pax_global_header00006660000000000000000000000064141506334160014515gustar00rootroot0000000000000052 comment=ee188dcb316a6866026f3c83cf319a4eeb4c21fd ares-126/000077500000000000000000000000001415063341600123215ustar00rootroot00000000000000ares-126/.github/000077500000000000000000000000001415063341600136615ustar00rootroot00000000000000ares-126/.github/workflows/000077500000000000000000000000001415063341600157165ustar00rootroot00000000000000ares-126/.github/workflows/build.yml000066400000000000000000000144021415063341600175410ustar00rootroot00000000000000name: Build on: push: branches: [ master ] tags: [ 'v*' ] pull_request: branches: [ master ] jobs: build: strategy: matrix: program: - ares platform: - name: windows os: windows-latest compiler: g++ shell: 'msys2 {0}' msystem: mingw64 msys-env: x86_64 - name: windows-clang os: windows-latest compiler: clang++ shell: 'msys2 {0}' msystem: clang64 msys-env: clang-x86_64 - name: macos os: macos-latest compiler: clang++ shell: sh - name: ubuntu os: ubuntu-latest compiler: g++ shell: sh name: ${{ matrix.program }}-${{ matrix.platform.name }} runs-on: ${{ matrix.platform.os }} defaults: run: shell: ${{ matrix.platform.shell }} steps: - name: Install MSYS2 Dependencies if: matrix.platform.shell == 'msys2 {0}' uses: msys2/setup-msys2@v2 with: msystem: ${{ matrix.platform.msystem }} install: make mingw-w64-${{ matrix.platform.msys-env }}-toolchain - name: Install Linux Dependencies if: runner.os == 'Linux' run: | sudo apt-get update -y -qq sudo apt-get install libsdl2-dev libgtksourceview2.0-dev libgtk2.0-dev libao-dev libopenal-dev - uses: actions/checkout@v2 - name: Make run: make -j4 -C desktop-ui build=optimized local=false lto=true compiler=${{ matrix.platform.compiler }} - name: Upload uses: actions/upload-artifact@v2 with: name: ${{ matrix.program }}-${{ matrix.platform.name }} path: desktop-ui/out/* release: if: github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/tags/') runs-on: ubuntu-latest needs: - build steps: - uses: actions/checkout@v2 with: path: 'src' - name: Download Artifacts uses: actions/download-artifact@v2 with: path: 'bin' - name: Package Artifacts run: | set -eu case ${GITHUB_REF} in refs/tags/*) suffix="-${GITHUB_REF#refs/tags/}" ;; refs/heads/master) suffix="-nightly" ;; *) suffix="" ;; esac srcdir="${GITHUB_WORKSPACE}/src" bindir="${GITHUB_WORKSPACE}/bin" # Hack: Workaround for GitHub artifacts losing attributes. chmod +x ${bindir}/ares-macos/ares.app/Contents/MacOS/ares for os in windows macos do mkdir "${os}" cd "${os}" # Package ares. outdir=ares${suffix} mkdir ${outdir} cp -ar ${bindir}/ares-${os}/* ${outdir} zip -r ../ares-${os}.zip ${outdir} cd - done - name: Create Release id: release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | set -eu github_rest() { local method="${1}" local url="https://api.github.com${2}" shift 2 >&2 echo "${method} ${url}" curl \ --fail \ -H "Accept: application/vnd.github.v3+json" \ -H "Authorization: token ${GITHUB_TOKEN}" \ -X "${method}" \ "${url}" \ "$@" } github_get_release_id_for_tag() { payload=$(github_rest GET "/repos/${GITHUB_REPOSITORY}/releases/tags/${1}") || return echo "${payload}" | jq .id } github_delete_release_by_id() { github_rest DELETE "/repos/${GITHUB_REPOSITORY}/releases/${1}" } github_create_release() { local payload="{ \"tag_name\": \"${1}\", \"target_commitish\": \"${2}\", \"name\": \"${3}\", \"body\": \"${4}\", \"draft\": ${5}, \"prerelease\": ${6} }" github_rest POST "/repos/${GITHUB_REPOSITORY}/releases" -d "${payload}" } make_nightly_release() { github_create_release \ nightly \ "${GITHUB_SHA}" \ "ares nightly $(date +"%Y-%m-%d")" \ "Auto-generated nightly release on $(date -u +"%Y-%m-%d %T %Z")" \ false \ true } make_version_release() { github_create_release \ "${1}" \ "${GITHUB_SHA}" \ "ares ${1}" \ "This is ares ${1}, released on $(date +"%Y-%m-%d")." \ false \ false } case ${GITHUB_REF} in refs/tags/*) # Create a new version release using the current revision. echo "UPLOAD_URL=$(make_version_release ${GITHUB_REF#refs/tags/} | jq -r .upload_url)" >> $GITHUB_ENV ;; refs/heads/master) # Check for an existing nightly release. { release_id=$(github_get_release_id_for_tag nightly); status=$?; } || true # Delete existing nightly release if it exists. case ${status} in 0) github_delete_release_by_id "${release_id}" ;; 22) >&2 echo "No current nightly release; skipping tag deletion." ;; *) >&2 echo "API call failed unexpectedly." && exit 1 ;; esac # Create a new nightly release using the current revision. echo "UPLOAD_URL=$(make_nightly_release | jq -r .upload_url)" >> $GITHUB_ENV ;; esac - name: Upload ares-windows uses: actions/upload-release-asset@v1 env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' } with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-windows.zip', asset_name: 'ares-windows.zip', asset_content_type: 'application/zip' } - name: Upload ares-macos uses: actions/upload-release-asset@v1 env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' } with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-macos.zip', asset_name: 'ares-macos.zip', asset_content_type: 'application/zip' } # - name: Upload ares-ubuntu # uses: actions/upload-release-asset@v1 # env: { GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}' } # with: { upload_url: '${{ env.UPLOAD_URL }}', asset_path: 'ares-ubuntu.zip', asset_name: 'ares-ubuntu.zip', asset_content_type: 'application/zip' } ares-126/LICENSE000066400000000000000000000013561415063341600133330ustar00rootroot00000000000000ares Copyright (c) 2004-2021 ares team, Near et al Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ares-126/README.md000066400000000000000000000014071415063341600136020ustar00rootroot00000000000000![ares logo](https://ares-emulator.github.io/images/logo.png) [![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://github.com/higan-emu/ares/blob/master/LICENSE) **ares** is a multi-system emulator that began development on October 14th, 2004. It is a descendent of [higan](https://github.com/higan-emu/higan) and [bsnes](https://github.com/bsnes-emu/bsnes/), and focuses on accuracy and preservation. Official Releases ----------------- Official releases are available from [the ares website](https://ares-emulator.github.io). Nightly Builds -------------- Automated, untested builds of ares are available for Windows and macOS as a [pre-release](https://github.com/higan-emu/ares/releases/tag/nightly). Only the latest nightly build is kept. ares-126/ares/000077500000000000000000000000001415063341600132535ustar00rootroot00000000000000ares-126/ares/GNUmakefile000066400000000000000000000041511415063341600153260ustar00rootroot00000000000000ifeq ($(platform),windows) options += -luuid -lkernel32 -luser32 -lgdi32 -lcomctl32 -lcomdlg32 -lshell32 options += -Wl,-enable-auto-import options += -Wl,-enable-runtime-pseudo-reloc else ifeq ($(platform),macos) else ifneq ($(filter $(platform),linux bsd),) options += -Wl,-export-dynamic options += -lX11 -lXext else $(error "ares is a library and cannot be built directly.") endif ares.objects := ares ares-fixed-allocator $(object.path)/ares.o: $(ares.path)/ares/ares.cpp $(object.path)/ares-fixed-allocator.o: $(ares.path)/ares/memory/fixed-allocator.cpp ifeq ($(vulkan),true) flags += -DVULKAN endif ifeq ($(profile),accuracy) flags += -DPROFILE_ACCURACY endif ifeq ($(profile),performance) flags += -DPROFILE_PERFORMANCE endif ifneq ($(filter $(cores),fc),) include $(ares.path)/fc/GNUmakefile endif ifneq ($(filter $(cores),sfc),) include $(ares.path)/sfc/GNUmakefile endif ifneq ($(filter $(cores),n64),) include $(ares.path)/n64/GNUmakefile endif ifneq ($(filter $(cores),sg),) include $(ares.path)/sg/GNUmakefile endif ifneq ($(filter $(cores),ms),) include $(ares.path)/ms/GNUmakefile endif ifneq ($(filter $(cores),md),) include $(ares.path)/md/GNUmakefile endif ifneq ($(filter $(cores),saturn),) include $(ares.path)/saturn/GNUmakefile endif ifneq ($(filter $(cores),ps1),) include $(ares.path)/ps1/GNUmakefile endif ifneq ($(filter $(cores),pce),) include $(ares.path)/pce/GNUmakefile endif ifneq ($(filter $(cores),msx),) include $(ares.path)/msx/GNUmakefile endif ifneq ($(filter $(cores),cv),) include $(ares.path)/cv/GNUmakefile endif ifneq ($(filter $(cores),gb),) include $(ares.path)/gb/GNUmakefile endif ifneq ($(filter $(cores),gba),) include $(ares.path)/gba/GNUmakefile endif ifneq ($(filter $(cores),ws),) include $(ares.path)/ws/GNUmakefile endif ifneq ($(filter $(cores),ng),) include $(ares.path)/ng/GNUmakefile endif ifneq ($(filter $(cores),ngp),) include $(ares.path)/ngp/GNUmakefile endif include $(ares.path)/component/GNUmakefile flags += $(foreach c,$(call strupper,$(cores)),-DCORE_$c) ares.objects := $(ares.objects:%=$(object.path)/%.o) ares-126/ares/Shaders/000077500000000000000000000000001415063341600146445ustar00rootroot00000000000000ares-126/ares/Shaders/AANN.shader/000077500000000000000000000000001415063341600166265ustar00rootroot00000000000000ares-126/ares/Shaders/AANN.shader/AANN.fs000066400000000000000000000037711415063341600177050ustar00rootroot00000000000000#version 150 //anti-aliased nearest-neighbor precision highp float; uniform sampler2D source[]; uniform vec4 sourceSize[]; uniform vec4 targetSize[]; in Vertex { vec2 texCoord; }; out vec4 fragColor; vec4 vpow(vec4 n, float e) { return vec4(pow(n.x, e), pow(n.y, e), pow(n.z, e), pow(n.w, e)); } vec4 toLQV(vec3 c) { return vec4(c.r, c.g, c.b, c.r * 0.2989 + c.g * 0.5870 + c.b * 0.1140); } vec3 fromLQV(vec4 c) { float f = c.w / (c.r * 0.2989 + c.g * 0.5870 + c.b * 0.1140); return vec3(c.rgb) * f; } vec3 percent(float ssize, float tsize, float coord) { float minfull = (coord * tsize - 0.5) / tsize * ssize; float maxfull = (coord * tsize + 0.5) / tsize * ssize; float realfull = floor(maxfull); if(minfull > realfull) { return vec3( 1, (realfull + 0.5) / ssize, (realfull + 0.5) / ssize ); } return vec3( (maxfull - realfull) / (maxfull - minfull), (realfull - 0.5) / ssize, (realfull + 0.5) / ssize ); } void main() { float srgb = 2.1; float gamma = 3.0; vec3 x = percent(sourceSize[0].x, targetSize[0].x, texCoord.x); vec3 y = percent(sourceSize[0].y, targetSize[0].y, texCoord.y); //get points to interpolate across in linear RGB vec4 a = toLQV(vpow(texture(source[0], vec2(x[1], y[1])), srgb).rgb); vec4 b = toLQV(vpow(texture(source[0], vec2(x[2], y[1])), srgb).rgb); vec4 c = toLQV(vpow(texture(source[0], vec2(x[1], y[2])), srgb).rgb); vec4 d = toLQV(vpow(texture(source[0], vec2(x[2], y[2])), srgb).rgb); //use perceptual gamma for luminance component a.w = pow(a.w, 1 / gamma); b.w = pow(b.w, 1 / gamma); c.w = pow(c.w, 1 / gamma); d.w = pow(d.w, 1 / gamma); //interpolate vec4 gammaLQV = (1.0 - x[0]) * (1.0 - y[0]) * a + (0.0 + x[0]) * (1.0 - y[0]) * b + (1.0 - x[0]) * (0.0 + y[0]) * c + (0.0 + x[0]) * (0.0 + y[0]) * d; //convert luminance gamma back to linear gammaLQV.w = pow(gammaLQV.w, gamma); //convert color back to sRGB fragColor = vpow(vec4(fromLQV(gammaLQV), 1), 1 / srgb); } ares-126/ares/Shaders/AANN.shader/manifest.bml000066400000000000000000000001171415063341600211270ustar00rootroot00000000000000input filter: nearest program fragment: AANN.fs output filter: nearest ares-126/ares/Shaders/CRT-Lottes.shader/000077500000000000000000000000001415063341600200115ustar00rootroot00000000000000ares-126/ares/Shaders/CRT-Lottes.shader/manifest.bml000066400000000000000000000001641415063341600223140ustar00rootroot00000000000000input filter: nearest program filter: nearest wrap: border fragment: shadertoy.fs output filter: nearestares-126/ares/Shaders/CRT-Lottes.shader/shadertoy.fs000066400000000000000000000077651415063341600223640ustar00rootroot00000000000000// // PUBLIC DOMAIN CRT STYLED SCAN-LINE SHADER // // by Timothy Lottes // // This is more along the style of a really good CGA arcade monitor. // With RGB inputs instead of NTSC. // The shadow mask example has the mask rotated 90 degrees for less chromatic aberration. // // Left it unoptimized to show the theory behind the algorithm. // // It is an example what I personally would want as a display option for pixel art games. // Please take and use, change, or whatever. // #version 150 uniform sampler2D source[]; uniform vec4 sourceSize[]; uniform int phase; in Vertex { vec2 texCoord; }; out vec4 fragColor; // Emulated input resolution. vec2 res=sourceSize[0].xy; // Hardness of scanline. // -8.0 = soft // -16.0 = medium float hardScan=-8.0; // Hardness of pixels in scanline. // -2.0 = soft // -4.0 = hard float hardPix=-3.0; // Display warp. // 0.0 = none // 1.0/8.0 = extreme vec2 warp=vec2(1.0/32.0,1.0/24.0); // Amount of shadow mask. float maskDark=0.5; float maskLight=1.5; //------------------------------------------------------------------------ // sRGB to Linear. // Assuing using sRGB typed textures this should not be needed. float ToLinear1(float c){return(c<=0.04045)?c/12.92:pow((c+0.055)/1.055,2.4);} vec3 ToLinear(vec3 c){return vec3(ToLinear1(c.r),ToLinear1(c.g),ToLinear1(c.b));} // Linear to sRGB. // Assuing using sRGB typed textures this should not be needed. float ToSrgb1(float c){return(c<0.0031308?c*12.92:1.055*pow(c,0.41666)-0.055);} vec3 ToSrgb(vec3 c){return vec3(ToSrgb1(c.r),ToSrgb1(c.g),ToSrgb1(c.b));} // Nearest emulated sample given floating point position and texel offset. // Also zero's off screen. vec3 Fetch(vec2 pos,vec2 off){ pos=(floor(pos*res+off)+vec2(0.5,0.5))/res; return ToLinear(1.2 * texture(source[0],pos.xy,-16.0).rgb);} // Distance in emulated pixels to nearest texel. vec2 Dist(vec2 pos){pos=pos*res;return -((pos-floor(pos))-vec2(0.5));} // 1D Gaussian. float Gaus(float pos,float scale){return exp2(scale*pos*pos);} // 3-tap Gaussian filter along horz line. vec3 Horz3(vec2 pos,float off){ vec3 b=Fetch(pos,vec2(-1.0,off)); vec3 c=Fetch(pos,vec2( 0.0,off)); vec3 d=Fetch(pos,vec2( 1.0,off)); float dst=Dist(pos).x; // Convert distance to weight. float scale=hardPix; float wb=Gaus(dst-1.0,scale); float wc=Gaus(dst+0.0,scale); float wd=Gaus(dst+1.0,scale); // Return filtered sample. return (b*wb+c*wc+d*wd)/(wb+wc+wd);} // 5-tap Gaussian filter along horz line. vec3 Horz5(vec2 pos,float off){ vec3 a=Fetch(pos,vec2(-2.0,off)); vec3 b=Fetch(pos,vec2(-1.0,off)); vec3 c=Fetch(pos,vec2( 0.0,off)); vec3 d=Fetch(pos,vec2( 1.0,off)); vec3 e=Fetch(pos,vec2( 2.0,off)); float dst=Dist(pos).x; // Convert distance to weight. float scale=hardPix; float wa=Gaus(dst-2.0,scale); float wb=Gaus(dst-1.0,scale); float wc=Gaus(dst+0.0,scale); float wd=Gaus(dst+1.0,scale); float we=Gaus(dst+2.0,scale); // Return filtered sample. return (a*wa+b*wb+c*wc+d*wd+e*we)/(wa+wb+wc+wd+we);} // Return scanline weight. float Scan(vec2 pos,float off){ float dst=Dist(pos).y; return Gaus(dst+off,hardScan);} // Allow nearest three lines to effect pixel. vec3 Tri(vec2 pos){ vec3 a=Horz3(pos,-1.0); vec3 b=Horz5(pos, 0.0); vec3 c=Horz3(pos, 1.0); float wa=Scan(pos,-1.0); float wb=Scan(pos, 0.0); float wc=Scan(pos, 1.0); return a*wa+b*wb+c*wc;} // Distortion of scanlines, and end of screen alpha. vec2 Warp(vec2 pos){ pos=pos*2.0-1.0; pos*=vec2(1.0+(pos.y*pos.y)*warp.x,1.0+(pos.x*pos.x)*warp.y); return pos*0.5+0.5;} // Shadow mask. vec3 Mask(vec2 pos){ pos.x+=pos.y*3.0; vec3 mask=vec3(maskDark,maskDark,maskDark); pos.x=fract(pos.x/6.0); if(pos.x<0.333)mask.r=maskLight; else if(pos.x<0.666)mask.g=maskLight; else mask.b=maskLight; return mask;} void main() { vec2 pos = texCoord.xy * 1.0001; hardScan=-12.0; // maskDark=maskLight; pos=Warp(pos.xy); fragColor.rgb=Tri(pos)*Mask(gl_FragCoord.xy); fragColor.a=1.0; fragColor = vec4(ToSrgb(fragColor.rgb), fragColor.a); } ares-126/ares/Shaders/CRT-Lottes2.shader/000077500000000000000000000000001415063341600200735ustar00rootroot00000000000000ares-126/ares/Shaders/CRT-Lottes2.shader/lottes.fs000066400000000000000000000571531415063341600217520ustar00rootroot00000000000000#version 150 //_____________________________/\_______________________________ //============================================================== // // // [CRTS] PUBLIC DOMAIN CRT-STYLED SCALAR - 20180120b // // by Timothy Lottes // https://www.shadertoy.com/view/MtSfRK // adapted for quark syntax by hunterk // // //============================================================== //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //_____________________________/\_______________________________ //============================================================== // // WHAT'S NEW // //-------------------------------------------------------------- // Evolution of prior shadertoy example //-------------------------------------------------------------- // This one is semi-optimized // - Less texture fetches // - Didn't get to instruction level optimization // - Could likely use texture fetch to generate phosphor mask //-------------------------------------------------------------- // Added options to disable unused features //-------------------------------------------------------------- // Added in exposure matching // - Given scan-line effect and mask always darkens image // - Uses generalized tonemapper to boost mid-level // - Note this can compress highlights // - And won't get back peak brightness // - But best option if one doesn't want as much darkening //-------------------------------------------------------------- // Includes option saturation and contrast controls //-------------------------------------------------------------- // Added in subtractive aperture grille // - This is a bit brighter than prior //-------------------------------------------------------------- // Make sure input to this filter is already low-resolution // - This is not designed to work on titles doing the following // - Rendering to hi-res with nearest sampling //-------------------------------------------------------------- // Added a fast and more pixely option for 2 tap/pixel //-------------------------------------------------------------- // Improved the vignette when WARP is enabled //-------------------------------------------------------------- // Didn't test HLSL or CPU options // - Will incorportate patches if they are broken // - But out of time to try them myself //============================================================== //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //_____________________________/\_______________________________ //============================================================== // // LICENSE = UNLICENSE (aka PUBLIC DOMAIN) // //-------------------------------------------------------------- // This is free and unencumbered software released into the // public domain. //-------------------------------------------------------------- // Anyone is free to copy, modify, publish, use, compile, sell, // or distribute this software, either in source code form or as // a compiled binary, for any purpose, commercial or // non-commercial, and by any means. //-------------------------------------------------------------- // In jurisdictions that recognize copyright laws, the author or // authors of this software dedicate any and all copyright // interest in the software to the public domain. We make this // dedication for the benefit of the public at large and to the // detriment of our heirs and successors. We intend this // dedication to be an overt act of relinquishment in perpetuity // of all present and future rights to this software under // copyright law. //-------------------------------------------------------------- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY // KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN // AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT // OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. //-------------------------------------------------------------- // For more information, please refer to // //============================================================== //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// #define MASK 1.0 #define MASK_INTENSITY 0.5 #define SCANLINE_THINNESS 0.5 #define SCAN_BLUR 2.5 #define CURVATURE 0.02 #define TRINITRON_CURVE 0.0 #define CORNER 3.0 #define CRT_GAMMA 2.4 uniform sampler2D source[]; uniform vec4 sourceSize[]; uniform vec4 outputSize; in Vertex { vec2 vTexCoord; }; out vec4 FragColor; //_____________________________/\_______________________________ //============================================================== // // GAMMA FUNCTIONS // //-------------------------------------------------------------- //-------------------------------------------------------------- // Since shadertoy doesn't have sRGB textures // And we need linear input into shader // Don't do this in your code float FromSrgb1(float c){ return (c<=0.04045)?c*(1.0/12.92): pow(c*(1.0/1.055)+(0.055/1.055),CRT_GAMMA);} //-------------------------------------------------------------- vec3 FromSrgb(vec3 c){return vec3( FromSrgb1(c.r),FromSrgb1(c.g),FromSrgb1(c.b));} // Convert from linear to sRGB // Since shader toy output is not linear float ToSrgb1(float c){ return(c<0.0031308?c*12.92:1.055*pow(c,0.41666)-0.055);} //-------------------------------------------------------------- vec3 ToSrgb(vec3 c){return vec3( ToSrgb1(c.r),ToSrgb1(c.g),ToSrgb1(c.b));} //-------------------------------------------------------------- //_____________________________/\_______________________________ //============================================================== // // DEFINES // //-------------------------------------------------------------- // CRTS_CPU - CPU code // CRTS_GPU - GPU code //-------------------------------------------------------------- // CRTS_GLSL - GLSL // CRTS_HLSL - HLSL (not tested yet) //-------------------------------------------------------------- // CRTS_DEBUG - Define to see on/off split screen //-------------------------------------------------------------- // CRTS_WARP - Apply screen warp //-------------------------------------------------------------- // CRTS_2_TAP - Faster very pixely 2-tap filter (off is 8) //-------------------------------------------------------------- // CRTS_MASK_GRILLE - Aperture grille (aka Trinitron) // CRTS_MASK_GRILLE_LITE - Brighter (subtractive channels) // CRTS_MASK_NONE - No mask // CRTS_MASK_SHADOW - Horizontally stretched shadow mask //-------------------------------------------------------------- // CRTS_TONE - Normalize mid-level and process color // CRTS_CONTRAST - Process color - enable contrast control // CRTS_SATURATION - Process color - enable saturation control //-------------------------------------------------------------- #define CRTS_STATIC #define CrtsPow #define CRTS_RESTRICT //============================================================== //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //============================================================== // SETUP FOR CRTS //-------------------------------------------------------------- //============================================================== //#define CRTS_DEBUG 1 #define CRTS_GPU 1 #define CRTS_GLSL 1 //-------------------------------------------------------------- //#define CRTS_2_TAP 1 //-------------------------------------------------------------- #define CRTS_TONE 1 #define CRTS_CONTRAST 0 #define CRTS_SATURATION 0 //-------------------------------------------------------------- #define CRTS_WARP 1 //-------------------------------------------------------------- // Try different masks -> moved to runtime parameters //#define CRTS_MASK_GRILLE 1 //#define CRTS_MASK_GRILLE_LITE 1 //#define CRTS_MASK_NONE 1 //#define CRTS_MASK_SHADOW 1 //-------------------------------------------------------------- // Scanline thinness // 0.50 = fused scanlines // 0.70 = recommended default // 1.00 = thinner scanlines (too thin) #define INPUT_THIN (0.5 + (0.5 * SCANLINE_THINNESS)) //-------------------------------------------------------------- // Horizonal scan blur // -3.0 = pixely // -2.5 = default // -2.0 = smooth // -1.0 = too blurry #define INPUT_BLUR (-1.0 * SCAN_BLUR) //-------------------------------------------------------------- // Shadow mask effect, ranges from, // 0.25 = large amount of mask (not recommended, too dark) // 0.50 = recommended default // 1.00 = no shadow mask #define INPUT_MASK (1.0 - MASK_INTENSITY) //-------------------------------------------------------------- #define INPUT_X sourceSize[0].x #define INPUT_Y sourceSize[0].y //-------------------------------------------------------------- // Setup the function which returns input image color vec3 CrtsFetch(vec2 uv){ // For shadertoy, scale to get native texels in the image uv*=vec2(INPUT_X,INPUT_Y)/sourceSize[0].xy; // Move towards intersting parts // uv+=vec2(0.5,0.5); // Non-shadertoy case would not have the color conversion return FromSrgb(texture(source[0],uv.xy,-16.0).rgb);} //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //_____________________________/\_______________________________ //============================================================== // // GPU CODE // //============================================================== #ifdef CRTS_GPU //_____________________________/\_______________________________ //============================================================== // PORTABILITY //============================================================== #ifdef CRTS_GLSL #define CrtsF1 float #define CrtsF2 vec2 #define CrtsF3 vec3 #define CrtsF4 vec4 #define CrtsFractF1 fract #define CrtsRcpF1(x) (1.0/(x)) #define CrtsSatF1(x) clamp((x),0.0,1.0) //-------------------------------------------------------------- CrtsF1 CrtsMax3F1(CrtsF1 a,CrtsF1 b,CrtsF1 c){ return max(a,max(b,c));} #endif //============================================================== #ifdef CRTS_HLSL #define CrtsF1 float #define CrtsF2 float2 #define CrtsF3 float3 #define CrtsF4 float4 #define CrtsFractF1 frac #define CrtsRcpF1(x) (1.0/(x)) #define CrtsSatF1(x) saturate(x) //-------------------------------------------------------------- CrtsF1 CrtsMax3F1(CrtsF1 a,CrtsF1 b,CrtsF1 c){ return max(a,max(b,c));} #endif //_____________________________/\_______________________________ //============================================================== // TONAL CONTROL CONSTANT GENERATION //-------------------------------------------------------------- // This is in here for rapid prototyping // Please use the CPU code and pass in as constants //============================================================== CrtsF4 CrtsTone( CrtsF1 contrast, CrtsF1 saturation, CrtsF1 thin, CrtsF1 mask){ //-------------------------------------------------------------- if(MASK == 0.0) mask=1.0; //-------------------------------------------------------------- if(MASK == 1.0){ // Normal R mask is {1.0,mask,mask} // LITE R mask is {mask,1.0,1.0} mask=0.5+mask*0.5; } //-------------------------------------------------------------- CrtsF4 ret; CrtsF1 midOut=0.18/((1.5-thin)*(0.5*mask+0.5)); CrtsF1 pMidIn=pow(0.18,contrast); ret.x=contrast; ret.y=((-pMidIn)+midOut)/((1.0-pMidIn)*midOut); ret.z=((-pMidIn)*midOut+pMidIn)/(midOut*(-pMidIn)+midOut); ret.w=contrast+saturation; return ret;} //_____________________________/\_______________________________ //============================================================== // MASK //-------------------------------------------------------------- // Letting LCD/OLED pixel elements function like CRT phosphors // So "phosphor" resolution scales with display resolution //-------------------------------------------------------------- // Not applying any warp to the mask (want high frequency) // Real aperture grille has a mask which gets wider on ends // Not attempting to be "real" but instead look the best //-------------------------------------------------------------- // Shadow mask is stretched horizontally // RRGGBB // GBBRRG // RRGGBB // This tends to look better on LCDs than vertical // Also 2 pixel width is required to get triad centered //-------------------------------------------------------------- // The LITE version of the Aperture Grille is brighter // Uses {dark,1.0,1.0} for R channel // Non LITE version uses {1.0,dark,dark} //-------------------------------------------------------------- // 'pos' - This is 'fragCoord.xy' // Pixel {0,0} should be {0.5,0.5} // Pixel {1,1} should be {1.5,1.5} //-------------------------------------------------------------- // 'dark' - Exposure of of masked channel // 0.0=fully off, 1.0=no effect //============================================================== CrtsF3 CrtsMask(CrtsF2 pos,CrtsF1 dark){ if(MASK == 2.0){ CrtsF3 m=CrtsF3(dark,dark,dark); CrtsF1 x=CrtsFractF1(pos.x*(1.0/3.0)); if(x<(1.0/3.0))m.r=1.0; else if(x<(2.0/3.0))m.g=1.0; else m.b=1.0; return m; } //-------------------------------------------------------------- if(MASK == 1.0){ CrtsF3 m=CrtsF3(1.0,1.0,1.0); CrtsF1 x=CrtsFractF1(pos.x*(1.0/3.0)); if(x<(1.0/3.0))m.r=dark; else if(x<(2.0/3.0))m.g=dark; else m.b=dark; return m; } //-------------------------------------------------------------- if(MASK == 0.0){ return CrtsF3(1.0,1.0,1.0); } //-------------------------------------------------------------- if(MASK == 3.0){ pos.x+=pos.y*2.9999; CrtsF3 m=CrtsF3(dark,dark,dark); CrtsF1 x=CrtsFractF1(pos.x*(1.0/6.0)); if(x<(1.0/3.0))m.r=1.0; else if(x<(2.0/3.0))m.g=1.0; else m.b=1.0; return m; } } //_____________________________/\_______________________________ //============================================================== // FILTER ENTRY //-------------------------------------------------------------- // Input must be linear // Output color is linear //-------------------------------------------------------------- // Must have fetch function setup: CrtsF3 CrtsFetch(CrtsF2 uv) // - The 'uv' range is {0.0 to 1.0} for input texture // - Output of this must be linear color //-------------------------------------------------------------- // SCANLINE MATH & AUTO-EXPOSURE NOTES // =================================== // Each output line has contribution from at most 2 scanlines // Scanlines are shaped by a windowed cosine function // This shape blends together well with only 2 lines of overlap //-------------------------------------------------------------- // Base scanline intensity is as follows // which leaves output intensity range from {0 to 1.0} // -------- // thin := range {thick 0.5 to thin 1.0} // off := range {0.0 to <1.0}, // sub-pixel offset between two scanlines // -------- // a0=cos(min(0.5, off *thin)*2pi)*0.5+0.5; // a1=cos(min(0.5,(1.0-off)*thin)*2pi)*0.5+0.5; //-------------------------------------------------------------- // This leads to a image darkening factor of roughly: // {(1.5-thin)/1.0} // This is further reduced by the mask: // {1.0/2.0+mask*1.0/2.0} // Reciprocal of combined effect is used for auto-exposure // to scale up the mid-level in the tonemapper //============================================================== CrtsF3 CrtsFilter( //-------------------------------------------------------------- // SV_POSITION, fragCoord.xy CrtsF2 ipos, //-------------------------------------------------------------- // inputSize / outputSize (in pixels) CrtsF2 inputSizeDivOutputSize, //-------------------------------------------------------------- // 0.5 * inputSize (in pixels) CrtsF2 halfInputSize, //-------------------------------------------------------------- // 1.0 / inputSize (in pixels) CrtsF2 rcpInputSize, //-------------------------------------------------------------- // 1.0 / outputSize (in pixels) CrtsF2 rcpOutputSize, //-------------------------------------------------------------- // 2.0 / outputSize (in pixels) CrtsF2 twoDivOutputSize, //-------------------------------------------------------------- // inputSize.y CrtsF1 inputHeight, //-------------------------------------------------------------- // Warp scanlines but not phosphor mask // 0.0 = no warp // 1.0/64.0 = light warping // 1.0/32.0 = more warping // Want x and y warping to be different (based on aspect) CrtsF2 warp, //-------------------------------------------------------------- // Scanline thinness // 0.50 = fused scanlines // 0.70 = recommended default // 1.00 = thinner scanlines (too thin) // Shared with CrtsTone() function CrtsF1 thin, //-------------------------------------------------------------- // Horizonal scan blur // -3.0 = pixely // -2.5 = default // -2.0 = smooth // -1.0 = too blurry CrtsF1 blur, //-------------------------------------------------------------- // Shadow mask effect, ranges from, // 0.25 = large amount of mask (not recommended, too dark) // 0.50 = recommended default // 1.00 = no shadow mask // Shared with CrtsTone() function CrtsF1 mask, //-------------------------------------------------------------- // Tonal curve parameters generated by CrtsTone() CrtsF4 tone //-------------------------------------------------------------- ){ //-------------------------------------------------------------- #ifdef CRTS_DEBUG CrtsF2 uv=ipos*rcpOutputSize; // Show second half processed, and first half un-processed if(uv.x<0.5){ // Force nearest to get squares uv*=1.0/rcpInputSize; uv=floor(uv)+CrtsF2(0.5,0.5); uv*=rcpInputSize; CrtsF3 color=CrtsFetch(uv); return color;} #endif //-------------------------------------------------------------- // Optional apply warp CrtsF2 pos; #ifdef CRTS_WARP // Convert to {-1 to 1} range pos=ipos*twoDivOutputSize-CrtsF2(1.0,1.0); // Distort pushes image outside {-1 to 1} range pos*=CrtsF2( 1.0+(pos.y*pos.y)*warp.x, 1.0+(pos.x*pos.x)*warp.y); // TODO: Vignette needs optimization CrtsF1 vin=(1.0-( (1.0-CrtsSatF1(pos.x*pos.x))*(1.0-CrtsSatF1(pos.y*pos.y)))) * (0.998 + (0.001 * CORNER)); vin=CrtsSatF1((-vin)*inputHeight+inputHeight); // Leave in {0 to inputSize} pos=pos*halfInputSize+halfInputSize; #else pos=ipos*inputSizeDivOutputSize; #endif //-------------------------------------------------------------- // Snap to center of first scanline CrtsF1 y0=floor(pos.y-0.5)+0.5; #ifdef CRTS_2_TAP // Using Inigo's "Improved Texture Interpolation" // http://iquilezles.org/www/articles/texture/texture.htm pos.x+=0.5; CrtsF1 xi=floor(pos.x); CrtsF1 xf=pos.x-xi; xf=xf*xf*xf*(xf*(xf*6.0-15.0)+10.0); CrtsF1 x0=xi+xf-0.5; CrtsF2 p=CrtsF2(x0*rcpInputSize.x,y0*rcpInputSize.y); // Coordinate adjusted bilinear fetch from 2 nearest scanlines CrtsF3 colA=CrtsFetch(p); p.y+=rcpInputSize.y; CrtsF3 colB=CrtsFetch(p); #else // Snap to center of one of four pixels CrtsF1 x0=floor(pos.x-1.5)+0.5; // Inital UV position CrtsF2 p=CrtsF2(x0*rcpInputSize.x,y0*rcpInputSize.y); // Fetch 4 nearest texels from 2 nearest scanlines CrtsF3 colA0=CrtsFetch(p); p.x+=rcpInputSize.x; CrtsF3 colA1=CrtsFetch(p); p.x+=rcpInputSize.x; CrtsF3 colA2=CrtsFetch(p); p.x+=rcpInputSize.x; CrtsF3 colA3=CrtsFetch(p); p.y+=rcpInputSize.y; CrtsF3 colB3=CrtsFetch(p); p.x-=rcpInputSize.x; CrtsF3 colB2=CrtsFetch(p); p.x-=rcpInputSize.x; CrtsF3 colB1=CrtsFetch(p); p.x-=rcpInputSize.x; CrtsF3 colB0=CrtsFetch(p); #endif //-------------------------------------------------------------- // Vertical filter // Scanline intensity is using sine wave // Easy filter window and integral used later in exposure CrtsF1 off=pos.y-y0; CrtsF1 pi2=6.28318530717958; CrtsF1 hlf=0.5; CrtsF1 scanA=cos(min(0.5, off *thin )*pi2)*hlf+hlf; CrtsF1 scanB=cos(min(0.5,(-off)*thin+thin)*pi2)*hlf+hlf; //-------------------------------------------------------------- #ifdef CRTS_2_TAP #ifdef CRTS_WARP // Get rid of wrong pixels on edge scanA*=vin; scanB*=vin; #endif // Apply vertical filter CrtsF3 color=(colA*scanA)+(colB*scanB); #else // Horizontal kernel is simple gaussian filter CrtsF1 off0=pos.x-x0; CrtsF1 off1=off0-1.0; CrtsF1 off2=off0-2.0; CrtsF1 off3=off0-3.0; CrtsF1 pix0=exp2(blur*off0*off0); CrtsF1 pix1=exp2(blur*off1*off1); CrtsF1 pix2=exp2(blur*off2*off2); CrtsF1 pix3=exp2(blur*off3*off3); CrtsF1 pixT=CrtsRcpF1(pix0+pix1+pix2+pix3); #ifdef CRTS_WARP // Get rid of wrong pixels on edge pixT*=vin; #endif scanA*=pixT; scanB*=pixT; // Apply horizontal and vertical filters CrtsF3 color= (colA0*pix0+colA1*pix1+colA2*pix2+colA3*pix3)*scanA + (colB0*pix0+colB1*pix1+colB2*pix2+colB3*pix3)*scanB; #endif //-------------------------------------------------------------- // Apply phosphor mask color*=CrtsMask(ipos,mask); //-------------------------------------------------------------- // Optional color processing #ifdef CRTS_TONE // Tonal control, start by protecting from /0 CrtsF1 peak=max(1.0/(256.0*65536.0), CrtsMax3F1(color.r,color.g,color.b)); // Compute the ratios of {R,G,B} CrtsF3 ratio=color*CrtsRcpF1(peak); // Apply tonal curve to peak value #ifdef CRTS_CONTRAST peak=pow(peak,tone.x); #endif peak=peak*CrtsRcpF1(peak*tone.y+tone.z); // Apply saturation #ifdef CRTS_SATURATION ratio=pow(ratio,CrtsF3(tone.w,tone.w,tone.w)); #endif // Reconstruct color return ratio*peak; #else return color; #endif //-------------------------------------------------------------- } #endif void main() { vec2 warp_factor; warp_factor.x = CURVATURE; warp_factor.y = (3.0 / 4.0) * warp_factor.x; // assume 4:3 aspect warp_factor.x *= (1.0 - TRINITRON_CURVE); FragColor.rgb = CrtsFilter(vTexCoord.xy * outputSize.xy, sourceSize[0].xy * outputSize.zw, sourceSize[0].xy * vec2(0.5,0.5), sourceSize[0].zw, outputSize.zw, 2.0 * outputSize.zw, sourceSize[0].y, warp_factor, INPUT_THIN, INPUT_BLUR, INPUT_MASK, CrtsTone(1.0,0.0,INPUT_THIN,INPUT_MASK)); // Shadertoy outputs non-linear color FragColor.rgb = ToSrgb(FragColor.rgb); }ares-126/ares/Shaders/CRT-Lottes2.shader/lottes.vs000066400000000000000000000003361415063341600217610ustar00rootroot00000000000000#version 150 in vec4 position; in vec2 texCoord; out Vertex { vec2 vTexCoord; }; uniform vec4 targetSize; uniform vec4 sourceSize[]; void main() { gl_Position = position; vTexCoord = texCoord; }ares-126/ares/Shaders/CRT-Lottes2.shader/manifest.bml000066400000000000000000000002311415063341600223710ustar00rootroot00000000000000input filter: nearest program filter: nearest vertex: lottes.vs fragment: lottes.fs output height: 0 width: 0 filter: linearares-126/ares/Shaders/Curvature.shader/000077500000000000000000000000001415063341600200715ustar00rootroot00000000000000ares-126/ares/Shaders/Curvature.shader/curvature.fs000066400000000000000000000005731415063341600224500ustar00rootroot00000000000000#version 150 #define distortion 0.2 uniform sampler2D source[]; uniform vec4 sourceSize[]; in Vertex { vec2 texCoord; }; out vec4 fragColor; vec2 radialDistortion(vec2 coord) { vec2 cc = coord - vec2(0.5); float dist = dot(cc, cc) * distortion; return coord + cc * (1.0 - dist) * dist; } void main() { fragColor = texture(source[0], radialDistortion(texCoord)); } ares-126/ares/Shaders/Curvature.shader/manifest.bml000066400000000000000000000001011415063341600223630ustar00rootroot00000000000000program filter: linear wrap: border fragment: curvature.fs ares-126/ares/Shaders/Edge Detection.shader/000077500000000000000000000000001415063341600206545ustar00rootroot00000000000000ares-126/ares/Shaders/Edge Detection.shader/edge-detection.fs000066400000000000000000000007741415063341600240760ustar00rootroot00000000000000#version 150 uniform sampler2D source[]; uniform vec4 sourceSize[]; in Vertex { vec2 texCoord; }; out vec4 fragColor; vec3 grayscale(vec3 color) { return vec3(dot(color, vec3(0.3, 0.59, 0.11))); } void main() { vec2 offset = fract(texCoord * sourceSize[0].xy) - 0.5; offset /= sourceSize[0].xy; vec3 cx = texture(source[0], texCoord - offset).xyz; vec3 cy = texture(source[0], texCoord).xyz; vec3 cz = vec3(5.0 * grayscale(abs(cx - cy))); fragColor = vec4(clamp(cz, 0.0, 1.0), 1.0); } ares-126/ares/Shaders/Edge Detection.shader/manifest.bml000066400000000000000000000001041415063341600231510ustar00rootroot00000000000000program filter: linear wrap: edge fragment: edge-detection.fs ares-126/ares/Shaders/GritsScanlines.shader/000077500000000000000000000000001415063341600210415ustar00rootroot00000000000000ares-126/ares/Shaders/GritsScanlines.shader/Fake-Self-Illumination.png000066400000000000000000000050351415063341600257510ustar00rootroot00000000000000PNG  IHDRv6 IDAThޅZnO$Rǒ?^ddEvRwQqP3p➞~Tu ᐦiEQEQUU4}ߟNi,eq eYeeYByeٓ/˲m۶m8z.r^ax{{Ky^UU]]}?4Mnԟeu]Ctr,˂-ߓ$I$˲<ϋ(}à&n4M!O!uC~گkt: p>a<_~? 4M&} 0i=!0i?~@W!0ϟMR,I=}K)?~^p8lۦI@?)Fa~x삟D6y]s7C,B Q(xad8Ϩ jnu!*x~>J*GDgQS] !>3؋PR_P*Ni5_uKXVux2>ꂲe]W?RٓyXYe'!??-a|S(4!yUyȫb9a'Hop+5@Hم)MieIU?3۶[\Y$ VOyZϩxnIgi( [Á,@k|,KME@ţ.+!ES0Mh9 V;D'IiclRomZe ,_וur,s/$+FZT91̱bt_WuX߀x LhxPOB?2Gy8}ϊsCQMu߱*+Ӂm礨 >oM>MS8ܶN` P@j栿:Φ ;(L' IZUhx4AmuzسG˚bgR#Z:wEp_ l5ECJy%@h΢9|Hebx#8pՁF9u z/_^^6xJ02v&@OP<!m BZpB@0>Vu'AȨ=*ϾMEkųii bZ-AH"jklF[W}s(x<)<И:fovO>AèG i14F&g0IEy#XxEA0)NvV ƌ =HQMq)-sL3V%&f-HǢ>~v0S~7֑ L4:"i2Z8"F;<؈wA6I"0"jJ "sD6 ".f `V]JJh~ukC݌wg`~WFzO ~b8#ik2)x<*R;6=.2( VWiAFhSOm҅|z+ y\rL,ʇȷ7"|ժ0Y Ot5~f\.a5ᆇBNgW6=Q,cgK6G, ^9VhD β*:B#fZmihur4[ /t ;ih c'%}7_X{T {GjߐM 6QQo))zސ)o l l|hu`#!GCs8"HcMC9_>r^!M??IV4Mڣ [s]%~IENDB`ares-126/ares/Shaders/GritsScanlines.shader/GritsScanlines.fs000066400000000000000000000070451415063341600243310ustar00rootroot00000000000000#version 150 // GritsScanlines by torridgristle // license: public domain (https://forums.libretro.com/t/lightweight-lut-based-scanline-glow-concept-prototype-glsl/18336/7) /* Runtime parameters #in LuminanceDawnbringer #in LuminanceLUT #in ScanlinesOpacity #in GammaCorrection #in TrinitronColors */ // static parameters //#define LuminanceDawnbringer #define LuminanceLUT //#define TrinitronColors #define ScanlinesOpacity 0.9 //#define GammaCorrection 1.2 uniform sampler2D source[]; uniform vec4 sourceSize[]; uniform vec4 targetSize; uniform sampler2D pixmap[]; in Vertex { vec2 texCoord; }; out vec4 fragColor; #ifdef LuminanceLUT #define LUT_SizeLum 16.0 // Code taken from RetroArch's LUT shader float luminancelut(vec4 org) { vec4 imgColorLum = org; float redLum = ( imgColorLum.r * (LUT_SizeLum - 1.0) + 0.4999 ) / (LUT_SizeLum * LUT_SizeLum); float greenLum = ( imgColorLum.g * (LUT_SizeLum - 1.0) + 0.4999 ) / LUT_SizeLum; float blue1Lum = (floor( imgColorLum.b * (LUT_SizeLum - 1.0) ) / LUT_SizeLum) + redLum; float blue2Lum = (ceil( imgColorLum.b * (LUT_SizeLum - 1.0) ) / LUT_SizeLum) + redLum; float mixerLum = clamp(max((imgColorLum.b - blue1Lum) / (blue2Lum - blue1Lum), 0.0), 0.0, 32.0); float color1Lum = texture(pixmap[1], vec2( blue1Lum, greenLum )).x; float color2Lum = texture(pixmap[1], vec2( blue2Lum, greenLum )).x; return mix(color1Lum, color2Lum, mixerLum); } #endif #ifdef TrinitronColors #define LUT_SizeTrinitron 32.0 vec4 TrinitronD50(vec4 org) { vec4 imgColorTrinitron = org; float redTrinitron = ( imgColorTrinitron.r * (LUT_SizeTrinitron - 1.0) + 0.4999 ) / (LUT_SizeTrinitron * LUT_SizeTrinitron); float greenTrinitron = ( imgColorTrinitron.g * (LUT_SizeTrinitron - 1.0) + 0.4999 ) / LUT_SizeTrinitron; float blue1Trinitron = (floor( imgColorTrinitron.b * (LUT_SizeTrinitron - 1.0) ) / LUT_SizeTrinitron) + redTrinitron; float blue2Trinitron = (ceil( imgColorTrinitron.b * (LUT_SizeTrinitron - 1.0) ) / LUT_SizeTrinitron) + redTrinitron; float mixerTrinitron = clamp(max((imgColorTrinitron.b - blue1Trinitron) / (blue2Trinitron - blue1Trinitron), 0.0), 0.0, 32.0); vec4 color1Trinitron = texture(pixmap[2], vec2( blue1Trinitron, greenTrinitron )); vec4 color2Trinitron = texture(pixmap[2], vec2( blue2Trinitron, greenTrinitron )); vec4 fragColorTrinitron = mix(color1Trinitron, color2Trinitron, mixerTrinitron); return vec4(pow(fragColorTrinitron.rgb,vec3(GammaCorrection,GammaCorrection,GammaCorrection)),1.0); } #endif void main() { //Source Image vec4 org = texture(source[0], texCoord); #ifdef LuminanceLUT // Use a 3DLUT instead of an equation so that it can use any arbitrary mess you can come up with. float luminance = luminancelut(org); #elif defined LuminanceDawnbringer // Dawnbringer's brightness equation from Dawnbringer's Toolbox scripts for Grafx2 float luminance = sqrt(org.r*org.r*0.0676 + org.g*org.g*0.3025 + org.b*org.b*0.0361) * 1.5690256395005606; #else // Plain, standard, fine; slightly faster float luminance = ((0.299*org.r) + (0.587*org.g) + (0.114*org.b)); #endif // Don't let it exceed 1.0 luminance = clamp(luminance, 0.0, 1.0); // Scanline Mapping, based on the Phosphor LUT shader's method of tiling a texture over the screen vec2 LUTeffectiveCoord = vec2(luminance,fract((texCoord.y*targetSize.y)/4.0)); // Scanline Layer vec4 screen = texture(pixmap[0], LUTeffectiveCoord); // Output multiplying the scanlines into the original image, with control over opacity #ifdef TrinitronColors org = TrinitronD50(org); #endif fragColor = ((screen*ScanlinesOpacity)+(1.0 - ScanlinesOpacity)) * (org); } ares-126/ares/Shaders/GritsScanlines.shader/Scanline-LUT-4px.png000066400000000000000000000054171415063341600244650ustar00rootroot00000000000000PNG  IHDR& ) pHYs+ OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F:IDATx @@aVF֘A^D껻@D$"̪nf49 IENDB`ares-126/ares/Shaders/GritsScanlines.shader/Trinitron D50 Absolute Colorimetric - LUT.png000066400000000000000000002145761415063341600310040ustar00rootroot00000000000000PNG  IHDR EIDATxڤ;l 7~; ׹\ v8G.lcՐ #*S>_S!P&ݸC -rʗh^B֫>9w4H$E"HQR"=P!:RjV\ҋ9j׭& i;$=d )H>-2 _ !~qR"=P!}jԭ~C_Wl~X$$:K`$ &%RZ*ݓI#4j%3ʪfY*kCsbS1łP.UH%*!jH))e"NJX HI*dCH̫ZeI〉YUP\G=4<4sL ˀv Nꅸ^$ҋEzH}Rb=Pa8RjéP8j6ԭ&`l;=q1 >3-2`^i!n\ `1I)@ˀ=9p@^ j@ ԭ@>GGSc9cpBNt QwĠX ŠN b ܓ H,AV` 5z.hF#1xA  QD#b1\ ` `I)F˰}9vTX^jxՌ׭x|]29Sj6iN =i>z ^UHZ ]4#fҌ^K3,e +3LNk3gLɘ̙%SeLۙ303373E3s"BXH\Q:WɆT,bw쾆=Ա9=7g&df9+{u;t7ĎN1vN +g+WQ+ &e*xU@ ¾\_ yc\(Y pBU =0OFޓ;;'2t"O?'rUQ*jTETbHS]mq_W|/żxf.EVbUx=8#o-N_\PqEhQ B0k. "t}sEt|qf)Prr]x=<@#_-O_^py) / ɲR˩V˙Kt\XQzn=3rM\̽pgVqv]\u@s;<-2̭"uUԺNW+.}ŧ Xyf<7WrKkV9*rݕҁ*=2VFhyUdeTEmi 5f5܆jT{f=ԎP;8gUqך`nw=B{t؇}H8p199| _ hx D7;߰o{b8 #9\Dp P ;Cc9v:ǰsL8Qx55=fY&'+j"lMhbg8s388ho, x2wd77t#6O|? އf.2>g?'fEV=vfy.dbN "Z&ړo@_{?@%%:$Z&ݓ T VJXo @e=_ zX/u $H ̰'@?@/l hS l Œ ء:d8:r?@{XȺl @6Rg?I MKi4n @}Ӝ/१(=酟^U"  䙤 t5S'}WL_YG)60> LS*rF T]un_8 "(uTJ֨@հ7 $+S䪂ZU06Po)j _@]Tj4X66p5e@ ?@,Pe[@̺ <wW`g ;70x6S6057k@ b o``>y5ۺ35}ӽĺ~`3=s@l>@pn/[8`X~ <6l OgbL잉 O<3@ #t2 2Q@.J*DBEGq^'>ՋKF1gW: i%m @^q/[嫰\(BH(ER/_IVC~C_Wl~:2D'2 ,䒤\J+{JZzuSdrfi*dM(rޫ9XˠrV S H~R&UJ@eʀ\+irOljXU"#_,ea,yATWHK䩁,HBVd "{r#Y#pDDXDHDrj)@N *JVQjPC騼:5R%YTA]TC jx_jxjO-U8%DRB,%$ĊDzEڮH#tPNҴ*IjGtސ>3K4gIWmtN7tE<G)Fω?X(2 EFD *3IUVg5Cm& 3SdpLՖ3Mg<!ޗb9Y.COWo̮Pfʬ]ET٠*TgiMv_=eslޘ=3eK,gVlݞm:mw r8Xy D<Q*DLRj}sgr&odLp6 0ut1m7̌ 2S",C̊d(#ĿKU9*T CCԹ&v}]PsyS̜+Ys-W\ӕk{r=07G;xW=BXfQYuhX jYJ}={h`sF6of,lr{egNf;y;.2̮" /䚂JS0j m-tJW Cc!g*ͅ3kd+p@Q; Mwz9N)~2,'*r"Nĉ@uEMSW!}w }c񹩘3♵Xx,]Ŧ=8GVy+ @]XG0/ "d Ƌ}sErzqf+eQrrS@\x#|Dy(/B%Y^E_/2p>#2r5qs r/m9]k\z7q#ùE[* K!y).U::cb6URs噥Z*/ʙrpʕRTPWzWa;r̃ElɊMuTsk6RK홵Vڙvqڕv֚Pnz=¯넸^HEj:RA61@ {zápd4MSd5pj7֝Ʀ{qF^i7/eؼ"_B"RԀV -(Yv7ރ>y1sct,ÎUt4H 4Vր-ԁӃ,YAvnz4@QhCs?0Z(,!4:2 `X@%u ء;2ay3vjJ6;o{|yO,2L8!$" )֐2 Ӑd@G&u$' 䡑<2y3yj%K6Ȫ;ɦld"94%}jMliNWtE7t{0=@葏1zJs?0zX+e$\2v]eLҐ }cД92g̙-S2=SufLӓix3#_2S"3db]V*tY.kg}6h& Yژ7eٜ%fl٪3[wel:=ృ)q0,BK`pYGgzƮg40I#C}shfr&oelLpdnaC 3SEY*_rRCNi 9!rAc.irܡ%+s#Wu\̵\ |#Ǐyx:^ǫ/FVf``dF1A4fvZ؜3-9XV]l6A=΃".IvpRyX0 Sk*L\ص-Ck!g+™Pr8W]{ MЁ =w2NdܙG:Xgמּ;똜]]]%]-W+ww{ v_BP^"+o6nA; v{1]ĺD_x5}q</e FZ 05 _>/1G!w~oC0?&??mrҼ&&?Seja ;[3wbَwoٷ~@g. gnó8:쿶f@`Y1lfd,UL[{6! >y!.oܒGR%oaI|*KylC)_FϷ@)-,^GbkbY Yğ-엔\Ke<_W_%2KבfBi"MXUg#@KOҒK-zduPքemD|+xbPC\FJHJ-liD+(fƬE(V%mUٔPSRqUT5auQ|ޯvAj*z [zٰlИ 6Cj=0p0\7ncc&ll#ƞ8@M#MӀi2/H2b^mne"3 h̀ `V{6@: x{7a{|jvcA:js(ufPkm ܳxd \ 熪AMj#P 0hCy^2b [Gjf` b +F۰=v`Gv,OxɅsnބp1 XF?!PYuRk! [ȀLXIF!@ɼ]ş _z*fב[:kea[6h&, dC{ȑ;lɝ<*&mz?|`<e` a@lc$6Fnc6nc$vf:#'w1gna8BLf^cz(3fbafa1fgB{a{-–rv Ks=:r9g.ʝs%OsU(WGrMo~<ix>^D%+Xlv:ٜͻ37[VaM/Fpvg ; s]De]%VK)PP {a/ B^H: ¾p,\p)pB=a'd? LC'sd=YNVۿu"luT^t؋^G1(R⮳,9w1)TR{M_{xq@G]8 dq-.Q* ;9. p8.r^.]圻r *sp )׽&Z`^ˣ@.THy-/U/NNNNBNrq.n=ws93+pW^( (݅)#"-js_aR(bvUU *1A[H+?_9ֿWDo`6"h>/eist߀ Ђ B82x[W7 B9>$WM`.8섆{r8 bcb/_&xw!#oo :~Ưk||A/]p oxx/~/>~wx>>(5 p5_K?c B|'ߒ(?wq>Sr׿[ЉąNtG'QlM&@L^'e`cpr OANn#8>KL[ӣ'Ċl̎̋,vٿoC~^g .&<{GFgcqbvS۳ڙ 3.:X[]b- 8y߁#PħHx%UJb6!CHƇeӈl/eB(RJKKҷO_}WnU"tKvI.)҄[H<@(CSXVBdoOVGo1yA@!Ê)GrP(R jFZRR]JK ~2V==;PuVSQ[L&=f|ivJjQ"[&t+J'¶^xd>G2] ~!6==;p63Q[&L=i0}i1ϣEܼLXV韲U  @ = 0PBo^Go1{A!Îi1:q2\}Na) > O#< /2(x=mDx:7qc67Kx0ڃ!AxOaoxՇQ- C4Ḅ"N,'m/rHܤM$&n2!i yyO%<Hi;msaO:I'E蒗~㣫(]&N AzyFy^e^m+<3H='cd`O&$ f!93y8sdJ TL4LA03 ex23d汧ej3£"Ov'dOd`6fi0e#S$[f9_fA?hzA`>Ƀi`;XɃf ;YGat00@& 24A!LaNLp(SŘ:4 gzfdFa'iǘEY&zo}/|/<^`Nt`s0 $;sGH.N/ǡ*&k{Ax>ix;^$f ;c1J@Vz,AMB, 0{Gg^c9blg ;0GiE]RgGyq^Q@=TC*B*pa."R{ gB -pXD?iNzAdDid?Y$Nj3G' TBE%T4@E;TDb.&.\GH1-}3_9Xŋuہb/T#GXq/.%U\vQxw!w)\J_82p9w>R>srW>C%+\r'XʃpyDim'᫟L~~wy~>"_!"_&¿'ߥ-6#~^7&880!h`||0ɫuxrAN.##]l҉Onɘܥ&ۓ;M'6_j"|=g+8C3p vBCoC3&|bO b?*4*a#\SBRK$ՠ Kۤ1M9%_mQBZ)D>ɦ_I,> J$JҨd_Z JAЗ~C_闉|u>'QQYa0.cq)!+eojP^߆mRދ(QŇ+IR.RjFՈ|/QTT*?4Ta#\SBUՠR ۤ 1-N9[tmjG/< ik~g5QC51f3F0ƒ&`m&Mi5}y4)"eYn[V;EH[]| ,((ƀ= v&`m&cu|9ct)"\n;W;NSH]DVQЏ Lc}CG8)ЛT B6 IQC 4 )x/"ӥ&@Wt=D mEA=MآۻG]vwEhf1Q+$LSȼ fL=yδL/2>&SO[OOW SS]Ge5Xֆe!, ,K=<{Hdlޟ=gKA5tP%ڑ^`;?S`:Xl,wV@ODc4ccgp`&gNL) 2S3oIazQfc>>L)fb[rգ{[GXΆ`<s ʼx}3̡2sʔԙ&s9]Lʴ!{avYg% +ce̸1e#]feƹ1GccfWd[sdT fd9]e>BLCǴL\, ] ލ,{;;dѻw6{!+Q{rGUWr'Sm#kr-}m]r]s 9`[9ex9?]?\?^kGy|q>8\!ϿV3[eP?RYM?Y͟j|Comc”y5l<*N>*=*~QQ<.qyBQ|(fŷ⡺x)+jD[<uņ2ۦⅹ؅R"Fz\?.AK%sE酢ZYʨطjPiXve=ѲQf`[Fmb/laV١;~\?.CE^vAEV+/תrFU~.)/ T>Օ?˿-cm*_.R22"ܖsw9S9HYK+TkUso5O+ Ǯrh;qoFefX9`〃cr~Bߓ7 ^u ުJ>i%\_ZVyV':T46_ |yۊ>/)Je][uRiUZSjoW?PW]T_hf|ֆ.Xπ z6L)i0R)UU%UBH%jFȮoW_ 脿S(fnڈpaa@ 8*Q*Ѧj174iV_?iſ@"ы5FI, /,?l"!LT7ͻ机nJMW7mGӤ4 MV?4}6C jEd_ Ϳuc;/Kښh`Wֵ~I[R-Y~ S"[ mխUϞg_s)V{c} c_6wK p ~OBٳC~ 7$k}IyyTޫ彘TF} e߶oGշh +@02 ̓xka`|Z|pR>@>(jf"CQPB9Q 5piu9FjA?0LmhZƀ6q'RF>nVcqR1U'۪zb_3q2QX(NTdM7)'ɖimS];qG"/O?OKY1)ItT9PNowT{}tae:SC35݌ig[ٶyv-:ls1'_Oy|ެb>O(U;=f`e2_ZjqeZh:bײҵ~Ҥ|KT/KbT,ŔK ҶjiG^,,VJKUtR m-mv`i"VɀC&+rŗrT(fS(H"T$mbGS+5EaUQ*Z 镂A0*[&e۬ʮE *`WJ"^k/ZBQh -ВJmLM*Z5 TXJZ A':0B-6CԵU:I9<%2Qf)`R ǔpBo]55 \XKZ ':0-6#ҵ ;D^S K*SjV%hL&T U{t_UEzCkzL0` #2am@V 1$ AwJR)+ Yŕ^R鍩VjbOC+Da(i*D舚 DHLD&.k!v8|umPAQP_*(ZQPf%+)RITTBEm]5WUJTNtTMO aZf /p0(WPć;".SWq2+*S:4 }Jt }kzZ0 2m@讕6iEĐ"qGW&dĊ2aV&pUT%bĦ:Nj{+jMDU8'j`L4L9цD׺ l M++~^{\}@}L:Ij{+jMdU<'k`L6Lɖ9نdך$p$(SWze2L-+S+JT@SԶ&ʬWSԑ6URU]D:5caJTI]XR]K` /RL_UG{*JҰ*u:NojۚJ:_MjGPKW}ԐL9݂m$}aIwmi`OG`i**ӧʌ2TUfYYUe`uWgLLdW2+jf_9fLI3'̩1#2 sgHšڲ,_[*_ŌibU5 h\a^0Lf2s1%S3'&afZ0Ӷ0Vkc(0]݀miEGwwS.y_y{]e}mr%}jȝs`5\ ɵ- kkG9z^u~PWg#M^#S+͕6BC]Hg!b̟o!%awyxߧ)^'4YMXSjJѹR ⮶o⡮x/bP<1OMŏb.,Ŷxa+vE(b4) kJҬx])!+%J)ZWZ5f =ԱGz5U#{bbOGm l¶셍:XcW#+婕J|])[Vˮrpזk/kѕʇUcT>5?RnYm[^:- 7_^YV9*rq-^@kqoOFwbNa#fZVm.\8*?^WWy*iywi!9Ŀu|FϿ?##Ϛ_L?oYp]pQmʸ~W[+un]P=i\WAWgOΚ꿘'pf=k Y=p٘V&=V+$!!h\'^녬Axk~2 G&5 _a>Z߬mB.\?0p -C)HyH\D%$tU'ubH'zAŷF'Ț_`xj?Zlb!^?08E[5'u;挮kJuM5m[ ?nlf0527bnpWKhkfo/y5x8@{Z =jm ?$t=[}Ϟw{`-zKު!}ao%:A!-mϸ羶W_hkk}jm à>?%t}[}`/Ky!ealنCP0pרD;tvh\;t_;RkL n( H4R2T#h , h6vn8ƺmqh-vv|I;֎q CQDB7O& Ɖid'2)X֩mm8t;wD;}G;=^N&htT7Mow{}́q`)fcx نuemg;.:9.Ky54o1hGu ~~G?g7 ij^8jȂ`YhXZŶ}Xb_·P]֣]..-iВ Z %ZmҎ~iϰoX:0J &i$ǰHalҶ]qȺ 2LU\*&ZR! R`Q"Sl;zŞAoPdVVcXYCEٰ*[6eۮ8T]LppK%jhZV i5i1"uPT%tжC{h *: aZ6muP]\:I^-<@5l` I w7F`Kf 0\C`7HˆHEp8F$zB' J!T&t(C:4G3FLhɌUajL` +ֲcmA.N 1 D\냈IxR@"0AꈨHm=c ľ80Q2U8FDFDAtP'> D]냨IzQR@YGa:QQ=Szj@}#u` &d0uP5 %X-ܲێp w0_PK(.]ܬ1M蘞Nmc>03]2U>F蚅tFtAwPI ܴJ\SPK]BKht .>'Ķ!cHġ)Q0'Jp 'ND͒-Ѳ'ڎ7s6{SK^%t/uI.%ͺ$OdLLۆ1gLd,*<$k`M6lɖ=v$/dOg}UN]ԥR_R2]jE2S>ES1C*aHmRԞ1oJSsHĒYS-հZT}y/%p].}Gץe>m֧q}ԧct6w=Szߔ>4 pHĒYӂ-ݰ[tM_`.4p'-gg̼>Ϭ3>2C&fl3̮1g3LΔLɜX25kFelˑm ,ų,d%zJ3ŵY3+z60 42FfdL̾9#)!LœXS#ؘi96\L \sWzQ}>-rl\sܶ)ke̹}s!Zr'ܩ-'s GXu9wxs_W 1C~ڐ_4o`Q:X"CH#sE|mVM&E.OP?oNN/?" D_4Ǒ$ҜF_"%D:iEn4iK,f|kkdod__)7s6j Om |M@^ pύQgQ!=FEzHoһeݱY{[߁`+9*c x9r ;K oP_FY'UH}{־?g_1 *߈HZY,;=c8 %`1xְAj8Zsp3|1*d؈ ȰZY,#;֑=c9%h1zְ1k8Zs6 Ɓo'$'o 2aD&PdLD-,[uM& ɒc:FjؔO5S-םsΥ ]+os7ȴ 1"3(2Gfg-̎uf:fl3L1[q5lVgٖk=]z1|1 *dވ̣ȼZY, ;օ=c[8/ %B]8Fj؂/6-{Y.!=x4,},%#"K~d)jYzfnY;VUؤvi.-9TzJkT 咝e+ d,7QQoQF-gUcUٔMy`WʒCYAǨ)\p*[.չ[.*@O* C9ZB 5E ZڲB;Vh16PUPj$Péktn]ǣ>$|6!؄(-p',ޱ{6v`K\GNBHǃ\z@  /6!Ԅ[ШMX-+cEl(cXXŎ1c5X˅z1@` ĵ/6BG%P#B`o!"a%Ďس8Qr8ƈN8p-q&:>@$uB#}ZB(2Y(B-TB%ԖڱQ{6jNة*T1g \sw wa a B_},B,4f:jVzJ=otAP]iI7\tM=tKw hyUN\A}KBjI- %Y5&Ķ-cKā#Qp$Jh%D ODõro=fMĒkINX,I%$M$fMdԚLX۶-gOۓd,*<Ɠ5<)8 WN=Ɏ7%$ ʩk}Ԥ%ZRKdMaiME-mKR{Ծ=uHT MU19S3pl_=/;ޗ]% RbI_뷤'-ԒXfkIk:jK'lm[zǞ޳GKXt͙\+r۞tǛiK2 W̵kfʚҚY3kl` il-m3{̾#sf heX֜Ym-O^ٮ/ Y@fA +2̔Ȭ̊1[Ɛ6&fc6fڙ=`Q2% Ԝbna^`>@2 pU]Xs֜̚[̶nˑ\̖Ksܮ#C4Wr%,Ws'\͕\;rd+ak-?o/+Z<ĊGX≳x* bSlymx+vE@AWq kcGm=`c쪝,ngv6`7춃E c!l gNŞY6zk\].Ɂq9 ?:^tA&ʿ]`[?#'Ϻ?qox}< ȃ8Î>?vԵ:֝h=h9V_c ^#:Ng޳qg.yg tAT2 S0{Ԃ T DŽ^B:CpXPu '+| B')t $JF+cxר(GE- &Ҙ_k\8ŷN'xYG<^#![~/HAP!95DZ]k~5XS5-XӅ5Cxƛkg3lu5r5M<6OG7d" T;~*^|ξoǸOO;pL Ԉ7?< uC!@ 0X;f>%g~W0]G1_J|8s xrr q 2`33TC5bH &#epFAx IC >5>G 9G"ΑgΑ-+(=p<9O~O*I#>'}Ɉssr955ɸST;uLLՈ;'Ne.=vOgf%>cgP|眉8g9g3\3o\{=[~Vl|ssɹ\'8w |ݗ 7|k|A/_9"΅g΅-Žkkq/ ŊwXo_L.v/C\zcүqq)K}Ni)}n;.qK҂G#xDŽF}&eY'( `mY+o \5TJ#DJSq*9[.KƥdQ~*+^1TO>T]TR %8tcfpkRP'wB' m 1n </TBDŽ >]ïLNPwJ:aqXFF G3'w\7̸\ HŋH͇>G>y(fѯqTcF':18g.l˅7nqc>x;&XÏ}& b! P8` čʼnopB$Nu~'q\Ėqo&&5_Xd3>;e( 0ZX7FIIN藍.r;nzM3CtKWk>Z t'H_h@ 6$č1gbΙƙP9Fgu&DԕxJl;Ğ;xD(y"q۬6fl6σehP 6%1grΙƙT;&gu%dԕ|Jn;;xd, <%kO6d+<&;%$XKlmgjΙZrΔɕB])+uԖ;NyR'uMc˚ _/σ/;]%k/K3} g3}ߙ^rծɕ\i+u;NyҌ'}MǾt͟tL`Jw4Z%̵[̸+sߕYreԮɕ\+ug̖;y7[ %"[e}ٚ?+F dl'RY΂,XJ\̵3bѸ fn&f=̎0^D0Usgj~F Fiv鄘.ŀ0ĕMr\9+qLΑ\ԝKxr۞܎'{sD@J\՗;jdN s@̵Cs`-s rU_w']/y;q<Γ|̓Ox۞7{D@K|՟?kd^o޷ۡ}7A]6.N_2wQ.E]$=Ř]oq['D+|ŪxBkdQb+XlT."X/U6fy7+s+naqKzؘMxm/ev`}lǖlϞl- d[!Maf Y*r廞򼧼)xʰ{O9-oz.Q#DW.%JOr-PF UT"\UzD* Zx+=np níx8^.b^nm.en#?WsU; pNr qms5s (<=yU/{yx$m%~ϗHJ'4 A[k|w< {o>/z돼Uo֝zlj&QA2}١<+gI4x&u]u@ D@+yA0fC+hBNBB6} 2~_8 GB5 Ӡ1$4(abM "b 0!N,!>$DŽ%D$ĸO|_~1CR<"E6 VIP< Cb[a&^݈DEQ9E4WDSN4!i5]f׌}k3C6ߒCyhf5< 5OC͏Tpnךn Mk{W~##dS?g?~ | Tcjump':|W⣀o?|TA9##Sr0|zbC?~ } Wcjumh':zWc->*r)9 1c?>nWZk?G;щ?zwS ? |TzJN%SSoSLpϡ;Bw*ԝcN-|׵;~^{ۉ޽W=->*r)9 ̾ ̾ 2?f?*15W 6imNe>^]C¿` 䂏\ OɅd`U`M` .\9!XZx׵~^xy؉>=~G%Ko҇~/5R))}JJ髀M@A!هBɎ)Y-,uMiMy]vu˗e_$~>_ЯTR >R!He2|P ( 9RU(1U>>#NTuSj}~j$# = @* BL:~>tJwº_tuu]'@\h=K>?|E 6}$!g$@^7A "A!T(8ˆ|ZG>#E.c[mW$$19HGb{U{Ę v~a(BaaƄ5:y;`(~A46po$OH+P$$#Hx Ux$ q"~(Ba kOy׉.c>6|1@R$I)I@RT$~o¯70 ?p õ Gh20`#,!$=M_ $ i_gz+@ o4B!EW(8LhaNQ/c  !!74L(ɄL8 _  $[ī`M0ڬ7ÛMamytۼm&7ƦL"3dk2$@ $}d$|Hn7$J*JVp֓֓#hK^Ɠ 6$d0!S_)U e @HEgV0L P @@__6"/?G^G_vb///O/%dH =HHic @:L? `M(̈́T@?ӕpx-][K F$9>;e< 4HoI {c4 d dU1EY0 f[N(&eB*[pekYa=ۈd?Gl'gYU1`f7F` 2  2ςV 1{!)R1kLm֙FiEӉ1}@}$1rK:3sh0\" vBPrTΕ¹Zx-W[ \#kEs\'9U6@v ?_ )ǂy0 V(QypW"N}~6`ڭ`q X2FCl"nSQ~=5Vuaۈێ8ۥYoY\,Oei ͡2*r4TNPmCp \.KkzxRThbvҡ+]6* xRk!n*}d!N!qdQ\)n7텹0wָ:W]N"\- QZ1.ho9wm0 !^WBq')>F a~/k|a/kQ^ߊ8A |˃'<|vVl8tv7t6O-Sg+LY:Qgnlolp~VZ?FN"g;kZ6}vq8ߞ'g3 %\饄QJG ?,RL 8%B,,l&dք5p]8ZJNiTbB#.B.6ݢ+8FӔH(q5,aa175qwM̬xKOiLbb#.h!^loED߉nx9n> 7p 7f ܌57ך/֚zz0<4hmĚxA7[tѼ}WkWM,D]d "둁сdtUtO? CImc׍O~2rdQl$Ʈ>&W_GW&ׇ"CȐ.2d p2:*:c?F~|TG1oG??;2nm6H_BdLE1"2{~?nsxOzonL|v'&/Ng 1uEL-D)]d""w#wF$w^E)zϱ;?!~BO6qӷ>?w^{Og ;MFf"Ȭ.2k\2:*:ܟcs?~}Um?}{Ow{px$|)Y_BdQYEE"Y|]LF_E[sl1oxۇ<<WOϾIeu"+SBD&t="#"iT^Ee}*옖mCo??Y>n2x #IDGSbD)(=""iT^EUob?T?T?U :UPu;S5x/cwƝ_&6mc'N&ĒY$%ԋutk%ȿbss/VN ["~7`jWtzV<,op,rۍO=hSmƁ6`{-0ض4Զ6J^J۶dm;򶤼-=ܶh?P*yU;nvAI%;oww~@r4t;݃ΥεNVRڹ%ܑw&}EׁPūxut {N*sG=Oz=@q6 , Ҟ-Yώ\ }@!O C?\_oh0<a C^¬ ~)_9 x_(C«`{Xve9u ``Sb flCg aKRlM2 {%vXrK+}vUx`xODQ7@ :O?H x0!3D<KRbMJ2⥌x%'v0VJ@IH^MkHƟnzo>DT A8Dن(\J-I5ʨrꕜTZA+%ux5g=o5 xt z>=ՠ E"҈ZA42-xdW7;y9y*"?*#PEUu_@FCPh(V5{w(<p(#=14Lش,Şc_c 6{RvbTԱ1^1~$_۟Cx44#?q4M,ǟ_ 6RwUT88?Hw-ntF{]"H#},ezlwZ|owo+rG?ԉHK ~$!r+rRkrI9{,eZe܄s^9_W7 o +%~TqPsppG?HSge2YVjZee),,5(K^)p꿆S""7E꿕WU~TNHM_M#)^?(>ۍ?P}WC;; ;\U[N@ufI}fU}& nih&s#tuy<p@I(iT❻w~?V9?_p/( gWQmT@qCYByRŕgsnչܒܪ\8ҜќOj ڂ]ᡮ y+ jweBY) qeUUVTKUuQ(4E;⤶8-)>ЕJxJyTEiE]ECeDYPA2\YfUUeUْlU]7-M<-Ok+G*t Cx@QyyEeQQRT(+!e%ܪjI] U@ՖjGSV#C] P O:\ܨ]+ +XUWܪ+Օ%U0peKjں]ݡy'W\Q\oT\@qCuByR^U׭naU6-MÎ!mHkGtFlFn(nt^qFqQqŭ[$[ -Hy WݲnU[K[[aмi4'imHln(N*P(m(**$6 R6ͭj ۖmk0жmiw4Im{z}@~yP; '(:kweB );qUUVuԝK5ug4];+=ҵ?u:< =FEʞʞG쁔=Ǫqz%p  w4¤VtCPAB N*D QRԦU*EHA*YU"JPԢ5@DіF%hDt":  ZI)nS*bRP!W*[-Kj  xK#ъZqzD?">IA %(JiRڤ)w҇JSTB*)ZURZPK5@dٖF%l_';Ae%pRUMJM US%T UU@@ ,5``Cli-`_C!IEJnRmJ~` U0jحjx  wprI :@!<|DN*Vb %֦>QbTSTa 30s[5c5؆b;Z,9G}vb Ccx$T\Vyn<*'*#ʣTy`Ǩ7 %KwK&Giw_=!^y*T\Q17ULD|B+<#+~E gU\SS:ԡO!:ԯ! ysMhIZӆXm6j$;JBi0! o 5[fSjS5+RjV \.i5-jٗ#vW&uldAbaG#ԑzu=u::"RG @DlGy|i#6r$j$F`d@C8#Q^DqV]UncwԱπXb* 1&f 7p&-7Zjf{^.q x=Ǐ*R՚ԻT&&գI=֤4)&צLԴ6զI}KMzKS`G(8O8u)>o4ŏ3'YwRw:x6x <<# g@,@g]Y>[υsȹ-󙱂XAn7ANtV ς';Ossss]91xn<1:3E`.#H`G_--̌eNJrEZ,']Q:Xt,Ebh," *@E.U8o [}Ir$=Z+͎KyC^ tg]Y%Xv, uer1X> P9[rTp*\F*6-}Ŏ"9Z.E?*`m zVa 0Uj^W0RTowњhMf&;V GZI]\^<+AW,Tup*\F6-}ݎ.9ZόgsG t 'l ]`A 6 ԀA 50p"ܰ 7 aK߰oL6G3cx#ohѦ<oU ޺z z[ԌC53p"ܼ 7 yK߼oN6G3c-x oh#J:> =`0Am8f]P;/H{i@ڷ;h{z=3֞oύ=";Oz ;`S v*N¡.+傻kZEHҵw%Gң]xWn7t(J8AZ >hpk43L!x<,I%h ^n?Oe% Fdي,~yI_fG7FƖwV+}ʁa]cT.p }pH `$dDBV$FB}hIZӇXhg,CЁ!txo'e0M4SU",F![쒞]eQ5q6==DYcy{8R Gp|G!HDD`$bD"6}ģhGѴ!oC,Q78v#O#1%Qc},-FcXXXlg< }4vxcL/GuH=$ށ?E"$ޏUHǍMGK8;95' !!c|v d}@v?EvEn~WO Qhbm,%^'^'vIC"mH죉,q%x<w#-p9s*=9rQ(6Ʊcq8k~4piG;9>IqVO]էnSw>}j@RSh4:Rx73s]5k54o8='Gρ9 =gAϻ v~;Q`Xm,L{Dav(7YODy =~~_pJડPi(o(x- Z p+\ xa/4m8Sў83Q(MSLjRrCUCqP|P- Z%ą0X"V(^i,6r=Sif,;Q,ʏiVCE⾡ Z!G+@C+,h `EbMmtat13q1;q17yʫJrC5CuP}PFAC-h fEf 5QfXmL5{Dmv67YO]KC)kVC] Z7ցhY:V`uX*^7Mc33ىɫ1pJᚡihohx6 ڀ х52X"ָ7 qظmlL{DSv)7O#S* ͭNC} <6h36[f`͋X*ƛ7Mc˶3Z2-ىd ?C)kVC{>mFAC-X kgE}oMc3u:2ىd?uN0t]3t: ]Ѯ'h0]e\Xu-b]xW0vm]kԝNv&cD < f>*| Q! 1Th.L`E\ øp(2 B$3f&z^~+0N0DGEbT4@T" &ra"-U\EFіoǙ&2}ɾd?uħ\0ĭGbTb;y!̋c^ u^.U7ln[&ɛ'Iovқ12dNzeP:ʼ1c(qƊ3.apfȬ01[&fgIN0I&3NrS8Fhw`lcn, J BXǃV<ƃ \4W1a n;D0=ܟ fSA|l[nǖز[V`V|ٍ+ƕUJشaZ2L$'Vғ++S+ G`aj,Ԉ>BX!!xm %ch BDhg" 'CS!o7ٓcl 6b{cg8 ,V#6#ddWMlnح vgMNIv=b 'IX4a]<H@x7Fƈ K)6E7&[ѝhr2OE!cTjXkcw#<)dƘscSl[3؉Dlk"3KNS;$b<Gxb<~ 76< ǟq1Fcj)dD|c"5ߙ''Tq>-f"jz/9Q#jPL8ɚyf\\nZj7-ۖZZg.emrӗgx`Wbo&?"{/z9Q#QL;y~\\nZnZn[r֫{֫լjnO]L5H1XG46DDh(h&d<ٸ`n|an\77E-MmKgmڳ6elMY[Sn?S7SGQL4DGDs/%"'ZtD J'2O,[^[-QK˦eY[-[k֚nZD)D{LL#ڿ$DlGv3$Ɏs sǺ#jشtl[;8kǞ#c:r;G;bj&>&]_]rKw4d'/{ҽm{;kMwώQwBXw%DŽ! L pܻ`}a]7F-mk/gݳflt/+ D:BL>&DїHNtdJ>'7o[00[MK߶2t_nv7zBLH>&$ɗDNJt%%fR$%fɂY,YHɦEmpVɞMIӒܴ )5 =BILʜl,[0^eY"۴ȶ2*۳26yvZώQrRJG>&{$#$4f͂Y¬YhͦUmpV͞MiӚܴ#9@ @>&{$D$#D$2#Y0#/,ȺZM+mE8+gC26$;SGvJ]%hc32c[4c/,غZM+m9g3xv=<ꈀ O)#ȫB$y$$u$L$c&䪅\Q i%$g#ldfNg$G)$uZHHR)bԢZPa RVjJq6zFg4{FyӴ ^#'OH0I/fZ^˘xVջmr6͛fg^>t>ȜRA2Hd:I>rȕ ʻmr\o^W+y3X+. cYYZV֕ ʖmeǶVW2+g+g+~D`N:oj,\ݵp-),dp+grn+rK6nƅm45ܙN&%ϒTJI>ϞIA~PhIZRMT%uגzhII,)5YS5eTZltjc:5yJ>K>:StsT)oSTMU( t]dHAۋE/⨣xQ,%{Β$*}.7B>i-^8}QGߦo9\}W_8~{y ()g)%J-iDFKFh]2o,%/u$l:%N 칞f\O9SsT@N9K.ӲhهLH˾e2Z6B l9yl.{ᐯ;Q|)v9|%ϸY{D@Ed/M~I2INNA;ȨtNs{.2&n2!}`b:PGGt:{w3u6mWs܁;r=::l~l޳DA#tG3 FMWp\=w0f='{x߂ OW+++_W}u+Nʼce¹\:W6]+ۮε^ɸWg僡SJz{g=B!#tg3 E]M_]s5kל篼ΞRfg;ggY9XZ2vɾpN6b7]춋잛xجyY>wDVn^G[N{=;#9G23ꌆ]Ѩ+n;f<Ѭ'F<=vJ=vk:Gl18b.gqUg,mbض;ƹ{9y1kkx#wŎ#:#nq]8/:㫮xpŷmws<'s8; ~H\p$u$n;]}GBH ;#9gL0Ģ+J] Wb˝q'8ObϓxYo"Mc|;{vp]#)v$IЙĜI3r&Wrѕ\u%î;NIOrϓxYo2Ky#F?-GґHHu9R)35LLY)+ŸRԪ+v6ܩ-wjǓJzRiO*Me/~|ſuW+n+~+k}%_KgJ)̔~7[l?͕*ᯘW_T|;Sg/0{᧹ ?]e3}_};82>aOs{yX'*'Iz|}_K/qg~=ۙ٧>~sO{_柾3O>oUM>yOKr_nIȃ3g#f4'yN˼g5oU47|ǧܯ5Zא~ïg4_hDf5j0iNyy hr|HC:|H܏H֏G~dn _ Ywg?򆟼'{~R'~'I?!f ,%%###72o~͘>~OwtOK6irvs3tpzv???ӿӯ {ow^+{G^Kx3޹ŒŬw}nyܜy_}8"Nynw?? FL 8f3l :؜ l| 32L{Oy? fL9 ._g\p{.-/dBYǞ/+\_п"|_̬ͬfV3+Ι{}_{5k̹\QT^bL.F@@x;PBwK5RUS_MU3G`1Py9y9y9R[g={VIee»LTm6}-ӏL?6r$$=Nf)gɰ2;ۉub:?wb0Mv û0tcna?~r{^c\q2N+NuUsVK»]T[o~%ɃDFwT|':IIvRg;NNsutQw()O75~-O_z(1Ht2N&ddJ;L}'yh x7~ ~ ~1HD ӛ=}[wy?uyt{t{n/~m?x`'twww:].}.[][~MNS[[o/=~Q ^vg 33p+x+P |h ;p;ԭV`vہn~ EsWf6u$u955^LUL}̟fڻgWK ~k553~{3?ܞGGE.Ah^m3ooF߮D߾݄}}[nRlR+6H&V٧DYPmWm^RoYUo{_҄mߴqetӺ_~67%7e7堛N+Mf KYlVlTl![XrAe^[U&I,˔aѰJ4ք]F$hX"L7+2UOT*b^XUG!HDMdyd<2:FUQШ&42%AQjEY5"Ѭ2ڧ~T%u̪:F}I$Kerиh\%wkB.q4KVěxR*}'xA0JXR'ޗ4|z[[3[sЭѭh4 M&K.EZlV$*Ie2L)RUʼ*eIN{_Ҥ"mHDw;N;*M ֥HS+̊AELci>eUJW-ww/iv"mMD{Oh4 MK]t"ݬHTtVS?Q yUƒ:cU!@$?,?AFV/Ѓу.AYqpPqTdY>eUʚWg-VYbK,Dfyv f٧J4݄f_F%.EZݯTflVSf?Qe yuΒ:gU#AymFRмL4/;Uyм&42'Qu)Ԋ~Eޠ2T<2*OPͫy<7?DȋیEhQ.Zt-D.EMheH(REAe,bE>UU*W-VEboP)FelFRв}hY.Zv-D.eMheEDQ֥(S+e2RY*|'2AU6.[R!rZo ZVCrѪhU%Zu (U~EՠTV*ꉪJPUͫիb&A/^؇^E/F/T.>C/\V\(.t).*.+/ */ ֧}T%ujo AІ h>!m86T І  ECWЯlT6VS5UUWw,vvA^8zszs?z8zHqfg7o(nv+o*o+o*Jʪ>J*jRtW*j^"hzh6g?s\S9U|蹬蹡V*{=Rêz|'A3YY5/kEE3ZEg eRӭ*5J͠RC4JSi5Z3,jV{5> ^0E*L qXa:0*L)L_)L7nWiWU&RebU&DmԦ^Ri$j^ ְ"vv@P` V>S`_)J[*~%6Hƪ0{56ߋ-bL A Up}p*\TRn(]JWկr \Ū\>%{^bUCA}!z?(hCAPP'T@A*?* %խzUTTQbՔOM=QSB/5K-RJ A5 C* (VN _) %V^WA ՀU>.FnE_Ew;uj]YsW} o2b挱Sh6>AWLJ_PߨK%tԺ>>Oސ0eH1$+D1$I4'!~MN&&&&kS>ԥ4R.R:t).ŬOOqS>7LRf sEc)U\cކh6-AWvLvJVMP֨KKХuԺfλnNvNvvw.wvk̻mzѦ'jjӏiOi˵utN]Zagg@2 39cƢ1cŔ!2C̙6kf%jjiNi*YuYtYN]ZeggY@ Y39E!q^_ىtm1m)mv6C]v..CݩQr>rxCΔ!gƐ3gY4欘r sP.[-m^6/]wLwJWHר˻u<>>ϭ|ސ?eȟ1|1h{K[-JekNi*tEuEtEN]Z_dEP 39cxT,CmzՖ%jҵeڲS ]GF]%]YKW֗ewen}0)C|Xh,_5AD[oUڪtmU]]U#]U꒮CWեRjyCzX=g^2V s]w$mm6[WBWQW{IWۡתf}]}[_ vP;c7.kWMb96;mC!]אkxWPkHФkk5tᮾmh0eh16L 1hWms9Cלk~W\kHܤkk7wfmhf2el-Ɩ%S˪E 2 ڶMזkеeյU>ҵ5.:m]6ͬoosڀ7=1 ƶycےm&_At^ױUבuu|hu\wH]ìkp:gxbƎ%SǪI"_ :zI:iNNZ~6餗R^ڥR^z u OR(7ILUT4ﺞ ]O]]O#]O璾G=fC]Cz|ƞ'3oY2zD<_4뽭$4:MNsZi.5MzeFt5jl5hH5h|FF0jM%fլk6L:SΔ3֙* zStYoM]z`2Li0Fhzb4 &Ӽɴd2bP۬RtXaXǚe=&c]zLm ؠ# k|FLؼ [2afL At\):>+W:wU]&벞.6b@F5>#H&bD,U3! :j-z*UOSz괞Sgz겞.k Ԡ"k|FꉉLԼZ2SfJ A`0=HՃ}zEzpF.gzp$moF@k>#xb ̛ҝ`ͻ^޻Mݯ{3z3{6^7A#$5B >1Ap WPD"mz~_k  5A4Yg?1_2W;Z`H}`>p@8g ZC3C+C!m1@)390o,1N^z!R/l  Pl>03AaBQ7 F4 I'&A0 fa_XĠ;!rg,!і]#KX%%%5Lf SYLְk}[8c mS{=bEA N,!1~G~c e ?b /Y[,_X¯[ep5dFܷE[oE#쑋ȕ`!ȝYBb,,G,2KyKd% KukFQ֨(`mQS{=zEXAc Xb,1-1 /,׭2kkXcb-NfqsE{ 'b#:KH%a%%XfIe/\ rU Zw[X -ekNkZmVتݶj`mS{z^EǚRXKnKQKmR{R`Z{ZiUYkM[V lv^;c.b+Xx4l(ҰpPhi(464X6\6tZTa5[oo7Eqk/ 4"%ҲrRhi)|hmi|imnm鴶-&[][l-e2coZEt48KKQK[imSYL6 x{۔m6-bm+Xxit-q=BkGCkGKkGڡul6&v oL%3v&Y$+Dt4 A,"HXGB**mJJ;NTelһ6&v)oN٥3t.bT\3OxKk1k)kOCkOKkO֣m=wm=n]>e`9LWrq̀hVMUת9f՜jʭFKêiT6٦kӸ`v͔]3i0"YqhĠjZitj:e5[MZMV%f6fk3f`7vfsya^qŠĊ+hZcV+bZF+vɆuذNafv׎c° ðEĠJHV"JV#+h#.وi#6l# vS1s V8 bJRV*Jk*G6F]Q6FmNݵSn;QS5QsjA:hqॻ4b$YAd[VPa@ \) w%Xuqॻ\߬pfXa k6 6%` lwm<`Ppy\r(w͟a6G6]v7w~7g1??/9bXm[ ȴrlӶ@-ph.{Pf{=@b G@p@@ ؄޶ 6!&؄6&\ Mv]؅. f0 $&Ä'Apai@XĠ!2̓ó#jOV<!#xpFwF0H9銜vE D %~S?,ԏxs?3 >57>YG~GH)#ȗ(Ź&]QӮ":X~) Z':l0z`t`t`xt  ݊G_ãx6:ùb&]1ӮY"f]!bšW m{>ZkxSqFgw89W+~?K/+D8 2IYIyII5x'xR+t OIJYg~gLtfg}g&\&]]f}ľb8 2xhCav <z?t?)~?t ?$)CCauxuxux8H^!C `&|0w`n羏s?s[kx U:sg}g.\iW,H`w gyxx9骘vUD Q!4\ Vo(ށW«sxxx5ZV:g}g5\5iWQHԬ5K5`6 =O/kxYtuκ:Uǹ&]uDQHԭ ՉkW_Cxc>)x(s6*Fg〳񾫑q5rIW48G4.+C`eCxKro[[>[[9[dlpw02j!Z或EeeE\3܊mCx[>)횳MlS:Lζg}Wj\퓮}h_$WŠl(ø$%/N)Q:%&d%0. LB2GH ʐD Ap醢pN\z?sS S*sJN)pIﻤKʹSt!ʐT!.P.߉|\\~)))˜rSnr\.9s.!!s|qH2$C\h\5S|\wjdNʩ14.}qixB3EhfYҬ iĠ 7o(7͇qs\4w/NiV9&ye23.3O a2/W+m(v'Vʜy'ľpbם̉\Ʌ .qaG{?/uW/[dM2AA&pJ 0I%LӉt<(yn-d'[K[[/[[o[dLvQ*RɓT4H훤Og  }8}xIRjUM>K_/<8 6;wA`ऻ]P.HW)Y d*GR* Yp.\)<(D%$]]r]R.&K.%-dUDJ(YJQ%T J&id.YKGJĠAbCsW++N+JdEJVH Ya +T=bਊIb+F*G*Ġ!fCIqpלtהkɚdM Ys5 H8{T(UQ5t4]3K,,ԈABw݆];;{&.u-dUNJ):#UQuTGMut,]0RGfGFG/!L惤94OkH'2_RʬFi3C9M041=B̎#B KB '$Ey$>EO)QmO Ms4=9BOг#z-%!"HHG)pR \J i0@4`h0=FpC$L! Sc+{*<˞Jqy&ejLLM3Ss5(1 Q5ٚgs s˞s+S&L]Sw+f2u3u͠ PPgufF:?fy{<˞zqi|D1i<43gƏfx4(h2& 4 MldM3}we 7--A߅ yC>`>%\M`VfkX=<ʚcg=1Y .a! 8NG)pTEhqu(Xu8X=1:8f=1C .Ćɀ(D5 .Wq%,a` KcQ=Ĥc<6$~  ɀ蓀.t5/WY&K+XңzI=g1zy{`C j.²WYVʲ 5eyQyI;=Ύ c+~  x" [XxR*Xhde?g_&ԏHo.o1o»0 L Äv LLs C\C.%>'>_?E_Rx}Ho.o1oһ0 LIävUV;u>O~'K׌ 730~Sa70USu0Υqm^n#~mm/m?!oڛDzv{ӎwaV>i0&;up9|r;;||ٷK\3 }H޽w3po9~^n҇\Kħ?ӟ/}/#d<xHxh;` qr܁Gg}578={K_{O\3a1XyVusX+rRUڹ!!W*| _ϾJq{n0$ es3\<9<}ɹsz;7ĝ{ȝ^;'__a}6? :X9\s\C?}bxm M{`S6l: :'5l6ɹ&=d皆\oz7=㛞M/|M?ĠI4l[ail_oV9תZ\0kg|sg_BA`==:'5lkszεsv/cg_4oo7F'xkƷ 9wCݰs7^c3sߍ?nA!I 텲l(+e_so99 sgO''C(X( 9P^@y=ɿrsCy!zy1>>ه Mba^ؗ`5-ׇr}z }>/{{{'@A^h΁"h3s?q9zΌq|Cg}+tItCGtqss|9(sw 󎇼Ǽxs,;5 v7D:$r9#rD=7'nkn[n C!= = = -k:@M9:s9rt=G7sQ4}8<Ίk7I`s9XOx6.̎ ?, ['~&M/0٣GQ|ϣxxۣxQ_'_&'q=L&bWEq{Sԩv6s?k6r&wDAAr dhb0.F/2lΠ)oS @TC>CwR5å{~!O69aTSߙU ~;7Kޜo o.777ͧf |lփ7I$ !8ⶇ,C^CU! 8$ !&r j@E7@= DB#an{؂=l&C~+ 8|/^Û@)A@C$bHD {lgVApF~G) 8j/UG@)@@q("ID(vł]bW3 8f#?cpL)cM Հ؋ Vbo{ !;$Gb{܊=NY 2pBpNh @$^zx$C"H"@q$mO\'e{< 638Mei{28Hki@]izvC"iH@p$mO_候U}#o x^x{yd6S S2/L=ȼ2!I$ 8g.3WL΁Ys2pNs4S Gr.=ȹr!9I$ 98,sV95o#o x^x_ 4`EO!"&}ه#n{=Ş/ϬlM7 (. CEPtA PdF"EH@pm/Z؋u|`#o ^@8phNp"8nf!R> {<6sJ WeU{2PuT5SJ.Pu2#UI ոm^Wثu|d#?(#H8riGN#p"82@##un{݂n^'ϬƍnTq/h,@c3h<5"h7F3iD҄ۛ{ӊIY'6 N'CD38q Eʌ"IDnWjeF%7K ڷ} ͠h׀}iH$mo޾2.;[ :}< :A)ЩAy4#ίN`n{ΕNy7Tu A6нt݇Aw3>5"=t@HCD5v-n׺oڕ-z6w'l=@s4߁ 蹈 =73=m޳2#&߃п@a ?E/"HWHm~;ӿ2|a# 10`0|."b0#k 1oVAF܌7p0n)r r+~kM`o>vM9SG`|[ )###-O/d+dl}k3og,+3u?80 X92>2ւ>Eƾ@1}c>ό=vflefLfl߱8`DlZۧ {f`}m9c{>cvƶ2cYx#B8B.GSovvk; f` |v^Ǐ!~8G(@}q q#E_;;?_`qx8Sx쌐F@h0hD*F5hd#y"cXu,.9EN0G-;5Q "U\TY*kPe#<*;1yLُ)cʻrSN0G/;51D(q%h\ ׈ƝD:X\?wōbqxcxx:S|sfv+ffhf Yf6Y'ѬN,<Տe]DzbYXYEY άegj<BsCsRќ\4ͩAs'ݝ~lul=l({ 1|7^p^vBh~ah~*既5h~#cXu,?O0_v΂UZDZEhQ ZԈĊ XQ?Vt+bx1cx1/8b-" -OEsR-oDOb]X+G 1 ylVVչhu)Z]V7'.VݏU_Ǫaգx$^ ^M egf6 "KCrѺRk>꺰 X]?VwՍuxax-;UD8ڔ6MhS Ԉ5}5uaM~:tkś&&o&7޴lZv6 TD8JCUyU`FL1T0S]T0(U0p۩Zp*9`vyh{)^7bc]X]_x$v/8ۗS-Ϯ "43,:kFc 뼀uX=kĻ` ûήgײK]ڍ@i6ӖbZLۄi?ƴ]cŵƵu; NS+ϮО%c=yXϻXO-ӄ|ta==s﹇=x`gٳgBhF ӱ=]L_0ǘ _zL~øsNS˳ 0_cH̐`w1C-fh c.p3q p7<  veA]7nFb7ӱ{b7kM͏1SfnI;MvY3o?c(̼3bZ܄?|7q |7?͓vq4/8˳fyF+f,[1.f9Y0)̢-p-pC2N ey"c3Vll/6VƚS=|!>6cs[[1бm ̦lm/f+l0[3n;4"nn{M:miÝ6Ӷ0k[ky{1 p3a _f~'0p ܳ`a9 ̱_`%{1G8;q)ܡq;NCcNtg YU/1sm]pW:q)ܥ]qtNפ.|u};Zu\As"BM BwEDhzk%a爰+D v ad4R—WpyUD^WaUDX߶a?O a",+D ~ d#@y 4""(""DDq8GD\!"Ɉ;d'#HHDEhncD&"*&*"(FD%QWARqTXH8&((R,Q ٭\E4b&":&*"(FD%WA2c!cɘi2b(*C,Q{4ӈU">/"⫈D|?G_!-w-r8e܂R[(jڲDm \O#Vm"l"H"mDY"|L$2yL&Q*RK>GBw\ ;AN(KQ*wʕ령 ~`HgEDAQp(h# 爂+d Yp,d4YRU ٽ"x(N$"(>JgsDx,K[ x,Fb*P%KT^xH$*"8JTgsdbKVXȊ b@ PKT^AET'DuQ]ET%ۈD9 Y=H%k,dY3MՠT Ex%Fv "l"umDYYw$unQ=T^D4k)h&*(F4%ΑMWȦA.d!&Ȧi)C5/@*_$BMU:JYRuT]!U.j!['iZ)C.[@D{&ړu.&U(n#gI9R}T껤B'(4(5E=zɭ\]S\nvanZxZ~{`̇|x|x|x!^I7*: #.F:61D3OA2,Fb#O}? q?r/ߏB:h#C?rg"2&OQ6f>6k>cX{ѱX#{abǙاL#8[b58h~Kooߒ5NpN #pIaƙLI M\b5Dh>%7SbSS J:NQ)grN1)&eI}ʤ:TIe%6U^I3xs>#f>#(3*:CEg3tte:Hgf2Fq&)l#m,m&lwYBzG%ޡww蝗Fzmfsى2;Iv'\bwk< ~>;Eҹtnsй::2kso3y#L8Cu:FwF7SV:yX= 7{ޝt;t{tto+ ݫcz/3F;3O^%^ۻʞuh} >}Q/} ?ۏFfx#Ⱥ6+^}ߏ .FUxQǹ\T7þ p W0⻾2**2|«*sӜS\8-NS>OxWᕋWh5gDx3 ot78}b.q1׸[\.q11WX5\7.ysqn.?OxO "y&fx:oq.4%^q\#> >}I|Ik75Hoj75ߛZMROs\%.vK{=Ӟi>>mїʗ&Jۂnnnn綝us.qۮqnqp۟v}_˯AޝEzwfxw{wVxwqsNs]]׸]]]]O]~b]]|Uِ7/Ho^7/ߛWͫsyn.w˻=<<8=,_ws/qqoqp'|/$B/\ʯAޒ"%ޒ|oI+=ΕJK\5W+}ė>K|)|颯T~  .{0{0{;X<<^^>>>:.*_* omp omjsnW{>kOZ_K𵬯vWW+, Eyy ?՟껹/pkx7< X_âᕯAXlEyy k>5暻/f|k~<[-[X_ˢ啯EXlEy[q\kZǵZOs\\kŷ>mO6Fmm&,A^upQz.Sԧ-%a:nG|w|XuuW 48M4u89iKNc4y^<5^C4OӼi@D!nmt t'8iNt_r:G s:§c}EO'/?[\p:{r_r6}>{|/e}W>yqvn8 s'܀0#~)?X ȋ _qF%g 8AXOp3Qx7>xS }W> LA5gRri?g:ș9 t3iyӗnz9|Co -u7↣Lnx?7|Opga-?%?lo##~o&}ìox7,/8KDsLβTrzr-Z%o1ۼe]DQyR +weBj]* ˼Ȼn\#>׸B}.b^-Ks$($(RE(1A>QqUT rLT>$圤d$OR?:ܠWn)2OP ÂT De**؏)'EI$DyBt}X>&D>1=$FcĘb3)fNaBglbS[[--cb3)aNJ`BJ !)MBR'$ IcBZHLLCb}1yLL~,&?dFJI/ٿ ҂$yBz~XH?&>1>$b3)}NJgtUmecv31O̼*f11Lʜ2)'e2e@$ -aW'd هcBZLCb}1*f?IsR6#elٟ {{Kؓ" { { {ž=}➫!q}qUXL;'e>i ^5H( -0E( ˄B1P-~.W!Xh K<ޙaw|;/ȯABipo )BiPZ&J jsO,*ߵ>}&;'Hw_ߕ_*S_#? ]po TAGucN->u}u%U==I$YK}ľž>']ľRU{"=|>5Hn0&@8pMKVi4L ?ȯA1"D^x@4/?sxI4^$}hO$3HH|^ BІU!P8W: /}$uCCġk-i4dHCϤ!BbC>K"1Btqx8|@>"$wß×k-i4lHϤa?/r^q\="~$v%q4zK} Z'3i2EKb$Z uh-GDGCvKd%YHVd}"Y~KU~  Sĩrq88!NuKSk-i4eHSSO-^ ."'rqtH[$pM$@V <~#~ D~ "D4CDEBDDn $$>Gď:(G?G_@ q.q.C*Ĺ:i4wZ.Isפ[i#snsk eP IENDB`ares-126/ares/Shaders/GritsScanlines.shader/manifest.bml000066400000000000000000000011251415063341600233420ustar00rootroot00000000000000settings LuminanceDawnbringer active: false LuminanceLUT active: false TrinitronColors active: true ScanlinesOpacity: 0.9 min: 0.0 max: 1.0 step: 0.05 GammaCorrection: 1.2 min: 0.5 max: 2.0 step: 0.1 program filter: nearest wrap: edge width: 100% height: 400% fragment: GritsScanlines.fs pixmap: Scanline-LUT-4px.png filter: linear wrap: edge pixmap: Fake-Self-Illumination.png filter: linear wrap: edge pixmap: Trinitron D50 Absolute Colorimetric - LUT.png filter: linear wrap: edge output1 filter: linearares-126/ares/Shaders/Interlacing.shader/000077500000000000000000000000001415063341600203505ustar00rootroot00000000000000ares-126/ares/Shaders/Interlacing.shader/interlace.fs000066400000000000000000000017021415063341600226500ustar00rootroot00000000000000#version 150 /* Interlacing Author: hunterk License: Public domain Note: This shader is designed to work with the typical interlaced output from an emulator, which displays both even and odd fields twice. This shader will un-weave the image, resulting in a standard, alternating-field interlacing. */ uniform sampler2D source[]; uniform vec2 targetSize; uniform vec4 sourceSize[]; uniform int phase; in Vertex { vec2 texCoord; }; out vec4 fragColor; // This controls how bright the intermediate lines are; 0.0 = totally black #define percent 0.0 void main() { vec4 res = texture(source[0], texCoord); float y = 0.0; // assume anything with a vertical resolution greater than 400 lines is interlaced if (sourceSize[0].y > 400.0) y = sourceSize[0].y * texCoord.y + phase; else y = 2.00001 * sourceSize[0].y * texCoord.y; if (mod(y, 2.0) > 0.99999) fragColor = res; else fragColor = vec4(percent) * res; } ares-126/ares/Shaders/Interlacing.shader/manifest.bml000066400000000000000000000001051415063341600226460ustar00rootroot00000000000000input filter: nearest program fragment: interlace.fs modulo: 2ares-126/ares/Shaders/PAL-r57shell.shader/000077500000000000000000000000001415063341600201705ustar00rootroot00000000000000ares-126/ares/Shaders/PAL-r57shell.shader/manifest.bml000066400000000000000000000002161415063341600224710ustar00rootroot00000000000000input filter: nearest program filter: nearest height: 100% fragment: pal-r57shell.fs output height: 0 filter: linearares-126/ares/Shaders/PAL-r57shell.shader/pal-r57shell.fs000066400000000000000000000226401415063341600227450ustar00rootroot00000000000000#version 150 // NES PAL composite signal simulation for RetroArch // shader by r57shell // thanks to feos & HardWareMan & NewRisingSun // also TV subpixels and scanlines // LICENSE: PUBLIC DOMAIN // NOTE: for nice TV subpixels and scanlines I recommend to // disable this features here and apply CRT-specialized shader. // Quality considerations // there are three main options: // USE_RAW (R), USE_DELAY_LINE (D), USE_COLORIMETRY (C) // here is table of quality in decreasing order: // RDC, RD, RC, DC, D, C // compatibility macros #define float2 vec2 #define float3 vec3 #define float4 vec4 #define frac(c) fract(c) #define saturate(c) clamp(c, 0.0, 1.0) #define fmod(x,y) mod(x,y) #define mul(x,y) (y*x) #define float2x2 mat2 #define float3x3 mat3 #define float4x4 mat4 #define bool2 bvec2 #define bool3 bvec3 #define bool4 bvec4 #define static uniform sampler2D source[]; uniform vec4 sourceSize[]; uniform vec4 outputSize; uniform int phase; in Vertex { vec2 texCoord; }; out vec4 fragColor; // TWEAKS start // use delay line technique // without delay line technique, color would interleave // to avoid this, set HueRotation to zero. #define USE_DELAY_LINE // use this if you need to swap even/odd V sign. // sign of V changes each scanline // so if some scanline is positive, then next is negative // and if you want to match picture // to actual running PAL NES on TV // you may want to have this option, to change signs // if they don't match //#define SWAP_VSIGN // rough simulation of scanlines // better if you use additional shader instead // if you still use it, make sure that SizeY // is at least twice lower than output height #define USE_SCANLINES // FIXME: scanlines are broken and I'm too lazy to fix it right now // to change gamma of virtual TV from 2.2 to something else #define USE_GAMMA // use sampled version. it's much more slower version of shader. // because it is computing x4 more values. NOT RECOMMENDED. //#define USE_SAMPLED #ifndef PARAMETER_UNIFORM // NTSC standard gamma = 2.2 // PAL standard gamma = 2.8 // according to many sources, very unlikely gamma of TV is 2.8 // most likely gamma of PAL TV is in range 2.4-2.5 const float Gamma_static = 2.8; // gamma of virtual TV const float Brightness_static = 0.25; const float Contrast_static = 1.1; const float Saturation_static = 1.1; const int Ywidth_static = 12, Uwidth_static = 23, Vwidth_static = 23; #define Brightness Brightness_static #define Gamma Gamma_static #define Ywidth Ywidth_static #define Uwidth Uwidth_static #define Vwidth Vwidth_static #define SCANLINE_MUL (sw.x*dark_scanline+sw.y) int Mwidth = int(max(float(Ywidth), max(float(Uwidth), float(Vwidth)))); // correct one is -2.5 // works only with USE_RAW const float HueShift = -2.5; // rotation of hue due to luma level. const float HueRotation = 2.; // touch this only if you know what you doing const float Phase_Y = 2.; // fmod(341*10,12) const float Phase_One = 0.; // alternating phases. const float Phase_Two = 8.; // screen size, scanlines = y*2; y one field, and y other field. const int SizeX = 256; const int SizeY = 240; // count of pixels of virtual TV. // value close to 1000 produce small artifacts const int TV_Pixels = 400; const float dark_scanline = 0.5; // half #endif // this is using following matrixes. // it provides more scientific approach // by conversion into linear XYZ space // and back to sRGB. // it's using Gamma setting too. // define USE_GAMMA is not required. #define USE_COLORIMETRY const float3x3 RGB_to_XYZ = mat3( 0.4306190, 0.3415419, 0.1783091, 0.2220379, 0.7066384, 0.0713236, 0.0201853, 0.1295504, 0.9390944 ); const float3x3 XYZ_to_sRGB = mat3( 3.2406, -1.5372, -0.4986, -0.9689, 1.8758, 0.0415, 0.0557, -0.2040, 1.0570 ); // TWEAKS end const float YUV_u = 0.492; const float YUV_v = 0.877; const mat3 RGB_to_YUV = mat3( float3( 0.299, 0.587, 0.114), //Y float3(-0.299,-0.587, 0.886)*YUV_u, //B-Y float3( 0.701,-0.587,-0.114)*YUV_v //R-Y ); #ifdef USE_DELAY_LINE const float comb_line = 1.; #else const float comb_line = 2.; #endif static const float Voltage_0 = 0.518; static const float Voltage_1 = 1.962; static const float DeltaV = (Voltage_1-Voltage_0); float RGB_y = Contrast_static/Ywidth_static/DeltaV; float RGB_u = comb_line*Contrast_static*Saturation_static/YUV_u/Uwidth_static/DeltaV; float RGB_v = comb_line*Contrast_static*Saturation_static/YUV_v/Vwidth_static/DeltaV; mat3 YUV_to_RGB = mat3( float3(1., 1., 1.)*RGB_y, float3(0., -0.114/0.587, 1.)*RGB_u, float3(1., -0.299/0.587, 0.)*RGB_v ); const float pi = 3.1415926535897932384626433832795; float sinn(float x) { return sin(/*fmod(x,24)*/x*(pi*2./24.)); } float coss(float x) { return cos(/*fmod(x,24)*/x*(pi*2./24.)); } float3 monitor(sampler2D tex, float2 p) { float2 size = sourceSize[0].xy;//float2(SizeX,SizeY); // align vertical coord to center of texel float2 uv = float2( p.x, (floor(p.y*sourceSize[0].y)+0.5)/sourceSize[0].y); #ifdef USE_DELAY_LINE float2 sh = (sourceSize[0].xy/sourceSize[0].xy/size)*float2(14./10.,-1.0); #endif float2 pc = uv*sourceSize[0].xy/sourceSize[0].xy*size*float2(10.,1.); float alpha = dot(floor(float2(pc.x,pc.y)),float2(2.,Phase_Y*2.)); alpha += Phase_One*2.; // 1/size.x of screen in uv coords = sourceSize[0].x/sourceSize[0].x/size.x; // then 1/10*size.x of screen: float ustep = sourceSize[0].x/sourceSize[0].x/size.x/10.; float border = sourceSize[0].x/sourceSize[0].x; float ss = 2.0; #ifdef SWAP_VSIGN #define PAL_SWITCH(A) A < 1. #else #define PAL_SWITCH(A) A > 1. #endif if (PAL_SWITCH(fmod(uv.y*sourceSize[0].y/sourceSize[0].y*size.y,2.0))) { // cos(pi-alpha) = -cos(alpha) // sin(pi-alpha) = sin(alpha) // pi - alpha alpha = -alpha+12012.0; ss = -2.0; } float ysum = 0., usum = 0., vsum = 0.; for (int i=0; i= 2.0) // Blue return vec3(pixel - 2.0, 0.0, 3.0 - pixel); else if (pixel >= 1.0) // Green return vec3(0.0, 2.0 - pixel, pixel - 1.0); else // Red return vec3(1.0 - pixel, pixel, 0.0); } void main() { float y = mod(texCoord.y * sourceSize[0].y, 1.0); float intensity = exp(-0.2 * y); vec2 one_x = vec2(1.0 / (3.0 * sourceSize[0].x), 0.0); vec3 color = texture(source[0], texCoord.xy - 0.0 * one_x).rgb; vec3 color_prev = texture(source[0], texCoord.xy - 1.0 * one_x).rgb; vec3 color_prev_prev = texture(source[0], texCoord.xy - 2.0 * one_x).rgb; float pixel_x = 3.0 * texCoord.x * sourceSize[0].x; vec3 focus = to_focus(pixel_x - 0.0); vec3 focus_prev = to_focus(pixel_x - 1.0); vec3 focus_prev_prev = to_focus(pixel_x - 2.0); vec3 result = 0.8 * color * focus + 0.6 * color_prev * focus_prev + 0.3 * color_prev_prev * focus_prev_prev; result = 2.3 * pow(result, vec3(1.4)); fragColor = vec4(intensity * result, 1.0); }ares-126/ares/Shaders/Scanline.shader/000077500000000000000000000000001415063341600176455ustar00rootroot00000000000000ares-126/ares/Shaders/Scanline.shader/manifest.bml000066400000000000000000000001001415063341600221360ustar00rootroot00000000000000program filter: linear wrap: border fragment: scanline.fs ares-126/ares/Shaders/Scanline.shader/scanline.fs000066400000000000000000000005731415063341600220000ustar00rootroot00000000000000#version 150 uniform sampler2D source[]; in Vertex { vec2 texCoord; }; out vec4 fragColor; void main() { vec4 rgba = texture(source[0], texCoord); vec4 intensity; if(fract(gl_FragCoord.y * (0.5 * 4.0 / 3.0)) > 0.5) { intensity = vec4(0); } else { intensity = smoothstep(0.2, 0.8, rgba) + normalize(rgba); } fragColor = intensity * -0.25 + rgba * 1.1; } ares-126/ares/Shaders/Sharp-Bilinear.shader/000077500000000000000000000000001415063341600207115ustar00rootroot00000000000000ares-126/ares/Shaders/Sharp-Bilinear.shader/manifest.bml000066400000000000000000000001301415063341600232050ustar00rootroot00000000000000input filter: linear program fragment: sharp-bilinear.fs output filter: linearares-126/ares/Shaders/Sharp-Bilinear.shader/sharp-bilinear.fs000066400000000000000000000015271415063341600241500ustar00rootroot00000000000000#version 150 // Sharp Bilinear // Author: Themaister // License: Public Domain uniform sampler2D source[]; uniform vec4 sourceSize[]; uniform vec4 targetSize; in Vertex { vec2 texCoord; }; out vec4 fragColor; void main() { float prescale = floor(targetSize.y / sourceSize[0].y); vec2 texel = texCoord.xy * sourceSize[0].xy; vec2 texel_floored = floor(texel); vec2 s = fract(texel); float region_range = 0.5 - 0.5 / prescale; // Figure out where in the texel to sample to get correct pre-scaled bilinear. // Uses the hardware bilinear interpolator to avoid having to sample 4 times manually. vec2 center_dist = s - 0.5; vec2 f = (center_dist - clamp(center_dist, -region_range, region_range)) * prescale + 0.5; vec2 mod_texel = texel_floored + f; fragColor = texture(source[0], mod_texel / sourceSize[0].xy);; }ares-126/ares/System/000077500000000000000000000000001415063341600145375ustar00rootroot00000000000000ares-126/ares/System/ColecoVision/000077500000000000000000000000001415063341600171335ustar00rootroot00000000000000ares-126/ares/System/ColecoVision/Controller/000077500000000000000000000000001415063341600212565ustar00rootroot00000000000000ares-126/ares/System/ColecoVision/Controller/Gamepad/000077500000000000000000000000001415063341600226145ustar00rootroot00000000000000ares-126/ares/System/ColecoVision/Controller/Gamepad/.gitignore000066400000000000000000000000001415063341600245720ustar00rootroot00000000000000ares-126/ares/System/Famicom/000077500000000000000000000000001415063341600161125ustar00rootroot00000000000000ares-126/ares/System/Famicom/Controller/000077500000000000000000000000001415063341600202355ustar00rootroot00000000000000ares-126/ares/System/Famicom/Controller/Gamepad/000077500000000000000000000000001415063341600215735ustar00rootroot00000000000000ares-126/ares/System/Famicom/Controller/Gamepad/.gitignore000066400000000000000000000000001415063341600235510ustar00rootroot00000000000000ares-126/ares/System/Famicom/Expansion/000077500000000000000000000000001415063341600200565ustar00rootroot00000000000000ares-126/ares/System/Famicom/Expansion/Family Keyboard/000077500000000000000000000000001415063341600230205ustar00rootroot00000000000000ares-126/ares/System/Famicom/Expansion/Family Keyboard/.gitignore000066400000000000000000000000001415063341600247760ustar00rootroot00000000000000ares-126/ares/System/Game Boy Advance/000077500000000000000000000000001415063341600174445ustar00rootroot00000000000000ares-126/ares/System/Game Boy Advance/.gitignore000066400000000000000000000000001415063341600214220ustar00rootroot00000000000000ares-126/ares/System/Game Boy Color/000077500000000000000000000000001415063341600171615ustar00rootroot00000000000000ares-126/ares/System/Game Boy Color/boot.cgb-0.rom000066400000000000000000000040001415063341600215240ustar00rootroot000000000000001>|@SB*M~|1nJERJS||ff s nٙgcnܙ3>Gu&!" !L ͻͼ{4 r"# >O>@!ND͆O!B # !4x, p>P!"l(* !ˆF(!>0> /7G>/O~G*2Gyw>0>hjk* J Ci* !?@J>&>%>w$by8 O!>8"O!C~̉y0y}(!~" y  xb(d {>( =yʆ †&?b >O36O3!Q !@ ~(!/ =(2 .>O!0"#"#  ̈́ ̈́ r#" !˜>"  O!˜>"< .( !8 !@> > b!K~3 .D0* I.K* >.4*G !*( yO yA8!_7W~( yO^8!3 ~~ ! G@ " H " P(+"" !d!O @  B J ++D `*!O   <=( x(!*(x -x> Vz_!:"{wz_! :"{w(C(L(>L>l!{J!zG* ?~|>~>>|><ߟ?><>?>>|||?>|>||6<=\X>pYi5u4oK9INCh )跆Rq]mg?kF('afj BEFAARBEKEK R-URAR INAILICE R|K ehf0<donnoonLn|jn-+dm`r|||eld@ hp x 8 HPX     @(((` 0 2cyB1nJEBRJ)/B=t~gwk-~Ku!S_JR~O~L:_%j#_ )  ~|?~ ?B~|a||@AB !"y|ares-126/ares/System/Game Boy Color/boot.cgb-1.rom000066400000000000000000000040001415063341600215250ustar00rootroot000000000000001>|@SB*M~|1nJERJS||ff s nٙgcnܙ3>Gu&!" !L {4 r"# >O>@!ND͑O!B # !4x, p>P!"l(* !ˆF(!>0> /7G>/O~G*2Gyw>0>hjk* J Ci* !?@J>&>%>w$!0"/ by8 O!>8"O!C~̉y0y}(!~" y  xb(d {>( =yʑ ‘&Jb >O>AO>!Q !@ ~(!/ =(2 .>O!"#"# ͏ ͏ r#" !˜>"  O!˜>"< .( !8 !@> > b!K~3 .D0* I.K* >.4*G !*( yO yA8!_7W~( yO^8!3 ~~ ! G@ " H " P(+"" !d!O @  B J ++D `*!O   <=( x(!*(x -x> Vz_!:"{wz_! :"{w(C(L(>L>l!{J!zG* ?~|>~>>|><ߟ?><>?>>|||?>|>||6<=\X>pYi5u4oK9INCh )跆Rq]mg?kF('afj BEFAARBEKEK R-URAR INAILICE R|K ehf0<donnoonLn|jn-+dm`r|||eld@ hp x 8 HPX     @(((` 0 2cyB1nJEBRJ)/B=t~gwk-~Ku!S_JR~O~L:_%j#_ )  ~|?~ ?B~|a||@AB !"y|ares-126/ares/System/Game Boy Player/000077500000000000000000000000001415063341600173375ustar00rootroot00000000000000ares-126/ares/System/Game Boy Player/.gitignore000066400000000000000000000000001415063341600213150ustar00rootroot00000000000000ares-126/ares/System/Game Boy/000077500000000000000000000000001415063341600161225ustar00rootroot00000000000000ares-126/ares/System/Game Boy/boot.dmg-0.rom000066400000000000000000000004001415063341600205010ustar00rootroot000000000000001!2| !&>2 >2>ww>G! k#}4 x# Z!ͩͪ{4 >!/ 2=( g>dWB>@ͼ$|b(d { >BB  i >@ͼGGO "#"# D  ff s nٙgcnܙ3>2 >2>ww>G!͕͖{4 "# >!/ =(2 .g>dWB>@ D  $|b(d { >BB  O O "#"#ff s nٙgcnܙ3>Pares-126/ares/System/Game Boy/boot.mgb.rom000066400000000000000000000004001415063341600203420ustar00rootroot000000000000001!2| !&>2 >2>ww>G!͕͖{4 "# >!/ =(2 .g>dWB>@ D  $|b(d { >BB  O O "#"#ff s nٙgcnܙ3>Pares-126/ares/System/Game Gear/000077500000000000000000000000001415063341600162475ustar00rootroot00000000000000ares-126/ares/System/Game Gear/.gitignore000066400000000000000000000000001415063341600202250ustar00rootroot00000000000000ares-126/ares/System/MSX/000077500000000000000000000000001415063341600152065ustar00rootroot00000000000000ares-126/ares/System/MSX/Controller/000077500000000000000000000000001415063341600173315ustar00rootroot00000000000000ares-126/ares/System/MSX/Controller/Gamepad/000077500000000000000000000000001415063341600206675ustar00rootroot00000000000000ares-126/ares/System/MSX/Controller/Gamepad/.gitignore000066400000000000000000000000001415063341600226450ustar00rootroot00000000000000ares-126/ares/System/MSX/Keyboard/000077500000000000000000000000001415063341600167465ustar00rootroot00000000000000ares-126/ares/System/MSX/Keyboard/Japanese/000077500000000000000000000000001415063341600204745ustar00rootroot00000000000000ares-126/ares/System/MSX/Keyboard/Japanese/layout.bml000066400000000000000000000025501415063341600225070ustar00rootroot00000000000000layout name: Japanese //row 0 key: 0 わ を key: 1 ! ぬ key: 2 " ふ key: 3 # あ ぁ key: 4 $ う ぅ key: 5 % え ぇ key: 6 & お ぉ key: 7 ’ や ゃ //row 1 key: 8 ( ゆ ゅ key: 9 ) よ ょ key: - = ほ key: ^ ~ へ key: ¥ | ー key: @ ‘ " key: [ { 。 key: ; + れ //row 2 key: : * け key: ] } む key: , < ね ` key: . > る 。 key: / ? め . key: - ろ key: A ち key: B こ //row 3 key: C そ key: D し key: E い ぃ key: F は key: G き key: H く key: I に key: J ま //row 4 key: K の key: L り key: M も key: N み key: O ら key: P せ key: Q た key: R す //row 5 key: S と key: T か key: U な key: V ひ key: W て key: X さ key: Y ん key: Z つ っ //row 6 key: SHIFT key: CTRL key: GRAPH key: CAPS key: かな key: F1 F6 key: F2 F7 key: F3 F8 //row 7 key: F4 F9 key: F5 F10 key: ESC key: TAB key: STOP key: BS key: SELECT key: RETURN //row 8 key: SPACE key: CLS/HOME key: INS key: DEL key: ← key: ↑ key: ↓ key: → //row 9 key: * key: + key: / key: 0 key: 1 key: 2 key: 3 key: 4 //row 10 key: 5 key: 6 key: 7 key: 8 key: 9 key: - key: , key: . //row 11 key: key: 実行 key: key: 取消 key: key: key: key: ares-126/ares/System/MSX/bios.rom000066400000000000000000001000001415063341600166500ustar00rootroot00000000000000 ÿ#$4$!s$'!9NX".EMU`mÁ×í^ÂCÏ÷oÂÌ×:R\j|Ïô6TK%ASVõfj{ÍßÏGYò!jyDVgvÆ×éù  & 7 G Y k } Î çajmpsÂÆÊópO #(##N#fi:G.:@G.˹xәyә!x wUۘ`Ә}ә|?ә}ә|?@ә` xAO Ә U xA<= ` xA<£= !C!xQ ":(:=:o:G.:!* `Ә x :G.:H:8*(%%:m*&m:8*(`:W {Ә>ӘyӘ ͌0 zӘ>22:2>22*""*"$*"(*"&͏ͨþ>22>22*""*"$*"&*"(ͨ:2ͷSþ>2*""`Ә< *"$*"(*"&Sþ>2*""` Ә< *"$*"(*"&Sþ:G.:G .J J:G.:G .JJJJJ:G.:G .J>J>JJJ:G.:G .JJJJJ!h F~#fo)GG.   &o)))͌0))[&ɇ*(_:>> 8 :("0 * "!""[K͹:2**K @:O  :/O* ":͛:(:,/2, ͛:,/2, WXK O:GE( /z(MMAә}әۘӘә>әۙә>әۙ......>22>!m>!  m.!͗![$×:!:(8*"> m>!wE*$om:*m:G*$mK o&))) @:Ϳ##!O͟ RIGHTC!a͟ LEFTC!r͟ UPC!͟ TUPC!͟ DOWNC!͟ TDOWNCK[SCALXYCS*))))).>2,y( G>2,yO "*MAPXY:,**FETCHC! ͟ STOREC! ͟ SETATR!1 ͟ READC!B ͟ SETC!R ͟ NSETCX!d ͟ GTASPC!v ͟ PNTINI! ͟ SCANR! ͟ SCANL>#.ͫ >.~#/ 00/7/ͳ ͳ | } >ӫ>PӪ<<w /w %$|(ټ8( .gxGyOyO0xG0}(%ÇxӨy2!CMN!:Ϳ# #!*4$>22!V%͎x͊>2>2>2>2!V%͎">22)!/&͎eC-BIOS Logo ROM!?6!!@iv!iv(g(#< GͿ##xͿ##W_xY!AB!x!%͎G0ʹxx(>.ʹx0ʹ> ʹ> ʹ##(Oۙ4$(((G _x0_|!_qxYzx!@~(!%͎#>!w} >!w>!wM>!w>!w'!"""H!"J"t!;%!"!"!"! "!"!"!8"!"! "!"!"!8"!"!"!"!8"!Y"!u"]!"c!u"i>2\2b2h>'2> 2:2>2>2>2>2>2:2*" >!"2!ۨW?OӨ:/_2G:/ {P2G:/ {{/2zӨp#y@O0v:0 ~ʹ#~!?# :(:)Pͫ:DR:!c͟ INIFNK!u͟ STRTMS*[> *[ v~#} !"ͤ:0:2a(:½ 8*ͽM*:$8"&w*l. !> : *:,0 E͐-"!".*l:!0..">2>2:!0<:!<2:= :=2:2:=2:!<2G< 2!4(5(.y2(y2"22> > >>2:!<2:=2l!:_w: ͽml*E:2G:ͽ=2ͽ"&:W=O!bk+.l*E:G:ͽ<2ͽ."&:=OT]#:Ó!͗ :> Ò:::ͽM::ͽE2_! **́: !!~/w#!͗ͽ>MV  . E  lrxjEK.JLl+LLMY ABCD"HExyͶ%8( > 27ӑ>Ӑ/Ӑͻې>0/!w  w@8 `0@P7:T>2T? !H͎*"&}w͏ 0!22:ċ*"> 2ͽE (*: &~(:ͽM*"> :27ɯ۪Ӫ۩۪Ӫ۩7!L͟ ISCNTCA!a͟ BEEP"!u͟ FNKSB!͟ ERAFNK!͟ DSPFNK::ͽʂ!͟ 7TAPION!͟ 7TAPIN!͟ TAPIOF!͟ 7TAPOON!͟ 7TAPOUT!͟ TAPOOFG۪( ( ˧(Ӫ>RRӠ{ӡӠۢɷ>(<ӫۨӨۙO۪Ӫ۩ͧͬ:d >s/!_~=(>\濳_>R>\/!O ~>0 >s<=G(L>\濳_>Rx( >\Ѡ(>ɯ!S͟ GTPAD!d͟ GTPDL͚F#~##o&͚~2/2c*[ :=2 ! q#c>2E۪O !yӪ۩w# !:!&8!& ݾĴ/ݦw8## y !'>2y((x >! > 5>x > $>!_(  ~( â*w#} !["?W:4$^"&Ç!͟ &ÇCALBASۙ!( Ә x !~Ә# x >ә>@ә!%~Ә#~ Ә e#_E#GۨẀ{z%Wէ$|oG>#_Ez#GۨWYͅz%W$zG(= !g$ۨÌz%oG>U{$W|gG>$_/OzG}$G>U$GzgۨoӨ:/O2}Ө!zo|gywۨӨW_oۨO?Ө{o|&))@0|/g:/_2oyӨzO}! wzGۨO?Ө{2yӨzO! sӨ^ӨszӨӨ͘ӨC-BIOS 0.29 cbios.sf.net Character set: US Interrupt frequency: 60Hz Keyboard type: US Init ROM in slot: Cannot execute a BASIC ROM. ERROR:MEMORY NOT FOUND.CALLED NON EXISTING BASIC.STACK ERROR. No cartridge found. This version of C-BIOS can only start cartridges. Please restart your MSX (emulator) with a cartridge inserted.0123456789-=\[];'`,./abcdefghijklmnopqrstuvwxyz)!@#$%^&*(_+|{}:"~<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ     ˩ٿڷ冦椢ح궸  *+/0123456789-,.p@{( !1͟ > .z/{/ROMBAS>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:!I:͟ BASIC statements are not implemented yet͎!"}͟ unknown@7D179}!?!?!~͟ unknown@7E14ares-126/ares/System/MSX2/000077500000000000000000000000001415063341600152705ustar00rootroot00000000000000ares-126/ares/System/MSX2/Controller/000077500000000000000000000000001415063341600174135ustar00rootroot00000000000000ares-126/ares/System/MSX2/Controller/Gamepad/000077500000000000000000000000001415063341600207515ustar00rootroot00000000000000ares-126/ares/System/MSX2/Controller/Gamepad/.gitignore000066400000000000000000000000001415063341600227270ustar00rootroot00000000000000ares-126/ares/System/MSX2/Keyboard/000077500000000000000000000000001415063341600170305ustar00rootroot00000000000000ares-126/ares/System/MSX2/Keyboard/Japanese/000077500000000000000000000000001415063341600205565ustar00rootroot00000000000000ares-126/ares/System/MSX2/Keyboard/Japanese/layout.bml000066400000000000000000000025501415063341600225710ustar00rootroot00000000000000layout name: Japanese //row 0 key: 0 わ を key: 1 ! ぬ key: 2 " ふ key: 3 # あ ぁ key: 4 $ う ぅ key: 5 % え ぇ key: 6 & お ぉ key: 7 ’ や ゃ //row 1 key: 8 ( ゆ ゅ key: 9 ) よ ょ key: - = ほ key: ^ ~ へ key: ¥ | ー key: @ ‘ " key: [ { 。 key: ; + れ //row 2 key: : * け key: ] } む key: , < ね ` key: . > る 。 key: / ? め . key: - ろ key: A ち key: B こ //row 3 key: C そ key: D し key: E い ぃ key: F は key: G き key: H く key: I に key: J ま //row 4 key: K の key: L り key: M も key: N み key: O ら key: P せ key: Q た key: R す //row 5 key: S と key: T か key: U な key: V ひ key: W て key: X さ key: Y ん key: Z つ っ //row 6 key: SHIFT key: CTRL key: GRAPH key: CAPS key: かな key: F1 F6 key: F2 F7 key: F3 F8 //row 7 key: F4 F9 key: F5 F10 key: ESC key: TAB key: STOP key: BS key: SELECT key: RETURN //row 8 key: SPACE key: CLS/HOME key: INS key: DEL key: ← key: ↑ key: ↓ key: → //row 9 key: * key: + key: / key: 0 key: 1 key: 2 key: 3 key: 4 //row 10 key: 5 key: 6 key: 7 key: 8 key: 9 key: - key: , key: . //row 11 key: key: 実行 key: key: 取消 key: key: key: key: ares-126/ares/System/MSX2/bios.rom000066400000000000000000001000001415063341600167320ustar00rootroot00000000000000 Ò#ä$G$Æ$!Ú".QW_qÅä5ÔÝæïø?r!4YÍ÷ )/ASCö fyËÝð-PbsÂÒãõ  2 C S e w É Ú [!$'6:>gy}Ó$,;2GQÍÓO #(##N#fi:G.:@G.˹xәyә!y80!x w_ۘqӘә>ә}ә|?әә>ә}ә|?@ә:0qQ xAO Ә :0_G xA<= :0qQ xA<= !:(:=:o:G.:!* qӘ x :G.:_:8*(%%:2*&2:8*(Q:W {Ә>ӘyӘ 0 zӘ!!!!:)0(:G.:G .ͣ ͣ:G.:G .">ͣ ͣ:G.:G .ͣͣͣͣͣ:G.:G .ͣ>ͣ>ͣͣͣ:G.:G .ͣͣͣͣͣ! F~#fo)GG.   &o)))0))[&ɇ*(_:>> 8 :(+0 * "!"!.[K:2**K @:O t :/Ot* "::(:,/2, :,/2, WXK O:GQ( /z(WWAә}әGۘQӘә>әۙә>әۙ......>22Z>!ͅ>!  ͅ.!.;..![$: !9KZvv:(8*"> ͅ>!w*$oͅ:*Å:G*$Å:G!):G!:G!:!%,(!*!$:g.&>->.%} |әyә>͛8K o&))) @:##![ͫ RIGHTC!mͫ LEFTC!~ͫ UPC!ͫ TUPC!ͫ DOWNC!ͫ TDOWNCK[SCALXYCS*))))).>2,y( G>2,yO "*MAPXY:,**FETCHC! ͫ STOREC!+ ͫ SETATR!= ͫ READC!N ͫ SETC!^ ͫ NSETCX!p ͫ GTASPC! ͫ PNTINI! ͫ SCANR! ͫ SCANL>#.ͷ >.~#/ 00/7/Ϳ Ϳ | } >ӫ>PӪ<<w /w %$|(ټ8( .gxGyOyO0xG0}( &LxӨy2!S͗ͯO!:# #!*G$>22͝!i%3>ә>әә@ә>vӘә!әۘv(֯ә>әx/Ϳ#>2>2>2>2͝!A!i%3^=>22)!D&3C-BIOS Logo ROM!?6!!@̲ͥ!̲ͥ(g(#< G##x##W_x͕!ABx!%3G0Yxx(>.Yx0Y> Y> Y##4(OۙG$4(4(4(G _x0_|!_qx͕zx!@~(!%3#>!w} >!w>!wM>!w>!w'>!w>2>2!"""H!"J"t!N%!"!"!"! "!"!"!8"!"! "!"!"!8"!"!"!"!8"!Y"!u"]!"c!u"i>2\2b2h>'2> 2:2>2>2>2>2>2:2*" >!Y"2!ۨW?OӨ:/_2G:/ {P2G:/ {{/2zӨp#y@O0!y  # 2 O2!&C #&Dy7ȷy#v:0 ~Y#~!# :(:)PP:D!ͫ INIFNK!ͫ STRTMS*[> *[ v~#} !"ͤ:0͸:2a(:b 8*ʪbW*:$8"&w* !<> ͗: *:,0 5-"!"*:!0">2>2:!0<:!<2:= :=2:2:=2:!<2G< 2!`4(5(.y2(y2"22> > >>2:!<2:=2!:_w: bÅ*E:2G:b=2bs"&:W=O!bk+*E:G:b<2bs"&:=OT]#:O)8 (͐:(O͐ͤ! :> ͗7:::bW::bQ2_! **ͤ: !!~/w#!b>W 7    * 7LUj*E*KJlLM5YALBUCDHxyͶ8ͷ( > ͪ27ӑ>Ӑ/Ӑͻې>0/!w  w@8 `0@P7:>2? !3*"&}w4ʘ 0!22:?͸*"> 2bQ (*: &~(:bW*"> :27ɯ۪Ӫ۩۪Ӫ۩7!ͫ ISCNTC!ͫ BEEP"!)ͫ FNKSB!:ͫ ERAFNK!Lͫ DSPFNK::ͽʔÝ!rͫ 7TAPION!ͫ 7TAPIN!ͫ TAPIOF!ͫ 7TAPOON!ͫ 7TAPOUT!ͫ TAPOOFG۪( ( ˧(Ӫ><<<>Ӡ{ӡӠۢɷ>(<ӫۨӨۙO۪Ӫ۩ͧͬ:d >'/!_~=(>濳_>>/!O ~>0 >'<=G(L>濳_>x( >Ѡ(>ɯ!ͫ GTPAD!ͫ GTPDLNF#~##o&N~2Ͷ/2*[ :=2 ! q#>2E۪O !yӪ۩w# !:!&8!' ݾh/ݦw8## y !'>2y((x >! > 5>x > $>!_( ~(V*w#} !["W:G$7&L!4ͫ &LCALBAS["Sۙ!( Ә x !~Ә# x >ә>@ә!&~Ә#~ Ә  $_E $GۨẀ{z-%Wէ$|oG> $_Ez $GۨWYͅz-%W$zG(= !z$ۨÌz-%oG>U$W|gG>$_/OzG}$G>U$GzgۨoӨ:/O2}Ө!zo|gywۨӨW_oۨO?Ө{o|&))@0|/g:/_2oyӨzO}! wzGۨO?Ө{2yӨzO! sӨ^ӨszӨӨ͘ӨC-BIOS 0.29 cbios.sf.net Character set: US Default interrupt freq.: 60HzKeyboard type: US Init ROM in slot: Cannot execute a BASIC ROM. ERROR:MEMORY NOT FOUND.CALLED NON EXISTING BASIC.STACK ERROR. No cartridge found. This version of C-BIOS can only start cartridges. Please restart your MSX (emulator) with a cartridge inserted.0123456789-=\[];'`,./abcdefghijklmnopqrstuvwxyz)!@#$%^&*(_+|{}:"~<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ     ˩ٿڷ冦椢ح궸  *+/0123456789-,.p@{( !1ͫ > .z/{/ROMBAS>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:!I:ͫ BASIC statements are not implemented yet3!"}ͫ unknown@7D179}!!!~ͫ unknown@7E14ares-126/ares/System/MSX2/sub.rom000066400000000000000000000400001415063341600165720ustar00rootroot00000000000000CD~|}!8*ME sygÊÅ× ×é ú é ó`åPòf%u n M aü|ÌÞðÒ%6HOa~O #(##N#fi>#.">.~#/ 00/7/**|:}:Wo|oG>͉_E͉GۨẀ{zīWէo|oG>͉_Ez͉GۨWYͅzīWozG(= !ۨÌzīoG>U W|gG>_/OzG}gG>U6GzgۨoӨ:/O2}Ө!zo|gywۨӨW_oۨO?Ө{o|&))@0|/g:/_2oyӨzO}! wzGۨO?Ө{2yӨzO! sӨ^ӨszӨӨ͘Ө:G:@G˹xәyә!y80!x w0ۘBӘә>ә}ә|?әә>ә}ә|?@ә:0B͈ xAO Ә :00~ xA<= :0B͈ xA<= !`s [  !:0˾22!xQ >ә>ә!###>ә>ә:(:=:o:G:!* BӘ x :G:͐:8*(%%:i *&i :8*(͈ :W {Ә>ӘyӘ %0 zӘ>2222:2>22*""*:)8!"$*"(*"&\ ͏ >22>22*""*"$*"&*"(\ :222P͛͞ >2*""BӘ< *"$*"(*"&22͛ͽ >2*""B Ә< *"$*"(*"&22Ͳ͛ :)0(:G:G  :G:G "> :G:G :G:G >>:G:G ! F~#fo)GG   &o)))%0))[&ɇ*(_:>> 8 :("0 * "!"u [K :2**K @:O ͫ :/Oͫ* ":4 :(:,/2, 4 :,/2, WXK O:G"( /z(((Aә}ә~ ͈ۘ Әә>әۙә>әۙ>22͞ >!V>!  V!*!\;![$*!\>2*""BӘ< *"$*"(*"&:G:G >> >!6#6͛ͽ >2:G: G !""!x"&!v"(22 ͗ >2:G:G !""!x"&!v"(22 ͗ >2: G:G !""!"&!"(22 ͗ >2:G:G !""!"&!"(22 ͗ : !} ɏ  :(8*"> V!"}!wɯ*$oV:*V:G*$V:G!):G!:G!:!l ,b (\ !*\ !$\ :g.&\ >-b >.b l }b |әyә> 8K o&))) @:P#! RIGHTC! LEFTC! UPC! TUPC! DOWNC! TDOWNCK[SCALXYCS*))))).>2,y( G>2,yO "*MAPXY:,**FETCHC!`STOREC!rSETATR!READC!SETC!NSETCX!GTASPC!PNTINI!SCANR!SCANL!DOGRPHu :2*"f ":*g"hCjCl!@:8:2n:y>ә>ә!@:8:ӛ #!~MAPXYC!TRIGHT!TRIGHT:WCfSh*B"j!"l2o:2n*:g"hSh>2o:2j*"f:py*0R#"l:WSh*0R#"jSf2o:2n:y!Zn CLRTXT*":G: :G:G:O: !*()o>GE '͈  !\~Ә#Ӛ'~  ۘӚ'O ~ ۘGۘO'zO ͈ BӚӘ{ӚӘ:> 8> ә>ә!bx7z7!:: $B!RKj[l~y*bN#F#Cj^#V#Sl( (NC2nB~y>ә>ә> G(x(ůCӛyO#NB*fKj[lq#p#s#r#( (~>yB>  G > COq#> 8!BLTVD!BLTDV!BLTMD!0BLTDM!ANEWPADͳͼ!ZKNJPRT> ӴyG۵ӵyӴ۵G> ӴyG۵ӵyӴxӵares-126/ares/System/Master System/000077500000000000000000000000001415063341600172375ustar00rootroot00000000000000ares-126/ares/System/Master System/Controller/000077500000000000000000000000001415063341600213625ustar00rootroot00000000000000ares-126/ares/System/Master System/Controller/Gamepad/000077500000000000000000000000001415063341600227205ustar00rootroot00000000000000ares-126/ares/System/Master System/Controller/Gamepad/.gitignore000066400000000000000000000000001415063341600246760ustar00rootroot00000000000000ares-126/ares/System/Master System/Expansion/000077500000000000000000000000001415063341600212035ustar00rootroot00000000000000ares-126/ares/System/Master System/Expansion/FM Sound Unit/000077500000000000000000000000001415063341600234565ustar00rootroot00000000000000ares-126/ares/System/Master System/Expansion/FM Sound Unit/.gitignore000066400000000000000000000000001415063341600254340ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/000077500000000000000000000000001415063341600164425ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/Controller/000077500000000000000000000000001415063341600205655ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/Controller/Control Pad/000077500000000000000000000000001415063341600226725ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/Controller/Control Pad/.gitignore000066400000000000000000000000001415063341600246500ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/Controller/Fighting Pad/000077500000000000000000000000001415063341600230115ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/Controller/Fighting Pad/.gitignore000066400000000000000000000000001415063341600247670ustar00rootroot00000000000000ares-126/ares/System/Mega Drive/tmss.rom000066400000000000000000000040001415063341600201410ustar00rootroot00000000000000SEGA GENESIS (C)SEGA 1990.MAYGENESIS OS GENESIS OS OS 00000000-00[t  U `KjL)g#|SEGA/0p,@Nfr8GQ(@68f((v&Q(@x&Qz]Q`<?0<l7ACL|0<?0QN` SEGESEGA@Ag"f 8Agg$NuN(L *QN8D0<YxC_ˊ:v $< vF`<u#L<u< u 2<u#3=,u=s  H =jr 3@a++++++    ++P0P8P@PPP`Px`D     hmv{ @    ##  #" #++++++++++++++++)  )  ̻wfUD3"̻wfUD3"xiZK<-     . - - - - .L/ 0 1 2 3 /L4 5 6 7 8 4L/ 9 : 2 /L- 4 ; < 7 4L- .- - - - .kLq l q l k j x v r m j j y w s n j j t o t o j j qlu p j kj j qlkefffffTfffffCeffff2Tffff!Cefff2Tfff!Ceff2Tff#!Cef42TfE#!CeV42dfE#!cfV4bffE#aefV4`TffE#aCefV4b2TffEc!CefVd2Tffe!Ceff2Tff!Cef2Tf!Ce2d!cba`>cgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p`pt 6p=6.QQ3Q3۹0t&CCEEYFGYۃYh6 3 р€u  6$n.566>pt2@+6>Q6GGCC6>YL@@@6>Qtt u@@6@CC6+>Y6>t沰6u666 66"h?;u:t666u606=unFFC $u3揋 ` L b6:v6 $< v6C`hپ68uò**а &G6>ptÀ€aø缰澺B t $t庋иø缋纰 澺Bt $<u3ع 06 66666666666$666 󫹀GGb@PP6J6GF& 666, 6t6x~6u6t6 6>ptg6t66xu6wu6p:6366x6#$ð浹 $ 浹 $а@浹 $ ‹6`6d3#6b6``36>u .?.7BBP6 6FCC66v6l6Vb66Vaþ 0.?.7BB6#$zaQ.6CCY6.»jƻD  C6C t< w<$w,  t<tw 2<&tw,,.Ft:<t<t<t<t<t<t<t*6`<t<t@u6wÊ66O$6G6O&R6>ttu w Z`6>u.C6'6CCa6q6&qu  tûb6t6666t666Ê»u6 t:tu 66 X66Àu 66 66.è@tP6<-rtP6,s,66ût6t uJ6>u u B6:siBR6Z66u6v6>u.6t!6>tw I63666D668tu 66D666\6Ê»v6 t:tu 668X66Àu 668p66.ètWrF@6tu wt):t%6t wu-6G6)FF[+6G6)[u66666+-a6>t*+6>tû\6.Nݹÿ.7Q.6FFGGCCY`6>uO6>tuG6$6ct €ut ʀut h n.466$apw`3摿6>u666Bh3ۋ$t66"66ƅ>$GEEȿ揊<u 摊˰a`6336u^tM66@6t)6>tƆ6Džt Ea`h6=u6pD668wr:46>tFcgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p` >D & &D  D & &D & &D  D & &D > >D & &D  D & &D  D  D  D  D & &D  D  D  D   D  D  D & &D  D  D  D  4t L`lDP6Vb?pp888pppppp888ppppppp.////.H////////////////////////.////.`6>puP366p+.vEE.^@Q.Q.6GGFF6GGYCCY*6p.68pt'66p66"6p6"6B6p6B6b6p6b66p666p66p|z6pk"i6pZ3X6pIDG6p8U66p'f%6pw6p6p 6p 6p 6p 6p 6p6p6$.566pi6Z6"6A 6E 6I 6M 8636$.5Z*$*dz* 66 66 6D6 66  6U6f6w6zu6 id6 XS6 6569 6=8696= *6 6=6 6 66p6pa6666 6"6@6B6`6b66û6p66G 6G6G 6p3c9 ; 4 5 6 7 <=>?89:;45670123; 9 6 4 7 5 ><?=:8;9647520318x8j8](x(j(]PpBp5pPB5 (089:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`.DSdu0Afp +1>DPUafrw̻wfUD3"̻wfUD3"xiZK<-     pw++++++++++++++++Boot Rom Staff Programer Kousei Kazeto Sound Composer Takashi IsoyamaGraphic Designer Yukari Honda Special Thanks Masa Torii Satoru Imai KawaButter MasahiroIwamoto++++++++++++++++ares-126/ares/System/WonderSwan Color/000077500000000000000000000000001415063341600176655ustar00rootroot00000000000000ares-126/ares/System/WonderSwan Color/boot.rom000066400000000000000000000200001415063341600213370ustar00rootroot00000000000000؋ȋЎЎ؎ 栰䵨t@䠨u䵨t@U=Uth?pt 6p=6.QQ3Q3۹0t&CCEEYFGYۃYh6 3 р€u  6$.566>pt2@+6>Q6GGCC6>YL@@@6>Qtt u@@6@CC6+>Y6>t沰6u666 66"h?;u:t666u606=unFFC $u3揋 ` *b6:v6 $< v6C`hپ68uò**а &G6>ptÀ€aø缰澺B t $t庋иø缋纰 澺Bt $<u3ع 06 66666666666$666S 󫹀GG@PP6_6GF&!I666, 6t06x~6u6t6P 6>ptg6t6' 6xu6wu6p6366x6#$ð浹 $ 浹 $а@浹 $ ‹6`6d3#6b6``36>u3 .?.73BBP6 6FCC6666V66Vaþ E.?.7BB6#$@zaQ.6CCY6.»jƻD  C6C t< w<$w,  t<tw 2<&tw,,.Ft:<t<t<t<t<t<t<t2.X<t<t<t@u6wÊ66O$6G6O&R6>ttu w Z`6>u3.C6'6CCa6q6&qu  tûb6t6666t666Ê»u6 t:tu 66 X66Àu 66 66.è@tP6<-rtP6,s,66ût6t tsJ6:siBR6Z66u6v6>u.6t!6>tw I63666D668tu 66D666\6Ê»v6 t:tu 668X66Àu 668p66.ètWrF@6tu wt):t%6t wu-6G6)FF[+6G6)[u66666+-a6>t 6.ݹÿ.7Q.6FFGGCCY`6>uO6>tuG6$6ct €ut ʀut h .466$apw`3摿6>uQ666aBh3ۋ$t66"66ƅ>$GEEȿ揊<u 摊˰a`6336u^tM66@6t)6>tƆ6Džt Ea`h6=u6pD668wr:46>tFcgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p` >D & &D  D & &D & &D  D & &D > >D & &D  D & &D  D  D  D  D & &D  D  D  D   D  D  D & &D  D  D  D  *j B`lDP*JV?pp888pppppp888ppppppp.////.H////////////////////////.////.`6>puP366p.vEE.^@Q.Q.6GGFF6GGYCCY'6p.68pt'66p66"6p6"6B6p6B6b6p6b66p666p66pyw6ph"f6pW3U6pFDD6p5U36p$f"6pw6p6p 6p 6p 6p 6p 6p6p6$.566pf6W6"6A 6E 6I 6M 5636$.5Z*$*dz* 66 66 6D6 66  6U6f6w6wr6 fa6 U6569 6=A6 696= ,6=$6 6 6 66p6pa6666 6"6@6B6`6b66û6p6G6G 6G 6G 6p'W9 ; 4 5 6 7 <=>?89:;45670123; 9 6 4 7 5 ><?=:8;9647520318x8j8](x(j(]PpBp5pPB5 (089:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`$:IZk|&7\f!'4:FKW\h|̻wfUD3"̻wfUD3"xiZK<-     pw++++++++++++++++Boot Rom Staff Programer Kousei Kazeto Sound Composer Takashi IsoyamaGraphic Designer Yukari Honda Special Thanks Masa Torii Satoru Imai KawaButter MasahiroIwamoto++++++++++++++++ares-126/ares/System/WonderSwan/000077500000000000000000000000001415063341600166265ustar00rootroot00000000000000ares-126/ares/System/WonderSwan/boot.rom000066400000000000000000000100001415063341600202770ustar00rootroot00000000000000Ћм ؎浰䵊s@$u Au$t@核0缰@澿 ?&$ 栰3摰  d0u00G=tC<+rF2 2 2 12 <vF<v &DC= H G 氰@沰@浹䵨t ?$<u<t3沰涾|tD?&&W;Du:TtDT|tD0t=t[C&$u3揸 ؾ0$ 3 @0u"P *l+z# t ^+u*u#r3˰ 浹$@浹$ Ċ2"ĈGG' t< w<$w,  t<tw 2<&tw,,ú *&?@&7vBB0GFCC F     &F tGGû3,'-û!tEtÊл'HxtzHt{#@{@t*wf4Ê@$@G`V&C'CCaR u wZû$'u  t2Ê»( t9tu XÀu /è@t0ڊ<-rt0ڊ,s,û't tZJsRBR3Z-()&w Is3'P?u0u Ê») t6tu 0XÀu 0p/ètU rF @tu YxC_ˊ:v $< vF`<u#L<u< u 2<u#3=,u=s  H =jr 3@a++++++    ++P0P8P@PPP`Px`D     hmv{ @    ##  #" #++++++++++++++++)  )  ̻wfUD3"̻wfUD3"xiZK<-     . - - - - .L/ 0 1 2 3 /L4 5 6 7 8 4L/ 9 : 2 /L- 4 ; < 7 4L- .- - - - .kLq l q l k j x v r m j j y w s n j j t o t o j j qlu p j kj j qlkefffffTfffffCeffff2Tffff!Cefff2Tfff!Ceff2Tff#!Cef42TfE#!CeV42dfE#!cfV4bffE#aefV4`TffE#aCefV4b2TffEc!CefVd2Tffe!Ceff2Tff!Cef2Tf!Ce2d!cba`>cgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p` #include #include #include namespace ares { Platform* platform = nullptr; bool _runAhead = false; } ares-126/ares/ares/ares.hpp000066400000000000000000000045261415063341600156570ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace nall; namespace ares { static const string Name = "ares"; static const string Version = "126"; static const string Copyright = "ares team, Near"; static const string License = "ISC"; static const string LicenseURI = "https://opensource.org/licenses/ISC"; static const string Website = "ares-emulator.github.io"; static const string WebsiteURI = "https://ares-emulator.github.io"; //incremented only when serialization format changes static const u32 SerializerSignature = 0x31545342; //"BST1" (little-endian) static const string SerializerVersion = "125"; namespace VFS { using Pak = shared_pointer; using File = shared_pointer; } namespace Video { static constexpr bool Threaded = true; } namespace Constants { namespace Colorburst { static constexpr f64 NTSC = 315.0 / 88.0 * 1'000'000.0; static constexpr f64 PAL = 283.75 * 15'625.0 + 25.0; } } extern bool _runAhead; inline auto runAhead() -> bool { return _runAhead; } inline auto setRunAhead(bool runAhead) -> void { _runAhead = runAhead; } } #include #include #include #include #include #include #include #include #include ares-126/ares/ares/debug/000077500000000000000000000000001415063341600152735ustar00rootroot00000000000000ares-126/ares/ares/debug/debug.cpp000066400000000000000000000021711415063341600170660ustar00rootroot00000000000000namespace ares { Debug _debug; auto Debug::reset() -> void { _totalNotices = 0; _unhandledNotices.reset(); _unimplementedNotices.reset(); _unusualNotices.reset(); _unverifiedNotices.reset(); } auto Debug::_unhandled(const string& text) -> void { if(_unhandledNotices.find(text)) return; if(_totalNotices++ > 256) return; _unhandledNotices.append(text); print(terminal::color::yellow("[unhandled] "), text, "\n"); } auto Debug::_unimplemented(const string& text) -> void { if(_unimplementedNotices.find(text)) return; if(_totalNotices++ > 256) return; _unimplementedNotices.append(text); print(terminal::color::magenta("[unimplemented] "), text, "\n"); } auto Debug::_unusual(const string& text) -> void { if(_unusualNotices.find(text)) return; if(_totalNotices++ > 256) return; _unusualNotices.append(text); print(terminal::color::cyan("[unusual] "), text, "\n"); } auto Debug::_unverified(const string& text) -> void { if(_unverifiedNotices.find(text)) return; if(_totalNotices++ > 256) return; _unverifiedNotices.append(text); print(terminal::color::gray("[unverified] "), text, "\n"); } } ares-126/ares/ares/debug/debug.hpp000066400000000000000000000017021415063341600170720ustar00rootroot00000000000000namespace ares { struct Debug { auto reset() -> void; template auto unhandled(P&&... p) -> void { return _unhandled({forward

(p)...}); } template auto unimplemented(P&&... p) -> void { return _unimplemented({forward

(p)...}); } template auto unusual(P&&... p) -> void { return _unusual({forward

(p)...}); } template auto unverified(P&&... p) -> void { return _unverified({forward

(p)...}); } private: auto _unhandled(const string&) -> void; auto _unimplemented(const string&) -> void; auto _unusual(const string&) -> void; auto _unverified(const string&) -> void; u64 _totalNotices = 0; vector _unhandledNotices; vector _unimplementedNotices; vector _unusualNotices; vector _unverifiedNotices; }; extern Debug _debug; } #define debug(function, ...) if constexpr(1) ares::_debug.function(__VA_ARGS__) ares-126/ares/ares/inline.hpp000066400000000000000000000002321415063341600161710ustar00rootroot00000000000000#include #include #include #include ares-126/ares/ares/memory/000077500000000000000000000000001415063341600155155ustar00rootroot00000000000000ares-126/ares/ares/memory/fixed-allocator.cpp000066400000000000000000000005011415063341600212720ustar00rootroot00000000000000#include namespace ares::Memory { alignas(4096) u8 fixedBuffer[1_GiB]; FixedAllocator::FixedAllocator() { _allocator.resize(sizeof(fixedBuffer), 0, fixedBuffer); } auto FixedAllocator::get() -> bump_allocator& { static FixedAllocator allocator; return allocator._allocator; } } ares-126/ares/ares/memory/fixed-allocator.hpp000066400000000000000000000002701415063341600213020ustar00rootroot00000000000000#pragma once namespace ares::Memory { struct FixedAllocator { static auto get() -> bump_allocator&; private: FixedAllocator(); bump_allocator _allocator; }; } ares-126/ares/ares/memory/memory.hpp000066400000000000000000000011011415063341600175270ustar00rootroot00000000000000#pragma once namespace ares::Memory { inline auto mirror(u32 address, u32 size) -> u32 { if(size == 0) return 0; u32 base = 0; u32 mask = 1 << 31; while(address >= size) { while(!(address & mask)) mask >>= 1; address -= mask; if(size > mask) { size -= mask; base += mask; } mask >>= 1; } return base + address; } inline auto reduce(u32 address, u32 mask) -> u32 { while(mask) { u32 bits = (mask & -mask) - 1; address = address >> 1 & ~bits | address & bits; mask = (mask & mask - 1) >> 1; } return address; } } ares-126/ares/ares/memory/readable.hpp000066400000000000000000000037041415063341600177710ustar00rootroot00000000000000#pragma once #include namespace ares::Memory { template struct Readable { ~Readable() { reset(); } auto reset() -> void { delete[] self.data; self.data = nullptr; self.size = 0; self.mask = 0; } auto allocate(u32 size, T fill = (T)~0ull) -> void { if(!size) return reset(); delete[] self.data; self.size = size; self.mask = bit::round(self.size) - 1; self.data = new T[self.mask + 1]; memory::fill(self.data, self.mask + 1, fill); } auto fill(T fill = ~0ull) -> void { for(u32 address : range(self.size)) { self.data[address] = fill; } } auto load(VFS::File fp) -> void { if(!self.size) allocate(fp->size()); fp->read({self.data, min(fp->size(), self.size * sizeof(T))}); for(u32 address = self.size; address <= self.mask; address++) { self.data[address] = self.data[mirror(address, self.size)]; } } auto save(VFS::File fp) -> void { fp->write({self.data, min(fp->size(), self.size * sizeof(T))}); } explicit operator bool() const { return (bool)self.data; } auto data() const -> const T* { return self.data; } auto size() const -> u32 { return self.size; } auto mask() const -> u32 { return self.mask; } auto operator[](u32 address) const -> T { return self.data[address & self.mask]; } auto read(u32 address) const -> T { return self.data[address & self.mask]; } auto write(u32 address, T data) const -> void {} auto program(u32 address, T data) const -> void { self.data[address & self.mask] = data; } auto begin() -> T* { return &self.data[0]; } auto end() -> T* { return &self.data[self.size]; } auto begin() const -> const T* { return &self.data[0]; } auto end() const -> const T* { return &self.data[self.size]; } auto serialize(serializer& s) -> void { s(array_span{self.data, self.size}); } //private: struct { T* data = nullptr; u32 size = 0; u32 mask = 0; } self; }; } ares-126/ares/ares/memory/writable.hpp000066400000000000000000000041301415063341600200350ustar00rootroot00000000000000#pragma once #include namespace ares::Memory { template struct Writable { ~Writable() { reset(); } auto reset() -> void { delete[] self.data; self.data = nullptr; self.size = 0; self.mask = 0; } auto allocate(u32 size, T fill = (T)~0ull) -> void { if(!size) return reset(); delete[] self.data; self.size = size; self.mask = bit::round(self.size) - 1; self.data = new T[self.mask + 1]; memory::fill(self.data, self.mask + 1, fill); } auto fill(T fill = ~0ull) -> void { for(u32 address : range(self.size)) { self.data[address] = fill; } } auto load(VFS::File fp) -> void { if(!self.size) allocate(fp->size()); fp->read({self.data, min(fp->size(), self.size * sizeof(T))}); for(u32 address = self.size; address <= self.mask; address++) { self.data[address] = self.data[mirror(address, self.size)]; } } auto save(VFS::File fp) -> void { fp->write({self.data, min(fp->size(), self.size * sizeof(T))}); } explicit operator bool() const { return (bool)self.data; } auto data() -> T* { return self.data; } auto data() const -> const T* { return self.data; } auto size() const -> u32 { return self.size; } auto mask() const -> u32 { return self.mask; } auto operator[](u32 address) -> T& { return self.data[address & self.mask]; } auto operator[](u32 address) const -> T { return self.data[address & self.mask]; } auto read(u32 address) const -> T { return self.data[address & self.mask]; } auto write(u32 address, T data) -> void { self.data[address & self.mask] = data; } auto program(u32 address, T data) -> void { self.data[address & self.mask] = data; } auto begin() -> T* { return &self.data[0]; } auto end() -> T* { return &self.data[self.size]; } auto begin() const -> const T* { return &self.data[0]; } auto end() const -> const T* { return &self.data[self.size]; } auto serialize(serializer& s) -> void { s(array_span{self.data, self.size}); } private: struct { T* data = nullptr; u32 size = 0; u32 mask = 0; } self; }; } ares-126/ares/ares/node/000077500000000000000000000000001415063341600151325ustar00rootroot00000000000000ares-126/ares/ares/node/attribute.hpp000066400000000000000000000004721415063341600176510ustar00rootroot00000000000000struct Attribute { Attribute(const string& name, const any& value = {}) : name(name), value(value) {} auto operator==(const Attribute& source) const -> bool { return name == source.name; } auto operator< (const Attribute& source) const -> bool { return name < source.name; } string name; any value; }; ares-126/ares/ares/node/audio/000077500000000000000000000000001415063341600162335ustar00rootroot00000000000000ares-126/ares/ares/node/audio/audio.hpp000066400000000000000000000001221415063341600200400ustar00rootroot00000000000000struct Audio : Object { DeclareClass(Audio, "audio") using Object::Object; }; ares-126/ares/ares/node/audio/stream.cpp000066400000000000000000000107721415063341600202410ustar00rootroot00000000000000auto Stream::setChannels(u32 channels) -> void { _channels.reset(); _channels.resize(channels); } auto Stream::setFrequency(f64 frequency) -> void { _frequency = frequency; setResamplerFrequency(_resamplerFrequency); } auto Stream::setResamplerFrequency(f64 resamplerFrequency) -> void { _resamplerFrequency = resamplerFrequency; for(auto& channel : _channels) { channel.nyquist.reset(); channel.resampler.reset(_frequency, _resamplerFrequency); } if(_frequency >= _resamplerFrequency * 2) { //add a low-pass filter to prevent aliasing during resampling f64 cutoffFrequency = min(25000.0, _resamplerFrequency / 2.0 - 2000.0); for(auto& channel : _channels) { u32 passes = 3; for(u32 pass : range(passes)) { DSP::IIR::Biquad filter; f64 q = DSP::IIR::Biquad::butterworth(passes * 2, pass); filter.reset(DSP::IIR::Biquad::Type::LowPass, cutoffFrequency, _frequency, q); channel.nyquist.append(filter); } } } } auto Stream::setMuted(bool muted) -> void { _muted = muted; } auto Stream::resetFilters() -> void { for(auto& channel : _channels) { channel.filters.reset(); } } auto Stream::addLowPassFilter(f64 cutoffFrequency, u32 order, u32 passes) -> void { for(auto& channel : _channels) { for(u32 pass : range(passes)) { if(order == 1) { Filter filter{Filter::Mode::OnePole, Filter::Type::LowPass, Filter::Order::First}; filter.onePole.reset(DSP::IIR::OnePole::Type::LowPass, cutoffFrequency, _frequency); channel.filters.append(filter); } if(order == 2) { Filter filter{Filter::Mode::Biquad, Filter::Type::LowPass, Filter::Order::Second}; f64 q = DSP::IIR::Biquad::butterworth(passes * 2, pass); filter.biquad.reset(DSP::IIR::Biquad::Type::LowPass, cutoffFrequency, _frequency, q); channel.filters.append(filter); } } } } auto Stream::addHighPassFilter(f64 cutoffFrequency, u32 order, u32 passes) -> void { for(auto& channel : _channels) { for(u32 pass : range(passes)) { if(order == 1) { Filter filter{Filter::Mode::OnePole, Filter::Type::HighPass, Filter::Order::First}; filter.onePole.reset(DSP::IIR::OnePole::Type::HighPass, cutoffFrequency, _frequency); channel.filters.append(filter); } if(order == 2) { Filter filter{Filter::Mode::Biquad, Filter::Type::HighPass, Filter::Order::Second}; f64 q = DSP::IIR::Biquad::butterworth(passes * 2, pass); filter.biquad.reset(DSP::IIR::Biquad::Type::HighPass, cutoffFrequency, _frequency, q); channel.filters.append(filter); } } } } auto Stream::addLowShelfFilter(f64 cutoffFrequency, u32 order, f64 gain, f64 slope) -> void { for(auto& channel : _channels) { if(order == 2) { Filter filter{Filter::Mode::Biquad, Filter::Type::LowShelf, Filter::Order::Second}; f64 q = DSP::IIR::Biquad::shelf(gain, slope); filter.biquad.reset(DSP::IIR::Biquad::Type::LowShelf, cutoffFrequency, _frequency, q); channel.filters.append(filter); } } } auto Stream::addHighShelfFilter(f64 cutoffFrequency, u32 order, f64 gain, f64 slope) -> void { for(auto& channel : _channels) { if(order == 2) { Filter filter{Filter::Mode::Biquad, Filter::Type::HighShelf, Filter::Order::Second}; f64 q = DSP::IIR::Biquad::shelf(gain, slope); filter.biquad.reset(DSP::IIR::Biquad::Type::HighShelf, cutoffFrequency, _frequency, q); channel.filters.append(filter); } } } auto Stream::pending() const -> bool { return _channels && _channels[0].resampler.pending(); } auto Stream::read(f64 samples[]) -> u32 { for(u32 c : range(_channels.size())) { samples[c] = _channels[c].resampler.read() * !muted(); } return _channels.size(); } auto Stream::write(const f64 samples[]) -> void { for(u32 c : range(_channels.size())) { f64 sample = samples[c] + 1e-25; //constant offset used to suppress denormals for(auto& filter : _channels[c].filters) { switch(filter.mode) { case Filter::Mode::OnePole: sample = filter.onePole.process(sample); break; case Filter::Mode::Biquad: sample = filter.biquad.process(sample); break; } } for(auto& filter : _channels[c].nyquist) { sample = filter.process(sample); } _channels[c].resampler.write(sample); } //if there are samples pending, then alert the frontend to possibly process them. //this will generally happen when every audio stream has pending samples to be mixed. if(pending()) platform->audio(shared()); } ares-126/ares/ares/node/audio/stream.hpp000066400000000000000000000032251415063341600202410ustar00rootroot00000000000000struct Stream : Audio { DeclareClass(Stream, "audio.stream") using Audio::Audio; auto channels() const -> u32 { return _channels.size(); } auto frequency() const -> f64 { return _frequency; } auto resamplerFrequency() const -> f64 { return _resamplerFrequency; } auto muted() const -> bool { return _muted; } auto setChannels(u32 channels) -> void; auto setFrequency(f64 frequency) -> void; auto setResamplerFrequency(f64 resamplerFrequency) -> void; auto setMuted(bool muted) -> void; auto resetFilters() -> void; auto addLowPassFilter(f64 cutoffFrequency, u32 order, u32 passes = 1) -> void; auto addHighPassFilter(f64 cutoffFrequency, u32 order, u32 passes = 1) -> void; auto addLowShelfFilter(f64 cutoffFrequency, u32 order, f64 gain, f64 slope) -> void; auto addHighShelfFilter(f64 cutoffFrequency, u32 order, f64 gain, f64 slope) -> void; auto pending() const -> bool; auto read(f64 samples[]) -> u32; auto write(const f64 samples[]) -> void; template auto frame(P&&... p) -> void { if(runAhead()) return; f64 samples[sizeof...(p)] = {forward

(p)...}; write(samples); } protected: struct Filter { enum class Mode : u32 { OnePole, Biquad } mode; enum class Type : u32 { None, LowPass, HighPass, LowShelf, HighShelf } type; enum class Order : u32 { None, First, Second } order; DSP::IIR::OnePole onePole; DSP::IIR::Biquad biquad; }; struct Channel { vector filters; vector nyquist; DSP::Resampler::Cubic resampler; }; vector _channels; f64 _frequency = 48000.0; f64 _resamplerFrequency = 48000.0; bool _muted = false; }; ares-126/ares/ares/node/class.hpp000066400000000000000000000017621415063341600167560ustar00rootroot00000000000000//horrible implementation of run-time introspection: //allow converting a unique class string to a derived Node type. struct Class { struct Instance { const string identifier; const function create; }; static auto classes() -> vector& { static vector classes; return classes; } template static auto register() -> void { if(!classes().find([&](auto instance) { return instance.identifier == T::identifier(); })) { classes().append({T::identifier(), &T::create}); } else { throw; } } static auto create(string identifier) -> Node::Object { if(auto index = classes().find([&](auto instance) { return instance.identifier == identifier; })) { return classes()[*index].create(); } if(identifier == "Object") throw; //should never occur: detects unregistered classes return create("Object"); } template struct Register { Register() { Class::register(); } }; }; ares-126/ares/ares/node/component/000077500000000000000000000000001415063341600171345ustar00rootroot00000000000000ares-126/ares/ares/node/component/component.hpp000066400000000000000000000001371415063341600216500ustar00rootroot00000000000000struct Component : Object { DeclareClass(Component, "component"); using Object::Object; }; ares-126/ares/ares/node/component/real-time-clock.hpp000066400000000000000000000016131415063341600226160ustar00rootroot00000000000000struct RealTimeClock : Component { DeclareClass(RealTimeClock, "component.real-time-clock") using Component::Component; auto update() -> void { if(_update) return _update(); } auto timestamp() const -> u64 { return _timestamp; } auto setUpdate(function update) -> void { _update = update; } auto setTimestamp(u64 timestamp) -> void { _timestamp = timestamp; } auto synchronize(u64 timestamp = 0) -> void { if(!timestamp) timestamp = chrono::timestamp(); _timestamp = timestamp; update(); } auto serialize(string& output, string depth) -> void override { Component::serialize(output, depth); output.append(depth, " timestamp: ", _timestamp, "\n"); } auto unserialize(Markup::Node node) -> void override { Component::unserialize(node); _timestamp = node["timestamp"].natural(); } protected: function _update; u64 _timestamp; }; ares-126/ares/ares/node/debugger/000077500000000000000000000000001415063341600167165ustar00rootroot00000000000000ares-126/ares/ares/node/debugger/debugger.hpp000066400000000000000000000001331415063341600212100ustar00rootroot00000000000000struct Debugger : Object { DeclareClass(Debugger, "debugger") using Object::Object; }; ares-126/ares/ares/node/debugger/graphics.hpp000066400000000000000000000014061415063341600212300ustar00rootroot00000000000000struct Graphics : Debugger { DeclareClass(Graphics, "debugger.graphics") Graphics(string name = {}) : Debugger(name) { } auto width() const -> u32 { return _width; } auto height() const -> u32 { return _height; } auto capture() const -> vector { if(_capture) return _capture(); return {}; } auto setSize(u32 width, u32 height) -> void { _width = width, _height = height; } auto setCapture(function ()> capture) -> void { _capture = capture; } auto serialize(string& output, string depth) -> void override { Debugger::serialize(output, depth); } auto unserialize(Markup::Node node) -> void override { Debugger::unserialize(node); } protected: u32 _width = 0; u32 _height = 0; function ()> _capture; }; ares-126/ares/ares/node/debugger/memory.hpp000066400000000000000000000015071415063341600207420ustar00rootroot00000000000000struct Memory : Debugger { DeclareClass(Memory, "debugger.memory") Memory(string name = {}) : Debugger(name) { } auto size() const -> u32 { return _size; } auto read(u32 address) const -> n8 { if(_read) return _read(address); return 0; } auto write(u32 address, u8 data) const -> void { if(_write) return _write(address, data); } auto setSize(u32 size) -> void { _size = size; } auto setRead(function read) -> void { _read = read; } auto setWrite(function write) -> void { _write = write; } auto serialize(string& output, string depth) -> void override { Debugger::serialize(output, depth); } auto unserialize(Markup::Node node) -> void override { Debugger::unserialize(node); } protected: u32 _size = 0; function _read; function _write; }; ares-126/ares/ares/node/debugger/properties.hpp000066400000000000000000000010261415063341600216220ustar00rootroot00000000000000struct Properties : Debugger { DeclareClass(Properties, "debugger.properties") Properties(string name = {}) : Debugger(name) { } auto query() const -> string { if(_query) return _query(); return {}; } auto setQuery(function query) -> void { _query = query; } auto serialize(string& output, string depth) -> void override { Debugger::serialize(output, depth); } auto unserialize(Markup::Node node) -> void override { Debugger::unserialize(node); } protected: function _query; }; ares-126/ares/ares/node/debugger/tracer/000077500000000000000000000000001415063341600201765ustar00rootroot00000000000000ares-126/ares/ares/node/debugger/tracer/instruction.hpp000066400000000000000000000066301415063341600232750ustar00rootroot00000000000000struct Instruction : Tracer { DeclareClass(Instruction, "debugger.tracer.instruction") Instruction(string name = {}, string component = {}) : Tracer(name, component) { setMask(_mask); setDepth(_depth); } auto addressBits() const -> u32 { return _addressBits; } auto addressMask() const -> u32 { return _addressMask; } auto mask() const -> bool { return _mask; } auto depth() const -> u32 { return _depth; } auto setAddressBits(u32 addressBits, u32 addressMask = 0) -> void { _addressBits = addressBits; _addressMask = addressMask; } auto setMask(bool mask) -> void { _mask = mask; } auto setDepth(u32 depth) -> void { _depth = depth; _history.reset(); _history.resize(depth); for(auto& history : _history) history = ~0; } auto address(u32 address) -> bool { address &= (1ull << _addressBits) - 1; //mask upper bits of address _address = address; address >>= _addressMask; //clip unneeded alignment bits (to reduce _masks size) if(_mask && updateMasks()) { if(_masks[address >> 3] & 1 << (address & 7)) return false; //do not trace twice _masks[address >> 3] |= 1 << (address & 7); } if(_depth) { for(auto history : _history) { if(_address == history) { _omitted++; return false; //do not trace again if recently traced } } for(auto index : range(_depth - 1)) { _history[index] = _history[index + 1]; } _history.last() = _address; } return true; } //mark an already-executed address as not executed yet for trace masking. //call when writing to executable RAM to support self-modifying code. auto invalidate(u32 address) -> void { if(unlikely(_mask && updateMasks())) { address &= (1ull << _addressBits) - 1; address >>= _addressMask; _masks[address >> 3] &= ~(1 << (address & 7)); } } auto notify(const string& instruction, const string& context, const string& extra = {}) -> void { if(!enabled()) return; if(_omitted) { PlatformLog({ "[Omitted: ", _omitted, "]\n"} ); _omitted = 0; } string output{ _component, " ", hex(_address, _addressBits + 3 >> 2), " ", instruction, " ", context, " ", extra }; PlatformLog({output.strip(), "\n"}); } auto serialize(string& output, string depth) -> void override { Tracer::serialize(output, depth); output.append(depth, " addressBits: ", _addressBits, "\n"); output.append(depth, " addressMask: ", _addressMask, "\n"); output.append(depth, " mask: ", _mask, "\n"); output.append(depth, " depth: ", _depth, "\n"); } auto unserialize(Markup::Node node) -> void override { Tracer::unserialize(node); _addressBits = node["addressBits"].natural(); _addressMask = node["addressMask"].natural(); _mask = node["mask"].boolean(); _depth = node["depth"].natural(); setMask(_mask); setDepth(_depth); } protected: auto updateMasks() -> bool { auto size = 1ull << _addressBits >> _addressMask >> 3; if(!_mask || !size) return _masks.reset(), false; if(_masks.size() == size) return true; _masks.reset(); _masks.resize(size); return true; } u32 _addressBits = 32; u32 _addressMask = 0; bool _mask = false; u32 _depth = 4; //unserialized: n64 _address = 0; n64 _omitted = 0; vector _history; vector _masks; }; ares-126/ares/ares/node/debugger/tracer/notification.hpp000066400000000000000000000006631415063341600234020ustar00rootroot00000000000000struct Notification : Tracer { DeclareClass(Notification, "debugger.tracer.notification") Notification(string name = {}, string component = {}) : Tracer(name, component) { } auto notify(const string& message = {}) -> void { if(!enabled()) return; if(message) { PlatformLog({_component, " ", _name, ": ", message, "\n"}); } else { PlatformLog({_component, " ", _name, "\n"}); } } protected: }; ares-126/ares/ares/node/debugger/tracer/tracer.hpp000066400000000000000000000015751415063341600221770ustar00rootroot00000000000000struct Tracer : Debugger { DeclareClass(Tracer, "debugger.tracer") Tracer(string name = {}, string component = {}) : Debugger(name) { _component = component; } auto component() const -> string { return _component; } auto enabled() const -> bool { return _enabled; } auto setComponent(string component) -> void { _component = component; } auto setEnabled(bool enabled) -> void { _enabled = enabled; } auto serialize(string& output, string depth) -> void override { Debugger::serialize(output, depth); output.append(depth, " component: ", _component, "\n"); output.append(depth, " enabled: ", _enabled, "\n"); } auto unserialize(Markup::Node node) -> void override { Debugger::unserialize(node); _component = node["component"].string(); _enabled = node["enabled"].boolean(); } protected: string _component; bool _enabled = false; }; ares-126/ares/ares/node/input/000077500000000000000000000000001415063341600162715ustar00rootroot00000000000000ares-126/ares/ares/node/input/axis.hpp000066400000000000000000000004111415063341600177420ustar00rootroot00000000000000struct Axis : Input { DeclareClass(Axis, "input.axis") using Input::Input; auto value() const -> s64 { return _value; } auto setValue(s64 value) -> void { _value = value; } protected: s64 _value = 0; s64 _minimum = -32768; s64 _maximum = +32767; }; ares-126/ares/ares/node/input/button.hpp000066400000000000000000000003401415063341600203120ustar00rootroot00000000000000struct Button : Input { DeclareClass(Button, "input.button") using Input::Input; auto value() const -> bool { return _value; } auto setValue(bool value) -> void { _value = value; } protected: bool _value = 0; }; ares-126/ares/ares/node/input/input.hpp000066400000000000000000000001221415063341600201340ustar00rootroot00000000000000struct Input : Object { DeclareClass(Input, "input") using Object::Object; }; ares-126/ares/ares/node/input/rumble.hpp000066400000000000000000000003471415063341600202740ustar00rootroot00000000000000struct Rumble : Input { DeclareClass(Rumble, "input.rumble") using Input::Input; auto enable() const -> bool { return _enable; } auto setEnable(bool enable) -> void { _enable = enable; } protected: bool _enable = 0; }; ares-126/ares/ares/node/input/trigger.hpp000066400000000000000000000004221415063341600204430ustar00rootroot00000000000000struct Trigger : Input { DeclareClass(Trigger, "input.trigger") using Input::Input; auto value() const -> s64 { return _value; } auto setValue(s64 value) -> void { _value = value; } protected: s64 _value = 0; s64 _minimum = 0; s64 _maximum = +32767; }; ares-126/ares/ares/node/node.cpp000066400000000000000000000003071415063341600165630ustar00rootroot00000000000000namespace ares::Core { namespace Video { #include #include } namespace Audio { #include } } ares-126/ares/ares/node/node.hpp000066400000000000000000000132151415063341600165720ustar00rootroot00000000000000namespace ares::Core { struct Object; struct System; struct Peripheral; struct Port; namespace Component { struct Component; struct RealTimeClock; } namespace Video { struct Video; struct Sprite; struct Screen; } namespace Audio { struct Audio; struct Stream; } namespace Input { struct Input; struct Button; struct Axis; struct Trigger; struct Rumble; } namespace Setting { struct Setting; struct Boolean; struct Natural; struct Integer; struct Real; struct String; } namespace Debugger { struct Debugger; struct Memory; struct Graphics; struct Properties; namespace Tracer { struct Tracer; struct Notification; struct Instruction; } } } namespace ares::Node { using Object = shared_pointer; using System = shared_pointer; using Peripheral = shared_pointer; using Port = shared_pointer; namespace Component { using Component = shared_pointer; using RealTimeClock = shared_pointer; } namespace Video { using Video = shared_pointer; using Sprite = shared_pointer; using Screen = shared_pointer; } namespace Audio { using Audio = shared_pointer; using Stream = shared_pointer; } namespace Input { using Input = shared_pointer; using Button = shared_pointer; using Axis = shared_pointer; using Trigger = shared_pointer; using Rumble = shared_pointer; } namespace Setting { using Setting = shared_pointer; using Boolean = shared_pointer; using Natural = shared_pointer; using Integer = shared_pointer; using Real = shared_pointer; using String = shared_pointer; } namespace Debugger { using Debugger = shared_pointer; using Memory = shared_pointer; using Graphics = shared_pointer; using Properties = shared_pointer; namespace Tracer { using Tracer = shared_pointer; using Notification = shared_pointer; using Instruction = shared_pointer; } } } namespace ares::Core { // forward declarations static auto PlatformAttach(Node::Object) -> void; static auto PlatformDetach(Node::Object) -> void; static auto PlatformLog(string_view) -> void; #include #include #include #include #include #include namespace Component { #include #include } namespace Video { #include #include #include } namespace Audio { #include #include } namespace Input { #include #include #include #include #include } namespace Setting { #include #include #include #include #include #include } namespace Debugger { #include #include #include #include namespace Tracer { #include #include #include } } } namespace ares::Node { static inline auto create(string identifier) -> Object { return Core::Class::create(identifier); } static inline auto serialize(Object node) -> string { if(!node) return {}; string result; node->serialize(result, {}); return result; } static inline auto unserialize(string markup) -> Object { auto document = BML::unserialize(markup); if(!document) return {}; auto node = Core::Class::create(document["node"].string()); node->unserialize(document["node"]); return node; } static inline auto parent(Object child) -> Object { if(!child || !child->parent()) return {}; if(auto parent = child->parent().acquire()) return parent; return {}; } template static inline auto find(Object from, string name) -> Object { if(!from) return {}; if(auto object = from->find(name)) return object; return {}; } template static inline auto enumerate(Object from) -> vector { vector objects; if(from) from->enumerate(objects); return objects; } } ares-126/ares/ares/node/object.hpp000066400000000000000000000154771415063341600171270ustar00rootroot00000000000000//identifier() is static, allowing template to access via T::identifier() //identity() is virtual, allowing T* to access via T->identity() #define DeclareClass(Type, Name) \ static auto identifier() -> string { return Name; } \ static auto create() -> Node::Object { return new Type; } \ auto identity() const -> string override { return Name; } \ private: static inline Class::Register register; public: \ struct Object : shared_pointer_this { static auto identifier() -> string { return "Object"; } static auto create() -> Node::Object { return new Object; } virtual auto identity() const -> string { return "Object"; } private: static inline Class::Register register; public: //DeclareClass(Object, "object") Object(string name = {}) : _name(name) {} virtual ~Object() = default; auto name() const -> string { return _name; } auto parent() const -> shared_pointer_weak { return _parent; } auto setName(string_view name) -> void { _name = name; } auto prepend(Node::Object node) -> Node::Object { if(auto found = find(node)) return found; _nodes.prepend(node); node->_parent = shared(); PlatformAttach(node); return node; } template auto prepend(P&&... p) -> Node::Object { using Type = typename T::type; return prepend(shared_pointer::create(forward

(p)...)); } auto append(Node::Object node) -> Node::Object { if(auto found = find(node)) return found; _nodes.append(node); node->_parent = shared(); PlatformAttach(node); return node; } template auto append(P&&... p) -> Node::Object { using Type = typename T::type; return append(shared_pointer::create(forward

(p)...)); } auto remove(Node::Object node) -> void { if(auto index = _nodes.find(node)) { PlatformDetach(node); node->reset(); node->_parent.reset(); _nodes.remove(*index); } } auto reset() -> void { for(auto& node : _nodes) { PlatformDetach(node); node->reset(); node->_parent.reset(); } _nodes.reset(); } template auto cast() -> shared_pointer { if(dynamic_cast(this)) return shared(); return {}; } template auto is() -> bool { return (bool)cast(); } template auto find() -> vector> { vector> result; if(dynamic_cast(this)) { if(auto instance = shared()) result.append(instance); } for(auto& node : _nodes) result.append(node->find()); return result; } template auto find(u32 index) -> shared_pointer { auto result = find(); if(index < result.size()) return result[index]; return {}; } auto find(Node::Object source) -> Node::Object { if(!source) return {}; for(auto& node : _nodes) { if(node->identity() == source->identity() && node->_name == source->_name) return node; } return {}; } template auto find(string name) -> T { using Type = typename T::type; auto path = name.split("/"); name = path.takeFirst(); for(auto& node : _nodes) { if(node->_name != name) continue; if(path) return node->find(path.merge("/")); if(node->identity() == Type::identifier()) return node; } return {}; } template auto scan(string name) -> T { using Type = typename T::type; for(auto& node : _nodes) { if(node->identity() == Type::identifier() && node->_name == name) return node; if(auto result = node->scan(name)) return result; } return {}; } template auto enumerate(vector& objects) -> void { using Type = typename T::type; if(auto instance = cast()) objects.append(instance); for(auto& node : _nodes) node->enumerate(objects); } auto pak() -> VFS::Pak { return _pak; } auto setPak(VFS::Pak pak) -> bool { _pak = pak; return (bool)_pak; } template auto attribute(const string& name) const -> T { if(auto attribute = _attributes.find(name)) { if(attribute->value.is()) return attribute->value.get(); } return {}; } template auto hasAttribute(const string& name) const -> bool { if(auto attribute = _attributes.find(name)) { if(attribute->value.is()) return true; } return false; } template auto setAttribute(const string& name, const U& value = {}) -> void { if constexpr(is_same_v && !is_same_v) return setAttribute(name, string{value}); if(auto attribute = _attributes.find(name)) { if((const T&)value) attribute->value = (const T&)value; else _attributes.remove(*attribute); } else { if((const T&)value) _attributes.insert({name, (const T&)value}); } } virtual auto load(Node::Object source) -> bool { if(!source || identity() != source->identity() || _name != source->_name) return false; _attributes = source->_attributes; return true; } auto save() -> string { string markup; serialize(markup, {}); return markup; } virtual auto serialize(string& output, string depth) -> void { output.append(depth, "node: ", identity(), "\n"); output.append(depth, " name: ", _name, "\n"); for(auto& attribute : _attributes) { if(!attribute.value.is()) continue; output.append(depth, " attribute\n"); output.append(depth, " name: ", attribute.name, "\n"); output.append(depth, " value: ", attribute.value.get(), "\n"); } depth.append(" "); for(auto& node : _nodes) { node->serialize(output, depth); } } virtual auto unserialize(Markup::Node markup) -> void { if(!markup) return; _name = markup["name"].string(); _attributes.reset(); for(auto& attribute : markup.find("attribute")) { _attributes.insert({attribute["name"].string(), attribute["value"].string()}); } for(auto& leaf : markup.find("node")) { auto node = Class::create(leaf.string()); append(node); node->unserialize(leaf); } } virtual auto copy(Node::Object source) -> void { _attributes = source->_attributes; for(auto& from : source->_nodes) { for(auto& to : _nodes) { if(from->identity() != to->identity()) continue; if(from->name() != to->name()) continue; to->copy(from); break; } } } auto begin() { return _nodes.begin(); } auto end() { return _nodes.end(); } protected: string _name; VFS::Pak _pak; set _attributes; shared_pointer_weak _parent; vector _nodes; }; ares-126/ares/ares/node/peripheral.hpp000066400000000000000000000001411415063341600177720ustar00rootroot00000000000000struct Peripheral : Object { DeclareClass(Peripheral, "peripheral") using Object::Object; }; ares-126/ares/ares/node/port.hpp000066400000000000000000000044771415063341600166430ustar00rootroot00000000000000struct Port : Object { DeclareClass(Port, "port") using Object::Object; auto type() const -> string { return _type; } auto family() const -> string { return _family; } auto hotSwappable() const -> bool { return _hotSwappable; } auto supported() const -> vector { return _supported; } auto setAllocate(function allocate) -> void { _allocate = allocate; } auto setConnect(function connect) -> void { _connect = connect; } auto setDisconnect(function disconnect) -> void { _disconnect = disconnect; } auto setType(string type) -> void { _type = type; } auto setFamily(string family) -> void { _family = family; } auto setHotSwappable(bool hotSwappable) -> void { _hotSwappable = hotSwappable; } auto setSupported(vector supported) -> void { _supported = supported; } auto connected() -> Node::Peripheral { return find(0); } auto allocate(string name = {}) -> Node::Peripheral { disconnect(); if(_allocate) return _allocate(name); return {}; } auto connect() -> void { if(_connect) _connect(); } auto disconnect() -> void { if(auto peripheral = connected()) { if(_disconnect) _disconnect(); remove(peripheral); } } auto serialize(string& output, string depth) -> void override { Object::serialize(output, depth); output.append(depth, " type: ", _type, "\n"); output.append(depth, " family: ", _family, "\n"); output.append(depth, " hotSwappable: ", _hotSwappable, "\n"); } auto unserialize(Markup::Node node) -> void override { Object::unserialize(node); _type = node["type"].string(); _family = node["family"].string(); _hotSwappable = node["hotSwappable"].boolean(); } auto copy(Node::Object object) -> void override { if(auto source = object->cast()) { Object::copy(source); if(auto peripheral = source->find(0)) { if(auto node = allocate(peripheral->name())) { node->copy(peripheral); connect(); node->copy(peripheral); } } } } protected: function _allocate; function _connect; function _disconnect; string _type; string _family; bool _hotSwappable = false; vector _supported; }; ares-126/ares/ares/node/setting/000077500000000000000000000000001415063341600166075ustar00rootroot00000000000000ares-126/ares/ares/node/setting/boolean.hpp000066400000000000000000000022101415063341600207320ustar00rootroot00000000000000struct Boolean : Setting { DeclareClass(Boolean, "setting.boolean") Boolean(string name = {}, bool value = {}, function modify = {}) : Setting(name) { _currentValue = value; _latchedValue = value; _modify = modify; } auto modify(bool value) const -> void { if(_modify) return _modify(value); } auto value() const -> bool { return _currentValue; } auto latch() const -> bool { return _latchedValue; } auto setModify(function modify) { _modify = modify; } auto setValue(bool value) -> void { _currentValue = value; if(_dynamic) setLatch(); } auto setLatch() -> void override { if(_latchedValue == _currentValue) return; _latchedValue = _currentValue; modify(_latchedValue); } auto readValue() const -> string override { return value(); } auto readLatch() const -> string override { return latch(); } auto readAllowedValues() const -> vector override { return {"false", "true"}; } auto writeValue(string value) -> void override { setValue(value.boolean()); } protected: function _modify; bool _currentValue = {}; bool _latchedValue = {}; }; ares-126/ares/ares/node/setting/integer.hpp000066400000000000000000000027611415063341600207630ustar00rootroot00000000000000struct Integer : Setting { DeclareClass(Integer, "setting.integer") Integer(string name = {}, s64 value = {}, function modify = {}) : Setting(name) { _currentValue = value; _latchedValue = value; _modify = modify; } auto modify(s64 value) const -> void { if(_modify) return _modify(value); } auto value() const -> s64 { return _currentValue; } auto latch() const -> s64 { return _latchedValue; } auto setModify(function modify) { _modify = modify; } auto setValue(s64 value) -> void { if(_allowedValues && !_allowedValues.find(value)) return; _currentValue = value; if(_dynamic) setLatch(); } auto setLatch() -> void override { if(_latchedValue == _currentValue) return; _latchedValue = _currentValue; modify(_latchedValue); } auto setAllowedValues(vector allowedValues) -> void { _allowedValues = allowedValues; if(_allowedValues && !_allowedValues.find(_currentValue)) setValue(_allowedValues.first()); } auto readValue() const -> string override { return value(); } auto readLatch() const -> string override { return latch(); } auto readAllowedValues() const -> vector override { vector values; for(auto value : _allowedValues) values.append(value); return values; } auto writeValue(string value) -> void override { setValue(value.integer()); } protected: function _modify; s64 _currentValue = {}; s64 _latchedValue = {}; vector _allowedValues; }; ares-126/ares/ares/node/setting/natural.hpp000066400000000000000000000027611415063341600207740ustar00rootroot00000000000000struct Natural : Setting { DeclareClass(Natural, "setting.natural") Natural(string name = {}, u64 value = {}, function modify = {}) : Setting(name) { _currentValue = value; _latchedValue = value; _modify = modify; } auto modify(u64 value) const -> void { if(_modify) return _modify(value); } auto value() const -> u64 { return _currentValue; } auto latch() const -> u64 { return _latchedValue; } auto setModify(function modify) { _modify = modify; } auto setValue(u64 value) -> void { if(_allowedValues && !_allowedValues.find(value)) return; _currentValue = value; if(_dynamic) setLatch(); } auto setLatch() -> void override { if(_latchedValue == _currentValue) return; _latchedValue = _currentValue; modify(_latchedValue); } auto setAllowedValues(vector allowedValues) -> void { _allowedValues = allowedValues; if(_allowedValues && !_allowedValues.find(_currentValue)) setValue(_allowedValues.first()); } auto readValue() const -> string override { return value(); } auto readLatch() const -> string override { return latch(); } auto readAllowedValues() const -> vector override { vector values; for(auto value : _allowedValues) values.append(value); return values; } auto writeValue(string value) -> void override { setValue(value.natural()); } protected: function _modify; u64 _currentValue = {}; u64 _latchedValue = {}; vector _allowedValues; }; ares-126/ares/ares/node/setting/real.hpp000066400000000000000000000027421415063341600202500ustar00rootroot00000000000000struct Real : Setting { DeclareClass(Real, "setting.real") Real(string name = {}, f64 value = {}, function modify = {}) : Setting(name) { _currentValue = value; _latchedValue = value; _modify = modify; } auto modify(f64 value) const -> void { if(_modify) return _modify(value); } auto value() const -> f64 { return _currentValue; } auto latch() const -> f64 { return _latchedValue; } auto setModify(function modify) { _modify = modify; } auto setValue(f64 value) -> void { if(_allowedValues && !_allowedValues.find(value)) return; _currentValue = value; if(_dynamic) setLatch(); } auto setLatch() -> void override { if(_latchedValue == _currentValue) return; _latchedValue = _currentValue; modify(_latchedValue); } auto setAllowedValues(vector allowedValues) -> void { _allowedValues = allowedValues; if(_allowedValues && !_allowedValues.find(_currentValue)) setValue(_allowedValues.first()); } auto readValue() const -> string override { return value(); } auto readLatch() const -> string override { return latch(); } auto readAllowedValues() const -> vector override { vector values; for(auto value : _allowedValues) values.append(value); return values; } auto writeValue(string value) -> void override { setValue(value.real()); } protected: function _modify; f64 _currentValue = {}; f64 _latchedValue = {}; vector _allowedValues; }; ares-126/ares/ares/node/setting/setting.hpp000066400000000000000000000025121415063341600207750ustar00rootroot00000000000000struct Setting : Object { DeclareClass(Setting, "setting") using Object::Object; auto dynamic() const -> bool { return _dynamic; } auto setDynamic(bool dynamic) -> void { _dynamic = dynamic; } virtual auto setLatch() -> void {} virtual auto readValue() const -> string { return {}; } virtual auto readLatch() const -> string { return {}; } virtual auto readAllowedValues() const -> vector { return {}; } virtual auto writeValue(string value) -> void {} auto load(Node::Object source) -> bool override { if(!Object::load(source)) return false; if(auto setting = source->cast>()) writeValue(setting->readValue()); return true; } auto copy(Node::Object object) -> void override { if(auto source = object->cast()) { Object::copy(source); writeValue(source->readValue()); setLatch(); } } auto serialize(string& output, string depth) -> void override { Object::serialize(output, depth); output.append(depth, " dynamic: ", _dynamic, "\n"); output.append(depth, " value: ", readValue(), "\n"); } auto unserialize(Markup::Node node) -> void override { Object::unserialize(node); _dynamic = node["dynamic"].boolean(); writeValue(node["value"].string()); } protected: bool _dynamic = false; }; ares-126/ares/ares/node/setting/string.hpp000066400000000000000000000026631415063341600206350ustar00rootroot00000000000000struct String : Setting { DeclareClass(String, "setting.string") String(string name = {}, string value = {}, function modify = {}) : Setting(name) { _currentValue = value; _latchedValue = value; _modify = modify; } auto modify(string value) const -> void { if(_modify) return _modify(value); } auto value() const -> string { return _currentValue; } auto latch() const -> string { return _latchedValue; } auto setModify(function modify) { _modify = modify; } auto setValue(string value) -> void { if(_allowedValues && !_allowedValues.find(value)) return; _currentValue = value; if(_dynamic) setLatch(); } auto setLatch() -> void override { if(_latchedValue == _currentValue) return; _latchedValue = _currentValue; modify(_latchedValue); } auto setAllowedValues(vector allowedValues) -> void { _allowedValues = allowedValues; if(_allowedValues && !_allowedValues.find(_currentValue)) setValue(_allowedValues.first()); } auto readValue() const -> string override { return value(); } auto readLatch() const -> string override { return latch(); } auto readAllowedValues() const -> vector override { return _allowedValues; } auto writeValue(string value) -> void override { setValue(value); } protected: function _modify; string _currentValue = {}; string _latchedValue = {}; vector _allowedValues; }; ares-126/ares/ares/node/system.hpp000066400000000000000000000025541415063341600171750ustar00rootroot00000000000000struct System : Object { DeclareClass(System, "system") using Object::Object; auto game() -> string { if(_game) return _game(); return {}; } auto run() -> void { if(_run) return _run(); } auto power(bool reset = false) -> void { if(_power) return _power(reset); } auto save() -> void { if(_save) return _save(); } auto unload() -> void { if(_unload) return _unload(); } auto serialize(bool synchronize = true) -> serializer { if(_serialize) return _serialize(synchronize); return {}; } auto unserialize(serializer& s) -> bool { if(_unserialize) return _unserialize(s); return false; } auto setGame(function game) -> void { _game = game; } auto setRun(function run) -> void { _run = run; } auto setPower(function power) -> void { _power = power; } auto setSave(function save) -> void { _save = save; } auto setUnload(function unload) -> void { _unload = unload; } auto setSerialize(function serialize) -> void { _serialize = serialize; } auto setUnserialize(function unserialize) -> void { _unserialize = unserialize; } protected: function _game; function _run; function _power; function _save; function _unload; function _serialize; function _unserialize; }; ares-126/ares/ares/node/video/000077500000000000000000000000001415063341600162405ustar00rootroot00000000000000ares-126/ares/ares/node/video/screen.cpp000066400000000000000000000251761415063341600202360ustar00rootroot00000000000000Screen::Screen(string name, u32 width, u32 height) : Video(name) { _canvasWidth = width; _canvasHeight = height; if(width && height) { _inputA = new u32[width * height](); _inputB = new u32[width * height](); _output = new u32[width * height](); _rotate = new u32[width * height](); if constexpr(ares::Video::Threaded) { _thread = nall::thread::create({&Screen::main, this}); } } } Screen::~Screen() { if constexpr(ares::Video::Threaded) { if(_canvasWidth && _canvasHeight) { _kill = true; _thread.join(); } } } auto Screen::main(uintptr_t) -> void { while(!_kill) { usleep(1); if(_frame) { refresh(); _frame = false; } } } auto Screen::quit() -> void { _kill = true; _thread.join(); _sprites.reset(); } auto Screen::power() -> void { lock_guard lock(_mutex); memory::fill(_inputA.data(), _canvasWidth * _canvasHeight, _fillColor); memory::fill(_inputB.data(), _canvasWidth * _canvasHeight, _fillColor); memory::fill(_output.data(), _canvasWidth * _canvasHeight, _fillColor); memory::fill(_rotate.data(), _canvasWidth * _canvasHeight, _fillColor); } auto Screen::pixels(bool frame) -> array_span { if(frame == 0) return {_inputA.data(), _canvasWidth * _canvasHeight}; if(frame == 1) return {_inputB.data(), _canvasWidth * _canvasHeight}; return {}; } auto Screen::resetPalette() -> void { lock_guard lock(_mutex); _palette.reset(); } auto Screen::resetSprites() -> void { lock_guard lock(_mutex); _sprites.reset(); } auto Screen::setRefresh(function refresh) -> void { lock_guard lock(_mutex); _refresh = refresh; } auto Screen::setViewport(u32 x, u32 y, u32 width, u32 height) -> void { lock_guard lock(_mutex); _viewportX = x; _viewportY = y; _viewportWidth = width; _viewportHeight = height; } auto Screen::setSize(u32 width, u32 height) -> void { lock_guard lock(_mutex); _width = width; _height = height; } auto Screen::setScale(f64 scaleX, f64 scaleY) -> void { lock_guard lock(_mutex); _scaleX = scaleX; _scaleY = scaleY; } auto Screen::setAspect(f64 aspectX, f64 aspectY) -> void { lock_guard lock(_mutex); _aspectX = aspectX; _aspectY = aspectY; } auto Screen::setSaturation(f64 saturation) -> void { lock_guard lock(_mutex); _saturation = saturation; _palette.reset(); } auto Screen::setGamma(f64 gamma) -> void { lock_guard lock(_mutex); _gamma = gamma; _palette.reset(); } auto Screen::setLuminance(f64 luminance) -> void { lock_guard lock(_mutex); _luminance = luminance; _palette.reset(); } auto Screen::setFillColor(u32 fillColor) -> void { lock_guard lock(_mutex); _fillColor = fillColor; } auto Screen::setColorBleed(bool colorBleed) -> void { lock_guard lock(_mutex); _colorBleed = colorBleed; } auto Screen::setInterframeBlending(bool interframeBlending) -> void { lock_guard lock(_mutex); _interframeBlending = interframeBlending; } auto Screen::setRotation(u32 rotation) -> void { lock_guard lock(_mutex); _rotation = rotation; } auto Screen::setProgressive(bool progressiveDouble) -> void { lock_guard lock(_mutex); _interlace = false; _progressive = true; _progressiveDouble = progressiveDouble; } auto Screen::setInterlace(bool interlaceField) -> void { lock_guard lock(_mutex); _progressive = false; _interlace = true; _interlaceField = interlaceField; } auto Screen::attach(Node::Video::Sprite sprite) -> void { lock_guard lock(_mutex); if(_sprites.find(sprite)) return; _sprites.append(sprite); } auto Screen::detach(Node::Video::Sprite sprite) -> void { lock_guard lock(_mutex); if(!_sprites.find(sprite)) return; _sprites.removeByValue(sprite); } auto Screen::colors(u32 colors, function color) -> void { lock_guard lock(_mutex); _colors = colors; _color = color; _palette.reset(); } auto Screen::frame() -> void { if(runAhead()) return; while(_frame) spinloop(); lock_guard lock(_mutex); _inputA.swap(_inputB); _frame = true; if constexpr(!ares::Video::Threaded) { refresh(); _frame = false; } } auto Screen::refresh() -> void { lock_guard lock(_mutex); if(runAhead()) return; refreshPalette(); if(_refresh) _refresh(); auto viewX = _viewportX; auto viewY = _viewportY; auto viewWidth = _viewportWidth; auto viewHeight = _viewportHeight; auto pitch = _canvasWidth; auto width = _canvasWidth; auto height = _canvasHeight; auto input = _inputB.data(); auto output = _output.data(); for(u32 y : range(height)) { auto source = input + y * pitch; auto target = output + y * width; if(_interlace) { if((_interlaceField & 1) == (y & 1)) { for(u32 x : range(width)) { auto color = _palette[*source++]; *target++ = color; } } } else if(_progressive && _progressiveDouble) { source = input + (y & ~1) * pitch; for(u32 x : range(width)) { auto color = _palette[*source++]; *target++ = color; } } else if(_interframeBlending) { n32 mask = 1 << 24 | 1 << 16 | 1 << 8 | 1 << 0; for(u32 x : range(width)) { auto a = *target; auto b = _palette[*source++]; *target++ = (a + b - ((a ^ b) & mask)) >> 1; } } else { for(u32 x : range(width)) { auto color = _palette[*source++]; *target++ = color; } } } if(_colorBleed) { n32 mask = 1 << 24 | 1 << 16 | 1 << 8 | 1 << 0; for(u32 y : range(height)) { auto target = output + y * width; for(u32 x : range(width)) { auto a = target[x]; auto b = target[x + (x != width - 1)]; target[x] = (a + b - ((a ^ b) & mask)) >> 1; } } } for(auto& sprite : _sprites) { if(!sprite->visible()) continue; n32 alpha = 255u << 24; for(int y : range(sprite->height())) { s32 pixelY = sprite->y() + y; if(pixelY < 0 || pixelY >= height) continue; auto source = sprite->image().data() + y * sprite->width(); auto target = &output[pixelY * width]; for(s32 x : range(sprite->width())) { s32 pixelX = sprite->x() + x; if(pixelX < 0 || pixelX >= width) continue; auto pixel = source[x]; if(pixel >> 24) target[pixelX] = alpha | pixel; } } } if(_rotation == 90) { //rotate left for(u32 y : range(height)) { auto source = output + y * width; for(u32 x : range(width)) { auto target = _rotate.data() + (width - 1 - x) * height + y; *target = *source++; } } output = _rotate.data(); swap(width, height); swap(viewWidth, viewHeight); } if(_rotation == 180) { //rotate upside down for(u32 y : range(height)) { auto source = output + y * width; for(u32 x : range(width)) { auto target = _rotate.data() + (height - 1 - y) * width + (width - 1 - x); *target = *source++; } } output = _rotate.data(); } if(_rotation == 270) { //rotate right for(u32 y : range(height)) { auto source = output + y * width; for(u32 x : range(width)) { auto target = _rotate.data() + x * height + (height - 1 - y); *target = *source++; } } output = _rotate.data(); swap(width, height); swap(viewWidth, viewHeight); } platform->video(shared(), output + viewX + viewY * width, width * sizeof(u32), viewWidth, viewHeight); memory::fill(_inputB.data(), width * height, _fillColor); } auto Screen::refreshPalette() -> void { lock_guard lock(_mutex); if(_palette) return; //generate the color lookup palettes to convert native colors to ARGB8888 _palette = new u32[_colors]; for(u32 index : range(_colors)) { n64 color = _color(index); n16 b = color.bit( 0,15); n16 g = color.bit(16,31); n16 r = color.bit(32,47); n16 a = 65535; if(_saturation != 1.0) { n16 grayscale = uclamp<16>((r + g + b) / 3); f64 inverse = max(0.0, 1.0 - _saturation); r = uclamp<16>(r * _saturation + grayscale * inverse); g = uclamp<16>(g * _saturation + grayscale * inverse); b = uclamp<16>(b * _saturation + grayscale * inverse); } if(_gamma != 1.0) { f64 reciprocal = 1.0 / 32767.0; r = r > 32767 ? r : n16(32767 * pow(r * reciprocal, _gamma)); g = g > 32767 ? g : n16(32767 * pow(g * reciprocal, _gamma)); b = b > 32767 ? b : n16(32767 * pow(b * reciprocal, _gamma)); } if(_luminance != 1.0) { r = uclamp<16>(r * _luminance); g = uclamp<16>(g * _luminance); b = uclamp<16>(b * _luminance); } a >>= 8; r >>= 8; g >>= 8; b >>= 8; _palette[index] = a << 24 | r << 16 | g << 8 | b << 0; } } auto Screen::serialize(string& output, string depth) -> void { Video::serialize(output, depth); output.append(depth, " width: ", _width, "\n"); output.append(depth, " height: ", _height, "\n"); output.append(depth, " scaleX: ", _scaleX, "\n"); output.append(depth, " scaleY: ", _scaleY, "\n"); output.append(depth, " aspectX: ", _aspectX, "\n"); output.append(depth, " aspectY: ", _aspectY, "\n"); output.append(depth, " colors: ", _colors, "\n"); output.append(depth, " saturation: ", _saturation, "\n"); output.append(depth, " gamma: ", _gamma, "\n"); output.append(depth, " luminance: ", _luminance, "\n"); output.append(depth, " fillColor: ", _fillColor, "\n"); output.append(depth, " colorBleed: ", _colorBleed, "\n"); output.append(depth, " interlace: ", _interlace, "\n"); output.append(depth, " interframeBlending: ", _interframeBlending, "\n"); output.append(depth, " rotation: ", _rotation, "\n"); } auto Screen::unserialize(Markup::Node node) -> void { Video::unserialize(node); _width = node["width"].natural(); _height = node["height"].natural(); _scaleX = node["scaleX"].real(); _scaleY = node["scaleY"].real(); _aspectX = node["aspectX"].real(); _aspectY = node["aspectY"].real(); _colors = node["colors"].natural(); _saturation = node["saturation"].real(); _gamma = node["gamma"].real(); _luminance = node["luminance"].real(); _fillColor = node["fillColor"].natural(); _colorBleed = node["colorBleed"].boolean(); _interlace = node["interlace"].natural(); _interframeBlending = node["interframeBlending"].boolean(); _rotation = node["rotation"].natural(); resetPalette(); resetSprites(); } ares-126/ares/ares/node/video/screen.hpp000066400000000000000000000064311415063341600202340ustar00rootroot00000000000000struct Screen : Video { DeclareClass(Screen, "video.screen") using Video::Video; Screen(string name = {}, u32 width = 0, u32 height = 0); ~Screen(); auto main(uintptr_t) -> void; auto quit() -> void; auto power() -> void; auto canvasWidth() const -> u32 { return _canvasWidth; } auto canvasHeight() const -> u32 { return _canvasHeight; } auto width() const -> u32 { return _width; } auto height() const -> u32 { return _height; } auto scaleX() const -> f64 { return _scaleX; } auto scaleY() const -> f64 { return _scaleY; } auto aspectX() const -> f64 { return _aspectX; } auto aspectY() const -> f64 { return _aspectY; } auto colors() const -> u32 { return _colors; } auto pixels(bool frame = 0) -> array_span; auto saturation() const -> double { return _saturation; } auto gamma() const -> double { return _gamma; } auto luminance() const -> double { return _luminance; } auto fillColor() const -> u32 { return _fillColor; } auto colorBleed() const -> bool { return _colorBleed; } auto interframeBlending() const -> bool { return _interframeBlending; } auto rotation() const -> u32 { return _rotation; } auto resetPalette() -> void; auto resetSprites() -> void; auto setRefresh(function refresh) -> void; auto setViewport(u32 x, u32 y, u32 width, u32 height) -> void; auto setSize(u32 width, u32 height) -> void; auto setScale(f64 scaleX, f64 scaleY) -> void; auto setAspect(f64 aspectX, f64 aspectY) -> void; auto setSaturation(f64 saturation) -> void; auto setGamma(f64 gamma) -> void; auto setLuminance(f64 luminance) -> void; auto setFillColor(u32 fillColor) -> void; auto setColorBleed(bool colorBleed) -> void; auto setInterframeBlending(bool interframeBlending) -> void; auto setRotation(u32 rotation) -> void; auto setProgressive(bool progressiveDouble = false) -> void; auto setInterlace(bool interlaceField) -> void; auto attach(Node::Video::Sprite) -> void; auto detach(Node::Video::Sprite) -> void; auto colors(u32 colors, function color) -> void; auto frame() -> void; auto refresh() -> void; auto serialize(string& output, string depth) -> void override; auto unserialize(Markup::Node node) -> void override; private: auto refreshPalette() -> void; protected: u32 _canvasWidth = 0; u32 _canvasHeight = 0; u32 _width = 0; u32 _height = 0; f64 _scaleX = 1.0; f64 _scaleY = 1.0; f64 _aspectX = 1.0; f64 _aspectY = 1.0; u32 _colors = 0; f64 _saturation = 1.0; f64 _gamma = 1.0; f64 _luminance = 1.0; u32 _fillColor = 0; bool _colorBleed = false; bool _interframeBlending = false; u32 _rotation = 0; //counter-clockwise (90 = left, 270 = right) function _color; unique_pointer _inputA; unique_pointer _inputB; unique_pointer _output; unique_pointer _rotate; unique_pointer _palette; vector _sprites; //unserialized: nall::thread _thread; recursive_mutex _mutex; atomic _kill = false; atomic _frame = false; function _refresh; bool _progressive = false; bool _progressiveDouble = false; bool _interlace = false; bool _interlaceField = false; u32 _viewportX = 0; u32 _viewportY = 0; u32 _viewportWidth = 0; u32 _viewportHeight = 0; }; ares-126/ares/ares/node/video/sprite.cpp000066400000000000000000000012571415063341600202570ustar00rootroot00000000000000auto Sprite::setVisible(bool visible) -> void { _visible = visible; } auto Sprite::setPosition(u32 x, u32 y) -> void { _x = x; _y = y; } auto Sprite::setImage(nall::image image, bool invert) -> void { _width = image.width(); _height = image.height(); _pixels = new u32[_width * _height]; image.transform(0, 32, 255u << 24, 255u << 16, 255u << 8, 255u << 0); memory::copy(_pixels.data(), _width * _height * sizeof(u32), image.data(), image.size()); if(!invert) return; for(u32 y : range(_height)) { auto data = _pixels.data() + y * _width; for(u32 x : range(_width)) { auto pixel = data[x]; pixel ^= 0xffffff; data[x] = pixel; } } } ares-126/ares/ares/node/video/sprite.hpp000066400000000000000000000012541415063341600202610ustar00rootroot00000000000000struct Sprite : Video { DeclareClass(Sprite, "video.sprite") using Video::Video; auto visible() const -> bool { return _visible; } auto x() const -> u32 { return _x; } auto y() const -> u32 { return _y; } auto width() const -> u32 { return _width; } auto height() const -> u32 { return _height; } auto image() const -> array_view { return {_pixels.data(), _width * _height}; } auto setVisible(bool visible) -> void; auto setPosition(u32 x, u32 y) -> void; auto setImage(nall::image, bool invert = false) -> void; protected: bool _visible = false; u32 _x = 0; u32 _y = 0; u32 _width = 0; u32 _height = 0; unique_pointer _pixels; }; ares-126/ares/ares/node/video/video.hpp000066400000000000000000000001231415063341600200530ustar00rootroot00000000000000struct Video : Object { DeclareClass(Video, "video"); using Object::Object; }; ares-126/ares/ares/platform.hpp000066400000000000000000000017551415063341600165520ustar00rootroot00000000000000#pragma once namespace ares { enum class Event : u32 { None, Step, Frame, Power, Synchronize, }; struct Platform { virtual auto attach(Node::Object) -> void {} virtual auto detach(Node::Object) -> void {} virtual auto pak(Node::Object) -> shared_pointer { return {}; } virtual auto event(Event) -> void {} virtual auto log(string_view message) -> void {} virtual auto video(Node::Video::Screen, const u32* data, u32 pitch, u32 width, u32 height) -> void {} virtual auto audio(Node::Audio::Stream) -> void {} virtual auto input(Node::Input::Input) -> void {} }; extern Platform* platform; } namespace ares::Core { // forward declarations auto PlatformAttach(Node::Object node) -> void { if(platform && node->name()) platform->attach(node); } auto PlatformDetach(Node::Object node) -> void { if(platform && node->name()) platform->detach(node); } auto PlatformLog(string_view text) -> void { if(platform) platform->log(text); } } ares-126/ares/ares/random.hpp000066400000000000000000000042361415063341600162030ustar00rootroot00000000000000#pragma once namespace ares { struct Random { enum class Entropy : u32 { None, Low, High }; auto operator()() -> n64 { return random(); } auto entropy(Entropy entropy) -> void { _entropy = entropy; seed(); } auto seed(maybe seed = nothing, maybe sequence = nothing) -> void { if(!seed) seed = (n32)clock(); if(!sequence) sequence = 0; _state = 0; _increment = sequence() << 1 | 1; step(); _state += seed(); step(); } auto random() -> n64 { if(_entropy == Entropy::None) return 0; return (n64)step() << 32 | (n64)step() << 0; } auto bias(n64 bias) -> n64 { if(_entropy == Entropy::None) return bias; return random(); } auto bound(n64 bound) -> n64 { n64 threshold = -bound % bound; while(true) { n64 result = random(); if(result >= threshold) return result % bound; } } auto array(array_span buffer) -> void { if(_entropy == Entropy::None) { memory::fill(buffer.data(), buffer.size()); return; } if(_entropy == Entropy::High) { for(n32 address : range(buffer.size())) { buffer[address] = random(); } return; } //Entropy::Low u32 lobit = random() & 3; u32 hibit = (lobit + 8 + (random() & 3)) & 15; u32 lovalue = random() & 255; u32 hivalue = random() & 255; if((random() & 3) == 0) lovalue = 0; if((random() & 1) == 0) hivalue = ~lovalue; for(n32 address : range(buffer.size())) { n8 value = address.bit(lobit) ? lovalue : hivalue; if(address.bit(hibit)) value = ~value; if((random() & 511) == 0) value.bit(random() & 7) ^= 1; if((random() & 2047) == 0) value.bit(random() & 7) ^= 1; buffer[address] = value; } } auto serialize(serializer& s) -> void { s((u32&)_entropy); s(_state); s(_increment); } private: auto step() -> n32 { n64 state = _state; _state = state * 6364136223846793005ull + _increment; n32 xorshift = (state >> 18 ^ state) >> 27; n32 rotate = state >> 59; return xorshift >> rotate | xorshift << (-rotate & 31); } Entropy _entropy = Entropy::High; n64 _state; n64 _increment; }; } ares-126/ares/ares/resource/000077500000000000000000000000001415063341600160345ustar00rootroot00000000000000ares-126/ares/ares/resource/GNUmakefile000066400000000000000000000001401415063341600201010ustar00rootroot00000000000000all: sourcery resource.bml resource.cpp resource.hpp clean: rm resource.cpp rm resource.hpp ares-126/ares/ares/resource/icon.png000066400000000000000000000146421415063341600175010ustar00rootroot00000000000000PNG  IHDR>agAMA a cHRMz&u0`:pQ<bKGDC pHYs``kBtIME Ow~IDATxytUǝ?u'=- !Hj#MBd[9$3qqd&,q<3ig✓nۀ woWJܶAO[νW|WU\]b'` [;Qjx(&X(;2b'>hN@|pko n-%lNc@/(hF p)|@+۸Zygݝ]aq3L{g<}&J6`(BX)v KbyM ^MP8ͅG`{CqÐD4u].z<]7=R"CJWynyX(4J)%~ tF3r9b'` 31#C/]Q_Orx5>֯jŦ`) iu޸vڪ(BXj[\7M:̐-t>Lj׬Re)` kXןXNw0dx"Y[礔k;:Ŕ~t]E02Fhus Vv}h˙4XLǥdAlq,|+Rǭf49:_Ěq-dlL#錩ַ~SlBlXS%BY:[2Zk(1CXȱj!K e.6Bl;ڜL)X}ើĦp*غFu%법.+QZ8ܿ!˨^<8;BœC;fX<Y -woud8X^[: CVZٺ(/se(27ȬZ@ʡpʁK`  u ]LCsJ9ëwyd8 :umA nݪFLsV`yMLYe"Xcl*ھVAt)湥xܚcޞɔq8˄ ~;zڕiO (`asD=з0>Lj O̵)gmo)da9gEG/#-ąM5zgV@n :ϓG-gZ+]UeNp)F=5^ҫy @~f#u^xIÐj}Ҧ7/6|kلHzך%v¼R :$DO817k4`ƒA>NtϿrix8 lPHk?~cqk.s)a /)}=3䟱I&ks>nDžYMS9,l .dui[H&4YQ2sp2@J(+ua^5 Iqa[WSi3g<$:V, -GfzLtO6r ɾ6N)lZE'@DR碑\nl@הy@eΞPZf7;-3Mۗp 0Mɬ^Z7hN G G||\VKYйX{ GGRiʜG 1Me,_V(+lH G3iÐ9?#%8ٸ,g-aT0#l\WMy,}>DdNc9 .wlU %:Y`-0@Pϫ9TuDBW˗TvkʱP8t_pE9l0%,h,qTb, =񅥔TMPWz@((p%4 qϧm^VR[*Ph4a$ Gcp*Y~ zB MU.N`*)GJ|>o㙶1$RCW|iO+.p#Wp9{Ћy?d>!w@س@CI|['E W%P]"3h*~Gwj; -cQ&GX㮝C?v^J Զ[LSGa|qj[UaNPU#CxQkwp<_~M}4Ô:ߚN:VvY$=^K_X+ԩ|?{>{v? >; 4El~[-._E]z^t3 Xכ Prl;; _Xw)aGoO_ex|f8ڹaM~]Slqccf"p+KplcSvTM,^O $Ʒ'RgӖkDXpn1‘Ti{GxG&cNrH IUK}=^_'ezaJyD]x][|P+,u:Z7hjw[&ƺTq*S "mj,V_w*ܮb;y.'%wǻ\904ȬZߴU*t]Q/(wn\c*B;"*,!g X+* :?ۿ[^o0ïi`:&|GMS>8x0hzx8iZ/H( [6׭nYc'StYUYvtNUpuY ?Z㖹2s?d@z<8oVۚQ}߽ʞ wGH꜔c :òiЫ1w,ajXS7io "ƫ_SnaZ>]^҅@)DBߞ<_~Sɔ,V n񂲿zk-Q` &p|>ڎmGI5Ic̐a~ ]$wpa` (x./s旻/,_ZASc,q*+A0vtCAd_HCE+v߻ EXIKՊTLGP8==7Kwp(eFct*e^p(^p%jk|Zm_p>8tE7uV1LC)?I$q*c4 CQBU2SJ ֟MU/=/.\ <9oM2-tSobM5x=zΏ7bО=+ óda9f`yc(vBŰR)kg"A*l!"hSxf{\a}O #gQ*B`^:W|]>ҹ3xw9 1vKMǼR|^*O~oJE]- RWCv홌w湳Hݼj<|l L.%ŚN<;$,h 8[%+V*˗T`^|>cĹ#xBy*5xy/8z+>R-WFQ{.knmqQYW65̨0ҍϫi X- )=;I4bo1N#l>S=q0kxH! Wދ3, Aۥչ\j\R3wh~. ~ ^ JIDATxxUEOz3@ A,@@@ 4BW`YYum+vUau-_ܵ5  d3L. is><@=~w7h1 a4n 0 0 0 0 0 0 0 0 0 0 0 0 [/$(L/ny@o_/~6aCpb$|{I*3ASܹ]H .l80mg}X50>ǽ{w&席d+5mR;Vg^|q}ش{X6Sp]q/⛼,oYh'0'JrYYn,yBiݹpȘ>$+,?5=T=-}o(q_"KB/ N c*{6o2q.xKA~[CYذ`{wn9Om:[gk E챇U=Ce0X+ dׂh[9h_Or7=¡bM)a΀d}>=j𝦯Eizc[B -<^ @^ҷkM] .Z9I|rjz!u 6lT؜rٗSEa+\csXK*ņ*h/C@UuN`xZ|W|l8v8W Ȍj]"tV w dM#Krhm;6EdHfW2zkbO9rQMl{ |+45}ILRM"tVLڽLYO bWR!pD:ɢœdM+phs_r/ } /r4/t!s &|X`O1_] 8i9_Se]#j@Xd tAΝX!t ֻԏ0&25*ANRK);!euu*^ eӼ ^;v0XhYU\_d;n| grb5q )MA ]#O<͑6U 1(7aF̶eR-z%eS*p\s@5/j dW 㼩1N+.B*+\KKT?%a;0(` Tw1](:w7e:V֙>3<u@P5E_`Ugemŷiu8p ]}ٽ2 9B߀`M 7 h@TdYqnn_&[CVGs0Azr;d&=N-^ @P='osLxή( ګeb&81AW $27(Z(H$&lX_0R=dYjc];7Yn6S6WT;}My8hdu2pAӻ>%f?L- Z@PDrӻwfyN( "q&3ߞf+R#!Bk z LY2qx=foF5T3bq.Խn/P & 5@&{ }RPu-U<@ۮJ<|{^ypo"I\J%"o֌>cbL_醸 !6!'+MƛU~c3V8]آ?Y$٧<CNؾ4TGt[y?9{YS/ wgſF qAǸ V!+Tr61gOZ50D['gЬJe0 9X=מv6چh~ܲ_(J3=P u&|%cM9F&j0N [aŚY&m5'b/B{k l#JyA/? ˍUW>|T{2^n2$]#VX7J/Clhj o#*7Hc#+o=KrEbS\9 U9K@z '}‹>pjM z#!>~νך/G@_l>N>n$dȡۧ7ֿo{v}Wja pOtӝ]VhEBZXQ쑯m%jO{ (#@K7 1j-b,ђVi:j<(S85`]Ge~DInuK{$DÐ>j ~i=|yň#(TNC ˃D`@V#sbI~i u^ԩF=F_+ljA+bd|1ѡEvϋh8hbmDž|hS{˘B9fKNmϹULBzH9]#+*F4veHZKR{e6gĮf)F@V~\smҶOczY_;?: F\sϨt;-֒e lؼ JW7)1dU׀ wwׁߵOiN1>(^j6 esYN-r+1V/:6lK/'\7Ϝ]w1HUW1|`n3lkՇ=s•Mdԍ7fՀ Foo!|j5f! [?j:i&w!7#oB\2$C[".jݽJy.ޖ^hvm]iDP{je][LJ,yfS鼺s)g(wĽ-ae`k_ &rAwDNLԋN,1w>O1#Ētm77Q(7w1thc>Ƌ6 i딾e\6#Hiy E/p'kÇXܤ~HXz]H[OdM<-u'y-n5{zoo) ccճb 'bMYޫ}}فUAZSٽ#TI%HTx1,8Wad=xwo MD*RzBU V^wV8or5fX$j"V6 $=M 8kb*^afM6Sacm>tAoMʖ92қ{m[+`b6u,&N%)g? 1]9za%PٮfQ.>5'>Yur`od"oє\4Bg9ޚ}?;kethbI%IM=Y֮H[]7jyH`s|!ig:OCy&aѶӵ6 dGڄtF>RɨΝdV3Cm+;t)h~Lxs'&N#SKsuHswQLVMӿ=UmId^9֫GSu'k[Oi ߿iiן G25џ! IQa?dFi#"xd#0`,NOi`nV;FtD"s!jߏDf@K3iـ P`"T&?mWtMC!X`w!2;|d ` u_4ffHX& uq,uqtXV-2K ` BqFX77Jh3?_odQ* 6+"?R_sѻӎLl*o+P~̄*t+E`0왔'8;YK&%= 6ǍYW$U)T̜I6O͸"~!Ҵ]iA盻*I RGQ@x i8XMeMŦRٕ buh_RPFF7_`>] f!lӊ[ 28 H Oi@k}x73Tl%ﮤ$f˛޶uC[ou$Jbmw&Kn~l LU ixY>vmdviz\0 >{DD^S ӤsLejXO <)Js:Kk<)r͐'<,ۈai#ctM)0Ї-|_}ZWΥ>f^V R&wA u2uRj|<=pq9q[zi#<p5ZܥSc54JӮ+@府H>Lj/ &K[e@V|PI㬩rк* ,kd1QHRxQlq,(>jzO J^#<ל>?(A!ҷ>1W?qeJEUi:_'OdvI_*&AFSMG~J Z*1.3 $x?n+{foiO̭ 1.mؤMm+~zʒ sVGÀ!6x7{DRjm7u?\S5M>u`%hzU?W K\tj h0N{܂VtOD݉p>_YRy"mߖ/V-M7`V.;=*S}N|) ,:l#mVN`XP7gR5d\"٥5McEGqSۚQMbǡ#t6 lެ'f g3u?wq2}3g11oпEm[7s⟷` ,oxIaEjZ-'HB=wW>bq,X`Qe8*H%`ͭPRCL*M3!X`EjnʅMb}|Aq4ytH`Elpmq5ZnY01( ;(u ,X,8j51*BuNOo(}A,X`sc-x5 G;G"o]);|,X`~s}ǚԲ7ՓɨGc7|Y`Ν.!ǁ|_>;|,X`Qy)Uk7{6WC[Mof` MK[w6n|^晱`E!S7Ad;l>٨dP,X`ڿW^.%B3ƧmAEʉdm9:X`2ˤ6~T]3adʡ׈pHr.~== X`2c{!^H1kWlpb{`E`nCE2sl/,XxWH,~ڷ=IE]ޔǎx`Gg X̛nYԣ4}1<ğTK| ܖS$K c,2JS`LddX8bdƽ 31׍1"f L`RuT`-4cϥ΄Zi^2.7kb}#HK%*1]mh ߆N>9<8Ыi0DD\pXܪro{v Z:5m_\QƦeObӔvJ[eXL>'/fڸ1q j]X?ש#;ʅR:x'UZ 39eȑh% K@4Glq3"sԇQR͘/^8]`%m#Z^M7Q\}.I=uvetux:D~B ?<[zf~Gb`@F[Vø7Jw)Vc87ja@g%M-Bqdv/羉2EOUǥr$KUpT\a{cj=mq2ͩyN_f/gGOxw)cBW.4 NzmTǨ&I])@=0]z)B<_ں(nj&4X}c\XKkw;cD+<<<7<3-"3>pspo=c@m!ГKęqKK~};~w(?ɸX*1=[w;Z48>_Y1aX<}5%^{h¦H.ѲK!54 '7/@񟠱#3U͆d7'lZذ@H)+C&.ޢ䫱ES2Z-fjk)[>X{׹Jk}bFl=~y0,͌WvdMM#g}\ '"7à !Ӳm7nPg :1 `xb;^ dJ $|$S|CQISL7 G:hNނvG{ڽ-%bO2 1 xJ'x\s#//jn{.X԰_U]X~0q=3 C(Гqk N[+-׽kvk'#U3B(SsU@D^Ytԕ1myb ēJ7l}JyIZ;#vvB$(UZ=/Fok. 3k\;$D ]WBkwu@kœ?f! ل.oxG2S.6U]}VWX[18# bF`m~uP#*|lCcJ˃'_j.B-&l@":&Wbrg>SP95k}^7@zM1/]}j+OxVR$ ,k|Nߵ5dEG!}p>O@فRGԈ:ՠrY"0tuT7{o5!ѩO=22F̝T7;,邫 (u \J/~_Ք,?19$!okն:8_-<|]ʰMErí 9-,nXҫmw!Fc3O(&X5~سsD";@md_d4 ªw5 GM@n29$ Ei)~6#&)@. l6pӥ֛hߺnF%?( iuy])TrV(JF 7>*Bg3ڣ_c$f?yȋnrjھR H$1x&߿Tz@6,ttr4ܣIhc[[|4bі1CEέۨSd5̎ $͍ϥ2;-?]ie@ZICPNUs埱TcA.jއt0ҿ1ix&J1 lPİEtA Gxچ]Ŷ~ט-'m&zQ:zCWE+)]A GoJ&^2fX`aeogю(,a? k*SJJcg3f!7#@ L]vr $+Կv@kJ+Q[e 2 &vv=,$,є[Y0|w%$K{Sk)+jr%&[V&V4`"b UP-hlTmL P#;"._𵑣w)u y]"_S[kovyR4jx!2X2y4L&7\6&K?.?[-uxv֯Ītbhz5Ǥ,Hc 3 'O#,pQJ}[()uv}ɘL&6@)xCվ --*۝#v'Yy voA2-eY#Vu ݸgg≭Cג͙7oe!hCmd KӠsXUI|(:hG7&:(*CRq=c}X߯P*iWqyU{AW[Z{P bZ#^]yfI#s3TS(E4vP$] F?^96 6BfښR.SUVB(f`Ř5#EPаM!E=_rUKky-ebd\4{\j,Zрp;F%>awbR:5 zd2hwߌ-Tȅk#Sy֏A/np%~-|ó"u|(u3YKMKG-b}H=4 nJG+)#]jU/bK!cdqR%_R-qt )bza2`ou-jtK߹&#tӼ^$ΫbR*=[ACq]ӑy9 9\B̀6[d -ӽ| ֐.sKT2t":5#*8=GםE(zp @_cC{z| :>M̺V~)N6[t\fhP(rjX m?--'ʿ=R|vUv)u'Ұ28C i(& z;LflsF%`[DD ]5C"ug!,j>Q{L 3|9si6rՐ,tdѮ:UYkz؃JsHě ~Dg3'= 1'/ĿccB@@dG{[W<κ^\Znir-I"f3,,l-'BgBvzIoI$'-2K^:‹E LfxC qm7GiRw_%a \ ًSRHwlUwAgG. 9בXIgJ d5|Qid֛&ʈZ1"Kv"F|#;,PՌ NK`^>7&ǻ}|>wLNȐvnR`>>y{7zrkU}rw:yU+0w9h>jMUrUX52 .pcvb\?/9vqh϶k!3-%k+A##dƈ ߂:l-MHUwVy "Ӵ{$3nx C H0" .I'2_tt hdA=#LP9ֽKd>8qD'Q[:+lz]$ >[/ Jȕu.48K\ 7"h6vPȝ`6 !`:/ O}a׬ *KnhP!Kd,SLS ElTueH?uˢ? Y}۽_-Q#,󄈶;2H]̕?C ʔM>YWiHy&  +7^YKY~s]J,: $>`y_־  R~@ Z"FJzfPiAF'mA]vѩGCE#EA;_jB CF% b}fEP!G$]c;rHmyr t:-zW~H\;moZhEG=ggwΦ+DG\qlY- w ,Z_?U{cEȹE#%PL3ІPo(')qŲZr3(E^CKr YR,~]J˒\d~44)-ko#MRv_@&FÊi%#ЌO[nK4Ag/pM2ZBuTҨn&ZF &ef\SfUMIvfvJRߙE#CV\@b&5Zj'ki#آExĸ/OVx.Uo; A`|Q}x& AVŧQ fDzms  ELk 1VVUZJZ@8o h9lMIi_2+d؟ҩ7[AC_O<^TWӬ-'DBӔJcdM{>wXVY/8(bY$]p~diw ,ݵSHWM6,B6*/j#|e1@O܅#LhkDΡemFB6G+N~OIF@\|6A%9Ƞp5 J Y:߸!WOyGH0y#m:MoU$FdC|!wxo[\a/L/8)Nm!0&ĢN5 ()mj%$Y2exc,6黊 0gʎ(}9!A+nRUDqy8BۚX>szmr=#DS Ho8C{=y3K ɹP| [h0Ԝ@Z}G_% ]FßbA9(n:h17P:^gb#trirn)g1,EuޛkC oFșg{aMX/81WqUvy>jZ]d2ʃnfG]_mfjTOŸ>Rk44B.y\gj6{ꀤCVS!/#ˉʤ!AʌNfKz?!+eo |Gi!+0h̹BVIYz=H|[^Ad,S[5*9/8Uh1szqB.\_Jh1/M?*p5y Mmx,F_nG(픡|ACms_8uIvy(&P;ψFUV,) UazRhw \\xUOxu|ҦC8}Y hDKruQEpƇoF -;Ժlxޣ%|r|DHh{\"vas6ˎKIG^ĤJ87 LY^ezxq4ЎHxE]nK]\;H!{'/V(?v}@*Aukq EYt4Y^l9WXL͐8j"Y*,m1UV@6}k85%bհ=%FgNkMW]'M"VMC9!bNF>m7MMJL`}bQ2ыʸUi9:=L]"@4tƁlN8<p Ȫ[`C@y1k=bQb}T͜m=.v}m?`i7CTM/6W~5L{~ДZaZ^ey?pA$h ixjZ㔷;ɛ,~AҥQ2+(7kDfxQ%K`! ľD4vV-U+ K)C!^=8 R RvGZ]GU_+~ :if[$k/FLPt.?Fpu5PS71,괉Hsq|@Ѹ%|.X(FR~C !W,Me\$TyUׄ2#EN!̆&h[ =#H蒖 )tF*L{żpAMFF*![u-Ѡ>ϼ=N ܑLFFA7mRg!_8Qz?f h ̈́ʸ-ZJŷ5#Py1J~ZNޯ):ྺ$_j8)hf%wrh! ؉QSGn 8-d㒀 MA~L$L_ ڜKюh'&[nc"ZL9@N T@^Գ ~_MswT_sn#iBL-į%T:MR&5$ҕqҀzaa|~?@j8K-Û_Eq}/g]( f6W<~.D~ k ^ ApoJ(nofqWGߌEG?3[n;LkȷnNAuB-Y K` f P}wX6[~b~ a0_}RMfߢG`7~ײfN?*54yM22$;R~`Lf9, 6|]G6R\\+ +ih|_֐b9z.L? eFA'z 7`: G#+F l>FG_if}3-!ߊ 켧!k+VL0R_%Ek{KD!CgػzdJ: k XX{seF%-}W|;*+5ܠc&!4O2T_00] s5xl.?kw%qtr nSp/Z+DͮR }w%ѷnmOMMVrx]3ڭaؘq3Y'Oաw1|e4,]D8~Z.c3ǦXwyki iCQIDATxxUŶO$H轅!{ -!"*4 "*v(b˳W@bR+ꕋ0oasL䜓}~}OB{fϬY!p`W^ x^F~/xa7@"#B%aEAh ziA_ D"(O͞#/]"ِ@nT(X'p^^]pqxRWwCsIUE%EQpt 00?N'ju0mN|Rx_4L;w ʅCCũqbÚαuDD`` |.1( EWg{_8pUVL[?n"zu-'*WAAK9^^2;$^"*g:pVO{.WyyV<@@*{;j1ҍ b즢e"2".SBUb-u9WD/s|W"5!F;d]B0.327bt;5I1fx Ql9UBEC{tMu}o#/<;5 x !c8YW~"yp(ʝ ^^8 viڤ+z)ϯ~Mܑ\4 ^^,؛7oťˎBłtfM NbDr|CĨj楶_!qIcQy/_xNwz9eE0LjNo=b𐿾xќ^f]Wx ^XnZzPhߞ0",Hav ӣAs "fsB+J7N/,7Sd{I^ޢIâ#U\/" xaV3,]͠?=%x㻒Del x -kG\([:m=)z"F$UyrC/,7lĎ^VbˊSmjz?J saxR2%Ia- ^_.V8lwy^0q\sw/ xaa\)5vzN)1|-0_Z bJߝt14/ xa4.=<Ҽ!xF)ʰC\&8'}%xQ4_yn=Kؒǰ\"BMșƎ;^Q?D / xa޲m[8N2 ܼ!x bEŽJKCʗ`/[\``œ{|+x9My&C-KfM[=R2~O/[pIeŘ(jxS`0 e+ &oVЪEsC~^N֑E^ `BsCߕ(Z6)NthS[xģbb1H!z:Kb 0l}1\hF"R O>ZJ,S&a/pю'BGzv8'iޕ ?g14Ľ9!ڐ#x-) cx,7/3wZ,;e)j.xGpW+J|Ol /Ww‰Rh#=sibB"?xH}]q ǃPa32v>%Ɠs^ x'z ^-n_nBf.MFCg ƈ lhF"<&5k_]X^l n _ xMbXƢlnJ!siQ[)?bHb7@aU(YԶs3`h4E41[4=O6ɸwjxG 0;d|%j6tܝf~PT%Q~[QMk?Q4J/}y@C煵ᅱqˏC..~ؑ -1[ oC pJ$O=2Ucan(^.Ee#=]6ŶDE7ŀɯ#6F{N|<ƻˉ#/ ZMN3^6|6qb['0W1]· q\u|c\H靬JČq6pf1jA{^J7>[{!c"x뚃-qM&b]"UdpB | :rw{Kf oγV/}}{+8MongEܓ_B? ۈ[ h_uZ~_~} $c1_0?~1Tn ޽[E BƷD1'Oc%xEƝ3Sĝ 0]xK"aOb;gm}^ڽK۷tՄGŐm۾ x&9[yв:5!X|u^iOso߉g]SDM;N_G%;:2pު^a{dHuq潎;q>Ü xalpY™l q6& !:)>n ]׎]F6`kG?^3]m~67K;P8 xa끧sSn0x.xZ\ g8 HaLzyhb:[w^~xYz}kQmeWP`N^onC m/>h5]r`[75 PtPδQfp~[_Z31֭͒|kcE[ڋO}mďn$ه[>l҅S*;R'KV7b-L<6 ;HEߙi.\~c:ZB:g-цpy__*hC[@¬qKTZ)m7v.ך٘02GKZ|Nc5'Ʒa4M,(whK A'>cO\ k;0*ķ 6rH1[|F$:6E{sYʢk?xlڮlPp ];i0g'{|S] "رH60a11DӃ>S|m( A:DPQtM!xr|AobX{5Q~7&[t ]g;x˝p;[~D+n6[} ׏JK5۷Gyv  w0a! 5H=jnEכq_/ni. v /jb%:;U-/YfWqe姳˶B;P~A#m_aNy3.]ze.TS&>@gk$&s;?~C_) ك+Z;]i\p]6q~qC| 6MFo ЏZY^@'$]QQΞtp/Y9rSL>$MܖCSJph[wvqXo3W."c v>9|y*B\뉏Vw<"Z_w?i;lfFJQ7(<`S=rO 0hH)~Ϝ;]85jH] B 5g9}7H;s+\*[=,\Xe;!||; [9+_Q9QgxQNK;*\U+Z=|ަ7Į}gf 6ckvXE,q17YIu MF5vxqeR؝Ӭ 5zB xQnSvNyVyG/Mb, zn74s;4o;.eg_ ȏ@zDO&΃ Y- +~mwq{6}$.˰EjRENnd* lYq|KV9dl&&m9{JZr`qOʶ)oVzcRm;XT4(Y7AldM^jcGآ)YL,NTwnƻmr+|*,l!Ys*9ڔxG^fʷmkv|;p(W_&$'\MKkea3"";\VYI,rhE|u=7J;u<a,*.U:.Sl;t]1teJ,!;MGS^zhh?:E9֡xe@Kv< );,ZaMG ƍy qE uc/~I)"$8E k v}nQ~`u,v9sfh?Kg 34jی>KLe#/=U^o ^x>wǡ7sx]yw4MlF=t^O@s C++bJ3VPwwkiN_^٧|fW?iی ߦ~,?*B$\Aoz|ٗ`=K¿U]ăLd<Нf|WzE؝|Y$03ŭ\CYa#M;BifYnwTtiqF:ٺ+ͻԪo/[88Vt;h23h*x?K4^Wwx#K-H*\}{U#]ff5vdD96H5Gy2rґ^s'#Ƅu:sh.Jؿ2Jjʹv-baf W 8ͯſ2En9b)Uپ=2yz'k*/?B#x IU > G='П>50e5~I2ÆT1S5%+ķ7c<*/0ޫ}PP~ۘ 8Po_2\hE" S@,W\*&Y8xX)\ v#ZRhwu/t<,wqC}f|36-J9'NbWCr".2[PJ7`r hhF~ĸ)w`wE!/ ^VK~҂V[HE{"S[l9|g3ʋ]B-^}a}cS1 ^j׈HV1+~JUٓ"r7zmwNQB M΃rU"q՞tIY#7ʘQ?5kҔng]E9/|K}#C8RdTOY4_ՃD Šg32NhovSG5zMVx.e{HPO*Wde71zԫƷӂJ3]f;NP#^F%,BC²g狞Q/Z|'.ZGEZf8yGܛמsXuQųges:S!x#me*j[8弢dfXS B'\U2[ʂW>1(&ߋʦm͜x{9 ϕ}'e,(=4/G Z%7 5ǬsT~sįyGW9|Q3ORRrEd*j8]ț7w9vzen:bY0Yp"Λq1d&7ܢr`䁉 /.r7Zd\QS A!#?S[>VwqC;|.þҳK9vS1ޞP(ʳs&1@_7]7qvYs|'&*)ud_tqa}yJWKzOjZd^-\X*Zvk(v _^ =u;^xuCwE͈J]f* ޒ_q\;_m{~h{X%ӛY^N|!qqNP ^ۈ]f@BWI8ichb訦}6}hFD-89-QQst X}hs &D@e>K?D hy׭&~:E7)pGUl}]O,꯻% qmg>| ; ]9SU퍁Vse{_ה%Cs )Gbbj&2פ^5(X.U)yЏbׅ1X:뉊fa* J\`e$׋HAVX`"uL'sX;ON]EbBV૨nғA٧Np,U+:dǗuA$(F˴?$,'t\_\wY3kn>Ai4|uXKl<<9<YW(:yg,x(~mdD}B qq =/wl.t+jG{UףvTrլ.,5DL6l1a[4xqsfuY{86 _TfNޫɃc%HU:Sh.i&X;yMhg.80FȾURLԦwK%`DcL9&q*ވT}[*GNj(x ~f('.g ix7?U|A6ZƊA~.4?<%ϛ<<)ϫ#pKvI/<"e8'.to>k^V[{F}}aɮ)pָb99NOGp R kl􊋋;L{| ݌ _ YUuߚa} ۋN3W^g#y )9xe6x^l a`TJuޱ͑@ϥqj.>;OJ[\sn/r ?]Qy>WfIESݢWE!Dd ""_d1Y_ST6=޸!ӵ*yQ2;tFfBEgi_WϤAd2NgF.x*?ottgҟMvߺR-p.ݦrsߕ!iG+vR݌=gAm+@J/=hMȭ ,zR1lHnHqmӸe'r79d;ek7EY+ Z?bc[߫fb7|7BK v1A^ɭ#wéŮ*䠾,GkBE8}}T*~\ќEN0LXVٮyaj;De3E0#zָ2f!{|<ɴnkfh0SN@:y'ka$#O^8~'v٥r+Ǽ;pȞrZ2gK+S&NKrw- 4PWej3a= 9a۶2LSS|I?cf.NI_wsPHTYvJ#{[J?H}rPb牪F F9K٢q 1䃻\Ϩ(w9D;Ϝ~w9_i#Z, ׮\))aCNzXºXͦ{5uWu+XNw4 wvFL ,xxHSyͻ8{X'A|Y8*T|.F]'O=8vd۵,qh$D/Zp.kt9]۟3qv,OU) _ʧ<+/|Iyw IO xgfq}Xbh5[^X+9FzlW]|I%[,J_W]-yDqTLUcc&9HHp;:](t6NG$38 h5踚DywX;+_sf o_լufnv܎frmJ3/?O_aAUI?ҧ~5(x}n(-x3YN*6kT4wv^9r+ux_jVBۃ]\ @6j 3l?-_ӒŽQf e+4֝sSrڲ#ץtR k$G>KZ酂\> &F)iVmXPnus[8MY;N$ŀSkzˁ}D%G47K0^q@J|cXrqRݟ1UɴԒ64 Q6SZޫ~×YEXʦo*l|e|ZOyCi;D"!~ RvSDuЫ۲NtRM4D ]SN]X9&`=)Iu/zLXw]v }ǨŻJ~P\ " h69ێPzw \W˖¡ CAhs j2,^ T ܏J^jgtA(rkwl).SNE'cוHgV5;ADVyw\i9.YfTy6g#M]G]b|Q7M'2T6˺NQ)]^u49 ՠ;BHkT'O\WSU(a7U݂0iE̓1I*WT2vց^]IuXFҎj԰6wj;82|=/ʿLR!V*|G]f\L ]`ֶEܱu/ ^e/Y@/¨I? 5 U`iWJy![I{=p+vOםg_pDA-<3jՂ)ĴI,±4'%~' /P0PJ)7f5w\aw){@I=v( akÛËJk$o4 _b&|N/d,%˟qĥz VD[Cuqȗ= 6J/!i 8n9 >^Zc?iDs:ܯMǶX=/[5ŊP՝6ŋ YƹzN Bƅ;}K^>Ejy^St.)I8q~S3g?tC[?9MewlIY6dJx6}MDs΢UdEDE kT^_Dە)Gw% S\1oHTqy sԀEuȡ$YJjNzj,x)QIk8^vvzC\ep7#Z&EF%"OQ)b~^P>uF zNwQ"׭CqЮ +̷;EI#~DϜLB j 9I6ѡ*Y+ZcqqԳz-7GDǝEH"@q^@FLz~Ve59* ^gBg@HjsI-EW1K?I9}=vhRP.)gEt͜Lsqlv oǾ `Sx._-MI"|2fw#/xX*[a Z)&!ǧ *g{z(ֆD\n:7 e#Y𚶎3pʲ;!=&>mi\RP 0dpM&/-6ŗaKh0m` chF /PlF*8* ח 8^l;mBX}o9!J}мABN8q㘚c]w2r|]O^G'nQ0OhK}bp+ ^Ӫ%4oRLvٳyhӼw0Q#7:ÂBLTL8y8օI1(tߪa{%zؽX5?Ra_m/[aQ@Ur죭98nç1 Ӗzz O_QOkW/M1$*^6%3n/?QKM_}M_(J>eAg=1BCmO#+/;Â7m`B N*/<%[egjZ$˚WjρPChK˺ix^eE".WG6uS>X!;2BzX"8srMpaB4'?ӥ=vfc԰:W9< wY&pG΅96״j:FM20|MO7 : 7ǏJ0!\ g8Xz^ (xeܟ$Ӛǵn9􆶴a\Ol'x*DGA1bG pĐEt.-ZgzAg LFvN{3a9nvqBddg4ViUDCs;1ןFw!E[꼳v]; ^*pذ 1:y`_S'ƒͼ_C%ӂW:iFcB1a{0'Oo]lU^c,vc8  ֭e:h7~IzA[jq'\bkk&w,_&BL&_:(W&|};K79Uϵ fh#ܹ L鲥彂.xC ~F_ΰm[ 88 ^|;E^cl+rݾ~HMY;d"P?2c`zLR "\xnb G* gfAv SmY}WdkNƗ"#MYSGvs6-Bt0o ^9FPbLXvYh™eMva"(%\tۺOW(Lq+Ny9@{>GI>ӬWVa'VHHܯZ7xqf6̾wkx}`JE^D;!߱M+Ts5Ÿ VՊ0!?sE{쫲NF ~=nG:|b(vϻιuLYFïCWGWPP\1RRV<0ARgBq g66 XO$Ɍ:w3@zXk.NPlJ? ^K7zԳ(*ʥz=~f6΀yX)qQwL6cOnJdNzBb˜b.bĩ4JK~U1ZZLA&wrOg"6 +?j|ôO Mff84M\]R kL5ySqZ׌qTkiC?g;uK(.._475+ xpyO]6 PQFhߺ6X|S˝ŶO9;wXDJZգDa+ mh䳆۱#|%x-<|E(J>"X8WW3wP–v-Ub7rdWf 38vz+G.q(1q1^-}]_-P -"*a'Vi!K_ɜ4# xݰRfZ#t8/wX GLGfD-C)m$LK43 ,"EpPձ.7ʋV}-xTqhRS1VVo+jwau +=d|b?O0Ő&ץ&<⃬ƯX.ZQ)[ 4ZZiLwƘξ2cvF-юN:Js"X%QX0>Mws)Cg+3 #̙ʟ'.wv#+:@ÈXHˀ(M}[CQ-\ڑ^bc$ Q;*6J 4m9^\ b <D2-Hה,:=<\J62^1br,s6aMfFOl~@us7dQ~+<"6m`0  x/ `0^l1F@ /t6_-2IENDB`ares-126/ares/ares/resource/resource.bml000066400000000000000000000027101415063341600203570ustar00rootroot00000000000000namespace name=Resource namespace name=Ares binary name=Icon1x file=icon.png binary name=Icon2x file=icon@2x.png binary name=Logo1x file=logo.png binary name=Logo2x file=logo@2x.png namespace name=Sprite namespace name=SuperFamicom binary name=CrosshairBlue file=sprite/sfc/crosshair-blue.png binary name=CrosshairGreen file=sprite/sfc/crosshair-green.png binary name=CrosshairRed file=sprite/sfc/crosshair-red.png namespace name=WonderSwan binary name=Auxiliary0 file=sprite/ws/auxiliary-0.png binary name=Auxiliary1 file=sprite/ws/auxiliary-1.png binary name=Auxiliary2 file=sprite/ws/auxiliary-2.png binary name=Headphones file=sprite/ws/headphones.png binary name=Initialized file=sprite/ws/initialized.png binary name=LowBattery file=sprite/ws/low-battery.png binary name=Orientation0 file=sprite/ws/orientation-0.png binary name=Orientation1 file=sprite/ws/orientation-1.png binary name=PoweredOn file=sprite/ws/powered-on.png binary name=Sleeping file=sprite/ws/sleeping.png binary name=VolumeA0 file=sprite/ws/volume-a0.png binary name=VolumeA1 file=sprite/ws/volume-a1.png binary name=VolumeA2 file=sprite/ws/volume-a2.png binary name=VolumeB0 file=sprite/ws/volume-b0.png binary name=VolumeB1 file=sprite/ws/volume-b1.png binary name=VolumeB2 file=sprite/ws/volume-b2.png binary name=VolumeB3 file=sprite/ws/volume-b3.png ares-126/ares/ares/resource/resource.cpp000066400000000000000000005432661415063341600204070ustar00rootroot00000000000000#include "resource.hpp" namespace Resource { namespace Ares { const unsigned char Icon1x[6562] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,128,0,0,0,128,8,6,0,0,0,195,62,97, 203,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32,99,72,82,77,0,0,122,38,0,0,128, 132,0,0,250,0,0,0,128,232,0,0,117,48,0,0,234,96,0,0,58,152,0,0,23,112,156,186,81,60,0,0,0, 6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,0,96,0,0,0,96,0, 240,107,66,207,0,0,0,7,116,73,77,69,7,228,3,25,12,0,21,79,119,140,126,0,0,24,145,73,68,65,84,120, 218,237,157,121,116,85,199,157,231,63,117,151,183,191,39,61,45,32,33,132,22,4,72,236,251,106,22,35,28,176,143,77, 66,156,100,156,196,91,210,233,57,246,36,221,227,142,51,137,167,113,220,238,196,113,22,187,211,238,100,38,238,201,44,113, 60,167,51,157,105,143,103,226,156,147,165,19,239,110,27,219,128,1,177,25,132,132,192,32,208,246,164,247,244,246,119,111, 205,31,87,74,220,182,65,79,210,91,132,185,159,131,14,7,206,189,87,181,124,235,87,85,191,170,250,21,216,216,216,216, 216,216,216,216,216,216,216,92,93,136,98,39,96,10,229,91,22,59,81,197,224,106,20,128,120,215,207,40,38,176,5,88, 1,164,128,40,208,3,156,31,249,59,50,242,127,233,98,39,62,215,104,197,78,64,17,144,124,112,107,111,6,238,23,32, 220,110,45,237,243,234,26,144,25,142,165,195,241,184,209,37,165,108,7,78,0,135,129,99,64,47,150,40,174,104,174,70, 11,112,41,124,64,43,240,5,135,174,172,219,184,174,90,189,121,103,131,195,231,213,221,157,93,97,113,170,51,76,123,103, 216,60,125,38,18,29,28,74,245,198,226,153,54,96,15,240,26,150,40,66,88,150,228,138,194,22,192,251,41,1,118,10, 193,23,155,26,75,154,239,253,226,98,121,243,77,13,94,77,19,250,80,56,205,133,158,24,71,223,14,177,255,96,31,123, 15,244,154,237,167,194,67,161,161,228,113,195,144,207,2,191,7,222,2,194,197,206,68,182,216,2,184,52,117,192,93,46, 167,122,251,206,235,235,60,187,239,93,174,55,214,251,61,82,34,20,1,25,67,18,26,74,210,222,17,230,229,87,187,121, 241,213,110,121,248,88,40,52,16,74,188,41,37,191,0,126,11,116,1,70,177,51,114,57,212,98,39,96,10,51,4,188, 156,49,228,145,35,199,67,205,47,191,214,93,81,95,231,79,214,215,250,29,114,164,225,120,220,26,181,53,62,214,175,174, 226,134,235,106,197,166,245,213,238,96,137,163,41,60,156,254,72,56,146,186,193,48,100,21,208,7,12,48,69,187,7,91, 0,151,199,0,78,2,47,244,246,37,42,159,125,241,220,92,175,71,75,45,108,41,83,53,77,81,165,132,209,31,151,75, 165,174,214,199,230,13,213,108,223,90,171,214,213,250,43,162,209,244,134,190,129,228,141,153,140,89,3,92,192,18,195,148, 154,110,218,2,200,142,16,240,92,44,158,73,191,178,231,194,170,88,60,147,94,189,172,82,115,58,85,85,190,171,58,165, 4,33,4,193,82,39,43,151,86,178,125,235,76,49,187,33,80,50,56,148,90,219,219,31,223,145,201,200,82,224,52,48, 88,236,12,141,98,11,32,123,82,192,27,233,140,121,97,239,129,222,245,125,3,73,177,126,245,116,213,237,210,254,149,8, 224,143,86,193,235,209,89,186,176,156,235,182,206,20,51,103,248,130,221,23,99,27,251,7,18,155,77,73,18,232,24,249, 102,81,177,5,48,62,12,224,144,105,210,117,232,200,192,250,158,222,184,118,205,218,170,15,20,193,40,163,66,88,177,184, 130,173,155,106,20,183,91,171,238,236,138,92,55,28,77,207,1,58,129,139,197,204,144,45,128,137,241,182,148,116,30,62, 22,218,20,26,76,106,215,172,173,82,157,14,245,178,101,41,129,96,169,147,13,107,170,88,190,164,194,209,215,159,88,244, 78,119,180,213,48,100,18,120,155,34,89,3,91,0,19,231,164,148,156,107,59,58,176,197,148,176,126,213,116,93,211,196, 229,69,48,50,70,104,152,229,167,117,115,13,30,143,86,118,162,125,232,218,225,104,186,6,203,153,52,88,232,76,216,2, 152,28,199,165,100,240,224,225,254,173,229,65,167,185,108,113,133,131,44,124,43,82,130,199,173,179,102,197,52,22,182,148, 57,58,187,194,203,206,95,136,173,196,154,113,156,45,100,6,108,1,76,158,35,233,140,169,189,213,214,183,126,209,252,178, 244,236,250,128,83,202,236,28,108,66,8,154,26,2,108,88,83,37,66,131,169,89,167,58,195,91,50,134,236,197,90,107, 40,136,223,192,22,192,228,49,129,67,177,88,166,254,200,177,129,150,173,155,106,140,178,160,211,33,179,156,237,75,9,229, 101,46,54,173,175,66,8,17,108,59,26,218,156,76,25,41,224,16,5,88,125,180,5,144,27,146,192,225,158,190,196,166, 161,112,42,216,186,185,70,213,117,37,235,178,149,18,220,46,141,213,43,166,81,90,234,240,28,56,220,191,33,26,203,168, 192,94,242,60,56,180,5,144,59,66,192,197,147,29,67,59,234,102,250,88,178,176,60,235,174,0,172,89,130,166,9,150, 45,170,160,166,218,235,216,119,160,111,117,100,56,237,2,222,192,18,88,94,176,5,144,91,58,13,67,86,158,236,24,90, 217,186,169,198,40,47,115,101,221,21,140,162,40,208,50,55,200,172,90,159,190,239,64,223,202,161,112,202,129,181,236,156, 23,75,96,11,32,183,152,192,201,254,129,228,22,32,184,117,227,12,93,8,161,76,228,67,205,115,74,153,57,195,171,189, 177,175,119,121,100,56,13,240,58,144,201,117,130,109,1,228,158,65,32,211,217,21,185,110,221,170,233,70,221,76,159,115, 188,86,96,148,121,77,165,76,159,230,209,247,236,237,89,17,141,101,34,88,99,130,156,206,14,108,1,228,135,211,241,132, 177,42,30,207,204,218,190,173,86,29,203,65,116,41,132,128,230,185,165,120,220,154,99,207,222,158,21,201,148,113,6,56, 146,203,132,218,2,200,15,9,32,126,174,59,122,253,218,149,211,105,168,243,79,216,10,40,138,96,97,115,144,68,202,240, 236,61,208,183,204,48,228,62,224,76,174,18,106,11,32,127,156,79,166,204,181,166,41,103,109,111,157,169,41,202,196,198, 2,0,186,166,178,100,97,57,103,207,69,131,71,142,135,230,0,47,144,35,183,177,45,128,252,145,4,196,133,158,248,246, 214,77,53,178,122,186,103,194,86,64,2,110,183,198,252,230,32,251,15,245,205,58,223,29,243,0,207,147,3,71,145,45, 128,252,210,27,139,103,90,43,203,93,21,27,215,85,101,181,78,112,41,70,61,134,53,213,94,241,210,171,221,205,195,209, 244,121,172,13,168,147,194,22,64,126,25,6,102,134,35,233,117,31,189,161,94,241,120,180,73,157,195,144,18,234,106,125, 164,210,166,227,181,55,47,54,155,166,124,5,107,171,217,132,177,5,144,127,226,145,72,122,215,154,149,211,196,220,217,37, 238,137,118,3,163,168,138,194,188,166,82,142,28,11,149,159,58,29,246,1,255,204,36,156,68,182,0,242,79,56,147,49, 55,150,5,157,245,173,155,107,52,96,194,131,65,176,198,3,62,175,78,213,116,15,207,191,114,190,105,120,56,221,9,28, 156,232,247,108,1,228,159,20,80,151,72,24,107,63,126,99,131,238,113,107,147,46,115,41,97,230,12,47,131,131,41,253, 245,125,61,51,165,228,159,177,182,177,143,155,73,169,209,38,107,246,188,115,62,154,110,239,8,199,133,200,205,89,28,77, 83,184,253,150,57,44,108,9,46,7,238,100,130,117,105,91,128,194,144,72,38,141,27,23,52,151,149,173,89,81,233,50, 115,112,50,64,74,40,43,117,97,154,136,23,94,233,174,53,12,249,28,214,73,230,113,97,91,128,194,16,2,142,183,29, 237,87,83,105,51,103,155,60,36,176,243,250,58,86,44,173,152,13,220,198,4,26,180,45,128,194,144,4,142,182,29,29, 136,15,71,211,102,142,122,1,164,148,76,171,116,243,217,79,54,225,114,170,159,4,22,140,247,27,182,0,10,199,201,190, 129,164,54,20,78,41,185,26,7,128,213,21,108,223,90,203,210,69,229,245,192,39,24,167,179,201,22,64,225,232,140,68, 82,241,179,231,162,145,92,30,201,30,181,2,187,110,108,64,215,148,143,3,245,227,121,223,22,64,225,184,24,141,101,134, 206,158,27,206,228,227,80,254,142,214,90,102,55,6,230,1,59,198,243,158,45,128,194,17,51,77,217,223,219,151,112,229, 178,11,0,48,77,201,172,153,94,90,55,213,104,192,78,32,144,237,187,182,0,10,71,10,8,15,71,211,222,124,124,92, 211,20,174,223,86,75,89,208,185,26,88,150,237,123,182,0,10,71,6,24,14,71,82,166,105,202,156,71,13,49,77,201, 226,5,101,44,158,95,86,134,21,235,40,43,108,1,20,14,3,72,12,71,51,105,195,144,57,63,245,35,37,148,150,56, 217,184,190,26,44,1,148,103,243,158,45,128,194,97,2,233,84,202,48,164,156,236,154,224,7,35,4,108,92,87,77,121, 153,171,133,44,125,2,182,0,62,68,152,166,100,78,99,128,57,141,129,32,176,46,155,119,108,1,20,14,5,208,29,14, 85,21,185,158,6,140,32,37,148,150,58,89,177,180,18,96,45,48,230,128,211,22,64,225,80,1,151,207,171,57,84,117, 226,27,68,199,66,87,5,203,151,84,224,118,107,139,129,202,177,158,183,5,80,56,116,192,95,18,112,8,69,153,216,57, 129,108,48,37,44,104,14,18,44,113,84,98,133,191,189,44,182,0,10,135,14,248,189,30,61,175,241,133,165,148,84,77, 243,80,87,235,247,3,139,198,122,222,22,64,225,240,40,138,40,175,172,112,37,242,52,9,0,172,113,128,207,167,211,212, 24,0,152,195,24,1,193,109,1,20,142,233,94,143,86,82,91,227,211,242,29,42,210,229,80,104,172,15,0,52,97,5, 193,190,36,182,0,10,71,99,192,239,112,215,214,248,252,249,14,21,42,129,250,89,126,60,110,173,14,91,0,83,134,166, 138,50,87,166,36,160,155,249,236,2,0,144,48,163,202,131,219,165,249,129,105,151,123,212,22,64,97,112,2,243,23,45, 40,115,251,188,186,82,128,250,103,122,165,27,183,91,117,3,51,46,247,172,45,128,194,16,4,154,23,205,47,51,28,186, 162,231,251,151,73,9,94,175,78,176,212,233,100,12,95,128,45,128,194,208,82,18,112,204,92,190,164,130,92,236,8,30, 27,137,174,43,4,252,14,29,75,124,151,100,44,1,216,23,74,228,134,117,181,53,94,189,169,33,224,206,123,255,63,130, 174,41,248,125,58,76,98,16,248,222,155,181,108,38,70,0,184,102,195,154,42,45,88,234,84,11,84,255,104,170,192,227, 209,192,114,64,93,18,219,2,228,159,22,183,91,91,180,109,115,141,161,170,249,115,1,191,23,161,8,28,186,2,99,212, 225,88,199,149,109,1,76,158,237,77,13,1,223,138,165,149,110,179,48,3,0,164,4,69,88,219,196,24,163,14,199,178, 0,83,234,122,147,43,144,42,96,199,245,219,106,69,121,153,75,47,148,249,31,15,246,44,32,191,180,86,148,187,230,222, 180,163,78,17,162,112,101,45,132,181,42,152,206,152,48,70,35,190,92,162,36,176,9,184,155,49,70,146,54,31,72,0, 184,101,219,230,26,173,101,94,176,96,230,127,20,105,74,210,233,201,9,0,172,187,116,191,13,108,43,104,234,63,28,108, 11,248,29,107,110,253,212,28,225,116,40,5,191,162,55,99,72,98,177,12,140,17,72,106,44,1,164,70,54,47,253,9, 80,90,232,76,92,193,148,2,159,255,200,181,53,142,213,43,166,21,188,245,3,164,211,38,35,33,102,35,151,123,110,44, 1,68,221,46,205,112,58,213,117,192,199,10,158,139,43,151,93,101,65,231,218,63,189,163,69,184,157,106,17,6,127,130, 116,198,36,28,73,165,25,35,158,224,88,2,232,241,251,116,117,243,250,106,85,8,238,2,26,10,157,149,43,144,70,224, 174,79,125,108,182,186,106,89,165,215,40,66,235,23,2,162,209,52,161,193,100,146,49,130,70,140,37,128,243,82,146,222, 117,99,131,99,222,156,210,102,224,46,174,206,43,231,179,69,7,238,158,215,84,50,239,174,207,181,232,154,150,253,165,17, 185,68,0,23,123,227,196,227,153,56,208,125,185,103,199,180,0,195,177,116,196,235,209,60,95,190,123,145,116,58,212,91, 25,231,233,211,171,140,29,78,167,250,153,123,238,94,44,27,235,3,158,98,244,253,0,8,56,223,29,35,158,48,34,76, 210,2,68,98,177,76,87,71,87,152,143,223,212,224,249,248,77,13,30,224,47,129,217,197,201,217,148,166,9,216,125,243, 77,13,238,93,55,214,123,164,148,69,243,162,10,224,244,153,8,177,120,166,139,73,14,2,135,129,246,142,211,17,84,85, 56,254,227,95,44,213,23,182,4,231,3,247,3,37,197,202,224,20,164,4,216,189,176,165,172,249,107,255,126,169,195,227, 214,198,125,83,72,46,73,164,12,58,186,194,0,237,192,101,119,33,143,37,128,12,112,162,189,99,136,161,112,154,134,58, 191,231,161,221,171,168,172,112,125,20,248,34,99,172,52,93,37,232,192,151,42,43,220,31,125,104,247,74,26,234,252,197, 51,253,88,3,192,225,225,12,237,29,97,128,19,140,113,203,72,54,238,201,182,211,103,34,145,11,61,49,164,68,108,185, 102,134,255,190,123,150,10,143,91,251,115,224,86,174,238,5,35,1,220,234,113,107,127,126,223,61,75,196,150,107,102,248, 77,179,120,166,31,172,187,8,187,47,198,56,125,38,18,6,218,198,122,62,27,1,28,15,13,165,122,143,190,29,66,17, 32,4,202,237,183,204,245,222,245,185,22,77,85,197,3,192,46,174,78,17,8,96,151,166,42,15,220,253,249,249,234,237, 183,204,245,22,210,223,127,41,20,1,71,143,135,24,28,74,245,2,199,199,124,62,139,111,246,198,227,153,182,183,14,246, 145,49,36,82,130,67,87,245,175,124,105,137,255,142,79,207,245,43,138,248,46,112,35,87,151,8,4,112,163,162,136,239, 220,241,233,57,254,123,191,180,216,239,208,139,225,240,121,63,233,140,100,255,161,62,226,137,204,33,160,119,172,231,179,17, 64,20,216,179,247,64,31,131,67,73,132,176,142,31,249,124,186,227,175,239,91,233,255,236,39,155,202,20,69,252,13,87, 143,37,80,128,93,138,34,254,230,51,159,104,42,127,240,190,149,126,159,71,119,20,106,171,215,229,16,2,6,135,146,236, 59,208,11,214,45,99,177,177,222,201,214,81,161,38,146,198,71,175,221,88,227,174,157,225,67,202,63,220,118,169,94,179, 182,74,29,10,167,212,182,163,3,91,76,83,14,1,71,177,162,97,124,24,113,0,183,106,154,242,240,29,159,158,91,250, 208,238,85,254,146,128,195,97,78,129,202,7,80,85,193,193,35,3,252,248,167,199,67,241,120,230,81,160,107,204,119,178, 252,246,112,60,145,185,174,190,214,95,187,126,77,21,163,249,125,151,8,52,195,148,28,58,210,223,154,78,155,58,86,248, 242,188,221,118,89,36,2,192,61,94,143,182,251,75,95,88,224,190,255,43,203,253,1,223,212,169,124,176,6,128,63,123, 170,157,223,62,123,118,63,240,3,32,62,214,59,217,10,32,14,52,8,69,108,186,126,91,45,46,215,31,95,147,18,28, 14,69,93,191,122,186,94,22,116,154,251,15,246,173,139,197,51,13,88,215,155,13,20,187,80,114,196,108,224,59,149,229, 174,59,31,248,218,10,253,139,95,88,224,119,187,180,41,97,246,71,177,204,127,138,199,30,111,163,235,236,240,79,129,95, 101,243,222,120,124,213,102,56,146,218,185,97,77,149,187,126,150,159,247,230,93,83,133,186,108,113,133,99,201,194,242,244, 225,99,161,150,222,254,248,102,224,34,112,154,43,183,75,112,0,215,3,127,187,176,165,108,227,99,15,175,83,118,221,216, 16,208,84,161,77,161,186,7,44,243,255,250,254,94,254,203,79,142,13,36,18,198,183,201,194,252,195,248,4,16,138,39, 140,245,193,82,103,211,150,107,170,185,68,148,19,209,88,31,112,182,110,174,49,194,145,84,105,123,71,120,71,38,99,78, 199,114,72,12,22,187,144,198,73,3,240,85,151,75,221,125,243,206,198,25,143,61,188,94,95,190,164,194,39,101,241,167, 122,31,132,97,74,254,235,19,199,121,233,181,238,23,128,255,68,150,93,240,120,4,144,4,252,195,195,233,29,215,93,91, 171,148,5,157,124,80,43,144,18,17,44,117,58,90,55,213,104,179,106,253,180,119,132,151,15,132,18,91,177,182,38,157, 198,186,84,113,42,83,10,220,34,4,223,109,106,44,217,254,224,215,86,232,95,254,119,139,189,211,42,220,174,98,59,121, 46,133,162,8,186,206,14,243,189,31,30,204,244,245,39,30,3,254,37,219,119,199,187,92,57,48,52,148,250,200,172,90, 223,180,85,203,42,185,148,25,148,18,116,93,81,23,47,40,119,110,219,92,99,42,66,4,59,186,34,219,226,241,204,42, 44,33,157,103,234,13,18,3,88,43,157,223,42,11,58,63,127,219,191,153,91,241,189,191,94,163,111,217,48,195,175,105, 162,96,7,58,38,130,16,130,127,124,250,20,255,231,23,157,71,77,83,62,196,56,172,237,120,5,48,104,154,178,122,120, 56,189,105,251,214,90,188,222,203,47,5,72,137,40,11,186,28,91,54,206,208,215,173,154,110,196,227,153,89,231,186,99, 215,39,83,198,26,172,249,116,15,89,204,85,243,89,118,192,116,172,221,78,127,85,18,112,220,117,211,246,89,13,15,63, 176,90,187,227,150,185,254,138,50,151,115,170,182,250,63,100,64,8,122,250,226,60,252,253,183,56,243,206,240,223,3,255, 111,60,239,79,100,195,194,64,223,64,98,71,83,99,73,233,146,133,229,140,213,50,164,4,33,132,82,55,211,231,220,190, 173,86,93,187,114,154,52,77,57,235,66,79,124,123,60,145,185,14,168,193,154,101,68,152,196,245,103,227,41,51,172,214, 190,4,248,130,16,220,95,81,238,250,236,206,235,235,26,190,113,223,74,253,223,222,57,223,211,56,203,239,1,242,126,140, 59,23,40,138,224,233,95,118,242,228,63,158,236,204,24,242,1,172,129,247,184,10,99,188,168,192,119,214,175,158,254,149, 39,31,191,150,202,10,55,217,78,135,132,176,18,156,76,25,153,99,111,15,198,127,249,155,46,243,87,191,63,75,71,103, 56,18,139,103,218,128,151,129,215,128,183,177,174,89,201,213,120,193,201,200,17,109,96,61,112,141,203,165,46,106,106,40, 241,223,240,145,90,110,218,94,167,180,204,11,186,157,14,69,51,77,57,166,168,167,10,66,8,122,122,227,220,126,247,243, 188,246,230,197,239,97,237,213,24,215,140,107,162,230,109,177,211,161,62,253,237,7,86,207,254,147,219,154,179,22,192,187, 81,20,129,148,152,253,3,137,204,254,131,125,177,223,189,240,142,242,202,158,11,153,119,206,71,211,225,72,234,156,148,156, 0,14,99,205,32,58,177,148,29,195,178,18,105,172,208,171,163,49,119,21,44,97,106,88,83,55,15,150,105,111,192,10, 148,212,34,4,205,1,191,163,182,182,198,171,175,95,83,165,183,110,156,97,172,90,62,205,93,94,230,210,133,64,41,230, 18,238,68,17,66,240,223,158,60,198,95,126,243,205,83,201,148,177,139,44,86,255,222,247,141,9,254,110,5,184,127,241, 130,178,191,122,242,241,107,149,198,250,0,19,45,192,81,171,96,24,210,8,13,38,141,246,142,112,124,223,193,62,218,142, 246,171,109,71,7,18,253,3,73,53,28,73,197,99,177,204,144,97,202,126,32,140,213,93,36,249,227,158,119,29,112,97, 29,96,9,168,138,40,247,120,180,146,128,223,225,46,47,115,26,139,230,151,187,23,207,47,203,44,95,90,65,83,99,192, 29,44,113,170,170,42,212,43,169,181,191,175,2,20,65,199,233,48,183,221,245,188,209,118,116,224,27,192,67,252,177,65, 100,95,254,147,72,67,189,162,136,167,254,226,238,69,43,118,223,187,12,69,153,252,88,73,8,75,213,138,128,84,218,76, 15,71,211,230,80,56,165,156,61,23,141,156,61,55,156,233,237,75,184,162,177,180,119,112,40,101,70,99,153,116,42,101, 24,0,14,135,170,250,188,154,94,18,112,40,94,143,30,173,172,112,37,106,107,124,90,109,141,215,95,18,112,152,62,175, 174,56,116,69,55,165,181,144,117,165,86,250,187,49,76,201,67,143,238,231,239,254,254,240,155,166,41,63,73,150,142,159, 247,149,249,36,211,113,231,140,42,207,127,254,241,99,155,60,155,215,87,147,235,45,208,163,130,16,35,41,29,117,62,153, 166,52,12,67,154,163,81,183,133,16,66,85,133,50,26,129,83,74,9,214,159,15,77,133,191,27,85,17,188,240,47,221, 252,233,61,47,197,46,92,140,221,13,60,57,225,111,77,50,45,237,145,225,116,83,111,127,98,241,214,77,53,120,61,122, 206,143,19,143,174,60,74,105,69,195,30,49,219,138,16,168,66,136,145,31,84,41,173,126,124,212,172,143,254,124,216,80, 132,160,111,32,193,215,191,181,151,67,71,250,255,55,240,8,69,188,60,58,5,156,126,231,220,240,86,175,87,47,95,179, 98,26,121,10,132,109,51,130,97,74,126,244,63,142,242,15,255,116,242,132,105,202,47,3,103,38,243,189,92,28,92,184, 96,152,50,121,162,125,104,235,252,230,160,99,78,67,201,135,178,229,77,5,20,69,240,220,75,231,249,230,163,251,163,225, 112,234,1,178,92,241,187,28,185,58,185,114,124,56,154,174,57,221,21,89,190,97,77,149,40,47,115,217,34,200,49,138, 34,56,217,49,196,125,15,190,46,79,180,15,253,4,120,148,49,78,254,102,67,174,4,144,6,218,206,117,199,150,13,132, 146,245,155,214,87,227,113,229,61,36,238,85,131,162,8,66,131,73,30,120,120,47,191,123,225,220,203,192,127,32,139,253, 126,217,144,203,179,107,131,64,123,123,231,208,102,69,136,178,53,43,166,161,105,246,120,96,178,8,1,137,164,193,247,127, 212,198,147,63,63,113,202,48,228,159,1,135,114,245,253,92,31,94,60,107,24,178,231,240,177,208,230,210,18,135,119,233, 162,242,156,248,7,174,86,132,0,195,144,60,241,15,111,243,183,143,183,245,198,226,198,215,128,95,231,242,119,228,227,244, 234,177,100,202,72,30,56,220,127,77,117,149,199,49,127,94,240,170,216,42,156,107,4,150,31,227,169,103,58,249,230,35, 111,69,6,6,147,15,2,63,97,2,222,190,203,145,15,1,72,224,80,52,150,81,246,29,236,91,83,91,227,211,155,231, 150,218,34,24,7,163,142,175,103,126,221,197,253,223,218,27,191,208,19,123,4,248,33,121,88,45,205,215,249,245,12,176, 55,50,156,118,238,61,208,183,178,166,218,171,205,155,83,138,237,34,24,27,33,172,22,244,204,111,186,216,253,208,155,201, 115,231,163,127,7,124,151,60,237,155,200,103,0,131,20,240,70,56,146,210,95,223,223,187,124,90,165,91,111,158,83,106, 143,9,46,195,104,159,255,212,51,157,220,255,208,155,241,115,221,209,31,0,15,51,198,17,239,201,144,239,8,22,73,96, 79,100,56,45,247,236,189,184,210,227,210,28,11,90,202,112,232,170,237,39,120,15,138,34,72,38,77,126,242,179,19,124, 227,145,253,195,23,123,226,143,2,223,33,143,149,15,249,23,0,88,62,130,55,98,177,204,208,158,189,61,43,19,9,195, 179,100,97,57,30,183,102,139,96,132,209,121,254,99,143,183,241,253,31,181,245,133,172,1,223,15,40,192,118,185,66,197, 176,201,0,251,82,41,179,107,255,193,190,229,157,103,34,193,133,205,65,42,108,143,33,138,34,104,239,24,226,235,223,218, 203,255,252,249,201,83,177,120,230,171,192,19,20,102,123,92,193,4,0,214,244,229,136,97,200,125,199,79,12,206,222,127, 176,175,174,186,202,35,234,103,249,81,21,229,170,243,26,42,66,96,152,146,231,94,58,207,87,31,124,93,62,251,210,185, 151,51,150,147,231,215,228,120,170,119,57,138,17,197,234,12,240,194,249,11,49,239,139,175,118,207,75,167,77,199,188,166, 82,124,94,253,170,177,6,170,42,232,235,79,240,163,255,126,132,111,60,178,63,122,242,212,208,19,192,189,76,96,75,215, 164,211,82,164,50,24,4,158,139,70,51,239,188,190,183,167,229,208,209,254,242,234,233,30,102,206,240,162,170,202,135,86, 8,138,34,200,24,146,151,95,187,192,215,31,222,203,255,122,234,212,201,161,72,234,1,172,133,157,156,248,246,199,75,177, 4,0,214,224,240,128,97,200,87,58,78,71,188,207,191,124,126,118,127,40,233,152,53,211,71,121,153,139,15,83,168,1, 33,4,66,8,58,187,194,252,240,199,135,121,248,251,7,162,135,142,244,255,147,97,200,47,99,45,233,22,164,191,255,192, 180,21,187,112,70,240,1,55,43,138,248,179,249,205,193,37,159,251,204,60,109,231,142,58,166,79,115,143,236,236,185,50, 77,130,85,241,86,208,198,95,252,234,52,79,252,236,132,113,236,68,232,45,195,144,63,0,254,47,86,20,182,226,166,177, 216,9,120,79,90,106,129,59,92,78,245,206,165,139,202,235,111,253,212,28,101,123,107,45,211,43,221,0,19,222,121,92, 104,70,157,93,61,189,113,126,243,236,89,126,246,84,187,220,127,176,175,51,145,52,158,196,26,225,79,104,3,103,62,152, 74,2,24,69,5,230,1,183,185,93,234,45,139,22,148,207,250,216,13,245,202,13,215,213,82,87,235,67,211,20,166,226, 118,238,209,237,237,153,140,201,217,119,162,252,230,185,179,60,253,203,211,230,193,195,253,103,227,137,204,83,192,79,153,130, 209,83,166,162,0,70,209,128,22,224,19,186,174,220,220,88,31,152,219,186,169,70,223,209,58,147,37,11,203,9,150,58, 173,155,49,138,40,134,209,74,151,18,66,131,73,218,142,14,240,235,223,159,229,217,23,207,165,59,186,194,237,169,148,249, 52,240,115,172,104,93,147,222,189,147,151,60,20,59,1,89,160,0,117,192,14,33,216,89,90,226,92,189,120,126,89,112, 211,134,106,177,105,93,53,77,141,1,130,165,78,52,85,144,239,125,255,239,62,183,144,206,72,6,135,146,156,236,8,243, 242,171,221,188,248,106,183,60,124,108,32,20,26,76,190,46,37,207,0,191,197,154,242,78,169,22,255,190,60,21,59,1, 227,36,0,44,5,182,169,170,104,13,150,56,91,154,26,3,37,43,150,86,42,203,151,84,176,96,94,144,170,233,30,124, 62,29,151,99,196,185,244,135,243,1,35,255,120,23,163,66,121,255,42,165,53,120,251,195,121,4,172,240,171,195,195,25, 186,47,198,56,122,60,196,254,67,125,236,61,208,107,182,119,132,135,6,135,146,71,13,67,62,7,252,14,43,62,82,184, 216,5,149,45,87,154,0,70,81,176,14,123,46,0,214,1,107,221,110,109,113,176,196,81,89,87,235,247,54,53,6,148, 198,250,0,245,179,252,204,168,242,48,189,210,141,207,171,163,105,10,186,174,160,169,2,161,88,45,25,172,11,150,164,41, 201,24,214,61,59,233,140,73,52,154,230,98,111,156,243,221,49,78,159,137,208,209,21,166,189,35,108,158,62,19,137,14, 134,83,61,113,235,48,235,107,192,30,172,120,72,33,10,232,193,203,21,87,170,0,222,139,23,168,192,26,51,44,4,230, 10,65,147,219,165,213,185,92,106,192,227,214,92,193,82,167,51,224,119,104,126,191,46,60,110,13,93,83,70,47,86,36, 53,82,233,177,88,134,200,112,90,134,35,169,76,104,48,153,140,197,51,137,68,194,8,199,19,153,46,41,105,199,58,168, 218,134,213,167,247,82,220,216,6,57,225,195,34,128,247,162,97,137,194,15,76,195,186,66,125,26,86,248,23,31,214,97, 210,119,95,141,43,71,126,210,88,115,243,16,86,240,138,238,145,191,35,88,1,51,51,217,38,192,198,198,198,198,198,198, 198,198,198,198,198,198,198,102,10,242,255,1,73,55,77,63,249,154,219,213,0,0,0,37,116,69,88,116,100,97,116,101, 58,99,114,101,97,116,101,0,50,48,50,48,45,48,51,45,50,53,84,48,51,58,48,48,58,50,49,43,48,57,58,48, 48,37,63,130,7,0,0,0,37,116,69,88,116,100,97,116,101,58,109,111,100,105,102,121,0,50,48,50,48,45,48,51, 45,50,53,84,48,51,58,48,48,58,50,49,43,48,57,58,48,48,84,98,58,187,0,0,0,0,73,69,78,68,174,66, 96,130, }; const unsigned char Icon2x[9662] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,0,1,0,8,6,0,0,0,92,114,168, 102,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,5,26,105,84,88,116,88,77, 76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101, 103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84, 99,122,107,99,57,100,34,63,62,32,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100, 111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80, 32,67,111,114,101,32,53,46,54,45,99,49,52,53,32,55,57,46,49,54,51,52,57,57,44,32,50,48,49,56,47,48, 56,47,49,51,45,49,54,58,52,48,58,50,50,32,32,32,32,32,32,32,32,34,62,32,60,114,100,102,58,82,68,70, 32,120,109,108,110,115,58,114,100,102,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57, 57,57,47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35,34,62,32,60,114,100,102,58,68, 101,115,99,114,105,112,116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,32,120,109,108,110,115,58,120,109, 112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34, 32,120,109,108,110,115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114,103,47,100,99,47,101,108, 101,109,101,110,116,115,47,49,46,49,47,34,32,120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116, 116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104,111,116,111,115,104,111,112,47,49,46,48,47, 34,32,120,109,108,110,115,58,120,109,112,77,77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99, 111,109,47,120,97,112,47,49,46,48,47,109,109,47,34,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116,116, 112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,115,84,121,112,101,47,82, 101,115,111,117,114,99,101,69,118,101,110,116,35,34,32,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,61,34, 65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111, 115,104,41,34,32,120,109,112,58,67,114,101,97,116,101,68,97,116,101,61,34,50,48,50,49,45,48,56,45,50,55,84, 50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,120,109,112,58,77,111,100,105,102,121,68,97,116,101,61,34, 50,48,50,49,45,48,57,45,48,51,84,50,49,58,53,53,43,48,51,58,48,48,34,32,120,109,112,58,77,101,116,97, 100,97,116,97,68,97,116,101,61,34,50,48,50,49,45,48,57,45,48,51,84,50,49,58,53,53,43,48,51,58,48,48, 34,32,100,99,58,102,111,114,109,97,116,61,34,105,109,97,103,101,47,112,110,103,34,32,112,104,111,116,111,115,104,111, 112,58,67,111,108,111,114,77,111,100,101,61,34,51,34,32,112,104,111,116,111,115,104,111,112,58,73,67,67,80,114,111, 102,105,108,101,61,34,115,82,71,66,32,73,69,67,54,49,57,54,54,45,50,46,49,34,32,120,109,112,77,77,58,73, 110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,57,57,49,53,52,98,56,52,45,100,100,54,48, 45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,32,120,109,112,77,77,58,68, 111,99,117,109,101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,57,57,49,53,52,98,56,52,45,100,100,54,48, 45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,32,120,109,112,77,77,58,79, 114,105,103,105,110,97,108,68,111,99,117,109,101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,57,57,49,53,52, 98,56,52,45,100,100,54,48,45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34, 62,32,60,120,109,112,77,77,58,72,105,115,116,111,114,121,62,32,60,114,100,102,58,83,101,113,62,32,60,114,100,102, 58,108,105,32,115,116,69,118,116,58,97,99,116,105,111,110,61,34,99,114,101,97,116,101,100,34,32,115,116,69,118,116, 58,105,110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,57,57,49,53,52,98,56,52,45,100,100, 54,48,45,52,100,101,54,45,97,54,57,101,45,54,55,49,49,100,54,48,49,57,98,57,55,34,32,115,116,69,118,116, 58,119,104,101,110,61,34,50,48,50,49,45,48,56,45,50,55,84,50,48,58,49,49,58,52,52,43,48,51,58,48,48, 34,32,115,116,69,118,116,58,115,111,102,116,119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111, 116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,47,62,32,60,47, 114,100,102,58,83,101,113,62,32,60,47,120,109,112,77,77,58,72,105,115,116,111,114,121,62,32,60,47,114,100,102,58, 68,101,115,99,114,105,112,116,105,111,110,62,32,60,47,114,100,102,58,82,68,70,62,32,60,47,120,58,120,109,112,109, 101,116,97,62,32,60,63,120,112,97,99,107,101,116,32,101,110,100,61,34,114,34,63,62,126,10,193,94,0,0,32,74, 73,68,65,84,120,218,237,157,7,120,85,69,250,198,79,122,51,64,2,9,65,136,161,44,144,64,64,8,1,130,139,64, 32,148,16,52,20,19,66,2,1,87,141,96,89,89,117,109,8,130,178,128,168,43,118,212,85,97,117,45,232,95,220,181, 128,53,161,153,32,189,151,132,14,2,162,20,197,10,100,254,243,221,51,147,76,46,9,105,183,156,115,238,251,62,207,251, 60,130,64,206,61,231,251,126,119,206,204,55,223,104,140,49,13,134,97,207,52,110,2,12,3,0,48,12,3,0,48,12, 3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12,3,0,48,12, 3,0,48,12,3,0,48,12,91,29,0,144,169,228,195,237,47,28,200,29,36,28,40,28,160,252,154,254,76,4,183,47, 110,155,121,4,0,64,142,212,25,238,2,238,111,133,183,136,95,47,226,126,130,251,54,238,97,220,29,185,67,112,187,0, 0,200,98,241,36,124,150,123,21,247,73,229,247,42,51,65,226,83,238,185,220,185,220,93,197,72,2,2,0,32,19,170, 192,46,193,127,108,210,56,48,191,109,235,6,103,3,3,125,88,53,48,144,62,199,189,134,123,30,119,38,247,229,184,173, 0,0,100,30,253,153,251,43,53,169,189,189,189,142,253,109,82,231,229,59,86,103,94,248,124,113,26,251,215,211,125,216, 180,123,18,88,214,200,54,172,83,135,112,230,239,231,93,29,20,246,113,47,228,30,195,221,24,183,24,0,128,140,175,193, 226,155,188,44,145,27,134,250,111,89,186,104,232,246,211,251,39,48,213,39,74,114,89,225,167,233,236,229,167,250,176,219, 243,226,89,207,110,145,44,192,191,202,17,195,121,238,66,238,105,220,221,185,189,112,171,1,0,200,152,162,228,204,224,62, 160,36,240,133,132,43,155,44,63,188,53,231,172,61,8,84,31,223,61,142,45,125,111,40,155,113,95,34,75,29,24,205, 66,47,243,171,10,8,251,185,31,227,78,196,237,6,0,32,99,42,148,123,54,247,111,50,113,253,252,188,15,46,120,174, 239,186,75,65,192,126,148,240,225,91,67,216,29,19,227,89,199,216,176,170,96,176,135,123,22,119,28,110,57,0,0,25, 79,109,237,231,7,58,180,15,91,249,237,246,177,103,107,10,2,233,29,69,153,236,177,135,147,216,85,61,154,210,28,67, 101,48,88,161,233,43,11,193,184,237,0,0,100,172,215,130,60,77,175,25,176,37,107,64,128,247,158,207,254,47,109,71, 109,33,32,189,115,117,38,155,243,80,79,150,148,24,201,188,188,46,2,193,41,238,231,52,189,246,0,2,0,32,131,40, 134,123,185,146,168,191,229,229,198,22,212,21,2,210,219,11,51,216,244,123,187,177,22,151,135,84,54,42,88,201,125,13, 38,14,1,0,200,24,242,230,190,131,251,119,153,164,237,218,52,88,85,151,87,2,123,127,207,231,12,222,120,177,63,27, 148,220,162,178,87,132,245,220,57,220,126,0,0,0,0,185,95,61,52,125,54,223,150,160,129,129,190,187,87,127,49,124, 127,125,33,32,189,105,197,117,108,226,245,113,44,56,216,183,178,21,4,122,29,241,5,0,0,0,200,189,162,2,159,79, 101,114,242,119,249,211,175,207,239,191,222,81,16,32,31,220,146,205,230,76,235,193,46,111,118,209,235,193,94,1,2,31, 0,0,0,128,220,59,65,120,47,247,5,145,152,231,38,79,234,180,220,145,16,144,53,6,143,63,146,196,154,69,5,219, 131,96,51,119,42,0,0,0,64,238,213,104,238,95,69,82,150,166,167,198,228,159,218,55,161,212,209,32,248,174,56,151, 205,155,117,21,139,138,12,178,7,193,231,220,241,0,0,0,0,185,79,73,220,199,101,82,82,245,224,201,189,227,47,56, 26,2,100,62,233,104,91,57,104,216,192,95,133,192,31,220,79,114,55,2,0,0,0,200,61,162,194,161,98,77,41,26, 250,97,207,248,243,206,128,0,185,100,125,22,187,62,187,61,243,241,169,176,106,240,157,166,175,24,0,0,0,0,228,6, 69,105,122,99,17,91,66,182,140,9,45,60,94,156,251,187,179,32,64,94,253,197,8,150,210,183,185,253,107,193,18,77, 175,93,0,0,0,0,200,197,10,227,46,146,201,24,19,29,90,196,215,249,207,57,19,2,228,133,207,247,179,159,31,248, 73,211,235,22,124,0,0,0,0,114,173,26,106,122,151,33,253,117,32,54,108,165,179,230,4,84,31,216,156,205,114,179, 218,217,151,24,83,69,97,43,0,0,0,128,92,171,6,154,210,99,160,115,199,240,21,206,88,29,168,204,75,22,165,242, 42,197,134,42,4,104,47,67,30,0,0,0,64,174,85,19,117,78,96,120,90,203,124,87,0,128,124,108,231,56,118,243, 132,56,251,209,192,155,154,137,87,10,0,0,200,140,106,198,93,34,18,176,116,234,221,221,86,186,10,2,228,119,23,12, 100,77,35,130,236,75,138,19,1,0,0,0,114,157,218,104,250,18,157,109,205,190,54,205,69,28,181,100,72,157,138,20, 8,252,102,198,87,2,0,0,50,179,122,107,162,98,144,15,203,79,57,114,3,81,77,204,231,31,108,123,11,252,124,43, 52,53,125,73,211,15,76,1,0,0,0,200,5,162,178,225,82,77,236,34,116,196,86,226,186,76,16,218,189,18,172,214, 76,210,206,28,0,128,172,160,89,154,210,79,192,213,0,32,23,175,203,98,87,247,138,82,33,112,68,211,15,58,1,0, 0,0,200,201,162,194,156,207,100,242,229,77,136,43,112,7,4,104,115,209,95,114,218,219,47,21,14,2,0,0,0,200, 249,10,215,244,125,253,182,9,185,47,22,167,237,114,7,4,200,52,47,160,116,33,162,115,12,38,1,0,0,0,228,124, 245,212,244,163,197,88,96,128,79,49,95,183,255,197,93,16,248,247,11,201,204,238,56,180,105,0,0,0,0,57,95,83, 101,210,93,213,35,106,153,187,0,64,254,242,191,195,88,100,147,10,147,131,116,8,170,23,0,0,65,206,157,15,88,33, 18,174,116,225,11,253,214,187,19,2,212,143,48,38,250,50,21,2,243,53,189,25,42,0,0,65,78,82,75,238,31,41, 190,249,193,163,7,142,238,24,251,179,59,33,176,101,213,117,172,117,203,6,42,4,94,211,12,178,163,16,0,128,172,170, 219,101,194,245,239,211,188,192,157,0,32,239,94,59,154,118,48,170,16,88,104,132,145,0,0,0,89,85,148,92,95,139, 100,59,199,15,26,221,225,110,8,236,225,229,195,124,7,163,10,129,103,1,0,8,114,158,98,53,113,32,41,29,77,238, 170,173,195,213,65,32,182,93,35,21,2,79,2,0,16,228,60,205,145,201,54,227,129,196,85,238,6,128,60,203,208,110, 78,96,42,0,0,65,206,17,29,77,254,45,197,58,111,246,121,212,29,123,5,42,243,54,126,134,225,21,45,42,172,14, 76,2,0,32,200,57,186,94,38,218,136,97,173,242,141,0,0,242,218,252,145,172,73,120,160,218,134,124,16,0,0,65, 206,153,16,92,171,233,219,134,207,236,221,48,230,164,81,32,240,21,47,22,10,10,42,59,179,144,150,46,175,4,0,32, 200,241,74,149,163,128,212,148,104,195,140,2,100,247,97,101,239,192,65,205,133,91,137,1,0,200,147,180,92,36,217,217, 93,107,70,159,48,18,4,30,190,63,81,157,15,160,22,232,1,0,0,4,57,86,253,101,146,13,78,110,97,168,81,0, 121,66,118,59,251,146,97,0,0,130,156,49,10,160,227,199,15,109,205,254,201,72,0,56,81,146,203,122,245,104,170,66, 224,6,0,0,130,28,171,107,101,130,221,148,27,91,96,180,81,0,127,53,97,81,77,203,142,45,167,126,135,137,0,0, 4,57,78,180,29,119,59,197,190,175,143,215,97,87,28,49,86,91,127,194,123,12,250,150,55,26,165,38,39,13,1,0, 8,114,156,242,228,40,96,238,140,158,133,70,3,0,121,214,212,238,234,171,192,27,0,0,4,57,78,65,220,63,80,252, 71,69,4,175,53,34,0,168,229,248,144,1,21,206,29,200,6,0,32,200,113,122,90,36,214,133,13,5,35,15,25,17, 2,116,248,136,210,110,252,180,166,247,57,0,0,32,200,1,234,36,191,93,211,83,99,242,141,8,0,242,162,215,82,212, 179,8,169,211,145,55,0,0,65,142,81,161,166,111,18,58,98,132,173,194,85,57,111,124,156,250,42,112,59,0,0,65, 142,209,68,153,88,252,192,207,205,70,5,0,157,74,172,108,31,166,253,2,87,0,0,16,84,127,209,81,227,182,54,226, 189,147,162,10,140,10,0,242,71,111,15,81,95,5,62,1,0,32,200,49,178,157,40,196,55,227,28,255,97,207,248,243, 70,134,192,216,204,182,234,171,192,24,0,0,130,234,175,27,101,82,45,122,37,101,147,145,1,176,127,83,182,186,42,112, 92,115,64,129,16,0,0,225,53,128,47,5,106,6,221,32,100,239,87,159,237,171,142,2,30,7,0,32,168,254,162,227, 188,169,49,199,78,163,3,128,204,231,43,212,46,66,237,1,0,8,170,159,166,139,132,42,229,189,250,142,25,29,0,43, 151,92,75,75,151,18,2,31,2,0,16,84,63,37,201,97,245,148,59,187,172,48,195,40,96,252,152,10,189,3,134,0, 0,16,84,119,209,49,93,167,40,31,58,119,8,55,5,0,138,215,101,177,6,161,254,18,0,155,181,58,86,8,2,0, 16,164,139,214,214,153,191,191,247,62,51,0,128,60,237,158,4,117,20,144,1,0,64,80,221,53,69,206,3,24,173,95, 96,85,230,103,28,176,136,198,101,109,197,183,105,117,56,112,20,0,128,32,93,125,229,183,233,188,217,189,138,204,50,10, 152,57,165,66,223,128,28,0,0,130,234,166,96,77,148,5,167,13,140,206,55,11,0,104,159,64,84,100,89,113,208,110, 110,95,0,0,130,234,38,91,171,176,22,205,67,86,155,5,0,228,71,167,247,172,115,137,48,0,0,65,229,122,155,114, 130,247,227,59,100,38,0,28,223,61,78,45,17,94,11,0,64,80,61,39,2,247,111,26,115,218,76,16,120,224,206,174, 234,40,32,25,0,128,160,218,171,172,101,248,251,175,15,218,98,38,0,236,219,56,134,5,7,151,157,49,248,17,0,0, 65,181,87,7,9,128,25,15,36,174,50,19,0,200,55,142,139,149,0,40,21,159,5,0,128,160,90,40,72,36,15,203, 24,222,38,223,108,0,88,95,48,82,61,100,244,89,0,0,130,106,175,99,148,23,93,59,55,89,110,54,0,144,83,250, 54,87,187,8,7,3,0,16,84,59,125,77,121,17,209,56,104,189,25,1,240,250,252,100,117,50,112,28,0,0,65,181, 211,187,148,23,129,1,62,37,102,4,0,63,234,76,45,12,90,6,0,64,80,237,68,199,114,211,187,244,119,102,4,0, 121,242,164,78,234,40,32,14,0,128,160,154,235,31,34,113,206,25,249,172,128,234,38,3,149,14,194,51,1,0,8,170, 185,238,148,223,158,102,43,6,82,221,35,33,66,2,160,4,0,128,160,154,107,130,4,192,186,130,145,7,205,10,128,217, 211,122,168,175,1,9,0,0,4,213,76,89,50,113,120,239,189,61,102,5,192,206,111,70,171,53,1,143,2,0,16,84, 51,141,144,0,248,98,113,218,46,179,2,128,156,212,189,169,4,192,1,110,47,0,0,130,170,215,80,9,128,143,223,30, 178,205,204,0,176,219,38,220,13,0,128,160,234,53,64,38,205,123,11,140,125,82,80,117,230,45,206,85,0,60,8,0, 64,144,7,1,128,28,219,174,145,4,192,74,0,0,130,60,232,21,128,124,123,94,188,4,192,121,238,112,0,0,130,60, 100,18,144,252,223,255,12,86,95,3,50,1,0,8,186,180,44,177,12,40,253,93,113,46,11,9,241,147,0,120,21,0, 128,160,75,107,130,102,129,66,32,213,131,251,183,168,178,42,16,0,128,160,138,186,75,2,224,192,150,236,51,86,0,192, 67,247,118,83,95,3,154,1,0,16,84,181,102,137,68,249,195,172,155,129,236,189,100,81,170,10,128,81,0,0,4,85, 173,23,53,125,59,240,113,43,36,191,108,27,30,224,239,35,1,240,79,0,0,130,170,150,108,8,82,108,21,0,144,187, 119,45,219,29,248,13,0,0,65,85,171,80,51,113,75,176,170,124,219,77,29,37,0,254,224,246,7,0,32,168,114,153, 186,41,104,85,126,241,201,171,213,121,128,206,0,0,4,93,172,178,182,224,163,71,152,175,45,248,165,188,106,105,186,10, 128,177,0,0,4,93,44,83,31,12,114,41,159,224,205,66,253,253,188,47,234,15,0,0,64,80,185,202,142,6,251,224, 205,193,91,172,4,0,114,135,216,48,9,128,37,0,0,4,93,172,169,34,65,74,15,109,201,249,209,106,0,200,28,222, 90,2,224,48,0,0,65,23,107,17,229,132,159,159,247,65,171,37,63,249,193,187,19,212,179,3,131,1,0,8,170,168, 29,148,19,209,205,67,138,172,8,128,151,230,245,81,39,2,99,1,0,8,42,23,125,35,210,158,121,54,108,112,76,190, 21,1,176,244,189,161,42,0,82,1,0,8,42,87,178,76,142,103,30,237,189,218,138,0,216,185,58,83,5,192,45,0, 0,4,85,50,1,184,123,109,214,247,86,4,0,223,220,68,37,206,18,0,115,1,0,8,42,215,82,202,135,0,127,239, 189,86,76,126,233,182,173,27,74,0,188,3,0,64,144,46,31,238,211,148,15,157,59,134,175,176,50,0,122,245,40,59, 43,224,75,0,0,130,116,245,146,239,198,15,222,149,96,105,0,164,13,186,66,2,96,19,0,0,65,186,30,150,239,255, 188,151,254,49,43,3,32,55,171,157,4,192,17,0,0,130,116,209,30,121,22,18,228,187,195,202,201,79,158,60,169,147, 4,192,111,238,2,128,15,226,13,50,144,34,184,47,80,46,12,25,16,157,111,117,0,60,124,127,162,186,20,232,227,14, 0,248,35,230,32,3,233,38,205,66,39,1,85,231,167,102,95,165,2,32,192,29,0,8,64,204,65,6,18,205,134,83, 15,192,99,39,247,142,191,96,117,0,204,127,162,66,99,144,32,119,0,32,16,49,7,25,104,248,127,142,146,161,119,175, 168,2,171,39,63,249,213,103,251,170,0,8,118,7,0,130,16,119,144,65,116,139,76,134,247,95,31,184,217,19,0,240, 198,139,253,85,0,92,230,14,0,4,35,238,32,131,104,53,37,130,143,143,215,17,171,156,1,80,157,23,189,150,162,2, 32,20,35,0,200,83,213,73,38,194,240,180,150,249,158,144,252,149,28,22,218,16,0,128,60,85,207,136,36,184,176,97, 217,168,195,0,0,38,1,33,207,17,125,9,157,164,36,136,138,8,94,235,41,201,143,87,0,8,210,117,179,76,130,199, 31,73,42,244,36,0,24,97,18,16,35,0,200,157,242,210,68,235,47,95,95,239,67,223,151,228,158,243,36,0,188,242, 140,251,151,1,81,8,4,185,83,195,101,2,228,77,136,43,240,164,228,55,74,33,16,21,95,156,17,23,80,128,120,132, 92,172,149,20,123,94,94,218,169,195,91,115,206,122,26,0,140,80,10,236,43,18,95,94,68,50,98,18,114,145,82,100, 220,121,194,198,159,202,60,227,62,247,111,6,34,29,229,254,73,92,196,74,196,37,228,34,21,138,111,255,179,187,214,140, 62,225,137,0,184,99,98,188,76,254,95,233,134,184,19,0,249,10,137,6,33,54,33,39,43,77,198,155,85,219,126,215, 196,99,51,219,86,56,29,200,93,0,216,162,233,235,176,63,138,139,89,195,237,141,24,133,156,36,138,173,245,226,219,255, 244,190,141,217,167,60,21,0,67,7,150,181,4,219,232,78,0,216,190,253,155,52,14,84,71,1,19,16,167,144,147,116, 163,140,179,235,210,91,121,236,183,63,57,169,123,89,83,208,47,220,9,128,119,233,103,243,22,197,191,208,70,12,113,65, 199,184,27,32,86,33,7,43,84,188,114,218,54,253,28,221,49,246,103,79,6,192,159,90,53,48,68,91,240,39,232,103, 7,6,250,208,172,228,74,101,20,48,11,241,10,57,88,143,203,248,154,61,173,199,215,158,156,252,118,7,131,60,234,78, 0,220,46,31,10,159,141,45,109,212,208,127,147,248,245,239,220,29,16,179,144,131,68,59,254,254,160,216,226,49,182,217, 83,182,252,214,240,104,176,73,238,4,192,48,121,33,159,47,78,99,75,23,13,221,174,137,131,25,53,125,89,16,19,130, 80,125,69,205,103,139,68,76,157,251,124,241,208,157,158,156,252,70,59,28,52,94,94,8,213,38,211,197,37,95,221,172, 64,185,184,91,17,191,80,61,53,89,198,211,224,228,22,249,158,158,252,228,23,159,188,218,48,199,131,135,200,11,153,118, 79,130,237,226,104,114,198,207,207,251,160,248,125,90,30,140,65,12,67,117,84,43,77,20,154,249,251,123,239,63,182,115, 220,47,0,192,4,54,229,174,174,50,249,75,53,177,43,215,157,7,131,124,75,63,63,107,100,155,178,11,92,240,92,223, 117,226,226,232,15,46,215,112,134,0,84,123,81,169,249,42,25,232,175,207,239,191,30,201,175,59,35,189,181,4,192,33, 121,179,220,9,0,219,105,172,157,58,132,87,184,200,158,137,145,203,148,97,202,20,196,51,84,75,77,151,241,211,59,41, 170,0,137,95,238,184,246,97,50,175,62,54,2,0,230,218,134,104,126,222,236,187,226,220,178,139,164,225,26,95,170,40, 17,23,74,51,184,61,16,211,80,13,117,149,38,218,124,243,37,230,226,99,187,198,253,138,196,215,77,57,70,185,38,242, 106,182,17,0,48,78,146,186,240,211,244,10,23,91,240,191,97,197,154,190,89,129,254,255,1,238,38,136,109,168,26,53, 230,222,39,98,230,183,47,22,167,237,66,226,151,123,229,146,107,213,9,192,108,35,0,224,74,121,65,47,63,213,231,162, 11,206,203,141,85,87,5,62,195,124,0,84,205,123,255,151,50,94,110,189,161,195,50,36,189,93,35,144,127,86,88,1, 136,55,2,0,2,196,16,159,253,245,230,248,74,47,186,67,108,24,170,4,161,154,104,174,140,147,246,127,106,180,10,9, 127,177,111,187,169,163,204,35,42,182,243,55,2,0,72,182,99,153,147,18,35,43,189,232,111,183,143,61,75,239,114,202, 210,69,22,98,29,178,83,182,92,57,10,10,242,221,229,233,181,254,85,57,177,75,132,4,64,161,122,243,220,13,128,39, 233,26,2,252,125,24,159,176,169,244,194,139,62,27,190,143,182,112,106,229,77,12,122,35,230,33,161,62,154,126,206,189, 173,197,215,154,47,71,30,64,178,95,108,62,177,174,78,0,62,110,36,0,100,200,161,219,167,255,55,180,202,15,240,214, 191,250,111,148,15,154,251,123,238,118,136,125,143,87,27,238,239,228,106,209,194,23,250,97,189,191,10,127,252,206,16,245, 253,127,132,145,0,112,185,188,176,135,239,79,188,116,21,211,157,93,86,104,229,69,66,244,90,16,133,28,240,88,81,220, 236,145,175,134,15,221,211,109,37,18,189,106,79,253,123,130,10,128,40,35,1,64,147,75,55,169,3,163,171,253,32,233, 169,49,106,3,145,45,98,233,7,242,44,209,146,240,86,25,7,163,174,105,133,58,255,106,60,40,185,5,83,190,56,53, 163,1,96,1,93,71,232,101,126,236,68,73,110,117,251,153,75,123,36,68,168,149,130,27,184,195,144,19,30,163,134,154, 222,62,206,246,252,169,106,20,9,126,105,31,223,61,142,133,132,248,201,124,121,197,136,0,24,35,31,40,189,171,84,247, 129,78,238,29,127,161,67,251,10,203,131,171,68,96,64,214,86,35,238,175,229,115,239,24,23,182,130,98,1,73,126,105, 127,240,198,32,117,248,127,157,17,1,16,174,137,94,0,127,155,212,169,70,31,234,135,61,227,207,243,214,70,95,43,31, 108,157,134,106,65,43,139,98,100,181,124,222,49,209,161,69,158,118,164,151,3,214,255,207,139,251,104,56,0,104,98,109, 146,197,199,133,215,124,104,83,156,251,123,203,152,208,66,187,57,129,102,200,21,75,78,248,109,147,207,185,85,76,131,66, 122,246,72,238,154,57,182,93,35,153,31,43,42,187,185,70,1,192,52,177,150,203,118,20,101,214,248,195,209,72,192,174, 90,176,4,75,132,150,82,123,101,182,223,54,236,167,103,142,196,174,153,183,21,102,168,195,255,41,70,6,64,162,86,126, 92,115,109,27,29,150,210,182,79,229,131,254,192,221,23,185,99,122,245,210,202,215,249,89,247,174,17,203,240,206,95,59, 63,58,189,167,10,128,174,70,6,128,151,92,14,252,115,207,168,186,116,59,45,29,158,214,146,150,8,101,157,0,21,13, 161,108,216,188,202,214,202,11,191,74,177,212,87,55,247,236,22,41,147,127,143,200,49,195,2,128,100,219,208,225,237,237, 85,171,215,128,10,5,15,119,119,163,215,129,223,181,242,189,3,79,105,250,78,49,200,28,162,29,159,211,21,144,255,62, 237,239,40,242,169,235,240,159,94,169,181,106,54,210,25,9,0,101,175,1,115,30,234,89,231,15,78,45,160,148,189,3, 114,43,49,86,8,140,47,58,54,190,108,75,47,127,134,39,169,4,28,201,92,55,207,156,210,93,29,254,119,49,3,0, 72,182,157,127,85,237,14,172,169,87,127,49,124,127,96,160,239,110,229,6,236,231,238,137,28,51,172,168,147,143,108,8, 107,219,213,135,141,61,245,115,194,149,77,100,236,239,186,212,141,55,26,0,102,203,213,128,13,203,70,213,111,7,20,111, 7,21,223,33,124,133,2,1,106,21,53,135,219,15,249,102,168,33,255,189,154,232,11,161,137,253,252,216,210,91,63,175, 249,106,132,58,252,159,105,38,0,180,151,239,127,119,222,210,217,33,55,35,111,66,92,129,50,161,36,215,67,91,34,247, 220,46,106,221,189,74,121,46,191,222,150,23,143,210,94,7,152,26,236,104,118,253,255,205,2,0,146,109,93,191,105,68, 80,181,123,3,106,234,101,31,93,91,76,195,74,229,166,252,44,190,121,208,102,204,245,162,83,159,242,180,242,163,225,233, 188,186,18,244,240,115,140,41,103,40,119,196,189,45,168,238,97,24,17,0,227,101,96,252,231,165,254,142,107,138,192,95, 9,6,38,183,160,27,114,65,1,1,149,19,119,68,78,186,76,212,139,78,173,222,44,229,239,170,203,49,228,119,156,23, 62,223,79,253,246,207,49,35,0,232,196,146,147,116,109,180,141,209,225,55,136,55,142,224,221,81,14,40,55,233,119,49, 247,16,138,252,116,154,104,179,214,99,234,187,62,157,216,243,198,139,3,54,32,105,29,235,148,190,205,101,92,159,226,14, 54,35,0,72,207,105,250,121,238,245,158,12,172,162,69,210,47,162,112,232,15,5,4,39,184,239,192,107,129,195,135,251, 185,220,199,212,201,88,170,220,164,126,143,72,88,199,122,93,254,72,91,29,141,184,207,79,215,228,1,25,21,0,29,229, 100,224,77,185,177,206,60,45,117,7,29,27,173,4,39,121,45,247,16,228,110,189,53,148,123,189,122,111,195,26,249,111, 194,41,189,206,243,13,99,99,213,179,255,98,205,12,0,210,39,98,77,152,237,89,159,229,212,27,247,236,220,222,171,125, 125,189,15,217,129,128,222,85,175,65,30,215,90,189,197,228,83,217,189,228,35,185,163,84,165,73,37,219,72,84,231,120, 239,134,49,44,56,216,87,222,243,255,214,244,97,25,25,0,3,100,0,61,120,119,130,211,111,32,77,68,141,24,214,42, 159,175,159,158,177,3,1,29,82,122,173,24,206,66,85,15,245,211,229,10,142,86,94,205,119,250,186,244,86,249,56,157, 215,249,190,111,114,23,53,102,251,88,1,0,36,106,244,193,34,26,7,86,217,54,220,9,36,61,153,154,18,77,32,56, 107,7,130,157,98,249,42,8,249,94,97,194,246,102,77,175,54,83,19,255,167,97,131,99,242,247,109,204,62,133,228,116, 65,219,111,158,27,145,77,202,150,254,214,212,230,1,26,29,0,57,50,168,158,152,153,228,210,155,186,123,109,214,247,131, 147,91,228,219,237,43,96,98,133,130,54,25,117,242,224,196,239,44,38,153,78,218,37,254,41,130,103,241,218,209,63,32, 49,93,231,57,211,122,168,241,153,97,37,0,80,217,174,237,164,224,102,81,193,46,27,5,168,62,180,53,251,39,62,17, 89,224,235,227,117,216,14,4,114,158,96,162,166,111,100,177,186,34,185,111,209,148,214,92,210,52,127,66,103,57,30,222, 154,131,153,125,23,155,191,186,170,133,63,59,107,187,138,101,116,0,104,98,25,73,223,37,200,73,231,174,27,77,61,232, 230,206,232,89,24,21,17,188,214,174,152,72,246,91,163,93,135,55,106,214,218,121,72,96,187,137,251,115,241,25,213,207, 124,33,170,105,240,26,222,192,165,16,253,249,220,103,58,79,67,121,38,181,238,129,97,6,0,16,209,182,211,181,54,9, 15,100,71,182,229,184,253,166,243,218,132,195,116,70,1,159,221,62,82,201,168,224,130,248,150,156,206,157,100,178,186,2, 186,86,234,196,51,67,211,207,109,180,7,29,205,232,31,161,26,138,141,43,174,59,130,4,116,175,41,23,104,126,76,60, 155,173,117,153,168,54,3,0,52,65,54,219,7,157,126,111,55,67,61,132,165,139,134,110,167,194,22,94,128,113,172,18, 24,144,127,20,223,160,211,197,178,162,145,90,152,7,139,101,59,218,23,241,161,166,183,83,187,232,51,120,121,121,253,64, 37,187,239,45,72,217,132,165,60,227,120,202,93,93,213,231,52,170,46,1,96,22,0,16,217,54,106,226,0,145,93,107, 70,27,238,97,80,191,186,119,94,29,176,145,38,14,121,237,194,78,173,188,171,13,171,228,117,97,7,247,59,154,222,168, 145,150,24,59,56,121,117,33,72,252,140,116,241,51,23,137,107,56,95,197,53,150,134,4,249,238,24,50,32,58,159,146, 30,189,248,140,231,221,107,71,219,114,65,60,175,205,117,93,166,54,11,0,72,41,50,64,175,207,110,111,248,7,180,189, 40,243,24,157,103,72,61,9,120,221,251,190,42,18,205,222,71,53,125,131,210,123,220,47,104,250,94,238,191,137,121,144, 12,225,65,226,94,164,136,255,150,191,63,94,252,217,153,226,239,190,39,38,41,143,214,228,103,7,248,123,239,237,204,175, 245,193,187,18,86,236,92,157,121,28,73,102,108,231,100,180,85,159,223,160,186,38,149,153,0,80,86,29,72,245,206,5, 31,94,99,170,7,198,71,45,39,230,205,238,85,68,203,100,45,154,135,84,86,121,232,50,251,249,121,31,164,107,160,107, 121,102,206,159,139,104,201,19,73,101,30,47,255,248,90,181,230,127,113,125,18,202,108,0,136,149,27,120,248,123,183,233, 31,228,129,45,217,103,62,120,115,240,150,25,247,39,174,204,24,222,38,255,202,78,225,203,35,26,7,173,167,253,241,252, 1,83,75,236,115,117,72,240,115,244,119,249,191,81,76,255,86,215,206,77,150,211,191,61,227,129,196,85,244,179,14,109, 201,249,17,73,100,94,243,57,24,214,171,71,83,117,39,107,91,79,2,0,105,158,12,246,5,207,245,179,252,3,223,191, 105,204,105,222,226,233,224,215,159,166,239,165,9,71,50,205,53,144,229,175,233,255,209,159,33,160,32,73,172,237,151,230, 245,81,97,63,183,190,201,100,70,0,208,105,192,182,3,35,162,34,131,120,130,100,35,48,96,143,217,240,163,44,251,209, 220,78,3,79,4,0,105,156,164,96,110,86,59,4,7,236,17,206,26,213,70,253,246,207,116,68,34,153,21,0,164,255, 137,250,115,219,17,200,8,16,216,202,254,240,173,33,106,167,223,143,29,149,68,102,6,64,75,238,159,232,51,180,105,217, 128,186,252,32,80,96,203,214,251,183,188,34,84,38,63,109,87,143,6,0,116,77,150,67,162,137,215,199,33,88,96,171, 119,250,33,223,234,200,4,50,59,0,124,100,19,10,26,30,189,187,96,32,2,6,182,148,223,254,215,0,117,232,95,224, 232,198,52,102,7,0,169,149,24,22,217,102,72,141,88,38,12,195,117,113,241,186,44,181,209,7,117,249,141,113,116,242, 88,1,0,21,86,5,168,45,50,21,75,32,128,96,179,23,252,12,238,223,66,29,250,143,113,70,226,88,5,0,164,55, 141,208,55,0,134,157,176,207,127,161,179,146,198,74,0,104,164,233,167,0,51,63,95,111,182,100,81,42,2,9,54,237, 146,31,223,43,34,147,191,196,17,5,63,158,0,0,82,23,238,95,232,115,209,187,211,142,162,76,4,20,108,42,111,43, 204,80,171,253,126,229,238,230,204,132,177,26,0,42,204,7,116,239,26,193,190,43,206,69,96,193,166,48,29,236,153,148, 24,169,14,253,39,56,59,89,172,8,0,210,75,242,38,254,37,167,61,130,11,54,133,199,141,174,176,199,255,89,87,36, 138,85,1,224,167,41,135,84,204,156,210,29,1,6,27,218,211,238,73,176,239,54,237,15,0,212,79,205,184,15,200,6, 34,255,126,33,25,129,6,27,210,180,173,93,105,240,65,237,231,155,187,42,73,172,12,0,82,71,81,64,193,120,131,12, 246,217,251,105,8,56,216,88,77,101,223,77,181,197,166,82,231,223,217,149,9,98,117,0,104,162,95,218,31,178,82,144, 142,80,70,224,193,70,240,55,95,142,96,141,195,3,213,238,62,253,93,157,28,158,0,0,210,13,242,253,234,242,102,33, 108,211,138,235,16,128,176,91,189,245,235,12,22,221,252,50,245,56,239,9,238,72,12,79,1,0,105,154,132,64,107,190, 125,120,231,55,216,51,0,187,199,84,159,162,108,239,37,223,239,174,164,240,36,0,144,102,203,155,222,182,117,67,91,111, 117,4,36,236,74,151,172,207,98,177,109,27,169,201,255,15,119,38,132,167,1,192,75,172,175,218,110,126,231,142,225,108, 15,127,32,8,76,216,85,187,251,226,227,194,213,228,127,218,221,9,225,105,0,144,16,120,89,62,132,118,109,26,162,100, 24,118,186,105,155,122,92,251,48,251,13,62,222,0,128,123,68,141,68,94,83,231,4,182,172,194,196,32,236,28,211,164, 115,76,244,101,106,242,191,170,25,228,208,88,79,5,128,28,9,60,41,31,74,115,190,58,176,22,75,132,176,131,205,207, 107,176,173,60,41,201,255,188,17,190,249,1,128,114,205,144,15,39,60,44,0,219,136,97,135,249,243,197,105,182,35,237, 149,228,159,99,180,224,7,0,116,77,149,15,41,48,208,135,45,124,190,31,2,24,174,151,95,125,182,175,90,225,87,234, 206,165,62,0,160,102,186,94,86,12,82,19,198,251,38,119,65,32,195,117,50,117,164,82,106,251,233,124,199,60,163,6, 61,0,112,113,217,240,25,57,26,152,144,221,14,253,4,224,26,251,248,238,113,246,91,122,105,31,202,0,35,7,60,0, 112,177,226,53,209,90,140,220,165,83,99,172,16,192,53,170,238,163,6,52,74,242,211,174,190,43,141,30,236,0,64,229, 186,156,187,72,62,76,106,47,246,9,38,7,225,75,244,240,179,155,236,91,197,29,101,134,64,7,0,170,86,0,247,124, 249,80,169,73,227,172,169,221,209,114,28,174,208,186,155,186,247,42,13,60,101,39,31,127,179,4,57,0,80,189,198,114, 255,44,31,112,242,213,151,179,157,171,81,57,136,178,222,44,251,190,253,212,192,243,47,102,11,110,0,160,102,162,206,172, 251,212,87,130,69,175,165,32,17,60,212,111,189,60,192,126,200,79,173,187,187,152,49,176,1,128,154,171,33,247,27,242, 161,211,82,97,222,248,56,156,74,236,65,166,83,122,169,201,172,146,248,178,166,191,129,89,131,26,0,168,189,50,184,79, 202,0,160,125,221,139,95,31,132,4,177,184,63,126,103,8,251,83,171,6,106,226,159,17,175,135,166,22,0,80,55,181, 228,94,161,142,6,198,102,182,101,251,55,101,35,89,44,230,189,27,198,176,172,81,109,236,191,245,151,113,95,97,133,64, 6,0,234,46,218,208,241,87,238,159,212,185,129,87,158,233,139,196,177,200,12,255,203,79,245,81,79,233,33,255,200,125, 155,102,160,205,60,0,128,49,106,6,222,87,191,33,18,187,68,216,54,130,32,145,204,233,101,31,93,195,122,245,104,106, 255,173,255,145,85,190,245,1,0,231,40,155,251,184,12,24,170,5,31,63,166,157,109,185,8,73,101,158,166,29,244,42, 167,212,241,147,143,114,103,90,53,104,1,0,199,170,17,247,19,154,216,84,68,110,16,234,111,59,245,229,200,182,28,36, 153,65,125,152,63,155,41,119,117,101,151,133,248,169,137,255,27,247,163,102,158,225,7,0,220,167,182,220,139,212,33,36, 245,127,159,126,111,55,219,82,18,146,206,56,203,122,180,115,175,105,68,144,253,112,255,115,238,56,79,8,84,0,192,185, 26,204,189,81,13,174,168,200,32,54,119,70,79,118,108,23,234,7,220,101,170,221,168,34,241,215,115,167,120,82,128,2, 0,206,23,181,30,187,134,123,131,26,108,84,73,70,61,7,208,149,216,117,166,123,77,163,176,168,166,193,246,137,191,141, 59,215,74,179,251,0,128,49,151,13,169,136,104,151,26,124,1,254,62,44,107,100,27,219,49,81,72,82,231,120,227,242, 81,108,226,245,113,44,40,200,215,62,241,247,106,122,179,14,31,79,13,74,0,192,245,242,229,206,226,94,171,6,35,205, 60,15,236,215,156,189,62,63,153,157,40,65,19,146,250,154,238,33,157,8,157,210,183,185,253,172,62,249,27,49,179,239, 227,233,193,8,0,184,87,189,185,63,212,244,158,113,101,1,74,5,69,244,141,85,248,105,58,146,185,150,166,195,95,39, 79,234,100,187,135,118,73,95,42,38,247,174,65,216,1,0,70,83,7,77,223,71,126,74,13,90,42,49,166,46,51,179, 249,132,213,246,194,12,36,120,21,222,198,239,205,63,30,236,110,43,192,162,123,102,151,248,180,111,227,105,79,153,213,7, 0,204,173,32,49,25,181,220,46,136,109,195,216,164,238,77,109,43,8,128,129,126,186,238,156,135,122,178,164,196,200,202, 146,158,190,237,11,184,115,184,3,17,86,0,128,25,21,171,233,7,71,22,219,195,128,220,33,54,140,253,245,230,120,246, 191,55,7,123,68,227,82,106,184,249,193,27,131,216,109,55,117,180,63,92,83,53,77,176,62,162,233,117,24,16,0,96, 25,37,104,122,85,218,222,202,2,63,132,87,176,13,25,16,205,30,226,75,92,116,176,137,21,106,12,104,173,158,250,48, 78,253,123,2,27,148,220,130,5,7,251,86,149,244,116,79,232,212,231,174,8,19,0,192,19,68,221,137,166,112,175,228, 62,95,89,82,248,251,121,179,158,221,34,109,223,150,47,205,235,195,86,45,77,55,244,202,2,141,96,86,46,185,150,189, 248,228,213,236,214,27,59,218,230,61,252,42,246,217,83,125,78,124,246,41,2,140,16,0,224,177,10,211,244,229,44,58, 108,178,164,138,132,177,153,18,170,35,127,109,200,28,222,218,86,247,78,96,88,250,222,80,151,245,55,164,237,181,244,179, 232,103,82,162,211,53,100,164,183,182,189,202,92,34,217,165,233,53,232,21,77,175,163,8,195,99,7,0,160,202,69,173, 168,71,113,255,83,211,219,154,255,81,77,98,233,199,161,241,35,172,232,152,116,218,2,155,54,232,10,219,225,22,180,148, 246,200,3,137,108,222,172,171,216,252,39,174,102,11,158,235,103,51,117,63,162,119,113,50,253,183,252,125,250,51,244,103, 233,239,220,49,49,222,246,111,208,191,69,19,151,109,91,55,180,21,60,213,228,90,196,53,23,137,207,48,82,51,73,123, 109,0,0,0,48,162,252,184,59,139,217,112,154,67,88,194,125,168,134,137,232,10,31,228,254,68,211,15,205,204,17,215, 234,135,199,6,0,64,206,21,45,55,210,186,248,80,238,91,184,31,227,126,155,251,43,238,205,220,71,52,125,59,108,93, 19,251,55,241,111,108,18,255,230,91,220,115,197,207,74,21,63,27,203,115,0,0,100,112,249,136,68,37,96,4,115,135, 10,55,18,150,191,14,22,127,38,80,67,121,45,0,0,195,176,181,141,155,0,195,0,0,12,195,0,0,12,195,0,0, 12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0,12,195,0,0, 12,195,0,0,12,195,38,241,255,3,73,49,223,76,174,54,46,60,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Logo1x[11533] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,94,0,0,0,85,8,6,0,0,0,1,155,140, 109,0,0,0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0,0,32,99,72,82,77,0,0,122,38,0,0,128, 132,0,0,250,0,0,0,128,232,0,0,117,48,0,0,234,96,0,0,58,152,0,0,23,112,156,186,81,60,0,0,0, 9,112,72,89,115,0,0,0,96,0,0,0,96,0,240,107,66,207,0,0,0,7,116,73,77,69,7,228,8,10,18,21, 15,166,100,212,10,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,43,252,73,68,65,84,120, 218,237,93,7,84,84,71,23,126,219,119,217,66,89,58,75,239,189,72,17,193,130,2,162,8,42,96,3,1,177,199,168, 81,163,177,229,55,246,168,137,137,189,151,104,140,37,246,216,176,165,153,24,75,236,198,196,222,59,29,236,194,252,115,223, 190,85,68,80,145,89,88,240,125,231,220,99,52,176,251,222,148,111,110,31,138,98,193,130,5,11,22,44,88,176,96,193, 130,5,11,22,44,88,176,96,193,130,5,11,22,44,180,7,14,22,46,35,2,44,150,88,172,176,40,177,136,216,225,97, 193,130,5,11,237,145,47,64,129,101,57,135,195,57,169,52,20,237,183,183,149,111,83,200,133,115,241,191,125,130,37,10, 139,45,75,198,44,88,176,96,65,158,128,221,176,124,105,109,37,189,52,168,143,247,211,21,243,35,208,148,49,33,40,35, 217,245,65,131,96,179,139,230,166,146,141,92,46,103,0,254,25,127,44,18,118,200,88,176,96,193,130,12,120,88,66,12, 244,133,171,123,164,185,101,255,123,176,253,211,252,171,93,208,197,99,157,208,206,245,45,209,248,145,65,37,45,34,173,239, 90,154,235,109,225,112,168,174,248,103,173,75,105,205,44,88,176,96,193,162,10,0,215,67,255,144,122,166,23,118,172,109, 241,184,240,90,70,73,225,245,12,4,114,243,76,103,180,107,67,75,52,168,143,207,51,31,79,163,211,2,1,247,115,252, 179,78,44,1,179,96,193,130,69,213,1,65,183,72,59,27,249,129,197,51,27,63,200,187,210,165,4,11,2,13,24,8, 24,254,251,196,190,68,90,11,246,247,49,62,199,231,115,135,226,159,183,96,135,141,5,11,22,44,170,14,111,19,165,120, 231,140,73,97,69,185,151,187,20,3,225,106,164,224,90,6,45,39,255,72,66,195,7,250,61,119,180,87,252,133,127,62, 129,98,3,113,44,88,176,96,81,101,56,25,25,138,182,205,250,42,172,72,163,249,150,37,96,248,243,231,205,173,80,82, 188,67,129,76,42,152,77,169,51,33,88,176,96,193,130,69,21,224,106,110,170,247,243,202,133,77,31,98,162,125,141,124, 65,192,5,113,227,159,20,52,121,116,72,137,131,157,226,0,254,157,8,138,245,253,178,96,193,130,69,149,16,228,230,108, 112,252,247,109,113,143,53,90,110,89,1,31,48,200,214,213,49,40,188,190,249,13,252,59,221,40,117,129,6,11,22,44, 88,176,168,44,56,106,221,53,49,42,66,117,227,210,241,78,207,242,175,150,79,190,26,237,247,216,111,137,40,161,149,125, 129,128,207,29,65,177,185,191,44,88,176,96,241,222,224,115,185,156,241,195,7,250,229,99,130,45,174,136,120,53,190,223, 11,71,59,162,140,20,215,71,34,17,111,2,254,93,41,59,124,44,88,176,96,241,126,176,180,180,144,254,188,115,125,203, 199,154,212,178,55,145,239,213,147,201,168,71,186,219,99,161,144,55,158,213,124,89,176,96,193,226,253,145,144,208,202,254, 206,157,179,169,207,193,167,251,46,228,155,222,201,229,33,143,199,129,124,95,62,59,124,44,88,176,96,81,121,232,41,228, 194,85,107,22,55,123,244,54,173,87,67,190,231,254,238,128,226,91,216,230,225,223,77,141,111,201,102,155,177,96,193,130, 197,251,32,166,77,75,187,91,119,177,214,251,54,226,165,3,110,152,124,15,255,220,22,133,4,154,94,193,191,27,198,230, 153,177,96,193,130,69,229,33,83,26,137,55,209,253,28,222,65,235,213,100,59,108,248,62,26,217,168,100,191,80,234,30, 192,44,88,176,96,193,162,146,232,218,191,151,87,94,254,213,46,37,239,66,188,26,25,51,60,176,68,44,226,77,161,88, 127,47,11,22,44,88,84,26,142,1,62,198,167,206,31,233,248,236,109,65,182,151,69,22,25,232,202,137,100,20,27,109, 147,133,127,191,57,151,203,58,29,88,176,96,193,162,50,224,203,164,130,239,54,126,31,253,206,238,6,141,203,1,170,219, 84,150,210,93,248,51,140,216,97,100,193,130,5,139,202,161,215,136,129,254,249,133,21,244,112,168,72,114,46,165,163,126, 61,61,159,194,239,27,232,179,13,205,88,176,96,193,162,50,168,31,23,99,123,227,222,249,180,231,149,33,94,72,49,251, 107,87,27,228,234,108,112,152,98,123,249,178,96,193,130,69,165,96,225,229,110,248,247,185,195,29,158,191,169,127,67,69, 50,164,159,239,115,252,25,31,201,229,108,47,29,22,44,88,176,120,87,72,44,204,244,126,218,183,61,254,73,69,93,203, 222,148,219,251,199,142,120,228,96,167,216,71,169,175,150,103,193,130,5,11,22,239,0,142,88,204,155,187,110,89,212,163, 202,4,216,52,146,125,49,29,26,233,60,196,159,19,207,225,84,75,134,3,124,9,220,150,220,6,190,83,135,36,14,75, 12,165,238,99,28,130,197,7,139,7,22,27,44,50,74,183,83,239,96,76,193,100,209,199,226,192,60,183,47,150,250,204, 251,180,32,48,62,173,177,180,100,190,163,170,128,171,173,132,88,140,177,56,98,241,100,158,23,198,189,9,51,15,213,49, 215,141,176,248,49,227,165,194,34,166,170,175,135,181,102,12,76,177,184,96,241,198,82,143,153,175,24,230,25,227,117,84, 96,45,52,99,198,235,195,4,159,207,165,184,28,206,132,165,179,154,20,23,221,232,90,105,226,5,178,94,179,184,25,50, 208,23,46,161,212,55,29,107,27,6,98,125,227,223,28,35,146,158,185,181,72,127,172,75,226,26,147,246,208,37,42,165, 200,49,162,93,190,109,104,203,28,11,223,134,247,148,78,62,231,21,150,14,127,8,165,250,235,57,60,222,56,252,252,157, 24,162,208,171,193,105,23,48,68,209,24,220,68,92,190,112,134,88,161,220,170,175,114,250,203,216,217,255,178,165,111,163, 123,118,13,90,229,58,53,109,95,224,18,149,92,132,223,235,81,149,198,166,101,151,199,246,225,241,79,249,98,189,211,148, 250,118,235,74,91,101,88,156,129,76,240,225,62,132,39,20,47,146,24,154,102,26,218,184,29,49,113,9,184,106,233,215, 248,158,93,88,28,60,111,62,243,188,15,181,63,215,169,15,157,35,59,21,226,247,202,133,241,82,58,120,255,39,85,90, 236,225,10,132,51,152,57,182,101,200,145,228,225,104,130,37,12,75,31,158,64,52,71,207,200,108,167,161,173,251,113,51, 247,224,155,214,193,209,217,14,141,19,242,170,235,253,171,178,22,172,2,34,158,115,184,188,237,212,135,220,241,144,81,82, 135,205,152,212,224,201,251,16,47,228,255,94,56,210,17,133,6,155,93,96,180,37,109,35,28,147,90,94,151,77,55,81, 247,204,92,212,125,135,46,73,14,234,182,61,27,117,219,118,31,101,252,116,7,117,217,120,3,165,172,58,135,146,22,28, 68,177,147,126,66,13,63,153,142,60,91,247,122,102,225,19,126,71,98,96,178,19,15,254,64,70,91,225,86,195,184,193, 161,8,55,74,119,23,234,41,86,99,162,56,139,55,106,97,64,202,103,37,77,135,45,66,113,223,100,162,118,139,14,163, 212,31,47,226,231,190,137,50,182,220,197,239,145,69,191,79,85,199,165,231,174,2,20,249,249,114,36,16,75,151,85,226, 112,134,84,25,127,14,135,251,25,30,171,29,152,92,174,97,178,123,28,210,99,28,138,26,245,3,106,61,109,15,234,240, 221,113,148,186,246,50,130,181,208,245,149,231,205,169,182,185,134,239,133,121,78,254,225,95,212,102,230,47,168,201,103,243, 145,71,171,238,79,141,236,60,206,113,249,130,47,25,141,188,42,144,99,137,228,9,132,211,245,173,28,143,226,3,49,63, 160,243,208,146,102,35,150,162,214,211,247,162,142,203,78,162,180,245,87,81,198,230,219,168,235,214,123,213,248,254,239,39, 61,118,230,163,160,140,47,16,126,167,225,120,124,62,120,119,195,192,41,99,66,138,138,174,87,46,165,172,52,249,14,232, 237,253,12,78,122,109,22,84,136,228,134,240,199,168,250,189,38,162,158,187,139,232,73,212,93,41,64,61,48,225,0,233, 244,220,93,136,122,238,41,66,189,246,60,160,255,95,218,186,171,40,110,106,38,242,239,52,184,88,233,232,125,137,203,227, 143,99,92,18,218,0,152,163,225,88,75,156,107,236,236,119,217,59,177,239,243,230,99,127,68,201,43,206,208,7,4,60, 27,60,23,60,31,252,55,60,51,45,240,252,164,198,34,51,143,62,112,240,115,164,112,184,111,61,99,64,187,109,33,208, 147,175,194,7,212,221,192,244,207,75,226,166,238,160,15,4,154,196,153,113,132,249,239,185,75,75,207,251,222,243,172,126, 182,238,248,125,59,126,119,2,19,204,40,164,176,176,63,201,184,88,42,187,49,192,61,213,14,91,119,59,237,194,90,21, 52,28,56,147,62,24,129,232,95,204,89,233,49,168,177,247,175,132,224,231,236,178,233,22,178,14,138,202,97,220,88,31, 60,6,125,53,182,254,131,247,37,94,252,123,104,229,194,166,72,46,19,204,209,178,143,75,33,53,182,250,21,52,11,221, 39,222,55,47,64,250,249,241,159,160,177,128,6,35,51,85,29,2,205,134,176,15,208,31,155,247,139,173,252,155,100,55, 194,27,23,200,22,190,191,39,108,90,216,176,213,240,174,64,72,41,43,255,67,38,46,1,151,222,162,253,193,243,134,8, 245,228,171,177,69,83,16,249,249,50,90,155,165,15,45,102,172,106,211,28,107,14,177,216,41,91,17,62,240,224,26,173, 22,88,123,127,215,185,243,23,74,21,107,29,26,183,125,216,98,226,70,108,61,221,126,121,48,238,44,168,181,235,30,230, 177,205,140,159,145,212,216,226,87,216,203,31,118,100,77,77,147,35,103,127,21,254,236,125,92,13,154,156,222,227,191,39, 34,15,55,195,131,248,179,12,181,248,184,33,224,203,2,211,178,182,109,196,55,110,80,252,103,139,9,235,145,210,209,231, 58,248,49,9,152,96,250,120,98,7,25,59,249,94,13,255,100,26,74,163,9,172,168,218,200,246,149,247,195,36,223,124, 204,26,36,212,83,172,124,67,128,81,142,73,233,83,76,206,55,155,12,153,71,187,58,128,104,234,194,28,195,251,199,78, 222,130,228,230,118,71,241,123,218,189,45,228,130,37,217,208,206,227,98,227,79,231,208,238,131,186,50,14,26,226,13,233, 49,30,220,12,163,120,130,15,188,232,74,170,39,160,120,92,206,228,229,115,35,158,191,47,241,130,220,249,47,21,181,106, 110,123,151,137,46,147,15,2,138,233,88,212,176,160,174,163,95,144,85,93,18,88,148,224,126,48,176,113,61,135,223,51, 160,10,67,229,40,208,147,173,113,107,145,254,180,253,146,163,12,225,214,236,198,245,78,236,91,140,159,43,131,195,45,215, 189,107,133,231,118,153,107,243,212,39,29,150,30,175,149,218,237,187,184,35,176,85,3,132,51,66,40,211,127,83,192,115, 160,85,64,68,94,219,89,191,189,116,251,212,149,49,192,239,2,7,137,109,253,22,121,224,250,98,157,12,216,196,147,74, 5,139,55,175,108,254,240,125,210,201,74,251,121,7,246,161,253,188,73,90,59,35,140,204,118,199,127,187,171,118,187,25, 222,66,190,160,233,8,36,178,213,239,153,245,16,40,85,90,236,15,237,61,233,133,47,176,70,223,7,111,182,206,107,46, 32,51,143,224,107,248,217,92,203,59,36,68,10,163,237,129,93,254,87,66,107,119,117,240,64,213,204,107,194,156,63,144, 204,204,102,127,5,22,33,248,32,250,217,132,196,20,130,235,169,46,174,111,120,167,182,179,127,71,50,83,213,31,144,153, 196,210,46,54,243,172,85,178,93,135,246,182,125,86,217,2,138,87,252,188,88,91,158,49,169,1,226,241,56,35,140,12, 181,98,70,4,96,109,224,126,250,134,235,117,80,35,42,29,124,184,137,108,67,99,243,213,254,222,74,185,203,131,229,230, 182,39,154,14,95,242,226,179,106,222,204,46,66,45,38,108,64,34,185,193,58,38,200,87,26,182,98,133,114,103,131,62, 83,80,247,237,57,53,174,149,107,125,94,55,222,64,170,122,77,239,49,169,132,47,93,125,106,43,160,173,133,79,120,86, 135,165,199,234,180,82,17,250,209,36,208,250,199,9,244,228,44,235,194,6,168,231,107,124,226,242,241,78,207,223,181,53, 100,69,249,188,235,151,71,33,125,133,112,62,233,0,27,79,64,239,217,129,245,82,71,212,136,159,178,58,5,162,213,160, 245,114,249,194,89,149,24,34,15,153,137,234,48,4,164,116,138,192,240,179,248,117,24,84,130,159,175,55,151,247,138,123, 215,8,111,190,53,33,221,199,209,169,79,61,234,50,233,50,2,239,233,18,157,2,133,70,205,203,204,157,155,194,202,241, 84,252,55,59,235,44,233,130,171,5,210,19,237,194,226,10,40,117,129,11,11,140,166,29,19,28,239,228,92,74,47,126, 95,210,213,148,15,239,219,30,143,172,44,164,63,49,57,152,36,33,17,235,27,111,107,245,213,182,58,188,56,95,6,219, 218,45,60,132,20,150,14,208,124,232,93,202,176,77,69,114,195,173,13,7,204,208,57,45,15,178,18,44,188,195,110,150, 209,242,4,88,203,251,210,171,109,159,231,144,119,250,33,144,174,70,220,99,51,158,224,247,79,40,157,234,199,19,138,23, 128,38,88,151,53,126,216,179,137,115,255,68,216,34,59,64,177,109,100,95,100,52,12,153,248,191,224,194,170,248,119,53, 153,13,71,127,77,64,110,206,6,127,50,57,136,36,225,13,69,7,105,235,174,212,253,141,138,223,15,220,41,150,126,141, 239,128,54,244,182,152,35,38,177,41,190,237,7,148,64,226,188,46,141,13,108,54,136,230,139,245,149,112,16,211,165,161, 140,214,155,104,29,20,149,7,190,223,186,110,189,188,166,241,70,37,63,40,163,241,182,180,9,105,158,15,5,16,117,121, 93,131,203,41,172,239,84,196,225,114,191,148,24,154,86,142,163,234,40,247,74,148,70,226,13,187,55,198,62,169,42,241, 66,103,179,51,7,218,163,0,95,227,99,36,157,231,204,102,253,216,63,121,200,139,148,168,154,151,2,173,110,20,168,192, 114,106,218,190,144,82,151,244,190,9,241,170,192,72,157,36,49,120,30,38,146,223,191,84,234,144,29,214,122,142,64,246, 134,54,44,151,151,133,5,133,116,177,5,20,136,116,221,114,143,14,52,190,187,220,163,73,146,104,160,143,137,232,99,146, 133,91,91,124,52,5,18,98,133,209,150,232,49,171,235,188,21,7,150,141,67,163,182,69,239,147,167,206,173,163,228,235, 219,168,129,197,197,235,167,83,170,228,223,213,100,53,192,21,240,245,131,204,142,19,206,229,21,11,36,178,205,141,7,207, 165,203,50,59,45,63,93,179,242,253,105,252,28,255,209,101,154,64,144,90,73,127,202,204,67,80,211,78,169,27,1,85, 4,115,169,177,229,159,177,147,127,210,218,198,213,84,99,65,46,106,175,202,200,222,135,116,48,201,210,191,49,164,23,250, 105,246,16,214,120,38,5,166,141,212,74,49,10,108,238,164,5,7,80,196,176,69,116,65,10,30,191,71,120,179,23,218, 134,182,204,7,173,242,93,197,182,126,203,2,215,152,180,199,45,39,109,38,122,8,193,154,81,58,122,67,170,160,166,87, 69,43,251,134,173,139,160,180,156,228,250,41,93,65,167,11,210,251,231,71,140,235,204,254,111,74,221,212,232,195,38,94, 161,128,174,162,25,50,102,88,96,97,101,111,159,168,176,103,195,209,142,40,44,196,252,4,97,63,142,10,107,189,153,6, 42,231,83,74,7,239,147,74,7,175,26,23,99,103,191,51,102,158,33,55,28,35,146,30,64,32,76,27,5,29,238,177, 93,225,118,143,196,114,243,234,140,233,11,158,135,248,36,245,43,214,212,191,147,118,19,64,217,107,231,213,231,232,74,163, 232,209,43,81,147,193,243,16,248,145,161,223,196,91,101,224,12,20,144,50,20,220,12,153,165,210,226,130,204,60,66,110, 193,225,73,74,59,7,173,20,180,84,120,62,199,38,137,15,228,230,118,135,177,118,61,19,44,36,44,209,148,186,91,89, 48,124,119,37,36,16,75,123,83,247,160,107,41,43,207,18,241,189,106,114,180,37,6,38,91,153,236,14,1,86,38,86, 52,131,96,232,158,34,98,7,16,252,9,85,130,80,45,215,104,208,108,84,191,231,4,20,220,109,76,141,10,4,80,157, 35,59,34,46,95,240,181,145,163,119,229,243,247,41,117,13,121,93,34,95,83,91,107,249,111,7,118,181,121,82,149,52, 178,106,208,120,33,177,28,186,50,153,234,144,88,50,121,169,145,60,161,120,117,189,212,225,197,208,176,71,11,17,240,152, 10,198,196,222,192,218,229,12,52,223,33,105,18,3,33,130,22,15,190,89,143,248,30,79,77,92,235,93,150,24,154,238, 225,139,245,22,242,4,194,177,248,0,28,197,225,241,222,77,184,220,209,180,105,169,14,36,240,49,33,206,11,239,255,45, 49,237,28,222,27,114,94,65,59,21,201,12,182,80,234,54,136,74,66,123,212,216,200,206,227,40,157,83,75,224,144,0, 114,133,180,57,252,185,99,152,170,68,47,51,207,250,55,59,175,185,72,134,216,241,103,128,5,22,212,245,139,18,19,23, 255,43,120,60,54,225,185,154,0,5,71,88,6,99,249,180,134,101,16,22,247,247,153,8,216,104,208,135,192,161,14,17, 111,122,247,84,183,236,156,203,85,203,102,208,182,143,183,54,164,227,97,77,252,95,112,67,144,209,228,94,164,222,64,35, 17,255,178,95,166,111,69,183,59,24,9,26,37,105,255,104,50,214,150,188,218,244,126,138,201,246,23,88,31,204,122,151, 80,85,239,158,22,106,225,19,126,79,237,139,46,32,147,249,177,232,111,100,229,223,36,135,33,22,210,137,161,13,108,66, 154,231,102,108,190,69,196,146,1,95,179,99,147,36,8,172,197,48,253,26,62,246,239,52,152,76,38,3,248,143,127,186, 131,60,226,122,60,229,242,232,94,41,46,229,228,76,215,90,168,56,28,206,41,124,120,143,170,43,218,174,149,133,116,239, 207,155,91,61,46,36,160,237,86,67,86,131,46,67,164,167,52,223,67,172,113,15,104,47,235,174,64,181,23,52,86,113, 42,231,251,172,244,85,206,39,147,22,146,211,118,225,115,192,119,13,205,105,48,49,124,65,145,189,77,132,11,57,201,208, 51,130,196,248,0,89,65,167,50,219,6,177,16,124,236,77,145,239,1,205,229,112,121,95,133,126,52,153,200,248,194,103, 36,205,63,80,218,199,201,23,202,244,127,132,194,18,18,110,6,24,83,104,17,41,148,42,160,72,165,206,53,158,49,49, 50,16,29,180,52,215,251,143,210,82,47,130,234,130,141,138,230,196,79,250,118,247,204,205,37,164,237,86,67,30,175,78, 19,175,212,216,114,175,186,190,190,136,144,54,119,24,242,120,95,107,56,196,104,75,221,160,197,34,49,215,6,83,85,229, 220,172,227,35,240,27,83,228,111,202,112,55,113,13,184,146,252,195,25,98,190,221,192,244,145,8,147,227,84,198,13,69, 142,113,213,110,128,22,230,94,13,238,146,242,69,195,154,128,54,166,120,242,198,51,21,91,166,134,118,30,167,59,46,63, 69,228,243,33,141,208,57,146,158,187,184,58,153,118,229,96,167,200,252,184,187,231,19,185,76,176,152,170,217,219,3,170, 156,201,224,229,110,116,234,216,111,137,68,124,187,21,84,174,85,39,192,167,39,102,180,108,32,42,43,74,221,5,202,177, 26,4,76,113,63,3,27,215,227,208,148,155,196,70,130,72,112,204,248,117,72,168,39,95,85,142,137,47,149,24,152,100, 66,240,132,152,175,20,63,115,120,191,111,17,95,36,89,70,122,93,203,76,172,104,183,72,96,250,231,196,92,12,137,243, 246,35,125,149,19,4,112,109,9,175,35,232,94,147,6,157,193,212,227,91,72,70,59,95,123,25,89,250,54,188,203,4, 238,0,1,214,65,145,247,33,189,172,202,45,30,233,156,239,107,144,243,125,131,42,191,23,70,237,135,161,129,104,209,138, 249,77,81,114,146,19,212,91,119,53,51,145,212,198,215,80,200,164,130,21,243,190,105,248,160,128,64,38,67,133,189,26, 12,180,170,240,2,25,193,117,242,77,176,12,192,132,49,83,172,80,238,80,88,216,31,80,58,120,31,51,113,9,248,207, 212,45,240,34,150,203,213,33,198,206,126,215,176,198,241,148,84,102,3,16,106,112,247,177,16,136,25,130,77,244,178,239, 30,162,10,108,150,13,26,42,145,239,162,211,156,254,69,248,61,160,137,141,159,54,44,69,185,185,221,161,132,185,127,18, 115,195,64,62,55,254,92,184,54,38,21,136,178,138,210,5,75,63,46,143,63,25,91,45,251,156,154,117,120,216,118,214, 175,196,170,200,192,149,208,116,216,98,104,122,180,162,148,223,53,26,175,151,199,164,44,22,72,163,99,10,51,32,155,163, 39,227,155,79,35,44,112,149,81,27,74,125,159,91,40,4,7,41,117,230,146,118,125,201,152,76,224,143,193,211,38,54, 64,160,41,250,120,26,253,67,213,190,14,234,224,11,27,210,45,213,45,251,222,249,180,42,231,237,150,219,157,236,35,237, 118,39,163,212,89,4,179,177,134,121,10,18,178,225,118,2,240,111,65,199,50,200,21,4,243,45,101,213,89,186,35,86, 117,10,221,184,103,103,30,153,226,137,173,247,145,67,227,132,215,146,205,153,219,55,190,128,171,111,200,101,6,20,33,104, 144,206,244,133,208,198,245,67,109,192,133,1,153,18,100,10,75,238,163,240,254,211,160,205,228,115,159,164,254,88,250,85, 73,124,219,15,40,174,151,58,162,4,198,0,8,151,104,71,55,38,211,192,58,40,42,23,143,67,211,82,201,22,177,30, 113,61,158,145,204,99,238,132,215,125,88,223,175,225,80,42,241,105,87,245,113,121,85,232,207,123,6,65,87,183,22,233, 143,236,195,91,23,90,248,132,223,198,123,240,152,80,166,191,150,195,225,12,98,130,192,90,35,225,216,94,93,220,31,129, 121,190,102,73,228,35,115,51,189,189,84,213,239,83,170,22,40,213,221,194,218,69,52,180,188,118,246,80,135,167,36,93, 12,175,246,227,181,209,70,63,94,240,57,54,21,201,12,54,66,240,7,242,102,161,139,147,250,218,154,82,215,192,236,46, 83,85,86,221,66,40,200,5,239,102,96,227,2,215,197,152,149,53,133,161,165,30,180,214,35,69,188,80,165,229,208,176, 77,33,69,246,230,139,23,7,61,95,172,247,29,28,140,196,114,85,75,231,172,18,146,210,107,136,228,237,14,240,121,144, 247,140,45,178,165,101,98,30,100,137,151,177,92,52,21,123,218,92,219,234,106,192,44,90,209,128,222,201,112,59,70,189, 180,17,37,22,62,97,119,249,98,233,82,134,128,137,167,220,58,53,9,183,188,122,245,100,50,104,119,197,223,140,15,45, 84,200,133,107,25,159,162,174,35,218,199,83,121,230,207,204,214,143,181,65,186,47,110,160,112,37,126,3,133,18,155,129, 227,45,124,195,179,34,255,183,28,117,217,124,171,212,21,40,117,179,51,89,211,17,75,16,214,234,203,235,240,22,6,77, 164,137,248,6,75,71,219,45,236,15,17,206,98,208,192,209,196,197,255,18,164,168,125,72,61,25,52,164,11,233,110,74, 71,159,43,212,235,41,129,205,28,35,146,30,210,93,217,106,245,213,85,133,47,246,98,234,218,75,244,33,99,100,231,113, 145,82,23,253,16,37,95,137,202,82,186,253,215,45,113,116,32,41,251,98,122,241,152,97,129,5,50,169,96,165,142,147, 111,164,155,179,193,137,204,117,45,31,21,106,129,116,75,223,185,38,35,116,231,26,211,188,199,94,36,211,223,224,147,248, 241,243,206,171,206,98,82,42,170,219,61,91,65,163,200,204,67,30,113,221,193,93,211,145,195,121,57,140,2,9,157,137, 242,57,92,155,66,204,205,128,199,19,170,204,240,193,54,5,91,18,100,163,157,234,11,45,211,189,218,124,244,156,148,11, 166,214,144,46,115,161,163,75,84,50,116,34,235,31,152,58,242,53,5,206,204,35,248,42,164,196,213,214,198,56,61,203, 8,188,71,215,157,69,40,122,234,30,164,112,12,128,64,95,99,138,67,136,123,165,122,124,138,203,225,12,159,58,174,62, 77,188,224,211,204,186,144,86,60,110,68,80,129,129,190,112,131,14,70,21,193,167,155,224,229,110,244,79,230,218,150,143, 10,180,68,186,180,127,247,10,125,203,48,148,184,146,186,101,216,154,103,96,190,205,42,117,50,106,180,226,14,138,221,144, 143,18,55,231,161,228,173,121,168,203,142,124,212,45,179,212,2,216,85,106,1,212,234,13,171,14,116,25,59,251,129,214, 96,95,102,60,228,82,99,203,95,160,124,151,20,241,130,201,232,24,209,174,108,183,44,82,16,192,165,149,116,3,152,61, 69,31,14,241,98,2,234,190,61,155,78,119,227,139,36,75,168,242,243,217,197,34,185,225,166,152,9,235,233,30,24,181, 134,92,119,170,247,93,250,246,124,212,9,239,195,132,77,185,168,197,186,92,212,100,117,14,10,89,145,141,188,191,203,66, 174,75,115,145,89,191,85,136,167,111,6,41,165,68,139,90,66,219,182,178,203,185,115,54,149,38,27,32,95,232,99,59, 115,114,88,145,149,165,116,31,19,105,231,234,0,233,194,132,15,104,212,192,226,202,190,237,241,143,181,74,186,120,12,206, 31,233,136,66,131,204,46,148,67,24,239,3,35,174,212,112,181,97,199,73,200,122,238,93,100,61,47,11,217,204,187,143, 236,230,223,71,206,139,178,144,231,146,44,84,111,121,54,10,91,153,141,154,253,152,131,90,173,207,69,73,155,115,105,82, 78,223,158,135,186,226,197,209,189,244,162,169,37,196,12,155,48,122,244,42,36,208,147,255,80,78,46,109,176,117,80,100, 54,185,204,137,66,212,110,241,223,72,95,229,12,85,134,166,90,88,127,206,38,174,245,174,166,172,58,87,231,173,148,87, 202,173,49,233,66,206,46,38,214,237,21,90,193,106,77,176,189,67,227,132,135,80,25,87,83,227,83,222,254,128,125,3, 251,39,13,239,163,78,91,242,176,178,147,139,98,241,254,106,186,38,7,53,248,33,27,249,47,203,70,30,120,255,57,45, 204,162,247,163,53,222,151,42,144,185,204,159,32,179,110,33,105,253,14,5,212,203,114,113,34,144,219,90,203,246,252,182, 53,14,105,204,118,134,128,75,54,175,108,254,40,200,223,228,60,16,30,85,179,37,179,174,18,9,127,113,106,7,231,172, 51,7,218,63,213,38,233,106,242,119,87,47,110,6,249,187,75,168,170,87,17,9,56,124,225,4,69,236,167,207,85,179, 111,35,235,249,89,244,228,106,68,85,90,230,170,255,173,52,41,187,227,69,225,135,23,7,156,192,141,87,229,160,232,181, 185,40,126,67,46,106,199,104,203,176,160,186,150,213,152,117,136,156,189,19,62,126,14,41,78,140,169,174,54,91,132,116, 92,102,104,80,198,40,114,149,106,88,11,109,60,120,14,226,10,132,211,137,39,85,171,139,60,210,212,110,134,15,199,167, 155,190,254,26,242,79,254,172,132,233,27,241,54,5,68,42,16,75,151,193,197,173,234,107,143,10,181,163,169,238,122,93, 99,205,216,193,16,43,222,15,73,120,95,196,225,253,17,181,54,7,53,194,251,37,24,239,27,95,172,185,186,47,126,73, 174,54,229,144,171,245,155,100,65,46,50,74,159,137,40,30,127,52,87,70,168,87,150,80,72,243,74,191,255,13,14,40, 41,75,104,64,196,167,247,183,123,218,61,213,45,199,64,95,4,229,123,141,40,194,149,53,111,1,144,125,119,103,71,253, 35,223,78,12,45,194,90,249,115,109,147,46,72,246,197,116,148,145,236,10,38,107,60,167,10,39,28,135,71,15,85,156, 196,191,85,142,213,212,243,175,145,238,187,136,170,204,34,161,137,25,47,30,251,5,47,137,217,231,187,108,20,244,61,104, 204,57,248,36,87,155,75,173,55,230,161,118,63,169,23,99,234,118,245,226,236,166,209,156,119,85,44,68,47,133,92,125, 30,153,186,7,93,165,212,181,246,175,22,77,24,154,237,34,121,53,12,104,102,46,81,201,218,170,118,226,241,49,169,68, 141,90,161,211,166,52,169,118,148,16,233,135,206,99,118,97,173,138,120,66,241,44,38,199,252,93,96,3,55,135,4,164, 124,86,146,250,227,37,117,160,234,13,218,239,43,100,90,134,80,53,154,42,172,219,212,109,121,168,227,22,53,169,198,111, 204,69,49,120,125,71,96,141,53,12,107,172,129,216,82,244,94,154,133,220,202,16,171,117,101,201,245,141,196,155,131,76, 7,111,65,60,185,201,15,164,173,127,167,160,0,147,243,255,30,104,143,202,18,27,252,29,252,190,171,22,53,123,212,56, 204,226,138,72,200,155,65,169,219,204,9,180,76,184,109,141,149,226,45,152,0,179,15,236,166,187,141,149,144,206,211,125, 83,153,176,131,157,98,31,85,245,86,144,166,124,99,219,223,77,135,108,167,39,207,186,42,147,175,17,32,111,248,172,249, 217,72,53,231,46,109,6,89,149,18,248,187,245,236,91,200,6,139,221,156,91,200,113,222,45,228,58,255,54,242,92,120, 27,249,47,185,131,130,151,221,65,225,223,223,65,17,43,239,162,230,171,239,162,184,181,247,80,194,250,123,168,253,198,251, 40,121,115,22,74,195,139,28,22,59,237,222,200,172,64,227,216,245,186,175,236,245,108,134,34,4,62,63,172,45,173,45, 39,31,210,223,202,191,201,61,82,151,124,130,118,5,85,118,134,182,238,167,41,117,243,39,210,176,50,180,243,56,67,170, 179,215,11,146,171,105,129,40,190,38,245,12,191,23,20,177,180,250,122,59,242,140,239,249,76,102,170,130,108,158,14,20, 115,211,70,37,96,193,19,136,166,91,5,68,228,68,12,93,136,192,53,67,191,239,238,7,168,251,174,34,212,117,103,33, 202,200,44,192,26,106,62,182,216,242,81,123,76,168,9,180,150,154,135,154,51,132,26,190,18,124,172,57,180,27,192,115, 105,54,114,213,144,234,130,44,172,116,100,209,174,58,85,89,107,145,196,222,122,3,241,154,141,216,131,248,74,235,173,20, 225,242,115,142,72,196,155,12,197,20,21,221,218,0,255,126,249,68,167,103,51,39,135,61,8,11,49,187,168,39,225,47, 196,191,7,161,99,99,66,169,22,64,228,208,64,165,167,153,137,100,71,199,4,199,123,91,87,199,60,206,186,144,94,92, 29,90,110,105,25,220,215,7,204,227,222,114,217,251,159,45,140,73,242,177,34,102,192,51,235,185,247,8,44,128,44,154, 108,45,39,157,66,202,30,139,144,162,229,160,103,210,240,212,66,189,144,118,249,122,193,73,111,21,73,25,129,127,147,130, 132,36,229,203,235,39,229,25,132,180,45,50,75,24,94,226,58,255,22,242,194,139,29,220,27,160,69,131,31,12,76,182, 102,120,67,128,166,209,10,155,113,109,55,229,210,218,71,7,188,105,82,24,119,7,4,8,95,37,236,2,228,219,97,32, 92,10,217,139,83,234,82,72,166,119,192,192,192,212,225,168,23,108,252,157,85,119,137,168,171,169,22,65,202,218,60,74, 59,109,78,163,156,34,218,61,32,85,52,1,105,87,80,118,91,221,69,49,47,4,91,34,16,244,108,191,228,40,106,61, 125,47,130,11,69,161,80,1,42,8,37,134,166,187,241,251,246,40,39,231,186,82,134,52,228,169,11,36,210,197,230,94, 13,206,121,38,244,125,236,211,111,46,242,30,157,137,60,191,62,130,220,103,158,71,46,179,175,32,167,57,215,145,253,156, 27,88,73,184,129,172,103,221,192,74,195,13,100,53,179,124,81,105,100,214,155,228,38,178,198,202,136,90,49,201,34,75, 188,195,118,34,158,161,229,70,138,124,3,35,202,59,44,196,252,234,217,195,29,80,193,213,140,10,131,78,152,128,75,174, 96,2,94,62,55,226,17,38,199,187,246,182,242,125,124,62,119,18,254,253,214,76,22,132,226,29,31,78,200,144,118,0, 150,110,82,169,96,169,191,183,242,244,160,62,62,121,123,55,181,122,114,31,107,217,85,189,186,231,125,114,119,255,218,217, 26,185,58,25,28,174,132,121,85,161,182,43,48,119,57,104,62,106,31,77,152,85,213,114,85,88,131,53,234,50,11,137, 28,130,46,112,132,18,240,99,118,98,92,63,193,4,164,30,150,47,229,205,251,149,148,245,57,151,118,113,104,252,207,182, 140,171,195,17,107,33,224,238,0,51,15,2,20,16,5,6,45,37,8,107,43,65,243,206,35,35,207,240,203,229,100,198, 136,5,10,227,159,26,142,223,130,58,108,45,164,77,72,240,85,119,222,86,134,192,25,18,239,198,16,121,247,10,34,211, 180,123,36,51,23,110,183,120,162,141,10,67,166,9,204,72,8,48,245,34,144,205,208,11,46,73,156,247,39,50,243,172, 95,164,116,240,190,172,116,244,169,9,185,104,100,239,249,175,129,181,203,65,61,35,243,76,158,80,4,57,214,189,25,75, 150,100,23,62,56,113,161,255,68,27,138,39,24,203,81,152,174,229,91,184,237,23,58,6,255,43,242,108,122,93,226,215, 242,158,36,32,62,91,47,176,13,9,201,209,11,74,200,149,134,117,46,52,236,56,169,216,234,219,75,228,200,23,92,13, 3,55,34,174,212,104,153,54,14,118,142,80,200,157,240,229,168,96,244,54,13,147,33,96,58,239,247,200,47,9,79,231, 125,211,240,97,215,20,215,172,208,32,179,179,42,75,233,110,104,186,195,225,80,163,33,231,15,75,6,150,100,44,157,153, 147,244,83,76,212,83,140,12,69,171,157,29,244,255,108,222,84,117,101,72,63,223,252,117,203,162,30,159,63,210,241,25, 4,245,10,171,89,195,125,225,219,189,148,142,250,246,240,132,20,178,158,6,250,239,95,45,200,81,247,35,232,44,143,236, 243,132,136,182,59,231,14,50,72,28,93,204,149,26,254,136,63,215,67,11,147,207,231,202,148,203,77,62,89,87,105,151, 72,121,38,159,10,127,134,241,128,13,136,43,55,94,89,142,75,202,89,236,26,126,197,230,155,115,200,1,19,183,134,188, 93,74,17,184,215,210,44,58,32,2,36,14,62,188,96,172,121,215,95,161,214,190,193,12,5,13,28,82,126,64,11,143, 90,155,135,34,230,159,70,74,151,122,224,102,80,105,65,219,21,138,228,70,27,162,39,109,65,93,118,22,209,169,71,26, 129,67,162,172,148,254,255,26,129,3,69,35,233,153,69,168,201,200,239,65,59,95,206,4,172,106,66,236,152,12,5,67, 70,1,170,174,172,37,32,98,125,102,158,156,152,181,236,69,80,160,176,163,33,71,36,93,99,220,235,59,114,238,189,5, 185,72,217,109,1,226,240,4,227,121,114,19,173,12,140,3,116,249,58,184,167,45,122,87,243,30,126,174,72,173,153,150, 92,59,149,252,236,240,207,109,159,111,90,17,253,104,238,215,225,69,147,71,135,60,253,252,83,255,7,216,116,207,251,172, 191,111,254,232,97,245,30,79,29,31,250,100,201,172,198,69,187,55,196,62,61,253,103,187,103,119,206,166,130,43,161,68, 147,71,92,19,132,171,113,165,108,89,21,3,45,32,119,17,240,237,234,241,12,44,182,152,14,222,90,245,201,95,144,141, 140,63,250,30,242,8,183,85,209,252,123,99,69,150,200,185,193,69,171,175,255,35,163,37,224,207,80,180,26,2,238,154, 174,76,128,145,241,51,208,134,80,186,162,229,160,231,111,204,238,40,39,219,227,21,41,237,211,3,146,239,181,20,113,197, 178,153,90,114,51,40,69,214,94,199,28,167,28,67,238,75,114,232,232,248,11,89,82,142,44,126,93,220,74,203,146,92, 100,218,126,52,52,197,233,201,229,241,41,22,132,45,20,107,111,138,35,16,77,82,118,95,64,19,38,25,226,205,70,250, 241,195,138,105,37,146,203,35,255,208,140,79,179,91,183,206,110,143,238,157,75,171,52,17,194,207,3,17,3,137,65,103, 47,16,112,77,0,177,50,228,90,66,255,251,117,245,207,84,228,210,168,110,129,155,38,174,156,232,132,90,70,219,192,141, 169,209,4,10,38,26,232,5,196,101,171,102,92,83,251,102,171,224,215,85,77,191,130,176,73,118,31,127,102,184,118,74, 82,232,205,223,153,246,69,207,35,67,186,86,223,92,64,98,247,38,208,29,204,237,53,205,90,106,244,189,201,39,107,201, 105,35,216,162,144,69,244,120,196,184,186,180,1,47,137,79,243,219,86,120,46,85,111,59,32,222,65,96,124,228,81,125, 224,210,207,120,150,38,181,2,11,129,133,203,65,243,209,127,86,221,197,167,81,10,102,221,68,122,129,109,115,24,183,156, 246,10,21,140,12,69,171,22,76,107,132,10,174,233,6,49,86,135,140,25,86,175,4,2,140,85,141,90,74,252,90,64, 26,217,56,163,212,111,9,104,187,57,200,108,228,207,16,77,221,73,105,175,95,50,159,43,195,100,216,159,16,25,210,169, 55,91,65,67,95,79,189,222,60,222,94,228,84,255,130,213,87,255,18,211,172,45,39,157,68,66,187,128,211,148,246,74, 220,99,100,77,123,62,182,158,119,143,88,86,138,188,89,47,56,40,98,89,142,36,207,93,28,190,112,170,126,235,17,197, 100,2,218,247,105,242,182,24,119,8,9,44,221,181,213,255,227,213,83,222,219,195,232,31,72,171,170,238,0,87,77,184, 24,54,44,143,66,54,42,217,47,4,2,106,0,35,124,226,254,101,49,230,64,213,79,220,133,185,180,155,129,35,148,76, 19,251,198,104,107,174,29,68,206,161,4,201,16,155,101,109,70,66,54,195,71,216,228,43,229,248,166,173,136,78,242,232, 126,79,73,70,155,141,251,172,64,92,137,124,190,54,252,148,140,155,164,167,65,194,23,37,228,252,133,57,200,160,253,4, 112,53,12,229,74,13,89,170,172,58,184,140,223,184,33,87,79,255,7,121,228,71,143,173,190,189,72,48,176,6,254,221, 121,136,35,16,127,109,152,58,77,187,111,194,20,85,36,198,70,219,100,159,255,187,67,157,213,124,33,136,119,120,111,91, 20,92,207,20,162,239,97,132,134,47,76,47,56,41,151,78,109,33,48,233,38,253,127,196,196,162,248,145,137,14,195,78, 53,32,40,16,193,238,170,136,249,228,25,41,109,206,106,218,37,36,246,138,186,5,89,50,101,157,26,120,99,44,54,233, 187,138,156,155,1,11,4,48,241,103,183,211,202,142,150,27,3,249,254,207,40,125,6,57,127,33,163,65,137,156,27,128, 43,6,110,171,133,235,218,29,153,128,147,149,142,136,138,170,184,82,85,68,113,121,253,56,66,189,233,28,145,244,219,154, 20,174,88,62,3,130,194,2,115,231,253,122,129,109,114,149,61,23,35,213,204,235,68,83,201,32,155,72,27,229,194,111, 246,254,241,56,67,123,164,185,61,190,121,166,51,237,7,173,75,164,11,135,201,185,195,29,80,124,11,91,104,234,156,218, 48,212,156,64,90,8,125,131,71,95,131,164,177,132,200,37,11,169,166,93,70,250,241,195,159,98,173,244,146,208,198,231, 136,208,218,251,16,65,57,40,180,245,189,110,58,104,19,49,55,131,217,80,58,223,17,18,205,203,94,103,98,35,116,8, 252,207,114,242,105,114,110,134,41,103,144,200,49,248,44,69,254,202,28,117,222,155,107,67,10,111,240,175,137,70,200,153, 103,183,24,123,8,97,77,186,88,47,56,49,87,236,17,113,85,228,18,118,1,207,241,121,176,62,106,90,240,252,93,100, 50,144,202,131,7,158,199,27,202,110,243,233,160,102,141,202,71,203,17,172,93,139,177,7,233,28,95,245,28,17,206,223, 29,177,23,241,141,109,127,102,180,234,106,131,84,79,194,159,62,164,159,239,243,187,231,82,107,52,235,128,52,233,66,15, 226,244,142,46,15,121,92,206,103,20,185,106,20,14,54,123,231,18,213,234,128,164,230,222,67,86,83,207,33,203,47,143, 35,203,137,199,200,202,164,147,136,238,33,65,202,140,78,26,3,102,244,0,142,168,180,75,154,214,20,18,229,205,122,63, 33,230,43,197,223,101,210,111,13,226,234,25,124,71,105,33,169,29,128,181,29,138,43,150,205,48,254,248,7,178,196,203, 104,190,180,204,185,141,173,132,203,244,252,66,86,73,205,202,89,122,61,72,124,91,228,129,233,94,65,154,100,15,136,240, 219,44,204,83,91,1,53,42,57,47,170,56,181,85,181,166,104,49,0,178,115,122,113,248,213,127,187,188,161,66,46,92, 60,242,83,255,98,53,249,102,212,9,210,5,77,94,40,228,141,163,42,95,18,249,38,136,120,70,170,109,230,159,255,162, 133,141,154,245,114,179,18,21,82,26,2,214,206,103,92,133,12,12,184,191,47,160,172,213,142,9,108,46,104,40,36,15, 36,112,145,224,207,78,209,150,9,40,246,104,162,214,120,123,127,71,126,62,95,171,74,212,1,193,239,104,49,250,47,132, 77,247,63,42,112,53,8,121,10,147,31,77,7,109,214,242,120,232,128,44,200,70,230,95,252,129,4,150,110,71,40,237, 148,161,191,19,140,129,124,65,243,5,183,67,109,245,249,194,115,95,56,210,17,117,73,118,121,40,18,242,38,80,234,59, 207,136,70,85,5,86,238,7,44,198,29,214,234,41,172,155,11,85,147,129,97,179,139,122,189,250,201,82,104,235,119,202, 242,203,19,196,220,12,160,157,137,92,26,92,162,180,120,85,21,79,237,227,29,5,157,169,136,249,120,117,124,14,141,210, 166,67,161,192,56,161,125,189,242,134,196,89,236,218,240,10,104,231,68,75,114,117,81,230,222,69,242,232,190,112,176,247, 198,135,111,141,70,15,13,193,237,208,45,213,237,241,185,191,59,212,186,108,7,120,222,163,191,37,162,182,173,236,242,249, 124,238,240,114,124,144,68,198,72,104,235,123,20,92,2,31,34,241,26,118,248,18,97,237,115,24,54,255,203,142,75,188, 172,73,183,71,234,94,196,164,74,56,55,32,174,76,89,94,101,28,193,232,26,237,193,232,162,223,122,120,113,157,215,240, 52,129,164,208,142,16,72,138,120,173,22,69,157,239,93,110,241,75,93,92,203,224,59,198,214,235,158,234,72,33,123,39, 159,47,144,86,203,40,155,156,63,118,196,211,26,164,174,251,125,225,249,64,160,42,173,65,176,217,117,136,226,107,113,179, 234,11,173,189,255,6,223,233,135,69,188,89,116,52,89,175,94,235,108,234,245,155,170,57,16,1,87,246,88,76,208,205, 144,141,244,153,202,56,138,163,245,106,215,16,189,160,132,28,34,89,42,186,44,144,109,49,22,242,85,221,14,86,64,54, 144,239,189,226,125,202,202,107,219,56,128,53,37,241,137,129,98,170,230,213,176,190,222,61,225,30,2,37,222,30,70,103, 22,78,107,132,160,194,77,87,93,15,160,229,222,248,39,5,77,250,34,184,196,222,86,254,23,165,190,77,67,155,57,33, 98,190,177,237,78,243,255,253,70,251,136,62,28,109,55,27,153,143,250,29,241,77,237,127,165,212,77,146,74,195,76,96, 237,125,204,98,194,81,50,135,209,139,202,184,198,229,85,198,105,197,210,227,155,57,253,1,254,190,58,61,167,152,76,149, 93,231,34,142,64,52,197,116,192,250,242,198,129,108,241,139,78,146,174,186,25,21,196,14,56,60,193,24,138,112,11,200, 170,91,96,234,67,192,19,26,221,64,121,49,221,219,225,170,238,148,0,107,14,130,61,155,98,81,98,156,125,190,84,143, 15,205,156,109,180,61,46,118,171,17,164,148,125,3,109,27,63,8,159,96,105,55,67,202,84,132,77,243,47,248,198,54, 175,87,126,53,76,123,0,141,126,136,153,129,208,148,90,97,90,94,101,28,121,63,175,1,212,212,112,6,65,36,159,104, 170,146,174,9,158,31,105,120,106,145,90,203,227,148,183,225,59,201,155,19,44,126,209,65,210,165,155,81,181,27,7,153, 50,43,40,178,55,139,107,161,68,143,195,233,230,233,102,120,250,203,81,193,37,144,23,75,247,96,168,33,13,24,190,23, 228,196,190,68,52,244,19,191,231,14,118,138,253,248,25,219,86,199,6,45,85,157,21,43,13,75,41,130,147,243,67,33, 94,186,150,61,56,9,82,144,26,149,30,14,199,237,248,32,18,136,191,82,118,157,71,214,205,208,90,93,25,71,85,95, 147,25,43,190,169,195,126,32,252,58,105,102,131,155,1,91,36,2,107,47,184,175,174,188,70,76,80,252,178,132,116,241, 139,46,189,63,184,202,244,19,70,149,112,229,202,117,53,153,197,80,233,178,83,177,136,55,49,44,196,236,234,180,137,161, 72,115,147,5,221,113,172,26,124,184,154,64,223,241,223,19,209,184,17,129,37,254,222,202,255,248,124,46,228,231,154,215, 192,88,40,224,70,82,173,228,126,234,234,166,29,67,167,32,193,33,87,182,171,155,177,192,202,253,16,185,44,15,77,101, 92,36,84,198,121,85,215,132,50,141,220,35,69,78,33,215,204,134,239,38,223,104,91,23,220,12,61,22,35,142,72,175, 162,251,234,200,22,191,232,146,150,11,41,116,227,255,70,178,198,25,143,185,18,249,130,26,226,140,42,215,76,123,137,197, 188,201,112,65,230,231,131,3,138,225,2,77,184,189,184,144,233,70,70,42,16,167,33,91,144,155,255,164,160,204,117,45, 209,160,62,222,207,188,61,140,78,9,4,220,145,76,138,17,167,70,70,65,173,245,214,23,218,250,159,55,27,186,163,238, 109,210,242,82,144,210,103,33,14,95,56,81,242,122,63,137,102,210,6,157,10,172,9,22,104,152,13,205,132,202,184,45, 90,202,74,121,227,204,130,53,35,80,121,157,49,74,155,129,232,126,0,90,78,222,175,206,212,41,200,58,161,224,190,186, 178,193,36,142,22,138,95,106,56,16,172,41,188,128,162,17,104,102,37,180,175,119,145,226,114,251,104,33,189,180,218,9, 216,137,203,229,244,183,81,201,246,194,213,241,83,199,213,71,191,110,137,163,11,23,128,56,161,45,100,17,227,146,128,130, 12,77,230,65,126,153,76,4,186,205,36,254,255,133,76,207,95,32,218,156,75,233,232,226,209,142,104,39,38,91,208,110, 99,34,173,239,90,152,233,193,157,247,25,76,141,57,167,198,7,64,78,7,133,155,11,84,158,255,64,94,164,213,212,179, 234,13,10,126,95,77,209,2,115,119,84,173,95,196,115,110,35,105,131,228,66,170,76,45,187,196,175,37,84,58,77,0, 82,38,215,23,53,7,25,36,210,149,113,159,188,210,128,167,122,225,193,21,203,231,97,173,251,174,97,202,215,200,124,244, 126,166,63,64,246,203,106,170,215,230,56,75,167,45,22,186,195,155,173,95,69,247,213,113,225,125,213,197,47,185,181,103, 93,190,40,12,201,102,136,54,87,29,60,155,126,153,46,3,198,235,168,68,228,26,126,13,107,249,211,32,94,165,11,188, 65,18,112,111,74,40,159,199,25,161,178,148,110,111,18,102,113,181,87,23,247,71,223,140,15,69,235,151,71,161,63,51, 91,211,110,137,203,199,59,209,217,7,183,255,235,76,107,200,183,255,237,140,110,156,78,65,151,142,117,66,255,252,213,14, 253,190,45,30,173,89,18,9,217,9,168,75,178,235,131,208,96,179,11,102,166,146,13,152,220,7,80,234,174,243,18,29, 125,127,119,142,88,54,91,236,218,240,154,126,252,240,98,147,126,171,233,141,10,145,97,48,153,161,95,175,170,244,125,82, 181,77,102,223,162,223,71,96,229,254,55,126,215,178,173,249,141,248,102,78,251,205,63,255,149,254,185,42,127,23,220,199, 53,245,28,146,248,52,191,203,204,121,77,2,210,17,3,241,193,50,22,50,30,36,254,173,178,160,241,59,220,82,0,126, 96,232,76,7,102,57,220,44,13,189,54,212,243,124,93,71,231,240,54,82,246,92,130,128,92,43,32,31,43,161,141,207, 105,104,236,3,190,124,221,95,151,215,233,30,214,144,249,98,57,229,31,122,46,76,63,253,9,25,101,204,70,138,230,253, 159,65,3,39,190,210,122,23,197,229,13,166,212,55,96,240,168,58,14,32,71,184,238,35,22,43,70,131,13,244,133,139, 108,173,229,153,62,158,70,71,194,235,155,95,140,105,102,125,51,190,133,237,45,172,33,223,138,139,177,189,25,29,161,186, 209,32,216,236,188,167,155,225,33,107,43,217,86,185,76,48,135,82,95,37,20,69,169,155,162,8,107,201,123,131,131,208, 29,75,15,174,68,127,33,223,212,225,23,145,67,224,25,177,103,211,27,18,191,216,187,122,1,241,247,177,100,213,74,169, 215,58,11,107,13,185,88,251,156,88,206,123,7,115,101,70,23,37,190,45,8,125,87,124,150,196,59,42,151,43,53,220, 160,99,38,33,52,79,129,50,175,84,14,95,48,145,167,48,93,13,115,140,53,200,19,120,108,46,129,63,26,107,255,119, 37,1,113,247,116,114,174,241,28,10,172,189,110,83,112,47,90,249,183,43,68,242,244,205,174,195,225,82,11,214,228,125, 252,156,119,37,222,209,183,197,110,141,174,8,109,253,79,242,77,29,127,225,201,77,86,114,120,252,177,248,93,218,51,218, 173,148,250,128,193,97,200,216,152,113,17,216,51,190,89,39,230,79,248,187,21,19,176,17,213,161,119,150,49,14,124,7, 230,196,245,101,52,184,218,44,229,93,68,5,233,56,126,90,248,46,27,29,159,99,30,51,199,166,88,172,169,151,119,139, 121,107,105,60,72,136,15,85,113,163,125,227,90,180,14,125,153,160,171,11,179,78,76,153,185,224,82,44,88,176,96,193, 130,5,11,22,44,88,176,96,193,130,5,11,22,44,88,176,96,193,130,69,37,241,127,238,146,187,72,236,7,218,235,0, 0,0,37,116,69,88,116,100,97,116,101,58,99,114,101,97,116,101,0,50,48,50,48,45,48,56,45,49,48,84,48,57, 58,50,49,58,49,53,43,48,57,58,48,48,81,58,8,144,0,0,0,37,116,69,88,116,100,97,116,101,58,109,111,100, 105,102,121,0,50,48,50,48,45,48,56,45,49,48,84,48,57,58,50,49,58,49,53,43,48,57,58,48,48,32,103,176, 44,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Logo2x[18991] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,2,188,0,0,0,170,8,6,0,0,0,79,170,156, 236,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,6,132,105,84,88,116,88,77, 76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101, 103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84, 99,122,107,99,57,100,34,63,62,32,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100, 111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80, 32,67,111,114,101,32,53,46,54,45,99,49,52,53,32,55,57,46,49,54,51,52,57,57,44,32,50,48,49,56,47,48, 56,47,49,51,45,49,54,58,52,48,58,50,50,32,32,32,32,32,32,32,32,34,62,32,60,114,100,102,58,82,68,70, 32,120,109,108,110,115,58,114,100,102,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57, 57,57,47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35,34,62,32,60,114,100,102,58,68, 101,115,99,114,105,112,116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,32,120,109,108,110,115,58,120,109, 112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34, 32,120,109,108,110,115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114,103,47,100,99,47,101,108, 101,109,101,110,116,115,47,49,46,49,47,34,32,120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116, 116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104,111,116,111,115,104,111,112,47,49,46,48,47, 34,32,120,109,108,110,115,58,120,109,112,77,77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99, 111,109,47,120,97,112,47,49,46,48,47,109,109,47,34,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116,116, 112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,115,84,121,112,101,47,82, 101,115,111,117,114,99,101,69,118,101,110,116,35,34,32,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,61,34, 65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111, 115,104,41,34,32,120,109,112,58,67,114,101,97,116,101,68,97,116,101,61,34,50,48,50,49,45,48,56,45,50,55,84, 50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,120,109,112,58,77,111,100,105,102,121,68,97,116,101,61,34, 50,48,50,49,45,48,57,45,48,51,84,50,50,58,49,51,58,53,52,43,48,51,58,48,48,34,32,120,109,112,58,77, 101,116,97,100,97,116,97,68,97,116,101,61,34,50,48,50,49,45,48,57,45,48,51,84,50,50,58,49,51,58,53,52, 43,48,51,58,48,48,34,32,100,99,58,102,111,114,109,97,116,61,34,105,109,97,103,101,47,112,110,103,34,32,112,104, 111,116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101,61,34,51,34,32,112,104,111,116,111,115,104,111,112,58, 73,67,67,80,114,111,102,105,108,101,61,34,115,82,71,66,32,73,69,67,54,49,57,54,54,45,50,46,49,34,32,120, 109,112,77,77,58,73,110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,97,98,54,101,100,57,50, 102,45,50,49,53,102,45,52,55,56,53,45,97,98,100,101,45,57,52,97,55,54,99,53,53,56,97,53,48,34,32,120, 109,112,77,77,58,68,111,99,117,109,101,110,116,73,68,61,34,97,100,111,98,101,58,100,111,99,105,100,58,112,104,111, 116,111,115,104,111,112,58,98,99,101,99,53,54,54,98,45,52,101,97,57,45,101,49,52,57,45,98,50,97,101,45,48, 100,56,52,51,101,102,48,50,55,57,56,34,32,120,109,112,77,77,58,79,114,105,103,105,110,97,108,68,111,99,117,109, 101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,102,50,99,97,50,51,102,99,45,53,49,57,99,45,52,56,55, 54,45,97,57,101,101,45,100,50,51,100,52,99,50,51,50,99,51,51,34,62,32,60,112,104,111,116,111,115,104,111,112, 58,84,101,120,116,76,97,121,101,114,115,62,32,60,114,100,102,58,66,97,103,62,32,60,114,100,102,58,108,105,32,112, 104,111,116,111,115,104,111,112,58,76,97,121,101,114,78,97,109,101,61,34,97,114,101,115,34,32,112,104,111,116,111,115, 104,111,112,58,76,97,121,101,114,84,101,120,116,61,34,97,114,101,115,34,47,62,32,60,47,114,100,102,58,66,97,103, 62,32,60,47,112,104,111,116,111,115,104,111,112,58,84,101,120,116,76,97,121,101,114,115,62,32,60,120,109,112,77,77, 58,72,105,115,116,111,114,121,62,32,60,114,100,102,58,83,101,113,62,32,60,114,100,102,58,108,105,32,115,116,69,118, 116,58,97,99,116,105,111,110,61,34,99,114,101,97,116,101,100,34,32,115,116,69,118,116,58,105,110,115,116,97,110,99, 101,73,68,61,34,120,109,112,46,105,105,100,58,102,50,99,97,50,51,102,99,45,53,49,57,99,45,52,56,55,54,45, 97,57,101,101,45,100,50,51,100,52,99,50,51,50,99,51,51,34,32,115,116,69,118,116,58,119,104,101,110,61,34,50, 48,50,49,45,48,56,45,50,55,84,50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,115,116,69,118,116,58, 115,111,102,116,119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67, 67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,47,62,32,60,114,100,102,58,108,105,32,115,116, 69,118,116,58,97,99,116,105,111,110,61,34,115,97,118,101,100,34,32,115,116,69,118,116,58,105,110,115,116,97,110,99, 101,73,68,61,34,120,109,112,46,105,105,100,58,97,98,54,101,100,57,50,102,45,50,49,53,102,45,52,55,56,53,45, 97,98,100,101,45,57,52,97,55,54,99,53,53,56,97,53,48,34,32,115,116,69,118,116,58,119,104,101,110,61,34,50, 48,50,49,45,48,57,45,48,51,84,50,50,58,49,51,58,53,52,43,48,51,58,48,48,34,32,115,116,69,118,116,58, 115,111,102,116,119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67, 67,32,50,48,49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,32,115,116,69,118,116,58,99,104,97,110,103,101, 100,61,34,47,34,47,62,32,60,47,114,100,102,58,83,101,113,62,32,60,47,120,109,112,77,77,58,72,105,115,116,111, 114,121,62,32,60,47,114,100,102,58,68,101,115,99,114,105,112,116,105,111,110,62,32,60,47,114,100,102,58,82,68,70, 62,32,60,47,120,58,120,109,112,109,101,116,97,62,32,60,63,120,112,97,99,107,101,116,32,101,110,100,61,34,114,34, 63,62,255,127,105,182,0,0,67,81,73,68,65,84,120,218,237,157,7,120,85,197,182,199,79,26,36,129,4,72,232,189, 133,222,33,244,222,123,9,45,33,141,174,128,34,2,42,130,52,169,10,34,138,229,42,118,164,40,98,3,20,203,179,87, 64,20,148,98,232,82,165,43,234,149,139,48,111,173,157,217,97,115,76,224,156,228,156,147,153,125,254,235,251,126,223,125, 79,66,216,123,102,205,204,127,207,172,89,203,33,132,112,0,0,0,0,0,0,96,87,208,8,0,0,0,0,0,0,130, 23,0,0,0,0,0,0,8,94,0,0,0,0,0,0,32,120,1,0,0,0,0,0,128,224,5,0,0,0,0,0,0, 130,23,0,0,0,0,0,0,8,94,0,0,0,0,0,0,193,139,70,0,0,0,0,0,0,126,47,120,97,55,180,64, 34,15,145,151,8,35,66,37,97,242,191,69,17,65,104,166,172,13,3,17,0,0,0,0,16,188,122,219,255,17,105,196, 65,249,191,95,19,175,18,11,137,209,68,15,34,150,40,79,228,131,224,5,0,0,0,0,128,224,213,205,158,35,174,18, 127,133,4,7,30,47,93,34,223,217,144,144,64,110,84,147,203,196,5,226,40,177,155,88,39,133,112,25,8,94,0,0, 0,0,0,8,94,93,172,29,177,145,184,24,16,16,112,113,120,82,181,3,235,87,119,253,253,173,149,157,197,67,115,155, 137,17,73,85,69,251,214,37,69,237,26,81,162,112,116,168,8,12,8,48,197,48,239,8,63,78,244,39,106,218,117,7, 24,3,17,0,0,0,0,16,188,246,48,142,233,109,78,124,31,16,224,184,82,178,120,248,95,179,167,52,76,59,119,32, 245,202,133,67,67,197,169,180,20,113,240,135,4,177,227,139,1,98,195,154,174,226,206,177,117,68,141,234,133,68,96,96, 128,185,11,124,138,255,46,49,141,40,5,193,11,0,0,0,0,0,193,171,170,241,69,182,201,196,1,218,237,189,20,31, 87,233,208,103,27,123,95,56,127,112,232,85,22,190,86,206,31,76,21,91,63,142,19,15,206,110,34,122,117,45,39,42, 87,140,20,65,65,134,0,254,75,238,24,167,16,149,228,197,57,8,94,0,0,0,0,0,8,94,165,50,59,148,36,94, 34,254,137,42,148,247,252,154,103,58,28,112,22,188,86,206,238,79,21,123,191,139,23,239,175,235,46,18,250,87,18,121, 210,227,128,121,231,247,4,177,86,134,60,64,240,2,0,0,0,0,64,240,42,183,219,123,59,177,159,197,235,232,212,106, 251,127,249,49,241,210,141,132,175,201,225,29,9,98,209,236,166,162,101,211,226,34,50,34,143,25,243,251,46,209,83,166, 66,131,224,5,0,0,0,0,128,224,85,198,98,136,173,20,175,251,15,133,45,252,146,182,117,240,57,87,68,47,115,124, 87,146,248,230,253,190,34,53,33,70,200,236,15,127,19,59,137,100,93,66,29,48,16,1,0,0,0,0,193,235,31,22, 46,51,50,252,55,166,98,129,179,27,215,116,59,225,170,232,53,217,246,73,127,49,102,120,13,81,190,108,132,185,227,203, 57,127,251,17,145,16,188,0,0,0,0,128,224,133,224,85,193,66,228,69,180,203,17,249,67,254,251,228,226,150,123,221, 21,189,116,249,77,252,188,117,176,152,125,111,35,145,47,60,152,59,239,146,20,190,53,32,120,1,0,0,0,0,193,11, 193,171,138,245,33,142,231,203,23,252,219,99,15,182,56,158,89,6,7,87,248,238,163,126,34,121,112,140,40,28,21,202, 157,248,15,177,132,168,8,193,11,0,0,0,0,8,94,8,94,21,178,56,240,142,236,9,170,206,118,105,218,164,6,7, 178,43,122,41,207,175,248,246,131,126,162,77,139,18,220,145,92,241,237,52,145,10,193,11,0,0,0,0,8,94,8,94, 21,44,150,216,155,55,111,208,197,165,243,155,31,203,142,224,181,66,187,197,130,226,131,205,116,102,171,137,218,16,188,0, 0,0,0,128,224,133,224,205,77,11,32,202,18,191,4,211,78,239,188,251,98,15,228,68,240,114,124,239,161,237,67,196, 168,148,106,230,165,182,95,137,33,16,188,0,0,0,0,128,224,133,229,182,113,73,226,99,209,81,121,47,172,95,221,245, 120,78,119,122,57,204,225,217,101,173,69,213,202,5,204,48,135,199,136,194,16,188,0,0,0,0,128,224,133,229,230,78, 111,61,226,98,190,240,144,191,190,120,183,247,209,156,138,94,102,207,230,193,162,93,171,146,220,193,87,120,23,153,168,5, 193,11,0,0,0,0,8,94,88,110,90,18,241,223,122,181,163,207,80,104,194,223,158,16,189,28,230,48,227,174,6,34, 44,204,72,97,118,136,24,32,211,163,65,240,2,0,0,0,0,130,23,230,115,11,34,102,115,24,66,253,218,209,219,60, 33,120,205,16,135,111,62,232,43,74,149,8,55,243,246,78,133,224,5,0,0,0,0,4,47,44,55,83,150,173,100,209, 123,223,228,250,135,73,172,94,245,148,240,253,252,157,222,162,73,195,162,220,225,255,35,30,242,85,92,47,6,34,0,0, 0,0,32,120,97,206,86,138,51,44,132,133,6,93,216,253,205,160,63,61,37,120,153,227,187,146,68,183,142,101,205,203, 108,235,32,120,1,0,0,0,0,193,11,203,45,107,71,92,40,91,58,226,192,190,109,241,23,61,41,122,15,239,24,34, 70,36,85,19,121,242,4,114,231,191,67,148,129,224,5,0,0,0,0,4,47,44,55,108,26,239,196,142,25,94,253,215, 236,86,98,203,138,179,251,83,197,109,163,106,154,249,122,63,149,241,195,16,188,0,0,0,0,128,224,133,249,212,74,16, 187,11,20,200,115,97,243,135,253,206,120,82,240,50,191,166,37,139,73,183,213,17,97,161,193,166,232,45,3,193,11,0, 0,0,0,8,94,152,175,141,203,3,95,46,86,56,108,151,167,119,121,141,157,94,202,224,48,113,92,29,115,167,119,19, 4,47,0,0,0,0,32,120,97,185,97,92,41,237,234,195,243,154,29,243,180,224,53,118,122,127,78,22,183,143,174,41, 242,132,24,49,189,124,145,45,26,130,23,0,0,0,0,16,188,48,95,90,13,226,98,149,74,5,142,30,223,157,116,217, 27,162,247,236,254,20,49,52,161,170,185,211,251,16,4,47,0,0,0,0,32,120,97,190,52,46,61,60,151,248,231,225, 249,205,210,188,33,120,25,170,238,70,41,203,202,176,67,92,38,166,56,60,84,145,13,3,17,0,0,0,0,16,188,48, 87,140,11,82,236,15,12,12,184,120,228,167,196,63,188,37,122,143,82,158,222,70,245,138,152,21,217,250,67,240,2,0, 0,0,0,130,23,230,75,187,139,184,114,223,164,250,199,188,37,120,205,138,108,37,138,25,101,136,15,202,112,10,8,94, 0,0,0,0,64,240,194,124,98,149,136,63,106,215,136,58,114,242,231,228,127,188,41,122,191,122,191,143,8,15,51,210, 149,29,118,228,176,4,49,6,34,0,0,0,0,32,120,97,238,216,19,1,1,142,75,111,175,234,114,196,155,130,151,11, 83,76,191,171,1,59,199,21,226,81,8,94,0,0,0,0,64,240,194,124,101,97,196,159,197,139,132,125,239,77,193,203, 80,222,95,209,182,101,73,51,115,67,31,8,94,0,0,0,0,64,240,194,124,101,171,56,47,239,7,175,119,63,238,109, 209,251,243,230,193,162,74,229,130,236,36,191,18,181,32,120,1,0,0,0,0,193,11,243,133,13,230,20,101,227,111,169, 117,193,219,130,151,121,246,209,214,230,46,239,42,8,94,0,0,0,0,64,240,194,124,97,165,136,223,27,214,43,114,252, 244,222,148,43,222,22,188,231,168,252,240,176,196,170,102,126,222,84,8,94,0,0,0,0,64,240,194,124,97,111,208,229, 181,63,143,252,152,248,63,95,236,242,114,81,138,202,21,35,217,89,78,17,21,33,120,1,0,0,0,0,193,11,243,182, 53,225,56,222,59,111,173,189,217,23,130,151,47,176,45,123,160,5,59,203,85,135,155,165,135,49,16,1,0,0,0,0, 193,11,203,174,29,10,11,11,222,235,11,193,107,210,44,182,40,59,204,63,68,21,8,94,0,0,0,0,64,240,194,188, 109,47,179,158,252,250,253,62,39,125,37,120,233,223,18,209,81,161,236,52,95,16,145,16,188,0,0,0,0,128,224,133, 121,211,110,231,16,131,249,211,27,31,242,149,224,61,75,23,216,146,6,199,176,211,92,34,250,66,240,2,0,0,0,0, 130,23,230,77,235,200,153,19,198,142,168,241,59,197,216,94,245,149,232,221,250,81,63,179,236,240,199,68,32,4,47,0, 0,0,0,32,120,97,222,178,210,196,223,109,91,150,56,78,165,128,175,248,50,150,247,158,9,245,204,220,188,253,33,120, 1,0,0,0,0,193,11,243,150,241,238,234,129,98,69,194,142,158,74,75,246,169,224,221,67,21,216,202,151,137,96,231, 249,145,136,130,224,5,0,0,0,0,4,47,204,91,246,92,96,96,192,197,147,123,124,43,120,57,77,217,232,161,213,217, 121,254,38,186,67,240,2,0,0,0,0,130,23,230,45,75,102,77,249,209,91,61,15,249,82,240,50,223,126,216,79,132, 132,4,178,3,173,131,224,5,0,0,0,0,4,47,204,91,198,249,112,197,212,73,245,191,246,181,224,101,146,6,197,152, 197,40,106,120,83,240,194,96,48,24,12,6,131,101,165,43,32,38,236,111,193,28,86,208,170,69,137,207,115,67,240,126, 245,94,31,17,25,17,194,78,180,214,145,69,198,6,8,94,24,12,6,131,193,96,16,188,176,156,218,193,232,66,161,219, 115,67,240,30,223,149,40,90,54,41,198,78,116,130,168,104,83,193,91,155,120,2,184,196,163,196,195,196,98,98,30,49, 141,184,131,72,33,122,58,210,75,98,151,32,2,48,108,125,242,49,92,146,104,70,244,34,82,137,9,178,79,230,203,62, 90,74,44,83,200,127,38,18,97,154,180,47,251,112,17,162,14,209,142,136,39,198,16,147,137,153,196,66,71,122,25,118, 213,218,56,39,227,154,223,105,186,244,163,4,249,222,149,137,32,63,30,103,236,175,49,142,244,52,161,131,137,177,196,189, 196,28,57,198,30,33,30,195,218,144,35,120,45,41,13,193,11,99,219,18,28,28,120,44,55,4,47,51,119,90,44,59, 209,101,41,106,188,46,120,71,189,247,155,207,112,164,87,147,19,192,43,252,74,124,79,108,144,11,195,16,162,130,47,251, 87,119,200,194,137,214,82,104,241,162,250,190,35,61,115,202,105,141,253,98,162,66,237,27,34,63,120,135,72,31,125,93, 250,236,113,140,223,127,241,11,241,161,20,199,131,136,80,27,141,179,0,249,97,51,212,50,206,118,17,231,209,239,62,37, 8,130,23,198,147,204,229,115,7,134,94,201,13,193,187,239,187,120,145,39,253,242,218,122,27,10,94,222,201,16,181,250, 141,21,45,110,95,2,110,66,243,177,15,138,102,183,46,16,77,70,207,21,177,67,103,136,250,9,147,169,237,198,136,152, 142,9,162,108,147,174,162,104,181,70,34,60,170,248,205,38,53,22,107,95,200,93,200,88,94,108,32,110,13,95,12,146, 139,238,120,226,77,98,239,205,22,136,240,232,18,162,88,245,198,162,108,211,110,162,74,167,33,134,31,115,159,196,14,155, 105,244,81,179,91,23,138,230,227,22,41,227,63,242,185,215,228,98,27,243,233,195,72,98,21,241,195,205,218,55,180,64, 97,17,85,161,166,40,89,183,149,168,212,182,191,168,209,115,132,168,51,96,188,104,144,52,69,52,30,49,91,52,29,61, 79,185,54,206,201,184,230,119,106,144,120,183,225,71,149,218,13,48,222,59,178,100,197,27,181,17,127,124,205,37,202,106, 54,214,248,116,164,141,220,157,255,242,102,126,80,160,84,37,81,170,126,91,81,177,77,156,168,209,107,164,168,23,63,81, 52,74,189,47,125,140,141,121,64,180,24,183,24,235,67,206,231,133,181,216,225,133,177,113,150,4,241,203,143,67,46,230, 214,46,239,224,126,149,216,145,254,146,11,134,45,4,175,220,221,49,6,91,159,165,31,10,250,111,192,67,12,223,112,74, 36,189,178,79,196,61,241,133,232,50,231,85,99,97,168,220,110,160,136,40,94,46,171,69,101,141,35,61,253,93,144,159, 137,220,0,185,187,184,54,171,197,182,68,237,22,134,208,226,69,181,251,130,55,197,128,167,190,22,201,175,30,16,35,54, 158,209,198,31,70,190,123,206,250,78,227,124,60,198,187,16,203,137,35,153,181,47,11,90,246,77,246,209,78,51,94,54, 124,54,113,245,207,98,216,91,39,48,150,205,241,188,254,87,49,228,229,93,162,251,194,183,13,113,92,177,117,191,204,124, 149,133,99,146,226,31,148,92,72,233,157,172,252,160,74,231,196,140,113,54,112,249,102,145,186,238,23,49,106,211,5,248, 128,183,160,182,181,244,65,123,8,94,24,219,74,238,255,159,55,15,62,155,91,130,247,253,215,123,136,160,160,0,33,99, 151,236,34,120,235,154,131,45,113,77,26,38,31,31,193,98,173,247,146,247,140,93,200,34,85,26,100,182,112,190,66,12, 228,227,124,155,10,220,58,114,119,123,75,102,11,111,173,190,183,138,206,179,86,137,193,207,127,47,134,189,125,210,30,125, 190,246,160,245,29,155,123,185,141,43,200,56,219,77,153,181,111,181,110,169,162,253,148,103,69,220,147,95,66,212,230,240, 163,150,63,190,26,13,157,238,220,198,219,136,91,136,188,10,140,183,104,185,163,191,225,95,31,146,117,90,26,187,243,189, 31,126,95,164,190,126,4,125,154,11,36,174,218,99,246,199,49,217,95,16,188,48,199,243,220,255,63,126,49,224,84,110, 9,222,189,91,227,69,229,10,145,66,198,183,133,219,68,240,142,49,39,191,17,27,79,99,2,202,37,120,23,165,195,212, 231,69,153,198,157,51,19,191,83,237,176,235,203,241,142,196,157,153,9,48,222,93,236,120,223,75,34,97,197,79,98,196, 59,103,109,217,199,125,31,253,200,250,206,225,94,218,189,227,75,147,27,157,219,183,116,163,14,162,213,132,71,197,144,149, 187,109,219,190,185,13,127,152,241,238,120,38,254,221,57,151,198,91,121,226,1,231,231,169,208,178,183,232,58,247,53,145, 242,218,33,244,155,2,88,124,230,117,8,94,152,105,79,115,255,111,253,184,223,137,220,18,188,103,247,167,136,158,93,140, 227,232,83,68,77,155,8,222,215,248,241,59,78,95,129,201,71,37,241,59,237,5,58,50,237,235,188,112,222,170,169,208, 229,16,160,251,157,23,94,222,221,238,187,236,19,191,217,97,172,209,123,148,215,194,25,100,72,200,117,237,203,113,182,221, 230,189,142,157,59,31,195,27,7,113,143,127,238,60,118,199,251,112,188,113,86,141,5,206,59,250,28,86,53,244,205,227, 232,35,149,124,133,62,62,157,195,156,32,120,97,108,207,112,255,127,255,89,220,201,220,18,188,204,194,153,141,205,108,13, 113,54,17,188,251,248,241,7,191,240,3,38,32,5,233,189,244,3,17,211,33,222,58,41,62,160,203,110,175,12,93,248, 215,142,238,128,167,191,241,187,93,70,22,245,150,54,136,240,96,27,255,107,71,151,63,94,237,18,6,162,51,28,179,93, 187,255,109,214,126,31,235,131,241,54,142,248,201,252,55,235,15,185,75,164,172,59,140,254,80,56,180,205,226,31,205,32, 120,97,166,189,196,253,191,235,235,129,167,115,83,240,110,249,168,159,8,8,48,226,120,151,233,46,120,201,90,92,11,103, 56,131,9,72,97,218,76,122,220,121,199,104,128,226,98,247,58,161,91,119,208,4,227,194,143,191,94,126,225,120,89,217, 22,175,122,168,125,107,202,212,81,25,109,220,250,206,101,8,87,80,16,206,252,96,233,167,78,94,26,111,29,173,190,192, 23,60,113,39,67,125,56,134,222,210,111,97,16,188,48,211,248,6,187,216,183,45,254,124,110,10,222,243,7,135,138,234, 85,10,178,67,237,177,129,224,125,153,31,157,83,203,96,242,209,96,114,164,155,243,78,162,119,178,130,66,119,172,76,211, 100,60,35,167,9,235,243,200,255,249,253,237,126,75,159,181,243,192,46,222,146,235,66,67,40,53,30,118,116,181,201,206, 193,180,244,240,152,155,229,188,195,143,118,215,3,78,125,39,251,237,78,75,127,66,240,194,140,99,187,171,191,166,37,95, 202,77,193,203,76,24,83,219,116,210,210,186,10,94,249,236,198,123,224,200,75,175,248,192,6,137,247,88,23,207,4,133, 196,238,92,235,37,180,94,15,109,66,159,17,124,17,207,210,95,101,115,184,171,155,241,187,216,15,16,159,171,143,232,173, 217,231,150,235,138,11,120,96,188,229,147,39,141,198,239,228,76,17,252,113,133,246,214,231,174,134,197,31,66,33,120,97, 86,251,146,66,9,46,228,182,216,101,54,172,233,106,134,53,140,212,88,240,14,51,7,27,118,135,180,206,219,200,116,207, 101,161,203,85,208,86,155,207,211,238,158,229,232,35,107,28,54,165,159,203,105,252,46,31,133,91,251,156,99,187,209,182, 154,9,28,250,56,177,244,97,151,28,142,185,8,98,145,249,251,122,46,218,136,54,214,55,76,237,57,167,190,133,224,133, 57,126,10,15,11,78,83,65,240,110,255,124,128,40,28,29,42,100,134,3,237,4,175,60,22,53,6,91,219,187,159,194, 228,163,169,232,173,29,55,206,186,128,6,228,146,216,77,176,10,49,44,188,255,134,211,129,201,246,89,158,211,54,230,252, 196,248,64,213,23,142,179,150,125,249,76,14,198,92,21,71,122,105,99,227,119,197,191,176,29,109,171,97,254,102,203,188, 217,6,130,23,230,108,103,171,84,46,248,141,10,130,247,192,15,9,162,86,245,40,118,170,157,14,153,143,87,51,193,155, 215,28,108,200,206,160,55,28,58,32,251,114,84,46,136,221,137,25,41,176,250,223,110,28,219,162,79,254,13,151,60,150, 237,212,43,27,109,60,195,250,65,129,138,87,122,51,240,153,45,102,95,238,206,65,138,191,12,127,136,127,233,71,180,171, 222,197,38,152,24,8,94,152,213,34,57,126,55,113,96,204,103,42,8,222,83,105,41,162,125,235,146,236,84,92,166,179, 156,134,130,183,169,57,216,32,82,244,134,227,100,45,19,103,17,31,138,221,165,25,98,119,224,29,232,139,44,251,231,93, 107,255,4,103,87,236,114,122,41,136,93,219,237,236,85,117,211,31,194,173,98,151,127,23,218,84,79,250,44,253,208,234, 7,145,16,188,48,171,181,229,190,127,102,89,155,31,84,16,188,204,176,196,42,236,84,231,137,88,13,5,239,115,252,200, 28,67,132,201,199,86,241,188,115,125,36,118,231,155,255,102,167,153,43,209,7,55,160,82,187,1,102,223,220,237,102,27, 47,206,136,137,190,251,105,180,165,141,136,29,62,203,244,137,165,110,248,67,32,241,184,233,19,156,191,21,109,169,47,205, 199,62,104,250,192,163,153,244,53,4,175,159,27,167,93,185,114,96,91,194,31,170,8,222,197,247,55,53,11,80,116,215, 80,240,242,206,180,81,102,20,147,143,254,112,126,91,95,237,242,90,51,49,224,226,212,205,146,202,239,207,214,173,124,107, 14,99,142,255,69,91,218,139,1,79,125,109,250,196,143,110,248,196,36,132,161,217,135,18,181,91,152,62,208,26,130,23, 230,108,159,210,133,181,83,148,146,236,138,42,130,247,141,151,187,152,14,59,82,39,193,75,86,151,31,55,186,98,45,76, 60,54,130,11,59,72,127,156,225,69,223,153,105,46,186,92,166,20,237,126,99,58,207,90,237,246,165,66,178,17,230,223, 233,58,103,45,218,209,134,112,121,95,139,95,132,184,224,19,29,28,150,42,133,104,67,91,133,161,5,64,240,194,172,198, 113,75,127,84,175,90,232,200,233,189,41,202,8,222,109,159,246,55,29,118,190,46,130,215,154,157,161,217,152,7,48,249, 216,243,50,140,71,75,215,90,124,231,30,248,78,182,99,53,39,184,216,198,183,155,127,167,97,202,52,180,163,77,225,44, 27,22,223,40,119,19,159,104,136,75,139,182,13,65,187,39,139,62,135,224,245,99,171,79,92,162,11,107,191,157,59,48, 244,170,42,130,151,196,183,8,9,54,114,241,174,209,72,240,22,49,7,91,255,255,124,133,201,199,70,36,189,178,207,58, 145,54,240,176,223,220,237,176,148,175,69,123,187,144,115,245,141,163,89,166,29,202,162,141,107,155,63,223,120,196,108,180, 161,255,8,222,218,174,108,80,112,209,10,136,93,59,20,161,217,105,237,251,188,16,188,48,103,139,39,254,185,123,124,221, 83,170,136,93,147,10,229,34,216,177,190,214,72,240,54,48,7,27,31,171,97,2,178,211,49,233,49,235,68,218,211,131, 62,83,197,252,189,124,217,6,109,157,173,248,221,40,23,218,249,9,236,226,65,240,58,249,68,23,243,231,80,81,207,30, 116,152,250,252,77,227,250,33,120,253,219,22,114,191,175,124,186,253,65,213,4,111,243,216,98,236,88,123,53,18,188,19, 248,81,185,126,55,38,31,91,31,161,15,243,116,8,12,199,8,163,157,93,167,253,148,103,205,190,120,203,157,112,17,20, 149,240,59,193,91,249,6,126,193,133,141,68,199,233,43,208,110,54,128,203,194,91,250,125,210,13,250,29,130,215,143,237, 139,192,192,128,191,142,238,74,252,75,53,193,219,183,71,121,118,172,11,26,9,222,119,141,203,48,243,214,97,2,178,33, 13,18,239,241,232,197,53,178,169,72,131,148,61,138,215,106,110,246,69,215,155,180,113,95,132,139,248,181,224,141,202,194, 47,110,193,105,156,205,250,253,173,19,46,149,150,246,148,224,13,132,118,212,206,10,16,127,197,214,47,242,141,106,98,151, 185,37,181,58,59,214,85,246,45,213,5,47,89,24,142,199,252,102,87,113,149,7,252,101,188,3,229,167,179,5,199,199, 203,182,219,225,66,59,191,135,80,6,191,142,183,207,236,150,126,65,243,207,249,35,22,109,230,95,97,78,158,18,188,121, 160,31,181,51,46,93,122,101,195,234,46,251,84,20,188,83,38,212,203,8,62,215,64,240,142,229,103,173,209,107,36,38, 31,155,210,115,241,59,166,63,126,154,67,95,41,136,140,12,217,131,43,23,90,22,181,59,93,201,105,92,189,199,112,136, 93,127,26,167,139,54,154,254,241,113,22,126,113,175,233,67,124,12,142,54,179,7,77,70,222,111,246,251,242,155,204,11, 30,17,188,161,208,143,90,89,94,226,64,225,232,208,19,39,247,36,93,81,81,240,206,158,210,208,116,224,112,149,5,47, 89,176,57,129,114,169,83,76,62,246,36,238,241,207,77,127,220,150,67,127,25,154,17,83,74,199,112,104,91,119,118,113, 14,88,5,111,51,87,46,3,218,34,99,10,9,118,62,57,26,184,124,179,241,225,213,121,214,42,163,66,92,235,137,143, 137,86,119,60,34,90,142,95,234,21,248,119,183,189,235,63,162,239,163,31,105,19,255,28,59,108,102,70,74,203,81,55, 40,31,60,96,249,183,24,83,182,137,223,61,227,114,22,29,79,9,222,48,104,72,173,172,41,241,247,224,126,21,207,156, 59,144,170,164,224,93,56,179,177,233,192,249,21,23,188,53,205,193,150,184,106,143,72,93,247,11,176,66,11,53,103,57, 208,125,55,133,23,72,217,207,59,115,224,43,92,42,251,91,254,61,44,92,176,88,101,59,156,33,203,124,200,124,59,219, 252,153,250,9,147,245,91,188,223,57,43,226,95,250,81,180,191,247,57,81,103,192,120,81,162,78,75,235,59,231,42,92, 178,85,245,246,43,90,61,214,124,222,166,55,250,216,196,174,191,125,232,247,248,103,102,159,127,231,194,28,12,193,235,135, 54,157,227,99,151,204,107,118,88,69,177,203,44,157,159,113,49,165,128,226,130,55,89,149,5,73,117,194,10,22,17,165, 27,182,23,77,70,207,53,118,171,120,113,215,101,82,181,20,159,216,157,211,172,12,53,122,142,192,66,149,13,120,215,81, 182,225,127,110,208,206,83,204,118,78,121,237,144,86,185,133,121,71,245,6,227,135,47,240,238,226,144,26,226,77,98,5, 241,44,241,20,183,135,151,224,223,253,162,249,145,198,12,122,110,155,14,249,153,127,203,194,55,140,247,232,52,115,165,222, 59,154,52,111,242,142,59,159,16,129,19,46,101,103,128,224,245,95,227,11,134,223,231,9,9,252,253,200,143,137,127,64, 240,122,68,244,222,79,156,38,206,131,127,193,11,245,239,89,45,228,9,43,126,210,109,119,113,123,54,125,36,197,46,177, 131,156,166,141,203,176,242,69,190,134,201,247,138,106,221,82,69,153,216,78,198,110,100,145,42,13,188,138,108,195,238,89, 180,113,136,217,198,124,228,175,75,86,1,222,57,205,100,108,172,38,38,19,109,57,238,123,148,151,74,90,143,114,179,26, 96,237,184,113,234,158,194,144,79,202,182,251,41,147,231,111,198,127,86,172,122,99,173,82,109,241,59,181,24,183,88,84, 233,52,196,40,89,159,55,127,65,108,158,100,77,27,8,94,152,179,245,224,203,106,99,71,212,216,162,170,216,213,41,164, 1,184,181,195,89,148,232,76,44,182,78,84,221,23,190,165,252,226,211,119,217,199,230,243,110,206,198,187,135,154,239,218, 109,254,27,218,22,223,232,114,255,43,162,124,243,158,42,44,108,33,89,180,115,42,255,57,139,3,29,218,148,219,211,233, 189,120,71,181,94,102,217,5,20,24,191,202,183,109,151,217,107,204,118,124,59,171,211,21,29,178,162,112,40,24,87,4, 188,129,255,95,38,254,36,254,0,6,39,92,77,23,137,75,107,254,101,252,97,178,51,34,34,207,249,195,59,134,92,86, 89,240,206,210,228,210,26,200,246,2,26,73,44,114,104,146,15,147,69,185,124,214,15,178,241,174,213,117,60,102,55,143, 137,235,37,76,202,108,209,253,137,83,180,17,179,120,72,17,221,120,135,69,198,41,123,147,172,196,110,94,243,217,122,60, 184,65,249,75,104,78,130,102,45,209,94,241,241,122,159,17,23,61,228,46,101,219,213,210,166,11,157,158,189,172,14,33, 25,12,159,76,100,50,206,30,147,31,28,117,137,66,88,63,114,228,199,30,17,188,81,196,255,201,152,34,152,186,198,139, 210,165,248,126,149,206,157,61,144,122,85,101,193,171,83,90,50,144,237,201,39,84,23,145,210,97,218,11,166,63,190,146, 141,247,124,148,255,110,163,212,251,52,218,209,61,110,45,182,97,178,222,145,94,204,33,88,65,95,138,207,248,168,88,119, 88,105,177,235,212,166,115,53,25,171,111,168,28,255,234,20,203,25,239,244,236,29,205,63,227,112,28,85,253,162,94,252, 68,235,59,112,21,212,10,88,39,212,20,188,124,51,54,205,145,94,40,160,35,116,165,178,246,10,241,207,154,103,59,252, 162,178,216,101,70,167,232,83,120,2,228,104,2,154,199,115,79,236,208,25,106,231,121,28,53,199,92,136,22,185,249,126, 67,116,139,221,109,57,254,97,103,81,198,33,40,229,20,247,35,190,204,101,196,21,171,220,182,53,123,143,182,182,235,8, 77,198,104,94,213,63,38,134,188,188,203,218,174,165,156,158,255,9,254,239,45,110,95,162,203,71,208,61,88,27,212,22, 188,108,7,137,191,136,119,16,211,171,164,53,230,84,100,77,99,139,109,59,187,95,205,84,100,86,250,116,47,39,228,165, 39,7,4,175,173,39,160,145,220,197,124,241,73,147,130,7,99,220,120,183,252,230,223,235,56,125,133,22,98,215,41,83, 0,135,156,84,212,192,135,238,118,152,69,38,20,110,91,167,29,188,86,26,141,209,97,70,252,110,231,36,117,243,239,210, 7,179,108,215,71,50,121,254,221,252,103,156,105,69,197,103,79,88,177,211,234,23,189,176,46,232,33,120,127,14,9,9, 60,78,255,123,145,104,13,125,169,148,69,16,223,133,135,7,95,220,253,237,160,223,85,23,187,76,179,216,98,236,88,123, 33,120,109,63,1,25,59,160,149,219,13,84,250,38,189,101,65,74,114,227,221,90,153,127,143,99,97,85,23,187,13,146, 166,88,223,115,170,38,254,19,225,208,160,200,4,135,236,88,218,182,171,70,227,51,92,245,176,163,225,235,127,181,182,109, 181,172,158,95,213,112,134,54,147,30,183,62,127,16,214,5,61,4,239,55,165,74,230,59,31,24,24,192,191,117,167,60, 6,129,169,97,44,42,46,199,199,85,58,165,195,238,46,83,161,108,4,59,214,215,16,188,182,159,128,140,116,93,49,29, 19,116,200,239,153,101,74,172,44,222,237,33,254,59,77,71,207,83,94,236,246,122,104,147,245,29,167,104,228,63,157,148, 255,168,184,254,200,58,69,179,241,57,214,161,120,101,64,75,118,134,141,153,60,255,32,254,179,138,173,251,41,59,246,44, 233,246,90,97,77,208,71,240,190,26,18,18,32,198,141,172,121,32,32,192,113,69,230,16,12,132,214,204,117,227,99,213, 239,131,131,3,47,126,181,169,207,73,29,196,238,233,189,41,34,36,56,192,204,69,9,193,107,239,9,232,118,238,226,154, 125,110,81,184,164,237,126,171,96,137,117,183,208,4,199,23,170,44,118,57,115,132,229,253,102,104,230,63,75,204,103,231, 208,19,13,226,51,3,52,106,219,140,139,128,29,166,62,175,195,233,75,207,76,222,225,101,35,47,243,61,203,85,207,239, 189,3,235,129,94,130,151,111,21,138,13,171,187,254,94,178,120,62,206,17,119,136,131,199,161,55,115,213,120,209,93,206, 121,119,31,154,219,52,77,7,177,203,108,251,180,127,70,61,116,8,94,219,79,64,115,141,12,6,67,167,43,43,8,157, 98,236,74,187,179,51,86,173,251,80,229,119,119,107,244,26,105,190,219,3,154,249,78,25,179,95,146,94,217,167,124,254, 102,87,63,150,20,105,219,140,10,146,181,251,223,166,172,239,14,126,225,7,235,216,44,63,42,139,66,36,92,192,65,197, 231,111,122,203,124,243,217,151,96,61,208,75,240,222,194,191,227,173,85,93,196,131,179,155,252,76,187,188,151,100,158,198, 60,208,157,185,102,124,220,247,87,195,122,69,142,159,216,157,124,89,23,193,251,250,138,206,230,36,48,18,130,215,246,19, 208,51,220,197,173,239,92,166,67,89,97,35,77,158,59,233,214,226,158,248,66,105,177,219,102,242,147,89,222,110,215,192, 119,30,84,249,116,192,105,247,113,152,70,237,58,217,186,43,205,187,212,170,250,111,167,25,47,91,219,56,56,171,252,187, 170,86,116,172,59,104,2,50,51,104,42,120,185,130,215,63,75,230,52,19,231,15,166,94,29,28,87,137,119,120,175,200, 35,75,152,239,45,72,238,42,92,125,123,85,151,35,186,136,93,102,209,236,166,102,53,153,238,118,20,188,100,209,68,23, 57,54,248,72,246,53,226,19,226,71,121,50,114,210,145,94,146,151,171,200,252,151,115,39,203,246,176,35,198,132,223,117, 222,58,133,115,240,190,104,46,74,175,186,216,191,29,50,226,74,169,106,146,202,185,118,45,98,97,136,102,11,87,9,213, 219,56,254,197,29,214,246,205,175,248,197,191,214,50,69,224,110,243,153,57,171,132,202,98,151,41,85,191,173,217,190,61, 50,121,175,122,25,39,0,107,246,42,249,252,252,161,47,159,145,63,252,139,66,148,234,35,120,185,10,206,249,225,73,85, 13,209,242,229,166,62,23,10,71,229,61,39,23,240,170,208,159,62,53,190,48,248,31,218,101,255,223,216,225,53,126,210, 73,236,50,195,134,84,49,83,146,53,178,131,224,37,43,196,183,251,137,55,137,99,14,212,60,255,23,42,47,172,229,154, 245,48,159,179,143,139,253,253,31,29,222,171,207,210,15,173,125,80,80,179,133,235,126,213,219,152,11,141,56,174,21,236, 80,141,15,136,111,137,95,50,27,143,92,104,69,249,172,34,215,10,163,188,156,133,143,180,83,253,163,200,233,20,64,200, 44,87,92,42,247,176,38,176,190,219,207,89,186,56,14,153,248,138,120,143,88,41,195,92,199,201,13,128,130,118,19,188, 229,136,35,29,90,151,20,167,210,82,104,151,119,232,213,117,47,116,60,44,119,113,182,18,249,160,67,125,102,124,51,245, 239,54,45,74,156,57,185,39,233,178,78,98,247,87,242,157,246,228,67,114,34,46,171,171,224,149,199,218,3,137,143,50, 91,80,74,55,234,96,28,197,114,12,23,231,104,237,185,104,163,24,240,212,215,198,209,27,239,70,164,190,126,196,184,21, 205,41,119,184,96,193,136,119,206,218,22,149,69,33,47,148,238,164,12,178,94,86,75,126,245,128,210,130,161,86,223,91, 205,247,26,175,153,216,205,72,69,214,123,233,7,186,164,34,83,154,18,181,91,24,185,108,57,124,103,196,198,51,202,139, 93,167,66,19,45,178,240,147,94,142,140,210,229,199,212,125,151,149,187,141,242,221,97,5,139,216,125,99,227,8,177,129, 83,30,18,49,186,11,94,22,180,187,106,215,136,18,7,127,72,184,86,49,43,181,218,126,74,85,246,15,253,217,147,136, 231,245,137,213,34,142,230,207,23,114,238,195,55,122,28,215,109,119,247,0,249,78,173,234,81,66,166,182,11,215,77,240, 146,21,225,155,238,206,131,189,114,135,193,162,243,172,85,34,113,213,158,116,145,167,73,137,89,127,199,18,35,184,206,197, 254,55,202,152,242,81,171,202,239,149,188,246,160,213,63,195,53,19,188,25,177,153,137,107,210,148,110,103,22,189,93,238, 127,69,57,186,47,124,75,244,125,244,35,67,56,234,82,1,208,221,204,23,100,253,84,79,169,150,89,152,17,251,52,95, 148,213,131,159,68,252,11,219,197,160,103,191,51,50,78,240,7,104,183,249,111,136,118,83,158,17,141,71,204,22,53,122, 143,162,185,176,77,86,2,120,167,220,5,46,167,163,224,101,123,173,72,225,80,177,227,243,1,25,2,230,200,79,137,151, 42,87,140,100,101,255,55,49,20,122,212,171,198,183,150,211,130,130,2,127,223,248,74,215,51,186,137,93,102,59,249,78, 225,168,80,35,94,242,70,142,169,162,224,37,155,238,60,168,187,47,120,211,56,182,130,120,212,15,167,10,107,131,93,244, 129,231,249,231,219,76,122,66,233,119,179,92,150,89,160,107,238,102,101,83,145,1,239,22,154,160,2,18,150,113,217,246, 6,126,18,167,155,224,181,43,188,201,195,59,217,93,230,188,106,236,102,103,34,126,57,12,172,174,110,130,119,84,64,64, 128,88,191,166,235,117,34,38,109,203,224,179,49,149,34,207,210,159,255,79,126,117,33,63,175,231,45,159,20,137,87,238, 25,95,247,132,46,5,38,156,161,11,118,130,125,136,222,99,184,46,130,87,166,160,250,209,28,188,117,250,223,46,18,87, 255,172,252,133,15,112,99,56,180,196,50,33,215,112,43,247,46,77,238,234,238,34,29,179,190,87,73,13,5,47,23,164, 49,22,79,248,169,255,81,103,224,29,46,133,25,113,94,94,29,66,26,252,85,0,15,88,254,173,53,206,221,100,161,55, 179,197,120,90,240,150,230,223,51,105,108,157,127,9,153,77,175,117,63,17,25,17,194,55,206,185,252,112,13,232,83,143, 90,152,188,233,127,101,104,66,149,237,191,254,156,124,89,71,177,203,220,113,75,173,140,20,73,170,11,94,25,43,253,177, 57,88,171,247,24,38,226,158,252,18,19,154,77,224,184,106,203,68,28,230,78,118,6,142,189,86,245,189,186,205,123,61, 203,84,78,26,136,221,94,58,92,8,4,94,10,49,154,185,210,229,204,34,50,243,132,241,179,92,92,5,237,167,104,225, 155,117,135,141,60,236,78,194,247,238,156,204,19,195,222,253,205,49,232,237,11,142,30,235,206,59,218,172,57,231,104,180, 226,172,163,218,179,103,60,46,120,217,210,106,84,43,196,151,214,254,37,102,158,88,220,114,111,254,252,33,191,201,91,136, 77,229,142,8,44,103,22,34,243,81,254,211,190,85,201,95,142,237,74,210,86,236,158,59,152,42,170,85,41,200,14,181, 231,102,142,153,219,130,151,108,162,57,56,171,116,78,52,226,225,48,121,217,139,216,225,179,92,62,246,183,238,238,170,44, 198,248,66,146,67,195,18,194,178,141,131,204,103,231,139,158,240,81,255,130,47,242,90,124,247,14,23,252,165,138,14,39, 46,224,90,197,71,203,69,90,102,236,205,250,56,121,227,5,71,220,155,231,29,157,215,158,115,180,88,117,214,81,239,197, 179,142,152,229,103,28,101,254,115,58,83,188,33,120,31,227,35,233,109,159,196,101,42,106,30,91,212,226,56,149,185,229, 188,162,251,100,102,7,88,206,196,238,83,156,9,163,66,185,136,29,135,182,39,92,210,85,236,50,91,254,175,159,25,206, 240,168,202,130,87,62,159,49,40,27,38,223,139,201,202,166,148,109,218,205,156,120,123,185,147,57,32,238,241,207,149,125, 39,142,101,180,44,40,61,52,19,188,25,2,134,47,204,192,71,253,11,203,241,247,90,23,253,37,204,244,151,129,203,55, 163,13,53,161,245,196,199,172,115,84,223,17,155,126,115,196,175,191,224,232,245,250,121,71,251,87,206,57,26,191,124,214, 81,243,185,51,142,242,79,157,206,82,216,250,82,240,114,160,248,229,69,179,155,100,42,106,56,93,217,244,187,26,28,200, 155,55,232,119,153,166,162,57,118,122,179,101,156,246,234,1,110,235,58,181,162,143,238,223,22,255,183,206,98,151,89,48, 179,177,89,112,34,206,155,130,151,191,6,251,190,113,222,49,100,195,5,7,15,38,55,22,220,162,142,244,114,199,198,96, 228,129,137,9,202,47,46,198,20,114,193,55,90,100,92,144,81,248,146,162,83,154,181,178,154,9,222,65,25,33,35,212, 63,240,83,255,129,243,2,91,252,182,189,27,62,243,18,255,157,86,119,60,130,118,84,57,166,119,19,165,103,219,112,65, 208,186,44,104,125,22,37,187,141,177,246,119,35,119,133,173,47,5,111,77,226,116,239,174,229,196,217,253,41,153,139,222, 67,67,175,46,93,208,156,119,122,249,18,219,81,162,62,244,171,219,23,212,214,113,24,67,249,242,17,59,14,124,175,247, 206,46,195,190,210,179,75,57,118,166,83,206,49,222,158,22,188,214,1,80,150,168,242,204,25,227,40,164,249,202,179,142, 142,175,158,115,244,38,49,156,64,95,148,195,55,93,55,113,118,177,30,89,115,124,39,38,42,251,194,41,117,100,95,175, 116,113,97,125,153,127,190,233,232,121,74,191,87,203,241,75,205,247,122,79,195,203,106,90,100,192,0,94,45,31,60,215, 77,159,105,102,254,93,164,131,204,229,77,4,18,181,180,174,10,90,95,5,173,179,130,214,91,65,235,174,160,245,87,208, 58,44,202,56,17,209,126,212,117,37,221,85,21,188,156,59,245,251,152,138,5,196,222,239,226,111,40,114,30,154,211,108, 95,116,84,232,5,250,249,63,137,100,25,163,5,187,121,234,177,87,248,130,90,59,138,217,61,184,93,127,177,203,236,221, 26,47,42,85,136,100,103,218,102,230,223,245,133,224,189,25,28,15,36,159,199,24,120,229,187,142,16,125,86,164,9,10, 138,199,36,102,83,156,170,31,181,116,97,81,45,168,197,206,227,245,249,75,251,106,40,120,185,162,147,145,247,19,126,234, 31,196,191,244,163,213,103,103,102,211,111,182,169,30,106,100,155,185,147,214,197,193,36,106,41,252,64,116,120,229,156,104, 70,162,182,238,11,103,4,173,163,255,18,180,55,163,244,35,135,173,125,223,70,85,193,203,54,53,40,40,64,188,247,90, 247,155,10,157,245,171,187,30,207,159,47,152,5,239,127,229,229,43,164,44,203,218,170,57,210,75,248,93,73,165,108,12, 58,95,80,115,230,221,181,221,4,21,40,97,103,186,199,249,165,115,83,240,202,65,178,40,163,66,218,178,35,25,3,178, 210,242,211,162,214,243,103,68,227,21,103,69,155,213,231,68,215,215,206,139,126,111,158,55,142,102,248,136,6,19,160,158, 240,194,232,78,81,6,178,62,252,179,92,130,88,229,247,226,42,90,242,157,118,107,40,118,235,32,247,174,95,231,193,94, 146,3,223,25,143,204,30,158,13,61,224,117,142,215,59,94,247,120,253,227,117,144,215,67,119,69,237,205,136,74,93,102, 246,255,243,42,11,222,146,196,95,241,113,149,92,18,59,95,109,234,123,180,126,157,104,206,211,123,149,88,37,211,155,193, 174,89,94,78,124,207,225,31,244,33,113,113,202,29,245,78,80,9,94,219,136,93,102,64,159,138,66,238,244,23,87,73, 240,202,56,105,99,208,21,159,241,185,203,3,149,143,104,98,232,168,166,14,125,221,54,125,249,172,104,187,230,156,232,70, 19,68,28,4,177,45,170,56,57,45,168,198,7,81,147,81,115,116,9,211,88,168,161,224,125,210,104,227,209,115,225,163, 254,32,172,174,207,38,194,68,140,242,64,101,190,62,75,63,68,251,186,32,104,121,157,226,245,138,215,173,38,180,126,241, 58,22,147,69,232,129,55,41,185,112,135,217,255,71,85,22,188,108,27,243,132,4,138,125,219,226,93,18,60,135,119,12, 185,212,184,97,209,173,82,244,158,36,186,66,231,26,198,59,222,203,136,191,105,39,252,28,87,80,59,119,64,207,162,18, 89,145,182,117,176,8,33,95,161,119,92,159,89,3,228,150,224,37,27,109,78,148,69,110,91,237,241,193,92,153,142,121, 106,211,151,113,44,125,33,183,166,47,101,14,214,239,67,241,77,131,223,190,32,82,222,193,78,132,2,225,12,125,93,88, 76,243,234,16,215,237,148,157,33,78,51,177,91,16,233,165,252,7,46,218,227,36,118,155,120,192,135,238,228,223,21,211, 49,193,184,184,233,183,169,191,104,93,225,245,165,143,188,28,198,235,14,175,63,188,14,85,206,70,216,129,47,8,41,93, 211,244,131,186,42,11,94,142,201,189,60,119,90,172,91,226,135,50,56,28,14,11,11,62,79,127,247,130,44,213,234,175, 187,189,156,185,162,29,177,37,32,192,113,185,109,139,146,103,62,124,179,199,9,59,9,93,147,57,83,27,153,217,25,146, 85,17,188,178,237,141,129,86,248,150,231,115,101,160,151,123,234,180,17,208,207,95,215,148,138,37,67,20,115,208,255,32, 41,138,71,98,129,244,236,98,187,106,143,187,197,38,50,142,218,19,215,164,233,242,94,181,53,19,188,253,29,40,17,235, 23,88,46,85,154,233,41,171,121,208,143,158,176,171,31,141,148,98,150,215,133,222,22,49,219,88,238,206,242,58,194,235, 137,138,130,246,102,20,140,155,97,250,195,3,42,11,222,74,92,96,162,101,211,226,226,248,238,36,215,139,15,28,72,189, 186,251,219,65,127,86,174,88,96,191,220,237,229,34,4,117,253,76,236,230,39,150,115,88,8,183,193,136,164,170,59,79, 236,78,250,159,29,197,238,177,93,137,162,69,147,98,66,86,224,171,168,130,224,181,22,17,200,223,110,164,210,147,65,217, 167,174,133,78,112,44,85,43,154,228,58,209,100,199,151,6,6,190,117,65,36,179,40,70,248,132,203,180,189,235,63,230, 228,250,162,139,139,232,36,135,44,39,173,116,92,242,19,95,92,119,227,89,51,193,107,228,189,110,62,246,65,248,168,141, 105,144,52,197,234,163,124,159,167,176,135,253,168,140,117,231,88,151,75,108,60,127,243,60,206,243,57,207,235,60,191,183, 146,177,179,25,161,6,154,138,89,87,40,58,121,189,217,103,159,169,44,120,249,40,126,109,100,68,30,241,245,251,125,221, 22,66,20,10,113,113,236,240,26,167,162,11,229,61,47,119,255,30,151,233,203,2,108,46,116,147,228,173,210,43,245,106, 71,31,127,123,85,215,163,118,20,186,25,241,219,239,245,17,84,114,154,157,232,213,172,46,44,230,130,224,53,68,76,254, 54,195,108,49,97,148,149,225,19,148,172,91,52,120,233,172,113,115,182,29,197,102,117,89,123,222,56,218,26,248,54,132, 177,9,95,60,147,147,107,31,23,23,209,239,141,197,147,4,165,202,239,21,59,108,166,249,94,243,53,140,223,253,136,159, 189,199,131,27,32,12,109,72,223,101,31,83,181,202,36,183,42,108,229,192,151,120,83,101,169,249,111,117,95,248,86,238, 11,89,25,98,192,243,49,207,203,60,63,243,60,205,243,181,170,97,6,190,164,248,204,235,62,214,195,84,21,188,102,78, 222,171,201,131,99,178,37,134,184,72,5,85,223,58,83,172,104,216,46,185,219,251,7,231,225,179,105,38,135,88,226,59, 22,247,20,207,250,251,146,121,77,211,104,103,252,178,157,197,46,147,56,48,70,200,190,173,158,85,195,248,82,240,202,76, 24,233,151,212,166,127,230,119,147,75,37,154,96,171,211,68,203,249,17,249,178,130,177,99,76,57,19,169,38,185,113,145, 129,42,222,136,84,155,198,23,15,125,243,152,91,187,160,156,42,71,135,204,1,78,23,128,202,106,40,120,143,32,126,215, 102,151,163,40,39,46,103,13,105,144,120,143,213,55,63,240,85,124,185,220,65,54,254,221,90,253,198,138,65,207,126,231, 185,226,46,52,63,242,60,201,243,37,207,155,60,127,242,60,202,243,41,207,171,60,191,86,130,144,117,153,18,247,127,107, 245,145,104,149,5,47,219,27,124,33,233,219,15,251,229,72,24,61,254,96,203,99,49,149,10,112,145,138,127,136,67,92, 7,62,171,35,112,141,140,75,31,118,147,73,235,255,155,47,60,248,34,101,182,56,243,217,198,222,39,236,46,116,153,111, 62,232,107,94,86,91,123,163,70,242,177,224,125,132,255,201,2,125,166,97,178,185,201,174,177,41,142,235,190,112,214,184, 248,208,98,213,57,209,238,21,222,57,78,15,169,232,79,71,112,9,82,32,235,16,107,108,169,230,244,138,139,139,230,26, 29,142,218,59,76,123,209,124,175,13,26,138,221,140,143,10,22,238,16,139,154,95,10,165,216,89,222,85,117,186,148,198, 204,206,5,223,154,97,125,134,210,13,219,139,78,51,87,94,231,103,35,165,128,229,121,172,191,12,41,224,249,141,231,57, 158,239,120,222,227,249,207,20,177,101,177,54,120,94,240,206,217,108,245,147,162,170,11,222,238,156,97,96,84,74,117,222, 177,205,145,64,226,29,207,165,243,155,165,113,106,46,62,242,151,59,190,79,74,225,168,91,230,133,30,4,239,92,115,181, 185,127,154,198,22,251,110,247,183,131,47,114,12,179,63,136,93,246,133,81,169,213,217,121,254,150,62,146,235,130,87,102, 6,73,159,252,30,253,69,253,201,224,201,83,162,228,162,221,162,200,248,87,69,161,33,139,68,100,215,9,34,127,235,161, 34,95,203,100,229,136,236,49,89,148,95,188,83,84,127,54,61,222,184,145,33,144,211,211,181,241,5,139,158,150,29,228, 228,141,23,140,170,60,185,152,157,97,144,11,139,101,49,29,50,7,56,149,72,238,161,161,224,53,62,42,154,141,121,0, 130,81,227,50,221,28,182,16,59,116,70,102,66,151,69,103,105,95,249,19,87,207,164,249,197,65,243,140,131,230,27,179, 168,208,100,231,231,138,238,50,78,148,186,103,131,30,235,128,127,237,240,70,169,46,120,163,136,159,42,148,141,16,63,111, 25,236,17,177,116,116,103,210,159,247,77,170,127,172,118,141,168,163,148,193,224,146,204,223,186,82,230,170,45,165,112,46, 221,166,114,128,115,220,223,149,136,252,33,231,105,71,247,220,43,207,118,248,229,172,205,82,141,221,140,61,223,14,18,229, 202,228,103,231,217,65,20,202,109,193,43,171,252,25,131,170,64,223,251,148,158,0,74,47,61,104,77,200,173,13,44,122, 221,205,82,193,49,108,166,72,110,72,113,109,156,211,184,149,101,39,153,133,114,223,55,211,227,144,57,127,100,234,59,191, 101,107,55,153,69,171,229,89,43,185,32,196,90,155,63,159,178,238,176,178,98,99,240,243,223,91,223,171,180,102,98,55, 212,124,246,212,55,142,66,60,106,146,214,47,97,197,78,35,69,95,179,91,23,136,138,109,226,50,155,11,56,116,97,16, 17,146,29,191,160,241,237,160,113,238,160,241,238,160,113,239,160,241,239,160,121,192,65,243,129,131,230,5,7,205,15,14, 154,39,28,52,95,56,104,222,112,208,252,225,160,121,196,65,243,201,205,46,42,115,1,153,77,206,207,155,183,74,115,81, 160,215,20,81,120,220,42,35,158,180,212,210,3,198,102,3,196,168,143,98,120,103,125,101,237,143,252,170,11,94,135,116, 110,49,237,206,250,30,21,77,191,254,156,252,207,250,85,93,142,20,47,18,246,189,140,3,229,112,7,222,253,125,131,115, 247,41,34,116,35,101,14,192,131,114,55,243,106,158,60,65,191,143,29,81,115,203,47,59,134,252,207,95,118,116,157,185, 123,124,93,211,129,251,221,172,1,125,36,120,155,152,131,170,212,162,61,106,14,254,39,78,24,59,185,153,44,32,239,201, 147,142,123,137,91,137,81,138,49,213,16,188,221,38,248,172,173,42,60,157,158,210,173,166,140,71,230,163,71,174,221,206, 169,122,58,72,177,204,241,117,124,89,132,143,42,91,207,122,205,108,203,119,93,20,99,195,51,202,9,175,255,85,89,1, 210,121,214,106,171,159,4,107,38,120,59,168,30,35,109,94,184,42,219,180,155,255,209,164,171,40,19,219,73,148,168,211, 82,68,87,172,37,194,10,21,189,209,7,239,102,98,30,81,142,251,118,232,187,191,57,146,104,167,149,202,208,58,104,252, 57,104,28,58,122,72,209,74,227,211,65,227,212,65,227,213,65,227,214,65,227,215,65,227,216,65,227,217,65,227,58,199, 197,7,92,16,69,165,229,174,239,231,55,250,128,231,252,176,97,117,186,136,124,205,19,68,68,135,91,68,100,247,137,70, 40,28,167,209,42,24,55,83,61,6,206,17,81,73,75,140,52,155,188,107,90,250,241,227,122,8,222,105,31,95,87,8, 72,7,193,203,71,248,159,80,126,93,177,245,163,56,175,8,168,15,94,239,113,124,252,45,181,126,107,220,160,232,9,218, 245,253,83,10,224,67,50,62,150,75,11,118,150,49,191,65,94,142,201,173,35,119,154,23,202,1,195,169,197,174,20,42, 152,247,228,160,190,21,207,44,153,215,236,240,145,159,18,255,244,71,145,107,66,23,17,69,56,249,130,188,125,29,160,136, 224,125,196,28,84,42,126,189,151,92,240,131,243,132,251,2,209,156,69,140,183,23,128,28,78,48,25,133,25,138,76,88, 167,236,164,26,86,191,167,217,174,253,249,185,121,97,165,250,239,142,106,180,59,68,101,51,141,69,151,194,48,140,157,35, 138,221,227,247,122,214,184,240,50,102,153,33,156,123,191,158,30,146,193,169,131,184,150,124,226,198,244,60,201,180,176,231, 110,170,167,107,151,130,102,104,24,206,48,83,245,146,176,78,217,5,64,58,135,121,189,39,30,150,107,97,36,143,35,30, 79,190,16,172,94,152,191,56,142,252,126,142,129,39,118,18,191,217,165,175,114,43,199,188,59,112,200,158,185,177,163,114, 90,50,103,227,227,130,75,137,3,43,139,179,251,83,189,38,166,78,239,75,185,114,244,167,196,203,119,142,169,253,45,9, 236,52,217,80,87,101,106,51,222,97,61,32,197,2,23,57,136,97,193,144,195,221,219,182,50,76,225,83,25,83,124,73, 198,23,139,192,192,128,63,99,235,23,249,102,195,234,46,251,78,236,73,254,199,95,119,115,173,80,232,134,72,28,84,89, 200,118,234,235,74,35,123,91,240,74,63,72,143,221,125,228,144,114,3,190,80,226,98,231,137,170,183,70,11,70,57,243, 185,75,204,217,162,228,132,202,113,208,238,236,32,144,229,49,127,190,228,131,187,92,14,207,168,40,119,157,57,68,163,230, 243,233,59,207,156,126,136,119,159,57,21,17,95,130,225,218,244,237,105,7,186,35,221,236,230,90,245,44,166,249,162,12, 215,174,143,147,161,27,92,41,41,97,67,186,168,78,150,162,122,88,22,194,186,88,205,166,230,123,181,208,53,156,161,235, 188,117,170,87,4,227,28,226,189,252,144,158,242,210,117,27,153,43,191,88,78,119,224,52,154,215,10,202,119,230,118,24, 70,76,32,238,147,187,216,15,200,44,16,170,177,132,120,154,120,141,72,83,121,205,187,174,240,196,192,185,230,56,123,88, 39,193,27,65,124,89,56,42,84,124,185,169,143,175,46,70,93,253,230,253,190,39,231,79,143,61,56,118,100,141,223,219, 181,44,113,188,104,145,176,163,36,68,47,90,22,184,255,202,112,3,46,107,252,161,116,134,21,196,243,210,57,150,203,255, 127,181,252,194,227,93,219,159,136,51,150,223,113,133,118,44,79,85,139,41,248,11,9,250,223,238,25,95,247,244,202,167, 219,31,60,190,43,233,47,127,23,184,206,124,73,121,119,163,10,133,26,73,164,165,79,168,32,120,151,164,103,102,152,170, 222,113,206,125,159,88,197,216,98,158,104,53,91,24,154,94,155,88,15,43,57,161,70,143,122,214,108,223,87,93,124,167, 73,170,22,37,225,91,226,44,172,153,74,15,95,87,93,45,136,227,25,121,167,154,68,182,113,84,76,85,152,140,99,99, 134,210,38,57,218,72,72,112,59,58,188,154,14,93,40,116,144,240,54,232,78,71,206,36,190,51,224,216,201,56,11,3, 232,104,154,196,248,53,232,184,154,68,121,166,208,205,119,227,88,59,43,172,151,2,227,95,216,238,217,244,115,239,102,13, 223,200,231,15,137,204,224,157,251,193,111,95,163,213,172,117,102,219,110,226,247,231,246,176,182,15,183,151,217,118,220,142, 102,155,114,251,154,109,221,74,30,221,51,220,31,220,47,220,63,220,79,220,95,244,97,228,168,65,199,249,85,159,73,63, 210,167,126,53,40,235,7,162,18,120,125,110,254,138,253,183,216,221,239,40,45,120,195,27,245,51,199,89,188,78,130,151, 173,42,199,217,54,107,84,52,119,118,23,247,167,94,57,149,150,114,229,228,158,228,43,31,175,239,117,120,234,196,250,95, 181,106,86,252,243,232,66,161,219,131,131,3,143,201,93,224,27,29,1,92,13,8,8,184,64,226,54,173,106,229,130,223, 12,25,16,243,217,51,203,218,108,63,176,45,225,143,95,211,146,175,242,238,242,249,131,216,197,189,81,102,134,198,13,139, 154,101,132,43,187,234,52,222,20,188,214,157,164,18,115,191,83,235,114,218,178,35,215,165,237,209,116,82,157,145,157,11, 107,190,36,127,171,20,179,141,71,187,240,62,25,151,27,75,204,254,90,233,133,130,219,92,62,235,28,13,253,38,70,245, 140,41,28,23,105,86,5,131,128,2,26,142,177,109,134,224,157,246,145,210,243,88,80,161,146,25,151,110,117,19,188,14, 25,215,115,245,177,7,91,228,56,77,153,231,5,89,234,213,195,59,134,252,78,217,36,206,254,248,197,128,83,20,107,122, 252,135,207,250,159,252,233,203,129,167,246,125,23,127,158,68,237,37,8,215,236,139,221,71,22,52,55,195,75,22,187,227, 48,94,22,188,113,170,238,64,22,74,124,200,99,233,88,114,113,82,221,159,254,49,177,85,201,201,180,212,146,189,214,54, 174,231,194,251,52,207,240,23,250,32,81,54,147,7,29,83,90,222,171,164,134,126,195,151,89,69,88,189,30,202,166,4, 180,180,111,42,4,20,208,108,124,101,124,184,151,90,178,79,217,121,172,212,67,105,230,24,59,235,161,247,246,185,224,173, 68,156,166,34,18,226,208,246,33,16,131,126,194,193,237,9,162,82,133,8,118,150,83,68,5,21,4,175,117,208,171,22, 188,207,226,219,178,160,78,208,116,82,77,52,68,11,93,8,83,182,78,251,93,239,88,219,57,226,38,239,19,96,61,241, 41,243,196,73,117,47,122,76,88,119,93,118,6,13,125,199,168,132,197,187,168,74,126,80,92,127,250,210,11,34,10,104, 54,190,140,204,57,249,219,142,80,122,119,183,232,228,13,230,24,251,92,87,193,203,150,194,161,13,67,19,170,8,186,200, 5,65,104,115,184,143,135,13,169,106,134,50,164,184,235,44,94,20,188,13,84,13,220,143,74,94,106,14,244,103,116,223, 65,40,114,199,107,234,30,251,119,189,195,108,231,41,46,188,83,152,249,78,69,39,189,173,238,238,238,99,215,149,72,158, 168,169,255,188,103,248,14,221,208,86,53,23,182,165,141,59,65,68,1,141,198,86,121,211,119,139,207,248,92,105,193,203, 57,241,229,179,46,208,89,240,102,84,208,121,238,177,214,16,133,54,103,249,35,173,77,167,93,153,29,71,241,162,224,93, 174,98,124,169,211,238,81,55,77,39,213,218,215,50,25,236,84,54,175,177,165,157,203,186,240,78,81,25,241,187,243,183, 41,93,152,196,242,94,117,52,245,31,227,22,57,231,11,213,160,141,59,66,72,1,141,198,214,194,107,167,84,39,212,21, 188,79,92,87,253,178,187,238,130,151,23,196,83,85,40,180,97,55,85,221,130,48,180,105,69,181,205,131,5,247,49,245, 245,73,162,150,42,130,87,150,148,84,50,118,183,228,130,237,214,129,94,93,211,73,117,88,70,251,210,142,163,138,19,106, 212,176,199,205,54,254,196,197,119,106,173,250,59,25,165,56,233,50,157,124,206,61,26,47,202,191,27,237,76,194,82,205, 24,233,195,218,127,148,2,191,19,186,33,86,177,203,241,177,42,239,238,150,124,224,71,235,24,139,209,93,240,102,92,24, 162,76,9,202,93,96,3,158,185,168,214,182,69,137,140,220,177,217,117,18,47,9,94,101,47,197,240,173,89,203,64,47, 168,233,228,186,194,168,73,63,236,9,53,5,11,85,25,178,180,241,96,23,223,105,181,17,87,74,121,33,149,206,91,73, 149,158,228,123,61,160,169,239,112,165,43,227,118,182,186,187,79,215,157,14,140,132,160,2,138,143,169,4,235,253,131,130, 253,103,171,95,112,226,182,235,170,68,134,218,65,240,178,45,227,60,182,51,238,106,224,213,130,20,192,231,41,224,196,180, 73,245,133,44,194,177,52,39,14,226,37,193,203,126,39,10,197,47,80,48,80,127,189,199,74,41,230,226,4,187,55,189, 216,196,102,53,119,15,174,175,92,23,233,194,251,148,208,97,119,215,41,123,64,140,166,190,211,195,248,24,173,221,73,233, 5,185,216,61,155,204,118,254,134,40,12,97,5,20,220,209,237,107,198,195,155,185,195,139,207,250,74,139,146,194,225,141, 251,155,227,107,136,7,219,36,215,5,111,52,151,0,14,11,13,22,95,188,219,27,98,209,38,124,254,78,47,17,22,26, 100,150,153,44,172,146,224,37,203,159,113,249,136,196,165,122,11,233,187,86,209,18,162,225,68,91,67,117,113,200,151,206, 220,217,61,32,187,155,127,54,162,243,237,74,47,18,252,129,33,223,105,175,198,11,245,56,29,110,144,27,57,156,219,12, 211,62,94,90,99,63,105,68,140,2,6,163,137,241,178,218,219,115,196,22,231,58,2,5,7,220,175,133,208,77,159,199, 182,88,159,61,175,157,4,47,91,53,22,189,197,138,132,145,80,130,232,213,157,207,54,246,18,197,139,133,11,89,198,185, 122,78,157,195,11,130,183,66,198,133,170,133,59,212,219,125,164,75,94,150,193,62,69,195,234,106,198,238,121,129,94,83, 116,216,5,189,233,46,186,220,41,73,207,56,113,231,235,126,83,134,51,23,253,103,129,225,63,116,67,91,245,133,185,228, 3,63,57,251,18,239,166,77,151,101,119,185,244,108,73,89,134,54,18,100,74,120,54,125,164,251,77,138,68,1,115,206, 162,208,0,85,139,183,100,69,68,167,177,230,243,223,239,225,185,69,9,193,107,198,84,94,138,173,95,68,28,219,149,4, 225,168,41,71,119,37,138,6,245,10,179,83,92,146,49,218,14,5,5,111,155,140,29,72,138,229,84,113,192,23,26,178, 200,121,226,186,32,115,24,159,212,128,244,143,137,69,187,117,200,161,26,239,194,36,89,74,135,234,106,78,153,3,122,106, 44,120,141,236,41,81,73,15,107,177,56,151,94,118,148,118,122,135,67,92,101,159,112,55,253,35,216,252,187,249,90,38, 3,130,171,69,70,180,31,37,34,187,79,20,81,41,143,138,98,247,126,144,94,80,130,62,238,117,18,186,70,177,9,122, 238,236,250,134,78,130,151,119,81,238,34,254,215,173,67,25,113,240,7,20,165,208,174,184,196,15,9,162,43,245,157,204, 183,59,69,246,169,138,130,247,73,35,126,151,68,165,202,3,191,248,244,207,156,143,76,181,66,213,194,12,188,171,239,106, 177,9,57,73,54,209,161,42,17,199,230,89,222,43,90,99,193,251,170,113,225,113,212,179,122,45,212,15,239,55,242,6, 71,246,152,68,241,199,157,69,72,233,154,34,168,64,113,17,24,94,64,4,134,70,128,76,144,190,122,135,155,254,17,126, 173,28,252,86,237,4,29,184,201,101,53,202,219,238,173,162,57,42,9,94,211,30,226,103,225,66,5,103,246,167,64,72, 106,115,73,45,69,164,198,87,49,75,7,63,232,73,135,240,130,224,253,57,125,183,238,27,61,118,144,104,23,154,23,211, 82,139,246,80,184,195,46,229,41,181,248,103,165,171,144,69,116,190,205,156,76,239,115,113,146,156,108,196,239,118,26,135, 236,12,190,17,188,111,27,213,15,199,190,12,1,96,83,120,46,179,136,154,60,110,250,71,83,213,79,232,128,71,138,230, 140,243,194,220,162,156,224,229,75,108,175,135,132,4,138,113,35,107,138,95,127,78,134,160,84,156,147,212,71,220,87,220, 103,212,119,107,101,130,126,85,5,111,94,45,110,219,3,95,228,79,141,114,113,146,220,110,84,37,154,254,169,46,73,218, 203,107,46,120,55,24,130,119,220,42,248,172,77,225,82,238,210,87,95,203,134,127,188,168,67,122,64,144,227,82,239,81, 254,32,120,77,51,38,189,59,110,169,45,206,162,252,176,186,59,187,212,55,19,199,214,49,29,244,109,111,56,130,135,5, 111,67,254,149,121,202,214,197,4,227,143,199,101,19,214,153,190,250,161,139,19,100,91,213,67,52,236,146,157,193,210,230, 175,27,130,247,214,23,224,179,246,223,197,27,239,166,111,68,168,90,48,8,120,32,21,89,147,129,110,157,190,217,73,240, 114,242,241,143,56,93,217,157,99,106,27,187,136,16,152,106,241,107,90,178,184,115,92,29,17,74,125,68,125,245,169,236, 51,213,5,239,80,227,178,67,179,120,76,48,56,46,115,101,130,124,37,61,95,243,66,165,223,141,243,73,203,247,90,102, 3,193,251,130,113,105,45,117,25,252,214,142,225,12,215,95,74,106,235,166,111,220,110,230,147,69,91,218,108,215,255,214, 23,77,159,88,239,197,185,69,89,193,203,22,196,101,63,249,217,110,27,85,147,98,122,177,211,171,10,220,23,99,135,215, 204,40,205,42,251,202,161,129,224,157,101,164,60,234,121,55,38,25,127,91,104,169,148,166,101,161,109,227,194,228,88,57, 35,227,4,149,185,212,68,200,183,181,129,224,53,202,159,22,232,55,29,126,107,67,156,46,141,70,185,225,23,97,25,249, 211,39,190,137,182,180,211,220,76,119,84,44,62,209,221,95,5,175,153,18,232,45,142,15,77,73,168,34,14,124,159,0, 193,153,219,217,24,182,15,17,169,212,23,50,102,119,35,23,47,243,166,3,120,88,240,42,91,97,13,248,180,186,90,41, 23,38,199,33,25,199,167,10,231,177,228,155,234,150,247,42,103,3,193,123,171,177,139,215,122,40,252,214,134,68,143,92, 110,250,234,58,55,253,162,138,14,31,160,32,199,101,132,35,253,89,240,154,182,142,51,0,112,202,178,163,59,19,33,60, 115,9,206,145,220,165,125,25,51,27,195,171,190,232,120,15,11,222,231,113,92,234,167,23,34,174,175,174,22,224,194,228, 248,136,113,57,102,208,124,181,143,2,199,174,240,90,26,159,92,18,188,45,248,93,242,86,106,12,191,181,33,121,171,52, 55,125,181,163,155,126,209,87,135,120,122,144,163,11,183,99,189,60,183,104,35,120,249,230,255,98,206,211,91,175,118,52, 85,243,66,69,54,95,243,233,134,94,162,73,195,162,220,225,255,35,22,201,140,26,186,9,222,21,70,142,207,97,79,96, 162,241,51,56,110,91,78,170,169,46,78,142,159,167,151,159,222,160,118,121,91,218,9,149,239,117,107,25,123,148,140,13, 67,218,41,123,82,98,238,119,166,175,30,200,134,95,60,101,156,206,37,62,132,182,180,17,145,61,38,155,62,241,164,15, 230,22,109,4,175,105,92,156,226,82,145,232,80,241,9,9,48,100,112,240,77,38,134,47,222,237,45,184,244,179,172,160, 54,197,151,29,238,97,193,251,156,177,195,75,213,104,48,217,248,109,220,96,176,11,19,99,104,70,177,9,138,47,211,228, 2,80,164,29,4,175,108,255,221,70,42,56,42,166,1,255,181,9,215,151,244,158,154,13,159,56,144,94,108,226,59,180, 165,109,66,25,214,88,125,162,14,4,111,230,21,217,250,19,7,57,131,195,244,187,26,136,243,7,33,74,189,5,183,237, 125,147,26,136,208,188,65,66,78,56,113,178,180,163,174,130,247,1,227,152,154,146,244,99,194,241,163,93,132,158,119,153, 147,234,204,50,238,20,155,160,114,157,154,188,215,124,187,136,93,217,254,79,167,151,23,94,2,255,181,203,71,39,149,26, 183,136,155,134,110,250,131,81,237,48,79,133,134,104,75,27,125,0,133,213,233,98,250,195,112,31,205,43,218,9,94,211, 170,177,232,37,174,52,111,82,76,236,254,118,16,4,170,135,217,179,121,176,104,211,188,4,119,240,21,226,48,81,35,55, 58,218,195,130,247,22,227,66,76,171,84,76,56,254,121,3,56,214,133,73,49,40,163,116,233,253,223,170,155,157,97,217, 17,235,123,149,177,153,224,237,201,239,197,37,122,225,195,246,160,216,189,31,88,253,53,63,82,213,97,183,95,242,148,15, 231,21,109,5,47,91,97,226,81,190,64,85,165,114,1,241,236,163,173,197,57,132,56,228,24,110,195,167,151,182,18,49, 21,11,152,151,211,150,122,186,122,26,10,79,0,95,81,252,190,79,172,147,107,17,87,47,77,25,49,164,36,42,149,141, 135,156,179,197,250,94,161,54,19,188,37,51,110,228,47,216,14,63,182,1,81,201,75,77,95,125,198,77,95,40,146,241, 1,74,62,143,182,180,149,216,101,234,65,240,186,103,61,136,147,252,14,169,241,49,226,16,165,205,66,152,67,246,194,23, 14,109,79,16,35,146,170,154,142,248,43,209,47,183,59,215,195,130,55,0,169,109,176,208,222,96,66,12,176,78,198,42, 223,6,47,60,230,37,91,101,103,200,106,151,221,232,7,90,36,225,203,154,87,209,106,216,219,236,207,129,217,205,206,80, 250,145,67,104,75,221,195,203,186,221,105,157,183,6,248,120,94,177,133,224,101,171,69,172,34,46,87,166,157,201,71,23, 54,135,136,117,83,236,62,178,160,185,168,88,33,146,59,244,50,177,146,168,169,66,199,122,88,240,34,142,215,223,22,218, 216,56,115,114,77,112,97,66,140,52,39,227,226,211,63,211,165,216,196,61,118,18,187,150,190,168,102,190,99,212,176,199, 225,203,58,87,57,164,60,214,22,127,13,119,211,15,144,89,199,38,112,138,71,139,31,140,206,133,57,197,54,130,215,180, 4,130,223,236,106,253,58,133,197,23,239,244,70,152,195,77,50,48,124,185,169,143,136,77,79,55,198,225,11,167,136,20, 149,58,212,11,130,183,182,14,55,240,129,199,143,207,74,186,48,33,198,92,11,103,56,170,174,128,88,122,208,250,94,13, 236,40,120,101,127,220,159,209,31,36,242,225,211,154,158,178,208,7,139,236,199,181,110,246,255,181,19,57,186,244,134,182, 180,197,197,97,230,206,92,154,79,108,39,120,217,42,18,15,17,255,68,71,133,138,164,65,49,98,203,71,253,32,112,157, 216,252,127,253,196,144,1,149,69,116,161,188,230,174,46,231,214,45,175,90,103,122,65,240,134,103,148,168,188,243,13,76, 70,118,78,123,51,97,157,57,193,110,118,113,66,156,100,100,103,232,52,86,237,184,228,105,31,187,85,68,67,115,209,251, 158,177,203,59,244,49,248,180,142,187,187,215,159,70,180,119,179,239,155,167,23,33,137,69,91,234,188,179,219,127,118,174, 139,93,59,11,94,211,42,19,159,112,238,216,176,176,32,49,249,182,58,148,121,96,144,95,199,247,242,187,239,161,140,22, 83,39,214,23,249,194,131,205,188,186,95,203,227,67,37,205,211,130,87,58,254,29,233,105,167,70,99,66,178,49,97,245, 123,154,147,236,48,23,39,196,79,140,15,161,137,111,169,93,108,162,85,138,249,94,99,236,44,118,157,99,56,11,14,156, 11,191,214,173,216,4,101,58,177,136,157,104,55,251,126,73,122,191,207,65,91,106,26,202,18,209,113,140,181,255,39,228, 242,92,98,107,193,107,198,228,245,38,222,231,119,44,95,38,66,140,76,174,38,190,249,160,175,95,238,232,222,58,172,134, 40,87,38,191,233,124,159,17,125,136,8,149,59,208,75,130,55,191,57,8,85,207,181,10,178,185,208,206,219,102,157,104, 35,220,185,13,206,19,181,178,249,76,233,178,165,229,189,130,236,46,120,157,67,27,32,126,180,190,145,31,228,70,159,7, 95,203,206,176,25,109,169,91,24,11,157,200,56,245,253,56,5,230,17,219,11,94,235,237,124,22,190,59,136,191,131,130, 2,69,255,94,21,140,248,213,99,187,146,108,43,114,249,221,190,126,191,175,72,77,136,17,193,193,129,220,89,127,19,59, 137,100,34,80,135,142,243,134,224,149,206,63,50,99,17,165,96,122,76,82,254,189,208,202,10,130,34,178,235,29,186,92, 252,120,196,31,196,110,25,167,98,32,230,71,42,226,239,181,11,103,232,238,102,127,183,65,118,6,13,243,158,83,245,199, 252,109,134,89,251,125,25,231,240,87,100,14,241,27,193,107,26,231,147,237,78,188,198,151,180,34,35,242,136,22,77,139, 139,89,83,26,26,71,253,118,17,186,251,182,14,22,115,166,54,18,45,154,20,23,252,142,242,66,218,6,249,238,133,116, 234,48,111,9,94,57,0,70,152,3,179,80,226,98,76,88,118,89,104,233,194,153,101,194,77,118,97,34,204,40,37,92, 116,210,219,186,20,155,24,236,79,130,87,246,211,40,235,135,76,225,113,43,149,78,29,7,241,179,215,234,175,121,221,236, 235,57,215,210,3,158,64,123,170,62,231,210,71,73,129,62,211,172,253,189,149,215,87,197,230,15,191,19,188,86,227,202, 97,175,18,39,248,210,86,72,72,160,24,220,175,146,216,244,90,55,177,247,187,120,113,102,127,138,54,2,247,204,190,20, 177,119,107,188,120,151,158,125,96,159,74,130,223,69,94,68,59,33,223,177,186,174,157,228,77,193,43,7,193,84,115,144, 22,232,53,197,184,1,143,9,204,86,213,213,138,186,48,17,214,208,33,63,115,169,69,123,172,239,213,196,223,4,175,236, 171,178,78,187,247,70,22,0,163,223,32,126,213,202,21,61,110,149,217,71,27,220,236,227,188,58,124,128,98,7,255,152, 40,118,207,187,206,185,117,133,76,253,89,70,193,185,195,175,5,175,67,30,235,87,146,71,252,188,3,250,87,80,80,128, 168,92,49,82,244,236,82,86,60,48,171,137,145,225,225,252,65,245,82,155,157,163,103,218,66,113,185,11,103,54,54,158, 181,18,229,208,13,12,12,224,14,249,147,88,79,36,201,140,21,129,58,119,144,183,5,175,28,8,51,172,3,182,64,191, 233,244,197,122,24,147,154,174,217,25,238,88,107,246,229,251,46,78,132,183,233,80,108,162,248,172,175,172,139,74,164,63, 10,94,75,186,170,209,196,247,206,226,55,122,212,179,40,42,163,202,165,209,122,61,204,126,233,231,102,255,54,187,22,206, 128,121,88,41,145,251,248,113,81,236,238,119,140,76,54,206,99,79,150,128,110,162,240,188,225,247,130,215,217,74,16,247, 18,219,100,78,218,203,1,1,1,162,122,213,66,98,194,152,218,98,253,234,46,98,199,23,3,196,193,31,18,196,169,52, 223,237,0,159,74,75,22,7,232,223,220,254,249,0,177,126,85,23,49,254,214,90,162,90,76,65,193,207,38,119,114,79, 201,103,158,34,223,193,54,230,11,193,43,7,3,239,130,63,106,29,192,124,195,180,248,244,79,149,206,201,10,254,77,190, 102,241,102,31,166,186,56,17,238,52,138,77,204,248,92,237,248,93,202,82,32,223,107,169,191,138,221,76,250,174,53,177, 218,121,241,205,83,161,161,113,196,90,228,142,215,140,157,113,84,107,243,241,105,196,67,63,103,59,117,30,217,75,40,14, 164,206,46,46,95,26,140,30,254,164,181,136,143,21,206,242,52,141,55,14,53,152,43,32,120,179,176,112,121,204,217,79, 6,93,239,225,54,10,8,160,184,177,232,80,81,187,70,148,104,223,186,164,24,54,164,170,88,124,127,83,241,198,203,157, 197,182,79,227,196,233,189,57,23,193,252,59,248,119,189,177,162,147,88,68,191,155,255,141,246,173,74,138,90,213,163,68, 97,202,43,204,207,32,29,109,143,20,104,253,228,179,134,219,177,35,124,37,120,45,131,162,5,241,178,243,192,206,215,60, 129,226,124,31,18,69,239,218,40,74,62,184,19,34,88,143,56,87,87,178,51,148,119,232,80,194,150,118,158,45,239,85, 21,98,55,211,114,196,237,100,8,87,102,11,51,237,56,118,23,5,122,223,43,162,71,46,167,113,252,142,40,49,127,155, 113,201,6,49,162,94,45,125,253,166,155,253,24,134,221,93,223,95,242,45,245,80,26,9,219,45,162,232,228,245,34,42, 233,97,218,193,29,39,242,86,105,33,178,24,75,95,201,156,229,197,52,155,35,32,120,221,176,82,242,102,255,90,185,35, 116,132,56,47,119,88,13,71,8,161,76,8,21,203,71,138,102,177,197,68,223,30,229,197,45,67,171,139,41,19,234,137, 251,239,109,36,22,76,143,21,75,23,52,51,224,255,155,255,27,255,25,255,12,255,44,255,157,138,229,34,69,112,80,160, 213,177,46,203,127,227,136,252,55,215,202,139,86,165,252,165,209,125,45,120,157,210,84,113,168,195,246,172,22,208,192,136, 104,17,82,178,154,200,83,49,86,132,86,111,43,194,106,119,18,97,117,187,25,11,43,200,61,100,255,124,225,98,63,79, 48,197,144,38,239,181,21,2,215,165,144,135,38,196,60,226,131,172,198,175,243,88,14,46,90,81,228,41,91,135,10,29, 52,22,161,213,90,139,208,90,29,105,76,119,198,152,206,190,175,50,99,221,236,187,118,70,177,137,170,45,209,142,158,164, 78,23,242,231,14,198,58,149,183,74,115,242,243,186,34,184,88,37,17,20,81,88,184,48,62,246,202,77,160,4,119,115, 41,67,240,218,103,7,184,28,17,43,51,31,240,237,225,5,196,26,249,245,179,143,184,32,179,35,220,204,153,174,202,159, 221,39,255,46,255,142,249,242,119,118,35,26,201,127,43,220,31,27,58,183,4,175,211,64,225,236,30,195,136,167,88,72, 201,203,128,2,40,77,162,139,125,91,67,179,247,26,1,81,155,45,1,92,218,145,94,196,98,142,156,99,191,36,14,201, 13,5,140,23,239,81,200,205,190,42,141,54,203,21,206,74,13,194,249,249,151,203,52,128,109,57,31,178,141,230,1,8, 94,31,92,138,11,149,98,149,11,60,20,144,68,200,255,22,170,251,165,50,221,4,175,7,45,72,238,2,215,148,151,44, 58,17,61,28,233,197,60,250,130,92,165,74,54,50,182,232,240,94,49,152,17,188,98,193,114,44,115,251,54,144,97,77, 29,228,102,70,79,140,233,108,145,147,20,152,165,209,126,30,167,151,220,64,227,117,138,115,28,55,148,243,100,81,233,255, 126,175,43,60,34,54,0,200,109,96,48,24,12,6,131,193,32,120,1,4,47,12,6,131,193,96,48,8,94,0,0,0, 0,0,0,108,183,49,134,70,0,0,0,0,0,0,16,188,0,0,0,0,0,0,64,240,2,0,0,0,0,0,0,193, 11,0,0,0,0,0,0,4,47,0,0,0,0,0,0,16,188,0,0,0,0,0,0,184,192,255,3,116,155,54,6,4, 95,45,50,0,0,0,0,73,69,78,68,174,66,96,130, }; } namespace Sprite { namespace SuperFamicom { const unsigned char CrosshairBlue[332] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,14,196,0,0,14, 196,1,149,43,14,27,0,0,0,238,73,68,65,84,88,133,213,87,91,18,195,32,8,196,78,15,232,81,189,161,253,9, 25,52,98,121,57,76,246,43,137,44,11,24,69,11,232,209,55,99,69,235,76,74,184,69,107,229,245,91,27,220,137,124, 75,140,58,21,165,34,181,246,199,251,100,167,174,200,32,124,137,119,124,134,177,252,116,108,224,44,120,44,190,156,56,102, 163,204,228,182,107,173,80,31,93,225,67,30,189,112,124,85,41,145,120,36,88,191,159,96,33,23,78,101,47,242,127,90, 156,213,73,159,2,111,0,33,21,179,150,63,132,151,62,5,243,78,136,217,236,118,173,85,198,86,30,20,152,154,13,192, 118,251,125,216,90,121,212,118,215,112,86,224,26,142,133,247,152,2,73,195,64,155,190,248,166,229,229,255,132,8,243,146, 242,234,120,43,224,58,241,68,4,16,138,212,110,120,58,136,119,28,72,16,169,103,194,33,136,63,68,209,184,103,74,83, 239,5,0,215,26,167,231,123,124,103,130,53,221,140,94,113,55,100,131,9,242,151,139,31,79,50,234,237,105,206,30,22, 0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char CrosshairGreen[329] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,14,196,0,0,14, 196,1,149,43,14,27,0,0,0,235,73,68,65,84,88,133,213,87,65,18,195,32,8,196,78,31,230,211,253,153,61,180, 52,18,145,1,193,97,178,39,141,44,139,24,69,11,216,209,133,177,98,117,166,37,92,162,77,176,170,118,223,26,163,78, 68,71,145,198,244,169,157,57,35,84,248,43,222,255,109,154,254,113,140,114,102,222,18,239,165,120,251,181,42,0,232,103, 114,217,85,226,163,27,124,232,163,87,142,115,153,82,137,71,98,233,247,21,44,228,194,169,217,171,252,159,22,95,234,164, 47,129,55,128,144,140,237,166,63,132,151,190,4,247,147,16,103,35,157,90,220,140,119,121,80,224,94,108,0,164,227,119, 182,221,229,13,182,82,193,225,176,42,56,59,188,105,9,52,5,3,109,58,243,205,202,203,255,9,17,251,91,202,169,227, 205,128,235,198,19,17,64,40,82,171,225,233,32,158,113,33,65,164,222,9,105,16,50,81,55,238,88,210,212,119,1,0, 238,241,241,126,143,125,62,216,173,151,209,35,222,134,235,96,98,252,229,226,3,112,72,179,236,202,138,114,18,0,0,0, 0,73,69,78,68,174,66,96,130, }; const unsigned char CrosshairRed[342] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,14,196,0,0,14, 196,1,149,43,14,27,0,0,0,248,73,68,65,84,88,133,205,87,65,14,196,32,8,132,102,255,255,101,246,176,177,139, 148,81,80,27,229,212,70,102,6,212,0,50,229,77,26,107,156,37,139,2,228,241,209,39,11,113,71,156,68,139,106,128, 56,255,198,175,203,223,114,16,79,68,253,138,90,99,141,113,112,80,231,131,196,11,83,52,19,43,196,53,135,147,7,38, 150,104,244,212,32,86,235,228,236,20,6,200,207,191,117,215,70,12,242,94,139,133,166,236,173,236,67,252,111,139,67,157, 237,71,48,27,192,244,142,93,228,23,148,144,184,228,131,96,254,3,164,4,176,213,108,37,52,5,208,53,47,227,81,28, 49,153,102,163,88,96,149,68,150,193,21,223,59,128,68,43,69,13,103,4,199,246,8,34,151,240,209,249,38,112,251,47, 97,177,209,74,152,246,95,93,9,211,51,160,181,99,142,128,104,115,55,124,59,136,115,7,146,237,51,33,2,71,166,226, 94,23,13,77,214,104,44,103,174,163,143,86,189,244,187,224,232,151,81,21,132,39,210,33,91,246,54,132,193,44,226,219, 107,95,57,136,120,253,172,254,16,23,0,0,0,0,73,69,78,68,174,66,96,130, }; } namespace WonderSwan { const unsigned char Auxiliary0[117] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,39,73,68,65,84,40,145, 99,96,24,5,12,12,12,12,12,140,216,4,255,255,255,255,31,174,128,145,17,67,13,19,57,54,145,165,105,20,64,1, 0,79,229,4,6,25,160,104,81,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Auxiliary1[134] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,56,73,68,65,84,40,145, 99,96,24,212,128,17,155,224,255,255,255,255,195,21,48,50,98,168,193,16,64,214,128,75,35,10,7,155,6,108,26,153, 112,41,194,7,200,210,68,185,159,176,105,196,22,122,131,28,0,0,93,187,20,10,151,47,54,180,0,0,0,0,73,69, 78,68,174,66,96,130, }; const unsigned char Auxiliary2[136] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,58,73,68,65,84,40,145, 99,96,160,23,96,196,38,248,255,255,255,255,112,5,140,140,24,106,24,113,41,198,80,136,164,153,137,34,231,225,179,5, 221,54,178,108,162,204,121,12,12,244,10,8,92,54,98,139,39,250,1,0,103,1,20,14,22,78,11,159,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Headphones[167] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,89,73,68,65,84,40,145, 157,145,65,14,0,33,8,3,29,255,255,231,122,210,176,217,130,196,222,44,3,82,29,227,65,56,83,146,14,0,150,249, 192,177,33,243,90,69,91,139,102,213,120,86,206,64,151,69,146,0,166,3,110,225,231,239,234,208,144,62,64,6,40,200, 102,170,6,0,236,243,222,194,134,117,131,90,159,28,87,44,225,174,22,199,17,111,189,73,184,252,1,0,0,0,0,73, 69,78,68,174,66,96,130, }; const unsigned char Initialized[136] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,58,73,68,65,84,40,145, 99,96,160,23,96,132,49,254,255,255,255,159,160,98,70,70,70,184,38,98,52,32,107,100,193,102,18,54,128,108,48,19, 177,54,32,3,178,52,161,56,143,88,191,209,207,121,100,197,19,253,0,0,19,184,20,16,97,125,73,73,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char LowBattery[144] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,66,73,68,65,84,40,145, 99,96,32,3,48,98,19,252,255,255,255,127,184,2,70,70,12,53,76,184,52,192,20,35,27,128,19,160,43,194,166,9, 195,38,98,192,80,212,68,40,196,112,218,132,79,35,11,54,65,108,17,74,80,19,81,17,74,42,0,0,182,121,32,4, 246,65,53,182,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Orientation0[148] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,70,73,68,65,84,40,145, 99,96,32,3,48,98,19,252,255,255,255,127,184,2,70,70,12,53,24,2,200,26,112,105,100,34,199,121,100,105,162,220, 79,216,252,131,77,51,156,129,79,3,186,70,242,3,2,102,11,54,247,35,139,195,212,81,39,244,136,137,92,178,0,0, 81,131,32,17,104,219,146,91,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Orientation1[150] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,72,73,68,65,84,40,145, 173,145,49,14,0,32,8,196,172,241,255,95,214,197,1,1,3,81,186,114,69,192,214,126,152,155,76,22,41,29,5,192, 198,149,228,201,55,113,120,175,68,77,136,36,51,26,208,179,97,73,189,164,15,113,236,36,201,92,239,233,159,70,52,82, 25,11,152,51,36,20,92,248,53,240,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char PoweredOn[155] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,77,73,68,65,84,40,145, 165,146,73,14,0,32,8,3,173,255,255,115,189,40,33,202,98,96,142,77,109,65,29,163,0,44,145,36,197,0,60,158, 233,29,56,102,29,96,194,77,166,61,77,63,200,188,119,26,0,88,90,216,20,237,210,27,47,75,215,87,223,111,242,218, 238,7,46,253,136,18,11,199,234,51,248,48,4,102,223,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Sleeping[154] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,76,73,68,65,84,40,145, 189,145,193,10,0,32,8,67,155,244,255,191,188,46,17,166,44,242,80,59,137,250,112,195,214,94,136,36,75,139,30,72, 48,167,98,173,0,40,11,0,160,156,172,65,5,220,154,42,116,132,187,178,112,117,41,133,61,100,50,53,56,253,199,252, 2,166,180,225,223,26,147,225,59,237,75,250,15,99,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char VolumeA0[129] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,51,73,68,65,84,40,145, 99,96,24,80,240,255,255,255,255,248,228,153,72,213,128,161,137,24,13,40,154,136,213,128,97,19,125,52,49,50,50,50, 146,101,19,41,26,49,0,41,129,66,91,0,0,145,89,20,3,20,239,9,131,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char VolumeA1[142] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,64,73,68,65,84,40,145, 197,142,49,14,0,32,8,196,60,254,255,231,186,56,9,18,209,24,59,222,81,160,181,175,0,100,189,85,5,39,205,194, 106,129,101,3,146,20,229,238,189,29,238,36,73,154,75,128,40,119,48,40,159,63,146,158,208,1,54,254,39,241,163,168, 22,227,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char VolumeA2[146] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,68,73,68,65,84,40,145, 197,144,193,10,0,32,8,67,157,255,255,207,235,20,132,77,49,34,218,201,185,61,4,205,190,138,36,213,92,2,177,24, 189,87,225,244,0,176,102,158,1,170,44,47,117,117,7,1,64,12,73,82,237,55,117,190,151,130,71,192,51,13,184,33, 63,219,60,97,21,237,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char VolumeB0[125] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,47,73,68,65,84,40,145, 99,96,24,5,67,1,48,194,24,255,255,255,255,79,80,49,35,35,35,138,38,66,26,97,26,48,52,225,210,136,172,1, 171,38,116,141,232,26,200,6,0,148,173,16,5,30,219,32,189,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char VolumeB1[137] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,59,73,68,65,84,40,145, 99,96,24,212,128,17,155,224,255,255,255,255,195,21,48,50,98,85,131,83,3,54,254,16,0,112,79,18,227,118,88,160, 160,132,12,62,141,200,161,136,17,156,216,52,162,7,59,117,226,137,24,0,0,139,197,27,254,82,191,68,170,0,0,0, 0,73,69,78,68,174,66,96,130, }; const unsigned char VolumeB2[148] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,70,73,68,65,84,40,145, 99,96,32,3,48,162,11,252,255,255,255,63,134,34,70,70,12,117,120,53,224,19,199,45,65,164,60,249,128,100,147,97, 26,168,234,36,120,80,18,99,42,44,232,81,194,31,159,70,228,184,34,43,114,177,198,52,178,70,188,169,129,20,0,0, 40,67,47,234,31,247,182,170,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char VolumeB3[153] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,13,0,0,0,13,8,6,0,0,0,114,235,228, 124,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,75,73,68,65,84,40,145, 157,146,73,14,0,48,8,2,245,255,143,166,167,54,90,13,46,28,149,105,26,80,100,33,253,7,0,16,76,170,193,71, 1,54,119,11,24,149,96,182,164,230,246,151,42,96,12,50,189,40,59,175,222,232,93,254,12,180,93,173,202,77,155,182, 32,189,134,137,14,178,192,67,214,248,1,222,76,0,0,0,0,73,69,78,68,174,66,96,130, }; } } } ares-126/ares/ares/resource/resource.hpp000066400000000000000000000022061415063341600203740ustar00rootroot00000000000000namespace Resource { namespace Ares { extern const unsigned char Icon1x[6562]; extern const unsigned char Icon2x[9662]; extern const unsigned char Logo1x[11533]; extern const unsigned char Logo2x[18991]; } namespace Sprite { namespace SuperFamicom { extern const unsigned char CrosshairBlue[332]; extern const unsigned char CrosshairGreen[329]; extern const unsigned char CrosshairRed[342]; } namespace WonderSwan { extern const unsigned char Auxiliary0[117]; extern const unsigned char Auxiliary1[134]; extern const unsigned char Auxiliary2[136]; extern const unsigned char Headphones[167]; extern const unsigned char Initialized[136]; extern const unsigned char LowBattery[144]; extern const unsigned char Orientation0[148]; extern const unsigned char Orientation1[150]; extern const unsigned char PoweredOn[155]; extern const unsigned char Sleeping[154]; extern const unsigned char VolumeA0[129]; extern const unsigned char VolumeA1[142]; extern const unsigned char VolumeA2[146]; extern const unsigned char VolumeB0[125]; extern const unsigned char VolumeB1[137]; extern const unsigned char VolumeB2[148]; extern const unsigned char VolumeB3[153]; } } } ares-126/ares/ares/resource/sprite/000077500000000000000000000000001415063341600173425ustar00rootroot00000000000000ares-126/ares/ares/resource/sprite/sfc/000077500000000000000000000000001415063341600201155ustar00rootroot00000000000000ares-126/ares/ares/resource/sprite/sfc/crosshair-blue.png000066400000000000000000000005141415063341600235450ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs+IDATXW[ NQ 4by9L+, E 7cELJEk[܉|K:"d |w|tl,x,8fkP]Cp|U)x$X`!Ne/ZIo!?>NvUV v}ZyvpVI@x+:Dnx:wHg!?DѸgJS{|g5݌^q7d O2iIENDB`ares-126/ares/ares/resource/sprite/sfc/crosshair-green.png000066400000000000000000000005111415063341600237130ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs+IDATXWA N=4a',E хbu%\MvNDG9#T+mqrfx*grU|WsRGb,©٫_/7?g#Z܌wyP^lw R*8;i 4m: [ʩ̀@(R q!A i2Q7Xw~}>ح#ކ`bpHʊrIENDB`ares-126/ares/ares/resource/sprite/sfc/crosshair-red.png000066400000000000000000000005261415063341600233730ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs+IDATXWA feQPFf2Mk%' qGDj8ƯrODZcqpP S4+5&h VϿuF ^CoCG0]`l%45/Q1fX`D;D+E g"&p/aJ_] 3chs7|;s3!G^ Mh,gVQ'![6,k_9xIENDB`ares-126/ares/ares/resource/sprite/ws/000077500000000000000000000000001415063341600177735ustar00rootroot00000000000000ares-126/ares/ares/resource/sprite/ws/auxiliary-0.png000066400000000000000000000001651415063341600226470ustar00rootroot00000000000000PNG  IHDR r| pHYs  'IDAT(c` C 96i@OhQIENDB`ares-126/ares/ares/resource/sprite/ws/auxiliary-1.png000066400000000000000000000002061415063341600226440ustar00rootroot00000000000000PNG  IHDR r| pHYs  8IDAT(c`Ԁ02b@րK# lp)Diz] /6IENDB`ares-126/ares/ares/resource/sprite/ws/auxiliary-2.png000066400000000000000000000002101415063341600226400ustar00rootroot00000000000000PNG  IHDR r| pHYs  :IDAT(c``&pjq)P"6ly \6b'gN IENDB`ares-126/ares/ares/resource/sprite/ws/headphones.png000066400000000000000000000002471415063341600226220ustar00rootroot00000000000000PNG  IHDR r| pHYs  YIDAT(A!zҰق,RA8S!ZE[fxV@EnА>@(f†uZW,oIIENDB`ares-126/ares/ares/resource/sprite/ws/initialized.png000066400000000000000000000002101415063341600227770ustar00rootroot00000000000000PNG  IHDR r| pHYs  :IDAT(c``1bFFF&b4 kdf6l06 48Xyda}IIIENDB`ares-126/ares/ares/resource/sprite/ws/low-battery.png000066400000000000000000000002201415063341600227440ustar00rootroot00000000000000PNG  IHDR r| pHYs  BIDAT(c` 0bFF 5L4#+¦ &bPD(pڄO# 6AlJPQJ*y A5IENDB`ares-126/ares/ares/resource/sprite/ws/orientation-0.png000066400000000000000000000002241415063341600231670ustar00rootroot00000000000000PNG  IHDR r| pHYs  FIDAT(c` 0bFF 5pid"ydiOM3OFf 6#Q'\Q hے[IENDB`ares-126/ares/ares/resource/sprite/ws/orientation-1.png000066400000000000000000000002261415063341600231720ustar00rootroot00000000000000PNG  IHDR r| pHYs  HIDAT(1 Ĭ_QrE~L)ƕ7qxDM$3гaIq$\F4R 3$\5IENDB`ares-126/ares/ares/resource/sprite/ws/powered-on.png000066400000000000000000000002331415063341600225560ustar00rootroot00000000000000PNG  IHDR r| pHYs  MIDAT(I s(!b`MmA,$<8f`M=M?ȼwXZ/KWo. 30fIENDB`ares-126/ares/ares/resource/sprite/ws/sleeping.png000066400000000000000000000002321415063341600223040ustar00rootroot00000000000000PNG  IHDR r| pHYs  LIDAT( C.,P;p^$KH0b( Aܚ*tpu)=d258;KcIENDB`ares-126/ares/ares/resource/sprite/ws/volume-a0.png000066400000000000000000000002011415063341600222770ustar00rootroot00000000000000PNG  IHDR r| pHYs  3IDAT(c`PHՀ (Հa}41222e)1)B[Y IENDB`ares-126/ares/ares/resource/sprite/ws/volume-a1.png000066400000000000000000000002161415063341600223060ustar00rootroot00000000000000PNG  IHDR r| pHYs  @IDAT(Ŏ1 <8 ;QdU'je$IK(w0(?6'IENDB`ares-126/ares/ares/resource/sprite/ws/volume-a2.png000066400000000000000000000002221415063341600223040ustar00rootroot00000000000000PNG  IHDR r| pHYs  DIDAT(Ő CM1"ɹ=;$\Wf,/uu@ IR7uG3 !?ȡ4;uRDIENDB`ares-126/ares/ares/resource/sprite/ws/volume-b2.png000066400000000000000000000002241415063341600223070ustar00rootroot00000000000000PNG  IHDR r| pHYs  FIDAT(c` 0 ?"FF ux5-A void { _threads.reset(); } inline auto Scheduler::threads() const -> u32 { return _threads.size(); } inline auto Scheduler::thread(u32 uniqueID) const -> maybe { for(auto& thread : _threads) { if(thread->_uniqueID == uniqueID) return *thread; } return {}; } //if threads A and B both have a clock value of 0, it is ambiguous which should run first. //to resolve this, a uniqueID is assigned to each thread when appended to the scheduler. //the first unused ID is selected, to avoid the uniqueID growing in an unbounded fashion. inline auto Scheduler::uniqueID() const -> u32 { u32 uniqueID = 0; while(thread(uniqueID)) uniqueID++; return uniqueID; } //find the clock time of the furthest behind thread. inline auto Scheduler::minimum() const -> u64 { u64 minimum = (u64)-1; for(auto& thread : _threads) { minimum = min(minimum, thread->_clock - thread->_uniqueID); } return minimum; } //find the clock time of the furthest ahead thread. inline auto Scheduler::maximum() const -> u64 { u64 maximum = 0; for(auto& thread : _threads) { maximum = max(maximum, thread->_clock - thread->_uniqueID); } return maximum; } inline auto Scheduler::append(Thread& thread) -> bool { if(_threads.find(&thread)) return false; thread._uniqueID = uniqueID(); thread._clock = maximum() + thread._uniqueID; _threads.append(&thread); return true; } inline auto Scheduler::remove(Thread& thread) -> void { _threads.removeByValue(&thread); } //power cycle and soft reset events: assigns the primary thread and resets all thread clocks. inline auto Scheduler::power(Thread& thread) -> void { _primary = _resume = thread.handle(); for(auto& thread : _threads) { thread->_clock = thread->_uniqueID; } } inline auto Scheduler::enter(Mode mode) -> Event { if(mode == Mode::Run) { _mode = mode; _host = co_active(); co_switch(_resume); platform->event(_event); return _event; } if(mode == Mode::Synchronize) { //run all threads to safe points, starting with the primary thread. for(auto& thread : _threads) { if(thread->handle() == _primary) { _mode = Mode::SynchronizePrimary; _host = co_active(); do { co_switch(_resume); platform->event(_event); } while(_event != Event::Synchronize); } } for(auto& thread : _threads) { if(thread->handle() != _primary) { _mode = Mode::SynchronizeAuxiliary; _host = co_active(); _resume = thread->handle(); do { co_switch(_resume); platform->event(_event); } while(_event != Event::Synchronize); } } return Event::Synchronize; } return Event::None; } inline auto Scheduler::exit(Event event) -> void { //subtract the minimum time from all threads to prevent clock overflow. auto reduce = minimum(); for(auto& thread : _threads) { thread->_clock -= reduce; } //return to the thread that entered the scheduler originally. _event = event; _resume = co_active(); co_switch(_host); } //used to prevent auxiliary threads from blocking during synchronization. //for instance, a secondary CPU waiting on an interrupt from the primary CPU. //as other threads are not run during synchronization, this would otherwise cause a deadlock. inline auto Scheduler::synchronizing() const -> bool { return _mode == Mode::SynchronizeAuxiliary; } //marks a safe point (typically the beginning of the entry point) of a thread. //the scheduler may exit at these points for the purpose of synchronization. inline auto Scheduler::synchronize() -> void { if(co_active() == _primary) { if(_mode == Mode::SynchronizePrimary) return exit(Event::Synchronize); } else { if(_mode == Mode::SynchronizeAuxiliary) return exit(Event::Synchronize); } } inline auto Scheduler::getSynchronize() -> bool { return _synchronize; } inline auto Scheduler::setSynchronize(bool synchronize) -> void { _synchronize = synchronize; } ares-126/ares/ares/scheduler/scheduler.hpp000066400000000000000000000022711415063341600206540ustar00rootroot00000000000000struct Thread; struct Scheduler { enum class Mode : u32 { Run, Synchronize, SynchronizePrimary, SynchronizeAuxiliary, }; Scheduler() = default; Scheduler(const Scheduler&) = delete; auto operator=(const Scheduler&) = delete; auto reset() -> void; auto threads() const -> u32; auto thread(u32 threadID) const -> maybe; auto uniqueID() const -> u32; auto minimum() const -> u64; auto maximum() const -> u64; auto append(Thread& thread) -> bool; auto remove(Thread& thread) -> void; auto power(Thread& thread) -> void; auto enter(Mode mode = Mode::Run) -> Event; auto exit(Event event) -> void; auto synchronizing() const -> bool; auto synchronize() -> void; auto getSynchronize() -> bool; auto setSynchronize(bool) -> void; private: cothread_t _host = nullptr; //program thread (used to exit scheduler) cothread_t _resume = nullptr; //resume thread (used to enter scheduler) cothread_t _primary = nullptr; //primary thread (used to synchronize components) Mode _mode = Mode::Run; Event _event = Event::Step; vector _threads; bool _synchronize = false; friend class Thread; }; extern Scheduler scheduler; ares-126/ares/ares/scheduler/thread.cpp000066400000000000000000000067551415063341600201530ustar00rootroot00000000000000inline auto Thread::EntryPoints() -> vector& { static vector entryPoints; return entryPoints; } inline auto Thread::Enter() -> void { for(u32 index : range(EntryPoints().size())) { if(co_active() == EntryPoints()[index].handle) { auto entryPoint = EntryPoints()[index].entryPoint; EntryPoints().remove(index); while(true) { scheduler.synchronize(); entryPoint(); } } } struct ThreadNotFound{}; throw ThreadNotFound{}; } inline Thread::~Thread() { destroy(); } inline auto Thread::active() const -> bool { return co_active() == _handle; } inline auto Thread::handle() const -> cothread_t { return _handle; } inline auto Thread::frequency() const -> u64 { return _frequency; } inline auto Thread::scalar() const -> u64 { return _scalar; } inline auto Thread::clock() const -> u64 { return _clock; } inline auto Thread::setHandle(cothread_t handle) -> void { _handle = handle; } inline auto Thread::setFrequency(double frequency) -> void { _frequency = frequency + 0.5; _scalar = Second / _frequency; } inline auto Thread::setScalar(u64 scalar) -> void { _scalar = scalar; } inline auto Thread::setClock(u64 clock) -> void { _clock = clock; } inline auto Thread::create(double frequency, function entryPoint) -> void { if(!_handle) { _handle = co_create(Thread::Size, &Thread::Enter); } else { co_derive(_handle, Thread::Size, &Thread::Enter); } EntryPoints().append({_handle, entryPoint}); setFrequency(frequency); setClock(0); scheduler.append(*this); } //returns a thread to its entry point (eg for a reset), without resetting the clock value inline auto Thread::restart(function entryPoint) -> void { co_derive(_handle, Thread::Size, &Thread::Enter); EntryPoints().append({_handle, entryPoint}); } inline auto Thread::destroy() -> void { scheduler.remove(*this); if(_handle) co_delete(_handle); _handle = nullptr; } inline auto Thread::step(u32 clocks) -> void { _clock += _scalar * clocks; } //ensure all threads are caught up to the current thread before proceeding. inline auto Thread::synchronize() -> void { //note: this will call Thread::synchronize(*this) at some point, but this is safe: //the comparison will always fail as the current thread can never be behind itself. for(auto thread : scheduler._threads) synchronize(*thread); } //ensure the specified thread(s) are caught up the current thread before proceeding. template inline auto Thread::synchronize(Thread& thread, P&&... p) -> void { //switching to another thread does not guarantee it will catch up before switching back. while(thread.clock() < clock()) { //disable synchronization for auxiliary threads during scheduler synchronization. //synchronization can begin inside of this while loop. if(scheduler.synchronizing()) break; co_switch(thread.handle()); } //convenience: allow synchronizing multiple threads with one function call. if constexpr(sizeof...(p) > 0) synchronize(forward

(p)...); } inline auto Thread::serialize(serializer& s) -> void { s(_frequency); s(_scalar); s(_clock); if(!scheduler._synchronize) { static u8 stack[Thread::Size]; bool resume = co_active() == _handle; if(s.reading()) { s(stack); s(resume); memory::copy(_handle, stack, Thread::Size); if(resume) scheduler._resume = _handle; } if(s.writing()) { memory::copy(stack, _handle, Thread::Size); s(stack); s(resume); } } } ares-126/ares/ares/scheduler/thread.hpp000066400000000000000000000024041415063341600201430ustar00rootroot00000000000000struct Scheduler; struct Thread { enum : u64 { Second = (u64)-1 >> 1 }; enum : u64 { Size = 16_KiB * sizeof(void*) }; struct EntryPoint { cothread_t handle = nullptr; function entryPoint; }; static auto EntryPoints() -> vector&; static auto Enter() -> void; Thread() = default; Thread(const Thread&) = delete; auto operator=(const Thread&) = delete; virtual ~Thread(); explicit operator bool() const { return _handle; } auto active() const -> bool; auto handle() const -> cothread_t; auto frequency() const -> u64; auto scalar() const -> u64; auto clock() const -> u64; auto setHandle(cothread_t handle) -> void; auto setFrequency(double frequency) -> void; auto setScalar(u64 scalar) -> void; auto setClock(u64 clock) -> void; auto create(double frequency, function entryPoint) -> void; auto restart(function entryPoint) -> void; auto destroy() -> void; auto step(u32 clocks) -> void; auto synchronize() -> void; template auto synchronize(Thread&, P&&...) -> void; auto serialize(serializer& s) -> void; protected: cothread_t _handle = nullptr; u32 _uniqueID = 0; u64 _frequency = 0; u64 _scalar = 0; u64 _clock = 0; friend class Scheduler; }; ares-126/ares/ares/types.hpp000066400000000000000000000212261415063341600160650ustar00rootroot00000000000000using b1 = nall::Boolean; using i1 = nall::Integer< 1>; using s1 = nall::IntegerPrimitive< 1>; using i2 = nall::Integer< 2>; using s2 = nall::IntegerPrimitive< 2>; using i3 = nall::Integer< 3>; using s3 = nall::IntegerPrimitive< 3>; using i4 = nall::Integer< 4>; using s4 = nall::IntegerPrimitive< 4>; using i5 = nall::Integer< 5>; using s5 = nall::IntegerPrimitive< 5>; using i6 = nall::Integer< 6>; using s6 = nall::IntegerPrimitive< 6>; using i7 = nall::Integer< 7>; using s7 = nall::IntegerPrimitive< 7>; using i8 = nall::Integer< 8>; using i9 = nall::Integer< 9>; using s9 = nall::IntegerPrimitive< 9>; using i10 = nall::Integer<10>; using s10 = nall::IntegerPrimitive<10>; using i11 = nall::Integer<11>; using s11 = nall::IntegerPrimitive<11>; using i12 = nall::Integer<12>; using s12 = nall::IntegerPrimitive<12>; using i13 = nall::Integer<13>; using s13 = nall::IntegerPrimitive<13>; using i14 = nall::Integer<14>; using s14 = nall::IntegerPrimitive<14>; using i15 = nall::Integer<15>; using s15 = nall::IntegerPrimitive<15>; using i16 = nall::Integer<16>; using i17 = nall::Integer<17>; using s17 = nall::IntegerPrimitive<17>; using i18 = nall::Integer<18>; using s18 = nall::IntegerPrimitive<18>; using i19 = nall::Integer<19>; using s19 = nall::IntegerPrimitive<19>; using i20 = nall::Integer<20>; using s20 = nall::IntegerPrimitive<20>; using i21 = nall::Integer<21>; using s21 = nall::IntegerPrimitive<21>; using i22 = nall::Integer<22>; using s22 = nall::IntegerPrimitive<22>; using i23 = nall::Integer<23>; using s23 = nall::IntegerPrimitive<23>; using i24 = nall::Integer<24>; using s24 = nall::IntegerPrimitive<24>; using i25 = nall::Integer<25>; using s25 = nall::IntegerPrimitive<25>; using i26 = nall::Integer<26>; using s26 = nall::IntegerPrimitive<26>; using i27 = nall::Integer<27>; using s27 = nall::IntegerPrimitive<27>; using i28 = nall::Integer<28>; using s28 = nall::IntegerPrimitive<28>; using i29 = nall::Integer<29>; using s29 = nall::IntegerPrimitive<29>; using i30 = nall::Integer<30>; using s30 = nall::IntegerPrimitive<30>; using i31 = nall::Integer<31>; using s31 = nall::IntegerPrimitive<31>; using i32 = nall::Integer<32>; using i33 = nall::Integer<33>; using s33 = nall::IntegerPrimitive<33>; using i34 = nall::Integer<34>; using s34 = nall::IntegerPrimitive<34>; using i35 = nall::Integer<35>; using s35 = nall::IntegerPrimitive<35>; using i36 = nall::Integer<36>; using s36 = nall::IntegerPrimitive<36>; using i37 = nall::Integer<37>; using s37 = nall::IntegerPrimitive<37>; using i38 = nall::Integer<38>; using s38 = nall::IntegerPrimitive<38>; using i39 = nall::Integer<39>; using s39 = nall::IntegerPrimitive<39>; using i40 = nall::Integer<40>; using s40 = nall::IntegerPrimitive<40>; using i41 = nall::Integer<41>; using s41 = nall::IntegerPrimitive<41>; using i42 = nall::Integer<42>; using s42 = nall::IntegerPrimitive<42>; using i43 = nall::Integer<43>; using s43 = nall::IntegerPrimitive<43>; using i44 = nall::Integer<44>; using s44 = nall::IntegerPrimitive<44>; using i45 = nall::Integer<45>; using s45 = nall::IntegerPrimitive<45>; using i46 = nall::Integer<46>; using s46 = nall::IntegerPrimitive<46>; using i47 = nall::Integer<47>; using s47 = nall::IntegerPrimitive<47>; using i48 = nall::Integer<48>; using s48 = nall::IntegerPrimitive<48>; using i49 = nall::Integer<49>; using s49 = nall::IntegerPrimitive<49>; using i50 = nall::Integer<50>; using s50 = nall::IntegerPrimitive<50>; using i51 = nall::Integer<51>; using s51 = nall::IntegerPrimitive<51>; using i52 = nall::Integer<52>; using s52 = nall::IntegerPrimitive<52>; using i53 = nall::Integer<53>; using s53 = nall::IntegerPrimitive<53>; using i54 = nall::Integer<54>; using s54 = nall::IntegerPrimitive<54>; using i55 = nall::Integer<55>; using s55 = nall::IntegerPrimitive<55>; using i56 = nall::Integer<56>; using s56 = nall::IntegerPrimitive<56>; using i57 = nall::Integer<57>; using s57 = nall::IntegerPrimitive<57>; using i58 = nall::Integer<58>; using s58 = nall::IntegerPrimitive<58>; using i59 = nall::Integer<59>; using s59 = nall::IntegerPrimitive<59>; using i60 = nall::Integer<60>; using s60 = nall::IntegerPrimitive<60>; using i61 = nall::Integer<61>; using s61 = nall::IntegerPrimitive<61>; using i62 = nall::Integer<62>; using s62 = nall::IntegerPrimitive<62>; using i63 = nall::Integer<63>; using s63 = nall::IntegerPrimitive<63>; using i64 = nall::Integer<64>; using n1 = nall::Natural< 1>; using u1 = nall::NaturalPrimitive< 1>; using n2 = nall::Natural< 2>; using u2 = nall::NaturalPrimitive< 2>; using n3 = nall::Natural< 3>; using u3 = nall::NaturalPrimitive< 3>; using n4 = nall::Natural< 4>; using u4 = nall::NaturalPrimitive< 4>; using n5 = nall::Natural< 5>; using u5 = nall::NaturalPrimitive< 5>; using n6 = nall::Natural< 6>; using u6 = nall::NaturalPrimitive< 6>; using n7 = nall::Natural< 7>; using u7 = nall::NaturalPrimitive< 7>; using n8 = nall::Natural< 8>; using n9 = nall::Natural< 9>; using u9 = nall::NaturalPrimitive< 9>; using n10 = nall::Natural<10>; using u10 = nall::NaturalPrimitive<10>; using n11 = nall::Natural<11>; using u11 = nall::NaturalPrimitive<11>; using n12 = nall::Natural<12>; using u12 = nall::NaturalPrimitive<12>; using n13 = nall::Natural<13>; using u13 = nall::NaturalPrimitive<13>; using n14 = nall::Natural<14>; using u14 = nall::NaturalPrimitive<14>; using n15 = nall::Natural<15>; using u15 = nall::NaturalPrimitive<15>; using n16 = nall::Natural<16>; using n17 = nall::Natural<17>; using u17 = nall::NaturalPrimitive<17>; using n18 = nall::Natural<18>; using u18 = nall::NaturalPrimitive<18>; using n19 = nall::Natural<19>; using u19 = nall::NaturalPrimitive<19>; using n20 = nall::Natural<20>; using u20 = nall::NaturalPrimitive<20>; using n21 = nall::Natural<21>; using u21 = nall::NaturalPrimitive<21>; using n22 = nall::Natural<22>; using u22 = nall::NaturalPrimitive<22>; using n23 = nall::Natural<23>; using u23 = nall::NaturalPrimitive<23>; using n24 = nall::Natural<24>; using u24 = nall::NaturalPrimitive<24>; using n25 = nall::Natural<25>; using u25 = nall::NaturalPrimitive<25>; using n26 = nall::Natural<26>; using u26 = nall::NaturalPrimitive<26>; using n27 = nall::Natural<27>; using u27 = nall::NaturalPrimitive<27>; using n28 = nall::Natural<28>; using u28 = nall::NaturalPrimitive<28>; using n29 = nall::Natural<29>; using u29 = nall::NaturalPrimitive<29>; using n30 = nall::Natural<30>; using u30 = nall::NaturalPrimitive<30>; using n31 = nall::Natural<31>; using u31 = nall::NaturalPrimitive<31>; using n32 = nall::Natural<32>; using n33 = nall::Natural<33>; using u33 = nall::NaturalPrimitive<33>; using n34 = nall::Natural<34>; using u34 = nall::NaturalPrimitive<34>; using n35 = nall::Natural<35>; using u35 = nall::NaturalPrimitive<35>; using n36 = nall::Natural<36>; using u36 = nall::NaturalPrimitive<36>; using n37 = nall::Natural<37>; using u37 = nall::NaturalPrimitive<37>; using n38 = nall::Natural<38>; using u38 = nall::NaturalPrimitive<38>; using n39 = nall::Natural<39>; using u39 = nall::NaturalPrimitive<39>; using n40 = nall::Natural<40>; using u40 = nall::NaturalPrimitive<40>; using n41 = nall::Natural<41>; using u41 = nall::NaturalPrimitive<41>; using n42 = nall::Natural<42>; using u42 = nall::NaturalPrimitive<42>; using n43 = nall::Natural<43>; using u43 = nall::NaturalPrimitive<43>; using n44 = nall::Natural<44>; using u44 = nall::NaturalPrimitive<44>; using n45 = nall::Natural<45>; using u45 = nall::NaturalPrimitive<45>; using n46 = nall::Natural<46>; using u46 = nall::NaturalPrimitive<46>; using n47 = nall::Natural<47>; using u47 = nall::NaturalPrimitive<47>; using n48 = nall::Natural<48>; using u48 = nall::NaturalPrimitive<48>; using n49 = nall::Natural<49>; using u49 = nall::NaturalPrimitive<49>; using n50 = nall::Natural<50>; using u50 = nall::NaturalPrimitive<50>; using n51 = nall::Natural<51>; using u51 = nall::NaturalPrimitive<51>; using n52 = nall::Natural<52>; using u52 = nall::NaturalPrimitive<52>; using n53 = nall::Natural<53>; using u53 = nall::NaturalPrimitive<53>; using n54 = nall::Natural<54>; using u54 = nall::NaturalPrimitive<54>; using n55 = nall::Natural<55>; using u55 = nall::NaturalPrimitive<55>; using n56 = nall::Natural<56>; using u56 = nall::NaturalPrimitive<56>; using n57 = nall::Natural<57>; using u57 = nall::NaturalPrimitive<57>; using n58 = nall::Natural<58>; using u58 = nall::NaturalPrimitive<58>; using n59 = nall::Natural<59>; using u59 = nall::NaturalPrimitive<59>; using n60 = nall::Natural<60>; using u60 = nall::NaturalPrimitive<60>; using n61 = nall::Natural<61>; using u61 = nall::NaturalPrimitive<61>; using n62 = nall::Natural<62>; using u62 = nall::NaturalPrimitive<62>; using n63 = nall::Natural<63>; using u63 = nall::NaturalPrimitive<63>; using n64 = nall::Natural<64>; using r32 = nall::Real<32>; using r64 = nall::Real<64>; ares-126/ares/component/000077500000000000000000000000001415063341600152555ustar00rootroot00000000000000ares-126/ares/component/GNUmakefile000066400000000000000000000117461415063341600173400ustar00rootroot00000000000000ares.components := $(call unique,$(ares.components)) ares.objects += $(if $(findstring ay38910,$(ares.components)),ares-audio-ay38910) ares.objects += $(if $(findstring msm5205,$(ares.components)),ares-audio-msm5205) ares.objects += $(if $(findstring sn76489,$(ares.components)),ares-audio-sn76489) ares.objects += $(if $(findstring t6w28,$(ares.components)),ares-audio-t6w28) ares.objects += $(if $(findstring ym2149,$(ares.components)),ares-audio-ym2149) ares.objects += $(if $(findstring ym2413,$(ares.components)),ares-audio-ym2413) ares.objects += $(if $(findstring ym2610,$(ares.components)),ares-audio-ym2610) ares.objects += $(if $(findstring ym2612,$(ares.components)),ares-audio-ym2612) ares.objects += $(if $(findstring m24c,$(ares.components)),ares-eeprom-m24c) ares.objects += $(if $(findstring m93lcx6,$(ares.components)),ares-eeprom-m93lcx6) ares.objects += $(if $(findstring arm7tdmi,$(ares.components)),ares-processor-arm7tdmi) ares.objects += $(if $(findstring gsu,$(ares.components)),ares-processor-gsu) ares.objects += $(if $(findstring hg51b,$(ares.components)),ares-processor-hg51b) ares.objects += $(if $(findstring huc6280,$(ares.components)),ares-processor-huc6280) ares.objects += $(if $(findstring m68hc05,$(ares.components)),ares-processor-m68hc05) ares.objects += $(if $(findstring m68000,$(ares.components)),ares-processor-m68000) ares.objects += $(if $(findstring mos6502,$(ares.components)),ares-processor-mos6502) ares.objects += $(if $(findstring sh2,$(ares.components)),ares-processor-sh2) ares.objects += $(if $(findstring sm5k,$(ares.components)),ares-processor-sm5k) ares.objects += $(if $(findstring sm83,$(ares.components)),ares-processor-sm83) ares.objects += $(if $(findstring spc700,$(ares.components)),ares-processor-spc700) ares.objects += $(if $(findstring ssp1601,$(ares.components)),ares-processor-ssp1601) ares.objects += $(if $(findstring tlcs900h,$(ares.components)),ares-processor-tlcs900h) ares.objects += $(if $(findstring upd96050,$(ares.components)),ares-processor-upd96050) ares.objects += $(if $(findstring v30mz,$(ares.components)),ares-processor-v30mz) ares.objects += $(if $(findstring wdc65816,$(ares.components)),ares-processor-wdc65816) ares.objects += $(if $(findstring z80,$(ares.components)),ares-processor-z80) ares.objects += $(if $(findstring tms9918,$(ares.components)),ares-video-tms9918) ares.objects += $(if $(findstring v9938,$(ares.components)),ares-video-v9938) $(object.path)/ares-audio-ay38910.o: $(ares.path)/component/audio/ay38910/ay38910.cpp $(object.path)/ares-audio-msm5205.o: $(ares.path)/component/audio/msm5205/msm5205.cpp $(object.path)/ares-audio-sn76489.o: $(ares.path)/component/audio/sn76489/sn76489.cpp $(object.path)/ares-audio-t6w28.o: $(ares.path)/component/audio/t6w28/t6w28.cpp $(object.path)/ares-audio-ym2149.o: $(ares.path)/component/audio/ym2149/ym2149.cpp $(object.path)/ares-audio-ym2413.o: $(ares.path)/component/audio/ym2413/ym2413.cpp $(object.path)/ares-audio-ym2610.o: $(ares.path)/component/audio/ym2610/ym2610.cpp $(object.path)/ares-audio-ym2612.o: $(ares.path)/component/audio/ym2612/ym2612.cpp $(object.path)/ares-eeprom-m24c.o: $(ares.path)/component/eeprom/m24c/m24c.cpp $(object.path)/ares-eeprom-m93lcx6.o: $(ares.path)/component/eeprom/m93lcx6/m93lcx6.cpp $(object.path)/ares-processor-arm7tdmi.o: $(ares.path)/component/processor/arm7tdmi/arm7tdmi.cpp $(object.path)/ares-processor-gsu.o: $(ares.path)/component/processor/gsu/gsu.cpp $(object.path)/ares-processor-hg51b.o: $(ares.path)/component/processor/hg51b/hg51b.cpp $(object.path)/ares-processor-huc6280.o: $(ares.path)/component/processor/huc6280/huc6280.cpp $(object.path)/ares-processor-m68hc05.o: $(ares.path)/component/processor/m68hc05/m68hc05.cpp $(object.path)/ares-processor-m68000.o: $(ares.path)/component/processor/m68000/m68000.cpp $(object.path)/ares-processor-mos6502.o: $(ares.path)/component/processor/mos6502/mos6502.cpp $(object.path)/ares-processor-sh2.o: $(ares.path)/component/processor/sh2/sh2.cpp $(object.path)/ares-processor-sm5k.o: $(ares.path)/component/processor/sm5k/sm5k.cpp $(object.path)/ares-processor-sm83.o: $(ares.path)/component/processor/sm83/sm83.cpp $(object.path)/ares-processor-spc700.o: $(ares.path)/component/processor/spc700/spc700.cpp $(object.path)/ares-processor-ssp1601.o: $(ares.path)/component/processor/ssp1601/ssp1601.cpp $(object.path)/ares-processor-tlcs900h.o: $(ares.path)/component/processor/tlcs900h/tlcs900h.cpp $(object.path)/ares-processor-upd96050.o: $(ares.path)/component/processor/upd96050/upd96050.cpp $(object.path)/ares-processor-v30mz.o: $(ares.path)/component/processor/v30mz/v30mz.cpp $(object.path)/ares-processor-wdc65816.o: $(ares.path)/component/processor/wdc65816/wdc65816.cpp $(object.path)/ares-processor-z80.o: $(ares.path)/component/processor/z80/z80.cpp $(object.path)/ares-video-tms9918.o: $(ares.path)/component/video/tms9918/tms9918.cpp $(object.path)/ares-video-v9938.o: $(ares.path)/component/video/v9938/v9938.cpp ares-126/ares/component/audio/000077500000000000000000000000001415063341600163565ustar00rootroot00000000000000ares-126/ares/component/audio/ay38910/000077500000000000000000000000001415063341600173745ustar00rootroot00000000000000ares-126/ares/component/audio/ay38910/ay38910.cpp000066400000000000000000000115131415063341600211170ustar00rootroot00000000000000#include #include "ay38910.hpp" namespace ares { #include "serialization.cpp" auto AY38910::clock() -> array { toneA.clock(); toneB.clock(); toneC.clock(); noise.clock(); envelope.clock(); array output; if((toneA.output | channelA.tone) & (noise.output | channelA.noise)) { output[0] = channelA.envelope ? envelope.output : channelA.volume; } if((toneB.output | channelB.tone) & (noise.output | channelB.noise)) { output[1] = channelB.envelope ? envelope.output : channelB.volume; } if((toneC.output | channelC.tone) & (noise.output |channelC.noise)) { output[2] = channelC.envelope ? envelope.output : channelC.volume; } return output; } auto AY38910::Tone::clock() -> void { if(++counter >= period) { counter = 0; output ^= 1; } } auto AY38910::Noise::clock() -> void { if(++counter >= period) { counter = 0; if(flip ^= 1) { output = !lfsr.bit(0); lfsr = (lfsr.bit(0) ^ lfsr.bit(3)) << 16 | lfsr >> 1; } } } auto AY38910::Envelope::clock() -> void { if(!holding && ++counter >= period) { counter = 0; if(!attacking) { if(output != 0) return (void)output--; } else { if(output != 15) return (void)output++; } if(!repeat) { output = 0; holding = 1; } else if(hold) { if(alternate) output ^= 15; holding = 1; } else if(alternate) { attacking ^= 1; } else { output = !attacking ? 15 : 0; } } } auto AY38910::read() -> n8 { n8 data; switch(io.register) { case 0: data.bit(0,7) = toneA.period.bit(0, 7); break; case 1: data.bit(0,3) = toneA.period.bit(8,11); break; case 2: data.bit(0,7) = toneB.period.bit(0, 7); break; case 3: data.bit(0,3) = toneB.period.bit(8,11); break; case 4: data.bit(0,7) = toneC.period.bit(0, 7); break; case 5: data.bit(0,3) = toneC.period.bit(8,11); break; case 6: data.bit(0,4) = noise.period; break; case 7: data.bit(0) = channelA.tone; data.bit(1) = channelB.tone; data.bit(2) = channelC.tone; data.bit(3) = channelA.noise; data.bit(4) = channelB.noise; data.bit(5) = channelC.noise; data.bit(6) = portA.direction; data.bit(7) = portB.direction; break; case 8: data.bit(0,3) = channelA.volume; data.bit(4) = channelA.envelope; break; case 9: data.bit(0,3) = channelB.volume; data.bit(4) = channelB.envelope; break; case 10: data.bit(0,3) = channelC.volume; data.bit(4) = channelC.envelope; break; case 11: data.bit(0,7) = envelope.period.bit(0, 7); break; case 12: data.bit(0,7) = envelope.period.bit(8,15); break; case 13: data.bit(0) = envelope.hold; data.bit(1) = envelope.alternate; data.bit(2) = envelope.attack; data.bit(3) = envelope.repeat; break; case 14: data.bit(0,7) = readIO(0); break; case 15: data.bit(0,7) = readIO(1); break; } return data; } auto AY38910::write(n8 data) -> void { switch(io.register) { case 0: toneA.period.bit(0, 7) = data.bit(0,7); break; case 1: toneA.period.bit(8,11) = data.bit(0,3); break; case 2: toneB.period.bit(0, 7) = data.bit(0,7); break; case 3: toneB.period.bit(8,11) = data.bit(0,3); break; case 4: toneC.period.bit(0, 7) = data.bit(0,7); break; case 5: toneC.period.bit(8,11) = data.bit(0,3); break; case 6: noise.period = data.bit(0,4); break; case 7: channelA.tone = data.bit(0); channelB.tone = data.bit(1); channelC.tone = data.bit(2); channelA.noise = data.bit(3); channelB.noise = data.bit(4); channelC.noise = data.bit(5); portA.direction = data.bit(6); portB.direction = data.bit(7); break; case 8: channelA.volume = data.bit(0,3); channelA.envelope = data.bit(4); break; case 9: channelB.volume = data.bit(0,3); channelB.envelope = data.bit(4); break; case 10: channelC.volume = data.bit(0,3); channelC.envelope = data.bit(4); break; case 11: envelope.period.bit(0, 7) = data.bit(0,7); break; case 12: envelope.period.bit(8,15) = data.bit(0,7); break; case 13: envelope.hold = data.bit(0); envelope.alternate = data.bit(1); envelope.attack = data.bit(2); envelope.repeat = data.bit(3); envelope.holding = 0; envelope.attacking = envelope.attack; envelope.output = !envelope.attacking ? 15 : 0; break; case 14: writeIO(0, data); break; case 15: writeIO(1, data); break; } } auto AY38910::select(n4 data) -> void { io.register = data; } auto AY38910::power() -> void { toneA = {}; toneB = {}; toneC = {}; noise = {}; envelope = {}; channelA = {}; channelB = {}; channelC = {}; portA = {}; portB = {}; io = {}; } } ares-126/ares/component/audio/ay38910/ay38910.hpp000066400000000000000000000025751415063341600211340ustar00rootroot00000000000000#pragma once namespace ares { //General Instrument AY-3-8910 struct AY38910 { virtual auto readIO(n1 port) -> n8 { return 0xff; } virtual auto writeIO(n1 port, n8 data) -> void {} //ay38910.cpp auto clock() -> array; auto read() -> n8; auto write(n8 data) -> void; auto select(n4 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct Tone { //ay38910.cpp auto clock() -> void; n12 counter; n12 period; n1 output; }; struct Noise { //ay38910.cpp auto clock() -> void; n5 counter; n5 period; n1 flip; n17 lfsr = 1; n1 output; }; struct Envelope { //ay38910.cpp auto clock() -> void; n16 counter; n16 period; n1 holding; n1 attacking; n1 hold; n1 alternate; n1 attack; n1 repeat; //continue n4 output; }; struct Channel { n1 tone; //0 = enable, 1 = disable n1 noise; //0 = enable, 1 = disable n1 envelope; //0 = use fixed volume, 1 = use envelope phase n4 volume; }; struct Port { n1 direction; //0 = input, 1 = output n8 data; }; struct IO { n4 register; }; Tone toneA; Tone toneB; Tone toneC; Noise noise; Envelope envelope; Channel channelA; Channel channelB; Channel channelC; Port portA; Port portB; IO io; }; } ares-126/ares/component/audio/ay38910/serialization.cpp000066400000000000000000000015701415063341600227600ustar00rootroot00000000000000auto AY38910::serialize(serializer& s) -> void { s(toneA.counter); s(toneA.period); s(toneA.output); s(toneB.counter); s(toneB.period); s(toneB.output); s(toneC.counter); s(toneC.period); s(toneC.output); s(noise.counter); s(noise.period); s(noise.flip); s(noise.lfsr); s(noise.output); s(envelope.counter); s(envelope.period); s(envelope.holding); s(envelope.attacking); s(envelope.hold); s(envelope.alternate); s(envelope.attack); s(envelope.repeat); s(envelope.output); s(channelA.tone); s(channelA.noise); s(channelA.envelope); s(channelA.volume); s(channelB.tone); s(channelB.noise); s(channelB.envelope); s(channelB.volume); s(channelC.tone); s(channelC.noise); s(channelC.envelope); s(channelC.volume); s(portA.direction); s(portA.data); s(portB.direction); s(portB.data); s(io.register); } ares-126/ares/component/audio/msm5205/000077500000000000000000000000001415063341600174665ustar00rootroot00000000000000ares-126/ares/component/audio/msm5205/msm5205.cpp000066400000000000000000000037041415063341600213060ustar00rootroot00000000000000#include #include "msm5205.hpp" namespace ares { #include "serialization.cpp" auto MSM5205::sample() const -> i12 { //note: technically this should return io.sample & ~3; //the DAC output is only 10-bits return io.sample; } auto MSM5205::scaler() const -> u32 { //0 = 4khz (384khz / 96); 8khz (768khz / 96) //1 = 6khz (384khz / 64); 12khz (768khz / 64) //2 = 8khz (384khz / 48); 16khz (768khz / 48) //3 = prohibited (unknown behavior: treat as 8khz) static const u32 scaler[4] = {96, 64, 48, 48}; return scaler[io.scaler]; } auto MSM5205::setReset(n1 reset) -> void { io.reset = reset; } auto MSM5205::setWidth(n1 width) -> void { io.width = width; } auto MSM5205::setScaler(n2 scaler) -> void { io.scaler = scaler; } auto MSM5205::setData(n4 data) -> void { if(io.width == 0) io.data = (n3)data << 1; if(io.width == 1) io.data = (n4)data << 0; } auto MSM5205::clock() -> void { if(io.reset) { io.sample = 0; io.step = 0; return; } s32 sample = io.sample + lookup[io.step * 16 + io.data]; if(sample > 2047) sample = 2047; if(sample < -2048) sample = -2048; io.sample = sample; static const s32 shift[8] = {-1, -1, -1, -1, 2, 4, 6, 8}; io.step += shift[(n3)io.data]; if(io.step > 48) io.step = 48; if(io.step < 0) io.step = 0; } auto MSM5205::power() -> void { io = {}; static const s32 map[16][4] = { { 1,0,0,0}, { 1,0,0,1}, { 1,0,1,0}, { 1,0,1,1}, { 1,1,0,0}, { 1,1,0,1}, { 1,1,1,0}, { 1,1,1,1}, {-1,0,0,0}, {-1,0,0,1}, {-1,0,1,0}, {-1,0,1,1}, {-1,1,0,0}, {-1,1,0,1}, {-1,1,1,0}, {-1,1,1,1}, }; for(s32 step : range(49)) { s32 scale = floor(16.0 * pow(11.0 / 10.0, (f64)step)); for(s32 nibble : range(16)) { s32 a = map[nibble][0]; s32 b = map[nibble][1] * scale / 1; s32 c = map[nibble][2] * scale / 2; s32 d = map[nibble][3] * scale / 4; s32 e = scale / 8; lookup[step * 16 + nibble] = a * (b + c + d + e); } } } } ares-126/ares/component/audio/msm5205/msm5205.hpp000066400000000000000000000011461415063341600213110ustar00rootroot00000000000000#pragma once namespace ares { //OKI Semiconductor MSM5205 struct MSM5205 { //msm5205.cpp auto sample() const -> i12; auto scaler() const -> u32; auto setReset(n1 reset) -> void; auto setWidth(n1 width) -> void; auto setScaler(n2 frequency) -> void; auto setData(n4 data) -> void; auto clock() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 reset; //RESET n1 width; //4B n2 scaler; //S0-S1 n4 data; //D0-D7 i12 sample; //DAOUT i8 step; } io; //unserialized: s32 lookup[49 * 16]; }; } ares-126/ares/component/audio/msm5205/serialization.cpp000066400000000000000000000002151415063341600230450ustar00rootroot00000000000000auto MSM5205::serialize(serializer& s) -> void { s(io.reset); s(io.width); s(io.scaler); s(io.data); s(io.sample); s(io.step); } ares-126/ares/component/audio/sn76489/000077500000000000000000000000001415063341600174205ustar00rootroot00000000000000ares-126/ares/component/audio/sn76489/serialization.cpp000066400000000000000000000007161415063341600230050ustar00rootroot00000000000000auto SN76489::serialize(serializer& s) -> void { s(tone0); s(tone1); s(tone2); s(noise); s(latch); } auto SN76489::Tone::serialize(serializer& s) -> void { s(volume); s(counter); s(pitch); s(output); } auto SN76489::Noise::serialize(serializer& s) -> void { s(volume); s(counter); s(pitch); s(enable); s(rate); s(lfsr); s(flip); s(output); } auto SN76489::Latch::serialize(serializer& s) -> void { s(type); s(channel); } ares-126/ares/component/audio/sn76489/sn76489.cpp000066400000000000000000000036771415063341600212030ustar00rootroot00000000000000#include #include "sn76489.hpp" namespace ares { #include "serialization.cpp" auto SN76489::clock() -> array { tone0.clock(); tone1.clock(); tone2.clock(); noise.clock(); array output{15, 15, 15, 15}; if(tone0.output) output[0] = tone0.volume; if(tone1.output) output[1] = tone1.volume; if(tone2.output) output[2] = tone2.volume; if(noise.output) output[3] = noise.volume; return output; } auto SN76489::Tone::clock() -> void { if(!counter--) { counter = pitch; output ^= 1; } } auto SN76489::Noise::clock() -> void { if(!counter--) { counter = array{0x10, 0x20, 0x40, pitch}[rate]; if(flip ^= 1) { //0->1 transition output = !lfsr.bit(0); lfsr = (lfsr.bit(0) ^ lfsr.bit(3) & enable) << 15 | lfsr >> 1; } } } auto SN76489::write(n8 data) -> void { if(data.bit(7)) { latch.type = data.bit(4); latch.channel = data.bit(5,6); if(latch.type) { switch(latch.channel) { case 0: tone0.volume = data.bit(0,3); break; case 1: tone1.volume = data.bit(0,3); break; case 2: tone2.volume = data.bit(0,3); break; case 3: noise.volume = data.bit(0,3); break; } } else { switch(latch.channel) { case 0: tone0.pitch.bit(0,3) = data.bit(0,3); break; case 1: tone1.pitch.bit(0,3) = data.bit(0,3); break; case 2: tone2.pitch.bit(0,3) = data.bit(0,3); noise.pitch = tone2.pitch; break; case 3: noise.rate = data.bit(0,1); noise.enable = data.bit(2); noise.lfsr = 0x8000; break; } } } else if(!latch.type) { switch(latch.channel) { case 0: tone0.pitch.bit(4,9) = data.bit(0,5); break; case 1: tone1.pitch.bit(4,9) = data.bit(0,5); break; case 2: tone2.pitch.bit(4,9) = data.bit(0,5); noise.pitch = tone2.pitch; break; } } } auto SN76489::power() -> void { tone0 = {}; tone1 = {}; tone2 = {}; noise = {}; latch = {}; } } ares-126/ares/component/audio/sn76489/sn76489.hpp000066400000000000000000000016361415063341600212010ustar00rootroot00000000000000#pragma once namespace ares { //Texas Instruments SN76489 struct SN76489 { //sn76489.cpp auto clock() -> array; auto write(n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct Tone { //sn76489.cpp auto clock() -> void; //serialization.cpp auto serialize(serializer&) -> void; n4 volume = 15; n10 counter; n10 pitch; n1 output; }; struct Noise { //sn76489.cpp auto clock() -> void; //serialization.cpp auto serialize(serializer&) -> void; n4 volume = 15; n10 counter; n10 pitch; n1 enable; n2 rate; n16 lfsr = 0x8000; n1 flip; n1 output; }; struct Latch { //serialization.cpp auto serialize(serializer&) -> void; n1 type; n2 channel; }; Tone tone0; Tone tone1; Tone tone2; Noise noise; Latch latch; }; } ares-126/ares/component/audio/t6w28/000077500000000000000000000000001415063341600172505ustar00rootroot00000000000000ares-126/ares/component/audio/t6w28/serialization.cpp000066400000000000000000000007661415063341600226420ustar00rootroot00000000000000auto T6W28::serialize(serializer& s) -> void { s(tone0); s(tone1); s(tone2); s(noise); s(latch); } auto T6W28::Tone::serialize(serializer& s) -> void { s(counter); s(pitch); s(output); s(volume.left); s(volume.right); } auto T6W28::Noise::serialize(serializer& s) -> void { s(counter); s(pitch); s(enable); s(rate); s(lfsr); s(flip); s(output); s(volume.left); s(volume.right); } auto T6W28::Latch::serialize(serializer& s) -> void { s(type); s(channel); } ares-126/ares/component/audio/t6w28/t6w28.cpp000066400000000000000000000053751415063341600206600ustar00rootroot00000000000000#include #include "t6w28.hpp" namespace ares { #include "serialization.cpp" auto T6W28::clock() -> array { tone0.clock(); tone1.clock(); tone2.clock(); noise.clock(); array output{15, 15, 15, 15, 15, 15, 15, 15}; if(tone0.output) output[0] = tone0.volume.left, output[4] = tone0.volume.right; if(tone1.output) output[1] = tone1.volume.left, output[5] = tone1.volume.right; if(tone2.output) output[2] = tone2.volume.left, output[6] = tone2.volume.right; if(noise.output) output[3] = noise.volume.left, output[7] = noise.volume.right; return output; } auto T6W28::Tone::clock() -> void { if(!counter--) { counter = pitch; output ^= 1; } } auto T6W28::Noise::clock() -> void { if(!counter--) { counter = array{0x10, 0x20, 0x40, pitch}[rate]; if(flip ^= 1) { //0->1 transition output = !lfsr.bit(0); lfsr = (lfsr.bit(0) ^ lfsr.bit(2) & enable) << 14 | lfsr >> 1; } } } auto T6W28::writeLeft(n8 data) -> void { if(data.bit(7)) { latch.type = data.bit(4); latch.channel = data.bit(5,6); if(latch.type) { switch(latch.channel) { case 0: tone0.volume.left = data.bit(0,3); break; case 1: tone1.volume.left = data.bit(0,3); break; case 2: tone2.volume.left = data.bit(0,3); break; case 3: noise.volume.left = data.bit(0,3); break; } } else { switch(latch.channel) { case 0: tone0.pitch.bit(0,3) = data.bit(0,3); break; case 1: tone1.pitch.bit(0,3) = data.bit(0,3); writePitch(tone1.pitch); break; case 2: tone2.pitch.bit(0,3) = data.bit(0,3); break; } } } else if(!latch.type) { switch(latch.channel) { case 0: tone0.pitch.bit(4,9) = data.bit(0,5); break; case 1: tone1.pitch.bit(4,9) = data.bit(0,5); writePitch(tone1.pitch); break; case 2: tone2.pitch.bit(4,9) = data.bit(0,5); break; } } } auto T6W28::writeRight(n8 data) -> void { if(data.bit(7)) { latch.type = data.bit(4); latch.channel = data.bit(5,6); if(latch.type) { switch(latch.channel) { case 0: tone0.volume.right = data.bit(0,3); break; case 1: tone1.volume.right = data.bit(0,3); break; case 2: tone2.volume.right = data.bit(0,3); break; case 3: noise.volume.right = data.bit(0,3); break; } } else { switch(latch.channel) { case 2: noise.pitch.bit(0,3) = data.bit(0,3); break; case 3: noise.rate = data.bit(0,1); noise.enable = data.bit(2); noise.lfsr = 0x4000; break; } } } else if(!latch.type) { switch(latch.channel) { case 2: noise.pitch.bit(4,9) = data.bit(0,5); break; } } } auto T6W28::power() -> void { tone0 = {}; tone1 = {}; tone2 = {}; noise = {}; latch = {}; } } ares-126/ares/component/audio/t6w28/t6w28.hpp000066400000000000000000000021271415063341600206550ustar00rootroot00000000000000#pragma once namespace ares { //T6W28 (SN76489 variant) struct T6W28 { virtual auto writePitch(u32) -> void = 0; //t6w28.cpp auto clock() -> array; auto writeLeft(n8 data) -> void; auto writeRight(n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct Tone { //t6w28.cpp auto clock() -> void; //serialization.cpp auto serialize(serializer&) -> void; n10 counter; n10 pitch; n1 output; struct Volume { n4 left = 15; n4 right = 15; } volume; }; struct Noise { //t6w28.cpp auto clock() -> void; //serialization.cpp auto serialize(serializer&) -> void; n10 counter; n10 pitch; n1 enable; n2 rate; n15 lfsr = 0x4000; n1 flip; n1 output; struct Volume { n4 left = 15; n4 right = 15; } volume; }; struct Latch { //serialization.cpp auto serialize(serializer&) -> void; n1 type; n2 channel; }; Tone tone0; Tone tone1; Tone tone2; Noise noise; Latch latch; }; } ares-126/ares/component/audio/ym2149/000077500000000000000000000000001415063341600173235ustar00rootroot00000000000000ares-126/ares/component/audio/ym2149/serialization.cpp000066400000000000000000000020331415063341600227020ustar00rootroot00000000000000auto YM2149::serialize(serializer& s) -> void { s(toneA.counter); s(toneA.period); s(toneA.unused); s(toneA.output); s(toneB.counter); s(toneB.period); s(toneB.unused); s(toneB.output); s(toneC.counter); s(toneC.period); s(toneC.unused); s(toneC.output); s(noise.counter); s(noise.period); s(noise.unused); s(noise.flip); s(noise.lfsr); s(noise.output); s(envelope.counter); s(envelope.period); s(envelope.holding); s(envelope.attacking); s(envelope.hold); s(envelope.alternate); s(envelope.attack); s(envelope.repeat); s(envelope.unused); s(envelope.output); s(channelA.tone); s(channelA.noise); s(channelA.envelope); s(channelA.volume); s(channelA.unused); s(channelB.tone); s(channelB.noise); s(channelB.envelope); s(channelB.volume); s(channelB.unused); s(channelC.tone); s(channelC.noise); s(channelC.envelope); s(channelC.volume); s(channelC.unused); s(portA.direction); s(portA.data); s(portB.direction); s(portB.data); s(io.register); } ares-126/ares/component/audio/ym2149/ym2149.cpp000066400000000000000000000130141415063341600207730ustar00rootroot00000000000000#include #include "ym2149.hpp" namespace ares { #include "serialization.cpp" auto YM2149::clock() -> array { toneA.clock(); toneB.clock(); toneC.clock(); noise.clock(); envelope.clock(); array output; if((toneA.output | channelA.tone) & (noise.output | channelA.noise)) { output[0] = channelA.envelope ? envelope.output : n5(channelA.volume << 1 | 1); } if((toneB.output | channelB.tone) & (noise.output | channelB.noise)) { output[1] = channelB.envelope ? envelope.output : n5(channelB.volume << 1 | 1); } if((toneC.output | channelC.tone) & (noise.output | channelC.noise)) { output[2] = channelC.envelope ? envelope.output : n5(channelC.volume << 1 | 1); } return output; } auto YM2149::Tone::clock() -> void { if(++counter >= period) { counter = 0; output ^= 1; } } auto YM2149::Noise::clock() -> void { if(++counter >= period) { counter = 0; if(flip ^= 1) { output = !lfsr.bit(0); lfsr = (lfsr.bit(0) ^ lfsr.bit(3)) << 16 | lfsr >> 1; } } } auto YM2149::Envelope::clock() -> void { if(holding) return; counter += 2; if(counter >= period) { counter = 0; if(!attacking) { if(output != 0) return (void)output--; } else { if(output != 31) return (void)output++; } if(!repeat) { output = 0; holding = 1; } else if(hold) { if(alternate) output ^= 31; holding = 1; } else if(alternate) { attacking ^= 1; } else { output = !attacking ? 31 : 0; } } } auto YM2149::read() -> n8 { n8 data; switch(io.register) { case 0: data.bit(0,7) = toneA.period.bit(0, 7); break; case 1: data.bit(0,3) = toneA.period.bit(8,11); data.bit(4,7) = toneA.unused.bit(0, 3); break; case 2: data.bit(0,7) = toneB.period.bit(0, 7); break; case 3: data.bit(0,3) = toneB.period.bit(8,11); data.bit(4,7) = toneB.unused.bit(0, 3); break; case 4: data.bit(0,7) = toneC.period.bit(0, 7); break; case 5: data.bit(0,3) = toneC.period.bit(8,11); data.bit(4,7) = toneC.unused.bit(0, 3); break; case 6: data.bit(0,4) = noise.period; data.bit(5,7) = noise.unused; break; case 7: data.bit(0) = channelA.tone; data.bit(1) = channelB.tone; data.bit(2) = channelC.tone; data.bit(3) = channelA.noise; data.bit(4) = channelB.noise; data.bit(5) = channelC.noise; data.bit(6) = portA.direction; data.bit(7) = portB.direction; break; case 8: data.bit(0,3) = channelA.volume; data.bit(4) = channelA.envelope; data.bit(5,7) = channelA.unused; break; case 9: data.bit(0,3) = channelB.volume; data.bit(4) = channelB.envelope; data.bit(5,7) = channelB.unused; break; case 10: data.bit(0,3) = channelC.volume; data.bit(4) = channelC.envelope; data.bit(5,7) = channelC.unused; break; case 11: data.bit(0,7) = envelope.period.bit(0, 7); break; case 12: data.bit(0,7) = envelope.period.bit(8,15); break; case 13: data.bit(0) = envelope.hold; data.bit(1) = envelope.alternate; data.bit(2) = envelope.attack; data.bit(3) = envelope.repeat; data.bit(4,7) = envelope.unused; break; case 14: data.bit(0,7) = portA.data; break; case 15: data.bit(0,7) = portB.data; break; } return data; } auto YM2149::write(n8 data) -> void { switch(io.register) { case 0: toneA.period.bit(0, 7) = data.bit(0,7); break; case 1: toneA.period.bit(8,11) = data.bit(0,3); toneA.unused.bit(0, 3) = data.bit(4,7); break; case 2: toneB.period.bit(0, 7) = data.bit(0,7); break; case 3: toneB.period.bit(8,11) = data.bit(0,3); toneB.unused.bit(0, 3) = data.bit(4,7); break; case 4: toneC.period.bit(0, 7) = data.bit(0,7); break; case 5: toneC.period.bit(8,11) = data.bit(0,3); toneC.unused.bit(0, 3) = data.bit(4,7); break; case 6: noise.period = data.bit(0,4); noise.unused = data.bit(5,7); break; case 7: channelA.tone = data.bit(0); channelB.tone = data.bit(1); channelC.tone = data.bit(2); channelA.noise = data.bit(3); channelB.noise = data.bit(4); channelC.noise = data.bit(5); portA.direction = data.bit(6); portB.direction = data.bit(7); break; case 8: channelA.volume = data.bit(0,3); channelA.envelope = data.bit(4); channelA.unused = data.bit(5,7); break; case 9: channelB.volume = data.bit(0,3); channelB.envelope = data.bit(4); channelB.unused = data.bit(5,7); break; case 10: channelC.volume = data.bit(0,3); channelC.envelope = data.bit(4); channelC.unused = data.bit(5,7); break; case 11: envelope.period.bit(0, 7) = data.bit(0,7); break; case 12: envelope.period.bit(8,15) = data.bit(0,7); break; case 13: envelope.hold = data.bit(0); envelope.alternate = data.bit(1); envelope.attack = data.bit(2); envelope.repeat = data.bit(3); envelope.unused = data.bit(4,7); envelope.holding = 0; envelope.attacking = envelope.attack; envelope.output = !envelope.attacking ? 31 : 0; break; case 14: portA.data = data; break; case 15: portB.data = data; break; } } auto YM2149::select(n4 data) -> void { io.register = data; } auto YM2149::power() -> void { toneA = {}; toneB = {}; toneC = {}; noise = {}; envelope = {}; channelA = {}; channelB = {}; channelC = {}; portA = {}; portB = {}; io = {}; } } ares-126/ares/component/audio/ym2149/ym2149.hpp000066400000000000000000000025501415063341600210030ustar00rootroot00000000000000#pragma once namespace ares { //Yamaha YM2149 (General Instrument AY-3-8910 derivative) struct YM2149 { //ym2149.cpp auto clock() -> array; auto read() -> n8; auto write(n8 data) -> void; auto select(n4 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct Tone { //ym2149.cpp auto clock() -> void; n12 counter; n12 period; n4 unused; n1 output; }; struct Noise { //ym2149.cpp auto clock() -> void; n5 counter; n5 period; n3 unused; n1 flip; n17 lfsr = 1; n1 output; }; struct Envelope { //ym2149.cpp auto clock() -> void; n16 counter; n16 period; n1 holding; n1 attacking; n1 hold; n1 alternate; n1 attack; n1 repeat; //continue n4 unused; n5 output; }; struct Channel { n1 tone; //0 = enable, 1 = disable n1 noise; //0 = enable, 1 = disable n1 envelope; //0 = use fixed volume, 1 = use envelope volume n4 volume; n3 unused; }; struct Port { n1 direction; //0 = input, 1 = output n8 data; }; struct IO { n4 register; }; Tone toneA; Tone toneB; Tone toneC; Noise noise; Envelope envelope; Channel channelA; Channel channelB; Channel channelC; Port portA; Port portB; IO io; }; } ares-126/ares/component/audio/ym2413/000077500000000000000000000000001415063341600173155ustar00rootroot00000000000000ares-126/ares/component/audio/ym2413/constants.cpp000066400000000000000000000067611415063341600220470ustar00rootroot00000000000000const i8 YM2413::levelScaling[16] = { //-6 dB/octave, -6 dB/8 units //input: fnumber.bits(5,8) 0, 24, 32, 37, 40, 43, 45, 47, 48, 50, 51, 52, 53, 54, 55, 56, }; const n64 YM2413::envelopeSteps[17][2] = { //{attack sequence, decay sequence }, {0x0101010101010101, 0x0101010101010101}, // 4..44 {0x0101110101011101, 0x0101110101011101}, // 5..45 {0x0111011101110111, 0x0111011101110111}, // 6..46 {0x0111111101111111, 0x0111111101111111}, // 7..47 {0x1111111111111111, 0x0101010101010101}, //48 {0x1121112111211121, 0x0101110101011101}, //49 {0x1212121212121212, 0x0111011101110111}, //50 {0x1222122212221222, 0x0111111101111111}, //51 {0x2222222222222222, 0x0101010101010101}, //52 {0x2242224222422242, 0x0101010111110101}, //53 {0x2424242424242424, 0x0101111101011111}, //54 {0x2444244424442444, 0x0101111111111111}, //55 {0x4444444444444444, 0x1111111111111111}, //56 {0x4484448444844484, 0x1111111122221111}, //57 {0x4848484848484848, 0x1111222211112222}, //58 {0x4888488848884888, 0x1111222222222222}, //59 {0x0000000000000000, 0x2222222222222222}, //60+ }; const n8 YM2413::melodicTonesOPLL[15][8] = { {0x71, 0x61, 0x1e, 0x17, 0xd0, 0x78, 0x00, 0x17}, {0x13, 0x41, 0x1a, 0x0d, 0xd8, 0xf7, 0x23, 0x13}, {0x13, 0x01, 0x99, 0x00, 0xf2, 0xc4, 0x11, 0x23}, {0x31, 0x61, 0x0e, 0x07, 0xa8, 0x64, 0x70, 0x27}, {0x32, 0x21, 0x1e, 0x06, 0xe0, 0x76, 0x00, 0x28}, {0x31, 0x22, 0x16, 0x05, 0xe0, 0x71, 0x00, 0x18}, {0x21, 0x61, 0x1d, 0x07, 0x82, 0x81, 0x10, 0x07}, {0x23, 0x21, 0x2d, 0x14, 0xa2, 0x72, 0x00, 0x07}, {0x61, 0x61, 0x1b, 0x06, 0x64, 0x65, 0x10, 0x17}, {0x41, 0x61, 0x0b, 0x18, 0x85, 0xf7, 0x71, 0x07}, {0x13, 0x01, 0x83, 0x11, 0xfa, 0xe4, 0x10, 0x04}, {0x17, 0xc1, 0x24, 0x07, 0xf8, 0xf8, 0x22, 0x12}, {0x61, 0x50, 0x0c, 0x05, 0xc2, 0xf5, 0x20, 0x42}, {0x01, 0x01, 0x55, 0x03, 0xc9, 0x95, 0x03, 0x02}, {0x61, 0x41, 0x89, 0x03, 0xf1, 0xe4, 0x40, 0x13}, }; const n8 YM2413::rhythmTonesOPLL[3][8] = { {0x01, 0x01, 0x18, 0x0f, 0xdf, 0xf8, 0x6a, 0x6d}, {0x01, 0x01, 0x00, 0x00, 0xc8, 0xd8, 0xa7, 0x48}, {0x05, 0x01, 0x00, 0x00, 0xf8, 0xaa, 0x59, 0x55}, }; const n8 YM2413::melodicTonesVRC7[15][8] = { {0x03, 0x21, 0x05, 0x06, 0xe8, 0x81, 0x42, 0x27}, //1: violin {0x13, 0x41, 0x14, 0x0d, 0xd8, 0xf6, 0x23, 0x12}, //2: guitar {0x11, 0x11, 0x08, 0x08, 0xfa, 0xb2, 0x20, 0x12}, //3: piano {0x31, 0x61, 0x0c, 0x07, 0xa8, 0x64, 0x61, 0x27}, //4: flute {0x32, 0x21, 0x1e, 0x06, 0xe1, 0x76, 0x01, 0x28}, //5: clarinet {0x02, 0x01, 0x06, 0x00, 0xa3, 0xe2, 0xf4, 0xf4}, //6: oboe {0x21, 0x61, 0x1d, 0x07, 0x82, 0x81, 0x11, 0x07}, //7: trumpet {0x23, 0x21, 0x22, 0x17, 0xa2, 0x72, 0x01, 0x17}, //8: organ {0x35, 0x11, 0x25, 0x00, 0x40, 0x73, 0x72, 0x01}, //9: horn {0xb5, 0x01, 0x0f, 0x0f, 0xa8, 0xa5, 0x51, 0x02}, //a: synthesizer {0x17, 0xc1, 0x24, 0x07, 0xf8, 0xf8, 0x22, 0x12}, //b: harpischord {0x71, 0x23, 0x11, 0x06, 0x65, 0x74, 0x18, 0x16}, //c: vibraphone {0x01, 0x02, 0xd3, 0x05, 0xc9, 0x95, 0x03, 0x02}, //d: synthesizer bass {0x61, 0x63, 0x0c, 0x00, 0x94, 0xc0, 0x33, 0xf6}, //e: acoustic bass {0x21, 0x72, 0x0d, 0x00, 0xc1, 0xd5, 0x56, 0x06}, //f: electric guitar }; const n8 YM2413::rhythmTonesVRC7[3][8] = { {0x01, 0x01, 0x18, 0x0f, 0xdf, 0xf8, 0x6a, 0x6d}, //7, 13/16: bass drum {0x01, 0x01, 0x00, 0x00, 0xc8, 0xd8, 0xa7, 0x48}, //8, 14/17: hihat, snare drum {0x05, 0x01, 0x00, 0x00, 0xf8, 0xaa, 0x59, 0x55}, //9, 15/18: tomtom, top cymbal }; n13 YM2413::sinTable[1 << 10]; i12 YM2413::expTable[1 << 9]; ares-126/ares/component/audio/ym2413/io.cpp000066400000000000000000000032751415063341600204370ustar00rootroot00000000000000auto YM2413::address(n8 data) -> void { io.address = data; } auto YM2413::write(n8 data) -> void { n4 index = io.address.bit(0,3) % 9; auto& voice = voices[index]; if(io.address >= 0x00 && io.address <= 0x07) { customTone[io.address] = data; for(u32 n : range(9)) { if(voices[n].tone == 0) reload(n); } return; } if(io.address == 0x0e) { if(io.isVRC7) return; if(io.rhythmMode != data.bit(5)) { io.rhythmMode = data.bit(5); for(u32 n : range(9)) reload(n); } if(io.rhythmMode) { hihat.trigger(data.bit(0)); cymbal.trigger(data.bit(1)); tomtom.trigger(data.bit(2)); snare.trigger(data.bit(3)); bass.carrier.trigger(data.bit(4)); } return; } if(io.address == 0x0f) { //test register is currently unemulated return; } if(io.address >= 0x10 && io.address <= 0x1f) { //0x19+ mirrors 0x10+ if(io.isVRC7 && index >= 6) return; voice.fnumber.bit(0,7) = data; voice.update(); return; } if(io.address >= 0x20 && io.address <= 0x2f) { //0x29+ mirrors 0x20+ if(io.isVRC7 && index >= 6) return; voice.fnumber.bit(8) = data.bit(0); voice.block = data.bit(1,3); n1 keyOn = data.bit(4); n1 sustainOn = data.bit(5); voice.update(); voice.carrier.trigger(keyOn, sustainOn); return; } if(io.address >= 0x30 && io.address <= 0x3f) { //0x39+ mirrors 0x30+ if(io.isVRC7 && index >= 6) return; voice.level = data.bit(0,3); voice.tone = data.bit(4,7); if(io.rhythmMode && index >= 6) voice.update(); else if(voice.tone) voice.update(melodicTones[voice.tone - 1]); else voice.update(customTone); return; } } ares-126/ares/component/audio/ym2413/operator.cpp000066400000000000000000000054441415063341600216630ustar00rootroot00000000000000auto YM2413::Operator::releaseRate() const -> n4 { if(state == Trigger) return 13; if(state == Attack) return attack; if(state == Decay) return decay; if(state == Sustain) return sustainable ? (n4)0 : release; // state == Release if(!audible) return 0; //should never happen if(sustainOn) return 5; //carrier only return sustainable ? release : (n4)7; } auto YM2413::Operator::update(maybe updateState) -> void { if(updateState) state = updateState(); auto baseRate = releaseRate(); auto ksr = 2 * block + fnumber.bit(8) >> (scaleRate ? 0 : 2); rate = min(60, baseRate ? 4 * baseRate + ksr : 0); divider = max(state == Attack ? 2 : 0, 13 - rate / 4); sequence = envelopeSteps[rate < 48 ? rate % 4 : rate - 44][state == Attack ? 0 : 1]; auto ksl = levelScaling[fnumber.bit(5,8)] + 8 * block - 56; level = totalLevel; level += max(0, scaleLevel ? ksl : 0) >> 3 - scaleLevel; auto f = fnumber.bit(6,8); long m = multiple; long lfo[8]{0, -f/2, -f, -f/2, 0, +f/2, +f, +f/2}; m += (m == 14) - (m == 13 || m == 11); //unimplemented; maps to 15, 12, or 10 m = max(1, 2 * m); //0 => 1/2, which truncates fnumber bit 0 for(u32 n : range(8)) { pitch[n] = (fnumber + lfo[n]) * m / 2 << block; } } auto YM2413::Operator::synchronize(n1 hard, maybe modulator) -> void { if(state == Trigger && envelope.bit(2,6) == 31) { update(Attack); if(rate >= 60) update(Decay), envelope = 0; if(hard) phase = 0; if(modulator) { modulator->update(Attack); if(modulator->rate >= 60) modulator->update(Decay), modulator->envelope = 0; if(hard) modulator->phase = 0; } } if(state == Attack && envelope == 0x00) update(Decay); if(state == Decay && envelope >= sustain << 3) update(Sustain); if(modulator) modulator->synchronize(hard); } //only carriers (never modulators) call trigger() auto YM2413::Operator::trigger(n1 key, n1 sustain) -> void { sustainOn = sustain; if(keyOn == key) return; keyOn = key; update(keyOn ? Trigger : Release); } auto YM2413::Operator::clock(natural clock, integer offset, integer modulation) -> i12 { n14 y = YM2413::sinTable[n10(offset + modulation)]; if(waveform & ~y.bit(0)) y = sinTable[0]; auto w = clock / 64 % 210 * tremolo; auto lfo = (w < 105 ? w : 210 - w) >> 3; y += envelope << 4 + 1; y += level << 5 + 1; y += lfo << 4 + 1; prior = output; output = expTable[y.bit(0,8)] * 1L >> y.bit(9,13); phase += pitch[clock / 1024 % 8 * vibrato]; auto lsbs = divider ? clock.bit(0, divider - 1) : 0; if(rate && (state == Attack ? lsbs & -4 : lsbs) == 0) { natural msbs = n4(clock >> divider); integer step = n4(sequence << 4 * msbs >> 60); if(state == Attack) step = ~envelope * step >> 4; envelope = max(0x00, min(0x7f, envelope + step)); } return output; } ares-126/ares/component/audio/ym2413/serialization.cpp000066400000000000000000000015661415063341600227060ustar00rootroot00000000000000auto YM2413::serialize(serializer& s) -> void { //melodicTones and rhythmTones are not serialized here: //they are reloaded during YM2413::power() s(customTone); for(auto& voice : voices) s(voice); s(io.clock); s(io.address); s(io.rhythmMode); s(io.noise); s(io.isVRC7); } auto YM2413::Voice::serialize(serializer& s) -> void { s(tone); s(fnumber); s(block); s(level); s(feedback); s(modulator); s(carrier); } auto YM2413::Operator::serialize(serializer& s) -> void { s(slot); s(keyOn); s(sustainOn); s(multiple); s(scaleRate); s(sustainable); s(vibrato); s(tremolo); s(scaleLevel); s(waveform); s(attack); s(decay); s(sustain); s(release); s(totalLevel); s(audible); s(state); s(rate); s(divider); s(sequence); s(envelope); s(level); s(fnumber); s(block); s(pitch); s(phase); s(output); s(prior); } ares-126/ares/component/audio/ym2413/voice.cpp000066400000000000000000000030301415063341600211220ustar00rootroot00000000000000auto YM2413::Voice::update(const n8* data) -> void { if(data) { modulator.multiple = data[0].bit(0,3); modulator.scaleRate = data[0].bit(4); modulator.sustainable = data[0].bit(5); modulator.vibrato = data[0].bit(6); modulator.tremolo = data[0].bit(7); carrier.multiple = data[1].bit(0,3); carrier.scaleRate = data[1].bit(4); carrier.sustainable = data[1].bit(5); carrier.vibrato = data[1].bit(6); carrier.tremolo = data[1].bit(7); modulator.totalLevel = data[2].bit(0,5); modulator.scaleLevel.bit(1) = data[2].bit(6); modulator.scaleLevel.bit(0) = data[2].bit(7); //bits swapped feedback = data[3].bit(0,2); modulator.waveform = data[3].bit(3); carrier.waveform = data[3].bit(4); //unused = data[3].bit(5); carrier.scaleLevel.bit(1) = data[3].bit(6); carrier.scaleLevel.bit(0) = data[3].bit(7); //bits swapped modulator.decay = data[4].bit(0,3); modulator.attack = data[4].bit(4,7); carrier.decay = data[5].bit(0,3); carrier.attack = data[5].bit(4,7); modulator.release = data[6].bit(0,3); modulator.sustain = data[6].bit(4,7); carrier.release = data[7].bit(0,3); carrier.sustain = data[7].bit(4,7); } modulator.block = block; modulator.fnumber = fnumber; if(modulator.audible) modulator.totalLevel = tone << 2; modulator.update(); carrier.block = block; carrier.fnumber = fnumber; carrier.totalLevel = level << 2; carrier.update(); } ares-126/ares/component/audio/ym2413/ym2413.cpp000066400000000000000000000072721415063341600207700ustar00rootroot00000000000000#include #include "ym2413.hpp" namespace ares { #include "constants.cpp" #include "operator.cpp" #include "voice.cpp" #include "io.cpp" #include "serialization.cpp" auto YM2413::clock() -> f64 { auto melody = 0; auto rhythm = 0; auto mask = -(1 << 12 - 9); for(u32 index : range(io.rhythmMode ? 6 : 9)) { auto& voice = voices[index]; auto input = voice.modulator.output + voice.modulator.prior >> 8 - voice.feedback; voice.modulator.clock(io.clock, voice.modulator.phase >> 9, voice.feedback ? input : 0); voice.carrier.clock(io.clock, voice.carrier.phase >> 9, voice.modulator.output << 1); voice.carrier.synchronize(true, voice.modulator); melody += mask & voice.carrier.output; } if(io.rhythmMode) { auto metallic = [](auto a, auto b) { return (a.bit(16) ^ a.bit(11)) | a.bit(12) | b.bit(14) | b.bit(12); }; auto noise = io.noise.bit(0); auto m = metallic(hihat.phase, cymbal.phase); auto input = bass.modulator.output + bass.modulator.prior >> 8 - bass.feedback; bass.modulator.clock(io.clock, bass.modulator.phase >> 9, bass.feedback ? input : 0); bass.carrier.clock(io.clock, bass.carrier.phase >> 9, bass.modulator.output << 1); bass.carrier.synchronize(true, bass.modulator); rhythm += mask & bass.carrier.output; rhythm += mask & hihat.clock(io.clock, m << 9 | (m ^ noise ? 52 : 208)); rhythm += mask & tomtom.clock(io.clock, tomtom.phase >> 9); rhythm += mask & snare.clock(io.clock, 1 << snare.phase.bit(17) + 8 ^ noise << 8); rhythm += mask & cymbal.clock(io.clock, m << 9 | 256); hihat.synchronize(false); snare.synchronize(true); tomtom.synchronize(true); cymbal.synchronize(false); } auto mix = melody + 2 * rhythm; io.noise = io.noise >> 1 ^ io.noise.bit(0) * (1 << 22 | 1 << 8 | 1 << 7 | 1 << 0); if(++io.clock == 210 << 12) io.clock -= 210 << 12; return mix / 32768.0 * 4.0; } auto YM2413::reload(n4 index) -> void { auto& voice = voices[index]; voice.modulator.audible = io.rhythmMode && index > 6; voice.carrier.audible = true; if(io.rhythmMode && index >= 6) voice.update(rhythmTones[index - 6]); else if(voice.tone) voice.update(melodicTones[voice.tone - 1]); else voice.update(customTone); } auto YM2413::power(bool isVRC7) -> void { if(isVRC7) { memory::copy(melodicTones, sizeof(melodicTones), melodicTonesVRC7, sizeof(melodicTonesVRC7)); memory::copy( rhythmTones, sizeof( rhythmTones), rhythmTonesVRC7, sizeof(rhythmTonesVRC7)); } else { memory::copy(melodicTones, sizeof(melodicTones), melodicTonesOPLL, sizeof(melodicTonesOPLL)); memory::copy( rhythmTones, sizeof( rhythmTones), rhythmTonesOPLL, sizeof(rhythmTonesOPLL)); } for(auto& byte : customTone) byte = 0x00; if(!sinTable[0] || !expTable[0]) for(auto x : range(0x100)) { //10.9 fixed point phases auto y = sin((2 * x + 1) * Math::Pi / 1024.0); //0x400 units to 2pi radians auto z = -(1 << 8) * log(y) / log(2); //convert to -6 dB/256 units auto s = (1 << 10) * pow(2, n8(~x) / 256.0); //0x7fa .. 0x400 sinTable[0x000 + x] = sinTable[0x1ff - x] = u32(z + 0.5) * 2 + 1; sinTable[0x200 + x] = sinTable[0x3ff - x] = u32(z + 0.5) * 2 + 0; expTable[x * 2 + 1] = +u32(s + 0.5); expTable[x * 2 + 0] = ~u32(s + 0.5); } io = {}; io.isVRC7 = isVRC7; for(u32 n : range(9)) { voices[n] = {}; reload(n); } for(u32 n : range(3)) { voices[3 * n + 0].modulator.slot = 1 + 6 * n; voices[3 * n + 1].modulator.slot = 2 + 6 * n; voices[3 * n + 2].modulator.slot = 3 + 6 * n; voices[3 * n + 0].carrier.slot = 4 + 6 * n; voices[3 * n + 1].carrier.slot = 5 + 6 * n; voices[3 * n + 2].carrier.slot = 6 + 6 * n; } } } ares-126/ares/component/audio/ym2413/ym2413.hpp000066400000000000000000000044511415063341600207710ustar00rootroot00000000000000#pragma once namespace ares { //Yamaha YM2413 (OPLL) //Author: Talarubi struct YM2413 { //ym2413.cpp auto clock() -> f64; auto reload(n4 voice) -> void; auto power(bool isVRC7 = false) -> void; //io.cpp auto address(n8 data) -> void; auto write(n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: static const i8 levelScaling[16]; static const n64 envelopeSteps[17][2]; static const n8 melodicTonesOPLL[15][8]; static const n8 rhythmTonesOPLL[3][8]; static const n8 melodicTonesVRC7[15][8]; static const n8 rhythmTonesVRC7[3][8]; static n13 sinTable[1 << 10]; static i12 expTable[1 << 9]; n8 melodicTones[15][8]; n8 rhythmTones[3][8]; n8 customTone[8]; enum : u32 { Trigger, Attack, Decay, Sustain, Release }; struct Operator { //operator.cpp auto releaseRate() const -> n4; auto update(maybe state = {}) -> void; auto synchronize(n1 hard, maybe modulator = {}) -> void; auto trigger(n1 key, n1 sustain = 0) -> void; auto clock(natural clock, integer offset, integer modulation = 0) -> i12; //serialization.cpp auto serialize(serializer&) -> void; n5 slot; //1-18 n1 keyOn; n1 sustainOn; n4 multiple; n1 scaleRate; n1 sustainable; n1 vibrato; n1 tremolo; n2 scaleLevel; n1 waveform; n4 attack; n4 decay; n4 sustain; n4 release; n6 totalLevel; n1 audible; //envelope generator n3 state = Release; n7 rate; n4 divider; n64 sequence; n7 envelope = 0x7f; n7 level; //phase generator n9 fnumber; n3 block; n19 pitch[8]; n19 phase; //output i12 output; i12 prior; }; struct Voice { //voice.cpp auto update(const n8* data = nullptr) -> void; //serialization.cpp auto serialize(serializer&) -> void; n4 tone; n9 fnumber; n3 block; n4 level; n3 feedback; Operator modulator; Operator carrier; } voices[9]; struct IO { n32 clock; n8 address; n1 rhythmMode; n23 noise = 1; n1 isVRC7 = 0; } io; Voice& bass = voices[6]; Operator& hihat = voices[7].modulator; Operator& snare = voices[7].carrier; Operator& tomtom = voices[8].modulator; Operator& cymbal = voices[8].carrier; }; } ares-126/ares/component/audio/ym2610/000077500000000000000000000000001415063341600173145ustar00rootroot00000000000000ares-126/ares/component/audio/ym2610/io.cpp000066400000000000000000000016051415063341600204310ustar00rootroot00000000000000auto YM2610::read(n2 address) -> n8 { switch(address) { case 0: return fm.readStatus(); } return 0; } auto YM2610::write(n2 address, n8 data) -> void { switch(address) { case 0: register = 0x000 | data; return; case 1: return writeLower(data); case 2: register = 0x100 | data; return; case 3: return writeUpper(data); } } auto YM2610::writeLower(n8 data) -> void { switch(register) { case 0x000 ... 0x00f: ssg.select(register); ssg.write(data); return; case 0x010 ... 0x01b: //ADPCM-B return; case 0x01c: //EOS return; case 0x01d ... 0x1ff: fm.writeAddress(register); fm.writeData(data); return; } unreachable; } auto YM2610::writeUpper(n8 data) -> void { switch(register) { case 0x000 ... 0x12f: //ADPCM-A return; case 0x130 ... 0x1ff: fm.writeAddress(register); fm.writeData(data); return; } } ares-126/ares/component/audio/ym2610/serialization.cpp000066400000000000000000000001241415063341600226720ustar00rootroot00000000000000auto YM2610::serialize(serializer& s) -> void { s(register); s(fm); s(ssg); } ares-126/ares/component/audio/ym2610/ym2610.cpp000066400000000000000000000002631415063341600207570ustar00rootroot00000000000000#include #include "ym2610.hpp" namespace ares { #include "io.cpp" #include "serialization.cpp" auto YM2610::power() -> void { fm.power(); ssg.power(); } } ares-126/ares/component/audio/ym2610/ym2610.hpp000066400000000000000000000007421415063341600207660ustar00rootroot00000000000000#pragma once #include #include namespace ares { //Yamaha YM2610 (OPNB) struct YM2610 { //ym2610.cpp auto power() -> void; //io.cpp auto read(n2 address) -> n8; auto write(n2 address, n8 data) -> void; auto writeLower(n8 data) -> void; auto writeUpper(n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: n9 register; YM2612 fm; YM2149 ssg; }; } ares-126/ares/component/audio/ym2612/000077500000000000000000000000001415063341600173165ustar00rootroot00000000000000ares-126/ares/component/audio/ym2612/channel.cpp000066400000000000000000000132651415063341600214410ustar00rootroot00000000000000auto YM2612::Channel::Operator::trigger(bool state) -> void { if(keyOn == state) return; //no change keyOn = state; envelope.state = Release; updateEnvelope(); if(keyOn) { //restart phase and envelope generators phase.value = 0; ssg.invert = false; envelope.state = Attack; updateEnvelope(); if(envelope.rate >= 62) { //skip attack and possibly decay stages envelope.value = 0; envelope.state = envelope.sustainLevel ? Decay : Sustain; updateEnvelope(); } } else if(ssg.enable && ssg.attack != ssg.invert) { //SSG-EG key-off envelope.value = 0x200 - envelope.value; } updateLevel(); } auto YM2612::Channel::Operator::runEnvelope() -> void { u32 sustain = envelope.sustainLevel < 15 ? envelope.sustainLevel << 5 : 0x3f0; if(ym2612.envelope.clock & (1 << envelope.divider) - 1) return; u32 value = ym2612.envelope.clock >> envelope.divider; u32 step = envelope.steps >> ((~value & 7) << 2) & 0xf; if(ssg.enable) step <<= 2; //SSG results in a 4x faster envelope if(envelope.state == Attack) { u32 next = envelope.value + (~u16(envelope.value) * step >> 4) & 0x3ff; if(next <= envelope.value) { envelope.value = next; } else { envelope.value = 0; envelope.state = envelope.value < sustain ? Decay : Sustain; updateEnvelope(); } } else if(!ssg.enable || envelope.value < 0x200) { envelope.value = min(envelope.value + step, 0x3ff); if(envelope.state == Decay && envelope.value >= sustain) { envelope.state = Sustain; updateEnvelope(); } } updateLevel(); } auto YM2612::Channel::Operator::runPhase() -> void { phase.value += phase.delta; //advance wave position if(!(ssg.enable && envelope.value >= 0x200)) return; //SSG loop check if(!ssg.hold && !ssg.alternate) phase.value = 0; if(!ssg.hold || ssg.attack == ssg.invert) ssg.invert ^= ssg.alternate; if(envelope.state == Attack) { //do nothing; SSG is meant to skip the attack phase } else if(envelope.state != Release && !ssg.hold) { //if still looping, reset the envelope envelope.state = Attack; if(envelope.attackRate >= 62) { envelope.value = 0; envelope.state = envelope.sustainLevel ? Decay : Sustain; } updateEnvelope(); } else if(envelope.state == Release || (ssg.hold && ssg.attack == ssg.invert)) { //clear envelope once finished envelope.value = 0x3ff; } updateLevel(); } auto YM2612::Channel::Operator::updateEnvelope() -> void { u32 key = min(max((u32)pitch.value, 0x300), 0x4ff); u32 ksr = (octave.value << 2) + ((key - 0x300) >> 7); u32 rate = 0; if(envelope.state == Attack) rate += (envelope.attackRate << 1); if(envelope.state == Decay) rate += (envelope.decayRate << 1); if(envelope.state == Sustain) rate += (envelope.sustainRate << 1); if(envelope.state == Release) rate += (envelope.releaseRate << 1); rate += (ksr >> 3 - envelope.keyScale) * (rate > 0); rate = min(rate, 63); auto& entry = envelopeRates[rate >> 2]; envelope.rate = rate; envelope.divider = entry.divider; envelope.steps = entry.steps[rate & 3]; } auto YM2612::Channel::Operator::updatePitch() -> void { //only channel[2] allows per-operator frequencies //implemented by forcing mode to zero (single frequency) for other channels //in single frequency mode, operator[3] frequency is used for all operators pitch.value = channel.mode ? pitch.reload : channel[3].pitch.reload; octave.value = channel.mode ? octave.reload : channel[3].octave.reload; updatePhase(); updateEnvelope(); //due to key scaling } auto YM2612::Channel::Operator::updatePhase() -> void { u32 key = min(max((u32)pitch.value, 0x300), 0x4ff); u32 ksr = (octave.value << 2) + ((key - 0x300) >> 7); u32 tuning = detune & 3 ? detunes[(detune & 3) - 1][ksr & 7] >> (3 - (ksr >> 3)) : 0; u32 lfo = ym2612.lfo.clock >> 2 & 0x1f; u32 pm = 4 * vibratos[channel.vibrato][lfo & 15] * (-lfo >> 4); u32 msb = 10; while(msb > 4 && ~pitch.value & 1 << msb) msb--; phase.delta = pitch.value + (pm >> 10 - msb) << 6 >> 7 - octave.value; phase.delta = (!detune.bit(2) ? phase.delta + tuning : phase.delta - tuning) & 0x1ffff; phase.delta = (multiple ? phase.delta * multiple : phase.delta >> 1) & 0xfffff; } auto YM2612::Channel::Operator::updateLevel() -> void { u32 lfo = ym2612.lfo.clock & 0x40 ? ym2612.lfo.clock & 0x3f : ~ym2612.lfo.clock & 0x3f; u32 depth = tremolos[channel.tremolo]; bool invert = ssg.attack != ssg.invert && envelope.state != Release; n10 value = ssg.enable && invert ? 0x200 - envelope.value : 0 + envelope.value; outputLevel = ((totalLevel << 3) + value + (lfoEnable ? lfo << 1 >> depth : 0)) << 3; } auto YM2612::Channel::power() -> void { leftEnable = 1; rightEnable = 1; algorithm = 0; feedback = 0; vibrato = 0; tremolo = 0; mode = 0; for(auto& op : operators) { op.keyOn = 0; op.lfoEnable = 0; op.detune = 0; op.multiple = 0; op.totalLevel = 0; op.outputLevel = 0x1fff; op.output = 0; op.prior = 0; op.pitch.value = 0; op.pitch.reload = 0; op.pitch.latch = 0; op.octave.value = 0; op.octave.reload = 0; op.octave.latch = 0; op.phase.value = 0; op.phase.delta = 0; op.envelope.state = Release; op.envelope.rate = 0; op.envelope.divider = 11; op.envelope.steps = 0; op.envelope.value = 0x3ff; op.envelope.keyScale = 0; op.envelope.attackRate = 0; op.envelope.decayRate = 0; op.envelope.sustainRate = 0; op.envelope.sustainLevel = 0; op.envelope.releaseRate = 1; op.ssg.enable = 0; op.ssg.attack = 0; op.ssg.alternate = 0; op.ssg.hold = 0; op.ssg.invert = 0; op.updatePitch(); op.updateLevel(); } } ares-126/ares/component/audio/ym2612/constants.cpp000066400000000000000000000032611415063341600220400ustar00rootroot00000000000000const u8 YM2612::lfoDividers[8] = { 108, 77, 71, 67, 62, 44, 8, 5, }; const u8 YM2612::vibratos[8][16] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 2, 2, 1, 1, 0, 0}, {0, 0, 1, 2, 2, 2, 3, 4, 4, 3, 2, 2, 2, 1, 0, 0}, {0, 0, 2, 3, 4, 4, 5, 6, 6, 5, 4, 4, 3, 2, 0, 0}, {0, 0, 4, 6, 8, 8,10,12,12,10, 8, 8, 6, 4, 0, 0}, {0, 0, 8,12,16,16,20,24,24,20,16,16,12, 8, 0, 0}, }; const u8 YM2612::tremolos[4] = { 7, 3, 1, 0, }; const u8 YM2612::detunes[3][8] = { { 5, 6, 6, 7, 8, 8, 9, 10}, {11, 12, 13, 14, 16, 17, 18, 20}, {16, 17, 19, 20, 22, 24, 26, 28}, }; const YM2612::EnvelopeRate YM2612::envelopeRates[16] = { 11, {0x00000000, 0x00000000, 0x01010101, 0x01010101}, 10, {0x01010101, 0x01010101, 0x01110111, 0x01110111}, 9, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 8, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 7, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 6, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 5, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 4, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 3, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 2, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 1, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 0, {0x01010101, 0x01011101, 0x01110111, 0x01111111}, 0, {0x11111111, 0x11121112, 0x12121212, 0x12221222}, 0, {0x22222222, 0x22242224, 0x24242424, 0x24442444}, 0, {0x44444444, 0x44484448, 0x48484848, 0x48884888}, 0, {0x88888888, 0x88888888, 0x88888888, 0x88888888}, }; ares-126/ares/component/audio/ym2612/io.cpp000066400000000000000000000112371415063341600204350ustar00rootroot00000000000000auto YM2612::readStatus() -> n8 { //d7 = busy (not emulated, requires cycle timing accuracy) return timerA.line << 0 | timerB.line << 1; } auto YM2612::writeAddress(n9 data) -> void { io.address = data; } auto YM2612::writeData(n8 data) -> void { switch(io.address) { //LFO case 0x022: { lfo.rate = data.bit(0,2); lfo.enable = data.bit(3); break; } //timer A period (high) case 0x024: { timerA.period.bit(2,9) = data.bit(0,7); break; } //timer A period (low) case 0x025: { timerA.period.bit(0,1) = data.bit(0,1); break; } //timer B period case 0x026: { timerB.period.bit(0,7) = data.bit(0,7); break; } //timer control case 0x027: { //d6,d7 = mode (unimplemented; treated as mode 0 always) //reload period on 0->1 transition if(!timerA.enable && data.bit(0)) timerA.counter = timerA.period; if(!timerB.enable && data.bit(1)) timerB.counter = timerB.period; timerA.enable = data.bit(0); timerB.enable = data.bit(1); timerA.irq = data.bit(2); timerB.irq = data.bit(3); if(data.bit(4)) timerA.line = 0; if(data.bit(5)) timerB.line = 0; channels[2].mode = data.bit(6,7); for(auto& op : channels[2].operators) op.updatePitch(); break; } //key on/off case 0x28: { //0,1,2,4,5,6 => 0,1,2,3,4,5 u32 index = data.bit(0,2); if(index == 3 || index == 7) break; if(index >= 4) index--; channels[index][0].trigger(data.bit(4)); channels[index][1].trigger(data.bit(5)); channels[index][2].trigger(data.bit(6)); channels[index][3].trigger(data.bit(7)); break; } //DAC sample case 0x2a: { dac.sample = data; break; } //DAC enable case 0x2b: { dac.enable = data.bit(7); break; } } if(io.address.bit(0,1) == 3) return; n3 voice = io.address.bit(8) * 3 + io.address.bit(0,1); n2 index = io.address.bit(2,3) >> 1 | io.address.bit(2,3) << 1; //0,1,2,3 => 0,2,1,3 auto& channel = channels[voice]; auto& op = channel.operators[index]; switch(io.address & 0x0f0) { //detune, multiple case 0x030: { op.multiple = data.bit(0,3); op.detune = data.bit(4,6); channel[index].updatePhase(); break; } //total level case 0x040: { op.totalLevel = data.bit(0,6); channel[index].updateLevel(); break; } //key scaling, attack rate case 0x050: { op.envelope.attackRate = data.bit(0,4); op.envelope.keyScale = data.bit(6,7); channel[index].updateEnvelope(); channel[index].updatePhase(); break; } //LFO enable, decay rate case 0x060: { op.envelope.decayRate = data.bit(0,4); op.lfoEnable = data.bit(7); channel[index].updateEnvelope(); channel[index].updateLevel(); break; } //sustain rate case 0x070: { op.envelope.sustainRate = data.bit(0,4); channel[index].updateEnvelope(); break; } //sustain level, release rate case 0x080: { op.envelope.releaseRate = data.bit(0,3) << 1 | 1; op.envelope.sustainLevel = data.bit(4,7); channel[index].updateEnvelope(); break; } //SSG-EG case 0x090: { op.ssg.hold = data.bit(0); op.ssg.alternate = data.bit(1); op.ssg.attack = data.bit(2); op.ssg.enable = data.bit(3); break; } } switch(io.address & 0x0fc) { //pitch (low) case 0x0a0: { channel[3].pitch.reload = channel[3].pitch.latch | data; channel[3].octave.reload = channel[3].octave.latch; for(u32 index : range(4)) channel[index].updatePitch(); break; } //pitch (high) case 0x0a4: { channel[3].pitch.latch = data << 8; channel[3].octave.latch = data >> 3; break; } //per-operator pitch (low) case 0x0a8: { if(io.address == 0x0a9) index = 0; if(io.address == 0x0aa) index = 1; if(io.address == 0x0a8) index = 2; channels[2][index].pitch.reload = channels[2][index].pitch.latch | data; channels[2][index].octave.reload = channels[2][index].octave.latch; channels[2][index].updatePitch(); break; } //per-operator pitch (high) case 0x0ac: { if(io.address == 0x0ad) index = 0; if(io.address == 0x0ae) index = 1; if(io.address == 0x0ac) index = 2; channels[2][index].pitch.latch = data << 8; channels[2][index].octave.latch = data >> 3; break; } //algorithm, feedback case 0x0b0: { channel.algorithm = data.bit(0,2); channel.feedback = data.bit(3,5); break; } //panning, tremolo, vibrato case 0x0b4: { channel.vibrato = data.bit(0,2); channel.tremolo = data.bit(4,5); channel.rightEnable = data.bit(6); channel.leftEnable = data.bit(7); for(u32 index : range(4)) { channel[index].updateLevel(); channel[index].updatePhase(); } break; } } } ares-126/ares/component/audio/ym2612/serialization.cpp000066400000000000000000000025261415063341600227040ustar00rootroot00000000000000auto YM2612::serialize(serializer& s) -> void { s(io.address); s(lfo.enable); s(lfo.rate); s(lfo.clock); s(lfo.divider); s(dac.enable); s(dac.sample); s(envelope.clock); s(envelope.divider); s(timerA.enable); s(timerA.irq); s(timerA.line); s(timerA.period); s(timerA.counter); s(timerB.enable); s(timerB.irq); s(timerB.line); s(timerB.period); s(timerB.counter); s(timerB.divider); for(u32 n : range(6)) s(channels[n]); } auto YM2612::Channel::serialize(serializer& s) -> void { s(leftEnable); s(rightEnable); s(algorithm); s(feedback); s(vibrato); s(tremolo); s(mode); for(u32 n : range(4)) s(operators[n]); } auto YM2612::Channel::Operator::serialize(serializer& s) -> void { s(keyOn); s(lfoEnable); s(detune); s(multiple); s(totalLevel); s(outputLevel); s(output); s(prior); s(pitch.value); s(pitch.reload); s(pitch.latch); s(octave.value); s(octave.reload); s(octave.latch); s(phase.value); s(phase.delta); s(envelope.state); s(envelope.rate); s(envelope.divider); s(envelope.steps); s(envelope.value); s(envelope.keyScale); s(envelope.attackRate); s(envelope.decayRate); s(envelope.sustainRate); s(envelope.sustainLevel); s(envelope.releaseRate); s(ssg.enable); s(ssg.attack); s(ssg.alternate); s(ssg.hold); s(ssg.invert); } ares-126/ares/component/audio/ym2612/timer.cpp000066400000000000000000000004131415063341600211400ustar00rootroot00000000000000auto YM2612::TimerA::run() -> void { if(!enable) return; if(++counter) return; counter = period; line |= irq; } auto YM2612::TimerB::run() -> void { if(!enable) return; if(++divider) return; if(++counter) return; counter = period; line |= irq; } ares-126/ares/component/audio/ym2612/ym2612.cpp000066400000000000000000000104261415063341600207650ustar00rootroot00000000000000#include #include "ym2612.hpp" namespace ares { #include "io.cpp" #include "timer.cpp" #include "channel.cpp" #include "constants.cpp" #include "serialization.cpp" auto YM2612::clock() -> array { s32 left = 0; s32 right = 0; for(auto& channel : channels) { auto& op = channel.operators; const s32 modMask = -(1 << 1); const s32 sumMask = -(1 << 5); const s32 outMask = -(1 << 5); auto old = [&](u32 n) -> s32 { return op[n].prior & modMask; }; auto mod = [&](u32 n) -> s32 { return op[n].output & modMask; }; auto out = [&](u32 n) -> s32 { return op[n].output & sumMask; }; auto wave = [&](u32 n, u32 modulation) -> s32 { s32 x = (modulation >> 1) + (op[n].phase.value >> 10); s32 y = sine[x & 0x3ff] + op[n].outputLevel; return y < 0x2000 ? pow2[y & 0x1ff] << 2 >> (y >> 9) : 0; }; s32 feedback = modMask & op[0].output + op[0].prior >> 9 - channel.feedback; s32 accumulator = 0; for(auto n : range(4)) op[n].prior = op[n].output; op[0].output = wave(0, feedback * (channel.feedback > 0)); if(channel.algorithm == 0) { //0 -> 1 -> 2 -> 3 op[1].output = wave(1, mod(0)); op[2].output = wave(2, old(1)); op[3].output = wave(3, mod(2)); accumulator += out(3); } if(channel.algorithm == 1) { //(0 + 1) -> 2 -> 3 op[1].output = wave(1, 0); op[2].output = wave(2, mod(0) + old(1)); op[3].output = wave(3, mod(2)); accumulator += out(3); } if(channel.algorithm == 2) { //0 + (1 -> 2) -> 3 op[1].output = wave(1, 0); op[2].output = wave(2, old(1)); op[3].output = wave(3, mod(0) + mod(2)); accumulator += out(3); } if(channel.algorithm == 3) { //(0 -> 1) + 2 -> 3 op[1].output = wave(1, mod(0)); op[2].output = wave(2, 0); op[3].output = wave(3, mod(1) + mod(2)); accumulator += out(3); } if(channel.algorithm == 4) { //(0 -> 1) + (2 -> 3) op[1].output = wave(1, mod(0)); op[2].output = wave(2, 0); op[3].output = wave(3, mod(2)); accumulator += out(1) + out(3); } if(channel.algorithm == 5) { //0 -> (1 + 2 + 3) op[1].output = wave(1, mod(0)); op[2].output = wave(2, old(0)); op[3].output = wave(3, mod(0)); accumulator += out(1) + out(2) + out(3); } if(channel.algorithm == 6) { //(0 -> 1) + 2 + 3 op[1].output = wave(1, mod(0)); op[2].output = wave(2, 0); op[3].output = wave(3, 0); accumulator += out(1) + out(2) + out(3); } if(channel.algorithm == 7) { //0 + 1 + 2 + 3 op[1].output = wave(1, 0); op[2].output = wave(2, 0); op[3].output = wave(3, 0); accumulator += out(0) + out(1) + out(2) + out(3); } s32 voiceData = sclamp<14>(accumulator) & outMask; if(dac.enable && (&channel == &channels[5])) voiceData = (s32)dac.sample - 0x80 << 6; if(channel.leftEnable ) left += voiceData; if(channel.rightEnable) right += voiceData; } timerA.run(); timerB.run(); if(lfo.enable && ++lfo.divider == lfoDividers[lfo.rate]) { lfo.divider = 0; lfo.clock++; for(auto& channel : channels) { for(auto& op : channel.operators) { op.updatePhase(); //due to vibrato op.updateLevel(); //due to tremolo } } } if(++envelope.divider == 3) { envelope.divider = 0; envelope.clock++; } for(auto& channel : channels) { for(auto& op : channel.operators) { op.runPhase(); if(envelope.divider) continue; op.runEnvelope(); } } return {sclamp<16>(left), sclamp<16>(right)}; } auto YM2612::power() -> void { io = {}; lfo = {}; dac = {}; envelope = {}; timerA = {}; timerB = {}; for(auto& channel : channels) channel.power(); const u32 positive = 0; const u32 negative = 1; for(s32 x = 0; x <= 0xff; x++) { s32 y = -256 * log(sin((2 * x + 1) * Math::Pi / 1024)) / log(2) + 0.5; sine[0x000 + x] = positive + (y << 1); sine[0x1ff - x] = positive + (y << 1); sine[0x200 + x] = negative + (y << 1); sine[0x3ff - x] = negative + (y << 1); } for(s32 y = 0; y <= 0xff; y++) { s32 z = 1024 * pow(2, (0xff - y) / 256.0) + 0.5; pow2[positive + (y << 1)] = +z; pow2[negative + (y << 1)] = ~z; //not -z } } } ares-126/ares/component/audio/ym2612/ym2612.hpp000066400000000000000000000064041415063341600207730ustar00rootroot00000000000000#pragma once namespace ares { //Yamaha YM2612 (OPN2) //Author: Talarubi struct YM2612 { //ym2612.cpp auto clock() -> array; auto power() -> void; //io.cpp auto readStatus() -> n8; auto writeAddress(n9 data) -> void; auto writeData(n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct IO { n9 address = 0; } io; struct LFO { n1 enable = 0; n3 rate = 0; n32 clock = 0; n32 divider = 0; } lfo; struct DAC { n1 enable = 0; n8 sample = 0x80; } dac; struct Envelope { n32 clock = 0; n32 divider = 0; } envelope; struct TimerA { //timer.cpp auto run() -> void; n1 enable = 0; n1 irq = 0; n1 line = 0; n10 period = 0; n10 counter = 0; } timerA; struct TimerB { //timer.cpp auto run() -> void; n1 enable = 0; n1 irq = 0; n1 line = 0; n8 period = 0; n8 counter = 0; n4 divider = 0; } timerB; enum : u32 { Attack, Decay, Sustain, Release }; struct Channel { YM2612& ym2612; Channel(YM2612& ym2612) : ym2612(ym2612) {} //channel.cpp auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 leftEnable = 1; n1 rightEnable = 1; n3 algorithm = 0; n3 feedback = 0; n3 vibrato = 0; n2 tremolo = 0; n2 mode = 0; struct Operator { Channel& channel; YM2612& ym2612; Operator(Channel& channel) : channel(channel), ym2612(channel.ym2612) {} //channel.cpp auto trigger(bool) -> void; auto runEnvelope() -> void; auto runPhase() -> void; auto updateEnvelope() -> void; auto updatePitch() -> void; auto updatePhase() -> void; auto updateLevel() -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 keyOn = 0; n1 lfoEnable = 0; n3 detune = 0; n4 multiple = 0; n7 totalLevel = 0; n16 outputLevel = 0x1fff; i16 output = 0; i16 prior = 0; struct Pitch { n11 value = 0; n11 reload = 0; n11 latch = 0; } pitch; struct Octave { n3 value = 0; n3 reload = 0; n3 latch = 0; } octave; struct Phase { n20 value = 0; n20 delta = 0; } phase; struct Envelope { u32 state = Release; s32 rate = 0; s32 divider = 11; n32 steps = 0; n10 value = 0x3ff; n2 keyScale = 0; n5 attackRate = 0; n5 decayRate = 0; n5 sustainRate = 0; n4 sustainLevel = 0; n5 releaseRate = 1; } envelope; struct SSG { n1 enable = 0; n1 attack = 0; n1 alternate = 0; n1 hold = 0; n1 invert = 0; } ssg; } operators[4]{*this, *this, *this, *this}; auto operator[](n2 index) -> Operator& { return operators[index]; } } channels[6] = {*this, *this, *this, *this, *this, *this}; n16 sine[0x400]; i16 pow2[0x200]; //constants.cpp struct EnvelopeRate { u32 divider; u32 steps[4]; }; static const u8 lfoDividers[8]; static const u8 vibratos[8][16]; static const u8 tremolos[4]; static const u8 detunes[3][8]; static const EnvelopeRate envelopeRates[16]; }; } ares-126/ares/component/eeprom/000077500000000000000000000000001415063341600165445ustar00rootroot00000000000000ares-126/ares/component/eeprom/m24c/000077500000000000000000000000001415063341600173115ustar00rootroot00000000000000ares-126/ares/component/eeprom/m24c/m24c.cpp000066400000000000000000000106741415063341600205720ustar00rootroot00000000000000#include #include "m24c.hpp" namespace ares { #include "serialization.cpp" auto M24C::size() const -> u32 { switch(type) { default: return 0; case Type::X24C01: return 128; case Type::M24C01: return 128; case Type::M24C02: return 256; case Type::M24C04: return 512; case Type::M24C08: return 1024; case Type::M24C16: return 2048; case Type::M24C32: return 4096; case Type::M24C64: return 8192; case Type::M24C65: return 8192; case Type::M24C128: return 16384; case Type::M24C256: return 32768; case Type::M24C512: return 65536; } } auto M24C::reset() -> void { type = Type::None; } auto M24C::load(Type typeID, n3 enableID) -> void { type = typeID; enable = enableID; erase(); } auto M24C::power() -> void { mode = Mode::Standby; clock = {}; data = {}; counter = 0; device = Area::Memory << 4; bank = 0; address = 0; input = 0; output = 0; response = Acknowledge; writable = 1; } auto M24C::read() const -> bool { if(mode == Mode::Standby) return data(); return response; } auto M24C::write() -> void { auto phase = mode; if(clock.hi()) { if(data.fall()) { counter = 0; mode = (type == Type::X24C01) ? Mode::Address : Mode::Device; } else if(data.rise()) { counter = 0; mode = Mode::Standby; } } if(clock.fall()) { if(counter++ > 8) counter = 1; } if(clock.rise()) switch(phase) { case Mode::Device: if(counter <= 8) { device = device << 1 | data(); } else if(select() != Acknowledge) { mode = Mode::Standby; } else if(device & 1) { mode = Mode::Read; response = load(); } else { mode = (type <= Type::M24C16) ? Mode::Address : Mode::Bank; response = Acknowledge; } break; case Mode::Bank: if(counter <= 8) { bank = bank << 1 | data(); } else { mode = Mode::Address; response = Acknowledge; } break; case Mode::Address: if(counter <= 8) { address = address << 1 | data(); } else if(type == Type::X24C01 && address & 1) { mode = Mode::Read; response = load(); } else { mode = Mode::Write; response = Acknowledge; } break; case Mode::Read: if(counter <= 8) { response = output >> 8 - counter; } else if(data() == Acknowledge) { address += (type == Type::X24C01) ? 2 : 1; if(!address) bank++; response = load(); } else { mode = Mode::Standby; } break; case Mode::Write: if(counter <= 8) { input = input << 1 | data(); } else { response = store(); address += (type == Type::X24C01) ? 2 : 1; if(!address) bank++; } break; } } auto M24C::erase(u8 fill) -> void { for(auto& byte : memory) byte = fill; for(auto& byte : idpage) byte = fill; locked = 0; } // auto M24C::select() const -> bool { /*switch(type) { default: if((device >> 1 & 7) != (enable & 7)) return !Acknowledge; break; case Type::M24C04: if((device >> 1 & 6) != (enable & 6)) return !Acknowledge; break; case Type::M24C08: if((device >> 1 & 4) != (enable & 4)) return !Acknowledge; break; case Type::M24C16: break; }*/ switch(device >> 4) { case Area::Memory: return Acknowledge; case Area::IDPage: if(type <= Type::M24C16) return !Acknowledge; return Acknowledge; default: return !Acknowledge; } } auto M24C::offset() const -> u32 { if(type == Type::X24C01) return address >> 1; if(type <= Type::M24C16) return device >> 1 << 8 | address; return device >> 1 << 16 | bank << 8 | address; } auto M24C::load() -> bool { switch(device >> 4) { case Area::Memory: output = memory[offset() & size() - 1]; return Acknowledge; case Area::IDPage: if(type <= Type::M24C16) return !Acknowledge; output = idpage[address & sizeof(idpage) - 1]; return Acknowledge; default: return !Acknowledge; } } auto M24C::store() -> bool { switch(device >> 4) { case Area::Memory: if(!writable) return !Acknowledge; memory[offset() & size() - 1] = input; return Acknowledge; case Area::IDPage: if(!writable) return !Acknowledge; if(type <= Type::M24C16) return !Acknowledge; if(address.bit(10)) { locked |= input.bit(1); return Acknowledge; } if(locked) return !Acknowledge; idpage[address & sizeof(idpage) - 1] = input; return Acknowledge; default: return !Acknowledge; } } } ares-126/ares/component/eeprom/m24c/m24c.hpp000066400000000000000000000044501415063341600205720ustar00rootroot00000000000000#pragma once namespace ares { struct M24C { enum class Type : u32 { None, //8-bit address X24C01, // 128 cells => 128 x 8-bit x 1-block //8-bit device + 8-bit address M24C01, // 1024 cells => 128 x 8-bit x 1-block M24C02, // 2048 cells => 256 x 8-bit x 1-block M24C04, // 4096 cells => 256 x 8-bit x 2-blocks M24C08, // 8192 cells => 256 x 8-bit x 4-blocks M24C16, // 16384 cells => 256 x 8-bit x 8-blocks //8-bit device + 8-bit bank + 8-bit address M24C32, // 32768 cells => 4096 x 8-bit x 1-block M24C64, // 65536 cells => 8192 x 8-bit x 1-block M24C65, // 65536 cells => 8192 x 8-bit x 1-block M24C128, //131072 cells => 16384 x 8-bit x 1-block M24C256, //262144 cells => 32768 x 8-bit x 1-block M24C512, //524288 cells => 65536 x 8-bit x 1-block }; enum class Mode : u32 { Standby, Device, Bank, Address, Read, Write, }; enum Area : u32 { Memory = 0b1010, IDPage = 0b1011, }; explicit operator bool() const { return size() != 0; } //m24c.cpp auto size() const -> u32; auto reset() -> void; auto load(Type typeID, n3 enableID = 0) -> void; auto power() -> void; auto read() const -> bool; auto write() -> void; auto erase(u8 fill = 0xff) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Line { auto lo() const -> bool { return !latch && !value; } auto hi() const -> bool { return latch && value; } auto fall() const -> bool { return latch && !value; } auto rise() const -> bool { return !latch && value; } auto operator()() const -> bool { return value; } auto operator=(bool data) -> Line& { latch = value; value = data; return *this; } n1 latch = 1; n1 value = 1; }; Line clock; //SCL Line data; //SDA n1 writable; //!WP n8 memory[65536]; n8 idpage[32]; n1 locked; private: //m24c.cpp auto select() const -> bool; auto offset() const -> u32; auto load() -> bool; auto store() -> bool; static constexpr bool Acknowledge = 0; Type type = Type::None; Mode mode = Mode::Standby; n3 enable; n8 counter; n8 device; n8 bank; n8 address; n8 input; n8 output; n1 response; }; } ares-126/ares/component/eeprom/m24c/serialization.cpp000066400000000000000000000006111415063341600226700ustar00rootroot00000000000000auto M24C::serialize(serializer& s) -> void { if(type == Type::None) return; s((u32&)type); s((u32&)mode); s(clock.latch); s(clock.value); s(data.latch); s(data.value); s(enable); s(counter); s(device); s(bank); s(address); s(input); s(output); s(response); s(writable); s(array_span{memory, size()}); if(type >= Type::M24C32) s(idpage); s(locked); } ares-126/ares/component/eeprom/m93lcx6/000077500000000000000000000000001415063341600177515ustar00rootroot00000000000000ares-126/ares/component/eeprom/m93lcx6/m93lcx6.cpp000066400000000000000000000120361415063341600216640ustar00rootroot00000000000000#include #include "m93lcx6.hpp" namespace ares { #include "serialization.cpp" M93LCx6::operator bool() const { return size; } auto M93LCx6::reset() -> void { size = 0; } auto M93LCx6::allocate(u32 size, u32 width, bool endian, n8 fill) -> bool { if(size != 128 && size != 256 && size != 512 && size != 1024 && size != 2048) return false; if(width != 8 && width != 16) return false; this->size = size; this->width = width; this->endian = endian; for(auto& byte : data) byte = fill; input.addressLength = 0; input.dataLength = width; //note: the 93LC56 and 93LC76 have an extra dummy address bit if(size == 128) input.addressLength = width == 16 ? 6 : 7; //93LC46 if(size == 256) input.addressLength = width == 16 ? 8 : 9; //93LC56 if(size == 512) input.addressLength = width == 16 ? 8 : 9; //93LC66 if(size == 1024) input.addressLength = width == 16 ? 10 : 11; //93LC76 if(size == 2048) input.addressLength = width == 16 ? 10 : 11; //93LC86 return true; } //used externally to program initial state values for uninitialized EEPROMs auto M93LCx6::program(n11 address, n8 value) -> void { data[address] = value; } //1ms frequency auto M93LCx6::clock() -> void { //set during programming commands if(busy) busy--; } auto M93LCx6::power() -> void { //writable = 0; busy = 0; input.flush(); output.flush(); } auto M93LCx6::edge() -> void { //wait for start if(!input.start()) return; u32 start = *input.start(); //start bit must be set if(start != 1) return input.flush(); //wait for opcode if(!input.opcode()) return; u32 opcode = *input.opcode(); //wait for address if(!input.address()) return; if(opcode == 0b00) { auto mode = *input.mode(); if(mode == 0b00) return writeDisable(); if(mode == 0b01) return writeAll(); if(mode == 0b10) return eraseAll(); if(mode == 0b11) return writeEnable(); } if(opcode == 0b01) return write(); if(opcode == 0b10) return read(); if(opcode == 0b11) return erase(); } // auto M93LCx6::read() -> void { u32 address = *input.address() << (width == 16) & size - 1; output.flush(); for(n4 index : range(width)) { output.write(data[address + (index.bit(3) ^ !endian)].bit(index.bit(0,2))); } output.write(0); //reads have an extra dummy data bit } auto M93LCx6::write() -> void { if(!input.data()) return; //wait for data if(!writable) return input.flush(); u32 address = *input.address() << (width == 16) & size - 1; for(n4 index : range(width)) { data[address + (index.bit(3) ^ !endian)].bit(index.bit(0,2)) = input.read(); } busy = 4; //milliseconds return input.flush(); } auto M93LCx6::erase() -> void { if(!writable) return input.flush(); u32 address = *input.address() << (width == 16) & size - 1; for(n4 index : range(width)) { data[address + (index.bit(3) ^ !endian)].bit(index.bit(0,2)) = 1; } busy = 4; //milliseconds return input.flush(); } auto M93LCx6::writeAll() -> void { if(!input.data()) return; //wait for data if(!writable) return input.flush(); auto word = *input.data(); if(width == 8) word |= word << 8; for(u32 address = 0; address < size; address += 2) { for(n4 index : range(16)) { data[address + (index.bit(3) ^ !endian)].bit(index.bit(0,2)) = word.bit(index); } } busy = 16; //milliseconds return input.flush(); } auto M93LCx6::eraseAll() -> void { if(!writable) return input.flush(); for(auto& byte : data) byte = 0xff; busy = 8; //milliseconds return input.flush(); } auto M93LCx6::writeEnable() -> void { writable = true; return input.flush(); } auto M93LCx6::writeDisable() -> void { writable = false; return input.flush(); } // auto M93LCx6::ShiftRegister::flush() -> void { value = 0; count = 0; } //peek at the next bit without clocking the shift register auto M93LCx6::ShiftRegister::edge() -> n1 { return value.bit(0); } auto M93LCx6::ShiftRegister::read() -> n1 { n1 bit = value.bit(0); value >>= 1; count--; return bit; } auto M93LCx6::ShiftRegister::write(n1 bit) -> void { value <<= 1; value.bit(0) = bit; count++; } // auto M93LCx6::InputShiftRegister::start() -> maybe { if(count < 1) return nothing; return {value >> count - 1 & 1}; } auto M93LCx6::InputShiftRegister::opcode() -> maybe { if(count < 1 + 2) return nothing; return {value >> count - 3 & 3}; } auto M93LCx6::InputShiftRegister::mode() -> maybe { if(count < 1 + 2 + addressLength) return nothing; return {value >> count - 5 & 3}; } auto M93LCx6::InputShiftRegister::address() -> maybe { if(count < 1 + 2 + addressLength) return nothing; return {value >> count - (3 + addressLength) & (1 << addressLength) - 1}; } auto M93LCx6::InputShiftRegister::data() -> maybe { if(count < 1 + 2 + addressLength + dataLength) return nothing; return {value >> count - (3 + addressLength + dataLength) & (1 << dataLength) - 1}; } //increment the address portion of the input register for sequential reads auto M93LCx6::InputShiftRegister::increment() -> void { value.bit(0, addressLength - 1)++; } } ares-126/ares/component/eeprom/m93lcx6/m93lcx6.hpp000066400000000000000000000037431415063341600216760ustar00rootroot00000000000000#pragma once namespace ares { //Microchip 93LCx6 // 93LC46 => 1024 cells => 128 x 8-bit or 64 x 16-bit // 93LC56 => 2048 cells => 256 x 8-bit or 128 x 16-bit // 93LC66 => 4096 cells => 512 x 8-bit or 256 x 16-bit // 93LC76 => 8192 cells => 1024 x 8-bit or 512 x 16-bit // 93LC86 => 16384 cells => 2048 x 8-bit or 1024 x 16-bit struct M93LCx6 { //m93lcx6.cpp explicit operator bool() const; auto reset() -> void; auto allocate(u32 size, u32 width, bool endian, n8 fill) -> bool; auto program(n11 address, n8 data) -> void; auto clock() -> void; auto power() -> void; auto edge() -> void; //chip commands auto read() -> void; auto write() -> void; auto erase() -> void; auto writeAll() -> void; auto eraseAll() -> void; auto writeEnable() -> void; auto writeDisable() -> void; //serialization.cpp auto serialize(serializer&) -> void; //it is awkward no matter if data is uint1[bits], uint8[bytes], or uint16[words] n8 data[2048]; //uint8 was chosen solely for easier serialization and saving u32 size; //in bytes u32 width; //8-bit (ORG=0) or 16-bit (ORG=1) configuration bool endian; //16-bit mode: 0 = little-endian; 1 = big-endian b1 writable; //EWEN, EWDS u32 busy; //busy cycles in milliseconds remaining for programming (write) operations to complete struct ShiftRegister { auto flush() -> void; auto edge() -> n1; auto read() -> n1; auto write(n1 data) -> void; n32 value; n32 count; }; struct InputShiftRegister : ShiftRegister { auto start() -> maybe; auto opcode() -> maybe; auto mode() -> maybe; auto address() -> maybe; auto data() -> maybe; auto increment() -> void; //serialization.cpp auto serialize(serializer&) -> void; n32 addressLength; n32 dataLength; } input; struct OutputShiftRegister : ShiftRegister { //serialization.cpp auto serialize(serializer&) -> void; } output; }; } ares-126/ares/component/eeprom/m93lcx6/serialization.cpp000066400000000000000000000005731415063341600233370ustar00rootroot00000000000000auto M93LCx6::serialize(serializer& s) -> void { s(data); s(size); s(width); s(endian); s(writable); s(busy); s(input); s(output); } auto M93LCx6::InputShiftRegister::serialize(serializer& s) -> void { s(value); s(count); s(addressLength); s(dataLength); } auto M93LCx6::OutputShiftRegister::serialize(serializer& s) -> void { s(value); s(count); } ares-126/ares/component/processor/000077500000000000000000000000001415063341600172745ustar00rootroot00000000000000ares-126/ares/component/processor/arm7tdmi/000077500000000000000000000000001415063341600210205ustar00rootroot00000000000000ares-126/ares/component/processor/arm7tdmi/algorithms.cpp000066400000000000000000000066011415063341600237000ustar00rootroot00000000000000auto ARM7TDMI::ADD(n32 source, n32 modify, bool carry) -> n32 { n32 result = source + modify + carry; if(cpsr().t || opcode.bit(20)) { n32 overflow = ~(source ^ modify) & (source ^ result); cpsr().v = 1 << 31 & (overflow); cpsr().c = 1 << 31 & (overflow ^ source ^ modify ^ result); cpsr().z = result == 0; cpsr().n = result.bit(31); } return result; } auto ARM7TDMI::ASR(n32 source, n8 shift) -> n32 { carry = cpsr().c; if(shift == 0) return source; carry = shift > 32 ? source & 1 << 31 : source & 1 << shift - 1; source = shift > 31 ? (i32)source >> 31 : (i32)source >> shift; return source; } auto ARM7TDMI::BIT(n32 result) -> n32 { if(cpsr().t || opcode.bit(20)) { cpsr().c = carry; cpsr().z = result == 0; cpsr().n = result.bit(31); } return result; } auto ARM7TDMI::LSL(n32 source, n8 shift) -> n32 { carry = cpsr().c; if(shift == 0) return source; carry = shift > 32 ? 0 : source & 1 << 32 - shift; source = shift > 31 ? 0 : source << shift; return source; } auto ARM7TDMI::LSR(n32 source, n8 shift) -> n32 { carry = cpsr().c; if(shift == 0) return source; carry = shift > 32 ? 0 : source & 1 << shift - 1; source = shift > 31 ? 0 : source >> shift; return source; } auto ARM7TDMI::MUL(n32 product, n32 multiplicand, n32 multiplier) -> n32 { idle(); if(multiplier >> 8 && multiplier >> 8 != 0xffffff) idle(); if(multiplier >> 16 && multiplier >> 16 != 0xffff) idle(); if(multiplier >> 24 && multiplier >> 24 != 0xff) idle(); product += multiplicand * multiplier; if(cpsr().t || opcode.bit(20)) { cpsr().z = product == 0; cpsr().n = product.bit(31); } return product; } auto ARM7TDMI::ROR(n32 source, n8 shift) -> n32 { carry = cpsr().c; if(shift == 0) return source; if(shift &= 31) source = source << 32 - shift | source >> shift; carry = source & 1 << 31; return source; } auto ARM7TDMI::RRX(n32 source) -> n32 { carry = source.bit(0); return cpsr().c << 31 | source >> 1; } auto ARM7TDMI::SUB(n32 source, n32 modify, bool carry) -> n32 { return ADD(source, ~modify, carry); } auto ARM7TDMI::TST(n4 mode) -> bool { switch(mode) { case 0: return cpsr().z == 1; //EQ (equal) case 1: return cpsr().z == 0; //NE (not equal) case 2: return cpsr().c == 1; //CS (carry set) case 3: return cpsr().c == 0; //CC (carry clear) case 4: return cpsr().n == 1; //MI (negative) case 5: return cpsr().n == 0; //PL (positive) case 6: return cpsr().v == 1; //VS (overflow) case 7: return cpsr().v == 0; //VC (no overflow) case 8: return cpsr().c == 1 && cpsr().z == 0; //HI (unsigned higher) case 9: return cpsr().c == 0 || cpsr().z == 1; //LS (unsigned lower or same) case 10: return cpsr().n == cpsr().v; //GE (signed greater than or equal) case 11: return cpsr().n != cpsr().v; //LT (signed less than) case 12: return cpsr().z == 0 && cpsr().n == cpsr().v; //GT (signed greater than) case 13: return cpsr().z == 1 || cpsr().n != cpsr().v; //LE (signed less than or equal) case 14: return true; //AL (always) case 15: return false; //NV (never) } unreachable; } ares-126/ares/component/processor/arm7tdmi/arm7tdmi.cpp000066400000000000000000000010561415063341600232520ustar00rootroot00000000000000#include #include "arm7tdmi.hpp" namespace ares { #include "registers.cpp" #include "memory.cpp" #include "algorithms.cpp" #include "instruction.cpp" #include "instructions-arm.cpp" #include "instructions-thumb.cpp" #include "serialization.cpp" #include "disassembler.cpp" ARM7TDMI::ARM7TDMI() { armInitialize(); thumbInitialize(); } auto ARM7TDMI::power() -> void { processor = {}; processor.r15.modify = [&] { pipeline.reload = true; }; pipeline = {}; carry = 0; irq = 0; cpsr().f = 1; exception(PSR::SVC, 0x00); } } ares-126/ares/component/processor/arm7tdmi/arm7tdmi.hpp000066400000000000000000000230571415063341600232640ustar00rootroot00000000000000//ARMv4 (ARM7TDMI) #pragma once namespace ares { struct ARM7TDMI { enum : u32 { Nonsequential = 1 << 0, //N cycle Sequential = 1 << 1, //S cycle Prefetch = 1 << 2, //instruction fetch Byte = 1 << 3, // 8-bit access Half = 1 << 4, //16-bit access Word = 1 << 5, //32-bit access Load = 1 << 6, //load operation Store = 1 << 7, //store operation Signed = 1 << 8, //sign-extend }; virtual auto step(u32 clocks) -> void = 0; virtual auto sleep() -> void = 0; virtual auto get(u32 mode, n32 address) -> n32 = 0; virtual auto set(u32 mode, n32 address, n32 word) -> void = 0; //arm7tdmi.cpp ARM7TDMI(); auto power() -> void; //registers.cpp struct GPR; struct PSR; auto r(n4) -> GPR&; auto cpsr() -> PSR&; auto spsr() -> PSR&; auto privileged() const -> bool; auto exception() const -> bool; //memory.cpp auto idle() -> void; auto read(u32 mode, n32 address) -> n32; auto load(u32 mode, n32 address) -> n32; auto write(u32 mode, n32 address, n32 word) -> void; auto store(u32 mode, n32 address, n32 word) -> void; //algorithms.cpp auto ADD(n32, n32, bool) -> n32; auto ASR(n32, n8) -> n32; auto BIT(n32) -> n32; auto LSL(n32, n8) -> n32; auto LSR(n32, n8) -> n32; auto MUL(n32, n32, n32) -> n32; auto ROR(n32, n8) -> n32; auto RRX(n32) -> n32; auto SUB(n32, n32, bool) -> n32; auto TST(n4) -> bool; //instruction.cpp auto fetch() -> void; auto instruction() -> void; auto exception(u32 mode, n32 address) -> void; auto armInitialize() -> void; auto thumbInitialize() -> void; //instructions-arm.cpp auto armALU(n4 mode, n4 target, n4 source, n32 data) -> void; auto armMoveToStatus(n4 field, n1 source, n32 data) -> void; auto armInstructionBranch(i24, n1) -> void; auto armInstructionBranchExchangeRegister(n4) -> void; auto armInstructionDataImmediate(n8, n4, n4, n4, n1, n4) -> void; auto armInstructionDataImmediateShift(n4, n2, n5, n4, n4, n1, n4) -> void; auto armInstructionDataRegisterShift(n4, n2, n4, n4, n4, n1, n4) -> void; auto armInstructionLoadImmediate(n8, n1, n4, n4, n1, n1, n1) -> void; auto armInstructionLoadRegister(n4, n1, n4, n4, n1, n1, n1) -> void; auto armInstructionMemorySwap(n4, n4, n4, n1) -> void; auto armInstructionMoveHalfImmediate(n8, n4, n4, n1, n1, n1, n1) -> void; auto armInstructionMoveHalfRegister(n4, n4, n4, n1, n1, n1, n1) -> void; auto armInstructionMoveImmediateOffset(n12, n4, n4, n1, n1, n1, n1, n1) -> void; auto armInstructionMoveMultiple(n16, n4, n1, n1, n1, n1, n1) -> void; auto armInstructionMoveRegisterOffset(n4, n2, n5, n4, n4, n1, n1, n1, n1, n1) -> void; auto armInstructionMoveToRegisterFromStatus(n4, n1) -> void; auto armInstructionMoveToStatusFromImmediate(n8, n4, n4, n1) -> void; auto armInstructionMoveToStatusFromRegister(n4, n4, n1) -> void; auto armInstructionMultiply(n4, n4, n4, n4, n1, n1) -> void; auto armInstructionMultiplyLong(n4, n4, n4, n4, n1, n1, n1) -> void; auto armInstructionSoftwareInterrupt(n24 immediate) -> void; auto armInstructionUndefined() -> void; //instructions-thumb.cpp auto thumbInstructionALU(n3, n3, n4) -> void; auto thumbInstructionALUExtended(n4, n4, n2) -> void; auto thumbInstructionAddRegister(n8, n3, n1) -> void; auto thumbInstructionAdjustImmediate(n3, n3, n3, n1) -> void; auto thumbInstructionAdjustRegister(n3, n3, n3, n1) -> void; auto thumbInstructionAdjustStack(n7, n1) -> void; auto thumbInstructionBranchExchange(n4) -> void; auto thumbInstructionBranchFarPrefix(i11) -> void; auto thumbInstructionBranchFarSuffix(n11) -> void; auto thumbInstructionBranchNear(i11) -> void; auto thumbInstructionBranchTest(i8, n4) -> void; auto thumbInstructionImmediate(n8, n3, n2) -> void; auto thumbInstructionLoadLiteral(n8, n3) -> void; auto thumbInstructionMoveByteImmediate(n3, n3, n5, n1) -> void; auto thumbInstructionMoveHalfImmediate(n3, n3, n5, n1) -> void; auto thumbInstructionMoveMultiple(n8, n3, n1) -> void; auto thumbInstructionMoveRegisterOffset(n3, n3, n3, n3) -> void; auto thumbInstructionMoveStack(n8, n3, n1) -> void; auto thumbInstructionMoveWordImmediate(n3, n3, n5, n1) -> void; auto thumbInstructionShiftImmediate(n3, n3, n5, n2) -> void; auto thumbInstructionSoftwareInterrupt(n8) -> void; auto thumbInstructionStackMultiple(n8, n1, n1) -> void; auto thumbInstructionUndefined() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp auto disassembleInstruction(maybe pc = {}, maybe thumb = {}) -> string; auto disassembleContext() -> string; struct GPR { operator u32() const { return data; } auto operator=(const GPR& value) -> GPR& { return operator=(value.data); } auto operator=(n32 value) -> GPR& { data = value; if(modify) modify(); return *this; } n32 data; function void> modify; }; struct PSR { enum : u32 { USR = 0x10, //user FIQ = 0x11, //fast interrupt IRQ = 0x12, //interrupt SVC = 0x13, //service ABT = 0x17, //abort UND = 0x1b, //undefined SYS = 0x1f, //system }; operator u32() const { return m << 0 | t << 5 | f << 6 | i << 7 | v << 28 | c << 29 | z << 30 | n << 31; } auto operator=(n32 data) -> PSR& { m = data.bit(0,4); t = data.bit(5); f = data.bit(6); i = data.bit(7); v = data.bit(28); c = data.bit(29); z = data.bit(30); n = data.bit(31); return *this; } //serialization.cpp auto serialize(serializer&) -> void; n5 m; //mode b1 t; //thumb b1 f; //fiq b1 i; //irq b1 v; //overflow b1 c; //carry b1 z; //zero b1 n; //negative }; struct Processor { //serialization.cpp auto serialize(serializer&) -> void; GPR r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15; PSR cpsr; struct FIQ { GPR r8, r9, r10, r11, r12, r13, r14; PSR spsr; } fiq; struct IRQ { GPR r13, r14; PSR spsr; } irq; struct SVC { GPR r13, r14; PSR spsr; } svc; struct ABT { GPR r13, r14; PSR spsr; } abt; struct UND { GPR r13, r14; PSR spsr; } und; } processor; struct Pipeline { //serialization.cpp auto serialize(serializer&) -> void; struct Instruction { n32 address; n32 instruction; b1 thumb; //not used by fetch stage }; n1 reload = 1; n1 nonsequential = 1; Instruction fetch; Instruction decode; Instruction execute; } pipeline; n32 opcode; b1 carry; b1 irq; function armInstruction[4096]; function thumbInstruction[65536]; //disassembler.cpp auto armDisassembleBranch(i24, n1) -> string; auto armDisassembleBranchExchangeRegister(n4) -> string; auto armDisassembleDataImmediate(n8, n4, n4, n4, n1, n4) -> string; auto armDisassembleDataImmediateShift(n4, n2, n5, n4, n4, n1, n4) -> string; auto armDisassembleDataRegisterShift(n4, n2, n4, n4, n4, n1, n4) -> string; auto armDisassembleLoadImmediate(n8, n1, n4, n4, n1, n1, n1) -> string; auto armDisassembleLoadRegister(n4, n1, n4, n4, n1, n1, n1) -> string; auto armDisassembleMemorySwap(n4, n4, n4, n1) -> string; auto armDisassembleMoveHalfImmediate(n8, n4, n4, n1, n1, n1, n1) -> string; auto armDisassembleMoveHalfRegister(n4, n4, n4, n1, n1, n1, n1) -> string; auto armDisassembleMoveImmediateOffset(n12, n4, n4, n1, n1, n1, n1, n1) -> string; auto armDisassembleMoveMultiple(n16, n4, n1, n1, n1, n1, n1) -> string; auto armDisassembleMoveRegisterOffset(n4, n2, n5, n4, n4, n1, n1, n1, n1, n1) -> string; auto armDisassembleMoveToRegisterFromStatus(n4, n1) -> string; auto armDisassembleMoveToStatusFromImmediate(n8, n4, n4, n1) -> string; auto armDisassembleMoveToStatusFromRegister(n4, n4, n1) -> string; auto armDisassembleMultiply(n4, n4, n4, n4, n1, n1) -> string; auto armDisassembleMultiplyLong(n4, n4, n4, n4, n1, n1, n1) -> string; auto armDisassembleSoftwareInterrupt(n24) -> string; auto armDisassembleUndefined() -> string; auto thumbDisassembleALU(n3, n3, n4) -> string; auto thumbDisassembleALUExtended(n4, n4, n2) -> string; auto thumbDisassembleAddRegister(n8, n3, n1) -> string; auto thumbDisassembleAdjustImmediate(n3, n3, n3, n1) -> string; auto thumbDisassembleAdjustRegister(n3, n3, n3, n1) -> string; auto thumbDisassembleAdjustStack(n7, n1) -> string; auto thumbDisassembleBranchExchange(n4) -> string; auto thumbDisassembleBranchFarPrefix(i11) -> string; auto thumbDisassembleBranchFarSuffix(n11) -> string; auto thumbDisassembleBranchNear(i11) -> string; auto thumbDisassembleBranchTest(i8, n4) -> string; auto thumbDisassembleImmediate(n8, n3, n2) -> string; auto thumbDisassembleLoadLiteral(n8, n3) -> string; auto thumbDisassembleMoveByteImmediate(n3, n3, n5, n1) -> string; auto thumbDisassembleMoveHalfImmediate(n3, n3, n5, n1) -> string; auto thumbDisassembleMoveMultiple(n8, n3, n1) -> string; auto thumbDisassembleMoveRegisterOffset(n3, n3, n3, n3) -> string; auto thumbDisassembleMoveStack(n8, n3, n1) -> string; auto thumbDisassembleMoveWordImmediate(n3, n3, n5, n1) -> string; auto thumbDisassembleShiftImmediate(n3, n3, n5, n2) -> string; auto thumbDisassembleSoftwareInterrupt(n8) -> string; auto thumbDisassembleStackMultiple(n8, n1, n1) -> string; auto thumbDisassembleUndefined() -> string; function armDisassemble[4096]; function thumbDisassemble[65536]; n32 _pc; string _c; }; } ares-126/ares/component/processor/arm7tdmi/disassembler.cpp000066400000000000000000000327661415063341600242170ustar00rootroot00000000000000static const string _r[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "sp", "lr", "pc" }; static const string _conditions[] = { "eq", "ne", "cs", "cc", "mi", "pl", "vs", "vc", "hi", "ls", "ge", "lt", "gt", "le", "", "nv", }; #define _s save ? "s" : "" #define _move(mode) (mode == 13 || mode == 15) #define _comp(mode) (mode >= 8 && mode <= 11) #define _math(mode) (mode <= 7 || mode == 12 || mode == 14) auto ARM7TDMI::disassembleInstruction(maybe pc, maybe thumb) -> string { if(!pc) pc = pipeline.execute.address; if(!thumb) thumb = cpsr().t; _pc = pc(); if(!thumb()) { n32 opcode = read(Word | Nonsequential, _pc & ~3); n12 index = (opcode & 0x0ff00000) >> 16 | (opcode & 0x000000f0) >> 4; _c = _conditions[opcode >> 28]; return pad(armDisassemble[index](opcode), -40); } else { n16 opcode = read(Half | Nonsequential, _pc & ~1); return pad(thumbDisassemble[opcode](), -40); } } auto ARM7TDMI::disassembleContext() -> string { string output; for(u32 n : range(16)) { output.append(_r[n], ":", hex((u32)r(n), 8L), " "); } output.append("cpsr:"); output.append(cpsr().n ? "N" : "n"); output.append(cpsr().z ? "Z" : "z"); output.append(cpsr().c ? "C" : "c"); output.append(cpsr().v ? "V" : "v", "/"); output.append(cpsr().i ? "I" : "i"); output.append(cpsr().f ? "F" : "f"); output.append(cpsr().t ? "T" : "t", "/"); output.append(hex(cpsr().m, 2L)); if(cpsr().m == PSR::USR || cpsr().m == PSR::SYS) return output; output.append(" spsr:"); output.append(spsr().n ? "N" : "n"); output.append(spsr().z ? "Z" : "z"); output.append(spsr().c ? "C" : "c"); output.append(spsr().v ? "V" : "v", "/"); output.append(spsr().i ? "I" : "i"); output.append(spsr().f ? "F" : "f"); output.append(spsr().t ? "T" : "t", "/"); output.append(hex(spsr().m, 2L)); return output; } // auto ARM7TDMI::armDisassembleBranch (i24 displacement, n1 link) -> string { return {"b", link ? "l" : "", _c, " 0x", hex(_pc + 8 + displacement * 4, 8L)}; } auto ARM7TDMI::armDisassembleBranchExchangeRegister (n4 m) -> string { return {"bx", _c, " ", _r[m]}; } auto ARM7TDMI::armDisassembleDataImmediate (n8 immediate, n4 shift, n4 d, n4 n, n1 save, n4 mode) -> string { static const string opcode[] = { "and", "eor", "sub", "rsb", "add", "adc", "sbc", "rsc", "tst", "teq", "cmp", "cmn", "orr", "mov", "bic", "mvn", }; n32 data = immediate >> (shift << 1) | immediate << 32 - (shift << 1); return {opcode[mode], _c, _move(mode) ? string{_s, " ", _r[d]} : string{}, _comp(mode) ? string{" ", _r[n]} : string{}, _math(mode) ? string{_s, " ", _r[d], ",", _r[n]} : string{}, ",#0x", hex(data, 8L)}; } auto ARM7TDMI::armDisassembleDataImmediateShift (n4 m, n2 type, n5 shift, n4 d, n4 n, n1 save, n4 mode) -> string { static const string opcode[] = { "and", "eor", "sub", "rsb", "add", "adc", "sbc", "rsc", "tst", "teq", "cmp", "cmn", "orr", "mov", "bic", "mvn", }; return {opcode[mode], _c, _move(mode) ? string{_s, " ", _r[d]} : string{}, _comp(mode) ? string{" ", _r[n]} : string{}, _math(mode) ? string{_s, " ", _r[d], ",", _r[n]} : string{}, ",", _r[m], type == 0 && shift ? string{" lsl #", shift} : string{}, type == 1 ? string{" lsr #", shift ? (u32)shift : 32} : string{}, type == 2 ? string{" asr #", shift ? (u32)shift : 32} : string{}, type == 3 && shift ? string{" ror #", shift} : string{}, type == 3 && !shift ? " rrx" : ""}; } auto ARM7TDMI::armDisassembleDataRegisterShift (n4 m, n2 type, n4 s, n4 d, n4 n, n1 save, n4 mode) -> string { static const string opcode[] = { "and", "eor", "sub", "rsb", "add", "adc", "sbc", "rsc", "tst", "teq", "cmp", "cmn", "orr", "mov", "bic", "mvn", }; return {opcode[mode], _c, _move(mode) ? string{_s, " ", _r[d]} : string{}, _comp(mode) ? string{" ", _r[n]} : string{}, _math(mode) ? string{_s, " ", _r[d], ",", _r[n]} : string{}, ",", _r[m], " ", type == 0 ? "lsl" : "", type == 1 ? "lsr" : "", type == 2 ? "asr" : "", type == 3 ? "ror" : "", " ", _r[s]}; } auto ARM7TDMI::armDisassembleLoadImmediate (n8 immediate, n1 half, n4 d, n4 n, n1 writeback, n1 up, n1 pre) -> string { string data; if(n == 15) data = {" =0x", hex(read((half ? Half : Byte) | Nonsequential, _pc + 8 + (up ? +immediate : -immediate)), half ? 4L : 2L)}; return {"ldr", _c, half ? "sh" : "sb", " ", _r[d], ",[", _r[n], pre == 0 ? "]" : "", immediate ? string{",", up ? "+" : "-", "0x", hex(immediate, 2L)} : string{}, pre == 1 ? "]" : "", pre == 0 || writeback ? "!" : "", data}; } auto ARM7TDMI::armDisassembleLoadRegister (n4 m, n1 half, n4 d, n4 n, n1 writeback, n1 up, n1 pre) -> string { return {"ldr", _c, half ? "sh" : "sb", " ", _r[d], ",[", _r[n], pre == 0 ? "]" : "", ",", up ? "+" : "-", _r[m], pre == 1 ? "]" : "", pre == 0 || writeback ? "!" : ""}; } auto ARM7TDMI::armDisassembleMemorySwap (n4 m, n4 d, n4 n, n1 byte) -> string { return {"swp", _c, byte ? "b" : "", " ", _r[d], ",", _r[m], ",[", _r[n], "]"}; } auto ARM7TDMI::armDisassembleMoveHalfImmediate (n8 immediate, n4 d, n4 n, n1 mode, n1 writeback, n1 up, n1 pre) -> string { string data; if(n == 15) data = {" =0x", hex(read(Half | Nonsequential, _pc + (up ? +immediate : -immediate)), 4L)}; return {mode ? "ldr" : "str", _c, "h ", _r[d], ",[", _r[n], pre == 0 ? "]" : "", immediate ? string{",", up ? "+" : "-", "0x", hex(immediate, 2L)} : string{}, pre == 1 ? "]" : "", pre == 0 || writeback ? "!" : "", data}; } auto ARM7TDMI::armDisassembleMoveHalfRegister (n4 m, n4 d, n4 n, n1 mode, n1 writeback, n1 up, n1 pre) -> string { return {mode ? "ldr" : "str", _c, "h ", _r[d], ",[", _r[n], pre == 0 ? "]" : "", ",", up ? "+" : "-", _r[m], pre == 1 ? "]" : "", pre == 0 || writeback ? "!" : ""}; } auto ARM7TDMI::armDisassembleMoveImmediateOffset (n12 immediate, n4 d, n4 n, n1 mode, n1 writeback, n1 byte, n1 up, n1 pre) -> string { string data; if(n == 15) data = {" =0x", hex(read((byte ? Byte : Word) | Nonsequential, _pc + 8 + (up ? +immediate : -immediate)), byte ? 2L : 4L)}; return {mode ? "ldr" : "str", _c, byte ? "b" : "", " ", _r[d], ",[", _r[n], pre == 0 ? "]" : "", immediate ? string{",", up ? "+" : "-", "0x", hex(immediate, 3L)} : string{}, pre == 1 ? "]" : "", pre == 0 || writeback ? "!" : "", data}; } auto ARM7TDMI::armDisassembleMoveMultiple (n16 list, n4 n, n1 mode, n1 writeback, n1 type, n1 up, n1 pre) -> string { string registers; for(u32 index : range(16)) { if(list.bit(index)) registers.append(_r[index], ","); } registers.trimRight(",", 1L); return {mode ? "ldm" : "stm", _c, up == 0 && pre == 0 ? "da" : "", up == 0 && pre == 1 ? "db" : "", up == 1 && pre == 0 ? "ia" : "", up == 1 && pre == 1 ? "ib" : "", " ", _r[n], writeback ? "!" : "", ",{", registers, "}", type ? "^" : ""}; } auto ARM7TDMI::armDisassembleMoveRegisterOffset (n4 m, n2 type, n5 shift, n4 d, n4 n, n1 mode, n1 writeback, n1 byte, n1 up, n1 pre) -> string { return {mode ? "ldr" : "str", _c, byte ? "b" : "", " ", _r[d], ",[", _r[n], pre == 0 ? "]" : "", ",", up ? "+" : "-", _r[m], type == 0 && shift ? string{" lsl #", shift} : string{}, type == 1 ? string{" lsr #", shift ? (u32)shift : 32} : string{}, type == 2 ? string{" asr #", shift ? (u32)shift : 32} : string{}, type == 3 && shift ? string{" ror #", shift} : string{}, type == 3 && !shift ? " rrx" : "", pre == 1 ? "]" : "", pre == 0 || writeback ? "!" : ""}; } auto ARM7TDMI::armDisassembleMoveToRegisterFromStatus (n4 d, n1 mode) -> string { return {"mrs", _c, " ", _r[d], ",", mode ? "spsr" : "cpsr"}; } auto ARM7TDMI::armDisassembleMoveToStatusFromImmediate (n8 immediate, n4 rotate, n4 field, n1 mode) -> string { n32 data = immediate >> (rotate << 1) | immediate << 32 - (rotate << 1); return {"msr", _c, " ", mode ? "spsr:" : "cpsr:", field.bit(0) ? "c" : "", field.bit(1) ? "x" : "", field.bit(2) ? "s" : "", field.bit(3) ? "f" : "", ",#0x", hex(data, 8L)}; } auto ARM7TDMI::armDisassembleMoveToStatusFromRegister (n4 m, n4 field, n1 mode) -> string { return {"msr", _c, " ", mode ? "spsr:" : "cpsr:", field.bit(0) ? "c" : "", field.bit(1) ? "x" : "", field.bit(2) ? "s" : "", field.bit(3) ? "f" : "", ",", _r[m]}; } auto ARM7TDMI::armDisassembleMultiply (n4 m, n4 s, n4 n, n4 d, n1 save, n1 accumulate) -> string { if(accumulate) { return {"mla", _c, _s, " ", _r[d], ",", _r[m], ",", _r[s], ",", _r[n]}; } else { return {"mul", _c, _s, " ", _r[d], ",", _r[m], ",", _r[s]}; } } auto ARM7TDMI::armDisassembleMultiplyLong (n4 m, n4 s, n4 l, n4 h, n1 save, n1 accumulate, n1 sign) -> string { return {sign ? "s" : "u", accumulate ? "mlal" : "mull", _c, _s, " ", _r[l], ",", _r[h], ",", _r[m], ",", _r[s]}; } auto ARM7TDMI::armDisassembleSoftwareInterrupt (n24 immediate) -> string { return {"swi #0x", hex(immediate, 6L)}; } auto ARM7TDMI::armDisassembleUndefined () -> string { return {"undefined"}; } // auto ARM7TDMI::thumbDisassembleALU (n3 d, n3 m, n4 mode) -> string { static const string opcode[] = { "and", "eor", "lsl", "lsr", "asr", "adc", "sbc", "ror", "tst", "neg", "cmp", "cmn", "orr", "mul", "bic", "mvn", }; return {opcode[mode], " ", _r[d], ",", _r[m]}; } auto ARM7TDMI::thumbDisassembleALUExtended (n4 d, n4 m, n2 mode) -> string { static const string opcode[] = {"add", "sub", "mov"}; if(d == 8 && m == 8 && mode == 2) return {"nop"}; return {opcode[mode], " ", _r[d], ",", _r[m]}; } auto ARM7TDMI::thumbDisassembleAddRegister (n8 immediate, n3 d, n1 mode) -> string { return {"add ", _r[d], ",", mode ? "sp" : "pc", ",#0x", hex(immediate, 2L)}; } auto ARM7TDMI::thumbDisassembleAdjustImmediate (n3 d, n3 n, n3 immediate, n1 mode) -> string { return {!mode ? "add" : "sub", " ", _r[d], ",", _r[n], ",#", immediate}; } auto ARM7TDMI::thumbDisassembleAdjustRegister (n3 d, n3 n, n3 m, n1 mode) -> string { return {!mode ? "add" : "sub", " ", _r[d], ",", _r[n], ",", _r[m]}; } auto ARM7TDMI::thumbDisassembleAdjustStack (n7 immediate, n1 mode) -> string { return {!mode ? "add" : "sub", " sp,#0x", hex(immediate * 4, 3L)}; } auto ARM7TDMI::thumbDisassembleBranchExchange (n4 m) -> string { return {"bx ", _r[m]}; } auto ARM7TDMI::thumbDisassembleBranchFarPrefix (i11 displacementHi) -> string { n11 displacementLo = read(Half | Nonsequential, (_pc & ~1) + 2); i22 displacement = displacementHi << 11 | displacementLo << 0; n32 address = _pc + 4 + displacement * 2; return {"bl 0x", hex(address, 8L)}; } auto ARM7TDMI::thumbDisassembleBranchFarSuffix (n11 displacement) -> string { return {"bl (suffix)"}; } auto ARM7TDMI::thumbDisassembleBranchNear (i11 displacement) -> string { n32 address = _pc + 4 + displacement * 2; return {"b 0x", hex(address, 8L)}; } auto ARM7TDMI::thumbDisassembleBranchTest (i8 displacement, n4 condition) -> string { n32 address = _pc + 4 + displacement * 2; return {"b", _conditions[condition], " 0x", hex(address, 8L)}; } auto ARM7TDMI::thumbDisassembleImmediate (n8 immediate, n3 d, n2 mode) -> string { static const string opcode[] = {"mov", "cmp", "add", "sub"}; return {opcode[mode], " ", _r[d], ",#0x", hex(immediate, 2L)}; } auto ARM7TDMI::thumbDisassembleLoadLiteral (n8 displacement, n3 d) -> string { n32 address = ((_pc + 4) & ~3) + (displacement << 2); n32 data = read(Word | Nonsequential, address); return {"ldr ", _r[d], ",[pc,#0x", hex(address, 8L), "] =0x", hex(data, 8L)}; } auto ARM7TDMI::thumbDisassembleMoveByteImmediate (n3 d, n3 n, n5 offset, n1 mode) -> string { return {mode ? "ldrb" : "strb", " ", _r[d], ",[", _r[n], ",#0x", hex(offset, 2L), "]"}; } auto ARM7TDMI::thumbDisassembleMoveHalfImmediate (n3 d, n3 n, n5 offset, n1 mode) -> string { return {mode ? "ldrh" : "strh", " ", _r[d], ",[", _r[n], ",#0x", hex(offset * 2, 2L), "]"}; } auto ARM7TDMI::thumbDisassembleMoveMultiple (n8 list, n3 n, n1 mode) -> string { string registers; for(u32 m : range(8)) { if(list.bit(m)) registers.append(_r[m], ","); } registers.trimRight(",", 1L); return {mode ? "ldmia" : "stmia", " ", _r[n], "!,{", registers, "}"}; } auto ARM7TDMI::thumbDisassembleMoveRegisterOffset (n3 d, n3 n, n3 m, n3 mode) -> string { static const string opcode[] = {"str", "strh", "strb", "ldsb", "ldr", "ldrh", "ldrb", "ldsh"}; return {opcode[mode], " ", _r[d], ",[", _r[n], ",", _r[m], "]"}; } auto ARM7TDMI::thumbDisassembleMoveStack (n8 immediate, n3 d, n1 mode) -> string { return {mode ? "ldr" : "str", " ", _r[d], ",[sp,#0x", hex(immediate * 4, 3L), "]"}; } auto ARM7TDMI::thumbDisassembleMoveWordImmediate (n3 d, n3 n, n5 offset, n1 mode) -> string { return {mode ? "ldr" : "str", " ", _r[d], ",[", _r[n], ",#0x", hex(offset * 4, 2L), "]"}; } auto ARM7TDMI::thumbDisassembleShiftImmediate (n3 d, n3 m, n5 immediate, n2 mode) -> string { static const string opcode[] = {"lsl", "lsr", "asr"}; return {opcode[mode], " ", _r[d], ",", _r[m], ",#", immediate}; } auto ARM7TDMI::thumbDisassembleSoftwareInterrupt (n8 immediate) -> string { return {"swi #0x", hex(immediate, 2L)}; } auto ARM7TDMI::thumbDisassembleStackMultiple (n8 list, n1 lrpc, n1 mode) -> string { string registers; for(u32 m : range(8)) { if(list.bit(m)) registers.append(_r[m], ","); } if(lrpc) registers.append(!mode ? "lr," : "pc,"); registers.trimRight(",", 1L); return {!mode ? "push" : "pop", " {", registers, "}"}; } auto ARM7TDMI::thumbDisassembleUndefined () -> string { return {"undefined"}; } #undef _s #undef _move #undef _comp #undef _save ares-126/ares/component/processor/arm7tdmi/instruction.cpp000066400000000000000000000414231415063341600241110ustar00rootroot00000000000000auto ARM7TDMI::fetch() -> void { pipeline.execute = pipeline.decode; pipeline.decode = pipeline.fetch; pipeline.decode.thumb = cpsr().t; u32 sequential = Sequential; if(pipeline.nonsequential) { pipeline.nonsequential = false; sequential = Nonsequential; } u32 mask = !cpsr().t ? 3 : 1; u32 size = !cpsr().t ? Word : Half; r(15).data += size >> 3; pipeline.fetch.address = r(15) & ~mask; pipeline.fetch.instruction = read(Prefetch | size | sequential, pipeline.fetch.address); } auto ARM7TDMI::instruction() -> void { u32 mask = !cpsr().t ? 3 : 1; u32 size = !cpsr().t ? Word : Half; if(pipeline.reload) { pipeline.reload = false; r(15).data &= ~mask; pipeline.fetch.address = r(15) & ~mask; pipeline.fetch.instruction = read(Prefetch | size | Nonsequential, pipeline.fetch.address); fetch(); } fetch(); if(irq && !cpsr().i) { exception(PSR::IRQ, 0x18); if(pipeline.execute.thumb) r(14).data += 2; return; } opcode = pipeline.execute.instruction; if(!pipeline.execute.thumb) { if(!TST(opcode.bit(28,31))) return; n12 index = (opcode & 0x0ff00000) >> 16 | (opcode & 0x000000f0) >> 4; armInstruction[index](opcode); } else { thumbInstruction[(n16)opcode](); } } auto ARM7TDMI::exception(u32 mode, n32 address) -> void { auto psr = cpsr(); cpsr().m = mode; spsr() = psr; cpsr().t = 0; if(cpsr().m == PSR::FIQ) cpsr().f = 1; cpsr().i = 1; r(14) = pipeline.decode.address; r(15) = address; } auto ARM7TDMI::armInitialize() -> void { #define bind(id, name, ...) { \ u32 index = (id & 0x0ff00000) >> 16 | (id & 0x000000f0) >> 4; \ assert(!armInstruction[index]); \ armInstruction[index] = [&](n32 opcode) { return armInstruction##name(arguments); }; \ armDisassemble[index] = [&](n32 opcode) { return armDisassemble##name(arguments); }; \ } #define pattern(s) \ std::integral_constant::value #define arguments \ opcode.bit( 0,23), /* displacement */ \ opcode.bit(24) /* link */ for(n4 displacementLo : range(16)) for(n4 displacementHi : range(16)) for(n1 link : range(2)) { auto opcode = pattern(".... 101? ???? ???? ???? ???? ???? ????") | displacementLo << 4 | displacementHi << 20 | link << 24; bind(opcode, Branch); } #undef arguments #define arguments \ opcode.bit( 0, 3) /* m */ { auto opcode = pattern(".... 0001 0010 ---- ---- ---- 0001 ????"); bind(opcode, BranchExchangeRegister); } #undef arguments #define arguments \ opcode.bit( 0, 7), /* immediate */ \ opcode.bit( 8,11), /* shift */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* save */ \ opcode.bit(21,24) /* mode */ for(n4 shiftHi : range(16)) for(n1 save : range(2)) for(n4 mode : range(16)) { if(mode >= 8 && mode <= 11 && !save) continue; //TST, TEQ, CMP, CMN auto opcode = pattern(".... 001? ???? ???? ???? ???? ???? ????") | shiftHi << 4 | save << 20 | mode << 21; bind(opcode, DataImmediate); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit( 5, 6), /* type */ \ opcode.bit( 7,11), /* shift */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* save */ \ opcode.bit(21,24) /* mode */ for(n2 type : range(4)) for(n1 shiftLo : range(2)) for(n1 save : range(2)) for(n4 mode : range(16)) { if(mode >= 8 && mode <= 11 && !save) continue; //TST, TEQ, CMP, CMN auto opcode = pattern(".... 000? ???? ???? ???? ???? ???0 ????") | type << 5 | shiftLo << 7 | save << 20 | mode << 21; bind(opcode, DataImmediateShift); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit( 5, 6), /* type */ \ opcode.bit( 8,11), /* s */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* save */ \ opcode.bit(21,24) /* mode */ for(n2 type : range(4)) for(n1 save : range(2)) for(n4 mode : range(16)) { if(mode >= 8 && mode <= 11 && !save) continue; //TST, TEQ, CMP, CMN auto opcode = pattern(".... 000? ???? ???? ???? ???? 0??1 ????") | type << 5 | save << 20 | mode << 21; bind(opcode, DataRegisterShift); } #undef arguments #define arguments \ opcode.bit( 0, 3) << 0 | opcode.bit( 8,11) << 4, /* immediate */ \ opcode.bit( 5), /* half */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(21), /* writeback */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n1 half : range(2)) for(n1 writeback : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 000? ?1?1 ???? ???? ???? 11?1 ????") | half << 5 | writeback << 21 | up << 23 | pre << 24; bind(opcode, LoadImmediate); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit( 5), /* half */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(21), /* writeback */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n1 half : range(2)) for(n1 writeback : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 000? ?0?1 ???? ???? ---- 11?1 ????") | half << 5 | writeback << 21 | up << 23 | pre << 24; bind(opcode, LoadRegister); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(22) /* byte */ for(n1 byte : range(2)) { auto opcode = pattern(".... 0001 0?00 ???? ???? ---- 1001 ????") | byte << 22; bind(opcode, MemorySwap); } #undef arguments #define arguments \ opcode.bit( 0, 3) << 0 | opcode.bit( 8,11) << 4, /* immediate */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* mode */ \ opcode.bit(21), /* writeback */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n1 mode : range(2)) for(n1 writeback : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 000? ?1?? ???? ???? ???? 1011 ????") | mode << 20 | writeback << 21 | up << 23 | pre << 24; bind(opcode, MoveHalfImmediate); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* mode */ \ opcode.bit(21), /* writeback */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n1 mode : range(2)) for(n1 writeback : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 000? ?0?? ???? ???? ---- 1011 ????") | mode << 20 | writeback << 21 | up << 23 | pre << 24; bind(opcode, MoveHalfRegister); } #undef arguments #define arguments \ opcode.bit( 0,11), /* immediate */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* mode */ \ opcode.bit(21), /* writeback */ \ opcode.bit(22), /* byte */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n4 immediatePart : range(16)) for(n1 mode : range(2)) for(n1 writeback : range(2)) for(n1 byte : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 010? ???? ???? ???? ???? ???? ????") | immediatePart << 4 | mode << 20 | writeback << 21 | byte << 22 | up << 23 | pre << 24; bind(opcode, MoveImmediateOffset); } #undef arguments #define arguments \ opcode.bit( 0,15), /* list */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* mode */ \ opcode.bit(21), /* writeback */ \ opcode.bit(22), /* type */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n4 listPart : range(16)) for(n1 mode : range(2)) for(n1 writeback : range(2)) for(n1 type : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 100? ???? ???? ???? ???? ???? ????") | listPart << 4 | mode << 20 | writeback << 21 | type << 22 | up << 23 | pre << 24; bind(opcode, MoveMultiple); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit( 5, 6), /* type */ \ opcode.bit( 7,11), /* shift */ \ opcode.bit(12,15), /* d */ \ opcode.bit(16,19), /* n */ \ opcode.bit(20), /* mode */ \ opcode.bit(21), /* writeback */ \ opcode.bit(22), /* byte */ \ opcode.bit(23), /* up */ \ opcode.bit(24) /* pre */ for(n2 type : range(4)) for(n1 shiftLo : range(2)) for(n1 mode : range(2)) for(n1 writeback : range(2)) for(n1 byte : range(2)) for(n1 up : range(2)) for(n1 pre : range(2)) { auto opcode = pattern(".... 011? ???? ???? ???? ???? ???0 ????") | type << 5 | shiftLo << 7 | mode << 20 | writeback << 21 | byte << 22 | up << 23 | pre << 24; bind(opcode, MoveRegisterOffset); } #undef arguments #define arguments \ opcode.bit(12,15), /* d */ \ opcode.bit(22) /* mode */ for(n1 mode : range(2)) { auto opcode = pattern(".... 0001 0?00 ---- ???? ---- 0000 ----") | mode << 22; bind(opcode, MoveToRegisterFromStatus); } #undef arguments #define arguments \ opcode.bit( 0, 7), /* immediate */ \ opcode.bit( 8,11), /* rotate */ \ opcode.bit(16,19), /* field */ \ opcode.bit(22) /* mode */ for(n4 immediateHi : range(16)) for(n1 mode : range(2)) { auto opcode = pattern(".... 0011 0?10 ???? ---- ???? ???? ????") | immediateHi << 4 | mode << 22; bind(opcode, MoveToStatusFromImmediate); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit(16,19), /* field */ \ opcode.bit(22) /* mode */ for(n1 mode : range(2)) { auto opcode = pattern(".... 0001 0?10 ???? ---- ---- 0000 ????") | mode << 22; bind(opcode, MoveToStatusFromRegister); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit( 8,11), /* s */ \ opcode.bit(12,15), /* n */ \ opcode.bit(16,19), /* d */ \ opcode.bit(20), /* save */ \ opcode.bit(21) /* accumulate */ for(n1 save : range(2)) for(n1 accumulate : range(2)) { auto opcode = pattern(".... 0000 00?? ???? ???? ???? 1001 ????") | save << 20 | accumulate << 21; bind(opcode, Multiply); } #undef arguments #define arguments \ opcode.bit( 0, 3), /* m */ \ opcode.bit( 8,11), /* s */ \ opcode.bit(12,15), /* l */ \ opcode.bit(16,19), /* h */ \ opcode.bit(20), /* save */ \ opcode.bit(21), /* accumulate */ \ opcode.bit(22) /* sign */ for(n1 save : range(2)) for(n1 accumulate : range(2)) for(n1 sign : range(2)) { auto opcode = pattern(".... 0000 1??? ???? ???? ???? 1001 ????") | save << 20 | accumulate << 21 | sign << 22; bind(opcode, MultiplyLong); } #undef arguments #define arguments \ opcode.bit( 0,23) /* immediate */ for(n4 immediateLo : range(16)) for(n4 immediateHi : range(16)) { auto opcode = pattern(".... 1111 ???? ???? ???? ???? ???? ????") | immediateLo << 4 | immediateHi << 20; bind(opcode, SoftwareInterrupt); } #undef arguments #define arguments for(n12 id : range(4096)) { if(armInstruction[id]) continue; auto opcode = pattern(".... ???? ???? ---- ---- ---- ???? ----") | id.bit(0,3) << 4 | id.bit(4,11) << 20; bind(opcode, Undefined); } #undef arguments #undef bind #undef pattern } auto ARM7TDMI::thumbInitialize() -> void { #define bind(id, name, ...) { \ assert(!thumbInstruction[id]); \ thumbInstruction[id] = [=] { return thumbInstruction##name(__VA_ARGS__); }; \ thumbDisassemble[id] = [=] { return thumbDisassemble##name(__VA_ARGS__); }; \ } #define pattern(s) \ std::integral_constant::value for(n3 d : range(8)) for(n3 m : range(8)) for(n4 mode : range(16)) { auto opcode = pattern("0100 00?? ???? ????") | d << 0 | m << 3 | mode << 6; bind(opcode, ALU, d, m, mode); } for(n4 d : range(16)) for(n4 m : range(16)) for(n2 mode : range(4)) { if(mode == 3) continue; auto opcode = pattern("0100 01?? ???? ????") | d.bit(0,2) << 0 | m << 3 | d.bit(3) << 7 | mode << 8; bind(opcode, ALUExtended, d, m, mode); } for(n8 immediate : range(256)) for(n3 d : range(8)) for(n1 mode : range(2)) { auto opcode = pattern("1010 ???? ???? ????") | immediate << 0 | d << 8 | mode << 11; bind(opcode, AddRegister, immediate, d, mode); } for(n3 d : range(8)) for(n3 n : range(8)) for(n3 immediate : range(8)) for(n1 mode : range(2)) { auto opcode = pattern("0001 11?? ???? ????") | d << 0 | n << 3 | immediate << 6 | mode << 9; bind(opcode, AdjustImmediate, d, n, immediate, mode); } for(n3 d : range(8)) for(n3 n : range(8)) for(n3 m : range(8)) for(n1 mode : range(2)) { auto opcode = pattern("0001 10?? ???? ????") | d << 0 | n << 3 | m << 6 | mode << 9; bind(opcode, AdjustRegister, d, n, m, mode); } for(n7 immediate : range(128)) for(n1 mode : range(2)) { auto opcode = pattern("1011 0000 ???? ????") | immediate << 0 | mode << 7; bind(opcode, AdjustStack, immediate, mode); } for(n3 _ : range(8)) for(n4 m : range(16)) { auto opcode = pattern("0100 0111 0??? ?---") | _ << 0 | m << 3; bind(opcode, BranchExchange, m); } for(n11 displacement : range(2048)) { auto opcode = pattern("1111 0??? ???? ????") | displacement << 0; bind(opcode, BranchFarPrefix, displacement); } for(n11 displacement : range(2048)) { auto opcode = pattern("1111 1??? ???? ????") | displacement << 0; bind(opcode, BranchFarSuffix, displacement); } for(n11 displacement : range(2048)) { auto opcode = pattern("1110 0??? ???? ????") | displacement << 0; bind(opcode, BranchNear, displacement); } for(n8 displacement : range(256)) for(n4 condition : range(16)) { if(condition == 15) continue; //BNV auto opcode = pattern("1101 ???? ???? ????") | displacement << 0 | condition << 8; bind(opcode, BranchTest, displacement, condition); } for(n8 immediate : range(256)) for(n3 d : range(8)) for(n2 mode : range(4)) { auto opcode = pattern("001? ???? ???? ????") | immediate << 0 | d << 8 | mode << 11; bind(opcode, Immediate, immediate, d, mode); } for(n8 displacement : range(256)) for(n3 d : range(8)) { auto opcode = pattern("0100 1??? ???? ????") | displacement << 0 | d << 8; bind(opcode, LoadLiteral, displacement, d); } for(n3 d : range(8)) for(n3 n : range(8)) for(n5 immediate : range(32)) for(n1 mode : range(2)) { auto opcode = pattern("0111 ???? ???? ????") | d << 0 | n << 3 | immediate << 6 | mode << 11; bind(opcode, MoveByteImmediate, d, n, immediate, mode); } for(n3 d : range(8)) for(n3 n : range(8)) for(n5 immediate : range(32)) for(n1 mode : range(2)) { auto opcode = pattern("1000 ???? ???? ????") | d << 0 | n << 3 | immediate << 6 | mode << 11; bind(opcode, MoveHalfImmediate, d, n, immediate, mode); } for(n8 list : range(256)) for(n3 n : range(8)) for(n1 mode : range(2)) { auto opcode = pattern("1100 ???? ???? ????") | list << 0 | n << 8 | mode << 11; bind(opcode, MoveMultiple, list, n, mode); } for(n3 d : range(8)) for(n3 n : range(8)) for(n3 m : range(8)) for(n3 mode : range(8)) { auto opcode = pattern("0101 ???? ???? ????") | d << 0 | n << 3 | m << 6 | mode << 9; bind(opcode, MoveRegisterOffset, d, n, m, mode); } for(n8 immediate : range(256)) for(n3 d : range(8)) for(n1 mode : range(2)) { auto opcode = pattern("1001 ???? ???? ????") | immediate << 0 | d << 8 | mode << 11; bind(opcode, MoveStack, immediate, d, mode); } for(n3 d : range(8)) for(n3 n : range(8)) for(n5 offset : range(32)) for(n1 mode : range(2)) { auto opcode = pattern("0110 ???? ???? ????") | d << 0 | n << 3 | offset << 6 | mode << 11; bind(opcode, MoveWordImmediate, d, n, offset, mode); } for(n3 d : range(8)) for(n3 m : range(8)) for(n5 immediate : range(32)) for(n2 mode : range(4)) { if(mode == 3) continue; auto opcode = pattern("000? ???? ???? ????") | d << 0 | m << 3 | immediate << 6 | mode << 11; bind(opcode, ShiftImmediate, d, m, immediate, mode); } for(n8 immediate : range(256)) { auto opcode = pattern("1101 1111 ???? ????") | immediate << 0; bind(opcode, SoftwareInterrupt, immediate); } for(n8 list : range(256)) for(n1 lrpc : range(2)) for(n1 mode : range(2)) { auto opcode = pattern("1011 ?10? ???? ????") | list << 0 | lrpc << 8 | mode << 11; bind(opcode, StackMultiple, list, lrpc, mode); } for(n16 id : range(65536)) { if(thumbInstruction[id]) continue; auto opcode = pattern("???? ???? ???? ????") | id << 0; bind(opcode, Undefined); } #undef bind #undef pattern } ares-126/ares/component/processor/arm7tdmi/instructions-arm.cpp000066400000000000000000000212011415063341600250410ustar00rootroot00000000000000auto ARM7TDMI::armALU(n4 mode, n4 d, n4 n, n32 rm) -> void { n32 rn = r(n); switch(mode) { case 0: r(d) = BIT(rn & rm); break; //AND case 1: r(d) = BIT(rn ^ rm); break; //EOR case 2: r(d) = SUB(rn, rm, 1); break; //SUB case 3: r(d) = SUB(rm, rn, 1); break; //RSB case 4: r(d) = ADD(rn, rm, 0); break; //ADD case 5: r(d) = ADD(rn, rm, cpsr().c); break; //ADC case 6: r(d) = SUB(rn, rm, cpsr().c); break; //SBC case 7: r(d) = SUB(rm, rn, cpsr().c); break; //RSC case 8: BIT(rn & rm); break; //TST case 9: BIT(rn ^ rm); break; //TEQ case 10: SUB(rn, rm, 1); break; //CMP case 11: ADD(rn, rm, 0); break; //CMN case 12: r(d) = BIT(rn | rm); break; //ORR case 13: r(d) = BIT(rm); break; //MOV case 14: r(d) = BIT(rn & ~rm); break; //BIC case 15: r(d) = BIT(~rm); break; //MVN } if(exception() && d == 15 && opcode.bit(20)) { cpsr() = spsr(); } } auto ARM7TDMI::armMoveToStatus(n4 field, n1 mode, n32 data) -> void { if(mode && (cpsr().m == PSR::USR || cpsr().m == PSR::SYS)) return; PSR& psr = mode ? spsr() : cpsr(); if(field.bit(0)) { if(mode || privileged()) { psr.m = data.bit(0,4); psr.t = data.bit(5); psr.f = data.bit(6); psr.i = data.bit(7); if(!mode && psr.t) r(15).data += 2; } } if(field.bit(3)) { psr.v = data.bit(28); psr.c = data.bit(29); psr.z = data.bit(30); psr.n = data.bit(31); } } // auto ARM7TDMI::armInstructionBranch (i24 displacement, n1 link) -> void { if(link) r(14) = r(15) - 4; r(15) = r(15) + displacement * 4; } auto ARM7TDMI::armInstructionBranchExchangeRegister (n4 m) -> void { n32 address = r(m); cpsr().t = address.bit(0); r(15) = address; } auto ARM7TDMI::armInstructionDataImmediate (n8 immediate, n4 shift, n4 d, n4 n, n1 save, n4 mode) -> void { n32 data = immediate; carry = cpsr().c; if(shift) data = ROR(data, shift << 1); armALU(mode, d, n, data); } auto ARM7TDMI::armInstructionDataImmediateShift (n4 m, n2 type, n5 shift, n4 d, n4 n, n1 save, n4 mode) -> void { n32 rm = r(m); carry = cpsr().c; switch(type) { case 0: rm = LSL(rm, shift); break; case 1: rm = LSR(rm, shift ? (u32)shift : 32); break; case 2: rm = ASR(rm, shift ? (u32)shift : 32); break; case 3: rm = shift ? ROR(rm, shift) : RRX(rm); break; } armALU(mode, d, n, rm); } auto ARM7TDMI::armInstructionDataRegisterShift (n4 m, n2 type, n4 s, n4 d, n4 n, n1 save, n4 mode) -> void { n8 rs = r(s) + (s == 15 ? 4 : 0); n32 rm = r(m) + (m == 15 ? 4 : 0); carry = cpsr().c; switch(type) { case 0: rm = LSL(rm, rs < 33 ? rs : (n8)33); break; case 1: rm = LSR(rm, rs < 33 ? rs : (n8)33); break; case 2: rm = ASR(rm, rs < 32 ? rs : (n8)32); break; case 3: if(rs) rm = ROR(rm, rs & 31 ? u32(rs & 31) : 32); break; } armALU(mode, d, n, rm); } auto ARM7TDMI::armInstructionLoadImmediate (n8 immediate, n1 half, n4 d, n4 n, n1 writeback, n1 up, n1 pre) -> void { n32 rn = r(n); n32 rd = r(d); if(pre == 1) rn = up ? rn + immediate : rn - immediate; rd = load((half ? Half : Byte) | Nonsequential | Signed, rn); if(pre == 0) rn = up ? rn + immediate : rn - immediate; if(pre == 0 || writeback) r(n) = rn; r(d) = rd; } auto ARM7TDMI::armInstructionLoadRegister (n4 m, n1 half, n4 d, n4 n, n1 writeback, n1 up, n1 pre) -> void { n32 rn = r(n); n32 rm = r(m); n32 rd = r(d); if(pre == 1) rn = up ? rn + rm : rn - rm; rd = load((half ? Half : Byte) | Nonsequential | Signed, rn); if(pre == 0) rn = up ? rn + rm : rn - rm; if(pre == 0 || writeback) r(n) = rn; r(d) = rd; } auto ARM7TDMI::armInstructionMemorySwap (n4 m, n4 d, n4 n, n1 byte) -> void { n32 word = load((byte ? Byte : Word) | Nonsequential, r(n)); store((byte ? Byte : Word) | Nonsequential, r(n), r(m)); r(d) = word; } auto ARM7TDMI::armInstructionMoveHalfImmediate (n8 immediate, n4 d, n4 n, n1 mode, n1 writeback, n1 up, n1 pre) -> void { n32 rn = r(n); n32 rd = r(d); if(pre == 1) rn = up ? rn + immediate : rn - immediate; if(mode == 1) rd = load(Half | Nonsequential, rn); if(mode == 0) store(Half | Nonsequential, rn, rd); if(pre == 0) rn = up ? rn + immediate : rn - immediate; if(pre == 0 || writeback) r(n) = rn; if(mode == 1) r(d) = rd; } auto ARM7TDMI::armInstructionMoveHalfRegister (n4 m, n4 d, n4 n, n1 mode, n1 writeback, n1 up, n1 pre) -> void { n32 rn = r(n); n32 rm = r(m); n32 rd = r(d); if(pre == 1) rn = up ? rn + rm : rn - rm; if(mode == 1) rd = load(Half | Nonsequential, rn); if(mode == 0) store(Half | Nonsequential, rn, rd); if(pre == 0) rn = up ? rn + rm : rn - rm; if(pre == 0 || writeback) r(n) = rn; if(mode == 1) r(d) = rd; } auto ARM7TDMI::armInstructionMoveImmediateOffset (n12 immediate, n4 d, n4 n, n1 mode, n1 writeback, n1 byte, n1 up, n1 pre) -> void { n32 rn = r(n); n32 rd = r(d); if(pre == 1) rn = up ? rn + immediate : rn - immediate; if(mode == 1) rd = load((byte ? Byte : Word) | Nonsequential, rn); if(mode == 0) store((byte ? Byte : Word) | Nonsequential, rn, rd); if(pre == 0) rn = up ? rn + immediate : rn - immediate; if(pre == 0 || writeback) r(n) = rn; if(mode == 1) r(d) = rd; } auto ARM7TDMI::armInstructionMoveMultiple (n16 list, n4 n, n1 mode, n1 writeback, n1 type, n1 up, n1 pre) -> void { n32 rn = r(n); if(pre == 0 && up == 1) rn = rn + 0; //IA if(pre == 1 && up == 1) rn = rn + 4; //IB if(pre == 1 && up == 0) rn = rn - bit::count(list) * 4 + 0; //DB if(pre == 0 && up == 0) rn = rn - bit::count(list) * 4 + 4; //DA if(writeback && mode == 1) { if(up == 1) r(n) = r(n) + bit::count(list) * 4; //IA,IB if(up == 0) r(n) = r(n) - bit::count(list) * 4; //DA,DB } auto cpsrMode = cpsr().m; bool usr = false; if(type && mode == 1 && !list.bit(15)) usr = true; if(type && mode == 0) usr = true; if(usr) cpsr().m = PSR::USR; u32 sequential = Nonsequential; for(u32 m : range(16)) { if(!list.bit(m)) continue; if(mode == 1) r(m) = read(Word | sequential, rn); if(mode == 0) write(Word | sequential, rn, r(m)); rn += 4; sequential = Sequential; } if(usr) cpsr().m = cpsrMode; if(mode) { idle(); if(type && list.bit(15) && cpsr().m != PSR::USR && cpsr().m != PSR::SYS) { cpsr() = spsr(); } } else { pipeline.nonsequential = true; } if(writeback && mode == 0) { if(up == 1) r(n) = r(n) + bit::count(list) * 4; //IA,IB if(up == 0) r(n) = r(n) - bit::count(list) * 4; //DA,DB } } auto ARM7TDMI::armInstructionMoveRegisterOffset (n4 m, n2 type, n5 shift, n4 d, n4 n, n1 mode, n1 writeback, n1 byte, n1 up, n1 pre) -> void { n32 rm = r(m); n32 rd = r(d); n32 rn = r(n); carry = cpsr().c; switch(type) { case 0: rm = LSL(rm, shift); break; case 1: rm = LSR(rm, shift ? (u32)shift : 32); break; case 2: rm = ASR(rm, shift ? (u32)shift : 32); break; case 3: rm = shift ? ROR(rm, shift) : RRX(rm); break; } if(pre == 1) rn = up ? rn + rm : rn - rm; if(mode == 1) rd = load((byte ? Byte : Word) | Nonsequential, rn); if(mode == 0) store((byte ? Byte : Word) | Nonsequential, rn, rd); if(pre == 0) rn = up ? rn + rm : rn - rm; if(pre == 0 || writeback) r(n) = rn; if(mode == 1) r(d) = rd; } auto ARM7TDMI::armInstructionMoveToRegisterFromStatus (n4 d, n1 mode) -> void { if(mode && (cpsr().m == PSR::USR || cpsr().m == PSR::SYS)) return; r(d) = mode ? spsr() : cpsr(); } auto ARM7TDMI::armInstructionMoveToStatusFromImmediate (n8 immediate, n4 rotate, n4 field, n1 mode) -> void { n32 data = immediate; if(rotate) data = ROR(data, rotate << 1); armMoveToStatus(field, mode, data); } auto ARM7TDMI::armInstructionMoveToStatusFromRegister (n4 m, n4 field, n1 mode) -> void { armMoveToStatus(field, mode, r(m)); } auto ARM7TDMI::armInstructionMultiply (n4 m, n4 s, n4 n, n4 d, n1 save, n1 accumulate) -> void { if(accumulate) idle(); r(d) = MUL(accumulate ? r(n) : 0, r(m), r(s)); } auto ARM7TDMI::armInstructionMultiplyLong (n4 m, n4 s, n4 l, n4 h, n1 save, n1 accumulate, n1 sign) -> void { n64 rm = r(m); n64 rs = r(s); idle(); idle(); if(accumulate) idle(); if(sign) { if(rs >> 8 && rs >> 8 != 0xffffff) idle(); if(rs >> 16 && rs >> 16 != 0xffff) idle(); if(rs >> 24 && rs >> 24 != 0xff) idle(); rm = (i32)rm; rs = (i32)rs; } else { if(rs >> 8) idle(); if(rs >> 16) idle(); if(rs >> 24) idle(); } n64 rd = rm * rs; if(accumulate) rd += (n64)r(h) << 32 | (n64)r(l) << 0; r(h) = rd >> 32; r(l) = rd >> 0; if(save) { cpsr().z = rd == 0; cpsr().n = rd.bit(63); } } auto ARM7TDMI::armInstructionSoftwareInterrupt (n24 immediate) -> void { exception(PSR::SVC, 0x08); } auto ARM7TDMI::armInstructionUndefined () -> void { exception(PSR::UND, 0x04); } ares-126/ares/component/processor/arm7tdmi/instructions-thumb.cpp000066400000000000000000000152271415063341600254140ustar00rootroot00000000000000auto ARM7TDMI::thumbInstructionALU (n3 d, n3 m, n4 mode) -> void { switch(mode) { case 0: r(d) = BIT(r(d) & r(m)); break; //AND case 1: r(d) = BIT(r(d) ^ r(m)); break; //EOR case 2: r(d) = BIT(LSL(r(d), r(m))); break; //LSL case 3: r(d) = BIT(LSR(r(d), r(m))); break; //LSR case 4: r(d) = BIT(ASR(r(d), r(m))); break; //ASR case 5: r(d) = ADD(r(d), r(m), cpsr().c); break; //ADC case 6: r(d) = SUB(r(d), r(m), cpsr().c); break; //SBC case 7: r(d) = BIT(ROR(r(d), r(m))); break; //ROR case 8: BIT(r(d) & r(m)); break; //TST case 9: r(d) = SUB(0, r(m), 1); break; //NEG case 10: SUB(r(d), r(m), 1); break; //CMP case 11: ADD(r(d), r(m), 0); break; //CMN case 12: r(d) = BIT(r(d) | r(m)); break; //ORR case 13: r(d) = MUL(0, r(m), r(d)); break; //MUL case 14: r(d) = BIT(r(d) & ~r(m)); break; //BIC case 15: r(d) = BIT(~r(m)); break; //MVN } } auto ARM7TDMI::thumbInstructionALUExtended (n4 d, n4 m, n2 mode) -> void { switch(mode) { case 0: r(d) = r(d) + r(m); break; //ADD case 1: SUB(r(d), r(m), 1); break; //SUBS case 2: r(d) = r(m); break; //MOV } } auto ARM7TDMI::thumbInstructionAddRegister (n8 immediate, n3 d, n1 mode) -> void { switch(mode) { case 0: r(d) = (r(15) & ~3) + immediate * 4; break; //ADD pc case 1: r(d) = r(13) + immediate * 4; break; //ADD sp } } auto ARM7TDMI::thumbInstructionAdjustImmediate (n3 d, n3 n, n3 immediate, n1 mode) -> void { switch(mode) { case 0: r(d) = ADD(r(n), immediate, 0); break; //ADD case 1: r(d) = SUB(r(n), immediate, 1); break; //SUB } } auto ARM7TDMI::thumbInstructionAdjustRegister (n3 d, n3 n, n3 m, n1 mode) -> void { switch(mode) { case 0: r(d) = ADD(r(n), r(m), 0); break; //ADD case 1: r(d) = SUB(r(n), r(m), 1); break; //SUB } } auto ARM7TDMI::thumbInstructionAdjustStack (n7 immediate, n1 mode) -> void { switch(mode) { case 0: r(13) = r(13) + immediate * 4; break; //ADD case 1: r(13) = r(13) - immediate * 4; break; //SUB } } auto ARM7TDMI::thumbInstructionBranchExchange (n4 m) -> void { n32 address = r(m); cpsr().t = address.bit(0); r(15) = address; } auto ARM7TDMI::thumbInstructionBranchFarPrefix (i11 displacement) -> void { r(14) = r(15) + (displacement * 2 << 11); } auto ARM7TDMI::thumbInstructionBranchFarSuffix (n11 displacement) -> void { r(15) = r(14) + (displacement * 2); r(14) = pipeline.decode.address | 1; } auto ARM7TDMI::thumbInstructionBranchNear (i11 displacement) -> void { r(15) = r(15) + displacement * 2; } auto ARM7TDMI::thumbInstructionBranchTest (i8 displacement, n4 condition) -> void { if(!TST(condition)) return; r(15) = r(15) + displacement * 2; } auto ARM7TDMI::thumbInstructionImmediate (n8 immediate, n3 d, n2 mode) -> void { switch(mode) { case 0: r(d) = BIT(immediate); break; //MOV case 1: SUB(r(d), immediate, 1); break; //CMP case 2: r(d) = ADD(r(d), immediate, 0); break; //ADD case 3: r(d) = SUB(r(d), immediate, 1); break; //SUB } } auto ARM7TDMI::thumbInstructionLoadLiteral (n8 displacement, n3 d) -> void { n32 address = (r(15) & ~3) + (displacement << 2); r(d) = load(Word | Nonsequential, address); } auto ARM7TDMI::thumbInstructionMoveByteImmediate (n3 d, n3 n, n5 offset, n1 mode) -> void { switch(mode) { case 0: store(Byte | Nonsequential, r(n) + offset, r(d)); break; //STRB case 1: r(d) = load(Byte | Nonsequential, r(n) + offset); break; //LDRB } } auto ARM7TDMI::thumbInstructionMoveHalfImmediate (n3 d, n3 n, n5 offset, n1 mode) -> void { switch(mode) { case 0: store(Half | Nonsequential, r(n) + offset * 2, r(d)); break; //STRH case 1: r(d) = load(Half | Nonsequential, r(n) + offset * 2); break; //LDRH } } auto ARM7TDMI::thumbInstructionMoveMultiple (n8 list, n3 n, n1 mode) -> void { n32 rn = r(n); for(u32 m : range(8)) { if(!list.bit(m)) continue; switch(mode) { case 0: write(Word | Nonsequential, rn, r(m)); break; //STMIA case 1: r(m) = read(Word | Nonsequential, rn); break; //LDMIA } rn += 4; } if(mode == 0 || !list.bit(n)) r(n) = rn; if(mode == 1) idle(); } auto ARM7TDMI::thumbInstructionMoveRegisterOffset (n3 d, n3 n, n3 m, n3 mode) -> void { switch(mode) { case 0: store(Word | Nonsequential, r(n) + r(m), r(d)); break; //STR case 1: store(Half | Nonsequential, r(n) + r(m), r(d)); break; //STRH case 2: store(Byte | Nonsequential, r(n) + r(m), r(d)); break; //STRB case 3: r(d) = load(Byte | Nonsequential | Signed, r(n) + r(m)); break; //LDSB case 4: r(d) = load(Word | Nonsequential, r(n) + r(m)); break; //LDR case 5: r(d) = load(Half | Nonsequential, r(n) + r(m)); break; //LDRH case 6: r(d) = load(Byte | Nonsequential, r(n) + r(m)); break; //LDRB case 7: r(d) = load(Half | Nonsequential | Signed, r(n) + r(m)); break; //LDSH } } auto ARM7TDMI::thumbInstructionMoveStack (n8 immediate, n3 d, n1 mode) -> void { switch(mode) { case 0: store(Word | Nonsequential, r(13) + immediate * 4, r(d)); break; //STR case 1: r(d) = load(Word | Nonsequential, r(13) + immediate * 4); break; //LDR } } auto ARM7TDMI::thumbInstructionMoveWordImmediate (n3 d, n3 n, n5 offset, n1 mode) -> void { switch(mode) { case 0: store(Word | Nonsequential, r(n) + offset * 4, r(d)); break; //STR case 1: r(d) = load(Word | Nonsequential, r(n) + offset * 4); break; //LDR } } auto ARM7TDMI::thumbInstructionShiftImmediate (n3 d, n3 m, n5 immediate, n2 mode) -> void { switch(mode) { case 0: r(d) = BIT(LSL(r(m), immediate)); break; //LSL case 1: r(d) = BIT(LSR(r(m), immediate ? (u32)immediate : 32)); break; //LSR case 2: r(d) = BIT(ASR(r(m), immediate ? (u32)immediate : 32)); break; //ASR } } auto ARM7TDMI::thumbInstructionSoftwareInterrupt (n8 immediate) -> void { exception(PSR::SVC, 0x08); } auto ARM7TDMI::thumbInstructionStackMultiple (n8 list, n1 lrpc, n1 mode) -> void { n32 sp; switch(mode) { case 0: sp = r(13) - (bit::count(list) + lrpc) * 4; break; //PUSH case 1: sp = r(13); //POP } u32 sequential = Nonsequential; for(u32 m : range(8)) { if(!list.bit(m)) continue; switch(mode) { case 0: write(Word | sequential, sp, r(m)); break; //PUSH case 1: r(m) = read(Word | sequential, sp); break; //POP } sp += 4; sequential = Sequential; } if(lrpc) { switch(mode) { case 0: write(Word | sequential, sp, r(14)); break; //PUSH case 1: r(15) = read(Word | sequential, sp); break; //POP } sp += 4; } if(mode == 1) { idle(); r(13) = r(13) + (bit::count(list) + lrpc) * 4; //POP } else { pipeline.nonsequential = true; r(13) = r(13) - (bit::count(list) + lrpc) * 4; //PUSH } } auto ARM7TDMI::thumbInstructionUndefined () -> void { exception(PSR::UND, 0x04); } ares-126/ares/component/processor/arm7tdmi/memory.cpp000066400000000000000000000020401415063341600230300ustar00rootroot00000000000000auto ARM7TDMI::idle() -> void { pipeline.nonsequential = true; sleep(); } auto ARM7TDMI::read(u32 mode, n32 address) -> n32 { return get(mode, address); } auto ARM7TDMI::load(u32 mode, n32 address) -> n32 { pipeline.nonsequential = true; auto word = get(Load | mode, address); if(mode & Half) { address &= 1; word = mode & Signed ? (n32)(i16)word : (n32)(n16)word; } if(mode & Byte) { address &= 0; word = mode & Signed ? (n32)(i8)word : (n32)(n8)word; } if(mode & Signed) { word = ASR(word, address.bit(0,1) << 3); } else { word = ROR(word, address.bit(0,1) << 3); } idle(); return word; } auto ARM7TDMI::write(u32 mode, n32 address, n32 word) -> void { pipeline.nonsequential = true; return set(mode, address, word); } auto ARM7TDMI::store(u32 mode, n32 address, n32 word) -> void { pipeline.nonsequential = true; if(mode & Half) { word &= 0xffff; word |= word << 16; } if(mode & Byte) { word &= 0xff; word |= word << 8; word |= word << 16; } return set(Store | mode, address, word); } ares-126/ares/component/processor/arm7tdmi/registers.cpp000066400000000000000000000036561415063341600235450ustar00rootroot00000000000000inline auto ARM7TDMI::r(n4 index) -> GPR& { switch(index) { case 0: return processor.r0; case 1: return processor.r1; case 2: return processor.r2; case 3: return processor.r3; case 4: return processor.r4; case 5: return processor.r5; case 6: return processor.r6; case 7: return processor.r7; case 8: return processor.cpsr.m == PSR::FIQ ? processor.fiq.r8 : processor.r8; case 9: return processor.cpsr.m == PSR::FIQ ? processor.fiq.r9 : processor.r9; case 10: return processor.cpsr.m == PSR::FIQ ? processor.fiq.r10 : processor.r10; case 11: return processor.cpsr.m == PSR::FIQ ? processor.fiq.r11 : processor.r11; case 12: return processor.cpsr.m == PSR::FIQ ? processor.fiq.r12 : processor.r12; case 13: switch(processor.cpsr.m) { case PSR::FIQ: return processor.fiq.r13; case PSR::IRQ: return processor.irq.r13; case PSR::SVC: return processor.svc.r13; case PSR::ABT: return processor.abt.r13; case PSR::UND: return processor.und.r13; default: return processor.r13; } case 14: switch(processor.cpsr.m) { case PSR::FIQ: return processor.fiq.r14; case PSR::IRQ: return processor.irq.r14; case PSR::SVC: return processor.svc.r14; case PSR::ABT: return processor.abt.r14; case PSR::UND: return processor.und.r14; default: return processor.r14; } case 15: return processor.r15; } unreachable; } inline auto ARM7TDMI::cpsr() -> PSR& { return processor.cpsr; } inline auto ARM7TDMI::spsr() -> PSR& { switch(processor.cpsr.m) { case PSR::FIQ: return processor.fiq.spsr; case PSR::IRQ: return processor.irq.spsr; case PSR::SVC: return processor.svc.spsr; case PSR::ABT: return processor.abt.spsr; case PSR::UND: return processor.und.spsr; } throw; } inline auto ARM7TDMI::privileged() const -> bool { return processor.cpsr.m != PSR::USR; } inline auto ARM7TDMI::exception() const -> bool { return privileged() && processor.cpsr.m != PSR::SYS; } ares-126/ares/component/processor/arm7tdmi/serialization.cpp000066400000000000000000000022351415063341600244030ustar00rootroot00000000000000auto ARM7TDMI::serialize(serializer& s) -> void { s(processor); s(pipeline); s(carry); s(irq); } auto ARM7TDMI::Processor::serialize(serializer& s) -> void { s(r0.data); s(r1.data); s(r2.data); s(r3.data); s(r4.data); s(r5.data); s(r6.data); s(r7.data); s(r8.data); s(r9.data); s(r10.data); s(r11.data); s(r12.data); s(r13.data); s(r14.data); s(r15.data); s(cpsr); s(fiq.r8.data); s(fiq.r9.data); s(fiq.r10.data); s(fiq.r11.data); s(fiq.r12.data); s(fiq.r13.data); s(fiq.r14.data); s(fiq.spsr); s(irq.r13.data); s(irq.r14.data); s(irq.spsr); s(svc.r13.data); s(svc.r14.data); s(svc.spsr); s(abt.r13.data); s(abt.r14.data); s(abt.spsr); s(und.r13.data); s(und.r14.data); s(und.spsr); } auto ARM7TDMI::PSR::serialize(serializer& s) -> void { s(m); s(t); s(f); s(i); s(v); s(c); s(z); s(n); } auto ARM7TDMI::Pipeline::serialize(serializer& s) -> void { s(reload); s(nonsequential); s(fetch.address); s(fetch.instruction); s(fetch.thumb); s(decode.address); s(decode.instruction); s(decode.thumb); s(execute.address); s(execute.instruction); s(execute.thumb); } ares-126/ares/component/processor/gsu/000077500000000000000000000000001415063341600200725ustar00rootroot00000000000000ares-126/ares/component/processor/gsu/disassembler.cpp000066400000000000000000000304531415063341600232600ustar00rootroot00000000000000auto GSU::disassembleInstruction() -> string { char s[256]; disassembleOpcode(s); return pad(s, -14); } auto GSU::disassembleContext() -> string { string s; for(u32 n : range(16)) { s.append("r", n, ":", hex(regs.r[n].data, 4L), " "); } s.append("..."); //todo: add SFR flags return s; } auto GSU::disassembleOpcode(char* output) -> void { *output = 0; switch(regs.sfr.alt2 << 1 | regs.sfr.alt1 << 0) { case 0: disassembleALT0(output); break; case 1: disassembleALT1(output); break; case 2: disassembleALT2(output); break; case 3: disassembleALT3(output); break; } u32 length = strlen(output); while(length++ < 20) strcat(output, " "); } #define case4(id) \ case id+ 0: case id+ 1: case id+ 2: case id+ 3 #define case6(id) \ case id+ 0: case id+ 1: case id+ 2: case id+ 3: case id+ 4: case id+ 5 #define case12(id) \ case id+ 0: case id+ 1: case id+ 2: case id+ 3: case id+ 4: case id+ 5: case id+ 6: case id+ 7: \ case id+ 8: case id+ 9: case id+10: case id+11 #define case15(id) \ case id+ 0: case id+ 1: case id+ 2: case id+ 3: case id+ 4: case id+ 5: case id+ 6: case id+ 7: \ case id+ 8: case id+ 9: case id+10: case id+11: case id+12: case id+13: case id+14 #define case16(id) \ case id+ 0: case id+ 1: case id+ 2: case id+ 3: case id+ 4: case id+ 5: case id+ 6: case id+ 7: \ case id+ 8: case id+ 9: case id+10: case id+11: case id+12: case id+13: case id+14: case id+15 #define op0 regs.pipeline #define op1 read((regs.pbr << 16) + regs.r[15] + 0) #define op2 read((regs.pbr << 16) + regs.r[15] + 1) auto GSU::disassembleALT0(char* output) -> void { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; case (0x01): sprintf(t, "nop"); break; case (0x02): sprintf(t, "cache"); break; case (0x03): sprintf(t, "lsr"); break; case (0x04): sprintf(t, "rol"); break; case (0x05): sprintf(t, "bra %+d", (s8)op1); break; case (0x06): sprintf(t, "blt %+d", (s8)op1); break; case (0x07): sprintf(t, "bge %+d", (s8)op1); break; case (0x08): sprintf(t, "bne %+d", (s8)op1); break; case (0x09): sprintf(t, "beq %+d", (s8)op1); break; case (0x0a): sprintf(t, "bpl %+d", (s8)op1); break; case (0x0b): sprintf(t, "bmi %+d", (s8)op1); break; case (0x0c): sprintf(t, "bcc %+d", (s8)op1); break; case (0x0d): sprintf(t, "bcs %+d", (s8)op1); break; case (0x0e): sprintf(t, "bvc %+d", (s8)op1); break; case (0x0f): sprintf(t, "bvs %+d", (s8)op1); break; case16(0x10): sprintf(t, "to r%u", op0 & 15); break; case16(0x20): sprintf(t, "with r%u", op0 & 15); break; case12(0x30): sprintf(t, "stw (r%u)", op0 & 15); break; case (0x3c): sprintf(t, "loop"); break; case (0x3d): sprintf(t, "alt1"); break; case (0x3e): sprintf(t, "alt2"); break; case (0x3f): sprintf(t, "alt3"); break; case12(0x40): sprintf(t, "ldw (r%u)", op0 & 15); break; case (0x4c): sprintf(t, "plot"); break; case (0x4d): sprintf(t, "swap"); break; case (0x4e): sprintf(t, "color"); break; case (0x4f): sprintf(t, "not"); break; case16(0x50): sprintf(t, "add r%u", op0 & 15); break; case16(0x60): sprintf(t, "sub r%u", op0 & 15); break; case (0x70): sprintf(t, "merge"); break; case15(0x71): sprintf(t, "and r%u", op0 & 15); break; case16(0x80): sprintf(t, "mult r%u", op0 & 15); break; case (0x90): sprintf(t, "sbk"); break; case4 (0x91): sprintf(t, "link #%u", op0 & 15); break; case (0x95): sprintf(t, "sex"); break; case (0x96): sprintf(t, "asr"); break; case (0x97): sprintf(t, "ror"); break; case6 (0x98): sprintf(t, "jmp r%u", op0 & 15); break; case (0x9e): sprintf(t, "lob"); break; case (0x9f): sprintf(t, "fmult"); break; case16(0xa0): sprintf(t, "ibt r%u,#$%.2x", op0 & 15, op1 & 255); break; case16(0xb0): sprintf(t, "from r%u", op0 & 15); break; case (0xc0): sprintf(t, "hib"); break; case15(0xc1): sprintf(t, "or r%u", op0 & 15); break; case15(0xd0): sprintf(t, "inc r%u", op0 & 15); break; case (0xdf): sprintf(t, "getc"); break; case15(0xe0): sprintf(t, "dec r%u", op0 & 15); break; case (0xef): sprintf(t, "getb"); break; case16(0xf0): sprintf(t, "iwt r%u,#$%.2x%.2x", op0 & 15, op2 & 255, op1 & 255); break; } strcat(output, t); } auto GSU::disassembleALT1(char* output) -> void { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; case (0x01): sprintf(t, "nop"); break; case (0x02): sprintf(t, "cache"); break; case (0x03): sprintf(t, "lsr"); break; case (0x04): sprintf(t, "rol"); break; case (0x05): sprintf(t, "bra %+d", (s8)op1); break; case (0x06): sprintf(t, "blt %+d", (s8)op1); break; case (0x07): sprintf(t, "bge %+d", (s8)op1); break; case (0x08): sprintf(t, "bne %+d", (s8)op1); break; case (0x09): sprintf(t, "beq %+d", (s8)op1); break; case (0x0a): sprintf(t, "bpl %+d", (s8)op1); break; case (0x0b): sprintf(t, "bmi %+d", (s8)op1); break; case (0x0c): sprintf(t, "bcc %+d", (s8)op1); break; case (0x0d): sprintf(t, "bcs %+d", (s8)op1); break; case (0x0e): sprintf(t, "bvc %+d", (s8)op1); break; case (0x0f): sprintf(t, "bvs %+d", (s8)op1); break; case16(0x10): sprintf(t, "to r%u", op0 & 15); break; case16(0x20): sprintf(t, "with r%u", op0 & 15); break; case12(0x30): sprintf(t, "stb (r%u)", op0 & 15); break; case (0x3c): sprintf(t, "loop"); break; case (0x3d): sprintf(t, "alt1"); break; case (0x3e): sprintf(t, "alt2"); break; case (0x3f): sprintf(t, "alt3"); break; case12(0x40): sprintf(t, "ldb (r%u)", op0 & 15); break; case (0x4c): sprintf(t, "rpix"); break; case (0x4d): sprintf(t, "swap"); break; case (0x4e): sprintf(t, "cmode"); break; case (0x4f): sprintf(t, "not"); break; case16(0x50): sprintf(t, "adc r%u", op0 & 15); break; case16(0x60): sprintf(t, "sbc r%u", op0 & 15); break; case (0x70): sprintf(t, "merge"); break; case15(0x71): sprintf(t, "bic r%u", op0 & 15); break; case16(0x80): sprintf(t, "umult r%u", op0 & 15); break; case (0x90): sprintf(t, "sbk"); break; case4 (0x91): sprintf(t, "link #%u", op0 & 15); break; case (0x95): sprintf(t, "sex"); break; case (0x96): sprintf(t, "div2"); break; case (0x97): sprintf(t, "ror"); break; case6 (0x98): sprintf(t, "ljmp r%u", op0 & 15); break; case (0x9e): sprintf(t, "lob"); break; case (0x9f): sprintf(t, "lmult"); break; case16(0xa0): sprintf(t, "lms r%u,(#$%.4x)", op0 & 15, op1 << 1); break; case16(0xb0): sprintf(t, "from r%u", op0 & 15); break; case (0xc0): sprintf(t, "hib"); break; case15(0xc1): sprintf(t, "xor r%u", op0 & 15); break; case15(0xd0): sprintf(t, "inc r%u", op0 & 15); break; case (0xdf): sprintf(t, "getc"); break; case15(0xe0): sprintf(t, "dec r%u", op0 & 15); break; case (0xef): sprintf(t, "getbh"); break; case16(0xf0): sprintf(t, "lm r%u", op0 & 15); break; } strcat(output, t); } auto GSU::disassembleALT2(char* output) -> void { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; case (0x01): sprintf(t, "nop"); break; case (0x02): sprintf(t, "cache"); break; case (0x03): sprintf(t, "lsr"); break; case (0x04): sprintf(t, "rol"); break; case (0x05): sprintf(t, "bra %+d", (s8)op1); break; case (0x06): sprintf(t, "blt %+d", (s8)op1); break; case (0x07): sprintf(t, "bge %+d", (s8)op1); break; case (0x08): sprintf(t, "bne %+d", (s8)op1); break; case (0x09): sprintf(t, "beq %+d", (s8)op1); break; case (0x0a): sprintf(t, "bpl %+d", (s8)op1); break; case (0x0b): sprintf(t, "bmi %+d", (s8)op1); break; case (0x0c): sprintf(t, "bcc %+d", (s8)op1); break; case (0x0d): sprintf(t, "bcs %+d", (s8)op1); break; case (0x0e): sprintf(t, "bvc %+d", (s8)op1); break; case (0x0f): sprintf(t, "bvs %+d", (s8)op1); break; case16(0x10): sprintf(t, "to r%u", op0 & 15); break; case16(0x20): sprintf(t, "with r%u", op0 & 15); break; case12(0x30): sprintf(t, "stw (r%u)", op0 & 15); break; case (0x3c): sprintf(t, "loop"); break; case (0x3d): sprintf(t, "alt1"); break; case (0x3e): sprintf(t, "alt2"); break; case (0x3f): sprintf(t, "alt3"); break; case12(0x40): sprintf(t, "ldw (r%u)", op0 & 15); break; case (0x4c): sprintf(t, "plot"); break; case (0x4d): sprintf(t, "swap"); break; case (0x4e): sprintf(t, "color"); break; case (0x4f): sprintf(t, "not"); break; case16(0x50): sprintf(t, "add #%u", op0 & 15); break; case16(0x60): sprintf(t, "sub #%u", op0 & 15); break; case (0x70): sprintf(t, "merge"); break; case15(0x71): sprintf(t, "and #%u", op0 & 15); break; case16(0x80): sprintf(t, "mult #%u", op0 & 15); break; case (0x90): sprintf(t, "sbk"); break; case4 (0x91): sprintf(t, "link #%u", op0 & 15); break; case (0x95): sprintf(t, "sex"); break; case (0x96): sprintf(t, "asr"); break; case (0x97): sprintf(t, "ror"); break; case6 (0x98): sprintf(t, "jmp r%u", op0 & 15); break; case (0x9e): sprintf(t, "lob"); break; case (0x9f): sprintf(t, "fmult"); break; case16(0xa0): sprintf(t, "sms r%u,(#$%.4x)", op0 & 15, op1 << 1); break; case16(0xb0): sprintf(t, "from r%u", op0 & 15); break; case (0xc0): sprintf(t, "hib"); break; case15(0xc1): sprintf(t, "or #%u", op0 & 15); break; case15(0xd0): sprintf(t, "inc r%u", op0 & 15); break; case (0xdf): sprintf(t, "ramb"); break; case15(0xe0): sprintf(t, "dec r%u", op0 & 15); break; case (0xef): sprintf(t, "getbl"); break; case16(0xf0): sprintf(t, "sm r%u", op0 & 15); break; } strcat(output, t); } auto GSU::disassembleALT3(char* output) -> void { char t[256] = ""; switch(op0) { case (0x00): sprintf(t, "stop"); break; case (0x01): sprintf(t, "nop"); break; case (0x02): sprintf(t, "cache"); break; case (0x03): sprintf(t, "lsr"); break; case (0x04): sprintf(t, "rol"); break; case (0x05): sprintf(t, "bra %+d", (s8)op1); break; case (0x06): sprintf(t, "blt %+d", (s8)op1); break; case (0x07): sprintf(t, "bge %+d", (s8)op1); break; case (0x08): sprintf(t, "bne %+d", (s8)op1); break; case (0x09): sprintf(t, "beq %+d", (s8)op1); break; case (0x0a): sprintf(t, "bpl %+d", (s8)op1); break; case (0x0b): sprintf(t, "bmi %+d", (s8)op1); break; case (0x0c): sprintf(t, "bcc %+d", (s8)op1); break; case (0x0d): sprintf(t, "bcs %+d", (s8)op1); break; case (0x0e): sprintf(t, "bvc %+d", (s8)op1); break; case (0x0f): sprintf(t, "bvs %+d", (s8)op1); break; case16(0x10): sprintf(t, "to r%u", op0 & 15); break; case16(0x20): sprintf(t, "with r%u", op0 & 15); break; case12(0x30): sprintf(t, "stb (r%u)", op0 & 15); break; case (0x3c): sprintf(t, "loop"); break; case (0x3d): sprintf(t, "alt1"); break; case (0x3e): sprintf(t, "alt2"); break; case (0x3f): sprintf(t, "alt3"); break; case12(0x40): sprintf(t, "ldb (r%u)", op0 & 15); break; case (0x4c): sprintf(t, "rpix"); break; case (0x4d): sprintf(t, "swap"); break; case (0x4e): sprintf(t, "cmode"); break; case (0x4f): sprintf(t, "not"); break; case16(0x50): sprintf(t, "adc #%u", op0 & 15); break; case16(0x60): sprintf(t, "cmp r%u", op0 & 15); break; case (0x70): sprintf(t, "merge"); break; case15(0x71): sprintf(t, "bic #%u", op0 & 15); break; case16(0x80): sprintf(t, "umult #%u", op0 & 15); break; case (0x90): sprintf(t, "sbk"); break; case4 (0x91): sprintf(t, "link #%u", op0 & 15); break; case (0x95): sprintf(t, "sex"); break; case (0x96): sprintf(t, "div2"); break; case (0x97): sprintf(t, "ror"); break; case6 (0x98): sprintf(t, "ljmp r%u", op0 & 15); break; case (0x9e): sprintf(t, "lob"); break; case (0x9f): sprintf(t, "lmult"); break; case16(0xa0): sprintf(t, "lms r%u", op0 & 15); break; case16(0xb0): sprintf(t, "from r%u", op0 & 15); break; case (0xc0): sprintf(t, "hib"); break; case15(0xc1): sprintf(t, "xor #%u", op0 & 15); break; case15(0xd0): sprintf(t, "inc r%u", op0 & 15); break; case (0xdf): sprintf(t, "romb"); break; case15(0xe0): sprintf(t, "dec r%u", op0 & 15); break; case (0xef): sprintf(t, "getbs"); break; case16(0xf0): sprintf(t, "lm r%u", op0 & 15); break; } strcat(output, t); } #undef case4 #undef case6 #undef case12 #undef case15 #undef case16 #undef op0 #undef op1 #undef op2 ares-126/ares/component/processor/gsu/gsu.cpp000066400000000000000000000016401415063341600213750ustar00rootroot00000000000000#include #include "gsu.hpp" //note: multiplication results *may* sometimes be invalid when both CLSR and MS0 are set //the product of multiplication in this mode (21mhz + fast-multiply) has not been analyzed; //however, the timing of this mode has been confirmed to work as specified below namespace ares { #include "instruction.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto GSU::power() -> void { for(auto& r : regs.r) { r.data = 0x0000; r.modified = false; } regs.sfr = 0x0000; regs.pbr = 0x00; regs.rombr = 0x00; regs.rambr = 0; regs.cbr = 0x0000; regs.scbr = 0x00; regs.scmr = 0x00; regs.colr = 0x00; regs.por = 0x00; regs.bramr = 0; regs.vcr = 0x04; regs.cfgr = 0x00; regs.clsr = 0; regs.pipeline = 0x01; //nop regs.ramaddr = 0x0000; regs.reset(); } } ares-126/ares/component/processor/gsu/gsu.hpp000066400000000000000000000053351415063341600214070ustar00rootroot00000000000000#pragma once namespace ares { struct GSU { #include "registers.hpp" virtual auto step(u32 clocks) -> void = 0; virtual auto stop() -> void = 0; virtual auto color(n8 source) -> n8 = 0; virtual auto plot(n8 x, n8 y) -> void = 0; virtual auto rpix(n8 x, n8 y) -> n8 = 0; virtual auto pipe() -> n8 = 0; virtual auto syncROMBuffer() -> void = 0; virtual auto readROMBuffer() -> n8 = 0; virtual auto syncRAMBuffer() -> void = 0; virtual auto readRAMBuffer(n16 address) -> n8 = 0; virtual auto writeRAMBuffer(n16 address, n8 data) -> void = 0; virtual auto flushCache() -> void = 0; virtual auto read(n24 address, n8 data = 0x00) -> n8 = 0; virtual auto write(n24 address, n8 data) -> void = 0; //gsu.cpp auto power() -> void; //instructions.cpp auto instructionADD_ADC(u32 n) -> void; auto instructionALT1() -> void; auto instructionALT2() -> void; auto instructionALT3() -> void; auto instructionAND_BIC(u32 n) -> void; auto instructionASR_DIV2() -> void; auto instructionBranch(bool c) -> void; auto instructionCACHE() -> void; auto instructionCOLOR_CMODE() -> void; auto instructionDEC(u32 n) -> void; auto instructionFMULT_LMULT() -> void; auto instructionFROM_MOVES(u32 n) -> void; auto instructionGETB() -> void; auto instructionGETC_RAMB_ROMB() -> void; auto instructionHIB() -> void; auto instructionIBT_LMS_SMS(u32 n) -> void; auto instructionINC(u32 n) -> void; auto instructionIWT_LM_SM(u32 n) -> void; auto instructionJMP_LJMP(u32 n) -> void; auto instructionLINK(u32 n) -> void; auto instructionLoad(u32 n) -> void; auto instructionLOB() -> void; auto instructionLOOP() -> void; auto instructionLSR() -> void; auto instructionMERGE() -> void; auto instructionMULT_UMULT(u32 n) -> void; auto instructionNOP() -> void; auto instructionNOT() -> void; auto instructionOR_XOR(u32 n) -> void; auto instructionPLOT_RPIX() -> void; auto instructionROL() -> void; auto instructionROR() -> void; auto instructionSBK() -> void; auto instructionSEX() -> void; auto instructionStore(u32 n) -> void; auto instructionSTOP() -> void; auto instructionSUB_SBC_CMP(u32 n) -> void; auto instructionSWAP() -> void; auto instructionTO_MOVE(u32 n) -> void; auto instructionWITH(u32 n) -> void; //switch.cpp auto instruction(n8 opcode) -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp noinline auto disassembleInstruction() -> string; noinline auto disassembleContext() -> string; auto disassembleOpcode(char* output) -> void; auto disassembleALT0(char* output) -> void; auto disassembleALT1(char* output) -> void; auto disassembleALT2(char* output) -> void; auto disassembleALT3(char* output) -> void; }; } ares-126/ares/component/processor/gsu/instruction.cpp000066400000000000000000000051671415063341600231700ustar00rootroot00000000000000auto GSU::instruction(n8 opcode) -> void { #define op(id, name, ...) \ case id: return instruction##name(__VA_ARGS__); \ #define op4(id, name) \ case id+ 0: return instruction##name((n4)opcode); \ case id+ 1: return instruction##name((n4)opcode); \ case id+ 2: return instruction##name((n4)opcode); \ case id+ 3: return instruction##name((n4)opcode); \ #define op6(id, name) \ op4(id, name) \ case id+ 4: return instruction##name((n4)opcode); \ case id+ 5: return instruction##name((n4)opcode); \ #define op12(id, name) \ op6(id, name) \ case id+ 6: return instruction##name((n4)opcode); \ case id+ 7: return instruction##name((n4)opcode); \ case id+ 8: return instruction##name((n4)opcode); \ case id+ 9: return instruction##name((n4)opcode); \ case id+10: return instruction##name((n4)opcode); \ case id+11: return instruction##name((n4)opcode); \ #define op15(id, name) \ op12(id, name) \ case id+12: return instruction##name((n4)opcode); \ case id+13: return instruction##name((n4)opcode); \ case id+14: return instruction##name((n4)opcode); \ #define op16(id, name) \ op15(id, name) \ case id+15: return instruction##name((n4)opcode); \ switch(opcode) { op (0x00, STOP) op (0x01, NOP) op (0x02, CACHE) op (0x03, LSR) op (0x04, ROL) op (0x05, Branch, 1) //bra op (0x06, Branch, (regs.sfr.s ^ regs.sfr.ov) == 0) //blt op (0x07, Branch, (regs.sfr.s ^ regs.sfr.ov) == 1) //bge op (0x08, Branch, regs.sfr.z == 0) //bne op (0x09, Branch, regs.sfr.z == 1) //beq op (0x0a, Branch, regs.sfr.s == 0) //bpl op (0x0b, Branch, regs.sfr.s == 1) //bmi op (0x0c, Branch, regs.sfr.cy == 0) //bcc op (0x0d, Branch, regs.sfr.cy == 1) //bcs op (0x0e, Branch, regs.sfr.ov == 0) //bvc op (0x0f, Branch, regs.sfr.ov == 1) //bvs op16(0x10, TO_MOVE) op16(0x20, WITH) op12(0x30, Store) op (0x3c, LOOP) op (0x3d, ALT1) op (0x3e, ALT2) op (0x3f, ALT3) op12(0x40, Load) op (0x4c, PLOT_RPIX) op (0x4d, SWAP) op (0x4e, COLOR_CMODE) op (0x4f, NOT) op16(0x50, ADD_ADC) op16(0x60, SUB_SBC_CMP) op (0x70, MERGE) op15(0x71, AND_BIC) op16(0x80, MULT_UMULT) op (0x90, SBK) op4 (0x91, LINK) op (0x95, SEX) op (0x96, ASR_DIV2) op (0x97, ROR) op6 (0x98, JMP_LJMP) op (0x9e, LOB) op (0x9f, FMULT_LMULT) op16(0xa0, IBT_LMS_SMS) op16(0xb0, FROM_MOVES) op (0xc0, HIB) op15(0xc1, OR_XOR) op15(0xd0, INC) op (0xdf, GETC_RAMB_ROMB) op15(0xe0, DEC) op (0xef, GETB) op16(0xf0, IWT_LM_SM) } #undef op #undef op4 #undef op6 #undef op12 #undef op15 #undef op16 } ares-126/ares/component/processor/gsu/instructions.cpp000066400000000000000000000234131415063341600233450ustar00rootroot00000000000000//$00 stop auto GSU::instructionSTOP() -> void { if(regs.cfgr.irq == 0) { regs.sfr.irq = 1; stop(); } regs.sfr.g = 0; regs.pipeline = 0x01; //nop regs.reset(); } //$01 nop auto GSU::instructionNOP() -> void { regs.reset(); } //$02 cache auto GSU::instructionCACHE() -> void { if(regs.cbr != (regs.r[15] & 0xfff0)) { regs.cbr = regs.r[15] & 0xfff0; flushCache(); } regs.reset(); } //$03 lsr auto GSU::instructionLSR() -> void { regs.sfr.cy = (regs.sr() & 1); regs.dr() = regs.sr() >> 1; regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$04 rol auto GSU::instructionROL() -> void { bool carry = (regs.sr() & 0x8000); regs.dr() = (regs.sr() << 1) | regs.sfr.cy; regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.cy = carry; regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$05 bra e //$06 blt e //$07 bge e //$08 bne e //$09 beq e //$0a bpl e //$0b bmi e //$0c bcc e //$0d bcs e //$0e bvc e //$0f bvs e auto GSU::instructionBranch(bool take) -> void { auto displacement = (i8)pipe(); if(take) regs.r[15] += displacement; } //$10-1f(b0) to rN //$10-1f(b1) move rN auto GSU::instructionTO_MOVE(u32 n) -> void { if(!regs.sfr.b) { regs.dreg = n; } else { regs.r[n] = regs.sr(); regs.reset(); } } //$20-2f with rN auto GSU::instructionWITH(u32 n) -> void { regs.sreg = n; regs.dreg = n; regs.sfr.b = 1; } //$30-3b(alt0) stw (rN) //$30-3b(alt1) stb (rN) auto GSU::instructionStore(u32 n) -> void { regs.ramaddr = regs.r[n]; writeRAMBuffer(regs.ramaddr, regs.sr()); if(!regs.sfr.alt1) writeRAMBuffer(regs.ramaddr ^ 1, regs.sr() >> 8); regs.reset(); } //$3c loop auto GSU::instructionLOOP() -> void { regs.r[12]--; regs.sfr.s = (regs.r[12] & 0x8000); regs.sfr.z = (regs.r[12] == 0); if(!regs.sfr.z) regs.r[15] = regs.r[13]; regs.reset(); } //$3d alt1 auto GSU::instructionALT1() -> void { regs.sfr.b = 0; regs.sfr.alt1 = 1; } //$3e alt2 auto GSU::instructionALT2() -> void { regs.sfr.b = 0; regs.sfr.alt2 = 1; } //$3f alt3 auto GSU::instructionALT3() -> void { regs.sfr.b = 0; regs.sfr.alt1 = 1; regs.sfr.alt2 = 1; } //$40-4b(alt0) ldw (rN) //$40-4b(alt1) ldb (rN) auto GSU::instructionLoad(u32 n) -> void { regs.ramaddr = regs.r[n]; regs.dr() = readRAMBuffer(regs.ramaddr); if(!regs.sfr.alt1) regs.dr() |= readRAMBuffer(regs.ramaddr ^ 1) << 8; regs.reset(); } //$4c(alt0) plot //$4c(alt1) rpix auto GSU::instructionPLOT_RPIX() -> void { if(!regs.sfr.alt1) { plot(regs.r[1], regs.r[2]); regs.r[1]++; } else { regs.dr() = rpix(regs.r[1], regs.r[2]); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); } regs.reset(); } //$4d swap auto GSU::instructionSWAP() -> void { regs.dr() = regs.sr() >> 8 | regs.sr() << 8; regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$4e(alt0) color //$4e(alt1) cmode auto GSU::instructionCOLOR_CMODE() -> void { if(!regs.sfr.alt1) { regs.colr = color(regs.sr()); } else { regs.por = regs.sr(); } regs.reset(); } //$4f not auto GSU::instructionNOT() -> void { regs.dr() = ~regs.sr(); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$50-5f(alt0) add rN //$50-5f(alt1) adc rN //$50-5f(alt2) add #N //$50-5f(alt3) adc #N auto GSU::instructionADD_ADC(u32 n) -> void { if(!regs.sfr.alt2) n = regs.r[n]; s32 r = regs.sr() + n + (regs.sfr.alt1 ? regs.sfr.cy : 0); regs.sfr.ov = ~(regs.sr() ^ n) & (n ^ r) & 0x8000; regs.sfr.s = (r & 0x8000); regs.sfr.cy = (r >= 0x10000); regs.sfr.z = ((n16)r == 0); regs.dr() = r; regs.reset(); } //$60-6f(alt0) sub rN //$60-6f(alt1) sbc rN //$60-6f(alt2) sub #N //$60-6f(alt3) cmp rN auto GSU::instructionSUB_SBC_CMP(u32 n) -> void { if(!regs.sfr.alt2 || regs.sfr.alt1) n = regs.r[n]; s32 r = regs.sr() - n - (!regs.sfr.alt2 && regs.sfr.alt1 ? !regs.sfr.cy : 0); regs.sfr.ov = (regs.sr() ^ n) & (regs.sr() ^ r) & 0x8000; regs.sfr.s = (r & 0x8000); regs.sfr.cy = (r >= 0); regs.sfr.z = ((n16)r == 0); if(!regs.sfr.alt2 || !regs.sfr.alt1) regs.dr() = r; regs.reset(); } //$70 merge auto GSU::instructionMERGE() -> void { regs.dr() = (regs.r[7] & 0xff00) | (regs.r[8] >> 8); regs.sfr.ov = (regs.dr() & 0xc0c0); regs.sfr.s = (regs.dr() & 0x8080); regs.sfr.cy = (regs.dr() & 0xe0e0); regs.sfr.z = (regs.dr() & 0xf0f0); regs.reset(); } //$71-7f(alt0) and rN //$71-7f(alt1) bic rN //$71-7f(alt2) and #N //$71-7f(alt3) bic #N auto GSU::instructionAND_BIC(u32 n) -> void { if(!regs.sfr.alt2) n = regs.r[n]; regs.dr() = regs.sr() & (regs.sfr.alt1 ? ~n : n); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$80-8f(alt0) mult rN //$80-8f(alt1) umult rN //$80-8f(alt2) mult #N //$80-8f(alt3) umult #N auto GSU::instructionMULT_UMULT(u32 n) -> void { if(!regs.sfr.alt2) n = regs.r[n]; regs.dr() = (!regs.sfr.alt1 ? n16((i8)regs.sr() * (i8)n) : n16((n8)regs.sr() * (n8)n)); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); if(!regs.cfgr.ms0) step(regs.clsr ? 1 : 2); } //$90 sbk auto GSU::instructionSBK() -> void { writeRAMBuffer(regs.ramaddr ^ 0, regs.sr() >> 0); writeRAMBuffer(regs.ramaddr ^ 1, regs.sr() >> 8); regs.reset(); } //$91-94 link #N auto GSU::instructionLINK(u32 n) -> void { regs.r[11] = regs.r[15] + n; regs.reset(); } //$95 sex auto GSU::instructionSEX() -> void { regs.dr() = (i8)regs.sr(); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$96(alt0) asr //$96(alt1) div2 auto GSU::instructionASR_DIV2() -> void { regs.sfr.cy = (regs.sr() & 1); regs.dr() = ((i16)regs.sr() >> 1) + (regs.sfr.alt1 ? ((regs.sr() + 1) >> 16) : 0); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$97 ror auto GSU::instructionROR() -> void { bool carry = (regs.sr() & 1); regs.dr() = (regs.sfr.cy << 15) | (regs.sr() >> 1); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.cy = carry; regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$98-9d(alt0) jmp rN //$98-9d(alt1) ljmp rN auto GSU::instructionJMP_LJMP(u32 n) -> void { if(!regs.sfr.alt1) { regs.r[15] = regs.r[n]; } else { regs.pbr = regs.r[n] & 0x7f; regs.r[15] = regs.sr(); regs.cbr = regs.r[15] & 0xfff0; flushCache(); } regs.reset(); } //$9e lob auto GSU::instructionLOB() -> void { regs.dr() = regs.sr() & 0xff; regs.sfr.s = (regs.dr() & 0x80); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$9f(alt0) fmult //$9f(alt1) lmult auto GSU::instructionFMULT_LMULT() -> void { n32 result = (i16)regs.sr() * (i16)regs.r[6]; if(regs.sfr.alt1) regs.r[4] = result; regs.dr() = result >> 16; regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.cy = (result & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); step((regs.cfgr.ms0 ? 3 : 7) * (regs.clsr ? 1 : 2)); } //$a0-af(alt0) ibt rN,#pp //$a0-af(alt1) lms rN,(yy) //$a0-af(alt2) sms (yy),rN auto GSU::instructionIBT_LMS_SMS(u32 n) -> void { if(regs.sfr.alt1) { regs.ramaddr = pipe() << 1; n8 lo = readRAMBuffer(regs.ramaddr ^ 0) << 0; regs.r[n] = readRAMBuffer(regs.ramaddr ^ 1) << 8 | lo; } else if(regs.sfr.alt2) { regs.ramaddr = pipe() << 1; writeRAMBuffer(regs.ramaddr ^ 0, regs.r[n] >> 0); writeRAMBuffer(regs.ramaddr ^ 1, regs.r[n] >> 8); } else { regs.r[n] = (i8)pipe(); } regs.reset(); } //$b0-bf(b0) from rN //$b0-bf(b1) moves rN auto GSU::instructionFROM_MOVES(u32 n) -> void { if(!regs.sfr.b) { regs.sreg = n; } else { regs.dr() = regs.r[n]; regs.sfr.ov = (regs.dr() & 0x80); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } } //$c0 hib auto GSU::instructionHIB() -> void { regs.dr() = regs.sr() >> 8; regs.sfr.s = (regs.dr() & 0x80); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$c1-cf(alt0) or rN //$c1-cf(alt1) xor rN //$c1-cf(alt2) or #N //$c1-cf(alt3) xor #N auto GSU::instructionOR_XOR(u32 n) -> void { if(!regs.sfr.alt2) n = regs.r[n]; regs.dr() = (!regs.sfr.alt1 ? (regs.sr() | n) : (regs.sr() ^ n)); regs.sfr.s = (regs.dr() & 0x8000); regs.sfr.z = (regs.dr() == 0); regs.reset(); } //$d0-de inc rN auto GSU::instructionINC(u32 n) -> void { regs.r[n]++; regs.sfr.s = (regs.r[n] & 0x8000); regs.sfr.z = (regs.r[n] == 0); regs.reset(); } //$df(alt0) getc //$df(alt2) ramb //$df(alt3) romb auto GSU::instructionGETC_RAMB_ROMB() -> void { if(!regs.sfr.alt2) { regs.colr = color(readROMBuffer()); } else if(!regs.sfr.alt1) { syncRAMBuffer(); regs.rambr = regs.sr() & 0x01; } else { syncROMBuffer(); regs.rombr = regs.sr() & 0x7f; } regs.reset(); } //$e0-ee dec rN auto GSU::instructionDEC(u32 n) -> void { regs.r[n]--; regs.sfr.s = (regs.r[n] & 0x8000); regs.sfr.z = (regs.r[n] == 0); regs.reset(); } //$ef(alt0) getb //$ef(alt1) getbh //$ef(alt2) getbl //$ef(alt3) getbs auto GSU::instructionGETB() -> void { switch(regs.sfr.alt2 << 1 | regs.sfr.alt1 << 0) { case 0: regs.dr() = readROMBuffer(); break; case 1: regs.dr() = readROMBuffer() << 8 | (n8)regs.sr(); break; case 2: regs.dr() = (regs.sr() & 0xff00) | readROMBuffer(); break; case 3: regs.dr() = (i8)readROMBuffer(); break; } regs.reset(); } //$f0-ff(alt0) iwt rN,#xx //$f0-ff(alt1) lm rN,(xx) //$f0-ff(alt2) sm (xx),rN auto GSU::instructionIWT_LM_SM(u32 n) -> void { if(regs.sfr.alt1) { regs.ramaddr = pipe() << 0; regs.ramaddr |= pipe() << 8; n8 lo = readRAMBuffer(regs.ramaddr ^ 0) << 0; regs.r[n] = readRAMBuffer(regs.ramaddr ^ 1) << 8 | lo; } else if(regs.sfr.alt2) { regs.ramaddr = pipe() << 0; regs.ramaddr |= pipe() << 8; writeRAMBuffer(regs.ramaddr ^ 0, regs.r[n] >> 0); writeRAMBuffer(regs.ramaddr ^ 1, regs.r[n] >> 8); } else { n8 lo = pipe(); regs.r[n] = pipe() << 8 | lo; } regs.reset(); } ares-126/ares/component/processor/gsu/registers.hpp000066400000000000000000000104551415063341600226170ustar00rootroot00000000000000struct Register { n16 data = 0; bool modified = false; operator u32() const { return data; } auto assign(u32 value) -> n16 { modified = true; return data = value; } auto operator++() { return assign(data + 1); } auto operator--() { return assign(data - 1); } auto operator++(s32) { u32 r = data; assign(data + 1); return r; } auto operator--(s32) { u32 r = data; assign(data - 1); return r; } auto operator = (u32 i) { return assign(i); } auto operator |= (u32 i) { return assign(data | i); } auto operator ^= (u32 i) { return assign(data ^ i); } auto operator &= (u32 i) { return assign(data & i); } auto operator <<= (u32 i) { return assign(data << i); } auto operator >>= (u32 i) { return assign(data >> i); } auto operator += (u32 i) { return assign(data + i); } auto operator -= (u32 i) { return assign(data - i); } auto operator *= (u32 i) { return assign(data * i); } auto operator /= (u32 i) { return assign(data / i); } auto operator %= (u32 i) { return assign(data % i); } auto operator = (const Register& value) { return assign(value); } Register() = default; Register(const Register&) = delete; }; struct SFR { n16 data; BitField<16, 1> z {&data}; //zero flag BitField<16, 2> cy {&data}; //carry flag BitField<16, 3> s {&data}; //sign flag BitField<16, 4> ov {&data}; //overflow flag BitField<16, 5> g {&data}; //go flag BitField<16, 6> r {&data}; //ROM r14 flag BitField<16, 8> alt1{&data}; //alt1 instruction mode BitField<16, 9> alt2{&data}; //alt2 instruction mode BitField<16,10> il {&data}; //immediate lower 8-bit flag BitField<16,11> ih {&data}; //immediate upper 8-bit flag BitField<16,12> b {&data}; //with flag BitField<16,15> irq {&data}; //interrupt flag BitRange<16,8,9> alt{&data}; //composite instruction mode SFR() = default; SFR(const SFR&) = delete; auto operator=(const SFR&) = delete; operator u32() const { return data & 0x9f7e; } auto& operator=(const u32 value) { return data = value, *this; } }; struct SCMR { u32 ht; bool ron; bool ran; u32 md; operator u32() const { return ((ht >> 1) << 5) | (ron << 4) | (ran << 3) | ((ht & 1) << 2) | (md); } auto& operator=(u32 data) { ht = (bool)(data & 0x20) << 1; ht |= (bool)(data & 0x04) << 0; ron = data & 0x10; ran = data & 0x08; md = data & 0x03; return *this; } }; struct POR { bool obj; bool freezehigh; bool highnibble; bool dither; bool transparent; operator u32() const { return (obj << 4) | (freezehigh << 3) | (highnibble << 2) | (dither << 1) | (transparent); } auto& operator=(u32 data) { obj = data & 0x10; freezehigh = data & 0x08; highnibble = data & 0x04; dither = data & 0x02; transparent = data & 0x01; return *this; } }; struct CFGR { bool irq; bool ms0; operator u32() const { return (irq << 7) | (ms0 << 5); } auto& operator=(u32 data) { irq = data & 0x80; ms0 = data & 0x20; return *this; } }; struct Registers { n8 pipeline; n16 ramaddr; Register r[16]; //general purpose registers SFR sfr; //status flag register n8 pbr; //program bank register n8 rombr; //game pack ROM bank register bool rambr; //game pack RAM bank register n16 cbr; //cache base register n8 scbr; //screen base register SCMR scmr; //screen mode register n8 colr; //color register POR por; //plot option register bool bramr; //back-up RAM register n8 vcr; //version code register CFGR cfgr; //config register bool clsr; //clock select register u32 romcl; //clock ticks until romdr is valid n8 romdr; //ROM buffer data register u32 ramcl; //clock ticks until ramdr is valid n16 ramar; //RAM buffer address register n8 ramdr; //RAM buffer data register u32 sreg; u32 dreg; auto& sr() { return r[sreg]; } //source register (from) auto& dr() { return r[dreg]; } //destination register (to) auto reset() -> void { sfr.b = 0; sfr.alt1 = 0; sfr.alt2 = 0; sreg = 0; dreg = 0; } } regs; struct Cache { n8 buffer[512]; bool valid[32]; } cache; struct PixelCache { n16 offset; n8 bitpend; n8 data[8]; } pixelcache[2]; ares-126/ares/component/processor/gsu/serialization.cpp000066400000000000000000000015241415063341600234550ustar00rootroot00000000000000auto GSU::serialize(serializer& s) -> void { s(regs.pipeline); s(regs.ramaddr); for(u32 n : range(16)) { s(regs.r[n].data); s(regs.r[n].modified); } s(regs.sfr.data); s(regs.pbr); s(regs.rombr); s(regs.rambr); s(regs.cbr); s(regs.scbr); s(regs.scmr.ht); s(regs.scmr.ron); s(regs.scmr.ran); s(regs.scmr.md); s(regs.colr); s(regs.por.obj); s(regs.por.freezehigh); s(regs.por.highnibble); s(regs.por.dither); s(regs.por.transparent); s(regs.bramr); s(regs.vcr); s(regs.cfgr.irq); s(regs.cfgr.ms0); s(regs.clsr); s(regs.romcl); s(regs.romdr); s(regs.ramcl); s(regs.ramar); s(regs.ramdr); s(regs.sreg); s(regs.dreg); s(cache.buffer); s(cache.valid); for(u32 n : range(2)) { s(pixelcache[n].offset); s(pixelcache[n].bitpend); s(pixelcache[n].data); } } ares-126/ares/component/processor/hg51b/000077500000000000000000000000001415063341600202025ustar00rootroot00000000000000ares-126/ares/component/processor/hg51b/disassembler.cpp000066400000000000000000000111351415063341600233640ustar00rootroot00000000000000auto HG51B::disassembleInstruction(maybe _pb, maybe _pc) -> string { n15 pb = _pb ? *_pb : (n15)r.pb; n8 pc = _pc ? *_pc : (n8 )r.pc; return {}; //todo } auto HG51B::disassembleADD(n7 reg, n5 shift) -> string { return {"add "}; } auto HG51B::disassembleADD(n8 imm, n5 shift) -> string { return {"add "}; } auto HG51B::disassembleAND(n7 reg, n5 shift) -> string { return {"and "}; } auto HG51B::disassembleAND(n8 imm, n5 shift) -> string { return {"and "}; } auto HG51B::disassembleASR(n7 reg) -> string { return {"asr "}; } auto HG51B::disassembleASR(n5 imm) -> string { return {"imm "}; } auto HG51B::disassembleCLEAR() -> string { return {"clear "}; } auto HG51B::disassembleCMP(n7 reg, n5 shift) -> string { return {"cmp "}; } auto HG51B::disassembleCMP(n8 imm, n5 shift) -> string { return {"cmp "}; } auto HG51B::disassembleCMPR(n7 reg, n5 shift) -> string { return {"cmpr "}; } auto HG51B::disassembleCMPR(n8 imm, n5 shift) -> string { return {"cmpr "}; } auto HG51B::disassembleHALT() -> string { return {"halt "}; } auto HG51B::disassembleINC(n24& reg) -> string { return {"inc "}; } auto HG51B::disassembleJMP(n8 data, n1 far, const n1& take) -> string { return {"jmp "}; } auto HG51B::disassembleJSR(n8 data, n1 far, const n1& take) -> string { return {"jsr "}; } auto HG51B::disassembleLD(n24& out, n7 reg) -> string { return {"ld "}; } auto HG51B::disassembleLD(n15& out, n4 reg) -> string { return {"ld "}; } auto HG51B::disassembleLD(n24& out, n8 imm) -> string { return {"ld "}; } auto HG51B::disassembleLD(n15& out, n8 imm) -> string { return {"ld "}; } auto HG51B::disassembleLDL(n15& out, n8 imm) -> string { return {"ldl "}; } auto HG51B::disassembleLDH(n15& out, n7 imm) -> string { return {"ldh "}; } auto HG51B::disassembleMUL(n7 reg) -> string { return {"mul "}; } auto HG51B::disassembleMUL(n8 imm) -> string { return {"mul "}; } auto HG51B::disassembleNOP() -> string { return {"nop "}; } auto HG51B::disassembleOR(n7 reg, n5 shift) -> string { return {"or "}; } auto HG51B::disassembleOR(n8 imm, n5 shift) -> string { return {"or "}; } auto HG51B::disassembleRDRAM(n2 byte, n24& a) -> string { return {"rdram "}; } auto HG51B::disassembleRDRAM(n2 byte, n8 imm) -> string { return {"rdram "}; } auto HG51B::disassembleRDROM(n24& reg) -> string { return {"rdrom "}; } auto HG51B::disassembleRDROM(n10 imm) -> string { return {"rdrom "}; } auto HG51B::disassembleROR(n7 reg) -> string { return {"ror "}; } auto HG51B::disassembleROR(n5 imm) -> string { return {"ror "}; } auto HG51B::disassembleRTS() -> string { return {"rts "}; } auto HG51B::disassembleSHL(n7 reg) -> string { return {"shl "}; } auto HG51B::disassembleSHL(n5 imm) -> string { return {"shl "}; } auto HG51B::disassembleSHR(n7 reg) -> string { return {"shr "}; } auto HG51B::disassembleSHR(n5 imm) -> string { return {"shr "}; } auto HG51B::disassembleSKIP(n1 take, const n1& flag) -> string { return {"skip "}; } auto HG51B::disassembleST(n7 reg, n24& in) -> string { return {"st "}; } auto HG51B::disassembleSUB(n7 reg, n5 shift) -> string { return {"sub "}; } auto HG51B::disassembleSUB(n8 imm, n5 shift) -> string { return {"sub "}; } auto HG51B::disassembleSUBR(n7 reg, n5 shift) -> string { return {"subr "}; } auto HG51B::disassembleSUBR(n8 imm, n5 shift) -> string { return {"subr "}; } auto HG51B::disassembleSWAP(n24& a, n4 reg) -> string { return {"swap "}; } auto HG51B::disassembleSXB() -> string { return {"sxb "}; } auto HG51B::disassembleSXW() -> string { return {"sxw "}; } auto HG51B::disassembleWAIT() -> string { return {"wait "}; } auto HG51B::disassembleWRRAM(n2 byte, n24& a) -> string { return {"wrram "}; } auto HG51B::disassembleWRRAM(n2 byte, n8 imm) -> string { return {"wrram "}; } auto HG51B::disassembleXNOR(n7 reg, n5 shift) -> string { return {"xnor "}; } auto HG51B::disassembleXNOR(n8 imm, n5 shift) -> string { return {"xnor "}; } auto HG51B::disassembleXOR(n7 reg, n5 shift) -> string { return {"xor "}; } auto HG51B::disassembleXOR(n8 imm, n5 shift) -> string { return {"xor "}; } auto HG51B::disassembleContext() -> string { string output; output.append("a:", hex(r.a, 6L), " "); output.append("p:", hex(r.p, 4L), " "); for(u32 n : range(16)) { output.append("r", n, ":", hex(r.gpr[n], 6L), " "); } output.append(r.n ? "N" : "n"); output.append(r.z ? "Z" : "z"); output.append(r.c ? "C" : "c"); output.append(r.v ? "V" : "v"); output.append(r.i ? "I" : "i"); return output; } ares-126/ares/component/processor/hg51b/hg51b.cpp000066400000000000000000000060701415063341600216170ustar00rootroot00000000000000#include #include "hg51b.hpp" namespace ares { #include "registers.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto HG51B::lock() -> void { io.lock = 1; } auto HG51B::halt() -> void { io.halt = 1; } auto HG51B::wait(n24 address) -> u32 { if(isROM(address)) return 1 + io.wait.rom; if(isRAM(address)) return 1 + io.wait.ram; return 1; } auto HG51B::main() -> void { if(io.lock) return step(1); if(io.suspend.enable) return suspend(); if(io.cache.enable) return cache(), void(); if(io.dma.enable) return dma(); if(io.halt) return step(1); return execute(); } auto HG51B::step(u32 clocks) -> void { if(io.bus.enable) { if(io.bus.pending > clocks) { io.bus.pending -= clocks; } else { io.bus.enable = 0; io.bus.pending = 0; if(io.bus.reading) io.bus.reading = 0, r.mdr = read(io.bus.address); if(io.bus.writing) io.bus.writing = 0, write(io.bus.address, r.mdr); } } } auto HG51B::execute() -> void { if(!cache()) return halt(); auto opcode = programRAM[io.cache.page][r.pc]; advance(); step(1); instructionTable[opcode](); } auto HG51B::advance() -> void { if(++r.pc == 0) { if(io.cache.page == 1) return halt(); io.cache.page = 1; if(io.cache.lock[io.cache.page]) return halt(); r.pb = r.p; if(!cache()) return halt(); } } auto HG51B::suspend() -> void { if(!io.suspend.duration) return step(1); //indefinite step(io.suspend.duration); io.suspend.duration = 0; io.suspend.enable = 0; } auto HG51B::cache() -> bool { n24 address = io.cache.base + r.pb * 512; //try to use the current page ... if(io.cache.address[io.cache.page] == address) return io.cache.enable = 0, true; //if it's not valid, try to use the other page ... io.cache.page ^= 1; if(io.cache.address[io.cache.page] == address) return io.cache.enable = 0, true; //if it's not valid, try to load into the other page ... if(io.cache.lock[io.cache.page]) io.cache.page ^= 1; //if it's locked, try to load into the first page ... if(io.cache.lock[io.cache.page]) return io.cache.enable = 0, false; io.cache.address[io.cache.page] = address; for(u32 offset : range(256)) { step(wait(address)); programRAM[io.cache.page][offset].byte(0) = read(address++); programRAM[io.cache.page][offset].byte(1) = read(address++); } return io.cache.enable = 0, true; } auto HG51B::dma() -> void { for(u32 offset : range(io.dma.length)) { n24 source = io.dma.source + offset; n24 target = io.dma.target + offset; if(isROM(source) && isROM(target)) return lock(); if(isRAM(source) && isRAM(target)) return lock(); step(wait(source)); auto data = read(source); step(wait(target)); write(target, data); } io.dma.enable = 0; } auto HG51B::running() const -> bool { return io.cache.enable || io.dma.enable || io.bus.pending || !io.halt; } auto HG51B::busy() const -> bool { return io.cache.enable || io.dma.enable || io.bus.pending; } auto HG51B::power() -> void { r = {}; io = {}; } } ares-126/ares/component/processor/hg51b/hg51b.hpp000066400000000000000000000175231415063341600216310ustar00rootroot00000000000000#pragma once //Hitachi HG51B S169 namespace ares { struct HG51B { //instruction.cpp HG51B(); //hg51b.cpp virtual auto step(u32 clocks) -> void; virtual auto isROM(n24 address) -> bool = 0; virtual auto isRAM(n24 address) -> bool = 0; virtual auto read(n24 address) -> n8 = 0; virtual auto write(n24 address, n8 data) -> void = 0; virtual auto lock() -> void; virtual auto halt() -> void; auto wait(n24 address) -> u32; auto main() -> void; auto execute() -> void; auto advance() -> void; auto suspend() -> void; auto cache() -> bool; auto dma() -> void; auto running() const -> bool; auto busy() const -> bool; auto power() -> void; //instructions.cpp auto push() -> void; auto pull() -> void; auto algorithmADD(n24 x, n24 y) -> n24; auto algorithmAND(n24 x, n24 y) -> n24; auto algorithmASR(n24 a, n5 s) -> n24; auto algorithmMUL(i24 x, i24 y) -> n48; auto algorithmOR(n24 x, n24 y) -> n24; auto algorithmROR(n24 a, n5 s) -> n24; auto algorithmSHL(n24 a, n5 s) -> n24; auto algorithmSHR(n24 a, n5 s) -> n24; auto algorithmSUB(n24 x, n24 y) -> n24; auto algorithmSX(n24 x) -> n24; auto algorithmXNOR(n24 x, n24 y) -> n24; auto algorithmXOR(n24 x, n24 y) -> n24; auto instructionADD(n7 reg, n5 shift) -> void; auto instructionADD(n8 imm, n5 shift) -> void; auto instructionAND(n7 reg, n5 shift) -> void; auto instructionAND(n8 imm, n5 shift) -> void; auto instructionASR(n7 reg) -> void; auto instructionASR(n5 imm) -> void; auto instructionCLEAR() -> void; auto instructionCMP(n7 reg, n5 shift) -> void; auto instructionCMP(n8 imm, n5 shift) -> void; auto instructionCMPR(n7 reg, n5 shift) -> void; auto instructionCMPR(n8 imm, n5 shift) -> void; auto instructionHALT() -> void; auto instructionINC(n24& reg) -> void; auto instructionJMP(n8 data, n1 far, const n1& take) -> void; auto instructionJSR(n8 data, n1 far, const n1& take) -> void; auto instructionLD(n24& out, n7 reg) -> void; auto instructionLD(n15& out, n4 reg) -> void; auto instructionLD(n24& out, n8 imm) -> void; auto instructionLD(n15& out, n8 imm) -> void; auto instructionLDL(n15& out, n8 imm) -> void; auto instructionLDH(n15& out, n7 imm) -> void; auto instructionMUL(n7 reg) -> void; auto instructionMUL(n8 imm) -> void; auto instructionNOP() -> void; auto instructionOR(n7 reg, n5 shift) -> void; auto instructionOR(n8 imm, n5 shift) -> void; auto instructionRDRAM(n2 byte, n24& a) -> void; auto instructionRDRAM(n2 byte, n8 imm) -> void; auto instructionRDROM(n24& reg) -> void; auto instructionRDROM(n10 imm) -> void; auto instructionROR(n7 reg) -> void; auto instructionROR(n5 imm) -> void; auto instructionRTS() -> void; auto instructionSHL(n7 reg) -> void; auto instructionSHL(n5 imm) -> void; auto instructionSHR(n7 reg) -> void; auto instructionSHR(n5 imm) -> void; auto instructionSKIP(n1 take, const n1& flag) -> void; auto instructionST(n7 reg, n24& in) -> void; auto instructionSUB(n7 reg, n5 shift) -> void; auto instructionSUB(n8 imm, n5 shift) -> void; auto instructionSUBR(n7 reg, n5 shift) -> void; auto instructionSUBR(n8 imm, n5 shift) -> void; auto instructionSWAP(n24& a, n4 reg) -> void; auto instructionSXB() -> void; auto instructionSXW() -> void; auto instructionWAIT() -> void; auto instructionWRRAM(n2 byte, n24& a) -> void; auto instructionWRRAM(n2 byte, n8 imm) -> void; auto instructionXNOR(n7 reg, n5 shift) -> void; auto instructionXNOR(n8 imm, n5 shift) -> void; auto instructionXOR(n7 reg, n5 shift) -> void; auto instructionXOR(n8 imm, n5 shift) -> void; //serialization.cpp auto serialize(serializer&) -> void; n16 programRAM[2][256]; //instruction cache n24 dataROM[1024]; n8 dataRAM[3072]; //registers.cpp auto readRegister(n7 address) -> n24; auto writeRegister(n7 address, n24 data) -> void; //disassembler.cpp noinline auto disassembleInstruction(maybe pb = {}, maybe pc = {}) -> string; noinline auto disassembleContext() -> string; protected: struct Registers { n15 pb; //program bank n8 pc; //program counter b1 n; //negative b1 z; //zero b1 c; //carry b1 v; //overflow b1 i; //interrupt n24 a; //accumulator n15 p; //page register n48 mul; //multiplier n24 mdr; //bus memory data register n24 rom; //data ROM data buffer n24 ram; //data RAM data buffer n24 mar; //bus memory address register n24 dpr; //data RAM address pointer n24 gpr[16]; //general purpose registers } r; struct IO { n1 lock; n1 halt = 1; n1 irq; //0 = enable, 1 = disable n1 rom = 1; //0 = 2 ROMs, 1 = 1 ROM n8 vector[32]; struct Wait { n3 rom = 3; n3 ram = 3; } wait; struct Suspend { n1 enable; n8 duration; } suspend; struct Cache { n1 enable; n1 page; n1 lock[2]; n24 address[2]; //cache address is in bytes; so 24-bit n24 base; //base address is also in bytes n15 pb; n8 pc; } cache; struct DMA { n1 enable; n24 source; n24 target; n16 length; } dma; struct Bus { n1 enable; n1 reading; n1 writing; n4 pending; n24 address; } bus; } io; n23 stack[8]; function instructionTable[65536]; function disassembleTable[65536]; auto disassembleADD(n7 reg, n5 shift) -> string; auto disassembleADD(n8 imm, n5 shift) -> string; auto disassembleAND(n7 reg, n5 shift) -> string; auto disassembleAND(n8 imm, n5 shift) -> string; auto disassembleASR(n7 reg) -> string; auto disassembleASR(n5 imm) -> string; auto disassembleCLEAR() -> string; auto disassembleCMP(n7 reg, n5 shift) -> string; auto disassembleCMP(n8 imm, n5 shift) -> string; auto disassembleCMPR(n7 reg, n5 shift) -> string; auto disassembleCMPR(n8 imm, n5 shift) -> string; auto disassembleHALT() -> string; auto disassembleINC(n24& reg) -> string; auto disassembleJMP(n8 data, n1 far, const n1& take) -> string; auto disassembleJSR(n8 data, n1 far, const n1& take) -> string; auto disassembleLD(n24& out, n7 reg) -> string; auto disassembleLD(n15& out, n4 reg) -> string; auto disassembleLD(n24& out, n8 imm) -> string; auto disassembleLD(n15& out, n8 imm) -> string; auto disassembleLDL(n15& out, n8 imm) -> string; auto disassembleLDH(n15& out, n7 imm) -> string; auto disassembleMUL(n7 reg) -> string; auto disassembleMUL(n8 imm) -> string; auto disassembleNOP() -> string; auto disassembleOR(n7 reg, n5 shift) -> string; auto disassembleOR(n8 imm, n5 shift) -> string; auto disassembleRDRAM(n2 byte, n24& a) -> string; auto disassembleRDRAM(n2 byte, n8 imm) -> string; auto disassembleRDROM(n24& reg) -> string; auto disassembleRDROM(n10 imm) -> string; auto disassembleROR(n7 reg) -> string; auto disassembleROR(n5 imm) -> string; auto disassembleRTS() -> string; auto disassembleSHL(n7 reg) -> string; auto disassembleSHL(n5 imm) -> string; auto disassembleSHR(n7 reg) -> string; auto disassembleSHR(n5 imm) -> string; auto disassembleSKIP(n1 take, const n1& flag) -> string; auto disassembleST(n7 reg, n24& in) -> string; auto disassembleSUB(n7 reg, n5 shift) -> string; auto disassembleSUB(n8 imm, n5 shift) -> string; auto disassembleSUBR(n7 reg, n5 shift) -> string; auto disassembleSUBR(n8 imm, n5 shift) -> string; auto disassembleSWAP(n24& a, n4 reg) -> string; auto disassembleSXB() -> string; auto disassembleSXW() -> string; auto disassembleWAIT() -> string; auto disassembleWRRAM(n2 byte, n24& a) -> string; auto disassembleWRRAM(n2 byte, n8 imm) -> string; auto disassembleXNOR(n7 reg, n5 shift) -> string; auto disassembleXNOR(n8 imm, n5 shift) -> string; auto disassembleXOR(n7 reg, n5 shift) -> string; auto disassembleXOR(n8 imm, n5 shift) -> string; }; } ares-126/ares/component/processor/hg51b/instruction.cpp000066400000000000000000000400301415063341600232640ustar00rootroot00000000000000HG51B::HG51B() { #define bind(id, name, ...) { \ if(instructionTable[id]) throw; \ instructionTable[id] = [=] { return instruction##name(__VA_ARGS__); }; \ disassembleTable[id] = [=] { return disassemble##name(__VA_ARGS__); }; \ } #define pattern(s) \ std::integral_constant::value static const n5 shifts[] = {0, 1, 8, 16}; //NOP for(n10 null : range(1024)) { auto opcode = pattern("0000 00.. .... ...."); bind(opcode | null << 0, NOP); } //??? for(n10 null : range(1024)) { auto opcode = pattern("0000 01.. .... ...."); bind(opcode | null << 0, NOP); } //JMP imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0000 10f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JMP, data, far, 1); } //JMP EQ,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0000 11f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JMP, data, far, r.z); } //JMP GE,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0001 00f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JMP, data, far, r.c); } //JMP MI,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0001 01f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JMP, data, far, r.n); } //JMP VS,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0001 10f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JMP, data, far, r.v); } //WAIT for(n10 null : range(1024)) { auto opcode = pattern("0001 11.. .... ...."); bind(opcode | null << 0, WAIT); } //??? for(n10 null : range(1024)) { auto opcode = pattern("0010 00.. .... ...."); bind(opcode | null << 0, NOP); } //SKIP V for(n1 take : range( 2)) for(n7 null : range(128)) { auto opcode = pattern("0010 0100 .... ...t"); bind(opcode | take << 0 | null << 1, SKIP, take, r.v); } //SKIP C for(n1 take : range( 2)) for(n7 null : range(128)) { auto opcode = pattern("0010 0101 .... ...t"); bind(opcode | take << 0 | null << 1, SKIP, take, r.c); } //SKIP Z for(n1 take : range( 2)) for(n7 null : range(128)) { auto opcode = pattern("0010 0110 .... ...t"); bind(opcode | take << 0 | null << 1, SKIP, take, r.z); } //SKIP N for(n1 take : range( 2)) for(n7 null : range(128)) { auto opcode = pattern("0010 0111 .... ...t"); bind(opcode | take << 0 | null << 1, SKIP, take, r.n); } //JSR for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0010 10f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JSR, data, far, 1); } //JSR EQ,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0010 11f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JSR, data, far, r.z); } //JSR GE,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0011 00f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JSR, data, far, r.c); } //JSR MI,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0011 01f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JSR, data, far, r.n); } //JSR VS,imm for(n8 data : range(256)) for(n1 null : range( 2)) for(n1 far : range( 2)) { auto opcode = pattern("0011 10f. dddd dddd"); bind(opcode | data << 0 | null << 8 | far << 9, JSR, data, far, r.v); } //RTS for(n10 null : range(1024)) { auto opcode = pattern("0011 11.. .... ...."); bind(opcode | null << 0, RTS); } //INC MAR for(n10 null : range(1024)) { auto opcode = pattern("0100 00.. .... ...."); bind(opcode | null << 0, INC, r.mar); } //??? for(n10 null : range(1024)) { auto opcode = pattern("0100 01.. .... ...."); bind(opcode | null << 0, NOP); } //CMPR A< void { stack[7] = stack[6]; stack[6] = stack[5]; stack[5] = stack[4]; stack[4] = stack[3]; stack[3] = stack[2]; stack[2] = stack[1]; stack[1] = stack[0]; stack[0] = r.pb << 8 | r.pc << 0; } auto HG51B::pull() -> void { auto pc = stack[0]; stack[0] = stack[1]; stack[1] = stack[2]; stack[2] = stack[3]; stack[3] = stack[4]; stack[4] = stack[5]; stack[5] = stack[6]; stack[6] = stack[7]; stack[7] = 0x0000; r.pb = pc >> 8; r.pc = pc >> 0; } // auto HG51B::algorithmADD(n24 x, n24 y) -> n24 { s32 z = x + y; r.n = z & 0x800000; r.z = (n24)z == 0; r.c = z > 0xffffff; r.v = ~(x ^ y) & (x ^ z) & 0x800000; return z; } auto HG51B::algorithmAND(n24 x, n24 y) -> n24 { x = x & y; r.n = x & 0x800000; r.z = x == 0; return x; } auto HG51B::algorithmASR(n24 a, n5 s) -> n24 { if(s > 24) s = 0; a = (i24)a >> s; r.n = a & 0x800000; r.z = a == 0; return a; } auto HG51B::algorithmMUL(i24 x, i24 y) -> n48 { return (i48)x * (i48)y; } auto HG51B::algorithmOR(n24 x, n24 y) -> n24 { x = x | y; r.n = x & 0x800000; r.z = x == 0; return x; } auto HG51B::algorithmROR(n24 a, n5 s) -> n24 { if(s > 24) s = 0; a = (a >> s) | (a << 24 - s); r.n = a & 0x800000; r.z = a == 0; return a; } auto HG51B::algorithmSHL(n24 a, n5 s) -> n24 { if(s > 24) s = 0; a = a << s; r.n = a & 0x800000; r.z = a == 0; return a; } auto HG51B::algorithmSHR(n24 a, n5 s) -> n24 { if(s > 24) s = 0; a = a >> s; r.n = a & 0x800000; r.z = a == 0; return a; } auto HG51B::algorithmSUB(n24 x, n24 y) -> n24 { s32 z = x - y; r.n = z & 0x800000; r.z = (n24)z == 0; r.c = z >= 0; r.v = ~(x ^ y) & (x ^ z) & 0x800000; return z; } auto HG51B::algorithmSX(n24 x) -> n24 { r.n = x & 0x800000; r.z = x == 0; return x; } auto HG51B::algorithmXNOR(n24 x, n24 y) -> n24 { x = ~x ^ y; r.n = x & 0x800000; r.z = x == 0; return x; } auto HG51B::algorithmXOR(n24 x, n24 y) -> n24 { x = x ^ y; r.n = x & 0x800000; r.z = x == 0; return x; } // auto HG51B::instructionADD(n7 reg, n5 shift) -> void { r.a = algorithmADD(r.a << shift, readRegister(reg)); } auto HG51B::instructionADD(n8 imm, n5 shift) -> void { r.a = algorithmADD(r.a << shift, imm); } auto HG51B::instructionAND(n7 reg, n5 shift) -> void { r.a = algorithmAND(r.a << shift, readRegister(reg)); } auto HG51B::instructionAND(n8 imm, n5 shift) -> void { r.a = algorithmAND(r.a << shift, imm); } auto HG51B::instructionASR(n7 reg) -> void { r.a = algorithmASR(r.a, readRegister(reg)); } auto HG51B::instructionASR(n5 imm) -> void { r.a = algorithmASR(r.a, imm); } auto HG51B::instructionCLEAR() -> void { r.a = 0; r.p = 0; r.ram = 0; r.dpr = 0; } auto HG51B::instructionCMP(n7 reg, n5 shift) -> void { algorithmSUB(r.a << shift, readRegister(reg)); } auto HG51B::instructionCMP(n8 imm, n5 shift) -> void { algorithmSUB(r.a << shift, imm); } auto HG51B::instructionCMPR(n7 reg, n5 shift) -> void { algorithmSUB(readRegister(reg), r.a << shift); } auto HG51B::instructionCMPR(n8 imm, n5 shift) -> void { algorithmSUB(imm, r.a << shift); } auto HG51B::instructionHALT() -> void { halt(); } auto HG51B::instructionINC(n24& reg) -> void { reg++; } auto HG51B::instructionJMP(n8 data, n1 far, const n1& take) -> void { if(!take) return; if(far) r.pb = r.p; r.pc = data; step(2); } auto HG51B::instructionJSR(n8 data, n1 far, const n1& take) -> void { if(!take) return; push(); if(far) r.pb = r.p; r.pc = data; step(2); } auto HG51B::instructionLD(n24& out, n7 reg) -> void { out = readRegister(reg); } auto HG51B::instructionLD(n15& out, n4 reg) -> void { out = r.gpr[reg]; } auto HG51B::instructionLD(n24& out, n8 imm) -> void { out = imm; } auto HG51B::instructionLD(n15& out, n8 imm) -> void { out = imm; } auto HG51B::instructionLDL(n15& out, n8 imm) -> void { out.bit(0,7) = imm; } auto HG51B::instructionLDH(n15& out, n7 imm) -> void { out.bit(8,14) = imm; } auto HG51B::instructionMUL(n7 reg) -> void { r.mul = algorithmMUL(r.a, readRegister(reg)); } auto HG51B::instructionMUL(n8 imm) -> void { r.mul = algorithmMUL(r.a, imm); } auto HG51B::instructionNOP() -> void { } auto HG51B::instructionOR(n7 reg, n5 shift) -> void { r.a = algorithmOR(r.a << shift, readRegister(reg)); } auto HG51B::instructionOR(n8 imm, n5 shift) -> void { r.a = algorithmOR(r.a << shift, imm); } auto HG51B::instructionRDRAM(n2 byte, n24& a) -> void { n12 address = a; if(address >= 0xc00) address -= 0x400; r.ram.byte(byte) = dataRAM[address]; } auto HG51B::instructionRDRAM(n2 byte, n8 imm) -> void { n12 address = r.dpr + imm; if(address >= 0xc00) address -= 0x400; r.ram.byte(byte) = dataRAM[address]; } auto HG51B::instructionRDROM(n24& reg) -> void { r.rom = dataROM[(n10)reg]; } auto HG51B::instructionRDROM(n10 imm) -> void { r.rom = dataROM[imm]; } auto HG51B::instructionROR(n7 reg) -> void { r.a = algorithmROR(r.a, readRegister(reg)); } auto HG51B::instructionROR(n5 imm) -> void { r.a = algorithmROR(r.a, imm); } auto HG51B::instructionRTS() -> void { pull(); step(2); } auto HG51B::instructionSKIP(n1 take, const n1& flag) -> void { if(flag != take) return; advance(); step(1); } auto HG51B::instructionSHL(n7 reg) -> void { r.a = algorithmSHL(r.a, readRegister(reg)); } auto HG51B::instructionSHL(n5 imm) -> void { r.a = algorithmSHL(r.a, imm); } auto HG51B::instructionSHR(n7 reg) -> void { r.a = algorithmSHR(r.a, readRegister(reg)); } auto HG51B::instructionSHR(n5 imm) -> void { r.a = algorithmSHR(r.a, imm); } auto HG51B::instructionST(n7 reg, n24& in) -> void { writeRegister(reg, in); } auto HG51B::instructionSUB(n7 reg, n5 shift) -> void { r.a = algorithmSUB(r.a << shift, readRegister(reg)); } auto HG51B::instructionSUB(n8 imm, n5 shift) -> void { r.a = algorithmSUB(r.a << shift, imm); } auto HG51B::instructionSUBR(n7 reg, n5 shift) -> void { r.a = algorithmSUB(readRegister(reg), r.a << shift); } auto HG51B::instructionSUBR(n8 imm, n5 shift) -> void { r.a = algorithmSUB(imm, r.a << shift); } auto HG51B::instructionSWAP(n24& a, n4 reg) -> void { swap(a, r.gpr[reg]); } auto HG51B::instructionSXB() -> void { r.a = algorithmSX((i8)r.a); } auto HG51B::instructionSXW() -> void { r.a = algorithmSX((i16)r.a); } auto HG51B::instructionWAIT() -> void { if(!io.bus.enable) return; return step(io.bus.pending); } auto HG51B::instructionWRRAM(n2 byte, n24& a) -> void { n12 address = a; if(address >= 0xc00) address -= 0x400; switch(byte) { case 0: dataRAM[address] = r.ram >> 0; break; case 1: dataRAM[address] = r.ram >> 8; break; case 2: dataRAM[address] = r.ram >> 16; break; } } auto HG51B::instructionWRRAM(n2 byte, n8 imm) -> void { n12 address = r.dpr + imm; if(address >= 0xc00) address -= 0x400; switch(byte) { case 0: dataRAM[address] = r.ram >> 0; break; case 1: dataRAM[address] = r.ram >> 8; break; case 2: dataRAM[address] = r.ram >> 16; break; } } auto HG51B::instructionXNOR(n7 reg, n5 shift) -> void { r.a = algorithmXNOR(r.a << shift, readRegister(reg)); } auto HG51B::instructionXNOR(n8 imm, n5 shift) -> void { r.a = algorithmXNOR(r.a << shift, imm); } auto HG51B::instructionXOR(n7 reg, n5 shift) -> void { r.a = algorithmXOR(r.a << shift, readRegister(reg)); } auto HG51B::instructionXOR(n8 imm, n5 shift) -> void { r.a = algorithmXOR(r.a << shift, imm); } ares-126/ares/component/processor/hg51b/registers.cpp000066400000000000000000000064471415063341600227300ustar00rootroot00000000000000auto HG51B::readRegister(n7 address) -> n24 { switch(address) { case 0x01: return r.mul.bit(24,47); case 0x02: return r.mul.bit( 0,23); case 0x03: return r.mdr; case 0x08: return r.rom; case 0x0c: return r.ram; case 0x13: return r.mar; case 0x1c: return r.dpr; case 0x20: return r.pc; case 0x28: return r.p; case 0x2e: io.bus.enable = 1; io.bus.reading = 1; io.bus.pending = 1 + io.wait.rom; io.bus.address = r.mar; return 0x000000; case 0x2f: io.bus.enable = 1; io.bus.reading = 1; io.bus.pending = 1 + io.wait.ram; io.bus.address = r.mar; return 0x000000; //constant registers case 0x50: return 0x000000; case 0x51: return 0xffffff; case 0x52: return 0x00ff00; case 0x53: return 0xff0000; case 0x54: return 0x00ffff; case 0x55: return 0xffff00; case 0x56: return 0x800000; case 0x57: return 0x7fffff; case 0x58: return 0x008000; case 0x59: return 0x007fff; case 0x5a: return 0xff7fff; case 0x5b: return 0xffff7f; case 0x5c: return 0x010000; case 0x5d: return 0xfeffff; case 0x5e: return 0x000100; case 0x5f: return 0x00feff; //general purpose registers case 0x60: case 0x70: return r.gpr[ 0]; case 0x61: case 0x71: return r.gpr[ 1]; case 0x62: case 0x72: return r.gpr[ 2]; case 0x63: case 0x73: return r.gpr[ 3]; case 0x64: case 0x74: return r.gpr[ 4]; case 0x65: case 0x75: return r.gpr[ 5]; case 0x66: case 0x76: return r.gpr[ 6]; case 0x67: case 0x77: return r.gpr[ 7]; case 0x68: case 0x78: return r.gpr[ 8]; case 0x69: case 0x79: return r.gpr[ 9]; case 0x6a: case 0x7a: return r.gpr[10]; case 0x6b: case 0x7b: return r.gpr[11]; case 0x6c: case 0x7c: return r.gpr[12]; case 0x6d: case 0x7d: return r.gpr[13]; case 0x6e: case 0x7e: return r.gpr[14]; case 0x6f: case 0x7f: return r.gpr[15]; } return 0x000000; //verified } auto HG51B::writeRegister(n7 address, n24 data) -> void { switch(address) { case 0x01: r.mul.bit(24,47) = data; return; case 0x02: r.mul.bit( 0,23) = data; return; case 0x03: r.mdr = data; return; case 0x08: r.rom = data; return; case 0x0c: r.ram = data; return; case 0x13: r.mar = data; return; case 0x1c: r.dpr = data; return; case 0x20: r.pc = data; return; case 0x28: r.p = data; return; case 0x2e: io.bus.enable = 1; io.bus.writing = 1; io.bus.pending = 1 + io.wait.rom; io.bus.address = r.mar; return; case 0x2f: io.bus.enable = 1; io.bus.writing = 1; io.bus.pending = 1 + io.wait.ram; io.bus.address = r.mar; return; case 0x60: case 0x70: r.gpr[ 0] = data; return; case 0x61: case 0x71: r.gpr[ 1] = data; return; case 0x62: case 0x72: r.gpr[ 2] = data; return; case 0x63: case 0x73: r.gpr[ 3] = data; return; case 0x64: case 0x74: r.gpr[ 4] = data; return; case 0x65: case 0x75: r.gpr[ 5] = data; return; case 0x66: case 0x76: r.gpr[ 6] = data; return; case 0x67: case 0x77: r.gpr[ 7] = data; return; case 0x68: case 0x78: r.gpr[ 8] = data; return; case 0x69: case 0x79: r.gpr[ 9] = data; return; case 0x6a: case 0x7a: r.gpr[10] = data; return; case 0x6b: case 0x7b: r.gpr[11] = data; return; case 0x6c: case 0x7c: r.gpr[12] = data; return; case 0x6d: case 0x7d: r.gpr[13] = data; return; case 0x6e: case 0x7e: r.gpr[14] = data; return; case 0x6f: case 0x7f: r.gpr[15] = data; return; } } ares-126/ares/component/processor/hg51b/serialization.cpp000066400000000000000000000014161415063341600235650ustar00rootroot00000000000000auto HG51B::serialize(serializer& s) -> void { s(programRAM[0]); s(programRAM[1]); s(dataRAM); s(r.pb); s(r.pc); s(r.n); s(r.z); s(r.c); s(r.v); s(r.i); s(r.a); s(r.p); s(r.mul); s(r.mdr); s(r.rom); s(r.ram); s(r.mar); s(r.dpr); s(r.gpr); s(io.lock); s(io.halt); s(io.irq); s(io.rom); s(io.vector); s(io.wait.rom); s(io.wait.ram); s(io.suspend.enable); s(io.suspend.duration); s(io.cache.enable); s(io.cache.page); s(io.cache.lock); s(io.cache.address); s(io.cache.base); s(io.cache.pb); s(io.cache.pc); s(io.dma.enable); s(io.dma.source); s(io.dma.target); s(io.dma.length); s(io.bus.enable); s(io.bus.reading); s(io.bus.writing); s(io.bus.pending); s(io.bus.address); s(stack); } ares-126/ares/component/processor/huc6280/000077500000000000000000000000001415063341600203735ustar00rootroot00000000000000ares-126/ares/component/processor/huc6280/algorithms.cpp000066400000000000000000000060301415063341600232470ustar00rootroot00000000000000auto HuC6280::algorithmADC(n8 i) -> n8 { i16 o; if(!D) { o = A + i + C; V = ~(A ^ i) & (A ^ o) & 0x80; } else { idle(); o = (A & 0x0f) + (i & 0x0f) + (C << 0); if(o > 0x09) o += 0x06; C = o > 0x0f; o = (A & 0xf0) + (i & 0xf0) + (C << 4) + (o & 0x0f); if(o > 0x9f) o += 0x60; } C = o.bit(8); Z = n8(o) == 0; N = o.bit(7); return o; } auto HuC6280::algorithmAND(n8 i) -> n8 { n8 o = A & i; Z = o == 0; N = o.bit(7); return o; } auto HuC6280::algorithmASL(n8 i) -> n8 { C = i.bit(7); i <<= 1; Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmBIT(n8 i) -> n8 { Z = (A & i) == 0; V = i.bit(6); N = i.bit(7); return A; } auto HuC6280::algorithmCMP(n8 i) -> n8 { n9 o = A - i; C = !o.bit(8); Z = n8(o) == 0; N = o.bit(7); return A; } auto HuC6280::algorithmCPX(n8 i) -> n8 { n9 o = X - i; C = !o.bit(8); Z = n8(o) == 0; N = o.bit(7); return X; } auto HuC6280::algorithmCPY(n8 i) -> n8 { n9 o = Y - i; C = !o.bit(8); Z = n8(o) == 0; N = o.bit(7); return Y; } auto HuC6280::algorithmDEC(n8 i) -> n8 { i--; Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmEOR(n8 i) -> n8 { n8 o = A ^ i; Z = o == 0; N = o.bit(7); return o; } auto HuC6280::algorithmINC(n8 i) -> n8 { i++; Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmLD(n8 i) -> n8 { Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmLSR(n8 i) -> n8 { C = i.bit(0); i >>= 1; Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmORA(n8 i) -> n8 { n8 o = A | i; Z = o == 0; N = o.bit(7); return o; } auto HuC6280::algorithmROL(n8 i) -> n8 { bool c = C; C = i.bit(7); i = i << 1 | c; Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmROR(n8 i) -> n8 { bool c = C; C = i.bit(0); i = c << 7 | i >> 1; Z = i == 0; N = i.bit(7); return i; } auto HuC6280::algorithmSBC(n8 i) -> n8 { i ^= 0xff; i16 o; if(!D) { o = A + i + C; V = ~(A ^ i) & (A ^ o) & 0x80; } else { idle(); o = (A & 0x0f) + (i & 0x0f) + (C << 0); if(o <= 0x0f) o -= 0x06; C = o > 0x0f; o = (A & 0xf0) + (i & 0xf0) + (C << 4) + (o & 0x0f); if(o <= 0xff) o -= 0x60; } C = o.bit(8); Z = n8(o) == 0; N = o.bit(7); return o; } auto HuC6280::algorithmTRB(n8 i) -> n8 { Z = (A & i) == 0; V = i.bit(6); N = i.bit(7); return ~A & i; } auto HuC6280::algorithmTSB(n8 i) -> n8 { Z = (A & i) == 0; V = i.bit(6); N = i.bit(7); return A | i; } // auto HuC6280::algorithmTAI(n16& source, n16& target, bool alternate) -> void { !alternate ? source++ : source--; target++; } auto HuC6280::algorithmTDD(n16& source, n16& target, bool) -> void { source--; target--; } auto HuC6280::algorithmTIA(n16& source, n16& target, bool alternate) -> void { source++; !alternate ? target++ : target--; } auto HuC6280::algorithmTII(n16& source, n16& target, bool) -> void { source++; target++; } auto HuC6280::algorithmTIN(n16& source, n16& target, bool) -> void { source++; } ares-126/ares/component/processor/huc6280/disassembler.cpp000066400000000000000000000311321415063341600235540ustar00rootroot00000000000000auto HuC6280::disassembleInstruction() -> string { n16 pc = r.pc; maybe effectiveAddress; string s; auto readByte = [&]() -> n8 { n8 data = read(MPR[pc >> 13], pc & 0x1fff); return pc++, data; }; auto readWord = [&]() -> n16 { n16 data = readByte() << 0; return data | readByte() << 8; }; auto computeAbsolute = [&](n16 address) { effectiveAddress = MPR[address >> 13] << 16 | address & 0x1fff; }; auto computeIndirect = [&](n8 address) { n16 absolute = 0; absolute |= read(MPR[1], address + 0) << 0; absolute |= read(MPR[1], address + 1) << 8; effectiveAddress = absolute; }; auto computeIndirectX = [&](n8 address) { n16 absolute = 0; absolute |= read(MPR[1], address + r.x + 0) << 0; absolute |= read(MPR[1], address + r.x + 1) << 8; effectiveAddress = absolute; }; auto computeIndirectY = [&](n8 address) { n16 absolute = 0; absolute |= read(MPR[1], address + 0) << 0; absolute |= read(MPR[1], address + 1) << 8; effectiveAddress = absolute + r.y; }; auto computeIndirectLong = [&](n16 address, n8 index = 0) { n16 absolute = 0; absolute |= read(MPR[address >> 13], address & 0x1fff) << 0; address++; absolute |= read(MPR[address >> 13], address & 0x1fff) << 8; effectiveAddress = absolute + index; }; auto computeZeroPage = [&](n8 address) { effectiveAddress = MPR[1] << 16 | address; }; auto absolute = [&]() -> string { auto address = readWord(); computeAbsolute(address); return {"$", hex(address, 4L)}; }; auto absoluteX = [&]() -> string { auto address = readWord(); computeAbsolute(address + r.x); return {"$", hex(address, 4L), ",x"}; }; auto absoluteY = [&]() -> string { auto address = readWord(); computeAbsolute(address + r.y); return {"$", hex(address, 4L), ",y"}; }; auto immediate = [&]() -> string { return {"#$", hex(readByte(), 2L)}; }; auto indirect = [&]() -> string { auto indirect = readByte(); computeIndirect(indirect); return {"($", hex(indirect, 2L), ")"}; }; auto indirectX = [&]() -> string { auto indirect = readByte(); computeIndirectX(indirect); return {"($", hex(indirect, 2L), ",x)"}; }; auto indirectY = [&]() -> string { auto indirect = readByte(); computeIndirectY(indirect); return {"($", hex(indirect, 2L), "),y"}; }; auto indirectLong = [&]() -> string { auto address = readWord(); computeIndirectLong(address); return {"($", hex(address, 4L), ")"}; }; auto indirectLongX = [&]() -> string { auto address = readWord(); computeIndirectLong(address, r.x); return {"($", hex(readWord(), 4L), ",x)"}; }; auto relative = [&]() -> string { auto displacement = readByte(); computeAbsolute(pc + (i8)displacement); return {"$", hex(pc + (i8)displacement, 4L)}; }; auto zeropage = [&]() -> string { auto zeroPage = readByte(); computeZeroPage(zeroPage); return {"$", hex(zeroPage, 2L)}; }; auto zeropageX = [&]() -> string { auto zeroPage = readByte(); computeZeroPage(zeroPage + r.x); return {"$", hex(zeroPage, 2L), ",x"}; }; auto zeropageY = [&]() -> string { auto zeroPage = readByte(); computeZeroPage(zeroPage + r.y); return {"$", hex(zeroPage, 2L), ",y"}; }; auto immediateAbsolute = [&](string index = "") -> string { auto immediate = readByte(); auto absolute = readWord(); computeAbsolute(absolute + (index == "x" ? r.x : (n8)0)); if(index) index.prepend(","); return {"#$", hex(immediate, 2L), ",$", hex(absolute, 4L), index}; }; auto immediateZeropage = [&](string index = "") -> string { auto immediate = readByte(); auto zeroPage = readByte(); computeZeroPage(zeroPage + (index == "x" ? r.x : (n8)0)); if(index) index.prepend(","); return {"#$", hex(immediate, 2L), ",$", hex(zeroPage, 2L), index}; }; auto zeropageBit = [&](n3 bit) -> string { auto zeroPage = readByte(); computeZeroPage(zeroPage); return {"$", hex(zeroPage, 2L), ":", bit}; }; auto zeropageBitRelative = [&](n3 bit) -> string { auto zeroPage = readByte(); auto displacement = readByte(); computeZeroPage(zeroPage); return {"$", hex(zeroPage, 2L), ":", bit, ",$", hex(pc + (i8)displacement, 4L)}; }; auto blockMove = [&]() -> string { auto source = readWord(); auto target = readWord(); auto length = readWord(); return {"$", hex(source, 4L), ",$", hex(target, 4L), ",$", hex(length, 4L)}; }; n8 opcode = readByte(); #define op(id, name, ...) case id: o = {name, " ", vector{__VA_ARGS__}.merge(",")}; break; string o; #define U switch(opcode) { op(0x00, "brk") op(0x01, "ora", indirectX()) op(0x02, "sxy") op(0x03, "st0", immediate()) op(0x04, "tsb", zeropage()) op(0x05, "ora", zeropage()) op(0x06, "asl", zeropage()) op(0x07, "rmb", zeropageBit(0)) op(0x08, "php") op(0x09, "ora", immediate()) op(0x0a, "asl") U op(0x0b, "nop", "$0b") op(0x0c, "tsb", absolute()) op(0x0d, "ora", absolute()) op(0x0e, "asl", absolute()) op(0x0f, "bbr", zeropageBitRelative(0)) op(0x10, "bpl", relative()) op(0x11, "ora", indirectY()) op(0x12, "ora", indirect()) op(0x13, "st1", immediate()) op(0x14, "trb", zeropage()) op(0x15, "ora", zeropageX()) op(0x16, "asl", zeropageX()) op(0x17, "rmb", zeropageBit(1)) op(0x18, "clc") op(0x19, "ora", absoluteY()) op(0x1a, "inc") U op(0x1b, "nop", "$1b") op(0x1c, "trb", absolute()) op(0x1d, "ora", absoluteX()) op(0x1e, "asl", absoluteX()) op(0x1f, "bbr", zeropageBitRelative(1)) op(0x20, "jsr", absolute()) op(0x21, "and", indirectX()) op(0x22, "sax") op(0x23, "st2", immediate()) op(0x24, "bit", zeropage()) op(0x25, "and", zeropage()) op(0x26, "rol", zeropage()) op(0x27, "rmb", zeropageBit(2)) op(0x28, "plp") op(0x29, "and", immediate()) op(0x2a, "rol") U op(0x2b, "nop", "$2b") op(0x2c, "bit", absolute()) op(0x2d, "and", absolute()) op(0x2e, "rol", absolute()) op(0x2f, "bbr", zeropageBitRelative(2)) op(0x30, "bmi", relative()) op(0x31, "and", indirectY()) op(0x32, "and", indirect()) op(0x34, "bit", zeropageX()) op(0x35, "and", zeropageX()) op(0x36, "rol", zeropageX()) op(0x37, "rmb", zeropageBit(3)) op(0x38, "sec") op(0x39, "and", absoluteY()) op(0x3a, "dec") U op(0x3b, "nop", "$3b") op(0x3c, "bit", absoluteX()) op(0x3d, "and", absoluteX()) op(0x3e, "rol", absoluteX()) op(0x3f, "bbr", zeropageBitRelative(3)) op(0x40, "rti") op(0x41, "eor", indirectX()) op(0x42, "say") op(0x43, "tma", immediate()) op(0x44, "bsr", relative()) op(0x45, "eor", zeropage()) op(0x46, "lsr", zeropage()) op(0x47, "rmb", zeropageBit(4)) op(0x48, "pha") op(0x49, "eor", immediate()) op(0x4a, "lsr") U op(0x4b, "nop", "$4b") op(0x4c, "jmp", absolute()) op(0x4d, "eor", absolute()) op(0x4e, "lsr", absolute()) op(0x4f, "bbr", zeropageBitRelative(4)) op(0x50, "bvc", relative()) op(0x51, "eor", indirectY()) op(0x52, "eor", indirect()) op(0x53, "tam", immediate()) op(0x54, "csl") op(0x55, "eor", zeropageX()) op(0x56, "lsr", zeropageX()) op(0x57, "rmb", zeropageBit(5)) op(0x58, "cli") op(0x59, "eor", absoluteY()) op(0x5a, "phy") U op(0x5b, "nop", "$5b") U op(0x5c, "nop", "$5c") op(0x5d, "eor", absoluteX()) op(0x5e, "lsr", absoluteX()) op(0x5f, "bbr", zeropageBitRelative(5)) op(0x60, "rts") op(0x61, "adc", indirectX()) op(0x62, "cla") U op(0x63, "nop", "$63") op(0x64, "stz", zeropage()) op(0x65, "adc", zeropage()) op(0x66, "ror", zeropage()) op(0x67, "rmb", zeropageBit(6)) op(0x68, "pla") op(0x69, "adc", immediate()) op(0x6a, "ror") U op(0x6b, "nop", "$6b") op(0x6c, "jmp", indirectLong()) op(0x6d, "adc", absolute()) op(0x6e, "ror", absolute()) op(0x6f, "bbr", zeropageBitRelative(6)) op(0x70, "bvs", relative()) op(0x71, "adc", indirectY()) op(0x72, "adc", indirect()) op(0x73, "tii", blockMove()) op(0x74, "stz", zeropageX()) op(0x75, "adc", zeropageX()) op(0x76, "ror", zeropageX()) op(0x77, "rmb", zeropageBit(7)) op(0x78, "sei") op(0x79, "adc", absoluteY()) op(0x7a, "ply") U op(0x7b, "nop", "$7b") op(0x7c, "jmp", indirectLongX()) op(0x7d, "adc", absoluteX()) op(0x7e, "ror", absoluteX()) op(0x7f, "bbr", zeropageBitRelative(7)) op(0x80, "bra", relative()) op(0x81, "sta", indirectX()) op(0x82, "clx") op(0x83, "tst", immediateZeropage()) op(0x84, "sty", zeropage()) op(0x85, "sta", zeropage()) op(0x86, "stx", zeropage()) op(0x87, "smb", zeropageBit(0)) op(0x88, "dey") op(0x89, "bit", immediate()) op(0x8a, "txa") U op(0x8b, "nop", "$8b") op(0x8c, "sty", absolute()) op(0x8d, "sta", absolute()) op(0x8e, "stx", absolute()) op(0x8f, "bbs", zeropageBitRelative(0)) op(0x90, "bcc", relative()) op(0x91, "sta", indirectY()) op(0x92, "sta", indirect()) op(0x93, "tst", immediateAbsolute()) op(0x94, "sty", zeropageX()) op(0x95, "sta", zeropageX()) op(0x96, "stx", zeropageY()) op(0x97, "smb", zeropageBit(1)) op(0x98, "tya") op(0x99, "sta", absoluteY()) op(0x9a, "txs") U op(0x9b, "nop", "$9b") op(0x9c, "stz", absolute()) op(0x9d, "sta", absoluteX()) op(0x9e, "stz", absoluteX()) op(0x9f, "bbs", zeropageBitRelative(1)) op(0xa0, "ldy", immediate()) op(0xa1, "lda", indirectX()) op(0xa2, "ldx", immediate()) op(0xa3, "tst", immediateZeropage("x")) op(0xa4, "ldy", zeropage()) op(0xa5, "lda", zeropage()) op(0xa6, "ldx", zeropage()) op(0xa7, "smb", zeropageBit(2)) op(0xa8, "tay") op(0xa9, "lda", immediate()) op(0xaa, "tax") U op(0xab, "nop", "$ab") op(0xac, "ldy", absolute()) op(0xad, "lda", absolute()) op(0xae, "ldx", absolute()) op(0xaf, "bbs", zeropageBitRelative(2)) op(0xb0, "bcs", relative()) op(0xb1, "lda", indirectY()) op(0xb2, "lda", indirect()) op(0xb3, "tst", immediateAbsolute("x")) op(0xb4, "ldy", zeropageX()) op(0xb5, "lda", zeropageX()) op(0xb6, "ldx", zeropageY()) op(0xb7, "smb", zeropageBit(3)) op(0xb8, "clv") op(0xb9, "lda", absoluteY()) op(0xba, "tsx") U op(0xbb, "nop", "$bb") op(0xbc, "ldy", absoluteX()) op(0xbd, "lda", absoluteX()) op(0xbe, "ldx", absoluteY()) op(0xbf, "bbs", zeropageBitRelative(3)) op(0xc0, "cpy", immediate()) op(0xc1, "cmp", indirectX()) op(0xc2, "cly") op(0xc3, "tdd", blockMove()) op(0xc4, "cpy", zeropage()) op(0xc5, "cmp", zeropage()) op(0xc6, "dec", zeropage()) op(0xc7, "smb", zeropageBit(4)) op(0xc8, "iny") op(0xc9, "cmp", immediate()) op(0xca, "dex") U op(0xcb, "nop", "$cb") op(0xcc, "cpy", absolute()) op(0xcd, "cmp", absolute()) op(0xce, "dec", absolute()) op(0xcf, "bbs", zeropageBitRelative(4)) op(0xd0, "bne", relative()) op(0xd1, "cmp", indirectY()) op(0xd2, "cmp", indirect()) op(0xd3, "tin", blockMove()) op(0xd4, "csh") op(0xd5, "cmp", zeropageX()) op(0xd6, "dec", zeropageX()) op(0xd7, "smb", zeropageBit(5)) op(0xd8, "cld") op(0xd9, "cmp", absoluteY()) op(0xda, "phx") U op(0xdb, "nop", "$db") U op(0xdc, "nop", "$dc") op(0xdd, "cmp", absoluteX()) op(0xde, "dec", absoluteX()) op(0xdf, "bbs", zeropageBitRelative(5)) op(0xe0, "cpx", immediate()) op(0xe1, "sbc", indirectX()) U op(0xe2, "nop", "$e2") op(0xe3, "tia", blockMove()) op(0xe4, "cpx", zeropage()) op(0xe5, "sbc", zeropage()) op(0xe6, "inc", zeropage()) op(0xe7, "smb", zeropageBit(6)) op(0xe8, "inx") op(0xe9, "sbc", immediate()) op(0xea, "nop") U op(0xeb, "nop", "$eb") op(0xec, "cpx", absolute()) op(0xed, "sbc", absolute()) op(0xee, "inc", absolute()) op(0xef, "bbs", zeropageBitRelative(6)) op(0xf0, "beq", relative()) op(0xf1, "sbc", indirectY()) op(0xf2, "sbc", indirect()) op(0xf3, "tai", blockMove()) op(0xf4, "set") op(0xf5, "sbc", zeropageX()) op(0xf6, "inc", zeropageX()) op(0xf7, "smb", zeropageBit(7)) op(0xf8, "sed") op(0xf9, "sbc", absoluteY()) op(0xfa, "plx") U op(0xfb, "nop", "$fb") U op(0xfc, "nop", "$fc") op(0xfd, "sbc", absoluteX()) op(0xfe, "inc", absoluteX()) op(0xff, "bbs", zeropageBitRelative(7)) } #undef U if(!o) o = {"??? (", hex(opcode, 2L), ")"}; s.append(pad(o, -21L, ' ')); if(effectiveAddress) { s.append(" [", hex(*effectiveAddress, 6L), "]"); } else { s.append(" "); } #undef op return s; } auto HuC6280::disassembleContext() -> string { string s; s.append( "A:", hex(A, 2L)); s.append(" X:", hex(X, 2L)); s.append(" Y:", hex(Y, 2L)); s.append(" S:", hex(S, 2L)); s.append(" PC:", hex(PC, 4L)); s.append(" "); s.append(N ? "N" : "n"); s.append(V ? "V" : "v"); s.append(T ? "T" : "t"); s.append(B ? "B" : "b"); s.append(D ? "D" : "d"); s.append(I ? "I" : "i"); s.append(Z ? "Z" : "z"); s.append(C ? "C" : "c"); s.append(CS == 3 ? "+" : "-"); return s; } ares-126/ares/component/processor/huc6280/huc6280.cpp000066400000000000000000000024121415063341600221750ustar00rootroot00000000000000#include #include "huc6280.hpp" namespace ares { #define A r.a #define X r.x #define Y r.y #define S r.s #define PC r.pc #define PCH r.pc.byte(1) #define PCL r.pc.byte(0) #define MPR r.mpr #define MPL r.mpl #define CS r.cs #define P r.p #define C r.p.c #define Z r.p.z #define I r.p.i #define D r.p.d #define B r.p.b #define T r.p.t #define V r.p.v #define N r.p.n #define EA r.ea #define L lastCycle(); #define ALU (this->*alu) #include "memory.cpp" #include "algorithms.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "disassembler.cpp" #include "serialization.cpp" auto HuC6280::power() -> void { random.entropy(Random::Entropy::High); A = random(); X = random(); Y = random(); S = random(); PC = 0x0000; MPR[0] = random(); MPR[1] = random(); MPR[2] = random(); MPR[3] = random(); MPR[4] = random(); MPR[5] = random(); MPR[6] = random(); MPR[7] = 0x00; MPL = 0x00; C = random(); Z = random(); I = 1; D = 0; B = 1; T = 0; V = random(); N = random(); CS = 12; blockMove = false; } #undef A #undef X #undef Y #undef S #undef PC #undef PCH #undef PCL #undef MPR #undef MPL #undef CS #undef P #undef C #undef Z #undef I #undef D #undef B #undef T #undef V #undef N #undef EA #undef L #undef ALU } ares-126/ares/component/processor/huc6280/huc6280.hpp000066400000000000000000000114361415063341600222100ustar00rootroot00000000000000//Hudson Soft HuC6280 #pragma once namespace ares { struct HuC6280 { virtual auto step(u32 clocks) -> void = 0; virtual auto read(n8 bank, n13 address) -> n8 = 0; virtual auto write(n8 bank, n13 address, n8 data) -> void = 0; virtual auto store(n2 address, n8 data) -> void = 0; virtual auto lastCycle() -> void = 0; //huc6280.cpp auto power() -> void; //memory.cpp auto load8(n8) -> n8; auto load16(n16) -> n8; auto store8(n8, n8) -> void; auto store16(n16, n8) -> void; auto idle() -> void; auto opcode() -> n8; auto operand() -> n8; auto push(n8) -> void; auto pull() -> n8; //instructions.cpp using fp = auto (HuC6280::*)(n8) -> n8; auto algorithmADC(n8) -> n8; auto algorithmAND(n8) -> n8; auto algorithmASL(n8) -> n8; auto algorithmBIT(n8) -> n8; auto algorithmCMP(n8) -> n8; auto algorithmCPX(n8) -> n8; auto algorithmCPY(n8) -> n8; auto algorithmDEC(n8) -> n8; auto algorithmEOR(n8) -> n8; auto algorithmINC(n8) -> n8; auto algorithmLD (n8) -> n8; auto algorithmLSR(n8) -> n8; auto algorithmORA(n8) -> n8; auto algorithmROL(n8) -> n8; auto algorithmROR(n8) -> n8; auto algorithmSBC(n8) -> n8; auto algorithmTRB(n8) -> n8; auto algorithmTSB(n8) -> n8; using bp = auto (HuC6280::*)(n16&, n16&, bool) -> void; auto algorithmTAI(n16&, n16&, bool) -> void; auto algorithmTDD(n16&, n16&, bool) -> void; auto algorithmTIA(n16&, n16&, bool) -> void; auto algorithmTII(n16&, n16&, bool) -> void; auto algorithmTIN(n16&, n16&, bool) -> void; //instruction.cpp auto interrupt(n16 vector) -> void; auto instruction() -> void; //instructions.cpp auto instructionAbsoluteModify(fp, n8 = 0) -> void; auto instructionAbsoluteRead(fp, n8&, n8 = 0) -> void; auto instructionAbsoluteReadMemory(fp, n8 = 0) -> void; auto instructionAbsoluteWrite(n8, n8 = 0) -> void; auto instructionBlockMove(bp) -> void; auto instructionBranch(bool) -> void; auto instructionBranchIfBitReset(n3) -> void; auto instructionBranchIfBitSet(n3) -> void; auto instructionBranchSubroutine() -> void; auto instructionBreak() -> void; auto instructionCallAbsolute() -> void; auto instructionChangeSpeedLow() -> void; auto instructionChangeSpeedHigh() -> void; auto instructionClear(n8&) -> void; auto instructionClear(bool&) -> void; auto instructionImmediate(fp, n8&) -> void; auto instructionImmediateMemory(fp) -> void; auto instructionImplied(fp, n8&) -> void; auto instructionIndirectRead(fp, n8&, n8 = 0) -> void; auto instructionIndirectReadMemory(fp, n8 = 0) -> void; auto instructionIndirectWrite(n8, n8 = 0) -> void; auto instructionIndirectYRead(fp, n8&) -> void; auto instructionIndirectYReadMemory(fp) -> void; auto instructionIndirectYWrite(n8) -> void; auto instructionJumpAbsolute() -> void; auto instructionJumpIndirect(n8 = 0) -> void; auto instructionNoOperation() -> void; auto instructionPull(n8&) -> void; auto instructionPullP() -> void; auto instructionPush(n8) -> void; auto instructionResetMemoryBit(n3) -> void; auto instructionReturnInterrupt() -> void; auto instructionReturnSubroutine() -> void; auto instructionSet(bool&) -> void; auto instructionSetMemoryBit(n3) -> void; auto instructionStoreImplied(n2) -> void; auto instructionSwap(n8&, n8&) -> void; auto instructionTestAbsolute(n8 = 0) -> void; auto instructionTestZeroPage(n8 = 0) -> void; auto instructionTransfer(n8&, n8&) -> void; auto instructionTransferAccumulatorToMPR() -> void; auto instructionTransferMPRToAccumulator() -> void; auto instructionTransferXS() -> void; auto instructionZeroPageModify(fp, n8 = 0) -> void; auto instructionZeroPageRead(fp, n8&, n8 = 0) -> void; auto instructionZeroPageReadMemory(fp, n8 = 0) -> void; auto instructionZeroPageWrite(n8, n8 = 0) -> void; //disassembler.cpp auto disassembleInstruction() -> string; auto disassembleContext() -> string; //serialization.cpp auto serialize(serializer&) -> void; struct Flags { bool c; //carry bool z; //zero bool i; //interrupt disable bool d; //decimal mode bool b; //break bool t; //memory operation bool v; //overflow bool n; //negative operator n8() const { return c << 0 | z << 1 | i << 2 | d << 3 | b << 4 | t << 5 | v << 6 | n << 7; } auto operator()() const -> n8 { return operator n8(); } auto& operator=(n8 data) { c = data.bit(0); z = data.bit(1); i = data.bit(2); d = data.bit(3); b = data.bit(4); t = data.bit(5); v = data.bit(6); n = data.bit(7); return *this; } }; struct Registers { n8 a; n8 x; n8 y; n8 s; n16 pc; n8 mpr[8]; n8 mpl; //MPR latch n8 cs; //code speed (3 = fast, 12 = slow) Flags p; } r; bool blockMove; Random random; }; } ares-126/ares/component/processor/huc6280/instruction.cpp000066400000000000000000000237501415063341600234670ustar00rootroot00000000000000#define op(id, name, ...) case id: return instruction##name(__VA_ARGS__); #define fp(name) &HuC6280::algorithm##name auto HuC6280::interrupt(n16 vector) -> void { idle(); idle(); idle(); push(PC >> 8); push(PC >> 0); push(P() & ~0x10); //B flag is clear I = 1; D = 0; T = 0; PC.byte(0) = load16(vector + 0); L PC.byte(1) = load16(vector + 1); } auto HuC6280::instruction() -> void { auto code = opcode(); if(T) { T = 0; switch(code) { op(0x01, IndirectReadMemory, fp(ORA), X) op(0x05, ZeroPageReadMemory, fp(ORA)) op(0x09, ImmediateMemory, fp(ORA)) op(0x0d, AbsoluteReadMemory, fp(ORA)) op(0x11, IndirectYReadMemory, fp(ORA)) op(0x12, IndirectReadMemory, fp(ORA)) op(0x15, ZeroPageReadMemory, fp(ORA), X) op(0x19, AbsoluteReadMemory, fp(ORA), Y) op(0x1d, AbsoluteReadMemory, fp(ORA), X) op(0x21, IndirectReadMemory, fp(AND), X) op(0x25, ZeroPageReadMemory, fp(AND)) op(0x29, ImmediateMemory, fp(AND)) op(0x2d, AbsoluteReadMemory, fp(AND)) op(0x31, IndirectYReadMemory, fp(AND)) op(0x32, IndirectReadMemory, fp(AND)) op(0x35, ZeroPageReadMemory, fp(AND), X) op(0x39, AbsoluteReadMemory, fp(AND), Y) op(0x3d, AbsoluteReadMemory, fp(AND), X) op(0x41, IndirectReadMemory, fp(EOR), X) op(0x45, ZeroPageReadMemory, fp(EOR)) op(0x49, ImmediateMemory, fp(EOR)) op(0x4d, AbsoluteReadMemory, fp(EOR)) op(0x51, IndirectYReadMemory, fp(EOR)) op(0x52, IndirectReadMemory, fp(EOR)) op(0x55, ZeroPageReadMemory, fp(EOR), X) op(0x59, AbsoluteReadMemory, fp(EOR), Y) op(0x5d, AbsoluteReadMemory, fp(EOR), X) op(0x61, IndirectReadMemory, fp(ADC), X) op(0x65, ZeroPageReadMemory, fp(ADC)) op(0x69, ImmediateMemory, fp(ADC)) op(0x6d, AbsoluteReadMemory, fp(ADC)) op(0x71, IndirectYReadMemory, fp(ADC)) op(0x72, IndirectReadMemory, fp(ADC)) op(0x75, ZeroPageReadMemory, fp(ADC), X) op(0x79, AbsoluteReadMemory, fp(ADC), Y) op(0x7d, AbsoluteReadMemory, fp(ADC), X) } } #define U switch(code) { op(0x00, Break) op(0x01, IndirectRead, fp(ORA), A, X) op(0x02, Swap, X, Y) op(0x03, StoreImplied, 0) op(0x04, ZeroPageModify, fp(TSB)) op(0x05, ZeroPageRead, fp(ORA), A) op(0x06, ZeroPageModify, fp(ASL)) op(0x07, ResetMemoryBit, 0) op(0x08, Push, P) op(0x09, Immediate, fp(ORA), A) op(0x0a, Implied, fp(ASL), A) U op(0x0b, NoOperation) op(0x0c, AbsoluteModify, fp(TSB)) op(0x0d, AbsoluteRead, fp(ORA), A) op(0x0e, AbsoluteModify, fp(ASL)) op(0x0f, BranchIfBitReset, 0) op(0x10, Branch, N == 0) op(0x11, IndirectYRead, fp(ORA), A) op(0x12, IndirectRead, fp(ORA), A) op(0x13, StoreImplied, 1) op(0x14, ZeroPageModify, fp(TRB)) op(0x15, ZeroPageRead, fp(ORA), A, X) op(0x16, ZeroPageModify, fp(ASL), X) op(0x17, ResetMemoryBit, 1) op(0x18, Clear, C) op(0x19, AbsoluteRead, fp(ORA), A, Y) op(0x1a, Implied, fp(INC), A) U op(0x1b, NoOperation) op(0x1c, AbsoluteModify, fp(TRB)) op(0x1d, AbsoluteRead, fp(ORA), A, X) op(0x1e, AbsoluteModify, fp(ASL), X) op(0x1f, BranchIfBitReset, 1) op(0x20, CallAbsolute) op(0x21, IndirectRead, fp(AND), A, X) op(0x22, Swap, A, X) op(0x23, StoreImplied, 2) op(0x24, ZeroPageRead, fp(BIT), A) op(0x25, ZeroPageRead, fp(AND), A) op(0x26, ZeroPageModify, fp(ROL)) op(0x27, ResetMemoryBit, 2) op(0x28, PullP) op(0x29, Immediate, fp(AND), A) op(0x2a, Implied, fp(ROL), A) U op(0x2b, NoOperation) op(0x2c, AbsoluteRead, fp(BIT), A) op(0x2d, AbsoluteRead, fp(AND), A) op(0x2e, AbsoluteModify, fp(ROL)) op(0x2f, BranchIfBitReset, 2) op(0x30, Branch, N == 1) op(0x31, IndirectYRead, fp(AND), A) op(0x32, IndirectRead, fp(AND), A) U op(0x33, NoOperation) op(0x34, ZeroPageRead, fp(BIT), A, X) op(0x35, ZeroPageRead, fp(AND), A, X) op(0x36, ZeroPageModify, fp(ROL), X) op(0x37, ResetMemoryBit, 3) op(0x38, Set, C) op(0x39, AbsoluteRead, fp(AND), A, Y) op(0x3a, Implied, fp(DEC), A) U op(0x3b, NoOperation) op(0x3c, AbsoluteRead, fp(BIT), A, X) op(0x3d, AbsoluteRead, fp(AND), A, X) op(0x3e, AbsoluteModify, fp(ROL), X) op(0x3f, BranchIfBitReset, 3) op(0x40, ReturnInterrupt) op(0x41, IndirectRead, fp(EOR), A, X) op(0x42, Swap, A, Y) op(0x43, TransferMPRToAccumulator) op(0x44, BranchSubroutine) op(0x45, ZeroPageRead, fp(EOR), A) op(0x46, ZeroPageModify, fp(LSR)) op(0x47, ResetMemoryBit, 4) op(0x48, Push, A) op(0x49, Immediate, fp(EOR), A) op(0x4a, Implied, fp(LSR), A) U op(0x4b, NoOperation) op(0x4c, JumpAbsolute) op(0x4d, AbsoluteRead, fp(EOR), A) op(0x4e, AbsoluteModify, fp(LSR)) op(0x4f, BranchIfBitReset, 4) op(0x50, Branch, V == 0) op(0x51, IndirectYRead, fp(EOR), A) op(0x52, IndirectRead, fp(EOR), A) op(0x53, TransferAccumulatorToMPR) op(0x54, ChangeSpeedLow) op(0x55, ZeroPageRead, fp(EOR), A, X) op(0x56, ZeroPageModify, fp(LSR), X) op(0x57, ResetMemoryBit, 5) op(0x58, Clear, I) op(0x59, AbsoluteRead, fp(EOR), A, Y) op(0x5a, Push, Y) U op(0x5b, NoOperation) U op(0x5c, NoOperation) op(0x5d, AbsoluteRead, fp(EOR), A, X) op(0x5e, AbsoluteModify, fp(LSR), X) op(0x5f, BranchIfBitReset, 5) op(0x60, ReturnSubroutine) op(0x61, IndirectRead, fp(ADC), A, X) op(0x62, Clear, A) U op(0x63, NoOperation) op(0x64, ZeroPageWrite, 0) op(0x65, ZeroPageRead, fp(ADC), A) op(0x66, ZeroPageModify, fp(ROR)) op(0x67, ResetMemoryBit, 6) op(0x68, Pull, A) op(0x69, Immediate, fp(ADC), A) op(0x6a, Implied, fp(ROR), A) U op(0x6b, NoOperation) op(0x6c, JumpIndirect) op(0x6d, AbsoluteRead, fp(ADC), A) op(0x6e, AbsoluteModify, fp(ROR)) op(0x6f, BranchIfBitReset, 6) op(0x70, Branch, V == 1) op(0x71, IndirectYRead, fp(ADC), A) op(0x72, IndirectRead, fp(ADC), A) op(0x73, BlockMove, fp(TII)) op(0x74, ZeroPageWrite, 0, X) op(0x75, ZeroPageRead, fp(ADC), A, X) op(0x76, ZeroPageModify, fp(ROR), X) op(0x77, ResetMemoryBit, 7) op(0x78, Set, I) op(0x79, AbsoluteRead, fp(ADC), A, Y) op(0x7a, Pull, Y) U op(0x7b, NoOperation) op(0x7c, JumpIndirect, X) op(0x7d, AbsoluteRead, fp(ADC), A, X) op(0x7e, AbsoluteModify, fp(ROR), X) op(0x7f, BranchIfBitReset, 7) op(0x80, Branch, 1) op(0x81, IndirectWrite, A, X) op(0x82, Clear, X) op(0x83, TestZeroPage) op(0x84, ZeroPageWrite, Y) op(0x85, ZeroPageWrite, A) op(0x86, ZeroPageWrite, X) op(0x87, SetMemoryBit, 0) op(0x88, Implied, fp(DEC), Y) op(0x89, Immediate, fp(BIT), A) op(0x8a, Transfer, X, A) U op(0x8b, NoOperation) op(0x8c, AbsoluteWrite, Y) op(0x8d, AbsoluteWrite, A) op(0x8e, AbsoluteWrite, X) op(0x8f, BranchIfBitSet, 0) op(0x90, Branch, C == 0) op(0x91, IndirectYWrite, A) op(0x92, IndirectWrite, A) op(0x93, TestAbsolute) op(0x94, ZeroPageWrite, Y, X) op(0x95, ZeroPageWrite, A, X) op(0x96, ZeroPageWrite, X, Y) op(0x97, SetMemoryBit, 1) op(0x98, Transfer, Y, A) op(0x99, AbsoluteWrite, A, Y) op(0x9a, TransferXS) U op(0x9b, NoOperation) op(0x9c, AbsoluteWrite, 0) op(0x9d, AbsoluteWrite, A, X) op(0x9e, AbsoluteWrite, 0, X) op(0x9f, BranchIfBitSet, 1) op(0xa0, Immediate, fp(LD), Y) op(0xa1, IndirectRead, fp(LD), A, X) op(0xa2, Immediate, fp(LD), X) op(0xa3, TestZeroPage, X) op(0xa4, ZeroPageRead, fp(LD), Y) op(0xa5, ZeroPageRead, fp(LD), A) op(0xa6, ZeroPageRead, fp(LD), X) op(0xa7, SetMemoryBit, 2) op(0xa8, Transfer, A, Y) op(0xa9, Immediate, fp(LD), A) op(0xaa, Transfer, A, X) U op(0xab, NoOperation) op(0xac, AbsoluteRead, fp(LD), Y) op(0xad, AbsoluteRead, fp(LD), A) op(0xae, AbsoluteRead, fp(LD), X) op(0xaf, BranchIfBitSet, 2) op(0xb0, Branch, C == 1) op(0xb1, IndirectYRead, fp(LD), A) op(0xb2, IndirectRead, fp(LD), A) op(0xb3, TestAbsolute, X) op(0xb4, ZeroPageRead, fp(LD), Y, X) op(0xb5, ZeroPageRead, fp(LD), A, X) op(0xb6, ZeroPageRead, fp(LD), X, Y) op(0xb7, SetMemoryBit, 3) op(0xb8, Clear, V) op(0xb9, AbsoluteRead, fp(LD), A, Y) op(0xba, Transfer, S, X) U op(0xbb, NoOperation) op(0xbc, AbsoluteRead, fp(LD), Y, X) op(0xbd, AbsoluteRead, fp(LD), A, X) op(0xbe, AbsoluteRead, fp(LD), X, Y) op(0xbf, BranchIfBitSet, 3) op(0xc0, Immediate, fp(CPY), Y) op(0xc1, IndirectRead, fp(CMP), A, X) op(0xc2, Clear, Y) op(0xc3, BlockMove, fp(TDD)) op(0xc4, ZeroPageRead, fp(CPY), Y) op(0xc5, ZeroPageRead, fp(CMP), A) op(0xc6, ZeroPageModify, fp(DEC)) op(0xc7, SetMemoryBit, 4) op(0xc8, Implied, fp(INC), Y) op(0xc9, Immediate, fp(CMP), A) op(0xca, Implied, fp(DEC), X) U op(0xcb, NoOperation) op(0xcc, AbsoluteRead, fp(CPY), Y) op(0xcd, AbsoluteRead, fp(CMP), A) op(0xce, AbsoluteModify, fp(DEC)) op(0xcf, BranchIfBitSet, 4) op(0xd0, Branch, Z == 0) op(0xd1, IndirectYRead, fp(CMP), A) op(0xd2, IndirectRead, fp(CMP), A) op(0xd3, BlockMove, fp(TIN)) op(0xd4, ChangeSpeedHigh) op(0xd5, ZeroPageRead, fp(CMP), A, X) op(0xd6, ZeroPageModify, fp(DEC), X) op(0xd7, SetMemoryBit, 5) op(0xd8, Clear, D) op(0xd9, AbsoluteRead, fp(CMP), A, Y) op(0xda, Push, X) U op(0xdb, NoOperation) U op(0xdc, NoOperation) op(0xdd, AbsoluteRead, fp(CMP), A, X) op(0xde, AbsoluteModify, fp(DEC), X) op(0xdf, BranchIfBitSet, 5) op(0xe0, Immediate, fp(CPX), X) op(0xe1, IndirectRead, fp(SBC), A, X) U op(0xe2, NoOperation) op(0xe3, BlockMove, fp(TIA)) op(0xe4, ZeroPageRead, fp(CPX), X) op(0xe5, ZeroPageRead, fp(SBC), A) op(0xe6, ZeroPageModify, fp(INC)) op(0xe7, SetMemoryBit, 6) op(0xe8, Implied, fp(INC), X) op(0xe9, Immediate, fp(SBC), A) op(0xea, NoOperation) U op(0xeb, NoOperation) op(0xec, AbsoluteRead, fp(CPX), X) op(0xed, AbsoluteRead, fp(SBC), A) op(0xee, AbsoluteModify, fp(INC)) op(0xef, BranchIfBitSet, 6) op(0xf0, Branch, Z == 1) op(0xf1, IndirectYRead, fp(SBC), A) op(0xf2, IndirectRead, fp(SBC), A) op(0xf3, BlockMove, fp(TAI)) op(0xf4, Set, T) op(0xf5, ZeroPageRead, fp(SBC), A, X) op(0xf6, ZeroPageModify, fp(INC), X) op(0xf7, SetMemoryBit, 7) op(0xf8, Set, D) op(0xf9, AbsoluteRead, fp(SBC), A, Y) op(0xfa, Pull, X) U op(0xfb, NoOperation) U op(0xfc, NoOperation) op(0xfd, AbsoluteRead, fp(SBC), A, X) op(0xfe, AbsoluteModify, fp(INC), X) op(0xff, BranchIfBitSet, 7) } #undef U } #undef op #undef fp ares-126/ares/component/processor/huc6280/instructions.cpp000066400000000000000000000207301415063341600236450ustar00rootroot00000000000000auto HuC6280::instructionAbsoluteModify(fp alu, n8 index) -> void { n16 absolute = operand(); absolute |= operand() << 8; idle(); idle(); auto data = ALU(load16(absolute + index)); L store16(absolute + index, data); } auto HuC6280::instructionAbsoluteRead(fp alu, n8& data, n8 index) -> void { n16 absolute = operand(); absolute |= operand() << 8; idle(); L data = ALU(load16(absolute + index)); } auto HuC6280::instructionAbsoluteReadMemory(fp alu, n8 index) -> void { auto a = A; A = load8(X); n16 absolute = operand(); absolute |= operand() << 8; idle(); A = ALU(load16(absolute + index)); L store8(X, A); A = a; } auto HuC6280::instructionAbsoluteWrite(n8 data, n8 index) -> void { n16 absolute = operand(); absolute |= operand() << 8; idle(); L store16(absolute + index, data); } auto HuC6280::instructionBlockMove(bp alu) -> void { n16 source = operand(); source |= operand() << 8; n16 target = operand(); target |= operand() << 8; n16 length = operand(); length |= operand() << 8; push(Y); push(A); push(X); idle(); idle(); idle(); idle(); blockMove = 1; bool alternate = 0; do { auto data = load16(source); store16(target, data); ALU(source, target, alternate); alternate ^= 1; idle(); idle(); idle(); idle(); } while(--length); blockMove = 0; X = pull(); A = pull(); L Y = pull(); } auto HuC6280::instructionBranch(bool take) -> void { if(!take) { L operand(); } else { auto displacement = operand(); idle(); L idle(); PC += (i8)displacement; } } auto HuC6280::instructionBranchIfBitReset(n3 index) -> void { auto zeropage = operand(); auto displacement = operand(); idle(); idle(); L auto data = load8(zeropage); if(data.bit(index) == 0) { idle(); idle(); PC += (i8)displacement; } } auto HuC6280::instructionBranchIfBitSet(n3 index) -> void { auto zeropage = operand(); auto displacement = operand(); idle(); idle(); L auto data = load8(zeropage); if(data.bit(index) == 1) { idle(); idle(); PC += (i8)displacement; } } auto HuC6280::instructionBranchSubroutine() -> void { auto displacement = operand(); idle(); idle(); idle(); idle(); push(PC - 1 >> 8); L push(PC - 1 >> 0); PC += (i8)displacement; } auto HuC6280::instructionBreak() -> void { operand(); idle(); push(PC >> 8); push(PC >> 0); push(P() | 0x10); //B flag is set I = 1; D = 0; T = 0; PC.byte(0) = load16(0xfff6); L PC.byte(1) = load16(0xfff7); } auto HuC6280::instructionCallAbsolute() -> void { n16 address = operand(); address |= operand() << 8; idle(); idle(); push(PC - 1 >> 8); L push(PC - 1 >> 0); PC = address; } auto HuC6280::instructionChangeSpeedLow() -> void { idle(); CS = 12; L idle(); } auto HuC6280::instructionChangeSpeedHigh() -> void { idle(); CS = 3; L idle(); } auto HuC6280::instructionClear(n8& data) -> void { L idle(); data = 0; } auto HuC6280::instructionClear(bool& flag) -> void { L idle(); flag = 0; } auto HuC6280::instructionImmediate(fp alu, n8& data) -> void { L data = ALU(operand()); } auto HuC6280::instructionImmediateMemory(fp alu) -> void { auto a = A; A = load8(X); A = ALU(operand()); L store8(X, A); A = a; } auto HuC6280::instructionImplied(fp alu, n8& data) -> void { L idle(); data = ALU(data); } auto HuC6280::instructionIndirectRead(fp alu, n8& data, n8 index) -> void { auto zeropage = operand(); idle(); n16 absolute = load8(zeropage + index + 0); absolute |= load8(zeropage + index + 1) << 8; idle(); L data = ALU(load16(absolute)); } auto HuC6280::instructionIndirectReadMemory(fp alu, n8 index) -> void { auto a = A; A = load8(X); auto zeropage = operand(); idle(); n16 absolute = load8(zeropage + index + 0); absolute |= load8(zeropage + index + 1) << 8; idle(); A = ALU(load16(absolute)); L store8(X, A); A = a; } auto HuC6280::instructionIndirectWrite(n8 data, n8 index) -> void { auto zeropage = operand(); idle(); n16 absolute = load8(zeropage + index + 0); absolute |= load8(zeropage + index + 1) << 8; idle(); L store16(absolute, data); } auto HuC6280::instructionIndirectYRead(fp alu, n8& data) -> void { auto zeropage = operand(); idle(); n16 absolute = load8(zeropage + 0); absolute |= load8(zeropage + 1) << 8; idle(); L data = ALU(load16(absolute + Y)); } auto HuC6280::instructionIndirectYReadMemory(fp alu) -> void { auto a = A; A = load8(X); auto zeropage = operand(); idle(); n16 absolute = load8(zeropage + 0); absolute |= load8(zeropage + 1) << 8; idle(); A = ALU(load16(absolute + Y)); L store8(X, A); A = a; } auto HuC6280::instructionIndirectYWrite(n8 data) -> void { auto zeropage = operand(); idle(); n16 absolute = load8(zeropage + 0); absolute |= load8(zeropage + 1) << 8; idle(); L store16(absolute + Y, data); } auto HuC6280::instructionJumpAbsolute() -> void { n16 address = operand(); address |= operand() << 8; L idle(); PC = address; } auto HuC6280::instructionJumpIndirect(n8 index) -> void { n16 address = operand(); address |= operand() << 8; idle(); idle(); PC.byte(0) = load16(address + index + 0); L PC.byte(1) = load16(address + index + 1); } auto HuC6280::instructionNoOperation() -> void { L idle(); } auto HuC6280::instructionPull(n8& data) -> void { idle(); idle(); L data = pull(); Z = data == 0; N = data.bit(7); } auto HuC6280::instructionPullP() -> void { idle(); idle(); L P = pull() | 0x10; //B flag is set } auto HuC6280::instructionPush(n8 data) -> void { idle(); L push(data); } auto HuC6280::instructionResetMemoryBit(n3 index) -> void { auto zeropage = operand(); idle(); idle(); idle(); auto data = load8(zeropage); data.bit(index) = 0; L store8(zeropage, data); } auto HuC6280::instructionReturnInterrupt() -> void { idle(); idle(); idle(); P = pull(); PC.byte(0) = pull(); L PC.byte(1) = pull(); } auto HuC6280::instructionReturnSubroutine() -> void { idle(); idle(); idle(); PC.byte(0) = pull(); PC.byte(1) = pull(); L idle(); PC++; } auto HuC6280::instructionSet(bool& flag) -> void { L idle(); flag = 1; } auto HuC6280::instructionSetMemoryBit(n3 index) -> void { auto zeropage = operand(); idle(); idle(); idle(); auto data = load8(zeropage); data.bit(index) = 1; L store8(zeropage, data); } auto HuC6280::instructionStoreImplied(n2 index) -> void { auto data = operand(); idle(); idle(); L store(index, data); } auto HuC6280::instructionSwap(n8& lhs, n8& rhs) -> void { idle(); L idle(); swap(lhs, rhs); } auto HuC6280::instructionTestAbsolute(n8 index) -> void { auto mask = operand(); n16 absolute = operand(); absolute |= operand() << 8; idle(); idle(); idle(); L n8 data = load16(absolute + index); Z = (data & mask) == 0; V = data.bit(6); N = data.bit(7); } auto HuC6280::instructionTestZeroPage(n8 index) -> void { auto mask = operand(); auto zeropage = operand(); idle(); idle(); idle(); L n8 data = load8(zeropage + index); Z = (data & mask) == 0; V = data.bit(6); N = data.bit(7); } auto HuC6280::instructionTransfer(n8& source, n8& target) -> void { L idle(); target = source; Z = target == 0; N = target.bit(7); } auto HuC6280::instructionTransferAccumulatorToMPR() -> void { auto mask = operand(); idle(); idle(); L idle(); for(u32 index : range(8)) { if(mask.bit(index)) MPR[index] = MPL = A; } } auto HuC6280::instructionTransferMPRToAccumulator() -> void { auto mask = operand(); idle(); L idle(); if(mask) MPL = ~0; for(u32 index : range(8)) { //exact logic if multiple bits are set is unknown; but it is combinatorial if(mask.bit(index)) MPL &= MPR[index]; } //in the event no bits are set, A is loaded with the previously latched value A = MPL; } auto HuC6280::instructionTransferXS() -> void { L idle(); S = X; } auto HuC6280::instructionZeroPageModify(fp alu, n8 index) -> void { auto zeropage = operand(); idle(); idle(); auto data = ALU(load8(zeropage + index)); L store8(zeropage + index, data); } auto HuC6280::instructionZeroPageRead(fp alu, n8& data, n8 index) -> void { auto zeropage = operand(); idle(); L data = ALU(load8(zeropage + index)); } auto HuC6280::instructionZeroPageReadMemory(fp alu, n8 index) -> void { auto a = A; A = load8(X); auto zeropage = operand(); idle(); A = ALU(load8(zeropage + index)); L store8(X, A); A = a; } auto HuC6280::instructionZeroPageWrite(n8 data, n8 index) -> void { auto zeropage = operand(); idle(); L store8(zeropage + index, data); } ares-126/ares/component/processor/huc6280/memory.cpp000066400000000000000000000014631415063341600224130ustar00rootroot00000000000000inline auto HuC6280::load8(n8 address) -> n8 { step(CS); return read(MPR[1], address); } inline auto HuC6280::load16(n16 address) -> n8 { step(CS); return read(MPR[address >> 13], (n13)address); } inline auto HuC6280::store8(n8 address, n8 data) -> void { step(CS); return write(MPR[1], address, data); } inline auto HuC6280::store16(n16 address, n8 data) -> void { step(CS); return write(MPR[address >> 13], (n13)address, data); } // auto HuC6280::idle() -> void { step(CS); } inline auto HuC6280::opcode() -> n8 { return load16(PC++); } inline auto HuC6280::operand() -> n8 { return load16(PC++); } // inline auto HuC6280::push(n8 data) -> void { step(CS); write(MPR[1], 0x0100 | S--, data); } inline auto HuC6280::pull() -> n8 { step(CS); return read(MPR[1], 0x0100 | ++S); } ares-126/ares/component/processor/huc6280/serialization.cpp000066400000000000000000000004061415063341600237540ustar00rootroot00000000000000auto HuC6280::serialize(serializer& s) -> void { s(r.a); s(r.x); s(r.y); s(r.s); s(r.pc); s(r.mpr); s(r.mpl); s(r.cs); s(r.p.c); s(r.p.z); s(r.p.i); s(r.p.d); s(r.p.b); s(r.p.t); s(r.p.v); s(r.p.n); s(blockMove); s(random); } ares-126/ares/component/processor/m68000/000077500000000000000000000000001415063341600201265ustar00rootroot00000000000000ares-126/ares/component/processor/m68000/algorithms.cpp000066400000000000000000000116271415063341600230120ustar00rootroot00000000000000template auto M68000::ADD(n32 source, n32 target) -> n32 { target = clip(target); source = clip(source); u32 result = target + source + (extend ? r.x : 0); u32 carries = target ^ source ^ result; u32 overflow = (target ^ result) & (source ^ result); r.c = (carries ^ overflow) & msb(); r.v = overflow & msb(); r.z = clip(result) ? 0 : (extend ? r.z : 1); r.n = sign(result) < 0; r.x = r.c; return clip(result); } template auto M68000::AND(n32 source, n32 target) -> n32 { u32 result = target & source; r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; return clip(result); } template auto M68000::ASL(n32 result, u32 shift) -> n32 { bool carry = false; u32 overflow = 0; for(auto _ : range(shift)) { carry = result & msb(); u32 before = result; result <<= 1; overflow |= before ^ result; } r.c = carry; r.v = sign(overflow) < 0; r.z = clip(result) == 0; r.n = sign(result) < 0; if(shift) r.x = r.c; return clip(result); } template auto M68000::ASR(n32 result, u32 shift) -> n32 { bool carry = false; u32 overflow = 0; for(auto _ : range(shift)) { carry = result & lsb(); u32 before = result; result = sign(result) >> 1; overflow |= before ^ result; } r.c = carry; r.v = sign(overflow) < 0; r.z = clip(result) == 0; r.n = sign(result) < 0; if(shift) r.x = r.c; return clip(result); } template auto M68000::CMP(n32 source, n32 target) -> n32 { target = clip(target); source = clip(source); u32 result = target - source; u32 carries = target ^ source ^ result; u32 overflow = (target ^ result) & (source ^ target); r.c = (carries ^ overflow) & msb(); r.v = overflow & msb(); r.z = clip(result) == 0; r.n = sign(result) < 0; return clip(result); } template auto M68000::EOR(n32 source, n32 target) -> n32 { u32 result = target ^ source; r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; return clip(result); } template auto M68000::LSL(n32 result, u32 shift) -> n32 { bool carry = false; for(auto _ : range(shift)) { carry = result & msb(); result <<= 1; } r.c = carry; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; if(shift) r.x = r.c; return clip(result); } template auto M68000::LSR(n32 result, u32 shift) -> n32 { bool carry = false; for(auto _ : range(shift)) { carry = result & lsb(); result >>= 1; } r.c = carry; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; if(shift) r.x = r.c; return clip(result); } template auto M68000::OR(n32 source, n32 target) -> n32 { u32 result = target | source; r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; return clip(result); } template auto M68000::ROL(n32 result, u32 shift) -> n32 { bool carry = false; for(auto _ : range(shift)) { carry = result & msb(); result = result << 1 | carry; } r.c = carry; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; return clip(result); } template auto M68000::ROR(n32 result, u32 shift) -> n32 { bool carry = false; for(auto _ : range(shift)) { carry = result & lsb(); result >>= 1; if(carry) result |= msb(); } r.c = carry; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; return clip(result); } template auto M68000::ROXL(n32 result, u32 shift) -> n32 { bool carry = r.x; for(auto _ : range(shift)) { bool extend = carry; carry = result & msb(); result = result << 1 | extend; } r.c = carry; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; r.x = r.c; return clip(result); } template auto M68000::ROXR(n32 result, u32 shift) -> n32 { bool carry = r.x; for(auto _ : range(shift)) { bool extend = carry; carry = result & lsb(); result >>= 1; if(extend) result |= msb(); } r.c = carry; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; r.x = r.c; return clip(result); } template auto M68000::SUB(n32 source, n32 target) -> n32 { target = clip(target); source = clip(source); u32 result = target - source - (extend ? r.x : 0); u32 carries = target ^ source ^ result; u32 overflow = (target ^ result) & (source ^ target); r.c = (carries ^ overflow) & msb(); r.v = overflow & msb(); r.z = clip(result) ? 0 : (extend ? r.z : 1); r.n = sign(result) < 0; r.x = r.c; return result; } ares-126/ares/component/processor/m68000/conditions.cpp000066400000000000000000000012001415063341600227740ustar00rootroot00000000000000auto M68000::condition(n4 condition) -> bool { switch(condition) { case 0: return true; //T case 1: return false; //F case 2: return !r.c && !r.z; //HI case 3: return r.c || r.z; //LS case 4: return !r.c; //CC,HS case 5: return r.c; //CS,LO case 6: return !r.z; //NE case 7: return r.z; //EQ case 8: return !r.v; //VC case 9: return r.v; //VS case 10: return !r.n; //PL case 11: return r.n; //MI case 12: return r.n == r.v; //GE case 13: return r.n != r.v; //LT case 14: return r.n == r.v && !r.z; //GT case 15: return r.n != r.v || r.z; //LE } unreachable; } ares-126/ares/component/processor/m68000/disassembler.cpp000066400000000000000000000607141415063341600233170ustar00rootroot00000000000000template<> auto M68000::_read(n32 address) -> n32 { if(address & 1) { return read(0, 1, address & ~1).byte(0); } else { return read(1, 0, address & ~1).byte(1); } } template<> auto M68000::_read(n32 address) -> n32 { return read(1, 1, address & ~1); } template<> auto M68000::_read(n32 address) -> n32 { n32 data = _read(address + 0) << 16; return data | _read(address + 2) << 0; } template auto M68000::_readPC() -> n32 { auto data = _read(_pc); _pc += Size == Long ? 4 : 2; return clip(data); } auto M68000::_readDisplacement(n32 base) -> n32 { return base + (i16)_readPC(); } auto M68000::_readIndex(n32 base) -> n32 { auto extension = _readPC(); auto index = extension & 0x8000 ? read(AddressRegister{extension >> 12}) : read(DataRegister{extension >> 12}); if(!(extension & 0x800)) index = (i16)index; return base + index + (i8)extension; } auto M68000::_dataRegister(DataRegister dr) -> string { return {"d", dr.number}; } auto M68000::_addressRegister(AddressRegister ar) -> string { return {"a", ar.number}; } template auto M68000::_immediate() -> string { return {"#$", hex(_readPC(), 2 << Size)}; } template auto M68000::_address(EffectiveAddress& ea) -> string { if(ea.mode == 2) return {_addressRegister(AddressRegister{ea.reg})}; if(ea.mode == 5) return {"$", hex(_readDisplacement(read(AddressRegister{ea.reg})), 6L)}; if(ea.mode == 6) return {"$", hex(_readIndex(read(AddressRegister{ea.reg})), 6L)}; if(ea.mode == 7) { auto imm = _readPC(); return {"$", imm >= 0x8000 ? hex((i16)imm, 6L, 'f') : hex((i16)imm, 6L, '0') }; } if(ea.mode == 8) return {"$", hex(_readPC(), 6L)}; if(ea.mode == 9) return {"$", hex(_pc + (i16)_readPC(), 6L)}; if(ea.mode == 10) return {"$", hex(_readIndex(_pc), 6L)}; return "???"; //should never occur (modes 0, 1, 3, 4, 11 are not valid for LEA) } template auto M68000::_effectiveAddress(EffectiveAddress& ea) -> string { if(ea.mode == 0) return {_dataRegister(DataRegister{ea.reg})}; if(ea.mode == 1) return {_addressRegister(AddressRegister{ea.reg})}; if(ea.mode == 2) return {"(", _addressRegister(AddressRegister{ea.reg}), ")"}; if(ea.mode == 3) return {"(", _addressRegister(AddressRegister{ea.reg}), ")+"}; if(ea.mode == 4) return {"-(", _addressRegister(AddressRegister{ea.reg}), ")"}; if(ea.mode == 5) return {"($", hex(_readDisplacement(read(AddressRegister{ea.reg})), 6L), ")"}; if(ea.mode == 6) return {"($", hex(_readIndex(read(AddressRegister{ea.reg})), 6L), ")"}; if(ea.mode == 7) { auto imm = _readPC(); return {"($", imm >= 0x8000 ? hex((i16)imm, 6L, 'f') : hex((i16)imm, 6L, '0'), ")"}; } if(ea.mode == 8) return {"($", hex(_readPC(), 6L), ")"}; if(ea.mode == 9) return {"($", hex(_readDisplacement(_pc), 6L), ")"}; if(ea.mode == 10) return {"($", hex(_readIndex(_pc), 6L), ")"}; if(ea.mode == 11) return {"#$", hex(_readPC(), 2 << Size)}; return "???"; //should never occur } auto M68000::_branch(n8 displacement) -> string { n16 extension = _readPC(); _pc -= 2; i32 offset = displacement ? sign(displacement) : sign(extension); return {"$", hex(_pc + offset, 6L)}; } template auto M68000::_suffix() -> string { return Size == Byte ? ".b" : Size == Word ? ".w" : ".l"; } auto M68000::_condition(n4 condition) -> string { static const string conditions[16] = { "t ", "f ", "hi", "ls", "cc", "cs", "ne", "eq", "vc", "vs", "pl", "mi", "ge", "lt", "gt", "le", }; return conditions[condition]; } auto M68000::disassembleInstruction(n32 pc) -> string { _pc = pc; return {hex(_read(_pc), 4L), " ", pad(disassembleTable[_readPC()](), -49)}; } auto M68000::disassembleContext() -> string { return { "d0:", hex(r.d[0], 8L), " ", "d1:", hex(r.d[1], 8L), " ", "d2:", hex(r.d[2], 8L), " ", "d3:", hex(r.d[3], 8L), " ", "d4:", hex(r.d[4], 8L), " ", "d5:", hex(r.d[5], 8L), " ", "d6:", hex(r.d[6], 8L), " ", "d7:", hex(r.d[7], 8L), " ", "a0:", hex(r.a[0], 8L), " ", "a1:", hex(r.a[1], 8L), " ", "a2:", hex(r.a[2], 8L), " ", "a3:", hex(r.a[3], 8L), " ", "a4:", hex(r.a[4], 8L), " ", "a5:", hex(r.a[5], 8L), " ", "a6:", hex(r.a[6], 8L), " ", "a7:", hex(r.a[7], 8L), " ", "sp:", hex(r.sp, 8L), " ", r.t ? "T" : "t", r.s ? "S" : "s", (u32)r.i, r.c ? "C" : "c", r.v ? "V" : "v", r.z ? "Z" : "z", r.n ? "N" : "n", r.x ? "X" : "x", " ", }; } // auto M68000::disassembleABCD(EffectiveAddress from, EffectiveAddress with) -> string { return {"abcd ", _effectiveAddress(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleADD(EffectiveAddress from, DataRegister with) -> string { return {"add", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } template auto M68000::disassembleADD(DataRegister from, EffectiveAddress with) -> string { return {"add", _suffix(), " ", _dataRegister(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleADDA(EffectiveAddress from, AddressRegister with) -> string { return {"adda", _suffix(), " ", _effectiveAddress(from), ",", _addressRegister(with)}; } template auto M68000::disassembleADDI(EffectiveAddress with) -> string { return {"addi", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } template auto M68000::disassembleADDQ(n4 immediate, EffectiveAddress with) -> string { return {"addq", _suffix(), " #", immediate, ",", _effectiveAddress(with)}; } template auto M68000::disassembleADDQ(n4 immediate, AddressRegister with) -> string { return {"addq", _suffix(), " #", immediate, ",", _addressRegister(with)}; } template auto M68000::disassembleADDX(EffectiveAddress from, EffectiveAddress with) -> string { return {"addx", _suffix(), " ", _effectiveAddress(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleAND(EffectiveAddress from, DataRegister with) -> string { return {"and", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } template auto M68000::disassembleAND(DataRegister from, EffectiveAddress with) -> string { return {"and", _suffix(), " ", _dataRegister(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleANDI(EffectiveAddress ea) -> string { return {"andi", _suffix(), " ", _immediate(), ",", _effectiveAddress(ea)}; } auto M68000::disassembleANDI_TO_CCR() -> string { return {"andi ", _immediate(), ",ccr"}; } auto M68000::disassembleANDI_TO_SR() -> string { return {"andi ", _immediate(), ",sr"}; } template auto M68000::disassembleASL(n4 count, DataRegister with) -> string { return {"asl", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleASL(DataRegister from, DataRegister with) -> string { return {"asl", _suffix(), " ", _dataRegister(from), ",", _dataRegister(with)}; } auto M68000::disassembleASL(EffectiveAddress with) -> string { return {"asl", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleASR(n4 count, DataRegister modify) -> string { return {"asr", _suffix(), " #", count, ",", _dataRegister(modify)}; } template auto M68000::disassembleASR(DataRegister from, DataRegister modify) -> string { return {"asr", _suffix(), " ", _dataRegister(from), ",", _dataRegister(modify)}; } auto M68000::disassembleASR(EffectiveAddress with) -> string { return {"asr", _suffix(), " ", _effectiveAddress(with)}; } auto M68000::disassembleBCC(n4 test, n8 displacement) -> string { auto cc = _condition(test); return {"b", cc, " ", _branch(displacement)}; } template auto M68000::disassembleBCHG(DataRegister bit, EffectiveAddress with) -> string { return {"bchg", _suffix(), " ", _dataRegister(bit), ",", _effectiveAddress(with)}; } template auto M68000::disassembleBCHG(EffectiveAddress with) -> string { return {"bchg", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } template auto M68000::disassembleBCLR(DataRegister bit, EffectiveAddress with) -> string { return {"bclr", _suffix(), " ", _dataRegister(bit), ",", _effectiveAddress(with)}; } template auto M68000::disassembleBCLR(EffectiveAddress with) -> string { return {"bclr", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } auto M68000::disassembleBRA(n8 displacement) -> string { return {"bra ", _branch(displacement)}; } template auto M68000::disassembleBSET(DataRegister bit, EffectiveAddress with) -> string { return {"bset", _suffix(), " ", _dataRegister(bit), ",", _effectiveAddress(with)}; } template auto M68000::disassembleBSET(EffectiveAddress with) -> string { return {"bset", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } auto M68000::disassembleBSR(n8 displacement) -> string { return {"bsr ", _branch(displacement)}; } template auto M68000::disassembleBTST(DataRegister bit, EffectiveAddress with) -> string { return {"btst", _suffix(), " ", _dataRegister(bit), ",", _effectiveAddress(with)}; } template auto M68000::disassembleBTST(EffectiveAddress with) -> string { return {"btst", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } auto M68000::disassembleCHK(DataRegister compare, EffectiveAddress maximum) -> string { return {"chk", _suffix(), " ", _effectiveAddress(maximum), ",", _dataRegister(compare)}; } template auto M68000::disassembleCLR(EffectiveAddress ea) -> string { return {"clr", _suffix(), " ", _effectiveAddress(ea)}; } template auto M68000::disassembleCMP(EffectiveAddress from, DataRegister with) -> string { return {"cmp", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } template auto M68000::disassembleCMPA(EffectiveAddress from, AddressRegister with) -> string { return {"cmpa", _suffix(), " ", _effectiveAddress(from), ",", _addressRegister(with)}; } template auto M68000::disassembleCMPI(EffectiveAddress with) -> string { return {"cmpi", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } template auto M68000::disassembleCMPM(EffectiveAddress from, EffectiveAddress with) -> string { return {"cmpm", _suffix(), " ", _effectiveAddress(from), ",", _effectiveAddress(with)}; } auto M68000::disassembleDBCC(n4 condition, DataRegister with) -> string { auto base = _pc; auto displacement = (i16)_readPC(); return {"db", _condition(condition), " ", _dataRegister(with), ",$", hex(base + displacement, 6L)}; } auto M68000::disassembleDIVS(EffectiveAddress from, DataRegister with) -> string { return {"divs", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } auto M68000::disassembleDIVU(EffectiveAddress from, DataRegister with) -> string { return {"divu", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } template auto M68000::disassembleEOR(DataRegister from, EffectiveAddress with) -> string { return {"eor", _suffix(), " ", _dataRegister(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleEORI(EffectiveAddress with) -> string { return {"eori", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } auto M68000::disassembleEORI_TO_CCR() -> string { return {"eori ", _immediate(), ",ccr"}; } auto M68000::disassembleEORI_TO_SR() -> string { return {"eori ", _immediate(), ",sr"}; } auto M68000::disassembleEXG(DataRegister x, DataRegister y) -> string { return {"exg ", _dataRegister(x), ",", _dataRegister(y)}; } auto M68000::disassembleEXG(AddressRegister x, AddressRegister y) -> string { return {"exg ", _addressRegister(x), ",", _addressRegister(y)}; } auto M68000::disassembleEXG(DataRegister x, AddressRegister y) -> string { return {"exg ", _dataRegister(x), ",", _addressRegister(y)}; } template auto M68000::disassembleEXT(DataRegister with) -> string { return {"ext", _suffix(), " ", _dataRegister(with)}; } auto M68000::disassembleILLEGAL(n16 code) -> string { if(code.bit(12,15) == 0xa) return {"linea $", hex((n12)code, 3L)}; if(code.bit(12,15) == 0xf) return {"linef $", hex((n12)code, 3L)}; return {"illegal "}; } auto M68000::disassembleJMP(EffectiveAddress from) -> string { return {"jmp ", _effectiveAddress(from)}; } auto M68000::disassembleJSR(EffectiveAddress from) -> string { return {"jsr ", _effectiveAddress(from)}; } auto M68000::disassembleLEA(EffectiveAddress from, AddressRegister with) -> string { return {"lea ", _address(from), ",", _addressRegister(with)}; } auto M68000::disassembleLINK(AddressRegister with) -> string { return {"link ", _addressRegister(with), ",", _immediate()}; } template auto M68000::disassembleLSL(n4 count, DataRegister with) -> string { return {"lsl", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleLSL(DataRegister from, DataRegister with) -> string { return {"lsl", _suffix(), " ", _dataRegister(from), ",", _dataRegister(with)}; } auto M68000::disassembleLSL(EffectiveAddress with) -> string { return {"lsl", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleLSR(n4 count, DataRegister with) -> string { return {"lsr", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleLSR(DataRegister from, DataRegister with) -> string { return {"lsr", _suffix(), " ", _dataRegister(from), ",", _dataRegister(with)}; } auto M68000::disassembleLSR(EffectiveAddress with) -> string { return {"lsr", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleMOVE(EffectiveAddress from, EffectiveAddress to) -> string { return {"move", _suffix(), " ", _effectiveAddress(from), ",", _effectiveAddress(to)}; } template auto M68000::disassembleMOVEA(EffectiveAddress from, AddressRegister to) -> string { return {"movea ", _effectiveAddress(from), ",", _addressRegister(to)}; } template auto M68000::disassembleMOVEM_TO_MEM(EffectiveAddress to) -> string { string op{"movem", _suffix(), " "}; n16 list = _readPC(); string regs; for(u32 lhs = 0; lhs < 8; lhs++) { if(!list.bit(0 + lhs)) continue; regs.append(_dataRegister(DataRegister{lhs})); if(lhs == 7 || !list.bit(1 + lhs)) { regs.append(","); continue; } for(u32 rhs = lhs; rhs < 8; rhs++) { if(rhs == 7 || !list.bit(1 + rhs)) { regs.append("-", _dataRegister(DataRegister{rhs}), ","); lhs = rhs; break; } } } regs.trimRight(","); if(regs && list >> 8) regs.append("/"); for(u32 lhs = 0; lhs < 8; lhs++) { if(!list.bit(8 + lhs)) continue; regs.append(_addressRegister(AddressRegister{lhs})); if(lhs == 7 || !list.bit(9 + lhs)) { regs.append(","); continue; } for(u32 rhs = lhs; rhs < 8; rhs++) { if(rhs == 7 || !list.bit(9 + rhs)) { regs.append("-", _addressRegister(AddressRegister{rhs}), ","); lhs = rhs; break; } } } regs.trimRight(","); if(!regs) regs = "-"; return {op, regs, ",", _effectiveAddress(to)}; } template auto M68000::disassembleMOVEM_TO_REG(EffectiveAddress from) -> string { string op{"movem", _suffix(), " "}; n16 list = _readPC(); string regs; for(u32 lhs = 0; lhs < 8; lhs++) { if(!list.bit(0 + lhs)) continue; regs.append(_dataRegister(DataRegister{lhs})); if(lhs == 7 || !list.bit(1 + lhs)) { regs.append(","); continue; } for(u32 rhs = lhs; rhs < 8; rhs++) { if(rhs == 7 || !list.bit(1 + rhs)) { regs.append("-", _dataRegister(DataRegister{rhs}), ","); lhs = rhs; break; } } } regs.trimRight(","); if(regs && list >> 8) regs.append("/"); for(u32 lhs = 0; lhs < 8; lhs++) { if(!list.bit(8 + lhs)) continue; regs.append(_addressRegister(AddressRegister{lhs})); if(lhs == 7 || !list.bit(9 + lhs)) { regs.append(","); continue; } for(u32 rhs = lhs; rhs < 8; rhs++) { if(rhs == 7 || !list.bit(9 + rhs)) { regs.append("-", _addressRegister(AddressRegister{rhs}), ","); lhs = rhs; break; } } } regs.trimRight(","); if(!regs) regs = "-"; return {op, _effectiveAddress(from), ",", regs}; } template auto M68000::disassembleMOVEP(DataRegister from, EffectiveAddress to) -> string { return {"movep", _suffix(), " ", _dataRegister(from), ",", _effectiveAddress(to)}; } template auto M68000::disassembleMOVEP(EffectiveAddress from, DataRegister to) -> string { return {"movep", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(to)}; } auto M68000::disassembleMOVEQ(n8 immediate, DataRegister to) -> string { return {"moveq #$", hex(immediate, 2L), ",", _dataRegister(to)}; } auto M68000::disassembleMOVE_FROM_SR(EffectiveAddress to) -> string { return {"move sr,", _effectiveAddress(to)}; } auto M68000::disassembleMOVE_TO_CCR(EffectiveAddress from) -> string { return {"move ", _effectiveAddress(from), ",ccr"}; } auto M68000::disassembleMOVE_TO_SR(EffectiveAddress from) -> string { return {"move ", _effectiveAddress(from), ",sr"}; } auto M68000::disassembleMOVE_FROM_USP(AddressRegister to) -> string { return {"move usp,", _addressRegister(to)}; } auto M68000::disassembleMOVE_TO_USP(AddressRegister from) -> string { return {"move ", _addressRegister(from), ",usp"}; } auto M68000::disassembleMULS(EffectiveAddress from, DataRegister with) -> string { return {"muls", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } auto M68000::disassembleMULU(EffectiveAddress from, DataRegister with) -> string { return {"mulu", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } auto M68000::disassembleNBCD(EffectiveAddress with) -> string { return {"nbcd ", _effectiveAddress(with)}; } template auto M68000::disassembleNEG(EffectiveAddress with) -> string { return {"neg", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleNEGX(EffectiveAddress with) -> string { return {"negx", _suffix(), " ", _effectiveAddress(with)}; } auto M68000::disassembleNOP() -> string { return {"nop "}; } template auto M68000::disassembleNOT(EffectiveAddress with) -> string { return {"not", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleOR(EffectiveAddress from, DataRegister with) -> string { return {"or", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } template auto M68000::disassembleOR(DataRegister from, EffectiveAddress with) -> string { return {"or", _suffix(), " ", _dataRegister(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleORI(EffectiveAddress with) -> string { return {"ori", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } auto M68000::disassembleORI_TO_CCR() -> string { return {"ori ", _immediate(), ",ccr"}; } auto M68000::disassembleORI_TO_SR() -> string { return {"ori ", _immediate(), ",sr"}; } auto M68000::disassemblePEA(EffectiveAddress from) -> string { return {"pea ", _effectiveAddress(from)}; } auto M68000::disassembleRESET() -> string { return {"reset "}; } template auto M68000::disassembleROL(n4 count, DataRegister with) -> string { return {"rol", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleROL(DataRegister from, DataRegister with) -> string { return {"rol", _suffix(), " ", _dataRegister(from), ",", _dataRegister(with)}; } auto M68000::disassembleROL(EffectiveAddress with) -> string { return {"rol", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleROR(n4 count, DataRegister with) -> string { return {"ror", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleROR(DataRegister from, DataRegister with) -> string { return {"ror", _suffix(), " ", _dataRegister(from) ,",", _dataRegister(with)}; } auto M68000::disassembleROR(EffectiveAddress with) -> string { return {"ror", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleROXL(n4 count, DataRegister with) -> string { return {"roxl", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleROXL(DataRegister from, DataRegister with) -> string { return {"roxl", _suffix(), " ", _dataRegister(from), ",", _dataRegister(with)}; } auto M68000::disassembleROXL(EffectiveAddress with) -> string { return {"roxl", _suffix(), " ", _effectiveAddress(with)}; } template auto M68000::disassembleROXR(n4 count, DataRegister with) -> string { return {"roxr", _suffix(), " #", count, ",", _dataRegister(with)}; } template auto M68000::disassembleROXR(DataRegister from, DataRegister with) -> string { return {"roxr", _suffix(), " ", _dataRegister(from), ",", _dataRegister(with)}; } auto M68000::disassembleROXR(EffectiveAddress with) -> string { return {"roxr", _suffix(), " ", _effectiveAddress(with)}; } auto M68000::disassembleRTE() -> string { return {"rte "}; } auto M68000::disassembleRTR() -> string { return {"rtr "}; } auto M68000::disassembleRTS() -> string { return {"rts "}; } auto M68000::disassembleSBCD(EffectiveAddress from, EffectiveAddress with) -> string { return {"sbcd ", _effectiveAddress(from), ",", _effectiveAddress(with)}; } auto M68000::disassembleSCC(n4 test, EffectiveAddress to) -> string { return {"s", _condition(test), " ", _effectiveAddress(to)}; } auto M68000::disassembleSTOP() -> string { return {"stop ", _immediate()}; } template auto M68000::disassembleSUB(EffectiveAddress from, DataRegister with) -> string { return {"sub", _suffix(), " ", _effectiveAddress(from), ",", _dataRegister(with)}; } template auto M68000::disassembleSUB(DataRegister from, EffectiveAddress with) -> string { return {"sub", _suffix(), " ", _dataRegister(from), ",", _effectiveAddress(with)}; } template auto M68000::disassembleSUBA(EffectiveAddress from, AddressRegister with) -> string { return {"suba", _suffix(), " ", _effectiveAddress(from), ",", _addressRegister(with)}; } template auto M68000::disassembleSUBI(EffectiveAddress with) -> string { return {"subi", _suffix(), " ", _immediate(), ",", _effectiveAddress(with)}; } template auto M68000::disassembleSUBQ(n4 immediate, EffectiveAddress with) -> string { return {"subq", _suffix(), " #", immediate, ",", _effectiveAddress(with)}; } template auto M68000::disassembleSUBQ(n4 immediate, AddressRegister with) -> string { return {"subq", _suffix(), " #", immediate, ",", _addressRegister(with)}; } template auto M68000::disassembleSUBX(EffectiveAddress from, EffectiveAddress with) -> string { return {"subx", _suffix(), " ", _effectiveAddress(from), ",", _effectiveAddress(with)}; } auto M68000::disassembleSWAP(DataRegister with) -> string { return {"swap ", _dataRegister(with)}; } auto M68000::disassembleTAS(EffectiveAddress with) -> string { return {"tas ", _effectiveAddress(with)}; } auto M68000::disassembleTRAP(n4 vector) -> string { return {"trap #", vector}; } auto M68000::disassembleTRAPV() -> string { return {"trapv "}; } template auto M68000::disassembleTST(EffectiveAddress from) -> string { return {"tst", _suffix(), " ", _effectiveAddress(from)}; } auto M68000::disassembleUNLK(AddressRegister with) -> string { return {"unlk ", _addressRegister(with)}; } ares-126/ares/component/processor/m68000/effective-address.cpp000066400000000000000000000142221415063341600242160ustar00rootroot00000000000000//used by JMP and JSR: as PC is guaranteed to change, avoid performing any unnecessary prefetches auto M68000::prefetched(EffectiveAddress& ea) -> n32 { if(ea.valid) return ea.address; ea.valid = true; switch(ea.mode) { case AddressRegisterIndirect: { return ea.address = r.a[ea.reg]; } case AddressRegisterIndirectWithDisplacement: { idle(2); return ea.address = r.a[ea.reg] + (i16)prefetched(); } case AddressRegisterIndirectWithIndex: { idle(6); auto extension = prefetched(); auto index = extension & 0x8000 ? r.a[extension >> 12 & 7] : r.d[extension >> 12 & 7]; if(!(extension & 0x800)) index = (i16)index; return ea.address = r.a[ea.reg] + index + (i8)extension; } case AbsoluteShortIndirect: { idle(2); return ea.address = (i16)prefetched(); } case AbsoluteLongIndirect: { auto hi = prefetch(); auto lo = prefetched(); return ea.address = hi << 16 | lo << 0; } case ProgramCounterIndirectWithDisplacement: { idle(2); auto base = r.pc - 2; return ea.address = base + (i16)prefetched(); } case ProgramCounterIndirectWithIndex: { idle(6); auto base = r.pc - 2; auto extension = prefetched(); auto index = extension & 0x8000 ? r.a[extension >> 12 & 7] : r.d[extension >> 12 & 7]; if(!(extension & 0x800)) index = (i16)index; return ea.address = base + index + (i8)extension; } } return ea.address = 0; //should never occur } template auto M68000::fetch(EffectiveAddress& ea) -> n32 { if(ea.valid) return ea.address; ea.valid = true; switch(ea.mode) { case DataRegisterDirect: { return ea.address = read(DataRegister{ea.reg}); } case AddressRegisterDirect: { return ea.address = read(AddressRegister{ea.reg}); } case AddressRegisterIndirect: { return ea.address = read(AddressRegister{ea.reg}); } case AddressRegisterIndirectWithPostIncrement: { return ea.address = read(AddressRegister{ea.reg}); } case AddressRegisterIndirectWithPreDecrement: { return ea.address = read(AddressRegister{ea.reg}); } case AddressRegisterIndirectWithDisplacement: { return ea.address = read(AddressRegister{ea.reg}) + (i16)extension(); } case AddressRegisterIndirectWithIndex: { idle(2); auto data = extension(); auto index = data & 0x8000 ? read(AddressRegister{data >> 12}) : read(DataRegister{data >> 12}); if(!(data & 0x800)) index = (i16)index; return ea.address = read(AddressRegister{ea.reg}) + index + (i8)data; } case AbsoluteShortIndirect: { return ea.address = (i16)extension(); } case AbsoluteLongIndirect: { return ea.address = extension(); } case ProgramCounterIndirectWithDisplacement: { auto base = r.pc - 2; return ea.address = base + (i16)extension(); } case ProgramCounterIndirectWithIndex: { idle(2); auto base = r.pc - 2; auto data = extension(); auto index = data & 0x8000 ? read(AddressRegister{data >> 12}) : read(DataRegister{data >> 12}); if(!(data & 0x800)) index = (i16)index; return ea.address = base + index + (i8)data; } case Immediate: { return ea.address = extension(); } } return ea.address = 0; //should never occur } template auto M68000::read(EffectiveAddress& ea) -> n32 { fetch(ea); switch(ea.mode) { case DataRegisterDirect: { return clip(ea.address); } case AddressRegisterDirect: { return sign(ea.address); } case AddressRegisterIndirect: { return read(ea.address); } case AddressRegisterIndirectWithPostIncrement: { auto address = ea.address + (ea.reg == 7 && Size == Byte ? bytes() : bytes()); auto data = read(ea.address); if(!hold) write(AddressRegister{ea.reg}, ea.address = address); return data; } case AddressRegisterIndirectWithPreDecrement: { if(!fast) idle(2); auto address = ea.address - (ea.reg == 7 && Size == Byte ? bytes() : bytes()); auto data = read(address); if(!hold) write(AddressRegister{ea.reg}, ea.address = address); return data; } case AddressRegisterIndirectWithDisplacement: { return read(ea.address); } case AddressRegisterIndirectWithIndex: { return read(ea.address); } case AbsoluteShortIndirect: { return read(ea.address); } case AbsoluteLongIndirect: { return read(ea.address); } case ProgramCounterIndirectWithDisplacement: { return read(ea.address); } case ProgramCounterIndirectWithIndex: { return read(ea.address); } case Immediate: { return clip(ea.address); } } return 0; } template auto M68000::write(EffectiveAddress& ea, n32 data) -> void { fetch(ea); switch(ea.mode) { case DataRegisterDirect: { return write(DataRegister{ea.reg}, data); } case AddressRegisterDirect: { return write(AddressRegister{ea.reg}, data); } case AddressRegisterIndirect: { return write(ea.address, data); } case AddressRegisterIndirectWithPostIncrement: { auto address = ea.address + (ea.reg == 7 && Size == Byte ? bytes() : bytes()); write(ea.address, data); if(!hold) write(AddressRegister{ea.reg}, ea.address = address); return; } case AddressRegisterIndirectWithPreDecrement: { auto address = ea.address - (ea.reg == 7 && Size == Byte ? bytes() : bytes()); write(address, data); if(!hold) write(AddressRegister{ea.reg}, ea.address = address); return; } case AddressRegisterIndirectWithDisplacement: { return write(ea.address, data); } case AddressRegisterIndirectWithIndex: { return write(ea.address, data); } case AbsoluteShortIndirect: { return write(ea.address, data); } case AbsoluteLongIndirect: { return write(ea.address, data); } case ProgramCounterIndirectWithDisplacement: { return write(ea.address, data); } case ProgramCounterIndirectWithIndex: { return write(ea.address, data); } case Immediate: { return; } } } ares-126/ares/component/processor/m68000/instruction.cpp000066400000000000000000001116601415063341600232200ustar00rootroot00000000000000auto M68000::instruction() -> void { if(!r.stop) { r.ird = r.ir; return instructionTable[r.ird](); } else { wait(1); } } M68000::M68000() { #define bind(id, name, ...) { \ assert(!instructionTable[id]); \ instructionTable[id] = [=] { return instruction##name(__VA_ARGS__); }; \ disassembleTable[id] = [=] { return disassemble##name(__VA_ARGS__); }; \ } #define unbind(id) { \ instructionTable[id].reset(); \ disassembleTable[id].reset(); \ } #define pattern(s) \ std::integral_constant::value //ABCD for(n3 treg : range(8)) for(n3 sreg : range(8)) { auto opcode = pattern("1100 ---1 0000 ----") | treg << 9 | sreg << 0; EffectiveAddress dataWith{DataRegisterDirect, treg}; EffectiveAddress dataFrom{DataRegisterDirect, sreg}; bind(opcode | 0 << 3, ABCD, dataFrom, dataWith); EffectiveAddress addressWith{AddressRegisterIndirectWithPreDecrement, treg}; EffectiveAddress addressFrom{AddressRegisterIndirectWithPreDecrement, sreg}; bind(opcode | 1 << 3, ABCD, addressFrom, addressWith); } //ADD for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1101 ---0 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 5) continue; EffectiveAddress from{mode, reg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ADD, from, with); bind(opcode | 1 << 6, ADD, from, with); bind(opcode | 2 << 6, ADD, from, with); if(mode == 1) unbind(opcode | 0 << 6); } //ADD for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1101 ---1 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; DataRegister from{dreg}; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, ADD, from, with); bind(opcode | 1 << 6, ADD, from, with); bind(opcode | 2 << 6, ADD, from, with); } //ADDA for(n3 areg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1101 ---+ 11-- ----") | areg << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 5) continue; AddressRegister with{areg}; EffectiveAddress from{mode, reg}; bind(opcode | 0 << 8, ADDA, from, with); bind(opcode | 1 << 8, ADDA, from, with); } //ADDI for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 0110 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, ADDI, with); bind(opcode | 1 << 6, ADDI, with); bind(opcode | 2 << 6, ADDI, with); } //ADDQ for(n3 data : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0101 ---0 ++-- ----") | data << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 2) continue; n4 immediate = data ? (n4)data : (n4)8; if(mode != 1) { EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, ADDQ, immediate, with); bind(opcode | 1 << 6, ADDQ, immediate, with); bind(opcode | 2 << 6, ADDQ, immediate, with); } else { AddressRegister with{reg}; bind(opcode | 1 << 6, ADDQ, immediate, with); bind(opcode | 2 << 6, ADDQ, immediate, with); } } //ADDX for(n3 xreg : range(8)) for(n3 yreg : range(8)) { auto opcode = pattern("1101 ---1 ++00 ----") | xreg << 9 | yreg << 0; EffectiveAddress dataWith{DataRegisterDirect, xreg}; EffectiveAddress dataFrom{DataRegisterDirect, yreg}; bind(opcode | 0 << 6 | 0 << 3, ADDX, dataFrom, dataWith); bind(opcode | 1 << 6 | 0 << 3, ADDX, dataFrom, dataWith); bind(opcode | 2 << 6 | 0 << 3, ADDX, dataFrom, dataWith); EffectiveAddress addressWith{AddressRegisterIndirectWithPreDecrement, xreg}; EffectiveAddress addressFrom{AddressRegisterIndirectWithPreDecrement, yreg}; bind(opcode | 0 << 6 | 1 << 3, ADDX, addressFrom, addressWith); bind(opcode | 1 << 6 | 1 << 3, ADDX, addressFrom, addressWith); bind(opcode | 2 << 6 | 1 << 3, ADDX, addressFrom, addressWith); } //AND for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1100 ---0 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; EffectiveAddress from{mode, reg}; DataRegister with{dreg}; bind(opcode | 0 << 6, AND, from, with); bind(opcode | 1 << 6, AND, from, with); bind(opcode | 2 << 6, AND, from, with); } //AND for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1100 ---1 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; DataRegister from{dreg}; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, AND, from, with); bind(opcode | 1 << 6, AND, from, with); bind(opcode | 2 << 6, AND, from, with); } //ANDI for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 0010 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, ANDI, with); bind(opcode | 1 << 6, ANDI, with); bind(opcode | 2 << 6, ANDI, with); } //ANDI_TO_CCR { auto opcode = pattern("0000 0010 0011 1100"); bind(opcode, ANDI_TO_CCR); } //ANDI_TO_SR { auto opcode = pattern("0000 0010 0111 1100"); bind(opcode, ANDI_TO_SR); } //ASL (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++00 0---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, ASL, count, with); bind(opcode | 1 << 6, ASL, count, with); bind(opcode | 2 << 6, ASL, count, with); } //ASL (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++10 0---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ASL, from, with); bind(opcode | 1 << 6, ASL, from, with); bind(opcode | 2 << 6, ASL, from, with); } //ASL (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0001 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, ASL, with); } //ASR (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++00 0---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, ASR, count, with); bind(opcode | 1 << 6, ASR, count, with); bind(opcode | 2 << 6, ASR, count, with); } //ASR (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++10 0---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ASR, from, with); bind(opcode | 1 << 6, ASR, from, with); bind(opcode | 2 << 6, ASR, from, with); } //ASR (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0000 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, ASR, with); } //BCC for(n4 test : range( 16)) for(n8 displacement : range(256)) { if(test <= 1) continue; auto opcode = pattern("0110 ---- ---- ----") | test << 8 | displacement << 0; bind(opcode, BCC, test, displacement); } //BCHG (register) for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 ---1 01-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; DataRegister bit{dreg}; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BCHG, bit, with); if(mode != 0) bind(opcode, BCHG, bit, with); } //BCHG (immediate) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 1000 01-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BCHG, with); if(mode != 0) bind(opcode, BCHG, with); } //BCLR (register) for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 ---1 10-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; DataRegister bit{dreg}; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BCLR, bit, with); if(mode != 0) bind(opcode, BCLR, bit, with); } //BCLR (immediate) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 1000 10-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BCLR, with); if(mode != 0) bind(opcode, BCLR, with); } //BRA for(n8 displacement : range(256)) { auto opcode = pattern("0110 0000 ---- ----") | displacement << 0; bind(opcode, BRA, displacement); } //BSET (register) for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 ---1 11-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; DataRegister bit{dreg}; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BSET, bit, with); if(mode != 0) bind(opcode, BSET, bit, with); } //BSET (immediate) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 1000 11-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BSET, with); if(mode != 0) bind(opcode, BSET, with); } //BSR for(n8 displacement : range(256)) { auto opcode = pattern("0110 0001 ---- ----") | displacement << 0; bind(opcode, BSR, displacement); } //BTST (register) for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 ---1 00-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; DataRegister bit{dreg}; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BTST, bit, with); if(mode != 0) bind(opcode, BTST, bit, with); } //BTST (immediate) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 1000 00-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 4)) continue; EffectiveAddress with{mode, reg}; if(mode == 0) bind(opcode, BTST, with); if(mode != 0) bind(opcode, BTST, with); } //CHK for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 ---1 10-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; DataRegister compare{dreg}; EffectiveAddress maximum{mode, reg}; bind(opcode, CHK, compare, maximum); } //CLR for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0010 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, CLR, with); bind(opcode | 1 << 6, CLR, with); bind(opcode | 2 << 6, CLR, with); } //CMP for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1011 ---0 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 5) continue; DataRegister with{dreg}; EffectiveAddress from{mode, reg}; bind(opcode | 0 << 6, CMP, from, with); bind(opcode | 1 << 6, CMP, from, with); bind(opcode | 2 << 6, CMP, from, with); if(mode == 1) unbind(opcode | 0 << 6); } //CMPA for(n3 areg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1011 ---+ 11-- ----") | areg << 9 | mode << 3 | reg << 0; AddressRegister with{areg}; EffectiveAddress from{mode, reg}; bind(opcode | 0 << 8, CMPA, from, with); bind(opcode | 1 << 8, CMPA, from, with); } //CMPI for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 1100 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, CMPI, with); bind(opcode | 1 << 6, CMPI, with); bind(opcode | 2 << 6, CMPI, with); } //CMPM for(n3 xreg : range(8)) for(n3 yreg : range(8)) { auto opcode = pattern("1011 ---1 ++00 1---") | xreg << 9 | yreg << 0; EffectiveAddress with{AddressRegisterIndirectWithPostIncrement, xreg}; EffectiveAddress from{AddressRegisterIndirectWithPostIncrement, yreg}; bind(opcode | 0 << 6, CMPM, from, with); bind(opcode | 1 << 6, CMPM, from, with); bind(opcode | 2 << 6, CMPM, from, with); } //DBCC for(n4 condition : range(16)) for(n3 dreg : range( 8)) { auto opcode = pattern("0101 ---- 1100 1---") | condition << 8 | dreg << 0; DataRegister with{dreg}; bind(opcode, DBCC, condition, with); } //DIVS for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1000 ---1 11-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; DataRegister with{dreg}; EffectiveAddress from{mode, reg}; bind(opcode, DIVS, from, with); } //DIVU for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1000 ---0 11-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; DataRegister with{dreg}; EffectiveAddress from{mode, reg}; bind(opcode, DIVU, from, with); } //EOR for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1011 ---1 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; DataRegister from{dreg}; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, EOR, from, with); bind(opcode | 1 << 6, EOR, from, with); bind(opcode | 2 << 6, EOR, from, with); } //EORI for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 1010 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, EORI, with); bind(opcode | 1 << 6, EORI, with); bind(opcode | 2 << 6, EORI, with); } //EORI_TO_CCR { auto opcode = pattern("0000 1010 0011 1100"); bind(opcode, EORI_TO_CCR); } //EORI_TO_SR { auto opcode = pattern("0000 1010 0111 1100"); bind(opcode, EORI_TO_SR); } //EXG for(n3 xreg : range(8)) for(n3 yreg : range(8)) { auto opcode = pattern("1100 ---1 0100 0---") | xreg << 9 | yreg << 0; DataRegister x{xreg}; DataRegister y{yreg}; bind(opcode, EXG, x, y); } //EXG for(n3 xreg : range(8)) for(n3 yreg : range(8)) { auto opcode = pattern("1100 ---1 0100 1---") | xreg << 9 | yreg << 0; AddressRegister x{xreg}; AddressRegister y{yreg}; bind(opcode, EXG, x, y); } //EXG for(n3 xreg : range(8)) for(n3 yreg : range(8)) { auto opcode = pattern("1100 ---1 1000 1---") | xreg << 9 | yreg << 0; DataRegister x{xreg}; AddressRegister y{yreg}; bind(opcode, EXG, x, y); } //EXT for(n3 dreg : range(8)) { auto opcode = pattern("0100 1000 1+00 0---") | dreg << 0; DataRegister with{dreg}; bind(opcode | 0 << 6, EXT, with); bind(opcode | 1 << 6, EXT, with); } //ILLEGAL { auto opcode = pattern("0100 1010 1111 1100"); bind(opcode, ILLEGAL, opcode); } //JMP for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1110 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || mode == 3 || mode == 4 || (mode == 7 && reg >= 4)) continue; EffectiveAddress from{mode, reg}; bind(opcode, JMP, from); } //JSR for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1110 10-- ----") | mode << 3 | reg << 0; if(mode <= 1 || mode == 3 || mode == 4 || (mode == 7 && reg >= 4)) continue; EffectiveAddress from{mode, reg}; bind(opcode, JSR, from); } //LEA for(n3 areg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 ---1 11-- ----") | areg << 9 | mode << 3 | reg << 0; if(mode <= 1 || mode == 3 || mode == 4 || (mode == 7 && reg >= 4)) continue; AddressRegister to{areg}; EffectiveAddress from{mode, reg}; bind(opcode, LEA, from, to); } //LINK for(n3 areg : range(8)) { auto opcode = pattern("0100 1110 0101 0---") | areg << 0; AddressRegister with{areg}; bind(opcode, LINK, with); } //LSL (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++00 1---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, LSL, count, with); bind(opcode | 1 << 6, LSL, count, with); bind(opcode | 2 << 6, LSL, count, with); } //LSL (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++10 1---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, LSL, from, with); bind(opcode | 1 << 6, LSL, from, with); bind(opcode | 2 << 6, LSL, from, with); } //LSL (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0011 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, LSL, with); } //LSR (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++00 1---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, LSR, count, with); bind(opcode | 1 << 6, LSR, count, with); bind(opcode | 2 << 6, LSR, count, with); } //LSR (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++10 1---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, LSR, from, with); bind(opcode | 1 << 6, LSR, from, with); bind(opcode | 2 << 6, LSR, from, with); } //LSR (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0010 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, LSR, with); } //MOVE for(n3 toReg : range(8)) for(n3 toMode : range(8)) for(n3 fromMode : range(8)) for(n3 fromReg : range(8)) { auto opcode = pattern("00++ ---- ---- ----") | toReg << 9 | toMode << 6 | fromMode << 3 | fromReg << 0; if(toMode == 1 || (toMode == 7 && toReg >= 2)) continue; if(fromMode == 7 && fromReg >= 5) continue; EffectiveAddress to{toMode, toReg}; EffectiveAddress from{fromMode, fromReg}; bind(opcode | 1 << 12, MOVE, from, to); bind(opcode | 3 << 12, MOVE, from, to); bind(opcode | 2 << 12, MOVE, from, to); if(fromMode == 1) unbind(opcode | 1 << 12); } //MOVEA for(n3 areg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("00++ ---0 01-- ----") | areg << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 5) continue; AddressRegister to{areg}; EffectiveAddress from{mode, reg}; bind(opcode | 3 << 12, MOVEA, from, to); bind(opcode | 2 << 12, MOVEA, from, to); } //MOVEM for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1000 1+-- ----") | mode << 3 | reg << 0; if(mode <= 1 || mode == 3 || (mode == 7 && reg >= 2)) continue; EffectiveAddress to{mode, reg}; bind(opcode | 0 << 6, MOVEM_TO_MEM, to); bind(opcode | 1 << 6, MOVEM_TO_MEM, to); } //MOVEM for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1100 1+-- ----") | mode << 3 | reg << 0; if(mode <= 1 || mode == 4 || (mode == 7 && reg >= 4)) continue; EffectiveAddress from{mode, reg}; bind(opcode | 0 << 6, MOVEM_TO_REG, from); bind(opcode | 1 << 6, MOVEM_TO_REG, from); } //MOVEP for(n3 dreg : range(8)) for(n3 areg : range(8)) { auto opcode = pattern("0000 ---1 1+00 1---") | dreg << 9 | areg << 0; DataRegister from{dreg}; EffectiveAddress to{AddressRegisterIndirectWithDisplacement, areg}; bind(opcode | 0 << 6, MOVEP, from, to); bind(opcode | 1 << 6, MOVEP, from, to); } //MOVEP for(n3 dreg : range(8)) for(n3 areg : range(8)) { auto opcode = pattern("0000 ---1 0+00 1---") | dreg << 9 | areg << 0; DataRegister to{dreg}; EffectiveAddress from{AddressRegisterIndirectWithDisplacement, areg}; bind(opcode | 0 << 6, MOVEP, from, to); bind(opcode | 1 << 6, MOVEP, from, to); } //MOVEQ for(n3 dreg : range( 8)) for(n8 immediate : range(256)) { auto opcode = pattern("0111 ---0 ---- ----") | dreg << 9 | immediate << 0; DataRegister to{dreg}; bind(opcode, MOVEQ, immediate, to); } //MOVE_FROM_SR for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0000 11-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress to{mode, reg}; bind(opcode, MOVE_FROM_SR, to); } //MOVE_TO_CCR for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0100 11-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; EffectiveAddress from{mode, reg}; bind(opcode, MOVE_TO_CCR, from); } //MOVE_TO_SR for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0110 11-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; EffectiveAddress from{mode, reg}; bind(opcode, MOVE_TO_SR, from); } //MOVE_FROM_USP for(n3 areg : range(8)) { auto opcode = pattern("0100 1110 0110 1---") | areg << 0; AddressRegister to{areg}; bind(opcode, MOVE_FROM_USP, to); } //MOVE_TO_USP for(n3 areg : range(8)) { auto opcode = pattern("0100 1110 0110 0---") | areg << 0; AddressRegister from{areg}; bind(opcode, MOVE_TO_USP, from); } //MULS for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1100 ---1 11-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; DataRegister with{dreg}; EffectiveAddress from{mode, reg}; bind(opcode, MULS, from, with); } //MULU for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1100 ---0 11-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; DataRegister with{dreg}; EffectiveAddress from{mode, reg}; bind(opcode, MULU, from, with); } //NBCD for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1000 00-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, NBCD, with); } //NEG for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0100 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, NEG, with); bind(opcode | 1 << 6, NEG, with); bind(opcode | 2 << 6, NEG, with); } //NEGX for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0000 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, NEGX, with); bind(opcode | 1 << 6, NEGX, with); bind(opcode | 2 << 6, NEGX, with); } //NOP { auto opcode = pattern("0100 1110 0111 0001"); bind(opcode, NOP); } //NOT for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 0110 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, NOT, with); bind(opcode | 1 << 6, NOT, with); bind(opcode | 2 << 6, NOT, with); } //OR for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1000 ---0 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 5)) continue; EffectiveAddress from{mode, reg}; DataRegister with{dreg}; bind(opcode | 0 << 6, OR, from, with); bind(opcode | 1 << 6, OR, from, with); bind(opcode | 2 << 6, OR, from, with); } //OR for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1000 ---1 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; DataRegister from{dreg}; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, OR, from, with); bind(opcode | 1 << 6, OR, from, with); bind(opcode | 2 << 6, OR, from, with); } //ORI for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 0000 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, ORI, with); bind(opcode | 1 << 6, ORI, with); bind(opcode | 2 << 6, ORI, with); } //ORI_TO_CCR { auto opcode = pattern("0000 0000 0011 1100"); bind(opcode, ORI_TO_CCR); } //ORI_TO_SR { auto opcode = pattern("0000 0000 0111 1100"); bind(opcode, ORI_TO_SR); } //PEA for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1000 01-- ----") | mode << 3 | reg << 0; if(mode <= 1 || mode == 3 || mode == 4 || (mode == 7 && reg >= 4)) continue; EffectiveAddress from{mode, reg}; bind(opcode, PEA, from); } //RESET { auto opcode = pattern("0100 1110 0111 0000"); bind(opcode, RESET); } //ROL (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++01 1---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, ROL, count, with); bind(opcode | 1 << 6, ROL, count, with); bind(opcode | 2 << 6, ROL, count, with); } //ROL (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++11 1---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ROL, from, with); bind(opcode | 1 << 6, ROL, from, with); bind(opcode | 2 << 6, ROL, from, with); } //ROL (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0111 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, ROL, with); } //ROR (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++01 1---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, ROR, count, with); bind(opcode | 1 << 6, ROR, count, with); bind(opcode | 2 << 6, ROR, count, with); } //ROR (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++11 1---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ROR, from, with); bind(opcode | 1 << 6, ROR, from, with); bind(opcode | 2 << 6, ROR, from, with); } //ROR (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0110 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, ROR, with); } //ROXL (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++01 0---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, ROXL, count, with); bind(opcode | 1 << 6, ROXL, count, with); bind(opcode | 2 << 6, ROXL, count, with); } //ROXL (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---1 ++11 0---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ROXL, from, with); bind(opcode | 1 << 6, ROXL, from, with); bind(opcode | 2 << 6, ROXL, from, with); } //ROXL (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0101 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, ROXL, with); } //ROXR (immediate) for(n3 immediate : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++01 0---") | immediate << 9 | dreg << 0; auto count = immediate ? (n4)immediate : (n4)8; DataRegister with{dreg}; bind(opcode | 0 << 6, ROXR, count, with); bind(opcode | 1 << 6, ROXR, count, with); bind(opcode | 2 << 6, ROXR, count, with); } //ROXR (register) for(n3 sreg : range(8)) for(n3 dreg : range(8)) { auto opcode = pattern("1110 ---0 ++11 0---") | sreg << 9 | dreg << 0; DataRegister from{sreg}; DataRegister with{dreg}; bind(opcode | 0 << 6, ROXR, from, with); bind(opcode | 1 << 6, ROXR, from, with); bind(opcode | 2 << 6, ROXR, from, with); } //ROXR (effective address) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1110 0100 11-- ----") | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, ROXR, with); } //RTE { auto opcode = pattern("0100 1110 0111 0011"); bind(opcode, RTE); } //RTR { auto opcode = pattern("0100 1110 0111 0111"); bind(opcode, RTR); } //RTS { auto opcode = pattern("0100 1110 0111 0101"); bind(opcode, RTS); } //SBCD for(n3 treg : range(8)) for(n3 sreg : range(8)) { auto opcode = pattern("1000 ---1 0000 ----") | treg << 9 | sreg << 0; EffectiveAddress dataWith{DataRegisterDirect, treg}; EffectiveAddress dataFrom{DataRegisterDirect, sreg}; bind(opcode | 0 << 3, SBCD, dataFrom, dataWith); EffectiveAddress addressWith{AddressRegisterIndirectWithPreDecrement, treg}; EffectiveAddress addressFrom{AddressRegisterIndirectWithPreDecrement, sreg}; bind(opcode | 1 << 3, SBCD, addressFrom, addressWith); } //SCC for(n4 test : range(16)) for(n3 mode : range( 8)) for(n3 reg : range( 8)) { auto opcode = pattern("0101 ---- 11-- ----") | test << 8 | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress to{mode, reg}; bind(opcode, SCC, test, to); } //STOP { auto opcode = pattern("0100 1110 0111 0010"); bind(opcode, STOP); } //SUB for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1001 ---0 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 5) continue; EffectiveAddress from{mode, reg}; DataRegister to{dreg}; bind(opcode | 0 << 6, SUB, from, to); bind(opcode | 1 << 6, SUB, from, to); bind(opcode | 2 << 6, SUB, from, to); if(mode == 1) unbind(opcode | 0 << 6); } //SUB for(n3 dreg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1001 ---1 ++-- ----") | dreg << 9 | mode << 3 | reg << 0; if(mode <= 1 || (mode == 7 && reg >= 2)) continue; DataRegister from{dreg}; EffectiveAddress to{mode, reg}; bind(opcode | 0 << 6, SUB, from, to); bind(opcode | 1 << 6, SUB, from, to); bind(opcode | 2 << 6, SUB, from, to); } //SUBA for(n3 areg : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("1001 ---+ 11-- ----") | areg << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 5) continue; AddressRegister to{areg}; EffectiveAddress from{mode, reg}; bind(opcode | 0 << 8, SUBA, from, to); bind(opcode | 1 << 8, SUBA, from, to); } //SUBI for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0000 0100 ++-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, SUBI, with); bind(opcode | 1 << 6, SUBI, with); bind(opcode | 2 << 6, SUBI, with); } //SUBQ for(n3 data : range(8)) for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0101 ---1 ++-- ----") | data << 9 | mode << 3 | reg << 0; if(mode == 7 && reg >= 2) continue; auto immediate = data ? (n4)data : (n4)8; if(mode != 1) { EffectiveAddress with{mode, reg}; bind(opcode | 0 << 6, SUBQ, immediate, with); bind(opcode | 1 << 6, SUBQ, immediate, with); bind(opcode | 2 << 6, SUBQ, immediate, with); } else { AddressRegister with{reg}; bind(opcode | 1 << 6, SUBQ, immediate, with); bind(opcode | 2 << 6, SUBQ, immediate, with); } } //SUBX for(n3 treg : range(8)) for(n3 sreg : range(8)) { auto opcode = pattern("1001 ---1 ++00 ----") | treg << 9 | sreg << 0; EffectiveAddress dataWith{DataRegisterDirect, treg}; EffectiveAddress dataFrom{DataRegisterDirect, sreg}; bind(opcode | 0 << 6 | 0 << 3, SUBX, dataFrom, dataWith); bind(opcode | 1 << 6 | 0 << 3, SUBX, dataFrom, dataWith); bind(opcode | 2 << 6 | 0 << 3, SUBX, dataFrom, dataWith); EffectiveAddress addressWith{AddressRegisterIndirectWithPreDecrement, treg}; EffectiveAddress addressFrom{AddressRegisterIndirectWithPreDecrement, sreg}; bind(opcode | 0 << 6 | 1 << 3, SUBX, addressFrom, addressWith); bind(opcode | 1 << 6 | 1 << 3, SUBX, addressFrom, addressWith); bind(opcode | 2 << 6 | 1 << 3, SUBX, addressFrom, addressWith); } //SWAP for(n3 dreg : range(8)) { auto opcode = pattern("0100 1000 0100 0---") | dreg << 0; DataRegister with{dreg}; bind(opcode, SWAP, with); } //TAS for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1010 11-- ----") | mode << 3 | reg << 0; if(mode == 1 || (mode == 7 && reg >= 2)) continue; EffectiveAddress with{mode, reg}; bind(opcode, TAS, with); } //TRAP for(n4 vector : range(16)) { auto opcode = pattern("0100 1110 0100 ----") | vector << 0; bind(opcode, TRAP, vector); } //TRAPV { auto opcode = pattern("0100 1110 0111 0110"); bind(opcode, TRAPV); } //TST for(n3 mode : range(8)) for(n3 reg : range(8)) { auto opcode = pattern("0100 1010 ++-- ----") | mode << 3 | reg << 0; if(mode == 7 && reg >= 2) continue; EffectiveAddress from{mode, reg}; bind(opcode | 0 << 6, TST, from); bind(opcode | 1 << 6, TST, from); bind(opcode | 2 << 6, TST, from); if(mode == 1) unbind(opcode | 0 << 6); } //UNLK for(n3 areg : range(8)) { auto opcode = pattern("0100 1110 0101 1---") | areg << 0; AddressRegister with{areg}; bind(opcode, UNLK, with); } //ILLEGAL for(n16 opcode : range(65536)) { if(instructionTable[opcode]) continue; bind(opcode, ILLEGAL, opcode); } #undef bind #undef unbind #undef pattern } ares-126/ares/component/processor/m68000/instructions.cpp000066400000000000000000001057361415063341600234120ustar00rootroot00000000000000auto M68000::instructionABCD(EffectiveAddress from, EffectiveAddress with) -> void { if(from.mode == DataRegisterDirect) idle(2); auto target = read(with); auto source = read(from); auto result = source + target + r.x; bool c = false; bool v = false; if(((target ^ source ^ result) & 0x10) || (result & 0x0f) >= 0x0a) { auto previous = result; result += 0x06; v |= ((~previous & 0x80) & (result & 0x80)); } if(result >= 0xa0) { auto previous = result; result += 0x60; c = true; v |= ((~previous & 0x80) & (result & 0x80)); } prefetch(); write(with, result); r.c = c; r.v = v; r.z = clip(result) ? 0 : r.z; r.n = sign(result) < 0; r.x = r.c; } template auto M68000::instructionADD(EffectiveAddress from, DataRegister with) -> void { if constexpr(Size == Long) { if(from.mode == DataRegisterDirect || from.mode == AddressRegisterDirect || from.mode == Immediate) { idle(4); } else { idle(2); } } auto source = read(from); auto target = read(with); auto result = ADD(source, target); prefetch(); write(with, result); } template auto M68000::instructionADD(DataRegister from, EffectiveAddress with) -> void { auto source = read(from); auto target = read(with); auto result = ADD(source, target); prefetch(); write(with, result); } template auto M68000::instructionADDA(EffectiveAddress from, AddressRegister with) -> void { if(Size != Long || from.mode == DataRegisterDirect || from.mode == AddressRegisterDirect || from.mode == Immediate) { idle(4); } else { idle(2); } auto source = sign(read(from)); auto target = read(with); prefetch(); write(with, source + target); } template auto M68000::instructionADDI(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = extension(); auto target = read(with); auto result = ADD(source, target); prefetch(); write(with, result); } template auto M68000::instructionADDQ(n4 immediate, EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = immediate; auto target = read(with); auto result = ADD(source, target); prefetch(); write(with, result); } //Size is ignored: always uses Long template auto M68000::instructionADDQ(n4 immediate, AddressRegister with) -> void { idle(4); auto result = read(with) + immediate; prefetch(); write(with, result); } template auto M68000::instructionADDX(EffectiveAddress from, EffectiveAddress with) -> void { if constexpr(Size == Long) { if(from.mode == DataRegisterDirect) idle(4); } auto target = read(with); auto source = read(from); auto result = ADD(source, target); prefetch(); write(with, result); } template auto M68000::instructionAND(EffectiveAddress from, DataRegister with) -> void { if constexpr(Size == Long) { if(from.mode == DataRegisterDirect || from.mode == Immediate) { idle(4); } else { idle(2); } } auto source = read(from); auto target = read(with); auto result = AND(source, target); prefetch(); write(with, result); } template auto M68000::instructionAND(DataRegister from, EffectiveAddress with) -> void { auto source = read(from); auto target = read(with); auto result = AND(source, target); prefetch(); write(with, result); } template auto M68000::instructionANDI(EffectiveAddress with) -> void { if constexpr(Size == Long) { //note: m68000um.pdf erroneously lists ANDI.L #,Dn as 14(3/0), but is in fact 16(3/0) if(with.mode == DataRegisterDirect) idle(4); } auto source = extension(); auto target = read(with); auto result = AND(source, target); prefetch(); write(with, result); } auto M68000::instructionANDI_TO_CCR() -> void { auto data = extension(); writeCCR(readCCR() & data); idle(8); read(r.pc); prefetch(); } auto M68000::instructionANDI_TO_SR() -> void { if(supervisor()) { auto data = extension(); writeSR(readSR() & data); idle(8); read(r.pc); } prefetch(); } template auto M68000::instructionASL(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = ASL(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionASL(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = ASL(read(with), count); prefetch(); write(with, result); } auto M68000::instructionASL(EffectiveAddress with) -> void { auto result = ASL(read(with), 1); prefetch(); write(with, result); } template auto M68000::instructionASR(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = ASR(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionASR(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = ASR(read(with), count); prefetch(); write(with, result); } auto M68000::instructionASR(EffectiveAddress with) -> void { auto result = ASR(read(with), 1); prefetch(); write(with, result); } auto M68000::instructionBCC(n4 test, n8 displacement) -> void { if(!condition(test)) { idle(4); if(!displacement) prefetch(); } else { idle(2); auto offset = displacement ? (s8)displacement : (s16)prefetched() - 2; r.pc -= 2; r.pc += offset; prefetch(); } prefetch(); } template auto M68000::instructionBCHG(DataRegister bit, EffectiveAddress with) -> void { auto index = read(bit) & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(index < 16 ? 2 : 4); } auto test = read(with); r.z = test.bit(index) == 0; test.bit(index) ^= 1; prefetch(); write(with, test); } template auto M68000::instructionBCHG(EffectiveAddress with) -> void { auto index = extension() & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(index < 16 ? 2 : 4); } auto test = read(with); r.z = test.bit(index) == 0; test.bit(index) ^= 1; prefetch(); write(with, test); } template auto M68000::instructionBCLR(DataRegister bit, EffectiveAddress with) -> void { auto index = read(bit) & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(index < 16 ? 4 : 6); } auto test = read(with); r.z = test.bit(index) == 0; test.bit(index) = 0; prefetch(); write(with, test); } template auto M68000::instructionBCLR(EffectiveAddress with) -> void { auto index = extension() & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(index < 16 ? 4 : 6); } auto test = read(with); r.z = test.bit(index) == 0; test.bit(index) = 0; prefetch(); write(with, test); } auto M68000::instructionBRA(n8 displacement) -> void { idle(2); auto offset = displacement ? (s8)displacement : (s16)prefetched() - 2; r.pc -= 2; r.pc += offset; prefetch(); prefetch(); } template auto M68000::instructionBSET(DataRegister bit, EffectiveAddress with) -> void { auto index = read(bit) & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(index < 16 ? 2 : 4); } auto test = read(with); r.z = test.bit(index) == 0; test.bit(index) = 1; prefetch(); write(with, test); } template auto M68000::instructionBSET(EffectiveAddress with) -> void { auto index = extension() & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(index < 16 ? 2 : 4); } auto test = read(with); r.z = test.bit(index) == 0; test.bit(index) = 1; prefetch(); write(with, test); } auto M68000::instructionBSR(n8 displacement) -> void { idle(2); auto offset = displacement ? (s8)displacement : (s16)prefetched() - 2; r.pc -= 2; push(r.pc); r.pc += offset; prefetch(); prefetch(); } template auto M68000::instructionBTST(DataRegister bit, EffectiveAddress with) -> void { auto index = read(bit) & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(2); } auto test = read(with); r.z = test.bit(index) == 0; prefetch(); } template auto M68000::instructionBTST(EffectiveAddress with) -> void { auto index = extension() & bits() - 1; if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(2); } auto test = read(with); r.z = test.bit(index) == 0; prefetch(); } auto M68000::instructionCHK(DataRegister compare, EffectiveAddress maximum) -> void { idle(6); auto source = read(maximum); auto target = read(compare); r.z = clip(target) == 0; r.n = sign(target) < 0; if(r.n) return exception(Exception::BoundsCheck, Vector::BoundsCheck); auto result = (n64)target - source; r.c = sign(result >> 1) < 0; r.v = sign((target ^ source) & (target ^ result)) < 0; r.z = clip(result) == 0; r.n = sign(result) < 0; if(r.n == r.v && !r.z) return exception(Exception::BoundsCheck, Vector::BoundsCheck); prefetch(); } template auto M68000::instructionCLR(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect || with.mode == AddressRegisterDirect) idle(2); } read(with); prefetch(); write(with, 0); r.c = 0; r.v = 0; r.z = 1; r.n = 0; } template auto M68000::instructionCMP(EffectiveAddress from, DataRegister with) -> void { if constexpr(Size == Long) idle(2); auto source = read(from); auto target = read(with); CMP(source, target); prefetch(); } template auto M68000::instructionCMPA(EffectiveAddress from, AddressRegister with) -> void { idle(2); auto source = sign(read(from)); auto target = read(with); CMP(source, target); prefetch(); } template auto M68000::instructionCMPI(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(2); } auto source = extension(); auto target = read(with); CMP(source, target); prefetch(); } template auto M68000::instructionCMPM(EffectiveAddress from, EffectiveAddress with) -> void { auto source = read(from); auto target = read(with); CMP(source, target); prefetch(); } auto M68000::instructionDBCC(n4 test, DataRegister with) -> void { auto displacement = extension(); if(condition(test)) { idle(4); } else { n16 result = read(with); write(with, result - 1); if(result) { idle(2); r.pc -= 4; r.pc += sign(displacement); prefetch(); } else { idle(2); } } prefetch(); } auto M68000::instructionDIVS(EffectiveAddress from, DataRegister with) -> void { n32 dividend = read(with), odividend = dividend; n32 divisor = read(from) << 16, odivisor = divisor; if(divisor == 0) { return exception(Exception::DivisionByZero, Vector::DivisionByZero); } if(divisor >> 31) { divisor = -divisor; } if(dividend >> 31) { dividend = -dividend; idle(2); } r.c = 0; if(r.v = dividend >= divisor) { r.z = 0; r.n = 1; idle(14); prefetch(); return; } n16 quotient = 0; bool carry = 0; u32 ticks = 12; for(u32 index : range(15)) { dividend = dividend << 1; quotient = quotient << 1 | carry; if(carry = dividend >= divisor) dividend -= divisor; ticks += !carry ? 8 : 6; } quotient = quotient << 1 | carry; dividend = dividend << 1; if(carry = dividend >= divisor) dividend -= divisor; quotient = quotient << 1 | carry; ticks += 4; if(odivisor >> 31) { ticks += 16; if(odividend >> 31) { if(quotient >> 15) r.v = 1; dividend = -dividend; } else { quotient = -quotient; if(quotient && !(quotient >> 15)) r.v = 1; } } else if(odividend >> 31) { ticks += 18; quotient = -quotient; if(quotient && !(quotient >> 15)) r.v = 1; dividend = -dividend; } else { ticks += 14; if(quotient >> 15) r.v = 1; } if(r.v) { r.z = 0; r.n = 1; idle(ticks); prefetch(); return; } r.z = quotient == 0; r.n = quotient < 0; idle(ticks); write(with, dividend | quotient); prefetch(); } auto M68000::instructionDIVU(EffectiveAddress from, DataRegister with) -> void { n32 dividend = read(with); n32 divisor = read(from) << 16; if(divisor == 0) { return exception(Exception::DivisionByZero, Vector::DivisionByZero); } r.c = 0; if(r.v = dividend >= divisor) { r.z = 0; r.n = 1; idle(10); prefetch(); return; } n16 quotient = 0; bool force = 0; bool carry = 0; u32 ticks = 6; for(u32 index : range(16)) { force = dividend >> 31; dividend = dividend << 1; quotient = quotient << 1 | carry; if(carry = force || dividend >= divisor) dividend -= divisor; ticks += !carry ? 8 : !force ? 6 : 4; } ticks += force ? 6 : carry ? 4 : 2; quotient = quotient << 1 | carry; r.z = quotient == 0; r.n = quotient < 0; idle(ticks); write(with, dividend | quotient); prefetch(); } template auto M68000::instructionEOR(DataRegister from, EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = read(from); auto target = read(with); auto result = EOR(source, target); prefetch(); write(with, result); } template auto M68000::instructionEORI(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = extension(); auto target = read(with); auto result = EOR(source, target); prefetch(); write(with, result); } auto M68000::instructionEORI_TO_CCR() -> void { auto data = extension(); writeCCR(readCCR() ^ data); idle(8); read(r.pc); prefetch(); } auto M68000::instructionEORI_TO_SR() -> void { if(supervisor()) { auto data = extension(); writeSR(readSR() ^ data); idle(8); read(r.pc); } prefetch(); } auto M68000::instructionEXG(DataRegister x, DataRegister y) -> void { idle(2); auto z = read(x); write(x, read(y)); write(y, z); prefetch(); } auto M68000::instructionEXG(AddressRegister x, AddressRegister y) -> void { idle(2); auto z = read(x); write(x, read(y)); write(y, z); prefetch(); } auto M68000::instructionEXG(DataRegister x, AddressRegister y) -> void { idle(2); auto z = read(x); write(x, read(y)); write(y, z); prefetch(); } template<> auto M68000::instructionEXT(DataRegister with) -> void { auto result = (i8)read(with); write(with, result); r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; prefetch(); } template<> auto M68000::instructionEXT(DataRegister with) -> void { auto result = (i16)read(with); write(with, result); r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; prefetch(); } auto M68000::instructionILLEGAL(n16 code) -> void { idle(6); if(code.bit(12,15) == 0xa) return exception(Exception::Illegal, Vector::IllegalLineA); if(code.bit(12,15) == 0xf) return exception(Exception::Illegal, Vector::IllegalLineF); return exception(Exception::Illegal, Vector::IllegalInstruction); } auto M68000::instructionJMP(EffectiveAddress from) -> void { r.pc = prefetched(from); prefetch(); prefetch(); } auto M68000::instructionJSR(EffectiveAddress from) -> void { auto ir = prefetched(from); auto pc = r.pc; r.pc = ir; prefetch(); push(pc - 2); prefetch(); } auto M68000::instructionLEA(EffectiveAddress from, AddressRegister to) -> void { if(from.mode == AddressRegisterIndirectWithIndex) idle(2); write(to, fetch(from)); prefetch(); } auto M68000::instructionLINK(AddressRegister with) -> void { auto displacement = (i16)extension(); auto sp = AddressRegister{7}; push(read(with)); write(with, read(sp)); write(sp, read(sp) + displacement); prefetch(); } template auto M68000::instructionLSL(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = LSL(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionLSL(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = LSL(read(with), count); prefetch(); write(with, result); } auto M68000::instructionLSL(EffectiveAddress with) -> void { auto result = LSL(read(with), 1); prefetch(); write(with, result); } template auto M68000::instructionLSR(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = LSR(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionLSR(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = LSR(read(with), count); prefetch(); write(with, result); } auto M68000::instructionLSR(EffectiveAddress with) -> void { auto result = LSR(read(with), 1); prefetch(); write(with, result); } //todo: move memory,(xxx).l should interleave extension fetches with writes template auto M68000::instructionMOVE(EffectiveAddress from, EffectiveAddress to) -> void { auto data = read(from); r.c = 0; r.v = 0; r.z = clip(data) == 0; r.n = sign(data) < 0; if(to.mode == AddressRegisterIndirectWithPreDecrement) { prefetch(); write(to, data); } else { write(to, data); prefetch(); } } template auto M68000::instructionMOVEA(EffectiveAddress from, AddressRegister to) -> void { auto data = sign(read(from)); write(to, data); prefetch(); } template auto M68000::instructionMOVEM_TO_MEM(EffectiveAddress to) -> void { auto list = extension(); auto addr = fetch(to); for(u32 n : range(16)) { if(!list.bit(n)) continue; //pre-decrement mode traverses registers in reverse order {A7-A0, D7-D0} u32 index = to.mode == AddressRegisterIndirectWithPreDecrement ? 15 - n : n; if(to.mode == AddressRegisterIndirectWithPreDecrement) addr -= bytes(); auto data = index < 8 ? read(DataRegister{index}) : read(AddressRegister{index}); write(addr, data); if(to.mode != AddressRegisterIndirectWithPreDecrement) addr += bytes(); } AddressRegister with{to.reg}; if(to.mode == AddressRegisterIndirectWithPreDecrement ) write(with, addr); if(to.mode == AddressRegisterIndirectWithPostIncrement) write(with, addr); prefetch(); } template auto M68000::instructionMOVEM_TO_REG(EffectiveAddress from) -> void { auto list = extension(); auto addr = fetch(from); for(u32 n : range(16)) { if(!list.bit(n)) continue; u32 index = from.mode == AddressRegisterIndirectWithPreDecrement ? 15 - n : n; if(from.mode == AddressRegisterIndirectWithPreDecrement) addr -= bytes(); auto data = read(addr); data = sign(data); index < 8 ? write(DataRegister{index}, data) : write(AddressRegister{index}, data); if(from.mode != AddressRegisterIndirectWithPreDecrement) addr += bytes(); } //spurious extra word read cycle exclusive to MOVEM memory->register if(from.mode == AddressRegisterIndirectWithPreDecrement) addr -= 2; read(addr); AddressRegister with{from.reg}; if(from.mode == AddressRegisterIndirectWithPreDecrement ) write(with, addr); if(from.mode == AddressRegisterIndirectWithPostIncrement) write(with, addr); prefetch(); } template auto M68000::instructionMOVEP(DataRegister from, EffectiveAddress to) -> void { auto address = fetch(to); auto data = read(from); u32 shift = bits(); for(auto _ : range(bytes())) { shift -= 8; write(address, data >> shift); address += 2; } prefetch(); } template auto M68000::instructionMOVEP(EffectiveAddress from, DataRegister to) -> void { auto address = fetch(from); auto data = read(to); u32 shift = bits(); for(auto _ : range(bytes())) { shift -= 8; data &= ~(0xff << shift); data |= read(address) << shift; address += 2; } write(to, data); prefetch(); } auto M68000::instructionMOVEQ(n8 immediate, DataRegister to) -> void { write(to, sign(immediate)); r.c = 0; r.v = 0; r.z = clip(immediate) == 0; r.n = sign(immediate) < 0; prefetch(); } auto M68000::instructionMOVE_FROM_SR(EffectiveAddress to) -> void { if(to.mode == DataRegisterDirect) idle(2); if(to.mode == AddressRegisterIndirectWithPreDecrement) idle(2); if(to.mode != DataRegisterDirect) read(r.pc); auto data = readSR(); fetch(to); prefetch(); write(to, data); } auto M68000::instructionMOVE_TO_CCR(EffectiveAddress from) -> void { idle(8); auto data = read(from); writeCCR(data); prefetch(); } auto M68000::instructionMOVE_TO_SR(EffectiveAddress from) -> void { if(supervisor()) { idle(8); auto data = read(from); writeSR(data); } prefetch(); } auto M68000::instructionMOVE_FROM_USP(AddressRegister to) -> void { if(supervisor()) { write(to, r.sp); } prefetch(); } auto M68000::instructionMOVE_TO_USP(AddressRegister from) -> void { if(supervisor()) { r.sp = read(from); } prefetch(); } auto M68000::instructionMULS(EffectiveAddress from, DataRegister with) -> void { auto source = read(from); auto target = read(with); auto result = (i16)source * (i16)target; //+2 cycles per 0<>1 bit transition auto cycles = bit::count(n16(source << 1) ^ source); idle(34 + cycles * 2); write(with, result); r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; prefetch(); } auto M68000::instructionMULU(EffectiveAddress from, DataRegister with) -> void { auto source = read(from); auto target = read(with); auto result = source * target; //+2 cycles per bit set auto cycles = bit::count(source); idle(34 + cycles * 2); write(with, result); r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; prefetch(); } auto M68000::instructionNBCD(EffectiveAddress with) -> void { if(with.mode == DataRegisterDirect || with.mode == AddressRegisterDirect) idle(2); auto source = read(with); auto target = 0u; auto result = target - source - r.x; bool c = false; bool v = false; const bool adjustLo = (target ^ source ^ result) & 0x10; const bool adjustHi = result & 0x100; if(adjustLo) { auto previous = result; result -= 0x06; c = (~previous & 0x80) & ( result & 0x80); v |= ( previous & 0x80) & (~result & 0x80); } if(adjustHi) { auto previous = result; result -= 0x60; c = true; v |= (previous & 0x80) & (~result & 0x80); } write(with, result); r.c = c; r.v = v; r.z = clip(result) ? 0 : r.z; r.n = sign(result) < 0; r.x = r.c; prefetch(); } template auto M68000::instructionNEG(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect || with.mode == AddressRegisterDirect) idle(2); } auto result = SUB(read(with), 0); prefetch(); write(with, result); } template auto M68000::instructionNEGX(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect || with.mode == AddressRegisterDirect) idle(2); } auto result = SUB(read(with), 0); prefetch(); write(with, result); } auto M68000::instructionNOP() -> void { prefetch(); } template auto M68000::instructionNOT(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect || with.mode == AddressRegisterDirect) idle(2); } auto result = ~read(with); prefetch(); write(with, result); r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; } template auto M68000::instructionOR(EffectiveAddress from, DataRegister with) -> void { if constexpr(Size == Long) { if(from.mode == DataRegisterDirect || from.mode == Immediate) { idle(4); } else { idle(2); } } auto source = read(from); auto target = read(with); auto result = OR(source, target); prefetch(); write(with, result); } template auto M68000::instructionOR(DataRegister from, EffectiveAddress with) -> void { auto source = read(from); auto target = read(with); auto result = OR(source, target); prefetch(); write(with, result); } template auto M68000::instructionORI(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = extension(); auto target = read(with); auto result = OR(source, target); prefetch(); write(with, result); } auto M68000::instructionORI_TO_CCR() -> void { auto data = extension(); writeCCR(readCCR() | data); idle(8); read(r.pc); prefetch(); } auto M68000::instructionORI_TO_SR() -> void { if(supervisor()) { auto data = extension(); writeSR(readSR() | data); idle(8); read(r.pc); } prefetch(); } auto M68000::instructionPEA(EffectiveAddress from) -> void { if(from.mode == AddressRegisterIndirectWithIndex) idle(2); auto data = fetch(from); if(from.mode == AbsoluteShortIndirect || from.mode == AbsoluteLongIndirect) { push(data); prefetch(); } else { prefetch(); push(data); } } auto M68000::instructionRESET() -> void { if(supervisor()) { r.reset = 1; idle(128); r.reset = 0; } prefetch(); } template auto M68000::instructionROL(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = ROL(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionROL(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = ROL(read(with), count); prefetch(); write(with, result); } auto M68000::instructionROL(EffectiveAddress with) -> void { auto result = ROL(read(with), 1); prefetch(); write(with, result); } template auto M68000::instructionROR(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = ROR(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionROR(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = ROR(read(with), count); prefetch(); write(with, result); } auto M68000::instructionROR(EffectiveAddress with) -> void { auto result = ROR(read(with), 1); prefetch(); write(with, result); } template auto M68000::instructionROXL(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = ROXL(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionROXL(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = ROXL(read(with), count); prefetch(); write(with, result); } auto M68000::instructionROXL(EffectiveAddress with) -> void { auto result = ROXL(read(with), 1); prefetch(); write(with, result); } template auto M68000::instructionROXR(n4 count, DataRegister with) -> void { idle((Size != Long ? 2 : 4) + count * 2); auto result = ROXR(read(with), count); prefetch(); write(with, result); } template auto M68000::instructionROXR(DataRegister from, DataRegister with) -> void { auto count = read(from) & 63; idle((Size != Long ? 2 : 4) + count * 2); auto result = ROXR(read(with), count); prefetch(); write(with, result); } auto M68000::instructionROXR(EffectiveAddress with) -> void { auto result = ROXR(read(with), 1); prefetch(); write(with, result); } auto M68000::instructionRTE() -> void { if(supervisor()) { auto sr = pop(); r.pc = pop(); writeSR(sr); prefetch(); } prefetch(); } auto M68000::instructionRTR() -> void { writeCCR(pop()); r.pc = pop(); prefetch(); prefetch(); } auto M68000::instructionRTS() -> void { r.pc = pop(); prefetch(); prefetch(); } auto M68000::instructionSBCD(EffectiveAddress from, EffectiveAddress with) -> void { if(from.mode == DataRegisterDirect) idle(2); auto target = read(with); auto source = read(from); auto result = target - source - r.x; bool c = false; bool v = false; const bool adjustLo = (target ^ source ^ result) & 0x10; const bool adjustHi = result & 0x100; if(adjustLo) { auto previous = result; result -= 0x06; c = (~previous & 0x80) & ( result & 0x80); v |= ( previous & 0x80) & (~result & 0x80); } if(adjustHi) { auto previous = result; result -= 0x60; c = true; v |= (previous & 0x80) & (~result & 0x80); } prefetch(); write(with, result); r.c = c; r.v = v; r.z = clip(result) ? 0 : r.z; r.n = sign(result) < 0; r.x = r.c; } auto M68000::instructionSCC(n4 test, EffectiveAddress to) -> void { fetch(to); prefetch(); if(!condition(test)) { write(to, 0); } else { write(to, ~0); if(to.mode == DataRegisterDirect) idle(2); } } auto M68000::instructionSTOP() -> void { if(supervisor()) { auto sr = extension(); writeSR(sr); r.stop = true; } prefetch(); } template auto M68000::instructionSUB(EffectiveAddress from, DataRegister with) -> void { if constexpr(Size == Long) { if(from.mode == DataRegisterDirect || from.mode == AddressRegisterDirect || from.mode == Immediate) { idle(4); } else { idle(2); } } auto source = read(from); auto target = read(with); auto result = SUB(source, target); prefetch(); write(with, result); } template auto M68000::instructionSUB(DataRegister from, EffectiveAddress with) -> void { auto source = read(from); auto target = read(with); auto result = SUB(source, target); prefetch(); write(with, result); } template auto M68000::instructionSUBA(EffectiveAddress from, AddressRegister to) -> void { if(Size != Long || from.mode == DataRegisterDirect || from.mode == AddressRegisterDirect || from.mode == Immediate) { idle(4); } else { idle(2); } auto source = sign(read(from)); auto target = read(to); prefetch(); write(to, target - source); } template auto M68000::instructionSUBI(EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = extension(); auto target = read(with); auto result = SUB(source, target); prefetch(); write(with, result); } template auto M68000::instructionSUBQ(n4 immediate, EffectiveAddress with) -> void { if constexpr(Size == Long) { if(with.mode == DataRegisterDirect) idle(4); } auto source = immediate; auto target = read(with); auto result = SUB(source, target); prefetch(); write(with, result); } //Size is ignored: always uses Long template auto M68000::instructionSUBQ(n4 immediate, AddressRegister with) -> void { idle(4); auto result = read(with) - immediate; prefetch(); write(with, result); } template auto M68000::instructionSUBX(EffectiveAddress from, EffectiveAddress with) -> void { if constexpr(Size == Long) { if(from.mode == DataRegisterDirect) idle(4); } auto target = read(with); auto source = read(from); auto result = SUB(source, target); prefetch(); write(with, result); } auto M68000::instructionSWAP(DataRegister with) -> void { auto result = read(with); result = result >> 16 | result << 16; write(with, result); r.c = 0; r.v = 0; r.z = clip(result) == 0; r.n = sign(result) < 0; prefetch(); } auto M68000::instructionTAS(EffectiveAddress with) -> void { n32 data; if(lockable() || with.mode == DataRegisterDirect) { data = read(with); prefetch(); write(with, data | 0x80); } else { //Mega Drive models 1&2 have a bug that prevents TAS write from taking effect //this bugged behavior is required for certain software to function correctly data = read(with); prefetch(); idle(6); } r.c = 0; r.v = 0; r.z = clip(data) == 0; r.n = sign(data) < 0; } auto M68000::instructionTRAP(n4 vector) -> void { idle(6); prefetched(); return exception(Exception::Trap, 32 + vector, r.i); } auto M68000::instructionTRAPV() -> void { if(r.v) { idle(6); prefetched(); return exception(Exception::Overflow, Vector::Overflow); } prefetch(); } template auto M68000::instructionTST(EffectiveAddress from) -> void { auto data = read(from); r.c = 0; r.v = 0; r.z = clip(data) == 0; r.n = sign(data) < 0; prefetch(); } auto M68000::instructionUNLK(AddressRegister with) -> void { auto sp = AddressRegister{7}; write(sp, read(with)); write(with, pop()); prefetch(); } ares-126/ares/component/processor/m68000/m68000.cpp000066400000000000000000000025131415063341600214650ustar00rootroot00000000000000#include #include "m68000.hpp" namespace ares { enum : u32 { Byte, Word, Long }; enum : bool { Reverse = 1 }; #include "registers.cpp" #include "memory.cpp" #include "effective-address.cpp" #include "traits.cpp" #include "conditions.cpp" #include "algorithms.cpp" #include "instructions.cpp" #include "disassembler.cpp" #include "instruction.cpp" #include "serialization.cpp" auto M68000::power() -> void { for(auto& dr : r.d) dr = 0; for(auto& ar : r.a) ar = 0; r.sp = 0; r.pc = 0; r.c = 0; r.v = 0; r.z = 0; r.n = 0; r.x = 0; r.i = 7; r.s = 1; r.t = 0; r.irc = 0x4e71; //nop r.ir = 0x4e71; //nop r.ird = 0x4e71; //nop r.stop = false; r.reset = false; } auto M68000::supervisor() -> bool { if(r.s) return true; r.pc -= 4; exception(Exception::Unprivileged, Vector::Unprivileged); return false; } auto M68000::exception(u32 exception, u32 vector, u32 priority) -> void { r.stop = false; idle(10); //todo: not accurate auto pc = r.pc; auto sr = readSR(); if(!r.s) swap(r.a[7], r.sp); if(priority) r.i = priority; r.s = 1; r.t = 0; push(pc - 4); push(sr); r.pc = read(vector << 2); prefetch(); prefetch(); } auto M68000::interrupt(u32 vector, u32 priority) -> void { return exception(Exception::Interrupt, vector, priority); } } ares-126/ares/component/processor/m68000/m68000.hpp000066400000000000000000000612651415063341600215030ustar00rootroot00000000000000#pragma once //Motorola MC68000 namespace ares { struct M68000 { virtual auto idle(u32 clocks) -> void = 0; virtual auto wait(u32 clocks) -> void = 0; virtual auto read(n1 upper, n1 lower, n24 address, n16 data = 0) -> n16 = 0; virtual auto write(n1 upper, n1 lower, n24 address, n16 data) -> void = 0; virtual auto lockable() -> bool { return true; } auto ird() const -> n16 { return r.ird; } enum : bool { User, Supervisor }; enum : u32 { Byte, Word, Long }; enum : bool { Reverse = 1, Extend = 1, Hold = 1, Fast = 1 }; enum : u32 { /* 0,n */ DataRegisterDirect, /* 1,n */ AddressRegisterDirect, /* 2,n */ AddressRegisterIndirect, /* 3,n */ AddressRegisterIndirectWithPostIncrement, /* 4,n */ AddressRegisterIndirectWithPreDecrement, /* 5,n */ AddressRegisterIndirectWithDisplacement, /* 6,n */ AddressRegisterIndirectWithIndex, /* 7,0 */ AbsoluteShortIndirect, /* 7,1 */ AbsoluteLongIndirect, /* 7,2 */ ProgramCounterIndirectWithDisplacement, /* 7,3 */ ProgramCounterIndirectWithIndex, /* 7,4 */ Immediate, }; struct Exception { enum : u32 { Illegal, DivisionByZero, BoundsCheck, Overflow, Unprivileged, Trap, Interrupt, };}; struct Vector { enum : u32 { ResetSP = 0, //0x00 ResetPC = 1, //0x04 BusError = 2, //0x08 AddressError = 3, //0x0c IllegalInstruction = 4, //0x10 DivisionByZero = 5, //0x14 BoundsCheck = 6, //0x18 Overflow = 7, //0x1c Unprivileged = 8, //0x20 Trace = 9, //0x24 IllegalLineA = 10, //0x28 IllegalLineF = 11, //0x2c Spurious = 24, //0x60 Level1 = 25, //0x64 Level2 = 26, //0x68 Level3 = 27, //0x6c Level4 = 28, //0x70 Level5 = 29, //0x74 Level6 = 30, //0x78 Level7 = 31, //0x7c Trap = 32, //0x80-0xbc (#0-#15) };}; //m68000.cpp M68000(); auto power() -> void; auto supervisor() -> bool; auto exception(u32 exception, u32 vector, u32 priority = 0) -> void; auto interrupt(u32 vector, u32 priority = 0) -> void; //registers.cpp struct DataRegister { explicit DataRegister(n64 number_) : number(number_) {} n3 number; }; template auto read(DataRegister reg) -> n32; template auto write(DataRegister reg, n32 data) -> void; struct AddressRegister { explicit AddressRegister(n64 number_) : number(number_) {} n3 number; }; template auto read(AddressRegister reg) -> n32; template auto write(AddressRegister reg, n32 data) -> void; auto readCCR() -> n8; auto readSR() -> n16; auto writeCCR(n8 ccr) -> void; auto writeSR(n16 sr) -> void; //memory.cpp template auto read(n32 addr) -> n32; template auto write(n32 addr, n32 data) -> void; template auto extension() -> n32; auto prefetch() -> n16; auto prefetched() -> n16; template auto pop() -> n32; template auto push(n32 data) -> void; //effective-address.cpp struct EffectiveAddress { explicit EffectiveAddress(n4 mode_, n3 reg_) : mode(mode_), reg(reg_) { if(mode == 7) mode += reg; //optimization: convert modes {7; 0-4} to {7-11} } n4 mode; n3 reg; b1 valid; n32 address; }; auto prefetched(EffectiveAddress& ea) -> n32; template auto fetch(EffectiveAddress& ea) -> n32; template auto read(EffectiveAddress& ea) -> n32; template auto write(EffectiveAddress& ea, n32 data) -> void; //instruction.cpp auto instruction() -> void; //traits.cpp template auto bytes() -> u32; template auto bits() -> u32; template auto lsb() -> n32; template auto msb() -> n32; template auto mask() -> n32; template auto clip(n32 data) -> n32; template auto sign(n32 data) -> i32; //conditions.cpp auto condition(n4 condition) -> bool; //algorithms.cpp template auto ADD(n32 source, n32 target) -> n32; template auto AND(n32 source, n32 target) -> n32; template auto ASL(n32 result, u32 shift) -> n32; template auto ASR(n32 result, u32 shift) -> n32; template auto CMP(n32 source, n32 target) -> n32; template auto EOR(n32 source, n32 target) -> n32; template auto LSL(n32 result, u32 shift) -> n32; template auto LSR(n32 result, u32 shift) -> n32; template auto OR(n32 source, n32 target) -> n32; template auto ROL(n32 result, u32 shift) -> n32; template auto ROR(n32 result, u32 shift) -> n32; template auto ROXL(n32 result, u32 shift) -> n32; template auto ROXR(n32 result, u32 shift) -> n32; template auto SUB(n32 source, n32 target) -> n32; //instructions.cpp auto instructionABCD(EffectiveAddress from, EffectiveAddress with) -> void; template auto instructionADD(EffectiveAddress from, DataRegister with) -> void; template auto instructionADD(DataRegister from, EffectiveAddress with) -> void; template auto instructionADDA(EffectiveAddress from, AddressRegister with) -> void; template auto instructionADDI(EffectiveAddress with) -> void; template auto instructionADDQ(n4 immediate, EffectiveAddress with) -> void; template auto instructionADDQ(n4 immediate, AddressRegister with) -> void; template auto instructionADDX(EffectiveAddress with, EffectiveAddress from) -> void; template auto instructionAND(EffectiveAddress from, DataRegister with) -> void; template auto instructionAND(DataRegister from, EffectiveAddress with) -> void; template auto instructionANDI(EffectiveAddress with) -> void; auto instructionANDI_TO_CCR() -> void; auto instructionANDI_TO_SR() -> void; template auto instructionASL(n4 count, DataRegister modify) -> void; template auto instructionASL(DataRegister from, DataRegister modify) -> void; auto instructionASL(EffectiveAddress modify) -> void; template auto instructionASR(n4 count, DataRegister modify) -> void; template auto instructionASR(DataRegister from, DataRegister modify) -> void; auto instructionASR(EffectiveAddress modify) -> void; auto instructionBCC(n4 test, n8 displacement) -> void; template auto instructionBCHG(DataRegister bit, EffectiveAddress with) -> void; template auto instructionBCHG(EffectiveAddress with) -> void; template auto instructionBCLR(DataRegister bit, EffectiveAddress with) -> void; template auto instructionBCLR(EffectiveAddress with) -> void; auto instructionBRA(n8 displacement) -> void; template auto instructionBSET(DataRegister bit, EffectiveAddress with) -> void; template auto instructionBSET(EffectiveAddress with) -> void; auto instructionBSR(n8 displacement) -> void; template auto instructionBTST(DataRegister bit, EffectiveAddress with) -> void; template auto instructionBTST(EffectiveAddress with) -> void; auto instructionCHK(DataRegister compare, EffectiveAddress maximum) -> void; template auto instructionCLR(EffectiveAddress with) -> void; template auto instructionCMP(EffectiveAddress from, DataRegister with) -> void; template auto instructionCMPA(EffectiveAddress from, AddressRegister with) -> void; template auto instructionCMPI(EffectiveAddress with) -> void; template auto instructionCMPM(EffectiveAddress from, EffectiveAddress with) -> void; auto instructionDBCC(n4 condition, DataRegister with) -> void; auto instructionDIVS(EffectiveAddress from, DataRegister with) -> void; auto instructionDIVU(EffectiveAddress from, DataRegister with) -> void; template auto instructionEOR(DataRegister from, EffectiveAddress with) -> void; template auto instructionEORI(EffectiveAddress with) -> void; auto instructionEORI_TO_CCR() -> void; auto instructionEORI_TO_SR() -> void; auto instructionEXG(DataRegister x, DataRegister y) -> void; auto instructionEXG(AddressRegister x, AddressRegister y) -> void; auto instructionEXG(DataRegister x, AddressRegister y) -> void; template auto instructionEXT(DataRegister with) -> void; auto instructionILLEGAL(n16 code) -> void; auto instructionJMP(EffectiveAddress from) -> void; auto instructionJSR(EffectiveAddress from) -> void; auto instructionLEA(EffectiveAddress from, AddressRegister to) -> void; auto instructionLINK(AddressRegister with) -> void; template auto instructionLSL(n4 count, DataRegister with) -> void; template auto instructionLSL(DataRegister from, DataRegister with) -> void; auto instructionLSL(EffectiveAddress with) -> void; template auto instructionLSR(n4 count, DataRegister with) -> void; template auto instructionLSR(DataRegister from, DataRegister with) -> void; auto instructionLSR(EffectiveAddress with) -> void; template auto instructionMOVE(EffectiveAddress from, EffectiveAddress to) -> void; template auto instructionMOVEA(EffectiveAddress from, AddressRegister to) -> void; template auto instructionMOVEM_TO_MEM(EffectiveAddress to) -> void; template auto instructionMOVEM_TO_REG(EffectiveAddress from) -> void; template auto instructionMOVEP(DataRegister from, EffectiveAddress to) -> void; template auto instructionMOVEP(EffectiveAddress from, DataRegister to) -> void; auto instructionMOVEQ(n8 immediate, DataRegister to) -> void; auto instructionMOVE_FROM_SR(EffectiveAddress to) -> void; auto instructionMOVE_TO_CCR(EffectiveAddress from) -> void; auto instructionMOVE_TO_SR(EffectiveAddress from) -> void; auto instructionMOVE_FROM_USP(AddressRegister to) -> void; auto instructionMOVE_TO_USP(AddressRegister from) -> void; auto instructionMULS(EffectiveAddress from, DataRegister with) -> void; auto instructionMULU(EffectiveAddress from, DataRegister with) -> void; auto instructionNBCD(EffectiveAddress with) -> void; template auto instructionNEG(EffectiveAddress with) -> void; template auto instructionNEGX(EffectiveAddress with) -> void; auto instructionNOP() -> void; template auto instructionNOT(EffectiveAddress with) -> void; template auto instructionOR(EffectiveAddress from, DataRegister with) -> void; template auto instructionOR(DataRegister from, EffectiveAddress with) -> void; template auto instructionORI(EffectiveAddress with) -> void; auto instructionORI_TO_CCR() -> void; auto instructionORI_TO_SR() -> void; auto instructionPEA(EffectiveAddress from) -> void; auto instructionRESET() -> void; template auto instructionROL(n4 count, DataRegister with) -> void; template auto instructionROL(DataRegister from, DataRegister with) -> void; auto instructionROL(EffectiveAddress with) -> void; template auto instructionROR(n4 count, DataRegister with) -> void; template auto instructionROR(DataRegister from, DataRegister with) -> void; auto instructionROR(EffectiveAddress with) -> void; template auto instructionROXL(n4 count, DataRegister with) -> void; template auto instructionROXL(DataRegister from, DataRegister with) -> void; auto instructionROXL(EffectiveAddress with) -> void; template auto instructionROXR(n4 count, DataRegister with) -> void; template auto instructionROXR(DataRegister from, DataRegister with) -> void; auto instructionROXR(EffectiveAddress with) -> void; auto instructionRTE() -> void; auto instructionRTR() -> void; auto instructionRTS() -> void; auto instructionSBCD(EffectiveAddress with, EffectiveAddress from) -> void; auto instructionSCC(n4 test, EffectiveAddress to) -> void; auto instructionSTOP() -> void; template auto instructionSUB(EffectiveAddress from, DataRegister with) -> void; template auto instructionSUB(DataRegister from, EffectiveAddress with) -> void; template auto instructionSUBA(EffectiveAddress from, AddressRegister with) -> void; template auto instructionSUBI(EffectiveAddress with) -> void; template auto instructionSUBQ(n4 immediate, EffectiveAddress with) -> void; template auto instructionSUBQ(n4 immediate, AddressRegister with) -> void; template auto instructionSUBX(EffectiveAddress from, EffectiveAddress with) -> void; auto instructionSWAP(DataRegister with) -> void; auto instructionTAS(EffectiveAddress with) -> void; auto instructionTRAP(n4 vector) -> void; auto instructionTRAPV() -> void; template auto instructionTST(EffectiveAddress from) -> void; auto instructionUNLK(AddressRegister with) -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp auto disassembleInstruction(n32 pc) -> string; auto disassembleContext() -> string; struct Registers { n32 d[8]; //data registers n32 a[8]; //address registers (a7 = s ? ssp : usp) n32 sp; //inactive stack pointer (s ? usp : ssp) n32 pc; //program counter bool c; //carry bool v; //overflow bool z; //zero bool n; //negative bool x; //extend n3 i; //interrupt mask bool s; //supervisor mode bool t; //trace mode n16 irc; //instruction prefetched from external memory n16 ir; //instruction currently being decoded n16 ird; //instruction currently being executed bool stop; bool reset; } r; function instructionTable[65536]; private: //disassembler.cpp auto disassembleABCD(EffectiveAddress from, EffectiveAddress with) -> string; template auto disassembleADD(EffectiveAddress from, DataRegister with) -> string; template auto disassembleADD(DataRegister from, EffectiveAddress with) -> string; template auto disassembleADDA(EffectiveAddress from, AddressRegister with) -> string; template auto disassembleADDI(EffectiveAddress with) -> string; template auto disassembleADDQ(n4 immediate, EffectiveAddress with) -> string; template auto disassembleADDQ(n4 immediate, AddressRegister with) -> string; template auto disassembleADDX(EffectiveAddress from, EffectiveAddress with) -> string; template auto disassembleAND(EffectiveAddress from, DataRegister with) -> string; template auto disassembleAND(DataRegister from, EffectiveAddress with) -> string; template auto disassembleANDI(EffectiveAddress with) -> string; auto disassembleANDI_TO_CCR() -> string; auto disassembleANDI_TO_SR() -> string; template auto disassembleASL(n4 count, DataRegister with) -> string; template auto disassembleASL(DataRegister from, DataRegister with) -> string; auto disassembleASL(EffectiveAddress with) -> string; template auto disassembleASR(n4 count, DataRegister with) -> string; template auto disassembleASR(DataRegister from, DataRegister with) -> string; auto disassembleASR(EffectiveAddress with) -> string; auto disassembleBCC(n4 condition, n8 displacement) -> string; template auto disassembleBCHG(DataRegister bit, EffectiveAddress with) -> string; template auto disassembleBCHG(EffectiveAddress with) -> string; template auto disassembleBCLR(DataRegister bit, EffectiveAddress with) -> string; template auto disassembleBCLR(EffectiveAddress with) -> string; auto disassembleBRA(n8 displacement) -> string; template auto disassembleBSET(DataRegister bit, EffectiveAddress with) -> string; template auto disassembleBSET(EffectiveAddress with) -> string; auto disassembleBSR(n8 displacement) -> string; template auto disassembleBTST(DataRegister bit, EffectiveAddress with) -> string; template auto disassembleBTST(EffectiveAddress with) -> string; auto disassembleCHK(DataRegister compare, EffectiveAddress maximum) -> string; template auto disassembleCLR(EffectiveAddress with) -> string; template auto disassembleCMP(EffectiveAddress from, DataRegister with) -> string; template auto disassembleCMPA(EffectiveAddress from, AddressRegister with) -> string; template auto disassembleCMPI(EffectiveAddress with) -> string; template auto disassembleCMPM(EffectiveAddress from, EffectiveAddress with) -> string; auto disassembleDBCC(n4 test, DataRegister with) -> string; auto disassembleDIVS(EffectiveAddress from, DataRegister with) -> string; auto disassembleDIVU(EffectiveAddress from, DataRegister with) -> string; template auto disassembleEOR(DataRegister from, EffectiveAddress with) -> string; template auto disassembleEORI(EffectiveAddress with) -> string; auto disassembleEORI_TO_CCR() -> string; auto disassembleEORI_TO_SR() -> string; auto disassembleEXG(DataRegister x, DataRegister y) -> string; auto disassembleEXG(AddressRegister x, AddressRegister y) -> string; auto disassembleEXG(DataRegister x, AddressRegister y) -> string; template auto disassembleEXT(DataRegister with) -> string; auto disassembleILLEGAL(n16 code) -> string; auto disassembleJMP(EffectiveAddress from) -> string; auto disassembleJSR(EffectiveAddress from) -> string; auto disassembleLEA(EffectiveAddress from, AddressRegister to) -> string; auto disassembleLINK(AddressRegister with) -> string; template auto disassembleLSL(n4 count, DataRegister with) -> string; template auto disassembleLSL(DataRegister from, DataRegister with) -> string; auto disassembleLSL(EffectiveAddress with) -> string; template auto disassembleLSR(n4 count, DataRegister with) -> string; template auto disassembleLSR(DataRegister from, DataRegister with) -> string; auto disassembleLSR(EffectiveAddress with) -> string; template auto disassembleMOVE(EffectiveAddress from, EffectiveAddress to) -> string; template auto disassembleMOVEA(EffectiveAddress from, AddressRegister to) -> string; template auto disassembleMOVEM_TO_MEM(EffectiveAddress to) -> string; template auto disassembleMOVEM_TO_REG(EffectiveAddress from) -> string; template auto disassembleMOVEP(DataRegister from, EffectiveAddress to) -> string; template auto disassembleMOVEP(EffectiveAddress from, DataRegister to) -> string; auto disassembleMOVEQ(n8 immediate, DataRegister to) -> string; auto disassembleMOVE_FROM_SR(EffectiveAddress to) -> string; auto disassembleMOVE_TO_CCR(EffectiveAddress from) -> string; auto disassembleMOVE_TO_SR(EffectiveAddress from) -> string; auto disassembleMOVE_FROM_USP(AddressRegister to) -> string; auto disassembleMOVE_TO_USP(AddressRegister from) -> string; auto disassembleMULS(EffectiveAddress from, DataRegister with) -> string; auto disassembleMULU(EffectiveAddress from, DataRegister with) -> string; auto disassembleNBCD(EffectiveAddress with) -> string; template auto disassembleNEG(EffectiveAddress with) -> string; template auto disassembleNEGX(EffectiveAddress with) -> string; auto disassembleNOP() -> string; template auto disassembleNOT(EffectiveAddress with) -> string; template auto disassembleOR(EffectiveAddress from, DataRegister with) -> string; template auto disassembleOR(DataRegister from, EffectiveAddress with) -> string; template auto disassembleORI(EffectiveAddress with) -> string; auto disassembleORI_TO_CCR() -> string; auto disassembleORI_TO_SR() -> string; auto disassemblePEA(EffectiveAddress from) -> string; auto disassembleRESET() -> string; template auto disassembleROL(n4 count, DataRegister with) -> string; template auto disassembleROL(DataRegister from, DataRegister with) -> string; auto disassembleROL(EffectiveAddress with) -> string; template auto disassembleROR(n4 count, DataRegister with) -> string; template auto disassembleROR(DataRegister from, DataRegister with) -> string; auto disassembleROR(EffectiveAddress with) -> string; template auto disassembleROXL(n4 count, DataRegister with) -> string; template auto disassembleROXL(DataRegister from, DataRegister with) -> string; auto disassembleROXL(EffectiveAddress with) -> string; template auto disassembleROXR(n4 count, DataRegister with) -> string; template auto disassembleROXR(DataRegister from, DataRegister with) -> string; auto disassembleROXR(EffectiveAddress with) -> string; auto disassembleRTE() -> string; auto disassembleRTR() -> string; auto disassembleRTS() -> string; auto disassembleSBCD(EffectiveAddress with, EffectiveAddress from) -> string; auto disassembleSCC(n4 test, EffectiveAddress to) -> string; auto disassembleSTOP() -> string; template auto disassembleSUB(EffectiveAddress from, DataRegister with) -> string; template auto disassembleSUB(DataRegister from, EffectiveAddress with) -> string; template auto disassembleSUBA(EffectiveAddress from, AddressRegister with) -> string; template auto disassembleSUBI(EffectiveAddress with) -> string; template auto disassembleSUBQ(n4 immediate, EffectiveAddress with) -> string; template auto disassembleSUBQ(n4 immediate, AddressRegister with) -> string; template auto disassembleSUBX(EffectiveAddress from, EffectiveAddress with) -> string; auto disassembleSWAP(DataRegister with) -> string; auto disassembleTAS(EffectiveAddress with) -> string; auto disassembleTRAP(n4 vector) -> string; auto disassembleTRAPV() -> string; template auto disassembleTST(EffectiveAddress from) -> string; auto disassembleUNLK(AddressRegister with) -> string; template auto _read(n32 addr) -> n32; template auto _readPC() -> n32; auto _readDisplacement(n32 base) -> n32; auto _readIndex(n32 base) -> n32; auto _dataRegister(DataRegister dr) -> string; auto _addressRegister(AddressRegister ar) -> string; template auto _immediate() -> string; template auto _address(EffectiveAddress& ea) -> string; template auto _effectiveAddress(EffectiveAddress& ea) -> string; auto _branch(n8 displacement) -> string; template auto _suffix() -> string; auto _condition(n4 condition) -> string; n32 _pc; function disassembleTable[65536]; }; } ares-126/ares/component/processor/m68000/memory.cpp000066400000000000000000000061551415063341600221510ustar00rootroot00000000000000//these functions transform internal accesses to bus accesses, and handle conversions: //* A1-A23 are passed to the bus //* A0 in word mode is ignored, and drives both UDS and LDS //* A0 in byte mode drives either UDS or LDS //* upper = /UDS (1 = selected; eg /UDS is inverted) //* lower = /LDS (1 = selected; eg /LDS is inverted) //* /UDS is where A0=0 and maps to D8-D15 //* /LDS is where A0=1 and maps to D0-D7 template<> auto M68000::read(n32 address) -> n32 { wait(4); if(address & 1) { return read(0, 1, address & ~1).byte(0); /* /LDS */ } else { return read(1, 0, address & ~1).byte(1); /* /UDS */ } } template<> auto M68000::read(n32 address) -> n32 { wait(4); return read(1, 1, address & ~1); } template<> auto M68000::read(n32 address) -> n32 { wait(4); n32 data = read(1, 1, address + 0 & ~1) << 16; wait(4); return data | read(1, 1, address + 2 & ~1) << 0; } // template<> auto M68000::write(n32 address, n32 data) -> void { wait(4); if(address & 1) { return write(0, 1, address & ~1, data << 8 | (n8)data << 0); /* /LDS */ } else { return write(1, 0, address & ~1, data << 8 | (n8)data << 0); /* /UDS */ } } template<> auto M68000::write(n32 address, n32 data) -> void { wait(4); return write(1, 1, address & ~1, data); } template<> auto M68000::write(n32 address, n32 data) -> void { wait(4); write(1, 1, address + 0 & ~1, data >> 16); wait(4); write(1, 1, address + 2 & ~1, data >> 0); } // template<> auto M68000::write(n32 address, n32 data) -> void { wait(4); if(address & 1) { return write(0, 1, address & ~1, data << 8 | (n8)data << 0); /* /LDS */ } else { return write(1, 0, address & ~1, data << 8 | (n8)data << 0); /* /UDS */ } } template<> auto M68000::write(n32 address, n32 data) -> void { wait(4); return write(1, 1, address & ~1, data); } template<> auto M68000::write(n32 address, n32 data) -> void { wait(4); write(1, 1, address + 2 & ~1, data >> 0); wait(4); write(1, 1, address + 0 & ~1, data >> 16); } // template<> auto M68000::extension() -> n32 { wait(4); r.ir = r.irc; r.irc = read(1, 1, r.pc & ~1); r.pc += 2; return (n8)r.ir; } template<> auto M68000::extension() -> n32 { wait(4); r.ir = r.irc; r.irc = read(1, 1, r.pc & ~1); r.pc += 2; return r.ir; } template<> auto M68000::extension() -> n32 { auto hi = extension(); auto lo = extension(); return hi << 16 | lo << 0; } // auto M68000::prefetch() -> n16 { wait(4); r.ir = r.irc; r.irc = read(1, 1, r.pc & ~1); r.pc += 2; return r.ir; } //take the prefetched value without reloading the prefetch. //this is used by instructions such as JMP and JSR. auto M68000::prefetched() -> n16 { r.ir = r.irc; r.irc = 0x0000; r.pc += 2; return r.ir; } // template auto M68000::pop() -> n32 { auto data = read((n32)r.a[7]); r.a[7] += bytes(); return data; } // template auto M68000::push(n32 data) -> void { r.a[7] -= bytes(); return write((n32)r.a[7], data); } ares-126/ares/component/processor/m68000/registers.cpp000066400000000000000000000033351415063341600226450ustar00rootroot00000000000000template auto M68000::read(DataRegister reg) -> n32 { if constexpr(Size == Byte) return (u8 )r.d[reg.number]; if constexpr(Size == Word) return (u16)r.d[reg.number]; if constexpr(Size == Long) return (u32)r.d[reg.number]; unreachable; } template auto M68000::write(DataRegister reg, n32 data) -> void { if constexpr(Size == Byte) r.d[reg.number] = r.d[reg.number] & ~0xff | data & 0xff; if constexpr(Size == Word) r.d[reg.number] = r.d[reg.number] & ~0xffff | data & 0xffff; if constexpr(Size == Long) r.d[reg.number] = data; } // template auto M68000::read(AddressRegister reg) -> n32 { if constexpr(Size == Byte) return (s8 )r.a[reg.number]; if constexpr(Size == Word) return (s16)r.a[reg.number]; if constexpr(Size == Long) return (s32)r.a[reg.number]; unreachable; } template auto M68000::write(AddressRegister reg, n32 data) -> void { if constexpr(Size == Byte) r.a[reg.number] = (s8 )data; if constexpr(Size == Word) r.a[reg.number] = (s16)data; if constexpr(Size == Long) r.a[reg.number] = (s32)data; } // //CCR/SR unused bits cannot be set; always read out as 0 auto M68000::readCCR() -> n8 { return r.c << 0 | r.v << 1 | r.z << 2 | r.n << 3 | r.x << 4; } auto M68000::readSR() -> n16 { return r.c << 0 | r.v << 1 | r.z << 2 | r.n << 3 | r.x << 4 | r.i << 8 | r.s << 13 | r.t << 15; } auto M68000::writeCCR(n8 ccr) -> void { r.c = ccr.bit(0); r.v = ccr.bit(1); r.z = ccr.bit(2); r.n = ccr.bit(3); r.x = ccr.bit(4); } auto M68000::writeSR(n16 sr) -> void { writeCCR(sr); //when entering or exiting supervisor mode; swap SSP and USP into A7 if(r.s != sr.bit(13)) swap(r.a[7], r.sp); r.i = sr.bit(8,10); r.s = sr.bit(13); r.t = sr.bit(15); } ares-126/ares/component/processor/m68000/serialization.cpp000066400000000000000000000003551415063341600235120ustar00rootroot00000000000000auto M68000::serialize(serializer& s) -> void { s(r.d); s(r.a); s(r.sp); s(r.pc); s(r.c); s(r.v); s(r.z); s(r.n); s(r.x); s(r.i); s(r.s); s(r.t); s(r.irc); s(r.ir); s(r.ird); s(r.stop); s(r.reset); } ares-126/ares/component/processor/m68000/traits.cpp000066400000000000000000000025361415063341600221460ustar00rootroot00000000000000template<> auto M68000::bytes() -> u32 { return 1; } template<> auto M68000::bytes() -> u32 { return 2; } template<> auto M68000::bytes() -> u32 { return 4; } template<> auto M68000::bits() -> u32 { return 8; } template<> auto M68000::bits() -> u32 { return 16; } template<> auto M68000::bits() -> u32 { return 32; } template<> auto M68000::lsb() -> n32 { return 1; } template<> auto M68000::lsb() -> n32 { return 1; } template<> auto M68000::lsb() -> n32 { return 1; } template<> auto M68000::msb() -> n32 { return 0x80; } template<> auto M68000::msb() -> n32 { return 0x8000; } template<> auto M68000::msb() -> n32 { return 0x80000000; } template<> auto M68000::mask() -> n32 { return 0xff; } template<> auto M68000::mask() -> n32 { return 0xffff; } template<> auto M68000::mask() -> n32 { return 0xffffffff; } template<> auto M68000::clip(n32 data) -> n32 { return (n8 )data; } template<> auto M68000::clip(n32 data) -> n32 { return (n16)data; } template<> auto M68000::clip(n32 data) -> n32 { return (n32)data; } template<> auto M68000::sign(n32 data) -> i32 { return (i8 )data; } template<> auto M68000::sign(n32 data) -> i32 { return (i16)data; } template<> auto M68000::sign(n32 data) -> i32 { return (i32)data; } ares-126/ares/component/processor/m68hc05/000077500000000000000000000000001415063341600203665ustar00rootroot00000000000000ares-126/ares/component/processor/m68hc05/algorithms.cpp000066400000000000000000000055351415063341600232530ustar00rootroot00000000000000auto M68HC05::algorithmADC(n8 x, n8 y) -> n8 { n8 z = x + y + CCR.C; n8 c = x ^ y ^ z; n8 o = (x ^ z) & (y ^ z); CCR.C = (c ^ o) & 0x80; CCR.Z = z == 0; CCR.N = z & 0x80; CCR.H = c & 0x10; return z; } auto M68HC05::algorithmADD(n8 x, n8 y) -> n8 { n8 z = x + y; n8 c = x ^ y ^ z; n8 o = (x ^ z) & (y ^ z); CCR.C = (c ^ o) & 0x80; CCR.Z = z == 0; CCR.N = z & 0x80; CCR.H = c & 0x10; return z; } auto M68HC05::algorithmAND(n8 x, n8 y) -> n8 { x = x & y; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmASR(n8 x) -> n8 { CCR.C = x & 1; x = (i8)x >> 1; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmBIT(n8 x, n8 y) -> n8 { n8 z = x & y; CCR.Z = z == 0; CCR.N = z & 0x80; return x; } auto M68HC05::algorithmCLR(n8 x) -> n8 { x = 0; CCR.Z = 1; CCR.N = 0; return x; } auto M68HC05::algorithmCMP(n8 x, n8 y) -> n8 { n8 z = x - y; n8 c = x ^ ~y ^ z; n8 o = (x ^ z) & (y ^ x); CCR.C = (c ^ o) & 0x80; CCR.Z = z == 0; CCR.N = z & 0x80; return x; } auto M68HC05::algorithmCOM(n8 x) -> n8 { x = ~x; CCR.C = 1; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmDEC(n8 x) -> n8 { x--; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmEOR(n8 x, n8 y) -> n8 { x = x ^ y; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmINC(n8 x) -> n8 { x++; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmLD(n8 x, n8 y) -> n8 { x = y; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmLSL(n8 x) -> n8 { CCR.C = x >> 7; x = x << 7; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmLSR(n8 x) -> n8 { CCR.C = x & 1; x = x >> 1; CCR.Z = x == 0; CCR.N = 0; return x; } auto M68HC05::algorithmNEG(n8 x) -> n8 { x = -x; CCR.C = 0; //todo CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmOR(n8 x, n8 y) -> n8 { x = x | y; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmROL(n8 x) -> n8 { b1 c = CCR.C; CCR.C = x >> 1; x = x << 1 | c; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmROR(n8 x) -> n8 { b1 c = CCR.C; CCR.C = x & 1; x = c << 7 | x >> 1; CCR.Z = x == 0; CCR.N = x & 0x80; return x; } auto M68HC05::algorithmSBC(n8 x, n8 y) -> n8 { n8 z = x - y - !CCR.C; n8 c = x ^ ~y ^ z; n8 o = (x ^ z) & (y ^ x); CCR.C = (c ^ o) & 0x80; CCR.Z = z == 0; CCR.N = z & 0x80; CCR.H = c & 0x10; return z; } auto M68HC05::algorithmSUB(n8 x, n8 y) -> n8 { n8 z = x - y; n8 c = x ^ ~y ^ z; n8 o = (x ^ z) & (y ^ x); CCR.C = (c ^ o) & 0x80; CCR.Z = z == 0; CCR.N = z & 0x80; CCR.C = c & 0x10; return z; } auto M68HC05::algorithmTST(n8 x) -> n8 { CCR.Z = x == 0; CCR.N = x & 0x80; return x; } ares-126/ares/component/processor/m68hc05/disassembler.cpp000066400000000000000000000225361415063341600235570ustar00rootroot00000000000000auto M68HC05::disassembleInstruction() -> string { string s; n8 opcode = read(PC); n8 lo = read(PC + 1); n8 hi = read(PC + 2); auto absolute = [&]() -> string { return {"$", hex(hi, 2L), hex(lo, 2L)}; }; auto branchBit = [&](n3 bit) -> string { return {bit, ",$", hex(lo, 2L), ",$", hex(PC + 3 + (i8)hi, 4L)}; }; auto bit = [&](n3 bit) -> string { return {bit, ",$", hex(lo, 2L)}; }; auto branch = [&]() -> string { return {"$", hex(PC + 2 + (i8)lo, 4L)}; }; auto direct = [&]() -> string { return {"$", hex(lo, 2L)}; }; auto illegal = [&]() -> string { return {"$", hex(opcode, 2L)}; }; auto immediate = [&]() -> string { return {"#$", hex(lo, 2L)}; }; auto implied = [&]() -> string { return {}; }; auto indexed = [&]() -> string { return {"(x)"}; }; auto indexed8 = [&]() -> string { return {"(x+$", hex(lo, 2L)}; }; auto indexed16 = [&]() -> string { return {"(x+$", hex(hi, 2L), hex(lo, 2L)}; }; auto inherent = [&](string r) -> string { return r; }; auto multiply = [&]() -> string { return {"a,x"}; }; #define op(id, prefix, mode, ...) \ case id: s.append(prefix, " ", mode(__VA_ARGS__)); \ break; switch(opcode) { op(0x00, "brset", branchBit, 0); op(0x01, "brclr", branchBit, 0); op(0x02, "brset", branchBit, 1); op(0x03, "brclr", branchBit, 1); op(0x04, "brset", branchBit, 2); op(0x05, "brclr", branchBit, 2); op(0x06, "brset", branchBit, 3); op(0x07, "brclr", branchBit, 3); op(0x08, "brset", branchBit, 4); op(0x09, "brclr", branchBit, 4); op(0x0a, "brset", branchBit, 5); op(0x0b, "brclr", branchBit, 5); op(0x0c, "brset", branchBit, 6); op(0x0d, "brclr", branchBit, 6); op(0x0e, "brset", branchBit, 7); op(0x0f, "brclr", branchBit, 7); op(0x10, "bset ", bit, 0); op(0x11, "bclr ", bit, 0); op(0x12, "bset ", bit, 1); op(0x13, "bclr ", bit, 1); op(0x14, "bset ", bit, 2); op(0x15, "bclr ", bit, 2); op(0x16, "bset ", bit, 3); op(0x17, "bclr ", bit, 3); op(0x18, "bset ", bit, 4); op(0x19, "bclr ", bit, 4); op(0x1a, "bset ", bit, 5); op(0x1b, "bclr ", bit, 5); op(0x1c, "bset ", bit, 6); op(0x1d, "bclr ", bit, 6); op(0x1e, "bset ", bit, 7); op(0x1f, "bclr ", bit, 7); op(0x20, "bra ", branch); op(0x21, "brn ", branch); op(0x22, "bhi ", branch); op(0x23, "bls ", branch); op(0x24, "bcc ", branch); op(0x25, "bcs ", branch); op(0x26, "bne ", branch); op(0x27, "beq ", branch); op(0x28, "bhcc ", branch); op(0x29, "bhcs ", branch); op(0x2a, "bpl ", branch); op(0x2b, "bmi ", branch); op(0x2c, "bmc ", branch); op(0x2d, "bms ", branch); op(0x2e, "bil ", branch); op(0x2f, "bih ", branch); op(0x30, "neg ", direct); op(0x31, "ill ", illegal); op(0x32, "ill ", illegal); op(0x33, "com ", direct); op(0x34, "lsr ", direct); op(0x35, "ill ", illegal); op(0x36, "ror ", direct); op(0x37, "asr ", direct); op(0x38, "lsl ", direct); op(0x39, "rol ", direct); op(0x3a, "dec ", direct); op(0x3b, "ill ", illegal); op(0x3c, "inc ", direct); op(0x3d, "tst ", direct); op(0x3e, "ill ", illegal); op(0x3f, "clr ", direct); op(0x40, "neg ", inherent, "a"); op(0x41, "ill ", illegal); op(0x42, "mul ", multiply); op(0x43, "com ", inherent, "a"); op(0x44, "lsr ", inherent, "a"); op(0x45, "ill ", illegal); op(0x46, "ror ", inherent, "a"); op(0x47, "asr ", inherent, "a"); op(0x48, "lsl ", inherent, "a"); op(0x49, "rol ", inherent, "a"); op(0x4a, "dec ", inherent, "a"); op(0x4b, "ill ", illegal); op(0x4c, "inc ", inherent, "a"); op(0x4d, "tst ", inherent, "a"); op(0x4e, "ill ", illegal); op(0x4f, "clr ", inherent, "a"); op(0x50, "neg ", inherent, "x"); op(0x51, "ill ", illegal); op(0x52, "ill ", illegal); op(0x53, "com ", inherent, "x"); op(0x54, "lsr ", inherent, "x"); op(0x55, "ill ", illegal); op(0x56, "ror ", inherent, "x"); op(0x57, "asr ", inherent, "x"); op(0x58, "lsl ", inherent, "x"); op(0x59, "rol ", inherent, "x"); op(0x5a, "dec ", inherent, "x"); op(0x5b, "ill ", illegal); op(0x5c, "inc ", inherent, "x"); op(0x5d, "tst ", inherent, "x"); op(0x5e, "ill ", illegal); op(0x5f, "clr ", inherent, "x"); op(0x60, "neg ", indexed8); op(0x61, "ill ", illegal); op(0x62, "ill ", illegal); op(0x63, "com ", indexed8); op(0x64, "lsr ", indexed8); op(0x65, "ill ", illegal); op(0x66, "ror ", indexed8); op(0x67, "asr ", indexed8); op(0x68, "lsl ", indexed8); op(0x69, "rol ", indexed8); op(0x6a, "dec ", indexed8); op(0x6b, "ill ", illegal); op(0x6c, "inc ", indexed8); op(0x6d, "tst ", indexed8); op(0x6e, "ill ", illegal); op(0x6f, "clr ", indexed8); op(0x70, "neg ", indexed); op(0x71, "ill ", illegal); op(0x72, "ill ", illegal); op(0x73, "com ", indexed); op(0x74, "lsr ", indexed); op(0x75, "ill ", illegal); op(0x76, "ror ", indexed); op(0x77, "asr ", indexed); op(0x78, "lsl ", indexed); op(0x79, "rol ", indexed); op(0x7a, "dec ", indexed); op(0x7b, "ill ", illegal); op(0x7c, "inc ", indexed); op(0x7d, "tst ", indexed); op(0x7e, "ill ", illegal); op(0x7f, "clr ", indexed); op(0x80, "rti ", implied); op(0x81, "rts ", implied); op(0x82, "ill ", illegal); op(0x83, "swi ", implied); op(0x84, "ill ", illegal); op(0x85, "ill ", illegal); op(0x86, "ill ", illegal); op(0x87, "ill ", illegal); op(0x88, "ill ", illegal); op(0x89, "ill ", illegal); op(0x8a, "ill ", illegal); op(0x8b, "ill ", illegal); op(0x8c, "ill ", illegal); op(0x8d, "ill ", illegal); op(0x8e, "stop ", implied); op(0x8f, "wait ", implied); op(0x90, "ill ", illegal); op(0x91, "ill ", illegal); op(0x92, "ill ", illegal); op(0x93, "ill ", illegal); op(0x94, "ill ", illegal); op(0x95, "ill ", illegal); op(0x96, "ill ", illegal); op(0x97, "tax ", implied); op(0x98, "clc ", implied); op(0x99, "sec ", implied); op(0x9a, "cli ", implied); op(0x9b, "sei ", implied); op(0x9c, "rsp ", implied); op(0x9d, "nop ", implied); op(0x9e, "ill ", illegal); op(0x9f, "txa ", implied); op(0xa0, "sub ", immediate); op(0xa1, "cmp ", immediate); op(0xa2, "sbc ", immediate); op(0xa3, "cpx ", immediate); op(0xa4, "and ", immediate); op(0xa5, "bit ", immediate); op(0xa6, "lda ", immediate); op(0xa7, "ill ", illegal); op(0xa8, "eor ", immediate); op(0xa9, "adc ", immediate); op(0xaa, "ora ", immediate); op(0xab, "add ", immediate); op(0xac, "ill ", illegal); op(0xad, "bsr ", branch); op(0xae, "ldx ", immediate); op(0xaf, "ill ", illegal); op(0xb0, "lda ", direct); op(0xb1, "cmp ", direct); op(0xb2, "sbc ", direct); op(0xb3, "cpx ", direct); op(0xb4, "and ", direct); op(0xb5, "bit ", direct); op(0xb6, "lda ", direct); op(0xb7, "sta ", direct); op(0xb8, "eor ", direct); op(0xb9, "adc ", direct); op(0xba, "ora ", direct); op(0xbb, "add ", direct); op(0xbc, "jmp ", direct); op(0xbd, "jsr ", direct); op(0xbe, "ldx ", direct); op(0xbf, "stx ", direct); op(0xc0, "sub ", absolute); op(0xc1, "cmp ", absolute); op(0xc2, "sbc ", absolute); op(0xc3, "cpx ", absolute); op(0xc4, "and ", absolute); op(0xc5, "bit ", absolute); op(0xc6, "lda ", absolute); op(0xc7, "sta ", absolute); op(0xc8, "eor ", absolute); op(0xc9, "adc ", absolute); op(0xca, "ora ", absolute); op(0xcb, "add ", absolute); op(0xcc, "jmp ", absolute); op(0xcd, "jsr ", absolute); op(0xce, "ldx ", absolute); op(0xcf, "stx ", absolute); op(0xd0, "sub ", indexed16); op(0xd1, "cmp ", indexed16); op(0xd2, "sbc ", indexed16); op(0xd3, "cpx ", indexed16); op(0xd4, "and ", indexed16); op(0xd5, "bit ", indexed16); op(0xd6, "lda ", indexed16); op(0xd7, "sta ", indexed16); op(0xd8, "eor ", indexed16); op(0xd9, "adc ", indexed16); op(0xda, "ora ", indexed16); op(0xdb, "add ", indexed16); op(0xdc, "jmp ", indexed16); op(0xdd, "jsr ", indexed16); op(0xde, "ldx ", indexed16); op(0xdf, "stx ", indexed16); op(0xe0, "sub ", indexed8); op(0xe1, "cmp ", indexed8); op(0xe2, "sbc ", indexed8); op(0xe3, "cpx ", indexed8); op(0xe4, "and ", indexed8); op(0xe5, "bit ", indexed8); op(0xe6, "lda ", indexed8); op(0xe7, "sta ", indexed8); op(0xe8, "eor ", indexed8); op(0xe9, "adc ", indexed8); op(0xea, "ora ", indexed8); op(0xeb, "add ", indexed8); op(0xec, "jmp ", indexed8); op(0xed, "jsr ", indexed8); op(0xee, "ldx ", indexed8); op(0xef, "stx ", indexed8); op(0xf0, "sub ", indexed); op(0xf1, "cmp ", indexed); op(0xf2, "sbc ", indexed); op(0xf3, "cpx ", indexed); op(0xf4, "and ", indexed); op(0xf5, "bit ", indexed); op(0xf6, "lda ", indexed); op(0xf7, "sta ", indexed); op(0xf8, "eor ", indexed); op(0xf9, "adc ", indexed); op(0xfa, "ora ", indexed); op(0xfb, "add ", indexed); op(0xfc, "jmp ", indexed); op(0xfd, "jsr ", indexed); op(0xfe, "ldx ", indexed); op(0xff, "stx ", indexed); } #undef op return s; } auto M68HC05::disassembleContext() -> string { string s; s.append("A:", hex(A, 2L), " "); s.append("X:", hex(X, 2L), " "); s.append("S:", hex(0xc0 | SP, 2L), " "); s.append(CCR.C ? "C" : "c"); s.append(CCR.Z ? "Z" : "z"); s.append(CCR.N ? "N" : "n"); s.append(CCR.I ? "I" : "i"); s.append(CCR.H ? "H" : "h"); return s; } ares-126/ares/component/processor/m68hc05/instruction.cpp000066400000000000000000000151001415063341600234500ustar00rootroot00000000000000#define op(id, name, ...) case id: return instruction##name(__VA_ARGS__); #define fp(name) &M68HC05::algorithm##name auto M68HC05::interrupt() -> void { push(PC); push(CCR); step(6); CCR.I = 1; PC = 0; } auto M68HC05::instruction() -> void { auto opcode = fetch(); switch(opcode) { op(0x00, BRSET, 0); op(0x01, BRCLR, 0); op(0x02, BRSET, 1); op(0x03, BRCLR, 1); op(0x04, BRSET, 2); op(0x05, BRCLR, 2); op(0x06, BRSET, 3); op(0x07, BRCLR, 3); op(0x08, BRSET, 4); op(0x09, BRCLR, 4); op(0x0a, BRSET, 5); op(0x0b, BRCLR, 5); op(0x0c, BRSET, 6); op(0x0d, BRCLR, 6); op(0x0e, BRSET, 7); op(0x0f, BRCLR, 7); op(0x10, BSET, 0); op(0x11, BCLR, 0); op(0x12, BSET, 1); op(0x13, BCLR, 1); op(0x14, BSET, 2); op(0x15, BCLR, 2); op(0x16, BSET, 3); op(0x17, BCLR, 3); op(0x18, BSET, 4); op(0x19, BCLR, 4); op(0x1a, BSET, 5); op(0x1b, BCLR, 5); op(0x1c, BSET, 6); op(0x1d, BCLR, 6); op(0x1e, BSET, 7); op(0x1f, BCLR, 7); op(0x20, BRA, 1); //BRA op(0x21, BRA, 0); //BRN op(0x22, BRA, CCR.C == 0 && CCR.Z == 0); //BHI op(0x23, BRA, CCR.C == 1 || CCR.Z == 1); //BLS op(0x24, BRA, CCR.C == 0); //BCC op(0x25, BRA, CCR.C == 1); //BCS op(0x26, BRA, CCR.Z == 0); //BNE op(0x27, BRA, CCR.Z == 1); //BEQ op(0x28, BRA, CCR.H == 0); //BHCC op(0x29, BRA, CCR.H == 1); //BHCS op(0x2a, BRA, CCR.N == 0); //BPL op(0x2b, BRA, CCR.N == 1); //BMI op(0x2c, BRA, CCR.I == 0); //BMC op(0x2d, BRA, CCR.I == 1); //BMS op(0x2e, BRA, IRQ == 0); //BIL op(0x2f, BRA, IRQ == 1); //BIH op(0x30, RMWd, fp(NEG)); op(0x31, ILL); op(0x32, ILL); op(0x33, RMWd, fp(COM)); op(0x34, RMWd, fp(LSR)); op(0x35, ILL); op(0x36, RMWd, fp(ROR)); op(0x37, RMWd, fp(ASR)); op(0x38, RMWd, fp(LSL)); op(0x39, RMWd, fp(ROL)); op(0x3a, RMWd, fp(DEC)); op(0x3b, ILL); op(0x3c, RMWd, fp(INC)); op(0x3d, TSTd, fp(TST)); op(0x3e, ILL); op(0x3f, RMWd, fp(CLR)); op(0x40, RMWr, fp(NEG), A); op(0x41, ILL); op(0x42, MUL); op(0x43, RMWr, fp(COM), A); op(0x44, RMWr, fp(LSR), A); op(0x45, ILL); op(0x46, RMWr, fp(ROR), A); op(0x47, RMWr, fp(ASR), A); op(0x48, RMWr, fp(LSL), A); op(0x49, RMWr, fp(ROL), A); op(0x4a, RMWr, fp(DEC), A); op(0x4b, ILL); op(0x4c, RMWr, fp(INC), A); op(0x4d, TSTr, fp(TST), A); op(0x4e, ILL); op(0x4f, RMWr, fp(CLR), A); op(0x50, RMWr, fp(NEG), X); op(0x51, ILL); op(0x52, ILL); op(0x53, RMWr, fp(COM), X); op(0x54, RMWr, fp(LSR), X); op(0x55, ILL); op(0x56, RMWr, fp(ROR), X); op(0x57, RMWr, fp(ASR), X); op(0x58, RMWr, fp(LSL), X); op(0x59, RMWr, fp(ROL), X); op(0x5a, RMWr, fp(DEC), X); op(0x5b, ILL); op(0x5c, RMWr, fp(INC), X); op(0x5d, TSTr, fp(TST), X); op(0x5e, ILL); op(0x5f, RMWr, fp(CLR), X); op(0x60, RMWo, fp(NEG)); op(0x61, ILL); op(0x62, ILL); op(0x63, RMWo, fp(COM)); op(0x64, RMWo, fp(LSR)); op(0x65, ILL); op(0x66, RMWo, fp(ROR)); op(0x67, RMWo, fp(ASR)); op(0x68, RMWo, fp(LSL)); op(0x69, RMWo, fp(ROL)); op(0x6a, RMWo, fp(DEC)); op(0x6b, ILL); op(0x6c, RMWo, fp(INC)); op(0x6d, TSTo, fp(TST)); op(0x6e, ILL); op(0x6f, RMWo, fp(CLR)); op(0x70, RMWi, fp(NEG)); op(0x71, ILL); op(0x72, ILL); op(0x73, RMWi, fp(COM)); op(0x74, RMWi, fp(LSR)); op(0x75, ILL); op(0x76, RMWi, fp(ROR)); op(0x77, RMWi, fp(ASR)); op(0x78, RMWi, fp(LSL)); op(0x79, RMWi, fp(ROL)); op(0x7a, RMWi, fp(DEC)); op(0x7b, ILL); op(0x7c, RMWi, fp(INC)); op(0x7d, TSTi, fp(TST)); op(0x7e, ILL); op(0x7f, RMWi, fp(CLR)); op(0x80, RTI); op(0x81, RTS); op(0x82, ILL); op(0x83, SWI); op(0x84, ILL); op(0x85, ILL); op(0x86, ILL); op(0x87, ILL); op(0x88, ILL); op(0x89, ILL); op(0x8a, ILL); op(0x8b, ILL); op(0x8c, ILL); op(0x8d, ILL); op(0x8e, STOP); op(0x8f, WAIT); op(0x90, ILL); op(0x91, ILL); op(0x92, ILL); op(0x93, ILL); op(0x94, ILL); op(0x95, ILL); op(0x96, ILL); op(0x97, TAX); op(0x98, CLR, CCR.C); //CLC op(0x99, SET, CCR.C); //SEC op(0x9a, CLR, CCR.I); //CLI op(0x9b, SET, CCR.I); //SEI op(0x9c, RSP); op(0x9d, NOP); op(0x9e, ILL); op(0x9f, TXA); op(0xa0, LDr, fp(SUB), A); op(0xa1, LDr, fp(CMP), A); op(0xa2, LDr, fp(SBC), A); op(0xa3, LDr, fp(CMP), X); op(0xa4, LDr, fp(AND), A); op(0xa5, LDr, fp(BIT), A); op(0xa6, LDr, fp(LD ), A); op(0xa7, ILL); op(0xa8, LDr, fp(EOR), A); op(0xa9, LDr, fp(ADC), A); op(0xaa, LDr, fp(OR ), A); op(0xab, LDr, fp(ADD), A); op(0xac, ILL); op(0xad, BSR); op(0xae, LDr, fp(LD ), X); op(0xaf, ILL); op(0xb0, LDd, fp(SUB), A); op(0xb1, LDd, fp(CMP), A); op(0xb2, LDd, fp(SBC), A); op(0xb3, LDd, fp(CMP), X); op(0xb4, LDd, fp(AND), A); op(0xb5, LDd, fp(BIT), A); op(0xb6, LDd, fp(LD ), A); op(0xb7, STd, A); op(0xb8, LDd, fp(EOR), A); op(0xb9, LDd, fp(ADC), A); op(0xba, LDd, fp(OR ), A); op(0xbb, LDd, fp(ADD), A); op(0xbc, JMPd); op(0xbd, JSRd); op(0xbe, LDd, fp(LD ), X); op(0xbf, STd, X); op(0xc0, LDa, fp(SUB), A); op(0xc1, LDa, fp(CMP), A); op(0xc2, LDa, fp(SBC), A); op(0xc3, LDa, fp(CMP), X); op(0xc4, LDa, fp(AND), A); op(0xc5, LDa, fp(BIT), A); op(0xc6, LDa, fp(LD ), A); op(0xc7, STa, A); op(0xc8, LDa, fp(EOR), A); op(0xc9, LDa, fp(ADC), A); op(0xca, LDa, fp(OR ), A); op(0xcb, LDa, fp(ADD), A); op(0xcc, JMPa); op(0xcd, JSRa); op(0xce, LDa, fp(LD ), X); op(0xcf, STa, X); op(0xd0, LDw, fp(SUB), A); op(0xd1, LDw, fp(CMP), A); op(0xd2, LDw, fp(SBC), A); op(0xd3, LDw, fp(CMP), X); op(0xd4, LDw, fp(AND), A); op(0xd5, LDw, fp(BIT), A); op(0xd6, LDw, fp(LD ), A); op(0xd7, STw, A); op(0xd8, LDw, fp(EOR), A); op(0xd9, LDw, fp(ADC), A); op(0xda, LDw, fp(OR ), A); op(0xdb, LDw, fp(ADD), A); op(0xdc, JMPw); op(0xdd, JSRw); op(0xde, LDw, fp(LD ), X); op(0xdf, STw, X); op(0xe0, LDo, fp(SUB), A); op(0xe1, LDo, fp(CMP), A); op(0xe2, LDo, fp(SBC), A); op(0xe3, LDo, fp(CMP), X); op(0xe4, LDo, fp(AND), A); op(0xe5, LDo, fp(BIT), A); op(0xe6, LDo, fp(LD ), A); op(0xe7, STo, A); op(0xe8, LDo, fp(EOR), A); op(0xe9, LDo, fp(ADC), A); op(0xea, LDo, fp(OR ), A); op(0xeb, LDo, fp(ADD), A); op(0xec, JMPo); op(0xed, JSRo); op(0xee, LDo, fp(LD ), X); op(0xef, STo, X); op(0xf0, LDi, fp(SUB), A); op(0xf1, LDi, fp(CMP), A); op(0xf2, LDi, fp(SBC), A); op(0xf3, LDi, fp(CMP), X); op(0xf4, LDi, fp(AND), A); op(0xf5, LDi, fp(BIT), A); op(0xf6, LDi, fp(LD ), A); op(0xf7, STi, A); op(0xf8, LDi, fp(EOR), A); op(0xf9, LDi, fp(ADC), A); op(0xfa, LDi, fp(OR ), A); op(0xfb, LDi, fp(ADD), A); op(0xfc, JMPi); op(0xfd, JSRi); op(0xfe, LDi, fp(LD ), X); op(0xff, STi, X); } } #undef op #undef fp ares-126/ares/component/processor/m68hc05/instructions.cpp000066400000000000000000000112601415063341600236360ustar00rootroot00000000000000#define ALU(...) (this->*fp)(__VA_ARGS__) auto M68HC05::instructionBCLR(n3 bit) -> void { n8 d = fetch(); n8 r = load(d); step(1); r &= ~(1 << bit); store(d, r); } auto M68HC05::instructionBRA(b1 c) -> void { i8 r = fetch(); step(1); if(c) PC = PC + r; } auto M68HC05::instructionBRCLR(n3 bit) -> void { n8 d = fetch(); i8 r = fetch(); n8 b = load(d); step(1); if((b & 1 << bit) == 0) PC = PC + r; } auto M68HC05::instructionBRSET(n3 bit) -> void { n8 d = fetch(); i8 r = fetch(); n8 b = load(d); step(1); if((b & 1 << bit) != 0) PC = PC + r; } auto M68HC05::instructionBSET(n3 bit) -> void { n8 d = fetch(); n8 r = load(d); step(1); r |= 1 << bit; store(d, r); } auto M68HC05::instructionBSR() -> void { i8 r = fetch(); push(PC - 1); step(2); PC = PC + r; } auto M68HC05::instructionCLR(b1& f) -> void { step(1); f = 0; } auto M68HC05::instructionILL() -> void { step(1); } auto M68HC05::instructionJMPa() -> void { n16 a = fetch(); PC = a; } auto M68HC05::instructionJMPd() -> void { n8 d = fetch(); PC = d; } auto M68HC05::instructionJMPi() -> void { step(1); PC = X; } auto M68HC05::instructionJMPo() -> void { n8 d = fetch(); step(1); PC = X + d; } auto M68HC05::instructionJMPw() -> void { n16 a = fetch(); step(1); PC = X + a; } auto M68HC05::instructionJSRa() -> void { n16 a = fetch(); push(PC - 1); step(1); PC = a; } auto M68HC05::instructionJSRd() -> void { n8 d = fetch(); push(PC - 1); step(1); PC = d; } auto M68HC05::instructionJSRi() -> void { step(1); push(PC - 1); step(1); PC = X; } auto M68HC05::instructionJSRo() -> void { step(1); n8 d = fetch(); push(PC - 1); step(1); PC = X + d; } auto M68HC05::instructionJSRw() -> void { step(1); n16 a = fetch(); push(PC - 1); step(1); PC = X + a; } auto M68HC05::instructionLDa(f2 fp, n8& r) -> void { n16 a = fetch(); n8 b = load(a); r = ALU(r, b); } auto M68HC05::instructionLDd(f2 fp, n8& r) -> void { n8 d = fetch(); n8 b = load(d); r = ALU(r, b); } auto M68HC05::instructionLDi(f2 fp, n8& r) -> void { n8 b = load(X); step(1); r = ALU(r, b); } auto M68HC05::instructionLDo(f2 fp, n8& r) -> void { n8 d = fetch(); n8 b = load(X + d); step(1); r = ALU(r, b); } auto M68HC05::instructionLDr(f2 fp, n8& r) -> void { n8 b = fetch(); r = ALU(r, b); } auto M68HC05::instructionLDw(f2 fp, n8& r) -> void { n16 a = fetch(); n8 b = load(X + a); step(1); r = ALU(r, b); } auto M68HC05::instructionMUL() -> void { step(10); n16 m = A * X; A = m >> 0; X = m >> 8; CCR.C = 0; CCR.H = 0; } auto M68HC05::instructionNOP() -> void { step(1); } auto M68HC05::instructionRMWd(f1 fp) -> void { n8 d = fetch(); n8 r = load(d); step(1); store(d, ALU(r)); } auto M68HC05::instructionRMWi(f1 fp) -> void { step(1); n8 r = load(X); step(1); store(X, ALU(r)); } auto M68HC05::instructionRMWo(f1 fp) -> void { step(1); n8 d = fetch(); n8 r = load(X + d); step(1); store(d, ALU(r)); } auto M68HC05::instructionRMWr(f1 fp, n8& r) -> void { step(2); r = ALU(r); } auto M68HC05::instructionRSP() -> void { step(1); SP = 0xff; } auto M68HC05::instructionRTI() -> void { CCR = pop(); PC = pop(); step(5); } auto M68HC05::instructionRTS() -> void { PC = pop() + 1; step(3); } auto M68HC05::instructionSET(b1& f) -> void { step(1); f = 1; } auto M68HC05::instructionSTa(n8& r) -> void { n16 a = fetch(); step(1); store(a, r); } auto M68HC05::instructionSTd(n8& r) -> void { n8 d = fetch(); step(1); store(d, r); } auto M68HC05::instructionSTi(n8& r) -> void { step(2); store(X, r); } auto M68HC05::instructionSTo(n8& r) -> void { n8 d = fetch(); step(2); store(X + d, r); } auto M68HC05::instructionSTw(n8& r) -> void { n16 a = fetch(); step(2); store(X + a, r); } auto M68HC05::instructionSTOP() -> void { step(1); PC = PC - 1; } auto M68HC05::instructionSWI() -> void { push(PC); push(CCR); step(6); CCR.I = 1; PC = 0; } auto M68HC05::instructionTAX() -> void { step(1); X = A; } auto M68HC05::instructionTSTd(f1 fp) -> void { n8 d = fetch(); n8 r = load(d); step(1); ALU(r); } auto M68HC05::instructionTSTi(f1 fp) -> void { step(1); n8 r = load(X); step(1); ALU(r); } auto M68HC05::instructionTSTo(f1 fp) -> void { step(1); n8 d = fetch(); n8 r = load(X + d); step(1); ALU(r); } auto M68HC05::instructionTSTr(f1 fp, n8& r) -> void { step(2); ALU(r); } auto M68HC05::instructionTXA() -> void { step(1); A = X; } auto M68HC05::instructionWAIT() -> void { step(1); if(!IRQ) PC = PC - 1; } #undef call ares-126/ares/component/processor/m68hc05/m68hc05.cpp000066400000000000000000000005031415063341600221620ustar00rootroot00000000000000#include #include "m68hc05.hpp" namespace ares { #include "memory.cpp" #include "algorithms.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto M68HC05::power() -> void { A = 0; X = 0; PC = 0; SP = 0xff; CCR = 0; } } ares-126/ares/component/processor/m68hc05/m68hc05.hpp000066400000000000000000000074231415063341600221770ustar00rootroot00000000000000//Motorola 68HC05 #pragma once namespace ares { struct M68HC05 { virtual auto step(u32 cycles) -> void = 0; virtual auto read(n16 address) -> n8 = 0; virtual auto write(n16 address, n8 data) -> void = 0; //m68hc05.cpp auto power() -> void; //memory.cpp auto load(n16 address) -> n8; auto store(n16 address, n8 data) -> void; template auto fetch() -> T; template auto push(T) -> void; template auto pop() -> T; //algorithms.cpp using f1 = auto (M68HC05::*)(n8) -> n8; using f2 = auto (M68HC05::*)(n8, n8) -> n8; auto algorithmADC(n8, n8) -> n8; auto algorithmADD(n8, n8) -> n8; auto algorithmAND(n8, n8) -> n8; auto algorithmASR(n8) -> n8; auto algorithmBIT(n8, n8) -> n8; auto algorithmCLR(n8) -> n8; auto algorithmCMP(n8, n8) -> n8; auto algorithmCOM(n8) -> n8; auto algorithmDEC(n8) -> n8; auto algorithmEOR(n8, n8) -> n8; auto algorithmINC(n8) -> n8; auto algorithmLD (n8, n8) -> n8; auto algorithmLSL(n8) -> n8; auto algorithmLSR(n8) -> n8; auto algorithmNEG(n8) -> n8; auto algorithmOR (n8, n8) -> n8; auto algorithmROL(n8) -> n8; auto algorithmROR(n8) -> n8; auto algorithmSBC(n8, n8) -> n8; auto algorithmSUB(n8, n8) -> n8; auto algorithmTST(n8) -> n8; //instruction.cpp auto interrupt() -> void; auto instruction() -> void; //instructions.cpp auto instructionBCLR(n3) -> void; auto instructionBRA(b1) -> void; auto instructionBRCLR(n3) -> void; auto instructionBRSET(n3) -> void; auto instructionBSET(n3) -> void; auto instructionBSR() -> void; auto instructionCLR(b1&) -> void; auto instructionILL() -> void; auto instructionJMPa() -> void; auto instructionJMPd() -> void; auto instructionJMPi() -> void; auto instructionJMPo() -> void; auto instructionJMPw() -> void; auto instructionJSRa() -> void; auto instructionJSRd() -> void; auto instructionJSRi() -> void; auto instructionJSRo() -> void; auto instructionJSRw() -> void; auto instructionLDa(f2, n8&) -> void; auto instructionLDd(f2, n8&) -> void; auto instructionLDi(f2, n8&) -> void; auto instructionLDo(f2, n8&) -> void; auto instructionLDr(f2, n8&) -> void; auto instructionLDw(f2, n8&) -> void; auto instructionMUL () -> void; auto instructionNOP() -> void; auto instructionRMWd(f1) -> void; auto instructionRMWi(f1) -> void; auto instructionRMWo(f1) -> void; auto instructionRMWr(f1, n8&) -> void; auto instructionRSP() -> void; auto instructionRTI() -> void; auto instructionRTS() -> void; auto instructionSET(b1&) -> void; auto instructionSTa(n8&) -> void; auto instructionSTd(n8&) -> void; auto instructionSTi(n8&) -> void; auto instructionSTo(n8&) -> void; auto instructionSTw(n8&) -> void; auto instructionSTOP() -> void; auto instructionSWI() -> void; auto instructionTAX() -> void; auto instructionTSTd(f1) -> void; auto instructionTSTi(f1) -> void; auto instructionTSTo(f1) -> void; auto instructionTSTr(f1, n8&) -> void; auto instructionTXA() -> void; auto instructionWAIT() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp auto disassembleInstruction() -> string; auto disassembleContext() -> string; n8 A; //accumulator n8 X; //index register n16 PC; //program counter n6 SP; //stack pointer struct { //condition code register operator u8() const { return C << 0 | Z << 1 | N << 2 | I << 3 | H << 4 | 0b111 << 5; } auto& operator=(u8 data) { C = data >> 0 & 1; Z = data >> 1 & 1; N = data >> 2 & 1; I = data >> 3 & 1; H = data >> 4 & 1; return *this; } b1 C; //carry b1 Z; //zero b1 N; //negative b1 I; //interrupt mask b1 H; //half-carry } CCR; n1 IRQ; //interrupt request }; } ares-126/ares/component/processor/m68hc05/memory.cpp000066400000000000000000000014351415063341600224050ustar00rootroot00000000000000auto M68HC05::load(n16 address) -> n8 { step(1); return read(address); } auto M68HC05::store(n16 address, n8 data) -> void { step(1); write(address, data); } template<> auto M68HC05::fetch() -> n8 { step(1); return load(PC++); } template<> auto M68HC05::fetch() -> n16 { n8 lo = load(PC++); n8 hi = load(PC++); return lo << 0 | hi << 8; } template<> auto M68HC05::push(n8 data) -> void { store(0x00c0 | SP--, data); } template<> auto M68HC05::push(n16 data) -> void { store(0x00c0 | SP--, data >> 8); store(0x00c0 | SP--, data >> 0); } template<> auto M68HC05::pop() -> n8 { return load(0x00c0 | ++SP); } template<> auto M68HC05::pop() -> n16 { n8 lo = load(0x00c0 | ++SP); n8 hi = load(0x00c0 | ++SP); return lo << 0 | hi << 8; } ares-126/ares/component/processor/m68hc05/serialization.cpp000066400000000000000000000002331415063341600237450ustar00rootroot00000000000000auto M68HC05::serialize(serializer& s) -> void { s(A); s(X); s(PC); s(SP); s(CCR.C); s(CCR.Z); s(CCR.N); s(CCR.I); s(CCR.H); s(IRQ); } ares-126/ares/component/processor/mos6502/000077500000000000000000000000001415063341600204075ustar00rootroot00000000000000ares-126/ares/component/processor/mos6502/algorithms.cpp000066400000000000000000000044501415063341600232670ustar00rootroot00000000000000auto MOS6502::algorithmADC(n8 i) -> n8 { i16 o; if(!BCD || !D) { o = A + i + C; V = ~(A ^ i) & (A ^ o) & 0x80; } else { idle(); o = (A & 0x0f) + (i & 0x0f) + (C << 0); if(o > 0x09) o += 0x06; C = o > 0x0f; o = (A & 0xf0) + (i & 0xf0) + (C << 4) + (o & 0x0f); if(o > 0x9f) o += 0x60; } C = o.bit(8); Z = n8(o) == 0; N = o.bit(7); return o; } auto MOS6502::algorithmAND(n8 i) -> n8 { n8 o = A & i; Z = o == 0; N = o.bit(7); return o; } auto MOS6502::algorithmASL(n8 i) -> n8 { C = i.bit(7); i <<= 1; Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmBIT(n8 i) -> n8 { Z = (A & i) == 0; V = i.bit(6); N = i.bit(7); return A; } auto MOS6502::algorithmCMP(n8 i) -> n8 { n9 o = A - i; C = !o.bit(8); Z = n8(o) == 0; N = o.bit(7); return A; } auto MOS6502::algorithmCPX(n8 i) -> n8 { n9 o = X - i; C = !o.bit(8); Z = n8(o) == 0; N = o.bit(7); return X; } auto MOS6502::algorithmCPY(n8 i) -> n8 { n9 o = Y - i; C = !o.bit(8); Z = n8(o) == 0; N = o.bit(7); return Y; } auto MOS6502::algorithmDEC(n8 i) -> n8 { i--; Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmEOR(n8 i) -> n8 { n8 o = A ^ i; Z = o == 0; N = o.bit(7); return o; } auto MOS6502::algorithmINC(n8 i) -> n8 { i++; Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmLD(n8 i) -> n8 { Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmLSR(n8 i) -> n8 { C = i.bit(0); i >>= 1; Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmORA(n8 i) -> n8 { n8 o = A | i; Z = o == 0; N = o.bit(7); return o; } auto MOS6502::algorithmROL(n8 i) -> n8 { bool c = C; C = i.bit(7); i = i << 1 | c; Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmROR(n8 i) -> n8 { bool c = C; C = i.bit(0); i = c << 7 | i >> 1; Z = i == 0; N = i.bit(7); return i; } auto MOS6502::algorithmSBC(n8 i) -> n8 { i = ~i; i16 o; if(!BCD || !D) { o = A + i + C; V = ~(A ^ i) & (A ^ o) & 0x80; } else { idle(); o = (A & 0x0f) + (i & 0x0f) + (C << 0); if(o <= 0x0f) o -= 0x06; C = o > 0x0f; o = (A & 0xf0) + (i & 0xf0) + (C << 4) + (o & 0x0f); if(o <= 0xff) o -= 0x60; } C = o.bit(8); Z = n8(o) == 0; N = o.bit(7); return o; } ares-126/ares/component/processor/mos6502/disassembler.cpp000066400000000000000000000141621415063341600235740ustar00rootroot00000000000000auto MOS6502::disassembleInstruction(maybe _pc) -> string { n16 pc = _pc ? *_pc : PC; string s; auto absolute = [&]() -> string { return {"$", hex(readDebugger(pc + 2), 2L), hex(readDebugger(pc + 1), 2L)}; }; auto absoluteX = [&]() -> string { return {"$", hex(readDebugger(pc + 2), 2L), hex(readDebugger(pc + 1), 2L), ",x"}; }; auto absoluteY = [&]() -> string { return {"$", hex(readDebugger(pc + 2), 2L), hex(readDebugger(pc + 1), 2L), ",y"}; }; auto branch = [&]() -> string { return {"$", hex((pc + 2) + (i8)readDebugger(pc + 1), 4L)}; }; auto immediate = [&]() -> string { return {"#$", hex(readDebugger(pc + 1), 2L)}; }; auto implied = [&]() -> string { return {""}; }; auto indirect = [&]() -> string { return {"($", hex(readDebugger(pc + 2), 2L), hex(readDebugger(pc + 1), 2L), ")"}; }; auto indirectX = [&]() -> string { return {"($", hex(readDebugger(pc + 1), 2L), ",x)"}; }; auto indirectY = [&]() -> string { return {"($", hex(readDebugger(pc + 1), 2L), "),y"}; }; auto zeroPage = [&]() -> string { return {"$", hex(readDebugger(pc + 1), 2L)}; }; auto zeroPageX = [&]() -> string { return {"$", hex(readDebugger(pc + 1), 2L), ",x"}; }; auto zeroPageY = [&]() -> string { return {"$", hex(readDebugger(pc + 1), 2L), ",y"}; }; #define op(id, prefix, mode) \ case id: s.append(prefix, " ", mode()); \ break; switch(auto opcode = readDebugger(pc)) { op(0x00, "brk", immediate) op(0x01, "ora", indirectX) op(0x05, "ora", zeroPage) op(0x06, "asl", zeroPage) op(0x08, "php", implied) op(0x09, "ora", immediate) op(0x0a, "asl", implied) op(0x0d, "ora", absolute) op(0x0e, "asl", absolute) op(0x10, "bpl", branch) op(0x11, "ora", indirectY) op(0x15, "ora", zeroPageX) op(0x16, "asl", zeroPageX) op(0x18, "clc", implied) op(0x19, "ora", absoluteY) op(0x1d, "ora", absoluteX) op(0x1e, "asl", absoluteX) op(0x20, "jsr", absolute) op(0x21, "and", indirectX) op(0x24, "bit", zeroPage) op(0x25, "and", zeroPage) op(0x26, "rol", zeroPage) op(0x28, "plp", implied) op(0x29, "and", immediate) op(0x2a, "rol", implied) op(0x2c, "bit", absolute) op(0x2d, "and", absolute) op(0x2e, "rol", absolute) op(0x30, "bmi", branch) op(0x31, "and", indirectY) op(0x35, "and", zeroPageX) op(0x36, "rol", zeroPageX) op(0x38, "sec", implied) op(0x39, "and", absoluteY) op(0x3d, "and", absoluteX) op(0x3e, "rol", absoluteX) op(0x40, "rti", implied) op(0x41, "eor", indirectX) op(0x45, "eor", zeroPage) op(0x46, "lsr", zeroPage) op(0x48, "pha", implied) op(0x49, "eor", immediate) op(0x4a, "lsr", implied) op(0x4c, "jmp", absolute) op(0x4d, "eor", absolute) op(0x4e, "lsr", absolute) op(0x50, "bvc", branch) op(0x51, "eor", indirectY) op(0x55, "eor", zeroPageX) op(0x56, "lsr", zeroPageX) op(0x58, "cli", implied) op(0x59, "eor", absoluteY) op(0x5d, "eor", absoluteX) op(0x5e, "lsr", absoluteX) op(0x60, "rts", implied) op(0x61, "adc", indirectX) op(0x65, "adc", zeroPage) op(0x66, "ror", zeroPage) op(0x68, "pla", implied) op(0x69, "adc", immediate) op(0x6a, "ror", implied) op(0x6c, "jmp", indirect) op(0x6d, "adc", absolute) op(0x6e, "ror", absolute) op(0x70, "bvs", branch) op(0x71, "adc", indirectY) op(0x75, "adc", zeroPageX) op(0x76, "ror", zeroPageX) op(0x78, "sei", implied) op(0x79, "adc", absoluteY) op(0x7d, "adc", absoluteX) op(0x7e, "ror", absoluteX) op(0x81, "sta", indirectX) op(0x84, "sty", zeroPage) op(0x85, "sta", zeroPage) op(0x86, "stx", zeroPage) op(0x88, "dey", implied) op(0x8a, "txa", implied) op(0x8c, "sty", absolute) op(0x8d, "sta", absolute) op(0x8e, "stx", absolute) op(0x90, "bcc", branch) op(0x91, "sta", indirectY) op(0x94, "sty", zeroPageX) op(0x95, "sta", zeroPageX) op(0x96, "stx", zeroPageY) op(0x98, "tya", implied) op(0x99, "sta", absoluteY) op(0x9a, "txs", implied) op(0x9d, "sta", absoluteX) op(0xa0, "ldy", immediate) op(0xa1, "lda", indirectX) op(0xa2, "ldx", immediate) op(0xa4, "ldy", zeroPage) op(0xa5, "lda", zeroPage) op(0xa6, "ldx", zeroPage) op(0xa8, "tay", implied) op(0xa9, "lda", immediate) op(0xaa, "tax", implied) op(0xac, "ldy", absolute) op(0xad, "lda", absolute) op(0xae, "ldx", absolute) op(0xb0, "bcs", branch) op(0xb1, "lda", indirectY) op(0xb4, "ldy", zeroPageX) op(0xb5, "lda", zeroPageX) op(0xb6, "ldx", zeroPageY) op(0xb8, "clv", implied) op(0xb9, "lda", absoluteY) op(0xba, "tsx", implied) op(0xbc, "ldy", absoluteX) op(0xbd, "lda", absoluteX) op(0xbe, "ldx", absoluteY) op(0xc0, "cpy", immediate) op(0xc1, "cmp", indirectX) op(0xc4, "cpy", zeroPage) op(0xc5, "cmp", zeroPage) op(0xc6, "dec", zeroPage) op(0xc8, "iny", implied) op(0xc9, "cmp", immediate) op(0xca, "dex", implied) op(0xcc, "cpy", absolute) op(0xcd, "cmp", absolute) op(0xce, "dec", absolute) op(0xd0, "bne", branch) op(0xd1, "cmp", indirectY) op(0xd5, "cmp", zeroPageX) op(0xd6, "dec", zeroPageX) op(0xd8, "cld", implied) op(0xd9, "cmp", absoluteY) op(0xdd, "cmp", absoluteX) op(0xde, "dec", absoluteX) op(0xe0, "cpx", immediate) op(0xe1, "sbc", indirectX) op(0xe4, "cpx", zeroPage) op(0xe5, "sbc", zeroPage) op(0xe6, "inc", zeroPage) op(0xe8, "inx", implied) op(0xe9, "sbc", immediate) op(0xea, "nop", implied) op(0xec, "cpx", absolute) op(0xed, "sbc", absolute) op(0xee, "inc", absolute) op(0xf0, "beq", branch) op(0xf1, "sbc", indirectY) op(0xf5, "sbc", zeroPageX) op(0xf6, "inc", zeroPageX) op(0xf8, "sed", implied) op(0xf9, "sbc", absoluteY) op(0xfd, "sbc", absoluteX) op(0xfe, "inc", absoluteX) default: s.append("$", hex(opcode, 2L)); break; } #undef op return pad(s, -11); } auto MOS6502::disassembleContext() -> string { string s; s.append("A:", hex(A, 2L), " "); s.append("X:", hex(X, 2L), " "); s.append("Y:", hex(Y, 2L), " "); s.append("S:", hex(S, 2L), " "); s.append(N ? "N" : "n"); s.append(V ? "V" : "v"); s.append("-"); s.append("-"); s.append(D ? "D" : "d"); s.append(I ? "I" : "i"); s.append(Z ? "Z" : "z"); s.append(C ? "C" : "c"); return s; } ares-126/ares/component/processor/mos6502/instruction.cpp000066400000000000000000000127421415063341600235020ustar00rootroot00000000000000#define op(id, name, ...) case id: return instruction##name(__VA_ARGS__); #define fp(name) &MOS6502::algorithm##name auto MOS6502::interrupt() -> void { idle(); idle(); push(PCH); push(PCL); n16 vector = 0xfffe; nmi(vector); push(P | 0x20); I = 1; PCL = read(vector++); L PCH = read(vector++); } auto MOS6502::instruction() -> void { auto code = opcode(); switch(code) { op(0x00, Break) op(0x01, IndirectXRead, fp(ORA), A) op(0x05, ZeroPageRead, fp(ORA), A) op(0x06, ZeroPageModify, fp(ASL)) op(0x08, PushP) op(0x09, Immediate, fp(ORA), A) op(0x0a, Implied, fp(ASL), A) op(0x0d, AbsoluteRead, fp(ORA), A) op(0x0e, AbsoluteModify, fp(ASL)) op(0x10, Branch, N == 0) op(0x11, IndirectYRead, fp(ORA), A) op(0x15, ZeroPageRead, fp(ORA), A, X) op(0x16, ZeroPageModify, fp(ASL), X) op(0x18, Clear, C) op(0x19, AbsoluteRead, fp(ORA), A, Y) op(0x1d, AbsoluteRead, fp(ORA), A, X) op(0x1e, AbsoluteModify, fp(ASL), X) op(0x20, CallAbsolute) op(0x21, IndirectXRead, fp(AND), A) op(0x24, ZeroPageRead, fp(BIT), A) op(0x25, ZeroPageRead, fp(AND), A) op(0x26, ZeroPageModify, fp(ROL)) op(0x28, PullP) op(0x29, Immediate, fp(AND), A) op(0x2a, Implied, fp(ROL), A) op(0x2c, AbsoluteRead, fp(BIT), A) op(0x2d, AbsoluteRead, fp(AND), A) op(0x2e, AbsoluteModify, fp(ROL)) op(0x30, Branch, N == 1) op(0x31, IndirectYRead, fp(AND), A) op(0x35, ZeroPageRead, fp(AND), A, X) op(0x36, ZeroPageModify, fp(ROL), X) op(0x38, Set, C) op(0x39, AbsoluteRead, fp(AND), A, Y) op(0x3d, AbsoluteRead, fp(AND), A, X) op(0x3e, AbsoluteModify, fp(ROL), X) op(0x40, ReturnInterrupt) op(0x41, IndirectXRead, fp(EOR), A) op(0x45, ZeroPageRead, fp(EOR), A) op(0x46, ZeroPageModify, fp(LSR)) op(0x48, Push, A) op(0x49, Immediate, fp(EOR), A) op(0x4a, Implied, fp(LSR), A) op(0x4c, JumpAbsolute) op(0x4d, AbsoluteRead, fp(EOR), A) op(0x4e, AbsoluteModify, fp(LSR)) op(0x50, Branch, V == 0) op(0x51, IndirectYRead, fp(EOR), A) op(0x55, ZeroPageRead, fp(EOR), A, X) op(0x56, ZeroPageModify, fp(LSR), X) op(0x58, Clear, I) op(0x59, AbsoluteRead, fp(EOR), A, Y) op(0x5d, AbsoluteRead, fp(EOR), A, X) op(0x5e, AbsoluteModify, fp(LSR), X) op(0x60, ReturnSubroutine) op(0x61, IndirectXRead, fp(ADC), A) op(0x65, ZeroPageRead, fp(ADC), A) op(0x66, ZeroPageModify, fp(ROR)) op(0x68, Pull, A) op(0x69, Immediate, fp(ADC), A) op(0x6a, Implied, fp(ROR), A) op(0x6c, JumpIndirect) op(0x6d, AbsoluteRead, fp(ADC), A) op(0x6e, AbsoluteModify, fp(ROR)) op(0x70, Branch, V == 1) op(0x71, IndirectYRead, fp(ADC), A) op(0x75, ZeroPageRead, fp(ADC), A, X) op(0x76, ZeroPageModify, fp(ROR), X) op(0x78, Set, I) op(0x79, AbsoluteRead, fp(ADC), A, Y) op(0x7d, AbsoluteRead, fp(ADC), A, X) op(0x7e, AbsoluteModify, fp(ROR), X) op(0x81, IndirectXWrite, A) op(0x84, ZeroPageWrite, Y) op(0x85, ZeroPageWrite, A) op(0x86, ZeroPageWrite, X) op(0x88, Implied, fp(DEC), Y) op(0x8a, Transfer, X, A, 1) op(0x8c, AbsoluteWrite, Y) op(0x8d, AbsoluteWrite, A) op(0x8e, AbsoluteWrite, X) op(0x90, Branch, C == 0) op(0x91, IndirectYWrite, A) op(0x94, ZeroPageWrite, Y, X) op(0x95, ZeroPageWrite, A, X) op(0x96, ZeroPageWrite, X, Y) op(0x98, Transfer, Y, A, 1) op(0x99, AbsoluteWrite, A, Y) op(0x9a, Transfer, X, S, 0) op(0x9d, AbsoluteWrite, A, X) op(0xa0, Immediate, fp(LD), Y) op(0xa1, IndirectXRead, fp(LD), A) op(0xa2, Immediate, fp(LD), X) op(0xa4, ZeroPageRead, fp(LD), Y) op(0xa5, ZeroPageRead, fp(LD), A) op(0xa6, ZeroPageRead, fp(LD), X) op(0xa8, Transfer, A, Y, 1) op(0xa9, Immediate, fp(LD), A) op(0xaa, Transfer, A, X, 1) op(0xac, AbsoluteRead, fp(LD), Y) op(0xad, AbsoluteRead, fp(LD), A) op(0xae, AbsoluteRead, fp(LD), X) op(0xb0, Branch, C == 1) op(0xb1, IndirectYRead, fp(LD), A) op(0xb4, ZeroPageRead, fp(LD), Y, X) op(0xb5, ZeroPageRead, fp(LD), A, X) op(0xb6, ZeroPageRead, fp(LD), X, Y) op(0xb8, Clear, V) op(0xb9, AbsoluteRead, fp(LD), A, Y) op(0xba, Transfer, S, X, 1) op(0xbc, AbsoluteRead, fp(LD), Y, X) op(0xbd, AbsoluteRead, fp(LD), A, X) op(0xbe, AbsoluteRead, fp(LD), X, Y) op(0xc0, Immediate, fp(CPY), Y) op(0xc1, IndirectXRead, fp(CMP), A) op(0xc4, ZeroPageRead, fp(CPY), Y) op(0xc5, ZeroPageRead, fp(CMP), A) op(0xc6, ZeroPageModify, fp(DEC)) op(0xc8, Implied, fp(INC), Y) op(0xc9, Immediate, fp(CMP), A) op(0xca, Implied, fp(DEC), X) op(0xcc, AbsoluteRead, fp(CPY), Y) op(0xcd, AbsoluteRead, fp(CMP), A) op(0xce, AbsoluteModify, fp(DEC)) op(0xd0, Branch, Z == 0) op(0xd1, IndirectYRead, fp(CMP), A) op(0xd5, ZeroPageRead, fp(CMP), A, X) op(0xd6, ZeroPageModify, fp(DEC), X) op(0xd8, Clear, D) op(0xd9, AbsoluteRead, fp(CMP), A, Y) op(0xdd, AbsoluteRead, fp(CMP), A, X) op(0xde, AbsoluteModify, fp(DEC), X) op(0xe0, Immediate, fp(CPX), X) op(0xe1, IndirectXRead, fp(SBC), A) op(0xe4, ZeroPageRead, fp(CPX), X) op(0xe5, ZeroPageRead, fp(SBC), A) op(0xe6, ZeroPageModify, fp(INC)) op(0xe8, Implied, fp(INC), X) op(0xe9, Immediate, fp(SBC), A) op(0xea, NoOperation) op(0xec, AbsoluteRead, fp(CPX), X) op(0xed, AbsoluteRead, fp(SBC), A) op(0xee, AbsoluteModify, fp(INC)) op(0xf0, Branch, Z == 1) op(0xf1, IndirectYRead, fp(SBC), A) op(0xf5, ZeroPageRead, fp(SBC), A, X) op(0xf6, ZeroPageModify, fp(INC), X) op(0xf8, Set, D) op(0xf9, AbsoluteRead, fp(SBC), A, Y) op(0xfd, AbsoluteRead, fp(SBC), A, X) op(0xfe, AbsoluteModify, fp(INC), X) } //unimplemented instruction return instructionNoOperation(); } #undef op #undef fp ares-126/ares/component/processor/mos6502/instructions.cpp000066400000000000000000000122211415063341600236550ustar00rootroot00000000000000auto MOS6502::instructionAbsoluteModify(fp alu) -> void { n16 absolute = operand(); absolute |= operand() << 8; auto data = read(absolute); write(absolute, data); L write(absolute, ALU(data)); } auto MOS6502::instructionAbsoluteModify(fp alu, n8 index) -> void { n16 absolute = operand(); absolute |= operand() << 8; idlePageAlways(absolute, absolute + index); auto data = read(absolute + index); write(absolute + index, data); L write(absolute + index, ALU(data)); } auto MOS6502::instructionAbsoluteRead(fp alu, n8& data) -> void { n16 absolute = operand(); absolute |= operand() << 8; L data = ALU(read(absolute)); } auto MOS6502::instructionAbsoluteRead(fp alu, n8& data, n8 index) -> void { n16 absolute = operand(); absolute |= operand() << 8; idlePageCrossed(absolute, absolute + index); L data = ALU(read(absolute + index)); } auto MOS6502::instructionAbsoluteWrite(n8& data) -> void { n16 absolute = operand(); absolute |= operand() << 8; L write(absolute, data); } auto MOS6502::instructionAbsoluteWrite(n8& data, n8 index) -> void { n16 absolute = operand(); absolute |= operand() << 8; idlePageAlways(absolute, absolute + index); L write(absolute + index, data); } auto MOS6502::instructionBranch(bool take) -> void { if(!take) { L operand(); } else { i8 displacement = operand(); idlePageCrossed(PC, PC + displacement); L idle(); PC = PC + displacement; } } auto MOS6502::instructionBreak() -> void { operand(); push(PCH); push(PCL); n16 vector = 0xfffe; nmi(vector); push(P | 0x30); I = 1; PCL = read(vector++); L PCH = read(vector++); } auto MOS6502::instructionCallAbsolute() -> void { n16 absolute = operand(); absolute |= operand() << 8; idle(); PC--; push(PCH); L push(PCL); PC = absolute; } auto MOS6502::instructionClear(bool& flag) -> void { L idle(); flag = 0; } auto MOS6502::instructionImmediate(fp alu, n8& data) -> void { L data = ALU(operand()); } auto MOS6502::instructionImplied(fp alu, n8& data) -> void { L idle(); data = ALU(data); } auto MOS6502::instructionIndirectXRead(fp alu, n8& data) -> void { auto zeroPage = operand(); load(zeroPage); n16 absolute = load(zeroPage + X + 0); absolute |= load(zeroPage + X + 1) << 8; L data = ALU(read(absolute)); } auto MOS6502::instructionIndirectXWrite(n8& data) -> void { auto zeroPage = operand(); load(zeroPage); n16 absolute = load(zeroPage + X + 0); absolute |= load(zeroPage + X + 1) << 8; L write(absolute, data); } auto MOS6502::instructionIndirectYRead(fp alu, n8& data) -> void { auto zeroPage = operand(); n16 absolute = load(zeroPage + 0); absolute |= load(zeroPage + 1) << 8; idlePageCrossed(absolute, absolute + Y); L data = ALU(read(absolute + Y)); } auto MOS6502::instructionIndirectYWrite(n8& data) -> void { auto zeroPage = operand(); n16 absolute = load(zeroPage + 0); absolute |= load(zeroPage + 1) << 8; idlePageAlways(absolute, absolute + Y); L write(absolute + Y, data); } auto MOS6502::instructionJumpAbsolute() -> void { n16 absolute = operand(); L absolute |= operand() << 8; PC = absolute; } auto MOS6502::instructionJumpIndirect() -> void { n16 absolute = operand(); absolute |= operand() << 8; n16 pc = read(absolute); absolute.byte(0)++; //MOS6502: $00ff wraps here to $0000; not $0100 L pc |= read(absolute) << 8; PC = pc; } auto MOS6502::instructionNoOperation() -> void { L idle(); } auto MOS6502::instructionPull(n8& data) -> void { idle(); idle(); L data = pull(); Z = data == 0; N = data.bit(7); } auto MOS6502::instructionPullP() -> void { idle(); idle(); L P = pull(); } auto MOS6502::instructionPush(n8& data) -> void { idle(); L push(data); } auto MOS6502::instructionPushP() -> void { idle(); L push(P | 0x30); } auto MOS6502::instructionReturnInterrupt() -> void { idle(); idle(); P = pull(); PCL = pull(); L PCH = pull(); } auto MOS6502::instructionReturnSubroutine() -> void { idle(); idle(); PCL = pull(); PCH = pull(); L idle(); PC++; } auto MOS6502::instructionSet(bool& flag) -> void { L idle(); flag = 1; } auto MOS6502::instructionTransfer(n8& source, n8& target, bool flag) -> void { L idle(); target = source; if(!flag) return; Z = target == 0; N = target.bit(7); } auto MOS6502::instructionZeroPageModify(fp alu) -> void { auto zeroPage = operand(); auto data = load(zeroPage); store(zeroPage, data); L store(zeroPage, ALU(data)); } auto MOS6502::instructionZeroPageModify(fp alu, n8 index) -> void { auto zeroPage = operand(); load(zeroPage); auto data = load(zeroPage + index); store(zeroPage + index, data); L store(zeroPage + index, ALU(data)); } auto MOS6502::instructionZeroPageRead(fp alu, n8& data) -> void { auto zeroPage = operand(); L data = ALU(load(zeroPage)); } auto MOS6502::instructionZeroPageRead(fp alu, n8& data, n8 index) -> void { auto zeroPage = operand(); load(zeroPage); L data = ALU(load(zeroPage + index)); } auto MOS6502::instructionZeroPageWrite(n8& data) -> void { auto zeroPage = operand(); L store(zeroPage, data); } auto MOS6502::instructionZeroPageWrite(n8& data, n8 index) -> void { auto zeroPage = operand(); read(zeroPage); L store(zeroPage + index, data); } ares-126/ares/component/processor/mos6502/memory.cpp000066400000000000000000000011751415063341600224270ustar00rootroot00000000000000auto MOS6502::idle() -> void { read(PC); } auto MOS6502::idlePageCrossed(n16 x, n16 y) -> void { if(x >> 8 == y >> 8) return; read((x & 0xff00) | (y & 0x00ff)); } auto MOS6502::idlePageAlways(n16 x, n16 y) -> void { read((x & 0xff00) | (y & 0x00ff)); } auto MOS6502::opcode() -> n8 { return read(PC++); } auto MOS6502::operand() -> n8 { return read(PC++); } auto MOS6502::load(n8 addr) -> n8 { return read(addr); } auto MOS6502::store(n8 addr, n8 data) -> void { write(addr, data); } auto MOS6502::push(n8 data) -> void { write(0x0100 | S--, data); } auto MOS6502::pull() -> n8 { return read(0x0100 | ++S); } ares-126/ares/component/processor/mos6502/mos6502.cpp000066400000000000000000000011611415063341600222250ustar00rootroot00000000000000#include #include "mos6502.hpp" namespace ares { #define PCH PC.byte(1) #define PCL PC.byte(0) #define ALU (this->*alu) #define C P.c #define Z P.z #define I P.i #define D P.d #define V P.v #define N P.n #define L lastCycle(); #include "memory.cpp" #include "algorithms.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "disassembler.cpp" #include "serialization.cpp" #undef PCH #undef PCL #undef ALU #undef C #undef Z #undef I #undef D #undef V #undef N #undef L auto MOS6502::power() -> void { A = 0x00; X = 0x00; Y = 0x00; S = 0xff; P = 0x04; MDR = 0x00; } } ares-126/ares/component/processor/mos6502/mos6502.hpp000066400000000000000000000073331415063341600222410ustar00rootroot00000000000000//MOS Technologies MOS6502 #pragma once namespace ares { struct MOS6502 { n1 BCD = 1; //set to 0 to disable BCD mode in ADC, SBC instructions virtual auto read(n16 addr) -> n8 = 0; virtual auto write(n16 addr, n8 data) -> void = 0; virtual auto lastCycle() -> void = 0; virtual auto nmi(n16& vector) -> void = 0; virtual auto readDebugger(n16 addr) -> n8 { return 0; } //mos6502.cpp auto power() -> void; //memory.cpp auto idle() -> void; auto idlePageCrossed(n16, n16) -> void; auto idlePageAlways(n16, n16) -> void; auto opcode() -> n8; auto operand() -> n8; auto load(n8 addr) -> n8; auto store(n8 addr, n8 data) -> void; auto push(n8 data) -> void; auto pull() -> n8; //algorithms.cpp using fp = auto (MOS6502::*)(n8) -> n8; auto algorithmADC(n8) -> n8; auto algorithmAND(n8) -> n8; auto algorithmASL(n8) -> n8; auto algorithmBIT(n8) -> n8; auto algorithmCMP(n8) -> n8; auto algorithmCPX(n8) -> n8; auto algorithmCPY(n8) -> n8; auto algorithmDEC(n8) -> n8; auto algorithmEOR(n8) -> n8; auto algorithmINC(n8) -> n8; auto algorithmLD (n8) -> n8; auto algorithmLSR(n8) -> n8; auto algorithmORA(n8) -> n8; auto algorithmROL(n8) -> n8; auto algorithmROR(n8) -> n8; auto algorithmSBC(n8) -> n8; //instruction.cpp auto interrupt() -> void; auto instruction() -> void; //instructions.cpp auto instructionAbsoluteModify(fp alu) -> void; auto instructionAbsoluteModify(fp alu, n8 index) -> void; auto instructionAbsoluteRead(fp alu, n8& data) -> void; auto instructionAbsoluteRead(fp alu, n8& data, n8 index) -> void; auto instructionAbsoluteWrite(n8& data) -> void; auto instructionAbsoluteWrite(n8& data, n8 index) -> void; auto instructionBranch(bool take) -> void; auto instructionBreak() -> void; auto instructionCallAbsolute() -> void; auto instructionClear(bool& flag) -> void; auto instructionImmediate(fp alu, n8& data) -> void; auto instructionImplied(fp alu, n8& data) -> void; auto instructionIndirectXRead(fp alu, n8& data) -> void; auto instructionIndirectXWrite(n8& data) -> void; auto instructionIndirectYRead(fp alu, n8& data) -> void; auto instructionIndirectYWrite(n8& data) -> void; auto instructionJumpAbsolute() -> void; auto instructionJumpIndirect() -> void; auto instructionNoOperation() -> void; auto instructionPull(n8& data) -> void; auto instructionPullP() -> void; auto instructionPush(n8& data) -> void; auto instructionPushP() -> void; auto instructionReturnInterrupt() -> void; auto instructionReturnSubroutine() -> void; auto instructionSet(bool& flag) -> void; auto instructionTransfer(n8& source, n8& target, bool flag) -> void; auto instructionZeroPageModify(fp alu) -> void; auto instructionZeroPageModify(fp alu, n8 index) -> void; auto instructionZeroPageRead(fp alu, n8& data) -> void; auto instructionZeroPageRead(fp alu, n8& data, n8 index) -> void; auto instructionZeroPageWrite(n8& data) -> void; auto instructionZeroPageWrite(n8& data, n8 index) -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp noinline auto disassembleInstruction(maybe pc = {}) -> string; noinline auto disassembleContext() -> string; struct PR { bool c; //carry bool z; //zero bool i; //interrupt disable bool d; //decimal mode bool v; //overflow bool n; //negative operator u8() const { return c << 0 | z << 1 | i << 2 | d << 3 | v << 6 | n << 7; } auto& operator=(u8 data) { c = data >> 0 & 1; z = data >> 1 & 1; i = data >> 2 & 1; d = data >> 3 & 1; v = data >> 6 & 1; n = data >> 7 & 1; return *this; } }; n8 A; n8 X; n8 Y; n8 S; PR P; n16 PC; n8 MDR; }; } ares-126/ares/component/processor/mos6502/serialization.cpp000066400000000000000000000002541415063341600237710ustar00rootroot00000000000000auto MOS6502::serialize(serializer& s) -> void { s(BCD); s(A); s(X); s(Y); s(S); s(P.c); s(P.z); s(P.i); s(P.d); s(P.v); s(P.n); s(PC); s(MDR); } ares-126/ares/component/processor/sh2/000077500000000000000000000000001415063341600177705ustar00rootroot00000000000000ares-126/ares/component/processor/sh2/accuracy.hpp000066400000000000000000000007661415063341600223040ustar00rootroot00000000000000struct Accuracy { //enable all accuracy flags static constexpr bool Reference = 0; static constexpr bool Interpreter = 0 | Reference; static constexpr bool Recompiler = !Interpreter; //exceptions when the CPU or DMA accesses unaligned memory addresses //unemulated: access of Purge, Address, or IO areas by PC-relative addressing //unemulated: address errors caused by stacking of address error exception handling static constexpr bool AddressErrors = 0 | Reference & !Recompiler; }; ares-126/ares/component/processor/sh2/cached.cpp000066400000000000000000000030531415063341600217040ustar00rootroot00000000000000auto SH2::Recompiler::pool(u32 address) -> Pool* { auto& pool = pools[address >> 8 & 0xffffff]; if(!pool) pool = (Pool*)allocator.acquire(sizeof(Pool)); return pool; } auto SH2::Recompiler::block(u32 address) -> Block* { if(auto block = pool(address)->blocks[address >> 1 & 0x7f]) return block; auto block = emit(address); return pool(address)->blocks[address >> 1 & 0x7f] = block; } alwaysinline auto SH2::Recompiler::emitInstruction(u16 opcode) -> bool { #define op(id, name, ...) \ case id: \ call(&SH2::name, &self, ##__VA_ARGS__); \ return 0; #define br(id, name, ...) \ case id: \ call(&SH2::name, &self, ##__VA_ARGS__); \ return 1; #include "decoder.hpp" #undef op #undef br return 0; } auto SH2::Recompiler::emit(u32 address) -> Block* { if(unlikely(allocator.available() < 1_MiB)) { print("SH2 allocator flush\n"); allocator.release(bump_allocator::zero_fill); reset(); } auto block = (Block*)allocator.acquire(sizeof(Block)); block->code = allocator.acquire(); bind({block->code, allocator.available()}); bool hasBranched = 0; while(true) { u16 instruction = self.readWord(address); bool branched = emitInstruction(instruction); mov(rax, mem64(&self.CCR)); inc(rax); mov(mem64(&self.CCR), rax); call(&SH2::instructionEpilogue, &self); address += 2; if(hasBranched || (address & 0xfe) == 0) break; //block boundary hasBranched = branched; test(al, al); jz(imm8(1)); ret(); } ret(); allocator.reserve(size()); return block; } ares-126/ares/component/processor/sh2/decoder.hpp000066400000000000000000000172001415063341600221060ustar00rootroot00000000000000{ #define n (opcode >> 8 & 0x00f) #define m (opcode >> 4 & 0x00f) #define i (opcode >> 0 & 0x0ff) #define d4 (opcode >> 0 & 0x00f) #define d8 (opcode >> 0 & 0x0ff) #define d12 (opcode >> 0 & 0xfff) switch(opcode >> 8 & 0x00f0 | opcode & 0x000f) { op(0x04, MOVBS0, m, n); //MOV.B Rm,@(R0,Rn) op(0x05, MOVWS0, m, n); //MOV.W Rm,@(R0,Rn) op(0x06, MOVLS0, m, n); //MOV.L Rm,@(R0,Rn) op(0x07, MULL, m, n); //MUL.L Rm,Rn op(0x0c, MOVBL0, m, n); //MOV.B @(R0,Rm),Rn op(0x0d, MOVWL0, m, n); //MOV.W @(R0,Rm),Rn op(0x0e, MOVLL0, m, n); //MOV.L @(R0,Rm),Rn op(0x0f, MACL_, m, n); //MAC.L @Rm+,@Rn+ op(0x10 ... 0x1f, MOVLS4, m, d4, n); //MOV.L Rm,@(disp,Rn) op(0x20, MOVBS, m, n); //MOV.B Rm,@Rn op(0x21, MOVWS, m, n); //MOV.W Rm,@Rn op(0x22, MOVLS, m, n); //MOV.L Rm,@Rn op(0x24, MOVBM, m, n); //MOV.B Rm,@-Rn op(0x25, MOVWM, m, n); //MOV.W Rm,@-Rn op(0x26, MOVLM, m, n); //MOV.L Rm,@-Rn op(0x27, DIV0S, m, n); //DIV0S Rm,Rn op(0x28, TST, m, n); //TST Rm,Rn op(0x29, AND, m, n); //AND Rm,Rn op(0x2a, XOR, m, n); //XOR Rm,Rn op(0x2b, OR, m, n); //OR Rm,Rn op(0x2c, CMPSTR, m, n); //CMP/STR Rm,Rn op(0x2d, XTRCT, m, n); //XTRCT Rm,Rn op(0x2e, MULU, m, n); //MULU Rm,Rn op(0x2f, MULS, m, n); //MULS Rm,Rn op(0x30, CMPEQ, m, n); //CMP/EQ Rm,Rn op(0x32, CMPHS, m, n); //CMP/HS Rm,Rn op(0x33, CMPGE, m, n); //CMP/GE Rm,Rn op(0x34, DIV1, m, n); //DIV1 Rm,Rn op(0x35, DMULU, m, n); //DMULU.L Rm,Rn op(0x36, CMPHI, m, n); //CMP/HI Rm,Rn op(0x37, CMPGT, m, n); //CMP/GT Rm,Rn op(0x38, SUB, m, n); //SUB Rm,Rn op(0x3a, SUBC, m, n); //SUBC Rm,Rn op(0x3b, SUBV, m, n); //SUBV Rm,Rn op(0x3c, ADD, m, n); //ADD Rm,Rn op(0x3d, DMULS, m, n); //DMULS.L Rm,Rn op(0x3e, ADDC, m, n); //ADDC Rm,Rn op(0x3f, ADDV, m, n); //ADDV Rm,Rn op(0x4f, MACW, m, n); //MAC.W @Rm+,@Rn+ op(0x50 ... 0x5f, MOVLL4, m, d4, n); //MOV.L @(disp,Rm),Rn op(0x60, MOVBL, m, n); //MOV.B @Rm,Rn op(0x61, MOVWL, m, n); //MOV.W @Rm,Rn op(0x62, MOVLL, m, n); //MOV.L @Rm,Rn op(0x63, MOV, m, n); //MOV Rm,Rn op(0x64, MOVBP, m, n); //MOV.B @Rm+,Rn op(0x65, MOVWP, m, n); //MOV.W @Rm+,Rn op(0x66, MOVLP, m, n); //MOV.L @Rm+,Rn op(0x67, NOT, m, n); //NOT Rm,Rn op(0x68, SWAPB, m, n); //SWAP.B Rm,Rn op(0x69, SWAPW, m, n); //SWAP.W Rm,Rn op(0x6a, NEGC, m, n); //NEGC Rm,Rn op(0x6b, NEG, m, n); //NEG Rm,Rn op(0x6c, EXTUB, m, n); //EXTU.B Rm,Rn op(0x6d, EXTUW, m, n); //EXTU.W Rm,Rn op(0x6e, EXTSB, m, n); //EXTS.B Rm,Rn op(0x6f, EXTSW, m, n); //EXTS.W Rm,Rn op(0x70 ... 0x7f, ADDI, i, n); //ADD #imm,Rn op(0x90 ... 0x9f, MOVWI, d8, n); //MOV.W @(disp,PC),Rn br(0xa0 ... 0xaf, BRA, d12); //BRA disp br(0xb0 ... 0xbf, BSR, d12); //BSR disp op(0xd0 ... 0xdf, MOVLI, d8, n); //MOV.L @(disp.PC),Rn op(0xe0 ... 0xef, MOVI, i, n); //MOV #imm,Rn } #undef n #undef m #undef i #undef d4 #undef d8 #undef d12 #define n (opcode >> 8 & 0x0f) #define m (opcode >> 4 & 0x0f) //n for 0x80,0x81,0x84,0x85 #define i (opcode >> 0 & 0xff) #define d4 (opcode >> 0 & 0x0f) #define d8 (opcode >> 0 & 0xff) switch(opcode >> 8) { op(0x80, MOVBS4, d4, m); //MOV.B R0,@(disp,Rn) op(0x81, MOVWS4, d4, m); //MOV.W R0,@(disp,Rn) op(0x84, MOVBL4, m, d4); //MOV.B @(disp,Rm),R0 op(0x85, MOVWL4, m, d4); //MOV.W @(disp,Rm),R0 op(0x88, CMPIM, i); //CMP/EQ #imm,R0 br(0x89, BT, d8); //BT disp br(0x8b, BF, d8); //BF disp br(0x8d, BTS, d8); //BT/S disp br(0x8f, BFS, d8); //BF/S disp op(0xc0, MOVBSG, d8); //MOV.B R0,@(disp,GBR) op(0xc1, MOVWSG, d8); //MOV.W R0,@(disp,GBR) op(0xc2, MOVLSG, d8); //MOV.L R0,@(disp,GBR) op(0xc3, TRAPA, i); //TRAPA #imm op(0xc4, MOVBLG, d8); //MOV.B @(disp,GBR),R0 op(0xc5, MOVWLG, d8); //MOV.W @(disp,GBR),R0 op(0xc6, MOVLLG, d8); //MOV.L @(disp,GBR),R0 op(0xc7, MOVA, d8); //MOVA @(disp,PC),R0 op(0xc8, TSTI, i); //TST #imm,R0 op(0xc9, ANDI, i); //AND #imm,R0 op(0xca, XORI, i); //XOR #imm,R0 op(0xcb, ORI, i); //OR #imm,R0 op(0xcc, TSTM, i); //TST.B #imm,@(R0,GBR) op(0xcd, ANDM, i); //AND.B #imm,@(R0,GBR) op(0xce, XORM, i); //XOR.B #imm,@(R0,GBR) op(0xcf, ORM, i); //OR.B #imm,@(R0,GBR) } #undef n #undef m #undef i #undef d4 #undef d8 #define n (opcode >> 8 & 0xf) #define m (opcode >> 8 & 0xf) switch(opcode >> 4 & 0x0f00 | opcode & 0x00ff) { op(0x002, STCSR, n); //STC SR,Rn br(0x003, BSRF, m); //BSRF Rm op(0x00a, STSMACH, n); //STS MACH,Rn op(0x012, STCGBR, n); //STC GBR,Rn op(0x01a, STSMACL, n); //STS MACL,Rn op(0x022, STCVBR, n); //STC VBR,Rn br(0x023, BRAF, m); //BRAF Rm op(0x029, MOVT, n); //MOVT Rn op(0x02a, STSPR, m); //STS PR,Rn op(0x400, SHLL, n); //SHLL Rn op(0x401, SHLR, n); //SHLR Rn op(0x402, STSMMACH, n); //STS.L MACH,@-Rn op(0x403, STCMSR, n); //STC.L SR,@-Rn op(0x404, ROTL, n); //ROTL Rn op(0x405, ROTR, n); //ROTR Rn op(0x406, LDSMMACH, m); //LDS.L @Rm+,MACH op(0x407, LDCMSR, m); //LDC.L @Rm+,SR op(0x408, SHLL2, n); //SHLL2 Rn op(0x409, SHLR2, n); //SHLR2 Rn op(0x40a, LDSMACH, m); //LDS Rm,MACH br(0x40b, JSR, m); //JSR @Rm op(0x40e, LDCSR, m); //LDC Rm,SR op(0x410, DT, n); //DT Rn op(0x411, CMPPZ, n); //CMP/PZ Rn op(0x412, STSMMACL, n); //STS.L MACL,@-Rn op(0x413, STCMGBR, n); //STC.L GBR,@-Rn op(0x415, CMPPL, n); //CMP/PL Rn op(0x416, LDSMMACL, m); //LDS.L @Rm+,MACL op(0x417, LDCMGBR, m); //LDC.L @Rm+,GBR op(0x418, SHLL8, n); //SHLL8 Rn op(0x419, SHLR8, n); //SHLR8 Rn op(0x41a, LDSMACL, m); //LDS Rm,MACL op(0x41b, TAS, n); //TAS @Rn op(0x41e, LDCGBR, m); //LDC Rm,GBR op(0x420, SHAL, n); //SHAL Rn op(0x421, SHAR, n); //SHAR Rn op(0x422, STSMPR, n); //STS.L PR,@-Rn op(0x423, STCMVBR, n); //STC.L VBR,@-Rn op(0x424, ROTCL, n); //ROTCL Rn op(0x425, ROTCR, n); //ROTCR Rn op(0x426, LDSMPR, m); //LDS.L @Rm+,PR op(0x427, LDCMVBR, m); //LDC.L @Rm+,VBR op(0x428, SHLL16, n); //SHLL16 Rn op(0x429, SHLR16, n); //SHLR16 Rn op(0x42a, LDSPR, m); //LDS Rm,PR br(0x42b, JMP, m); //JMP @Rm op(0x42e, LDCVBR, m); //LDC Rm,VBR } #undef n #undef m switch(opcode) { op(0x0008, CLRT); //CLRT op(0x0009, NOP); //NOP br(0x000b, RTS); //RTS op(0x0018, SETT); //SETT op(0x0019, DIV0U); //DIV0U op(0x001b, SLEEP); //SLEEP op(0x0028, CLRMAC); //CLRMAC br(0x002b, RTE); //RTE } switch(0) { br(0, ILLEGAL); } } ares-126/ares/component/processor/sh2/disassembler.cpp000066400000000000000000000410641415063341600231560ustar00rootroot00000000000000template auto SH2::hint(P&&... p) const -> string { if(1) return {}; if(1) return {"\e[0m\e[37m", forward

(p)..., "\e[0m"}; return {forward

(p)...}; } auto SH2::disassembleInstruction() -> string { vector s; auto registerName = [&](u32 r) -> string { return {"r", r}; }; auto registerValue = [&](u32 r) -> string { return {"r", r, hint("{0x", hex(R[r], 8L), "}")}; }; auto indirectRegister = [&](u32 r) -> string { return {"@r", r, hint("{0x", hex(R[r], 8L), "}")}; }; auto predecrementIndirectRegister = [&](u32 r, u32 d) -> string { return {"@-r", r, hint("{0x", hex(R[r] - d, 8L), "}")}; }; auto postincrementIndirectRegister = [&](u32 r) -> string { return {"@r", r, "+", hint("{0x", hex(R[r], 8L), "}")}; }; auto indirectIndexedRegister = [&](u32 r) -> string { return {"@(r0,r", r, ")", hint("{0x", hex(R[0] + R[r], 8L), "}")}; }; auto immediate = [&](u32 i) -> string { return {"#0x", hex(i, 2L)}; }; auto pcRelativeDisplacement = [&](u32 d, u32 s) -> string { return {"@(0x", hex(d * s, 3L), ",pc)", hint("{0x", hex(PC + d * s, 8L), "}")}; }; auto gbrIndirectDisplacement = [&](u32 d, u32 s) -> string { return {"@(0x", hex(d * s, 3L), ",gbr)", hint("{0x", hex(GBR + d * s, 8L), "}")}; }; auto gbrIndirectIndexed = [&]() -> string { return {"@(r0,gbr)", hint("{0x", hex(R[0] + GBR, 8L), "}")}; }; auto indirectRegisterDisplacement = [&](u32 r, u32 d, u32 s) -> string { return {"@(0x", hex(d * s, 2L), ",r", r, ")", hint("{0x", hex(R[r] + d * s, 8L), "}")}; }; auto branch8 = [&](u32 d) -> string { return {"0x", hex(PC + (s8)d * 2, 8L)}; }; auto branch12 = [&](u32 d) -> string { return {"0x", hex(PC + (i12)d * 2, 8L)}; }; u16 opcode = readWord(PC - 4); #define n (opcode >> 8 & 0x00f) #define m (opcode >> 4 & 0x00f) #define i (opcode >> 0 & 0x0ff) #define d4 (opcode >> 0 & 0x00f) #define d8 (opcode >> 0 & 0x0ff) #define d12 (opcode >> 0 & 0xfff) switch(opcode >> 8 & 0x00f0 | opcode & 0x000f) { case 0x04: //MOV.B Rm,@(R0,Rn) s = {"mov.b", registerValue(m), indirectIndexedRegister(n)}; break; case 0x05: //MOV.W Rm,@(R0,Rn) s = {"mov.w", registerValue(m), indirectIndexedRegister(n)}; break; case 0x06: //MOV.L Rm,@(R0,Rn) s = {"mov.l", registerValue(m), indirectIndexedRegister(n)}; break; case 0x07: //MUL.L Rm,Rn s = {"mul.l", registerValue(m), registerName(n)}; break; case 0x0c: //MOV.B @(R0,Rm),Rn s = {"mov.b", indirectIndexedRegister(m), registerName(n)}; break; case 0x0d: //MOV.W @(R0,Rm),Rn s = {"mov.w", indirectIndexedRegister(m), registerName(n)}; break; case 0x0e: //MOV.L @(R0,Rm),Rn s = {"mov.l", indirectIndexedRegister(m), registerName(n)}; break; case 0x0f: //MAC.L @Rm+,@Rn+ s = {"mac.l", postincrementIndirectRegister(m), postincrementIndirectRegister(n)}; break; case 0x10 ... 0x1f: //MOV.L Rm,@(disp,Rn) s = {"mov.l", registerValue(m), indirectRegisterDisplacement(n, d4, 4)}; break; case 0x20: //MOV.B Rm,@Rn s = {"mov.b", registerValue(m), indirectRegister(n)}; break; case 0x21: //MOV.W Rm,@Rn s = {"mov.w", registerValue(m), indirectRegister(n)}; break; case 0x22: //MOV.L Rm,@Rn s = {"mov.l", registerValue(m), indirectRegister(n)}; break; case 0x24: //MOV.B Rm,@-Rn s = {"mov.b", registerValue(m), predecrementIndirectRegister(n, 1)}; break; case 0x25: //MOV.W Rm,@-Rn s = {"mov.w", registerValue(m), predecrementIndirectRegister(n, 2)}; break; case 0x26: //MOV.L Rm,@-Rn s = {"mov.l", registerValue(m), predecrementIndirectRegister(n, 4)}; break; case 0x27: //DIV0S Rm,Rn s = {"div0s", registerValue(m), registerValue(n)}; break; case 0x28: //TST Rm,Rn s = {"tst", registerValue(m), registerValue(n)}; break; case 0x29: //AND Rm,Rn s = {"and", registerValue(m), registerValue(n)}; break; case 0x2a: //XOR Rm,Rn s = {"xor", registerValue(m), registerValue(n)}; break; case 0x2b: //OR Rm,Rn s = {"or", registerValue(m), registerValue(n)}; break; case 0x2c: //CMP/STR Rm,Rn s = {"cmp/str", registerValue(m), registerValue(n)}; break; case 0x2d: //XTRCT Rm,Rn s = {"xtrct", registerValue(m), registerValue(n)}; break; case 0x2e: //MULU Rm,Rn s = {"mulu", registerValue(m), registerValue(n)}; break; case 0x2f: //MULS Rm,Rn s = {"muls", registerValue(m), registerValue(n)}; break; case 0x30: //CMP/EQ Rm,Rn s = {"cmp/eq", registerValue(m), registerValue(n)}; break; case 0x32: //CMP/HS Rm,Rn s = {"cmp/hs", registerValue(m), registerValue(n)}; break; case 0x33: //CMP/GE Rm,Rn s = {"cmp/ge", registerValue(m), registerValue(n)}; break; case 0x34: //DIV1 Rm,Rn s = {"div1", registerValue(m), registerValue(n)}; break; case 0x35: //DMULU.L Rm,Rn s = {"dmulu.l", registerValue(m), registerValue(n)}; break; case 0x36: //CMP/HI Rm,Rn s = {"cmp/hi", registerValue(m), registerValue(n)}; break; case 0x37: //CMP/GT Rm,Rn s = {"cmp/gt", registerValue(m), registerValue(n)}; break; case 0x38: //SUB Rm,Rn s = {"sub", registerValue(m), registerValue(n)}; break; case 0x3a: //SUBC Rm,Rn s = {"subc", registerValue(m), registerValue(n)}; break; case 0x3b: //SUBV Rm,Rn s = {"subv", registerValue(m), registerValue(n)}; break; case 0x3c: //ADD Rm,Rn s = {"add", registerValue(m), registerValue(n)}; break; case 0x3d: //DMULS.L Rm,Rn s = {"dmuls.l", registerValue(m), registerValue(n)}; break; case 0x3e: //ADDC Rm,Rn s = {"addc", registerValue(m), registerValue(n)}; break; case 0x3f: //ADDV Rm,Rn s = {"addv", registerValue(m), registerValue(n)}; break; case 0x4f: //MAC.W @Rm+,@Rn+ s = {"mac.w", postincrementIndirectRegister(m), postincrementIndirectRegister(n)}; break; case 0x50 ... 0x5f: //MOV.L @(disp,Rm),Rn s = {"mov.l", indirectRegisterDisplacement(m, d4, 4), registerName(n)}; break; case 0x60: //MOV.B @Rm,Rn s = {"mov.b", indirectRegister(m), registerName(n)}; break; case 0x61: //MOV.W @Rm,Rn s = {"mov.w", indirectRegister(m), registerName(n)}; break; case 0x62: //MOV.L @Rm,Rn s = {"mov.l", indirectRegister(m), registerName(n)}; break; case 0x63: //MOV Rm,Rn s = {"mov", registerValue(m), registerName(n)}; break; case 0x64: //MOV.B @Rm+,Rn s = {"mov.b", postincrementIndirectRegister(m), registerName(n)}; break; case 0x65: //MOV.W @Rm+,Rn s = {"mov.w", postincrementIndirectRegister(m), registerName(n)}; break; case 0x66: //MOV.L @Rm+,Rn s = {"mov.l", postincrementIndirectRegister(m), registerName(n)}; break; case 0x67: //NOT Rm,Rn s = {"not", registerValue(m), registerName(n)}; break; case 0x68: //SWAP.B Rm,Rn s = {"swap.b", registerValue(m), registerValue(n)}; break; case 0x69: //SWAP.W Rm,Rn s = {"swap.w", registerValue(m), registerValue(n)}; break; case 0x6a: //NEGC Rm,Rn s = {"negc", registerValue(m), registerName(n)}; break; case 0x6b: //NEG Rm,Rn s = {"neg", registerValue(m), registerName(n)}; break; case 0x6c: //EXTU.B Rm,Rn s = {"extu.b", registerValue(m), registerName(n)}; break; case 0x6d: //EXTU.W Rm,Rn s = {"extu.w", registerValue(m), registerName(n)}; break; case 0x6e: //EXTS.B Rm,Rn s = {"exts.b", registerValue(m), registerName(n)}; break; case 0x6f: //EXTS.W Rm,Rn s = {"exts.w", registerValue(m), registerName(n)}; break; case 0x70 ... 0x7f: //ADD #imm,Rn s = {"add", immediate(i), registerValue(n)}; break; case 0x90 ... 0x9f: //MOV.W @(disp,PC),Rn s = {"mov.w", pcRelativeDisplacement(d8, 2), registerName(n)}; break; case 0xa0 ... 0xaf: //BRA disp s = {"bra", branch12(d12)}; break; case 0xb0 ... 0xbf: //BSR disp s = {"bsr", branch12(d12)}; break; case 0xd0 ... 0xdf: //MOV.L @(disp,PC),Rn s = {"mov.l", pcRelativeDisplacement(d8, 4), registerName(n)}; break; case 0xe0 ... 0xef: //MOV #imm,Rn s = {"mov", immediate(i), registerName(n)}; break; } #undef n #undef m #undef i #undef d4 #undef d8 #undef d12 #define n (opcode >> 8 & 0x0f) #define m (opcode >> 4 & 0x0f) //n for MOVBS4, MOVWS4 #define i (opcode >> 0 & 0xff) #define d4 (opcode >> 0 & 0x0f) #define d8 (opcode >> 0 & 0xff) switch(opcode >> 8) { case 0x80: //MOV.B R0,@(disp,Rn) s = {"mov.b", registerValue(0), indirectRegisterDisplacement(m, d4, 1)}; break; case 0x81: //MOV.W R0,@(disp,Rn) s = {"mov.w", registerValue(0), indirectRegisterDisplacement(m, d4, 2)}; break; case 0x84: //MOV.B @(disp,Rm),R0 s = {"mov.b", indirectRegisterDisplacement(m, d4, 1), registerName(0)}; break; case 0x85: //MOV.W @(disp,Rm),R0 s = {"mov.w", indirectRegisterDisplacement(m, d4, 2), registerName(0)}; break; case 0x88: //CMP/EQ #imm,R0 s = {"cmp/eq", immediate(i), registerValue(0)}; break; case 0x89: //BT disp s = {"bt", branch8(d8)}; break; case 0x8b: //BF disp s = {"bf", branch8(d8)}; break; case 0x8d: //BT/S disp s = {"bt/s", branch8(d8)}; break; case 0x8f: //BF/S disp s = {"bf/s", branch8(d8)}; break; case 0xc0: //MOV.B R0,@(disp,GBR) s = {"mov.b", registerValue(0), gbrIndirectDisplacement(d8, 1)}; break; case 0xc1: //MOV.W R0,@(disp,GBR) s = {"mov.w", registerValue(0), gbrIndirectDisplacement(d8, 2)}; break; case 0xc2: //MOV.L R0,@(disp,GBR) s = {"mov.l", registerValue(0), gbrIndirectDisplacement(d8, 4)}; break; case 0xc3: //TRAPA #imm s = {"trapa", immediate(i)}; break; case 0xc4: //MOV.B @(disp,GBR),R0 s = {"mov.b", gbrIndirectDisplacement(d8, 1), registerName(0)}; break; case 0xc5: //MOV.W @(disp,GBR),R0 s = {"mov.w", gbrIndirectDisplacement(d8, 2), registerName(0)}; break; case 0xc6: //MOV.L @(disp,GBR),R0 s = {"mov.l", gbrIndirectDisplacement(d8, 4), registerName(0)}; break; case 0xc7: //MOVA @(disp,PC),R0 s = {"mova", pcRelativeDisplacement(d8, 4), registerName(0)}; break; case 0xc8: //TST #imm,R0 s = {"tst", immediate(i), registerValue(0)}; break; case 0xc9: //AND #imm,R0 s = {"and", immediate(i), registerValue(0)}; break; case 0xca: //XOR #imm,R0 s = {"xor", immediate(i), registerValue(0)}; break; case 0xcb: //OR #imm,R0 s = {"or", immediate(i), registerValue(0)}; break; case 0xcc: //TST.B #imm,@(R0,GBR) s = {"tst.b", immediate(i), gbrIndirectIndexed()}; break; case 0xcd: //AND.B #imm,@(R0,GBR) s = {"and.b", immediate(i), gbrIndirectIndexed()}; break; case 0xce: //XOR.B #imm,@(R0,GBR) s = {"xor.b", immediate(i), gbrIndirectIndexed()}; break; case 0xcf: //OR.B #imm,@(R0,GBR) s = {"or.b", immediate(i), gbrIndirectIndexed()}; break; } #undef n #undef m #undef i #undef d4 #undef d8 #define n (opcode >> 8 & 0xf) #define m (opcode >> 8 & 0xf) switch(opcode >> 4 & 0x0f00 | opcode & 0x00ff) { case 0x002: //STC SR,Rn s = {"stc", "sr", registerName(n)}; break; case 0x003: //BSRF Rm s = {"bsrf", registerValue(m)}; break; case 0x00a: //STS MACH,Rn s = {"sts", "mach", registerName(n)}; break; case 0x012: //STC GBR,Rn s = {"stc", "gbr", registerName(n)}; break; case 0x01a: //STS MACL,Rn s = {"sts", "macl", registerName(n)}; break; case 0x022: //STC VBR,Rn s = {"stc", "vbr", registerName(n)}; break; case 0x023: //BRAF Rm s = {"braf", registerValue(m)}; break; case 0x029: //MOVT Rn s = {"movt", registerName(n)}; break; case 0x02a: //STS PR,Rn s = {"sts", "pr", registerName(n)}; break; case 0x400: //SHLL Rn s = {"shll", registerValue(n)}; break; case 0x401: //SHLR Rn s = {"shlr", registerValue(n)}; break; case 0x402: //STS.L MACH,@-Rn s = {"sts.l", "mach", predecrementIndirectRegister(n, 4)}; break; case 0x403: //STC.L SR,@-Rn s = {"stc.l", "sr", predecrementIndirectRegister(n, 4)}; break; case 0x404: //ROTL Rn s = {"rotl", registerValue(n)}; break; case 0x405: //ROTR Rn s = {"rotr", registerValue(n)}; break; case 0x406: //LDS.L @Rm+,MACH s = {"lds.l", postincrementIndirectRegister(m), "mach"}; break; case 0x407: //LDC.L @Rm+,SR s = {"ldc.l", postincrementIndirectRegister(m), "sr"}; break; case 0x408: //SHLL2 Rn s = {"shll2", registerValue(n)}; break; case 0x409: //SHLR2 Rn s = {"shlr2", registerValue(n)}; break; case 0x40a: //LDS Rm,MACH s = {"lds", registerValue(m), "mach"}; break; case 0x40b: //JSR @Rm s = {"jsr", indirectRegister(m)}; break; case 0x40e: //LDC Rm,SR s = {"ldc", registerValue(m), "sr"}; break; case 0x410: //DT Rn s = {"dt", registerValue(n)}; break; case 0x411: //CMP/PZ Rn s = {"cmp/pz", registerValue(n)}; break; case 0x412: //STS.L MACL,@-Rn s = {"sts.l", "macl", predecrementIndirectRegister(n, 4)}; break; case 0x413: //STC.L GBR,@-Rn s = {"stc.l", "gbr", predecrementIndirectRegister(n, 4)}; break; case 0x415: //CMP/PL Rn s = {"cmp/pl", registerValue(n)}; break; case 0x416: //LDS.L @Rm+,MACL s = {"lds.l", postincrementIndirectRegister(m), "macl"}; break; case 0x417: //LDC.L @Rm+,GBR s = {"ldc.l", postincrementIndirectRegister(m), "gbr"}; break; case 0x418: //SHLL8 Rn s = {"shll8", registerValue(n)}; break; case 0x419: //SHLR8 Rn s = {"shlr8", registerValue(n)}; break; case 0x41a: //LDS Rm,MACL s = {"lds", registerValue(m), "macl"}; break; case 0x41b: //TAS.B @Rn s = {"tas.b", indirectRegister(n)}; break; case 0x41e: //LDC Rm,GBR s = {"ldc", registerValue(m), "gbr"}; break; case 0x420: //SHAL Rn s = {"shal", registerValue(n)}; break; case 0x421: //SHAR Rn s = {"shar", registerValue(n)}; break; case 0x422: //STS.L PR,@-Rn s = {"sts.l", "pr", predecrementIndirectRegister(n, 4)}; break; case 0x423: //STC.L VBR,@-Rn s = {"stc.l", "vbr", predecrementIndirectRegister(n, 4)}; break; case 0x424: //ROTCL Rn s = {"rotcl", registerValue(n)}; break; case 0x425: //ROTCR Rn s = {"rotcr", registerValue(n)}; break; case 0x426: //LDS.L @Rm+,PR s = {"lds.l", postincrementIndirectRegister(m), "pr"}; break; case 0x427: //LDC.L @Rm+,VBR s = {"ldc.l", postincrementIndirectRegister(m), "vbr"}; break; case 0x428: //SHLL16 Rn s = {"shll16", registerValue(n)}; break; case 0x429: //SHLR16 Rn s = {"shlr16", registerValue(n)}; break; case 0x42a: //LDS Rm,PR s = {"lds", registerValue(m), "pr"}; break; case 0x42b: //JMP @Rm s = {"jmp", indirectRegister(m)}; break; case 0x42e: //LDC Rm,VBR s = {"ldc", registerValue(m), "vbr"}; break; } #undef n #undef m switch(opcode) { case 0x0008: //CLRT s = {"clrt"}; break; case 0x0009: //NOP s = {"nop"}; break; case 0x000b: //RTS s = {"rts"}; break; case 0x0018: //SETT s = {"sett"}; break; case 0x0019: //DIV0U s = {"div0u"}; break; case 0x001b: //SLEEP s = {"sleep"}; break; case 0x0028: //CLRMAC s = {"clrmac"}; break; case 0x002b: //RTE s = {"rte"}; break; } if(!s) s = {"illegal", {"0x", hex(opcode, 4L)}}; auto name = s.takeFirst(); while(name.size() < 8) name.append(" "); string r = {name, s.merge(",")}; while(r.size() < 30) r.append(" "); return r; } auto SH2::disassembleContext() -> string { string s; s.append("r0:", hex(R[0], 8L), " "); s.append("r1:", hex(R[1], 8L), " "); s.append("r2:", hex(R[2], 8L), " "); s.append("r3:", hex(R[3], 8L), " "); s.append("r4:", hex(R[4], 8L), " "); s.append("r5:", hex(R[5], 8L), " "); s.append("r6:", hex(R[6], 8L), " "); s.append("r7:", hex(R[7], 8L), " "); s.append("r8:", hex(R[8], 8L), " "); s.append("r9:", hex(R[9], 8L), " "); s.append("r10:", hex(R[10], 8L), " "); s.append("r11:", hex(R[11], 8L), " "); s.append("r12:", hex(R[12], 8L), " "); s.append("r13:", hex(R[13], 8L), " "); s.append("r14:", hex(R[14], 8L), " "); s.append("r15:", hex(R[15], 8L), " "); s.append("sr:", hex((u32)SR, 8L), " "); s.append("gbr:", hex(GBR, 8L), " "); s.append("vbr:", hex(VBR, 8L), " "); s.append("mach:", hex(MACH, 8L), " "); s.append("macl:", hex(MACL, 8L), " "); s.append("pr:", hex(PR, 8L), " "); s.append(SR.M ? "M" : "m"); s.append(SR.Q ? "Q" : "q"); s.append(hex(SR.I, 1L)); s.append(SR.S ? "S" : "s"); s.append(SR.T ? "T" : "t"); return s; } ares-126/ares/component/processor/sh2/exceptions.cpp000066400000000000000000000035151415063341600226610ustar00rootroot00000000000000auto SH2::exceptionHandler() -> void { if(!exceptions) return; if(inDelaySlot()) return; if(exceptions & ResetCold) { exceptions &= ~ResetCold; PC = busReadLong(0x00 * 4) + 4; SP = busReadLong(0x01 * 4); } if(exceptions & ResetWarm) { exceptions &= ~ResetWarm; PC = busReadLong(0x02 * 4) + 4; SP = busReadLong(0x03 * 4); } if constexpr(Accuracy::AddressErrors) { if(exceptions & AddressErrorCPU) { exceptions &= ~AddressErrorCPU; addressErrorCPU(); } if(exceptions & AddressErrorDMA) { exceptions &= ~AddressErrorDMA; addressErrorDMA(); } } } auto SH2::push(u32 data) -> void { SP -= 4; writeLong(SP, data); } auto SH2::interrupt(u8 level, u8 vector) -> void { push(SR); push(PC); jump(readLong(VBR + vector * 4) + 4); SR.I = level; } auto SH2::exception(u8 vector) -> void { push(SR); push(PC - 2); jump(readLong(VBR + vector * 4) + 4); } auto SH2::addressErrorCPU() -> void { static constexpr u8 vector = 0x09; SP &= ~3; //not accurate; but prevents infinite recursion push(SR); push(PC); jump(readLong(VBR + vector * 4) + 4); } auto SH2::addressErrorDMA() -> void { static constexpr u8 vector = 0x0a; SP &= ~3; //not accurate; but prevents infinite recursion push(SR); push(PC); jump(readLong(VBR + vector * 4) + 4); } auto SH2::illegalInstruction() -> void { if(inDelaySlot()) return illegalSlotInstruction(); static constexpr u8 vector = 0x04; push(SR); push(PC); jump(readLong(VBR + vector * 4) + 4); debug(unusual, "[SH2] illegal instruction: 0x", hex(busReadWord(PC - 4), 4L)); } auto SH2::illegalSlotInstruction() -> void { static constexpr u8 vector = 0x06; push(SR); push(PC - 2); jump(readLong(VBR + vector * 4) + 4); debug(unusual, "[SH2] illegal slot instruction: 0x", hex(busReadWord(PC - 4), 4L)); } ares-126/ares/component/processor/sh2/instruction.cpp000066400000000000000000000030131415063341600230520ustar00rootroot00000000000000auto SH2::jump(u32 pc) -> void { PC = pc; PPM = Branch::Step; } auto SH2::branch(u32 pc) -> void { if(inDelaySlot()) return illegalSlotInstruction(); PPC = pc; PPM = Branch::Take; } auto SH2::delaySlot(u32 pc) -> void { if(inDelaySlot()) return illegalSlotInstruction(); PPC = pc; PPM = Branch::Slot; } auto SH2::instruction() -> void { if constexpr(Accuracy::Interpreter) { step(1); exceptionHandler(); if constexpr(Accuracy::AddressErrors) { if(unlikely(PC & 1)) return addressErrorCPU(); if(unlikely(PC >> 29 == Area::IO)) return addressErrorCPU(); } ID = 0; u16 opcode = readWord(PC - 4); execute(opcode); instructionEpilogue(); } if constexpr(Accuracy::Recompiler) { exceptionHandler(); // Recompiled blocks may be very small, negating the impact // minimum cycle counts ensure that the recompiler is a net positive do { auto block = recompiler.block(PC - 4); block->execute(*this); } while (CCR <= recompiler.min_cycles); step(CCR); CCR = 0; ID = 0; } } auto SH2::instructionEpilogue() -> bool { switch(PPM) { case Branch::Step: PC = PC + 2; return 0; case Branch::Slot: PC = PC + 2; PPM = Branch::Take; return 0; case Branch::Take: PC = PPC; PPM = Branch::Step; return 1; } unreachable; } auto SH2::execute(u16 opcode) -> void { #define op(id, name, ...) case id: return name(__VA_ARGS__) #define br(id, name, ...) case id: return name(__VA_ARGS__) #include "decoder.hpp" #undef op #undef br } ares-126/ares/component/processor/sh2/instructions.cpp000066400000000000000000000325071415063341600232470ustar00rootroot00000000000000//ADD Rm,Rn auto SH2::ADD(u32 m, u32 n) -> void { R[n] += R[m]; } //ADDC Rm,Rn auto SH2::ADDC(u32 m, u32 n) -> void { u32 a = R[n]; u32 b = a + R[m]; R[n] = b + SR.T; SR.T = a > b || b > R[n]; } //ADD #imm,Rn auto SH2::ADDI(u32 i, u32 n) -> void { R[n] += (s8)i; } //ADDV Rm,Rn auto SH2::ADDV(u32 m, u32 n) -> void { u32 d = ((s32)R[n] < 0); u32 s = ((s32)R[m] < 0) + d; R[n] += R[m]; u32 r = ((s32)R[n] < 0) + d; SR.T = s != 1 ? r == 1 : 0; } //AND Rm,Rn auto SH2::AND(u32 m, u32 n) -> void { R[n] &= R[m]; } //AND #imm,R0 auto SH2::ANDI(u32 i) -> void { R[0] &= i; } //AND.B #imm,@(R0,GBR) auto SH2::ANDM(u32 i) -> void { u8 b = readByte(GBR + R[0]); writeByte(GBR + R[0], b & i); } //BF disp auto SH2::BF(u32 d) -> void { if(SR.T == 0) { branch(PC + 4 + (s8)d * 2); } } //BF/S disp auto SH2::BFS(u32 d) -> void { if(SR.T == 0) { delaySlot(PC + 4 + (s8)d * 2); } } //BRA disp auto SH2::BRA(u32 d) -> void { delaySlot(PC + 4 + (i12)d * 2); } //BRAF disp auto SH2::BRAF(u32 m) -> void { delaySlot(PC + 4 + R[m]); } //BSR disp auto SH2::BSR(u32 d) -> void { PR = PC; delaySlot(PC + 4 + (i12)d * 2); } //BSRF Rm auto SH2::BSRF(u32 m) -> void { PR = PC; delaySlot(PC + 4 + R[m]); } //BT disp auto SH2::BT(u32 d) -> void { if(SR.T == 1) { branch(PC + 4 + (s8)d * 2); } } //BT/S disp auto SH2::BTS(u32 d) -> void { if(SR.T == 1) { delaySlot(PC + 4 + (s8)d * 2); } } //CLRMAC auto SH2::CLRMAC() -> void { MAC = 0; } //CLRT auto SH2::CLRT() -> void { SR.T = 0; } //CMP/EQ Rm,Rn auto SH2::CMPEQ(u32 m, u32 n) -> void { SR.T = R[n] == R[m]; } //CMP/GE Rm,Rn auto SH2::CMPGE(u32 m, u32 n) -> void { SR.T = (s32)R[n] >= (s32)R[m]; } //CMP/GT Rm,Rn auto SH2::CMPGT(u32 m, u32 n) -> void { SR.T = (s32)R[n] > (s32)R[m]; } //CMP/HI Rm,Rn auto SH2::CMPHI(u32 m, u32 n) -> void { SR.T = R[n] > R[m]; } //CMP/HS Rm,Rn auto SH2::CMPHS(u32 m, u32 n) -> void { SR.T = R[n] >= R[m]; } //CMP/EQ #imm,R0 auto SH2::CMPIM(u32 i) -> void { SR.T = R[0] == (s8)i; } //CMP/PL Rn auto SH2::CMPPL(u32 n) -> void { SR.T = (s32)R[n] > 0; } //CMP/PZ Rn auto SH2::CMPPZ(u32 n) -> void { SR.T = (s32)R[n] >= 0; } //CMP/STR Rm,Rn auto SH2::CMPSTR(u32 m, u32 n) -> void { u32 t = R[n] ^ R[m]; SR.T = !(t & 0xff << 24) || !(t & 0xff << 16) || !(t & 0xff << 8) || !(t & 0xff); } //DIV0S Rm,Rn auto SH2::DIV0S(u32 m, u32 n) -> void { SR.Q = R[n] >> 31; SR.M = R[m] >> 31; SR.T = SR.Q != SR.M; } //DIV0U auto SH2::DIV0U() -> void { SR.Q = 0; SR.M = 0; SR.T = 0; } //DIV1 Rm,Rn auto SH2::DIV1(u32 m, u32 n) -> void { bool q = SR.Q; SR.Q = R[n] >> 31; u64 r = u32(R[n] << 1) | SR.T; if(q == SR.M) { r -= R[m]; } else { r += R[m]; } R[n] = r; SR.Q = (SR.Q ^ SR.M) ^ (r >> 32 & 1); SR.T = 1 - (SR.Q ^ SR.M); } //DMULS.L Rm,Rn auto SH2::DMULS(u32 m, u32 n) -> void { MAC = (s64)(s32)R[n] * (s32)R[m]; } //DMULU.L Rm,Rn auto SH2::DMULU(u32 m, u32 n) -> void { MAC = (u64)R[n] * (u64)R[m]; } //DT Rn auto SH2::DT(u32 n) -> void { SR.T = --R[n] == 0; } //EXTS.B Rm,Rn auto SH2::EXTSB(u32 m, u32 n) -> void { R[n] = (s8)R[m]; } //EXTS.W Rm,Rn auto SH2::EXTSW(u32 m, u32 n) -> void { R[n] = (s16)R[m]; } //EXTU.B Rm,Rn auto SH2::EXTUB(u32 m, u32 n) -> void { R[n] = (u8)R[m]; } //EXTU.W Rm,Rn auto SH2::EXTUW(u32 m, u32 n) -> void { R[n] = (u16)R[m]; } //ILLEGAL auto SH2::ILLEGAL() -> void { illegalInstruction(); } //JMP @Rm auto SH2::JMP(u32 m) -> void { delaySlot(R[m] + 4); } //JSR @Rm auto SH2::JSR(u32 m) -> void { PR = PC; delaySlot(R[m] + 4); } //LDC Rm,SR auto SH2::LDCSR(u32 m) -> void { SR = R[m]; ID = 1; } //LDC Rm,GBR auto SH2::LDCGBR(u32 m) -> void { GBR = R[m]; ID = 1; } //LDC Rm,VBR auto SH2::LDCVBR(u32 m) -> void { VBR = R[m]; ID = 1; } //LDC.L @Rm+,SR auto SH2::LDCMSR(u32 m) -> void { SR = readLong(R[m]); R[m] += 4; ID = 1; } //LDC.L @Rm+,GBR auto SH2::LDCMGBR(u32 m) -> void { GBR = readLong(R[m]); R[m] += 4; ID = 1; } //LDC.L @Rm+,VBR auto SH2::LDCMVBR(u32 m) -> void { VBR = readLong(R[m]); R[m] += 4; ID = 1; } //LDS Rm,MACH auto SH2::LDSMACH(u32 m) -> void { MACH = R[m]; ID = 1; } //LDS Rm,MACL auto SH2::LDSMACL(u32 m) -> void { MACL = R[m]; ID = 1; } //LDS Rm,PR auto SH2::LDSPR(u32 m) -> void { PR = R[m]; ID = 1; } //LDS.L @Rm+,MACH auto SH2::LDSMMACH(u32 m) -> void { MACH = readLong(R[m]); R[m] += 4; ID = 1; } //LDS.L @Rm+,MACL auto SH2::LDSMMACL(u32 m) -> void { MACL = readLong(R[m]); R[m] += 4; ID = 1; } //LDS.L @Rm+,PR auto SH2::LDSMPR(u32 m) -> void { PR = readLong(R[m]); R[m] += 4; ID = 1; } //MAC.W @Rm+,@Rn+ auto SH2::MACW(u32 m, u32 n) -> void { s16 a = readWord(R[n]); R[n] += 2; s16 b = readWord(R[m]); R[m] += 2; if(!SR.S) { MAC = MAC + (s64)a * (s64)b; } else { u64 p = (u64)MACL + (s64)a * (s64)b; if(p != sclamp<32>(p)) MACH |= 1; MACL = sclamp<32>(p); } } //MAC.L @Rm+,@Rn+ auto SH2::MACL_(u32 m, u32 n) -> void { s32 a = readLong(R[n]); R[n] += 4; s32 b = readLong(R[m]); R[m] += 4; MAC = MAC + (s64)a * (s64)b; if(SR.S) MAC = sclamp<48>(MAC); } //MOV Rm,Rn auto SH2::MOV(u32 m, u32 n) -> void { R[n] = R[m]; } //MOV.B @Rm,Rn auto SH2::MOVBL(u32 m, u32 n) -> void { R[n] = (s8)readByte(R[m]); } //MOV.B @(R0,Rm),Rn auto SH2::MOVBL0(u32 m, u32 n) -> void { R[n] = (s8)readByte(R[m] + R[0]); } //MOV.B @(disp,Rm),R0 auto SH2::MOVBL4(u32 m, u32 d) -> void { R[0] = (s8)readByte(R[m] + d); } //MOV.B @(disp,GBR),R0 auto SH2::MOVBLG(u32 d) -> void { R[0] = (s8)readByte(GBR + d); } //MOV.B Rm,@-Rn auto SH2::MOVBM(u32 m, u32 n) -> void { u32 t = R[m]; R[n] -= 1; writeByte(R[n], t); } //MOV.B @Rm+,Rn auto SH2::MOVBP(u32 m, u32 n) -> void { R[n] = (s8)readByte(R[m]); if(n != m) R[m] += 1; } //MOV.B Rm,@Rn auto SH2::MOVBS(u32 m, u32 n) -> void { writeByte(R[n], R[m]); } //MOV.B Rm,@(R0,Rn) auto SH2::MOVBS0(u32 m, u32 n) -> void { writeByte(R[n] + R[0], R[m]); } //MOV.B R0,@(disp,Rn) auto SH2::MOVBS4(u32 d, u32 n) -> void { writeByte(R[n] + d, R[0]); } //MOV.B R0,@(disp,GBR) auto SH2::MOVBSG(u32 d) -> void { writeByte(GBR + d, R[0]); } //MOV.W @Rm,Rn auto SH2::MOVWL(u32 m, u32 n) -> void { R[n] = (s16)readWord(R[m]); } //MOV.W @(R0,Rm),Rn auto SH2::MOVWL0(u32 m, u32 n) -> void { R[n] = (s16)readWord(R[m] + R[0]); } //MOV.W @(disp,Rm),R0 auto SH2::MOVWL4(u32 m, u32 d) -> void { R[0] = (s16)readWord(R[m] + d * 2); } //MOV.W @(disp,GBR),R0 auto SH2::MOVWLG(u32 d) -> void { R[0] = (s16)readWord(GBR + d * 2); } //MOV.W Rm,@-Rn auto SH2::MOVWM(u32 m, u32 n) -> void { u32 t = R[m]; R[n] -= 2; writeWord(R[n], t); } //MOV.W @Rm+,Rn auto SH2::MOVWP(u32 m, u32 n) -> void { R[n] = (s16)readWord(R[m]); if(n != m) R[m] += 2; } //MOV.W Rm,@Rn auto SH2::MOVWS(u32 m, u32 n) -> void { writeWord(R[n], R[m]); } //MOV.W Rm,@(R0,Rn) auto SH2::MOVWS0(u32 m, u32 n) -> void { writeWord(R[n] + R[0], R[m]); } //MOV.W R0,@(disp,Rn) auto SH2::MOVWS4(u32 d, u32 n) -> void { writeWord(R[n] + d * 2, R[0]); } //MOV.W R0,@(disp,GBR) auto SH2::MOVWSG(u32 d) -> void { writeWord(GBR + d * 2, R[0]); } //MOV.L @Rm,Rn auto SH2::MOVLL(u32 m, u32 n) -> void { R[n] = readLong(R[m]); } //MOV.L @(R0,Rm),Rn auto SH2::MOVLL0(u32 m, u32 n) -> void { R[n] = readLong(R[m] + R[0]); } //MOV.L @(disp,Rm),Rn auto SH2::MOVLL4(u32 m, u32 d, u32 n) -> void { R[n] = readLong(R[m] + d * 4); } //MOV.L @(disp,GBR),R0 auto SH2::MOVLLG(u32 d) -> void { R[0] = readLong(GBR + d * 4); } //MOV.L Rm,@-Rn auto SH2::MOVLM(u32 m, u32 n) -> void { u32 t = R[m]; R[n] -= 4; writeLong(R[n], t); } //MOV.L @Rm+,Rn auto SH2::MOVLP(u32 m, u32 n) -> void { R[n] = readLong(R[m]); if(n != m) R[m] += 4; } //MOV.L Rm,@Rn auto SH2::MOVLS(u32 m, u32 n) -> void { writeLong(R[n], R[m]); } //MOV.L Rm,@(R0,Rn) auto SH2::MOVLS0(u32 m, u32 n) -> void { writeLong(R[n] + R[0], R[m]); } //MOV.L Rm,@(disp,Rn) auto SH2::MOVLS4(u32 m, u32 d, u32 n) -> void { writeLong(R[n] + d * 4, R[m]); } //MOV.L R0,@(disp,GBR) auto SH2::MOVLSG(u32 d) -> void { writeLong(GBR + d * 4, R[0]); } //MOV #imm,Rn auto SH2::MOVI(u32 i, u32 n) -> void { R[n] = (s8)i; } //MOV.W @(disp,PC),Rn auto SH2::MOVWI(u32 d, u32 n) -> void { R[n] = (s16)readWord(PC + d * 2); } //MOV.L @(disp,PC),Rn auto SH2::MOVLI(u32 d, u32 n) -> void { R[n] = readLong((PC & ~3) + d * 4); } //MOVA @(disp,PC),R0 auto SH2::MOVA(u32 d) -> void { R[0] = (PC & ~3) + d * 4 - inDelaySlot() * 2; } //MOVT Rn auto SH2::MOVT(u32 n) -> void { R[n] = SR.T; } //MUL.L Rm,Rn auto SH2::MULL(u32 m, u32 n) -> void { MACL = R[n] * R[m]; } //MULS Rm,Rn auto SH2::MULS(u32 m, u32 n) -> void { MACL = (s16)R[n] * (s16)R[m]; } //MULU Rm,Rn auto SH2::MULU(u32 m, u32 n) -> void { MACL = (u16)R[n] * (u16)R[m]; } //NEG Rm,Rn auto SH2::NEG(u32 m, u32 n) -> void { R[n] = 0 - R[m]; } //NEGC Rm,Rn auto SH2::NEGC(u32 m, u32 n) -> void { u32 t = 0 - R[m]; R[n] = t - SR.T; SR.T = 0 < t || t < R[n]; } //NOP auto SH2::NOP() -> void { } //NOT auto SH2::NOT(u32 m, u32 n) -> void { R[n] = ~R[m]; } //OR Rm,Rn auto SH2::OR(u32 m, u32 n) -> void { R[n] |= R[m]; } //OR #imm,R0 auto SH2::ORI(u32 i) -> void { R[0] |= i; } //OR.B #imm,@(R0,GBR) auto SH2::ORM(u32 i) -> void { u8 b = readByte(GBR + R[0]); writeByte(GBR + R[0], b | i); } //ROTCL Rn auto SH2::ROTCL(u32 n) -> void { bool c = R[n] >> 31; R[n] = R[n] << 1 | SR.T; SR.T = c; } //ROTCR Rn auto SH2::ROTCR(u32 n) -> void { bool c = R[n] & 1; R[n] = R[n] >> 1 | SR.T << 31; SR.T = c; } //ROTL Rn auto SH2::ROTL(u32 n) -> void { SR.T = R[n] >> 31; R[n] = R[n] << 1 | R[n] >> 31; } //ROTR Rn auto SH2::ROTR(u32 n) -> void { SR.T = R[n] & 1; R[n] = R[n] >> 1 | R[n] << 31; } //RTE auto SH2::RTE() -> void { delaySlot(readLong(SP + 0)); SR = readLong(SP + 4); SP += 8; } //RTS auto SH2::RTS() -> void { delaySlot(PR + 4); } //SETT auto SH2::SETT() -> void { SR.T = 1; } //SHAL Rn auto SH2::SHAL(u32 n) -> void { SR.T = R[n] >> 31; R[n] <<= 1; } //SHAR Rn auto SH2::SHAR(u32 n) -> void { SR.T = R[n] & 1; R[n] = (s32)R[n] >> 1; } //SHLL Rn auto SH2::SHLL(u32 n) -> void { SR.T = R[n] >> 31; R[n] <<= 1; } //SHLL2 Rn auto SH2::SHLL2(u32 n) -> void { R[n] <<= 2; } //SHLL8 Rn auto SH2::SHLL8(u32 n) -> void { R[n] <<= 8; } //SHLL16 Rn auto SH2::SHLL16(u32 n) -> void { R[n] <<= 16; } //SHLR Rn auto SH2::SHLR(u32 n) -> void { SR.T = R[n] & 1; R[n] >>= 1; } //SHLR2 Rn auto SH2::SHLR2(u32 n) -> void { R[n] >>= 2; } //SHLR8 Rn auto SH2::SHLR8(u32 n) -> void { R[n] >>= 8; } //SHLR16 Rn auto SH2::SHLR16(u32 n) -> void { R[n] >>= 16; } //SLEEP auto SH2::SLEEP() -> void { if(!ET) { PC -= 2; } else { ET = 0; } } //STC SR,Rn auto SH2::STCSR(u32 n) -> void { R[n] = SR; ID = 1; } //STC GBR,Rn auto SH2::STCGBR(u32 n) -> void { R[n] = GBR; ID = 1; } //STC VBR,Rn auto SH2::STCVBR(u32 n) -> void { R[n] = VBR; ID = 1; } //STC.L SR,@-Rn auto SH2::STCMSR(u32 n) -> void { R[n] -= 4; writeLong(R[n], SR); ID = 1; } //STC.L GBR,@-Rn auto SH2::STCMGBR(u32 n) -> void { R[n] -= 4; writeLong(R[n], GBR); ID = 1; } //STC.L VBR,@-Rn auto SH2::STCMVBR(u32 n) -> void { R[n] -= 4; writeLong(R[n], VBR); ID = 1; } //STS MACH,Rn auto SH2::STSMACH(u32 n) -> void { R[n] = MACH; ID = 1; } //STS MACL,Rn auto SH2::STSMACL(u32 n) -> void { R[n] = MACL; ID = 1; } //STS PR,Rn auto SH2::STSPR(u32 n) -> void { R[n] = PR; ID = 1; } //STS.L MACH,@-Rn auto SH2::STSMMACH(u32 n) -> void { R[n] -= 4; writeLong(R[n], MACH); ID = 1; } //STS.L MACL,@-Rn auto SH2::STSMMACL(u32 n) -> void { R[n] -= 4; writeLong(R[n], MACL); ID = 1; } //STS.L PR,@-Rn auto SH2::STSMPR(u32 n) -> void { R[n] -= 4; writeLong(R[n], PR); ID = 1; } //SUB Rm,Rn auto SH2::SUB(u32 m, u32 n) -> void { R[n] -= R[m]; } //SUBC Rm,Rn auto SH2::SUBC(u32 m, u32 n) -> void { u32 a = R[n]; u32 b = a - R[m]; R[n] = b - SR.T; SR.T = a < b || b < R[n]; } //SUBV Rm,Rn auto SH2::SUBV(u32 m, u32 n) -> void { u32 d = ((s32)R[n] < 0); u32 s = ((s32)R[m] < 0) + d; R[n] -= R[m]; u32 r = ((s32)R[n] < 0) + d; SR.T = s == 1 ? r == 1 : 0; } //SWAP.B Rm,Rn auto SH2::SWAPB(u32 m, u32 n) -> void { R[n] = R[m] & ~0xffff | R[m] >> 8 & 0x00ff | R[m] << 8 & 0xff00; } //SWAP.W Rm,Rn auto SH2::SWAPW(u32 m, u32 n) -> void { R[n] = R[m] << 16 | R[m] >> 16; } //TAS.B @Rn auto SH2::TAS(u32 n) -> void { if constexpr(Accuracy::AddressErrors) { if(R[n] >> 29 == Area::Purge || R[n] >> 29 == Area::Address || R[n] >> 29 == Area::Data || R[n] >> 29 == Area::IO ) return (void)(exceptions |= AddressErrorCPU); } auto cacheEnable = cache.enable; cache.enable = 0; u8 b = readByte(R[n]); cache.enable = cacheEnable; SR.T = b == 0; writeByte(R[n], b | 0x80); } //TRAPA #imm auto SH2::TRAPA(u32 i) -> void { push(SR); push(PC + 2); branch(readLong(VBR + i * 4) + 4); } //TST Rm,Rn auto SH2::TST(u32 m, u32 n) -> void { SR.T = (R[n] & R[m]) == 0; } //TST #imm,R0 auto SH2::TSTI(u32 i) -> void { SR.T = (R[0] & i) == 0; } //TST.B #imm,@(R0,GBR) auto SH2::TSTM(u32 i) -> void { u8 b = readByte(GBR + R[0]); SR.T = (b & i) == 0; } //XOR Rm,Rn auto SH2::XOR(u32 m, u32 n) -> void { R[n] ^= R[m]; } //XOR #imm,R0 auto SH2::XORI(u32 i) -> void { R[0] ^= i; } //XOR.B #imm,@(R0,GBR) auto SH2::XORM(u32 i) -> void { u8 b = readByte(GBR + R[0]); writeByte(GBR + R[0], b ^ i); } //XTRCT Rm,Rn auto SH2::XTRCT(u32 m, u32 n) -> void { R[n] = R[n] >> 16 | R[m] << 16; } ares-126/ares/component/processor/sh2/recompiler.cpp000066400000000000000000000667021415063341600226500ustar00rootroot00000000000000#define R0 dis (rbx) #define R15 dis8(rbx,15*4) #define PC dis8(rbx,16*4) #define PR dis8(rbx,17*4) #define GBR dis8(rbx,18*4) #define VBR dis8(rbx,19*4) #define MAC dis8(rbx,20*4) #define MACL dis8(rbx,20*4) #define MACH dis8(rbx,21*4) #define CCR dis8(rbx,22*4) #define T dis8(rbx,23*4) #define S dis8(rbx,24*4) #define I dis8(rbx,25*4) #define Q dis8(rbx,26*4) #define M dis8(rbx,27*4) #define PPC dis8(rbx,28*4) #define PPM dis8(rbx,29*4) #define ET dis8(rbx,30*4) #define ID dis8(rbx,31*4) auto SH2::Recompiler::pool(u32 address) -> Pool* { auto& pool = pools[address >> 8 & 0xffffff]; if(!pool) pool = (Pool*)allocator.acquire(sizeof(Pool)); return pool; } auto SH2::Recompiler::block(u32 address) -> Block* { if(auto block = pool(address)->blocks[address >> 1 & 0x7f]) return block; auto block = emit(address); return pool(address)->blocks[address >> 1 & 0x7f] = block; } auto SH2::Recompiler::emit(u32 address) -> Block* { if(unlikely(allocator.available() < 1_MiB)) { print("SH2 allocator flush\n"); allocator.release(bump_allocator::zero_fill); reset(); } auto block = (Block*)allocator.acquire(sizeof(Block)); block->code = allocator.acquire(); bind({block->code, allocator.available()}); push(rbx); push(rbp); push(r13); if constexpr(ABI::Windows) { sub(rsp, imm8(0x40)); } mov(rbx, ra0); mov(rbp, ra1); auto entry = declareLabel(); jmp8(entry); auto epilogue = defineLabel(); if constexpr(ABI::Windows) { add(rsp, imm8(0x40)); } pop(r13); pop(rbp); pop(rbx); ret(); defineLabel(entry); bool hasBranched = 0; while(true) { u16 instruction = self.readWord(address); bool branched = emitInstruction(instruction); incd(CCR); //addd(CCR, imm8(2)); //underclocking hack call(&SH2::instructionEpilogue); address += 2; if(hasBranched || (address & 0xfe) == 0) break; //block boundary hasBranched = branched; test(al, al); jnz(epilogue); } jmp(epilogue); allocator.reserve(size()); return block; } #define readByte &SH2::readByte #define readWord &SH2::readWord #define readLong &SH2::readLong #define writeByte &SH2::writeByte #define writeWord &SH2::writeWord #define writeLong &SH2::writeLong #define illegal &SH2::illegalInstruction auto SH2::Recompiler::emitInstruction(u16 opcode) -> bool { #define n (opcode >> 8 & 0x00f) #define m (opcode >> 4 & 0x00f) #define i (opcode >> 0 & 0x0ff) #define d4 (opcode >> 0 & 0x00f) #define d8 (opcode >> 0 & 0x0ff) #define d12 (opcode >> 0 & 0xfff) #define Rn dis8(rbx, n * 4) #define Rm dis8(rbx, m * 4) switch(opcode >> 8 & 0x00f0 | opcode & 0x000f) { //MOV.B Rm,@(R0,Rn) case 0x04: { mov(ra1d, Rn); add(ra1d, R0); mov(ra2d, Rm); call(writeByte); return 0; } //MOV.W Rm,@(R0,Rn) case 0x05: { mov(ra1d, Rn); add(ra1d, R0); mov(ra2d, Rm); call(writeWord); return 0; } //MOV.L Rm,@(R0,Rn) case 0x06: { mov(ra1d, Rn); add(ra1d, R0); mov(ra2d, Rm); call(writeLong); return 0; } //MUL.L Rm,Rn case 0x07: { mov(eax, Rn); mov(edx, Rm); mul(edx); mov(MACL, eax); return 0; } //MOV.B @(R0,Rm),Rn case 0x0c: { mov(ra1d, Rm); add(ra1d, R0); call(readByte); movsx(eax, al); mov(Rn, eax); return 0; } //MOV.W @(R0,Rm),Rn case 0x0d: { mov(ra1d, Rm); add(ra1d, R0); call(readWord); movsx(eax, ax); mov(Rn, eax); return 0; } //MOV.L @(R0,Rm),Rn case 0x0e: { mov(ra1d, Rm); add(ra1d, R0); call(readLong); mov(Rn, eax); return 0; } //MAC.L @Rm+,@Rn+ case 0x0f: { auto skip = declareLabel(); mov(ra1d, Rn); addd(Rn, imm8(4)); call(readLong); movsxd(rax, eax); mov(r13, rax); mov(ra1d, Rm); addd(Rm, imm8(4)); call(readLong); movsxd(rax, eax); mov(rdx, r13); imul(rdx); mov(rdx, rax); add(rdx, MAC); mov(al, S); test(al, al); jz8(skip); sal(rdx, imm8(16)); sar(rdx, imm8(16)); defineLabel(skip); mov(MAC, rdx); return 0; } //MOV.L Rm,@(disp,Rn) case 0x10 ... 0x1f: { mov(ra1d, Rn); add(ra1d, imm8(d4*4)); mov(ra2d, Rm); call(writeLong); return 0; } //MOV.B Rm,@Rn case 0x20: { mov(ra1d, Rn); mov(ra2d, Rm); call(writeByte); return 0; } //MOV.W Rm,@Rn case 0x21: { mov(ra1d, Rn); mov(ra2d, Rm); call(writeWord); return 0; } //MOV.L Rm,@Rn case 0x22: { mov(ra1d, Rn); mov(ra2d, Rm); call(writeLong); return 0; } //MOV.B Rm,@-Rn case 0x24: { mov(ra1d, Rn); dec(ra1d); mov(r13d, ra1d); mov(ra2d, Rm); call(writeByte); mov(Rn, r13d); return 0; } //MOV.W Rm,@-Rn case 0x25: { mov(ra1d, Rn); sub(ra1d, imm8(2)); mov(r13d, ra1d); mov(ra2d, Rm); call(writeWord); mov(Rn, r13d); return 0; } //MOV.L Rm,@-Rn case 0x26: { mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(r13d, ra1d); mov(ra2d, Rm); call(writeLong); mov(Rn, r13d); return 0; } //DIV0S Rm,Rn case 0x27: { mov(eax, Rn); shr(eax, imm8(31)); mov(Q, al); mov(dl, al); mov(eax, Rm); shr(eax, imm8(31)); mov(M, al); xor(al, dl); mov(T, al); return 0; } //TST Rm,Rn case 0x28: { mov(eax, Rn); and(eax, Rm); setz(T); return 0; } //AND Rm,Rn case 0x29: { mov(eax, Rn); and(eax, Rm); mov(Rn, eax); return 0; } //XOR Rm,Rn case 0x2a: { mov(eax, Rn); xor(eax, Rm); mov(Rn, eax); return 0; } //OR Rm,Rn case 0x2b: { mov(eax, Rn); or(eax, Rm); mov(Rn, eax); return 0; } //CMP/STR Rm,Rn case 0x2c: { mov(eax, Rn); mov(edx, Rm); xor(eax, edx); test(al, al); setz(dl); for(auto _ : range(3)) { shr(eax, imm8(8)); test(al, al); setz(al); or(dl, al); } setnz(T); return 0; } //XTRCT Rm,Rn case 0x2d: { mov(eax, Rn); mov(edx, Rm); shr(eax, imm8(16)); shl(edx, imm8(16)); or(eax, edx); mov(Rn, eax); return 0; } //MULU Rm,Rn case 0x2e: { mov(eax, Rn); mov(edx, Rm); movzx(eax, ax); movzx(edx, dx); mul(edx); mov(MACL, eax); return 0; } //MULS Rm,Rn case 0x2f: { mov(eax, Rn); mov(edx, Rm); movsx(eax, ax); movsx(edx, dx); imul(edx); mov(MACL, eax); return 0; } //CMP/EQ Rm,Rn case 0x30: { mov(eax, Rn); cmp(eax, Rm); setz(T); return 0; } //CMP/HS Rm,Rn case 0x32: { mov(eax, Rn); cmp(eax, Rm); setnc(T); return 0; } //CMP/GE Rm,Rn case 0x33: { mov(eax, Rn); cmp(eax, Rm); setge(T); return 0; } //DIV1 Rm,Rn case 0x34: { auto skip = declareLabel(); auto skip2 = declareLabel(); mov(al, Q); mov(cl, al); mov(eax, Rn); shr(eax, imm8(31)); mov(Q, al); mov(edx, Rn); shl(edx, imm8(1)); mov(al, T); or(dl, al); mov(al, M); cmp(al, cl); jnz8(skip); sub(edx, Rm); jmp8(skip2); defineLabel(skip); add(edx, Rm); defineLabel(skip2); mov(Rn, edx); setc(dl); mov(al, Q); mov(cl, al); mov(al, M); xor(al, cl); xor(al, dl); mov(Q, al); mov(al, Q); mov(cl, al); mov(al, M); xor(cl, al); mov(al, imm8(1)); sub(al, cl); mov(T, al); return 0; } //DMULU.L Rm,Rn case 0x35: { mov(eax, Rn); mov(edx, Rm); mul(edx); mov(MACL, eax); mov(MACH, edx); return 0; } //CMP/HI Rm,Rn case 0x36: { mov(eax, Rn); cmp(eax, Rm); seta(T); return 0; } //CMP/GT Rm,Rn case 0x37: { mov(eax, Rn); cmp(eax, Rm); setg(T); return 0; } //SUB Rm,Rn case 0x38: { mov(eax, Rn); sub(eax, Rm); mov(Rn, eax); return 0; } //SUBC Rm,Rn case 0x3a: { mov(al, T); rcr(al); mov(eax, Rn); sbb(eax, Rm); mov(Rn, eax); setc(T); return 0; } //SUBV Rm,Rn case 0x3b: { mov(eax, Rn); sub(eax, Rm); mov(Rn, eax); seto(al); mov(T, al); return 0; } //ADD Rm,Rn case 0x3c: { mov(eax, Rn); add(eax, Rm); mov(Rn, eax); return 0; } //DMULS.L Rm,Rn case 0x3d: { mov(eax, Rn); mov(edx, Rm); imul(edx); mov(MACL, eax); mov(MACH, edx); return 0; } //ADDC Rm,Rn case 0x3e: { mov(al, T); rcr(al); mov(eax, Rn); adc(eax, Rm); mov(Rn, eax); setc(T); return 0; } //ADDV Rm,Rn case 0x3f: { mov(eax, Rn); add(eax, Rm); mov(Rn, eax); seto(al); mov(T, al); return 0; } //MAC.W @Rm+,@Rn+ case 0x4f: { auto skip = declareLabel(); mov(ra1d, Rn); addd(Rn, imm8(2)); call(readWord); movsx(eax, ax); mov(r13d, eax); mov(ra1d, Rm); addd(Rm, imm8(2)); call(readWord); movsx(eax, ax); mov(edx, r13d); imul(edx); shl(rdx, imm8(32)); or(rdx, rax); add(rdx, MAC); mov(al, S); test(al, al); jz8(skip); movsxd(rdx, edx); defineLabel(skip); mov(MAC, rdx); return 0; } //MOV.L @(disp,Rm),Rn case 0x50 ... 0x5f: { mov(ra1d, Rm); add(ra1d, imm8(d4*4)); call(readLong); mov(Rn, eax); return 0; } //MOV.B @Rm,Rn case 0x60: { mov(ra1d, Rm); call(readByte); movsx(eax, al); mov(Rn, eax); return 0; } //MOV.W @Rm,Rn case 0x61: { mov(ra1d, Rm); call(readWord); movsx(eax, ax); mov(Rn, eax); return 0; } //MOV.L @Rm,Rn case 0x62: { mov(ra1d, Rm); call(readLong); mov(Rn, eax); return 0; } //MOV Rm,Rn case 0x63: { mov(eax, Rm); mov(Rn, eax); return 0; } //MOV.B @Rm+,Rn case 0x64: { mov(ra1d, Rm); if(n != m) addd(Rm, imm8(1)); call(readByte); movsx(eax, al); mov(Rn, eax); return 0; } //MOV.W @Rm+,Rn case 0x65: { mov(ra1d, Rm); if(n != m) addd(Rm, imm8(2)); call(readWord); movsx(eax, ax); mov(Rn, eax); return 0; } //MOV.L @Rm+,Rn case 0x66: { mov(ra1d, Rm); if(n != m) addd(Rm, imm8(4)); call(readLong); mov(Rn, eax); return 0; } //NOT Rm,Rn case 0x67: { mov(eax, Rm); not(eax); mov(Rn, eax); return 0; } //SWAP.B Rm,Rn case 0x68: { mov(eax, Rm); mov(edx, eax); mov(al, ah); mov(ah, dl); mov(Rn, eax); return 0; } //SWAP.W Rm,Rn case 0x69: { mov(eax, Rm); mov(edx, eax); shr(eax, imm8(16)); shl(edx, imm8(16)); or(eax, edx); mov(Rn, eax); return 0; } //NEGC Rm,Rn case 0x6a: { mov(al, T); and(eax, imm8(1)); mov(edx, Rm); add(eax, edx); neg(eax); mov(Rn, eax); or(eax, edx); setnz(T); return 0; } //NEG Rm,Rn case 0x6b: { xor(eax, eax); sub(eax, Rm); mov(Rn, eax); return 0; } //EXTU.B Rm,Rn case 0x6c: { mov(eax, Rm); movzx(eax, al); mov(Rn, eax); return 0; } //EXTU.W Rm,Rn case 0x6d: { mov(eax, Rm); movzx(eax, ax); mov(Rn, eax); return 0; } //EXTS.B Rm,Rn case 0x6e: { mov(eax, Rm); movsx(eax, al); mov(Rn, eax); return 0; } //EXTS.W Rm,Rn case 0x6f: { mov(eax, Rm); movsx(eax, ax); mov(Rn, eax); return 0; } //ADD #imm,Rn case 0x70 ... 0x7f: { mov(al, imm8(d8)); movsx(eax, al); add(eax, Rn); mov(Rn, eax); return 0; } //MOV.W @(disp,PC),Rn case 0x90 ... 0x9f: { mov(ra1d, PC); add(ra1d, imm32(d8*2)); call(readWord); movsx(eax, ax); mov(Rn, eax); return 0; } //BRA disp case 0xa0 ... 0xaf: { mov(eax, PC); add(eax, imm32(4 + (i12)d12 * 2)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //BSR disp case 0xb0 ... 0xbf: { mov(eax, PC); mov(PR, eax); add(eax, imm32(4 + (i12)d12 * 2)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //MOV.L @(disp,PC),Rn case 0xd0 ... 0xdf: { mov(ra1d, PC); and(ra1d, imm8(~3)); add(ra1d, imm32(d8*4)); call(readLong); mov(Rn, eax); return 0; } //MOV #imm,Rn case 0xe0 ... 0xef: { mov(eax, imm32((s8)i)); mov(Rn, eax); return 0; } } #undef n #undef m #undef i #undef d4 #undef d8 #undef d12 #undef Rn #undef Rm #define n (opcode >> 8 & 0x0f) #define m (opcode >> 4 & 0x0f) //n for 0x80,0x81,0x84,0x85 #define i (opcode >> 0 & 0xff) #define d4 (opcode >> 0 & 0x0f) #define d8 (opcode >> 0 & 0xff) #define Rn dis8(rbx, n * 4) #define Rm dis8(rbx, m * 4) switch(opcode >> 8) { //MOV.B R0,@(disp,Rn) case 0x80: { mov(ra1d, Rm); add(ra1d, imm8(d4)); mov(ra2d, R0); call(writeByte); return 0; } //MOV.W R0,@(disp,Rn) case 0x81: { mov(ra1d, Rm); add(ra1d, imm8(d4*2)); mov(ra2d, R0); call(writeWord); return 0; } //MOV.B @(disp,Rn),R0 case 0x84: { mov(ra1d, Rm); add(ra1d, imm8(d4)); call(readByte); movsx(eax, al); mov(R0, eax); return 0; } //MOV.W @(disp,Rn),R0 case 0x85: { mov(ra1d, Rm); add(ra1d, imm8(d4*2)); call(readWord); movsx(eax, ax); mov(R0, eax); return 0; } //CMP/EQ #imm,R0 case 0x88: { mov(eax, R0); cmp(eax, imm8(i)); setz(T); return 0; } //BT disp case 0x89: { auto skip = declareLabel(); mov(al, T); test(al, al); jz8(skip); mov(eax, PC); add(eax, imm32(4 + (s8)d8 * 2)); mov(PPC, eax); movb(PPM, imm8(Branch::Take)); defineLabel(skip); return 1; } //BF disp case 0x8b: { auto skip = declareLabel(); mov(al, T); test(al, al); jnz8(skip); mov(eax, PC); add(eax, imm32(4 + (s8)d8 * 2)); mov(PPC, eax); movb(PPM, imm8(Branch::Take)); defineLabel(skip); return 1; } //BT/S disp case 0x8d: { auto skip = declareLabel(); mov(al, T); test(al, al); jz8(skip); mov(eax, PC); add(eax, imm32(4 + (s8)d8 * 2)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); defineLabel(skip); return 1; } //BF/S disp case 0x8f: { auto skip = declareLabel(); mov(al, T); test(al, al); jnz8(skip); mov(eax, PC); add(eax, imm32(4 + (s8)d8 * 2)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); defineLabel(skip); return 1; } //MOV.B R0,@(disp,GBR) case 0xc0: { mov(ra1d, GBR); add(ra1d, imm32(d8)); mov(ra2d, R0); call(writeByte); return 0; } //MOV.W R0,@(disp,GBR) case 0xc1: { mov(ra1d, GBR); add(ra1d, imm32(d8*2)); mov(ra2d, R0); call(writeWord); return 0; } //MOV.L R0,@(disp,GBR) case 0xc2: { mov(ra1d, GBR); add(ra1d, imm32(d8*4)); mov(ra2d, R0); call(writeLong); return 0; } //TRAPA #imm case 0xc3: { xor(edx, edx); xor(eax, eax); mov(al, T); or(dl, al); mov(al, S); shl(eax, imm8(1)); or(dl, al); mov(al, I); shl(eax, imm8(4)); or(dl, al); mov(al, Q); shl(eax, imm8(8)); or(edx, eax); mov(al, M); shl(eax, imm8(9)); or(edx, eax); mov(ra2d, edx); mov(ra1d, R15); addd(R15, imm8(4)); call(writeLong); mov(edx, PC); add(edx, imm8(2)); mov(ra2d, edx); mov(ra1d, R15); addd(R15, imm8(4)); call(writeLong); mov(ra1d, VBR); add(ra1d, imm32(i * 4)); call(readLong); add(eax, imm8(4)); mov(PPC, eax); movb(PPM, imm8(Branch::Take)); return 1; } //MOV.B @(disp,GBR),R0 case 0xc4: { mov(ra1d, GBR); add(ra1d, imm32(d8)); call(readByte); movsx(eax, al); mov(R0, eax); return 0; } //MOV.W @(disp,GBR),R0 case 0xc5: { mov(ra1d, GBR); add(ra1d, imm32(d8*2)); call(readWord); movsx(eax, ax); mov(R0, eax); return 0; } //MOV.L @(disp,GBR),R0 case 0xc6: { mov(ra1d, GBR); add(ra1d, imm32(d8*4)); call(readLong); mov(R0, eax); return 0; } //MOVA @(disp,PC),R0 case 0xc7: { auto skip = declareLabel(); mov(eax, PC); and(al, imm8(~3)); add(eax, imm32(d8*4)); mov(R0, eax); mov(eax, PPM); test(eax, eax); jz8(skip); mov(eax, R0); sub(eax, imm8(2)); mov(R0, eax); defineLabel(skip); return 0; } //TST #imm,R0 case 0xc8: { mov(eax, R0); and(eax, imm32(i)); setz(T); return 0; } //AND #imm,R0 case 0xc9: { mov(eax, R0); and(eax, imm32(i)); mov(R0, eax); return 0; } //XOR #imm,R0 case 0xca: { mov(eax, R0); xor(eax, imm32(i)); mov(R0, eax); return 0; } //OR #imm,R0 case 0xcb: { mov(eax, R0); or(eax, imm32(i)); mov(R0, eax); return 0; } //TST.B #imm,@(R0,GBR) case 0xcc: { mov(ra1d, GBR); add(ra1d, R0); call(readByte); and(al, imm8(i)); setz(T); return 0; } //AND.B #imm,@(R0,GBR) case 0xcd: { mov(ra1d, GBR); add(ra1d, R0); call(readByte); and(al, imm8(i)); mov(ra2d, eax); mov(ra1d, GBR); add(ra1d, R0); call(writeByte); return 0; } //XOR.B #imm,@(R0,GBR) case 0xce: { mov(ra1d, GBR); add(ra1d, R0); call(readByte); xor(al, imm8(i)); mov(ra2d, eax); mov(ra1d, GBR); add(ra1d, R0); call(writeByte); return 0; } //OR.B #imm,@(R0,GBR) case 0xcf: { mov(ra1d, GBR); add(ra1d, R0); call(readByte); or(al, imm8(i)); mov(ra2d, eax); mov(ra1d, GBR); add(ra1d, R0); call(writeByte); return 0; } } #undef n #undef m #undef i #undef d4 #undef d8 #undef Rn #undef Rm #define n (opcode >> 8 & 0xf) #define m (opcode >> 8 & 0xf) #define Rn dis8(rbx, n * 4) #define Rm dis8(rbx, m * 4) switch(opcode >> 4 & 0x0f00 | opcode & 0x00ff) { //STC SR,Rn case 0x002: { auto skip = declareLabel(); auto skip2 = declareLabel(); xor(edx, edx); xor(eax, eax); mov(al, T); or(dl, al); mov(al, S); shl(eax, imm8(1)); or(dl, al); mov(al, I); shl(eax, imm8(4)); or(dl, al); mov(al, Q); test(al, al); jz8(skip); or(edx, imm32(0x100)); defineLabel(skip); mov(al, M); test(al, al); jz8(skip2); or(edx, imm32(0x200)); defineLabel(skip2); mov(Rn, edx); return 0; } //BSRF Rm case 0x003: { mov(eax, PC); mov(PR, eax); add(eax, Rm); add(eax, imm8(4)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //STS MACH,Rn case 0x00a: { mov(eax, MACH); mov(Rn, eax); return 0; } //STC GBR,Rn case 0x012: { mov(eax, GBR); mov(Rn, eax); return 0; } //STS MACL,Rn case 0x01a: { mov(eax, MACL); mov(Rn, eax); return 0; } //STC VBR,Rn case 0x022: { mov(eax, VBR); mov(Rn, eax); return 0; } //BRAF Rm case 0x023: { mov(eax, PC); add(eax, Rm); add(eax, imm8(4)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //MOVT Rn case 0x029: { mov(al, T); movzx(eax, al); mov(Rn, eax); return 0; } //STS PR,Rn case 0x02a: { mov(eax, PR); mov(Rn, eax); return 0; } //SHLL Rn case 0x400: { mov(eax, Rn); shr(eax, imm8(31)); mov(T, al); mov(eax, Rn); shl(eax, imm8(1)); mov(Rn, eax); return 0; } //SHLR Rn case 0x401: { mov(eax, Rn); and(al, imm8(1)); mov(T, al); mov(eax, Rn); shr(eax, imm8(1)); mov(Rn, eax); return 0; } //STS.L MACH,@-Rn case 0x402: { mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(Rn, ra1d); mov(ra2d, MACH); call(writeLong); return 0; } //STC.L SR,@-Rn case 0x403: { auto skip = declareLabel(); auto skip2 = declareLabel(); xor(edx, edx); xor(eax, eax); mov(al, T); or(dl, al); mov(al, S); shl(eax, imm8(1)); or(dl, al); mov(al, I); shl(eax, imm8(4)); or(dl, al); mov(al, Q); test(al, al); jz8(skip); or(edx, imm32(0x100)); defineLabel(skip); mov(al, M); test(al, al); jz8(skip2); or(edx, imm32(0x200)); defineLabel(skip2); mov(ra2d, edx); mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(Rn, ra1d); call(writeLong); return 0; } //ROTL Rn case 0x404: { mov(eax, Rn); shr(eax, imm8(31)); mov(T, al); mov(eax, Rn); rol(eax); mov(Rn, eax); return 0; } //ROTR Rn case 0x405: { mov(eax, Rn); and(al, imm8(1)); mov(T, al); mov(eax, Rn); ror(eax); mov(Rn, eax); return 0; } //LDS.L @Rm+,MACH case 0x406: { mov(ra1d, Rn); addd(Rn, imm8(4)); call(readLong); mov(MACH, eax); return 0; } //LDC.L @Rm+,SR case 0x407: { mov(ra1d, Rn); addd(Rn, imm8(4)); call(readLong); mov(edx, eax); and(al, imm8(1)); mov(T, al); mov(eax, edx); shr(eax, imm8(1)); and(al, imm8(1)); mov(S, al); mov(eax, edx); shr(eax, imm8(4)); and(al, imm8(15)); mov(I, al); mov(eax, edx); shr(eax, imm8(8)); and(al, imm8(1)); mov(Q, al); mov(eax, edx); shr(eax, imm8(9)); and(al, imm8(1)); mov(M, al); return 0; } //SHLL2 Rn case 0x408: { mov(eax, Rn); shl(eax, imm8(2)); mov(Rn, eax); return 0; } //SHLR2 Rn case 0x409: { mov(eax, Rn); shr(eax, imm8(2)); mov(Rn, eax); return 0; } //LDS Rm,MACH case 0x40a: { mov(eax, Rm); mov(MACH, eax); return 0; } //JSR @Rm case 0x40b: { mov(eax, PC); mov(PR, eax); mov(eax, Rm); add(eax, imm8(4)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //LDC Rm,SR case 0x40e: { mov(edx, Rm); mov(eax, edx); and(al, imm8(1)); mov(T, al); mov(eax, edx); shr(eax, imm8(1)); and(al, imm8(1)); mov(S, al); mov(eax, edx); shr(eax, imm8(4)); and(al, imm8(15)); mov(I, al); mov(eax, edx); shr(eax, imm8(8)); and(al, imm8(1)); mov(Q, al); mov(eax, edx); shr(eax, imm8(9)); and(al, imm8(1)); mov(M, al); return 0; } //DT Rn case 0x410: { mov(eax, Rn); dec(eax); mov(Rn, eax); setz(al); mov(T, al); return 0; } //CMP/PZ Rn case 0x411: { mov(eax, Rn); test(eax, eax); setge(T); return 0; } //STS.L MACL,@-Rn case 0x412: { mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(Rn, ra1d); mov(ra2d, MACL); call(writeLong); return 0; } //STC.L GBR,@-Rn case 0x413: { mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(Rn, ra1d); mov(ra2d, GBR); call(writeLong); return 0; } //CMP/PL Rn case 0x415: { mov(eax, Rn); test(eax, eax); setg(T); return 0; } //LDS.L @Rm+,MACL case 0x416: { mov(ra1d, Rm); addd(Rm, imm8(4)); call(readLong); mov(MACL, eax); return 0; } //LDS.L @Rm+,GBR case 0x417: { mov(ra1d, Rm); addd(Rm, imm8(4)); call(readLong); mov(GBR, eax); return 0; } //SHLL8 Rn case 0x418: { mov(eax, Rn); shl(eax, imm8(8)); mov(Rn, eax); return 0; } //SHLR8 Rn case 0x419: { mov(eax, Rn); shr(eax, imm8(8)); mov(Rn, eax); return 0; } //LDS Rm,MACL case 0x41a: { mov(eax, Rm); mov(MACL, eax); return 0; } //TAS @Rn case 0x41b: { mov(ra1d, Rn); and(ra1d, imm32(0x1fff'ffff)); or(ra1d, imm32(0x2000'0000)); call(readByte); mov(cl, al); test(al, al); setz(al); mov(T, al); mov(al, cl); or(al, imm8(0x80)); mov(ra2d, eax); mov(ra1d, Rn); and(ra1d, imm32(0x1fff'ffff)); or(ra1d, imm32(0x2000'0000)); call(writeByte); return 0; } //LDC Rm,GBR case 0x41e: { mov(eax, Rn); mov(GBR, eax); return 0; } //SHAL Rn case 0x420: { mov(eax, Rn); shr(eax, imm8(31)); mov(T, al); mov(eax, Rn); sal(eax, imm8(1)); mov(Rn, eax); return 0; } //SHAR Rn case 0x421: { mov(eax, Rn); and(eax, imm8(1)); mov(T, al); mov(eax, Rn); sar(eax, imm8(1)); mov(Rn, eax); return 0; } //STS.L PR,@-Rn case 0x422: { mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(Rn, ra1d); mov(ra2d, PR); call(writeLong); return 0; } //STC.L VBR,@-Rn case 0x423: { mov(ra1d, Rn); sub(ra1d, imm8(4)); mov(Rn, ra1d); mov(ra2d, VBR); call(writeLong); return 0; } //ROTCL Rn case 0x424: { mov(eax, Rn); shr(eax, imm8(31)); mov(cl, al); mov(edx, Rn); shl(edx, imm8(1)); mov(al, T); or(dl, al); mov(Rn, edx); mov(al, cl); mov(T, al); return 0; } //ROTCR Rn case 0x425: { mov(eax, Rn); and(al, imm8(1)); mov(cl, al); mov(edx, Rn); shr(edx, imm8(1)); xor(eax, eax); mov(al, T); shl(eax, imm8(31)); or(edx, eax); mov(Rn, edx); mov(al, cl); mov(T, al); return 0; } //LDS.L @Rm+,PR case 0x426: { mov(ra1d, Rm); addd(Rm, imm8(4)); call(readLong); mov(PR, eax); return 0; } //LDC.L @Rm+,VBR case 0x427: { mov(ra1d, Rm); addd(Rm, imm8(4)); call(readLong); mov(VBR, eax); return 0; } //SHLL16 Rn case 0x428: { mov(eax, Rn); shl(eax, imm8(16)); mov(Rn, eax); return 0; } //SHLR16 Rn case 0x429: { mov(eax, Rn); shr(eax, imm8(16)); mov(Rn, eax); return 0; } //LDS Rm,PR case 0x42a: { mov(eax, Rm); mov(PR, eax); return 0; } //JMP @Rm case 0x42b: { mov(eax, Rm); add(eax, imm8(4)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //LDC Rm,VBR case 0x42e: { mov(eax, Rm); mov(VBR, eax); return 0; } } #undef n #undef m #undef Rn #undef Rm switch(opcode) { //CLRT case 0x0008: { xor(al, al); mov(T, al); return 0; } //NOP case 0x0009: { return 0; } //RTS case 0x000b: { mov(eax, PR); add(eax, imm8(4)); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); return 1; } //SETT case 0x0018: { mov(al, imm8(1)); mov(T, al); return 0; } //DIV0U case 0x0019: { xor(al, al); mov(Q, al); mov(M, al); mov(T, al); return 0; } //SLEEP case 0x001b: { auto skip = declareLabel(); auto skip2 = declareLabel(); mov(eax, ET); test(al, al); jnz8(skip); subd(PC, imm8(2)); jmp8(skip2); defineLabel(skip); movb(ET, imm8(0)); defineLabel(skip2); return 1; } //CLRMAC case 0x0028: { xor(rax, rax); mov(MAC, rax); return 0; } //RTE case 0x002b: { mov(ra1d, R15); addd(R15, imm8(4)); call(readLong); mov(PPC, eax); movb(PPM, imm8(Branch::Slot)); mov(ra1d, R15); addd(R15, imm8(4)); call(readLong); mov(edx, eax); and(al, imm8(1)); mov(T, al); mov(eax, edx); shr(eax, imm8(1)); and(al, imm8(1)); mov(S, al); mov(eax, edx); shr(eax, imm8(4)); and(al, imm8(15)); mov(I, al); mov(eax, edx); shr(eax, imm8(8)); and(al, imm8(1)); mov(Q, al); mov(eax, edx); shr(eax, imm8(9)); and(al, imm8(1)); mov(M, al); return 1; } } switch(0) { //ILLEGAL case 0: { call(illegal); return 1; } } #if 0 #define op(id, name, ...) \ case id: \ call(&SH2::name, &self, ##__VA_ARGS__); \ return 0; #define br(id, name, ...) \ case id: \ call(&SH2::name, &self, ##__VA_ARGS__); \ return 1; #include "decoder.hpp" #undef op #undef br #endif return 0; } #undef R0 #undef R15 #undef PC #undef PR #undef GBR #undef VBR #undef MAC #undef MACL #undef MACH #undef CCR #undef T #undef S #undef I #undef Q #undef M #undef PPC #undef PPM #undef ET #undef ID #undef readByte #undef readWord #undef readLong #undef writeByte #undef writeWord #undef writeLong #undef illegal ares-126/ares/component/processor/sh2/serialization.cpp000066400000000000000000000070351415063341600233560ustar00rootroot00000000000000auto SH2::serialize(serializer& s) -> void { s(R); s(PC); s(PR); s(GBR); s(VBR); s(MACH); s(MACL); s(CCR); s(SR.T); s(SR.S); s(SR.I); s(SR.Q); s(SR.M); s(PPC); s(PPM); s(ET); s(ID); s(exceptions); s(cache); s(intc); s(dmac); s(sci); s(wdt); s(ubc); s(frt); s(bsc); s(sbycr); s(divu); if constexpr(Accuracy::Recompiler) { recompiler.reset(); } } auto SH2::Cache::serialize(serializer& s) -> void { s(lrus); s(tags); for(auto& line : lines) s(line.longs); s(enable); s(disableCode); s(disableData); s(twoWay); s(waySelect); } auto SH2::INTC::serialize(serializer& s) -> void { s(icr.vecmd); s(icr.nmie); s(icr.nmil); s(ipra.wdtip); s(ipra.dmacip); s(ipra.divuip); s(iprb.frtip); s(iprb.sciip); s(vcra.srxv); s(vcra.serv); s(vcrb.stev); s(vcrb.stxv); s(vcrc.focv); s(vcrc.ficv); s(vcrd.fovv); s(vcrwdt.bcmv); s(vcrwdt.witv); } auto SH2::DMAC::serialize(serializer& s) -> void { s(sar); s(dar); s(tcr); for(auto& chcr : this->chcr) { s(chcr.de); s(chcr.te); s(chcr.ie); s(chcr.ta); s(chcr.tb); s(chcr.dl); s(chcr.ds); s(chcr.al); s(chcr.am); s(chcr.ar); s(chcr.ts); s(chcr.sm); s(chcr.dm); } s(vcrdma); s(drcr); s(dmaor.dme); s(dmaor.nmif); s(dmaor.ae); s(dmaor.pr); s(dreq); s(pendingIRQ); } auto SH2::SCI::serialize(serializer& s) -> void { s(smr.cks); s(smr.mp); s(smr.stop); s(smr.oe); s(smr.pe); s(smr.chr); s(smr.ca); s(scr.cke); s(scr.teie); s(scr.mpie); s(scr.re); s(scr.te); s(scr.rie); s(scr.tie); s(ssr.mpbt); s(ssr.mpb); s(ssr.tend); s(ssr.per); s(ssr.fer); s(ssr.orer); s(ssr.rdrf); s(ssr.tdre); s(brr); s(tdr); s(rdr); s(pendingTransmitEmptyIRQ); s(pendingReceiveFullIRQ); } auto SH2::WDT::serialize(serializer& s) -> void { s(wtcsr.cks); s(wtcsr.tme); s(wtcsr.wtit); s(wtcsr.ovf); s(rstcsr.rsts); s(rstcsr.rste); s(rstcsr.wovf); s(wtcnt); } auto SH2::UBC::serialize(serializer& s) -> void { s(bara); s(bamra); s(bbra.sza); s(bbra.rwa); s(bbra.ida); s(bbra.cpa); s(barb); s(bamrb); s(bbrb.szb); s(bbrb.rwb); s(bbrb.idb); s(bbrb.cpb); s(bdrb); s(bdmrb); s(brcr.pcbb); s(brcr.dbeb); s(brcr.seq); s(brcr.cmfpb); s(brcr.cmfcb); s(brcr.pcba); s(brcr.umd); s(brcr.ebbe); s(brcr.cmfpa); s(brcr.cmfca); } auto SH2::FRT::serialize(serializer& s) -> void { s(tier.ovie); s(tier.ociae); s(tier.ocibe); s(tier.icie); s(ftcsr.cclra); s(ftcsr.ovf); s(ftcsr.ocfa); s(ftcsr.ocfb); s(ftcsr.icf); s(frc); s(ocra); s(ocrb); s(tcr.cks); s(tcr.iedg); s(tocr.olvla); s(tocr.olvlb); s(tocr.ocrs); s(ficr); s(counter); s(pendingOutputIRQ); } auto SH2::BSC::serialize(serializer& s) -> void { s(bcr1.dram); s(bcr1.a0lw); s(bcr1.a1lw); s(bcr1.ahlw); s(bcr1.pshr); s(bcr1.bstrom); s(bcr1.a2endian); s(bcr1.master); s(bcr2.a1sz); s(bcr2.a2sz); s(bcr2.a3sz); s(wcr.w0); s(wcr.w1); s(wcr.w2); s(wcr.w3); s(wcr.iw0); s(wcr.iw1); s(wcr.iw2); s(wcr.iw3); s(mcr.rcd); s(mcr.trp); s(mcr.rmode); s(mcr.rfsh); s(mcr.amx); s(mcr.sz); s(mcr.trwl); s(mcr.rasd); s(mcr.be); s(mcr.tras); s(rtcsr.cks); s(rtcsr.cmie); s(rtcsr.cmf); s(rtcnt); s(rtcor); } auto SH2::SBYCR::serialize(serializer& s) -> void { s(sci); s(frt); s(divu); s(mult); s(dmac); s(hiz); s(sby); } auto SH2::DIVU::serialize(serializer& s) -> void { s(dvsr); s(dvcr.ovf); s(dvcr.ovfie); s(vcrdiv); s(dvdnth); s(dvdntl); } ares-126/ares/component/processor/sh2/sh2.cpp000066400000000000000000000021011415063341600211620ustar00rootroot00000000000000#include #include "sh2.hpp" namespace ares { #define SP R[15] #include "sh7604/sh7604.cpp" #include "exceptions.cpp" #include "instruction.cpp" #include "instructions.cpp" //#include "cached.cpp" #include "recompiler.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto SH2::power(bool reset) -> void { for(auto& r : R) r = undefined; PC = 0; PR = undefined; GBR = undefined; VBR = 0; MACH = undefined; MACL = undefined; CCR = 0; SR.T = undefined; SR.S = undefined; SR.I = 0b1111; SR.Q = undefined; SR.M = undefined; PPC = 0; PPM = Branch::Step; ID = 0; exceptions = !reset ? ResetCold : ResetWarm; cache = {*this}; intc = {*this}; dmac = {*this}; sci = {*this}; wdt = {}; ubc = {}; frt = {*this}; bsc = {}; sbycr = {}; divu = {}; cache.power(); if constexpr(Accuracy::Recompiler) { auto buffer = ares::Memory::FixedAllocator::get().acquire(512_MiB); recompiler.allocator.resize(512_MiB, bump_allocator::executable | bump_allocator::zero_fill, buffer); recompiler.reset(); } } } ares-126/ares/component/processor/sh2/sh2.hpp000066400000000000000000000222071415063341600212000ustar00rootroot00000000000000#pragma once #include //Hitachi SH-2 namespace ares { struct SH2 { virtual auto step(u32 clocks) -> void = 0; virtual auto busReadByte(u32 address) -> u32 = 0; virtual auto busReadWord(u32 address) -> u32 = 0; virtual auto busReadLong(u32 address) -> u32 = 0; virtual auto busWriteByte(u32 address, u32 data) -> void = 0; virtual auto busWriteWord(u32 address, u32 data) -> void = 0; virtual auto busWriteLong(u32 address, u32 data) -> void = 0; auto inDelaySlot() const -> bool { return PPM != Branch::Step; } //sh2.cpp auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; //exceptions.cpp auto exceptionHandler() -> void; auto push(u32 data) -> void; auto interrupt(u8 level, u8 vector) -> void; auto exception(u8 vector) -> void; auto addressErrorCPU() -> void; auto addressErrorDMA() -> void; auto illegalInstruction() -> void; auto illegalSlotInstruction() -> void; //instruction.cpp auto jump(u32 pc) -> void; auto branch(u32 pc) -> void; auto delaySlot(u32 pc) -> void; auto instructionEpilogue() -> bool; auto instruction() -> void; auto execute(u16 opcode) -> void; //instructions.cpp inline auto ADD(u32 m, u32 n) -> void; inline auto ADDC(u32 m, u32 n) -> void; inline auto ADDI(u32 i, u32 n) -> void; inline auto ADDV(u32 m, u32 n) -> void; inline auto AND(u32 m, u32 n) -> void; inline auto ANDI(u32 i) -> void; inline auto ANDM(u32 i) -> void; inline auto BF(u32 d) -> void; inline auto BFS(u32 d) -> void; inline auto BRA(u32 d) -> void; inline auto BRAF(u32 m) -> void; inline auto BSR(u32 d) -> void; inline auto BSRF(u32 m) -> void; inline auto BT(u32 d) -> void; inline auto BTS(u32 d) -> void; inline auto CLRMAC() -> void; inline auto CLRT() -> void; inline auto CMPEQ(u32 m, u32 n) -> void; inline auto CMPGE(u32 m, u32 n) -> void; inline auto CMPGT(u32 m, u32 n) -> void; inline auto CMPHI(u32 m, u32 n) -> void; inline auto CMPHS(u32 m, u32 n) -> void; inline auto CMPIM(u32 i) -> void; inline auto CMPPL(u32 n) -> void; inline auto CMPPZ(u32 n) -> void; inline auto CMPSTR(u32 m, u32 n) -> void; inline auto DIV0S(u32 m, u32 n) -> void; inline auto DIV0U() -> void; inline auto DIV1(u32 m, u32 n) -> void; inline auto DMULS(u32 m, u32 n) -> void; inline auto DMULU(u32 m, u32 n) -> void; inline auto DT(u32 n) -> void; inline auto EXTSB(u32 m, u32 n) -> void; inline auto EXTSW(u32 m, u32 n) -> void; inline auto EXTUB(u32 m, u32 n) -> void; inline auto EXTUW(u32 m, u32 n) -> void; inline auto ILLEGAL() -> void; inline auto JMP(u32 m) -> void; inline auto JSR(u32 m) -> void; inline auto LDCSR(u32 m) -> void; inline auto LDCGBR(u32 m) -> void; inline auto LDCVBR(u32 m) -> void; inline auto LDCMSR(u32 m) -> void; inline auto LDCMGBR(u32 m) -> void; inline auto LDCMVBR(u32 m) -> void; inline auto LDSMACH(u32 m) -> void; inline auto LDSMACL(u32 m) -> void; inline auto LDSPR(u32 m) -> void; inline auto LDSMMACH(u32 m) -> void; inline auto LDSMMACL(u32 m) -> void; inline auto LDSMPR(u32 m) -> void; inline auto MACW(u32 m, u32 n) -> void; inline auto MACL_(u32 m, u32 n) -> void; inline auto MOV(u32 m, u32 n) -> void; inline auto MOVBL(u32 m, u32 n) -> void; inline auto MOVBL0(u32 m, u32 n) -> void; inline auto MOVBL4(u32 m, u32 d) -> void; inline auto MOVBLG(u32 d) -> void; inline auto MOVBM(u32 m, u32 n) -> void; inline auto MOVBP(u32 m, u32 n) -> void; inline auto MOVBS(u32 m, u32 n) -> void; inline auto MOVBS0(u32 m, u32 n) -> void; inline auto MOVBS4(u32 d, u32 n) -> void; inline auto MOVBSG(u32 d) -> void; inline auto MOVWL(u32 m, u32 n) -> void; inline auto MOVWL0(u32 m, u32 n) -> void; inline auto MOVWL4(u32 m, u32 d) -> void; inline auto MOVWLG(u32 d) -> void; inline auto MOVWM(u32 m, u32 n) -> void; inline auto MOVWP(u32 m, u32 n) -> void; inline auto MOVWS(u32 m, u32 n) -> void; inline auto MOVWS0(u32 m, u32 n) -> void; inline auto MOVWS4(u32 d, u32 n) -> void; inline auto MOVWSG(u32 d) -> void; inline auto MOVLL(u32 m, u32 n) -> void; inline auto MOVLL0(u32 m, u32 n) -> void; inline auto MOVLL4(u32 m, u32 d, u32 n) -> void; inline auto MOVLLG(u32 d) -> void; inline auto MOVLM(u32 m, u32 n) -> void; inline auto MOVLP(u32 m, u32 n) -> void; inline auto MOVLS(u32 m, u32 n) -> void; inline auto MOVLS0(u32 m, u32 n) -> void; inline auto MOVLS4(u32 m, u32 d, u32 n) -> void; inline auto MOVLSG(u32 d) -> void; inline auto MOVI(u32 i, u32 n) -> void; inline auto MOVWI(u32 d, u32 n) -> void; inline auto MOVLI(u32 d, u32 n) -> void; inline auto MOVA(u32 d) -> void; inline auto MOVT(u32 n) -> void; inline auto MULL(u32 m, u32 n) -> void; inline auto MULS(u32 m, u32 n) -> void; inline auto MULU(u32 m, u32 n) -> void; inline auto NEG(u32 m, u32 n) -> void; inline auto NEGC(u32 m, u32 n) -> void; inline auto NOP() -> void; inline auto NOT(u32 m, u32 n) -> void; inline auto OR(u32 m, u32 n) -> void; inline auto ORI(u32 i) -> void; inline auto ORM(u32 i) -> void; inline auto ROTCL(u32 n) -> void; inline auto ROTCR(u32 n) -> void; inline auto ROTL(u32 n) -> void; inline auto ROTR(u32 n) -> void; inline auto RTE() -> void; inline auto RTS() -> void; inline auto SETT() -> void; inline auto SHAL(u32 n) -> void; inline auto SHAR(u32 n) -> void; inline auto SHLL(u32 n) -> void; inline auto SHLL2(u32 n) -> void; inline auto SHLL8(u32 n) -> void; inline auto SHLL16(u32 n) -> void; inline auto SHLR(u32 n) -> void; inline auto SHLR2(u32 n) -> void; inline auto SHLR8(u32 n) -> void; inline auto SHLR16(u32 n) -> void; inline auto SLEEP() -> void; inline auto STCSR(u32 n) -> void; inline auto STCGBR(u32 n) -> void; inline auto STCVBR(u32 n) -> void; inline auto STCMSR(u32 n) -> void; inline auto STCMGBR(u32 n) -> void; inline auto STCMVBR(u32 n) -> void; inline auto STSMACH(u32 n) -> void; inline auto STSMACL(u32 n) -> void; inline auto STSPR(u32 n) -> void; inline auto STSMMACH(u32 n) -> void; inline auto STSMMACL(u32 n) -> void; inline auto STSMPR(u32 n) -> void; inline auto SUB(u32 m, u32 n) -> void; inline auto SUBC(u32 m, u32 n) -> void; inline auto SUBV(u32 m, u32 n) -> void; inline auto SWAPB(u32 m, u32 n) -> void; inline auto SWAPW(u32 m, u32 n) -> void; inline auto TAS(u32 n) -> void; inline auto TRAPA(u32 i) -> void; inline auto TST(u32 m, u32 n) -> void; inline auto TSTI(u32 i) -> void; inline auto TSTM(u32 i) -> void; inline auto XOR(u32 m, u32 n) -> void; inline auto XORI(u32 i) -> void; inline auto XORM(u32 i) -> void; inline auto XTRCT(u32 m, u32 n) -> void; //disassembler.cpp template auto hint(P&&...) const -> string; auto disassembleInstruction() -> string; auto disassembleContext() -> string; static constexpr u32 undefined = 0; struct Branch { enum : u32 { Step, Slot, Take }; }; struct S32 { operator u32() const { return T << 0 | S << 1 | I << 4 | Q << 8 | M << 9; } auto& operator=(u32 d) { T = d >> 0 & 1; S = d >> 1 & 1; I = d >> 4 & 15; Q = d >> 8 & 1; M = d >> 9 & 1; return *this; } u32 T; u32 S; u32 I; u32 Q; u32 M; }; u32 R[16]; //general purpose registers u32 PC; //program counter u32 PR; //procedure register u32 GBR; //global base register u32 VBR; //vector base register union { u64 MAC; //multiply-and-accumulate register struct { u32 order_msb2(MACH, MACL); }; }; u32 CCR; //clock counter register S32 SR; //status register u32 PPC; //program counter for delay slots u32 PPM; //delay slot mode u32 ET; //exception triggered flag u32 ID; //interrupts disabled flag enum : u32 { ResetCold = 1 << 0, ResetWarm = 1 << 1, AddressErrorCPU = 1 << 2, AddressErrorDMA = 1 << 3, }; u32 exceptions = 0; //delayed exception flags struct Recompiler : recompiler::amd64 { using recompiler::amd64::call; SH2& self; Recompiler(SH2& self) : self(self) {} struct Block { auto execute(SH2& self) -> void { ((void (*)(u32*, SH2*))code)(&self.R[0], &self); } u8* code; }; struct Pool { Block* blocks[1 << 7]; }; auto reset() -> void { for(u32 index : range(1 << 24)) pools[index] = nullptr; } auto invalidate(u32 address) -> void { pool(address)->blocks[address >> 1 & 0x7f] = nullptr; } auto pool(u32 address) -> Pool*; auto block(u32 address) -> Block*; auto emit(u32 address) -> Block*; auto emitInstruction(u16 opcode) -> bool; template alwaysinline auto call(V (SH2::*function)(P...)) -> void { static_assert(sizeof...(P) <= 5); if constexpr(ABI::Windows) { if constexpr(sizeof...(P) >= 5) mov(dis8(rsp, 0x28), ra5); if constexpr(sizeof...(P) >= 4) mov(dis8(rsp, 0x20), ra4); } mov(ra0, rbp); call(imm64{function}, rax); } bump_allocator allocator; Pool* pools[1 << 24]; int min_cycles = 0; } recompiler{*this}; #include "sh7604/sh7604.hpp" #include "accuracy.hpp" }; } ares-126/ares/component/processor/sh2/sh7604/000077500000000000000000000000001415063341600207235ustar00rootroot00000000000000ares-126/ares/component/processor/sh2/sh7604/bus.cpp000066400000000000000000000117001415063341600222170ustar00rootroot00000000000000auto SH2::readByte(u32 address) -> u32 { switch(address >> 29) { case Area::Cached: { if(likely(cache.enable)) return cache.read(address); return busReadByte(address & 0x1fff'ffff); } case Area::Uncached: { return busReadByte(address & 0x1fff'ffff); } case Area::Data: { return cache.readData(address); } case Area::IO: { if constexpr(Accuracy::AddressErrors) { if(unlikely(address >= 0xffff'ff00 && address <= 0xffff'ffff)) { return exceptions |= AddressErrorCPU, 0; } } return internalReadByte(address); } } return 0; } auto SH2::readWord(u32 address) -> u32 { if constexpr(Accuracy::AddressErrors) { if(unlikely(address & 1)) return exceptions |= AddressErrorCPU, 0; } switch(address >> 29) { case Area::Cached: { if(likely(cache.enable)) return cache.read(address); return busReadWord(address & 0x1fff'fffe); } case Area::Uncached: { return busReadWord(address & 0x1fff'fffe); } case Area::Data: { return cache.readData(address); } case Area::IO: { u16 data = 0; data |= internalReadByte(address & ~1 | 0) << 8; data |= internalReadByte(address & ~1 | 1) << 0; return data; } } return 0; } auto SH2::readLong(u32 address) -> u32 { if constexpr(Accuracy::AddressErrors) { if(unlikely(address & 3)) return exceptions |= AddressErrorCPU, 0; } switch(address >> 29) { case Area::Cached: { if(likely(cache.enable)) return cache.read(address); return busReadLong(address & 0x1fff'fffc); } case Area::Uncached: { return busReadLong(address & 0x1fff'fffc); } case Area::Address: { return cache.readAddress(address); } case Area::Data: { return cache.readData(address); } case Area::IO: { if constexpr(Accuracy::AddressErrors) { if(unlikely(address >= 0xffff'fe00 && address <= 0xffff'feff)) { return exceptions |= AddressErrorCPU, 0; } } u32 data = 0; data |= internalReadByte(address & ~3 | 0) << 24; data |= internalReadByte(address & ~3 | 1) << 16; data |= internalReadByte(address & ~3 | 2) << 8; data |= internalReadByte(address & ~3 | 3) << 0; return data; } } return 0; } auto SH2::writeByte(u32 address, u32 data) -> void { if constexpr(Accuracy::Recompiler) { recompiler.invalidate(address); } switch(address >> 29) { case Area::Cached: { if(likely(cache.enable)) cache.write(address, data); return busWriteByte(address & 0x1fff'ffff, data); } case Area::Uncached: { return busWriteByte(address & 0x1fff'ffff, data); } case Area::Purge: { return cache.purge(address); } case Area::Data: { return cache.writeData(address, data); } case Area::IO: { if constexpr(Accuracy::AddressErrors) { if(unlikely(address >= 0xffff'ff00 && address <= 0xffff'ffff)) { return (void)(exceptions |= AddressErrorCPU); } } return internalWriteByte(address, data); } } } auto SH2::writeWord(u32 address, u32 data) -> void { if constexpr(Accuracy::AddressErrors) { if(unlikely(address & 1)) return (void)(exceptions |= AddressErrorCPU); } if constexpr(Accuracy::Recompiler) { recompiler.invalidate(address); } switch(address >> 29) { case Area::Cached: { if(likely(cache.enable)) cache.write(address, data); return busWriteWord(address & 0x1fff'fffe, data); } case Area::Uncached: { return busWriteWord(address & 0x1fff'fffe, data); } case Area::Purge: { return cache.purge(address); } case Area::Data: { return cache.writeData(address, data); } case Area::IO: { internalWriteByte(address & ~1 | 0, data >> 8); internalWriteByte(address & ~1 | 1, data >> 0); return; } } } auto SH2::writeLong(u32 address, u32 data) -> void { if constexpr(Accuracy::AddressErrors) { if(unlikely(address & 3)) return (void)(exceptions |= AddressErrorCPU); } if constexpr(Accuracy::Recompiler) { recompiler.invalidate(address + 0); recompiler.invalidate(address + 2); } switch(address >> 29) { case Area::Cached: { if(likely(cache.enable)) cache.write(address, data); return busWriteLong(address & 0x1fff'fffc, data); } case Area::Uncached: { return busWriteLong(address & 0x1fff'fffc, data); } case Area::Purge: { return cache.purge(address); } case Area::Address: { return cache.writeAddress(address, data); } case Area::Data: { return cache.writeData(address, data); } case Area::IO: { if constexpr(Accuracy::AddressErrors) { if(unlikely(address >= 0xffff'fe00 && address <= 0xffff'feff)) { return (void)(exceptions |= AddressErrorCPU); } } internalWriteByte(address & ~3 | 0, data >> 24); internalWriteByte(address & ~3 | 1, data >> 16); internalWriteByte(address & ~3 | 2, data >> 8); internalWriteByte(address & ~3 | 3, data >> 0); return; } } } ares-126/ares/component/processor/sh2/sh7604/cache.cpp000066400000000000000000000124471415063341600225020ustar00rootroot00000000000000template auto SH2::Cache::read(u32 address) -> u32 { auto read = [&](auto& line) -> u32 { if constexpr(Size == Byte) { return (line.bytes[address >> 0 & 15]); } if constexpr(Size == Word) { return bswap16(line.words[address >> 1 & 7]); } if constexpr(Size == Long) { return bswap32(line.longs[address >> 2 & 3]); } }; auto entry = address >> 4 & 63; auto tag = address >> 10 & 0x7ffff; auto lru = lrus[entry]; if(tags[Way3 | entry] == tag) { lrus[entry] = lruUpdate[3][lru]; return read(lines[Way3 | entry]); } if(tags[Way2 | entry] == tag) { lrus[entry] = lruUpdate[2][lru]; return read(lines[Way2 | entry]); } if(tags[Way1 | entry] == tag) { lrus[entry] = lruUpdate[1][lru]; return read(lines[Way1 | entry]); } if(tags[Way0 | entry] == tag) { lrus[entry] = lruUpdate[0][lru]; return read(lines[Way0 | entry]); } if((disableCode && address == self->PC - 4) || (disableData && address != self->PC - 4) ) { if constexpr(Size == Byte) { return self->busReadByte(address & 0x1fff'ffff); } if constexpr(Size == Word) { return self->busReadWord(address & 0x1fff'fffe); } if constexpr(Size == Long) { return self->busReadLong(address & 0x1fff'fffc); } } auto way = lruSelect[lru] | twoWay; auto index = way << 6 | entry; lrus[entry] = lruUpdate[way][lru]; tags[index] = tag; //marks line as valid lines[index].longs[0] = bswap32(self->busReadLong(address & 0x1fff'fff0 | 0x0)); lines[index].longs[1] = bswap32(self->busReadLong(address & 0x1fff'fff0 | 0x4)); lines[index].longs[2] = bswap32(self->busReadLong(address & 0x1fff'fff0 | 0x8)); lines[index].longs[3] = bswap32(self->busReadLong(address & 0x1fff'fff0 | 0xc)); self->step(12); return read(lines[index]); } template auto SH2::Cache::write(u32 address, u32 data) -> void { auto write = [&](auto& line) { if constexpr(Size == Byte) { line.bytes[address >> 0 & 15] = (data); } if constexpr(Size == Word) { line.words[address >> 1 & 7] = bswap16(data); } if constexpr(Size == Long) { line.longs[address >> 2 & 3] = bswap32(data); } }; auto entry = address >> 4 & 63; auto tag = address >> 10 & 0x7ffff; auto lru = lrus[entry]; if(tags[Way3 | entry] == tag) { lrus[entry] = lruUpdate[3][lru]; return write(lines[Way3 | entry]); } if(tags[Way2 | entry] == tag) { lrus[entry] = lruUpdate[2][lru]; return write(lines[Way2 | entry]); } if(tags[Way1 | entry] == tag) { lrus[entry] = lruUpdate[1][lru]; return write(lines[Way1 | entry]); } if(tags[Way0 | entry] == tag) { lrus[entry] = lruUpdate[0][lru]; return write(lines[Way0 | entry]); } } template auto SH2::Cache::readData(u32 address) -> u32 { auto& line = lines[address >> 4 & 255]; if constexpr(Size == Byte) { return (line.bytes[address >> 0 & 15]); } if constexpr(Size == Word) { return bswap16(line.words[address >> 1 & 7]); } if constexpr(Size == Long) { return bswap32(line.longs[address >> 2 & 3]); } } template auto SH2::Cache::writeData(u32 address, u32 data) -> void { auto& line = lines[address >> 4 & 255]; if constexpr(Size == Byte) { line.bytes[address >> 0 & 15] = (data); } if constexpr(Size == Word) { line.words[address >> 1 & 7] = bswap16(data); } if constexpr(Size == Long) { line.longs[address >> 2 & 3] = bswap32(data); } } auto SH2::Cache::readAddress(u32 address) -> u32 { auto entry = address >> 4 & 63; auto tag = tags[waySelect << 6 | entry]; return (tag & 0x7ffff << 10) | lrus[entry] << 4 | !bool(tag & Invalid) << 1; } auto SH2::Cache::writeAddress(u32 address, u32 data) -> void { auto invalid = address >> 2 & 1 ^ 1; auto entry = address >> 4 & 63; auto tag = address >> 10 & 0x7ffff; lrus[entry] = data >> 6 & 63; tags[waySelect << 6 | entry] = tag | invalid << 19; } auto SH2::Cache::purge(u32 address) -> void { auto entry = address >> 4 & 63; auto tag = address >> 10 & 0x7ffff; if(tags[Way0 | entry] == tag) tags[Way0 | entry] |= Invalid; if(tags[Way1 | entry] == tag) tags[Way1 | entry] |= Invalid; if(tags[Way2 | entry] == tag) tags[Way2 | entry] |= Invalid; if(tags[Way3 | entry] == tag) tags[Way3 | entry] |= Invalid; } template auto SH2::Cache::purge() -> void { for(auto index : range(64)) lrus[index] = 0; for(auto index : range(64 * Ways)) tags[index] |= Invalid; } auto SH2::Cache::power() -> void { purge(4 * 256); for(n6 n : range(64)) { if(n.bit(5) == 1 && n.bit(4) == 1 && n.bit(3) == 1) { lruSelect[n] = 0; continue; } if(n.bit(5) == 0 && n.bit(2) == 1 && n.bit(1) == 1) { lruSelect[n] = 1; continue; } if(n.bit(4) == 0 && n.bit(2) == 0 && n.bit(0) == 1) { lruSelect[n] = 2; continue; } if(n.bit(3) == 0 && n.bit(1) == 0 && n.bit(0) == 0) { lruSelect[n] = 3; continue; } lruSelect[n] = 3; //50% of entries will not match any rule: fallback to way 3 } //way 0 for(n6 n : range(64)) { n6 v = n; v.bit(5) = 0; v.bit(4) = 0; v.bit(3) = 0; lruUpdate[0][n] = v; } //way 1 for(n6 n : range(64)) { n6 v = n; v.bit(5) = 1; v.bit(2) = 0; v.bit(1) = 0; lruUpdate[1][n] = v; } //way 2 for(n6 n : range(64)) { n6 v = n; v.bit(4) = 1; v.bit(2) = 1; v.bit(0) = 0; lruUpdate[2][n] = v; } //way 3 for(n6 n : range(64)) { n6 v = n; v.bit(3) = 1; v.bit(1) = 1; v.bit(0) = 1; lruUpdate[3][n] = v; } } ares-126/ares/component/processor/sh2/sh7604/dma.cpp000066400000000000000000000040061415063341600221700ustar00rootroot00000000000000auto SH2::DMAC::run() -> void { for(auto c : range(2)) { if(chcr[c].de && !chcr[c].te && dmaor.dme && !dmaor.nmif && !dmaor.ae) { if(chcr[c].ar) { transfer(c); } else if(drcr[c] == 0) { if(dreq) transfer(c); } else if(drcr[c] == 1) { debug(unimplemented, "[SH2] DMA RXI"); } else if(drcr[c] == 2) { debug(unimplemented, "[SH2] DMA TXI"); } } } } auto SH2::DMAC::transfer(bool c) -> void { switch(chcr[c].ts) { case 0: //8-bit self->writeByte(dar[c], self->readByte(sar[c])); break; case 1: //16-bit if constexpr(Accuracy::AddressErrors) { if(unlikely(dar[c] & 1 || sar[c] & 1)) { self->exceptions |= AddressErrorDMA; break; } } self->writeWord(dar[c], self->readWord(sar[c])); break; case 2: //32-bit if constexpr(Accuracy::AddressErrors) { if(unlikely(dar[c] & 3 || sar[c] & 3)) { self->exceptions |= AddressErrorDMA; break; } } self->writeLong(dar[c], self->readLong(sar[c])); break; case 3: //32-bit x4 if constexpr(Accuracy::AddressErrors) { if(unlikely(dar[c] & 3 || sar[c] & 3)) { self->exceptions |= AddressErrorDMA; break; } } self->writeLong(dar[c] + 0, self->readLong(sar[c] + 0)); self->writeLong(dar[c] + 4, self->readLong(sar[c] + 4)); self->writeLong(dar[c] + 8, self->readLong(sar[c] + 8)); self->writeLong(dar[c] + 12, self->readLong(sar[c] + 12)); sar[c] += 16; //always increments regardless of chcr[c].sm tcr[c] -= 3; //always decrements by four instead of by one break; } static constexpr u32 ssize[] = {1, 2, 4, 0}; if(chcr[c].sm == 1) sar[c] += ssize[chcr[c].ts]; if(chcr[c].sm == 2) sar[c] -= ssize[chcr[c].ts]; static constexpr u32 dsize[] = {1, 2, 4, 16}; if(chcr[c].dm == 1) dar[c] += dsize[chcr[c].ts]; if(chcr[c].dm == 2) dar[c] -= dsize[chcr[c].ts]; if(!--tcr[c]) { chcr[c].te = 1; if(chcr[c].ie) { pendingIRQ |= 1 << c; } } } ares-126/ares/component/processor/sh2/sh7604/interrupts.cpp000066400000000000000000000017431415063341600236530ustar00rootroot00000000000000auto SH2::INTC::run() -> void { if(self->inDelaySlot()) return; if(self->frt.pendingOutputIRQ) { if(self->SR.I < iprb.frtip) { self->interrupt(iprb.frtip, vcrc.focv); self->frt.pendingOutputIRQ = 0; } } if(self->dmac.pendingIRQ) { if(self->SR.I < ipra.dmacip) { if(self->dmac.pendingIRQ & 1) { self->interrupt(ipra.dmacip, self->dmac.vcrdma[0] & 0x7f); self->dmac.pendingIRQ &= ~1; print("dreq0\n"); } else if(self->dmac.pendingIRQ & 2) { self->interrupt(ipra.dmacip, self->dmac.vcrdma[1] & 0x7f); self->dmac.pendingIRQ &= ~2; print("dreq1\n"); } } } if(self->sci.pendingTransmitEmptyIRQ) { if(self->SR.I < iprb.sciip) { self->interrupt(iprb.sciip, vcrb.stxv); self->sci.pendingTransmitEmptyIRQ = 0; } } if(self->sci.pendingReceiveFullIRQ) { if(self->SR.I < iprb.sciip) { self->interrupt(iprb.sciip, vcra.srxv); self->sci.pendingReceiveFullIRQ = 0; } } } ares-126/ares/component/processor/sh2/sh7604/io.cpp000066400000000000000000000766031415063341600220520ustar00rootroot00000000000000auto SH2::internalReadByte(u32 address, n8 data) -> n8 { switch(address) { //SMR: serial mode register case 0xffff'fe00: data.bit(0,1) = sci.smr.cks; data.bit(2) = sci.smr.mp; data.bit(3) = sci.smr.stop; data.bit(4) = sci.smr.oe; data.bit(5) = sci.smr.pe; data.bit(6) = sci.smr.chr; data.bit(7) = sci.smr.ca; return data; //BRR: bit rate register case 0xffff'fe01: data.bit(0,7) = sci.brr; return data; //SCR: serial control register case 0xffff'fe02: data.bit(0,1) = sci.scr.cke; data.bit(2) = sci.scr.teie; data.bit(3) = sci.scr.mpie; data.bit(4) = sci.scr.re; data.bit(5) = sci.scr.te; data.bit(6) = sci.scr.rie; data.bit(7) = sci.scr.tie; return data; //TDR: transmit data register case 0xffff'fe03: data.bit(0,7) = sci.tdr; return data; //SSR: serial status register case 0xffff'fe04: data.bit(0) = sci.ssr.mpbt; data.bit(1) = sci.ssr.mpb; data.bit(2) = sci.ssr.tend; data.bit(3) = sci.ssr.per; data.bit(4) = sci.ssr.fer; data.bit(5) = sci.ssr.orer; data.bit(6) = sci.ssr.rdrf; data.bit(7) = sci.ssr.tdre; return data; //RDR: receive data register case 0xffff'fe05: data.bit(0,7) = sci.rdr; return data; //TIER: timer interrupt enable register case 0xffff'fe10: data.bit(0) = 1; data.bit(1) = frt.tier.ovie; data.bit(2) = frt.tier.ocibe; data.bit(3) = frt.tier.ociae; data.bit(7) = frt.tier.icie; return data; //FTCSR: free-running timer control/status register case 0xffff'fe11: data.bit(0) = frt.ftcsr.cclra; data.bit(1) = frt.ftcsr.ovf; data.bit(2) = frt.ftcsr.ocfb; data.bit(3) = frt.ftcsr.ocfa; data.bit(7) = frt.ftcsr.icf; return data; //FRC: free-running counter case 0xffff'fe12: return frt.frc.byte(1); case 0xffff'fe13: return frt.frc.byte(0); //OCRA/OCRB: output compare registers A and B case 0xffff'fe14: return frt.tocr.ocrs == 0 ? frt.ocra.byte(1) : frt.ocrb.byte(1); case 0xffff'fe15: return frt.tocr.ocrs == 0 ? frt.ocra.byte(0) : frt.ocrb.byte(0); //TCR: timer control register case 0xffff'fe16: data.bit(0) = frt.tcr.cks.bit(0); data.bit(1) = frt.tcr.cks.bit(1); data.bit(7) = frt.tcr.iedg; return data; //TOCR: timer output compare control register case 0xffff'fe17: data.bit(0) = frt.tocr.olvlb; data.bit(1) = frt.tocr.olvla; data.bit(4) = frt.tocr.ocrs; data.bit(5) = 1; data.bit(6) = 1; data.bit(7) = 1; return data; //FICR: input capture register case 0xffff'fe18: return frt.ficr.byte(1); case 0xffff'fe19: return frt.ficr.byte(0); //IPRB: interrupt priority level setting register B case 0xffff'fe60: data.bit(0,3) = intc.iprb.frtip; data.bit(4,7) = intc.iprb.sciip; return data; case 0xffff'fe61: return data; //VCRA: vector number setting register A case 0xffff'fe62: data.bit(0,6) = intc.vcra.serv; return data; case 0xffff'fe63: data.bit(0,6) = intc.vcra.srxv; return data; //VCRB: vector number setting register B case 0xffff'fe64: data.bit(0,6) = intc.vcrb.stxv; return data; case 0xffff'fe65: data.bit(0,6) = intc.vcrb.stev; return data; //VCRC: vector number setting register C case 0xffff'fe66: data.bit(0,6) = intc.vcrc.ficv; return data; case 0xffff'fe67: data.bit(0,6) = intc.vcrc.focv; return data; //VCRD: vector number setting register D case 0xffff'fe68: data.bit(0,6) = intc.vcrd.fovv; return data; case 0xffff'fe69: return data; //DRCR0: DMA request/response selection control register 0 case 0xffff'fe71: data.bit(0,1) = dmac.drcr[0]; return data; //DRCR1: DMA request/response selection control register 1 case 0xffff'fe72: data.bit(0,1) = dmac.drcr[1]; return data; //WTCSR: watchdog timer control/status register case 0xffff'fe80: data.bit(0,2) = wdt.wtcsr.cks; data.bit(5) = wdt.wtcsr.tme; data.bit(6) = wdt.wtcsr.wtit; data.bit(7) = wdt.wtcsr.ovf; return data; //WTCNT: watchdog timer counter case 0xffff'fe81: data.bit(0,7) = wdt.wtcnt; return data; //RSTCSR: reset control/status register case 0xffff'fe83: data.bit(5) = wdt.rstcsr.rsts; data.bit(6) = wdt.rstcsr.rste; data.bit(7) = wdt.rstcsr.wovf; return data; //SBYCR: standby control register case 0xffff'fe91: data.bit(0) = sbycr.sci; data.bit(1) = sbycr.frt; data.bit(2) = sbycr.divu; data.bit(3) = sbycr.mult; data.bit(4) = sbycr.dmac; data.bit(6) = sbycr.hiz; data.bit(7) = sbycr.sby; return data; //CCR: cache control register case 0xffff'fe92: data.bit(0) = cache.enable; data.bit(1) = cache.disableCode; data.bit(2) = cache.disableData; data.bit(3) = cache.twoWay == 2; data.bit(4) = 0; //cache purge always reads as 0 data.bit(6,7) = cache.waySelect; return data; //ICR: interrupt control register case 0xffff'fee0: data.bit(0) = intc.icr.nmie; data.bit(7) = intc.icr.nmil; return data; case 0xffff'fee1: data.bit(0) = intc.icr.vecmd; return data; //IPRA: interrupt priority level setting register A case 0xffff'fee2: data.bit(0,3) = intc.ipra.dmacip; data.bit(4,7) = intc.ipra.divuip; return data; case 0xffff'fee3: data.bit(4,7) = intc.ipra.wdtip; return data; //VCRWDT: vector number setting register WDT case 0xffff'fee4: data.bit(0,6) = intc.vcrwdt.witv; return data; case 0xffff'fee5: data.bit(0,6) = intc.vcrwdt.bcmv; return data; //DVSR: divisor register case 0xffff'ff00: return divu.dvsr.byte(3); case 0xffff'ff01: return divu.dvsr.byte(2); case 0xffff'ff02: return divu.dvsr.byte(1); case 0xffff'ff03: return divu.dvsr.byte(0); //DVDNT: dividend register L for 32-bit division case 0xffff'ff04: return divu.dvdntl.byte(3); case 0xffff'ff05: return divu.dvdntl.byte(2); case 0xffff'ff06: return divu.dvdntl.byte(1); case 0xffff'ff07: return divu.dvdntl.byte(0); //DVCR: division control register case 0xffff'ff08: return data; case 0xffff'ff09: return data; case 0xffff'ff0a: return data; case 0xffff'ff0b: data.bit(0) = divu.dvcr.ovf; data.bit(1) = divu.dvcr.ovfie; return data; //VCRDIV: vector number setting register for division case 0xffff'ff0c: return data; case 0xffff'ff0d: return data; case 0xffff'ff0e: return data; case 0xffff'ff0f: data.bit(0,6) = divu.vcrdiv; return data; //DVDNTH: dividend register H case 0xffff'ff10: case 0xffff'ff18: return divu.dvdnth.byte(3); case 0xffff'ff11: case 0xffff'ff19: return divu.dvdnth.byte(2); case 0xffff'ff12: case 0xffff'ff1a: return divu.dvdnth.byte(1); case 0xffff'ff13: case 0xffff'ff1b: return divu.dvdnth.byte(0); //DVDNTL: dividend register L case 0xffff'ff14: case 0xffff'ff1c: return divu.dvdntl.byte(3); case 0xffff'ff15: case 0xffff'ff1d: return divu.dvdntl.byte(2); case 0xffff'ff16: case 0xffff'ff1e: return divu.dvdntl.byte(1); case 0xffff'ff17: case 0xffff'ff1f: return divu.dvdntl.byte(0); //BARA: break address register A case 0xffff'ff40: return ubc.bara.byte(3); case 0xffff'ff41: return ubc.bara.byte(2); case 0xffff'ff42: return ubc.bara.byte(1); case 0xffff'ff43: return ubc.bara.byte(0); //BAMRA: break address mask register A case 0xffff'ff44: return ubc.bamra.byte(3); case 0xffff'ff45: return ubc.bamra.byte(2); case 0xffff'ff46: return ubc.bamra.byte(1); case 0xffff'ff47: return ubc.bamra.byte(0); //BBRA: break bus register A case 0xffff'ff48: return data; case 0xffff'ff49: data.bit(0,1) = ubc.bbra.sza; data.bit(2,3) = ubc.bbra.rwa; data.bit(4,5) = ubc.bbra.ida; data.bit(6,7) = ubc.bbra.cpa; return data; //BARB: break address register B case 0xffff'ff60: return ubc.barb.byte(3); case 0xffff'ff61: return ubc.barb.byte(2); case 0xffff'ff62: return ubc.barb.byte(1); case 0xffff'ff63: return ubc.barb.byte(0); //BAMRB: break address mask register B case 0xffff'ff64: return ubc.bamrb.byte(3); case 0xffff'ff65: return ubc.bamrb.byte(2); case 0xffff'ff66: return ubc.bamrb.byte(1); case 0xffff'ff67: return ubc.bamrb.byte(0); //BBRB: break bus register B case 0xffff'ff68: return data; case 0xffff'ff69: data.bit(0,1) = ubc.bbrb.szb; data.bit(2,3) = ubc.bbrb.rwb; data.bit(4,5) = ubc.bbrb.idb; data.bit(6,7) = ubc.bbrb.cpb; return data; //BDRB: break data register B case 0xffff'ff70: return ubc.bdrb.byte(3); case 0xffff'ff71: return ubc.bdrb.byte(2); case 0xffff'ff72: return ubc.bdrb.byte(1); case 0xffff'ff73: return ubc.bdrb.byte(0); //BDMRB: break data mask register B case 0xffff'ff74: return ubc.bdmrb.byte(3); case 0xffff'ff75: return ubc.bdmrb.byte(2); case 0xffff'ff76: return ubc.bdmrb.byte(1); case 0xffff'ff77: return ubc.bdmrb.byte(0); //BRCR: break control register case 0xffff'ff78: data.bit(2) = ubc.brcr.pcba; data.bit(4) = ubc.brcr.umd; data.bit(5) = ubc.brcr.ebbe; data.bit(6) = ubc.brcr.cmfpa; data.bit(7) = ubc.brcr.cmfca; return data; case 0xffff'ff79: data.bit(2) = ubc.brcr.pcbb; data.bit(3) = ubc.brcr.dbeb; data.bit(4) = ubc.brcr.seq; data.bit(6) = ubc.brcr.cmfpb; data.bit(7) = ubc.brcr.cmfcb; return data; //SAR0: DMA source address register 0 case 0xffff'ff80: return dmac.sar[0].byte(3); case 0xffff'ff81: return dmac.sar[0].byte(2); case 0xffff'ff82: return dmac.sar[0].byte(1); case 0xffff'ff83: return dmac.sar[0].byte(0); //DAR0: DMA destination address register 0 case 0xffff'ff84: return dmac.dar[0].byte(3); case 0xffff'ff85: return dmac.dar[0].byte(2); case 0xffff'ff86: return dmac.dar[0].byte(1); case 0xffff'ff87: return dmac.dar[0].byte(0); //TCR0: DMA transfer count register 0 case 0xffff'ff88: return data; case 0xffff'ff89: return dmac.tcr[0].byte(2); case 0xffff'ff8a: return dmac.tcr[0].byte(1); case 0xffff'ff8b: return dmac.tcr[0].byte(0); //CHCR0: DMA channel control register 0 case 0xffff'ff8c: return data; case 0xffff'ff8d: return data; case 0xffff'ff8e: data.bit(0) = dmac.chcr[0].am; data.bit(1) = dmac.chcr[0].ar; data.bit(2) = dmac.chcr[0].ts.bit(0); data.bit(3) = dmac.chcr[0].ts.bit(1); data.bit(4) = dmac.chcr[0].sm.bit(0); data.bit(5) = dmac.chcr[0].sm.bit(1); data.bit(6) = dmac.chcr[0].dm.bit(0); data.bit(7) = dmac.chcr[0].dm.bit(1); return data; case 0xffff'ff8f: data.bit(0) = dmac.chcr[0].de; data.bit(1) = dmac.chcr[0].te; data.bit(2) = dmac.chcr[0].ie; data.bit(3) = dmac.chcr[0].ta; data.bit(4) = dmac.chcr[0].tb; data.bit(5) = dmac.chcr[0].dl; data.bit(6) = dmac.chcr[0].ds; data.bit(7) = dmac.chcr[0].al; return data; //SAR1: DMA source address register 1 case 0xffff'ff90: return dmac.sar[1].byte(3); case 0xffff'ff91: return dmac.sar[1].byte(2); case 0xffff'ff92: return dmac.sar[1].byte(1); case 0xffff'ff93: return dmac.sar[1].byte(0); //DAR1: DMA destination address register 1 case 0xffff'ff94: return dmac.dar[1].byte(3); case 0xffff'ff95: return dmac.dar[1].byte(2); case 0xffff'ff96: return dmac.dar[1].byte(1); case 0xffff'ff97: return dmac.dar[1].byte(0); //TCR1: DMA transfer count register 1 case 0xffff'ff98: return data; case 0xffff'ff99: return dmac.tcr[1].byte(2); case 0xffff'ff9a: return dmac.tcr[1].byte(1); case 0xffff'ff9b: return dmac.tcr[1].byte(0); //CHCR1: DMA channel control register 1 case 0xffff'ff9c: return data; case 0xffff'ff9d: return data; case 0xffff'ff9e: data.bit(0) = dmac.chcr[1].am; data.bit(1) = dmac.chcr[1].ar; data.bit(2) = dmac.chcr[1].ts.bit(0); data.bit(3) = dmac.chcr[1].ts.bit(1); data.bit(4) = dmac.chcr[1].sm.bit(0); data.bit(5) = dmac.chcr[1].sm.bit(1); data.bit(6) = dmac.chcr[1].dm.bit(0); data.bit(7) = dmac.chcr[1].dm.bit(1); return data; case 0xffff'ff9f: data.bit(0) = dmac.chcr[1].de; data.bit(1) = dmac.chcr[1].te; data.bit(2) = dmac.chcr[1].ie; data.bit(3) = dmac.chcr[1].ta; data.bit(4) = dmac.chcr[1].tb; data.bit(5) = dmac.chcr[1].dl; data.bit(6) = dmac.chcr[1].ds; data.bit(7) = dmac.chcr[1].al; return data; //VCRDMA0: DMA vector number register 0 case 0xffff'ffa0: return data; case 0xffff'ffa1: return data; case 0xffff'ffa2: return data; case 0xffff'ffa3: return dmac.vcrdma[0]; //VCRDMA1: DMA vector number register 1 case 0xffff'ffa8: return data; case 0xffff'ffa9: return data; case 0xffff'ffaa: return data; case 0xffff'ffab: return dmac.vcrdma[1]; //DMAOR: DMA operation register case 0xffff'ffb0: return data; case 0xffff'ffb1: return data; case 0xffff'ffb2: return data; case 0xffff'ffb3: data.bit(0) = dmac.dmaor.dme; data.bit(1) = dmac.dmaor.nmif; data.bit(2) = dmac.dmaor.ae; data.bit(3) = dmac.dmaor.pr; return data; //BCR1: bus control register 1 case 0xffff'ffe0: return data; case 0xffff'ffe1: return data; case 0xffff'ffe2: data.bit(0,1) = bsc.bcr1.ahlw; data.bit(2) = bsc.bcr1.pshr; data.bit(3) = bsc.bcr1.bstrom; data.bit(4) = bsc.bcr1.a2endian; data.bit(7) = bsc.bcr1.master; return data; case 0xffff'ffe3: data.bit(0,2) = bsc.bcr1.dram; data.bit(4,5) = bsc.bcr1.a0lw; data.bit(6,7) = bsc.bcr1.a1lw; return data; //BCR2: bus control register 2 case 0xffff'ffe4: return data; case 0xffff'ffe5: return data; case 0xffff'ffe6: return data; case 0xffff'ffe7: data.bit(2,3) = bsc.bcr2.a1sz; data.bit(4,5) = bsc.bcr2.a2sz; data.bit(6,7) = bsc.bcr2.a3sz; return data; //WCR: wait control register case 0xffff'ffe8: return data; case 0xffff'ffe9: return data; case 0xffff'ffea: data.bit(0,1) = bsc.wcr.iw0; data.bit(2,3) = bsc.wcr.iw1; data.bit(4,5) = bsc.wcr.iw2; data.bit(6,7) = bsc.wcr.iw3; return data; case 0xffff'ffeb: data.bit(0,1) = bsc.wcr.w0; data.bit(2,3) = bsc.wcr.w1; data.bit(4,5) = bsc.wcr.w2; data.bit(6,7) = bsc.wcr.w3; return data; //MCR: individual memory control register case 0xffff'ffec: return data; case 0xffff'ffed: return data; case 0xffff'ffee: data.bit(1) = bsc.mcr.rasd; data.bit(2) = bsc.mcr.be; data.bit(3) = bsc.mcr.tras.bit(0); data.bit(4) = bsc.mcr.tras.bit(1); data.bit(5) = bsc.mcr.trwl; data.bit(6) = bsc.mcr.rcd; data.bit(7) = bsc.mcr.trp; return data; case 0xffff'ffef: data.bit(2) = bsc.mcr.rmode; data.bit(3) = bsc.mcr.rfsh; data.bit(4) = bsc.mcr.amx.bit(0); data.bit(5) = bsc.mcr.amx.bit(1); data.bit(6) = bsc.mcr.sz; data.bit(7) = bsc.mcr.amx.bit(2); return data; //RTCSR: refresh timer control/status register case 0xffff'fff0: return data; case 0xffff'fff1: return data; case 0xffff'fff2: return data; case 0xffff'fff3: data.bit(3,5) = bsc.rtcsr.cks; data.bit(6) = bsc.rtcsr.cmie; data.bit(7) = bsc.rtcsr.cmf; return data; //RTCNT: refresh timer counter case 0xffff'fff4: return data; case 0xffff'fff5: return data; case 0xffff'fff6: return data; case 0xffff'fff7: data.bit(0,7) = bsc.rtcnt; return data; //RTCOR: refresh time constant register case 0xffff'fff8: return data; case 0xffff'fff9: return data; case 0xffff'fffa: return data; case 0xffff'fffb: data.bit(0,7) = bsc.rtcor; return data; } debug(unusual, "[SH2] read(0x", hex(address, 8L), ")"); return data; } auto SH2::internalWriteByte(u32 address, n8 data) -> void { switch(address) { //SMR: serial mode register case 0xffff'fe00: sci.smr.cks = data.bit(0,1); sci.smr.mp = data.bit(2); sci.smr.stop = data.bit(3); sci.smr.oe = data.bit(4); sci.smr.pe = data.bit(5); sci.smr.chr = data.bit(6); sci.smr.ca = data.bit(7); return; //BRR: bit rate register case 0xffff'fe01: sci.brr = data.bit(0,7); return; //SCR: serial control register case 0xffff'fe02: { bool te = sci.scr.te; sci.scr.cke = data.bit(0,1); sci.scr.teie = data.bit(2); sci.scr.mpie = data.bit(3); sci.scr.re = data.bit(4); sci.scr.te = data.bit(5); sci.scr.rie = data.bit(6); sci.scr.tie = data.bit(7); if(!te && sci.scr.te) sci.run(); return; } //TDR: transmit data register case 0xffff'fe03: sci.tdr = data.bit(0,7); return; //SSR: serial status register case 0xffff'fe04: sci.ssr.mpbt = data.bit(0); //sci.ssr.mpb = data.bit(1) = readonly; //sci.ssr.tend = data.bit(2) = readonly; sci.ssr.per &= data.bit(3); sci.ssr.fer &= data.bit(4); sci.ssr.orer &= data.bit(5); sci.ssr.rdrf &= data.bit(6); sci.ssr.tdre &= data.bit(7); if(sci.scr.te) sci.run(); return; //RDR: receive data register case 0xffff'fe05: sci.rdr = data.bit(0,7); return; //TIER: timer interrupt enable register case 0xffff'fe10: frt.tier.ovie = data.bit(1); frt.tier.ocibe = data.bit(2); frt.tier.ociae = data.bit(3); frt.tier.icie = data.bit(7); return; //FTCSR: free-running timer control/status register case 0xffff'fe11: frt.ftcsr.cclra = data.bit(0); frt.ftcsr.ovf &= data.bit(1); frt.ftcsr.ocfb &= data.bit(2); frt.ftcsr.ocfa &= data.bit(3); frt.ftcsr.icf &= data.bit(7); return; //FRC: free-running counter case 0xffff'fe12: frt.frc.byte(1) = data; return; case 0xffff'fe13: frt.frc.byte(0) = data; return; //OCRA/OCRB: output compare registers A and B case 0xffff'fe14: if(frt.tocr.ocrs == 0) frt.ocra.byte(1) = data; if(frt.tocr.ocrs == 1) frt.ocrb.byte(1) = data; return; case 0xffff'fe15: if(frt.tocr.ocrs == 0) frt.ocra.byte(0) = data; if(frt.tocr.ocrs == 1) frt.ocrb.byte(0) = data; return; //TCR: timer control register case 0xffff'fe16: frt.tcr.cks = data.bit(0,1); frt.tcr.iedg = data.bit(2); return; //TOCR: timer output compare control register case 0xffff'fe17: frt.tocr.olvlb = data.bit(0); frt.tocr.olvla = data.bit(1); frt.tocr.ocrs = data.bit(4); return; //FICR: input capture register (read-only) case 0xffff'fe18: return; case 0xffff'fe19: return; //IPRB: interrupt priority level setting register B case 0xffff'fe60: intc.iprb.frtip = data.bit(0,3); intc.iprb.sciip = data.bit(4,7); return; case 0xffff'fe61: return; //VCRA: vector number setting register A case 0xffff'fe62: intc.vcra.serv = data.bit(0,6); return; case 0xffff'fe63: intc.vcra.srxv = data.bit(0,6); return; //VCRB: vector number setting register B case 0xffff'fe64: intc.vcrb.stxv = data.bit(0,6); return; case 0xffff'fe65: intc.vcrb.stev = data.bit(0,6); return; //VCRC: vector number setting register C case 0xffff'fe66: intc.vcrc.ficv = data.bit(0,6); return; case 0xffff'fe67: intc.vcrc.focv = data.bit(0,6); return; //VCRD: vector number setting register D case 0xffff'fe68: intc.vcrd.fovv = data.bit(0,6); return; case 0xffff'fe69: return; //DRCR0: DMA request/response selection control register 0 case 0xffff'fe71: dmac.drcr[0] = data.bit(0,1); return; //DRCR1: DMA request/response selection control register 1 case 0xffff'fe72: dmac.drcr[1] = data.bit(0,1); return; //WTCSR: watchdog timer control/status register case 0xffff'fe80: wdt.wtcsr.cks = data.bit(0,2); wdt.wtcsr.tme = data.bit(5); wdt.wtcsr.wtit = data.bit(6); wdt.wtcsr.ovf &= data.bit(7); return; //WTCNT: watchdog timer counter case 0xffff'fe81: wdt.wtcnt = data.bit(0,7); return; //RSTCSR: reset control/status register case 0xffff'fe83: wdt.rstcsr.rsts = data.bit(5); wdt.rstcsr.rste = data.bit(6); wdt.rstcsr.wovf = data.bit(7); return; //SBYCR: standby control register case 0xffff'fe91: sbycr.sci = data.bit(0); sbycr.frt = data.bit(1); sbycr.divu = data.bit(2); sbycr.mult = data.bit(3); sbycr.dmac = data.bit(4); sbycr.hiz = data.bit(6); sbycr.sby = data.bit(7); return; //CCR: cache control register case 0xffff'fe92: cache.enable = data.bit(0); cache.disableCode = data.bit(1); cache.disableData = data.bit(2); cache.twoWay = data.bit(3) ? 2 : 0; cache.waySelect = data.bit(6,7); if(data.bit(3)) cache.purge<2>(); //purge ways 0-1 if(data.bit(4)) cache.purge<4>(); //purge ways 0-3 return; //ICR: interrupt control register case 0xffff'fee0: intc.icr.nmie = data.bit(0); //intc.icr.nmil = data.bit(7) = readonly; return; case 0xffff'fee1: intc.icr.vecmd = data.bit(0); return; //IPRA: interrupt priority level setting register A case 0xffff'fee2: intc.ipra.dmacip = data.bit(0,3); intc.ipra.divuip = data.bit(4,7); return; case 0xffff'fee3: intc.ipra.wdtip = data.bit(4,7); return; //VCRWDT: vector number setting register WDT case 0xffff'fee4: intc.vcrwdt.witv = data.bit(0,6); return; case 0xffff'fee5: intc.vcrwdt.bcmv = data.bit(0,6); return; //DVSR: divisor register case 0xffff'ff00: divu.dvsr.byte(3) = data; return; case 0xffff'ff01: divu.dvsr.byte(2) = data; return; case 0xffff'ff02: divu.dvsr.byte(1) = data; return; case 0xffff'ff03: divu.dvsr.byte(0) = data; return; //DVDNT: dividend register L for 32-bit division case 0xffff'ff04: divu.dvdntl.byte(3) = data; return; case 0xffff'ff05: divu.dvdntl.byte(2) = data; return; case 0xffff'ff06: divu.dvdntl.byte(1) = data; return; case 0xffff'ff07: divu.dvdntl.byte(0) = data; { if(divu.dvsr) { s32 dividend = (s32)divu.dvdntl; s32 quotient = dividend / (s32)divu.dvsr; s32 remainder = dividend % (s32)divu.dvsr; divu.dvdntl = quotient; divu.dvdnth = remainder; } else { //division by zero divu.dvdntl = +0x7fff'ffff; divu.dvcr.ovf = 1; } return; } //DVCR: division control register case 0xffff'ff08: return; case 0xffff'ff09: return; case 0xffff'ff0a: return; case 0xffff'ff0b: divu.dvcr.ovf = data.bit(0); divu.dvcr.ovfie = data.bit(1); return; //VCRDIV: vector number setting register for division case 0xffff'ff0c: return; case 0xffff'ff0d: return; case 0xffff'ff0e: return; case 0xffff'ff0f: divu.vcrdiv = data.bit(0,6); return; //DVDNTH: dividend register H case 0xffff'ff10: case 0xffff'ff18: divu.dvdnth.byte(3) = data; return; case 0xffff'ff11: case 0xffff'ff19: divu.dvdnth.byte(2) = data; return; case 0xffff'ff12: case 0xffff'ff1a: divu.dvdnth.byte(1) = data; return; case 0xffff'ff13: case 0xffff'ff1b: divu.dvdnth.byte(0) = data; return; //DVDNTL: dividend register L case 0xffff'ff14: case 0xffff'ff1c: divu.dvdntl.byte(3) = data; return; case 0xffff'ff15: case 0xffff'ff1d: divu.dvdntl.byte(2) = data; return; case 0xffff'ff16: case 0xffff'ff1e: divu.dvdntl.byte(1) = data; return; case 0xffff'ff17: case 0xffff'ff1f: divu.dvdntl.byte(0) = data; { if(divu.dvsr) { s64 dividend = (s64)divu.dvdnth << 32 | (s64)divu.dvdntl << 0; s64 quotient = dividend / (s32)divu.dvsr; s32 remainder = dividend % (s32)divu.dvsr; divu.dvdntl = quotient; divu.dvdnth = remainder; if(quotient > +0x7fff'7fffLL) { //overflow divu.dvdntl = +0x7fff'ffff; divu.dvcr.ovf = 1; } if(quotient < -0x8000'0000LL) { //underflow divu.dvdntl = -0x8000'0000; divu.dvcr.ovf = 1; } } else { //division by zero divu.dvdntl = +0x7fff'ffff; divu.dvcr.ovf = 1; } return; } //BARA: break address register A case 0xffff'ff40: ubc.bara.byte(3) = data; return; case 0xffff'ff41: ubc.bara.byte(2) = data; return; case 0xffff'ff42: ubc.bara.byte(1) = data; return; case 0xffff'ff43: ubc.bara.byte(0) = data; return; //BAMRA: break address mask register A case 0xffff'ff44: ubc.bamra.byte(3) = data; return; case 0xffff'ff45: ubc.bamra.byte(2) = data; return; case 0xffff'ff46: ubc.bamra.byte(1) = data; return; case 0xffff'ff47: ubc.bamra.byte(0) = data; return; //BBRA: break bus register A case 0xffff'ff48: return; case 0xffff'ff49: ubc.bbra.sza = data.bit(0,1); ubc.bbra.rwa = data.bit(2,3); ubc.bbra.ida = data.bit(4,5); ubc.bbra.cpa = data.bit(6,7); return; //BARB: break address register B case 0xffff'ff60: ubc.barb.byte(3) = data; return; case 0xffff'ff61: ubc.barb.byte(2) = data; return; case 0xffff'ff62: ubc.barb.byte(1) = data; return; case 0xffff'ff63: ubc.barb.byte(0) = data; return; //BAMRB: break address mask register B case 0xffff'ff64: ubc.bamrb.byte(3) = data; return; case 0xffff'ff65: ubc.bamrb.byte(2) = data; return; case 0xffff'ff66: ubc.bamrb.byte(1) = data; return; case 0xffff'ff67: ubc.bamrb.byte(0) = data; return; //BBRB: break bus register B case 0xffff'ff68: return; case 0xffff'ff69: ubc.bbrb.szb = data.bit(0,1); ubc.bbrb.rwb = data.bit(2,3); ubc.bbrb.idb = data.bit(4,5); ubc.bbrb.cpb = data.bit(6,7); return; //BDRB: break data register B case 0xffff'ff70: ubc.bdrb.byte(3) = data; return; case 0xffff'ff71: ubc.bdrb.byte(2) = data; return; case 0xffff'ff72: ubc.bdrb.byte(1) = data; return; case 0xffff'ff73: ubc.bdrb.byte(0) = data; return; //BDMRB: break data mask register B case 0xffff'ff74: ubc.bdmrb.byte(3) = data; return; case 0xffff'ff75: ubc.bdmrb.byte(2) = data; return; case 0xffff'ff76: ubc.bdmrb.byte(1) = data; return; case 0xffff'ff77: ubc.bdmrb.byte(0) = data; return; //BRCR: break control register case 0xffff'ff78: ubc.brcr.pcba = data.bit(2); ubc.brcr.umd = data.bit(4); ubc.brcr.ebbe = data.bit(5); ubc.brcr.cmfpa = data.bit(6); ubc.brcr.cmfca = data.bit(7); return; case 0xffff'ff79: ubc.brcr.pcbb = data.bit(2); ubc.brcr.dbeb = data.bit(3); ubc.brcr.seq = data.bit(4); ubc.brcr.cmfpb = data.bit(6); ubc.brcr.cmfcb = data.bit(7); return; //SAR0: DMA source address register 0 case 0xffff'ff80: dmac.sar[0].byte(3) = data; return; case 0xffff'ff81: dmac.sar[0].byte(2) = data; return; case 0xffff'ff82: dmac.sar[0].byte(1) = data; return; case 0xffff'ff83: dmac.sar[0].byte(0) = data; return; //DAR0: DMA destination address register 0 case 0xffff'ff84: dmac.dar[0].byte(3) = data; return; case 0xffff'ff85: dmac.dar[0].byte(2) = data; return; case 0xffff'ff86: dmac.dar[0].byte(1) = data; return; case 0xffff'ff87: dmac.dar[0].byte(0) = data; return; //TCR0: DMA transfer count register 0 case 0xffff'ff88: return; case 0xffff'ff89: dmac.tcr[0].byte(2) = data; return; case 0xffff'ff8a: dmac.tcr[0].byte(1) = data; return; case 0xffff'ff8b: dmac.tcr[0].byte(0) = data; return; //CHCR0: DMA channel control register 0 case 0xffff'ff8c: return; case 0xffff'ff8d: return; case 0xffff'ff8e: dmac.chcr[0].am = data.bit(0); dmac.chcr[0].ar = data.bit(1); dmac.chcr[0].ts = data.bit(2,3); dmac.chcr[0].sm = data.bit(4,5); dmac.chcr[0].dm = data.bit(6,7); return; case 0xffff'ff8f: dmac.chcr[0].de = data.bit(0); dmac.chcr[0].te &= data.bit(1); dmac.chcr[0].ie = data.bit(2); dmac.chcr[0].ta = data.bit(3); dmac.chcr[0].tb = data.bit(4); dmac.chcr[0].dl = data.bit(5); dmac.chcr[0].ds = data.bit(6); dmac.chcr[0].al = data.bit(7); return; //SAR1: DMA source address register 1 case 0xffff'ff90: dmac.sar[1].byte(3) = data; return; case 0xffff'ff91: dmac.sar[1].byte(2) = data; return; case 0xffff'ff92: dmac.sar[1].byte(1) = data; return; case 0xffff'ff93: dmac.sar[1].byte(0) = data; return; //DAR1: DMA destination address register 1 case 0xffff'ff94: dmac.dar[1].byte(3) = data; return; case 0xffff'ff95: dmac.dar[1].byte(2) = data; return; case 0xffff'ff96: dmac.dar[1].byte(1) = data; return; case 0xffff'ff97: dmac.dar[1].byte(0) = data; return; //TCR1: DMA transfer count register 1 case 0xffff'ff98: return; case 0xffff'ff99: dmac.tcr[1].byte(2) = data; return; case 0xffff'ff9a: dmac.tcr[1].byte(1) = data; return; case 0xffff'ff9b: dmac.tcr[1].byte(0) = data; return; //CHCR1: DMA channel control register 1 case 0xffff'ff9c: return; case 0xffff'ff9d: return; case 0xffff'ff9e: dmac.chcr[1].am = data.bit(0); dmac.chcr[1].ar = data.bit(1); dmac.chcr[1].ts = data.bit(2,3); dmac.chcr[1].sm = data.bit(4,5); dmac.chcr[1].dm = data.bit(6,7); return; case 0xffff'ff9f: dmac.chcr[1].de = data.bit(0); dmac.chcr[1].te &= data.bit(1); dmac.chcr[1].ie = data.bit(2); dmac.chcr[1].ta = data.bit(3); dmac.chcr[1].tb = data.bit(4); dmac.chcr[1].dl = data.bit(5); dmac.chcr[1].ds = data.bit(6); dmac.chcr[1].al = data.bit(7); return; //VCRDMA0: DMA vector number register 0 case 0xffff'ffa0: return; case 0xffff'ffa1: return; case 0xffff'ffa2: return; case 0xffff'ffa3: dmac.vcrdma[0] = data.bit(0,7); return; //VCRDMA1: DMA vector number register 1 case 0xffff'ffa8: return; case 0xffff'ffa9: return; case 0xffff'ffaa: return; case 0xffff'ffab: dmac.vcrdma[1] = data.bit(0,7); return; //DMAOR: DMA operation register case 0xffff'ffb0: return; case 0xffff'ffb1: return; case 0xffff'ffb2: return; case 0xffff'ffb3: dmac.dmaor.dme = data.bit(0); dmac.dmaor.nmif &= data.bit(1); dmac.dmaor.ae &= data.bit(2); dmac.dmaor.pr = data.bit(3); return; //BCR1: bus control register 1 case 0xffff'ffe0: return; case 0xffff'ffe1: return; case 0xffff'ffe2: bsc.bcr1.ahlw = data.bit(0,1); bsc.bcr1.pshr = data.bit(2); bsc.bcr1.bstrom = data.bit(3); bsc.bcr1.a2endian = data.bit(4); bsc.bcr1.master = data.bit(7); return; case 0xffff'ffe3: bsc.bcr1.dram = data.bit(0,2); bsc.bcr1.a0lw = data.bit(4,5); bsc.bcr1.a1lw = data.bit(6,7); return; //BCR2: bus control register 2 case 0xffff'ffe4: return; case 0xffff'ffe5: return; case 0xffff'ffe6: return; case 0xffff'ffe7: bsc.bcr2.a1sz = data.bit(2,3); bsc.bcr2.a2sz = data.bit(4,5); bsc.bcr2.a3sz = data.bit(6,7); return; //WCR: wait control register case 0xffff'ffe8: return; case 0xffff'ffe9: return; case 0xffff'ffea: bsc.wcr.iw0 = data.bit(0,1); bsc.wcr.iw1 = data.bit(2,3); bsc.wcr.iw2 = data.bit(4,5); bsc.wcr.iw3 = data.bit(6,7); return; case 0xffff'ffeb: bsc.wcr.w0 = data.bit(0,1); bsc.wcr.w1 = data.bit(2,3); bsc.wcr.w2 = data.bit(4,5); bsc.wcr.w3 = data.bit(6,7); return; //MCR: individual memory control register case 0xffff'ffec: return; case 0xffff'ffed: return; case 0xffff'ffee: bsc.mcr.rasd = data.bit(1); bsc.mcr.be = data.bit(2); bsc.mcr.tras = data.bit(3,4); bsc.mcr.trwl = data.bit(5); bsc.mcr.rcd = data.bit(6); bsc.mcr.trp = data.bit(7); return; case 0xffff'ffef: bsc.mcr.rmode = data.bit(2); bsc.mcr.rfsh = data.bit(3); bsc.mcr.amx.bit(0) = data.bit(4); bsc.mcr.amx.bit(1) = data.bit(5); bsc.mcr.sz = data.bit(6); bsc.mcr.amx.bit(2) = data.bit(7); return; //RTCSR: refresh timer control/status register case 0xffff'fff0: return; case 0xffff'fff1: return; case 0xffff'fff2: return; case 0xffff'fff3: bsc.rtcsr.cks = data.bit(3,5); bsc.rtcsr.cmie = data.bit(6); bsc.rtcsr.cmf = data.bit(7); return; //RTCNT: refresh timer counter case 0xffff'fff4: return; case 0xffff'fff5: return; case 0xffff'fff6: return; case 0xffff'fff7: bsc.rtcnt = data.bit(0,7); return; //RTCOR: refresh tim constant register case 0xffff'fff8: return; case 0xffff'fff9: return; case 0xffff'fffa: return; case 0xffff'fffb: bsc.rtcor = data.bit(0,7); return; } debug(unusual, "[SH2] write(0x", hex(address, 8L), ", 0x", hex(data, 2L), ")"); } ares-126/ares/component/processor/sh2/sh7604/serial.cpp000066400000000000000000000005471415063341600227140ustar00rootroot00000000000000auto SH2::SCI::run() -> void { if(!link) return; //no SH2 paired if(!link->sci.scr.re) return; //receiver not enabled if(ssr.tdre) return; //data not ready link->sci.rdr = tdr; link->sci.ssr.rdrf = 1; ssr.tdre = 1; if(scr.tie) { pendingTransmitEmptyIRQ = 1; } if(link->sci.scr.rie) { link->sci.pendingReceiveFullIRQ = 1; } } ares-126/ares/component/processor/sh2/sh7604/sh7604.cpp000066400000000000000000000002221415063341600223560ustar00rootroot00000000000000#include "bus.cpp" #include "io.cpp" #include "cache.cpp" #include "interrupts.cpp" #include "dma.cpp" #include "serial.cpp" #include "timer.cpp" ares-126/ares/component/processor/sh2/sh7604/sh7604.hpp000066400000000000000000000302521415063341600223710ustar00rootroot00000000000000#pragma once //Hitachi SH7604 //struct SH2 { enum : u32 { Byte, Word, Long }; struct Area { enum : u32 { Cached = 0, Uncached = 1, Purge = 2, Address = 3, Data = 6, IO = 7, };}; //bus.cpp auto readByte(u32 address) -> u32; auto readWord(u32 address) -> u32; auto readLong(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; auto writeLong(u32 address, u32 data) -> void; //io.cpp auto internalReadByte(u32 address, n8 data = 0) -> n8; auto internalWriteByte(u32 address, n8 data) -> void; struct Cache { maybe self; //cache.cpp template auto read(u32 address) -> u32; template auto write(u32 address, u32 data) -> void; template auto readData(u32 address) -> u32; template auto writeData(u32 address, u32 data) -> void; auto readAddress(u32 address) -> u32; auto writeAddress(u32 address, u32 data) -> void; auto purge(u32 address) -> void; template auto purge() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; enum : u32 { Way0 = 0 * 64, Way1 = 1 * 64, Way2 = 2 * 64, Way3 = 3 * 64, Invalid = 1 << 19, }; union Line { u8 bytes[16]; u16 words[8]; u32 longs[4]; }; u8 lrus[64]; u32 tags[4 * 64]; Line lines[4 * 64]; n1 enable; n1 disableCode; n1 disableData; n2 twoWay; //0 = 4-way, 2 = 2-way (forces ways 2 and 3) n2 waySelect; //internal: n2 lruSelect[64]; n6 lruUpdate[4][64]; } cache; //interrupt controller struct INTC { maybe self; //interrupts.cpp auto run() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct ICR { //interrupt control register n1 vecmd; //IRL interrupt vector mode select n1 nmie; //NMI edge select n1 nmil; //NMI input level } icr; struct IPRA { //interrupt priority level setting register A n4 wdtip; //WDT interrupt priority n4 dmacip; //DMAC interrupt priority n4 divuip; //DIVU interrupt priority } ipra; struct IPRB { //interrupt priority level setting register B n4 frtip; //FRT interrupt priority n4 sciip; //SCI interrupt priority } iprb; struct VCRA { //vector number setting register A n7 srxv; //SCI receive data full interrupt vector number n7 serv; //SCI receive error interrupt vector number } vcra; struct VCRB { //vector number setting register B n7 stev; //SCI transmit end interrupt vector number n7 stxv; //SCI transmit data empty interrupt vector number } vcrb; struct VCRC { //vector number setting register C n7 focv; //FRT output compare interrupt vector number n7 ficv; //FRT input capture interrupt vector number } vcrc; struct VCRD { //vector number setting register D n7 fovv; //FRT overflow interrupt vector number } vcrd; struct VCRWDT { //vector number setting register WDT n4 bcmv; //BSC compare match interrupt vector number n4 witv; //WDT interval interrupt vector number } vcrwdt; } intc; //DMA controller struct DMAC { maybe self; //dma.cpp auto run() -> void; auto transfer(bool c) -> void; //serialization.cpp auto serialize(serializer&) -> void; n32 sar[2]; //DMA source address registers n32 dar[2]; //DMA destination address registers n24 tcr[2]; //DMA transfer count registers struct CHCR { //DMA channel control registers n1 de; //DMA enable n1 te; //transfer end flag n1 ie; //interrupt enable n1 ta; //transfer address mode n1 tb; //transfer bus mode n1 dl; //DREQn level bit n1 ds; //DREQn select bit n1 al; //acknowledge level bit n1 am; //acknowledge/transfer mode bit n1 ar; //auto request mode bit n2 ts; //transfer size n2 sm; //source address mode n2 dm; //destination address mode } chcr[2]; n8 vcrdma[2]; //DMA vector number registers n2 drcr[2]; //DMA request/response selection control registers struct DMAOR { //DMA operation register n1 dme; //DMA master enable bit n1 nmif; //NMI flag bit n1 ae; //address error flag bit n1 pr; //priority mode bit } dmaor; //internal: n1 dreq; n2 pendingIRQ; } dmac; //serial communication interface struct SCI { maybe self; maybe link; //serial.cpp auto run() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct SMR { //serial mode register n2 cks; //clock select n1 mp; //multi-processor mode n1 stop; //stop bit length n1 oe; //parity mode n1 pe; //parity enable n1 chr; //character length n1 ca; //communication mode } smr; struct SCR { //serial control register n2 cke; //clock enable n1 teie; //transmit end interrupt enable n1 mpie; //multi-processor interrupt enable n1 re; //receive enable n1 te; //transmit enable n1 rie; //receive interrupt enable n1 tie; //transmit interrupt enable } scr; struct SSR { //serial status register n1 mpbt; //multi-processor bit transfer n1 mpb; //multi-processor bit n1 tend = 1; //transmit end n1 per; //parity error n1 fer; //framing error n1 orer; //overrun error n1 rdrf; //receive data register full n1 tdre; //transmit data register empty } ssr; n8 brr = 0xff; //bit rate register n8 tdr = 0xff; //transmit data register n8 rdr = 0x00; //receive data register //internal: n1 pendingTransmitEmptyIRQ; n1 pendingReceiveFullIRQ; } sci; //watchdog timer struct WDT { //serialization.cpp auto serialize(serializer&) -> void; struct WTCSR { //watchdog timer control/status register n3 cks; //clock select n1 tme; //timer enable n1 wtit; //timer mode select n1 ovf; //overflow flag } wtcsr; struct RSTCSR { //reset control/status register n1 rsts; //reset select n1 rste; //reset enable n1 wovf; //watchdog timer overflow flag } rstcsr; n8 wtcnt; //watchdog timer counter } wdt; //user break controller struct UBC { //serialization.cpp auto serialize(serializer&) -> void; n32 bara; //break address register A n32 bamra; //break address mask register A struct BBRA { //break bus register A n2 sza; //operand size select A n2 rwa; //read/write select A n2 ida; //instruction fetch/data access select A n2 cpa; //CPU cycle/peripheral cycle select A } bbra; n32 barb; //break address register B n32 bamrb; //break address mask register B struct BBRB { //break bus register B n2 szb; //operand size select B n2 rwb; //read/write select B n2 idb; //instruction fetch/data access select B n2 cpb; //CPU cycle/peripheral cycle select B } bbrb; n32 bdrb; //break data register B n32 bdmrb; //break data mask register B struct BRCR { //break control register n1 pcbb; //instruction break select B n1 dbeb; //data break enable B n1 seq; //sequence condition select n1 cmfpb; //peripheral condition match flag B n1 cmfcb; //CPU condition match flag B n1 pcba; //PC break select A n1 umd; //UBC mode n1 ebbe; //external bus break enable n1 cmfpa; //peripheral condition match flag A n1 cmfca; //CPU condition match flag A } brcr; } ubc; //16-bit free-running timer struct FRT { maybe self; //timer.cpp auto run() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct TIER { //timer interrupt enable register n1 ovie; //timer overflow interrupt enable n1 ociae; //output compare interrupt enable A n1 ocibe; //output compare interrupt enable B n1 icie; //input capture interrupt enable } tier; struct FTCSR { //free-running timer control/status register n1 cclra; //counter clear A n1 ovf; //timer overflow flag n1 ocfa; //output compare flag A n1 ocfb; //output compare flag B n1 icf; //input capture flag } ftcsr; n16 frc; //free-running counter n16 ocra; //output compare register A n16 ocrb; //output compare register B struct TCR { //timer control register n2 cks; //clock select n1 iedg; //input edge select } tcr; struct TOCR { //timer output compare control register n1 olvla; //output level A n1 olvlb; //output level B n1 ocrs; //output compare register select } tocr; n16 ficr; //input capture register //internal: n32 counter; n1 pendingOutputIRQ; } frt; //bus state controller struct BSC { //serialization.cpp auto serialize(serializer&) -> void; struct BCR1 { //bus control register 1 n3 dram; //enable for DRAM and other memory n2 a0lw; //long wait specification for area 0 n2 a1lw; //long wait specification for area 1 n2 ahlw; //long wait specification for ares 2 and 3 n1 pshr; //partial space share specification n1 bstrom; //area 0 burst ROM enable n1 a2endian; //endian specification for area 2 n1 master; //bus arbitration (0 = master; 1 = slave) } bcr1; struct BCR2 { //bus control register 2 n2 a1sz; //bus size specification for area 1 n2 a2sz; //bus size specification for area 2 n2 a3sz; //bus size specification for area 3 } bcr2; struct WCR { //wait control register n2 w0; //wait control for area 0 n2 w1; //wait control for area 1 n2 w2; //wait control for area 2 n2 w3; //wait control for area 3 n2 iw0; //idles between cycles for area 0 n2 iw1; //idles between cycles for area 1 n2 iw2; //idles between cycles for area 2 n2 iw3; //idles between cycles for area 3 } wcr; struct MCR { //individual memory control register n1 rcd; //RAS-CAS delay n1 trp; //RSA precharge time n1 rmode; //refresh mode n1 rfsh; //refresh control n3 amx; //address multiplex n1 sz; //memory data size n1 trwl; //write-precharge delay n1 rasd; //bank active mode n1 be; //burst enable n2 tras; //CAS before RAS refresh RAS assert time } mcr; struct RTCSR { //refresh timer control/status register n3 cks; //clock select n1 cmie; //compare match interrupt enable n1 cmf; //compare match flag } rtcsr; n8 rtcnt; //refresh timer counter n8 rtcor; //refresh time constant register } bsc; //standby control register struct SBYCR { //serialization.cpp auto serialize(serializer&) -> void; n1 sci; //SCI halted n1 frt; //FRT halted n1 divu; //DIVU halted n1 mult; //MULT halted n1 dmac; //DMAC halted n1 hiz; //port high impedance n1 sby; //standby } sbycr; //division unit struct DIVU { //serialization.cpp auto serialize(serializer&) -> void; n32 dvsr; //divisor register struct DVCR { //division control register n1 ovf; //overflow flag n1 ovfie; //overflow interrupt enable } dvcr; n7 vcrdiv; //vector number setting register n32 dvdnth; //dividend register H n32 dvdntl; //dividend register L } divu; //}; ares-126/ares/component/processor/sh2/sh7604/timer.cpp000066400000000000000000000010511415063341600225440ustar00rootroot00000000000000auto SH2::FRT::run() -> void { static constexpr u32 frequencies[4] = {8, 32, 128, 1}; if(++counter >= frequencies[tcr.cks]) { counter -= frequencies[tcr.cks]; if(++frc == 0) { ftcsr.ovf = 1; if(tier.ovie) { pendingOutputIRQ = 1; } } if(frc == ocra) { ftcsr.ocfa = 1; if(tier.ociae) { pendingOutputIRQ = 1; } if(ftcsr.cclra) { frc = 0; } } if(frc == ocrb) { ftcsr.ocfb = 1; if(tier.ocibe) { pendingOutputIRQ = 1; } } } } ares-126/ares/component/processor/sm5k/000077500000000000000000000000001415063341600201535ustar00rootroot00000000000000ares-126/ares/component/processor/sm5k/disassembler.cpp000066400000000000000000000067641415063341600233510ustar00rootroot00000000000000auto SM5K::disassembleInstruction() -> string { string s; n8 opcode = ROM[PC + 0 & sizeof(ROM) - 1]; n8 operand = ROM[PC + 1 & sizeof(ROM) - 1]; string p2 = {"0x", hex(n2(opcode), 1L)}; string p4 = {"0x", hex(n4(opcode), 1L)}; string p5 = {"0x", hex(n5(opcode), 2L)}; string p6 = {"0x", hex(n6(opcode), 2L)}; string p8 = {"0x", hex(n8(operand), 2L)}; string pc = {"0x", hex(n4(opcode) << 8 | operand, 3L)}; switch(opcode) { case 0x00 ... 0x0f: s = {"adx ", p4}; break; case 0x10 ... 0x1f: s = {"lax ", p4}; break; case 0x20 ... 0x2f: s = {"lblx ", p4}; break; case 0x30 ... 0x3f: s = {"lbmx ", p4}; break; case 0x40 ... 0x43: s = {"rm ", p2}; break; case 0x44 ... 0x47: s = {"sm ", p2}; break; case 0x48 ... 0x4b: s = {"tm ", p2}; break; case 0x4c ... 0x4f: s = {"tpb ", p2}; break; case 0x50 ... 0x53: s = {"lda ", p2}; break; case 0x54 ... 0x57: s = {"exc ", p2}; break; case 0x58 ... 0x5b: s = {"exci ", p2}; break; case 0x5c ... 0x5f: s = {"excd ", p2}; break; case 0x60: s = {"rc " }; break; case 0x61: s = {"sc " }; break; case 0x62: s = {"id " }; break; case 0x63: s = {"ie " }; break; case 0x64: s = {"exax " }; break; case 0x65: s = {"atx " }; break; case 0x66: s = {"exbm " }; break; case 0x67: s = {"exbl " }; break; case 0x68: s = {"ex " }; break; case 0x69: s = {"dta ", p8}; break; case 0x6a: s = {"pat ", p8}; break; case 0x6b: s = {"tabl " }; break; case 0x6c: s = {"ta " }; break; case 0x6d: s = {"tb " }; break; case 0x6e: s = {"tc " }; break; case 0x6f: s = {"tam " }; break; case 0x70: s = {"inl " }; break; case 0x71: s = {"outl " }; break; case 0x72: s = {"anp " }; break; case 0x73: s = {"orp " }; break; case 0x74: s = {"in " }; break; case 0x75: s = {"out " }; break; case 0x76: s = {"stop " }; break; case 0x77: s = {"halt " }; break; case 0x78: s = {"incb " }; break; case 0x79: s = {"coma " }; break; case 0x7a: s = {"add " }; break; case 0x7b: s = {"adc " }; break; case 0x7c: s = {"decb " }; break; case 0x7d: s = {"rtn " }; break; case 0x7e: s = {"rtns " }; break; case 0x7f: s = {"rtni " }; break; case 0x80 ... 0xbf: s = {"tr ", p6}; break; case 0xc0 ... 0xdf: s = {"trs ", p5}; break; case 0xe0 ... 0xef: s = {"tl ", pc}; break; case 0xf0 ... 0xff: s = {"call ", pc}; break; } while(s.size() < 10) s.append(" "); return s; } auto SM5K::disassembleContext() -> string { string s; s.append("A:", hex(A, 1L), " "); s.append("X:", hex(X, 1L), " "); s.append("B:", hex(B, 2L), " "); s.append("C:", hex(C, 1L), " "); s.append("P0:", hex(P0, 1L), " "); s.append("P1:", hex(P1, 1L), " "); s.append("P2:", hex(P2, 1L), " "); s.append("P3:", hex(P3, 1L), " "); s.append("P4:", hex(P4, 1L), " "); s.append("P5:", hex(P5, 1L), " "); s.append("SP:", hex(SP, 1L), " "); s.append("SB:", hex(SB, 2L), " "); s.append("IFA:", hex(IFA, 1L), " "); s.append("IFB:", hex(IFB, 1L), " "); s.append("IFT:", hex(IFT, 1L), " "); s.append("IME:", hex(IME, 1L), " "); s.append("SKIP:", hex(SKIP, 1L)); return s; } ares-126/ares/component/processor/sm5k/instruction.cpp000066400000000000000000000041241415063341600232410ustar00rootroot00000000000000#define op(id, name, ...) \ case id: \ if(SKIP) { SKIP = 0; return; } \ return instruction##name(__VA_ARGS__); \ auto SM5K::interrupt(n2 id) -> void { SR[SP++] = PC; PU = 2; PL = id << 1; HALT = 0; STOP = 0; } auto SM5K::instruction() -> void { if(IFA & RE.bit(0) & IME) return interrupt(0); if(IFB & RE.bit(1) & IME) return interrupt(1); if(IFT & RE.bit(2) & IME) return interrupt(2); if(HALT) return timerStep(); if(STOP) return timerStep(); n8 opcode = fetch(); switch(opcode) { op(0x00 ... 0x0f, ADX, n4(opcode)); op(0x10 ... 0x1f, LAX, n4(opcode)); op(0x20 ... 0x2f, LBLX, n4(opcode)); op(0x30 ... 0x3f, LBMX, n4(opcode)); op(0x40 ... 0x43, RM, n2(opcode)); op(0x44 ... 0x47, SM, n2(opcode)); op(0x48 ... 0x4b, TM, n2(opcode)); op(0x4c ... 0x4f, TPB, n2(opcode)); op(0x50 ... 0x53, LDA, n2(opcode)); op(0x54 ... 0x57, EXC, n2(opcode)); op(0x58 ... 0x5b, EXCI, n2(opcode)); op(0x5c ... 0x5f, EXCD, n2(opcode)); op(0x60, RC ); op(0x61, SC ); op(0x62, ID ); op(0x63, IE ); op(0x64, EXAX ); op(0x65, ATX ); op(0x66, EXBM ); op(0x67, EXBL ); op(0x68, EX ); op(0x69, DTA, fetch()); op(0x6a, PAT, fetch()); op(0x6b, TABL ); op(0x6c, TA ); op(0x6d, TB ); op(0x6e, TC ); op(0x6f, TAM ); op(0x70, INL ); op(0x71, OUTL ); op(0x72, ANP ); op(0x73, ORP ); op(0x74, IN ); op(0x75, OUT ); op(0x76, STOP ); op(0x77, HALT ); op(0x78, INCB ); op(0x79, COMA ); op(0x7a, ADD ); op(0x7b, ADC ); op(0x7c, DECB ); op(0x7d, RTN ); op(0x7e, RTNS ); op(0x7f, RTNI ); op(0x80 ... 0xbf, TR, n6(opcode)); op(0xc0 ... 0xdf, TRS, n5(opcode)); op(0xe0 ... 0xef, TL, n4(opcode) << 8 | fetch()); op(0xf0 ... 0xff, CALL, n4(opcode) << 8 | fetch()); } } #undef op ares-126/ares/component/processor/sm5k/instructions.cpp000066400000000000000000000114251415063341600234260ustar00rootroot00000000000000auto SM5K::instructionADC() -> void { auto c = C; C = A + RAM[B] + c >= 0x10; A = A + RAM[B] + c; if(C) SKIP = 1; } auto SM5K::instructionADD() -> void { A += RAM[B]; } auto SM5K::instructionADX(n4 data) -> void { if(A + data >= 0x10) SKIP = 1; A += data; } auto SM5K::instructionANP() -> void { switch(BL) { case 0x0: P0 &= A; break; case 0x2: P2 &= A; break; case 0x4: P4 &= A; break; case 0x5: P5 &= A; break; } } auto SM5K::instructionATX() -> void { X = A; } auto SM5K::instructionCALL(n12 address) -> void { SR[SP++] = PC; PC = address; } auto SM5K::instructionCOMA() -> void { A = ~A; } auto SM5K::instructionDECB() -> void { if(!--BL) SKIP = 1; } auto SM5K::instructionDR() -> void { DIV = 0; } auto SM5K::instructionDTA(n8 operand) -> void { switch(operand) { case 0x02: instructionTT(); break; case 0x03: instructionDR(); break; } static constexpr u8 rom[8] = {0xfc, 0xfc, 0xa5, 0x6c, 0x03, 0x8f, 0x1b, 0x9a}; if(BM >= 4 && BM <= 7) { SKIP = rom[BM << 1 | BL >> 3] >> n3(BL) & 1; } } auto SM5K::instructionEX() -> void { swap(B, SB); } auto SM5K::instructionEXAX() -> void { swap(A, X); } auto SM5K::instructionEXBL() -> void { auto a = A; A = BL; BL = a; } auto SM5K::instructionEXBM() -> void { auto a = A; A = BM; BM = a; } auto SM5K::instructionEXC(n2 data) -> void { swap(A, RAM[B]); BM ^= data; } auto SM5K::instructionEXCD(n2 data) -> void { swap(A, RAM[B]); if(!--BL) SKIP = 1; BM ^= data; } auto SM5K::instructionEXCI(n2 data) -> void { swap(A, RAM[B]); if(!++BL) SKIP = 1; BM ^= data; } auto SM5K::instructionID() -> void { IME = 0; } auto SM5K::instructionIE() -> void { IME = 1; } auto SM5K::instructionHALT() -> void { HALT = 1; } auto SM5K::instructionIN() -> void { switch(BL) { case 0x1: A = P1; break; case 0x2: A = P2; break; case 0x3: A = P3; break; case 0x4: A = P4; break; case 0x5: A = P5; break; case 0x8: A = R8 >> 0; X = R8 >> 4; break; case 0x9: A = R9 >> 0; X = R9 >> 4; break; case 0xa: A = RA >> 0; X = RA >> 4; break; case 0xb: A = RB >> 0; X = RB >> 4; break; case 0xc: A = RC; break; case 0xe: A = RE; break; case 0xf: A = RF; break; } } auto SM5K::instructionINCB() -> void { if(!++BL) SKIP = 1; } auto SM5K::instructionINL() -> void { A = P1; } auto SM5K::instructionLAX(n4 data) -> void { A = data; } auto SM5K::instructionLBLX(n4 data) -> void { BL = data; } auto SM5K::instructionLBMX(n4 data) -> void { BM = data; } auto SM5K::instructionLDA(n2 data) -> void { A = RAM[B]; BM ^= data; } auto SM5K::instructionORP() -> void { switch(BL) { case 0x0: P0 |= A; break; case 0x2: P2 |= A; break; case 0x4: P4 |= A; break; case 0x5: P5 |= A; break; } } auto SM5K::instructionOUT() -> void { switch(BL) { case 0x0: P0 = A; break; case 0x2: P2 = A; break; case 0x3: R3 = A; break; case 0x4: P4 = A; break; case 0x5: P5 = A; break; case 0x8: R8 = A << 0 | X << 4; break; case 0x9: R9 = A << 0 | X << 4; break; case 0xa: RA = RB; break; case 0xb: RB = A << 0 | X << 4; break; case 0xc: RC = A; break; case 0xe: RE = A; break; case 0xf: RF = A; break; } } auto SM5K::instructionOUTL() -> void { P0 = A; } auto SM5K::instructionPAT(n8) -> void { //should this actually modify the stack frame? n6 pu = 4; n6 pl = X << 4 | A; n8 data = ROM[pu << 6 | pl]; A = data >> 0; X = data >> 4; } auto SM5K::instructionRC() -> void { C = 0; } auto SM5K::instructionRM(n2 data) -> void { RAM[B] &= ~(1 << data); } auto SM5K::instructionRTN() -> void { PC = SR[--SP]; } auto SM5K::instructionRTNI() -> void { PC = SR[--SP]; IME = 1; } auto SM5K::instructionRTNS() -> void { PC = SR[--SP]; SKIP = 1; } auto SM5K::instructionSC() -> void { C = 1; } auto SM5K::instructionSM(n2 data) -> void { RAM[B] |= 1 << data; } auto SM5K::instructionSTOP() -> void { STOP = 1; } auto SM5K::instructionTA() -> void { if(IFA) SKIP = 1; IFA = 0; } auto SM5K::instructionTABL() -> void { if(A == BL) SKIP = 1; } auto SM5K::instructionTAM() -> void { if(A == RAM[B]) SKIP = 1; } auto SM5K::instructionTB() -> void { if(IFB) SKIP = 1; IFB = 0; } auto SM5K::instructionTC() -> void { if(C == 1) SKIP = 1; } auto SM5K::instructionTL(n12 address) -> void { PC = address; } auto SM5K::instructionTM(n2 data) -> void { if(RAM[B] & 1 << data) SKIP = 1; } auto SM5K::instructionTPB(n2 port) -> void { switch(port) { case 0: if(P0 == 1) SKIP = 1; break; case 1: if(P1 == 1) SKIP = 1; break; case 2: if(P2 == 1) SKIP = 1; break; case 3: if(P3 == 1) SKIP = 1; break; } } auto SM5K::instructionTR(n6 address) -> void { PL = address; } auto SM5K::instructionTRS(n5 address) -> void { SR[SP++] = PC; PU = 1; PL = address << 1; } auto SM5K::instructionTT() -> void { if(IFT) SKIP = 1; IFT = 0; } ares-126/ares/component/processor/sm5k/memory.cpp000066400000000000000000000001001415063341600221560ustar00rootroot00000000000000auto SM5K::fetch() -> n8 { timerStep(); return ROM[PC++]; } ares-126/ares/component/processor/sm5k/serialization.cpp000066400000000000000000000005171415063341600235370ustar00rootroot00000000000000auto SM5K::serialize(serializer& s) -> void { s(RAM); s(A); s(X); s(B); s(C); s(IFA); s(IFB); s(IFT); s(IME); s(P0); s(P1); s(P2); s(P3); s(P4); s(P5); s(PC); s(SP); s(SR); s(R3); s(R8); s(R9); s(RA); s(RB); s(RC); s(RE); s(RF); s(SB); s(SKIP); s(STOP); s(HALT); s(DIV); } ares-126/ares/component/processor/sm5k/sm5k.cpp000066400000000000000000000015741415063341600215450ustar00rootroot00000000000000#include #include "sm5k.hpp" namespace ares { #include "timer.cpp" #include "memory.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto SM5K::setP1(n4 data) -> void { if(P1.bit(0) && !data.bit(0)) IFA = 1; if(P1.bit(1) && !data.bit(1)) IFB = 1; if(P1.bit(1) && !data.bit(1) && RC == 3) timerIncrement(); P1 = data; } auto SM5K::power() -> void { static const n8 Undefined = 0; PC = 0; SP = 0; SR[0] = 0; SR[1] = 0; SR[2] = 0; SR[3] = 0; A = Undefined; X = Undefined; P0 = 0; P1 = 0; P2 = 0; P3 = 0; P4 = 0; P5 = 0; IFA = 0; IFB = 0; IFT = 0; IME = 0; C = Undefined; B = Undefined; R3 = 0; R8 = 0; R9 = 0; RA = 0; RB = 0; RC = 0; RE = 0; RF = 0; SKIP = 0; } } ares-126/ares/component/processor/sm5k/sm5k.hpp000066400000000000000000000070261415063341600215500ustar00rootroot00000000000000//Sharp SM5K #pragma once namespace ares { struct SM5K { //sm5k.cpp auto setP1(n4 data) -> void; auto power() -> void; //timer.cpp auto timerStep() -> void; auto timerIncrement() -> void; //memory.cpp auto fetch() -> n8; //instruction.cpp auto interrupt(n2) -> void; auto instruction() -> void; //instructions.cpp auto instructionADC() -> void; auto instructionADD() -> void; auto instructionADX(n4 data) -> void; auto instructionANP() -> void; auto instructionATX() -> void; auto instructionCALL(n12 address) -> void; auto instructionCOMA() -> void; auto instructionDECB() -> void; auto instructionDR() -> void; auto instructionDTA(n8) -> void; auto instructionEX() -> void; auto instructionEXAX() -> void; auto instructionEXBL() -> void; auto instructionEXBM() -> void; auto instructionEXC(n2 data) -> void; auto instructionEXCD(n2 data) -> void; auto instructionEXCI(n2 data) -> void; auto instructionHALT() -> void; auto instructionID() -> void; auto instructionIE() -> void; auto instructionIN() -> void; auto instructionINCB() -> void; auto instructionINL() -> void; auto instructionLAX(n4 data) -> void; auto instructionLBLX(n4 data) -> void; auto instructionLBMX(n4 data) -> void; auto instructionLDA(n2 data) -> void; auto instructionORP() -> void; auto instructionOUT() -> void; auto instructionOUTL() -> void; auto instructionPAT(n8) -> void; auto instructionRC() -> void; auto instructionRM(n2 data) -> void; auto instructionRTN() -> void; auto instructionRTNI() -> void; auto instructionRTNS() -> void; auto instructionSC() -> void; auto instructionSM(n2 data) -> void; auto instructionSTOP() -> void; auto instructionTA() -> void; auto instructionTABL() -> void; auto instructionTAM() -> void; auto instructionTB() -> void; auto instructionTC() -> void; auto instructionTL(n12 address) -> void; auto instructionTM(n2 data) -> void; auto instructionTPB(n2 port) -> void; auto instructionTR(n6 address) -> void; auto instructionTRS(n5 address) -> void; auto instructionTT() -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 ROM[4096]; n4 RAM[256]; n4 A; //accumulator n4 X; //auxiliary accumulator n8 B; //RAM bank register BitRange<8,0,3> BL{&B}; BitRange<8,4,7> BM{&B}; n1 C; //carry flag n1 IFA; //interrupt flag A n1 IFB; //interrupt flag B n1 IFT; //interrupt flag T n1 IME; //interrupt mask enable n4 P0; //CMOS inverting output port n4 P1; //input port with pull-up resistor n4 P2; //I/O port with pull-up resistor n4 P3; //input port with pull-up resistor n4 P4; //I/O port with pull-up resistor n4 P5; //I/O port with pull-up resistor n12 PC; //program counter BitRange<12,0, 5> PL{&PC}; BitRange<12,6,11> PU{&PC}; n2 SP; //stack pointer n12 SR[4]; //stack registers n4 R3; //A/D pin selection register n8 R8; //A/D conversion control and A/D data register n8 R9; //A/D data register n8 RA; //count register n8 RB; //modulo register n4 RC; //timer control n4 RE; //interrupt mask flag n4 RF; //P2 port direction register n8 SB; //auxiliary RAM bank register n1 SKIP; //skip next instruction flag n1 STOP; //STOP instruction executed flag n1 HALT; //HALT instruction executed flag n16 DIV; //divider for timer //disassembler.cpp auto disassembleInstruction() -> string; auto disassembleContext() -> string; }; } ares-126/ares/component/processor/sm5k/timer.cpp000066400000000000000000000005051415063341600217770ustar00rootroot00000000000000auto SM5K::timerStep() -> void { switch(RC & 3) { case 0: timerIncrement(); return; case 1: if(!n8 (++DIV)) timerIncrement(); return; case 2: if(!n16(++DIV)) timerIncrement(); return; case 3: return; //falling edge of P1.1 } } auto SM5K::timerIncrement() -> void { if(!++RA) { RA = RB; IFT = 1; } } ares-126/ares/component/processor/sm83/000077500000000000000000000000001415063341600200665ustar00rootroot00000000000000ares-126/ares/component/processor/sm83/algorithms.cpp000066400000000000000000000047621415063341600227540ustar00rootroot00000000000000auto SM83::ADD(n8 target, n8 source, bool carry) -> n8 { n16 x = target + source + carry; n16 y = (n4)target + (n4)source + carry; CF = x > 0xff; HF = y > 0x0f; NF = 0; ZF = (n8)x == 0; return x; } auto SM83::AND(n8 target, n8 source) -> n8 { target &= source; CF = 0; HF = 1; NF = 0; ZF = target == 0; return target; } auto SM83::BIT(n3 index, n8 target) -> void { HF = 1; NF = 0; ZF = target.bit(index) == 0; } auto SM83::CP(n8 target, n8 source) -> void { n16 x = target - source; n16 y = (n4)target - (n4)source; CF = x > 0xff; HF = y > 0x0f; NF = 1; ZF = (n8)x == 0; } auto SM83::DEC(n8 target) -> n8 { target--; HF = (n4)target == 0x0f; NF = 1; ZF = target == 0; return target; } auto SM83::INC(n8 target) -> n8 { target++; HF = (n4)target == 0x00; NF = 0; ZF = target == 0; return target; } auto SM83::OR(n8 target, n8 source) -> n8 { target |= source; CF = HF = NF = 0; ZF = target == 0; return target; } auto SM83::RL(n8 target) -> n8 { bool carry = target.bit(7); target = target << 1 | CF; CF = carry; HF = NF = 0; ZF = target == 0; return target; } auto SM83::RLC(n8 target) -> n8 { target = target << 1 | target >> 7; CF = target.bit(0); HF = NF = 0; ZF = target == 0; return target; } auto SM83::RR(n8 target) -> n8 { bool carry = target.bit(0); target = CF << 7 | target >> 1; CF = carry; HF = NF = 0; ZF = target == 0; return target; } auto SM83::RRC(n8 target) -> n8 { target = target << 7 | target >> 1; CF = target.bit(7); HF = NF = 0; ZF = target == 0; return target; } auto SM83::SLA(n8 target) -> n8 { bool carry = target.bit(7); target <<= 1; CF = carry; HF = NF = 0; ZF = target == 0; return target; } auto SM83::SRA(n8 target) -> n8 { bool carry = target.bit(0); target = (i8)target >> 1; CF = carry; HF = NF = 0; ZF = target == 0; return target; } auto SM83::SRL(n8 target) -> n8 { bool carry = target.bit(0); target >>= 1; CF = carry; HF = NF = 0; ZF = target == 0; return target; } auto SM83::SUB(n8 target, n8 source, bool carry) -> n8 { n16 x = target - source - carry; n16 y = (n4)target - (n4)source - carry; CF = x > 0xff; HF = y > 0x0f; NF = 1; ZF = (n8)x == 0; return x; } auto SM83::SWAP(n8 target) -> n8 { target = target << 4 | target >> 4; CF = HF = NF = 0; ZF = target == 0; return target; } auto SM83::XOR(n8 target, n8 source) -> n8 { target ^= source; CF = HF = NF = 0; ZF = target == 0; return target; } ares-126/ares/component/processor/sm83/disassembler.cpp000066400000000000000000000437531415063341600232630ustar00rootroot00000000000000auto SM83::disassembleInstruction(maybe _pc) -> string { auto pc = _pc ? *_pc : PC; return pad(disassembleOpcode(pc), -16, ' '); } auto SM83::disassembleContext() -> string { return { "AF:", hex(AF, 4L), " BC:", hex(BC, 4L), " DE:", hex(DE, 4L), " HL:", hex(HL, 4L), " SP:", hex(SP, 4L) }; } auto SM83::disassembleOpcode(n16 pc) -> string { auto opcode = readDebugger(pc); auto lo = readDebugger(pc + 1); auto hi = readDebugger(pc + 2); auto word = hi << 8 | lo << 0; switch(opcode) { case 0x00: return {"nop"}; case 0x01: return {"ld bc,$", hex(word, 4L)}; case 0x02: return {"ld (bc),a"}; case 0x03: return {"inc bc"}; case 0x04: return {"inc b"}; case 0x05: return {"dec b"}; case 0x06: return {"ld b,$", hex(lo, 2L)}; case 0x07: return {"rlca"}; case 0x08: return {"ld ($", hex(word, 4L), "),sp"}; case 0x09: return {"add hl,bc"}; case 0x0a: return {"ld a,(bc)"}; case 0x0b: return {"dec bc"}; case 0x0c: return {"inc c"}; case 0x0d: return {"dec c"}; case 0x0e: return {"ld c,$", hex(lo, 2L)}; case 0x0f: return {"rrca"}; case 0x10: return {"stop"}; case 0x11: return {"ld de,$", hex(word, 4L)}; case 0x12: return {"ld (de),a"}; case 0x13: return {"inc de"}; case 0x14: return {"inc d"}; case 0x15: return {"dec d"}; case 0x16: return {"ld d,$", hex(lo, 2L)}; case 0x17: return {"rla"}; case 0x18: return {"jr $", hex(pc + 2 + (i8)lo, 4L)}; case 0x19: return {"add hl,de"}; case 0x1a: return {"ld a,(de)"}; case 0x1b: return {"dec de"}; case 0x1c: return {"inc e"}; case 0x1d: return {"dec e"}; case 0x1e: return {"ld e,$", hex(lo, 2L)}; case 0x1f: return {"rra"}; case 0x20: return {"jr nz,$", hex(pc + 2 + (i8)lo, 4L)}; case 0x21: return {"ld hl,$", hex(word, 4L)}; case 0x22: return {"ldi (hl),a"}; case 0x23: return {"inc hl"}; case 0x24: return {"inc h"}; case 0x25: return {"dec h"}; case 0x26: return {"ld h,$", hex(lo, 2L)}; case 0x27: return {"daa"}; case 0x28: return {"jr z,$", hex(pc + 2 + (i8)lo, 4L)}; case 0x29: return {"add hl,hl"}; case 0x2a: return {"ldi a,(hl)"}; case 0x2b: return {"dec hl"}; case 0x2c: return {"inc l"}; case 0x2d: return {"dec l"}; case 0x2e: return {"ld l,$", hex(lo, 2L)}; case 0x2f: return {"cpl"}; case 0x30: return {"jr nc,$", hex(pc + 2 + (i8)lo, 4L)}; case 0x31: return {"ld sp,$", hex(word, 4L)}; case 0x32: return {"ldd (hl),a"}; case 0x33: return {"inc sp"}; case 0x34: return {"inc (hl)"}; case 0x35: return {"dec (hl)"}; case 0x36: return {"ld (hl),$", hex(lo, 2L)}; case 0x37: return {"scf"}; case 0x38: return {"jr c,$", hex(pc + 2 + (i8)lo, 4L)}; case 0x39: return {"add hl,sp"}; case 0x3a: return {"ldd a,(hl)"}; case 0x3b: return {"dec sp"}; case 0x3c: return {"inc a"}; case 0x3d: return {"dec a"}; case 0x3e: return {"ld a,$", hex(lo, 2L)}; case 0x3f: return {"ccf"}; case 0x40: return {"ld b,b"}; case 0x41: return {"ld b,c"}; case 0x42: return {"ld b,d"}; case 0x43: return {"ld b,e"}; case 0x44: return {"ld b,h"}; case 0x45: return {"ld b,l"}; case 0x46: return {"ld b,(hl)"}; case 0x47: return {"ld b,a"}; case 0x48: return {"ld c,b"}; case 0x49: return {"ld c,c"}; case 0x4a: return {"ld c,d"}; case 0x4b: return {"ld c,e"}; case 0x4c: return {"ld c,h"}; case 0x4d: return {"ld c,l"}; case 0x4e: return {"ld c,(hl)"}; case 0x4f: return {"ld c,a"}; case 0x50: return {"ld d,b"}; case 0x51: return {"ld d,c"}; case 0x52: return {"ld d,d"}; case 0x53: return {"ld d,e"}; case 0x54: return {"ld d,h"}; case 0x55: return {"ld d,l"}; case 0x56: return {"ld d,(hl)"}; case 0x57: return {"ld d,a"}; case 0x58: return {"ld e,b"}; case 0x59: return {"ld e,c"}; case 0x5a: return {"ld e,d"}; case 0x5b: return {"ld e,e"}; case 0x5c: return {"ld e,h"}; case 0x5d: return {"ld e,l"}; case 0x5e: return {"ld e,(hl)"}; case 0x5f: return {"ld e,a"}; case 0x60: return {"ld h,b"}; case 0x61: return {"ld h,c"}; case 0x62: return {"ld h,d"}; case 0x63: return {"ld h,e"}; case 0x64: return {"ld h,h"}; case 0x65: return {"ld h,l"}; case 0x66: return {"ld h,(hl)"}; case 0x67: return {"ld h,a"}; case 0x68: return {"ld l,b"}; case 0x69: return {"ld l,c"}; case 0x6a: return {"ld l,d"}; case 0x6b: return {"ld l,e"}; case 0x6c: return {"ld l,h"}; case 0x6d: return {"ld l,l"}; case 0x6e: return {"ld l,(hl)"}; case 0x6f: return {"ld l,a"}; case 0x70: return {"ld (hl),b"}; case 0x71: return {"ld (hl),c"}; case 0x72: return {"ld (hl),d"}; case 0x73: return {"ld (hl),e"}; case 0x74: return {"ld (hl),h"}; case 0x75: return {"ld (hl),l"}; case 0x76: return {"halt"}; case 0x77: return {"ld (hl),a"}; case 0x78: return {"ld a,b"}; case 0x79: return {"ld a,c"}; case 0x7a: return {"ld a,d"}; case 0x7b: return {"ld a,e"}; case 0x7c: return {"ld a,h"}; case 0x7d: return {"ld a,l"}; case 0x7e: return {"ld a,(hl)"}; case 0x7f: return {"ld a,a"}; case 0x80: return {"add a,b"}; case 0x81: return {"add a,c"}; case 0x82: return {"add a,d"}; case 0x83: return {"add a,e"}; case 0x84: return {"add a,h"}; case 0x85: return {"add a,l"}; case 0x86: return {"add a,(hl)"}; case 0x87: return {"add a,a"}; case 0x88: return {"adc a,b"}; case 0x89: return {"adc a,c"}; case 0x8a: return {"adc a,d"}; case 0x8b: return {"adc a,e"}; case 0x8c: return {"adc a,h"}; case 0x8d: return {"adc a,l"}; case 0x8e: return {"adc a,(hl)"}; case 0x8f: return {"adc a,a"}; case 0x90: return {"sub a,b"}; case 0x91: return {"sub a,c"}; case 0x92: return {"sub a,d"}; case 0x93: return {"sub a,e"}; case 0x94: return {"sub a,h"}; case 0x95: return {"sub a,l"}; case 0x96: return {"sub a,(hl)"}; case 0x97: return {"sub a,a"}; case 0x98: return {"sbc a,b"}; case 0x99: return {"sbc a,c"}; case 0x9a: return {"sbc a,d"}; case 0x9b: return {"sbc a,e"}; case 0x9c: return {"sbc a,h"}; case 0x9d: return {"sbc a,l"}; case 0x9e: return {"sbc a,(hl)"}; case 0x9f: return {"sbc a,a"}; case 0xa0: return {"and a,b"}; case 0xa1: return {"and a,c"}; case 0xa2: return {"and a,d"}; case 0xa3: return {"and a,e"}; case 0xa4: return {"and a,h"}; case 0xa5: return {"and a,l"}; case 0xa6: return {"and a,(hl)"}; case 0xa7: return {"and a,a"}; case 0xa8: return {"xor a,b"}; case 0xa9: return {"xor a,c"}; case 0xaa: return {"xor a,d"}; case 0xab: return {"xor a,e"}; case 0xac: return {"xor a,h"}; case 0xad: return {"xor a,l"}; case 0xae: return {"xor a,(hl)"}; case 0xaf: return {"xor a,a"}; case 0xb0: return {"or a,b"}; case 0xb1: return {"or a,c"}; case 0xb2: return {"or a,d"}; case 0xb3: return {"or a,e"}; case 0xb4: return {"or a,h"}; case 0xb5: return {"or a,l"}; case 0xb6: return {"or a,(hl)"}; case 0xb7: return {"or a,a"}; case 0xb8: return {"cp a,b"}; case 0xb9: return {"cp a,c"}; case 0xba: return {"cp a,d"}; case 0xbb: return {"cp a,e"}; case 0xbc: return {"cp a,h"}; case 0xbd: return {"cp a,l"}; case 0xbe: return {"cp a,(hl)"}; case 0xbf: return {"cp a,a"}; case 0xc0: return {"ret nz"}; case 0xc1: return {"pop bc"}; case 0xc2: return {"jp nz,$", hex(word, 4L)}; case 0xc3: return {"jp $", hex(word, 4L)}; case 0xc4: return {"call nz,$", hex(word, 4L)}; case 0xc5: return {"push bc"}; case 0xc6: return {"add a,$", hex(lo, 2L)}; case 0xc7: return {"rst $0000"}; case 0xc8: return {"ret z"}; case 0xc9: return {"ret"}; case 0xca: return {"jp z,$", hex(word, 4L)}; case 0xcb: return disassembleOpcodeCB(pc + 1); case 0xcc: return {"call z,$", hex(word, 4L)}; case 0xcd: return {"call $", hex(word, 4L)}; case 0xce: return {"adc a,$", hex(lo, 2L)}; case 0xcf: return {"rst $0008"}; case 0xd0: return {"ret nc"}; case 0xd1: return {"pop de"}; case 0xd2: return {"jp nc,$", hex(word, 4L)}; case 0xd4: return {"call nc,$", hex(word, 4L)}; case 0xd5: return {"push de"}; case 0xd6: return {"sub a,$", hex(lo, 2L)}; case 0xd7: return {"rst $0010"}; case 0xd8: return {"ret c"}; case 0xd9: return {"reti"}; case 0xda: return {"jp c,$", hex(word, 4L)}; case 0xdc: return {"call c,$", hex(word, 4L)}; case 0xde: return {"sbc a,$", hex(lo, 2L)}; case 0xdf: return {"rst $0018"}; case 0xe0: return {"ldh ($ff", hex(lo, 2L), "),a"}; case 0xe1: return {"pop hl"}; case 0xe2: return {"ldh ($ff00+c),a"}; case 0xe5: return {"push hl"}; case 0xe6: return {"and a,$", hex(lo, 2L)}; case 0xe7: return {"rst $0020"}; case 0xe8: return {"add sp,$", hex((i8)lo, 4L)}; case 0xe9: return {"jp hl"}; case 0xea: return {"ld ($", hex(word, 4L), "),a"}; case 0xee: return {"xor a,$", hex(lo, 2L)}; case 0xef: return {"rst $0028"}; case 0xf0: return {"ldh a,($ff", hex(lo, 2L), ")"}; case 0xf1: return {"pop af"}; case 0xf2: return {"ldh a,($ff00+c)"}; case 0xf3: return {"di"}; case 0xf5: return {"push af"}; case 0xf6: return {"or a,$", hex(lo, 2L)}; case 0xf7: return {"rst $0030"}; case 0xf8: return {"ld hl,sp+$", hex((i8)lo, 4L)}; case 0xf9: return {"ld sp,hl"}; case 0xfa: return {"ld a,($", hex(word, 4L), ")"}; case 0xfb: return {"ei"}; case 0xfe: return {"cp a,$", hex(lo, 2L)}; case 0xff: return {"rst $0038"}; } return {"xx"}; } auto SM83::disassembleOpcodeCB(n16 pc) -> string { auto opcode = readDebugger(pc); switch(opcode) { case 0x00: return {"rlc b"}; case 0x01: return {"rlc c"}; case 0x02: return {"rlc d"}; case 0x03: return {"rlc e"}; case 0x04: return {"rlc h"}; case 0x05: return {"rlc l"}; case 0x06: return {"rlc (hl)"}; case 0x07: return {"rlc a"}; case 0x08: return {"rrc b"}; case 0x09: return {"rrc c"}; case 0x0a: return {"rrc d"}; case 0x0b: return {"rrc e"}; case 0x0c: return {"rrc h"}; case 0x0d: return {"rrc l"}; case 0x0e: return {"rrc (hl)"}; case 0x0f: return {"rrc a"}; case 0x10: return {"rl b"}; case 0x11: return {"rl c"}; case 0x12: return {"rl d"}; case 0x13: return {"rl e"}; case 0x14: return {"rl h"}; case 0x15: return {"rl l"}; case 0x16: return {"rl (hl)"}; case 0x17: return {"rl a"}; case 0x18: return {"rr b"}; case 0x19: return {"rr c"}; case 0x1a: return {"rr d"}; case 0x1b: return {"rr e"}; case 0x1c: return {"rr h"}; case 0x1d: return {"rr l"}; case 0x1e: return {"rr (hl)"}; case 0x1f: return {"rr a"}; case 0x20: return {"sla b"}; case 0x21: return {"sla c"}; case 0x22: return {"sla d"}; case 0x23: return {"sla e"}; case 0x24: return {"sla h"}; case 0x25: return {"sla l"}; case 0x26: return {"sla (hl)"}; case 0x27: return {"sla a"}; case 0x28: return {"sra b"}; case 0x29: return {"sra c"}; case 0x2a: return {"sra d"}; case 0x2b: return {"sra e"}; case 0x2c: return {"sra h"}; case 0x2d: return {"sra l"}; case 0x2e: return {"sra (hl)"}; case 0x2f: return {"sra a"}; case 0x30: return {"swap b"}; case 0x31: return {"swap c"}; case 0x32: return {"swap d"}; case 0x33: return {"swap e"}; case 0x34: return {"swap h"}; case 0x35: return {"swap l"}; case 0x36: return {"swap (hl)"}; case 0x37: return {"swap a"}; case 0x38: return {"srl b"}; case 0x39: return {"srl c"}; case 0x3a: return {"srl d"}; case 0x3b: return {"srl e"}; case 0x3c: return {"srl h"}; case 0x3d: return {"srl l"}; case 0x3e: return {"srl (hl)"}; case 0x3f: return {"srl a"}; case 0x40: return {"bit 0,b"}; case 0x41: return {"bit 0,c"}; case 0x42: return {"bit 0,d"}; case 0x43: return {"bit 0,e"}; case 0x44: return {"bit 0,h"}; case 0x45: return {"bit 0,l"}; case 0x46: return {"bit 0,(hl)"}; case 0x47: return {"bit 0,a"}; case 0x48: return {"bit 1,b"}; case 0x49: return {"bit 1,c"}; case 0x4a: return {"bit 1,d"}; case 0x4b: return {"bit 1,e"}; case 0x4c: return {"bit 1,h"}; case 0x4d: return {"bit 1,l"}; case 0x4e: return {"bit 1,(hl)"}; case 0x4f: return {"bit 1,a"}; case 0x50: return {"bit 2,b"}; case 0x51: return {"bit 2,c"}; case 0x52: return {"bit 2,d"}; case 0x53: return {"bit 2,e"}; case 0x54: return {"bit 2,h"}; case 0x55: return {"bit 2,l"}; case 0x56: return {"bit 2,(hl)"}; case 0x57: return {"bit 2,a"}; case 0x58: return {"bit 3,b"}; case 0x59: return {"bit 3,c"}; case 0x5a: return {"bit 3,d"}; case 0x5b: return {"bit 3,e"}; case 0x5c: return {"bit 3,h"}; case 0x5d: return {"bit 3,l"}; case 0x5e: return {"bit 3,(hl)"}; case 0x5f: return {"bit 3,a"}; case 0x60: return {"bit 4,b"}; case 0x61: return {"bit 4,c"}; case 0x62: return {"bit 4,d"}; case 0x63: return {"bit 4,e"}; case 0x64: return {"bit 4,h"}; case 0x65: return {"bit 4,l"}; case 0x66: return {"bit 4,(hl)"}; case 0x67: return {"bit 4,a"}; case 0x68: return {"bit 5,b"}; case 0x69: return {"bit 5,c"}; case 0x6a: return {"bit 5,d"}; case 0x6b: return {"bit 5,e"}; case 0x6c: return {"bit 5,h"}; case 0x6d: return {"bit 5,l"}; case 0x6e: return {"bit 5,(hl)"}; case 0x6f: return {"bit 5,a"}; case 0x70: return {"bit 6,b"}; case 0x71: return {"bit 6,c"}; case 0x72: return {"bit 6,d"}; case 0x73: return {"bit 6,e"}; case 0x74: return {"bit 6,h"}; case 0x75: return {"bit 6,l"}; case 0x76: return {"bit 6,(hl)"}; case 0x77: return {"bit 6,a"}; case 0x78: return {"bit 7,b"}; case 0x79: return {"bit 7,c"}; case 0x7a: return {"bit 7,d"}; case 0x7b: return {"bit 7,e"}; case 0x7c: return {"bit 7,h"}; case 0x7d: return {"bit 7,l"}; case 0x7e: return {"bit 7,(hl)"}; case 0x7f: return {"bit 7,a"}; case 0x80: return {"res 0,b"}; case 0x81: return {"res 0,c"}; case 0x82: return {"res 0,d"}; case 0x83: return {"res 0,e"}; case 0x84: return {"res 0,h"}; case 0x85: return {"res 0,l"}; case 0x86: return {"res 0,(hl)"}; case 0x87: return {"res 0,a"}; case 0x88: return {"res 1,b"}; case 0x89: return {"res 1,c"}; case 0x8a: return {"res 1,d"}; case 0x8b: return {"res 1,e"}; case 0x8c: return {"res 1,h"}; case 0x8d: return {"res 1,l"}; case 0x8e: return {"res 1,(hl)"}; case 0x8f: return {"res 1,a"}; case 0x90: return {"res 2,b"}; case 0x91: return {"res 2,c"}; case 0x92: return {"res 2,d"}; case 0x93: return {"res 2,e"}; case 0x94: return {"res 2,h"}; case 0x95: return {"res 2,l"}; case 0x96: return {"res 2,(hl)"}; case 0x97: return {"res 2,a"}; case 0x98: return {"res 3,b"}; case 0x99: return {"res 3,c"}; case 0x9a: return {"res 3,d"}; case 0x9b: return {"res 3,e"}; case 0x9c: return {"res 3,h"}; case 0x9d: return {"res 3,l"}; case 0x9e: return {"res 3,(hl)"}; case 0x9f: return {"res 3,a"}; case 0xa0: return {"res 4,b"}; case 0xa1: return {"res 4,c"}; case 0xa2: return {"res 4,d"}; case 0xa3: return {"res 4,e"}; case 0xa4: return {"res 4,h"}; case 0xa5: return {"res 4,l"}; case 0xa6: return {"res 4,(hl)"}; case 0xa7: return {"res 4,a"}; case 0xa8: return {"res 5,b"}; case 0xa9: return {"res 5,c"}; case 0xaa: return {"res 5,d"}; case 0xab: return {"res 5,e"}; case 0xac: return {"res 5,h"}; case 0xad: return {"res 5,l"}; case 0xae: return {"res 5,(hl)"}; case 0xaf: return {"res 5,a"}; case 0xb0: return {"res 6,b"}; case 0xb1: return {"res 6,c"}; case 0xb2: return {"res 6,d"}; case 0xb3: return {"res 6,e"}; case 0xb4: return {"res 6,h"}; case 0xb5: return {"res 6,l"}; case 0xb6: return {"res 6,(hl)"}; case 0xb7: return {"res 6,a"}; case 0xb8: return {"res 7,b"}; case 0xb9: return {"res 7,c"}; case 0xba: return {"res 7,d"}; case 0xbb: return {"res 7,e"}; case 0xbc: return {"res 7,h"}; case 0xbd: return {"res 7,l"}; case 0xbe: return {"res 7,(hl)"}; case 0xbf: return {"res 7,a"}; case 0xc0: return {"set 0,b"}; case 0xc1: return {"set 0,c"}; case 0xc2: return {"set 0,d"}; case 0xc3: return {"set 0,e"}; case 0xc4: return {"set 0,h"}; case 0xc5: return {"set 0,l"}; case 0xc6: return {"set 0,(hl)"}; case 0xc7: return {"set 0,a"}; case 0xc8: return {"set 1,b"}; case 0xc9: return {"set 1,c"}; case 0xca: return {"set 1,d"}; case 0xcb: return {"set 1,e"}; case 0xcc: return {"set 1,h"}; case 0xcd: return {"set 1,l"}; case 0xce: return {"set 1,(hl)"}; case 0xcf: return {"set 1,a"}; case 0xd0: return {"set 2,b"}; case 0xd1: return {"set 2,c"}; case 0xd2: return {"set 2,d"}; case 0xd3: return {"set 2,e"}; case 0xd4: return {"set 2,h"}; case 0xd5: return {"set 2,l"}; case 0xd6: return {"set 2,(hl)"}; case 0xd7: return {"set 2,a"}; case 0xd8: return {"set 3,b"}; case 0xd9: return {"set 3,c"}; case 0xda: return {"set 3,d"}; case 0xdb: return {"set 3,e"}; case 0xdc: return {"set 3,h"}; case 0xdd: return {"set 3,l"}; case 0xde: return {"set 3,(hl)"}; case 0xdf: return {"set 3,a"}; case 0xe0: return {"set 4,b"}; case 0xe1: return {"set 4,c"}; case 0xe2: return {"set 4,d"}; case 0xe3: return {"set 4,e"}; case 0xe4: return {"set 4,h"}; case 0xe5: return {"set 4,l"}; case 0xe6: return {"set 4,(hl)"}; case 0xe7: return {"set 4,a"}; case 0xe8: return {"set 5,b"}; case 0xe9: return {"set 5,c"}; case 0xea: return {"set 5,d"}; case 0xeb: return {"set 5,e"}; case 0xec: return {"set 5,h"}; case 0xed: return {"set 5,l"}; case 0xee: return {"set 5,(hl)"}; case 0xef: return {"set 5,a"}; case 0xf0: return {"set 6,b"}; case 0xf1: return {"set 6,c"}; case 0xf2: return {"set 6,d"}; case 0xf3: return {"set 6,e"}; case 0xf4: return {"set 6,h"}; case 0xf5: return {"set 6,l"}; case 0xf6: return {"set 6,(hl)"}; case 0xf7: return {"set 6,a"}; case 0xf8: return {"set 7,b"}; case 0xf9: return {"set 7,c"}; case 0xfa: return {"set 7,d"}; case 0xfb: return {"set 7,e"}; case 0xfc: return {"set 7,h"}; case 0xfd: return {"set 7,l"}; case 0xfe: return {"set 7,(hl)"}; case 0xff: return {"set 7,a"}; } unreachable; } ares-126/ares/component/processor/sm83/instruction.cpp000066400000000000000000000256271415063341600231670ustar00rootroot00000000000000#define op(id, name, ...) case id: return instruction##name(__VA_ARGS__); auto SM83::instruction() -> void { auto opcode = operand(); switch(opcode) { op(0x00, NOP) op(0x01, LD_Direct_Data, BC) op(0x02, LD_Indirect_Direct, BC, A) op(0x03, INC_Direct, BC) op(0x04, INC_Direct, B) op(0x05, DEC_Direct, B) op(0x06, LD_Direct_Data, B) op(0x07, RLCA) op(0x08, LD_Address_Direct, SP) op(0x09, ADD_Direct_Direct, HL, BC) op(0x0a, LD_Direct_Indirect, A, BC) op(0x0b, DEC_Direct, BC) op(0x0c, INC_Direct, C) op(0x0d, DEC_Direct, C) op(0x0e, LD_Direct_Data, C) op(0x0f, RRCA) op(0x10, STOP) op(0x11, LD_Direct_Data, DE) op(0x12, LD_Indirect_Direct, DE, A) op(0x13, INC_Direct, DE) op(0x14, INC_Direct, D) op(0x15, DEC_Direct, D) op(0x16, LD_Direct_Data, D) op(0x17, RLA) op(0x18, JR_Condition_Relative, 1) op(0x19, ADD_Direct_Direct, HL, DE) op(0x1a, LD_Direct_Indirect, A, DE) op(0x1b, DEC_Direct, DE) op(0x1c, INC_Direct, E) op(0x1d, DEC_Direct, E) op(0x1e, LD_Direct_Data, E) op(0x1f, RRA) op(0x20, JR_Condition_Relative, ZF == 0) op(0x21, LD_Direct_Data, HL) op(0x22, LD_IndirectIncrement_Direct, HL, A) op(0x23, INC_Direct, HL) op(0x24, INC_Direct, H) op(0x25, DEC_Direct, H) op(0x26, LD_Direct_Data, H) op(0x27, DAA) op(0x28, JR_Condition_Relative, ZF == 1) op(0x29, ADD_Direct_Direct, HL, HL) op(0x2a, LD_Direct_IndirectIncrement, A, HL) op(0x2b, DEC_Direct, HL) op(0x2c, INC_Direct, L) op(0x2d, DEC_Direct, L) op(0x2e, LD_Direct_Data, L) op(0x2f, CPL) op(0x30, JR_Condition_Relative, CF == 0) op(0x31, LD_Direct_Data, SP) op(0x32, LD_IndirectDecrement_Direct, HL, A) op(0x33, INC_Direct, SP) op(0x34, INC_Indirect, HL) op(0x35, DEC_Indirect, HL) op(0x36, LD_Indirect_Data, HL) op(0x37, SCF) op(0x38, JR_Condition_Relative, CF == 1) op(0x39, ADD_Direct_Direct, HL, SP) op(0x3a, LD_Direct_IndirectDecrement, A, HL) op(0x3b, DEC_Direct, SP) op(0x3c, INC_Direct, A) op(0x3d, DEC_Direct, A) op(0x3e, LD_Direct_Data, A) op(0x3f, CCF) op(0x40, LD_Direct_Direct, B, B) op(0x41, LD_Direct_Direct, B, C) op(0x42, LD_Direct_Direct, B, D) op(0x43, LD_Direct_Direct, B, E) op(0x44, LD_Direct_Direct, B, H) op(0x45, LD_Direct_Direct, B, L) op(0x46, LD_Direct_Indirect, B, HL) op(0x47, LD_Direct_Direct, B, A) op(0x48, LD_Direct_Direct, C, B) op(0x49, LD_Direct_Direct, C, C) op(0x4a, LD_Direct_Direct, C, D) op(0x4b, LD_Direct_Direct, C, E) op(0x4c, LD_Direct_Direct, C, H) op(0x4d, LD_Direct_Direct, C, L) op(0x4e, LD_Direct_Indirect, C, HL) op(0x4f, LD_Direct_Direct, C, A) op(0x50, LD_Direct_Direct, D, B) op(0x51, LD_Direct_Direct, D, C) op(0x52, LD_Direct_Direct, D, D) op(0x53, LD_Direct_Direct, D, E) op(0x54, LD_Direct_Direct, D, H) op(0x55, LD_Direct_Direct, D, L) op(0x56, LD_Direct_Indirect, D, HL) op(0x57, LD_Direct_Direct, D, A) op(0x58, LD_Direct_Direct, E, B) op(0x59, LD_Direct_Direct, E, C) op(0x5a, LD_Direct_Direct, E, D) op(0x5b, LD_Direct_Direct, E, E) op(0x5c, LD_Direct_Direct, E, H) op(0x5d, LD_Direct_Direct, E, L) op(0x5e, LD_Direct_Indirect, E, HL) op(0x5f, LD_Direct_Direct, E, A) op(0x60, LD_Direct_Direct, H, B) op(0x61, LD_Direct_Direct, H, C) op(0x62, LD_Direct_Direct, H, D) op(0x63, LD_Direct_Direct, H, E) op(0x64, LD_Direct_Direct, H, H) op(0x65, LD_Direct_Direct, H, L) op(0x66, LD_Direct_Indirect, H, HL) op(0x67, LD_Direct_Direct, H, A) op(0x68, LD_Direct_Direct, L, B) op(0x69, LD_Direct_Direct, L, C) op(0x6a, LD_Direct_Direct, L, D) op(0x6b, LD_Direct_Direct, L, E) op(0x6c, LD_Direct_Direct, L, H) op(0x6d, LD_Direct_Direct, L, L) op(0x6e, LD_Direct_Indirect, L, HL) op(0x6f, LD_Direct_Direct, L, A) op(0x70, LD_Indirect_Direct, HL, B) op(0x71, LD_Indirect_Direct, HL, C) op(0x72, LD_Indirect_Direct, HL, D) op(0x73, LD_Indirect_Direct, HL, E) op(0x74, LD_Indirect_Direct, HL, H) op(0x75, LD_Indirect_Direct, HL, L) op(0x76, HALT) op(0x77, LD_Indirect_Direct, HL, A) op(0x78, LD_Direct_Direct, A, B) op(0x79, LD_Direct_Direct, A, C) op(0x7a, LD_Direct_Direct, A, D) op(0x7b, LD_Direct_Direct, A, E) op(0x7c, LD_Direct_Direct, A, H) op(0x7d, LD_Direct_Direct, A, L) op(0x7e, LD_Direct_Indirect, A, HL) op(0x7f, LD_Direct_Direct, A, A) op(0x80, ADD_Direct_Direct, A, B) op(0x81, ADD_Direct_Direct, A, C) op(0x82, ADD_Direct_Direct, A, D) op(0x83, ADD_Direct_Direct, A, E) op(0x84, ADD_Direct_Direct, A, H) op(0x85, ADD_Direct_Direct, A, L) op(0x86, ADD_Direct_Indirect, A, HL) op(0x87, ADD_Direct_Direct, A, A) op(0x88, ADC_Direct_Direct, A, B) op(0x89, ADC_Direct_Direct, A, C) op(0x8a, ADC_Direct_Direct, A, D) op(0x8b, ADC_Direct_Direct, A, E) op(0x8c, ADC_Direct_Direct, A, H) op(0x8d, ADC_Direct_Direct, A, L) op(0x8e, ADC_Direct_Indirect, A, HL) op(0x8f, ADC_Direct_Direct, A, A) op(0x90, SUB_Direct_Direct, A, B) op(0x91, SUB_Direct_Direct, A, C) op(0x92, SUB_Direct_Direct, A, D) op(0x93, SUB_Direct_Direct, A, E) op(0x94, SUB_Direct_Direct, A, H) op(0x95, SUB_Direct_Direct, A, L) op(0x96, SUB_Direct_Indirect, A, HL) op(0x97, SUB_Direct_Direct, A, A) op(0x98, SBC_Direct_Direct, A, B) op(0x99, SBC_Direct_Direct, A, C) op(0x9a, SBC_Direct_Direct, A, D) op(0x9b, SBC_Direct_Direct, A, E) op(0x9c, SBC_Direct_Direct, A, H) op(0x9d, SBC_Direct_Direct, A, L) op(0x9e, SBC_Direct_Indirect, A, HL) op(0x9f, SBC_Direct_Direct, A, A) op(0xa0, AND_Direct_Direct, A, B) op(0xa1, AND_Direct_Direct, A, C) op(0xa2, AND_Direct_Direct, A, D) op(0xa3, AND_Direct_Direct, A, E) op(0xa4, AND_Direct_Direct, A, H) op(0xa5, AND_Direct_Direct, A, L) op(0xa6, AND_Direct_Indirect, A, HL) op(0xa7, AND_Direct_Direct, A, A) op(0xa8, XOR_Direct_Direct, A, B) op(0xa9, XOR_Direct_Direct, A, C) op(0xaa, XOR_Direct_Direct, A, D) op(0xab, XOR_Direct_Direct, A, E) op(0xac, XOR_Direct_Direct, A, H) op(0xad, XOR_Direct_Direct, A, L) op(0xae, XOR_Direct_Indirect, A, HL) op(0xaf, XOR_Direct_Direct, A, A) op(0xb0, OR_Direct_Direct, A, B) op(0xb1, OR_Direct_Direct, A, C) op(0xb2, OR_Direct_Direct, A, D) op(0xb3, OR_Direct_Direct, A, E) op(0xb4, OR_Direct_Direct, A, H) op(0xb5, OR_Direct_Direct, A, L) op(0xb6, OR_Direct_Indirect, A, HL) op(0xb7, OR_Direct_Direct, A, A) op(0xb8, CP_Direct_Direct, A, B) op(0xb9, CP_Direct_Direct, A, C) op(0xba, CP_Direct_Direct, A, D) op(0xbb, CP_Direct_Direct, A, E) op(0xbc, CP_Direct_Direct, A, H) op(0xbd, CP_Direct_Direct, A, L) op(0xbe, CP_Direct_Indirect, A, HL) op(0xbf, CP_Direct_Direct, A, A) op(0xc0, RET_Condition, ZF == 0) op(0xc1, POP_Direct, BC) op(0xc2, JP_Condition_Address, ZF == 0) op(0xc3, JP_Condition_Address, 1) op(0xc4, CALL_Condition_Address, ZF == 0) op(0xc5, PUSH_Direct, BC) op(0xc6, ADD_Direct_Data, A) op(0xc7, RST_Implied, 0x00) op(0xc8, RET_Condition, ZF == 1) op(0xc9, RET) op(0xca, JP_Condition_Address, ZF == 1) op(0xcb, CB) op(0xcc, CALL_Condition_Address, ZF == 1) op(0xcd, CALL_Condition_Address, 1) op(0xce, ADC_Direct_Data, A) op(0xcf, RST_Implied, 0x08) op(0xd0, RET_Condition, CF == 0) op(0xd1, POP_Direct, DE) op(0xd2, JP_Condition_Address, CF == 0) op(0xd4, CALL_Condition_Address, CF == 0) op(0xd5, PUSH_Direct, DE) op(0xd6, SUB_Direct_Data, A) op(0xd7, RST_Implied, 0x10) op(0xd8, RET_Condition, CF == 1) op(0xd9, RETI) op(0xda, JP_Condition_Address, CF == 1) op(0xdc, CALL_Condition_Address, CF == 1) op(0xde, SBC_Direct_Data, A) op(0xdf, RST_Implied, 0x18) op(0xe0, LDH_Address_Direct, A) op(0xe1, POP_Direct, HL) op(0xe2, LDH_Indirect_Direct, C, A) op(0xe5, PUSH_Direct, HL) op(0xe6, AND_Direct_Data, A) op(0xe7, RST_Implied, 0x20) op(0xe8, ADD_Direct_Relative, SP) op(0xe9, JP_Direct, HL) op(0xea, LD_Address_Direct, A) op(0xee, XOR_Direct_Data, A) op(0xef, RST_Implied, 0x28) op(0xf0, LDH_Direct_Address, A) op(0xf1, POP_Direct_AF, AF) op(0xf2, LDH_Direct_Indirect, A, C) op(0xf3, DI) op(0xf5, PUSH_Direct, AF) op(0xf6, OR_Direct_Data, A) op(0xf7, RST_Implied, 0x30) op(0xf8, LD_Direct_DirectRelative, HL, SP) op(0xf9, LD_Direct_Direct, SP, HL) op(0xfa, LD_Direct_Address, A) op(0xfb, EI) op(0xfe, CP_Direct_Data, A) op(0xff, RST_Implied, 0x38) } } auto SM83::instructionCB() -> void { auto opcode = operand(); switch(opcode) { op(0x00, RLC_Direct, B) op(0x01, RLC_Direct, C) op(0x02, RLC_Direct, D) op(0x03, RLC_Direct, E) op(0x04, RLC_Direct, H) op(0x05, RLC_Direct, L) op(0x06, RLC_Indirect, HL) op(0x07, RLC_Direct, A) op(0x08, RRC_Direct, B) op(0x09, RRC_Direct, C) op(0x0a, RRC_Direct, D) op(0x0b, RRC_Direct, E) op(0x0c, RRC_Direct, H) op(0x0d, RRC_Direct, L) op(0x0e, RRC_Indirect, HL) op(0x0f, RRC_Direct, A) op(0x10, RL_Direct, B) op(0x11, RL_Direct, C) op(0x12, RL_Direct, D) op(0x13, RL_Direct, E) op(0x14, RL_Direct, H) op(0x15, RL_Direct, L) op(0x16, RL_Indirect, HL) op(0x17, RL_Direct, A) op(0x18, RR_Direct, B) op(0x19, RR_Direct, C) op(0x1a, RR_Direct, D) op(0x1b, RR_Direct, E) op(0x1c, RR_Direct, H) op(0x1d, RR_Direct, L) op(0x1e, RR_Indirect, HL) op(0x1f, RR_Direct, A) op(0x20, SLA_Direct, B) op(0x21, SLA_Direct, C) op(0x22, SLA_Direct, D) op(0x23, SLA_Direct, E) op(0x24, SLA_Direct, H) op(0x25, SLA_Direct, L) op(0x26, SLA_Indirect, HL) op(0x27, SLA_Direct, A) op(0x28, SRA_Direct, B) op(0x29, SRA_Direct, C) op(0x2a, SRA_Direct, D) op(0x2b, SRA_Direct, E) op(0x2c, SRA_Direct, H) op(0x2d, SRA_Direct, L) op(0x2e, SRA_Indirect, HL) op(0x2f, SRA_Direct, A) op(0x30, SWAP_Direct, B) op(0x31, SWAP_Direct, C) op(0x32, SWAP_Direct, D) op(0x33, SWAP_Direct, E) op(0x34, SWAP_Direct, H) op(0x35, SWAP_Direct, L) op(0x36, SWAP_Indirect, HL) op(0x37, SWAP_Direct, A) op(0x38, SRL_Direct, B) op(0x39, SRL_Direct, C) op(0x3a, SRL_Direct, D) op(0x3b, SRL_Direct, E) op(0x3c, SRL_Direct, H) op(0x3d, SRL_Direct, L) op(0x3e, SRL_Indirect, HL) op(0x3f, SRL_Direct, A) } //opcodes 0x40-0xff [op(0x00 - 0x07) declared above] n3 bit = opcode.bit(3,5); switch(opcode.bit(6,7) << 3 | opcode.bit(0,2)) { op(0x08, BIT_Index_Direct, bit, B) op(0x09, BIT_Index_Direct, bit, C) op(0x0a, BIT_Index_Direct, bit, D) op(0x0b, BIT_Index_Direct, bit, E) op(0x0c, BIT_Index_Direct, bit, H) op(0x0d, BIT_Index_Direct, bit, L) op(0x0e, BIT_Index_Indirect, bit, HL) op(0x0f, BIT_Index_Direct, bit, A) op(0x10, RES_Index_Direct, bit, B) op(0x11, RES_Index_Direct, bit, C) op(0x12, RES_Index_Direct, bit, D) op(0x13, RES_Index_Direct, bit, E) op(0x14, RES_Index_Direct, bit, H) op(0x15, RES_Index_Direct, bit, L) op(0x16, RES_Index_Indirect, bit, HL) op(0x17, RES_Index_Direct, bit, A) op(0x18, SET_Index_Direct, bit, B) op(0x19, SET_Index_Direct, bit, C) op(0x1a, SET_Index_Direct, bit, D) op(0x1b, SET_Index_Direct, bit, E) op(0x1c, SET_Index_Direct, bit, H) op(0x1d, SET_Index_Direct, bit, L) op(0x1e, SET_Index_Indirect, bit, HL) op(0x1f, SET_Index_Direct, bit, A) } } #undef op ares-126/ares/component/processor/sm83/instructions.cpp000066400000000000000000000237041415063341600233440ustar00rootroot00000000000000auto SM83::instructionADC_Direct_Data(n8& target) -> void { target = ADD(target, operand(), CF); } auto SM83::instructionADC_Direct_Direct(n8& target, n8& source) -> void { target = ADD(target, source, CF); } auto SM83::instructionADC_Direct_Indirect(n8& target, n16& source) -> void { target = ADD(target, read(source), CF); } auto SM83::instructionADD_Direct_Data(n8& target) -> void { target = ADD(target, operand()); } auto SM83::instructionADD_Direct_Direct(n8& target, n8& source) -> void { target = ADD(target, source); } auto SM83::instructionADD_Direct_Direct(n16& target, n16& source) -> void { idle(); n32 x = target + source; n32 y = (n12)target + (n12)source; target = x; CF = x > 0xffff; HF = y > 0x0fff; NF = 0; } auto SM83::instructionADD_Direct_Indirect(n8& target, n16& source) -> void { target = ADD(target, read(source)); } auto SM83::instructionADD_Direct_Relative(n16& target) -> void { auto data = operand(); idle(); idle(); CF = (n8)target + (n8)data > 0xff; HF = (n4)target + (n4)data > 0x0f; NF = ZF = 0; target += (i8)data; } auto SM83::instructionAND_Direct_Data(n8& target) -> void { target = AND(target, operand()); } auto SM83::instructionAND_Direct_Direct(n8& target, n8& source) -> void { target = AND(target, source); } auto SM83::instructionAND_Direct_Indirect(n8& target, n16& source) -> void { target = AND(target, read(source)); } auto SM83::instructionBIT_Index_Direct(n3 index, n8& data) -> void { BIT(index, data); } auto SM83::instructionBIT_Index_Indirect(n3 index, n16& address) -> void { auto data = read(address); BIT(index, data); } auto SM83::instructionCALL_Condition_Address(bool take) -> void { auto address = operands(); if(!take) return; idle(); push(PC); PC = address; } auto SM83::instructionCCF() -> void { CF = !CF; HF = NF = 0; } auto SM83::instructionCP_Direct_Data(n8& target) -> void { CP(target, operand()); } auto SM83::instructionCP_Direct_Direct(n8& target, n8& source) -> void { CP(target, source); } auto SM83::instructionCP_Direct_Indirect(n8& target, n16& source) -> void { CP(target, read(source)); } auto SM83::instructionCPL() -> void { A = ~A; HF = NF = 1; } auto SM83::instructionDAA() -> void { n16 a = A; if(!NF) { if(HF || (n4)A > 0x09) a += 0x06; if(CF || (n8)A > 0x99) { a += 0x60; CF = 1; } } else { if(HF) a -= 0x06; if(CF) a -= 0x60; } A = a; HF = 0; ZF = A == 0; } auto SM83::instructionDEC_Direct(n8& data) -> void { data = DEC(data); } auto SM83::instructionDEC_Direct(n16& data) -> void { idle(); data--; } auto SM83::instructionDEC_Indirect(n16& address) -> void { auto data = read(address); write(address, DEC(data)); } auto SM83::instructionDI() -> void { r.ime = 0; } auto SM83::instructionEI() -> void { r.ei = 1; } auto SM83::instructionHALT() -> void { r.halt = 1; haltBugTrigger(); while(r.halt) halt(); } auto SM83::instructionINC_Direct(n8& data) -> void { data = INC(data); } auto SM83::instructionINC_Direct(n16& data) -> void { idle(); data++; } auto SM83::instructionINC_Indirect(n16& address) -> void { auto data = read(address); write(address, INC(data)); } auto SM83::instructionJP_Condition_Address(bool take) -> void { auto address = operands(); if(!take) return; idle(); PC = address; } auto SM83::instructionJP_Direct(n16& data) -> void { PC = data; } auto SM83::instructionJR_Condition_Relative(bool take) -> void { auto data = operand(); if(!take) return; idle(); PC += (i8)data; } auto SM83::instructionLD_Address_Direct(n8& data) -> void { write(operands(), data); } auto SM83::instructionLD_Address_Direct(n16& data) -> void { store(operands(), data); } auto SM83::instructionLD_Direct_Address(n8& data) -> void { data = read(operands()); } auto SM83::instructionLD_Direct_Data(n8& target) -> void { target = operand(); } auto SM83::instructionLD_Direct_Data(n16& target) -> void { target = operands(); } auto SM83::instructionLD_Direct_Direct(n8& target, n8& source) -> void { target = source; } auto SM83::instructionLD_Direct_Direct(n16& target, n16& source) -> void { idle(); target = source; } auto SM83::instructionLD_Direct_DirectRelative(n16& target, n16& source) -> void { auto data = operand(); idle(); CF = (n8)source + (n8)data > 0xff; HF = (n4)source + (n4)data > 0x0f; NF = ZF = 0; target = source + (i8)data; } auto SM83::instructionLD_Direct_Indirect(n8& target, n16& source) -> void { target = read(source); } auto SM83::instructionLD_Direct_IndirectDecrement(n8& target, n16& source) -> void { target = read(source--); } auto SM83::instructionLD_Direct_IndirectIncrement(n8& target, n16& source) -> void { target = read(source++); } auto SM83::instructionLD_Indirect_Data(n16& target) -> void { write(target, operand()); } auto SM83::instructionLD_Indirect_Direct(n16& target, n8& source) -> void { write(target, source); } auto SM83::instructionLD_IndirectDecrement_Direct(n16& target, n8& source) -> void { write(target--, source); } auto SM83::instructionLD_IndirectIncrement_Direct(n16& target, n8& source) -> void { write(target++, source); } auto SM83::instructionLDH_Address_Direct(n8& data) -> void { write(0xff00 | operand(), data); } auto SM83::instructionLDH_Direct_Address(n8& data) -> void { data = read(0xff00 | operand()); } auto SM83::instructionLDH_Direct_Indirect(n8& target, n8& source) -> void { target = read(0xff00 | source); } auto SM83::instructionLDH_Indirect_Direct(n8& target, n8& source) -> void { write(0xff00 | target, source); } auto SM83::instructionNOP() -> void { } auto SM83::instructionOR_Direct_Data(n8& target) -> void { target = OR(target, operand()); } auto SM83::instructionOR_Direct_Direct(n8& target, n8& source) -> void { target = OR(target, source); } auto SM83::instructionOR_Direct_Indirect(n8& target, n16& source) -> void { target = OR(target, read(source)); } auto SM83::instructionPOP_Direct(n16& data) -> void { data = pop(); } auto SM83::instructionPOP_Direct_AF(n16& data) -> void { data = pop() & ~15; //flag bits 0-3 are forced to zero } auto SM83::instructionPUSH_Direct(n16& data) -> void { idle(); push(data); } auto SM83::instructionRES_Index_Direct(n3 index, n8& data) -> void { data.bit(index) = 0; } auto SM83::instructionRES_Index_Indirect(n3 index, n16& address) -> void { auto data = read(address); data.bit(index) = 0; write(address, data); } auto SM83::instructionRET() -> void { auto address = pop(); idle(); PC = address; } auto SM83::instructionRET_Condition(bool take) -> void { idle(); if(!take) return; PC = pop(); idle(); } auto SM83::instructionRETI() -> void { auto address = pop(); idle(); PC = address; r.ime = 1; } auto SM83::instructionRL_Direct(n8& data) -> void { data = RL(data); } auto SM83::instructionRL_Indirect(n16& address) -> void { auto data = read(address); write(address, RL(data)); } auto SM83::instructionRLA() -> void { A = RL(A); ZF = 0; } auto SM83::instructionRLC_Direct(n8& data) -> void { data = RLC(data); } auto SM83::instructionRLC_Indirect(n16& address) -> void { auto data = read(address); write(address, RLC(data)); } auto SM83::instructionRLCA() -> void { A = RLC(A); ZF = 0; } auto SM83::instructionRR_Direct(n8& data) -> void { data = RR(data); } auto SM83::instructionRR_Indirect(n16& address) -> void { auto data = read(address); write(address, RR(data)); } auto SM83::instructionRRA() -> void { A = RR(A); ZF = 0; } auto SM83::instructionRRC_Direct(n8& data) -> void { data = RRC(data); } auto SM83::instructionRRC_Indirect(n16& address) -> void { auto data = read(address); write(address, RRC(data)); } auto SM83::instructionRRCA() -> void { A = RRC(A); ZF = 0; } auto SM83::instructionRST_Implied(n8 vector) -> void { idle(); push(PC); PC = vector; } auto SM83::instructionSBC_Direct_Data(n8& target) -> void { target = SUB(target, operand(), CF); } auto SM83::instructionSBC_Direct_Direct(n8& target, n8& source) -> void { target = SUB(target, source, CF); } auto SM83::instructionSBC_Direct_Indirect(n8& target, n16& source) -> void { target = SUB(target, read(source), CF); } auto SM83::instructionSCF() -> void { CF = 1; HF = NF = 0; } auto SM83::instructionSET_Index_Direct(n3 index, n8& data) -> void { data.bit(index) = 1; } auto SM83::instructionSET_Index_Indirect(n3 index, n16& address) -> void { auto data = read(address); data.bit(index) = 1; write(address, data); } auto SM83::instructionSLA_Direct(n8& data) -> void { data = SLA(data); } auto SM83::instructionSLA_Indirect(n16& address) -> void { auto data = read(address); write(address, SLA(data)); } auto SM83::instructionSRA_Direct(n8& data) -> void { data = SRA(data); } auto SM83::instructionSRA_Indirect(n16& address) -> void { auto data = read(address); write(address, SRA(data)); } auto SM83::instructionSRL_Direct(n8& data) -> void { data = SRL(data); } auto SM83::instructionSRL_Indirect(n16& address) -> void { auto data = read(address); write(address, SRL(data)); } auto SM83::instructionSTOP() -> void { if(!stoppable()) return; r.stop = 1; while(r.stop) stop(); } auto SM83::instructionSUB_Direct_Data(n8& target) -> void { target = SUB(target, operand()); } auto SM83::instructionSUB_Direct_Direct(n8& target, n8& source) -> void { target = SUB(target, source); } auto SM83::instructionSUB_Direct_Indirect(n8& target, n16& source) -> void { target = SUB(target, read(source)); } auto SM83::instructionSWAP_Direct(n8& data) -> void { data = SWAP(data); } auto SM83::instructionSWAP_Indirect(n16& address) -> void { auto data = read(address); write(address, SWAP(data)); } auto SM83::instructionXOR_Direct_Data(n8& target) -> void { target = XOR(target, operand()); } auto SM83::instructionXOR_Direct_Direct(n8& target, n8& source) -> void { target = XOR(target, source); } auto SM83::instructionXOR_Direct_Indirect(n8& target, n16& source) -> void { target = XOR(target, read(source)); } ares-126/ares/component/processor/sm83/memory.cpp000066400000000000000000000011661415063341600221060ustar00rootroot00000000000000auto SM83::operand() -> n8 { if(r.haltBug) { r.haltBug = 0; return read(PC); } return read(PC++); } auto SM83::operands() -> n16 { n16 data = operand() << 0; return data | operand() << 8; } auto SM83::load(n16 address) -> n16 { n16 data = read(address++) << 0; return data | read(address++) << 8; } auto SM83::store(n16 address, n16 data) -> void { write(address++, data >> 0); write(address++, data >> 8); } auto SM83::pop() -> n16 { n16 data = read(SP++) << 0; return data | read(SP++) << 8; } auto SM83::push(n16 data) -> void { write(--SP, data >> 8); write(--SP, data >> 0); } ares-126/ares/component/processor/sm83/registers.hpp000066400000000000000000000006641415063341600226140ustar00rootroot00000000000000#define AF r.af.word #define BC r.bc.word #define DE r.de.word #define HL r.hl.word #define SP r.sp.word #define PC r.pc.word #define A r.af.byte.hi #define F r.af.byte.lo #define B r.bc.byte.hi #define C r.bc.byte.lo #define D r.de.byte.hi #define E r.de.byte.lo #define H r.hl.byte.hi #define L r.hl.byte.lo #define CF r.af.byte.lo.bit(4) #define HF r.af.byte.lo.bit(5) #define NF r.af.byte.lo.bit(6) #define ZF r.af.byte.lo.bit(7) ares-126/ares/component/processor/sm83/serialization.cpp000066400000000000000000000003011415063341600234410ustar00rootroot00000000000000auto SM83::serialize(serializer& s) -> void { s(r.af.word); s(r.bc.word); s(r.de.word); s(r.hl.word); s(r.sp.word); s(r.pc.word); s(r.ei); s(r.halt); s(r.stop); s(r.ime); } ares-126/ares/component/processor/sm83/sm83.cpp000066400000000000000000000004461415063341600213700ustar00rootroot00000000000000#include #include "sm83.hpp" namespace ares { #include "registers.hpp" #include "memory.cpp" #include "algorithms.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto SM83::power() -> void { r = {}; } } ares-126/ares/component/processor/sm83/sm83.hpp000066400000000000000000000151541415063341600213770ustar00rootroot00000000000000//Sharp SM83 //the Game Boy SoC is commonly referred to as the Sharp LR35902 //SM83 is most likely the internal CPU core, based on strong datasheet similarities //as such, this CPU core could serve as a foundation for any SM83xx SoC #pragma once namespace ares { struct SM83 { virtual auto stoppable() -> bool = 0; virtual auto stop() -> void = 0; virtual auto halt() -> void = 0; virtual auto idle() -> void = 0; virtual auto read(n16 address) -> n8 = 0; virtual auto write(n16 address, n8 data) -> void = 0; virtual auto haltBugTrigger() -> void = 0; //sm83.cpp auto power() -> void; //instruction.cpp auto instruction() -> void; auto instructionCB() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp virtual auto readDebugger(n16 address) -> n8 { return 0; } noinline auto disassembleInstruction(maybe pc = {}) -> string; noinline auto disassembleContext() -> string; //memory.cpp auto operand() -> n8; auto operands() -> n16; auto load(n16 address) -> n16; auto store(n16 address, n16 data) -> void; auto pop() -> n16; auto push(n16 data) -> void; //algorithms.cpp auto ADD(n8, n8, bool = 0) -> n8; auto AND(n8, n8) -> n8; auto BIT(n3, n8) -> void; auto CP(n8, n8) -> void; auto DEC(n8) -> n8; auto INC(n8) -> n8; auto OR(n8, n8) -> n8; auto RL(n8) -> n8; auto RLC(n8) -> n8; auto RR(n8) -> n8; auto RRC(n8) -> n8; auto SLA(n8) -> n8; auto SRA(n8) -> n8; auto SRL(n8) -> n8; auto SUB(n8, n8, bool = 0) -> n8; auto SWAP(n8) -> n8; auto XOR(n8, n8) -> n8; //instructions.cpp auto instructionADC_Direct_Data(n8&) -> void; auto instructionADC_Direct_Direct(n8&, n8&) -> void; auto instructionADC_Direct_Indirect(n8&, n16&) -> void; auto instructionADD_Direct_Data(n8&) -> void; auto instructionADD_Direct_Direct(n8&, n8&) -> void; auto instructionADD_Direct_Direct(n16&, n16&) -> void; auto instructionADD_Direct_Indirect(n8&, n16&) -> void; auto instructionADD_Direct_Relative(n16&) -> void; auto instructionAND_Direct_Data(n8&) -> void; auto instructionAND_Direct_Direct(n8&, n8&) -> void; auto instructionAND_Direct_Indirect(n8&, n16&) -> void; auto instructionBIT_Index_Direct(n3, n8&) -> void; auto instructionBIT_Index_Indirect(n3, n16&) -> void; auto instructionCALL_Condition_Address(bool) -> void; auto instructionCCF() -> void; auto instructionCP_Direct_Data(n8&) -> void; auto instructionCP_Direct_Direct(n8&, n8&) -> void; auto instructionCP_Direct_Indirect(n8&, n16&) -> void; auto instructionCPL() -> void; auto instructionDAA() -> void; auto instructionDEC_Direct(n8&) -> void; auto instructionDEC_Direct(n16&) -> void; auto instructionDEC_Indirect(n16&) -> void; auto instructionDI() -> void; auto instructionEI() -> void; auto instructionHALT() -> void; auto instructionINC_Direct(n8&) -> void; auto instructionINC_Direct(n16&) -> void; auto instructionINC_Indirect(n16&) -> void; auto instructionJP_Condition_Address(bool) -> void; auto instructionJP_Direct(n16&) -> void; auto instructionJR_Condition_Relative(bool) -> void; auto instructionLD_Address_Direct(n8&) -> void; auto instructionLD_Address_Direct(n16&) -> void; auto instructionLD_Direct_Address(n8&) -> void; auto instructionLD_Direct_Data(n8&) -> void; auto instructionLD_Direct_Data(n16&) -> void; auto instructionLD_Direct_Direct(n8&, n8&) -> void; auto instructionLD_Direct_Direct(n16&, n16&) -> void; auto instructionLD_Direct_DirectRelative(n16&, n16&) -> void; auto instructionLD_Direct_Indirect(n8&, n16&) -> void; auto instructionLD_Direct_IndirectDecrement(n8&, n16&) -> void; auto instructionLD_Direct_IndirectIncrement(n8&, n16&) -> void; auto instructionLD_Indirect_Data(n16&) -> void; auto instructionLD_Indirect_Direct(n16&, n8&) -> void; auto instructionLD_IndirectDecrement_Direct(n16&, n8&) -> void; auto instructionLD_IndirectIncrement_Direct(n16&, n8&) -> void; auto instructionLDH_Address_Direct(n8&) -> void; auto instructionLDH_Direct_Address(n8&) -> void; auto instructionLDH_Direct_Indirect(n8&, n8&) -> void; auto instructionLDH_Indirect_Direct(n8&, n8&) -> void; auto instructionNOP() -> void; auto instructionOR_Direct_Data(n8&) -> void; auto instructionOR_Direct_Direct(n8&, n8&) -> void; auto instructionOR_Direct_Indirect(n8&, n16&) -> void; auto instructionPOP_Direct(n16&) -> void; auto instructionPOP_Direct_AF(n16&) -> void; auto instructionPUSH_Direct(n16&) -> void; auto instructionRES_Index_Direct(n3, n8&) -> void; auto instructionRES_Index_Indirect(n3, n16&) -> void; auto instructionRET() -> void; auto instructionRET_Condition(bool) -> void; auto instructionRETI() -> void; auto instructionRL_Direct(n8&) -> void; auto instructionRL_Indirect(n16&) -> void; auto instructionRLA() -> void; auto instructionRLC_Direct(n8&) -> void; auto instructionRLC_Indirect(n16&) -> void; auto instructionRLCA() -> void; auto instructionRR_Direct(n8&) -> void; auto instructionRR_Indirect(n16&) -> void; auto instructionRRA() -> void; auto instructionRRC_Direct(n8&) -> void; auto instructionRRC_Indirect(n16&) -> void; auto instructionRRCA() -> void; auto instructionRST_Implied(n8) -> void; auto instructionSBC_Direct_Data(n8&) -> void; auto instructionSBC_Direct_Direct(n8&, n8&) -> void; auto instructionSBC_Direct_Indirect(n8&, n16&) -> void; auto instructionSCF() -> void; auto instructionSET_Index_Direct(n3, n8&) -> void; auto instructionSET_Index_Indirect(n3, n16&) -> void; auto instructionSLA_Direct(n8&) -> void; auto instructionSLA_Indirect(n16&) -> void; auto instructionSRA_Direct(n8&) -> void; auto instructionSRA_Indirect(n16&) -> void; auto instructionSRL_Direct(n8&) -> void; auto instructionSRL_Indirect(n16&) -> void; auto instructionSUB_Direct_Data(n8&) -> void; auto instructionSUB_Direct_Direct(n8&, n8&) -> void; auto instructionSUB_Direct_Indirect(n8&, n16&) -> void; auto instructionSWAP_Direct(n8& data) -> void; auto instructionSWAP_Indirect(n16& address) -> void; auto instructionSTOP() -> void; auto instructionXOR_Direct_Data(n8&) -> void; auto instructionXOR_Direct_Direct(n8&, n8&) -> void; auto instructionXOR_Direct_Indirect(n8&, n16&) -> void; struct Registers { union Pair { Pair() : word(0) {} n16 word; struct Byte { n8 order_msb2(hi, lo); } byte; }; Pair af; Pair bc; Pair de; Pair hl; Pair sp; Pair pc; n1 ei; n1 halt; n1 stop; n1 ime; // set if halt bug occurs n1 haltBug; } r; //disassembler.cpp auto disassembleOpcode(n16 pc) -> string; auto disassembleOpcodeCB(n16 pc) -> string; }; } ares-126/ares/component/processor/spc700/000077500000000000000000000000001415063341600203105ustar00rootroot00000000000000ares-126/ares/component/processor/spc700/algorithms.cpp000066400000000000000000000040501415063341600231640ustar00rootroot00000000000000auto SPC700::algorithmADC(n8 x, n8 y) -> n8 { s32 z = x + y + CF; CF = z > 0xff; ZF = (n8)z == 0; HF = (x ^ y ^ z) & 0x10; VF = ~(x ^ y) & (x ^ z) & 0x80; NF = z & 0x80; return z; } auto SPC700::algorithmAND(n8 x, n8 y) -> n8 { x &= y; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmASL(n8 x) -> n8 { CF = x & 0x80; x <<= 1; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmCMP(n8 x, n8 y) -> n8 { s32 z = x - y; CF = z >= 0; ZF = (n8)z == 0; NF = z & 0x80; return x; } auto SPC700::algorithmDEC(n8 x) -> n8 { x--; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmEOR(n8 x, n8 y) -> n8 { x ^= y; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmINC(n8 x) -> n8 { x++; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmLD(n8 x, n8 y) -> n8 { ZF = y == 0; NF = y & 0x80; return y; } auto SPC700::algorithmLSR(n8 x) -> n8 { CF = x & 0x01; x >>= 1; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmOR(n8 x, n8 y) -> n8 { x |= y; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmROL(n8 x) -> n8 { bool carry = CF; CF = x & 0x80; x = x << 1 | carry; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmROR(n8 x) -> n8 { bool carry = CF; CF = x & 0x01; x = carry << 7 | x >> 1; ZF = x == 0; NF = x & 0x80; return x; } auto SPC700::algorithmSBC(n8 x, n8 y) -> n8 { return algorithmADC(x, ~y); } // auto SPC700::algorithmADW(n16 x, n16 y) -> n16 { n16 z; CF = 0; z = algorithmADC(x, y); z |= algorithmADC(x >> 8, y >> 8) << 8; ZF = z == 0; return z; } auto SPC700::algorithmCPW(n16 x, n16 y) -> n16 { s32 z = x - y; CF = z >= 0; ZF = (n16)z == 0; NF = z & 0x8000; return x; } auto SPC700::algorithmLDW(n16 x, n16 y) -> n16 { ZF = y == 0; NF = y & 0x8000; return y; } auto SPC700::algorithmSBW(n16 x, n16 y) -> n16 { n16 z; CF = 1; z = algorithmSBC(x, y); z |= algorithmSBC(x >> 8, y >> 8) << 8; ZF = z == 0; return z; } ares-126/ares/component/processor/spc700/disassembler.cpp000066400000000000000000000302721415063341600234750ustar00rootroot00000000000000auto SPC700::disassembleInstruction(n16 addr, n1 p) -> string { auto read = [&](n16 addr) -> n8 { return readDisassembler(addr); }; auto relative = [&](u32 length, i8 offset) -> n16 { n16 pc = addr + length; return pc + offset; }; auto a = [&] { return hex((read(addr + 1) << 0) + (read(addr + 2) << 8), 4L); }; auto b = [&](u32 n) { return hex(read(addr + 1 + n), 2L); }; auto rel = [&](u32 r, u32 n = 0) { return hex(addr + r + (i8)read(addr + 1 + n), 4L); }; auto dp = [&](u32 n) { return hex((p << 8) + read(addr + 1 + n), 3L); }; auto ab = [&] { u32 n = (read(addr + 1) << 0) + (read(addr + 2) << 8); return string{hex(n & 0x1fff, 4L), ":", hex(n >> 13, 1L)}; }; auto mnemonic = [&]() -> string { switch(read(addr)) { case 0x00: return { "nop" }; case 0x01: return { "jst $ffde" }; case 0x02: return { "set $", dp(0), ":0" }; case 0x03: return { "bbs $", dp(0), ":0=$", rel(+3, 1) }; case 0x04: return { "ora $", dp(0) }; case 0x05: return { "ora $", a() }; case 0x06: return { "ora (x)" }; case 0x07: return { "ora ($", dp(0), ",x)" }; case 0x08: return { "ora #$", b(0) }; case 0x09: return { "orr $", dp(1), "=$", dp(0) }; case 0x0a: return { "orc $", ab() }; case 0x0b: return { "asl $", dp(0) }; case 0x0c: return { "asl $", a() }; case 0x0d: return { "php" }; case 0x0e: return { "tsb $", a() }; case 0x0f: return { "brk" }; case 0x10: return { "bpl $", rel(+2) }; case 0x11: return { "jst $ffdc" }; case 0x12: return { "clr $", dp(0), ":0" }; case 0x13: return { "bbc $", dp(0), ":0=$", rel(+3, 1) }; case 0x14: return { "ora $", dp(0), ",x" }; case 0x15: return { "ora $", a(), ",x" }; case 0x16: return { "ora $", a(), ",y" }; case 0x17: return { "ora ($", dp(0), "),y" }; case 0x18: return { "orr $", dp(1), "=#$", b(0) }; case 0x19: return { "orr (x)=(y)" }; case 0x1a: return { "dew $", dp(0) }; case 0x1b: return { "asl $", dp(0), ",x" }; case 0x1c: return { "asl" }; case 0x1d: return { "dex" }; case 0x1e: return { "cpx $", a() }; case 0x1f: return { "jmp ($", a(), ",x)" }; case 0x20: return { "clp" }; case 0x21: return { "jst $ffda" }; case 0x22: return { "set $", dp(0), ":1" }; case 0x23: return { "bbs $", dp(0), ":1=$", rel(+3, 1) }; case 0x24: return { "and $", dp(0) }; case 0x25: return { "and $", a() }; case 0x26: return { "and (x)" }; case 0x27: return { "and ($", dp(0), ",x)" }; case 0x28: return { "and #$", b(0) }; case 0x29: return { "and $", dp(1), "=$", dp(0) }; case 0x2a: return { "orc !$", ab() }; case 0x2b: return { "rol $", dp(0) }; case 0x2c: return { "rol $", a() }; case 0x2d: return { "pha" }; case 0x2e: return { "bne $", dp(0), "=$", rel(+3, 1) }; case 0x2f: return { "bra $", rel(+2) }; case 0x30: return { "bmi $", rel(+2) }; case 0x31: return { "jst $ffd8" }; case 0x32: return { "clr $", dp(0), ":1" }; case 0x33: return { "bbc $", dp(0), ":1=$", rel(+3, 1) }; case 0x34: return { "and $", dp(0), ",x" }; case 0x35: return { "and $", a(), ",x" }; case 0x36: return { "and $", a(), ",y" }; case 0x37: return { "and ($", dp(0), "),y" }; case 0x38: return { "and $", dp(1), "=#$", b(0) }; case 0x39: return { "and (x)=(y)" }; case 0x3a: return { "inw $", dp(0) }; case 0x3b: return { "rol $", dp(0), ",x" }; case 0x3c: return { "rol" }; case 0x3d: return { "inx" }; case 0x3e: return { "cpx $", dp(0) }; case 0x3f: return { "jsr $", a() }; case 0x40: return { "sep" }; case 0x41: return { "jst $ffd6" }; case 0x42: return { "set $", dp(0), ":2" }; case 0x43: return { "bbs $", dp(0), ":2=$", rel(+3, 1) }; case 0x44: return { "eor $", dp(0) }; case 0x45: return { "eor $", a() }; case 0x46: return { "eor (x)" }; case 0x47: return { "eor ($", dp(0), ",x)" }; case 0x48: return { "eor #$", b(0) }; case 0x49: return { "eor $", dp(1), "=$", dp(0) }; case 0x4a: return { "and $", ab() }; case 0x4b: return { "lsr $", dp(0) }; case 0x4c: return { "lsr $", a() }; case 0x4d: return { "phx" }; case 0x4e: return { "trb $", a() }; case 0x4f: return { "jsp $ff", b(0) }; case 0x50: return { "bvc $", rel(+2) }; case 0x51: return { "jst $ffd4" }; case 0x52: return { "clr $", dp(0), ":2" }; case 0x53: return { "bbc $", dp(0), ":2=$", rel(+3, 1) }; case 0x54: return { "eor $", dp(0), ",x" }; case 0x55: return { "eor $", a(), ",x" }; case 0x56: return { "eor $", a(), ",y" }; case 0x57: return { "eor ($", dp(0), "),y" }; case 0x58: return { "eor $", dp(1), "=#$", b(0) }; case 0x59: return { "eor (x)=(y)" }; case 0x5a: return { "cpw $", a() }; case 0x5b: return { "lsr $", dp(0), ",x" }; case 0x5c: return { "lsr" }; case 0x5d: return { "tax" }; case 0x5e: return { "cpy $", a() }; case 0x5f: return { "jmp $", a() }; case 0x60: return { "clc" }; case 0x61: return { "jst $ffd2" }; case 0x62: return { "set $", dp(0), ":3" }; case 0x63: return { "bbs $", dp(0), ":3=$", rel(+3, 1) }; case 0x64: return { "cmp $", dp(0) }; case 0x65: return { "cmp $", a() }; case 0x66: return { "cmp (x)" }; case 0x67: return { "cmp ($", dp(0), ",x)" }; case 0x68: return { "cmp #$", b(0) }; case 0x69: return { "cmp $", dp(1), "=$", dp(0) }; case 0x6a: return { "and !$", ab() }; case 0x6b: return { "ror $", dp(0) }; case 0x6c: return { "ror $", a() }; case 0x6d: return { "phy" }; case 0x6e: return { "bne --$", dp(0), "=$", rel(+3, 1) }; case 0x6f: return { "rts" }; case 0x70: return { "bvs $", rel(+2) }; case 0x71: return { "jst $ffd0" }; case 0x72: return { "clr $", dp(0), ":3" }; case 0x73: return { "bbc $", dp(0), ":3=$", rel(+3, 1) }; case 0x74: return { "cmp $", dp(0), ",x" }; case 0x75: return { "cmp $", a(), ",x" }; case 0x76: return { "cmp $", a(), ",y" }; case 0x77: return { "cmp ($", dp(0), "),y" }; case 0x78: return { "cmp $", dp(1), "=#$", b(0) }; case 0x79: return { "cmp (x)=(y)" }; case 0x7a: return { "adw $", a() }; case 0x7b: return { "ror $", dp(0), ",x" }; case 0x7c: return { "ror" }; case 0x7d: return { "txa" }; case 0x7e: return { "cpy $", dp(0) }; case 0x7f: return { "rti" }; case 0x80: return { "sec" }; case 0x81: return { "jst $ffce" }; case 0x82: return { "set $", dp(0), ":4" }; case 0x83: return { "bbs $", dp(0), ":4=$", rel(+3, 1) }; case 0x84: return { "adc $", dp(0) }; case 0x85: return { "adc $", a() }; case 0x86: return { "adc (x)" }; case 0x87: return { "adc ($", dp(0), ",x)" }; case 0x88: return { "adc #$", b(0) }; case 0x89: return { "adc $", dp(1), "=$", dp(0) }; case 0x8a: return { "eor $", ab() }; case 0x8b: return { "dec $", dp(0) }; case 0x8c: return { "dec $", a() }; case 0x8d: return { "ldy #$", b(0) }; case 0x8e: return { "plp" }; case 0x8f: return { "str $", dp(1), "=#$", b(0) }; case 0x90: return { "bcc $", rel(+2) }; case 0x91: return { "jst $ffcc" }; case 0x92: return { "clr $", dp(0), ":4" }; case 0x93: return { "bbc $", dp(0), ":4=$", rel(+3, 1) }; case 0x94: return { "adc $", dp(0), ",x" }; case 0x95: return { "adc $", a(), ",x" }; case 0x96: return { "adc $", a(), ",y" }; case 0x97: return { "adc ($", dp(0), "),y" }; case 0x98: return { "adc $", dp(1), "=#$", b(0) }; case 0x99: return { "adc (x)=(y)" }; case 0x9a: return { "sbw $", a() }; case 0x9b: return { "dec $", dp(0), ",x" }; case 0x9c: return { "dec" }; case 0x9d: return { "tsx" }; case 0x9e: return { "div" }; case 0x9f: return { "xcn" }; case 0xa0: return { "sei" }; case 0xa1: return { "jst $ffca" }; case 0xa2: return { "set $", dp(0), ":5" }; case 0xa3: return { "bbs $", dp(0), ":5=$", rel(+3, 1) }; case 0xa4: return { "sbc $", dp(0) }; case 0xa5: return { "sbc $", a() }; case 0xa6: return { "sbc (x)" }; case 0xa7: return { "sbc ($", dp(0), ",x)" }; case 0xa8: return { "sbc #$", b(0) }; case 0xa9: return { "sbc $", dp(1), "=$", dp(0) }; case 0xaa: return { "ldc $", ab() }; case 0xab: return { "inc $", dp(0) }; case 0xac: return { "inc $", a() }; case 0xad: return { "cpy #$", b(0) }; case 0xae: return { "pla" }; case 0xaf: return { "sta (x++)" }; case 0xb0: return { "bcs $", rel(+2) }; case 0xb1: return { "jst $ffc8" }; case 0xb2: return { "clr $", dp(0), ":5" }; case 0xb3: return { "bbc $", dp(0), ":5=$", rel(+3, 1) }; case 0xb4: return { "sbc $", dp(0), ",x" }; case 0xb5: return { "sbc $", a(), ",x" }; case 0xb6: return { "sbc $", a(), ",y" }; case 0xb7: return { "sbc ($", dp(0), "),y" }; case 0xb8: return { "sbc $", dp(1), "=#$", b(0) }; case 0xb9: return { "sbc (x)=(y)" }; case 0xba: return { "ldw $", dp(0) }; case 0xbb: return { "inc $", dp(0), ",x" }; case 0xbc: return { "inc" }; case 0xbd: return { "txs" }; case 0xbe: return { "das" }; case 0xbf: return { "lda (x++)" }; case 0xc0: return { "cli" }; case 0xc1: return { "jst $ffc6" }; case 0xc2: return { "set $", dp(0), ":6" }; case 0xc3: return { "bbs $", dp(0), ":6=$", rel(+3, 1) }; case 0xc4: return { "sta $", dp(0) }; case 0xc5: return { "sta $", a() }; case 0xc6: return { "sta (x)" }; case 0xc7: return { "sta ($", dp(0), ",x)" }; case 0xc8: return { "cpx #$", b(0) }; case 0xc9: return { "stx $", a() }; case 0xca: return { "stc $", ab() }; case 0xcb: return { "sty $", dp(0) }; case 0xcc: return { "sty $", a() }; case 0xcd: return { "ldx #$", b(0) }; case 0xce: return { "plx" }; case 0xcf: return { "mul" }; case 0xd0: return { "bne $", rel(+2) }; case 0xd1: return { "jst $ffc4" }; case 0xd2: return { "clr $", dp(0), ":6" }; case 0xd3: return { "bbc $", dp(0), ":6=$", rel(+3, 1) }; case 0xd4: return { "sta $", dp(0), ",x" }; case 0xd5: return { "sta $", a(), ",x" }; case 0xd6: return { "sta $", a(), ",y" }; case 0xd7: return { "sta ($", dp(0), "),y" }; case 0xd8: return { "stx $", dp(0) }; case 0xd9: return { "stx $", dp(0), ",y" }; case 0xda: return { "stw $", dp(0) }; case 0xdb: return { "sty $", dp(0), ",x" }; case 0xdc: return { "dey" }; case 0xdd: return { "tya" }; case 0xde: return { "bne $", dp(0), ",x=$", rel(+3, 1) }; case 0xdf: return { "daa" }; case 0xe0: return { "clv" }; case 0xe1: return { "jst $ffc2" }; case 0xe2: return { "set $", dp(0), ":7" }; case 0xe3: return { "bbs $", dp(0), ":7=$", rel(+3, 1) }; case 0xe4: return { "lda $", dp(0) }; case 0xe5: return { "lda $", a() }; case 0xe6: return { "lda (x)" }; case 0xe7: return { "lda ($", dp(0), ",x)" }; case 0xe8: return { "lda #$", b(0) }; case 0xe9: return { "ldx $", a() }; case 0xea: return { "not $", ab() }; case 0xeb: return { "ldy $", dp(0) }; case 0xec: return { "ldy $", a() }; case 0xed: return { "cmc" }; case 0xee: return { "ply" }; case 0xef: return { "wai" }; case 0xf0: return { "beq $", rel(+2) }; case 0xf1: return { "jst $ffc0" }; case 0xf2: return { "clr $", dp(0), ":7" }; case 0xf3: return { "bbc $", dp(0), ":7=$", rel(+3, 1) }; case 0xf4: return { "lda $", dp(0), ",x" }; case 0xf5: return { "lda $", a(), ",x" }; case 0xf6: return { "lda $", a(), ",y" }; case 0xf7: return { "lda ($", dp(0), "),y" }; case 0xf8: return { "ldx $", dp(0) }; case 0xf9: return { "ldx $", dp(0), ",y" }; case 0xfa: return { "str $", dp(1), "=$", dp(0) }; case 0xfb: return { "ldy $", dp(0), ",x" }; case 0xfc: return { "iny" }; case 0xfd: return { "tay" }; case 0xfe: return { "bne --y=$", rel(+2) }; case 0xff: return { "stp" }; } throw; }; return pad(mnemonic(), -16); } auto SPC700::disassembleInstruction() -> string { return disassembleInstruction(r.pc.w, r.p.p); } auto SPC700::disassembleContext() -> string { return { "YA:", hex(YA, 4L), " A:", hex(A, 2L), " X:", hex(X, 2L), " Y:", hex(Y, 2L), " S:", hex(S, 2L), " ", NF ? "N" : "n", VF ? "V" : "v", PF ? "P" : "p", BF ? "B" : "b", HF ? "H" : "h", IF ? "I" : "i", ZF ? "Z" : "z", CF ? "C" : "c" }; } ares-126/ares/component/processor/spc700/instruction.cpp000066400000000000000000000215571415063341600234070ustar00rootroot00000000000000#define op(id, name, ...) case id: return instruction##name(__VA_ARGS__); #define fp(name) &SPC700::algorithm##name auto SPC700::instruction() -> void { switch(fetch()) { op(0x00, NoOperation) op(0x01, CallTable, 0) op(0x02, AbsoluteBitSet, 0, true) op(0x03, BranchBit, 0, true) op(0x04, DirectRead, fp(OR), A) op(0x05, AbsoluteRead, fp(OR), A) op(0x06, IndirectXRead, fp(OR)) op(0x07, IndexedIndirectRead, fp(OR), X) op(0x08, ImmediateRead, fp(OR), A) op(0x09, DirectDirectModify, fp(OR)) op(0x0a, AbsoluteBitModify, 0) op(0x0b, DirectModify, fp(ASL)) op(0x0c, AbsoluteModify, fp(ASL)) op(0x0d, Push, P) op(0x0e, TestSetBitsAbsolute, true) op(0x0f, Break) op(0x10, Branch, NF == 0) op(0x11, CallTable, 1) op(0x12, AbsoluteBitSet, 0, false) op(0x13, BranchBit, 0, false) op(0x14, DirectIndexedRead, fp(OR), A, X) op(0x15, AbsoluteIndexedRead, fp(OR), X) op(0x16, AbsoluteIndexedRead, fp(OR), Y) op(0x17, IndirectIndexedRead, fp(OR), Y) op(0x18, DirectImmediateModify, fp(OR)) op(0x19, IndirectXWriteIndirectY, fp(OR)) op(0x1a, DirectModifyWord, -1) op(0x1b, DirectIndexedModify, fp(ASL), X) op(0x1c, ImpliedModify, fp(ASL), A) op(0x1d, ImpliedModify, fp(DEC), X) op(0x1e, AbsoluteRead, fp(CMP), X) op(0x1f, JumpIndirectX) op(0x20, FlagSet, PF, false) op(0x21, CallTable, 2) op(0x22, AbsoluteBitSet, 1, true) op(0x23, BranchBit, 1, true) op(0x24, DirectRead, fp(AND), A) op(0x25, AbsoluteRead, fp(AND), A) op(0x26, IndirectXRead, fp(AND)) op(0x27, IndexedIndirectRead, fp(AND), X) op(0x28, ImmediateRead, fp(AND), A) op(0x29, DirectDirectModify, fp(AND)) op(0x2a, AbsoluteBitModify, 1) op(0x2b, DirectModify, fp(ROL)) op(0x2c, AbsoluteModify, fp(ROL)) op(0x2d, Push, A) op(0x2e, BranchNotDirect) op(0x2f, Branch, true) op(0x30, Branch, NF == 1) op(0x31, CallTable, 3) op(0x32, AbsoluteBitSet, 1, false) op(0x33, BranchBit, 1, false) op(0x34, DirectIndexedRead, fp(AND), A, X) op(0x35, AbsoluteIndexedRead, fp(AND), X) op(0x36, AbsoluteIndexedRead, fp(AND), Y) op(0x37, IndirectIndexedRead, fp(AND), Y) op(0x38, DirectImmediateModify, fp(AND)) op(0x39, IndirectXWriteIndirectY, fp(AND)) op(0x3a, DirectModifyWord, +1) op(0x3b, DirectIndexedModify, fp(ROL), X) op(0x3c, ImpliedModify, fp(ROL), A) op(0x3d, ImpliedModify, fp(INC), X) op(0x3e, DirectRead, fp(CMP), X) op(0x3f, CallAbsolute) op(0x40, FlagSet, PF, true) op(0x41, CallTable, 4) op(0x42, AbsoluteBitSet, 2, true) op(0x43, BranchBit, 2, true) op(0x44, DirectRead, fp(EOR), A) op(0x45, AbsoluteRead, fp(EOR), A) op(0x46, IndirectXRead, fp(EOR)) op(0x47, IndexedIndirectRead, fp(EOR), X) op(0x48, ImmediateRead, fp(EOR), A) op(0x49, DirectDirectModify, fp(EOR)) op(0x4a, AbsoluteBitModify, 2) op(0x4b, DirectModify, fp(LSR)) op(0x4c, AbsoluteModify, fp(LSR)) op(0x4d, Push, X) op(0x4e, TestSetBitsAbsolute, false) op(0x4f, CallPage) op(0x50, Branch, VF == 0) op(0x51, CallTable, 5) op(0x52, AbsoluteBitSet, 2, false) op(0x53, BranchBit, 2, false) op(0x54, DirectIndexedRead, fp(EOR), A, X) op(0x55, AbsoluteIndexedRead, fp(EOR), X) op(0x56, AbsoluteIndexedRead, fp(EOR), Y) op(0x57, IndirectIndexedRead, fp(EOR), Y) op(0x58, DirectImmediateModify, fp(EOR)) op(0x59, IndirectXWriteIndirectY, fp(EOR)) op(0x5a, DirectCompareWord, fp(CPW)) op(0x5b, DirectIndexedModify, fp(LSR), X) op(0x5c, ImpliedModify, fp(LSR), A) op(0x5d, Transfer, A, X) op(0x5e, AbsoluteRead, fp(CMP), Y) op(0x5f, JumpAbsolute) op(0x60, FlagSet, CF, false) op(0x61, CallTable, 6) op(0x62, AbsoluteBitSet, 3, true) op(0x63, BranchBit, 3, true) op(0x64, DirectRead, fp(CMP), A) op(0x65, AbsoluteRead, fp(CMP), A) op(0x66, IndirectXRead, fp(CMP)) op(0x67, IndexedIndirectRead, fp(CMP), X) op(0x68, ImmediateRead, fp(CMP), A) op(0x69, DirectDirectCompare, fp(CMP)) op(0x6a, AbsoluteBitModify, 3) op(0x6b, DirectModify, fp(ROR)) op(0x6c, AbsoluteModify, fp(ROR)) op(0x6d, Push, Y) op(0x6e, BranchNotDirectDecrement) op(0x6f, ReturnSubroutine) op(0x70, Branch, VF == 1) op(0x71, CallTable, 7) op(0x72, AbsoluteBitSet, 3, false) op(0x73, BranchBit, 3, false) op(0x74, DirectIndexedRead, fp(CMP), A, X) op(0x75, AbsoluteIndexedRead, fp(CMP), X) op(0x76, AbsoluteIndexedRead, fp(CMP), Y) op(0x77, IndirectIndexedRead, fp(CMP), Y) op(0x78, DirectImmediateCompare, fp(CMP)) op(0x79, IndirectXCompareIndirectY, fp(CMP)) op(0x7a, DirectReadWord, fp(ADW)) op(0x7b, DirectIndexedModify, fp(ROR), X) op(0x7c, ImpliedModify, fp(ROR), A) op(0x7d, Transfer, X, A) op(0x7e, DirectRead, fp(CMP), Y) op(0x7f, ReturnInterrupt) op(0x80, FlagSet, CF, true) op(0x81, CallTable, 8) op(0x82, AbsoluteBitSet, 4, true) op(0x83, BranchBit, 4, true) op(0x84, DirectRead, fp(ADC), A) op(0x85, AbsoluteRead, fp(ADC), A) op(0x86, IndirectXRead, fp(ADC)) op(0x87, IndexedIndirectRead, fp(ADC), X) op(0x88, ImmediateRead, fp(ADC), A) op(0x89, DirectDirectModify, fp(ADC)) op(0x8a, AbsoluteBitModify, 4) op(0x8b, DirectModify, fp(DEC)) op(0x8c, AbsoluteModify, fp(DEC)) op(0x8d, ImmediateRead, fp(LD), Y) op(0x8e, PullP) op(0x8f, DirectImmediateWrite) op(0x90, Branch, CF == 0) op(0x91, CallTable, 9) op(0x92, AbsoluteBitSet, 4, false) op(0x93, BranchBit, 4, false) op(0x94, DirectIndexedRead, fp(ADC), A, X) op(0x95, AbsoluteIndexedRead, fp(ADC), X) op(0x96, AbsoluteIndexedRead, fp(ADC), Y) op(0x97, IndirectIndexedRead, fp(ADC), Y) op(0x98, DirectImmediateModify, fp(ADC)) op(0x99, IndirectXWriteIndirectY, fp(ADC)) op(0x9a, DirectReadWord, fp(SBW)) op(0x9b, DirectIndexedModify, fp(DEC), X) op(0x9c, ImpliedModify, fp(DEC), A) op(0x9d, Transfer, S, X) op(0x9e, Divide) op(0x9f, ExchangeNibble) op(0xa0, FlagSet, IF, true) op(0xa1, CallTable, 10) op(0xa2, AbsoluteBitSet, 5, true) op(0xa3, BranchBit, 5, true) op(0xa4, DirectRead, fp(SBC), A) op(0xa5, AbsoluteRead, fp(SBC), A) op(0xa6, IndirectXRead, fp(SBC)) op(0xa7, IndexedIndirectRead, fp(SBC), X) op(0xa8, ImmediateRead, fp(SBC), A) op(0xa9, DirectDirectModify, fp(SBC)) op(0xaa, AbsoluteBitModify, 5) op(0xab, DirectModify, fp(INC)) op(0xac, AbsoluteModify, fp(INC)) op(0xad, ImmediateRead, fp(CMP), Y) op(0xae, Pull, A) op(0xaf, IndirectXIncrementWrite, A) op(0xb0, Branch, CF == 1) op(0xb1, CallTable, 11) op(0xb2, AbsoluteBitSet, 5, false) op(0xb3, BranchBit, 5, false) op(0xb4, DirectIndexedRead, fp(SBC), A, X) op(0xb5, AbsoluteIndexedRead, fp(SBC), X) op(0xb6, AbsoluteIndexedRead, fp(SBC), Y) op(0xb7, IndirectIndexedRead, fp(SBC), Y) op(0xb8, DirectImmediateModify, fp(SBC)) op(0xb9, IndirectXWriteIndirectY, fp(SBC)) op(0xba, DirectReadWord, fp(LDW)) op(0xbb, DirectIndexedModify, fp(INC), X) op(0xbc, ImpliedModify, fp(INC), A) op(0xbd, Transfer, X, S) op(0xbe, DecimalAdjustSub) op(0xbf, IndirectXIncrementRead, A) op(0xc0, FlagSet, IF, false) op(0xc1, CallTable, 12) op(0xc2, AbsoluteBitSet, 6, true) op(0xc3, BranchBit, 6, true) op(0xc4, DirectWrite, A) op(0xc5, AbsoluteWrite, A) op(0xc6, IndirectXWrite, A) op(0xc7, IndexedIndirectWrite, A, X) op(0xc8, ImmediateRead, fp(CMP), X) op(0xc9, AbsoluteWrite, X) op(0xca, AbsoluteBitModify, 6) op(0xcb, DirectWrite, Y) op(0xcc, AbsoluteWrite, Y) op(0xcd, ImmediateRead, fp(LD), X) op(0xce, Pull, X) op(0xcf, Multiply) op(0xd0, Branch, ZF == 0) op(0xd1, CallTable, 13) op(0xd2, AbsoluteBitSet, 6, false) op(0xd3, BranchBit, 6, false) op(0xd4, DirectIndexedWrite, A, X) op(0xd5, AbsoluteIndexedWrite, X) op(0xd6, AbsoluteIndexedWrite, Y) op(0xd7, IndirectIndexedWrite, A, Y) op(0xd8, DirectWrite, X) op(0xd9, DirectIndexedWrite, X, Y) op(0xda, DirectWriteWord) op(0xdb, DirectIndexedWrite, Y, X) op(0xdc, ImpliedModify, fp(DEC), Y) op(0xdd, Transfer, Y, A) op(0xde, BranchNotDirectIndexed, X) op(0xdf, DecimalAdjustAdd) op(0xe0, OverflowClear) op(0xe1, CallTable, 14) op(0xe2, AbsoluteBitSet, 7, true) op(0xe3, BranchBit, 7, true) op(0xe4, DirectRead, fp(LD), A) op(0xe5, AbsoluteRead, fp(LD), A) op(0xe6, IndirectXRead, fp(LD)) op(0xe7, IndexedIndirectRead, fp(LD), X) op(0xe8, ImmediateRead, fp(LD), A) op(0xe9, AbsoluteRead, fp(LD), X) op(0xea, AbsoluteBitModify, 7) op(0xeb, DirectRead, fp(LD), Y) op(0xec, AbsoluteRead, fp(LD), Y) op(0xed, ComplementCarry) op(0xee, Pull, Y) op(0xef, Wait) op(0xf0, Branch, ZF == 1) op(0xf1, CallTable, 15) op(0xf2, AbsoluteBitSet, 7, false) op(0xf3, BranchBit, 7, false) op(0xf4, DirectIndexedRead, fp(LD), A, X) op(0xf5, AbsoluteIndexedRead, fp(LD), X) op(0xf6, AbsoluteIndexedRead, fp(LD), Y) op(0xf7, IndirectIndexedRead, fp(LD), Y) op(0xf8, DirectRead, fp(LD), X) op(0xf9, DirectIndexedRead, fp(LD), X, Y) op(0xfa, DirectDirectWrite) op(0xfb, DirectIndexedRead, fp(LD), Y, X) op(0xfc, ImpliedModify, fp(INC), Y) op(0xfd, Transfer, A, Y) op(0xfe, BranchNotYDecrement) op(0xff, Stop) } } #undef op #undef fp ares-126/ares/component/processor/spc700/instructions.cpp000066400000000000000000000277211415063341600235710ustar00rootroot00000000000000auto SPC700::instructionAbsoluteBitModify(n3 mode) -> void { n16 address = fetch(); address |= fetch() << 8; n3 bit = address >> 13; address &= 0x1fff; n8 data = read(address); switch(mode) { case 0: //or addr:bit idle(); CF |= data.bit(bit); break; case 1: //or !addr:bit idle(); CF |= !data.bit(bit); break; case 2: //and addr:bit CF &= data.bit(bit); break; case 3: //and !addr:bit CF &= !data.bit(bit); break; case 4: //eor addr:bit idle(); CF ^= data.bit(bit); break; case 5: //ld addr:bit CF = data.bit(bit); break; case 6: //st addr:bit idle(); data.bit(bit) = CF; write(address, data); break; case 7: //not addr:bit data.bit(bit) ^= 1; write(address, data); break; } } auto SPC700::instructionAbsoluteBitSet(n3 bit, bool value) -> void { n8 address = fetch(); n8 data = load(address); data.bit(bit) = value; store(address, data); } auto SPC700::instructionAbsoluteRead(fpb op, n8& target) -> void { n16 address = fetch(); address |= fetch() << 8; n8 data = read(address); target = alu(target, data); } auto SPC700::instructionAbsoluteModify(fps op) -> void { n16 address = fetch(); address |= fetch() << 8; n8 data = read(address); write(address, alu(data)); } auto SPC700::instructionAbsoluteWrite(n8& data) -> void { n16 address = fetch(); address |= fetch() << 8; read(address); write(address, data); } auto SPC700::instructionAbsoluteIndexedRead(fpb op, n8& index) -> void { n16 address = fetch(); address |= fetch() << 8; idle(); n8 data = read(address + index); A = alu(A, data); } auto SPC700::instructionAbsoluteIndexedWrite(n8& index) -> void { n16 address = fetch(); address |= fetch() << 8; idle(); read(address + index); write(address + index, A); } auto SPC700::instructionBranch(bool take) -> void { n8 data = fetch(); if(!take) return; idle(); idle(); PC += (i8)data; } auto SPC700::instructionBranchBit(n3 bit, bool match) -> void { n8 address = fetch(); n8 data = load(address); idle(); n8 displacement = fetch(); if(data.bit(bit) != match) return; idle(); idle(); PC += (i8)displacement; } auto SPC700::instructionBranchNotDirect() -> void { n8 address = fetch(); n8 data = load(address); idle(); n8 displacement = fetch(); if(A == data) return; idle(); idle(); PC += (i8)displacement; } auto SPC700::instructionBranchNotDirectDecrement() -> void { n8 address = fetch(); n8 data = load(address); store(address, --data); n8 displacement = fetch(); if(data == 0) return; idle(); idle(); PC += (i8)displacement; } auto SPC700::instructionBranchNotDirectIndexed(n8& index) -> void { n8 address = fetch(); idle(); n8 data = load(address + index); idle(); n8 displacement = fetch(); if(A == data) return; idle(); idle(); PC += (i8)displacement; } auto SPC700::instructionBranchNotYDecrement() -> void { read(PC); idle(); n8 displacement = fetch(); if(--Y == 0) return; idle(); idle(); PC += (i8)displacement; } auto SPC700::instructionBreak() -> void { read(PC); push(PC >> 8); push(PC >> 0); push(P); idle(); n16 address = read(0xffde + 0); address |= read(0xffde + 1) << 8; PC = address; IF = 0; BF = 1; } auto SPC700::instructionCallAbsolute() -> void { n16 address = fetch(); address |= fetch() << 8; idle(); push(PC >> 8); push(PC >> 0); idle(); idle(); PC = address; } auto SPC700::instructionCallPage() -> void { n8 address = fetch(); idle(); push(PC >> 8); push(PC >> 0); idle(); PC = 0xff00 | address; } auto SPC700::instructionCallTable(n4 vector) -> void { read(PC); idle(); push(PC >> 8); push(PC >> 0); idle(); n16 address = 0xffde - (vector << 1); n16 pc = read(address + 0); pc |= read(address + 1) << 8; PC = pc; } auto SPC700::instructionComplementCarry() -> void { read(PC); idle(); CF = !CF; } auto SPC700::instructionDecimalAdjustAdd() -> void { read(PC); idle(); if(CF || A > 0x99) { A += 0x60; CF = 1; } if(HF || (A & 15) > 0x09) { A += 0x06; } ZF = A == 0; NF = A & 0x80; } auto SPC700::instructionDecimalAdjustSub() -> void { read(PC); idle(); if(!CF || A > 0x99) { A -= 0x60; CF = 0; } if(!HF || (A & 15) > 0x09) { A -= 0x06; } ZF = A == 0; NF = A & 0x80; } auto SPC700::instructionDirectRead(fpb op, n8& target) -> void { n8 address = fetch(); n8 data = load(address); target = alu(target, data); } auto SPC700::instructionDirectModify(fps op) -> void { n8 address = fetch(); n8 data = load(address); store(address, alu(data)); } auto SPC700::instructionDirectWrite(n8& data) -> void { n8 address = fetch(); load(address); store(address, data); } auto SPC700::instructionDirectDirectCompare(fpb op) -> void { n8 source = fetch(); n8 rhs = load(source); n8 target = fetch(); n8 lhs = load(target); lhs = alu(lhs, rhs); idle(); } auto SPC700::instructionDirectDirectModify(fpb op) -> void { n8 source = fetch(); n8 rhs = load(source); n8 target = fetch(); n8 lhs = load(target); lhs = alu(lhs, rhs); store(target, lhs); } auto SPC700::instructionDirectDirectWrite() -> void { n8 source = fetch(); n8 data = load(source); n8 target = fetch(); store(target, data); } auto SPC700::instructionDirectImmediateCompare(fpb op) -> void { n8 immediate = fetch(); n8 address = fetch(); n8 data = load(address); data = alu(data, immediate); idle(); } auto SPC700::instructionDirectImmediateModify(fpb op) -> void { n8 immediate = fetch(); n8 address = fetch(); n8 data = load(address); data = alu(data, immediate); store(address, data); } auto SPC700::instructionDirectImmediateWrite() -> void { n8 immediate = fetch(); n8 address = fetch(); load(address); store(address, immediate); } auto SPC700::instructionDirectCompareWord(fpw op) -> void { n8 address = fetch(); n16 data = load(address + 0); data |= load(address + 1) << 8; YA = alu(YA, data); } auto SPC700::instructionDirectReadWord(fpw op) -> void { n8 address = fetch(); n16 data = load(address + 0); idle(); data |= load(address + 1) << 8; YA = alu(YA, data); } auto SPC700::instructionDirectModifyWord(s32 adjust) -> void { n8 address = fetch(); n16 data = load(address + 0) + adjust; store(address + 0, data >> 0); data += load(address + 1) << 8; store(address + 1, data >> 8); ZF = data == 0; NF = data & 0x8000; } auto SPC700::instructionDirectWriteWord() -> void { n8 address = fetch(); load(address + 0); store(address + 0, A); store(address + 1, Y); } auto SPC700::instructionDirectIndexedRead(fpb op, n8& target, n8& index) -> void { n8 address = fetch(); idle(); n8 data = load(address + index); target = alu(target, data); } auto SPC700::instructionDirectIndexedModify(fps op, n8& index) -> void { n8 address = fetch(); idle(); n8 data = load(address + index); store(address + index, alu(data)); } auto SPC700::instructionDirectIndexedWrite(n8& data, n8& index) -> void { n8 address = fetch(); idle(); load(address + index); store(address + index, data); } auto SPC700::instructionDivide() -> void { read(PC); idle(); idle(); idle(); idle(); idle(); idle(); idle(); idle(); idle(); idle(); n16 ya = YA; //overflow set if quotient >= 256 HF = (Y & 15) >= (X & 15); VF = Y >= X; if(Y < (X << 1)) { //if quotient is <= 511 (will fit into 9-bit result) A = ya / X; Y = ya % X; } else { //otherwise, the quotient won't fit into VF + A //this emulates the odd behavior of the S-SMP in this case A = 255 - (ya - (X << 9)) / (256 - X); Y = X + (ya - (X << 9)) % (256 - X); } //result is set based on a (quotient) only ZF = A == 0; NF = A & 0x80; } auto SPC700::instructionExchangeNibble() -> void { read(PC); idle(); idle(); idle(); A = A >> 4 | A << 4; ZF = A == 0; NF = A & 0x80; } auto SPC700::instructionFlagSet(bool& flag, bool value) -> void { read(PC); if(&flag == &IF) idle(); flag = value; } auto SPC700::instructionImmediateRead(fpb op, n8& target) -> void { n8 data = fetch(); target = alu(target, data); } auto SPC700::instructionImpliedModify(fps op, n8& target) -> void { read(PC); target = alu(target); } auto SPC700::instructionIndexedIndirectRead(fpb op, n8& index) -> void { n8 indirect = fetch(); idle(); n16 address = load(indirect + index + 0); address |= load(indirect + index + 1) << 8; n8 data = read(address); A = alu(A, data); } auto SPC700::instructionIndexedIndirectWrite(n8& data, n8& index) -> void { n8 indirect = fetch(); idle(); n16 address = load(indirect + index + 0); address |= load(indirect + index + 1) << 8; read(address); write(address, data); } auto SPC700::instructionIndirectIndexedRead(fpb op, n8& index) -> void { n8 indirect = fetch(); idle(); n16 address = load(indirect + 0); address |= load(indirect + 1) << 8; n8 data = read(address + index); A = alu(A, data); } auto SPC700::instructionIndirectIndexedWrite(n8& data, n8& index) -> void { n8 indirect = fetch(); n16 address = load(indirect + 0); address |= load(indirect + 1) << 8; idle(); read(address + index); write(address + index, data); } auto SPC700::instructionIndirectXRead(fpb op) -> void { read(PC); n8 data = load(X); A = alu(A, data); } auto SPC700::instructionIndirectXWrite(n8& data) -> void { read(PC); load(X); store(X, data); } auto SPC700::instructionIndirectXIncrementRead(n8& data) -> void { read(PC); data = load(X++); idle(); //quirk: consumes extra idle cycle compared to most read instructions ZF = data == 0; NF = data & 0x80; } auto SPC700::instructionIndirectXIncrementWrite(n8& data) -> void { read(PC); idle(); //quirk: not a read cycle as with most write instructions store(X++, data); } auto SPC700::instructionIndirectXCompareIndirectY(fpb op) -> void { read(PC); n8 rhs = load(Y); n8 lhs = load(X); lhs = alu(lhs, rhs); idle(); } auto SPC700::instructionIndirectXWriteIndirectY(fpb op) -> void { read(PC); n8 rhs = load(Y); n8 lhs = load(X); lhs = alu(lhs, rhs); store(X, lhs); } auto SPC700::instructionJumpAbsolute() -> void { n16 address = fetch(); address |= fetch() << 8; PC = address; } auto SPC700::instructionJumpIndirectX() -> void { n16 address = fetch(); address |= fetch() << 8; idle(); n16 pc = read(address + X + 0); pc |= read(address + X + 1) << 8; PC = pc; } auto SPC700::instructionMultiply() -> void { read(PC); idle(); idle(); idle(); idle(); idle(); idle(); idle(); n16 ya = Y * A; A = ya >> 0; Y = ya >> 8; //result is set based on y (high-byte) only ZF = Y == 0; NF = Y & 0x80; } auto SPC700::instructionNoOperation() -> void { read(PC); } auto SPC700::instructionOverflowClear() -> void { read(PC); HF = 0; VF = 0; } auto SPC700::instructionPull(n8& data) -> void { read(PC); idle(); data = pull(); } auto SPC700::instructionPullP() -> void { read(PC); idle(); P = pull(); } auto SPC700::instructionPush(n8 data) -> void { read(PC); push(data); idle(); } auto SPC700::instructionReturnInterrupt() -> void { read(PC); idle(); P = pull(); n16 address = pull(); address |= pull() << 8; PC = address; } auto SPC700::instructionReturnSubroutine() -> void { read(PC); idle(); n16 address = pull(); address |= pull() << 8; PC = address; } auto SPC700::instructionStop() -> void { r.stop = true; while(r.stop && !synchronizing()) { read(PC); idle(); } } auto SPC700::instructionTestSetBitsAbsolute(bool set) -> void { n16 address = fetch(); address |= fetch() << 8; n8 data = read(address); ZF = (A - data) == 0; NF = (A - data) & 0x80; read(address); write(address, set ? data | A : data & ~A); } auto SPC700::instructionTransfer(n8& from, n8& to) -> void { read(PC); to = from; if(&to == &S) return; ZF = to == 0; NF = to & 0x80; } auto SPC700::instructionWait() -> void { r.wait = true; while(r.wait && !synchronizing()) { read(PC); idle(); } } ares-126/ares/component/processor/spc700/memory.cpp000066400000000000000000000006101415063341600223210ustar00rootroot00000000000000inline auto SPC700::fetch() -> n8 { return read(PC++); } inline auto SPC700::load(n8 address) -> n8 { return read(PF << 8 | address); } inline auto SPC700::store(n8 address, n8 data) -> void { return write(PF << 8 | address, data); } inline auto SPC700::pull() -> n8 { return read(1 << 8 | ++S); } inline auto SPC700::push(n8 data) -> void { return write(1 << 8 | S--, data); } ares-126/ares/component/processor/spc700/serialization.cpp000066400000000000000000000003341415063341600236710ustar00rootroot00000000000000auto SPC700::serialize(serializer& s) -> void { s(r.pc.w); s(r.ya.w); s(r.x); s(r.s); s(r.p.c); s(r.p.z); s(r.p.i); s(r.p.h); s(r.p.b); s(r.p.p); s(r.p.v); s(r.p.n); s(r.wait); s(r.stop); } ares-126/ares/component/processor/spc700/spc700.cpp000066400000000000000000000014521415063341600220320ustar00rootroot00000000000000#include #include "spc700.hpp" namespace ares { #define PC r.pc.w #define YA r.ya.w #define A r.ya.byte.l #define X r.x #define Y r.ya.byte.h #define S r.s #define P r.p #define CF r.p.c #define ZF r.p.z #define IF r.p.i #define HF r.p.h #define BF r.p.b #define PF r.p.p #define VF r.p.v #define NF r.p.n #define alu (this->*op) #include "memory.cpp" #include "algorithms.cpp" #include "instructions.cpp" #include "instruction.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto SPC700::power() -> void { PC = 0x0000; YA = 0x0000; X = 0x00; S = 0xef; P = 0x02; r.wait = false; r.stop = false; } #undef PC #undef YA #undef A #undef X #undef Y #undef S #undef P #undef CF #undef ZF #undef IF #undef HF #undef BF #undef PF #undef VF #undef NF #undef alu } ares-126/ares/component/processor/spc700/spc700.hpp000066400000000000000000000125271415063341600220440ustar00rootroot00000000000000#pragma once namespace ares { struct SPC700 { virtual auto idle() -> void = 0; virtual auto read(n16 address) -> n8 = 0; virtual auto write(n16 address, n8 data) -> void = 0; virtual auto synchronizing() const -> bool = 0; virtual auto readDisassembler(n16 address) -> n8 { return 0; } //spc700.cpp auto power() -> void; //memory.cpp auto fetch() -> n8; auto load(n8 address) -> n8; auto store(n8 address, n8 data) -> void; auto pull() -> n8; auto push(n8 data) -> void; //instruction.cpp auto instruction() -> void; //algorithms.cpp auto algorithmADC(n8, n8) -> n8; auto algorithmAND(n8, n8) -> n8; auto algorithmASL(n8) -> n8; auto algorithmCMP(n8, n8) -> n8; auto algorithmDEC(n8) -> n8; auto algorithmEOR(n8, n8) -> n8; auto algorithmINC(n8) -> n8; auto algorithmLD (n8, n8) -> n8; auto algorithmLSR(n8) -> n8; auto algorithmOR (n8, n8) -> n8; auto algorithmROL(n8) -> n8; auto algorithmROR(n8) -> n8; auto algorithmSBC(n8, n8) -> n8; auto algorithmADW(n16, n16) -> n16; auto algorithmCPW(n16, n16) -> n16; auto algorithmLDW(n16, n16) -> n16; auto algorithmSBW(n16, n16) -> n16; //instructions.cpp using fps = auto (SPC700::*)(n8) -> n8; using fpb = auto (SPC700::*)(n8, n8) -> n8; using fpw = auto (SPC700::*)(n16, n16) -> n16; auto instructionAbsoluteBitModify(n3) -> void; auto instructionAbsoluteBitSet(n3, bool) -> void; auto instructionAbsoluteRead(fpb, n8&) -> void; auto instructionAbsoluteModify(fps) -> void; auto instructionAbsoluteWrite(n8&) -> void; auto instructionAbsoluteIndexedRead(fpb, n8&) -> void; auto instructionAbsoluteIndexedWrite(n8&) -> void; auto instructionBranch(bool) -> void; auto instructionBranchBit(n3, bool) -> void; auto instructionBranchNotDirect() -> void; auto instructionBranchNotDirectDecrement() -> void; auto instructionBranchNotDirectIndexed(n8&) -> void; auto instructionBranchNotYDecrement() -> void; auto instructionBreak() -> void; auto instructionCallAbsolute() -> void; auto instructionCallPage() -> void; auto instructionCallTable(n4) -> void; auto instructionComplementCarry() -> void; auto instructionDecimalAdjustAdd() -> void; auto instructionDecimalAdjustSub() -> void; auto instructionDirectRead(fpb, n8&) -> void; auto instructionDirectModify(fps) -> void; auto instructionDirectWrite(n8&) -> void; auto instructionDirectDirectCompare(fpb) -> void; auto instructionDirectDirectModify(fpb) -> void; auto instructionDirectDirectWrite() -> void; auto instructionDirectImmediateCompare(fpb) -> void; auto instructionDirectImmediateModify(fpb) -> void; auto instructionDirectImmediateWrite() -> void; auto instructionDirectCompareWord(fpw) -> void; auto instructionDirectReadWord(fpw) -> void; auto instructionDirectModifyWord(s32) -> void; auto instructionDirectWriteWord() -> void; auto instructionDirectIndexedRead(fpb, n8&, n8&) -> void; auto instructionDirectIndexedModify(fps, n8&) -> void; auto instructionDirectIndexedWrite(n8&, n8&) -> void; auto instructionDivide() -> void; auto instructionExchangeNibble() -> void; auto instructionFlagSet(bool&, bool) -> void; auto instructionImmediateRead(fpb, n8&) -> void; auto instructionImpliedModify(fps, n8&) -> void; auto instructionIndexedIndirectRead(fpb, n8&) -> void; auto instructionIndexedIndirectWrite(n8&, n8&) -> void; auto instructionIndirectIndexedRead(fpb, n8&) -> void; auto instructionIndirectIndexedWrite(n8&, n8&) -> void; auto instructionIndirectXRead(fpb) -> void; auto instructionIndirectXWrite(n8&) -> void; auto instructionIndirectXIncrementRead(n8&) -> void; auto instructionIndirectXIncrementWrite(n8&) -> void; auto instructionIndirectXCompareIndirectY(fpb) -> void; auto instructionIndirectXWriteIndirectY(fpb) -> void; auto instructionJumpAbsolute() -> void; auto instructionJumpIndirectX() -> void; auto instructionMultiply() -> void; auto instructionNoOperation() -> void; auto instructionOverflowClear() -> void; auto instructionPull(n8&) -> void; auto instructionPullP() -> void; auto instructionPush(n8) -> void; auto instructionReturnInterrupt() -> void; auto instructionReturnSubroutine() -> void; auto instructionStop() -> void; auto instructionTestSetBitsAbsolute(bool) -> void; auto instructionTransfer(n8&, n8&) -> void; auto instructionWait() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp noinline auto disassembleInstruction(n16 address, n1 p) -> string; noinline auto disassembleInstruction() -> string; noinline auto disassembleContext() -> string; struct Flags { bool c; //carry bool z; //zero bool i; //interrupt disable bool h; //half-carry bool b; //break bool p; //page bool v; //overflow bool n; //negative operator u32() const { return c << 0 | z << 1 | i << 2 | h << 3 | b << 4 | p << 5 | v << 6 | n << 7; } auto& operator=(n8 data) { c = data.bit(0); z = data.bit(1); i = data.bit(2); h = data.bit(3); b = data.bit(4); p = data.bit(5); v = data.bit(6); n = data.bit(7); return *this; } }; struct Registers { union Pair { Pair() : w(0) {} n16 w; struct Byte { n8 order_lsb2(l, h); } byte; } pc, ya; n8 x, s; Flags p; bool wait = false; bool stop = false; } r; }; } ares-126/ares/component/processor/ssp1601/000077500000000000000000000000001415063341600204115ustar00rootroot00000000000000ares-126/ares/component/processor/ssp1601/algorithms.cpp000066400000000000000000000033111415063341600232640ustar00rootroot00000000000000auto SSP1601::test(u16 op) -> bool { auto flag = n1(op >> 8); switch(n3(op >> 4)) { case 0: return 0 == flag; //always/never case 1: return 0; //unsupported case 2: return USR0 == flag; case 3: return USR1 == flag; case 4: return C == flag; case 5: return Z == flag; case 6: return V == flag; case 7: return N == flag; } unreachable; } auto SSP1601::add(u32 source) -> void { u32 result = A + source; u32 carries = A ^ source ^ result; u32 overflow = (A ^ result) & (source ^ result); C = (carries ^ overflow) >> 31; V = overflow >> 31; A = (!OP || !V) ? result : 0x7fff'ffff; Z = A == 0; N = A >> 31; } auto SSP1601::sub(u32 source) -> void { u32 result = A - source; u32 carries = A ^ source ^ result; u32 overflow = (A ^ result) & (source ^ A); C = (carries ^ overflow) >> 31; V = overflow >> 31; A = (!OP || !V) ? result : 0x8000'0000; Z = A == 0; N = A >> 31; } auto SSP1601::cmp(u32 source) -> void { u32 result = A - source; u32 carries = A ^ source ^ result; u32 overflow = (A ^ result) & (source ^ A); C = (carries ^ overflow) >> 31; V = overflow >> 31; Z = result == 0; N = result >> 31; } auto SSP1601::and(u32 v) -> void { A &= v; Z = A == 0; N = A >> 31; } auto SSP1601::or(u32 v) -> void { A |= v; Z = A == 0; N = A >> 31; } auto SSP1601::eor(u32 v) -> void { A ^= v; Z = A == 0; N = A >> 31; } auto SSP1601::shr() -> void { A = (s32)A >> 1; Z = A == 0; N = A >> 31; } auto SSP1601::shl() -> void { A <<= 1; Z = A == 0; N = A >> 31; } auto SSP1601::neg() -> void { A = -(s32)A; Z = A == 0; N = A >> 31; } auto SSP1601::abs() -> void { if((s32)A < 0) A = -(s32)A; Z = A == 0; N = A >> 31; } ares-126/ares/component/processor/ssp1601/disassembler.cpp000066400000000000000000000210751415063341600235770ustar00rootroot00000000000000auto SSP1601::disassembleInstruction() -> string { return disassembleInstruction(PC, read(PC + 0), read(PC + 1)); } auto SSP1601::disassembleInstruction(u16 pc, u16 op, u16 imm) -> string { string o = "???"; string p; auto nameGR = [&](n4 r) -> string { switch(r) { case 0: return "-"; case 1: return "x"; case 2: return "y"; case 3: return "a"; case 4: return "st"; case 5: return "stack"; case 6: return "pc"; case 7: return "p"; case 8: return "pm0"; case 9: return "pm1"; case 10: return "pm2"; case 11: return "xst"; case 12: return "pm4"; case 13: return "pm5"; case 14: return "pmc"; case 15: return "al"; } unreachable; }; auto namePR1 = [&](s32 ri, s32 isj2, s32 modi3) -> string { u32 t = ri | isj2 | modi3; switch(t) { case 0x00: case 0x01: case 0x02: return {"(r", 0 + ri, ")"}; case 0x03: return {"(0)"}; case 0x04: case 0x05: case 0x06: return {"(r", 4 + ri, ")"}; case 0x07: return {"(0)"}; case 0x08: case 0x09: case 0x0a: return {"(r", 0 + ri, "+!)"}; case 0x0b: return {"(1)"}; case 0x0c: case 0x0d: case 0x0e: return {"(r", 4 + ri, "+!)"}; case 0x0f: return {"(1)"}; case 0x10: case 0x11: case 0x12: return {"(r", 0 + ri, "-)"}; case 0x13: return {"(2)"}; case 0x14: case 0x15: case 0x16: return {"(r", 4 + ri, "-)"}; case 0x17: return {"(2)"}; case 0x18: case 0x19: case 0x1a: return {"(r", 0 + ri, "+)"}; case 0x1b: return {"(3)"}; case 0x1c: case 0x1d: case 0x1e: return {"(r", 4 + ri, "+)"}; case 0x1f: return {"(3)"}; } unreachable; }; auto namePRo = [&](u16 op) -> string { return namePR1(op & 0x03, op >> 6 & 0x04, op << 1 & 0x18); }; auto namePR2 = [&](u16 op) -> string { n5 t = (op & 0x03) | (op >> 6 & 0x04) | (op << 1 & 0x18); switch(t) { case 0x00: case 0x01: case 0x02: return {"(r", 0 + (op & 3), ")+!"}; case 0x03: return {"(0)+!"}; case 0x04: case 0x05: case 0x06: return {"(r", 4 + (op & 3), ")+!"}; case 0x07: return {"(0)+!"}; case 0x08: break; case 0x09: break; case 0x0a: break; case 0x0b: return {"(1)+"}; case 0x0c: break; case 0x0d: break; case 0x0e: break; case 0x0f: return {"(1)+"}; case 0x10: break; case 0x11: break; case 0x12: break; case 0x13: return {"(2)+"}; case 0x14: break; case 0x15: break; case 0x16: break; case 0x17: return {"(2)+"}; case 0x18: break; case 0x19: break; case 0x1a: break; case 0x1b: return {"(3)+"}; case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: return {"(3)+"}; } return "???"; }; auto nameRAM = [&]() -> string { return {"0x", hex(op & 0x1ff, 3L)}; }; auto condition = [&]() -> string { switch(op >> 4 & 15) { case 0: return {}; case 5: return {"z=", op >> 8 & 1, ","}; case 7: return {"n=", op >> 8 & 1, ","}; }; return "?,"; }; auto im = [&]() -> string { return {"0x", hex(imm, 4L)}; }; switch(op >> 9) { //ld d,s case 0x00: { if(op == 0) { o = "nop"; break; } auto s = n4(op >> 0); auto d = n4(op >> 4); if(s == SSP_STACK && d == SSP_PC) { o = "ret"; break; } o = "ld"; p = {nameGR(op >> 4), ",", nameGR(op >> 0)}; break; } //ld d,(ri) case 0x01: { o = "ld"; p = {nameGR(op >> 4), ",", namePRo(op)}; break; } //ld (ri),s case 0x02: { o = "ld"; p = {namePRo(op), ",", nameGR(op >> 4)}; break; } //ld a,addr case 0x03: { o = "ld"; p = {"a,[0x", hex(op & 0x1ff, 3L)}; break; } //ldi d,imm case 0x04: { o = "ldi"; p = {nameGR(op >> 4), ",", im()}; break; } //ld d,((ri)) case 0x05: { o = "ld"; p = {nameGR(op >> 4), ",", namePR2(op)}; break; } //ldi (ri),imm case 0x06: { o = "ldi"; p = {namePRo(op), ",", im()}; break; } //ld addr,a case 0x07: { o = "ld"; p = {nameRAM(), ",AH"}; break; } //ld d,ri case 0x09: { o = "ld"; p = {nameGR(op >> 4), ",r", (op & 0x03) | (op >> 6 & 0x04)}; break; } //ld ri,s case 0x0a: { o = "ld"; p = {"r", (op & 0x03) | (op >> 6 & 0x04), ",", nameGR(op >> 4)}; break; } //ldi ri,simm case 0x0c ... 0x0f: { o = "ldi"; p = {"r", (op >> 8 & 7), ",0x", hex(op & 0xff, 2L)}; break; } //call cond,addr case 0x24: { o = "call"; p = {condition(), im()}; break; } //ld d,(a) case 0x25: { o = "ld"; p = {nameGR(op >> 4), ",(a)"}; break; } //bra cond,addr case 0x26: { o = "bra"; p = {condition(), im()}; break; } //mod cond,op case 0x48: { switch(op & 7) { case 2: o = "shr"; break; case 3: o = "shl"; break; case 6: o = "neg"; break; case 7: o = "abs"; break; default: o = "???"; break; } p = {condition(), o}; break; } //mpys case 0x1b: { o = "mpys"; break; } //mpya (rj),(ri),b case 0x4b: { o = "mpya"; p = {namePR1(op & 0x03, 0, op << 1 & 0x10), ",", namePR1(op >> 4 & 0x03, 4, op >> 3 & 0x18)}; break; } //mld (rj),(ri),b case 0x5b: { o = "mld"; p = {namePR1(op & 0x03, 0, op << 1 & 0x10), ",", namePR1(op >> 4 & 0x03, 4, op >> 3 & 0x18)}; break; } //alu a,s case 0x10: o = "sub"; p = nameGR(op >> 4); break; case 0x30: o = "cmp"; p = nameGR(op >> 4); break; case 0x40: o = "add"; p = nameGR(op >> 4); break; case 0x50: o = "and"; p = nameGR(op >> 4); break; case 0x60: o = "or"; p = nameGR(op >> 4); break; case 0x70: o = "eor"; p = nameGR(op >> 4); break; //alu a,(ri) case 0x11: o = "sub"; p = namePRo(op); break; case 0x31: o = "cmp"; p = namePRo(op); break; case 0x41: o = "add"; p = namePRo(op); break; case 0x51: o = "and"; p = namePRo(op); break; case 0x61: o = "or"; p = namePRo(op); break; case 0x71: o = "eor"; p = namePRo(op); break; //alu a,addr case 0x13: o = "sub"; p = {"[0x", hex(op & 0x1ff, 3L)}; break; case 0x33: o = "cmp"; p = {"[0x", hex(op & 0x1ff, 3L)}; break; case 0x43: o = "add"; p = {"[0x", hex(op & 0x1ff, 3L)}; break; case 0x53: o = "and"; p = {"[0x", hex(op & 0x1ff, 3L)}; break; case 0x63: o = "or" ; p = {"[0x", hex(op & 0x1ff, 3L)}; break; case 0x73: o = "eor"; p = {"[0x", hex(op & 0x1ff, 3L)}; break; //alu a,imm case 0x14: o = "sub"; p = im(); break; case 0x34: o = "cmp"; p = im(); break; case 0x44: o = "add"; p = im(); break; case 0x54: o = "and"; p = im(); break; case 0x64: o = "or"; p = im(); break; case 0x74: o = "eor"; p = im(); break; //alu a,((ri)) case 0x15: o = "sub"; p = namePR2(op); break; case 0x35: o = "cmp"; p = namePR2(op); break; case 0x45: o = "add"; p = namePR2(op); break; case 0x55: o = "and"; p = namePR2(op); break; case 0x65: o = "or"; p = namePR2(op); break; case 0x75: o = "eor"; p = namePR2(op); break; //alu a,ri case 0x19: o = "sub"; p = {"r", (op & 0x03) | (op >> 6 & 4)}; break; case 0x39: o = "cmp"; p = {"r", (op & 0x03) | (op >> 6 & 4)}; break; case 0x49: o = "add"; p = {"r", (op & 0x03) | (op >> 6 & 4)}; break; case 0x59: o = "and"; p = {"r", (op & 0x03) | (op >> 6 & 4)}; break; case 0x69: o = "or" ; p = {"r", (op & 0x03) | (op >> 6 & 4)}; break; case 0x79: o = "eor"; p = {"r", (op & 0x03) | (op >> 6 & 4)}; break; //alu simm case 0x1c: o = "sub"; p = {"0x", hex(op & 0xff, 2L)}; break; case 0x3c: o = "cmp"; p = {"0x", hex(op & 0xff, 2L)}; break; case 0x4c: o = "add"; p = {"0x", hex(op & 0xff, 2L)}; break; case 0x5c: o = "and"; p = {"0x", hex(op & 0xff, 2L)}; break; case 0x6c: o = "or"; p = {"0x", hex(op & 0xff, 2L)}; break; case 0x7c: o = "eor"; p = {"0x", hex(op & 0xff, 2L)}; break; } string s; while(o.size() < 5) o.append(" "); s.append(o, " "); while(p.size() < 20) p.append(" "); s.append(p); return s; } auto SSP1601::disassembleContext() -> string { string s; s.append("P:", hex(P >> 16, 4L), "'", hex(P, 4L), " "); s.append("A:", hex(A >> 16, 4L), "'", hex(A, 4L), " "); s.append("X:", hex(X, 4L), " "); s.append("Y:", hex(Y, 4L), " "); s.append("ST:",hex(ST,4L), " "); s.append("R0:", hex(R[0], 2L), " "); s.append("R1:", hex(R[1], 2L), " "); s.append("R2:", hex(R[2], 2L), " "); s.append("R3:", hex(R[3], 2L), " "); s.append("R4:", hex(R[4], 2L), " "); s.append("R5:", hex(R[5], 2L), " "); s.append("R6:", hex(R[6], 2L), " "); s.append("R7:", hex(R[7], 2L), " "); s.append(C ? "C" : "c"); s.append(Z ? "Z" : "z"); s.append(V ? "V" : "v"); s.append(N ? "N" : "n"); s.append(" ", STACK); return s; } ares-126/ares/component/processor/ssp1601/instructions.cpp000066400000000000000000000134111415063341600236610ustar00rootroot00000000000000//0xfff8 = reset //0xfffa = int0 (unknown) //0xfffc = int1 (hblank) //0xfffe = int2 (unknown) auto SSP1601::interrupt() -> u16 { if(!IE || !IRQ) return false; IE = 0; if(STACK >= 6) STACK = 0; FRAME[STACK++] = PC; if(IRQ.bit(0)) { PC = read(0xfffc); IRQ.bit(0) = 0; STACK = 0; return 0xfffc; } if(IRQ.bit(1)) { PC = read(0xfffd); IRQ.bit(1) = 0; return 0xfffd; } if(IRQ.bit(2)) { PC = read(0xfffe); IRQ.bit(2) = 0; return 0xfffe; } if(IRQ.bit(3)) { PC = read(0xffff); IRQ.bit(3) = 0; return 0xffff; } return false; } auto SSP1601::instruction() -> void { u16 op = fetch(); switch(op >> 9) { //ld d,s case 0x00: { if(op == 0) break; //nop auto s = n4(op >> 0); auto d = n4(op >> 4); if(s == SSP_P && d == SSP_A) { A = updateP(); } else { writeGR(d, readGR(s)); } break; } //ld d,(ri) case 0x01: { auto d = n4(op >> 4); writeGR(d, readPR1(op)); break; } //ld (ri),s case 0x02: { auto s = n4(op >> 4); writePR1(op, readGR(s)); break; } //ld a,addr case 0x03: { AH = RAM[n9(op)]; break; } //ldi d,imm case 0x04: { auto d = n4(op >> 4); writeGR(d, fetch()); break; } //ld d,((ri)) case 0x05: { auto d = n4(op >> 4); writeGR(d, readPR2(op)); break; } //ldi (ri),imm case 0x06: { writePR1(op, fetch()); break; } //ld addr,a case 0x07: { RAM[n9(op)] = AH; break; } //ld d,ri case 0x09: { auto d = n4(op >> 4); auto s = n2(op >> 0) | (op >> 6 & 4); writeGR(d, R[s]); break; } //ld ri,s case 0x0a: { auto s = n4(op >> 4); auto d = n2(op >> 0) | (op >> 6 & 4); R[d] = readGR(s); break; } //ldi ri,simm case 0x0c ... 0x0f: { R[n3(op >> 8)] = n8(op); break; } //call cond,addr case 0x24: { auto pc = fetch(); if(!test(op)) break; if(STACK >= 6) STACK = 0; FRAME[STACK++] = PC; PC = pc; break; } //ld d,(a) case 0x25: { auto d = n4(op >> 4); writeGR(d, read(AH)); break; } //bra cond,addr case 0x26: { auto pc = fetch(); if(!test(op)) break; PC = pc; break; } //mod cond,op case 0x48: { if(!test(op)) break; switch(n3(op)) { case 2: shr(); break; case 3: shl(); break; case 6: neg(); break; case 7: abs(); break; } break; } //mpys case 0x1b: { A -= updateP(); Z = A == 0; N = A >> 31; X = readPR1(op >> 0, 0, op >> 2); Y = readPR1(op >> 4, 1, op >> 6); break; } //mpya (rj),(ri),b case 0x4b: { A += updateP(); Z = A == 0; N = A >> 31; X = readPR1(op >> 0, 0, op >> 2); Y = readPR1(op >> 4, 1, op >> 6); break; } //mld (rj),(ri),b case 0x5b: { A = 0; C = 0; Z = 1; V = 0; N = 0; X = readPR1(op >> 0, 0, op >> 2); Y = readPR1(op >> 4, 1, op >> 6); break; } //alu a,s case 0x10: { auto v = n4(op) == 3 ? A : n4(op) == 7 ? updateP() : n32(readGR(n4(op)) << 16); sub(v); break; } case 0x30: { auto v = n4(op) == 3 ? A : n4(op) == 7 ? updateP() : n32(readGR(n4(op)) << 16); cmp(v); break; } case 0x40: { auto v = n4(op) == 3 ? A : n4(op) == 7 ? updateP() : n32(readGR(n4(op)) << 16); add(v); break; } case 0x50: { auto v = n4(op) == 3 ? A : n4(op) == 7 ? updateP() : n32(readGR(n4(op)) << 16); and(v); break; } case 0x60: { auto v = n4(op) == 3 ? A : n4(op) == 7 ? updateP() : n32(readGR(n4(op)) << 16); or (v); break; } case 0x70: { auto v = n4(op) == 3 ? A : n4(op) == 7 ? updateP() : n32(readGR(n4(op)) << 16); eor(v); break; } //alu a,(ri) case 0x11: { auto v = readPR1(op) << 16; sub(v); break; } case 0x31: { auto v = readPR1(op) << 16; cmp(v); break; } case 0x41: { auto v = readPR1(op) << 16; add(v); break; } case 0x51: { auto v = readPR1(op) << 16; and(v); break; } case 0x61: { auto v = readPR1(op) << 16; or (v); break; } case 0x71: { auto v = readPR1(op) << 16; eor(v); break; } //alu a,addr case 0x13: { auto v = RAM[n9(op)] << 16; sub(v); break; } case 0x33: { auto v = RAM[n9(op)] << 16; cmp(v); break; } case 0x43: { auto v = RAM[n9(op)] << 16; add(v); break; } case 0x53: { auto v = RAM[n9(op)] << 16; and(v); break; } case 0x63: { auto v = RAM[n9(op)] << 16; or (v); break; } case 0x73: { auto v = RAM[n9(op)] << 16; eor(v); break; } //alu a,imm case 0x14: { auto v = fetch() << 16; sub(v); break; } case 0x34: { auto v = fetch() << 16; cmp(v); break; } case 0x44: { auto v = fetch() << 16; add(v); break; } case 0x54: { auto v = fetch() << 16; and(v); break; } case 0x64: { auto v = fetch() << 16; or (v); break; } case 0x74: { auto v = fetch() << 16; eor(v); break; } //alu a,((ri)) case 0x15: { auto v = readPR2(op) << 16; sub(v); break; } case 0x35: { auto v = readPR2(op) << 16; cmp(v); break; } case 0x45: { auto v = readPR2(op) << 16; add(v); break; } case 0x55: { auto v = readPR2(op) << 16; and(v); break; } case 0x65: { auto v = readPR2(op) << 16; or (v); break; } case 0x75: { auto v = readPR2(op) << 16; eor(v); break; } //alu a,ri case 0x19: { auto v = R[n2(op) | (op >> 6 & 4)] << 16; sub(v); break; } case 0x39: { auto v = R[n2(op) | (op >> 6 & 4)] << 16; cmp(v); break; } case 0x49: { auto v = R[n2(op) | (op >> 6 & 4)] << 16; add(v); break; } case 0x59: { auto v = R[n2(op) | (op >> 6 & 4)] << 16; and(v); break; } case 0x69: { auto v = R[n2(op) | (op >> 6 & 4)] << 16; or (v); break; } case 0x79: { auto v = R[n2(op) | (op >> 6 & 4)] << 16; eor(v); break; } //alu simm case 0x1c: { auto v = u8(op) << 16; sub(v); break; } case 0x3c: { auto v = u8(op) << 16; cmp(v); break; } case 0x4c: { auto v = u8(op) << 16; add(v); break; } case 0x5c: { auto v = u8(op) << 16; and(v); break; } case 0x6c: { auto v = u8(op) << 16; or (v); break; } case 0x7c: { auto v = u8(op) << 16; eor(v); break; } } updateP(); } ares-126/ares/component/processor/ssp1601/memory.cpp000066400000000000000000000024621415063341600224310ustar00rootroot00000000000000auto SSP1601::fetch() -> u16 { return read(PC++); } auto SSP1601::readPR1(u16 op) -> u16 { return readPR1(op >> 0, op >> 8, op >> 2); } auto SSP1601::readPR1(n2 r, n1 bank, n2 mode) -> u16 { auto p = &RAM[bank << 8]; auto i = &R[bank << 2]; if(r == 3) return p[mode]; if(mode == 0) return p[i[r]]; if(mode == 1) return p[i[r]++]; auto v = p[i[r]]; auto mask = (1 << RPL) - 1; if(mode == 2) { if(!RPL) return i[r]--, v; i[r] = (i[r] & ~mask) | (i[r] - 1 & mask); } if(mode == 3) { if(!RPL) return i[r]++, v; i[r] = (i[r] & ~mask) | (i[r] + 1 & mask); } return v; } auto SSP1601::writePR1(u16 op, u16 v) -> void { n2 r = op >> 0; n1 bank = op >> 8; n2 mode = op >> 2; auto p = &RAM[bank << 8]; auto i = &R[bank << 2]; if(r == 3) return (void)(p[mode] = v); if(mode == 0) return (void)(p[i[r]] = v); if(mode == 1) return (void)(p[i[r]++] = v); if(mode == 2) return (void)(p[i[r]--] = v); if(mode == 3) return (void)(p[i[r]++] = v); } auto SSP1601::readPR2(u16 op) -> u16 { n2 r = op >> 0; n1 bank = op >> 8; n2 mode = op >> 2; auto p = &RAM[bank << 8]; auto i = &R[bank << 2]; if(r == 3) return read(p[mode]++); if(mode == 0) return read(p[i[r]]++); if(mode == 1) return 0; if(mode == 2) return 0; if(mode == 3) return 0; unreachable; } ares-126/ares/component/processor/ssp1601/registers.cpp000066400000000000000000000023271415063341600231300ustar00rootroot00000000000000auto SSP1601::readGR(n4 r) -> n16 { switch(r) { case 0: return 0xffff; case 1: return X; case 2: return Y; case 3: return AH; case 4: return ST; case 5: if(s16(--STACK) < 0) STACK = 5; return FRAME[STACK]; case 6: return PC; case 7: return updateP() >> 16; case 8: return readEXT(r); case 9: return readEXT(r); case 10: return readEXT(r); case 11: return readEXT(r); case 12: return readEXT(r); case 13: return readEXT(r); case 14: return readEXT(r); case 15: return readEXT(r), AL; } unreachable; } auto SSP1601::writeGR(n4 r, u16 v) -> void { switch(r) { case 0: return; //read-only case 1: X = v; return; case 2: Y = v; return; case 3: AH = v; return; case 4: ST = v; return; case 5: if(STACK >= 6) STACK = 0; FRAME[STACK++] = v; return; case 6: PC = v; return; case 7: return; //read-only case 8: writeEXT(r, v); return; case 9: writeEXT(r, v); return; case 10: writeEXT(r, v); return; case 11: writeEXT(r, v); return; case 12: writeEXT(r, v); return; case 13: writeEXT(r, v); return; case 14: writeEXT(r, v); return; case 15: writeEXT(r, v); AL = v; return; } } auto SSP1601::updateP() -> n32 { return P = (s16)X * (s16)Y << !MACS; } ares-126/ares/component/processor/ssp1601/serialization.cpp000066400000000000000000000002171415063341600237720ustar00rootroot00000000000000auto SSP1601::serialize(serializer& s) -> void { s(RAM); s(FRAME); s(X); s(Y); s(A); s(ST); s(STACK); s(PC); s(P); s(R); } ares-126/ares/component/processor/ssp1601/ssp1601.cpp000066400000000000000000000014711415063341600222350ustar00rootroot00000000000000#include #include "ssp1601.hpp" namespace ares { #define AL A.bit( 0,15) #define AH A.bit(16,31) #define RPL ST.bit( 0,2) #define RB ST.bit( 3,4) #define USR0 ST.bit( 5) #define USR1 ST.bit( 6) #define IE ST.bit( 7) #define OP ST.bit( 8) #define MACS ST.bit( 9) #define GPI0 ST.bit(10) #define GPI1 ST.bit(11) #define C ST.bit(12) #define Z ST.bit(13) #define V ST.bit(14) #define N ST.bit(15) #include "algorithms.cpp" #include "registers.cpp" #include "memory.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto SSP1601::power() -> void { for(auto& word : RAM) word = 0; for(auto& word : FRAME) word = 0; X = 0; Y = 0; A = 0; ST = 0; STACK = 0; PC = 0; P = 0; for(auto& byte : R) byte = 0; IE = 1; IRQ = 1; } } ares-126/ares/component/processor/ssp1601/ssp1601.hpp000066400000000000000000000025241415063341600222420ustar00rootroot00000000000000#pragma once //Samsung SSP1601 namespace ares { struct SSP1601 { virtual auto read(u16 address) -> u16 = 0; virtual auto readEXT(n3 r) -> u16 = 0; virtual auto writeEXT(n3 r, u16 v) -> void = 0; //ssp1601.cpp auto power() -> void; //algorithms.cpp auto test(u16 op) -> bool; auto add(u32) -> void; auto sub(u32) -> void; auto cmp(u32) -> void; auto and(u32) -> void; auto or (u32) -> void; auto eor(u32) -> void; auto shr() -> void; auto shl() -> void; auto neg() -> void; auto abs() -> void; //registers.cpp auto readGR(n4 r) -> n16; auto writeGR(n4 r, u16 v) -> void; auto updateP() -> n32; //memory.cpp auto fetch() -> u16; auto readPR1(u16 op) -> u16; auto readPR1(n2 r, n1 bank, n2 mode) -> u16; auto writePR1(u16 op, u16 v) -> void; auto readPR2(u16 op) -> u16; //instructions.cpp auto interrupt() -> u16; auto instruction() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp auto disassembleInstruction() -> string; auto disassembleInstruction(u16 pc, u16 op, u16 imm) -> string; auto disassembleContext() -> string; enum : u32 { SSP_R0, SSP_X, SSP_Y, SSP_A, SSP_ST, SSP_STACK, SSP_PC, SSP_P, }; n16 RAM[512]; n16 FRAME[6]; n16 X; n16 Y; n32 A; n16 ST; n16 STACK; n16 PC; n32 P; n8 R[8]; n4 IRQ; }; } ares-126/ares/component/processor/tlcs900h/000077500000000000000000000000001415063341600206425ustar00rootroot00000000000000ares-126/ares/component/processor/tlcs900h/algorithms.cpp000066400000000000000000000054511415063341600235240ustar00rootroot00000000000000template<> auto TLCS900H::parity(n8 data) const -> bool { data ^= data >> 4; data ^= data >> 2; data ^= data >> 1; return !(data & 1); } template<> auto TLCS900H::parity(n16 data) const -> bool { data ^= data >> 8; data ^= data >> 4; data ^= data >> 2; data ^= data >> 1; return !(data & 1); } template<> auto TLCS900H::parity(n32 data) const -> bool { return Undefined; } // template auto TLCS900H::algorithmAdd(T target, T source, n1 carry) -> T { T result = target + source + carry; T carries = target ^ source ^ result; T overflow = (target ^ result) & (source ^ result); CF = T(carries ^ overflow).bit(-1); NF = 0; VF = overflow.bit(-1); HF = carries.bit(4); if constexpr(T::bits() == 32) HF = Undefined; ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmAnd(T target, T source) -> T { T result = target & source; CF = 0; NF = 0; VF = parity(result); HF = 1; ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmDecrement(T target, T source) -> T { T result = target - source; NF = 1; VF = T((target ^ source) & (target ^ result)).bit(-1); HF = T(target ^ source ^ result).bit(4); ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmIncrement(T target, T source) -> T { T result = target + source; NF = 0; VF = T((target ^ result) & (source ^ result)).bit(-1); HF = T(target ^ source ^ result).bit(4); ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmOr(T target, T source) -> T { T result = target | source; CF = 0; NF = 0; VF = parity(result); HF = 0; ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmRotated(T result) -> T { NF = 0; VF = parity(result); HF = 0; ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmShifted(T result) -> T { NF = 0; VF = parity(result); HF = 0; ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmSubtract(T target, T source, n1 carry) -> T { T result = target - source - carry; T carries = target ^ source ^ result; T overflow = (target ^ result) & (source ^ target); CF = T(carries ^ overflow).bit(-1); NF = 1; VF = overflow.bit(-1); HF = carries.bit(4); if constexpr(T::bits() == 32) HF = Undefined; ZF = result == 0; SF = result.bit(-1); return result; } template auto TLCS900H::algorithmXor(T target, T source) -> T { T result = target ^ source; CF = 0; NF = 0; VF = parity(result); HF = 0; ZF = result == 0; SF = result.bit(-1); return result; } ares-126/ares/component/processor/tlcs900h/conditions.cpp000066400000000000000000000021131415063341600235140ustar00rootroot00000000000000auto TLCS900H::condition(n4 code) -> bool { switch(code) { case 0: return 0 == 1; //F (false) case 1: return (SF ^ VF) == 1; //LT (signed less than) case 2: return (ZF | SF ^ VF) == 1; //LE (signed less than or equal) case 3: return (CF | ZF) == 1; //ULE (unsigned less than or equal) case 4: return VF == 1; //OV (overflow) case 5: return SF == 1; //MI (minus) case 6: return ZF == 1; //EQ (equal) case 7: return CF == 1; //ULT (unsigned less than) case 8: return 0 == 0; //T (true) case 9: return (SF ^ VF) == 0; //GE (signed greater than or equal) case 10: return (ZF | SF ^ VF) == 0; //GT (signed greater than) case 11: return (CF | ZF) == 0; //UGT (unsigned greater than) case 12: return VF == 0; //NOV (no overflow) case 13: return SF == 0; //PL (plus) case 14: return ZF == 0; //NE (not equal) case 15: return CF == 0; //UGE (unsigned greater than or equal) } unreachable; } ares-126/ares/component/processor/tlcs900h/control-registers.cpp000066400000000000000000000066071415063341600250440ustar00rootroot00000000000000template<> auto TLCS900H::map(ControlRegister register) const -> maybe { switch(register.id) { #define r(id, name) case id: return r.name; r(0x00, dmas[0].b.b0) r(0x01, dmas[0].b.b1) r(0x02, dmas[0].b.b2) r(0x03, dmas[0].b.b3) r(0x04, dmas[1].b.b0) r(0x05, dmas[1].b.b1) r(0x06, dmas[1].b.b2) r(0x07, dmas[1].b.b3) r(0x08, dmas[2].b.b0) r(0x09, dmas[2].b.b1) r(0x0a, dmas[2].b.b2) r(0x0b, dmas[2].b.b3) r(0x0c, dmas[3].b.b0) r(0x0d, dmas[3].b.b1) r(0x0e, dmas[3].b.b2) r(0x0f, dmas[3].b.b3) r(0x10, dmad[0].b.b0) r(0x11, dmad[0].b.b1) r(0x12, dmad[0].b.b2) r(0x13, dmad[0].b.b3) r(0x14, dmad[1].b.b0) r(0x15, dmad[1].b.b1) r(0x16, dmad[1].b.b2) r(0x17, dmad[1].b.b3) r(0x18, dmad[2].b.b0) r(0x19, dmad[2].b.b1) r(0x1a, dmad[2].b.b2) r(0x1b, dmad[2].b.b3) r(0x1c, dmad[3].b.b0) r(0x1d, dmad[3].b.b1) r(0x1e, dmad[3].b.b2) r(0x1f, dmad[3].b.b3) r(0x20, dmam[0].b.b0) r(0x21, dmam[0].b.b1) r(0x22, dmam[0].b.b2) r(0x23, dmam[0].b.b3) r(0x24, dmam[1].b.b0) r(0x25, dmam[1].b.b1) r(0x26, dmam[1].b.b2) r(0x27, dmam[1].b.b3) r(0x28, dmam[2].b.b0) r(0x29, dmam[2].b.b1) r(0x2a, dmam[2].b.b2) r(0x2b, dmam[2].b.b3) r(0x2c, dmam[3].b.b0) r(0x2d, dmam[3].b.b1) r(0x2e, dmam[3].b.b3) r(0x2f, dmam[3].b.b3) r(0x3c, intnest.b.b0) r(0x3d, intnest.b.b1) #undef r } return nothing; } template<> auto TLCS900H::map(ControlRegister register) const -> maybe { switch(register.id & ~1) { #define r(id, name) case id: return r.name; r(0x00, dmas[0].w.w0) r(0x02, dmas[0].w.w1) r(0x04, dmas[1].w.w0) r(0x06, dmas[1].w.w1) r(0x08, dmas[2].w.w0) r(0x0a, dmas[2].w.w1) r(0x0c, dmas[3].w.w0) r(0x0e, dmas[3].w.w1) r(0x10, dmad[0].w.w0) r(0x12, dmad[0].w.w1) r(0x14, dmad[1].w.w0) r(0x16, dmad[1].w.w1) r(0x18, dmad[2].w.w0) r(0x1a, dmad[2].w.w1) r(0x1c, dmad[3].w.w0) r(0x1e, dmad[3].w.w1) r(0x20, dmam[0].w.w0) r(0x22, dmam[0].w.w1) r(0x24, dmam[1].w.w0) r(0x26, dmam[1].w.w1) r(0x28, dmam[2].w.w0) r(0x2a, dmam[2].w.w1) r(0x2c, dmam[3].w.w0) r(0x2e, dmam[3].w.w1) r(0x3c, intnest.w.w0) #undef r } return nothing; } template<> auto TLCS900H::map(ControlRegister register) const -> maybe { switch(register.id & ~1) { #define r(id, name) case id: return r.name; r(0x00, dmas[0].l.l0) r(0x04, dmas[1].l.l0) r(0x08, dmas[2].l.l0) r(0x0c, dmas[3].l.l0) r(0x10, dmad[0].l.l0) r(0x14, dmad[1].l.l0) r(0x18, dmad[2].l.l0) r(0x1c, dmad[3].l.l0) r(0x20, dmam[0].l.l0) r(0x24, dmam[1].l.l0) r(0x28, dmam[2].l.l0) r(0x2c, dmam[3].l.l0) r(0x3c, intnest.l.l0) #undef r } return nothing; } template<> auto TLCS900H::load(ControlRegister register) const -> n8 { return map(register)(Undefined); } template<> auto TLCS900H::load(ControlRegister register) const -> n16 { return map(register)(Undefined); } template<> auto TLCS900H::load(ControlRegister register) const -> n32 { return map(register)(Undefined); } template<> auto TLCS900H::store(ControlRegister register, n32 data) -> void { if(auto r = map(register)) r() = data; } template<> auto TLCS900H::store(ControlRegister register, n32 data) -> void { if(auto r = map(register)) r() = data; } template<> auto TLCS900H::store(ControlRegister register, n32 data) -> void { //INTNEST is 16-bit: this isn't the nicest way to handle this, but ... if((register.id & ~3) == 0x3c) data = (n16)data; if(auto r = map(register)) r() = data; } ares-126/ares/component/processor/tlcs900h/disassembler.cpp000066400000000000000000001042371415063341600240320ustar00rootroot00000000000000noinline auto TLCS900H::disassembleInstruction() -> string { string output; auto pc = load(PC); n8 op[8], ops; auto read8 = [&]() -> n8 { return op[ops++] = disassembleRead(pc++); }; auto read16 = [&]() -> n16 { n8 d0 = read8(); n8 d1 = read8(); return d0 << 0 | d1 << 8; }; auto read24 = [&]() -> n24 { n8 d0 = read8(); n8 d1 = read8(); n8 d2 = read8(); return d0 << 0 | d1 << 8 | d2 << 16; }; auto read32 = [&]() -> n32 { n8 d0 = read8(); n8 d1 = read8(); n8 d2 = read8(); n8 d3 = read8(); return d0 << 0 | d1 << 8 | d2 << 16 | d3 << 24; }; enum : u32 { Null, Text, //text Condition, //condition Register, //register.size Control, //register.size Immediate, //immediate.size Displacement, //displacement.size DisplacementPC, //pc+displacement.size IndirectRegister, //op.size (r32) IndirectRegisterDecrement, //op.size (-r32) IndirectRegisterIncrement, //op.size (r32+) IndirectRegisterRegister8, //op.size (r32+r8) IndirectRegisterRegister16, //op.size (r32+r16) IndirectRegisterDisplacement8, //op.size (r32+d8) IndirectRegisterDisplacement16, //op.size (r32+d16) IndirectImmediate8, //(i8) IndirectImmediate16, //(i16) IndirectImmediate24, //(i24) }; //name [lhs[,rhs]] string name; struct Operand { explicit operator bool() const { return _mode != Null; } auto mode() const { return _mode; } auto size() const { return _size; } auto text() const { return _text; } auto condition() const { return _condition; } auto register() const { return _register; } auto registerAdd() const { return _registerAdd; } auto immediate() const { return _immediate; } auto displacement() const { return _displacement; } auto mode(natural mode_) -> void { _mode = mode_; } auto size(natural size_) -> void { _size = size_; } auto null() -> void { mode(Null); } auto text(string text_) -> void { mode(Text); _text = text_; } auto condition(n4 condition_) -> void { mode(Condition); _condition = condition_; } auto register(natural size_, n8 register_) -> void { mode(Register); size(size_); _register = register_; } auto register3(natural size_, n3 register_) -> void { mode(Register); size(size_); _register = lookup(size_, register_); } auto control(natural size_, n8 register_) -> void { mode(Control); size(size_); _register = register_; } auto immediate(natural size_, natural immediate_) -> void { mode(Immediate); size(size_); _immediate = immediate_; } auto displacement(natural size_, natural displacement_) -> void { mode(Displacement); size(size_); _displacement = displacement_; } auto displacementPC(natural size_, natural displacement_) -> void { mode(DisplacementPC); size(size_); _displacement = displacement_; } auto indirectRegister(natural size_, n8 register_) -> void { mode(IndirectRegister); size(size_); _register = register_; } auto indirectRegister3(natural size_, n3 register_) -> void { mode(IndirectRegister); size(size_); _register = lookup(32, register_); } auto indirectRegisterDecrement(natural size_, n8 register_) -> void { mode(IndirectRegisterDecrement); size(size_); _register = register_; } auto indirectRegisterIncrement(natural size_, n8 register_) -> void { mode(IndirectRegisterIncrement); size(size_); _register = register_; } auto indirectRegister3Increment(natural size_, n3 register_) -> void { mode(IndirectRegisterIncrement); size(size_); _register = lookup(32, register_); } auto indirectRegisterRegister8(natural size_, n8 register32, n8 register8) -> void { mode(IndirectRegisterRegister8); size(size_); _register = register32; _registerAdd = register8; } auto indirectRegisterRegister16(natural size_, n8 register32, n8 register16) -> void { mode(IndirectRegisterRegister16); size(size_); _register = register32; _registerAdd = register16; } auto indirectRegister3Displacement8(natural size_, n3 register_, n8 displacement_) -> void { mode(IndirectRegisterDisplacement8); size(size_); _register = lookup(32, register_); _displacement = displacement_; } auto indirectRegisterDisplacement16(natural size_, n8 register_, n16 displacement_) -> void { mode(IndirectRegisterDisplacement16); size(size_); _register = register_; _displacement = displacement_; } auto indirectImmediate8(natural size_, n8 immediate_) -> void { mode(IndirectImmediate8); size(size_); _immediate = immediate_; } auto indirectImmediate16(natural size_, n16 immediate_) -> void { mode(IndirectImmediate16); size(size_); _immediate = immediate_; } auto indirectImmediate24(natural size_, n24 immediate_) -> void { mode(IndirectImmediate24); size(size_); _immediate = immediate_; } private: natural _mode = Null; natural _size; string _text; natural _condition; natural _register; natural _registerAdd; natural _immediate; natural _displacement; static auto lookup(natural size, n3 register) -> n8 { if(size == 8) return from_array<0xe1,0xe0,0xe5,0xe4,0xe9,0xe8,0xed,0xec>(register); if(size == 16) return from_array<0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc>(register); if(size == 32) return from_array<0xe0,0xe4,0xe8,0xec,0xf0,0xf4,0xf8,0xfc>(register); return 0; } } lhs, rhs; boolean opRegister; boolean opSourceMemory; boolean opTargetMemory; static const natural opSizes[] = {8, 16, 32, 0}; //0xc0 - 0xf5 use combined logic switch cases: #define opSize opSizes[fetch.bit(4,5)] //extract the size from the opcode fetch switch(auto fetch = read8()) { case 0x00: name = "nop"; break; case 0x01: break; //"normal" (not present on 900/H) case 0x02: name = "push"; lhs.text("sr"); break; case 0x03: name = "pop"; lhs.text("sr"); break; case 0x04: break; //"max" or "min" (not present on 900/H) case 0x05: name = "halt"; break; case 0x06: name = "ei"; lhs.immediate(3, (n3)read8()); if(lhs.immediate() == 7) name = "di", lhs.null(); break; case 0x07: name = "reti"; break; case 0x08: name = "ld"; lhs.indirectImmediate8(8, read8()); rhs.immediate(8, read8()); break; case 0x09: name = "push"; lhs.immediate(8, read8()); break; case 0x0a: name = "ldw"; lhs.indirectImmediate8(8, read8()); rhs.immediate(16, read16()); break; case 0x0b: name = "pushw"; lhs.immediate(16, read16()); break; case 0x0c: name = "incf"; break; case 0x0d: name = "decf"; break; case 0x0e: name = "ret"; break; case 0x0f: name = "retd"; lhs.displacement(16, read16()); break; case 0x10: name = "rcf"; break; case 0x11: name = "scf"; break; case 0x12: name = "ccf"; break; case 0x13: name = "zcf"; break; case 0x14: name = "push"; lhs.register3(8, A.id); break; case 0x15: name = "pop"; lhs.register3(8, A.id); break; case 0x16: name = "ex"; lhs.text("f"); rhs.text("f'"); break; case 0x17: name = "ldf"; lhs.immediate(2, (n2)read8()); break; case 0x18: name = "push"; lhs.text("f"); break; case 0x19: name = "pop"; lhs.text("f"); break; case 0x1a: name = "jp"; lhs.immediate(16, read16()); break; case 0x1b: name = "jp"; lhs.immediate(24, read24()); break; case 0x1c: name = "call"; lhs.immediate(16, read16()); break; case 0x1d: name = "call"; lhs.immediate(24, read24()); break; case 0x1e: name = "calr"; lhs.displacementPC(16, read16()); break; case 0x1f: break; case 0x20 ... 0x27: name = "ld"; lhs.register3(8, fetch); rhs.immediate(8, read8()); break; case 0x28 ... 0x2f: name = "push"; lhs.register3(16, fetch); break; case 0x30 ... 0x37: name = "ld"; lhs.register3(16, fetch); rhs.immediate(16, read16()); break; case 0x38 ... 0x3f: name = "push"; lhs.register3(32, fetch); break; case 0x40 ... 0x47: name = "ld"; lhs.register3(32, fetch); rhs.immediate(32, read32()); break; case 0x48 ... 0x4f: name = "pop"; lhs.register3(16, fetch); break; case 0x50 ... 0x5f: name = "pop"; lhs.register3(32, fetch); break; case 0x60 ... 0x6f: name = "jr"; lhs.condition(fetch); rhs.displacementPC(8, read8()); break; case 0x70 ... 0x7f: name = "jrl"; lhs.condition(fetch); rhs.displacementPC(16, read16()); break; case 0x80 ... 0x87: opSourceMemory = true; lhs.indirectRegister3(8, fetch); break; case 0x88 ... 0x8f: opSourceMemory = true; lhs.indirectRegister3Displacement8(8, fetch, read8()); break; case 0x90 ... 0x97: opSourceMemory = true; lhs.indirectRegister3(16, fetch); break; case 0x98 ... 0x9f: opSourceMemory = true; lhs.indirectRegister3Displacement8(16, fetch, read8()); break; case 0xa0 ... 0xa7: opSourceMemory = true; lhs.indirectRegister3(32, fetch); break; case 0xa8 ... 0xaf: opSourceMemory = true; lhs.indirectRegister3Displacement8(32, fetch, read8()); break; case 0xb0 ... 0xb7: opTargetMemory = true; lhs.indirectRegister3(0, fetch); break; case 0xb8 ... 0xbf: opTargetMemory = true; lhs.indirectRegister3Displacement8(0, fetch, read8()); break; case 0xc0: case 0xd0: case 0xe0: case 0xf0: opSourceMemory = fetch < 0xf0; opTargetMemory = !opSourceMemory; lhs.indirectImmediate8(opSize, read8()); break; case 0xc1: case 0xd1: case 0xe1: case 0xf1: opSourceMemory = fetch < 0xf0; opTargetMemory = !opSourceMemory; lhs.indirectImmediate16(opSize, read16()); break; case 0xc2: case 0xd2: case 0xe2: case 0xf2: opSourceMemory = fetch < 0xf0; opTargetMemory = !opSourceMemory; lhs.indirectImmediate24(opSize, read24()); break; case 0xc3: case 0xd3: case 0xe3: case 0xf3: { opSourceMemory = fetch < 0xf0; opTargetMemory = !opSourceMemory; auto data = read8(); if((n2)data == 0) lhs.indirectRegister(opSize, data); if((n2)data == 1) lhs.indirectRegisterDisplacement16(opSize, data, read16()); if(data == 0x03) { auto r32 = read8(); lhs.indirectRegisterRegister8(opSize, r32, read8()); } if(data == 0x07) { auto r32 = read8(); lhs.indirectRegisterRegister16(opSize, r32, read8()); } if(data == 0x13 && fetch == 0xf3) { i16 d16 = read16(); lhs.indirectImmediate24(opSize, pc + d16); } } break; case 0xc4: case 0xd4: case 0xe4: case 0xf4: opSourceMemory = fetch < 0xf0; opTargetMemory = !opSourceMemory; lhs.indirectRegisterDecrement(opSize, read8()); break; case 0xc5: case 0xd5: case 0xe5: case 0xf5: opSourceMemory = fetch < 0xf0; opTargetMemory = !opSourceMemory; lhs.indirectRegisterIncrement(opSize, read8()); break; case 0xc6: case 0xd6: case 0xe6: case 0xf6: break; case 0xc7: case 0xd7: case 0xe7: opRegister = true; lhs.register(opSize, read8()); break; case 0xf7: name = "ldx"; read8(); lhs.indirectImmediate8(8, read8()); read8(); rhs.immediate(8, read8()); read8(); break; case 0xc8 ... 0xcf: opRegister = true; lhs.register3(8, fetch); break; case 0xd8 ... 0xdf: opRegister = true; lhs.register3(16, fetch); break; case 0xe8 ... 0xef: opRegister = true; lhs.register3(32, fetch); break; case 0xf8 ... 0xff: name = "swi"; lhs.immediate(3, (n3)fetch); break; } #undef opSize auto reads = [&](u32 size) -> n32 { if(size == 8 ) return read8 (); if(size == 16) return read16(); if(size == 24) return read24(); if(size == 32) return read32(); return 0; }; //size defined if(opRegister) switch(auto fetch = read8()) { case 0x00 ... 0x02: break; case 0x03: name = "ld"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x04: name = "push"; break; case 0x05: name = "pop"; break; case 0x06: name = "cpl"; break; case 0x07: name = "neg"; break; case 0x08: name = "mul"; rhs.immediate(lhs.size(), reads(lhs.size())); lhs.register3(16, op[0]); break; case 0x09: name = "muls"; rhs.immediate(lhs.size(), reads(lhs.size())); lhs.register3(16, op[0]); break; case 0x0a: name = "div"; rhs.immediate(lhs.size(), reads(lhs.size())); lhs.register3(16, op[0]); break; case 0x0b: name = "divs"; rhs.immediate(lhs.size(), reads(lhs.size())); lhs.register3(16, op[0]); break; case 0x0c: name = "link"; rhs.displacement(16, read16()); break; case 0x0d: name = "unlk"; break; case 0x0e: name = "bs1f"; rhs = lhs; lhs.register(8, A.id); break; case 0x0f: name = "bs1b"; rhs = lhs; lhs.register(8, A.id); break; case 0x10: name = "daa"; break; case 0x11: break; case 0x12: name = "extz"; break; case 0x13: name = "exts"; break; case 0x14: name = "paa"; break; case 0x15: break; case 0x16: name = "mirr"; break; case 0x17 ... 0x18: break; case 0x19: name = "mula"; break; case 0x1a ... 0x1b: break; case 0x1c: name = "djnz"; rhs.displacementPC(8, read8()); break; case 0x1d ... 0x1f: break; case 0x20: name = "andcf"; rhs.immediate(4, (n4)read8()); break; case 0x21: name = "orcf"; rhs.immediate(4, (n4)read8()); break; case 0x22: name = "xorcf"; rhs.immediate(4, (n4)read8()); break; case 0x23: name = "ldcf"; rhs.immediate(4, (n4)read8()); break; case 0x24: name = "stcf"; rhs.immediate(4, (n4)read8()); break; case 0x25 ... 0x27: break; case 0x28: name = "andcf"; rhs.register(8, A.id); break; case 0x29: name = "orcf"; rhs.register(8, A.id); break; case 0x2a: name = "xorcf"; rhs.register(8, A.id); break; case 0x2b: name = "ldcf"; rhs.register(8, A.id); break; case 0x2c: name = "stcf"; rhs.register(8, A.id); break; case 0x2d: break; case 0x2e: name = "ldc"; rhs = lhs; lhs.control(rhs.size(), read8()); break; case 0x2f: name = "ldc"; rhs.control(lhs.size(), read8()); break; case 0x30: name = "res"; rhs.immediate(4, (n4)read8()); break; case 0x31: name = "set"; rhs.immediate(4, (n4)read8()); break; case 0x32: name = "chg"; rhs.immediate(4, (n4)read8()); break; case 0x33: name = "bit"; rhs.immediate(4, (n4)read8()); break; case 0x34: name = "tset"; rhs.immediate(4, (n4)read8()); break; case 0x35 ... 0x37: break; case 0x38: name = "minc1"; rhs.immediate(16, read16()); break; case 0x39: name = "minc2"; rhs.immediate(16, read16()); break; case 0x3a: name = "minc4"; rhs.immediate(16, read16()); break; case 0x3b: break; case 0x3c: name = "mdec1"; rhs.immediate(16, read16()); break; case 0x3d: name = "mdec2"; rhs.immediate(16, read16()); break; case 0x3e: name = "mdec4"; rhs.immediate(16, read16()); break; case 0x3f: break; case 0x40 ... 0x47: name = "mul"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x48 ... 0x4f: name = "muls"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x50 ... 0x57: name = "div"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x58 ... 0x5f: name = "divs"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x60 ... 0x67: name = "inc"; rhs.immediate(4, fetch ? natural((n3)fetch) : 8_n); break; case 0x68 ... 0x6f: name = "dec"; rhs.immediate(4, fetch ? natural((n3)fetch) : 8_n); break; case 0x70 ... 0x7f: name = "scc"; rhs = lhs; lhs.condition(fetch); break; case 0x80 ... 0x87: name = "add"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x88 ... 0x8f: name = "ld"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x90 ... 0x97: name = "adc"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x98 ... 0x9f: name = "ld"; rhs.register3(lhs.size(), fetch); break; case 0xa0 ... 0xa7: name = "sub"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xa8 ... 0xaf: name = "ld"; rhs.immediate(3, (n3)fetch); break; case 0xb0 ... 0xb7: name = "sbb"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xb8 ... 0xbf: name = "ex"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xc0 ... 0xc7: name = "and"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xc8: name = "add"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xc9: name = "adc"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xca: name = "sub"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xcb: name = "sbb"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xcc: name = "and"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xcd: name = "xor"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xce: name = "or"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xcf: name = "cp"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0xd0 ... 0xd7: name = "xor"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xd8 ... 0xdf: name = "cp"; rhs.immediate(3, (n3)fetch); break; case 0xe0 ... 0xe7: name = "or"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xe8: name = "rlc"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xe9: name = "rrc"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xea: name = "rl"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xeb: name = "rr"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xec: name = "sla"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xed: name = "sra"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xee: name = "sll"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xef: name = "srl"; { auto data = read8(); rhs.immediate(5, data ? natural(data) : 16_n); } break; case 0xf0 ... 0xf7: name = "cp"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xf8: name = "rlc"; rhs.register(8, A.id); break; case 0xf9: name = "rrc"; rhs.register(8, A.id); break; case 0xfa: name = "rl"; rhs.register(8, A.id); break; case 0xfb: name = "rr"; rhs.register(8, A.id); break; case 0xfc: name = "sla"; rhs.register(8, A.id); break; case 0xfd: name = "sra"; rhs.register(8, A.id); break; case 0xfe: name = "sll"; rhs.register(8, A.id); break; case 0xff: name = "srl"; rhs.register(8, A.id); break; } //size defined if(opSourceMemory) switch(auto fetch = read8()) { case 0x00 ... 0x03: break; case 0x04: name = lhs.size() == 8 ? "push" : "pushw"; break; case 0x05: break; case 0x06: name = "rld"; rhs = lhs; lhs.register(8, A.id); break; case 0x07: name = "rrd"; rhs = lhs; lhs.register(8, A.id); break; case 0x08 ... 0x0f: break; case 0x10: name = lhs.size() == 8 ? "ldi" : "ldiw"; lhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XDE.id : XIX.id); rhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XHL.id : XIY.id); break; case 0x11: name = lhs.size() == 8 ? "ldir" : "ldirw"; lhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XDE.id : XIX.id); rhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XHL.id : XIY.id); break; case 0x12: name = lhs.size() == 8 ? "ldd" : "lddw"; lhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XDE.id : XIX.id); rhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XHL.id : XIY.id); break; case 0x13: name = lhs.size() == 8 ? "lddr" : "lddrw"; lhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XDE.id : XIX.id); rhs.indirectRegisterIncrement(32, (n3)op[0] != 5 ? XHL.id : XIY.id); break; case 0x14: name = lhs.size() == 8 ? "cpi" : "cpiw"; lhs.indirectRegister3Increment(32, op[0]); rhs.register(lhs.size(), lhs.size() == 8 ? A.id : WA.id); break; case 0x15: name = lhs.size() == 8 ? "cpir" : "cpirw"; lhs.indirectRegister3Increment(32, op[0]); rhs.register(lhs.size(), lhs.size() == 8 ? A.id : WA.id); break; case 0x16: name = lhs.size() == 8 ? "cpd" : "cpdw"; lhs.indirectRegister3Increment(32, op[0]); rhs.register(lhs.size(), lhs.size() == 8 ? A.id : WA.id); break; case 0x17: name = lhs.size() == 8 ? "cpdr" : "cpdrw"; lhs.indirectRegister3Increment(32, op[0]); rhs.register(lhs.size(), lhs.size() == 8 ? A.id : WA.id); break; case 0x18: break; case 0x19: name = "ld"; rhs = lhs; lhs.indirectImmediate16(16, read16()); break; case 0x1a ... 0x1f: break; case 0x20 ... 0x27: name = "ld"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x28 ... 0x2f: break; case 0x30 ... 0x37: name = "ex"; rhs.register3(lhs.size(), fetch); break; case 0x38: name = "add"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x39: name = "adc"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x3a: name = "sub"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x3b: name = "sbb"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x3c: name = "and"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x3d: name = "xor"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x3e: name = "or"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x3f: name = "cp"; rhs.immediate(lhs.size(), reads(lhs.size())); break; case 0x40 ... 0x47: name = "mul"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x48 ... 0x4f: name = "muls"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x50 ... 0x57: name = "div"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x58 ... 0x5f: name = "divs"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x60 ... 0x67: name = "inc"; rhs.immediate(4, (n3)fetch ? natural((n3)fetch) : 8_n); break; case 0x68 ... 0x6f: name = "dec"; rhs.immediate(4, (n3)fetch ? natural((n3)fetch) : 8_n); break; case 0x70 ... 0x77: break; case 0x78: name = "rlc"; break; case 0x79: name = "rrc"; break; case 0x7a: name = "rl"; break; case 0x7b: name = "rr"; break; case 0x7c: name = "sla"; break; case 0x7d: name = "sra"; break; case 0x7e: name = "sll"; break; case 0x7f: name = "srl"; break; case 0x80 ... 0x87: name = "add"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x88 ... 0x8f: name = "add"; rhs.register3(lhs.size(), fetch); break; case 0x90 ... 0x97: name = "adc"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x98 ... 0x9f: name = "adc"; rhs.register3(lhs.size(), fetch); break; case 0xa0 ... 0xa7: name = "sub"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xa8 ... 0xaf: name = "sub"; rhs.register3(lhs.size(), fetch); break; case 0xb0 ... 0xb7: name = "sbb"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xb8 ... 0xbf: name = "sbb"; rhs.register3(lhs.size(), fetch); break; case 0xc0 ... 0xc7: name = "and"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xc8 ... 0xcf: name = "and"; rhs.register3(lhs.size(), fetch); break; case 0xd0 ... 0xd7: name = "xor"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xd8 ... 0xdf: name = "xor"; rhs.register3(lhs.size(), fetch); break; case 0xe0 ... 0xe7: name = "or"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xe8 ... 0xef: name = "or"; rhs.register3(lhs.size(), fetch); break; case 0xf0 ... 0xf7: name = "cp"; rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0xf8 ... 0xff: name = "cp"; rhs.register3(lhs.size(), fetch); break; } //size undefined if(opTargetMemory) switch(auto fetch = read8()) { case 0x00: name = "ld"; lhs.size(8); rhs.immediate(8, read8()); break; case 0x01: break; case 0x02: name = "ld"; lhs.size(16); rhs.immediate(16, read16()); break; case 0x03: break; case 0x04: name = "pop"; lhs.size(8); break; case 0x05: break; case 0x06: name = "pop"; lhs.size(16); break; case 0x07 ... 0x13: break; case 0x14: name = "ld"; lhs.size(8); rhs.indirectImmediate16(16, read16()); break; case 0x15: break; case 0x16: name = "ld"; lhs.size(16); rhs.indirectImmediate16(16, read16()); break; case 0x17 ... 0x1f: break; case 0x20 ... 0x27: name = "lda"; lhs.size(16); rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x28: name = "andcf"; lhs.size(8); rhs.register3(8, A.id); break; case 0x29: name = "orcf"; lhs.size(8); rhs.register3(8, A.id); break; case 0x2a: name = "xorcf"; lhs.size(8); rhs.register3(8, A.id); break; case 0x2b: name = "ldcf"; lhs.size(8); rhs.register3(8, A.id); break; case 0x2c: name = "stcf"; lhs.size(8); rhs.register3(8, A.id); break; case 0x2d ... 0x2f: break; case 0x30 ... 0x37: name = "lda"; lhs.size(32); rhs = lhs; lhs.register3(rhs.size(), fetch); break; case 0x38 ... 0x3f: break; case 0x40 ... 0x47: name = "ld"; lhs.size(8); rhs.register3(lhs.size(), fetch); break; case 0x48 ... 0x4f: break; case 0x50 ... 0x57: name = "ld"; lhs.size(16); rhs.register3(lhs.size(), fetch); break; case 0x58 ... 0x5f: break; case 0x60 ... 0x67: name = "ld"; lhs.size(32); rhs.register3(lhs.size(), fetch); break; case 0x68 ... 0x6f: break; case 0x70 ... 0x77: break; case 0x78 ... 0x7f: break; case 0x80 ... 0x87: name = "andcf"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0x88 ... 0x8f: name = "orcf"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0x90 ... 0x97: name = "xorcf"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0x98 ... 0x9f: name = "ldcf"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xa0 ... 0xa7: name = "stcf"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xa8 ... 0xaf: name = "tset"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xb0 ... 0xb7: name = "res"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xb8 ... 0xbf: name = "set"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xc0 ... 0xc7: name = "chg"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xc8 ... 0xcf: name = "bit"; lhs.size(8); rhs.immediate(3, (n3)fetch); break; case 0xd0 ... 0xdf: name = "jp"; lhs.size(32); rhs = lhs; lhs.condition(fetch); break; case 0xe0 ... 0xef: name = "call"; lhs.size(32); rhs = lhs; lhs.condition(fetch); break; case 0xf0 ... 0xff: name = "ret"; lhs.condition(fetch); break; } auto operand = [&](Operand& operand) -> string { static const string registers8[] = { "ra0", "rw0", "qa0", "qw0", "rc0", "rb0", "qc0", "qb0", "re0", "rd0", "qe0", "qd0", "rl0", "rh0", "ql0", "qh0", //00-1f "ra1", "rw1", "qa1", "qw1", "rc1", "rb1", "qc1", "qb1", "re1", "rd1", "qe1", "qd1", "rl1", "rh1", "ql1", "qh1", //10-1f "ra2", "rw2", "qa2", "qw2", "rc2", "rb2", "qc2", "qb2", "re2", "rd2", "qe2", "qd2", "rl2", "rh2", "ql2", "qh2", //20-2f "ra3", "rw3", "qa3", "qw3", "rc3", "rb3", "qc3", "qb3", "re3", "rd3", "qe3", "qd3", "rl3", "rh3", "ql3", "qh3", //30-3f "a'", "w'", "qa'", "qw'", "c'", "b'", "qc'", "qb'", "e'", "d'", "qe'", "qd'", "l'", "h'", "ql'", "qh'", //d0-df "a", "w", "qa", "qw", "c", "b", "qc", "qb", "e", "d", "qe", "qd", "l", "h", "ql", "qh", //e0-ef "ixl", "ixh", "qixl","qixh","iyl", "iyh", "qiyl","qiyh","izl", "izh", "qizl","qizh","spl", "sph", "qspl","qsph", //f0-ff }; auto register8 = [&](n8 register) -> string { if(register < 0x40) return registers8[register]; if(register >= 0xd0) return registers8[(register - 0xd0 >> 0) + 0x40]; return "rb?"; }; static const string registers16[] = { "rwa0", "qwa0", "rbc0", "qbc0", "rde0", "qde0", "rhl0", "qhl0", //00-0f "rwa1", "qwa1", "rbc1", "qbc1", "rde1", "qde1", "rhl1", "qhl1", //10-1f "rwa2", "qwa2", "rbc2", "qbc2", "rde2", "qde2", "rhl2", "qhl2", //20-2f "rwa3", "qwa3", "rbc3", "qbc3", "rde3", "qde3", "rhl3", "qhl3", //30-3f "wa'", "qwa'", "bc'", "qbc'", "de'", "qde'", "hl'", "qhl'", //d0-df "wa", "qwa", "bc", "qbc", "de", "qde", "hl", "qhl", //e0-ef "ix", "qix", "iy", "qiy", "iz", "qiz", "sp", "qsp", //f0-ff }; auto register16 = [&](n8 register) -> string { if(register < 0x40) return registers16[register >> 1]; if(register >= 0xd0) return registers16[(register - 0xd0 >> 1) + 0x20]; return "rw?"; }; static const string registers32[] = { "xwa0", "xbc0", "xde0", "xhl0", //00-0f "xwa1", "xbc1", "xde1", "xhl1", //10-1f "xwa2", "xbc2", "xde2", "xhl2", //20-2f "xwa3", "xbc3", "xde3", "xhl3", //30-3f "xwa'", "xbc'", "xde'", "xhl'", //d0-df "xwa", "xbc", "xde", "xhl", //e0-ef "xix", "xiy", "xiz", "xsp", //f0-ff }; auto register32 = [&](n8 register) -> string { if(register < 0x40) return registers32[register >> 2]; if(register >= 0xd0) return registers32[(register - 0xd0 >> 2) + 0x10]; return "rl?"; }; auto registerSize = [&](natural size, n8 register) -> string { if(size == 8 ) return register8 (register); if(size == 16) return register16(register); if(size == 32) return register32(register); return "r??"; }; //there are no names for byte-accesses to control registers auto control8 = [&](n8 register) -> string { return {"c", hex(register, 2L)}; }; static string controls16[] = { "dmas0l", "dmas0h", "dmas1l", "dmas1h", "dmas2l", "dmas2h", "dmas3l", "dmas3h", //00-0f "dmad0l", "dmad0h", "dmad1l", "dmad1h", "dmad2l", "dmad2h", "dmad3l", "dmad3h", //10-1f "dmac0", "dmac0h", "dmac1", "dmac1h", "dmac2", "dmac2h", "dmac3", "dmac3h", //20-2f }; auto control16 = [&](n8 register) -> string { if(register < 0x30) return controls16[register >> 1]; if(register >= 0x3c || register <= 0x3d) return "intnest"; return "cw?"; }; static string controls32[] = { "dmas0", "dmas1", "dmas2", "dmas3", //00-0f "dmad0", "dmad1", "dmad2", "dmad3", //10-1f "dmam0", "dmam1", "dmam2", "dmam3", //20-2f }; auto control32 = [&](n8 register) -> string { if(register < 0x30) return controls32[register >> 2]; if(register >= 0x3c && register <= 0x3f) return "intnest"; return "cl?"; }; auto controlSize = [&](natural size, n8 register) -> string { if(size == 8 ) return control8 (register); if(size == 16) return control16(register); if(size == 32) return control32(register); return "c??"; }; if(operand.mode() == Text) return operand.text(); if(operand.mode() == Condition) { static const string conditions[] = { "f", "lt", "le", "ule", "ov", "mi", "eq", "ult", "t", "ge", "gt", "ugt", "nov", "pl", "ne", "uge", }; return conditions[operand.condition()]; } if(operand.mode() == Register) return registerSize(operand.size(), operand.register()); if(operand.mode() == Control) return controlSize(operand.size(), operand.register()); if(operand.mode() == Immediate) { if(operand.size() <= 7) return {operand.immediate()}; if(operand.size() == 8) return {"0x", hex(operand.immediate(), 2L)}; if(operand.size() == 16) return {"0x", hex(operand.immediate(), 4L)}; if(operand.size() == 24) return {"0x", hex(operand.immediate(), 6L)}; if(operand.size() == 32) return {"0x", hex(operand.immediate(), 8L)}; } if(operand.mode() == Displacement) { if(operand.size() == 8) { integer displacement = (i8)operand.displacement(); if(displacement < 0) return {"-0x", hex(-displacement, 2L)}; if(displacement >= 0) return {"+0x", hex(+displacement, 2L)}; } if(operand.size() == 16) { integer displacement = (i8)operand.displacement(); if(displacement < 0) return {"-0x", hex(-displacement, 4L)}; if(displacement >= 0) return {"+0x", hex(+displacement, 4L)}; } } if(operand.mode() == DisplacementPC) { if(operand.size() == 8) { natural displacement = pc + (i8)operand.displacement(); return {"0x", hex(displacement, 6L)}; } if(operand.size() == 16) { natural displacement = pc + (i16)operand.displacement(); return {"0x", hex(displacement, 6L)}; } } if(operand.mode() == IndirectRegister) return {"(", registerSize(operand.size(), operand.register()), ")"}; if(operand.mode() == IndirectRegisterDecrement) return {"(-", register32(operand.register()), ")"}; if(operand.mode() == IndirectRegisterIncrement) return {"(", register32(operand.register()), "+)"}; if(operand.mode() == IndirectRegisterRegister8) return {"(", register32(operand.register()), "+", register8(operand.registerAdd()), ")"}; if(operand.mode() == IndirectRegisterRegister16) return {"(", register32(operand.register()), "+", register16(operand.registerAdd()), ")"}; if(operand.mode() == IndirectRegisterDisplacement8) { integer displacement = (i8)operand.displacement(); if(displacement == 0) return {"(", register32(operand.register()), ")"}; if(displacement < 0) return {"(", register32(operand.register()), "-0x", hex(-displacement, 2L), ")"}; if(displacement > 0) return {"(", register32(operand.register()), "+0x", hex(+displacement, 2L), ")"}; } if(operand.mode() == IndirectRegisterDisplacement16) { integer displacement = (i16)operand.displacement(); if(displacement == 0) return {"(", register32(operand.register()), ")"}; if(displacement < 0) return {"(", register32(operand.register()), "-0x", hex(-displacement, 4L), ")"}; if(displacement > 0) return {"(", register32(operand.register()), "+0x", hex(+displacement, 4L), ")"}; } if(operand.mode() == IndirectImmediate8) return {"(0x", hex(operand.immediate(), 2L), ")"}; if(operand.mode() == IndirectImmediate16) return {"(0x", hex(operand.immediate(), 4L), ")"}; if(operand.mode() == IndirectImmediate24) return {"(0x", hex(operand.immediate(), 6L), ")"}; return {}; }; //omit true condition operand if(lhs.mode() == Condition && lhs.condition() == 8) { lhs = rhs; rhs.null(); } if(name) { output.append(pad(name, -6)); if(lhs) { output.append(operand(lhs)); if(rhs) { output.append(",", operand(rhs)); } } } else { output.append(pad("???", -6)); for(auto byte : range(ops)) output.append("0x", hex(op[byte], 2L), ","); output.trimRight(",", 1L); } return pad(output, -48); } noinline auto TLCS900H::disassembleContext() -> string { string output; output.append("XWA:", hex(r.xwa[RFP].l.l0, 8L), " "); output.append("XBC:", hex(r.xbc[RFP].l.l0, 8L), " "); output.append("XDE:", hex(r.xde[RFP].l.l0, 8L), " "); output.append("XHL:", hex(r.xhl[RFP].l.l0, 8L), " "); output.append("XIX:", hex(r.xix.l.l0, 8L), " "); output.append("XIY:", hex(r.xiy.l.l0, 8L), " "); output.append("XIZ:", hex(r.xiz.l.l0, 8L), " "); output.append("XSP:", hex(r.xsp.l.l0, 8L), " "); output.append("IFF:", IFF, " "); output.append("RFP:", RFP, " "); output.append(SF ? "S" : "s"); output.append(ZF ? "Z" : "z"); output.append(HF ? "H" : "h"); output.append(VF ? "V" : "v"); output.append(NF ? "N" : "n"); output.append(CF ? "C" : "c"); return output; } ares-126/ares/component/processor/tlcs900h/dma.cpp000066400000000000000000000016621415063341600221140ustar00rootroot00000000000000auto TLCS900H::dma(n2 channel) -> bool { auto& source = r.dmas[channel].l.l0; auto& target = r.dmad[channel].l.l0; auto& length = r.dmam[channel].w.w0; //0 = 65536 auto& config = r.dmam[channel].w.w1; n32 mode = config.bit(2,4); n32 size; switch(config.bit(0,1)) { case 0: size = Byte; break; case 1: size = Word; break; case 2: size = Long; break; case 3: size = Long; break; //unknown behavior } prefetch(6); if(mode <= 4) { step(2); auto data = read(size, source); step(4); write(size, target, data); } else { step(4); } switch(mode) { case 0: target += size; break; case 1: target -= size; break; case 2: source += size; break; case 3: source -= size; break; case 4: break; case 5: source += size; break; case 6: break; //unknown behavior case 7: break; //unknown behavior } return --length == 0; //true indicates the transfer has completed } ares-126/ares/component/processor/tlcs900h/instruction.cpp000066400000000000000000001424411415063341600237350ustar00rootroot00000000000000template<> auto TLCS900H::toRegister3(n3 code) const -> Register { static const Register lookup[] = {W, A, B, C, D, E, H, L}; return lookup[code]; } template<> auto TLCS900H::toRegister3(n3 code) const -> Register { static const Register lookup[] = {WA, BC, DE, HL, IX, IY, IZ, SP}; return lookup[code]; } template<> auto TLCS900H::toRegister3(n3 code) const -> Register { static const Register lookup[] = {XWA, XBC, XDE, XHL, XIX, XIY, XIZ, XSP}; return lookup[code]; } template auto TLCS900H::toRegister8(n8 code) const -> Register { return {code}; } template auto TLCS900H::toControlRegister(n8 code) const -> ControlRegister { return {code}; } template auto TLCS900H::toMemory(n32 address) const -> Memory { return {address}; } template auto TLCS900H::toImmediate(n32 constant) const -> Immediate { return {constant}; } auto TLCS900H::undefined() -> void { debug(unusual, "[TLCS900H::undefined]"); instructionSoftwareInterrupt(2); } auto TLCS900H::instruction() -> void { auto data = fetch(); switch(OP = data) { case 0x00: { //NOP prefetch(4); return instructionNoOperation(); } case 0x01: { //NORMAL (not present on 900/H) return undefined(); } case 0x02: { //PUSH.W SR prefetch(4); return instructionPush(SR); } case 0x03: { //POP.W SR prefetch(6); return instructionPop(SR); } case 0x04: { //MAX or MIN (not present on 900/H) return undefined(); } case 0x05: { //HALT prefetch(12); return instructionHalt(); } case 0x06: { //EI n data = fetch(); prefetch(6); if(n3(data) == 7) prefetch(2); //DI return instructionSetInterruptFlipFlop((n3)data); } case 0x07: { //RETI prefetch(18); instructionReturnInterrupt(); return prefetch(2); } case 0x08: { //LD.B (n),n auto memory = fetchMemory(); auto immediate = fetchImmediate(); prefetch(8); return instructionLoad(memory, immediate); } case 0x09: { //PUSH.B n auto immediate = fetchImmediate(); prefetch(6); return instructionPush(immediate); } case 0x0a: { //LD.W (n),nn auto memory = fetchMemory(); auto immediate = fetchImmediate(); prefetch(10); return instructionLoad(memory, immediate); } case 0x0b: { //PUSH.W nn auto immediate = fetchImmediate(); prefetch(8); return instructionPush(immediate); } case 0x0c: { //INCF prefetch(4); return instructionSetRegisterFilePointer(RFP + 1); } case 0x0d: { ///DECF prefetch(4); return instructionSetRegisterFilePointer(RFP - 1); } case 0x0e: { //RET prefetch(14); instructionReturn(); return prefetch(2); } case 0x0f: { //RETD dd auto immediate = fetchImmediate(); prefetch(18); instructionReturnDeallocate(immediate); return prefetch(2); } case 0x10: { //RCF prefetch(4); return instructionSetCarryFlag(0); } case 0x11: { //SCF prefetch(4); return instructionSetCarryFlag(1); } case 0x12: { //CCF prefetch(4); return instructionSetCarryFlagComplement(CF); } case 0x13: { //ZCF prefetch(4); return instructionSetCarryFlagComplement(ZF); } case 0x14: { //PUSH.B A prefetch(4); return instructionPush(A); } case 0x15: { //POP.B A prefetch(6); return instructionPop(A); } case 0x16: { //EX F,F' prefetch(4); return instructionExchange(F, FP); } case 0x17: { //LDF n data = fetch(); prefetch(4); return instructionSetRegisterFilePointer((n2)data); } case 0x18: { //PUSH.B F prefetch(4); return instructionPush(F); } case 0x19: { //POP.B F prefetch(6); return instructionPop(F); } case 0x1a: { //JP nn auto immediate = fetchImmediate(); prefetch(8); instructionJump(immediate); return prefetch(2); } case 0x1b: { //JP nnn auto immediate = fetchImmediate(); prefetch(8); instructionJump(immediate); return prefetch(2); } case 0x1c: { //CALL nn auto immediate = fetchImmediate(); prefetch(14); instructionCall(immediate); return prefetch(2); } case 0x1d: { //CALL nnn auto immediate = fetchImmediate(); prefetch(16); instructionCall(immediate); return prefetch(2); } case 0x1e: { //CALR PC+dd auto immediate = fetchImmediate(); prefetch(16); instructionCallRelative(immediate); return prefetch(2); } case 0x1f: { return undefined(); } case 0x20 ... 0x27: { //LD R,n auto immediate = fetchImmediate(); prefetch(4); return instructionLoad(toRegister3(data), immediate); } case 0x28 ... 0x2f: { //PUSH.W rr prefetch(4); return instructionPush(toRegister3(data)); } case 0x30 ... 0x37: { //LD RR,nn auto immediate = fetchImmediate(); prefetch(6); return instructionLoad(toRegister3(data), immediate); } case 0x38 ... 0x3f: { //PUSH.L XRR prefetch(6); return instructionPush(toRegister3(data)); } case 0x40 ... 0x47: { //LD XRR,nnnn auto immediate = fetchImmediate(); prefetch(10); return instructionLoad(toRegister3(data), immediate); } case 0x48 ... 0x4f: { //POP.W RR prefetch(6); return instructionPop(toRegister3(data)); } case 0x50 ... 0x57: { return undefined(); } case 0x58 ... 0x5f: { //POP.L XRR prefetch(8); return instructionPop(toRegister3(data)); } case 0x60 ... 0x6f: { //JR cc,PC+d auto immediate = fetchImmediate(); prefetch(4); if(!condition((n4)data)) return; prefetch(4); instructionJumpRelative(immediate); return prefetch(2); } case 0x70 ... 0x7f: { //JRL cc,PC+dd auto immediate = fetchImmediate(); prefetch(4); if(!condition((n4)data)) return; prefetch(4); instructionJumpRelative(immediate); return prefetch(2); } case 0x80 ... 0x87: { //src.B return instructionSourceMemory(toMemory(load(toRegister3(data)))); } case 0x88 ... 0x8f: { //src.B auto immediate = fetch(); prefetch(2); return instructionSourceMemory(toMemory(load(toRegister3(data)) + immediate)); } case 0x90 ... 0x97: { //src.W return instructionSourceMemory(toMemory(load(toRegister3(data)))); } case 0x98 ... 0x9f: { //src.W auto immediate = fetch(); prefetch(2); return instructionSourceMemory(toMemory(load(toRegister3(data)) + immediate)); } case 0xa0 ... 0xa7: { //src.L return instructionSourceMemory(toMemory(load(toRegister3(data)))); } case 0xa8 ... 0xaf: { //src.L auto immediate = fetch(); prefetch(2); return instructionSourceMemory(toMemory(load(toRegister3(data)) + immediate)); } case 0xb0 ... 0xb7: { //dst return instructionTargetMemory(load(toRegister3(data))); } case 0xb8 ... 0xbf: { //dst auto immediate = fetch(); prefetch(2); return instructionTargetMemory(load(toRegister3(data)) + immediate); } case 0xc0: { //src.B auto memory = fetchMemory(); prefetch(2); return instructionSourceMemory(memory); } case 0xc1: { //src.B auto memory = fetchMemory(); prefetch(4); return instructionSourceMemory(memory); } case 0xc2: { //src.B auto memory = fetchMemory(); prefetch(6); return instructionSourceMemory(memory); } case 0xc3: { //src.B data = fetch(); if((data & 3) == 0) { auto register = load(toRegister8(data)); prefetch(2); return instructionSourceMemory(toMemory(register)); } if((data & 3) == 1) { auto register = load(toRegister8(data)); auto displacement = fetch(); prefetch(6); return instructionSourceMemory(toMemory(register + displacement)); } if(data == 0x03) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionSourceMemory(toMemory(register + (i8)displacement)); } if(data == 0x07) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionSourceMemory(toMemory(register + (i16)displacement)); } debug(unusual, "[TLCS900H::instruction] 0xc3 0x", hex(data, 2L)); return undefined(); } case 0xc4: { //src.B data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location -= 1); if((data & 3) == 1) store(register, location -= 2); if((data & 3) == 2) store(register, location -= 4); if((data & 3) == 3) (void)Undefined; return instructionSourceMemory(toMemory(location)); } case 0xc5: { //src.B data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location + 1); if((data & 3) == 1) store(register, location + 2); if((data & 3) == 2) store(register, location + 4); if((data & 3) == 3) (void)Undefined; return instructionSourceMemory(toMemory(location)); } case 0xc6: { return undefined(); } case 0xc7: { //reg.B auto register = fetchRegister(); prefetch(2); return instructionRegister(register); } case 0xc8 ... 0xcf: { //reg.B return instructionRegister(toRegister3(data)); } case 0xd0: { //src.W auto memory = fetchMemory(); prefetch(2); return instructionSourceMemory(memory); } case 0xd1: { //src.W auto memory = fetchMemory(); prefetch(4); return instructionSourceMemory(memory); } case 0xd2: { //src.W auto memory = fetchMemory(); prefetch(6); return instructionSourceMemory(memory); } case 0xd3: { //src.W data = fetch(); if((data & 3) == 0) { auto register = load(toRegister8(data)); prefetch(2); return instructionSourceMemory(toMemory(register)); } if((data & 3) == 1) { auto register = load(toRegister8(data)); auto displacement = fetch(); prefetch(6); return instructionSourceMemory(toMemory(register + displacement)); } if(data == 0x03) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionSourceMemory(toMemory(register + (i8)displacement)); } if(data == 0x07) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionSourceMemory(toMemory(register + (i16)displacement)); } debug(unusual, "[TLCS900H::instruction] 0xd3 0x", hex(data, 2L)); return undefined(); } case 0xd4: { //src.W data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location -= 1); if((data & 3) == 1) store(register, location -= 2); if((data & 3) == 2) store(register, location -= 4); if((data & 3) == 3) (void)Undefined; return instructionSourceMemory(toMemory(location)); } case 0xd5: { //src.W data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location + 1); if((data & 3) == 1) store(register, location + 2); if((data & 3) == 2) store(register, location + 4); if((data & 3) == 3) (void)Undefined; return instructionSourceMemory(toMemory(location)); } case 0xd6: { return undefined(); } case 0xd7: { //reg.W auto register = fetchRegister(); prefetch(2); return instructionRegister(register); } case 0xd8 ... 0xdf: { //reg.W return instructionRegister(toRegister3(data)); } case 0xe0: { //src.L auto memory = fetchMemory(); prefetch(2); return instructionSourceMemory(memory); } case 0xe1: { //src.L auto memory = fetchMemory(); prefetch(4); return instructionSourceMemory(memory); } case 0xe2: { //src.L auto memory = fetchMemory(); prefetch(6); return instructionSourceMemory(memory); } case 0xe3: { //src.L data = fetch(); if((data & 3) == 0) { auto register = load(toRegister8(data)); prefetch(2); return instructionSourceMemory(toMemory(register)); } if((data & 3) == 1) { auto register = load(toRegister8(data)); auto displacement = fetch(); prefetch(6); return instructionSourceMemory(toMemory(register + displacement)); } if(data == 0x03) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionSourceMemory(toMemory(register + (i8)displacement)); } if(data == 0x07) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionSourceMemory(toMemory(register + (i16)displacement)); } debug(unusual, "[TLCS900H::instruction] 0xe3 0x", hex(data, 2L)); return undefined(); } case 0xe4: { //src.L data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location -= 1); if((data & 3) == 1) store(register, location -= 2); if((data & 3) == 2) store(register, location -= 4); if((data & 3) == 3) (void)Undefined; return instructionSourceMemory(toMemory(location)); } case 0xe5: { //src.L data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location + 1); if((data & 3) == 1) store(register, location + 2); if((data & 3) == 2) store(register, location + 4); if((data & 3) == 3) (void)Undefined; return instructionSourceMemory(toMemory(location)); } case 0xe6: { return undefined(); } case 0xe7: { //reg.L auto register = fetchRegister(); prefetch(2); return instructionRegister(register); } case 0xe8 ... 0xef: { //reg.L return instructionRegister(toRegister3(data)); } case 0xf0: { //dst auto memory = fetch(); prefetch(2); return instructionTargetMemory(memory); } case 0xf1: { //dst auto memory = fetch(); prefetch(4); return instructionTargetMemory(memory); } case 0xf2: { //dst auto memory = fetch(); prefetch(6); return instructionTargetMemory(memory); } case 0xf3: { //dst data = fetch(); if((data & 3) == 0) { auto register = load(toRegister8(data)); prefetch(2); return instructionTargetMemory(register); } if((data & 3) == 1) { auto register = load(toRegister8(data)); auto displacement = fetch(); prefetch(6); return instructionTargetMemory(register + displacement); } if(data == 0x03) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionTargetMemory(register + (i8)displacement); } if(data == 0x07) { auto register = load(fetchRegister()); auto displacement = load(fetchRegister()); prefetch(6); return instructionTargetMemory(register + (i16)displacement); } if(data == 0x13) { //LDAR R,PC+dd auto immediate = fetch(); auto address = load(PC) + immediate; //load PC before final byte fetch data = fetch(); switch(data) { case 0x20 ... 0x27: prefetch(14); return instructionLoad(toRegister3(data), toImmediate(address)); case 0x30 ... 0x37: prefetch(14); return instructionLoad(toRegister3(data), toImmediate(address)); } } debug(unusual, "[TLCS900H::instruction] 0xf3 0x", hex(data, 2L)); return undefined(); } case 0xf4: { //dst data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location -= 1); if((data & 3) == 1) store(register, location -= 2); if((data & 3) == 2) store(register, location -= 4); if((data & 3) == 3) (void)Undefined; return instructionTargetMemory(location); } case 0xf5: { //dst data = fetch(); prefetch(2); auto register = toRegister8(data); auto location = load(register); if((data & 3) == 0) store(register, location + 1); if((data & 3) == 1) store(register, location + 2); if((data & 3) == 2) store(register, location + 4); if((data & 3) == 3) (void)Undefined; return instructionTargetMemory(location); } case 0xf6: { return undefined(); } case 0xf7: { //LDX.B (n),n fetch(); //0x00 auto memory = fetchMemory(); fetch(); //0x00 auto immediate = fetchImmediate(); fetch(); //0x00 prefetch(14); return instructionLoad(memory, immediate); } case 0xf8 ... 0xff: { //SWI n return instructionSoftwareInterrupt((n3)data); } } } template auto TLCS900H::instructionRegister(R register) -> void { using T = typename R::type; enum : bool { Byte = R::bits == 8, Word = R::bits == 16, Long = R::bits == 32 }; auto data = fetch(); switch(data) { case 0x00 ... 0x02: { return undefined(); } case 0x03: { //LD r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionLoad(register, immediate); } case 0x04: { //PUSH r if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionPush(register); } case 0x05: { //POP r if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionPop(register); } case 0x06: { //CPL r if constexpr(!Long) { prefetch(4); return instructionComplement(register); } return undefined(); } case 0x07: { //NEG r if constexpr(!Long) { prefetch(4); return instructionNegate(register); } return undefined(); } case 0x08: { //MUL rr,# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(24); if constexpr(Word) prefetch(30); return instructionMultiply(register, immediate); } return undefined(); } case 0x09: { //MULS rr,# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(20); if constexpr(Word) prefetch(26); return instructionMultiplySigned(register, immediate); } return undefined(); } case 0x0a: { //DIV rr,# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(30); if constexpr(Word) prefetch(46); return instructionDivide(register, immediate); } return undefined(); } case 0x0b: { //DIVS rr,# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(36); if constexpr(Word) prefetch(52); return instructionDivideSigned(register, immediate); } return undefined(); } case 0x0c: { //LINK r,dd if constexpr(Long) { auto immediate = fetchImmediate(); prefetch(12); return instructionLink(register, immediate); } return undefined(); } case 0x0d: { //UNLK r if constexpr(Long) { prefetch(10); return instructionUnlink(register); } return undefined(); } case 0x0e: { //BS1F A,r if constexpr(Word) { prefetch(6); return instructionBitSearch1Forward(register); } return undefined(); } case 0x0f: { //BS1B A,r if constexpr(Word) { prefetch(6); return instructionBitSearch1Backward(register); } return undefined(); } case 0x10: { //DAA r if constexpr(Byte) { prefetch(8); return instructionDecimalAdjustAccumulator(register); } return undefined(); } case 0x11: { return undefined(); } case 0x12: { //EXTZ r if constexpr(!Byte) { prefetch(6); return instructionExtendZero(register); } return undefined(); } case 0x13: { //EXTS r if constexpr(!Byte) { prefetch(6); return instructionExtendSign(register); } return undefined(); } case 0x14: { //PAA r if constexpr(!Byte) { prefetch(8); return instructionPointerAdjustAccumulator(register); } return undefined(); } case 0x15: { return undefined(); } case 0x16: { //MIRR r if constexpr(Word) { prefetch(6); return instructionMirror(register); } return undefined(); } case 0x17 ... 0x18: { return undefined(); } case 0x19: { //MULA r if constexpr(Word) { prefetch(38); return instructionMultiplyAdd(register); } return undefined(); } case 0x1a ... 0x1b: { return undefined(); } case 0x1c: { //DJNZ r,d if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(8); return instructionDecrementJumpNotZero(register, immediate); } return undefined(); } case 0x1d ... 0x1f: { return undefined(); } case 0x20: { //ANDCF #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionAndCarry(register, immediate); } return undefined(); } case 0x21: { //ORCF #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionOrCarry(register, immediate); } return undefined(); } case 0x22: { //XORCF #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionXorCarry(register, immediate); } return undefined(); } case 0x23: { //LDCF #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionLoadCarry(register, immediate); } return undefined(); } case 0x24: { //STCF #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionStoreCarry(register, immediate); } return undefined(); } case 0x25 ... 0x27: { return undefined(); } case 0x28: { //ANDCF A,r if constexpr(!Long) { prefetch(6); return instructionAndCarry(register, A); } return undefined(); } case 0x29: { //ORCF A,r if constexpr(!Long) { prefetch(6); return instructionOrCarry(register, A); } return undefined(); } case 0x2a: { //XORCF A,r if constexpr(!Long) { prefetch(6); return instructionXorCarry(register, A); } return undefined(); } case 0x2b: { //LDCF A,r if constexpr(!Long) { prefetch(6); return instructionLoadCarry(register, A); } return undefined(); } case 0x2c: { //STCF A,r if constexpr(!Long) { prefetch(6); return instructionStoreCarry(register, A); } return undefined(); } case 0x2d: { return undefined(); } case 0x2e: { //LDC cr,r data = fetch(); prefetch(6); return instructionLoad(toControlRegister(data), register); } case 0x2f: { //LDC r,cr data = fetch(); prefetch(6); return instructionLoad(register, toControlRegister(data)); } case 0x30: { //RES #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionReset(register, immediate); } return undefined(); } case 0x31: { //SET #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionSet(register, immediate); } return undefined(); } case 0x32: { //CHG #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(6); return instructionChange(register, immediate); } return undefined(); } case 0x33: { //BIT #,r if constexpr(!Long) { data = fetch(); prefetch(6); return instructionBit(register, toImmediate(data)); } return undefined(); } case 0x34: { //TSET #,r if constexpr(!Long) { auto immediate = fetchImmediate(); prefetch(8); return instructionTestSet(register, immediate); } return undefined(); } case 0x35 ... 0x37: { return undefined(); } case 0x38: { //MINC1 #,r if constexpr(Word) { auto immediate = fetchImmediate(); prefetch(10); return instructionModuloIncrement<1>(register, immediate); } return undefined(); } case 0x39: { //MINC2 #,r if constexpr(Word) { auto immediate = fetchImmediate(); prefetch(10); return instructionModuloIncrement<2>(register, immediate); } return undefined(); } case 0x3a: { //MINC4 #,r if constexpr(Word) { auto immediate = fetchImmediate(); prefetch(10); return instructionModuloIncrement<4>(register, immediate); } return undefined(); } case 0x3b: { return undefined(); } case 0x3c: { //MDEC1 #,r if constexpr(Word) { auto immediate = fetchImmediate(); prefetch(8); return instructionModuloDecrement<1>(register, immediate); } return undefined(); } case 0x3d: { //MDEC2 #,r if constexpr(Word) { auto immediate = fetchImmediate(); prefetch(8); return instructionModuloDecrement<2>(register, immediate); } return undefined(); } case 0x3e: { //MDEC4 #,r if constexpr(Word) { auto immediate = fetchImmediate(); prefetch(8); return instructionModuloDecrement<4>(register, immediate); } return undefined(); } case 0x3f: { return undefined(); } case 0x40 ... 0x47: { //MUL R,r if constexpr(!Long) { if constexpr(Byte) prefetch(22); if constexpr(Word) prefetch(28); return instructionMultiply(toRegister3(data), register); } return undefined(); } case 0x48 ... 0x4f: { //MULS R,r if constexpr(!Long) { if constexpr(Byte) prefetch(18); if constexpr(Word) prefetch(24); return instructionMultiplySigned(toRegister3(data), register); } return undefined(); } case 0x50 ... 0x57: { //DIV R,r if constexpr(!Long) { if constexpr(Byte) prefetch(30); if constexpr(Word) prefetch(46); return instructionDivide(toRegister3(data), register); } return undefined(); } case 0x58 ... 0x5f: { //DIVS R,r if constexpr(!Long) { if constexpr(Byte) prefetch(36); if constexpr(Word) prefetch(52); return instructionDivideSigned(toRegister3(data), register); } return undefined(); } case 0x60 ... 0x67: { //INC #3,r prefetch(4); return instructionIncrement(register, toImmediate((n3)data)); } case 0x68 ... 0x6f: { //DEC #3,r prefetch(4); return instructionDecrement(register, toImmediate((n3)data)); } case 0x70 ... 0x7f: { //SCC cc,r if constexpr(!Long) { prefetch(4); return instructionSetConditionCode((n4)data, register); } return undefined(); } case 0x80 ... 0x87: { //ADD R,r prefetch(4); return instructionAdd(toRegister3(data), register); } case 0x88 ... 0x8f: { //LD R,r prefetch(4); return instructionLoad(toRegister3(data), register); } case 0x90 ... 0x97: { //ADC R,r prefetch(4); return instructionAddCarry(toRegister3(data), register); } case 0x98 ... 0x9f: { //LD r,R prefetch(4); return instructionLoad(register, toRegister3(data)); } case 0xa0 ... 0xa7: { //SUB R,r prefetch(4); return instructionSubtract(toRegister3(data), register); } case 0xa8 ... 0xaf: { //LD r,#3 prefetch(4); return instructionLoad(register, toImmediate((n3)data)); } case 0xb0 ... 0xb7: { //SBC R,r prefetch(4); return instructionSubtractBorrow(toRegister3(data), register); } case 0xb8 ... 0xbf: { //EX R,r if constexpr(!Long) { prefetch(6); return instructionExchange(toRegister3(data), register); } return undefined(); } case 0xc0 ... 0xc7: { //AND R,r prefetch(4); return instructionAnd(toRegister3(data), register); } case 0xc8: { //ADD r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionAdd(register, immediate); } case 0xc9: { //ADC r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionAddCarry(register, immediate); } case 0xca: { //SUB r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionSubtract(register, immediate); } case 0xcb: { //SBC r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionSubtractBorrow(register, immediate); } case 0xcc: { //AND r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionAnd(register, immediate); } case 0xcd: { //XOR r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionXor(register, immediate); } case 0xce: { //OR r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionOr(register, immediate); } case 0xcf: { //CP r,# auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionCompare(register, immediate); } case 0xd0 ... 0xd7: { //XOR R,r prefetch(4); return instructionXor(toRegister3(data), register); } case 0xd8 ... 0xdf: { //CP r,#3 if constexpr(!Long) { prefetch(4); return instructionCompare(register, toImmediate((n3)data)); } return undefined(); } case 0xe0 ... 0xe7: { //OR R,r prefetch(4); return instructionOr(toRegister3(data), register); } case 0xe8: { //RLC #,r auto immediate = fetchImmediate(); prefetch(6); return instructionRotateLeftWithoutCarry(register, immediate); } case 0xe9: { //RRC #,r auto immediate = fetchImmediate(); prefetch(6); return instructionRotateRightWithoutCarry(register, immediate); } case 0xea: { //RL #,r auto immediate = fetchImmediate(); prefetch(6); return instructionRotateLeft(register, immediate); } case 0xeb: { //RR #,r auto immediate = fetchImmediate(); prefetch(6); return instructionRotateRight(register, immediate); } case 0xec: { //SLA #,r auto immediate = fetchImmediate(); prefetch(6); return instructionShiftLeftArithmetic(register, immediate); } case 0xed: { //SRA #,r auto immediate = fetchImmediate(); prefetch(6); return instructionShiftRightArithmetic(register, immediate); } case 0xee: { //SLL #,r auto immediate = fetchImmediate(); prefetch(6); return instructionShiftLeftLogical(register, immediate); } case 0xef: { //SRL #,r auto immediate = fetchImmediate(); prefetch(6); return instructionShiftRightLogical(register, immediate); } case 0xf0 ... 0xf7: { //CP R,r prefetch(4); return instructionCompare(toRegister3(data), register); } case 0xf8: { //RLC A,r prefetch(6); return instructionRotateLeftWithoutCarry(register, A); } case 0xf9: { //RRC A,r prefetch(6); return instructionRotateRightWithoutCarry(register, A); } case 0xfa: { //RL A,r prefetch(6); return instructionRotateLeft(register, A); } case 0xfb: { //RR A,r prefetch(6); return instructionRotateRight(register, A); } case 0xfc: { //SLA A,r prefetch(6); return instructionShiftLeftArithmetic(register, A); } case 0xfd: { //SRA A,r prefetch(6); return instructionShiftRightArithmetic(register, A); } case 0xfe: { //SLL A,r prefetch(6); return instructionShiftLeftLogical(register, A); } case 0xff: { //SRL A,r prefetch(6); return instructionShiftRightLogical(register, A); } } } template auto TLCS900H::instructionSourceMemory(M memory) -> void { using T = typename M::type; enum : bool { Byte = M::bits == 8, Word = M::bits == 16, Long = M::bits == 32 }; auto data = fetch(); switch(data) { case 0x00 ... 0x03: { return undefined(); } case 0x04: { //PUSH (mem) if constexpr(!Long) { prefetch(8); return instructionPush(memory); } return undefined(); } case 0x05: { return undefined(); } case 0x06: { //RLD A,(mem) if constexpr(Byte) { prefetch(24); return instructionRotateLeftDigit(A, memory); } return undefined(); } case 0x07: { //RRD A,(mem) if constexpr(Byte) { prefetch(24); return instructionRotateRightDigit(A, memory); } return undefined(); } case 0x08 ... 0x0f: { return undefined(); } case 0x10: { //LDI auto target = n3(OP) == 5 ? XIX : XDE; auto source = n3(OP) == 5 ? XIY : XHL; if constexpr(Byte) { prefetch(12); return instructionLoad(target, source); } if constexpr(Word) { prefetch(12); return instructionLoad(target, source); } return undefined(); } case 0x11: { //LDIR auto target = n3(OP) == 5 ? XIX : XDE; auto source = n3(OP) == 5 ? XIY : XHL; if constexpr(Byte) { prefetch(2); return instructionLoadRepeat(target, source); } if constexpr(Word) { prefetch(2); return instructionLoadRepeat(target, source); } return undefined(); } case 0x12: { //LDD auto target = n3(OP) == 5 ? XIX : XDE; auto source = n3(OP) == 5 ? XIY : XHL; if constexpr(Byte) { prefetch(12); return instructionLoad(target, source); } if constexpr(Word) { prefetch(12); return instructionLoad(target, source); } return undefined(); } case 0x13: { //LDDR auto target = n3(OP) == 5 ? XIX : XDE; auto source = n3(OP) == 5 ? XIY : XHL; if constexpr(Byte) { prefetch(2); return instructionLoadRepeat(target, source); } if constexpr(Word) { prefetch(2); return instructionLoadRepeat(target, source); } return undefined(); } case 0x14: { //CPI auto register = toRegister3(OP); if constexpr(Byte) { prefetch(10); return instructionCompare( A, register); } if constexpr(Word) { prefetch(10); return instructionCompare(WA, register); } return undefined(); } case 0x15: { //CPIR auto register = toRegister3(OP); if constexpr(Byte) { prefetch(2); return instructionCompareRepeat( A, register); } if constexpr(Word) { prefetch(2); return instructionCompareRepeat(WA, register); } return undefined(); } case 0x16: { //CPD if constexpr(!Long) { auto register = toRegister3(OP); if constexpr(Byte) { prefetch(10); return instructionCompare( A, register); } if constexpr(Word) { prefetch(10); return instructionCompare(WA, register); } return undefined(); } return undefined(); } case 0x17: { //CPDR if constexpr(!Long) { prefetch(2); auto register = toRegister3(OP); if constexpr(Byte) { prefetch(2); return instructionCompareRepeat( A, register); } if constexpr(Word) { prefetch(2); return instructionCompareRepeat(WA, register); } return undefined(); } return undefined(); } case 0x18: { return undefined(); } case 0x19: { //LD (nn),(m) if constexpr(!Long) { auto target = fetchMemory(); prefetch(12); return instructionLoad(target, memory); } return undefined(); } case 0x1a ... 0x1f: { return undefined(); } case 0x20 ... 0x27: { //LD R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionLoad(toRegister3(data), memory); } case 0x28 ... 0x2f: { return undefined(); } case 0x30 ... 0x37: { //EX (mem),R if constexpr(!Long) { prefetch(8); return instructionExchange(memory, toRegister3(data)); } return undefined(); } case 0x38: { //ADD (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionAdd(memory, immediate); } return undefined(); } case 0x39: { //ADC (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionAddCarry(memory, immediate); } return undefined(); } case 0x3a: { //SUB (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionSubtract(memory, immediate); } return undefined(); } case 0x3b: { //SBC (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionSubtractBorrow(memory, immediate); } return undefined(); } case 0x3c: { //AND (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionAnd(memory, immediate); } return undefined(); } case 0x3d: {//XOR (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionXor(memory, immediate); } } return undefined(); case 0x3e: { //OR (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(10); if constexpr(Word) prefetch(12); return instructionOr(memory, immediate); } return undefined(); } case 0x3f: { //CP (mem),# if constexpr(!Long) { auto immediate = fetchImmediate(); if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(10); return instructionCompare(memory, immediate); } return undefined(); } case 0x40 ... 0x47: { //MUL R,(mem) if constexpr(!Long) { if constexpr(Byte) prefetch(24); if constexpr(Word) prefetch(30); return instructionMultiply(toRegister3(data), memory); } return undefined(); } case 0x48 ... 0x4f: { //MULS R,(mem) if constexpr(!Long) { if constexpr(Byte) prefetch(20); if constexpr(Word) prefetch(26); return instructionMultiplySigned(toRegister3(data), memory); } return undefined(); } case 0x50 ... 0x57: { //DIV R,(mem) if constexpr(!Long) { if constexpr(Byte) prefetch(30); if constexpr(Word) prefetch(46); return instructionDivide(toRegister3(data), memory); } return undefined(); } case 0x58 ... 0x5f: { //DIVS R,(mem) if constexpr(!Long) { if constexpr(Byte) prefetch(36); if constexpr(Word) prefetch(52); return instructionDivideSigned(toRegister3(data), memory); } return undefined(); } case 0x60 ... 0x67: { //INC #3,(mem) if constexpr(!Long) { prefetch(8); return instructionIncrement(memory, toImmediate((n3)data)); } return undefined(); } case 0x68 ... 0x6f: { //DEC #3,(mem) if constexpr(!Long) { prefetch(8); return instructionDecrement(memory, toImmediate((n3)data)); } return undefined(); } case 0x70 ... 0x77: { return undefined(); } case 0x78: { //RLC (mem) if constexpr(!Long) { prefetch(8); return instructionRotateLeftWithoutCarry(memory, toImmediate(1)); } return undefined(); } case 0x79: { //RRC (mem) if constexpr(!Long) { prefetch(8); return instructionRotateRightWithoutCarry(memory, toImmediate(1)); } return undefined(); } case 0x7a: { //RL (mem) if constexpr(!Long) { prefetch(8); return instructionRotateLeft(memory, toImmediate(1)); } return undefined(); } case 0x7b: { //RR (mem) if constexpr(!Long) { prefetch(8); return instructionRotateRight(memory, toImmediate(1)); } return undefined(); } case 0x7c: { //SLA (mem) if constexpr(!Long) { prefetch(8); return instructionShiftLeftArithmetic(memory, toImmediate(1)); } return undefined(); } case 0x7d: { //SRA (mem) if constexpr(!Long) { prefetch(8); return instructionShiftRightArithmetic(memory, toImmediate(1)); } return undefined(); } case 0x7e: { //SLL (mem) if constexpr(!Long) { prefetch(8); return instructionShiftLeftLogical(memory, toImmediate(1)); } return undefined(); } case 0x7f: { //SRL (mem) if constexpr(!Long) { prefetch(8); return instructionShiftRightLogical(memory, toImmediate(1)); } return undefined(); } case 0x80 ... 0x87: { //ADD R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionAdd(toRegister3(data), memory); } case 0x88 ... 0x8f: { //ADD (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionAdd(memory, toRegister3(data)); } case 0x90 ... 0x97: { //ADC R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionAddCarry(toRegister3(data), memory); } case 0x98 ... 0x9f: { //ADC (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionAddCarry(memory, toRegister3(data)); } case 0xa0 ... 0xa7: { //SUB R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionSubtract(toRegister3(data), memory); } case 0xa8 ... 0xaf: { //SUB (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionSubtract(memory, toRegister3(data)); } case 0xb0 ... 0xb7: { //SBC R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionSubtractBorrow(toRegister3(data), memory); } case 0xb8 ... 0xbf: { //SBC (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionSubtractBorrow(memory, toRegister3(data)); } case 0xc0 ... 0xc7: { //AND R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionAnd(toRegister3(data), memory); } case 0xc8 ... 0xcf: { //AND (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionAnd(memory, toRegister3(data)); } case 0xd0 ... 0xd7: { //XOR R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionXor(toRegister3(data), memory); } case 0xd8 ... 0xdf: { //XOR (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionXor(memory, toRegister3(data)); } case 0xe0 ... 0xe7: { //OR R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionOr(toRegister3(data), memory); } case 0xe8 ... 0xef: { //OR (mem),R if constexpr(Byte) prefetch(8); if constexpr(Word) prefetch(8); if constexpr(Long) prefetch(12); return instructionOr(memory, toRegister3(data)); } case 0xf0 ... 0xf7: { //CP R,(mem) if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionCompare(toRegister3(data), memory); } case 0xf8 ... 0xff: { //CP (mem),R if constexpr(Byte) prefetch(6); if constexpr(Word) prefetch(6); if constexpr(Long) prefetch(8); return instructionCompare(memory, toRegister3(data)); } } } auto TLCS900H::instructionTargetMemory(n32 address) -> void { auto data = fetch(); switch(data) { case 0x00: { //LD.B (m),# auto immediate = fetchImmediate(); prefetch(8); return instructionLoad(toMemory(address), immediate); } case 0x01: { return undefined(); } case 0x02: { //LD.W (m),# auto immediate = fetchImmediate(); prefetch(10); return instructionLoad(toMemory(address), immediate); } case 0x03: { return undefined(); } case 0x04: { //POP.B (mem) prefetch(10); return instructionPop(toMemory(address)); } case 0x05: { return undefined(); } case 0x06: { //POP.W (mem) prefetch(10); return instructionPop(toMemory(address)); } case 0x07 ... 0x13: { return undefined(); } case 0x14: { //LD.B (m),(nn) auto source = fetchMemory(); prefetch(12); return instructionLoad(toMemory(address), source); } case 0x15: { return undefined(); } case 0x16: { //LD.W (m),(nn) auto source = fetchMemory(); prefetch(12); return instructionLoad(toMemory(address), source); } case 0x17 ... 0x1f: { return undefined(); } case 0x20 ... 0x27: { //LDA.W R,mem prefetch(8); return instructionLoad(toRegister3(data), toImmediate(address)); } case 0x28: { //ANDCF A,(mem) prefetch(10); return instructionAndCarry(toMemory(address), A); } case 0x29: { //ORCF A,(mem) prefetch(10); return instructionOrCarry(toMemory(address), A); } case 0x2a: { //XORCF A,(mem) prefetch(10); return instructionXorCarry(toMemory(address), A); } case 0x2b: { //LDCF A,(mem) prefetch(10); return instructionLoadCarry(toMemory(address), A); } case 0x2c: { //STCF A,(mem) prefetch(12); return instructionStoreCarry(toMemory(address), A); } case 0x2d ... 0x2f: { return undefined(); } case 0x30 ... 0x37: { //LDA.L R,mem prefetch(8); return instructionLoad(toRegister3(data), toImmediate(address)); } case 0x38 ... 0x3f: { return undefined(); } case 0x40 ... 0x47: { //LD.B (mem),R prefetch(6); return instructionLoad(toMemory(address), toRegister3(data)); } case 0x48 ... 0x4f: { return undefined(); } case 0x50 ... 0x57: { //LD.W (mem),R prefetch(6); return instructionLoad(toMemory(address), toRegister3(data)); } case 0x58 ... 0x5f: { return undefined(); } case 0x60 ... 0x67: { //LD.L (mem),R prefetch(8); return instructionLoad(toMemory(address), toRegister3(data)); } case 0x68 ... 0x7f: { return undefined(); } case 0x80 ... 0x87: { //ANDCF #3,(mem) prefetch(10); return instructionAndCarry(toMemory(address), toImmediate(data)); } case 0x88 ... 0x8f: { //ORCF #3,(mem) prefetch(10); return instructionOrCarry(toMemory(address), toImmediate(data)); } case 0x90 ... 0x97: { //XORCF #3,(mem) prefetch(10); return instructionXorCarry(toMemory(address), toImmediate(data)); } case 0x98 ... 0x9f: { //LDCF #3,(mem) prefetch(10); return instructionLoadCarry(toMemory(address), toImmediate(data)); } case 0xa0 ... 0xa7: { //STCF #3,(mem) prefetch(10); return instructionStoreCarry(toMemory(address), toImmediate(data)); } case 0xa8 ... 0xaf: { //TSET #3,(mem) prefetch(10); return instructionTestSet(toMemory(address), toImmediate(data)); } case 0xb0 ... 0xb7: { //RES #3,(mem) prefetch(10); return instructionReset(toMemory(address), toImmediate(data)); } case 0xb8 ... 0xbf: { //SET #3,(mem) prefetch(10); return instructionSet(toMemory(address), toImmediate(data)); } case 0xc0 ... 0xc7: { //CHG #3,(mem) prefetch(10); return instructionChange(toMemory(address), toImmediate(data)); } case 0xc8 ... 0xcf: { //BIT #3,(mem) prefetch(10); return instructionBit(toMemory(address), toImmediate(data)); } case 0xd0 ... 0xdf: { //JP cc,mem prefetch(8); if(!condition((n4)data)) return; prefetch(4); instructionJump(toImmediate(address)); return prefetch(2); } case 0xe0 ... 0xef: { //CALL cc,mem if(!condition((n4)data)) return prefetch(8); prefetch(20); instructionCall(toImmediate(address)); return prefetch(2); } case 0xf0 ... 0xff: { //RET cc if(!condition((n4)data)) return prefetch(8); prefetch(20); instructionReturn(); return prefetch(2); } } } ares-126/ares/component/processor/tlcs900h/instructions.cpp000066400000000000000000000442171415063341600241220ustar00rootroot00000000000000template auto TLCS900H::instructionAdd(Target target, Source source) -> void { store(target, algorithmAdd(load(target), load(source))); } template auto TLCS900H::instructionAddCarry(Target target, Source source) -> void { store(target, algorithmAdd(load(target), load(source), CF)); } template auto TLCS900H::instructionAnd(Target target, Source source) -> void { store(target, algorithmAnd(load(target), load(source))); } template auto TLCS900H::instructionAndCarry(Source source, Offset offset) -> void { if constexpr(Source::bits == 8 && is_same_v>) { if(load(offset).bit(3)) return (void)Undefined; } CF &= load(source).bit(load(offset) & Source::bits - 1); } template auto TLCS900H::instructionBit(Source source, Offset offset) -> void { NF = 0; VF = Undefined; HF = 1; ZF = !load(source).bit(load(offset)); SF = Undefined; } template auto TLCS900H::instructionBitSearch1Backward(Source source) -> void { auto value = load(source); for(u32 index : reverse(range(16))) { if(value.bit(index)) return VF = 0, store(A, index); } VF = 1; } template auto TLCS900H::instructionBitSearch1Forward(Source source) -> void { auto value = load(source); for(u32 index : range(16)) { if(value.bit(index)) return VF = 0, store(A, index); } VF = 1; } template auto TLCS900H::instructionCall(Source source) -> void { auto address = load(source); push(PC); store(PC, address); } template auto TLCS900H::instructionCallRelative(Source displacement) -> void { push(PC); store(PC, load(PC) + load(displacement)); } template auto TLCS900H::instructionChange(Target target, Offset offset) -> void { auto result = load(target); result.bit(load(offset) & Target::bits - 1) ^= 1; store(target, result); } template auto TLCS900H::instructionCompare(Target target, Source source) -> void { auto cf = CF; //CF is not modified; but algorithmSubtract will modify it algorithmSubtract(load(target), load(toMemory(load(source)))); store(source, load(source) + Adjust); store(BC, load(BC) - 1); CF = cf; VF = load(BC) != 0; } template auto TLCS900H::instructionCompareRepeat(Target target, Source source) -> void { do { prefetch(14); instructionCompare(target, source); } while(load(BC) && !ZF); } template auto TLCS900H::instructionCompare(Target target, Source source) -> void { algorithmSubtract(load(target), load(source)); } template auto TLCS900H::instructionComplement(Target target) -> void { store(target, ~load(target)); NF = 1; HF = 1; } template auto TLCS900H::instructionDecimalAdjustAccumulator(Modify modify) -> void { auto input = load(modify), value = input; if(CF || (n8)value > 0x99) value += NF ? -0x60 : 0x60; if(HF || (n4)value > 0x09) value += NF ? -0x06 : 0x06; if(NF == 0) CF |= value < input; if(NF == 1) CF |= value > input; VF = parity(value); HF = n8(value ^ input).bit(4); ZF = value == 0; SF = value.bit(-1); store(modify, value); } template auto TLCS900H::instructionDecrement(Target target, Source source) -> void { auto immediate = load(source); if(!immediate) immediate = 8; if constexpr(is_same_v> || is_same_v>) { //decw #n,r; decl #n,r: does not update flags store(target, load(target) - immediate); } else { //decb #n,r; decb #n,(r); decw #n,(r): does update flags store(target, algorithmDecrement(load(target), immediate)); } } template auto TLCS900H::instructionDecrementJumpNotZero(Target target, Offset offset) -> void { auto result = load(target); store(target, --result); if(!result) return; prefetch(2); store(PC, load(PC) + load(offset)); prefetch(2); } template auto TLCS900H::instructionDivide(Target target, Source source) -> void { using T = typename Target::type; using E = Natural<2 * T::bits()>; auto dividend = load(expand(target)); auto divisor = load(source); auto quotient = divisor ? E(dividend / divisor) : E(T(~(dividend >> T::bits()))); auto remainder = divisor ? E(dividend % divisor) : E(T(dividend)); store(expand(target), T(remainder) << T::bits() | T(quotient)); VF = !divisor || remainder >> T::bits(); } template auto TLCS900H::instructionDivideSigned(Target target, Source source) -> void { using T = typename Target::type; using E = Natural<2 * T::bits()>; auto dividend = load(expand(target)).integer(); auto divisor = load(source).integer(); auto quotient = divisor ? E(dividend / divisor) : E(T(~(dividend >> T::bits()))); auto remainder = divisor ? E(dividend % divisor) : E(T(dividend)); store(expand(target), T(remainder) << T::bits() | T(quotient)); VF = !divisor || remainder >> T::bits(); } template auto TLCS900H::instructionExchange(Target target, Source source) -> void { auto data = load(target); store(target, load(source)); store(source, data); } template auto TLCS900H::instructionExtendSign(Target target) -> void { store(target, load(shrink(target)).integer()); } template auto TLCS900H::instructionExtendZero(Target target) -> void { store(target, load(shrink(target))); } auto TLCS900H::instructionHalt() -> void { HALT = 1; } template auto TLCS900H::instructionIncrement(Target target, Source source) -> void { auto immediate = load(source); if(!immediate) immediate = 8; if constexpr(is_same_v> || is_same_v>) { //incw #n,r; incl #n,r: does not update flags store(target, load(target) + immediate); } else { //incb #n,r; incb #n,(r); incw #n,(r): does update flags store(target, algorithmIncrement(load(target), immediate)); } } template auto TLCS900H::instructionJump(Source source) -> void { auto address = load(source); store(PC, address); } template auto TLCS900H::instructionJumpRelative(Source displacement) -> void { store(PC, load(PC) + load(displacement)); } template auto TLCS900H::instructionLink(Target target, Offset offset) -> void { push(target); store(target, load(XSP)); store(XSP, load(XSP) + load(offset)); } template auto TLCS900H::instructionLoad(Target target, Source source) -> void { store(target, load(source)); } template auto TLCS900H::instructionLoadCarry(Source source, Offset offset) -> void { if constexpr(Source::bits == 8 && is_same_v>) { if(load(offset).bit(3)) return (void)Undefined; } CF = load(source).bit(load(offset) & Source::bits - 1); } template auto TLCS900H::instructionLoad(Target target, Source source) -> void { store(toMemory(load(target)), load(toMemory(load(source)))); store(source, load(source) + Adjust); store(target, load(target) + Adjust); store(BC, load(BC) - 1); NF = 0; VF = load(BC) != 0; HF = 0; } //note: the TLCS900/H manual states that when BC=0, an extra memory read cycle occurs and its value is discarded //further, the instruction list indicates LDIR and LDDR take 7n+1 wait states //however, the manual indicates it's the first address that is read twice //it further also isn't clear whether this only occurs when *starting* LDIR and LDDR with BC=0, //or if it always occurs at the end of ever LDIR and LDDR instruction. //since I'm not sure how to emulate this, I don't try and guess here. template auto TLCS900H::instructionLoadRepeat(Target target, Source source) -> void { do { prefetch(14); instructionLoad(target, source); } while(load(BC)); } //reverse all bits in a 16-bit register template auto TLCS900H::instructionMirror(Modify modify) -> void { auto data = load(modify); store(modify, bit::reverse(data)); } template auto TLCS900H::instructionModuloDecrement(Target target, Source source) -> void { auto result = load(target); auto number = load(source); if((result & number) == number) { result += number; } else { result -= Modulo; } store(target, result); } template auto TLCS900H::instructionModuloIncrement(Target target, Source source) -> void { auto result = load(target); auto number = load(source); if((result & number) == number) { result -= number; } else { result += Modulo; } store(target, result); } template auto TLCS900H::instructionMultiply(Target target, Source source) -> void { store(expand(target), load(target) * load(source)); } template auto TLCS900H::instructionMultiplyAdd(Modify modify) -> void { auto xde = toMemory(load(XDE)); auto xhl = toMemory(load(XHL)); auto source = load(expand(modify)); auto target = load(xde) * load(xhl); store(expand(modify), source + target); store(XHL, load(XHL) - 2); auto result = load(expand(modify)); VF = n32((target ^ result) & (source ^ result)).bit(-1); ZF = result == 0; SF = result.bit(-1); } template auto TLCS900H::instructionMultiplySigned(Target target, Source source) -> void { store(expand(target), load(target).integer() * load(source).integer()); } template auto TLCS900H::instructionNegate(Target target) -> void { store(target, algorithmSubtract(typename Target::type{0}, load(target))); } auto TLCS900H::instructionNoOperation() -> void { } template auto TLCS900H::instructionOr(Target target, Source source) -> void { store(target, algorithmOr(load(target), load(source))); } template auto TLCS900H::instructionOrCarry(Source source, Offset offset) -> void { if constexpr(Source::bits == 8 && is_same_v>) { if(load(offset).bit(3)) return (void)Undefined; } CF |= load(source).bit(load(offset) & Source::bits - 1); } //increments odd addresses only to ensure they are even (16-bit aligned) template auto TLCS900H::instructionPointerAdjustAccumulator(Target target) -> void { auto result = load(target); store(target, result + result.bit(0)); } template auto TLCS900H::instructionPop(Target target) -> void { pop(target); } template auto TLCS900H::instructionPush(Source source) -> void { push(source); } template auto TLCS900H::instructionReset(Target target, Offset offset) -> void { auto result = load(target); result.bit(load(offset) & Target::bits - 1) = 0; store(target, result); } auto TLCS900H::instructionReturn() -> void { pop(PC); } template auto TLCS900H::instructionReturnDeallocate(Source displacement) -> void { pop(PC); store(XSP, load(XSP) + load(displacement)); } auto TLCS900H::instructionReturnInterrupt() -> void { pop(SR); pop(PC); store(INTNEST, load(INTNEST) - 1); } template auto TLCS900H::instructionRotateLeftDigit(LHS lhs, RHS rhs) -> void { auto lvalue = load(lhs); auto rvalue = load(rhs); auto Lvalue = lvalue; lvalue.bit(0,3) = rvalue.bit(4,7); rvalue.bit(4,7) = rvalue.bit(0,3); rvalue.bit(0,3) = Lvalue.bit(0,3); store(lhs, lvalue); store(rhs, rvalue); NF = 0; VF = parity(lvalue); HF = 0; ZF = lvalue == 0; SF = lvalue.bit(-1); } template auto TLCS900H::instructionRotateLeft(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { u32 cf = result.bit(-1); result = result << 1 | CF; CF = cf; } store(target, algorithmRotated(result)); } template auto TLCS900H::instructionRotateLeftWithoutCarry(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { CF = result.bit(-1); result = result << 1 | CF; } store(target, algorithmRotated(result)); } template auto TLCS900H::instructionRotateRightDigit(LHS lhs, RHS rhs) -> void { auto lvalue = load(lhs); auto rvalue = load(rhs); auto Rvalue = rvalue; rvalue.bit(0,3) = rvalue.bit(4,7); rvalue.bit(4,7) = lvalue.bit(0,3); lvalue.bit(0,3) = Rvalue.bit(0,3); store(lhs, lvalue); store(rhs, rvalue); NF = 0; VF = parity(lvalue); HF = 0; ZF = lvalue == 0; SF = lvalue.bit(-1); } template auto TLCS900H::instructionRotateRight(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { u32 cf = result.bit(0); result = CF << Target::bits - 1 | result >> 1; CF = cf; } store(target, algorithmRotated(result)); } template auto TLCS900H::instructionRotateRightWithoutCarry(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { CF = result.bit(0); result = CF << Target::bits - 1 | result >> 1; } store(target, algorithmRotated(result)); } template auto TLCS900H::instructionSet(Target target, Offset offset) -> void { auto result = load(target); result.bit(load(offset) & Target::bits - 1) = 1; store(target, result); } //RCF: reset carry flag //SCF: set carry flag auto TLCS900H::instructionSetCarryFlag(n1 value) -> void { CF = value; NF = 0; HF = 0; } //CCF: complement carry flag //ZCF: complement zero flag to carry flag auto TLCS900H::instructionSetCarryFlagComplement(n1 value) -> void { CF = !value; NF = 0; HF = Undefined; } template auto TLCS900H::instructionSetConditionCode(n4 code, Target target) -> void { store(target, condition(code)); } auto TLCS900H::instructionSetInterruptFlipFlop(n3 value) -> void { IFF = value; } auto TLCS900H::instructionSetRegisterFilePointer(n2 value) -> void { RFP = value; } template auto TLCS900H::instructionShiftLeftArithmetic(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { CF = result.bit(-1); result = result << 1; } store(target, algorithmShifted(result)); } template auto TLCS900H::instructionShiftLeftLogical(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { CF = result.bit(-1); result = result << 1; } store(target, algorithmShifted(result)); } template auto TLCS900H::instructionShiftRightArithmetic(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { CF = result.bit(0); result = result >> 1; result.bit(-1) = result.bit(-2); } store(target, algorithmShifted(result)); } template auto TLCS900H::instructionShiftRightLogical(Target target, Amount amount) -> void { auto result = load(target); auto length = load(amount).clip(4); if(!length) length = 16; prefetch(length >> 2 << 1); for(u32 n : range(length)) { CF = result.bit(0); result = result >> 1; } store(target, algorithmShifted(result)); } template auto TLCS900H::instructionStoreCarry(Target target, Offset offset) -> void { if constexpr(Target::bits == 8) { if(load(offset).bit(3)) return; //unlike other *CF instructions, STCF behavior is defined } auto result = load(target); result.bit(load(offset)) = CF; store(target, result); } auto TLCS900H::instructionSoftwareInterrupt(n3 vector) -> void { interrupt(vector << 2); } template auto TLCS900H::instructionSubtract(Target target, Source source) -> void { store(target, algorithmSubtract(load(target), load(source))); } //note: the TLCS900/H manual states this is subtract-with-carry, but it isn't template auto TLCS900H::instructionSubtractBorrow(Target target, Source source) -> void { store(target, algorithmSubtract(load(target), load(source), CF)); } template auto TLCS900H::instructionTestSet(Target target, Offset offset) -> void { auto result = load(target); NF = 0; VF = Undefined; HF = 1; ZF = result.bit(load(offset) & Target::bits - 1); SF = Undefined; result.bit(load(offset) & Target::bits - 1) = 1; store(target, result); } template auto TLCS900H::instructionUnlink(Target target) -> void { store(XSP, load(target)); pop(target); } template auto TLCS900H::instructionXor(Target target, Source source) -> void { store(target, algorithmXor(load(target), load(source))); } template auto TLCS900H::instructionXorCarry(Source source, Offset offset) -> void { if constexpr(Source::bits == 8 && is_same_v>) { if(load(offset).bit(3)) return (void)Undefined; } CF ^= load(source).bit(load(offset) & Source::bits - 1); } ares-126/ares/component/processor/tlcs900h/memory.cpp000066400000000000000000000045761415063341600226720ustar00rootroot00000000000000template<> auto TLCS900H::fetch() -> i8 { return (i8 )fetch(); } template<> auto TLCS900H::fetch() -> i16 { return (i16)fetch(); } template<> auto TLCS900H::fetch() -> i24 { return (i24)fetch(); } template<> auto TLCS900H::fetch() -> i32 { return (i32)fetch(); } template auto TLCS900H::fetchRegister() -> Register { return Register{fetch()}; } template auto TLCS900H::fetchMemory() -> Memory { return Memory{fetch()}; } template auto TLCS900H::fetchImmediate() -> Immediate { return Immediate{fetch()}; } // #define XSP r.xsp.l.l0 template auto TLCS900H::pop(T data) -> void { auto value = typename T::type(); if constexpr(T::bits == 8) value = read(Byte, XSP); if constexpr(T::bits == 16) value = read(Word, XSP); if constexpr(T::bits == 32) value = read(Long, XSP); store(data, value); XSP += T::bits >> 3; } template auto TLCS900H::push(T data) -> void { XSP -= T::bits >> 3; auto value = load(data); if constexpr(T::bits == 8) write(Byte, XSP, value); if constexpr(T::bits == 16) write(Word, XSP, value); if constexpr(T::bits == 32) write(Long, XSP, value); } #undef XSP // template<> auto TLCS900H::load(Memory memory) -> n8 { if(PIC) step(PIC), PIC = 0; return read(Byte, memory.address); } template<> auto TLCS900H::load(Memory memory) -> n16 { if(PIC) step(PIC), PIC = 0; return read(Word, memory.address); } template<> auto TLCS900H::load(Memory memory) -> n32 { if(PIC) step(PIC), PIC = 0; return read(Long, memory.address); } template<> auto TLCS900H::load(Memory memory) -> i8 { if(PIC) step(PIC), PIC = 0; return (i8 )read(Byte, memory.address); } template<> auto TLCS900H::load(Memory memory) -> i16 { if(PIC) step(PIC), PIC = 0; return (i16)read(Word, memory.address); } template<> auto TLCS900H::load(Memory memory) -> i32 { if(PIC) step(PIC), PIC = 0; return (i32)read(Long, memory.address); } template<> auto TLCS900H::store(Memory memory, n32 data) -> void { if(PIC) step(PIC), PIC = 0; write(Byte, memory.address, data); } template<> auto TLCS900H::store(Memory memory, n32 data) -> void { if(PIC) step(PIC), PIC = 0; write(Word, memory.address, data); } template<> auto TLCS900H::store(Memory memory, n32 data) -> void { if(PIC) step(PIC), PIC = 0; write(Long, memory.address, data); } ares-126/ares/component/processor/tlcs900h/prefetch.cpp000066400000000000000000000027561415063341600231600ustar00rootroot00000000000000#define PC r.pc.l.l0 //called on branches, returns, and interrupts auto TLCS900H::invalidate() -> void { if(PIC) step(PIC), PIC = 0; PIQ.flush(); } auto TLCS900H::prefetch(u32 clocks) -> void { PIC += clocks; while(PIC) { if(PIQ.size() >= 3) break; auto address = PC + PIQ.size(); auto size = width(address); auto wait = speed(size, address); if(wait > PIC) break; PIC -= wait; if(size == Byte || address & 1) { auto byte = read(Byte, address); PIQ.write(byte); } else { auto word = read(Word, address); PIQ.write(word >> 0); PIQ.write(word >> 8); } } } template<> auto TLCS900H::fetch() -> n8 { prefetch(0); if(PIQ.empty()) { auto address = PC + PIQ.size(); auto size = width(address); if(size == Byte || address & 1) { auto byte = read(Byte, address); PIQ.write(byte); } else { auto word = read(Word, address); PIQ.write(word >> 0); PIQ.write(word >> 8); } } return PC++, PIQ.read(0); } template<> auto TLCS900H::fetch() -> n16 { u8 d0 = fetch(); u8 d1 = fetch(); return d0 << 0 | d1 << 8; } template<> auto TLCS900H::fetch() -> n24 { u8 d0 = fetch(); u8 d1 = fetch(); u8 d2 = fetch(); return d0 << 0 | d1 << 8 | d2 << 16; } template<> auto TLCS900H::fetch() -> n32 { u8 d0 = fetch(); u8 d1 = fetch(); u8 d2 = fetch(); u8 d3 = fetch(); return d0 << 0 | d1 << 8 | d2 << 16 | d3 << 24; } #undef PC ares-126/ares/component/processor/tlcs900h/registers.cpp000066400000000000000000000161111415063341600233550ustar00rootroot00000000000000#define a RFP #define p RFP - 1 & 3 template<> auto TLCS900H::map(Register register) const -> maybe { switch(register.id) { #define r(id, name) case id: return r.name; r(0x00, xwa[0].b.b0) r(0x01, xwa[0].b.b1) r(0x02, xwa[0].b.b2) r(0x03, xwa[0].b.b3) r(0x04, xbc[0].b.b0) r(0x05, xbc[0].b.b1) r(0x06, xbc[0].b.b2) r(0x07, xbc[0].b.b3) r(0x08, xde[0].b.b0) r(0x09, xde[0].b.b1) r(0x0a, xde[0].b.b2) r(0x0b, xde[0].b.b3) r(0x0c, xhl[0].b.b0) r(0x0d, xhl[0].b.b1) r(0x0e, xhl[0].b.b2) r(0x0f, xhl[0].b.b3) r(0x10, xwa[1].b.b0) r(0x11, xwa[1].b.b1) r(0x12, xwa[1].b.b2) r(0x13, xwa[1].b.b3) r(0x14, xbc[1].b.b0) r(0x15, xbc[1].b.b1) r(0x16, xbc[1].b.b2) r(0x17, xbc[1].b.b3) r(0x18, xde[1].b.b0) r(0x19, xde[1].b.b1) r(0x1a, xde[1].b.b2) r(0x1b, xde[1].b.b3) r(0x1c, xhl[1].b.b0) r(0x1d, xhl[1].b.b1) r(0x1e, xhl[1].b.b2) r(0x1f, xhl[1].b.b3) r(0x20, xwa[2].b.b0) r(0x21, xwa[2].b.b1) r(0x22, xwa[2].b.b2) r(0x23, xwa[2].b.b3) r(0x24, xbc[2].b.b0) r(0x25, xbc[2].b.b1) r(0x26, xbc[2].b.b2) r(0x27, xbc[2].b.b3) r(0x28, xde[2].b.b0) r(0x29, xde[2].b.b1) r(0x2a, xde[2].b.b2) r(0x2b, xde[2].b.b3) r(0x2c, xhl[2].b.b0) r(0x2d, xhl[2].b.b1) r(0x2e, xhl[2].b.b2) r(0x2f, xhl[2].b.b3) r(0x30, xwa[3].b.b0) r(0x31, xwa[3].b.b1) r(0x32, xwa[3].b.b2) r(0x33, xwa[3].b.b3) r(0x34, xbc[3].b.b0) r(0x35, xbc[3].b.b1) r(0x36, xbc[3].b.b2) r(0x37, xbc[3].b.b3) r(0x38, xde[3].b.b0) r(0x39, xde[3].b.b1) r(0x3a, xde[3].b.b2) r(0x3b, xde[3].b.b3) r(0x3c, xhl[3].b.b0) r(0x3d, xhl[3].b.b1) r(0x3e, xhl[3].b.b2) r(0x3f, xhl[3].b.b3) r(0xd0, xwa[p].b.b0) r(0xd1, xwa[p].b.b1) r(0xd2, xwa[p].b.b2) r(0xd3, xwa[p].b.b3) r(0xd4, xbc[p].b.b0) r(0xd5, xbc[p].b.b1) r(0xd6, xbc[p].b.b2) r(0xd7, xbc[p].b.b3) r(0xd8, xde[p].b.b0) r(0xd9, xde[p].b.b1) r(0xda, xde[p].b.b2) r(0xdb, xde[p].b.b3) r(0xdc, xhl[p].b.b0) r(0xdd, xhl[p].b.b1) r(0xde, xhl[p].b.b2) r(0xdf, xhl[p].b.b3) r(0xe0, xwa[a].b.b0) r(0xe1, xwa[a].b.b1) r(0xe2, xwa[a].b.b2) r(0xe3, xwa[a].b.b3) r(0xe4, xbc[a].b.b0) r(0xe5, xbc[a].b.b1) r(0xe6, xbc[a].b.b2) r(0xe7, xbc[a].b.b3) r(0xe8, xde[a].b.b0) r(0xe9, xde[a].b.b1) r(0xea, xde[a].b.b2) r(0xeb, xde[a].b.b3) r(0xec, xhl[a].b.b0) r(0xed, xhl[a].b.b1) r(0xee, xhl[a].b.b2) r(0xef, xhl[a].b.b3) r(0xf0, xix .b.b0) r(0xf1, xix .b.b1) r(0xf2, xix .b.b2) r(0xf3, xix .b.b3) r(0xf4, xiy .b.b0) r(0xf5, xiy .b.b1) r(0xf6, xiy .b.b2) r(0xf7, xiy .b.b3) r(0xf8, xiz .b.b0) r(0xf9, xiz .b.b1) r(0xfa, xiz .b.b2) r(0xfb, xiz .b.b3) r(0xfc, xsp .b.b0) r(0xfd, xsp .b.b1) r(0xfe, xsp .b.b2) r(0xff, xsp .b.b3) #undef r } return nothing; } template<> auto TLCS900H::map(Register register) const -> maybe { switch(register.id & ~1) { #define r(id, name) case id: return r.name; r(0x00, xwa[0].w.w0) r(0x02, xwa[0].w.w1) r(0x04, xbc[0].w.w0) r(0x06, xbc[0].w.w1) r(0x08, xde[0].w.w0) r(0x0a, xde[0].w.w1) r(0x0c, xhl[0].w.w0) r(0x0e, xhl[0].w.w1) r(0x10, xwa[1].w.w0) r(0x12, xwa[1].w.w1) r(0x14, xbc[1].w.w0) r(0x16, xbc[1].w.w1) r(0x18, xde[1].w.w0) r(0x1a, xde[1].w.w1) r(0x1c, xhl[1].w.w0) r(0x1e, xhl[1].w.w1) r(0x20, xwa[2].w.w0) r(0x22, xwa[2].w.w1) r(0x24, xbc[2].w.w0) r(0x26, xbc[2].w.w1) r(0x28, xde[2].w.w0) r(0x2a, xde[2].w.w1) r(0x2c, xhl[2].w.w0) r(0x2e, xhl[2].w.w1) r(0x30, xwa[3].w.w0) r(0x32, xwa[3].w.w1) r(0x34, xbc[3].w.w0) r(0x36, xbc[3].w.w1) r(0x38, xde[3].w.w0) r(0x3a, xde[3].w.w1) r(0x3c, xhl[3].w.w0) r(0x3e, xhl[3].w.w1) r(0xd0, xwa[p].w.w0) r(0xd2, xwa[p].w.w1) r(0xd4, xbc[p].w.w0) r(0xd6, xbc[p].w.w1) r(0xd8, xde[p].w.w0) r(0xda, xde[p].w.w1) r(0xdc, xhl[p].w.w0) r(0xde, xhl[p].w.w1) r(0xe0, xwa[a].w.w0) r(0xe2, xwa[a].w.w1) r(0xe4, xbc[a].w.w0) r(0xe6, xbc[a].w.w1) r(0xe8, xde[a].w.w0) r(0xea, xde[a].w.w1) r(0xec, xhl[a].w.w0) r(0xee, xhl[a].w.w1) r(0xf0, xix .w.w0) r(0xf2, xix .w.w1) r(0xf4, xiy .w.w0) r(0xf6, xiy .w.w1) r(0xf8, xiz .w.w0) r(0xfa, xiz .w.w1) r(0xfc, xsp .w.w0) r(0xfe, xsp .w.w1) #undef r } return nothing; } template<> auto TLCS900H::map(Register register) const -> maybe { switch(register.id & ~3) { #define r(id, name) case id: return r.name; r(0x00, xwa[0].l.l0) r(0x04, xbc[0].l.l0) r(0x08, xde[0].l.l0) r(0x0c, xhl[0].l.l0) r(0x10, xwa[1].l.l0) r(0x14, xbc[1].l.l0) r(0x18, xde[1].l.l0) r(0x1c, xhl[1].l.l0) r(0x20, xwa[2].l.l0) r(0x24, xbc[2].l.l0) r(0x28, xde[2].l.l0) r(0x2c, xhl[2].l.l0) r(0x30, xwa[3].l.l0) r(0x34, xbc[3].l.l0) r(0x38, xde[3].l.l0) r(0x3c, xhl[3].l.l0) r(0xd0, xwa[p].l.l0) r(0xd4, xbc[p].l.l0) r(0xd8, xde[p].l.l0) r(0xdc, xhl[p].l.l0) r(0xe0, xwa[a].l.l0) r(0xe4, xbc[a].l.l0) r(0xe8, xde[a].l.l0) r(0xec, xhl[a].l.l0) r(0xf0, xix .l.l0) r(0xf4, xiy .l.l0) r(0xf8, xiz .l.l0) r(0xfc, xsp .l.l0) #undef r } return nothing; } #undef a #undef p template<> auto TLCS900H::load(Register register) const -> n8 { return map(register)(Undefined); } template<> auto TLCS900H::load(Register register) const -> n16 { return map(register)(Undefined); } template<> auto TLCS900H::load(Register register) const -> n32 { return map(register)(Undefined); } template<> auto TLCS900H::store(Register register, n32 data) -> void { if(auto r = map(register)) r() = data; } template<> auto TLCS900H::store(Register register, n32 data) -> void { if(auto r = map(register)) r() = data; } template<> auto TLCS900H::store(Register register, n32 data) -> void { if(auto r = map(register)) r() = data; } auto TLCS900H::expand(Register register) const -> Register { return {register.id & ~1}; } auto TLCS900H::expand(Register register) const -> Register { return {register.id & ~3}; } auto TLCS900H::shrink(Register register) const -> Register { return {register.id}; } auto TLCS900H::shrink(Register register) const -> Register { return {register.id}; } auto TLCS900H::load(FlagRegister f) const -> n8 { //TLCS-90: d3 = X (expansion carry flag); TLCS-900/H: always 0 //TLCS-90: d5 = IFF (interrupt flip-flop); TLCS-900/H: always 0 switch(f.id) { case 0: return CF << 0 | NF << 1 | VF << 2 | 0 << 3 | HF << 4 | 0 << 5 | ZF << 6 | SF << 7; case 1: return CA << 0 | NA << 1 | VA << 2 | 0 << 3 | HA << 4 | 0 << 5 | ZA << 6 | SA << 7; } unreachable; } auto TLCS900H::store(FlagRegister f, n8 data) -> void { switch(f.id) { case 0: CF = data.bit(0); NF = data.bit(1); VF = data.bit(2); HF = data.bit(4); ZF = data.bit(6); SF = data.bit(7); return; case 1: CA = data.bit(0); NA = data.bit(1); VA = data.bit(2); HA = data.bit(4); ZA = data.bit(6); SA = data.bit(7); return; } unreachable; } auto TLCS900H::load(StatusRegister) const -> n16 { //TLCS-900: d10 = RFP2; TLCS-900/H: always 0 //TLCS-900: d11 = MAX; TLCS-900/H: always 1 //TLCS-900: d15 = SYSM; TLCS-900/H: always 1 return load(F) | RFP << 8 | 0 << 10 | 1 << 11 | IFF << 12 | 1 << 15; } auto TLCS900H::store(StatusRegister, n16 data) -> void { store(F, data.bit(0,7)); RFP = data.bit(8,9); IFF = data.bit(12,14); } auto TLCS900H::load(ProgramCounter) const -> n32 { return r.pc.l.l0; } auto TLCS900H::store(ProgramCounter, n32 data) -> void { r.pc.l.l0 = data; invalidate(); } ares-126/ares/component/processor/tlcs900h/serialization.cpp000066400000000000000000000010651415063341600242250ustar00rootroot00000000000000auto TLCS900H::serialize(serializer& s) -> void { for(u32 n : range(4)) { s(r.xwa[n].l.l0); s(r.xbc[n].l.l0); s(r.xde[n].l.l0); s(r.xhl[n].l.l0); } s(r.xix.l.l0); s(r.xiy.l.l0); s(r.xiz.l.l0); s(r.xsp.l.l0); s(r.pc.l.l0); for(u32 n : range(4)) { s(r.dmas[n].l.l0); s(r.dmad[n].l.l0); s(r.dmam[n].l.l0); } s(r.intnest.l.l0); s(CF); s(NF); s(VF); s(HF); s(ZF); s(SF); s(CA); s(NA); s(VA); s(HA); s(ZA); s(SA); s(RFP); s(IFF); s(OP); s(HALT); s(PIC); s(PIQ); s(MAR); s(MDR); } ares-126/ares/component/processor/tlcs900h/tlcs900h.cpp000066400000000000000000000014221415063341600227130ustar00rootroot00000000000000#include #include "tlcs900h.hpp" namespace ares { #include "registers.cpp" #include "control-registers.cpp" #include "prefetch.cpp" #include "memory.cpp" #include "conditions.cpp" #include "algorithms.cpp" #include "dma.cpp" #include "instruction.cpp" #include "instructions.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto TLCS900H::interrupt(n8 vector) -> void { prefetch(34); push(PC); push(SR); store(PC, load(Memory{0xffff00 | vector})); store(INTNEST, load(INTNEST) + 1); } auto TLCS900H::power() -> void { r = {}; store(XSP, 0x100); CF = CA = 0; NF = NA = 0; VF = VA = 0; HF = HA = 0; ZF = ZA = 0; SF = SA = 0; RFP = 0; IFF = 7; OP = 0; HALT = 0; PIC = 0; PIQ.flush(); MAR = 0; MDR = 0; } } ares-126/ares/component/processor/tlcs900h/tlcs900h.hpp000066400000000000000000000572301415063341600227300ustar00rootroot00000000000000//Toshiba TLCS900/H /* open questions: * * what happens when a prohibited instruction operand size is used? (eg adc.l (memory),#immediate) * what happens when %11 is used for pre-decrement and post-increment addressing? * what happens when using 8-bit register indexing and d0 is set (Word) or d1/d0 is set (Long)? * what happens during an LDX instruction when the three padding bytes aren't all 0x00? * what value is read back from a non-existent 8-bit register ID? (eg 0x40-0xcf) * many instructions are undefined, some are marked as dummy instructions ... what do each do? * what happens when using (AND,OR,XOR,LD)CF (byte)source,A with A.bit(3) set? * what happens when using MINC#,MDEC# with a non-power of two? what about with a value of 1? */ #pragma once namespace ares { struct TLCS900H { enum : u32 { Byte = 1, Word = 2, Long = 4 }; virtual auto step(u32 clocks) -> void = 0; virtual auto width(n24 address) -> u32 = 0; virtual auto speed(u32 size, n24 address) -> n32 = 0; virtual auto read(u32 size, n24 address) -> n32 = 0; virtual auto write(u32 size, n24 address, n32 data) -> void = 0; struct FlagRegister { using type = n8; enum : u32 { bits = 8 }; n1 id; }; struct StatusRegister { using type = n16; enum : u32 { bits = 16 }; }; struct ProgramCounter { using type = n32; enum : u32 { bits = 32 }; }; template struct ControlRegister { using type = T; enum : u32 { bits = 8 * sizeof(T) }; n8 id; }; template struct Register { using type = T; enum : u32 { bits = 8 * sizeof(T) }; n8 id; }; template struct Memory { using type = T; enum : u32 { bits = 8 * sizeof(T) }; n32 address; }; template struct Immediate { using type = T; enum : u32 { bits = 8 * sizeof(T) }; n32 constant; }; template auto load(Immediate immediate) const -> T { return immediate.constant; } //tlcs900h.cpp auto interrupt(n8 vector) -> void; auto power() -> void; //registers.cpp template auto map(Register) const -> maybe; template auto load(Register) const -> T; template auto store(Register, n32) -> void; auto expand(Register) const -> Register; auto expand(Register) const -> Register; auto expand(Register) const -> Register = delete; //unused auto shrink(Register) const -> Register; auto shrink(Register) const -> Register; auto shrink(Register) const -> Register = delete; //unused auto load(FlagRegister) const -> n8; auto store(FlagRegister, n8) -> void; auto load(StatusRegister) const -> n16; auto store(StatusRegister, n16) -> void; auto load(ProgramCounter) const -> n32; auto store(ProgramCounter, n32) -> void; //control-registers.cpp template auto map(ControlRegister) const -> maybe; template auto load(ControlRegister) const -> T; template auto store(ControlRegister, n32) -> void; //prefetch.cpp auto invalidate() -> void; auto prefetch(u32 clocks) -> void; template auto fetch() -> T; //memory.cpp template auto fetchRegister() -> Register; template auto fetchMemory() -> Memory; template auto fetchImmediate() -> Immediate; template auto push(T) -> void; template auto pop(T) -> void; template auto load(Memory) -> T; template auto store(Memory, n32) -> void; //conditions.cpp auto condition(n4 code) -> bool; //algorithms.cpp template auto parity(T) const -> bool; template auto algorithmAdd(T target, T source, n1 carry = 0) -> T; template auto algorithmAnd(T target, T source) -> T; template auto algorithmDecrement(T target, T source) -> T; template auto algorithmIncrement(T target, T source) -> T; template auto algorithmOr(T target, T source) -> T; template auto algorithmRotated(T result) -> T; template auto algorithmShifted(T result) -> T; template auto algorithmSubtract(T target, T source, n1 carry = 0) -> T; template auto algorithmXor(T target, T source) -> T; //dma.cpp auto dma(n2 channel) -> bool; //instruction.cpp template auto toRegister3(n3) const -> Register; template auto toRegister8(n8) const -> Register; template auto toControlRegister(n8) const -> ControlRegister; template auto toMemory(n32 address) const -> Memory; template auto toImmediate(n32 constant) const -> Immediate; auto undefined() -> void; auto instruction() -> void; template auto instructionRegister(Register) -> void; template auto instructionSourceMemory(Memory) -> void; auto instructionTargetMemory(n32 address) -> void; //instructions.cpp template auto instructionAdd(Target, Source) -> void; template auto instructionAddCarry(Target, Source) -> void; template auto instructionAnd(Target, Source) -> void; template auto instructionAndCarry(Source, Offset) -> void; template auto instructionBit(Source, Offset) -> void; template auto instructionBitSearch1Backward(Source) -> void; template auto instructionBitSearch1Forward(Source) -> void; template auto instructionCall(Source) -> void; template auto instructionCallRelative(Source) -> void; template auto instructionChange(Target, Offset) -> void; template auto instructionCompare(Target, Source) -> void; template auto instructionCompareRepeat(Target, Source) -> void; template auto instructionCompare(Target, Source) -> void; template auto instructionComplement(Target) -> void; template auto instructionDecimalAdjustAccumulator(Modify) -> void; template auto instructionDecrement(Target, Source) -> void; template auto instructionDecrementJumpNotZero(Target, Offset) -> void; template auto instructionDivide(Target, Source) -> void; template auto instructionDivideSigned(Target, Source) -> void; template auto instructionExchange(Target, Source) -> void; template auto instructionExtendSign(Target) -> void; template auto instructionExtendZero(Target) -> void; auto instructionHalt() -> void; template auto instructionIncrement(Target, Source) -> void; template auto instructionJump(Source) -> void; template auto instructionJumpRelative(Source) -> void; template auto instructionLink(Target, Offset) -> void; template auto instructionLoad(Target, Source) -> void; template auto instructionLoadCarry(Source, Offset) -> void; template auto instructionLoad(Target, Source) -> void; template auto instructionLoadRepeat(Target, Source) -> void; template auto instructionModuloDecrement(Target, Source) -> void; template auto instructionModuloIncrement(Target, Source) -> void; template auto instructionMirror(Modify) -> void; template auto instructionMultiply(Target, Source) -> void; template auto instructionMultiplyAdd(Modify) -> void; template auto instructionMultiplySigned(Target, Source) -> void; template auto instructionNegate(Target) -> void; auto instructionNoOperation() -> void; template auto instructionOr(Target, Source) -> void; template auto instructionOrCarry(Source, Offset) -> void; template auto instructionPointerAdjustAccumulator(Target) -> void; template auto instructionPop(Target) -> void; template auto instructionPush(Source) -> void; template auto instructionReset(Target, Offset) -> void; auto instructionReturn() -> void; template auto instructionReturnDeallocate(Source) -> void; auto instructionReturnInterrupt() -> void; template auto instructionRotateLeftDigit(LHS, RHS) -> void; template auto instructionRotateLeft(Target, Amount) -> void; template auto instructionRotateLeftWithoutCarry(Target, Amount) -> void; template auto instructionRotateRightDigit(LHS, RHS) -> void; template auto instructionRotateRight(Target, Amount) -> void; template auto instructionRotateRightWithoutCarry(Target, Amount) -> void; template auto instructionSet(Target, Offset) -> void; auto instructionSetCarryFlag(n1 value) -> void; auto instructionSetCarryFlagComplement(n1 value) -> void; template auto instructionSetConditionCode(n4 code, Target) -> void; auto instructionSetInterruptFlipFlop(n3 value) -> void; auto instructionSetRegisterFilePointer(n2 value) -> void; template auto instructionShiftLeftArithmetic(Target, Amount) -> void; template auto instructionShiftLeftLogical(Target, Amount) -> void; template auto instructionShiftRightArithmetic(Target, Amount) -> void; template auto instructionShiftRightLogical(Target, Amount) -> void; template auto instructionStoreCarry(Target, Offset) -> void; auto instructionSoftwareInterrupt(n3 interrupt) -> void; template auto instructionSubtract(Target, Source) -> void; template auto instructionSubtractBorrow(Target, Source) -> void; template auto instructionTestSet(Target, Offset) -> void; template auto instructionUnlink(Target) -> void; template auto instructionXor(Target, Source) -> void; template auto instructionXorCarry(Source, Offset) -> void; //serialization.cpp auto serialize(serializer&) -> void; union DataRegister { DataRegister() { l.l0 = 0; } struct { n32 order_lsb1(l0); } l; struct { n16 order_lsb2(w0, w1); } w; struct { n8 order_lsb4(b0, b1, b2, b3); } b; }; struct Registers { DataRegister xwa[4]; DataRegister xbc[4]; DataRegister xde[4]; DataRegister xhl[4]; DataRegister xix; DataRegister xiy; DataRegister xiz; DataRegister xsp; DataRegister pc; DataRegister dmas[4]; DataRegister dmad[4]; DataRegister dmam[4]; DataRegister intnest; //16-bit } r; n1 CF, CA; //carry n1 NF, NA; //negative n1 VF, VA; //overflow or parity n1 HF, HA; //half carry n1 ZF, ZA; //zero n1 SF, SA; //sign n2 RFP; //register file pointer n3 IFF; //interrupt mask flip-flop n8 OP; //first opcode byte n1 HALT; //set if HALT instruction executed n8 PIC; //prefetch instruction counter queue PIQ; //prefetch instruction queue n24 MAR; //A0-A23: memory address register n16 MDR; //D0-D15: memory data register static inline const Register RA0 {0x00}; static inline const Register RW0 {0x01}; static inline const Register QA0 {0x02}; static inline const Register QW0 {0x03}; static inline const Register RC0 {0x04}; static inline const Register RB0 {0x05}; static inline const Register QC0 {0x06}; static inline const Register QB0 {0x07}; static inline const Register RE0 {0x08}; static inline const Register RD0 {0x09}; static inline const Register QE0 {0x0a}; static inline const Register QD0 {0x0b}; static inline const Register RL0 {0x0c}; static inline const Register RH0 {0x0d}; static inline const Register QL0 {0x0e}; static inline const Register QH0 {0x0f}; static inline const Register RA1 {0x10}; static inline const Register RW1 {0x11}; static inline const Register QA1 {0x12}; static inline const Register QW1 {0x13}; static inline const Register RC1 {0x14}; static inline const Register RB1 {0x15}; static inline const Register QC1 {0x16}; static inline const Register QB1 {0x17}; static inline const Register RE1 {0x18}; static inline const Register RD1 {0x19}; static inline const Register QE1 {0x1a}; static inline const Register QD1 {0x1b}; static inline const Register RL1 {0x1c}; static inline const Register RH1 {0x1d}; static inline const Register QL1 {0x1e}; static inline const Register QH1 {0x1f}; static inline const Register RA2 {0x20}; static inline const Register RW2 {0x21}; static inline const Register QA2 {0x22}; static inline const Register QW2 {0x23}; static inline const Register RC2 {0x24}; static inline const Register RB2 {0x25}; static inline const Register QC2 {0x26}; static inline const Register QB2 {0x27}; static inline const Register RE2 {0x28}; static inline const Register RD2 {0x29}; static inline const Register QE2 {0x2a}; static inline const Register QD2 {0x2b}; static inline const Register RL2 {0x2c}; static inline const Register RH2 {0x2d}; static inline const Register QL2 {0x2e}; static inline const Register QH2 {0x2f}; static inline const Register RA3 {0x30}; static inline const Register RW3 {0x31}; static inline const Register QA3 {0x32}; static inline const Register QW3 {0x33}; static inline const Register RC3 {0x34}; static inline const Register RB3 {0x35}; static inline const Register QC3 {0x36}; static inline const Register QB3 {0x37}; static inline const Register RE3 {0x38}; static inline const Register RD3 {0x39}; static inline const Register QE3 {0x3a}; static inline const Register QD3 {0x3b}; static inline const Register RL3 {0x3c}; static inline const Register RH3 {0x3d}; static inline const Register QL3 {0x3e}; static inline const Register QH3 {0x3f}; static inline const Register A_ {0xd0}; static inline const Register W_ {0xd1}; static inline const Register QA_ {0xd2}; static inline const Register QW_ {0xd3}; static inline const Register C_ {0xd4}; static inline const Register B_ {0xd5}; static inline const Register QC_ {0xd6}; static inline const Register QB_ {0xd7}; static inline const Register E_ {0xd8}; static inline const Register D_ {0xd9}; static inline const Register QE_ {0xda}; static inline const Register QD_ {0xdb}; static inline const Register L_ {0xdc}; static inline const Register H_ {0xdd}; static inline const Register QL_ {0xde}; static inline const Register QH_ {0xdf}; static inline const Register A {0xe0}; static inline const Register W {0xe1}; static inline const Register QA {0xe2}; static inline const Register QW {0xe3}; static inline const Register C {0xe4}; static inline const Register B {0xe5}; static inline const Register QC {0xe6}; static inline const Register QB {0xe7}; static inline const Register E {0xe8}; static inline const Register D {0xe9}; static inline const Register QE {0xea}; static inline const Register QD {0xeb}; static inline const Register L {0xec}; static inline const Register H {0xed}; static inline const Register QL {0xee}; static inline const Register QH {0xef}; static inline const Register IXL {0xf0}; static inline const Register IXH {0xf1}; static inline const Register QIXL{0xf2}; static inline const Register QIXH{0xf3}; static inline const Register IYL {0xf4}; static inline const Register IYH {0xf5}; static inline const Register QIYL{0xf6}; static inline const Register QIYH{0xf7}; static inline const Register IZL {0xf8}; static inline const Register IZH {0xf9}; static inline const Register QIZL{0xfa}; static inline const Register QIZH{0xfb}; static inline const Register SPL {0xfc}; static inline const Register SPH {0xfd}; static inline const Register QSPL{0xfe}; static inline const Register QSPH{0xff}; static inline const Register RWA0{0x00}; static inline const Register QWA0{0x02}; static inline const Register RBC0{0x04}; static inline const Register QBC0{0x06}; static inline const Register RDE0{0x08}; static inline const Register QDE0{0x0a}; static inline const Register RHL0{0x0c}; static inline const Register QHL0{0x0e}; static inline const Register RWA1{0x10}; static inline const Register QWA1{0x12}; static inline const Register RBC1{0x14}; static inline const Register QBC1{0x16}; static inline const Register RDE1{0x18}; static inline const Register QDE1{0x1a}; static inline const Register RHL1{0x1c}; static inline const Register QHL1{0x1e}; static inline const Register RWA2{0x20}; static inline const Register QWA2{0x22}; static inline const Register RBC2{0x24}; static inline const Register QBC2{0x26}; static inline const Register RDE2{0x28}; static inline const Register QDE2{0x2a}; static inline const Register RHL2{0x2c}; static inline const Register QHL2{0x2e}; static inline const Register RWA3{0x30}; static inline const Register QWA3{0x32}; static inline const Register RBC3{0x34}; static inline const Register QBC3{0x36}; static inline const Register RDE3{0x38}; static inline const Register QDE3{0x3a}; static inline const Register RHL3{0x3c}; static inline const Register QHL3{0x3e}; static inline const Register WA_ {0xd0}; static inline const Register QWA_{0xd2}; static inline const Register BC_ {0xd4}; static inline const Register QBC_{0xd6}; static inline const Register DE_ {0xd8}; static inline const Register QDE_{0xda}; static inline const Register HL_ {0xdc}; static inline const Register QHL_{0xde}; static inline const Register WA {0xe0}; static inline const Register QWA {0xe2}; static inline const Register BC {0xe4}; static inline const Register QBC {0xe6}; static inline const Register DE {0xe8}; static inline const Register QDE {0xea}; static inline const Register HL {0xec}; static inline const Register QHL {0xee}; static inline const Register IX {0xf0}; static inline const Register QIX {0xf2}; static inline const Register IY {0xf4}; static inline const Register QIY {0xf6}; static inline const Register IZ {0xf8}; static inline const Register QIZ {0xfa}; static inline const Register SP {0xfc}; static inline const Register QSP {0xfe}; static inline const Register XWA0{0x00}; static inline const Register XBC0{0x04}; static inline const Register XDE0{0x08}; static inline const Register XHL0{0x0c}; static inline const Register XWA1{0x10}; static inline const Register XBC1{0x14}; static inline const Register XDE1{0x18}; static inline const Register XHL1{0x1c}; static inline const Register XWA2{0x20}; static inline const Register XBC2{0x24}; static inline const Register XDE2{0x28}; static inline const Register XHL2{0x2c}; static inline const Register XWA3{0x30}; static inline const Register XBC3{0x34}; static inline const Register XDE3{0x38}; static inline const Register XHL3{0x3c}; static inline const Register XWA_{0xd0}; static inline const Register XBC_{0xd4}; static inline const Register XDE_{0xd8}; static inline const Register XHL_{0xdc}; static inline const Register XWA {0xe0}; static inline const Register XBC {0xe4}; static inline const Register XDE {0xe8}; static inline const Register XHL {0xec}; static inline const Register XIX {0xf0}; static inline const Register XIY {0xf4}; static inline const Register XIZ {0xf8}; static inline const Register XSP {0xfc}; static inline const FlagRegister F {0}; static inline const FlagRegister FP{1}; static inline const StatusRegister SR{}; static inline const ProgramCounter PC{}; static inline const ControlRegister DMAS0L {0x00}; static inline const ControlRegister DMAS0H{0x02}; static inline const ControlRegister DMAS1L {0x04}; static inline const ControlRegister DMAS1H{0x06}; static inline const ControlRegister DMAS2L {0x08}; static inline const ControlRegister DMAS2H{0x0a}; static inline const ControlRegister DMAS3L {0x0c}; static inline const ControlRegister DMAS3H{0x0e}; static inline const ControlRegister DMAD0L {0x10}; static inline const ControlRegister DMAD0H{0x12}; static inline const ControlRegister DMAD1L {0x14}; static inline const ControlRegister DMAD1H{0x16}; static inline const ControlRegister DMAD2L {0x18}; static inline const ControlRegister DMAD2H{0x1a}; static inline const ControlRegister DMAD3L {0x1c}; static inline const ControlRegister DMAD3H{0x1e}; static inline const ControlRegister DMAC0 {0x20}; static inline const ControlRegister DMAC0H{0x22}; static inline const ControlRegister DMAC1 {0x24}; static inline const ControlRegister DMAC1H{0x26}; static inline const ControlRegister DMAC2 {0x28}; static inline const ControlRegister DMAC2H{0x2a}; static inline const ControlRegister DMAC3 {0x2c}; static inline const ControlRegister DMAC3H{0x2e}; static inline const ControlRegister INTNEST{0x3c}; static inline const ControlRegister DMAS0{0x00}; static inline const ControlRegister DMAS1{0x04}; static inline const ControlRegister DMAS2{0x08}; static inline const ControlRegister DMAS3{0x0c}; static inline const ControlRegister DMAD0{0x10}; static inline const ControlRegister DMAD1{0x14}; static inline const ControlRegister DMAD2{0x18}; static inline const ControlRegister DMAD3{0x1c}; static inline const ControlRegister DMAM0{0x20}; static inline const ControlRegister DMAM1{0x24}; static inline const ControlRegister DMAM2{0x28}; static inline const ControlRegister DMAM3{0x2c}; static inline const n4 False{0x00}; static inline const n4 True {0x08}; static inline const n1 Undefined = 0; //disassembler.cpp virtual auto disassembleRead(n24 address) -> n8 { return read(Byte, address); } auto disassembleInstruction() -> string; auto disassembleContext() -> string; }; } ares-126/ares/component/processor/upd96050/000077500000000000000000000000001415063341600204705ustar00rootroot00000000000000ares-126/ares/component/processor/upd96050/disassembler.cpp000066400000000000000000000150751415063341600236610ustar00rootroot00000000000000auto uPD96050::disassembleInstruction(maybe _ip) -> string { n14 ip = _ip ? *_ip : (n14)regs.pc; string output; n24 opcode = programROM[ip]; n2 type = opcode >> 22; if(type == 0 || type == 1) { //OP,RT n2 pselect = opcode >> 20; n4 alu = opcode >> 16; n1 asl = opcode >> 15; n2 dpl = opcode >> 13; n4 dphm = opcode >> 9; n1 rpdcr = opcode >> 8; n4 src = opcode >> 4; n4 dst = opcode >> 0; switch(alu) { case 0: output.append("nop "); break; case 1: output.append("or "); break; case 2: output.append("and "); break; case 3: output.append("xor "); break; case 4: output.append("sub "); break; case 5: output.append("add "); break; case 6: output.append("sbb "); break; case 7: output.append("adc "); break; case 8: output.append("dec "); break; case 9: output.append("inc "); break; case 10: output.append("cmp "); break; case 11: output.append("shr1 "); break; case 12: output.append("shl1 "); break; case 13: output.append("shl2 "); break; case 14: output.append("shl4 "); break; case 15: output.append("xchg "); break; } if(alu < 8) { switch(pselect) { case 0: output.append("ram,"); break; case 1: output.append("idb,"); break; case 2: output.append("m," ); break; case 3: output.append("n," ); break; } } switch(asl) { case 0: output.append("a"); break; case 1: output.append("b"); break; } output.append("; mov "); switch(src) { case 0: output.append("trb," ); break; case 1: output.append("a," ); break; case 2: output.append("b," ); break; case 3: output.append("tr," ); break; case 4: output.append("dp," ); break; case 5: output.append("rp," ); break; case 6: output.append("ro," ); break; case 7: output.append("sgn," ); break; case 8: output.append("dr," ); break; case 9: output.append("drnf,"); break; case 10: output.append("sr," ); break; case 11: output.append("sim," ); break; case 12: output.append("sil," ); break; case 13: output.append("k," ); break; case 14: output.append("l," ); break; case 15: output.append("mem," ); break; } switch(dst) { case 0: output.append("non"); break; case 1: output.append("a" ); break; case 2: output.append("b" ); break; case 3: output.append("tr" ); break; case 4: output.append("dp" ); break; case 5: output.append("rp" ); break; case 6: output.append("dr" ); break; case 7: output.append("sr" ); break; case 8: output.append("sol"); break; case 9: output.append("som"); break; case 10: output.append("k" ); break; case 11: output.append("klr"); break; case 12: output.append("klm"); break; case 13: output.append("l" ); break; case 14: output.append("trb"); break; case 15: output.append("mem"); break; } if(dpl) { switch(dpl) { case 0: output.append("; dpnop"); break; case 1: output.append("; dpinc"); break; case 2: output.append("; dpdec"); break; case 3: output.append("; dpclr"); break; } } if(dphm) { output.append("; m", hex(dphm, 1L)); } if(rpdcr == 1) { output.append("; rpdec"); } if(type == 1) { output.append("; ret"); } } if(type == 2) { //JP n9 brch = opcode >> 13; n11 na = opcode >> 2; n8 bank = opcode >> 0; n14 jp = (regs.pc & 0x2000) | (bank << 11) | (na << 0); switch(brch) { case 0x000: output.append("jmpso "); jp = 0; break; case 0x080: output.append("jnca "); break; case 0x082: output.append("jca "); break; case 0x084: output.append("jncb "); break; case 0x086: output.append("jcb "); break; case 0x088: output.append("jnza "); break; case 0x08a: output.append("jza "); break; case 0x08c: output.append("jnzb "); break; case 0x08e: output.append("jzb "); break; case 0x090: output.append("jnova0 "); break; case 0x092: output.append("jova0 "); break; case 0x094: output.append("jnovb0 "); break; case 0x096: output.append("jovb0 "); break; case 0x098: output.append("jnova1 "); break; case 0x09a: output.append("jova1 "); break; case 0x09c: output.append("jnovb1 "); break; case 0x09e: output.append("jovb1 "); break; case 0x0a0: output.append("jnsa0 "); break; case 0x0a2: output.append("jsa0 "); break; case 0x0a4: output.append("jnsb0 "); break; case 0x0a6: output.append("jsb0 "); break; case 0x0a8: output.append("jnsa1 "); break; case 0x0aa: output.append("jsa1 "); break; case 0x0ac: output.append("jnsb1 "); break; case 0x0ae: output.append("jsb1 "); break; case 0x0b0: output.append("jdpl0 "); break; case 0x0b1: output.append("jdpln0 "); break; case 0x0b2: output.append("jdplf "); break; case 0x0b3: output.append("jdplnf "); break; case 0x0b4: output.append("jnsiak "); break; case 0x0b6: output.append("jsiak "); break; case 0x0b8: output.append("jnsoak "); break; case 0x0ba: output.append("jsoak "); break; case 0x0bc: output.append("jnrqm "); break; case 0x0be: output.append("jrqm "); break; case 0x100: output.append("ljmp "); jp &= ~0x2000; break; case 0x101: output.append("hjmp "); jp |= 0x2000; break; case 0x140: output.append("lcall "); jp &= ~0x2000; break; case 0x141: output.append("hcall "); jp |= 0x2000; break; default: output.append("?????? "); break; } output.append("$", hex(jp, 4L)); } if(type == 3) { //LD output.append("ld "); n16 id = opcode >> 6; n4 dst = opcode >> 0; output.append("$", hex(id, 4L), ","); switch(dst) { case 0: output.append("non"); break; case 1: output.append("a" ); break; case 2: output.append("b" ); break; case 3: output.append("tr" ); break; case 4: output.append("dp" ); break; case 5: output.append("rp" ); break; case 6: output.append("dr" ); break; case 7: output.append("sr" ); break; case 8: output.append("sol"); break; case 9: output.append("som"); break; case 10: output.append("k" ); break; case 11: output.append("klr"); break; case 12: output.append("klm"); break; case 13: output.append("l" ); break; case 14: output.append("trb"); break; case 15: output.append("mem"); break; } } return output; } auto uPD96050::disassembleContext() -> string { return "..."; //todo } ares-126/ares/component/processor/upd96050/instructions.cpp000066400000000000000000000173761415063341600237560ustar00rootroot00000000000000auto uPD96050::exec() -> void { n24 opcode = programROM[regs.pc++]; switch(opcode >> 22) { case 0: execOP(opcode); break; case 1: execRT(opcode); break; case 2: execJP(opcode); break; case 3: execLD(opcode); break; } i32 result = (i32)regs.k * regs.l; //sign + 30-bit result regs.m = result >> 15; //store sign + top 15-bits regs.n = result << 1; //store low 15-bits + zero } auto uPD96050::execOP(n24 opcode) -> void { n2 pselect = opcode >> 20; //P select n4 alu = opcode >> 16; //ALU operation mode n1 asl = opcode >> 15; //accumulator select n2 dpl = opcode >> 13; //DP low modify n4 dphm = opcode >> 9; //DP high XOR modify n1 rpdcr = opcode >> 8; //RP decrement n4 src = opcode >> 4; //move source n4 dst = opcode >> 0; //move destination n16 idb; switch(src) { case 0: idb = regs.trb; break; case 1: idb = regs.a; break; case 2: idb = regs.b; break; case 3: idb = regs.tr; break; case 4: idb = regs.dp; break; case 5: idb = regs.rp; break; case 6: idb = dataROM[regs.rp]; break; case 7: idb = 0x8000 - flags.a.s1; break; //ASL ignored; always SA1 case 8: idb = regs.dr; regs.sr.rqm = 1; break; case 9: idb = regs.dr; break; case 10: idb = regs.sr; break; case 11: idb = regs.si; break; //MSB case 12: idb = regs.si; break; //LSB case 13: idb = regs.k; break; case 14: idb = regs.l; break; case 15: idb = dataRAM[regs.dp]; break; } if(alu) { n16 p, q, r; Flag flag; boolean c; switch(pselect) { case 0: p = dataRAM[regs.dp]; break; case 1: p = idb; break; case 2: p = regs.m; break; case 3: p = regs.n; break; } switch(asl) { case 0: q = regs.a; flag = flags.a; c = flags.b.c; break; case 1: q = regs.b; flag = flags.b; c = flags.a.c; break; } switch(alu) { case 1: r = q | p; break; //OR case 2: r = q & p; break; //AND case 3: r = q ^ p; break; //XOR case 4: r = q - p; break; //SUB case 5: r = q + p; break; //ADD case 6: r = q - p - c; break; //SBB case 7: r = q + p + c; break; //ADC case 8: r = q - 1; p = 1; break; //DEC case 9: r = q + 1; p = 1; break; //INC case 10: r = ~q; break; //CMP case 11: r = q >> 1 | q & 0x8000; break; //SHR1 (ASR) case 12: r = q << 1 | c; break; //SHL1 (ROL) case 13: r = q << 2 | 3; break; //SHL2 case 14: r = q << 4 | 15; break; //SHL4 case 15: r = q << 8 | q >> 8; break; //XCHG } flag.z = r == 0; flag.s0 = r & 0x8000; if(!flag.ov1) flag.s1 = flag.s0; switch(alu) { case 1: //OR case 2: //AND case 3: //XOR case 10: //CMP case 13: //SHL2 case 14: //SHL4 case 15: { //XCHG flag.ov0 = 0; flag.ov1 = 0; flag.c = 0; break; } case 4: //SUB case 5: //ADD case 6: //SBB case 7: //ADC case 8: //DEC case 9: { //INC n16 carries = q ^ p ^ r; n16 overflow = (q ^ r) & (p ^ (alu & 1 ? r : q)); flag.ov0 = overflow & 0x8000; flag.ov1 = flag.ov0 & flag.ov1 ? flag.s0 == flag.s1 : flag.ov0 | flag.ov1; flag.c = (carries ^ overflow) & 0x8000; break; } case 11: { //SHR1 (ASR) flag.ov0 = 0; flag.ov1 = 0; flag.c = q & 1; break; } case 12: { //SHL1 (ROL) flag.ov0 = 0; flag.ov1 = 0; flag.c = q >> 15; break; } } switch(asl) { case 0: regs.a = r; flags.a = flag; break; case 1: regs.b = r; flags.b = flag; break; } } execLD(idb << 6 | dst); if(dst != 4) { //if LD does not write to DP switch(dpl) { case 1: regs.dp = (regs.dp & 0xf0) + (regs.dp + 1 & 0x0f); break; //DPINC case 2: regs.dp = (regs.dp & 0xf0) + (regs.dp - 1 & 0x0f); break; //DPDEC case 3: regs.dp = (regs.dp & 0xf0); break; //DPCLR } regs.dp ^= dphm << 4; } if(dst != 5) { //if LD does not write to RP if(rpdcr) regs.rp--; } } auto uPD96050::execRT(n24 opcode) -> void { execOP(opcode); regs.pc = regs.stack[--regs.sp]; } auto uPD96050::execJP(n24 opcode) -> void { n9 brch = opcode >> 13; //branch n11 na = opcode >> 2; //next address n2 bank = opcode >> 0; //bank address n14 jp = regs.pc & 0x2000 | bank << 11 | na << 0; switch(brch) { case 0x000: regs.pc = regs.so; return; //JMPSO case 0x080: if(flags.a.c == 0) regs.pc = jp; return; //JNCA case 0x082: if(flags.a.c == 1) regs.pc = jp; return; //JCA case 0x084: if(flags.b.c == 0) regs.pc = jp; return; //JNCB case 0x086: if(flags.b.c == 1) regs.pc = jp; return; //JCB case 0x088: if(flags.a.z == 0) regs.pc = jp; return; //JNZA case 0x08a: if(flags.a.z == 1) regs.pc = jp; return; //JZA case 0x08c: if(flags.b.z == 0) regs.pc = jp; return; //JNZB case 0x08e: if(flags.b.z == 1) regs.pc = jp; return; //JZB case 0x090: if(flags.a.ov0 == 0) regs.pc = jp; return; //JNOVA0 case 0x092: if(flags.a.ov0 == 1) regs.pc = jp; return; //JOVA0 case 0x094: if(flags.b.ov0 == 0) regs.pc = jp; return; //JNOVB0 case 0x096: if(flags.b.ov0 == 1) regs.pc = jp; return; //JOVB0 case 0x098: if(flags.a.ov1 == 0) regs.pc = jp; return; //JNOVA1 case 0x09a: if(flags.a.ov1 == 1) regs.pc = jp; return; //JOVA1 case 0x09c: if(flags.b.ov1 == 0) regs.pc = jp; return; //JNOVB1 case 0x09e: if(flags.b.ov1 == 1) regs.pc = jp; return; //JOVB1 case 0x0a0: if(flags.a.s0 == 0) regs.pc = jp; return; //JNSA0 case 0x0a2: if(flags.a.s0 == 1) regs.pc = jp; return; //JSA0 case 0x0a4: if(flags.b.s0 == 0) regs.pc = jp; return; //JNSB0 case 0x0a6: if(flags.b.s0 == 1) regs.pc = jp; return; //JSB0 case 0x0a8: if(flags.a.s1 == 0) regs.pc = jp; return; //JNSA1 case 0x0aa: if(flags.a.s1 == 1) regs.pc = jp; return; //JSA1 case 0x0ac: if(flags.b.s1 == 0) regs.pc = jp; return; //JNSB1 case 0x0ae: if(flags.b.s1 == 1) regs.pc = jp; return; //JSB1 case 0x0b0: if((regs.dp & 0x0f) == 0x00) regs.pc = jp; return; //JDPL0 case 0x0b1: if((regs.dp & 0x0f) != 0x00) regs.pc = jp; return; //JDPLN0 case 0x0b2: if((regs.dp & 0x0f) == 0x0f) regs.pc = jp; return; //JDPLF case 0x0b3: if((regs.dp & 0x0f) != 0x0f) regs.pc = jp; return; //JDPLNF //serial input/output acknowledge not emulated case 0x0b4: if(regs.sr.siack == 0) regs.pc = jp; return; //JNSIAK case 0x0b6: if(regs.sr.siack == 1) regs.pc = jp; return; //JSIAK case 0x0b8: if(regs.sr.soack == 0) regs.pc = jp; return; //JNSOAK case 0x0ba: if(regs.sr.soack == 1) regs.pc = jp; return; //JSOAK case 0x0bc: if(regs.sr.rqm == 0) regs.pc = jp; return; //JNRQM case 0x0be: if(regs.sr.rqm == 1) regs.pc = jp; return; //JRQM case 0x100: regs.pc = jp & ~0x2000; return; //LJMP case 0x101: regs.pc = jp | 0x2000; return; //HJMP case 0x140: regs.stack[regs.sp++] = regs.pc; regs.pc = jp & ~0x2000; return; //LCALL case 0x141: regs.stack[regs.sp++] = regs.pc; regs.pc = jp | 0x2000; return; //HCALL } } auto uPD96050::execLD(n24 opcode) -> void { n16 id = opcode >> 6; //immediate data n4 dst = opcode >> 0; //destination switch(dst) { case 0: break; case 1: regs.a = id; break; case 2: regs.b = id; break; case 3: regs.tr = id; break; case 4: regs.dp = id; break; case 5: regs.rp = id; break; case 6: regs.dr = id; regs.sr.rqm = 1; break; case 7: regs.sr = regs.sr & 0x907c | id & ~0x907c; break; case 8: regs.so = id; break; //LSB case 9: regs.so = id; break; //MSB case 10: regs.k = id; break; case 11: regs.k = id; regs.l = dataROM[regs.rp]; break; case 12: regs.l = id; regs.k = dataRAM[regs.dp | 0x40]; break; case 13: regs.l = id; break; case 14: regs.trb = id; break; case 15: dataRAM[regs.dp] = id; break; } } ares-126/ares/component/processor/upd96050/memory.cpp000066400000000000000000000024331415063341600225060ustar00rootroot00000000000000auto uPD96050::readSR() -> n8 { return regs.sr >> 8; } auto uPD96050::writeSR(n8 data) -> void { } auto uPD96050::readDR() -> n8 { if(regs.sr.drc == 0) { //16-bit if(regs.sr.drs == 0) { regs.sr.drs = 1; return regs.dr >> 0; } else { regs.sr.rqm = 0; regs.sr.drs = 0; return regs.dr >> 8; } } else { //8-bit regs.sr.rqm = 0; return regs.dr >> 0; } } auto uPD96050::writeDR(n8 data) -> void { if(regs.sr.drc == 0) { //16-bit if(regs.sr.drs == 0) { regs.sr.drs = 1; regs.dr = (regs.dr & 0xff00) | (data << 0); } else { regs.sr.rqm = 0; regs.sr.drs = 0; regs.dr = (data << 8) | (regs.dr & 0x00ff); } } else { //8-bit regs.sr.rqm = 0; regs.dr = (regs.dr & 0xff00) | (data << 0); } } auto uPD96050::readDP(n12 address) -> n8 { bool hi = address & 1; address = (address >> 1) & 2047; if(hi == false) { return dataRAM[address] >> 0; } else { return dataRAM[address] >> 8; } } auto uPD96050::writeDP(n12 address, n8 data) -> void { bool hi = address & 1; address = (address >> 1) & 2047; if(hi == false) { dataRAM[address] = (dataRAM[address] & 0xff00) | (data << 0); } else { dataRAM[address] = (dataRAM[address] & 0x00ff) | (data << 8); } } ares-126/ares/component/processor/upd96050/serialization.cpp000066400000000000000000000011631415063341600240520ustar00rootroot00000000000000auto uPD96050::serialize(serializer& s) -> void { s(dataRAM); s(regs); s(flags.a); s(flags.b); } auto uPD96050::Flag::serialize(serializer& s) -> void { s(ov0); s(ov1); s(z); s(c); s(s0); s(s1); } auto uPD96050::Status::serialize(serializer& s) -> void { s(p0); s(p1); s(ei); s(sic); s(soc); s(drc); s(dma); s(drs); s(usf0); s(usf1); s(rqm); s(siack); s(soack); } auto uPD96050::Registers::serialize(serializer& s) -> void { s(stack); s(pc); s(rp); s(dp); s(sp); s(si); s(so); s(k); s(l); s(m); s(n); s(a); s(b); s(tr); s(trb); s(dr); s(sr); } ares-126/ares/component/processor/upd96050/upd96050.cpp000066400000000000000000000015711415063341600223740ustar00rootroot00000000000000#include #include "upd96050.hpp" namespace ares { #include "instructions.cpp" #include "memory.cpp" #include "disassembler.cpp" #include "serialization.cpp" auto uPD96050::power() -> void { if(revision == Revision::uPD7725) { regs.pc.resize(11); regs.rp.resize(10); regs.dp.resize( 8); } if(revision == Revision::uPD96050) { regs.pc.resize(14); regs.rp.resize(11); regs.dp.resize(11); } for(u32 n : range(16)) regs.stack[n] = 0x0000; regs.pc = 0x0000; regs.rp = 0x0000; regs.dp = 0x0000; regs.sp = 0x0; regs.si = 0x0000; regs.so = 0x0000; regs.k = 0x0000; regs.l = 0x0000; regs.m = 0x0000; regs.n = 0x0000; regs.a = 0x0000; regs.b = 0x0000; regs.tr = 0x0000; regs.trb = 0x0000; regs.dr = 0x0000; regs.sr = 0x0000; regs.sr.siack = 0; regs.sr.soack = 0; flags.a = 0x0000; flags.b = 0x0000; } } ares-126/ares/component/processor/upd96050/upd96050.hpp000066400000000000000000000064711415063341600224050ustar00rootroot00000000000000//NEC uPD7725 //NEC uPD96050 #pragma once namespace ares { struct uPD96050 { auto power() -> void; auto exec() -> void; auto serialize(serializer&) -> void; auto execOP(n24 opcode) -> void; auto execRT(n24 opcode) -> void; auto execJP(n24 opcode) -> void; auto execLD(n24 opcode) -> void; auto readSR() -> n8; auto writeSR(n8 data) -> void; auto readDR() -> n8; auto writeDR(n8 data) -> void; auto readDP(n12 address) -> n8; auto writeDP(n12 address, n8 data) -> void; //disassembler.cpp noinline auto disassembleInstruction(maybe ip = {}) -> string; noinline auto disassembleContext() -> string; enum class Revision : u32 { uPD7725, uPD96050 } revision; n24 programROM[16384]; n16 dataROM[2048]; n16 dataRAM[2048]; struct Flag { operator u32() const { return ov0 << 0 | ov1 << 1 | z << 2 | c << 3 | s0 << 4 | s1 << 5; } auto operator=(n16 data) -> Flag& { ov0 = data.bit(0); ov1 = data.bit(1); z = data.bit(2); c = data.bit(3); s0 = data.bit(4); s1 = data.bit(5); return *this; } auto serialize(serializer&) -> void; boolean ov0; //overflow 0 boolean ov1; //overflow 1 boolean z; //zero boolean c; //carry boolean s0; //sign 0 boolean s1; //sign 1 }; struct Status { operator u32() const { bool _drs = drs & !drc; //when DRC=1, DRS=0 return p0 << 0 | p1 << 1 | ei << 7 | sic << 8 | soc << 9 | drc << 10 | dma << 11 | _drs << 12 | usf0 << 13 | usf1 << 14 | rqm << 15; } auto operator=(n16 data) -> Status& { p0 = data.bit( 0); p1 = data.bit( 1); ei = data.bit( 7); sic = data.bit( 8); soc = data.bit( 9); drc = data.bit(10); dma = data.bit(11); drs = data.bit(12); usf0 = data.bit(13); usf1 = data.bit(14); rqm = data.bit(15); return *this; } auto serialize(serializer&) -> void; boolean p0; //output port 0 boolean p1; //output port 1 boolean ei; //enable interrupts boolean sic; //serial input control (0 = 16-bit; 1 = 8-bit) boolean soc; //serial output control (0 = 16-bit; 1 = 8-bit) boolean drc; //data register size (0 = 16-bit; 1 = 8-bit) boolean dma; //data register DMA mode boolean drs; //data register status (1 = active; 0 = stopped) boolean usf0; //user flag 0 boolean usf1; //user flag 1 boolean rqm; //request for master (=1 on internal access; =0 on external access) //internal boolean siack; //serial input acknowledge boolean soack; //serial output acknowledge }; struct Registers { auto serialize(serializer&) -> void; n16 stack[16]; //LIFO VariadicNatural pc; //program counter VariadicNatural rp; //ROM pointer VariadicNatural dp; //data pointer n4 sp; //stack pointer n16 si; //serial input n16 so; //serial output i16 k; i16 l; i16 m; i16 n; i16 a; //accumulator i16 b; //accumulator n16 tr; //temporary register n16 trb; //temporary register n16 dr; //data register Status sr; //status register } regs; struct Flags { Flag a; Flag b; } flags; }; } ares-126/ares/component/processor/v30mz/000077500000000000000000000000001415063341600202535ustar00rootroot00000000000000ares-126/ares/component/processor/v30mz/algorithms.cpp000066400000000000000000000126561415063341600231420ustar00rootroot00000000000000//(0 = odd, 1 = even) number of bits set in value auto V30MZ::parity(u8 value) const -> bool { value ^= value >> 4; value ^= value >> 2; value ^= value >> 1; return !(value & 1); } #define bits (size == Byte ? 8 : 16) #define mask (size == Byte ? 0xff : 0xffff) #define sign (size == Byte ? 0x80 : 0x8000) template auto V30MZ::ADC(u16 x, u16 y) -> u16 { return ADD(x, y + PSW.CY); } template auto V30MZ::ADD(u16 x, u16 y) -> u16 { u16 result = (x + y) & mask; PSW.CY = x + y > mask; PSW.P = parity(result); PSW.AC = (u4)x + (u4)y >= 16; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = (result ^ x) & (result ^ y) & sign; return result; } template auto V30MZ::AND(u16 x, u16 y) -> u16 { u16 result = (x & y) & mask; PSW.CY = 0; PSW.P = parity(result); PSW.AC = 0; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = 0; return result; } template auto V30MZ::DEC(u16 x) -> u16 { u16 result = (x - 1) & mask; PSW.P = parity(result); PSW.AC = (x & 0x0f) == 0; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = result == sign - 1; return result; } template auto V30MZ::DIVI(s32 x, s32 y) -> u32 { if(y == 0) return interrupt(0), x; x = size == Byte ? (s16)x : (s32)x; y = size == Byte ? ( s8)y : (s16)y; s32 quotient = x / y; s32 remainder = x % y; if(quotient > mask >> 1 || quotient < -sign) return interrupt(0), x; return (remainder & mask) << bits | (quotient & mask); } template auto V30MZ::DIVU(u32 x, u32 y) -> u32 { if(y == 0) return interrupt(0), x; u32 quotient = x / y; u32 remainder = x % y; if(quotient > mask) return interrupt(0), x; return (remainder & mask) << bits | (quotient & mask); } template auto V30MZ::INC(u16 x) -> u16 { u16 result = (x + 1) & mask; PSW.P = parity(result); PSW.AC = (x & 0x0f) == 0x0f; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = result == sign; return result; } template auto V30MZ::MULI(s16 x, s16 y) -> u32 { x = size == Byte ? (s8)x : (s16)x; y = size == Byte ? (s8)y : (s16)y; u32 result = x * y; PSW.CY = result >> bits; PSW.V = result >> bits; return result; } template auto V30MZ::MULU(u16 x, u16 y) -> u32 { u32 result = x * y; PSW.CY = result >> bits; PSW.V = result >> bits; return result; } template auto V30MZ::NEG(u16 x) -> u16 { u16 result = (-x) & mask; PSW.CY = x; PSW.P = parity(result); PSW.AC = x & 0x0f; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = x == sign; return result; } template auto V30MZ::NOT(u16 x) -> u16 { u16 result = (~x) & mask; return result; } template auto V30MZ::OR(u16 x, u16 y) -> u16 { u16 result = (x | y) & mask; PSW.CY = 0; PSW.P = parity(result); PSW.AC = 0; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = 0; return result; } template auto V30MZ::RCL(u16 x, u5 y) -> u16 { u16 result = x; for(u32 n = 0; n < y; n++) { bool carry = result & sign; result = (result << 1) | PSW.CY; PSW.CY = carry; } PSW.V = (x ^ result) & sign; return result & mask; } template auto V30MZ::RCR(u16 x, u5 y) -> u16 { u16 result = x; for(u32 n = 0; n < y; n++) { bool carry = result & 1; result = (PSW.CY ? sign : 0) | (result >> 1); PSW.CY = carry; } PSW.V = (x ^ result) & sign; return result & mask; } template auto V30MZ::ROL(u16 x, u4 y) -> u16 { PSW.CY = (x << y) & (1 << bits); u16 result = ((x << y) | (x >> (bits - y))) & mask; PSW.V = (x ^ result) & sign; return result; } template auto V30MZ::ROR(u16 x, u4 y) -> u16 { PSW.CY = (x >> (y - 1)) & 1; u16 result = ((x >> y) | (x << (bits - y))) & mask; PSW.V = (x ^ result) & sign; return result; } template auto V30MZ::SAL(u16 x, u5 y) -> u16 { PSW.CY = (x << y) & (1 << bits); u16 result = (x << y) & mask; PSW.P = parity(result); PSW.Z = result == 0; PSW.S = result & sign; PSW.V = 0; return result; } template auto V30MZ::SAR(u16 x, u5 y) -> u16 { if(y & 16) { PSW.CY = x & sign; return 0 - PSW.CY; } PSW.CY = (x >> (y - 1)) & 1; u16 result = (x >> y) & mask; if(x & sign) result |= mask << (bits - y); PSW.P = parity(result); PSW.Z = result == 0; PSW.S = result & sign; PSW.V = 0; return result; } template auto V30MZ::SBB(u16 x, u16 y) -> u16 { return SUB(x, y + PSW.CY); } template auto V30MZ::SHL(u16 x, u5 y) -> u16 { PSW.CY = (x << y) & (1 << bits); u16 result = (x << y) & mask; PSW.P = parity(result); PSW.Z = result == 0; PSW.S = result & sign; PSW.V = (x ^ result) & sign; return result; } template auto V30MZ::SHR(u16 x, u5 y) -> u16 { PSW.CY = (x >> (y - 1)) & 1; u16 result = (x >> y) & mask; PSW.P = parity(result); PSW.Z = result == 0; PSW.S = result & sign; PSW.V = (x ^ result) & sign; return result; } template auto V30MZ::SUB(u16 x, u16 y) -> u16 { u16 result = (x - y) & mask; PSW.CY = y > x; PSW.P = parity(result); PSW.AC = (u4)y > (u4)x; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = (x ^ y) & (x ^ result) & sign; return result; } template auto V30MZ::XOR(u16 x, u16 y) -> u16 { u16 result = (x ^ y) & mask; PSW.CY = 0; PSW.P = parity(result); PSW.AC = 0; PSW.Z = result == 0; PSW.S = result & sign; PSW.V = 0; return result; } #undef mask #undef sign ares-126/ares/component/processor/v30mz/disassembler.cpp000066400000000000000000000376241415063341600234500ustar00rootroot00000000000000auto V30MZ::disassembleInstruction(u16 ps, u16 pc) -> string { //hack: prefixes execute as separate instructions; combine them instead static u32 suppress = 0xffffffff; if((ps << 16 | pc) == suppress) return {}; string output, repeat, prefix; auto read = [&](u32 offset) -> n8 { return V30MZ::read(ps, pc + offset); }; auto modRM = [&](u32 offset = 1) -> u32 { auto modRM = read(offset++); if((modRM & 0xc7) == 0x06) return offset + 2; if((modRM & 0xc0) == 0x40) return offset + 1; if((modRM & 0xc0) == 0x80) return offset + 2; return offset; }; auto instruction = [&](string_view name) -> string { if(name.size() >= 7) return name; return pad(name, -7); }; auto segment = [&](string_view name) -> string { if(prefix) return {prefix, ":"}; return {name, ":"}; }; auto repeatable = [&](string_view opcode) -> string { if(repeat) return {pad(string{repeat, ":"}, -7), opcode}; return {opcode}; }; auto segmentRegister = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string seg[] = {"ds1", "ps", "ss", "ds0"}; return {seg[modRM >> 3 & 2]}; }; auto readByte = [&](u32 offset) -> string { return hex(read(offset), 2L); }; auto immediateByte = [&](u32 offset = 1) -> string { return {"0x", readByte(offset)}; }; auto immediateWord = [&](u32 offset = 1) -> string { return {"0x", readByte(offset + 1), readByte(offset + 0)}; }; auto immediateLong = [&](u32 offset = 1) -> string { return {"0x", readByte(offset + 3), readByte(offset + 2), ":", "0x", readByte(offset + 1), readByte(offset + 0)}; }; auto indirectByte = [&](u32 offset = 1) -> string { return {"[", immediateByte(), "]"}; }; auto indirectWord = [&](u32 offset = 1) -> string { return {"[", immediateWord(), "]"}; }; auto relativeByte = [&](u32 offset = 1) -> string { i8 displacement = read(offset); return {"ps:0x", hex(pc + offset + 1 + displacement, 4L)}; }; auto relativeWord = [&](u32 offset = 1) -> string { i16 displacement = read(offset + 1) << 8 | read(offset + 0) << 0; return {"ps:0x", hex(pc + offset + 2 + displacement, 4L)}; }; auto adjustByte = [&](u32 offset = 2) -> string { i8 displacement = read(offset); if(displacement >= 0) return {"+0x", hex(displacement, 2L)}; return {"-0x", hex(abs(displacement), 2L)}; }; auto adjustWord = [&](u32 offset = 2) -> string { i16 displacement = read(offset + 1) << 8 | read(offset + 0) << 0; if(displacement >= 0) return {"+0x", hex(displacement, 4L)}; return {"-0x", hex(abs(displacement), 2L)}; }; auto registerByte = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string reg[] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}; return reg[modRM >> 3 & 7]; }; auto registerWord = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string reg[] = {"aw", "cw", "dw", "bw", "sp", "bp", "ix", "iy"}; return reg[modRM >> 3 & 7]; }; auto memoryByte = [&](u32 offset = 1) -> string { auto modRM = read(offset); if(modRM >= 0xc0) { static const string reg[] = {"al", "cl", "dl", "bl", "ah", "ch", "dh", "bh"}; return reg[modRM & 7]; } if((modRM & 0xc7) == 0x06) return {"byte[", segment("ds"), immediateWord(offset + 1), "]"}; static const string seg[] = {"ds", "ds", "ss", "ss", "ds", "ds", "ss", "ds"}; static const string mem[] = {"bw+ix", "bw+iy", "bp+ix", "bp+iy", "ix", "iy", "bp", "bw"}; if((modRM & 0xc0) == 0x40) return {"byte[", segment(seg[modRM & 7]), mem[modRM & 7], "+", adjustByte(), "]"}; if((modRM & 0xc0) == 0x80) return {"byte[", segment(seg[modRM & 7]), mem[modRM & 7], "+", adjustWord(), "]"}; return {"byte[", segment(seg[modRM & 7]), mem[modRM & 7], "]"}; }; auto memoryWord = [&](u32 offset = 1) -> string { auto modRM = read(offset); if(modRM >= 0xc0) { static const string reg[] = {"aw", "cw", "dw", "bw", "sp", "bp", "ix", "iy"}; return reg[modRM & 7]; } if((modRM & 0xc7) == 0x06) return {"word[", segment("ds"), immediateWord(offset + 1), "]"}; static const string seg[] = {"ds", "ds", "ss", "ss", "ds", "ds", "ss", "ds"}; static const string mem[] = {"bw+ix", "bw+iy", "bp+ix", "bp+iy", "ix", "iy", "bp", "bw"}; if((modRM & 0xc0) == 0x40) return {"word[", segment(seg[modRM & 7]), mem[modRM & 7], adjustByte(), "]"}; if((modRM & 0xc0) == 0x80) return {"word[", segment(seg[modRM & 7]), mem[modRM & 7], adjustWord(), "]"}; return {"word[", segment(seg[modRM & 7]), mem[modRM & 7], "]"}; }; auto group1 = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string opcode[] = {"add", "or", "adc", "sbb", "and", "sub", "xor", "cmp"}; return opcode[modRM >> 3 & 7]; }; auto group2 = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string opcode[] = {"rol", "ror", "rcl", "rcr", "shl", "shr", "sal", "sar"}; return opcode[modRM >> 3 & 7]; }; auto group3 = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string opcode[] = {"test", "test", "not", "neg", "mul", "imul", "div", "idiv"}; return opcode[modRM >> 3 & 7]; }; auto group4 = [&](u32 offset = 1) -> string { auto modRM = read(offset); static const string opcode[] = {"inc", "dec", "call", "callf", "jmp", "jmpf", "push", "push"}; return opcode[modRM >> 3 & 7]; }; #define op(id, name, ...) case id: \ output.append(instruction(name), vector{__VA_ARGS__}.merge(",")); \ break auto opcode = read(0); for(u32 index : range(7)) { if(opcode == 0x26) { prefix = "ds1"; pc++; opcode = read(0); suppress = ps << 16 | pc; continue; } if(opcode == 0x2e) { prefix = "ps"; pc++; opcode = read(0); suppress = ps << 16 | pc; continue; } if(opcode == 0x36) { prefix = "ss"; pc++; opcode = read(0); suppress = ps << 16 | pc; continue; } if(opcode == 0x3e) { prefix = "ds0"; pc++; opcode = read(0); suppress = ps << 16 | pc; continue; } if(opcode == 0xf2) { repeat = "repnz"; pc++; opcode = read(0); suppress = ps << 16 | pc; continue; } if(opcode == 0xf3) { repeat = "repz"; pc++; opcode = read(0); suppress = ps << 16 | pc; continue; } break; } switch(opcode) { op(0x00, "add", memoryByte(), registerByte()); op(0x01, "add", memoryWord(), registerWord()); op(0x02, "add", registerByte(), memoryByte()); op(0x03, "add", registerWord(), memoryWord()); op(0x04, "add", "al", immediateByte()); op(0x05, "add", "aw", immediateWord()); op(0x06, "push", "ds1"); op(0x07, "pop", "ds1"); op(0x08, "or", memoryByte(), registerByte()); op(0x09, "or", memoryWord(), registerWord()); op(0x0a, "or", registerByte(), memoryByte()); op(0x0b, "or", registerWord(), memoryWord()); op(0x0c, "or", "al", immediateByte()); op(0x0d, "or", "aw", immediateWord()); op(0x0e, "push", "ps"); op(0x0f, "pop", "ps"); op(0x10, "adc", memoryByte(), registerByte()); op(0x11, "adc", memoryWord(), registerWord()); op(0x12, "adc", registerByte(), memoryByte()); op(0x13, "adc", registerWord(), memoryWord()); op(0x14, "adc", "al", immediateByte()); op(0x15, "adc", "aw", immediateWord()); op(0x16, "push", "ss"); op(0x17, "pop", "ss"); op(0x18, "sbb", memoryByte(), registerByte()); op(0x19, "sbb", memoryWord(), registerWord()); op(0x1a, "sbb", registerByte(), memoryByte()); op(0x1b, "sbb", registerWord(), memoryWord()); op(0x1c, "sbb", "al", immediateByte()); op(0x1d, "sbb", "aw", immediateWord()); op(0x1e, "push", "ds0"); op(0x1f, "pop", "ds0"); op(0x20, "and", memoryByte(), registerByte()); op(0x21, "and", memoryWord(), registerWord()); op(0x22, "and", registerByte(), memoryByte()); op(0x23, "and", registerWord(), memoryWord()); op(0x24, "and", "al", immediateByte()); op(0x25, "and", "aw", immediateWord()); op(0x26, "ds1:"); op(0x27, "daa"); op(0x28, "sub", memoryByte(), registerByte()); op(0x29, "sub", memoryWord(), registerWord()); op(0x2a, "sub", registerByte(), memoryByte()); op(0x2b, "sub", registerWord(), memoryWord()); op(0x2c, "sub", "al", immediateByte()); op(0x2d, "sub", "aw", immediateWord()); op(0x2e, "ps:"); op(0x2f, "das"); op(0x30, "xor", memoryByte(), registerByte()); op(0x31, "xor", memoryWord(), registerWord()); op(0x32, "xor", registerByte(), memoryByte()); op(0x33, "xor", registerWord(), memoryWord()); op(0x34, "xor", "al", immediateByte()); op(0x35, "xor", "aw", immediateWord()); op(0x36, "ss:"); op(0x37, "aaa"); op(0x38, "cmp", memoryByte(), registerByte()); op(0x39, "cmp", memoryWord(), registerWord()); op(0x3a, "cmp", registerByte(), memoryByte()); op(0x3b, "cmp", registerWord(), memoryWord()); op(0x3c, "cmp", "al", immediateByte()); op(0x3d, "cmp", "aw", immediateWord()); op(0x3e, "ds0:"); op(0x3f, "aas"); op(0x40, "inc", "aw"); op(0x41, "inc", "cw"); op(0x42, "inc", "dw"); op(0x43, "inc", "bw"); op(0x44, "inc", "sp"); op(0x45, "inc", "bp"); op(0x46, "inc", "ix"); op(0x47, "inc", "iy"); op(0x48, "dec", "aw"); op(0x49, "dec", "cw"); op(0x4a, "dec", "dw"); op(0x4b, "dec", "bw"); op(0x4c, "dec", "sp"); op(0x4d, "dec", "bp"); op(0x4e, "dec", "ix"); op(0x4f, "dec", "iy"); op(0x50, "push", "aw"); op(0x51, "push", "cw"); op(0x52, "push", "dw"); op(0x53, "push", "bw"); op(0x54, "push", "sp"); op(0x55, "push", "bp"); op(0x56, "push", "ix"); op(0x57, "push", "iy"); op(0x58, "pop", "aw"); op(0x59, "pop", "cw"); op(0x5a, "pop", "dw"); op(0x5b, "pop", "bw"); op(0x5c, "pop", "sp"); op(0x5d, "pop", "bp"); op(0x5e, "pop", "ix"); op(0x5f, "pop", "iy"); op(0x60, "pusha"); op(0x61, "popa"); op(0x62, "bound", registerWord(), memoryWord()); //op(0x63); //op(0x64); //op(0x65); //op(0x66); //op(0x67); op(0x68, "push", immediateWord()); op(0x69, "imul", registerWord(), memoryWord(), immediateWord(modRM())); op(0x6a, "push", adjustByte(1)); op(0x6b, "imul", registerWord(), memoryWord(), adjustByte(modRM())); op(0x6c, repeatable("insb")); op(0x6d, repeatable("insw")); op(0x6e, repeatable("outsb")); op(0x6f, repeatable("outsw")); op(0x70, "jo", relativeByte()); op(0x71, "jno", relativeByte()); op(0x72, "jb", relativeByte()); op(0x73, "jnb", relativeByte()); op(0x74, "jz", relativeByte()); op(0x75, "jnz", relativeByte()); op(0x76, "jbe", relativeByte()); op(0x77, "ja", relativeByte()); op(0x78, "js", relativeByte()); op(0x79, "jns", relativeByte()); op(0x7a, "jpe", relativeByte()); op(0x7b, "jpo", relativeByte()); op(0x7c, "jl", relativeByte()); op(0x7d, "jge", relativeByte()); op(0x7e, "jle", relativeByte()); op(0x7f, "jg", relativeByte()); op(0x80, group1(), memoryByte(), immediateByte(modRM())); op(0x81, group1(), memoryWord(), immediateWord(modRM())); op(0x82, group1(), memoryByte(), adjustByte(modRM())); op(0x83, group1(), memoryWord(), adjustByte(modRM())); op(0x84, "test", memoryByte(), registerByte()); op(0x85, "test", memoryWord(), registerWord()); op(0x86, "xchg", memoryByte(), registerByte()); op(0x87, "xchg", memoryWord(), registerWord()); op(0x88, "mov", memoryByte(), registerByte()); op(0x89, "mov", memoryWord(), registerWord()); op(0x8a, "mov", registerByte(), memoryByte()); op(0x8b, "mov", registerWord(), memoryWord()); op(0x8c, "mov", memoryWord(), segmentRegister()); op(0x8d, "lea", registerWord(), memoryWord()); op(0x8e, "mov", segmentRegister(), memoryWord()); op(0x8f, "pop", memoryWord()); op(0x90, "nop"); op(0x91, "xchg", "aw", "cw"); op(0x92, "xchg", "aw", "dw"); op(0x93, "xchg", "aw", "bw"); op(0x94, "xchg", "aw", "sp"); op(0x95, "xchg", "aw", "bp"); op(0x96, "xchg", "aw", "ix"); op(0x97, "xchg", "aw", "iy"); op(0x98, "cbw"); op(0x99, "cwd"); op(0x9a, "call", immediateLong()); op(0x9b, "wait"); op(0x9c, "pushf"); op(0x9d, "popf"); op(0x9e, "sahf"); op(0x9f, "lahf"); op(0xa0, "mov", "al", indirectByte()); op(0xa1, "mov", "aw", indirectWord()); op(0xa2, "mov", indirectByte(), "al"); op(0xa3, "mov", indirectWord(), "aw"); op(0xa4, repeatable("movsb")); op(0xa5, repeatable("movsw")); op(0xa6, repeatable("cmpsb")); op(0xa7, repeatable("cmpsw")); op(0xa8, "test", immediateByte()); op(0xa9, "test", immediateWord()); op(0xaa, repeatable("stosb")); op(0xab, repeatable("stosw")); op(0xac, repeatable("lodsb")); op(0xad, repeatable("lodsw")); op(0xae, repeatable("scasb")); op(0xaf, repeatable("scasw")); op(0xb0, "mov", "al", immediateByte()); op(0xb1, "mov", "cl", immediateByte()); op(0xb2, "mov", "dl", immediateByte()); op(0xb3, "mov", "bl", immediateByte()); op(0xb4, "mov", "ah", immediateByte()); op(0xb5, "mov", "ch", immediateByte()); op(0xb6, "mov", "dh", immediateByte()); op(0xb7, "mov", "bh", immediateByte()); op(0xb8, "mov", "aw", immediateWord()); op(0xb9, "mov", "cw", immediateWord()); op(0xba, "mov", "dw", immediateWord()); op(0xbb, "mov", "bw", immediateWord()); op(0xbc, "mov", "sp", immediateWord()); op(0xbd, "mov", "bp", immediateWord()); op(0xbe, "mov", "ix", immediateWord()); op(0xbf, "mov", "iy", immediateWord()); op(0xc0, group2(), memoryByte(), immediateByte(modRM())); op(0xc1, group2(), memoryWord(), immediateByte(modRM())); op(0xc2, "ret", immediateWord()); op(0xc3, "ret"); op(0xc4, "les", memoryWord()); op(0xc5, "lds", memoryWord()); op(0xc6, "mov", memoryByte(), immediateByte(modRM())); op(0xc7, "mov", memoryWord(), immediateWord(modRM())); op(0xc8, "enter", immediateWord(), immediateByte(3)); op(0xc9, "leave"); op(0xca, "retf", immediateWord()); op(0xcb, "retf"); op(0xcc, "int", "0x3"); op(0xcd, "int", immediateByte()); op(0xce, "into"); op(0xcf, "iret"); op(0xd0, group2(), memoryByte(), "1"); op(0xd1, group2(), memoryWord(), "1"); op(0xd2, group2(), memoryByte(), "cl"); op(0xd3, group2(), memoryWord(), "cl"); op(0xd4, "aam", immediateByte()); op(0xd5, "aad", immediateByte()); op(0xd6, "xlat"); //undocumented mirror op(0xd7, "xlat"); //op(0xd8); //op(0xd9); //op(0xda); //op(0xdb); //op(0xdc); //op(0xdd); //op(0xde); //op(0xdf); op(0xe0, "loopnz"); op(0xe1, "loopz"); op(0xe2, "loop"); op(0xe3, "jcwz", relativeByte()); op(0xe4, "in", "al", immediateByte()); op(0xe5, "in", "aw", immediateWord()); op(0xe6, "out", immediateByte(), "al"); op(0xe7, "out", immediateWord(), "aw"); op(0xe8, "call", relativeWord()); op(0xe9, "jmp", relativeWord()); op(0xea, "jmp", immediateLong()); op(0xeb, "jmp", relativeByte()); op(0xec, "in", "al", "dw"); op(0xed, "in", "aw", "dw"); op(0xee, "out", "dw", "al"); op(0xef, "out", "dw", "aw"); op(0xf0, "lock:"); //op(0xf1); op(0xf2, "repnz:"); op(0xf3, "repz:"); op(0xf4, "hlt"); op(0xf5, "cmc"); op(0xf6, group3(), memoryByte(), immediateByte(modRM())); op(0xf7, group3(), memoryWord(), immediateWord(modRM())); op(0xf8, "clc"); op(0xf9, "stc"); op(0xfa, "cli"); op(0xfb, "sti"); op(0xfc, "cld"); op(0xfd, "std"); op(0xfe, group4(), memoryByte(), immediateByte(modRM())); op(0xff, group4(), memoryWord(), immediateWord(modRM())); default: output.append("??? ", hex(read(0), 2L)); break; } #undef op return pad(output, -36); //todo: determine the minimum value that will never clip here } auto V30MZ::disassembleInstruction() -> string { return disassembleInstruction(PS, PC); } auto V30MZ::disassembleContext() -> string { return { "AW:", hex(AW, 4L), " ", "BW:", hex(BW, 4L), " ", "CW:", hex(CW, 4L), " ", "DW:", hex(DW, 4L), " ", "SP:", hex(SP, 4L), " ", "BP:", hex(BP, 4L), " ", "IX:", hex(IX, 4L), " ", "IY:", hex(IY, 4L), " ", "PC:", hex(PC, 4L), " ", "PS:", hex(PS, 4L), " ", "SS:", hex(SS, 4L), " ", "DS0:", hex(DS0, 4L), " ", "DS1:", hex(DS1, 4L), " ", PSW.MD ? "M" : "m", PSW.V ? "V" : "v", PSW.DIR ? "D" : "d", PSW.IE ? "I" : "i", PSW.BRK ? "B" : "b", PSW.S ? "S" : "s", PSW.Z ? "Z" : "z", PSW.AC ? "H" : "h", PSW.P ? "P" : "p", PSW.CY ? "C" : "c" }; } ares-126/ares/component/processor/v30mz/instruction.cpp000066400000000000000000000173231415063341600233460ustar00rootroot00000000000000auto V30MZ::interrupt(u8 vector) -> void { wait(32); state.halt = 0; state.poll = 1; state.prefix = 0; //if an IRQ fires during a rep string instruction; //flush prefix queue and seek back to first prefix. //this allows the transfer to resume after the IRQ. if(!prefixes.empty()) { PC -= prefixes.size(); prefixes.flush(); } auto pc = read(0x0000, vector * 4 + 0); auto ps = read(0x0000, vector * 4 + 2); push(PSW); push(PS); push(PC); PSW.MD = 1; PSW.IE = 0; PSW.BRK = 0; PC = pc; PS = ps; flush(); } #define op(id, name, ...) case id: instruction##name(__VA_ARGS__); break; auto V30MZ::instruction() -> void { state.poll = 1; state.prefix = 0; if(state.halt) return wait(1); switch(opcode = fetch()) { op(0x00, AddMemReg) op(0x01, AddMemReg) op(0x02, AddRegMem) op(0x03, AddRegMem) op(0x04, AddAccImm) op(0x05, AddAccImm) op(0x06, PushSeg, DS1) op(0x07, PopSeg, DS1) op(0x08, OrMemReg) op(0x09, OrMemReg) op(0x0a, OrRegMem) op(0x0b, OrRegMem) op(0x0c, OrAccImm) op(0x0d, OrAccImm) op(0x0e, PushSeg, PS) op(0x0f, PopSeg, PS) op(0x10, AdcMemReg) op(0x11, AdcMemReg) op(0x12, AdcRegMem) op(0x13, AdcRegMem) op(0x14, AdcAccImm) op(0x15, AdcAccImm) op(0x16, PushSeg, SS) op(0x17, PopSeg, SS) op(0x18, SbbMemReg) op(0x19, SbbMemReg) op(0x1a, SbbRegMem) op(0x1b, SbbRegMem) op(0x1c, SbbAccImm) op(0x1d, SbbAccImm) op(0x1e, PushSeg, DS0) op(0x1f, PopSeg, DS0) op(0x20, AndMemReg) op(0x21, AndMemReg) op(0x22, AndRegMem) op(0x23, AndRegMem) op(0x24, AndAccImm) op(0x25, AndAccImm) op(0x26, Segment, DS1) op(0x27, DecimalAdjust, 0) //daa op(0x28, SubMemReg) op(0x29, SubMemReg) op(0x2a, SubRegMem) op(0x2b, SubRegMem) op(0x2c, SubAccImm) op(0x2d, SubAccImm) op(0x2e, Segment, PS) op(0x2f, DecimalAdjust, 1) //das op(0x30, XorMemReg) op(0x31, XorMemReg) op(0x32, XorRegMem) op(0x33, XorRegMem) op(0x34, XorAccImm) op(0x35, XorAccImm) op(0x36, Segment, SS) op(0x37, AsciiAdjust, 0) //aaa op(0x38, CmpMemReg) op(0x39, CmpMemReg) op(0x3a, CmpRegMem) op(0x3b, CmpRegMem) op(0x3c, CmpAccImm) op(0x3d, CmpAccImm) op(0x3e, Segment, DS0) op(0x3f, AsciiAdjust, 1) //aas op(0x40, IncReg, AW) op(0x41, IncReg, CW) op(0x42, IncReg, DW) op(0x43, IncReg, BW) op(0x44, IncReg, SP) op(0x45, IncReg, BP) op(0x46, IncReg, IX) op(0x47, IncReg, IY) op(0x48, DecReg, AW) op(0x49, DecReg, CW) op(0x4a, DecReg, DW) op(0x4b, DecReg, BW) op(0x4c, DecReg, SP) op(0x4d, DecReg, BP) op(0x4e, DecReg, IX) op(0x4f, DecReg, IY) op(0x50, PushReg, AW) op(0x51, PushReg, CW) op(0x52, PushReg, DW) op(0x53, PushReg, BW) op(0x54, PushReg, SP) op(0x55, PushReg, BP) op(0x56, PushReg, IX) op(0x57, PushReg, IY) op(0x58, PopReg, AW) op(0x59, PopReg, CW) op(0x5a, PopReg, DW) op(0x5b, PopReg, BW) op(0x5c, PopReg, SP) op(0x5d, PopReg, BP) op(0x5e, PopReg, IX) op(0x5f, PopReg, IY) op(0x60, PushAll) op(0x61, PopAll) op(0x62, Bound) //op(0x63, ...) //op(0x64, ...) repnc //op(0x65, ...) repc //op(0x66, ...) fpo2 //op(0x67, ...) fpo2 op(0x68, PushImm) op(0x69, MultiplySignedRegMemImm) op(0x6a, PushImm) op(0x6b, MultiplySignedRegMemImm) op(0x6c, InString) op(0x6d, InString) op(0x6e, OutString) op(0x6f, OutString) op(0x70, JumpIf, PSW.V == 1) op(0x71, JumpIf, PSW.V == 0) op(0x72, JumpIf, PSW.CY == 1) op(0x73, JumpIf, PSW.CY == 0) op(0x74, JumpIf, PSW.Z == 1) op(0x75, JumpIf, PSW.Z == 0) op(0x76, JumpIf, PSW.Z == 1 || PSW.CY == 1) op(0x77, JumpIf, PSW.Z != 1 && PSW.CY != 1) op(0x78, JumpIf, PSW.S == 1) op(0x79, JumpIf, PSW.S == 0) op(0x7a, JumpIf, PSW.P == 1) op(0x7b, JumpIf, PSW.P == 0) op(0x7c, JumpIf, PSW.S != PSW.V && PSW.Z == 0) op(0x7d, JumpIf, PSW.S == PSW.V || PSW.Z == 1) op(0x7e, JumpIf, PSW.S != PSW.V || PSW.Z == 1) op(0x7f, JumpIf, PSW.S == PSW.V && PSW.Z == 0) op(0x80, Group1MemImm, 0) op(0x81, Group1MemImm, 0) op(0x82, Group1MemImm, 1) op(0x83, Group1MemImm, 1) op(0x84, TestMemReg) op(0x85, TestMemReg) op(0x86, ExchangeMemReg) op(0x87, ExchangeMemReg) op(0x88, MoveMemReg) op(0x89, MoveMemReg) op(0x8a, MoveRegMem) op(0x8b, MoveRegMem) op(0x8c, MoveMemSeg) op(0x8d, LoadEffectiveAddressRegMem) op(0x8e, MoveSegMem) op(0x8f, PopMem) op(0x90, Nop) op(0x91, Exchange, AW, CW) op(0x92, Exchange, AW, DW) op(0x93, Exchange, AW, BW) op(0x94, Exchange, AW, SP) op(0x95, Exchange, AW, BP) op(0x96, Exchange, AW, IX) op(0x97, Exchange, AW, IY) op(0x98, SignExtendByte) op(0x99, SignExtendWord) op(0x9a, CallFar) op(0x9b, Wait) op(0x9c, PushFlags) op(0x9d, PopFlags) op(0x9e, StoreFlagsAcc) op(0x9f, LoadAccFlags) op(0xa0, MoveAccMem) op(0xa1, MoveAccMem) op(0xa2, MoveMemAcc) op(0xa3, MoveMemAcc) op(0xa4, MoveString) op(0xa5, MoveString) op(0xa6, CompareString) op(0xa7, CompareString) op(0xa8, TestAcc) op(0xa9, TestAcc) op(0xaa, StoreString) op(0xab, StoreString) op(0xac, LoadString) op(0xad, LoadString) op(0xae, ScanString) op(0xaf, ScanString) op(0xb0, MoveRegImm, AL) op(0xb1, MoveRegImm, CL) op(0xb2, MoveRegImm, DL) op(0xb3, MoveRegImm, BL) op(0xb4, MoveRegImm, AH) op(0xb5, MoveRegImm, CH) op(0xb6, MoveRegImm, DH) op(0xb7, MoveRegImm, BH) op(0xb8, MoveRegImm, AW) op(0xb9, MoveRegImm, CW) op(0xba, MoveRegImm, DW) op(0xbb, MoveRegImm, BW) op(0xbc, MoveRegImm, SP) op(0xbd, MoveRegImm, BP) op(0xbe, MoveRegImm, IX) op(0xbf, MoveRegImm, IY) op(0xc0, Group2MemImm, 3) op(0xc1, Group2MemImm, 3) op(0xc2, ReturnImm) op(0xc3, Return) op(0xc4, LoadSegmentMem, DS1) op(0xc5, LoadSegmentMem, DS0) op(0xc6, MoveMemImm) op(0xc7, MoveMemImm) op(0xc8, Enter) op(0xc9, Leave) op(0xca, ReturnFarImm) op(0xcb, ReturnFar) op(0xcc, Int3) op(0xcd, IntImm) op(0xce, Into) op(0xcf, ReturnInt) op(0xd0, Group2MemImm, 1, (u8)1) op(0xd1, Group2MemImm, 1, (u8)1) op(0xd2, Group2MemImm, 3, (u8)CL) op(0xd3, Group2MemImm, 3, (u8)CL) op(0xd4, AdjustAfterMultiply) op(0xd5, AdjustAfterDivide) op(0xd6, Translate, 7) //xlat (undocumented mirror) op(0xd7, Translate, 4) //xlat //op(0xd8, ...) //fpo1 //op(0xd9, ...) //fpo1 //op(0xda, ...) //fpo1 //op(0xdb, ...) //fpo1 //op(0xdc, ...) //fpo1 //op(0xdd, ...) //fpo1 //op(0xde, ...) //fpo1 //op(0xdf, ...) //fpo1 op(0xe0, LoopWhile, 0) //loopnz op(0xe1, LoopWhile, 1) //loopz op(0xe2, Loop) op(0xe3, JumpIf, CW == 0) op(0xe4, In) op(0xe5, In) op(0xe6, Out) op(0xe7, Out) op(0xe8, CallNear) op(0xe9, JumpNear) op(0xea, JumpFar) op(0xeb, JumpShort) op(0xec, InDW) op(0xed, InDW) op(0xee, OutDW) op(0xef, OutDW) op(0xf0, Lock) //op(0xf1, ...) op(0xf2, Repeat) //repnz op(0xf3, Repeat) //repz op(0xf4, Halt) op(0xf5, ComplementCarry) op(0xf6, Group3MemImm) op(0xf7, Group3MemImm) op(0xf8, ClearFlag, PSW.CY.bit()) op(0xf9, SetFlag, PSW.CY.bit()) op(0xfa, ClearFlag, PSW.IE.bit()) op(0xfb, SetFlag, PSW.IE.bit()) op(0xfc, ClearFlag, PSW.DIR.bit()) op(0xfd, SetFlag, PSW.DIR.bit()) op(0xfe, Group4MemImm) op(0xff, Group4MemImm) } if(!state.prefix) prefixes.flush(); } #undef op ares-126/ares/component/processor/v30mz/instructions-adjust.cpp000066400000000000000000000021731415063341600250160ustar00rootroot00000000000000auto V30MZ::instructionDecimalAdjust(bool negate) -> void { wait(10 + negate); n8 al = AL; if(PSW.AC || ((al & 0x0f) > 0x09)) { AL += negate ? -0x06 : 0x06; PSW.AC = 1; } if(PSW.CY || (al > 0x99)) { AL += negate ? -0x60 : 0x60; PSW.CY = 1; } PSW.S = AL & 0x80; PSW.Z = AL == 0; PSW.P = parity(AL); } auto V30MZ::instructionAsciiAdjust(bool negate) -> void { wait(9); if(PSW.AC || ((AL & 0x0f) > 0x09)) { AL += negate ? -0x06 : 0x06; AH += negate ? -0x01 : 0x01; PSW.AC = 1; PSW.CY = 1; } else { PSW.AC = 0; PSW.CY = 0; } AL &= 0x0f; } auto V30MZ::instructionAdjustAfterMultiply() -> void { wait(16); auto imm = fetch(); if(imm == 0) return interrupt(0); //NEC CPUs do not honor the immediate and always use (base) 10 AH = AL / 10; AL %= imm; PSW.P = parity(AL); PSW.S = AW & 0x8000; PSW.Z = AW == 0; } auto V30MZ::instructionAdjustAfterDivide() -> void { wait(6); auto imm = fetch(); //NEC CPUs do not honor the immediate and always use (base) 10 AL += AH * 10; AH = 0; PSW.P = parity(AL); PSW.S = AW & 0x8000; PSW.Z = AW == 0; } ares-126/ares/component/processor/v30mz/instructions-alu.cpp000066400000000000000000000107711415063341600243100ustar00rootroot00000000000000template auto V30MZ::instructionAddMemReg() -> void { wait(1); modRM(); setMemory(ADD(getMemory(), getRegister())); } template auto V30MZ::instructionAddRegMem() -> void { wait(1); modRM(); setRegister(ADD(getRegister(), getMemory())); } template auto V30MZ::instructionAddAccImm() -> void { wait(1); setAccumulator(ADD(getAccumulator(), fetch())); } template auto V30MZ::instructionOrMemReg() -> void { wait(1); modRM(); setMemory(OR(getMemory(), getRegister())); } template auto V30MZ::instructionOrRegMem() -> void { wait(1); modRM(); setRegister(OR(getRegister(), getMemory())); } template auto V30MZ::instructionOrAccImm() -> void { wait(1); setAccumulator(OR(getAccumulator(), fetch())); } template auto V30MZ::instructionAdcMemReg() -> void { wait(1); modRM(); setMemory(ADC(getMemory(), getRegister())); } template auto V30MZ::instructionAdcRegMem() -> void { wait(1); modRM(); setRegister(ADC(getRegister(), getMemory())); } template auto V30MZ::instructionAdcAccImm() -> void { wait(1); setAccumulator(ADC(getAccumulator(), fetch())); } template auto V30MZ::instructionSbbMemReg() -> void { wait(1); modRM(); setMemory(SBB(getMemory(), getRegister())); } template auto V30MZ::instructionSbbRegMem() -> void { wait(1); modRM(); setRegister(SBB(getRegister(), getMemory())); } template auto V30MZ::instructionSbbAccImm() -> void { wait(1); setAccumulator(SBB(getAccumulator(), fetch())); } template auto V30MZ::instructionAndMemReg() -> void { wait(1); modRM(); setMemory(AND(getMemory(), getRegister())); } template auto V30MZ::instructionAndRegMem() -> void { wait(1); modRM(); setRegister(AND(getRegister(), getMemory())); } template auto V30MZ::instructionAndAccImm() -> void { wait(1); setAccumulator(AND(getAccumulator(), fetch())); } template auto V30MZ::instructionSubMemReg() -> void { wait(1); modRM(); setMemory(SUB(getMemory(), getRegister())); } template auto V30MZ::instructionSubRegMem() -> void { wait(1); modRM(); setRegister(SUB(getRegister(), getMemory())); } template auto V30MZ::instructionSubAccImm() -> void { wait(1); setAccumulator(SUB(getAccumulator(), fetch())); } template auto V30MZ::instructionXorMemReg() -> void { wait(1); modRM(); setMemory(XOR(getMemory(), getRegister())); } template auto V30MZ::instructionXorRegMem() -> void { wait(1); modRM(); setRegister(XOR(getRegister(), getMemory())); } template auto V30MZ::instructionXorAccImm() -> void { wait(1); setAccumulator(XOR(getAccumulator(), fetch())); } template auto V30MZ::instructionCmpMemReg() -> void { wait(1); modRM(); SUB(getMemory(), getRegister()); } template auto V30MZ::instructionCmpRegMem() -> void { wait(1); modRM(); SUB(getRegister(), getMemory()); } template auto V30MZ::instructionCmpAccImm() -> void { wait(1); SUB(getAccumulator(), fetch()); } template auto V30MZ::instructionTestAcc() -> void { wait(1); AND(getAccumulator(), fetch()); } template auto V30MZ::instructionTestMemReg() -> void { wait(1); modRM(); AND(getMemory(), getRegister()); } template auto V30MZ::instructionMultiplySignedRegMemImm() -> void { wait(5); modRM(); setRegister(MULI(getMemory(), size == Word ? (s16)fetch() : (s8)fetch())); } auto V30MZ::instructionIncReg(u16& reg) -> void { wait(1); reg = INC(reg); } auto V30MZ::instructionDecReg(u16& reg) -> void { wait(1); reg = DEC(reg); } auto V30MZ::instructionSignExtendByte() -> void { wait(1); setAccumulator((i8)getAccumulator()); } auto V30MZ::instructionSignExtendWord() -> void { wait(1); setAccumulator((i16)getAccumulator()); } ares-126/ares/component/processor/v30mz/instructions-exec.cpp000066400000000000000000000074301415063341600244510ustar00rootroot00000000000000auto V30MZ::instructionLoop() -> void { wait(1); auto offset = (i8)fetch(); if(--CW) { wait(3); PC += offset; flush(); } } auto V30MZ::instructionLoopWhile(bool value) -> void { wait(2); auto offset = (i8)fetch(); if(--CW && PSW.Z == value) { wait(3); PC += offset; flush(); } } auto V30MZ::instructionJumpShort() -> void { wait(3); auto offset = (i8)fetch(); PC += offset; flush(); } auto V30MZ::instructionJumpIf(bool condition) -> void { wait(1); auto offset = (i8)fetch(); if(condition) { wait(3); PC += offset; flush(); } } auto V30MZ::instructionJumpNear() -> void { wait(3); PC += (i16)fetch(); flush(); } auto V30MZ::instructionJumpFar() -> void { wait(6); auto pc = fetch(); auto ps = fetch(); PS = ps; PC = pc; flush(); } auto V30MZ::instructionCallNear() -> void { wait(4); auto offset = (i16)fetch(); push(PC); PC += offset; flush(); } auto V30MZ::instructionCallFar() -> void { wait(9); auto pc = fetch(); auto ps = fetch(); push(PS); push(PC); PS = ps; PC = pc; flush(); } auto V30MZ::instructionReturn() -> void { wait(5); PC = pop(); flush(); } auto V30MZ::instructionReturnImm() -> void { wait(5); auto offset = fetch(); PC = pop(); SP += offset; flush(); } auto V30MZ::instructionReturnFar() -> void { wait(7); PC = pop(); PS = pop(); flush(); } auto V30MZ::instructionReturnFarImm() -> void { wait(8); auto offset = fetch(); PC = pop(); PS = pop(); SP += offset; flush(); } auto V30MZ::instructionReturnInt() -> void { wait(9); PC = pop(); PS = pop(); PSW = pop(); flush(); state.poll = 0; } auto V30MZ::instructionInt3() -> void { wait(8); interrupt(3); } auto V30MZ::instructionIntImm() -> void { wait(9); interrupt(fetch()); } auto V30MZ::instructionInto() -> void { wait(5); interrupt(4); } auto V30MZ::instructionEnter() -> void { wait(7); auto offset = fetch(); auto length = fetch() & 0x1f; push(BP); BP = SP; SP -= offset; if(length) { wait(length > 1 ? 7 : 6); for(auto index = 1; index < length; index++) { wait(4); auto data = read(segment(SS), BP - index * 2); push(data); } push(BP); } } auto V30MZ::instructionLeave() -> void { wait(1); SP = BP; BP = pop(); } auto V30MZ::instructionPushReg(u16& reg) -> void { push(reg); } auto V30MZ::instructionPushSeg(u16& seg) -> void { wait(1); push(seg); } auto V30MZ::instructionPopReg(u16& reg) -> void { reg = pop(); } auto V30MZ::instructionPopSeg(u16& seg) -> void { wait(2); seg = pop(); if(&seg == &SS) state.poll = 0; } auto V30MZ::instructionPushFlags() -> void { wait(1); push(PSW); } auto V30MZ::instructionPopFlags() -> void { wait(2); PSW = pop(); state.poll = 0; } auto V30MZ::instructionPushAll() -> void { wait(1); auto sp = SP; push(AW); push(CW); push(DW); push(BW); push(sp); push(BP); push(IX); push(IY); } auto V30MZ::instructionPopAll() -> void { wait(1); IY = pop(); IX = pop(); BP = pop(); auto sp = pop(); BW = pop(); DW = pop(); CW = pop(); AW = pop(); //SP is not restored } template auto V30MZ::instructionPushImm() -> void { if constexpr(size == Byte) push((i8)fetch()); if constexpr(size == Word) push(fetch()); } auto V30MZ::instructionPopMem() -> void { wait(1); modRM(); auto data = pop(); //NEC bug: pop into a register will adjust the stack, but fail to set the register properly //in practice, this isn't an issue as assemblers will favor one-byte pop instructions, //but this difference can be used to distinguish Intel x86 chips from NEC V20/V30 chips. if(modrm.mod != 3) setMemory(data); } ares-126/ares/component/processor/v30mz/instructions-flag.cpp000066400000000000000000000007321415063341600244340ustar00rootroot00000000000000auto V30MZ::instructionStoreFlagsAcc() -> void { wait(4); PSW = (PSW & 0xff00) | AH; } auto V30MZ::instructionLoadAccFlags() -> void { wait(2); AH = (PSW & 0x00ff); } auto V30MZ::instructionComplementCarry() -> void { wait(4); PSW.CY = !PSW.CY; } auto V30MZ::instructionClearFlag(u32 bit) -> void { wait(4); PSW &= ~(1 << bit); } auto V30MZ::instructionSetFlag(u32 bit) -> void { wait(4); PSW |= 1 << bit; if(bit == PSW.IE.bit()) state.poll = 0; } ares-126/ares/component/processor/v30mz/instructions-group.cpp000066400000000000000000000060131415063341600246550ustar00rootroot00000000000000template auto V30MZ::instructionGroup1MemImm(bool sign) -> void { wait(1); modRM(); auto mem = getMemory(); n16 imm = 0; if(sign) imm = (i8)fetch(); else if(size == Byte) imm = fetch(); else imm = fetch(); switch(modrm.reg) { case 0: setMemory(ADD(mem, imm)); break; case 1: setMemory(OR (mem, imm)); break; case 2: setMemory(ADC(mem, imm)); break; case 3: setMemory(SBB(mem, imm)); break; case 4: setMemory(AND(mem, imm)); break; case 5: setMemory(SUB(mem, imm)); break; case 6: setMemory(XOR(mem, imm)); break; case 7: (SUB(mem, imm)); break; } } template auto V30MZ::instructionGroup2MemImm(u8 clocks, maybe imm) -> void { wait(clocks); modRM(); auto mem = getMemory(); if(!imm) imm = fetch(); switch(modrm.reg) { case 0: setMemory(ROL(mem, *imm)); break; case 1: setMemory(ROR(mem, *imm)); break; case 2: setMemory(RCL(mem, *imm)); break; case 3: setMemory(RCR(mem, *imm)); break; case 4: setMemory(SHL(mem, *imm)); break; case 5: setMemory(SHR(mem, *imm)); break; case 6: setMemory(SAL(mem, *imm)); break; case 7: setMemory(SAR(mem, *imm)); break; } } template auto V30MZ::instructionGroup3MemImm() -> void { modRM(); auto mem = getMemory(); switch(modrm.reg) { case 0: wait(1); AND(mem, fetch()); break; //TEST case 1: wait(1); AND(mem, fetch()); break; //TEST (undocumented mirror) case 2: wait(1); setMemory(NOT(mem)); break; case 3: wait(1); setMemory(NEG(mem)); break; case 4: wait(3); setAccumulator(MULU(getAccumulator(), mem)); break; case 5: wait(3); setAccumulator(MULI(getAccumulator(), mem)); break; break; case 6: wait(size == Byte ? 15 : 23); setAccumulator(DIVU(getAccumulator(), mem)); break; case 7: wait(size == Byte ? 17 : 24); setAccumulator(DIVI(getAccumulator(), mem)); break; } } template auto V30MZ::instructionGroup4MemImm() -> void { modRM(); switch(modrm.reg) { case 0: //INC wait(1); setMemory(INC(getMemory())); break; case 1: //DEC wait(1); setMemory(DEC(getMemory())); break; case 2: //CALL wait(5); push(PC); PC = getMemory(); flush(); break; case 3: //CALLF wait(11); push(PS); push(PC); PC = getMemory(0); PS = getMemory(2); flush(); break; case 4: //JMP wait(4); PC = getMemory(); flush(); break; case 5: //JMPF wait(9); PC = getMemory(0); PS = getMemory(2); flush(); break; case 6: //PUSH push(getMemory()); break; case 7: //PUSH (undocumented mirror) push(getMemory()); break; } } ares-126/ares/component/processor/v30mz/instructions-misc.cpp000066400000000000000000000026351415063341600244620ustar00rootroot00000000000000auto V30MZ::instructionSegment(n16 segment) -> void { if(prefixes.full()) prefixes.read(0); prefixes.write(opcode); state.prefix = 1; state.poll = 0; } auto V30MZ::instructionRepeat() -> void { if(prefixes.full()) prefixes.read(0); prefixes.write(opcode); wait(4); state.prefix = 1; state.poll = 0; } auto V30MZ::instructionLock() -> void { if(prefixes.full()) prefixes.read(0); prefixes.write(opcode); state.prefix = 1; state.poll = 0; } auto V30MZ::instructionWait() -> void { wait(1); } auto V30MZ::instructionHalt() -> void { wait(8); state.halt = 1; } auto V30MZ::instructionNop() -> void { wait(1); } template auto V30MZ::instructionIn() -> void { wait(6); setAccumulator(in(fetch())); } template auto V30MZ::instructionOut() -> void { wait(6); out(fetch(), getAccumulator()); } template auto V30MZ::instructionInDW() -> void { wait(4); setAccumulator(in(DW)); } template auto V30MZ::instructionOutDW() -> void { wait(4); out(DW, getAccumulator()); } auto V30MZ::instructionTranslate(u8 clocks) -> void { wait(clocks); AL = read(segment(DS0), BW + AL); } auto V30MZ::instructionBound() -> void { wait(12); modRM(); auto lo = getMemory(0); auto hi = getMemory(2); auto reg = getRegister(); if(reg < lo || reg > hi) interrupt(5); } ares-126/ares/component/processor/v30mz/instructions-move.cpp000066400000000000000000000032741415063341600244750ustar00rootroot00000000000000template auto V30MZ::instructionMoveMemReg() -> void { modRM(); if(modrm.mod == 3) wait(1); setMemory(getRegister()); } template auto V30MZ::instructionMoveRegMem() -> void { modRM(); if(modrm.mod == 3) wait(1); setRegister(getMemory()); } auto V30MZ::instructionMoveMemSeg() -> void { wait(1); modRM(); setMemory(getSegment()); state.poll = 0; } auto V30MZ::instructionMoveSegMem() -> void { wait(2); modRM(); setSegment(getMemory()); if((modrm.reg & 3) == 3) state.poll = 0; } template auto V30MZ::instructionMoveAccMem() -> void { setAccumulator(read(segment(DS0), fetch())); } template auto V30MZ::instructionMoveMemAcc() -> void { write(segment(DS0), fetch(), getAccumulator()); } auto V30MZ::instructionMoveRegImm(u8& reg) -> void { wait(1); reg = fetch(); } auto V30MZ::instructionMoveRegImm(u16& reg) -> void { wait(1); reg = fetch(); } template auto V30MZ::instructionMoveMemImm() -> void { modRM(); setMemory(fetch()); } auto V30MZ::instructionExchange(u16& x, u16& y) -> void { wait(3); n16 z = x; x = y; y = z; } template auto V30MZ::instructionExchangeMemReg() -> void { wait(3); modRM(); auto mem = getMemory(); auto reg = getRegister(); setMemory(reg); setRegister(mem); } auto V30MZ::instructionLoadEffectiveAddressRegMem() -> void { wait(1); modRM(); setRegister(modrm.address); } auto V30MZ::instructionLoadSegmentMem(u16& segment) -> void { wait(4); modRM(); setRegister(getMemory()); segment = getMemory(2); } ares-126/ares/component/processor/v30mz/instructions-string.cpp000066400000000000000000000045011415063341600250270ustar00rootroot00000000000000template auto V30MZ::instructionInString() -> void { wait(5); if(!repeat() || CW) { auto data = in(DW); write(DS1, IY, data); IY += PSW.DIR ? -size : size; if(!repeat() || !--CW) return; state.prefix = 1; PC--; loop(); } } template auto V30MZ::instructionOutString() -> void { wait(6); if(!repeat() || CW) { auto data = read(segment(DS0), IX); out(DW, data); IX += PSW.DIR ? -size : size; if(!repeat() || !--CW) return; state.prefix = 1; PC--; loop(); } } template auto V30MZ::instructionMoveString() -> void { wait(3); if(!repeat() || CW) { auto data = read(segment(DS0), IX); write(DS1, IY, data); IX += PSW.DIR ? -size : size; IY += PSW.DIR ? -size : size; if(!repeat() || !--CW) return; state.prefix = 1; PC--; loop(); } } template auto V30MZ::instructionCompareString() -> void { wait(4); if(!repeat() || CW) { auto x = read(segment(DS0), IX); auto y = read(DS1, IY); IX += PSW.DIR ? -size : size; IY += PSW.DIR ? -size : size; SUB(x, y); if(!repeat() || !--CW) return; if(repeat() == RepeatWhileZeroLo && PSW.Z == 1) return; if(repeat() == RepeatWhileZeroHi && PSW.Z == 0) return; state.prefix = 1; PC--; loop(); } } template auto V30MZ::instructionStoreString() -> void { wait(2); if(!repeat() || CW) { write(DS1, IY, getAccumulator()); IY += PSW.DIR ? -size : size; if(!repeat() || !--CW) return; state.prefix = 1; PC--; loop(); } } template auto V30MZ::instructionLoadString() -> void { wait(2); if(!repeat() || CW) { setAccumulator(read(segment(DS0), IX)); IX += PSW.DIR ? -size : size; if(!repeat() || !--CW) return; state.prefix = 1; PC--; loop(); } } template auto V30MZ::instructionScanString() -> void { wait(3); if(!repeat() || CW) { auto x = getAccumulator(); auto y = read(DS1, IY); IY += PSW.DIR ? -size : size; SUB(x, y); if(!repeat() || !--CW) return; if(repeat() == RepeatWhileZeroLo && PSW.Z == 1) return; if(repeat() == RepeatWhileZeroHi && PSW.Z == 0) return; state.prefix = 1; PC--; loop(); } } ares-126/ares/component/processor/v30mz/memory.cpp000066400000000000000000000034001415063341600222640ustar00rootroot00000000000000template<> auto V30MZ::read(u16 segment, u16 address) -> u32 { step(1); u32 data = 0; data |= read(segment * 16 + address++) << 0; return data; } template<> auto V30MZ::read(u16 segment, u16 address) -> u32 { step(1 + (address & 1)); u32 data = 0; data |= read(segment * 16 + address++) << 0; data |= read(segment * 16 + address++) << 8; return data; } template<> auto V30MZ::read(u16 segment, u16 address) -> u32 { step(2 + (address & 1)); u32 data = 0; data |= read(segment * 16 + address++) << 0; data |= read(segment * 16 + address++) << 8; data |= read(segment * 16 + address++) << 16; data |= read(segment * 16 + address++) << 24; return data; } template<> auto V30MZ::write(u16 segment, u16 address, u16 data) -> void { step(1); write(segment * 16 + address++, data >> 0); } template<> auto V30MZ::write(u16 segment, u16 address, u16 data) -> void { step(1 + (address & 1)); write(segment * 16 + address++, data >> 0); write(segment * 16 + address++, data >> 8); } template<> auto V30MZ::in(u16 address) -> u16 { step(1); u16 data = 0; data |= in(address++) << 0; return data; } template<> auto V30MZ::in(u16 address) -> u16 { step(1 + (address & 1)); u16 data = 0; data |= in(address++) << 0; data |= in(address++) << 8; return data; } template<> auto V30MZ::out(u16 address, u16 data) -> void { step(1); out(address++, data >> 0); } template<> auto V30MZ::out(u16 address, u16 data) -> void { step(1 + (address & 1)); out(address++, data >> 0); out(address++, data >> 8); } auto V30MZ::pop() -> u16 { u16 data = read(SS, SP); SP += Word; return data; } auto V30MZ::push(u16 data) -> void { SP -= Word; write(SS, SP, data); } ares-126/ares/component/processor/v30mz/modrm.cpp000066400000000000000000000041411415063341600220750ustar00rootroot00000000000000auto V30MZ::modRM() -> void { auto data = fetch(); modrm.mem = data >> 0 & 7; modrm.reg = data >> 3 & 7; modrm.mod = data >> 6 & 3; if(modrm.mod == 0 && modrm.mem == 6) { modrm.segment = segment(DS0); modrm.address = fetch(); } else { switch(modrm.mem) { case 0: modrm.segment = segment(DS0); modrm.address = BW + IX; break; case 1: modrm.segment = segment(DS0); modrm.address = BW + IY; break; case 2: modrm.segment = segment(SS ); modrm.address = BP + IX; break; case 3: modrm.segment = segment(SS ); modrm.address = BP + IY; break; case 4: modrm.segment = segment(DS0); modrm.address = IX; break; case 5: modrm.segment = segment(DS0); modrm.address = IY; break; case 6: modrm.segment = segment(SS ); modrm.address = BP; break; case 7: modrm.segment = segment(DS0); modrm.address = BW; break; } if(modrm.mod == 1) modrm.address += ( i8)fetch(); if(modrm.mod == 2) modrm.address += (i16)fetch(); } } auto V30MZ::getSegment() -> u16 { return *RS[modrm.reg]; } auto V30MZ::setSegment(u16 data) -> void { *RS[modrm.reg] = data; } template<> auto V30MZ::getRegister() -> u16 { return *RB[modrm.reg]; } template<> auto V30MZ::getRegister() -> u16 { return *RW[modrm.reg]; } template<> auto V30MZ::setRegister(u16 data) -> void { *RB[modrm.reg] = data; } template<> auto V30MZ::setRegister(u16 data) -> void { *RW[modrm.reg] = data; } template<> auto V30MZ::getMemory(u32 offset) -> u16 { if(modrm.mod == 3) return *RB[modrm.mem]; return read(modrm.segment, modrm.address + offset); } template<> auto V30MZ::getMemory(u32 offset) -> u16 { if(modrm.mod == 3) return *RW[modrm.mem]; return read(modrm.segment, modrm.address + offset); } template<> auto V30MZ::setMemory(u16 data) -> void { if(modrm.mod == 3) return (void)(*RB[modrm.mem] = data); return write(modrm.segment, modrm.address, data); } template<> auto V30MZ::setMemory(u16 data) -> void { if(modrm.mod == 3) return (void)(*RW[modrm.mem] = data); return write(modrm.segment, modrm.address, data); } ares-126/ares/component/processor/v30mz/prefetch.cpp000066400000000000000000000014051415063341600225570ustar00rootroot00000000000000auto V30MZ::wait(u32 clocks) -> void { while(clocks--) prefetch(); } auto V30MZ::loop() -> void { queue pf; pf.write(opcode); while(!PF.empty()) { if(pf.full()) { PFP--; break; } pf.write(PF.read(0)); } PF = pf; } auto V30MZ::flush() -> void { PF.flush(); PFP = PC; if(PFP & 1) step(1); } auto V30MZ::prefetch() -> void { step(1); switch(PFP & 1) { case 0: if(PF.full()) break; PF.write(read(PS * 16 + PFP++)); //fallthrough case 1: if(PF.full()) break; PF.write(read(PS * 16 + PFP++)); } } template<> auto V30MZ::fetch() -> u16 { PC++; if(PF.empty()) prefetch(); return PF.read(0); } template<> auto V30MZ::fetch() -> u16 { u8 lo = fetch(); u8 hi = fetch(); return lo << 0 | hi << 8; } ares-126/ares/component/processor/v30mz/registers.cpp000066400000000000000000000016531415063341600227730ustar00rootroot00000000000000auto V30MZ::repeat() -> u8 { for(auto prefix : prefixes) { if(prefix == RepeatWhileZeroLo) return prefix; if(prefix == RepeatWhileZeroHi) return prefix; } return 0; } auto V30MZ::segment(u16 segment) -> u16 { for(auto prefix : prefixes) { if(prefix == SegmentOverrideDS1) return DS1; if(prefix == SegmentOverridePS ) return PS; if(prefix == SegmentOverrideSS ) return SS; if(prefix == SegmentOverrideDS0) return DS0; } return segment; } template<> auto V30MZ::getAccumulator() -> u32 { return AL; } template<> auto V30MZ::getAccumulator() -> u32 { return AW; } template<> auto V30MZ::getAccumulator() -> u32 { return AW | DW << 16; } template<> auto V30MZ::setAccumulator(u32 data) -> void { AL = data; } template<> auto V30MZ::setAccumulator(u32 data) -> void { AW = data; } template<> auto V30MZ::setAccumulator(u32 data) -> void { AW = data; DW = data >> 16; } ares-126/ares/component/processor/v30mz/serialization.cpp000066400000000000000000000005661415063341600236430ustar00rootroot00000000000000auto V30MZ::serialize(serializer& s) -> void { s(state.halt); s(state.poll); s(state.prefix); s(opcode); s(prefixes); s(modrm.mod); s(modrm.reg); s(modrm.mem); s(modrm.segment); s(modrm.address); s(AW); s(CW); s(DW); s(BW); s(SP); s(BP); s(IX); s(IY); s(DS1); s(PS); s(SS); s(DS0); s(PC); s(PFP); s(PF); s(PSW.data); } ares-126/ares/component/processor/v30mz/v30mz.cpp000066400000000000000000000021351415063341600217370ustar00rootroot00000000000000#include #include "v30mz.hpp" namespace ares { enum : u32 { Byte = 1, Word = 2, Long = 4 }; #include "registers.cpp" #include "memory.cpp" #include "prefetch.cpp" #include "modrm.cpp" #include "algorithms.cpp" #include "instruction.cpp" #include "instructions-adjust.cpp" #include "instructions-alu.cpp" #include "instructions-exec.cpp" #include "instructions-flag.cpp" #include "instructions-group.cpp" #include "instructions-misc.cpp" #include "instructions-move.cpp" #include "instructions-string.cpp" #include "serialization.cpp" auto V30MZ::power() -> void { static constexpr u16 Undefined = 0x0000; state.halt = 0; state.poll = 1; state.prefix = 0; opcode = 0; prefixes.flush(); modrm.mod = 0; modrm.reg = 0; modrm.mem = 0; modrm.segment = 0; modrm.address = 0; AW = Undefined; CW = Undefined; DW = Undefined; BW = Undefined; SP = Undefined; BP = Undefined; IX = Undefined; IY = Undefined; DS1 = 0x0000; PS = 0xffff; SS = 0x0000; DS0 = 0x0000; PC = 0x0000; PSW = 0x8000; flush(); } #undef bits #include "disassembler.cpp" } ares-126/ares/component/processor/v30mz/v30mz.hpp000066400000000000000000000265341415063341600217550ustar00rootroot00000000000000//NEC V30MZ (reduced functionality NEC V30 for embedded use) //V30 missing instructions: // 0f 10,11,18,19 test1 // 0f 12,13,1a,1b clr1 // 0f 14,15,1c,1d set1 // 0f 16,17,1e,1f not1 // 0f 20 add4s // 0f 22 sub4s // 0f 26 cmp4s // 0f 28 rol4 // 0f 2a ror4 // 0f 31,39 ins // 0f 33,3b ext // 0f ff brkem (8080 emulation mode) [retem, calln] // 64 repnc // 65 repc // 66,67 fpo2 // d8-df fpo1 //x86 variant instructions: // 8f c0-c7 pop reg [CPU bug: pops from stack; fails to set register] // d4 xx aam [ignores the immediate; always uses (base) 10] // d5 xx aad [ignores the immediate; always uses (base) 10] // d6 xlat (mirror of d7) [this is salc on x86 CPUs] // f1 ??? [this is int 0x1 on x86 CPUs; said to be a two-byte NOP on V20; unknown on V30/V30MZ] // ff f8-ff push (mirror of ff f0-f7) //x86 unemulated variation: // after interrupts, NEC V20/V30 CPUs resume string instructions with prefixes intact. unlike x86 CPUs // I need more information on this behavior in order to emulate it ... // also, the opcode f1 behavior is not currently known //V30 opcode prefix functionality: // there is a seven-level stack for opcode prefixes. once full, older prefixes are pushed off the stack //other notes: // 0f pop cs (not nop) [on the V20; the V30 uses this for instruction extensions; unsure on the V30MZ] // 8e xx mov cs,modRM (works as expected; able to set CS) //I currently emulate opcode 0f as pop cs, although it's unknown if that is correct. #pragma once namespace ares { struct V30MZ { enum : u32 { Byte = 1, Word = 2, Long = 4 }; enum : u32 { SegmentOverrideDS1 = 0x26, //ES: SegmentOverridePS = 0x2e, //CS: SegmentOverrideSS = 0x36, //SS: SegmentOverrideDS0 = 0x3e, //DS: Lock = 0xf0, //LOCK: RepeatWhileZeroLo = 0xf2, //REPNZ: RepeatWhileZeroHi = 0xf3, //REPZ: }; virtual auto step(u32 clocks = 1) -> void = 0; virtual auto read(n20 address) -> n8 = 0; virtual auto write(n20 address, n8 data) -> void = 0; virtual auto in(n16 port) -> n8 = 0; virtual auto out(n16 port, n8 data) -> void = 0; //v30mz.cpp auto power() -> void; //instruction.cpp auto interrupt(u8 vector) -> void; auto instruction() -> void; //registers.cpp auto repeat() -> u8; auto segment(u16) -> u16; template auto getAccumulator() -> u32; template auto setAccumulator(u32) -> void; //modrm.cpp auto modRM() -> void; auto getSegment() -> u16; auto setSegment(u16) -> void; template auto getRegister() -> u16; template auto setRegister(u16) -> void; template auto getMemory(u32 offset = 0) -> u16; template auto setMemory(u16) -> void; //memory.cpp template auto read(u16 segment, u16 address) -> u32; template auto write(u16 segment, u16 address, u16 data) -> void; template auto in(u16 address) -> u16; template auto out(u16 address, u16 data) -> void; auto pop() -> u16; auto push(u16) -> void; //prefetch.cpp auto wait(u32 clocks) -> void; auto loop() -> void; auto flush() -> void; auto prefetch() -> void; template auto fetch() -> u16; //algorithms.cpp auto parity(u8) const -> bool; template auto ADC (u16, u16) -> u16; template auto ADD (u16, u16) -> u16; template auto AND (u16, u16) -> u16; template auto DEC (u16 ) -> u16; template auto DIVI(s32, s32) -> u32; template auto DIVU(u32, u32) -> u32; template auto INC (u16 ) -> u16; template auto MULI(s16, s16) -> u32; template auto MULU(u16, u16) -> u32; template auto NEG (u16 ) -> u16; template auto NOT (u16 ) -> u16; template auto OR (u16, u16) -> u16; template auto RCL (u16, u5 ) -> u16; template auto RCR (u16, u5 ) -> u16; template auto ROL (u16, u4 ) -> u16; template auto ROR (u16, u4 ) -> u16; template auto SAL (u16, u5 ) -> u16; template auto SAR (u16, u5 ) -> u16; template auto SBB (u16, u16) -> u16; template auto SUB (u16, u16) -> u16; template auto SHL (u16, u5 ) -> u16; template auto SHR (u16, u5 ) -> u16; template auto XOR (u16, u16) -> u16; //instructions-adjust.cpp auto instructionDecimalAdjust(bool) -> void; auto instructionAsciiAdjust(bool) -> void; auto instructionAdjustAfterMultiply() -> void; auto instructionAdjustAfterDivide() -> void; //instructions-alu.cpp template auto instructionAddMemReg() -> void; template auto instructionAddRegMem() -> void; template auto instructionAddAccImm() -> void; template auto instructionOrMemReg() -> void; template auto instructionOrRegMem() -> void; template auto instructionOrAccImm() -> void; template auto instructionAdcMemReg() -> void; template auto instructionAdcRegMem() -> void; template auto instructionAdcAccImm() -> void; template auto instructionSbbMemReg() -> void; template auto instructionSbbRegMem() -> void; template auto instructionSbbAccImm() -> void; template auto instructionAndMemReg() -> void; template auto instructionAndRegMem() -> void; template auto instructionAndAccImm() -> void; template auto instructionSubMemReg() -> void; template auto instructionSubRegMem() -> void; template auto instructionSubAccImm() -> void; template auto instructionXorMemReg() -> void; template auto instructionXorRegMem() -> void; template auto instructionXorAccImm() -> void; template auto instructionCmpMemReg() -> void; template auto instructionCmpRegMem() -> void; template auto instructionCmpAccImm() -> void; template auto instructionTestMemReg() -> void; template auto instructionTestAcc() -> void; template auto instructionMultiplySignedRegMemImm() -> void; auto instructionIncReg(u16&) -> void; auto instructionDecReg(u16&) -> void; auto instructionSignExtendByte() -> void; auto instructionSignExtendWord() -> void; //instructions-exec.cpp auto instructionLoop() -> void; auto instructionLoopWhile(bool) -> void; auto instructionJumpShort() -> void; auto instructionJumpIf(bool) -> void; auto instructionJumpNear() -> void; auto instructionJumpFar() -> void; auto instructionCallNear() -> void; auto instructionCallFar() -> void; auto instructionReturn() -> void; auto instructionReturnImm() -> void; auto instructionReturnFar() -> void; auto instructionReturnFarImm() -> void; auto instructionReturnInt() -> void; auto instructionInt3() -> void; auto instructionIntImm() -> void; auto instructionInto() -> void; auto instructionEnter() -> void; auto instructionLeave() -> void; auto instructionPushReg(u16&) -> void; auto instructionPushSeg(u16&) -> void; auto instructionPopReg(u16&) -> void; auto instructionPopSeg(u16&) -> void; auto instructionPushFlags() -> void; auto instructionPopFlags() -> void; auto instructionPushAll() -> void; auto instructionPopAll() -> void; template auto instructionPushImm() -> void; auto instructionPopMem() -> void; //instructions-flag.cpp auto instructionStoreFlagsAcc() -> void; auto instructionLoadAccFlags() -> void; auto instructionComplementCarry() -> void; auto instructionClearFlag(u32) -> void; auto instructionSetFlag(u32) -> void; //instructions-group.cpp template auto instructionGroup1MemImm(bool) -> void; template auto instructionGroup2MemImm(u8, maybe = {}) -> void; template auto instructionGroup3MemImm() -> void; template auto instructionGroup4MemImm() -> void; //instructions-misc.cpp auto instructionSegment(n16) -> void; auto instructionRepeat() -> void; auto instructionLock() -> void; auto instructionWait() -> void; auto instructionHalt() -> void; auto instructionNop() -> void; template auto instructionIn() -> void; template auto instructionOut() -> void; template auto instructionInDW() -> void; template auto instructionOutDW() -> void; auto instructionTranslate(u8) -> void; auto instructionBound() -> void; //instructions-move.cpp template auto instructionMoveMemReg() -> void; template auto instructionMoveRegMem() -> void; auto instructionMoveMemSeg() -> void; auto instructionMoveSegMem() -> void; template auto instructionMoveAccMem() -> void; template auto instructionMoveMemAcc() -> void; auto instructionMoveRegImm(u8&) -> void; auto instructionMoveRegImm(u16&) -> void; template auto instructionMoveMemImm() -> void; auto instructionExchange(u16&, u16&) -> void; template auto instructionExchangeMemReg() -> void; auto instructionLoadEffectiveAddressRegMem() -> void; auto instructionLoadSegmentMem(u16&) -> void; //instructions-string.cpp template auto instructionInString() -> void; template auto instructionOutString() -> void; template auto instructionMoveString() -> void; template auto instructionCompareString() -> void; template auto instructionStoreString() -> void; template auto instructionLoadString() -> void; template auto instructionScanString() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp auto disassembleInstruction(u16 ps, u16 pc) -> string; auto disassembleInstruction() -> string; auto disassembleContext() -> string; struct State { bool halt; //set to true for hlt instruction; blocks execution until next interrupt bool poll; //set to false to suppress interrupt polling between CPU instructions bool prefix; //set to true for prefix instructions; prevents flushing of Prefix struct } state; u8 opcode; queue prefixes; struct ModRM { u2 mod; u3 reg; u3 mem; u16 segment; u16 address; } modrm; union { u16 AW; struct { u8 order_lsb2(AL, AH); }; }; //AX union { u16 CW; struct { u8 order_lsb2(CL, CH); }; }; //CX union { u16 DW; struct { u8 order_lsb2(DL, DH); }; }; //DX union { u16 BW; struct { u8 order_lsb2(BL, BH); }; }; //BX u16 SP; //SP u16 BP; //BP u16 IX; //SI u16 IY; //DI u16 DS1; //ES u16 PS; //CS u16 SS; //SS u16 DS0; //DS u16 PC; //IP u16 PFP; //prefetch pointer queue PF; //prefetch queue struct ProgramStatusWord { u16 data; BitField<16, 0> CY {&data}; //carry BitField<16, 2> P {&data}; //parity BitField<16, 4> AC {&data}; //auxiliary carry BitField<16, 6> Z {&data}; //zero BitField<16, 7> S {&data}; //sign BitField<16, 8> BRK{&data}; //break BitField<16, 9> IE {&data}; //interrupt enable BitField<16,10> DIR{&data}; //direction BitField<16,11> V {&data}; //overflow BitField<16,15> MD {&data}; //mode (unused, for V30HL compatibility only) operator u16() const { return data & 0x8fd5 | 0x7002; } auto& operator =(u16 value) { return data = value, *this; } auto& operator&=(u16 value) { return data &= value, *this; } auto& operator^=(u16 value) { return data ^= value, *this; } auto& operator|=(u16 value) { return data |= value, *this; } } PSW; u8* const RB[8]{&AL, &CL, &DL, &BL, &AH, &CH, &DH, &BH }; u16* const RW[8]{&AW, &CW, &DW, &BW, &SP, &BP, &IX, &IY }; u16* const RS[8]{&DS1, &PS, &SS, &DS0, &DS1, &PS, &SS, &DS0}; }; } ares-126/ares/component/processor/wdc65816/000077500000000000000000000000001415063341600204635ustar00rootroot00000000000000ares-126/ares/component/processor/wdc65816/algorithms.cpp000066400000000000000000000164031415063341600233440ustar00rootroot00000000000000auto WDC65816::algorithmADC8(n8 data) -> n8 { s32 result; if(!DF) { result = A.l + data + CF; } else { result = (A.l & 0x0f) + (data & 0x0f) + (CF << 0); if(result > 0x09) result += 0x06; CF = result > 0x0f; result = (A.l & 0xf0) + (data & 0xf0) + (CF << 4) + (result & 0x0f); } VF = ~(A.l ^ data) & (A.l ^ result) & 0x80; if(DF && result > 0x9f) result += 0x60; CF = result > 0xff; ZF = (n8)result == 0; NF = result & 0x80; return A.l = result; } auto WDC65816::algorithmADC16(n16 data) -> n16 { s32 result; if(!DF) { result = A.w + data + CF; } else { result = (A.w & 0x000f) + (data & 0x000f) + (CF << 0); if(result > 0x0009) result += 0x0006; CF = result > 0x000f; result = (A.w & 0x00f0) + (data & 0x00f0) + (CF << 4) + (result & 0x000f); if(result > 0x009f) result += 0x0060; CF = result > 0x00ff; result = (A.w & 0x0f00) + (data & 0x0f00) + (CF << 8) + (result & 0x00ff); if(result > 0x09ff) result += 0x0600; CF = result > 0x0fff; result = (A.w & 0xf000) + (data & 0xf000) + (CF << 12) + (result & 0x0fff); } VF = ~(A.w ^ data) & (A.w ^ result) & 0x8000; if(DF && result > 0x9fff) result += 0x6000; CF = result > 0xffff; ZF = (n16)result == 0; NF = result & 0x8000; return A.w = result; } auto WDC65816::algorithmAND8(n8 data) -> n8 { A.l &= data; ZF = A.l == 0; NF = A.l & 0x80; return A.l; } auto WDC65816::algorithmAND16(n16 data) -> n16 { A.w &= data; ZF = A.w == 0; NF = A.w & 0x8000; return A.w; } auto WDC65816::algorithmASL8(n8 data) -> n8 { CF = data & 0x80; data <<= 1; ZF = data == 0; NF = data & 0x80; return data; } auto WDC65816::algorithmASL16(n16 data) -> n16 { CF = data & 0x8000; data <<= 1; ZF = data == 0; NF = data & 0x8000; return data; } auto WDC65816::algorithmBIT8(n8 data) -> n8 { ZF = (data & A.l) == 0; VF = data & 0x40; NF = data & 0x80; return data; } auto WDC65816::algorithmBIT16(n16 data) -> n16 { ZF = (data & A.w) == 0; VF = data & 0x4000; NF = data & 0x8000; return data; } auto WDC65816::algorithmCMP8(n8 data) -> n8 { s32 result = A.l - data; CF = result >= 0; ZF = (n8)result == 0; NF = result & 0x80; return result; } auto WDC65816::algorithmCMP16(n16 data) -> n16 { s32 result = A.w - data; CF = result >= 0; ZF = (n16)result == 0; NF = result & 0x8000; return result; } auto WDC65816::algorithmCPX8(n8 data) -> n8 { s32 result = X.l - data; CF = result >= 0; ZF = (n8)result == 0; NF = result & 0x80; return result; } auto WDC65816::algorithmCPX16(n16 data) -> n16 { s32 result = X.w - data; CF = result >= 0; ZF = (n16)result == 0; NF = result & 0x8000; return result; } auto WDC65816::algorithmCPY8(n8 data) -> n8 { s32 result = Y.l - data; CF = result >= 0; ZF = (n8)result == 0; NF = result & 0x80; return result; } auto WDC65816::algorithmCPY16(n16 data) -> n16 { s32 result = Y.w - data; CF = result >= 0; ZF = (n16)result == 0; NF = result & 0x8000; return result; } auto WDC65816::algorithmDEC8(n8 data) -> n8 { data--; ZF = data == 0; NF = data & 0x80; return data; } auto WDC65816::algorithmDEC16(n16 data) -> n16 { data--; ZF = data == 0; NF = data & 0x8000; return data; } auto WDC65816::algorithmEOR8(n8 data) -> n8 { A.l ^= data; ZF = A.l == 0; NF = A.l & 0x80; return A.l; } auto WDC65816::algorithmEOR16(n16 data) -> n16 { A.w ^= data; ZF = A.w == 0; NF = A.w & 0x8000; return A.w; } auto WDC65816::algorithmINC8(n8 data) -> n8 { data++; ZF = data == 0; NF = data & 0x80; return data; } auto WDC65816::algorithmINC16(n16 data) -> n16 { data++; ZF = data == 0; NF = data & 0x8000; return data; } auto WDC65816::algorithmLDA8(n8 data) -> n8 { A.l = data; ZF = A.l == 0; NF = A.l & 0x80; return data; } auto WDC65816::algorithmLDA16(n16 data) -> n16 { A.w = data; ZF = A.w == 0; NF = A.w & 0x8000; return data; } auto WDC65816::algorithmLDX8(n8 data) -> n8 { X.l = data; ZF = X.l == 0; NF = X.l & 0x80; return data; } auto WDC65816::algorithmLDX16(n16 data) -> n16 { X.w = data; ZF = X.w == 0; NF = X.w & 0x8000; return data; } auto WDC65816::algorithmLDY8(n8 data) -> n8 { Y.l = data; ZF = Y.l == 0; NF = Y.l & 0x80; return data; } auto WDC65816::algorithmLDY16(n16 data) -> n16 { Y.w = data; ZF = Y.w == 0; NF = Y.w & 0x8000; return data; } auto WDC65816::algorithmLSR8(n8 data) -> n8 { CF = data & 1; data >>= 1; ZF = data == 0; NF = data & 0x80; return data; } auto WDC65816::algorithmLSR16(n16 data) -> n16 { CF = data & 1; data >>= 1; ZF = data == 0; NF = data & 0x8000; return data; } auto WDC65816::algorithmORA8(n8 data) -> n8 { A.l |= data; ZF = A.l == 0; NF = A.l & 0x80; return A.l; } auto WDC65816::algorithmORA16(n16 data) -> n16 { A.w |= data; ZF = A.w == 0; NF = A.w & 0x8000; return A.w; } auto WDC65816::algorithmROL8(n8 data) -> n8 { bool carry = CF; CF = data & 0x80; data = data << 1 | carry; ZF = data == 0; NF = data & 0x80; return data; } auto WDC65816::algorithmROL16(n16 data) -> n16 { bool carry = CF; CF = data & 0x8000; data = data << 1 | carry; ZF = data == 0; NF = data & 0x8000; return data; } auto WDC65816::algorithmROR8(n8 data) -> n8 { bool carry = CF; CF = data & 1; data = carry << 7 | data >> 1; ZF = data == 0; NF = data & 0x80; return data; } auto WDC65816::algorithmROR16(n16 data) -> n16 { bool carry = CF; CF = data & 1; data = carry << 15 | data >> 1; ZF = data == 0; NF = data & 0x8000; return data; } auto WDC65816::algorithmSBC8(n8 data) -> n8 { s32 result; data = ~data; if(!DF) { result = A.l + data + CF; } else { result = (A.l & 0x0f) + (data & 0x0f) + (CF << 0); if(result <= 0x0f) result -= 0x06; CF = result > 0x0f; result = (A.l & 0xf0) + (data & 0xf0) + (CF << 4) + (result & 0x0f); } VF = ~(A.l ^ data) & (A.l ^ result) & 0x80; if(DF && result <= 0xff) result -= 0x60; CF = result > 0xff; ZF = (n8)result == 0; NF = result & 0x80; return A.l = result; } auto WDC65816::algorithmSBC16(n16 data) -> n16 { s32 result; data = ~data; if(!DF) { result = A.w + data + CF; } else { result = (A.w & 0x000f) + (data & 0x000f) + (CF << 0); if(result <= 0x000f) result -= 0x0006; CF = result > 0x000f; result = (A.w & 0x00f0) + (data & 0x00f0) + (CF << 4) + (result & 0x000f); if(result <= 0x00ff) result -= 0x0060; CF = result > 0x00ff; result = (A.w & 0x0f00) + (data & 0x0f00) + (CF << 8) + (result & 0x00ff); if(result <= 0x0fff) result -= 0x0600; CF = result > 0x0fff; result = (A.w & 0xf000) + (data & 0xf000) + (CF << 12) + (result & 0x0fff); } VF = ~(A.w ^ data) & (A.w ^ result) & 0x8000; if(DF && result <= 0xffff) result -= 0x6000; CF = result > 0xffff; ZF = (n16)result == 0; NF = result & 0x8000; return A.w = result; } auto WDC65816::algorithmTRB8(n8 data) -> n8 { ZF = (data & A.l) == 0; data &= ~A.l; return data; } auto WDC65816::algorithmTRB16(n16 data) -> n16 { ZF = (data & A.w) == 0; data &= ~A.w; return data; } auto WDC65816::algorithmTSB8(n8 data) -> n8 { ZF = (data & A.l) == 0; data |= A.l; return data; } auto WDC65816::algorithmTSB16(n16 data) -> n16 { ZF = (data & A.w) == 0; data |= A.w; return data; } ares-126/ares/component/processor/wdc65816/disassembler.cpp000066400000000000000000000325121415063341600236470ustar00rootroot00000000000000auto WDC65816::disassembleInstruction(n24 address, bool e, bool m, bool x) -> string { string s; n24 pc = address; string name; string operand; maybe effective; auto read = [&](n24 address) -> n8 { //$00-3f,80-bf:2000-5fff: do not attempt to read I/O registers from the disassembler: //this is because such reads are much more likely to have side effects to emulation. if((address & 0x40ffff) >= 0x2000 && (address & 0x40ffff) <= 0x5fff) return 0x00; return readDisassembler(address); }; auto readByte = [&](n24 address) -> n8 { return read(address); }; auto readWord = [&](n24 address) -> n16 { n16 data = readByte(address + 0) << 0; return data | readByte(address + 1) << 8; }; auto readLong = [&](n24 address) -> n24 { n24 data = readByte(address + 0) << 0; return data | readWord(address + 1) << 8; }; auto opcode = read(address); address.bit(0,15)++; auto operand0 = read(address); address.bit(0,15)++; auto operand1 = read(address); address.bit(0,15)++; auto operand2 = read(address); address.bit(0,15)++; n8 operandByte = operand0 << 0; n16 operandWord = operand0 << 0 | operand1 << 8; n24 operandLong = operand0 << 0 | operand1 << 8 | operand2 << 16; auto absolute = [&]() -> string { effective = r.b << 16 | operandWord; return {"$", hex(operandWord, 4L)}; }; auto absolutePC = [&]() -> string { effective = pc.mask(16,23) | operandWord; return {"$", hex(operandWord, 4L)}; }; auto absoluteX = [&]() -> string { effective = (r.b << 16) + operandWord + r.x.w; return {"$", hex(operandWord, 4L), ",x"}; }; auto absoluteY = [&]() -> string { effective = (r.b << 16) + operandWord + r.y.w; return {"$", hex(operandWord, 4L), ",y"}; }; auto absoluteLong = [&]() -> string { effective = operandLong; return {"$", hex(operandLong, 6L)}; }; auto absoluteLongX = [&]() -> string { effective = operandLong + r.x.w; return {"$", hex(operandLong, 6L), ",x"}; }; auto direct = [&]() -> string { effective = n16(r.d.w + operandByte); return {"$", hex(operandByte, 2L)}; }; auto directX = [&]() -> string { effective = n16(r.d.w + operandByte + r.x.w); return {"$", hex(operandByte, 2L), ",x"}; }; auto directY = [&]() -> string { effective = n16(r.d.w + operandByte + r.y.w); return {"$", hex(operandByte, 2L), ",y"}; }; auto immediate = [&]() -> string { return {"#$", hex(operandByte, 2L)}; }; auto immediateA = [&]() -> string { return {"#$", m ? hex(operandByte, 2L) : hex(operandWord, 4L)}; }; auto immediateX = [&]() -> string { return {"#$", x ? hex(operandByte, 2L) : hex(operandWord, 4L)}; }; auto implied = [&]() -> string { return {}; }; auto indexedIndirectX = [&]() -> string { effective = n16(r.d.w + operandByte + r.x.w); effective = r.b << 16 | readWord(*effective); return {"($", hex(operandByte, 2L), ",x)"}; }; auto indirect = [&]() -> string { effective = n16(r.d.w + operandByte); effective = (r.b << 16) + readWord(*effective); return {"($", hex(operandByte, 2L), ")"}; }; auto indirectPC = [&]() -> string { effective = operandWord; effective = pc.mask(16,23) | readWord(*effective); return {"($", hex(operandWord, 4L), ")"}; }; auto indirectX = [&]() -> string { effective = operandWord; effective = pc.mask(16,23) | n16(*effective + r.x.w); effective = pc.mask(16,23) | readWord(*effective); return {"($", hex(operandWord, 4L), ",x)"}; }; auto indirectIndexedY = [&]() -> string { effective = n16(r.d.w + operandByte); effective = (r.b << 16) + readWord(*effective) + r.y.w; return {"($", hex(operandByte, 2L), "),y"}; }; auto indirectLong = [&]() -> string { effective = n16(r.d.w + operandByte); effective = readLong(*effective); return {"[$", hex(operandByte, 2L), "]"}; }; auto indirectLongPC = [&]() -> string { effective = readLong(operandWord); return {"[$", hex(operandWord, 4L), "]"}; }; auto indirectLongY = [&]() -> string { effective = n16(r.d.w + operandByte); effective = readLong(*effective) + r.y.w; return {"[$", hex(operandByte, 2L), "],y"}; }; auto move = [&]() -> string { return {"$", hex(operand0, 2L), "=$", hex(operand1, 2L)}; }; auto relative = [&]() -> string { effective = pc.mask(16,23) | n16(pc + 2 + (i8)operandByte); return {"$", hex(*effective, 4L)}; }; auto relativeWord = [&]() -> string { effective = pc.mask(16,23) | n16(pc + 3 + (i16)operandWord); return {"$", hex(*effective, 4L)}; }; auto stack = [&]() -> string { effective = n16(r.s.w + operandByte); return {"$", hex(operandByte, 2L), ",s"}; }; auto stackIndirect = [&]() -> string { effective = n16(operandByte + r.s.w); effective = (r.b << 16) + readWord(*effective) + r.y.w; return {"($", hex(operandByte, 2L), ",s),y"}; }; #define op(id, label, function) case id: name = label; operand = function(); break; switch(opcode) { op(0x00, "brk", immediate) op(0x01, "ora", indexedIndirectX) op(0x02, "cop", immediate) op(0x03, "ora", stack) op(0x04, "tsb", direct) op(0x05, "ora", direct) op(0x06, "asl", direct) op(0x07, "ora", indirectLong) op(0x08, "php", implied) op(0x09, "ora", immediateA) op(0x0a, "asl", implied) op(0x0b, "phd", implied) op(0x0c, "tsb", absolute) op(0x0d, "ora", absolute) op(0x0e, "asl", absolute) op(0x0f, "ora", absoluteLong) op(0x10, "bpl", relative) op(0x11, "ora", indirectIndexedY) op(0x12, "ora", indirect) op(0x13, "ora", stackIndirect) op(0x14, "trb", direct) op(0x15, "ora", directX) op(0x16, "asl", directX) op(0x17, "ora", indirectLongY) op(0x18, "clc", implied) op(0x19, "ora", absoluteY) op(0x1a, "inc", implied) op(0x1b, "tas", implied) op(0x1c, "trb", absolute) op(0x1d, "ora", absoluteX) op(0x1e, "asl", absoluteX) op(0x1f, "ora", absoluteLongX) op(0x20, "jsr", absolutePC) op(0x21, "and", indexedIndirectX) op(0x22, "jsl", absoluteLong) op(0x23, "and", stack) op(0x24, "bit", direct) op(0x25, "and", direct) op(0x26, "rol", direct) op(0x27, "and", indirectLong) op(0x28, "plp", implied) op(0x29, "and", immediateA) op(0x2a, "rol", implied) op(0x2b, "pld", implied) op(0x2c, "bit", absolute) op(0x2d, "and", absolute) op(0x2e, "rol", absolute) op(0x2f, "and", absoluteLong) op(0x30, "bmi", relative) op(0x31, "and", indirectIndexedY) op(0x32, "and", indirect) op(0x33, "and", stackIndirect) op(0x34, "bit", directX) op(0x35, "and", directX) op(0x36, "rol", directX) op(0x37, "and", indirectLongY) op(0x38, "sec", implied) op(0x39, "and", absoluteY) op(0x3a, "dec", implied) op(0x3b, "tsa", implied) op(0x3c, "bit", absoluteX) op(0x3d, "and", absoluteX) op(0x3e, "rol", absoluteX) op(0x3f, "and", absoluteLongX) op(0x40, "rti", implied) op(0x41, "eor", indexedIndirectX) op(0x42, "wdm", immediate) op(0x43, "eor", stack) op(0x44, "mvp", move) op(0x45, "eor", direct) op(0x46, "lsr", direct) op(0x47, "eor", indirectLong) op(0x48, "pha", implied) op(0x49, "eor", immediateA) op(0x4a, "lsr", implied) op(0x4b, "phk", implied) op(0x4c, "jmp", absolutePC) op(0x4d, "eor", absolute) op(0x4e, "lsr", absolute) op(0x4f, "eor", absoluteLong) op(0x50, "bvc", relative) op(0x51, "eor", indirectIndexedY) op(0x52, "eor", indirect) op(0x53, "eor", stackIndirect) op(0x54, "mvn", move) op(0x55, "eor", directX) op(0x56, "lsr", directX) op(0x57, "eor", indirectLongY) op(0x58, "cli", implied) op(0x59, "eor", absoluteY) op(0x5a, "phy", implied) op(0x5b, "tad", implied) op(0x5c, "jml", absoluteLong) op(0x5d, "eor", absoluteX) op(0x5e, "lsr", absoluteX) op(0x5f, "eor", absoluteLongX) op(0x60, "rts", implied) op(0x61, "adc", indexedIndirectX) op(0x62, "per", relativeWord) op(0x63, "adc", stack) op(0x64, "stz", direct) op(0x65, "adc", direct) op(0x66, "ror", direct) op(0x67, "adc", indirectLong) op(0x68, "pla", implied) op(0x69, "adc", immediateA) op(0x6a, "ror", implied) op(0x6b, "rtl", implied) op(0x6c, "jmp", indirectPC) op(0x6d, "adc", absolute) op(0x6e, "ror", absolute) op(0x6f, "adc", absoluteLong) op(0x70, "bvs", relative) op(0x71, "adc", indirectIndexedY) op(0x72, "adc", indirect) op(0x73, "adc", stackIndirect) op(0x74, "stz", absoluteX) op(0x75, "adc", absoluteX) op(0x76, "ror", absoluteX) op(0x77, "adc", indirectLongY) op(0x78, "sei", implied) op(0x79, "adc", absoluteY) op(0x7a, "ply", implied) op(0x7b, "tda", implied) op(0x7c, "jmp", indirectX) op(0x7d, "adc", absoluteX) op(0x7e, "ror", absoluteX) op(0x7f, "adc", absoluteLongX) op(0x80, "bra", relative) op(0x81, "sta", indexedIndirectX) op(0x82, "brl", relativeWord) op(0x83, "sta", stack) op(0x84, "sty", direct) op(0x85, "sta", direct) op(0x86, "stx", direct) op(0x87, "sta", indirectLong) op(0x88, "dey", implied) op(0x89, "bit", immediateA) op(0x8a, "txa", implied) op(0x8b, "phb", implied) op(0x8c, "sty", absolute) op(0x8d, "sta", absolute) op(0x8e, "stx", absolute) op(0x8f, "sta", absoluteLong) op(0x90, "bcc", relative) op(0x91, "sta", indirectIndexedY) op(0x92, "sta", indirect) op(0x93, "sta", stackIndirect) op(0x94, "sty", directX) op(0x95, "sta", directX) op(0x96, "stx", directY) op(0x97, "sta", indirectLongY) op(0x98, "tya", implied) op(0x99, "sta", absoluteY) op(0x9a, "txs", implied) op(0x9b, "txy", implied) op(0x9c, "stz", absolute) op(0x9d, "sta", absoluteX) op(0x9e, "stz", absoluteX) op(0x9f, "sta", absoluteLongX) op(0xa0, "ldy", immediateX) op(0xa1, "lda", indexedIndirectX) op(0xa2, "ldx", immediateX) op(0xa3, "lda", stack) op(0xa4, "ldy", direct) op(0xa5, "lda", direct) op(0xa6, "ldx", direct) op(0xa7, "lda", indirectLong) op(0xa8, "tay", implied) op(0xa9, "lda", immediateA) op(0xaa, "tax", implied) op(0xab, "plb", implied) op(0xac, "ldy", absolute) op(0xad, "lda", absolute) op(0xae, "ldx", absolute) op(0xaf, "lda", absoluteLong) op(0xb0, "bcs", relative) op(0xb1, "lda", indirectIndexedY) op(0xb2, "lda", indirect) op(0xb3, "lda", stackIndirect) op(0xb4, "ldy", directX) op(0xb5, "lda", directX) op(0xb6, "ldx", directY) op(0xb7, "lda", indirectLongY) op(0xb8, "clv", implied) op(0xb9, "lda", absoluteY) op(0xba, "tsx", implied) op(0xbb, "tyx", implied) op(0xbc, "ldy", absoluteX) op(0xbd, "lda", absoluteX) op(0xbe, "ldx", absoluteY) op(0xbf, "lda", absoluteLongX) op(0xc0, "cpy", immediateX) op(0xc1, "cmp", indexedIndirectX) op(0xc2, "rep", immediate) op(0xc3, "cmp", stack) op(0xc4, "cpy", direct) op(0xc5, "cmp", direct) op(0xc6, "dec", direct) op(0xc7, "cmp", indirectLong) op(0xc8, "iny", implied) op(0xc9, "cmp", immediateA) op(0xca, "dex", implied) op(0xcb, "wai", implied) op(0xcc, "cpy", absolute) op(0xcd, "cmp", absolute) op(0xce, "dec", absolute) op(0xcf, "cmp", absoluteLong) op(0xd0, "bne", relative) op(0xd1, "cmp", indirectIndexedY) op(0xd2, "cmp", indirect) op(0xd3, "cmp", stackIndirect) op(0xd4, "pei", indirect) op(0xd5, "cmp", directX) op(0xd6, "dec", directX) op(0xd7, "cmp", indirectLongY) op(0xd8, "cld", implied) op(0xd9, "cmp", absoluteY) op(0xda, "phx", implied) op(0xdb, "stp", implied) op(0xdc, "jmp", indirectLongPC) op(0xdd, "cmp", absoluteX) op(0xde, "dec", absoluteX) op(0xdf, "cmp", absoluteLongX) op(0xe0, "cpx", immediateX) op(0xe1, "sbc", indexedIndirectX) op(0xe2, "sep", immediate) op(0xe3, "sbc", stack) op(0xe4, "cpx", direct) op(0xe5, "sbc", direct) op(0xe6, "inc", direct) op(0xe7, "sbc", indirectLong) op(0xe8, "inx", implied) op(0xe9, "sbc", immediateA) op(0xea, "nop", implied) op(0xeb, "xba", implied) op(0xec, "cpx", absolute) op(0xed, "sbc", absolute) op(0xee, "inc", absolute) op(0xef, "sbc", absoluteLong) op(0xf0, "beq", relative) op(0xf1, "sbc", indirectIndexedY) op(0xf2, "sbc", indirect) op(0xf3, "sbc", stackIndirect) op(0xf4, "pea", absolute) op(0xf5, "sbc", directX) op(0xf6, "inc", directX) op(0xf7, "sbc", indirectLongY) op(0xf8, "sed", implied) op(0xf9, "sbc", absoluteY) op(0xfa, "plx", implied) op(0xfb, "xce", implied) op(0xfc, "jsr", indirectX) op(0xfd, "sbc", absoluteX) op(0xfe, "inc", absoluteX) op(0xff, "sbc", absoluteLongX) } #undef op s.append(name, " ", operand); while(s.size() < 23) s.append(" "); if(effective) s.append("[", hex(*effective, 6L), "]"); while(s.size() < 31) s.append(" "); return s; } auto WDC65816::disassembleInstruction() -> string { return disassembleInstruction(r.pc.d, r.e, r.p.m, r.p.x); } auto WDC65816::disassembleContext(maybe e) -> string { string s; s.append("A:", hex(r.a.w, 4L), " "); s.append("X:", hex(r.x.w, 4L), " "); s.append("Y:", hex(r.y.w, 4L), " "); s.append("S:", hex(r.s.w, 4L), " "); s.append("D:", hex(r.d.w, 4L), " "); s.append("B:", hex(r.b , 2L), " "); if(!e) e = r.e; if(*e) { s.append( r.p.n ? 'N' : 'n', r.p.v ? 'V' : 'v', r.p.m ? '1' : '0', r.p.x ? 'B' : 'b', r.p.d ? 'D' : 'd', r.p.i ? 'I' : 'i', r.p.z ? 'Z' : 'z', r.p.c ? 'C' : 'c' ); } else { s.append( r.p.n ? 'N' : 'n', r.p.v ? 'V' : 'v', r.p.m ? 'M' : 'm', r.p.x ? 'X' : 'x', r.p.d ? 'D' : 'd', r.p.i ? 'I' : 'i', r.p.z ? 'Z' : 'z', r.p.c ? 'C' : 'c' ); } return s; } ares-126/ares/component/processor/wdc65816/instruction.cpp000066400000000000000000000041331415063341600235510ustar00rootroot00000000000000auto WDC65816::interrupt() -> void { read(PC.d); idle(); N push(PC.b); push(PC.h); push(PC.l); push(EF ? P & ~0x10 : P); IF = 1; DF = 0; PC.l = read(r.vector + 0); L PC.h = read(r.vector + 1); PC.b = 0x00; idleJump(); } //both the accumulator and index registers can independently be in either 8-bit or 16-bit mode. //controlled via the M/X flags, this changes the execution details of various instructions. //rather than implement four instruction tables for all possible combinations of these bits, //instead use macro abuse to generate all four tables based off of a single template table. auto WDC65816::instruction() -> void { //a = instructions unaffected by M/X flags //m = instructions affected by M flag (1 = 8-bit; 0 = 16-bit) //x = instructions affected by X flag (1 = 8-bit; 0 = 16-bit) #define opA(id, name, ...) case id: return instruction##name(__VA_ARGS__); if(MF) { #define opM(id, name, ...) case id: return instruction##name##8(__VA_ARGS__); #define m(name) &WDC65816::algorithm##name##8 if(XF) { #define opX(id, name, ...) case id: return instruction##name##8(__VA_ARGS__); #define x(name) &WDC65816::algorithm##name##8 #include "instruction.hpp" #undef opX #undef x } else { #define opX(id, name, ...) case id: return instruction##name##16(__VA_ARGS__); #define x(name) &WDC65816::algorithm##name##16 #include "instruction.hpp" #undef opX #undef x } #undef opM #undef m } else { #define opM(id, name, ...) case id: return instruction##name##16(__VA_ARGS__); #define m(name) &WDC65816::algorithm##name##16 if(XF) { #define opX(id, name, ...) case id: return instruction##name##8(__VA_ARGS__); #define x(name) &WDC65816::algorithm##name##8 #include "instruction.hpp" #undef opX #undef x } else { #define opX(id, name, ...) case id: return instruction##name##16(__VA_ARGS__); #define x(name) &WDC65816::algorithm##name##16 #include "instruction.hpp" #undef opX #undef x } #undef opM #undef m } #undef opA } ares-126/ares/component/processor/wdc65816/instruction.hpp000066400000000000000000000202241415063341600235550ustar00rootroot00000000000000 switch(fetch()) { opA(0x00, Interrupt, EF ? (r16)0xfffe : (r16)0xffe6) //emulation mode lacks BRK vector; uses IRQ vector instead opM(0x01, IndexedIndirectRead, m(ORA)) opA(0x02, Interrupt, EF ? (r16)0xfff4 : (r16)0xffe4) opM(0x03, StackRead, m(ORA)) opM(0x04, DirectModify, m(TSB)) opM(0x05, DirectRead, m(ORA)) opM(0x06, DirectModify, m(ASL)) opM(0x07, IndirectLongRead, m(ORA)) opA(0x08, Push8, (r16)P) opM(0x09, ImmediateRead, m(ORA)) opM(0x0a, ImpliedModify, m(ASL), A) opA(0x0b, PushD) opM(0x0c, BankModify, m(TSB)) opM(0x0d, BankRead, m(ORA)) opM(0x0e, BankModify, m(ASL)) opM(0x0f, LongRead, m(ORA)) opA(0x10, Branch, NF == 0) opM(0x11, IndirectIndexedRead, m(ORA)) opM(0x12, IndirectRead, m(ORA)) opM(0x13, IndirectStackRead, m(ORA)) opM(0x14, DirectModify, m(TRB)) opM(0x15, DirectRead, m(ORA), X) opM(0x16, DirectIndexedModify, m(ASL)) opM(0x17, IndirectLongRead, m(ORA), Y) opA(0x18, ClearFlag, CF) opM(0x19, BankRead, m(ORA), Y) opM(0x1a, ImpliedModify, m(INC), A) opA(0x1b, TransferCS) opM(0x1c, BankModify, m(TRB)) opM(0x1d, BankRead, m(ORA), X) opM(0x1e, BankIndexedModify, m(ASL)) opM(0x1f, LongRead, m(ORA), X) opA(0x20, CallShort) opM(0x21, IndexedIndirectRead, m(AND)) opA(0x22, CallLong) opM(0x23, StackRead, m(AND)) opM(0x24, DirectRead, m(BIT)) opM(0x25, DirectRead, m(AND)) opM(0x26, DirectModify, m(ROL)) opM(0x27, IndirectLongRead, m(AND)) opA(0x28, PullP) opM(0x29, ImmediateRead, m(AND)) opM(0x2a, ImpliedModify, m(ROL), A) opA(0x2b, PullD) opM(0x2c, BankRead, m(BIT)) opM(0x2d, BankRead, m(AND)) opM(0x2e, BankModify, m(ROL)) opM(0x2f, LongRead, m(AND)) opA(0x30, Branch, NF == 1) opM(0x31, IndirectIndexedRead, m(AND)) opM(0x32, IndirectRead, m(AND)) opM(0x33, IndirectStackRead, m(AND)) opM(0x34, DirectRead, m(BIT), X) opM(0x35, DirectRead, m(AND), X) opM(0x36, DirectIndexedModify, m(ROL)) opM(0x37, IndirectLongRead, m(AND), Y) opA(0x38, SetFlag, CF) opM(0x39, BankRead, m(AND), Y) opM(0x3a, ImpliedModify, m(DEC), A) opA(0x3b, Transfer16, S, A) opM(0x3c, BankRead, m(BIT), X) opM(0x3d, BankRead, m(AND), X) opM(0x3e, BankIndexedModify, m(ROL)) opM(0x3f, LongRead, m(AND), X) opA(0x40, ReturnInterrupt) opM(0x41, IndexedIndirectRead, m(EOR)) opA(0x42, Prefix) opM(0x43, StackRead, m(EOR)) opX(0x44, BlockMove, -1) opM(0x45, DirectRead, m(EOR)) opM(0x46, DirectModify, m(LSR)) opM(0x47, IndirectLongRead, m(EOR)) opM(0x48, Push, A) opM(0x49, ImmediateRead, m(EOR)) opM(0x4a, ImpliedModify, m(LSR), A) opA(0x4b, Push8, (r16)PC.b) opA(0x4c, JumpShort) opM(0x4d, BankRead, m(EOR)) opM(0x4e, BankModify, m(LSR)) opM(0x4f, LongRead, m(EOR)) opA(0x50, Branch, VF == 0) opM(0x51, IndirectIndexedRead, m(EOR)) opM(0x52, IndirectRead, m(EOR)) opM(0x53, IndirectStackRead, m(EOR)) opX(0x54, BlockMove, +1) opM(0x55, DirectRead, m(EOR), X) opM(0x56, DirectIndexedModify, m(LSR)) opM(0x57, IndirectLongRead, m(EOR), Y) opA(0x58, ClearFlag, IF) opM(0x59, BankRead, m(EOR), Y) opX(0x5a, Push, Y) opA(0x5b, Transfer16, A, D) opA(0x5c, JumpLong) opM(0x5d, BankRead, m(EOR), X) opM(0x5e, BankIndexedModify, m(LSR)) opM(0x5f, LongRead, m(EOR), X) opA(0x60, ReturnShort) opM(0x61, IndexedIndirectRead, m(ADC)) opA(0x62, PushEffectiveRelativeAddress) opM(0x63, StackRead, m(ADC)) opM(0x64, DirectWrite, Z) opM(0x65, DirectRead, m(ADC)) opM(0x66, DirectModify, m(ROR)) opM(0x67, IndirectLongRead, m(ADC)) opM(0x68, Pull, A) opM(0x69, ImmediateRead, m(ADC)) opM(0x6a, ImpliedModify, m(ROR), A) opA(0x6b, ReturnLong) opA(0x6c, JumpIndirect) opM(0x6d, BankRead, m(ADC)) opM(0x6e, BankModify, m(ROR)) opM(0x6f, LongRead, m(ADC)) opA(0x70, Branch, VF == 1) opM(0x71, IndirectIndexedRead, m(ADC)) opM(0x72, IndirectRead, m(ADC)) opM(0x73, IndirectStackRead, m(ADC)) opM(0x74, DirectWrite, Z, X) opM(0x75, DirectRead, m(ADC), X) opM(0x76, DirectIndexedModify, m(ROR)) opM(0x77, IndirectLongRead, m(ADC), Y) opA(0x78, SetFlag, IF) opM(0x79, BankRead, m(ADC), Y) opX(0x7a, Pull, Y) opA(0x7b, Transfer16, D, A) opA(0x7c, JumpIndexedIndirect) opM(0x7d, BankRead, m(ADC), X) opM(0x7e, BankIndexedModify, m(ROR)) opM(0x7f, LongRead, m(ADC), X) opA(0x80, Branch) opM(0x81, IndexedIndirectWrite) opA(0x82, BranchLong) opM(0x83, StackWrite) opX(0x84, DirectWrite, Y) opM(0x85, DirectWrite, A) opX(0x86, DirectWrite, X) opM(0x87, IndirectLongWrite) opX(0x88, ImpliedModify, x(DEC), Y) opM(0x89, BitImmediate) opM(0x8a, Transfer, X, A) opA(0x8b, Push8, (r16)B) opX(0x8c, BankWrite, Y) opM(0x8d, BankWrite, A) opX(0x8e, BankWrite, X) opM(0x8f, LongWrite) opA(0x90, Branch, CF == 0) opM(0x91, IndirectIndexedWrite) opM(0x92, IndirectWrite) opM(0x93, IndirectStackWrite) opX(0x94, DirectWrite, Y, X) opM(0x95, DirectWrite, A, X) opX(0x96, DirectWrite, X, Y) opM(0x97, IndirectLongWrite, Y) opM(0x98, Transfer, Y, A) opM(0x99, BankWrite, A, Y) opA(0x9a, TransferXS) opX(0x9b, Transfer, X, Y) opM(0x9c, BankWrite, Z) opM(0x9d, BankWrite, A, X) opM(0x9e, BankWrite, Z, X) opM(0x9f, LongWrite, X) opX(0xa0, ImmediateRead, x(LDY)) opM(0xa1, IndexedIndirectRead, m(LDA)) opX(0xa2, ImmediateRead, x(LDX)) opM(0xa3, StackRead, m(LDA)) opX(0xa4, DirectRead, x(LDY)) opM(0xa5, DirectRead, m(LDA)) opX(0xa6, DirectRead, x(LDX)) opM(0xa7, IndirectLongRead, m(LDA)) opX(0xa8, Transfer, A, Y) opM(0xa9, ImmediateRead, m(LDA)) opX(0xaa, Transfer, A, X) opA(0xab, PullB) opX(0xac, BankRead, x(LDY)) opM(0xad, BankRead, m(LDA)) opX(0xae, BankRead, x(LDX)) opM(0xaf, LongRead, m(LDA)) opA(0xb0, Branch, CF == 1) opM(0xb1, IndirectIndexedRead, m(LDA)) opM(0xb2, IndirectRead, m(LDA)) opM(0xb3, IndirectStackRead, m(LDA)) opX(0xb4, DirectRead, x(LDY), X) opM(0xb5, DirectRead, m(LDA), X) opX(0xb6, DirectRead, x(LDX), Y) opM(0xb7, IndirectLongRead, m(LDA), Y) opA(0xb8, ClearFlag, VF) opM(0xb9, BankRead, m(LDA), Y) opX(0xba, TransferSX) opX(0xbb, Transfer, Y, X) opX(0xbc, BankRead, x(LDY), X) opM(0xbd, BankRead, m(LDA), X) opX(0xbe, BankRead, x(LDX), Y) opM(0xbf, LongRead, m(LDA), X) opX(0xc0, ImmediateRead, x(CPY)) opM(0xc1, IndexedIndirectRead, m(CMP)) opA(0xc2, ResetP) opM(0xc3, StackRead, m(CMP)) opX(0xc4, DirectRead, x(CPY)) opM(0xc5, DirectRead, m(CMP)) opM(0xc6, DirectModify, m(DEC)) opM(0xc7, IndirectLongRead, m(CMP)) opX(0xc8, ImpliedModify, x(INC), Y) opM(0xc9, ImmediateRead, m(CMP)) opX(0xca, ImpliedModify, x(DEC), X) opA(0xcb, Wait) opX(0xcc, BankRead, x(CPY)) opM(0xcd, BankRead, m(CMP)) opM(0xce, BankModify, m(DEC)) opM(0xcf, LongRead, m(CMP)) opA(0xd0, Branch, ZF == 0) opM(0xd1, IndirectIndexedRead, m(CMP)) opM(0xd2, IndirectRead, m(CMP)) opM(0xd3, IndirectStackRead, m(CMP)) opA(0xd4, PushEffectiveIndirectAddress) opM(0xd5, DirectRead, m(CMP), X) opM(0xd6, DirectIndexedModify, m(DEC)) opM(0xd7, IndirectLongRead, m(CMP), Y) opA(0xd8, ClearFlag, DF) opM(0xd9, BankRead, m(CMP), Y) opX(0xda, Push, X) opA(0xdb, Stop) opA(0xdc, JumpIndirectLong) opM(0xdd, BankRead, m(CMP), X) opM(0xde, BankIndexedModify, m(DEC)) opM(0xdf, LongRead, m(CMP), X) opX(0xe0, ImmediateRead, x(CPX)) opM(0xe1, IndexedIndirectRead, m(SBC)) opA(0xe2, SetP) opM(0xe3, StackRead, m(SBC)) opX(0xe4, DirectRead, x(CPX)) opM(0xe5, DirectRead, m(SBC)) opM(0xe6, DirectModify, m(INC)) opM(0xe7, IndirectLongRead, m(SBC)) opX(0xe8, ImpliedModify, x(INC), X) opM(0xe9, ImmediateRead, m(SBC)) opA(0xea, NoOperation) opA(0xeb, ExchangeBA) opX(0xec, BankRead, x(CPX)) opM(0xed, BankRead, m(SBC)) opM(0xee, BankModify, m(INC)) opM(0xef, LongRead, m(SBC)) opA(0xf0, Branch, ZF == 1) opM(0xf1, IndirectIndexedRead, m(SBC)) opM(0xf2, IndirectRead, m(SBC)) opM(0xf3, IndirectStackRead, m(SBC)) opA(0xf4, PushEffectiveAddress) opM(0xf5, DirectRead, m(SBC), X) opM(0xf6, DirectIndexedModify, m(INC)) opM(0xf7, IndirectLongRead, m(SBC), Y) opA(0xf8, SetFlag, DF) opM(0xf9, BankRead, m(SBC), Y) opX(0xfa, Pull, X) opA(0xfb, ExchangeCE) opA(0xfc, CallIndexedIndirect) opM(0xfd, BankRead, m(SBC), X) opM(0xfe, BankIndexedModify, m(INC)) opM(0xff, LongRead, m(SBC), X) } ares-126/ares/component/processor/wdc65816/instructions-modify.cpp000066400000000000000000000037011415063341600252210ustar00rootroot00000000000000auto WDC65816::instructionImpliedModify8(alu8 op, r16& M) -> void { L idleIRQ(); M.l = alu(M.l); } auto WDC65816::instructionImpliedModify16(alu16 op, r16& M) -> void { L idleIRQ(); M.w = alu(M.w); } auto WDC65816::instructionBankModify8(alu8 op) -> void { V.l = fetch(); V.h = fetch(); W.l = readBank(V.w + 0); idle(); W.l = alu(W.l); L writeBank(V.w + 0, W.l); } auto WDC65816::instructionBankModify16(alu16 op) -> void { V.l = fetch(); V.h = fetch(); W.l = readBank(V.w + 0); W.h = readBank(V.w + 1); idle(); W.w = alu(W.w); writeBank(V.w + 1, W.h); L writeBank(V.w + 0, W.l); } auto WDC65816::instructionBankIndexedModify8(alu8 op) -> void { V.l = fetch(); V.h = fetch(); idle(); W.l = readBank(V.w + X.w + 0); idle(); W.l = alu(W.l); L writeBank(V.w + X.w + 0, W.l); } auto WDC65816::instructionBankIndexedModify16(alu16 op) -> void { V.l = fetch(); V.h = fetch(); idle(); W.l = readBank(V.w + X.w + 0); W.h = readBank(V.w + X.w + 1); idle(); W.w = alu(W.w); writeBank(V.w + X.w + 1, W.h); L writeBank(V.w + X.w + 0, W.l); } auto WDC65816::instructionDirectModify8(alu8 op) -> void { U.l = fetch(); idle2(); W.l = readDirect(U.l + 0); idle(); W.l = alu(W.l); L writeDirect(U.l + 0, W.l); } auto WDC65816::instructionDirectModify16(alu16 op) -> void { U.l = fetch(); idle2(); W.l = readDirect(U.l + 0); W.h = readDirect(U.l + 1); idle(); W.w = alu(W.w); writeDirect(U.l + 1, W.h); L writeDirect(U.l + 0, W.l); } auto WDC65816::instructionDirectIndexedModify8(alu8 op) -> void { U.l = fetch(); idle2(); idle(); W.l = readDirect(U.l + X.w + 0); idle(); W.l = alu(W.l); L writeDirect(U.l + X.w + 0, W.l); } auto WDC65816::instructionDirectIndexedModify16(alu16 op) -> void { U.l = fetch(); idle2(); idle(); W.l = readDirect(U.l + X.w + 0); W.h = readDirect(U.l + X.w + 1); idle(); W.w = alu(W.w); writeDirect(U.l + X.w + 1, W.h); L writeDirect(U.l + X.w + 0, W.l); } ares-126/ares/component/processor/wdc65816/instructions-other.cpp000066400000000000000000000101031415063341600250450ustar00rootroot00000000000000auto WDC65816::instructionBitImmediate8() -> void { L U.l = fetch(); ZF = (U.l & A.l) == 0; } auto WDC65816::instructionBitImmediate16() -> void { U.l = fetch(); L U.h = fetch(); ZF = (U.w & A.w) == 0; } auto WDC65816::instructionNoOperation() -> void { L idleIRQ(); } auto WDC65816::instructionPrefix() -> void { L fetch(); } auto WDC65816::instructionExchangeBA() -> void { idle(); L idle(); A.w = A.w >> 8 | A.w << 8; ZF = A.l == 0; NF = A.l & 0x80; } auto WDC65816::instructionBlockMove8(s32 adjust) -> void { U.b = fetch(); V.b = fetch(); B = U.b; W.l = read(V.b << 16 | X.w); write(U.b << 16 | Y.w, W.l); idle(); X.l += adjust; Y.l += adjust; L idle(); if(A.w--) PC.w -= 3; } auto WDC65816::instructionBlockMove16(s32 adjust) -> void { U.b = fetch(); V.b = fetch(); B = U.b; W.l = read(V.b << 16 | X.w); write(U.b << 16 | Y.w, W.l); idle(); X.w += adjust; Y.w += adjust; L idle(); if(A.w--) PC.w -= 3; } auto WDC65816::instructionInterrupt(r16 vector) -> void { fetch(); N push(PC.b); push(PC.h); push(PC.l); push(P); IF = 1; DF = 0; PC.l = read(vector.w + 0); L PC.h = read(vector.w + 1); PC.b = 0x00; } auto WDC65816::instructionStop() -> void { r.stp = true; while(r.stp && !synchronizing()) { L idle(); } } auto WDC65816::instructionWait() -> void { r.wai = true; while(r.wai && !synchronizing()) { L idle(); } idle(); } auto WDC65816::instructionExchangeCE() -> void { L idleIRQ(); swap(CF, EF); if(EF) { XF = 1; MF = 1; X.h = 0x00; Y.h = 0x00; S.h = 0x01; } } auto WDC65816::instructionSetFlag(bool& flag) -> void { L idleIRQ(); flag = 1; } auto WDC65816::instructionClearFlag(bool& flag) -> void { L idleIRQ(); flag = 0; } auto WDC65816::instructionResetP() -> void { W.l = fetch(); L idle(); P = P & ~W.l; E XF = 1, MF = 1; if(XF) X.h = 0x00, Y.h = 0x00; } auto WDC65816::instructionSetP() -> void { W.l = fetch(); L idle(); P = P | W.l; E XF = 1, MF = 1; if(XF) X.h = 0x00, Y.h = 0x00; } auto WDC65816::instructionTransfer8(r16 F, r16& T) -> void { L idleIRQ(); T.l = F.l; ZF = T.l == 0; NF = T.l & 0x80; } auto WDC65816::instructionTransfer16(r16 F, r16& T) -> void { L idleIRQ(); T.w = F.w; ZF = T.w == 0; NF = T.w & 0x8000; } auto WDC65816::instructionTransferCS() -> void { L idleIRQ(); S.w = A.w; E S.h = 0x01; } auto WDC65816::instructionTransferSX8() -> void { L idleIRQ(); X.l = S.l; ZF = X.l == 0; NF = X.l & 0x80; } auto WDC65816::instructionTransferSX16() -> void { L idleIRQ(); X.w = S.w; ZF = X.w == 0; NF = X.w & 0x8000; } auto WDC65816::instructionTransferXS() -> void { L idleIRQ(); E S.l = X.l; N S.w = X.w; } auto WDC65816::instructionPush8(r16 F) -> void { idle(); L push(F.l); } auto WDC65816::instructionPush16(r16 F) -> void { idle(); push(F.h); L push(F.l); } auto WDC65816::instructionPushD() -> void { idle(); pushN(D.h); L pushN(D.l); E S.h = 0x01; } auto WDC65816::instructionPull8(r16& T) -> void { idle(); idle(); L T.l = pull(); ZF = T.l == 0; NF = T.l & 0x80; } auto WDC65816::instructionPull16(r16& T) -> void { idle(); idle(); T.l = pull(); L T.h = pull(); ZF = T.w == 0; NF = T.w & 0x8000; } auto WDC65816::instructionPullD() -> void { idle(); idle(); D.l = pullN(); L D.h = pullN(); ZF = D.w == 0; NF = D.w & 0x8000; E S.h = 0x01; } auto WDC65816::instructionPullB() -> void { idle(); idle(); L B = pull(); ZF = B == 0; NF = B & 0x80; } auto WDC65816::instructionPullP() -> void { idle(); idle(); L P = pull(); E XF = 1, MF = 1; if(XF) X.h = 0x00, Y.h = 0x00; } auto WDC65816::instructionPushEffectiveAddress() -> void { W.l = fetch(); W.h = fetch(); pushN(W.h); L pushN(W.l); E S.h = 0x01; } auto WDC65816::instructionPushEffectiveIndirectAddress() -> void { U.l = fetch(); idle2(); W.l = readDirectN(U.l + 0); W.h = readDirectN(U.l + 1); pushN(W.h); L pushN(W.l); E S.h = 0x01; } auto WDC65816::instructionPushEffectiveRelativeAddress() -> void { V.l = fetch(); V.h = fetch(); idle(); W.w = PC.d + (i16)V.w; pushN(W.h); L pushN(W.l); E S.h = 0x01; } ares-126/ares/component/processor/wdc65816/instructions-pc.cpp000066400000000000000000000045711415063341600243420ustar00rootroot00000000000000auto WDC65816::instructionBranch(bool take) -> void { if(!take) { L fetch(); } else { U.l = fetch(); V.w = PC.d + (i8)U.l; idle6(V.w); L idle(); PC.w = V.w; idleBranch(); } } auto WDC65816::instructionBranchLong() -> void { U.l = fetch(); U.h = fetch(); V.w = PC.d + (i16)U.w; L idle(); PC.w = V.w; idleBranch(); } auto WDC65816::instructionJumpShort() -> void { W.l = fetch(); L W.h = fetch(); PC.w = W.w; idleJump(); } auto WDC65816::instructionJumpLong() -> void { V.l = fetch(); V.h = fetch(); L V.b = fetch(); PC.d = V.d; idleJump(); } auto WDC65816::instructionJumpIndirect() -> void { V.l = fetch(); V.h = fetch(); W.l = read(n16(V.w + 0)); L W.h = read(n16(V.w + 1)); PC.w = W.w; idleJump(); } auto WDC65816::instructionJumpIndexedIndirect() -> void { V.l = fetch(); V.h = fetch(); idle(); W.l = read(PC.b << 16 | n16(V.w + X.w + 0)); L W.h = read(PC.b << 16 | n16(V.w + X.w + 1)); PC.w = W.w; idleJump(); } auto WDC65816::instructionJumpIndirectLong() -> void { U.l = fetch(); U.h = fetch(); V.l = read(n16(U.w + 0)); V.h = read(n16(U.w + 1)); L V.b = read(n16(U.w + 2)); PC.d = V.d; idleJump(); } auto WDC65816::instructionCallShort() -> void { W.l = fetch(); W.h = fetch(); idle(); PC.w--; push(PC.h); L push(PC.l); PC.w = W.w; idleJump(); } auto WDC65816::instructionCallLong() -> void { V.l = fetch(); V.h = fetch(); pushN(PC.b); idle(); V.b = fetch(); PC.w--; pushN(PC.h); L pushN(PC.l); PC.d = V.d; E S.h = 0x01; idleJump(); } auto WDC65816::instructionCallIndexedIndirect() -> void { V.l = fetch(); pushN(PC.h); pushN(PC.l); V.h = fetch(); idle(); W.l = read(PC.b << 16 | n16(V.w + X.w + 0)); L W.h = read(PC.b << 16 | n16(V.w + X.w + 1)); PC.w = W.w; E S.h = 0x01; idleJump(); } auto WDC65816::instructionReturnInterrupt() -> void { idle(); idle(); P = pull(); E XF = 1, MF = 1; if(XF) X.h = 0x00, Y.h = 0x00; PC.l = pull(); if(EF) { L PC.h = pull(); } else { PC.h = pull(); L PC.b = pull(); } idleJump(); } auto WDC65816::instructionReturnShort() -> void { idle(); idle(); W.l = pull(); W.h = pull(); L idle(); PC.w = W.w; PC.w++; idleJump(); } auto WDC65816::instructionReturnLong() -> void { idle(); idle(); V.l = pullN(); V.h = pullN(); L V.b = pullN(); PC.d = V.d; PC.w++; E S.h = 0x01; idleJump(); } ares-126/ares/component/processor/wdc65816/instructions-read.cpp000066400000000000000000000104741415063341600246520ustar00rootroot00000000000000auto WDC65816::instructionImmediateRead8(alu8 op) -> void { L W.l = fetch(); alu(W.l); } auto WDC65816::instructionImmediateRead16(alu16 op) -> void { W.l = fetch(); L W.h = fetch(); alu(W.w); } auto WDC65816::instructionBankRead8(alu8 op) -> void { V.l = fetch(); V.h = fetch(); L W.l = readBank(V.w + 0); alu(W.l); } auto WDC65816::instructionBankRead16(alu16 op) -> void { V.l = fetch(); V.h = fetch(); W.l = readBank(V.w + 0); L W.h = readBank(V.w + 1); alu(W.w); } auto WDC65816::instructionBankRead8(alu8 op, r16 I) -> void { V.l = fetch(); V.h = fetch(); idle4(V.w, V.w + I.w); L W.l = readBank(V.w + I.w + 0); alu(W.l); } auto WDC65816::instructionBankRead16(alu16 op, r16 I) -> void { V.l = fetch(); V.h = fetch(); idle4(V.w, V.w + I.w); W.l = readBank(V.w + I.w + 0); L W.h = readBank(V.w + I.w + 1); alu(W.w); } auto WDC65816::instructionLongRead8(alu8 op, r16 I) -> void { V.l = fetch(); V.h = fetch(); V.b = fetch(); L W.l = read(V.d + I.w + 0); alu(W.l); } auto WDC65816::instructionLongRead16(alu16 op, r16 I) -> void { V.l = fetch(); V.h = fetch(); V.b = fetch(); W.l = read(V.d + I.w + 0); L W.h = read(V.d + I.w + 1); alu(W.w); } auto WDC65816::instructionDirectRead8(alu8 op) -> void { U.l = fetch(); idle2(); L W.l = readDirect(U.l + 0); alu(W.l); } auto WDC65816::instructionDirectRead16(alu16 op) -> void { U.l = fetch(); idle2(); W.l = readDirect(U.l + 0); L W.h = readDirect(U.l + 1); alu(W.w); } auto WDC65816::instructionDirectRead8(alu8 op, r16 I) -> void { U.l = fetch(); idle2(); idle(); L W.l = readDirect(U.l + I.w + 0); alu(W.l); } auto WDC65816::instructionDirectRead16(alu16 op, r16 I) -> void { U.l = fetch(); idle2(); idle(); W.l = readDirect(U.l + I.w + 0); L W.h = readDirect(U.l + I.w + 1); alu(W.w); } auto WDC65816::instructionIndirectRead8(alu8 op) -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); L W.l = readBank(V.w + 0); alu(W.l); } auto WDC65816::instructionIndirectRead16(alu16 op) -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); W.l = readBank(V.w + 0); L W.h = readBank(V.w + 1); alu(W.w); } auto WDC65816::instructionIndexedIndirectRead8(alu8 op) -> void { U.l = fetch(); idle2(); idle(); V.l = readDirect(U.l + X.w + 0); V.h = readDirect(U.l + X.w + 1); L W.l = readBank(V.w + 0); alu(W.l); } auto WDC65816::instructionIndexedIndirectRead16(alu16 op) -> void { U.l = fetch(); idle2(); idle(); V.l = readDirect(U.l + X.w + 0); V.h = readDirect(U.l + X.w + 1); W.l = readBank(V.w + 0); L W.h = readBank(V.w + 1); alu(W.w); } auto WDC65816::instructionIndirectIndexedRead8(alu8 op) -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); idle4(V.w, V.w + Y.w); L W.l = readBank(V.w + Y.w + 0); alu(W.l); } auto WDC65816::instructionIndirectIndexedRead16(alu16 op) -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); idle4(V.w, V.w + Y.w); W.l = readBank(V.w + Y.w + 0); L W.h = readBank(V.w + Y.w + 1); alu(W.w); } auto WDC65816::instructionIndirectLongRead8(alu8 op, r16 I) -> void { U.l = fetch(); idle2(); V.l = readDirectN(U.l + 0); V.h = readDirectN(U.l + 1); V.b = readDirectN(U.l + 2); L W.l = read(V.d + I.w + 0); alu(W.l); } auto WDC65816::instructionIndirectLongRead16(alu16 op, r16 I) -> void { U.l = fetch(); idle2(); V.l = readDirectN(U.l + 0); V.h = readDirectN(U.l + 1); V.b = readDirectN(U.l + 2); W.l = read(V.d + I.w + 0); L W.h = read(V.d + I.w + 1); alu(W.w); } auto WDC65816::instructionStackRead8(alu8 op) -> void { U.l = fetch(); idle(); L W.l = readStack(U.l + 0); alu(W.l); } auto WDC65816::instructionStackRead16(alu16 op) -> void { U.l = fetch(); idle(); W.l = readStack(U.l + 0); L W.h = readStack(U.l + 1); alu(W.w); } auto WDC65816::instructionIndirectStackRead8(alu8 op) -> void { U.l = fetch(); idle(); V.l = readStack(U.l + 0); V.h = readStack(U.l + 1); idle(); L W.l = readBank(V.w + Y.w + 0); alu(W.l); } auto WDC65816::instructionIndirectStackRead16(alu16 op) -> void { U.l = fetch(); idle(); V.l = readStack(U.l + 0); V.h = readStack(U.l + 1); idle(); W.l = readBank(V.w + Y.w + 0); L W.h = readBank(V.w + Y.w + 1); alu(W.w); } ares-126/ares/component/processor/wdc65816/instructions-write.cpp000066400000000000000000000072761415063341600250770ustar00rootroot00000000000000auto WDC65816::instructionBankWrite8(r16 F) -> void { V.l = fetch(); V.h = fetch(); L writeBank(V.w + 0, F.l); } auto WDC65816::instructionBankWrite16(r16 F) -> void { V.l = fetch(); V.h = fetch(); writeBank(V.w + 0, F.l); L writeBank(V.w + 1, F.h); } auto WDC65816::instructionBankWrite8(r16 F, r16 I) -> void { V.l = fetch(); V.h = fetch(); idle(); L writeBank(V.w + I.w + 0, F.l); } auto WDC65816::instructionBankWrite16(r16 F, r16 I) -> void { V.l = fetch(); V.h = fetch(); idle(); writeBank(V.w + I.w + 0, F.l); L writeBank(V.w + I.w + 1, F.h); } auto WDC65816::instructionLongWrite8(r16 I) -> void { V.l = fetch(); V.h = fetch(); V.b = fetch(); L write(V.d + I.w + 0, A.l); } auto WDC65816::instructionLongWrite16(r16 I) -> void { V.l = fetch(); V.h = fetch(); V.b = fetch(); write(V.d + I.w + 0, A.l); L write(V.d + I.w + 1, A.h); } auto WDC65816::instructionDirectWrite8(r16 F) -> void { U.l = fetch(); idle2(); L writeDirect(U.l + 0, F.l); } auto WDC65816::instructionDirectWrite16(r16 F) -> void { U.l = fetch(); idle2(); writeDirect(U.l + 0, F.l); L writeDirect(U.l + 1, F.h); } auto WDC65816::instructionDirectWrite8(r16 F, r16 I) -> void { U.l = fetch(); idle2(); idle(); L writeDirect(U.l + I.w + 0, F.l); } auto WDC65816::instructionDirectWrite16(r16 F, r16 I) -> void { U.l = fetch(); idle2(); idle(); writeDirect(U.l + I.w + 0, F.l); L writeDirect(U.l + I.w + 1, F.h); } auto WDC65816::instructionIndirectWrite8() -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); L writeBank(V.w + 0, A.l); } auto WDC65816::instructionIndirectWrite16() -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); writeBank(V.w + 0, A.l); L writeBank(V.w + 1, A.h); } auto WDC65816::instructionIndexedIndirectWrite8() -> void { U.l = fetch(); idle2(); idle(); V.l = readDirect(U.l + X.w + 0); V.h = readDirect(U.l + X.w + 1); L writeBank(V.w + 0, A.l); } auto WDC65816::instructionIndexedIndirectWrite16() -> void { U.l = fetch(); idle2(); idle(); V.l = readDirect(U.l + X.w + 0); V.h = readDirect(U.l + X.w + 1); writeBank(V.w + 0, A.l); L writeBank(V.w + 1, A.h); } auto WDC65816::instructionIndirectIndexedWrite8() -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); idle(); L writeBank(V.w + Y.w + 0, A.l); } auto WDC65816::instructionIndirectIndexedWrite16() -> void { U.l = fetch(); idle2(); V.l = readDirect(U.l + 0); V.h = readDirect(U.l + 1); idle(); writeBank(V.w + Y.w + 0, A.l); L writeBank(V.w + Y.w + 1, A.h); } auto WDC65816::instructionIndirectLongWrite8(r16 I) -> void { U.l = fetch(); idle2(); V.l = readDirectN(U.l + 0); V.h = readDirectN(U.l + 1); V.b = readDirectN(U.l + 2); L write(V.d + I.w + 0, A.l); } auto WDC65816::instructionIndirectLongWrite16(r16 I) -> void { U.l = fetch(); idle2(); V.l = readDirectN(U.l + 0); V.h = readDirectN(U.l + 1); V.b = readDirectN(U.l + 2); write(V.d + I.w + 0, A.l); L write(V.d + I.w + 1, A.h); } auto WDC65816::instructionStackWrite8() -> void { U.l = fetch(); idle(); L writeStack(U.l + 0, A.l); } auto WDC65816::instructionStackWrite16() -> void { U.l = fetch(); idle(); writeStack(U.l + 0, A.l); L writeStack(U.l + 1, A.h); } auto WDC65816::instructionIndirectStackWrite8() -> void { U.l = fetch(); idle(); V.l = readStack(U.l + 0); V.h = readStack(U.l + 1); idle(); L writeBank(V.w + Y.w + 0, A.l); } auto WDC65816::instructionIndirectStackWrite16() -> void { U.l = fetch(); idle(); V.l = readStack(U.l + 0); V.h = readStack(U.l + 1); idle(); writeBank(V.w + Y.w + 0, A.l); L writeBank(V.w + Y.w + 1, A.h); } ares-126/ares/component/processor/wdc65816/memory.cpp000066400000000000000000000036461415063341600225100ustar00rootroot00000000000000//immediate, 2-cycle opcodes with idle cycle will become bus read //when an IRQ is to be triggered immediately after opcode completion. //this affects the following opcodes: // clc, cld, cli, clv, sec, sed, sei, // tax, tay, txa, txy, tya, tyx, // tcd, tcs, tdc, tsc, tsx, txs, // inc, inx, iny, dec, dex, dey, // asl, lsr, rol, ror, nop, xce. inline auto WDC65816::idleIRQ() -> void { if(interruptPending()) { //modify I/O cycle to bus read cycle, do not increment PC read(PC.d); } else { idle(); } } inline auto WDC65816::idle2() -> void { if(D.l) idle(); } inline auto WDC65816::idle4(n16 x, n16 y) -> void { if(!XF || x >> 8 != y >> 8) idle(); } inline auto WDC65816::idle6(n16 address) -> void { if(EF && PC.h != address >> 8) idle(); } inline auto WDC65816::fetch() -> n8 { return read(PC.b << 16 | PC.w++); } inline auto WDC65816::pull() -> n8 { EF ? (void)S.l++ : (void)S.w++; return read(S.w); } auto WDC65816::push(n8 data) -> void { write(S.w, data); EF ? (void)S.l-- : (void)S.w--; } inline auto WDC65816::pullN() -> n8 { return read(++S.w); } inline auto WDC65816::pushN(n8 data) -> void { write(S.w--, data); } inline auto WDC65816::readDirect(u32 address) -> n8 { if(EF && !D.l) return read(D.w | n8(address)); return read(n16(D.w + address)); } inline auto WDC65816::writeDirect(u32 address, n8 data) -> void { if(EF && !D.l) return write(D.w | n8(address), data); write(n16(D.w + address), data); } inline auto WDC65816::readDirectN(u32 address) -> n8 { return read(n16(D.w + address)); } inline auto WDC65816::readBank(u32 address) -> n8 { return read((B << 16) + address); } inline auto WDC65816::writeBank(u32 address, n8 data) -> void { write((B << 16) + address, data); } inline auto WDC65816::readStack(u32 address) -> n8 { return read(n16(S.w + address)); } inline auto WDC65816::writeStack(u32 address, n8 data) -> void { write(n16(S.w + address), data); } ares-126/ares/component/processor/wdc65816/registers.hpp000066400000000000000000000015751415063341600232130ustar00rootroot00000000000000#if !defined(WDC65816_REGISTERS_HPP) #define WDC65816_REGISTERS_HPP #define PC r.pc #define A r.a #define X r.x #define Y r.y #define Z r.z #define S r.s #define D r.d #define B r.b #define P r.p #define CF r.p.c #define ZF r.p.z #define IF r.p.i #define DF r.p.d #define XF r.p.x #define MF r.p.m #define VF r.p.v #define NF r.p.n #define EF r.e #define U r.u #define V r.v #define W r.w #define E if(r.e) #define N if(!r.e) #define L lastCycle(); #define alu(...) (this->*op)(__VA_ARGS__) #else #undef WDC65816_REGISTERS_HPP #undef PC #undef A #undef X #undef Y #undef Z #undef S #undef D #undef B #undef P #undef CF #undef ZF #undef IF #undef DF #undef XF #undef MF #undef VF #undef NF #undef EF #undef U #undef V #undef W #undef E #undef N #undef L #undef alu #endif ares-126/ares/component/processor/wdc65816/serialization.cpp000066400000000000000000000005611415063341600240460ustar00rootroot00000000000000auto WDC65816::serialize(serializer& s) -> void { s(r.pc.d); s(r.a.w); s(r.x.w); s(r.y.w); s(r.z.w); s(r.s.w); s(r.d.w); s(r.b); s(r.p.c); s(r.p.z); s(r.p.i); s(r.p.d); s(r.p.x); s(r.p.m); s(r.p.v); s(r.p.n); s(r.e); s(r.irq); s(r.wai); s(r.stp); s(r.vector); s(r.mar); s(r.mdr); s(r.u.d); s(r.v.d); s(r.w.d); } ares-126/ares/component/processor/wdc65816/wdc65816.cpp000066400000000000000000000013301415063341600223530ustar00rootroot00000000000000#include #include "wdc65816.hpp" namespace ares { #include "registers.hpp" #include "memory.cpp" #include "algorithms.cpp" #include "instructions-read.cpp" #include "instructions-write.cpp" #include "instructions-modify.cpp" #include "instructions-pc.cpp" #include "instructions-other.cpp" #include "instruction.cpp" auto WDC65816::power() -> void { r.pc.d = 0x000000; r.a = 0x0000; r.x = 0x0000; r.y = 0x0000; r.s = 0x01ff; r.d = 0x0000; r.b = 0x00; r.p = 0x34; r.e = 1; r.irq = 0; r.wai = 0; r.stp = 0; r.mar = 0x000000; r.mdr = 0x00; r.vector = 0xfffc; //reset vector address } #include "registers.hpp" #include "serialization.cpp" #include "disassembler.cpp" } ares-126/ares/component/processor/wdc65816/wdc65816.hpp000066400000000000000000000230241415063341600223640ustar00rootroot00000000000000//WDC 65C816 CPU core //* Ricoh 5A22 //* Nintendo SA-1 #pragma once namespace ares { struct WDC65816 { virtual auto idle() -> void = 0; virtual auto idleBranch() -> void {} virtual auto idleJump() -> void {} virtual auto read(n24 address) -> n8 = 0; virtual auto write(n24 address, n8 data) -> void = 0; virtual auto lastCycle() -> void = 0; virtual auto interruptPending() const -> bool = 0; virtual auto interrupt() -> void; virtual auto synchronizing() const -> bool = 0; virtual auto readDisassembler(n24 address) -> n8 { return 0; } auto irq() const -> bool { return r.irq; } auto irq(bool line) -> void { r.irq = line; } using r8 = n8; struct r16 { r16() {} r16(n32 data) : w(data) {} r16(const r16& data) : w(data.w) {} auto& operator=(u32 data) { w = data; return *this; } auto& operator=(const r16& data) { w = data.w; return *this; } n16 w; BitRange<16,0, 7> l{&w}; BitRange<16,8,15> h{&w}; }; struct r24 { r24() {} r24(u32 data) : d(data) {} r24(const r24& data) : d(data.d) {} auto& operator=(u32 data) { d = data; return *this; } auto& operator=(const r24& data) { d = data.d; return *this; } n24 d; BitRange<24, 0, 7> l{&d}; BitRange<24, 8,15> h{&d}; BitRange<24,16,23> b{&d}; BitRange<24, 0,15> w{&d}; }; //wdc65816.cpp auto power() -> void; //memory.cpp auto idleIRQ() -> void; auto idle2() -> void; auto idle4(n16 x, n16 y) -> void; auto idle6(n16 address) -> void; auto fetch() -> n8; auto pull() -> n8; auto push(n8 data) -> void; auto pullN() -> n8; auto pushN(n8 data) -> void; auto readDirect(u32 address) -> n8; auto writeDirect(u32 address, n8 data) -> void; auto readDirectN(u32 address) -> n8; auto readBank(u32 address) -> n8; auto writeBank(u32 address, n8 data) -> void; auto readStack(u32 address) -> n8; auto writeStack(u32 address, n8 data) -> void; //algorithms.cpp using alu8 = auto (WDC65816::*)(n8 ) -> n8; using alu16 = auto (WDC65816::*)(n16) -> n16; auto algorithmADC8(n8) -> n8; auto algorithmADC16(n16) -> n16; auto algorithmAND8(n8) -> n8; auto algorithmAND16(n16) -> n16; auto algorithmASL8(n8) -> n8; auto algorithmASL16(n16) -> n16; auto algorithmBIT8(n8) -> n8; auto algorithmBIT16(n16) -> n16; auto algorithmCMP8(n8) -> n8; auto algorithmCMP16(n16) -> n16; auto algorithmCPX8(n8) -> n8; auto algorithmCPX16(n16) -> n16; auto algorithmCPY8(n8) -> n8; auto algorithmCPY16(n16) -> n16; auto algorithmDEC8(n8) -> n8; auto algorithmDEC16(n16) -> n16; auto algorithmEOR8(n8) -> n8; auto algorithmEOR16(n16) -> n16; auto algorithmINC8(n8) -> n8; auto algorithmINC16(n16) -> n16; auto algorithmLDA8(n8) -> n8; auto algorithmLDA16(n16) -> n16; auto algorithmLDX8(n8) -> n8; auto algorithmLDX16(n16) -> n16; auto algorithmLDY8(n8) -> n8; auto algorithmLDY16(n16) -> n16; auto algorithmLSR8(n8) -> n8; auto algorithmLSR16(n16) -> n16; auto algorithmORA8(n8) -> n8; auto algorithmORA16(n16) -> n16; auto algorithmROL8(n8) -> n8; auto algorithmROL16(n16) -> n16; auto algorithmROR8(n8) -> n8; auto algorithmROR16(n16) -> n16; auto algorithmSBC8(n8) -> n8; auto algorithmSBC16(n16) -> n16; auto algorithmTRB8(n8) -> n8; auto algorithmTRB16(n16) -> n16; auto algorithmTSB8(n8) -> n8; auto algorithmTSB16(n16) -> n16; //instructions-read.cpp auto instructionImmediateRead8(alu8) -> void; auto instructionImmediateRead16(alu16) -> void; auto instructionBankRead8(alu8) -> void; auto instructionBankRead16(alu16) -> void; auto instructionBankRead8(alu8, r16) -> void; auto instructionBankRead16(alu16, r16) -> void; auto instructionLongRead8(alu8, r16 = {}) -> void; auto instructionLongRead16(alu16, r16 = {}) -> void; auto instructionDirectRead8(alu8) -> void; auto instructionDirectRead16(alu16) -> void; auto instructionDirectRead8(alu8, r16) -> void; auto instructionDirectRead16(alu16, r16) -> void; auto instructionIndirectRead8(alu8) -> void; auto instructionIndirectRead16(alu16) -> void; auto instructionIndexedIndirectRead8(alu8) -> void; auto instructionIndexedIndirectRead16(alu16) -> void; auto instructionIndirectIndexedRead8(alu8) -> void; auto instructionIndirectIndexedRead16(alu16) -> void; auto instructionIndirectLongRead8(alu8, r16 = {}) -> void; auto instructionIndirectLongRead16(alu16, r16 = {}) -> void; auto instructionStackRead8(alu8) -> void; auto instructionStackRead16(alu16) -> void; auto instructionIndirectStackRead8(alu8) -> void; auto instructionIndirectStackRead16(alu16) -> void; //instructions-write.cpp auto instructionBankWrite8(r16) -> void; auto instructionBankWrite16(r16) -> void; auto instructionBankWrite8(r16, r16) -> void; auto instructionBankWrite16(r16, r16) -> void; auto instructionLongWrite8(r16 = {}) -> void; auto instructionLongWrite16(r16 = {}) -> void; auto instructionDirectWrite8(r16) -> void; auto instructionDirectWrite16(r16) -> void; auto instructionDirectWrite8(r16, r16) -> void; auto instructionDirectWrite16(r16, r16) -> void; auto instructionIndirectWrite8() -> void; auto instructionIndirectWrite16() -> void; auto instructionIndexedIndirectWrite8() -> void; auto instructionIndexedIndirectWrite16() -> void; auto instructionIndirectIndexedWrite8() -> void; auto instructionIndirectIndexedWrite16() -> void; auto instructionIndirectLongWrite8(r16 = {}) -> void; auto instructionIndirectLongWrite16(r16 = {}) -> void; auto instructionStackWrite8() -> void; auto instructionStackWrite16() -> void; auto instructionIndirectStackWrite8() -> void; auto instructionIndirectStackWrite16() -> void; //instructions-modify.cpp auto instructionImpliedModify8(alu8, r16&) -> void; auto instructionImpliedModify16(alu16, r16&) -> void; auto instructionBankModify8(alu8) -> void; auto instructionBankModify16(alu16) -> void; auto instructionBankIndexedModify8(alu8) -> void; auto instructionBankIndexedModify16(alu16) -> void; auto instructionDirectModify8(alu8) -> void; auto instructionDirectModify16(alu16) -> void; auto instructionDirectIndexedModify8(alu8) -> void; auto instructionDirectIndexedModify16(alu16) -> void; //instructions-pc.cpp auto instructionBranch(bool = 1) -> void; auto instructionBranchLong() -> void; auto instructionJumpShort() -> void; auto instructionJumpLong() -> void; auto instructionJumpIndirect() -> void; auto instructionJumpIndexedIndirect() -> void; auto instructionJumpIndirectLong() -> void; auto instructionCallShort() -> void; auto instructionCallLong() -> void; auto instructionCallIndexedIndirect() -> void; auto instructionReturnInterrupt() -> void; auto instructionReturnShort() -> void; auto instructionReturnLong() -> void; //instructions-other.cpp auto instructionBitImmediate8() -> void; auto instructionBitImmediate16() -> void; auto instructionNoOperation() -> void; auto instructionPrefix() -> void; auto instructionExchangeBA() -> void; auto instructionBlockMove8(s32) -> void; auto instructionBlockMove16(s32) -> void; auto instructionInterrupt(r16) -> void; auto instructionStop() -> void; auto instructionWait() -> void; auto instructionExchangeCE() -> void; auto instructionSetFlag(bool&) -> void; auto instructionClearFlag(bool&) -> void; auto instructionResetP() -> void; auto instructionSetP() -> void; auto instructionTransfer8(r16, r16&) -> void; auto instructionTransfer16(r16, r16&) -> void; auto instructionTransferCS() -> void; auto instructionTransferSX8() -> void; auto instructionTransferSX16() -> void; auto instructionTransferXS() -> void; auto instructionPush8(r16) -> void; auto instructionPush16(r16) -> void; auto instructionPushD() -> void; auto instructionPull8(r16&) -> void; auto instructionPull16(r16&) -> void; auto instructionPullD() -> void; auto instructionPullB() -> void; auto instructionPullP() -> void; auto instructionPushEffectiveAddress() -> void; auto instructionPushEffectiveIndirectAddress() -> void; auto instructionPushEffectiveRelativeAddress() -> void; //instruction.cpp auto instruction() -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp noinline auto disassembleInstruction(n24 address, bool e, bool m, bool x) -> string; noinline auto disassembleInstruction() -> string; noinline auto disassembleContext(maybe e = {}) -> string; struct f8 { bool c = 0; //carry bool z = 0; //zero bool i = 0; //interrupt disable bool d = 0; //decimal mode bool x = 0; //index register mode bool m = 0; //accumulator mode bool v = 0; //overflow bool n = 0; //negative operator u32() const { return c << 0 | z << 1 | i << 2 | d << 3 | x << 4 | m << 5 | v << 6 | n << 7; } auto& operator=(n8 data) { c = data.bit(0); z = data.bit(1); i = data.bit(2); d = data.bit(3); x = data.bit(4); m = data.bit(5); v = data.bit(6); n = data.bit(7); return *this; } }; struct Registers { r24 pc; r16 a; r16 x; r16 y; r16 z; r16 s; r16 d; r8 b; f8 p; bool e = 0; //emulation mode bool irq = 0; //IRQ pin (0 = low, 1 = trigger) bool wai = 0; //raised during wai, cleared after interrupt triggered bool stp = 0; //raised during stp, never cleared n16 vector; //interrupt vector address n24 mar; //memory address register n8 mdr; //memory data register r24 u; //temporary register r24 v; //temporary register r24 w; //temporary register } r; }; } ares-126/ares/component/processor/z80/000077500000000000000000000000001415063341600177155ustar00rootroot00000000000000ares-126/ares/component/processor/z80/algorithms.cpp000066400000000000000000000070671415063341600226040ustar00rootroot00000000000000auto Z80::ADD(n8 x, n8 y, bool c) -> n8 { n9 z = x + y + c; CF = z.bit(8); NF = 0; VF = n8(~(x ^ y) & (x ^ z)).bit(7); XF = z.bit(3); HF = n8(x ^ y ^ z).bit(4); YF = z.bit(5); ZF = n8(z) == 0; SF = z.bit(7); return z; } auto Z80::AND(n8 x, n8 y) -> n8 { n8 z = x & y; CF = 0; NF = 0; PF = parity(z); XF = z.bit(3); HF = 1; YF = z.bit(5); ZF = z == 0; SF = z.bit(7); return z; } auto Z80::BIT(n3 bit, n8 x) -> n8 { n8 z = x & 1 << bit; NF = 0; PF = parity(z); XF = x.bit(3); HF = 1; YF = x.bit(5); ZF = z == 0; SF = z.bit(7); return x; } auto Z80::CP(n8 x, n8 y) -> void { n9 z = x - y; CF = z.bit(8); NF = 1; VF = n8((x ^ y) & (x ^ z)).bit(7); XF = y.bit(3); HF = n8(x ^ y ^ z).bit(4); YF = y.bit(5); ZF = n8(z) == 0; SF = z.bit(7); } auto Z80::DEC(n8 x) -> n8 { n8 z = x - 1; NF = 1; VF = z == 0x7f; XF = z.bit(3); HF = z.bit(0,3) == 0x0f; YF = z.bit(5); ZF = z == 0; SF = z.bit(7); return z; } auto Z80::IN(n8 x) -> n8 { NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::INC(n8 x) -> n8 { n8 z = x + 1; NF = 0; VF = z == 0x80; XF = z.bit(3); HF = z.bit(0,3) == 0x00; YF = z.bit(5); ZF = z == 0; SF = z.bit(7); return z; } auto Z80::OR(n8 x, n8 y) -> n8 { n8 z = x | y; CF = 0; NF = 0; PF = parity(z); XF = z.bit(3); HF = 0; YF = z.bit(5); ZF = z == 0; SF = z.bit(7); return z; } auto Z80::RES(n3 bit, n8 x) -> n8 { x &= ~(1 << bit); return x; } auto Z80::RL(n8 x) -> n8 { bool c = x.bit(7); x = x << 1 | CF; CF = c; NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::RLC(n8 x) -> n8 { x = x << 1 | x >> 7; CF = x.bit(0); NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::RR(n8 x) -> n8 { bool c = x.bit(0); x = x >> 1 | CF << 7; CF = c; NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::RRC(n8 x) -> n8 { x = x >> 1 | x << 7; CF = x.bit(7); NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::SET(n3 bit, n8 x) -> n8 { x |= (1 << bit); return x; } auto Z80::SLA(n8 x) -> n8 { bool c = x.bit(7); x = x << 1; CF = c; NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::SLL(n8 x) -> n8 { bool c = x.bit(7); x = x << 1 | 1; CF = c; NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::SRA(n8 x) -> n8 { bool c = x.bit(0); x = (i8)x >> 1; CF = c; NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::SRL(n8 x) -> n8 { bool c = x.bit(0); x = x >> 1; CF = c; NF = 0; PF = parity(x); XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); return x; } auto Z80::SUB(n8 x, n8 y, bool c) -> n8 { n9 z = x - y - c; CF = z.bit(8); NF = 1; VF = n8((x ^ y) & (x ^ z)).bit(7); XF = z.bit(3); HF = n8(x ^ y ^ z).bit(4); YF = z.bit(5); ZF = n8(z) == 0; SF = z.bit(7); return z; } auto Z80::XOR(n8 x, n8 y) -> n8 { n8 z = x ^ y; CF = 0; NF = 0; PF = parity(z); XF = z.bit(3); HF = 0; YF = z.bit(5); ZF = z == 0; SF = z.bit(7); return z; } ares-126/ares/component/processor/z80/disassembler.cpp000066400000000000000000000651651415063341600231130ustar00rootroot00000000000000no_optimize auto Z80::disassembleInstruction(maybe _pc) -> string { auto pc = _pc ? *_pc : PC; string s, output; n8 prefix = 0x00; auto code = bus->read(pc++); if(code == 0xdd || code == 0xfd) { prefix = code; code = bus->read(pc++); if(code == 0xdd || code == 0xfd) { if(prefix == 0xdd) { s.append("ix:"); goto finish; } if(prefix == 0xfd) { s.append("iy:"); goto finish; } } } if(code == 0xcb && prefix) { auto d = (i8)bus->read(pc++); code = bus->read(pc++); output = disassembleCBd(pc, prefix, d, code); } else if(code == 0xcb) { code = bus->read(pc++); output = disassembleCB(pc, prefix, code); } else if(code == 0xed) { code = bus->read(pc++); output = disassembleED(pc, prefix, code); } else { output = disassemble(pc, prefix, code); } finish: return pad(output, -18L); } no_optimize auto Z80::disassembleContext() -> string { string s; s.append("AF:", hex(af.word, 4L), " "); s.append("BC:", hex(bc.word, 4L), " "); s.append("DE:", hex(de.word, 4L), " "); s.append("HL:", hex(hl.word, 4L), " "); s.append("IX:", hex(ix.word, 4L), " "); s.append("IY:", hex(iy.word, 4L), " "); s.append("SP:", hex(SP, 4L), " "); s.append("IFF:", (n1)IFF1, (n1)IFF2, " "); s.append("IM:", IM); return s; } #define op(id, name, ...) case id: return {name, " ", vector{__VA_ARGS__}.merge(",")}; #define N string{"$", hex(byte(), 2L)} #define IN string{"(", N, ")"} #define NN string{"$", hex(word(), 4L)} #define INN string{"(", NN, ")"} #define REL string{"$", hex(branch(), 4L)} #define A "a" #define F "f" #define B "b" #define C "c" #define D "d" #define E "e" #define H prefix == 0xdd ? "ixh" : prefix == 0xfd ? "iyh" : "h" #define L prefix == 0xdd ? "ixl" : prefix == 0xfd ? "iyl" : "l" #define _H "h" #define _L "l" #define _HL "hl" #define AF "af" #define BC "bc" #define DE "de" #define HL prefix == 0xdd ? "ix" : prefix == 0xfd ? "iy" : "hl" #define AF_ "af'" #define BC_ "bc'" #define DE_ "de'" #define HL_ "hl'" #define SP "sp" #define PC "pc" #define I "i" #define R "r" #define IC "(c)" #define IBC "(bc)" #define IDE "(de)" #define IHL string{"(", HL, displace(), ")"} #define ISP "(sp)" no_optimize auto Z80::disassemble(n16 pc, n8 prefix, n8 code) -> string { auto byte = [&] { return bus->read(pc++); }; auto word = [&] { n16 data = byte() << 0; return data | byte() << 8; }; auto branch = [&] { auto d = byte(); return pc + (i8)d; }; auto displace = [&] { if(!prefix) return string{}; auto d = (i8)byte(); return d >= 0 ? string{"+$", hex(d, 2L)} : string{"-$", hex(-d, 2L)}; }; switch(code) { op(0x00, "nop ") op(0x01, "ld ", BC, NN) op(0x02, "ld ", IBC, A) op(0x03, "inc ", BC) op(0x04, "inc ", B) op(0x05, "dec ", B) op(0x06, "ld ", B, N) op(0x07, "rlca") op(0x08, "ex ", AF, AF_) op(0x09, "add ", HL, BC) op(0x0a, "ld ", A, IBC) op(0x0b, "dec ", BC) op(0x0c, "inc ", C) op(0x0d, "dec ", C) op(0x0e, "ld ", C, N) op(0x0f, "rrca") op(0x10, "djnz", REL) op(0x11, "ld ", DE, NN) op(0x12, "ld ", IDE, A) op(0x13, "inc ", DE) op(0x14, "inc ", D) op(0x15, "dec ", D) op(0x16, "ld ", D, N) op(0x17, "rla ") op(0x18, "jr ", REL) op(0x19, "add ", HL, DE) op(0x1a, "ld ", A, IDE) op(0x1b, "dec ", DE) op(0x1c, "inc ", E) op(0x1d, "dec ", E) op(0x1e, "ld ", E, N) op(0x1f, "rra ") op(0x20, "jr ", "nz", REL) op(0x21, "ld ", HL, NN) op(0x22, "ld ", INN, HL) op(0x23, "inc ", HL) op(0x24, "inc ", H) op(0x25, "dec ", H) op(0x26, "ld ", H, N) op(0x27, "daa ") op(0x28, "jr ", "z", REL) op(0x29, "add ", HL, HL) op(0x2a, "ld ", HL, INN) op(0x2b, "dec ", HL) op(0x2c, "inc ", L) op(0x2d, "dec ", L) op(0x2e, "ld ", L, N) op(0x2f, "cpl ") op(0x30, "jr ", "nc", REL) op(0x31, "ld ", SP, NN) op(0x32, "ld ", INN, A) op(0x33, "inc ", SP) op(0x34, "inc ", IHL) op(0x35, "dec ", IHL) op(0x36, "ld ", IHL, N) op(0x37, "scf ") op(0x38, "jr ", "c", REL) op(0x39, "add ", HL, SP) op(0x3a, "ld ", A, INN) op(0x3b, "dec ", SP) op(0x3c, "inc ", A) op(0x3d, "dec ", A) op(0x3e, "ld ", A, N) op(0x3f, "ccf ") op(0x40, "ld ", B, B) op(0x41, "ld ", B, C) op(0x42, "ld ", B, D) op(0x43, "ld ", B, E) op(0x44, "ld ", B, H) op(0x45, "ld ", B, L) op(0x46, "ld ", B, IHL) op(0x47, "ld ", B, A) op(0x48, "ld ", C, B) op(0x49, "ld ", C, C) op(0x4a, "ld ", C, D) op(0x4b, "ld ", C, E) op(0x4c, "ld ", C, H) op(0x4d, "ld ", C, L) op(0x4e, "ld ", C, IHL) op(0x4f, "ld ", C, A) op(0x50, "ld ", D, B) op(0x51, "ld ", D, C) op(0x52, "ld ", D, D) op(0x53, "ld ", D, E) op(0x54, "ld ", D, H) op(0x55, "ld ", D, L) op(0x56, "ld ", D, IHL) op(0x57, "ld ", D, A) op(0x58, "ld ", E, B) op(0x59, "ld ", E, C) op(0x5a, "ld ", E, D) op(0x5b, "ld ", E, E) op(0x5c, "ld ", E, H) op(0x5d, "ld ", E, L) op(0x5e, "ld ", E, IHL) op(0x5f, "ld ", E, A) op(0x60, "ld ", H, B) op(0x61, "ld ", H, C) op(0x62, "ld ", H, D) op(0x63, "ld ", H, E) op(0x64, "ld ", H, H) op(0x65, "ld ", H, L) op(0x66, "ld ", _H, IHL) op(0x67, "ld ", H, A) op(0x68, "ld ", L, B) op(0x69, "ld ", L, C) op(0x6a, "ld ", L, D) op(0x6b, "ld ", L, E) op(0x6c, "ld ", L, H) op(0x6d, "ld ", L, L) op(0x6e, "ld ", _L, IHL) op(0x6f, "ld ", L, A) op(0x70, "ld ", IHL, B) op(0x71, "ld ", IHL, C) op(0x72, "ld ", IHL, D) op(0x73, "ld ", IHL, E) op(0x74, "ld ", IHL, _H) op(0x75, "ld ", IHL, _L) op(0x76, "halt") op(0x77, "ld ", IHL, A) op(0x78, "ld ", A, B) op(0x79, "ld ", A, C) op(0x7a, "ld ", A, D) op(0x7b, "ld ", A, E) op(0x7c, "ld ", A, H) op(0x7d, "ld ", A, L) op(0x7e, "ld ", A, IHL) op(0x7f, "ld ", A, A) op(0x80, "add ", A, B) op(0x81, "add ", A, C) op(0x82, "add ", A, D) op(0x83, "add ", A, E) op(0x84, "add ", A, H) op(0x85, "add ", A, L) op(0x86, "add ", A, IHL) op(0x87, "add ", A, A) op(0x88, "adc ", A, B) op(0x89, "adc ", A, C) op(0x8a, "adc ", A, D) op(0x8b, "adc ", A, E) op(0x8c, "adc ", A, H) op(0x8d, "adc ", A, L) op(0x8e, "adc ", A, IHL) op(0x8f, "adc ", A, A) op(0x90, "sub ", A, B) op(0x91, "sub ", A, C) op(0x92, "sub ", A, D) op(0x93, "sub ", A, E) op(0x94, "sub ", A, H) op(0x95, "sub ", A, L) op(0x96, "sub ", A, IHL) op(0x97, "sub ", A, A) op(0x98, "sbc ", A, B) op(0x99, "sbc ", A, C) op(0x9a, "sbc ", A, D) op(0x9b, "sbc ", A, E) op(0x9c, "sbc ", A, H) op(0x9d, "sbc ", A, L) op(0x9e, "sbc ", A, IHL) op(0x9f, "sbc ", A, A) op(0xa0, "and ", A, B) op(0xa1, "and ", A, C) op(0xa2, "and ", A, D) op(0xa3, "and ", A, E) op(0xa4, "and ", A, H) op(0xa5, "and ", A, L) op(0xa6, "and ", A, IHL) op(0xa7, "and ", A, A) op(0xa8, "xor ", A, B) op(0xa9, "xor ", A, C) op(0xaa, "xor ", A, D) op(0xab, "xor ", A, E) op(0xac, "xor ", A, H) op(0xad, "xor ", A, L) op(0xae, "xor ", A, IHL) op(0xaf, "xor ", A, A) op(0xb0, "or ", A, B) op(0xb1, "or ", A, C) op(0xb2, "or ", A, D) op(0xb3, "or ", A, E) op(0xb4, "or ", A, H) op(0xb5, "or ", A, L) op(0xb6, "or ", A, IHL) op(0xb7, "or ", A, A) op(0xb8, "cp ", A, B) op(0xb9, "cp ", A, C) op(0xba, "cp ", A, D) op(0xbb, "cp ", A, E) op(0xbc, "cp ", A, H) op(0xbd, "cp ", A, L) op(0xbe, "cp ", A, IHL) op(0xbf, "cp ", A, A) op(0xc0, "ret ", "nz") op(0xc1, "pop ", BC) op(0xc2, "jp ", "nz", NN) op(0xc3, "jp ", NN) op(0xc4, "call", "nz", NN) op(0xc5, "push", BC) op(0xc6, "add ", A, N) op(0xc7, "rst ", "$0000") op(0xc8, "ret ", "z") op(0xc9, "ret ") op(0xca, "jp ", "z", NN) op(0xcb, "cb: ") op(0xcc, "call", "z", NN) op(0xcd, "call", NN) op(0xce, "adc ", A, N) op(0xcf, "rst ", "$0008") op(0xd0, "ret ", "nc") op(0xd1, "pop ", DE) op(0xd2, "jp ", "nc", NN) op(0xd3, "out ", IN, A) op(0xd4, "call", "nc", NN) op(0xd5, "push", DE) op(0xd6, "sub ", A, N) op(0xd7, "rst ", "$0010") op(0xd8, "ret ", "c") op(0xd9, "exx ") op(0xda, "jp ", "c", NN) op(0xdb, "in ", A, IN) op(0xdc, "call", "c", NN) op(0xdd, "ix: ") op(0xde, "sbc ", A, N) op(0xdf, "rst ", "$0018") op(0xe0, "ret ", "po") op(0xe1, "pop ", HL) op(0xe2, "jp ", "po", NN) op(0xe3, "ex ", ISP, HL) op(0xe4, "call", "po", NN) op(0xe5, "push", HL) op(0xe6, "and ", A, N) op(0xe7, "rst ", "$0020") op(0xe8, "ret ", "pe") op(0xe9, "jp ", HL) //officially jp (hl); but as read is not indirect, use jp hl op(0xea, "jp ", "pe", NN) op(0xeb, "ex ", DE, _HL) op(0xec, "call", "pe", NN) op(0xed, "ed: ") op(0xee, "xor ", A, N) op(0xef, "rst ", "$0028") op(0xf0, "ret ", "p") op(0xf1, "pop ", AF) op(0xf2, "jp ", "p", NN) op(0xf3, "di ") op(0xf4, "call", "p", NN) op(0xf5, "push", AF) op(0xf6, "or ", A, N) op(0xf7, "rst ", "$0030") op(0xf8, "ret ", "m") op(0xf9, "ld ", SP, HL) op(0xfa, "jp ", "m", NN) op(0xfb, "ei ") op(0xfc, "call", "m", NN) op(0xfd, "iy: ") op(0xfe, "cp ", A, N) op(0xff, "rst ", "$0038") } unreachable; } no_optimize auto Z80::disassembleCB(n16 pc, n8 prefix, n8 code) -> string { auto byte = [&] { return bus->read(pc++); }; auto word = [&] { n16 data = byte() << 0; return data | byte() << 8; }; auto branch = [&] { auto d = byte(); return pc + (i8)d; }; auto displace = [&] { if(!prefix) return string{}; auto d = (i8)byte(); return d >= 0 ? string{"+$", hex(d, 2L)} : string{"-$", hex(-d, 2L)}; }; if(prefix) { auto d = (i8)code; string ds = d >= 0 ? string{"+$", hex(d, 2L)} : string{"-$", hex(-d, 2L)}; return {"rlc (", HL, ds, ")"}; } switch(code) { op(0x00, "rlc ", B) op(0x01, "rlc ", C) op(0x02, "rlc ", D) op(0x03, "rlc ", E) op(0x04, "rlc ", H) op(0x05, "rlc ", L) op(0x06, "rlc ", IHL) op(0x07, "rlc ", A) op(0x08, "rrc ", B) op(0x09, "rrc ", C) op(0x0a, "rrc ", D) op(0x0b, "rrc ", E) op(0x0c, "rrc ", H) op(0x0d, "rrc ", L) op(0x0e, "rrc ", IHL) op(0x0f, "rrc ", A) op(0x10, "rl ", B) op(0x11, "rl ", C) op(0x12, "rl ", D) op(0x13, "rl ", E) op(0x14, "rl ", H) op(0x15, "rl ", L) op(0x16, "rl ", IHL) op(0x17, "rl ", A) op(0x18, "rr ", B) op(0x19, "rr ", C) op(0x1a, "rr ", D) op(0x1b, "rr ", E) op(0x1c, "rr ", H) op(0x1d, "rr ", L) op(0x1e, "rr ", IHL) op(0x1f, "rr ", A) op(0x20, "sla ", B) op(0x21, "sla ", C) op(0x22, "sla ", D) op(0x23, "sla ", E) op(0x24, "sla ", H) op(0x25, "sla ", L) op(0x26, "sla ", IHL) op(0x27, "sla ", A) op(0x28, "sra ", B) op(0x29, "sra ", C) op(0x2a, "sra ", D) op(0x2b, "sra ", E) op(0x2c, "sra ", H) op(0x2d, "sra ", L) op(0x2e, "sra ", IHL) op(0x2f, "sra ", A) op(0x30, "sll ", B) op(0x31, "sll ", C) op(0x32, "sll ", D) op(0x33, "sll ", E) op(0x34, "sll ", H) op(0x35, "sll ", L) op(0x36, "sll ", IHL) op(0x37, "sll ", A) op(0x38, "srl ", B) op(0x39, "srl ", C) op(0x3a, "srl ", D) op(0x3b, "srl ", E) op(0x3c, "srl ", H) op(0x3d, "srl ", L) op(0x3e, "srl ", IHL) op(0x3f, "srl ", A) op(0x40, "bit ", "0", B) op(0x41, "bit ", "0", C) op(0x42, "bit ", "0", D) op(0x43, "bit ", "0", E) op(0x44, "bit ", "0", H) op(0x45, "bit ", "0", L) op(0x46, "bit ", "0", IHL) op(0x47, "bit ", "0", A) op(0x48, "bit ", "1", B) op(0x49, "bit ", "1", C) op(0x4a, "bit ", "1", D) op(0x4b, "bit ", "1", E) op(0x4c, "bit ", "1", H) op(0x4d, "bit ", "1", L) op(0x4e, "bit ", "1", IHL) op(0x4f, "bit ", "1", A) op(0x50, "bit ", "2", B) op(0x51, "bit ", "2", C) op(0x52, "bit ", "2", D) op(0x53, "bit ", "2", E) op(0x54, "bit ", "2", H) op(0x55, "bit ", "2", L) op(0x56, "bit ", "2", IHL) op(0x57, "bit ", "2", A) op(0x58, "bit ", "3", B) op(0x59, "bit ", "3", C) op(0x5a, "bit ", "3", D) op(0x5b, "bit ", "3", E) op(0x5c, "bit ", "3", H) op(0x5d, "bit ", "3", L) op(0x5e, "bit ", "3", IHL) op(0x5f, "bit ", "3", A) op(0x60, "bit ", "4", B) op(0x61, "bit ", "4", C) op(0x62, "bit ", "4", D) op(0x63, "bit ", "4", E) op(0x64, "bit ", "4", H) op(0x65, "bit ", "4", L) op(0x66, "bit ", "4", IHL) op(0x67, "bit ", "4", A) op(0x68, "bit ", "5", B) op(0x69, "bit ", "5", C) op(0x6a, "bit ", "5", D) op(0x6b, "bit ", "5", E) op(0x6c, "bit ", "5", H) op(0x6d, "bit ", "5", L) op(0x6e, "bit ", "5", IHL) op(0x6f, "bit ", "5", A) op(0x70, "bit ", "6", B) op(0x71, "bit ", "6", C) op(0x72, "bit ", "6", D) op(0x73, "bit ", "6", E) op(0x74, "bit ", "6", H) op(0x75, "bit ", "6", L) op(0x76, "bit ", "6", IHL) op(0x77, "bit ", "6", A) op(0x78, "bit ", "7", B) op(0x79, "bit ", "7", C) op(0x7a, "bit ", "7", D) op(0x7b, "bit ", "7", E) op(0x7c, "bit ", "7", H) op(0x7d, "bit ", "7", L) op(0x7e, "bit ", "7", IHL) op(0x7f, "bit ", "7", A) op(0x80, "res ", "0", B) op(0x81, "res ", "0", C) op(0x82, "res ", "0", D) op(0x83, "res ", "0", E) op(0x84, "res ", "0", H) op(0x85, "res ", "0", L) op(0x86, "res ", "0", IHL) op(0x87, "res ", "0", A) op(0x88, "res ", "1", B) op(0x89, "res ", "1", C) op(0x8a, "res ", "1", D) op(0x8b, "res ", "1", E) op(0x8c, "res ", "1", H) op(0x8d, "res ", "1", L) op(0x8e, "res ", "1", IHL) op(0x8f, "res ", "1", A) op(0x90, "res ", "2", B) op(0x91, "res ", "2", C) op(0x92, "res ", "2", D) op(0x93, "res ", "2", E) op(0x94, "res ", "2", H) op(0x95, "res ", "2", L) op(0x96, "res ", "2", IHL) op(0x97, "res ", "2", A) op(0x98, "res ", "3", B) op(0x99, "res ", "3", C) op(0x9a, "res ", "3", D) op(0x9b, "res ", "3", E) op(0x9c, "res ", "3", H) op(0x9d, "res ", "3", L) op(0x9e, "res ", "3", IHL) op(0x9f, "res ", "3", A) op(0xa0, "res ", "4", B) op(0xa1, "res ", "4", C) op(0xa2, "res ", "4", D) op(0xa3, "res ", "4", E) op(0xa4, "res ", "4", H) op(0xa5, "res ", "4", L) op(0xa6, "res ", "4", IHL) op(0xa7, "res ", "4", A) op(0xa8, "res ", "5", B) op(0xa9, "res ", "5", C) op(0xaa, "res ", "5", D) op(0xab, "res ", "5", E) op(0xac, "res ", "5", H) op(0xad, "res ", "5", L) op(0xae, "res ", "5", IHL) op(0xaf, "res ", "5", A) op(0xb0, "res ", "6", B) op(0xb1, "res ", "6", C) op(0xb2, "res ", "6", D) op(0xb3, "res ", "6", E) op(0xb4, "res ", "6", H) op(0xb5, "res ", "6", L) op(0xb6, "res ", "6", IHL) op(0xb7, "res ", "6", A) op(0xb8, "res ", "7", B) op(0xb9, "res ", "7", C) op(0xba, "res ", "7", D) op(0xbb, "res ", "7", E) op(0xbc, "res ", "7", H) op(0xbd, "res ", "7", L) op(0xbe, "res ", "7", IHL) op(0xbf, "res ", "7", A) op(0xc0, "set ", "0", B) op(0xc1, "set ", "0", C) op(0xc2, "set ", "0", D) op(0xc3, "set ", "0", E) op(0xc4, "set ", "0", H) op(0xc5, "set ", "0", L) op(0xc6, "set ", "0", IHL) op(0xc7, "set ", "0", A) op(0xc8, "set ", "1", B) op(0xc9, "set ", "1", C) op(0xca, "set ", "1", D) op(0xcb, "set ", "1", E) op(0xcc, "set ", "1", H) op(0xcd, "set ", "1", L) op(0xce, "set ", "1", IHL) op(0xcf, "set ", "1", A) op(0xd0, "set ", "2", B) op(0xd1, "set ", "2", C) op(0xd2, "set ", "2", D) op(0xd3, "set ", "2", E) op(0xd4, "set ", "2", H) op(0xd5, "set ", "2", L) op(0xd6, "set ", "2", IHL) op(0xd7, "set ", "2", A) op(0xd8, "set ", "3", B) op(0xd9, "set ", "3", C) op(0xda, "set ", "3", D) op(0xdb, "set ", "3", E) op(0xdc, "set ", "3", H) op(0xdd, "set ", "3", L) op(0xde, "set ", "3", IHL) op(0xdf, "set ", "3", A) op(0xe0, "set ", "4", B) op(0xe1, "set ", "4", C) op(0xe2, "set ", "4", D) op(0xe3, "set ", "4", E) op(0xe4, "set ", "4", H) op(0xe5, "set ", "4", L) op(0xe6, "set ", "4", IHL) op(0xe7, "set ", "4", A) op(0xe8, "set ", "5", B) op(0xe9, "set ", "5", C) op(0xea, "set ", "5", D) op(0xeb, "set ", "5", E) op(0xec, "set ", "5", H) op(0xed, "set ", "5", L) op(0xee, "set ", "5", IHL) op(0xef, "set ", "5", A) op(0xf0, "set ", "6", B) op(0xf1, "set ", "6", C) op(0xf2, "set ", "6", D) op(0xf3, "set ", "6", E) op(0xf4, "set ", "6", H) op(0xf5, "set ", "6", L) op(0xf6, "set ", "6", IHL) op(0xf7, "set ", "6", A) op(0xf8, "set ", "7", B) op(0xf9, "set ", "7", C) op(0xfa, "set ", "7", D) op(0xfb, "set ", "7", E) op(0xfc, "set ", "7", H) op(0xfd, "set ", "7", L) op(0xfe, "set ", "7", IHL) op(0xff, "set ", "7", A) } unreachable; } no_optimize auto Z80::disassembleCBd(n16 pc, n8 prefix, i8 d, n8 code) -> string { auto displace = [&] { return d >= 0 ? string{"+$", hex(d, 2L)} : string{"-$", hex(-d, 2L)}; }; switch(code) { op(0x00, "rlc ", IHL, B) op(0x01, "rlc ", IHL, C) op(0x02, "rlc ", IHL, D) op(0x03, "rlc ", IHL, E) op(0x04, "rlc ", IHL, H) op(0x05, "rlc ", IHL, L) op(0x06, "rlc ", IHL) op(0x07, "rlc ", IHL, A) op(0x08, "rrc ", IHL, B) op(0x09, "rrc ", IHL, C) op(0x0a, "rrc ", IHL, D) op(0x0b, "rrc ", IHL, E) op(0x0c, "rrc ", IHL, H) op(0x0d, "rrc ", IHL, L) op(0x0e, "rrc ", IHL) op(0x0f, "rrc ", IHL, A) op(0x10, "rl ", IHL, B) op(0x11, "rl ", IHL, C) op(0x12, "rl ", IHL, D) op(0x13, "rl ", IHL, E) op(0x14, "rl ", IHL, H) op(0x15, "rl ", IHL, L) op(0x16, "rl ", IHL) op(0x17, "rl ", IHL, A) op(0x18, "rr ", IHL, B) op(0x19, "rr ", IHL, C) op(0x1a, "rr ", IHL, D) op(0x1b, "rr ", IHL, E) op(0x1c, "rr ", IHL, H) op(0x1d, "rr ", IHL, L) op(0x1e, "rr ", IHL) op(0x1f, "rr ", IHL, A) op(0x20, "sla ", IHL, B) op(0x21, "sla ", IHL, C) op(0x22, "sla ", IHL, D) op(0x23, "sla ", IHL, E) op(0x24, "sla ", IHL, H) op(0x25, "sla ", IHL, L) op(0x26, "sla ", IHL) op(0x27, "sla ", IHL, A) op(0x28, "sra ", IHL, B) op(0x29, "sra ", IHL, C) op(0x2a, "sra ", IHL, D) op(0x2b, "sra ", IHL, E) op(0x2c, "sra ", IHL, H) op(0x2d, "sra ", IHL, L) op(0x2e, "sra ", IHL) op(0x2f, "sra ", IHL, A) op(0x30, "sll ", IHL, B) op(0x31, "sll ", IHL, C) op(0x32, "sll ", IHL, D) op(0x33, "sll ", IHL, E) op(0x34, "sll ", IHL, H) op(0x35, "sll ", IHL, L) op(0x36, "sll ", IHL) op(0x37, "sll ", IHL, A) op(0x38, "srl ", IHL, B) op(0x39, "srl ", IHL, C) op(0x3a, "srl ", IHL, D) op(0x3b, "srl ", IHL, E) op(0x3c, "srl ", IHL, H) op(0x3d, "srl ", IHL, L) op(0x3e, "srl ", IHL) op(0x3f, "srl ", IHL, A) op(0x40, "bit ", "0", IHL, B) op(0x41, "bit ", "0", IHL, C) op(0x42, "bit ", "0", IHL, D) op(0x43, "bit ", "0", IHL, E) op(0x44, "bit ", "0", IHL, H) op(0x45, "bit ", "0", IHL, L) op(0x46, "bit ", "0", IHL) op(0x47, "bit ", "0", IHL, A) op(0x48, "bit ", "1", IHL, B) op(0x49, "bit ", "1", IHL, C) op(0x4a, "bit ", "1", IHL, D) op(0x4b, "bit ", "1", IHL, E) op(0x4c, "bit ", "1", IHL, H) op(0x4d, "bit ", "1", IHL, L) op(0x4e, "bit ", "1", IHL) op(0x4f, "bit ", "1", IHL, A) op(0x50, "bit ", "2", IHL, B) op(0x51, "bit ", "2", IHL, C) op(0x52, "bit ", "2", IHL, D) op(0x53, "bit ", "2", IHL, E) op(0x54, "bit ", "2", IHL, H) op(0x55, "bit ", "2", IHL, L) op(0x56, "bit ", "2", IHL) op(0x57, "bit ", "2", IHL, A) op(0x58, "bit ", "3", IHL, B) op(0x59, "bit ", "3", IHL, C) op(0x5a, "bit ", "3", IHL, D) op(0x5b, "bit ", "3", IHL, E) op(0x5c, "bit ", "3", IHL, H) op(0x5d, "bit ", "3", IHL, L) op(0x5e, "bit ", "3", IHL) op(0x5f, "bit ", "3", IHL, A) op(0x60, "bit ", "4", IHL, B) op(0x61, "bit ", "4", IHL, C) op(0x62, "bit ", "4", IHL, D) op(0x63, "bit ", "4", IHL, E) op(0x64, "bit ", "4", IHL, H) op(0x65, "bit ", "4", IHL, L) op(0x66, "bit ", "4", IHL) op(0x67, "bit ", "4", IHL, A) op(0x68, "bit ", "5", IHL, B) op(0x69, "bit ", "5", IHL, C) op(0x6a, "bit ", "5", IHL, D) op(0x6b, "bit ", "5", IHL, E) op(0x6c, "bit ", "5", IHL, H) op(0x6d, "bit ", "5", IHL, L) op(0x6e, "bit ", "5", IHL) op(0x6f, "bit ", "5", IHL, A) op(0x70, "bit ", "6", IHL, B) op(0x71, "bit ", "6", IHL, C) op(0x72, "bit ", "6", IHL, D) op(0x73, "bit ", "6", IHL, E) op(0x74, "bit ", "6", IHL, H) op(0x75, "bit ", "6", IHL, L) op(0x76, "bit ", "6", IHL) op(0x77, "bit ", "6", IHL, A) op(0x78, "bit ", "7", IHL, B) op(0x79, "bit ", "7", IHL, C) op(0x7a, "bit ", "7", IHL, D) op(0x7b, "bit ", "7", IHL, E) op(0x7c, "bit ", "7", IHL, H) op(0x7d, "bit ", "7", IHL, L) op(0x7e, "bit ", "7", IHL) op(0x7f, "bit ", "7", IHL, A) op(0x80, "res ", "0", IHL, B) op(0x81, "res ", "0", IHL, C) op(0x82, "res ", "0", IHL, D) op(0x83, "res ", "0", IHL, E) op(0x84, "res ", "0", IHL, H) op(0x85, "res ", "0", IHL, L) op(0x86, "res ", "0", IHL) op(0x87, "res ", "0", IHL, A) op(0x88, "res ", "1", IHL, B) op(0x89, "res ", "1", IHL, C) op(0x8a, "res ", "1", IHL, D) op(0x8b, "res ", "1", IHL, E) op(0x8c, "res ", "1", IHL, H) op(0x8d, "res ", "1", IHL, L) op(0x8e, "res ", "1", IHL) op(0x8f, "res ", "1", IHL, A) op(0x90, "res ", "2", IHL, B) op(0x91, "res ", "2", IHL, C) op(0x92, "res ", "2", IHL, D) op(0x93, "res ", "2", IHL, E) op(0x94, "res ", "2", IHL, H) op(0x95, "res ", "2", IHL, L) op(0x96, "res ", "2", IHL) op(0x97, "res ", "2", IHL, A) op(0x98, "res ", "3", IHL, B) op(0x99, "res ", "3", IHL, C) op(0x9a, "res ", "3", IHL, D) op(0x9b, "res ", "3", IHL, E) op(0x9c, "res ", "3", IHL, H) op(0x9d, "res ", "3", IHL, L) op(0x9e, "res ", "3", IHL) op(0x9f, "res ", "3", IHL, A) op(0xa0, "res ", "4", IHL, B) op(0xa1, "res ", "4", IHL, C) op(0xa2, "res ", "4", IHL, D) op(0xa3, "res ", "4", IHL, E) op(0xa4, "res ", "4", IHL, H) op(0xa5, "res ", "4", IHL, L) op(0xa6, "res ", "4", IHL) op(0xa7, "res ", "4", IHL, A) op(0xa8, "res ", "5", IHL, B) op(0xa9, "res ", "5", IHL, C) op(0xaa, "res ", "5", IHL, D) op(0xab, "res ", "5", IHL, E) op(0xac, "res ", "5", IHL, H) op(0xad, "res ", "5", IHL, L) op(0xae, "res ", "5", IHL) op(0xaf, "res ", "5", IHL, A) op(0xb0, "res ", "6", IHL, B) op(0xb1, "res ", "6", IHL, C) op(0xb2, "res ", "6", IHL, D) op(0xb3, "res ", "6", IHL, E) op(0xb4, "res ", "6", IHL, H) op(0xb5, "res ", "6", IHL, L) op(0xb6, "res ", "6", IHL) op(0xb7, "res ", "6", IHL, A) op(0xb8, "res ", "7", IHL, B) op(0xb9, "res ", "7", IHL, C) op(0xba, "res ", "7", IHL, D) op(0xbb, "res ", "7", IHL, E) op(0xbc, "res ", "7", IHL, H) op(0xbd, "res ", "7", IHL, L) op(0xbe, "res ", "7", IHL) op(0xbf, "res ", "7", IHL, A) op(0xc0, "set ", "0", IHL, B) op(0xc1, "set ", "0", IHL, C) op(0xc2, "set ", "0", IHL, D) op(0xc3, "set ", "0", IHL, E) op(0xc4, "set ", "0", IHL, H) op(0xc5, "set ", "0", IHL, L) op(0xc6, "set ", "0", IHL) op(0xc7, "set ", "0", IHL, A) op(0xc8, "set ", "1", IHL, B) op(0xc9, "set ", "1", IHL, C) op(0xca, "set ", "1", IHL, D) op(0xcb, "set ", "1", IHL, E) op(0xcc, "set ", "1", IHL, H) op(0xcd, "set ", "1", IHL, L) op(0xce, "set ", "1", IHL) op(0xcf, "set ", "1", IHL, A) op(0xd0, "set ", "2", IHL, B) op(0xd1, "set ", "2", IHL, C) op(0xd2, "set ", "2", IHL, D) op(0xd3, "set ", "2", IHL, E) op(0xd4, "set ", "2", IHL, H) op(0xd5, "set ", "2", IHL, L) op(0xd6, "set ", "2", IHL) op(0xd7, "set ", "2", IHL, A) op(0xd8, "set ", "3", IHL, B) op(0xd9, "set ", "3", IHL, C) op(0xda, "set ", "3", IHL, D) op(0xdb, "set ", "3", IHL, E) op(0xdc, "set ", "3", IHL, H) op(0xdd, "set ", "3", IHL, L) op(0xde, "set ", "3", IHL) op(0xdf, "set ", "3", IHL, A) op(0xe0, "set ", "4", IHL, B) op(0xe1, "set ", "4", IHL, C) op(0xe2, "set ", "4", IHL, D) op(0xe3, "set ", "4", IHL, E) op(0xe4, "set ", "4", IHL, H) op(0xe5, "set ", "4", IHL, L) op(0xe6, "set ", "4", IHL) op(0xe7, "set ", "4", IHL, A) op(0xe8, "set ", "5", IHL, B) op(0xe9, "set ", "5", IHL, C) op(0xea, "set ", "5", IHL, D) op(0xeb, "set ", "5", IHL, E) op(0xec, "set ", "5", IHL, H) op(0xed, "set ", "5", IHL, L) op(0xee, "set ", "5", IHL) op(0xef, "set ", "5", IHL, A) op(0xf0, "set ", "6", IHL, B) op(0xf1, "set ", "6", IHL, C) op(0xf2, "set ", "6", IHL, D) op(0xf3, "set ", "6", IHL, E) op(0xf4, "set ", "6", IHL, H) op(0xf5, "set ", "6", IHL, L) op(0xf6, "set ", "6", IHL) op(0xf7, "set ", "6", IHL, A) op(0xf8, "set ", "7", IHL, B) op(0xf9, "set ", "7", IHL, C) op(0xfa, "set ", "7", IHL, D) op(0xfb, "set ", "7", IHL, E) op(0xfc, "set ", "7", IHL, H) op(0xfd, "set ", "7", IHL, L) op(0xfe, "set ", "7", IHL) op(0xff, "set ", "7", IHL, A) } unreachable; } no_optimize auto Z80::disassembleED(n16 pc, n8 prefix, n8 code) -> string { auto byte = [&] { return bus->read(pc++); }; auto word = [&] { n16 data = byte() << 0; return data | byte() << 8; }; auto branch = [&] { auto d = byte(); return pc + (i8)d; }; auto displace = [&] { if(!prefix) return string{}; auto d = (i8)byte(); return d >= 0 ? string{"+$", hex(d, 2L)} : string{"-$", hex(-d, 2L)}; }; switch(code) { op(0x40, "in ", B, IC) op(0x41, "out ", IC, B) op(0x42, "sbc ", HL, BC) op(0x43, "ld ", INN, BC) op(0x44, "neg ") op(0x45, "retn") op(0x46, "im ", "0") op(0x47, "ld ", I, A) op(0x48, "in ", C, IC) op(0x49, "out ", IC, C) op(0x4a, "adc ", HL, BC) op(0x4b, "ld ", BC, INN) op(0x4c, "neg ") op(0x4d, "reti") op(0x4e, "im ", "0") op(0x4f, "ld ", R, A) op(0x50, "in ", D, IC) op(0x51, "out ", IC, D) op(0x52, "sbc ", HL, DE) op(0x53, "ld ", INN, DE) op(0x54, "neg ") op(0x55, "retn") op(0x56, "im ", "1") op(0x57, "ld ", A, I) op(0x58, "in ", E, IC) op(0x59, "out ", IC, E) op(0x5a, "adc ", HL, DE) op(0x5b, "ld ", DE, INN) op(0x5c, "neg ") op(0x5d, "reti") op(0x5e, "im ", "2") op(0x5f, "ld ", A, R) op(0x60, "in ", H, IC) op(0x61, "out ", IC, H) op(0x62, "sbc ", HL, HL) op(0x63, "ld ", INN, HL) op(0x64, "neg ") op(0x65, "retn") op(0x66, "im ", "0") op(0x67, "rrd ") op(0x68, "in ", L, IC) op(0x69, "out ", IC, L) op(0x6a, "adc ", HL, HL) op(0x6b, "ld ", HL, INN) op(0x6c, "neg ") op(0x6d, "reti") op(0x6e, "im ", "0") op(0x6f, "rld ") op(0x70, "in ", IC) op(0x71, "out ", IC) op(0x72, "sbc ", HL, SP) op(0x73, "ld ", INN, SP) op(0x74, "neg ") op(0x75, "retn") op(0x76, "im ", "1") op(0x77, "nop ") op(0x78, "in ", A, IC) op(0x79, "out ", IC, A) op(0x7a, "adc ", HL, SP) op(0x7b, "ld ", SP, INN) op(0x7c, "neg ") op(0x7d, "reti") op(0x7e, "im ", "2") op(0x7f, "nop ") op(0xa0, "ldi ") op(0xa1, "cpi ") op(0xa2, "ini ") op(0xa3, "outi") op(0xa8, "ldd ") op(0xa9, "cpd ") op(0xaa, "ind ") op(0xab, "outd") op(0xb0, "ldir") op(0xb1, "cpir") op(0xb2, "inir") op(0xb3, "otir") op(0xb8, "lddr") op(0xb9, "cpdr") op(0xba, "indr") op(0xbb, "otdr") } return {"nop ", "(ed ", hex(code, 2L), ")"}; } #undef op #undef N #undef IN #undef NN #undef INN #undef REL #undef A #undef F #undef B #undef C #undef D #undef E #undef H #undef L #undef _H #undef _L #undef _HL #undef AF #undef BC #undef DE #undef HL #undef AF_ #undef BC_ #undef DE_ #undef HL_ #undef SP #undef PC #undef I #undef R #undef IC #undef IBC #undef IDE #undef IHL #undef ISP ares-126/ares/component/processor/z80/instruction.cpp000066400000000000000000000571371415063341600230170ustar00rootroot00000000000000auto Z80::instruction() -> void { EI = 0; P = 0; if(HALT) { return wait(1); } n8 code; while(true) { R.bit(0,6)++; code = opcode(); if(code == 0xdd) { prefix = Prefix::ix; continue; } if(code == 0xfd) { prefix = Prefix::iy; continue; } break; } if(code == 0xcb && prefix != Prefix::hl) { WZ = HL + (i8)operand(); wait(2); //+1 fetch, +1 memory read //R is not incremented here instructionCBd(WZ, opcode()); } else if(code == 0xcb) { R.bit(0,6)++; instructionCB(opcode()); } else if(code == 0xed) { R.bit(0,6)++; instructionED(opcode()); } else { instruction(code); } prefix = Prefix::hl; } #define op(id, name, ...) case id: return instruction##name(__VA_ARGS__); auto Z80::instruction(n8 code) -> void { switch(code) { op(0x00, NOP) op(0x01, LD_rr_nn, BC) op(0x02, LD_irr_a, BC) op(0x03, INC_rr, BC) op(0x04, INC_r, B) op(0x05, DEC_r, B) op(0x06, LD_r_n, B) op(0x07, RLCA) op(0x08, EX_rr_rr, AF, AF_) op(0x09, ADD_hl_rr, BC) op(0x0a, LD_a_irr, BC) op(0x0b, DEC_rr, BC) op(0x0c, INC_r, C) op(0x0d, DEC_r, C) op(0x0e, LD_r_n, C) op(0x0f, RRCA) op(0x10, DJNZ_e) op(0x11, LD_rr_nn, DE) op(0x12, LD_irr_a, DE) op(0x13, INC_rr, DE) op(0x14, INC_r, D) op(0x15, DEC_r, D) op(0x16, LD_r_n, D) op(0x17, RLA) op(0x18, JR_c_e, 1) op(0x19, ADD_hl_rr, DE) op(0x1a, LD_a_irr, DE) op(0x1b, DEC_rr, DE) op(0x1c, INC_r, E) op(0x1d, DEC_r, E) op(0x1e, LD_r_n, E) op(0x1f, RRA) op(0x20, JR_c_e, ZF == 0) op(0x21, LD_rr_nn, HL) op(0x22, LD_inn_rr, HL) op(0x23, INC_rr, HL) op(0x24, INC_r, H) op(0x25, DEC_r, H) op(0x26, LD_r_n, H) op(0x27, DAA) op(0x28, JR_c_e, ZF == 1) op(0x29, ADD_hl_rr, HL) op(0x2a, LD_rr_inn, HL) op(0x2b, DEC_rr, HL) op(0x2c, INC_r, L) op(0x2d, DEC_r, L) op(0x2e, LD_r_n, L) op(0x2f, CPL) op(0x30, JR_c_e, CF == 0) op(0x31, LD_rr_nn, SP) op(0x32, LD_inn_a) op(0x33, INC_rr, SP) op(0x34, INC_irr, HL) op(0x35, DEC_irr, HL) op(0x36, LD_irr_n, HL) op(0x37, SCF) op(0x38, JR_c_e, CF == 1) op(0x39, ADD_hl_rr, SP) op(0x3a, LD_a_inn) op(0x3b, DEC_rr, SP) op(0x3c, INC_r, A) op(0x3d, DEC_r, A) op(0x3e, LD_r_n, A) op(0x3f, CCF) op(0x40, LD_r_r, B, B) op(0x41, LD_r_r, B, C) op(0x42, LD_r_r, B, D) op(0x43, LD_r_r, B, E) op(0x44, LD_r_r, B, H) op(0x45, LD_r_r, B, L) op(0x46, LD_r_irr, B, HL) op(0x47, LD_r_r, B, A) op(0x48, LD_r_r, C, B) op(0x49, LD_r_r, C, C) op(0x4a, LD_r_r, C, D) op(0x4b, LD_r_r, C, E) op(0x4c, LD_r_r, C, H) op(0x4d, LD_r_r, C, L) op(0x4e, LD_r_irr, C, HL) op(0x4f, LD_r_r, C, A) op(0x50, LD_r_r, D, B) op(0x51, LD_r_r, D, C) op(0x52, LD_r_r, D, D) op(0x53, LD_r_r, D, E) op(0x54, LD_r_r, D, H) op(0x55, LD_r_r, D, L) op(0x56, LD_r_irr, D, HL) op(0x57, LD_r_r, D, A) op(0x58, LD_r_r, E, B) op(0x59, LD_r_r, E, C) op(0x5a, LD_r_r, E, D) op(0x5b, LD_r_r, E, E) op(0x5c, LD_r_r, E, H) op(0x5d, LD_r_r, E, L) op(0x5e, LD_r_irr, E, HL) op(0x5f, LD_r_r, E, A) op(0x60, LD_r_r, H, B) op(0x61, LD_r_r, H, C) op(0x62, LD_r_r, H, D) op(0x63, LD_r_r, H, E) op(0x64, LD_r_r, H, H) op(0x65, LD_r_r, H, L) op(0x66, LD_r_irr, _H, HL) op(0x67, LD_r_r, H, A) op(0x68, LD_r_r, L, B) op(0x69, LD_r_r, L, C) op(0x6a, LD_r_r, L, D) op(0x6b, LD_r_r, L, E) op(0x6c, LD_r_r, L, H) op(0x6d, LD_r_r, L, L) op(0x6e, LD_r_irr, _L, HL) op(0x6f, LD_r_r, L, A) op(0x70, LD_irr_r, HL, B) op(0x71, LD_irr_r, HL, C) op(0x72, LD_irr_r, HL, D) op(0x73, LD_irr_r, HL, E) op(0x74, LD_irr_r, HL, _H) op(0x75, LD_irr_r, HL, _L) op(0x76, HALT) op(0x77, LD_irr_r, HL, A) op(0x78, LD_r_r, A, B) op(0x79, LD_r_r, A, C) op(0x7a, LD_r_r, A, D) op(0x7b, LD_r_r, A, E) op(0x7c, LD_r_r, A, H) op(0x7d, LD_r_r, A, L) op(0x7e, LD_r_irr, A, HL) op(0x7f, LD_r_r, A, A) op(0x80, ADD_a_r, B) op(0x81, ADD_a_r, C) op(0x82, ADD_a_r, D) op(0x83, ADD_a_r, E) op(0x84, ADD_a_r, H) op(0x85, ADD_a_r, L) op(0x86, ADD_a_irr, HL) op(0x87, ADD_a_r, A) op(0x88, ADC_a_r, B) op(0x89, ADC_a_r, C) op(0x8a, ADC_a_r, D) op(0x8b, ADC_a_r, E) op(0x8c, ADC_a_r, H) op(0x8d, ADC_a_r, L) op(0x8e, ADC_a_irr, HL) op(0x8f, ADC_a_r, A) op(0x90, SUB_a_r, B) op(0x91, SUB_a_r, C) op(0x92, SUB_a_r, D) op(0x93, SUB_a_r, E) op(0x94, SUB_a_r, H) op(0x95, SUB_a_r, L) op(0x96, SUB_a_irr, HL) op(0x97, SUB_a_r, A) op(0x98, SBC_a_r, B) op(0x99, SBC_a_r, C) op(0x9a, SBC_a_r, D) op(0x9b, SBC_a_r, E) op(0x9c, SBC_a_r, H) op(0x9d, SBC_a_r, L) op(0x9e, SBC_a_irr, HL) op(0x9f, SBC_a_r, A) op(0xa0, AND_a_r, B) op(0xa1, AND_a_r, C) op(0xa2, AND_a_r, D) op(0xa3, AND_a_r, E) op(0xa4, AND_a_r, H) op(0xa5, AND_a_r, L) op(0xa6, AND_a_irr, HL) op(0xa7, AND_a_r, A) op(0xa8, XOR_a_r, B) op(0xa9, XOR_a_r, C) op(0xaa, XOR_a_r, D) op(0xab, XOR_a_r, E) op(0xac, XOR_a_r, H) op(0xad, XOR_a_r, L) op(0xae, XOR_a_irr, HL) op(0xaf, XOR_a_r, A) op(0xb0, OR_a_r, B) op(0xb1, OR_a_r, C) op(0xb2, OR_a_r, D) op(0xb3, OR_a_r, E) op(0xb4, OR_a_r, H) op(0xb5, OR_a_r, L) op(0xb6, OR_a_irr, HL) op(0xb7, OR_a_r, A) op(0xb8, CP_a_r, B) op(0xb9, CP_a_r, C) op(0xba, CP_a_r, D) op(0xbb, CP_a_r, E) op(0xbc, CP_a_r, H) op(0xbd, CP_a_r, L) op(0xbe, CP_a_irr, HL) op(0xbf, CP_a_r, A) op(0xc0, RET_c, ZF == 0) op(0xc1, POP_rr, BC) op(0xc2, JP_c_nn, ZF == 0) op(0xc3, JP_c_nn, 1) op(0xc4, CALL_c_nn, ZF == 0) op(0xc5, PUSH_rr, BC) op(0xc6, ADD_a_n) op(0xc7, RST_o, 0) op(0xc8, RET_c, ZF == 1) op(0xc9, RET) op(0xca, JP_c_nn, ZF == 1) //op(0xcb, cb:) op(0xcc, CALL_c_nn, ZF == 1) op(0xcd, CALL_nn) op(0xce, ADC_a_n) op(0xcf, RST_o, 1) op(0xd0, RET_c, CF == 0) op(0xd1, POP_rr, DE) op(0xd2, JP_c_nn, CF == 0) op(0xd3, OUT_in_a) op(0xd4, CALL_c_nn, CF == 0) op(0xd5, PUSH_rr, DE) op(0xd6, SUB_a_n) op(0xd7, RST_o, 2) op(0xd8, RET_c, CF == 1) op(0xd9, EXX) op(0xda, JP_c_nn, CF == 1) op(0xdb, IN_a_in) op(0xdc, CALL_c_nn, CF == 1) //op(0xdd, ix:) op(0xde, SBC_a_n) op(0xdf, RST_o, 3) op(0xe0, RET_c, PF == 0) op(0xe1, POP_rr, HL) op(0xe2, JP_c_nn, PF == 0) op(0xe3, EX_irr_rr, SP, HL) op(0xe4, CALL_c_nn, PF == 0) op(0xe5, PUSH_rr, HL) op(0xe6, AND_a_n) op(0xe7, RST_o, 4) op(0xe8, RET_c, PF == 1) op(0xe9, JP_rr, HL) op(0xea, JP_c_nn, PF == 1) op(0xeb, EX_rr_rr, DE, _HL) op(0xec, CALL_c_nn, PF == 1) //op(0xed, ed:) op(0xee, XOR_a_n) op(0xef, RST_o, 5) op(0xf0, RET_c, SF == 0) op(0xf1, POP_rr, AF) op(0xf2, JP_c_nn, SF == 0) op(0xf3, DI) op(0xf4, CALL_c_nn, SF == 0) op(0xf5, PUSH_rr, AF) op(0xf6, OR_a_n) op(0xf7, RST_o, 6) op(0xf8, RET_c, SF == 1) op(0xf9, LD_sp_rr, HL) op(0xfa, JP_c_nn, SF == 1) op(0xfb, EI) op(0xfc, CALL_c_nn, SF == 1) //op(0xfd, iy:) op(0xfe, CP_a_n) op(0xff, RST_o, 7) } } auto Z80::instructionCB(n8 code) -> void { switch(code) { op(0x00, RLC_r, B) op(0x01, RLC_r, C) op(0x02, RLC_r, D) op(0x03, RLC_r, E) op(0x04, RLC_r, H) op(0x05, RLC_r, L) op(0x06, RLC_irr, _HL) op(0x07, RLC_r, A) op(0x08, RRC_r, B) op(0x09, RRC_r, C) op(0x0a, RRC_r, D) op(0x0b, RRC_r, E) op(0x0c, RRC_r, H) op(0x0d, RRC_r, L) op(0x0e, RRC_irr, _HL) op(0x0f, RRC_r, A) op(0x10, RL_r, B) op(0x11, RL_r, C) op(0x12, RL_r, D) op(0x13, RL_r, E) op(0x14, RL_r, H) op(0x15, RL_r, L) op(0x16, RL_irr, _HL) op(0x17, RL_r, A) op(0x18, RR_r, B) op(0x19, RR_r, C) op(0x1a, RR_r, D) op(0x1b, RR_r, E) op(0x1c, RR_r, H) op(0x1d, RR_r, L) op(0x1e, RR_irr, _HL) op(0x1f, RR_r, A) op(0x20, SLA_r, B) op(0x21, SLA_r, C) op(0x22, SLA_r, D) op(0x23, SLA_r, E) op(0x24, SLA_r, H) op(0x25, SLA_r, L) op(0x26, SLA_irr, _HL) op(0x27, SLA_r, A) op(0x28, SRA_r, B) op(0x29, SRA_r, C) op(0x2a, SRA_r, D) op(0x2b, SRA_r, E) op(0x2c, SRA_r, H) op(0x2d, SRA_r, L) op(0x2e, SRA_irr, _HL) op(0x2f, SRA_r, A) op(0x30, SLL_r, B) op(0x31, SLL_r, C) op(0x32, SLL_r, D) op(0x33, SLL_r, E) op(0x34, SLL_r, H) op(0x35, SLL_r, L) op(0x36, SLL_irr, _HL) op(0x37, SLL_r, A) op(0x38, SRL_r, B) op(0x39, SRL_r, C) op(0x3a, SRL_r, D) op(0x3b, SRL_r, E) op(0x3c, SRL_r, H) op(0x3d, SRL_r, L) op(0x3e, SRL_irr, _HL) op(0x3f, SRL_r, A) op(0x40, BIT_o_r, 0, B) op(0x41, BIT_o_r, 0, C) op(0x42, BIT_o_r, 0, D) op(0x43, BIT_o_r, 0, E) op(0x44, BIT_o_r, 0, H) op(0x45, BIT_o_r, 0, L) op(0x46, BIT_o_irr, 0, _HL) op(0x47, BIT_o_r, 0, A) op(0x48, BIT_o_r, 1, B) op(0x49, BIT_o_r, 1, C) op(0x4a, BIT_o_r, 1, D) op(0x4b, BIT_o_r, 1, E) op(0x4c, BIT_o_r, 1, H) op(0x4d, BIT_o_r, 1, L) op(0x4e, BIT_o_irr, 1, _HL) op(0x4f, BIT_o_r, 1, A) op(0x50, BIT_o_r, 2, B) op(0x51, BIT_o_r, 2, C) op(0x52, BIT_o_r, 2, D) op(0x53, BIT_o_r, 2, E) op(0x54, BIT_o_r, 2, H) op(0x55, BIT_o_r, 2, L) op(0x56, BIT_o_irr, 2, _HL) op(0x57, BIT_o_r, 2, A) op(0x58, BIT_o_r, 3, B) op(0x59, BIT_o_r, 3, C) op(0x5a, BIT_o_r, 3, D) op(0x5b, BIT_o_r, 3, E) op(0x5c, BIT_o_r, 3, H) op(0x5d, BIT_o_r, 3, L) op(0x5e, BIT_o_irr, 3, _HL) op(0x5f, BIT_o_r, 3, A) op(0x60, BIT_o_r, 4, B) op(0x61, BIT_o_r, 4, C) op(0x62, BIT_o_r, 4, D) op(0x63, BIT_o_r, 4, E) op(0x64, BIT_o_r, 4, H) op(0x65, BIT_o_r, 4, L) op(0x66, BIT_o_irr, 4, _HL) op(0x67, BIT_o_r, 4, A) op(0x68, BIT_o_r, 5, B) op(0x69, BIT_o_r, 5, C) op(0x6a, BIT_o_r, 5, D) op(0x6b, BIT_o_r, 5, E) op(0x6c, BIT_o_r, 5, H) op(0x6d, BIT_o_r, 5, L) op(0x6e, BIT_o_irr, 5, _HL) op(0x6f, BIT_o_r, 5, A) op(0x70, BIT_o_r, 6, B) op(0x71, BIT_o_r, 6, C) op(0x72, BIT_o_r, 6, D) op(0x73, BIT_o_r, 6, E) op(0x74, BIT_o_r, 6, H) op(0x75, BIT_o_r, 6, L) op(0x76, BIT_o_irr, 6, _HL) op(0x77, BIT_o_r, 6, A) op(0x78, BIT_o_r, 7, B) op(0x79, BIT_o_r, 7, C) op(0x7a, BIT_o_r, 7, D) op(0x7b, BIT_o_r, 7, E) op(0x7c, BIT_o_r, 7, H) op(0x7d, BIT_o_r, 7, L) op(0x7e, BIT_o_irr, 7, _HL) op(0x7f, BIT_o_r, 7, A) op(0x80, RES_o_r, 0, B) op(0x81, RES_o_r, 0, C) op(0x82, RES_o_r, 0, D) op(0x83, RES_o_r, 0, E) op(0x84, RES_o_r, 0, H) op(0x85, RES_o_r, 0, L) op(0x86, RES_o_irr, 0, _HL) op(0x87, RES_o_r, 0, A) op(0x88, RES_o_r, 1, B) op(0x89, RES_o_r, 1, C) op(0x8a, RES_o_r, 1, D) op(0x8b, RES_o_r, 1, E) op(0x8c, RES_o_r, 1, H) op(0x8d, RES_o_r, 1, L) op(0x8e, RES_o_irr, 1, _HL) op(0x8f, RES_o_r, 1, A) op(0x90, RES_o_r, 2, B) op(0x91, RES_o_r, 2, C) op(0x92, RES_o_r, 2, D) op(0x93, RES_o_r, 2, E) op(0x94, RES_o_r, 2, H) op(0x95, RES_o_r, 2, L) op(0x96, RES_o_irr, 2, _HL) op(0x97, RES_o_r, 2, A) op(0x98, RES_o_r, 3, B) op(0x99, RES_o_r, 3, C) op(0x9a, RES_o_r, 3, D) op(0x9b, RES_o_r, 3, E) op(0x9c, RES_o_r, 3, H) op(0x9d, RES_o_r, 3, L) op(0x9e, RES_o_irr, 3, _HL) op(0x9f, RES_o_r, 3, A) op(0xa0, RES_o_r, 4, B) op(0xa1, RES_o_r, 4, C) op(0xa2, RES_o_r, 4, D) op(0xa3, RES_o_r, 4, E) op(0xa4, RES_o_r, 4, H) op(0xa5, RES_o_r, 4, L) op(0xa6, RES_o_irr, 4, _HL) op(0xa7, RES_o_r, 4, A) op(0xa8, RES_o_r, 5, B) op(0xa9, RES_o_r, 5, C) op(0xaa, RES_o_r, 5, D) op(0xab, RES_o_r, 5, E) op(0xac, RES_o_r, 5, H) op(0xad, RES_o_r, 5, L) op(0xae, RES_o_irr, 5, _HL) op(0xaf, RES_o_r, 5, A) op(0xb0, RES_o_r, 6, B) op(0xb1, RES_o_r, 6, C) op(0xb2, RES_o_r, 6, D) op(0xb3, RES_o_r, 6, E) op(0xb4, RES_o_r, 6, H) op(0xb5, RES_o_r, 6, L) op(0xb6, RES_o_irr, 6, _HL) op(0xb7, RES_o_r, 6, A) op(0xb8, RES_o_r, 7, B) op(0xb9, RES_o_r, 7, C) op(0xba, RES_o_r, 7, D) op(0xbb, RES_o_r, 7, E) op(0xbc, RES_o_r, 7, H) op(0xbd, RES_o_r, 7, L) op(0xbe, RES_o_irr, 7, _HL) op(0xbf, RES_o_r, 7, A) op(0xc0, SET_o_r, 0, B) op(0xc1, SET_o_r, 0, C) op(0xc2, SET_o_r, 0, D) op(0xc3, SET_o_r, 0, E) op(0xc4, SET_o_r, 0, H) op(0xc5, SET_o_r, 0, L) op(0xc6, SET_o_irr, 0, _HL) op(0xc7, SET_o_r, 0, A) op(0xc8, SET_o_r, 1, B) op(0xc9, SET_o_r, 1, C) op(0xca, SET_o_r, 1, D) op(0xcb, SET_o_r, 1, E) op(0xcc, SET_o_r, 1, H) op(0xcd, SET_o_r, 1, L) op(0xce, SET_o_irr, 1, _HL) op(0xcf, SET_o_r, 1, A) op(0xd0, SET_o_r, 2, B) op(0xd1, SET_o_r, 2, C) op(0xd2, SET_o_r, 2, D) op(0xd3, SET_o_r, 2, E) op(0xd4, SET_o_r, 2, H) op(0xd5, SET_o_r, 2, L) op(0xd6, SET_o_irr, 2, _HL) op(0xd7, SET_o_r, 2, A) op(0xd8, SET_o_r, 3, B) op(0xd9, SET_o_r, 3, C) op(0xda, SET_o_r, 3, D) op(0xdb, SET_o_r, 3, E) op(0xdc, SET_o_r, 3, H) op(0xdd, SET_o_r, 3, L) op(0xde, SET_o_irr, 3, _HL) op(0xdf, SET_o_r, 3, A) op(0xe0, SET_o_r, 4, B) op(0xe1, SET_o_r, 4, C) op(0xe2, SET_o_r, 4, D) op(0xe3, SET_o_r, 4, E) op(0xe4, SET_o_r, 4, H) op(0xe5, SET_o_r, 4, L) op(0xe6, SET_o_irr, 4, _HL) op(0xe7, SET_o_r, 4, A) op(0xe8, SET_o_r, 5, B) op(0xe9, SET_o_r, 5, C) op(0xea, SET_o_r, 5, D) op(0xeb, SET_o_r, 5, E) op(0xec, SET_o_r, 5, H) op(0xed, SET_o_r, 5, L) op(0xee, SET_o_irr, 5, _HL) op(0xef, SET_o_r, 5, A) op(0xf0, SET_o_r, 6, B) op(0xf1, SET_o_r, 6, C) op(0xf2, SET_o_r, 6, D) op(0xf3, SET_o_r, 6, E) op(0xf4, SET_o_r, 6, H) op(0xf5, SET_o_r, 6, L) op(0xf6, SET_o_irr, 6, _HL) op(0xf7, SET_o_r, 6, A) op(0xf8, SET_o_r, 7, B) op(0xf9, SET_o_r, 7, C) op(0xfa, SET_o_r, 7, D) op(0xfb, SET_o_r, 7, E) op(0xfc, SET_o_r, 7, H) op(0xfd, SET_o_r, 7, L) op(0xfe, SET_o_irr, 7, _HL) op(0xff, SET_o_r, 7, A) } } auto Z80::instructionCBd(n16 addr, n8 code) -> void { n8 _; switch(code) { op(0x00, RLC_irr_r, addr, B) op(0x01, RLC_irr_r, addr, C) op(0x02, RLC_irr_r, addr, D) op(0x03, RLC_irr_r, addr, E) op(0x04, RLC_irr_r, addr, H) op(0x05, RLC_irr_r, addr, L) op(0x06, RLC_irr_r, addr, _) op(0x07, RLC_irr_r, addr, A) op(0x08, RRC_irr_r, addr, B) op(0x09, RRC_irr_r, addr, C) op(0x0a, RRC_irr_r, addr, D) op(0x0b, RRC_irr_r, addr, E) op(0x0c, RRC_irr_r, addr, H) op(0x0d, RRC_irr_r, addr, L) op(0x0e, RRC_irr_r, addr, _) op(0x0f, RRC_irr_r, addr, A) op(0x10, RL_irr_r, addr, B) op(0x11, RL_irr_r, addr, C) op(0x12, RL_irr_r, addr, D) op(0x13, RL_irr_r, addr, E) op(0x14, RL_irr_r, addr, H) op(0x15, RL_irr_r, addr, L) op(0x16, RL_irr_r, addr, _) op(0x17, RL_irr_r, addr, A) op(0x18, RR_irr_r, addr, B) op(0x19, RR_irr_r, addr, C) op(0x1a, RR_irr_r, addr, D) op(0x1b, RR_irr_r, addr, E) op(0x1c, RR_irr_r, addr, H) op(0x1d, RR_irr_r, addr, L) op(0x1e, RR_irr_r, addr, _) op(0x1f, RR_irr_r, addr, A) op(0x20, SLA_irr_r, addr, B) op(0x21, SLA_irr_r, addr, C) op(0x22, SLA_irr_r, addr, D) op(0x23, SLA_irr_r, addr, E) op(0x24, SLA_irr_r, addr, H) op(0x25, SLA_irr_r, addr, L) op(0x26, SLA_irr_r, addr, _) op(0x27, SLA_irr_r, addr, A) op(0x28, SRA_irr_r, addr, B) op(0x29, SRA_irr_r, addr, C) op(0x2a, SRA_irr_r, addr, D) op(0x2b, SRA_irr_r, addr, E) op(0x2c, SRA_irr_r, addr, H) op(0x2d, SRA_irr_r, addr, L) op(0x2e, SRA_irr_r, addr, _) op(0x2f, SRA_irr_r, addr, A) op(0x30, SLL_irr_r, addr, B) op(0x31, SLL_irr_r, addr, C) op(0x32, SLL_irr_r, addr, D) op(0x33, SLL_irr_r, addr, E) op(0x34, SLL_irr_r, addr, H) op(0x35, SLL_irr_r, addr, L) op(0x36, SLL_irr_r, addr, _) op(0x37, SLL_irr_r, addr, A) op(0x38, SRL_irr_r, addr, B) op(0x39, SRL_irr_r, addr, C) op(0x3a, SRL_irr_r, addr, D) op(0x3b, SRL_irr_r, addr, E) op(0x3c, SRL_irr_r, addr, H) op(0x3d, SRL_irr_r, addr, L) op(0x3e, SRL_irr_r, addr, _) op(0x3f, SRL_irr_r, addr, A) op(0x40, BIT_o_irr_r, 0, addr, B) op(0x41, BIT_o_irr_r, 0, addr, C) op(0x42, BIT_o_irr_r, 0, addr, D) op(0x43, BIT_o_irr_r, 0, addr, E) op(0x44, BIT_o_irr_r, 0, addr, H) op(0x45, BIT_o_irr_r, 0, addr, L) op(0x46, BIT_o_irr_r, 0, addr, _) op(0x47, BIT_o_irr_r, 0, addr, A) op(0x48, BIT_o_irr_r, 1, addr, B) op(0x49, BIT_o_irr_r, 1, addr, C) op(0x4a, BIT_o_irr_r, 1, addr, D) op(0x4b, BIT_o_irr_r, 1, addr, E) op(0x4c, BIT_o_irr_r, 1, addr, H) op(0x4d, BIT_o_irr_r, 1, addr, L) op(0x4e, BIT_o_irr_r, 1, addr, _) op(0x4f, BIT_o_irr_r, 1, addr, A) op(0x50, BIT_o_irr_r, 2, addr, B) op(0x51, BIT_o_irr_r, 2, addr, C) op(0x52, BIT_o_irr_r, 2, addr, D) op(0x53, BIT_o_irr_r, 2, addr, E) op(0x54, BIT_o_irr_r, 2, addr, H) op(0x55, BIT_o_irr_r, 2, addr, L) op(0x56, BIT_o_irr_r, 2, addr, _) op(0x57, BIT_o_irr_r, 2, addr, A) op(0x58, BIT_o_irr_r, 3, addr, B) op(0x59, BIT_o_irr_r, 3, addr, C) op(0x5a, BIT_o_irr_r, 3, addr, D) op(0x5b, BIT_o_irr_r, 3, addr, E) op(0x5c, BIT_o_irr_r, 3, addr, H) op(0x5d, BIT_o_irr_r, 3, addr, L) op(0x5e, BIT_o_irr_r, 3, addr, _) op(0x5f, BIT_o_irr_r, 3, addr, A) op(0x60, BIT_o_irr_r, 4, addr, B) op(0x61, BIT_o_irr_r, 4, addr, C) op(0x62, BIT_o_irr_r, 4, addr, D) op(0x63, BIT_o_irr_r, 4, addr, E) op(0x64, BIT_o_irr_r, 4, addr, H) op(0x65, BIT_o_irr_r, 4, addr, L) op(0x66, BIT_o_irr_r, 4, addr, _) op(0x67, BIT_o_irr_r, 4, addr, A) op(0x68, BIT_o_irr_r, 5, addr, B) op(0x69, BIT_o_irr_r, 5, addr, C) op(0x6a, BIT_o_irr_r, 5, addr, D) op(0x6b, BIT_o_irr_r, 5, addr, E) op(0x6c, BIT_o_irr_r, 5, addr, H) op(0x6d, BIT_o_irr_r, 5, addr, L) op(0x6e, BIT_o_irr_r, 5, addr, _) op(0x6f, BIT_o_irr_r, 5, addr, A) op(0x70, BIT_o_irr_r, 6, addr, B) op(0x71, BIT_o_irr_r, 6, addr, C) op(0x72, BIT_o_irr_r, 6, addr, D) op(0x73, BIT_o_irr_r, 6, addr, E) op(0x74, BIT_o_irr_r, 6, addr, H) op(0x75, BIT_o_irr_r, 6, addr, L) op(0x76, BIT_o_irr_r, 6, addr, _) op(0x77, BIT_o_irr_r, 6, addr, A) op(0x78, BIT_o_irr_r, 7, addr, B) op(0x79, BIT_o_irr_r, 7, addr, C) op(0x7a, BIT_o_irr_r, 7, addr, D) op(0x7b, BIT_o_irr_r, 7, addr, E) op(0x7c, BIT_o_irr_r, 7, addr, H) op(0x7d, BIT_o_irr_r, 7, addr, L) op(0x7e, BIT_o_irr_r, 7, addr, _) op(0x7f, BIT_o_irr_r, 7, addr, A) op(0x80, RES_o_irr_r, 0, addr, B) op(0x81, RES_o_irr_r, 0, addr, C) op(0x82, RES_o_irr_r, 0, addr, D) op(0x83, RES_o_irr_r, 0, addr, E) op(0x84, RES_o_irr_r, 0, addr, H) op(0x85, RES_o_irr_r, 0, addr, L) op(0x86, RES_o_irr_r, 0, addr, _) op(0x87, RES_o_irr_r, 0, addr, A) op(0x88, RES_o_irr_r, 1, addr, B) op(0x89, RES_o_irr_r, 1, addr, C) op(0x8a, RES_o_irr_r, 1, addr, D) op(0x8b, RES_o_irr_r, 1, addr, E) op(0x8c, RES_o_irr_r, 1, addr, H) op(0x8d, RES_o_irr_r, 1, addr, L) op(0x8e, RES_o_irr_r, 1, addr, _) op(0x8f, RES_o_irr_r, 1, addr, A) op(0x90, RES_o_irr_r, 2, addr, B) op(0x91, RES_o_irr_r, 2, addr, C) op(0x92, RES_o_irr_r, 2, addr, D) op(0x93, RES_o_irr_r, 2, addr, E) op(0x94, RES_o_irr_r, 2, addr, H) op(0x95, RES_o_irr_r, 2, addr, L) op(0x96, RES_o_irr_r, 2, addr, _) op(0x97, RES_o_irr_r, 2, addr, A) op(0x98, RES_o_irr_r, 3, addr, B) op(0x99, RES_o_irr_r, 3, addr, C) op(0x9a, RES_o_irr_r, 3, addr, D) op(0x9b, RES_o_irr_r, 3, addr, E) op(0x9c, RES_o_irr_r, 3, addr, H) op(0x9d, RES_o_irr_r, 3, addr, L) op(0x9e, RES_o_irr_r, 3, addr, _) op(0x9f, RES_o_irr_r, 3, addr, A) op(0xa0, RES_o_irr_r, 4, addr, B) op(0xa1, RES_o_irr_r, 4, addr, C) op(0xa2, RES_o_irr_r, 4, addr, D) op(0xa3, RES_o_irr_r, 4, addr, E) op(0xa4, RES_o_irr_r, 4, addr, H) op(0xa5, RES_o_irr_r, 4, addr, L) op(0xa6, RES_o_irr_r, 4, addr, _) op(0xa7, RES_o_irr_r, 4, addr, A) op(0xa8, RES_o_irr_r, 5, addr, B) op(0xa9, RES_o_irr_r, 5, addr, C) op(0xaa, RES_o_irr_r, 5, addr, D) op(0xab, RES_o_irr_r, 5, addr, E) op(0xac, RES_o_irr_r, 5, addr, H) op(0xad, RES_o_irr_r, 5, addr, L) op(0xae, RES_o_irr_r, 5, addr, _) op(0xaf, RES_o_irr_r, 5, addr, A) op(0xb0, RES_o_irr_r, 6, addr, B) op(0xb1, RES_o_irr_r, 6, addr, C) op(0xb2, RES_o_irr_r, 6, addr, D) op(0xb3, RES_o_irr_r, 6, addr, E) op(0xb4, RES_o_irr_r, 6, addr, H) op(0xb5, RES_o_irr_r, 6, addr, L) op(0xb6, RES_o_irr_r, 6, addr, _) op(0xb7, RES_o_irr_r, 6, addr, A) op(0xb8, RES_o_irr_r, 7, addr, B) op(0xb9, RES_o_irr_r, 7, addr, C) op(0xba, RES_o_irr_r, 7, addr, D) op(0xbb, RES_o_irr_r, 7, addr, E) op(0xbc, RES_o_irr_r, 7, addr, H) op(0xbd, RES_o_irr_r, 7, addr, L) op(0xbe, RES_o_irr_r, 7, addr, _) op(0xbf, RES_o_irr_r, 7, addr, A) op(0xc0, SET_o_irr_r, 0, addr, B) op(0xc1, SET_o_irr_r, 0, addr, C) op(0xc2, SET_o_irr_r, 0, addr, D) op(0xc3, SET_o_irr_r, 0, addr, E) op(0xc4, SET_o_irr_r, 0, addr, H) op(0xc5, SET_o_irr_r, 0, addr, L) op(0xc6, SET_o_irr_r, 0, addr, _) op(0xc7, SET_o_irr_r, 0, addr, A) op(0xc8, SET_o_irr_r, 1, addr, B) op(0xc9, SET_o_irr_r, 1, addr, C) op(0xca, SET_o_irr_r, 1, addr, D) op(0xcb, SET_o_irr_r, 1, addr, E) op(0xcc, SET_o_irr_r, 1, addr, H) op(0xcd, SET_o_irr_r, 1, addr, L) op(0xce, SET_o_irr_r, 1, addr, _) op(0xcf, SET_o_irr_r, 1, addr, A) op(0xd0, SET_o_irr_r, 2, addr, B) op(0xd1, SET_o_irr_r, 2, addr, C) op(0xd2, SET_o_irr_r, 2, addr, D) op(0xd3, SET_o_irr_r, 2, addr, E) op(0xd4, SET_o_irr_r, 2, addr, H) op(0xd5, SET_o_irr_r, 2, addr, L) op(0xd6, SET_o_irr_r, 2, addr, _) op(0xd7, SET_o_irr_r, 2, addr, A) op(0xd8, SET_o_irr_r, 3, addr, B) op(0xd9, SET_o_irr_r, 3, addr, C) op(0xda, SET_o_irr_r, 3, addr, D) op(0xdb, SET_o_irr_r, 3, addr, E) op(0xdc, SET_o_irr_r, 3, addr, H) op(0xdd, SET_o_irr_r, 3, addr, L) op(0xde, SET_o_irr_r, 3, addr, _) op(0xdf, SET_o_irr_r, 3, addr, A) op(0xe0, SET_o_irr_r, 4, addr, B) op(0xe1, SET_o_irr_r, 4, addr, C) op(0xe2, SET_o_irr_r, 4, addr, D) op(0xe3, SET_o_irr_r, 4, addr, E) op(0xe4, SET_o_irr_r, 4, addr, H) op(0xe5, SET_o_irr_r, 4, addr, L) op(0xe6, SET_o_irr_r, 4, addr, _) op(0xe7, SET_o_irr_r, 4, addr, A) op(0xe8, SET_o_irr_r, 5, addr, B) op(0xe9, SET_o_irr_r, 5, addr, C) op(0xea, SET_o_irr_r, 5, addr, D) op(0xeb, SET_o_irr_r, 5, addr, E) op(0xec, SET_o_irr_r, 5, addr, H) op(0xed, SET_o_irr_r, 5, addr, L) op(0xee, SET_o_irr_r, 5, addr, _) op(0xef, SET_o_irr_r, 5, addr, A) op(0xf0, SET_o_irr_r, 6, addr, B) op(0xf1, SET_o_irr_r, 6, addr, C) op(0xf2, SET_o_irr_r, 6, addr, D) op(0xf3, SET_o_irr_r, 6, addr, E) op(0xf4, SET_o_irr_r, 6, addr, H) op(0xf5, SET_o_irr_r, 6, addr, L) op(0xf6, SET_o_irr_r, 6, addr, _) op(0xf7, SET_o_irr_r, 6, addr, A) op(0xf8, SET_o_irr_r, 7, addr, B) op(0xf9, SET_o_irr_r, 7, addr, C) op(0xfa, SET_o_irr_r, 7, addr, D) op(0xfb, SET_o_irr_r, 7, addr, E) op(0xfc, SET_o_irr_r, 7, addr, H) op(0xfd, SET_o_irr_r, 7, addr, L) op(0xfe, SET_o_irr_r, 7, addr, _) op(0xff, SET_o_irr_r, 7, addr, A) } } auto Z80::instructionED(n8 code) -> void { switch(code) { op(0x40, IN_r_ic, B) op(0x41, OUT_ic_r, B) op(0x42, SBC_hl_rr, BC) op(0x43, LD_inn_rr, BC) op(0x44, NEG) op(0x45, RETN) op(0x46, IM_o, 0) op(0x47, LD_r_r1, I, A) op(0x48, IN_r_ic, C) op(0x49, OUT_ic_r, C) op(0x4a, ADC_hl_rr, BC) op(0x4b, LD_rr_inn, BC) op(0x4c, NEG) op(0x4d, RETI) op(0x4e, IM_o, 0) op(0x4f, LD_r_r1, R, A) op(0x50, IN_r_ic, D) op(0x51, OUT_ic_r, D) op(0x52, SBC_hl_rr, DE) op(0x53, LD_inn_rr, DE) op(0x54, NEG) op(0x55, RETN) op(0x56, IM_o, 1) op(0x57, LD_r_r2, A, I) op(0x58, IN_r_ic, E) op(0x59, OUT_ic_r, E) op(0x5a, ADC_hl_rr, DE) op(0x5b, LD_rr_inn, DE) op(0x5c, NEG) op(0x5d, RETI) op(0x5e, IM_o, 2) op(0x5f, LD_r_r2, A, R) op(0x60, IN_r_ic, H) op(0x61, OUT_ic_r, H) op(0x62, SBC_hl_rr, HL) op(0x63, LD_inn_rr, HL) op(0x64, NEG) op(0x65, RETN) op(0x66, IM_o, 0) op(0x67, RRD) op(0x68, IN_r_ic, L) op(0x69, OUT_ic_r, L) op(0x6a, ADC_hl_rr, HL) op(0x6b, LD_rr_inn, HL) op(0x6c, NEG) op(0x6d, RETI) op(0x6e, IM_o, 0) op(0x6f, RLD) op(0x70, IN_ic) op(0x71, OUT_ic) op(0x72, SBC_hl_rr, SP) op(0x73, LD_inn_rr, SP) op(0x74, NEG) op(0x75, RETN) op(0x76, IM_o, 1) op(0x77, NOP) op(0x78, IN_r_ic, A) op(0x79, OUT_ic_r, A) op(0x7a, ADC_hl_rr, SP) op(0x7b, LD_rr_inn, SP) op(0x7c, NEG) op(0x7d, RETI) op(0x7e, IM_o, 2) op(0x7f, NOP) op(0xa0, LDI) op(0xa1, CPI) op(0xa2, INI) op(0xa3, OUTI) op(0xa8, LDD) op(0xa9, CPD) op(0xaa, IND) op(0xab, OUTD) op(0xb0, LDIR) op(0xb1, CPIR) op(0xb2, INIR) op(0xb3, OTIR) op(0xb8, LDDR) op(0xb9, CPDR) op(0xba, INDR) op(0xbb, OTDR) } //undefined instructions are NOP return instructionNOP(); } #undef op ares-126/ares/component/processor/z80/instructions.cpp000066400000000000000000000370121415063341600231700ustar00rootroot00000000000000//legend: // a = register A // c = condition // e = relative operand // in = (operand) // inn = (operand-word) // irr = (register-word) // o = opcode bits // n = operand // nn = operand-word // r = register auto Z80::instructionADC_a_irr(n16& x) -> void { Q = 1; A = ADD(A, read(displace(x)), CF); } auto Z80::instructionADC_a_n() -> void { Q = 1; A = ADD(A, operand(), CF); } auto Z80::instructionADC_a_r(n8& x) -> void { Q = 1; A = ADD(A, x, CF); } auto Z80::instructionADC_hl_rr(n16& x) -> void { Q = 1; WZ = HL + 1; wait(4); auto lo = ADD(HL >> 0, x >> 0, CF); wait(3); auto hi = ADD(HL >> 8, x >> 8, CF); HL = hi << 8 | lo << 0; ZF = HL == 0; } auto Z80::instructionADD_a_irr(n16& x) -> void { Q = 1; A = ADD(A, read(displace(x))); } auto Z80::instructionADD_a_n() -> void { Q = 1; A = ADD(A, operand()); } auto Z80::instructionADD_a_r(n8& x) -> void { Q = 1; A = ADD(A, x); } auto Z80::instructionADD_hl_rr(n16& x) -> void { Q = 1; WZ = HL + 1; bool vf = VF, zf = ZF, sf = SF; wait(4); auto lo = ADD(HL >> 0, x >> 0); wait(3); auto hi = ADD(HL >> 8, x >> 8, CF); HL = hi << 8 | lo << 0; VF = vf, ZF = zf, SF = sf; //restore unaffected flags } auto Z80::instructionAND_a_irr(n16& x) -> void { Q = 1; A = AND(A, read(displace(x))); } auto Z80::instructionAND_a_n() -> void { Q = 1; A = AND(A, operand()); } auto Z80::instructionAND_a_r(n8& x) -> void { Q = 1; A = AND(A, x); } auto Z80::instructionBIT_o_irr(n3 bit, n16& addr) -> void { Q = 1; BIT(bit, read(addr)); XF = WZH.bit(3); YF = WZH.bit(5); } auto Z80::instructionBIT_o_irr_r(n3 bit, n16& addr, n8& x) -> void { Q = 1; x = BIT(bit, read(addr)); XF = WZH.bit(3); YF = WZH.bit(5); } auto Z80::instructionBIT_o_r(n3 bit, n8& x) -> void { Q = 1; BIT(bit, x); } auto Z80::instructionCALL_c_nn(bool c) -> void { Q = 0; WZ = operands(); if(!c) return; wait(1); push(PC); PC = WZ; } auto Z80::instructionCALL_nn() -> void { Q = 0; WZ = operands(); wait(1); push(PC); PC = WZ; } auto Z80::instructionCCF() -> void { if(Q) XF = 0, YF = 0; HF = CF; CF = !CF; NF = 0; XF = XF | A.bit(3); YF = YF | A.bit(5); Q = 1; } auto Z80::instructionCP_a_irr(n16& x) -> void { Q = 1; CP(A, read(displace(x))); } auto Z80::instructionCP_a_n() -> void { Q = 1; CP(A, operand()); } auto Z80::instructionCP_a_r(n8& x) -> void { Q = 1; CP(A, x); } auto Z80::instructionCPD() -> void { Q = 1; WZ--; n8 data = read(_HL--); wait(5); n8 n = A - data; NF = 1; VF = --BC != 0; HF = n8(A ^ data ^ n).bit(4); XF = n8(n - HF).bit(3); YF = n8(n - HF).bit(1); ZF = n == 0; SF = n.bit(7); } auto Z80::instructionCPDR() -> void { Q = 1; instructionCPD(); if(!BC || ZF) return; wait(5); PC -= 2; WZ = PC + 1; } auto Z80::instructionCPI() -> void { Q = 1; WZ++; n8 data = read(_HL++); wait(5); n8 n = A - data; NF = 1; VF = --BC != 0; HF = n8(A ^ data ^ n).bit(4); XF = n8(n - HF).bit(3); YF = n8(n - HF).bit(1); ZF = n == 0; SF = n.bit(7); } auto Z80::instructionCPIR() -> void { Q = 1; instructionCPI(); if(!BC || ZF) return; wait(5); PC -= 2; WZ = PC + 1; } auto Z80::instructionCPL() -> void { Q = 1; A = ~A; NF = 1; XF = A.bit(3); HF = 1; YF = A.bit(5); } auto Z80::instructionDAA() -> void { Q = 1; auto a = A; if(CF || (A.bit(0,7) > 0x99)) { A += NF ? -0x60 : 0x60; CF = 1; } if(HF || (A.bit(0,3) > 0x09)) { A += NF ? -0x06 : 0x06; } PF = parity(A); XF = A.bit(3); HF = n8(A ^ a).bit(4); YF = A.bit(5); ZF = A == 0; SF = A.bit(7); } auto Z80::instructionDEC_irr(n16& x) -> void { Q = 1; auto addr = displace(x); auto data = read(addr); wait(1); write(addr, DEC(data)); } auto Z80::instructionDEC_r(n8& x) -> void { Q = 1; x = DEC(x); } auto Z80::instructionDEC_rr(n16& x) -> void { Q = 0; wait(2); x--; } auto Z80::instructionDI() -> void { Q = 0; IFF1 = 0; IFF2 = 0; } auto Z80::instructionDJNZ_e() -> void { Q = 0; wait(1); auto displacement = (i8)operand(); if(!--B) return; wait(5); WZ = PC + displacement; PC = WZ; } auto Z80::instructionEI() -> void { Q = 0; IFF1 = 1; IFF2 = 1; EI = 1; //ignore maskable interrupts until after the next instruction } auto Z80::instructionEX_irr_rr(n16& x, n16& y) -> void { Q = 0; WZL = read(x + 0); WZH = read(x + 1); write(x + 0, y >> 0); write(x + 1, y >> 8); y = WZ; } auto Z80::instructionEX_rr_rr(n16& x, n16& y) -> void { Q = 0; swap(x, y); } auto Z80::instructionEXX() -> void { Q = 0; swap(BC, BC_); swap(DE, DE_); swap(_HL, HL_); } auto Z80::instructionHALT() -> void { Q = 0; HALT = 1; } auto Z80::instructionIM_o(n2 code) -> void { Q = 0; wait(4); IM = code; } auto Z80::instructionIN_a_in() -> void { Q = 0; WZL = operand(); WZH = A; A = in(WZ++); } auto Z80::instructionIN_r_ic(n8& x) -> void { Q = 1; x = IN(in(BC)); WZ = BC + 1; } auto Z80::instructionIN_ic() -> void { Q = 1; IN(in(BC)); WZ = BC + 1; } auto Z80::instructionINC_irr(n16& x) -> void { Q = 1; auto addr = displace(x); auto data = read(addr); wait(1); write(addr, INC(data)); } auto Z80::instructionINC_r(n8& x) -> void { Q = 1; x = INC(x); } auto Z80::instructionINC_rr(n16& x) -> void { Q = 0; wait(2); x++; } auto Z80::instructionIND() -> void { Q = 1; WZ = BC - 1; wait(1); auto data = in(BC); B--; write(_HL--, data); CF = n9(n8(C - 1) + data).bit(8); NF = data.bit(7); PF = parity(n8(C - 1) + data & 7 ^ B); XF = B.bit(3); HF = CF; YF = B.bit(5); ZF = B == 0; SF = B.bit(7); } auto Z80::instructionINDR() -> void { Q = 1; instructionIND(); if(!B) return; wait(5); PC -= 2; } auto Z80::instructionINI() -> void { Q = 1; WZ = BC + 1; wait(1); auto data = in(BC); B--; write(_HL++, data); CF = n9(n8(C + 1) + data).bit(8); NF = data.bit(7); PF = parity(n8(C + 1) + data & 7 ^ B); XF = B.bit(3); HF = CF; YF = B.bit(5); ZF = B == 0; SF = B.bit(7); } auto Z80::instructionINIR() -> void { Q = 1; instructionINI(); if(!B) return; wait(5); PC -= 2; } auto Z80::instructionJP_c_nn(bool c) -> void { Q = 0; WZ = operands(); if(c) PC = WZ; } auto Z80::instructionJP_rr(n16& x) -> void { Q = 0; PC = x; } auto Z80::instructionJR_c_e(bool c) -> void { Q = 0; auto displacement = (i8)operand(); if(!c) return; wait(5); WZ = PC + displacement; PC = WZ; } auto Z80::instructionLD_a_inn() -> void { Q = 0; WZ = operands(); A = read(WZ++); } auto Z80::instructionLD_a_irr(n16& x) -> void { Q = 0; WZ = x; A = read(displace(WZ)); WZ++; } auto Z80::instructionLD_inn_a() -> void { Q = 0; WZ = operands(); write(WZ++, A); WZH = A; } auto Z80::instructionLD_inn_rr(n16& x) -> void { Q = 0; WZ = operands(); write(WZ + 0, x >> 0); write(WZ + 1, x >> 8); WZ++; } auto Z80::instructionLD_irr_a(n16& x) -> void { Q = 0; WZ = x; write(displace(WZ), A); WZL++; WZH = A; } auto Z80::instructionLD_irr_n(n16& x) -> void { Q = 0; auto addr = displace(x); write(addr, operand()); } auto Z80::instructionLD_irr_r(n16& x, n8& y) -> void { Q = 0; write(displace(x), y); } auto Z80::instructionLD_r_n(n8& x) -> void { Q = 0; x = operand(); } auto Z80::instructionLD_r_irr(n8& x, n16& y) -> void { Q = 0; x = read(displace(y)); } auto Z80::instructionLD_r_r(n8& x, n8& y) -> void { Q = 0; x = y; } //LD to/from I/R requires an extra T-cycle auto Z80::instructionLD_r_r1(n8& x, n8& y) -> void { Q = 0; wait(1); x = y; } //LD from I/R sets status flags auto Z80::instructionLD_r_r2(n8& x, n8& y) -> void { Q = 1; wait(1); x = y; NF = 0; PF = IFF2; XF = x.bit(3); HF = 0; YF = x.bit(5); ZF = x == 0; SF = x.bit(7); P = mosfet == MOSFET::NMOS; } auto Z80::instructionLD_rr_inn(n16& x) -> void { Q = 0; auto addr = operands(); x.byte(0) = read(addr + 0); x.byte(1) = read(addr + 1); } auto Z80::instructionLD_rr_nn(n16& x) -> void { Q = 0; x = operands(); } auto Z80::instructionLD_sp_rr(n16& x) -> void { Q = 0; wait(2); SP = x; } auto Z80::instructionLDD() -> void { Q = 1; auto data = read(_HL--); write(DE--, data); wait(2); NF = 0; VF = --BC != 0; XF = n8(A + data).bit(3); HF = 0; YF = n8(A + data).bit(1); } auto Z80::instructionLDDR() -> void { Q = 1; instructionLDD(); if(!BC) return; wait(5); PC -= 2; WZ = PC + 1; } auto Z80::instructionLDI() -> void { Q = 1; auto data = read(_HL++); write(DE++, data); wait(2); NF = 0; VF = --BC != 0; XF = n8(A + data).bit(3); HF = 0; YF = n8(A + data).bit(1); } auto Z80::instructionLDIR() -> void { Q = 1; instructionLDI(); if(!BC) return; wait(5); PC -= 2; WZ = PC + 1; } auto Z80::instructionNEG() -> void { Q = 1; A = SUB(0, A); } auto Z80::instructionNOP() -> void { Q = 0; } auto Z80::instructionOR_a_irr(n16& x) -> void { Q = 1; A = OR(A, read(displace(x))); } auto Z80::instructionOR_a_n() -> void { Q = 1; A = OR(A, operand()); } auto Z80::instructionOR_a_r(n8& x) -> void { Q = 1; A = OR(A, x); } auto Z80::instructionOTDR() -> void { Q = 1; instructionOUTD(); if(!B) return; wait(5); PC -= 2; } auto Z80::instructionOTIR() -> void { Q = 1; instructionOUTI(); if(!B) return; wait(5); PC -= 2; } auto Z80::instructionOUT_ic_r(n8& x) -> void { Q = 0; out(BC, x); WZ = BC + 1; } auto Z80::instructionOUT_ic() -> void { Q = 0; if(mosfet == MOSFET::NMOS) out(BC, 0x00); if(mosfet == MOSFET::CMOS) out(BC, 0xff); } auto Z80::instructionOUT_in_a() -> void { Q = 0; WZL = operand(); WZH = A; out(WZ, A); WZL++; } auto Z80::instructionOUTD() -> void { Q = 1; wait(1); auto data = read(_HL--); B--; out(BC, data); WZ = BC - 1; CF = n9(L + data).bit(8); NF = data.bit(7); PF = parity(L + data & 7 ^ B); XF = B.bit(3); HF = CF; YF = B.bit(5); ZF = B == 0; SF = B.bit(7); } auto Z80::instructionOUTI() -> void { Q = 1; wait(1); auto data = read(_HL++); B--; out(BC, data); WZ = BC + 1; CF = n9(L + data).bit(8); NF = data.bit(7); PF = parity(L + data & 7 ^ B); XF = B.bit(3); HF = CF; YF = B.bit(5); ZF = B == 0; SF = B.bit(7); } //note: even though "pop af" affects flags, it does not set Q auto Z80::instructionPOP_rr(n16& x) -> void { Q = 0; x = pop(); } auto Z80::instructionPUSH_rr(n16& x) -> void { Q = 0; wait(1); push(x); } auto Z80::instructionRES_o_irr(n3 bit, n16& addr) -> void { Q = 1; write(addr, RES(bit, read(addr))); } auto Z80::instructionRES_o_irr_r(n3 bit, n16& addr, n8& x) -> void { Q = 1; write(addr, x = RES(bit, read(addr))); } auto Z80::instructionRES_o_r(n3 bit, n8& x) -> void { Q = 1; x = RES(bit, x); } auto Z80::instructionRET() -> void { Q = 0; wait(1); WZ = pop(); PC = WZ; } auto Z80::instructionRET_c(bool c) -> void { Q = 0; wait(1); if(!c) return; WZ = pop(); PC = WZ; } auto Z80::instructionRETI() -> void { Q = 0; WZ = pop(); PC = WZ; IFF1 = IFF2; } auto Z80::instructionRETN() -> void { Q = 0; WZ = pop(); PC = WZ; IFF1 = IFF2; } auto Z80::instructionRL_irr(n16& addr) -> void { Q = 1; write(addr, RL(read(addr))); } auto Z80::instructionRL_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = RL(read(addr))); } auto Z80::instructionRL_r(n8& x) -> void { Q = 1; x = RL(x); } auto Z80::instructionRLA() -> void { Q = 1; bool c = A.bit(7); A = A << 1 | CF; CF = c; NF = 0; XF = A.bit(3); HF = 0; YF = A.bit(5); } auto Z80::instructionRLC_irr(n16& addr) -> void { Q = 1; write(addr, RLC(read(addr))); } auto Z80::instructionRLC_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = RLC(read(addr))); } auto Z80::instructionRLC_r(n8& x) -> void { Q = 1; x = RLC(x); } auto Z80::instructionRLCA() -> void { Q = 1; bool c = A.bit(7); A = A << 1 | c; CF = c; NF = 0; XF = A.bit(3); HF = 0; YF = A.bit(5); } auto Z80::instructionRLD() -> void { Q = 1; WZ = HL + 1; auto data = read(HL); wait(1); write(HL, (data << 4) | (A & 0x0f)); wait(3); A = (A & 0xf0) | (data >> 4); NF = 0; PF = parity(A); XF = A.bit(3); HF = 0; YF = A.bit(5); ZF = A == 0; SF = A.bit(7); } auto Z80::instructionRR_irr(n16& addr) -> void { Q = 1; write(addr, RR(read(addr))); } auto Z80::instructionRR_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = RR(read(addr))); } auto Z80::instructionRR_r(n8& x) -> void { Q = 1; x = RR(x); } auto Z80::instructionRRA() -> void { Q = 1; bool c = A.bit(0); A = CF << 7 | A >> 1; CF = c; NF = 0; XF = A.bit(3); HF = 0; YF = A.bit(5); } auto Z80::instructionRRC_irr(n16& addr) -> void { Q = 1; write(addr, RRC(read(addr))); } auto Z80::instructionRRC_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = RRC(read(addr))); } auto Z80::instructionRRC_r(n8& x) -> void { Q = 1; x = RRC(x); } auto Z80::instructionRRCA() -> void { Q = 1; bool c = A.bit(0); A = c << 7 | A >> 1; CF = c; NF = 0; XF = A.bit(3); HF = 0; YF = A.bit(5); } auto Z80::instructionRRD() -> void { Q = 1; WZ = HL + 1; auto data = read(HL); wait(1); write(HL, (data >> 4) | (A << 4)); wait(3); A = (A & 0xf0) | (data & 0x0f); NF = 0; PF = parity(A); XF = A.bit(3); HF = 0; YF = A.bit(5); ZF = A == 0; SF = A.bit(7); } auto Z80::instructionRST_o(n3 vector) -> void { Q = 0; wait(1); push(PC); WZ = vector << 3; PC = WZ; } auto Z80::instructionSBC_a_irr(n16& x) -> void { Q = 1; A = SUB(A, read(displace(x)), CF); } auto Z80::instructionSBC_a_n() -> void { Q = 1; A = SUB(A, operand(), CF); } auto Z80::instructionSBC_a_r(n8& x) -> void { Q = 1; A = SUB(A, x, CF); } auto Z80::instructionSBC_hl_rr(n16& x) -> void { Q = 1; WZ = HL + 1; wait(4); auto lo = SUB(HL >> 0, x >> 0, CF); wait(3); auto hi = SUB(HL >> 8, x >> 8, CF); HL = hi << 8 | lo << 0; ZF = HL == 0; } auto Z80::instructionSCF() -> void { if(Q) XF = 0, YF = 0; CF = 1; NF = 0; XF = XF | A.bit(3); HF = 0; YF = YF | A.bit(5); Q = 1; } auto Z80::instructionSET_o_irr(n3 bit, n16& addr) -> void { Q = 1; write(addr, SET(bit, read(addr))); } auto Z80::instructionSET_o_irr_r(n3 bit, n16& addr, n8& x) -> void { Q = 1; write(addr, x = SET(bit, read(addr))); } auto Z80::instructionSET_o_r(n3 bit, n8& x) -> void { Q = 1; x = SET(bit, x); } auto Z80::instructionSLA_irr(n16& addr) -> void { Q = 1; write(addr, SLA(read(addr))); } auto Z80::instructionSLA_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = SLA(read(addr))); } auto Z80::instructionSLA_r(n8& x) -> void { Q = 1; x = SLA(x); } auto Z80::instructionSLL_irr(n16& addr) -> void { Q = 1; write(addr, SLL(read(addr))); } auto Z80::instructionSLL_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = SLL(read(addr))); } auto Z80::instructionSLL_r(n8& x) -> void { Q = 1; x = SLL(x); } auto Z80::instructionSRA_irr(n16& addr) -> void { Q = 1; write(addr, SRA(read(addr))); } auto Z80::instructionSRA_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = SRA(read(addr))); } auto Z80::instructionSRA_r(n8& x) -> void { Q = 1; x = SRA(x); } auto Z80::instructionSRL_irr(n16& addr) -> void { Q = 1; write(addr, SRL(read(addr))); } auto Z80::instructionSRL_irr_r(n16& addr, n8& x) -> void { Q = 1; write(addr, x = SRL(read(addr))); } auto Z80::instructionSRL_r(n8& x) -> void { Q = 1; x = SRL(x); } auto Z80::instructionSUB_a_irr(n16& x) -> void { Q = 1; A = SUB(A, read(displace(x))); } auto Z80::instructionSUB_a_n() -> void { Q = 1; A = SUB(A, operand()); } auto Z80::instructionSUB_a_r(n8& x) -> void { Q = 1; A = SUB(A, x); } auto Z80::instructionXOR_a_irr(n16& x) -> void { Q = 1; A = XOR(A, read(displace(x))); } auto Z80::instructionXOR_a_n() -> void { Q = 1; A = XOR(A, operand()); } auto Z80::instructionXOR_a_r(n8& x) -> void { Q = 1; A = XOR(A, x); } ares-126/ares/component/processor/z80/memory.cpp000066400000000000000000000017001415063341600217270ustar00rootroot00000000000000auto Z80::wait(u32 clocks) -> void { step(clocks); } auto Z80::opcode() -> n8 { step(4); return bus->read(PC++); } auto Z80::operand() -> n8 { step(3); return bus->read(PC++); } auto Z80::operands() -> n16 { n16 data = operand() << 0; return data | operand() << 8; } auto Z80::push(n16 x) -> void { write(--SP, x >> 8); write(--SP, x >> 0); } auto Z80::pop() -> n16 { n16 data = read(SP++) << 0; return data | read(SP++) << 8; } auto Z80::displace(n16& x) -> n16 { if(&x != &ix.word && &x != &iy.word) return x; auto d = operand(); wait(5); WZ = x + (i8)d; return WZ; } auto Z80::read(n16 address) -> n8 { step(3); return bus->read(address); } auto Z80::write(n16 address, n8 data) -> void { step(3); return bus->write(address, data); } auto Z80::in(n16 address) -> n8 { step(4); return bus->in(address); } auto Z80::out(n16 address, n8 data) -> void { step(4); return bus->out(address, data); } ares-126/ares/component/processor/z80/registers.hpp000066400000000000000000000024061415063341600224370ustar00rootroot00000000000000#define AF af.word #define BC bc.word #define DE de.word #define HL (prefix == Prefix::ix ? ix.word : prefix == Prefix::iy ? iy.word : hl.word) #define A af.byte.hi #define F af.byte.lo #define B bc.byte.hi #define C bc.byte.lo #define D de.byte.hi #define E de.byte.lo #define H (prefix == Prefix::ix ? ix.byte.hi : prefix == Prefix::iy ? iy.byte.hi : hl.byte.hi) #define L (prefix == Prefix::ix ? ix.byte.lo : prefix == Prefix::iy ? iy.byte.lo : hl.byte.lo) #define _HL hl.word //true HL (ignores IX/IY prefixes) #define _H hl.byte.hi #define _L hl.byte.lo #define AF_ af_.word //shadow registers #define BC_ bc_.word #define DE_ de_.word #define HL_ hl_.word #define A_ af_.byte.hi #define F_ af_.byte.lo #define B_ bc_.byte.hi #define C_ bc_.byte.lo #define D_ de_.byte.hi #define E_ de_.byte.lo #define H_ hl_.byte.hi #define L_ hl_.byte.lo #define IX ix.word #define IY iy.word #define IR ir.word #define WZ wz.word #define WZH wz.byte.hi #define WZL wz.byte.lo #define I ir.byte.hi #define R ir.byte.lo #define CF af.byte.lo.bit(0) #define NF af.byte.lo.bit(1) #define PF af.byte.lo.bit(2) #define VF af.byte.lo.bit(2) #define XF af.byte.lo.bit(3) #define HF af.byte.lo.bit(4) #define YF af.byte.lo.bit(5) #define ZF af.byte.lo.bit(6) #define SF af.byte.lo.bit(7) ares-126/ares/component/processor/z80/serialization.cpp000066400000000000000000000005261415063341600233010ustar00rootroot00000000000000auto Z80::serialize(serializer& s) -> void { s((u32&)mosfet); s((u32&)prefix); s(af.word); s(bc.word); s(de.word); s(hl.word); s(af_.word); s(bc_.word); s(de_.word); s(hl_.word); s(ix.word); s(iy.word); s(ir.word); s(wz.word); s(SP); s(PC); s(EI); s(P); s(Q); s(HALT); s(IFF1); s(IFF2); s(IM); } ares-126/ares/component/processor/z80/z80.cpp000066400000000000000000000030651415063341600210460ustar00rootroot00000000000000#include #include "z80.hpp" namespace ares { #include "disassembler.cpp" #include "registers.hpp" #include "memory.cpp" #include "instruction.cpp" #include "algorithms.cpp" #include "instructions.cpp" #include "serialization.cpp" auto Z80::power(MOSFET mosfet) -> void { this->mosfet = mosfet; prefix = Prefix::hl; af.word = 0xffff; af_.word = 0x0000; bc.word = 0x0000; bc_.word = 0x0000; de.word = 0x0000; de_.word = 0x0000; hl.word = 0x0000; hl_.word = 0x0000; ix.word = 0x0000; iy.word = 0x0000; ir.word = 0x0000; wz.word = 0x0000; SP = 0xffff; PC = 0x0000; EI = 0; P = 0; Q = 0; HALT = 0; IFF1 = 0; IFF2 = 0; IM = 1; } auto Z80::irq(bool maskable, n16 pc, n8 extbus) -> bool { //do not execute maskable interrupts if disabled or immediately after EI instruction if(maskable && (!IFF1 || EI)) return false; R.bit(0,6)++; push(PC); switch(maskable ? IM : (n2)1) { case 0: { //external data bus ($ff = RST $38) WZ = extbus; wait(extbus | 0x38 == 0xff ? 6 : 7); break; } case 1: { //constant address WZ = pc; wait(maskable ? 7 : 5); break; } case 2: { //vector table with external data bus n16 address = I << 8 | extbus; WZL = read(address + 0); WZH = read(address + 1); wait(7); break; } } PC = WZ; IFF1 = 0; if(maskable) IFF2 = 0; HALT = 0; if(P) PF = 0; P = 0; Q = 0; return true; } auto Z80::parity(n8 value) const -> bool { value ^= value >> 4; value ^= value >> 2; value ^= value >> 1; return !(value & 1); } } ares-126/ares/component/processor/z80/z80.hpp000066400000000000000000000201271415063341600210510ustar00rootroot00000000000000#pragma once //Zilog Z80 namespace ares { struct Z80 { struct Bus { virtual auto read(n16 address) -> n8 = 0; virtual auto write(n16 address, n8 data) -> void = 0; virtual auto in(n16 address) -> n8 = 0; virtual auto out(n16 address, n8 data) -> void = 0; }; virtual auto step(u32 clocks) -> void = 0; virtual auto synchronizing() const -> bool = 0; //CMOS: out (c) writes 0x00 //NMOS: out (c) writes 0xff; if an interrupt fires during "ld a,i" or "ld a,r", PF is cleared enum class MOSFET : u32 { CMOS, NMOS }; //z80.cpp auto power(MOSFET = MOSFET::NMOS) -> void; auto irq(bool maskable, n16 vector = 0x0000, n8 extbus = 0xff) -> bool; auto parity(n8) const -> bool; //memory.cpp auto wait(u32 clocks = 1) -> void; auto opcode() -> n8; auto operand() -> n8; auto operands() -> n16; auto push(n16) -> void; auto pop() -> n16; auto displace(n16&) -> n16; auto read(n16 address) -> n8; auto write(n16 address, n8 data) -> void; auto in(n16 address) -> n8; auto out(n16 address, n8 data) -> void; //instruction.cpp auto instruction() -> void; auto instruction(n8 code) -> void; auto instructionCB(n8 code) -> void; auto instructionCBd(n16 address, n8 code) -> void; auto instructionED(n8 code) -> void; //algorithms.cpp auto ADD(n8, n8, bool = false) -> n8; auto AND(n8, n8) -> n8; auto BIT(n3, n8) -> n8; auto CP (n8, n8) -> void; auto DEC(n8) -> n8; auto IN (n8) -> n8; auto INC(n8) -> n8; auto OR (n8, n8) -> n8; auto RES(n3, n8) -> n8; auto RL (n8) -> n8; auto RLC(n8) -> n8; auto RR (n8) -> n8; auto RRC(n8) -> n8; auto SET(n3, n8) -> n8; auto SLA(n8) -> n8; auto SLL(n8) -> n8; auto SRA(n8) -> n8; auto SRL(n8) -> n8; auto SUB(n8, n8, bool = false) -> n8; auto XOR(n8, n8) -> n8; //instructions.cpp auto instructionADC_a_irr(n16&) -> void; auto instructionADC_a_n() -> void; auto instructionADC_a_r(n8&) -> void; auto instructionADC_hl_rr(n16&) -> void; auto instructionADD_a_irr(n16&) -> void; auto instructionADD_a_n() -> void; auto instructionADD_a_r(n8&) -> void; auto instructionADD_hl_rr(n16&) -> void; auto instructionAND_a_irr(n16&) -> void; auto instructionAND_a_n() -> void; auto instructionAND_a_r(n8&) -> void; auto instructionBIT_o_irr(n3, n16&) -> void; auto instructionBIT_o_irr_r(n3, n16&, n8&) -> void; auto instructionBIT_o_r(n3, n8&) -> void; auto instructionCALL_c_nn(bool c) -> void; auto instructionCALL_nn() -> void; auto instructionCCF() -> void; auto instructionCP_a_irr(n16& x) -> void; auto instructionCP_a_n() -> void; auto instructionCP_a_r(n8& x) -> void; auto instructionCPD() -> void; auto instructionCPDR() -> void; auto instructionCPI() -> void; auto instructionCPIR() -> void; auto instructionCPL() -> void; auto instructionDAA() -> void; auto instructionDEC_irr(n16&) -> void; auto instructionDEC_r(n8&) -> void; auto instructionDEC_rr(n16&) -> void; auto instructionDI() -> void; auto instructionDJNZ_e() -> void; auto instructionEI() -> void; auto instructionEX_irr_rr(n16&, n16&) -> void; auto instructionEX_rr_rr(n16&, n16&) -> void; auto instructionEXX() -> void; auto instructionHALT() -> void; auto instructionIM_o(n2) -> void; auto instructionIN_a_in() -> void; auto instructionIN_r_ic(n8&) -> void; auto instructionIN_ic() -> void; auto instructionINC_irr(n16&) -> void; auto instructionINC_r(n8&) -> void; auto instructionINC_rr(n16&) -> void; auto instructionIND() -> void; auto instructionINDR() -> void; auto instructionINI() -> void; auto instructionINIR() -> void; auto instructionJP_c_nn(bool) -> void; auto instructionJP_rr(n16&) -> void; auto instructionJR_c_e(bool) -> void; auto instructionLD_a_inn() -> void; auto instructionLD_a_irr(n16& x) -> void; auto instructionLD_inn_a() -> void; auto instructionLD_inn_rr(n16&) -> void; auto instructionLD_irr_a(n16&) -> void; auto instructionLD_irr_n(n16&) -> void; auto instructionLD_irr_r(n16&, n8&) -> void; auto instructionLD_r_n(n8&) -> void; auto instructionLD_r_irr(n8&, n16&) -> void; auto instructionLD_r_r(n8&, n8&) -> void; auto instructionLD_r_r1(n8&, n8&) -> void; auto instructionLD_r_r2(n8&, n8&) -> void; auto instructionLD_rr_inn(n16&) -> void; auto instructionLD_rr_nn(n16&) -> void; auto instructionLD_sp_rr(n16&) -> void; auto instructionLDD() -> void; auto instructionLDDR() -> void; auto instructionLDI() -> void; auto instructionLDIR() -> void; auto instructionNEG() -> void; auto instructionNOP() -> void; auto instructionOR_a_irr(n16&) -> void; auto instructionOR_a_n() -> void; auto instructionOR_a_r(n8&) -> void; auto instructionOTDR() -> void; auto instructionOTIR() -> void; auto instructionOUT_ic_r(n8&) -> void; auto instructionOUT_ic() -> void; auto instructionOUT_in_a() -> void; auto instructionOUTD() -> void; auto instructionOUTI() -> void; auto instructionPOP_rr(n16&) -> void; auto instructionPUSH_rr(n16&) -> void; auto instructionRES_o_irr(n3, n16&) -> void; auto instructionRES_o_irr_r(n3, n16&, n8&) -> void; auto instructionRES_o_r(n3, n8&) -> void; auto instructionRET() -> void; auto instructionRET_c(bool c) -> void; auto instructionRETI() -> void; auto instructionRETN() -> void; auto instructionRL_irr(n16&) -> void; auto instructionRL_irr_r(n16&, n8&) -> void; auto instructionRL_r(n8&) -> void; auto instructionRLA() -> void; auto instructionRLC_irr(n16&) -> void; auto instructionRLC_irr_r(n16&, n8&) -> void; auto instructionRLC_r(n8&) -> void; auto instructionRLCA() -> void; auto instructionRLD() -> void; auto instructionRR_irr(n16&) -> void; auto instructionRR_irr_r(n16&, n8&) -> void; auto instructionRR_r(n8&) -> void; auto instructionRRA() -> void; auto instructionRRC_irr(n16&) -> void; auto instructionRRC_irr_r(n16&, n8&) -> void; auto instructionRRC_r(n8&) -> void; auto instructionRRCA() -> void; auto instructionRRD() -> void; auto instructionRST_o(n3) -> void; auto instructionSBC_a_irr(n16&) -> void; auto instructionSBC_a_n() -> void; auto instructionSBC_a_r(n8&) -> void; auto instructionSBC_hl_rr(n16&) -> void; auto instructionSCF() -> void; auto instructionSET_o_irr(n3, n16&) -> void; auto instructionSET_o_irr_r(n3, n16&, n8&) -> void; auto instructionSET_o_r(n3, n8&) -> void; auto instructionSLA_irr(n16&) -> void; auto instructionSLA_irr_r(n16&, n8&) -> void; auto instructionSLA_r(n8&) -> void; auto instructionSLL_irr(n16&) -> void; auto instructionSLL_irr_r(n16&, n8&) -> void; auto instructionSLL_r(n8&) -> void; auto instructionSRA_irr(n16&) -> void; auto instructionSRA_irr_r(n16&, n8&) -> void; auto instructionSRA_r(n8&) -> void; auto instructionSRL_irr(n16&) -> void; auto instructionSRL_irr_r(n16&, n8&) -> void; auto instructionSRL_r(n8&) -> void; auto instructionSUB_a_irr(n16&) -> void; auto instructionSUB_a_n() -> void; auto instructionSUB_a_r(n8&) -> void; auto instructionXOR_a_irr(n16&) -> void; auto instructionXOR_a_n() -> void; auto instructionXOR_a_r(n8&) -> void; //serialization.cpp auto serialize(serializer&) -> void; //disassembler.cpp noinline auto disassembleInstruction(maybe pc = {}) -> string; noinline auto disassembleContext() -> string; auto disassemble(n16 pc, n8 prefix, n8 code) -> string; auto disassembleCB(n16 pc, n8 prefix, n8 code) -> string; auto disassembleCBd(n16 pc, n8 prefix, i8 d, n8 code) -> string; auto disassembleED(n16 pc, n8 prefix, n8 code) -> string; MOSFET mosfet = MOSFET::NMOS; enum class Prefix : u32 { hl, ix, iy } prefix = Prefix::hl; union Pair { Pair() : word(0) {} n16 word; struct Byte { n8 order_msb2(hi, lo); } byte; }; Pair af, af_; Pair bc, bc_; Pair de, de_; Pair hl, hl_; Pair ix; Pair iy; Pair ir; Pair wz; n16 SP; n16 PC; b1 EI; //"ei" executed last b1 P; //"ld a,i" or "ld a,r" executed last b1 Q; //opcode that updated flag registers executed last b1 HALT; //"halt" instruction executed b1 IFF1; //interrupt flip-flop 1 b1 IFF2; //interrupt flip-flop 2 n2 IM; //interrupt mode (0-2) Bus* bus = nullptr; }; } ares-126/ares/component/video/000077500000000000000000000000001415063341600163635ustar00rootroot00000000000000ares-126/ares/component/video/tms9918/000077500000000000000000000000001415063341600175215ustar00rootroot00000000000000ares-126/ares/component/video/tms9918/background.cpp000066400000000000000000000055531415063341600223540ustar00rootroot00000000000000auto TMS9918::Background::setup(n8 voffset) -> void { } auto TMS9918::Background::run(n8 hoffset, n8 voffset) -> void { output = {}; switch(self.videoMode()) { case 0: return graphics1(hoffset, voffset); case 1: return text1(hoffset, voffset); case 2: return multicolor(hoffset, voffset); case 4: return graphics2(hoffset, voffset); default: return; } } auto TMS9918::Background::text1(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[TMS9918::Background::text1]"); } auto TMS9918::Background::graphics1(n8 hoffset, n8 voffset) -> void { n14 nameAddress; nameAddress.bit( 0, 4) = hoffset.bit(3,7); nameAddress.bit( 5, 9) = voffset.bit(3,7); nameAddress.bit(10,13) = io.nameTableAddress; n8 pattern = self.vram.read(nameAddress); n14 patternAddress; patternAddress.bit( 0, 2) = voffset.bit(0,2); patternAddress.bit( 3,10) = pattern; patternAddress.bit(11,13) = io.patternTableAddress; n14 colorAddress; //d5 = 0 colorAddress.bit(0, 4) = pattern.bit(3,7); colorAddress.bit(6,13) = io.colorTableAddress; n8 color = self.vram.read(colorAddress); n3 index = hoffset ^ 7; if(!self.vram.read(patternAddress).bit(index)) { output.color = color.bit(0,3); } else { output.color = color.bit(4,7); } } auto TMS9918::Background::graphics2(n8 hoffset, n8 voffset) -> void { n14 nameAddress; nameAddress.bit( 0, 4) = hoffset.bit(3,7); nameAddress.bit( 5, 9) = voffset.bit(3,7); nameAddress.bit(10,13) = io.nameTableAddress; n8 pattern = self.vram.read(nameAddress); n14 patternAddress; patternAddress.bit(0, 2) = voffset.bit(0,2); patternAddress.bit(3,10) = pattern; if(voffset >= 64 && voffset <= 127) patternAddress.bit(11) = io.patternTableAddress.bit(0); if(voffset >= 128 && voffset <= 191) patternAddress.bit(12) = io.patternTableAddress.bit(1); n14 colorAddress = patternAddress; patternAddress.bit(13) = io.patternTableAddress.bit(2); colorAddress.bit(13) = io.colorTableAddress.bit(7); n8 colorMask = io.colorTableAddress.bit(0,6) << 1 | 1; n8 color = self.vram.read(colorAddress); n3 index = hoffset ^ 7; if(!self.vram.read(patternAddress).bit(index)) { output.color = color.bit(0,3); } else { output.color = color.bit(4,7); } } auto TMS9918::Background::multicolor(n8 hoffset, n8 voffset) -> void { n14 nameAddress; nameAddress.bit( 0, 4) = hoffset.bit(3,7); nameAddress.bit( 5, 9) = voffset.bit(3,7); nameAddress.bit(10,13) = io.nameTableAddress; n8 pattern = self.vram.read(nameAddress); n14 patternAddress; patternAddress.bit( 0, 2) = voffset.bit(2,4); patternAddress.bit( 3,10) = pattern; patternAddress.bit(11,13) = io.patternTableAddress; n8 color = self.vram.read(patternAddress); if(hoffset.bit(2)) { output.color = color.bit(0,3); } else { output.color = color.bit(4,7); } } auto TMS9918::Background::power() -> void { io = {}; output = {}; } ares-126/ares/component/video/tms9918/dac.cpp000066400000000000000000000006531415063341600207600ustar00rootroot00000000000000auto TMS9918::DAC::setup(n8 y) -> void { output = self.screen->pixels().data() + y * 256; } auto TMS9918::DAC::run(n8 x, n8 y) -> void { n6 color = io.colorBackground; if(io.displayEnable) { if(self.background.output.color) color = self.background.output.color; if(self.sprite.output.color) color = self.sprite.output.color; } output[x] = color; } auto TMS9918::DAC::power() -> void { output = nullptr; } ares-126/ares/component/video/tms9918/io.cpp000066400000000000000000000036571415063341600206470ustar00rootroot00000000000000auto TMS9918::status() -> n8 { io.controlLatch = 0; n8 data = 0x00; data.bit(0,4) = sprite.io.overflowIndex; data.bit(5) = sprite.io.collision; data.bit(6) = sprite.io.overflow; data.bit(7) = irqFrame.pending; sprite.io.overflowIndex = 0b11111; sprite.io.collision = 0; sprite.io.overflow = 0; irqFrame.pending = 0; poll(); return data; } auto TMS9918::data() -> n8 { io.controlLatch = 0; n14 address = io.controlValue.bit(0,13)++; n8 data = io.vramLatch; io.vramLatch = vram.read(address); return data; } auto TMS9918::data(n8 data) -> void { io.controlLatch = 0; n14 address = io.controlValue.bit(0,13)++; vram.write(address, data); } auto TMS9918::control(n8 data) -> void { io.controlValue.byte(io.controlLatch++) = data; if(io.controlLatch) return; if(io.controlValue.bit(15)) { return register(io.controlValue.bit(8,10), io.controlValue.bit(0,7)); } if(!io.controlValue.bit(14)) TMS9918::data(); //read-ahead } auto TMS9918::register(n3 register, n8 data) -> void { switch(register) { case 0: dac.io.externalSync = data.bit(0); io.videoMode.bit(2) = data.bit(1); break; case 1: sprite.io.zoom = data.bit(0); sprite.io.size = data.bit(1); io.videoMode.bit(1) = data.bit(3); io.videoMode.bit(0) = data.bit(4); irqFrame.enable = data.bit(5); dac.io.displayEnable = data.bit(6); io.vramMode = data.bit(7); poll(); break; case 2: background.io.nameTableAddress = data.bit(0,3); break; case 3: background.io.colorTableAddress = data.bit(0,7); break; case 4: background.io.patternTableAddress = data.bit(0,2); break; case 5: sprite.io.attributeTableAddress = data.bit(0,6); break; case 6: sprite.io.patternTableAddress = data.bit(0,2); break; case 7: dac.io.colorBackground = data.bit(0,3); dac.io.colorForeground = data.bit(4,7); break; } } ares-126/ares/component/video/tms9918/serialization.cpp000066400000000000000000000016551415063341600231110ustar00rootroot00000000000000auto TMS9918::serialize(serializer& s) -> void { s(vram); s(background); s(sprite); s(dac); s(irqFrame.enable); s(irqFrame.pending); s(io.vcounter); s(io.hcounter); s(io.controlLatch); s(io.controlValue); s(io.vramLatch); s(io.videoMode); s(io.vramMode); } auto TMS9918::Background::serialize(serializer& s) -> void { s(io.nameTableAddress); s(io.colorTableAddress); s(io.patternTableAddress); s(output.color); } auto TMS9918::Sprite::serialize(serializer& s) -> void { for(auto& object : objects) { s(object.x); s(object.y); s(object.pattern); s(object.color); } s(io.zoom); s(io.size); s(io.attributeTableAddress); s(io.patternTableAddress); s(io.overflowIndex); s(io.overflow); s(io.collision); s(output.color); } auto TMS9918::DAC::serialize(serializer& s) -> void { s(io.displayEnable); s(io.externalSync); s(io.colorBackground); s(io.colorForeground); } ares-126/ares/component/video/tms9918/sprite.cpp000066400000000000000000000031641415063341600215370ustar00rootroot00000000000000auto TMS9918::Sprite::setup(n8 voffset) -> void { n8 valid = 0; n5 vlimit = (8 << io.zoom << io.size) - 1; for(auto& object : objects) object.y = 0xd0; n14 attributeAddress; attributeAddress.bit(7,13) = io.attributeTableAddress; for(u32 index : range(32)) { i9 y = self.vram.read(attributeAddress++); if(y == 0xd0) break; if(y >= 0xe0) y -= 0x100; i9 x = self.vram.read(attributeAddress++); n8 pattern = self.vram.read(attributeAddress++); n8 extra = self.vram.read(attributeAddress++); if(extra.bit(7)) x -= 32; y += 1; if(voffset < y) continue; if(voffset > y + vlimit) continue; if(vlimit == (io.zoom ? 31 : 15)) pattern.bit(0,1) = 0; if(valid == 4) { io.overflow = 1; io.overflowIndex = index; break; } objects[valid++] = {x, y, pattern, extra.bit(0,3)}; } } auto TMS9918::Sprite::run(n8 hoffset, n8 voffset) -> void { output = {}; n4 color; n5 hlimit = (8 << io.zoom << io.size) - 1, vlimit = hlimit; for(auto& o : objects) { if(o.y == 0xd0) continue; if(hoffset < o.x) continue; if(hoffset > o.x + hlimit) continue; u32 x = hoffset - o.x >> io.zoom; u32 y = voffset - o.y >> io.zoom; n14 address; address.bit( 0,10) = (o.pattern << 3) + (x >> 3 << 4) + (y & vlimit); address.bit(11,13) = io.patternTableAddress; n3 index = x ^ 7; if(self.vram.read(address).bit(index)) { if(color) { io.collision = 1; break; } color = o.color; } } if(color) output.color = color; } auto TMS9918::Sprite::power() -> void { for(auto& object : objects) object = {}; io = {}; output = {}; } ares-126/ares/component/video/tms9918/tms9918.cpp000066400000000000000000000017051415063341600213660ustar00rootroot00000000000000#include #include "tms9918.hpp" namespace ares { #include "io.cpp" #include "background.cpp" #include "sprite.cpp" #include "dac.cpp" #include "serialization.cpp" auto TMS9918::load(Node::Video::Screen screen) -> void { this->screen = screen; } auto TMS9918::unload() -> void { this->screen.reset(); } auto TMS9918::main() -> void { if(io.vcounter < 192) { n8 y = io.vcounter; background.setup(y); sprite.setup(y); dac.setup(y); for(n8 x : range(256)) { background.run(x, y); sprite.run(x, y); dac.run(x, y); step(1); } step(200); } else { step(456); } io.vcounter++; if(io.vcounter == 262) io.vcounter = 0; if(io.vcounter == 192) irqFrame.pending = 1, poll(), frame(); } auto TMS9918::poll() -> void { irq(irqFrame.pending && irqFrame.enable); } auto TMS9918::power() -> void { background.power(); sprite.power(); dac.power(); irqFrame = {}; io = {}; } } ares-126/ares/component/video/tms9918/tms9918.hpp000066400000000000000000000052531415063341600213750ustar00rootroot00000000000000#pragma once namespace ares { //Texas Instruments TMS9918 family struct TMS9918 { Node::Video::Screen screen; Memory::Writable vram; virtual auto step(u32 clocks) -> void = 0; virtual auto irq(bool line) -> void = 0; virtual auto frame() -> void = 0; auto videoMode() const -> n4 { return io.videoMode; } auto vcounter() const -> n8 { return io.vcounter; } auto hcounter() const -> n8 { return io.hcounter; } //tms9918.cpp auto load(Node::Video::Screen) -> void; auto unload() -> void; auto main() -> void; auto poll() -> void; auto power() -> void; //io.cpp auto status() -> n8; auto data() -> n8; auto data(n8) -> void; auto control(n8) -> void; auto register(n3, n8) -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct Background { TMS9918& self; //background.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto text1(n8 hoffset, n8 voffset) -> void; auto graphics1(n8 hoffset, n8 voffset) -> void; auto graphics2(n8 hoffset, n8 voffset) -> void; auto multicolor(n8 hoffset, n8 voffset) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n4 nameTableAddress; n8 colorTableAddress; n3 patternTableAddress; } io; struct Output { n4 color; } output; } background{*this}; struct Sprite { TMS9918& self; //sprite.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Object { i9 x; i9 y = 0xd0; n8 pattern; n4 color; } objects[4]; struct IO { n1 zoom; n1 size; n7 attributeTableAddress; n3 patternTableAddress; //flags n5 overflowIndex = 0b11111; n1 overflow; n1 collision; } io; struct Output { n4 color; } output; } sprite{*this}; struct DAC { TMS9918& self; //dac.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 displayEnable; n1 externalSync; //todo n4 colorBackground; n4 colorForeground; //todo } io; //unserialized: u32* output = nullptr; } dac{*this}; struct IRQFrame { n1 enable; n1 pending; } irqFrame; struct IO { n9 vcounter; n8 hcounter; n1 controlLatch; n16 controlValue; n8 vramLatch; n3 videoMode; n1 vramMode = 1; //0 = 4KB; 1 = 16KB } io; }; } ares-126/ares/component/video/v9938/000077500000000000000000000000001415063341600171655ustar00rootroot00000000000000ares-126/ares/component/video/v9938/background.cpp000066400000000000000000000071111415063341600220100ustar00rootroot00000000000000auto V9938::Background::setup(n8 y) -> void { latch.vscroll = io.vscroll; } auto V9938::Background::run(n8 x, n8 y) -> void { output = {}; switch(self.videoMode()) { case 0b00000: return graphic1(x, y); case 0b00001: return text1(x, y); case 0b00010: return multicolor(x, y); case 0b00100: return graphic2(x, y); case 0b01000: return graphic3(x, y); case 0b01001: return text2(x, y); case 0b01100: return graphic4(x, y); case 0b10000: return graphic5(x, y); case 0b10100: return graphic6(x, y); case 0b11100: return graphic7(x, y); } } auto V9938::Background::text1(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[V9938::Background::text1]"); } auto V9938::Background::text2(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[V9938::Background::text2]"); } auto V9938::Background::graphic1(n8 hoffset, n8 voffset) -> void { n14 patternLayout; patternLayout.bit( 0, 4) = hoffset.bit(3,7); patternLayout.bit( 5, 9) = voffset.bit(3,7); patternLayout.bit(10,13) = io.nameTableAddress.bit(10,13); n8 pattern = self.vram.read(patternLayout); n14 patternGenerator; patternGenerator.bit( 0, 2) = voffset.bit(0,2); patternGenerator.bit( 3,10) = pattern; patternGenerator.bit(11,13) = io.patternTableAddress.bit(11,13); n14 colorAddress; //d5 = 0 colorAddress.bit(0, 4) = pattern.bit(3,7); colorAddress.bit(6,13) = io.colorTableAddress.bit(6,13); n8 color = self.vram.read(colorAddress); if(self.vram.read(patternGenerator).bit(~hoffset & 7)) color >>= 4; output.color = color.bit(0,3); } auto V9938::Background::graphic2(n8 hoffset, n8 voffset) -> void { n14 patternLayout; patternLayout.bit( 0, 4) = hoffset.bit(3,7); patternLayout.bit( 5, 9) = voffset.bit(3,7); patternLayout.bit(10,13) = io.nameTableAddress.bit(10,13); n8 pattern = self.vram.read(patternLayout); n14 patternGenerator; patternGenerator.bit(0, 2) = voffset.bit(0,2); patternGenerator.bit(3,10) = pattern; if(voffset >= 64 && voffset <= 127) patternGenerator.bit(11) = io.patternTableAddress.bit(11); if(voffset >= 128 && voffset <= 191) patternGenerator.bit(12) = io.patternTableAddress.bit(12); n14 colorAddress = patternGenerator; patternGenerator.bit(13) = io.patternTableAddress.bit(13); colorAddress.bit(13) = io.colorTableAddress.bit(13); n8 colorMask = io.colorTableAddress.bit(6,12) << 1 | 1; n8 color = self.vram.read(colorAddress); if(self.vram.read(patternGenerator).bit(~hoffset & 7)) color >>= 4; output.color = color.bit(0,3); } auto V9938::Background::graphic3(n8 hoffset, n8 voffset) -> void { //graphic mode 3 is identical to graphic mode 2: //the difference is only that mode 2 uses sprite mode 1, and mode 3 uses sprite mode 2 return graphic2(hoffset, voffset); } auto V9938::Background::graphic4(n8 hoffset, n8 voffset) -> void { n17 address = io.nameTableAddress & 0x18000; address += voffset << 7; address += hoffset >> 1; auto data = self.vram.read(address); auto shift = !hoffset.bit(0) ? 4 : 0; output.color = n4(data >> shift); } auto V9938::Background::graphic5(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[V9938::Background::graphic5]"); } auto V9938::Background::graphic6(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[V9938::Background::graphic6]"); } auto V9938::Background::graphic7(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[V9938::Background::graphic7]"); } auto V9938::Background::multicolor(n8 hoffset, n8 voffset) -> void { debug(unimplemented, "[V9938::Background::multicolor]"); } auto V9938::Background::power() -> void { io = {}; latch = {}; output = {}; } ares-126/ares/component/video/v9938/commands.cpp000066400000000000000000000140631415063341600214760ustar00rootroot00000000000000auto V9938::command(n8 data) -> void { if(!data.bit(4,7)) return (void)(op.executing = 0); //stop if(op.executing) return; //busy op.lgm = 0; if(videoMode() == 0b01100) op.lgm = 4; if(videoMode() == 0b10000) op.lgm = 5; if(videoMode() == 0b10100) op.lgm = 6; if(videoMode() == 0b11100) op.lgm = 7; if(!op.lgm) return; //invalid op.logic = data.bit(0,3); op.command = data.bit(4,7); op.found = 0; op.executing = 1; relatch(); } auto V9938::command() -> void { if(!op.executing) return; //idle switch(op.command) { case 0x0: return (void)(op.executing = 0); //stop case 0x1: return (void)(op.executing = 0); //invalid case 0x2: return (void)(op.executing = 0); //invalid case 0x3: return (void)(op.executing = 0); //invalid case 0x4: return point(); case 0x5: return pset(); case 0x6: return srch(); case 0x7: return line(); case 0x8: return lmmv(); case 0x9: return lmmm(); case 0xa: return lmcm(); case 0xb: return lmmc(); case 0xc: return hmmv(); case 0xd: return hmmm(); case 0xe: return ymmm(); case 0xf: return hmmc(); } } auto V9938::relatch() -> void { if(op.lgm == 4) { op.lsx = (n8)op.sx & ~1; op.ldx = (n8)op.dx & ~1; op.lnx = op.nx & ~1; } else if(op.lgm == 5) { op.lsx = (n9)op.sx & ~3; op.ldx = (n9)op.dx & ~3; op.lnx = op.nx & ~3; } else if(op.lgm == 6) { op.lsx = (n9)op.sx & ~1; op.ldx = (n9)op.dx & ~1; op.lnx = op.nx & ~1; } else if(op.lgm == 7) { op.lsx = (n8)op.sx & ~0; op.ldx = (n8)op.dx & ~0; op.lnx = op.nx & ~0; } } auto V9938::advance() -> bool { op.lsx++; op.ldx++; if(!--op.lnx) { op.sy++; op.dy++; relatch(); if(!--op.ny) { op.executing = 0; } return true; } return false; } auto V9938::logic(n8 dc, n8 sc) -> n8 { switch(op.logic) { case 0: dc = sc; break; case 1: dc = sc & dc; break; case 2: dc = sc | dc; break; case 3: dc = sc ^ dc; break; case 4: dc = ~sc; break; case 5: break; //invalid case 6: break; //invalid case 7: break; //invalid case 8: if(sc) dc = sc; break; case 9: if(sc) dc = sc & dc; break; case 10: if(sc) dc = sc | dc; break; case 11: if(sc) dc = sc ^ dc; break; case 12: if(sc) dc = ~sc; break; case 13: break; //undefined case 14: break; //undefined case 15: break; //undefined } return dc; } auto V9938::address(n9 x, n10 y) -> n17 { if(op.lgm == 4) return y * 256 + (n8)x >> 1; if(op.lgm == 5) return y * 512 + (n9)x >> 2; if(op.lgm == 6) return y * 512 + (n9)x >> 1; if(op.lgm == 7) return y * 256 + (n8)x >> 0; unreachable; } auto V9938::read(n1 source, n9 x, n10 y) -> n8 { auto& ram = !source ? vram : xram; n8 byte = ram.read(address(x, y)); if(op.lgm == 4) return n4(byte >> (~x & 1) * 4); if(op.lgm == 5) return n2(byte >> (~x & 3) * 2); if(op.lgm == 6) return n4(byte >> (~x & 1) * 4); if(op.lgm == 7) return n8(byte >> (~x & 0) * 8); unreachable; } auto V9938::write(n1 source, n9 x, n10 y, n8 data) -> void { auto& ram = !source ? vram : xram; n8 byte = ram.read(address(x, y)); n8 lo, hi; if(op.lgm == 4) lo = (~x & 1) * 4, hi = lo + 3; if(op.lgm == 5) lo = (~x & 3) * 2, hi = lo + 1; if(op.lgm == 6) lo = (~x & 1) * 4, hi = lo + 3; if(op.lgm == 7) lo = (~x & 0) * 8, hi = lo + 7; byte.bit(lo, hi) = data; ram.write(address(x, y), byte); } //read pixel from VRAM to VDP auto V9938::point() -> void { op.cr = read(op.mxs, op.lsx, op.sy); op.executing = 0; } //write pixel from VDP to VRAM auto V9938::pset() -> void { n8 sc = op.cr; n8 dc = read(op.mxd, op.ldx, op.dy); dc = logic(dc, sc); write(op.mxd, op.ldx, op.dy, dc); op.executing = 0; } //search from VDP to VRAM auto V9938::srch() -> void { n8 sc = read(op.mxs, op.lsx, op.sy); if((op.eq && sc == op.cr) || (!op.eq && sc != op.cr)) { op.found = 1; op.match = op.lsx; op.executing = 0; return; } if(advance()) op.executing = 0; } //draw line from VDP to VRAM //note: no timing emulation currently //algorithm is just bresenham, which is probably not right, but it looks okay auto V9938::line() -> void { s32 nx = op.nx; s32 ny = op.ny; if(op.maj) swap(nx, ny); s32 x0 = op.dx; s32 y0 = op.dy; s32 x1 = op.dx + (!op.dix ? +nx : -nx); s32 y1 = op.dy + (!op.diy ? +ny : -ny); s32 dx = abs(x1 - x0), sx = x0 < x1 ? +1 : -1; s32 dy = abs(y1 - y0), sy = y0 < y1 ? +1 : -1; s32 error = (dx > dy ? +dx : -dy) / 2; while(true) { n8 sc = op.cr; n8 dc = read(op.mxd, x0, y0); dc = logic(dc, sc); write(op.mxd, x0, y0, dc); if(x0 == x1 && y0 == y1) break; s32 e = error; if(e > -dx) { error -= dy; x0 += sx; } if(e < +dy) { error += dx; y0 += sy; } } op.executing = 0; } //logical move VDP to VRAM auto V9938::lmmv() -> void { n8 sc = op.cr; n8 dc = read(op.mxd, op.ldx, op.dy); dc = logic(dc, sc); write(op.mxd, op.ldx, op.dy, dc); advance(); } //logical move VRAM to VRAM auto V9938::lmmm() -> void { n8 sc = read(op.mxs, op.lsx, op.sy); n8 dc = read(op.mxd, op.ldx, op.dy); dc = logic(dc, sc); write(op.mxd, op.ldx, op.dy, dc); advance(); } //logical move VRAM to CPU auto V9938::lmcm() -> void { if(op.ready) return; op.ready = 0; n8 sc = read(op.mxs, op.lsx, op.sy); n8 dc = op.cr; dc = logic(dc, sc); op.cr = dc; advance(); } //logical move CPU to VRAM auto V9938::lmmc() -> void { if(op.ready) return; op.ready = 0; n8 sc = op.cr; n8 dc = read(op.mxd, op.ldx, op.dy); write(op.mxd, op.ldx, op.dy, dc); advance(); } //high-speed move VDP to VRAM auto V9938::hmmv() -> void { write(op.mxd, op.ldx, op.dy, op.cr); advance(); } //high-speed move VRAM to VRAM auto V9938::hmmm() -> void { n8 data = read(op.mxs, op.lsx, op.sy); write(op.mxd, op.ldx, op.dy, data); advance(); } //high-speed move VRAM to VRAM, Y-coordinate only auto V9938::ymmm() -> void { n8 data = read(op.mxd, op.ldx, op.sy); write(op.mxd, op.ldx, op.dy, data); advance(); } //high-speed move CPU to VRAM auto V9938::hmmc() -> void { if(op.ready) return; op.ready = 0; write(op.mxd, op.ldx, op.dy, op.cr); advance(); } ares-126/ares/component/video/v9938/dac.cpp000066400000000000000000000021731415063341600204230ustar00rootroot00000000000000auto V9938::DAC::setup(n8 voffset) -> void { n9 vcenter = voffset + (!self.overscan() ? 10 : 0); //centers output within buffer output = self.screen->pixels().data() + vcenter * 1024; if(self.interlace() && self.field()) output += 512; } auto V9938::DAC::run(n8 hoffset, n8 voffset) -> void { n4 color = self.io.colorBackground; if(io.enable) { if(self.background.output.color) color = self.background.output.color; if(self.sprite.output.color) color = self.sprite.output.color; } *output++ = self.pram[color]; *output++ = self.pram[color]; } auto V9938::DAC::power() -> void { //format: ggg-rrr-bbb (octal encoding) //the default palette is an approximation of the TMS9918 palette self.pram[ 0] = 0'000; self.pram[ 1] = 0'000; self.pram[ 2] = 0'611; self.pram[ 3] = 0'733; self.pram[ 4] = 0'117; self.pram[ 5] = 0'327; self.pram[ 6] = 0'151; self.pram[ 7] = 0'627; self.pram[ 8] = 0'171; self.pram[ 9] = 0'373; self.pram[10] = 0'661; self.pram[11] = 0'664; self.pram[12] = 0'411; self.pram[13] = 0'265; self.pram[14] = 0'555; self.pram[15] = 0'777; io = {}; output = nullptr; } ares-126/ares/component/video/v9938/io.cpp000066400000000000000000000136111415063341600203020ustar00rootroot00000000000000auto V9938::status() -> n8 { io.controlLatch = 0; n8 data; switch(io.statusIndex) { case 0: data.bit(0,4) = sprite.io.overflowIndex; data.bit(5) = sprite.io.collision; data.bit(6) = sprite.io.overflow; data.bit(7) = virq.pending; sprite.io.overflowIndex = 0b11111; sprite.io.collision = 0; sprite.io.overflow = 0; virq.pending = 0; poll(); return data; case 1: data.bit(0) = hirq.pending; data.bit(7) = lirq.pending; hirq.pending = 0; lirq.pending = 0; poll(); return data; case 2: data.bit(0) = op.executing; data.bit(1) = field(); data.bit(2) = 1; data.bit(3) = 1; data.bit(4) = op.found; data.bit(5) = io.hcounter >= 256; data.bit(6) = io.vcounter >= vlines(); data.bit(7) = op.ready; return data; case 4: data.bit(1,7) = 0b1111111; return data; case 6: data.bit(1,7) = 0b1111111; return data; case 7: data.bit(0,7) = op.cr; op.ready = 0; return data; case 8: data.bit(0,7) = op.match.bit(0,7); return data; case 9: data.bit(0) = op.match.bit(8); data.bit(1,7) = 0b1111111; return data; } return data; } auto V9938::data() -> n8 { io.controlLatch = 0; n17 address = io.ramBank << 14 | io.controlValue.bit(0,13)++; if(!io.controlValue.bit(0,13)) io.ramBank++; //unconfirmed n8 data = io.ramLatch; if(io.ramSelect == 0) { io.ramLatch = vram.read(address); } else { io.ramLatch = xram.read(address); } return data; } // auto V9938::data(n8 data) -> void { io.controlLatch = 0; n17 address = io.ramBank << 14 | io.controlValue.bit(0,13)++; if(!io.controlValue.bit(0,13)) io.ramBank++; //unconfirmed if(io.ramSelect == 0) { vram.write(address, data); } else { xram.write(address, data); } } auto V9938::control(n8 data) -> void { io.controlValue.byte(io.controlLatch++) = data; if(io.controlLatch) return; if(io.controlValue.bit(15)) { return register(io.controlValue.bit(8,13), io.controlValue.bit(0,7)); } if(!io.controlValue.bit(14)) V9938::data(); //read-ahead } auto V9938::palette(n8 data) -> void { io.paletteValue.byte(io.paletteLatch++) = data; if(io.paletteLatch) return; pram[io.paletteIndex].bit(0,2) = io.paletteValue.bit(0, 2); //B pram[io.paletteIndex].bit(3,5) = io.paletteValue.bit(4, 6); //R pram[io.paletteIndex].bit(6,8) = io.paletteValue.bit(8,10); //G io.paletteIndex++; } auto V9938::register(n8 data) -> void { //indirect register writes cannot change the indirect register index setting if(io.registerIndex != 0x11) register(io.registerIndex, data); if(!io.registerFixed) io.registerIndex++; } auto V9938::register(n6 register, n8 data) -> void { switch(register) { case 0x00: io.videoMode.bit(2) = data.bit(1); io.videoMode.bit(3) = data.bit(2); io.videoMode.bit(4) = data.bit(3); hirq.enable = data.bit(4); lirq.enable = data.bit(5); dac.io.digitize = data.bit(6); hirq.pending &= hirq.enable; lirq.pending &= lirq.enable; poll(); return; case 0x01: sprite.io.zoom = data.bit(0); sprite.io.size = data.bit(1); io.videoMode.bit(1) = data.bit(3); io.videoMode.bit(0) = data.bit(4); virq.enable = data.bit(5); dac.io.enable = data.bit(6); virq.pending &= virq.enable; poll(); return; case 0x02: background.io.nameTableAddress.bit(10,16) = data.bit(0,6); return; case 0x03: background.io.colorTableAddress.bit(6,13) = data.bit(0,7); return; case 0x04: background.io.patternTableAddress.bit(11,16) = data.bit(0,5); return; case 0x05: sprite.io.nameTableAddress.bit(7,14) = data.bit(0,7); return; case 0x06: sprite.io.patternTableAddress.bit(11,16) = data.bit(0,5); return; case 0x07: io.colorBackground = data.bit(0,3); io.colorForeground = data.bit(4,7); return; case 0x08: dac.io.grayscale = data.bit(0); sprite.io.disable = data.bit(1); return; case 0x09: io.timing = data.bit(1); io.interlace = data.bit(3); io.overscan = data.bit(7); return; case 0x0a: background.io.colorTableAddress.bit(14,16) = data.bit(0,2); return; case 0x0b: sprite.io.nameTableAddress.bit(15,16) = data.bit(0,1); return; case 0x0c: io.blinkColorBackground = data.bit(0,3); io.blinkColorForeground = data.bit(4,7); return; case 0x0d: io.blinkPeriodBackground = data.bit(0,3); io.blinkPeriodForeground = data.bit(4,7); return; case 0x0e: io.ramBank = data.bit(0,2); return; case 0x0f: io.statusIndex = data.bit(0,3); return; case 0x10: io.paletteIndex = data.bit(0,3); return; case 0x11: io.registerIndex = data.bit(0,5); io.registerFixed = data.bit(7); return; case 0x12: background.io.hadjust = data.bit(0,3); background.io.vadjust = data.bit(4,7); return; case 0x13: hirq.coincidence = data; return; case 0x17: background.io.vscroll = data; return; case 0x20: op.sx.bit(0,7) = data.bit(0,7); return; case 0x21: op.sx.bit(8) = data.bit(0); return; case 0x22: op.sy.bit(0,7) = data.bit(0,7); return; case 0x23: op.sy.bit(8,9) = data.bit(0,1); return; case 0x24: op.dx.bit(0,7) = data.bit(0,7); return; case 0x25: op.dx.bit(8) = data.bit(0); return; case 0x26: op.dy.bit(0,7) = data.bit(0,7); return; case 0x27: op.dy.bit(8,9) = data.bit(0,1); return; case 0x28: op.nx.bit(0,7) = data.bit(0,7); return; case 0x29: op.nx.bit(8) = data.bit(0); return; case 0x2a: op.ny.bit(0,7) = data.bit(0,7); return; case 0x2b: op.ny.bit(8,9) = data.bit(0,1); return; case 0x2c: op.cr.bit(0,7) = data.bit(0,7); op.ready = 0; return; case 0x2d: op.maj = data.bit(0); op.eq = data.bit(1); op.dix = data.bit(2); op.diy = data.bit(3); op.mxs = data.bit(4); op.mxd = data.bit(5); io.ramSelect = data.bit(6); return; case 0x2e: command(data); return; } } ares-126/ares/component/video/v9938/serialization.cpp000066400000000000000000000036431415063341600225540ustar00rootroot00000000000000auto V9938::serialize(serializer& s) -> void { s(vram); s(xram); s(pram); s(background); s(sprite); s(dac); s(op.counter); s(op.executing); s(op.ready); s(op.command); s(op.mxs); s(op.sx); s(op.sy); s(op.mxd); s(op.dx); s(op.dy); s(op.nx); s(op.ny); s(op.dix); s(op.diy); s(op.cr); s(op.match); s(op.found); s(op.eq); s(op.maj); s(op.logic); s(op.lgm); s(op.lsx); s(op.ldx); s(op.lnx); s(virq.enable); s(virq.pending); s(hirq.enable); s(hirq.pending); s(hirq.coincidence); s(lirq.enable); s(lirq.pending); s(io.vcounter); s(io.hcounter); s(io.controlLatch); s(io.controlValue); s(io.videoMode); s(io.timing); s(io.interlace); s(io.overscan); s(io.colorBackground); s(io.colorForeground); s(io.blinkColorBackground); s(io.blinkColorForeground); s(io.blinkPeriodBackground); s(io.blinkPeriodForeground); s(io.statusIndex); s(io.paletteIndex); s(io.paletteLatch); s(io.paletteValue); s(io.registerIndex); s(io.registerFixed); s(io.ramSelect); s(io.ramBank); s(io.ramLatch); s(latch.timing); s(latch.interlace); s(latch.overscan); s(latch.field); } auto V9938::Background::serialize(serializer& s) -> void { s(io.nameTableAddress); s(io.patternTableAddress); s(io.colorTableAddress); s(io.hadjust); s(io.vadjust); s(io.vscroll); s(latch.hadjust); s(latch.vadjust); s(latch.vscroll); s(output.color); } auto V9938::Sprite::serialize(serializer& s) -> void { for(auto& object : objects) { s(object.x); s(object.y); s(object.pattern); s(object.color); s(object.collision); s(object.priority); } s(io.nameTableAddress); s(io.patternTableAddress); s(io.zoom); s(io.size); s(io.disable); s(io.overflowIndex); s(io.overflow); s(io.collision); s(output.color); } auto V9938::DAC::serialize(serializer& s) -> void { s(io.enable); s(io.digitize); s(io.grayscale); } ares-126/ares/component/video/v9938/sprite.cpp000066400000000000000000000075461415063341600212130ustar00rootroot00000000000000auto V9938::Sprite::setup(n8 voffset) -> void { n4 valid = 0; n5 vlimit = (8 << io.zoom << io.size) - 1; switch(self.videoMode()) { case 0b00000: case 0b00010: case 0b00100: { for(auto& object : objects) object.y = 0xd0; n14 address = io.nameTableAddress & 0x03f80; for(u32 index : range(32)) { i9 y = self.vram.read(address++); if(y == 0xd0) break; if(y >= 0xe0) y -= 0x100; i9 x = self.vram.read(address++); n8 pattern = self.vram.read(address++); n8 attributes = self.vram.read(address++); y += 1; if(voffset < y) continue; if(voffset > y + vlimit) continue; //16x16 sprites use four patterns; thus lower two pattern bits are ignored if(io.size) pattern.bit(0,1) = 0; if(valid == 4) { io.overflow = 1; io.overflowIndex = index; break; } n4 color = attributes.bit(0,3); if(attributes.bit(7)) x -= 32; objects[valid++] = {x, y, pattern, color}; } } case 0b01000: case 0b01100: case 0b10000: case 0b10100: case 0b11100: { for(auto& object : objects) object.y = 0xd8; if(io.disable) return; n17 address = io.nameTableAddress & 0x1fe00; for(u32 index : range(32)) { i9 y = self.vram.read(address++); if(y == 0xd8) break; if(y >= 0xe0) y -= 0x100; i9 x = self.vram.read(address++); n8 pattern = self.vram.read(address++); n8 reserved = self.vram.read(address++); y += 1; if(voffset < y) continue; if(voffset > y + vlimit) continue; //16x16 sprites use four patterns; thus lower two pattern bits are ignored if(io.size) pattern.bit(0,1) = 0; if(valid == 8) { io.overflow = 1; io.overflowIndex = index; break; } n17 colorTable = io.nameTableAddress & 0x1fc00; colorTable += index << 4; colorTable += voffset - y; n8 attributes = self.vram.read(colorTable); n4 color = attributes.bit(0,3); n1 collision = attributes.bit(5); n1 priority = attributes.bit(6); if(attributes.bit(7)) x -= 32; objects[valid++] = {x, y, pattern, color, collision, priority}; } } } } auto V9938::Sprite::run(n8 x, n8 y) -> void { output = {}; switch(self.videoMode()) { case 0b00000: return sprite1(x, y); case 0b00010: return sprite1(x, y); case 0b00100: return sprite1(x, y); case 0b01000: return sprite2(x, y); case 0b01100: return sprite2(x, y); case 0b10000: return sprite2(x, y); case 0b10100: return sprite2(x, y); case 0b11100: return sprite2(x, y); } } auto V9938::Sprite::sprite1(n8 hoffset, n8 voffset) -> void { n4 color; n5 hlimit = (8 << io.zoom << io.size) - 1, vlimit = hlimit; for(auto& o : objects) { if(o.y == 0xd0) break; if(hoffset < o.x) continue; if(hoffset > o.x + hlimit) continue; n4 x = hoffset - o.x >> io.zoom; n4 y = voffset - o.y >> io.zoom; n14 address = io.patternTableAddress; address += (o.pattern << 3) + (x >> 3 << 4) + (y & vlimit); if(self.vram.read(address).bit(~x & 7)) { if(color) { io.collision = 1; break; } color = o.color; } } if(color) output.color = color; } auto V9938::Sprite::sprite2(n8 hoffset, n8 voffset) -> void { n4 color; n5 hlimit = (8 << io.zoom << io.size) - 1, vlimit = hlimit; for(auto& o : objects) { if(o.y == 0xd8) break; if(hoffset < o.x) continue; if(hoffset > o.x + hlimit) continue; n4 x = hoffset - o.x >> io.zoom; n4 y = voffset - o.y >> io.zoom; n17 address = io.patternTableAddress; address += (o.pattern << 3) + (x >> 3 << 4) + (y & vlimit); if(self.vram.read(address).bit(~x & 7)) { if(color) { io.collision = 1; break; } color = o.color; } } if(color) output.color = color; } auto V9938::Sprite::power() -> void { for(auto& object : objects) object = {}; io = {}; output = {}; } ares-126/ares/component/video/v9938/v9938.cpp000066400000000000000000000027041415063341600204760ustar00rootroot00000000000000#include #include "v9938.hpp" namespace ares { #include "io.cpp" #include "background.cpp" #include "sprite.cpp" #include "dac.cpp" #include "commands.cpp" #include "serialization.cpp" auto V9938::load(Node::Video::Screen screen) -> void { this->screen = screen; } auto V9938::unload() -> void { screen.reset(); } auto V9938::main() -> void { if(io.vcounter < vlines()) { n9 y = io.vcounter; background.setup(y); sprite.setup(y); dac.setup(y); while(io.hcounter < 256) { n9 x = io.hcounter; background.run(x, y); sprite.run(x, y); dac.run(x, y); tick(1); } tick(200); } else { tick(456); } io.hcounter = 0; io.vcounter++; if(io.vcounter >= vtotal()) { io.vcounter = 0; latch.timing = io.timing; latch.interlace = io.interlace; latch.overscan = io.overscan; latch.field = !latch.field; } if(io.vcounter == vlines()) { virq.pending |= virq.enable; poll(); frame(); } if(io.vcounter == hirq.coincidence) { hirq.pending |= hirq.enable; poll(); } } auto V9938::poll() -> void { irq(virq.pending | hirq.pending | lirq.pending); } auto V9938::tick(u32 clocks) -> void { io.hcounter += clocks; while(clocks--) { command(); step(1); } } auto V9938::power() -> void { background.power(); sprite.power(); dac.power(); op = {}; virq = {}; hirq = {}; lirq = {}; io = {}; latch = {}; } } ares-126/ares/component/video/v9938/v9938.hpp000066400000000000000000000131101415063341600204740ustar00rootroot00000000000000#pragma once namespace ares { //Yamaha V9938 struct V9938 { Node::Video::Screen screen; Memory::Writable vram; //video RAM Memory::Writable xram; //expansion RAM Memory::Writable pram; //palette RAM virtual auto step(u32 clocks) -> void = 0; virtual auto irq(bool line) -> void = 0; virtual auto frame() -> void = 0; auto videoMode() const -> n5 { return io.videoMode; } auto vcounter() const -> n16 { return io.vcounter; } auto hcounter() const -> n16 { return io.hcounter; } auto timing() const -> bool { return latch.timing; } auto overscan() const -> bool { return latch.overscan; } auto interlace() const -> bool { return latch.interlace; } auto field() const -> bool { return latch.field; } auto vtotal() const -> u32 { return !latch.timing ? 262 : 313; } auto vlines() const -> u32 { return !latch.overscan ? 192 : 212; } //v9938.cpp auto load(Node::Video::Screen) -> void; auto unload() -> void; auto main() -> void; auto poll() -> void; auto tick(u32 clocks) -> void; auto power() -> void; //io.cpp auto status() -> n8; auto data() -> n8; auto data(n8 data) -> void; auto control(n8 data) -> void; auto palette(n8 data) -> void; auto register(n8 data) -> void; auto register(n6 register, n8 data) -> void; //commands.cpp auto command(n8 data) -> void; auto command() -> void; auto relatch() -> void; auto advance() -> bool; auto address(n9 x, n10 y) -> n17; auto read(n1 source, n9 x, n10 y) -> n8; auto write(n1 source, n9 x, n10 y, n8 data) -> void; auto logic(n8 dc, n8 sc) -> n8; auto point() -> void; auto pset() -> void; auto srch() -> void; auto line() -> void; auto lmmv() -> void; auto lmmm() -> void; auto lmcm() -> void; auto lmmc() -> void; auto hmmv() -> void; auto hmmm() -> void; auto ymmm() -> void; auto hmmc() -> void; //serialization.cpp auto serialize(serializer&) -> void; protected: struct Background { V9938& self; //background.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto text1(n8 hoffset, n8 voffset) -> void; auto text2(n8 hoffset, n8 voffset) -> void; auto graphic1(n8 hoffset, n8 voffset) -> void; auto graphic2(n8 hoffset, n8 voffset) -> void; auto graphic3(n8 hoffset, n8 voffset) -> void; auto graphic4(n8 hoffset, n8 voffset) -> void; auto graphic5(n8 hoffset, n8 voffset) -> void; auto graphic6(n8 hoffset, n8 voffset) -> void; auto graphic7(n8 hoffset, n8 voffset) -> void; auto multicolor(n8 hoffset, n8 voffset) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n17 nameTableAddress; n17 patternTableAddress; n17 colorTableAddress; i4 hadjust; //todo i4 vadjust; //todo n8 vscroll; //todo } io; struct Latch { i4 hadjust; i4 vadjust; n8 vscroll; } latch; struct Output { n4 color; } output; } background{*this}; struct Sprite { V9938& self; //sprite.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto sprite1(n8 hoffset, n8 voffset) -> void; auto sprite2(n8 hoffset, n8 voffset) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Object { i9 x; i9 y = 0xd0; n8 pattern; n4 color; n1 collision; n1 priority; } objects[8]; struct IO { n17 nameTableAddress; n17 patternTableAddress; n1 zoom; n1 size; //0 = 8x8, 1 = 16x16 n1 disable; //flags n5 overflowIndex; n1 overflow; n1 collision; } io; struct Output { n4 color; } output; } sprite{*this}; struct DAC { V9938& self; //dac.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 enable; n1 digitize; //todo n1 grayscale; //todo } io; //unserialized: u32* output = nullptr; } dac{*this}; struct Operation { //a very rough, inaccurate approximation of command timing n32 counter; n1 executing; n1 ready; n4 command; n1 mxs; n9 sx; n10 sy; n1 mxd; n9 dx; n10 dy; n9 nx; n10 ny; n1 dix; //0 = right, 1 = left n1 diy; //0 = down, 1 = up n8 cr; n9 match; n1 found; n1 eq; n1 maj; n4 logic; //internal latches n3 lgm; n9 lsx; n9 ldx; n9 lnx; } op; struct VerticalScanIRQ { n1 enable; n1 pending; } virq; struct HorizontalScanIRQ { n1 enable; n1 pending; n8 coincidence; } hirq; struct LightPenIRQ { n1 enable; n1 pending; } lirq; struct IO { n16 vcounter; n16 hcounter; n1 controlLatch; n16 controlValue; n5 videoMode; n1 timing; //0 = 262, 1 = 313 n1 interlace; //0 = progressive, 1 = interlaced n1 overscan; //0 = 192, 1 = 212 n4 colorBackground; n4 colorForeground; n4 blinkColorBackground; n4 blinkColorForeground; n4 blinkPeriodBackground; n4 blinkPeriodForeground; n4 statusIndex; n4 paletteIndex; n1 paletteLatch; n16 paletteValue; n6 registerIndex; n1 registerFixed; //0 = auto-increment n1 ramSelect; //0 = video RAM, 1 = expansion RAM n3 ramBank; n8 ramLatch; } io; struct Latch { n1 timing; n1 interlace; n1 overscan; n1 field; } latch; }; } ares-126/ares/cv/000077500000000000000000000000001415063341600136635ustar00rootroot00000000000000ares-126/ares/cv/GNUmakefile000066400000000000000000000012551415063341600157400ustar00rootroot00000000000000ares.components += z80 ares.components += tms9918 ares.components += sn76489 ares.objects += ares-cv-cpu ares.objects += ares-cv-vdp ares.objects += ares-cv-psg ares.objects += ares-cv-system ares.objects += ares-cv-cartridge ares.objects += ares-cv-controller $(object.path)/ares-cv-cpu.o: $(ares.path)/cv/cpu/cpu.cpp $(object.path)/ares-cv-vdp.o: $(ares.path)/cv/vdp/vdp.cpp $(object.path)/ares-cv-psg.o: $(ares.path)/cv/psg/psg.cpp $(object.path)/ares-cv-system.o: $(ares.path)/cv/system/system.cpp $(object.path)/ares-cv-cartridge.o: $(ares.path)/cv/cartridge/cartridge.cpp $(object.path)/ares-cv-controller.o: $(ares.path)/cv/controller/controller.cpp ares-126/ares/cv/cartridge/000077500000000000000000000000001415063341600156275ustar00rootroot00000000000000ares-126/ares/cv/cartridge/cartridge.cpp000066400000000000000000000016351415063341600203040ustar00rootroot00000000000000#include namespace ares::ColecoVision { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); if(auto fp = pak->read("program.rom")) { rom.allocate(fp->size()); rom.load(fp); } power(); } auto Cartridge::disconnect() -> void { if(!node) return; rom.reset(); pak.reset(); node.reset(); } auto Cartridge::save() -> void { } auto Cartridge::power() -> void { } auto Cartridge::read(n16 address) -> n8 { if(address >= rom.size()) return 0xff; return rom.read(address); } } ares-126/ares/cv/cartridge/cartridge.hpp000066400000000000000000000011541415063341600203050ustar00rootroot00000000000000struct Cartridge { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto read(n16 address) -> n8; //serialization.cpp auto serialize(serializer&) -> void; private: struct Information { string title; string region; } information; Memory::Readable rom; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/cv/cartridge/serialization.cpp000066400000000000000000000000651415063341600212110ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { } ares-126/ares/cv/cartridge/slot.cpp000066400000000000000000000010441415063341600173130ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/cv/cartridge/slot.hpp000066400000000000000000000003471415063341600173250ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/cv/controller/000077500000000000000000000000001415063341600160465ustar00rootroot00000000000000ares-126/ares/cv/controller/controller.cpp000066400000000000000000000001541415063341600207350ustar00rootroot00000000000000#include namespace ares::ColecoVision { #include "port.cpp" #include "gamepad/gamepad.cpp" } ares-126/ares/cv/controller/controller.hpp000066400000000000000000000003501415063341600207400ustar00rootroot00000000000000struct Controller : Thread { Node::Peripheral node; virtual ~Controller() = default; virtual auto read() -> n8 { return 0xff; } virtual auto write(n8 data) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" ares-126/ares/cv/controller/gamepad/000077500000000000000000000000001415063341600174445ustar00rootroot00000000000000ares-126/ares/cv/controller/gamepad/gamepad.cpp000066400000000000000000000053321415063341600215510ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); l = node->append("L"); r = node->append("R"); one = node->append("1"); two = node->append("2"); three = node->append("3"); four = node->append("4"); five = node->append("5"); six = node->append("6"); seven = node->append("7"); eight = node->append("8"); nine = node->append("9"); star = node->append("*"); zero = node->append("0"); pound = node->append("#"); } auto Gamepad::read() -> n8 { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(l); platform->input(r); platform->input(one); platform->input(two); platform->input(three); platform->input(four); platform->input(five); platform->input(six); platform->input(seven); platform->input(eight); platform->input(nine); platform->input(star); platform->input(zero); platform->input(pound); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n8 data = 0x7f; if(select == 0) { if(one->value ()) data.bit(0,3) = 0b1101; else if(two->value ()) data.bit(0,3) = 0b0111; else if(three->value()) data.bit(0,3) = 0b1100; else if(four->value ()) data.bit(0,3) = 0b0010; else if(five->value ()) data.bit(0,3) = 0b0011; else if(six->value ()) data.bit(0,3) = 0b1110; else if(seven->value()) data.bit(0,3) = 0b0101; else if(eight->value()) data.bit(0,3) = 0b0001; else if(nine->value ()) data.bit(0,3) = 0b1011; else if(star->value ()) data.bit(0,3) = 0b1001; else if(zero->value ()) data.bit(0,3) = 0b1010; else if(pound->value()) data.bit(0,3) = 0b0110; data.bit(6) = !r->value(); } else { data.bit(0) = !upLatch; data.bit(1) = !rightLatch; data.bit(2) = !downLatch; data.bit(3) = !leftLatch; data.bit(6) = !l->value(); } return data; } auto Gamepad::write(n8 data) -> void { select = data.bit(0); } ares-126/ares/cv/controller/gamepad/gamepad.hpp000066400000000000000000000013411415063341600215520ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button l; Node::Input::Button r; Node::Input::Button one; Node::Input::Button two; Node::Input::Button three; Node::Input::Button four; Node::Input::Button five; Node::Input::Button six; Node::Input::Button seven; Node::Input::Button eight; Node::Input::Button nine; Node::Input::Button star; Node::Input::Button zero; Node::Input::Button pound; Gamepad(Node::Port); auto read() -> n8 override; auto write(n8 data) -> void override; n1 select; private: b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/cv/controller/port.cpp000066400000000000000000000013741415063341600175430ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("ColecoVision"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad"}); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/cv/controller/port.hpp000066400000000000000000000010141415063341600175370ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto read() -> n8 { if(device) return device->read(); return 0xff; } auto write(n8 data) -> void { if(device) return device->write(data); } auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/cv/cpu/000077500000000000000000000000001415063341600144525ustar00rootroot00000000000000ares-126/ares/cv/cpu/cpu.cpp000066400000000000000000000022641415063341600157510ustar00rootroot00000000000000#include namespace ares::ColecoVision { CPU cpu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { ram.allocate(0x0400); expansion.allocate(0x1000); node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { ram.reset(); expansion.reset(); node = {}; debugger = {}; } auto CPU::main() -> void { if(state.nmiPending) { state.nmiPending = 0; //edge-sensitive debugger.interrupt("NMI"); irq(0, 0x0066, 0xff); } if(state.irqLine) { //level-sensitive debugger.interrupt("IRQ"); irq(1, 0x0038, 0xff); } debugger.instruction(); instruction(); } auto CPU::step(uint clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::setNMI(bool value) -> void { if(!state.nmiLine && value) state.nmiPending = 1; state.nmiLine = value; } auto CPU::setIRQ(bool value) -> void { state.irqLine = value; } auto CPU::power() -> void { Z80::bus = this; Z80::power(); Thread::create(system.colorburst(), {&CPU::main, this}); PC = 0x0000; //reset vector address state = {}; io = {}; ram.fill(0); } } ares-126/ares/cv/cpu/cpu.hpp000066400000000000000000000024511415063341600157540ustar00rootroot00000000000000struct CPU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Writable ram; Memory::Writable expansion; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; Node::Debugger::Memory expansion; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto setNMI(bool value) -> void; auto setIRQ(bool value) -> void; auto power() -> void; //memory.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; private: struct State { bool nmiPending = 0; bool nmiLine = 0; bool irqLine = 0; } state; struct IO { bool replaceRAM = 0; bool replaceBIOS = 0; } io; }; extern CPU cpu; ares-126/ares/cv/cpu/debugger.cpp000066400000000000000000000023501415063341600167420ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { cpu.ram[address] = data; }); memory.expansion = parent->append("CPU EXPRAM"); memory.expansion->setSize(cpu.expansion.size()); memory.expansion->setRead([&](u32 address) -> u8 { return cpu.expansion[address]; }); memory.expansion->setWrite([&](u32 address, u8 data) -> void { cpu.expansion[address] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.PC)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/cv/cpu/memory.cpp000066400000000000000000000034121415063341600164660ustar00rootroot00000000000000auto CPU::read(n16 address) -> n8 { n8 data = 0xff; if(address >= 0x0000 && address <= 0x1fff && io.replaceBIOS) return expansion.read(address); if(address >= 0x2000 && address <= 0x7fff && io.replaceRAM ) return expansion.read(address); if(address >= 0x0000 && address <= 0x1fff) return system.bios[address & 0x1fff]; if(address >= 0x6000 && address <= 0x7fff) return ram.read(address - 0x6000); if(address >= 0x8000 && address <= 0xffff) return cartridge.read(address - 0x8000); return data; } auto CPU::write(n16 address, n8 data) -> void { if(address >= 0x0000 && address <= 0x1fff && io.replaceBIOS) return expansion.write(address, data); if(address >= 0x2000 && address <= 0x7fff && io.replaceRAM) return expansion.write(address, data); if(address >= 0x6000 && address <= 0x7fff) return ram.write(address - 0x6000, data); if(address >= 0x8000 && address <= 0xffff) return; } auto CPU::in(n16 address) -> n8 { address &= 0xff; n8 data = 0xff; if(address >= 0xa0 && address <= 0xbf) return !address.bit(0) ? vdp.data() : vdp.status(); if(address >= 0xe0 && address <= 0xff && address.bit(1) == 0) return controllerPort1.read(); if(address >= 0xe0 && address <= 0xff && address.bit(1) == 1) return controllerPort2.read(); return data; } auto CPU::out(n16 address, n8 data) -> void { address &= 0xff; if(address == 0x53) io.replaceRAM = data.bit(0); if(address == 0x7f) io.replaceBIOS = data.bit(1); if(address >= 0x80 && address <= 0x9f) controllerPort1.write(0), controllerPort2.write(0); if(address >= 0xa0 && address <= 0xbf) return !address.bit(0) ? vdp.data(data) : vdp.control(data); if(address >= 0xc0 && address <= 0xdf) controllerPort1.write(1), controllerPort2.write(1); if(address >= 0xe0 && address <= 0xff) return psg.write(data); } ares-126/ares/cv/cpu/serialization.cpp000066400000000000000000000003361415063341600200350ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); s(ram); s(expansion); s(state.nmiPending); s(state.nmiLine); s(state.irqLine); s(io.replaceBIOS); s(io.replaceRAM); } ares-126/ares/cv/cv.hpp000066400000000000000000000014051415063341600150040ustar00rootroot00000000000000#pragma once //started: 2019-02-19 #include #include #include #include namespace ares::ColecoVision { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto ColecoVision() -> bool; inline static auto ColecoAdam() -> bool; }; struct Region { inline static auto NTSC() -> bool; inline static auto PAL() -> bool; }; #include #include #include #include #include #include } ares-126/ares/cv/psg/000077500000000000000000000000001415063341600144545ustar00rootroot00000000000000ares-126/ares/cv/psg/psg.cpp000066400000000000000000000020001415063341600157410ustar00rootroot00000000000000#include namespace ares::ColecoVision { PSG psg; #include "serialization.cpp" auto PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(1); stream->setFrequency(system.colorburst() / 16.0); stream->addHighPassFilter(20.0, 1); } auto PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto PSG::main() -> void { auto channels = SN76489::clock(); double output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; output += volume[channels[3]]; stream->frame(output / 4.0); step(1); } auto PSG::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto PSG::power() -> void { SN76489::power(); Thread::create(system.colorburst() / 16.0, {&PSG::main, this}); for(u32 level : range(15)) { volume[level] = pow(2, level * -2.0 / 6.0); } volume[15] = 0; } } ares-126/ares/cv/psg/psg.hpp000066400000000000000000000005321415063341600157560ustar00rootroot00000000000000struct PSG : SN76489, Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; private: f64 volume[16]; }; extern PSG psg; ares-126/ares/cv/psg/serialization.cpp000066400000000000000000000001401415063341600200300ustar00rootroot00000000000000auto PSG::serialize(serializer& s) -> void { SN76489::serialize(s); Thread::serialize(s); } ares-126/ares/cv/system/000077500000000000000000000000001415063341600152075ustar00rootroot00000000000000ares-126/ares/cv/system/controls.cpp000066400000000000000000000005301415063341600175540ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); reset = node->append("Reset"); } auto System::Controls::poll() -> void { auto value = reset->value(); platform->input(reset); if(!value && reset->value()) system.power(); //todo: implement soft reset } ares-126/ares/cv/system/serialization.cpp000066400000000000000000000020141415063341600205650ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cartridge); s(cpu); s(vdp); s(psg); s(controllerPort1); s(controllerPort2); } ares-126/ares/cv/system/system.cpp000066400000000000000000000047171415063341600172500ustar00rootroot00000000000000#include namespace ares::ColecoVision { auto enumerate() -> vector { return { "[Coleco] ColecoVision (NTSC)", "[Coleco] ColecoVision (PAL)", "[Coleco] ColecoAdam (NTSC)", "[Coleco] ColecoAdam (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); controls.poll(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("ColecoVision")) { information.name = "ColecoVision"; information.model = Model::ColecoVision; } if(name.find("ColecoAdam")) { information.name = "ColecoAdam"; information.model = Model::ColecoAdam; } if(name.find("NTSC")) { information.region = Region::NTSC; information.colorburst = Constants::Colorburst::NTSC; } if(name.find("PAL")) { information.region = Region::PAL; information.colorburst = Constants::Colorburst::PAL * 4.0 / 5.0; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; if(auto fp = pak->read("bios.rom")) { fp->read({bios, 0x2000}); } scheduler.reset(); controls.load(node); cpu.load(node); vdp.load(node); psg.load(node); cartridgeSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); vdp.unload(); psg.unload(); cartridgeSlot.unload(); controllerPort1.port = {}; controllerPort2.port = {}; pak.reset(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); cartridge.power(); cpu.power(); vdp.power(); psg.power(); scheduler.power(cpu); } } ares-126/ares/cv/system/system.hpp000066400000000000000000000030411415063341600172420ustar00rootroot00000000000000struct System { Node::System node; VFS::Pak pak; struct Controls { Node::Object node; Node::Input::Button reset; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; } controls; enum class Model : u32 { ColecoVision, ColecoAdam }; enum class Region : u32 { NTSC, PAL }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto region() const -> Region { return information.region; } auto colorburst() const -> f64 { return information.colorburst; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; u8 bios[0x2000]; private: struct Information { string name = "ColecoVision"; Model model = Model::ColecoVision; Region region = Region::NTSC; f64 colorburst = Constants::Colorburst::NTSC; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Model::ColecoVision() -> bool { return system.model() == System::Model::ColecoVision; } auto Model::ColecoAdam() -> bool { return system.model() == System::Model::ColecoAdam; } auto Region::NTSC() -> bool { return system.region() == System::Region::NTSC; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/cv/vdp/000077500000000000000000000000001415063341600144545ustar00rootroot00000000000000ares-126/ares/cv/vdp/color.cpp000066400000000000000000000016161415063341600163020ustar00rootroot00000000000000auto VDP::color(n32 color) -> n64 { switch(color.bit(0,3)) { case 0: return 0x0000'0000'0000ull; //transparent case 1: return 0x0000'0000'0000ull; //black case 2: return 0x2121'c8c8'4242ull; //medium green case 3: return 0x5e5e'dcdc'7878ull; //light green case 4: return 0x5454'5555'ededull; //dark blue case 5: return 0x7d7d'7676'fcfcull; //light blue case 6: return 0xd4d4'5252'4d4dull; //dark red case 7: return 0x4242'ebeb'f5f5ull; //cyan case 8: return 0xfcfc'5555'5454ull; //medium red case 9: return 0xffff'7979'7878ull; //light red case 10: return 0xd4d4'c1c1'5454ull; //dark yellow case 11: return 0xe6e6'cece'8080ull; //light yellow case 12: return 0x2121'b0b0'3b3bull; //dark green case 13: return 0xc9c9'5b5b'babaull; //magenta case 14: return 0xcccc'cccc'ccccull; //gray case 15: return 0xffff'ffff'ffffull; //white } unreachable; } ares-126/ares/cv/vdp/serialization.cpp000066400000000000000000000001401415063341600200300ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { TMS9918::serialize(s); Thread::serialize(s); } ares-126/ares/cv/vdp/vdp.cpp000066400000000000000000000017531415063341600157570ustar00rootroot00000000000000#include namespace ares::ColecoVision { VDP vdp; #include "color.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { vram.allocate(16_KiB, 0x00); node = parent->append("VDP"); screen = node->append("Screen", 256, 192); screen->colors(1 << 4, {&VDP::color, this}); screen->setSize(256, 192); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); screen->setViewport(0, 0, 256, 192); TMS9918::load(screen); } auto VDP::unload() -> void { TMS9918::unload(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto VDP::irq(bool line) -> void { cpu.setNMI(line); } auto VDP::frame() -> void { screen->frame(); scheduler.exit(Event::Frame); } auto VDP::power() -> void { TMS9918::power(); Thread::create(system.colorburst() * 2, [&] { main(); }); screen->power(); } } ares-126/ares/cv/vdp/vdp.hpp000066400000000000000000000006421415063341600157600ustar00rootroot00000000000000struct VDP : TMS9918, Thread { Node::Object node; Node::Video::Screen screen; //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto step(u32 clocks) -> void override; auto irq(bool line) -> void override; auto frame() -> void override; auto power() -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; }; extern VDP vdp; ares-126/ares/fc/000077500000000000000000000000001415063341600136435ustar00rootroot00000000000000ares-126/ares/fc/GNUmakefile000066400000000000000000000016231415063341600157170ustar00rootroot00000000000000ares.components += mos6502 ares.components += ym2149 ares.components += ym2413 ares.components += m24c ares.objects += ares-fc-system ares.objects += ares-fc-controller ares.objects += ares-fc-expansion ares.objects += ares-fc-cartridge ares.objects += ares-fc-cpu ares.objects += ares-fc-apu ares.objects += ares-fc-ppu ares.objects += ares-fc-fds $(object.path)/ares-fc-system.o: $(ares.path)/fc/system/system.cpp $(object.path)/ares-fc-controller.o: $(ares.path)/fc/controller/controller.cpp $(object.path)/ares-fc-expansion.o: $(ares.path)/fc/expansion/expansion.cpp $(object.path)/ares-fc-cartridge.o: $(ares.path)/fc/cartridge/cartridge.cpp $(object.path)/ares-fc-cpu.o: $(ares.path)/fc/cpu/cpu.cpp $(object.path)/ares-fc-apu.o: $(ares.path)/fc/apu/apu.cpp $(object.path)/ares-fc-ppu.o: $(ares.path)/fc/ppu/ppu.cpp $(object.path)/ares-fc-fds.o: $(ares.path)/fc/fds/fds.cpp ares-126/ares/fc/apu/000077500000000000000000000000001415063341600144305ustar00rootroot00000000000000ares-126/ares/fc/apu/apu.cpp000066400000000000000000000173371415063341600157340ustar00rootroot00000000000000#include namespace ares::Famicom { APU apu; #include "envelope.cpp" #include "sweep.cpp" #include "pulse.cpp" #include "triangle.cpp" #include "noise.cpp" #include "dmc.cpp" #include "serialization.cpp" auto APU::load(Node::Object parent) -> void { node = parent->append("APU"); stream = node->append("PSG"); stream->setChannels(1); stream->setFrequency(u32(system.frequency() + 0.5) / rate()); stream->addHighPassFilter( 90.0, 1); stream->addHighPassFilter( 440.0, 1); stream->addLowPassFilter (14000.0, 1); for(u32 amp : range(32)) { if(amp == 0) { pulseDAC[amp] = 0; } else { pulseDAC[amp] = 16384.0 * 95.88 / (8128.0 / amp + 100.0); } } for(u32 dmcAmp : range(128)) { for(u32 triangleAmp : range(16)) { for(u32 noiseAmp : range(16)) { if(dmcAmp == 0 && triangleAmp == 0 && noiseAmp == 0) { dmcTriangleNoiseDAC[dmcAmp][triangleAmp][noiseAmp] = 0; } else { dmcTriangleNoiseDAC[dmcAmp][triangleAmp][noiseAmp] = 16384.0 * 159.79 / (100.0 + 1.0 / (triangleAmp / 8227.0 + noiseAmp / 12241.0 + dmcAmp / 22638.0)); } } } } } auto APU::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto APU::main() -> void { u32 pulseOutput = pulse1.clock() + pulse2.clock(); u32 triangleOutput = triangle.clock(); u32 noiseOutput = noise.clock(); u32 dmcOutput = dmc.clock(); clockFrameCounterDivider(); s32 output = 0; output += pulseDAC[pulseOutput]; output += dmcTriangleNoiseDAC[dmcOutput][triangleOutput][noiseOutput]; stream->frame(sclamp<16>(output) / 32768.0); tick(); } auto APU::tick() -> void { Thread::step(rate()); Thread::synchronize(cpu); } auto APU::setIRQ() -> void { cpu.apuLine(frame.irqPending | dmc.irqPending); } auto APU::power(bool reset) -> void { Thread::create(system.frequency(), {&APU::main, this}); pulse1 = {}; pulse2 = {}; triangle = {}; noise = {}; dmc = {}; dmc.periodCounter = Region::PAL() ? dmcPeriodTablePAL[0] : dmcPeriodTableNTSC[0]; frame = {}; enabledChannels = 0; setIRQ(); } auto APU::readIO(n16 address) -> n8 { n8 data = cpu.MDR; switch(address) { case 0x4015: { data.bit(0) = (bool)pulse1.lengthCounter; data.bit(1) = (bool)pulse2.lengthCounter; data.bit(2) = (bool)triangle.lengthCounter; data.bit(3) = (bool)noise.lengthCounter; data.bit(4) = (bool)dmc.lengthCounter; data.bit(5) = 0; data.bit(6) = frame.irqPending; data.bit(7) = dmc.irqPending; frame.irqPending = false; setIRQ(); return data; } } return data; } auto APU::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x4000: { pulse1.envelope.speed = data.bit(0,3); pulse1.envelope.useSpeedAsVolume = data.bit(4); pulse1.envelope.loopMode = data.bit(5); pulse1.duty = data.bit(6,7); return; } case 0x4001: { pulse1.sweep.shift = data.bit(0,2); pulse1.sweep.decrement = data.bit(3); pulse1.sweep.period = data.bit(4,6); pulse1.sweep.enable = data.bit(7); pulse1.sweep.reload = true; return; } case 0x4002: { pulse1.period.bit(0,7) = data.bit(0,7); pulse1.sweep.pulsePeriod.bit(0,7) = data.bit(0,7); return; } case 0x4003: { pulse1.period.bit(8,10) = data.bit(0,2); pulse1.sweep.pulsePeriod.bit(8,10) = data.bit(0,2); pulse1.dutyCounter = 0; pulse1.envelope.reloadDecay = true; if(enabledChannels.bit(0)) { pulse1.lengthCounter = lengthCounterTable[data.bit(3,7)]; } return; } case 0x4004: { pulse2.envelope.speed = data.bit(0,3); pulse2.envelope.useSpeedAsVolume = data.bit(4); pulse2.envelope.loopMode = data.bit(5); pulse2.duty = data.bit(6,7); return; } case 0x4005: { pulse2.sweep.shift = data.bit(0,2); pulse2.sweep.decrement = data.bit(3); pulse2.sweep.period = data.bit(4,6); pulse2.sweep.enable = data.bit(7); pulse2.sweep.reload = true; return; } case 0x4006: { pulse2.period.bit(0,7) = data.bit(0,7); pulse2.sweep.pulsePeriod.bit(0,7) = data.bit(0,7); return; } case 0x4007: { pulse2.period.bit(8,10) = data.bit(0,2); pulse2.sweep.pulsePeriod.bit(8,10) = data.bit(0,2); pulse2.dutyCounter = 0; pulse2.envelope.reloadDecay = true; if(enabledChannels.bit(1)) { pulse2.lengthCounter = lengthCounterTable[data.bit(3,7)]; } return; } case 0x4008: { triangle.linearLength = data.bit(0,6); triangle.haltLengthCounter = data.bit(7); return; } case 0x400a: { triangle.period.bit(0,7) = data.bit(0,7); return; } case 0x400b: { triangle.period.bit(8,10) = data.bit(0,2); triangle.reloadLinear = true; if(enabledChannels.bit(2)) { triangle.lengthCounter = lengthCounterTable[data.bit(3,7)]; } return; } case 0x400c: { noise.envelope.speed = data.bit(0,3); noise.envelope.useSpeedAsVolume = data.bit(4); noise.envelope.loopMode = data.bit(5); return; } case 0x400e: { noise.period = data.bit(0,3); noise.shortMode = data.bit(7); return; } case 0x400f: { noise.envelope.reloadDecay = true; if(enabledChannels.bit(3)) { noise.lengthCounter = lengthCounterTable[data.bit(3,7)]; } return; } case 0x4010: { dmc.period = data.bit(0,3); dmc.loopMode = data.bit(6); dmc.irqEnable = data.bit(7); dmc.irqPending = dmc.irqPending && dmc.irqEnable && !dmc.loopMode; setIRQ(); return; } case 0x4011: { dmc.dacLatch = data.bit(0,6); return; } case 0x4012: { dmc.addressLatch = data; return; } case 0x4013: { dmc.lengthLatch = data; return; } case 0x4015: { if(data.bit(0) == 0) pulse1.lengthCounter = 0; if(data.bit(1) == 0) pulse2.lengthCounter = 0; if(data.bit(2) == 0) triangle.lengthCounter = 0; if(data.bit(3) == 0) noise.lengthCounter = 0; if(data.bit(4) == 0) dmc.stop(); if(data.bit(4) == 1) dmc.start(); dmc.irqPending = false; setIRQ(); enabledChannels = data.bit(0,4); return; } case 0x4017: { frame.mode = data.bit(6,7); frame.counter = 0; if(frame.mode.bit(1)) { clockFrameCounter(); } if(frame.mode.bit(0)) { frame.irqPending = false; setIRQ(); } frame.divider = FrameCounter::NtscPeriod; return; } } } auto APU::clockFrameCounter() -> void { frame.counter++; if(frame.counter.bit(0)) { pulse1.clockLength(); pulse1.sweep.clock(0); pulse2.clockLength(); pulse2.sweep.clock(1); triangle.clockLength(); noise.clockLength(); } pulse1.envelope.clock(); pulse2.envelope.clock(); triangle.clockLinearLength(); noise.envelope.clock(); if(frame.counter == 0) { if(frame.mode.bit(1)) { frame.divider += FrameCounter::NtscPeriod; } if(frame.mode == 0) { frame.irqPending = true; setIRQ(); } } } auto APU::clockFrameCounterDivider() -> void { frame.divider -= 2; if(frame.divider <= 0) { clockFrameCounter(); frame.divider += FrameCounter::NtscPeriod; } } const n8 APU::lengthCounterTable[32] = { 0x0a,0xfe,0x14,0x02,0x28,0x04,0x50,0x06,0xa0,0x08,0x3c,0x0a,0x0e,0x0c,0x1a,0x0e, 0x0c,0x10,0x18,0x12,0x30,0x14,0x60,0x16,0xc0,0x18,0x48,0x1a,0x10,0x1c,0x20,0x1e, }; const n16 APU::noisePeriodTableNTSC[16] = { 4, 8, 16, 32, 64, 96, 128, 160, 202, 254, 380, 508, 762, 1016, 2034, 4068, }; const n16 APU::noisePeriodTablePAL[16] = { 4, 8, 14, 30, 60, 88, 118, 148, 188, 236, 354, 472, 708, 944, 1890, 3778, }; const n16 APU::dmcPeriodTableNTSC[16] = { 428, 380, 340, 320, 286, 254, 226, 214, 190, 160, 142, 128, 106, 84, 72, 54, }; const n16 APU::dmcPeriodTablePAL[16] = { 398, 354, 316, 298, 276, 236, 210, 198, 176, 148, 132, 118, 98, 78, 66, 50, }; } ares-126/ares/fc/apu/apu.hpp000066400000000000000000000063171415063341600157350ustar00rootroot00000000000000struct APU : Thread { Node::Object node; Node::Audio::Stream stream; auto rate() const -> u32 { return Region::PAL() ? 16 : 12; } //apu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto tick() -> void; auto setIRQ() -> void; auto power(bool reset) -> void; auto readIO(n16 address) -> n8; auto writeIO(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Envelope { //envelope.cpp auto volume() const -> u32; auto clock() -> void; //serialization.cpp auto serialize(serializer&) -> void; n4 speed; n1 useSpeedAsVolume; n1 loopMode; n1 reloadDecay; n8 decayCounter; n4 decayVolume; }; struct Sweep { //sweep.cpp auto checkPeriod() -> bool; auto clock(u32 channel) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 shift; n1 decrement; n3 period; n8 counter = 1; n1 enable; n1 reload; n11 pulsePeriod; }; struct Pulse { //pulse.cpp auto clockLength() -> void; auto checkPeriod() -> bool; auto clock() -> n8; //serialization.cpp auto serialize(serializer&) -> void; Envelope envelope; Sweep sweep; n16 lengthCounter; n16 periodCounter = 1; n2 duty; n3 dutyCounter; n11 period; } pulse1, pulse2; struct Triangle { //triangle.cpp auto clockLength() -> void; auto clockLinearLength() -> void; auto clock() -> n8; //serialization.cpp auto serialize(serializer&) -> void; n16 lengthCounter; n16 periodCounter = 1; n8 linearLength; n1 haltLengthCounter; n11 period; n5 stepCounter; n8 linearLengthCounter; n1 reloadLinear; } triangle; struct Noise { //noise.cpp auto clockLength() -> void; auto clock() -> n8; //serialization.cpp auto serialize(serializer&) -> void; Envelope envelope; n16 lengthCounter; n16 periodCounter = 1; n4 period; n1 shortMode; n15 lfsr = 1; } noise; struct DMC { //dmc.cpp auto start() -> void; auto stop() -> void; auto clock() -> n8; //serialization.cpp auto serialize(serializer&) -> void; n16 lengthCounter; n16 periodCounter; n16 dmaDelayCounter; n1 irqPending; n4 period; n1 irqEnable; n1 loopMode; n8 dacLatch; n8 addressLatch; n8 lengthLatch; n15 readAddress; n3 bitCounter; n1 dmaBufferValid; n8 dmaBuffer; n1 sampleValid; n8 sample; } dmc; struct FrameCounter { static constexpr u16 NtscPeriod = 14915; //~(21.477MHz / 6 / 240hz) //serialization.cpp auto serialize(serializer&) -> void; n1 irqPending; n2 mode; n2 counter; i32 divider = 1; } frame; //apu.cpp auto clockFrameCounter() -> void; auto clockFrameCounterDivider() -> void; n5 enabledChannels; //unserialized: i16 pulseDAC[32]; i16 dmcTriangleNoiseDAC[128][16][16]; static const n8 lengthCounterTable[32]; static const n16 dmcPeriodTableNTSC[16]; static const n16 dmcPeriodTablePAL[16]; static const n16 noisePeriodTableNTSC[16]; static const n16 noisePeriodTablePAL[16]; }; extern APU apu; ares-126/ares/fc/apu/dmc.cpp000066400000000000000000000027121415063341600157010ustar00rootroot00000000000000auto APU::DMC::start() -> void { if(lengthCounter == 0) { readAddress = 0x4000 + (addressLatch << 6); lengthCounter = (lengthLatch << 4) + 1; } } auto APU::DMC::stop() -> void { lengthCounter = 0; dmaDelayCounter = 0; cpu.rdyLine(1); cpu.rdyAddress(false); } auto APU::DMC::clock() -> n8 { n8 result = dacLatch; if(dmaDelayCounter > 0) { dmaDelayCounter--; if(dmaDelayCounter == 1) { cpu.rdyAddress(true, 0x8000 | readAddress); } else if(dmaDelayCounter == 0) { cpu.rdyLine(1); cpu.rdyAddress(false); dmaBuffer = cpu.MDR; dmaBufferValid = true; lengthCounter--; readAddress++; if(lengthCounter == 0) { if(loopMode) { start(); } else if(irqEnable) { irqPending = true; apu.setIRQ(); } } } } if(--periodCounter == 0) { if(sampleValid) { s32 delta = (((sample >> bitCounter) & 1) << 2) - 2; u32 data = dacLatch + delta; if((data & 0x80) == 0) dacLatch = data; } if(++bitCounter == 0) { if(dmaBufferValid) { sampleValid = true; sample = dmaBuffer; dmaBufferValid = false; } else { sampleValid = false; } } periodCounter = Region::PAL() ? dmcPeriodTablePAL[period] : dmcPeriodTableNTSC[period]; } if(lengthCounter > 0 && !dmaBufferValid && dmaDelayCounter == 0) { cpu.rdyLine(0); dmaDelayCounter = 4; } return result; } ares-126/ares/fc/apu/envelope.cpp000066400000000000000000000005441415063341600167540ustar00rootroot00000000000000auto APU::Envelope::volume() const -> u32 { return useSpeedAsVolume ? speed : decayVolume; } auto APU::Envelope::clock() -> void { if(reloadDecay) { reloadDecay = 0; decayVolume = 0xf; decayCounter = speed + 1; return; } if(--decayCounter == 0) { decayCounter = speed + 1; if(decayVolume || loopMode) decayVolume--; } } ares-126/ares/fc/apu/noise.cpp000066400000000000000000000011451415063341600162520ustar00rootroot00000000000000auto APU::Noise::clockLength() -> void { if(envelope.loopMode == 0) { if(lengthCounter > 0) lengthCounter--; } } auto APU::Noise::clock() -> n8 { if(lengthCounter == 0) return 0; n8 result = (lfsr & 1) ? envelope.volume() : 0; if(--periodCounter == 0) { u32 feedback; if(shortMode) { feedback = ((lfsr >> 0) & 1) ^ ((lfsr >> 6) & 1); } else { feedback = ((lfsr >> 0) & 1) ^ ((lfsr >> 1) & 1); } lfsr = (lfsr >> 1) | (feedback << 14); periodCounter = Region::PAL() ? apu.noisePeriodTablePAL[period] : apu.noisePeriodTableNTSC[period]; } return result; } ares-126/ares/fc/apu/pulse.cpp000066400000000000000000000012401415063341600162610ustar00rootroot00000000000000auto APU::Pulse::clockLength() -> void { if(envelope.loopMode == 0) { if(lengthCounter) lengthCounter--; } } auto APU::Pulse::clock() -> n8 { if(!sweep.checkPeriod()) return 0; if(lengthCounter == 0) return 0; static constexpr u32 dutyTable[4][8] = { {0, 0, 0, 0, 0, 0, 0, 1}, //12.5% {0, 0, 0, 0, 0, 0, 1, 1}, //25.0% {0, 0, 0, 0, 1, 1, 1, 1}, //50.0% {1, 1, 1, 1, 1, 1, 0, 0}, //25.0% (negated) }; n8 result = dutyTable[duty][dutyCounter] ? envelope.volume() : 0; if(sweep.pulsePeriod < 0x008) result = 0; if(--periodCounter == 0) { periodCounter = (sweep.pulsePeriod + 1) * 2; dutyCounter--; } return result; } ares-126/ares/fc/apu/serialization.cpp000066400000000000000000000026551415063341600200210ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Thread::serialize(s); s(pulse1); s(pulse2); s(triangle); s(dmc); s(frame); s(enabledChannels); } auto APU::Envelope::serialize(serializer& s) -> void { s(speed); s(useSpeedAsVolume); s(loopMode); s(reloadDecay); s(decayCounter); s(decayVolume); } auto APU::Sweep::serialize(serializer& s) -> void { s(shift); s(decrement); s(period); s(counter); s(enable); s(reload); s(pulsePeriod); } auto APU::Pulse::serialize(serializer& s) -> void { s(envelope); s(sweep); s(lengthCounter); s(periodCounter); s(duty); s(dutyCounter); s(period); } auto APU::Triangle::serialize(serializer& s) -> void { s(lengthCounter); s(periodCounter); s(linearLength); s(haltLengthCounter); s(period); s(stepCounter); s(linearLengthCounter); s(reloadLinear); } auto APU::Noise::serialize(serializer& s) -> void { s(envelope); s(lengthCounter); s(periodCounter); s(period); s(shortMode); s(lfsr); } auto APU::DMC::serialize(serializer& s) -> void { s(lengthCounter); s(periodCounter); s(dmaDelayCounter); s(irqPending); s(period); s(irqEnable); s(loopMode); s(dacLatch); s(addressLatch); s(lengthLatch); s(readAddress); s(bitCounter); s(dmaBufferValid); s(dmaBuffer); s(sampleValid); s(sample); } auto APU::FrameCounter::serialize(serializer& s) -> void { s(irqPending); s(mode); s(counter); s(divider); } ares-126/ares/fc/apu/sweep.cpp000066400000000000000000000011731415063341600162610ustar00rootroot00000000000000auto APU::Sweep::checkPeriod() -> bool { if(pulsePeriod > 0x7ff) return false; if(decrement == 0) { if((pulsePeriod + (pulsePeriod >> shift)) & 0x800) return false; } return true; } auto APU::Sweep::clock(u32 channel) -> void { if(--counter == 0) { counter = period + 1; if(enable && shift && pulsePeriod > 8) { s32 delta = pulsePeriod >> shift; if(decrement) { pulsePeriod -= delta; if(channel == 0) pulsePeriod--; } else if((pulsePeriod + delta) < 0x800) { pulsePeriod += delta; } } } if(reload) { reload = false; counter = period + 1; } } ares-126/ares/fc/apu/triangle.cpp000066400000000000000000000012101415063341600167330ustar00rootroot00000000000000auto APU::Triangle::clockLength() -> void { if(haltLengthCounter == 0) { if(lengthCounter > 0) lengthCounter--; } } auto APU::Triangle::clockLinearLength() -> void { if(reloadLinear) { linearLengthCounter = linearLength; } else if(linearLengthCounter) { linearLengthCounter--; } if(haltLengthCounter == 0) reloadLinear = false; } auto APU::Triangle::clock() -> n8 { n8 result = stepCounter & 0x0f; if((stepCounter & 0x10) == 0) result ^= 0x0f; if(lengthCounter == 0 || linearLengthCounter == 0) return result; if(--periodCounter == 0) { stepCounter++; periodCounter = period + 1; } return result; } ares-126/ares/fc/cartridge/000077500000000000000000000000001415063341600156075ustar00rootroot00000000000000ares-126/ares/fc/cartridge/board/000077500000000000000000000000001415063341600166765ustar00rootroot00000000000000ares-126/ares/fc/cartridge/board/bandai-74161.cpp000066400000000000000000000034051415063341600213020ustar00rootroot00000000000000struct Bandai74161 : Interface { static auto create(string id) -> Interface* { if(id == "BANDAI-74161" ) return new Bandai74161(Revision::B74161); if(id == "BANDAI-74161A") return new Bandai74161(Revision::B74161A); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; enum class Revision : u32 { B74161, B74161A, } revision; Bandai74161(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); mirror = pak->attribute("mirror") == "vertical"; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n3 bank = (address < 0xc000 ? programBank : (n3)0x7); return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; characterBank = data.bit(0,3); programBank = data.bit(4,6); nametableBank = data.bit(7); } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::B74161A) { return nametableBank << 10 | (n10)address; } return address >> !mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(characterBank << 13 | (n13)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(mirror); s(programBank); s(characterBank); s(nametableBank); } n1 mirror; n3 programBank; n4 characterBank; n1 nametableBank; }; ares-126/ares/fc/cartridge/board/bandai-fcg.cpp000066400000000000000000000046021415063341600213570ustar00rootroot00000000000000struct BandaiFCG : Interface { static auto create(string id) -> Interface* { if(id == "BANDAI-FCG") return new BandaiFCG; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); } auto main() -> void override { if(irqEnable) { if(--irqCounter == 0xffff) { cpu.irqLine(1); irqEnable = false; } } tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n4 bank = (address < 0xc000 ? programBank : (n4)0x0f); return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { switch(address & 0xe00f) { case 0x6000: characterBank[0] = data; break; case 0x6001: characterBank[1] = data; break; case 0x6002: characterBank[2] = data; break; case 0x6003: characterBank[3] = data; break; case 0x6004: characterBank[4] = data; break; case 0x6005: characterBank[5] = data; break; case 0x6006: characterBank[6] = data; break; case 0x6007: characterBank[7] = data; break; case 0x6008: programBank = data.bit(0,3); break; case 0x6009: mirror = data.bit(0,1); break; case 0x600a: irqEnable = data.bit(0); cpu.irqLine(0); break; case 0x600b: irqCounter.byte(0) = data; break; case 0x600c: irqCounter.byte(1) = data; break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | (n10)address; case 1: return address >> 1 & 0x0400 | (n10)address; case 2: return 0x0000 | (n10)address; case 3: return 0x0400 | (n10)address; } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); address = characterBank[address >> 10] << 10 | (n10)address; return characterROM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(characterBank); s(programBank); s(mirror); s(irqEnable); s(irqCounter); } n8 characterBank[8]; n4 programBank; n2 mirror; n1 irqEnable; n16 irqCounter; }; ares-126/ares/fc/cartridge/board/bandai-karaoke.cpp000066400000000000000000000035451415063341600222420ustar00rootroot00000000000000struct BandaiKaraoke : Interface { static auto create(string id) -> Interface* { if(id == "BANDAI-KARAOKE") return new BandaiKaraoke; return nullptr; } Memory::Readable programROM; Memory::Readable optionROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(optionROM, "option.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { data.bit(0) = 1; //A button data.bit(1) = 1; //B button //data.bit(2) = 1; //1-bit ADC return data; } if(address < 0xc000) { if(!optionEnable) return programROM.read(programBank << 14 | (n14)address); if(optionROM) return optionROM.read(programBank << 14 | (n14)address); return data; } return programROM.read(0xf << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data.bit(0,3); optionEnable = !data.bit(4); mirror = data.bit(5); } auto addressCIRAM(n32 address) -> n32 { return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterRAM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); return characterRAM.write(address, data); } auto serialize(serializer& s) -> void override { s(characterRAM); s(programBank); s(optionEnable); s(mirror); } n4 programBank; n1 optionEnable; n1 mirror; }; ares-126/ares/fc/cartridge/board/bandai-lz93d50.cpp000066400000000000000000000101531415063341600217300ustar00rootroot00000000000000struct BandaiLZ93D50 : Interface { static auto create(string id) -> Interface* { if(id == "BANDAI-LZ93D50") return new BandaiLZ93D50; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; M24C eeprom; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); if(auto fp = pak->read("save.eeprom")) { if(fp->size() == 128) eeprom.load(M24C::Type::X24C01); if(fp->size() == 256) eeprom.load(M24C::Type::M24C02); if(eeprom) fp->read({eeprom.memory, eeprom.size()}); } } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); if(auto fp = pak->write("save.eeprom")) { if(eeprom) fp->write({eeprom.memory, eeprom.size()}); } } auto main() -> void override { if(irqEnable) { if(--irqCounter == 0xffff) { cpu.irqLine(1); irqEnable = false; } } tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(programRAM && ramEnable) return programRAM.read((n13)address); if(eeprom) data.bit(4) = eeprom.read(); return data; } n5 bank = (address < 0xc000 ? (n5)programBank : (n5)0xf); if(characterRAM) bank.bit(4) = bool(programOuterBank); return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(programRAM && ramEnable) return programRAM.write((n13)address, data); } switch(address & 0x800f) { case 0x8000: characterBank[0] = data; programOuterBank.bit(0) = data.bit(0); break; case 0x8001: characterBank[1] = data; programOuterBank.bit(1) = data.bit(0); break; case 0x8002: characterBank[2] = data; programOuterBank.bit(2) = data.bit(0); break; case 0x8003: characterBank[3] = data; programOuterBank.bit(3) = data.bit(0); break; case 0x8004: characterBank[4] = data; break; case 0x8005: characterBank[5] = data; break; case 0x8006: characterBank[6] = data; break; case 0x8007: characterBank[7] = data; break; case 0x8008: programBank = data.bit(0,3); break; case 0x8009: mirror = data.bit(0,1); break; case 0x800a: irqEnable = data.bit(0); irqCounter = irqLatch; cpu.irqLine(0); break; case 0x800b: irqLatch.byte(0) = data; break; case 0x800c: irqLatch.byte(1) = data; break; case 0x800d: if(eeprom) { eeprom.clock = data.bit(5); eeprom.data = data.bit(6); eeprom.write(); } ramEnable = data.bit(5); break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | (n10)address; case 1: return address >> 1 & 0x0400 | (n10)address; case 2: return 0x0000 | (n10)address; case 3: return 0x0400 | (n10)address; } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterRAM) return characterRAM.read(address); address = characterBank[address >> 10] << 10 | (n10)address; return characterROM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { eeprom.power(); } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(eeprom); s(characterBank); s(programBank); s(programOuterBank); s(mirror); s(ramEnable); s(irqEnable); s(irqCounter); s(irqLatch); } n8 characterBank[8]; n4 programBank; n4 programOuterBank; n2 mirror; n1 ramEnable; n1 irqEnable; n16 irqCounter; n16 irqLatch; }; ares-126/ares/fc/cartridge/board/bandai-oeka.cpp000066400000000000000000000040751415063341600215430ustar00rootroot00000000000000struct BandaiOeka : Interface { static auto create(string id) -> Interface* { if(id == "BANDAI-OEKA") return new BandaiOeka; return nullptr; } Memory::Readable programROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto addressTest(n32 address) -> void { if((characterAddress >> 12) != 2 && (address >> 12) == 2) { characterBank.bit(0,1) = address >> 8 & 3; } characterAddress = address; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address == 0x2006) { if(++characterLatch) addressTest(data << 8); } if(address < 0x8000) return; programBank = data.bit(0,1); characterBank.bit(2) = data.bit(2); } auto addressCHR(n32 address) const -> n32 { n3 bank = (address < 0x1000) ? characterBank : n3(characterBank & 4 | 3); return bank << 12 | (n12)address; } auto addressCIRAM(n32 address) const -> n32 { return address >> !mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { addressTest(address); if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterRAM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { addressTest(address); if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); return characterRAM.write(addressCHR(address), data); } auto serialize(serializer& s) -> void override { s(characterRAM); s(mirror); s(programBank); s(characterBank); s(characterLatch); s(characterAddress); } n1 mirror; n2 programBank; n3 characterBank; n1 characterLatch; n32 characterAddress; }; ares-126/ares/fc/cartridge/board/board.cpp000066400000000000000000000100641415063341600204720ustar00rootroot00000000000000namespace Board { #include "bandai-74161.cpp" #include "bandai-fcg.cpp" #include "bandai-karaoke.cpp" #include "bandai-lz93d50.cpp" #include "bandai-oeka.cpp" #include "colordreams-74x377.cpp" #include "gtrom.cpp" #include "jaleco-jf05.cpp" #include "jaleco-jf11.cpp" #include "jaleco-jf16.cpp" #include "jaleco-jf17.cpp" #include "jaleco-jf23.cpp" #include "konami-vrc1.cpp" #include "konami-vrc2.cpp" #include "konami-vrc3.cpp" #include "konami-vrc4.cpp" #include "konami-vrc5.cpp" #include "konami-vrc6.cpp" #include "konami-vrc7.cpp" #include "hvc-axrom.cpp" #include "hvc-bnrom.cpp" #include "hvc-cnrom.cpp" #include "hvc-exrom.cpp" #include "hvc-fmr.cpp" #include "hvc-fxrom.cpp" #include "hvc-gxrom.cpp" #include "hvc-hkrom.cpp" #include "hvc-nrom.cpp" #include "hvc-pxrom.cpp" #include "hvc-sxrom.cpp" #include "hvc-txrom.cpp" #include "hvc-uxrom.cpp" #include "irem-g101.cpp" #include "irem-h3001.cpp" #include "irem-lrog017.cpp" #include "irem-tam-s1.cpp" #include "mlt-action52.cpp" #include "namco-118.cpp" #include "namco-163.cpp" #include "namco-340.cpp" #include "sunsoft-1.cpp" #include "sunsoft-2.cpp" #include "sunsoft-3.cpp" #include "sunsoft-4.cpp" #include "sunsoft-5b.cpp" #include "taito-tc0190.cpp" #include "taito-tc0690.cpp" #include "taito-x1-005.cpp" #include "taito-x1-017.cpp" auto Interface::create(string board) -> Interface* { Interface* p = nullptr; if(!p) p = Bandai74161::create(board); if(!p) p = BandaiFCG::create(board); if(!p) p = BandaiKaraoke::create(board); if(!p) p = BandaiLZ93D50::create(board); if(!p) p = BandaiOeka::create(board); if(!p) p = ColorDreams_74x377::create(board); if(!p) p = GTROM::create(board); if(!p) p = HVC_AxROM::create(board); if(!p) p = HVC_BNROM::create(board); if(!p) p = HVC_CNROM::create(board); if(!p) p = HVC_ExROM::create(board); if(!p) p = HVC_FMR::create(board); if(!p) p = HVC_FxROM::create(board); if(!p) p = HVC_GxROM::create(board); if(!p) p = HVC_HKROM::create(board); if(!p) p = HVC_NROM::create(board); if(!p) p = HVC_PxROM::create(board); if(!p) p = HVC_SxROM::create(board); if(!p) p = HVC_TxROM::create(board); if(!p) p = HVC_UxROM::create(board); if(!p) p = IremG101::create(board); if(!p) p = IremH3001::create(board); if(!p) p = IremLROG017::create(board); if(!p) p = IremTAMS1::create(board); if(!p) p = JalecoJF05::create(board); if(!p) p = JalecoJF11::create(board); if(!p) p = JalecoJF16::create(board); if(!p) p = JalecoJF17::create(board); if(!p) p = JalecoJF23::create(board); if(!p) p = KonamiVRC1::create(board); if(!p) p = KonamiVRC2::create(board); if(!p) p = KonamiVRC3::create(board); if(!p) p = KonamiVRC4::create(board); if(!p) p = KonamiVRC5::create(board); if(!p) p = KonamiVRC6::create(board); if(!p) p = KonamiVRC7::create(board); if(!p) p = MltAction52::create(board); if(!p) p = Namco118::create(board); if(!p) p = Namco163::create(board); if(!p) p = Namco340::create(board); if(!p) p = Sunsoft1::create(board); if(!p) p = Sunsoft2::create(board); if(!p) p = Sunsoft3::create(board); if(!p) p = Sunsoft4::create(board); if(!p) p = Sunsoft5B::create(board); if(!p) p = TaitoTC0190::create(board); if(!p) p = TaitoTC0690::create(board); if(!p) p = TaitoX1005::create(board); if(!p) p = TaitoX1017::create(board); if(!p) p = new Interface; return p; } auto Interface::main() -> void { cartridge.step(cartridge.rate() * 4095); tick(); } auto Interface::tick() -> void { cartridge.step(cartridge.rate()); cartridge.synchronize(cpu); } auto Interface::load(Memory::Readable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size(), 0xff); memory.load(fp); return true; } return false; } auto Interface::load(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size(), 0xff); memory.load(fp); return true; } return false; } auto Interface::save(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->write(name)) { memory.save(fp); return true; } return false; } } ares-126/ares/fc/cartridge/board/board.hpp000066400000000000000000000016021415063341600204750ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; static auto create(string manifest) -> Interface*; virtual ~Interface() = default; virtual auto load() -> void {} virtual auto save() -> void {} virtual auto unload() -> void {} virtual auto main() -> void; virtual auto tick() -> void; virtual auto readPRG(n32 address, n8 data) -> n8 { return data; } virtual auto writePRG(n32 address, n8 data) -> void {} virtual auto readCHR(n32 address, n8 data) -> n8 { return data; } virtual auto writeCHR(n32 address, n8 data) -> void {} virtual auto scanline(n32 y) -> void {} virtual auto power() -> void {} virtual auto serialize(serializer&) -> void {} protected: auto load(Memory::Readable& memory, string name) -> bool; auto load(Memory::Writable& memory, string name) -> bool; auto save(Memory::Writable& memory, string name) -> bool; }; } ares-126/ares/fc/cartridge/board/colordreams-74x377.cpp000066400000000000000000000034751415063341600226060ustar00rootroot00000000000000struct ColorDreams_74x377 : Interface { static auto create(string id) -> Interface* { if(id == "COLORDREAMS-74*377") return new ColorDreams_74x377(); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data.bit(0,1); characterBank = data.bit(4,7); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } address = characterBank << 13 | (n13)address; if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } address = characterBank << 13 | (n13)address; if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(programBank); s(characterBank); s(mirror); } n2 programBank; n4 characterBank; n1 mirror; }; ares-126/ares/fc/cartridge/board/gtrom.cpp000066400000000000000000000032111415063341600205270ustar00rootroot00000000000000struct GTROM : Interface { static auto create(string id) -> Interface* { if(id == "GTROM" ) return new GTROM(); return nullptr; } Memory::Readable programROM; Memory::Writable characterRAM; Memory::Writable videoRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterRAM, "character.ram"); videoRAM.allocate(16_KiB); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x5000 && address <= 0x5fff) { programBank = data.bit(0, 3); characterBank = data.bit(4); videoBank = data.bit(5); return; } } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return videoRAM.read(videoBank << 13 | (n13)address); if(characterRAM) return characterRAM.read(characterBank << 13 | (n13)address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return videoRAM.write(videoBank << 13 | (n13)address, data); return characterRAM.write(characterBank << 13 | (n13)address, data); } auto power() -> void override { programBank = 0; characterBank = 0; videoBank = 0; } auto serialize(serializer& s) -> void override { s(characterRAM); s(videoRAM); s(programBank); s(characterBank); s(videoBank); } n4 programBank; n1 characterBank; n1 videoBank; }; ares-126/ares/fc/cartridge/board/hvc-axrom.cpp000066400000000000000000000035531415063341600213140ustar00rootroot00000000000000struct HVC_AxROM : Interface { static auto create(string id) -> Interface* { if(id == "HVC-AMROM" ) return new HVC_AxROM(Revision::AMROM); if(id == "HVC-ANROM" ) return new HVC_AxROM(Revision::ANROM); if(id == "HVC-AN1ROM") return new HVC_AxROM(Revision::AN1ROM); if(id == "HVC-AOROM" ) return new HVC_AxROM(Revision::AOROM); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { AMROM, ANROM, AN1ROM, AOROM, } revision; HVC_AxROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data.bit(0,3); mirror = data.bit(4); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(mirror << 10 | (n10)address); if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(mirror << 10 | (n10)address, data); if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { programBank = 0x0f; } auto serialize(serializer& s) -> void override { s(characterRAM); s(programBank); s(mirror); } n4 programBank; n1 mirror; }; ares-126/ares/fc/cartridge/board/hvc-bnrom.cpp000066400000000000000000000032061415063341600212760ustar00rootroot00000000000000struct HVC_BNROM : Interface { static auto create(string id) -> Interface* { if(id == "HVC-BNROM") return new HVC_BNROM; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(mirror); s(programBank); } n1 mirror; //0 = horizontal, 1 = vertical n8 programBank; }; ares-126/ares/fc/cartridge/board/hvc-cnrom.cpp000066400000000000000000000046031415063341600213010ustar00rootroot00000000000000struct HVC_CNROM : Interface { static auto create(string id) -> Interface* { if(id == "HVC-CNROM" ) return new HVC_CNROM(Revision::CNROM); if(id == "HVC-CNROM-SEC") return new HVC_CNROM(Revision::CNROMS); if(id == "HVC-CPROM" ) return new HVC_CNROM(Revision::CPROM); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { CNROM, CNROMS, CPROM, } revision; HVC_CNROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; key = pak->attribute("chip/key").natural(); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read((n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; characterBank = data.bit(0,1); characterEnable = (data == key); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } if(revision == Revision::CPROM) { n2 bank = (address < 0x1000) ? (n2)0 : characterBank; return characterRAM.read(bank << 12 | (n12)address); } if(revision == Revision::CNROMS) { if(!characterEnable) return 0xff; return characterROM.read((n13)address); } address = characterBank << 13 | (n13)address; return characterROM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } if(revision == Revision::CPROM) { n2 bank = (address < 0x1000) ? (n2)0 : characterBank; return characterRAM.write(bank << 12 | (n12)address, data); } } auto serialize(serializer& s) -> void override { s(characterRAM); s(mirror); s(key); s(characterBank); s(characterEnable); } n1 mirror; //0 = horizontal, 1 = vertical n8 key; n2 characterBank; n1 characterEnable; }; ares-126/ares/fc/cartridge/board/hvc-exrom.cpp000066400000000000000000000473571415063341600213320ustar00rootroot00000000000000struct HVC_ExROM : Interface { //MMC5 static auto create(string id) -> Interface* { if(id == "HVC-EKROM") return new HVC_ExROM(Revision::EKROM); if(id == "HVC-ELROM") return new HVC_ExROM(Revision::ELROM); if(id == "HVC-ETROM") return new HVC_ExROM(Revision::ETROM); if(id == "HVC-EWROM") return new HVC_ExROM(Revision::EWROM); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable exram; Node::Audio::Stream stream; enum class Revision : u32 { EKROM, ELROM, ETROM, EWROM, } revision; enum class ChipRevision : u32 { MMC5, MMC5A, } chipRevision; HVC_ExROM(Revision revision) : revision(revision) {} struct Envelope { auto volume() const -> u32 { return useSpeedAsVolume ? speed : decayVolume; } auto clock() -> void { if(reloadDecay) { reloadDecay = 0; decayVolume = 0xf; decayCounter = speed + 1; return; } if(--decayCounter == 0) { decayCounter = speed + 1; if(decayVolume || loopMode) decayVolume--; } } auto serialize(serializer& s) -> void { s(speed); s(useSpeedAsVolume); s(loopMode); s(reloadDecay); s(decayCounter); s(decayVolume); } n4 speed; n1 useSpeedAsVolume; n1 loopMode; n1 reloadDecay; n8 decayCounter; n4 decayVolume; }; struct Pulse { //operates identically to the APU pulse channels; only without sweep support auto clockLength() -> void { if(envelope.loopMode == 0) { //clocked at twice the rate of the APU pulse channels if(lengthCounter) lengthCounter--; if(lengthCounter) lengthCounter--; } } auto clock() -> n8 { if(lengthCounter == 0) return 0; static constexpr u32 dutyTable[4][8] = { {0, 0, 0, 0, 0, 0, 0, 1}, //12.5% {0, 0, 0, 0, 0, 0, 1, 1}, //25.0% {0, 0, 0, 0, 1, 1, 1, 1}, //50.0% {1, 1, 1, 1, 1, 1, 0, 0}, //25.0% (negated) }; n8 result = dutyTable[duty][dutyCounter] ? envelope.volume() : 0; if(--periodCounter == 0) { periodCounter = (period + 1) * 2; dutyCounter--; } return result; } auto serialize(serializer& s) -> void { s(envelope); s(lengthCounter); s(periodCounter); s(duty); s(dutyCounter); s(period); } Envelope envelope; n16 lengthCounter; n16 periodCounter; n2 duty; n3 dutyCounter; n11 period; }; struct PCM { auto serialize(serializer& s) -> void { s(mode); s(irqEnable); s(irqLine); s(dac); } n1 mode; n1 irqEnable; n1 irqLine; n8 dac; }; struct Pin { auto serialize(serializer& s) -> void { s(source); s(direction); s(line); } n1 source; //0 = $5208, 1 = $5800-5bff n1 direction; //0 = output, 1 = input n1 line; }; auto load() -> void override { chipRevision = ChipRevision::MMC5A; Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); exram.allocate(1_KiB); stream = cartridge.node->append("MMC5"); stream->setChannels(1); stream->setFrequency(u32(system.frequency() + 0.5) / cartridge.rate()); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto unload() -> void override { cartridge.node->remove(stream); stream.reset(); } auto main() -> void override { //scanline() resets this; if no scanlines detected, enter video blanking period if(cycleCounter >= 200) blank(); //113-114 normal; ~2500 across Vblank period else cycleCounter++; if(timerCounter && --timerCounter == 0) { timerLine = 1; } i32 output = 0; output += apu.pulseDAC[pulse1.clock() + pulse2.clock()]; output += pcm.dac << 7; stream->frame(sclamp<16>(-output) / 32768.0); cpu.irqLine((irqLine & irqEnable) || (pcm.irqLine & pcm.irqEnable) || timerLine); tick(); } auto blank() -> void { inFrame = 0; } auto scanline() -> void { cycleCounter = 0; hcounter = 0; if(!inFrame) { inFrame = 1; irqLine = 0; vcounter = 0; } else { if(vcounter == irqCoincidence) irqLine = 1; vcounter++; } } auto accessPRG(bool write, n32 address, n8 data = 0x00) -> n8 { n8 bank; if((address & 0xe000) == 0x6000) { bank = ramSelect << 2 | ramBank; address &= 0x1fff; } else if(programMode == 0) { bank = programBank[3] & ~3; address &= 0x7fff; } else if(programMode == 1) { if((address & 0xc000) == 0x8000) bank = programBank[1] & ~1; if((address & 0xe000) == 0xc000) bank = programBank[3] & ~1; address &= 0x3fff; } else if(programMode == 2) { if((address & 0xe000) == 0x8000) bank = programBank[1] & ~1 | 0; if((address & 0xe000) == 0xa000) bank = programBank[1] & ~1 | 1; if((address & 0xe000) == 0xc000) bank = programBank[2]; if((address & 0xe000) == 0xe000) bank = programBank[3]; address &= 0x1fff; } else if(programMode == 3) { if((address & 0xe000) == 0x8000) bank = programBank[0]; if((address & 0xe000) == 0xa000) bank = programBank[1]; if((address & 0xe000) == 0xc000) bank = programBank[2]; if((address & 0xe000) == 0xe000) bank = programBank[3]; address &= 0x1fff; } n1 rom = bank.bit(7); bank.bit(7) = 0; if(!write) { if(rom) { return programROM.read(bank << 13 | address); } else { return programRAM.read(bank << 13 | address); } } else { if(rom) { programROM.write(bank << 13 | address, data); } else { if(ramWriteProtect[0] == 2 && ramWriteProtect[1] == 1) { programRAM.write(bank << 13 | address, data); } } return 0x00; } } auto readPRG(n32 address, n8 data) -> n8 override { if((address & 0xfc00) == 0x5800) { if(chipRevision != ChipRevision::MMC5A) return data; if(cl3.direction == 1) cl3.line = 0; //!M2 if(sl3.direction == 1) sl3.line = 0; //!M2 return data; } if((address & 0xfc00) == 0x5c00) { if(exramMode >= 2) return exram[(n10)address]; return data; } if(address >= 0x6000) { data = accessPRG(0, address); if(pcm.mode == 1 && (address & 0xc000) == 0x8000) pcm.dac = data; return data; } switch(address) { case 0x5010: { n8 data; data.bit(0) = pcm.mode; data.bit(7) = pcm.irqLine & pcm.irqEnable; pcm.irqLine = 0; return data; } case 0x5015: { n8 data; data.bit(0) = (bool)pulse1.lengthCounter; data.bit(1) = (bool)pulse2.lengthCounter; return data; } case 0x5204: { n8 data; data.bit(6) = inFrame; data.bit(7) = irqLine; irqLine = 0; return data; } case 0x5205: return multiplier * multiplicand >> 0; case 0x5206: return multiplier * multiplicand >> 8; case 0x5208: { if(chipRevision != ChipRevision::MMC5A) break; n8 data; data.bit(6) = cl3.line; data.bit(7) = sl3.line; return data; } case 0x5209: { if(chipRevision != ChipRevision::MMC5A) break; n8 data; data.bit(7) = timerLine; timerLine = 0; return data; } } return 0x00; } auto writePRG(n32 address, n8 data) -> void override { if((address & 0xfc00) == 0x5800) { if(chipRevision != ChipRevision::MMC5A) return; if(cl3.direction == 1) cl3.line = 0; //!M2 if(sl3.direction == 1) sl3.line = 0; //!M2 return; } if((address & 0xfc00) == 0x5c00) { //writes 0x00 *during* Vblank (not during screen rendering ...) if(exramMode == 0 || exramMode == 1) exram[(n10)address] = inFrame ? data : (n8)0x00; if(exramMode == 2) exram[(n10)address] = data; return; } if(address >= 0x6000) { accessPRG(1, address, data); return; } switch(address) { case 0x2000: sprite8x16 = data.bit(5); break; case 0x2001: //if background + sprites are disabled; enter video blanking period if(!data.bit(3,4)) blank(); break; case 0x5000: pulse1.envelope.speed = data.bit(0,3); pulse1.envelope.useSpeedAsVolume = data.bit(4); pulse1.envelope.loopMode = data.bit(5); pulse1.duty = data.bit(6,7); break; case 0x5001: break; case 0x5002: pulse1.period.bit(0,7) = data.bit(0,7); break; case 0x5003: pulse1.period.bit(8,10) = data.bit(0,2); pulse1.dutyCounter = 0; pulse1.envelope.reloadDecay = 1; pulse1.lengthCounter = apu.lengthCounterTable[data.bit(3,7)]; break; case 0x5004: pulse2.envelope.speed = data.bit(0,3); pulse2.envelope.useSpeedAsVolume = data.bit(4); pulse2.envelope.loopMode = data.bit(5); pulse2.duty = data.bit(6,7); break; case 0x5005: break; case 0x5006: pulse2.period.bit(0,7) = data.bit(0,7); break; case 0x5007: pulse2.period.bit(8,10) = data.bit(0,2); pulse2.dutyCounter = 0; pulse2.envelope.reloadDecay = 1; pulse2.lengthCounter = apu.lengthCounterTable[data.bit(3,7)]; break; case 0x5010: pcm.mode = data.bit(0); pcm.irqEnable = data.bit(7); break; case 0x5011: if(pcm.mode == 0) { if(data == 0x00) pcm.irqLine = 1; if(data != 0x00) pcm.dac = data; } break; case 0x5100: programMode = data.bit(0,1); break; case 0x5101: characterMode = data.bit(0,1); break; case 0x5102: ramWriteProtect[0] = data.bit(0,1); break; case 0x5103: ramWriteProtect[1] = data.bit(0,1); break; case 0x5104: exramMode = data.bit(0,1); break; case 0x5105: nametableMode[0] = data.bit(0,1); nametableMode[1] = data.bit(2,3); nametableMode[2] = data.bit(4,5); nametableMode[3] = data.bit(6,7); break; case 0x5106: fillmodeTile = data; break; case 0x5107: fillmodeColor.bit(0,1) = data.bit(0,1); fillmodeColor.bit(2,3) = data.bit(0,1); fillmodeColor.bit(4,5) = data.bit(0,1); fillmodeColor.bit(6,7) = data.bit(0,1); break; case 0x5113: ramBank = data.bit(0,1); ramSelect = data.bit(2); break; case 0x5114: programBank[0] = data; break; case 0x5115: programBank[1] = data; break; case 0x5116: programBank[2] = data; break; case 0x5117: programBank[3] = data | 0x80; break; case 0x5120: characterSpriteBank[0] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5121: characterSpriteBank[1] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5122: characterSpriteBank[2] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5123: characterSpriteBank[3] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5124: characterSpriteBank[4] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5125: characterSpriteBank[5] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5126: characterSpriteBank[6] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5127: characterSpriteBank[7] = characterBankHi << 8 | data; characterActive = 0; break; case 0x5128: characterBackgroundBank[0] = characterBankHi << 8 | data; characterActive = 1; break; case 0x5129: characterBackgroundBank[1] = characterBankHi << 8 | data; characterActive = 1; break; case 0x512a: characterBackgroundBank[2] = characterBankHi << 8 | data; characterActive = 1; break; case 0x512b: characterBackgroundBank[3] = characterBankHi << 8 | data; characterActive = 1; break; case 0x5130: characterBankHi = data.bit(0,1); break; case 0x5200: vsplitTile = data.bit(0,4); vsplitSide = data.bit(6); vsplitEnable = data.bit(7); break; case 0x5201: vsplitScroll = data; break; case 0x5202: vsplitBank = data; break; case 0x5203: irqCoincidence = data; break; case 0x5204: irqEnable = data.bit(7); break; case 0x5205: multiplicand = data; break; case 0x5206: multiplier = data; break; case 0x5207: if(chipRevision != ChipRevision::MMC5A) return; cl3.source = data.bit(0); sl3.source = data.bit(1); cl3.direction = data.bit(6); sl3.direction = data.bit(7); break; case 0x5208: if(chipRevision != ChipRevision::MMC5A) return; if(cl3.source == 0 && cl3.direction == 0) cl3.line = data.bit(6); if(sl3.source == 0 && sl3.direction == 0) sl3.line = data.bit(7); break; case 0x5209: if(chipRevision != ChipRevision::MMC5A) return; timerCounter.bit(0,7) = data.bit(0,7); break; case 0x520a: if(chipRevision != ChipRevision::MMC5A) return; timerCounter.bit(8,15) = data.bit(0,7); break; } } auto readCIRAM(n32 address) -> n8 { if(vsplitFetch && (hcounter & 2) == 0) return exram[vsplitVoffset / 8 * 32 + vsplitHoffset / 8]; if(vsplitFetch && (hcounter & 2) != 0) return exram[vsplitVoffset / 32 * 8 + vsplitHoffset / 32 + 0x03c0]; switch(nametableMode[address >> 10 & 3]) { case 0: return ppu.readCIRAM(0x0000 | (n10)address); case 1: return ppu.readCIRAM(0x0400 | (n10)address); case 2: return exramMode < 2 ? exram[(n10)address] : (n8)0x00; case 3: return (hcounter & 2) == 0 ? fillmodeTile : fillmodeColor; } unreachable; } auto characterSpriteAddress(n32 address) -> n32 { if(characterMode == 0) { auto bank = characterSpriteBank[7]; return bank << 13 | (n13)address; } if(characterMode == 1) { auto bank = characterSpriteBank[(address >> 12) * 4 + 3]; return bank << 12 | (n12)address; } if(characterMode == 2) { auto bank = characterSpriteBank[(address >> 11) * 2 + 1]; return bank << 11 | (n11)address; } if(characterMode == 3) { auto bank = characterSpriteBank[(address >> 10)]; return bank << 10 | (n10)address; } unreachable; } auto characterBackgroundAddress(n32 address) -> n32 { address &= 0x0fff; if(characterMode == 0) { auto bank = characterBackgroundBank[3]; return bank << 13 | (n12)address; } if(characterMode == 1) { auto bank = characterBackgroundBank[3]; return bank << 12 | (n12)address; } if(characterMode == 2) { auto bank = characterBackgroundBank[(address >> 11) * 2 + 1]; return bank << 11 | (n11)address; } if(characterMode == 3) { auto bank = characterBackgroundBank[(address >> 10)]; return bank << 10 | (n10)address; } unreachable; } auto characterVsplitAddress(n32 address) -> n32 { return vsplitBank << 12 | address & 0x0ff8 | vsplitVoffset & 7; } auto readCHR(n32 address, n8 data) -> n8 override { characterAccess[0] = characterAccess[1]; characterAccess[1] = characterAccess[2]; characterAccess[2] = characterAccess[3]; characterAccess[3] = address; //detect two unused nametable fetches at end of each scanline if(characterAccess[0].bit(13) == 0 && characterAccess[1].bit(13) == 1 && characterAccess[2].bit(13) == 1 && characterAccess[3].bit(13) == 1) scanline(); if(inFrame == false) { vsplitFetch = 0; if(address & 0x2000) return readCIRAM(address); return characterROM.read(characterActive ? characterBackgroundAddress(address) : characterSpriteAddress(address)); } n1 backgroundFetch = (hcounter < 256 || hcounter >= 320); data = 0x00; if((hcounter & 7) == 0) { vsplitHoffset = hcounter >= 320 ? hcounter - 320 : hcounter + 16; vsplitVoffset = vcounter + vsplitScroll; vsplitFetch = vsplitEnable && backgroundFetch && exramMode < 2 && (vsplitSide ? vsplitHoffset / 8 >= vsplitTile : vsplitHoffset / 8 < vsplitTile); if(vsplitVoffset >= 240) vsplitVoffset -= 240; data = readCIRAM(address); exbank = characterBankHi << 6 | exram[(n10)address].bit(0,5); exattr.bit(0,1) = exram[(n10)address].bit(6,7); exattr.bit(2,3) = exram[(n10)address].bit(6,7); exattr.bit(4,5) = exram[(n10)address].bit(6,7); exattr.bit(6,7) = exram[(n10)address].bit(6,7); } else if((hcounter & 7) == 2) { data = readCIRAM(address); if(backgroundFetch && exramMode == 1) data = exattr; } else { if(vsplitFetch) data = characterROM.read(characterVsplitAddress(address)); else if(sprite8x16 ? backgroundFetch : characterActive) data = characterROM.read(characterBackgroundAddress(address)); else data = characterROM.read(characterSpriteAddress(address)); if(backgroundFetch && exramMode == 1) data = characterROM.read(exbank << 12 | (n12)address); } hcounter += 2; return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { switch(nametableMode[address >> 10 & 3]) { case 0: return ppu.writeCIRAM(0x0000 | (n10)address, data); case 1: return ppu.writeCIRAM(0x0400 | (n10)address, data); case 2: exram[(n10)address] = data; break; } } } auto power() -> void override { for(auto& byte : exram) byte = 0xff; programMode = 3; programBank[3] = 0xff; } auto serialize(serializer& s) -> void override { s(programRAM); s(exram); s(pulse1); s(pulse2); s(pcm); s(cl3); s(sl3); s(programMode); s(characterMode); s(ramWriteProtect); s(exramMode); s(nametableMode); s(fillmodeTile); s(fillmodeColor); s(ramSelect); s(ramBank); s(programBank); s(characterSpriteBank); s(characterBackgroundBank); s(characterBankHi); s(vsplitEnable); s(vsplitSide); s(vsplitTile); s(vsplitScroll); s(vsplitBank); s(irqCoincidence); s(irqEnable); s(multiplicand); s(multiplier); s(timerCounter); s(timerLine); s(cycleCounter); s(irqLine); s(inFrame); s(vcounter); s(hcounter); s(characterAccess); s(characterActive); s(sprite8x16); s(exbank); s(exattr); s(vsplitFetch); s(vsplitVoffset); s(vsplitHoffset); } //programmable registers Pulse pulse1; //$5000-5003 Pulse pulse2; //$5004-5007 PCM pcm; //$5010-5011 Pin cl3; //$5207-5208 Pin sl3; //$5207-5208 n2 programMode; //$5100 n2 characterMode; //$5101 n2 ramWriteProtect[2]; //$5102-$5103 n2 exramMode; //$5104 n2 nametableMode[4]; //$5105 n8 fillmodeTile; //$5106 n8 fillmodeColor; //$5107 n1 ramSelect; //$5113 n2 ramBank; //$5113 n8 programBank[4]; //$5114-5117 n10 characterSpriteBank[8]; //$5120-5127 n10 characterBackgroundBank[4]; //$5128-512b n2 characterBankHi; //$5130 n1 vsplitEnable; //$5200 n1 vsplitSide; //$5200 n5 vsplitTile; //$5200 n8 vsplitScroll; //$5201 n8 vsplitBank; //$5202 n8 irqCoincidence; //$5203 n1 irqEnable; //$5204 n8 multiplicand; //$5205 n8 multiplier; //$5206 n16 timerCounter; //$5209-520a n1 timerLine; //status registers n8 cycleCounter; n1 irqLine; n1 inFrame; n16 vcounter; n16 hcounter; n16 characterAccess[4]; n1 characterActive; n1 sprite8x16; n8 exbank; n8 exattr; n1 vsplitFetch; n8 vsplitVoffset; n8 vsplitHoffset; }; ares-126/ares/fc/cartridge/board/hvc-fmr.cpp000066400000000000000000000036301415063341600207460ustar00rootroot00000000000000struct HVC_FMR : Interface { static auto create(string id) -> Interface* { if(id == "HVC-FMR") return new HVC_FMR; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Writable characterRAM; auto load() -> void override { fds.present = 1; Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { fds.main(); tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address >= 0x4020 && address <= 0x409f) return fds.read(address, data); if(address >= 0x6000 && address <= 0xdfff) return programRAM.read(address - 0x6000); if(address >= 0xe000 && address <= 0xffff) return programROM.read(address - 0xe000); return data; } auto writePRG(n32 address, n8 data) -> void override { if(address == 0x4025) mirror = data.bit(3); if(address >= 0x4020 && address <= 0x409f) return fds.write(address, data); if(address >= 0x6000 && address <= 0xdfff) return programRAM.write(address - 0x6000, data); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } return characterRAM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } return characterRAM.write(address, data); } auto power() -> void override { fds.power(); } auto serialize(serializer& s) -> void override { s(fds); s(programRAM); s(characterRAM); s(mirror); } n1 mirror; }; ares-126/ares/fc/cartridge/board/hvc-fxrom.cpp000066400000000000000000000060571415063341600213230ustar00rootroot00000000000000struct HVC_FxROM : Interface { //MMC4 static auto create(string id) -> Interface* { if(id == "HVC-FJROM") return new HVC_FxROM(Revision::FJROM); if(id == "HVC-FKROM") return new HVC_FxROM(Revision::FKROM); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { FJROM, FKROM, } revision; HVC_FxROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) return programRAM.read(address); n4 bank = address < 0xc000 ? programBank : (n4)0xf; return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) return programRAM.write(address, data); switch(address & 0xf000) { case 0xa000: programBank = data.bit(0,3); break; case 0xb000: characterBank[0][0] = data.bit(0,4); break; case 0xc000: characterBank[0][1] = data.bit(0,4); break; case 0xd000: characterBank[1][0] = data.bit(0,4); break; case 0xe000: characterBank[1][1] = data.bit(0,4); break; case 0xf000: mirror = data.bit(0); break; } } auto addressCIRAM(n32 address) const -> n32 { return address >> mirror & 0x0400 | address & 0x03ff; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); n1 region = bool(address & 0x1000); n5 bank = characterBank[region][latch[region]]; if((address & 0x0ff8) == 0x0fd8) latch[region] = 0; if((address & 0x0ff8) == 0x0fe8) latch[region] = 1; address = bank << 12 | (n12)address; if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); n1 region = bool(address & 0x1000); n5 bank = characterBank[region][latch[region]]; if((address & 0x0ff8) == 0x0fd8) latch[region] = 0; if((address & 0x0ff8) == 0x0fe8) latch[region] = 1; address = bank << 12 | (n12)address; if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(programBank); s(characterBank[0][0]); s(characterBank[0][1]); s(characterBank[1][0]); s(characterBank[1][1]); s(mirror); s(latch); } n4 programBank; n5 characterBank[2][2]; n1 mirror; n1 latch[2]; }; ares-126/ares/fc/cartridge/board/hvc-gxrom.cpp000066400000000000000000000040151415063341600213140ustar00rootroot00000000000000struct HVC_GxROM : Interface { static auto create(string id) -> Interface* { if(id == "HVC-GNROM") return new HVC_GxROM(Revision::GNROM); if(id == "HVC-MHROM") return new HVC_GxROM(Revision::MHROM); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { GNROM, MHROM, } revision; HVC_GxROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; characterBank = data.bit(0,1); programBank = data.bit(4,5); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } address = characterBank << 13 | (n13)address; if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } address = characterBank << 13 | (n13)address; if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(mirror); s(programBank); s(characterBank); } n1 mirror; //0 = horizontal, 1 = vertical n2 programBank; n2 characterBank; }; ares-126/ares/fc/cartridge/board/hvc-hkrom.cpp000066400000000000000000000131651415063341600213060ustar00rootroot00000000000000struct HVC_HKROM : Interface { //MMC6 static auto create(string id) -> Interface* { if(id == "HVC-HKROM") return new HVC_HKROM; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(irqDelay) irqDelay--; cpu.irqLine(irqLine); tick(); } auto irqTest(n32 address) -> void { if(!(characterAddress & 0x1000) && (address & 0x1000)) { if(irqDelay == 0) { if(irqCounter == 0) { irqCounter = irqLatch; } else if(--irqCounter == 0) { if(irqEnable) irqLine = 1; } } irqDelay = 6; } characterAddress = address; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x7000) return data; if(address < 0x8000) { if(!ramEnable) return data; if(!ramReadable[0] && !ramReadable[1]) return data; n1 bank = address >> 9 & 1; if(!ramReadable[bank]) return 0x00; return programRAM.read(bank << 9 | (n9)address); } n6 bank; switch(address >> 13 & 3) { case 0: bank = (programMode == 0 ? programBank[0] : (n6)0x3e); break; case 1: bank = programBank[1]; break; case 2: bank = (programMode == 1 ? programBank[0] : (n6)0x3e); break; case 3: bank = 0x3f; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x7000) return; if(address < 0x8000) { if(!ramEnable) return; n1 bank = address >> 9 & 1; if(!ramWritable[bank]) return; return programRAM.write(bank << 9 | (n9)address, data); } switch(address & 0xe001) { case 0x8000: bankSelect = data.bit(0,2); ramEnable = data.bit(5); programMode = data.bit(6); characterMode = data.bit(7); if(!ramEnable) { ramReadable[0] = ramWritable[0] = 0; ramReadable[1] = ramWritable[1] = 0; } break; case 0x8001: switch(bankSelect) { case 0: characterBank[0] = data & ~1; break; case 1: characterBank[1] = data & ~1; break; case 2: characterBank[2] = data; break; case 3: characterBank[3] = data; break; case 4: characterBank[4] = data; break; case 5: characterBank[5] = data; break; case 6: programBank[0] = data.bit(0,5); break; case 7: programBank[1] = data.bit(0,5); break; } break; case 0xa000: mirror = data.bit(0); break; case 0xa001: if(!ramEnable) break; ramWritable[0] = data.bit(4); ramReadable[0] = data.bit(5); ramWritable[1] = data.bit(6); ramReadable[1] = data.bit(7); break; case 0xc000: irqLatch = data; break; case 0xc001: irqCounter = 0; break; case 0xe000: irqEnable = 0; irqLine = 0; break; case 0xe001: irqEnable = 1; break; } } auto addressCHR(n32 address) const -> n32 { if(characterMode == 0) { if(address <= 0x07ff) return characterBank[0] << 10 | (n11)address; if(address <= 0x0fff) return characterBank[1] << 10 | (n11)address; if(address <= 0x13ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x1bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x1fff) return characterBank[5] << 10 | (n10)address; } else { if(address <= 0x03ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x07ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x0bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x0fff) return characterBank[5] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[0] << 10 | (n11)address; if(address <= 0x1fff) return characterBank[1] << 10 | (n11)address; } unreachable; } auto addressCIRAM(n32 address) const -> n32 { return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { irqTest(address); if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { irqTest(address); if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(characterMode); s(programMode); s(ramEnable); s(bankSelect); s(programBank); s(characterBank); s(mirror); s(ramReadable); s(ramWritable); s(irqLatch); s(irqCounter); s(irqEnable); s(irqDelay); s(irqLine); s(characterAddress); } n1 characterMode; n1 programMode; n1 ramEnable; n3 bankSelect; n6 programBank[2]; n8 characterBank[6]; n1 mirror; n1 ramReadable[2]; n1 ramWritable[2]; n8 irqLatch; n8 irqCounter; n1 irqEnable; n1 irqDelay; n1 irqLine; n16 characterAddress; }; ares-126/ares/fc/cartridge/board/hvc-nrom.cpp000066400000000000000000000037611415063341600211420ustar00rootroot00000000000000struct HVC_NROM : Interface { static auto create(string id) -> Interface* { if(id == "HVC-NROM" ) return new HVC_NROM; if(id == "HVC-NROM-128") return new HVC_NROM; if(id == "HVC-NROM-256") return new HVC_NROM; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000 && !programRAM) return data; if(address < 0x8000) return programRAM.read(address); return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000 && !programRAM) return; if(address < 0x8000) return programRAM.write(address, data); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(mirror); } n1 mirror; //0 = horizontal, 1 = vertical }; ares-126/ares/fc/cartridge/board/hvc-pxrom.cpp000066400000000000000000000063451415063341600213350ustar00rootroot00000000000000struct HVC_PxROM : Interface { //MMC2 static auto create(string id) -> Interface* { if(id == "HVC-PEEOROM") return new HVC_PxROM(Revision::PEEOROM); if(id == "HVC-PNROM" ) return new HVC_PxROM(Revision::PNROM); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; enum Revision : u32 { PEEOROM, PNROM, } revision; HVC_PxROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) return programRAM.read((n13)address); n4 bank = 0; switch(address & 0xe000) { case 0x8000: bank = programBank; break; case 0xa000: bank = 0xd; break; case 0xc000: bank = 0xe; break; case 0xe000: bank = 0xf; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) return programRAM.write((n13)address, data); switch(address & 0xf000) { case 0xa000: programBank = data.bit(0,3); break; case 0xb000: characterBank[0][0] = data.bit(0,4); break; case 0xc000: characterBank[0][1] = data.bit(0,4); break; case 0xd000: characterBank[1][0] = data.bit(0,4); break; case 0xe000: characterBank[1][1] = data.bit(0,4); break; case 0xf000: mirror = data.bit(0); break; } } auto addressCIRAM(n32 address) const -> n32 { return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); n1 region = bool(address & 0x1000); n5 bank = characterBank[region][latch[region]]; if((address & 0x0ff8) == 0x0fd8) latch[region] = 0; if((address & 0x0ff8) == 0x0fe8) latch[region] = 1; address = bank << 12 | (n12)address; if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); n1 region = bool(address & 0x1000); n5 bank = characterBank[region][latch[region]]; if((address & 0x0ff8) == 0x0fd8) latch[region] = 0; if((address & 0x0ff8) == 0x0fe8) latch[region] = 1; address = bank << 12 | (n12)address; if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(programBank); s(characterBank[0][0]); s(characterBank[0][1]); s(characterBank[1][0]); s(characterBank[1][1]); s(mirror); s(latch); } n4 programBank; n5 characterBank[2][2]; n1 mirror; n1 latch[2]; }; ares-126/ares/fc/cartridge/board/hvc-sxrom.cpp000066400000000000000000000157561415063341600213460ustar00rootroot00000000000000struct HVC_SxROM : Interface { //MMC1 static auto create(string id) -> Interface* { if(id == "HVC-SAROM" ) return new HVC_SxROM(Revision::SAROM); if(id == "HVC-SBROM" ) return new HVC_SxROM(Revision::SBROM); if(id == "HVC-SCROM" ) return new HVC_SxROM(Revision::SCROM); if(id == "HVC-SC1ROM" ) return new HVC_SxROM(Revision::SC1ROM); if(id == "HVC-SEROM" ) return new HVC_SxROM(Revision::SEROM); if(id == "HVC-SFROM" ) return new HVC_SxROM(Revision::SFROM); if(id == "HVC-SFEXPROM") return new HVC_SxROM(Revision::SFEXPROM); if(id == "HVC-SGROM" ) return new HVC_SxROM(Revision::SGROM); if(id == "HVC-SHROM" ) return new HVC_SxROM(Revision::SHROM); if(id == "HVC-SH1ROM" ) return new HVC_SxROM(Revision::SH1ROM); if(id == "HVC-SIROM" ) return new HVC_SxROM(Revision::SIROM); if(id == "HVC-SJROM" ) return new HVC_SxROM(Revision::SJROM); if(id == "HVC-SKROM" ) return new HVC_SxROM(Revision::SKROM); if(id == "HVC-SLROM" ) return new HVC_SxROM(Revision::SKROM); if(id == "HVC-SL1ROM" ) return new HVC_SxROM(Revision::SL1ROM); if(id == "HVC-SL2ROM" ) return new HVC_SxROM(Revision::SL2ROM); if(id == "HVC-SL3ROM" ) return new HVC_SxROM(Revision::SL3ROM); if(id == "HVC-SLRROM" ) return new HVC_SxROM(Revision::SLRROM); if(id == "HVC-SMROM" ) return new HVC_SxROM(Revision::SMROM); if(id == "HVC-SNROM" ) return new HVC_SxROM(Revision::SNROM); if(id == "HVC-SOROM" ) return new HVC_SxROM(Revision::SOROM); if(id == "HVC-SUROM" ) return new HVC_SxROM(Revision::SUROM); if(id == "HVC-SXROM" ) return new HVC_SxROM(Revision::SXROM); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { SAROM, SBROM, SCROM, SC1ROM, SEROM, SFROM, SFEXPROM, SGROM, SHROM, SH1ROM, SIROM, SJROM, SKROM, SLROM, SL1ROM, SL2ROM, SL3ROM, SLRROM, SMROM, SNROM, SOROM, SUROM, SXROM, } revision; enum class ChipRevision : u32 { MMC1, MMC1A, MMC1B1, MMC1B2, MMC1B3, MMC1C, } chipRevision; HVC_SxROM(Revision revision) : revision(revision) {} auto load() -> void override { auto chip = pak->attribute("chip"); chipRevision = ChipRevision::MMC1B2; if(chip == "MMC1" ) chipRevision = ChipRevision::MMC1; if(chip == "MMC1A" ) chipRevision = ChipRevision::MMC1A; if(chip == "MMC1B1") chipRevision = ChipRevision::MMC1B1; if(chip == "MMC1B3") chipRevision = ChipRevision::MMC1B3; if(chip == "MMC1C" ) chipRevision = ChipRevision::MMC1C; Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(writeDelay) writeDelay--; tick(); } auto addressProgramROM(n32 address) -> n32 { bool region = address & 0x4000; n5 bank = programBank & ~1 | region; if(programSize == 1) { bank = (region == 0 ? 0x0 : 0xf); if(region != programMode) bank = programBank; } if(revision == Revision::SXROM) { bank.bit(4) = characterBank[0].bit(4); } return bank << 14 | (n14)address; } auto addressProgramRAM(n32 address) -> n32 { n32 bank = 0; if(revision == Revision::SOROM) bank = characterBank[0].bit(3); if(revision == Revision::SUROM) bank = characterBank[0].bit(2,3); if(revision == Revision::SXROM) bank = characterBank[0].bit(2,3); return bank << 13 | (n13)address; } auto addressCHR(n32 address) -> n32 { bool region = address & 0x1000; n5 bank = characterBank[region]; if(characterMode == 0) bank = characterBank[0] & ~1 | region; return bank << 12 | (n12)address; } auto addressCIRAM(n32 address) -> n32 { switch(mirrorMode) { case 0: return 0x0000 | address & 0x03ff; case 1: return 0x0400 | address & 0x03ff; case 2: return address >> 0 & 0x0400 | address & 0x03ff; case 3: return address >> 1 & 0x0400 | address & 0x03ff; } unreachable; } auto readPRG(n32 address, n8 data) -> n8 override { if((address & 0xe000) == 0x6000) { if(revision == Revision::SNROM) { if(characterBank[0].bit(4)) return data; } if(ramDisable) return 0x00; return programRAM.read(addressProgramRAM(address)); } if(address & 0x8000) { return programROM.read(addressProgramROM(address)); } return data; } auto writePRG(n32 address, n8 data) -> void override { if((address & 0xe000) == 0x6000) { if(revision == Revision::SNROM) { if(characterBank[0].bit(4)) return; } if(ramDisable) return; return programRAM.write(addressProgramRAM(address), data); } if(address & 0x8000) return writeIO(address, data); } auto writeIO(n32 address, n8 data) -> void { if(writeDelay) return; writeDelay = 2; if(data.bit(7)) { shiftCount = 0; programSize = 1; programMode = 1; } else { shiftValue = data.bit(0) << 4 | shiftValue >> 1; if(++shiftCount == 5) { shiftCount = 0; switch(address >> 13 & 3) { case 0: mirrorMode = shiftValue.bit(0,1); programMode = shiftValue.bit(2); programSize = shiftValue.bit(3); characterMode = shiftValue.bit(4); break; case 1: characterBank[0] = shiftValue.bit(0,4); break; case 2: characterBank[1] = shiftValue.bit(0,4); break; case 3: programBank = shiftValue.bit(0,3); if(chipRevision > ChipRevision::MMC1A) { ramDisable = shiftValue.bit(4); } break; } } } } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { programMode = 1; programSize = 1; characterBank[1] = 1; } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(writeDelay); s(shiftCount); s(shiftValue); s(mirrorMode); s(programMode); s(programSize); s(characterMode); s(characterBank); s(programBank); s(ramDisable); } n8 writeDelay; n8 shiftCount; n5 shiftValue; n2 mirrorMode; n1 programMode; n1 programSize; n1 characterMode; n5 characterBank[2]; n4 programBank; n1 ramDisable; }; ares-126/ares/fc/cartridge/board/hvc-txrom.cpp000066400000000000000000000174361415063341600213440ustar00rootroot00000000000000struct HVC_TxROM : Interface { //MMC3 static auto create(string id) -> Interface* { if(id == "HVC-TBROM" ) return new HVC_TxROM(Revision::TBROM); if(id == "HVC-TEROM" ) return new HVC_TxROM(Revision::TEROM); if(id == "HVC-TFROM" ) return new HVC_TxROM(Revision::TFROM); if(id == "HVC-TGROM" ) return new HVC_TxROM(Revision::TGROM); if(id == "HVC-TKROM" ) return new HVC_TxROM(Revision::TKROM); if(id == "HVC-TKSROM") return new HVC_TxROM(Revision::TKSROM); if(id == "HVC-TLROM" ) return new HVC_TxROM(Revision::TLROM); if(id == "HVC-TL1ROM") return new HVC_TxROM(Revision::TL1ROM); if(id == "HVC-TL2ROM") return new HVC_TxROM(Revision::TL2ROM); if(id == "HVC-TLSROM") return new HVC_TxROM(Revision::TLSROM); if(id == "HVC-TNROM" ) return new HVC_TxROM(Revision::TNROM); if(id == "HVC-TQROM" ) return new HVC_TxROM(Revision::TQROM); if(id == "HVC-TR1ROM") return new HVC_TxROM(Revision::TR1ROM); if(id == "HVC-TSROM" ) return new HVC_TxROM(Revision::TSROM); if(id == "HVC-TVROM" ) return new HVC_TxROM(Revision::TVROM); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { TBROM, TEROM, TFROM, TGROM, TKROM, TKSROM, TLROM, TL1ROM, TL2ROM, TLSROM, TNROM, TQROM, TR1ROM, TSROM, TVROM, } revision; HVC_TxROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(irqDelay) irqDelay--; cpu.irqLine(irqLine); tick(); } auto irqTest(n16 address) -> void { if(!(characterAddress & 0x1000) && (address & 0x1000)) { if(irqDelay == 0) { if(irqCounter == 0) { irqCounter = irqLatch; } else if(--irqCounter == 0) { if(irqEnable) irqLine = 1; } } irqDelay = 6; } characterAddress = address; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(!ramEnable) return data; return programRAM.read((n13)address); } n6 bank; switch(address >> 13 & 3) { case 0: bank = (programMode == 0 ? programBank[0] : (n6)0x3e); break; case 1: bank = programBank[1]; break; case 2: bank = (programMode == 1 ? programBank[0] : (n6)0x3e); break; case 3: bank = 0x3f; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(!ramEnable || !ramWritable) return; return programRAM.write((n13)address, data); } switch(address & 0xe001) { case 0x8000: bankSelect = data.bit(0,2); programMode = data.bit(6); characterMode = data.bit(7); break; case 0x8001: switch(bankSelect) { case 0: characterBank[0] = data & ~1; break; case 1: characterBank[1] = data & ~1; break; case 2: characterBank[2] = data; break; case 3: characterBank[3] = data; break; case 4: characterBank[4] = data; break; case 5: characterBank[5] = data; break; case 6: programBank[0] = data.bit(0,5); break; case 7: programBank[1] = data.bit(0,5); break; } break; case 0xa000: mirror = data.bit(0); break; case 0xa001: ramWritable = !data.bit(6); ramEnable = data.bit(7); break; case 0xc000: irqLatch = data; break; case 0xc001: irqCounter = 0; break; case 0xe000: irqEnable = 0; irqLine = 0; break; case 0xe001: irqEnable = 1; break; } } auto addressCHR(n32 address) const -> n32 { if(characterMode == 0) { if(address <= 0x07ff) return characterBank[0] << 10 | (n11)address; if(address <= 0x0fff) return characterBank[1] << 10 | (n11)address; if(address <= 0x13ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x1bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x1fff) return characterBank[5] << 10 | (n10)address; } else { if(address <= 0x03ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x07ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x0bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x0fff) return characterBank[5] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[0] << 10 | (n11)address; if(address <= 0x1fff) return characterBank[1] << 10 | (n11)address; } unreachable; } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::TKSROM || revision == Revision::TLSROM) { address.bit(12) = 0; if(characterMode == 0) { if(address <= 0x27ff) return characterBank[0].bit(7) << 10 | (n10)address; if(address <= 0x2fff) return characterBank[1].bit(7) << 10 | (n10)address; } else { if(address <= 0x23ff) return characterBank[2].bit(7) << 10 | (n10)address; if(address <= 0x27ff) return characterBank[3].bit(7) << 10 | (n10)address; if(address <= 0x2bff) return characterBank[4].bit(7) << 10 | (n10)address; if(address <= 0x2fff) return characterBank[5].bit(7) << 10 | (n10)address; } unreachable; } return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { irqTest(address); if(revision == Revision::TVROM) { if(address < 0x2000) return characterROM.read(addressCHR(address)); address.bit(12) = 0; if(address < 0x2800) return ppu.readCIRAM((n11)address); return characterRAM.read((n11)address); } if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(revision == Revision::TQROM) { address = addressCHR(address); if(address < 0x10000) return characterROM.read(address); return characterRAM.read(address); } if(characterRAM) return characterRAM.read(addressCHR(address)); return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { irqTest(address); if(revision == Revision::TVROM) { if(address < 0x2000) return; address.bit(12) = 0; if(address < 0x2800) return ppu.writeCIRAM((n11)address, data); return characterRAM.write((n11)address, data); } if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(revision == Revision::TQROM) { address = addressCHR(address); if(address < 0x10000) return; return characterRAM.write(address, data); } if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { ramEnable = 1; ramWritable = 1; } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(characterMode); s(programMode); s(bankSelect); s(programBank); s(characterBank); s(mirror); s(ramEnable); s(ramWritable); s(irqLatch); s(irqCounter); s(irqEnable); s(irqDelay); s(irqLine); s(characterAddress); } n1 characterMode; n1 programMode; n3 bankSelect; n6 programBank[2]; n8 characterBank[6]; n1 mirror; n1 ramEnable; n1 ramWritable; n8 irqLatch; n8 irqCounter; n1 irqEnable; n8 irqDelay; n1 irqLine; n16 characterAddress; }; ares-126/ares/fc/cartridge/board/hvc-uxrom.cpp000066400000000000000000000043751415063341600213430ustar00rootroot00000000000000struct HVC_UxROM : Interface { static auto create(string id) -> Interface* { if(id == "HVC-UNROM" ) return new HVC_UxROM(Revision::UNROM); if(id == "HVC-UNROMA") return new HVC_UxROM(Revision::UNROMA); if(id == "HVC-UN1ROM") return new HVC_UxROM(Revision::UN1ROM); if(id == "HVC-UOROM" ) return new HVC_UxROM(Revision::UOROM); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { UNROM, UNROMA, UN1ROM, UOROM, } revision; HVC_UxROM(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n8 bank; switch(address >> 14 & 1) { case 0: bank = (revision == Revision::UNROMA ? (n8)0x00 : programBank); break; case 1: bank = (revision == Revision::UNROMA ? programBank : (n8)0xff); break; } return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data; if(revision == Revision::UN1ROM) programBank >>= 2; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(mirror); s(programBank); } n1 mirror; //0 = horizontal, 1 = vertical n8 programBank; }; ares-126/ares/fc/cartridge/board/irem-g101.cpp000066400000000000000000000050501415063341600210040ustar00rootroot00000000000000struct IremG101 : Interface { static auto create(string id) -> Interface* { if(id == "IREM-G101" ) return new IremG101(Revision::G101); if(id == "IREM-G101A") return new IremG101(Revision::G101A); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; enum class Revision : u32 { G101, G101A, } revision; IremG101(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000 && !programRAM) return data; if(address < 0x8000) return programRAM.read((n13)address); n5 bank; switch(address >> 13 & 3) { case 0: bank = (programMode == 0 ? programBank[0] : (n5)0x1e); break; case 1: bank = programBank[1]; break; case 2: bank = (programMode == 1 ? programBank[0] : (n5)0x1e); break; case 3: bank = 0x1f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000 && !programRAM) return; if(address < 0x8000) return programRAM.write((n13)address, data); switch(address & 0xf000) { case 0x8000: programBank[0] = data.bit(0,4); break; case 0xa000: programBank[1] = data.bit(0,4); break; case 0xb000: characterBank[address & 7] = data; break; case 0x9000: if(revision == Revision::G101) { mirror = data.bit(0); programMode = data.bit(1); } break; } } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::G101A) return (n10)address; return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); n8 bank = characterBank[address >> 10 & 7]; return characterROM.read(bank << 10 | (n10)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(programRAM); s(programBank); s(characterBank); s(programMode); s(mirror); } n5 programBank[2]; n8 characterBank[8]; n1 programMode; n1 mirror; }; ares-126/ares/fc/cartridge/board/irem-h3001.cpp000066400000000000000000000056411415063341600210750ustar00rootroot00000000000000struct IremH3001 : Interface { static auto create(string id) -> Interface* { if(id == "IREM-H3001") return new IremH3001; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); } auto main() -> void override { if(irqEnable) { if(irqCounter && --irqCounter == 0) irqLine = 1; } cpu.irqLine(irqLine); tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n6 bank; switch(address >> 13 & 3) { case 0: bank = (programMode == 0 ? programBank[0] : (n6)0x3e); break; case 1: bank = programBank[1]; break; case 2: bank = (programMode == 1 ? programBank[0] : (n6)0x3e); break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; switch(address) { case 0x8000: programBank[0] = data.bit(0,5); break; case 0xa000: programBank[1] = data.bit(0,5); break; case 0xb000: characterBank[0] = data; break; case 0xb001: characterBank[1] = data; break; case 0xb002: characterBank[2] = data; break; case 0xb003: characterBank[3] = data; break; case 0xb004: characterBank[4] = data; break; case 0xb005: characterBank[5] = data; break; case 0xb006: characterBank[6] = data; break; case 0xb007: characterBank[7] = data; break; case 0x9000: programMode = data.bit(7); break; case 0x9001: mirror = data.bit(6,7); break; case 0x9003: irqEnable = data.bit(7); irqLine = 0; break; case 0x9004: irqCounter = irqLatch; irqLine = 0; break; case 0x9005: irqLatch = irqLatch.bit(0,7) << 0 | data << 8; break; case 0x9006: irqLatch = irqLatch.bit(8,15) << 8 | data << 0; break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | (n10)address; case 1: return (n10)address; case 2: return address >> 1 & 0x0400 | (n10)address; case 3: return (n10)address; } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); n8 bank = characterBank[address >> 10 & 7]; return characterROM.read(bank << 10 | (n10)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(programBank); s(characterBank); s(programMode); s(mirror); s(irqLatch); s(irqCounter); s(irqEnable); s(irqLine); } n6 programBank[2]; n8 characterBank[8]; n1 programMode; n2 mirror; n16 irqLatch; n16 irqCounter; n1 irqEnable; n1 irqLine; }; ares-126/ares/fc/cartridge/board/irem-lrog017.cpp000066400000000000000000000035071415063341600215340ustar00rootroot00000000000000struct IremLROG017 : Interface { static auto create(string id) -> Interface* { if(id == "IREM-LROG017") return new IremLROG017; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data.bit(0,3); characterBank = data.bit(4,7); } auto addressCHR(n32 address) const -> n32 { if(address < 0x1000) return 1 << 11 | (n11)address; if(address < 0x1800) return 2 << 11 | (n11)address; if(address < 0x2000) return 3 << 11 | (n11)address; if(address < 0x2800) return 0 << 11 | (n11)address; unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address < 0x0800) return characterROM.read(characterBank << 11 | (n11)address); if(address < 0x2800) return characterRAM.read(addressCHR(address)); if(address < 0x3000) return ppu.readCIRAM((n11)address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address < 0x0800) return; if(address < 0x2800) return characterRAM.write(addressCHR(address), data); if(address < 0x3000) return ppu.writeCIRAM((n11)address, data); } auto serialize(serializer& s) -> void override { s(characterRAM); s(programBank); s(characterBank); } n4 programBank; n4 characterBank; }; ares-126/ares/fc/cartridge/board/irem-tam-s1.cpp000066400000000000000000000041431415063341600214400ustar00rootroot00000000000000struct IremTAMS1 : Interface { static auto create(string id) -> Interface* { if(id == "IREM-TAM-S1") return new IremTAMS1; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n6 bank, banks = programROM.size() >> 14; switch(address & 0xc000) { case 0x8000: bank = banks - 1; break; case 0xc000: bank = programBank; break; } address = bank << 14 | (n14)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data.bit(0,5); mirror = data.bit(6,7); } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return 0x0000 | address & 0x03ff; //one-screen mirroring (first) case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal mirroring case 2: return address >> 0 & 0x0400 | address & 0x03ff; //vertical mirroring case 3: return 0x0400 | address & 0x03ff; //one-screen mirroring (second) } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(address); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(programBank); s(mirror); } n6 programBank; n2 mirror; }; ares-126/ares/fc/cartridge/board/jaleco-jf05.cpp000066400000000000000000000030001415063341600213720ustar00rootroot00000000000000struct JalecoJF05 : Interface { static auto create(string id) -> Interface* { if(id == "JALECO-JF-05") return new JalecoJF05; if(id == "JALECO-JF-06") return new JalecoJF05; if(id == "JALECO-JF-07") return new JalecoJF05; if(id == "JALECO-JF-08") return new JalecoJF05; if(id == "JALECO-JF-10") return new JalecoJF05; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); mirror = pak->attribute("mirror") == "vertical"; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000 || address > 0x7fff) return; characterBank = data.bit(0) << 1 | data.bit(1); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } address = characterBank << 13 | (n13)address; return characterROM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } } auto serialize(serializer& s) -> void override { s(mirror); s(characterBank); } n1 mirror; n2 characterBank; }; ares-126/ares/fc/cartridge/board/jaleco-jf11.cpp000066400000000000000000000036201415063341600213770ustar00rootroot00000000000000//todo: uPD7756 ADPCM unsupported struct JalecoJF11 : Interface { static auto create(string id) -> Interface* { if(id == "JALECO-JF-11") return new JalecoJF11(Revision::JF11); if(id == "JALECO-JF-13") return new JalecoJF11(Revision::JF13); if(id == "JALECO-JF-14") return new JalecoJF11(Revision::JF14); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; enum class Revision : u32 { JF11, JF13, JF14, } revision; JalecoJF11(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); mirror = pak->attribute("mirror") == "vertical"; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(programBank << 15 | (n15)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000 || address > 0x7fff) return; if(revision == Revision::JF13 && address > 0x6fff) return; programBank = data.bit(4,5); if(revision == Revision::JF13) { characterBank = data.bit(6) << 2 | data.bit(0,1); } else { characterBank = data.bit(0,3); } } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } address = characterBank << 13 | (n13)address; return characterROM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } } auto serialize(serializer& s) -> void override { s(mirror); s(programBank); s(characterBank); } n1 mirror; //0 = horizontal, 1 = vertical n2 programBank; n4 characterBank; }; ares-126/ares/fc/cartridge/board/jaleco-jf16.cpp000066400000000000000000000033121415063341600214020ustar00rootroot00000000000000struct JalecoJF16 : Interface { static auto create(string id) -> Interface* { if(id == "JALECO-JF-16") return new JalecoJF16(Revision::JF16); if(id == "IREM-IF-12" ) return new JalecoJF16(Revision::IF12); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; enum class Revision : u32 { JF16, IF12, } revision; JalecoJF16(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n3 bank; switch(address >> 14 & 1) { case 0: bank = programBank; break; case 1: bank = 7; break; } return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; programBank = data.bit(0,2); mirror = data.bit(3); characterBank = data.bit(4,7); } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::IF12) { return address >> !mirror & 0x0400 | (n10)address; } return mirror << 10 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(characterBank << 13 | (n13)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(mirror); s(programBank); s(characterBank); } n1 mirror; n3 programBank; n4 characterBank; }; ares-126/ares/fc/cartridge/board/jaleco-jf17.cpp000066400000000000000000000040131415063341600214020ustar00rootroot00000000000000//todo: uPD7756 ADPCM unsupported struct JalecoJF17 : Interface { static auto create(string id) -> Interface* { if(id == "JALECO-JF-17") return new JalecoJF17(Revision::JF17); if(id == "JALECO-JF-19") return new JalecoJF17(Revision::JF19); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; enum class Revision : u32 { JF17, JF19, } revision; JalecoJF17(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); mirror = pak->attribute("mirror") == "vertical"; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n4 bank; switch(address >> 14 & 1) { case 0: bank = (revision == Revision::JF17 ? programBank : (n4)0x0); break; case 1: bank = (revision == Revision::JF19 ? programBank : (n4)0xf); break; } return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; if(!programSelect && data.bit(7)) programBank = data.bit(0,3); if(!characterSelect && data.bit(6)) characterBank = data.bit(0,3); programSelect = data.bit(7); characterSelect = data.bit(6); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } address = characterBank << 13 | (n13)address; return characterROM.read(address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } } auto serialize(serializer& s) -> void override { s(mirror); s(programSelect); s(programBank); s(characterSelect); s(characterBank); } n1 mirror; n1 programSelect; n4 programBank; n1 characterSelect; n4 characterBank; }; ares-126/ares/fc/cartridge/board/jaleco-jf23.cpp000066400000000000000000000124751415063341600214120ustar00rootroot00000000000000//todo: uPD7756 ADPCM unsupported struct JalecoJF23 : Interface { static auto create(string id) -> Interface* { if(id == "JALECO-JF-23A") return new JalecoJF23; if(id == "JALECO-JF-24A") return new JalecoJF23; if(id == "JALECO-JF-25" ) return new JalecoJF23; if(id == "JALECO-JF-27B") return new JalecoJF23; if(id == "JALECO-JF-29A") return new JalecoJF23; if(id == "JALECO-JF-37" ) return new JalecoJF23; if(id == "JALECO-JF-40" ) return new JalecoJF23; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto main() -> void override { if(irqEnable) { if(!irqCounter--) { irqLine = 1; switch(irqMode) { case 0: irqCounter = n16(irqReload); break; case 1: irqCounter = n12(irqReload); break; case 2: irqCounter = n8 (irqReload); break; case 3: irqCounter = n4 (irqReload); break; } } } cpu.irqLine(irqLine); tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(!programRAM) return data; return programRAM.read((n13)address); } n6 bank, banks = programROM.size() >> 13; switch(address & 0xe000) { case 0x8000: bank = programBank[0]; break; case 0xa000: bank = programBank[1]; break; case 0xc000: bank = programBank[2]; break; case 0xe000: bank = banks - 1; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(!programRAM) return; return programRAM.write((n13)address, data); } switch(address & 0xf003) { case 0x8000: programBank[0].bit(0,3) = data.bit(0,3); break; case 0x8001: programBank[0].bit(4,5) = data.bit(0,1); break; case 0x8002: programBank[1].bit(0,3) = data.bit(0,3); break; case 0x8003: programBank[1].bit(4,5) = data.bit(0,1); break; case 0x9000: programBank[2].bit(0,3) = data.bit(0,3); break; case 0x9001: programBank[2].bit(4,5) = data.bit(0,1); break; case 0xa000: characterBank[0].bit(0,3) = data.bit(0,3); break; case 0xa001: characterBank[0].bit(4,7) = data.bit(0,3); break; case 0xa002: characterBank[1].bit(0,3) = data.bit(0,3); break; case 0xa003: characterBank[1].bit(4,7) = data.bit(0,3); break; case 0xb000: characterBank[2].bit(0,3) = data.bit(0,3); break; case 0xb001: characterBank[2].bit(4,7) = data.bit(0,3); break; case 0xb002: characterBank[3].bit(0,3) = data.bit(0,3); break; case 0xb003: characterBank[3].bit(4,7) = data.bit(0,3); break; case 0xc000: characterBank[4].bit(0,3) = data.bit(0,3); break; case 0xc001: characterBank[4].bit(4,7) = data.bit(0,3); break; case 0xc002: characterBank[5].bit(0,3) = data.bit(0,3); break; case 0xc003: characterBank[5].bit(4,7) = data.bit(0,3); break; case 0xd000: characterBank[6].bit(0,3) = data.bit(0,3); break; case 0xd001: characterBank[6].bit(4,7) = data.bit(0,3); break; case 0xd002: characterBank[7].bit(0,3) = data.bit(0,3); break; case 0xd003: characterBank[7].bit(4,7) = data.bit(0,3); break; case 0xe000: irqReload.bit( 0, 3) = data.bit(0,3); break; case 0xe001: irqReload.bit( 4, 7) = data.bit(0,3); break; case 0xe002: irqReload.bit( 8,11) = data.bit(0,3); break; case 0xe003: irqReload.bit(12,15) = data.bit(0,3); break; case 0xf000: irqCounter = irqReload; irqLine = 0; break; case 0xf001: irqEnable = data.bit(0); irqMode = data.bit(1,3); irqLine = 0; break; case 0xf002: mirror = data.bit(0,1); break; case 0xf003: break; //uPD7756 ADPCM } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal mirroring case 1: return address >> 0 & 0x0400 | address & 0x03ff; //vertical mirroring case 2: return 0x0000 | address & 0x03ff; //one-screen mirroring (first) case 3: return 0x0400 | address & 0x03ff; //one-screen mirroring (second) } unreachable; } auto addressCHR(n32 address) const -> n32 { n8 bank = characterBank[address >> 10]; return bank << 10 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto power() -> void override { for(u32 n : range(3)) programBank[n] = n; for(u32 n : range(8)) characterBank[n] = n; } auto serialize(serializer& s) -> void override { s(programRAM); s(programBank); s(characterBank); s(irqLine); s(irqCounter); s(irqReload); s(irqEnable); s(irqMode); s(mirror); } n6 programBank[3]; n8 characterBank[8]; n1 irqLine; n16 irqCounter; n16 irqReload; n1 irqEnable; n3 irqMode; n2 mirror; }; ares-126/ares/fc/cartridge/board/konami-vrc1.cpp000066400000000000000000000050071415063341600215330ustar00rootroot00000000000000struct KonamiVRC1 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-1") return new KonamiVRC1; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n4 bank; if((address & 0xe000) == 0x8000) bank = programBank[0]; if((address & 0xe000) == 0xa000) bank = programBank[1]; if((address & 0xe000) == 0xc000) bank = programBank[2]; if((address & 0xe000) == 0xe000) bank = 0xf; return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; switch(address & 0xf000) { case 0x8000: programBank[0] = data.bit(0,3); break; case 0x9000: mirror = data.bit(0); characterBank[0].bit(4) = data.bit(1); characterBank[1].bit(4) = data.bit(2); break; case 0xa000: programBank[1] = data.bit(0,3); break; case 0xc000: programBank[2] = data.bit(0,3); break; case 0xe000: characterBank[0].bit(0,3) = data.bit(0,3); break; case 0xf000: characterBank[1].bit(0,3) = data.bit(0,3); break; } } auto addressCIRAM(n32 address) const -> n32 { return address >> mirror & 0x0400 | address & 0x03ff; } auto addressCHR(n32 address) const -> n32 { n1 bank = bool(address & 0x1000); return characterBank[bank] << 12 | (n12)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterRAM); s(programBank); s(characterBank); s(mirror); } n4 programBank[3]; n5 characterBank[2]; n1 mirror; }; ares-126/ares/fc/cartridge/board/konami-vrc2.cpp000066400000000000000000000114261415063341600215360ustar00rootroot00000000000000struct KonamiVRC2 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-2" ) return new KonamiVRC2(Revision::VRC2); if(id == "KONAMI-VRC-2A") return new KonamiVRC2(Revision::VRC2A); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; enum class Revision : u32 { VRC2, VRC2A, } revision; KonamiVRC2(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); pinA0 = 1 << pak->attribute("pinout/a0").natural(); pinA1 = 1 << pak->attribute("pinout/a1").natural(); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(!programRAM && (address & 0xf000) == 0x6000) return data | latch; if(!programRAM) return data; return programRAM.read((n13)address); } n5 bank, banks = programROM.size() >> 13; switch(address & 0xe000) { case 0x8000: bank = programBank[0]; break; case 0xa000: bank = programBank[1]; break; case 0xc000: bank = banks - 2; break; case 0xe000: bank = banks - 1; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(!programRAM && (address & 0xf000) == 0x6000) latch = data.bit(0); if(!programRAM) return; return programRAM.write((n13)address, data); } bool a0 = address & pinA0; bool a1 = address & pinA1; address &= 0xf000; address |= a0 << 0 | a1 << 1; switch(address) { case 0x8000: case 0x8001: case 0x8002: case 0x8003: programBank[0] = data.bit(0,4); break; case 0x9000: case 0x9001: case 0x9002: case 0x9003: mirror = data.bit(0,1); break; case 0xa000: case 0xa001: case 0xa002: case 0xa003: programBank[1] = data.bit(0,4); break; case 0xb000: characterBank[0].bit(0,3) = data.bit(0,3); break; case 0xb001: characterBank[0].bit(4,7) = data.bit(0,3); break; case 0xb002: characterBank[1].bit(0,3) = data.bit(0,3); break; case 0xb003: characterBank[1].bit(4,7) = data.bit(0,3); break; case 0xc000: characterBank[2].bit(0,3) = data.bit(0,3); break; case 0xc001: characterBank[2].bit(4,7) = data.bit(0,3); break; case 0xc002: characterBank[3].bit(0,3) = data.bit(0,3); break; case 0xc003: characterBank[3].bit(4,7) = data.bit(0,3); break; case 0xd000: characterBank[4].bit(0,3) = data.bit(0,3); break; case 0xd001: characterBank[4].bit(4,7) = data.bit(0,3); break; case 0xd002: characterBank[5].bit(0,3) = data.bit(0,3); break; case 0xd003: characterBank[5].bit(4,7) = data.bit(0,3); break; case 0xe000: characterBank[6].bit(0,3) = data.bit(0,3); break; case 0xe001: characterBank[6].bit(4,7) = data.bit(0,3); break; case 0xe002: characterBank[7].bit(0,3) = data.bit(0,3); break; case 0xe003: characterBank[7].bit(4,7) = data.bit(0,3); break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical mirroring case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal mirroring case 2: return 0x0000 | address & 0x03ff; //one-screen mirroring (first) case 3: return 0x0400 | address & 0x03ff; //one-screen mirroring (second) } unreachable; } auto addressCHR(n32 address) const -> n32 { n8 bank = characterBank[address >> 10]; if(revision == Revision::VRC2A) bank >>= 1; return bank << 10 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(programBank); s(characterBank); s(mirror); s(latch); } n5 programBank[2]; n8 characterBank[8]; n2 mirror; n1 latch; //unserialized: n8 pinA0; n8 pinA1; }; ares-126/ares/fc/cartridge/board/konami-vrc3.cpp000066400000000000000000000062351415063341600215410ustar00rootroot00000000000000struct KonamiVRC3 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-3") return new KonamiVRC3; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(irqEnable) { if(irqMode == 0) { //16-bit if(++irqCounter.bit(0,15) == 0) { irqLine = 1; irqEnable = irqAcknowledge; irqCounter.bit(0,15) = irqLatch; } } if(irqMode == 1) { //8-bit if(++irqCounter.bit(0,7) == 0) { irqLine = 1; irqEnable = irqAcknowledge; irqCounter.bit(0,7) = irqLatch; } } } cpu.irqLine(irqLine); tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000 && !programRAM) return data; if(address < 0x8000) return programRAM.read((n13)address); n4 bank = (address < 0xc000 ? programBank : (n4)0xf); address = bank << 14 | (n14)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000 && !programRAM) return; if(address < 0x8000) return programRAM.write((n13)address, data); switch(address & 0xf000) { case 0x8000: irqLatch.bit( 0, 3) = data.bit(0,3); break; case 0x9000: irqLatch.bit( 4, 7) = data.bit(0,3); break; case 0xa000: irqLatch.bit( 8,11) = data.bit(0,3); break; case 0xb000: irqLatch.bit(12,15) = data.bit(0,3); break; case 0xc000: irqAcknowledge = data.bit(0); irqEnable = data.bit(1); irqMode = data.bit(2); if(irqEnable) irqCounter = irqLatch; break; case 0xd000: irqLine = 0; irqEnable = irqAcknowledge; break; case 0xf000: programBank = data.bit(0,3); break; } } auto addressCIRAM(n32 address) const -> n32 { return address >> !mirror & 0x0400 | address & 0x03ff; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterRAM) return characterRAM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(mirror); s(programBank); s(irqMode); s(irqEnable); s(irqAcknowledge); s(irqLatch); s(irqCounter); s(irqLine); } n1 mirror; n4 programBank; n1 irqMode; n1 irqEnable; n1 irqAcknowledge; n16 irqLatch; n16 irqCounter; n1 irqLine; }; ares-126/ares/fc/cartridge/board/konami-vrc4.cpp000066400000000000000000000133451415063341600215420ustar00rootroot00000000000000struct KonamiVRC4 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-4") return new KonamiVRC4; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); pinA0 = 1 << pak->attribute("pinout/a0").natural(); pinA1 = 1 << pak->attribute("pinout/a1").natural(); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(irqEnable) { if(irqMode == 0) { irqScalar -= 3; if(irqScalar <= 0) { irqScalar += 341; if(irqCounter == 0xff) { irqCounter = irqLatch; irqLine = 1; } else { irqCounter++; } } } if(irqMode == 1) { if(irqCounter == 0xff) { irqCounter = irqLatch; irqLine = 1; } else { irqCounter++; } } } cpu.irqLine(irqLine); tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000 && !programRAM) return data; if(address < 0x8000) return programRAM.read((n13)address); n5 bank, banks = programROM.size() >> 13; switch(address & 0xe000) { case 0x8000: bank = programMode == 0 ? programBank[0] : n5(banks - 2); break; case 0xa000: bank = programBank[1]; break; case 0xc000: bank = programMode == 1 ? programBank[0] : n5(banks - 2); break; case 0xe000: bank = banks - 1; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000 && !programRAM) return; if(address < 0x8000) return programRAM.write((n13)address, data); bool a0 = address & pinA0; bool a1 = address & pinA1; address &= 0xf000; address |= a0 << 0 | a1 << 1; switch(address) { case 0x8000: case 0x8001: case 0x8002: case 0x8003: programBank[0] = data.bit(0,4); break; case 0x9000: case 0x9001: mirror = data.bit(0,1); break; case 0x9002: case 0x9003: programMode = data.bit(1); break; case 0xa000: case 0xa001: case 0xa002: case 0xa003: programBank[1] = data.bit(0,4); break; case 0xb000: characterBank[0].bit(0,3) = data.bit(0,3); break; case 0xb001: characterBank[0].bit(4,7) = data.bit(0,3); break; case 0xb002: characterBank[1].bit(0,3) = data.bit(0,3); break; case 0xb003: characterBank[1].bit(4,7) = data.bit(0,3); break; case 0xc000: characterBank[2].bit(0,3) = data.bit(0,3); break; case 0xc001: characterBank[2].bit(4,7) = data.bit(0,3); break; case 0xc002: characterBank[3].bit(0,3) = data.bit(0,3); break; case 0xc003: characterBank[3].bit(4,7) = data.bit(0,3); break; case 0xd000: characterBank[4].bit(0,3) = data.bit(0,3); break; case 0xd001: characterBank[4].bit(4,7) = data.bit(0,3); break; case 0xd002: characterBank[5].bit(0,3) = data.bit(0,3); break; case 0xd003: characterBank[5].bit(4,7) = data.bit(0,3); break; case 0xe000: characterBank[6].bit(0,3) = data.bit(0,3); break; case 0xe001: characterBank[6].bit(4,7) = data.bit(0,3); break; case 0xe002: characterBank[7].bit(0,3) = data.bit(0,3); break; case 0xe003: characterBank[7].bit(4,7) = data.bit(0,3); break; case 0xf000: irqLatch.bit(0,3) = data.bit(0,3); break; case 0xf001: irqLatch.bit(4,7) = data.bit(0,3); break; case 0xf002: irqAcknowledge = data.bit(0); irqEnable = data.bit(1); irqMode = data.bit(2); if(irqEnable) { irqCounter = irqLatch; irqScalar = 341; } irqLine = 0; break; case 0xf003: irqEnable = irqAcknowledge; irqLine = 0; break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical mirroring case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal mirroring case 2: return 0x0000 | address & 0x03ff; //one-screen mirroring (first) case 3: return 0x0400 | address & 0x03ff; //one-screen mirroring (second) } unreachable; } auto addressCHR(n32 address) const -> n32 { n8 bank = characterBank[address >> 10 & 7]; return bank << 10 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(programMode); s(programBank); s(mirror); s(characterBank); s(irqLatch); s(irqMode); s(irqEnable); s(irqAcknowledge); s(irqCounter); s(irqScalar); s(irqLine); } n1 programMode; n5 programBank[2]; n2 mirror; n8 characterBank[8]; n8 irqLatch; n1 irqMode; n1 irqEnable; n1 irqAcknowledge; n8 irqCounter; i16 irqScalar; n1 irqLine; //unserialized: n8 pinA0; n8 pinA1; }; ares-126/ares/fc/cartridge/board/konami-vrc5.cpp000066400000000000000000000217151415063341600215430ustar00rootroot00000000000000//internal = Konami Q-Tai base cartridge (connects to Famicom system) //external = Konami Q-Tai game cartridge (connects to base cartridge) //PRG-ROM: 128 KiB internal ROM + 512 KiB external ROM (concatenated) //CHR-ROM: 256 KiB internal ROM //PRG-RAM: 8 KiB volatile internal + 8 KiB non-volatile external //CHR-RAM: 8 KiB volatile internal //QTRAM: 2 KiB volatile internal struct KonamiVRC5 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-5") return new KonamiVRC5; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; Memory::Writable qtram; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); qtram.allocate(2_KiB); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(irqEnable) { if(++irqCounter == 0) { irqCounter = irqLatch; cpu.irqLine(1); } } tick(); } //converts JIS X 0208 codepoint to CIRAM tile# + QTRAM bank# auto jisLookup() const -> n16 { static const n8 table[4][8] = { {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, {0x00, 0x00, 0x40, 0x10, 0x28, 0x00, 0x18, 0x30}, {0x00, 0x00, 0x48, 0x18, 0x30, 0x08, 0x20, 0x38}, {0x00, 0x00, 0x80, 0x20, 0x38, 0x10, 0x28, 0xb0}, }; n8 data = table[jisColumn >> 5][jisRow >> 4]; n8 lo = jisPosition | (jisColumn & 31) << 2 | (jisRow & 1) << 7; n8 hi = jisRow >> 1 & 7 | data & 0x3f | 0x40 | jisAttribute << 7; if(data & 0x40) { hi &= 0xfb; } else if(data & 0x80) { hi |= 0x04; } return hi << 8 | lo << 0; } auto readPRG(n32 address, n8 data) -> n8 override { //replaces program bank 2 region if(address >= 0xdc00 && address <= 0xdcff) { data = jisLookup() >> 0; return data; } //replaces program bank 2 region if(address >= 0xdd00 && address <= 0xddff) { data = jisLookup() >> 8; return data; } if(address >= 0x6000 && address <= 0x6fff) { n32 chip = !saveChip0 ? 0x2000 : 0x0000; data = programRAM.read(chip + (saveBank0 << 12) + (n12)address); return data; } if(address >= 0x7000 && address <= 0x7fff) { n32 chip = !saveChip1 ? 0x2000 : 0x0000; data = programRAM.read(chip + (saveBank1 << 12) + (n12)address); return data; } if(address >= 0x8000 && address <= 0x9fff) { n32 chip = !programChip0 ? 0x00000 : 0x20000; data = programROM.read(chip + (programBank0 << 13) + (n13)address); return data; } if(address >= 0xa000 && address <= 0xbfff) { n32 chip = !programChip1 ? 0x00000 : 0x20000; data = programROM.read(chip + (programBank1 << 13) + (n13)address); return data; } if(address >= 0xc000 && address <= 0xdfff) { n32 chip = !programChip2 ? 0x00000 : 0x20000; data = programROM.read(chip + (programBank2 << 13) + (n13)address); return data; } if(address >= 0xe000 && address <= 0xffff) { n32 chip = !programChip3 ? 0x00000 : 0x20000; data = programROM.read(chip + (programBank3 << 13) + (n13)address); return data; } return data; } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x6000 && address <= 0x6fff) { n32 chip = !saveChip0 ? 0x2000 : 0x0000; programRAM.write(chip + (saveBank0 << 12) + (n12)address, data); return; } if(address >= 0x7000 && address <= 0x7fff) { n32 chip = !saveChip1 ? 0x2000 : 0x0000; programRAM.write(chip + (saveBank1 << 12) + (n12)address, data); return; } address &= 0xff00; if(address == 0xd000) { saveBank0 = data.bit(0); saveChip0 = data.bit(3); return; } if(address == 0xd100) { saveBank1 = data.bit(0); saveChip1 = data.bit(3); return; } if(address == 0xd200) { programBank0 = data.bit(0,5); programChip0 = data.bit(6); if(!programChip0) programBank0.bit(4,5) = 0; return; } if(address == 0xd300) { programBank1 = data.bit(0,5); programChip1 = data.bit(6); if(!programChip1) programBank1.bit(4,5) = 0; return; } if(address == 0xd400) { programBank2 = data.bit(0,5); programChip2 = data.bit(6); if(!programChip2) programBank2.bit(4,5) = 0; return; } if(address == 0xd500) { graphicBank0 = data.bit(0); return; } if(address == 0xd600) { irqLatch.byte(0) = data; return; } if(address == 0xd700) { irqLatch.byte(1) = data; return; } if(address == 0xd800) { irqEnable = irqRepeat; cpu.irqLine(0); return; } if(address == 0xd900) { irqRepeat = data.bit(0); irqEnable = data.bit(1); irqCounter = irqLatch; cpu.irqLine(0); return; } if(address == 0xda00) { qtramEnable = data.bit(0); mirror = data.bit(1); return; } if(address == 0xdb00) { jisPosition = data.bit(0,1); jisAttribute = data.bit(2); return; } if(address == 0xdc00) { jisColumn = data.bit(0,6); return; } if(address == 0xdd00) { jisRow = data.bit(0,6); return; } } auto readCHR(n32 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x1fff && chrLatchCount) { //A12 is ignored here chrLatchCount--; data = chrLatchData; if(data.bit(7) && data.bit(6) && (address & 1 << 3)) { data = 0xff; } else if(data.bit(6)) { n6 bank = data.bit(0,5); data = characterROM.read((bank << 12) + (n12)address); } else { n6 bank = data.bit(0); data = characterRAM.read((bank << 12) + (n12)address); } return data; } if(address >= 0x0000 && address <= 0x0fff) { data = characterRAM.read((graphicBank0 << 12) + (n12)address); return data; } if(address >= 0x1000 && address <= 0x1fff) { data = characterRAM.read((graphicBank1 << 12) + (n12)address); return data; } if(address >= 0x2000 && address <= 0x2fff) { address = address >> mirror & 0x400 | address & 0x3ff; n8 ciram = ppu.readCIRAM(address); n8 qtram = this->qtram[address]; //hack: how does the VRC5 determine nametable entries are being fetched? u32 x = ppu.io.lx; if((x >= 1 && x <= 256) || (x >= 321 && x <= 336)) { u32 step = x - 1 & 7; if(step == 0) { //nametable fetch: specialize the next two tiledata CHR fetches chrLatchData = qtram; chrLatchCount = 2; } } data = !qtramEnable ? ciram : qtram; return data; } return data; //should never occur } auto writeCHR(n32 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x0fff) { characterRAM.write((graphicBank0 << 12) + (n12)address, data); return; } if(address >= 0x1000 && address <= 0x1fff) { characterRAM.write((graphicBank1 << 12) + (n12)address, data); return; } if(address >= 0x2000 && address <= 0x2fff) { address = address >> mirror & 0x400 | address & 0x3ff; if(!qtramEnable) { ppu.writeCIRAM(address, data); } else { qtram[address] = data; } return; } } auto power() -> void override { programBank3 = 0x3f; programChip3 = 1; graphicBank1 = 1; } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(qtram); s(saveBank0); s(saveBank1); s(saveChip0); s(saveChip1); s(programBank0); s(programBank1); s(programBank2); s(programBank3); s(programChip0); s(programChip1); s(programChip2); s(programChip3); s(graphicBank0); s(graphicBank1); s(irqCounter); s(irqLatch); s(irqRepeat); s(irqEnable); s(qtramEnable); s(mirror); s(jisPosition); s(jisAttribute); s(jisColumn); s(jisRow); s(chrLatchData); s(chrLatchCount); } n1 saveBank0; n1 saveBank1; n1 saveChip0; //0 = external, 1 = internal n1 saveChip1; n6 programBank0; n6 programBank1; n6 programBank2; n6 programBank3; //fixed n1 programChip0; //0 = internal, 1 = external n1 programChip1; n1 programChip2; n1 programChip3; //fixed n1 graphicBank0; n1 graphicBank1; //fixed n16 irqCounter; n16 irqLatch; n1 irqRepeat; n1 irqEnable; n1 qtramEnable; //0 = CIRAM, 1 = QTRAM n1 mirror; //0 = vertical, 1 = horizontal n2 jisPosition; //0 = top-left, 1 = top-right, 2 = bottom-left, 3 = bottom-right n1 jisAttribute; //0 = normal, 1 = alternate n7 jisColumn; n7 jisRow; n8 chrLatchData; n8 chrLatchCount; }; ares-126/ares/fc/cartridge/board/konami-vrc6.cpp000066400000000000000000000170541415063341600215450ustar00rootroot00000000000000struct KonamiVRC6 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-6") return new KonamiVRC6; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; Node::Audio::Stream stream; struct Pulse { auto clock() -> void { if(--divider == 0) { divider = frequency + 1; cycle++; output = (mode == 1 || cycle > duty) ? volume : (n4)0; } if(!enable) output = 0; } auto serialize(serializer& s) -> void { s(mode); s(duty); s(volume); s(enable); s(frequency); s(divider); s(cycle); s(output); } n1 mode; n3 duty; n4 volume; n1 enable; n12 frequency; n12 divider; n4 cycle; n4 output; }; struct Sawtooth { auto clock() -> void { if(--divider == 0) { divider = frequency + 1; if(++phase == 0) { accumulator += rate; if(++stage == 7) { stage = 0; accumulator = 0; } } } output = accumulator >> 3; if(!enable) output = 0; } auto serialize(serializer& s) -> void { s(rate); s(enable); s(frequency); s(divider); s(phase); s(stage); s(accumulator); s(output); } n6 rate; n1 enable; n12 frequency; n12 divider; n1 phase; n3 stage; n8 accumulator; n5 output; }; using Interface::Interface; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); pinA0 = 1 << pak->attribute("pinout/a0").natural(); pinA1 = 1 << pak->attribute("pinout/a1").natural(); stream = cartridge.node->append("VRC6"); stream->setChannels(1); stream->setFrequency(u32(system.frequency() + 0.5) / cartridge.rate()); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto unload() -> void override { cartridge.node->remove(stream); stream.reset(); } auto main() -> void override { if(irqEnable) { if(irqMode == 0) { irqScalar -= 3; if(irqScalar <= 0) { irqScalar += 341; if(irqCounter == 0xff) { irqCounter = irqLatch; irqLine = 1; } else { irqCounter++; } } } if(irqMode == 1) { if(irqCounter == 0xff) { irqCounter = irqLatch; irqLine = 1; } else { irqCounter++; } } } cpu.irqLine(irqLine); pulse1.clock(); pulse2.clock(); sawtooth.clock(); f64 output = (pulse1.output + pulse2.output + sawtooth.output) / 61.0 * 0.25; stream->frame(-output); tick(); } auto addressPRG(n32 address) const -> n32 { if((address & 0xc000) == 0x8000) return programBank[0] << 14 | (n14)address; if((address & 0xe000) == 0xc000) return programBank[1] << 13 | (n13)address; if((address & 0xe000) == 0xe000) return 0xff << 13 | (n13)address; return 0; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000 && !programRAM) return data; if(address < 0x8000) return programRAM.read((n13)address); return programROM.read(addressPRG(address)); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000 && !programRAM) return; if(address < 0x8000) return programRAM.write((n13)address, data); bool a0 = address & pinA0; bool a1 = address & pinA1; address = address & 0xf000 | a0 << 0 | a1 << 1; switch(address) { case 0x8000: case 0x8001: case 0x8002: case 0x8003: programBank[0] = data; break; case 0x9000: pulse1.volume = data.bit(0,3); pulse1.duty = data.bit(4,6); pulse1.mode = data.bit(7); break; case 0x9001: pulse1.frequency.bit(0,7) = data.bit(0,7); break; case 0x9002: pulse1.frequency.bit(8,11) = data.bit(0,3); pulse1.enable = data.bit(7); break; case 0xa000: pulse2.volume = data.bit(0,3); pulse2.duty = data.bit(4,6); pulse2.mode = data.bit(7); break; case 0xa001: pulse2.frequency.bit(0,7) = data.bit(0,7); break; case 0xa002: pulse2.frequency.bit(8,11) = data.bit(0,3); pulse2.enable = data.bit(7); break; case 0xb000: sawtooth.rate = data.bit(0,5); break; case 0xb001: sawtooth.frequency.bit(0,7) = data.bit(0,7); break; case 0xb002: sawtooth.frequency.bit(8,11) = data.bit(0,3); sawtooth.enable = data.bit(7); break; case 0xb003: mirror = data.bit(2,3); break; case 0xc000: case 0xc001: case 0xc002: case 0xc003: programBank[1] = data; break; case 0xd000: characterBank[0] = data; break; case 0xd001: characterBank[1] = data; break; case 0xd002: characterBank[2] = data; break; case 0xd003: characterBank[3] = data; break; case 0xe000: characterBank[4] = data; break; case 0xe001: characterBank[5] = data; break; case 0xe002: characterBank[6] = data; break; case 0xe003: characterBank[7] = data; break; case 0xf000: irqLatch = data; break; case 0xf001: irqAcknowledge = data.bit(0); irqEnable = data.bit(1); irqMode = data.bit(2); if(irqEnable) { irqCounter = irqLatch; irqScalar = 341; } irqLine = 0; break; case 0xf002: irqEnable = irqAcknowledge; irqLine = 0; break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical mirroring case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal mirroring case 2: return 0x0000 | address & 0x03ff; //one-screen mirroring (first) case 3: return 0x0400 | address & 0x03ff; //one-screen mirroring (second) } unreachable; } auto addressCHR(n32 address) const -> n32 { n8 bank = characterBank[address >> 10 & 7]; return bank << 10 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { pulse1.divider = 1; pulse2.divider = 1; sawtooth.divider = 1; } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(pulse1); s(pulse2); s(sawtooth); s(programBank); s(characterBank); s(mirror); s(irqLatch); s(irqMode); s(irqEnable); s(irqAcknowledge); s(irqCounter); s(irqScalar); s(irqLine); } Pulse pulse1; Pulse pulse2; Sawtooth sawtooth; n8 programBank[2]; n8 characterBank[8]; n2 mirror; n8 irqLatch; n1 irqMode; n1 irqEnable; n1 irqAcknowledge; n8 irqCounter; i16 irqScalar; n1 irqLine; //unserialized: n8 pinA0; n8 pinA1; }; ares-126/ares/fc/cartridge/board/konami-vrc7.cpp000066400000000000000000000127221415063341600215430ustar00rootroot00000000000000struct KonamiVRC7 : Interface { static auto create(string id) -> Interface* { if(id == "KONAMI-VRC-7") return new KonamiVRC7; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; YM2413 ym2413; Node::Audio::Stream stream; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); pinA0 = 1 << pak->attribute("pinout/a0").natural(); stream = cartridge.node->append("YM2413"); stream->setChannels(1); stream->setFrequency(u32(system.frequency() + 0.5) / cartridge.rate() / 36); stream->addLowPassFilter(2280.0, 1); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto unload() -> void override { cartridge.node->remove(stream); stream.reset(); } auto main() -> void override { if(irqEnable) { if(irqMode == 0) { irqScalar -= 3; if(irqScalar <= 0) { irqScalar += 341; if(irqCounter == 0xff) { irqCounter = irqLatch; irqLine = 1; } else { irqCounter++; } } } if(irqMode == 1) { if(irqCounter == 0xff) { irqCounter = irqLatch; irqLine = 1; } else { irqCounter++; } } } cpu.irqLine(irqLine); if(++divider == 36) { divider = 0; double sample = 0.0; if(!disableFM) sample = ym2413.clock(); stream->frame(sample); } tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000 && !programRAM) return data; if(address < 0x8000) return programRAM.read(address); n8 bank; switch(address & 0xe000) { case 0x8000: bank = programBank[0]; break; case 0xa000: bank = programBank[1]; break; case 0xc000: bank = programBank[2]; break; case 0xe000: bank = 0xff; break; } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000 && !programRAM) return; if(address < 0x8000) return programRAM.write(address, data); bool a0 = address & pinA0; address &= 0xf020; address |= a0; switch(address) { case 0x8000: programBank[0] = data; break; case 0x8001: programBank[1] = data; break; case 0x9000: programBank[2] = data; break; case 0x9001: ym2413.address(data); break; case 0x9021: ym2413.write(data); break; case 0xa000: characterBank[0] = data; break; case 0xa001: characterBank[1] = data; break; case 0xb000: characterBank[2] = data; break; case 0xb001: characterBank[3] = data; break; case 0xc000: characterBank[4] = data; break; case 0xc001: characterBank[5] = data; break; case 0xd000: characterBank[6] = data; break; case 0xd001: characterBank[7] = data; break; case 0xe000: if(disableFM && !data.bit(6)) ym2413.power(1); mirror = data.bit(0,1); disableFM = data.bit(6); ramWritable = data.bit(7); break; case 0xe001: irqLatch = data; break; case 0xf000: irqAcknowledge = data.bit(0); irqEnable = data.bit(1); irqMode = data.bit(2); if(irqEnable) { irqCounter = irqLatch; irqScalar = 341; } irqLine = 0; break; case 0xf001: irqEnable = irqAcknowledge; irqLine = 0; break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical mirroring case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal mirroring case 2: return 0x0000 | address & 0x03ff; //one-screen mirroring (first) case 3: return 0x0400 | address & 0x03ff; //one-screen mirroring (second) } unreachable; } auto addressCHR(n32 address) const -> n32 { n8 bank = characterBank[address >> 10 & 7]; return bank << 10 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { ym2413.power(); disableFM = 1; ramWritable = 1; } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(ym2413); s(programBank); s(characterBank); s(mirror); s(disableFM); s(ramWritable); s(irqLatch); s(irqMode); s(irqEnable); s(irqAcknowledge); s(irqCounter); s(irqScalar); s(irqLine); s(divider); } n8 programBank[3]; n8 characterBank[8]; n2 mirror; n1 disableFM; n1 ramWritable; n8 irqLatch; n1 irqMode; n1 irqEnable; n1 irqAcknowledge; n8 irqCounter; i16 irqScalar; n1 irqLine; n6 divider; //unserialized: n8 pinA0; }; ares-126/ares/fc/cartridge/board/mlt-action52.cpp000066400000000000000000000036271415063341600216300ustar00rootroot00000000000000struct MltAction52 : Interface { static auto create(string id) -> Interface* { if(id == "MLT-ACTION52") return new MltAction52(); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n2 chipOffset; switch(programChip) { case 0: chipOffset = 0; break; case 1: chipOffset = 1; break; case 2: return data; case 3: chipOffset = 2; break; } bool region = address.bit(14); n5 bank = programMode ? programBank : (n5)(programBank & ~1 | region); address = chipOffset << 19 | bank << 14 | (n14)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; characterBank = address.bit(0,3) << 2 | data.bit(0,1); programMode = address.bit(5); programBank = address.bit(6,10); programChip = address.bit(11,12); mirror = address.bit(13); } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> mirror & 0x0400 | (n10)address; return ppu.readCIRAM(address); } address = characterBank << 13 | (n13)address; if(characterROM) return characterROM.read(address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> mirror & 0x0400 | (n10)address; return ppu.writeCIRAM(address, data); } } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(characterBank); s(programMode); s(programBank); s(programChip); s(mirror); } n6 characterBank; n1 programMode; n5 programBank; n2 programChip; n1 mirror; }; ares-126/ares/fc/cartridge/board/namco-118.cpp000066400000000000000000000105211415063341600210050ustar00rootroot00000000000000struct Namco118 : Interface { static auto create(string id) -> Interface* { if(id == "NAMCO-118" ) return new Namco118(Revision::N118); if(id == "NAMCO-3425") return new Namco118(Revision::N3425); if(id == "NAMCO-3433") return new Namco118(Revision::N3433); if(id == "NAMCO-3446") return new Namco118(Revision::N3446); if(id == "NAMCO-3453") return new Namco118(Revision::N3453); return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterCIRAM; enum class Revision : u32 { N118, N3425, N3433, N3446, N3453, } revision; Namco118(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterCIRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterCIRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n4 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = 0x0e; break; case 3: bank = 0x0f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x8000) nametableBank = data.bit(6); switch(address & 0xe001) { case 0x8000: bankSelect = data.bit(0,2); break; case 0x8001: switch(bankSelect) { case 0: characterBank[0] = data >> 1; break; case 1: characterBank[1] = data >> 1; break; case 2: characterBank[2] = data; break; case 3: characterBank[3] = data; break; case 4: characterBank[4] = data; break; case 5: characterBank[5] = data; break; case 6: programBank[0] = data; break; case 7: programBank[1] = data; break; } break; } } auto addressCHR(n32 address) const -> n32 { n32 chrAddress = 0; if(revision == Revision::N3446) { switch(address) { case 0x0000 ... 0x07ff: chrAddress = characterBank[2] << 11 | (n11)address; break; case 0x0800 ... 0x0fff: chrAddress = characterBank[3] << 11 | (n11)address; break; case 0x1000 ... 0x17ff: chrAddress = characterBank[4] << 11 | (n11)address; break; case 0x1800 ... 0xffff: chrAddress = characterBank[5] << 11 | (n11)address; break; } } else { switch(address) { case 0x0000 ... 0x07ff: chrAddress = characterBank[0] << 11 | (n11)address; break; case 0x0800 ... 0x0fff: chrAddress = characterBank[1] << 11 | (n11)address; break; case 0x1000 ... 0x13ff: chrAddress = characterBank[2] << 10 | (n10)address; break; case 0x1400 ... 0x17ff: chrAddress = characterBank[3] << 10 | (n10)address; break; case 0x1800 ... 0x1bff: chrAddress = characterBank[4] << 10 | (n10)address; break; case 0x1c00 ... 0x1fff: chrAddress = characterBank[5] << 10 | (n10)address; break; } chrAddress |= (address & 0x1000) << 4; } return chrAddress; } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::N3425) { n6 bank = characterBank[address >> 11 & 1]; return bank.bit(4) << 10 | (n10)address; } if(revision == Revision::N3453) { return nametableBank << 10 | (n10)address; } return address >> !mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { if(!characterCIRAM) return ppu.readCIRAM(addressCIRAM(address)); if(address & 0x0800) return characterCIRAM.read((n11)address); return ppu.readCIRAM((n11)address); } return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { if(!characterCIRAM) return ppu.writeCIRAM(addressCIRAM(address), data); if(address & 0x0800) return characterCIRAM.write((n11)address, data); return ppu.writeCIRAM((n11)address, data); } } auto serialize(serializer& s) -> void override { s(characterCIRAM); s(mirror); s(bankSelect); s(programBank); s(characterBank); s(nametableBank); } n1 mirror; n3 bankSelect; n4 programBank[2]; n6 characterBank[6]; n1 nametableBank; }; ares-126/ares/fc/cartridge/board/namco-163.cpp000066400000000000000000000103561415063341600210130ustar00rootroot00000000000000//todo: sound struct Namco163 : Interface { static auto create(string id) -> Interface* { if(id == "NAMCO-163") return new Namco163; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto main() -> void override { cpu.irqLine(irqLine); if(irqEnable) { if(irqCounter != 0x7fff && ++irqCounter == 0x7fff) irqLine = 1; } tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x4800) return data; if(address < 0x5000) return data; //if(address < 0x5000) return soundRAM.read(soundAddress); if(address < 0x6000) { if(address < 0x5800) return irqCounter.bit(0,7); if(address < 0x6000) return irqCounter.bit(8,14) | irqEnable << 7; } if(address < 0x8000) { if(!programRAM) return data; return programRAM.read((n13)address); } n6 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = programBank[2]; break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x6000 && address < 0x8000) { if(!programRAM) return; if(!ramEnable[address >> 11 & 3]) return; return programRAM.write((n13)address, data); } switch(address & 0xf800) { case 0x4800: //soundRAM.write(soundAddres, data); break; case 0x5000: irqCounter.bit(0,7) = data; irqLine = 0; break; case 0x5800: irqCounter.bit(8,14) = data.bit(0,6); irqEnable = data.bit(7); irqLine = 0; break; case 0x8000: characterBank[0] = data; break; case 0x8800: characterBank[1] = data; break; case 0x9000: characterBank[2] = data; break; case 0x9800: characterBank[3] = data; break; case 0xa000: characterBank[4] = data; break; case 0xa800: characterBank[5] = data; break; case 0xb000: characterBank[6] = data; break; case 0xb800: characterBank[7] = data; break; case 0xc000: characterBank[8] = data; break; case 0xc800: characterBank[9] = data; break; case 0xd000: characterBank[10] = data; break; case 0xd800: characterBank[11] = data; break; case 0xe000: programBank[0] = data.bit(0,5); //soundEnable = !data.bit(6); break; case 0xe800: programBank[1] = data.bit(0,5); ciramEnable[0] = !data.bit(6); ciramEnable[1] = !data.bit(7); break; case 0xf000: programBank[2] = data.bit(0,5); break; case 0xf800: ramEnable[0] = data.bit(4,7) == 4 && !data.bit(0); ramEnable[1] = data.bit(4,7) == 4 && !data.bit(1); ramEnable[2] = data.bit(4,7) == 4 && !data.bit(2); ramEnable[3] = data.bit(4,7) == 4 && !data.bit(3); //soundAddress = data.bit(0,6); //soundRepeat = data.bit(7); break; } } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) address.bit(12) = 0; bool ciramSelect = address & 0x2000 || ciramEnable[address >> 12 & 1]; n8 bank = characterBank[address >> 10]; if(bank >= 0xe0 && ciramSelect) { return ppu.readCIRAM(bank.bit(0) << 10 | (n10)address); } return characterROM.read(bank << 10 | (n10)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) address.bit(12) = 0; bool ciramSelect = address & 0x2000 || ciramEnable[address >> 12 & 1]; n8 bank = characterBank[address >> 10]; if(bank >= 0xe0 && ciramSelect) { return ppu.writeCIRAM(bank.bit(0) << 10 | (n10)address, data); } } auto serialize(serializer& s) -> void override { s(programRAM); s(ramEnable); s(ciramEnable); s(programBank); s(characterBank); s(irqCounter); s(irqEnable); s(irqLine); } n1 ramEnable[4]; n1 ciramEnable[2]; n6 programBank[3]; n8 characterBank[12]; n15 irqCounter; n1 irqEnable; n1 irqLine; }; ares-126/ares/fc/cartridge/board/namco-340.cpp000066400000000000000000000062051415063341600210060ustar00rootroot00000000000000struct Namco340 : Interface { static auto create(string id) -> Interface* { if(id == "NAMCO-175") return new Namco340(Revision::N175); if(id == "NAMCO-340") return new Namco340(Revision::N340); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; enum class Revision : u32 { N175, N340, } revision; Namco340(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); staticMirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(!ramEnable || !programRAM) return data; return programRAM.read((n13)address); } n6 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = programBank[2]; break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(!ramEnable || !programRAM) return; return programRAM.write((n13)address, data); } switch(address & 0xf800) { case 0x8000: characterBank[0] = data; break; case 0x8800: characterBank[1] = data; break; case 0x9000: characterBank[2] = data; break; case 0x9800: characterBank[3] = data; break; case 0xa000: characterBank[4] = data; break; case 0xa800: characterBank[5] = data; break; case 0xb000: characterBank[6] = data; break; case 0xb800: characterBank[7] = data; break; case 0xc000: ramEnable = data.bit(0); break; case 0xe000: programBank[0] = data.bit(0,5); mirror = data.bit(6,7); break; case 0xe800: programBank[1] = data.bit(0,5); break; case 0xf000: programBank[2] = data.bit(0,5); break; } } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::N175) { return address >> !staticMirror & 0x0400 | (n10)address; } switch(mirror) { case 0: return 0x0000 | (n10)address; case 1: return address >> 0 & 0x0400 | (n10)address; case 2: return 0x0400 | (n10)address; case 3: return address >> 1 & 0x0400 | (n10)address; } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); n8 bank = characterBank[address >> 10 & 7]; return characterROM.read(bank << 10 | (n10)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(programRAM); s(mirror); s(staticMirror); s(ramEnable); s(programBank); s(characterBank); } n2 mirror; n1 staticMirror; n1 ramEnable; n6 programBank[3]; n8 characterBank[8]; }; ares-126/ares/fc/cartridge/board/sunsoft-1.cpp000066400000000000000000000040321415063341600212400ustar00rootroot00000000000000struct Sunsoft1 : Interface { static auto create(string id) -> Interface* { if(id == "SUNSOFT-1") return new Sunsoft1; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); mirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x6000 && address <= 0x7fff) { characterBank[0] = data.bit(0,2); characterBank[1] = data.bit(4,5) | 4; } } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | address & 0x03ff; return ppu.readCIRAM(address); } n3 bank; switch(address & 0x1000) { case 0x0000: bank = characterBank[0]; break; case 0x1000: bank = characterBank[1]; break; } if(characterROM) return characterROM.read(bank << 12 | (n12)address); if(characterRAM) return characterRAM.read(bank << 12 | (n12)address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = address >> !mirror & 0x0400 | address & 0x03ff; return ppu.writeCIRAM(address, data); } n3 bank; switch(address & 0x1000) { case 0x0000: bank = characterBank[0]; break; case 0x1000: bank = characterBank[1]; break; } if(characterRAM) return characterRAM.write(bank << 12 | (n12)address, data); } auto power() -> void override { characterBank[0] = 0; characterBank[1] = 4; } auto serialize(serializer& s) -> void override { s(characterBank); } n3 characterBank[2]; n1 mirror; }; ares-126/ares/fc/cartridge/board/sunsoft-2.cpp000066400000000000000000000040631415063341600212450ustar00rootroot00000000000000struct Sunsoft2 : Interface { static auto create(string id) -> Interface* { if(id == "SUNSOFT-2") return new Sunsoft2; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); staticMirror = pak->attribute("mirror") == "vertical"; } auto save() -> void override { Interface::save(characterRAM, "character.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n3 bank; switch(address & 0xc000) { case 0x8000: bank = programBank; break; case 0xc000: bank = ~0; break; } return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address & 0x8000) { characterBank.bit(0,2) = data.bit(0,2); mirror = data.bit(3); programBank = data.bit(4,6); characterBank.bit(3) = data.bit(7); } } auto addressCIRAM(n32 address) const -> n32 { if(characterROM) return mirror << 10 | (n10)address; if(characterRAM) return address >> !staticMirror & 0x0400 | address & 0x03ff; return 0; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(characterBank << 13 | (n13)address); if(characterRAM) return characterRAM.read(characterBank << 13 | (n13)address); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(characterBank << 13 | (n13)address, data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programBank); s(characterBank); s(mirror); } n3 programBank; n4 characterBank; n1 mirror; n1 staticMirror; }; ares-126/ares/fc/cartridge/board/sunsoft-3.cpp000066400000000000000000000065331415063341600212520ustar00rootroot00000000000000struct Sunsoft3 : Interface { static auto create(string id) -> Interface* { if(id == "SUNSOFT-3") return new Sunsoft3; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto main() -> void override { if(irqEnable && !irqCounter--) { irqEnable = 0; cpu.irqLine(1); } tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(!programRAM) return data; return programRAM.read(address); } n4 bank; switch(address & 0xc000) { case 0x8000: bank = programBank; break; case 0xc000: bank = ~0; break; } return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(!programRAM) return; return programRAM.write(address, data); } if((address & 0x8800) == 0x8000) { cpu.irqLine(0); return; } switch(address & 0xf800) { case 0x8800: characterBank[0] = data.bit(0,5); break; case 0x9800: characterBank[1] = data.bit(0,5); break; case 0xa800: characterBank[2] = data.bit(0,5); break; case 0xb800: characterBank[3] = data.bit(0,5); break; case 0xc800: if(irqToggle == 0) irqCounter.bit(8,15) = data; if(irqToggle == 1) irqCounter.bit(0, 7) = data; irqToggle = !irqToggle; break; case 0xd800: irqEnable = data.bit(4); irqToggle = 0; break; case 0xe800: mirror = data.bit(0,1); break; case 0xf800: programBank = data.bit(0,4); break; } } auto addressCIRAM(n32 address) const -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal case 2: return 0x0000 | address & 0x03ff; //first case 3: return 0x0400 | address & 0x03ff; //second } unreachable; } auto addressCHR(n32 address) const -> n32 { n6 bank = characterBank[address >> 11 & 3]; return bank << 11 | (n11)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(programBank); s(characterBank); s(mirror); s(irqEnable); s(irqToggle); s(irqCounter); } n5 programBank; n6 characterBank[4]; n2 mirror; n1 irqEnable; n1 irqToggle; n16 irqCounter; }; ares-126/ares/fc/cartridge/board/sunsoft-4.cpp000066400000000000000000000077011415063341600212510ustar00rootroot00000000000000//SUNSOFT-4 //* After Burner (PRG-ROM + CHR-ROM) //* Maharaja (PRG-ROM + PRG-RAM + CHR-ROM) //* Nantettatte!! Baseball (PRG-ROM + EXT-ROM + CHR-ROM) //note: EXT-ROM (option ROM) PCB ID is NTB-SUB-PCB and uses SUNSOFT-6 IC struct Sunsoft4 : Interface { static auto create(string id) -> Interface* { if(id == "SUNSOFT-4") return new Sunsoft4; return nullptr; } Memory::Readable programROM; Memory::Readable optionROM; Memory::Writable programRAM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(optionROM, "option.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto main() -> void override { if(optionTimer) optionTimer--; tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; if(address < 0x8000) { if(!ramEnable) return data; if(!programRAM) return data; return programRAM.read(address); } if(address < 0xc000 && optionROM && !optionDisable) { if(!optionTimer) return data; return optionROM.read((n14)address); } n3 bank; switch(address & 0xc000) { case 0x8000: bank = programBank; break; case 0xc000: bank = ~0; break; } return programROM.read(bank << 14 | (n14)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x6000) return; if(address < 0x8000) { if(!ramEnable) { optionTimer = 1024 * 105; return; } if(!programRAM) return; return programRAM.write(address, data); } switch(address & 0xf000) { case 0x8000: characterBank[0] = data; break; case 0x9000: characterBank[1] = data; break; case 0xa000: characterBank[2] = data; break; case 0xb000: characterBank[3] = data; break; case 0xc000: nametableBank[0] = data | 0x80; break; case 0xd000: nametableBank[1] = data | 0x80; break; case 0xe000: mirror = data.bit(0,1); nametableEnable = data.bit(4); break; case 0xf000: programBank = data.bit(0,2); optionDisable = data.bit(3); ramEnable = data.bit(4); break; } } auto addressCIRAM(n32 address) -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal case 2: return 0x0000 | address & 0x03ff; //first case 3: return 0x0400 | address & 0x03ff; //second } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) { address = addressCIRAM(address); if(nametableEnable) { n8 bank = nametableBank[address >> 10 & 1]; return characterROM.read(bank << 10 | (n10)address); } return ppu.readCIRAM(address); } n8 bank; switch(address & 0x1800) { case 0x0000: bank = characterBank[0]; break; case 0x0800: bank = characterBank[1]; break; case 0x1000: bank = characterBank[2]; break; case 0x1800: bank = characterBank[3]; break; } return characterROM.read(bank << 11 | (n11)address); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) { address = addressCIRAM(address); if(nametableEnable) return; return ppu.writeCIRAM(address, data); } } auto power() -> void override { nametableBank[0] = 0x80; nametableBank[1] = 0x81; optionDisable = 1; } auto serialize(serializer& s) -> void override { s(programRAM); s(optionTimer); s(characterBank); s(nametableBank); s(programBank); s(optionDisable); s(ramEnable); s(nametableEnable); s(mirror); } n32 optionTimer; n8 characterBank[4]; n8 nametableBank[2]; n4 programBank; n1 optionDisable; n1 ramEnable; n1 nametableEnable; n2 mirror; }; ares-126/ares/fc/cartridge/board/sunsoft-5b.cpp000066400000000000000000000114741415063341600214160ustar00rootroot00000000000000struct Sunsoft5B : Interface { static auto create(string id) -> Interface* { if(id == "SUNSOFT-5B") return new Sunsoft5B; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; Memory::Writable characterRAM; YM2149 ym2149; Node::Audio::Stream stream; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); Interface::load(characterRAM, "character.ram"); stream = cartridge.node->append("YM2149"); stream->setChannels(1); stream->setFrequency(u32(system.frequency() + 0.5) / cartridge.rate() / 16); } auto save() -> void override { Interface::save(programRAM, "save.ram"); Interface::save(characterRAM, "character.ram"); } auto unload() -> void override { cartridge.node->remove(stream); stream.reset(); } auto main() -> void override { if(irqCounterEnable) { if(--irqCounter == 0xffff) { cpu.irqLine(irqEnable); } } if(!++divider) { auto channels = ym2149.clock(); double output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; stream->frame(output); } tick(); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x6000) return data; n8 bank; if((address & 0xe000) == 0x6000) bank = programBank[0]; if((address & 0xe000) == 0x8000) bank = programBank[1]; if((address & 0xe000) == 0xa000) bank = programBank[2]; if((address & 0xe000) == 0xc000) bank = programBank[3]; if((address & 0xe000) == 0xe000) bank = 0x3f; bool ramSelect = bank.bit(6); bool ramEnable = bank.bit(7); bank &= 0x3f; if(ramSelect) { if(!ramEnable || !programRAM) return data; return programRAM.read((n13)address); } address = bank << 13 | (n13)address; return programROM.read(address); } auto writePRG(n32 address, n8 data) -> void override { if((address & 0xe000) == 0x6000) { if(programRAM) programRAM.write((n13)address, data); } if(address == 0x8000) { port = data.bit(0,3); } if(address == 0xa000) { switch(port) { case 0x0: characterBank[0] = data; break; case 0x1: characterBank[1] = data; break; case 0x2: characterBank[2] = data; break; case 0x3: characterBank[3] = data; break; case 0x4: characterBank[4] = data; break; case 0x5: characterBank[5] = data; break; case 0x6: characterBank[6] = data; break; case 0x7: characterBank[7] = data; break; case 0x8: programBank[0] = data; break; case 0x9: programBank[1] = data; break; case 0xa: programBank[2] = data; break; case 0xb: programBank[3] = data; break; case 0xc: mirror = data.bit(0,1); break; case 0xd: irqCounterEnable = data.bit(0); irqEnable = data.bit(7); if(irqEnable == 0) cpu.irqLine(0); break; case 0xe: irqCounter.byte(0) = data; break; case 0xf: irqCounter.byte(1) = data; break; } } if(address == 0xc000) { ym2149.select(data); } if(address == 0xe000) { ym2149.write(data); } } auto addressCHR(n32 address) -> n32 { n3 bank = address >> 10 & 7; return characterBank[bank] << 10 | (n10)address; } auto addressCIRAM(n32 address) -> n32 { switch(mirror) { case 0: return address >> 0 & 0x0400 | address & 0x03ff; //vertical case 1: return address >> 1 & 0x0400 | address & 0x03ff; //horizontal case 2: return 0x0000 | address & 0x03ff; //first case 3: return 0x0400 | address & 0x03ff; //second } unreachable; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); if(characterROM) return characterROM.read(addressCHR(address)); if(characterRAM) return characterRAM.read(addressCHR(address)); return data; } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); if(characterRAM) return characterRAM.write(addressCHR(address), data); } auto power() -> void override { ym2149.power(); for(u32 level : range(32)) { volume[level] = 1.0 / pow(2, 1.0 / 2 * (31 - level)); } } auto serialize(serializer& s) -> void override { s(programRAM); s(characterRAM); s(ym2149); s(port); s(programBank); s(characterBank); s(mirror); s(irqEnable); s(irqCounterEnable); s(irqCounter); s(divider); } n4 port; n8 programBank[4]; n8 characterBank[8]; n2 mirror; n1 irqEnable; n1 irqCounterEnable; n16 irqCounter; n4 divider; //unserialized: f64 volume[32]; }; ares-126/ares/fc/cartridge/board/taito-tc0190.cpp000066400000000000000000000045541415063341600214500ustar00rootroot00000000000000struct TaitoTC0190 : Interface { static auto create(string id) -> Interface* { if(id == "TAITO-TC0190") return new TaitoTC0190; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n6 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = 0x3e; break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; switch(address & 0xa003) { case 0x8000: programBank[0] = data.bit(0,5); mirror = data.bit(6); break; case 0x8001: programBank[1] = data.bit(0,5); break; case 0x8002: characterBank[0] = data; break; case 0x8003: characterBank[1] = data; break; case 0xa000: characterBank[2] = data; break; case 0xa001: characterBank[3] = data; break; case 0xa002: characterBank[4] = data; break; case 0xa003: characterBank[5] = data; break; } } auto addressCHR(n32 address) const -> n32 { if(address <= 0x07ff) return characterBank[0] << 11 | (n11)address; if(address <= 0x0fff) return characterBank[1] << 11 | (n11)address; if(address <= 0x13ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x1bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x1fff) return characterBank[5] << 10 | (n10)address; unreachable; } auto addressCIRAM(n32 address) const -> n32 { return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(mirror); s(programBank); s(characterBank); } n1 mirror; n6 programBank[2]; n8 characterBank[6]; }; ares-126/ares/fc/cartridge/board/taito-tc0690.cpp000066400000000000000000000065711415063341600214560ustar00rootroot00000000000000struct TaitoTC0690 : Interface { static auto create(string id) -> Interface* { if(id == "TAITO-TC0690") return new TaitoTC0690; return nullptr; } Memory::Readable programROM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(characterROM, "character.rom"); } auto main() -> void override { if(irqDelay) irqDelay--; if(irqLineDelay && --irqLineDelay == 0) irqLine = 1; cpu.irqLine(irqLine); tick(); } auto irqTest(n16 address) -> void { if(!(characterAddress & 0x1000) && (address & 0x1000)) { if(irqDelay == 0) { if(irqCounter == 0) { irqCounter = irqLatch + 1; } if(--irqCounter == 0) { if(irqEnable) irqLineDelay = 6; } } irqDelay = 6; } characterAddress = address; } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x8000) return data; n6 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = 0x3e; break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address < 0x8000) return; switch(address & 0xe003) { case 0x8000: case 0x8001: programBank[address & 1] = data.bit(0,5); break; case 0x8002: characterBank[0] = data; break; case 0x8003: characterBank[1] = data; break; case 0xa000: characterBank[2] = data; break; case 0xa001: characterBank[3] = data; break; case 0xa002: characterBank[4] = data; break; case 0xa003: characterBank[5] = data; break; case 0xc000: irqLatch = ~data; break; case 0xc001: irqCounter = 0; break; case 0xc002: irqEnable = 1; break; case 0xc003: irqEnable = 0; irqLine = 0; break; case 0xe000: mirror = data.bit(6); break; } } auto addressCHR(n32 address) const -> n32 { if(address <= 0x07ff) return characterBank[0] << 11 | (n11)address; if(address <= 0x0fff) return characterBank[1] << 11 | (n11)address; if(address <= 0x13ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x1bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x1fff) return characterBank[5] << 10 | (n10)address; unreachable; } auto addressCIRAM(n32 address) const -> n32 { return address >> mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { irqTest(address); if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { irqTest(address); if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(mirror); s(programBank); s(characterBank); s(irqLatch); s(irqCounter); s(irqEnable); s(irqDelay); s(irqLineDelay); s(irqLine); s(characterAddress); } n1 mirror; n6 programBank[2]; n8 characterBank[6]; n8 irqLatch; n8 irqCounter; n1 irqEnable; n8 irqDelay; n8 irqLineDelay; n1 irqLine; n16 characterAddress; }; ares-126/ares/fc/cartridge/board/taito-x1-005.cpp000066400000000000000000000065131415063341600213570ustar00rootroot00000000000000struct TaitoX1005 : Interface { static auto create(string id) -> Interface* { if(id == "TAITO-X1-005" ) return new TaitoX1005(Revision::X1005); if(id == "TAITO-X1-005A") return new TaitoX1005(Revision::X1005A); return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; enum class Revision : u32 { X1005, X1005A, } revision; TaitoX1005(Revision revision) : revision(revision) {} auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address < 0x7f00) return data; if(address < 0x8000) { if(!ramEnable) return data; return programRAM.read((n7)address); } n6 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = programBank[2]; break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x7f00 && address < 0x8000) { if(!ramEnable) return; return programRAM.write((n7)address, data); } switch(address) { case 0x7ef0 ... 0x7ef1: characterBank[address & 1] = data >> 1; nametableBank[address & 1] = data.bit(7); break; case 0x7ef2: characterBank[2] = data; break; case 0x7ef3: characterBank[3] = data; break; case 0x7ef4: characterBank[4] = data; break; case 0x7ef5: characterBank[5] = data; break; case 0x7ef6 ... 0x7ef7: mirror = data.bit(0); break; case 0x7ef8 ... 0x7ef9: ramEnable = data == 0xa3; break; case 0x7efa ... 0x7efb: programBank[0] = data.bit(0,5); break; case 0x7efc ... 0x7efd: programBank[1] = data.bit(0,5); break; case 0x7efe ... 0x7eff: programBank[2] = data.bit(0,5); break; } } auto addressCHR(n32 address) const -> n32 { if(address <= 0x07ff) return characterBank[0] << 11 | (n11)address; if(address <= 0x0fff) return characterBank[1] << 11 | (n11)address; if(address <= 0x13ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x1bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x1fff) return characterBank[5] << 10 | (n10)address; unreachable; } auto addressCIRAM(n32 address) const -> n32 { if(revision == Revision::X1005A) { return nametableBank[address >> 12 & 1] << 10 | (n10)address; } return address >> !mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(programRAM); s(mirror); s(ramEnable); s(programBank); s(characterBank); s(nametableBank); } n1 mirror; n1 ramEnable; n6 programBank[3]; n8 characterBank[6]; n1 nametableBank[2]; }; ares-126/ares/fc/cartridge/board/taito-x1-017.cpp000066400000000000000000000062471415063341600213660ustar00rootroot00000000000000struct TaitoX1017 : Interface { static auto create(string id) -> Interface* { if(id == "TAITO-X1-017") return new TaitoX1017; return nullptr; } Memory::Readable programROM; Memory::Writable programRAM; Memory::Readable characterROM; auto load() -> void override { Interface::load(programROM, "program.rom"); Interface::load(programRAM, "save.ram"); Interface::load(characterROM, "character.rom"); } auto save() -> void override { Interface::save(programRAM, "save.ram"); } auto readPRG(n32 address, n8 data) -> n8 override { if(address >= 0x6000 && address < 0x7400) { if(!ramEnable[address >> 11 & 3]) return data; return programRAM.read((n13)address); } if(address < 0x8000) return data; n6 bank; switch(address >> 13 & 3) { case 0: bank = programBank[0]; break; case 1: bank = programBank[1]; break; case 2: bank = programBank[2]; break; case 3: bank = 0x3f; break; } return programROM.read(bank << 13 | (n13)address); } auto writePRG(n32 address, n8 data) -> void override { if(address >= 0x6000 && address < 0x7400) { if(!ramEnable[address >> 11 & 3]) return; return programRAM.write((n13)address, data); } switch(address) { case 0x7ef0: characterBank[0] = data >> 1; break; case 0x7ef1: characterBank[1] = data >> 1; break; case 0x7ef2: characterBank[2] = data; break; case 0x7ef3: characterBank[3] = data; break; case 0x7ef4: characterBank[4] = data; break; case 0x7ef5: characterBank[5] = data; break; case 0x7ef6: mirror = data.bit(0); characterMode = data.bit(1); break; case 0x7ef7: ramEnable[0] = data == 0xca; break; case 0x7ef8: ramEnable[1] = data == 0x69; break; case 0x7ef9: ramEnable[2] = data == 0x84; break; case 0x7efa: programBank[0] = data >> 2; break; case 0x7efb: programBank[1] = data >> 2; break; case 0x7efc: programBank[2] = data >> 2; break; } } auto addressCHR(n32 address) const -> n32 { if(characterMode) address ^= 0x1000; if(address <= 0x07ff) return characterBank[0] << 11 | (n11)address; if(address <= 0x0fff) return characterBank[1] << 11 | (n11)address; if(address <= 0x13ff) return characterBank[2] << 10 | (n10)address; if(address <= 0x17ff) return characterBank[3] << 10 | (n10)address; if(address <= 0x1bff) return characterBank[4] << 10 | (n10)address; if(address <= 0x1fff) return characterBank[5] << 10 | (n10)address; unreachable; } auto addressCIRAM(n32 address) const -> n32 { return address >> !mirror & 0x0400 | (n10)address; } auto readCHR(n32 address, n8 data) -> n8 override { if(address & 0x2000) return ppu.readCIRAM(addressCIRAM(address)); return characterROM.read(addressCHR(address)); } auto writeCHR(n32 address, n8 data) -> void override { if(address & 0x2000) return ppu.writeCIRAM(addressCIRAM(address), data); } auto serialize(serializer& s) -> void override { s(programRAM); s(mirror); s(ramEnable); s(programBank); s(characterBank); s(characterMode); } n1 mirror; n1 ramEnable[3]; n6 programBank[3]; n8 characterBank[6]; n1 characterMode; }; ares-126/ares/fc/cartridge/cartridge.cpp000066400000000000000000000031341415063341600202600ustar00rootroot00000000000000#include namespace ares::Famicom { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "board/board.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); board = Board::Interface::create(pak->attribute("board")); board->pak = pak; board->load(); power(); if(fds.present) { fds.load(node); } } auto Cartridge::disconnect() -> void { if(!node) return; if(fds.present) { fds.unload(); fds.present = 0; } board->unload(); board->pak.reset(); board.reset(); pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; board->save(); } auto Cartridge::power() -> void { Thread::create(system.frequency(), {&Cartridge::main, this}); board->power(); } auto Cartridge::main() -> void { board->main(); } auto Cartridge::readPRG(n32 address, n8 data) -> n8 { return board->readPRG(address, data); } auto Cartridge::writePRG(n32 address, n8 data) -> void { return board->writePRG(address, data); } auto Cartridge::readCHR(n32 address, n8 data) -> n8 { return board->readCHR(address, data); } auto Cartridge::writeCHR(n32 address, n8 data) -> void { return board->writeCHR(address, data); } auto Cartridge::scanline(n32 y) -> void { return board->scanline(y); } } ares-126/ares/fc/cartridge/cartridge.hpp000066400000000000000000000020551415063341600202660ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge : Thread { Node::Peripheral node; VFS::Pak pak; auto rate() const -> u32 { return Region::PAL() ? 16 : 12; } auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto power() -> void; auto save() -> void; auto main() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Information { string title; string region; } information; //privileged: unique_pointer board; auto readPRG(n32 address, n8 data) -> n8; auto writePRG(n32 address, n8 data) -> void; auto readCHR(n32 address, n8 data = 0x00) -> n8; auto writeCHR(n32 address, n8 data) -> void; //scanline() is for debugging purposes only: //boards must detect scanline edges on their own auto scanline(n32 y) -> void; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/fc/cartridge/serialization.cpp000066400000000000000000000001441415063341600211670ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { Thread::serialize(s); if(board) s(*board); } ares-126/ares/fc/cartridge/slot.cpp000066400000000000000000000010401415063341600172670ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Famicom"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/fc/cartridge/slot.hpp000066400000000000000000000003471415063341600173050ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/fc/controller/000077500000000000000000000000001415063341600160265ustar00rootroot00000000000000ares-126/ares/fc/controller/controller.cpp000066400000000000000000000001471415063341600207170ustar00rootroot00000000000000#include namespace ares::Famicom { #include "port.cpp" #include "gamepad/gamepad.cpp" } ares-126/ares/fc/controller/controller.hpp000066400000000000000000000013631415063341600207250ustar00rootroot00000000000000// NES controller port pinout: // ____ // | \ // |(7) \ // |(2)(1)| // |(3)(5)| // |(4)(6)| // |______| // // pin name port1 port2 // 1: +5v // 2: clock $4016 read $4016.d0 write // 3: latch $4016.d0 write $4016.d0 write // 4: data0 $4016.d0 read $4017.d0 read // 5: data3 $4016.d3 read $4017.d3 read // 6: data4 $4016.d4 read $4017.d4 read // 7: gnd // The Famicom contained two hardwired controllers. // Controller Port 2 contained a microphone, but no Select or Start buttons. struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto data() -> n3 { return 0b000; } virtual auto latch(n1 data) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" ares-126/ares/fc/controller/gamepad/000077500000000000000000000000001415063341600174245ustar00rootroot00000000000000ares-126/ares/fc/controller/gamepad/gamepad.cpp000066400000000000000000000031451415063341600215310ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); b = node->append("B"); a = node->append("A"); select = node->append("Select"); start = node->append("Start"); } auto Gamepad::data() -> n3 { if(latched == 1) { platform->input(a); return a->value(); } switch(counter++) { case 0: return a->value(); case 1: return b->value(); case 2: return select->value(); case 3: return start->value(); case 4: return upLatch; case 5: return downLatch; case 6: return leftLatch; case 7: return rightLatch; } counter = 8; return 1; } auto Gamepad::latch(n1 data) -> void { if(latched == data) return; latched = data; counter = 0; if(latched == 0) { platform->input(a); platform->input(b); platform->input(select); platform->input(start); platform->input(up); platform->input(down); platform->input(left); platform->input(right); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } } ares-126/ares/fc/controller/gamepad/gamepad.hpp000066400000000000000000000010111415063341600215240ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button b; Node::Input::Button a; Node::Input::Button select; Node::Input::Button start; Gamepad(Node::Port); auto data() -> n3 override; auto latch(n1 data) -> void override; private: bool latched = 0; u32 counter = 0; bool yHold = 0; bool upLatch = 0; bool downLatch = 0; bool xHold = 0; bool leftLatch = 0; bool rightLatch = 0; }; ares-126/ares/fc/controller/port.cpp000066400000000000000000000013671415063341600175250ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Famicom"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad"}); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/fc/controller/port.hpp000066400000000000000000000010001415063341600175120ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto data() -> n3 { if(device) return device->data(); return 0b000; } auto latch(n1 data) -> void { if(device) return device->latch(data); } auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/fc/cpu/000077500000000000000000000000001415063341600144325ustar00rootroot00000000000000ares-126/ares/fc/cpu/cpu.cpp000066400000000000000000000015641415063341600157330ustar00rootroot00000000000000#include namespace ares::Famicom { CPU cpu; #include "memory.cpp" #include "timing.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { ram.allocate(2_KiB); node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { ram.reset(); debugger = {}; node = {}; } auto CPU::main() -> void { if(io.interruptPending) { debugger.interrupt("IRQ"); return interrupt(); } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::power(bool reset) -> void { MOS6502::BCD = 0; MOS6502::power(); Thread::create(system.frequency(), {&CPU::main, this}); if(!reset) { ram.fill(0xff); } PC.byte(0) = readBus(0xfffc); PC.byte(1) = readBus(0xfffd); io = {}; } } ares-126/ares/fc/cpu/cpu.hpp000066400000000000000000000031151415063341600157320ustar00rootroot00000000000000struct CPU : MOS6502, Thread { Node::Object node; Memory::Writable ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto rate() const -> u32 { return Region::PAL() ? 16 : 12; } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //memory.cpp auto readBus(n16 address) -> n8; auto writeBus(n16 address, n8 data) -> void; auto readIO(n16 address) -> n8; auto writeIO(n16 address, n8 data) -> void; auto readDebugger(n16 address) -> n8 override; auto serialize(serializer&) -> void; //timing.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto lastCycle() -> void override; auto nmi(n16& vector) -> void override; auto oamDMA() -> void; auto nmiLine(bool) -> void; auto irqLine(bool) -> void; auto apuLine(bool) -> void; auto rdyLine(bool) -> void; auto rdyAddress(bool valid, n16 value = 0) -> void; //protected: struct IO { n1 interruptPending; n1 nmiPending; n1 nmiLine; n1 irqLine; n1 apuLine; n1 rdyLine = 1; n1 rdyAddressValid; n16 rdyAddressValue; n1 oamDMAPending; n8 oamDMAPage; } io; }; extern CPU cpu; ares-126/ares/fc/cpu/debugger.cpp000066400000000000000000000016411415063341600167240ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { cpu.ram[address] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.PC)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/fc/cpu/memory.cpp000066400000000000000000000036351415063341600164550ustar00rootroot00000000000000//$0000-07ff = RAM (2KB) //$0800-1fff = RAM (mirror) //$2000-2007 = PPU //$2008-3fff = PPU (mirror) //$4000-4017 = APU + I/O //$4020-403f = FDS //$4018-ffff = Cartridge inline auto CPU::readBus(n16 address) -> n8 { n8 data = cartridge.readPRG(address, MDR); if(address <= 0x1fff) return ram.read(address); if(address <= 0x3fff) return ppu.readIO(address); if(address <= 0x4017) return cpu.readIO(address); return data; } inline auto CPU::writeBus(n16 address, n8 data) -> void { cartridge.writePRG(address, data); if(address <= 0x1fff) return ram.write(address, data); if(address <= 0x3fff) return ppu.writeIO(address, data); if(address <= 0x4017) return cpu.writeIO(address, data); } auto CPU::readIO(n16 address) -> n8 { n8 data = MDR; switch(address) { case 0x4016: { auto port1 = controllerPort1.data(); auto port3 = expansionPort.read1(); platform->input(system.controls.microphone); data.bit(0) = port1.bit(0); data.bit(1) = port3.bit(0); data.bit(2) = system.controls.microphone->value() ? random().bit(0) : 0; data.bit(3) = port1.bit(1); data.bit(4) = port1.bit(2); return data; } case 0x4017: { auto port2 = controllerPort2.data(); auto port3 = expansionPort.read2(); data.bit(0) = port3.bit(0) | port2.bit(0); data.bit(1) = port3.bit(1); data.bit(2) = port3.bit(2); data.bit(3) = port3.bit(3) | port2.bit(1); data.bit(4) = port3.bit(4) | port2.bit(2); return data; } } return apu.readIO(address); } auto CPU::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x4014: { io.oamDMAPage = data; io.oamDMAPending = 1; return; } case 0x4016: { controllerPort1.latch(data.bit(0)); controllerPort2.latch(data.bit(0)); expansionPort.write(data.bit(0,2)); return; } } return apu.writeIO(address, data); } auto CPU::readDebugger(n16 address) -> n8 { return readBus(address); } ares-126/ares/fc/cpu/serialization.cpp000066400000000000000000000004711415063341600200150ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { MOS6502::serialize(s); Thread::serialize(s); s(ram); s(io.interruptPending); s(io.nmiPending); s(io.nmiLine); s(io.irqLine); s(io.apuLine); s(io.rdyLine); s(io.rdyAddressValid); s(io.rdyAddressValue); s(io.oamDMAPending); s(io.oamDMAPage); } ares-126/ares/fc/cpu/timing.cpp000066400000000000000000000023341415063341600164270ustar00rootroot00000000000000auto CPU::read(n16 address) -> n8 { if(io.oamDMAPending) { io.oamDMAPending = 0; read(address); oamDMA(); } while(io.rdyLine == 0) { MDR = readBus(io.rdyAddressValid ? io.rdyAddressValue : address); step(rate()); } MDR = readBus(address); step(rate()); return MDR; } auto CPU::write(n16 address, n8 data) -> void { writeBus(address, MDR = data); step(rate()); } auto CPU::lastCycle() -> void { io.interruptPending = ((io.irqLine | io.apuLine) & !P.i) | io.nmiPending; } auto CPU::nmi(n16& vector) -> void { if(io.nmiPending) { io.nmiPending = false; vector = 0xfffa; } } auto CPU::oamDMA() -> void { for(u32 n : range(256)) { n8 data = read(io.oamDMAPage << 8 | n); write(0x2004, data); } } auto CPU::nmiLine(bool line) -> void { //edge-sensitive (0->1) if(!io.nmiLine && line) io.nmiPending = true; io.nmiLine = line; } auto CPU::irqLine(bool line) -> void { //level-sensitive io.irqLine = line; } auto CPU::apuLine(bool line) -> void { //level-sensitive io.apuLine = line; } auto CPU::rdyLine(bool line) -> void { io.rdyLine = line; } auto CPU::rdyAddress(bool valid, n16 value) -> void { io.rdyAddressValid = valid; io.rdyAddressValue = value; } ares-126/ares/fc/expansion/000077500000000000000000000000001415063341600156475ustar00rootroot00000000000000ares-126/ares/fc/expansion/expansion.cpp000066400000000000000000000001671415063341600203630ustar00rootroot00000000000000#include namespace ares::Famicom { #include "port.cpp" #include "family-keyboard/family-keyboard.cpp" } ares-126/ares/fc/expansion/expansion.hpp000066400000000000000000000016411415063341600203660ustar00rootroot00000000000000// Famicom expansion port pinout: // // __________________________________ // / \ // \ (01)(02)(03)(04)(05)(06)(07)(08) / // \ (09)(10)(11)(12)(13)(14)(15) / // \______________________________/ // // pin name register // 01: gnd // 02: audio // 03: irq // 04: read2.4 $4017.d4 read // 05: read2.3 $4017.d3 read // 06: read2.2 $4017.d2 read // 07: read2.1 $4017.d1 read // 08: read2.0 $4017.d0 read // 09: clock2 $4017 read // 10: write2 $4016.d2 write // 11: write1 $4016.d1 write // 12: latch $4016.d0 write // 13: read1 $4016.d1 read // 14: clock1 $4016 read // 15: +5v struct Expansion { Node::Peripheral node; virtual ~Expansion() = default; virtual auto read1() -> n1 { return 0; } virtual auto read2() -> n5 { return 0; } virtual auto write(n3 data) -> void {} }; #include "port.hpp" #include "family-keyboard/family-keyboard.hpp" ares-126/ares/fc/expansion/family-keyboard/000077500000000000000000000000001415063341600207265ustar00rootroot00000000000000ares-126/ares/fc/expansion/family-keyboard/family-keyboard.cpp000066400000000000000000000146341415063341600245210ustar00rootroot00000000000000FamilyKeyboard::FamilyKeyboard(Node::Port parent) { node = parent->append("Family Keyboard"); key.f1 = node->append("F1"); key.f2 = node->append("F2"); key.f3 = node->append("F3"); key.f4 = node->append("F4"); key.f5 = node->append("F5"); key.f6 = node->append("F6"); key.f7 = node->append("F7"); key.f8 = node->append("F8"); key.one = node->append("1"); key.two = node->append("2"); key.three = node->append("3"); key.four = node->append("4"); key.five = node->append("5"); key.six = node->append("6"); key.seven = node->append("7"); key.eight = node->append("8"); key.nine = node->append("9"); key.zero = node->append("0"); key.minus = node->append("Minus"); key.power = node->append("^"); key.yen = node->append("Yen"); key.stop = node->append("Stop"); key.escape = node->append("Escape"); key.q = node->append("Q"); key.w = node->append("W"); key.e = node->append("E"); key.r = node->append("R"); key.t = node->append("T"); key.y = node->append("Y"); key.u = node->append("U"); key.i = node->append("I"); key.o = node->append("O"); key.p = node->append("P"); key.at = node->append("@"); key.lbrace = node->append("["); key.enter = node->append("Return"); key.control = node->append("Control"); key.a = node->append("A"); key.s = node->append("S"); key.d = node->append("D"); key.f = node->append("F"); key.g = node->append("G"); key.h = node->append("H"); key.j = node->append("J"); key.k = node->append("K"); key.l = node->append("L"); key.semicolon = node->append(";"); key.colon = node->append(":"); key.rbrace = node->append("]"); key.kana = node->append("Kana"); key.lshift = node->append("Left Shift"); key.z = node->append("Z"); key.x = node->append("X"); key.c = node->append("C"); key.v = node->append("V"); key.b = node->append("B"); key.n = node->append("N"); key.m = node->append("M"); key.comma = node->append(","); key.period = node->append("."); key.slash = node->append("/"); key.underscore = node->append("_"); key.rshift = node->append("Right Shift"); key.graph = node->append("Graph"); key.spacebar = node->append("Spacebar"); key.home = node->append("Home"); key.insert = node->append("Insert"); key.backspace = node->append("Delete"); key.up = node->append("Up"); key.down = node->append("Down"); key.left = node->append("Left"); key.right = node->append("Right"); } auto FamilyKeyboard::read1() -> n1 { n1 data; //data recorder (unsupported) return data; } auto FamilyKeyboard::read2() -> n5 { if(!latch.bit(2)) return 0b00000; #define poll(id, name) \ platform->input(key.name); \ data.bit(id) = !key.name->value(); n5 data; switch(row << 1 | column) { case 0: poll(1, f8); poll(2, enter); poll(3, lbrace); poll(4, rbrace); break; case 1: poll(1, kana); poll(2, rshift); poll(3, yen); poll(4, stop); break; case 2: poll(1, f7); poll(2, at); poll(3, colon); poll(4, semicolon); break; case 3: poll(1, underscore); poll(2, slash); poll(3, minus); poll(4, power); break; case 4: poll(1, f6); poll(2, o); poll(3, l); poll(4, k); break; case 5: poll(1, period); poll(2, comma); poll(3, p); poll(4, zero); break; case 6: poll(1, f5); poll(2, i); poll(3, u); poll(4, j); break; case 7: poll(1, m); poll(2, n); poll(3, nine); poll(4, eight); break; case 8: poll(1, f4); poll(2, y); poll(3, g); poll(4, h); break; case 9: poll(1, b); poll(2, v); poll(3, seven); poll(4, six); break; case 10: poll(1, f3); poll(2, t); poll(3, r); poll(4, d); break; case 11: poll(1, f); poll(2, c); poll(3, five); poll(4, four); break; case 12: poll(1, f2); poll(2, w); poll(3, s); poll(4, a); break; case 13: poll(1, x); poll(2, z); poll(3, e); poll(4, three); break; case 14: poll(1, f1); poll(2, escape); poll(3, q); poll(4, control); break; case 15: poll(1, lshift); poll(2, graph); poll(3, one); poll(4, two); break; case 16: poll(1, home); poll(2, up); poll(3, right); poll(4, left); break; case 17: poll(1, down); poll(2, spacebar); poll(3, backspace); poll(4, insert); break; case 18: //device detection ID case 19: //device detection ID data = 0x1e; break; } #undef poll return data; } auto FamilyKeyboard::write(n3 data) -> void { latch = data; if(column && !latch.bit(1)) row = (row + 1) % 10; column = latch.bit(1); if(latch.bit(0)) row = 0; } ares-126/ares/fc/expansion/family-keyboard/family-keyboard.hpp000066400000000000000000000014531415063341600245210ustar00rootroot00000000000000struct FamilyKeyboard : Expansion { struct Key { Node::Input::Button f1, f2, f3, f4, f5, f6, f7, f8; Node::Input::Button one, two, three, four, five, six, seven, eight, nine, zero, minus, power, yen, stop; Node::Input::Button escape, q, w, e, r, t, y, u, i, o, p, at, lbrace, enter; Node::Input::Button control, a, s, d, f, g, h, j, k, l, semicolon, colon, rbrace, kana; Node::Input::Button lshift, z, x, c, v, b, n, m, comma, period, slash, underscore, rshift; Node::Input::Button graph, spacebar; Node::Input::Button home, insert, backspace; Node::Input::Button up, down, left, right; } key; FamilyKeyboard(Node::Port); auto read1() -> n1 override; auto read2() -> n5 override; auto write(n3 data) -> void override; private: n3 latch; n1 column; n4 row; }; ares-126/ares/fc/expansion/port.cpp000066400000000000000000000013221415063341600173350ustar00rootroot00000000000000ExpansionPort expansionPort{"Expansion Port"}; ExpansionPort::ExpansionPort(string name) : name(name) { } auto ExpansionPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Famicom"); port->setType("Expansion"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Family Keyboard"}); } auto ExpansionPort::unload() -> void { device.reset(); port.reset(); } auto ExpansionPort::allocate(string name) -> Node::Peripheral { if(name == "Family Keyboard") device = new FamilyKeyboard(port); if(device) return device->node; return {}; } auto ExpansionPort::serialize(serializer& s) -> void { } ares-126/ares/fc/expansion/port.hpp000066400000000000000000000010271415063341600173440ustar00rootroot00000000000000struct ExpansionPort { Node::Port port; unique_pointer device; ExpansionPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto read1() -> n1 { if(device) return device->read1(); return 0; } auto read2() -> n5 { if(device) return device->read2(); return 0; } auto write(n3 data) -> void { if(device) return device->write(data); } auto serialize(serializer&) -> void; const string name; }; extern ExpansionPort expansionPort; ares-126/ares/fc/fc.hpp000066400000000000000000000014461415063341600147510ustar00rootroot00000000000000#pragma once //started: 2011-09-05 #include #include #include #include #include namespace ares::Famicom { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Region { static inline auto NTSCJ() -> bool; static inline auto NTSCU() -> bool; static inline auto PAL() -> bool; }; #include #include #include #include #include #include #include #include } ares-126/ares/fc/fds/000077500000000000000000000000001415063341600144175ustar00rootroot00000000000000ares-126/ares/fc/fds/audio.cpp000066400000000000000000000114651415063341600162330ustar00rootroot00000000000000auto FDSAudio::Operator::clockEnvelope() -> bool { if(envelope && masterSpeed > 0 && !--period) { reloadPeriod(); if(direction && gain < 32) { gain++; } else if(!direction && gain > 0) { gain--; } return true; } return false; } auto FDSAudio::Operator::reloadPeriod() -> void { period = 8 * (1 + speed) * masterSpeed; } // auto FDSAudio::Modulator::enabled() -> bool { return !disabled && frequency > 0; } auto FDSAudio::Modulator::clockModulator() -> bool { if(enabled()) { overflow += frequency; if(overflow < frequency) { //overflow occurred static const i32 lookup[8] = {0, 1, 2, 4, -8, -4, -2, -1}; i32 offset = lookup[table.data[table.index++]]; updateCounter(offset == -8 ? 0 : counter + offset); return true; } } return false; } auto FDSAudio::Modulator::updateOutput(n16 pitch) -> void { output = counter * gain; i32 remainder = output.bit(0,3); output >>= 4; if(remainder > 0 && !output.bit(7)) output += counter < 0 ? -1 : 2; if(output >= 192) { output -= 256; } else if(output < -64) { output += 256; } output *= pitch; remainder = output.bit(0,5); output >>= 6; if(remainder >= 32) output++; } auto FDSAudio::Modulator::updateCounter(i8 value) -> void { counter = value; if(counter >= 64) { counter -= 128; } else if(counter < -64) { counter += 128; } } // auto FDSAudio::load(Node::Object parent) -> void { stream = parent->append("FDS"); stream->setChannels(1); stream->setFrequency(u32(system.frequency() + 0.5) / cpu.rate()); } auto FDSAudio::unload() -> void { stream = {}; } auto FDSAudio::clock() -> void { if(!enable) return stream->frame(0.0); i32 frequency = carrier.frequency; if(envelopes && !waveform.halt) { carrier.clockEnvelope(); if(modulator.clockEnvelope()) { modulator.updateOutput(frequency); } } if(modulator.clockModulator()) { modulator.updateOutput(frequency); } if(waveform.halt) { waveform.index = 0; updateOutput(); } else { updateOutput(); if(frequency + modulator.output > 0 && !waveform.writable) { waveform.overflow += frequency + modulator.output; if(waveform.overflow < frequency + modulator.output) { waveform.index++; } } } } auto FDSAudio::updateOutput() -> void { static constexpr u32 lookup[4] = {36, 24, 17, 14}; i32 level = min(carrier.gain, 32) * lookup[masterVolume]; n8 output = waveform.data[waveform.index] * level / 1152; stream->frame(output / 255.0 * 0.5); } auto FDSAudio::read(n16 address, n8 data) -> n8 { if(!enable) return data; if(address >= 0x4040 && address <= 0x407f) { data.bit(0,5) = waveform.data[(n6)address]; return data; } switch(address) { case 0x4090: data.bit(0,5) = carrier.gain; return data; case 0x4092: data.bit(0,5) = modulator.gain; return data; } return data; } auto FDSAudio::write(n16 address, n8 data) -> void { if(!enable && address != 0x4025) return; if(address >= 0x4040 && address <= 0x407f && waveform.writable) { waveform.data[(n6)address] = data.bit(0,5); return; } switch(address) { case 0x4025: enable = data.bit(1); return; case 0x4080: carrier.speed = data.bit(0,5); carrier.direction = data.bit(6); carrier.envelope = !data.bit(7); if(!carrier.envelope) carrier.gain = carrier.speed; carrier.reloadPeriod(); return; case 0x4082: carrier.frequency.bit(0,7) = data.bit(0,7); return; case 0x4083: carrier.frequency.bit(8,11) = data.bit(0,3); envelopes = !data.bit(6); waveform.halt = data.bit(7); if(!envelopes) { carrier.reloadPeriod(); modulator.reloadPeriod(); } return; case 0x4084: modulator.speed = data.bit(0,5); modulator.direction = data.bit(6); modulator.envelope = !data.bit(7); if(!modulator.envelope) modulator.gain = modulator.speed; modulator.reloadPeriod(); return; case 0x4085: modulator.updateCounter(data.bit(0,6)); return; case 0x4086: modulator.frequency.bit(0,7) = data.bit(0,7); return; case 0x4087: modulator.frequency.bit(8,11) = data.bit(0,3); modulator.disabled = data.bit(7); if(modulator.disabled) modulator.overflow = 0; modulator.reloadPeriod(); return; case 0x4088: if(!modulator.disabled) return; modulator.table.data[modulator.table.index++] = data.bit(0,2); modulator.table.data[modulator.table.index++] = data.bit(0,2); return; case 0x4089: masterVolume = data.bit(0,1); waveform.writable = data.bit(7); return; case 0x408a: carrier.masterSpeed = data; modulator.masterSpeed = data; return; } } auto FDSAudio::power() -> void { enable = 0; envelopes = 0; masterVolume = 0; carrier = {}; modulator = {}; waveform = {}; } ares-126/ares/fc/fds/audio.hpp000066400000000000000000000022641415063341600162350ustar00rootroot00000000000000struct FDSAudio { Node::Audio::Stream stream; auto load(Node::Object) -> void; auto unload() -> void; auto clock() -> void; auto updateOutput() -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Operator { auto clockEnvelope() -> bool; auto reloadPeriod() -> void; n8 masterSpeed = 0xff; n6 speed; n6 gain; n1 direction; //0 = decrease, 1 = increase n1 envelope; //0 = disable, 1 = enable n12 frequency; n32 period; }; struct Modulator : Operator { auto enabled() -> bool; auto clockModulator() -> bool; auto updateOutput(n16 pitch) -> void; auto updateCounter(i8 value) -> void; struct Table { n3 data[64]; n6 index; }; n1 disabled; i8 counter; n16 overflow; i32 output; Table table; }; struct Waveform { n1 halt; n1 writable; n16 overflow; n6 data[64]; n6 index; }; n1 enable; n1 envelopes; //0 = disable, 1 = enable n2 masterVolume; Operator carrier; Modulator modulator; Waveform waveform; }; ares-126/ares/fc/fds/drive.cpp000066400000000000000000000071711415063341600162420ustar00rootroot00000000000000auto FDSDrive::clock() -> void { if(changing) return change(); if(!power) return; if(!ready) return powerup(); if(rewinding) return rewind(); if(scanning) return advance(); } //presume it takes roughly half a second to eject a disk and insert the other side auto FDSDrive::change() -> void { if(++counter >= 960000) { counter = 0; changing = 0; } } //presume that it takes time for the drive motor to power up after being turned on auto FDSDrive::powerup() -> void { if(++counter >= 1600) { counter = 0; ready = 1; rewinding = 1; scanning = 0; } } //presume it takes time to move the drive head back to the beginning of the disk //the further into the disk the head is, the longer it should take to reach the beginning again auto FDSDrive::rewind() -> void { if(offset && ++counter >= 16) { counter = 0; offset--; } if(offset == 0) { rewinding = 0; completed = 0; scanning = scan; } } //move the disk head periodically auto FDSDrive::advance() -> void { if(++counter >= 160) { counter = 0; if(reading) { read(); } else { write(); } //has the end of the disk been reached? if(offset >= fds.inserted->size()) { rewinding = 1; scanning = 0; completed = 1; } } } auto FDSDrive::crc(n8 data) -> void { for(u32 index : range(8)) { bool carry = crc16.bit(0); crc16 = crc16 >> 1 | data.bit(index) << 15; if(carry) crc16 ^= 0x8408; } } //read data from the disk auto FDSDrive::read() -> void { data = fds.inserted->read(offset++); if(clearCRC) return (void)(gap = 1); if(gap) { gap = !data.bit(7); } else { pending = 1; fds.poll(); } if(!gap) crc(data); } //write data to the disk auto FDSDrive::write() -> void { if(clearCRC) { //in write mode, this causes a stream of 0x00s to be written to the disk instead fds.inserted->write(offset++, 0x00); crc16 = 0; return; } if(writeCRC) { fds.inserted->write(offset++, crc16); crc16 >>= 8; } else { fds.inserted->write(offset++, data); crc(data); } available = 1; pending = 1; fds.poll(); } auto FDSDrive::read(n16 address, n8 data) -> n8 { switch(address) { case 0x4030: data.bit(1) = pending; data.bit(4) = (bool)crc16; //invalidCRC; data.bit(6) = completed; data.bit(7) = available; pending = 0; fds.poll(); return data; case 0x4031: data = this->data; pending = 0; available = 0; fds.poll(); return data; case 0x4032: data.bit(0) = !fds.inserted || changing; //0 = disk inserted, 1 = disk not inserted data.bit(1) = !scan || !scanning; //0 = disk ready, 1 = disk not ready data.bit(2) = !fds.inserted || changing; //0 = not write protected, 1 = write protected data.bit(6) = 1; //unknown purpose return data; case 0x4033: data.bit(7) = 1; //0 = battery voltage low, 1 = battery good return data; } return data; } auto FDSDrive::write(n16 address, n8 data) -> void { switch(address) { case 0x4023: enable = data.bit(0); return; case 0x4024: pending = 0; fds.poll(); if(!enable) return; this->data = data; available = 0; return; case 0x4025: pending = 0; fds.poll(); if(!enable) return; if(!power && data.bit(0)) ready = 0; if(!writeCRC && data.bit(4) && !data.bit(2)) crc(0x00), crc(0x00); power = data.bit(0); scan =!data.bit(1); reading = data.bit(2); writeCRC = data.bit(4); clearCRC =!data.bit(6); irq = data.bit(7); if(!power) rewinding = 0; if(clearCRC) crc16 = 0; return; } } ares-126/ares/fc/fds/drive.hpp000066400000000000000000000012231415063341600162370ustar00rootroot00000000000000struct FDSDrive { auto clock() -> void; auto change() -> void; auto powerup() -> void; auto rewind() -> void; auto advance() -> void; auto crc(n8 data) -> void; auto read() -> void; auto write() -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 enable; n1 power; n1 changing; n1 ready; n1 scan; n1 rewinding; n1 scanning; n1 reading; //0 = writing n1 writeCRC; n1 clearCRC; n1 irq; n1 pending; n1 available; n32 counter; n32 offset; n1 gap; n8 data; n1 completed; n16 crc16; }; ares-126/ares/fc/fds/fds.cpp000066400000000000000000000066271415063341600157120ustar00rootroot00000000000000#include namespace ares::Famicom { FDS fds; #include "drive.cpp" #include "timer.cpp" #include "audio.cpp" #include "serialization.cpp" auto FDS::load(Node::Object parent) -> void { port = parent->append("Disk Slot"); port->setFamily("Famicom Disk"); port->setType("Floppy Disk"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(port); }); port->setConnect([&] { return connect(); }); port->setDisconnect([&] { return disconnect(); }); audio.load(parent); power(); } auto FDS::unload() -> void { audio.unload(); disconnect(); port = {}; disk1.sideA.reset(); disk1.sideB.reset(); disk2.sideA.reset(); disk2.sideB.reset(); inserted.reset(); inserting.reset(); changed = 0; } auto FDS::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append("Famicom Disk"); } auto FDS::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); state = node->append("State", "Ejected", [&](auto value) { change(value); }); vector states = {"Ejected"}; if(auto fp = pak->read("disk1.sideA")) { disk1.sideA.allocate(fp->size()); disk1.sideA.load(fp); states.append("Disk 1: Side A"); } if(auto fp = pak->read("disk1.sideB")) { disk1.sideB.allocate(fp->size()); disk1.sideB.load(fp); states.append("Disk 1: Side B"); } if(auto fp = pak->read("disk2.sideA")) { disk2.sideA.allocate(fp->size()); disk2.sideA.load(fp); states.append("Disk 2: Side A"); } if(auto fp = pak->read("disk2.sideB")) { disk2.sideB.allocate(fp->size()); disk2.sideB.load(fp); states.append("Disk 2: Side B"); } state->setAllowedValues(states); state->setDynamic(true); change(state->value()); } auto FDS::disconnect() -> void { if(!node) return; if(disk1.sideA) if(auto fp = pak->write("disk1.sideA")) { disk1.sideA.save(fp); } if(disk1.sideB) if(auto fp = pak->write("disk1.sideB")) { disk1.sideB.save(fp); } if(disk2.sideA) if(auto fp = pak->write("disk2.sideA")) { disk2.sideA.save(fp); } if(disk2.sideB) if(auto fp = pak->write("disk2.sideB")) { disk2.sideB.save(fp); } pak.reset(); node.reset(); } auto FDS::change(string value) -> void { //this setting can be changed even when the system is not powered on if(state) state->setLatch(); inserting.reset(); if(value == "Disk 1: Side A") inserting = disk1.sideA; if(value == "Disk 1: Side B") inserting = disk1.sideB; if(value == "Disk 2: Side A") inserting = disk2.sideA; if(value == "Disk 2: Side B") inserting = disk2.sideB; changed = 1; } auto FDS::change() -> void { if(changed) { changed = 0; inserted = inserting; inserting.reset(); drive.changing = 1; } } auto FDS::poll() -> void { cpu.irqLine((timer.irq && timer.pending) || (drive.irq && drive.pending)); } auto FDS::main() -> void { change(); drive.clock(); audio.clock(); timer.clock(); } auto FDS::power() -> void { change(); audio.power(); } auto FDS::read(n16 address, n8 data) -> n8 { data = drive.read(address, data); data = timer.read(address, data); data = audio.read(address, data); return data; } auto FDS::write(n16 address, n8 data) -> void { drive.write(address, data); timer.write(address, data); audio.write(address, data); } } ares-126/ares/fc/fds/fds.hpp000066400000000000000000000020711415063341600157040ustar00rootroot00000000000000//Famicom Disk System #include "drive.hpp" #include "timer.hpp" #include "audio.hpp" struct FDS { Node::Port port; Node::Peripheral node; Node::Setting::String state; VFS::Pak pak; n1 present; auto title() const -> string { return information.title; } struct Disk { Memory::Writable sideA; Memory::Writable sideB; }; Disk disk1; Disk disk2; maybe&> inserting; maybe&> inserted; n1 changed; //fds.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto change(string value) -> void; auto change() -> void; auto poll() -> void; auto main() -> void; auto power() -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: FDSDrive drive; FDSTimer timer; FDSAudio audio; struct Information { string title; } information; }; extern FDS fds; ares-126/ares/fc/fds/serialization.cpp000066400000000000000000000022721415063341600200030ustar00rootroot00000000000000auto FDS::serialize(serializer& s) -> void { s(drive); s(timer); s(audio); } auto FDSDrive::serialize(serializer& s) -> void { s(enable); s(power); s(changing); s(ready); s(scan); s(rewinding); s(scanning); s(reading); s(writeCRC); s(clearCRC); s(irq); s(pending); s(available); s(counter); s(offset); s(gap); s(data); s(completed); s(crc16); } auto FDSTimer::serialize(serializer& s) -> void { s(enable); s(counter); s(period); s(repeat); s(irq); s(pending); } auto FDSAudio::serialize(serializer& s) -> void { s(enable); s(envelopes); s(masterVolume); s(carrier.masterSpeed); s(carrier.speed); s(carrier.gain); s(carrier.direction); s(carrier.envelope); s(carrier.frequency); s(carrier.period); s(modulator.masterSpeed); s(modulator.speed); s(modulator.gain); s(modulator.direction); s(modulator.envelope); s(modulator.frequency); s(modulator.period); s(modulator.disabled); s(modulator.counter); s(modulator.overflow); s(modulator.output); s(modulator.table.data); s(modulator.table.index); s(waveform.halt); s(waveform.writable); s(waveform.overflow); s(waveform.data); s(waveform.index); } ares-126/ares/fc/fds/timer.cpp000066400000000000000000000014271415063341600162470ustar00rootroot00000000000000auto FDSTimer::clock() -> void { if(enable && !--counter) { pending = 1; fds.poll(); if(repeat) counter = period; irq &= repeat; } } auto FDSTimer::read(n16 address, n8 data) -> n8 { switch(address) { case 0x4030: data.bit(0) = pending; pending = 0; fds.poll(); return data; } return data; } auto FDSTimer::write(n16 address, n8 data) -> void { switch(address) { case 0x4020: period.byte(0) = data; return; case 0x4021: period.byte(1) = data; return; case 0x4022: if(!enable) return; repeat = data.bit(0); irq = data.bit(1); if(irq) { counter = period; } else { pending = 0; } return; case 0x4025: enable = data.bit(0); if(!enable) pending = 0; return; } } ares-126/ares/fc/fds/timer.hpp000066400000000000000000000004241415063341600162500ustar00rootroot00000000000000struct FDSTimer { auto clock() -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 enable; n16 counter; n16 period; n1 repeat; n1 irq; n1 pending; }; ares-126/ares/fc/ppu/000077500000000000000000000000001415063341600144475ustar00rootroot00000000000000ares-126/ares/fc/ppu/color.cpp000066400000000000000000000026741415063341600163020ustar00rootroot00000000000000auto PPU::color(n32 n) -> n64 { f64 saturation = 2.0; f64 hue = 0.0; f64 contrast = 1.0; f64 brightness = 1.0; f64 gamma = colorEmulation->value() ? 1.8 : 2.2; i32 color = (n & 0x0f), level = color < 0xe ? int(n >> 4 & 3) : 1; static constexpr f64 black = 0.518, white = 1.962, attenuation = 0.746; static constexpr f64 levels[8] = { 0.350, 0.518, 0.962, 1.550, 1.094, 1.506, 1.962, 1.962, }; f64 lo_and_hi[2] = { levels[level + 4 * (color == 0x0)], levels[level + 4 * (color < 0xd)], }; f64 y = 0.0, i = 0.0, q = 0.0; auto wave = [](i32 p, i32 color) { return (color + p + 8) % 12 < 6; }; for(int p : range(12)) { f64 spot = lo_and_hi[wave(p, color)]; if(((n & 0x040) && wave(p, 12)) || ((n & 0x080) && wave(p, 4)) || ((n & 0x100) && wave(p, 8)) ) spot *= attenuation; f64 v = (spot - black) / (white - black); v = (v - 0.5) * contrast + 0.5; v *= brightness / 12.0; y += v; i += v * cos((Math::Pi / 6.0) * (p + hue)); q += v * sin((Math::Pi / 6.0) * (p + hue)); } i *= saturation; q *= saturation; auto gammaAdjust = [=](f64 f) { return f < 0.0 ? 0.0 : pow(f, 2.2 / gamma); }; n64 r = uclamp<16>(65535.0 * gammaAdjust(y + 0.946882 * i + 0.623557 * q)); n64 g = uclamp<16>(65535.0 * gammaAdjust(y + -0.274788 * i + -0.635691 * q)); n64 b = uclamp<16>(65535.0 * gammaAdjust(y + -1.108545 * i + 1.709007 * q)); return r << 32 | g << 16 | b << 0; } ares-126/ares/fc/ppu/debugger.cpp000066400000000000000000000020271415063341600167400ustar00rootroot00000000000000auto PPU::Debugger::load(Node::Object parent) -> void { memory.ciram = parent->append("PPU CIRAM"); memory.ciram->setSize(ppu.ciram.size()); memory.ciram->setRead([&](u32 address) -> u8 { return ppu.ciram[address]; }); memory.ciram->setWrite([&](u32 address, u8 data) -> void { ppu.ciram[address] = data; }); memory.cgram = parent->append("PPU CGRAM"); memory.cgram->setSize(ppu.cgram.size()); memory.cgram->setRead([&](u32 address) -> u8 { return ppu.cgram[address]; }); memory.cgram->setWrite([&](u32 address, u8 data) -> void { ppu.cgram[address] = data; }); memory.oam = parent->append("PPU OAM"); memory.oam->setSize(ppu.oam.size()); memory.oam->setRead([&](u32 address) -> u8 { return ppu.oam[address]; }); memory.oam->setWrite([&](u32 address, u8 data) -> void { ppu.oam[address] = data; }); } auto PPU::Debugger::unload() -> void { memory.ciram.reset(); memory.cgram.reset(); memory.oam.reset(); } ares-126/ares/fc/ppu/memory.cpp000066400000000000000000000062211415063341600164640ustar00rootroot00000000000000auto PPU::readCIRAM(n11 address) -> n8 { return ciram[address]; } auto PPU::writeCIRAM(n11 address, n8 data) -> void { ciram[address] = data; } auto PPU::readCGRAM(n5 address) -> n8 { if((address & 0x13) == 0x10) address &= ~0x10; n8 data = cgram[address]; if(io.grayscale) data &= 0x30; return data; } auto PPU::writeCGRAM(n5 address, n8 data) -> void { if((address & 0x13) == 0x10) address &= ~0x10; cgram[address] = data; } auto PPU::readIO(n16 address) -> n8 { n8 result = 0x00; switch(address.bit(0,2)) { //PPUSTATUS case 2: result |= io.mdr.bit(0,4); result |= io.spriteOverflow << 5; result |= io.spriteZeroHit << 6; result |= io.nmiFlag << 7; io.v.latch = 0; io.nmiHold = 0; cpu.nmiLine(io.nmiFlag = 0); break; //OAMDATA case 4: result = oam[io.oamAddress]; break; //PPUDATA case 7: if(enable() && (io.ly <= 240 || io.ly == 261)) return 0x00; address = (n14)io.v.address; if(address <= 0x1fff) { result = io.busData; io.busData = cartridge.readCHR(address); } else if(address <= 0x3eff) { result = io.busData; io.busData = cartridge.readCHR(address); } else if(address <= 0x3fff) { result = readCGRAM(address); io.busData = cartridge.readCHR(address); } io.v.address += io.vramIncrement; break; } return result; } auto PPU::writeIO(n16 address, n8 data) -> void { io.mdr = data; switch(address.bit(0,2)) { //PPUCTRL case 0: io.t.nametable = data.bit(0,1); io.vramIncrement = data.bit(2) ? 32 : 1; io.spriteAddress = data.bit(3) ? 0x1000 : 0x0000; io.bgAddress = data.bit(4) ? 0x1000 : 0x0000; io.spriteHeight = data.bit(5) ? 16 : 8; io.masterSelect = data.bit(6); io.nmiEnable = data.bit(7); cpu.nmiLine(io.nmiEnable && io.nmiHold && io.nmiFlag); break; //PPUMASK case 1: io.grayscale = data.bit(0); io.bgEdgeEnable = data.bit(1); io.spriteEdgeEnable = data.bit(2); io.bgEnable = data.bit(3); io.spriteEnable = data.bit(4); io.emphasis = data.bit(5,7); break; //PPUSTATUS case 2: break; //OAMADDR case 3: io.oamAddress = data; break; //OAMDATA case 4: if(io.oamAddress.bit(0,1) == 2) data.bit(2,4) = 0; //clear non-existent bits (always read back as 0) oam[io.oamAddress++] = data; break; //PPUSCROLL case 5: if(io.v.latch++ == 0) { io.v.fineX = data.bit(0,2); io.t.tileX = data.bit(3,7); } else { io.t.fineY = data.bit(0,2); io.t.tileY = data.bit(3,7); } break; //PPUADDR case 6: if(io.v.latch++ == 0) { io.t.addressHi = data.bit(0,5); } else { io.t.addressLo = data.bit(0,7); io.v.address = io.t.address; } break; //PPUDATA case 7: if(enable() && (io.ly <= 240 || io.ly == 261)) return; address = (n14)io.v.address; if(address <= 0x1fff) { cartridge.writeCHR(address, data); } else if(address <= 0x3eff) { cartridge.writeCHR(address, data); } else if(address <= 0x3fff) { writeCGRAM(address, data); } io.v.address += io.vramIncrement; break; } } ares-126/ares/fc/ppu/ppu.cpp000066400000000000000000000045711415063341600157660ustar00rootroot00000000000000#include namespace ares::Famicom { PPU ppu; #include "memory.cpp" #include "render.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto PPU::load(Node::Object parent) -> void { ciram.allocate(2048); cgram.allocate(32); oam.allocate(256); node = parent->append("PPU"); screen = node->append("Screen", 256, 240); screen->colors(1 << 9, {&PPU::color, this}); screen->setSize(256, 240); screen->setScale(1.0, 1.0); screen->setAspect(8.0, 7.0); overscan = screen->append("Overscan", true, [&](auto value) { if(value == 0) screen->setSize(256, 224); if(value == 1) screen->setSize(256, 240); }); overscan->setDynamic(true); colorEmulation = screen->append("Color Emulation", true, [&](auto value) { screen->resetPalette(); }); colorEmulation->setDynamic(true); debugger.load(node); } auto PPU::unload() -> void { screen->quit(); node->remove(screen); debugger.unload(); colorEmulation.reset(); overscan.reset(); screen.reset(); node.reset(); ciram.reset(); cgram.reset(); oam.reset(); } auto PPU::main() -> void { renderScanline(); } auto PPU::step(u32 clocks) -> void { u32 L = vlines(); while(clocks--) { if(io.ly == 240 && io.lx == 340) io.nmiHold = 1; if(io.ly == 241 && io.lx == 0) io.nmiFlag = io.nmiHold; if(io.ly == 241 && io.lx == 2) cpu.nmiLine(io.nmiEnable && io.nmiFlag); if(io.ly == L-2 && io.lx == 340) io.spriteZeroHit = 0, io.spriteOverflow = 0; if(io.ly == L-2 && io.lx == 340) io.nmiHold = 0; if(io.ly == L-1 && io.lx == 0) io.nmiFlag = io.nmiHold; if(io.ly == L-1 && io.lx == 2) cpu.nmiLine(io.nmiEnable && io.nmiFlag); Thread::step(rate()); Thread::synchronize(cpu); io.lx++; } } auto PPU::scanline() -> void { io.lx = 0; if(++io.ly == vlines()) { io.ly = 0; frame(); } cartridge.scanline(io.ly); } auto PPU::frame() -> void { io.field++; if(overscan->value() == 0) screen->setViewport(0, 8, 256, 224); if(overscan->value() == 1) screen->setViewport(0, 0, 256, 240); screen->frame(); scheduler.exit(Event::Frame); } auto PPU::power(bool reset) -> void { Thread::create(system.frequency(), {&PPU::main, this}); screen->power(); if(!reset) { ciram.fill(); cgram.fill(); oam.fill(); } io = {}; } } ares-126/ares/fc/ppu/ppu.hpp000066400000000000000000000056251415063341600157740ustar00rootroot00000000000000struct PPU : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean overscan; Node::Setting::Boolean colorEmulation; Memory::Writable ciram; Memory::Writable cgram; Memory::Writable oam; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload() -> void; struct Memory { Node::Debugger::Memory ciram; Node::Debugger::Memory cgram; Node::Debugger::Memory oam; } memory; } debugger; auto rate() const -> u32 { return Region::PAL() ? 5 : 4; } auto vlines() const -> u32 { return Region::PAL() ? 312 : 262; } //ppu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto scanline() -> void; auto frame() -> void; auto power(bool reset) -> void; //memory.cpp auto readCIRAM(n11 address) -> n8; auto writeCIRAM(n11 address, n8 data) -> void; auto readCGRAM(n5 address) -> n8; auto writeCGRAM(n5 address, n8 data) -> void; auto readIO(n16 address) -> n8; auto writeIO(n16 address, n8 data) -> void; //render.cpp auto enable() const -> bool; auto loadCHR(n16 address) -> n8; auto renderPixel() -> void; auto renderSprite() -> void; auto renderScanline() -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; struct IO { //internal n8 mdr; n1 field; n16 lx; n16 ly; n8 busData; struct Union { n19 data; BitRange<19, 0, 4> tileX {&data}; BitRange<19, 5, 9> tileY {&data}; BitRange<19,10,11> nametable {&data}; BitRange<19,10,10> nametableX{&data}; BitRange<19,11,11> nametableY{&data}; BitRange<19,12,14> fineY {&data}; BitRange<19, 0,14> address {&data}; BitRange<19, 0, 7> addressLo {&data}; BitRange<19, 8,14> addressHi {&data}; BitRange<19,15,15> latch {&data}; BitRange<19,16,18> fineX {&data}; } v, t; n1 nmiHold; n1 nmiFlag; //$2000 n6 vramIncrement = 1; //1 or 32 n16 spriteAddress; //0x0000 or 0x1000 n16 bgAddress; //0x0000 or 0x1000 n5 spriteHeight = 8; //8 or 16 n1 masterSelect; n1 nmiEnable; //$2001 n1 grayscale; n1 bgEdgeEnable; n1 spriteEdgeEnable; n1 bgEnable; n1 spriteEnable; n3 emphasis; //$2002 n1 spriteOverflow; n1 spriteZeroHit; //$2003 n8 oamAddress; } io; struct OAM { //serialization.cpp auto serialize(serializer&) -> void; n8 id = 64; n8 y = 0xff; n8 tile = 0xff; n8 attr = 0xff; n8 x = 0xff; n8 tiledataLo; n8 tiledataHi; }; struct Latches { n16 nametable; n16 attribute; n16 tiledataLo; n16 tiledataHi; n16 oamIterator; n16 oamCounter; OAM oam[8]; //primary OAM soam[8]; //secondary } latch; }; extern PPU ppu; ares-126/ares/fc/ppu/render.cpp000066400000000000000000000130431415063341600164330ustar00rootroot00000000000000auto PPU::enable() const -> bool { return io.bgEnable || io.spriteEnable; } auto PPU::loadCHR(n16 address) -> n8 { return enable() ? cartridge.readCHR(address) : (n8)0x00; } auto PPU::renderPixel() -> void { //todo: renderPixel() is called when Y=261 ... why? if(io.ly >= screen->canvasHeight()) return; auto output = screen->pixels().data() + io.ly * 256; u32 x = io.lx - 1; u32 mask = 0x8000 >> (io.v.fineX + (x & 7)); u32 palette = 0; u32 objectPalette = 0; bool objectPriority = 0; palette |= latch.tiledataLo & mask ? 1 : 0; palette |= latch.tiledataHi & mask ? 2 : 0; if(palette) { u32 attr = latch.attribute; if(mask >= 256) attr >>= 2; palette |= (attr & 3) << 2; } if(!io.bgEnable) palette = 0; if(!io.bgEdgeEnable && x < 8) palette = 0; if(io.spriteEnable) for(i32 sprite = 7; sprite >= 0; sprite--) { if(!io.spriteEdgeEnable && x < 8) continue; if(latch.oam[sprite].id == 64) continue; u32 spriteX = x - latch.oam[sprite].x; if(spriteX >= 8) continue; if(latch.oam[sprite].attr & 0x40) spriteX ^= 7; u32 mask = 0x80 >> spriteX; u32 spritePalette = 0; spritePalette |= latch.oam[sprite].tiledataLo & mask ? 1 : 0; spritePalette |= latch.oam[sprite].tiledataHi & mask ? 2 : 0; if(spritePalette == 0) continue; if(latch.oam[sprite].id == 0 && palette && x != 255) io.spriteZeroHit = 1; spritePalette |= (latch.oam[sprite].attr & 3) << 2; objectPriority = latch.oam[sprite].attr & 0x20; objectPalette = 16 + spritePalette; } if(objectPalette) { if(palette == 0 || objectPriority == 0) palette = objectPalette; } if(!enable()) palette = 0; output[x] = io.emphasis << 6 | readCGRAM(palette); } auto PPU::renderSprite() -> void { if(!enable()) return; u32 n = latch.oamIterator++; s32 ly = io.ly == vlines() - 1 ? -1 : (s32)io.ly; u32 y = ly - oam[n * 4 + 0]; if(y >= io.spriteHeight) return; if(latch.oamCounter == 8) { io.spriteOverflow = 1; return; } auto& o = latch.soam[latch.oamCounter++]; o.id = n; o.y = oam[n * 4 + 0]; o.tile = oam[n * 4 + 1]; o.attr = oam[n * 4 + 2]; o.x = oam[n * 4 + 3]; } auto PPU::renderScanline() -> void { //Vblank if(io.ly >= 240 && io.ly <= vlines() - 2) return step(341), scanline(); latch.oamIterator = 0; latch.oamCounter = 0; for(auto n : range(8)) latch.soam[n] = {}; // 0 step(1); // 1-256 for(u32 tile : range(32)) { u32 nametable = loadCHR(0x2000 | (n12)io.v.address); u32 tileaddr = io.bgAddress | nametable << 4 | io.v.fineY; renderPixel(); step(1); renderPixel(); step(1); u32 attribute = loadCHR(0x23c0 | io.v.nametable << 10 | (io.v.tileY >> 2) << 3 | io.v.tileX >> 2); if(io.v.tileY & 2) attribute >>= 4; if(io.v.tileX & 2) attribute >>= 2; renderPixel(); step(1); if(enable() && ++io.v.tileX == 0) io.v.nametableX++; if(enable() && tile == 31 && ++io.v.fineY == 0 && ++io.v.tileY == 30) io.v.nametableY++, io.v.tileY = 0; renderPixel(); renderSprite(); step(1); u32 tiledataLo = loadCHR(tileaddr + 0); renderPixel(); step(1); renderPixel(); step(1); u32 tiledataHi = loadCHR(tileaddr + 8); renderPixel(); step(1); renderPixel(); renderSprite(); step(1); latch.nametable = latch.nametable << 8 | nametable; latch.attribute = latch.attribute << 2 | (attribute & 3); latch.tiledataLo = latch.tiledataLo << 8 | tiledataLo; latch.tiledataHi = latch.tiledataHi << 8 | tiledataHi; } for(u32 n : range(8)) latch.oam[n] = latch.soam[n]; //257-320 for(u32 sprite : range(8)) { u32 nametable = loadCHR(0x2000 | (n12)io.v.address); step(1); if(enable() && sprite == 0) { //258 io.v.nametableX = io.t.nametableX; io.v.tileX = io.t.tileX; } step(1); u32 attribute = loadCHR(0x23c0 | io.v.nametable << 10 | (io.v.tileY >> 2) << 3 | io.v.tileX >> 2); u32 tileaddr = io.spriteHeight == 8 ? io.spriteAddress + latch.oam[sprite].tile * 16 : (latch.oam[sprite].tile & ~1) * 16 + (latch.oam[sprite].tile & 1) * 0x1000; step(2); u32 spriteY = (io.ly - latch.oam[sprite].y) & (io.spriteHeight - 1); if(latch.oam[sprite].attr & 0x80) spriteY ^= io.spriteHeight - 1; tileaddr += spriteY + (spriteY & 8); latch.oam[sprite].tiledataLo = loadCHR(tileaddr + 0); step(2); latch.oam[sprite].tiledataHi = loadCHR(tileaddr + 8); step(2); if(enable() && sprite == 6 && io.ly == vlines() - 1) { //305 io.v.address = io.t.address; } } //321-336 for(u32 tile : range(2)) { u32 nametable = loadCHR(0x2000 | (n12)io.v.address); u32 tileaddr = io.bgAddress | nametable << 4 | io.v.fineY; step(2); u32 attribute = loadCHR(0x23c0 | io.v.nametable << 10 | (io.v.tileY >> 2) << 3 | io.v.tileX >> 2); if(io.v.tileY & 2) attribute >>= 4; if(io.v.tileX & 2) attribute >>= 2; step(1); if(enable() && ++io.v.tileX == 0) io.v.nametableX++; step(1); u32 tiledataLo = loadCHR(tileaddr + 0); step(2); u32 tiledataHi = loadCHR(tileaddr + 8); step(2); latch.nametable = latch.nametable << 8 | nametable; latch.attribute = latch.attribute << 2 | (attribute & 3); latch.tiledataLo = latch.tiledataLo << 8 | tiledataLo; latch.tiledataHi = latch.tiledataHi << 8 | tiledataHi; } //337-338 loadCHR(0x2000 | (n12)io.v.address); step(1); bool skip = enable() && io.field == 1 && io.ly == vlines() - 1; step(1); //339 loadCHR(0x2000 | (n12)io.v.address); step(1); //340 if(!skip) step(1); return scanline(); } ares-126/ares/fc/ppu/serialization.cpp000066400000000000000000000016021415063341600200270ustar00rootroot00000000000000auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); s(ciram); s(cgram); s(oam); s(io.mdr); s(io.field); s(io.lx); s(io.ly); s(io.busData); s(io.v.data); s(io.t.data); s(io.nmiHold); s(io.nmiFlag); s(io.vramIncrement); s(io.spriteAddress); s(io.bgAddress); s(io.spriteHeight); s(io.masterSelect); s(io.nmiEnable); s(io.grayscale); s(io.bgEdgeEnable); s(io.spriteEdgeEnable); s(io.bgEnable); s(io.spriteEnable); s(io.emphasis); s(io.spriteOverflow); s(io.spriteZeroHit); s(io.oamAddress); s(latch.nametable); s(latch.attribute); s(latch.tiledataLo); s(latch.tiledataHi); s(latch.oamIterator); s(latch.oamCounter); for(auto& o : latch.oam) s(o); for(auto& o : latch.soam) s(o); } auto PPU::OAM::serialize(serializer& s) -> void { s(id); s(y); s(tile); s(attr); s(x); s(tiledataLo); s(tiledataHi); } ares-126/ares/fc/system/000077500000000000000000000000001415063341600151675ustar00rootroot00000000000000ares-126/ares/fc/system/controls.cpp000066400000000000000000000005201415063341600175330ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); reset = node->append("Reset"); microphone = node->append("Microphone"); } auto System::Controls::poll() -> void { platform->input(reset); platform->input(microphone); } ares-126/ares/fc/system/serialization.cpp000066400000000000000000000020711415063341600205500ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(/* reset = */ false); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cartridge); s(cpu); s(apu); s(ppu); if(fds.present) s(fds); s(controllerPort1); s(controllerPort2); } ares-126/ares/fc/system/system.cpp000066400000000000000000000050411415063341600172170ustar00rootroot00000000000000#include namespace ares::Famicom { auto enumerate() -> vector { return { "[Nintendo] Famicom (NTSC-J)", "[Nintendo] Famicom (NTSC-U)", "[Nintendo] Famicom (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Random random; Scheduler scheduler; System system; #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(fds.node) { return fds.title(); } if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); auto reset = controls.reset->value(); platform->input(controls.reset); if(!reset && controls.reset->value()) power(true); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("NTSC-J")) { information.name = "Famicom"; information.region = Region::NTSCJ; information.frequency = Constants::Colorburst::NTSC * 6.0; } if(name.find("NTSC-U")) { information.name = "Famicom"; information.region = Region::NTSCU; information.frequency = Constants::Colorburst::NTSC * 6.0; } if(name.find("PAL")) { information.name = "Famicom"; information.region = Region::PAL; information.frequency = Constants::Colorburst::PAL * 6.0; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; scheduler.reset(); controls.load(node); cpu.load(node); apu.load(node); ppu.load(node); cartridgeSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); expansionPort.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); apu.unload(); ppu.unload(); cartridgeSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); expansionPort.unload(); node = {}; } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); random.entropy(Random::Entropy::Low); cartridge.power(); cpu.power(reset); apu.power(reset); ppu.power(reset); scheduler.power(cpu); } } ares-126/ares/fc/system/system.hpp000066400000000000000000000024721415063341600172310ustar00rootroot00000000000000extern Random random; struct System { Node::System node; struct Controls { Node::Object node; Node::Input::Button reset; Node::Input::Button microphone; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; } controls; enum class Region : u32 { NTSCJ, NTSCU, PAL }; auto name() const -> string { return information.name; } auto region() const -> Region { return information.region; } auto frequency() const -> f64 { return information.frequency; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Famicom"; Region region = Region::NTSCJ; f64 frequency = Constants::Colorburst::NTSC * 6.0; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Region::NTSCJ() -> bool { return system.region() == System::Region::NTSCJ; } auto Region::NTSCU() -> bool { return system.region() == System::Region::NTSCU; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/gb/000077500000000000000000000000001415063341600136435ustar00rootroot00000000000000ares-126/ares/gb/GNUmakefile000066400000000000000000000011701415063341600157140ustar00rootroot00000000000000ares.components += sm83 ares.components += m93lcx6 ares.objects += ares-gb-system ares.objects += ares-gb-bus ares.objects += ares-gb-cartridge ares.objects += ares-gb-cpu ares.objects += ares-gb-ppu ares.objects += ares-gb-apu $(object.path)/ares-gb-system.o: $(ares.path)/gb/system/system.cpp $(object.path)/ares-gb-cartridge.o: $(ares.path)/gb/cartridge/cartridge.cpp $(object.path)/ares-gb-bus.o: $(ares.path)/gb/bus/bus.cpp $(object.path)/ares-gb-cpu.o: $(ares.path)/gb/cpu/cpu.cpp $(object.path)/ares-gb-ppu.o: $(ares.path)/gb/ppu/ppu.cpp $(object.path)/ares-gb-apu.o: $(ares.path)/gb/apu/apu.cpp ares-126/ares/gb/apu/000077500000000000000000000000001415063341600144305ustar00rootroot00000000000000ares-126/ares/gb/apu/apu.cpp000066400000000000000000000027551415063341600157320ustar00rootroot00000000000000#include namespace ares::GameBoy { #include "io.cpp" #include "sequencer.cpp" #include "square1.cpp" #include "square2.cpp" #include "wave.cpp" #include "noise.cpp" #include "serialization.cpp" APU apu; auto APU::load(Node::Object parent) -> void { node = parent->append("APU"); stream = node->append("PSG"); stream->setChannels(2); stream->setFrequency(2 * 1024 * 1024); stream->addHighPassFilter(20.0, 1); } auto APU::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto APU::main() -> void { square1.run(); square2.run(); wave.run(); noise.run(); sequencer.run(); stream->frame(sequencer.left / 32768.0, sequencer.right / 32768.0); if(cycle == 0) { //512hz if(phase == 0 || phase == 2 || phase == 4 || phase == 6) { //256hz square1.clockLength(); square2.clockLength(); wave.clockLength(); noise.clockLength(); } if(phase == 2 || phase == 6) { //128hz square1.clockSweep(); } if(phase == 7) { //64hz square1.clockEnvelope(); square2.clockEnvelope(); noise.clockEnvelope(); } phase++; } cycle++; Thread::step(1); Thread::synchronize(cpu); } auto APU::power() -> void { Thread::create(2 * 1024 * 1024, {&APU::main, this}); square1.power(); square2.power(); wave.power(); noise.power(); sequencer.power(); phase = 0; cycle = 0; PRNG::PCG prng; for(auto& n : wave.pattern) n = prng.random(); } } ares-126/ares/gb/apu/apu.hpp000066400000000000000000000064671415063341600157430ustar00rootroot00000000000000struct APU : Thread { Node::Object node; Node::Audio::Stream stream; //apu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto power() -> void; //io.cpp auto readIO(u32 cycle, n16 address, n8 data) -> n8; auto writeIO(u32 cycle, n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; //square1.cpp struct Square1 { auto dacEnable() const -> bool; auto run() -> void; auto sweep(bool update) -> void; auto clockLength() -> void; auto clockSweep() -> void; auto clockEnvelope() -> void; auto trigger() -> void; auto power(bool initializeLength = true) -> void; auto serialize(serializer&) -> void; bool enable; n3 sweepFrequency; bool sweepDirection; n3 sweepShift; bool sweepNegate; n2 duty; u32 length; n4 envelopeVolume; bool envelopeDirection; n3 envelopeFrequency; n11 frequency; bool counter; i16 output; bool dutyOutput; n3 phase; u32 period; n3 envelopePeriod; n3 sweepPeriod; s32 frequencyShadow; bool sweepEnable; n4 volume; } square1; //square2.cpp struct Square2 { auto dacEnable() const -> bool; auto run() -> void; auto clockLength() -> void; auto clockEnvelope() -> void; auto trigger() -> void; auto power(bool initializeLength = true) -> void; auto serialize(serializer&) -> void; bool enable; n2 duty; u32 length; n4 envelopeVolume; bool envelopeDirection; n3 envelopeFrequency; n11 frequency; bool counter; i16 output; bool dutyOutput; n3 phase; u32 period; n3 envelopePeriod; n4 volume; } square2; struct Wave { auto getPattern(n5 offset) const -> n4; auto run() -> void; auto clockLength() -> void; auto trigger() -> void; auto readRAM(n4 address, n8 data) -> n8; auto writeRAM(n4 address, n8 data) -> void; auto power(bool initializeLength = true) -> void; auto serialize(serializer&) -> void; bool enable; bool dacEnable; n2 volume; n11 frequency; bool counter; n8 pattern[16]; i16 output; u32 length; u32 period; n5 patternOffset; n4 patternSample; u32 patternHold; } wave; struct Noise { auto dacEnable() const -> bool; auto getPeriod() const -> u32; auto run() -> void; auto clockLength() -> void; auto clockEnvelope() -> void; auto trigger() -> void; auto power(bool initializeLength = true) -> void; auto serialize(serializer&) -> void; bool enable; n4 envelopeVolume; bool envelopeDirection; n3 envelopeFrequency; n4 frequency; bool narrow; n3 divisor; bool counter; i16 output; u32 length; n3 envelopePeriod; n4 volume; u32 period; n15 lfsr; } noise; struct Sequencer { auto run() -> void; auto power() -> void; auto serialize(serializer&) -> void; bool leftEnable; n3 leftVolume; bool rightEnable; n3 rightVolume; struct Channel { bool leftEnable; bool rightEnable; } square1, square2, wave, noise; bool enable; i16 center; i16 left; i16 right; } sequencer; n3 phase; //high 3-bits of clock counter n12 cycle; //low 12-bits of clock counter }; extern APU apu; ares-126/ares/gb/apu/io.cpp000066400000000000000000000214531415063341600155500ustar00rootroot00000000000000auto APU::readIO(u32 cycle, n16 address, n8 data) -> n8 { if(address < 0xff10 || address > 0xff3f) return data; //NR10 if(address == 0xff10 && cycle == 2) { data.bit(0,2) = square1.sweepShift; data.bit(3) = square1.sweepDirection; data.bit(4,6) = square1.sweepFrequency; return data; } //NR11 if(address == 0xff11 && cycle == 2) { data.bit(6,7) = square1.duty; return data; } //NR12 if(address == 0xff12 && cycle == 2) { data.bit(0,2) = square1.envelopeFrequency; data.bit(3) = square1.envelopeDirection; data.bit(4,7) = square1.envelopeVolume; return data; } //NR13 if(address == 0xff13 && cycle == 2) { return data; } //NR14 if(address == 0xff14 && cycle == 2) { data.bit(6) = square1.counter; return data; } //NR20 if(address == 0xff15 && cycle == 2) { return data; } //NR21 if(address == 0xff16 && cycle == 2) { data.bit(6,7) = square2.duty; return data; } //NR22 if(address == 0xff17 && cycle == 2) { data.bit(0,2) = square2.envelopeFrequency; data.bit(3) = square2.envelopeDirection; data.bit(4,7) = square2.envelopeVolume; return data; } //NR23 if(address == 0xff18 && cycle == 2) { return data; } //NR24 if(address == 0xff19 && cycle == 2) { data.bit(6) = square2.counter; return data; } //NR30 if(address == 0xff1a && cycle == 2) { data.bit(7) = wave.dacEnable; return data; } //NR31 if(address == 0xff1b && cycle == 2) { return data; } //NR32 if(address == 0xff1c && cycle == 2) { data.bit(5,6) = wave.volume; return data; } //NR33 if(address == 0xff1d && cycle == 2) { return data; } //NR34 if(address == 0xff1e && cycle == 2) { data.bit(6) = wave.counter; return data; } //NR40 if(address == 0xff1f && cycle == 2) { return data; } //NR41 if(address == 0xff20 && cycle == 2) { return data; } //NR42 if(address == 0xff21 && cycle == 2) { data.bit(0,2) = noise.envelopeFrequency; data.bit(3) = noise.envelopeDirection; data.bit(4,7) = noise.envelopeVolume; return data; } //NR43 if(address == 0xff22 && cycle == 2) { data.bit(0,2) = noise.divisor; data.bit(3) = noise.narrow; data.bit(4,7) = noise.frequency; return data; } //NR44 if(address == 0xff23 && cycle == 2) { data.bit(6) = noise.counter; return data; } //NR50 if(address == 0xff24 && cycle == 2) { data.bit(0,2) = sequencer.rightVolume; data.bit(3) = sequencer.rightEnable; data.bit(4,6) = sequencer.leftVolume; data.bit(7) = sequencer.leftEnable; return data; } //NR51 if(address == 0xff25 && cycle == 2) { data.bit(0) = sequencer.square1.rightEnable; data.bit(1) = sequencer.square2.rightEnable; data.bit(2) = sequencer.wave.rightEnable; data.bit(3) = sequencer.noise.rightEnable; data.bit(4) = sequencer.square1.leftEnable; data.bit(5) = sequencer.square2.leftEnable; data.bit(6) = sequencer.wave.leftEnable; data.bit(7) = sequencer.noise.leftEnable; return data; } //NR52 if(address == 0xff26) { data.bit(0) = square1.enable; data.bit(1) = square2.enable; data.bit(2) = wave.enable; data.bit(3) = noise.enable; data.bit(7) = sequencer.enable; return data; } if(address >= 0xff30 && address <= 0xff3f && cycle == 2) { return wave.readRAM(address, data); } return data; } auto APU::writeIO(u32 cycle, n16 address, n8 data) -> void { if(address < 0xff10 || address > 0xff3f) return; if(!sequencer.enable) { bool valid = address == 0xff26; //NR52 if(!Model::GameBoyColor()) { //NRx1 length is writable only on DMG,SGB; not on CGB if(address == 0xff11) valid = true, data &= 0x3f; //NR11; duty is not writable (remains 0) if(address == 0xff16) valid = true, data &= 0x3f; //NR21; duty is not writable (remains 0) if(address == 0xff1b) valid = true; //NR31 if(address == 0xff20) valid = true; //NR41 } if(!valid) return; } //NR10 if(address == 0xff10 && cycle == 2) { if(square1.sweepEnable && square1.sweepNegate && !data.bit(3)) square1.enable = 0; square1.sweepShift = data.bit(0,2); square1.sweepDirection = data.bit(3); square1.sweepFrequency = data.bit(4,6); return; } //NR11 if(address == 0xff11 && cycle == 2) { square1.length = 64 - data.bit(0,5); square1.duty = data.bit(6,7); return; } //NR12 if(address == 0xff12 && cycle == 2) { square1.envelopeFrequency = data.bit(0,2); square1.envelopeDirection = data.bit(3); square1.envelopeVolume = data.bit(4,7); if(!square1.dacEnable()) square1.enable = 0; return; } //NR13 if(address == 0xff13 && cycle == 2) { square1.frequency.bit(0,7) = data; return; } //NR14 if(address == 0xff14 && cycle == 4) { if(phase.bit(0) && !square1.counter && data.bit(6)) { if(square1.length && --square1.length == 0) square1.enable = 0; } square1.frequency.bit(8,10) = data.bit(0,2); square1.counter = data.bit(6); if(data.bit(7)) square1.trigger(); return; } //NR20 if(address == 0xff15 && cycle == 2) { return; } //NR21 if(address == 0xff16 && cycle == 2) { square2.length = 64 - data.bit(0,5); square2.duty = data.bit(6,7); return; } //NR22 if(address == 0xff17 && cycle == 2) { square2.envelopeFrequency = data.bit(0,2); square2.envelopeDirection = data.bit(3); square2.envelopeVolume = data.bit(4,7); if(!square2.dacEnable()) square2.enable = 0; return; } //NR23 if(address == 0xff18 && cycle == 2) { square2.frequency.bit(0,7) = data; return; } //NR24 if(address == 0xff19 && cycle == 4) { if(phase.bit(0) && !square2.counter && data.bit(6)) { if(square2.length && --square2.length == 0) square2.enable = 0; } square2.frequency.bit(8,10) = data.bit(0,2); square2.counter = data.bit(6); if(data.bit(7)) square2.trigger(); return; } //NR30 if(address == 0xff1a && cycle == 2) { wave.dacEnable = data.bit(7); if(!wave.dacEnable) wave.enable = 0; return; } //NR31 if(address == 0xff1b && cycle == 2) { wave.length = 256 - data; return; } //NR32 if(address == 0xff1c && cycle == 2) { wave.volume = data.bit(5,6); return; } //NR33 if(address == 0xff1d && cycle == 2) { wave.frequency.bit(0,7) = data; return; } //NR34 if(address == 0xff1e && cycle == 4) { if(phase.bit(0) && !wave.counter && data.bit(6)) { if(wave.length && --wave.length == 0) wave.enable = 0; } wave.frequency.bit(8,10) = data.bit(0,2); wave.counter = data.bit(6); if(data.bit(7)) wave.trigger(); return; } //NR40 if(address == 0xff1f && cycle == 2) { return; } //NR41 if(address == 0xff20 && cycle == 2) { noise.length = 64 - data.bit(0,5); return; } //NR42 if(address == 0xff21 && cycle == 2) { noise.envelopeFrequency = data.bit(0,2); noise.envelopeDirection = data.bit(3); noise.envelopeVolume = data.bit(4,7); if(!noise.dacEnable()) noise.enable = 0; return; } //NR43 if(address == 0xff22 && cycle == 2) { noise.divisor = data.bit(0,2); noise.narrow = data.bit(3); noise.frequency = data.bit(4,7); noise.period = noise.getPeriod(); return; } //NR44 if(address == 0xff23 && cycle == 4) { if(phase.bit(0) && !noise.counter && data.bit(6)) { if(noise.length && --noise.length == 0) noise.enable = 0; } noise.counter = data.bit(6); if(data.bit(7)) noise.trigger(); return; } //NR50 if(address == 0xff24 && cycle == 2) { sequencer.rightVolume = data.bit(0,2); sequencer.rightEnable = data.bit(3); sequencer.leftVolume = data.bit(4,6); sequencer.leftEnable = data.bit(7); return; } //NR51 if(address == 0xff25 && cycle == 2) { sequencer.square1.rightEnable = data.bit(0); sequencer.square2.rightEnable = data.bit(1); sequencer.wave.rightEnable = data.bit(2); sequencer.noise.rightEnable = data.bit(3); sequencer.square1.leftEnable = data.bit(4); sequencer.square2.leftEnable = data.bit(5); sequencer.wave.leftEnable = data.bit(6); sequencer.noise.leftEnable = data.bit(7); return; } //NR52 if(address == 0xff26 && cycle == 4) { if(sequencer.enable != data.bit(7)) { sequencer.enable = data.bit(7); if(!sequencer.enable) { bool resetLengthCounters = Model::GameBoyColor(); square1.power(resetLengthCounters); square2.power(resetLengthCounters); wave.power(resetLengthCounters); noise.power(resetLengthCounters); sequencer.power(); } else { phase = 0; } } return; } if(address >= 0xff30 && address <= 0xff3f && cycle == 2) { return wave.writeRAM(address, data); } } ares-126/ares/gb/apu/noise.cpp000066400000000000000000000034311415063341600162520ustar00rootroot00000000000000auto APU::Noise::dacEnable() const -> bool { return (envelopeVolume || envelopeDirection); } auto APU::Noise::getPeriod() const -> u32 { static const u32 table[] = {4, 8, 16, 24, 32, 40, 48, 56}; return table[divisor] << frequency; } auto APU::Noise::run() -> void { if(period && --period == 0) { period = getPeriod(); if(frequency < 14) { bool bit = (lfsr ^ (lfsr >> 1)) & 1; lfsr = (lfsr >> 1) ^ (bit << (narrow ? 6 : 14)); } } n4 sample = lfsr & 1 ? 0 : (u32)volume; if(!enable) sample = 0; output = sample; } auto APU::Noise::clockLength() -> void { if(counter) { if(length && --length == 0) enable = false; } } auto APU::Noise::clockEnvelope() -> void { if(enable && envelopeFrequency && --envelopePeriod == 0) { envelopePeriod = envelopeFrequency ? (u32)envelopeFrequency : 8; if(envelopeDirection == 0 && volume > 0) volume--; if(envelopeDirection == 1 && volume < 15) volume++; } } auto APU::Noise::trigger() -> void { enable = dacEnable(); lfsr = -1; envelopePeriod = envelopeFrequency ? (u32)envelopeFrequency : 8; volume = envelopeVolume; if(!length) { length = 64; if(apu.phase.bit(0) && counter) length--; } } auto APU::Noise::power(bool initializeLength) -> void { enable = 0; envelopeVolume = 0; envelopeDirection = 0; envelopeFrequency = 0; frequency = 0; narrow = 0; divisor = 0; counter = 0; output = 0; envelopePeriod = 0; volume = 0; period = 0; lfsr = 0; if(initializeLength) length = 64; } auto APU::Noise::serialize(serializer& s) -> void { s(enable); s(envelopeVolume); s(envelopeDirection); s(envelopeFrequency); s(frequency); s(narrow); s(divisor); s(counter); s(output); s(length); s(envelopePeriod); s(volume); s(period); s(lfsr); } ares-126/ares/gb/apu/sequencer.cpp000066400000000000000000000034061415063341600171310ustar00rootroot00000000000000auto APU::Sequencer::run() -> void { if(enable == false) { center = 0; left = 0; right = 0; return; } s32 sample = 0; sample += apu.square1.output; sample += apu.square2.output; sample += apu.wave.output; sample += apu.noise.output; center = (sample * 512) - 16384; sample = 0; if(square1.leftEnable) sample += apu.square1.output; if(square2.leftEnable) sample += apu.square2.output; if( wave.leftEnable) sample += apu.wave.output; if( noise.leftEnable) sample += apu.noise.output; sample = (sample * 512) - 16384; sample = (sample * (leftVolume + 1)) / 8; left = sample; sample = 0; if(square1.rightEnable) sample += apu.square1.output; if(square2.rightEnable) sample += apu.square2.output; if( wave.rightEnable) sample += apu.wave.output; if( noise.rightEnable) sample += apu.noise.output; sample = (sample * 512) - 16384; sample = (sample * (rightVolume + 1)) / 8; right = sample; //reduce audio volume center >>= 1; left >>= 1; right >>= 1; } auto APU::Sequencer::power() -> void { leftEnable = 0; leftVolume = 0; rightEnable = 0; rightVolume = 0; noise.leftEnable = 0; wave.leftEnable = 0; square2.leftEnable = 0; square1.leftEnable = 0; noise.rightEnable = 0; wave.rightEnable = 0; square2.rightEnable = 0; square1.rightEnable = 0; enable = 0; center = 0; left = 0; right = 0; } auto APU::Sequencer::serialize(serializer& s) -> void { s(leftEnable); s(leftVolume); s(rightEnable); s(rightVolume); s(noise.leftEnable); s(wave.leftEnable); s(square2.leftEnable); s(square1.leftEnable); s(noise.rightEnable); s(wave.rightEnable); s(square2.rightEnable); s(square1.rightEnable); s(enable); s(center); s(left); s(right); } ares-126/ares/gb/apu/serialization.cpp000066400000000000000000000002421415063341600200070ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Thread::serialize(s); s(square1); s(square2); s(wave); s(noise); s(sequencer); s(phase); s(cycle); } ares-126/ares/gb/apu/square1.cpp000066400000000000000000000055651415063341600165300ustar00rootroot00000000000000auto APU::Square1::dacEnable() const -> bool { return (envelopeVolume || envelopeDirection); } auto APU::Square1::run() -> void { if(period && --period == 0) { period = 2 * (2048 - frequency); phase++; switch(duty) { case 0: dutyOutput = (phase == 6); break; //______-_ case 1: dutyOutput = (phase >= 6); break; //______-- case 2: dutyOutput = (phase >= 4); break; //____---- case 3: dutyOutput = (phase <= 5); break; //------__ } } n4 sample = dutyOutput ? (u32)volume : 0; if(!enable) sample = 0; output = sample; } auto APU::Square1::sweep(bool update) -> void { if(!sweepEnable) return; sweepNegate = sweepDirection; u32 delta = frequencyShadow >> sweepShift; s32 freq = frequencyShadow + (sweepNegate ? -delta : delta); if(freq > 2047) { enable = false; } else if(sweepShift && update) { frequencyShadow = freq; frequency = freq & 2047; period = 2 * (2048 - frequency); } } auto APU::Square1::clockLength() -> void { if(counter) { if(length && --length == 0) enable = false; } } auto APU::Square1::clockSweep() -> void { if(--sweepPeriod == 0) { sweepPeriod = sweepFrequency ? (u32)sweepFrequency : 8; if(sweepEnable && sweepFrequency) { sweep(1); sweep(0); } } } auto APU::Square1::clockEnvelope() -> void { if(enable && envelopeFrequency && --envelopePeriod == 0) { envelopePeriod = envelopeFrequency ? (u32)envelopeFrequency : 8; if(envelopeDirection == 0 && volume > 0) volume--; if(envelopeDirection == 1 && volume < 15) volume++; } } auto APU::Square1::trigger() -> void { enable = dacEnable(); period = 2 * (2048 - frequency); envelopePeriod = envelopeFrequency ? (u32)envelopeFrequency : 8; volume = envelopeVolume; if(!length) { length = 64; if(apu.phase.bit(0) && counter) length--; } frequencyShadow = frequency; sweepNegate = false; sweepPeriod = sweepFrequency ? (u32)sweepFrequency : 8; sweepEnable = sweepPeriod || sweepShift; if(sweepShift) sweep(0); } auto APU::Square1::power(bool initializeLength) -> void { enable = 0; sweepFrequency = 0; sweepDirection = 0; sweepShift = 0; sweepNegate = 0; duty = 0; envelopeVolume = 0; envelopeDirection = 0; envelopeFrequency = 0; frequency = 0; counter = 0; output = 0; dutyOutput = 0; phase = 0; period = 0; envelopePeriod = 0; sweepPeriod = 0; frequencyShadow = 0; sweepEnable = 0; volume = 0; if(initializeLength) length = 64; } auto APU::Square1::serialize(serializer& s) -> void { s(enable); s(sweepFrequency); s(sweepDirection); s(sweepShift); s(sweepNegate); s(duty); s(length); s(envelopeVolume); s(envelopeDirection); s(envelopeFrequency); s(frequency); s(counter); s(output); s(dutyOutput); s(phase); s(period); s(envelopePeriod); s(sweepPeriod); s(frequencyShadow); s(sweepEnable); s(volume); } ares-126/ares/gb/apu/square2.cpp000066400000000000000000000035111415063341600165160ustar00rootroot00000000000000auto APU::Square2::dacEnable() const -> bool { return (envelopeVolume || envelopeDirection); } auto APU::Square2::run() -> void { if(period && --period == 0) { period = 2 * (2048 - frequency); phase++; switch(duty) { case 0: dutyOutput = (phase == 6); break; //______-_ case 1: dutyOutput = (phase >= 6); break; //______-- case 2: dutyOutput = (phase >= 4); break; //____---- case 3: dutyOutput = (phase <= 5); break; //------__ } } n4 sample = dutyOutput ? (u32)volume : 0; if(!enable) sample = 0; output = sample; } auto APU::Square2::clockLength() -> void { if(counter) { if(length && --length == 0) enable = false; } } auto APU::Square2::clockEnvelope() -> void { if(enable && envelopeFrequency && --envelopePeriod == 0) { envelopePeriod = envelopeFrequency ? (u32)envelopeFrequency : 8; if(envelopeDirection == 0 && volume > 0) volume--; if(envelopeDirection == 1 && volume < 15) volume++; } } auto APU::Square2::trigger() -> void { enable = dacEnable(); period = 2 * (2048 - frequency); envelopePeriod = envelopeFrequency ? (u32)envelopeFrequency : 8; volume = envelopeVolume; if(!length) { length = 64; if(apu.phase.bit(0) && counter) length--; } } auto APU::Square2::power(bool initializeLength) -> void { enable = 0; duty = 0; envelopeVolume = 0; envelopeDirection = 0; envelopeFrequency = 0; frequency = 0; counter = 0; output = 0; dutyOutput = 0; phase = 0; period = 0; envelopePeriod = 0; volume = 0; if(initializeLength) length = 64; } auto APU::Square2::serialize(serializer& s) -> void { s(enable); s(duty); s(length); s(envelopeVolume); s(envelopeDirection); s(envelopeFrequency); s(frequency); s(counter); s(output); s(dutyOutput); s(phase); s(period); s(envelopePeriod); s(volume); } ares-126/ares/gb/apu/wave.cpp000066400000000000000000000044761415063341600161110ustar00rootroot00000000000000auto APU::Wave::getPattern(n5 offset) const -> n4 { return pattern[offset >> 1] >> (offset & 1 ? 0 : 4); } auto APU::Wave::run() -> void { if(patternHold) patternHold--; if(period && --period == 0) { period = 2048 - frequency; patternSample = getPattern(++patternOffset); patternHold = 1; } static const u32 shift[] = {4, 0, 1, 2}; //0%, 100%, 50%, 25% n4 sample = patternSample >> shift[volume]; if(!enable) sample = 0; output = sample; } auto APU::Wave::clockLength() -> void { if(counter) { if(length && --length == 0) enable = false; } } auto APU::Wave::trigger() -> void { if(!Model::GameBoyColor() && patternHold) { //DMG,SGB trigger while channel is being read corrupts wave RAM if((patternOffset >> 1) <= 3) { //if current pattern is with 0-3; only byte 0 is corrupted pattern[0] = pattern[patternOffset >> 1]; } else { //if current pattern is within 4-15; pattern&~3 is copied to pattern[0-3] pattern[0] = pattern[((patternOffset >> 1) & ~3) + 0]; pattern[1] = pattern[((patternOffset >> 1) & ~3) + 1]; pattern[2] = pattern[((patternOffset >> 1) & ~3) + 2]; pattern[3] = pattern[((patternOffset >> 1) & ~3) + 3]; } } enable = dacEnable; period = 2048 - frequency + 2; patternOffset = 0; patternSample = 0; patternHold = 0; if(!length) { length = 256; if(apu.phase.bit(0) && counter) length--; } } auto APU::Wave::readRAM(n4 address, n8 data) -> n8 { if(enable) { if(!Model::GameBoyColor() && !patternHold) return data; return pattern[patternOffset >> 1]; } else { return pattern[address]; } } auto APU::Wave::writeRAM(n4 address, n8 data) -> void { if(enable) { if(!Model::GameBoyColor() && !patternHold) return; pattern[patternOffset >> 1] = data; } else { pattern[address] = data; } } auto APU::Wave::power(bool initializeLength) -> void { enable = 0; dacEnable = 0; volume = 0; frequency = 0; counter = 0; output = 0; period = 0; patternOffset = 0; patternSample = 0; patternHold = 0; if(initializeLength) length = 256; } auto APU::Wave::serialize(serializer& s) -> void { s(enable); s(dacEnable); s(volume); s(frequency); s(counter); s(pattern); s(output); s(length); s(period); s(patternOffset); s(patternSample); s(patternHold); } ares-126/ares/gb/bus/000077500000000000000000000000001415063341600144345ustar00rootroot00000000000000ares-126/ares/gb/bus/bus.cpp000066400000000000000000000016641415063341600157400ustar00rootroot00000000000000#include namespace ares::GameBoy { Bus bus; auto Bus::read(u32 cycle, n16 address, n8 data) -> n8 { data &= cpu.readIO(cycle, address, data); data &= apu.readIO(cycle, address, data); data &= ppu.readIO(cycle, address, data); data &= cartridge.read(cycle, address, data); return data; } auto Bus::write(u32 cycle, n16 address, n8 data) -> void { cpu.writeIO(cycle, address, data); apu.writeIO(cycle, address, data); ppu.writeIO(cycle, address, data); cartridge.write(cycle, address, data); } auto Bus::read(n16 address, n8 data) -> n8 { //data &= read(0, address, data); //data &= read(1, address, data); data &= read(2, address, data); //data &= read(3, address, data); data &= read(4, address, data); return data; } auto Bus::write(n16 address, n8 data) -> void { //write(0, address, data); //write(1, address, data); write(2, address, data); //write(3, address, data); write(4, address, data); } } ares-126/ares/gb/bus/bus.hpp000066400000000000000000000003421415063341600157350ustar00rootroot00000000000000struct Bus { auto read(u32 cycle, n16 address, n8 data) -> n8; auto write(u32 cycle, n16 address, n8 data) -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; }; extern Bus bus; ares-126/ares/gb/cartridge/000077500000000000000000000000001415063341600156075ustar00rootroot00000000000000ares-126/ares/gb/cartridge/board/000077500000000000000000000000001415063341600166765ustar00rootroot00000000000000ares-126/ares/gb/cartridge/board/board.cpp000066400000000000000000000017471415063341600205020ustar00rootroot00000000000000namespace Board { #include "none.cpp" #include "huc1.cpp" #include "huc3.cpp" #include "linear.cpp" #include "mbc1.cpp" #include "mbc1m.cpp" #include "mbc2.cpp" #include "mbc3.cpp" #include "mbc5.cpp" #include "mbc6.cpp" #include "mbc7.cpp" #include "mmm01.cpp" #include "tama.cpp" auto Interface::main() -> void { step(cartridge.frequency()); } auto Interface::step(u32 clocks) -> void { cartridge.step(clocks); } auto Interface::load(Memory::Readable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::load(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::save(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->write(name)) { memory.save(fp); return true; } return false; } } ares-126/ares/gb/cartridge/board/board.hpp000066400000000000000000000013271415063341600205010ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; Interface(Cartridge& cartridge) : cartridge(cartridge) {} virtual ~Interface() = default; virtual auto load() -> void {} virtual auto save() -> void {} virtual auto unload() -> void {} virtual auto main() -> void; virtual auto step(u32 clocks) -> void; virtual auto read(n16 address, n8 data) -> n8 { return data; } virtual auto write(n16 address, n8 data) -> void {} virtual auto power() -> void {} virtual auto serialize(serializer&) -> void {} auto load(Memory::Readable&, string name) -> bool; auto load(Memory::Writable&, string name) -> bool; auto save(Memory::Writable&, string name) -> bool; Cartridge& cartridge; }; } ares-126/ares/gb/cartridge/board/huc1.cpp000066400000000000000000000033771415063341600202540ustar00rootroot00000000000000struct HuC1 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram) return 0xff; return ram.read(io.ram.bank << 13 | (n13)address); } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { io.ram.writable = data.bit(0,3) == 0x0a; return; } if(address >= 0x2000 && address <= 0x3fff) { io.rom.bank = data; if(!io.rom.bank) io.rom.bank = 0x01; return; } if(address >= 0x4000 && address <= 0x5fff) { io.ram.bank = data; return; } if(address >= 0x6000 && address <= 0x7fff) { io.model = data.bit(0); return; } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.writable) return; return ram.write(io.ram.bank << 13 | (n13)address, data); } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.model); s(io.rom.bank); s(io.ram.writable); s(io.ram.bank); } struct IO { n1 model; struct ROM { n8 bank = 0x01; } rom; struct RAM { n1 writable; n8 bank; } ram; } io; }; ares-126/ares/gb/cartridge/board/huc3.cpp000066400000000000000000000031761415063341600202530ustar00rootroot00000000000000struct HuC3 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return 0x01; //does not return open collection return ram.read(io.ram.bank << 13 | (n13)address); } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { io.ram.enable = data.bit(0,3) == 0x0a; return; } if(address >= 0x2000 && address <= 0x3fff) { io.rom.bank = data; return; } if(address >= 0x4000 && address <= 0x5fff) { io.ram.bank = data; return; } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return; return ram.write(io.ram.bank << 13 | (n13)address, data); } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.rom.bank); s(io.ram.enable); s(io.ram.bank); } struct IO { struct ROM { n8 bank = 0x01; } rom; struct RAM { n1 enable; n8 bank; } ram; } io; }; ares-126/ares/gb/cartridge/board/linear.cpp000066400000000000000000000016301415063341600206540ustar00rootroot00000000000000struct Linear : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x7fff) { return rom.read((n15)address); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram) return data; return ram.read((n13)address); } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0xa000 && address <= 0xbfff) { if(!ram) return; return ram.write(address, data); } } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(ram); } }; ares-126/ares/gb/cartridge/board/mbc1.cpp000066400000000000000000000041221415063341600202230ustar00rootroot00000000000000struct MBC1 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { if(io.mode == 0) { return rom.read(io.ram.bank << 19 | io.rom.bank << 14 | (n14)address); } else { return rom.read(io.rom.bank << 14 | (n14)address); } } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return 0xff; if(io.mode == 0) { return ram.read((n13)address); } else { return ram.read(io.ram.bank << 13 | (n13)address); } } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { io.ram.enable = data.bit(0,3) == 0x0a; return; } if(address >= 0x2000 && address <= 0x3fff) { io.rom.bank = data.bit(0,4); if(!io.rom.bank) io.rom.bank = 0x01; return; } if(address >= 0x4000 && address <= 0x5fff) { io.ram.bank = data.bit(0,1); return; } if(address >= 0x6000 && address <= 0x7fff) { io.mode = data.bit(0); return; } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return; if(io.mode == 0) { return ram.write((n13)address, data); } else { return ram.write(io.ram.bank << 13 | (n13)address, data); } } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.mode); s(io.rom.bank); s(io.ram.enable); s(io.ram.bank); } struct IO { n1 mode; struct ROM { n8 bank = 0x01; } rom; struct RAM { n1 enable; n8 bank; } ram; } io; }; ares-126/ares/gb/cartridge/board/mbc1m.cpp000066400000000000000000000031051415063341600204000ustar00rootroot00000000000000//MBC1 with mapper bits repurposed for supporting multi-game cartridges struct MBC1M : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { if(io.mode == 0) return rom.read((n14)address); return rom.read(io.rom.bank.bit(4,5) << 18 | (n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram) return data; return ram.read((n13)address); } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x2000 && address <= 0x3fff) { io.rom.bank.bit(0,3) = data.bit(0,3); } if(address >= 0x4000 && address <= 0x5fff) { io.rom.bank.bit(4,5) = data.bit(0,1); } if(address >= 0x6000 && address <= 0x7fff) { io.mode = data.bit(0); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram) return; ram.write((n14)address, data); } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.mode); s(io.rom.bank); } struct IO { n1 mode; struct ROM { n6 bank = 0x01; } rom; } io; }; ares-126/ares/gb/cartridge/board/mbc2.cpp000066400000000000000000000035111415063341600202250ustar00rootroot00000000000000struct MBC2 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xa1ff) { if(!ram || !io.ram.enable) return 0xff; auto pair = ram.read(address.bit(1,8)); if((address & 1) == 0) data = 0xf0 | pair.bit(0,3); if((address & 1) == 1) data = 0xf0 | pair.bit(4,7); return data; } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { if(!address.bit(8)) io.ram.enable = data.bit(0,3) == 0x0a; return; } if(address >= 0x2000 && address <= 0x3fff) { if(address.bit(8)) io.rom.bank = data.bit(0,3); if(!io.rom.bank) io.rom.bank = 0x01; return; } if(address >= 0xa000 && address <= 0xa1ff) { if(!ram || !io.ram.enable) return; auto pair = ram.read(address.bit(1,8)); if((address & 1) == 0) pair.bit(0,3) = data.bit(0,3); if((address & 1) == 1) pair.bit(4,7) = data.bit(0,3); return ram.write(address.bit(1,8), pair); } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.rom.bank); s(io.ram.enable); } struct IO { struct ROM { n8 bank = 0x01; } rom; struct RAM { n1 enable = 0; } ram; } io; }; ares-126/ares/gb/cartridge/board/mbc3.cpp000066400000000000000000000134751415063341600202400ustar00rootroot00000000000000struct MBC3 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; Memory::Writable rtc; bool MBC30 = false; //0 = MBC3, 1 = MBC30 //MBC3 supports 128 ROM banks (2MB) and 4 RAM banks (32KB) //MBC30 supports 256 ROM banks (4MB) and 8 RAM banks (64KB) auto load() -> void override { MBC30 = pak->attribute("board") == "MBC30"; Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); Interface::load(rtc, "time.rtc"); if(rtc.size() == 13) { io.rtc.second = rtc[0]; io.rtc.minute = rtc[1]; io.rtc.hour = rtc[2]; io.rtc.day.bit(0,7) = rtc[3]; io.rtc.day.bit(8) = rtc[4].bit(0); io.rtc.halt = rtc[4].bit(6); io.rtc.dayCarry = rtc[4].bit(7); n64 timestamp = 0; for(u32 index : range(8)) { timestamp.byte(index) = rtc[5 + index]; } n64 diff = chrono::timestamp() - timestamp; if(diff < 32 * 365 * 24 * 60 * 60) { while(diff >= 24 * 60 * 60) { tickDay(); diff -= 24 * 60 * 60; } while(diff >= 60 * 60) { tickHour(); diff -= 60 * 60; } while(diff >= 60) { tickMinute(); diff -= 60; } while(diff) { tickSecond(); diff -= 1; } } } } auto save() -> void override { Interface::save(ram, "save.ram"); Interface::save(rtc, "time.rtc"); if(rtc.size() == 13) { rtc[0] = io.rtc.second; rtc[1] = io.rtc.minute; rtc[2] = io.rtc.hour; rtc[3] = io.rtc.day.bit(0,7); rtc[4] = io.rtc.day.bit(8) << 0 | io.rtc.halt << 6 | io.rtc.dayCarry << 7; n64 timestamp = chrono::timestamp(); for(u32 index : range(8)) { rtc[5 + index] = timestamp.byte(index); } } } auto unload() -> void override { } auto main() -> void override { step(cartridge.frequency()); if(!io.rtc.halt) tickSecond(); } auto tickSecond() -> void { if(++io.rtc.second >= 60) { io.rtc.second = 0; tickMinute(); } } auto tickMinute() -> void { if(++io.rtc.minute >= 60) { io.rtc.minute = 0; tickHour(); } } auto tickHour() -> void { if(++io.rtc.hour >= 24) { io.rtc.hour = 0; tickDay(); } } auto tickDay() -> void { if(++io.rtc.day == 0) { io.rtc.dayCarry = true; } } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xbfff) { //RAM disable affects RTC registers as well if(!io.ram.enable) return 0xff; if(io.ram.bank <= (!MBC30 ? 0x03 : 0x07)) { if(!ram) return 0xff; return ram.read(io.ram.bank << 13 | (n13)address); } if(io.ram.bank == 0x08) return io.rtc.latchSecond; if(io.ram.bank == 0x09) return io.rtc.latchMinute; if(io.ram.bank == 0x0a) return io.rtc.latchHour; if(io.ram.bank == 0x0b) return io.rtc.latchDay.bit(0,7); if(io.ram.bank == 0x0c) return io.rtc.latchDay.bit(8) << 0 | io.rtc.latchHalt << 6 | io.rtc.latchDayCarry << 7; return 0xff; } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { io.ram.enable = data.bit(0,3) == 0x0a; return; } if(address >= 0x2000 && address <= 0x3fff) { if(MBC30 == 0) io.rom.bank = data.bit(0,6); if(MBC30 == 1) io.rom.bank = data.bit(0,7); if(!io.rom.bank) io.rom.bank = 0x01; return; } if(address >= 0x4000 && address <= 0x5fff) { io.ram.bank = data; return; } if(address >= 0x6000 && address <= 0x7fff) { if(io.rtc.latch == 0 && data == 1) { io.rtc.latchSecond = io.rtc.second; io.rtc.latchMinute = io.rtc.minute; io.rtc.latchHour = io.rtc.hour; io.rtc.latchDay = io.rtc.day; io.rtc.latchHalt = io.rtc.latch; io.rtc.latchDayCarry = io.rtc.dayCarry; } io.rtc.latch = data; return; } if((address & 0xe000) == 0xa000) { //$a000-bfff //RAM disable affects RTC registers as well if(!io.ram.enable) return; if(io.ram.bank <= (!MBC30 ? 0x03 : 0x07)) { if(!ram) return; ram.write(io.ram.bank << 13 | (n13)address, data); } else if(io.ram.bank == 0x08) { if(data >= 60) data = 0; //unverified io.rtc.second = data; } else if(io.ram.bank == 0x09) { if(data >= 60) data = 0; //unverified io.rtc.minute = data; } else if(io.ram.bank == 0x0a) { if(data >= 24) data = 0; //unverified io.rtc.hour = data; } else if(io.ram.bank == 0x0b) { io.rtc.day.bit(0,7) = data.bit(0,7); } else if(io.ram.bank == 0x0c) { io.rtc.day.bit(8) = data.bit(0); io.rtc.halt = data.bit(6); io.rtc.dayCarry = data.bit(7); } return; } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.rom.bank); s(io.ram.enable); s(io.ram.bank); s(io.rtc.second); s(io.rtc.minute); s(io.rtc.hour); s(io.rtc.day); s(io.rtc.halt); s(io.rtc.dayCarry); s(io.rtc.latch); s(io.rtc.latchSecond); s(io.rtc.latchMinute); s(io.rtc.latchHour); s(io.rtc.latchDay); s(io.rtc.latchHalt); s(io.rtc.latchDayCarry); } struct IO { struct ROM { n8 bank = 0x01; } rom; struct RAM { n1 enable; n8 bank; } ram; struct RTC { n8 second; n8 minute; n8 hour; n9 day; n1 halt; n1 dayCarry; n1 latch; n8 latchSecond; n8 latchMinute; n8 latchHour; n9 latchDay; n1 latchHalt; n1 latchDayCarry; } rtc; } io; }; ares-126/ares/gb/cartridge/board/mbc5.cpp000066400000000000000000000037211415063341600202330ustar00rootroot00000000000000struct MBC5 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; Node::Input::Rumble rumble; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); rumble = cartridge.node->append("Rumble"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { cartridge.node->remove(rumble); } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return 0xff; return ram.read(io.ram.bank << 13 | (n13)address); } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { io.ram.enable = data.bit(0,3) == 0x0a; return; } if(address >= 0x2000 && address <= 0x2fff) { io.rom.bank.bit(0,7) = data.bit(0,7); return; } if(address >= 0x3000 && address <= 0x3fff) { io.rom.bank.bit(8) = data.bit(0); return; } if(address >= 0x4000 && address <= 0x5fff) { //todo: add rumble timeout? rumble->setEnable(data.bit(3)); platform->input(rumble); io.ram.bank = data.bit(0,3); return; } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return; return ram.write(io.ram.bank << 13 | (n13)address, data); } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.rom.bank); s(io.ram.enable); s(io.ram.bank); } struct IO { struct ROM { n9 bank = 0x01; } rom; struct RAM { n1 enable; n4 bank; } ram; } io; }; ares-126/ares/gb/cartridge/board/mbc6.cpp000066400000000000000000000066371415063341600202450ustar00rootroot00000000000000struct MBC6 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; Memory::Writable flash; //Macronix MX29F008TC-14 (writes unemulated) auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); Interface::load(flash, "download.flash"); } auto save() -> void override { Interface::save(ram, "save.ram"); Interface::save(flash, "download.flash"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x5fff) { if(io.region[0].select == 0) return rom.read(io.region[0].bank << 13 | (n13)address); if(io.region[0].select == 1) return flash.read(io.region[0].bank << 13 | (n13)address); } if(address >= 0x6000 && address <= 0x7fff) { if(io.region[1].select == 0) return rom.read(io.region[1].bank << 13 | (n13)address); if(io.region[1].select == 1) return flash.read(io.region[1].bank << 13 | (n13)address); } if(address >= 0xa000 && address <= 0xafff) { if(!ram || !io.ram.enable) return 0xff; return ram.read(io.ram.bank[0] << 12 | (n12)address); } if(address >= 0xb000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return 0xff; return ram.read(io.ram.bank[1] << 12 | (n12)address); } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x03ff) { io.ram.enable = data.bit(0,3) == 0xa; return; } if(address >= 0x0400 && address <= 0x07ff) { io.ram.bank[0] = data.bit(0,2); return; } if(address >= 0x0800 && address <= 0x0bff) { io.ram.bank[1] = data.bit(0,2); return; } if(address >= 0x0c00 && address <= 0x0fff) { io.flash.enable = data.bit(0); return; } if(address >= 0x1000 && address <= 0x1fff) { io.flash.writable = data.bit(0); return; } if(address >= 0x2000 && address <= 0x27ff) { io.region[0].bank = data.bit(0,6); return; } if(address >= 0x2800 && address <= 0x2fff) { io.region[0].select = data.bit(3); return; } if(address >= 0x3000 && address <= 0x37ff) { io.region[1].bank = data.bit(0,6); return; } if(address >= 0x3800 && address <= 0x3fff) { io.region[1].select = data.bit(3); return; } if(address >= 0xa000 && address <= 0xafff) { if(!ram || !io.ram.enable) return; return ram.write(io.ram.bank[0] << 12 | (n12)address, data); } if(address >= 0xb000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return; return ram.write(io.ram.bank[1] << 12 | (n12)address, data); } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(flash); s(io.region[0].select); s(io.region[0].bank); s(io.region[1].select); s(io.region[1].bank); s(io.ram.enable); s(io.ram.bank); s(io.flash.enable); s(io.flash.writable); } struct IO { struct Region { n1 select; //0 = ROM, 1 = Flash n7 bank; } region[2]; struct RAM { n1 enable; n3 bank[2]; } ram; struct Flash { n1 enable; //unknown purpose n1 writable; //flash /WE pin } flash; } io; }; ares-126/ares/gb/cartridge/board/mbc7.cpp000066400000000000000000000123461415063341600202400ustar00rootroot00000000000000struct MBC7 : Interface { using Interface::Interface; Memory::Readable rom; Node::Input::Axis x; Node::Input::Axis y; static constexpr s32 Center = 0x81d0; //not 0x8000 auto load() -> void override { Interface::load(rom, "program.rom"); x = cartridge.node->append("X"); y = cartridge.node->append("Y"); eeprom.load(); } auto save() -> void override { cartridge.node->remove(x); cartridge.node->remove(y); eeprom.save(); } auto unload() -> void override { } auto main() -> void override { eeprom.main(); step(cartridge.frequency() / 1000); //step by approximately one millisecond } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xafff) { if(!io.ram.enable[0] || !io.ram.enable[1]) return 0xff; switch(address.bit(4,7)) { case 2: return io.accelerometer.x.byte(0); case 3: return io.accelerometer.x.byte(1); case 4: return io.accelerometer.y.byte(0); case 5: return io.accelerometer.y.byte(1); case 6: return 0x00; //z? case 7: return 0xff; //z? case 8: return eeprom.readIO(); } return 0xff; } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x1fff) { io.ram.enable[0] = data.bit(0,3) == 0xa; if(!io.ram.enable[0]) io.ram.enable[1] = false; return; } if(address >= 0x2000 && address <= 0x3fff) { io.rom.bank = data; if(!io.rom.bank) io.rom.bank = 1; return; } if(address >= 0x4000 && address <= 0x5fff) { if(!io.ram.enable[0]) return; io.ram.enable[1] = data == 0x40; } if(address >= 0xa000 && address <= 0xafff) { if(!io.ram.enable[0] || !io.ram.enable[1]) return; switch(address.bit(4,7)) { case 0: if(data != 0x55) break; io.accelerometer.x = Center; io.accelerometer.y = Center; break; case 1: if(data != 0xaa) break; platform->input(x); platform->input(y); io.accelerometer.x = max(0x0000, min(0xffff, Center - (x->value() >> 8))); io.accelerometer.y = max(0x0000, min(0xffff, Center - (y->value() >> 8))); break; case 8: eeprom.writeIO(data); break; } return; } } auto power() -> void override { eeprom.power(); io = {}; } auto serialize(serializer& s) -> void override { s(eeprom); s(io.rom.bank); s(io.ram.enable); s(io.accelerometer.x); s(io.accelerometer.y); } //MBC7 interface to the M93LCx6 chip struct EEPROM : M93LCx6 { MBC7& self; EEPROM(MBC7& self) : self(self) {} auto load() -> void { if(auto fp = self.pak->read("save.eeprom")) { u32 size = fp->size(); u32 width = fp->attribute("width").natural(); allocate(size, width, 0, 0xff); fp->read({data, min(fp->size(), sizeof(data))}); } } auto save() -> void { if(auto fp = self.pak->write("save.eeprom")) { fp->write({data, size}); } } auto power() -> void { M93LCx6::power(); select = 0; clock = 0; } auto main() -> void { M93LCx6::clock(); //clocked at ~1000hz } auto readIO() -> n8 { n8 data; if(!select) { data.bit(0) = 1; //high-z when the chip is idle (not selected) } else if(busy) { data.bit(0) = 0; //low when a programming command is in progress } else if(output.count) { data.bit(0) = output.edge(); //shift register data during read commands } else { data.bit(0) = 1; //high-z during all other commands } data.bit(1) = input.edge(); data.bit(2) = 1; data.bit(3) = 1; data.bit(4) = 1; data.bit(5) = 1; data.bit(6) = clock; data.bit(7) = select; return data; } auto writeIO(n8 data) -> void { //chip enters idle state on falling CS edge if(select && !data.bit(7)) return power(); //chip leaves idle state on rising CS edge if(!(select = data.bit(7))) return; //input shift register clocks on rising edge if(!clock.raise(data.bit(6))) return; //read mode if(output.count && !data.bit(1)) { if(input.start() && *input.start() == 1) { if(input.opcode() && *input.opcode() == 0b10) { output.read(); if(output.count == 0) { //sequential read mode input.increment(); read(); } } } return; } output.flush(); input.write(data.bit(1)); edge(); } auto serialize(serializer& s) -> void { M93LCx6::serialize(s); s(select); s(clock); } boolean select; //CS boolean clock; //CLK } eeprom{*this}; struct IO { struct ROM { n8 bank = 0x01; } rom; struct RAM { n1 enable[2]; } ram; struct Accelerometer { n16 x = Center; n16 y = Center; } accelerometer; } io; }; ares-126/ares/gb/cartridge/board/mmm01.cpp000066400000000000000000000042541415063341600203360ustar00rootroot00000000000000struct MMM01 : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(io.mode == 0) { if(address >= 0x0000 && address <= 0x7fff) { return rom.read(rom.size() - 0x8000 + (n15)address); } return data; } if(io.mode == 1) { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((io.rom.base << 14) + (n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read((io.rom.base << 14) + (io.rom.bank << 14) + (n14)address); } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return 0xff; return ram.read(io.ram.bank << 13 | (n13)address); } return data; } return data; } auto write(n16 address, n8 data) -> void override { if(io.mode == 0) { if(address >= 0x0000 && address <= 0x1fff) { io.mode = 1; } if(address >= 0x2000 && address <= 0x3fff) { io.rom.base = data.bit(0,5); } return; } if(io.mode == 1) { if(address >= 0x0000 && address <= 0x1fff) { io.ram.enable = data.bit(0,3) == 0x0a; } if(address >= 0x2000 && address <= 0x3fff) { io.rom.bank = data; } if(address >= 0x4000 && address <= 0x5fff) { io.ram.bank = data; } if(address >= 0xa000 && address <= 0xbfff) { if(!ram || !io.ram.enable) return; ram.write(io.ram.bank << 13 | (n13)address, data); } return; } } auto power() -> void override { io = {}; } auto serialize(serializer& s) -> void override { s(ram); s(io.mode); s(io.rom.base); s(io.rom.bank); s(io.ram.enable); s(io.ram.bank); } struct IO { n1 mode; struct ROM { n6 base; n8 bank = 0x01; } rom; struct RAM { n1 enable; n8 bank; } ram; } io; }; ares-126/ares/gb/cartridge/board/none.cpp000066400000000000000000000006221415063341600203410ustar00rootroot00000000000000struct None : Interface { using Interface::Interface; auto load() -> void override { } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { return 0xff; } auto write(n16 address, n8 data) -> void override { } auto power() -> void override { } auto serialize(serializer& s) -> void override { } }; ares-126/ares/gb/cartridge/board/tama.cpp000066400000000000000000000220131415063341600203220ustar00rootroot00000000000000//U1: TAMA7: Mask ROM (512KB) //U2: TAMA5: Game Boy cartridge connector interface //U3: TAMA6: Toshiba TMP47C243M (4-bit MCU) //U4: RTC: Toshiba TC8521AM //note: the TMP47C243M's 2048 x 8-bit program ROM is currently undumped //as such, high level emulation is used as a necessary evil struct TAMA : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; Memory::Writable rtc; auto toBCD (n8 data) -> n8 { return (data / 10) * 16 + (data % 10); } auto fromBCD(n8 data) -> n8 { return (data / 16) * 10 + (data % 16); } auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); Interface::load(rtc, "time.rtc"); if(rtc.size() == 15) { io.rtc.year = fromBCD(rtc[0]); io.rtc.month = fromBCD(rtc[1]); io.rtc.day = fromBCD(rtc[2]); io.rtc.hour = fromBCD(rtc[3]); io.rtc.minute = fromBCD(rtc[4]); io.rtc.second = fromBCD(rtc[5]); io.rtc.meridian = rtc[6].bit(0); io.rtc.leapYear = rtc[6].bit(1,2); io.rtc.hourMode = rtc[6].bit(3); io.rtc.test = rtc[6].bit(4,7); n64 timestamp = 0; for(u32 index : range(8)) { timestamp.byte(index) = rtc[7 + index]; } n64 diff = chrono::timestamp() - timestamp; if(diff < 32 * 365 * 24 * 60 * 60) { while(diff >= 24 * 60 * 60) { tickDay(); diff -= 24 * 60 * 60; } while(diff >= 60 * 60) { tickHour(); diff -= 60 * 60; } while(diff >= 60) { tickMinute(); diff -= 60; } while(diff) { tickSecond(); diff -= 1; } } } } auto save() -> void override { Interface::save(ram, "save.ram"); Interface::save(rtc, "time.rtc"); if(rtc.size() == 15) { rtc[0] = toBCD(io.rtc.year); rtc[1] = toBCD(io.rtc.month); rtc[2] = toBCD(io.rtc.day); rtc[3] = toBCD(io.rtc.hour); rtc[4] = toBCD(io.rtc.minute); rtc[5] = toBCD(io.rtc.second); rtc[6] = io.rtc.meridian << 0 | io.rtc.leapYear << 1 | io.rtc.hourMode << 3 | io.rtc.test << 4; n64 timestamp = chrono::timestamp(); for(u32 index : range(8)) { rtc[7 + index] = timestamp.byte(index); } } } auto unload() -> void override { } auto main() -> void override { tickSecond(); step(cartridge.frequency()); } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x0000 && address <= 0x3fff) { return rom.read((n14)address); } if(address >= 0x4000 && address <= 0x7fff) { return rom.read(io.rom.bank << 14 | (n14)address); } if(address >= 0xa000 && address <= 0xbfff && (address & 1) == 0) { if(io.select == 0x0a) { return 0xf0 | io.ready; } if(io.mode == 0 || io.mode == 1) { if(io.select == 0x0c) { return 0xf0 | io.output.bit(0,3); } if(io.select == 0x0d) { return 0xf0 | io.output.bit(4,7); } } if(io.mode == 2 || io.mode == 4) { if(io.select == 0x0c || io.select == 0x0d) { n4 data; if(io.rtc.index == 0) data = io.rtc.minute % 10; if(io.rtc.index == 1) data = io.rtc.minute / 10; if(io.rtc.index == 2) data = io.rtc.hour % 10; if(io.rtc.index == 3) data = io.rtc.hour / 10; if(io.rtc.index == 4) data = io.rtc.day / 10; if(io.rtc.index == 5) data = io.rtc.day % 10; if(io.rtc.index == 6) data = io.rtc.month / 10; if(io.rtc.index == 7) data = io.rtc.month % 10; io.rtc.index++; return 0xf0 | data; } } return 0xff; } if(address >= 0xa000 && address <= 0xbfff && (address & 1) == 1) { return 0xff; } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0xa000 && address <= 0xbfff && (address & 1) == 0) { if(io.select == 0x00) { io.rom.bank.bit(0,3) = data.bit(0,3); } if(io.select == 0x01) { io.rom.bank.bit(4) = data.bit(0); } if(io.select == 0x04) { io.input.bit(0,3) = data.bit(0,3); } if(io.select == 0x05) { io.input.bit(4,7) = data.bit(0,3); } if(io.select == 0x06) { io.index.bit(4) = data.bit(0); io.mode = data.bit(1,3); } if(io.select == 0x07) { io.index.bit(0,3) = data.bit(0,3); if(io.mode == 0) { if(ram) ram.write(io.index, io.input); } if(io.mode == 1) { if(ram) io.output = ram.read(io.index); } if(io.mode == 2 && io.index == 0x04) { io.rtc.minute = fromBCD(io.input); } if(io.mode == 2 && io.index == 0x05) { io.rtc.hour = fromBCD(io.input); io.rtc.meridian = io.rtc.hour >= 12; } if(io.mode == 4 && io.index == 0x00 && io.input.bit(0,3) == 0x7) { n8 day = toBCD(io.rtc.day); day.bit(0,3) = io.input.bit(4,7); io.rtc.day = fromBCD(day); } if(io.mode == 4 && io.index == 0x00 && io.input.bit(0,3) == 0x8) { n8 day = toBCD(io.rtc.day); day.bit(4,7) = io.input.bit(4,7); io.rtc.day = fromBCD(day); } if(io.mode == 4 && io.index == 0x00 && io.input.bit(0,3) == 0x9) { n8 month = toBCD(io.rtc.month); month.bit(0,3) = io.input.bit(4,7); io.rtc.month = fromBCD(month); } if(io.mode == 4 && io.index == 0x00 && io.input.bit(0,3) == 0xa) { n8 month = toBCD(io.rtc.month); month.bit(4,7) = io.input.bit(4,7); io.rtc.month = fromBCD(month); } if(io.mode == 4 && io.index == 0x00 && io.input.bit(0,3) == 0xb) { n8 year = toBCD(io.rtc.year); year.bit(0,3) = io.input.bit(4,7); io.rtc.year = fromBCD(year); } if(io.mode == 4 && io.index == 0x00 && io.input.bit(0,3) == 0xc) { n8 year = toBCD(io.rtc.year); year.bit(4,7) = io.input.bit(4,7); io.rtc.year = fromBCD(year); } if(io.mode == 4 && io.index == 0x02 && io.input.bit(0,3) == 0xa) { io.rtc.hourMode = io.input.bit(4); io.rtc.second = 0; //hack: unclear where this is really being set (if it is at all) } if(io.mode == 4 && io.index == 0x02 && io.input.bit(0,3) == 0xb) { io.rtc.leapYear = data.bit(4,5); } if(io.mode == 4 && io.index == 0x02 && io.input.bit(0,3) == 0xe) { io.rtc.test = io.input.bit(4,7); } if(io.mode == 2 && io.index == 0x06) { io.rtc.index = 0; } } return; } if(address >= 0xa000 && address <= 0xbfff && (address & 1) == 1) { io.select = data.bit(0,3); if(io.select == 0x0a) { io.ready = true; } return; } } auto power() -> void override { io.ready = 0; io.select = 0; io.mode = 0; io.index = 0; io.input = 0; io.output = 0; io.rom.bank = 0; //io.rtc registers are initialized by load() } auto serialize(serializer& s) -> void override { s(ram); s(rtc); s(io.ready); s(io.select); s(io.mode); s(io.index); s(io.input); s(io.output); s(io.rom.bank); s(io.rtc.year); s(io.rtc.month); s(io.rtc.day); s(io.rtc.hour); s(io.rtc.minute); s(io.rtc.second); s(io.rtc.meridian); s(io.rtc.leapYear); s(io.rtc.hourMode); s(io.rtc.test); } auto tickSecond() -> void { if(++io.rtc.second >= 60) { io.rtc.second = 0; tickMinute(); } } auto tickMinute() -> void { if(++io.rtc.minute >= 60) { io.rtc.minute = 0; tickDay(); } } auto tickHour() -> void { if(io.rtc.hourMode == 0 && ++io.rtc.hour >= 12) { io.rtc.hour = 0; io.rtc.meridian++; } if(io.rtc.hourMode == 1 && ++io.rtc.hour >= 24) { io.rtc.hour = 0; io.rtc.meridian = io.rtc.hour >= 12; } if((io.rtc.hourMode == 0 && io.rtc.hour == 0 && io.rtc.meridian == 0) || (io.rtc.hourMode == 1 && io.rtc.hour == 0) ) { tickDay(); } } auto tickDay() -> void { u32 days[12] = {31, 28, 31, 30, 31, 30, 30, 31, 30, 31, 30, 31}; if(io.rtc.leapYear == 0) days[1] = 29; //extra day in February for leap years if(++io.rtc.day > days[(io.rtc.month - 1) % 12]) { io.rtc.day = 1; tickMonth(); } } auto tickMonth() -> void { if(++io.rtc.month > 12) { io.rtc.month = 1; io.rtc.leapYear++; tickYear(); } } auto tickYear() -> void { if(++io.rtc.year >= 100) { io.rtc.year = 0; } } struct IO { n1 ready; n4 select; n3 mode; n5 index; n8 input; n8 output; struct ROM { n5 bank; } rom; struct RTC { n8 year; //0 - 99 n8 month; //1 - 12 n8 day; //1 - 31 n8 hour; //0 - 23 n8 minute; //0 - 59 n8 second; //0 - 59 n1 meridian; //0 = AM; 1 = PM n2 leapYear; //0 = leap year; 1-3 = non-leap year n1 hourMode; //0 = 12-hour; 1 = 24-hour n4 test; n8 index; } rtc; } io; }; ares-126/ares/gb/cartridge/cartridge.cpp000066400000000000000000000040031415063341600202540ustar00rootroot00000000000000#include namespace ares::GameBoy { Cartridge& cartridge = cartridgeSlot.cartridge; #include "board/board.cpp" #include "slot.cpp" #include "memory.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{parent->family(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.board = pak->attribute("board"); board.reset(); if(information.board == "HuC1" ) board = new Board::HuC1{*this}; if(information.board == "HuC3" ) board = new Board::HuC3{*this}; if(information.board == "MBC1" ) board = new Board::MBC1{*this}; if(information.board == "MBC1#M") board = new Board::MBC1M{*this}; if(information.board == "MBC2" ) board = new Board::MBC2{*this}; if(information.board == "MBC3" ) board = new Board::MBC3{*this}; if(information.board == "MBC30" ) board = new Board::MBC3{*this}; if(information.board == "MBC5" ) board = new Board::MBC5{*this}; if(information.board == "MBC6" ) board = new Board::MBC6{*this}; if(information.board == "MBC7" ) board = new Board::MBC7{*this}; if(information.board == "MMM01" ) board = new Board::MMM01{*this}; if(information.board == "TAMA" ) board = new Board::TAMA{*this}; if(!board) board = new Board::Linear{*this}; board->pak = pak; board->load(); power(); } auto Cartridge::disconnect() -> void { if(!node) return; board->unload(); board->pak.reset(); board.reset(); pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; board->save(); } auto Cartridge::power() -> void { Thread::create(4 * 1024 * 1024, {&Cartridge::main, this}); bootromEnable = true; if(!board) board = new Board::None{*this}; board->power(); } auto Cartridge::main() -> void { board->main(); } auto Cartridge::step(u32 clocks) -> void { Thread::step(clocks); synchronize(cpu); } } ares-126/ares/gb/cartridge/cartridge.hpp000066400000000000000000000015231415063341600202650ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge : Thread { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //memory.cpp auto read(u32 cycle, n16 address, n8 data) -> n8; auto write(u32 cycle, n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Information { string title; string board; } information; //todo: this shouldn't be handled by the Cartridge class bool bootromEnable = true; unique_pointer board; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/gb/cartridge/memory.cpp000066400000000000000000000020321415063341600176200ustar00rootroot00000000000000auto Cartridge::read(u32 cycle, n16 address, n8 data) -> n8 { if(address == 0xff50 && cycle == 2) { return data; } if(bootromEnable) { if(address >= 0x0000 && address <= 0x00ff && cycle == 2) { return system.bootROM.read(address); } if(address >= 0x0200 && address <= 0x08ff && cycle == 2 && Model::GameBoyColor()) { return system.bootROM.read(address - 0x100); } } if(address >= 0x0000 && address <= 0x7fff && cycle == 2) { return board->read(address, data); } if(address >= 0xa000 && address <= 0xbfff && cycle == 2) { return board->read(address, data); } return data; } auto Cartridge::write(u32 cycle, n16 address, n8 data) -> void { if(bootromEnable && address == 0xff50 && cycle == 2) { bootromEnable = false; //does the written value matter? return; } if(address >= 0x0000 && address <= 0x7fff && cycle == 2) { return board->write(address, data); } if(address >= 0xa000 && address <= 0xbfff && cycle == 2) { return board->write(address, data); } } ares-126/ares/gb/cartridge/serialization.cpp000066400000000000000000000001701415063341600211660ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { Thread::serialize(s); s(bootromEnable); if(board) s(*board); } ares-126/ares/gb/cartridge/slot.cpp000066400000000000000000000011151415063341600172720ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(!Model::GameBoyColor() ? "Game Boy" : "Game Boy Color"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/gb/cartridge/slot.hpp000066400000000000000000000003471415063341600173050ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/gb/cpu/000077500000000000000000000000001415063341600144325ustar00rootroot00000000000000ares-126/ares/gb/cpu/cpu.cpp000066400000000000000000000077461415063341600157430ustar00rootroot00000000000000#include namespace ares::GameBoy { #define SP r.sp.word #define PC r.pc.word #include "io.cpp" #include "memory.cpp" #include "timing.cpp" #include "debugger.cpp" #include "serialization.cpp" CPU cpu; auto CPU::load(Node::Object parent) -> void { wram.allocate(!Model::GameBoyColor() ? 8_KiB : 32_KiB); hram.allocate(128); node = parent->append("CPU"); if(Model::GameBoy()) { version = node->append("Version", "DMG-CPU B"); version->setAllowedValues({ "DMG-CPU", "DMG-CPU A", "DMG-CPU B", "DMG-CPU C", "CPU MGB", }); } if(Model::SuperGameBoy()) { version = node->append("Version", "SGB-CPU 01"); version->setAllowedValues({ "SGB-CPU 01", "CPU SGB2" }); } if(Model::GameBoyColor()) { version = node->append("Version", "CPU CGB"); version->setAllowedValues({ "CPU CGB", "CPU CGB A", "CPU CGB B", "CPU CGB C", "CPU CGB D", "CPU CGB E", }); } debugger.load(node); } auto CPU::unload() -> void { wram.reset(); hram.reset(); node = {}; version = {}; debugger = {}; } auto CPU::main() -> void { if(status.hblankPending) { status.hblankPending = 0; hblankTrigger(); } //are interrupts enabled? if(r.ime) { //are any interrupts pending? if(status.interruptLatch) { debugger.interrupt("IRQ"); idle(); idle(); idle(); r.ime = 0; write(--SP, PC >> 8); //upper byte may write to IE before it is polled again n8 mask = status.interruptFlag & status.interruptEnable; write(--SP, PC >> 0); //lower byte write to IE has no effect if(mask) { u32 interruptID = bit::first(mask); //find highest priority interrupt lower(interruptID); PC = 0x0040 + interruptID * 8; } else { //if push(PCH) writes to IE and disables all requested interrupts, PC is forced to zero PC = 0x0000; } } } debugger.instruction(); instruction(); if(Model::SuperGameBoy()) { scheduler.exit(Event::Step); } } auto CPU::raised(u32 interruptID) const -> bool { return status.interruptFlag.bit(interruptID); } auto CPU::raise(u32 interruptID) -> void { status.interruptFlag.bit(interruptID) = 1; if(status.interruptEnable.bit(interruptID)) { r.halt = false; if(interruptID == Interrupt::Joypad) r.stop = false; } } auto CPU::lower(u32 interruptID) -> void { status.interruptFlag.bit(interruptID) = 0; } auto CPU::stoppable() -> bool { if(status.speedSwitch) { status.speedSwitch = 0; status.speedDouble ^= 1; if(status.speedDouble == 0) setFrequency(4 * 1024 * 1024); if(status.speedDouble == 1) setFrequency(8 * 1024 * 1024); return false; } return true; } auto CPU::power() -> void { Thread::create(4 * 1024 * 1024, {&CPU::main, this}); SM83::power(); for(auto& n : wram) n = 0x00; for(auto& n : hram) n = 0x00; status = {}; //note: this may not be accurate, DIV values at startup may be due to LCD delays? //but probably not, since "CPU CGB" differs from "CPU CGB [A-E]" //0146~0149 if(version->latch() == "DMG-CPU" ) status.div = 0x0146; //ffe6~ffe9 if(version->latch() == "DMG-CPU A" ) status.div = 0xffe6; if(version->latch() == "DMG-CPU B" ) status.div = 0xffe6; if(version->latch() == "DMG-CPU C" ) status.div = 0xffe6; if(version->latch() == "CPU MGB" ) status.div = 0xffe6; if(version->latch() == "SGB-CPU 01") status.div = 0xffe6; //unconfirmed if(version->latch() == "CPU SGB2" ) status.div = 0xffe6; //unconfirmed //0206~0209 if(version->latch() == "CPU CGB" ) status.div = 0x0206; //fffa~fffd if(version->latch() == "CPU CGB A" ) status.div = 0xfffa; if(version->latch() == "CPU CGB B" ) status.div = 0xfffa; if(version->latch() == "CPU CGB C" ) status.div = 0xfffa; if(version->latch() == "CPU CGB D" ) status.div = 0xfffa; if(version->latch() == "CPU CGB E" ) status.div = 0xfffa; } } ares-126/ares/gb/cpu/cpu.hpp000066400000000000000000000056771415063341600157510ustar00rootroot00000000000000struct CPU : SM83, Thread { Node::Object node; Node::Setting::String version; Memory::Writable wram; //GB = 8KB, GBC = 32KB Memory::Writable hram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory wram; Node::Debugger::Memory hram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; struct Interrupt { enum : u32 { /* 0 */ VerticalBlank, /* 1 */ Stat, /* 2 */ Timer, /* 3 */ Serial, /* 4 */ Joypad, };}; auto lowSpeed() const -> bool { return status.speedDouble == 0; } auto highSpeed() const -> bool { return status.speedDouble == 1; } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto raised(u32 interrupt) const -> bool; auto raise(u32 interrupt) -> void; auto lower(u32 interrupt) -> void; auto stoppable() -> bool override; auto power() -> void; auto serialize(serializer&) -> void; //io.cpp auto wramAddress(n13 address) const -> n16; auto input(n4 data) -> void; auto joypPoll() -> void; auto readIO(u32 cycle, n16 address, n8 data) -> n8; auto writeIO(u32 cycle, n16 address, n8 data) -> void; //memory.cpp auto stop() -> void override; auto halt() -> void override; auto idle() -> void override; auto haltBugTrigger() -> void override; auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto readDMA(n16 address, n8 data) -> n8; auto writeDMA(n13 address, n8 data) -> void; auto readDebugger(n16 address) -> n8 override; //timing.cpp auto step() -> void; auto step(u32 clocks) -> void; auto timer262144hz() -> void; auto timer65536hz() -> void; auto timer16384hz() -> void; auto timer8192hz() -> void; auto timer4096hz() -> void; auto timer1024hz() -> void; auto hblank() -> void; auto hblankTrigger() -> void; struct Status { n22 clock; n8 interruptLatch; n1 hblankPending; //$ff00 JOYP n4 joyp; n1 p14; n1 p15; //$ff01 SB n8 serialData; n4 serialBits; //$ff02 SC n1 serialClock; n1 serialSpeed; n1 serialTransfer; //$ff04 DIV n16 div; //$ff05 TIMA n8 tima; //$ff06 TMA n8 tma; //$ff07 TAC n2 timerClock; n1 timerEnable; //$ff0f IF n5 interruptFlag; //$ff4d KEY1 n1 speedSwitch; n1 speedDouble; //$ff51,$ff52 HDMA1,HDMA2 n16 dmaSource; //$ff53,$ff54 HDMA3,HDMA4 n16 dmaTarget; //$ff55 HDMA5 n7 dmaLength; n1 hdmaActive; //$ff6c ??? n1 ff6c; //$ff70 SVBK n3 wramBank = 1; //$ff72-$ff75 ??? n8 ff72; n8 ff73; n8 ff74; n3 ff75; //$ffff IE n8 interruptEnable; } status; }; extern CPU cpu; ares-126/ares/gb/cpu/debugger.cpp000066400000000000000000000024071415063341600167250ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { string origin = Model::SuperGameBoy() ? "SGB" : "CPU"; memory.wram = parent->append("CPU WRAM"); memory.wram->setSize(cpu.wram.size()); memory.wram->setRead([&](u32 address) -> u8 { return cpu.wram[address]; }); memory.wram->setWrite([&](u32 address, u8 data) -> void { cpu.wram[address] = data; }); memory.hram = parent->append("CPU HRAM"); memory.hram->setSize(cpu.hram.size()); memory.hram->setRead([&](u32 address) -> u8 { return cpu.hram[address]; }); memory.hram->setWrite([&](u32 address, u8 data) -> void { cpu.hram[address] = data; }); tracer.instruction = parent->append("Instruction", origin); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", origin); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.PC)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/gb/cpu/io.cpp000066400000000000000000000166211415063341600155530ustar00rootroot00000000000000auto CPU::wramAddress(n13 address) const -> n16 { if(address < 0x1000) return address; auto bank = status.wramBank + (status.wramBank == 0); return bank << 12 | (n12)address; } auto CPU::input(n4 data) -> void { status.joyp = data; } auto CPU::joypPoll() -> void { if(!Model::SuperGameBoy()) { system.controls.poll(); n4 dpad; dpad.bit(0) = !system.controls.rightLatch; dpad.bit(1) = !system.controls.leftLatch; dpad.bit(2) = !system.controls.upLatch; dpad.bit(3) = !system.controls.downLatch; n4 button; button.bit(0) = !system.controls.a->value(); button.bit(1) = !system.controls.b->value(); button.bit(2) = !system.controls.select->value(); button.bit(3) = !system.controls.start->value(); status.joyp = 0xf; if(status.p14 == 0) status.joyp &= dpad; if(status.p15 == 0) status.joyp &= button; } if(status.joyp != 0xf) raise(Interrupt::Joypad); } auto CPU::readIO(u32 cycle, n16 address, n8 data) -> n8 { if(address <= 0xbfff) return data; if(address >= 0xc000 && address <= 0xfdff && cycle == 2) return wram[wramAddress(address)]; if(address >= 0xff80 && address <= 0xfffe && cycle == 2) return hram[(n7)address]; if(address == 0xff00 && cycle == 2) { //JOYP joypPoll(); data.bit(0) = status.joyp.bit(0); data.bit(1) = status.joyp.bit(1); data.bit(2) = status.joyp.bit(2); data.bit(3) = status.joyp.bit(3); data.bit(4) = status.p14; data.bit(5) = status.p15; return data; } if(address == 0xff01 && cycle == 2) { //SB return status.serialData; } if(address == 0xff02 && cycle == 2) { //SC data.bit(0) = status.serialClock; data.bit(1) = status.serialSpeed | !Model::GameBoyColor(); data.bit(7) = status.serialTransfer; return data; } if(address == 0xff04 && cycle == 2) { //DIV return status.div.bit(8,15); } if(address == 0xff05 && cycle == 2) { //TIMA return status.tima; } if(address == 0xff06 && cycle == 2) { //TMA return status.tma; } if(address == 0xff07 && cycle == 2) { //TAC data.bit(0) = status.timerClock.bit(0); data.bit(1) = status.timerClock.bit(1); data.bit(2) = status.timerEnable; return data; } if(address == 0xff0f && cycle == 2) { //IF data.bit(0) = status.interruptFlag.bit(0); data.bit(1) = status.interruptFlag.bit(1); data.bit(2) = status.interruptFlag.bit(2); data.bit(3) = status.interruptFlag.bit(3); data.bit(4) = status.interruptFlag.bit(4); return data; } if(Model::GameBoyColor()) if(address == 0xff4d && cycle == 2) { //KEY1 data.bit(0) = status.speedSwitch; data.bit(7) = status.speedDouble; return data; } if(Model::GameBoyColor()) if(address == 0xff55 && cycle == 2) { //HDMA5 data.bit(0,6) = status.dmaLength; data.bit(7) = !status.hdmaActive; return data; } if(Model::GameBoyColor()) if(address == 0xff56 && cycle == 2) { //RP //unemulated return 0x02; } if(Model::GameBoyColor()) if(address == 0xff6c && cycle == 2) { //??? data.bit(0) = status.ff6c; return data; } if(Model::GameBoyColor()) if(address == 0xff70 && cycle == 2) { //SVBK return status.wramBank; } if(Model::GameBoyColor()) if(address == 0xff72 && cycle == 2) { //??? return status.ff72; } if(Model::GameBoyColor()) if(address == 0xff73 && cycle == 2) { //??? return status.ff73; } if(Model::GameBoyColor()) if(address == 0xff74 && cycle == 2) { //??? return status.ff74; } if(Model::GameBoyColor()) if(address == 0xff75 && cycle == 2) { //??? data.bit(4,6) = status.ff75; return data; } if(Model::GameBoyColor()) if(address == 0xff76 && cycle == 2) { //??? return 0xff; } if(Model::GameBoyColor()) if(address == 0xff77 && cycle == 2) { //??? return 0xff; } if(address == 0xffff && cycle == 2) { //IE return status.interruptEnable; } return data; } auto CPU::writeIO(u32 cycle, n16 address, n8 data) -> void { if(address <= 0xbfff) return; if(address >= 0xc000 && address <= 0xfdff && cycle == 2) { wram[wramAddress(address)] = data; return; } if(address >= 0xff80 && address <= 0xfffe && cycle == 2) { hram[(n7)address] = data; return; } if(address == 0xff00 && cycle == 2) { //JOYP status.p14 = data.bit(4); status.p15 = data.bit(5); if(Model::SuperGameBoy()) superGameBoy->joypWrite(status.p14, status.p15); return; } if(address == 0xff01 && cycle == 2) { //SB status.serialData = data; return; } if(address == 0xff02 && cycle == 2) { //SC status.serialClock = data.bit(0); status.serialSpeed = data.bit(1) & Model::GameBoyColor(); status.serialTransfer = data.bit(7); if(status.serialTransfer) status.serialBits = 8; return; } if(address == 0xff04 && cycle == 2) { //DIV status.div = 0; return; } if(address == 0xff05 && cycle == 2) { //TIMA status.tima = data; return; } if(address == 0xff06 && cycle == 2) { //TMA status.tma = data; return; } if(address == 0xff07 && cycle == 2) { //TAC status.timerClock = data.bit(0,1); status.timerEnable = data.bit(2); return; } if(address == 0xff0f && cycle == 2) { //IF status.interruptFlag = data.bit(0,4); return; } if(Model::GameBoyColor()) if(address == 0xff4d && cycle == 2) { //KEY1 status.speedSwitch = data.bit(0); return; } if(Model::GameBoyColor()) if(address == 0xff51 && cycle == 2) { //HDMA1 status.dmaSource.bit(8,15) = data.bit(0,7); return; } if(Model::GameBoyColor()) if(address == 0xff52 && cycle == 2) { //HDMA2 status.dmaSource.bit(4,7) = data.bit(4,7); return; } if(Model::GameBoyColor()) if(address == 0xff53 && cycle == 2) { //HDMA3 status.dmaTarget.bit(8,15) = data.bit(0,7); return; } if(Model::GameBoyColor()) if(address == 0xff54 && cycle == 2) { //HDMA4 status.dmaTarget.bit(4,7) = data.bit(4,7); return; } if(Model::GameBoyColor()) if(address == 0xff55 && cycle == 2) { //HDMA5 //1->0 transistion stops an active HDMA (and does not trigger GDMA) if(status.hdmaActive && !data.bit(7)) { status.dmaLength = data.bit(0,6); status.hdmaActive = 0; return; } status.dmaLength = data.bit(0,6); status.hdmaActive = data.bit(7); //GDMA if(!data.bit(7)) { do { for(u32 loop : range(16)) { writeDMA(status.dmaTarget++, readDMA(status.dmaSource++, 0xff)); } step(8 << status.speedDouble); } while(status.dmaLength--); } return; } if(Model::GameBoyColor()) if(address == 0xff56 && cycle == 2) { //RP return; } if(Model::GameBoyColor()) if(address == 0xff6c && cycle == 2) { //??? status.ff6c = data.bit(0); return; } if(Model::GameBoyColor()) if(address == 0xff72 && cycle == 2) { //??? status.ff72 = data; return; } if(Model::GameBoyColor()) if(address == 0xff73 && cycle == 2) { //??? status.ff73 = data; return; } if(Model::GameBoyColor()) if(address == 0xff74 && cycle == 2) { //??? status.ff74 = data; return; } if(Model::GameBoyColor()) if(address == 0xff75 && cycle == 2) { //??? status.ff75 = data.bit(4,6); return; } if(Model::GameBoyColor()) if(address == 0xff70 && cycle == 2) { //SVBK status.wramBank = data.bit(0,3); return; } if(address == 0xffff && cycle == 2) { //IE status.interruptEnable = data; return; } } ares-126/ares/gb/cpu/memory.cpp000066400000000000000000000036761415063341600164620ustar00rootroot00000000000000auto CPU::stop() -> void { idle(); if(Model::SuperGameBoy()) { scheduler.exit(Event::Step); } } auto CPU::halt() -> void { idle(); if(status.interruptLatch) r.halt = 0; if(Model::SuperGameBoy()) { scheduler.exit(Event::Step); } } auto CPU::haltBugTrigger() -> void { // halt bug is triggered when IME is off, and IE & IF != 0 // does not properly emulate two halts in a rom if(!r.ime && status.interruptLatch != 0) { r.haltBug = 1; } } auto CPU::idle() -> void { if(r.ei) r.ei = 0, r.ime = 1; step(); step(); status.interruptLatch = status.interruptFlag & status.interruptEnable; step(); step(); } auto CPU::read(n16 address) -> n8 { n8 data = 0xff; if(r.ei) r.ei = 0, r.ime = 1; data &= bus.read(0, address, data); step(); data &= bus.read(1, address, data); step(); data &= bus.read(2, address, data); status.interruptLatch = status.interruptFlag & status.interruptEnable; step(); data &= bus.read(3, address, data); step(); data &= bus.read(4, address, data); return data; } auto CPU::write(n16 address, n8 data) -> void { if(r.ei) r.ei = 0, r.ime = 1; bus.write(0, address, data); step(); bus.write(1, address, data); step(); bus.write(2, address, data); step(); bus.write(3, address, data); step(); bus.write(4, address, data); status.interruptLatch = status.interruptFlag & status.interruptEnable; } //VRAM DMA source can only be ROM or RAM auto CPU::readDMA(n16 address, n8 data) -> n8 { if(address < 0x8000) return bus.read(address, data); //0000-7fff if(address < 0xa000) return data; //8000-9fff if(address < 0xe000) return bus.read(address, data); //a000-dfff return data; //e000-ffff } //VRAM DMA target is always VRAM auto CPU::writeDMA(n13 address, n8 data) -> void { return bus.write(0x8000 | address, data); } auto CPU::readDebugger(n16 address) -> n8 { return bus.read(address, 0xff); } ares-126/ares/gb/cpu/serialization.cpp000066400000000000000000000014301415063341600200110ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { SM83::serialize(s); Thread::serialize(s); s(wram); s(hram); s(status.clock); s(status.interruptLatch); s(status.hblankPending); s(status.joyp); s(status.p14); s(status.p15); s(status.serialData); s(status.serialBits); s(status.serialClock); s(status.serialSpeed); s(status.serialTransfer); s(status.div); s(status.tima); s(status.tma); s(status.timerClock); s(status.timerEnable); s(status.interruptFlag); s(status.speedSwitch); s(status.speedDouble); s(status.dmaSource); s(status.dmaTarget); s(status.dmaLength); s(status.hdmaActive); s(status.ff6c); s(status.wramBank); s(status.ff72); s(status.ff73); s(status.ff74); s(status.ff75); s(status.interruptEnable); } ares-126/ares/gb/cpu/timing.cpp000066400000000000000000000040301415063341600164220ustar00rootroot00000000000000//70224 clocks/frame // 456 clocks/scanline // 154 scanlines/frame auto CPU::step() -> void { step(1); } auto CPU::step(u32 clocks) -> void { for(auto n : range(clocks)) { status.div++; if((n4 )status.div == 0) timer262144hz(); if((n6 )status.div == 0) timer65536hz(); if((n8 )status.div == 0) timer16384hz(); if((n9 )status.div == 0) timer8192hz(); if((n10)status.div == 0) timer4096hz(); if((n12)status.div == 0) timer1024hz(); Thread::step(1); Thread::synchronize(); } if(Model::SuperGameBoy()) { system.information.clocksExecuted += clocks; } } auto CPU::timer262144hz() -> void { if(status.timerEnable && status.timerClock == 1) { if(++status.tima == 0) { status.tima = status.tma; raise(Interrupt::Timer); } } } auto CPU::timer65536hz() -> void { if(status.timerEnable && status.timerClock == 2) { if(++status.tima == 0) { status.tima = status.tma; raise(Interrupt::Timer); } } } auto CPU::timer16384hz() -> void { if(status.timerEnable && status.timerClock == 3) { if(++status.tima == 0) { status.tima = status.tma; raise(Interrupt::Timer); } } } auto CPU::timer8192hz() -> void { if(status.serialTransfer && status.serialClock) { status.serialData <<= 1; status.serialData |= 1; if(--status.serialBits == 0) { status.serialTransfer = 0; raise(Interrupt::Serial); } } } auto CPU::timer4096hz() -> void { if(status.timerEnable && status.timerClock == 0) { if(++status.tima == 0) { status.tima = status.tma; raise(Interrupt::Timer); } } } auto CPU::timer1024hz() -> void { joypPoll(); } auto CPU::hblank() -> void { status.hblankPending = 1; } auto CPU::hblankTrigger() -> void { if(status.hdmaActive && ppu.status.ly < 144) { for(u32 loop : range(16)) { writeDMA(status.dmaTarget++, readDMA(status.dmaSource++, 0xff)); if(loop & 1) step(1 << status.speedDouble); } if(status.dmaLength-- == 0) { status.hdmaActive = 0; } } } ares-126/ares/gb/gb.hpp000066400000000000000000000015571415063341600147540ustar00rootroot00000000000000#pragma once //started: 2010-12-27 #include #include #include namespace ares::GameBoy { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto GameBoy() -> bool; inline static auto GameBoyColor() -> bool; inline static auto SuperGameBoy() -> bool; }; struct SuperGameBoyInterface { virtual auto ppuHreset() -> void = 0; virtual auto ppuVreset() -> void = 0; virtual auto ppuWrite(n2 color) -> void = 0; virtual auto joypWrite(n1 p14, n1 p15) -> void = 0; }; #include #include #include #include #include #include } ares-126/ares/gb/ppu/000077500000000000000000000000001415063341600144475ustar00rootroot00000000000000ares-126/ares/gb/ppu/cgb.cpp000066400000000000000000000100211415063341600157000ustar00rootroot00000000000000//BG attributes: //0x80: 0 = OAM priority, 1 = BG priority //0x40: vertical flip //0x20: horizontal flip //0x08: VRAM bank# //0x07: palette# //OB attributes: //0x80: 0 = OBJ above BG, 1 = BG above OBJ //0x40: vertical flip //0x20: horizontal flip //0x08: VRAM bank# //0x07: palette# auto PPU::readTileCGB(bool select, u32 x, u32 y, n16& tiledata, n8& attributes) -> void { n14 tilemapAddress = 0x1800 + (select << 10); tilemapAddress += (((y >> 3) << 5) + (x >> 3)) & 0x03ff; n8 tile = vram[0x0000 + tilemapAddress]; attributes = vram[0x2000 + tilemapAddress]; n14 tiledataAddress = attributes.bit(3) ? 0x2000 : 0x0000; if(status.bgTiledataSelect == 0) { tiledataAddress += 0x1000 + (i8(tile) << 4); } else { tiledataAddress += 0x0000 + (n8(tile) << 4); } if(attributes.bit(6)) y ^= 7; tiledataAddress += (y & 7) << 1; tiledata.byte(0) = vram[tiledataAddress + 0]; tiledata.byte(1) = vram[tiledataAddress + 1]; if(attributes.bit(5)) tiledata = hflip(tiledata); } auto PPU::scanlineCGB() -> void { px = 0; const s32 Height = (status.obSize == 0 ? 8 : 16); sprites = 0; //find first ten sprites on this scanline for(u32 n = 0; n < 40 * 4; n += 4) { Sprite& s = sprite[sprites]; s.y = oam[n + 0] - 16; s.x = oam[n + 1] - 8; s.tile = oam[n + 2] & ~status.obSize; s.attributes = oam[n + 3]; if(s32(status.ly) < s.y) continue; if(s32(status.ly) >= s.y + Height) continue; s.y = status.ly - s.y; if(s.attributes.bit(6)) s.y ^= Height - 1; n14 tiledataAddress = (s.attributes.bit(3) ? 0x2000 : 0x0000) + (s.tile << 4) + (s.y << 1); s.tiledata.byte(0) = vram[tiledataAddress + 0]; s.tiledata.byte(1) = vram[tiledataAddress + 1]; if(s.attributes.bit(5)) s.tiledata = hflip(s.tiledata); if(++sprites == 10) break; } } auto PPU::runCGB() -> void { bg = {}; ob = {}; n15 color = 0x7fff; runBackgroundCGB(); if(latch.windowDisplayEnable) runWindowCGB(); if(status.obEnable) runObjectsCGB(); if(ob.palette == 0) { color = bg.color; } else if(bg.palette == 0) { color = ob.color; } else if(status.bgEnable == 0) { color = ob.color; } else if(bg.priority) { color = bg.color; } else if(ob.priority) { color = ob.color; } else { color = bg.color; } if(Model::GameBoyColor()) { auto output = screen->pixels().data() + status.ly * 160 + px++; *output = color; } } auto PPU::runBackgroundCGB() -> void { n8 scrollY = status.ly + status.scy; n8 scrollX = px + status.scx; n3 tileX = scrollX & 7; if(tileX == 0 || px == 0) readTileCGB(status.bgTilemapSelect, scrollX, scrollY, background.tiledata, background.attributes); n2 index; index.bit(0) = background.tiledata.bit( 7 - tileX); index.bit(1) = background.tiledata.bit(15 - tileX); n5 palette = background.attributes.bit(0,2) << 2 | index; bg.color = bgpd[palette]; bg.palette = index; bg.priority = background.attributes.bit(7); } auto PPU::runWindowCGB() -> void { if(status.ly < status.wy) return; if(px + 7 < status.wx) return; if(px + 7 == status.wx) latch.wy++; n8 scrollY = latch.wy - 1; n8 scrollX = px + 7 - latch.wx; n3 tileX = scrollX & 7; if(tileX == 0 || px == 0) readTileCGB(status.windowTilemapSelect, scrollX, scrollY, window.tiledata, window.attributes); n2 index; index.bit(0) = window.tiledata.bit( 7 - tileX); index.bit(1) = window.tiledata.bit(15 - tileX); n5 palette = window.attributes.bit(0,2) << 2 | index; bg.color = bgpd[palette]; bg.palette = index; bg.priority = window.attributes.bit(7); } auto PPU::runObjectsCGB() -> void { //render backwards, so that first sprite has priority for(s32 n = sprites - 1; n >= 0; n--) { Sprite& s = sprite[n]; s32 tileX = px - s.x; if(tileX < 0 || tileX > 7) continue; n2 index; index.bit(0) = s.tiledata.bit( 7 - tileX); index.bit(1) = s.tiledata.bit(15 - tileX); if(index == 0) continue; n5 palette = s.attributes.bit(0,2) << 2 | index; ob.color = obpd[palette]; ob.palette = index; ob.priority = !s.attributes.bit(7); } } ares-126/ares/gb/ppu/color.cpp000066400000000000000000000033111415063341600162670ustar00rootroot00000000000000auto PPU::colorGameBoy(n32 color) -> n64 { if(colorEmulationDMG->value() == "Game Boy") { const n8 monochrome[4][3] = { {0xae, 0xd9, 0x27}, {0x58, 0xa0, 0x28}, {0x20, 0x62, 0x29}, {0x1a, 0x45, 0x2a}, }; n64 R = monochrome[color][0] * 0x0101; n64 G = monochrome[color][1] * 0x0101; n64 B = monochrome[color][2] * 0x0101; return R << 32 | G << 16 | B << 0; } if(colorEmulationDMG->value() == "Game Boy Pocket") { const n8 monochrome[4][3] = { {0xe0, 0xdb, 0xcd}, {0xa8, 0x9f, 0x94}, {0x70, 0x6b, 0x66}, {0x2b, 0x2b, 0x26}, }; n64 R = monochrome[color][0] * 0x0101; n64 G = monochrome[color][1] * 0x0101; n64 B = monochrome[color][2] * 0x0101; return R << 32 | G << 16 | B << 0; } if(colorEmulationDMG->value() == "RGB") { const n8 monochrome[4][3] = { {0xff, 0xff, 0xff}, {0xaa, 0xaa, 0xaa}, {0x55, 0x55, 0x55}, {0x00, 0x00, 0x00}, }; n64 R = monochrome[color][0] * 0x0101; n64 G = monochrome[color][1] * 0x0101; n64 B = monochrome[color][2] * 0x0101; return R << 32 | G << 16 | B << 0; } return 0; } auto PPU::colorGameBoyColor(n32 color) -> n64 { n32 r = color.bit( 0, 4); n32 g = color.bit( 5, 9); n32 b = color.bit(10,14); n64 R = image::normalize(r, 5, 16); n64 G = image::normalize(g, 5, 16); n64 B = image::normalize(b, 5, 16); if(colorEmulationCGB->value()) { R = (r * 26 + g * 4 + b * 2); G = ( g * 24 + b * 8); B = (r * 6 + g * 4 + b * 22); R = image::normalize(min(960, R), 10, 16); G = image::normalize(min(960, G), 10, 16); B = image::normalize(min(960, B), 10, 16); } return R << 32 | G << 16 | B << 0; } ares-126/ares/gb/ppu/debugger.cpp000066400000000000000000000035711415063341600167450ustar00rootroot00000000000000auto PPU::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("PPU VRAM"); memory.vram->setSize(ppu.vram.size()); memory.vram->setRead([&](u32 address) -> u8 { return ppu.vram[address]; }); memory.vram->setWrite([&](u32 address, u8 data) -> void { ppu.vram[address] = data; }); memory.oam = parent->append("PPU OAM"); memory.oam->setSize(ppu.oam.size()); memory.oam->setRead([&](u32 address) -> u8 { return ppu.oam[address]; }); memory.oam->setWrite([&](u32 address, u8 data) -> void { ppu.oam[address] = data; }); memory.bgp = parent->append("PPU BGP"); memory.bgp->setSize(ppu.bgp.size()); memory.bgp->setRead([&](u32 address) -> u8 { return ppu.bgp[address]; }); memory.bgp->setWrite([&](u32 address, u8 data) -> void { ppu.bgp[address] = data; }); memory.obp = parent->append("PPU OBP"); memory.obp->setSize(ppu.obp.size()); memory.obp->setRead([&](u32 address) -> u8 { return ppu.obp[address]; }); memory.obp->setWrite([&](u32 address, u8 data) -> void { ppu.obp[address] = data; }); if(!Model::GameBoyColor()) return; memory.bgpd = parent->append("PPU BGPD"); memory.bgpd->setSize(ppu.bgpd.size() << 1); memory.bgpd->setRead([&](u32 address) -> u8 { return ppu.bgpd[address >> 1].byte(address & 1); }); memory.bgpd->setWrite([&](u32 address, u8 data) -> void { ppu.bgpd[address >> 1].byte(address & 1) = data; }); memory.obpd = parent->append("PPU OBPD"); memory.obpd->setSize(ppu.obpd.size() << 1); memory.obpd->setRead([&](u32 address) -> u8 { return ppu.obpd[address >> 1].byte(address & 1); }); memory.obpd->setWrite([&](u32 address, u8 data) -> void { ppu.obpd[address >> 1].byte(address & 1) = data; }); } ares-126/ares/gb/ppu/dmg.cpp000066400000000000000000000070731415063341600157310ustar00rootroot00000000000000//OB attributes: //0x80: 0 = OBJ above BG, 1 = BG above OBJ //0x40: vertical flip //0x20: horizontal flip //0x10: palette# auto PPU::readTileDMG(bool select, u32 x, u32 y, n16& tiledata) -> void { n13 tilemapAddress = 0x1800 + (select << 10); tilemapAddress += (((y >> 3) << 5) + (x >> 3)) & 0x03ff; n8 tile = vram[tilemapAddress]; n13 tiledataAddress; if(status.bgTiledataSelect == 0) { tiledataAddress = 0x1000 + (i8(tile) << 4); } else { tiledataAddress = 0x0000 + (n8(tile) << 4); } tiledataAddress += (y & 7) << 1; tiledata.byte(0) = vram[tiledataAddress + 0]; tiledata.byte(1) = vram[tiledataAddress + 1]; } auto PPU::scanlineDMG() -> void { px = 0; const s32 Height = (status.obSize == 0 ? 8 : 16); sprites = 0; //find first ten sprites on this scanline for(u32 n = 0; n < 40 * 4; n += 4) { Sprite& s = sprite[sprites]; s.y = oam[n + 0] - 16; s.x = oam[n + 1] - 8; s.tile = oam[n + 2] & ~status.obSize; s.attributes = oam[n + 3]; if(s32(status.ly) < s.y) continue; if(s32(status.ly) >= s.y + Height) continue; s.y = s32(status.ly) - s.y; if(s.attributes.bit(6)) s.y ^= Height - 1; n13 tiledataAddress = (s.tile << 4) + (s.y << 1); s.tiledata.byte(0) = vram[tiledataAddress + 0]; s.tiledata.byte(1) = vram[tiledataAddress + 1]; if(s.attributes.bit(5)) s.tiledata = hflip(s.tiledata); if(++sprites == 10) break; } //sort by X-coordinate sort(sprite, sprites, [](auto l, auto r) { return l.x < r.x; }); } auto PPU::runDMG() -> void { bg = {}; ob = {}; n2 color = 0; if(status.bgEnable) runBackgroundDMG(); if(latch.windowDisplayEnable) runWindowDMG(); if(status.obEnable) runObjectsDMG(); if(ob.palette == 0) { color = bg.color; } else if(bg.palette == 0) { color = ob.color; } else if(ob.priority) { color = ob.color; } else { color = bg.color; } if(Model::GameBoy()) { auto output = screen->pixels().data() + status.ly * 160 + px++; //LCD is still blank during the first frame if(!latch.displayEnable) *output = color; } if(Model::SuperGameBoy()) { superGameBoy->ppuWrite(color); px++; } } auto PPU::runBackgroundDMG() -> void { n8 scrollY = status.ly + status.scy; n8 scrollX = px + status.scx; n3 tileX = scrollX & 7; if(tileX == 0 || px == 0) readTileDMG(status.bgTilemapSelect, scrollX, scrollY, background.tiledata); n2 index; index.bit(0) = background.tiledata.bit( 7 - tileX); index.bit(1) = background.tiledata.bit(15 - tileX); bg.color = bgp[index]; bg.palette = index; } auto PPU::runWindowDMG() -> void { if(status.ly < status.wy) return; if(px + 7 < status.wx) return; if(px + 7 == status.wx) latch.wy++; if(!status.bgEnable) return; n8 scrollY = latch.wy - 1; n8 scrollX = px + 7 - latch.wx; n3 tileX = scrollX & 7; if(tileX == 0 || px == 0) readTileDMG(status.windowTilemapSelect, scrollX, scrollY, window.tiledata); n2 index; index.bit(0) = window.tiledata.bit( 7 - tileX); index.bit(1) = window.tiledata.bit(15 - tileX); bg.color = bgp[index]; bg.palette = index; } auto PPU::runObjectsDMG() -> void { //render backwards, so that first sprite has priority for(s32 n = sprites - 1; n >= 0; n--) { Sprite& s = sprite[n]; s32 tileX = px - s.x; if(tileX < 0 || tileX > 7) continue; n2 index; index.bit(0) = s.tiledata.bit( 7 - tileX); index.bit(1) = s.tiledata.bit(15 - tileX); if(index == 0) continue; n3 palette = s.attributes.bit(4) << 2 | index; ob.color = obp[palette]; ob.palette = index; ob.priority = !s.attributes.bit(7); } } ares-126/ares/gb/ppu/io.cpp000066400000000000000000000152441415063341600155700ustar00rootroot00000000000000auto PPU::vramAddress(n13 address) const -> n16 { return status.vramBank << 13 | address; } auto PPU::readIO(u32 cycle, n16 address, n8 data) -> n8 { if(address >= 0x8000 && address <= 0x9fff && cycle == 2) { if(!canAccessVRAM()) return data; return vram[vramAddress(address)]; } if(address >= 0xfe00 && address <= 0xfe9f && cycle == 2) { if(!canAccessOAM()) return data; return oam[(n8)address]; } if(address < 0xff40 || address > 0xff7f) return data; if(address == 0xff40 && cycle == 2) { //LCDC data.bit(0) = status.bgEnable; data.bit(1) = status.obEnable; data.bit(2) = status.obSize; data.bit(3) = status.bgTilemapSelect; data.bit(4) = status.bgTiledataSelect; data.bit(5) = status.windowDisplayEnable; data.bit(6) = status.windowTilemapSelect; data.bit(7) = status.displayEnable; return data; } if(address == 0xff41 && cycle == 2) { //STAT data.bit(0) = history.mode.bit(8); //status.mode as of 4-cycles ago data.bit(1) = history.mode.bit(9); data.bit(2) = compareLYC(); data.bit(3) = status.interruptHblank; data.bit(4) = status.interruptVblank; data.bit(5) = status.interruptOAM; data.bit(6) = status.interruptLYC; data.bit(7) = 1; return data; } if(address == 0xff42 && cycle == 2) { //SCY return status.scy; } if(address == 0xff43 && cycle == 2) { //SCX return status.scx; } if(address == 0xff44 && cycle == 2) { //LY return getLY(); } if(address == 0xff45 && cycle == 2) { //LYC return status.lyc; } if(address == 0xff46 && cycle == 2) { //DMA data = status.dmaBank; } if(address == 0xff47 && cycle == 2) { //BGP data.bit(0,1) = bgp[0]; data.bit(2,3) = bgp[1]; data.bit(4,5) = bgp[2]; data.bit(6,7) = bgp[3]; return data; } if(address == 0xff48 && cycle == 2) { //OBP0 data.bit(0,1) = obp[0]; data.bit(2,3) = obp[1]; data.bit(4,5) = obp[2]; data.bit(6,7) = obp[3]; return data; } if(address == 0xff49 && cycle == 2) { //OBP1 data.bit(0,1) = obp[4]; data.bit(2,3) = obp[5]; data.bit(4,5) = obp[6]; data.bit(6,7) = obp[7]; return data; } if(address == 0xff4a && cycle == 2) { //WY return status.wy; } if(address == 0xff4b && cycle == 2) { //WX return status.wx; } if(Model::GameBoyColor()) if(address == 0xff4f && cycle == 2) { //VBK return status.vramBank; } if(Model::GameBoyColor()) if(address == 0xff68 && cycle == 2) { //BGPI data.bit(0,5) = status.bgpi; data.bit(7) = status.bgpiIncrement; return data; } if(Model::GameBoyColor()) if(address == 0xff69 && cycle == 2) { //BGPD return bgpd[status.bgpi >> 1].byte(status.bgpi & 1); } if(Model::GameBoyColor()) if(address == 0xff6a && cycle == 2) { //OBPI data.bit(0,5) = status.obpi; data.bit(7) = status.obpiIncrement; return data; } if(Model::GameBoyColor()) if(address == 0xff6b && cycle == 2) { //OBPD return obpd[status.obpi >> 1].byte(status.obpi & 1); } return data; } auto PPU::writeIO(u32 cycle, n16 address, n8 data) -> void { if(address >= 0x8000 && address <= 0x9fff && cycle == 2) { vram[vramAddress(address)] = data; return; } if(address >= 0xfe00 && address <= 0xfe9f && cycle == 2) { if(status.dmaActive && status.dmaClock >= 8) return; oam[(n8)address] = data; return; } if(address < 0xff40 || address > 0xff7f) return; if(address == 0xff40 && cycle == 4) { //LCDC if(status.displayEnable != data.bit(7)) { status.mode = 0; status.ly = 0; status.lx = 0; if(data.bit(7)) latch.displayEnable = 1; //restart cothread to begin new frame auto clock = Thread::clock(); Thread::create(4 * 1024 * 1024, {&PPU::main, this}); Thread::setClock(clock); } status.bgEnable = data.bit(0); status.obEnable = data.bit(1); status.obSize = data.bit(2); status.bgTilemapSelect = data.bit(3); status.bgTiledataSelect = data.bit(4); status.windowDisplayEnable = data.bit(5); status.windowTilemapSelect = data.bit(6); status.displayEnable = data.bit(7); return; } if(!Model::GameBoyColor()) if(address == 0xff41 && cycle == 2) { //STAT //hardware bug: writes to STAT on non-CGB hardware force-enable flags for 1 T-cycle. //this can generate spurious interrupts if the STAT line is currently low. status.interruptHblank = 1; status.interruptVblank = 1; status.interruptOAM = 1; status.interruptLYC = 1; return; } if(address == 0xff41 && cycle == 4) { //STAT status.interruptHblank = data.bit(3); status.interruptVblank = data.bit(4); status.interruptOAM = data.bit(5); status.interruptLYC = data.bit(6); return; } if(address == 0xff42 && cycle == 2) { //SCY status.scy = data; return; } if(address == 0xff43 && cycle == 2) { //SCX status.scx = data; return; } if(address == 0xff45 && cycle == 2) { //LYC status.lyc = data; return; } if(address == 0xff46 && cycle == 2) { //DMA status.dmaBank = data; status.dmaActive = 1; status.dmaClock = 0; return; } if(address == 0xff47 && cycle == 2) { //BGP bgp[0] = data.bit(0,1); bgp[1] = data.bit(2,3); bgp[2] = data.bit(4,5); bgp[3] = data.bit(6,7); return; } if(address == 0xff48 && cycle == 2) { //OBP0 obp[0] = data.bit(0,1); obp[1] = data.bit(2,3); obp[2] = data.bit(4,5); obp[3] = data.bit(6,7); return; } if(address == 0xff49 && cycle == 2) { //OBP1 obp[4] = data.bit(0,1); obp[5] = data.bit(2,3); obp[6] = data.bit(4,5); obp[7] = data.bit(6,7); return; } if(address == 0xff4a && cycle == 2) { //WY status.wy = data; return; } if(address == 0xff4b && cycle == 2) { //WX status.wx = data; return; } if(Model::GameBoyColor()) if(address == 0xff4f && cycle == 2) { //VBK status.vramBank = data.bit(0); return; } if(Model::GameBoyColor()) if(address == 0xff68 && cycle == 2) { //BGPI status.bgpi = data.bit(0,5); status.bgpiIncrement = data.bit(7); return; } if(Model::GameBoyColor()) if(address == 0xff69 && cycle == 2) { //BGPD bgpd[status.bgpi >> 1].byte(status.bgpi & 1) = data; if(status.bgpiIncrement) status.bgpi++; return; } if(Model::GameBoyColor()) if(address == 0xff6a && cycle == 2) { //OBPI status.obpi = data.bit(0,5); status.obpiIncrement = data.bit(7); } if(Model::GameBoyColor()) if(address == 0xff6b && cycle == 2) { //OBPD obpd[status.obpi >> 1].byte(status.obpi & 1) = data; if(status.obpiIncrement) status.obpi++; } } ares-126/ares/gb/ppu/ppu.cpp000066400000000000000000000133151415063341600157620ustar00rootroot00000000000000#include namespace ares::GameBoy { PPU ppu; #include "timing.cpp" #include "io.cpp" #include "dmg.cpp" #include "cgb.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto PPU::load(Node::Object parent) -> void { vram.allocate(!Model::GameBoyColor() ? 8_KiB : 16_KiB); oam.allocate(160); bgp.allocate(4); obp.allocate(8); bgpd.allocate(32); obpd.allocate(32); node = parent->append("PPU"); if(Model::GameBoy() || Model::GameBoyColor()) { screen = node->append("Screen", 160, 144); screen->setViewport(0, 0, 160, 144); screen->setSize(160, 144); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); if(Model::GameBoy()) { screen->colors(1 << 2, {&PPU::colorGameBoy, this}); screen->setFillColor(0); colorEmulationDMG = screen->append("Color Emulation", "Game Boy", [&](auto value) { screen->resetPalette(); }); colorEmulationDMG->setAllowedValues({"Game Boy", "Game Boy Pocket", "RGB"}); colorEmulationDMG->setDynamic(true); interframeBlending = screen->append("Interframe Blending", true, [&](auto value) { screen->setInterframeBlending(value); }); interframeBlending->setDynamic(true); } if(Model::GameBoyColor()) { screen->colors(1 << 15, {&PPU::colorGameBoyColor, this}); screen->setFillColor(0x7fff); colorEmulationCGB = screen->append("Color Emulation", true, [&](auto value) { screen->resetPalette(); }); colorEmulationCGB->setDynamic(true); interframeBlending = screen->append("Interframe Blending", true, [&](auto value) { screen->setInterframeBlending(value); }); interframeBlending->setDynamic(true); } } debugger.load(node); } auto PPU::unload() -> void { debugger = {}; colorEmulationDMG.reset(); colorEmulationCGB.reset(); interframeBlending.reset(); if(screen) screen->quit(); node->remove(screen); screen.reset(); node.reset(); vram.reset(); oam.reset(); bgp.reset(); obp.reset(); bgpd.reset(); obpd.reset(); } auto PPU::main() -> void { if(!status.displayEnable) { step(456 * 154); if(screen) screen->frame(); scheduler.exit(Event::Frame); return; } status.lx = 0; latch.windowDisplayEnable = status.windowDisplayEnable; latch.wx = status.wx; if(status.ly == 0) { latch.wy = 0; } if(latch.displayEnable && status.ly == 0) { mode(0); step(72); mode(3); step(172); mode(0); cpu.hblank(); step(456 - 8 - status.lx); } else if(status.ly <= 143) { mode(2); scanline(); step(80); if(status.ly >= status.wy && status.wx < 7) latch.wy++; mode(3); for(auto n : range(160)) { run(); step(1); } step(12); mode(0); cpu.hblank(); step(456 - status.lx); } else { mode(1); step(456); } status.ly++; if(status.ly == 144) { cpu.raise(CPU::Interrupt::VerticalBlank); if(screen) screen->frame(); scheduler.exit(Event::Frame); latch.displayEnable = 0; } if(status.ly == 154) { status.ly = 0; } } auto PPU::mode(n2 mode) -> void { if(status.mode == 0 && mode != 0) { if(Model::SuperGameBoy()) superGameBoy->ppuHreset(); } if(status.mode == 1 && mode != 1) { if(Model::SuperGameBoy()) superGameBoy->ppuVreset(); } status.mode = mode; } auto PPU::stat() -> void { if(!status.displayEnable) return; bool irq = status.irq; status.irq = status.interruptHblank && status.mode == 0; status.irq |= status.interruptVblank && status.mode == 1; status.irq |= status.interruptOAM && triggerOAM(); status.irq |= status.interruptLYC && compareLYC(); if(!irq && status.irq) cpu.raise(CPU::Interrupt::Stat); } auto PPU::step(u32 clocks) -> void { while(clocks--) { history.mode = history.mode << 2 | status.mode; stat(); if(status.dmaActive) { u32 hi = status.dmaClock++; u32 lo = hi & (cpu.status.speedDouble ? 1 : 3); hi >>= cpu.status.speedDouble ? 1 : 2; if(lo == 0) { if(hi == 0) { //warm-up } else if(hi == 161) { //cool-down; disable status.dmaActive = 0; } else { n8 bank = status.dmaBank; if(bank == 0xfe) bank = 0xde; //OAM DMA cannot reference OAM, I/O, or HRAM: if(bank == 0xff) bank = 0xdf; //it accesses HRAM instead. n8 data = bus.read(bank << 8 | hi - 1, 0xff); oam[hi - 1] = data; } } } status.lx++; Thread::step(1); Thread::synchronize(cpu); } } //flips 2bpp tiledata line horizontally auto PPU::hflip(n16 tiledata) const -> n16 { return tiledata >> 7 & 0x0101 | tiledata >> 5 & 0x0202 | tiledata >> 3 & 0x0404 | tiledata >> 1 & 0x0808 | tiledata << 1 & 0x1010 | tiledata << 3 & 0x2020 | tiledata << 5 & 0x4040 | tiledata << 7 & 0x8080; } auto PPU::power() -> void { Thread::create(4 * 1024 * 1024, {&PPU::main, this}); if(screen) screen->power(); if(Model::GameBoyColor()) { scanline = {&PPU::scanlineCGB, this}; run = {&PPU::runCGB, this}; } else { scanline = {&PPU::scanlineDMG, this}; run = {&PPU::runDMG, this}; } for(auto& n : vram) n = 0x00; for(auto& n : oam ) n = 0x00; for(auto& n : bgp ) n = 0; for(auto& n : obp ) n = 3; for(auto& n : bgpd) n = 0x0000; for(auto& n : obpd) n = 0x0000; status = {}; latch = {}; history = {}; bg.color = 0; bg.palette = 0; bg.priority = 0; ob.color = 0; ob.palette = 0; ob.priority = 0; for(auto& s : sprite) s = {}; sprites = 0; background = {}; window = {}; } } ares-126/ares/gb/ppu/ppu.hpp000066400000000000000000000066531415063341600157760ustar00rootroot00000000000000struct PPU : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::String colorEmulationDMG; Node::Setting::Boolean colorEmulationCGB; Node::Setting::Boolean interframeBlending; Memory::Writable vram; //GB = 8KB, GBC = 16KB Memory::Writable oam; Memory::Writable bgp; Memory::Writable obp; Memory::Writable bgpd; Memory::Writable obpd; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory oam; Node::Debugger::Memory bgp; Node::Debugger::Memory obp; Node::Debugger::Memory bgpd; Node::Debugger::Memory obpd; } memory; } debugger; //ppu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto mode(n2 mode) -> void; auto stat() -> void; auto step(u32 clocks) -> void; auto hflip(n16 tiledata) const -> n16; auto power() -> void; //timing.cpp auto canAccessVRAM() const -> bool; auto canAccessOAM() const -> bool; auto compareLYC() const -> bool; auto getLY() const -> n8; auto triggerOAM() const -> bool; //io.cpp auto vramAddress(n13 address) const -> n16; auto readIO(u32 cycle, n16 address, n8 data) -> n8; auto writeIO(u32 cycle, n16 address, n8 data) -> void; //dmg.cpp auto readTileDMG(bool select, u32 x, u32 y, n16& tiledata) -> void; auto scanlineDMG() -> void; auto runDMG() -> void; auto runBackgroundDMG() -> void; auto runWindowDMG() -> void; auto runObjectsDMG() -> void; //cgb.cpp auto readTileCGB(bool select, u32 x, u32 y, n16& tiledata, n8& attributes) -> void; auto scanlineCGB() -> void; auto runCGB() -> void; auto runBackgroundCGB() -> void; auto runWindowCGB() -> void; auto runObjectsCGB() -> void; //color.cpp auto colorGameBoy(n32) -> n64; auto colorGameBoyColor(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; function scanline; function run; struct Status { n1 irq; //STAT IRQ line n9 lx; //0~455 //$ff40 LCDC n1 bgEnable; //DMG: BG enable; CGB: BG priority n1 obEnable; n1 obSize; n1 bgTilemapSelect; n1 bgTiledataSelect; n1 windowDisplayEnable; n1 windowTilemapSelect; n1 displayEnable; //$ff41 STAT n2 mode; //0 = Hblank, 1 = Vblank, 2 = OAM search, 3 = LCD transfer n1 interruptHblank; n1 interruptVblank; n1 interruptOAM; n1 interruptLYC; //$ff42 SCY n8 scy; //$ff43 SCX n8 scx; //$ff44 LY n8 ly; //$ff45 LYC n8 lyc; //$ff46 DMA n8 dmaBank; n1 dmaActive; n10 dmaClock; //0~323 (DMG), 0~645 (CGB) //$ff4a WY n8 wy; //$ff4b WX n8 wx; //$ff4f VBK n1 vramBank; //$ff68 BGPI n6 bgpi; n1 bgpiIncrement; //$ff6a OBPI n8 obpi; n1 obpiIncrement; } status; struct Latch { n1 displayEnable; n1 windowDisplayEnable; n8 wx; n8 wy; } latch; struct History { n10 mode; //5 x 2-bit } history; struct Pixel { n15 color; n8 palette; n1 priority; }; Pixel bg; Pixel ob; struct Sprite { i16 x; i16 y; n8 tile; n8 attributes; n16 tiledata; }; Sprite sprite[10]; n4 sprites; //0-9 n8 px; //0-159 struct Background { n8 attributes; n16 tiledata; }; Background background; Background window; }; extern PPU ppu; ares-126/ares/gb/ppu/serialization.cpp000066400000000000000000000023241415063341600200310ustar00rootroot00000000000000auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); s(vram); s(oam); s(bgp); s(obp); s(bgpd); s(obpd); s(status.irq); s(status.lx); s(status.bgEnable); s(status.obEnable); s(status.obSize); s(status.bgTilemapSelect); s(status.bgTiledataSelect); s(status.windowDisplayEnable); s(status.windowTilemapSelect); s(status.displayEnable); s(status.mode); s(status.interruptHblank); s(status.interruptVblank); s(status.interruptOAM); s(status.interruptLYC); s(status.scy); s(status.scx); s(status.ly); s(status.lyc); s(status.dmaBank); s(status.dmaActive); s(status.dmaClock); s(status.wy); s(status.wx); s(status.vramBank); s(status.bgpiIncrement); s(status.bgpi); s(status.obpiIncrement); s(status.obpi); s(latch.displayEnable); s(latch.windowDisplayEnable); s(latch.wx); s(latch.wy); s(history.mode); s(bg.color); s(bg.palette); s(bg.priority); s(ob.color); s(ob.palette); s(ob.priority); for(auto& o : sprite) { s(o.x); s(o.y); s(o.tile); s(o.attributes); s(o.tiledata); } s(sprites); s(background.attributes); s(background.tiledata); s(window.attributes); s(window.tiledata); } ares-126/ares/gb/ppu/timing.cpp000066400000000000000000000037531415063341600164520ustar00rootroot00000000000000auto PPU::canAccessVRAM() const -> bool { if(!status.displayEnable) return 1; if(history.mode.bit(4,5) == 3) return 0; if(history.mode.bit(4,5) == 2 && status.lx >> 2 == 20) return 0; return 1; } auto PPU::canAccessOAM() const -> bool { if(!status.displayEnable) return 1; if(status.dmaActive && status.dmaClock >= 8) return 0; if(history.mode.bit(4,5) == 2) return 0; if(history.mode.bit(4,5) == 3) return 0; if(status.ly != 0 && status.lx >> 2 == 0) return 0; return 1; } auto PPU::compareLYC() const -> bool { auto ly = status.ly; auto lyc = status.lyc; if(Model::GameBoy() || Model::SuperGameBoy()) { auto lx = status.lx >> 2; if(ly != 0 && lx == 0) return 0; if(ly == 153 && lx == 2) return 0; if(ly == 153 && lx >= 3) return lyc == 0; } if(Model::GameBoyColor() && cpu.lowSpeed()) { auto lx = status.lx >> 2; if(ly == 153 && lx >= 1) return lyc == 0; } if(Model::GameBoyColor() && cpu.highSpeed()) { auto lx = status.lx >> 1; if(ly != 0 && lx == 0) return lyc == ly - 1; if(ly == 153 && lx >= 8) return lyc == 0; } return lyc == ly; } auto PPU::getLY() const -> n8 { auto ly = status.ly; if(Model::GameBoy() || Model::SuperGameBoy()) { auto lx = status.lx >> 2; if(ly == 153 && lx >= 1) return 0; } if(Model::GameBoyColor() && cpu.lowSpeed()) { auto lx = status.lx >> 2; if(ly != 153 && lx >= 113) { static const n3 pattern[8] = {0, 0, 2, 0, 4, 4, 6, 0}; if(ly.bit(0,3) != 0xf) { ly.bit(0,2) = pattern[ly.bit(0,2)]; } else { ly.bit(0,3) = 0; ly.bit(4,6) = pattern[ly.bit(4,6)]; } return ly; } if(ly == 153 && lx >= 1) return 0; } if(Model::GameBoyColor() && cpu.highSpeed()) { auto lx = status.lx >> 1; if(ly == 153 && lx >= 6) return 0; } return ly; } auto PPU::triggerOAM() const -> bool { if(status.mode != 2) return 0; auto lx = status.lx >> (cpu.status.speedDouble ? 1 : 2); return lx == (status.ly == 0 ? 1 : 0); } ares-126/ares/gb/system/000077500000000000000000000000001415063341600151675ustar00rootroot00000000000000ares-126/ares/gb/system/controls.cpp000066400000000000000000000023621415063341600175410ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { if(GameBoy::Model::SuperGameBoy()) return; //inputs provided by SNES gamepad(s) node = parent->append("Controls"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); b = node->append("B"); a = node->append("A"); select = node->append("Select"); start = node->append("Start"); } auto System::Controls::poll() -> void { if(GameBoy::Model::SuperGameBoy()) return; platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(b); platform->input(a); platform->input(select); platform->input(start); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } ares-126/ares/gb/system/serialization.cpp000066400000000000000000000020011415063341600205410ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(information.clocksExecuted); s(cartridge); s(cpu); s(ppu); s(apu); } ares-126/ares/gb/system/system.cpp000066400000000000000000000104131415063341600172160ustar00rootroot00000000000000#include namespace ares::GameBoy { auto enumerate() -> vector { return { "[Nintendo] Game Boy", "[Nintendo] Game Boy Color", "[Nintendo] Super Game Boy", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; SuperGameBoyInterface* superGameBoy = nullptr; #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); } auto System::clocksExecuted() -> u32 { u32 clocks = information.clocksExecuted; information.clocksExecuted = 0; return clocks; } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Game Boy")) { information.name = "Game Boy"; information.model = Model::GameBoy; } if(name.find("Game Boy Color")) { information.name = "Game Boy Color"; information.model = Model::GameBoyColor; } if(name.find("Super Game Boy")) { information.name = "Super Game Boy"; information.model = Model::SuperGameBoy; } if(information.name == "Game Boy" || information.name == "Game Boy Color") { node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; } if(information.name == "Super Game Boy") { node = root; if(!(pak = node->pak())) return false; } fastBoot = node->append("Fast Boot", false); scheduler.reset(); controls.load(node); cpu.load(node); ppu.load(node); apu.load(node); cartridgeSlot.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); ppu.unload(); apu.unload(); cartridgeSlot.unload(); bootROM.reset(); pak.reset(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); string name = "boot.rom"; if(GameBoy::Model::GameBoy()) { bootROM.allocate(256); if(cpu.version->latch() == "DMG-CPU" ) name = "boot.dmg-0.rom"; if(cpu.version->latch() == "DMG-CPU A" ) name = "boot.dmg-1.rom"; if(cpu.version->latch() == "DMG-CPU B" ) name = "boot.dmg-1.rom"; if(cpu.version->latch() == "DMG-CPU C" ) name = "boot.dmg-1.rom"; if(cpu.version->latch() == "CPU MGB" ) name = "boot.mgb.rom"; } if(GameBoy::Model::SuperGameBoy()) { bootROM.allocate(256); if(cpu.version->latch() == "SGB-CPU 01") name = "sm83.boot.rom"; if(cpu.version->latch() == "CPU SGB2" ) name = "sm83.boot.rom"; } if(GameBoy::Model::GameBoyColor()) { bootROM.allocate(2048); if(cpu.version->latch() == "CPU CGB" ) name = "boot.cgb-0.rom"; if(cpu.version->latch() == "CPU CGB A" ) name = "boot.cgb-1.rom"; if(cpu.version->latch() == "CPU CGB B" ) name = "boot.cgb-1.rom"; if(cpu.version->latch() == "CPU CGB C" ) name = "boot.cgb-1.rom"; if(cpu.version->latch() == "CPU CGB D" ) name = "boot.cgb-1.rom"; if(cpu.version->latch() == "CPU CGB E" ) name = "boot.cgb-1.rom"; } if(auto fp = pak->read(!GameBoy::Model::SuperGameBoy() ? "boot.rom" : "sm83.boot.rom")) { bootROM.load(fp); if(fastBoot->latch()) { if(name == "boot.dmg-1.rom") { //skip the first 0x60 loop iterations (~4 seconds) and disable scrolling bootROM.program(0x55, 0x26); //ld h,$60 ; loop upcount = 0x60 bootROM.program(0x56, 0x60); bootROM.program(0x57, 0x16); //ld d,$04 ; loop downcount = 0x04 bootROM.program(0x58, 0x04); bootROM.program(0x88, 0x00); //nop ; disable scroll } //todo: add fast boot patches for other boot ROMs } } cartridge.power(); cpu.power(); ppu.power(); apu.power(); scheduler.power(cpu); } } ares-126/ares/gb/system/system.hpp000066400000000000000000000034251415063341600172300ustar00rootroot00000000000000struct System { Node::System node; Node::Setting::Boolean fastBoot; VFS::Pak pak; struct Controls { Node::Object node; Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button b; Node::Input::Button a; Node::Input::Button select; Node::Input::Button start; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; bool yHold = 0; bool upLatch = 0; bool downLatch = 0; bool xHold = 0; bool leftLatch = 0; bool rightLatch = 0; } controls; enum class Model : u32 { GameBoy, GameBoyColor, SuperGameBoy, }; Memory::Readable bootROM; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto clocksExecuted() const -> u32 { return information.clocksExecuted; } //system.cpp auto game() -> string; auto run() -> void; auto clocksExecuted() -> u32; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; struct Information { string name = "Game Boy"; Model model = Model::GameBoy; n32 clocksExecuted; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; extern SuperGameBoyInterface* superGameBoy; auto Model::GameBoy() -> bool { return system.model() == System::Model::GameBoy; } auto Model::GameBoyColor() -> bool { return system.model() == System::Model::GameBoyColor; } auto Model::SuperGameBoy() -> bool { return system.model() == System::Model::SuperGameBoy; } ares-126/ares/gba/000077500000000000000000000000001415063341600140045ustar00rootroot00000000000000ares-126/ares/gba/GNUmakefile000066400000000000000000000013441415063341600160600ustar00rootroot00000000000000ares.components += arm7tdmi ares.objects += ares-gba-memory ares.objects += ares-gba-system ares.objects += ares-gba-cartridge ares.objects += ares-gba-player ares.objects += ares-gba-cpu ares.objects += ares-gba-ppu ares.objects += ares-gba-apu $(object.path)/ares-gba-memory.o: $(ares.path)/gba/memory/memory.cpp $(object.path)/ares-gba-system.o: $(ares.path)/gba/system/system.cpp $(object.path)/ares-gba-cartridge.o: $(ares.path)/gba/cartridge/cartridge.cpp $(object.path)/ares-gba-player.o: $(ares.path)/gba/player/player.cpp $(object.path)/ares-gba-cpu.o: $(ares.path)/gba/cpu/cpu.cpp $(object.path)/ares-gba-ppu.o: $(ares.path)/gba/ppu/ppu.cpp $(object.path)/ares-gba-apu.o: $(ares.path)/gba/apu/apu.cpp ares-126/ares/gba/apu/000077500000000000000000000000001415063341600145715ustar00rootroot00000000000000ares-126/ares/gba/apu/apu.cpp000066400000000000000000000051521415063341600160650ustar00rootroot00000000000000#include namespace ares::GameBoyAdvance { APU apu; #include "io.cpp" #include "square.cpp" #include "square1.cpp" #include "square2.cpp" #include "wave.cpp" #include "noise.cpp" #include "sequencer.cpp" #include "fifo.cpp" #include "serialization.cpp" auto APU::load(Node::Object parent) -> void { node = parent->append("APU"); stream = node->append("PSG"); stream->setChannels(2); stream->setFrequency(system.frequency() / 64.0); stream->addHighPassFilter(20.0, 1); } auto APU::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto APU::main() -> void { //GBA clock runs at 16777216hz //GBA PSG channels run at 2097152hz sequence(); step(8); //audio PWM output frequency and bit-rate are dependent upon amplitude setting: //0 = 9-bit @ 32768hz //1 = 8-bit @ 65536hz //2 = 7-bit @ 131072hz //3 = 6-bit @ 262144hz //dynamically changing the output frequency under emulation would be difficult; //always run the output frequency at the maximum 262144hz if(++clock & 7) return; s32 lsample = bias.level - 0x0200; s32 rsample = bias.level - 0x0200; //amplitude: 0 = 32768hz; 1 = 65536hz; 2 = 131072hz; 3 = 262144hz if((clock & (63 >> (3 - bias.amplitude))) == 0) { sequencer.sample(); fifo[0].sample(); fifo[1].sample(); } lsample += sequencer.loutput; rsample += sequencer.routput; s32 fifo0 = fifo[0].output << fifo[0].volume; s32 fifo1 = fifo[1].output << fifo[1].volume; if(fifo[0].lenable) lsample += fifo0; if(fifo[1].lenable) lsample += fifo1; if(fifo[0].renable) rsample += fifo0; if(fifo[1].renable) rsample += fifo1; lsample = sclamp<11>(lsample); rsample = sclamp<11>(rsample); //clip 11-bit signed output to more limited output bit-rate //note: leaving 2-bits more on output to prevent quantization noise if(bias.amplitude == 0) lsample &= ~0, rsample &= ~0; //9-bit if(bias.amplitude == 1) lsample &= ~1, rsample &= ~1; //8-bit if(bias.amplitude == 2) lsample &= ~3, rsample &= ~3; //7-bit if(bias.amplitude == 3) lsample &= ~7, rsample &= ~7; //6-bit if(cpu.stopped()) lsample = 0, rsample = 0; stream->frame((lsample << 5) / 32768.0, (rsample << 5) / 32768.0); } auto APU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto APU::power() -> void { Thread::create(system.frequency(), {&APU::main, this}); clock = 0; bias = {}; square1.power(); square2.power(); wave.power(); noise.power(); sequencer.power(); fifo[0].power(); fifo[1].power(); for(u32 n = 0x060; n <= 0x0a7; n++) bus.io[n] = this; } } ares-126/ares/gba/apu/apu.hpp000066400000000000000000000065651415063341600161030ustar00rootroot00000000000000struct APU : Thread, IO { Node::Object node; Node::Audio::Stream stream; //apu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto readIO(n32 address) -> n8; auto writeIO(n32 address, n8 byte) -> void; auto power() -> void; //sequencer.cpp auto sequence() -> void; //serialization.cpp auto serialize(serializer&) -> void; u32 clock; struct Bias { n10 level = 0x200; n2 amplitude = 0; } bias; struct Sweep { n3 shift; n1 direction; n3 frequency; n1 enable; n1 negate; n3 period; }; struct Envelope { auto dacEnable() const -> bool { return volume || direction; } n3 frequency; n1 direction; n4 volume; n3 period; }; struct Square { //square.cpp auto run() -> void; auto clockLength() -> void; auto clockEnvelope() -> void; Envelope envelope; n1 enable; n6 length; n2 duty; n11 frequency; n1 counter; n1 initialize; i32 shadowfrequency; n1 signal; n4 output; n32 period; n3 phase; n4 volume; }; struct Square1 : Square { //square1.cpp auto runSweep(bool update) -> void; auto clockSweep() -> void; auto read(u32 address) const -> n8; auto write(u32 address, n8 byte) -> void; auto power() -> void; Sweep sweep; } square1; struct Square2 : Square { //square2.cpp auto read(u32 address) const -> n8; auto write(u32 address, n8 byte) -> void; auto power() -> void; } square2; struct Wave { //wave.cpp auto run() -> void; auto clockLength() -> void; auto read(u32 address) const -> n8; auto write(u32 address, n8 byte) -> void; auto readRAM(u32 address) const -> n8; auto writeRAM(u32 address, n8 byte) -> void; auto power() -> void; n1 mode; n1 bank; n1 dacenable; n8 length; n3 volume; n11 frequency; n1 counter; n1 initialize; n4 pattern[2 * 32]; n1 enable; n4 output; n5 patternaddr; n1 patternbank; n4 patternsample; n32 period; } wave; struct Noise { //noise.cpp auto divider() const -> u32; auto run() -> void; auto clockLength() -> void; auto clockEnvelope() -> void; auto read(u32 address) const -> n8; auto write(u32 address, n8 byte) -> void; auto power() -> void; Envelope envelope; n6 length; n3 divisor; n1 narrowlfsr; n4 frequency; n1 counter; n1 initialize; n1 enable; n15 lfsr; n4 output; n32 period; n4 volume; } noise; struct Sequencer { //sequencer.cpp auto sample() -> void; auto read(u32 address) const -> n8; auto write(u32 address, n8 byte) -> void; auto power() -> void; n2 volume; n3 lvolume; n3 rvolume; n1 lenable[4]; n1 renable[4]; n1 masterenable; n12 base; n3 step; i16 lsample; i16 rsample; n10 loutput; n10 routput; } sequencer; struct FIFO { //fifo.cpp auto sample() -> void; auto read() -> void; auto write(i8 byte) -> void; auto reset() -> void; auto power() -> void; i8 samples[32]; i8 active; i8 output; n5 rdoffset; n5 wroffset; n6 size; n1 volume; //0 = 50%, 1 = 100% n1 lenable; n1 renable; n1 timer; } fifo[2]; }; extern APU apu; ares-126/ares/gba/apu/fifo.cpp000066400000000000000000000010041415063341600162130ustar00rootroot00000000000000auto APU::FIFO::sample() -> void { output = active; } auto APU::FIFO::read() -> void { if(size == 0) return; size--; active = samples[rdoffset++]; } auto APU::FIFO::write(i8 byte) -> void { if(size == 32) rdoffset++; else size++; samples[wroffset++] = byte; } auto APU::FIFO::reset() -> void { for(auto& byte : samples) byte = 0; active = 0; output = 0; rdoffset = 0; wroffset = 0; size = 0; } auto APU::FIFO::power() -> void { reset(); lenable = 0; renable = 0; timer = 0; } ares-126/ares/gba/apu/io.cpp000066400000000000000000000146111415063341600157070ustar00rootroot00000000000000auto APU::readIO(n32 address) -> n8 { switch(address) { //NR10 case 0x0400'0060: return square1.read(0); case 0x0400'0061: return 0x00; //NR11, NR12 case 0x0400'0062: return square1.read(1); case 0x0400'0063: return square1.read(2); //NR13, NR14 case 0x0400'0064: return square1.read(3); case 0x0400'0065: return square1.read(4); //zero case 0x0400'0066: return 0x00; case 0x0400'0067: return 0x00; //NR21, NR22 case 0x0400'0068: return square2.read(1); case 0x0400'0069: return square2.read(2); //NR23, NR24 case 0x0400'006c: return square2.read(3); case 0x0400'006d: return square2.read(4); //zero case 0x0400'006e: return 0x00; case 0x0400'006f: return 0x00; //NR30 case 0x0400'0070: return wave.read(0); case 0x0400'0071: return 0x00; //NR31, NR32 case 0x0400'0072: return wave.read(1); case 0x0400'0073: return wave.read(2); //NR33, NR34 case 0x0400'0074: return wave.read(3); case 0x0400'0075: return wave.read(4); //zero case 0x0400'0076: return 0x00; case 0x0400'0077: return 0x00; //NR41, NR42 case 0x0400'0078: return noise.read(1); case 0x0400'0079: return noise.read(2); //zero case 0x0400'007a: return 0x00; case 0x0400'007b: return 0x00; //NR43, NR44 case 0x0400'007c: return noise.read(3); case 0x0400'007d: return noise.read(4); //zero case 0x0400'007e: return 0x00; case 0x0400'007f: return 0x00; //NR50, NR51 case 0x0400'0080: return sequencer.read(0); case 0x0400'0081: return sequencer.read(1); //SOUND_CNT_H case 0x0400'0082: return ( sequencer.volume << 0 | fifo[0].volume << 2 | fifo[1].volume << 3 ); case 0x0400'0083: return ( fifo[0].renable << 0 | fifo[0].lenable << 1 | fifo[0].timer << 2 | fifo[1].renable << 4 | fifo[1].lenable << 5 | fifo[1].timer << 6 ); //NR52 case 0x0400'0084: return sequencer.read(2); case 0x0400'0085: return 0x00; //zero case 0x0400'0086: return 0x00; case 0x0400'0087: return 0x00; //SOUNDBIAS case 0x0400'0088: return ( bias.level.bit(0,7) ); case 0x0400'0089: return ( bias.level.bit(8,9) << 0 | bias.amplitude << 6 ); //zero case 0x0400'008a: return 0x00; case 0x0400'008b: return 0x00; //WAVE_RAM0_L case 0x0400'0090: return wave.readRAM( 0); case 0x0400'0091: return wave.readRAM( 1); //WAVE_RAM0_H case 0x0400'0092: return wave.readRAM( 2); case 0x0400'0093: return wave.readRAM( 3); //WAVE_RAM1_L case 0x0400'0094: return wave.readRAM( 4); case 0x0400'0095: return wave.readRAM( 5); //WAVE_RAM1_H case 0x0400'0096: return wave.readRAM( 6); case 0x0400'0097: return wave.readRAM( 7); //WAVE_RAM2_L case 0x0400'0098: return wave.readRAM( 8); case 0x0400'0099: return wave.readRAM( 9); //WAVE_RAM2_H case 0x0400'009a: return wave.readRAM(10); case 0x0400'009b: return wave.readRAM(11); //WAVE_RAM3_L case 0x0400'009c: return wave.readRAM(12); case 0x0400'009d: return wave.readRAM(13); //WAVE_RAM3_H case 0x0400'009e: return wave.readRAM(14); case 0x0400'009f: return wave.readRAM(15); } if(cpu.context.dmaActive) return cpu.dmabus.data.byte(address & 3); return cpu.pipeline.fetch.instruction.byte(address & 1); } auto APU::writeIO(n32 address, n8 data) -> void { switch(address) { //NR10 case 0x0400'0060: return square1.write(0, data); case 0x0400'0061: return; //NR11, NR12 case 0x0400'0062: return square1.write(1, data); case 0x0400'0063: return square1.write(2, data); //NR13, NR14 case 0x0400'0064: return square1.write(3, data); case 0x0400'0065: return square1.write(4, data); //NR21, NR22 case 0x0400'0068: return square2.write(1, data); case 0x0400'0069: return square2.write(2, data); //NR23, NR24 case 0x0400'006c: return square2.write(3, data); case 0x0400'006d: return square2.write(4, data); //NR30 case 0x0400'0070: return wave.write(0, data); case 0x0400'0071: return; //NR31, NR32 case 0x0400'0072: return wave.write(1, data); case 0x0400'0073: return wave.write(2, data); //NR33, NR34 case 0x0400'0074: return wave.write(3, data); case 0x0400'0075: return wave.write(4, data); //NR41, NR42 case 0x0400'0078: return noise.write(1, data); case 0x0400'0079: return noise.write(2, data); //NR43, NR44 case 0x0400'007c: return noise.write(3, data); case 0x0400'007d: return noise.write(4, data); //NR50, NR51 case 0x0400'0080: return sequencer.write(0, data); case 0x0400'0081: return sequencer.write(1, data); //SOUND_CNT_H case 0x0400'0082: sequencer.volume = data.bit(0,1); fifo[0].volume = data.bit(2); fifo[1].volume = data.bit(3); return; case 0x0400'0083: fifo[0].renable = data.bit(0); fifo[0].lenable = data.bit(1); fifo[0].timer = data.bit(2); if(data.bit(3)) fifo[0].reset(); fifo[1].renable = data.bit(4); fifo[1].lenable = data.bit(5); fifo[1].timer = data.bit(6); if(data.bit(7)) fifo[1].reset(); return; //NR52 case 0x0400'0084: return sequencer.write(2, data); case 0x0400'0085: return; //SOUNDBIAS case 0x0400'0088: bias.level.bit(0,7) = data; return; case 0x0400'0089: bias.level.bit(8,9) = data.bit(0,1); bias.amplitude = data.bit(6,7); return; //WAVE_RAM0_L case 0x0400'0090: return wave.writeRAM( 0, data); case 0x0400'0091: return wave.writeRAM( 1, data); //WAVE_RAM0_H case 0x0400'0092: return wave.writeRAM( 2, data); case 0x0400'0093: return wave.writeRAM( 3, data); //WAVE_RAM1_L case 0x0400'0094: return wave.writeRAM( 4, data); case 0x0400'0095: return wave.writeRAM( 5, data); //WAVE_RAM1_H case 0x0400'0096: return wave.writeRAM( 6, data); case 0x0400'0097: return wave.writeRAM( 7, data); //WAVE_RAM2_L case 0x0400'0098: return wave.writeRAM( 8, data); case 0x0400'0099: return wave.writeRAM( 9, data); //WAVE_RAM2_H case 0x0400'009a: return wave.writeRAM(10, data); case 0x0400'009b: return wave.writeRAM(11, data); //WAVE_RAM3_L case 0x0400'009c: return wave.writeRAM(12, data); case 0x0400'009d: return wave.writeRAM(13, data); //WAVE_RAM3_H case 0x0400'009e: return wave.writeRAM(14, data); case 0x0400'009f: return wave.writeRAM(15, data); //FIFO_A_L //FIFO_A_H case 0x0400'00a0: case 0x0400'00a1: case 0x0400'00a2: case 0x0400'00a3: return fifo[0].write(data); //FIFO_B_L //FIFO_B_H case 0x0400'00a4: case 0x0400'00a5: case 0x0400'00a6: case 0x0400'00a7: return fifo[1].write(data); } } ares-126/ares/gba/apu/noise.cpp000066400000000000000000000041001415063341600164050ustar00rootroot00000000000000auto APU::Noise::divider() const -> u32 { if(divisor == 0) return 4; return divisor * 8; } auto APU::Noise::run() -> void { if(period && --period == 0) { period = divider() << frequency; if(frequency < 14) { bool bit = (lfsr ^ (lfsr >> 1)) & 1; lfsr = (lfsr >> 1) ^ (bit << (narrowlfsr ? 6 : 14)); } } output = volume; if(enable == false || (lfsr & 1)) output = 0; } auto APU::Noise::clockLength() -> void { if(enable && counter) { if(++length == 0) enable = false; } } auto APU::Noise::clockEnvelope() -> void { if(enable && envelope.frequency && --envelope.period == 0) { envelope.period = envelope.frequency; if(envelope.direction == 0 && volume > 0) volume--; if(envelope.direction == 1 && volume < 15) volume++; } } auto APU::Noise::read(u32 address) const -> n8 { switch(address) { case 1: return 0; case 2: return (envelope.frequency << 0) | (envelope.direction << 3) | (envelope.volume << 4); case 3: return (divisor << 0) | (narrowlfsr << 3) | (frequency << 4); case 4: return (counter << 6); } return 0; } auto APU::Noise::write(u32 address, n8 byte) -> void { switch(address) { case 1: //NR41 length = byte >> 0; break; case 2: //NR42 envelope.frequency = byte >> 0; envelope.direction = byte >> 3; envelope.volume = byte >> 4; if(!envelope.dacEnable()) enable = false; break; case 3: //NR43 divisor = byte >> 0; narrowlfsr = byte >> 3; frequency = byte >> 4; period = divider() << frequency; break; case 4: //NR44 counter = byte >> 6; initialize = byte >> 7; if(initialize) { enable = envelope.dacEnable(); lfsr = -1; envelope.period = envelope.frequency; volume = envelope.volume; } break; } } auto APU::Noise::power() -> void { envelope.frequency = 0; envelope.direction = 0; envelope.volume = 0; envelope.period = 0; length = 0; divisor = 0; narrowlfsr = 0; frequency = 0; counter = 0; initialize = 0; enable = 0; lfsr = 0; output = 0; period = 0; volume = 0; } ares-126/ares/gba/apu/sequencer.cpp000066400000000000000000000046631415063341600173000ustar00rootroot00000000000000auto APU::sequence() -> void { auto& r = sequencer; if(r.base == 0) { //512hz if(r.step == 0 || r.step == 2 || r.step == 4 || r.step == 6) { //256hz square1.clockLength(); square2.clockLength(); wave.clockLength(); noise.clockLength(); } if(r.step == 2 || r.step == 6) { //128hz square1.clockSweep(); } if(r.step == 7) { //64hz square1.clockEnvelope(); square2.clockEnvelope(); noise.clockEnvelope(); } r.step++; } r.base++; if(square1.enable) square1.run(); if(square2.enable) square2.run(); if(wave.enable) wave.run(); if(noise.enable) noise.run(); } auto APU::Sequencer::sample() -> void { loutput = 0; routput = 0; if(!masterenable) return; if(lenable[0]) loutput += apu.square1.output; if(lenable[1]) loutput += apu.square2.output; if(lenable[2]) loutput += apu.wave.output; if(lenable[3]) loutput += apu.noise.output; loutput *= 1 + lvolume; loutput <<= 1; loutput >>= 3 - volume; if(renable[0]) routput += apu.square1.output; if(renable[1]) routput += apu.square2.output; if(renable[2]) routput += apu.wave.output; if(renable[3]) routput += apu.noise.output; routput *= 1 + rvolume; routput <<= 1; routput >>= 3 - volume; } auto APU::Sequencer::read(u32 address) const -> n8 { switch(address) { case 0: return (rvolume << 0) | (lvolume << 4); case 1: return ( (renable[0] << 0) | (renable[1] << 1) | (renable[2] << 2) | (renable[3] << 3) | (lenable[0] << 4) | (lenable[1] << 5) | (lenable[2] << 6) | (lenable[3] << 7) ); case 2: return ( (apu.square1.enable << 0) | (apu.square2.enable << 1) | (apu.wave.enable << 2) | (apu.noise.enable << 3) | (masterenable << 7) ); } return 0; } auto APU::Sequencer::write(u32 address, n8 byte) -> void { switch(address) { case 0: //NR50 rvolume = byte >> 0; lvolume = byte >> 4; break; case 1: //NR51 renable[0] = byte >> 0; renable[1] = byte >> 1; renable[2] = byte >> 2; renable[3] = byte >> 3; lenable[0] = byte >> 4; lenable[1] = byte >> 5; lenable[2] = byte >> 6; lenable[3] = byte >> 7; break; case 2: //NR52 masterenable = byte >> 7; break; } } auto APU::Sequencer::power() -> void { lvolume = 0; rvolume = 0; for(auto& n : lenable) n = 0; for(auto& n : renable) n = 0; masterenable = 0; base = 0; step = 0; lsample = 0; rsample = 0; } ares-126/ares/gba/apu/serialization.cpp000066400000000000000000000042351415063341600201560ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Thread::serialize(s); s(clock); s(bias.level); s(bias.amplitude); s(square1.sweep.shift); s(square1.sweep.direction); s(square1.sweep.frequency); s(square1.sweep.enable); s(square1.sweep.negate); s(square1.sweep.period); s(square1.envelope.frequency); s(square1.envelope.direction); s(square1.envelope.volume); s(square1.envelope.period); s(square1.enable); s(square1.length); s(square1.duty); s(square1.frequency); s(square1.counter); s(square1.initialize); s(square1.shadowfrequency); s(square1.signal); s(square1.output); s(square1.period); s(square1.phase); s(square1.volume); s(square2.envelope.frequency); s(square2.envelope.direction); s(square2.envelope.volume); s(square2.envelope.period); s(square2.enable); s(square2.length); s(square2.duty); s(square2.frequency); s(square2.counter); s(square2.initialize); s(square2.shadowfrequency); s(square2.signal); s(square2.output); s(square2.period); s(square2.phase); s(square2.volume); s(wave.mode); s(wave.bank); s(wave.dacenable); s(wave.length); s(wave.volume); s(wave.frequency); s(wave.counter); s(wave.initialize); s(wave.pattern); s(wave.enable); s(wave.output); s(wave.patternaddr); s(wave.patternbank); s(wave.patternsample); s(wave.period); s(noise.envelope.frequency); s(noise.envelope.direction); s(noise.envelope.volume); s(noise.envelope.period); s(noise.length); s(noise.divisor); s(noise.narrowlfsr); s(noise.frequency); s(noise.counter); s(noise.initialize); s(noise.enable); s(noise.lfsr); s(noise.output); s(noise.period); s(noise.volume); s(sequencer.volume); s(sequencer.lvolume); s(sequencer.rvolume); s(sequencer.lenable); s(sequencer.renable); s(sequencer.masterenable); s(sequencer.base); s(sequencer.step); s(sequencer.lsample); s(sequencer.rsample); s(sequencer.loutput); s(sequencer.routput); for(auto& f : fifo) { s(f.samples); s(f.active); s(f.output); s(f.rdoffset); s(f.wroffset); s(f.size); s(f.volume); s(f.lenable); s(f.renable); s(f.timer); } } ares-126/ares/gba/apu/square.cpp000066400000000000000000000015101415063341600165720ustar00rootroot00000000000000auto APU::Square::run() -> void { if(period && --period == 0) { period = 2 * (2048 - frequency); phase++; switch(duty) { case 0: signal = (phase == 6); break; //_____-_ case 1: signal = (phase >= 6); break; //______-- case 2: signal = (phase >= 4); break; //____---- case 3: signal = (phase <= 5); break; //------__ } } n4 sample = volume; if(enable == false || signal == false) sample = 0; output = sample; } auto APU::Square::clockLength() -> void { if(enable && counter) { if(++length == 0) enable = false; } } auto APU::Square::clockEnvelope() -> void { if(enable && envelope.frequency && --envelope.period == 0) { envelope.period = envelope.frequency; if(envelope.direction == 0 && volume > 0) volume--; if(envelope.direction == 1 && volume < 15) volume++; } } ares-126/ares/gba/apu/square1.cpp000066400000000000000000000047731415063341600166710ustar00rootroot00000000000000auto APU::Square1::runSweep(bool update) -> void { if(!sweep.enable) return; sweep.negate = sweep.direction; u32 delta = shadowfrequency >> sweep.shift; s32 updatefrequency = shadowfrequency + (sweep.negate ? -delta : delta); if(updatefrequency > 2047) { enable = false; } else if(sweep.shift && update) { shadowfrequency = updatefrequency; frequency = updatefrequency; period = 2 * (2048 - frequency); } } auto APU::Square1::clockSweep() -> void { if(enable && sweep.frequency && --sweep.period == 0) { sweep.period = sweep.frequency; runSweep(1); runSweep(0); } } auto APU::Square1::read(u32 address) const -> n8 { switch(address) { case 0: return (sweep.shift << 0) | (sweep.direction << 3) | (sweep.frequency << 4); case 1: return (duty << 6); case 2: return (envelope.frequency << 0) | (envelope.direction << 3) | (envelope.volume << 4); case 3: return 0; case 4: return (counter << 6); } return 0; } auto APU::Square1::write(u32 address, n8 byte) -> void { switch(address) { case 0: //NR10 if(sweep.negate && sweep.direction && !(byte & 0x08)) enable = false; sweep.shift = byte >> 0; sweep.direction = byte >> 3; sweep.frequency = byte >> 4; break; case 1: //NR11 length = byte >> 0; duty = byte >> 6; break; case 2: //NR12 envelope.frequency = byte >> 0; envelope.direction = byte >> 3; envelope.volume = byte >> 4; if(!envelope.dacEnable()) enable = false; break; case 3: //NR13 frequency = (frequency & 0xff00) | (byte << 0); break; case 4: //NR14 frequency = (frequency & 0x00ff) | (byte << 8); counter = byte >> 6; initialize = byte >> 7; if(initialize) { enable = envelope.dacEnable(); period = 2 * (2048 - frequency); envelope.period = envelope.frequency; volume = envelope.volume; shadowfrequency = frequency; sweep.period = sweep.frequency; sweep.enable = sweep.period || sweep.shift; sweep.negate = false; if(sweep.shift) runSweep(0); } break; } } auto APU::Square1::power() -> void { envelope.frequency = 0; envelope.direction = 0; envelope.direction = 0; envelope.period = 0; sweep.shift = 0; sweep.direction = 0; sweep.frequency = 0; sweep.enable = 0; sweep.negate = 0; sweep.period = 0; enable = 0; length = 0; duty = 0; frequency = 0; counter = 0; initialize = 0; shadowfrequency = 0; signal = 0; output = 0; period = 0; phase = 0; volume = 0; } ares-126/ares/gba/apu/square2.cpp000066400000000000000000000024721415063341600166640ustar00rootroot00000000000000auto APU::Square2::read(u32 address) const -> n8 { switch(address) { case 1: return (duty << 6); case 2: return (envelope.frequency << 0) | (envelope.direction << 3) | (envelope.volume << 4); case 3: return 0; case 4: return (counter << 6); } return 0; } auto APU::Square2::write(u32 address, n8 byte) -> void { switch(address) { case 1: //NR21 length = byte >> 0; duty = byte >> 6; break; case 2: //NR22 envelope.frequency = byte >> 0; envelope.direction = byte >> 3; envelope.volume = byte >> 4; if(!envelope.dacEnable()) enable = false; break; case 3: //NR23 frequency = (frequency & 0xff00) | (byte << 0); break; case 4: //NR24 frequency = (frequency & 0x00ff) | (byte << 8); counter = byte >> 6; initialize = byte >> 7; if(initialize) { enable = envelope.dacEnable(); period = 2 * (2048 - frequency); envelope.period = envelope.frequency; volume = envelope.volume; } break; } } auto APU::Square2::power() -> void { envelope.frequency = 0; envelope.direction = 0; envelope.direction = 0; envelope.period = 0; enable = 0; length = 0; duty = 0; frequency = 0; counter = 0; initialize = 0; shadowfrequency = 0; signal = 0; output = 0; period = 0; phase = 0; volume = 0; } ares-126/ares/gba/apu/wave.cpp000066400000000000000000000041141415063341600162370ustar00rootroot00000000000000auto APU::Wave::run() -> void { if(period && --period == 0) { period = 1 * (2048 - frequency); patternsample = pattern[patternbank << 5 | patternaddr++]; if(patternaddr == 0) patternbank ^= mode; } output = patternsample; static u32 multiplier[] = {0, 4, 2, 1, 3, 3, 3, 3}; output = (output * multiplier[volume]) / 4; if(enable == false) output = 0; } auto APU::Wave::clockLength() -> void { if(enable && counter) { if(++length == 0) enable = false; } } auto APU::Wave::read(u32 address) const -> n8 { switch(address) { case 0: return (mode << 5) | (bank << 6) | (dacenable << 7); case 1: return 0; case 2: return (volume << 5); case 3: return 0; case 4: return (counter << 6); } return 0; } auto APU::Wave::write(u32 address, n8 byte) -> void { switch(address) { case 0: //NR30 mode = byte >> 5; bank = byte >> 6; dacenable = byte >> 7; if(dacenable == false) enable = false; break; case 1: //NR31 length = byte >> 0; break; case 2: //NR32 volume = byte >> 5; break; case 3: //NR33 frequency = (frequency & 0xff00) | (byte << 0); break; case 4: //NR34 frequency = (frequency & 0x00ff) | (byte << 8); counter = byte >> 6; initialize = byte >> 7; if(initialize) { enable = dacenable; period = 1 * (2048 - frequency); patternaddr = 0; patternbank = mode ? (n1)0 : bank; } break; } } auto APU::Wave::readRAM(u32 address) const -> n8 { n8 byte = 0; byte |= pattern[!bank << 5 | address << 1 | 0] << 4; byte |= pattern[!bank << 5 | address << 1 | 1] << 0; return byte; } auto APU::Wave::writeRAM(u32 address, n8 byte) -> void { pattern[!bank << 5 | address << 1 | 0] = byte >> 4; pattern[!bank << 5 | address << 1 | 1] = byte >> 0; } auto APU::Wave::power() -> void { mode = 0; bank = 0; dacenable = 0; length = 0; volume = 0; frequency = 0; counter = 0; initialize = 0; for(auto& sample : pattern) sample = 0; enable = 0; output = 0; patternaddr = 0; patternbank = 0; patternsample = 0; period = 0; } ares-126/ares/gba/cartridge/000077500000000000000000000000001415063341600157505ustar00rootroot00000000000000ares-126/ares/gba/cartridge/cartridge.cpp000066400000000000000000000076371415063341600204350ustar00rootroot00000000000000#include namespace ares::GameBoyAdvance { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "mrom.cpp" #include "sram.cpp" #include "eeprom.cpp" #include "flash.cpp" #include "serialization.cpp" Cartridge::Cartridge() { mrom.data = new n8[mrom.size = 32 * 1024 * 1024]; sram.data = new n8[sram.size = 32 * 1024]; eeprom.data = new n8[eeprom.size = 8 * 1024]; flash.data = new n8[flash.size = 128 * 1024]; } Cartridge::~Cartridge() { delete[] mrom.data; delete[] sram.data; delete[] eeprom.data; delete[] flash.data; } auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append("Game Boy Advance Cartridge"); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; has = {}; information.title = pak->attribute("title"); if(auto fp = pak->read("program.rom")) { mrom.size = min(32_MiB, fp->size()); fp->read({mrom.data, mrom.size}); } if(auto fp = pak->read("save.ram")) { has.sram = true; sram.size = min(32_KiB, fp->size()); sram.mask = sram.size - 1; for(auto n : range(sram.size)) sram.data[n] = 0xff; fp->read({sram.data, sram.size}); } if(auto fp = pak->read("save.eeprom")) { has.eeprom = true; eeprom.size = min(8_KiB, fp->size()); eeprom.bits = eeprom.size <= 512 ? 6 : 14; if(eeprom.size == 0) eeprom.size = 8192, eeprom.bits = 0; //auto-detect size eeprom.mask = mrom.size > 16 * 1024 * 1024 ? 0x0fffff00 : 0x0f000000; eeprom.test = mrom.size > 16 * 1024 * 1024 ? 0x0dffff00 : 0x0d000000; for(auto n : range(eeprom.size)) eeprom.data[n] = 0xff; fp->read({eeprom.data, eeprom.size}); } if(auto fp = pak->read("save.flash")) { has.flash = true; flash.size = min(128_KiB, fp->size()); flash.manufacturer = fp->attribute("manufacturer"); for(auto n : range(flash.size)) flash.data[n] = 0xff; flash.id = 0; if(flash.manufacturer == "Atmel" && flash.size == 64 * 1024) flash.id = 0x3d1f; if(flash.manufacturer == "Macronix" && flash.size == 64 * 1024) flash.id = 0x1cc2; if(flash.manufacturer == "Macronix" && flash.size == 128 * 1024) flash.id = 0x09c2; if(flash.manufacturer == "Panasonic" && flash.size == 64 * 1024) flash.id = 0x1b32; if(flash.manufacturer == "Sanyo" && flash.size == 128 * 1024) flash.id = 0x1362; if(flash.manufacturer == "SST" && flash.size == 64 * 1024) flash.id = 0xd4bf; fp->read({flash.data, flash.size}); } power(); } auto Cartridge::disconnect() -> void { if(!node) return; memory::fill(mrom.data, mrom.size); memory::fill(sram.data, sram.size); memory::fill(eeprom.data, eeprom.size); memory::fill(flash.data, flash.size); has = {}; pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; if(auto fp = pak->write("save.ram")) { fp->write({sram.data, sram.size}); } if(auto fp = pak->write("save.eeprom")) { fp->write({eeprom.data, eeprom.size}); } if(auto fp = pak->write("save.flash")) { fp->write({flash.data, flash.size}); } } auto Cartridge::power() -> void { eeprom.power(); flash.power(); } #define RAM_ANALYZE auto Cartridge::read(u32 mode, n32 address) -> n32 { if(address < 0x0e00'0000) { if(has.eeprom && (address & eeprom.mask) == eeprom.test) return eeprom.read(); return mrom.read(mode, address); } else { if(has.sram) return sram.read(mode, address); if(has.flash) return flash.read(address); return cpu.pipeline.fetch.instruction; } } auto Cartridge::write(u32 mode, n32 address, n32 word) -> void { if(address < 0x0e00'0000) { if(has.eeprom && (address & eeprom.mask) == eeprom.test) return eeprom.write(word & 1); return mrom.write(mode, address, word); } else { if(has.sram) return sram.write(mode, address, word); if(has.flash) return flash.write(address, word); } } } ares-126/ares/gba/cartridge/cartridge.hpp000066400000000000000000000012451415063341600204270ustar00rootroot00000000000000struct Cartridge { Node::Peripheral node; VFS::Pak pak; #include "memory.hpp" auto title() const -> string { return information.title; } //cartridge.cpp Cartridge(); ~Cartridge(); auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto read(u32 mode, n32 address) -> n32; auto write(u32 mode, n32 address, n32 word) -> void; auto serialize(serializer&) -> void; private: struct Information { string title; } information; struct Has { n1 sram; n1 eeprom; n1 flash; } has; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/gba/cartridge/eeprom.cpp000066400000000000000000000035021415063341600177430ustar00rootroot00000000000000auto Cartridge::EEPROM::read(u32 address) -> bool { return data[address >> 3] & 0x80 >> (address & 7); } auto Cartridge::EEPROM::write(u32 address, bool bit) -> void { if(bit == 0) data[address >> 3] &=~ (0x80 >> (address & 7)); if(bit == 1) data[address >> 3] |= (0x80 >> (address & 7)); } auto Cartridge::EEPROM::read() -> bool { bool bit = 1; //EEPROM size auto-detection if(bits == 0 && mode == Mode::ReadAddress) { print("EEPROM address bits: ", --addressbits, "\n"); bits = addressbits == 6 ? 6 : 14; size = 8192; mode = Mode::ReadData; offset = 0; //fallthrough } if(mode == Mode::ReadData) { if(offset >= 4) bit = read(address * 64 + (offset - 4)); if(++offset == 68) mode = Mode::Wait; } return bit; } auto Cartridge::EEPROM::write(bool bit) -> void { if(mode == Mode::Wait) { if(bit == 1) mode = Mode::Command; } else if(mode == Mode::Command) { if(bit == 0) mode = Mode::WriteAddress; if(bit == 1) mode = Mode::ReadAddress; offset = 0; address = 0; addressbits = 0; } else if(mode == Mode::ReadAddress) { address = (address << 1) | bit; addressbits++; if(++offset == bits) { mode = Mode::ReadValidate; offset = 0; } } else if(mode == Mode::ReadValidate) { if(bit == 1); //invalid mode = Mode::ReadData; } else if(mode == Mode::WriteAddress) { address = (address << 1) | bit; if(++offset == bits) { mode = Mode::WriteData; offset = 0; } } else if(mode == Mode::WriteData) { write(address * 64 + offset, bit); if(++offset == 64) { mode = Mode::WriteValidate; } } else if(mode == Mode::WriteValidate) { if(bit == 1); //invalid mode = Mode::Wait; } } auto Cartridge::EEPROM::power() -> void { mode = Mode::Wait; offset = 0; address = 0; } ares-126/ares/gba/cartridge/flash.cpp000066400000000000000000000041521415063341600175530ustar00rootroot00000000000000//Dev.ID Size Blocks Manufacturer //====== ===== ======== ============ //0xd4bf 64KB 16x4096 SST //0x1cc2 64KB 16x4096 Macronix //0x1b32 64KB 16x4096 Panasonic //0x3d1f 64KB 512x 128 Atmel //0x1362 128KB 32x4096 Sanyo //0x09c2 128KB 32x4096 Macronix auto Cartridge::FLASH::read(n16 address) -> n8 { if(idmode) { if(address == 0x0000) return id >> 0; if(address == 0x0001) return id >> 8; return 0u; } return data[bank << 16 | address]; } auto Cartridge::FLASH::write(n16 address, n8 byte) -> void { if(bankselect) { bankselect = false; //bank select is only applicable on 128KB chips if(address == 0x0000) bank = byte & (size > 64 * 1024); return; } if(writeselect) { //Atmel writes 128 bytes per command; all others write 1 byte per command if(id != 0x3d1f || (address & 0x007f) == 0x007f) writeselect = false; data[bank << 16 | address] = byte; return; } if(byte == 0xaa && address == 0x5555) { unlockhi = true; return; } if(byte == 0x55 && address == 0x2aaa) { unlocklo = true; return; } if(unlockhi && unlocklo) { unlockhi = false; unlocklo = false; if(byte == 0x10 && address == 0x5555) { if(erasemode) { erasemode = false; for(u32 n : range(size)) data[n] = 0xff; } } if(byte == 0x30 && (address & 0x0fff) == 0x0000) { //command only valid for non-Atmel chips if(erasemode && id != 0x3d1f) { erasemode = false; u32 offset = bank << 16 | (address & ~4095); for(u32 n : range(4096)) data[offset++] = 0xff; } } if(byte == 0x80 && address == 0x5555) { erasemode = true; } if(byte == 0x90 && address == 0x5555) { idmode = true; } if(byte == 0xa0 && address == 0x5555) { writeselect = true; } if(byte == 0xb0 && address == 0x5555) { bankselect = true; } if(byte == 0xf0 && address == 0x5555) { idmode = false; } } } auto Cartridge::FLASH::power() -> void { unlockhi = false; unlocklo = false; idmode = false; bankselect = false; writeselect = false; bank = 0; } ares-126/ares/gba/cartridge/memory.hpp000066400000000000000000000025561415063341600200010ustar00rootroot00000000000000struct MROM { //mrom.cpp auto read(u32 mode, n32 address) -> n32; auto write(u32 mode, n32 address, n32 word) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8* data = nullptr; u32 size; u32 mask; } mrom; struct SRAM { //sram.cpp auto read(u32 mode, n32 address) -> n32; auto write(u32 mode, n32 address, n32 word) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8* data = nullptr; u32 size; u32 mask; } sram; struct EEPROM { //eeprom.cpp auto read(u32 address) -> bool; auto write(u32 address, bool bit) -> void; auto read() -> bool; auto write(bool bit) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n8* data = nullptr; u32 size; u32 mask; u32 test; u32 bits; enum class Mode : u32 { Wait, Command, ReadAddress, ReadValidate, ReadData, WriteAddress, WriteData, WriteValidate } mode; u32 offset; u32 address; u32 addressbits; } eeprom; struct FLASH { //flash.cpp auto read(n16 address) -> n8; auto write(n16 address, n8 byte) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n8* data = nullptr; u32 size; string manufacturer; n16 id; bool unlockhi; bool unlocklo; bool idmode; bool erasemode; bool bankselect; bool writeselect; bool bank; } flash; ares-126/ares/gba/cartridge/mrom.cpp000066400000000000000000000011041415063341600174220ustar00rootroot00000000000000auto Cartridge::MROM::read(u32 mode, n32 address) -> n32 { if(mode & Word) { n32 word = 0; word |= read(mode & ~Word | Half, (address & ~3) + 0) << 0; word |= read(mode & ~Word | Half, (address & ~3) + 2) << 16; return word; } address &= 0x01ff'ffff; if(address >= size) return (n16)(address >> 1); if(mode & Half) address &= ~1; auto p = data + address; if(mode & Half) return p[0] << 0 | p[1] << 8; if(mode & Byte) return p[0] << 0; return 0; //should never occur } auto Cartridge::MROM::write(u32 mode, n32 address, n32 word) -> void { } ares-126/ares/gba/cartridge/serialization.cpp000066400000000000000000000013671415063341600213400ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { s(mrom); if(has.sram) s(sram); if(has.eeprom) s(eeprom); if(has.flash) s(flash); } auto Cartridge::MROM::serialize(serializer& s) -> void { s(size); s(mask); } auto Cartridge::SRAM::serialize(serializer& s) -> void { s(array_span{data, size}); s(size); s(mask); } auto Cartridge::EEPROM::serialize(serializer& s) -> void { s(array_span{data, size}); s(size); s(mask); s(test); s(bits); s((u32&)mode); s(offset); s(address); s(addressbits); } auto Cartridge::FLASH::serialize(serializer& s) -> void { s(array_span{data, size}); s(size); s(id); s(unlockhi); s(unlocklo); s(idmode); s(erasemode); s(bankselect); s(writeselect); s(bank); } ares-126/ares/gba/cartridge/slot.cpp000066400000000000000000000010331415063341600174320ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Game Boy Advance"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { cartridge.connect(); }); port->setDisconnect([&] { cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/gba/cartridge/slot.hpp000066400000000000000000000003471415063341600174460ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/gba/cartridge/sram.cpp000066400000000000000000000004041415063341600174140ustar00rootroot00000000000000auto Cartridge::SRAM::read(u32 mode, n32 address) -> n32 { n32 word = data[address & mask]; word |= word << 8; word |= word << 16; return word; } auto Cartridge::SRAM::write(u32 mode, n32 address, n32 word) -> void { data[address & mask] = word; } ares-126/ares/gba/cpu/000077500000000000000000000000001415063341600145735ustar00rootroot00000000000000ares-126/ares/gba/cpu/bus.cpp000066400000000000000000000065361415063341600161020ustar00rootroot00000000000000auto CPU::sleep() -> void { prefetchStep(1); } auto CPU::get(u32 mode, n32 address) -> n32 { u32 clocks = _wait(mode, address); u32 word = pipeline.fetch.instruction; if(context.dmaActive) word = dmabus.data; if(address >= 0x1000'0000) { prefetchStep(clocks); } else if(address & 0x0800'0000) { if(mode & Prefetch && wait.prefetch) { prefetchSync(address); word = prefetchRead(); if(mode & Word) word |= prefetchRead() << 16; } else { if(!context.dmaActive) prefetchWait(); step(clocks - 1); word = cartridge.read(mode, address); step(1); } } else { if(memory.biosSwap && address < 0x0400'0000) address ^= 0x0200'0000; prefetchStep(clocks); if(address < 0x0200'0000) word = bios.read(mode, address); else if(address < 0x0300'0000) word = readEWRAM(mode, address); else if(address < 0x0400'0000) word = readIWRAM(mode, address); else if(address >= 0x0700'0000) word = ppu.readOAM(mode, address); else if(address >= 0x0600'0000) word = ppu.readVRAM(mode, address); else if(address >= 0x0500'0000) word = ppu.readPRAM(mode, address); else if((address & 0xffff'fc00) == 0x0400'0000) word = bus.io[address & 0x3ff]->readIO(mode, address); else if((address & 0xff00'ffff) == 0x0400'0800) word = ((IO*)this)->readIO(mode, 0x0400'0800 | (address & 3)); } return word; } auto CPU::set(u32 mode, n32 address, n32 word) -> void { u32 clocks = _wait(mode, address); if(address >= 0x1000'0000) { prefetchStep(clocks); } else if(address & 0x0800'0000) { if(!context.dmaActive) prefetchWait(); step(clocks); cartridge.write(mode, address, word); } else { if(memory.biosSwap && address < 0x0400'0000) address ^= 0x0200'0000; prefetchStep(clocks); if(address < 0x0200'0000) bios.write(mode, address, word); else if(address < 0x0300'0000) writeEWRAM(mode, address, word); else if(address < 0x0400'0000) writeIWRAM(mode, address, word); else if(address >= 0x0700'0000) ppu.writeOAM(mode, address, word); else if(address >= 0x0600'0000) ppu.writeVRAM(mode, address, word); else if(address >= 0x0500'0000) ppu.writePRAM(mode, address, word); else if((address & 0xffff'fc00) == 0x0400'0000) bus.io[address & 0x3ff]->writeIO(mode, address, word); else if((address & 0xff00'ffff) == 0x0400'0800) ((IO*)this)->writeIO(mode, 0x0400'0800 | (address & 3), word); } } auto CPU::_wait(u32 mode, n32 address) -> u32 { if(address >= 0x1000'0000) return 1; //unmapped if(address < 0x0200'0000) return 1; if(address < 0x0300'0000) return (16 - memory.ewramWait) * (mode & Word ? 2 : 1); if(address < 0x0500'0000) return 1; if(address < 0x0700'0000) return mode & Word ? 2 : 1; if(address < 0x0800'0000) return 1; static u32 timings[] = {5, 4, 3, 9}; u32 n = timings[wait.nwait[address >> 25 & 3]]; u32 s = wait.swait[address >> 25 & 3]; switch(address & 0x0e00'0000) { case 0x0800'0000: s = s ? 2 : 3; break; case 0x0a00'0000: s = s ? 2 : 5; break; case 0x0c00'0000: s = s ? 2 : 9; break; case 0x0e00'0000: s = n; break; } bool sequential = (mode & Sequential); if((address & 0x1fffe) == 0) sequential = false; //N cycle on 16-bit ROM crossing 128KB page boundary (RAM S==N) u32 clocks = sequential ? s : n; if(mode & Word) clocks += s; //16-bit bus requires two transfers for words return clocks; } ares-126/ares/gba/cpu/cpu.cpp000066400000000000000000000066521415063341600160770ustar00rootroot00000000000000#include namespace ares::GameBoyAdvance { CPU cpu; #include "prefetch.cpp" #include "bus.cpp" #include "io.cpp" #include "memory.cpp" #include "dma.cpp" #include "timer.cpp" #include "keypad.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { iwram.allocate( 32_KiB); ewram.allocate(256_KiB); node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { iwram.reset(); ewram.reset(); node = {}; debugger = {}; } auto CPU::main() -> void { ARM7TDMI::irq = irq.ime && (irq.enable & irq.flag); if(stopped()) { if(!(irq.enable & irq.flag & Interrupt::Keypad)) { Thread::step(16); Thread::synchronize(); } context.stopped = false; } if(halted()) { if(!(irq.enable & irq.flag)) { return step(16); } context.halted = false; } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { if(!clocks) return; dma[0].waiting = max(0, dma[0].waiting - (s32)clocks); dma[1].waiting = max(0, dma[1].waiting - (s32)clocks); dma[2].waiting = max(0, dma[2].waiting - (s32)clocks); dma[3].waiting = max(0, dma[3].waiting - (s32)clocks); if(!context.dmaActive) { context.dmaActive = true; while(dma[0].run() | dma[1].run() | dma[2].run() | dma[3].run()); context.dmaActive = false; } for(auto _ : range(clocks)) { timer[0].run(); timer[1].run(); timer[2].run(); timer[3].run(); context.clock++; } #if defined(PROFILE_PERFORMANCE) //20% speedup by only synchronizing other components every 64 clock cycles static u32 counter = 0; counter += clocks; if(counter < 64) return; clocks = counter; counter = 0; #endif Thread::step(clocks); Thread::synchronize(); } auto CPU::power() -> void { ARM7TDMI::power(); Thread::create(system.frequency(), {&CPU::main, this}); for(auto& byte : iwram) byte = 0x00; for(auto& byte : ewram) byte = 0x00; for(auto n : range(4)) dma[n] = {n}; for(auto n : range(4)) timer[n] = {n}; serial = {}; keypad = {}; joybus = {}; irq = {}; wait = {}; memory = {}; prefetch = {}; context = {}; dmabus = {}; dma[0].source.setBits(27); dma[0].latch.source.setBits(27); dma[0].target.setBits(27); dma[0].latch.target.setBits(27); dma[0].length.setBits(14); dma[0].latch.length.setBits(14); dma[1].source.setBits(28); dma[1].latch.source.setBits(28); dma[1].target.setBits(27); dma[1].latch.target.setBits(27); dma[1].length.setBits(14); dma[1].latch.length.setBits(14); dma[2].source.setBits(28); dma[2].latch.source.setBits(28); dma[2].target.setBits(27); dma[2].latch.target.setBits(27); dma[2].length.setBits(14); dma[2].latch.length.setBits(14); dma[3].source.setBits(28); dma[3].latch.source.setBits(28); dma[3].target.setBits(28); dma[3].latch.target.setBits(28); dma[3].length.setBits(16); dma[3].latch.length.setBits(16); for(u32 n = 0x0b0; n <= 0x0df; n++) bus.io[n] = this; //DMA for(u32 n = 0x100; n <= 0x10f; n++) bus.io[n] = this; //Timers for(u32 n = 0x120; n <= 0x12b; n++) bus.io[n] = this; //Serial for(u32 n = 0x130; n <= 0x133; n++) bus.io[n] = this; //Keypad for(u32 n = 0x134; n <= 0x159; n++) bus.io[n] = this; //Serial for(u32 n = 0x200; n <= 0x209; n++) bus.io[n] = this; //System for(u32 n = 0x300; n <= 0x301; n++) bus.io[n] = this; //System //0x080-0x083 mirrored via gba/memory/memory.cpp //System } } ares-126/ares/gba/cpu/cpu.hpp000066400000000000000000000111251415063341600160730ustar00rootroot00000000000000struct CPU : ARM7TDMI, Thread, IO { Node::Object node; Memory::Writable iwram; // 32KB Memory::Writable ewram; //256KB struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view type) -> void; struct Memory { Node::Debugger::Memory iwram; Node::Debugger::Memory ewram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; //todo: ARM7TDMI needs to notify CPU when interrupts occur } tracer; } debugger; struct Interrupt { enum : u32 { VBlank = 0x0001, HBlank = 0x0002, VCoincidence = 0x0004, Timer0 = 0x0008, Timer1 = 0x0010, Timer2 = 0x0020, Timer3 = 0x0040, Serial = 0x0080, DMA0 = 0x0100, DMA1 = 0x0200, DMA2 = 0x0400, DMA3 = 0x0800, Keypad = 0x1000, Cartridge = 0x2000, };}; auto clock() const -> u32 { return context.clock; } auto halted() const -> bool { return context.halted; } auto stopped() const -> bool { return context.stopped; } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power() -> void; //prefetch.cpp auto prefetchSync(n32 address) -> void; auto prefetchStep(u32 clocks) -> void; auto prefetchWait() -> void; auto prefetchRead() -> n16; //bus.cpp auto sleep() -> void override; auto get(u32 mode, n32 address) -> n32 override; auto set(u32 mode, n32 address, n32 word) -> void override; auto _wait(u32 mode, n32 address) -> u32; //io.cpp auto readIO(n32 address) -> n8 override; auto writeIO(n32 address, n8 byte) -> void override; auto readIWRAM(u32 mode, n32 address) -> n32; auto writeIWRAM(u32 mode, n32 address, n32 word) -> void; auto readEWRAM(u32 mode, n32 address) -> n32; auto writeEWRAM(u32 mode, n32 address, n32 word) -> void; //dma.cpp auto dmaVblank() -> void; auto dmaHblank() -> void; auto dmaHDMA() -> void; //timer.cpp auto runFIFO(u32 n) -> void; //serialization.cpp auto serialize(serializer&) -> void; //private: struct uintVN { auto operator()() const -> n32 { return data & mask; } auto setBits(u32 bits) -> void { mask = (1 << bits) - 1; } n32 data; n32 mask; }; //DMA data bus shared between all DMA channels struct DMABus { n32 data; } dmabus; struct DMA { //dma.cpp auto run() -> bool; auto transfer() -> void; n2 id; n1 active; i32 waiting; n2 targetMode; n2 sourceMode; n1 repeat; n1 size; n1 drq; n2 timingMode; n1 irq; n1 enable; uintVN source; uintVN target; uintVN length; struct Latch { uintVN source; uintVN target; uintVN length; } latch; } dma[4]; struct Timer { //timer.cpp auto run() -> void; auto step() -> void; n2 id; n1 pending; n16 period; n16 reload; n2 frequency; n1 cascade; n1 irq; n1 enable; } timer[4]; struct Serial { n1 shiftClockSelect; n1 shiftClockFrequency; n1 transferEnableReceive; n1 transferEnableSend; n1 startBit; n1 transferLength; n1 irqEnable; n16 data[4]; n8 data8; } serial; struct Keypad { //keypad.cpp auto run() -> void; n1 enable; n1 condition; n1 flag[10]; } keypad; struct Joybus { n1 sc; n1 sd; n1 si; n1 so; n1 scMode; n1 sdMode; n1 siMode; n1 soMode; n1 siIRQEnable; n2 mode; n1 resetSignal; n1 receiveComplete; n1 sendComplete; n1 resetIRQEnable; n32 receive; n32 transmit; n1 receiveFlag; n1 sendFlag; n2 generalFlag; } joybus; struct IRQ { n1 ime; n16 enable; n16 flag; } irq; struct Wait { n2 nwait[4]; n1 swait[4]; n2 phi; n1 prefetch; n1 gameType; } wait; struct Memory { n1 biosSwap; n3 unknown1; n1 ewram = 1; n4 ewramWait = 13; n4 unknown2; } memory; struct { auto empty() const { return addr == load; } auto full() const { return load - addr == 16; } n16 slot[8]; n32 addr; //read location of slot buffer n32 load; //write location of slot buffer i32 wait = 1; //number of clocks before next slot load } prefetch; struct Context { n32 clock; n1 halted; n1 stopped; n1 booted; //set to true by the GBA BIOS n1 dmaActive; } context; }; extern CPU cpu; ares-126/ares/gba/cpu/debugger.cpp000066400000000000000000000023611415063341600170650ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.iwram = parent->append("CPU IWRAM"); memory.iwram->setSize(cpu.iwram.size()); memory.iwram->setRead([&](u32 address) -> u8 { return cpu.iwram[address]; }); memory.iwram->setWrite([&](u32 address, u8 data) -> void { cpu.iwram[address] = data; }); memory.ewram = parent->append("CPU EWRAM"); memory.ewram->setSize(cpu.ewram.size()); memory.ewram->setRead([&](u32 address) -> u8 { return cpu.ewram[address]; }); memory.ewram->setWrite([&](u32 address, u8 data) -> void { cpu.ewram[address] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(32); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.pipeline.execute.address)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/gba/cpu/dma.cpp000066400000000000000000000036341415063341600160460ustar00rootroot00000000000000inline auto CPU::DMA::run() -> bool { if(!active || waiting) return false; transfer(); if(irq) cpu.irq.flag |= CPU::Interrupt::DMA0 << id; if(drq && id == 3) cpu.irq.flag |= CPU::Interrupt::Cartridge; return true; } auto CPU::DMA::transfer() -> void { u32 seek = size ? 4 : 2; u32 mode = size ? Word : Half; mode |= latch.length() == length() ? Nonsequential : Sequential; if(mode & Nonsequential) { if((source() & 0x0800'0000) && (target() & 0x0800'0000)) { //ROM -> ROM transfer } else { cpu.idle(); cpu.idle(); } } if(latch.source() < 0x0200'0000) { cpu.idle(); //cannot access BIOS } else { n32 addr = latch.source(); if(mode & Word) addr &= ~3; if(mode & Half) addr &= ~1; cpu.dmabus.data = cpu.get(mode, addr); if(mode & Half) cpu.dmabus.data |= cpu.dmabus.data << 16; } if(latch.target() < 0x0200'0000) { cpu.idle(); //cannot access BIOS } else { n32 addr = latch.target(); if(mode & Word) addr &= ~3; if(mode & Half) addr &= ~1; cpu.set(mode, addr, cpu.dmabus.data); } switch(sourceMode) { case 0: latch.source.data += seek; break; case 1: latch.source.data -= seek; break; } switch(targetMode) { case 0: latch.target.data += seek; break; case 1: latch.target.data -= seek; break; case 3: latch.target.data += seek; break; } latch.length.data--; if(!latch.length()) { active = false; if(targetMode == 3) latch.target = target; if(repeat == 1) latch.length = length; if(repeat == 0) enable = false; } } auto CPU::dmaVblank() -> void { for(auto& dma : this->dma) { if(dma.enable && dma.timingMode == 1) dma.active = true; } } auto CPU::dmaHblank() -> void { for(auto& dma : this->dma) { if(dma.enable && dma.timingMode == 2) dma.active = true; } } auto CPU::dmaHDMA() -> void { auto& dma = this->dma[3]; if(dma.enable && dma.timingMode == 3) dma.active = true; } ares-126/ares/gba/cpu/io.cpp000066400000000000000000000342241415063341600157130ustar00rootroot00000000000000auto CPU::readIO(n32 address) -> n8 { auto dma = [&]() -> DMA& { return this->dma[address / 12 & 3]; }; auto timer = [&]() -> Timer& { return this->timer[address.bit(2,3)]; }; switch(address) { //DMA0CNT_L, DMA1CNT_L, DMA2CNT_L, DMA3CNT_L case 0x0400'00b8: case 0x0400'00c4: case 0x0400'00d0: case 0x0400'00dc: return 0x00; case 0x0400'00b9: case 0x0400'00c5: case 0x0400'00d1: case 0x0400'00dd: return 0x00; //DMA0CNT_H, DMA1CNT_H, DMA2CNT_H, DMA3CNT_H case 0x0400'00ba: case 0x0400'00c6: case 0x0400'00d2: case 0x0400'00de: return ( dma().targetMode << 5 | dma().sourceMode.bit(0) << 7 ); case 0x0400'00bb: case 0x0400'00c7: case 0x0400'00d3: case 0x0400'00df: return ( dma().sourceMode.bit(1) << 0 | dma().repeat << 1 | dma().size << 2 | dma().drq << 3 | dma().timingMode << 4 | dma().irq << 6 | dma().enable << 7 ); //TM0CNT_L, TM1CNT_L, TM2CNT_L, TM3CNT_L case 0x0400'0100: case 0x0400'0104: case 0x0400'0108: case 0x0400'010c: return timer().period.byte(0); case 0x0400'0101: case 0x0400'0105: case 0x0400'0109: case 0x0400'010d: return timer().period.byte(1); //TM0CNT_H, TM1CNT_H, TM2CNT_H, TM3CNT_H case 0x0400'0102: case 0x0400'0106: case 0x0400'010a: case 0x0400'010e: return ( timer().frequency << 0 | timer().cascade << 2 | timer().irq << 6 | timer().enable << 7 ); case 0x0400'0103: case 0x0400'0107: case 0x0400'010b: case 0x0400'010f: return 0; //SIOMULTI0 (SIODATA32_L), SIOMULTI1 (SIODATA32_H), SIOMULTI2, SIOMULTI3 case 0x0400'0120: case 0x0400'0122: case 0x0400'0124: case 0x0400'0126: { if(auto data = player.read()) return data().byte(address.bit(0,1)); return serial.data[address.bit(1,2)].byte(0); } case 0x0400'0121: case 0x0400'0123: case 0x0400'0125: case 0x0400'0127: { if(auto data = player.read()) return data().byte(address.bit(0,1)); return serial.data[address.bit(1,2)].byte(1); } //SIOCNT case 0x0400'0128: return ( serial.shiftClockSelect << 0 | serial.shiftClockFrequency << 1 | serial.transferEnableReceive << 2 | serial.transferEnableSend << 3 | serial.startBit << 7 ); case 0x0400'0129: return ( serial.transferLength << 4 | serial.irqEnable << 6 ); //SIOMLT_SEND (SIODATA8) case 0x0400'012a: return serial.data8; case 0x0400'012b: return 0; //KEYINPUT case 0x04000130: { if(Model::GameBoyPlayer()) { if(auto result = player.keyinput()) return result() >> 0; } system.controls.poll(); n8 result; result.bit(0) = !system.controls.a->value(); result.bit(1) = !system.controls.b->value(); result.bit(2) = !system.controls.select->value(); result.bit(3) = !system.controls.start->value(); if(ppu.rotation->value() == "0°") { result.bit(4) = !system.controls.rightLatch; result.bit(5) = !system.controls.leftLatch; result.bit(6) = !system.controls.upLatch; result.bit(7) = !system.controls.downLatch; } if(ppu.rotation->value() == "90°") { result.bit(4) = !system.controls.downLatch; result.bit(5) = !system.controls.upLatch; result.bit(6) = !system.controls.rightLatch; result.bit(7) = !system.controls.leftLatch; } if(ppu.rotation->value() == "180°") { result.bit(4) = !system.controls.leftLatch; result.bit(5) = !system.controls.rightLatch; result.bit(6) = !system.controls.downLatch; result.bit(7) = !system.controls.upLatch; } if(ppu.rotation->value() == "270°") { result.bit(4) = !system.controls.upLatch; result.bit(5) = !system.controls.downLatch; result.bit(6) = !system.controls.leftLatch; result.bit(7) = !system.controls.rightLatch; } return result; } case 0x04000131: { if(Model::GameBoyPlayer()) { if(auto result = player.keyinput()) return result() >> 8; } system.controls.poll(); n8 result; result.bit(0) = !system.controls.r->value(); result.bit(1) = !system.controls.l->value(); return result; } //KEYCNT case 0x0400'0132: return ( keypad.flag[0] << 0 | keypad.flag[1] << 1 | keypad.flag[2] << 2 | keypad.flag[3] << 3 | keypad.flag[4] << 4 | keypad.flag[5] << 5 | keypad.flag[6] << 6 | keypad.flag[7] << 7 ); case 0x0400'0133: return ( keypad.flag[8] << 0 | keypad.flag[9] << 1 | keypad.enable << 6 | keypad.condition << 7 ); //RCNT case 0x0400'0134: return ( joybus.sc << 0 | joybus.sd << 1 | joybus.si << 2 | joybus.so << 3 | joybus.scMode << 4 | joybus.sdMode << 5 | joybus.siMode << 6 | joybus.soMode << 7 ); case 0x0400'0135: return ( joybus.siIRQEnable << 0 | joybus.mode << 6 ); //JOYCNT case 0x0400'0140: return ( joybus.resetSignal << 0 | joybus.receiveComplete << 1 | joybus.sendComplete << 2 | joybus.resetIRQEnable << 6 ); case 0x0400'0141: return 0; case 0x0400'0142: return 0; case 0x0400'0143: return 0; //JOY_RECV_L, JOY_RECV_H case 0x0400'0150: return joybus.receive.byte(0); case 0x0400'0151: return joybus.receive.byte(1); case 0x0400'0152: return joybus.receive.byte(2); case 0x0400'0153: return joybus.receive.byte(3); //JOY_TRANS_L, JOY_TRANS_H case 0x0400'0154: return joybus.transmit.byte(0); case 0x0400'0155: return joybus.transmit.byte(1); case 0x0400'0156: return joybus.transmit.byte(2); case 0x0400'0157: return joybus.transmit.byte(3); //JOYSTAT case 0x0400'0158: return ( joybus.receiveFlag << 1 | joybus.sendFlag << 3 | joybus.generalFlag << 4 ); case 0x0400'0159: return 0; case 0x0400'015a: return 0; case 0x0400'015b: return 0; //IE case 0x0400'0200: return irq.enable.byte(0); case 0x0400'0201: return irq.enable.byte(1); //IF case 0x0400'0202: return irq.flag.byte(0); case 0x0400'0203: return irq.flag.byte(1); //WAITCNT case 0x0400'0204: return ( wait.nwait[3] << 0 | wait.nwait[0] << 2 | wait.swait[0] << 4 | wait.nwait[1] << 5 | wait.swait[1] << 7 ); case 0x0400'0205: return ( wait.nwait[2] << 0 | wait.swait[2] << 2 | wait.phi << 3 | wait.prefetch << 6 | wait.gameType << 7 ); //IME case 0x0400'0208: return irq.ime; case 0x0400'0209: return 0; //POSTFLG + HALTCNT case 0x0400'0300: return context.booted; case 0x0400'0301: return 0; //MEMCNT_L case 0x0400'0800: return ( memory.biosSwap << 0 | memory.unknown1 << 1 | memory.ewram << 5 ); case 0x0400'0801: return 0; //MEMCNT_H case 0x0400'0802: return 0; case 0x0400'0803: return ( memory.ewramWait << 0 | memory.unknown2 << 4 ); } if(cpu.context.dmaActive) return cpu.dmabus.data.byte(address & 3); return cpu.pipeline.fetch.instruction.byte(address & 1); } auto CPU::writeIO(n32 address, n8 data) -> void { auto dma = [&]() -> DMA& { return this->dma[address / 12 & 3]; }; auto timer = [&]() -> Timer& { return this->timer[address.bit(2,3)]; }; switch(address) { //DMA0SAD, DMA1SAD, DMA2SAD, DMA3SAD case 0x0400'00b0: case 0x0400'00bc: case 0x0400'00c8: case 0x0400'00d4: dma().source.data.byte(0) = data; return; case 0x0400'00b1: case 0x0400'00bd: case 0x0400'00c9: case 0x0400'00d5: dma().source.data.byte(1) = data; return; case 0x0400'00b2: case 0x0400'00be: case 0x0400'00ca: case 0x0400'00d6: dma().source.data.byte(2) = data; return; case 0x0400'00b3: case 0x0400'00bf: case 0x0400'00cb: case 0x0400'00d7: dma().source.data.byte(3) = data; return; //DMA0DAD, DMA1DAD, DMA2DAD, DMA3DAD case 0x0400'00b4: case 0x0400'00c0: case 0x0400'00cc: case 0x0400'00d8: dma().target.data.byte(0) = data; return; case 0x0400'00b5: case 0x0400'00c1: case 0x0400'00cd: case 0x0400'00d9: dma().target.data.byte(1) = data; return; case 0x0400'00b6: case 0x0400'00c2: case 0x0400'00ce: case 0x0400'00da: dma().target.data.byte(2) = data; return; case 0x0400'00b7: case 0x0400'00c3: case 0x0400'00cf: case 0x0400'00db: dma().target.data.byte(3) = data; return; //DMA0CNT_L, DMA1CNT_L, DMA2CNT_L, DMA3CNT_L case 0x0400'00b8: case 0x0400'00c4: case 0x0400'00d0: case 0x0400'00dc: dma().length.data.byte(0) = data; return; case 0x0400'00b9: case 0x0400'00c5: case 0x0400'00d1: case 0x0400'00dd: dma().length.data.byte(1) = data; return; //DMA0CNT_H, DMA1CNT_H, DMA2CNT_H, DMA3CNT_H case 0x0400'00ba: case 0x0400'00c6: case 0x0400'00d2: case 0x0400'00de: dma().targetMode = data.bit(5,6); dma().sourceMode.bit(0) = data.bit(7); return; case 0x0400'00bb: case 0x0400'00c7: case 0x0400'00d3: case 0x0400'00df: { bool enable = dma().enable; if(address != 0x0400'00df) data.bit(3) = 0; //gamepad DRQ valid for DMA3 only dma().sourceMode.bit(1) = data.bit(0); dma().repeat = data.bit(1); dma().size = data.bit(2); dma().drq = data.bit(3); dma().timingMode = data.bit(4,5); dma().irq = data.bit(6); dma().enable = data.bit(7); if(!enable && dma().enable) { //0->1 transition if(dma().timingMode == 0) { dma().active = true; //immediate transfer mode dma().waiting = 2; } dma().latch.source = dma().source; dma().latch.target = dma().target; dma().latch.length = dma().length; } else if(!dma().enable) { dma().active = false; } return; } //TM0CNT_L, TM1CNT_L, TM2CNT_L, TM3CNT_L case 0x0400'0100: case 0x0400'0104: case 0x0400'0108: case 0x0400'010c: timer().reload.byte(0) = data; return; case 0x0400'0101: case 0x0400'0105: case 0x0400'0109: case 0x0400'010d: timer().reload.byte(1) = data; return; //TM0CNT_H, TM1CNT_H, TM2CNT_H, TM3CNT_H case 0x0400'0102: case 0x0400'0106: case 0x0400'010a: case 0x0400'010e: { bool enable = timer().enable; timer().frequency = data.bit(0,1); timer().cascade = data.bit(2); timer().irq = data.bit(6); timer().enable = data.bit(7); if(!enable && timer().enable) { //0->1 transition timer().pending = true; } return; } case 0x0400'0103: case 0x0400'0107: case 0x0400'010b: case 0x0400'010f: return; //SIOMULTI0 (SIODATA32_L), SIOMULTI1 (SIODATA32_H), SIOMULTI2, SIOMULTI3 case 0x0400'0120: case 0x0400'0122: case 0x0400'0124: case 0x0400'0126: player.write(address.bit(0,1), data); serial.data[address.bit(1,2)].byte(0) = data; return; case 0x0400'0121: case 0x0400'0123: case 0x0400'0125: case 0x0400'0127: player.write(address.bit(0,1), data); serial.data[address.bit(1,2)].byte(1) = data; return; //SIOCNT case 0x0400'0128: serial.shiftClockSelect = data.bit(0); serial.shiftClockFrequency = data.bit(1); serial.transferEnableReceive = data.bit(2); serial.transferEnableSend = data.bit(3); serial.startBit = data.bit(7); return; case 0x0400'0129: serial.transferLength = data.bit(4); serial.irqEnable = data.bit(6); return; //SIOMLT_SEND (SIODATA8) case 0x0400'012a: serial.data8 = data; return; case 0x0400'012b: return; //KEYCNT case 0x0400'0132: keypad.flag[0] = data.bit(0); keypad.flag[1] = data.bit(1); keypad.flag[2] = data.bit(2); keypad.flag[3] = data.bit(3); keypad.flag[4] = data.bit(4); keypad.flag[5] = data.bit(5); keypad.flag[6] = data.bit(6); keypad.flag[7] = data.bit(7); return; case 0x0400'0133: keypad.flag[8] = data.bit(0); keypad.flag[9] = data.bit(1); keypad.enable = data.bit(6); keypad.condition = data.bit(7); return; //RCNT case 0x0400'0134: joybus.sc = data.bit(0); joybus.sd = data.bit(1); joybus.si = data.bit(2); joybus.so = data.bit(3); joybus.scMode = data.bit(4); joybus.sdMode = data.bit(5); joybus.siMode = data.bit(6); joybus.soMode = data.bit(7); return; case 0x0400'0135: joybus.siIRQEnable = data.bit(0); joybus.mode = data.bit(6,7); return; //JOYCNT case 0x0400'0140: joybus.resetSignal = data.bit(0); joybus.receiveComplete = data.bit(1); joybus.sendComplete = data.bit(2); joybus.resetIRQEnable = data.bit(6); return; case 0x0400'0141: return; case 0x0400'0142: return; case 0x0400'0143: return; //JOY_RECV_L //JOY_RECV_H case 0x0400'0150: joybus.receive.byte(0) = data; return; case 0x0400'0151: joybus.receive.byte(1) = data; return; case 0x0400'0152: joybus.receive.byte(2) = data; return; case 0x0400'0153: joybus.receive.byte(3) = data; return; //JOY_TRANS_L //JOY_TRANS_H case 0x0400'0154: joybus.transmit.byte(0) = data; return; case 0x0400'0155: joybus.transmit.byte(1) = data; return; case 0x0400'0156: joybus.transmit.byte(2) = data; return; case 0x0400'0157: joybus.transmit.byte(3) = data; return; //JOYSTAT case 0x0400'0158: joybus.receiveFlag = data.bit(1); joybus.sendFlag = data.bit(3); joybus.generalFlag = data.bit(4,5); return; case 0x0400'0159: return; //IE case 0x0400'0200: irq.enable.byte(0) = data; return; case 0x0400'0201: irq.enable.byte(1) = data; return; //IF case 0x0400'0202: irq.flag.byte(0) = irq.flag.byte(0) & ~data; return; case 0x0400'0203: irq.flag.byte(1) = irq.flag.byte(1) & ~data; return; //WAITCNT case 0x0400'0204: wait.swait[3] = data.bit(0); //todo: is this correct? wait.nwait[3] = data.bit(0,1); wait.nwait[0] = data.bit(2,3); wait.swait[0] = data.bit(4); wait.nwait[1] = data.bit(5,6); wait.swait[1] = data.bit(7); return; case 0x0400'0205: wait.nwait[2] = data.bit(0,1); wait.swait[2] = data.bit(2); wait.phi = data.bit(3); wait.prefetch = data.bit(6); //wait.gameType is read-only return; //IME case 0x0400'0208: irq.ime = data.bit(0); return; case 0x0400'0209: return; //POSTFLG, HALTCNT case 0x0400'0300: if(data.bit(0)) context.booted = 1; return; case 0x0400'0301: context.halted = data.bit(7) == 0; context.stopped = data.bit(7) == 1; return; //MEMCNT_L //MEMCNT_H case 0x0400'0800: memory.biosSwap = data.bit(0); memory.unknown1 = data.bit(1,3); memory.ewram = data.bit(5); return; case 0x0400'0801: return; case 0x0400'0802: return; case 0x0400'0803: memory.ewramWait = data.bit(0,3); memory.unknown2 = data.bit(4,7); return; } } ares-126/ares/gba/cpu/keypad.cpp000066400000000000000000000013061415063341600165540ustar00rootroot00000000000000auto CPU::Keypad::run() -> void { if(!enable) return; system.controls.poll(); const bool lookup[] = { system.controls.a->value(), system.controls.b->value(), system.controls.select->value(), system.controls.start->value(), system.controls.rightLatch, system.controls.leftLatch, system.controls.upLatch, system.controls.downLatch, system.controls.r->value(), system.controls.l->value(), }; bool test = condition; //0 = OR, 1 = AND for(u32 index : range(10)) { if(!flag[index]) continue; bool input = lookup[index]; if(condition == 0) test |= input; if(condition == 1) test &= input; } if(test) cpu.irq.flag |= CPU::Interrupt::Keypad; } ares-126/ares/gba/cpu/memory.cpp000066400000000000000000000026061415063341600166130ustar00rootroot00000000000000auto CPU::readIWRAM(u32 mode, n32 address) -> n32 { if(mode & Word) return readIWRAM(Half, address &~ 2) << 0 | readIWRAM(Half, address | 2) << 16; if(mode & Half) return readIWRAM(Byte, address &~ 1) << 0 | readIWRAM(Byte, address | 1) << 8; return iwram[address & 0x7fff]; } auto CPU::writeIWRAM(u32 mode, n32 address, n32 word) -> void { if(mode & Word) { writeIWRAM(Half, address &~2, word >> 0); writeIWRAM(Half, address | 2, word >> 16); return; } if(mode & Half) { writeIWRAM(Byte, address &~1, word >> 0); writeIWRAM(Byte, address | 1, word >> 8); return; } iwram[address & 0x7fff] = word; } auto CPU::readEWRAM(u32 mode, n32 address) -> n32 { if(!memory.ewram) return readIWRAM(mode, address); if(mode & Word) return readEWRAM(Half, address &~ 2) << 0 | readEWRAM(Half, address | 2) << 16; if(mode & Half) return readEWRAM(Byte, address &~ 1) << 0 | readEWRAM(Byte, address | 1) << 8; return ewram[address & 0x3ffff]; } auto CPU::writeEWRAM(u32 mode, n32 address, n32 word) -> void { if(!memory.ewram) return writeIWRAM(mode, address, word); if(mode & Word) { writeEWRAM(Half, address &~2, word >> 0); writeEWRAM(Half, address | 2, word >> 16); return; } if(mode & Half) { writeEWRAM(Byte, address &~1, word >> 0); writeEWRAM(Byte, address | 1, word >> 8); return; } ewram[address & 0x3ffff] = word; } ares-126/ares/gba/cpu/prefetch.cpp000066400000000000000000000020271415063341600171000ustar00rootroot00000000000000auto CPU::prefetchSync(n32 address) -> void { if(address == prefetch.addr) return; prefetch.addr = address; prefetch.load = address; prefetch.wait = _wait(Half | Nonsequential, prefetch.load); } auto CPU::prefetchStep(u32 clocks) -> void { step(clocks); if(!wait.prefetch || context.dmaActive) return; while(!prefetch.full() && clocks--) { if(--prefetch.wait) continue; prefetch.slot[prefetch.load >> 1 & 7] = cartridge.read(Half, prefetch.load); prefetch.load += 2; prefetch.wait = _wait(Half | Sequential, prefetch.load); } } auto CPU::prefetchWait() -> void { if(!wait.prefetch || context.dmaActive || prefetch.full()) return; prefetchStep(prefetch.wait); prefetch.wait = _wait(Half | Nonsequential, prefetch.load); } auto CPU::prefetchRead() -> n16 { if(prefetch.empty()) prefetchStep(prefetch.wait); else prefetchStep(1); if(prefetch.full()) prefetch.wait = _wait(Half | Sequential, prefetch.load); n16 half = prefetch.slot[prefetch.addr >> 1 & 7]; prefetch.addr += 2; return half; } ares-126/ares/gba/cpu/serialization.cpp000066400000000000000000000041611415063341600201560ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { ARM7TDMI::serialize(s); Thread::serialize(s); s(iwram); s(ewram); s(dmabus.data); for(auto& dma : this->dma) { s(dma.id); s(dma.active); s(dma.waiting); s(dma.targetMode); s(dma.sourceMode); s(dma.repeat); s(dma.size); s(dma.drq); s(dma.timingMode); s(dma.irq); s(dma.enable); s(dma.source.data); s(dma.source.mask); s(dma.target.data); s(dma.target.mask); s(dma.length.data); s(dma.length.mask); s(dma.latch.source.data); s(dma.latch.source.mask); s(dma.latch.target.data); s(dma.latch.target.mask); s(dma.latch.length.data); s(dma.latch.length.mask); } for(auto& timer : this->timer) { s(timer.id); s(timer.pending); s(timer.period); s(timer.reload); s(timer.frequency); s(timer.cascade); s(timer.irq); s(timer.enable); } s(serial.shiftClockSelect); s(serial.shiftClockFrequency); s(serial.transferEnableReceive); s(serial.transferEnableSend); s(serial.startBit); s(serial.transferLength); s(serial.irqEnable); for(auto& value : serial.data) s(value); s(serial.data8); s(keypad.enable); s(keypad.condition); for(auto& flag : keypad.flag) s(flag); s(joybus.sc); s(joybus.sd); s(joybus.si); s(joybus.so); s(joybus.scMode); s(joybus.sdMode); s(joybus.siMode); s(joybus.soMode); s(joybus.siIRQEnable); s(joybus.mode); s(joybus.resetSignal); s(joybus.receiveComplete); s(joybus.sendComplete); s(joybus.resetIRQEnable); s(joybus.receive); s(joybus.transmit); s(joybus.receiveFlag); s(joybus.sendFlag); s(joybus.generalFlag); s(irq.ime); s(irq.enable); s(irq.flag); for(auto& flag : wait.nwait) s(flag); for(auto& flag : wait.swait) s(flag); s(wait.phi); s(wait.prefetch); s(wait.gameType); s(memory.biosSwap); s(memory.unknown1); s(memory.ewram); s(memory.ewramWait); s(memory.unknown2); s(prefetch.slot); s(prefetch.addr); s(prefetch.load); s(prefetch.wait); s(context.clock); s(context.halted); s(context.stopped); s(context.booted); s(context.dmaActive); } ares-126/ares/gba/cpu/timer.cpp000066400000000000000000000016361415063341600164250ustar00rootroot00000000000000inline auto CPU::Timer::run() -> void { if(pending) { pending = false; if(enable) period = reload; return; } if(!enable || cascade) return; static const u32 mask[] = {0, 63, 255, 1023}; if((cpu.clock() & mask[frequency]) == 0) step(); } auto CPU::Timer::step() -> void { if(++period == 0) { period = reload; if(irq) cpu.irq.flag |= CPU::Interrupt::Timer0 << id; if(apu.fifo[0].timer == id) cpu.runFIFO(0); if(apu.fifo[1].timer == id) cpu.runFIFO(1); if(id < 3 && cpu.timer[id + 1].enable && cpu.timer[id + 1].cascade) { cpu.timer[id + 1].step(); } } } auto CPU::runFIFO(u32 n) -> void { synchronize(apu); apu.fifo[n].read(); if(apu.fifo[n].size > 16) return; auto& dma = this->dma[1 + n]; if(dma.enable && dma.timingMode == 3) { dma.active = true; dma.waiting = 2; dma.targetMode = 2; dma.size = 1; dma.latch.length.data = 4; } } ares-126/ares/gba/gba.hpp000066400000000000000000000020771415063341600152540ustar00rootroot00000000000000#pragma once //started: 2012-03-19 #include #include namespace ares::GameBoyAdvance { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; enum : u32 { //mode flags for bus read, write: Nonsequential = 1, //N cycle Sequential = 2, //S cycle Prefetch = 4, //instruction fetch (eligible for prefetch) Byte = 8, //8-bit access Half = 16, //16-bit access Word = 32, //32-bit access Load = 64, //load operation Store = 128, //store operation Signed = 256, //sign extended }; struct Model { inline static auto GameBoyAdvance() -> bool; inline static auto GameBoyPlayer() -> bool; }; #include #include #include #include #include #include #include } ares-126/ares/gba/memory/000077500000000000000000000000001415063341600153145ustar00rootroot00000000000000ares-126/ares/gba/memory/memory.cpp000066400000000000000000000032051415063341600173300ustar00rootroot00000000000000#include namespace ares::GameBoyAdvance { Bus bus; auto IO::readIO(u32 mode, n32 address) -> n32 { n32 word; if(mode & Word) { address &= ~3; word.byte(0) = readIO(address + 0); word.byte(1) = readIO(address + 1); word.byte(2) = readIO(address + 2); word.byte(3) = readIO(address + 3); } else if(mode & Half) { address &= ~1; word.byte(0) = readIO(address + 0); word.byte(1) = readIO(address + 1); } else if(mode & Byte) { word.byte(0) = readIO(address + 0); } return word; } auto IO::writeIO(u32 mode, n32 address, n32 word) -> void { if(mode & Word) { address &= ~3; writeIO(address + 0, word.byte(0)); writeIO(address + 1, word.byte(1)); writeIO(address + 2, word.byte(2)); writeIO(address + 3, word.byte(3)); } else if(mode & Half) { address &= ~1; writeIO(address + 0, word.byte(0)); writeIO(address + 1, word.byte(1)); } else if(mode & Byte) { writeIO(address + 0, word.byte(0)); } } struct UnmappedIO : IO { auto readIO(n32 address) -> n8 override { return cpu.pipeline.fetch.instruction.byte(address & 1); } auto writeIO(n32 address, n8 byte) -> void override { } }; static UnmappedIO unmappedIO; auto Bus::mirror(n32 address, n32 size) -> n32 { n32 base = 0; if(size) { n32 mask = 1 << 27; //28-bit bus while(address >= size) { while(!(address & mask)) mask >>= 1; address -= mask; if(size > mask) { size -= mask; base += mask; } mask >>= 1; } base += address; } return base; } auto Bus::power() -> void { for(u32 n : range(0x400)) io[n] = &unmappedIO; } } ares-126/ares/gba/memory/memory.hpp000066400000000000000000000005521415063341600173370ustar00rootroot00000000000000struct IO { virtual auto readIO(n32 address) -> n8 = 0; virtual auto writeIO(n32 address, n8 data) -> void = 0; auto readIO(u32 mode, n32 address) -> n32; auto writeIO(u32 mode, n32 address, n32 word) -> void; }; struct Bus { static auto mirror(n32 address, n32 size) -> n32; auto power() -> void; IO* io[0x400] = {nullptr}; }; extern Bus bus; ares-126/ares/gba/player/000077500000000000000000000000001415063341600153005ustar00rootroot00000000000000ares-126/ares/gba/player/player.cpp000066400000000000000000000062721415063341600173070ustar00rootroot00000000000000#include namespace ares::GameBoyAdvance { //Game Boy Player emulation Player player; #include "serialization.cpp" auto Player::main() -> void { if(status.timeout && !--status.timeout) system.controls.rumble(false); step(1); } auto Player::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto Player::power() -> void { Thread::create(1000, {&Player::main, this}); status.enable = false; status.rumble = false; status.logoDetected = false; status.logoCounter = 0; status.packet = 0; status.send = 0; status.recv = 0; status.timeout = 0; } auto Player::frame() -> void { //todo: this is not a very performant way of detecting the GBP logo ... u32 hash = Hash::CRC32({ppu.screen->pixels(1).data(), 240 * 160 * sizeof(u32)}).value(); status.logoDetected = (hash == 0x7776eb55); if(status.logoDetected) { status.enable = true; status.logoCounter = (status.logoCounter + 1) % 3; status.packet = 0; } if(!status.enable) return; //todo: verify which settings are actually required //values were taken from observing GBP-compatible games if(!cpu.joybus.sc && !cpu.joybus.sd && !cpu.joybus.si && !cpu.joybus.so && !cpu.joybus.scMode && !cpu.joybus.sdMode && !cpu.joybus.siMode && !cpu.joybus.soMode && !cpu.joybus.siIRQEnable && !cpu.joybus.mode && !cpu.serial.shiftClockSelect && !cpu.serial.shiftClockFrequency && !cpu.serial.transferEnableReceive && cpu.serial.transferEnableSend && cpu.serial.startBit && cpu.serial.transferLength && cpu.serial.irqEnable ) { status.packet = (status.packet + 1) % 17; switch(status.packet) { case 0: status.send = 0x0000494e; break; case 1: status.send = 0xb6b1494e; break; case 2: status.send = 0xb6b1494e; break; case 3: status.send = 0xb6b1544e; break; case 4: status.send = 0xabb1544e; break; case 5: status.send = 0xabb14e45; break; case 6: status.send = 0xb1ba4e45; break; case 7: status.send = 0xb1ba4f44; break; case 8: status.send = 0xb0bb4f44; break; case 9: status.send = 0xb0bb8002; break; case 10: status.send = 0x10000010; break; case 11: status.send = 0x20000013; break; case 12: status.send = 0x30000003; break; case 13: status.send = 0x30000003; break; case 14: status.send = 0x30000003; break; case 15: status.send = 0x30000003; break; case 16: status.send = 0x30000003; break; } cpu.irq.flag |= CPU::Interrupt::Serial; } } auto Player::keyinput() -> maybe { if(status.logoDetected) { switch(status.logoCounter) { case 0: return {0x03ff}; case 1: return {0x03ff}; case 2: return {0x030f}; } } return nothing; } auto Player::read() -> maybe { if(status.enable) return status.send; return nothing; } auto Player::write(n2 address, n8 byte) -> void { if(!status.enable) return; u32 shift = address << 3; status.recv &= ~(255 << shift); status.recv |= byte << shift; if(address == 3 && status.packet == 15) { status.rumble = (status.recv & 0xff) == 0x26; //on = 0x26, off = 0x04 system.controls.rumble(status.rumble); if(status.rumble) status.timeout = 500; //stop rumble manually after 500ms } } } ares-126/ares/gba/player/player.hpp000066400000000000000000000007431415063341600173110ustar00rootroot00000000000000struct Player : Thread { auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; auto frame() -> void; auto keyinput() -> maybe; auto read() -> maybe; auto write(n2 address, n8 byte) -> void; auto serialize(serializer& s) -> void; private: struct Status { n1 enable; n1 rumble; n1 logoDetected; n32 logoCounter; n32 packet; n32 send; n32 recv; n32 timeout; } status; }; extern Player player; ares-126/ares/gba/player/serialization.cpp000066400000000000000000000003351415063341600206620ustar00rootroot00000000000000auto Player::serialize(serializer& s) -> void { s(status.enable); s(status.rumble); s(status.logoDetected); s(status.logoCounter); s(status.packet); s(status.send); s(status.recv); s(status.timeout); } ares-126/ares/gba/ppu/000077500000000000000000000000001415063341600146105ustar00rootroot00000000000000ares-126/ares/gba/ppu/background.cpp000066400000000000000000000105371415063341600174410ustar00rootroot00000000000000//I/O settings shared by all background layers n3 PPU::Background::IO::mode; n1 PPU::Background::IO::frame; n5 PPU::Background::IO::mosaicWidth; n5 PPU::Background::IO::mosaicHeight; auto PPU::Background::scanline(u32 y) -> void { mosaicOffset = 0; } auto PPU::Background::run(u32 x, u32 y) -> void { output = {}; if(ppu.blank() || !io.enable) { mosaic = {}; return; } switch(id) { case PPU::BG0: if(io.mode <= 1) { linear(x, y); break; } break; case PPU::BG1: if(io.mode <= 1) { linear(x, y); break; } break; case PPU::BG2: if(io.mode == 0) { linear(x, y); break; } if(io.mode <= 2) { affine(x, y); break; } if(io.mode <= 5) { bitmap(x, y); break; } break; case PPU::BG3: if(io.mode == 0) { linear(x, y); break; } if(io.mode == 2) { affine(x, y); break; } break; } //horizontal mosaic if(!io.mosaic || ++mosaicOffset >= 1 + io.mosaicWidth) { mosaicOffset = 0; mosaic = output; } } auto PPU::Background::linear(u32 x, u32 y) -> void { if(x == 0) { if(!io.mosaic || (y % (1 + io.mosaicHeight)) == 0) { vmosaic = y; } fx = io.hoffset; fy = vmosaic + io.voffset; } n3 px = fx; n3 py = fy; if(x == 0 || px == 0) { n6 tx = fx >> 3; n6 ty = fy >> 3; u32 offset = (ty & 31) << 5 | (tx & 31); if(io.screenSize.bit(0) && (tx & 32)) offset += 32 << 5; if(io.screenSize.bit(1) && (ty & 32)) offset += 32 << 5 + io.screenSize.bit(0); offset = (io.screenBase << 11) + (offset << 1); n16 tilemap = ppu.readVRAM(Half, offset); latch.character = tilemap.bit(0,9); latch.hflip = tilemap.bit(10); latch.vflip = tilemap.bit(11); latch.palette = tilemap.bit(12,15); } if(latch.hflip) px = ~px; if(latch.vflip) py = ~py; if(io.colorMode == 0) { u32 offset = (io.characterBase << 14) + (latch.character << 5) + (py << 2) + (px >> 1); if(n4 color = ppu.readVRAM(Byte, offset) >> (px & 1 ? 4 : 0)) { output.enable = true; output.priority = io.priority; output.color = ppu.pram[latch.palette << 4 | color]; } } else { u32 offset = (io.characterBase << 14) + (latch.character << 6) + (py << 3) + (px); if(n8 color = ppu.readVRAM(Byte, offset)) { output.enable = true; output.priority = io.priority; output.color = ppu.pram[color]; } } fx++; } auto PPU::Background::affine(u32 x, u32 y) -> void { if(x == 0) { if(!io.mosaic || (y % (1 + io.mosaicHeight)) == 0) { hmosaic = io.lx; vmosaic = io.ly; } fx = hmosaic; fy = vmosaic; } u32 screenSize = 16 << io.screenSize; u32 screenWrap = (1 << (io.affineWrap ? 7 + io.screenSize : 20)) - 1; u32 cx = (fx >> 8) & screenWrap; u32 cy = (fy >> 8) & screenWrap; u32 tx = cx >> 3; u32 ty = cy >> 3; n3 px = cx; n3 py = cy; if(tx < screenSize && ty < screenSize) { n8 character = ppu.vram[(io.screenBase << 11) + ty * screenSize + tx]; if(n8 color = ppu.vram[(io.characterBase << 14) + (character << 6) + (py << 3) + px]) { output.enable = true; output.priority = io.priority; output.color = ppu.pram[color]; } } fx += io.pa; fy += io.pc; if(x == 239) { io.lx += io.pb; io.ly += io.pd; } } auto PPU::Background::bitmap(u32 x, u32 y) -> void { if(x == 0) { if(!io.mosaic || (y % (1 + io.mosaicHeight)) == 0) { hmosaic = io.lx; vmosaic = io.ly; } fx = hmosaic; fy = vmosaic; } n1 depth = io.mode != 4; //0 = 8-bit (mode 4); 1 = 15-bit (mode 3, mode 5) u32 width = io.mode == 5 ? 160 : 240; u32 height = io.mode == 5 ? 128 : 160; u32 mode = depth ? Half : Byte; u32 baseAddress = io.mode == 3 ? 0 : 0xa000 * io.frame; u32 px = fx >> 8; u32 py = fy >> 8; if(px < width && py < height) { u32 offset = py * width + px; n15 color = ppu.readVRAM(mode, baseAddress + (offset << depth)); if(depth || color) { //8bpp color 0 is transparent; 15bpp color is always opaque if(depth == 0) color = ppu.pram[color]; output.enable = true; output.priority = io.priority; output.color = color; } } fx += io.pa; fy += io.pc; if(x == 239) { io.lx += io.pb; io.ly += io.pd; } } auto PPU::Background::power(u32 id) -> void { this->id = id; io = {}; latch = {}; output = {}; mosaic = {}; mosaicOffset = 0; hmosaic = 0; vmosaic = 0; fx = 0; fy = 0; } ares-126/ares/gba/ppu/color.cpp000066400000000000000000000013401415063341600164300ustar00rootroot00000000000000auto PPU::color(n32 color) -> n64 { n32 R = color.bit( 0, 4); n32 G = color.bit( 5, 9); n32 B = color.bit(10,14); n64 r = image::normalize(R, 5, 16); n64 g = image::normalize(G, 5, 16); n64 b = image::normalize(B, 5, 16); if(colorEmulation->value()) { f64 lcdGamma = 4.0, outGamma = 2.2; f64 lb = pow(B / 31.0, lcdGamma); f64 lg = pow(G / 31.0, lcdGamma); f64 lr = pow(R / 31.0, lcdGamma); r = pow(( 0 * lb + 50 * lg + 255 * lr) / 255, 1 / outGamma) * (0xffff * 255 / 280); g = pow(( 30 * lb + 230 * lg + 10 * lr) / 255, 1 / outGamma) * (0xffff * 255 / 280); b = pow((220 * lb + 10 * lg + 50 * lr) / 255, 1 / outGamma) * (0xffff * 255 / 280); } return r << 32 | g << 16 | b << 0; } ares-126/ares/gba/ppu/dac.cpp000066400000000000000000000045711415063341600160520ustar00rootroot00000000000000auto PPU::DAC::run(u32 x, u32 y) -> n15 { if(ppu.blank()) return 0x7fff; //determine active window n1 active[6] = {true, true, true, true, true, true}; //enable all layers if no windows are enabled if(ppu.window0.io.enable || ppu.window1.io.enable || ppu.window2.io.enable) { memory::copy(&active, &ppu.window3.io.active, sizeof(active)); if(ppu.window2.io.enable && ppu.window2.output) memory::copy(&active, &ppu.window2.io.active, sizeof(active)); if(ppu.window1.io.enable && ppu.window1.output) memory::copy(&active, &ppu.window1.io.active, sizeof(active)); if(ppu.window0.io.enable && ppu.window0.output) memory::copy(&active, &ppu.window0.io.active, sizeof(active)); } //priority sorting: find topmost two pixels Pixel layers[6] = { ppu.objects.mosaic, ppu.bg0.mosaic, ppu.bg1.mosaic, ppu.bg2.mosaic, ppu.bg3.mosaic, {true, 3, ppu.pram[0]}, }; u32 aboveLayer = 5, belowLayer = 5; for(s32 priority = 3; priority >= 0; priority--) { for(s32 layer = 5; layer >= 0; layer--) { if(layers[layer].enable && layers[layer].priority == priority && active[layer]) { belowLayer = aboveLayer; aboveLayer = layer; } } } auto above = layers[aboveLayer]; auto below = layers[belowLayer]; auto eva = min(16u, (u32)io.blendEVA); auto evb = min(16u, (u32)io.blendEVB); auto evy = min(16u, (u32)io.blendEVY); n15 color = above.color; //color blending if(active[SFX]) { if(above.translucent && io.blendBelow[belowLayer]) { color = blend(above.color, eva, below.color, evb); } else if(io.blendMode == 1 && io.blendAbove[aboveLayer] && io.blendBelow[belowLayer]) { color = blend(above.color, eva, below.color, evb); } else if(io.blendMode == 2 && io.blendAbove[aboveLayer]) { color = blend(above.color, 16 - evy, 0x7fff, evy); } else if(io.blendMode == 3 && io.blendAbove[aboveLayer]) { color = blend(above.color, 16 - evy, 0x0000, evy); } } return color; } auto PPU::DAC::blend(n15 above, u32 eva, n15 below, u32 evb) -> n15 { n5 ar = above >> 0, ag = above >> 5, ab = above >> 10; n5 br = below >> 0, bg = below >> 5, bb = below >> 10; u32 r = (ar * eva + br * evb) >> 4; u32 g = (ag * eva + bg * evb) >> 4; u32 b = (ab * eva + bb * evb) >> 4; return min(31u, r) << 0 | min(31u, g) << 5 | min(31u, b) << 10; } auto PPU::DAC::power() -> void { io = {}; } ares-126/ares/gba/ppu/debugger.cpp000066400000000000000000000012531415063341600171010ustar00rootroot00000000000000auto PPU::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("PPU VRAM"); memory.vram->setSize(ppu.vram.size()); memory.vram->setRead([&](u32 address) -> u8 { return ppu.vram[address]; }); memory.vram->setWrite([&](u32 address, u8 data) -> void { ppu.vram[address] = data; }); memory.pram = parent->append("PPU PRAM"); memory.pram->setSize(ppu.pram.size()); memory.pram->setRead([&](u32 address) -> u8 { return ppu.pram[address >> 1].byte(address & 1); }); memory.pram->setWrite([&](u32 address, u8 data) -> void { ppu.pram[address >> 1].byte(address & 1) = data; }); } ares-126/ares/gba/ppu/io.cpp000066400000000000000000000307421415063341600157310ustar00rootroot00000000000000auto PPU::readIO(n32 address) -> n8 { switch(address) { //DISPCNT case 0x0400'0000: return ( Background::IO::mode << 0 | io.gameBoyColorMode << 3 | Background::IO::frame << 4 | objects.io.hblank << 5 | objects.io.mapping << 6 | io.forceBlank << 7 ); case 0x0400'0001: return ( bg0.io.enable << 0 | bg1.io.enable << 1 | bg2.io.enable << 2 | bg3.io.enable << 3 | objects.io.enable << 4 | window0.io.enable << 5 | window1.io.enable << 6 | window2.io.enable << 7 ); //GRSWP case 0x0400'0002: return io.greenSwap; case 0x0400'0003: return 0; //DISPSTAT case 0x0400'0004: return ( io.vblank << 0 | io.hblank << 1 | io.vcoincidence << 2 | io.irqvblank << 3 | io.irqhblank << 4 | io.irqvcoincidence << 5 ); case 0x0400'0005: return ( io.vcompare ); //VCOUNT case 0x0400'0006: return io.vcounter.byte(0); case 0x0400'0007: return io.vcounter.byte(1); //BG0CNT case 0x0400'0008: return bg0.io.priority << 0 | bg0.io.characterBase << 2 | bg0.io.unused << 4 | bg0.io.mosaic << 6 | bg0.io.colorMode << 7; case 0x0400'0009: return bg0.io.screenBase << 0 | bg0.io.affineWrap << 5 | bg0.io.screenSize << 6; //BG1CNT case 0x0400'000a: return bg1.io.priority << 0 | bg1.io.characterBase << 2 | bg1.io.unused << 4 | bg1.io.mosaic << 6 | bg1.io.colorMode << 7; case 0x0400'000b: return bg1.io.screenBase << 0 | bg1.io.affineWrap << 5 | bg1.io.screenSize << 6; //BG2CNT case 0x0400'000c: return bg2.io.priority << 0 | bg2.io.characterBase << 2 | bg2.io.unused << 4 | bg2.io.mosaic << 6 | bg2.io.colorMode << 7; case 0x0400'000d: return bg2.io.screenBase << 0 | bg2.io.affineWrap << 5 | bg2.io.screenSize << 6; //BG3CNT case 0x0400'000e: return bg3.io.priority << 0 | bg3.io.characterBase << 2 | bg3.io.unused << 4 | bg3.io.mosaic << 6 | bg3.io.colorMode << 7; case 0x0400'000f: return bg3.io.screenBase << 0 | bg3.io.affineWrap << 5 | bg3.io.screenSize << 6; //WININ0 case 0x0400'0048: return window0.io.active[BG0] << 0 | window0.io.active[BG1] << 1 | window0.io.active[BG2] << 2 | window0.io.active[BG3] << 3 | window0.io.active[OBJ] << 4 | window0.io.active[SFX] << 5; //WININ1 case 0x0400'0049: return window1.io.active[BG0] << 0 | window1.io.active[BG1] << 1 | window1.io.active[BG2] << 2 | window1.io.active[BG3] << 3 | window1.io.active[OBJ] << 4 | window1.io.active[SFX] << 5; //WINOUT case 0x0400'004a: return window3.io.active[BG0] << 0 | window3.io.active[BG1] << 1 | window3.io.active[BG2] << 2 | window3.io.active[BG3] << 3 | window3.io.active[OBJ] << 4 | window3.io.active[SFX] << 5; //WININ2 case 0x0400'004b: return window2.io.active[BG0] << 0 | window2.io.active[BG1] << 1 | window2.io.active[BG2] << 2 | window2.io.active[BG3] << 3 | window2.io.active[OBJ] << 4 | window2.io.active[SFX] << 5; //MOSAIC (write-only) //BLTCNT case 0x0400'0050: return ( dac.io.blendAbove[BG0] << 0 | dac.io.blendAbove[BG1] << 1 | dac.io.blendAbove[BG2] << 2 | dac.io.blendAbove[BG3] << 3 | dac.io.blendAbove[OBJ] << 4 | dac.io.blendAbove[SFX] << 5 | dac.io.blendMode << 6 ); case 0x0400'0051: return ( dac.io.blendBelow[BG0] << 0 | dac.io.blendBelow[BG1] << 1 | dac.io.blendBelow[BG2] << 2 | dac.io.blendBelow[BG3] << 3 | dac.io.blendBelow[OBJ] << 4 | dac.io.blendBelow[SFX] << 5 ); //BLDALPHA case 0x0400'0052: return dac.io.blendEVA; case 0x0400'0053: return dac.io.blendEVB; //BLDY (write-only) } if(cpu.context.dmaActive) return cpu.dmabus.data.byte(address & 3); return cpu.pipeline.fetch.instruction.byte(address & 1); } auto PPU::writeIO(n32 address, n8 data) -> void { switch(address) { //DISPCNT case 0x0400'0000: Background::IO::mode = data.bit(0,2); io.gameBoyColorMode = data.bit(3); Background::IO::frame = data.bit(4); objects.io.hblank = data.bit(5); objects.io.mapping = data.bit(6); io.forceBlank = data.bit(7); return; case 0x0400'0001: bg0.io.enable = data.bit(0); bg1.io.enable = data.bit(1); bg2.io.enable = data.bit(2); bg3.io.enable = data.bit(3); objects.io.enable = data.bit(4); window0.io.enable = data.bit(5); window1.io.enable = data.bit(6); window2.io.enable = data.bit(7); //outside window is enabled whenever any inside window is enabled window3.io.enable = (bool)data.bit(5,7); return; //GRSWP case 0x0400'0002: io.greenSwap = data.bit(0); return; case 0x0400'0003: return; //DISPSTAT case 0x0400'0004: io.irqvblank = data.bit(3); io.irqhblank = data.bit(4); io.irqvcoincidence = data.bit(5); return; case 0x0400'0005: io.vcompare = data; return; //BG0CNT case 0x0400'0008: bg0.io.priority = data.bit(0,1); bg0.io.characterBase = data.bit(2,3); bg0.io.unused = data.bit(4,5); bg0.io.mosaic = data.bit(6); bg0.io.colorMode = data.bit(7); return; case 0x0400'0009: bg0.io.screenBase = data.bit(0,4); bg0.io.affineWrap = false; bg0.io.screenSize = data.bit(6,7); return; //BG1CNT case 0x0400'000a: bg1.io.priority = data.bit(0,1); bg1.io.characterBase = data.bit(2,3); bg1.io.unused = data.bit(4,5); bg1.io.mosaic = data.bit(6); bg1.io.colorMode = data.bit(7); return; case 0x0400'000b: bg1.io.screenBase = data.bit(0,4); bg1.io.affineWrap = false; bg1.io.screenSize = data.bit(6,7); return; //BG2CNT case 0x0400'000c: bg2.io.priority = data.bit(0,1); bg2.io.characterBase = data.bit(2,3); bg2.io.unused = data.bit(4,5); bg2.io.mosaic = data.bit(6); bg2.io.colorMode = data.bit(7); return; case 0x0400'000d: bg2.io.screenBase = data.bit(0,4); bg2.io.affineWrap = data.bit(5); bg2.io.screenSize = data.bit(6,7); return; //BG3CNT case 0x0400'000e: bg3.io.priority = data.bit(0,1); bg3.io.characterBase = data.bit(2,3); bg3.io.unused = data.bit(4,5); bg3.io.mosaic = data.bit(6); bg3.io.colorMode = data.bit(7); return; case 0x0400'000f: bg3.io.screenBase = data.bit(0,4); bg3.io.affineWrap = data.bit(5); bg3.io.screenSize = data.bit(6,7); return; //BG0HOFS case 0x0400'0010: bg0.io.hoffset.bit(0,7) = data.bit(0,7); return; case 0x0400'0011: bg0.io.hoffset.bit(8) = data.bit(0); return; //BG0VOFS case 0x0400'0012: bg0.io.voffset.bit(0,7) = data.bit(0,7); return; case 0x0400'0013: bg0.io.voffset.bit(8) = data.bit(0); return; //BG1HOFS case 0x0400'0014: bg1.io.hoffset.bit(0,7) = data.bit(0,7); return; case 0x0400'0015: bg1.io.hoffset.bit(8) = data.bit(0); return; //BG1VOFS case 0x0400'0016: bg1.io.voffset.bit(0,7) = data.bit(0,7); return; case 0x0400'0017: bg1.io.voffset.bit(8) = data.bit(0); return; //BG2HOFS case 0x0400'0018: bg2.io.hoffset.bit(0,7) = data.bit(0,7); return; case 0x0400'0019: bg2.io.hoffset.bit(8) = data.bit(0); return; //BG2VOFS case 0x0400'001a: bg2.io.voffset.bit(0,7) = data.bit(0,7); return; case 0x0400'001b: bg2.io.voffset.bit(8) = data.bit(0); return; //BG3HOFS case 0x0400'001c: bg3.io.hoffset.bit(0,7) = data.bit(0,7); return; case 0x0400'001d: bg3.io.hoffset.bit(8) = data.bit(0); return; //BG3VOFS case 0x0400'001e: bg3.io.voffset.bit(0,7) = data.bit(0,7); return; case 0x0400'001f: bg3.io.voffset.bit(8) = data.bit(0); return; //BG2PA case 0x0400'0020: bg2.io.pa.byte(0) = data; return; case 0x0400'0021: bg2.io.pa.byte(1) = data; return; //BG2PB case 0x0400'0022: bg2.io.pb.byte(0) = data; return; case 0x0400'0023: bg2.io.pb.byte(1) = data; return; //BG2PC case 0x0400'0024: bg2.io.pc.byte(0) = data; return; case 0x0400'0025: bg2.io.pc.byte(1) = data; return; //BG2PD case 0x0400'0026: bg2.io.pd.byte(0) = data; return; case 0x0400'0027: bg2.io.pd.byte(1) = data; return; //BG2X case 0x0400'0028: bg2.io.x.bit( 0, 7) = data.bit(0,7); bg2.io.lx = bg2.io.x; return; case 0x0400'0029: bg2.io.x.bit( 8,15) = data.bit(0,7); bg2.io.lx = bg2.io.x; return; case 0x0400'002a: bg2.io.x.bit(16,23) = data.bit(0,7); bg2.io.lx = bg2.io.x; return; case 0x0400'002b: bg2.io.x.bit(24,27) = data.bit(0,3); bg2.io.lx = bg2.io.x; return; //BG2Y case 0x0400'002c: bg2.io.y.bit( 0, 7) = data.bit(0,7); bg2.io.ly = bg2.io.y; return; case 0x0400'002d: bg2.io.y.bit( 8,15) = data.bit(0,7); bg2.io.ly = bg2.io.y; return; case 0x0400'002e: bg2.io.y.bit(16,23) = data.bit(0,7); bg2.io.ly = bg2.io.y; return; case 0x0400'002f: bg2.io.y.bit(24,27) = data.bit(0,3); bg2.io.ly = bg2.io.y; return; //BG3PA case 0x0400'0030: bg3.io.pa.byte(0) = data; return; case 0x0400'0031: bg3.io.pa.byte(1) = data; return; //BG3PB case 0x0400'0032: bg3.io.pb.byte(0) = data; return; case 0x0400'0033: bg3.io.pb.byte(1) = data; return; //BG3PC case 0x0400'0034: bg3.io.pc.byte(0) = data; return; case 0x0400'0035: bg3.io.pc.byte(1) = data; return; //BG3PD case 0x0400'0036: bg3.io.pd.byte(0) = data; return; case 0x0400'0037: bg3.io.pd.byte(1) = data; return; //BG3X case 0x0400'0038: bg3.io.x.bit( 0, 7) = data.bit(0,7); bg3.io.lx = bg3.io.x; return; case 0x0400'0039: bg3.io.x.bit( 8,15) = data.bit(0,7); bg3.io.lx = bg3.io.x; return; case 0x0400'003a: bg3.io.x.bit(16,23) = data.bit(0,7); bg3.io.lx = bg3.io.x; return; case 0x0400'003b: bg3.io.x.bit(24,27) = data.bit(0,3); bg3.io.lx = bg3.io.x; return; //BG3Y case 0x0400'003c: bg3.io.y.bit( 0, 7) = data.bit(0,7); bg3.io.ly = bg3.io.y; return; case 0x0400'003d: bg3.io.y.bit( 8,15) = data.bit(0,7); bg3.io.ly = bg3.io.y; return; case 0x0400'003e: bg3.io.y.bit(16,23) = data.bit(0,7); bg3.io.ly = bg3.io.y; return; case 0x0400'003f: bg3.io.y.bit(24,27) = data.bit(0,3); bg3.io.ly = bg3.io.y; return; //WIN0H case 0x0400'0040: window0.io.x2 = data; return; case 0x0400'0041: window0.io.x1 = data; return; //WIN1H case 0x0400'0042: window1.io.x2 = data; return; case 0x0400'0043: window1.io.x1 = data; return; //WIN0V case 0x0400'0044: window0.io.y2 = data; return; case 0x0400'0045: window0.io.y1 = data; return; //WIN1V case 0x0400'0046: window1.io.y2 = data; return; case 0x0400'0047: window1.io.y1 = data; return; //WININ0 case 0x0400'0048: window0.io.active[BG0] = data.bit(0); window0.io.active[BG1] = data.bit(1); window0.io.active[BG2] = data.bit(2); window0.io.active[BG3] = data.bit(3); window0.io.active[OBJ] = data.bit(4); window0.io.active[SFX] = data.bit(5); return; //WININ1 case 0x0400'0049: window1.io.active[BG0] = data.bit(0); window1.io.active[BG1] = data.bit(1); window1.io.active[BG2] = data.bit(2); window1.io.active[BG3] = data.bit(3); window1.io.active[OBJ] = data.bit(4); window1.io.active[SFX] = data.bit(5); return; //WINOUT case 0x0400'004a: window3.io.active[BG0] = data.bit(0); window3.io.active[BG1] = data.bit(1); window3.io.active[BG2] = data.bit(2); window3.io.active[BG3] = data.bit(3); window3.io.active[OBJ] = data.bit(4); window3.io.active[SFX] = data.bit(5); return; //WININ2 case 0x0400'004b: window2.io.active[BG0] = data.bit(0); window2.io.active[BG1] = data.bit(1); window2.io.active[BG2] = data.bit(2); window2.io.active[BG3] = data.bit(3); window2.io.active[OBJ] = data.bit(4); window2.io.active[SFX] = data.bit(5); return; //MOSAIC case 0x0400'004c: Background::IO::mosaicWidth = data.bit(0,3); Background::IO::mosaicHeight = data.bit(4,7); return; case 0x0400'004d: objects.io.mosaicWidth = data.bit(0,3); objects.io.mosaicHeight = data.bit(4,7); return; //BLDCNT case 0x0400'0050: dac.io.blendAbove[BG0] = data.bit(0); dac.io.blendAbove[BG1] = data.bit(1); dac.io.blendAbove[BG2] = data.bit(2); dac.io.blendAbove[BG3] = data.bit(3); dac.io.blendAbove[OBJ] = data.bit(4); dac.io.blendAbove[SFX] = data.bit(5); dac.io.blendMode = data.bit(6,7); return; case 0x0400'0051: dac.io.blendBelow[BG0] = data.bit(0); dac.io.blendBelow[BG1] = data.bit(1); dac.io.blendBelow[BG2] = data.bit(2); dac.io.blendBelow[BG3] = data.bit(3); dac.io.blendBelow[OBJ] = data.bit(4); dac.io.blendBelow[SFX] = data.bit(5); return; //BLDALPHA case 0x0400'0052: dac.io.blendEVA = data.bit(0,4); return; case 0x0400'0053: dac.io.blendEVB = data.bit(0,4); return; //BLDY case 0x0400'0054: dac.io.blendEVY = data.bit(0,4); return; case 0x0400'0055: return; } } ares-126/ares/gba/ppu/memory.cpp000066400000000000000000000105631415063341600166310ustar00rootroot00000000000000auto PPU::readVRAM(u32 mode, n32 address) -> n32 { address &= (address & 0x10000) ? 0x17fff : 0x0ffff; if(mode & Word) { address &= ~3; return vram[address + 0] << 0 | vram[address + 1] << 8 | vram[address + 2] << 16 | vram[address + 3] << 24; } else if(mode & Half) { address &= ~1; return vram[address + 0] << 0 | vram[address + 1] << 8; } else if(mode & Byte) { return vram[address]; } unreachable; } auto PPU::writeVRAM(u32 mode, n32 address, n32 word) -> void { address &= (address & 0x10000) ? 0x17fff : 0x0ffff; if(mode & Word) { address &= ~3; vram[address + 0] = word >> 0; vram[address + 1] = word >> 8; vram[address + 2] = word >> 16; vram[address + 3] = word >> 24; } else if(mode & Half) { address &= ~1; vram[address + 0] = word >> 0; vram[address + 1] = word >> 8; } else if(mode & Byte) { //8-bit writes to OBJ section of VRAM are ignored if(Background::IO::mode <= 2 && address >= 0x10000) return; if(Background::IO::mode <= 5 && address >= 0x14000) return; address &= ~1; vram[address + 0] = (n8)word; vram[address + 1] = (n8)word; } } auto PPU::readPRAM(u32 mode, n32 address) -> n32 { if(mode & Word) return readPRAM(Half, address & ~2) << 0 | readPRAM(Half, address | 2) << 16; if(mode & Byte) return readPRAM(Half, address) >> ((address & 1) * 8); return pram[address >> 1 & 511]; } auto PPU::writePRAM(u32 mode, n32 address, n32 word) -> void { if(mode & Word) { writePRAM(Half, address & ~2, word >> 0); writePRAM(Half, address | 2, word >> 16); return; } if(mode & Byte) { word = (n8)word; return writePRAM(Half, address, word << 8 | word << 0); } pram[address >> 1 & 511] = (n16)word; } auto PPU::readOAM(u32 mode, n32 address) -> n32 { if(mode & Word) return readOAM(Half, address & ~2) << 0 | readOAM(Half, address | 2) << 16; if(mode & Byte) return readOAM(Half, address) >> ((address & 1) * 8); auto& obj = object[address >> 3 & 127]; auto& par = objectParam[address >> 5 & 31]; switch(address & 6) { case 0: return ( (obj.y << 0) | (obj.affine << 8) | (obj.affineSize << 9) | (obj.mode << 10) | (obj.mosaic << 12) | (obj.colors << 13) | (obj.shape << 14) ); case 2: return ( (obj.x << 0) | (obj.affineParam << 9) | (obj.hflip << 12) | (obj.vflip << 13) | (obj.size << 14) ); case 4: return ( (obj.character << 0) | (obj.priority << 10) | (obj.palette << 12) ); case 6: switch(address >> 3 & 3) { case 0: return par.pa; case 1: return par.pb; case 2: return par.pc; case 3: return par.pd; } } unreachable; } auto PPU::writeOAM(u32 mode, n32 address, n32 word) -> void { if(mode & Word) { writeOAM(Half, address & ~2, word >> 0); writeOAM(Half, address | 2, word >> 16); return; } if(mode & Byte) return; //8-bit writes to OAM are ignored auto& obj = object[address >> 3 & 127]; auto& par = objectParam[address >> 5 & 31]; switch(address & 6) { case 0: obj.y = word >> 0; obj.affine = word >> 8; obj.affineSize = word >> 9; obj.mode = word >> 10; obj.mosaic = word >> 12; obj.colors = word >> 13; obj.shape = word >> 14; break; case 2: obj.x = word >> 0; obj.affineParam = word >> 9; obj.hflip = word >> 12; obj.vflip = word >> 13; obj.size = word >> 14; break; case 4: obj.character = word >> 0; obj.priority = word >> 10; obj.palette = word >> 12; break; case 6: switch(address >> 3 & 3) { case 0: par.pa = word; break; case 1: par.pb = word; break; case 2: par.pc = word; break; case 3: par.pd = word; break; } } static u32 widths[] = { 8, 16, 32, 64, 16, 32, 32, 64, 8, 8, 16, 32, 8, 8, 8, 8, //invalid modes }; static u32 heights[] = { 8, 16, 32, 64, 8, 8, 16, 32, 16, 32, 32, 64, 8, 8, 8, 8, //invalid modes }; obj.width = widths [obj.shape * 4 + obj.size]; obj.height = heights[obj.shape * 4 + obj.size]; } auto PPU::readObjectVRAM(u32 address) const -> n8 { if(Background::IO::mode == 3 || Background::IO::mode == 4 || Background::IO::mode == 5) { if(address <= 0x3fff) return 0u; } return vram[0x10000 + (address & 0x7fff)]; } ares-126/ares/gba/ppu/object.cpp000066400000000000000000000057111415063341600165660ustar00rootroot00000000000000auto PPU::Objects::scanline(u32 y) -> void { mosaicOffset = 0; for(auto& pixel : buffer) pixel = {}; if(ppu.blank() || !io.enable) return; for(auto& object : ppu.object) { n8 py = y - object.y; if(object.affine == 0 && object.affineSize == 1) continue; //hidden if(py >= object.height << object.affineSize) continue; //offscreen u32 rowSize = io.mapping == 0 ? 32 >> object.colors : object.width >> 3; u32 baseAddress = object.character << 5; if(object.mosaic && io.mosaicHeight) { s32 mosaicY = (y / (1 + io.mosaicHeight)) * (1 + io.mosaicHeight); py = object.y >= 160 || mosaicY - object.y >= 0 ? u32(mosaicY - object.y) : 0; } i16 pa = ppu.objectParam[object.affineParam].pa; i16 pb = ppu.objectParam[object.affineParam].pb; i16 pc = ppu.objectParam[object.affineParam].pc; i16 pd = ppu.objectParam[object.affineParam].pd; //center-of-sprite coordinates i16 centerX = object.width >> 1; i16 centerY = object.height >> 1; //origin coordinates (top-left of sprite) i28 originX = -(centerX << object.affineSize); i28 originY = -(centerY << object.affineSize) + py; //fractional pixel coordinates i28 fx = originX * pa + originY * pb; i28 fy = originX * pc + originY * pd; for(u32 px : range(object.width << object.affineSize)) { u32 sx, sy; if(!object.affine) { sx = px ^ (object.hflip ? object.width - 1 : 0); sy = py ^ (object.vflip ? object.height - 1 : 0); } else { sx = (fx >> 8) + centerX; sy = (fy >> 8) + centerY; } n9 bx = object.x + px; if(bx < 240 && sx < object.width && sy < object.height) { u32 offset = (sy >> 3) * rowSize + (sx >> 3); offset = offset * 64 + (sy & 7) * 8 + (sx & 7); n8 color = ppu.readObjectVRAM(baseAddress + (offset >> !object.colors)); if(object.colors == 0) color = sx & 1 ? color >> 4 : color & 15; if(object.mode & 2) { if(color) { buffer[bx].window = true; } } else if(!buffer[bx].enable || object.priority < buffer[bx].priority) { buffer[bx].priority = object.priority; //updated regardless of transparency if(color) { if(object.colors == 0) color = object.palette * 16 + color; buffer[bx].enable = true; buffer[bx].color = ppu.pram[256 + color]; buffer[bx].translucent = object.mode == 1; buffer[bx].mosaic = object.mosaic; } } } fx += pa; fy += pc; } } } auto PPU::Objects::run(u32 x, u32 y) -> void { output = {}; if(ppu.blank() || !io.enable) { mosaic = {}; return; } output = buffer[x]; //horizontal mosaic if(!output.mosaic || ++mosaicOffset >= 1 + io.mosaicWidth) { mosaicOffset = 0; mosaic = output; } } auto PPU::Objects::power() -> void { io = {}; for(auto& pixel : buffer) pixel = {}; output = {}; mosaic = {}; mosaicOffset = 0; } ares-126/ares/gba/ppu/ppu.cpp000066400000000000000000000101461415063341600161220ustar00rootroot00000000000000#include //pixel: 4 cycles //hdraw: 240 pixels ( 960 cycles) //hblank: 68 pixels ( 272 cycles) //scanline: 308 pixels (1232 cycles) //vdraw: 160 scanlines (197120 cycles) //vblank: 68 scanlines ( 83776 cycles) //frame: 228 scanlines (280896 cycles) namespace ares::GameBoyAdvance { PPU ppu; #include "background.cpp" #include "object.cpp" #include "window.cpp" #include "dac.cpp" #include "io.cpp" #include "memory.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto PPU::load(Node::Object parent) -> void { vram.allocate(96_KiB); pram.allocate(512); node = parent->append("PPU"); screen = node->append("Screen", 240, 160); screen->colors(1 << 15, {&PPU::color, this}); screen->setSize(240, 160); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); screen->setViewport(0, 0, 240, 160); colorEmulation = screen->append("Color Emulation", true, [&](auto value) { screen->resetPalette(); }); colorEmulation->setDynamic(true); interframeBlending = screen->append("Interframe Blending", true, [&](auto value) { screen->setInterframeBlending(value); }); interframeBlending->setDynamic(true); rotation = screen->append("Orientation", "0°", [&](auto value) { if(value == "0°") screen->setRotation( 0); if(value == "90°") screen->setRotation( 90); if(value == "180°") screen->setRotation(180); if(value == "270°") screen->setRotation(270); }); rotation->setDynamic(true); rotation->setAllowedValues({"0°", "90°", "180°", "270°"}); debugger.load(node); } auto PPU::unload() -> void { debugger = {}; colorEmulation.reset(); interframeBlending.reset(); rotation.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); vram.reset(); pram.reset(); } inline auto PPU::blank() -> bool { return io.forceBlank || cpu.stopped(); } auto PPU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto PPU::main() -> void { cpu.keypad.run(); io.vblank = io.vcounter >= 160 && io.vcounter <= 226; io.vcoincidence = io.vcounter == io.vcompare; if(io.vcounter == 0) { frame(); bg2.io.lx = bg2.io.x; bg2.io.ly = bg2.io.y; bg3.io.lx = bg3.io.x; bg3.io.ly = bg3.io.y; } if(io.vcounter == 160) { if(io.irqvblank) cpu.irq.flag |= CPU::Interrupt::VBlank; cpu.dmaVblank(); } if(io.irqvcoincidence) { if(io.vcoincidence) cpu.irq.flag |= CPU::Interrupt::VCoincidence; } if(io.vcounter < 160) { u32 y = io.vcounter; bg0.scanline(y); bg1.scanline(y); bg2.scanline(y); bg3.scanline(y); objects.scanline(y); auto line = screen->pixels().data() + y * 240; for(u32 x : range(240)) { bg0.run(x, y); bg1.run(x, y); bg2.run(x, y); bg3.run(x, y); objects.run(x, y); window0.run(x, y); window1.run(x, y); window2.output = objects.output.window; window3.output = true; n15 color = dac.run(x, y); line[x] = color; step(4); } } else { step(960); } io.hblank = 1; if(io.irqhblank) cpu.irq.flag |= CPU::Interrupt::HBlank; if(io.vcounter < 160) cpu.dmaHblank(); step(240); io.hblank = 0; if(io.vcounter < 160) cpu.dmaHDMA(); step(32); if(++io.vcounter == 228) io.vcounter = 0; } auto PPU::frame() -> void { screen->frame(); scheduler.exit(Event::Frame); } auto PPU::power() -> void { Thread::create(system.frequency(), {&PPU::main, this}); screen->power(); for(u32 n = 0x000; n <= 0x055; n++) bus.io[n] = this; for(u32 n = 0; n < 96 * 1024; n++) vram[n] = 0x00; for(u32 n = 0; n < 1024; n += 2) writePRAM(n, Half, 0x0000); for(u32 n = 0; n < 1024; n += 2) writeOAM(n, Half, 0x0000); io = {}; for(auto& object : this->object) object = {}; for(auto& param : this->objectParam) param = {}; bg0.power(BG0); bg1.power(BG1); bg2.power(BG2); bg3.power(BG3); objects.power(); window0.power(IN0); window1.power(IN1); window2.power(IN2); window3.power(OUT); dac.power(); } } ares-126/ares/gba/ppu/ppu.hpp000066400000000000000000000115431415063341600161310ustar00rootroot00000000000000struct PPU : Thread, IO { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean colorEmulation; Node::Setting::Boolean interframeBlending; Node::Setting::String rotation; Memory::Writable vram; //96KB Memory::Writable pram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory pram; } memory; } debugger; //ppu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto blank() -> bool; auto step(u32 clocks) -> void; auto main() -> void; auto frame() -> void; auto refresh() -> void; auto power() -> void; //io.cpp auto readIO(n32 address) -> n8; auto writeIO(n32 address, n8 byte) -> void; //memory.cpp auto readVRAM(u32 mode, n32 address) -> n32; auto writeVRAM(u32 mode, n32 address, n32 word) -> void; auto readPRAM(u32 mode, n32 address) -> n32; auto writePRAM(u32 mode, n32 address, n32 word) -> void; auto readOAM(u32 mode, n32 address) -> n32; auto writeOAM(u32 mode, n32 address, n32 word) -> void; auto readObjectVRAM(u32 address) const -> n8; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; private: //note: I/O register order is {BG0-BG3, OBJ, SFX} //however; layer ordering is {OBJ, BG0-BG3, SFX} enum : u32 { OBJ = 0, BG0 = 1, BG1 = 2, BG2 = 3, BG3 = 4, SFX = 5 }; enum : u32 { IN0 = 0, IN1 = 1, IN2 = 2, OUT = 3 }; struct IO { n1 gameBoyColorMode; n1 forceBlank; n1 greenSwap; n1 vblank; n1 hblank; n1 vcoincidence; n1 irqvblank; n1 irqhblank; n1 irqvcoincidence; n8 vcompare; n16 vcounter; } io; struct Pixel { n1 enable; n2 priority; n15 color; //OBJ only n1 translucent; n1 mosaic; n1 window; //IN2 }; struct Background { //background.cpp auto scanline(u32 y) -> void; auto run(u32 x, u32 y) -> void; auto linear(u32 x, u32 y) -> void; auto affine(u32 x, u32 y) -> void; auto bitmap(u32 x, u32 y) -> void; auto power(u32 id) -> void; //serialization.cpp auto serialize(serializer&) -> void; u32 id; //BG0, BG1, BG2, BG3 struct IO { static n3 mode; static n1 frame; static n5 mosaicWidth; static n5 mosaicHeight; n1 enable; n2 priority; n2 characterBase; n2 unused; n1 mosaic; n1 colorMode; n5 screenBase; n1 affineWrap; //BG2, BG3 only n2 screenSize; n9 hoffset; n9 voffset; //BG2, BG3 only i16 pa; i16 pb; i16 pc; i16 pd; i28 x; i28 y; //internal i28 lx; i28 ly; } io; struct Latch { n10 character; n1 hflip; n1 vflip; n4 palette; } latch; Pixel output; Pixel mosaic; u32 mosaicOffset; u32 hmosaic; u32 vmosaic; i28 fx; i28 fy; } bg0, bg1, bg2, bg3; struct Objects { //object.cpp auto scanline(u32 y) -> void; auto run(u32 x, u32 y) -> void; auto power() -> void; //object.cpp auto serialize(serializer&) -> void; struct IO { n1 enable; n1 hblank; //1 = allow access to OAM during Hblank n1 mapping; //0 = two-dimensional, 1 = one-dimensional n5 mosaicWidth; n5 mosaicHeight; } io; Pixel buffer[240]; Pixel output; Pixel mosaic; u32 mosaicOffset; } objects; struct Window { //window.cpp auto run(u32 x, u32 y) -> void; auto power(u32 id) -> void; //serialization.cpp auto serialize(serializer&) -> void; u32 id; //IN0, IN1, IN2, OUT struct IO { n1 enable; n1 active[6]; //IN0, IN1 only n8 x1; n8 x2; n8 y1; n8 y2; } io; n1 output; //IN0, IN1, IN2 only } window0, window1, window2, window3; struct DAC { //dac.cpp auto run(u32 x, u32 y) -> n15; auto blend(n15 above, u32 eva, n15 below, u32 evb) -> n15; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n2 blendMode; n1 blendAbove[6]; n1 blendBelow[6]; n5 blendEVA; n5 blendEVB; n5 blendEVY; } io; } dac; struct Object { //serialization.cpp auto serialize(serializer&) -> void; n8 y; n1 affine; n1 affineSize; n2 mode; n1 mosaic; n1 colors; //0 = 16, 1 = 256 n2 shape; //0 = square, 1 = horizontal, 2 = vertical n9 x; n5 affineParam; n1 hflip; n1 vflip; n2 size; n10 character; n2 priority; n4 palette; //ancillary data n32 width; n32 height; } object[128]; struct ObjectParam { //serialization.cpp auto serialize(serializer&) -> void; i16 pa; i16 pb; i16 pc; i16 pd; } objectParam[32]; }; extern PPU ppu; ares-126/ares/gba/ppu/serialization.cpp000066400000000000000000000036371415063341600202020ustar00rootroot00000000000000auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); s(vram); s(pram); s(io.gameBoyColorMode); s(io.forceBlank); s(io.greenSwap); s(io.vblank); s(io.hblank); s(io.vcoincidence); s(io.irqvblank); s(io.irqhblank); s(io.irqvcoincidence); s(io.vcompare); s(io.vcounter); s(Background::IO::mode); s(Background::IO::frame); s(Background::IO::mosaicWidth); s(Background::IO::mosaicHeight); s(bg0); s(bg1); s(bg2); s(bg3); s(objects); s(window0); s(window1); s(window2); s(window3); s(dac); for(auto& object : this->object) s(object); for(auto& param : this->objectParam) s(param); } auto PPU::Background::serialize(serializer& s) -> void { s(id); s(io.enable); s(io.priority); s(io.characterBase); s(io.unused); s(io.mosaic); s(io.colorMode); s(io.screenBase); s(io.affineWrap); s(io.screenSize); s(io.hoffset); s(io.voffset); s(io.pa); s(io.pb); s(io.pc); s(io.pd); s(io.x); s(io.y); s(io.lx); s(io.ly); s(mosaicOffset); s(hmosaic); s(vmosaic); s(fx); s(fy); } auto PPU::Objects::serialize(serializer& s) -> void { s(io.enable); s(io.hblank); s(io.mapping); s(io.mosaicWidth); s(io.mosaicHeight); s(mosaicOffset); } auto PPU::Window::serialize(serializer& s) -> void { s(id); s(io.enable); s(io.active); s(io.x1); s(io.x2); s(io.y1); s(io.y2); s(output); } auto PPU::DAC::serialize(serializer& s) -> void { s(io.blendMode); s(io.blendAbove); s(io.blendBelow); s(io.blendEVA); s(io.blendEVB); s(io.blendEVY); } auto PPU::Object::serialize(serializer& s) -> void { s(y); s(affine); s(affineSize); s(mode); s(mosaic); s(colors); s(shape); s(x); s(affineParam); s(hflip); s(vflip); s(size); s(character); s(priority); s(palette); s(width); s(height); } auto PPU::ObjectParam::serialize(serializer& s) -> void { s(pa); s(pb); s(pc); s(pd); } ares-126/ares/gba/ppu/window.cpp000066400000000000000000000005051415063341600166230ustar00rootroot00000000000000auto PPU::Window::run(u32 x, u32 y) -> void { auto x1 = io.x1, x2 = io.x2; auto y1 = io.y1, y2 = io.y2; if(x2 < x1 || x2 > 240) x2 = 240; if(y2 < y1 || y2 > 160) y2 = 160; output = (x >= x1 && x < x2 && y >= y1 && y < y2); } auto PPU::Window::power(u32 id) -> void { this->id = id; io = {}; output = 0; } ares-126/ares/gba/system/000077500000000000000000000000001415063341600153305ustar00rootroot00000000000000ares-126/ares/gba/system/bios.cpp000066400000000000000000000021531415063341600167710ustar00rootroot00000000000000auto BIOS::load(Node::Object parent) -> void { rom.allocate(16_KiB); if(auto fp = system.pak->read("bios.rom")) { rom.load(fp); } } auto BIOS::unload() -> void { rom.reset(); } auto BIOS::read(u32 mode, n25 address) -> n32 { //unmapped memory if(address >= 0x0000'4000) { if(cpu.context.dmaActive) return cpu.dmabus.data; return cpu.pipeline.fetch.instruction; //0000'4000-01ff'ffff } //GBA BIOS is read-protected; only the BIOS itself can read its own memory //when accessed elsewhere; this should return the last value read by the BIOS program if(!cpu.memory.biosSwap) { if(cpu.processor.r15 >= 0x0000'4000) return mdr; } else { if(cpu.processor.r15 <= 0x01ff'ffff) return mdr; if(cpu.processor.r15 >= 0x0200'4000) return mdr; } if(mode & Word) return mdr = read(Half, address &~ 2) << 0 | read(Half, address | 2) << 16; if(mode & Half) return mdr = read(Byte, address &~ 1) << 0 | read(Byte, address | 1) << 8; return mdr = rom.read(address); } auto BIOS::write(u32 mode, n25 address, n32 word) -> void { } auto BIOS::serialize(serializer& s) -> void { s(mdr); } ares-126/ares/gba/system/controls.cpp000066400000000000000000000030341415063341600176770ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); b = node->append("B"); a = node->append("A"); l = node->append("L"); r = node->append("R"); select = node->append("Select"); start = node->append("Start"); if(GameBoyAdvance::Model::GameBoyPlayer()) { rumbler = parent->append("Rumble"); } } auto System::Controls::poll() -> void { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(b); platform->input(a); platform->input(l); platform->input(r); platform->input(select); platform->input(start); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } auto System::Controls::rumble(bool enable) -> void { if(GameBoyAdvance::Model::GameBoyPlayer()) { rumbler->setEnable(enable); platform->input(rumbler); } } ares-126/ares/gba/system/serialization.cpp000066400000000000000000000017701415063341600207160ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(bios); s(cartridge); s(cpu); s(ppu); s(apu); s(player); } ares-126/ares/gba/system/system.cpp000066400000000000000000000041531415063341600173630ustar00rootroot00000000000000#include namespace ares::GameBoyAdvance { auto enumerate() -> vector { return { "[Nintendo] Game Boy Advance", "[Nintendo] Game Boy Player", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; BIOS bios; System system; #include "bios.cpp" #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); if(GameBoyAdvance::Model::GameBoyPlayer()) player.frame(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Game Boy Advance")) { information.name = "Game Boy Advance"; information.model = Model::GameBoyAdvance; } if(name.find("Game Boy Player")) { information.name = "Game Boy Player"; information.model = Model::GameBoyPlayer; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; scheduler.reset(); controls.load(node); bios.load(node); cpu.load(node); ppu.load(node); apu.load(node); cartridgeSlot.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); bios.unload(); cpu.unload(); ppu.unload(); apu.unload(); cartridgeSlot.unload(); pak.reset(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); bus.power(); player.power(); cpu.power(); ppu.power(); apu.power(); cartridge.power(); scheduler.power(cpu); } } ares-126/ares/gba/system/system.hpp000066400000000000000000000036651415063341600173770ustar00rootroot00000000000000struct BIOS { Memory::Readable rom; //bios.cpp auto load(Node::Object) -> void; auto unload() -> void; auto read(u32 mode, n25 address) -> n32; auto write(u32 mode, n25 address, n32 word) -> void; auto serialize(serializer&) -> void; n32 mdr = 0; }; struct System { Node::System node; VFS::Pak pak; struct Controls { Node::Object node; Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button b; Node::Input::Button a; Node::Input::Button l; Node::Input::Button r; Node::Input::Button select; Node::Input::Button start; Node::Input::Rumble rumbler; //Game Boy Player auto load(Node::Object) -> void; auto poll() -> void; auto rumble(bool enable) -> void; bool yHold = 0; bool upLatch = 0; bool downLatch = 0; bool xHold = 0; bool leftLatch = 0; bool rightLatch = 0; } controls; enum class Model : u32 { GameBoyAdvance, GameBoyPlayer }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto frequency() const -> f64 { return 16 * 1024 * 1024; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Game Boy Advance"; Model model = Model::GameBoyAdvance; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern BIOS bios; extern System system; auto Model::GameBoyAdvance() -> bool { return system.model() == System::Model::GameBoyAdvance; } auto Model::GameBoyPlayer() -> bool { return system.model() == System::Model::GameBoyPlayer; } ares-126/ares/md/000077500000000000000000000000001415063341600136535ustar00rootroot00000000000000ares-126/ares/md/GNUmakefile000066400000000000000000000022121415063341600157220ustar00rootroot00000000000000ares.components += m68000 ares.components += z80 ares.components += sh2 ares.components += ssp1601 ares.components += sn76489 ares.components += ym2612 ares.components += m24c ares.objects += ares-md-bus ares.objects += ares-md-cpu ares.objects += ares-md-apu ares.objects += ares-md-vdp ares.objects += ares-md-opn2 ares.objects += ares-md-m32x ares.objects += ares-md-mcd ares.objects += ares-md-system ares.objects += ares-md-cartridge ares.objects += ares-md-controller $(object.path)/ares-md-bus.o: $(ares.path)/md/bus/bus.cpp $(object.path)/ares-md-cpu.o: $(ares.path)/md/cpu/cpu.cpp $(object.path)/ares-md-apu.o: $(ares.path)/md/apu/apu.cpp $(object.path)/ares-md-vdp.o: $(ares.path)/md/vdp/vdp.cpp $(object.path)/ares-md-opn2.o: $(ares.path)/md/opn2/opn2.cpp $(object.path)/ares-md-m32x.o: $(ares.path)/md/m32x/m32x.cpp $(object.path)/ares-md-mcd.o: $(ares.path)/md/mcd/mcd.cpp $(object.path)/ares-md-system.o: $(ares.path)/md/system/system.cpp $(object.path)/ares-md-cartridge.o: $(ares.path)/md/cartridge/cartridge.cpp $(object.path)/ares-md-controller.o: $(ares.path)/md/controller/controller.cpp ares-126/ares/md/apu/000077500000000000000000000000001415063341600144405ustar00rootroot00000000000000ares-126/ares/md/apu/apu.cpp000066400000000000000000000033251415063341600157340ustar00rootroot00000000000000#include namespace ares::MegaDrive { APU apu; #include "bus.cpp" #include "debugger.cpp" #include "serialization.cpp" auto APU::load(Node::Object parent) -> void { node = parent->append("APU"); ram.allocate(8_KiB); debugger.load(node); } auto APU::unload() -> void { debugger = {}; ram.reset(); node.reset(); } auto APU::main() -> void { //stall the APU until the CPU relinquishes control of the bus if(!state.resLine || state.busreqLatch) { return step(1); } if(state.nmiLine) { state.nmiLine = 0; //edge-sensitive debugger.interrupt("NMI"); irq(0, 0x0066, 0xff); } if(state.intLine) { //level-sensitive debugger.interrupt("IRQ"); irq(1, 0x0038, 0xff); } debugger.instruction(); instruction(); } auto APU::step(u32 clocks) -> void { Thread::step(clocks); state.busreqLatch = busownerCPU() ? 1 : 0; Thread::synchronize(cpu, vdp, vdp.psg, opn2); } auto APU::setNMI(n1 line) -> void { state.nmiLine = line; } auto APU::setINT(n1 line) -> void { state.intLine = line; } auto APU::setRES(n1 line) -> void { if(!state.resLine && line) restart(); state.resLine = line; } auto APU::setBUSREQ(n1 line) -> void { state.busreqLine = line; } auto APU::power(bool reset) -> void { Z80::bus = this; Z80::power(); Thread::create(system.frequency() / 15.0, {&APU::main, this}); if(!reset) { ram.fill(); state.resLine = 0; state.busreqLine = 0; state.busreqLatch = 0; } state.nmiLine = 0; state.intLine = 0; state.bank = 0; opn2.power(reset); } auto APU::restart() -> void { Z80::power(); Thread::restart({&APU::main, this}); state.nmiLine = 0; state.intLine = 0; state.bank = 0; opn2.power(true); } } ares-126/ares/md/apu/apu.hpp000066400000000000000000000035501415063341600157410ustar00rootroot00000000000000//Zilog Z80 struct APU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Writable ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } auto busgrantedCPU() const -> bool { return state.resLine & state.busreqLatch; } auto busownerCPU() const -> bool { return state.resLine & state.busreqLine; } // Note: bus ownership is flagged according to line state, since it could be too slow // to wait for latching with only instruction-level granularity on the Z80 emulation. // At worst, a positive signal would indicate bus grant is imminent, which should be safe. // (fixes Arkagis Revolution - Trial Version [Rev 00]) //z80.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power(bool reset) -> void; auto restart() -> void; auto setNMI(n1 line) -> void; auto setINT(n1 line) -> void; auto setRES(n1 line) -> void; auto setBUSREQ(n1 line) -> void; //bus.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto readExternal(n24 address) -> n8; auto writeExternal(n24 address, n8 data) -> void; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; private: struct State { n1 nmiLine; n1 intLine; n1 resLine; n1 busreqLine; n1 busreqLatch; n9 bank; } state; }; extern APU apu; ares-126/ares/md/apu/bus.cpp000066400000000000000000000061261415063341600157420ustar00rootroot00000000000000/* the APU can write to CPU RAM, but it cannot read from CPU RAM: * the exact returned value varies per system, but it always fails. * it is unknown which other regions of the bus are inaccessible to the APU. * it would certainly go very badly if the APU could reference itself at $a0xxxx. * for now, assume that only the cartridge and expansion buses are also accessible. */ auto APU::read(n16 address) -> n8 { switch(address) { case 0x0000 ... 0x3fff: return ram.read(address); //$2000-3fff mirrors $0000-1fff case 0x4000 ... 0x5fff: return opn2.readStatus(); case 0x7f00 ... 0x7fff: return readExternal(0xc00000 | (n8)address); case 0x8000 ... 0xffff: return readExternal(state.bank << 15 | (n15)address); default: debug(unusual, "[APU] read(0x", hex(address, 4L), ")"); return 0x00; } } auto APU::write(n16 address, n8 data) -> void { switch(address) { case 0x0000 ... 0x3fff: return ram.write(address, data); //$2000-3fff mirrors $0000-1fff case 0x4000 ... 0x5fff: switch(0x4000 | address & 3) { case 0x4000: return opn2.writeAddress(0 << 8 | data); case 0x4001: return opn2.writeData(data); case 0x4002: return opn2.writeAddress(1 << 8 | data); case 0x4003: return opn2.writeData(data); } case 0x6000 ... 0x60ff: return (void)(state.bank = data.bit(0) << 8 | state.bank >> 1); case 0x7f00 ... 0x7fff: return writeExternal(0xc00000 | (n8)address, data); case 0x8000 ... 0xffff: return writeExternal(state.bank << 15 | (n15)address, data); default: debug(unusual, "[APU] write(0x", hex(address, 4L), ")"); return; } } auto APU::readExternal(n24 address) -> n8 { //bus arbiter delay rough approximation step(3); while(MegaDrive::bus.acquired() && !scheduler.synchronizing()) step(1); MegaDrive::bus.acquire(MegaDrive::Bus::APU); n8 data = 0xff; switch(address) { case 0x000000 ... 0x9fffff: case 0xa10000 ... 0xa1ffff: case 0xc00000 ... 0xc000ff: if(address & 1) { data = MegaDrive::bus.read(0, 1, address & ~1, 0x00).byte(0); } else { data = MegaDrive::bus.read(1, 0, address & ~1, 0x00).byte(1); } break; default: debug(unusual, "[APU] readExternal(0x", hex(address, 6L), ")"); break; } MegaDrive::bus.release(MegaDrive::Bus::APU); return data; } auto APU::writeExternal(n24 address, n8 data) -> void { //bus arbiter delay rough approximation step(3); while(MegaDrive::bus.acquired() && !scheduler.synchronizing()) step(1); MegaDrive::bus.acquire(MegaDrive::Bus::APU); switch(address) { case 0x000000 ... 0x9fffff: case 0xa10000 ... 0xa1ffff: case 0xc00000 ... 0xc000ff: case 0xe00000 ... 0xffffff: if(address & 1) { MegaDrive::bus.write(0, 1, address & ~1, data << 8 | data << 0); } else { MegaDrive::bus.write(1, 0, address & ~1, data << 8 | data << 0); } break; default: debug(unusual, "[APU] writeExternal(0x", hex(address, 6L), ")"); break; } MegaDrive::bus.release(MegaDrive::Bus::APU); } auto APU::in(n16 address) -> n8 { //unused on Mega Drive return 0x00; } auto APU::out(n16 address, n8 data) -> void { //unused on Mega Drive } ares-126/ares/md/apu/debugger.cpp000066400000000000000000000016511415063341600167330ustar00rootroot00000000000000auto APU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("APU RAM"); memory.ram->setSize(8_KiB); memory.ram->setRead([&](u32 address) -> u8 { return apu.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return apu.ram.write(address, data); }); tracer.instruction = parent->append("Instruction", "APU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "APU"); } auto APU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(apu.PC)) { tracer.instruction->notify(apu.disassembleInstruction(), apu.disassembleContext()); } } auto APU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/md/apu/serialization.cpp000066400000000000000000000003421415063341600200200ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); s(ram); s(state.nmiLine); s(state.intLine); s(state.resLine); s(state.busreqLine); s(state.busreqLatch); s(state.bank); } ares-126/ares/md/bus/000077500000000000000000000000001415063341600144445ustar00rootroot00000000000000ares-126/ares/md/bus/bus.cpp000066400000000000000000000004421415063341600157410ustar00rootroot00000000000000#include namespace ares::MegaDrive { Bus bus; #include "serialization.cpp" auto Bus::load(Node::Object parent) -> void { node = parent->append("Bus"); } auto Bus::unload() -> void { node.reset(); } auto Bus::power(bool reset) -> void { state = {}; } } ares-126/ares/md/bus/bus.hpp000066400000000000000000000014721415063341600157520ustar00rootroot00000000000000struct Bus { Node::Object node; static constexpr inline u32 APU = 1 << 0; static constexpr inline u32 VDPFIFO = 1 << 1; static constexpr inline u32 VDPDMA = 1 << 2; auto acquired() const -> bool { return state.acquired; } auto acquire(u32 owner) -> void { state.acquired |= owner; } auto release(u32 owner) -> void { state.acquired &= ~owner; } //inline.hpp auto read(n1 upper, n1 lower, n24 address, n16 data = 0) -> n16; auto write(n1 upper, n1 lower, n24 address, n16 data) -> void; auto waitRefreshExternal() -> void; auto waitRefreshRAM() -> void; //bus.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct State { u32 acquired = 0; } state; }; extern Bus bus; ares-126/ares/md/bus/inline.hpp000066400000000000000000000102731415063341600164360ustar00rootroot00000000000000inline auto Bus::read(n1 upper, n1 lower, n24 address, n16 data) -> n16 { if(address >= 0x000000 && address <= 0x3fffff) { waitRefreshExternal(); if(!cpu.io.romEnable) { data = cpu.tmss[address >> 1]; } else if(cartridge.bootable()) { data = cartridge.read(upper, lower, address, data); } else { data = mcd.readExternal(upper, lower, address, data); } return data; } if(address >= 0x400000 && address <= 0x7fffff) { waitRefreshExternal(); if(!cartridge.bootable()) { data = cartridge.read(upper, lower, address, data); } else { data = mcd.readExternal(upper, lower, address, data); } return data; } if(address >= 0x800000 && address <= 0x9fffff) { data = m32x.readExternal(upper, lower, address, data); return data; } if(address >= 0xa00000 && address <= 0xa0ffff) { if(!apu.busgrantedCPU()) return data; if(cpu.active()) cpu.wait(3); //todo: inaccurate approximation of Z80 RAM access delay address.bit(15) = 0; //a080000-a0ffff mirrors a00000-a07fff //word reads load the even input byte into both output bytes auto byte = apu.read(address | !upper); //upper==0 only on odd byte reads return byte << 8 | byte << 0; } if(address >= 0xa10000 && address <= 0xbfffff) { data = cartridge.readIO(upper, lower, address, data); data = mcd.readExternalIO(upper, lower, address, data); data = cpu.readIO(upper, lower, address, data); return data; } if(address >= 0xc00000 && address <= 0xdfffff) { if(address.bit(5,7)) return cpu.ird(); //should deadlock the machine if(address.bit(16,18)) return cpu.ird(); //should deadlock the machine address.bit(8,15) = 0; //mirrors if(address.bit(2,3) == 3) return cpu.ird(); //should return VDP open bus return vdp.read(upper, lower, address, data); } if(address >= 0xe00000 && address <= 0xffffff) { waitRefreshRAM(); return cpu.ram[address >> 1]; } return data; } inline auto Bus::write(n1 upper, n1 lower, n24 address, n16 data) -> void { if(address >= 0x000000 && address <= 0x3fffff) { waitRefreshExternal(); if(cartridge.bootable()) { cartridge.write(upper, lower, address, data); } else { mcd.writeExternal(upper, lower, address, data); } return; } if(address >= 0x400000 && address <= 0x7fffff) { waitRefreshExternal(); if(!cartridge.bootable()) { cartridge.write(upper, lower, address, data); } else { mcd.writeExternal(upper, lower, address, data); } return; } if(address >= 0x800000 && address <= 0x9fffff) { m32x.writeExternal(upper, lower, address, data); return; } if(address >= 0xa00000 && address <= 0xa0ffff) { if(!apu.busgrantedCPU()) return; if(cpu.active()) cpu.wait(3); //todo: inaccurate approximation of Z80 RAM access delay address.bit(15) = 0; //a08000-a0ffff mirrors a00000-a07fff //word writes store the upper input byte into the lower output byte return apu.write(address | !upper, data.byte(upper)); //upper==0 only on odd byte reads } if(address >= 0xa10000 && address <= 0xbfffff) { cartridge.writeIO(upper, lower, address, data); mcd.writeExternalIO(upper, lower, address, data); cpu.writeIO(upper, lower, address, data); return; } if(address >= 0xc00000 && address <= 0xdfffff) { if(address.bit(5,7)) return; //should deadlock the machine if(address.bit(16,18)) return; //should deadlock the machine address.bit(8,15) = 0; //mirrors return vdp.write(upper, lower, address, data); } if(address >= 0xe00000 && address <= 0xffffff) { waitRefreshRAM(); if(upper) cpu.ram[address >> 1].byte(1) = data.byte(1); if(lower) cpu.ram[address >> 1].byte(0) = data.byte(0); return; } } //0-127 inline auto Bus::waitRefreshExternal() -> void { while(cpu.refresh.external >= 126) { if(cpu.active()) cpu.wait(1); if(scheduler.synchronizing()) break; if(apu.active()) apu.step(1); if(vdp.active()) break; } } //0-132 inline auto Bus::waitRefreshRAM() -> void { while(cpu.refresh.ram >= 130) { if(cpu.active()) cpu.wait(1); if(scheduler.synchronizing()) break; if(apu.active()) apu.step(1); if(vdp.active()) break; } } ares-126/ares/md/bus/serialization.cpp000066400000000000000000000001041415063341600200200ustar00rootroot00000000000000auto Bus::serialize(serializer& s) -> void { s(state.acquired); } ares-126/ares/md/cartridge/000077500000000000000000000000001415063341600156175ustar00rootroot00000000000000ares-126/ares/md/cartridge/board/000077500000000000000000000000001415063341600167065ustar00rootroot00000000000000ares-126/ares/md/cartridge/board/banked.cpp000066400000000000000000000076271415063341600206520ustar00rootroot00000000000000struct Banked : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable wram; Memory::Writable uram; Memory::Writable lram; M24C m24c; auto load() -> void override { Interface::load(rom, "program.rom"); if(auto fp = pak->read("save.ram")) { Interface::load(wram, uram, lram, "save.ram"); } if(auto fp = pak->read("save.eeprom")) { Interface::load(m24c, "save.eeprom"); rsda = fp->attribute("rsda").natural(); wsda = fp->attribute("wsda").natural(); wscl = fp->attribute("wscl").natural(); } } auto save() -> void override { if(auto fp = pak->write("save.ram")) { Interface::save(wram, uram, lram, "save.ram"); } if(auto fp = pak->write("save.eeprom")) { Interface::save(m24c, "save.eeprom"); } } auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 override { if(address >= 0x200000) { if(wram && ramEnable) { return wram[address >> 1]; } if(uram && ramEnable) { return uram[address >> 1] * 0x0101; } if(lram && ramEnable) { return lram[address >> 1] * 0x0101; } if(m24c && eepromEnable) { if(upper && rsda >> 3 == 1) data.bit(rsda) = m24c.read(); if(lower && rsda >> 3 == 0) data.bit(rsda) = m24c.read(); return data; } } n25 offset = romBank[address >> 19] << 19 | (n19)address; if ((offset >> 1) > rom.size() - 1) { return 0xffff; } return data = rom[offset >> 1]; } auto write(n1 upper, n1 lower, n22 address, n16 data) -> void override { //emulating ramWritable will break commercial software: //it does not appear that many (any?) games actually connect $a130f1.d1 to /WE; //hence RAM ends up always being writable, and many games fail to set d1=1 if(address >= 0x200000) { if(wram && ramEnable) { if(upper) wram[address >> 1].byte(1) = data.byte(1); if(lower) wram[address >> 1].byte(0) = data.byte(0); return; } if(uram && ramEnable) { if(upper) uram[address >> 1] = data; return; } if(lram && ramEnable) { if(lower) lram[address >> 1] = data; return; } if(m24c) { if(rom.size() * 2 > 0x200000 && upper && lower) { eepromEnable = !data.bit(0); return; } if(eepromEnable) { if(upper && wscl >> 3 == 1) m24c.clock = data.bit(wscl); if(upper && wsda >> 3 == 1) m24c.data = data.bit(wsda); if(lower && wscl >> 3 == 0) m24c.clock = data.bit(wscl); if(lower && wsda >> 3 == 0) m24c.data = data.bit(wsda); return m24c.write(); } } } } auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 override { return data; } auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void override { if(!lower) { //todo: unconfirmed debug(unusual, "[Cartridge::Banked::writeIO] lower=0"); return; } if(address == 0xa130f0) { ramEnable = data.bit(0); ramWritable = data.bit(1); } if(address == 0xa130f2) romBank[1] = data.bit(0,5); if(address == 0xa130f4) romBank[2] = data.bit(0,5); if(address == 0xa130f6) romBank[3] = data.bit(0,5); if(address == 0xa130f8) romBank[4] = data.bit(0,5); if(address == 0xa130fa) romBank[5] = data.bit(0,5); if(address == 0xa130fc) romBank[6] = data.bit(0,5); if(address == 0xa130fe) romBank[7] = data.bit(0,5); } auto power(bool reset) -> void override { for(auto index : range(8)) romBank[index] = index; } auto serialize(serializer& s) -> void override { s(romBank); s(wram); s(uram); s(lram); s(m24c); s(ramEnable); s(ramWritable); s(eepromEnable); s(rsda); s(wsda); s(wscl); } n6 romBank[8]; n1 ramEnable; n1 ramWritable; n1 eepromEnable; n4 rsda; n4 wsda; n4 wscl; }; ares-126/ares/md/cartridge/board/board.cpp000066400000000000000000000061101415063341600204770ustar00rootroot00000000000000namespace Board { #include "linear.cpp" #include "banked.cpp" #include "svp.cpp" #include "j-cart.cpp" #include "game-genie.cpp" #include "mega-32x.cpp" #include "debugger.cpp" auto Interface::main() -> void { step(cartridge->frequency()); } auto Interface::step(u32 clocks) -> void { cartridge->step(clocks); } auto Interface::load(Memory::Readable& rom, string name) -> bool { rom.reset(); if(auto fp = pak->read(name)) { rom.allocate(fp->size() >> 1); for(auto address : range(rom.size())) rom.program(address, fp->readm(2L)); return true; } return false; } auto Interface::load(Memory::Writable& wram, Memory::Writable& uram, Memory::Writable& lram, string name) -> bool { wram.reset(); uram.reset(); lram.reset(); if(auto fp = pak->read(name)) { auto mode = fp->attribute("mode"); if(mode == "word") { wram.allocate(fp->size() >> 1); for(auto address : range(wram.size())) wram.write(address, fp->readm(2L)); return true; } else if(mode == "upper") { uram.allocate(fp->size()); for(auto address : range(uram.size())) uram.write(address, fp->readm(1L)); return true; } else if(mode == "lower") { lram.allocate(fp->size()); for(auto address : range(lram.size())) lram.write(address, fp->readm(1L)); return true; } } return false; } auto Interface::load(M24C& m24c, string name) -> bool { m24c.reset(); if(auto fp = pak->read(name)) { auto mode = fp->attribute("mode"); m24c.reset(); if(mode == "X24C01" ) m24c.load(M24C::Type::X24C01 ); if(mode == "M24C01" ) m24c.load(M24C::Type::M24C01 ); if(mode == "M24C02" ) m24c.load(M24C::Type::M24C02 ); if(mode == "M24C04" ) m24c.load(M24C::Type::M24C04 ); if(mode == "M24C08" ) m24c.load(M24C::Type::M24C08 ); if(mode == "M24C16" ) m24c.load(M24C::Type::M24C16 ); if(mode == "M24C32" ) m24c.load(M24C::Type::M24C32 ); if(mode == "M24C64" ) m24c.load(M24C::Type::M24C64 ); if(mode == "M24C65" ) m24c.load(M24C::Type::M24C65 ); if(mode == "M24C128") m24c.load(M24C::Type::M24C128); if(mode == "M24C256") m24c.load(M24C::Type::M24C256); if(mode == "M24C512") m24c.load(M24C::Type::M24C512); if(m24c) { fp->read({m24c.memory, m24c.size()}); return true; } } return false; } auto Interface::save(Memory::Writable& wram, Memory::Writable& uram, Memory::Writable& lram, string name) -> bool { if(auto fp = pak->write(name)) { auto mode = fp->attribute("mode"); if(mode == "word") { for(auto address : range(wram.size())) fp->writem(wram[address], 2L); return true; } else if(mode == "upper") { for(auto address : range(uram.size())) fp->writem(uram[address], 1L); return true; } else if(mode == "lower") { for(auto address : range(lram.size())) fp->writem(lram[address], 1L); return true; } } return false; } auto Interface::save(M24C& m24c, string name) -> bool { if(auto fp = pak->write(name)) { if(m24c) { fp->write({m24c.memory, m24c.size()}); return true; } } return false; } } ares-126/ares/md/cartridge/board/board.hpp000066400000000000000000000024371415063341600205140ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; Interface(Cartridge& cartridge) : cartridge(cartridge) {} virtual ~Interface() = default; virtual auto frequency() -> u32 { return 1; } virtual auto load() -> void {} virtual auto unload() -> void {} virtual auto save() -> void {} virtual auto main() -> void; virtual auto step(u32 clocks) -> void; virtual auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 { return data; } virtual auto write(n1 upper, n1 lower, n22 address, n16 data) -> void {} virtual auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { return data; } virtual auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void {} virtual auto vblank(bool line) -> void {} virtual auto hblank(bool line) -> void {} virtual auto power(bool reset) -> void {} virtual auto serialize(serializer&) -> void {} auto load(Memory::Readable& rom, string name) -> bool; auto load(Memory::Writable& wram, Memory::Writable& uram, Memory::Writable& lram, string name) -> bool; auto load(M24C& m24c, string name) -> bool; auto save(Memory::Writable& wram, Memory::Writable& uram, Memory::Writable& lram, string name) -> bool; auto save(M24C& m24c, string name) -> bool; maybe cartridge; }; } ares-126/ares/md/cartridge/board/debugger.cpp000066400000000000000000000015211415063341600211750ustar00rootroot00000000000000auto SVP::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "SVP"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "SVP"); } auto SVP::Debugger::unload(Node::Object parent) -> void { parent->remove(tracer.instruction); parent->remove(tracer.interrupt); tracer.instruction.reset(); tracer.interrupt.reset(); } auto SVP::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(super->PC)) { tracer.instruction->notify(super->disassembleInstruction(), super->disassembleContext()); } } auto SVP::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/md/cartridge/board/game-genie.cpp000066400000000000000000000040061415063341600214100ustar00rootroot00000000000000struct GameGenie : Interface { using Interface::Interface; Memory::Readable rom; CartridgeSlot slot{"Cartridge Slot"}; auto load() -> void override { Interface::load(rom, "program.rom"); slot.load(cartridge->node); } auto save() -> void override { } auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 override { if(enable) { for(auto& code : codes) { if(code.enable && code.address == address) return data = code.data; } if(slot.connected()) return slot.cartridge.read(upper, lower, address, data); } return data = rom[address >> 1]; } auto write(n1 upper, n1 lower, n22 address, n16 data) -> void override { if(enable) { if(slot.connected()) return slot.cartridge.write(upper, lower, address, data); } if(address == 0x02 && data == 0x0001) { enable = 1; } if(address >= 0x04 && address <= 0x20 && upper && lower) { //todo: what about 8-bit writes? address = address - 0x04 >> 1; auto& code = codes[address / 3]; if(address % 3 == 0) code.address.bit(16,23) = data.bit(0, 7); if(address % 3 == 1) code.address.bit( 0,15) = data.bit(0,15); if(address % 3 == 2) code.data = data, code.enable = 1; } } auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 override { if(slot.connected()) slot.cartridge.readIO(upper, lower, address, data); return data; } auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void override { if(slot.connected()) slot.cartridge.writeIO(upper, lower, address, data); } auto power(bool reset) -> void override { if(slot.connected()) slot.cartridge.power(reset); enable = 0; for(auto& code : codes) code = {}; } auto serialize(serializer& s) -> void override { if(slot.connected()) s(slot.cartridge); s(enable); for(auto& code : codes) { s(code.enable); s(code.address); s(code.data); } } n1 enable; struct Code { n1 enable; n24 address; n16 data; } codes[5]; }; ares-126/ares/md/cartridge/board/j-cart.cpp000066400000000000000000000013741415063341600205770ustar00rootroot00000000000000struct JCart : Linear { using Linear::Linear; auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 override { if(address >= 0x380000) { data.bit( 0, 5) = 0b111111; //controller port 1 data.bit( 6) = jcartSelect; //TH state data.bit( 8,13) = 0b111111; //controller port 2 data.bit(14) = 0; //forced low } return Linear::read(upper, lower, address, data); } auto write(n1 upper, n1 lower, n22 address, n16 data) -> void override { if(address >= 0x380000) { jcartSelect = data.bit(0); } return Linear::write(upper, lower, address, data); } auto serialize(serializer& s) -> void override { Linear::serialize(s); s(jcartSelect); } n1 jcartSelect = 0; }; ares-126/ares/md/cartridge/board/linear.cpp000066400000000000000000000066401415063341600206720ustar00rootroot00000000000000struct Linear : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable wram; Memory::Writable uram; Memory::Writable lram; M24C m24c; auto load() -> void override { Interface::load(rom, "program.rom"); if(auto fp = pak->read("save.ram")) { Interface::load(wram, uram, lram, "save.ram"); } if(auto fp = pak->read("save.eeprom")) { Interface::load(m24c, "save.eeprom"); rsda = fp->attribute("rsda").natural(); wsda = fp->attribute("wsda").natural(); wscl = fp->attribute("wscl").natural(); } } auto save() -> void override { if(auto fp = pak->write("save.ram")) { Interface::save(wram, uram, lram, "save.ram"); } if(auto fp = pak->write("save.eeprom")) { Interface::save(m24c, "save.eeprom"); } } auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 override { if(address >= 0x200000 && address < 0x300000) { if(wram && ramEnable) { return wram[address >> 1]; } if(uram && ramEnable) { return uram[address >> 1] * 0x0101; } if(lram && ramEnable) { return lram[address >> 1] * 0x0101; } if(m24c && eepromEnable) { if(upper && rsda >> 3 == 1) data.bit(rsda) = m24c.read(); if(lower && rsda >> 3 == 0) data.bit(rsda) = m24c.read(); return data; } } if ((address >> 1) > rom.size() - 1) { return 0xffff; } return rom[address >> 1]; } auto write(n1 upper, n1 lower, n22 address, n16 data) -> void override { //emulating ramWritable will break commercial software: //it does not appear that many (any?) games actually connect $a130f1.d1 to /WE; //hence RAM ends up always being writable, and many games fail to set d1=1 if(address >= 0x200000) { if(wram && ramEnable) { if(upper) wram[address >> 1].byte(1) = data.byte(1); if(lower) wram[address >> 1].byte(0) = data.byte(0); return; } if(uram && ramEnable) { if(upper) uram[address >> 1] = data; return; } if(lram && ramEnable) { if(lower) lram[address >> 1] = data; return; } if(m24c) { if(rom.size() * 2 > 0x200000 && upper && lower) { eepromEnable = !data.bit(0); return; } if(eepromEnable) { if(upper && wscl >> 3 == 1) m24c.clock = data.bit(wscl); if(upper && wsda >> 3 == 1) m24c.data = data.bit(wsda); if(lower && wscl >> 3 == 0) m24c.clock = data.bit(wscl); if(lower && wsda >> 3 == 0) m24c.data = data.bit(wsda); return m24c.write(); } } } } auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 override { return data; } auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void override { if(!lower) return; //todo: unconfirmed if(address == 0xa130f0) { ramEnable = data.bit(0); ramWritable = data.bit(1); } } auto power(bool reset) -> void override { ramEnable = 1; ramWritable = 1; eepromEnable = rom.size() * 2 <= 0x200000; m24c.power(); } auto serialize(serializer& s) -> void override { s(wram); s(uram); s(lram); s(m24c); s(ramEnable); s(ramWritable); s(eepromEnable); s(rsda); s(wsda); s(wscl); } n1 ramEnable; n1 ramWritable; n1 eepromEnable; n4 rsda; n4 wsda; n4 wscl; }; ares-126/ares/md/cartridge/board/mega-32x.cpp000066400000000000000000000063311415063341600207400ustar00rootroot00000000000000struct Mega32X : Interface { using Interface::Interface; Memory::Writable wram; Memory::Writable uram; Memory::Writable lram; M24C m24c; auto load() -> void override { if(auto fp = pak->read("program.rom")) { m32x.rom.allocate(fp->size() >> 1); for(auto address : range(fp->size() >> 1)) { m32x.rom.program(address, fp->readm(2L)); } } if(auto fp = pak->read("save.ram")) { Interface::load(wram, uram, lram, "save.ram"); } if(auto fp = pak->read("save.eeprom")) { Interface::load(m24c, "save.eeprom"); rsda = fp->attribute("rsda").natural(); wsda = fp->attribute("wsda").natural(); wscl = fp->attribute("wscl").natural(); } } auto save() -> void override { if(auto fp = pak->write("save.ram")) { Interface::save(wram, uram, lram, "save.ram"); } if(auto fp = pak->write("save.eeprom")) { Interface::save(m24c, "save.eeprom"); } } auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 override { if(address >= 0x200000) { if(wram) { return wram[address >> 1]; } if(uram) { return uram[address >> 1] * 0x0101; } if(lram) { return lram[address >> 1] * 0x0101; } if(m24c && eepromEnable) { if(upper && rsda >> 3 == 1) data.bit(rsda) = m24c.read(); if(lower && rsda >> 3 == 0) data.bit(rsda) = m24c.read(); return data; } } return m32x.readExternal(upper, lower, address, data); } auto write(n1 upper, n1 lower, n22 address, n16 data) -> void override { if(address >= 0x200000) { if(wram) { if(upper) wram[address >> 1].byte(1) = data.byte(1); if(lower) wram[address >> 1].byte(0) = data.byte(0); return; } if(uram) { if(upper) uram[address >> 1] = data; return; } if(lram) { if(lower) lram[address >> 1] = data; return; } if(m24c) { if(m32x.rom.size() * 2 > 0x200000 && upper && lower) { eepromEnable = !data.bit(0); return; } if(upper && wscl >> 3 == 1) m24c.clock = data.bit(wscl); if(upper && wsda >> 3 == 1) m24c.data = data.bit(wsda); if(lower && wscl >> 3 == 0) m24c.clock = data.bit(wscl); if(lower && wsda >> 3 == 0) m24c.data = data.bit(wsda); return m24c.write(); } } return m32x.writeExternal(upper, lower, address, data); } auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 override { return m32x.readExternalIO(upper, lower, address, data); } auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void override { return m32x.writeExternalIO(upper, lower, address, data); } auto vblank(bool line) -> void override { return m32x.vblank(line); } auto hblank(bool line) -> void override { return m32x.hblank(line); } auto power(bool reset) -> void override { eepromEnable = m32x.rom.size() * 2 <= 0x200000; m24c.power(); } auto serialize(serializer& s) -> void override { s(wram); s(uram); s(lram); s(m24c); s(eepromEnable); s(rsda); s(wsda); s(wscl); } n1 eepromEnable; n4 rsda; n4 wsda; n4 wscl; }; ares-126/ares/md/cartridge/board/svp.cpp000066400000000000000000000177051415063341600202340ustar00rootroot00000000000000struct SVP : Interface, SSP1601 { using Interface::Interface; Memory::Readable rom; Memory::Readable srom; Memory::Writable iram; Memory::Writable dram; struct Debugger { maybe super; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view type) -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto frequency() -> u32 override { return 23'000'000; } auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(srom, "svp.rom"); iram.allocate( 2_KiB >> 1); dram.allocate(128_KiB >> 1); debugger.super = *this; debugger.load(cartridge->node); } auto unload() -> void override { debugger.unload(cartridge->node); } auto save() -> void override { } auto main() -> void override { if(auto vector = SSP1601::interrupt()) { switch(vector) { case 0xfffc: debugger.interrupt("RES"); break; case 0xfffd: debugger.interrupt("INT0"); break; case 0xfffe: debugger.interrupt("INT1"); break; case 0xffff: debugger.interrupt("INT2"); break; } } debugger.instruction(); SSP1601::instruction(); } auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16 override { if(address >= 0x000000 && address <= 0x1fffff) { data = rom[address >> 1]; } if(address >= 0x300000 && address <= 0x37ffff) { data = dram[address >> 1]; } if(address >= 0x390000 && address <= 0x39ffff) { address = (address & 0xe002) | ((address & 0x7c) << 6) | ((address & 0x1f80) >> 5); data = dram[address >> 1]; } if(address >= 0x3a0000 && address <= 0x3affff) { address = (address & 0xf002) | ((address & 0x3c) << 6) | ((address & 0x0fc0) >> 4); data = dram[address >> 1]; } if(address >= 0x3b0000 && address <= 0x3fffff) { data = 0xffff; } //VDP DMA from SVP to VDP VRAM responds with a one-access delay if(vdp.dma.active) swap(data, WRAM); return data; } auto write(n1 upper, n1 lower, n22 address, n16 data) -> void override { if(address >= 0x300000 && address <= 0x37ffff) { if(upper) dram[address >> 1].byte(1) = data.byte(1); if(lower) dram[address >> 1].byte(0) = data.byte(0); } } auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 override { if(address == 0xa15000 || address == 0xa15002) { data = XST; } if(address == 0xa15004) { data = PM0; PM0 &= ~1; } return data; } auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void override { if(address == 0xa15000 || address == 0xa15002) { XST = data; PM0 |= 2; } } auto vblank(bool line) -> void override { } auto hblank(bool line) -> void override { IRQ.bit(2) = line; //INT1 } auto power(bool reset) -> void override { SSP1601::power(); iram.fill(); dram.fill(); PM0 = 0; PM1 = 0; PM2 = 0; XST = 0; PM4 = 0; PM5 = 0; PMC = 0; for(auto& word : PMAC[0]) word = 0; for(auto& word : PMAC[1]) word = 0; STATUS = 0; WRAM = 0; } auto serialize(serializer& s) -> void override { SSP1601::serialize(s); s(iram); s(dram); s(PM0); s(PM1); s(PM2); s(XST); s(PM4); s(PM5); s(PMAC[0]); s(PMAC[1]); s(STATUS); s(WRAM); } //SSP1601 auto read(u16 address) -> u16 override { if(address <= 0x03ff) return step(1), iram[address]; if(address >= 0xfc00) return step(1), srom[address]; return step(4), rom[address]; } auto getIncrement(u16 mode) -> s32 { s32 increment = n3(mode >> 11); if(increment == 0) return 0; if(increment != 7) increment--; increment = 1 << increment; if(mode & 0x8000) increment = -increment; return increment; } auto overwrite(n16& d, u16 s) -> void { if(s & 0xf000) d = (d & ~0xf000) | (s & 0xf000); if(s & 0x0f00) d = (d & ~0x0f00) | (s & 0x0f00); if(s & 0x00f0) d = (d & ~0x00f0) | (s & 0x00f0); if(s & 0x000f) d = (d & ~0x000f) | (s & 0x000f); } auto readPM(u8 reg, u16 d = 0) -> u32 { if(STATUS & SSP_PMC_SET) { PMAC[0][reg] = PMC; STATUS &= ~SSP_PMC_SET; return 0; } if(STATUS & SSP_PMC_HAVE_ADDRESS) { STATUS &= ~SSP_PMC_HAVE_ADDRESS; } if(reg == 4 || (ST & 0x60)) { u16 address = PMAC[0][reg] >> 0; u16 mode = PMAC[0][reg] >> 16; if((mode & 0xfff0) == 0x0800) { PMAC[0][reg]++; d = rom[address | (n4(mode) << 16)]; } else if((mode & 0x47ff) == 0x0018) { auto increment = getIncrement(mode); d = dram[address]; PMAC[0][reg] += increment; } else { d = 0; } PMC = PMAC[0][reg]; return d; } return -1; } auto writePM(u8 reg, u16 d) -> u32 { if(STATUS & SSP_PMC_SET) { PMAC[1][reg] = PMC; STATUS &= ~SSP_PMC_SET; return 0; } if(STATUS & SSP_PMC_HAVE_ADDRESS) { STATUS &= ~SSP_PMC_HAVE_ADDRESS; } if(reg == 4 || (ST & 0x60)) { u16 address = PMAC[1][reg] >> 0; u16 mode = PMAC[1][reg] >> 16; if((mode & 0x43ff) == 0x0018) { auto increment = getIncrement(mode); if(mode & 0x0400) { overwrite(dram[address], d); } else { dram[address] = d; } PMAC[1][reg] += increment; } else if((mode & 0xfbff) == 0x4018) { if(mode & 0x0400) { overwrite(dram[address], d); } else { dram[address] = d; } PMAC[1][reg] += (address & 1) ? 31 : 1; } else if((mode & 0x47ff) == 0x001c) { auto increment = getIncrement(mode); iram[address] = d; PMAC[1][reg] += increment; } PMC = PMAC[1][reg]; return d; } return -1; } auto readEXT(n3 r) -> u16 override { //PM0 if(r == 0) { u32 d = readPM(0); if(d != -1) return d; d = PM0; PM0 &= ~2; return d; } //PM1 if(r == 1) { u32 d = readPM(1); if(d != -1) return d; return PM1; } //PM2 if(r == 2) { u32 d = readPM(2); if(d != -1) return d; return PM2; } //XST if(r == 3) { u32 d = readPM(3); if(d != -1) return d; return XST; } //PM4 if(r == 4) { u32 d = readPM(4); if(d != -1) return d; return PM4; } //PMC if(r == 6) { if(STATUS & SSP_PMC_HAVE_ADDRESS) { STATUS |= SSP_PMC_SET; STATUS &=~SSP_PMC_HAVE_ADDRESS; return u16(PMC << 4 & 0xfff0) | u16(PMC >> 4 & 0x000f); } else { STATUS |= SSP_PMC_HAVE_ADDRESS; return u16(PMC); } } //AL if(r == 7) { STATUS &= ~SSP_PMC_HAVE_ADDRESS; STATUS &= ~SSP_PMC_SET; } return 0; } auto writeEXT(n3 r, u16 d) -> void override { //PM0 if(r == 0) { u32 r = writePM(0, d); if(r != -1) return; PM0 = d; } //PM1 if(r == 1) { u32 r = writePM(1, d); if(r != -1) return; PM1 = d; } //PM2 if(r == 2) { u32 r = writePM(2, d); if(r != -1) return; PM2 = d; } //XST if(r == 3) { u32 r = writePM(3, d); if(r != -1) return; PM0 |= 1; XST = d; } //PM4 if(r == 4) { u32 r = writePM(4, d); if(r != -1) return; PM4 = d; } //PMC if(r == 6) { if(STATUS & SSP_PMC_HAVE_ADDRESS) { STATUS |= SSP_PMC_SET; STATUS &=~SSP_PMC_HAVE_ADDRESS; PMC.bit(16,31) = d; } else { STATUS |= SSP_PMC_HAVE_ADDRESS; PMC.bit( 0,15) = d; } } } n16 PM0; n16 PM1; n16 PM2; n16 XST; n16 PM4; n16 PM5; n32 PMC; n32 PMAC[2][6]; n32 STATUS; n16 WRAM; static constexpr u32 SSP_PMC_HAVE_ADDRESS = 0x0001; static constexpr u32 SSP_PMC_SET = 0x0002; }; ares-126/ares/md/cartridge/cartridge.cpp000066400000000000000000000046131415063341600202730ustar00rootroot00000000000000#include namespace ares::MegaDrive { Cartridge& cartridge = cartridgeSlot.cartridge; #include "board/board.cpp" #include "slot.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append("Mega Drive Cartridge"); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.regions = pak->attribute("region").split(",").strip(); information.bootable = pak->attribute("bootable").boolean(); if(pak->attribute("mega32x").boolean()) { board = new Board::Mega32X{*this}; } else if(pak->read("svp.rom")) { board = new Board::SVP(*this); } else if(pak->attribute("label") == "Game Genie") { board = new Board::GameGenie(*this); } else if(pak->read("program.rom") && pak->read("program.rom")->size() > 0x400000) { board = new Board::Banked(*this); } else if(pak->attribute("jcart").boolean()) { board = new Board::JCart(*this); } else { board = new Board::Linear(*this); } board->pak = pak; board->load(); power(false); } auto Cartridge::disconnect() -> void { if(!node) return; board->unload(); board->pak.reset(); board.reset(); pak.reset(); node.reset(); information = {}; } auto Cartridge::save() -> void { if(!node) return; board->save(); } auto Cartridge::main() -> void { board->main(); } auto Cartridge::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto Cartridge::power(bool reset) -> void { if(!board) board = new Board::Interface(*this); Thread::create(board->frequency(), {&Cartridge::main, this}); board->power(reset); } auto Cartridge::read(n1 upper, n1 lower, n22 address, n16 data) -> n16 { return board->read(upper, lower, address, data); } auto Cartridge::write(n1 upper, n1 lower, n22 address, n16 data) -> void { return board->write(upper, lower, address, data); } auto Cartridge::readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { return board->readIO(upper, lower, address, data); } auto Cartridge::writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void { return board->writeIO(upper, lower, address, data); } auto Cartridge::vblank(bool line) -> void { return board->vblank(line); } auto Cartridge::hblank(bool line) -> void { return board->hblank(line); } } ares-126/ares/md/cartridge/cartridge.hpp000066400000000000000000000022211415063341600202710ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge : Thread { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } auto regions() const -> vector { return information.regions; } auto bootable() const -> boolean { return information.bootable; } //CART_IN line //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; auto read(n1 upper, n1 lower, n22 address, n16 data) -> n16; auto write(n1 upper, n1 lower, n22 address, n16 data) -> void; auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void; auto vblank(bool line) -> void; auto hblank(bool line) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Information { string title; vector regions; boolean bootable; } information; unique_pointer board; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/md/cartridge/serialization.cpp000066400000000000000000000001441415063341600211770ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { Thread::serialize(s); if(board) s(*board); } ares-126/ares/md/cartridge/slot.cpp000066400000000000000000000010461415063341600173050ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Mega Drive"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port.reset(); } ares-126/ares/md/cartridge/slot.hpp000066400000000000000000000004521415063341600173120ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; auto connected() const -> bool { return (bool)cartridge.node; } //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/md/controller/000077500000000000000000000000001415063341600160365ustar00rootroot00000000000000ares-126/ares/md/controller/control-pad/000077500000000000000000000000001415063341600202605ustar00rootroot00000000000000ares-126/ares/md/controller/control-pad/control-pad.cpp000066400000000000000000000031341415063341600232070ustar00rootroot00000000000000ControlPad::ControlPad(Node::Port parent) { node = parent->append("Control Pad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); a = node->append("A"); b = node->append("B"); c = node->append("C"); start = node->append("Start"); } auto ControlPad::readData() -> n8 { n6 data; platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(b); platform->input(c); platform->input(start); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } if(select == 0) { data.bit(0) = upLatch; data.bit(1) = downLatch; data.bit(2,3) = ~0; data.bit(4) = a->value(); data.bit(5) = start->value(); } else { data.bit(0) = upLatch; data.bit(1) = downLatch; data.bit(2) = leftLatch; data.bit(3) = rightLatch; data.bit(4) = b->value(); data.bit(5) = c->value(); } data = ~data; return latch << 7 | select << 6 | data; } auto ControlPad::writeData(n8 data) -> void { select = data.bit(6); latch = data.bit(7); } ares-126/ares/md/controller/control-pad/control-pad.hpp000066400000000000000000000007441415063341600232200ustar00rootroot00000000000000struct ControlPad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button a; Node::Input::Button b; Node::Input::Button c; Node::Input::Button start; ControlPad(Node::Port); auto readData() -> n8 override; auto writeData(n8 data) -> void override; private: n1 select = 1; n1 latch; b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/md/controller/controller.cpp000066400000000000000000000002321415063341600207220ustar00rootroot00000000000000#include namespace ares::MegaDrive { #include "port.cpp" #include "control-pad/control-pad.cpp" #include "fighting-pad/fighting-pad.cpp" } ares-126/ares/md/controller/controller.hpp000066400000000000000000000010151415063341600207270ustar00rootroot00000000000000// Mega Drive port pinout: // ---------------------- // \ (1) (2) (3) (4) (5) / // \ (6) (7) (8) (9) / // ------------------ // pin name // 1: D0 // 2: D1 // 3: D2 // 4: D3 // 5: VCC // 6: TL // 7: TH // 8: GND // 9: TR struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto readData() -> n8 { return 0xff; } virtual auto writeData(n8 data) -> void {} }; #include "port.hpp" #include "control-pad/control-pad.hpp" #include "fighting-pad/fighting-pad.hpp" ares-126/ares/md/controller/fighting-pad/000077500000000000000000000000001415063341600203775ustar00rootroot00000000000000ares-126/ares/md/controller/fighting-pad/fighting-pad.cpp000066400000000000000000000052571415063341600234550ustar00rootroot00000000000000FightingPad::FightingPad(Node::Port parent) { node = parent->append("Fighting Pad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); a = node->append("A"); b = node->append("B"); c = node->append("C"); x = node->append("X"); y = node->append("Y"); z = node->append("Z"); mode = node->append("Mode"); start = node->append("Start"); Thread::create(1'000'000, {&FightingPad::main, this}); } auto FightingPad::main() -> void { if(timeout) { timeout--; } else { counter = 0; } Thread::step(1); Thread::synchronize(cpu); } auto FightingPad::readData() -> n8 { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(b); platform->input(c); platform->input(x); platform->input(y); platform->input(z); platform->input(mode); platform->input(start); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n6 data; if(select == 0) { if(counter == 0 || counter == 1 || counter == 4) { data.bit(0) = upLatch; data.bit(1) = downLatch; data.bit(2,3) = ~0; } if(counter == 2) { data.bit(0,3) = ~0; //controller type detection } if(counter == 3) { data.bit(0,3) = 0; } data.bit(4) = a->value(); data.bit(5) = start->value(); } else { if(counter == 0 || counter == 1 || counter == 2 || counter == 4) { data.bit(0) = upLatch; data.bit(1) = downLatch; data.bit(2) = leftLatch; data.bit(3) = rightLatch; data.bit(4) = b->value(); data.bit(5) = c->value(); } if(counter == 3) { data.bit(0) = z->value(); data.bit(1) = y->value(); data.bit(2) = x->value(); data.bit(3) = mode->value(); data.bit(4,5) = 0; } } data = ~data; return latch << 7 | select << 6 | data; } auto FightingPad::writeData(n8 data) -> void { if(!select && data.bit(6)) { //0->1 transition if(++counter == 5) counter = 0; } select = data.bit(6); latch = data.bit(7); timeout = 1600; //~1.6ms } ares-126/ares/md/controller/fighting-pad/fighting-pad.hpp000066400000000000000000000012211415063341600234450ustar00rootroot00000000000000struct FightingPad : Controller, Thread { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button a; Node::Input::Button b; Node::Input::Button c; Node::Input::Button x; Node::Input::Button y; Node::Input::Button z; Node::Input::Button mode; Node::Input::Button start; FightingPad(Node::Port); auto main() -> void; auto readData() -> n8 override; auto writeData(n8 data) -> void override; private: n1 select = 1; n1 latch; n3 counter; n32 timeout; b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/md/controller/port.cpp000066400000000000000000000017621415063341600175340ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort extensionPort{"Extension Port"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Mega Drive"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Control Pad", "Fighting Pad"}); } auto ControllerPort::unload() -> void { device.reset(); port.reset(); } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Control Pad" ) device = new ControlPad(port); if(name == "Fighting Pad") device = new FightingPad(port); if(device) return device->node; return {}; } auto ControllerPort::power(bool reset) -> void { if(!reset) { control = 0x00; } } auto ControllerPort::serialize(serializer& s) -> void { s(control); } ares-126/ares/md/controller/port.hpp000066400000000000000000000016071415063341600175370ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; ControllerPort(string name); auto connect(Node::Peripheral) -> void; auto disconnect() -> void; auto readControl() -> n8 { return control; } auto writeControl(n8 data) -> void { control = data; } auto readData() -> n8 { if(device) return device->readData(); return 0xff; } auto writeData(n8 data) -> void { if(device) return device->writeData(data); } auto power(bool reset) -> void; auto serialize(serializer&) -> void; protected: const string name; n8 control; //d0-d6 = PC0-PC6 (0 = input; 1 = output); d7 = TH-INT enable friend class Controller; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; extern ControllerPort extensionPort; ares-126/ares/md/cpu/000077500000000000000000000000001415063341600144425ustar00rootroot00000000000000ares-126/ares/md/cpu/bus.cpp000066400000000000000000000005261415063341600157420ustar00rootroot00000000000000auto CPU::read(n1 upper, n1 lower, n24 address, n16) -> n16 { while(bus.acquired()) wait(1); //using m68k prefetch for open-bus data return bus.read(upper, lower, address, r.irc); } auto CPU::write(n1 upper, n1 lower, n24 address, n16 data) -> void { while(bus.acquired()) wait(1); return bus.write(upper, lower, address, data); } ares-126/ares/md/cpu/cpu.cpp000066400000000000000000000046561415063341600157500ustar00rootroot00000000000000#include namespace ares::MegaDrive { CPU cpu; #include "bus.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); tmss.allocate(2_KiB >> 1); ram.allocate(64_KiB >> 1); debugger.load(node); if(auto fp = system.pak->read("tmss.rom")) { for(auto address : range(tmss.size())) tmss.program(address, fp->readm(2L)); } } auto CPU::unload() -> void { debugger = {}; tmss.reset(); ram.reset(); node.reset(); } auto CPU::main() -> void { if(state.interruptPending) { if(lower(Interrupt::Reset)) { r.a[7] = read(1, 1, 0) << 16 | read(1, 1, 2) << 0; r.pc = read(1, 1, 4) << 16 | read(1, 1, 6) << 0; prefetch(); prefetch(); debugger.interrupt("Reset"); } if(6 > r.i && lower(Interrupt::VerticalBlank)) { debugger.interrupt("Vblank"); vdp.irq.acknowledge(6); return interrupt(Vector::Level6, 6); } if(4 > r.i && lower(Interrupt::HorizontalBlank)) { debugger.interrupt("Hblank"); vdp.irq.acknowledge(4); return interrupt(Vector::Level4, 4); } if(2 > r.i && lower(Interrupt::External)) { debugger.interrupt("External"); vdp.irq.acknowledge(2); return interrupt(Vector::Level2, 2); } } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { refresh.ram += clocks; while(refresh.ram >= 133) refresh.ram -= 133; refresh.external += clocks; Thread::step(clocks); cyclesUntilSync -= clocks; } inline auto CPU::idle(u32 clocks) -> void { step(clocks); } auto CPU::wait(u32 clocks) -> void { step(clocks); if (cyclesUntilSync <= 0) { Thread::synchronize(); cyclesUntilSync += minCyclesBetweenSyncs; } } auto CPU::raise(Interrupt interrupt) -> void { state.interruptPending.bit((u32)interrupt) = 1; } auto CPU::lower(Interrupt interrupt) -> bool { if(!state.interruptPending.bit((u32)interrupt)) return false; return state.interruptPending.bit((u32)interrupt) = 0, true; } auto CPU::power(bool reset) -> void { M68000::power(); Thread::create(system.frequency() / 7.0, {&CPU::main, this}); tmssEnable = system.tmss->value(); if(!reset) ram.fill(); io = {}; io.version = tmssEnable; io.romEnable = !tmssEnable; io.vdpEnable[0] = !tmssEnable; io.vdpEnable[1] = !tmssEnable; refresh = {}; state = {}; raise(Interrupt::Reset); } } ares-126/ares/md/cpu/cpu.hpp000066400000000000000000000034301415063341600157420ustar00rootroot00000000000000//Motorola 68000 struct CPU : M68000, Thread { Node::Object node; Memory::Readable tmss; Memory::Writable ram; // Bus locking is unavailable for the main cpu of MegaDrive models 1 & 2, // preventing the TAS instruction from working correctly in most cases. auto lockable() -> bool override { return false; } struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; enum class Interrupt : u32 { Reset, External, HorizontalBlank, VerticalBlank, }; //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto idle(u32 clocks) -> void override; auto wait(u32 clocks) -> void override; auto raise(Interrupt) -> void; auto lower(Interrupt) -> bool; auto power(bool reset) -> void; //bus.cpp auto read(n1 upper, n1 lower, n24 address, n16 _ = 0) -> n16 override; auto write(n1 upper, n1 lower, n24 address, n16 data) -> void override; //io.cpp auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 tmssEnable; struct IO { b1 version; //0 = Model 1; 1 = Model 2+ b1 romEnable; b1 vdpEnable[2]; } io; struct Refresh { n8 ram; n7 external; } refresh; struct State { n32 interruptPending; } state; int cyclesUntilSync = 0; int minCyclesBetweenSyncs = 0; }; extern CPU cpu; ares-126/ares/md/cpu/debugger.cpp000066400000000000000000000021131415063341600167270ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(32_KiB << 1); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram[n15(address >> 1)].byte(!(address & 1)); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { cpu.ram[n15(address >> 1)].byte(!(address & 1)) = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.r.pc - 4)) { tracer.instruction->notify(cpu.disassembleInstruction(cpu.r.pc - 4), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { string message = {type, " SR=", cpu.r.i, " @ ", vdp.vcounter(), ",", vdp.hcounter()}; tracer.interrupt->notify(message); } } ares-126/ares/md/cpu/io.cpp000066400000000000000000000052361415063341600155630ustar00rootroot00000000000000/* $a10000-bfffff */ auto CPU::readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { if(address >= 0xa10000 && address <= 0xa100ff) { if(!lower) return data.byte(0) << 8; address.bit(5,7) = 0; //a10020-a100ff mirrors a10000-a1001f switch(address) { case 0xa10000: data.bit(0) = io.version; //0 = Model 1; 1 = Model 2+ data.bit(5) = !MegaCD(); //0 = expansion unit connected; 1 = no expansion unit connected data.bit(6) = Region::PAL(); //0 = NTSC; 1 = PAL data.bit(7) = !Region::NTSCJ(); //0 = domestic (Japan); 1 = export break; case 0xa10002: data.byte(0) = controllerPort1.readData(); break; case 0xa10004: data.byte(0) = controllerPort2.readData(); break; case 0xa10006: data.byte(0) = extensionPort.readData(); break; case 0xa10008: data.byte(0) = controllerPort1.readControl(); break; case 0xa1000a: data.byte(0) = controllerPort2.readControl(); break; case 0xa1000c: data.byte(0) = extensionPort.readControl(); break; } return data.byte(1)=data.byte(0), data; } if(address >= 0xa11100 && address <= 0xa111ff) { data.bit(8) = !apu.busgrantedCPU(); return data; } return data; } auto CPU::writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void { if(address >= 0xa10000 && address <= 0xa100ff) { if(!lower) return; //even byte writes ignored address.bit(5,7) = 0; //a10020-a100ff mirrors a10000-a1001f switch(address) { case 0xa10002: controllerPort1.writeData(data); break; case 0xa10004: controllerPort2.writeData(data); break; case 0xa10006: extensionPort.writeData(data); break; case 0xa10008: controllerPort1.writeControl(data); break; case 0xa1000a: controllerPort2.writeControl(data); break; case 0xa1000c: extensionPort.writeControl(data); break; } return; } if(address >= 0xa11100 && address <= 0xa111ff) { if(!upper) return; //unconfirmed apu.setBUSREQ(data.bit(8)); return; } if(address >= 0xa11200 && address <= 0xa112ff) { if(!upper) return; //unconfirmed apu.setRES(data.bit(8)); return; } if(address == 0xa14000) { if(!tmss) return; if(!upper || !lower) return; //unconfirmed io.vdpEnable[0] = data == 0x5345; return; } if(address == 0xa14002) { if(!tmss) return; if(!upper || !lower) return; //unconfirmed io.vdpEnable[1] = data == 0x4741; return; } if(address == 0xa14100) { if(!tmss) return; if(!lower) return; io.romEnable = data.bit(0); return; } } ares-126/ares/md/cpu/serialization.cpp000066400000000000000000000003461415063341600200260ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { M68000::serialize(s); Thread::serialize(s); s(ram); s(io.version); s(io.romEnable); s(io.vdpEnable); s(refresh.ram); s(refresh.external); s(state.interruptPending); } ares-126/ares/md/m32x/000077500000000000000000000000001415063341600144445ustar00rootroot00000000000000ares-126/ares/md/m32x/bus-external.cpp000066400000000000000000000044001415063341600175570ustar00rootroot00000000000000auto M32X::readExternal(n1 upper, n1 lower, n24 address, n16 data) -> n16 { if(!Mega32X()) return data; if(!io.adapterEnable) { return rom[address >> 1]; } if(address >= 0x000000 && address <= 0x0000ff) { if(address == 0x70) return io.vectorLevel4 >> 16; if(address == 0x72) return io.vectorLevel4 >> 0; return vectors[address >> 1]; } if(address >= 0x000100 && address <= 0x3fffff) { if(dreq.vram) return rom[address >> 1]; } if(address >= 0x840000 && address <= 0x87ffff) { return vdp.bbram[address >> 1 & 0xffff]; } if(address >= 0x880000 && address <= 0x8fffff) { if(!dreq.vram) return rom[address >> 1 & 0x3ffff]; } if(address >= 0x900000 && address <= 0x9fffff) { address = io.romBank * 0x100000 | address & 0x0fffff; if(!dreq.vram) return rom[address >> 1]; } return data; } auto M32X::writeExternal(n1 upper, n1 lower, n24 address, n16 data) -> void { if(!Mega32X()) return; if(!io.adapterEnable) { return; } if(address >= 0x000000 && address <= 0x0000ff) { if(address == 0x70 && upper) io.vectorLevel4.byte(3) = data.byte(1); if(address == 0x70 && lower) io.vectorLevel4.byte(2) = data.byte(0); if(address == 0x72 && upper) io.vectorLevel4.byte(1) = data.byte(1); if(address == 0x72 && lower) io.vectorLevel4.byte(0) = data.byte(0); return; } if(address >= 0x840000 && address <= 0x85ffff) { if (vdp.framebufferAccess) return; if(!data && (!upper || !lower)) return; //8-bit 0x00 writes do not go through shm.debugger.tracer.instruction->invalidate(0x0400'0000 | address & 0x1fffe); shs.debugger.tracer.instruction->invalidate(0x0400'0000 | address & 0x1fffe); if(upper) vdp.bbram[address >> 1 & 0xffff].byte(1) = data.byte(1); if(lower) vdp.bbram[address >> 1 & 0xffff].byte(0) = data.byte(0); return; } if(address >= 0x860000 && address <= 0x87ffff) { if (vdp.framebufferAccess) return; shm.debugger.tracer.instruction->invalidate(0x0402'0000 | address & 0x1fffe); shs.debugger.tracer.instruction->invalidate(0x0402'0000 | address & 0x1fffe); if(upper && data.byte(1)) vdp.bbram[address >> 1 & 0xffff].byte(1) = data.byte(1); if(lower && data.byte(0)) vdp.bbram[address >> 1 & 0xffff].byte(0) = data.byte(0); return; } } ares-126/ares/md/m32x/bus-internal.cpp000066400000000000000000000035201415063341600175530ustar00rootroot00000000000000auto M32X::readInternal(n1 upper, n1 lower, n32 address, n16 data) -> n16 { if(address >= 0x0000'0000 && address <= 0x0000'3fff) { if(shm.active()) return shm.bootROM[address >> 1]; if(shs.active()) return shs.bootROM[address >> 1]; } if(address >= 0x0000'4000 && address <= 0x0000'43ff) { return readInternalIO(upper, lower, address, data); } if(address >= 0x0200'0000 && address <= 0x023f'ffff) { while(dreq.vram) { // SH2 ROM accesses stall while RV is set if(shm.active()) shm.step(1); if(shs.active()) shs.step(1); } return rom[address >> 1]; } if(address >= 0x0400'0000 && address <= 0x0403'ffff) { return vdp.bbram[address >> 1 & 0xffff]; } if(address >= 0x0600'0000 && address <= 0x0603'ffff) { return sdram[address >> 1 & 0x1ffff]; } return data; } auto M32X::writeInternal(n1 upper, n1 lower, n32 address, n16 data) -> void { if(address >= 0x0000'4000 && address <= 0x0000'43ff) { return writeInternalIO(upper, lower, address, data); } if(address >= 0x0400'0000 && address <= 0x0401'ffff) { if (!vdp.framebufferAccess) return; if(!data && (!upper || !lower)) return; //8-bit 0x00 writes do not go through if(upper) vdp.bbram[address >> 1 & 0xffff].byte(1) = data.byte(1); if(lower) vdp.bbram[address >> 1 & 0xffff].byte(0) = data.byte(0); return; } if(address >= 0x0402'0000 && address <= 0x0403'ffff) { if (!vdp.framebufferAccess) return; if(upper && data.byte(1)) vdp.bbram[address >> 1 & 0xffff].byte(1) = data.byte(1); if(lower && data.byte(0)) vdp.bbram[address >> 1 & 0xffff].byte(0) = data.byte(0); return; } if(address >= 0x0600'0000 && address <= 0x0603'ffff) { if(upper) sdram[address >> 1 & 0x1ffff].byte(1) = data.byte(1); if(lower) sdram[address >> 1 & 0x1ffff].byte(0) = data.byte(0); return; } } ares-126/ares/md/m32x/debugger.cpp000066400000000000000000000035661415063341600167460ustar00rootroot00000000000000auto M32X::Debugger::load(Node::Object parent) -> void { memory.sdram = parent->append("32X SDRAM"); memory.sdram->setSize(m32x.sdram.size() << 1); memory.sdram->setRead([&](u32 address) -> u8 { return m32x.sdram[address >> 1].byte(!(address & 1)); }); memory.sdram->setWrite([&](u32 address, u8 data) -> void { m32x.sdram[address >> 1].byte(!(address & 1)) = data; }); } auto M32X::SH7604::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", parent->name()); tracer.instruction->setAddressBits(32, 1); tracer.interrupt = parent->append("Interrupt", parent->name()); } auto M32X::SH7604::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(self->PC - 4)) { tracer.instruction->notify(self->disassembleInstruction(), self->disassembleContext()); } } auto M32X::SH7604::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } auto M32X::VDP::Debugger::load(Node::Object parent) -> void { memory.dram = parent->append("32X DRAM"); memory.dram->setSize(m32x.vdp.dram.size() << 1); memory.dram->setRead([&](u32 address) -> u8 { return m32x.vdp.dram[address >> 1].byte(!(address & 1)); }); memory.dram->setWrite([&](u32 address, u8 data) -> void { m32x.vdp.dram[address >> 1].byte(!(address & 1)) = data; }); memory.cram = parent->append("32X CRAM"); memory.cram->setSize(m32x.vdp.cram.size() << 1); memory.cram->setRead([&](u32 address) -> u8 { return m32x.vdp.cram[address >> 1].byte(!(address & 1)); }); memory.cram->setWrite([&](u32 address, u8 data) -> void { m32x.vdp.cram[address >> 1].byte(!(address & 1)) = data; }); } ares-126/ares/md/m32x/io-external.cpp000066400000000000000000000170261415063341600174050ustar00rootroot00000000000000auto M32X::readExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { //32X ID if(address >= 0xa130ec && address <= 0xa130ef) { if(address == 0xa130ec && upper) data.byte(1) = 'M'; if(address == 0xa130ec && lower) data.byte(0) = 'A'; if(address == 0xa130ee && upper) data.byte(1) = 'R'; if(address == 0xa130ee && lower) data.byte(0) = 'S'; } //adapter control if(address == 0xa15100) { data.bit( 0) = io.adapterEnable; data.bit( 1) = io.adapterReset; data.bit( 7) = io.resetEnable; data.bit(15) = vdp.framebufferAccess; } //interrupt control if(address == 0xa15102) { data.bit(0) = shm.irq.cmd.active; data.bit(1) = shs.irq.cmd.active; } //bank set if(address == 0xa15104) { data.bit(0,1) = io.romBank; } //data request control if(address == 0xa15106) { data.bit(0) = dreq.vram; data.bit(1) = dreq.dma; data.bit(2) = dreq.active; data.bit(7) = dreq.fifo.full(); } //68K to SH2 DREQ source address if(address == 0xa15108) { data.byte(0) = dreq.source.byte(2); } if(address == 0xa1510a) { data.byte(1) = dreq.source.byte(1); data.byte(0) = dreq.source.byte(0); } //68K to SH2 DREQ target address if(address == 0xa1510c) { data.byte(0) = dreq.target.byte(2); } if(address == 0xa1510e) { data.byte(1) = dreq.target.byte(1); data.byte(0) = dreq.target.byte(0); } //68K to SH2 DREQ length if(address == 0xa15110) { data.byte(1) = dreq.length.byte(1); data.byte(0) = dreq.length.byte(0); } //TV register if(address == 0xa1511a) { data.bit(0) = io.cartridgeMode; } //communication if(address >= 0xa15120 && address <= 0xa1512f) { data = communication[address >> 1 & 7]; } //PWM control if(address == 0xa15130) { data.bit(0,1) = pwm.lmode; data.bit(2,3) = pwm.rmode; data.bit(4) = pwm.mono; data.bit(7) = pwm.dreqIRQ; data.bit(8,11) = pwm.timer; } //PWM cycle if(address == 0xa15132) { data.bit(0,11) = pwm.cycle; } //PWM left channel pulse width if(address == 0xa15134) { data.bit(14) = pwm.lfifo.empty(); data.bit(15) = pwm.lfifo.full(); } //PWM right channel pulse width if(address == 0xa15136) { data.bit(14) = pwm.rfifo.empty(); data.bit(15) = pwm.rfifo.full(); } //PWM mono pulse width if(address == 0xa15138) { data.bit(14) = pwm.lfifo.empty() && pwm.rfifo.empty(); data.bit(15) = pwm.lfifo.full() || pwm.rfifo.full(); } //bitmap mode if(address == 0xa15180) { data.bit( 0) = vdp.mode.bit(0); data.bit( 1) = vdp.mode.bit(1); data.bit( 6) = vdp.lines; data.bit( 7) = vdp.priority; data.bit(15) = !Region::PAL(); } //packed pixel control if(address == 0xa15182) { data.bit(0) = vdp.dotshift; } //autofill length if(address == 0xa15184) { data.byte(0) = vdp.autofillLength; } //autofill address if(address == 0xa15186) { data = vdp.autofillAddress; } //autofill data if(address == 0xa15188) { data = vdp.autofillData; } //frame buffer control if(address == 0xa1518a) { data.bit( 0) = vdp.framebufferActive; data.bit( 1) = MegaDrive::vdp.refreshing(); //framebuffer access data.bit(13) = vdp.vblank || vdp.hblank; //palette access data.bit(14) = vdp.hblank; data.bit(15) = vdp.vblank; } //palette if(address >= 0xa15200 && address <= 0xa153ff) { data = vdp.cram[address >> 1 & 0xff]; } return data; } auto M32X::writeExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> void { //print("w", hex(address), " = ", hex(data), "\n"); //adapter control if(address == 0xa15100) { if(lower) { io.adapterEnable = data.bit(0); io.adapterReset = data.bit(1); } if(upper) { vdp.framebufferAccess = data.bit(15); } } //interrupt control if(address == 0xa15102) { if(lower) { shm.irq.cmd.active = data.bit(0); shs.irq.cmd.active = data.bit(1); } } //bank set if(address == 0xa15104) { if(lower) { io.romBank = data.bit(0,1); } } //data request control if(address == 0xa15106) { if(lower) { dreq.vram = data.bit(0); dreq.dma = data.bit(1); dreq.active = data.bit(2); if(!dreq.active) { dreq.fifo.flush(); shm.dmac.dreq = 0; shs.dmac.dreq = 0; } } } //68K to SH2 DREQ source address if(address == 0xa15108) { if(lower) dreq.source.byte(2) = data.byte(0); } if(address == 0xa1510a) { if(upper) dreq.source.byte(1) = data.byte(1); if(lower) dreq.source.byte(0) = data.byte(0); } //68K to SH2 DREQ target address if(address == 0xa1510c) { if(lower) dreq.target.byte(2) = data.byte(0); } if(address == 0xa1510e) { if(upper) dreq.target.byte(1) = data.byte(1); if(lower) dreq.target.byte(0) = data.byte(0); } //68K to SH2 DREQ length if(address == 0xa15110) { if(upper) dreq.length.byte(1) = data.byte(1); if(lower) dreq.length.byte(0) = data.byte(0) & ~3; } //FIFO if(address == 0xa15112) { if(dreq.active && !dreq.fifo.full()) { dreq.fifo.write(data); if(!--dreq.length) dreq.active = 0; shm.dmac.dreq = !dreq.fifo.empty(); shs.dmac.dreq = !dreq.fifo.empty(); } } //TV register if(address == 0xa1511a) { if(lower) { io.cartridgeMode = data.bit(0); } } //communication if(address >= 0xa15120 && address <= 0xa1512f) { if(lower) communication[address >> 1 & 7].byte(0) = data.byte(0); if(upper) communication[address >> 1 & 7].byte(1) = data.byte(1); } //PWM control if(address == 0xa15130) { if(lower) { pwm.lmode = data.bit(0,1); pwm.rmode = data.bit(2,3); pwm.mono = data.bit(4); //pwm.dreqIRQ = data.bit(7) = readonly; } if(upper) { pwm.timer = data.bit(8,11); } } //PWM cycle if(address == 0xa15132) { if(lower) pwm.cycle.bit(0, 7) = data.bit(0, 7); if(upper) pwm.cycle.bit(8,11) = data.bit(8,11); } //PWM left channel pulse width if(address == 0xa15134) { pwm.lfifo.write(data); } //PWM right channel pulse width if(address == 0xa15136) { pwm.rfifo.write(data); } //PWM mono pulse width if(address == 0xa15138) { pwm.lfifo.write(data); pwm.rfifo.write(data); } //bitmap mode if(address == 0xa15180) { if (vdp.framebufferAccess) return; if(lower) { vdp.mode = data.bit(0,1); vdp.lines = data.bit(6); vdp.priority = data.bit(7); } } //packed pixel control if(address == 0xa15182) { if (vdp.framebufferAccess) return; if(lower) { vdp.dotshift = data.bit(0); } } //autofill length if(address == 0xa15184) { if (vdp.framebufferAccess) return; if(lower) { vdp.autofillLength = data.byte(0); } } //autofill address if(address == 0xa15186) { if (vdp.framebufferAccess) return; if(upper) vdp.autofillAddress.byte(1) = data.byte(1); if(lower) vdp.autofillAddress.byte(0) = data.byte(0); } //autofill data if(address == 0xa15188) { if (vdp.framebufferAccess) return; if(upper) vdp.autofillData.byte(1) = data.byte(1); if(lower) vdp.autofillData.byte(0) = data.byte(0); vdp.fill(); } //frame buffer control if(address == 0xa1518a) { if (vdp.framebufferAccess) return; if(lower) { vdp.selectFramebuffer(data.bit(0)); } } //palette if(address >= 0xa15200 && address <= 0xa153ff) { if (vdp.framebufferAccess) return; if(upper) vdp.cram[address >> 1 & 0xff].byte(1) = data.byte(1); if(lower) vdp.cram[address >> 1 & 0xff].byte(0) = data.byte(0); } } ares-126/ares/md/m32x/io-internal.cpp000066400000000000000000000164321415063341600173770ustar00rootroot00000000000000auto M32X::readInternalIO(n1 upper, n1 lower, n29 address, n16 data) -> n16 { //interrupt mask if(address == 0x4000) { if(shm.active()) { data.bit(0) = shm.irq.pwm.enable; data.bit(1) = shm.irq.cmd.enable; data.bit(2) = shm.irq.hint.enable; data.bit(3) = shm.irq.vint.enable; } if(shs.active()) { data.bit(0) = shs.irq.pwm.enable; data.bit(1) = shs.irq.cmd.enable; data.bit(2) = shs.irq.hint.enable; data.bit(3) = shs.irq.vint.enable; } data.bit( 7) = io.hintVblank; data.bit( 8) = !(bool)cartridge.node; //0 = cartridge connected data.bit( 9) = io.adapterEnable | 1; data.bit(15) = vdp.framebufferAccess; } //hcount if(address == 0x4004) { data.byte(0) = io.hperiod; } //dreq control register if(address == 0x4006) { data.bit( 0) = dreq.vram; data.bit( 1) = dreq.dma; data.bit( 2) = dreq.active; data.bit(14) = dreq.fifo.empty(); data.bit(15) = dreq.fifo.full(); } //68K to SH2 DREQ source address if(address == 0x4008) { data.byte(0) = dreq.source.byte(2); } if(address == 0x400a) { data.byte(1) = dreq.source.byte(1); data.byte(0) = dreq.source.byte(0); } //68K to SH2 DREQ target address if(address == 0x400c) { data.byte(0) = dreq.target.byte(2); } if(address == 0x400e) { data.byte(1) = dreq.target.byte(1); data.byte(0) = dreq.target.byte(0); } //68K to SH2 DREQ length if(address == 0x4010) { data.byte(1) = dreq.length.byte(1); data.byte(0) = dreq.length.byte(0); } //FIFO if(address == 0x4012) { data = dreq.fifo.read(data); shm.dmac.dreq = !dreq.fifo.empty(); shs.dmac.dreq = !dreq.fifo.empty(); } //communication if(address >= 0x4020 && address <= 0x402f) { data = communication[address >> 1 & 7]; } //PWM control if(address == 0x4030) { data.bit(0,1) = pwm.lmode; data.bit(2,3) = pwm.rmode; data.bit(4) = pwm.mono; data.bit(7) = pwm.dreqIRQ; data.bit(8,11) = pwm.timer; } //PWM cycle if(address == 0x4032) { data.bit(0,11) = pwm.cycle; } //PWM left channel pulse width if(address == 0x4034) { data.bit(14) = pwm.lfifo.empty(); data.bit(15) = pwm.lfifo.full(); } //PWM right channel pulse width if(address == 0x4036) { data.bit(14) = pwm.rfifo.empty(); data.bit(15) = pwm.rfifo.full(); } //PWM mono pulse width if(address == 0x4038) { data.bit(14) = pwm.lfifo.empty() && pwm.rfifo.empty(); data.bit(15) = pwm.lfifo.full() || pwm.rfifo.full(); } //bitmap mode if(address == 0x4100) { data.bit( 0) = vdp.mode.bit(0); data.bit( 1) = vdp.mode.bit(1); data.bit( 6) = vdp.lines; data.bit( 7) = vdp.priority; data.bit(15) = !Region::PAL(); } //packed pixel control if(address == 0x4102) { data.bit(0) = vdp.dotshift; } //autofill length if(address == 0x4104) { data.byte(0) = vdp.autofillLength; } //autofill address if(address == 0x4106) { data = vdp.autofillAddress; } //autofill data if(address == 0x4108) { data = vdp.autofillData; } //frame buffer control if(address == 0x410a) { if(shm.active()) shm.synchronize(cpu); if(shs.active()) shs.synchronize(cpu); data.bit( 0) = vdp.framebufferActive; data.bit( 1) = MegaDrive::vdp.refreshing(); //framebuffer access data.bit(13) = vdp.vblank || vdp.hblank; //palette access data.bit(14) = vdp.hblank; data.bit(15) = vdp.vblank; } //palette if(address >= 0x4200 && address <= 0x43ff) { data = vdp.cram[address >> 1 & 0xff]; } return data; } auto M32X::writeInternalIO(n1 upper, n1 lower, n29 address, n16 data) -> void { //interrupt mask if(address == 0x4000) { if(lower && shm.active()) { shm.irq.pwm.enable = data.bit(0); shm.irq.cmd.enable = data.bit(1); shm.irq.hint.enable = data.bit(2); shm.irq.vint.enable = data.bit(3); } if(lower && shs.active()) { shs.irq.pwm.enable = data.bit(0); shs.irq.cmd.enable = data.bit(1); shs.irq.hint.enable = data.bit(2); shs.irq.vint.enable = data.bit(3); } if(lower) { io.hintVblank = data.bit(7); } if(upper) { vdp.framebufferAccess = data.bit(15); } } //stand by change if(address == 0x4002) { } //hcount if(address == 0x4004) { if(lower) { io.hperiod = data.byte(0); io.hcounter = 0; } } //vres interrupt clear if(address == 0x4014) { if(shm.active()) shm.irq.vres.active = 0; if(shs.active()) shs.irq.vres.active = 0; } //vint interrupt clear if(address == 0x4016) { if(shm.active()) shm.irq.vint.active = 0; if(shs.active()) shs.irq.vint.active = 0; } //hint interrupt clear if(address == 0x4018) { if(shm.active()) shm.irq.hint.active = 0; if(shs.active()) shs.irq.hint.active = 0; } //cmd interrupt clear if(address == 0x401a) { if(shm.active()) shm.irq.cmd.active = 0; if(shs.active()) shs.irq.cmd.active = 0; } //pwm interrupt clear if(address == 0x401c) { if(shm.active()) shm.irq.pwm.active = 0; if(shs.active()) shs.irq.pwm.active = 0; } //communication if(address >= 0x4020 && address <= 0x402f) { if(upper) communication[address >> 1 & 7].byte(1) = data.byte(1); if(lower) communication[address >> 1 & 7].byte(0) = data.byte(0); } //PWM control if(address == 0x4030) { if(lower) { pwm.lmode = data.bit(0,1); pwm.rmode = data.bit(2,3); pwm.mono = data.bit(4); pwm.dreqIRQ = data.bit(7); } if(upper) { pwm.timer = data.bit(8,11); } } //PWM cycle if(address == 0x4032) { if(lower) pwm.cycle.bit(0, 7) = data.bit(0, 7); if(upper) pwm.cycle.bit(8,11) = data.bit(8,11); } //PWM left channel pulse width if(address == 0x4034) { pwm.lfifo.write(data); } //PWM right channel pulse width if(address == 0x4036) { pwm.rfifo.write(data); } //PWM mono pulse width if(address == 0x4038) { pwm.lfifo.write(data); pwm.rfifo.write(data); } //bitmap mode if(address == 0x4100) { if (!vdp.framebufferAccess) return; if(lower) { vdp.mode = data.bit(0,1); vdp.lines = data.bit(6); vdp.priority = data.bit(7); } } //packed pixel control if(address == 0x4102) { if (!vdp.framebufferAccess) return; if(lower) { vdp.dotshift = data.bit(0); } } //autofill length if(address == 0x4104) { if (!vdp.framebufferAccess) return; if(lower) { vdp.autofillLength = data.byte(0); } } //autofill address if(address == 0x4106) { if (!vdp.framebufferAccess) return; if(upper) vdp.autofillAddress.byte(1) = data.byte(1); if(lower) vdp.autofillAddress.byte(0) = data.byte(0); } //autofill data if(address == 0x4108) { if (!vdp.framebufferAccess) return; if(upper) vdp.autofillData.byte(1) = data.byte(1); if(lower) vdp.autofillData.byte(0) = data.byte(0); vdp.fill(); } //frame buffer control if(address == 0x410a) { if (!vdp.framebufferAccess) return; if(lower) { vdp.selectFramebuffer(data.bit(0)); } } //palette if(address >= 0x4200 && address <= 0x43ff) { if (!vdp.framebufferAccess) return; if(upper) vdp.cram[address >> 1 & 0xff].byte(1) = data.byte(1); if(lower) vdp.cram[address >> 1 & 0xff].byte(0) = data.byte(0); } } ares-126/ares/md/m32x/m32x.cpp000066400000000000000000000040761415063341600157500ustar00rootroot00000000000000#include namespace ares::MegaDrive { M32X m32x; #include "sh7604.cpp" #include "bus-internal.cpp" #include "bus-external.cpp" #include "io-internal.cpp" #include "io-external.cpp" #include "vdp.cpp" #include "pwm.cpp" #include "debugger.cpp" #include "serialization.cpp" auto M32X::load(Node::Object parent) -> void { node = parent->append("Mega 32X"); sdram.allocate(256_KiB >> 1); shm.load(node, "SHM", "sh2.boot.mrom"); shs.load(node, "SHS", "sh2.boot.srom"); vdp.load(node); pwm.load(node); debugger.load(node); if(auto fp = system.pak->read("vector.rom")) { vectors.allocate(fp->size() >> 1); for(auto address : range(vectors.size())) vectors.program(address, fp->readm(2L)); } } auto M32X::unload() -> void { debugger = {}; shm.unload(); shs.unload(); vdp.unload(); pwm.unload(node); rom.reset(); vectors.reset(); sdram.reset(); node.reset(); } auto M32X::save() -> void { } auto M32X::power(bool reset) -> void { if constexpr(SH2::Accuracy::Recompiler) { ares::Memory::FixedAllocator::get().release(); } sdram.fill(0); shm.power(reset); shs.power(reset); vdp.power(reset); pwm.power(reset); io = {}; dreq = {}; for(auto& word : communication) word = 0; io.vectorLevel4.byte(3) = vectors[0x70 >> 1].byte(1); io.vectorLevel4.byte(2) = vectors[0x70 >> 1].byte(0); io.vectorLevel4.byte(1) = vectors[0x72 >> 1].byte(1); io.vectorLevel4.byte(0) = vectors[0x72 >> 1].byte(0); //connect interfaces shm.sci.link = shs; shs.sci.link = shm; shm.debugger.self = shm; shs.debugger.self = shs; vdp.self = *this; } auto M32X::vblank(bool line) -> void { vdp.vblank = line; shm.irq.vint.active = line; shs.irq.vint.active = line; if(line) vdp.selectFramebuffer(vdp.framebufferSelect); } auto M32X::hblank(bool line) -> void { vdp.hblank = line; shm.irq.hint.active = 0; shs.irq.hint.active = 0; if(line && (!vdp.vblank || io.hintVblank)) { if(io.hcounter++ >= io.hperiod) { io.hcounter = 0; shm.irq.hint.active = 1; shs.irq.hint.active = 1; } } } } ares-126/ares/md/m32x/m32x.hpp000066400000000000000000000114311415063341600157460ustar00rootroot00000000000000//Mega 32X struct M32X { Node::Object node; Memory::Readable rom; Memory::Readable vectors; Memory::Writable sdram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory sdram; } memory; } debugger; struct SH7604 : SH2, Thread { Node::Object node; Memory::Readable bootROM; struct Debugger { maybe self; //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; //sh.cpp auto load(Node::Object, string name, string bootROM) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power(bool reset) -> void; auto busReadByte(u32 address) -> u32 override; auto busReadWord(u32 address) -> u32 override; auto busReadLong(u32 address) -> u32 override; auto busWriteByte(u32 address, u32 data) -> void override; auto busWriteWord(u32 address, u32 data) -> void override; auto busWriteLong(u32 address, u32 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; struct IRQ { struct Source { n1 enable; n1 active; }; Source pwm; // 6 Source cmd; // 8 Source hint; //10 Source vint; //12 Source vres; //14 } irq; }; struct VDP { maybe self; Memory::Writable dram; Memory::Writable cram; array_span fbram; //VDP-side active DRAM bank array_span bbram; //CPU-side active DRAM bank struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory dram; Node::Debugger::Memory cram; } memory; } debugger; //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; auto scanline(u32 pixels[1280], u32 y) -> void; auto scanlineMode1(u32 pixels[1280], u32 y) -> void; auto scanlineMode2(u32 pixels[1280], u32 y) -> void; auto scanlineMode3(u32 pixels[1280], u32 y) -> void; auto plot(u32* output, u16 color) -> void; auto fill() -> void; auto selectFramebuffer(n1 active) -> void; //serialization.cpp auto serialize(serializer&) -> void; n2 mode; //0 = blank, 1 = packed, 2 = direct, 3 = RLE n1 lines; //0 = 224, 1 = 240 n1 priority; //0 = MD, 1 = 32X n1 dotshift; n8 autofillLength; n16 autofillAddress; n16 autofillData; n1 framebufferAccess; n1 framebufferActive; n1 framebufferSelect; n1 hblank; n1 vblank; }; struct PWM : Thread { Node::Audio::Stream stream; //pwm.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n2 lmode; n2 rmode; n1 mono; n1 dreqIRQ; n4 timer; n12 cycle; n32 periods; n32 counter; i12 lsample; i12 rsample; queue lfifo; queue rfifo; }; //m32x.cpp auto load(Node::Object) -> void; auto unload() -> void; auto save() -> void; auto power(bool reset) -> void; auto vblank(bool) -> void; auto hblank(bool) -> void; //bus-internal.cpp auto readInternal(n1 upper, n1 lower, n32 address, n16 data = 0) -> n16; auto writeInternal(n1 upper, n1 lower, n32 address, n16 data) -> void; //bus-external.cpp auto readExternal(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeExternal(n1 upper, n1 lower, n24 address, n16 data) -> void; //io-internal.cpp auto readInternalIO(n1 upper, n1 lower, n29 address, n16 data) -> n16; auto writeInternalIO(n1 upper, n1 lower, n29 address, n16 data) -> void; //io-external.cpp auto readExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; SH7604 shm; //master SH7604 shs; //slave VDP vdp; PWM pwm; struct IO { //$000070 n32 vectorLevel4; //$a15000 n1 adapterEnable; n1 adapterReset; n1 resetEnable = 1; //$a15004 n2 romBank; //$a1511a n1 cartridgeMode; //$4004 n8 hperiod; n8 hcounter; n1 hintVblank; } io; struct DREQ { n1 vram; n1 dma; n1 active; n24 source; n24 target; n16 length; queue fifo; } dreq; n16 communication[8]; }; extern M32X m32x; ares-126/ares/md/m32x/pwm.cpp000066400000000000000000000023711415063341600157560ustar00rootroot00000000000000auto M32X::PWM::load(Node::Object parent) -> void { stream = parent->append("PWM"); stream->setChannels(2); stream->setFrequency(44'100); } auto M32X::PWM::unload(Node::Object parent) -> void { parent->remove(stream); stream.reset(); } auto M32X::PWM::main() -> void { if(mono) { lsample = lfifo.read(0); rsample = rfifo.read(0); } else { if(lmode == 0) lsample = 0; if(lmode == 1) lsample = lfifo.read(0); if(lmode == 2) lsample = rfifo.read(0); if(lmode == 3) lsample = 0; //undefined if(rmode == 0) rsample = 0; if(rmode == 1) rsample = rfifo.read(0); if(rmode == 2) rsample = lfifo.read(0); if(rmode == 3) rsample = 0; //undefined } if(timer) { if(++periods == timer) { periods = 0; m32x.shm.irq.pwm.active = 1; m32x.shs.irq.pwm.active = 1; } } u32 clocks = max(1, cycle); counter += clocks; while(counter >= 522) { counter -= 522; stream->frame(lsample / 2047.0, rsample / 2047.0); } step(clocks); } auto M32X::PWM::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto M32X::PWM::power(bool reset) -> void { Thread::create(23'020'200, {&M32X::PWM::main, this}); lfifo.flush(); rfifo.flush(); } ares-126/ares/md/m32x/serialization.cpp000066400000000000000000000024251415063341600200300ustar00rootroot00000000000000auto M32X::serialize(serializer& s) -> void { s(sdram); s(shm); s(shs); s(vdp); s(pwm); s(io.vectorLevel4); s(io.adapterEnable); s(io.adapterReset); s(io.resetEnable); s(io.romBank); s(io.cartridgeMode); s(io.hperiod); s(io.hcounter); s(io.hintVblank); s(dreq.vram); s(dreq.dma); s(dreq.active); s(dreq.source); s(dreq.target); s(dreq.length); s(dreq.fifo); s(communication); } auto M32X::SH7604::serialize(serializer& s) -> void { Thread::serialize(s); SH2::serialize(s); s(irq.pwm.enable); s(irq.pwm.active); s(irq.cmd.enable); s(irq.cmd.active); s(irq.hint.enable); s(irq.hint.active); s(irq.vint.enable); s(irq.vint.active); s(irq.vres.enable); s(irq.vres.active); } auto M32X::VDP::serialize(serializer& s) -> void { s(dram); s(cram); s(mode); s(lines); s(priority); s(dotshift); s(autofillLength); s(autofillAddress); s(autofillData); s(framebufferAccess); s(framebufferActive); s(framebufferSelect); s(hblank); s(vblank); selectFramebuffer(framebufferSelect); } auto M32X::PWM::serialize(serializer& s) -> void { Thread::serialize(s); s(lmode); s(rmode); s(mono); s(dreqIRQ); s(timer); s(cycle); s(periods); s(counter); s(lsample); s(rsample); s(lfifo); s(rfifo); } ares-126/ares/md/m32x/sh7604.cpp000066400000000000000000000054771415063341600161200ustar00rootroot00000000000000auto M32X::SH7604::load(Node::Object parent, string name, string bootFile) -> void { node = parent->append(name); if(auto fp = system.pak->read(bootFile)) { bootROM.allocate(fp->size() >> 1); for(auto address : range(bootROM.size())) bootROM.program(address, fp->readm(2L)); } debugger.load(node); } auto M32X::SH7604::unload() -> void { debugger = {}; bootROM.reset(); node.reset(); } auto M32X::SH7604::main() -> void { if(!SH2::inDelaySlot() && !SH2::ID) { if(irq.vres.active && irq.vres.enable) { debugger.interrupt("VRES"); irq.vres.active = 0; return ET = 1, interrupt(14, 71); } if(irq.vint.active && irq.vint.enable && SR.I < 12) { debugger.interrupt("VINT"); return ET = 1, interrupt(12, 70); } if(irq.hint.active && irq.hint.enable && SR.I < 10) { debugger.interrupt("HINT"); return ET = 1, interrupt(10, 69); } if(irq.cmd.active && irq.cmd.enable && SR.I < 8) { debugger.interrupt("CMD"); return ET = 1, interrupt(8, 68); } if(irq.pwm.active && irq.pwm.enable && SR.I < 6) { debugger.interrupt("PWM"); return ET = 1, interrupt(6, 67); } } debugger.instruction(); SH2::instruction(); SH2::intc.run(); SH2::dmac.run(); SH2::frt.run(); } auto M32X::SH7604::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto M32X::SH7604::power(bool reset) -> void { Thread::create(23'000'000, {&M32X::SH7604::main, this}); recompiler.min_cycles = 22; SH2::power(reset); irq = {}; irq.vres.enable = 1; } auto M32X::SH7604::busReadByte(u32 address) -> u32 { if(address & 1) { return m32x.readInternal(0, 1, address & ~1).byte(0); } else { return m32x.readInternal(1, 0, address & ~1).byte(1); } } auto M32X::SH7604::busReadWord(u32 address) -> u32 { return m32x.readInternal(1, 1, address & ~1); } auto M32X::SH7604::busReadLong(u32 address) -> u32 { u32 data = m32x.readInternal(1, 1, address & ~3 | 0) << 16; return data | m32x.readInternal(1, 1, address & ~3 | 2) << 0; } auto M32X::SH7604::busWriteByte(u32 address, u32 data) -> void { debugger.tracer.instruction->invalidate(address & ~1); if(address & 1) { m32x.writeInternal(0, 1, address & ~1, data << 8 | (u8)data << 0); } else { m32x.writeInternal(1, 0, address & ~1, data << 8 | (u8)data << 0); } } auto M32X::SH7604::busWriteWord(u32 address, u32 data) -> void { debugger.tracer.instruction->invalidate(address & ~1); m32x.writeInternal(1, 1, address & ~1, data); } auto M32X::SH7604::busWriteLong(u32 address, u32 data) -> void { debugger.tracer.instruction->invalidate(address & ~3 | 0); debugger.tracer.instruction->invalidate(address & ~3 | 2); m32x.writeInternal(1, 1, address & ~3 | 0, data >> 16); m32x.writeInternal(1, 1, address & ~3 | 2, data >> 0); } ares-126/ares/md/m32x/vdp.cpp000066400000000000000000000046201415063341600157430ustar00rootroot00000000000000auto M32X::VDP::load(Node::Object parent) -> void { dram.allocate(512_KiB >> 1); cram.allocate(512 >> 1); debugger.load(parent); } auto M32X::VDP::unload() -> void { debugger = {}; dram.reset(); cram.reset(); } auto M32X::VDP::power(bool reset) -> void { dram.fill(0); cram.fill(0); vblank = 1; selectFramebuffer(framebufferSelect); } auto M32X::VDP::scanline(u32 pixels[1280], u32 y) -> void { if(!Mega32X() || !pixels) return; if(mode == 1) return scanlineMode1(pixels, y); if(mode == 2) return scanlineMode2(pixels, y); if(mode == 3) return scanlineMode3(pixels, y); } auto M32X::VDP::scanlineMode1(u32 pixels[1280], u32 y) -> void { u16 address = fbram[y]; for(u32 x = dotshift; x < 320 + dotshift; x++) { u8 color = fbram[address + (x >> 1) & 0xffff].byte(!(x & 1)); plot(&pixels[x * 4], cram[color]); } } auto M32X::VDP::scanlineMode2(u32 pixels[1280], u32 y) -> void { u16 address = fbram[y]; for(u32 x : range(320)) { u16 pixel = fbram[address++ & 0xffff]; plot(&pixels[x * 4], pixel); } } auto M32X::VDP::scanlineMode3(u32 pixels[1280], u32 y) -> void { u16 address = fbram[y]; for(u32 x = 0; x < 320;) { u16 word = fbram[address++ & 0xffff]; u8 length = (word >> 8) + 1; u8 color = (word >> 0); u16 pixel = cram[color]; for(u32 repeat : range(length)) { plot(&pixels[x * 4], pixel); x++; } } } auto M32X::VDP::plot(u32* output, u16 color) -> void { n1 backdrop = output[0] >> 11; n1 throughbit = color >> 15; b1 opaque = color & 0x7fff; if(priority == 0) { //Mega Drive has priority if(throughbit || backdrop) { output[0] = color | 1 << 15; output[1] = color | 1 << 15; output[2] = color | 1 << 15; output[3] = color | 1 << 15; } } else { //Mega 32X has priority if(!throughbit || backdrop) { output[0] = color | 1 << 15; output[1] = color | 1 << 15; output[2] = color | 1 << 15; output[3] = color | 1 << 15; } } } auto M32X::VDP::fill() -> void { for(u32 repeat : range(1 + autofillLength)) { bbram[autofillAddress] = autofillData; autofillAddress.byte(0)++; } } auto M32X::VDP::selectFramebuffer(n1 select) -> void { framebufferSelect = select; if(!vblank && mode) return; framebufferActive = select; fbram = {dram.data() + 0x10000 * (select == 0), 0x10000}; bbram = {dram.data() + 0x10000 * (select == 1), 0x10000}; } ares-126/ares/md/mcd/000077500000000000000000000000001415063341600144165ustar00rootroot00000000000000ares-126/ares/md/mcd/bus-external.cpp000066400000000000000000000061321415063341600175350ustar00rootroot00000000000000auto MCD::readExternal(n1 upper, n1 lower, n22 address, n16 data) -> n16 { if(!MegaCD()) return data; address.bit(18,20) = 0; //mirrors if(address >= 0x000000 && address <= 0x01ffff) { if(address == 0x70) return io.vectorLevel4 >> 16; if(address == 0x72) return io.vectorLevel4 >> 0; return bios[address >> 1]; } if(address >= 0x020000 && address <= 0x03ffff) { address = io.pramBank << 17 | (n17)address; return pram[address >> 1]; } if(address >= 0x200000 && address <= 0x23ffff) { if(io.wramMode == 0) { //if(io.wramSwitch == 1) return data; address = (n18)address >> 1; } else { if(address >= 0x220000) { if(address < 0x230000) // V32 cell-mapped window address = (address & 0x0FC00) >> 8 | (address & 0x003FC) << 6 | address & 0x10002; else if (address < 0x238000) // V16 cell-mapped window address = (address & 0x07E00) >> 7 | (address & 0x001FC) << 6 | address & 0x18002; else if (address < 0x23C000) // V8 cell-mapped window address = (address & 0x03F00) >> 6 | (address & 0x000FC) << 6 | address & 0x1C002; else // V4 cell-mapped window address = (address & 0x01F80) >> 5 | (address & 0x0007C) << 6 | address & 0x1E002; } address = (n17)address & ~1 | io.wramSelect; } if(!vdp.dma.active) return wram[address]; //VDP DMA from Mega CD word RAM to VDP VRAM responds with a one-access delay //note: it is believed that the first transfer is the CPU prefetch, which isn't emulated here //games manually correct the first word transferred after VDP DMAs from word RAM data = io.wramLatch; io.wramLatch = wram[address]; return data; } return data; } auto MCD::writeExternal(n1 upper, n1 lower, n22 address, n16 data) -> void { if(!MegaCD()) return; address.bit(18,20) = 0; //mirrors if(address >= 0x020000 && address <= 0x03ffff) { address = io.pramBank << 17 | (n17)address; if(upper) pram[address >> 1].byte(1) = data.byte(1); if(lower) pram[address >> 1].byte(0) = data.byte(0); return; } if(address >= 0x200000 && address <= 0x23ffff) { if(io.wramMode == 0) { //if(io.wramSwitch == 1) return; address = (n18)address >> 1; } else { if(address >= 0x220000) { if(address < 0x230000) // V32 cell-mapped window address = (address & 0x0FC00) >> 8 | (address & 0x003FC) << 6 | address & 0x10002; else if (address < 0x238000) // V16 cell-mapped window address = (address & 0x07E00) >> 7 | (address & 0x001FC) << 6 | address & 0x18002; else if (address < 0x23C000) // V8 cell-mapped window address = (address & 0x03F00) >> 6 | (address & 0x000FC) << 6 | address & 0x1C002; else // V4 cell-mapped window address = (address & 0x01F80) >> 5 | (address & 0x0007C) << 6 | address & 0x1E002; } address = (n17)address & ~1 | io.wramSelect; } if(upper) wram[address].byte(1) = data.byte(1); if(lower) wram[address].byte(0) = data.byte(0); return; } } ares-126/ares/md/mcd/bus-internal.cpp000066400000000000000000000064021415063341600175270ustar00rootroot00000000000000auto MCD::read(n1 upper, n1 lower, n24 address, n16 data) -> n16 { address.bit(20,23) = 0; //mirroring if(address >= 0x000000 && address <= 0x07ffff) { return pram[address >> 1]; } if(address >= 0x080000 && address <= 0x0bffff) { if(io.wramMode == 0) { //if(io.wramSwitch == 0) return data; address = (n18)address >> 1; return wram[address]; } else { // dot-mapped window n4 ofs = address.bit(1) ? 0 : 8; // low/high byte selector address = (n17)(address >> 1) & ~1 | !io.wramSelect; return wram[address].bit(4+ofs,7+ofs) << 8 | wram[address].bit(0+ofs,3+ofs); } return data; } if(address >= 0x0c0000 && address <= 0x0dffff) { if(io.wramMode == 1) { address = (n17)address & ~1 | !io.wramSelect; return wram[address]; } return data; } if(address >= 0x0e0000 && address <= 0x0effff) { if(!lower) return data; return bram.read(address >> 1); } if(address >= 0x0f0000 && address <= 0x0f7fff) { if(!lower) return data; return pcm.read(address >> 1, data); } if(address >= 0x0f8000 && address <= 0x0fffff) { return readIO(upper, lower, address, data); } return data; //unreachable } auto MCD::write(n1 upper, n1 lower, n24 address, n16 data) -> void { address.bit(20,23) = 0; //mirroring if(address >= 0x000000 && address <= 0x07ffff) { if(upper) pram[address >> 1].byte(1) = data.byte(1); if(lower) pram[address >> 1].byte(0) = data.byte(0); return; } if(address >= 0x080000 && address <= 0x0bffff) { if(io.wramMode == 0) { //if(io.wramSwitch == 0) return; address = (n18)address >> 1; if(upper) wram[address].byte(1) = data.byte(1); if(lower) wram[address].byte(0) = data.byte(0); } else { // dot-mapped window n4 ofs = address.bit(1) ? 0 : 8; // low/high byte selector address = (n17)(address >> 1) & ~1 | !io.wramSelect; switch(mcd.io.wramPriority) { case 0: // normal write if(upper) wram[address].bit(4+ofs,7+ofs) = data.bit(8,11); if(lower) wram[address].bit(0+ofs,3+ofs) = data.bit(0,3); return; case 1: // under write if(upper && !wram[address].bit(4+ofs,7+ofs)) wram[address].bit(4+ofs,7+ofs) = data.bit(8,11); if(lower && !wram[address].bit(0+ofs,3+ofs)) wram[address].bit(0+ofs,3+ofs) = data.bit(0,3); return; case 2: // over write if(upper && data.bit(8,11)) wram[address].bit(4+ofs,7+ofs) = data.bit(8,11); if(lower && data.bit(0,3)) wram[address].bit(0+ofs,3+ofs) = data.bit(0,3); return; } return; // invalid priority mode } } if(address >= 0x0c0000 && address <= 0x0dffff) { if(io.wramMode == 1) { address = (n17)address & ~1 | !io.wramSelect; if(upper) wram[address].byte(1) = data.byte(1); if(lower) wram[address].byte(0) = data.byte(0); } } if(address >= 0x0e0000 && address <= 0x0effff) { if(!lower) return; return bram.write(address >> 1, data); } if(address >= 0x0f0000 && address <= 0x0f7fff) { if(!lower) return; return pcm.write(address >> 1, data); } if(address >= 0x0f8000 && address <= 0x0fffff) { return writeIO(upper, lower, address, data); } return; //unreachable } ares-126/ares/md/mcd/cdc-transfer.cpp000066400000000000000000000027531415063341600175040ustar00rootroot00000000000000auto MCD::CDC::Transfer::dma() -> void { if(!active) return; if(destination != 4 && destination != 5 && destination != 7) return; n16 data = mcd.cdc.ram[n13(source >> 1)]; switch(destination) { case 4: //PCM (0x1000 - 0x1fff = PCM RAM active 4KB bank) mcd.pcm.write(0x1000 | n12(address >> 1) | 1, data.byte(1)); mcd.pcm.write(0x1000 | n12(address >> 1) | 0, data.byte(0)); address += 2; //PCM DMA requires two 8-bit writes per transfer break; case 5: //PRAM mcd.write(1, 1, 0x000000 | (n19)address & ~1, data); break; case 7: //WRAM if(mcd.io.wramMode == 0) { mcd.write(1, 1, 0x080000 | (n18)address & ~1, data); } else { mcd.write(1, 1, 0x0c0000 | (n17)address & ~1, data); } break; } address += 2; source += 2; if(!length--) complete(); if(!length--) complete(); } auto MCD::CDC::Transfer::read() -> n16 { if(!ready) return 0xffff; n16 data = mcd.cdc.ram[n13(source >> 1)]; source += 2; if(!length--) complete(); if(!length--) complete(); return data; } auto MCD::CDC::Transfer::start() -> void { if(!enable) return; active = 1; busy = 1; ready = (destination == 2 || destination == 3); completed = 0; mcd.cdc.irq.transfer.pending = 0; mcd.cdc.poll(); } auto MCD::CDC::Transfer::complete() -> void { active = 0; busy = 0; ready = 0; completed = 1; mcd.cdc.irq.transfer.pending = 1; mcd.cdc.poll(); } auto MCD::CDC::Transfer::stop() -> void { active = 0; busy = 0; ready = 0; } ares-126/ares/md/mcd/cdc.cpp000066400000000000000000000240111415063341600156510ustar00rootroot00000000000000//Sanyo LC8951x (CD controller) //note: this class emulates a theoretically perfect CDC that never encounters read errors //called whenever IRQ line state may change auto MCD::CDC::poll() -> void { bool pending = false; pending |= irq.decoder.enable && irq.decoder.pending; pending |= irq.transfer.enable && irq.transfer.pending; pending |= irq.command.enable && irq.command.pending; pending ? irq.raise() : irq.lower(); } auto MCD::CDC::clock() -> void { stopwatch++; } auto MCD::CDC::decode(s32 sector) -> void { if(!decoder.enable || !mcd.fd) return; auto [minute, second, frame] = CD::MSF(sector); header.minute = minute / 10 << 4 | minute % 10; header.second = second / 10 << 4 | second % 10; header.frame = frame / 10 << 4 | frame % 10; header.mode = 0x01; decoder.valid = 1; irq.decoder.pending = 1; poll(); if(control.writeRequest) { transfer.pointer += 2352; transfer.target += 2352; //the sync header is written at the tail instead of head. mcd.fd->seek((abs(mcd.cdd.session.leadIn.lba) + sector) * 2448); for(u32 index = 0; index < 12; index += 2) { ram[n13(transfer.pointer + index + 2340 >> 1)] = mcd.fd->readm(2); } for(u32 index = 0; index < 2340; index += 2) { ram[n13(transfer.pointer + index + 0 >> 1)] = mcd.fd->readm(2); } } } auto MCD::CDC::read() -> n8 { //print("CDC ", hex(address), " ", "\n"); n8 data; switch(address) { //COMIN: command input case 0x0: { if(command.empty) { data = 0xff; break; } data = command.fifo[command.read++]; if(command.read == command.write) { command.empty = 1; irq.command.pending = 0; poll(); } } break; //IFSTAT: interface status case 0x1: { data.bit(0) =!status.active; data.bit(1) =!transfer.active; data.bit(2) =!status.busy; data.bit(3) =!transfer.busy; data.bit(4) = 1; data.bit(5) =!irq.decoder.pending; data.bit(6) =!irq.transfer.pending; data.bit(7) =!irq.command.pending; } break; //DBCL: data byte counter low case 0x2: { data.bit(0,7) = transfer.length.bit(0,7); } break; //DBCH: data byte counter high case 0x3: { data.bit(0,3) = transfer.length.bit(8,11); data.bit(4) =!irq.transfer.pending; data.bit(5) =!irq.transfer.pending; data.bit(6) =!irq.transfer.pending; data.bit(7) =!irq.transfer.pending; } break; //HEAD0: header or subheader data case 0x4: { if(control.head == 0) { data = header.minute; } else { data = subheader.file; } } break; //HEAD1: header or subheader data case 0x5: { if(control.head == 0) { data = header.second; } else { data = subheader.channel; } } break; //HEAD2: header or subheader data case 0x6: { if(control.head == 0) { data = header.frame; } else { data = subheader.submode; } } break; //HEAD3: header or subheader data case 0x7: { if(control.head == 0) { data = header.mode; } else { data = subheader.coding; } } break; //PTL: block pointer low case 0x8: { data.bit(0,7) = transfer.pointer.bit(0,7); } break; //PTH: block pointer high case 0x9: { data.bit(0,7) = transfer.pointer.bit(8,15); } break; //WAL: write address low case 0xa: { data.bit(0,7) = transfer.target.bit(0,7); } break; //WAH: write address high case 0xb: { data.bit(0,7) = transfer.target.bit(8,15); } break; //STAT0: status 0 case 0xc: { data.bit(0) = 0; //UCEBLK: uncorrected errors in block data.bit(1) = 0; //ERABLK: erasures in block data.bit(2) = 0; //SBLK: short block data.bit(3) = 0; //WSHORT: word short data.bit(4) = 0; //LBLK: long block data.bit(5) = 0; //NOSYNC: no sync pattern detected data.bit(6) = 0; //ILSYNC: illegal sync data.bit(7) = decoder.enable; //CRCOK: CRC check OK (set only when decoder is enabled) } break; //STAT1: status 1 //reports error when reading header or subheader data from blocks case 0xd: { data.bit(0) = 0; //SH3ERA: subheader coding read error data.bit(1) = 0; //SH2ERA: subheader submode read error data.bit(2) = 0; //SH1ERA: subheader channel read error data.bit(3) = 0; //SH0ERA: subheader file read error data.bit(4) = 0; //MODERA: header mode read error data.bit(5) = 0; //BLKERA: header block read error data.bit(6) = 0; //SECERA: header second read error data.bit(7) = 0; //MINERA: header minute read error } break; //STAT2: status 2 //RFORMx and RMODx are undocumented even across other ICs that emulate the Sanyo interface case 0xe: { //STAT2 data.bit(0) = 0; //RFORM0 data.bit(1) = 0; //RFORM1 data.bit(2) = decoder.form; //FORM (also referred to as NOCOR) data.bit(3) = decoder.mode; //MODE data.bit(4) = 0; //RMOD0 data.bit(5) = 0; //RMOD1 data.bit(6) = 0; //RMOD2 data.bit(7) = 0; //RMOD3 } break; //STAT3: status 3 case 0xf: { data.bit(5) = 0; //CBLK: corrected block flag data.bit(6) = 0; //WLONG: word long data.bit(7) =!decoder.valid; //!VALST: valid status decoder.valid = 0; //note: not accurate, supposedly irq.decoder.pending = 0; poll(); } break; } //COMIN reads do not increment the address; STAT3 reads wrap the address to 0x0 if(address) address++; return data; } auto MCD::CDC::write(n8 data) -> void { //print("CDC ", hex(address), "=", hex(data), "\n"); switch(address) { //SBOUT: status byte output case 0x0: { if(status.wait && transfer.busy) break; if(status.read == status.write && !status.empty) status.read++; //unverified: discard oldest byte? status.fifo[status.write++] = data; status.empty = 0; status.active = 1; status.busy = 1; } break; case 0x1: { //IFCTRL status.enable = data.bit(0); transfer.enable = data.bit(1); status.wait =!data.bit(2); transfer.wait =!data.bit(3); control.commandBreak =!data.bit(4); irq.decoder.enable = data.bit(5); irq.transfer.enable = data.bit(6); irq.command.enable = data.bit(7); poll(); //abort data transfer if data output is disabled if(!transfer.enable) transfer.stop(); } break; //DBCL: data byte counter low case 0x2: { transfer.length.bit(0,7) = data.bit(0,7); } break; //DBCH: data byte counter high case 0x3: { transfer.length.bit(8,11) = data.bit(0,3); } break; //DACL: data address counter low case 0x4: { transfer.source.bit(0,7) = data.bit(0,7); } break; //DACH: data address counter high case 0x5: { transfer.source.bit(8,15) = data.bit(0,7); } break; //DTRG: data trigger case 0x6: { transfer.start(); } break; case 0x7: { //DTACK irq.transfer.pending = 0; poll(); } break; //WAL: write address low case 0x8: { transfer.target.bit(0,7) = data.bit(0,7); } break; //WAH: write address high case 0x9: { transfer.target.bit(8,15) = data.bit(0,7); } break; //CTRL0: control 0 case 0xa: { control.pCodeCorrection = data.bit(0); control.qCodeCorrection = data.bit(1); control.writeRequest = data.bit(2); control.erasureRequest = data.bit(3); control.autoCorrection = data.bit(4); control.errorCorrection = data.bit(5); control.edcCorrection = data.bit(6); decoder.enable = data.bit(7); decoder.mode = control.mode; decoder.form = control.form & control.autoCorrection; } break; //CTRL1: control 1 case 0xb: { control.head = data.bit(0); control.modeByteCheck = data.bit(1); control.form = data.bit(2); control.mode = data.bit(3); control.correctionWrite = data.bit(4); control.descramble = data.bit(5); control.syncDetection = data.bit(6); control.syncInterrupt = data.bit(7); decoder.mode = control.mode; decoder.form = control.form & control.autoCorrection; } break; //PTL: block pointer low case 0xc: { transfer.pointer.bit(0,7) = data.bit(0,7); } break; //PTH: block pointer high case 0xd: { transfer.pointer.bit(8,15) = data.bit(0,7); } break; //CTRL2: control 2 case 0xe: { control.statusTrigger = data.bit(0); control.statusControl = data.bit(1); control.erasureCorrection = data.bit(2); } break; //RESET: software reset case 0xf: { //IFSTAT status.active = 0; transfer.active = 0; status.busy = 0; transfer.busy = 0; irq.decoder.pending = 0; irq.transfer.pending = 0; irq.command.pending = 0; //IFCTRL status.enable = 0; transfer.enable = 0; status.wait = 1; transfer.wait = 1; control.commandBreak = 1; irq.decoder.enable = 0; irq.transfer.enable = 0; irq.command.enable = 0; //CTRL0 control.pCodeCorrection = 0; control.qCodeCorrection = 0; control.writeRequest = 0; control.erasureRequest = 0; control.autoCorrection = 0; control.errorCorrection = 0; control.edcCorrection = 0; decoder.enable = 0; //CTRL1 control.head = 0; control.modeByteCheck = 0; control.form = 0; control.mode = 0; control.correctionWrite = 0; control.descramble = 0; control.syncDetection = 0; control.syncInterrupt = 0; decoder.form = 0; decoder.mode = 0; //CTRL2 control.statusTrigger = 0; control.statusControl = 0; control.erasureCorrection = 0; //HEAD0 header.minute = 0; subheader.file = 0; //HEAD1 header.second = 0; subheader.channel = 0; //HEAD2 header.frame = 0; subheader.submode = 0; //HEAD3 header.mode = 0; subheader.coding = 0; transfer.stop(); poll(); } break; } //SBOUT writes do not increment the address; RESET reads wrap the address to 0x0 if(address) address++; } auto MCD::CDC::power(bool reset) -> void { ram.fill(0x00); address = 0; stopwatch = 0; irq = {}; command = {}; status = {}; transfer = {}; decoder = {}; header = {}; subheader = {}; control = {}; } ares-126/ares/md/mcd/cdd-dac.cpp000066400000000000000000000023741415063341600164070ustar00rootroot00000000000000//Sanyo LC7883KM auto MCD::CDD::DAC::load(Node::Object parent) -> void { stream = parent->append("CD-DA"); stream->setChannels(2); stream->setFrequency(44100); } auto MCD::CDD::DAC::unload(Node::Object parent) -> void { parent->remove(stream); stream.reset(); } auto MCD::CDD::DAC::sample(i16 left, i16 right) -> void { left = (left * (i32)attenuated) / 0x4000 >> 1; right = (right * (i32)attenuated) / 0x4000 >> 1; stream->frame(left / 32768.0, right / 32768.0); if(attenuated == attenuator); else if(attenuated < attenuator) attenuated++; else if(attenuated > attenuator) attenuated--; } auto MCD::CDD::DAC::reconfigure() -> void { stream->resetFilters(); f64 inputFrequency = 0.0; if(deemphasis == 0) return; //no de-emphasis if(deemphasis == 1) inputFrequency = 44100.0; if(deemphasis == 2) inputFrequency = 32000.0; //unverified behavior if(deemphasis == 3) inputFrequency = 48000.0; //unverified behavior //todo: this should be a first-order filter, but nall/dsp lacks a first-order high-shelf filter stream->addHighShelfFilter((10000.0 + 3100.0) / 2.0, 2, -9.477, 0.5); } auto MCD::CDD::DAC::power(bool reset) -> void { rate = 0; deemphasis = 0; attenuator = 0x4000; attenuated = 0x4000; } ares-126/ares/md/mcd/cdd.cpp000066400000000000000000000202541415063341600156570ustar00rootroot00000000000000//NEC uPD75006 (G-631) //4-bit MCU HLE auto MCD::CDD::load(Node::Object parent) -> void { dac.load(parent); } auto MCD::CDD::unload(Node::Object parent) -> void { dac.unload(parent); } auto MCD::CDD::clock() -> void { if(++counter < 434) return; counter = 0; //75hz if(!hostClockEnable) return; if(statusPending) { statusPending = 0; irq.raise(); } switch(io.status) { case Status::Stopped: { io.status = mcd.disc ? Status::ReadingTOC : Status::NoDisc; io.sector = 0; io.sample = 0; io.track = 0; } break; case Status::ReadingTOC: { io.sector++; if(!session.inLeadIn(io.sector)) { io.status = Status::Paused; if(auto track = session.inTrack(io.sector)) io.track = track(); } } break; case Status::Playing: { if(session.tracks[io.track].isAudio()) break; mcd.cdc.decode(io.sector); advance(); } break; case Status::Seeking: { if(io.latency && --io.latency) break; io.status = io.seeking; if(auto track = session.inTrack(io.sector)) io.track = track(); } break; } } auto MCD::CDD::advance() -> void { if(auto track = session.inTrack(io.sector + 1)) { io.track = track(); io.sector++; io.sample = 0; return; } io.status = Status::LeadOut; io.track = 0xaa; } auto MCD::CDD::sample() -> void { i16 left = 0; i16 right = 0; if(io.status == Status::Playing) { if(session.tracks[io.track].isAudio()) { mcd.fd->seek((abs(session.leadIn.lba) + io.sector) * 2448 + io.sample); left = mcd.fd->readl(2); right = mcd.fd->readl(2); io.sample += 4; if(io.sample >= 2352) advance(); } } dac.sample(left, right); } //convert sector# to normalized sector position on the CD-ROM surface for seek latency calculation auto MCD::CDD::position(s32 sector) -> double { static const f64 sectors = 7500.0 + 330000.0 + 6750.0; static const f64 radius = 0.058 - 0.024; static const f64 innerRadius = 0.024 * 0.024; //in mm static const f64 outerRadius = 0.058 * 0.058; //in mm sector += session.leadIn.lba; //convert to natural return sqrt(sector / sectors * (outerRadius - innerRadius) + innerRadius) / radius; } auto MCD::CDD::process() -> void { //if(command[0]) print("CDD ", command[0], ":", command[3], "\n"); if(!valid()) { //unverified debug(unusual, "[MCD::CDD::process] CDD checksum error"); io.status = Status::ChecksumError; } else switch(command[0]) { case Command::Idle: { //fixes Lunar: The Silver Star if(!io.latency && status[1] == 0xf) { status[1] = 0x2; status[2] = io.track / 10; status[3] = io.track % 10; } } break; case Command::Stop: { io.status = Status::Stopped; status[1] = 0x0; status[2] = 0x0; status[3] = 0x0; status[4] = 0x0; status[5] = 0x0; status[6] = 0x0; status[7] = 0x0; status[8] = 0x0; } break; case Command::Request: { switch(command[3]) { case Request::AbsoluteTime: { auto [minute, second, frame] = CD::MSF(io.sector); status[1] = command[3]; status[2] = minute / 10; status[3] = minute % 10; status[4] = second / 10; status[5] = second % 10; status[6] = frame / 10; status[7] = frame % 10; status[8] = session.tracks[io.track].isData() << 2; } break; case Request::RelativeTime: { auto [minute, second, frame] = CD::MSF(io.sector - session.tracks[io.track].indices[1].lba); status[1] = command[3]; status[2] = minute / 10; status[3] = minute % 10; status[4] = second / 10; status[5] = second % 10; status[6] = frame / 10; status[7] = frame % 10; status[8] = session.tracks[io.track].isData() << 2; } break; case Request::TrackInformation: { status[1] = command[3]; status[2] = io.track / 10; status[3] = io.track % 10; status[4] = 0x0; status[5] = 0x0; status[6] = 0x0; status[7] = 0x0; status[8] = 0x0; if(session.inLeadIn (io.sector)) { status[2] = 0x0; status[3] = 0x0; } if(session.inLeadOut(io.sector)) { status[2] = 0xa; status[3] = 0xa; } } break; case Request::DiscCompletionTime: { //time in mm:ss:ff auto [minute, second, frame] = CD::MSF(session.leadOut.lba); status[1] = command[3]; status[2] = minute / 10; status[3] = minute % 10; status[4] = second / 10; status[5] = second % 10; status[6] = frame / 10; status[7] = frame % 10; status[8] = 0x0; } break; case Request::DiscTracks: { //first and last track numbers auto firstTrack = session.firstTrack; auto lastTrack = session.lastTrack; status[1] = command[3]; status[2] = firstTrack / 10; status[3] = firstTrack % 10; status[4] = lastTrack / 10; status[5] = lastTrack % 10; status[6] = 0x0; status[7] = 0x0; status[8] = 0x0; } break; case Request::TrackStartTime: { if(command[4] > 9 || command[5] > 9) break; u32 track = command[4] * 10 + command[5]; auto [minute, second, frame] = CD::MSF(session.tracks[track].indices[1].lba); status[1] = command[3]; status[2] = minute / 10; status[3] = minute % 10; status[4] = second / 10; status[5] = second % 10; status[6] = frame / 10; status[7] = frame % 10; status[6].bit(3) = session.tracks[track].isData(); status[8] = track % 10; } break; case Request::ErrorInformation: { //always report no errors status[1] = command[3]; status[2] = 0x0; status[3] = 0x0; status[4] = 0x0; status[5] = 0x0; status[6] = 0x0; status[7] = 0x0; status[8] = 0x0; } break; } } break; case Command::SeekPlay: { u32 minute = command[2] * 10 + command[3]; u32 second = command[4] * 10 + command[5]; u32 frame = command[6] * 10 + command[7]; s32 lba = minute * 60 * 75 + second * 75 + frame - 3; counter = 0; io.status = Status::Seeking; io.seeking = Status::Playing; io.latency = 11 + 112.5 * abs(position(io.sector) - position(lba)); io.sector = lba; io.sample = 0; status[1] = 0xf; status[2] = 0x0; status[3] = 0x0; status[4] = 0x0; status[5] = 0x0; status[6] = 0x0; status[7] = 0x0; status[8] = 0x0; } break; case Command::SeekPause: { u32 minute = command[2] * 10 + command[3]; u32 second = command[4] * 10 + command[5]; u32 frame = command[6] * 10 + command[7]; s32 lba = minute * 60 * 75 + second * 75 + frame - 3; counter = 0; io.status = Status::Seeking; io.seeking = Status::Paused; io.latency = 11 + 112.5 * abs(position(io.sector) - position(lba)); io.sector = lba; io.sample = 0; status[1] = 0xf; status[2] = 0x0; status[3] = 0x0; status[4] = 0x0; status[5] = 0x0; status[6] = 0x0; status[7] = 0x0; status[8] = 0x0; } break; case Command::Pause: { io.status = Status::Paused; } break; case Command::Play: { io.status = Status::Playing; } break; default: io.status = Status::CommandError; } status[0] = io.status; checksum(); statusPending = 1; } auto MCD::CDD::valid() -> bool { n4 checksum; for(u32 index : range(9)) checksum += command[index]; checksum = ~checksum; return checksum == command[9]; } auto MCD::CDD::checksum() -> void { n4 checksum; for(u32 index : range(9)) checksum += status[index]; checksum = ~checksum; status[9] = checksum; } auto MCD::CDD::insert() -> void { if(!mcd.disc || !mcd.fd) { io.status = Status::NoDisc; return; } //read TOC (table of contents) from disc lead-in u32 sectors = mcd.fd->size() / 2448; vector subchannel; subchannel.resize(sectors * 96); for(u32 sector : range(sectors)) { mcd.fd->seek(sector * 2448 + 2352); mcd.fd->read({subchannel.data() + sector * 96, 96}); } session.decode(subchannel, 96); io.status = Status::ReadingTOC; io.sector = session.leadIn.lba; io.sample = 0; io.track = 0; } auto MCD::CDD::eject() -> void { session = {}; io.status = Status::NoDisc; io.sector = 0; io.sample = 0; io.track = 0; } auto MCD::CDD::power(bool reset) -> void { irq = {}; counter = 0; dac.power(reset); io = {}; hostClockEnable = 0; statusPending = 0; for(auto& data : status) data = 0x0; for(auto& data : command) data = 0x0; insert(); checksum(); } ares-126/ares/md/mcd/debugger.cpp000066400000000000000000000031241415063341600167060ustar00rootroot00000000000000auto MCD::Debugger::load(Node::Object parent) -> void { memory.pram = parent->append("CD PRAM"); memory.pram->setSize(256_KiB << 1); memory.pram->setRead([&](u32 address) -> u8 { return mcd.pram[address >> 1].byte(!(address & 1)); }); memory.pram->setWrite([&](u32 address, u8 data) -> void { mcd.pram[address >> 1].byte(!(address & 1)) = data; }); memory.wram = parent->append("CD WRAM"); memory.wram->setSize(128_KiB << 1); memory.wram->setRead([&](u32 address) -> u8 { return mcd.wram[address >> 1].byte(!(address & 1)); }); memory.wram->setWrite([&](u32 address, u8 data) -> void { mcd.wram[address >> 1].byte(!(address & 1)) = data; }); memory.bram = parent->append("CD BRAM"); memory.bram->setSize(8_KiB); memory.bram->setRead([&](u32 address) -> u8 { return mcd.bram[address]; }); memory.bram->setWrite([&](u32 address, u8 data) -> void { mcd.bram[address] = data; }); tracer.instruction = parent->append("Instruction", "MCD"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "MCD"); } auto MCD::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(mcd.r.pc - 4)) { tracer.instruction->notify(mcd.disassembleInstruction(mcd.r.pc - 4), mcd.disassembleContext()); } } auto MCD::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/md/mcd/gpu.cpp000066400000000000000000000065061415063341600157240ustar00rootroot00000000000000//Graphics Processing Unit auto MCD::GPU::step(u32 clocks) -> void { if(!active) return; counter += clocks; while(counter >= period) { counter -= period; render(image.address, image.hdots); image.address += 8; if(!--image.vdots) { active = 0; irq.raise(); break; } } } auto MCD::GPU::read(n19 address) -> n4 { u32 lo = 12 - ((address & 3) << 2), hi = lo + 3; return mcd.wram[address >> 2].bit(lo, hi); } auto MCD::GPU::write(n19 address, n4 data) -> void { u32 lo = 12 - ((address & 3) << 2), hi = lo + 3; mcd.wram[address >> 2].bit(lo, hi) = data; } auto MCD::GPU::render(n19 address, n9 width) -> void { n4 stampShift = 4; n4 mapShift = 4 << stamp.map.size; n11 indexMask = ~0; n5 pixelOffsetMask = 0x0f; if(stamp.tile.size) { stampShift++; mapShift--; indexMask &= ~3; pixelOffsetMask |= 0x10; } n19 imageWidth = image.vcells+1 << 6; n24 mapMask = !stamp.map.size ? 0x07ffff : 0x7fffff; n24 x = mcd.wram[vector.address++] << 8; //13.3 -> 13.11 n24 y = mcd.wram[vector.address++] << 8; //13.3 -> 13.11 i16 xstep = mcd.wram[vector.address++]; i16 ystep = mcd.wram[vector.address++]; while(width--) { if(stamp.repeat) { x &= mapMask; y &= mapMask; } n4 output = 0; if(bool outside = (x | y) & ~mapMask; !outside) { auto xtrunc = x >> 11; auto ytrunc = y >> 11; auto xstamp = xtrunc >> stampShift; auto ystamp = ytrunc >> stampShift; auto mapEntry = mcd.wram[stamp.map.address + (ystamp << mapShift) + xstamp]; n11 index = mapEntry & indexMask; n1 lroll = mapEntry >> 13; //0 = 0 degrees; 1 = 90 degrees n1 hroll = mapEntry >> 14; //0 = 0 degrees; 1 = 180 degrees n1 hflip = mapEntry >> 15; if(index) { if(hflip) { xtrunc = ~xtrunc; } if(hroll) { xtrunc = ~xtrunc; ytrunc = ~ytrunc; } if(lroll) { auto t = xtrunc; xtrunc = ~ytrunc; ytrunc = t; } n5 xpixel = xtrunc & pixelOffsetMask; n5 ypixel = ytrunc & pixelOffsetMask; output = read( index << 8 | (xpixel & ~7) << stampShift | ypixel << 3 | xpixel & 7); } } n4 input = read(address); switch(mcd.io.wramPriority) { case 0: output = output; break; case 1: output = input ? input : output; break; case 2: output = output ? output : input; break; case 3: output = input; break; } write(address, output); if(!(++address & 7)) address += imageWidth - 8; x += xstep; y += ystep; } } auto MCD::GPU::start() -> void { if(mcd.io.wramMode) return; //must be in 2mbit WRAM mode active = 1; period = 5 * image.hdots; counter = 0; image.address = (image.base << 1) + image.offset; vector.address = vector.base >> 1; stamp.map.address = stamp.map.base >> 1; if(stamp.map.size == 0 && stamp.tile.size == 0) stamp.map.address &= 0x1ff00; // A9-A17 if(stamp.map.size == 0 && stamp.tile.size == 1) stamp.map.address &= 0x1ffc0; // A5-A17 if(stamp.map.size == 1 && stamp.tile.size == 0) stamp.map.address &= 0x10000; // A17 if(stamp.map.size == 1 && stamp.tile.size == 1) stamp.map.address &= 0x1c000; //A15-A17 } auto MCD::GPU::power(bool reset) -> void { irq = {}; font = {}; stamp = {}; image = {}; vector = {}; active = 0; counter = 0; period = 0; } ares-126/ares/md/mcd/io-external.cpp000066400000000000000000000062401415063341600173530ustar00rootroot00000000000000auto MCD::readExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { if(!MegaCD()) return data; address.bit(6,7) = 0; //a12040-a120ff mirrors a12000-a1203f if(address == 0xa12000) { data.bit( 0) = io.run; data.bit( 1) = io.request; data.bit( 2, 7) = Unmapped; data.bit( 8) = external.irq.pending; data.bit( 9,14) = Unmapped; //todo: hardware manual states this bit exists; software manual states that it does not data.bit(15) = external.irq.enable; } if(address == 0xa12002) { data.bit(0) =!io.wramMode ? !io.wramSwitch : +io.wramSelect; data.bit(1) =!io.wramMode ? io.wramSwitch : io.wramSwitchRequest; data.bit(2) = io.wramMode; data.bit(3, 5) = Unmapped; data.bit(6, 7) = io.pramBank; data.bit(8,15) = io.pramProtect; } if(address == 0xa12004) { debug(unusual, "[MCD::readExternalIO] address=0xa12004"); } if(address == 0xa12006) { data.byte(1) = io.vectorLevel4.byte(1); data.byte(0) = io.vectorLevel4.byte(0); } if(address == 0xa12008) { debug(unusual, "[MCD::readExternalIO] address=0xa12008"); } if(address == 0xa1200a) { debug(unusual, "[MCD::readExternalIO] address=0xa1200a"); } if(address == 0xa1200c) { data.bit( 0,11) = cdc.stopwatch; data.bit(12,15) = Unmapped; } if(address == 0xa1200e) { data.byte(0) = communication.cfs; data.byte(1) = communication.cfm; } if(address >= 0xa12010 && address <= 0xa1201f) { n3 index = address - 0xa12010 >> 1; data = communication.command[index]; } if(address >= 0xa12020 && address <= 0xa1202f) { n3 index = address - 0xa12020 >> 1; data = communication.status[index]; } return data; } auto MCD::writeExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> void { if(!MegaCD()) return; address.bit(6,7) = 0; //a12040-a120ff mirrors a12000-a1203f if(address == 0xa12000) { if(lower) { if(io.run && !data.bit(0)) power(true); io.run = data.bit(0); io.request = data.bit(1); io.halt = !io.run || io.request; } if(upper) { if(data.bit(8)) external.irq.raise(); } } if(address == 0xa12002) { if(lower) { if(data.bit(1) == 0) io.wramSwitchRequest = 1; if(data.bit(1) == 1) io.wramSwitch = 1; io.pramBank = data.bit(6,7); } if(upper) { io.pramProtect = data.bit(8,15); } } if(address == 0xa12004) { //read-only } if(address == 0xa12006) { if(upper) io.vectorLevel4.byte(1) = data.byte(1); if(lower) io.vectorLevel4.byte(0) = data.byte(0); } if(address == 0xa12008) { //read-only } if(address == 0xa1200a) { //reserved debug(unusual, "[MCD::writeExternalIO] address=0xa1200a"); } if(address == 0xa1200c) { //read-only } if(address == 0xa1200e) { if(upper) { //unconfirmed communication.cfm = data.byte(1); } } if(address >= 0xa12010 && address <= 0xa1201f) { n3 index = address - 0xa12010 >> 1; if(lower) communication.command[index].byte(0) = data.byte(0); if(upper) communication.command[index].byte(1) = data.byte(1); } if(address >= 0xa12020 && address <= 0xa1202f) { //read-only } } ares-126/ares/md/mcd/io-internal.cpp000066400000000000000000000216101415063341600173430ustar00rootroot00000000000000auto MCD::readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { address = 0xff8000 | (n9)address; if(address == 0xff8000) { data.bit(0) = 1; //peripheral ready data.bit(1,3) = Unmapped; data.bit(4,7) = 0b0000; //version# data.bit(8) = led.red; data.bit(9) = led.green; data.bit(10,15) = Unmapped; } if(address == 0xff8002) { data.bit(0) =!io.wramMode ? !io.wramSwitch : +io.wramSelect; data.bit(1) =!io.wramMode ? io.wramSwitch : io.wramSwitchRequest; data.bit(2) = io.wramMode; data.bit(3, 4) = io.wramPriority; data.bit(5, 7) = Unmapped; data.bit(8,15) = io.pramProtect; } if(address == 0xff8004) { data.bit( 0, 3) = cdc.address; data.bit( 4, 7) = Unmapped; data.bit( 8,10) = cdc.transfer.destination; data.bit(11,13) = Unmapped; data.bit(14) = cdc.transfer.ready; data.bit(15) = cdc.transfer.completed; } if(address == 0xff8006) { if(lower) { //unconfirmed data.bit(0, 7) = cdc.read(); } if(upper) { data.bit(8,15) = Unmapped; } } if(address == 0xff8008) { if(!upper || !lower) debug(unusual, "[MCD::readIO] address=0xff8008 size=byte"); data = cdc.transfer.read(); } if(address == 0xff800a) { data.bit(0,15) = cdc.transfer.address.bit(3,18); } if(address == 0xff800c) { data.bit( 0,11) = cdc.stopwatch; data.bit(12,15) = Unmapped; } if(address == 0xff800e) { data.byte(0) = communication.cfs; data.byte(1) = communication.cfm; } if(address >= 0xff8010 && address <= 0xff801f) { n3 index = address - 0xff8010 >> 1; data = communication.command[index]; } if(address >= 0xff8020 && address <= 0xff802f) { n3 index = address - 0xff8020 >> 1; data = communication.status[index]; } if(address == 0xff8030) { data.bit(0, 7) = timer.frequency; data.bit(8,15) = Unmapped; } if(address == 0xff8032) { data.bit(0) = Unmapped; data.bit(1) = gpu.irq.enable; data.bit(2) = external.irq.enable; data.bit(3) = timer.irq.enable; data.bit(4) = cdd.irq.enable; data.bit(5) = cdc.irq.enable; data.bit(6) = irq.subcode.enable; data.bit(7,15) = Unmapped; } if(address == 0xff8034) { data.bit(0,14) = Unmapped; data.bit(15) = 0; //end of fade data transfer } if(address == 0xff8036) { data.bit(0) = 0; //1 = sending command to CDD data.bit(1) = 0; //1 = sending status from CDD data.bit(2) = cdd.hostClockEnable; data.bit(3, 7) = Unmapped; data.bit(8) = cdd.session.tracks[cdd.io.track].isData(); data.bit(9,15) = Unmapped; } if(address >= 0xff8038 && address <= 0xff8041) { u32 index = address - 0xff8038; data.bit( 0, 3) = cdd.status[index | 1]; data.bit( 4, 7) = Unmapped; data.bit( 8,11) = cdd.status[index | 0]; data.bit(12,15) = Unmapped; } if(address >= 0xff8042 && address <= 0xff804b) { u32 index = address - 0xff8042; data.bit( 0, 3) = cdd.command[index | 1]; data.bit( 4, 7) = Unmapped; data.bit( 8,11) = cdd.command[index | 0]; data.bit(12,15) = Unmapped; } if(address == 0xff804c) { data.bit(0, 3) = gpu.font.color.background; data.bit(4, 7) = gpu.font.color.foreground; data.bit(8,15) = Unmapped; } if(address == 0xff804e) { data = gpu.font.data; } if(address >= 0xff8050 && address <= 0xff8057) { u32 index = 12 - (address - 0xff8050 << 1); auto foreground = gpu.font.color.foreground; auto background = gpu.font.color.background; data.bit( 0, 3) = gpu.font.data.bit(index | 0) ? foreground : background; data.bit( 4, 7) = gpu.font.data.bit(index | 1) ? foreground : background; data.bit( 8,11) = gpu.font.data.bit(index | 2) ? foreground : background; data.bit(12,15) = gpu.font.data.bit(index | 3) ? foreground : background; } if(address == 0xff8058) { data.bit( 0) = gpu.stamp.repeat; data.bit( 1) = gpu.stamp.tile.size; data.bit( 2) = gpu.stamp.map.size; data.bit( 3,14) = Unmapped; data.bit(15) = gpu.active; } if(address == 0xff805a) { data.bit(0, 6) = Unmapped; data.bit(7,15) = gpu.stamp.map.base.bit(9,17); } if(address == 0xff805c) { data.bit(0, 4) = gpu.image.vcells; data.bit(5,15) = Unmapped; } if(address == 0xff805e) { data.bit(0, 2) = Unmapped; data.bit(3,15) = gpu.image.base.bit(5,17); } if(address == 0xff8060) { data.bit(0, 5) = gpu.image.offset; data.bit(6,15) = Unmapped; } if(address == 0xff8062) { data.bit(0, 8) = gpu.image.hdots; data.bit(9,15) = Unmapped; } if(address == 0xff8064) { data.bit(0, 7) = gpu.image.vdots; data.bit(8,15) = Unmapped; } //todo: hardware manual says this register is write-only; software manual says it is readable if(address == 0xff8066) { data.bit(0) = Unmapped; data.bit(1,15) = gpu.vector.base.bit(3,17); } if(address >= 0xff8100 && address <= 0xff81ff) { debug(unusual, "[MCD::readIO] address=0x", hex(address, 6L)); } return data; } auto MCD::writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void { address = 0xff8000 | (n9)address; if(address == 0xff8000) { if(lower) { if(data.bit(0) == 0); //peripheral reset } if(upper) { led.red = data.bit(8); led.green = data.bit(9); } } if(address == 0xff8002) { if(lower) { if(io.wramSelect != data.bit(0)) io.wramSwitchRequest = 0; io.wramSelect = data.bit(0); io.wramMode = data.bit(2); io.wramPriority = data.bit(3,4); if(io.wramSelect) io.wramSwitch = 0; } } if(address == 0xff8004) { if(lower) { cdc.address = data.bit(0,3); } if(upper) { cdc.transfer.destination = data.bit(8,10); } } if(address == 0xff8006) { if(lower) { //unconfirmed cdc.write(data.byte(0)); } } if(address == 0xff8008) { //read-only } if(address == 0xff800a) { cdc.transfer.address.bit(0, 2) = 0; //alignment cdc.transfer.address.bit(3,18) = data.bit(0,15); } if(address == 0xff800c) { cdc.stopwatch = 0; } if(address == 0xff800e) { if(lower) { //unconfirmed communication.cfs = data.byte(0); } } if(address >= 0xff8010 && address <= 0xff801f) { //read-only } if(address >= 0xff8020 && address <= 0xff802f) { n3 index = address - 0xff8020 >> 1; if(lower) communication.status[index].byte(0) = data.byte(0); if(upper) communication.status[index].byte(1) = data.byte(1); } if(address == 0xff8030) { if(lower) { timer.counter = timer.frequency = data.byte(0); } } if(address == 0xff8032) { if(lower) { gpu.irq.enable = data.bit(1); external.irq.enable = data.bit(2); timer.irq.enable = data.bit(3); cdd.irq.enable = data.bit(4); cdc.irq.enable = data.bit(5); irq.subcode.enable = data.bit(6); //todo: does disabling an interrupt clear its pending status if it were triggered already? } } if(address == 0xff8034) { cdd.dac.rate = data.bit(1); cdd.dac.deemphasis = data.bit(2,3); cdd.dac.attenuator.bit(6,15) = data.bit(6,15); cdd.dac.reconfigure(); } if(address == 0xff8036) { if(lower) { if(!cdd.hostClockEnable && data.bit(2)) cdd.irq.raise(); cdd.hostClockEnable = data.bit(2); cdd.counter = 0; } } if(address >= 0xff8038 && address <= 0xff8041) { //read-only debug(unusual, "[MCD::writeIO] address=0x", hex(address, 6L)); } if(address >= 0xff8042 && address <= 0xff804b) { u32 index = address - 0xff8042; if(lower) cdd.command[index | 1] = data.bit(0, 3); if(upper) cdd.command[index | 0] = data.bit(8,11); if(lower && (index | 1) == 9) { //unconfirmed cdd.process(); } } if(address == 0xff804c) { if(lower) { gpu.font.color.background = data.bit(0,3); gpu.font.color.foreground = data.bit(4,7); } } if(address == 0xff804e) { if(lower) gpu.font.data.byte(0) = data.byte(0); if(upper) gpu.font.data.byte(1) = data.byte(1); } if(address >= 0xff8050 && address <= 0xff8057) { //read-only } if(address == 0xff8058) { if(lower) { gpu.stamp.repeat = data.bit(0); gpu.stamp.tile.size = data.bit(1); gpu.stamp.map.size = data.bit(2); } } if(address == 0xff805a) { gpu.stamp.map.base.bit(7,17) = data.bit(5,15); } if(address == 0xff805c) { gpu.image.vcells = data.bit(0,4); } if(address == 0xff805e) { gpu.image.base.bit(5,17) = data.bit(3,15); } if(address == 0xff8060) { gpu.image.offset = data.bit(0,5); } if(address == 0xff8062) { gpu.image.hdots = data.bit(0,8); } if(address == 0xff8064) { gpu.image.vdots = data.bit(0,7); } if(address == 0xff8066) { gpu.vector.base.bit(3,17) = data.bit(1,15); gpu.start(); } if(address >= 0xff8100 && address <= 0xff81ff) { debug(unusual, "[MCD::writeIO] address=0x", hex(address, 6L)); } } ares-126/ares/md/mcd/irq.cpp000066400000000000000000000011001415063341600157050ustar00rootroot00000000000000auto MCD::IRQ::raise() -> bool { if(pending) return false; pending = enable; synchronize(); return true; } auto MCD::IRQ::lower() -> bool { if(!pending) return false; pending = 0; synchronize(); return true; } auto MCD::IRQ::synchronize() -> void { mcd.irq.pending |= mcd.irq.reset.pending; mcd.irq.pending |= mcd.gpu.irq.pending; mcd.irq.pending |= mcd.external.irq.pending; mcd.irq.pending |= mcd.timer.irq.pending; mcd.irq.pending |= mcd.cdd.irq.pending; mcd.irq.pending |= mcd.cdc.irq.pending; mcd.irq.pending |= mcd.irq.subcode.pending; } ares-126/ares/md/mcd/mcd.cpp000066400000000000000000000104101415063341600156610ustar00rootroot00000000000000#include namespace ares::MegaDrive { static n16 Unmapped = 0; MCD mcd; #include "bus-internal.cpp" #include "bus-external.cpp" #include "io-internal.cpp" #include "io-external.cpp" #include "irq.cpp" #include "cdc.cpp" #include "cdc-transfer.cpp" #include "cdd.cpp" #include "cdd-dac.cpp" #include "timer.cpp" #include "gpu.cpp" #include "pcm.cpp" #include "debugger.cpp" #include "serialization.cpp" auto MCD::load(Node::Object parent) -> void { node = parent->append("Mega CD"); tray = node->append("Disc Tray"); tray->setFamily("Mega CD"); tray->setType("Compact Disc"); tray->setHotSwappable(true); tray->setAllocate([&](auto name) { return allocate(tray); }); tray->setConnect([&] { return connect(); }); tray->setDisconnect([&] { return disconnect(); }); bios.allocate (128_KiB >> 1); pram.allocate (512_KiB >> 1); wram.allocate (256_KiB >> 1); bram.allocate ( 8_KiB >> 0); cdc.ram.allocate( 16_KiB >> 1); cdd.load(node); pcm.load(node); debugger.load(node); if(auto fp = system.pak->read("bios.rom")) { for(auto address : range(bios.size())) bios.program(address, fp->readm(2)); } } auto MCD::unload() -> void { if(!node) return; disconnect(); debugger = {}; cdd.unload(node); pcm.unload(node); bios.reset(); pram.reset(); wram.reset(); bram.reset(); cdc.ram.reset(); tray.reset(); node.reset(); } auto MCD::allocate(Node::Port parent) -> Node::Peripheral { return disc = parent->append("Mega CD Disc"); } auto MCD::connect() -> void { if(!disc->setPak(pak = platform->pak(disc))) return; information = {}; information.title = pak->attribute("title"); fd = pak->read("cd.rom"); if(!fd) return disconnect(); cdd.insert(); if(auto fp = system.pak->read("backup.ram")) { bram.load(fp); } } auto MCD::disconnect() -> void { if(!disc) return; save(); cdd.eject(); disc.reset(); fd.reset(); pak.reset(); information = {}; } auto MCD::save() -> void { if(auto fp = system.pak->write("backup.ram")) { bram.save(fp); } } auto MCD::main() -> void { if(io.halt) return wait(16); if(irq.pending) { if(1 > r.i && gpu.irq.lower()) { debugger.interrupt("GPU"); return interrupt(Vector::Level1, 1); } if(2 > r.i && external.irq.lower()) { debugger.interrupt("External"); return interrupt(Vector::Level2, 2); } if(3 > r.i && timer.irq.lower()) { debugger.interrupt("Timer"); return interrupt(Vector::Level3, 3); } if(4 > r.i && cdd.irq.lower()) { debugger.interrupt("CDD"); return interrupt(Vector::Level4, 4); } if(5 > r.i && cdc.irq.lower()) { debugger.interrupt("CDC"); return interrupt(Vector::Level5, 5); } if(6 > r.i && irq.subcode.lower()) { debugger.interrupt("IRQ"); return interrupt(Vector::Level6, 6); } if(irq.reset.lower()) { debugger.interrupt("Reset"); r.a[7] = read(1, 1, 0) << 16 | read(1, 1, 2) << 0; r.pc = read(1, 1, 4) << 16 | read(1, 1, 6) << 0; prefetch(); prefetch(); return; } } debugger.instruction(); instruction(); } auto MCD::step(u32 clocks) -> void { gpu.step(clocks); counter.divider += clocks; while(counter.divider >= 384) { counter.divider -= 384; cdc.clock(); cdd.clock(); timer.clock(); pcm.clock(); } counter.dma += clocks; while(counter.dma >= 6) { counter.dma -= 6; cdc.transfer.dma(); } counter.pcm += clocks; while(counter.pcm >= frequency() / 44100.0) { counter.pcm -= frequency() / 44100.0; cdd.sample(); } Thread::step(clocks); } auto MCD::idle(u32 clocks) -> void { step(clocks); } auto MCD::wait(u32 clocks) -> void { step(clocks); Thread::synchronize(cpu); } auto MCD::power(bool reset) -> void { M68000::power(); Thread::create(12'500'000, {&MCD::main, this}); counter = {}; io = {}; led = {}; irq = {}; external = {}; communication = {}; cdc.power(reset); cdd.power(reset); timer.power(reset); gpu.power(reset); pcm.power(reset); irq.reset.enable = 1; irq.reset.raise(); io.vectorLevel4.byte(3) = bios[0x70 >> 1].byte(1); io.vectorLevel4.byte(2) = bios[0x70 >> 1].byte(0); io.vectorLevel4.byte(1) = ~0; io.vectorLevel4.byte(0) = ~0; } } ares-126/ares/md/mcd/mcd.hpp000066400000000000000000000252601415063341600156770ustar00rootroot00000000000000//Mega CD struct MCD : M68000, Thread { Node::Object node; Node::Port tray; Node::Peripheral disc; VFS::Pak pak; VFS::File fd; Memory::Readable bios; //BIOS ROM Memory::Writable pram; //program RAM Memory::Writable wram; //work RAM Memory::Writable bram; //backup RAM struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory pram; Node::Debugger::Memory wram; Node::Debugger::Memory bram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto title() const -> string { return information.title; } //mcd.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto idle(u32 clocks) -> void override; auto wait(u32 clocks) -> void override; auto power(bool reset) -> void; //bus-internal.cpp auto read(n1 upper, n1 lower, n24 address, n16 data = 0) -> n16 override; auto write(n1 upper, n1 lower, n24 address, n16 data) -> void override; //bus-external.cpp auto readExternal(n1 upper, n1 lower, n22 address, n16 data) -> n16; auto writeExternal(n1 upper, n1 lower, n22 address, n16 data) -> void; //io-internal.cpp auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void; //io-external.cpp auto readExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeExternalIO(n1 upper, n1 lower, n24 address, n16 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Information { string title; } information; struct Counter { n16 divider; n16 dma; f64 pcm = 0.0; } counter; struct IO { n1 run; n1 request; n1 halt = 1; n16 wramLatch; n1 wramMode; //MODE: 0 = 2mbit mode, 1 = 1mbit mode n1 wramSwitchRequest; n1 wramSwitch; n1 wramSelect; n2 wramPriority; n2 pramBank; n8 pramProtect; //$000070 n32 vectorLevel4; } io; struct LED { n1 red; n1 green; } led; struct IRQ { //irq.cpp auto raise() -> bool; auto lower() -> bool; static auto synchronize() -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 enable; n1 pending; }; struct IRQs { n1 pending; IRQ reset; IRQ subcode; } irq; struct External { IRQ irq; } external; struct Communcation { n8 cfm; n8 cfs; n16 command[8]; n16 status [8]; } communication; struct CDC { //cdc.cpp auto poll() -> void; auto clock() -> void; auto decode(s32 sector) -> void; auto read() -> n8; auto write(n8 data) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; Memory::Writable ram; n4 address; n12 stopwatch; struct IRQ : MCD::IRQ { MCD::IRQ decoder; //DECEIN + DECI MCD::IRQ transfer; //DTEIEN + DTEI MCD::IRQ command; //CMDIEN + CMDI } irq; struct Command { n8 fifo[8]; //COMIN n3 read; n3 write; n1 empty = 1; } command; struct Status { n8 fifo[8]; //SBOUT n3 read; n3 write; n1 empty = 1; n1 enable; //SOUTEN n1 active; //STEN n1 busy; //STBSY n1 wait; //STWAI } status; struct Transfer { //cdc-transfer.cpp auto dma() -> void; auto read() -> n16; auto start() -> void; auto complete() -> void; auto stop() -> void; //serialization.cpp auto serialize(serializer&) -> void; n3 destination; n19 address; n16 source; n16 target; n16 pointer; n12 length; n1 enable; //DOUTEN n1 active; //DTEN n1 busy; //DTBSY n1 wait; //DTWAI n1 ready; //DSR n1 completed; //EDT } transfer; enum : u32 { Mode1 = 0, Mode2 = 1 }; enum : u32 { Form1 = 0, Form2 = 1 }; struct Decoder { n1 enable; //DECEN n1 mode; //MODE n1 form; //FORM n1 valid; //!VALST } decoder; struct Header { n8 minute; n8 second; n8 frame; n8 mode; } header; struct Subheader { n8 file; n8 channel; n8 submode; n8 coding; } subheader; struct Control { n1 head; //SHDREN: 0 = read header, 1 = read subheader n1 mode; //MODE n1 form; //FORM n1 commandBreak; //CMDBK n1 modeByteCheck; //MBCKRQ n1 erasureRequest; //ERAMRQ n1 writeRequest; //WRRQ n1 pCodeCorrection; //PRQ n1 qCodeCorrection; //QRQ n1 autoCorrection; //AUTOQ n1 errorCorrection; //E01RQ n1 edcCorrection; //EDCRQ n1 correctionWrite; //COWREN n1 descramble; //DSCREN n1 syncDetection; //SYDEN n1 syncInterrupt; //SYIEN n1 erasureCorrection; //ERAMSL n1 statusTrigger; //STENTRG n1 statusControl; //STENCTL } control; } cdc; struct CDD { struct Status { enum : u32 { Stopped = 0x0, //motor disabled Playing = 0x1, //data or audio playback in progress Seeking = 0x2, //move to specified time Scanning = 0x3, //skipping to a specified track Paused = 0x4, //paused at a specific time DoorOpened = 0x5, //drive tray is open ChecksumError = 0x6, //invalid communication checksum CommandError = 0x7, //missing command FunctionError = 0x8, //error during command execution ReadingTOC = 0x9, //reading table of contents Tracking = 0xa, //currently skipping tracks NoDisc = 0xb, //no disc in tray or cannot focus LeadOut = 0xc, //paused in the lead-out area of the disc LeadIn = 0xd, //paused in the lead-in area of the disc TrayMoving = 0xe, //drive tray is moving in response to open/close commands Test = 0xf, //in test mode };}; struct Command { enum : u32 { Idle = 0x0, //no operation Stop = 0x1, //stop motor Request = 0x2, //change report type SeekPlay = 0x3, //read ROM data SeekPause = 0x4, //seek to a specified location Pause = 0x6, //pause the drive Play = 0x7, //start playing from the current location Forward = 0x8, //forward skip and playback Reverse = 0x9, //reverse skip and playback TrackSkip = 0xa, //start track skipping TrackCue = 0xb, //start track cueing DoorClose = 0xc, //close the door DoorOpen = 0xd, //open the door };}; struct Request { enum : u32 { AbsoluteTime = 0x0, RelativeTime = 0x1, TrackInformation = 0x2, DiscCompletionTime = 0x3, DiscTracks = 0x4, //start/end track numbers TrackStartTime = 0x5, //start time of specific track ErrorInformation = 0x6, SubcodeError = 0xe, NotReady = 0xf, //not ready to comply with the current command };}; //cdd.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto clock() -> void; auto advance() -> void; auto sample() -> void; auto position(s32 sector) -> double; auto process() -> void; auto valid() -> bool; auto checksum() -> void; auto insert() -> void; auto eject() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; CD::Session session; IRQ irq; n16 counter; struct DAC { Node::Audio::Stream stream; //cdd-dac.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto sample(i16 left, i16 right) -> void; auto reconfigure() -> void; auto power(bool reset) -> void; n1 rate; //0 = normal, 1 = double n2 deemphasis; //0 = off, 1 = 44100hz, 2 = 32000hz, 3 = 48000hz n16 attenuator; //only d6-d15 are used for the coefficient n16 attenuated; //current coefficent } dac; struct IO { n4 status = Status::NoDisc; n4 seeking; //status after seeking (Playing or Paused) n16 latency; i32 sector; //current frame# n16 sample; //current audio sample# within current frame n7 track; //current track# } io; n1 hostClockEnable; n1 statusPending; n4 status [10]; n4 command[10]; } cdd; struct Timer { //timer.cpp auto clock() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; IRQ irq; n8 frequency; n8 counter; } timer; struct GPU { //gpu.cpp auto step(u32 clocks) -> void; auto read(n19 address) -> n4; auto write(n19 address, n4 data) -> void; auto render(n19 address, n9 width) -> void; auto start() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; IRQ irq; struct Font { struct Color { n4 background; n4 foreground; } color; n16 data; } font; struct Stamp { n1 repeat; struct Tile { n1 size; //0 = 16x16, 1 = 32x32 } tile; struct Map { n1 size; //0 = 1x1, 1 = 16x16 n18 base; n19 address; } map; } stamp; struct Image { n18 base; n6 offset; n5 vcells; n8 vdots; n9 hdots; n19 address; } image; struct Vector { n18 base; n17 address; } vector; n1 active; n32 counter; n32 period; } gpu; struct PCM { Node::Audio::Stream stream; Memory::Writable ram; //pcm.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto clock() -> void; auto read(n13 address, n8 data) -> n8; auto write(n13 address, n8 data) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 enable; n4 bank; n3 channel; } io; struct Channel { //serialization.cpp auto serialize(serializer&) -> void; n1 enable; n8 envelope; n8 pan = 0xff; n16 step; n16 loop; n8 start; n27 address; } channels[8]; } pcm; }; extern MCD mcd; ares-126/ares/md/mcd/pcm.cpp000066400000000000000000000053261415063341600157070ustar00rootroot00000000000000//Ricoh RF5C164 auto MCD::PCM::load(Node::Object parent) -> void { stream = parent->append("PCM"); stream->setChannels(2); stream->setFrequency(12'500'000 / 384.0); ram.allocate(64_KiB); } auto MCD::PCM::unload(Node::Object parent) -> void { parent->remove(stream); stream.reset(); ram.reset(); } auto MCD::PCM::clock() -> void { s32 left = 0; s32 right = 0; if(io.enable) for(auto& channel : channels) { if(!channel.enable) continue; s32 data = ram[channel.address >> 11]; if(data == 0xff) { //loop? channel.address = channel.loop << 11; data = ram[channel.loop]; if(data == 0xff) continue; //infinite loop; does not output any sound } channel.address += channel.step; if(data & 0x80) { data = +(data & 0x7f); } else { data = -(data & 0x7f); } left += data * channel.envelope * n4(channel.pan >> 0) >> 5; right += data * channel.envelope * n4(channel.pan >> 4) >> 5; } //clamp to 10-bit DAC output rate left = sclamp<16>(left ) >> 2 & ~15; right = sclamp<16>(right) >> 2 & ~15; stream->frame(left / 32768.0, right / 32768.0); } auto MCD::PCM::read(n13 address, n8 data) -> n8 { if(address >= 0x1000 && address <= 0x1fff) { data = ram[io.bank << 12 | (n12)address]; return data; } if(address >= 0x0010 && address <= 0x001f) { auto& channel = channels[address >> 1 & 7]; n16 offset = channel.address >> 11; data = offset.byte(address & 1); return data; } return data = 0xff; } auto MCD::PCM::write(n13 address, n8 data) -> void { if(address >= 0x1000 && address <= 0x1fff) { ram[io.bank << 12 | (n12)address] = data; return; } auto& channel = channels[io.channel]; switch(address) { case 0x0: { //ENV channel.envelope = data; } break; case 0x1: { //PAN channel.pan = data; } break; case 0x2: { //FDL channel.step.byte(0) = data; } break; case 0x3: { //FDH channel.step.byte(1) = data; } break; case 0x4: { //LSL channel.loop.byte(0) = data; } break; case 0x5: { //LSH channel.loop.byte(1) = data; } break; case 0x6: { //ST channel.start = data; if(!channel.enable) channel.address = channel.start << 8 << 11; } break; case 0x7: { //CTRL if(data.bit(6)) { io.channel = data.bit(0,2); } else { io.bank = data.bit(0,3); } io.enable = data.bit(7); } break; case 0x8: { //ONOFF for(auto& channel : channels) { channel.enable = !(data & 1); data >>= 1; if(!channel.enable) channel.address = channel.start << 8 << 11; } } break; } } auto MCD::PCM::power(bool reset) -> void { ram.fill(0x00); io = {}; for(auto& channel : channels) channel = {}; } ares-126/ares/md/mcd/serialization.cpp000066400000000000000000000063771415063341600200140ustar00rootroot00000000000000auto MCD::serialize(serializer& s) -> void { M68000::serialize(s); Thread::serialize(s); s(pram); s(wram); s(bram); s(counter.divider); s(counter.dma); s(counter.pcm); s(io.run); s(io.request); s(io.halt); s(io.wramLatch); s(io.wramMode); s(io.wramSwitchRequest); s(io.wramSwitch); s(io.wramSelect); s(io.wramPriority); s(io.pramBank); s(io.pramProtect); s(io.vectorLevel4); s(led.red); s(led.green); s(irq.pending); s(irq.reset); s(irq.subcode); s(external.irq); s(communication.cfm); s(communication.cfs); s(communication.command); s(communication.status); s(cdc); s(cdd); s(timer); s(gpu); s(pcm); } auto MCD::IRQ::serialize(serializer& s) -> void { s(enable); s(pending); } auto MCD::CDC::serialize(serializer& s) -> void { s(ram); s(address); s(stopwatch); s(irq.decoder); s(irq.transfer); s(irq.command); s(command.fifo); s(command.read); s(command.write); s(command.empty); s(status.fifo); s(status.read); s(status.write); s(status.empty); s(status.enable); s(status.active); s(status.busy); s(status.wait); s(transfer); s(decoder.enable); s(decoder.mode); s(decoder.form); s(decoder.valid); s(header.minute); s(header.second); s(header.frame); s(header.mode); s(subheader.file); s(subheader.channel); s(subheader.submode); s(subheader.coding); s(control.head); s(control.mode); s(control.form); s(control.commandBreak); s(control.modeByteCheck); s(control.erasureRequest); s(control.writeRequest); s(control.pCodeCorrection); s(control.qCodeCorrection); s(control.autoCorrection); s(control.errorCorrection); s(control.edcCorrection); s(control.correctionWrite); s(control.descramble); s(control.syncDetection); s(control.syncInterrupt); s(control.erasureCorrection); s(control.statusTrigger); s(control.statusControl); } auto MCD::CDC::Transfer::serialize(serializer& s) -> void { s(destination); s(address); s(source); s(target); s(pointer); s(length); s(enable); s(active); s(busy); s(wait); s(ready); s(completed); } auto MCD::CDD::serialize(serializer& s) -> void { s(irq); s(counter); s(dac.rate); s(dac.deemphasis); s(dac.attenuator); s(dac.attenuated); dac.reconfigure(); s(io.status); s(io.seeking); s(io.latency); s(io.sector); s(io.sample); s(io.track); s(hostClockEnable); s(statusPending); s(status); s(command); } auto MCD::Timer::serialize(serializer& s) -> void { s(irq); s(frequency); s(counter); } auto MCD::GPU::serialize(serializer& s) -> void { s(irq); s(font.color.background); s(font.color.foreground); s(font.data); s(stamp.repeat); s(stamp.tile.size); s(stamp.map.size); s(stamp.map.base); s(stamp.map.address); s(image.base); s(image.offset); s(image.vcells); s(image.vdots); s(image.hdots); s(image.address); s(vector.base); s(vector.address); s(active); s(counter); s(period); } auto MCD::PCM::serialize(serializer& s) -> void { s(ram); s(io.enable); s(io.bank); s(io.channel); for(auto& channel : channels) s(channel); } auto MCD::PCM::Channel::serialize(serializer& s) -> void { s(enable); s(envelope); s(pan); s(step); s(loop); s(start); s(address); } ares-126/ares/md/mcd/timer.cpp000066400000000000000000000003171415063341600162430ustar00rootroot00000000000000auto MCD::Timer::clock() -> void { if(frequency && !--counter) { counter = frequency; irq.raise(); } } auto MCD::Timer::power(bool reset) -> void { irq = {}; frequency = 0; counter = 0; } ares-126/ares/md/md.hpp000066400000000000000000000022501415063341600147630ustar00rootroot00000000000000#pragma once //started: 2016-07-08 #include #include #include #include #include #include #include #include namespace ares::MegaDrive { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; enum : u32 { Byte = 0, Word = 1, }; struct Region { inline static auto NTSC() -> bool; inline static auto NTSCJ() -> bool; inline static auto NTSCU() -> bool; inline static auto PAL() -> bool; }; inline static auto Mega32X() -> bool; inline static auto MegaCD() -> bool; #include #include #include #include #include #include #include #include #include #include #include } ares-126/ares/md/opn2/000077500000000000000000000000001415063341600145315ustar00rootroot00000000000000ares-126/ares/md/opn2/opn2.cpp000066400000000000000000000015441415063341600161170ustar00rootroot00000000000000#include namespace ares::MegaDrive { OPN2 opn2; #include "serialization.cpp" auto OPN2::load(Node::Object parent) -> void { node = parent->append("YM2612"); stream = node->append("YM2612"); stream->setChannels(2); stream->setFrequency(system.frequency() / 7.0 / 144.0); stream->addHighPassFilter( 20.0, 1); stream->addLowPassFilter (2840.0, 1); } auto OPN2::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto OPN2::main() -> void { step(144); auto samples = YM2612::clock(); stream->frame(samples[0] / 32768.0, samples[1] / 32768.0); } auto OPN2::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu, apu); } auto OPN2::power(bool reset) -> void { YM2612::power(); Thread::create(system.frequency() / 7.0, {&OPN2::main, this}); } } ares-126/ares/md/opn2/opn2.hpp000066400000000000000000000005351415063341600161230ustar00rootroot00000000000000//Yamaha YM2612 struct OPN2 : YM2612, Thread { Node::Object node; Node::Audio::Stream stream; //opn2.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; }; extern OPN2 opn2; ares-126/ares/md/opn2/serialization.cpp000066400000000000000000000001401415063341600201050ustar00rootroot00000000000000auto OPN2::serialize(serializer& s) -> void { YM2612::serialize(s); Thread::serialize(s); } ares-126/ares/md/system/000077500000000000000000000000001415063341600151775ustar00rootroot00000000000000ares-126/ares/md/system/controls.cpp000066400000000000000000000003541415063341600175500ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); reset = node->append("Reset"); } auto System::Controls::poll() -> void { platform->input(reset); } ares-126/ares/md/system/serialization.cpp000066400000000000000000000021701415063341600205600ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(/* reset = */ false); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cartridge); if(Mega32X()) s(m32x); if(MegaCD()) s(mcd); s(bus); s(cpu); s(apu); s(vdp); s(opn2); s(controllerPort1); s(controllerPort2); s(extensionPort); } ares-126/ares/md/system/system.cpp000066400000000000000000000104331415063341600172300ustar00rootroot00000000000000#include namespace ares::MegaDrive { auto enumerate() -> vector { return { //Mega Drive "[Sega] Mega Drive (NTSC-J)", "[Sega] Mega Drive (NTSC-U)", "[Sega] Mega Drive (PAL)", //Mega 32X "[Sega] Mega 32X (NTSC-J)", "[Sega] Mega 32X (NTSC-U)", "[Sega] Mega 32X (PAL)", //Mega CD "[Sega] Mega CD (NTSC-J)", "[Sega] Mega CD (NTSC-U)", "[Sega] Mega CD (PAL)", //Mega CD 32X "[Sega] Mega CD 32X (NTSC-J)", "[Sega] Mega CD 32X (NTSC-U)", "[Sega] Mega CD 32X (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Random random; Scheduler scheduler; System system; #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(mcd.node && (!cartridge.node || !cartridge.bootable())) { return mcd.title(); } if(cartridge.node && cartridge.bootable()) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); auto reset = controls.reset->value(); controls.poll(); if(!reset && controls.reset->value()) power(true); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.match("[Sega] Mega Drive (*)")) { information.name = "Mega Drive"; information.mega32X = 0; information.megaCD = 0; cpu.minCyclesBetweenSyncs = 4; // sync approx every 7 pixels } if(name.match("[Sega] Mega 32X (*)")) { information.name = "Mega Drive"; information.mega32X = 1; information.megaCD = 0; cpu.minCyclesBetweenSyncs = 15; // sync approx every 25-26 pixels } if(name.match("[Sega] Mega CD (*)")) { information.name = "Mega Drive"; information.mega32X = 0; information.megaCD = 1; cpu.minCyclesBetweenSyncs = 4; // sync approx every 7 pixels } if(name.match("[Sega] Mega CD 32X (*)")) { information.name = "Mega Drive"; information.mega32X = 1; information.megaCD = 1; cpu.minCyclesBetweenSyncs = 40; // sync approx every 70 pixels } if(name.find("NTSC-J")) { information.region = Region::NTSCJ; information.frequency = Constants::Colorburst::NTSC * 15.0; } if(name.find("NTSC-U")) { information.region = Region::NTSCU; information.frequency = Constants::Colorburst::NTSC * 15.0; } if(name.find("PAL")) { information.region = Region::PAL; information.frequency = Constants::Colorburst::PAL * 12.0; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; tmss = node->append("TMSS", false); scheduler.reset(); controls.load(node); bus.load(node); cpu.load(node); apu.load(node); vdp.load(node); opn2.load(node); cartridgeSlot.load(node); if(Mega32X()) m32x.load(node); if(MegaCD()) mcd.load(node); controllerPort1.load(node); controllerPort2.load(node); extensionPort.load(node); return true; } auto System::unload() -> void { if(!node) return; save(); bus.unload(); cpu.unload(); apu.unload(); vdp.unload(); opn2.unload(); if(Mega32X()) m32x.unload(); if(MegaCD()) mcd.unload(); cartridgeSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); extensionPort.unload(); pak.reset(); node.reset(); } auto System::save() -> void { if(!node) return; cartridge.save(); if(Mega32X()) m32x.save(); if(MegaCD()) mcd.save(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); random.entropy(Random::Entropy::None); cartridge.power(reset); if(Mega32X()) m32x.power(reset); if(MegaCD()) mcd.power(reset); bus.power(reset); cpu.power(reset); apu.power(reset); //apu.power() calls opn2.power() vdp.power(reset); //vdp.power() calls vdp.psg.power() controllerPort1.power(reset); controllerPort2.power(reset); extensionPort.power(reset); scheduler.power(cpu); } } ares-126/ares/md/system/system.hpp000066400000000000000000000032451415063341600172400ustar00rootroot00000000000000extern Random random; struct System { Node::System node; Node::Setting::Boolean tmss; VFS::Pak pak; struct Controls { Node::Object node; Node::Input::Button reset; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; } controls; enum class Region : u32 { NTSCJ, NTSCU, PAL }; auto name() const -> string { return information.name; } auto region() const -> Region { return information.region; } auto mega32X() const -> bool { return information.mega32X; } auto megaCD() const -> bool { return information.megaCD; } auto frequency() const -> double { return information.frequency; } auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Mega Drive"; Region region = Region::NTSCJ; bool mega32X = false; bool megaCD = false; double frequency = Constants::Colorburst::NTSC * 15.0; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Region::NTSC() -> bool { return system.region() != System::Region::PAL; } auto Region::NTSCJ() -> bool { return system.region() == System::Region::NTSCJ; } auto Region::NTSCU() -> bool { return system.region() == System::Region::NTSCU; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } auto Mega32X() -> bool { return system.mega32X(); } auto MegaCD() -> bool { return system.megaCD(); } ares-126/ares/md/vdp-performance/000077500000000000000000000000001415063341600167435ustar00rootroot00000000000000ares-126/ares/md/vdp-performance/background.cpp000066400000000000000000000104571415063341600215750ustar00rootroot00000000000000auto VDP::Background::renderScreen(u32 from, u32 to) -> void { u32 nametableWidth = 32 * (1 + io.nametableWidth); u32 nametableWidthMask = nametableWidth - 1; u32 nametableHeightMask = 32 * (1 + io.nametableHeight) - 1; static const u32 mask[] = {0u, 7u, ~7u, ~0u}; n15 scrollAddress = io.horizontalScrollAddress; scrollAddress += (vdp.state.vcounter & mask[io.horizontalScrollMode]) << 1; u32 x = 0 - vdp.vram.memory[scrollAddress + (id == ID::PlaneB)]; bool interlace = vdp.io.interlaceMode == 3; u32 tileShift = interlace ? 7 : 6; auto vsram = &vdp.vsram.memory[id == ID::PlaneB]; u32 y = vdp.state.vcounter; if(interlace) y = y << 1 | vdp.state.field; y += vdp.vsram.memory[id == ID::PlaneB]; u32 w = from; u32 tileX = x >> 3 & nametableWidthMask; u32 tileY = y >> 3 + interlace & nametableHeightMask; u32 tileY_x_width = tileY * nametableWidth; u32 maskY = interlace ? 15 : 7; u32 address = io.nametableAddress + (tileY_x_width + tileX & 0x0fff); u32 tileAttributes = vdp.vram.memory[address & 0x7fff]; u32 flipX = tileAttributes & 0x0800 ? 7 : 0; u32 flipY = tileAttributes & 0x1000 ? maskY : 0; u32 pixelY = y & maskY ^ flipY; auto tileData = &vdp.vram.pixels[(tileAttributes << tileShift) + (pixelY << 3) + (x & 7 ^ flipX) & 0x1ffff]; s32 incrementX = flipX ? -1 : +1; while(w < to) { pixels[w].color = *tileData ? tileAttributes >> 9 & 0x30 | *tileData : 0; pixels[w].priority = tileAttributes >> 15; tileData += incrementX; if((w++ & 15) == 15 && io.verticalScrollMode) { y = vdp.state.vcounter; if(interlace) y = y << 1 | vdp.state.field; y += vsram[w >> 4 << 1]; if((x++ & 7) == 7) tileX = x >> 3 & nametableWidthMask; tileY = y >> 3 + interlace & nametableHeightMask; tileY_x_width = tileY * nametableWidth; pixelY = y & maskY; address = io.nametableAddress + (tileY_x_width + tileX & 0x0fff); tileAttributes = vdp.vram.memory[address & 0x7fff]; flipX = tileAttributes & 0x0800 ? 7 : 0; flipY = tileAttributes & 0x1000 ? maskY : 0; pixelY = y & maskY ^ flipY; tileData = &vdp.vram.pixels[(tileAttributes << tileShift) + (pixelY << 3) + (x & 7 ^ flipX) & 0x1ffff]; incrementX = flipX ? -1 : +1; } else if((x++ & 7) == 7) { tileX = x >> 3 & nametableWidthMask; address = io.nametableAddress + (tileY_x_width + tileX & 0x0fff); tileAttributes = vdp.vram.memory[address & 0x7fff]; flipX = tileAttributes & 0x0800 ? 7 : 0; flipY = tileAttributes & 0x1000 ? maskY : 0; pixelY = y & maskY ^ flipY; tileData = &vdp.vram.pixels[(tileAttributes << tileShift) + (pixelY << 3) + (x & 7 ^ flipX) & 0x1ffff]; incrementX = flipX ? -1 : +1; } } } auto VDP::Background::renderWindow(u32 from, u32 to) -> void { bool interlace = vdp.io.interlaceMode == 3; u32 tileShift = interlace ? 7 : 6; u32 y = vdp.state.vcounter; if(interlace) y = y << 1 | vdp.state.field; u32 nametableAddress = io.nametableAddress & (vdp.io.displayWidth ? ~0x0400 : ~0); u32 widthSize = 32 << (bool)vdp.io.displayWidth; u32 widthMask = widthSize - 1; u32 x = from; u32 tileX = x >> 3 & widthMask; u32 tileY = y >> 3 + interlace & 31; u32 tileY_x_width = tileY * widthSize; u32 maskY = interlace ? 15 : 7; u32 address = nametableAddress + (tileY_x_width + tileX & 0x0fff); u32 tileAttributes = vdp.vram.memory[address & 0x7fff]; u32 flipX = tileAttributes & 0x0800 ? 7 : 0; u32 flipY = tileAttributes & 0x1000 ? maskY : 0; u32 pixelY = y & maskY ^ flipY; auto tileData = &vdp.vram.pixels[(tileAttributes << tileShift) + (pixelY << 3) + (x & 7 ^ flipX) & 0x1ffff]; s32 incrementX = flipX ? -1 : +1; while(x < to) { vdp.planeA.pixels[x].color = *tileData ? tileAttributes >> 9 & 0x30 | *tileData : 0; vdp.planeA.pixels[x].priority = tileAttributes >> 15; tileData += incrementX; if((x++ & 7) == 7) { tileX = x >> 3 & widthMask; address = nametableAddress + (tileY_x_width + tileX & 0x0fff); tileAttributes = vdp.vram.memory[address & 0x7fff]; flipX = tileAttributes & 0x0800 ? 7 : 0; flipY = tileAttributes & 0x1000 ? maskY : 0; pixelY = y & maskY ^ flipY; tileData = &vdp.vram.pixels[(tileAttributes << tileShift) + (pixelY << 3) + (x & 7 ^ flipX) & 0x1ffff]; incrementX = flipX ? -1 : +1; } } } ares-126/ares/md/vdp-performance/color.cpp000066400000000000000000000016441415063341600205720ustar00rootroot00000000000000auto VDP::color(n32 color) -> n64 { //Mega Drive if(color < (1 << 15)) { n32 R = color.bit( 0, 2); n32 G = color.bit( 3, 5); n32 B = color.bit( 6, 8); n32 M = color.bit( 9,10); n32 Y = color.bit(11); u32 lookup[4][8] = { { 0, 29, 52, 70, 87, 101, 116, 130}, //shadow { 0, 52, 87, 116, 144, 172, 206, 255}, //normal {130, 144, 158, 172, 187, 206, 228, 255}, //highlight {}, //unused }; n64 r = image::normalize(lookup[M][R], 8, 16); n64 g = image::normalize(lookup[M][G], 8, 16); n64 b = image::normalize(lookup[M][B], 8, 16); return r << 32 | g << 16 | b << 0; } //Mega 32X else { n32 R = color.bit( 0, 4); n32 G = color.bit( 5, 9); n32 B = color.bit(10,14); n64 r = image::normalize(R, 5, 16); n64 g = image::normalize(G, 5, 16); n64 b = image::normalize(B, 5, 16); return r << 32 | g << 16 | b << 0; } } ares-126/ares/md/vdp-performance/debugger.cpp000066400000000000000000000022651415063341600212400ustar00rootroot00000000000000auto VDP::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("VDP VRAM"); memory.vram->setSize(32_KiB << 1); memory.vram->setRead([&](u32 address) -> u8 { return vdp.vram.memory[n15(address >> 1)].byte(!(address & 1)); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { vdp.vram.memory[n15(address >> 1)].byte(!(address & 1)) = data; }); memory.vsram = parent->append("VDP VSRAM"); memory.vsram->setSize(40 << 1); memory.vsram->setRead([&](u32 address) -> u8 { if(address >= 40 << 1) return 0x00; return vdp.vsram.memory[address >> 1].byte(!(address & 1)); }); memory.vsram->setWrite([&](u32 address, u8 data) -> void { if(address >= 40 << 1) return; vdp.vsram.memory[address >> 1].byte(!(address & 1)) = data; }); memory.cram = parent->append("VDP CRAM"); memory.cram->setSize(64 << 1); memory.cram->setRead([&](u32 address) -> u8 { return vdp.cram.memory[n6(address >> 1)].byte(!(address & 1)); }); memory.cram->setWrite([&](u32 address, u8 data) -> void { vdp.cram.memory[n6(address >> 1)].byte(!(address & 1)) = data; }); } ares-126/ares/md/vdp-performance/dma.cpp000066400000000000000000000030661415063341600202150ustar00rootroot00000000000000auto VDP::DMA::poll() -> void { static bool locked = false; if(locked) return; locked = true; if(cpu.active()) cpu.synchronize(apu, vdp); if(apu.active()) apu.synchronize(cpu, vdp); while(run()); locked = false; } auto VDP::DMA::run() -> bool { if(vdp.command.pending && !io.wait) { if(io.mode <= 1) return load(), true; if(io.mode == 2) return fill(), true; if(io.mode == 3) return copy(), true; } return false; } auto VDP::DMA::load() -> void { active = 1; auto address = io.mode.bit(0) << 23 | io.source << 1; auto data = bus.read(1, 1, address); vdp.writeDataPort(data); io.source.bit(0,15)++; if(--io.length == 0) { vdp.command.pending = 0; active = 0; } } auto VDP::DMA::fill() -> void { switch(vdp.command.target) { case 1: vdp.vram .writeByte(vdp.command.address, io.fill); break; case 5: vdp.vsram.writeByte(vdp.command.address, io.fill); break; case 3: vdp.cram .writeByte(vdp.command.address, io.fill); break; default: debug(unusual, "[VDP::DMA::fill]: command.target = 0x", hex(vdp.command.target)); break; } io.source.bit(0,15)++; vdp.command.address += vdp.command.increment; if(--io.length == 0) { vdp.command.pending = 0; } } //note: this can only copy to VRAM auto VDP::DMA::copy() -> void { auto data = vdp.vram.readByte(io.source); vdp.vram.writeByte(vdp.command.address, data); io.source.bit(0,15)++; vdp.command.address += vdp.command.increment; if(--io.length == 0) { vdp.command.pending = 0; } } auto VDP::DMA::power() -> void { active = 0; io = {}; } ares-126/ares/md/vdp-performance/io.cpp000066400000000000000000000201441415063341600200570ustar00rootroot00000000000000auto VDP::read(n1 upper, n1 lower, n24 address, n16 data) -> n16 { switch(address) { //data port case 0xc00000 ... 0xc00003: { return readDataPort(); } //control port case 0xc00004 ... 0xc00007: { return readControlPort(); } //counter case 0xc00008 ... 0xc0000f: { auto vcounter = state.vcounter; if(io.interlaceMode.bit(0)) { if(io.interlaceMode.bit(1)) vcounter <<= 1; vcounter.bit(0) = vcounter.bit(8); } return vcounter << 8 | hcounter() << 0; } //PSG case 0xc00010 ... 0xc00017: { //reading from the PSG should deadlock the machine return data; } } return 0x0000; } auto VDP::write(n1 upper, n1 lower, n24 address, n16 data) -> void { switch(address) { //data port case 0xc00000 ... 0xc00003: { return writeDataPort(data); } //control port case 0xc00004 ... 0xc00007: { return writeControlPort(data); } //counter (read-only) case 0xc00008 ... 0xc0000f: { return; } //PSG case 0xc00010 ... 0xc00017: { if(!lower) return; //byte writes to even PSG registers have no effect return psg.write(data); } } } // auto VDP::readDataPort() -> n16 { command.latch = 0; command.ready = 0; //VRAM read if(command.target == 0) { auto address = command.address.bit(1,16); auto data = vram.read(address); command.address += command.increment; return data; } //VSRAM read if(command.target == 4) { auto address = command.address.bit(1,6); auto data = vsram.read(address); command.address += command.increment; return data; } //CRAM read if(command.target == 8) { auto address = command.address.bit(1,6); auto data = cram.read(address); command.address += command.increment; return data.bit(0,2) << 1 | data.bit(3,5) << 5 | data.bit(6,8) << 9; } debug(unusual, "[VDP::readDataPort]: command.target = 0x", hex(command.target)); return 0x0000; } auto VDP::writeDataPort(n16 data) -> void { command.latch = 0; command.ready = 0; //DMA VRAM fill if(dma.io.wait) { dma.io.wait = false; dma.io.fill = data >> 8; //falls through to memory write //causes extra transfer to occur on VRAM fill operations } //VRAM write if(command.target == 1) { auto address = command.address.bit(1,16); if(command.address.bit(0)) data = data >> 8 | data << 8; vram.write(address, data); command.address += command.increment; dma.poll(); return; } //VSRAM write if(command.target == 5) { auto address = command.address.bit(1,6); //data format: ---- --yy yyyy yyyy vsram.write(address, data.bit(0,9)); command.address += command.increment; return; } //CRAM write if(command.target == 3) { auto address = command.address.bit(1,6); //data format: ---- bbb- ggg- rrr- cram.write(address, data.bit(1,3) << 0 | data.bit(5,7) << 3 | data.bit(9,11) << 6); command.address += command.increment; return; } debug(unusual, "[VDP::writeDataPort]: command.target = 0x", hex(command.target)); } // auto VDP::readControlPort() -> n16 { command.latch = 0; n16 result; result.bit( 0) = Region::PAL(); result.bit( 1) = command.pending; result.bit( 2) = hblank(); result.bit( 3) = vblank() || !io.displayEnable; result.bit( 4) = io.interlaceMode.bit(0) && field(); result.bit( 5) = 0; //SCOL result.bit( 6) = 0; //SOVR result.bit( 7) = irq.vblank.pending; result.bit( 8) = 0; //FIFO full result.bit( 9) = 1; //FIFO empty result.bit(10) = 1; //constants (bits 10-15) result.bit(11) = 0; result.bit(12) = 1; result.bit(13) = 1; result.bit(14) = 0; result.bit(15) = 0; return result; } auto VDP::writeControlPort(n16 data) -> void { //command write (lo) if(command.latch) { command.latch = 0; command.address.bit(14,16) = data.bit(0,2); command.target.bit(2,3) = data.bit(4,5); command.ready = data.bit(6) | command.target.bit(0); command.pending = data.bit(7) & dma.io.enable; dma.io.wait = dma.io.mode == 2; dma.poll(); return; } command.address.bit(0,13) = data.bit(0,13); command.target.bit(0,1) = data.bit(14,15); command.ready = 1; //command write (hi) if(data.bit(14,15) != 2) { command.latch = 1; return; } //register write (d13 is ignored) switch(data.bit(8,12)) { //mode register 1 case 0x00: { io.displayOverlayEnable = data.bit(0); io.counterLatch = data.bit(1); io.videoMode4 = data.bit(2); irq.hblank.enable = data.bit(4); io.leftColumnBlank = data.bit(5); irq.poll(); return; } //mode register 2 case 0x01: { io.videoMode5 = data.bit(2); io.overscan = data.bit(3); dma.io.enable = data.bit(4); irq.vblank.enable = data.bit(5); io.displayEnable = data.bit(6); vram.mode = data.bit(7); irq.poll(); dma.poll(); return; } //plane A name table location case 0x02: { planeA.io.nametableAddress.bit(12,15) = data.bit(3,6); return; } //window name table location case 0x03: { window.io.nametableAddress.bit(10,15) = data.bit(1,6); return; } //plane B name table location case 0x04: { planeB.io.nametableAddress.bit(12,15) = data.bit(0,3); return; } //sprite attribute table location case 0x05: { sprite.io.nametableAddress.bit(8,15) = data.bit(0,7); return; } //sprite pattern base address case 0x06: { sprite.io.generatorAddress.bit(15) = data.bit(5); return; } //background color case 0x07: { io.backgroundColor = data.bit(0,5); return; } //horizontal interrupt counter case 0x0a: { irq.hblank.frequency = data.bit(0,7); return; } //mode register 3 case 0x0b: { planeA.io.horizontalScrollMode = data.bit(0,1); planeB.io.horizontalScrollMode = data.bit(0,1); planeA.io.verticalScrollMode = data.bit(2); planeB.io.verticalScrollMode = data.bit(2); irq.external.enable = data.bit(3); irq.poll(); return; } //mode register 4 case 0x0c: { io.displayWidth = data.bit(0); io.interlaceMode = data.bit(1,2); io.shadowHighlightEnable = data.bit(3); io.externalColorEnable = data.bit(4); io.hsync = data.bit(5); io.vsync = data.bit(6); io.clockSelect = data.bit(7); return; } //horizontal scroll data location case 0x0d: { planeA.io.horizontalScrollAddress = data.bit(0,6) << 9; planeB.io.horizontalScrollAddress = data.bit(0,6) << 9; return; } //nametable pattern base address case 0x0e: { //bit(0) relocates plane A to the extended VRAM region. //bit(4) relocates plane B, but only when bit(0) is also set. planeA.io.generatorAddress.bit(15) = data.bit(0); planeB.io.generatorAddress.bit(15) = data.bit(4) && data.bit(0); return; } //data port auto-increment value case 0x0f: { command.increment = data.bit(0,7); return; } //plane size case 0x10: { planeA.io.nametableWidth = data.bit(0,1); planeB.io.nametableWidth = data.bit(0,1); planeA.io.nametableHeight = data.bit(4,5); planeB.io.nametableHeight = data.bit(4,5); return; } //window plane horizontal position case 0x11: { window.io.horizontalOffset = data.bit(0,4) << 4; window.io.horizontalDirection = data.bit(7); return; } //window plane vertical position case 0x12: { window.io.verticalOffset = data.bit(0,4) << 3; window.io.verticalDirection = data.bit(7); return; } //DMA length case 0x13: { dma.io.length.bit(0,7) = data.bit(0,7); return; } //DMA length case 0x14: { dma.io.length.bit(8,15) = data.bit(0,7); return; } //DMA source case 0x15: { dma.io.source.bit(0,7) = data.bit(0,7); return; } //DMA source case 0x16: { dma.io.source.bit(8,15) = data.bit(0,7); return; } //DMA source case 0x17: { dma.io.source.bit(16,21) = data.bit(0,5); dma.io.mode = data.bit(6,7); dma.io.wait = dma.io.mode.bit(1); dma.poll(); return; } //unused default: { return; } } } ares-126/ares/md/vdp-performance/irq.cpp000066400000000000000000000014451415063341600202460ustar00rootroot00000000000000auto VDP::IRQ::poll() -> void { if(external.enable && external.pending) { cpu.raise(CPU::Interrupt::External); } else { external.pending = 0; cpu.lower(CPU::Interrupt::External); } if(hblank.enable && hblank.pending) { cpu.raise(CPU::Interrupt::HorizontalBlank); } else { hblank.pending = 0; cpu.lower(CPU::Interrupt::HorizontalBlank); } if(vblank.enable && vblank.pending) { cpu.raise(CPU::Interrupt::VerticalBlank); } else { vblank.pending = 0; cpu.lower(CPU::Interrupt::VerticalBlank); } } auto VDP::IRQ::acknowledge(u8 level) -> void { if(level == 2) external.pending = 0; if(level == 4) hblank.pending = 0; if(level == 6) vblank.pending = 0; } auto VDP::IRQ::power(bool reset) -> void { external = {}; hblank = {}; vblank = {}; } ares-126/ares/md/vdp-performance/main.cpp000066400000000000000000000037631415063341600204040ustar00rootroot00000000000000auto VDP::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu, apu); } auto VDP::vtick() -> void { if(vblank()) { irq.hblank.counter = irq.hblank.frequency; } else if(irq.hblank.counter-- == 0) { irq.hblank.counter = irq.hblank.frequency; irq.hblank.pending = 1; irq.poll(); } state.vcounter++; if(v28()) { if(vcounter() == 0x0e0) vblank(1); if(vcounter() == 0x0eb && Region::NTSC()) state.vcounter = 0x1e5; if(vcounter() == 0x103 && Region::PAL ()) state.vcounter = 0x1ca; if(vcounter() == 0x1ff) vblank(0); } if(v30()) { if(vcounter() == 0x0f0) vblank(1); if(vcounter() == 0x200 && Region::NTSC()) state.vcounter = 0x000; if(vcounter() == 0x10b && Region::PAL ()) state.vcounter = 0x1d2; if(vcounter() == 0x1ff) vblank(0); } } auto VDP::hblank(bool line) -> void { state.hblank = line; if(hblank() == 0) { cartridge.hblank(0); } else { cartridge.hblank(1); apu.setINT(0); //timing hack } } auto VDP::vblank(bool line) -> void { state.vblank = line; irq.vblank.transitioned = 1; } auto VDP::vedge() -> void { if(!irq.vblank.transitioned) return; irq.vblank.transitioned = 0; if(vblank() == 0) { cartridge.vblank(0); //apu.setINT(0); } else { cartridge.vblank(1); apu.setINT(1); irq.vblank.pending = 1; irq.poll(); } } auto VDP::main() -> void { if(hcounter() == 0) { latch.displayWidth = io.displayWidth; latch.clockSelect = io.clockSelect; step(512); state.hcounter = 0x80; } else if(hcounter() == 0x80) { if(vcounter() < screenHeight() && !runAhead()) { render(); m32x.vdp.scanline(pixels(), state.vcounter); } step(768); state.hcounter = h32() ? 0xe9 : 0xe4; hblank(1); vtick(); } else { step(430); state.hcounter = 0; hblank(0); vedge(); if(vcounter() == 0) { latch.interlace = io.interlaceMode == 3; latch.overscan = io.overscan; frame(); state.field ^= 1; } } } ares-126/ares/md/vdp-performance/memory.cpp000066400000000000000000000041001415063341600207520ustar00rootroot00000000000000auto VDP::VRAM::read(n16 address) const -> n16 { if(mode == 0) { return memory[(n15)address]; } else { n15 offset = address >> 1 & 0x7e00 | address & 0x01fe | address >> 9 & 1; n8 data = memory[offset].byte(!address.bit(0)); return data << 8 | data << 0; } } auto VDP::VRAM::write(n16 address, n16 data) -> void { if(mode == 0) { memory[(n15)address] = data; } else { n15 offset = address >> 1 & 0x7e00 | address & 0x01fe | address >> 9 & 1; memory[offset].byte(!address.bit(0)) = data.byte(0); } n15 offset = address; pixels[offset << 2 | 0] = data >> 12 & 15; pixels[offset << 2 | 1] = data >> 8 & 15; pixels[offset << 2 | 2] = data >> 4 & 15; pixels[offset << 2 | 3] = data >> 0 & 15; if(address < vdp.sprite.io.nametableAddress) return; if(address > vdp.sprite.io.nametableAddress + 319) return; vdp.sprite.write(address - vdp.sprite.io.nametableAddress, data); } auto VDP::VRAM::readByte(n17 address) const -> n8 { return read(address >> 1).byte(!address.bit(0)); } auto VDP::VRAM::writeByte(n17 address, n8 data) -> void { auto word = read(address >> 1); word.byte(!address.bit(0)) = data; write(address >> 1, word); } auto VDP::VSRAM::read(n6 address) const -> n10 { if(address >= 40) return 0x0000; return memory[address]; } auto VDP::VSRAM::write(n6 address, n10 data) -> void { if(address >= 40) return; memory[address] = data; } auto VDP::VSRAM::readByte(n7 address) const -> n8 { return read(address >> 1).byte(!address.bit(0)); } auto VDP::VSRAM::writeByte(n7 address, n8 data) -> void { auto word = read(address >> 1); word.byte(!address.bit(0)) = data; write(address >> 1, word); } auto VDP::CRAM::read(n6 address) const -> n9 { return memory[address]; } auto VDP::CRAM::write(n6 address, n9 data) -> void { memory[address] = data; } auto VDP::CRAM::readByte(n7 address) const -> n8 { return read(address >> 1).byte(!address.bit(0)); } auto VDP::CRAM::writeByte(n7 address, n8 data) -> void { auto word = read(address >> 1); word.byte(!address.bit(0)) = data; write(address >> 1, word); } ares-126/ares/md/vdp-performance/object.cpp000066400000000000000000000002771415063341600207230ustar00rootroot00000000000000inline auto VDP::Object::width() const -> u32 { return 1 + tileWidth << 3; } inline auto VDP::Object::height() const -> u32 { return 1 + tileHeight << 3 + (vdp.io.interlaceMode == 3); } ares-126/ares/md/vdp-performance/psg.cpp000066400000000000000000000020001415063341600202300ustar00rootroot00000000000000auto VDP::PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(1); stream->setFrequency(system.frequency() / 15.0 / 16.0); stream->addHighPassFilter( 20.0, 1); stream->addLowPassFilter (2840.0, 1); } auto VDP::PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto VDP::PSG::main() -> void { auto channels = SN76489::clock(); double output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; output += volume[channels[3]]; stream->frame(output / 4.0 * 0.625); step(16); } auto VDP::PSG::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu, apu); } auto VDP::PSG::power(bool reset) -> void { SN76489::power(); Thread::create(system.frequency() / 15.0, {&PSG::main, this}); for(u32 level : range(15)) { volume[level] = pow(2, level * -2.0 / 6.0); } volume[15] = 0; } ares-126/ares/md/vdp-performance/render.cpp000066400000000000000000000047211415063341600207320ustar00rootroot00000000000000auto VDP::pixels() -> u32* { u32* output = nullptr; if(overscan->value() == 0 && io.overscan == 0) { if(state.vcounter >= 224) return nullptr; output = screen->pixels().data() + (state.vcounter - 0) * 2 * 1280; } if(overscan->value() == 0 && io.overscan == 1) { if(state.vcounter <= 7) return nullptr; if(state.vcounter >= 232) return nullptr; output = screen->pixels().data() + (state.vcounter - 8) * 2 * 1280; } if(overscan->value() == 1 && io.overscan == 0) { if(state.vcounter >= 232) return nullptr; output = screen->pixels().data() + (state.vcounter + 8) * 2 * 1280; } if(overscan->value() == 1 && io.overscan == 1) { output = screen->pixels().data() + (state.vcounter + 0) * 2 * 1280; } if(latch.interlace) output += state.field * 1280; return output; } auto VDP::scanline() -> void { } auto VDP::render() -> void { if(!io.displayEnable) return; if(state.vcounter < window.io.verticalOffset ^ window.io.verticalDirection) { window.renderWindow(0, screenWidth()); } else if(!window.io.horizontalDirection) { window.renderWindow(0, window.io.horizontalOffset); planeA.renderScreen(window.io.horizontalOffset, screenWidth()); } else { planeA.renderScreen(0, window.io.horizontalOffset); window.renderWindow(window.io.horizontalOffset, screenWidth()); } planeB.renderScreen(0, screenWidth()); sprite.render(); state.output = pixels(); if(!state.output) return; for(u32 x : range(screenWidth())) { Pixel g = {io.backgroundColor, 0, 1}; Pixel a = planeA.pixels[x]; Pixel b = planeB.pixels[x]; Pixel s = sprite.pixels[x]; auto& bg = a.above() || a.color && !b.above() ? a : b.color ? b : g; auto& fg = s.above() || s.color && !b.above() && !a.above() ? s : bg; if(!io.shadowHighlightEnable) { auto color = cram.read(fg.color); outputPixel(fg.backdrop << 11 | 1 << 9 | color); } else { u32 mode = a.priority || b.priority; //0 = shadow, 1 = normal, 2 = highlight if(&fg == &s) switch(s.color) { case 0x0e: case 0x1e: case 0x2e: mode = 1; break; case 0x3e: mode += 1; fg = bg; break; case 0x3f: mode = 0; fg = bg; break; default: mode |= s.priority; break; } auto color = cram.read(fg.color); outputPixel(fg.backdrop << 11 | mode << 9 | color); } } } auto VDP::outputPixel(n32 color) -> void { for(u32 n : range(pixelWidth())) state.output[n] = color; state.output += pixelWidth(); } ares-126/ares/md/vdp-performance/serialization.cpp000066400000000000000000000044421415063341600223300ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { Thread::serialize(s); s(vram); s(vsram); s(cram); s(psg); s(irq); s(dma); s(planeA); s(window); s(planeB); s(sprite); s(command.latch); s(command.target); s(command.ready); s(command.pending); s(command.address); s(command.increment); s(io.displayOverlayEnable); s(io.counterLatch); s(io.videoMode4); s(io.leftColumnBlank); s(io.videoMode5); s(io.overscan); s(io.displayEnable); s(io.backgroundColor); s(io.displayWidth); s(io.interlaceMode); s(io.shadowHighlightEnable); s(io.externalColorEnable); s(io.hsync); s(io.vsync); s(io.clockSelect); s(latch.interlace); s(latch.overscan); s(latch.displayWidth); s(latch.clockSelect); s(state.hcounter); s(state.vcounter); s(state.field); s(state.hblank); s(state.vblank); } auto VDP::PSG::serialize(serializer& s) -> void { SN76489::serialize(s); Thread::serialize(s); } auto VDP::IRQ::serialize(serializer& s) -> void { s(external.enable); s(external.pending); s(hblank.enable); s(hblank.pending); s(hblank.counter); s(hblank.frequency); s(vblank.enable); s(vblank.pending); s(vblank.transitioned); } auto VDP::VRAM::serialize(serializer& s) -> void { s(pixels); s(memory); s(size); s(mode); } auto VDP::VSRAM::serialize(serializer& s) -> void { s(memory); } auto VDP::CRAM::serialize(serializer& s) -> void { s(memory); } auto VDP::DMA::serialize(serializer& s) -> void { s(active); s(io.mode); s(io.source); s(io.length); s(io.fill); s(io.enable); s(io.wait); } auto VDP::Background::serialize(serializer& s) -> void { s(io.generatorAddress); s(io.nametableAddress); s(io.nametableWidth); s(io.nametableHeight); s(io.horizontalScrollAddress); s(io.horizontalScrollMode); s(io.verticalScrollMode); s(io.horizontalOffset); s(io.horizontalDirection); s(io.verticalOffset); s(io.verticalDirection); } auto VDP::Object::serialize(serializer& s) -> void { s(x); s(y); s(tileWidth); s(tileHeight); s(horizontalFlip); s(verticalFlip); s(palette); s(priority); s(address); s(link); } auto VDP::Sprite::serialize(serializer& s) -> void { s(io.generatorAddress); s(io.nametableAddress); for(auto& object : oam) s(object); for(auto& object : objects) s(object); } ares-126/ares/md/vdp-performance/sprite.cpp000066400000000000000000000046531415063341600207650ustar00rootroot00000000000000auto VDP::Sprite::render() -> void { bool interlace = vdp.io.interlaceMode == 3; u32 y = vdp.state.vcounter + 128; if(interlace) y = y << 1 | vdp.state.field; u32 link = 0; u32 tiles = 0; u32 count = 0; u32 objectSize = 0; do { auto& object = oam[link]; link = object.link; auto objectY = object.y & (interlace ? 1023 : 511); if(y < objectY) continue; if(y >= objectY + object.height()) continue; if(object.x == 0) break; objects[objectSize++] = object; tiles += object.width() >> 3; if(!link || link >= linkLimit()) break; if(objectSize >= objectLimit()) break; if(tiles >= tileLimit()) break; } while(++count < linkLimit()); memory::fill(pixels, vdp.screenWidth()); u32 shiftY = interlace ? 4 : 3; u32 maskY = interlace ? 15 : 7; u32 tileShift = interlace ? 7 : 6; for(s32 index = objectSize - 1; index >= 0; index--) { auto& object = objects[index]; u32 objectY = y - (object.y & (interlace ? 1023 : 511)); if(object.verticalFlip) objectY = (object.height() - 1) - objectY; u32 tileIncrement = (object.height() >> interlace) >> 3 << tileShift; u32 tileAddress = object.address + (objectY >> shiftY) << tileShift; tileAddress += (objectY & maskY) << 3; auto tileData = &vdp.vram.pixels[tileAddress & 0x1fff8]; u32 w = !object.horizontalFlip ? object.x - 128 : (object.x + object.width() - 1) - 128; s32 incrementX = object.horizontalFlip ? -1 : +1; for(u32 objectX = 0; objectX < object.width();) { if(u32 color = tileData[objectX & 7]) { pixels[w & 511].color = object.palette << 4 | color; pixels[w & 511].priority = object.priority; } w += incrementX; if((objectX++ & 7) == 7) { tileAddress += tileIncrement; tileData = &vdp.vram.pixels[tileAddress & 0x1fff8]; } } } } auto VDP::Sprite::write(n9 address, n16 data) -> void { if(address > 320) return; auto& object = oam[address >> 2]; switch(address.bit(0,1)) { case 0: object.y = data.bit(0,9); break; case 1: object.link = data.bit(0,6); object.tileHeight = data.bit(8,9); object.tileWidth = data.bit(10,11); break; case 2: object.address = data.bit(0,10); object.horizontalFlip = data.bit(11); object.verticalFlip = data.bit(12); object.palette = data.bit(13,14); object.priority = data.bit(15); break; case 3: object.x = data.bit(0,8); break; } } ares-126/ares/md/vdp-performance/vdp.cpp000066400000000000000000000036311415063341600202430ustar00rootroot00000000000000#include namespace ares::MegaDrive { VDP vdp; #include "psg.cpp" #include "main.cpp" #include "irq.cpp" #include "render.cpp" #include "memory.cpp" #include "io.cpp" #include "dma.cpp" #include "background.cpp" #include "object.cpp" #include "sprite.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { node = parent->append("VDP"); screen = node->append("Screen", 1280, 480); screen->colors(1 << 16, {&VDP::color, this}); screen->setSize(1280, 480); screen->setScale(0.25, 0.5); screen->setAspect(1.0, 1.0); overscan = screen->append("Overscan", true, [&](auto value) { if(value == 0) screen->setSize(1280, 448); if(value == 1) screen->setSize(1280, 480); }); overscan->setDynamic(true); psg.load(node); debugger.load(node); } auto VDP::unload() -> void { debugger = {}; psg.unload(); overscan.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::frame() -> void { if(latch.interlace == 0) screen->setProgressive(1); if(latch.interlace == 1) screen->setInterlace(field()); screen->setViewport(0, 0, screen->width(), screen->height()); screen->frame(); scheduler.exit(Event::Frame); } auto VDP::power(bool reset) -> void { Thread::create(system.frequency() / 2.0, {&VDP::main, this}); screen->power(); for(auto& data : vram.pixels) data = 0; for(auto& data : vram.memory) data = 0; vram.size = 32768; vram.mode = 0; for(auto& data : vsram.memory) data = 0; for(auto& data : cram.memory) data = 0; psg.power(reset); irq.power(reset); dma.power(); planeA.io = {}; window.io = {}; planeB.io = {}; sprite.io = {}; for(auto& object : sprite.oam) object = {}; for(auto& object : sprite.objects) object = {}; command = {}; io = {}; latch = {}; state = {}; } } ares-126/ares/md/vdp-performance/vdp.hpp000066400000000000000000000162521415063341600202530ustar00rootroot00000000000000//Yamaha YM7101 struct VDP : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean overscan; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory vsram; Node::Debugger::Memory cram; } memory; } debugger; auto hcounter() const -> u32 { return state.hcounter; } auto vcounter() const -> u32 { return state.vcounter; } auto field() const -> bool { return state.field; } auto hblank() const -> bool { return state.hblank; } auto vblank() const -> bool { return state.vblank; } auto refreshing() const -> bool { return false; } auto h32() const -> bool { return latch.displayWidth == 0; } //256-width auto h40() const -> bool { return latch.displayWidth == 1; } //320-width auto v28() const -> bool { return io.overscan == 0; } //224-height auto v30() const -> bool { return io.overscan == 1; } //240-height //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto frame() -> void; auto power(bool reset) -> void; //main.cpp auto step(u32 clocks) -> void; auto vtick() -> void; auto hblank(bool line) -> void; auto vblank(bool line) -> void; auto vedge() -> void; auto main() -> void; //render.cpp auto pixels() -> u32*; auto scanline() -> void; auto render() -> void; auto outputPixel(n32 color) -> void; //io.cpp auto read(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto write(n1 upper, n1 lower, n24 address, n16 data) -> void; auto readDataPort() -> n16; auto writeDataPort(n16 data) -> void; auto readControlPort() -> n16; auto writeControlPort(n16 data) -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; struct PSG : SN76489, Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: double volume[16]; } psg; struct IRQ { //irq.cpp auto poll() -> void; auto acknowledge(u8 level) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct External { n1 enable; n1 pending; } external; struct Hblank { n1 enable; n1 pending; n8 counter; n8 frequency; } hblank; struct Vblank { n1 enable; n1 pending; n1 transitioned; } vblank; } irq; struct DMA { //dma.cpp auto poll() -> void; auto run() -> bool; auto load() -> void; auto fill() -> void; auto copy() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 active; struct IO { n2 mode; n22 source; n16 length; n8 fill; n1 enable; n1 wait; } io; } dma; private: auto pixelWidth() const -> u32 { return latch.displayWidth ? 4 : 5; } auto screenWidth() const -> u32 { return latch.displayWidth ? 320 : 256; } auto screenHeight() const -> u32 { return latch.overscan ? 240 : 224; } auto frameHeight() const -> u32 { return Region::PAL() ? 312 : 262; } struct VRAM { //memory.cpp auto read(n16 address) const -> n16; auto write(n16 address, n16 data) -> void; auto readByte(n17 address) const -> n8; auto writeByte(n17 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 pixels[131072]; n16 memory[65536]; n32 size = 32768; n1 mode; //0 = 64KB, 1 = 128KB } vram; struct VSRAM { //memory.cpp auto read(n6 address) const -> n10; auto write(n6 address, n10 data) -> void; auto readByte(n7 address) const -> n8; auto writeByte(n7 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n10 memory[40]; } vsram; struct CRAM { //memory.cpp auto read(n6 address) const -> n9; auto write(n6 address, n9 data) -> void; auto readByte(n7 address) const -> n8; auto writeByte(n7 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n9 memory[64]; } cram; struct Pixel { auto above() const -> bool { return priority == 1 && color; } auto below() const -> bool { return priority == 0 && color; } n6 color; n1 priority; n1 backdrop; }; struct Background { enum class ID : u32 { PlaneA, Window, PlaneB } id; //background.cpp auto renderScreen(u32 from, u32 to) -> void; auto renderWindow(u32 from, u32 to) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n16 generatorAddress; n16 nametableAddress; //PlaneA, PlaneB n2 nametableWidth; n2 nametableHeight; n15 horizontalScrollAddress; n2 horizontalScrollMode; n1 verticalScrollMode; //Window n10 horizontalOffset; n1 horizontalDirection; n10 verticalOffset; n1 verticalDirection; } io; //unserialized: Pixel pixels[320]; }; Background planeA{Background::ID::PlaneA}; Background window{Background::ID::Window}; Background planeB{Background::ID::PlaneB}; struct Object { //object.cpp auto width() const -> u32; auto height() const -> u32; //serialization.cpp auto serialize(serializer&) -> void; n9 x; n10 y; n2 tileWidth; n2 tileHeight; n1 horizontalFlip; n1 verticalFlip; n2 palette; n1 priority; n11 address; n7 link; }; struct Sprite { VDP& vdp; auto objectLimit() const -> u32 { return vdp.io.displayWidth ? 20 : 16; } auto tileLimit() const -> u32 { return vdp.io.displayWidth ? 40 : 32; } auto linkLimit() const -> u32 { return vdp.io.displayWidth ? 80 : 64; } //sprite.cpp auto render() -> void; auto write(n9 address, n16 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n16 generatorAddress; n16 nametableAddress; } io; Object oam[80]; Object objects[20]; //unserialized: Pixel pixels[512]; } sprite{*this}; struct Command { n1 latch; n4 target; n1 ready; n1 pending; n17 address; n8 increment; } command; struct IO { //$00 mode register 1 n1 displayOverlayEnable; n1 counterLatch; n1 videoMode4; n1 leftColumnBlank; //$01 mode register 2 n1 videoMode5; n1 overscan; n1 displayEnable; //$07 background color n6 backgroundColor; //$0c mode register 4 n1 displayWidth; //0 = H32; 1 = H40 n2 interlaceMode; n1 shadowHighlightEnable; n1 externalColorEnable; n1 hsync; n1 vsync; n1 clockSelect; //0 = DCLK; 1 = EDCLK } io; struct Latch { //per-frame n1 interlace; n1 overscan; //per-scanline n1 displayWidth; n1 clockSelect; } latch; struct State { u32* output = nullptr; n8 hcounter; n9 vcounter; n1 field; n1 hblank; n1 vblank; } state; }; extern VDP vdp; ares-126/ares/md/vdp/000077500000000000000000000000001415063341600144445ustar00rootroot00000000000000ares-126/ares/md/vdp/color.cpp000066400000000000000000000016441415063341600162730ustar00rootroot00000000000000auto VDP::color(n32 color) -> n64 { //Mega Drive if(color < (1 << 15)) { n32 R = color.bit( 0, 2); n32 G = color.bit( 3, 5); n32 B = color.bit( 6, 8); n32 M = color.bit( 9,10); n32 Y = color.bit(11); u32 lookup[4][8] = { { 0, 29, 52, 70, 87, 101, 116, 130}, //shadow { 0, 52, 87, 116, 144, 172, 206, 255}, //normal {130, 144, 158, 172, 187, 206, 228, 255}, //highlight {}, //unused }; n64 r = image::normalize(lookup[M][R], 8, 16); n64 g = image::normalize(lookup[M][G], 8, 16); n64 b = image::normalize(lookup[M][B], 8, 16); return r << 32 | g << 16 | b << 0; } //Mega 32X else { n32 R = color.bit( 0, 4); n32 G = color.bit( 5, 9); n32 B = color.bit(10,14); n64 r = image::normalize(R, 5, 16); n64 g = image::normalize(G, 5, 16); n64 b = image::normalize(B, 5, 16); return r << 32 | g << 16 | b << 0; } } ares-126/ares/md/vdp/dac.cpp000066400000000000000000000031271415063341600157020ustar00rootroot00000000000000auto VDP::DAC::pixel(u32 x) -> void { if(!pixels) return; Pixel g = {vdp.io.backgroundColor, 0, 1}; Pixel a = vdp.layerA.pixel(x); Pixel b = vdp.layerB.pixel(x); Pixel s = vdp.sprite.pixel(x); if(test.disableLayers == 1) { if(test.forceLayer == 1) g = s; if(test.forceLayer == 2) g = a; if(test.forceLayer == 3) g = b; a = {}; b = {}; s = {}; } auto& bg = a.above() || a.color && !b.above() ? a : b.color ? b : g; auto& fg = s.above() || s.color && !b.above() && !a.above() ? s : bg; auto pixel = fg; auto mode = 1; //0 = shadow, 1 = normal, 2 = highlight if(vdp.io.shadowHighlightEnable) { mode = a.priority || b.priority; if(&fg == &s) switch(s.color) { case 0x0e: case 0x1e: case 0x2e: mode = 1; break; case 0x3e: mode += 1; pixel = bg; break; case 0x3f: mode = 0; pixel = bg; break; default: mode |= s.priority; break; } } if(test.disableLayers == 0) { if(test.forceLayer == 1) { if(pixel.backdrop) pixel = s; pixel.color &= s.color; } if(test.forceLayer == 2) { if(pixel.backdrop) pixel = a; pixel.color &= a.color; } if(test.forceLayer == 3) { if(pixel.backdrop) pixel = b; pixel.color &= b.color; } } auto color = vdp.cram.color(pixel.color); output(pixel.backdrop << 11 | mode << 9 | color); } auto VDP::DAC::output(n32 color) -> void { *pixels++ = color; *pixels++ = color; *pixels++ = color; *pixels++ = color; if(vdp.h40()) return; *pixels++ = color; } auto VDP::DAC::power(bool reset) -> void { test = {}; pixels = nullptr; } ares-126/ares/md/vdp/debugger.cpp000066400000000000000000000101711415063341600167340ustar00rootroot00000000000000auto VDP::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("VDP VRAM"); memory.vram->setSize(32_KiB << 1); memory.vram->setRead([&](u32 address) -> u8 { return self.vram.memory[n15(address >> 1)].byte(!(address & 1)); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { self.vram.memory[n15(address >> 1)].byte(!(address & 1)) = data; }); memory.vsram = parent->append("VDP VSRAM"); memory.vsram->setSize(40 << 1); memory.vsram->setRead([&](u32 address) -> u8 { if(address >= 40 << 1) return 0x00; return self.vsram.memory[address >> 1].byte(!(address & 1)); }); memory.vsram->setWrite([&](u32 address, u8 data) -> void { if(address >= 40 << 1) return; self.vsram.memory[address >> 1].byte(!(address & 1)) = data; }); memory.cram = parent->append("VDP CRAM"); memory.cram->setSize(64 << 1); memory.cram->setRead([&](u32 address) -> u8 { return self.cram.memory[n6(address >> 1)].byte(!(address & 1)); }); memory.cram->setWrite([&](u32 address, u8 data) -> void { self.cram.memory[n6(address >> 1)].byte(!(address & 1)) = data; }); tracer.interrupt = parent->append("Interrupt", "VDP"); tracer.dma = parent->append("DMA", "VDP"); tracer.io = parent->append("I/O", "VDP"); } auto VDP::Debugger::unload() -> void { memory.vram.reset(); memory.vsram.reset(); memory.cram.reset(); } auto VDP::Debugger::interrupt(CPU::Interrupt type) -> void { if(unlikely(tracer.interrupt->enabled())) { string name; if(type == CPU::Interrupt::External ) name = "external"; if(type == CPU::Interrupt::HorizontalBlank) name = "hblank"; if(type == CPU::Interrupt::VerticalBlank ) name = "vblank"; string message = {name, " SR=", cpu.r.i, " @ ", vdp.vcounter(), ",", vdp.hcounter()}; tracer.interrupt->notify(message); } } auto VDP::Debugger::dmaLoad(n24 source, n4 target, n17 address, n16 data) -> void { if(unlikely(tracer.dma->enabled())) { tracer.dma->notify({"load(", hex(source, 6L), ", ", hex(target, 1L), ":", hex(address, 5L), ", ", hex(data, 4L), ")"}); } } auto VDP::Debugger::dmaFill(n4 target, n17 address, n16 data) -> void { if(unlikely(tracer.dma->enabled())) { tracer.dma->notify({"fill(", hex(target, 1L), ":", hex(address, 5L), ", ", hex(data, 4L), ")"}); } } auto VDP::Debugger::dmaCopy(n22 source, n4 target, n17 address, n16 data) -> void { if(unlikely(tracer.dma->enabled())) { tracer.dma->notify({"copy(", hex(source, 6L), ", ", hex(target, 1L), ":", hex(address, 5L), ", ", hex(data, 4L), ")"}); } } auto VDP::Debugger::io(n5 register, n8 data) -> void { if(unlikely(tracer.io->enabled())) { static const string name[32] = { /* $00 */ "mode register 1", /* $01 */ "mode register 2", /* $02 */ "layer A name table location", /* $03 */ "window name table location", /* $04 */ "layer B name table location", /* $05 */ "sprite attribute table location", /* $06 */ "sprite pattern base address", /* $07 */ "background color", /* $08 */ "", /* $09 */ "", /* $0a */ "horizontal interrupt counter", /* $0b */ "mode register 3", /* $0c */ "mode register 4", /* $0d */ "horizontal scroll data location", /* $0e */ "nametable pattern base address", /* $0f */ "data port auto-increment value", /* $10 */ "layer size", /* $11 */ "window plane horizontal position", /* $12 */ "window plane vertical position", /* $13 */ "DMA length (lo)", /* $14 */ "DMA length (hi)", /* $15 */ "DMA source (lo)", /* $16 */ "DMA source (md)", /* $17 */ "DMA source (hi)", /* $18 */ "", /* $19 */ "", /* $1a */ "", /* $1b */ "", /* $1c */ "", /* $1d */ "", /* $1e */ "", /* $1f */ "", }; tracer.io->notify({ "$", hex(register, 2L), " = #$", hex(data, 2L), " @ ", pad(vdp.vcounter(), 3L), ",", pad(vdp.hcounter(), 4L), " ", name[register] }); } } ares-126/ares/md/vdp/dma.cpp000066400000000000000000000036271415063341600157210ustar00rootroot00000000000000//test if the 68K bus should be acquired immediately for 68K->VDP DMA auto VDP::DMA::synchronize() -> void { if(vdp.command.pending && !wait && mode <= 1) { active = 1; bus.acquire(Bus::VDPDMA); } else { active = 0; bus.release(Bus::VDPDMA); } } auto VDP::DMA::run() -> bool { if(vdp.command.pending && !wait) { if(mode <= 1 && !vdp.fifo.full()) { return load(), true; } else if(mode == 2 && vdp.fifo.empty()) { return fill(), true; } else if(mode == 3) { return copy(), true; } } return false; } auto VDP::DMA::load() -> void { auto address = mode.bit(0) << 23 | source << 1; auto data = bus.read(1, 1, address); vdp.writeDataPort(data); vdp.debugger.dmaLoad(address, vdp.command.target, vdp.command.address, data); source.bit(0,15)++; if(--length == 0) { vdp.command.pending = 0; synchronize(); } } auto VDP::DMA::fill() -> void { switch(vdp.command.target) { case 1: vdp.vram.writeByte(vdp.command.address ^ 1, data >> 8); break; case 3: vdp.cram.write(vdp.command.address >> 1, data); break; case 5: vdp.vsram.write(vdp.command.address >> 1, data); break; } vdp.debugger.dmaFill(vdp.command.target, vdp.command.address, data); source.bit(0,15)++; vdp.command.address += vdp.command.increment; if(--length == 0) { vdp.command.pending = 0; synchronize(); } } //VRAM only auto VDP::DMA::copy() -> void { if(!read) { read = 1; data = vdp.vram.readByte(source ^ 1); return; } read = 0; vdp.vram.writeByte(vdp.command.address ^ 1, data); vdp.debugger.dmaCopy(source, vdp.command.target, vdp.command.address ^ 1, data); source.bit(0,15)++; vdp.command.address += vdp.command.increment; if(--length == 0) { vdp.command.pending = 0; synchronize(); } } auto VDP::DMA::power(bool reset) -> void { active = 0; mode = 0; source = 0; length = 0; wait = 1; read = 0; enable = 0; } ares-126/ares/md/vdp/fifo.cpp000066400000000000000000000035511415063341600160770ustar00rootroot00000000000000auto VDP::FIFO::advance() -> void { swap(slots[0], slots[1]); swap(slots[1], slots[2]); swap(slots[2], slots[3]); } auto VDP::FIFO::run() -> bool { if(empty()) return false; if(slots[0].target == 1 && vdp.vram.mode == 0) { if(slots[0].lower) { slots[0].lower = 0; vdp.vram.writeByte(slots[0].address ^ 1, slots[0].data.byte(0)); return true; } if(slots[0].upper) { slots[0].upper = 0; vdp.vram.writeByte(slots[0].address, slots[0].data.byte(1)); if(vdp.command.pending && vdp.dma.mode == 2) { vdp.dma.data = slots[0].data; vdp.dma.wait = 0; // start pending DMA } return advance(), true; } } if(slots[0].target == 1 && vdp.vram.mode == 1) vdp.vram.writeByte(slots[0].address | 1, slots[0].data.byte(0)); else if(slots[0].target == 3) vdp.cram.write(slots[0].address >> 1, slots[0].data); else if(slots[0].target == 5) vdp.vsram.write(slots[0].address >> 1, slots[0].data); else debug(unusual, "[VDP::FIFO] write target = 0x", hex(slots[0].target)); if(vdp.command.pending && vdp.dma.mode == 2) { vdp.dma.data = slots[1].data; // fill data taken from next fifo slot (late fetch) vdp.dma.wait = 0; // start pending DMA } slots[0].lower = 0; slots[0].upper = 0; return advance(), true; } auto VDP::FIFO::write(n4 target, n17 address, n16 data) -> void { if(full()) { bus.acquire(Bus::VDPFIFO); while(full()) { if(cpu.active()) cpu.wait(1); if(apu.active()) apu.step(1); } bus.release(Bus::VDPFIFO); } for(auto& slot : slots) { if(slot.empty()) { slot.target = target; slot.address = address; slot.data = data; slot.upper = 1; slot.lower = 1; return; } } } auto VDP::FIFO::power(bool reset) -> void { slots[0] = {}; slots[1] = {}; slots[2] = {}; slots[3] = {}; } ares-126/ares/md/vdp/io.cpp000066400000000000000000000201551415063341600155620ustar00rootroot00000000000000auto VDP::read(n1 upper, n1 lower, n24 address, n16 data) -> n16 { switch(address) { //data port case 0xc00000 ... 0xc00003: { return readDataPort(); } //control port case 0xc00004 ... 0xc00007: { return readControlPort(); } //counters case 0xc00008 ... 0xc0000f: { if(io.counterLatch) return state.counterLatchValue; auto vcounter = state.vcounter; if(io.interlaceMode.bit(0)) { if(io.interlaceMode.bit(1)) vcounter <<= 1; vcounter.bit(0) = vcounter.bit(8); } return vcounter << 8 | hcounter() << 0; } //PSG case 0xc00010 ... 0xc00017: { //reading from the PSG should deadlock the machine return data; } //test address port (write-only) case 0xc00018 ... 0xc0001b: { return data; } //test data port case 0xc0001c ... 0xc0001f: { switch(test.address) { //unknown case 0x8 ... 0xf: { return data; } } return data; } } return data; } auto VDP::write(n1 upper, n1 lower, n24 address, n16 data) -> void { switch(address) { //data port case 0xc00000 ... 0xc00003: { return writeDataPort(data); } //control port case 0xc00004 ... 0xc00007: { return writeControlPort(data); } //counters (read-only) case 0xc00008 ... 0xc0000f: { return; } //PSG case 0xc00010 ... 0xc00017: { if(!lower) return; //byte writes to even PSG registers have no effect return psg.write(data); } //test address port case 0xc00018 ... 0xc0001b: { test.address = data.bit(0,3); return; } //test data port case 0xc0001c ... 0xc0001f: { switch(test.address) { case 0x0: { //bit(0,5) is unknown dac.test.disableLayers = data.bit(6); dac.test.forceLayer = data.bit(7,8); psg.test.volumeOverride = data.bit(9); psg.test.volumeChannel = data.bit(10,11); sprite.test.disablePhase1 = data.bit(12); sprite.test.disablePhase2 = data.bit(13); sprite.test.disablePhase3 = data.bit(14); return; } case 0x1: { //bit(0) affects Z80 clock (ZCLK) //bit(1-15) is unknown return; } case 0x2: { //appears to reset video signal generator whenever any value is written return; } //unknown case 0x3 ... 0x7: { return; } } return; } } } // auto VDP::readDataPort() -> n16 { command.latch = 0; command.ready = 0; while(!prefetch.full()) { if(cpu.active()) cpu.wait(1); if(apu.active()) apu.step(1); } command.address += command.increment; command.ready = 0; prefetch.read(command.target, command.address); return prefetch.slot.data; } auto VDP::writeDataPort(n16 data) -> void { command.latch = 0; command.ready = 1; fifo.write(command.target, command.address, data); command.address += command.increment; } // auto VDP::readControlPort() -> n16 { command.latch = 0; n16 result; result.bit( 0) = Region::PAL(); result.bit( 1) = command.pending; result.bit( 2) = hblank(); result.bit( 3) = vblank() || !io.displayEnable; result.bit( 4) = io.interlaceMode.bit(0) && field(); result.bit( 5) = sprite.collision; result.bit( 6) = sprite.overflow; result.bit( 7) = irq.vblank.pending; result.bit( 8) = fifo.full(); result.bit( 9) = fifo.empty(); result.bit(10) = 1; //constants (bits 10-15) result.bit(11) = 0; //todo: should these bits be open bus instead? result.bit(12) = 1; result.bit(13) = 1; result.bit(14) = 0; result.bit(15) = 0; sprite.collision = 0; sprite.overflow = 0; return result; } auto VDP::writeControlPort(n16 data) -> void { //command write (lo) // Note: A pending interrupt will be delayed when a register write // is used to enable that interrupt. Further testing is required, // but the current method should be sufficient to handle most cases. // Required for Sesame Street Counting Cafe et al. irq.delay = 2; // 4 pixel delay (4-6 M68k clocks) from this write if(command.latch) { command.latch = 0; command.address.bit(14,16) = data.bit(0,2); command.target.bit(2,3) = data.bit(4,5); command.ready = data.bit(6) | command.target.bit(0); command.pending |= data.bit(7) & dma.enable; prefetch.read(command.target, command.address); dma.wait = dma.mode == 2; dma.synchronize(); return; } command.target.bit(0,1) = data.bit(14,15); command.ready = 1; //command write (hi) if(data.bit(14,15) != 2) { command.address.bit(0,13) = data.bit(0,13); command.latch = 1; return; } debugger.io(n5(data >> 8), n8(data)); //register write (d13 is ignored) switch(data.bit(8,12)) { //mode register 1 case 0x00: { io.displayOverlayEnable = data.bit(0); if(!io.counterLatch && data.bit(1)) state.counterLatchValue = read(1,1,0xC00008,0); io.counterLatch = data.bit(1); io.videoMode4 = data.bit(2); irq.hblank.enable = data.bit(4); io.leftColumnBlank = data.bit(5); if(!io.videoMode4) debug(unimplemented, "[VDP] M4=0"); return; } //mode register 2 case 0x01: { io.videoMode5 = data.bit(2); io.overscan = data.bit(3); dma.enable = data.bit(4); irq.vblank.enable = data.bit(5); io.displayEnable = data.bit(6); vram.mode = data.bit(7); if(!io.videoMode5) debug(unimplemented, "[VDP] M5=0"); return; } //layer A name table location case 0x02: { layerA.nametableAddress.bit(12,15) = data.bit(3,6); return; } //window name table location case 0x03: { window.nametableAddress.bit(10,15) = data.bit(1,6); return; } //layer B name table location case 0x04: { layerB.nametableAddress.bit(12,15) = data.bit(0,3); return; } //sprite attribute table location case 0x05: { sprite.nametableAddress.bit(8,15) = data.bit(0,7); return; } //sprite pattern base address case 0x06: { sprite.generatorAddress.bit(15) = data.bit(5); return; } //background color case 0x07: { io.backgroundColor = data.bit(0,5); return; } //horizontal interrupt counter case 0x0a: { irq.hblank.frequency = data.bit(0,7); return; } //mode register 3 case 0x0b: { layers.hscrollMode = data.bit(0,1); layers.vscrollMode = data.bit(2); irq.external.enable = data.bit(3); return; } //mode register 4 case 0x0c: { io.displayWidth = data.bit(0); io.interlaceMode = data.bit(1,2); io.shadowHighlightEnable = data.bit(3); io.externalColorEnable = data.bit(4); io.hsync = data.bit(5); io.vsync = data.bit(6); io.clockSelect = data.bit(7); return; } //horizontal scroll data location case 0x0d: { layers.hscrollAddress = data.bit(0,6) << 9; return; } //nametable pattern base address case 0x0e: { //bit(0) relocates plane A to the extended VRAM region. //bit(4) relocates plane B, but only when bit(0) is also set. layerA.generatorAddress.bit(15) = data.bit(0); layerB.generatorAddress.bit(15) = data.bit(4) && data.bit(0); return; } //data port auto-increment value case 0x0f: { command.increment = data.bit(0,7); return; } //layer size case 0x10: { layers.nametableWidth = data.bit(0,1); layers.nametableHeight = data.bit(4,5); return; } //window plane horizontal position case 0x11: { window.hoffset = data.bit(0,4) << 4; window.hdirection = data.bit(7); return; } //window plane vertical position case 0x12: { window.voffset = data.bit(0,4) << 3; window.vdirection = data.bit(7); return; } //DMA length case 0x13: { dma.length.bit(0,7) = data.bit(0,7); return; } //DMA length case 0x14: { dma.length.bit(8,15) = data.bit(0,7); return; } //DMA source case 0x15: { dma.source.bit(0,7) = data.bit(0,7); return; } //DMA source case 0x16: { dma.source.bit(8,15) = data.bit(0,7); return; } //DMA source case 0x17: { dma.source.bit(16,21) = data.bit(0,5); dma.mode = data.bit(6,7); return; } //unused default: { return; } } } ares-126/ares/md/vdp/irq.cpp000066400000000000000000000017061415063341600157470ustar00rootroot00000000000000auto VDP::IRQ::poll() -> void { if(delay) { delay--; return; } if(external.enable && external.pending) { cpu.raise(CPU::Interrupt::External); } else { cpu.lower(CPU::Interrupt::External); } if(hblank.enable && hblank.pending) { cpu.raise(CPU::Interrupt::HorizontalBlank); } else { cpu.lower(CPU::Interrupt::HorizontalBlank); } if(vblank.enable && vblank.pending) { cpu.raise(CPU::Interrupt::VerticalBlank); } else { cpu.lower(CPU::Interrupt::VerticalBlank); } } auto VDP::IRQ::acknowledge(u8 level) -> void { if(level == 2) external.pending = 0; if(level == 4) { // H-INT ack can errantly cancel V-INT if they coincide. // Required for Fatal Rewind et al. if(vblank.pending && vblank.enable) vblank.pending = 0; else hblank.pending = 0; } if(level == 6) vblank.pending = 0; } auto VDP::IRQ::power(bool reset) -> void { external = {}; hblank = {}; vblank = {}; delay = 0; } ares-126/ares/md/vdp/layer.cpp000066400000000000000000000064051415063341600162710ustar00rootroot00000000000000auto VDP::Layer::begin() -> void { for(auto& pixel : pixels) pixel = {}; } //called 17 (H32) or 21 (H40) times auto VDP::Layer::attributesFetch() -> void { attributes.address = nametableAddress; attributes.hmask = 32 * (1 + vdp.layers.nametableWidth ) - 1; attributes.vmask = 32 * (1 + vdp.layers.nametableHeight) - 1; attributes.hscroll = hscroll; attributes.vscroll = vscroll; //prohibited vsize=2 acts like vsize=3 but ignores a6 if(vdp.layers.nametableHeight == 2) { attributes.vmask = 32 * (1 + 3) - 1 & ~(1 << 6); } //prohibited hsize=2 causes first row to repeat (overrides all vsize modes) if(vdp.layers.nametableWidth == 2) { attributes.hmask = 31; //todo: this is not 100% accurate (but is close) attributes.vmask = 0; } } //called 17 (H32) ot 21 (H40) times auto VDP::Layer::mappingFetch(s32 mappingIndex) -> void { if(!vdp.displayEnable()) { return vdp.slot(); } auto interlace = vdp.io.interlaceMode == 3; auto x = mappingIndex * 16; auto y = vdp.vcounter(); if(interlace) y = y << 1 | vdp.field(); x -= attributes.hscroll & ~15; y += attributes.vscroll; auto tileX = x >> 3 & attributes.hmask; auto tileY = y >> 3 + interlace & attributes.vmask; n15 address = attributes.address + n12(tileY * (1 + attributes.hmask) + tileX); for(auto& mapping : mappings) { auto data = vdp.vram.read(address++); mapping.address = data.bit(0,10) << 4 + interlace; mapping.hflip = data.bit(11); mapping.palette = data.bit(13,14); mapping.priority = data.bit(15); auto pixelY = y & 7 + interlace * 8; if(data.bit(12)) pixelY ^= 7 + interlace * 8; mapping.address += pixelY << 1; u32 extra = mapping.priority << 2 | mapping.palette; extra |= extra << 4; extra |= extra << 8; extra |= extra << 16; extras = extras << 32 | extra; } } //called 34 (H32) or 42 (H40) times auto VDP::Layer::patternFetch(u32 patternIndex) -> void { if(!vdp.displayEnable()) { return vdp.slot(); } auto interlace = vdp.io.interlaceMode == 3; auto y = vdp.vcounter() + attributes.vscroll; if(interlace) y = y << 1 | vdp.field(); auto& mapping = mappings[patternIndex & 1]; n15 address = mapping.address; u16 hi = vdp.vram.read(generatorAddress | address++); u16 lo = vdp.vram.read(generatorAddress | address++); u32 data = hi << 16 | lo << 0; if(mapping.hflip) data = hflip(data); colors = colors << 32 | data; if(patternIndex & 1) { u32 pixelCount = (patternIndex >> 1) << 4; for(auto index : reverse(range(16))) { n8 shift = (index + (attributes.hscroll & 15)) * 4; if(windowed[0] && !windowed[1] && hscroll & 15) { //emulate left windowing bug when fine hscroll != 0 (repeats next column) if(15 - index < (hscroll & 15)) shift += 64; } n6 color = colors >> shift & 15; n4 extra = extras >> shift & 15; if(color) color |= extra.bit(0,1) << 4; pixels[pixelCount++] = {color, extra.bit(2)}; } } } auto VDP::Layer::pixel(u32 pixelIndex) -> Pixel { return pixels[16 + pixelIndex]; } auto VDP::Layer::power(bool reset) -> void { hscroll = 0; vscroll = 0; generatorAddress = 0; nametableAddress = 0; attributes = {}; for(auto& pixel : pixels) pixel = {}; for(auto& mapping : mappings) mapping = {}; } ares-126/ares/md/vdp/layers.cpp000066400000000000000000000015451415063341600164540ustar00rootroot00000000000000auto VDP::Layers::hscrollFetch() -> void { if(!vdp.displayEnable()) { return vdp.slot(); } static const u32 mask[] = {0u, 7u, ~7u, ~0u}; n16 address = hscrollAddress; address += ((u8)vdp.vcounter() & mask[hscrollMode]) << 1; vdp.layerA.hscroll = vdp.vram.read(address++); vdp.layerB.hscroll = vdp.vram.read(address++); } auto VDP::Layers::vscrollFetch() -> void { if(vscrollMode == 1) return; vdp.layerA.vscroll = vdp.vsram.read(0); vdp.layerB.vscroll = vdp.vsram.read(1); } auto VDP::Layers::vscrollFetch(s32 index) -> void { if(vscrollMode == 0) return; n16 address = index << 1; vdp.layerA.vscroll = vdp.vsram.read(address++); vdp.layerB.vscroll = vdp.vsram.read(address++); } auto VDP::Layers::power(bool reset) -> void { hscrollMode = 0; hscrollAddress = 0; vscrollMode = 0; nametableWidth = 0; nametableHeight = 0; } ares-126/ares/md/vdp/main.cpp000066400000000000000000000202161415063341600160750ustar00rootroot00000000000000auto VDP::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu, apu); } auto VDP::tick() -> void { step(cycles[0] + cycles[1]); cycles += 2; state.hcounter++; if(h32()) { if(hcounter() == 0x00) hblank(0), vedge(); if(hcounter() == 0x81) vtick(); if(hcounter() == 0x93) hblank(1); if(hcounter() == 0x94) state.hcounter = 0xe9; } if(h40()) { if(hcounter() == 0x00) hblank(0), vedge(); if(hcounter() == 0xa1) vtick(); if(hcounter() == 0xb3) hblank(1); if(hcounter() == 0xb6) state.hcounter = 0xe4; } irq.poll(); vram.refreshing = 0; } auto VDP::vtick() -> void { if(vblank()) { irq.hblank.counter = irq.hblank.frequency; } else if(irq.hblank.counter-- == 0) { irq.hblank.counter = irq.hblank.frequency; irq.hblank.pending = 1; debugger.interrupt(CPU::Interrupt::HorizontalBlank); } state.vcounter++; if(v28()) { if(vcounter() == 0x0e0) vblank(1); if(vcounter() == 0x0eb && Region::NTSC()) state.vcounter = 0x1e5; if(vcounter() == 0x103 && Region::PAL ()) state.vcounter = 0x1ca; if(vcounter() == 0x1ff) vblank(0); } if(v30()) { if(vcounter() == 0x0f0) vblank(1); if(vcounter() == 0x200 && Region::NTSC()) state.vcounter = 0x000; if(vcounter() == 0x10b && Region::PAL ()) state.vcounter = 0x1d2; if(vcounter() == 0x1ff) vblank(0); } } auto VDP::hblank(bool line) -> void { state.hblank = line; if(hblank() == 0) { cartridge.hblank(0); } else { cartridge.hblank(1); apu.setINT(0); //timing hack } } auto VDP::vblank(bool line) -> void { state.vblank = line; irq.vblank.transitioned = 1; } auto VDP::vedge() -> void { if(!irq.vblank.transitioned) return; irq.vblank.transitioned = 0; if(vblank() == 0) { cartridge.vblank(0); //apu.setINT(0); } else { cartridge.vblank(1); apu.setINT(1); irq.vblank.pending = 1; debugger.interrupt(CPU::Interrupt::VerticalBlank); } } auto VDP::slot() -> void { if(state.refreshing) { state.refreshing = 0; return; } if(!fifo.run()) prefetch.run(); dma.run(); } auto VDP::refresh() -> void { vram.refreshing = 1; state.refreshing = !displayEnable(); } auto VDP::main() -> void { latch.displayWidth = io.displayWidth; latch.clockSelect = io.clockSelect; if(h32()) mainH32(); if(h40()) mainH40(); if(vcounter() == 0) { latch.interlace = io.interlaceMode == 3; latch.overscan = io.overscan; frame(); state.field ^= 1; } } auto VDP::mainH32() -> void { auto pixels = dac.pixels = vdp.pixels(); auto scanline = vcounter(); cycles = &cyclesH32[edclk()][0]; sprite.begin(); for(auto block : range(16)) { layers.vscrollFetch(block); layerA.attributesFetch(); layerB.attributesFetch(); window.attributesFetch(block); tick(); layerA.mappingFetch(block); tick(); (block & 3) != 3 ? slot() : refresh(); tick(); layerA.patternFetch(block * 2 + 2); tick(); layerA.patternFetch(block * 2 + 3); tick(); layerB.mappingFetch(block); tick(); sprite.mappingFetch(block); tick(); layerB.patternFetch(block * 2 + 2); tick(); layerB.patternFetch(block * 2 + 3); for(auto pixel : range(16)) dac.pixel(block * 16 + pixel); } m32x.vdp.scanline(pixels, scanline); tick(); slot(); tick(); slot(); layers.vscrollFetch(); sprite.end(); for(auto cycle : range(13)) { tick(); sprite.patternFetch(cycle + 0); } tick(); displayEnable() ? slot() : refresh(); for(auto cycle : range(13)) { tick(); sprite.patternFetch(cycle + 13); } tick(); slot(); layerA.begin(); layerB.begin(); tick(); layers.hscrollFetch(); tick(); sprite.patternFetch(26); tick(); sprite.patternFetch(27); tick(); sprite.patternFetch(28); tick(); sprite.patternFetch(29); layers.vscrollFetch(-1); layerA.attributesFetch(); layerB.attributesFetch(); window.attributesFetch(-1); tick(); layerA.mappingFetch(-1); tick(); sprite.patternFetch(30); tick(); layerA.patternFetch( 0); tick(); layerA.patternFetch( 1); tick(); layerB.mappingFetch(-1); tick(); sprite.patternFetch(31); tick(); layerB.patternFetch( 0); tick(); layerB.patternFetch( 1); } auto VDP::mainH40() -> void { auto pixels = dac.pixels = vdp.pixels(); cycles = &cyclesH40[edclk()][0]; sprite.begin(); for(auto block : range(20)) { layers.vscrollFetch(block); layerA.attributesFetch(); layerB.attributesFetch(); window.attributesFetch(block); tick(); layerA.mappingFetch(block); tick(); (block & 3) != 3 ? slot() : refresh(); tick(); layerA.patternFetch(block * 2 + 2); tick(); layerA.patternFetch(block * 2 + 3); tick(); layerB.mappingFetch(block); tick(); sprite.mappingFetch(block); tick(); layerB.patternFetch(block * 2 + 2); tick(); layerB.patternFetch(block * 2 + 3); for(auto pixel : range(16)) dac.pixel(block * 16 + pixel); } m32x.vdp.scanline(pixels, vcounter()); tick(); slot(); tick(); slot(); layers.vscrollFetch(); sprite.end(); for(auto cycle : range(23)) { tick(); sprite.patternFetch(cycle + 0); } tick(); displayEnable() ? slot() : refresh(); for(auto cycle : range(11)) { tick(); sprite.patternFetch(cycle + 23); } layerA.begin(); layerB.begin(); tick(); layers.hscrollFetch(); tick(); sprite.patternFetch(34); tick(); sprite.patternFetch(35); tick(); sprite.patternFetch(36); tick(); sprite.patternFetch(37); layers.vscrollFetch(-1); layerA.attributesFetch(); layerB.attributesFetch(); window.attributesFetch(-1); tick(); layerA.mappingFetch(-1); tick(); sprite.patternFetch(38); tick(); layerA.patternFetch( 0); tick(); layerA.patternFetch( 1); tick(); layerB.mappingFetch(-1); tick(); sprite.patternFetch(39); tick(); layerB.patternFetch( 0); tick(); layerB.patternFetch( 1); } //timings are approximations; exact positions of slow/normal/fast cycles are not known auto VDP::generateCycleTimings() -> void { //full lines //========== //H32/DCLK: 342 slow + 0 normal + 0 fast = 3420 cycles for(auto cycle : range(342)) cyclesH32[0][cycle * 1] = 10; //H32/EDCLK: 21 slow + 3 normal + 318 fast = 2781 cycles for(auto cycle : range(342)) cyclesH32[1][cycle * 1] = 8; for(auto cycle : range( 24)) cyclesH32[1][cycle * 14] = 10; for(auto cycle : range( 3)) cyclesH32[1][cycle * 14] = 9; //H40/DCLK: 0 slow + 0 normal + 420 fast = 3360 cycles for(auto cycle : range(420)) cyclesH40[0][cycle * 1] = 8; //H40/EDCLK: 28 slow + 4 normal + 388 fast = 3420 cycles for(auto cycle : range(420)) cyclesH40[1][cycle * 1] = 8; for(auto cycle : range( 32)) cyclesH40[1][cycle * 13] = 10; for(auto cycle : range( 4)) cyclesH40[1][cycle * 13] = 9; //half lines //========== //H32/DCLK: 171 slow + 0 normal + 0 fast = 1710 cycles for(auto cycle : range(171)) halvesH32[0][cycle * 1] = 10; //H32/EDCLK: 10 slow + 2 normal + 159 fast = 1390 cycles for(auto cycle : range(171)) halvesH32[1][cycle * 1] = 8; for(auto cycle : range( 12)) halvesH32[1][cycle * 14] = 10; for(auto cycle : range( 2)) halvesH32[1][cycle * 14] = 9; //H40/DCLK: 0 slow + 0 normal + 210 fast = 1680 cycles for(auto cycle : range(210)) halvesH40[0][cycle * 1] = 8; //H40/EDCLK: 14 slow + 2 normal + 194 fast = 1710 cycles for(auto cycle : range(210)) halvesH40[1][cycle * 1] = 8; for(auto cycle : range( 16)) halvesH40[1][cycle * 13] = 10; for(auto cycle : range( 2)) halvesH40[1][cycle * 13] = 9; //active even half lines //====================== //H32/DCLK: 171 slow + 0 normal + 0 fast = 1710 cycles for(auto cycle : range(171)) extrasH32[0][cycle * 1] = 10; //H32/EDCLK: 21 slow + 3 normal + 147 fast = 1413 cycles for(auto cycle : range(171)) extrasH32[1][cycle * 1] = 8; for(auto cycle : range( 24)) extrasH32[1][cycle * 7] = 10; for(auto cycle : range( 3)) extrasH32[1][cycle * 7] = 9; //H40/DCLK: 0 slow + 0 normal + 210 fast = 1680 cycles for(auto cycle : range(171)) extrasH40[0][cycle * 1] = 8; //H40/EDCLK: 28 slow + 4 normal + 178 fast = 1740 cycles for(auto cycle : range(171)) extrasH40[1][cycle * 1] = 8; for(auto cycle : range( 32)) extrasH40[1][cycle * 5] = 10; for(auto cycle : range( 4)) extrasH40[1][cycle * 5] = 9; cycles = nullptr; } ares-126/ares/md/vdp/memory.cpp000066400000000000000000000026521415063341600164650ustar00rootroot00000000000000auto VDP::VRAM::read(n16 address) const -> n16 { if(mode == 0) { return memory[(n15)address]; } else { n15 offset = address >> 1 & 0x7e00 | address & 0x01fe | address >> 9 & 1; n8 data = memory[offset].byte(address.bit(0)); return data << 8 | data << 0; } } auto VDP::VRAM::write(n16 address, n16 data) -> void { if(mode == 0) { memory[(n15)address] = data; } else { n15 offset = address >> 1 & 0x7e00 | address & 0x01fe | address >> 9 & 1; memory[offset].byte(address.bit(0)) = data.byte(0); } vdp.sprite.write(address, data); } auto VDP::VRAM::readByte(n17 address) const -> n8 { return read(address >> 1).byte(!address.bit(0)); } auto VDP::VRAM::writeByte(n17 address, n8 data) -> void { auto word = read(address >> 1); word.byte(!address.bit(0)) = data; write(address >> 1, word); } auto VDP::VSRAM::read(n6 address) const -> n10 { if(address >= 40) return 0x0000; return memory[address]; } auto VDP::VSRAM::write(n6 address, n10 data) -> void { if(address >= 40) return; memory[address] = data; } auto VDP::CRAM::color(n6 address) const -> n9 { return memory[address]; } auto VDP::CRAM::read(n6 address) const -> n16 { n16 data = memory[address]; return data.bit(0,2) << 1 | data.bit(3,5) << 5 | data.bit(6,8) << 9; } auto VDP::CRAM::write(n6 address, n16 data) -> void { data = data.bit(1,3) << 0 | data.bit(5,7) << 3 | data.bit(9,11) << 6; memory[address] = data; } ares-126/ares/md/vdp/prefetch.cpp000066400000000000000000000027301415063341600167520ustar00rootroot00000000000000auto VDP::Prefetch::run() -> bool { if(full()) return false; if(vdp.command.target == 0 && vdp.vram.mode == 0) { if(!slot.lower) { slot.lower = 1; slot.data.byte(0) = vdp.vram.readByte(vdp.command.address & ~1 | 1); vdp.command.ready = 1; return true; } if(!slot.upper) { slot.upper = 1; slot.data.byte(1) = vdp.vram.readByte(vdp.command.address & ~1 | 0); vdp.command.ready = 1; return true; } } if(vdp.command.target == 0 && vdp.vram.mode == 1) { slot.lower = 1; slot.upper = 1; slot.data.byte(0) = vdp.vram.readByte(vdp.command.address | 1); slot.data.byte(1) = slot.data.byte(0); vdp.command.ready = 1; return true; } if(vdp.command.target == 4) { slot.lower = 1; slot.upper = 1; slot.data = vdp.vsram.read(vdp.command.address >> 1); vdp.command.ready = 1; return true; } if(vdp.command.target == 8) { slot.lower = 1; slot.upper = 1; slot.data = vdp.cram.read(vdp.command.address >> 1); vdp.command.ready = 1; return true; } slot.lower = 1; slot.upper = 1; vdp.command.ready = 1; debug(unusual, "[VDP::Prefetch] read target = 0x", hex(vdp.command.target)); return true; } auto VDP::Prefetch::read(n4 target, n17 address) -> void { if(target.bit(0) != 0) return; slot.upper = address.bit(0) && target == 0; slot.lower = 0; } auto VDP::Prefetch::power(bool reset) -> void { slot = {}; slot.upper = 1; slot.lower = 1; } ares-126/ares/md/vdp/psg.cpp000066400000000000000000000023571415063341600157500ustar00rootroot00000000000000auto VDP::PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(1); stream->setFrequency(system.frequency() / 15.0 / 16.0); stream->addHighPassFilter( 20.0, 1); stream->addLowPassFilter (2840.0, 1); } auto VDP::PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto VDP::PSG::main() -> void { auto channels = SN76489::clock(); if(test.volumeOverride) { channels[0] = channels[test.volumeChannel]; channels[1] = channels[test.volumeChannel]; channels[2] = channels[test.volumeChannel]; channels[3] = channels[test.volumeChannel]; } double output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; output += volume[channels[3]]; stream->frame(output / 4.0 * 0.625); step(16); } auto VDP::PSG::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu, apu); } auto VDP::PSG::power(bool reset) -> void { SN76489::power(); Thread::create(system.frequency() / 15.0, {&PSG::main, this}); test = {}; for(u32 level : range(15)) { volume[level] = pow(2, level * -2.0 / 6.0); } volume[15] = 0; } ares-126/ares/md/vdp/serialization.cpp000066400000000000000000000071421415063341600200310ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { Thread::serialize(s); s(psg); s(irq); s(prefetch); s(fifo); s(dma); s(layers); s(window); s(layerA); s(layerB); s(sprite); s(dac); s(vram); s(vsram); s(cram); s(command.latch); s(command.target); s(command.ready); s(command.pending); s(command.address); s(command.increment); s(io.displayOverlayEnable); s(io.counterLatch); s(io.videoMode4); s(io.leftColumnBlank); s(io.videoMode5); s(io.overscan); s(io.displayEnable); s(io.backgroundColor); s(io.displayWidth); s(io.interlaceMode); s(io.shadowHighlightEnable); s(io.externalColorEnable); s(io.hsync); s(io.vsync); s(io.clockSelect); s(test.address); s(latch.interlace); s(latch.overscan); s(latch.displayWidth); s(latch.clockSelect); s(state.counterLatchValue); s(state.hcounter); s(state.vcounter); s(state.field); s(state.hblank); s(state.vblank); s(state.refreshing); } auto VDP::PSG::serialize(serializer& s) -> void { SN76489::serialize(s); Thread::serialize(s); s(test.volumeOverride); s(test.volumeChannel); } auto VDP::IRQ::serialize(serializer& s) -> void { s(external.enable); s(external.pending); s(hblank.enable); s(hblank.pending); s(hblank.counter); s(hblank.frequency); s(vblank.enable); s(vblank.pending); s(vblank.transitioned); s(delay); } auto VDP::Slot::serialize(serializer& s) -> void { s(target); s(address); s(data); s(upper); s(lower); } auto VDP::Prefetch::serialize(serializer& s) -> void { s(slot); } auto VDP::FIFO::serialize(serializer& s) -> void { s(slots); } auto VDP::DMA::serialize(serializer& s) -> void { s(active); s(mode); s(source); s(length); s(data); s(wait); s(read); s(enable); } auto VDP::Pixel::serialize(serializer& s) -> void { s(color); s(priority); s(backdrop); } auto VDP::Layers::serialize(serializer& s) -> void { s(hscrollMode); s(hscrollAddress); s(vscrollMode); s(nametableWidth); s(nametableHeight); } auto VDP::Attributes::serialize(serializer& s) -> void { s(address); s(hmask); s(vmask); s(hscroll); s(vscroll); } auto VDP::Window::serialize(serializer& s) -> void { s(hoffset); s(hdirection); s(voffset); s(vdirection); s(nametableAddress); } auto VDP::Layer::serialize(serializer& s) -> void { s(hscroll); s(vscroll); s(generatorAddress); s(nametableAddress); s(attributes); s(pixels); s(colors); s(extras); s(windowed); s(mappings); } auto VDP::Layer::Mapping::serialize(serializer& s) -> void { s(address); s(hflip); s(palette); s(priority); } auto VDP::Sprite::serialize(serializer& s) -> void { s(generatorAddress); s(nametableAddress); s(collision); s(overflow); s(pixels); s(cache); s(mappings); s(mappingCount); s(maskCheck); s(maskActive); s(patternIndex); s(patternSlice); s(patternCount); s(visible); s(visibleLink); s(visibleCount); s(visibleStop); s(test.disablePhase1); s(test.disablePhase2); s(test.disablePhase3); } auto VDP::Sprite::Cache::serialize(serializer& s) -> void { s(y); s(link); s(height); s(width); } auto VDP::Sprite::Mapping::serialize(serializer& s) -> void { s(valid); s(width); s(height); s(address); s(hflip); s(palette); s(priority); s(x); } auto VDP::DAC::serialize(serializer& s) -> void { s(test.disableLayers); s(test.forceLayer); } auto VDP::VRAM::serialize(serializer& s) -> void { s(memory); s(size); s(mode); s(refreshing); } auto VDP::VSRAM::serialize(serializer& s) -> void { s(memory); } auto VDP::CRAM::serialize(serializer& s) -> void { s(memory); } ares-126/ares/md/vdp/sprite.cpp000066400000000000000000000114551415063341600164640ustar00rootroot00000000000000auto VDP::Sprite::write(n16 address, n16 data) -> void { auto baseAddress = nametableAddress; if(vdp.h40()) baseAddress &= ~0x1ff; address -= baseAddress; if(address >= frameObjectLimit()*8/2) return; auto& object = cache[address >> 2]; switch(address & 3) { case 0: object.y = data.bit( 0, 9); break; case 1: object.link = data.bit( 0, 6); object.height = data.bit( 8, 9); object.width = data.bit(10,11); break; } } //called before mapping fetches auto VDP::Sprite::begin() -> void { for(auto& mapping : mappings) mapping.valid = 0; mappingCount = 0; } //called before pattern fetches auto VDP::Sprite::end() -> void { for(auto& pixel : pixels) pixel.color = 0; visibleLink = 0; visibleCount = 0; visibleStop = 0; patternIndex = 0; patternSlice = 0; patternCount = 0; maskActive = 0; } //called 16 (H32) or 20 (H40) times auto VDP::Sprite::mappingFetch(u32) -> void { if(!vdp.displayEnable()) { return vdp.slot(); } if(test.disablePhase2) return; //mapping fetches are delayed when less than 16/20 objects are visible if(visibleCount++ < lineObjectLimit()) return; auto interlace = vdp.io.interlaceMode == 3; auto y = 129 + (i9)vdp.vcounter(); if(interlace) y = y << 1 | vdp.field(); auto id = visible[mappingCount]; auto& object = cache[id]; auto height = 1 + object.height << 3 + interlace; auto baseAddress = nametableAddress; if(vdp.h40()) baseAddress &= ~0x1ff; auto& mapping = mappings[mappingCount++]; auto address = baseAddress + id * 4 + 2; n16 d2 = vdp.vram.read(address++); n16 d3 = vdp.vram.read(address++); mapping.valid = 1; mapping.width = object.width; mapping.height = object.height; mapping.address = d2.bit(0,10) << 4 + interlace; mapping.hflip = d2.bit(11); mapping.palette = d2.bit(13,14); mapping.priority = d2.bit(15); mapping.x = d3.bit(0,8); y = y - (object.y & (interlace ? 1023 : 511)); if(d2.bit(12)) y = (height - 1) - y; y &= 31; //only the lower 5-bits are considered by the VDP in phase 2 mapping.address += (y >> 3 + interlace) << 4 + interlace; mapping.address += (y & 7 + interlace * 8) << 1; } //called 32 (H32) or 40 (H40) times auto VDP::Sprite::patternFetch(u32) -> void { if(!vdp.displayEnable()) { return vdp.slot(); } if(test.disablePhase3) mappings[patternIndex].valid = 0; auto interlace = vdp.io.interlaceMode == 3; auto y = 129 + (i9)vdp.vcounter(); if(interlace) y = y << 1 | vdp.field(); if(mappings[patternIndex].valid) { auto& object = mappings[patternIndex]; auto width = 1 + object.width << 3; auto height = 1 + object.height << 3 + interlace; if(!maskActive) { if(maskCheck && !object.x) { maskActive = 1; } else { u32 x = patternSlice * 8; if(object.hflip) x = (width - 1) - x; u32 tileX = x >> 3; u32 tileNumber = tileX * (height >> 3 + interlace); n15 tileAddress = object.address + (tileNumber << 4 + interlace); u16 hi = vdp.vram.read(generatorAddress | tileAddress++); u16 lo = vdp.vram.read(generatorAddress | tileAddress++); u32 data = hi << 16 | lo << 0; if(object.hflip) data = hflip(data); for(auto index : range(8)) { n9 x = object.x + patternSlice * 8 + index - 128; n6 color = data >> 28; data <<= 4; if(!color) continue; if(pixels[x].color) { collision = 1; } else { color |= object.palette << 4; pixels[x] = {color, object.priority}; } } if(object.x) maskCheck = 1; } } if(++patternSlice >= 1 + object.width) { patternSlice = 0; patternIndex++; } } else { maskCheck = 0; } if(test.disablePhase1) visibleStop = 1; for(auto index : range(2)) { if(visibleStop) break; auto id = visibleLink; auto& object = cache[id]; visibleLink = object.link; if(!visibleLink) visibleStop = 1; auto objectY = object.y & (interlace ? 1023 : 511); auto height = 1 + object.height << 3 + interlace; if(y < objectY) continue; if(y >= objectY + height) continue; visible[visibleCount++] = id; if(visibleCount >= lineObjectLimit()) visibleStop = 1; } } auto VDP::Sprite::pixel(u32 pixelIndex) -> Pixel { return pixels[pixelIndex]; } auto VDP::Sprite::power(bool reset) -> void { generatorAddress = 0; nametableAddress = 0; collision = 0; overflow = 0; for(auto& pixel : pixels) pixel = {}; for(auto& cache : this->cache) cache = {}; for(auto& mapping : mappings) mapping = {}; mappingCount = 0; maskCheck = 0; maskActive = 0; patternIndex = 0; patternSlice = 0; patternCount = 0; for(auto& visible : this->visible) visible = {}; visibleLink = 0; visibleCount = 0; visibleStop = 0; test = {}; } ares-126/ares/md/vdp/vdp.cpp000066400000000000000000000061551415063341600157500ustar00rootroot00000000000000#if 0 //defined(PROFILE_PERFORMANCE) #include "../vdp-performance/vdp.cpp" #else #include namespace ares::MegaDrive { //flips 4-bit nibble ordering in 8-pixel row inline auto hflip(u32 data) -> u32 { data = data >> 16 & 0x0000ffff | data << 16 & 0xffff0000; data = data >> 8 & 0x00ff00ff | data << 8 & 0xff00ff00; data = data >> 4 & 0x0f0f0f0f | data << 4 & 0xf0f0f0f0; return data; } VDP vdp; #include "psg.cpp" #include "main.cpp" #include "irq.cpp" #include "prefetch.cpp" #include "fifo.cpp" #include "memory.cpp" #include "io.cpp" #include "dma.cpp" #include "layers.cpp" #include "window.cpp" #include "layer.cpp" #include "sprite.cpp" #include "dac.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { node = parent->append("VDP"); screen = node->append("Screen", 1280, 480); screen->colors(1 << 16, {&VDP::color, this}); screen->setSize(1280, 480); screen->setScale(0.25, 0.5); screen->setAspect(1.0, 1.0); overscan = screen->append("Overscan", true, [&](auto value) { if(value == 0) screen->setSize(1280, 448); if(value == 1) screen->setSize(1280, 480); }); overscan->setDynamic(true); psg.load(node); debugger.load(node); generateCycleTimings(); } auto VDP::unload() -> void { debugger.unload(); psg.unload(); overscan.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::pixels() -> u32* { u32* output = nullptr; if(overscan->value() == 0 && latch.overscan == 0) { if(vcounter() >= 224) return nullptr; output = screen->pixels().data() + (vcounter() - 0) * 2 * 1280; } if(overscan->value() == 0 && latch.overscan == 1) { if(vcounter() <= 7) return nullptr; if(vcounter() >= 232) return nullptr; output = screen->pixels().data() + (vcounter() - 8) * 2 * 1280; } if(overscan->value() == 1 && latch.overscan == 0) { if(vcounter() >= 232) return nullptr; output = screen->pixels().data() + (vcounter() + 8) * 2 * 1280; } if(overscan->value() == 1 && latch.overscan == 1) { output = screen->pixels().data() + (vcounter() + 0) * 2 * 1280; } if(latch.interlace) output += field() * 1280; return output; } auto VDP::frame() -> void { if(latch.interlace == 0) screen->setProgressive(1); if(latch.interlace == 1) screen->setInterlace(field()); screen->setViewport(0, 0, screen->width(), screen->height()); screen->frame(); scheduler.exit(Event::Frame); } auto VDP::power(bool reset) -> void { Thread::create(system.frequency(), {&VDP::main, this}); screen->power(); if(!reset) { for(auto& data : vram.memory ) data = 0; for(auto& data : vsram.memory) data = 0; for(auto& data : cram.memory ) data = 0; } vram.mode = 0; command = {}; io = {}; test = {}; latch = {}; state = {}; psg.power(reset); irq.power(reset); prefetch.power(reset); fifo.power(reset); dma.power(reset); layers.power(reset); window.power(reset); layerA.power(reset); layerB.power(reset); sprite.power(reset); dac.power(reset); } } #endif ares-126/ares/md/vdp/vdp.hpp000066400000000000000000000264561415063341600157630ustar00rootroot00000000000000//Yamaha YM7101 #if 0 //defined(PROFILE_PERFORMANCE) #include "../vdp-performance/vdp.hpp" #else struct VDP : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean overscan; struct Debugger { VDP& self; Debugger(VDP& self) : self(self) {} //debugger.cpp auto load(Node::Object) -> void; auto unload() -> void; auto interrupt(CPU::Interrupt) -> void; auto dmaLoad(n24 source, n4 target, n17 address, n16 data) -> void; auto dmaFill(n4 target, n17 address, n16 data) -> void; auto dmaCopy(n22 source, n4 target, n17 address, n16 data) -> void; auto io(n5 register, n8 data) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory vsram; Node::Debugger::Memory cram; } memory; struct Tracer { Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification dma; Node::Debugger::Tracer::Notification io; } tracer; } debugger{*this}; auto hcounter() const -> u32 { return state.hcounter; } auto vcounter() const -> u32 { return state.vcounter; } auto field() const -> bool { return state.field; } auto hblank() const -> bool { return state.hblank; } auto vblank() const -> bool { return state.vblank; } auto refreshing() const -> bool { return vram.refreshing; } auto displayEnable() const -> bool { return io.displayEnable && !state.vblank; } auto h32() const -> bool { return latch.displayWidth == 0; } //256-width auto h40() const -> bool { return latch.displayWidth == 1; } //320-width auto v28() const -> bool { return io.overscan == 0; } //224-height auto v30() const -> bool { return io.overscan == 1; } //240-height auto dclk() const -> bool { return io.clockSelect == 0; } //internal clock auto edclk() const -> bool { return io.clockSelect == 1; } //external clock auto screenWidth() const -> u32 { return latch.displayWidth ? 320 : 256; } auto screenHeight() const -> u32 { return io.overscan ? 240 : 224; } auto frameHeight() const -> u32 { return Region::PAL() ? 312 : 262; } //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto pixels() -> u32*; auto frame() -> void; auto power(bool reset) -> void; //main.cpp auto step(u32 clocks) -> void; auto tick() -> void; auto vtick() -> void; auto hblank(bool line) -> void; auto vblank(bool line) -> void; auto vedge() -> void; auto slot() -> void; auto refresh() -> void; auto main() -> void; auto render() -> void; auto mainH32() -> void; auto mainH40() -> void; auto generateCycleTimings() -> void; //io.cpp auto read(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto write(n1 upper, n1 lower, n24 address, n16 data) -> void; auto readDataPort() -> n16; auto writeDataPort(n16 data) -> void; auto readControlPort() -> n16; auto writeControlPort(n16 data) -> void; struct PSG : SN76489, Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Test { n1 volumeOverride; n2 volumeChannel; } test; private: double volume[16]; } psg; struct IRQ { //irq.cpp auto poll() -> void; auto acknowledge(u8 level) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct External { n1 enable; n1 pending; } external; struct Hblank { n1 enable; n1 pending; n8 counter; n8 frequency; } hblank; struct Vblank { n1 enable; n1 pending; n1 transitioned; } vblank; n8 delay; } irq; struct Slot { auto empty() const -> bool { return !upper && !lower; } auto full() const -> bool { return upper && lower; } //serialization.cpp auto serialize(serializer&) -> void; n4 target; //read/write flag + VRAM/VSRAM/CRAM select n17 address; //write address n16 data; //write data n1 upper; //1 = data.byte(1) valid n1 lower; //1 = data.byte(0) valid }; struct Prefetch { auto empty() const -> bool { return slot.empty(); } auto full() const -> bool { return slot.full(); } //prefetch.cpp auto run() -> bool; auto read(n4 target, n17 address) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; Slot slot; } prefetch; struct FIFO { auto empty() const -> bool { return slots[0].empty(); } auto full() const -> bool { return !slots[3].empty(); } //fifo.cpp auto advance() -> void; auto run() -> bool; auto write(n4 target, n17 address, n16 data) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; Slot slots[4]; } fifo; struct DMA { //dma.cpp auto synchronize() -> void; auto run() -> bool; auto load() -> void; auto fill() -> void; auto copy() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 active; n2 mode; n22 source; n16 length; n16 data; n1 wait; n1 read; n1 enable; } dma; struct Pixel { auto above() const -> bool { return priority == 1 && color; } auto below() const -> bool { return priority == 0 && color; } //serialization.cpp auto serialize(serializer&) -> void; n6 color; n1 priority; n1 backdrop; }; struct Layers { //layers.cpp auto hscrollFetch() -> void; auto vscrollFetch() -> void; auto vscrollFetch(s32) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n2 hscrollMode; n15 hscrollAddress; n1 vscrollMode; n2 nametableWidth; n2 nametableHeight; } layers; struct Attributes { //serialization.cpp auto serialize(serializer&) -> void; n15 address; n16 hmask; n16 vmask; n10 hscroll; n10 vscroll; }; struct Window { //window.cpp auto attributesFetch(s32) -> void; auto test() const -> bool; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n10 hoffset; n1 hdirection; n10 voffset; n1 vdirection; n16 nametableAddress; } window; struct Layer { //layer.cpp auto begin() -> void; auto attributesFetch() -> void; auto mappingFetch(s32) -> void; auto patternFetch(u32) -> void; auto pixel(u32 x) -> Pixel; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n10 hscroll; n10 vscroll; n16 generatorAddress; n16 nametableAddress; Attributes attributes; Pixel pixels[352]; u128 colors; u128 extras; n1 windowed[2]; struct Mapping { //serialization.cpp auto serialize(serializer&) -> void; n15 address; n1 hflip; n2 palette; n1 priority; }; Mapping mappings[2]; } layerA, layerB; struct Sprite { VDP& vdp; //the per-scanline sprite limits are different between H40 and H32 modes auto lineObjectLimit() const -> u32 { return vdp.latch.displayWidth ? 20 : 16; } auto frameObjectLimit() const -> u32 { return vdp.latch.displayWidth ? 80 : 64; } //sprite.cpp auto write(n16 address, n16 data) -> void; auto begin() -> void; auto end() -> void; auto mappingFetch(u32) -> void; auto patternFetch(u32) -> void; auto pixel(u32 x) -> Pixel; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n16 generatorAddress; n16 nametableAddress; n1 collision; n1 overflow; Pixel pixels[512]; struct Cache { //serialization.cpp auto serialize(serializer&) -> void; n10 y; n7 link; n2 height; n2 width; }; Cache cache[80]; struct Mapping { //serialization.cpp auto serialize(serializer&) -> void; n1 valid; n2 width; n2 height; n15 address; n1 hflip; n2 palette; n1 priority; n9 x; }; Mapping mappings[21]; n8 mappingCount; n1 maskCheck; n1 maskActive; n8 patternIndex; n8 patternSlice; n8 patternCount; n7 visible[20]; n8 visibleLink; n8 visibleCount; n1 visibleStop; struct Test { n1 disablePhase1; n1 disablePhase2; n1 disablePhase3; } test; } sprite{*this}; struct DAC { //dac.cpp auto pixel(u32 x) -> void; auto output(n32 color) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Test { n1 disableLayers; n2 forceLayer; } test; u32* pixels = nullptr; } dac; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; private: //video RAM struct VRAM { //memory.cpp auto read(n16 address) const -> n16; auto write(n16 address, n16 data) -> void; auto readByte(n17 address) const -> n8; auto writeByte(n17 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; //Mega Drive: 65536x4-bit (x2) = 64KB VRAM //Tera Drive: 65536x4-bit (x4) = 128KB VRAM n16 memory[65536]; //stored in 16-bit words n32 size = 32768; n1 mode; //0 = 64KB, 1 = 128KB n1 refreshing; } vram; //vertical scroll RAM struct VSRAM { //memory.cpp auto read(n6 address) const -> n10; auto write(n6 address, n10 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n10 memory[40]; } vsram; //color RAM struct CRAM { //memory.cpp auto color(n6 address) const -> n9; auto read(n6 address) const -> n16; auto write(n6 address, n16 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n9 memory[64]; } cram; //FIFO / DMA command struct Command { n1 latch; //write half toggle n4 target; //CD0-CD3 n1 ready; //CD4 n1 pending; //CD5 n17 address; //A0-A16 n8 increment; //data increment amount } command; struct IO { //$00 mode register 1 n1 displayOverlayEnable; n1 counterLatch; n1 videoMode4; n1 leftColumnBlank; //$01 mode register 2 n1 videoMode5; n1 overscan; //0 = 224 lines; 1 = 240 lines n1 displayEnable; //$07 background color n6 backgroundColor; //$0c mode register 4 n1 displayWidth; //0 = H32; 1 = H40 n2 interlaceMode; n1 shadowHighlightEnable; n1 externalColorEnable; n1 hsync; n1 vsync; n1 clockSelect; //0 = DCLK; 1 = EDCLK } io; struct Test { n4 address; } test; struct Latch { //per-frame n1 interlace; n1 overscan; //per-scanline n1 displayWidth; n1 clockSelect; } latch; struct State { n16 counterLatchValue; n8 hcounter; n9 vcounter; n1 field; n1 hblank; n1 vblank; n1 refreshing; } state; //unserialized: u8 cyclesH32[2][342], halvesH32[2][171], extrasH32[2][171]; u8 cyclesH40[2][420], halvesH40[2][210], extrasH40[2][210]; u8* cycles = nullptr; }; extern VDP vdp; #endif ares-126/ares/md/vdp/window.cpp000066400000000000000000000016101415063341600164550ustar00rootroot00000000000000//called 17 (H32) or 21 (H40) times auto VDP::Window::attributesFetch(s32 attributesIndex) -> void { //todo: what should happen for the window on column -1? if(attributesIndex == -1) { vdp.layerA.windowed[0] = 0; vdp.layerA.windowed[1] = 0; return; } s32 x = attributesIndex << 4; s32 y = vdp.vcounter(); vdp.layerA.windowed[0] = vdp.layerA.windowed[1]; vdp.layerA.windowed[1] = x < hoffset ^ hdirection || y < voffset ^ vdirection; if(!vdp.layerA.windowed[1]) return; vdp.layerA.attributes.address = vdp.h40() ? nametableAddress & ~0x400 : nametableAddress & ~0; vdp.layerA.attributes.hmask = vdp.h40() ? 63 : 31; vdp.layerA.attributes.vmask = 31; vdp.layerA.attributes.hscroll = 0; vdp.layerA.attributes.vscroll = 0; } auto VDP::Window::power(bool reset) -> void { hoffset = 0; hdirection = 0; voffset = 0; vdirection = 0; nametableAddress = 0; } ares-126/ares/ms/000077500000000000000000000000001415063341600136725ustar00rootroot00000000000000ares-126/ares/ms/GNUmakefile000066400000000000000000000015731415063341600157520ustar00rootroot00000000000000ares.components += z80 ares.components += sn76489 ares.components += ym2413 ares.objects += ares-ms-cpu ares.objects += ares-ms-vdp ares.objects += ares-ms-psg ares.objects += ares-ms-opll ares.objects += ares-ms-system ares.objects += ares-ms-cartridge ares.objects += ares-ms-controller ares.objects += ares-ms-expansion $(object.path)/ares-ms-cpu.o: $(ares.path)/ms/cpu/cpu.cpp $(object.path)/ares-ms-vdp.o: $(ares.path)/ms/vdp/vdp.cpp $(object.path)/ares-ms-psg.o: $(ares.path)/ms/psg/psg.cpp $(object.path)/ares-ms-opll.o: $(ares.path)/ms/opll/opll.cpp $(object.path)/ares-ms-system.o: $(ares.path)/ms/system/system.cpp $(object.path)/ares-ms-cartridge.o: $(ares.path)/ms/cartridge/cartridge.cpp $(object.path)/ares-ms-controller.o: $(ares.path)/ms/controller/controller.cpp $(object.path)/ares-ms-expansion.o: $(ares.path)/ms/expansion/expansion.cpp ares-126/ares/ms/cartridge/000077500000000000000000000000001415063341600156365ustar00rootroot00000000000000ares-126/ares/ms/cartridge/board/000077500000000000000000000000001415063341600167255ustar00rootroot00000000000000ares-126/ares/ms/cartridge/board/board.cpp000066400000000000000000000013021415063341600205140ustar00rootroot00000000000000namespace Board { #include "sega.cpp" #include "codemasters.cpp" #include "korea.cpp" #include "msx.cpp" #include "janggun.cpp" auto Interface::load(Memory::Readable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::load(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::save(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->write(name)) { memory.save(fp); return true; } return false; } } ares-126/ares/ms/cartridge/board/board.hpp000066400000000000000000000012171415063341600205260ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; Interface(Cartridge& cartridge) : cartridge(cartridge) {} virtual ~Interface() = default; virtual auto load() -> void {} virtual auto save() -> void {} virtual auto unload() -> void {} virtual auto read(n16 address, n8 data) -> n8 { return data; } virtual auto write(n16 address, n8 data) -> void {} virtual auto power() -> void {} virtual auto serialize(serializer&) -> void {} auto load(Memory::Readable&, string name) -> bool; auto load(Memory::Writable&, string name) -> bool; auto save(Memory::Writable&, string name) -> bool; Cartridge& cartridge; }; } ares-126/ares/ms/cartridge/board/codemasters.cpp000066400000000000000000000030251415063341600217420ustar00rootroot00000000000000struct Codemasters : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { switch(address) { case 0x0000 ... 0x3fff: return rom.read(romBank[0] << 14 | (n14)address); case 0x4000 ... 0x7fff: return rom.read(romBank[1] << 14 | (n14)address); case 0x8000 ... 0x9fff: return rom.read(romBank[2] << 14 | (n14)address); case 0xa000 ... 0xbfff: if(ram && ramEnable) return ram.read((n13)address); return rom.read(romBank[2] << 14 | (n14)address); } return data; } auto write(n16 address, n8 data) -> void override { switch(address) { case 0x0000 ... 0x3fff: romBank[0] = data; return; case 0x4000 ... 0x7fff: romBank[1] = data; ramEnable = data.bit(7); return; case 0x8000 ... 0x9fff: romBank[2] = data; return; case 0xa000 ... 0xbfff: if(ram && ramEnable) return ram.write((n13)address, data); romBank[2] = data; return; } } auto power() -> void override { romBank[0] = 0; romBank[1] = 1; romBank[2] = 0; //verified ramEnable = 0; } auto serialize(serializer& s) -> void override { s(romBank); s(ramEnable); } n8 romBank[3]; n1 ramEnable; }; ares-126/ares/ms/cartridge/board/janggun.cpp000066400000000000000000000027221415063341600210650ustar00rootroot00000000000000struct Janggun : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { switch(address) { case 0x0000 ... 0x1fff: return rom.read(romBank[0] << 13 | (n13)address); case 0x2000 ... 0x3fff: return rom.read(romBank[1] << 13 | (n13)address); case 0x4000 ... 0x5fff: return rom.read(romBank[2] << 13 | (n13)address); case 0x6000 ... 0x7fff: return rom.read(romBank[3] << 13 | (n13)address); case 0x8000 ... 0x9fff: return rom.read(romBank[4] << 13 | (n13)address); case 0xa000 ... 0xbfff: return rom.read(romBank[5] << 13 | (n13)address); } return data; } auto write(n16 address, n8 data) -> void override { switch(address) { case 0x4000: romBank[2] = data; return; case 0x6000: romBank[3] = data; return; case 0x8000: romBank[4] = data; return; case 0xa000: romBank[5] = data; return; case 0xfffe: romBank[2] = data << 1 | 0; romBank[3] = data << 1 | 1; return; case 0xffff: romBank[4] = data << 1 | 0; romBank[5] = data << 1 | 1; return; } } auto power() -> void override { romBank[0] = 0; romBank[1] = 1; romBank[2] = 2; romBank[3] = 3; romBank[4] = 4; romBank[5] = 5; } auto serialize(serializer& s) -> void override { s(romBank); } n8 romBank[6]; }; ares-126/ares/ms/cartridge/board/korea.cpp000066400000000000000000000014011415063341600205260ustar00rootroot00000000000000struct Korea : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { switch(address) { case 0x0000 ... 0x7fff: return rom.read(address); case 0x8000 ... 0xbfff: return rom.read(romBank << 14 | (n14)address); } return data; } auto write(n16 address, n8 data) -> void override { switch(address) { case 0xa000 ... 0xbfff: romBank = data; return; } } auto power() -> void override { romBank = 0; } auto serialize(serializer& s) -> void override { s(romBank); } n8 romBank; }; ares-126/ares/ms/cartridge/board/msx.cpp000066400000000000000000000027571415063341600202530ustar00rootroot00000000000000struct MSX : Interface { using Interface::Interface; Memory::Readable rom; MSX(Cartridge& cartridge, bool nemesis) : Interface(cartridge), nemesis(nemesis) { } auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { switch(address) { case 0x0000 ... 0x1fff: return rom.read(romBankFixed[0] << 13 | (n13)address); case 0x2000 ... 0x3fff: return rom.read(romBankFixed[1] << 13 | (n13)address); case 0x4000 ... 0x5fff: return rom.read(romBank[0] << 13 | (n13)address); case 0x6000 ... 0x7fff: return rom.read(romBank[1] << 13 | (n13)address); case 0x8000 ... 0x9fff: return rom.read(romBank[2] << 13 | (n13)address); case 0xa000 ... 0xbfff: return rom.read(romBank[3] << 13 | (n13)address); } return data; } auto write(n16 address, n8 data) -> void override { switch(address) { case 0x0000: romBank[2] = data; return; case 0x0001: romBank[3] = data; return; case 0x0002: romBank[0] = data; return; case 0x0003: romBank[1] = data; return; } } auto power() -> void override { romBankFixed[0] = 0 + (nemesis ? rom.size() / 8_KiB - 1 : 0); romBankFixed[1] = 1; romBank[0] = 0; romBank[1] = 1; romBank[2] = 2; romBank[3] = 3; } auto serialize(serializer& s) -> void override { s(romBank); } const bool nemesis; n8 romBankFixed[2]; n8 romBank[4]; }; ares-126/ares/ms/cartridge/board/sega.cpp000066400000000000000000000065471415063341600203640ustar00rootroot00000000000000struct Sega : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { switch(address) { case 0x0000 ... 0x03ff: return rom.read(address); case 0x0400 ... 0x3fff: return rom.read(romBankUpper << 17 | romBank0 << 14 | (n14)address); case 0x4000 ... 0x7fff: return rom.read(romBankUpper << 17 | romBank1 << 14 | (n14)address); case 0x8000 ... 0xbfff: if(ram && ramEnableBank2) { return ram.read(ramBank2 << 14 | (n14)address); } return rom.read(romBankUpper << 17 | romBank2 << 14 | (n14)address); case 0xc000 ... 0xffff: if(ram && ramEnableBank3) { return ram.read((n14)address); } return data; } return data; } auto write(n16 address, n8 data) -> void override { switch(address) { case 0xfffc: if(data.bit(0,1) == 0) romBankShift = 0; if(data.bit(0,1) == 1) romBankShift = 3; if(data.bit(0,1) == 2) romBankShift = 2; if(data.bit(0,1) == 3) romBankShift = 1; ramBank2 = data.bit(2); ramEnableBank2 = data.bit(3); ramEnableBank3 = data.bit(4); romWriteEnable = data.bit(7); break; case 0xfffd: romBankUpper = romBankShift; romBank0 = data; break; case 0xfffe: romBankUpper = romBankShift; romBank1 = data; break; case 0xffff: romBankUpper = romBankShift; romBank2 = data; break; } switch(address) { case 0x0000 ... 0x03ff: if(romWriteEnable) { return rom.write(address, data); } return; case 0x0400 ... 0x3fff: if(romWriteEnable) { return rom.write(romBankUpper << 17 | romBank0 << 14 | (n14)address, data); } return; case 0x4000 ... 0x7fff: if(romWriteEnable) { return rom.write(romBankUpper << 17 | romBank1 << 14 | (n14)address, data); } return; case 0x8000 ... 0xbfff: if(ram && ramEnableBank2) { return ram.write(ramBank2 << 14 | (n14)address, data); } if(romWriteEnable) { return rom.write(romBankUpper << 17 | romBank2 << 14 | (n14)address, data); } return; case 0xc000 ... 0xffff: if(ram && ramEnableBank3) { return ram.write((n14)address, data); } return; } } auto power() -> void override { romBankUpper = 0; romBankShift = 0; ramBank2 = 0; ramEnableBank2 = 0; ramEnableBank3 = 0; romWriteEnable = 0; romBank0 = 0; romBank1 = 1; romBank2 = 2; } auto serialize(serializer& s) -> void override { s(romBankUpper); s(romBankShift); s(ramBank2); s(ramEnableBank2); s(ramEnableBank3); s(romWriteEnable); s(romBank0); s(romBank1); s(romBank2); } //$fffc n2 romBankUpper; //latched romBankShift n2 romBankShift; //for 512K mappers n1 ramBank2; n1 ramEnableBank2; n1 ramEnableBank3; n1 romWriteEnable; //for development hardware with RAM in place of ROM //$fffd n8 romBank0; //$fffe n8 romBank1; //$ffff n8 romBank2; }; ares-126/ares/ms/cartridge/cartridge.cpp000066400000000000000000000031411415063341600203050ustar00rootroot00000000000000#include namespace ares::MasterSystem { Cartridge& cartridge = cartridgeSlot.cartridge; #include "board/board.cpp" #include "slot.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.board = pak->attribute("board"); if(information.board == "Sega") board = new Board::Sega{*this}; if(information.board == "Codemasters") board = new Board::Codemasters{*this}; if(information.board == "Korea") board = new Board::Korea{*this}; if(information.board == "MSX") board = new Board::MSX{*this, 0}; if(information.board == "MSX#A") board = new Board::MSX{*this, 1}; if(information.board == "Janggun") board = new Board::Janggun{*this}; if(!board) board = new Board::Interface{*this}; board->pak = pak; board->load(); power(); } auto Cartridge::disconnect() -> void { if(!node || !board) return; board->unload(); board->pak.reset(); board.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; if(board) board->save(); } auto Cartridge::power() -> void { if(board) board->power(); } auto Cartridge::read(n16 address, n8 data) -> n8 { if(board) return board->read(address, data); return data; } auto Cartridge::write(n16 address, n8 data) -> void { if(board) return board->write(address, data); } } ares-126/ares/ms/cartridge/cartridge.hpp000066400000000000000000000013611415063341600203140ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; unique_pointer board; //private: struct Information { string title; string region; string board; } information; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/ms/cartridge/serialization.cpp000066400000000000000000000001141415063341600212130ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { if(board) s(*board); } ares-126/ares/ms/cartridge/slot.cpp000066400000000000000000000010441415063341600173220ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/ms/cartridge/slot.hpp000066400000000000000000000003471415063341600173340ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/ms/controller/000077500000000000000000000000001415063341600160555ustar00rootroot00000000000000ares-126/ares/ms/controller/controller.cpp000066400000000000000000000002251415063341600207430ustar00rootroot00000000000000#include namespace ares::MasterSystem { #include "port.cpp" #include "gamepad/gamepad.cpp" #include "light-phaser/light-phaser.cpp" } ares-126/ares/ms/controller/controller.hpp000066400000000000000000000010601415063341600207460ustar00rootroot00000000000000// Master System port pinout: // --------------------- // \ (1) (2) (3) (4) (5) / // \ (6) (7) (8) (9) / // ------------------ // pin name bit // 1: D0 0 // 2: D1 1 // 3: D2 2 // 4: D3 3 // 5: VCC - // 6: TL 4 // 7: TH 5 // 8: GND - // 9: TR 6 struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto read() -> n7 { return 0x7f; } virtual auto write(n8 data) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" #include "light-phaser/light-phaser.hpp" ares-126/ares/ms/controller/gamepad/000077500000000000000000000000001415063341600174535ustar00rootroot00000000000000ares-126/ares/ms/controller/gamepad/gamepad.cpp000066400000000000000000000022101415063341600215500ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); one = node->append("1"); two = node->append("2"); } auto Gamepad::read() -> n7 { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(one); platform->input(two); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n7 data; data.bit(0) = !upLatch; data.bit(1) = !downLatch; data.bit(2) = !leftLatch; data.bit(3) = !rightLatch; data.bit(4) = !one->value(); data.bit(5) = !two->value(); data.bit(6) = 1; return data; } ares-126/ares/ms/controller/gamepad/gamepad.hpp000066400000000000000000000005361415063341600215660ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button one; Node::Input::Button two; Gamepad(Node::Port); auto read() -> n7 override; private: n1 yHold; n1 upLatch; n1 downLatch; n1 xHold; n1 leftLatch; n1 rightLatch; }; ares-126/ares/ms/controller/light-phaser/000077500000000000000000000000001415063341600204445ustar00rootroot00000000000000ares-126/ares/ms/controller/light-phaser/light-phaser.cpp000066400000000000000000000014461415063341600235440ustar00rootroot00000000000000LightPhaser::LightPhaser(Node::Port parent) { node = parent->append("Light Phaser"); x = node->append("X"); y = node->append("Y"); trigger = node->append("Trigger"); sprite = node->append("Crosshair"); sprite->setImage(Resource::Sprite::SuperFamicom::CrosshairGreen); vdp.screen->attach(sprite); } LightPhaser::~LightPhaser() { if(vdp.screen) vdp.screen->detach(sprite); } auto LightPhaser::read() -> n7 { sprite->setPosition(64, 64); sprite->setVisible(true); platform->input(trigger); n7 data; data.bit(0) = 1; data.bit(1) = 1; data.bit(2) = 1; data.bit(3) = 1; data.bit(4) = !trigger->value(); data.bit(5) = 1; data.bit(6) = 1; return data; } ares-126/ares/ms/controller/light-phaser/light-phaser.hpp000066400000000000000000000003351415063341600235450ustar00rootroot00000000000000struct LightPhaser : Controller { Node::Video::Sprite sprite; Node::Input::Axis x; Node::Input::Axis y; Node::Input::Button trigger; LightPhaser(Node::Port); ~LightPhaser(); auto read() -> n7 override; }; ares-126/ares/ms/controller/port.cpp000066400000000000000000000017761415063341600175600ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Master System"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad", "Light Phaser"}); } auto ControllerPort::unload() -> void { device.reset(); port.reset(); } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(name == "Light Phaser") device = new LightPhaser(port); if(device) return device->node; return {}; } auto ControllerPort::power() -> void { trDirection = 1; thDirection = 1; trLevel = 1; thLevel = 1; } auto ControllerPort::serialize(serializer& s) -> void { s(trDirection); s(thDirection); s(trLevel); s(thLevel); } ares-126/ares/ms/controller/port.hpp000066400000000000000000000015321415063341600175530ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto power() -> void; auto read() -> n7 { if(device) return device->read(); return 0x7f; } auto write(n8 data) -> void { if(device) return device->write(data); } auto serialize(serializer&) -> void; const string name; auto trInput() const -> bool { return trDirection == 1; } auto thInput() const -> bool { return thDirection == 1; } auto trOutput() const -> bool { return trDirection == 0; } auto thOutput() const -> bool { return thDirection == 0; } n1 trDirection; n1 thDirection; n1 trLevel; n1 thLevel; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/ms/cpu/000077500000000000000000000000001415063341600144615ustar00rootroot00000000000000ares-126/ares/ms/cpu/cpu.cpp000066400000000000000000000026251415063341600157610ustar00rootroot00000000000000#include namespace ares::MasterSystem { CPU cpu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { ram.allocate(8_KiB); node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { ram.reset(); node = {}; debugger = {}; } auto CPU::main() -> void { if(state.nmiLine) { state.nmiLine = 0; //edge-sensitive if(irq(0, 0x0066, 0xff)) { debugger.interrupt("NMI"); } } if(state.irqLine) { //level-sensitive if(irq(1, 0x0038, 0xff)) { debugger.interrupt("IRQ"); } } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::setNMI(bool value) -> void { state.nmiLine = value; } auto CPU::setIRQ(bool value) -> void { state.irqLine = value; } auto CPU::power() -> void { Z80::bus = this; Z80::power(); Thread::create(system.colorburst(), {&CPU::main, this}); PC = 0x0000; //reset vector address SP = 0xfffd; //initial stack pointer location ram.write(0xc000, 0xab); //CPU $3e initial value ram.write(0xc700, 0x9b); //VDP $01 initial value state = {}; bus = {}; bus.biosEnable = (bool)bios; bus.cartridgeEnable = !(bool)bios; if(Model::MasterSystemII()) bus.pullup = 0xff; if(Model::GameGear()) bus.pullup = 0xff; sio = {}; } } ares-126/ares/ms/cpu/cpu.hpp000066400000000000000000000034741415063341600157710ustar00rootroot00000000000000struct CPU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Writable ram; //8KB struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; auto in(n16 address, n8 data) -> void; auto out(n16 address, n8 data) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification io; } tracer; } debugger; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto setNMI(bool value) -> void; auto setIRQ(bool value) -> void; auto power() -> void; //memory.cpp auto mdr() const -> n8; auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; private: struct State { n1 nmiLine; n1 irqLine; } state; struct Bus { n1 ioEnable = 1; n1 biosEnable = 1; n1 ramEnable = 1; n1 cardEnable = 1; n1 cartridgeEnable = 1; n1 expansionEnable = 1; n8 mdr; n8 pullup; n8 pulldown; } bus; //Game Gear only struct SIO { n8 parallelData = 0x7f; n7 dataDirection = 0x7f; n1 nmiEnable = 1; n8 transmitData = 0x00; n8 receiveData = 0xff; n1 transmitFull = 0; n1 receiveFull = 0; n1 framingError = 0; n3 unknown = 0; n2 baudRate = 0; //0 = 4800, 1 = 2400, 2 = 1200, 3 = 300 } sio; }; extern CPU cpu; ares-126/ares/ms/cpu/debugger.cpp000066400000000000000000000103641415063341600167550ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { cpu.ram[address] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "CPU"); tracer.io = parent->append("I/O", "CPU"); } auto CPU::Debugger::instruction() -> void { if(unlikely(tracer.instruction->enabled())) { if(tracer.instruction->address(cpu.PC)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } } auto CPU::Debugger::interrupt(string_view type) -> void { if(unlikely(tracer.interrupt->enabled())) { tracer.interrupt->notify(type); } } auto CPU::Debugger::in(n16 address, n8 data) -> void { if(unlikely(tracer.io->enabled())) { string name = "unknown"; if(0); else if((address & 0xff) == 0x00 && Display::LCD()) name = "input port 2"; else if((address & 0xff) == 0x01 && Display::LCD()) name = "parallel data read"; else if((address & 0xff) == 0x02 && Display::LCD()) name = "data direction and nmi enable"; else if((address & 0xff) == 0x03 && Display::LCD()) name = "transmit data buffer"; else if((address & 0xff) == 0x04 && Display::LCD()) name = "receive data buffer"; else if((address & 0xff) == 0x05 && Display::LCD()) name = "serial control"; else if((address & 0xff) == 0x06 && Display::LCD()) name = "psg balance"; else if((address & 0xc1) == 0x00) name = "bus control"; else if((address & 0xc1) == 0x01 && Display::CRT() && !Region::NTSCJ()) name = "controller tx read"; else if((address & 0xc1) == 0x40) name = "vdp vcounter"; else if((address & 0xc1) == 0x41) name = "vdp hcounter"; else if((address & 0xc1) == 0x80) name = "vdp data"; else if((address & 0xc1) == 0x81) name = "vdp status"; else if((address & 0xff) == 0xf2 && opll.node) name = "opll read"; else if((address & 0xc1) == 0xc0 && Display::CRT()) name = "input port 0"; else if((address & 0xc1) == 0xc1 && Display::CRT()) name = "input port 1"; else if((address & 0xff) == 0xc0 && Display::LCD()) name = "input port 0"; else if((address & 0xff) == 0xc1 && Display::LCD()) name = "input port 1"; else if((address & 0xff) == 0xdc && Display::LCD()) name = "input port 0"; else if((address & 0xff) == 0xdd && Display::LCD()) name = "input port 1"; tracer.io->notify({ "$", hex(address, 2L), " = #$", hex(data, 2L), " @ ", pad(vdp.vcounter(), 3L), ",", pad(vdp.hcounter(), 3L), " ", name }); } } auto CPU::Debugger::out(n16 address, n8 data) -> void { if(unlikely(tracer.io->enabled())) { string name = "unknown"; if(0); else if((address & 0xff) == 0x00 && Display::LCD()) name = "input port 2"; else if((address & 0xff) == 0x01 && Display::LCD()) name = "parallel data write"; else if((address & 0xff) == 0x02 && Display::LCD()) name = "data direction and nmi enable"; else if((address & 0xff) == 0x03 && Display::LCD()) name = "transmit data buffer"; else if((address & 0xff) == 0x04 && Display::LCD()) name = "receive data buffer"; else if((address & 0xff) == 0x05 && Display::LCD()) name = "serial control"; else if((address & 0xff) == 0x06 && Display::LCD()) name = "psg balance"; else if((address & 0xc1) == 0x00) name = "bus control"; else if((address & 0xc1) == 0x01 && Display::CRT()) name = "controller tx write"; else if((address & 0xc0) == 0x40) name = "psg write"; else if((address & 0xc1) == 0x80) name = "vdp data"; else if((address & 0xc1) == 0x81) name = "vdp control"; else if((address & 0xff) == 0xf0 && opll.node) name = "opll address"; else if((address & 0xff) == 0xf1 && opll.node) name = "opll write"; else if((address & 0xff) == 0xf2 && opll.node) name = "audio mute"; tracer.io->notify({ "$", hex(address, 2L), " = #$", hex(data, 2L), " @ ", pad(vdp.vcounter(), 3L), ",", pad(vdp.hcounter(), 3L), " ", name }); } } ares-126/ares/ms/cpu/memory.cpp000066400000000000000000000206361415063341600165040ustar00rootroot00000000000000auto CPU::mdr() const -> n8 { return (bus.mdr | bus.pullup) & ~bus.pulldown; } auto CPU::read(n16 address) -> n8 { n8 data = mdr(); if(address >= 0xc000 && bus.ramEnable) data = ram.read(address); if(bus.biosEnable) data = bios.read(address, data); if(bus.cartridgeEnable) data = cartridge.read(address, data); return bus.mdr = data; } auto CPU::write(n16 address, n8 data) -> void { bus.mdr = data; if(address >= 0xc000 && bus.ramEnable) ram.write(address, data); if(bus.biosEnable) bios.write(address, data); if(bus.cartridgeEnable) cartridge.write(address, data); } //note: the Japanese Mark III / Master System supposedly decodes a0-a7 fully for I/O. //since I don't have explicit confirmation of this, I haven't implemented this yet. auto CPU::in(n16 address) -> n8 { n8 data = mdr(); if(0); else if((address & 0xff) == 0x00 && Display::LCD()) { platform->input(system.controls.start); data.bit(0) = 0; data.bit(1) = 0; data.bit(2) = 0; data.bit(3) = 0; data.bit(4) = 0; data.bit(5) = Region::PAL(); data.bit(6) = !Region::NTSCJ(); data.bit(7) = !system.controls.start->value(); } else if((address & 0xff) == 0x01 && Display::LCD()) { data.bit(0) = sio.dataDirection.bit(0) ? 1 : sio.parallelData.bit(0); data.bit(1) = sio.dataDirection.bit(1) ? 1 : sio.parallelData.bit(1); data.bit(2) = sio.dataDirection.bit(2) ? 1 : sio.parallelData.bit(2); data.bit(3) = sio.dataDirection.bit(3) ? 1 : sio.parallelData.bit(3); data.bit(4) = sio.dataDirection.bit(4) ? 1 : sio.parallelData.bit(4); data.bit(5) = sio.dataDirection.bit(5) ? 1 : sio.parallelData.bit(5); data.bit(6) = sio.dataDirection.bit(6) ? 1 : sio.parallelData.bit(6); data.bit(7) = sio.parallelData.bit(7); } else if((address & 0xff) == 0x02 && Display::LCD()) { data.bit(0,6) = sio.dataDirection; data.bit(7) = sio.nmiEnable; } else if((address & 0xff) == 0x03 && Display::LCD()) { data = sio.transmitData; } else if((address & 0xff) == 0x04 && Display::LCD()) { data = sio.receiveData; } else if((address & 0xff) == 0x05 && Display::LCD()) { data.bit(0) = sio.transmitFull; data.bit(1) = sio.receiveFull; data.bit(2) = sio.framingError; data.bit(3,5) = sio.unknown; data.bit(6,7) = sio.baudRate; } else if((address & 0xff) == 0x06 && Display::LCD()) { data = mdr(); } else if((address & 0xc1) == 0x00) { data = mdr(); } else if((address & 0xc1) == 0x01) { if(bus.ioEnable && Display::CRT() && !Region::NTSCJ()) { data.bit(0) = controllerPort1.trDirection; data.bit(1) = controllerPort1.thDirection; data.bit(2) = controllerPort2.trDirection; data.bit(3) = controllerPort2.thDirection; data.bit(4) = controllerPort1.trLevel; data.bit(5) = controllerPort1.thLevel; data.bit(6) = controllerPort2.trLevel; data.bit(7) = controllerPort2.thLevel; } else { data = mdr(); } } else if((address & 0xc1) == 0x40) { data = vdp.vcounterQuery(); } else if((address & 0xc1) == 0x41) { data = vdp.hcounterQuery(); } else if((address & 0xc1) == 0x80) { data = vdp.data(); } else if((address & 0xc1) == 0x81) { data = vdp.status(); } else if((address & 0xff) == 0xf2 && opll.node) { if(psg.io.mute == 0 && opll.io.mute == 0) data.bit(0,1) = 3; if(psg.io.mute == 0 && opll.io.mute == 1) data.bit(0,1) = 0; if(psg.io.mute == 1 && opll.io.mute == 0) data.bit(0,1) = 1; if(psg.io.mute == 1 && opll.io.mute == 1) data.bit(0,1) = 2; data.bit(2) = 0; data.bit(3) = 0; data.bit(4) = 0; data.bit(5) = vdp.ccounter().bit( 3); data.bit(6) = vdp.ccounter().bit( 7); data.bit(7) = vdp.ccounter().bit(11); } else if((address & 0xc1) == 0xc0 && Display::CRT()) { auto port1 = controllerPort1.read(); auto port2 = controllerPort2.read(); data.bit(0,5) = port1.bit(0,5); data.bit(6,7) = port2.bit(0,1); if(controllerPort1.trOutput()) data.bit(5) = controllerPort1.trLevel; } else if((address & 0xc1) == 0xc1 && Display::CRT()) { auto port1 = controllerPort1.read(); auto port2 = controllerPort2.read(); data.bit(0,3) = port2.bit(2,5); data.bit(4) = Region::NTSCJ() ? 1 : !system.controls.reset->value(); data.bit(5) = 1; data.bit(6) = port1.bit(6); data.bit(7) = port2.bit(6); if(controllerPort2.trOutput()) data.bit(3) = controllerPort2.trLevel; if(controllerPort1.thOutput()) data.bit(6) = controllerPort1.thLevel; if(controllerPort2.thOutput()) data.bit(7) = controllerPort2.thLevel; } else if(((address & 0xff) == 0xc0 || (address & 0xff) == 0xdc) && Display::LCD()) { system.controls.poll(); data.bit(0) = !system.controls.upLatch; data.bit(1) = !system.controls.downLatch; data.bit(2) = !system.controls.leftLatch; data.bit(3) = !system.controls.rightLatch; data.bit(4) = !system.controls.one->value(); data.bit(5) = !system.controls.two->value(); data.bit(6) = sio.dataDirection.bit(0) ? 1 : sio.parallelData.bit(0); data.bit(7) = sio.dataDirection.bit(1) ? 1 : sio.parallelData.bit(1); } else if(((address & 0xff) == 0xc1 || (address & 0xff) == 0xdd) && Display::LCD()) { data.bit(0) = sio.dataDirection.bit(2) ? 1 : sio.parallelData.bit(2); data.bit(1) = sio.dataDirection.bit(3) ? 1 : sio.parallelData.bit(3); data.bit(2) = sio.dataDirection.bit(4) ? 1 : sio.parallelData.bit(4); data.bit(3) = sio.dataDirection.bit(5) ? 1 : sio.parallelData.bit(5); data.bit(4) = 1; data.bit(5) = 1; data.bit(6) = 1; data.bit(7) = sio.dataDirection.bit(6) ? 1 : sio.parallelData.bit(6); } debugger.in(address, data); return data; } auto CPU::out(n16 address, n8 data) -> void { if(0); else if((address & 0xff) == 0x00 && Display::LCD()) { //input port 2 (read-only) } else if((address & 0xff) == 0x01 && Display::LCD()) { sio.parallelData = data; } else if((address & 0xff) == 0x02 && Display::LCD()) { sio.dataDirection = data.bit(0,6); sio.nmiEnable = data.bit(7); } else if((address & 0xff) == 0x03 && Display::LCD()) { sio.transmitData = data; } else if((address & 0xff) == 0x04 && Display::LCD()) { //receive data buffer (read-only) } else if((address & 0xff) == 0x05 && Display::LCD()) { sio.transmitFull = 0; sio.receiveFull = 0; sio.framingError = 0; sio.unknown = data.bit(3,5); sio.baudRate = data.bit(6,7); } else if((address & 0xff) == 0x06 && Display::LCD()) { psg.balance(data); } else if((address & 0xc1) == 0x00) { bus.ioEnable = !data.bit(2); bus.biosEnable = !data.bit(3); bus.ramEnable = !data.bit(4); bus.cardEnable = !data.bit(5); bus.cartridgeEnable = !data.bit(6); bus.expansionEnable = !data.bit(7); } else if((address & 0xc1) == 0x01 && Display::CRT()) { auto thLevel1 = controllerPort1.thLevel; auto thLevel2 = controllerPort2.thLevel; controllerPort1.trDirection = data.bit(0); controllerPort1.thDirection = data.bit(1); controllerPort2.trDirection = data.bit(2); controllerPort2.thDirection = data.bit(3); if(Region::NTSCJ()) { //NTSC-J region sets thLevel to thDirection controllerPort1.thLevel = controllerPort1.thDirection; controllerPort2.thLevel = controllerPort2.thDirection; } else { //NTSC-U and PAL regions allow values to be set directly controllerPort1.trLevel = data.bit(4); controllerPort1.thLevel = data.bit(5); controllerPort2.trLevel = data.bit(6); controllerPort2.thLevel = data.bit(7); } if(!thLevel1 && controllerPort1.thLevel) vdp.hcounterLatch(); if(!thLevel2 && controllerPort2.thLevel) vdp.hcounterLatch(); } else if((address & 0xc0) == 0x40) { psg.write(data); } else if((address & 0xc1) == 0x80) { vdp.data(data); } else if((address & 0xc1) == 0x81) { vdp.control(data); } else if((address & 0xff) == 0xf0 && opll.node) { opll.address(data); } else if((address & 0xff) == 0xf1 && opll.node) { opll.write(data); } else if((address & 0xff) == 0xf2 && opll.node) { if(Model::MarkIII()) data.bit(1) = 0; if(data.bit(0,1) == 0) psg.io.mute = 0, opll.io.mute = 1; if(data.bit(0,1) == 1) psg.io.mute = 1, opll.io.mute = 0; if(data.bit(0,1) == 2) psg.io.mute = 1, opll.io.mute = 1; if(data.bit(0,1) == 3) psg.io.mute = 0, opll.io.mute = 0; } debugger.out(address, data); return; } ares-126/ares/ms/cpu/serialization.cpp000066400000000000000000000010361415063341600200420ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); s(ram); s(state.nmiLine); s(state.irqLine); s(bus.ioEnable); s(bus.biosEnable); s(bus.ramEnable); s(bus.cardEnable); s(bus.cartridgeEnable); s(bus.expansionEnable); s(bus.pullup); s(bus.pulldown); s(bus.mdr); s(sio.parallelData); s(sio.dataDirection); s(sio.nmiEnable); s(sio.transmitData); s(sio.receiveData); s(sio.transmitFull); s(sio.receiveFull); s(sio.framingError); s(sio.unknown); s(sio.baudRate); } ares-126/ares/ms/expansion/000077500000000000000000000000001415063341600156765ustar00rootroot00000000000000ares-126/ares/ms/expansion/expansion.cpp000066400000000000000000000002451415063341600204070ustar00rootroot00000000000000#include namespace ares::MasterSystem { #include "port.cpp" #include "fmsound/fmsound.cpp" Expansion::Expansion() { } Expansion::~Expansion() { } } ares-126/ares/ms/expansion/expansion.hpp000066400000000000000000000002771415063341600204210ustar00rootroot00000000000000struct Expansion { Node::Peripheral node; Expansion(); virtual ~Expansion(); virtual auto serialize(serializer& s) -> void {} }; #include "port.hpp" #include "fmsound/fmsound.hpp" ares-126/ares/ms/expansion/fmsound/000077500000000000000000000000001415063341600173515ustar00rootroot00000000000000ares-126/ares/ms/expansion/fmsound/fmsound.cpp000066400000000000000000000004041415063341600215260ustar00rootroot00000000000000FMSoundUnit::FMSoundUnit(Node::Port parent) { node = parent->append("FM Sound Unit"); opll.load(node); opll.power(); } FMSoundUnit::~FMSoundUnit() { opll.unload(); } auto FMSoundUnit::serialize(serializer& s) -> void { s(opll); } ares-126/ares/ms/expansion/fmsound/fmsound.hpp000066400000000000000000000002041415063341600215310ustar00rootroot00000000000000struct FMSoundUnit : Expansion { FMSoundUnit(Node::Port); ~FMSoundUnit(); auto serialize(serializer& s) -> void override; }; ares-126/ares/ms/expansion/port.cpp000066400000000000000000000013741415063341600173730ustar00rootroot00000000000000ExpansionPort expansionPort{"Expansion Port"}; ExpansionPort::ExpansionPort(string name) : name(name) { } auto ExpansionPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Master System"); port->setType("Expansion"); port->setHotSwappable(false); port->setAllocate([&](auto name) { return allocate(name); }); } auto ExpansionPort::unload() -> void { device.reset(); port.reset(); } auto ExpansionPort::allocate(string name) -> Node::Peripheral { if(name == "FM Sound Unit") device = new FMSoundUnit(port); if(device) return device->node; return {}; } auto ExpansionPort::power() -> void { } auto ExpansionPort::serialize(serializer& s) -> void { if(device) return device->serialize(s); } ares-126/ares/ms/expansion/port.hpp000066400000000000000000000005411415063341600173730ustar00rootroot00000000000000struct ExpansionPort { Node::Port port; unique_pointer device; ExpansionPort(string name); auto load(Node::Object parent) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto power() -> void; auto serialize(serializer&) -> void; const string name; }; extern ExpansionPort expansionPort; ares-126/ares/ms/ms.hpp000066400000000000000000000024231415063341600150230ustar00rootroot00000000000000#pragma once //started: 2016-08-17 #include #include #include #include namespace ares::MasterSystem { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto MarkIII() -> bool; inline static auto MasterSystemI() -> bool; inline static auto MasterSystemII() -> bool; inline static auto GameGear() -> bool; }; struct Device { inline static auto MasterSystem() -> bool; inline static auto GameGear() -> bool; }; struct Mode { inline static auto MasterSystem() -> bool; inline static auto GameGear() -> bool; }; struct Display { inline static auto CRT() -> bool; inline static auto LCD() -> bool; }; struct Region { inline static auto NTSCJ() -> bool; inline static auto NTSCU() -> bool; inline static auto PAL() -> bool; }; #include #include #include #include #include #include #include #include } ares-126/ares/ms/opll/000077500000000000000000000000001415063341600146405ustar00rootroot00000000000000ares-126/ares/ms/opll/opll.cpp000066400000000000000000000014501415063341600163120ustar00rootroot00000000000000#include namespace ares::MasterSystem { OPLL opll; #include "serialization.cpp" auto OPLL::load(Node::Object parent) -> void { node = parent->append("OPLL"); stream = node->append("YM2413"); stream->setChannels(1); stream->setFrequency(system.colorburst() / 72.0); stream->addHighPassFilter(20.0, 1); } auto OPLL::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto OPLL::main() -> void { auto output = YM2413::clock(); if(io.mute) output = 0.0; stream->frame(output); step(1); } auto OPLL::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto OPLL::power() -> void { YM2413::power(); Thread::create(system.colorburst() / 72.0, {&OPLL::main, this}); io = {}; } } ares-126/ares/ms/opll/opll.hpp000066400000000000000000000005511415063341600163200ustar00rootroot00000000000000struct OPLL : YM2413, Thread { Node::Object node; Node::Audio::Stream stream; //opll.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 mute = 1; } io; }; extern OPLL opll; ares-126/ares/ms/opll/serialization.cpp000066400000000000000000000001561415063341600202230ustar00rootroot00000000000000auto OPLL::serialize(serializer& s) -> void { YM2413::serialize(s); Thread::serialize(s); s(io.mute); } ares-126/ares/ms/psg/000077500000000000000000000000001415063341600144635ustar00rootroot00000000000000ares-126/ares/ms/psg/psg.cpp000066400000000000000000000034011415063341600157560ustar00rootroot00000000000000#include namespace ares::MasterSystem { PSG psg; #include "serialization.cpp" auto PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(Device::MasterSystem() ? 1 : 2); stream->setFrequency(system.colorburst() / 16.0); stream->addHighPassFilter(20.0, 1); } auto PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto PSG::main() -> void { auto channels = SN76489::clock(); if(Device::MasterSystem()) { f64 output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; output += volume[channels[3]]; if(io.mute) output = 0.0; stream->frame(output / 4.0); } if(Device::GameGear()) { f64 left = 0.0; if(io.enable.bit(4)) left += volume[channels[0]]; if(io.enable.bit(5)) left += volume[channels[1]]; if(io.enable.bit(6)) left += volume[channels[2]]; if(io.enable.bit(7)) left += volume[channels[3]]; f64 right = 0.0; if(io.enable.bit(0)) right += volume[channels[0]]; if(io.enable.bit(1)) right += volume[channels[1]]; if(io.enable.bit(2)) right += volume[channels[2]]; if(io.enable.bit(3)) right += volume[channels[3]]; stream->frame(left / 4.0, right / 4.0); } step(1); } auto PSG::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto PSG::balance(n8 data) -> void { if(Device::GameGear()) { io.enable = data; } } auto PSG::power() -> void { SN76489::power(); Thread::create(system.colorburst() / 16.0, {&PSG::main, this}); io = {}; for(u32 level : range(15)) { volume[level] = pow(2, level * -2.0 / 6.0); } volume[15] = 0; } } ares-126/ares/ms/psg/psg.hpp000066400000000000000000000006661415063341600157750ustar00rootroot00000000000000struct PSG : SN76489, Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto balance(n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 mute = 0; n8 enable = 0xff; }; IO io; f64 volume[16]; }; extern PSG psg; ares-126/ares/ms/psg/serialization.cpp000066400000000000000000000001761415063341600200500ustar00rootroot00000000000000auto PSG::serialize(serializer& s) -> void { SN76489::serialize(s); Thread::serialize(s); s(io.mute); s(io.enable); } ares-126/ares/ms/system/000077500000000000000000000000001415063341600152165ustar00rootroot00000000000000ares-126/ares/ms/system/bios.cpp000066400000000000000000000017001415063341600166540ustar00rootroot00000000000000auto BIOS::load(Node::Object parent) -> void { if(auto fp = system.pak->read("bios.rom")) { rom.allocate(fp->size()); rom.load(fp); } } auto BIOS::unload() -> void { rom.reset(); } auto BIOS::read(n16 address, n8 data) -> n8 { if(!rom) return data; switch(address) { case 0x0000 ... 0x03ff: return rom.read(address); case 0x0400 ... 0x3fff: return rom.read(romBank[0] << 14 | (n14)address); case 0x4000 ... 0x7fff: return rom.read(romBank[1] << 14 | (n14)address); case 0x8000 ... 0xbfff: return rom.read(romBank[2] << 14 | (n14)address); } return data; } auto BIOS::write(n16 address, n8 data) -> void { if(!rom) return; switch(address) { case 0xfffd: romBank[0] = data; return; case 0xfffe: romBank[1] = data; return; case 0xffff: romBank[2] = data; return; } } auto BIOS::power() -> void { romBank[0] = 0; romBank[1] = 1; romBank[2] = 2; } auto BIOS::serialize(serializer& s) -> void { s(romBank); } ares-126/ares/ms/system/controls.cpp000066400000000000000000000034661415063341600175760ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); if(Device::MasterSystem()) { if(MasterSystem::Region::NTSCJ() == 1) rapid = node->append("Rapid"); if(MasterSystem::Region::NTSCJ() == 0) reset = node->append("Reset"); pause = node->append("Pause"); } if(Device::GameGear()) { up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); one = node->append("1"); two = node->append("2"); start = node->append("Start"); } } auto System::Controls::poll() -> void { if(Device::MasterSystem()) { if(MasterSystem::Region::NTSCJ() == 1) platform->input(rapid); if(MasterSystem::Region::NTSCJ() == 0) platform->input(reset); auto paused = pause->value(); platform->input(pause); if(!paused && pause->value()) cpu.setNMI(1); } if(Device::GameGear()) { auto paused = start->value(); platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(one); platform->input(two); platform->input(start); if(!paused && start->value()) { if(Mode::MasterSystem()) cpu.setNMI(1); } if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } } ares-126/ares/ms/system/serialization.cpp000066400000000000000000000025161415063341600206030ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(bios); s(cartridge); s(cpu); s(vdp); s(psg); if(Device::MasterSystem()) { s(controllerPort1); s(controllerPort2); if(MasterSystem::Region::NTSCJ()) { if(MasterSystem::Model::MarkIII()) { s(expansionPort); } if(MasterSystem::Model::MasterSystemI()) { s(opll); } if(MasterSystem::Model::MasterSystemII()) { s(opll); } } } } ares-126/ares/ms/system/system.cpp000066400000000000000000000102201415063341600172410ustar00rootroot00000000000000#include namespace ares::MasterSystem { auto enumerate() -> vector { return { "[Sega] Mark III (NTSC-J)", "[Sega] Master System (NTSC-J)", "[Sega] Master System (NTSC-U)", "[Sega] Master System (PAL)", "[Sega] Master System II (NTSC-U)", "[Sega] Master System II (PAL)", "[Sega] Game Gear", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; BIOS bios; System system; #include "bios.cpp" #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.pak) { return cartridge.title(); } if(bios.rom) { return "(BIOS)"; } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); controls.poll(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Mark III")) { information.name = "Master System"; information.model = Model::MarkIII; } if(name.find("Master System")) { information.name = "Master System"; information.model = Model::MasterSystemI; } if(name.find("Master System II")) { information.name = "Master System"; information.model = Model::MasterSystemII; } if(name.find("Game Gear")) { information.name = "Game Gear"; information.model = Model::GameGear; } if(name.find("NTSC-J")) { information.region = Region::NTSCJ; information.colorburst = Constants::Colorburst::NTSC; } if(name.find("NTSC-U")) { information.region = Region::NTSCU; information.colorburst = Constants::Colorburst::NTSC; } if(name.find("PAL")) { information.region = Region::PAL; information.colorburst = Constants::Colorburst::PAL * 4.0 / 5.0; } if(MasterSystem::Model::GameGear()) { information.region = Region::NTSCJ; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; scheduler.reset(); controls.load(node); bios.load(node); cartridgeSlot.load(node); cpu.load(node); vdp.load(node); psg.load(node); if(Device::MasterSystem()) { controllerPort1.load(node); controllerPort2.load(node); if(MasterSystem::Region::NTSCJ()) { if(MasterSystem::Model::MarkIII()) { expansionPort.load(node); } if(MasterSystem::Model::MasterSystemI()) { opll.load(node); } if(MasterSystem::Model::MasterSystemII()) { opll.load(node); } } } return true; } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); cartridgeSlot.unload(); cpu.unload(); vdp.unload(); psg.unload(); if(Device::MasterSystem()) { controllerPort1.unload(); controllerPort2.unload(); if(MasterSystem::Region::NTSCJ()) { if(MasterSystem::Model::MarkIII()) { expansionPort.unload(); } if(MasterSystem::Model::MasterSystemI()) { opll.unload(); } if(MasterSystem::Model::MasterSystemII()) { opll.unload(); } } } bios.unload(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); if(cartridge.pak) { information.ms = cartridge.pak->attribute("ms").boolean(); } bios.power(); cartridge.power(); cpu.power(); vdp.power(); psg.power(); if(Device::MasterSystem()) { controllerPort1.power(); controllerPort2.power(); if(MasterSystem::Region::NTSCJ()) { if(MasterSystem::Model::MarkIII()) { expansionPort.power(); } if(MasterSystem::Model::MasterSystemI()) { opll.power(); } if(MasterSystem::Model::MasterSystemII()) { opll.power(); } } } scheduler.power(cpu); } } ares-126/ares/ms/system/system.hpp000066400000000000000000000062361415063341600172620ustar00rootroot00000000000000struct BIOS { Memory::Readable rom; explicit operator bool() const { return (bool)rom; } //bios.cpp auto load(Node::Object) -> void; auto unload() -> void; auto read(n16 address, n8 data) -> n8; auto write(n16 address, n8 data) -> void; auto power() -> void; auto serialize(serializer&) -> void; n8 romBank[3]; }; struct System { Node::System node; VFS::Pak pak; struct Controls { Node::Object node; //Master System Node::Input::Button rapid; //NTSC-J only (unemulated) Node::Input::Button reset; //NTSC-U and PAL only Node::Input::Button pause; //Game Gear Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button one; Node::Input::Button two; Node::Input::Button start; auto load(Node::Object) -> void; auto poll() -> void; n1 yHold; n1 upLatch; n1 downLatch; n1 xHold; n1 leftLatch; n1 rightLatch; } controls; enum class Model : u32 { MarkIII, MasterSystemI, MasterSystemII, GameGear }; enum class Region : u32 { NTSCJ, NTSCU, PAL }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto region() const -> Region { return information.region; } auto colorburst() const -> double { return information.colorburst; } auto ms() const -> bool { return information.ms; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Master System"; Model model = Model::MasterSystemI; Region region = Region::NTSCJ; f64 colorburst = Constants::Colorburst::NTSC; bool ms = false; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern BIOS bios; extern System system; auto Model::MarkIII() -> bool { return system.model() == System::Model::MarkIII; } auto Model::MasterSystemI() -> bool { return system.model() == System::Model::MasterSystemI; } auto Model::MasterSystemII() -> bool { return system.model() == System::Model::MasterSystemII; } auto Model::GameGear() -> bool { return system.model() == System::Model::GameGear; } auto Device::MasterSystem() -> bool { return system.model() != System::Model::GameGear; } auto Device::GameGear() -> bool { return system.model() == System::Model::GameGear; } auto Mode::MasterSystem() -> bool { return !Mode::GameGear(); } auto Mode::GameGear() -> bool { return system.model() == System::Model::GameGear && !system.ms(); } auto Display::CRT() -> bool { return system.model() != System::Model::GameGear; } auto Display::LCD() -> bool { return system.model() == System::Model::GameGear; } auto Region::NTSCJ() -> bool { return system.region() == System::Region::NTSCJ; } auto Region::NTSCU() -> bool { return system.region() == System::Region::NTSCU; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/ms/vdp/000077500000000000000000000000001415063341600144635ustar00rootroot00000000000000ares-126/ares/ms/vdp/background.cpp000066400000000000000000000104571415063341600173150ustar00rootroot00000000000000auto VDP::Background::setup(n9 voffset) -> void { if(!self.displayEnable()) return; latch.nameTableAddress = io.nameTableAddress; latch.hscroll = io.hscroll; latch.vscroll = io.vscroll; } auto VDP::Background::run(n8 hoffset, n9 voffset) -> void { output = {}; if(!self.displayEnable()) return; switch(self.videoMode()) { case 0b0000: return graphics1(hoffset, voffset); case 0b0001: return; case 0b0010: return graphics2(hoffset, voffset); case 0b0011: return; case 0b0100: return; case 0b0101: return; case 0b0110: return; case 0b0111: return; case 0b1000: return graphics3(hoffset, voffset, 192); case 0b1001: return; case 0b1010: return graphics3(hoffset, voffset, 192); case 0b1011: return graphics3(hoffset, voffset, 224); case 0b1100: return graphics3(hoffset, voffset, 192); case 0b1101: return; case 0b1110: return graphics3(hoffset, voffset, 240); case 0b1111: return graphics3(hoffset, voffset, 192); } } auto VDP::Background::graphics1(n8 hoffset, n9 voffset) -> void { n14 nameTableAddress; nameTableAddress.bit( 0, 4) = hoffset.bit(3,7); nameTableAddress.bit( 5, 9) = voffset.bit(3,7); nameTableAddress.bit(10,13) = latch.nameTableAddress; n8 pattern = self.vram[nameTableAddress]; n14 patternAddress; patternAddress.bit( 0, 2) = voffset.bit(0,2); patternAddress.bit( 3,10) = pattern; patternAddress.bit(11,13) = io.patternTableAddress; n14 colorAddress; //d5 = 0 colorAddress.bit(0, 4) = pattern.bit(3,7); colorAddress.bit(6,13) = io.colorTableAddress; n8 color = self.vram[colorAddress]; n3 index = hoffset ^ 7; if(!self.vram[patternAddress].bit(index)) { output.color = color.bit(0,3); } else { output.color = color.bit(4,7); } } auto VDP::Background::graphics2(n8 hoffset, n9 voffset) -> void { n14 nameTableAddress; nameTableAddress.bit( 0, 4) = hoffset.bit(3,7); nameTableAddress.bit( 5, 9) = voffset.bit(3,7); nameTableAddress.bit(10,13) = latch.nameTableAddress; n8 pattern = self.vram[nameTableAddress]; n14 patternAddress; patternAddress.bit(0, 2) = voffset.bit(0,2); patternAddress.bit(3,10) = pattern; if(voffset >= 64 && voffset <= 127) patternAddress.bit(11) = io.patternTableAddress.bit(0); if(voffset >= 128 && voffset <= 191) patternAddress.bit(12) = io.patternTableAddress.bit(1); n14 colorAddress = patternAddress; patternAddress.bit(13) = io.patternTableAddress.bit(2); colorAddress.bit(13) = io.colorTableAddress.bit(7); n8 colorMask = io.colorTableAddress.bit(0,6) << 1 | 1; n8 color = self.vram[colorAddress]; n3 index = hoffset ^ 7; if(!self.vram[patternAddress].bit(index)) { output.color = color.bit(0,3); } else { output.color = color.bit(4,7); } } auto VDP::Background::graphics3(n8 hoffset, n9 voffset, u32 vlines) -> void { if(hoffset < latch.hscroll.bit(0,2)) return; if(!io.hscrollLock || voffset >= 16) hoffset -= latch.hscroll; if(!io.vscrollLock || hoffset <= 191) voffset += latch.vscroll; n14 nameTableAddress; if(vlines == 192) { voffset %= 224; nameTableAddress = latch.nameTableAddress >> 1 << 11; nameTableAddress += voffset >> 3 << 6; nameTableAddress += hoffset >> 3 << 1; if(self.revision->value() == 1) { //SMS1 quirk: bit 0 of name table base address acts as a mask nameTableAddress.bit(10) &= latch.nameTableAddress.bit(0); } } else { voffset %= 256; nameTableAddress = latch.nameTableAddress >> 2 << 12 | 0x0700; nameTableAddress += voffset >> 3 << 6; nameTableAddress += hoffset >> 3 << 1; } n16 pattern; pattern.byte(0) = self.vram[nameTableAddress | 0]; pattern.byte(1) = self.vram[nameTableAddress | 1]; if(pattern.bit( 9)) hoffset ^= 7; //hflip if(pattern.bit(10)) voffset ^= 7; //vflip output.palette = pattern.bit(11); output.priority = pattern.bit(12); n14 patternAddress; patternAddress.bit(2, 4) = voffset.bit(0,2); patternAddress.bit(5,13) = pattern.bit(0,8); n3 index = hoffset ^ 7; output.color.bit(0) = self.vram[patternAddress | 0].bit(index); output.color.bit(1) = self.vram[patternAddress | 1].bit(index); output.color.bit(2) = self.vram[patternAddress | 2].bit(index); output.color.bit(3) = self.vram[patternAddress | 3].bit(index); if(output.color == 0) output.priority = 0; } auto VDP::Background::power() -> void { io = {}; latch = {}; output = {}; } ares-126/ares/ms/vdp/color.cpp000066400000000000000000000010211415063341600162770ustar00rootroot00000000000000auto VDP::colorMasterSystem(n32 color) -> n64 { n2 B = color >> 4; n2 G = color >> 2; n2 R = color >> 0; n64 r = image::normalize(R, 2, 16); n64 g = image::normalize(G, 2, 16); n64 b = image::normalize(B, 2, 16); return r << 32 | g << 16 | b << 0; } auto VDP::colorGameGear(n32 color) -> n64 { n4 B = color >> 8; n4 G = color >> 4; n4 R = color >> 0; n64 r = image::normalize(R, 4, 16); n64 g = image::normalize(G, 4, 16); n64 b = image::normalize(B, 4, 16); return r << 32 | g << 16 | b << 0; } ares-126/ares/ms/vdp/dac.cpp000066400000000000000000000032501415063341600157160ustar00rootroot00000000000000auto VDP::DAC::setup(n8 y) -> void { output = self.screen->pixels().data() + (24 + y) * 256; } auto VDP::DAC::run(n8 x, n8 y) -> void { n12 color = palette(16 | io.backdropColor); if(!io.leftClip || x >= 8) { if(self.background.output.priority || !self.sprite.output.color) { color = palette(self.background.output.palette << 4 | self.background.output.color); } else if(self.sprite.output.color) { color = palette(16 | self.sprite.output.color); } } if(!self.displayEnable()) color = 0; output[x] = color; } auto VDP::DAC::palette(n5 index) -> n12 { //TMS9918A colors are approximated by converting to RGB6 palette colors static const n6 palette[16] = { 0x00, 0x00, 0x08, 0x0c, 0x10, 0x30, 0x01, 0x3c, 0x02, 0x03, 0x05, 0x0f, 0x04, 0x33, 0x15, 0x3f, }; if(Device::MasterSystem()) { if(!self.videoMode().bit(3)) return palette[index.bit(0,3)]; return self.cram[index].bit(0,5); } if(Mode::MasterSystem()) { n6 color = self.cram[index]; if(!self.videoMode().bit(3)) color = palette[index.bit(0,3)]; n4 r = color.bit(0,1) << 0 | color.bit(0,1) << 2; n4 g = color.bit(2,3) << 0 | color.bit(2,3) << 2; n4 b = color.bit(4,5) << 0 | color.bit(4,5) << 2; return r << 0 | g << 4 | b << 8; } if(Mode::GameGear()) { if(!self.videoMode().bit(3)) { n6 color = palette[index.bit(0,3)]; n4 r = color.bit(0,1) << 0 | color.bit(0,1) << 2; n4 g = color.bit(2,3) << 0 | color.bit(2,3) << 2; n4 b = color.bit(4,5) << 0 | color.bit(4,5) << 2; return r << 0 | g << 4 | b << 8; } return self.cram[index]; } return 0; } auto VDP::DAC::power() -> void { io = {}; output = nullptr; } ares-126/ares/ms/vdp/debugger.cpp000066400000000000000000000031241415063341600167530ustar00rootroot00000000000000auto VDP::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("VDP VRAM"); memory.vram->setSize(vdp.vram.size()); memory.vram->setRead([&](u32 address) -> u8 { return vdp.vram[address]; }); memory.vram->setWrite([&](u32 address, u8 data) -> void { vdp.vram[address] = data; }); memory.cram = parent->append("VDP CRAM"); memory.cram->setSize(vdp.cram.size()); memory.cram->setRead([&](u32 address) -> u8 { return vdp.cram[address]; }); memory.cram->setWrite([&](u32 address, u8 data) -> void { vdp.cram[address] = data; }); tracer.io = parent->append("I/O", "VDP"); } auto VDP::Debugger::io(n4 register, n8 data) -> void { if(unlikely(tracer.io->enabled())) { static const string name[16] = { /* $0 */ "mode control 1", /* $1 */ "mode control 2", /* $2 */ "name table base address", /* $3 */ "color table base address", /* $4 */ "pattern table base address", /* $5 */ "sprite attribute table base address", /* $6 */ "sprite pattern table base address", /* $7 */ "backdrop color", /* $8 */ "horizontal scroll offset", /* $9 */ "vertical scroll offset", /* $a */ "line counter", /* $b */ "unused", /* $c */ "unused", /* $d */ "unused", /* $e */ "unused", /* $f */ "unused", }; tracer.io->notify({ "$", hex(register, 2L), " = #$", hex(data, 2L), " @ ", pad(vdp.vcounter(), 3L), ",", pad(vdp.hcounter(), 3L), " ", name[register] }); } } ares-126/ares/ms/vdp/io.cpp000066400000000000000000000101651415063341600156010ustar00rootroot00000000000000auto VDP::vcounterQuery() -> n8 { if(Region::NTSCJ() || Region::NTSCU()) { switch(videoMode()) { default: return io.vcounter <= 218 ? io.vcounter : io.vcounter - 6; //256x192 case 0b1011: return io.vcounter <= 234 ? io.vcounter : io.vcounter - 6; //256x224 case 0b1110: return io.vcounter; //256x240 } } if(Region::PAL()) { switch(videoMode()) { default: return io.vcounter <= 242 ? io.vcounter : io.vcounter - 57; //256x192 case 0b1011: return io.vcounter <= 258 ? io.vcounter : io.vcounter - 57; //256x224 case 0b1110: return io.vcounter <= 266 ? io.vcounter : io.vcounter - 56; //256x240 } } unreachable; } auto VDP::hcounterQuery() -> n8 { return latch.hcounter - 94 >> 2; } auto VDP::hcounterLatch() -> void { latch.hcounter = io.hcounter; } auto VDP::ccounter() -> n12 { return io.ccounter; } auto VDP::data() -> n8 { latch.control = 0; auto data = latch.vram; latch.vram = vram[io.address++]; return data; } auto VDP::status() -> n8 { latch.control = 0; n8 data; data.bit(0,4) = sprite.io.overflowIndex; data.bit(5) = sprite.io.collision; data.bit(6) = sprite.io.overflow; data.bit(7) = irq.frame.pending; sprite.io.overflowIndex = 0b11111; sprite.io.collision = 0; sprite.io.overflow = 0; irq.frame.pending = 0; irq.line.pending = 0; irq.poll(); return data; } auto VDP::data(n8 data) -> void { latch.control = 0; // Writes to data port set VDP read buffer latch.vram = data; if(io.code <= 2) { vram[io.address] = data; } else { if(Mode::MasterSystem()) { //writes immediate store 6-bits into CRAM cram[io.address] = data.bit(0,5); } if(Mode::GameGear()) { //even writes store 8-bit data into a latch; odd writes store 12-bits into CRAM if(io.address.bit(0) == 0) { latch.cram = data; } else { cram[io.address >> 1] = data.bit(0,3) << 8 | latch.cram; } } } io.address++; } auto VDP::control(n8 data) -> void { if(latch.control == 0) { latch.control = 1; io.address.bit(0,7) = data.bit(0,7); return; } latch.control = 0; io.address.bit(8,13) = data.bit(0,5); io.code.bit(0,1) = data.bit(6,7); if(io.code == 0) { latch.vram = vram[io.address++]; } if(io.code == 2) { registerWrite(io.address.bit(11,8), io.address.bit(7,0)); } } auto VDP::registerWrite(n4 address, n8 data) -> void { debugger.io(address, data); switch(address) { case 0x0: //mode control 1 dac.io.externalSync = data.bit(0); io.videoMode.bit(1) = data.bit(1); io.videoMode.bit(3) = data.bit(2); sprite.io.shift = data.bit(3); irq.line.enable = data.bit(4); dac.io.leftClip = data.bit(5); background.io.hscrollLock = data.bit(6); background.io.vscrollLock = data.bit(7); irq.line.pending &= irq.line.enable; irq.poll(); return; case 0x1: //mode control 2 sprite.io.zoom = data.bit(0); sprite.io.size = data.bit(1); io.videoMode.bit(2) = data.bit(3); io.videoMode.bit(0) = data.bit(4); irq.frame.enable = data.bit(5); io.displayEnable = data.bit(6); irq.frame.pending &= irq.frame.enable; irq.poll(); return; case 0x2: //name table base address background.io.nameTableAddress = data.bit(0,3); return; case 0x3: //color table base address background.io.colorTableAddress = data.bit(0,7); return; case 0x4: //pattern table base address background.io.patternTableAddress = data.bit(0,2); return; case 0x5: //sprite attribute table base address sprite.io.attributeTableAddress = data.bit(0,6); return; case 0x6: //sprite pattern table base address sprite.io.patternTableAddress = data.bit(0,2); return; case 0x7: //backdrop color dac.io.backdropColor = data.bit(0,3); return; case 0x8: //horizontal scroll offset background.io.hscroll = data.bit(0,7); return; case 0x9: //vertical scroll offset background.io.vscroll = data.bit(0,7); return; case 0xa: //line counter irq.line.coincidence = data.bit(0,7); return; } } ares-126/ares/ms/vdp/irq.cpp000066400000000000000000000003531415063341600157630ustar00rootroot00000000000000auto VDP::IRQ::poll() -> void { if(line.pending && line.enable) return cpu.setIRQ(1); if(frame.pending && frame.enable) return cpu.setIRQ(1); return cpu.setIRQ(0); } auto VDP::IRQ::power() -> void { line = {}; frame = {}; } ares-126/ares/ms/vdp/serialization.cpp000066400000000000000000000024651415063341600200530ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { Thread::serialize(s); s(vram); s(cram); s(background); s(sprite); s(dac); s(irq); s(io.code); s(io.address); s(io.displayEnable); s(io.videoMode); s(io.vcounter); s(io.hcounter); s(io.ccounter); s(latch.control); s(latch.hcounter); s(latch.vram); s(latch.cram); } auto VDP::Background::serialize(serializer& s) -> void { s(io.hscrollLock); s(io.vscrollLock); s(io.nameTableAddress); s(io.colorTableAddress); s(io.patternTableAddress); s(io.hscroll); s(io.vscroll); s(latch.nameTableAddress); s(latch.hscroll); s(latch.vscroll); s(output.color); s(output.palette); s(output.priority); } auto VDP::Sprite::serialize(serializer& s) -> void { for(auto& object : objects) { s(object.x); s(object.y); s(object.pattern); s(object.color); } s(io.zoom); s(io.size); s(io.shift); s(io.attributeTableAddress); s(io.patternTableAddress); s(io.overflowIndex); s(io.overflow); s(io.collision); s(output.color); } auto VDP::DAC::serialize(serializer& s) -> void { s(io.externalSync); s(io.leftClip); s(io.backdropColor); } auto VDP::IRQ::serialize(serializer& s) -> void { s(line.enable); s(line.pending); s(line.counter); s(line.coincidence); s(frame.enable); s(frame.pending); } ares-126/ares/ms/vdp/sprite.cpp000066400000000000000000000102301415063341600164710ustar00rootroot00000000000000auto VDP::Sprite::setup(n9 voffset) -> void { if(!self.displayEnable()) return; n8 valid = 0; n5 vlimit = (8 << io.zoom << io.size) - 1; for(auto& object : objects) object.y = 0xd0; if(!self.videoMode().bit(3)) { n14 attributeAddress; attributeAddress.bit(7,13) = io.attributeTableAddress; for(u32 index : range(32)) { i9 y = self.vram[attributeAddress++]; if(y == 0xd0) break; if(y >= 0xe0) y -= 0x100; i9 x = self.vram[attributeAddress++]; n8 pattern = self.vram[attributeAddress++]; n8 extra = self.vram[attributeAddress++]; if(extra.bit(7)) x -= 32; y += 1; if(voffset < y) continue; if(voffset > y + vlimit) continue; if(vlimit == (io.zoom ? 31 : 15)) pattern.bit(0,1) = 0; if(valid == 4) { io.overflow = 1; io.overflowIndex = index; break; } objects[valid++] = {x, y, pattern, extra.bit(0,3)}; } } else { n14 attributeAddress; attributeAddress.bit(8,13) = io.attributeTableAddress.bit(1,6); for(u32 index : range(64)) { i9 y = self.vram[attributeAddress + index]; if(self.vlines() == 192 && y == 0xd0) break; if(y >= 0xf0) y -= 0x100; i9 x = self.vram[attributeAddress + 0x80 + (index << 1)]; n8 pattern = self.vram[attributeAddress + 0x81 + (index << 1)]; if(io.shift) x -= 8; y += 1; if(voffset < y) continue; if(voffset > y + vlimit) continue; if(vlimit == (io.zoom ? 31 : 15)) pattern.bit(0) = 0; if(valid == 8) { io.overflow = 1; io.overflowIndex = index; break; } objects[valid++] = {x, y, pattern}; } } } auto VDP::Sprite::run(n8 hoffset, n9 voffset) -> void { output = {}; if(!self.displayEnable()) return; switch(self.videoMode()) { case 0b0000: return graphics1(hoffset, voffset); case 0b0001: return; case 0b0010: return graphics2(hoffset, voffset); case 0b0011: return; case 0b0100: return; case 0b0101: return; case 0b0110: return; case 0b0111: return; case 0b1000: return graphics3(hoffset, voffset, 192); case 0b1001: return; case 0b1010: return graphics3(hoffset, voffset, 192); case 0b1011: return graphics3(hoffset, voffset, 224); case 0b1100: return graphics3(hoffset, voffset, 192); case 0b1101: return; case 0b1110: return graphics3(hoffset, voffset, 240); case 0b1111: return graphics3(hoffset, voffset, 192); } } auto VDP::Sprite::graphics1(n8 hoffset, n9 voffset) -> void { //todo: are sprites different in graphics mode 1? return graphics2(hoffset, voffset); } auto VDP::Sprite::graphics2(n8 hoffset, n9 voffset) -> void { n5 hlimit = (8 << io.zoom << io.size) - 1, vlimit = hlimit; for(auto& o : objects) { if(o.y == 0xd0) continue; if(hoffset < o.x) continue; if(hoffset > o.x + hlimit) continue; u32 x = hoffset - o.x >> io.zoom; u32 y = voffset - o.y >> io.zoom; n14 address; address.bit( 0,10) = (o.pattern << 3) + (x >> 3 << 4) + (y & vlimit); address.bit(11,13) = io.patternTableAddress; n3 index = x ^ 7; if(self.vram[address].bit(index)) { if(output.color && self.displayEnable()) { io.collision = 1; break; } output.color = o.color; } } } auto VDP::Sprite::graphics3(n8 hoffset, n9 voffset, u32 vlines) -> void { n4 hlimit = (8 << io.zoom) - 1; n5 vlimit = (8 << io.zoom << io.size) - 1; for(auto& o : objects) { if(o.y == 0xd0) continue; if(hoffset < o.x) continue; if(hoffset > o.x + hlimit) continue; u32 x = hoffset - o.x >> io.zoom; u32 y = voffset - o.y >> io.zoom; n14 address; address.bit(2,12) = (o.pattern << 3) + (y & vlimit); address.bit (13) = io.patternTableAddress.bit(2); n3 index = x ^ 7; n4 color; color.bit(0) = self.vram[address | 0].bit(index); color.bit(1) = self.vram[address | 1].bit(index); color.bit(2) = self.vram[address | 2].bit(index); color.bit(3) = self.vram[address | 3].bit(index); if(color == 0) continue; if(output.color && self.displayEnable()) { io.collision = 1; break; } output.color = color; } } auto VDP::Sprite::power() -> void { for(auto& object : objects) object = {}; io = {}; output = {}; } ares-126/ares/ms/vdp/vdp.cpp000066400000000000000000000066131415063341600157660ustar00rootroot00000000000000#include namespace ares::MasterSystem { VDP vdp; #include "io.cpp" #include "irq.cpp" #include "background.cpp" #include "sprite.cpp" #include "dac.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { vram.allocate(16_KiB); cram.allocate(32); node = parent->append("VDP"); screen = node->append("Screen", 256, 264); u32 defaultRevision = 2; if((Model::MarkIII() || Model::MasterSystemI()) && Region::NTSCJ()) defaultRevision = 1; revision = node->append("Revision", defaultRevision); revision->setAllowedValues({1, 2}); if(Display::CRT()) { screen->colors(1 << 6, {&VDP::colorMasterSystem, this}); screen->setSize(256, 240); screen->setScale(1.0, 1.0); screen->setAspect(8.0, 7.0); } if(Display::LCD()) { screen->colors(1 << 12, {&VDP::colorGameGear, this}); screen->setSize(160, 144); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); interframeBlending = screen->append("Interframe Blending", true, [&](auto value) { screen->setInterframeBlending(value); }); interframeBlending->setDynamic(true); } debugger.load(node); } auto VDP::unload() -> void { debugger = {}; interframeBlending.reset(); revision.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); vram.reset(); cram.reset(); } auto VDP::main() -> void { if(io.vcounter <= vlines()) { if(irq.line.counter-- == 0) { irq.line.counter = irq.line.coincidence; irq.line.pending = 1; irq.poll(); } } else { irq.line.counter = irq.line.coincidence; } if(io.vcounter == vlines() + 1) { irq.frame.pending = 1; irq.poll(); } //684 clocks/scanline if(io.vcounter < vlines()) { u8 y = io.vcounter; background.setup(y); sprite.setup(y); dac.setup(y); for(u8 x : range(256)) { background.run(x, y); sprite.run(x, y); dac.run(x, y); step(2); } } else { //Vblank step(512); } step(172); if(io.vcounter == 240) { if(Mode::MasterSystem()) { if(vlines() == 192) screen->setViewport(0, 0, 256, 240); if(vlines() == 224) screen->setViewport(0, 16, 256, 240); if(vlines() == 240) screen->setViewport(0, 24, 256, 240); } if(Mode::GameGear()) { screen->setViewport(48, 48, 160, 144); } screen->frame(); scheduler.exit(Event::Frame); } if(io.vcounter < (Region::PAL() ? 311 : 260)) { io.ccounter++; //C-sync counter } } auto VDP::step(u32 clocks) -> void { while(clocks--) { if(++io.hcounter == 684) { io.hcounter = 0; if(++io.vcounter == (Region::PAL() ? 313 : 262)) { io.vcounter = 0; } } irq.poll(); Thread::step(1); Thread::synchronize(cpu); } } auto VDP::vlines() -> u32 { if(revision->value() == 1) return 192; switch(videoMode()) { default: return 192; case 0b1011: return 224; case 0b1110: return 240; } } auto VDP::vblank() -> bool { return io.vcounter >= vlines(); } auto VDP::power() -> void { Thread::create(system.colorburst() * 15.0 / 5.0, {&VDP::main, this}); screen->power(); for(auto& byte : vram) byte = 0x00; for(auto& byte : cram) byte = 0x00; background.power(); sprite.power(); dac.power(); irq.power(); io = {}; latch = {}; } } ares-126/ares/ms/vdp/vdp.hpp000066400000000000000000000102631415063341600157670ustar00rootroot00000000000000//Video Display Processor //315-5124 (SMS1) //315-5246 (SMS2/GG) struct VDP : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::Natural revision; Node::Setting::Boolean interframeBlending; //Game Gear only Memory::Writable vram; //16KB Memory::Writable cram; //Master System = 6-bit; Game Gear = 12-bit struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(n4 register, n8 data) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory cram; } memory; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; auto displayEnable() const -> n1 { return io.displayEnable; } auto videoMode() const -> n4 { return io.videoMode; } auto vcounter() const -> u32 { return io.vcounter; } auto hcounter() const -> u32 { return io.hcounter; } //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto vlines() -> u32; auto vblank() -> bool; auto power() -> void; //io.cpp auto vcounterQuery() -> n8; auto hcounterQuery() -> n8; auto hcounterLatch() -> void; auto ccounter() -> n12; auto data() -> n8; auto status() -> n8; auto data(n8) -> void; auto control(n8) -> void; auto registerWrite(n4 addr, n8 data) -> void; struct Background { VDP& self; //background.cpp auto setup(n9 voffset) -> void; auto run(n8 hoffset, n9 voffset) -> void; auto graphics1(n8 hoffset, n9 voffset) -> void; auto graphics2(n8 hoffset, n9 voffset) -> void; auto graphics3(n8 hoffset, n9 voffset, u32 vlines) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 hscrollLock; n1 vscrollLock; n4 nameTableAddress; n8 colorTableAddress; n3 patternTableAddress; n8 hscroll; n8 vscroll; } io; struct Latch { n4 nameTableAddress; n8 hscroll; n8 vscroll; } latch; struct Output { n4 color; n1 palette; n1 priority; } output; } background{*this}; struct Sprite { VDP& self; //sprite.cpp auto setup(n9 voffset) -> void; auto run(n8 hoffset, n9 voffset) -> void; auto graphics1(n8 hoffset, n9 voffset) -> void; auto graphics2(n8 hoffset, n9 voffset) -> void; auto graphics3(n8 hoffset, n9 voffset, u32 vlines) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Object { i9 x; i9 y = 0xd0; n8 pattern; n4 color; } objects[8]; struct IO { n1 zoom; n1 size; n1 shift; n7 attributeTableAddress; n3 patternTableAddress; //flags n5 overflowIndex = 0b11111; n1 overflow; n1 collision; } io; struct Output { n4 color; } output; } sprite{*this}; struct DAC { VDP& self; //dac.cpp auto setup(n8 voffset) -> void; auto run(n8 hoffset, n8 voffset) -> void; auto palette(n5 index) -> n12; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 externalSync; //todo n1 leftClip; n4 backdropColor; } io; //unserialized: u32* output = nullptr; } dac{*this}; //color.cpp auto colorMasterSystem(n32) -> n64; auto colorGameGear(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; private: struct IRQ { VDP& self; //irq.cpp auto poll() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Line { n1 enable; n1 pending; n8 counter; n8 coincidence = 0xff; } line; struct Frame { n1 enable; n1 pending; } frame; } irq{*this}; struct IO { n2 code; n14 address; n1 displayEnable; n4 videoMode; //counters u32 vcounter = 0; //vertical counter u32 hcounter = 0; //horizontal counter n12 ccounter = 0; //csync counter } io; struct Latch { n1 control; n8 hcounter; n8 vram; n8 cram; //Game Gear only } latch; }; extern VDP vdp; ares-126/ares/msx/000077500000000000000000000000001415063341600140625ustar00rootroot00000000000000ares-126/ares/msx/GNUmakefile000066400000000000000000000015411415063341600161350ustar00rootroot00000000000000ares.components += z80 ares.components += tms9918 ares.components += v9938 ares.components += ay38910 ares.components += ym2413 ares.objects += ares-msx-system ares.objects += ares-msx-keyboard ares.objects += ares-msx-cartridge ares.objects += ares-msx-controller ares.objects += ares-msx-cpu ares.objects += ares-msx-vdp ares.objects += ares-msx-psg $(object.path)/ares-msx-system.o: $(ares.path)/msx/system/system.cpp $(object.path)/ares-msx-keyboard.o: $(ares.path)/msx/keyboard/keyboard.cpp $(object.path)/ares-msx-cartridge.o: $(ares.path)/msx/cartridge/cartridge.cpp $(object.path)/ares-msx-controller.o: $(ares.path)/msx/controller/controller.cpp $(object.path)/ares-msx-cpu.o: $(ares.path)/msx/cpu/cpu.cpp $(object.path)/ares-msx-vdp.o: $(ares.path)/msx/vdp/vdp.cpp $(object.path)/ares-msx-psg.o: $(ares.path)/msx/psg/psg.cpp ares-126/ares/msx/cartridge/000077500000000000000000000000001415063341600160265ustar00rootroot00000000000000ares-126/ares/msx/cartridge/board/000077500000000000000000000000001415063341600171155ustar00rootroot00000000000000ares-126/ares/msx/cartridge/board/asc16.cpp000066400000000000000000000021041415063341600205330ustar00rootroot00000000000000//ASCII 16kbit struct ASC16 : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x4000 && address <= 0x7fff) data = rom.read(bank[0] << 14 | (n14)address); if(address >= 0x8000 && address <= 0xbfff) data = rom.read(bank[1] << 14 | (n14)address); if(address >= 0xc000 && address <= 0xffff) data = rom.read(bank[0] << 14 | (n14)address); if(address >= 0x0000 && address <= 0x3fff) data = rom.read(bank[1] << 14 | (n14)address); return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x6000 && address <= 0x6fff) bank[0] = data; if(address >= 0x7000 && address <= 0xbfff) bank[1] = data; } auto power() -> void override { bank[0] = 0x0f; //R-Type = 0x0f; others = 0x00 bank[1] = 0x00; } auto serialize(serializer& s) -> void override { s(bank); } n8 bank[2]; }; ares-126/ares/msx/cartridge/board/asc8.cpp000066400000000000000000000030641415063341600204620ustar00rootroot00000000000000//ASCII 8kbit struct ASC8 : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x4000 && address <= 0x5fff) data = rom.read(bank[0] << 13 | (n13)address); if(address >= 0x6000 && address <= 0x7fff) data = rom.read(bank[1] << 13 | (n13)address); if(address >= 0x8000 && address <= 0x9fff) data = rom.read(bank[2] << 13 | (n13)address); if(address >= 0xa000 && address <= 0xbfff) data = rom.read(bank[3] << 13 | (n13)address); if(address >= 0xc000 && address <= 0xdfff) data = rom.read(bank[0] << 13 | (n13)address); if(address >= 0xe000 && address <= 0xffff) data = rom.read(bank[1] << 13 | (n13)address); if(address >= 0x0000 && address <= 0x1fff) data = rom.read(bank[2] << 13 | (n13)address); if(address >= 0x2000 && address <= 0x3fff) data = rom.read(bank[3] << 13 | (n13)address); return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x6000 && address <= 0x67ff) bank[0] = data; if(address >= 0x6800 && address <= 0x6fff) bank[1] = data; if(address >= 0x7000 && address <= 0x77ff) bank[2] = data; if(address >= 0x7800 && address <= 0x7fff) bank[3] = data; } auto power() -> void override { bank[0] = 0; bank[1] = 0; bank[2] = 0; bank[3] = 0; } auto serialize(serializer& s) -> void override { s(bank); } n8 bank[4]; }; ares-126/ares/msx/cartridge/board/board.cpp000066400000000000000000000015471415063341600207170ustar00rootroot00000000000000namespace Board { #include "asc16.cpp" #include "asc8.cpp" #include "cross-blaim.cpp" #include "konami.cpp" #include "konami-scc.cpp" #include "linear.cpp" #include "super-lode-runner.cpp" #include "super-pierrot.cpp" auto Interface::main() -> void { cartridge.step(system.colorburst()); } auto Interface::load(Memory::Readable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::load(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::save(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->write(name)) { memory.save(fp); return true; } return false; } } ares-126/ares/msx/cartridge/board/board.hpp000066400000000000000000000012561415063341600207210ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; Interface(Cartridge& cartridge) : cartridge(cartridge) {} virtual ~Interface() = default; virtual auto load() -> void {} virtual auto save() -> void {} virtual auto unload() -> void {} virtual auto main() -> void; virtual auto read(n16 address, n8 data) -> n8 { return data; } virtual auto write(n16 address, n8 data) -> void {} virtual auto power() -> void {} virtual auto serialize(serializer&) -> void {} auto load(Memory::Readable&, string name) -> bool; auto load(Memory::Writable&, string name) -> bool; auto save(Memory::Writable&, string name) -> bool; Cartridge& cartridge; }; } ares-126/ares/msx/cartridge/board/cross-blaim.cpp000066400000000000000000000024671415063341600220450ustar00rootroot00000000000000//Cross Blaim struct CrossBlaim : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(mode == 0 || mode == 1) { if(address >> 14 == 0) data = rom.read((n14)address + 16_KiB); if(address >> 14 == 1) data = rom.read((n14)address); if(address >> 14 == 2) data = rom.read((n14)address + 16_KiB); if(address >> 14 == 3) data = rom.read((n14)address + 16_KiB); } if(mode == 2) { if(address >> 14 == 0) data = 0xff; if(address >> 14 == 1) data = rom.read((n14)address); if(address >> 14 == 2) data = rom.read((n14)address + 32_KiB); if(address >> 14 == 3) data = 0xff; } if(mode == 3) { if(address >> 14 == 0) data = 0xff; if(address >> 14 == 1) data = rom.read((n14)address); if(address >> 14 == 2) data = rom.read((n14)address + 48_KiB); if(address >> 14 == 3) data = 0xff; } return data; } auto write(n16 address, n8 data) -> void override { mode = data; } auto power() -> void override { mode = 0; } auto serialize(serializer& s) -> void override { s(mode); } n2 mode; }; ares-126/ares/msx/cartridge/board/konami-scc.cpp000066400000000000000000000162501415063341600216510ustar00rootroot00000000000000//Konami (with Sound Creative Chip) struct KonamiSCC : Interface { using Interface::Interface; Memory::Readable rom; Node::Audio::Stream stream; auto load() -> void override { Interface::load(rom, "program.rom"); stream = cartridge.node->append("SCC"); stream->setChannels(1); stream->setFrequency(system.colorburst() / 16.0); stream->addHighPassFilter(20.0, 1); } auto save() -> void override { } auto unload() -> void override { } auto main() -> void override { s32 sample = 256 * 5; for(auto& voice : voices) { if(voice.frequency <= 8) continue; //voice is halted when frequency < 9 voice.clock += 32; while(voice.clock > voice.frequency) { voice.clock -= voice.frequency + 1; voice.counter++; } sample += voice.wave[voice.counter] * voice.volume * voice.key >> 3; } stream->frame(mixer[sample] / 32768.0); cartridge.step(16); } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x4000 && address <= 0x5fff) data = rom.read(bank[0] << 13 | (n13)address); if(address >= 0x6000 && address <= 0x7fff) data = rom.read(bank[1] << 13 | (n13)address); if(address >= 0x8000 && address <= 0x9fff) data = rom.read(bank[2] << 13 | (n13)address); if(address >= 0xa000 && address <= 0xbfff) data = rom.read(bank[3] << 13 | (n13)address); if(address >= 0xc000 && address <= 0xdfff) data = rom.read(bank[0] << 13 | (n13)address); if(address >= 0xe000 && address <= 0xffff) data = rom.read(bank[1] << 13 | (n13)address); if(address >= 0x0000 && address <= 0x1fff) data = rom.read(bank[2] << 13 | (n13)address); if(address >= 0x2000 && address <= 0x3fff) data = rom.read(bank[3] << 13 | (n13)address); address.bit(8) = 0; //SCC ignores A8 if(address >= 0x9800 && address <= 0x981f) { data = voices[0].wave[address & 0x1f]; if(test.bit(6)) data = voices[0].wave[address + voices[0].counter & 0x1f]; } if(address >= 0x9820 && address <= 0x983f) { data = voices[1].wave[address & 0x1f]; if(test.bit(6)) data = voices[1].wave[address + voices[1].counter & 0x1f]; } if(address >= 0x9840 && address <= 0x985f) { data = voices[2].wave[address & 0x1f]; if(test.bit(6)) data = voices[2].wave[address + voices[2].counter & 0x1f]; } if(address >= 0x9860 && address <= 0x987f) { data = voices[3].wave[address & 0x1f]; if(test.bit(6) || test.bit(7)) data = voices[3].wave[address + voices[3 + test.bit(6)].counter & 0x1f]; } if(address >= 0x9880 && address <= 0x98df) { data = 0xff; } if(address >= 0x98e0 && address <= 0x98ff) { //reading the test register sets it to 0xff data = test = 0xff; } return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x5000 && address <= 0x57ff) bank[0] = data; if(address >= 0x7000 && address <= 0x77ff) bank[1] = data; if(address >= 0x9000 && address <= 0x97ff) bank[2] = data; if(address >= 0xb000 && address <= 0xb7ff) bank[3] = data; address.bit(8) = 0; //SCC ignores A8 if(address >= 0x9800 && address <= 0x981f && !test.bit(6)) { voices[0].wave[address & 0x1f] = data; } if(address >= 0x9820 && address <= 0x983f && !test.bit(6)) { voices[1].wave[address & 0x1f] = data; } if(address >= 0x9840 && address <= 0x985f && !test.bit(6)) { voices[2].wave[address & 0x1f] = data; } if(address >= 0x9860 && address <= 0x987f && !test.bit(6) && !test.bit(7)) { voices[3].wave[address & 0x1f] = data; voices[4].wave[address & 0x1f] = data; //shares data with wave channel 3 } if(address == 0x9880) { voices[0].frequency.bit(0, 7) = data.bit(0,7); if(voices[0].frequency < 9) voices[0].clock = 0; if(test.bit(5)) voices[0].clock = 0, voices[0].counter = 0; } if(address == 0x9881) { voices[0].frequency.bit(8,11) = data.bit(0,3); if(voices[0].frequency < 9) voices[0].clock = 0; if(test.bit(5)) voices[0].clock = 0, voices[0].counter = 0; } if(address == 0x9882) { voices[1].frequency.bit(0, 7) = data.bit(0,7); if(voices[1].frequency < 9) voices[1].clock = 0; if(test.bit(5)) voices[1].clock = 0, voices[1].counter = 0; } if(address == 0x9883) { voices[1].frequency.bit(8,11) = data.bit(0,3); if(voices[1].frequency < 9) voices[1].clock = 0; if(test.bit(5)) voices[1].clock = 0, voices[1].counter = 0; } if(address == 0x9884) { voices[2].frequency.bit(0, 7) = data.bit(0,7); if(voices[2].frequency < 9) voices[2].clock = 0; if(test.bit(5)) voices[2].clock = 0, voices[2].counter = 0; } if(address == 0x9885) { voices[2].frequency.bit(8,11) = data.bit(0,3); if(voices[2].frequency < 9) voices[2].clock = 0; if(test.bit(5)) voices[2].clock = 0, voices[2].counter = 0; } if(address == 0x9886) { voices[3].frequency.bit(0, 7) = data.bit(0,7); if(voices[3].frequency < 9) voices[3].clock = 0; if(test.bit(5)) voices[3].clock = 0, voices[3].counter = 0; } if(address == 0x9887) { voices[3].frequency.bit(8,11) = data.bit(0,3); if(voices[3].frequency < 9) voices[3].clock = 0; if(test.bit(5)) voices[3].clock = 0, voices[3].counter = 0; } if(address == 0x9888) { voices[4].frequency.bit(0, 7) = data.bit(0,7); if(voices[4].frequency < 9) voices[4].clock = 0; if(test.bit(5)) voices[4].clock = 0, voices[4].counter = 0; } if(address == 0x9889) { voices[4].frequency.bit(8,11) = data.bit(0,3); if(voices[4].frequency < 9) voices[4].clock = 0; if(test.bit(5)) voices[4].clock = 0, voices[4].counter = 0; } if(address == 0x988a) { voices[0].volume = data.bit(0,3); } if(address == 0x988b) { voices[1].volume = data.bit(0,3); } if(address == 0x988c) { voices[2].volume = data.bit(0,3); } if(address == 0x988d) { voices[3].volume = data.bit(0,3); } if(address == 0x988e) { voices[4].volume = data.bit(0,3); } if(address == 0x988f) { voices[0].key = data.bit(0); voices[1].key = data.bit(1); voices[2].key = data.bit(2); voices[3].key = data.bit(3); voices[4].key = data.bit(4); } if(address >= 0x98e0 && address <= 0x98ff) test = data; } auto power() -> void override { bank[0] = 0; bank[1] = 1; bank[2] = 2; bank[3] = 3; voices[0] = {}; voices[1] = {}; voices[2] = {}; voices[3] = {}; voices[4] = {}; test = 0; mixer.resize(512 * 5); auto table = mixer.data() + 256 * 5; for(s32 n : range(256 * 5)) { s16 volume = n * 8 * 16 / 5; table[+n] = +volume; table[-n] = -volume; } } auto serialize(serializer& s) -> void override { s(bank); for(auto& voice : voices) { s(voice.clock); s(voice.frequency); s(voice.counter); s(voice.volume); s(voice.key); s(voice.wave); } s(test); } n8 bank[4]; struct Voice { n16 clock; n12 frequency; n5 counter; n4 volume; n1 key; i8 wave[32]; } voices[5]; n8 test; //unserialized: vector mixer; }; ares-126/ares/msx/cartridge/board/konami.cpp000066400000000000000000000020621415063341600210770ustar00rootroot00000000000000//Konami (without Sound Creative Chip) struct Konami : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >> 13 == 2) data = rom.read(bank[0] << 13 | (n13)address); if(address >> 13 == 3) data = rom.read(bank[1] << 13 | (n13)address); if(address >> 13 == 4) data = rom.read(bank[2] << 13 | (n13)address); if(address >> 13 == 5) data = rom.read(bank[3] << 13 | (n13)address); return data; } auto write(n16 address, n8 data) -> void override { if(address >> 13 == 2) bank[0] = 0; if(address >> 13 == 3) bank[1] = data; if(address >> 13 == 4) bank[2] = data; if(address >> 13 == 5) bank[3] = data; } auto power() -> void override { bank[0] = 0; bank[1] = 1; bank[2] = 0; bank[3] = 0; } auto serialize(serializer& s) -> void override { s(bank); } n8 bank[4]; }; ares-126/ares/msx/cartridge/board/linear.cpp000066400000000000000000000007671415063341600211050ustar00rootroot00000000000000struct Linear : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { data = rom.read(address); return data; } auto write(n16 address, n8 data) -> void override { } auto power() -> void override { } auto serialize(serializer& s) -> void override { } }; ares-126/ares/msx/cartridge/board/super-lode-runner.cpp000066400000000000000000000013311415063341600232050ustar00rootroot00000000000000//Super Lode Runner //(not working: requires MSX BASIC) struct SuperLodeRunner : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x8000 && address <= 0xbfff) data = rom.read(bank << 14 | (n14)address); return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x0000 && address <= 0x3fff) bank = data; } auto power() -> void override { bank = 0; } auto serialize(serializer& s) -> void override { s(bank); } n8 bank; }; ares-126/ares/msx/cartridge/board/super-pierrot.cpp000066400000000000000000000023631415063341600224450ustar00rootroot00000000000000//Super Pierrot //(not working) struct SuperPierrot : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address, n8 data) -> n8 override { if(address >= 0x4000 && address <= 0x7fff) data = rom.read(bank[0] << 14 | (n14)address); if(address >= 0x8000 && address <= 0xbfff) data = rom.read(bank[1] << 14 | (n14)address); return data; } auto write(n16 address, n8 data) -> void override { if(address >= 0x4000 && address <= 0x4fff) bank[0] = data; if(address >= 0x6000 && address <= 0x6fff) bank[0] = data; if(address >= 0x8000 && address <= 0x8fff) bank[0] = data; if(address >= 0xa000 && address <= 0xafff) bank[0] = data; if(address >= 0x5000 && address <= 0x5fff) bank[1] = data; if(address >= 0x7000 && address <= 0x7fff) bank[1] = data; if(address >= 0x9000 && address <= 0x9fff) bank[1] = data; if(address >= 0xa000 && address <= 0xafff) bank[1] = data; } auto power() -> void override { bank[0] = 0; bank[1] = 0; } auto serialize(serializer& s) -> void override { s(bank); } n8 bank[2]; }; ares-126/ares/msx/cartridge/cartridge.cpp000066400000000000000000000040441415063341600205000ustar00rootroot00000000000000#include namespace ares::MSX { Cartridge& cartridge = cartridgeSlot.cartridge; Cartridge& expansion = expansionSlot.cartridge; #include "board/board.cpp" #include "slot.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.board = pak->attribute("board"); if(information.board == "ASC16") board = new Board::ASC16{*this}; if(information.board == "ASC8") board = new Board::ASC8{*this}; if(information.board == "CrossBlaim") board = new Board::CrossBlaim{*this}; if(information.board == "Konami") board = new Board::Konami{*this}; if(information.board == "KonamiSCC") board = new Board::KonamiSCC{*this}; if(information.board == "Linear") board = new Board::Linear{*this}; if(information.board == "SuperLodeRunner") board = new Board::SuperLodeRunner{*this}; if(information.board == "SuperPierrot") board = new Board::SuperPierrot{*this}; if(!board) board = new Board::Konami{*this}; board->pak = pak; board->load(); power(); } auto Cartridge::disconnect() -> void { if(!node) return; if(board) board->unload(); board.reset(); pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; board->save(); } auto Cartridge::main() -> void { if(board) return board->main(); step(system.colorburst()); } auto Cartridge::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto Cartridge::power() -> void { Thread::create(system.colorburst(), {&Cartridge::main, this}); if(board) board->power(); } auto Cartridge::read(n16 address) -> n8 { if(board) return board->read(address, 0xff); return 0xff; } auto Cartridge::write(n16 address, n8 data) -> void { if(board) return board->write(address, data); } } ares-126/ares/msx/cartridge/cartridge.hpp000066400000000000000000000015741415063341600205120ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge : Thread { Node::Peripheral node; VFS::Pak pak; Memory::Readable rom; Memory::Writable ram; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; auto read(n16 address) -> n8; auto write(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; unique_pointer board; private: struct Information { string title; string region; string board; } information; }; #include "slot.hpp" extern Cartridge& cartridge; extern Cartridge& expansion; ares-126/ares/msx/cartridge/serialization.cpp000066400000000000000000000001141415063341600214030ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { if(board) s(*board); } ares-126/ares/msx/cartridge/slot.cpp000066400000000000000000000011231415063341600175100ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot expansionSlot{"Expansion Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/msx/cartridge/slot.hpp000066400000000000000000000004131415063341600175160ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; extern CartridgeSlot expansionSlot; ares-126/ares/msx/controller/000077500000000000000000000000001415063341600162455ustar00rootroot00000000000000ares-126/ares/msx/controller/controller.cpp000066400000000000000000000001451415063341600211340ustar00rootroot00000000000000#include namespace ares::MSX { #include "port.cpp" #include "gamepad/gamepad.cpp" } ares-126/ares/msx/controller/controller.hpp000066400000000000000000000003371415063341600211440ustar00rootroot00000000000000struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto read() -> n6 { return 0x3f; } virtual auto write(n8 data) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" ares-126/ares/msx/controller/gamepad/000077500000000000000000000000001415063341600176435ustar00rootroot00000000000000ares-126/ares/msx/controller/gamepad/gamepad.cpp000066400000000000000000000021551415063341600217500ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); a = node->append("A"); b = node->append("B"); } auto Gamepad::read() -> n6 { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(b); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n6 data; data.bit(0) = !upLatch; data.bit(1) = !downLatch; data.bit(2) = !leftLatch; data.bit(3) = !rightLatch; data.bit(4) = !a->value(); data.bit(5) = !b->value(); return data; } ares-126/ares/msx/controller/gamepad/gamepad.hpp000066400000000000000000000005321415063341600217520ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button a; Node::Input::Button b; Gamepad(Node::Port); auto read() -> n6 override; private: b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/msx/controller/port.cpp000066400000000000000000000013631415063341600177400ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("MSX"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad"}); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/msx/controller/port.hpp000066400000000000000000000010041415063341600177350ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto read() -> n6 { if(device) return device->read(); return 0x3f; } auto write(n8 data) { if(device) return device->write(data); } auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/msx/cpu/000077500000000000000000000000001415063341600146515ustar00rootroot00000000000000ares-126/ares/msx/cpu/cpu.cpp000066400000000000000000000020121415063341600161370ustar00rootroot00000000000000#include namespace ares::MSX { CPU cpu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { if(Model::MSX()) ram.allocate(64_KiB); if(Model::MSX2()) ram.allocate(512_KiB); node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { ram.reset(); node = {}; debugger = {}; } auto CPU::main() -> void { if(io.irqLine) { debugger.interrupt("IRQ"); irq(1, 0x0038, 0xff); } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::power() -> void { Z80::bus = this; Z80::power(); Thread::create(system.colorburst(), {&CPU::main, this}); PC = 0x0000; //reset vector address slot[0] = {3, 0, {0, 0, 0, 0}}; slot[1] = {2, 1, {0, 0, 0, 0}}; slot[2] = {1, 2, {0, 0, 0, 0}}; slot[3] = {0, 3, {0, 0, 0, 0}}; io = {}; } auto CPU::setIRQ(bool line) -> void { io.irqLine = line; } } ares-126/ares/msx/cpu/cpu.hpp000066400000000000000000000024701415063341600161540ustar00rootroot00000000000000struct CPU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Writable ram; //MSX = 64KB, MSX2 = 256KB struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power() -> void; auto setIRQ(bool) -> void; //memory.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; auto readPrimarySlot() -> n8; auto writePrimarySlot(n8 data) -> void; auto readSecondarySlot() -> n8; auto writeSecondarySlot(n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Slot { n8 memory; n2 primary; n2 secondary[4]; } slot[4]; struct IO { n1 irqLine; } io; }; extern CPU cpu; ares-126/ares/msx/cpu/debugger.cpp000066400000000000000000000016411415063341600171430ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { cpu.ram[address] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.PC)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/msx/cpu/memory.cpp000066400000000000000000000067511415063341600166760ustar00rootroot00000000000000auto CPU::read(n16 address) -> n8 { if(address == 0xffff) return readSecondarySlot(); n2 page = address.bit(14,15); n2 primary = slot[page].primary; n2 secondary = slot[primary].secondary[page]; // If MSX1, assume there are no secondary slots if (Model::MSX()) secondary = 0; if(primary == 0) { return rom.bios.read(address); } if(primary == 1) { return cartridge.read(address); } if(primary == 2) { return expansion.read(address); } if(primary == 3) { if (secondary == 0 && Model::MSX()) { return ram.read(address); } if(secondary == 0 && rom.sub) { return rom.sub.read(address); } if(secondary == 2) { n22 logical = slot[page].memory << 14 | (n14)address; return ram.read(logical); } } return 0xff; } auto CPU::write(n16 address, n8 data) -> void { if(address == 0xffff) return writeSecondarySlot(data); n2 page = address.bit(14,15); n2 primary = slot[page].primary; n2 secondary = slot[primary].secondary[page]; // If MSX1, assume there are no secondary slots if (Model::MSX()) secondary = 0; if(primary == 0) { return; } if(primary == 1) { return cartridge.write(address, data); } if(primary == 2) { return expansion.write(address, data); } if(primary == 3) { if (secondary == 0 && Model::MSX()) { return ram.write(address, data); } if(secondary == 2) { n22 logical = slot[page].memory << 14 | (n14)address; return ram.write(logical, data); } } } // auto CPU::in(n16 address) -> n8 { switch((n8)address) { case 0x98: return vdp.read(0); case 0x99: return vdp.read(1); case 0x9a: return vdp.read(2); case 0x9b: return vdp.read(3); case 0xa2: return psg.read(); case 0xa8: return readPrimarySlot(); case 0xa9: return keyboard.read(); case 0xfc: case 0xfd: case 0xfe: case 0xff: if(Model::MSX()) return 0xff; //note: reading these ports is said to be unreliable; //but since it's not specified how so, that is not emulated here return slot[(n2)address].memory; } return 0xff; } auto CPU::out(n16 address, n8 data) -> void { switch((n8)address) { case 0x98: return vdp.write(0, data); case 0x99: return vdp.write(1, data); case 0x9a: return vdp.write(2, data); case 0x9b: return vdp.write(3, data); case 0xa0: return psg.select(data); case 0xa1: return psg.write(data); case 0xa8: return writePrimarySlot(data); case 0xaa: return keyboard.write(data.bit(0,3)); case 0xfc: case 0xfd: case 0xfe: case 0xff: slot[(n2)address].memory = data; return; } } // auto CPU::readPrimarySlot() -> n8 { n8 data; data.bit(0,1) = slot[0].primary; data.bit(2,3) = slot[1].primary; data.bit(4,5) = slot[2].primary; data.bit(6,7) = slot[3].primary; return data; } auto CPU::writePrimarySlot(n8 data) -> void { slot[0].primary = data.bit(0,1); slot[1].primary = data.bit(2,3); slot[2].primary = data.bit(4,5); slot[3].primary = data.bit(6,7); } // auto CPU::readSecondarySlot() -> n8 { auto primary = slot[3].primary; n8 data; data.bit(0,1) = slot[primary].secondary[0]; data.bit(2,3) = slot[primary].secondary[1]; data.bit(4,5) = slot[primary].secondary[2]; data.bit(6,7) = slot[primary].secondary[3]; return ~data; } auto CPU::writeSecondarySlot(n8 data) -> void { auto primary = slot[3].primary; slot[primary].secondary[0] = data.bit(0,1); slot[primary].secondary[1] = data.bit(2,3); slot[primary].secondary[2] = data.bit(4,5); slot[primary].secondary[3] = data.bit(6,7); } ares-126/ares/msx/cpu/serialization.cpp000066400000000000000000000003351415063341600202330ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); s(ram); for(auto& slot : this->slot) { s(slot.memory); s(slot.primary); s(slot.secondary); } s(io.irqLine); } ares-126/ares/msx/keyboard/000077500000000000000000000000001415063341600156625ustar00rootroot00000000000000ares-126/ares/msx/keyboard/keyboard.cpp000066400000000000000000000032621415063341600201710ustar00rootroot00000000000000#include namespace ares::MSX { Keyboard keyboard; #include "serialization.cpp" auto Keyboard::load(Node::Object parent) -> void { port = parent->append("Keyboard"); port->setFamily("MSX"); port->setType("Keyboard"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(port, name); }); port->setConnect([&] { connect(); }); port->setDisconnect([&] { disconnect(); }); port->setSupported({"Japanese"}); } auto Keyboard::unload() -> void { disconnect(); port = {}; } auto Keyboard::allocate(Node::Port parent, string name) -> Node::Peripheral { return layout = parent->append(name); } auto Keyboard::connect() -> void { Markup::Node document; //if(auto fp = platform->open(layout, "layout.bml", File::Read)) { // document = BML::unserialize(fp->reads()); //} for(u32 column : range(12)) { for(u32 row : range(8)) { string label{column, ",", row}; if(auto key = document[{"layout/key[", column * 8 + row, "]"}]) { label = key.text(); } matrix[column][row] = layout->append(label); } } } auto Keyboard::disconnect() -> void { layout = {}; for(u32 column : range(12)) { for(u32 row : range(8)) { matrix[column][row] = {}; } } } auto Keyboard::power() -> void { io = {}; } auto Keyboard::read() -> n8 { n8 column = io.select; n8 data = 0xff; if(column >= 0 && column <= 11) { for(u32 row : range(8)) { if(auto node = matrix[column][row]) { platform->input(node); data.bit(row) = !node->value(); } } } return data; } auto Keyboard::write(n4 data) -> void { io.select = data; } } ares-126/ares/msx/keyboard/keyboard.hpp000066400000000000000000000007751415063341600202040ustar00rootroot00000000000000struct Keyboard { Node::Port port; Node::Peripheral layout; //keyboard.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(Node::Port, string) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto power() -> void; auto read() -> n8; auto write(n4 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: Node::Input::Button matrix[12][8]; struct IO { n4 select; } io; }; extern Keyboard keyboard; ares-126/ares/msx/keyboard/serialization.cpp000066400000000000000000000001041415063341600212360ustar00rootroot00000000000000auto Keyboard::serialize(serializer& s) -> void { s(io.select); } ares-126/ares/msx/msx.hpp000066400000000000000000000015611415063341600154050ustar00rootroot00000000000000#pragma once //started: 2018-12-28 #include #include #include #include #include #include namespace ares::MSX { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto MSX() -> bool; inline static auto MSX2() -> bool; }; struct Region { inline static auto NTSC() -> bool; inline static auto PAL() -> bool; }; #include #include #include #include #include #include #include } ares-126/ares/msx/psg/000077500000000000000000000000001415063341600146535ustar00rootroot00000000000000ares-126/ares/msx/psg/psg.cpp000066400000000000000000000024111415063341600161460ustar00rootroot00000000000000#include namespace ares::MSX { PSG psg; #include "serialization.cpp" auto PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(1); stream->setFrequency(system.colorburst() / 16.0); stream->addHighPassFilter(20.0, 1); } auto PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto PSG::main() -> void { auto channels = AY38910::clock(); double output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; stream->frame(output / 3.0); step(1); } auto PSG::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto PSG::power() -> void { AY38910::power(); Thread::create(system.colorburst() / 16.0, {&PSG::main, this}); for(u32 level : range(16)) { volume[level] = 1.0 / pow(2, 1.0 / 2 * (15 - level)); } } auto PSG::readIO(n1 port) -> n8 { if(port == 0) return controllerPort1.read() | 0x40; if(port == 1) return controllerPort2.read() | 0xc0; unreachable; } auto PSG::writeIO(n1 port, n8 data) -> void { if(port == 0) return controllerPort1.write(data); if(port == 1) return controllerPort2.write(data); } } ares-126/ares/msx/psg/psg.hpp000066400000000000000000000006651415063341600161640ustar00rootroot00000000000000struct PSG : AY38910, Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; auto readIO(n1 port) -> n8 override; auto writeIO(n1 port, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; private: f64 volume[16]; }; extern PSG psg; ares-126/ares/msx/psg/serialization.cpp000066400000000000000000000001401415063341600202270ustar00rootroot00000000000000auto PSG::serialize(serializer& s) -> void { AY38910::serialize(s); Thread::serialize(s); } ares-126/ares/msx/system/000077500000000000000000000000001415063341600154065ustar00rootroot00000000000000ares-126/ares/msx/system/serialization.cpp000066400000000000000000000021731415063341600207720ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); keyboard.serialize(s); cpu.serialize(s); vdp.serialize(s); psg.serialize(s); cartridge.serialize(s); expansion.serialize(s); controllerPort1.serialize(s); controllerPort2.serialize(s); } ares-126/ares/msx/system/system.cpp000066400000000000000000000054641415063341600174470ustar00rootroot00000000000000#include namespace ares::MSX { auto enumerate() -> vector { return { "[Microsoft] MSX (NTSC)", "[Microsoft] MSX (PAL)", "[Microsoft] MSX2 (NTSC)", "[Microsoft] MSX2 (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; ROM rom; System system; #include "serialization.cpp" auto System::game() -> string { if(cartridge.node && expansion.node) { return {cartridge.title(), " + ", expansion.title()}; } if(cartridge.node) { return cartridge.title(); } if(expansion.node) { return expansion.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("MSX")) { information.name = "MSX"; information.model = Model::MSX; } if(name.find("MSX2")) { information.name = "MSX2"; information.model = Model::MSX2; } if(name.find("NTSC")) { information.region = Region::NTSC; information.colorburst = Constants::Colorburst::NTSC; } if(name.find("PAL")) { information.region = Region::PAL; information.colorburst = Constants::Colorburst::PAL; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; scheduler.reset(); keyboard.load(node); cpu.load(node); vdp.load(node); psg.load(node); cartridgeSlot.load(node); expansionSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); expansion.save(); } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); vdp.unload(); psg.unload(); cartridgeSlot.unload(); expansionSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); pak.reset(); node.reset(); rom.bios.reset(); rom.sub.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); rom.bios.allocate(32_KiB); if(auto fp = pak->read("bios.rom")) { rom.bios.load(fp); } if(model() == Model::MSX2) { rom.sub.allocate(16_KiB); if(auto fp = pak->read("sub.rom")) { rom.sub.load(fp); } } keyboard.power(); cartridge.power(); expansion.power(); cpu.power(); vdp.power(); psg.power(); scheduler.power(cpu); } } ares-126/ares/msx/system/system.hpp000066400000000000000000000025761415063341600174550ustar00rootroot00000000000000struct ROM { Memory::Readable bios; Memory::Readable sub; }; struct System { Node::System node; VFS::Pak pak; enum class Model : u32 { MSX, MSX2 }; enum class Region : u32 { NTSC, PAL }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto region() const -> Region { return information.region; } auto colorburst() const -> f64 { return information.colorburst; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "MSX"; Model model = Model::MSX; Region region = Region::NTSC; f64 colorburst = Constants::Colorburst::NTSC; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern ROM rom; extern System system; auto Model::MSX() -> bool { return system.model() == System::Model::MSX; } auto Model::MSX2() -> bool { return system.model() == System::Model::MSX2; } auto Region::NTSC() -> bool { return system.region() == System::Region::NTSC; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/msx/vdp/000077500000000000000000000000001415063341600146535ustar00rootroot00000000000000ares-126/ares/msx/vdp/color.cpp000066400000000000000000000022401415063341600164730ustar00rootroot00000000000000auto VDP::colorMSX(n32 color) -> n64 { switch(color.bit(0,3)) { case 0: return 0x0000'0000'0000ull; //transparent case 1: return 0x0000'0000'0000ull; //black case 2: return 0x2121'c8c8'4242ull; //medium green case 3: return 0x5e5e'dcdc'7878ull; //light green case 4: return 0x5454'5555'ededull; //dark blue case 5: return 0x7d7d'7676'fcfcull; //light blue case 6: return 0xd4d4'5252'4d4dull; //dark red case 7: return 0x4242'ebeb'f5f5ull; //cyan case 8: return 0xfcfc'5555'5454ull; //medium red case 9: return 0xffff'7979'7878ull; //light red case 10: return 0xd4d4'c1c1'5454ull; //dark yellow case 11: return 0xe6e6'cece'8080ull; //light yellow case 12: return 0x2121'b0b0'3b3bull; //dark green case 13: return 0xc9c9'5b5b'babaull; //magenta case 14: return 0xcccc'cccc'ccccull; //gray case 15: return 0xffff'ffff'ffffull; //white } unreachable; } auto VDP::colorMSX2(n32 color) -> n64 { n3 B = color.bit(0,2); n3 R = color.bit(3,5); n3 G = color.bit(6,8); n64 r = image::normalize(R, 3, 16); n64 g = image::normalize(G, 3, 16); n64 b = image::normalize(B, 3, 16); return r << 32 | g << 16 | b << 0; } ares-126/ares/msx/vdp/serialization.cpp000066400000000000000000000002321415063341600202310ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { if(Model::MSX()) TMS9918::serialize(s); if(Model::MSX2()) V9938::serialize(s); Thread::serialize(s); } ares-126/ares/msx/vdp/vdp.cpp000066400000000000000000000046571415063341600161640ustar00rootroot00000000000000#include namespace ares::MSX { VDP vdp; #include "color.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { node = parent->append("VDP"); if(Model::MSX()) { screen = node->append("Screen", 256, 192); screen->colors(1 << 4, {&VDP::colorMSX, this}); screen->setSize(256, 192); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); TMS9918::vram.allocate(16_KiB, 0x00); TMS9918::load(screen); } if(Model::MSX2()) { screen = node->append("Screen", 512, 424); screen->colors(1 << 9, {&VDP::colorMSX2, this}); screen->setSize(512, 424); screen->setScale(0.5, 0.5); screen->setAspect(1.0, 1.0); V9938::vram.allocate(128_KiB, 0x00); V9938::xram.allocate(64_KiB, 0x00); V9938::pram.allocate(16); V9938::load(screen); } } auto VDP::unload() -> void { if(Model::MSX()) TMS9918::unload(); if(Model::MSX2()) V9938::unload(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto VDP::irq(bool line) -> void { cpu.setIRQ(line); } auto VDP::frame() -> void { if(Model::MSX2()) { if(V9938::interlace() == 0) screen->setProgressive(1); if(V9938::interlace() == 1) screen->setInterlace(V9938::field()); } screen->setViewport(0, 0, screen->width(), screen->height()); screen->frame(); scheduler.exit(Event::Frame); } auto VDP::power() -> void { if(Model::MSX()) { TMS9918::power(); Thread::create(system.colorburst() * 2, [&] { TMS9918::main(); }); } if(Model::MSX2()) { V9938::power(); Thread::create(system.colorburst() * 2, [&] { V9938::main(); }); } screen->power(); } /* Z80 I/O ports 0x98 - 0x9b */ auto VDP::read(n2 port) -> n8 { if(Model::MSX()) switch(port) { case 0: return TMS9918::data(); case 1: return TMS9918::status(); } if(Model::MSX2()) switch(port) { case 0: return V9938::data(); case 1: return V9938::status(); } return 0xff; } auto VDP::write(n2 port, n8 data) -> void { if(Model::MSX()) switch(port) { case 0: return TMS9918::data(data); case 1: return TMS9918::control(data); } if(Model::MSX2()) switch(port) { case 0: return V9938::data(data); case 1: return V9938::control(data); case 2: return V9938::palette(data); case 3: return V9938::register(data); } } } ares-126/ares/msx/vdp/vdp.hpp000066400000000000000000000010171415063341600161540ustar00rootroot00000000000000struct VDP : TMS9918, V9938, Thread { Node::Object node; Node::Video::Screen screen; //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto step(u32 clocks) -> void override; auto irq(bool line) -> void override; auto frame() -> void override; auto power() -> void; auto read(n2 port) -> n8; auto write(n2 port, n8 data) -> void; //color.cpp auto colorMSX(n32) -> n64; auto colorMSX2(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; }; extern VDP vdp; ares-126/ares/n64/000077500000000000000000000000001415063341600136625ustar00rootroot00000000000000ares-126/ares/n64/GNUmakefile000066400000000000000000000047661415063341600157510ustar00rootroot00000000000000ares.components += sm5k ares.objects += ares-n64-memory ares.objects += ares-n64-system ares.objects += ares-n64-cartridge ares.objects += ares-n64-controller ares.objects += ares-n64-dd ares.objects += ares-n64-mi ares.objects += ares-n64-vi ares.objects += ares-n64-ai ares.objects += ares-n64-pi ares.objects += ares-n64-ri ares.objects += ares-n64-si ares.objects += ares-n64-rdram ares.objects += ares-n64-cpu ares.objects += ares-n64-rdp ares.objects += ares-n64-rsp $(object.path)/ares-n64-memory.o: $(ares.path)/n64/memory/memory.cpp $(object.path)/ares-n64-system.o: $(ares.path)/n64/system/system.cpp $(object.path)/ares-n64-cartridge.o: $(ares.path)/n64/cartridge/cartridge.cpp $(object.path)/ares-n64-controller.o: $(ares.path)/n64/controller/controller.cpp $(object.path)/ares-n64-dd.o: $(ares.path)/n64/dd/dd.cpp $(object.path)/ares-n64-sp.o: $(ares.path)/n64/sp/sp.cpp $(object.path)/ares-n64-dp.o: $(ares.path)/n64/dp/dp.cpp $(object.path)/ares-n64-mi.o: $(ares.path)/n64/mi/mi.cpp $(object.path)/ares-n64-vi.o: $(ares.path)/n64/vi/vi.cpp $(object.path)/ares-n64-ai.o: $(ares.path)/n64/ai/ai.cpp $(object.path)/ares-n64-pi.o: $(ares.path)/n64/pi/pi.cpp $(object.path)/ares-n64-ri.o: $(ares.path)/n64/ri/ri.cpp $(object.path)/ares-n64-si.o: $(ares.path)/n64/si/si.cpp $(object.path)/ares-n64-rdram.o: $(ares.path)/n64/rdram/rdram.cpp $(object.path)/ares-n64-cpu.o: $(ares.path)/n64/cpu/cpu.cpp $(object.path)/ares-n64-rdp.o: $(ares.path)/n64/rdp/rdp.cpp $(object.path)/ares-n64-rsp.o: $(ares.path)/n64/rsp/rsp.cpp flags += -msse4.2 options += -msse4.2 ifeq ($(vulkan),true) ares.objects += ares-n64-vulkan $(object.path)/ares-n64-vulkan.o: $(ares.path)/n64/vulkan/vulkan.cpp PARALLEL_RDP_IMPLEMENTATION := $(ares.path)/n64/vulkan/parallel-rdp include $(PARALLEL_RDP_IMPLEMENTATION)/config.mk ares.objects += $(PARALLEL_RDP_SOURCES_CXX:$(PARALLEL_RDP_IMPLEMENTATION)/%.cpp=ares-n64-parallel-rdp/%) ares.objects += $(PARALLEL_RDP_SOURCES_C:$(PARALLEL_RDP_IMPLEMENTATION)/%.c=ares-n64-parallel-rdp/%) flags += $(PARALLEL_RDP_INCLUDE_DIRS) $(PARALLEL_RDP_CXXFLAGS) $(PARALLEL_RDP_CFLAGS) $(object.path)/ares-n64-parallel-rdp/%.o: $(PARALLEL_RDP_IMPLEMENTATION)/%.cpp $(info Compiling $(subst ../,,$<) ...) @mkdir -p $(dir $@) @$(call compile) $(object.path)/ares-n64-parallel-rdp/%.o: $(PARALLEL_RDP_IMPLEMENTATION)/%.c $(info Compiling $(subst ../,,$<) ...) @mkdir -p $(dir $@) @$(call compile) endif ares-126/ares/n64/accuracy.hpp000066400000000000000000000012121415063341600161610ustar00rootroot00000000000000struct Accuracy { //enable all accuracy flags static constexpr bool Reference = 0; struct CPU { static constexpr bool Interpreter = 0 | Reference; static constexpr bool Recompiler = !Interpreter; //exceptions when the CPU accesses unaligned memory addresses static constexpr bool AddressErrors = 0 | Reference; }; struct RSP { static constexpr bool Interpreter = 0 | Reference; static constexpr bool Recompiler = !Interpreter; //VU instructions static constexpr bool SISD = 0 | Reference; static constexpr bool SIMD = !SISD; }; struct RDRAM { static constexpr bool Broadcasting = 0; }; }; ares-126/ares/n64/ai/000077500000000000000000000000001415063341600142535ustar00rootroot00000000000000ares-126/ares/n64/ai/ai.cpp000066400000000000000000000024001415063341600153440ustar00rootroot00000000000000#include namespace ares::Nintendo64 { AI ai; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto AI::load(Node::Object parent) -> void { node = parent->append("AI"); stream = node->append("AI"); stream->setChannels(2); stream->setFrequency(44100.0); debugger.load(node); } auto AI::unload() -> void { debugger = {}; node->remove(stream); stream.reset(); node.reset(); } auto AI::main() -> void { sample(); step(dac.period); } auto AI::sample() -> void { if(io.dmaCount == 0) return stream->frame(0.0, 0.0); auto data = rdram.ram.read(io.dmaAddress[0]); auto left = s16(data >> 16); auto right = s16(data >> 0); stream->frame(left / 32768.0, right / 32768.0); io.dmaAddress[0] += 4; io.dmaLength [0] -= 4; if(!io.dmaLength[0]) { mi.raise(MI::IRQ::AI); if(--io.dmaCount) { io.dmaAddress[0] = io.dmaAddress[1]; io.dmaLength [0] = io.dmaLength [1]; } } } auto AI::step(u32 clocks) -> void { Thread::clock += clocks; } auto AI::power(bool reset) -> void { Thread::reset(); fifo[0] = {}; fifo[1] = {}; io = {}; dac.frequency = 44100; dac.precision = 16; dac.period = system.frequency() / dac.frequency; } } ares-126/ares/n64/ai/ai.hpp000066400000000000000000000017051415063341600153600ustar00rootroot00000000000000//Audio Interface struct AI : Thread, Memory::IO { Node::Object node; Node::Audio::Stream stream; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //ai.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto sample() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct FIFO { n24 address; } fifo[2]; struct IO { n1 dmaEnable; n24 dmaAddress[2]; n18 dmaLength[2]; n2 dmaCount; n14 dacRate; n4 bitRate; } io; struct DAC { u32 frequency; u32 precision; u32 period; } dac; }; extern AI ai; ares-126/ares/n64/ai/debugger.cpp000066400000000000000000000013111415063341600165370ustar00rootroot00000000000000auto AI::Debugger::load(Node::Object parent) -> void { tracer.io = parent->append("I/O", "AI"); } auto AI::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "AI_DRAM_ADDRESS", "AI_LENGTH", "AI_CONTROL", "AI_STATUS", "AI_DACRATE", "AI_BITRATE", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "AI_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/ai/io.cpp000066400000000000000000000027011415063341600153660ustar00rootroot00000000000000auto AI::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address != 3) { //AI_LENGTH (mirrored) data.bit(0,17) = io.dmaLength[0]; } if(address == 3) { //AI_STATUS data.bit( 0) = io.dmaCount > 1; data.bit(20) = 1; data.bit(24) = 1; data.bit(30) = io.dmaCount > 0; data.bit(31) = io.dmaCount > 1; } debugger.io(Read, address, data); return data; } auto AI::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; if(address == 0) { //AI_DRAM_ADDRESS if(io.dmaCount < 2) { io.dmaAddress[io.dmaCount] = data.bit(0,23) & ~7; } } if(address == 1) { //AI_LENGTH n18 length = data.bit(0,17) & ~7; if(io.dmaCount < 2 && length) { io.dmaLength[io.dmaCount] = length; io.dmaCount++; } } if(address == 2) { //AI_CONTROL io.dmaEnable = data.bit(0); } if(address == 3) { //AI_STATUS mi.lower(MI::IRQ::AI); } if(address == 4) { //AI_DACRATE auto frequency = dac.frequency; io.dacRate = data.bit(0,13); dac.frequency = max(1, system.frequency() / 4 / (io.dacRate + 1)) * 1.037; dac.period = system.frequency() / dac.frequency; if(frequency != dac.frequency) stream->setFrequency(dac.frequency); } if(address == 5) { //AI_BITRATE io.bitRate = data.bit(0,3); dac.precision = io.bitRate + 1; } debugger.io(Write, address, data); } ares-126/ares/n64/ai/serialization.cpp000066400000000000000000000004341415063341600176350ustar00rootroot00000000000000auto AI::serialize(serializer& s) -> void { Thread::serialize(s); s(fifo[0].address); s(fifo[1].address); s(io.dmaEnable); s(io.dmaAddress); s(io.dmaLength); s(io.dmaCount); s(io.dacRate); s(io.bitRate); s(dac.frequency); s(dac.precision); s(dac.period); } ares-126/ares/n64/cartridge/000077500000000000000000000000001415063341600156265ustar00rootroot00000000000000ares-126/ares/n64/cartridge/cartridge.cpp000066400000000000000000000033571415063341600203060ustar00rootroot00000000000000#include namespace ares::Nintendo64 { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "flash.cpp" #include "isviewer.cpp" #include "debugger.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.cic = pak->attribute("cic"); if(auto fp = pak->read("program.rom")) { rom.allocate(fp->size()); rom.load(fp); } else { rom.allocate(16); } if(auto fp = pak->read("save.ram")) { ram.allocate(fp->size()); ram.load(fp); } if(auto fp = pak->read("save.eeprom")) { eeprom.allocate(fp->size()); eeprom.load(fp); } if(auto fp = pak->read("save.flash")) { flash.allocate(fp->size()); flash.load(fp); } isviewer.ram.allocate(64_KiB); debugger.load(node); power(false); } auto Cartridge::disconnect() -> void { if(!node) return; save(); debugger.unload(node); rom.reset(); ram.reset(); eeprom.reset(); flash.reset(); isviewer.ram.reset(); pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; if(auto fp = pak->write("save.ram")) { ram.save(fp); } if(auto fp = pak->write("save.eeprom")) { eeprom.save(fp); } if(auto fp = pak->write("save.flash")) { flash.save(fp); } } auto Cartridge::power(bool reset) -> void { flash.mode = Flash::Mode::Idle; flash.status = 0; flash.source = 0; flash.offset = 0; isviewer.ram.fill(0); } } ares-126/ares/n64/cartridge/cartridge.hpp000066400000000000000000000046511415063341600203110ustar00rootroot00000000000000struct Cartridge { Node::Peripheral node; VFS::Pak pak; Memory::Readable rom; Memory::Writable ram; Memory::Writable eeprom; struct Flash : Memory::Writable { template auto read(u32 address) -> u64 { if constexpr(Size == Byte) return readByte(address); if constexpr(Size == Half) return readHalf(address); if constexpr(Size == Word) return readWord(address); if constexpr(Size == Dual) return readDual(address); unreachable; } template auto write(u32 address, u64 data) -> void { if constexpr(Size == Byte) return writeByte(address, data); if constexpr(Size == Half) return writeHalf(address, data); if constexpr(Size == Word) return writeWord(address, data); if constexpr(Size == Dual) return writeDual(address, data); } //flash.cpp auto readByte(u32 adddres) -> u64; auto readHalf(u32 address) -> u64; auto readWord(u32 address) -> u64; auto readDual(u32 address) -> u64; auto writeByte(u32 address, u64 data) -> void; auto writeHalf(u32 address, u64 data) -> void; auto writeWord(u32 address, u64 data) -> void; auto writeDual(u32 address, u64 data) -> void; enum class Mode : u32 { Idle, Erase, Write, Read, Status }; Mode mode = Mode::Idle; u64 status = 0; u32 source = 0; u32 offset = 0; } flash; struct ISViewer : Memory::IO { Memory::Writable ram; //unserialized //isviewer.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; } isviewer; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory rom; Node::Debugger::Memory ram; Node::Debugger::Memory eeprom; Node::Debugger::Memory flash; } memory; } debugger; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } auto cic() const -> string { return information.cic; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Information { string title; string region; string cic; } information; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/n64/cartridge/debugger.cpp000066400000000000000000000034741415063341600201260ustar00rootroot00000000000000auto Cartridge::Debugger::load(Node::Object parent) -> void { memory.rom = parent->append("Cartridge ROM"); memory.rom->setSize(cartridge.rom.size); memory.rom->setRead([&](u32 address) -> u8 { return cartridge.rom.read(address); }); memory.rom->setWrite([&](u32 address, u8 data) -> void { return cartridge.rom.write(address, data); }); if(cartridge.ram) { memory.ram = parent->append("Cartridge SRAM"); memory.ram->setSize(cartridge.ram.size); memory.ram->setRead([&](u32 address) -> u8 { return cartridge.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return cartridge.ram.write(address, data); }); } if(cartridge.eeprom) { memory.eeprom = parent->append("Cartridge EEPROM"); memory.eeprom->setSize(cartridge.eeprom.size); memory.eeprom->setRead([&](u32 address) -> u8 { return cartridge.eeprom.read(address); }); memory.eeprom->setWrite([&](u32 address, u8 data) -> void { return cartridge.eeprom.write(address, data); }); } if(cartridge.flash) { memory.flash = parent->append("Cartridge Flash"); memory.flash->setSize(cartridge.flash.size); memory.flash->setRead([&](u32 address) -> u8 { return cartridge.flash.read(address); }); memory.flash->setWrite([&](u32 address, u8 data) -> void { return cartridge.flash.write(address, data); }); } } auto Cartridge::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.rom); parent->remove(memory.ram); parent->remove(memory.eeprom); parent->remove(memory.flash); memory.rom.reset(); memory.ram.reset(); memory.eeprom.reset(); memory.flash.reset(); } ares-126/ares/n64/cartridge/flash.cpp000066400000000000000000000053421415063341600174330ustar00rootroot00000000000000auto Cartridge::Flash::readByte(u32 address) -> u64 { debug(unusual, "[Cartridge::Flash::readByte] mode=", (u32)mode); return 0; } auto Cartridge::Flash::readHalf(u32 address) -> u64 { if(mode == Mode::Read) { return Memory::Writable::read(address); } if(mode == Mode::Status) { switch(address & 6) { default: case 0: return status >> 48; case 2: return status >> 32; case 4: return status >> 16; case 6: return status >> 0; } } debug(unusual, "[Cartridge::Flash::readHalf] mode=", (u32)mode); return 0; } auto Cartridge::Flash::readWord(u32 address) -> u64 { switch(address & 4) { default: case 0: return status >> 32; case 4: return status >> 0; } } auto Cartridge::Flash::readDual(u32 address) -> u64 { debug(unusual, "[Cartridge::Flash::readDual] mode=", (u32)mode); return 0; } auto Cartridge::Flash::writeByte(u32 address, u64 data) -> void { debug(unusual, "[Cartridge::Flash::writeByte] mode=", (u32)mode); return; } auto Cartridge::Flash::writeHalf(u32 address, u64 data) -> void { if(mode == Mode::Write) { //writes are deferred until the flash execute command is sent later source = pi.io.dramAddress; return; } debug(unusual, "[Cartridge::Flash::writeHalf] mode=", (u32)mode); return; } auto Cartridge::Flash::writeWord(u32 address, u64 data) -> void { address = (address & 0x7ff'ffff) >> 2; if(address == 0) { debug(unusual, "[Cartridge::Flash::writeWord] ignoring write to status register"); return; } u8 command = data >> 24; switch(command) { case 0x4b: //set erase offset offset = u16(data) * 128; return; case 0x78: //erase mode = Mode::Erase; status = 0x1111'8008'00c2'001dull; return; case 0xa5: //set write offset offset = u16(data) * 128; status = 0x1111'8004'00c2'001dull; return; case 0xb4: //write mode = Mode::Write; return; case 0xd2: //execute if(mode == Mode::Erase) { for(u32 index = 0; index < 128; index += 2) { Memory::Writable::write(offset + index, 0xffff); } } if(mode == Mode::Write) { for(u32 index = 0; index < 128; index += 2) { u16 half = rdram.ram.read(source + index); Memory::Writable::write(offset + index, half); } } return; case 0xe1: //status mode = Mode::Status; status = 0x1111'8001'00c2'001dull; return; case 0xf0: //read mode = Mode::Read; status = 0x1111'8004'f000'001dull; return; default: debug(unusual, "[Cartridge::Flash::writeWord] command=", hex(command, 2L)); return; } } auto Cartridge::Flash::writeDual(u32 address, u64 data) -> void { debug(unusual, "[Cartridge::Flash::writeDual] mode=", (u32)mode); return; } ares-126/ares/n64/cartridge/isviewer.cpp000066400000000000000000000007621415063341600201740ustar00rootroot00000000000000auto Cartridge::ISViewer::readWord(u32 address) -> u32 { u32 data = ram.read(address); address = (address & 0xffff) >> 2; if(address == 0) { data = 0x49533634; //'IS64' } return data; } auto Cartridge::ISViewer::writeWord(u32 address, u32 data) -> void { ram.write(address, data); address = (address & 0xffff) >> 2; if(address == 5) { for(auto address : range(u16(data))) { char c = ram.read(0x20 + address); fputc(c, stdout); } } } ares-126/ares/n64/cartridge/serialization.cpp000066400000000000000000000001301415063341600212010ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { s(ram); s(eeprom); s(flash); } ares-126/ares/n64/cartridge/slot.cpp000066400000000000000000000010441415063341600173120ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/n64/cartridge/slot.hpp000066400000000000000000000003471415063341600173240ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/n64/controller/000077500000000000000000000000001415063341600160455ustar00rootroot00000000000000ares-126/ares/n64/controller/controller.cpp000066400000000000000000000001541415063341600207340ustar00rootroot00000000000000#include namespace ares::Nintendo64 { #include "port.cpp" #include "gamepad/gamepad.cpp" } ares-126/ares/n64/controller/controller.hpp000066400000000000000000000004051415063341600207400ustar00rootroot00000000000000struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto save() -> void {} virtual auto read() -> n32 { return 0; } virtual auto serialize(serializer&) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" ares-126/ares/n64/controller/gamepad/000077500000000000000000000000001415063341600174435ustar00rootroot00000000000000ares-126/ares/n64/controller/gamepad/gamepad.cpp000066400000000000000000000142341415063341600215510ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); port = node->append("Pak"); port->setFamily("Nintendo 64"); port->setType("Pak"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setConnect([&] { return connect(); }); port->setDisconnect([&] { return disconnect(); }); port->setSupported({"Controller Pak", "Rumble Pak"}); x = node->append ("X-Axis"); y = node->append ("Y-Axis"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); b = node->append("B"); a = node->append("A"); cameraUp = node->append("C-Up"); cameraDown = node->append("C-Down"); cameraLeft = node->append("C-Left"); cameraRight = node->append("C-Right"); l = node->append("L"); r = node->append("R"); z = node->append("Z"); start = node->append("Start"); } Gamepad::~Gamepad() { disconnect(); } auto Gamepad::save() -> void { if(!slot) return; if(slot->name() == "Controller Pak") { ram.save(pak->write("save.pak")); } } auto Gamepad::allocate(string name) -> Node::Peripheral { if(name == "Controller Pak") return slot = port->append("Controller Pak"); if(name == "Rumble Pak" ) return slot = port->append("Rumble Pak"); return {}; } auto Gamepad::connect() -> void { if(!slot) return; if(slot->name() == "Controller Pak") { node->setPak(pak = platform->pak(node)); ram.allocate(32_KiB); formatControllerPak(); if(auto fp = pak->read("save.pak")) { if(fp->attribute("loaded").boolean()) { ram.load(pak->read("save.pak")); } } } if(slot->name() == "Rumble Pak") { motor = node->append("Rumble"); } } auto Gamepad::disconnect() -> void { if(!slot) return; if(slot->name() == "Controller Pak") { save(); ram.reset(); } if(slot->name() == "Rumble Pak") { rumble(false); node->remove(motor); motor.reset(); } port->remove(slot); slot.reset(); } auto Gamepad::rumble(bool enable) -> void { if(!motor) return; motor->setEnable(enable); platform->input(motor); } auto Gamepad::read() -> n32 { platform->input(x); platform->input(y); platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(b); platform->input(a); platform->input(cameraUp); platform->input(cameraDown); platform->input(cameraLeft); platform->input(cameraRight); platform->input(l); platform->input(r); platform->input(z); platform->input(start); //scale {-32768 ... +32767} to {-84 ... +84} auto ax = x->value() * 85.0 / 32767.0; auto ay = y->value() * 85.0 / 32767.0; //create scaled circular dead-zone in range {-15 ... +15} auto length = sqrt(ax * ax + ay * ay); if(length < 16.0) { length = 0.0; } else if(length > 85.0) { length = 85.0 / length; } else { length = (length - 16.0) * 85.0 / 69.0 / length; } ax *= length; ay *= length; //bound diagonals to an octagonal range {-68 ... +68} if(ax != 0.0 && ay != 0.0) { auto slope = ay / ax; auto edgex = copysign(85.0 / (abs(slope) + 16.0 / 69.0), ax); auto edgey = copysign(min(abs(edgex * slope), 85.0 / (1.0 / abs(slope) + 16.0 / 69.0)), ay); edgex = edgey / slope; auto scale = sqrt(edgex * edgex + edgey * edgey) / 85.0; ax *= scale; ay *= scale; } n32 data; data.byte(0) = -ay; data.byte(1) = +ax; data.bit(16) = cameraRight->value(); data.bit(17) = cameraLeft->value(); data.bit(18) = cameraDown->value(); data.bit(19) = cameraUp->value(); data.bit(20) = r->value(); data.bit(21) = l->value(); data.bit(22) = 0; //GND data.bit(23) = 0; //RST data.bit(24) = right->value() & !left->value(); data.bit(25) = left->value() & !right->value(); data.bit(26) = down->value() & !up->value(); data.bit(27) = up->value() & !down->value(); data.bit(28) = start->value(); data.bit(29) = z->value(); data.bit(30) = b->value(); data.bit(31) = a->value(); //when L+R+Start are pressed: the X/Y axes are zeroed, RST is set, and Start is cleared if(l->value() && r->value() && start->value()) { data.byte(0) = 0; //Y-Axis data.byte(1) = 0; //X-Axis data.bit(23) = 1; //RST data.bit(28) = 0; //Start } return data; } //controller paks contain 32KB of SRAM split into 128 pages of 256 bytes each. //the first 5 pages are for storing system data, and the remaining 123 for game data. auto Gamepad::formatControllerPak() -> void { ram.fill(0x00); //page 0 (system area) n6 fieldA = random(); n19 fieldB = random(); n27 fieldC = random(); for(u32 area : array{1,3,4,6}) { ram.write(area * 0x20 + 0x01, fieldA); //unknown ram.write(area * 0x20 + 0x04, fieldB); //serial# hi ram.write(area * 0x20 + 0x08, fieldC); //serial# lo ram.write(area * 0x20 + 0x18, 0x0001); //device ID ram.write(area * 0x20 + 0x1a, 0x01); //banks (0x01 = 32KB) ram.write(area * 0x20 + 0x1b, 0x00); //version# u16 checksum = 0; u16 inverted = 0; for(u32 half : range(14)) { u16 data = ram.read(area * 0x20 + half * 2); checksum += data; inverted += ~data; } ram.write(area * 0x20 + 0x1c, checksum); ram.write(area * 0x20 + 0x1e, inverted); } //pages 1+2 (inode table) for(u32 page : array{1,2}) { ram.write(0x100 * page + 0x01, 0x71); //unknown for(u32 slot : range(5,128)) { ram.write(0x100 * page + slot * 2 + 0x01, 0x03); //0x01 = stop, 0x03 = empty } } //pages 3+4 (note table) //pages 5-127 (game saves) } auto Gamepad::serialize(serializer& s) -> void { s(ram); rumble(false); } ares-126/ares/n64/controller/gamepad/gamepad.hpp000066400000000000000000000016631415063341600215600ustar00rootroot00000000000000struct Gamepad : Controller { Node::Port port; Node::Peripheral slot; VFS::Pak pak; Memory::Writable ram; //Toshiba TC55257DFL-85V Node::Input::Rumble motor; Node::Input::Axis x; Node::Input::Axis y; Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button b; Node::Input::Button a; Node::Input::Button cameraUp; Node::Input::Button cameraDown; Node::Input::Button cameraLeft; Node::Input::Button cameraRight; Node::Input::Button l; Node::Input::Button r; Node::Input::Button z; Node::Input::Button start; Gamepad(Node::Port); ~Gamepad(); auto save() -> void override; auto allocate(string name) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto rumble(bool enable) -> void; auto read() -> n32 override; auto formatControllerPak() -> void; auto serialize(serializer&) -> void override; }; ares-126/ares/n64/controller/port.cpp000066400000000000000000000017041415063341600175370ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort controllerPort3{"Controller Port 3"}; ControllerPort controllerPort4{"Controller Port 4"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Nintendo 64"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad"}); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::save() -> void { if(device) device->save(); } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { if(device) s(*device); } ares-126/ares/n64/controller/port.hpp000066400000000000000000000007401415063341600175430ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto save() -> void; auto allocate(string name) -> Node::Peripheral; auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; extern ControllerPort controllerPort3; extern ControllerPort controllerPort4; ares-126/ares/n64/cpu/000077500000000000000000000000001415063341600144515ustar00rootroot00000000000000ares-126/ares/n64/cpu/context.cpp000066400000000000000000000033141415063341600166420ustar00rootroot00000000000000auto CPU::Context::setMode() -> void { mode = min(2, self.scc.status.privilegeMode); if(self.scc.status.exceptionLevel) mode = Mode::Kernel; if(self.scc.status.errorLevel) mode = Mode::Kernel; switch(mode) { case Mode::Kernel: endian = self.scc.configuration.bigEndian; bits = self.scc.status.kernelExtendedAddressing ? 64 : 32; break; case Mode::Supervisor: endian = self.scc.configuration.bigEndian; bits = self.scc.status.supervisorExtendedAddressing ? 64 : 32; break; case Mode::User: endian = self.scc.configuration.bigEndian ^ self.scc.status.reverseEndian; bits = self.scc.status.userExtendedAddressing ? 64 : 32; break; } if(bits == 32 || bits == 64) { segment[0] = Segment::Mapped; segment[1] = Segment::Mapped; segment[2] = Segment::Mapped; segment[3] = Segment::Mapped; switch(mode) { case Mode::Kernel: segment[4] = Segment::Cached; segment[5] = Segment::Direct; segment[6] = Segment::Mapped; segment[7] = Segment::Mapped; break; case Mode::Supervisor: segment[4] = Segment::Unused; segment[5] = Segment::Unused; segment[6] = Segment::Mapped; segment[7] = Segment::Unused; break; case Mode::User: segment[4] = Segment::Unused; segment[5] = Segment::Unused; segment[6] = Segment::Unused; segment[7] = Segment::Unused; break; } return; } if(bits == 64) { for(auto n : range(8)) switch(mode) { case Mode::Kernel: segment[n] = Segment::Kernel64; break; case Mode::Supervisor: segment[n] = Segment::Supervisor64; break; case Mode::User: segment[n] = Segment::User64; break; } } } ares-126/ares/n64/cpu/cpu.cpp000066400000000000000000000073111415063341600157460ustar00rootroot00000000000000#include namespace ares::Nintendo64 { CPU cpu; #include "context.cpp" #include "icache.cpp" #include "dcache.cpp" #include "tlb.cpp" #include "memory.cpp" #include "exceptions.cpp" #include "interpreter.cpp" #include "interpreter-ipu.cpp" #include "interpreter-scc.cpp" #include "interpreter-fpu.cpp" #include "recompiler.cpp" #include "debugger.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { debugger.unload(); node.reset(); } auto CPU::main() -> void { instruction(); synchronize(); } auto CPU::step(u32 clocks) -> void { Thread::clock += clocks; } auto CPU::synchronize() -> void { auto clocks = Thread::clock * 2; Thread::clock = 0; vi.clock -= clocks; ai.clock -= clocks; rsp.clock -= clocks; rdp.clock -= clocks; while( vi.clock < 0) vi.main(); while( ai.clock < 0) ai.main(); while(rsp.clock < 0) rsp.main(); while(rdp.clock < 0) rdp.main(); queue.step(clocks, [](u32 event) { switch(event) { case Queue::RSP_DMA: return rsp.dmaTransfer(); case Queue::PI_DMA_Read: return pi.dmaRead(); case Queue::PI_DMA_Write: return pi.dmaWrite(); case Queue::SI_DMA_Read: return si.dmaRead(); case Queue::SI_DMA_Write: return si.dmaWrite(); } }); clocks >>= 1; if(scc.count < scc.compare && scc.count + clocks >= scc.compare) { scc.cause.interruptPending.bit(Interrupt::Timer) = 1; } scc.count += clocks; } auto CPU::instruction() -> void { if(auto interrupts = scc.cause.interruptPending & scc.status.interruptMask) { if(scc.status.interruptEnable && !scc.status.exceptionLevel && !scc.status.errorLevel) { debugger.interrupt(scc.cause.interruptPending); step(1); return exception.interrupt(); } } if constexpr(Accuracy::CPU::Recompiler) { auto address = devirtualize(ipu.pc)(0); auto block = recompiler.block(address); block->execute(*this); } if constexpr(Accuracy::CPU::Interpreter) { pipeline.address = ipu.pc; pipeline.instruction = fetch(ipu.pc); debugger.instruction(); decoderEXECUTE(); instructionEpilogue(); } } auto CPU::instructionEpilogue() -> bool { if constexpr(Accuracy::CPU::Recompiler) { icache.step(ipu.pc); //simulates timings without performing actual icache loads } ipu.r[0].u64 = 0; if(--scc.random.index < scc.wired.index) { scc.random.index = 31; } switch(branch.state) { case Branch::Step: ipu.pc += 4; return 0; case Branch::Take: ipu.pc += 4; branch.delaySlot(); return 0; case Branch::DelaySlot: ipu.pc = branch.pc; branch.reset(); return 1; case Branch::Exception: branch.reset(); return 1; case Branch::Discard: ipu.pc += 8; branch.reset(); return 1; } unreachable; } auto CPU::power(bool reset) -> void { Thread::reset(); pipeline = {}; branch = {}; context.endian = Context::Endian::Big; context.mode = Context::Mode::Kernel; context.bits = 64; for(auto& segment : context.segment) segment = Context::Segment::Unused; icache.power(reset); dcache.power(reset); for(auto& entry : tlb.entry) entry = {}; tlb.physicalAddress = 0; for(auto& r : ipu.r) r.u64 = 0; ipu.lo.u64 = 0; ipu.hi.u64 = 0; ipu.r[29].u64 = u32(0xa400'1ff0); //stack pointer ipu.pc = u32(0xbfc0'0000); scc = {}; for(auto& r : fpu.r) r.u64 = 0; fpu.csr = {}; fesetround(FE_TONEAREST); context.setMode(); if constexpr(Accuracy::CPU::Recompiler) { auto buffer = ares::Memory::FixedAllocator::get().acquire(512_MiB); recompiler.allocator.resize(512_MiB, bump_allocator::executable | bump_allocator::zero_fill, buffer); recompiler.reset(); } } } ares-126/ares/n64/cpu/cpu.hpp000066400000000000000000000537641415063341600157700ustar00rootroot00000000000000//NEC VR4300 struct CPU : Thread { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload() -> void; auto instruction() -> void; auto exception(u8 code) -> void; auto interrupt(u8 mask) -> void; auto tlbWrite(u32 index) -> void; auto tlbModification(u64 address) -> void; auto tlbLoad(u64 address, u64 physical) -> void; auto tlbLoadInvalid(u64 address) -> void; auto tlbLoadMiss(u64 address) -> void; auto tlbStore(u64 address, u64 physical) -> void; auto tlbStoreInvalid(u64 address) -> void; auto tlbStoreMiss(u64 address) -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification exception; Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification tlb; } tracer; } debugger; //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto synchronize() -> void; auto instruction() -> void; auto instructionEpilogue() -> bool; auto power(bool reset) -> void; struct Pipeline { u32 address; u32 instruction; struct InstructionCache { } ic; struct RegisterFile { } rf; struct Execution { } ex; struct DataCache { } dc; struct WriteBack { } wb; } pipeline; struct Branch { enum : u32 { Step, Take, DelaySlot, Exception, Discard }; auto inDelaySlot() const -> bool { return state == DelaySlot; } auto reset() -> void { state = Step; } auto take(u32 address) -> void { state = Take; pc = address; } auto delaySlot() -> void { state = DelaySlot; } auto exception() -> void { state = Exception; } auto discard() -> void { state = Discard; } u64 pc = 0; u32 state = Step; } branch; //context.cpp struct Context { CPU& self; Context(CPU& self) : self(self) {} enum Endian : bool { Little, Big }; enum Mode : u32 { Kernel, Supervisor, User }; enum Segment : u32 { Unused, Mapped, Cached, Direct, Kernel64, Supervisor64, User64 }; auto littleEndian() const -> bool { return endian == Endian::Little; } auto bigEndian() const -> bool { return endian == Endian::Big; } auto kernelMode() const -> bool { return mode == Mode::Kernel; } auto supervisorMode() const -> bool { return mode == Mode::Supervisor; } auto userMode() const -> bool { return mode == Mode::User; } auto setMode() -> void; bool endian; u32 mode; u32 bits; u32 segment[8]; //512_MiB chunks } context{*this}; //icache.cpp struct InstructionCache { struct Line; auto line(u32 address) -> Line&; auto step(u32 address) -> void; auto fetch(u32 address) -> u32; auto read(u32 address) -> u32; auto power(bool reset) -> void; //16KB struct Line { auto hit(u32 address) const -> bool; auto fill(u32 address) -> void; auto writeBack() -> void; auto read(u32 address) const -> u32; bool valid; u32 tag; u16 index; u32 words[8]; } lines[512]; } icache; //dcache.cpp struct DataCache { struct Line; auto line(u32 address) -> Line&; template auto read(u32 address) -> u64; template auto write(u32 address, u64 data) -> void; auto power(bool reset) -> void; //8KB struct Line { auto hit(u32 address) const -> bool; template auto fill(u32 address, u64 data) -> void; auto fill(u32 address) -> void; auto writeBack() -> void; template auto read(u32 address) const -> u64; template auto write(u32 address, u64 data) -> void; bool valid; bool dirty; u32 tag; u16 index; union { u8 bytes[16]; u16 halfs[8]; u32 words[4]; }; } lines[512]; } dcache; //tlb.cpp: Translation Lookaside Buffer struct TLB { CPU& self; TLB(CPU& self) : self(self) {} static constexpr u32 Entries = 32; struct Match { explicit operator bool() const { return found; } bool found; bool cache; u32 address; }; //tlb.cpp auto load(u32 address) -> Match; auto store(u32 address) -> Match; auto exception(u32 address) -> void; struct Entry { //scc-tlb.cpp auto synchronize() -> void; n1 global[2]; n1 valid[2]; n1 dirty[2]; n3 cacheAlgorithm[2]; n32 physicalAddress[2]; n32 pageMask; n40 virtualAddress; n8 addressSpaceID; n2 region; //internal: n1 globals; n32 addressMaskHi; n32 addressMaskLo; n32 addressSelect; n40 addressCompare; } entry[TLB::Entries]; u32 physicalAddress; } tlb{*this}; //memory.cpp auto kernelSegment32(u32 address) const -> Context::Segment; auto supervisorSegment32(u32 address) const -> Context::Segment; auto userSegment32(u32 address) const -> Context::Segment; auto kernelSegment64(u64 address) const -> Context::Segment; auto supervisorSegment64(u64 address) const -> Context::Segment; auto userSegment64(u64 address) const -> Context::Segment; auto segment(u64 address) -> Context::Segment; auto devirtualize(u64 address) -> maybe; auto fetch(u64 address) -> u32; template auto read(u64 address) -> maybe; template auto write(u64 address, u64 data) -> bool; //serialization.cpp auto serialize(serializer&) -> void; //exception.cpp struct Exception { CPU& self; Exception(CPU& self) : self(self) {} auto trigger(u32 code, u32 coprocessor = 0, bool tlbMiss = 0) -> void; auto interrupt() -> void; auto tlbModification() -> void; auto tlbLoadInvalid() -> void; auto tlbLoadMiss() -> void; auto tlbStoreInvalid() -> void; auto tlbStoreMiss() -> void; auto addressLoad() -> void; auto addressStore() -> void; auto busInstruction() -> void; auto busData() -> void; auto systemCall() -> void; auto breakpoint() -> void; auto reservedInstruction() -> void; auto coprocessor0() -> void; auto coprocessor1() -> void; auto coprocessor2() -> void; auto coprocessor3() -> void; auto arithmeticOverflow() -> void; auto trap() -> void; auto floatingPoint() -> void; auto watchAddress() -> void; } exception{*this}; enum Interrupt : u32 { Software0 = 0, Software1 = 1, RCP = 2, Cartridge = 3, Reset = 4, ReadRDB = 5, WriteRDB = 6, Timer = 7, }; //ipu.cpp union r64 { struct { int32_t order_msb2(s32h, s32); }; struct { uint32_t order_msb2(u32h, u32); }; struct { float32_t order_msb2(f32h, f32); }; struct { int64_t s64; }; struct { uint64_t u64; }; struct { float64_t f64; }; auto s128() const -> int128_t { return (int128_t)s64; } auto u128() const -> uint128_t { return (uint128_t)u64; } }; using cr64 = const r64; struct IPU { enum Register : u32 { R0, //zero (read-only) AT, //assembler temporary V0, V1, //arithmetic values A0, A1, A2, A3, //subroutine parameters T0, T1, T2, T3, T4, T5, T6, T7, //temporary registers S0, S1, S2, S3, S4, S5, S6, S7, //saved registers T8, T9, //temporary registers K0, K1, //kernel registers GP, //global pointer SP, //stack pointer S8, //saved register RA, //return address }; r64 r[32]; r64 lo; r64 hi; u64 pc; //program counter } ipu; //interpreter-ipu.cpp auto ADD(r64& rd, cr64& rs, cr64& rt) -> void; auto ADDI(r64& rt, cr64& rs, s16 imm) -> void; auto ADDIU(r64& rt, cr64& rs, s16 imm) -> void; auto ADDU(r64& rd, cr64& rs, cr64& rt) -> void; auto AND(r64& rd, cr64& rs, cr64& rt) -> void; auto ANDI(r64& rt, cr64& rs, u16 imm) -> void; auto BEQ(cr64& rs, cr64& rt, s16 imm) -> void; auto BEQL(cr64& rs, cr64& rt, s16 imm) -> void; auto BGEZ(cr64& rs, s16 imm) -> void; auto BGEZAL(cr64& rs, s16 imm) -> void; auto BGEZALL(cr64& rs, s16 imm) -> void; auto BGEZL(cr64& rs, s16 imm) -> void; auto BGTZ(cr64& rs, s16 imm) -> void; auto BGTZL(cr64& rs, s16 imm) -> void; auto BLEZ(cr64& rs, s16 imm) -> void; auto BLEZL(cr64& rs, s16 imm) -> void; auto BLTZ(cr64& rs, s16 imm) -> void; auto BLTZAL(cr64& rs, s16 imm) -> void; auto BLTZALL(cr64& rs, s16 imm) -> void; auto BLTZL(cr64& rs, s16 imm) -> void; auto BNE(cr64& rs, cr64& rt, s16 imm) -> void; auto BNEL(cr64& rs, cr64& rt, s16 imm) -> void; auto BREAK() -> void; auto CACHE(u8 operation, cr64& rs, s16 imm) -> void; auto DADD(r64& rd, cr64& rs, cr64& rt) -> void; auto DADDI(r64& rt, cr64& rs, s16 imm) -> void; auto DADDIU(r64& rt, cr64& rs, s16 imm) -> void; auto DADDU(r64& rd, cr64& rs, cr64& rt) -> void; auto DDIV(cr64& rs, cr64& rt) -> void; auto DDIVU(cr64& rs, cr64& rt) -> void; auto DIV(cr64& rs, cr64& rt) -> void; auto DIVU(cr64& rs, cr64& rt) -> void; auto DMULT(cr64& rs, cr64& rt) -> void; auto DMULTU(cr64& rs, cr64& rt) -> void; auto DSLL(r64& rd, cr64& rt, u8 sa) -> void; auto DSLLV(r64& rd, cr64& rt, cr64& rs) -> void; auto DSRA(r64& rd, cr64& rt, u8 sa) -> void; auto DSRAV(r64& rd, cr64& rt, cr64& rs) -> void; auto DSRL(r64& rd, cr64& rt, u8 sa) -> void; auto DSRLV(r64& rd, cr64& rt, cr64& rs) -> void; auto DSUB(r64& rd, cr64& rs, cr64& rt) -> void; auto DSUBU(r64& rd, cr64& rs, cr64& rt) -> void; auto J(u32 imm) -> void; auto JAL(u32 imm) -> void; auto JALR(r64& rd, cr64& rs) -> void; auto JR(cr64& rs) -> void; auto LB(r64& rt, cr64& rs, s16 imm) -> void; auto LBU(r64& rt, cr64& rs, s16 imm) -> void; auto LD(r64& rt, cr64& rs, s16 imm) -> void; auto LDL(r64& rt, cr64& rs, s16 imm) -> void; auto LDR(r64& rt, cr64& rs, s16 imm) -> void; auto LH(r64& rt, cr64& rs, s16 imm) -> void; auto LHU(r64& rt, cr64& rs, s16 imm) -> void; auto LUI(r64& rt, u16 imm) -> void; auto LL(r64& rt, cr64& rs, s16 imm) -> void; auto LLD(r64& rt, cr64& rs, s16 imm) -> void; auto LW(r64& rt, cr64& rs, s16 imm) -> void; auto LWL(r64& rt, cr64& rs, s16 imm) -> void; auto LWR(r64& rt, cr64& rs, s16 imm) -> void; auto LWU(r64& rt, cr64& rs, s16 imm) -> void; auto MFHI(r64& rd) -> void; auto MFLO(r64& rd) -> void; auto MTHI(cr64& rs) -> void; auto MTLO(cr64& rs) -> void; auto MULT(cr64& rs, cr64& rt) -> void; auto MULTU(cr64& rs, cr64& rt) -> void; auto NOR(r64& rd, cr64& rs, cr64& rt) -> void; auto OR(r64& rd, cr64& rs, cr64& rt) -> void; auto ORI(r64& rt, cr64& rs, u16 imm) -> void; auto SB(cr64& rt, cr64& rs, s16 imm) -> void; auto SC(r64& rt, cr64& rs, s16 imm) -> void; auto SD(cr64& rt, cr64& rs, s16 imm) -> void; auto SCD(r64& rt, cr64& rs, s16 imm) -> void; auto SDL(cr64& rt, cr64& rs, s16 imm) -> void; auto SDR(cr64& rt, cr64& rs, s16 imm) -> void; auto SH(cr64& rt, cr64& rs, s16 imm) -> void; auto SLL(r64& rd, cr64& rt, u8 sa) -> void; auto SLLV(r64& rd, cr64& rt, cr64& rs) -> void; auto SLT(r64& rd, cr64& rs, cr64& rt) -> void; auto SLTI(r64& rt, cr64& rs, s16 imm) -> void; auto SLTIU(r64& rt, cr64& rs, s16 imm) -> void; auto SLTU(r64& rd, cr64& rs, cr64& rt) -> void; auto SRA(r64& rd, cr64& rt, u8 sa) -> void; auto SRAV(r64& rd, cr64& rt, cr64& rs) -> void; auto SRL(r64& rd, cr64& rt, u8 sa) -> void; auto SRLV(r64& rd, cr64& rt, cr64& rs) -> void; auto SUB(r64& rd, cr64& rs, cr64& rt) -> void; auto SUBU(r64& rd, cr64& rs, cr64& rt) -> void; auto SW(cr64& rt, cr64& rs, s16 imm) -> void; auto SWL(cr64& rt, cr64& rs, s16 imm) -> void; auto SWR(cr64& rt, cr64& rs, s16 imm) -> void; auto SYNC() -> void; auto SYSCALL() -> void; auto TEQ(cr64& rs, cr64& rt) -> void; auto TEQI(cr64& rs, s16 imm) -> void; auto TGE(cr64& rs, cr64& rt) -> void; auto TGEI(cr64& rs, s16 imm) -> void; auto TGEIU(cr64& rs, s16 imm) -> void; auto TGEU(cr64& rs, cr64& rt) -> void; auto TLT(cr64& rs, cr64& rt) -> void; auto TLTI(cr64& rs, s16 imm) -> void; auto TLTIU(cr64& rs, s16 imm) -> void; auto TLTU(cr64& rs, cr64& rt) -> void; auto TNE(cr64& rs, cr64& rt) -> void; auto TNEI(cr64& rs, s16 imm) -> void; auto XOR(r64& rd, cr64& rs, cr64& rt) -> void; auto XORI(r64& rt, cr64& rs, u16 imm) -> void; struct SCC { //0 struct Index { n6 tlbEntry; n1 probeFailure; } index; //1 struct Random { n5 index = 31; n1 unused; } random; //2: EntryLo0 //3: EntryLo1 //5: PageMask //10: EntryHi TLB::Entry tlb; //4 struct Context { n19 badVirtualAddress; n41 pageTableEntryBase; } context; //6 struct Wired { n5 index; n1 unused; } wired; //8 n64 badVirtualAddress; //9 n33 count; //32-bit; +1 to count half-cycles //11 n33 compare; //12 struct Status { n1 interruptEnable; n1 exceptionLevel; n1 errorLevel = 1; n2 privilegeMode; n1 userExtendedAddressing; n1 supervisorExtendedAddressing; n1 kernelExtendedAddressing; n8 interruptMask = 0xff; n1 de; //unused n1 ce; //unused n1 condition; n1 softReset = 1; n1 tlbShutdown; n1 vectorLocation = 1; n1 instructionTracing; n1 reverseEndian; n1 floatingPointMode = 1; n1 lowPowerMode; struct Enable { n1 coprocessor0 = 1; n1 coprocessor1 = 1; n1 coprocessor2; n1 coprocessor3; } enable; } status; //13 struct Cause { n5 exceptionCode; n8 interruptPending; n2 coprocessorError; n1 branchDelay; } cause; //14: Exception Program Counter n64 epc; //15: Coprocessor Revision Identifier struct Coprocessor { static constexpr u8 revision = 0x22; static constexpr u8 implementation = 0x0b; } coprocessor; //16 struct Configuration { n2 coherencyAlgorithmKSEG0; n2 cu; //reserved n1 bigEndian = 1; n2 sysadWritebackPattern; n2 systemClockRatio = 6; } configuration; //17: Load Linked Address n64 ll; n1 llbit; //18 struct WatchLo { n1 trapOnWrite; n1 trapOnRead; n32 physicalAddress; } watchLo; //19 struct WatchHi { n4 physicalAddressExtended; //unused; for R4000 compatibility only } watchHi; //20 struct XContext { n27 badVirtualAddress; n2 region; n31 pageTableEntryBase; } xcontext; //26 struct ParityError { n8 diagnostic; //unused; for R4000 compatibility only } parityError; //28 struct TagLo { n2 primaryCacheState; n32 physicalAddress; } tagLo; //30: Error Exception Program Counter n64 epcError; } scc; //interpreter-scc.cpp auto getControlRegister(n5) -> u64; auto setControlRegister(n5, n64) -> void; auto DMFC0(r64& rt, u8 rd) -> void; auto DMTC0(cr64& rt, u8 rd) -> void; auto ERET() -> void; auto MFC0(r64& rt, u8 rd) -> void; auto MTC0(cr64& rt, u8 rd) -> void; auto TLBP() -> void; auto TLBR() -> void; auto TLBWI() -> void; auto TLBWR() -> void; struct FPU { auto setFloatingPointMode(bool) -> void; r64 r[32]; struct Coprocessor { static constexpr u8 revision = 0x00; static constexpr u8 implementation = 0x0b; } coprocessor; struct ControlStatus { n2 roundMode = 0; struct Flag { n1 inexact = 0; n1 underflow = 0; n1 overflow = 0; n1 divisionByZero = 0; n1 invalidOperation = 0; } flag; struct Enable { n1 inexact = 0; n1 underflow = 0; n1 overflow = 0; n1 divisionByZero = 0; n1 invalidOperation = 0; } enable; struct Cause { n1 inexact = 0; n1 underflow = 0; n1 overflow = 0; n1 divisionByZero = 0; n1 invalidOperation = 0; n1 unimplementedOperation = 0; } cause; n1 compare = 0; n1 flushed = 0; } csr; } fpu; //interpreter-fpu.cpp template auto fgr(u32) -> T&; auto getControlRegisterFPU(n5) -> u32; auto setControlRegisterFPU(n5, n32) -> void; auto BC1(bool value, bool likely, s16 imm) -> void; auto CFC1(r64& rt, u8 rd) -> void; auto CTC1(cr64& rt, u8 rd) -> void; auto DMFC1(r64& rt, u8 fs) -> void; auto DMTC1(cr64& rt, u8 fs) -> void; auto FABS_S(u8 fd, u8 fs) -> void; auto FABS_D(u8 fd, u8 fs) -> void; auto FADD_S(u8 fd, u8 fs, u8 ft) -> void; auto FADD_D(u8 fd, u8 fs, u8 ft) -> void; auto FCEIL_L_S(u8 fd, u8 fs) -> void; auto FCEIL_L_D(u8 fd, u8 fs) -> void; auto FCEIL_W_S(u8 fd, u8 fs) -> void; auto FCEIL_W_D(u8 fd, u8 fs) -> void; auto FC_EQ_S(u8 fs, u8 ft) -> void; auto FC_EQ_D(u8 fs, u8 ft) -> void; auto FC_F_S(u8 fs, u8 ft) -> void; auto FC_F_D(u8 fs, u8 ft) -> void; auto FC_LE_S(u8 fs, u8 ft) -> void; auto FC_LE_D(u8 fs, u8 ft) -> void; auto FC_LT_S(u8 fs, u8 ft) -> void; auto FC_LT_D(u8 fs, u8 ft) -> void; auto FC_NGE_S(u8 fs, u8 ft) -> void; auto FC_NGE_D(u8 fs, u8 ft) -> void; auto FC_NGL_S(u8 fs, u8 ft) -> void; auto FC_NGL_D(u8 fs, u8 ft) -> void; auto FC_NGLE_S(u8 fs, u8 ft) -> void; auto FC_NGLE_D(u8 fs, u8 ft) -> void; auto FC_NGT_S(u8 fs, u8 ft) -> void; auto FC_NGT_D(u8 fs, u8 ft) -> void; auto FC_OLE_S(u8 fs, u8 ft) -> void; auto FC_OLE_D(u8 fs, u8 ft) -> void; auto FC_OLT_S(u8 fs, u8 ft) -> void; auto FC_OLT_D(u8 fs, u8 ft) -> void; auto FC_SEQ_S(u8 fs, u8 ft) -> void; auto FC_SEQ_D(u8 fs, u8 ft) -> void; auto FC_SF_S(u8 fs, u8 ft) -> void; auto FC_SF_D(u8 fs, u8 ft) -> void; auto FC_UEQ_S(u8 fs, u8 ft) -> void; auto FC_UEQ_D(u8 fs, u8 ft) -> void; auto FC_ULE_S(u8 fs, u8 ft) -> void; auto FC_ULE_D(u8 fs, u8 ft) -> void; auto FC_ULT_S(u8 fs, u8 ft) -> void; auto FC_ULT_D(u8 fs, u8 ft) -> void; auto FC_UN_S(u8 fs, u8 ft) -> void; auto FC_UN_D(u8 fs, u8 ft) -> void; auto FCVT_S_D(u8 fd, u8 fs) -> void; auto FCVT_S_W(u8 fd, u8 fs) -> void; auto FCVT_S_L(u8 fd, u8 fs) -> void; auto FCVT_D_S(u8 fd, u8 fs) -> void; auto FCVT_D_W(u8 fd, u8 fs) -> void; auto FCVT_D_L(u8 fd, u8 fs) -> void; auto FCVT_L_S(u8 fd, u8 fs) -> void; auto FCVT_L_D(u8 fd, u8 fs) -> void; auto FCVT_W_S(u8 fd, u8 fs) -> void; auto FCVT_W_D(u8 fd, u8 fs) -> void; auto FDIV_S(u8 fd, u8 fs, u8 ft) -> void; auto FDIV_D(u8 fd, u8 fs, u8 ft) -> void; auto FFLOOR_L_S(u8 fd, u8 fs) -> void; auto FFLOOR_L_D(u8 fd, u8 fs) -> void; auto FFLOOR_W_S(u8 fd, u8 fs) -> void; auto FFLOOR_W_D(u8 fd, u8 fs) -> void; auto FMOV_S(u8 fd, u8 fs) -> void; auto FMOV_D(u8 fd, u8 fs) -> void; auto FMUL_S(u8 fd, u8 fs, u8 ft) -> void; auto FMUL_D(u8 fd, u8 fs, u8 ft) -> void; auto FNEG_S(u8 fd, u8 fs) -> void; auto FNEG_D(u8 fd, u8 fs) -> void; auto FROUND_L_S(u8 fd, u8 fs) -> void; auto FROUND_L_D(u8 fd, u8 fs) -> void; auto FROUND_W_S(u8 fd, u8 fs) -> void; auto FROUND_W_D(u8 fd, u8 fs) -> void; auto FSQRT_S(u8 fd, u8 fs) -> void; auto FSQRT_D(u8 fd, u8 fs) -> void; auto FSUB_S(u8 fd, u8 fs, u8 ft) -> void; auto FSUB_D(u8 fd, u8 fs, u8 ft) -> void; auto FTRUNC_L_S(u8 fd, u8 fs) -> void; auto FTRUNC_L_D(u8 fd, u8 fs) -> void; auto FTRUNC_W_S(u8 fd, u8 fs) -> void; auto FTRUNC_W_D(u8 fd, u8 fs) -> void; auto LDC1(u8 ft, cr64& rs, s16 imm) -> void; auto LWC1(u8 ft, cr64& rs, s16 imm) -> void; auto MFC1(r64& rt, u8 fs) -> void; auto MTC1(cr64& rt, u8 fs) -> void; auto SDC1(u8 ft, cr64& rs, s16 imm) -> void; auto SWC1(u8 ft, cr64& rs, s16 imm) -> void; //decoder.cpp auto decoderEXECUTE() -> void; auto decoderSPECIAL() -> void; auto decoderREGIMM() -> void; auto decoderSCC() -> void; auto decoderFPU() -> void; auto COP2() -> void; auto COP3() -> void; auto INVALID() -> void; //recompiler.cpp struct Recompiler : recompiler::amd64 { using recompiler::amd64::call; CPU& self; Recompiler(CPU& self) : self(self) {} struct Block { auto execute(CPU& self) -> void { ((void (*)(r64*, CPU*, r64*))code)(&self.ipu.r[16], &self, &self.fpu.r[16]); } u8* code; }; struct Pool { Block* blocks[1 << 6]; }; auto reset() -> void { for(u32 index : range(1 << 21)) pools[index] = nullptr; } auto invalidate(u32 address) -> void { pools[address >> 8 & 0x1fffff] = nullptr; } auto pool(u32 address) -> Pool*; auto block(u32 address) -> Block*; auto emit(u32 address) -> Block*; auto emitEXECUTE(u32 instruction) -> bool; auto emitSPECIAL(u32 instruction) -> bool; auto emitREGIMM(u32 instruction) -> bool; auto emitSCC(u32 instruction) -> bool; auto emitFPU(u32 instruction) -> bool; template auto call(R (CPU::*function)(P...)) -> void; bump_allocator allocator; Pool* pools[1 << 21]; //2_MiB * sizeof(void*) == 16_MiB } recompiler{*this}; struct Disassembler { CPU& self; Disassembler(CPU& self) : self(self) {} //disassembler.cpp auto disassemble(u32 address, u32 instruction) -> string; template auto hint(P&&... p) const -> string; bool showColors = true; bool showValues = true; private: auto EXECUTE() -> vector; auto SPECIAL() -> vector; auto REGIMM() -> vector; auto SCC() -> vector; auto FPU() -> vector; auto immediate(s64 value, u32 bits = 0) const -> string; auto ipuRegisterName(u32 index) const -> string; auto ipuRegisterValue(u32 index) const -> string; auto ipuRegisterIndex(u32 index, s16 offset) const -> string; auto sccRegisterName(u32 index) const -> string; auto sccRegisterValue(u32 index) const -> string; auto fpuRegisterName(u32 index) const -> string; auto fpuRegisterValue(u32 index) const -> string; auto ccrRegisterName(u32 index) const -> string; auto ccrRegisterValue(u32 index) const -> string; u32 address; u32 instruction; } disassembler{*this}; }; extern CPU cpu; ares-126/ares/n64/cpu/dcache.cpp000066400000000000000000000071441415063341600163720ustar00rootroot00000000000000auto CPU::DataCache::Line::hit(u32 address) const -> bool { return valid && tag == (address & ~0xfff); } template auto CPU::DataCache::Line::fill(u32 address, u64 data) -> void { cpu.step(40); valid = 1; dirty = 1; tag = address & ~0xfff; //read words according to critical doubleword first scheme switch(address & 8) { case 0: if constexpr(Size != Dual) { words[0] = bus.read(tag | index | 0x0); words[1] = bus.read(tag | index | 0x4); } write(address, data); words[2] = bus.read(tag | index | 0x8); words[3] = bus.read(tag | index | 0xc); break; case 8: if constexpr(Size != Dual) { words[2] = bus.read(tag | index | 0x8); words[3] = bus.read(tag | index | 0xc); } write(address, data); words[0] = bus.read(tag | index | 0x0); words[1] = bus.read(tag | index | 0x4); break; } } auto CPU::DataCache::Line::fill(u32 address) -> void { cpu.step(40); valid = 1; dirty = 0; tag = address & ~0xfff; //read words according to critical doubleword first scheme switch(address & 8) { case 0: words[0] = bus.read(tag | index | 0x0); words[1] = bus.read(tag | index | 0x4); words[2] = bus.read(tag | index | 0x8); words[3] = bus.read(tag | index | 0xc); break; case 8: words[2] = bus.read(tag | index | 0x8); words[3] = bus.read(tag | index | 0xc); words[0] = bus.read(tag | index | 0x0); words[1] = bus.read(tag | index | 0x4); break; } } auto CPU::DataCache::Line::writeBack() -> void { cpu.step(40); dirty = 0; bus.write(tag | index | 0x0, words[0]); bus.write(tag | index | 0x4, words[1]); bus.write(tag | index | 0x8, words[2]); bus.write(tag | index | 0xc, words[3]); } auto CPU::DataCache::line(u32 address) -> Line& { return lines[address >> 4 & 0x1ff]; } template auto CPU::DataCache::Line::read(u32 address) const -> u64 { if constexpr(Size == Byte) { return bytes[address >> 0 & 15 ^ 3]; } if constexpr(Size == Half) { return halfs[address >> 1 & 7 ^ 1]; } if constexpr(Size == Word) { return words[address >> 2 & 3 ^ 0]; } if constexpr(Size == Dual) { u64 upper = words[address >> 2 & 2 | 0]; u64 lower = words[address >> 2 & 2 | 1]; return upper << 32 | lower << 0; } } template auto CPU::DataCache::Line::write(u32 address, u64 data) -> void { if constexpr(Size == Byte) { bytes[address >> 0 & 15 ^ 3] = data; } if constexpr(Size == Half) { halfs[address >> 1 & 7 ^ 1] = data; } if constexpr(Size == Word) { words[address >> 2 & 3 ^ 0] = data; } if constexpr(Size == Dual) { words[address >> 2 & 2 | 0] = data >> 32; words[address >> 2 & 2 | 1] = data >> 0; } dirty = 1; } template auto CPU::DataCache::read(u32 address) -> u64 { auto& line = this->line(address); if(!line.hit(address)) { if(line.valid && line.dirty) line.writeBack(); line.fill(address); } else { cpu.step(1); } return line.read(address); } template auto CPU::DataCache::write(u32 address, u64 data) -> void { auto& line = this->line(address); if(!line.hit(address)) { if(line.valid && line.dirty) line.writeBack(); return line.fill(address, data); } else { cpu.step(1); } line.write(address, data); } auto CPU::DataCache::power(bool reset) -> void { u32 index = 0; for(auto& line : lines) { line.valid = 0; line.dirty = 0; line.tag = 0; line.index = index++ << 4 & 0xff0; for(auto& word : line.words) word = 0; } } ares-126/ares/n64/cpu/debugger.cpp000066400000000000000000000104771415063341600167520ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(32, 2); tracer.exception = parent->append("Exception", "CPU"); tracer.interrupt = parent->append("Interrupt", "CPU"); tracer.tlb = parent->append("TLB", "CPU"); } auto CPU::Debugger::unload() -> void { tracer.instruction.reset(); tracer.exception.reset(); tracer.interrupt.reset(); tracer.tlb.reset(); } auto CPU::Debugger::instruction() -> void { if(unlikely(tracer.instruction->enabled())) { u32 address = cpu.pipeline.address; u32 instruction = cpu.pipeline.instruction; if(tracer.instruction->address(address)) { cpu.disassembler.showColors = 0; tracer.instruction->notify(cpu.disassembler.disassemble(address, instruction), {}); cpu.disassembler.showColors = 1; } } } auto CPU::Debugger::exception(u8 code) -> void { if(unlikely(tracer.exception->enabled())) { if(code == 0) return; //ignore interrupt exceptions string type = {"unknown(0x", hex(code, 2L), ")"}; switch(code) { case 0: type = "interrupt"; break; case 1: type = "TLB modification"; break; case 2: type = "TLB load"; break; case 3: type = "TLB store"; break; case 4: type = "address load"; break; case 5: type = "address store"; break; case 6: type = "bus instruction"; break; case 7: type = "bus data"; break; case 8: type = "system call"; break; case 9: type = "breakpoint"; break; case 10: type = "reserved instruction"; break; case 11: type = "coprocessor"; break; case 12: type = "arithmetic overflow"; break; case 13: type = "trap"; break; case 15: type = "floating point"; break; case 23: type = "watch address"; break; } tracer.exception->notify(type); } } auto CPU::Debugger::interrupt(u8 mask) -> void { if(unlikely(tracer.interrupt->enabled())) { vector sources; if(mask & 0x01) sources.append("software 0"); if(mask & 0x02) sources.append("software 1"); if(mask & 0x04) sources.append("RCP"); if(mask & 0x08) sources.append("cartridge"); if(mask & 0x10) sources.append("reset"); if(mask & 0x20) sources.append("read RDB"); if(mask & 0x40) sources.append("write RDB"); if(mask & 0x80) sources.append("timer"); tracer.interrupt->notify(sources.merge(",")); } } auto CPU::Debugger::tlbWrite(u32 index) -> void { if(unlikely(tracer.tlb->enabled())) { auto entry = cpu.tlb.entry[index & 31]; tracer.tlb->notify({"write: ", index, " {"}); tracer.tlb->notify({" global: ", entry.global[0], ",", entry.global[1]}); tracer.tlb->notify({" physical address: 0x", hex(entry.physicalAddress[0]), ",0x", hex(entry.physicalAddress[1])}); tracer.tlb->notify({" page mask: 0x", hex(entry.pageMask)}); tracer.tlb->notify({" virtual address: 0x", hex(entry.virtualAddress)}); tracer.tlb->notify({" address space ID: 0x", hex(entry.addressSpaceID)}); tracer.tlb->notify({"}"}); } } auto CPU::Debugger::tlbModification(u64 address) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"modification: 0x", hex(address)}); } } auto CPU::Debugger::tlbLoad(u64 address, u64 physical) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"load: 0x", hex(address), " => 0x", hex(physical)}); } } auto CPU::Debugger::tlbLoadInvalid(u64 address) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"load invalid: 0x", hex(address)}); } } auto CPU::Debugger::tlbLoadMiss(u64 address) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"load miss: 0x", hex(address)}); } } auto CPU::Debugger::tlbStore(u64 address, u64 physical) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"store: 0x", hex(address), " => 0x", hex(physical)}); } } auto CPU::Debugger::tlbStoreInvalid(u64 address) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"store invalid: 0x", hex(address)}); } } auto CPU::Debugger::tlbStoreMiss(u64 address) -> void { if(unlikely(tracer.tlb->enabled())) { tracer.tlb->notify({"store miss: 0x", hex(address)}); } } ares-126/ares/n64/cpu/disassembler.cpp000066400000000000000000000426351415063341600176440ustar00rootroot00000000000000auto CPU::Disassembler::disassemble(u32 address, u32 instruction) -> string { this->address = address; this->instruction = instruction; auto v = EXECUTE(); if(!v) v.append("invalid", string{"$", hex(instruction, 8L)}); if(!instruction) v = {"nop"}; auto s = pad(v.takeFirst(), -8L); return {s, v.merge(",")}; } auto CPU::Disassembler::EXECUTE() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto ftName = [&] { return fpuRegisterName (instruction >> 16 & 31); }; auto ftValue = [&] { return fpuRegisterValue(instruction >> 16 & 31); }; auto imm16i = [&] { return immediate(s16(instruction)); }; auto imm16u = [&] { return immediate(u16(instruction), 16L); }; auto jump = [&] { return immediate(address + 4 & 0xf000'0000 | (instruction & 0x03ff'ffff) << 2); }; auto branch = [&] { return immediate(address + 4 + (s16(instruction) << 2)); }; auto offset = [&] { return ipuRegisterIndex(instruction >> 21 & 31, s16(instruction)); }; auto ALU = [&](string_view name) -> vector { return {name, rtName(), rsValue(), immediate(u16(instruction))}; }; auto ADDI = [&](string_view add, string_view sub, string_view mov) -> vector { if(!(instruction >> 21 & 31)) return {mov, rtName(), immediate(s16(instruction), 32L)}; return {s16(instruction) >= 0 ? add : sub, rtName(), rsValue(), immediate(abs(s16(instruction)))}; }; auto BRANCH1 = [&](string_view name) -> vector { return {name, rsValue(), branch()}; }; auto BRANCH2 = [&](string_view name) -> vector { return {name, rsValue(), rtValue(), branch()}; }; auto CACHE = [&](string_view name) -> vector { auto operation = instruction >> 16 & 31; string type = "reserved"; switch(operation) { case 0x00: type = "code(IndexInvalidate)"; break; case 0x04: type = "code(IndexLoadTag)"; break; case 0x08: type = "code(IndexStoreTag)"; break; case 0x10: type = "code(HitInvalidate)"; break; case 0x14: type = "code(Fill)"; break; case 0x18: type = "code(HitWriteBack)"; break; case 0x01: type = "data(IndexWriteBackInvalidate)"; break; case 0x05: type = "data(IndexLoadTag)"; break; case 0x09: type = "data(IndexStoreTag)"; break; case 0x0d: type = "data(CreateDirtyExclusive)"; break; case 0x11: type = "data(HitInvalidate)"; break; case 0x15: type = "data(HitWriteBackInvalidate)"; break; case 0x19: type = "data(HitWriteBack)"; break; default: type ={"reserved(0x", hex(operation, 2L), ")"}; break; } return {name, type, offset()}; }; auto JUMP = [&](string_view name) -> vector { return {name, jump()}; }; auto LOAD = [&](string_view name) -> vector { return {name, rtName(), offset()}; }; auto STORE = [&](string_view name) -> vector { return {name, rtValue(), offset()}; }; switch(instruction >> 26) { case 0x00: return SPECIAL(); case 0x01: return REGIMM(); case 0x02: return JUMP("j"); case 0x03: return JUMP("jal"); case 0x04: return BRANCH2("beq"); case 0x05: return BRANCH2("bne"); case 0x06: return BRANCH1("blez"); case 0x07: return BRANCH1("bgtz"); case 0x08: return ADDI("addi", "subi", "li"); case 0x09: return ADDI("addiu", "subiu", "liu"); case 0x0a: return ALU("slti"); case 0x0b: return ALU("sltiu"); case 0x0c: return ALU("andi"); case 0x0d: return ALU("ori"); case 0x0e: return ALU("xori"); case 0x0f: return {"lui", rtName(), imm16u()}; case 0x10: return SCC(); case 0x11: return FPU(); case 0x12: break; //COP2 case 0x13: break; //COP3 case 0x14: return BRANCH2("beql"); case 0x15: return BRANCH2("bnel"); case 0x16: return BRANCH1("blezl"); case 0x17: return BRANCH1("bgtzl"); case 0x18: return ADDI("daddi", "dsubi", "dli"); case 0x19: return ADDI("daddiu", "dsubiu", "dliu"); case 0x1a: return LOAD("ldl"); case 0x1b: return LOAD("ldr"); case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; case 0x20: return LOAD("lb"); case 0x21: return LOAD("lh"); case 0x22: return LOAD("lwl"); case 0x23: return LOAD("lw"); case 0x24: return LOAD("lbu"); case 0x25: return LOAD("lhu"); case 0x26: return LOAD("lwr"); case 0x27: return LOAD("lwu"); case 0x28: return STORE("sb"); case 0x29: return STORE("sh"); case 0x2a: return STORE("swl"); case 0x2b: return STORE("sw"); case 0x2c: return STORE("sdl"); case 0x2d: return STORE("sdr"); case 0x2e: return STORE("swr"); case 0x2f: return CACHE("cache"); case 0x30: return LOAD("ll"); case 0x31: return {"lwc1", ftName(), offset()}; case 0x32: break; //LWC2 case 0x33: break; //LWC3 case 0x34: return LOAD("lld"); case 0x35: return {"ldc1", ftName(), offset()}; case 0x36: break; //LDC2 case 0x37: return LOAD("ld"); case 0x38: return STORE("sc"); case 0x39: return {"swc1", ftValue(), offset()}; case 0x3a: break; //SWC2 case 0x3b: break; //SWC3 case 0x3c: return STORE("scd"); case 0x3d: return {"sdc1", ftValue(), offset()}; case 0x3e: break; //SDC2 case 0x3f: return STORE("sd"); } return {}; } auto CPU::Disassembler::SPECIAL() -> vector { auto shift = [&] { return string{instruction >> 6 & 31}; }; auto rdName = [&] { return ipuRegisterName (instruction >> 11 & 31); }; auto rdValue = [&] { return ipuRegisterValue(instruction >> 11 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto ALU = [&](string_view name, string_view by) -> vector { return {name, rdName(), rtValue(), by}; }; auto JALR = [&](string_view name) -> vector { if((instruction >> 11 & 31) == 31) return {name, rsValue()}; return {name, rdName(), rsValue()}; }; auto REG = [&](string_view name) -> vector { return {name, rdName(), rsValue(), rtValue()}; }; auto ST = [&](string_view name) -> vector { return {name, rsValue(), rtValue()}; }; switch(instruction & 0x3f) { case 0x00: return ALU("sll", shift()); case 0x01: break; case 0x02: return ALU("srl", shift()); case 0x03: return ALU("sra", shift()); case 0x04: return ALU("sllv", rsValue()); case 0x05: break; case 0x06: return ALU("srlv", rsValue()); case 0x07: return ALU("srav", rsValue()); case 0x08: return {"jr", rsValue()}; case 0x09: return JALR("jalr"); case 0x0a: break; case 0x0b: break; case 0x0c: return {"syscall"}; case 0x0d: return {"break"}; case 0x0e: break; case 0x0f: return {"sync"}; case 0x10: return {"mfhi", rdName(), {"hi", hint("{$", hex(self.ipu.hi.u64, 8L), "}")}}; case 0x11: return {"mthi", rsValue(), "hi"}; case 0x12: return {"mflo", rdName(), {"lo", hint("{$", hex(self.ipu.lo.u64, 8L), "}")}}; case 0x13: return {"mtlo", rsValue(), "lo"}; case 0x14: return ALU("dsllv", rsValue()); case 0x15: break; case 0x16: return ALU("dsrlv", rsValue()); case 0x17: return ALU("dsrav", rsValue()); case 0x18: return ST("mult"); case 0x19: return ST("multu"); case 0x1a: return ST("div"); case 0x1b: return ST("divu"); case 0x1c: return ST("dmult"); case 0x1d: return ST("dmultu"); case 0x1e: return ST("ddiv"); case 0x1f: return ST("ddivu"); case 0x20: return REG("add"); case 0x21: return REG("addu"); case 0x22: return REG("sub"); case 0x23: return REG("subu"); case 0x24: return REG("and"); case 0x25: return REG("or"); case 0x26: return REG("xor"); case 0x27: return REG("nor"); case 0x28: break; case 0x29: break; case 0x2a: return REG("slt"); case 0x2b: return REG("sltu"); case 0x2c: return REG("dadd"); case 0x2d: return REG("daddu"); case 0x2e: return REG("dsub"); case 0x2f: return REG("dsubu"); case 0x30: return ST("tge"); case 0x31: return ST("tgeu"); case 0x32: return ST("tlt"); case 0x33: return ST("tltu"); case 0x34: return ST("teq"); case 0x35: break; case 0x36: return ST("tne"); case 0x37: break; case 0x38: return ALU("dsll", shift()); case 0x39: break; case 0x3a: return ALU("dsrl", shift()); case 0x3b: return ALU("dsra", shift()); case 0x3c: return ALU("dsll32", shift()); case 0x3d: break; case 0x3e: return ALU("dsrl32", shift()); case 0x3f: return ALU("dsra32", shift()); } return {}; } auto CPU::Disassembler::REGIMM() -> vector { auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto imm16i = [&] { return immediate(s16(instruction)); }; auto branch = [&] { return immediate(address + 4 + (s16(instruction) << 2)); }; auto BRANCH = [&](string_view name) -> vector { return {name, rsValue(), branch()}; }; auto TRAP = [&](string_view name) -> vector { return {name, rsValue(), imm16i()}; }; switch(instruction >> 16 & 0x1f) { case 0x00: return BRANCH("bltz"); case 0x01: return BRANCH("bgez"); case 0x02: return BRANCH("bltzl"); case 0x03: return BRANCH("bgezl"); case 0x04: break; case 0x05: break; case 0x06: break; case 0x07: break; case 0x08: return TRAP("tgei"); case 0x09: return TRAP("tgeiu"); case 0x0a: return TRAP("tlti"); case 0x0b: return TRAP("tltiu"); case 0x0c: return TRAP("teqi"); case 0x0d: break; case 0x0e: return TRAP("tnei"); case 0x0f: break; case 0x10: return BRANCH("bltzal"); case 0x11: return BRANCH("bgezal"); case 0x12: return BRANCH("bltzall"); case 0x13: return BRANCH("bgezall"); case 0x14: break; case 0x15: break; case 0x16: break; case 0x17: break; case 0x18: break; case 0x19: break; case 0x1a: break; case 0x1b: break; case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; } return {}; } auto CPU::Disassembler::SCC() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto sdName = [&] { return sccRegisterName (instruction >> 11 & 31); }; auto sdValue = [&] { return sccRegisterValue(instruction >> 11 & 31); }; auto branch = [&] { return immediate(address + 4 + (s16(instruction) << 2)); }; switch(instruction >> 21 & 0x1f) { case 0x00: return {"mfc0", rtName(), sdValue()}; case 0x01: return {"dmfc0", rtName(), sdValue()}; case 0x02: break; //CFC0 case 0x04: return {"mtc0", rtValue(), sdName()}; case 0x05: return {"dmtc0", rtValue(), sdName()}; case 0x06: break; //CTC0 case 0x08: break; //BC0 } if(!(instruction >> 25 & 1)) return {}; switch(instruction & 0x3f) { case 0x01: return {"tlbr"}; case 0x02: return {"tlbwi"}; case 0x06: return {"tlbwr"}; case 0x08: return {"tlbp"}; case 0x18: return {"eret"}; } return {}; } auto CPU::Disassembler::FPU() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rdName = [&] { return fpuRegisterName (instruction >> 11 & 31); }; auto rdValue = [&] { return fpuRegisterValue(instruction >> 11 & 31); }; auto cdName = [&] { return ccrRegisterName (instruction >> 11 & 31); }; auto cdValue = [&] { return ccrRegisterValue(instruction >> 11 & 31); }; //todo auto branch = [&] { return immediate(address + 4 + (s16(instruction) << 2)); }; switch(instruction >> 21 & 0x1f) { case 0x00: return {"mfc1", rtName(), rdValue()}; case 0x01: return {"dmfc1", rtName(), rdValue()}; case 0x02: return {"cfc1", rtName(), cdValue()}; case 0x04: return {"mtc1", rtValue(), rdName()}; case 0x05: return {"dmtc1", rtValue(), rdName()}; case 0x06: return {"ctc1", rtValue(), cdName()}; case 0x08: switch(instruction >> 16 & 3) { case 0x00: return {"bc1f", branch()}; case 0x01: return {"bc1t", branch()}; case 0x02: return {"bc1fl", branch()}; case 0x03: return {"bc1tl", branch()}; } } if(!(instruction >> 25 & 1)) return {}; auto fdName = [&] { return fpuRegisterName (instruction >> 6 & 31); }; auto fsValue = [&] { return fpuRegisterValue(instruction >> 11 & 31); }; auto ftValue = [&] { return fpuRegisterValue(instruction >> 16 & 31); }; auto DS = [&](string_view name) -> vector { return {name, fdName(), fsValue()}; }; auto DST = [&](string_view name) -> vector { return {name, fdName(), fsValue(), ftValue()}; }; auto ST = [&](string_view name) -> vector { return {name, fsValue(), ftValue()}; }; bool s = (instruction & 1 << 21) == 0; bool i = (instruction & 1 << 23) != 0; switch(instruction & 0x3f) { case 0x00: return DST(s ? "adds" : "addd" ); case 0x01: return DST(s ? "subs" : "subd" ); case 0x02: return DST(s ? "muls" : "muld" ); case 0x03: return DST(s ? "divs" : "divd" ); case 0x04: return DS (s ? "sqrts" : "sqrtd" ); case 0x05: return DS (s ? "abss" : "absd" ); case 0x06: return DS (s ? "movs" : "movd" ); case 0x07: return DS (s ? "negs" : "negd" ); case 0x08: return DS (s ? "roundls" : "roundld"); case 0x09: return DS (s ? "truncls" : "truncld"); case 0x0a: return DS (s ? "ceills" : "ceilld" ); case 0x0b: return DS (s ? "floorls" : "floorld"); case 0x0c: return DS (s ? "roundws" : "roundwd"); case 0x0d: return DS (s ? "truncws" : "truncwd"); case 0x0e: return DS (s ? "ceilws" : "ceilwd" ); case 0x0f: return DS (s ? "floorws" : "floorwd"); case 0x20: return DS (i ? (s ? "cvtsw" : "cvtsl") : "cvtsd"); case 0x21: return DS (i ? (s ? "cvtdw" : "cvtdl") : "cvtds"); case 0x24: return DS (s ? "cvtws" : "cvtwd" ); case 0x25: return DS (s ? "cvtls" : "cvtld" ); case 0x30: return ST(s ? "cfs" : "cfd" ); case 0x31: return ST(s ? "cuns" : "cund" ); case 0x32: return ST(s ? "ceqs" : "ceqd" ); case 0x33: return ST(s ? "cueqs" : "cueqd" ); case 0x34: return ST(s ? "colts" : "coltd" ); case 0x35: return ST(s ? "cults" : "cultd" ); case 0x36: return ST(s ? "coles" : "coled" ); case 0x37: return ST(s ? "cules" : "culed" ); case 0x38: return ST(s ? "csfs" : "csfd" ); case 0x39: return ST(s ? "cngles" : "cngled"); case 0x3a: return ST(s ? "cseqs" : "cseqd" ); case 0x3b: return ST(s ? "cngls" : "cngld" ); case 0x3c: return ST(s ? "clts" : "cltd" ); case 0x3d: return ST(s ? "cnges" : "cnged" ); case 0x3e: return ST(s ? "cles" : "cled" ); case 0x3f: return ST(s ? "cngts" : "cngtd" ); } return {}; } auto CPU::Disassembler::immediate(s64 value, u32 bits) const -> string { if(value < 0) return {"-$", hex(-value, bits >> 2)}; return {"$", hex(value, bits >> 2)}; }; auto CPU::Disassembler::ipuRegisterName(u32 index) const -> string { static const string registers[32] = { "0", "at", "v0", "v1", "a0", "a1", "a2", "a3", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra", }; return registers[index]; } auto CPU::Disassembler::ipuRegisterValue(u32 index) const -> string { if(index && showValues) return {ipuRegisterName(index), hint("{$", hex(self.ipu.r[index].u64, 8L), "}")}; return ipuRegisterName(index); } auto CPU::Disassembler::ipuRegisterIndex(u32 index, s16 offset) const -> string { string adjust; if(offset >= 0) adjust = {"+$", hex( offset)}; if(offset < 0) adjust = {"-$", hex(-offset)}; if(index && showValues) return {ipuRegisterName(index), adjust, hint("{$", hex(self.ipu.r[index].u64 + offset, 8L), "}")}; return {ipuRegisterName(index), adjust}; } auto CPU::Disassembler::sccRegisterName(u32 index) const -> string { static const string registers[32] = { "Index", "Random", "EntryLo0", "EntryLo1", "Context", "PageMask", "Wired", "Unused7", "BadVAddr", "Count", "EntryHi", "Compare", "Status", "Cause", "EPC", "PrID", "Config", "LLAddr", "WatchLo", "WatchHi", "XContext", "Unused21", "Unused22", "Unused23", "Unused24", "Unused25", "ParityError", "CacheError", "TagLo", "TagHi", "ErrorEPC", "Unused31", }; return registers[index]; } auto CPU::Disassembler::sccRegisterValue(u32 index) const -> string { if(showValues) return {sccRegisterName(index), hint("{$", hex(self.getControlRegister(index), 8L), "}")}; return sccRegisterName(index); } auto CPU::Disassembler::fpuRegisterName(u32 index) const -> string { static const string registers[32] = { "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "f10", "f11", "f12", "f13", "f14", "f15", "f16", "f17", "f18", "f19", "f20", "f21", "f22", "f23", "f24", "f25", "f26", "f27", "f28", "f29", "f30", "f31", }; return registers[index]; } auto CPU::Disassembler::fpuRegisterValue(u32 index) const -> string { bool f32 = (instruction & 1 << 21) == 0; bool f64 = (instruction & 1 << 21) != 0; if(f32 && showValues) return {fpuRegisterName(index), hint("{", self.fpu.r[index].f32, "}")}; if(f64 && showValues) return {fpuRegisterName(index), hint("{", self.fpu.r[index].f64, "}")}; return fpuRegisterName(index); } auto CPU::Disassembler::ccrRegisterName(u32 index) const -> string { return {"ccr", index}; } auto CPU::Disassembler::ccrRegisterValue(u32 index) const -> string { if(showValues) return {ccrRegisterName(index), hint("{$", hex(self.getControlRegisterFPU(index)), "}")}; return ccrRegisterName(index); } template auto CPU::Disassembler::hint(P&&... p) const -> string { if(showColors) return {"\e[0m\e[37m", forward

(p)..., "\e[0m"}; return {forward

(p)...}; } ares-126/ares/n64/cpu/exceptions.cpp000066400000000000000000000047061415063341600173450ustar00rootroot00000000000000auto CPU::Exception::trigger(u32 code, u32 coprocessor, bool tlbMiss) -> void { self.debugger.exception(code); u64 vectorBase = !self.scc.status.vectorLocation ? 0x8000'0000 : 0xbfc0'0200; if(self.context.bits == 64) vectorBase = (s32)vectorBase; u16 vectorOffset = 0x0180; if(tlbMiss) { //use special vector offset for TLB load/store miss exceptions when EXL=0 if(!self.scc.status.exceptionLevel) { if(self.context.bits == 32) vectorOffset = 0x0000; if(self.context.bits == 64) vectorOffset = 0x0080; } } if(!self.scc.status.exceptionLevel) { self.scc.epc = self.ipu.pc; self.scc.status.exceptionLevel = 1; self.scc.cause.exceptionCode = code; self.scc.cause.coprocessorError = coprocessor; if(self.scc.cause.branchDelay = self.branch.inDelaySlot()) self.scc.epc -= 4; } else { self.scc.cause.exceptionCode = code; self.scc.cause.coprocessorError = coprocessor; } self.ipu.pc = vectorBase + vectorOffset; self.branch.exception(); self.context.setMode(); } auto CPU::Exception::interrupt() -> void { trigger( 0); } auto CPU::Exception::tlbModification() -> void { trigger( 1); } auto CPU::Exception::tlbLoadInvalid() -> void { trigger( 2, 0, 0); } auto CPU::Exception::tlbLoadMiss() -> void { trigger( 2, 0, 1); } auto CPU::Exception::tlbStoreInvalid() -> void { trigger( 3, 0, 0); } auto CPU::Exception::tlbStoreMiss() -> void { trigger( 3, 0, 1); } auto CPU::Exception::addressLoad() -> void { trigger( 4); } auto CPU::Exception::addressStore() -> void { trigger( 5); } auto CPU::Exception::busInstruction() -> void { trigger( 6); } auto CPU::Exception::busData() -> void { trigger( 7); } auto CPU::Exception::systemCall() -> void { trigger( 8); } auto CPU::Exception::breakpoint() -> void { trigger( 9); } auto CPU::Exception::reservedInstruction() -> void { trigger(10); } auto CPU::Exception::coprocessor0() -> void { trigger(11, 0); } auto CPU::Exception::coprocessor1() -> void { trigger(11, 1); } auto CPU::Exception::coprocessor2() -> void { trigger(11, 2); } auto CPU::Exception::coprocessor3() -> void { trigger(11, 3); } auto CPU::Exception::arithmeticOverflow() -> void { trigger(12); } auto CPU::Exception::trap() -> void { trigger(13); } auto CPU::Exception::floatingPoint() -> void { trigger(15); } auto CPU::Exception::watchAddress() -> void { trigger(23); } ares-126/ares/n64/cpu/icache.cpp000066400000000000000000000040561415063341600163760ustar00rootroot00000000000000auto CPU::InstructionCache::Line::hit(u32 address) const -> bool { return valid && tag == (address & ~0xfff); } auto CPU::InstructionCache::Line::fill(u32 address) -> void { cpu.step(48); valid = 1; tag = address & ~0xfff; words[0] = bus.read(tag | index | 0x00); words[1] = bus.read(tag | index | 0x04); words[2] = bus.read(tag | index | 0x08); words[3] = bus.read(tag | index | 0x0c); words[4] = bus.read(tag | index | 0x10); words[5] = bus.read(tag | index | 0x14); words[6] = bus.read(tag | index | 0x18); words[7] = bus.read(tag | index | 0x1c); } auto CPU::InstructionCache::Line::writeBack() -> void { cpu.step(48); bus.write(tag | index | 0x00, words[0]); bus.write(tag | index | 0x04, words[1]); bus.write(tag | index | 0x08, words[2]); bus.write(tag | index | 0x0c, words[3]); bus.write(tag | index | 0x10, words[4]); bus.write(tag | index | 0x14, words[5]); bus.write(tag | index | 0x18, words[6]); bus.write(tag | index | 0x1c, words[7]); } auto CPU::InstructionCache::Line::read(u32 address) const -> u32 { return words[address >> 2 & 7]; } auto CPU::InstructionCache::line(u32 address) -> Line& { return lines[address >> 5 & 0x1ff]; } //used by the recompiler to simulate instruction cache fetch timing auto CPU::InstructionCache::step(u32 address) -> void { auto& line = this->line(address); if(!line.hit(address)) { cpu.step(48); line.valid = 1; line.tag = address & ~0xfff; } else { cpu.step(2); } } //used by the interpreter to fully emulate the instruction cache auto CPU::InstructionCache::fetch(u32 address) -> u32 { auto& line = this->line(address); if(!line.hit(address)) { line.fill(address); } else { cpu.step(2); } return line.read(address); } auto CPU::InstructionCache::power(bool reset) -> void { u32 index = 0; for(auto& line : lines) { line.valid = 0; line.tag = 0; line.index = index++ << 5 & 0xfe0; for(auto& word : line.words) word = 0; } } ares-126/ares/n64/cpu/interpreter-fpu.cpp000066400000000000000000000433661415063341600203240ustar00rootroot00000000000000auto CPU::FPU::setFloatingPointMode(bool mode) -> void { if(mode == 0) { //32x64-bit -> 16x64-bit } else { //16x64-bit -> 32x64-bit } } template<> auto CPU::fgr(u32 index) -> s32& { if(scc.status.floatingPointMode) { return fpu.r[index].s32; } else if(index & 1) { return fpu.r[index & ~1].s32h; } else { return fpu.r[index & ~1].s32; } } template<> auto CPU::fgr(u32 index) -> u32& { return (u32&)fgr(index); } template<> auto CPU::fgr(u32 index) -> f32& { if(scc.status.floatingPointMode) { return fpu.r[index].f32; } else if(index & 1) { return fpu.r[index & ~1].f32h; } else { return fpu.r[index & ~1].f32; } } template<> auto CPU::fgr(u32 index) -> s64& { if(scc.status.floatingPointMode) { return fpu.r[index].s64; } else { return fpu.r[index & ~1].s64; } } template<> auto CPU::fgr(u32 index) -> u64& { return (u64&)fgr(index); } template<> auto CPU::fgr(u32 index) -> f64& { if(scc.status.floatingPointMode) { return fpu.r[index].f64; } else { return fpu.r[index & ~1].f64; } } auto CPU::getControlRegisterFPU(n5 index) -> u32 { n32 data; switch(index) { case 0: //coprocessor revision identifier data.bit(0, 7) = fpu.coprocessor.revision; data.bit(8,15) = fpu.coprocessor.implementation; break; case 31: //control / status register data.bit( 0) = fpu.csr.roundMode.bit(0); data.bit( 1) = fpu.csr.roundMode.bit(1); data.bit( 2) = fpu.csr.flag.inexact; data.bit( 3) = fpu.csr.flag.underflow; data.bit( 4) = fpu.csr.flag.overflow; data.bit( 5) = fpu.csr.flag.divisionByZero; data.bit( 6) = fpu.csr.flag.invalidOperation; data.bit( 7) = fpu.csr.enable.inexact; data.bit( 8) = fpu.csr.enable.underflow; data.bit( 9) = fpu.csr.enable.overflow; data.bit(10) = fpu.csr.enable.divisionByZero; data.bit(11) = fpu.csr.enable.invalidOperation; data.bit(12) = fpu.csr.cause.inexact; data.bit(13) = fpu.csr.cause.underflow; data.bit(14) = fpu.csr.cause.overflow; data.bit(15) = fpu.csr.cause.divisionByZero; data.bit(16) = fpu.csr.cause.invalidOperation; data.bit(17) = fpu.csr.cause.unimplementedOperation; data.bit(23) = fpu.csr.compare; data.bit(24) = fpu.csr.flushed; break; } return data; } auto CPU::setControlRegisterFPU(n5 index, n32 data) -> void { //read-only variables are defined but commented out for documentation purposes switch(index) { case 0: //coprocessor revision identifier //fpu.coprocessor.revision = data.bit(0, 7); //fpu.coprocessor.implementation = data.bit(8,15); break; case 31: {//control / status register u32 roundModePrevious = fpu.csr.roundMode; fpu.csr.roundMode.bit(0) = data.bit( 0); fpu.csr.roundMode.bit(1) = data.bit( 1); fpu.csr.flag.inexact = data.bit( 2); fpu.csr.flag.underflow = data.bit( 3); fpu.csr.flag.overflow = data.bit( 4); fpu.csr.flag.divisionByZero = data.bit( 5); fpu.csr.flag.invalidOperation = data.bit( 6); fpu.csr.enable.inexact = data.bit( 7); fpu.csr.enable.underflow = data.bit( 8); fpu.csr.enable.overflow = data.bit( 9); fpu.csr.enable.divisionByZero = data.bit(10); fpu.csr.enable.invalidOperation = data.bit(11); fpu.csr.cause.inexact = data.bit(12); fpu.csr.cause.underflow = data.bit(13); fpu.csr.cause.overflow = data.bit(14); fpu.csr.cause.divisionByZero = data.bit(15); fpu.csr.cause.invalidOperation = data.bit(16); fpu.csr.cause.unimplementedOperation = data.bit(17); fpu.csr.compare = data.bit(23); fpu.csr.flushed = data.bit(24); if(fpu.csr.roundMode != roundModePrevious) { switch(fpu.csr.roundMode) { case 0: fesetround(FE_TONEAREST); break; case 1: fesetround(FE_TOWARDZERO); break; case 2: fesetround(FE_UPWARD); break; case 3: fesetround(FE_DOWNWARD); break; } } } break; } } #define CF fpu.csr.compare #define FD(type) fgr(fd) #define FS(type) fgr(fs) #define FT(type) fgr(ft) auto CPU::BC1(bool value, bool likely, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); if(CF == value) branch.take(ipu.pc + 4 + (imm << 2)); else if(likely) branch.discard(); } auto CPU::CFC1(r64& rt, u8 rd) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); rt.u64 = s32(getControlRegisterFPU(rd)); } auto CPU::CTC1(cr64& rt, u8 rd) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); setControlRegisterFPU(rd, rt.u32); } auto CPU::DMFC1(r64& rt, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); rt.u64 = FS(u64); } auto CPU::DMTC1(cr64& rt, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FS(u64) = rt.u64; } auto CPU::FABS_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = fabs(FS(f32)); } auto CPU::FABS_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = fabs(FS(f64)); } auto CPU::FADD_S(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(f32) + FT(f32); } auto CPU::FADD_D(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(f64) + FT(f64); } auto CPU::FCEIL_L_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = ceil(FS(f32)); } auto CPU::FCEIL_L_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = ceil(FS(f64)); } auto CPU::FCEIL_W_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = ceil(FS(f32)); } auto CPU::FCEIL_W_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = ceil(FS(f64)); } #define XORDERED(type, value, quiet) \ if(isnan(FS(type)) || isnan(FT(type))) { \ if constexpr(!quiet) { \ fpu.csr.cause.invalidOperation = 1; \ if(fpu.csr.enable.invalidOperation) return exception.floatingPoint(); \ fpu.csr.flag.invalidOperation = 1; \ } \ CF = value; \ return; \ } #define ORDERED(type, value) XORDERED(type, value, 0) #define UNORDERED(type, value) XORDERED(type, value, 1) auto CPU::FC_EQ_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 0); CF = FS(f32) == FT(f32); } auto CPU::FC_EQ_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 0); CF = FS(f64) == FT(f64); } auto CPU::FC_F_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 0); CF = 0; } auto CPU::FC_F_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 0); CF = 0; } auto CPU::FC_LE_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 0); CF = FS(f32) <= FT(f32); } auto CPU::FC_LE_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 0); CF = FS(f64) <= FT(f64); } auto CPU::FC_LT_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 0); CF = FS(f32) < FT(f32); } auto CPU::FC_LT_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 0); CF = FS(f64) < FT(f64); } auto CPU::FC_NGE_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 1); CF = FS(f32) < FT(f32); } auto CPU::FC_NGE_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 1); CF = FS(f64) < FT(f64); } auto CPU::FC_NGL_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 1); CF = FS(f32) == FT(f32); } auto CPU::FC_NGL_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 1); CF = FS(f64) == FT(f64); } auto CPU::FC_NGLE_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 1); CF = 0; } auto CPU::FC_NGLE_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 1); CF = 0; } auto CPU::FC_NGT_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 1); CF = FS(f32) <= FT(f32); } auto CPU::FC_NGT_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 1); CF = FS(f64) <= FT(f64); } auto CPU::FC_OLE_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 0); CF = FS(f32) <= FT(f32); } auto CPU::FC_OLE_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 0); CF = FS(f64) <= FT(f64); } auto CPU::FC_OLT_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 0); CF = FS(f32) < FT(f32); } auto CPU::FC_OLT_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 0); CF = FS(f64) < FT(f64); } auto CPU::FC_SEQ_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 0); CF = FS(f32) == FT(f32); } auto CPU::FC_SEQ_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 0); CF = FS(f64) == FT(f64); } auto CPU::FC_SF_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f32, 0); CF = 0; } auto CPU::FC_SF_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); ORDERED(f64, 0); CF = 0; } auto CPU::FC_UEQ_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 1); CF = FS(f32) == FT(f32); } auto CPU::FC_UEQ_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 1); CF = FS(f64) == FT(f64); } auto CPU::FC_ULE_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 1); CF = FS(f32) <= FT(f32); } auto CPU::FC_ULE_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 1); CF = FS(f64) <= FT(f64); } auto CPU::FC_ULT_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 1); CF = FS(f32) < FT(f32); } auto CPU::FC_ULT_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 1); CF = FS(f64) < FT(f64); } auto CPU::FC_UN_S(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f32, 1); CF = 0; } auto CPU::FC_UN_D(u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); UNORDERED(f64, 1); CF = 0; } #undef ORDERED #undef UNORDERED auto CPU::FCVT_S_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(f64); } auto CPU::FCVT_S_W(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(s32); } auto CPU::FCVT_S_L(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(s64); } auto CPU::FCVT_D_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(f32); } auto CPU::FCVT_D_W(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(s32); } auto CPU::FCVT_D_L(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(s64); } auto CPU::FCVT_L_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = FS(f32); } auto CPU::FCVT_L_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = FS(f64); } auto CPU::FCVT_W_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = FS(f32); } auto CPU::FCVT_W_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = FS(f64); } auto CPU::FDIV_S(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); if(!FT(f32)) { fpu.csr.cause.divisionByZero = 1; if(fpu.csr.enable.divisionByZero) return exception.floatingPoint(); fpu.csr.flag.divisionByZero = 1; } FD(f32) = FS(f32) / FT(f32); } auto CPU::FDIV_D(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); if(!FT(f64)) { fpu.csr.cause.divisionByZero = 1; if(fpu.csr.enable.divisionByZero) return exception.floatingPoint(); fpu.csr.flag.divisionByZero = 1; } FD(f64) = FS(f64) / FT(f64); } auto CPU::FFLOOR_L_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = floor(FS(f32)); } auto CPU::FFLOOR_L_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = floor(FS(f64)); } auto CPU::FFLOOR_W_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = floor(FS(f32)); } auto CPU::FFLOOR_W_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = floor(FS(f64)); } auto CPU::FMOV_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(f32); } auto CPU::FMOV_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(f64); } auto CPU::FMUL_S(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(f32) * FT(f32); } auto CPU::FMUL_D(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(f64) * FT(f64); } auto CPU::FNEG_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = -FS(f32); } auto CPU::FNEG_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = -FS(f64); } auto CPU::FROUND_L_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = nearbyint(FS(f32)); } auto CPU::FROUND_L_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = nearbyint(FS(f64)); } auto CPU::FROUND_W_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = nearbyint(FS(f32)); } auto CPU::FROUND_W_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = nearbyint(FS(f64)); } auto CPU::FSQRT_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = sqrt(FS(f32)); } auto CPU::FSQRT_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = sqrt(FS(f64)); } auto CPU::FSUB_S(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f32) = FS(f32) - FT(f32); } auto CPU::FSUB_D(u8 fd, u8 fs, u8 ft) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(f64) = FS(f64) - FT(f64); } auto CPU::FTRUNC_L_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = FS(f32) < 0 ? ceil(FS(f32)) : floor(FS(f32)); } auto CPU::FTRUNC_L_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s64) = FS(f64) < 0 ? ceil(FS(f64)) : floor(FS(f64)); } auto CPU::FTRUNC_W_S(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = FS(f32) < 0 ? ceil(FS(f32)) : floor(FS(f32)); } auto CPU::FTRUNC_W_D(u8 fd, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FD(s32) = FS(f64) < 0 ? ceil(FS(f64)) : floor(FS(f64)); } auto CPU::LDC1(u8 ft, cr64& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); if(auto data = read(rs.u32 + imm)) FT(u64) = *data; } auto CPU::LWC1(u8 ft, cr64& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); if(auto data = read(rs.u32 + imm)) FT(u32) = *data; } auto CPU::MFC1(r64& rt, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); rt.u64 = FS(s32); } auto CPU::MTC1(cr64& rt, u8 fs) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); FS(s32) = rt.u32; } auto CPU::SDC1(u8 ft, cr64& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); write(rs.u32 + imm, FT(u64)); } auto CPU::SWC1(u8 ft, cr64& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor1(); write(rs.u32 + imm, FT(u32)); } #undef CF #undef FD #undef FS #undef FT ares-126/ares/n64/cpu/interpreter-ipu.cpp000066400000000000000000000767731415063341600203370ustar00rootroot00000000000000#define PC ipu.pc #define RA ipu.r[31] #define LO ipu.lo #define HI ipu.hi auto CPU::ADD(r64& rd, cr64& rs, cr64& rt) -> void { if(~(rs.u32 ^ rt.u32) & (rs.u32 ^ rs.u32 + rt.u32) & 1 << 31) return exception.arithmeticOverflow(); rd.u64 = s32(rs.u32 + rt.u32); } auto CPU::ADDI(r64& rt, cr64& rs, s16 imm) -> void { if(~(rs.u32 ^ imm) & (rs.u32 ^ rs.u32 + imm) & 1 << 31) return exception.arithmeticOverflow(); rt.u64 = s32(rs.s32 + imm); } auto CPU::ADDIU(r64& rt, cr64& rs, s16 imm) -> void { rt.u64 = s32(rs.s32 + imm); } auto CPU::ADDU(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = s32(rs.u32 + rt.u32); } auto CPU::AND(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = rs.u64 & rt.u64; } auto CPU::ANDI(r64& rt, cr64& rs, u16 imm) -> void { rt.u64 = rs.u64 & imm; } auto CPU::BEQ(cr64& rs, cr64& rt, s16 imm) -> void { if(rs.u64 == rt.u64) branch.take(PC + 4 + (imm << 2)); } auto CPU::BEQL(cr64& rs, cr64& rt, s16 imm) -> void { if(rs.u64 == rt.u64) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BGEZ(cr64& rs, s16 imm) -> void { if(rs.s64 >= 0) branch.take(PC + 4 + (imm << 2)); } auto CPU::BGEZAL(cr64& rs, s16 imm) -> void { RA.u64 = s32(PC + 8); if(rs.s64 >= 0) branch.take(PC + 4 + (imm << 2)); } auto CPU::BGEZALL(cr64& rs, s16 imm) -> void { RA.u64 = s32(PC + 8); if(rs.s64 >= 0) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BGEZL(cr64& rs, s16 imm) -> void { if(rs.s64 >= 0) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BGTZ(cr64& rs, s16 imm) -> void { if(rs.s64 > 0) branch.take(PC + 4 + (imm << 2)); } auto CPU::BGTZL(cr64& rs, s16 imm) -> void { if(rs.s64 > 0) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BLEZ(cr64& rs, s16 imm) -> void { if(rs.s64 <= 0) branch.take(PC + 4 + (imm << 2)); } auto CPU::BLEZL(cr64& rs, s16 imm) -> void { if(rs.s64 <= 0) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BLTZ(cr64& rs, s16 imm) -> void { if(rs.s64 < 0) branch.take(PC + 4 + (imm << 2)); } auto CPU::BLTZAL(cr64& rs, s16 imm) -> void { RA.u64 = s32(PC + 8); if(rs.s64 < 0) branch.take(PC + 4 + (imm << 2)); } auto CPU::BLTZALL(cr64& rs, s16 imm) -> void { RA.u64 = s32(PC + 8); if(rs.s64 < 0) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BLTZL(cr64& rs, s16 imm) -> void { if(rs.s64 < 0) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BNE(cr64& rs, cr64& rt, s16 imm) -> void { if(rs.u64 != rt.u64) branch.take(PC + 4 + (imm << 2)); } auto CPU::BNEL(cr64& rs, cr64& rt, s16 imm) -> void { if(rs.u64 != rt.u64) branch.take(PC + 4 + (imm << 2)); else branch.discard(); } auto CPU::BREAK() -> void { exception.breakpoint(); } auto CPU::CACHE(u8 operation, cr64& rs, s16 imm) -> void { u32 address = rs.u64 + imm; switch(operation) { case 0x00: { //icache index invalidate auto& line = icache.line(address); line.valid = 0; break; } case 0x04: { //icache load tag auto& line = icache.line(address); scc.tagLo.primaryCacheState = line.valid << 1; scc.tagLo.physicalAddress = line.tag; break; } case 0x08: { //icache store tag auto& line = icache.line(address); line.valid = scc.tagLo.primaryCacheState.bit(1); line.tag = scc.tagLo.physicalAddress; if(scc.tagLo.primaryCacheState == 0b01) debug(unusual, "[CPU] CACHE CPCS=1"); if(scc.tagLo.primaryCacheState == 0b11) debug(unusual, "[CPU] CACHE CPCS=3"); break; } case 0x10: { //icache hit invalidate auto& line = icache.line(address); if(line.hit(address)) line.valid = 0; break; } case 0x14: { //icache fill auto& line = icache.line(address); line.fill(address); break; } case 0x18: { //icache hit write back auto& line = icache.line(address); if(line.hit(address)) line.writeBack(); break; } case 0x01: { //dcache index write back invalidate auto& line = dcache.line(address); if(line.valid && line.dirty) line.writeBack(); line.valid = 0; break; } case 0x05: { //dcache index load tag auto& line = dcache.line(address); scc.tagLo.primaryCacheState = line.valid << 1 | line.dirty << 0; scc.tagLo.physicalAddress = line.tag; break; } case 0x09: { //dcache index store tag auto& line = dcache.line(address); line.valid = scc.tagLo.primaryCacheState.bit(1); line.dirty = scc.tagLo.primaryCacheState.bit(0); line.tag = scc.tagLo.physicalAddress; if(scc.tagLo.primaryCacheState == 0b01) debug(unusual, "[CPU] CACHE DPCS=1"); if(scc.tagLo.primaryCacheState == 0b10) debug(unusual, "[CPU] CACHE DPCS=2"); break; } case 0x0d: { //dcache create dirty exclusive auto& line = dcache.line(address); if(!line.hit(address) && line.dirty) line.writeBack(); line.tag = address & ~0xfff; line.valid = 1; line.dirty = 1; break; } case 0x11: { //dcache hit invalidate auto& line = dcache.line(address); if(line.hit(address)) { line.valid = 0; line.dirty = 0; } break; } case 0x15: { //dcache hit write back invalidate auto& line = dcache.line(address); if(line.hit(address)) { if(line.dirty) line.writeBack(); line.valid = 0; } break; } case 0x19: { //dcache hit write back auto& line = dcache.line(address); if(line.hit(address)) { if(line.dirty) line.writeBack(); } break; } } } auto CPU::DADD(r64& rd, cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(~(rs.u64 ^ rt.u64) & (rs.u64 ^ rs.u64 + rt.u64) & 1ull << 63) return exception.arithmeticOverflow(); rd.u64 = rs.u64 + rt.u64; } auto CPU::DADDI(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(~(rs.u64 ^ imm) & (rs.u64 ^ rs.u64 + imm) & 1ull << 63) return exception.arithmeticOverflow(); rt.u64 = rs.u64 + imm; } auto CPU::DADDIU(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rt.u64 = rs.u64 + imm; } auto CPU::DADDU(r64& rd, cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rs.u64 + rt.u64; } auto CPU::DDIV(cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(rt.s64) { //cast to i128 to prevent exception on INT64_MIN / -1 LO.u64 = s128(rs.s64) / s128(rt.s64); HI.u64 = s128(rs.s64) % s128(rt.s64); } else { LO.u64 = rs.s64 < 0 ? +1 : -1; HI.u64 = rs.s64; } } auto CPU::DDIVU(cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(rt.u64) { LO.u64 = rs.u64 / rt.u64; HI.u64 = rs.u64 % rt.u64; } else { LO.u64 = -1; HI.u64 = rs.u64; } } auto CPU::DIV(cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(rt.s32) { //cast to s64 to prevent exception on INT32_MIN / -1 LO.u64 = s32(s64(rs.s32) / s64(rt.s32)); HI.u64 = s32(s64(rs.s32) % s64(rt.s32)); } else { LO.u64 = rs.s32 < 0 ? +1 : -1; HI.u64 = rs.s32; } } auto CPU::DIVU(cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(rt.u32) { LO.u64 = s32(rs.u32 / rt.u32); HI.u64 = s32(rs.u32 % rt.u32); } else { LO.u64 = -1; HI.u64 = rs.s32; } } auto CPU::DMULT(cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); u128 result = rs.s128() * rt.s128(); LO.u64 = result >> 0; HI.u64 = result >> 64; } auto CPU::DMULTU(cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); u128 result = rs.u128() * rt.u128(); LO.u64 = result >> 0; HI.u64 = result >> 64; } auto CPU::DSLL(r64& rd, cr64& rt, u8 sa) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rt.u64 << sa; } auto CPU::DSLLV(r64& rd, cr64& rt, cr64& rs) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rt.u64 << (rs.u32 & 63); } auto CPU::DSRA(r64& rd, cr64& rt, u8 sa) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rt.s64 >> sa; } auto CPU::DSRAV(r64& rd, cr64& rt, cr64& rs) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rt.s64 >> (rs.u32 & 63); } auto CPU::DSRL(r64& rd, cr64& rt, u8 sa) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rt.u64 >> sa; } auto CPU::DSRLV(r64& rd, cr64& rt, cr64& rs) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rt.u64 >> (rs.u32 & 63); } auto CPU::DSUB(r64& rd, cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if((rs.u64 ^ rt.u64) & (rs.u64 ^ rs.u64 - rt.u64) & 1ull << 63) return exception.arithmeticOverflow(); rd.u64 = rs.u64 - rt.u64; } auto CPU::DSUBU(r64& rd, cr64& rs, cr64& rt) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); rd.u64 = rs.u64 - rt.u64; } auto CPU::J(u32 imm) -> void { branch.take((PC + 4 & 0xf000'0000) | (imm << 2)); } auto CPU::JAL(u32 imm) -> void { RA.u64 = s32(PC + 8); branch.take((PC + 4 & 0xf000'0000) | (imm << 2)); } auto CPU::JALR(r64& rd, cr64& rs) -> void { rd.u64 = s32(PC + 8); branch.take(rs.u32); } auto CPU::JR(cr64& rs) -> void { branch.take(rs.u32); } auto CPU::LB(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) rt.u64 = s8(*data); } auto CPU::LBU(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) rt.u64 = u8(*data); } auto CPU::LD(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(auto data = read(rs.u32 + imm)) rt.u64 = *data; } auto CPU::LDL(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); u64 address = rs.u64 + imm; u64 data = rt.u64; if(context.littleEndian()) switch(address & 7) { case 0: data &= 0x00ffffffffffffffull; if(auto byte = read(address & ~7 | 7)) data |= byte() << 56; else return; break; case 1: data &= 0x0000ffffffffffffull; if(auto half = read(address & ~7 | 6)) data |= half() << 48; else return; break; case 2: data &= 0x000000ffffffffffull; if(auto byte = read(address & ~7 | 5)) data |= byte() << 56; else return; if(auto half = read(address & ~7 | 6)) data |= half() << 40; else return; break; case 3: data &= 0x00000000ffffffffull; if(auto word = read(address & ~7 | 4)) data |= word() << 32; else return; break; case 4: data &= 0x0000000000ffffffull; if(auto byte = read(address & ~7 | 3)) data |= byte() << 56; else return; if(auto word = read(address & ~7 | 4)) data |= word() << 24; else return; break; case 5: data &= 0x000000000000ffffull; if(auto half = read(address & ~7 | 2)) data |= half() << 48; else return; if(auto word = read(address & ~7 | 4)) data |= word() << 16; else return; break; case 6: data &= 0x00000000000000ffull; if(auto byte = read(address & ~7 | 1)) data |= byte() << 56; else return; if(auto half = read(address & ~7 | 2)) data |= half() << 40; else return; if(auto word = read(address & ~7 | 4)) data |= word() << 8; else return; break; case 7: data &= 0x0000000000000000ull; if(auto dual = read(address & ~7 | 0)) data |= dual() << 0; else return; break; } if(context.bigEndian()) switch(address & 7) { case 0: data &= 0x0000000000000000ull; if(auto dual = read(address & ~7 | 0)) data |= dual() << 0; else return; break; case 1: data &= 0x00000000000000ffull; if(auto byte = read(address & ~7 | 1)) data |= byte() << 56; else return; if(auto half = read(address & ~7 | 2)) data |= half() << 40; else return; if(auto word = read(address & ~7 | 4)) data |= word() << 8; else return; break; case 2: data &= 0x000000000000ffffull; if(auto half = read(address & ~7 | 2)) data |= half() << 48; else return; if(auto word = read(address & ~7 | 4)) data |= word() << 16; else return; break; case 3: data &= 0x0000000000ffffffull; if(auto byte = read(address & ~7 | 3)) data |= byte() << 56; else return; if(auto word = read(address & ~7 | 4)) data |= word() << 24; else return; break; case 4: data &= 0x00000000ffffffffull; if(auto word = read(address & ~7 | 4)) data |= word() << 32; else return; break; case 5: data &= 0x000000ffffffffffull; if(auto byte = read(address & ~7 | 5)) data |= byte() << 56; else return; if(auto half = read(address & ~7 | 6)) data |= half() << 40; else return; break; case 6: data &= 0x0000ffffffffffffull; if(auto half = read(address & ~7 | 6)) data |= half() << 48; else return; break; case 7: data &= 0x00ffffffffffffffull; if(auto byte = read(address & ~7 | 7)) data |= byte() << 56; else return; break; } rt.u64 = data; } auto CPU::LDR(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); u64 address = rs.u64 + imm; u64 data = rt.u64; if(context.littleEndian()) switch(address & 7) { case 0: data &= 0x0000000000000000ull; if(auto dual = read(address & ~7 | 0)) data |= dual() << 0; else return; break; case 1: data &= 0xff00000000000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 24; else return; if(auto half = read(address & ~7 | 4)) data |= half() << 8; else return; if(auto byte = read(address & ~7 | 6)) data |= byte() << 0; else return; break; case 2: data &= 0xffff000000000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 16; else return; if(auto half = read(address & ~7 | 4)) data |= half() << 0; else return; break; case 3: data &= 0xffffff0000000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 8; else return; if(auto byte = read(address & ~7 | 4)) data |= byte() << 0; else return; break; case 4: data &= 0xffffffff00000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 0; else return; break; case 5: data &= 0xffffffffff000000ull; if(auto half = read(address & ~7 | 0)) data |= half() << 8; else return; if(auto byte = read(address & ~7 | 2)) data |= byte() << 0; else return; break; case 6: data &= 0xffffffffffff0000ull; if(auto half = read(address & ~7 | 0)) data |= half() << 0; else return; break; case 7: data &= 0xffffffffffffff00ull; if(auto byte = read(address & ~7 | 0)) data |= byte() << 0; else return; break; } if(context.bigEndian()) switch(address & 7) { case 0: data &= 0xffffffffffffff00ull; if(auto byte = read(address & ~7 | 0)) data |= byte() << 0; else return; break; case 1: data &= 0xffffffffffff0000ull; if(auto half = read(address & ~7 | 0)) data |= half() << 0; else return; break; case 2: data &= 0xffffffffff000000ull; if(auto half = read(address & ~7 | 0)) data |= half() << 8; else return; if(auto byte = read(address & ~7 | 2)) data |= byte() << 0; else return; break; case 3: data &= 0xffffffff00000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 0; else return; break; case 4: data &= 0xffffff0000000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 8; else return; if(auto byte = read(address & ~7 | 4)) data |= byte() << 0; else return; break; case 5: data &= 0xffff000000000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 16; else return; if(auto half = read(address & ~7 | 4)) data |= half() << 0; else return; break; case 6: data &= 0xff00000000000000ull; if(auto word = read(address & ~7 | 0)) data |= word() << 24; else return; if(auto half = read(address & ~7 | 4)) data |= half() << 8; else return; if(auto byte = read(address & ~7 | 6)) data |= byte() << 0; else return; break; case 7: data &= 0x0000000000000000ull; if(auto dual = read(address & ~7 | 0)) data |= dual() << 0; else return; break; } rt.u64 = data; } auto CPU::LH(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) rt.u64 = s16(*data); } auto CPU::LHU(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) rt.u64 = u16(*data); } auto CPU::LL(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) { rt.u64 = s32(*data); scc.ll = tlb.physicalAddress >> 4; scc.llbit = 1; } } auto CPU::LLD(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(auto data = read(rs.u32 + imm)) { rt.u64 = *data; scc.ll = tlb.physicalAddress >> 4; scc.llbit = 1; } } auto CPU::LUI(r64& rt, u16 imm) -> void { rt.u64 = s32(imm << 16); } auto CPU::LW(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) rt.u64 = s32(*data); } auto CPU::LWL(r64& rt, cr64& rs, s16 imm) -> void { u64 address = rs.u64 + imm; u32 data = rt.u32; if(context.littleEndian()) switch(address & 3) { case 0: data &= 0x00ffffff; if(auto byte = read(address & ~3 | 3)) data |= byte() << 24; else return; break; case 1: data &= 0x0000ffff; if(auto half = read(address & ~3 | 2)) data |= half() << 16; else return; break; case 2: data &= 0x000000ff; if(auto byte = read(address & ~3 | 1)) data |= byte() << 24; else return; if(auto half = read(address & ~3 | 2)) data |= half() << 8; else return; break; case 3: data &= 0x00000000; if(auto word = read(address & ~3 | 0)) data |= word() << 0; else return; break; } if(context.bigEndian()) switch(address & 3) { case 0: data &= 0x00000000; if(auto word = read(address & ~3 | 0)) data |= word() << 0; else return; break; case 1: data &= 0x000000ff; if(auto byte = read(address & ~3 | 1)) data |= byte() << 24; else return; if(auto half = read(address & ~3 | 2)) data |= half() << 8; else return; break; case 2: data &= 0x0000ffff; if(auto half = read(address & ~3 | 2)) data |= half() << 16; else return; break; case 3: data &= 0x00ffffff; if(auto byte = read(address & ~3 | 3)) data |= byte() << 24; else return; break; } rt.s64 = (s32)data; } auto CPU::LWR(r64& rt, cr64& rs, s16 imm) -> void { u64 address = rs.u64 + imm; u32 data = rt.u32; if(context.littleEndian()) switch(address & 3) { case 0: data &= 0x00000000; if(auto word = read(address & ~3 | 0)) data |= word() << 0; else return; rt.s64 = (s32)data; break; case 1: data &= 0xff000000; if(auto half = read(address & ~3 | 0)) data |= half() << 8; else return; if(auto byte = read(address & ~3 | 2)) data |= byte() << 0; else return; if(context.bits == 32) rt.u32 = data; if(context.bits == 64) rt.s64 = (s32)data; break; case 2: data &= 0xffff0000; if(auto half = read(address & ~3 | 0)) data |= half() << 0; else return; if(context.bits == 32) rt.u32 = data; if(context.bits == 64) rt.s64 = (s32)data; break; case 3: data &= 0xffffff00; if(auto byte = read(address & ~3 | 0)) data |= byte() << 0; else return; if(context.bits == 32) rt.u32 = data; if(context.bits == 64) rt.s64 = (s32)data; break; } if(context.bigEndian()) switch(address & 3) { case 0: data &= 0xffffff00; if(auto byte = read(address & ~3 | 0)) data |= byte() << 0; else return; if(context.bits == 32) rt.u32 = data; if(context.bits == 64) rt.s64 = (s32)data; break; case 1: data &= 0xffff0000; if(auto half = read(address & ~3 | 0)) data |= half() << 0; else return; if(context.bits == 32) rt.u32 = data; if(context.bits == 64) rt.s64 = (s32)data; break; case 2: data &= 0xff000000; if(auto half = read(address & ~3 | 0)) data |= half() << 8; else return; if(auto byte = read(address & ~3 | 2)) data |= byte() << 0; else return; if(context.bits == 32) rt.u32 = data; if(context.bits == 64) rt.s64 = (s32)data; break; case 3: data &= 0x00000000; if(auto word = read(address & ~3 | 0)) data |= word() << 0; else return; rt.s64 = (s32)data; break; } } auto CPU::LWU(r64& rt, cr64& rs, s16 imm) -> void { if(auto data = read(rs.u32 + imm)) rt.u64 = u32(*data); } auto CPU::MFHI(r64& rd) -> void { rd.u64 = HI.u64; } auto CPU::MFLO(r64& rd) -> void { rd.u64 = LO.u64; } auto CPU::MTHI(cr64& rs) -> void { HI.u64 = rs.u64; } auto CPU::MTLO(cr64& rs) -> void { LO.u64 = rs.u64; } auto CPU::MULT(cr64& rs, cr64& rt) -> void { u64 result = s64(rs.s32) * s64(rt.s32); LO.u64 = s32(result >> 0); HI.u64 = s32(result >> 32); } auto CPU::MULTU(cr64& rs, cr64& rt) -> void { u64 result = u64(rs.u32) * u64(rt.u32); LO.u64 = s32(result >> 0); HI.u64 = s32(result >> 32); } auto CPU::NOR(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = ~(rs.u64 | rt.u64); } auto CPU::OR(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = rs.u64 | rt.u64; } auto CPU::ORI(r64& rt, cr64& rs, u16 imm) -> void { rt.u64 = rs.u64 | imm; } auto CPU::SB(cr64& rt, cr64& rs, s16 imm) -> void { write(rs.u32 + imm, rt.u32); } auto CPU::SC(r64& rt, cr64& rs, s16 imm) -> void { if(scc.llbit) { scc.llbit = 0; rt.u64 = write(rs.u32 + imm, rt.u32); } else { rt.u64 = 0; } } auto CPU::SCD(r64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); if(scc.llbit) { scc.llbit = 0; rt.u64 = write(rs.u32 + imm, rt.u64); } else { rt.u64 = 0; } } auto CPU::SD(cr64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); write(rs.u32 + imm, rt.u64); } auto CPU::SDL(cr64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); u64 address = rs.u64 + imm; u64 data = rt.u64; if(context.littleEndian()) switch(address & 7) { case 0: if(!write(address & ~7 | 7, data >> 56)) return; break; case 1: if(!write(address & ~7 | 6, data >> 48)) return; break; case 2: if(!write(address & ~7 | 5, data >> 56)) return; if(!write(address & ~7 | 6, data >> 40)) return; break; case 3: if(!write(address & ~7 | 4, data >> 32)) return; break; case 4: if(!write(address & ~7 | 3, data >> 56)) return; if(!write(address & ~7 | 4, data >> 24)) return; break; case 5: if(!write(address & ~7 | 2, data >> 48)) return; if(!write(address & ~7 | 4, data >> 16)) return; break; case 6: if(!write(address & ~7 | 1, data >> 56)) return; if(!write(address & ~7 | 2, data >> 40)) return; if(!write(address & ~7 | 4, data >> 8)) return; break; case 7: if(!write(address & ~7 | 0, data >> 0)) return; break; } if(context.bigEndian()) switch(address & 7) { case 0: if(!write(address & ~7 | 0, data >> 0)) return; break; case 1: if(!write(address & ~7 | 1, data >> 56)) return; if(!write(address & ~7 | 2, data >> 40)) return; if(!write(address & ~7 | 4, data >> 8)) return; break; case 2: if(!write(address & ~7 | 2, data >> 48)) return; if(!write(address & ~7 | 4, data >> 16)) return; break; case 3: if(!write(address & ~7 | 3, data >> 56)) return; if(!write(address & ~7 | 4, data >> 24)) return; break; case 4: if(!write(address & ~7 | 4, data >> 32)) return; break; case 5: if(!write(address & ~7 | 5, data >> 56)) return; if(!write(address & ~7 | 6, data >> 40)) return; break; case 6: if(!write(address & ~7 | 6, data >> 48)) return; break; case 7: if(!write(address & ~7 | 7, data >> 56)) return; break; } } auto CPU::SDR(cr64& rt, cr64& rs, s16 imm) -> void { if(!context.kernelMode() && context.bits == 32) return exception.reservedInstruction(); u64 address = rs.u64 + imm; u64 data = rt.u64; if(context.littleEndian()) switch(address & 7) { case 0: if(!write(address & ~7 | 0, data >> 0)) return; break; case 1: if(!write(address & ~7 | 0, data >> 24)) return; if(!write(address & ~7 | 4, data >> 8)) return; if(!write(address & ~7 | 6, data >> 0)) return; break; case 2: if(!write(address & ~7 | 0, data >> 16)) return; if(!write(address & ~7 | 4, data >> 0)) return; break; case 3: if(!write(address & ~7 | 0, data >> 8)) return; if(!write(address & ~7 | 4, data >> 0)) return; break; case 4: if(!write(address & ~7 | 0, data >> 0)) return; break; case 5: if(!write(address & ~7 | 0, data >> 8)) return; if(!write(address & ~7 | 2, data >> 0)) return; break; case 6: if(!write(address & ~7 | 0, data >> 0)) return; break; case 7: if(!write(address & ~7 | 0, data >> 0)) return; break; } if(context.bigEndian()) switch(address & 7) { case 0: if(!write(address & ~7 | 0, data >> 0)) return; break; case 1: if(!write(address & ~7 | 0, data >> 0)) return; break; case 2: if(!write(address & ~7 | 0, data >> 8)) return; if(!write(address & ~7 | 2, data >> 0)) return; break; case 3: if(!write(address & ~7 | 0, data >> 0)) return; break; case 4: if(!write(address & ~7 | 0, data >> 8)) return; if(!write(address & ~7 | 4, data >> 0)) return; break; case 5: if(!write(address & ~7 | 0, data >> 16)) return; if(!write(address & ~7 | 4, data >> 0)) return; break; case 6: if(!write(address & ~7 | 0, data >> 24)) return; if(!write(address & ~7 | 4, data >> 8)) return; if(!write(address & ~7 | 6, data >> 0)) return; break; case 7: if(!write(address & ~7 | 0, data >> 0)) return; break; } } auto CPU::SH(cr64& rt, cr64& rs, s16 imm) -> void { write(rs.u32 + imm, rt.u32); } auto CPU::SLL(r64& rd, cr64& rt, u8 sa) -> void { rd.u64 = s32(rt.u32 << sa); } auto CPU::SLLV(r64& rd, cr64& rt, cr64& rs) -> void { rd.u64 = s32(rt.u32 << (rs.u32 & 31)); } auto CPU::SLT(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = rs.s64 < rt.s64; } auto CPU::SLTI(r64& rt, cr64& rs, s16 imm) -> void { rt.u64 = rs.s64 < imm; } auto CPU::SLTIU(r64& rt, cr64& rs, s16 imm) -> void { rt.u64 = rs.u64 < imm; } auto CPU::SLTU(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = rs.u64 < rt.u64; } auto CPU::SRA(r64& rd, cr64& rt, u8 sa) -> void { rd.u64 = rt.s32 >> sa; } auto CPU::SRAV(r64& rd, cr64& rt, cr64& rs) -> void { rd.u64 = rt.s32 >> (rs.u32 & 31); } auto CPU::SRL(r64& rd, cr64& rt, u8 sa) -> void { rd.u64 = s32(rt.u32 >> sa); } auto CPU::SRLV(r64& rd, cr64& rt, cr64& rs) -> void { rd.u64 = s32(rt.u32 >> (rs.u32 & 31)); } auto CPU::SUB(r64& rd, cr64& rs, cr64& rt) -> void { if((rs.u32 ^ rt.u32) & (rs.u32 ^ rs.u32 - rt.u32) & 1 << 31) return exception.arithmeticOverflow(); rd.u64 = s32(rs.u32 - rt.u32); } auto CPU::SUBU(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = s32(rs.u32 - rt.u32); } auto CPU::SW(cr64& rt, cr64& rs, s16 imm) -> void { write(rs.u32 + imm, rt.u32); } auto CPU::SWL(cr64& rt, cr64& rs, s16 imm) -> void { u64 address = rs.u64 + imm; u32 data = rt.u32; if(context.littleEndian()) switch(address & 3) { case 0: if(!write(address & ~3 | 3, data >> 24)) return; break; case 1: if(!write(address & ~3 | 2, data >> 16)) return; break; case 2: if(!write(address & ~3 | 1, data >> 24)) return; if(!write(address & ~3 | 2, data >> 8)) return; break; case 3: if(!write(address & ~3 | 0, data >> 0)) return; break; } if(context.bigEndian()) switch(address & 3) { case 0: if(!write(address & ~3 | 0, data >> 0)) return; break; case 1: if(!write(address & ~3 | 1, data >> 24)) return; if(!write(address & ~3 | 2, data >> 8)) return; break; case 2: if(!write(address & ~3 | 2, data >> 16)) return; break; case 3: if(!write(address & ~3 | 3, data >> 24)) return; break; } } auto CPU::SWR(cr64& rt, cr64& rs, s16 imm) -> void { u64 address = rs.u64 + imm; u32 data = rt.u32; if(context.littleEndian()) switch(address & 3) { case 0: if(!write(address & ~3 | 0, data >> 0)) return; break; case 1: if(!write(address & ~3 | 0, data >> 8)) return; if(!write(address & ~3 | 2, data >> 0)) return; break; case 2: if(!write(address & ~3 | 0, data >> 0)) return; break; case 3: if(!write(address & ~3 | 0, data >> 0)) return; break; } if(context.bigEndian()) switch(address & 3) { case 0: if(!write(address & ~3 | 0, data >> 0)) return; break; case 1: if(!write(address & ~3 | 0, data >> 0)) return; break; case 2: if(!write(address & ~3 | 0, data >> 8)) return; if(!write(address & ~3 | 2, data >> 0)) return; break; case 3: if(!write(address & ~3 | 0, data >> 0)) return; break; } } auto CPU::SYNC() -> void { //no operation; for compatibility with R4000-series code } auto CPU::SYSCALL() -> void { exception.systemCall(); } auto CPU::TEQ(cr64& rs, cr64& rt) -> void { if(rs.u64 == rt.u64) exception.trap(); } auto CPU::TEQI(cr64& rs, s16 imm) -> void { if(rs.s64 == imm) exception.trap(); } auto CPU::TGE(cr64& rs, cr64& rt) -> void { if(rs.s64 >= rt.s64) exception.trap(); } auto CPU::TGEI(cr64& rs, s16 imm) -> void { if(rs.s64 >= imm) exception.trap(); } auto CPU::TGEIU(cr64& rs, s16 imm) -> void { if(rs.u64 >= imm) exception.trap(); } auto CPU::TGEU(cr64& rs, cr64& rt) -> void { if(rs.u64 >= rt.u64) exception.trap(); } auto CPU::TLT(cr64& rs, cr64& rt) -> void { if(rs.s64 < rt.s64) exception.trap(); } auto CPU::TLTI(cr64& rs, s16 imm) -> void { if(rs.s64 < imm) exception.trap(); } auto CPU::TLTIU(cr64& rs, s16 imm) -> void { if(rs.u64 < imm) exception.trap(); } auto CPU::TLTU(cr64& rs, cr64& rt) -> void { if(rs.u64 < rt.u64) exception.trap(); } auto CPU::TNE(cr64& rs, cr64& rt) -> void { if(rs.u64 != rt.u64) exception.trap(); } auto CPU::TNEI(cr64& rs, s16 imm) -> void { if(rs.s64 != imm) exception.trap(); } auto CPU::XOR(r64& rd, cr64& rs, cr64& rt) -> void { rd.u64 = rs.u64 ^ rt.u64; } auto CPU::XORI(r64& rt, cr64& rs, u16 imm) -> void { rt.u64 = rs.u64 ^ imm; } #undef PC #undef RA #undef LO #undef HI ares-126/ares/n64/cpu/interpreter-scc.cpp000066400000000000000000000303701415063341600202710ustar00rootroot00000000000000auto CPU::getControlRegister(n5 index) -> u64 { n64 data; switch(index) { case 0: //index data.bit( 0, 5) = scc.index.tlbEntry; data.bit(31) = scc.index.probeFailure; break; case 1: //random data.bit(0,4) = scc.random.index; data.bit(5) = scc.random.unused; break; case 2: //entrylo0 data.bit(0) = scc.tlb.global[0]; data.bit(1) = scc.tlb.valid[0]; data.bit(2) = scc.tlb.dirty[0]; data.bit(3, 5) = scc.tlb.cacheAlgorithm[0]; data.bit(6,29) = scc.tlb.physicalAddress[0].bit(12,35); break; case 3: //entrylo1 data.bit(0) = scc.tlb.global[1]; data.bit(1) = scc.tlb.valid[1]; data.bit(2) = scc.tlb.dirty[1]; data.bit(3, 5) = scc.tlb.cacheAlgorithm[1]; data.bit(6,29) = scc.tlb.physicalAddress[1].bit(12,35); break; case 4: //context data.bit( 4,22) = scc.context.badVirtualAddress; data.bit(23,63) = scc.context.pageTableEntryBase; break; case 5: //pagemask data.bit(13,24) = scc.tlb.pageMask.bit(13,24); break; case 6: //wired data.bit(0,4) = scc.wired.index; data.bit(5) = scc.wired.unused; break; case 8: //badvaddr data = scc.badVirtualAddress; break; case 9: //count data.bit(0,31) = scc.count >> 1; break; case 10: //entryhi data.bit( 0, 7) = scc.tlb.addressSpaceID; data.bit(13,39) = scc.tlb.virtualAddress.bit(13,39); data.bit(40,61) = 0; data.bit(62,63) = scc.tlb.region; break; case 11: //compare data.bit(0,31) = scc.compare >> 1; break; case 12: //status data.bit( 0) = scc.status.interruptEnable; data.bit( 1) = scc.status.exceptionLevel; data.bit( 2) = scc.status.errorLevel; data.bit( 3, 4) = scc.status.privilegeMode; data.bit( 5) = scc.status.userExtendedAddressing; data.bit( 6) = scc.status.supervisorExtendedAddressing; data.bit( 7) = scc.status.kernelExtendedAddressing; data.bit( 8,15) = scc.status.interruptMask; data.bit(16) = scc.status.de; data.bit(17) = scc.status.ce; data.bit(18) = scc.status.condition; data.bit(20) = scc.status.softReset; data.bit(21) = scc.status.tlbShutdown; data.bit(22) = scc.status.vectorLocation; data.bit(24) = scc.status.instructionTracing; data.bit(25) = scc.status.reverseEndian; data.bit(26) = scc.status.floatingPointMode; data.bit(27) = scc.status.lowPowerMode; data.bit(28) = scc.status.enable.coprocessor0; data.bit(29) = scc.status.enable.coprocessor1; data.bit(30) = scc.status.enable.coprocessor2; data.bit(31) = scc.status.enable.coprocessor3; context.setMode(); break; case 13: //cause data.bit( 2, 6) = scc.cause.exceptionCode; data.bit( 8,15) = scc.cause.interruptPending; data.bit(28,29) = scc.cause.coprocessorError; data.bit(31) = scc.cause.branchDelay; break; case 14: //exception program counter data = scc.epc; break; case 15: //coprocessor revision identifier data.bit(0, 7) = scc.coprocessor.revision; data.bit(8,15) = scc.coprocessor.implementation; break; case 16: //configuration data.bit( 0, 1) = scc.configuration.coherencyAlgorithmKSEG0; data.bit( 2, 3) = scc.configuration.cu; data.bit(15) = scc.configuration.bigEndian; data.bit(24,27) = scc.configuration.sysadWritebackPattern; data.bit(28,30) = scc.configuration.systemClockRatio; break; case 17: //load linked address data = scc.ll; break; case 18: //watchlo data.bit(0) = scc.watchLo.trapOnWrite; data.bit(1) = scc.watchLo.trapOnRead; data.bit(3,31) = scc.watchLo.physicalAddress.bit(3,31); break; case 19: //watchhi data.bit(0,3) = scc.watchHi.physicalAddressExtended; break; case 20: //xcontext data.bit( 4,30) = scc.xcontext.badVirtualAddress; data.bit(31,32) = scc.xcontext.region; data.bit(33,63) = scc.xcontext.pageTableEntryBase; break; case 26: //parity error data.bit(0,7) = scc.parityError.diagnostic; break; case 27: //cache error (unused) data.bit(0,31) = 0; break; case 28: //taglo data.bit(6, 7) = scc.tagLo.primaryCacheState; data.bit(8,27) = scc.tagLo.physicalAddress.bit(12,31); break; case 29: //taghi data.bit(0,31) = 0; break; case 30: //error exception program counter data = scc.epcError; break; } return data; } auto CPU::setControlRegister(n5 index, n64 data) -> void { //read-only variables are defined but commented out for documentation purposes switch(index) { case 0: //index scc.index.tlbEntry = data.bit( 0,5); scc.index.probeFailure = data.bit(31); break; case 1: //random //scc.random.index = data.bit(0,4); scc.random.unused = data.bit(5); break; case 2: //entrylo0 scc.tlb.global[0] = data.bit(0); scc.tlb.valid[0] = data.bit(1); scc.tlb.dirty[0] = data.bit(2); scc.tlb.cacheAlgorithm[0] = data.bit(3, 5); scc.tlb.physicalAddress[0].bit(12,35) = data.bit(6,29); scc.tlb.synchronize(); break; case 3: //entrylo1 scc.tlb.global[1] = data.bit(0); scc.tlb.valid[1] = data.bit(1); scc.tlb.dirty[1] = data.bit(2); scc.tlb.cacheAlgorithm[1] = data.bit(3, 5); scc.tlb.physicalAddress[1].bit(12,35) = data.bit(6,29); scc.tlb.synchronize(); break; case 4: //context scc.context.badVirtualAddress = data.bit( 4,22); scc.context.pageTableEntryBase = data.bit(23,63); break; case 5: //pagemask scc.tlb.pageMask.bit(13,24) = data.bit(13,24); scc.tlb.synchronize(); break; case 6: //wired scc.wired.index = data.bit(0,4); scc.wired.unused = data.bit(5); scc.random.index = 31; break; case 8: //badvaddr //scc.badVirtualAddress = data; //read-only break; case 9: //count scc.count = data.bit(0,31) << 1; break; case 10: //entryhi scc.tlb.addressSpaceID = data.bit( 0, 7); scc.tlb.virtualAddress.bit(13,39) = data.bit(13,39); scc.tlb.region = data.bit(62,63); scc.tlb.synchronize(); break; case 11: //compare scc.compare = data.bit(0,31) << 1; scc.cause.interruptPending.bit(Interrupt::Timer) = 0; break; case 12: {//status bool floatingPointMode = scc.status.floatingPointMode; scc.status.interruptEnable = data.bit( 0); scc.status.exceptionLevel = data.bit( 1); scc.status.errorLevel = data.bit( 2); scc.status.privilegeMode = data.bit( 3, 4); scc.status.userExtendedAddressing = data.bit( 5); scc.status.supervisorExtendedAddressing = data.bit( 6); scc.status.kernelExtendedAddressing = data.bit( 7); scc.status.interruptMask = data.bit( 8,15); scc.status.de = data.bit(16); scc.status.ce = data.bit(17); scc.status.condition = data.bit(18); scc.status.softReset = data.bit(20); //scc.status.tlbShutdown = data.bit(21); //read-only scc.status.vectorLocation = data.bit(22); scc.status.instructionTracing = data.bit(24); scc.status.reverseEndian = data.bit(25); scc.status.floatingPointMode = data.bit(26); scc.status.lowPowerMode = data.bit(27); scc.status.enable.coprocessor0 = data.bit(28); scc.status.enable.coprocessor1 = data.bit(29); scc.status.enable.coprocessor2 = data.bit(30); scc.status.enable.coprocessor3 = data.bit(31); if(floatingPointMode != scc.status.floatingPointMode) { fpu.setFloatingPointMode(scc.status.floatingPointMode); } context.setMode(); if(scc.status.instructionTracing) { debug(unimplemented, "[CPU::setControlRegister] instructionTracing=1"); } } break; case 13: //cause scc.cause.interruptPending.bit(0) = data.bit(8); scc.cause.interruptPending.bit(1) = data.bit(9); break; case 14: //exception program counter scc.epc = data; break; case 15: //coprocessor revision identifier //scc.coprocessor.revision = data.bit(0, 7); //read-only //scc.coprocessor.implementation = data.bit(8,15); //read-only break; case 16: //configuration scc.configuration.coherencyAlgorithmKSEG0 = data.bit( 0, 1); scc.configuration.cu = data.bit( 2, 3); scc.configuration.bigEndian = data.bit(15); scc.configuration.sysadWritebackPattern = data.bit(24,27); //scc.configuration.systemClockRatio = data.bit(28,30); //read-only context.setMode(); break; case 17: //load linked address scc.ll = data; break; case 18: //watchlo scc.watchLo.trapOnWrite = data.bit(0); scc.watchLo.trapOnRead = data.bit(1); scc.watchLo.physicalAddress.bit(3,31) = data.bit(3,31); break; case 19: //watchhi scc.watchHi.physicalAddressExtended = data.bit(0,3); break; case 20: //xcontext scc.xcontext.badVirtualAddress = data.bit( 4,30); scc.xcontext.region = data.bit(31,32); scc.xcontext.pageTableEntryBase = data.bit(33,63); break; case 26: //parity error scc.parityError.diagnostic = data.bit(0,7); break; case 27: //cache error (unused) break; case 28: //taglo scc.tagLo.primaryCacheState = data.bit(6, 7); scc.tagLo.physicalAddress.bit(12,31) = data.bit(8,27); break; case 29: //taghi break; case 30: //error exception program counter scc.epcError = data; break; } } auto CPU::DMFC0(r64& rt, u8 rd) -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); if(context.bits == 32) return exception.reservedInstruction(); } rt.u64 = getControlRegister(rd); } auto CPU::DMTC0(cr64& rt, u8 rd) -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); if(context.bits == 32) return exception.reservedInstruction(); } setControlRegister(rd, rt.u64); } auto CPU::ERET() -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } branch.exception(); if(scc.status.errorLevel) { ipu.pc = scc.epcError; scc.status.errorLevel = 0; } else { ipu.pc = scc.epc; scc.status.exceptionLevel = 0; } scc.llbit = 0; context.setMode(); } auto CPU::MFC0(r64& rt, u8 rd) -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } rt.u64 = s32(getControlRegister(rd)); } auto CPU::MTC0(cr64& rt, u8 rd) -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } setControlRegister(rd, s32(rt.u32)); } auto CPU::TLBP() -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } scc.index.tlbEntry = 0; //technically undefined scc.index.probeFailure = 1; for(u32 index : range(TLB::Entries)) { auto& entry = tlb.entry[index]; auto mask = ~entry.pageMask & ~0x1fff; if((entry.virtualAddress & mask) != (scc.tlb.virtualAddress & mask)) continue; if(!entry.global[0] || !entry.global[1]) { if(entry.addressSpaceID != scc.tlb.addressSpaceID) continue; } scc.index.tlbEntry = index; scc.index.probeFailure = 0; break; } } auto CPU::TLBR() -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } if(scc.index.tlbEntry >= TLB::Entries) return; scc.tlb = tlb.entry[scc.index.tlbEntry]; } auto CPU::TLBWI() -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } if(scc.index.tlbEntry >= TLB::Entries) return; tlb.entry[scc.index.tlbEntry] = scc.tlb; debugger.tlbWrite(scc.index.tlbEntry); } auto CPU::TLBWR() -> void { if(!context.kernelMode()) { if(!scc.status.enable.coprocessor0) return exception.coprocessor0(); } if(scc.random.index >= TLB::Entries) return; tlb.entry[scc.random.index] = scc.tlb; debugger.tlbWrite(scc.random.index); } ares-126/ares/n64/cpu/interpreter.cpp000066400000000000000000000220201415063341600175140ustar00rootroot00000000000000#define OP pipeline.instruction #define RD ipu.r[RDn] #define RT ipu.r[RTn] #define RS ipu.r[RSn] #define jp(id, name, ...) case id: return decoder##name(__VA_ARGS__) #define op(id, name, ...) case id: return name(__VA_ARGS__) #define br(id, name, ...) case id: return name(__VA_ARGS__) #define SA (OP >> 6 & 31) #define RDn (OP >> 11 & 31) #define RTn (OP >> 16 & 31) #define RSn (OP >> 21 & 31) #define FD (OP >> 6 & 31) #define FS (OP >> 11 & 31) #define FT (OP >> 16 & 31) #define IMMi16 s16(OP) #define IMMu16 u16(OP) #define IMMu26 (OP & 0x03ff'ffff) auto CPU::decoderEXECUTE() -> void { switch(OP >> 26) { jp(0x00, SPECIAL); jp(0x01, REGIMM); br(0x02, J, IMMu26); br(0x03, JAL, IMMu26); br(0x04, BEQ, RS, RT, IMMi16); br(0x05, BNE, RS, RT, IMMi16); br(0x06, BLEZ, RS, IMMi16); br(0x07, BGTZ, RS, IMMi16); op(0x08, ADDI, RT, RS, IMMi16); op(0x09, ADDIU, RT, RS, IMMi16); op(0x0a, SLTI, RT, RS, IMMi16); op(0x0b, SLTIU, RT, RS, IMMi16); op(0x0c, ANDI, RT, RS, IMMu16); op(0x0d, ORI, RT, RS, IMMu16); op(0x0e, XORI, RT, RS, IMMu16); op(0x0f, LUI, RT, IMMu16); jp(0x10, SCC); jp(0x11, FPU); br(0x12, COP2); br(0x13, COP3); br(0x14, BEQL, RS, RT, IMMi16); br(0x15, BNEL, RS, RT, IMMi16); br(0x16, BLEZL, RS, IMMi16); br(0x17, BGTZL, RS, IMMi16); op(0x18, DADDI, RT, RS, IMMi16); op(0x19, DADDIU, RT, RS, IMMi16); op(0x1a, LDL, RT, RS, IMMi16); op(0x1b, LDR, RT, RS, IMMi16); br(0x1c, INVALID); br(0x1d, INVALID); br(0x1e, INVALID); br(0x1f, INVALID); op(0x20, LB, RT, RS, IMMi16); op(0x21, LH, RT, RS, IMMi16); op(0x22, LWL, RT, RS, IMMi16); op(0x23, LW, RT, RS, IMMi16); op(0x24, LBU, RT, RS, IMMi16); op(0x25, LHU, RT, RS, IMMi16); op(0x26, LWR, RT, RS, IMMi16); op(0x27, LWU, RT, RS, IMMi16); op(0x28, SB, RT, RS, IMMi16); op(0x29, SH, RT, RS, IMMi16); op(0x2a, SWL, RT, RS, IMMi16); op(0x2b, SW, RT, RS, IMMi16); op(0x2c, SDL, RT, RS, IMMi16); op(0x2d, SDR, RT, RS, IMMi16); op(0x2e, SWR, RT, RS, IMMi16); op(0x2f, CACHE, OP >> 16 & 31, RS, IMMi16); op(0x30, LL, RT, RS, IMMi16); op(0x31, LWC1, FT, RS, IMMi16); br(0x32, COP2); //LWC2 br(0x33, COP3); //LWC3 op(0x34, LLD, RT, RS, IMMi16); op(0x35, LDC1, FT, RS, IMMi16); br(0x36, COP2); //LDC2 op(0x37, LD, RT, RS, IMMi16); op(0x38, SC, RT, RS, IMMi16); op(0x39, SWC1, FT, RS, IMMi16); br(0x3a, COP2); //SWC2 br(0x3b, COP3); //SWC3 op(0x3c, SCD, RT, RS, IMMi16); op(0x3d, SDC1, FT, RS, IMMi16); br(0x3e, COP2); //SDC2 op(0x3f, SD, RT, RS, IMMi16); } } auto CPU::decoderSPECIAL() -> void { switch(OP & 0x3f) { op(0x00, SLL, RD, RT, SA); br(0x01, INVALID); op(0x02, SRL, RD, RT, SA); op(0x03, SRA, RD, RT, SA); op(0x04, SLLV, RD, RT, RS); br(0x05, INVALID); op(0x06, SRLV, RD, RT, RS); op(0x07, SRAV, RD, RT, RS); br(0x08, JR, RS); br(0x09, JALR, RD, RS); br(0x0a, INVALID); br(0x0b, INVALID); br(0x0c, SYSCALL); br(0x0d, BREAK); br(0x0e, INVALID); op(0x0f, SYNC); op(0x10, MFHI, RD); op(0x11, MTHI, RS); op(0x12, MFLO, RD); op(0x13, MTLO, RS); op(0x14, DSLLV, RD, RT, RS); br(0x15, INVALID); op(0x16, DSRLV, RD, RT, RS); op(0x17, DSRAV, RD, RT, RS); op(0x18, MULT, RS, RT); op(0x19, MULTU, RS, RT); op(0x1a, DIV, RS, RT); op(0x1b, DIVU, RS, RT); op(0x1c, DMULT, RS, RT); op(0x1d, DMULTU, RS, RT); op(0x1e, DDIV, RS, RT); op(0x1f, DDIVU, RS, RT); op(0x20, ADD, RD, RS, RT); op(0x21, ADDU, RD, RS, RT); op(0x22, SUB, RD, RS, RT); op(0x23, SUBU, RD, RS, RT); op(0x24, AND, RD, RS, RT); op(0x25, OR, RD, RS, RT); op(0x26, XOR, RD, RS, RT); op(0x27, NOR, RD, RS, RT); br(0x28, INVALID); br(0x29, INVALID); op(0x2a, SLT, RD, RS, RT); op(0x2b, SLTU, RD, RS, RT); op(0x2c, DADD, RD, RS, RT); op(0x2d, DADDU, RD, RS, RT); op(0x2e, DSUB, RD, RS, RT); op(0x2f, DSUBU, RD, RS, RT); op(0x30, TGE, RS, RT); op(0x31, TGEU, RS, RT); op(0x32, TLT, RS, RT); op(0x33, TLTU, RS, RT); op(0x34, TEQ, RS, RT); br(0x35, INVALID); op(0x36, TNE, RS, RT); br(0x37, INVALID); op(0x38, DSLL, RD, RT, SA); br(0x39, INVALID); op(0x3a, DSRL, RD, RT, SA); op(0x3b, DSRA, RD, RT, SA); op(0x3c, DSLL, RD, RT, SA + 32); br(0x3d, INVALID); op(0x3e, DSRL, RD, RT, SA + 32); op(0x3f, DSRA, RD, RT, SA + 32); } } auto CPU::decoderREGIMM() -> void { switch(OP >> 16 & 0x1f) { br(0x00, BLTZ, RS, IMMi16); br(0x01, BGEZ, RS, IMMi16); br(0x02, BLTZL, RS, IMMi16); br(0x03, BGEZL, RS, IMMi16); br(0x04, INVALID); br(0x05, INVALID); br(0x06, INVALID); br(0x07, INVALID); op(0x08, TGEI, RS, IMMi16); op(0x09, TGEIU, RS, IMMi16); op(0x0a, TLTI, RS, IMMi16); op(0x0b, TLTIU, RS, IMMi16); op(0x0c, TEQI, RS, IMMi16); br(0x0d, INVALID); op(0x0e, TNEI, RS, IMMi16); br(0x0f, INVALID); br(0x10, BLTZAL, RS, IMMi16); br(0x11, BGEZAL, RS, IMMi16); br(0x12, BLTZALL, RS, IMMi16); br(0x13, BGEZALL, RS, IMMi16); br(0x14, INVALID); br(0x15, INVALID); br(0x16, INVALID); br(0x17, INVALID); br(0x18, INVALID); br(0x19, INVALID); br(0x1a, INVALID); br(0x1b, INVALID); br(0x1c, INVALID); br(0x1d, INVALID); br(0x1e, INVALID); br(0x1f, INVALID); } } auto CPU::decoderSCC() -> void { switch(OP >> 21 & 0x1f) { op(0x00, MFC0, RT, RDn); op(0x01, DMFC0, RT, RDn); br(0x02, INVALID); //CFC0 br(0x03, INVALID); op(0x04, MTC0, RT, RDn); op(0x05, DMTC0, RT, RDn); br(0x06, INVALID); //CTC0 br(0x07, INVALID); br(0x08, INVALID); //BC0 br(0x09, INVALID); br(0x0a, INVALID); br(0x0b, INVALID); br(0x0c, INVALID); br(0x0d, INVALID); br(0x0e, INVALID); br(0x0f, INVALID); } switch(OP & 0x3f) { op(0x01, TLBR); op(0x02, TLBWI); op(0x06, TLBWR); op(0x08, TLBP); br(0x18, ERET); } //undefined instructions do not throw a reserved instruction exception } auto CPU::decoderFPU() -> void { switch(OP >> 21 & 0x1f) { op(0x00, MFC1, RT, FS); op(0x01, DMFC1, RT, FS); op(0x02, CFC1, RT, RDn); br(0x03, INVALID); op(0x04, MTC1, RT, FS); op(0x05, DMTC1, RT, FS); op(0x06, CTC1, RT, RDn); br(0x07, INVALID); br(0x08, BC1, OP >> 16 & 1, OP >> 17 & 1, IMMi16); br(0x09, INVALID); br(0x0a, INVALID); br(0x0b, INVALID); br(0x0c, INVALID); br(0x0d, INVALID); br(0x0e, INVALID); br(0x0f, INVALID); } if((OP >> 21 & 31) == 16) switch(OP & 0x3f) { op(0x00, FADD_S, FD, FS, FT); op(0x01, FSUB_S, FD, FS, FT); op(0x02, FMUL_S, FD, FS, FT); op(0x03, FDIV_S, FD, FS, FT); op(0x04, FSQRT_S, FD, FS); op(0x05, FABS_S, FD, FS); op(0x06, FMOV_S, FD, FS); op(0x07, FNEG_S, FD, FS); op(0x08, FROUND_L_S, FD, FS); op(0x09, FTRUNC_L_S, FD, FS); op(0x0a, FCEIL_L_S, FD, FS); op(0x0b, FFLOOR_L_S, FD, FS); op(0x0c, FROUND_W_S, FD, FS); op(0x0d, FTRUNC_W_S, FD, FS); op(0x0e, FCEIL_W_S, FD, FS); op(0x0f, FFLOOR_W_S, FD, FS); op(0x21, FCVT_D_S, FD, FS); op(0x24, FCVT_W_S, FD, FS); op(0x25, FCVT_L_S, FD, FS); op(0x30, FC_F_S, FS, FT); op(0x31, FC_UN_S, FS, FT); op(0x32, FC_EQ_S, FS, FT); op(0x33, FC_UEQ_S, FS, FT); op(0x34, FC_OLT_S, FS, FT); op(0x35, FC_ULT_S, FS, FT); op(0x36, FC_OLE_S, FS, FT); op(0x37, FC_ULE_S, FS, FT); op(0x38, FC_SF_S, FS, FT); op(0x39, FC_NGLE_S, FS, FT); op(0x3a, FC_SEQ_S, FS, FT); op(0x3b, FC_NGL_S, FS, FT); op(0x3c, FC_LT_S, FS, FT); op(0x3d, FC_NGE_S, FS, FT); op(0x3e, FC_LE_S, FS, FT); op(0x3f, FC_NGT_S, FS, FT); } if((OP >> 21 & 31) == 17) switch(OP & 0x3f) { op(0x00, FADD_D, FD, FS, FT); op(0x01, FSUB_D, FD, FS, FT); op(0x02, FMUL_D, FD, FS, FT); op(0x03, FDIV_D, FD, FS, FT); op(0x04, FSQRT_D, FD, FS); op(0x05, FABS_D, FD, FS); op(0x06, FMOV_D, FD, FS); op(0x07, FNEG_D, FD, FS); op(0x08, FROUND_L_D, FD, FS); op(0x09, FTRUNC_L_D, FD, FS); op(0x0a, FCEIL_L_D, FD, FS); op(0x0b, FFLOOR_L_D, FD, FS); op(0x0c, FROUND_W_D, FD, FS); op(0x0d, FTRUNC_W_D, FD, FS); op(0x0e, FCEIL_W_D, FD, FS); op(0x0f, FFLOOR_W_D, FD, FS); op(0x20, FCVT_S_D, FD, FS); op(0x24, FCVT_W_D, FD, FS); op(0x25, FCVT_L_D, FD, FS); op(0x30, FC_F_D, FS, FT); op(0x31, FC_UN_D, FS, FT); op(0x32, FC_EQ_D, FS, FT); op(0x33, FC_UEQ_D, FS, FT); op(0x34, FC_OLT_D, FS, FT); op(0x35, FC_ULT_D, FS, FT); op(0x36, FC_OLE_D, FS, FT); op(0x37, FC_ULE_D, FS, FT); op(0x38, FC_SF_D, FS, FT); op(0x39, FC_NGLE_D, FS, FT); op(0x3a, FC_SEQ_D, FS, FT); op(0x3b, FC_NGL_D, FS, FT); op(0x3c, FC_LT_D, FS, FT); op(0x3d, FC_NGE_D, FS, FT); op(0x3e, FC_LE_D, FS, FT); op(0x3f, FC_NGT_D, FS, FT); } if((OP >> 21 & 31) == 20) switch(OP & 0x3f) { op(0x20, FCVT_S_W, FD, FS); op(0x21, FCVT_D_W, FD, FS); } if((OP >> 21 & 31) == 21) switch(OP & 0x3f) { op(0x20, FCVT_S_L, FD, FS); op(0x21, FCVT_D_L, FD, FS); } //undefined instructions do not throw a reserved instruction exception } auto CPU::COP2() -> void { exception.coprocessor2(); } auto CPU::COP3() -> void { exception.coprocessor3(); } auto CPU::INVALID() -> void { exception.reservedInstruction(); } #undef SA #undef RDn #undef RTn #undef RSn #undef FD #undef FS #undef FT #undef IMMi16 #undef IMMu16 #undef IMMu26 #undef jp #undef op #undef br #undef OP #undef RD #undef RT #undef RS ares-126/ares/n64/cpu/memory.cpp000066400000000000000000000157571415063341600165040ustar00rootroot00000000000000//32-bit segments auto CPU::kernelSegment32(u32 address) const -> Context::Segment { if(address <= 0x7fff'ffff) return Context::Segment::Mapped; //kuseg if(address <= 0x9fff'ffff) return Context::Segment::Cached; //kseg0 if(address <= 0xbfff'ffff) return Context::Segment::Direct; //kseg1 if(address <= 0xdfff'ffff) return Context::Segment::Mapped; //ksseg if(address <= 0xffff'ffff) return Context::Segment::Mapped; //kseg3 unreachable; } auto CPU::supervisorSegment32(u32 address) const -> Context::Segment { if(address <= 0x7fff'ffff) return Context::Segment::Mapped; //suseg if(address <= 0xbfff'ffff) return Context::Segment::Unused; if(address <= 0xdfff'ffff) return Context::Segment::Mapped; //sseg if(address <= 0xffff'ffff) return Context::Segment::Unused; unreachable; } auto CPU::userSegment32(u32 address) const -> Context::Segment { if(address <= 0x7fff'ffff) return Context::Segment::Mapped; //useg if(address <= 0xffff'ffff) return Context::Segment::Unused; unreachable; } //64-bit segments auto CPU::kernelSegment64(u64 address) const -> Context::Segment { if(address <= 0x0000'00ff'ffff'ffffull) return Context::Segment::Mapped; //xkuseg if(address <= 0x3fff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0x4000'00ff'ffff'ffffull) return Context::Segment::Mapped; //xksseg if(address <= 0x7fff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0x8000'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0x87ff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0x8800'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0x8fff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0x9000'0000'ffff'ffffull) return Context::Segment::Direct; //xkphys* if(address <= 0x97ff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0x9800'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0x9fff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0xa000'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0xa7ff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0xa800'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0xafff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0xb000'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0xb7ff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0xb800'0000'ffff'ffffull) return Context::Segment::Cached; //xkphys* if(address <= 0xbfff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0xc000'00ff'7fff'ffffull) return Context::Segment::Mapped; //xkseg if(address <= 0xffff'ffff'7fff'ffffull) return Context::Segment::Unused; if(address <= 0xffff'ffff'9fff'ffffull) return Context::Segment::Cached; //ckseg0 if(address <= 0xffff'ffff'bfff'ffffull) return Context::Segment::Direct; //ckseg1 if(address <= 0xffff'ffff'dfff'ffffull) return Context::Segment::Mapped; //ckseg2 if(address <= 0xffff'ffff'ffff'ffffull) return Context::Segment::Mapped; //ckseg3 unreachable; } auto CPU::supervisorSegment64(u64 address) const -> Context::Segment { if(address <= 0x0000'00ff'ffff'ffffull) return Context::Segment::Mapped; //xsuseg if(address <= 0x3fff'ffff'ffff'ffffull) return Context::Segment::Unused; if(address <= 0x4000'00ff'ffff'ffffull) return Context::Segment::Mapped; //xsseg if(address <= 0xffff'ffff'bfff'ffffull) return Context::Segment::Unused; if(address <= 0xffff'ffff'dfff'ffffull) return Context::Segment::Mapped; //csseg if(address <= 0xffff'ffff'ffff'ffffull) return Context::Segment::Unused; unreachable; } auto CPU::userSegment64(u64 address) const -> Context::Segment { if(address <= 0x0000'00ff'ffff'ffffull) return Context::Segment::Mapped; //xuseg if(address <= 0xffff'ffff'ffff'ffffull) return Context::Segment::Unused; unreachable; } // auto CPU::segment(u64 address) -> Context::Segment { auto segment = context.segment[address >> 29 & 7]; //if(likely(context.bits == 32)) return (Context::Segment)segment; switch(segment) { case Context::Segment::Kernel64: return kernelSegment64(address); case Context::Segment::Supervisor64: return supervisorSegment64(address); case Context::Segment::User64: return userSegment64(address); } unreachable; } auto CPU::devirtualize(u64 address) -> maybe { switch(context.segment[address >> 29 & 7]) { case Context::Segment::Unused: exception.addressLoad(); return nothing; case Context::Segment::Mapped: if(auto match = tlb.load(address)) return match.address; tlb.exception(address); return nothing; case Context::Segment::Cached: case Context::Segment::Direct: return address; } unreachable; } auto CPU::fetch(u64 address) -> u32 { switch(segment(address)) { case Context::Segment::Unused: step(1); exception.addressLoad(); return 0; //nop case Context::Segment::Mapped: if(auto match = tlb.load(address)) { if(match.cache) return icache.fetch(match.address); step(1); return bus.read(match.address); } step(1); tlb.exception(address); return 0; //nop case Context::Segment::Cached: return icache.fetch(address); case Context::Segment::Direct: step(1); return bus.read(address); } unreachable; } template auto CPU::read(u64 address) -> maybe { if constexpr(Accuracy::CPU::AddressErrors) { if(unlikely(address & Size - 1)) { step(1); exception.addressLoad(); return nothing; } } switch(segment(address)) { case Context::Segment::Unused: step(1); exception.addressLoad(); return nothing; case Context::Segment::Mapped: if(auto match = tlb.load(address)) { if(match.cache) return dcache.read(match.address); step(1); return bus.read(match.address); } step(1); tlb.exception(address); return nothing; case Context::Segment::Cached: return dcache.read(address); case Context::Segment::Direct: step(1); return bus.read(address); } unreachable; } template auto CPU::write(u64 address, u64 data) -> bool { if constexpr(Accuracy::CPU::AddressErrors) { if(unlikely(address & Size - 1)) { step(1); exception.addressStore(); return false; } } switch(segment(address)) { case Context::Segment::Unused: step(1); exception.addressStore(); return false; case Context::Segment::Mapped: if(auto match = tlb.store(address)) { if(match.cache) return dcache.write(match.address, data), true; step(1); return bus.write(match.address, data), true; } step(1); tlb.exception(address); return false; case Context::Segment::Cached: return dcache.write(address, data), true; case Context::Segment::Direct: step(1); return bus.write(address, data), true; } unreachable; } ares-126/ares/n64/cpu/recompiler.cpp000066400000000000000000000765041415063341600173320ustar00rootroot00000000000000auto CPU::Recompiler::pool(u32 address) -> Pool* { auto& pool = pools[address >> 8 & 0x1fffff]; if(!pool) pool = (Pool*)allocator.acquire(sizeof(Pool)); return pool; } auto CPU::Recompiler::block(u32 address) -> Block* { if(auto block = pool(address)->blocks[address >> 2 & 0x3f]) return block; auto block = emit(address); return pool(address)->blocks[address >> 2 & 0x3f] = block; } auto CPU::Recompiler::emit(u32 address) -> Block* { if(unlikely(allocator.available() < 1_MiB)) { print("CPU allocator flush\n"); allocator.release(bump_allocator::zero_fill); reset(); } auto block = (Block*)allocator.acquire(sizeof(Block)); block->code = allocator.acquire(); bind({block->code, allocator.available()}); push(rbx); push(rbp); push(r13); if constexpr(ABI::Windows) { sub(rsp, imm8(0x40)); } mov(rbx, ra0); mov(rbp, ra1); mov(r13, ra2); auto entry = declareLabel(); jmp8(entry); auto epilogue = defineLabel(); if constexpr(ABI::Windows) { add(rsp, imm8(0x40)); } pop(r13); pop(rbp); pop(rbx); ret(); defineLabel(entry); bool hasBranched = 0; while(true) { u32 instruction = bus.read(address); bool branched = emitEXECUTE(instruction); if(unlikely(instruction == 0x1000'ffff)) { //accelerate idle loops mov(ra1d, imm32(64)); call(&CPU::step); } call(&CPU::instructionEpilogue); address += 4; if(hasBranched || (address & 0xfc) == 0) break; //block boundary hasBranched = branched; test(al, al); jnz(epilogue); } jmp(epilogue); allocator.reserve(size()); //print(hex(PC, 8L), " ", instructions, " ", size(), "\n"); return block; } #define Sa (instruction >> 6 & 31) #define Rdn (instruction >> 11 & 31) #define Rtn (instruction >> 16 & 31) #define Rsn (instruction >> 21 & 31) #define Fdn (instruction >> 6 & 31) #define Fsn (instruction >> 11 & 31) #define Ftn (instruction >> 16 & 31) #define Rd dis8(rbx, (Rdn - 16) * 8) #define Rt dis8(rbx, (Rtn - 16) * 8) #define Rs dis8(rbx, (Rsn - 16) * 8) #define Lo dis32(rbx, offsetof(IPU, lo) - offsetof(IPU, r[16])) #define Hi dis32(rbx, offsetof(IPU, hi) - offsetof(IPU, r[16])) #define Fd dis8(r13, (Fdn - 16) * 8) #define Fs dis8(r13, (Fsn - 16) * 8) #define Ft dis8(r13, (Ftn - 16) * 8) #define i16 s16(instruction) #define n16 u16(instruction) #define n26 u32(instruction & 0x03ff'ffff) auto CPU::Recompiler::emitEXECUTE(u32 instruction) -> bool { switch(instruction >> 26) { //SPECIAL case 0x00: { return emitSPECIAL(instruction); } //REGIMM case 0x01: { return emitREGIMM(instruction); } //J n26 case 0x02: { mov(ra1d, imm32(n26)); call(&CPU::J); return 1; } //JAL n26 case 0x03: { mov(ra1d, imm32(n26)); call(&CPU::JAL); return 1; } //BEQ Rs,Rt,i16 case 0x04: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&CPU::BEQ); return 1; } //BNE Rs,Rt,i16 case 0x05: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&CPU::BNE); return 1; } //BLEZ Rs,i16 case 0x06: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLEZ); return 1; } //BGTZ Rs,i16 case 0x07: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGTZ); return 1; } //ADDI Rt,Rs,i16 case 0x08: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::ADDI); return 0; } //ADDIU Rt,Rs,i16 case 0x09: { mov(eax, Rs); add(eax, imm32(i16)); movsxd(rax, eax); mov(Rt, rax); return 0; } //SLTI Rt,Rs,i16 case 0x0a: { mov(rax, Rs); mov(ecx, imm32(i16)); movsxd(rcx, ecx); cmp(rax, rcx); setl(al); movzx(eax, al); mov(Rt, rax); return 0; } //SLTIU Rt,Rs,i16 case 0x0b: { mov(rax, Rs); mov(ecx, imm32(i16)); movsxd(rcx, ecx); cmp(rax, rcx); setb(al); movzx(eax, al); mov(Rt, rax); return 0; } //ANDI Rt,Rs,n16 case 0x0c: { mov(rax, Rs); and(rax, imm32(n16)); mov(Rt, rax); return 0; } //ORI Rt,Rs,n16 case 0x0d: { mov(rax, Rs); or(rax, imm32(n16)); mov(Rt, rax); return 0; } //XORI Rt,Rs,n16 case 0x0e: { mov(rax, Rs); xor(rax, imm32(n16)); mov(Rt, rax); return 0; } //LUI Rt,n16 case 0x0f: { mov(eax, imm32(n16 << 16)); movsxd(rax, eax); mov(Rt, rax); return 0; } //SCC case 0x10: { return emitSCC(instruction); } //FPU case 0x11: { return emitFPU(instruction); } //COP2 case 0x12: { call(&CPU::COP2); return 1; } //COP3 case 0x13: { call(&CPU::COP3); return 1; } //BEQL Rs,Rt,i16 case 0x14: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&CPU::BEQL); return 1; } //BNEL Rs,Rt,i16 case 0x15: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&CPU::BNEL); return 1; } //BLEZL Rs,i16 case 0x16: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLEZL); return 1; } //BGTZL Rs,i16 case 0x17: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGTZL); return 1; } //DADDI Rt,Rs,i16 case 0x18: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::DADDI); return 0; } //DADDIU Rt,Rs,i16 case 0x19: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::DADDIU); return 0; } //LDL Rt,Rs,i16 case 0x1a: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LDL); return 0; } //LDR Rt,Rs,i16 case 0x1b: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LDR); return 0; } //INVALID case 0x1c ... 0x1f: { call(&CPU::INVALID); return 1; } //LB Rt,Rs,i16 case 0x20: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LB); return 0; } //LH Rt,Rs,i16 case 0x21: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LH); return 0; } //LWL Rt,Rs,i16 case 0x22: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWL); return 0; } //LW Rt,Rs,i16 case 0x23: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LW); return 0; } //LBU Rt,Rs,i16 case 0x24: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LBU); return 0; } //LHU Rt,Rs,i16 case 0x25: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LHU); return 0; } //LWR Rt,Rs,i16 case 0x26: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWR); return 0; } //LWU Rt,Rs,i16 case 0x27: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWU); return 0; } //SB Rt,Rs,i16 case 0x28: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SB); return 0; } //SH Rt,Rs,i16 case 0x29: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SH); return 0; } //SWL Rt,Rs,i16 case 0x2a: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWL); return 0; } //SW Rt,Rs,i16 case 0x2b: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SW); return 0; } //SDL Rt,Rs,i16 case 0x2c: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SDL); return 0; } //SDR Rt,Rs,i16 case 0x2d: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SDR); return 0; } //SWR Rt,Rs,i16 case 0x2e: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWR); return 0; } //CACHE op(offset),base case 0x2f: { mov(ra1d, imm32(instruction >> 16 & 31)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::CACHE); return 0; } //LL Rt,Rs,i16 case 0x30: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LL); return 0; } //LWC1 Ft,Rs,i16 case 0x31: { mov(ra1d, imm32(Ftn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWC1); return 0; } //LWC2 case 0x32: { call(&CPU::COP2); return 1; } //LWC3 case 0x33: { call(&CPU::COP3); return 1; } //LLD Rt,Rs,i16 case 0x34: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LLD); return 0; } //LDC1 Ft,Rs,i16 case 0x35: { mov(ra1d, imm32(Ftn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LDC1); return 0; } //LDC2 case 0x36: { call(&CPU::COP2); return 1; } //LD Rt,Rs,i16 case 0x37: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LD); return 0; } //SC Rt,Rs,i16 case 0x38: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SC); return 0; } //SWC1 Ft,Rs,i16 case 0x39: { mov(ra1d, imm32(Ftn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWC1); return 0; } //SWC2 case 0x3a: { call(&CPU::COP2); return 1; } //SWC3 case 0x3b: { call(&CPU::COP3); return 1; } //SCD Rt,Rs,i16 case 0x3c: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SCD); return 0; } //SDC1 Ft,Rs,i16 case 0x3d: { mov(ra1d, imm32(Ftn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SDC1); return 0; } //SDC2 case 0x3e: { call(&CPU::COP2); return 1; } //SD Rt,Rs,i16 case 0x3f: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SD); return 0; } } return 0; } auto CPU::Recompiler::emitSPECIAL(u32 instruction) -> bool { switch(instruction & 0x3f) { //SLL Rd,Rt,Sa case 0x00: { mov(eax, Rt); shl(eax, imm8(Sa)); movsxd(rax, eax); mov(Rd, rax); return 0; } //INVALID case 0x01: { call(&CPU::INVALID); return 1; } //SRL Rd,Rt,Sa case 0x02: { mov(eax, Rt); shr(eax, imm8(Sa)); movsxd(rax, eax); mov(Rd, rax); return 0; } //SRA Rd,Rt,Sa case 0x03: { mov(eax, Rt); sar(eax, imm8(Sa)); movsxd(rax, eax); mov(Rd, rax); return 0; } //SLLV Rd,Rt,Rs case 0x04: { mov(eax, Rt); mov(cl, Rs); and(cl, imm8(31)); shl(eax, cl); movsxd(rax, eax); mov(Rd, rax); return 0; } //INVALID case 0x05: { call(&CPU::INVALID); return 1; } //SRLV Rd,Rt,RS case 0x06: { mov(eax, Rt); mov(cl, Rs); and(cl, imm8(31)); shr(eax, cl); movsxd(rax, eax); mov(Rd, rax); return 0; } //SRAV Rd,Rt,Rs case 0x07: { mov(eax, Rt); mov(cl, Rs); and(cl, imm8(31)); sar(eax, cl); movsxd(rax, eax); mov(Rd, rax); return 0; } //JR Rs case 0x08: { lea(ra1, Rs); call(&CPU::JR); return 1; } //JALR Rd,Rs case 0x09: { lea(ra1, Rd); lea(ra2, Rs); call(&CPU::JALR); return 1; } //INVALID case 0x0a ... 0x0b: { call(&CPU::INVALID); return 1; } //SYSCALL case 0x0c: { call(&CPU::SYSCALL); return 1; } //BREAK case 0x0d: { call(&CPU::BREAK); return 1; } //INVALID case 0x0e: { call(&CPU::INVALID); return 1; } //SYNC case 0x0f: { call(&CPU::SYNC); return 0; } //MFHI Rd case 0x10: { mov(rax, Hi); mov(Rd, rax); return 0; } //MTHI Rs case 0x11: { mov(rax, Rs); mov(Hi, rax); return 0; } //MFLO Rd case 0x12: { mov(rax, Lo); mov(Rd, rax); return 0; } //MTLO Rs case 0x13: { mov(rax, Rs); mov(Lo, rax); return 0; } //DSLLV Rd,Rt,Rs case 0x14: { lea(ra1, Rd); lea(ra2, Rt); lea(ra3, Rs); call(&CPU::DSLLV); return 0; } //INVALID case 0x15: { call(&CPU::INVALID); return 1; } //DSRLV Rd,Rt,Rs case 0x16: { lea(ra1, Rd); lea(ra2, Rt); lea(ra3, Rs); call(&CPU::DSRLV); return 0; } //DSRAV Rd,Rt,Rs case 0x17: { lea(ra1, Rd); lea(ra2, Rt); lea(ra3, Rs); call(&CPU::DSRAV); return 0; } //MULT Rs,Rt case 0x18: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::MULT); return 0; } //MULTU Rs,Rt case 0x19: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::MULTU); return 0; } //DIV Rs,Rt case 0x1a: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DIV); return 0; } //DIVU Rs,Rt case 0x1b: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DIVU); return 0; } //DMULT Rs,Rt case 0x1c: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DMULT); return 0; } //DMULTU Rs,Rt case 0x1d: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DMULTU); return 0; } //DDIV Rs,Rt case 0x1e: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DDIV); return 0; } //DDIVU Rs,Rt case 0x1f: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DDIVU); return 0; } //ADD Rd,Rs,Rt case 0x20: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::ADD); return 0; } //ADDU Rd,Rs,Rt case 0x21: { mov(eax, Rs); add(eax, Rt); movsxd(rax, eax); mov(Rd, rax); return 0; } //SUB Rd,Rs,Rt case 0x22: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::SUB); return 0; } //SUBU Rd,Rs,Rt case 0x23: { mov(eax, Rs); sub(eax, Rt); movsxd(rax, eax); mov(Rd, rax); return 0; } //AND Rd,Rs,Rt case 0x24: { mov(rax, Rs); and(rax, Rt); mov(Rd, rax); return 0; } //OR Rd,Rs,Rt case 0x25: { mov(rax, Rs); or(rax, Rt); mov(Rd, rax); return 0; } //XOR Rd,Rs,Rt case 0x26: { mov(rax, Rs); xor(rax, Rt); mov(Rd, rax); return 0; } //NOR Rd,Rs,Rt case 0x27: { mov(rax, Rs); or(rax, Rt); not(rax); mov(Rd, rax); return 0; } //INVALID case 0x28 ... 0x29: { call(&CPU::INVALID); return 1; } //SLT Rd,Rs,Rt case 0x2a: { mov(rax, Rs); cmp(rax, Rt); setl(al); movzx(eax, al); mov(Rd, rax); return 0; } //SLTU Rd,Rs,Rt case 0x2b: { mov(rax, Rs); cmp(rax, Rt); setb(al); movzx(eax, al); mov(Rd, rax); return 0; } //DADD Rd,Rs,Rt case 0x2c: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::DADD); return 0; } //DADDU Rd,Rs,Rt case 0x2d: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::DADDU); return 0; } //DSUB Rd,Rs,Rt case 0x2e: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::DSUB); return 0; } //DSUBU Rd,Rs,Rt case 0x2f: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::DSUBU); return 0; } //TGE Rs,Rt case 0x30: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::TGE); return 0; } //TGEU Rs,Rt case 0x31: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::TGEU); return 0; } //TLT Rs,Rt case 0x32: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::TLT); return 0; } //TLTU Rs,Rt case 0x33: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::TLTU); return 0; } //TEQ Rs,Rt case 0x34: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::TEQ); return 0; } //INVALID case 0x35: { call(&CPU::INVALID); return 1; } //TNE Rs,Rt case 0x36: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::TNE); return 0; } //INVALID case 0x37: { call(&CPU::INVALID); return 1; } //DSLL Rd,Rt,Sa case 0x38: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa)); call(&CPU::DSLL); return 0; } //INVALID case 0x39: { call(&CPU::INVALID); return 1; } //DSRL Rd,Rt,Sa case 0x3a: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa)); call(&CPU::DSRL); return 0; } //DSRA Rd,Rt,Sa case 0x3b: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa)); call(&CPU::DSRA); return 0; } //DSLL32 Rd,Rt,Sa case 0x3c: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa+32)); call(&CPU::DSLL); return 0; } //INVALID case 0x3d: { call(&CPU::INVALID); return 1; } //DSRL32 Rd,Rt,Sa case 0x3e: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa+32)); call(&CPU::DSRL); return 0; } //DSRA32 Rd,Rt,Sa case 0x3f: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa+32)); call(&CPU::DSRA); return 0; } } return 0; } auto CPU::Recompiler::emitREGIMM(u32 instruction) -> bool { switch(instruction >> 16 & 0x1f) { //BLTZ Rs,i16 case 0x00: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLTZ); return 0; } //BGEZ Rs,i16 case 0x01: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGEZ); return 0; } //BLTZL Rs,i16 case 0x02: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLTZL); return 0; } //BGEZL Rs,i16 case 0x03: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGEZL); return 0; } //INVALID case 0x04 ... 0x07: { call(&CPU::INVALID); return 1; } //TGEI Rs,i16 case 0x08: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::TGEI); return 0; } //TGEIU Rs,i16 case 0x09: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::TGEIU); return 0; } //TLTI Rs,i16 case 0x0a: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::TLTI); return 0; } //TLTIU Rs,i16 case 0x0b: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::TLTIU); return 0; } //TEQI Rs,i16 case 0x0c: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::TEQI); return 0; } //INVALID case 0x0d: { call(&CPU::INVALID); return 1; } //TNEI Rs,i16 case 0x0e: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::TNEI); return 0; } //INVALID case 0x0f: { call(&CPU::INVALID); return 1; } //BLTZAL Rs,i16 case 0x10: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLTZAL); return 0; } //BGEZAL Rs,i16 case 0x11: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGEZAL); return 0; } //BLTZALL Rs,i16 case 0x12: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLTZALL); return 0; } //BGEZALL Rs,i16 case 0x13: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGEZALL); return 0; } //INVALID case 0x14 ... 0x1f: { call(&CPU::INVALID); return 1; } } return 0; } auto CPU::Recompiler::emitSCC(u32 instruction) -> bool { switch(instruction >> 21 & 0x1f) { //MFC0 Rt,Rd case 0x00: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::MFC0); return 0; } //DMFC0 Rt,Rd case 0x01: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::DMFC0); return 0; } //INVALID case 0x02 ... 0x03: { call(&CPU::INVALID); return 1; } //MTC0 Rt,Rd case 0x04: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::MTC0); return 0; } //DMTC0 Rt,Rd case 0x05: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::DMTC0); return 0; } //INVALID case 0x06 ... 0x0f: { call(&CPU::INVALID); return 1; } } switch(instruction & 0x3f) { //TLBR case 0x01: { call(&CPU::TLBR); return 0; } //TLBWI case 0x02: { call(&CPU::TLBWI); return 0; } //TLBWR case 0x06: { call(&CPU::TLBWR); return 0; } //TLBP case 0x08: { call(&CPU::TLBP); return 0; } //ERET case 0x18: { call(&CPU::ERET); return 1; } } return 0; } auto CPU::Recompiler::emitFPU(u32 instruction) -> bool { switch(instruction >> 21 & 0x1f) { //MFC1 Rt,Fs case 0x00: { lea(ra1, Rt); mov(ra2d, imm32(Fsn)); call(&CPU::MFC1); return 0; } //DMFC1 Rt,Fs case 0x01: { lea(ra1, Rt); mov(ra2d, imm32(Fsn)); call(&CPU::DMFC1); return 0; } //CFC1 Rt,Rd case 0x02: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::CFC1); return 0; } //INVALID case 0x03: { call(&CPU::INVALID); return 1; } //MTC1 Rt,Fs case 0x04: { lea(ra1, Rt); mov(ra2d, imm32(Fsn)); call(&CPU::MTC1); return 0; } //DMTC1 Rt,Fs case 0x05: { lea(ra1, Rt); mov(ra2d, imm32(Fsn)); call(&CPU::DMTC1); return 0; } //CTC1 Rt,Rd case 0x06: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::CTC1); return 0; } //INVALID case 0x07: { call(&CPU::INVALID); return 1; } //BC1 offset case 0x08: { mov(ra1d, imm32(instruction >> 16 & 1)); mov(ra2d, imm32(instruction >> 17 & 1)); mov(ra3d, imm32(i16)); call(&CPU::BC1); return 1; } //INVALID case 0x09 ... 0x0f: { call(&CPU::INVALID); return 1; } } if((instruction >> 21 & 31) == 16) switch(instruction & 0x3f) { //FADD.S Fd,Fs,Ft case 0x00: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FADD_S); return 0; } //FSUB.S Fd,Fs,Ft case 0x01: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FSUB_S); return 0; } //FMUL.S Fd,Fs,Ft case 0x02: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FMUL_S); return 0; } //FDIV.S Fd,Fs,Ft case 0x03: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FDIV_S); return 0; } //FSQRT.S Fd,Fs case 0x04: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FSQRT_S); return 0; } //FABS.S Fd,Fs case 0x05: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FABS_S); return 0; } //FMOV.S Fd,Fs case 0x06: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FMOV_S); return 0; } //FNEG.S Fd,Fs case 0x07: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FNEG_S); return 0; } //FROUND.L.S Fd,Fs case 0x08: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FROUND_L_S); return 0; } //FTRUNC.L.S Fd,Fs case 0x09: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FTRUNC_L_S); return 0; } //FCEIL.L.S Fd,Fs case 0x0a: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCEIL_L_S); return 0; } //FFLOOR.L.S Fd,Fs case 0x0b: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FFLOOR_L_S); return 0; } //FROUND.W.S Fd,Fs case 0x0c: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FROUND_W_S); return 0; } //FTRUNC.W.S Fd,Fs case 0x0d: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FTRUNC_W_S); return 0; } //FCEIL.W.S Fd,Fs case 0x0e: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCEIL_W_S); return 0; } //FFLOOR.W.S Fd,Fs case 0x0f: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FFLOOR_W_S); return 0; } //FCVT.D.S Fd,Fs case 0x21: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_D_S); return 0; } //FCVT.W.S Fd,Fs case 0x24: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_W_S); return 0; } //FCVT.L.S Fd,Fs case 0x25: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_L_S); return 0; } //FC.F.S Fs,Ft case 0x30: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_F_S); return 0; } //FC.UN.S Fs,Ft case 0x31: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_UN_S); return 0; } //FC.EQ.S Fs,Ft case 0x32: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_EQ_S); return 0; } //FC.UEQ.S Fs,Ft case 0x33: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_UEQ_S); return 0; } //FC.OLT.S Fs,Ft case 0x34: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_OLT_S); return 0; } //FC.ULT.S Fs,Ft case 0x35: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_ULT_S); return 0; } //FC.OLE.S Fs,Ft case 0x36: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_OLE_S); return 0; } //FC.ULE.S Fs,Ft case 0x37: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_ULE_S); return 0; } //FC.SF.S Fs,Ft case 0x38: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_SF_S); return 0; } //FC.NGLE.S Fs,Ft case 0x39: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGLE_S); return 0; } //FC.SEQ.S Fs,Ft case 0x3a: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_SEQ_S); return 0; } //FC.NGL.S Fs,Ft case 0x3b: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGL_S); return 0; } //FC.LT.S Fs,Ft case 0x3c: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_LT_S); return 0; } //FC.NGE.S Fs,Ft case 0x3d: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGE_S); return 0; } //FC.LE.S Fs,Ft case 0x3e: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_LE_S); return 0; } //FC.NGT.S Fs,Ft case 0x3f: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGT_S); return 0; } } if((instruction >> 21 & 31) == 17) switch(instruction & 0x3f) { //FADD.D Fd,Fs,Ft case 0x00: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FADD_D); return 0; } //FSUB.D Fd,Fs,Ft case 0x01: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FSUB_D); return 0; } //FMUL.D Fd,Fs,Ft case 0x02: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FMUL_D); return 0; } //FDIV.D Fd,Fs,Ft case 0x03: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); mov(ra3d, imm32(Ftn)); call(&CPU::FDIV_D); return 0; } //FSQRT.D Fd,Fs case 0x04: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FSQRT_D); return 0; } //FABS.D Fd,Fs case 0x05: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FABS_D); return 0; } //FMOV.D Fd,Fs case 0x06: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FMOV_D); return 0; } //FNEG.D Fd,Fs case 0x07: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FNEG_D); return 0; } //FROUND.L.D Fd,Fs case 0x08: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FROUND_L_D); return 0; } //FTRUNC.L.D Fd,Fs case 0x09: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FTRUNC_L_D); return 0; } //FCEIL.L.D Fd,Fs case 0x0a: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCEIL_L_D); return 0; } //FFLOOR.L.D Fd,Fs case 0x0b: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FFLOOR_L_D); return 0; } //FROUND.W.D Fd,Fs case 0x0c: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FROUND_W_D); return 0; } //FTRUNC.W.D Fd,Fs case 0x0d: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FTRUNC_W_D); return 0; } //FCEIL.W.D Fd,Fs case 0x0e: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCEIL_W_D); return 0; } //FFLOOR.W.D Fd,Fs case 0x0f: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FFLOOR_W_D); return 0; } //FCVT.S.D Fd,Fs case 0x20: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_S_D); return 0; } //FCVT.W.D Fd,Fs case 0x24: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_W_D); return 0; } //FCVT.L.D Fd,Fs case 0x25: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_L_D); return 0; } //FC.F.D Fs,Ft case 0x30: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_F_D); return 0; } //FC.UN.D Fs,Ft case 0x31: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_UN_D); return 0; } //FC.EQ.D Fs,Ft case 0x32: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_EQ_D); return 0; } //FC.UEQ.D Fs,Ft case 0x33: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_UEQ_D); return 0; } //FC.OLT.D Fs,Ft case 0x34: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_OLT_D); return 0; } //FC.ULT.D Fs,Ft case 0x35: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_ULT_D); return 0; } //FC.OLE.D Fs,Ft case 0x36: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_OLE_D); return 0; } //FC.ULE.D Fs,Ft case 0x37: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_ULE_D); return 0; } //FC.SF.D Fs,Ft case 0x38: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_SF_D); return 0; } //FC.NGLE.D Fs,Ft case 0x39: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGLE_D); return 0; } //FC.SEQ.D Fs,Ft case 0x3a: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_SEQ_D); return 0; } //FC.NGL.D Fs,Ft case 0x3b: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGL_D); return 0; } //FC.LT.D Fs,Ft case 0x3c: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_LT_D); return 0; } //FC.NGE.D Fs,Ft case 0x3d: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGE_D); return 0; } //FC.LE.D Fs,Ft case 0x3e: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_LE_D); return 0; } //FC.NGT.D Fs,Ft case 0x3f: { mov(ra1d, imm32(Fsn)); mov(ra2d, imm32(Ftn)); call(&CPU::FC_NGT_D); return 0; } } if((instruction >> 21 & 31) == 20) switch(instruction & 0x3f) { //FCVT.S.W Fd,Fs case 0x20: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_S_W); return 0; } //FCVT.D.W Fd,Fs case 0x21: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_D_W); return 0; } } if((instruction >> 21 & 31) == 21) switch(instruction & 0x3f) { //FCVT.S.L case 0x20: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_S_L); return 0; } //FCVT.D.L case 0x21: { mov(ra1d, imm32(Fdn)); mov(ra2d, imm32(Fsn)); call(&CPU::FCVT_D_L); return 0; } } return 0; } #undef Sa #undef Rdn #undef Rtn #undef Rsn #undef Fdn #undef Fsn #undef Ftn #undef Rd #undef Rt #undef Rs #undef Lo #undef Hi #undef Fd #undef Fs #undef Ft #undef i16 #undef n16 #undef n26 template auto CPU::Recompiler::call(V (CPU::*function)(P...)) -> void { static_assert(sizeof...(P) <= 5); if constexpr(ABI::Windows) { if constexpr(sizeof...(P) >= 5) mov(dis8(rsp, 0x28), ra5); if constexpr(sizeof...(P) >= 4) mov(dis8(rsp, 0x20), ra4); } mov(ra0, rbp); call(imm64{function}, rax); } ares-126/ares/n64/cpu/serialization.cpp000066400000000000000000000071041415063341600200340ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { Thread::serialize(s); s(pipeline.address); s(pipeline.instruction); s(branch.pc); s(branch.state); s(context.endian); s(context.mode); s(context.bits); s(context.segment); for(auto& line : icache.lines) { s(line.valid); s(line.tag); s(line.index); s(line.words); } for(auto& line : dcache.lines) { s(line.valid); s(line.dirty); s(line.tag); s(line.index); s(line.words); } for(auto& e : tlb.entry) { s(e.global); s(e.valid); s(e.dirty); s(e.cacheAlgorithm); s(e.physicalAddress); s(e.pageMask); s(e.virtualAddress); s(e.addressSpaceID); s(e.region); s(e.globals); s(e.addressMaskHi); s(e.addressMaskLo); s(e.addressSelect); s(e.addressCompare); } s(tlb.physicalAddress); for(auto& r : ipu.r) s(r.u64); s(ipu.lo.u64); s(ipu.hi.u64); s(ipu.pc); s(scc.index.tlbEntry); s(scc.index.probeFailure); s(scc.random.index); s(scc.random.unused); s(scc.tlb.global); s(scc.tlb.valid); s(scc.tlb.dirty); s(scc.tlb.cacheAlgorithm); s(scc.tlb.physicalAddress); s(scc.tlb.pageMask); s(scc.tlb.virtualAddress); s(scc.tlb.addressSpaceID); s(scc.tlb.region); s(scc.tlb.globals); s(scc.tlb.addressMaskHi); s(scc.tlb.addressMaskLo); s(scc.tlb.addressSelect); s(scc.tlb.addressCompare); s(scc.context.badVirtualAddress); s(scc.context.pageTableEntryBase); s(scc.wired.index); s(scc.wired.unused); s(scc.badVirtualAddress); s(scc.count); s(scc.compare); s(scc.status.interruptEnable); s(scc.status.exceptionLevel); s(scc.status.errorLevel); s(scc.status.privilegeMode); s(scc.status.userExtendedAddressing); s(scc.status.kernelExtendedAddressing); s(scc.status.interruptMask); s(scc.status.de); s(scc.status.ce); s(scc.status.condition); s(scc.status.softReset); s(scc.status.tlbShutdown); s(scc.status.vectorLocation); s(scc.status.instructionTracing); s(scc.status.reverseEndian); s(scc.status.floatingPointMode); s(scc.status.lowPowerMode); s(scc.status.enable.coprocessor0); s(scc.status.enable.coprocessor1); s(scc.status.enable.coprocessor2); s(scc.status.enable.coprocessor3); s(scc.cause.exceptionCode); s(scc.cause.interruptPending); s(scc.cause.coprocessorError); s(scc.cause.branchDelay); s(scc.epc); s(scc.configuration.coherencyAlgorithmKSEG0); s(scc.configuration.cu); s(scc.configuration.bigEndian); s(scc.configuration.sysadWritebackPattern); s(scc.configuration.systemClockRatio); s(scc.ll); s(scc.llbit); s(scc.watchLo.trapOnWrite); s(scc.watchLo.trapOnRead); s(scc.watchLo.physicalAddress); s(scc.watchHi.physicalAddressExtended); s(scc.xcontext.badVirtualAddress); s(scc.xcontext.region); s(scc.xcontext.pageTableEntryBase); s(scc.parityError.diagnostic); s(scc.tagLo.primaryCacheState); s(scc.tagLo.physicalAddress); s(scc.epcError); for(auto& r : fpu.r) s(r.u64); s(fpu.csr.roundMode); s(fpu.csr.flag.inexact); s(fpu.csr.flag.underflow); s(fpu.csr.flag.overflow); s(fpu.csr.flag.divisionByZero); s(fpu.csr.flag.invalidOperation); s(fpu.csr.enable.inexact); s(fpu.csr.enable.underflow); s(fpu.csr.enable.overflow); s(fpu.csr.enable.divisionByZero); s(fpu.csr.enable.invalidOperation); s(fpu.csr.cause.inexact); s(fpu.csr.cause.underflow); s(fpu.csr.cause.overflow); s(fpu.csr.cause.divisionByZero); s(fpu.csr.cause.invalidOperation); s(fpu.csr.cause.unimplementedOperation); s(fpu.csr.compare); s(fpu.csr.flushed); if constexpr(Accuracy::CPU::Recompiler) { recompiler.reset(); } } ares-126/ares/n64/cpu/tlb.cpp000066400000000000000000000044551415063341600157460ustar00rootroot00000000000000//the N64 TLB is 32-bit only: only the 64-bit XTLB exception vector is used. auto CPU::TLB::load(u32 address) -> Match { for(auto& entry : this->entry) { if(!entry.globals || entry.addressSpaceID != self.scc.tlb.addressSpaceID) continue; if((address & entry.addressMaskHi) != (u32)entry.addressCompare) continue; bool lo = address & entry.addressSelect; if(!entry.valid[lo]) { exception(address); self.debugger.tlbLoadInvalid(address); self.exception.tlbLoadInvalid(); return {false}; } physicalAddress = entry.physicalAddress[lo] + (address & entry.addressMaskLo); self.debugger.tlbLoad(address, physicalAddress); return {true, entry.cacheAlgorithm[lo] != 2, physicalAddress}; } exception(address); self.debugger.tlbLoadMiss(address); self.exception.tlbLoadMiss(); return {false}; } auto CPU::TLB::store(u32 address) -> Match { for(auto& entry : this->entry) { if(!entry.globals || entry.addressSpaceID != self.scc.tlb.addressSpaceID) continue; if((address & entry.addressMaskHi) != (u32)entry.addressCompare) continue; bool lo = address & entry.addressSelect; if(!entry.valid[lo]) { exception(address); self.debugger.tlbStoreInvalid(address); self.exception.tlbStoreInvalid(); return {false}; } if(!entry.dirty[lo]) { exception(address); self.debugger.tlbModification(address); self.exception.tlbModification(); return {false}; } physicalAddress = entry.physicalAddress[lo] + (address & entry.addressMaskLo); self.debugger.tlbStore(address, physicalAddress); return {true, entry.cacheAlgorithm[lo] != 2, physicalAddress}; } exception(address); self.debugger.tlbStoreMiss(address); self.exception.tlbStoreMiss(); return {false}; } auto CPU::TLB::exception(u32 address) -> void { self.scc.badVirtualAddress = address; self.scc.tlb.virtualAddress.bit(13,39) = address >> 13; self.scc.context.badVirtualAddress = address >> 13; self.scc.xcontext.badVirtualAddress = address >> 13; self.scc.xcontext.region = 0; } auto CPU::TLB::Entry::synchronize() -> void { globals = global[0] && global[1]; addressMaskHi = ~(pageMask | 0x1fff); addressMaskLo = (pageMask | 0x1fff) >> 1; addressSelect = addressMaskLo + 1; addressCompare = virtualAddress & addressMaskHi; } ares-126/ares/n64/dd/000077500000000000000000000000001415063341600142515ustar00rootroot00000000000000ares-126/ares/n64/dd/dd.cpp000066400000000000000000000012751415063341600153510ustar00rootroot00000000000000#include namespace ares::Nintendo64 { DD dd; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto DD::load(Node::Object parent) -> void { node = parent->append("Disk Drive"); iplrom.allocate(4_MiB); c2s.allocate(0x400); ds.allocate(0x100); ms.allocate(0x40); if(node->setPak(pak = platform->pak(node))) { if(auto fp = pak->read("64dd.ipl.rom")) { iplrom.load(fp); } } debugger.load(node); } auto DD::unload() -> void { debugger = {}; iplrom.reset(); c2s.reset(); ds.reset(); ms.reset(); pak.reset(); node.reset(); } auto DD::power(bool reset) -> void { c2s.fill(); ds.fill(); ms.fill(); } } ares-126/ares/n64/dd/dd.hpp000066400000000000000000000012611415063341600153510ustar00rootroot00000000000000//Disk Drive struct DD : Memory::IO

{ Node::Object node; VFS::Pak pak; Memory::Readable iplrom; Memory::Writable c2s; Memory::Writable ds; Memory::Writable ms; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //dd.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; }; extern DD dd; ares-126/ares/n64/dd/debugger.cpp000066400000000000000000000020121415063341600165340ustar00rootroot00000000000000auto DD::Debugger::load(Node::Object parent) -> void { tracer.io = parent->append("I/O", "DD"); } auto DD::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "ASIC_DATA", "ASIC_MISC_REG", "ASIC_STATUS|ASIC_CMD", "ASIC_CUR_TK", "ASIC_BM_STATUS|ASIC_BM_CTL", "ASIC_ERR_SECTOR", "ASIC_SEQ_STATUS|ASIC_SEQ_CTL", "ASIC_CUR_SECTOR", "ASIC_HARD_RESET", "ASIC_C1_S0", "ASIC_HOST_SECBYE", "ASIC_C1_S2", "ASIC_SEC_BYTE", "ASIC_C1_S4", "ASIC_C1_S6", "ASIC_CUR_ADDRESS", "ASIC_ID_REG", "ASIC_TEST_REG", "ASIC_TEST_PIN_SEL", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "ASIC_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/dd/io.cpp000066400000000000000000000037661415063341600154000ustar00rootroot00000000000000auto DD::readWord(u32 address) -> u32 { address = (address & 0x7f) >> 2; n32 data; //ASIC_DATA if(address == 0) { } //ASIC_MISC_REG if(address == 1) { } //ASIC_STATUS if(address == 2) { //required to indicate the 64DD is missing data = 0xffff'ffff; } //ASIC_CUR_TK if(address == 3) { } //ASIC_BM_STATUS if(address == 4) { } //ASIC_ERR_SECTOR if(address == 5) { } //ASIC_SEQ_STATUS if(address == 6) { } //ASIC_CUR_SECTOR if(address == 7) { } //ASIC_HARD_RESET if(address == 8) { } //ASIC_C1_S0 if(address == 9) { } //ASIC_HOST_SECBYTE if(address == 10) { } //ASIC_C1_S2 if(address == 11) { } //ASIC_SEC_BYTE if(address == 12) { } //ASIC_C1_S4 if(address == 13) { } //ASIC_C1_S6 if(address == 14) { } //ASIC_CUR_ADDRESS if(address == 15) { } //ASIC_ID_REG if(address == 16) { } //ASIC_TEST_REG if(address == 17) { } //ASIC_TEST_PIN_SEL if(address == 18) { } debugger.io(Read, address, data); return data; } auto DD::writeWord(u32 address, u32 data_) -> void { address = (address & 0x7f) >> 2; n32 data = data_; //ASIC_DATA if(address == 0) { } //ASIC_MISC_REG if(address == 1) { } //ASIC_CMD if(address == 2) { } //ASIC_CUR_TK if(address == 3) { } //ASIC_BM_CTL if(address == 4) { } //ASIC_ERR_SECTOR if(address == 5) { } //ASIC_SEQ_CTL if(address == 6) { } //ASIC_CUR_SECTOR if(address == 7) { } //ASIC_HARD_RESET if(address == 8) { } //ASIC_C1_S0 if(address == 9) { } //ASIC_HOST_SECBYTE if(address == 10) { } //ASIC_C1_S2 if(address == 11) { } //ASIC_SEC_BYTE if(address == 12) { } //ASIC_C1_S4 if(address == 13) { } //ASIC_C1_S6 if(address == 14) { } //ASIC_CUR_ADDRESS if(address == 15) { } //ASIC_ID_REG if(address == 16) { } //ASIC_TEST_REG if(address == 17) { } //ASIC_TEST_PIN_SEL if(address == 18) { } debugger.io(Write, address, data); } ares-126/ares/n64/dd/serialization.cpp000066400000000000000000000000561415063341600176330ustar00rootroot00000000000000auto DD::serialize(serializer& s) -> void { } ares-126/ares/n64/memory/000077500000000000000000000000001415063341600151725ustar00rootroot00000000000000ares-126/ares/n64/memory/bus.hpp000066400000000000000000000106461415063341600165030ustar00rootroot00000000000000template inline auto Bus::read(u32 address) -> u64 { static constexpr u64 unmapped = 0; address &= 0x1fff'ffff - (Size - 1); if(address <= 0x007f'ffff) return rdram.ram.read(address); if(address <= 0x03ef'ffff) return unmapped; if(address <= 0x03ff'ffff) return rdram.read(address); if(address <= 0x0400'0fff) return rsp.dmem.read(address); if(address <= 0x0400'1fff) return rsp.imem.read(address); if(address <= 0x0403'ffff) return unmapped; if(address <= 0x0407'ffff) return rsp.read(address); if(address <= 0x040f'ffff) return rsp.status.read(address); if(address <= 0x041f'ffff) return rdp.read(address); if(address <= 0x042f'ffff) return rdp.io.read(address); if(address <= 0x043f'ffff) return mi.read(address); if(address <= 0x044f'ffff) return vi.read(address); if(address <= 0x045f'ffff) return ai.read(address); if(address <= 0x046f'ffff) return pi.read(address); if(address <= 0x047f'ffff) return ri.read(address); if(address <= 0x048f'ffff) return si.read(address); if(address <= 0x04ff'ffff) return unmapped; if(address <= 0x0500'03ff) return dd.c2s.read(address); if(address <= 0x0500'04ff) return dd.ds.read(address); if(address <= 0x0500'057f) return dd.read(address); if(address <= 0x0500'05bf) return dd.ms.read(address); if(address <= 0x05ff'ffff) return unmapped; if(address <= 0x063f'ffff) return dd.iplrom.read(address); if(address <= 0x07ff'ffff) return unmapped; if(address <= 0x0fff'ffff) { if(cartridge.ram ) return cartridge.ram.read(address); if(cartridge.flash) return cartridge.flash.read(address); return unmapped; } if(address <= 0x1fbf'ffff) { if(address >= 0x13ff'0000 && address <= 0x13ff'ffff) { return cartridge.isviewer.read(address); } return cartridge.rom.read(address); } if(address <= 0x1fc0'07bf) { if(pi.io.romLockout) return unmapped; return pi.rom.read(address); } if(address <= 0x1fc0'07ff) return pi.ram.read(address); return unmapped; } template inline auto Bus::write(u32 address, u64 data) -> void { address &= 0x1fff'ffff - (Size - 1); cpu.recompiler.invalidate(address + 0); if constexpr(Size == Dual) cpu.recompiler.invalidate(address + 4); if(address <= 0x007f'ffff) return rdram.ram.write(address, data); if(address <= 0x03ef'ffff) return; if(address <= 0x03ff'ffff) return rdram.write(address, data); if(address <= 0x0400'0fff) return rsp.dmem.write(address, data); if(address <= 0x0400'1fff) return rsp.recompiler.invalidate(), rsp.imem.write(address, data); if(address <= 0x0403'ffff) return; if(address <= 0x0407'ffff) return rsp.write(address, data); if(address <= 0x040f'ffff) return rsp.status.write(address, data); if(address <= 0x041f'ffff) return rdp.write(address, data); if(address <= 0x042f'ffff) return rdp.io.write(address, data); if(address <= 0x043f'ffff) return mi.write(address, data); if(address <= 0x044f'ffff) return vi.write(address, data); if(address <= 0x045f'ffff) return ai.write(address, data); if(address <= 0x046f'ffff) return pi.write(address, data); if(address <= 0x047f'ffff) return ri.write(address, data); if(address <= 0x048f'ffff) return si.write(address, data); if(address <= 0x04ff'ffff) return; if(address <= 0x0500'03ff) return dd.c2s.write(address, data); if(address <= 0x0500'04ff) return dd.ds.write(address, data); if(address <= 0x0500'057f) return dd.write(address, data); if(address <= 0x0500'05bf) return dd.ms.write(address, data); if(address <= 0x05ff'ffff) return; if(address <= 0x063f'ffff) return dd.iplrom.write(address, data); if(address <= 0x07ff'ffff) return; if(address <= 0x0fff'ffff) { if(cartridge.ram ) return cartridge.ram.write(address, data); if(cartridge.flash) return cartridge.flash.write(address, data); return; } if(address <= 0x1fbf'ffff) { if(address >= 0x13ff'0000 && address <= 0x13ff'ffff) { cartridge.isviewer.write(address, data); } return cartridge.rom.write(address, data); } if(address <= 0x1fc0'07bf) { if(pi.io.romLockout) return; return pi.rom.write(address, data); } if(address <= 0x1fc0'07ff) return pi.ram.write(address, data); return; } ares-126/ares/n64/memory/io.hpp000066400000000000000000000031371415063341600163160ustar00rootroot00000000000000template struct IO { template auto read(u32 address) -> u64 { if constexpr(Size == Byte) { auto data = ((T*)this)->readWord(address); switch(address & 3) { case 0: return data >> 24; case 1: return data >> 16; case 2: return data >> 8; case 3: return data >> 0; } } if constexpr(Size == Half) { auto data = ((T*)this)->readWord(address); switch(address & 2) { case 0: return data >> 16; case 2: return data >> 0; } } if constexpr(Size == Word) { return ((T*)this)->readWord(address); } if constexpr(Size == Dual) { u64 data = ((T*)this)->readWord(address); return data << 32 | ((T*)this)->readWord(address + 4); } unreachable; } template auto write(u32 address, u64 data) -> void { if constexpr(Size == Byte) { switch(address & 3) { case 0: return ((T*)this)->writeWord(address, data << 24); case 1: return ((T*)this)->writeWord(address, data << 16); case 2: return ((T*)this)->writeWord(address, data << 8); case 3: return ((T*)this)->writeWord(address, data << 0); } } if constexpr(Size == Half) { switch(address & 2) { case 0: return ((T*)this)->writeWord(address, data << 16); case 2: return ((T*)this)->writeWord(address, data << 0); } } if constexpr(Size == Word) { ((T*)this)->writeWord(address, data); } if constexpr(Size == Dual) { ((T*)this)->writeWord(address + 0, data >> 32); ((T*)this)->writeWord(address + 4, data >> 0); } } }; ares-126/ares/n64/memory/lsb/000077500000000000000000000000001415063341600157525ustar00rootroot00000000000000ares-126/ares/n64/memory/lsb/readable.hpp000066400000000000000000000052021415063341600202210ustar00rootroot00000000000000struct Readable { explicit operator bool() const { return size > 0; } auto reset() -> void { memory::free(data); data = nullptr; size = 0; maskByte = 0; maskHalf = 0; maskWord = 0; maskDual = 0; } auto allocate(u32 capacity, u32 fillWith = ~0) -> void { reset(); size = capacity & ~7; u32 mask = bit::round(size) - 1; maskByte = mask & ~0; maskHalf = mask & ~1; maskWord = mask & ~3; maskDual = mask & ~7; data = memory::allocate(mask + 1); fill(fillWith); } auto fill(u32 value = 0) -> void { for(u32 address = 0; address < size; address += 4) { *(u32*)&data[address & maskWord] = value; } } auto load(VFS::File fp) -> void { if(!size) allocate(fp->size()); for(u32 address = 0; address < min(size, fp->size()); address += 4) { *(u32*)&data[address & maskWord] = fp->readm(4L); } } auto save(VFS::File fp) -> void { for(u32 address = 0; address < min(size, fp->size()); address += 4) { fp->writem(*(u32*)&data[address & maskWord], 4L); } } template auto read(u32 address) -> u64 { if constexpr(Size == Byte) return *(u8* )&data[address & maskByte ^ 3]; if constexpr(Size == Half) return *(u16*)&data[address & maskHalf ^ 2]; if constexpr(Size == Word) return *(u32*)&data[address & maskWord ^ 0]; if constexpr(Size == Dual) { u64 upper = read(address + 0); u64 lower = read(address + 4); return upper << 32 | lower << 0; } unreachable; } template auto write(u32 address, u64 value) -> void { } template auto readUnaligned(u32 address) -> u64 { static_assert(Size == Half || Size == Word || Size == Dual); if constexpr(Size == Half) { u16 upper = read(address + 0); u16 lower = read(address + 1); return upper << 8 | lower << 0; } if constexpr(Size == Word) { u32 upper = readUnaligned(address + 0); u32 lower = readUnaligned(address + 2); return upper << 16 | lower << 0; } if constexpr(Size == Dual) { u64 upper = readUnaligned(address + 0); u64 lower = readUnaligned(address + 4); return upper << 32 | lower << 0; } unreachable; } template auto writeUnaligned(u32 address, u64 value) -> void { static_assert(Size == Half || Size == Word || Size == Dual); } auto serialize(serializer& s) -> void { //s(array_span{data, size}); } //private: u8* data = nullptr; u32 size = 0; u32 maskByte = 0; u32 maskHalf = 0; u32 maskWord = 0; u32 maskDual = 0; }; ares-126/ares/n64/memory/lsb/writable.hpp000066400000000000000000000066171415063341600203060ustar00rootroot00000000000000struct Writable { explicit operator bool() const { return size > 0; } auto reset() -> void { memory::free(data); data = nullptr; size = 0; maskByte = 0; maskHalf = 0; maskWord = 0; maskDual = 0; } auto allocate(u32 capacity, u32 fillWith = ~0) -> void { reset(); size = capacity & ~7; u32 mask = bit::round(size) - 1; maskByte = mask & ~0; maskHalf = mask & ~1; maskWord = mask & ~3; maskDual = mask & ~7; data = memory::allocate(mask + 1); fill(fillWith); } auto fill(u32 value = 0) -> void { for(u32 address = 0; address < size; address += 4) { *(u32*)&data[address & maskWord] = value; } } auto load(VFS::File fp) -> void { if(!size) allocate(fp->size()); for(u32 address = 0; address < min(size, fp->size()); address += 4) { *(u32*)&data[address & maskWord] = fp->readm(4L); } } auto save(VFS::File fp) -> void { for(u32 address = 0; address < min(size, fp->size()); address += 4) { fp->writem(*(u32*)&data[address & maskWord], 4L); } } template auto read(u32 address) -> u64 { if constexpr(Size == Byte) return *(u8* )&data[address & maskByte ^ 3]; if constexpr(Size == Half) return *(u16*)&data[address & maskHalf ^ 2]; if constexpr(Size == Word) return *(u32*)&data[address & maskWord ^ 0]; if constexpr(Size == Dual) { u64 upper = read(address + 0); u64 lower = read(address + 4); return upper << 32 | lower << 0; } unreachable; } template auto write(u32 address, u64 value) -> void { if constexpr(Size == Byte) *(u8* )&data[address & maskByte ^ 3] = value; if constexpr(Size == Half) *(u16*)&data[address & maskHalf ^ 2] = value; if constexpr(Size == Word) *(u32*)&data[address & maskWord ^ 0] = value; if constexpr(Size == Dual) { write(address + 0, value >> 32); write(address + 4, value >> 0); } } template auto readUnaligned(u32 address) -> u64 { static_assert(Size == Half || Size == Word || Size == Dual); if constexpr(Size == Half) { u16 upper = read(address + 0); u16 lower = read(address + 1); return upper << 8 | lower << 0; } if constexpr(Size == Word) { u32 upper = readUnaligned(address + 0); u32 lower = readUnaligned(address + 2); return upper << 16 | lower << 0; } if constexpr(Size == Dual) { u64 upper = readUnaligned(address + 0); u64 lower = readUnaligned(address + 4); return upper << 32 | lower << 0; } unreachable; } template auto writeUnaligned(u32 address, u64 value) -> void { static_assert(Size == Half || Size == Word || Size == Dual); if constexpr(Size == Half) { write(address + 0, value >> 8); write(address + 1, value >> 0); } if constexpr(Size == Word) { writeUnaligned(address + 0, value >> 16); writeUnaligned(address + 2, value >> 0); } if constexpr(Size == Dual) { writeUnaligned(address + 0, value >> 32); writeUnaligned(address + 4, value >> 0); } } auto serialize(serializer& s) -> void { s(array_span{data, size}); } //private: u8* data = nullptr; u32 size = 0; u32 maskByte = 0; u32 maskHalf = 0; u32 maskWord = 0; u32 maskDual = 0; }; ares-126/ares/n64/memory/memory.cpp000066400000000000000000000001021415063341600171770ustar00rootroot00000000000000#include namespace ares::Nintendo64 { Bus bus; } ares-126/ares/n64/memory/memory.hpp000066400000000000000000000004071415063341600172140ustar00rootroot00000000000000namespace Memory { #include "lsb/readable.hpp" #include "lsb/writable.hpp" #include "io.hpp" } struct Bus { //bus.hpp template auto read(u32 address) -> u64; template auto write(u32 address, u64 data) -> void; }; extern Bus bus; ares-126/ares/n64/memory/msb/000077500000000000000000000000001415063341600157535ustar00rootroot00000000000000ares-126/ares/n64/memory/msb/readable.hpp000066400000000000000000000044751415063341600202350ustar00rootroot00000000000000struct Readable { explicit operator bool() const { return size > 0; } auto reset() -> void { memory::free(data); data = nullptr; size = 0; maskByte = 0; maskHalf = 0; maskWord = 0; maskDual = 0; } auto allocate(u32 capacity, u32 fillWith = ~0) -> void { reset(); size = capacity & ~7; u32 mask = bit::round(size) - 1; maskByte = mask & ~0; maskHalf = mask & ~1; maskWord = mask & ~3; maskDual = mask & ~7; data = memory::allocate(mask + 1); fill(fillWith); } auto fill(u32 value = 0) -> void { for(u32 address = 0; address < size; address += 4) { *(u32*)&data[address & maskWord] = bswap32(value); } } auto load(VFS::File fp) -> void { if(!size) allocate(fp->size()); for(u32 address = 0; address < min(size, fp->size()); address += 4) { *(u32*)&data[address & maskWord] = bswap32(fp->readm(4L)); } } auto save(VFS::File fp) -> void { for(u32 address = 0; address < min(size, fp->size()); address += 4) { fp->writem(bswap32(*(u32*)&data[address & maskWord]), 4L); } } template auto read(u32 address) -> u64 { if constexpr(Size == Byte) return (*(u8* )&data[address & maskByte]); if constexpr(Size == Half) return bswap16(*(u16*)&data[address & maskHalf]); if constexpr(Size == Word) return bswap32(*(u32*)&data[address & maskWord]); if constexpr(Size == Dual) return bswap64(*(u64*)&data[address & maskDual]); unreachable; } template auto write(u32 address, u64 value) -> void { } template auto readUnaligned(u32 address) -> u64 { static_assert(Size == Half || Size == Word || Size == Dual); if constexpr(Size == Half) return bswap16(*(u16*)&data[address & maskByte]); if constexpr(Size == Word) return bswap32(*(u32*)&data[address & maskByte]); if constexpr(Size == Dual) return bswap64(*(u64*)&data[address & maskByte]); unreachable; } template auto writeUnaligned(u32 address, u64 value) -> void { static_assert(Size == Half || Size == Word || Size == Dual); } auto serialize(serializer& s) -> void { //s(array_span{data, size}); } //private: u8* data = nullptr; u32 size = 0; u32 maskByte = 0; u32 maskHalf = 0; u32 maskWord = 0; u32 maskDual = 0; }; ares-126/ares/n64/memory/msb/writable.hpp000066400000000000000000000055721415063341600203060ustar00rootroot00000000000000struct Writable { explicit operator bool() const { return size > 0; } auto reset() -> void { memory::free(data); data = nullptr; size = 0; maskByte = 0; maskHalf = 0; maskWord = 0; maskDual = 0; } auto allocate(u32 capacity, u32 fillWith = ~0) -> void { reset(); size = capacity & ~7; u32 mask = bit::round(size) - 1; maskByte = mask & ~0; maskHalf = mask & ~1; maskWord = mask & ~3; maskDual = mask & ~7; data = memory::allocate(mask + 1); fill(fillWith); } auto fill(u32 value = 0) -> void { for(u32 address = 0; address < size; address += 4) { *(u32*)&data[address & maskWord] = bswap32(value); } } auto load(VFS::File fp) -> void { if(!size) allocate(fp->size()); for(u32 address = 0; address < min(size, fp->size()); address += 4) { *(u32*)&data[address & maskWord] = bswap32(fp->readm(4L)); } } auto save(VFS::File fp) -> void { for(u32 address = 0; address < min(size, fp->size()); address += 4) { fp->writem(bswap32(*(u32*)&data[address & maskWord]), 4L); } } template auto read(u32 address) -> u64 { if constexpr(Size == Byte) return (*(u8* )&data[address & maskByte]); if constexpr(Size == Half) return bswap16(*(u16*)&data[address & maskHalf]); if constexpr(Size == Word) return bswap32(*(u32*)&data[address & maskWord]); if constexpr(Size == Dual) return bswap64(*(u64*)&data[address & maskDual]); unreachable; } template auto write(u32 address, u64 value) -> void { if constexpr(Size == Byte) *(u8* )&data[address & maskByte] = (value); if constexpr(Size == Half) *(u16*)&data[address & maskHalf] = bswap16(value); if constexpr(Size == Word) *(u32*)&data[address & maskWord] = bswap32(value); if constexpr(Size == Dual) *(u64*)&data[address & maskDual] = bswap64(value); } template auto readUnaligned(u32 address) -> u64 { static_assert(Size == Half || Size == Word || Size == Dual); if constexpr(Size == Half) return bswap16(*(u16*)&data[address & maskByte]); if constexpr(Size == Word) return bswap32(*(u32*)&data[address & maskByte]); if constexpr(Size == Dual) return bswap64(*(u64*)&data[address & maskByte]); unreachable; } template auto writeUnaligned(u32 address, u64 value) -> void { static_assert(Size == Half || Size == Word || Size == Dual); if constexpr(Size == Half) *(u16*)&data[address & maskByte] = bswap16(value); if constexpr(Size == Word) *(u32*)&data[address & maskByte] = bswap32(value); if constexpr(Size == Dual) *(u64*)&data[address & maskByte] = bswap64(value); } auto serialize(serializer& s) -> void { s(array_span{data, size}); } //private: u8* data = nullptr; u32 size = 0; u32 maskByte = 0; u32 maskHalf = 0; u32 maskWord = 0; u32 maskDual = 0; }; ares-126/ares/n64/mi/000077500000000000000000000000001415063341600142675ustar00rootroot00000000000000ares-126/ares/n64/mi/debugger.cpp000066400000000000000000000023121415063341600165550ustar00rootroot00000000000000auto MI::Debugger::load(Node::Object parent) -> void { tracer.interrupt = parent->append("Interrupt", "RCP"); tracer.io = parent->append("I/O", "MI"); } auto MI::Debugger::interrupt(u8 source) -> void { if(unlikely(tracer.interrupt->enabled())) { string type = "unknown"; if(source == (u32)MI::IRQ::SP) type = "SP"; if(source == (u32)MI::IRQ::SI) type = "SI"; if(source == (u32)MI::IRQ::AI) type = "AI"; if(source == (u32)MI::IRQ::VI) type = "VI"; if(source == (u32)MI::IRQ::PI) type = "PI"; if(source == (u32)MI::IRQ::DP) type = "DP"; tracer.interrupt->notify(type); } } auto MI::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "MI_INIT_MODE", "MI_VERSION", "MI_INTR", "MI_INTR_MASK", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "MI_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/mi/io.cpp000066400000000000000000000044201415063341600154020ustar00rootroot00000000000000auto MI::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address == 0) { //MI_INIT_MODE data.bit(0,6) = io.initializeLength; data.bit(7) = io.initializeMode; data.bit(8) = io.ebusTestMode; data.bit(9) = io.rdramRegisterSelect; } if(address == 1) { //MI_VERSION data.byte(0) = revision.io; data.byte(1) = revision.rac; data.byte(2) = revision.rdp; data.byte(3) = revision.rsp; } if(address == 2) { //MI_INTR data.bit(0) = irq.sp.line; data.bit(1) = irq.si.line; data.bit(2) = irq.ai.line; data.bit(3) = irq.vi.line; data.bit(4) = irq.pi.line; data.bit(5) = irq.dp.line; } if(address == 3) { //MI_INTR_MASK data.bit(0) = irq.sp.mask; data.bit(1) = irq.si.mask; data.bit(2) = irq.ai.mask; data.bit(3) = irq.vi.mask; data.bit(4) = irq.pi.mask; data.bit(5) = irq.dp.mask; } debugger.io(Read, address, data); return data; } auto MI::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; if(address == 0) { //MI_INIT_MODE io.initializeLength = data.bit(0,6); if(data.bit( 7)) io.initializeMode = 0; if(data.bit( 8)) io.initializeMode = 1; if(data.bit( 9)) io.ebusTestMode = 0; if(data.bit(10)) io.ebusTestMode = 1; if(data.bit(11)) mi.lower(MI::IRQ::DP); if(data.bit(12)) io.rdramRegisterSelect = 0; if(data.bit(13)) io.rdramRegisterSelect = 1; if(io.initializeMode) debug(unimplemented, "[MI::writeWord] initializeMode=1"); if(io.ebusTestMode ) debug(unimplemented, "[MI::writeWord] ebusTestMode=1"); } if(address == 1) { //MI_VERSION (read-only) } if(address == 2) { //MI_INTR (read-only) } if(address == 3) { //MI_INTR_MASK if(data.bit( 0)) irq.sp.mask = 0; if(data.bit( 1)) irq.sp.mask = 1; if(data.bit( 2)) irq.si.mask = 0; if(data.bit( 3)) irq.si.mask = 1; if(data.bit( 4)) irq.ai.mask = 0; if(data.bit( 5)) irq.ai.mask = 1; if(data.bit( 6)) irq.vi.mask = 0; if(data.bit( 7)) irq.vi.mask = 1; if(data.bit( 8)) irq.pi.mask = 0; if(data.bit( 9)) irq.pi.mask = 1; if(data.bit(10)) irq.dp.mask = 0; if(data.bit(11)) irq.dp.mask = 1; poll(); } debugger.io(Write, address, data); } ares-126/ares/n64/mi/mi.cpp000066400000000000000000000025141415063341600154020ustar00rootroot00000000000000#include namespace ares::Nintendo64 { MI mi; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto MI::load(Node::Object parent) -> void { node = parent->append("MI"); debugger.load(node); } auto MI::unload() -> void { node.reset(); debugger = {}; } auto MI::raise(IRQ source) -> void { debugger.interrupt((u32)source); switch(source) { case IRQ::SP: irq.sp.line = 1; break; case IRQ::SI: irq.si.line = 1; break; case IRQ::AI: irq.ai.line = 1; break; case IRQ::VI: irq.vi.line = 1; break; case IRQ::PI: irq.pi.line = 1; break; case IRQ::DP: irq.dp.line = 1; break; } poll(); } auto MI::lower(IRQ source) -> void { switch(source) { case IRQ::SP: irq.sp.line = 0; break; case IRQ::SI: irq.si.line = 0; break; case IRQ::AI: irq.ai.line = 0; break; case IRQ::VI: irq.vi.line = 0; break; case IRQ::PI: irq.pi.line = 0; break; case IRQ::DP: irq.dp.line = 0; break; } poll(); } auto MI::poll() -> void { bool line = 0; line |= irq.sp.line & irq.sp.mask; line |= irq.si.line & irq.si.mask; line |= irq.ai.line & irq.ai.mask; line |= irq.vi.line & irq.vi.mask; line |= irq.pi.line & irq.pi.mask; line |= irq.dp.line & irq.dp.mask; cpu.scc.cause.interruptPending.bit(2) = line; } auto MI::power(bool reset) -> void { irq = {}; io = {}; } } ares-126/ares/n64/mi/mi.hpp000066400000000000000000000025641415063341600154140ustar00rootroot00000000000000//MIPS Interface struct MI : Memory::IO { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto interrupt(u8 source) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification io; } tracer; } debugger; //mi.cpp auto load(Node::Object) -> void; auto unload() -> void; enum class IRQ : u32 { SP, SI, AI, VI, PI, DP }; auto raise(IRQ) -> void; auto lower(IRQ) -> void; auto poll() -> void; auto power(bool reset) -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Interrupt { b1 line = 1; b1 mask; }; struct IRQs { Interrupt sp; Interrupt si; Interrupt ai; Interrupt vi; Interrupt pi; Interrupt dp; } irq; struct IO { n7 initializeLength; n1 initializeMode; n1 ebusTestMode; n1 rdramRegisterSelect; } io; struct Revision { static constexpr u8 io = 0x02; //I/O interface static constexpr u8 rac = 0x01; //RAMBUS ASIC cell static constexpr u8 rdp = 0x02; //Reality Display Processor static constexpr u8 rsp = 0x02; //Reality Signal Processor } revision; }; extern MI mi; ares-126/ares/n64/mi/serialization.cpp000066400000000000000000000005541415063341600176540ustar00rootroot00000000000000auto MI::serialize(serializer& s) -> void { s(irq.sp.line); s(irq.sp.mask); s(irq.si.line); s(irq.si.mask); s(irq.ai.line); s(irq.ai.mask); s(irq.vi.line); s(irq.vi.mask); s(irq.pi.line); s(irq.pi.mask); s(irq.dp.line); s(irq.dp.mask); s(io.initializeLength); s(io.initializeMode); s(io.ebusTestMode); s(io.rdramRegisterSelect); } ares-126/ares/n64/n64.hpp000066400000000000000000000027611415063341600150100ustar00rootroot00000000000000#pragma once //started: 2020-04-28 #include #include #include #include #include using v128 = __m128i; #if defined(VULKAN) #include #endif namespace ares::Nintendo64 { auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; auto option(string name, string value) -> bool; enum : u32 { Read, Write }; enum : u32 { Byte = 1, Half = 2, Word = 4, Dual = 8 }; struct Region { static inline auto NTSC() -> bool; static inline auto PAL() -> bool; }; struct Thread { auto reset() -> void { clock = 0; } auto serialize(serializer& s) -> void { s(clock); } s64 clock; }; struct Queue : priority_queue { enum : u32 { RSP_DMA, PI_DMA_Read, PI_DMA_Write, SI_DMA_Read, SI_DMA_Write, }; }; extern Queue queue; #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include } ares-126/ares/n64/pi/000077500000000000000000000000001415063341600142725ustar00rootroot00000000000000ares-126/ares/n64/pi/debugger.cpp000066400000000000000000000022461415063341600165660ustar00rootroot00000000000000auto PI::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("PI RAM"); memory.ram->setSize(64); memory.ram->setRead([&](u32 address) -> u8 { return pi.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return pi.ram.write(address, data); }); tracer.io = parent->append("I/O", "PI"); } auto PI::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "PI_DRAM_ADDRESS", "PI_PBUS_ADDRESS", "PI_READ_LENGTH", "PI_WRITE_LENGTH", "PI_STATUS", "PI_BSD_DOM1_LAT", "PI_BSD_DOM1_PWD", "PI_BSD_DOM1_PGS", "PI_BSD_DOM1_RLS", "PI_BSD_DOM2_LAT", "PI_BSD_DOM2_PWD", "PI_BSD_DOM2_PGS", "PI_BSD_DOM2_RLS", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "PI_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/pi/dma.cpp000066400000000000000000000022721415063341600155420ustar00rootroot00000000000000auto PI::dmaRead() -> void { io.readLength = (io.readLength | 1) + 1; for(u32 address = 0; address < io.readLength; address += 2) { u16 data = bus.read(io.dramAddress + address); bus.write(io.pbusAddress + address, data); } io.dmaBusy = 0; io.interrupt = 1; mi.raise(MI::IRQ::PI); } auto PI::dmaWrite() -> void { u8 mem[128]; bool first_block = true; i32 length = io.writeLength+1; io.writeLength = 0x7F; if (length <= 8) io.writeLength -= io.dramAddress&7; while (length > 0) { u32 dest = io.dramAddress & 0x7FFFFE; i32 misalign = dest & 7; i32 block_len = 128 - misalign; i32 cur_len = min(length, block_len); length -= cur_len; if (length.bit(0)) length += 1; i32 rom_len = (cur_len + 1) & ~1; for (u32 i = 0; i < rom_len; i++) mem[i] = bus.read(io.pbusAddress++); if (first_block) { if (cur_len == block_len-1) cur_len++; cur_len = max(cur_len-misalign, 0); } for (u32 i = 0; i < cur_len; i++) bus.write(io.dramAddress++, mem[i]); io.dramAddress = (io.dramAddress + 7) & ~7; first_block = false; } io.dmaBusy = 0; io.interrupt = 1; mi.raise(MI::IRQ::PI); } ares-126/ares/n64/pi/io.cpp000066400000000000000000000057071415063341600154160ustar00rootroot00000000000000auto PI::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address == 0) { //PI_DRAM_ADDRESS data = io.dramAddress; } if(address == 1) { //PI_CART_ADDRESS data = io.pbusAddress; } if(address == 2) { //PI_READ_LENGTH data = io.readLength; } if(address == 3) { //PI_WRITE_LENGTH data = io.writeLength; } if(address == 4) { //PI_STATUS data.bit(0) = io.dmaBusy; data.bit(1) = io.ioBusy; data.bit(2) = io.error; data.bit(3) = io.interrupt; } if(address == 5) { //PI_BSD_DOM1_LAT data.bit(0,7) = bsd1.latency; } if(address == 6) { //PI_BSD_DOM1_PWD data.bit(0,7) = bsd1.pulseWidth; } if(address == 7) { //PI_BSD_DOM1_PGS data.bit(0,7) = bsd1.pageSize; } if(address == 8) { //PI_BSD_DOM1_RLS data.bit(0,7) = bsd1.releaseDuration; } if(address == 9) { //PI_BSD_DOM2_LAT data.bit(0,7) = bsd2.latency; } if(address == 10) { //PI_BSD_DOM2_PWD data.bit(0,7) = bsd2.pulseWidth; } if(address == 11) { //PI_BSD_DOM2_PGS data.bit(0,7) = bsd2.pageSize; } if(address == 12) { //PI_BSD_DOM2_RLS data.bit(0,7) = bsd2.releaseDuration; } debugger.io(Read, address, data); return data; } auto PI::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; //only PI_STATUS can be written while PI is busy if(address != 4 && (io.dmaBusy || io.ioBusy)) { io.error = 1; return; } if(address == 0) { //PI_DRAM_ADDRESS io.dramAddress = n24(data) & ~1; } if(address == 1) { //PI_PBUS_ADDRESS io.pbusAddress = n29(data) & ~1; } if(address == 2) { //PI_READ_LENGTH io.readLength = n24(data); io.dmaBusy = 1; queue.insert(Queue::PI_DMA_Read, io.readLength * 9); } if(address == 3) { //PI_WRITE_LENGTH io.writeLength = n24(data); io.dmaBusy = 1; queue.insert(Queue::PI_DMA_Write, io.writeLength * 9); } if(address == 4) { //PI_STATUS if(data.bit(0)) { io.dmaBusy = 0; io.error = 0; queue.remove(Queue::PI_DMA_Read); queue.remove(Queue::PI_DMA_Write); } if(data.bit(1)) { io.interrupt = 0; mi.lower(MI::IRQ::PI); } } if(address == 5) { //PI_BSD_DOM1_LAT bsd1.latency = data.bit(0,7); } if(address == 6) { //PI_BSD_DOM1_PWD bsd1.pulseWidth = data.bit(0,7); } if(address == 7) { //PI_BSD_DOM1_PGS bsd1.pageSize = data.bit(0,7); } if(address == 8) { //PI_BSD_DOM1_RLS bsd1.releaseDuration = data.bit(0,7); } if(address == 9) { //PI_BSD_DOM2_LAT bsd2.latency = data.bit(0,7); } if(address == 10) { //PI_BSD_DOM2_PWD bsd2.pulseWidth = data.bit(0,7); } if(address == 11) { //PI_BSD_DOM2_PGS bsd2.pageSize = data.bit(0,7); } if(address == 12) { //PI_BSD_DOM2_RLS bsd2.releaseDuration = data.bit(0,7); } debugger.io(Write, address, data); } ares-126/ares/n64/pi/pi.cpp000066400000000000000000000026511415063341600154120ustar00rootroot00000000000000#include namespace ares::Nintendo64 { PI pi; #include "dma.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto PI::load(Node::Object parent) -> void { node = parent->append("PI"); rom.allocate(0x7c0); ram.allocate(0x040); debugger.load(node); } auto PI::unload() -> void { debugger = {}; rom.reset(); ram.reset(); node.reset(); } auto PI::power(bool reset) -> void { string pifrom = cartridge.region() == "NTSC" ? "pif.ntsc.rom" : "pif.pal.rom"; if(auto fp = system.pak->read(pifrom)) { rom.load(fp); } ram.fill(); io = {}; bsd1 = {}; bsd2 = {}; //write CIC seeds into PIF RAM so that cartridge checksum function passes string cic = cartridge.cic(); n8 seed = 0x3f; n1 version = 0; if(cic == "CIC-NUS-6101" || cic == "CIC-NUS-7102") seed = 0x3f, version = 1; if(cic == "CIC-NUS-6102" || cic == "CIC-NUS-7101") seed = 0x3f; if(cic == "CIC-NUS-6103" || cic == "CIC-NUS-7103") seed = 0x78; if(cic == "CIC-NUS-6105" || cic == "CIC-NUS-7105") seed = 0x91; if(cic == "CIC-NUS-6106" || cic == "CIC-NUS-7106") seed = 0x85; n32 data; data.bit(0, 7) = 0x3f; //CIC IPL2 seed data.bit(8,15) = seed; //CIC IPL3 seed data.bit(17) = reset; //osResetType (0 = power; 1 = reset (NMI)) data.bit(18) = version; //osVersion data.bit(19) = 0; //osRomType (0 = Gamepak; 1 = 64DD) ram.write(0x24, data); } } ares-126/ares/n64/pi/pi.hpp000066400000000000000000000020561415063341600154160ustar00rootroot00000000000000//Peripheral Interface struct PI : Memory::IO { Node::Object node; Memory::Readable rom; Memory::Writable ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //pi.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //dma.cpp auto dmaRead() -> void; auto dmaWrite() -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 dmaBusy; n1 ioBusy; n1 error; n1 interrupt; n32 dramAddress; n32 pbusAddress; n32 readLength; n32 writeLength; n1 romLockout; } io; struct BSD { n8 latency; n8 pulseWidth; n8 pageSize; n8 releaseDuration; } bsd1, bsd2; }; extern PI pi; ares-126/ares/n64/pi/serialization.cpp000066400000000000000000000006251415063341600176560ustar00rootroot00000000000000auto PI::serialize(serializer& s) -> void { s(ram); s(io.dmaBusy); s(io.ioBusy); s(io.error); s(io.interrupt); s(io.dramAddress); s(io.pbusAddress); s(io.readLength); s(io.writeLength); s(io.romLockout); s(bsd1.latency); s(bsd1.pulseWidth); s(bsd1.pageSize); s(bsd1.releaseDuration); s(bsd2.latency); s(bsd2.pulseWidth); s(bsd2.pageSize); s(bsd2.releaseDuration); } ares-126/ares/n64/rdp/000077500000000000000000000000001415063341600144475ustar00rootroot00000000000000ares-126/ares/n64/rdp/debugger.cpp000066400000000000000000000030121415063341600167330ustar00rootroot00000000000000auto RDP::Debugger::load(Node::Object parent) -> void { tracer.command = parent->append("Command", "RDP"); tracer.io = parent->append("I/O", "RDP"); } auto RDP::Debugger::command(string_view message) -> void { if(unlikely(tracer.command->enabled())) { tracer.command->notify(message); } } auto RDP::Debugger::ioDPC(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "DPC_START", "DPC_END", "DPC_CURRENT", "DPC_STATUS", "DPC_CLOCK", "DPC_BUSY", "DPC_PIPE_BUSY", "DPC_TMEM_BUSY", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "DPC_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } auto RDP::Debugger::ioDPS(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "DPS_TBIST", "DPS_TEST_MODE", "DPS_BUFTEST_ADDR", "DPS_BUFTEST_DATA", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "DPS_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/rdp/io.cpp000066400000000000000000000066551415063341600155760ustar00rootroot00000000000000auto RDP::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address == 0) { //DPC_START data.bit(0,23) = command.start; } if(address == 1) { //DPC_END data.bit(0,23) = command.end; } if(address == 2) { //DPC_CURRENT data.bit(0,23) = command.current; } if(address == 3) { //DPC_STATUS data.bit( 0) = command.source; data.bit( 1) = command.freeze; data.bit( 2) = command.flush; data.bit( 3) = 0; //start gclk? data.bit( 4) = command.tmemBusy > 0; data.bit( 5) = command.pipeBusy > 0; data.bit( 6) = command.bufferBusy > 0; data.bit( 7) = command.ready; data.bit( 8) = 0; //DMA busy data.bit( 9) = 0; //end valid data.bit(10) = 0; //start valid } if(address == 4) { //DPC_CLOCK data.bit(0,23) = command.clock; } if(address == 5) { //DPC_BUSY data.bit(0,23) = command.bufferBusy; } if(address == 6) { //DPC_PIPE_BUSY data.bit(0,23) = command.pipeBusy; } if(data == 7) { //DPC_TMEM_BUSY data.bit(0,23) = command.tmemBusy; } debugger.ioDPC(Read, address, data); return data; } auto RDP::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; if(address == 0) { //DPC_START command.start = data.bit(0,23) & ~7; command.current = command.start; } if(address == 1) { //DPC_END command.end = data.bit(0,23) & ~7; if(command.end > command.current) { command.freeze = 0; render(); command.current = command.end; command.ready = 1; } } if(address == 2) { //DPC_CURRENT (read-only) } if(address == 3) { //DPC_STATUS if(data.bit(0)) command.source = 0; if(data.bit(1)) command.source = 1; if(data.bit(2)) command.freeze = 0; //if(data.bit(3)) command.freeze = 1; if(data.bit(4)) command.flush = 0; if(data.bit(5)) command.flush = 1; if(data.bit(6)) command.tmemBusy = 0; if(data.bit(7)) command.pipeBusy = 0; if(data.bit(8)) command.bufferBusy = 0; if(data.bit(9)) command.clock = 0; } if(address == 4) { //DPC_CLOCK (read-only) } if(address == 5) { //DPC_BUSY (read-only) } if(address == 6) { //DPC_PIPE_BUSY (read-only) } if(address == 7) { //DPC_TMEM_BUSY (read-only) } debugger.ioDPC(Write, address, data); } auto RDP::IO::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address == 0) { //DPS_TBIST data.bit(0) = bist.check; data.bit(1) = bist.go; data.bit(2) = bist.done; data.bit(3,10) = bist.fail; } if(address == 1) { //DPS_TEST_MODE data.bit(0) = test.enable; } if(address == 2) { //DPS_BUFTEST_ADDR data.bit(0,6) = test.address; } if(address == 3) { //DPS_BUFTEST_DATA data.bit(0,31) = test.data; } self.debugger.ioDPS(Read, address, data); return data; } auto RDP::IO::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; if(address == 0) { //DPS_TBIST bist.check = data.bit(0); bist.go = data.bit(1); if(data.bit(2)) bist.done = 0; } if(address == 1) { //DPS_TEST_MODE test.enable = data.bit(0); } if(address == 2) { //DPS_BUFTEST_ADDR test.address = data.bit(0,6); } if(address == 3) { //DPS_BUFTEST_DATA test.data = data.bit(0,31); } self.debugger.ioDPS(Write, address, data); } ares-126/ares/n64/rdp/rdp.cpp000066400000000000000000000016111415063341600157370ustar00rootroot00000000000000#include namespace ares::Nintendo64 { RDP rdp; #include "render.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto RDP::load(Node::Object parent) -> void { node = parent->append("RDP"); debugger.load(node); } auto RDP::unload() -> void { debugger = {}; node.reset(); } auto RDP::main() -> void { step(system.frequency()); } auto RDP::step(u32 clocks) -> void { Thread::clock += clocks; } auto RDP::power(bool reset) -> void { Thread::reset(); command = {}; edge = {}; shade = {}; texture = {}; zbuffer = {}; rectangle = {}; other = {}; fog = {}; blend = {}; primitive = {}; environment = {}; combine = {}; tlut = {}; load_ = {}; tileSize = {}; tile = {}; set = {}; primitiveDepth = {}; scissor = {}; convert = {}; key = {}; fillRectangle_ = {}; io.bist = {}; io.test = {}; } } ares-126/ares/n64/rdp/rdp.hpp000066400000000000000000000146031415063341600157510ustar00rootroot00000000000000//Reality Display Processor struct RDP : Thread, Memory::IO { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto command(string_view) -> void; auto ioDPC(bool mode, u32 address, u32 data) -> void; auto ioDPS(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification command; Node::Debugger::Tracer::Notification io; } tracer; } debugger; //rdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //render.cpp auto render() -> void; auto noOperation() -> void; auto invalidOperation() -> void; auto unshadedTriangle() -> void; auto unshadedZbufferTriangle() -> void; auto textureTriangle() -> void; auto textureZbufferTriangle() -> void; auto shadedTriangle() -> void; auto shadedZbufferTriangle() -> void; auto shadedTextureTriangle() -> void; auto shadedTextureZbufferTriangle() -> void; auto syncLoad() -> void; auto syncPipe() -> void; auto syncTile() -> void; auto syncFull() -> void; auto setKeyGB() -> void; auto setKeyR() -> void; auto setConvert() -> void; auto setScissor() -> void; auto setPrimitiveDepth() -> void; auto setOtherModes() -> void; auto textureRectangle() -> void; auto textureRectangleFlip() -> void; auto loadTLUT() -> void; auto setTileSize() -> void; auto loadBlock() -> void; auto loadTile() -> void; auto setTile() -> void; auto fillRectangle() -> void; auto setFillColor() -> void; auto setFogColor() -> void; auto setBlendColor() -> void; auto setPrimitiveColor() -> void; auto setEnvironmentColor() -> void; auto setCombineMode() -> void; auto setTextureImage() -> void; auto setMaskImage() -> void; auto setColorImage() -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Command { n24 start; n24 end; n24 current; n24 clock; n24 bufferBusy; n24 pipeBusy; n24 tmemBusy; n1 source; //0 = RDRAM, 1 = DMEM n1 freeze; n1 flush; n1 ready = 1; } command; struct Point { n16 i; //integer n16 f; //fraction }; struct Edge { n1 lmajor; n3 level; n3 tile; struct Y { n14 hi; n14 md; n14 lo; } y; struct X { struct { Point c; //coordinate Point s; //inverse slope } hi, md, lo; } x; } edge; struct Shade { struct Channel { Point c; //color Point x; //change per X coordinate Point y; //change per Y coordinate Point e; //change along edge } r, g, b, a; } shade; struct Texture { struct { Point c; //coordinate Point x; //change per X coordinate Point y; //change per Y coordinate Point e; //change along edge } s, t, w; } texture; struct Zbuffer { Point d; //inverse depth Point x; //change per X coordinate Point y; //change per Y coordinate Point e; //change along edge } zbuffer; struct TextureRectangle { n3 tile; struct { n12 hi; n12 lo; } x, y; Point s; Point t; } rectangle; struct OtherModes { n1 atomicPrimitive; n1 reserved1; n2 cycleType; n1 perspective; n1 detailTexture; n1 sharpenTexture; n1 lodTexture; n1 tlut; n1 tlutType; n1 sampleType; n1 midTexel; n1 bilerp[2]; n1 convertOne; n1 colorKey; n2 colorDitherMode; n2 alphaDitherMode; n4 reserved2; n2 blend1a[2]; n2 blend1b[2]; n2 blend2a[2]; n2 blend2b[2]; n1 reserved3; n1 forceBlend; n1 alphaCoverage; n1 coverageXalpha; n2 zMode; n2 coverageMode; n1 colorOnCoverage; n1 imageRead; n1 zUpdate; n1 zCompare; n1 antialias; n1 zSource; n1 ditherAlpha; n1 alphaCompare; } other; struct FogColor { n8 red; n8 green; n8 blue; n8 alpha; } fog; struct Blend { n8 red; n8 green; n8 blue; n8 alpha; } blend; struct PrimitiveColor { n5 minimum; n8 fraction; n8 red; n8 green; n8 blue; n8 alpha; } primitive; struct EnvironmentColor { n8 red; n8 green; n8 blue; n8 alpha; } environment; struct CombineMode { struct MUL { n5 color[2]; n3 alpha[2]; } mul; struct ADD { n3 color[2]; n3 alpha[2]; } add; struct SUB { n4 color[2]; n3 alpha[2]; } sba, sbb; } combine; struct TLUT { n3 index; struct { n12 lo; n12 hi; } s, t; } tlut; struct Load { struct Block { n3 index; struct { n12 lo; n12 hi; } s, t; } block; struct Tile { n3 index; struct { n12 lo; n12 hi; } s, t; } tile; } load_; struct TileSize { n3 index; struct { n12 lo; n12 hi; } s, t; } tileSize; struct Tile { n3 format; n2 size; n9 line; n9 address; n3 index; n4 palette; struct { n1 clamp; n1 mirror; n4 mask; n4 shift; } s, t; } tile; struct Set { struct Fill { n32 color = 0; } fill; struct Texture { n3 format = 0; n2 size = 0; n10 width = 0; n26 dramAddress = 0; } texture; struct Mask { n26 dramAddress = 0; } mask; struct Color { n3 format = 0; n2 size = 0; n10 width = 0; n26 dramAddress = 0; } color; } set; struct PrimitiveDepth { n16 z; n16 deltaZ; } primitiveDepth; struct Scissor { n1 field; n1 odd; struct { n12 lo; n12 hi; } x, y; } scissor; struct Convert { n9 k[6]; } convert; struct Key { struct { n12 width; n8 center; n8 scale; } r, g, b; } key; struct FillRectangle { struct { n12 lo; n12 hi; } x, y; } fillRectangle_; struct IO : Memory::IO { RDP& self; IO(RDP& self) : self(self) {} //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; struct BIST { n1 check; n1 go; n1 done; n8 fail; } bist; struct Test { n1 enable; n7 address; n32 data; } test; } io{*this}; }; extern RDP rdp; ares-126/ares/n64/rdp/render.cpp000066400000000000000000000373471415063341600164500ustar00rootroot00000000000000static const vector commandNames = { "No_Operation", "Invalid_01", "Invalid_02", "Invalid_03", "Invalid_04", "Invalid_05", "Invalid_06", "Invalid_07", "Unshaded_Triangle", "Unshaded_Zbuffer_Triangle", "Texture_Triangle", "Texture_Zbuffer_Triangle", "Shaded_Triangle", "Shaded_Zbuffer_Triangle", "Shaded_Texture_Triangle", "Shaded_Texture_Zbuffer_Triangle", "Invalid_10", "Invalid_11", "Invalid_12", "Invalid_13", "Invalid_14", "Invalid_15", "Invalid_16", "Invalid_17", "Invalid_18", "Invalid_19", "Invalid_1a", "Invalid_1b", "Invalid_1c", "Invalid_1d", "Invalid_1e", "Invalid_1f", "Invalid_20", "Invalid_21", "Invalid_22", "Invalid_23", "Texture_Rectangle", "Texture_Rectangle_Flip", "Sync_Load", "Sync_Pipe", "Sync_Tile", "Sync_Full", "Set_Key_GB", "Set_Key_R", "Set_Convert", "Set_Scissor", "Set_Primitive_Depth", "Set_Other_Modes", "Load_Texture_LUT", "Invalid_31", "Set_Tile_Size", "Load_Block", "Load_Tile", "Set_Tile", "Fill_Rectangle", "Set_Fill_Color", "Set_Fog_Color", "Set_Blend_Color", "Set_Primitive_Color", "Set_Environment_Color", "Set_Combine_Mode", "Set_Texture_Image", "Set_Mask_Image", "Set_Color_Image", }; auto RDP::render() -> void { #if defined(VULKAN) if(vulkan.render()) return; #endif auto& memory = !command.source ? rdram.ram : rsp.dmem; auto fetch = [&]() -> u64 { u64 op = memory.readUnaligned(command.current); command.current += 8; return op; }; auto fetchEdge = [&](u64 op) { edge.lmajor = n1 (op >> 55); edge.level = n3 (op >> 51); edge.tile = n3 (op >> 48); edge.y.lo = n14(op >> 32); edge.y.md = n14(op >> 16); edge.y.hi = n14(op >> 0); op = fetch(); edge.x.lo.c.i = n16(op >> 48); edge.x.lo.c.f = n16(op >> 32); edge.x.lo.s.i = n16(op >> 16); edge.x.lo.s.f = n16(op >> 0); op = fetch(); edge.x.hi.c.i = n16(op >> 48); edge.x.hi.c.f = n16(op >> 32); edge.x.hi.s.i = n16(op >> 16); edge.x.hi.s.f = n16(op >> 0); op = fetch(); edge.x.md.c.i = n16(op >> 48); edge.x.md.c.f = n16(op >> 32); edge.x.md.s.i = n16(op >> 16); edge.x.md.s.f = n16(op >> 0); }; auto fetchShade = [&](u64 op) { op = fetch(); shade.r.c.i = n16(op >> 48); shade.g.c.i = n16(op >> 32); shade.b.c.i = n16(op >> 16); shade.a.c.i = n16(op >> 0); op = fetch(); shade.r.x.i = n16(op >> 48); shade.g.x.i = n16(op >> 32); shade.b.x.i = n16(op >> 16); shade.a.x.i = n16(op >> 0); op = fetch(); shade.r.c.f = n16(op >> 48); shade.g.c.f = n16(op >> 32); shade.b.c.f = n16(op >> 16); shade.a.c.f = n16(op >> 0); op = fetch(); shade.r.x.f = n16(op >> 48); shade.g.x.f = n16(op >> 32); shade.b.x.f = n16(op >> 16); shade.a.x.f = n16(op >> 0); op = fetch(); shade.r.e.i = n16(op >> 48); shade.g.e.i = n16(op >> 32); shade.b.e.i = n16(op >> 16); shade.a.e.i = n16(op >> 0); op = fetch(); shade.r.y.i = n16(op >> 48); shade.g.y.i = n16(op >> 32); shade.b.y.i = n16(op >> 16); shade.a.y.i = n16(op >> 0); op = fetch(); shade.r.e.f = n16(op >> 48); shade.g.e.f = n16(op >> 32); shade.b.e.f = n16(op >> 16); shade.a.e.f = n16(op >> 0); op = fetch(); shade.r.y.f = n16(op >> 48); shade.g.y.f = n16(op >> 32); shade.b.y.f = n16(op >> 16); shade.a.y.f = n16(op >> 0); }; auto fetchTexture = [&](u64 op) { op = fetch(); texture.s.c.i = n16(op >> 48); texture.t.c.i = n16(op >> 32); texture.w.c.i = n16(op >> 16); op = fetch(); texture.s.x.i = n16(op >> 48); texture.t.x.i = n16(op >> 32); texture.w.x.i = n16(op >> 16); op = fetch(); texture.s.c.f = n16(op >> 48); texture.t.c.f = n16(op >> 32); texture.w.c.f = n16(op >> 16); op = fetch(); texture.s.x.f = n16(op >> 48); texture.t.x.f = n16(op >> 32); texture.w.x.f = n16(op >> 16); op = fetch(); texture.s.e.i = n16(op >> 48); texture.t.e.i = n16(op >> 32); texture.w.e.i = n16(op >> 16); op = fetch(); texture.s.y.i = n16(op >> 48); texture.t.y.i = n16(op >> 32); texture.w.y.i = n16(op >> 16); op = fetch(); texture.s.e.f = n16(op >> 48); texture.t.e.f = n16(op >> 32); texture.w.e.f = n16(op >> 16); op = fetch(); texture.s.y.f = n16(op >> 48); texture.t.y.f = n16(op >> 32); texture.w.y.f = n16(op >> 16); }; auto fetchZBuffer = [&](u64 op) { op = fetch(); zbuffer.d.i = n16(op >> 48); zbuffer.d.f = n16(op >> 32); zbuffer.x.i = n16(op >> 16); zbuffer.x.f = n16(op >> 0); op = fetch(); zbuffer.e.i = n16(op >> 48); zbuffer.e.f = n16(op >> 32); zbuffer.y.i = n16(op >> 16); zbuffer.y.f = n16(op >> 0); }; auto fetchRectangle = [&](u64 op) { rectangle.x.lo = n12(op >> 44); rectangle.y.lo = n12(op >> 32); rectangle.tile = n3 (op >> 24); rectangle.x.hi = n12(op >> 12); rectangle.y.hi = n12(op >> 0); op = fetch(); rectangle.s.i = n16(op >> 48); rectangle.t.i = n16(op >> 32); rectangle.s.f = n16(op >> 16); rectangle.t.f = n16(op >> 0); }; while(command.current < command.end) { u64 op = fetch(); if(debugger.tracer.command->enabled()) { debugger.command({hex(op, 16L), " ", commandNames(op >> 56 & 0x3f, "Invalid")}); } switch(op >> 56 & 0x3f) { case 0x00: { noOperation(); } break; case 0x01: case 0x02: case 0x03: case 0x04: case 0x05: case 0x06: case 0x07: { invalidOperation(); } break; case 0x08: { fetchEdge(op); unshadedTriangle(); } break; case 0x09: { fetchEdge(op); fetchZBuffer(op); unshadedZbufferTriangle(); } break; case 0x0a: { fetchEdge(op); fetchTexture(op); textureTriangle(); } break; case 0x0b: { fetchEdge(op); fetchTexture(op); fetchZBuffer(op); textureZbufferTriangle(); } break; case 0x0c: { fetchEdge(op); fetchShade(op); shadedTriangle(); } break; case 0x0d: { fetchEdge(op); fetchShade(op); fetchZBuffer(op); shadedZbufferTriangle(); } break; case 0x0e: { fetchEdge(op); fetchShade(op); fetchTexture(op); shadedTextureTriangle(); } break; case 0x0f: { fetchEdge(op); fetchShade(op); fetchTexture(op); fetchZBuffer(op); shadedTextureZbufferTriangle(); } break; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: case 0x1a: case 0x1b: case 0x1c: case 0x1d: case 0x1e: case 0x1f: case 0x20: case 0x21: case 0x22: case 0x23: { invalidOperation(); } break; case 0x24: { fetchRectangle(op); textureRectangle(); } break; case 0x25: { fetchRectangle(op); textureRectangleFlip(); } break; case 0x26: { syncLoad(); } break; case 0x27: { syncPipe(); } break; case 0x28: { syncTile(); } break; case 0x29: { syncFull(); } break; case 0x2a: { key.g.width = n12(op >> 44); key.b.width = n12(op >> 32); key.g.center = n8 (op >> 24); key.g.scale = n8 (op >> 16); key.b.center = n8 (op >> 8); key.b.scale = n8 (op >> 0); setKeyGB(); } break; case 0x2b: { key.r.width = n12(op >> 16); key.r.center = n8 (op >> 8); key.r.scale = n8 (op >> 0); setKeyR(); } break; case 0x2c: { convert.k[0] = n9(op >> 45); convert.k[1] = n9(op >> 36); convert.k[2] = n9(op >> 27); convert.k[3] = n9(op >> 18); convert.k[4] = n9(op >> 9); convert.k[5] = n8(op >> 0); setConvert(); } break; case 0x2d: { scissor.x.hi = n12(op >> 44); scissor.y.hi = n12(op >> 32); scissor.field = n1 (op >> 25); scissor.odd = n1 (op >> 24); scissor.x.lo = n12(op >> 12); scissor.y.lo = n12(op >> 0); setScissor(); } break; case 0x2e: { primitiveDepth.z = n16(op >> 16); primitiveDepth.deltaZ = n16(op >> 0); setPrimitiveDepth(); } break; case 0x2f: { other.atomicPrimitive = n1(op >> 55); other.reserved1 = n1(op >> 54); other.cycleType = n2(op >> 52); other.perspective = n1(op >> 51); other.detailTexture = n1(op >> 50); other.sharpenTexture = n1(op >> 49); other.lodTexture = n1(op >> 48); other.tlut = n1(op >> 47); other.tlutType = n1(op >> 46); other.sampleType = n1(op >> 45); other.midTexel = n1(op >> 44); other.bilerp[0] = n1(op >> 43); other.bilerp[1] = n1(op >> 42); other.convertOne = n1(op >> 41); other.colorKey = n1(op >> 40); other.colorDitherMode = n2(op >> 38); other.alphaDitherMode = n2(op >> 36); other.reserved2 = n4(op >> 32); other.blend1a[0] = n2(op >> 30); other.blend1a[1] = n2(op >> 28); other.blend1b[0] = n2(op >> 26); other.blend1b[1] = n2(op >> 24); other.blend2a[0] = n2(op >> 22); other.blend2a[1] = n2(op >> 20); other.blend2b[0] = n2(op >> 18); other.blend2b[1] = n2(op >> 16); other.reserved3 = n1(op >> 15); other.forceBlend = n1(op >> 14); other.alphaCoverage = n1(op >> 13); other.coverageXalpha = n1(op >> 12); other.zMode = n2(op >> 10); other.coverageMode = n2(op >> 8); other.colorOnCoverage = n1(op >> 7); other.imageRead = n1(op >> 6); other.zUpdate = n1(op >> 5); other.zCompare = n1(op >> 4); other.antialias = n1(op >> 3); other.zSource = n1(op >> 2); other.ditherAlpha = n1(op >> 1); other.alphaCompare = n1(op >> 0); setOtherModes(); } break; case 0x30: { tlut.s.lo = n12(op >> 44); tlut.t.lo = n12(op >> 32); tlut.index = n3 (op >> 24); tlut.s.hi = n12(op >> 12); tlut.t.hi = n12(op >> 0); loadTLUT(); } break; case 0x31: { invalidOperation(); } break; case 0x32: { tileSize.s.lo = n12(op >> 44); tileSize.t.lo = n12(op >> 32); tileSize.index = n3 (op >> 24); tileSize.s.hi = n12(op >> 12); tileSize.t.hi = n12(op >> 0); setTileSize(); } break; case 0x33: { load_.block.s.lo = n12(op >> 44); load_.block.t.lo = n12(op >> 32); load_.block.index = n3 (op >> 24); load_.block.s.hi = n12(op >> 12); load_.block.t.hi = n12(op >> 0); loadBlock(); } break; case 0x34: { load_.tile.s.lo = n12(op >> 44); load_.tile.t.lo = n12(op >> 32); load_.tile.index = n3 (op >> 24); load_.tile.s.hi = n12(op >> 12); load_.tile.t.hi = n12(op >> 0); loadTile(); } break; case 0x35: { tile.format = n3(op >> 53); tile.size = n2(op >> 51); tile.line = n9(op >> 41); tile.address = n9(op >> 32); tile.index = n3(op >> 24); tile.palette = n4(op >> 20); tile.t.clamp = n1(op >> 19); tile.t.mirror = n1(op >> 18); tile.t.mask = n4(op >> 14); tile.t.shift = n4(op >> 10); tile.s.clamp = n1(op >> 9); tile.s.mirror = n1(op >> 8); tile.s.mask = n4(op >> 4); tile.s.shift = n4(op >> 0); setTile(); } break; case 0x36: { fillRectangle_.x.lo = n12(op >> 44); fillRectangle_.y.lo = n12(op >> 32); fillRectangle_.x.hi = n12(op >> 12); fillRectangle_.y.hi = n12(op >> 0); fillRectangle(); } break; case 0x37: { set.fill.color = n32(op >> 0); setFillColor(); } break; case 0x38: { fog.red = n8(op >> 24); fog.green = n8(op >> 16); fog.blue = n8(op >> 8); fog.alpha = n8(op >> 0); setFogColor(); } break; case 0x39: { blend.red = n8(op >> 24); blend.green = n8(op >> 16); blend.blue = n8(op >> 8); blend.alpha = n8(op >> 0); setBlendColor(); } break; case 0x3a: { primitive.minimum = n4(op >> 40); primitive.fraction = n8(op >> 32); primitive.red = n8(op >> 24); primitive.green = n8(op >> 16); primitive.blue = n8(op >> 8); primitive.alpha = n8(op >> 0); setPrimitiveColor(); } break; case 0x3b: { environment.red = n8(op >> 24); environment.green = n8(op >> 16); environment.blue = n8(op >> 8); environment.alpha = n8(op >> 0); setEnvironmentColor(); } break; case 0x3c: { combine.sba.color[0] = n4(op >> 52); combine.mul.color[0] = n5(op >> 47); combine.sba.alpha[0] = n3(op >> 44); combine.mul.alpha[0] = n3(op >> 41); combine.sba.color[1] = n4(op >> 37); combine.mul.color[1] = n5(op >> 32); combine.sbb.color[0] = n4(op >> 28); combine.sbb.color[1] = n4(op >> 24); combine.sba.alpha[1] = n3(op >> 21); combine.mul.alpha[1] = n3(op >> 18); combine.add.color[0] = n3(op >> 15); combine.sbb.alpha[0] = n3(op >> 12); combine.add.alpha[0] = n3(op >> 9); combine.add.color[1] = n3(op >> 6); combine.sbb.alpha[1] = n3(op >> 3); combine.add.alpha[1] = n3(op >> 0); setCombineMode(); } break; case 0x3d: { set.texture.format = n3 (op >> 53); set.texture.size = n2 (op >> 51); set.texture.width = n10(op >> 32); set.texture.dramAddress = n26(op >> 0); setTextureImage(); } break; case 0x3e: { set.mask.dramAddress = n26(op >> 0); setMaskImage(); } break; case 0x3f: { set.color.format = n3 (op >> 53); set.color.size = n2 (op >> 51); set.color.width = n10(op >> 32); set.color.dramAddress = n26(op >> 0); setColorImage(); } break; } } } //0x00 auto RDP::noOperation() -> void { } //0x01-0x07; 0x10-0x23; 0x31 auto RDP::invalidOperation() -> void { } //0x08 auto RDP::unshadedTriangle() -> void { } //0x09 auto RDP::unshadedZbufferTriangle() -> void { } //0x0a auto RDP::textureTriangle() -> void { } //0x0b auto RDP::textureZbufferTriangle() -> void { } //0x0c auto RDP::shadedTriangle() -> void { } //0x0d auto RDP::shadedZbufferTriangle() -> void { } //0x0e auto RDP::shadedTextureTriangle() -> void { } //0x0f auto RDP::shadedTextureZbufferTriangle() -> void { } //0x24 auto RDP::textureRectangle() -> void { } //0x25 auto RDP::textureRectangleFlip() -> void { } //0x26 auto RDP::syncLoad() -> void { } //0x27 auto RDP::syncPipe() -> void { } //0x28 auto RDP::syncTile() -> void { } //0x29 auto RDP::syncFull() -> void { mi.raise(MI::IRQ::DP); } //0x2a auto RDP::setKeyGB() -> void { } //0x2b auto RDP::setKeyR() -> void { } //0x2c auto RDP::setConvert() -> void { } //0x2d auto RDP::setScissor() -> void { } //0x2e auto RDP::setPrimitiveDepth() -> void { } //0x2f auto RDP::setOtherModes() -> void { } //0x30 auto RDP::loadTLUT() -> void { } //0x32 auto RDP::setTileSize() -> void { } //0x33 auto RDP::loadBlock() -> void { } //0x34 auto RDP::loadTile() -> void { } //0x35 auto RDP::setTile() -> void { } //0x36 auto RDP::fillRectangle() -> void { } //0x37 auto RDP::setFillColor() -> void { } //0x38 auto RDP::setFogColor() -> void { } //0x39 auto RDP::setBlendColor() -> void { } //0x3a auto RDP::setPrimitiveColor() -> void { } //0x3b auto RDP::setEnvironmentColor() -> void { } //0x3c auto RDP::setCombineMode() -> void { } //0x3d auto RDP::setTextureImage() -> void { } //0x3e auto RDP::setMaskImage() -> void { } //0x3f auto RDP::setColorImage() -> void { } ares-126/ares/n64/rdp/serialization.cpp000066400000000000000000000006741415063341600200370ustar00rootroot00000000000000auto RDP::serialize(serializer& s) -> void { Thread::serialize(s); s(command.start); s(command.end); s(command.current); s(command.clock); s(command.bufferBusy); s(command.pipeBusy); s(command.tmemBusy); s(command.source); s(command.freeze); s(command.flush); s(command.ready); s(io.bist.check); s(io.bist.go); s(io.bist.done); s(io.bist.fail); s(io.test.enable); s(io.test.address); s(io.test.data); } ares-126/ares/n64/rdram/000077500000000000000000000000001415063341600147675ustar00rootroot00000000000000ares-126/ares/n64/rdram/debugger.cpp000066400000000000000000000023021415063341600172540ustar00rootroot00000000000000auto RDRAM::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("RDRAM"); memory.ram->setSize(4_MiB + 4_MiB); memory.ram->setRead([&](u32 address) -> u8 { return rdram.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return rdram.ram.write(address, data); }); tracer.io = parent->append("I/O", "RDRAM"); } auto RDRAM::Debugger::io(bool mode, u32 chipID, u32 address, u32 data) -> void { static const vector registerNames = { "RDRAM_DEVICE_TYPE", "RDRAM_DEVICE_ID", "RDRAM_DELAY", "RDRAM_MODE", "RDRAM_REF_INTERVAL", "RDRAM_REF_ROW", "RDRAM_RAS_INTERVAL", "RDRAM_MIN_INTERVAL", "RDRAM_ADDRESS_SELECT", "RDRAM_DEVICE_MANUFACTURER", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "RDRAM_UNKNOWN"); name.append("[", chipID, "]"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/rdram/io.cpp000066400000000000000000000041741415063341600161100ustar00rootroot00000000000000auto RDRAM::readWord(u32 address) -> u32 { u32 chipID = address >> 13 & 3; auto& chip = chips[chipID]; address = (address & 0x3ff) >> 2; u32 data = 0; if(address == 0) { //RDRAM_DEVICE_TYPE data = chip.deviceType; } if(address == 1) { //RDRAM_DEVICE_ID data = chip.deviceID; } if(address == 2) { //RDRAM_DELAY data = chip.delay; } if(address == 3) { //RDRAM_MODE data = chip.mode ^ 0xc0c0c0c0; } if(address == 4) { //RDRAM_REF_INTERVAL data = chip.refreshInterval; } if(address == 5) { //RDRAM_REF_ROW data = chip.refreshRow; } if(address == 6) { //RDRAM_RAS_INTERVAL data = chip.rasInterval; } if(address == 7) { //RDRAM_MIN_INTERVAL data = chip.minInterval; } if(address == 8) { //RDRAM_ADDRESS_SELECT data = chip.addressSelect; } if(address == 9) { //RDRAM_DEVICE_MANUFACTURER data = chip.deviceManufacturer; } if(address == 10) { //RDRAM_CURRENT_CONTROL data = chip.currentControl; } debugger.io(Read, chipID, address, data); return data; } auto RDRAM::writeWord(u32 address, u32 data) -> void { u32 chipID = address >> 13 & 3; auto& chip = chips[chipID]; address = (address & 0x3ff) >> 2; if(address == 0) { //RDRAM_DEVICE_TYPE chip.deviceType = data; } if(address == 1) { //RDRAM_DEVICE_ID chip.deviceID = data; } if(address == 2) { //RDRAM_DELAY chip.delay = data; } if(address == 3) { //RDRAM_MODE chip.mode = data; } if(address == 4) { //RDRAM_REF_INTERVAL chip.refreshInterval = data; } if(address == 5) { //RDRAM_REF_ROW chip.refreshRow = data; } if(address == 6) { //RDRAM_RAS_INTERVAL chip.rasInterval = data; } if(address == 7) { //RDRAM_MIN_INTERVAL chip.minInterval = data; } if(address == 8) { //RDRAM_ADDRESS_SELECT chip.addressSelect = data; } if(address == 9) { //RDRAM_DEVICE_MANUFACTURER chip.deviceManufacturer = data; } if(address == 10) { //RDRAM_CURRENT_CONTROL chip.currentControl = data; } debugger.io(Write, chipID, address, data); } ares-126/ares/n64/rdram/rdram.cpp000066400000000000000000000010321415063341600165740ustar00rootroot00000000000000#include namespace ares::Nintendo64 { RDRAM rdram; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto RDRAM::load(Node::Object parent) -> void { node = parent->append("RDRAM"); //4_MiB internal //4_MiB expansion pak ram.allocate(4_MiB + 4_MiB); debugger.load(node); } auto RDRAM::unload() -> void { debugger = {}; ram.reset(); node.reset(); } auto RDRAM::power(bool reset) -> void { if(!reset) { ram.fill(); for(auto& chip : chips) chip = {}; } } } ares-126/ares/n64/rdram/rdram.hpp000066400000000000000000000016741415063341600166150ustar00rootroot00000000000000//RAMBUS RAM struct RDRAM : Memory::IO { Node::Object node; Memory::Writable ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 chipID, u32 address, u32 data) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //rdram.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Chip { n32 deviceType; n32 deviceID; n32 delay; n32 mode; n32 refreshInterval; n32 refreshRow; n32 rasInterval; n32 minInterval; n32 addressSelect; n32 deviceManufacturer; n32 currentControl; } chips[4]; }; extern RDRAM rdram; ares-126/ares/n64/rdram/serialization.cpp000066400000000000000000000005541415063341600203540ustar00rootroot00000000000000auto RDRAM::serialize(serializer& s) -> void { s(ram); for(auto& chip : chips) { s(chip.deviceType); s(chip.deviceID); s(chip.delay); s(chip.mode); s(chip.refreshInterval); s(chip.refreshRow); s(chip.rasInterval); s(chip.minInterval); s(chip.addressSelect); s(chip.deviceManufacturer); s(chip.currentControl); } } ares-126/ares/n64/ri/000077500000000000000000000000001415063341600142745ustar00rootroot00000000000000ares-126/ares/n64/ri/debugger.cpp000066400000000000000000000013501415063341600165630ustar00rootroot00000000000000auto RI::Debugger::load(Node::Object parent) -> void { tracer.io = parent->append("I/O", "RI"); } auto RI::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "RI_MODE", "RI_CONFIG", "RI_CURRENT_LOAD", "RI_SELECT", "RI_REFRESH", "RI_LATENCY", "RI_RERROR", "RI_WERROR", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "RI_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/ri/io.cpp000066400000000000000000000040171415063341600154110ustar00rootroot00000000000000auto RI::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data = 0; if(address == 0) { //RI_MODE data = io.mode; } if(address == 1) { //RI_CONFIG data = io.config; } if(address == 2) { //RI_CURRENT_LOAD data = io.currentLoad; } if(address == 3) { //RI_SELECT data = io.select; if constexpr(!Accuracy::RDRAM::Broadcasting) { //this register is read by IPL3 to check if RDRAM initialization should be //skipped. if we are forcing it to be skipped, we should also consume //enough cycles to not inadvertently speed up the boot process. //Wave Race 64 Shindou Pak Taiou Version will freeze on the N64 logo if //the SCC count register, which increments at half the CPU clock rate, has //too small a value. //after a cold boot on real hardware with no expansion pak and using the //CIC-NUS-6102 IPL3, upon reaching the test ROM's entry point the count //register was measured to be ~0x1184000. cpu.step(17'641'000); } } if(address == 4) { //RI_REFRESH data = io.refresh; } if(address == 5) { //RI_LATENCY data = io.latency; } if(address == 6) { //RI_RERROR data = io.readError; } if(address == 7) { //RI_WERROR data = io.writeError; } debugger.io(Read, address, data); return data; } auto RI::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; if(address == 0) { //RI_MODE io.mode = data; } if(address == 1) { //RI_CONFIG io.config = data; } if(address == 2) { //RI_CURRENT_LOAD io.currentLoad = data; } if(address == 3) { //RI_SELECT io.select = data; } if(address == 4) { //RI_REFRESH io.refresh = data; } if(address == 5) { //RI_LATENCY io.latency = data; } if(address == 6) { //RI_RERROR io.readError = data; } if(address == 7) { //RI_WERROR io.writeError = data; } debugger.io(Write, address, data); } ares-126/ares/n64/ri/ri.cpp000066400000000000000000000013451415063341600154150ustar00rootroot00000000000000#include namespace ares::Nintendo64 { RI ri; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto RI::load(Node::Object parent) -> void { node = parent->append("RI"); debugger.load(node); } auto RI::unload() -> void { debugger = {}; node.reset(); } auto RI::power(bool reset) -> void { io = {}; if constexpr(!Accuracy::RDRAM::Broadcasting) { //simulate PIF ROM RDRAM power-on self test io.mode = 0x0e; io.config = 0x40; io.select = 0x14; io.refresh = 0x0006'3634; //store RDRAM size result into memory rdram.ram.write(0x318, rdram.ram.size); //CIC-NUS-6102 rdram.ram.write(0x3f0, rdram.ram.size); //CIC-NUS-6105 } } } ares-126/ares/n64/ri/ri.hpp000066400000000000000000000013501415063341600154160ustar00rootroot00000000000000//RDRAM Interface struct RI : Memory::IO { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //ri.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n32 mode; n32 config; n32 currentLoad; n32 select; n32 refresh; n32 latency; n32 readError; n32 writeError; } io; }; extern RI ri; ares-126/ares/n64/ri/serialization.cpp000066400000000000000000000002721415063341600176560ustar00rootroot00000000000000auto RI::serialize(serializer& s) -> void { s(io.mode); s(io.config); s(io.currentLoad); s(io.select); s(io.refresh); s(io.latency); s(io.readError); s(io.writeError); } ares-126/ares/n64/rsp/000077500000000000000000000000001415063341600144665ustar00rootroot00000000000000ares-126/ares/n64/rsp/debugger.cpp000066400000000000000000000051141415063341600167570ustar00rootroot00000000000000#define rsp Nintendo64::rsp auto RSP::Debugger::load(Node::Object parent) -> void { memory.dmem = parent->append("RSP DMEM"); memory.dmem->setSize(4_KiB); memory.dmem->setRead([&](u32 address) -> u8 { return rsp.dmem.read(address); }); memory.dmem->setWrite([&](u32 address, u8 data) -> void { return rsp.dmem.write(address, data); }); memory.imem = parent->append("RSP IMEM"); memory.imem->setSize(4_KiB); memory.imem->setRead([&](u32 address) -> u8 { return rsp.imem.read(address); }); memory.imem->setWrite([&](u32 address, u8 data) -> void { return rsp.imem.write(address, data); }); tracer.instruction = parent->append("Instruction", "RSP"); tracer.instruction->setAddressBits(12, 2); tracer.io = parent->append("I/O", "RSP"); } auto RSP::Debugger::unload() -> void { memory.dmem.reset(); memory.imem.reset(); tracer.instruction.reset(); tracer.io.reset(); } auto RSP::Debugger::instruction() -> void { if(unlikely(tracer.instruction->enabled())) { u32 address = rsp.pipeline.address & 0xfff; u32 instruction = rsp.pipeline.instruction; if(tracer.instruction->address(address)) { rsp.disassembler.showColors = 0; tracer.instruction->notify(rsp.disassembler.disassemble(address, instruction), {}); rsp.disassembler.showColors = 1; } } } auto RSP::Debugger::ioSCC(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "SP_PBUS_ADDRESS", "SP_DRAM_ADDRESS", "SP_READ_LENGTH", "SP_WRITE_LENGTH", "SP_STATUS", "SP_DMA_FULL", "SP_DMA_BUSY", "SP_SEMAPHORE", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "SP_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } auto RSP::Debugger::ioStatus(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "SP_PC_REG", "SP_IBIST", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "SP_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } #undef rsp ares-126/ares/n64/rsp/disassembler.cpp000066400000000000000000000437721415063341600176640ustar00rootroot00000000000000auto RSP::Disassembler::disassemble(u32 address, u32 instruction) -> string { this->address = address; this->instruction = instruction; auto v = EXECUTE(); if(!v) v.append("invalid", string{"$", hex(instruction, 8L)}); if(!instruction) v = {"nop"}; auto s = pad(v.takeFirst(), -8L); return {s, v.merge(",")}; } auto RSP::Disassembler::EXECUTE() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto imm16i = [&] { return immediate(s16(instruction)); }; auto imm16u = [&] { return immediate(u16(instruction), 16L); }; auto jump = [&] { return immediate(n12(address + 4 & 0xf000'0000 | (instruction & 0x03ff'ffff) << 2)); }; auto branch = [&] { return immediate(n12(address + 4 + (s16(instruction) << 2))); }; auto offset = [&] { return ipuRegisterIndex(instruction >> 21 & 31, s16(instruction)); }; auto ADDI = [&](string_view add, string_view sub, string_view mov) -> vector { if(!(instruction >> 21 & 31)) return {mov, rtName(), immediate(s16(instruction), 32L)}; return {s16(instruction) >= 0 ? add : sub, rtName(), rsValue(), immediate(abs(s16(instruction)))}; }; auto ALU = [&](string_view name) -> vector { return {name, rtName(), rsValue(), immediate(u16(instruction))}; }; auto BRANCH1 = [&](string_view name) -> vector { return {name, rsValue(), branch()}; }; auto BRANCH2 = [&](string_view name) -> vector { return {name, rsValue(), rtValue(), branch()}; }; auto CACHE = [&](string_view name) -> vector { auto cache = instruction >> 16 & 3; auto op = instruction >> 18 & 7; string type = "reserved"; if(cache == 0) switch(op) { case 0: type = "code(IndexInvalidate)"; break; case 1: type = "code(IndexLoadTag)"; break; case 2: type = "code(IndexStoreTag)"; break; case 4: type = "code(HitInvalidate)"; break; case 5: type = "code(Fill)"; break; case 6: type = "code(HitWriteBack)"; break; } if(cache == 1) switch(op) { case 0: type = "data(IndexWriteBackInvalidate)"; break; case 1: type = "data(IndexLoadTag)"; break; case 2: type = "data(IndexStoreTag)"; break; case 3: type = "data(CreateDirtyExclusive)"; break; case 4: type = "data(HitInvalidate)"; break; case 5: type = "data(HitWriteBackInvalidate)"; break; case 6: type = "data(HitWriteBack)"; break; } return {name, type, offset()}; }; auto JUMP = [&](string_view name) -> vector { return {name, jump()}; }; auto LOAD = [&](string_view name) -> vector { return {name, rtName(), offset()}; }; auto STORE = [&](string_view name) -> vector { return {name, rtValue(), offset()}; }; switch(instruction >> 26) { case 0x00: return SPECIAL(); case 0x01: return REGIMM(); case 0x02: return JUMP("j"); case 0x03: return JUMP("jal"); case 0x04: return BRANCH2("beq"); case 0x05: return BRANCH2("bne"); case 0x06: return BRANCH1("blez"); case 0x07: return BRANCH1("bgtz"); case 0x08: return ADDI("addi", "subi", "li"); case 0x09: return ADDI("addiu", "subiu", "liu"); case 0x0a: return ALU("slti"); case 0x0b: return ALU("sltiu"); case 0x0c: return ALU("andi"); case 0x0d: return ALU("ori"); case 0x0e: return ALU("xori"); case 0x0f: return {"lui", rtName(), imm16u()}; case 0x10: return SCC(); case 0x11: break; //COP1 case 0x12: return VU(); case 0x13: break; //COP3 case 0x14: break; //BEQL case 0x15: break; //BNEL case 0x16: break; //BLEZL case 0x17: break; //BGTZL case 0x18: break; //DADDI case 0x19: break; //DADDIU case 0x1a: break; //LDL case 0x1b: break; //LDR case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; case 0x20: return LOAD("lb"); case 0x21: return LOAD("lh"); case 0x22: break; //LWL case 0x23: return LOAD("lw"); case 0x24: return LOAD("lbu"); case 0x25: return LOAD("lhu"); case 0x26: break; //LWR case 0x27: break; //LWU case 0x28: return STORE("sb"); case 0x29: return STORE("sh"); case 0x2a: break; //SWL case 0x2b: return STORE("sw"); case 0x2c: break; //SDL case 0x2d: break; //SDR case 0x2e: break; //SWR case 0x2f: return CACHE("cache"); case 0x30: break; //LL case 0x31: break; //LWC1 case 0x32: return LWC2(); case 0x33: break; //LWC3 case 0x34: break; //LLD case 0x35: break; //LDC1 case 0x36: break; //LDC2 case 0x37: break; //LD case 0x38: break; //SC case 0x39: break; //SWC1 case 0x3a: return SWC2(); case 0x3b: break; //SWC3 case 0x3c: break; //SCD case 0x3d: break; //SDC1 case 0x3e: break; //SDC2 case 0x3f: break; //SD } return {}; } auto RSP::Disassembler::SPECIAL() -> vector { auto shift = [&] { return string{instruction >> 6 & 31}; }; auto rdName = [&] { return ipuRegisterName (instruction >> 11 & 31); }; auto rdValue = [&] { return ipuRegisterValue(instruction >> 11 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto ALU = [&](string_view name, string_view by) -> vector { return {name, rdName(), rtValue(), by}; }; auto JALR = [&](string_view name) -> vector { if((instruction >> 11 & 31) == 31) return {name, rsValue()}; return {name, rdName(), rsValue()}; }; auto REG = [&](string_view name) -> vector { return {name, rdName(), rsValue(), rtValue()}; }; switch(instruction & 0x3f) { case 0x00: return ALU("sll", shift()); case 0x01: break; case 0x02: return ALU("srl", shift()); case 0x03: return ALU("sra", shift()); case 0x04: return ALU("sllv", shift()); case 0x05: break; case 0x06: return ALU("srlv", rsValue()); case 0x07: return ALU("srav", rsValue()); case 0x08: return {"jr", rsValue()}; case 0x09: return JALR("jalr"); case 0x0a: break; case 0x0b: break; case 0x0c: break; //SYSCALL case 0x0d: return {"break"}; case 0x0e: break; case 0x0f: break; //SYNC case 0x10: break; //MFHI case 0x11: break; //MTHI case 0x12: break; //MFLO case 0x13: break; //MTLO case 0x14: break; //DSLLV case 0x15: break; case 0x16: break; //DSRLV case 0x17: break; //DSRAV case 0x18: break; //MULT case 0x19: break; //MULTU case 0x1a: break; //DIV case 0x1b: break; //DIVU case 0x1c: break; //DMULT case 0x1d: break; //DMULTU case 0x1e: break; //DDIV case 0x1f: break; //DDIVU case 0x20: return REG("add"); case 0x21: return REG("addu"); case 0x22: return REG("sub"); case 0x23: return REG("subu"); case 0x24: return REG("and"); case 0x25: return REG("or"); case 0x26: return REG("xor"); case 0x27: return REG("nor"); case 0x28: break; case 0x29: break; case 0x2a: return REG("slt"); case 0x2b: return REG("sltu"); case 0x2c: break; //DADD case 0x2d: break; //DADDU case 0x2e: break; //DSUB case 0x2f: break; //DSUBU case 0x30: break; //TGE case 0x31: break; //TGEU case 0x32: break; //TLT case 0x33: break; //TLTU case 0x34: break; //TEQ case 0x35: break; case 0x36: break; //TNE case 0x37: break; case 0x38: break; //DSLL case 0x39: break; case 0x3a: break; //DSRL case 0x3b: break; //DSRA case 0x3c: break; //DSLL32 case 0x3d: break; case 0x3e: break; //DSRL32 case 0x3f: break; //DSRA32 } return {}; } auto RSP::Disassembler::REGIMM() -> vector { auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto branch = [&] { return immediate(n12(address + 4 + (s16(instruction) << 2))); }; auto BRANCH = [&](string_view name) -> vector { return {name, rsValue(), branch()}; }; switch(instruction >> 16 & 0x1f) { case 0x00: return BRANCH("bltz"); case 0x01: return BRANCH("bgez"); case 0x02: break; //BLTZL case 0x03: break; //BGEZL case 0x04: break; case 0x05: break; case 0x06: break; case 0x07: break; case 0x08: break; //TGEI case 0x09: break; //TGEIU case 0x0a: break; //TLTI case 0x0b: break; //TLTIU case 0x0c: break; //TEQI case 0x0d: break; case 0x0e: break; //TNEI case 0x0f: break; case 0x10: return BRANCH("bltzal"); case 0x11: return BRANCH("bgezal"); case 0x12: break; //BLTZALL case 0x13: break; //BGEZALL case 0x14: break; case 0x15: break; case 0x16: break; case 0x17: break; case 0x18: break; case 0x19: break; case 0x1a: break; case 0x1b: break; case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; } return {}; } auto RSP::Disassembler::SCC() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto sdName = [&] { return sccRegisterName (instruction >> 11 & 31); }; auto sdValue = [&] { return sccRegisterValue(instruction >> 11 & 31); }; switch(instruction >> 21 & 0x1f) { case 0x00: return {"mfc0", rtName(), sdValue()}; case 0x04: return {"mtc0", sdName(), rtValue()}; } return {}; } auto RSP::Disassembler::LWC2() -> vector { auto vtName = [&] { return vpuRegisterName (instruction >> 16 & 31, instruction >> 7 & 15); }; auto vtValue = [&] { return vpuRegisterValue (instruction >> 16 & 31, instruction >> 7 & 15); }; auto offset = [&](u32 multiplier) { return ipuRegisterIndex(instruction >> 21 & 31, i7(instruction) * multiplier); }; switch(instruction >> 11 & 31) { case 0x00: return {"lbv", vtName(), offset( 1)}; case 0x01: return {"lsv", vtName(), offset( 2)}; case 0x02: return {"llv", vtName(), offset( 4)}; case 0x03: return {"ldv", vtName(), offset( 8)}; case 0x04: return {"lqv", vtName(), offset(16)}; case 0x05: return {"lrv", vtName(), offset(16)}; case 0x06: return {"lpv", vtName(), offset( 8)}; case 0x07: return {"luv", vtName(), offset( 8)}; case 0x08: return {"lhv", vtName(), offset(16)}; case 0x09: return {"lfv", vtName(), offset(16)}; //case 0x0a: return {"lwv", vtName(), offset(16)}; //not present on N64 RSP case 0x0b: return {"ltv", vtName(), offset(16)}; } return {}; } auto RSP::Disassembler::SWC2() -> vector { auto vtName = [&] { return vpuRegisterName (instruction >> 16 & 31); }; auto vtValue = [&] { return vpuRegisterValue (instruction >> 16 & 31); }; auto offset = [&](u32 multiplier) { return ipuRegisterIndex(instruction >> 21 & 31, i7(instruction) * multiplier); }; switch(instruction >> 11 & 31) { case 0x00: return {"sbv", vtValue(), offset( 1)}; case 0x01: return {"ssv", vtValue(), offset( 2)}; case 0x02: return {"slv", vtValue(), offset( 4)}; case 0x03: return {"sdv", vtValue(), offset( 8)}; case 0x04: return {"sqv", vtValue(), offset(16)}; case 0x05: return {"srv", vtValue(), offset(16)}; case 0x06: return {"spv", vtValue(), offset( 8)}; case 0x07: return {"suv", vtValue(), offset( 8)}; case 0x08: return {"shv", vtValue(), offset(16)}; case 0x09: return {"sfv", vtValue(), offset(16)}; case 0x0a: return {"swv", vtValue(), offset(16)}; case 0x0b: return {"stv", vtValue(), offset(16)}; } return {}; } auto RSP::Disassembler::VU() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rdName = [&] { return vpuRegisterName (instruction >> 11 & 31, instruction >> 7 & 15); }; auto rdValue = [&] { return vpuRegisterValue (instruction >> 11 & 31, instruction >> 7 & 15); }; auto cdName = [&] { return ccrRegisterName (instruction >> 11 & 31); }; auto cdValue = [&] { return ccrRegisterValue(instruction >> 11 & 31); }; switch(instruction >> 21 & 0x1f) { case 0x00: return {"mfc2", rtName(), rdValue()}; case 0x02: return {"cfc2", rtName(), cdValue()}; case 0x04: return {"mtc2", rtValue(), rdName()}; case 0x06: return {"ctc2", rtValue(), cdName()}; } if(!(instruction >> 25 & 1)) return {}; auto vdName = [&] { return vpuRegisterName (instruction >> 6 & 31); }; auto vdValue = [&] { return vpuRegisterValue(instruction >> 6 & 31); }; auto vsName = [&] { return vpuRegisterName (instruction >> 11 & 31); }; auto vsValue = [&] { return vpuRegisterValue(instruction >> 11 & 31); }; auto vtName = [&] { return vpuRegisterName (instruction >> 16 & 31, instruction >> 21 & 15); }; auto vtValue = [&] { return vpuRegisterValue(instruction >> 16 & 31, instruction >> 21 & 15); }; auto vmName = [&] { return vpuRegisterName (instruction >> 6 & 31, instruction >> 11 & 31); }; auto vmValue = [&] { return vpuRegisterValue(instruction >> 6 & 31, instruction >> 11 & 31); }; auto DST = [&](string_view name) -> vector { return {name, vdName(), vsValue(), vtValue()}; }; auto DSE = [&](string_view name) -> vector { static const string registerNames[] = { "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "acch", "accm", "accl", "r11", "r12", "r13", "r14", "r15", }; return {name, vdName(), vsValue(), registerNames[instruction >> 21 & 15]}; }; auto DT = [&](string_view name) -> vector { return {name, vmName(), vtValue()}; }; auto D = [&](string_view name) -> vector { return {name, vdName()}; }; switch(instruction & 0x3f) { case 0x00: return DST("vmulf"); case 0x01: return DST("vmulu"); case 0x02: return DST("vrndp"); case 0x03: return DST("vmulq"); case 0x04: return DST("vmudl"); case 0x05: return DST("vmudm"); case 0x06: return DST("vmudn"); case 0x07: return DST("vmudh"); case 0x08: return DST("vmacf"); case 0x09: return DST("vmacu"); case 0x0a: return DST("vrndn"); case 0x0b: return D("vmacq"); case 0x0c: return DST("vmadl"); case 0x0d: return DST("vmadm"); case 0x0e: return DST("vmadn"); case 0x0f: return DST("vmadh"); case 0x10: return DST("vadd"); case 0x11: return DST("vsub"); case 0x12: break; case 0x13: return DST("vabs"); case 0x14: return DST("vaddc"); case 0x15: return DST("vsubc"); case 0x16: break; case 0x17: break; case 0x18: break; case 0x19: break; case 0x1a: break; case 0x1b: break; case 0x1c: break; case 0x1d: return DSE("vsar"); case 0x1e: break; case 0x1f: break; case 0x20: return DST("vlt"); case 0x21: return DST("veq"); case 0x22: return DST("vne"); case 0x23: return DST("vge"); case 0x24: return DST("vcl"); case 0x25: return DST("vch"); case 0x26: return DST("vcr"); case 0x27: return DST("vmrg"); case 0x28: return DST("vand"); case 0x29: return DST("vnand"); case 0x2a: return DST("vor"); case 0x2b: return DST("vnor"); case 0x2c: return DST("vxor"); case 0x2d: return DST("vnxor"); case 0x2e: break; case 0x2f: break; case 0x30: return DT("vrcp"); case 0x31: return DT("vrcpl"); case 0x32: return DT("vrcph"); case 0x33: return DT("vmov"); case 0x34: return DT("vrsq"); case 0x35: return DT("vrsql"); case 0x36: return DT("vrsqh"); case 0x37: return {"vnop"}; case 0x38: break; case 0x39: break; case 0x3a: break; case 0x3b: break; case 0x3c: break; case 0x3d: break; case 0x3e: break; case 0x3f: break; } return {}; } auto RSP::Disassembler::immediate(s64 value, u32 bits) const -> string { if(value < 0) return {"-$", hex(-value, bits >> 2)}; return {"$", hex(value, bits >> 2)}; }; auto RSP::Disassembler::ipuRegisterName(u32 index) const -> string { static const string registers[32] = { "0", "at", "v0", "v1", "a0", "a1", "a2", "a3", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "t8", "t9", "k0", "k1", "gp", "sp", "s8", "ra", }; return registers[index]; } auto RSP::Disassembler::ipuRegisterValue(u32 index) const -> string { if(index && showValues) return {ipuRegisterName(index), hint("{$", hex(self.ipu.r[index].u32, 8L), "}")}; return ipuRegisterName(index); } auto RSP::Disassembler::ipuRegisterIndex(u32 index, s16 offset) const -> string { string adjust; if(offset >= 0) adjust = {"+$", hex( offset)}; if(offset < 0) adjust = {"-$", hex(-offset)}; if(index && showValues) return {ipuRegisterName(index), adjust, hint("{$", hex(self.ipu.r[index].u32 + offset, 8L), "}")}; return {ipuRegisterName(index), adjust}; } auto RSP::Disassembler::sccRegisterName(u32 index) const -> string { static const string registers[32] = { "SP_PBUS_ADDRESS", "SP_DRAM_ADDRESS", "SP_READ_LENGTH", "SP_WRITE_LENGTH", "SP_STATUS", "SP_DMA_FULL", "SP_DMA_BUSY", "SP_SEMAPHORE", "DPC_START", "DPC_END", "DPC_CURRENT", "DPC_STATUS", "DPC_CLOCK", "DPC_BUSY", "DPC_PIPE_BUSY", "DPC_TMEM_BUSY", }; return registers[index & 15]; } auto RSP::Disassembler::sccRegisterValue(u32 index) const -> string { u32 value = 0; if(index <= 6) value = rsp.readWord((index & 7) << 2); if(index == 7) value = self.status.semaphore; //rsp.readSCC(7) has side-effects if(index >= 8) value = rdp.readWord((index & 7) << 2); if(showValues) return {sccRegisterName(index), hint("{$", hex(value, 8L), "}")}; return sccRegisterName(index); } auto RSP::Disassembler::vpuRegisterName(u32 index, u32 element) const -> string { if(element) return {"v", index, "[", element, "]"}; return {"v", index}; } auto RSP::Disassembler::vpuRegisterValue(u32 index, u32 element) const -> string { if(showValues) { vector elements; for(u32 e : range(8)) elements.append(hex(self.vpu.r[index].element(e), 4L)); return {vpuRegisterName(index, element), hint("{$", elements.merge("|"), "}")}; } return vpuRegisterName(index, element); } auto RSP::Disassembler::ccrRegisterName(u32 index) const -> string { static const string registers[32] = {"vco", "vcc", "vce"}; if(index < 3) return registers[index]; return {"vc", index}; } auto RSP::Disassembler::ccrRegisterValue(u32 index) const -> string { if(showValues) return {ccrRegisterName(index)}; //todo return ccrRegisterName(index); } template auto RSP::Disassembler::hint(P&&... p) const -> string { if(showColors) return {"\e[0m\e[37m", forward

(p)..., "\e[0m"}; return {forward

(p)...}; } ares-126/ares/n64/rsp/dma.cpp000066400000000000000000000017641415063341600157430ustar00rootroot00000000000000auto RSP::dmaTransfer() -> void { if(dma.requests.empty()) return; auto request = *dma.requests.read(); auto region = !request.pbusRegion ? 0x0400'0000 : 0x0400'1000; if(request.type == DMA::Request::Type::Read) { for(u32 block : range(request.count)) { for(u32 offset = 0; offset < request.length; offset += 4) { u32 data = bus.read(request.dramAddress + offset); bus.write(region + request.pbusAddress + offset, data); } request.pbusAddress += request.length; request.dramAddress += request.length + request.skip; } } if(request.type == DMA::Request::Type::Write) { for(u32 block : range(request.count)) { for(u32 offset = 0; offset < request.length; offset += 4) { u32 data = bus.read(region + request.pbusAddress + offset); bus.write(request.dramAddress + offset, data); } request.pbusAddress += request.length; request.dramAddress += request.length + request.skip; } } } ares-126/ares/n64/rsp/interpreter-ipu.cpp000066400000000000000000000077201415063341600203360ustar00rootroot00000000000000#define PC ipu.pc #define RA ipu.r[31] auto RSP::ADDIU(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = s32(rs.u32 + imm); } auto RSP::ADDU(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = s32(rs.u32 + rt.u32); } auto RSP::AND(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = rs.u32 & rt.u32; } auto RSP::ANDI(r32& rt, cr32& rs, u16 imm) -> void { rt.u32 = rs.u32 & imm; } auto RSP::BEQ(cr32& rs, cr32& rt, s16 imm) -> void { if(rs.u32 == rt.u32) branch.take(PC + 4 + (imm << 2)); } auto RSP::BGEZ(cr32& rs, s16 imm) -> void { if(rs.s32 >= 0) branch.take(PC + 4 + (imm << 2)); } auto RSP::BGEZAL(cr32& rs, s16 imm) -> void { RA.u32 = s32(PC + 8); if(rs.s32 >= 0) branch.take(PC + 4 + (imm << 2)); } auto RSP::BGTZ(cr32& rs, s16 imm) -> void { if(rs.s32 > 0) branch.take(PC + 4 + (imm << 2)); } auto RSP::BLEZ(cr32& rs, s16 imm) -> void { if(rs.s32 <= 0) branch.take(PC + 4 + (imm << 2)); } auto RSP::BLTZ(cr32& rs, s16 imm) -> void { if(rs.s32 < 0) branch.take(PC + 4 + (imm << 2)); } auto RSP::BLTZAL(cr32& rs, s16 imm) -> void { RA.u32 = s32(PC + 8); if(rs.s32 < 0) branch.take(PC + 4 + (imm << 2)); } auto RSP::BNE(cr32& rs, cr32& rt, s16 imm) -> void { if(rs.u32 != rt.u32) branch.take(PC + 4 + (imm << 2)); } auto RSP::BREAK() -> void { status.halted = 1; status.broken = 1; if(status.interruptOnBreak) mi.raise(MI::IRQ::SP); branch.halt(); } auto RSP::J(u32 imm) -> void { branch.take((PC + 4 & 0xf000'0000) | (imm << 2)); } auto RSP::JAL(u32 imm) -> void { RA.u32 = s32(PC + 8); branch.take((PC + 4 & 0xf000'0000) | (imm << 2)); } auto RSP::JALR(r32& rd, cr32& rs) -> void { rd.u32 = s32(PC + 8); branch.take(rs.u32); } auto RSP::JR(cr32& rs) -> void { branch.take(rs.u32); } auto RSP::LB(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = s8(dmem.read(rs.u32 + imm)); } auto RSP::LBU(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = u8(dmem.read(rs.u32 + imm)); } auto RSP::LH(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = s16(dmem.readUnaligned(rs.u32 + imm)); } auto RSP::LHU(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = u16(dmem.readUnaligned(rs.u32 + imm)); } auto RSP::LUI(r32& rt, u16 imm) -> void { rt.u32 = s32(imm << 16); } auto RSP::LW(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = s32(dmem.readUnaligned(rs.u32 + imm)); } auto RSP::NOR(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = ~(rs.u32 | rt.u32); } auto RSP::OR(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = rs.u32 | rt.u32; } auto RSP::ORI(r32& rt, cr32& rs, u16 imm) -> void { rt.u32 = rs.u32 | imm; } auto RSP::SB(cr32& rt, cr32& rs, s16 imm) -> void { dmem.write(rs.u32 + imm, rt.u32); } auto RSP::SH(cr32& rt, cr32& rs, s16 imm) -> void { dmem.writeUnaligned(rs.u32 + imm, rt.u32); } auto RSP::SLL(r32& rd, cr32& rt, u8 sa) -> void { rd.u32 = s32(rt.u32 << sa); } auto RSP::SLLV(r32& rd, cr32& rt, cr32& rs) -> void { rd.u32 = s32(rt.u32 << (rs.u32 & 31)); } auto RSP::SLT(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = rs.s32 < rt.s32; } auto RSP::SLTI(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = rs.s32 < imm; } auto RSP::SLTIU(r32& rt, cr32& rs, s16 imm) -> void { rt.u32 = rs.u32 < imm; } auto RSP::SLTU(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = rs.u32 < rt.u32; } auto RSP::SRA(r32& rd, cr32& rt, u8 sa) -> void { rd.u32 = rt.s32 >> sa; } auto RSP::SRAV(r32& rd, cr32& rt, cr32& rs) -> void { rd.u32 = rt.s32 >> (rs.u32 & 31); } auto RSP::SRL(r32& rd, cr32& rt, u8 sa) -> void { rd.u32 = s32(rt.u32 >> sa); } auto RSP::SRLV(r32& rd, cr32& rt, cr32& rs) -> void { rd.u32 = s32(rt.u32 >> (rs.u32 & 31)); } auto RSP::SUBU(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = s32(rs.u32 - rt.u32); } auto RSP::SW(cr32& rt, cr32& rs, s16 imm) -> void { dmem.writeUnaligned(rs.u32 + imm, rt.u32); } auto RSP::XOR(r32& rd, cr32& rs, cr32& rt) -> void { rd.u32 = rs.u32 ^ rt.u32; } auto RSP::XORI(r32& rt, cr32& rs, u16 imm) -> void { rt.u32 = rs.u32 ^ imm; } #undef PC #undef RA ares-126/ares/n64/rsp/interpreter-scc.cpp000066400000000000000000000005601415063341600203040ustar00rootroot00000000000000auto RSP::MFC0(r32& rt, u8 rd) -> void { if((rd & 8) == 0) rt.u32 = Nintendo64::rsp.readWord((rd & 7) << 2); if((rd & 8) != 0) rt.u32 = Nintendo64::rdp.readWord((rd & 7) << 2); } auto RSP::MTC0(cr32& rt, u8 rd) -> void { if((rd & 8) == 0) Nintendo64::rsp.writeWord((rd & 7) << 2, rt.u32); if((rd & 8) != 0) Nintendo64::rdp.writeWord((rd & 7) << 2, rt.u32); } ares-126/ares/n64/rsp/interpreter-vpu.cpp000066400000000000000000001144621415063341600203550ustar00rootroot00000000000000#define ACCH vpu.acch #define ACCM vpu.accm #define ACCL vpu.accl #define VCOH vpu.vcoh #define VCOL vpu.vcol #define VCCH vpu.vcch #define VCCL vpu.vccl #define VCE vpu.vce #define DIVIN vpu.divin #define DIVOUT vpu.divout #define DIVDP vpu.divdp auto RSP::r128::operator()(u32 index) const -> r128 { if constexpr(Accuracy::RSP::SISD) { r128 v{*this}; switch(index) { case 0: break; case 1: break; case 2: v.u16(1) = v.u16(0); v.u16(3) = v.u16(2); v.u16(5) = v.u16(4); v.u16(7) = v.u16(6); break; case 3: v.u16(0) = v.u16(1); v.u16(2) = v.u16(3); v.u16(4) = v.u16(5); v.u16(6) = v.u16(7); break; case 4: v.u16(1) = v.u16(2) = v.u16(3) = v.u16(0); v.u16(5) = v.u16(6) = v.u16(7) = v.u16(4); break; case 5: v.u16(0) = v.u16(2) = v.u16(3) = v.u16(1); v.u16(4) = v.u16(6) = v.u16(7) = v.u16(5); break; case 6: v.u16(0) = v.u16(1) = v.u16(3) = v.u16(2); v.u16(4) = v.u16(5) = v.u16(7) = v.u16(6); break; case 7: v.u16(0) = v.u16(1) = v.u16(2) = v.u16(3); v.u16(4) = v.u16(5) = v.u16(6) = v.u16(7); break; case 8: for(u32 n : range(8)) v.u16(n) = v.u16(0); break; case 9: for(u32 n : range(8)) v.u16(n) = v.u16(1); break; case 10: for(u32 n : range(8)) v.u16(n) = v.u16(2); break; case 11: for(u32 n : range(8)) v.u16(n) = v.u16(3); break; case 12: for(u32 n : range(8)) v.u16(n) = v.u16(4); break; case 13: for(u32 n : range(8)) v.u16(n) = v.u16(5); break; case 14: for(u32 n : range(8)) v.u16(n) = v.u16(6); break; case 15: for(u32 n : range(8)) v.u16(n) = v.u16(7); break; } return v; } if constexpr(Accuracy::RSP::SIMD) { static const __m128i shuffle[16] = { //vector _mm_set_epi8(15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 _mm_set_epi8(15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0), //01234567 //scalar quarter _mm_set_epi8(15,14,15,14,11,10,11,10, 7, 6, 7, 6, 3, 2, 3, 2), //00224466 _mm_set_epi8(13,12,13,12, 9, 8, 9, 8, 5, 4, 5, 4, 1, 0, 1, 0), //11335577 //scalar half _mm_set_epi8(15,14,15,14,15,14,15,14, 7, 6, 7, 6, 7, 6, 7, 6), //00004444 _mm_set_epi8(13,12,13,12,13,12,13,12, 5, 4, 5, 4, 5, 4, 5, 4), //11115555 _mm_set_epi8(11,10,11,10,11,10,11,10, 3, 2, 3, 2, 3, 2, 3, 2), //22226666 _mm_set_epi8( 9, 8, 9, 8, 9, 8, 9, 8, 1, 0, 1, 0, 1, 0, 1, 0), //33337777 //scalar whole _mm_set_epi8(15,14,15,14,15,14,15,14,15,14,15,14,15,14,15,14), //00000000 _mm_set_epi8(13,12,13,12,13,12,13,12,13,12,13,12,13,12,13,12), //11111111 _mm_set_epi8(11,10,11,10,11,10,11,10,11,10,11,10,11,10,11,10), //22222222 _mm_set_epi8( 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8, 9, 8), //33333333 _mm_set_epi8( 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6), //44444444 _mm_set_epi8( 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4), //55555555 _mm_set_epi8( 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2), //66666666 _mm_set_epi8( 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0), //77777777 }; //todo: benchmark to see if testing for cases 0&1 to return value directly is faster return {uint128_t(_mm_shuffle_epi8(v128, shuffle[index]))}; } } auto RSP::accumulatorGet(u32 index) const -> u64 { return (u64)ACCH.u16(index) << 32 | (u64)ACCM.u16(index) << 16 | (u64)ACCL.u16(index) << 0; } auto RSP::accumulatorSet(u32 index, u64 value) -> void { ACCH.u16(index) = value >> 32; ACCM.u16(index) = value >> 16; ACCL.u16(index) = value >> 0; } auto RSP::accumulatorSaturate(u32 index, bool slice, u16 negative, u16 positive) const -> u16 { if(ACCH.s16(index) < 0) { if(ACCH.u16(index) != 0xffff) return negative; if(ACCM.s16(index) >= 0) return negative; } else { if(ACCH.u16(index) != 0x0000) return positive; if(ACCM.s16(index) < 0) return positive; } return !slice ? ACCL.u16(index) : ACCM.u16(index); } auto RSP::CFC2(r32& rt, u8 rd) -> void { r128 hi, lo; switch(rd & 3) { case 0x00: hi = VCOH; lo = VCOL; break; case 0x01: hi = VCCH; lo = VCCL; break; case 0x02: hi = zero; lo = VCE; break; case 0x03: hi = zero; lo = VCE; break; //unverified } if constexpr(Accuracy::RSP::SISD) { rt.u32 = 0; for(u32 n : range(8)) { rt.u32 |= lo.get(n) << 0 + n; rt.u32 |= hi.get(n) << 8 + n; } rt.u32 = s16(rt.u32); } if constexpr(Accuracy::RSP::SIMD) { static const v128 reverse = _mm_set_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); rt.u32 = s16(_mm_movemask_epi8(_mm_shuffle_epi8(_mm_packs_epi16(hi, lo), reverse))); } } auto RSP::CTC2(cr32& rt, u8 rd) -> void { maybe hi, lo; r128 null; switch(rd & 3) { case 0x00: hi = VCOH; lo = VCOL; break; case 0x01: hi = VCCH; lo = VCCL; break; case 0x02: hi = null; lo = VCE; break; case 0x03: hi = null; lo = VCE; break; //unverified } if constexpr(Accuracy::RSP::SISD) { for(u32 n : range(8)) { lo->set(n, rt.u32 & 1 << 0 + n); hi->set(n, rt.u32 & 1 << 8 + n); } } if constexpr(Accuracy::RSP::SIMD) { static const v128 mask = _mm_set_epi16(0x0101, 0x0202, 0x0404, 0x0808, 0x1010, 0x2020, 0x4040, 0x8080); lo->v128 = _mm_cmpeq_epi8(_mm_and_si128(_mm_shuffle_epi8(r128{~rt.u32 >> 0}, zero), mask), zero); hi->v128 = _mm_cmpeq_epi8(_mm_and_si128(_mm_shuffle_epi8(r128{~rt.u32 >> 8}, zero), mask), zero); } } auto RSP::LBV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm; vt.byte(e) = dmem.read(address); } auto RSP::LDV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 8; auto start = e; auto end = start + 8; for(u32 offset = start; offset < end; offset++) { vt.byte(offset & 15) = dmem.read(address++); } } auto RSP::LFV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = e >> 1; auto end = start + 4; for(u32 offset = start; offset < end; offset++) { vt.element(offset & 7) = dmem.read(address) << 7; address += 4; } } auto RSP::LHV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; for(u32 offset = 0; offset < 8; offset++) { vt.element(offset) = dmem.read(address + (16 - e + offset * 2 & 15)) << 7; } } auto RSP::LLV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 4; auto start = e; auto end = start + 4; for(u32 offset = start; offset < end; offset++) { vt.byte(offset & 15) = dmem.read(address++); } } auto RSP::LPV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 8; for(u32 offset = 0; offset < 8; offset++) { vt.element(offset) = dmem.read(address + (16 - e + offset & 15)) << 8; } } auto RSP::LQV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = e; auto end = 16 - (address & 15); for(u32 offset = start; offset < end; offset++) { vt.byte(offset & 15) = dmem.read(address++); } } auto RSP::LRV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto index = e; auto start = 16 - ((address & 15) - index); address &= ~15; for(u32 offset = start; offset < 16; offset++) { vt.byte(offset & 15) = dmem.read(address++); } } auto RSP::LSV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 2; auto start = e; auto end = start + 2; for(u32 offset = start; offset < end; offset++) { vt.byte(offset & 15) = dmem.read(address++); } } auto RSP::LTV(u8 vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = vt; auto end = min(32, start + 8); address = (address + 8 & ~15) + (e & 1); for(u32 offset = start; offset < end; offset++) { auto byte = (8 - (e >> 1) + (offset - start)) << 1; vpu.r[offset].byte(byte + 0 & 15) = dmem.read(address++); vpu.r[offset].byte(byte + 1 & 15) = dmem.read(address++); } } auto RSP::LUV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 8; for(u32 offset = 0; offset < 8; offset++) { vt.element(offset) = dmem.read(address + (16 - e + offset & 15)) << 7; } } auto RSP::LWV(r128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = 16 - e; auto end = e + 16; for(u32 offset = start; offset < end; offset++) { vt.byte(offset & 15) = dmem.read(address); address += 4; } } auto RSP::MFC2(r32& rt, cr128& vs, u8 e) -> void { auto hi = vs.byte(e + 0 & 15); auto lo = vs.byte(e + 1 & 15); rt.u32 = s16(hi << 8 | lo << 0); } auto RSP::MTC2(cr32& rt, r128& vs, u8 e) -> void { vs.byte(e + 0 & 15) = rt.u32 >> 8; vs.byte(e + 1 & 15) = rt.u32 >> 0; } auto RSP::SBV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm; dmem.write(address, vt.byte(e)); } auto RSP::SDV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 8; auto start = e; auto end = start + 8; for(u32 offset = start; offset < end; offset++) { dmem.write(address++, vt.byte(offset & 15)); } } auto RSP::SFV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = e >> 1; auto end = start + 4; auto base = address & 15; address &= ~15; for(u32 offset = start; offset < end; offset++) { dmem.write(address + (base & 15), vt.element(offset & 7) >> 7); base += 4; } } auto RSP::SHV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; for(u32 offset = 0; offset < 8; offset++) { auto byte = e + offset * 2; auto value = vt.byte(byte + 0 & 15) << 1 | vt.byte(byte + 1 & 15) >> 7; dmem.write(address, value); address += 2; } } auto RSP::SLV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 4; auto start = e; auto end = start + 4; for(u32 offset = start; offset < end; offset++) { dmem.write(address++, vt.byte(offset & 15)); } } auto RSP::SPV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 8; auto start = e; auto end = start + 8; for(u32 offset = start; offset < end; offset++) { if((offset & 15) < 8) { dmem.write(address++, vt.byte((offset & 7) << 1)); } else { dmem.write(address++, vt.element(offset & 7) >> 7); } } } auto RSP::SQV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = e; auto end = start + (16 - (address & 15)); for(u32 offset = start; offset < end; offset++) { dmem.write(address++, vt.byte(offset & 15)); } } auto RSP::SRV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = e; auto end = start + (address & 15); auto base = 16 - (address & 15); address &= ~15; for(u32 offset = start; offset < end; offset++) { dmem.write(address++, vt.byte(offset + base & 15)); } } auto RSP::SSV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 2; auto start = e; auto end = start + 2; for(u32 offset = start; offset < end; offset++) { dmem.write(address++, vt.byte(offset & 15)); } } auto RSP::STV(u8 vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = vt; auto end = min(32, start + 8); auto element = 8 - (e >> 1); auto base = (address & 15) + (element << 1); address &= ~15; for(u32 offset = start; offset < end; offset++) { dmem.writeUnaligned(address + (base & 15), vpu.r[offset].element(element++ & 7)); base += 2; } } auto RSP::SUV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 8; auto start = e; auto end = start + 8; for(u32 offset = start; offset < end; offset++) { if((offset & 15) < 8) { dmem.write(address++, vt.element(offset & 7) >> 7); } else { dmem.write(address++, vt.byte((offset & 7) << 1)); } } } auto RSP::SWV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void { auto address = rs.u32 + imm * 16; auto start = e; auto end = start + 16; auto base = address & 15; address &= ~15; for(u32 offset = start; offset < end; offset++) { dmem.write(address + (base++ & 15), vt.byte(offset & 15)); } } auto RSP::VABS(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { r128 vte = vt(e); for(u32 n : range(8)) { if(vs.s16(n) < 0) { if(vte.s16(n) == -32768) vte.s16(n) = -32767; ACCL.s16(n) = -vte.s16(n); } else if(vs.s16(n) > 0) { ACCL.s16(n) = +vte.s16(n); } else { ACCL.s16(n) = 0; } } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vs0, slt; vs0 = _mm_cmpeq_epi16(vs, zero); slt = _mm_srai_epi16(vs, 15); vd = _mm_andnot_si128(vs0, vt(e)); vd = _mm_xor_si128(vd, slt); ACCL = _mm_sub_epi16(vd, slt); vd = _mm_subs_epi16(vd, slt); } } auto RSP::VADD(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { s32 result = vs.s16(n) + vte.s16(n) + VCOL.get(n); ACCL.s16(n) = result; vd.s16(n) = sclamp<16>(result); } VCOL = zero; VCOH = zero; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), sum, min, max; sum = _mm_add_epi16(vs, vte); ACCL = _mm_sub_epi16(sum, VCOL); min = _mm_min_epi16(vs, vte); max = _mm_max_epi16(vs, vte); min = _mm_subs_epi16(min, VCOL); vd = _mm_adds_epi16(min, max); VCOL = zero; VCOH = zero; } } auto RSP::VADDC(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { u32 result = vs.u16(n) + vte.u16(n); ACCL.u16(n) = result; VCOL.set(n, result >> 16); } VCOH = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), sum; sum = _mm_adds_epu16(vs, vte); ACCL = _mm_add_epi16(vs, vte); VCOL = _mm_cmpeq_epi16(sum, ACCL); VCOL = _mm_cmpeq_epi16(VCOL, zero); VCOH = zero; vd = ACCL; } } auto RSP::VAND(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { r128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = vs.u16(n) & vte.u16(n); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_and_si128(vs, vt(e)); vd = ACCL; } } auto RSP::VCH(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { if((vs.s16(n) ^ vte.s16(n)) < 0) { s16 result = vs.s16(n) + vte.s16(n); ACCL.s16(n) = (result <= 0 ? -vte.s16(n) : vs.s16(n)); VCCL.set(n, result <= 0); VCCH.set(n, vte.s16(n) < 0); VCOL.set(n, 1); VCOH.set(n, result != 0 && vs.u16(n) != (vte.u16(n) ^ 0xffff)); VCE.set(n, result == -1); } else { s16 result = vs.s16(n) - vte.s16(n); ACCL.s16(n) = (result >= 0 ? vte.s16(n) : vs.s16(n)); VCCL.set(n, vte.s16(n) < 0); VCCH.set(n, result >= 0); VCOL.set(n, 0); VCOH.set(n, result != 0 && vs.u16(n) != (vte.u16(n) ^ 0xffff)); VCE.set(n, 0); } } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), nvt, diff, diff0, vtn, dlez, dgez, mask; VCOL = _mm_xor_si128(vs, vte); VCOL = _mm_cmplt_epi16(VCOL, zero); nvt = _mm_xor_si128(vte, VCOL); nvt = _mm_sub_epi16(nvt, VCOL); diff = _mm_sub_epi16(vs, nvt); diff0 = _mm_cmpeq_epi16(diff, zero); vtn = _mm_cmplt_epi16(vte, zero); dlez = _mm_cmpgt_epi16(diff, zero); dgez = _mm_or_si128(dlez, diff0); dlez = _mm_cmpeq_epi16(zero, dlez); VCCH = _mm_blendv_epi8(dgez, vtn, VCOL); VCCL = _mm_blendv_epi8(vtn, dlez, VCOL); VCE = _mm_cmpeq_epi16(diff, VCOL); VCE = _mm_and_si128(VCE, VCOL); VCOH = _mm_or_si128(diff0, VCE); VCOH = _mm_cmpeq_epi16(VCOH, zero); mask = _mm_blendv_epi8(VCCH, VCCL, VCOL); ACCL = _mm_blendv_epi8(vs, nvt, mask); vd = ACCL; } } auto RSP::VCL(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { if(VCOL.get(n)) { if(VCOH.get(n)) { ACCL.u16(n) = VCCL.get(n) ? -vte.u16(n) : vs.u16(n); } else if(VCE.get(n)) { ACCL.u16(n) = VCCL.set(n, vs.u16(n) + vte.u16(n) <= 0xffff) ? -vte.u16(n) : vs.u16(n); } else { ACCL.u16(n) = VCCL.set(n, vs.u16(n) + vte.u16(n) == 0) ? -vte.u16(n) : vs.u16(n); } } else { if(VCOH.get(n)) { ACCL.u16(n) = VCCH.get(n) ? vte.u16(n) : vs.u16(n); } else { ACCL.u16(n) = VCCH.set(n, (s32)vs.u16(n) - (s32)vte.u16(n) >= 0) ? vte.u16(n) : vs.u16(n); } } } VCOL = zero; VCOH = zero; VCE = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), nvt, diff, ncarry, nvce, diff0, lec1, lec2, leeq, geeq, le, ge, mask; nvt = _mm_xor_si128(vte, VCOL); nvt = _mm_sub_epi16(nvt, VCOL); diff = _mm_sub_epi16(vs, nvt); ncarry = _mm_adds_epu16(vs, vte); ncarry = _mm_cmpeq_epi16(diff, ncarry); nvce = _mm_cmpeq_epi16(VCE, zero); diff0 = _mm_cmpeq_epi16(diff, zero); lec1 = _mm_and_si128(diff0, ncarry); lec1 = _mm_and_si128(nvce, lec1); lec2 = _mm_or_si128(diff0, ncarry); lec2 = _mm_and_si128(VCE, lec2); leeq = _mm_or_si128(lec1, lec2); geeq = _mm_subs_epu16(vte, vs); geeq = _mm_cmpeq_epi16(geeq, zero); le = _mm_andnot_si128(VCOH, VCOL); le = _mm_blendv_epi8(VCCL, leeq, le); ge = _mm_or_si128(VCOL, VCOH); ge = _mm_blendv_epi8(geeq, VCCH, ge); mask = _mm_blendv_epi8(ge, le, VCOL); ACCL = _mm_blendv_epi8(vs, nvt, mask); VCCH = ge; VCCL = le; VCOH = zero; VCOL = zero; VCE = zero; vd = ACCL; } } auto RSP::VCR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { if((vs.s16(n) ^ vte.s16(n)) < 0) { VCCH.set(n, vte.s16(n) < 0); ACCL.u16(n) = VCCL.set(n, vs.s16(n) + vte.s16(n) + 1 <= 0) ? ~vte.u16(n) : vs.u16(n); } else { VCCL.set(n, vte.s16(n) < 0); ACCL.u16(n) = VCCH.set(n, vs.s16(n) - vte.s16(n) >= 0) ? vte.u16(n) : vs.u16(n); } } VCOL = zero; VCOH = zero; VCE = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), sign, dlez, dgez, nvt, mask; sign = _mm_xor_si128(vs, vte); sign = _mm_srai_epi16(sign, 15); dlez = _mm_and_si128(vs, sign); dlez = _mm_add_epi16(dlez, vte); VCCL = _mm_srai_epi16(dlez, 15); dgez = _mm_or_si128(vs, sign); dgez = _mm_min_epi16(dgez, vte); VCCH = _mm_cmpeq_epi16(dgez, vte); nvt = _mm_xor_si128(vte, sign); mask = _mm_blendv_epi8(VCCH, VCCL, sign); ACCL = _mm_blendv_epi8(vs, nvt, mask); vd = ACCL; VCOL = zero; VCOH = zero; VCE = zero; } } auto RSP::VEQ(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = VCCL.set(n, !VCE.get(n) && vs.u16(n) == vte.u16(n)) ? vs.u16(n) : vte.u16(n); } VCCH = zero; //unverified VCOL = zero; VCOH = zero; VCE = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), eq; eq = _mm_cmpeq_epi16(vs, vte); VCCL = _mm_andnot_si128(VCOH, eq); ACCL = _mm_blendv_epi8(vte, vs, VCCL); VCCH = zero; //unverified VCOH = zero; VCOL = zero; vd = ACCL; } } auto RSP::VGE(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = VCCL.set(n, vs.s16(n) > vte.s16(n) || (vs.s16(n) == vte.s16(n) && (!VCOL.get(n) || VCE.get(n)))) ? vs.u16(n) : vte.u16(n); } VCCH = zero; //unverified VCOL = zero; VCOH = zero; VCE = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), eq, gt, es; eq = _mm_cmpeq_epi16(vs, vte); gt = _mm_cmpgt_epi16(vs, vte); es = _mm_and_si128(VCOH, VCOL); eq = _mm_andnot_si128(es, eq); VCCL = _mm_or_si128(gt, eq); ACCL = _mm_blendv_epi8(vte, vs, VCCL); VCCH = zero; VCOH = zero; VCOL = zero; vd = ACCL; } } auto RSP::VLT(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = VCCL.set(n, vs.s16(n) < vte.s16(n) || (vs.s16(n) == vte.s16(n) && VCOL.get(n) && !VCE.get(n))) ? vs.u16(n) : vte.u16(n); } VCCH = zero; //unverified VCOL = zero; VCOH = zero; VCE = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), eq, lt; eq = _mm_cmpeq_epi16(vs, vte); lt = _mm_cmplt_epi16(vs, vte); eq = _mm_and_si128(VCOH, eq); eq = _mm_and_si128(VCOL, eq); VCCL = _mm_or_si128(lt, eq); ACCL = _mm_blendv_epi8(vte, vs, VCCL); VCCH = zero; VCOH = zero; VCOL = zero; vd = ACCL; } } template auto RSP::VMACF(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, accumulatorGet(n) + vs.s16(n) * vte.s16(n) * 2); if constexpr(U == 0) { vd.u16(n) = accumulatorSaturate(n, 1, 0x8000, 0x7fff); } if constexpr(U == 1) { vd.u16(n) = ACCH.s16(n) < 0 ? 0x0000 : ACCH.s16(n) || ACCM.s16(n) < 0 ? 0xffff : ACCM.u16(n); } } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), lo, md, hi, carry, omask; lo = _mm_mullo_epi16(vs, vte); hi = _mm_mulhi_epi16(vs, vte); md = _mm_slli_epi16(hi, 1); carry = _mm_srli_epi16(lo, 15); hi = _mm_srai_epi16(hi, 15); md = _mm_or_si128(md, carry); lo = _mm_slli_epi16(lo, 1); omask = _mm_adds_epu16(ACCL, lo); ACCL = _mm_add_epi16(ACCL, lo); omask = _mm_cmpeq_epi16(ACCL, omask); omask = _mm_cmpeq_epi16(omask, zero); md = _mm_sub_epi16(md, omask); carry = _mm_cmpeq_epi16(md, zero); carry = _mm_and_si128(carry, omask); hi = _mm_sub_epi16(hi, carry); omask = _mm_adds_epu16(ACCM, md); ACCM = _mm_add_epi16(ACCM, md); omask = _mm_cmpeq_epi16(ACCM, omask); omask = _mm_cmpeq_epi16(omask, zero); ACCH = _mm_add_epi16(ACCH, hi); ACCH = _mm_sub_epi16(ACCH, omask); if constexpr(!U) { lo = _mm_unpacklo_epi16(ACCM, ACCH); hi = _mm_unpackhi_epi16(ACCM, ACCH); vd = _mm_packs_epi32(lo, hi); } else { r128 mmask, hmask; mmask = _mm_srai_epi16(ACCM, 15); hmask = _mm_srai_epi16(ACCH, 15); md = _mm_or_si128(mmask, ACCM); omask = _mm_cmpgt_epi16(ACCH, zero); md = _mm_andnot_si128(hmask, md); vd = _mm_or_si128(omask, md); } } } auto RSP::VMACQ(r128& vd) -> void { for(u32 n : range(8)) { s32 product = ACCH.element(n) << 16 | ACCM.element(n) << 0; if(product < 0 && !(product & 1 << 5)) product += 32; else if(product >= 0 && !(product & 1 << 5)) product -= 32; ACCH.element(n) = product >> 16; ACCM.element(n) = product >> 0; ACCL.element(n) = 0; //unconfirmed vd.element(n) = sclamp<16>(product >> 1) & ~15; } } auto RSP::VMADH(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { s32 result = (accumulatorGet(n) >> 16) + vs.s16(n) * vte.s16(n); ACCH.u16(n) = result >> 16; ACCM.u16(n) = result >> 0; vd.u16(n) = accumulatorSaturate(n, 1, 0x8000, 0x7fff); } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), lo, hi, omask; lo = _mm_mullo_epi16(vs, vte); hi = _mm_mulhi_epi16(vs, vte); omask = _mm_adds_epu16(ACCM, lo); ACCM = _mm_add_epi16(ACCM, lo); omask = _mm_cmpeq_epi16(ACCM, omask); omask = _mm_cmpeq_epi16(omask, zero); hi = _mm_sub_epi16(hi, omask); ACCH = _mm_add_epi16(ACCH, hi); lo = _mm_unpacklo_epi16(ACCM, ACCH); hi = _mm_unpackhi_epi16(ACCM, ACCH); vd = _mm_packs_epi32(lo, hi); } } auto RSP::VMADL(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, accumulatorGet(n) + (u32(vs.u16(n) * vte.u16(n)) >> 16)); vd.u16(n) = accumulatorSaturate(n, 0, 0x0000, 0xffff); } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), hi, omask, nhi, nmd, shi, smd, cmask, cval; hi = _mm_mulhi_epu16(vs, vte); omask = _mm_adds_epu16(ACCL, hi); ACCL = _mm_add_epi16(ACCL, hi); omask = _mm_cmpeq_epi16(ACCL, omask); omask = _mm_cmpeq_epi16(omask, zero); hi = _mm_sub_epi16(zero, omask); omask = _mm_adds_epu16(ACCM, hi); ACCM = _mm_add_epi16(ACCM, hi); omask = _mm_cmpeq_epi16(ACCM, omask); omask = _mm_cmpeq_epi16(omask, zero); ACCH = _mm_sub_epi16(ACCH, omask); nhi = _mm_srai_epi16(ACCH, 15); nmd = _mm_srai_epi16(ACCM, 15); shi = _mm_cmpeq_epi16(nhi, ACCH); smd = _mm_cmpeq_epi16(nhi, nmd); cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, zero); vd = _mm_blendv_epi8(cval, ACCL, cmask); } } auto RSP::VMADM(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, accumulatorGet(n) + vs.s16(n) * vte.u16(n)); vd.u16(n) = accumulatorSaturate(n, 1, 0x8000, 0x7fff); } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), lo, hi, sign, vta, omask; lo = _mm_mullo_epi16(vs, vte); hi = _mm_mulhi_epu16(vs, vte); sign = _mm_srai_epi16(vs, 15); vta = _mm_and_si128(vte, sign); hi = _mm_sub_epi16(hi, vta); omask = _mm_adds_epu16(ACCL, lo); ACCL = _mm_add_epi16(ACCL, lo); omask = _mm_cmpeq_epi16(ACCL, omask); omask = _mm_cmpeq_epi16(omask, zero); hi = _mm_sub_epi16(hi, omask); omask = _mm_adds_epu16(ACCM, hi); ACCM = _mm_add_epi16(ACCM, hi); omask = _mm_cmpeq_epi16(ACCM, omask); omask = _mm_cmpeq_epi16(omask, zero); hi = _mm_srai_epi16(hi, 15); ACCH = _mm_add_epi16(ACCH, hi); ACCH = _mm_sub_epi16(ACCH, omask); lo = _mm_unpacklo_epi16(ACCM, ACCH); hi = _mm_unpackhi_epi16(ACCM, ACCH); vd = _mm_packs_epi32(lo, hi); } } auto RSP::VMADN(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, accumulatorGet(n) + s64(vs.u16(n) * vte.s16(n))); vd.u16(n) = accumulatorSaturate(n, 0, 0x0000, 0xffff); } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), lo, hi, sign, vsa, omask, nhi, nmd, shi, smd, cmask, cval; lo = _mm_mullo_epi16(vs, vte); hi = _mm_mulhi_epu16(vs, vte); sign = _mm_srai_epi16(vte, 15); vsa = _mm_and_si128(vs, sign); hi = _mm_sub_epi16(hi, vsa); omask = _mm_adds_epu16(ACCL, lo); ACCL = _mm_add_epi16(ACCL, lo); omask = _mm_cmpeq_epi16(ACCL, omask); omask = _mm_cmpeq_epi16(omask, zero); hi = _mm_sub_epi16(hi, omask); omask = _mm_adds_epu16(ACCM, hi); ACCM = _mm_add_epi16(ACCM, hi); omask = _mm_cmpeq_epi16(ACCM, omask); omask = _mm_cmpeq_epi16(omask, zero); hi = _mm_srai_epi16(hi, 15); ACCH = _mm_add_epi16(ACCH, hi); ACCH = _mm_sub_epi16(ACCH, omask); nhi = _mm_srai_epi16(ACCH, 15); nmd = _mm_srai_epi16(ACCM, 15); shi = _mm_cmpeq_epi16(nhi, ACCH); smd = _mm_cmpeq_epi16(nhi, nmd); cmask = _mm_and_si128(smd, shi); cval = _mm_cmpeq_epi16(nhi, zero); vd = _mm_blendv_epi8(cval, ACCL, cmask); } } auto RSP::VMOV(r128& vd, u8 de, cr128& vt, u8 e) -> void { switch(e) { case 0x0 ... 0x1: e = e & 0b000 | de & 0b111; break; //hardware glitch case 0x2 ... 0x3: e = e & 0b001 | de & 0b110; break; //hardware glitch case 0x4 ... 0x7: e = e & 0b011 | de & 0b100; break; //hardware glitch case 0x8 ... 0xf: e = e & 0b111 | de & 0b000; break; //normal behavior } vd.u16(de) = vt.u16(e); ACCL = vt(e); } auto RSP::VMRG(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = VCCL.get(n) ? vs.u16(n) : vte.u16(n); } VCOH = zero; VCOL = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_blendv_epi8(vt(e), vs, VCCL); VCOH = zero; VCOL = zero; vd = ACCL; } } auto RSP::VMUDH(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, s64(vs.s16(n) * vte.s16(n)) << 16); vd.u16(n) = accumulatorSaturate(n, 1, 0x8000, 0x7fff); } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), lo, hi; ACCL = zero; ACCM = _mm_mullo_epi16(vs, vte); ACCH = _mm_mulhi_epi16(vs, vte); lo = _mm_unpacklo_epi16(ACCM, ACCH); hi = _mm_unpackhi_epi16(ACCM, ACCH); vd = _mm_packs_epi32(lo, hi); } } auto RSP::VMUDL(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, u16(vs.u16(n) * vte.u16(n) >> 16)); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_mulhi_epu16(vs, vt(e)); ACCM = zero; ACCH = zero; vd = ACCL; } } auto RSP::VMUDM(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, s32(vs.s16(n) * vte.u16(n))); } vd = ACCM; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), sign, vta; ACCL = _mm_mullo_epi16(vs, vte); ACCM = _mm_mulhi_epu16(vs, vte); sign = _mm_srai_epi16(vs, 15); vta = _mm_and_si128(vte, sign); ACCM = _mm_sub_epi16(ACCM, vta); ACCH = _mm_srai_epi16(ACCM, 15); vd = ACCM; } } auto RSP::VMUDN(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, s32(vs.u16(n) * vte.s16(n))); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), sign, vsa; ACCL = _mm_mullo_epi16(vs, vte); ACCM = _mm_mulhi_epu16(vs, vte); sign = _mm_srai_epi16(vte, 15); vsa = _mm_and_si128(vs, sign); ACCM = _mm_sub_epi16(ACCM, vsa); ACCH = _mm_srai_epi16(ACCM, 15); vd = ACCL; } } template auto RSP::VMULF(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { accumulatorSet(n, vs.s16(n) * vte.s16(n) * 2 + 0x8000); if constexpr(U == 0) { vd.u16(n) = ACCM.u16(n); } if constexpr(U == 1) { vd.u16(n) = ACCH.s16(n) < 0 ? 0x0000 : (ACCH.s16(n) ^ ACCM.s16(n)) < 0 ? 0xffff : ACCM.u16(n); } } } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), lo, hi, round, sign1, sign2, neq, eq, neg; lo = _mm_mullo_epi16(vs, vte); round = _mm_cmpeq_epi16(zero, zero); sign1 = _mm_srli_epi16(lo, 15); lo = _mm_add_epi16(lo, lo); round = _mm_slli_epi16(round, 15); hi = _mm_mulhi_epi16(vs, vte); sign2 = _mm_srli_epi16(lo, 15); ACCL = _mm_add_epi16(round, lo); sign1 = _mm_add_epi16(sign1, sign2); hi = _mm_slli_epi16(hi, 1); neq = _mm_cmpeq_epi16(vs, vte); ACCM = _mm_add_epi16(hi, sign1); neg = _mm_srai_epi16(ACCM, 15); if constexpr(!U) { eq = _mm_and_si128(neq, neg); ACCH = _mm_andnot_si128(neq, neg); vd = _mm_add_epi16(ACCM, eq); } else { ACCH = _mm_andnot_si128(neq, neg); hi = _mm_or_si128(ACCM, neg); vd = _mm_andnot_si128(ACCH, hi); } } } auto RSP::VMULQ(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { cr128 vte = vt(e); for(u32 n : range(8)) { s32 product = (s16)vs.element(n) * (s16)vte.element(n); if(product < 0) product += 31; //round ACCH.element(n) = product >> 16; ACCM.element(n) = product >> 0; ACCL.element(n) = 0; //unconfirmed vd.element(n) = sclamp<16>(product >> 1) & ~15; } } auto RSP::VNAND(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = ~(vs.u16(n) & vte.u16(n)); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_and_si128(vs, vt(e)); ACCL = _mm_xor_si128(ACCL, invert); vd = ACCL; } } auto RSP::VNE(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = VCCL.set(n, vs.u16(n) != vte.u16(n) || VCE.get(n)) ? vs.u16(n) : vte.u16(n); } VCCH = zero; //unverified VCOL = zero; VCOH = zero; VCE = zero; vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), eq, ne; eq = _mm_cmpeq_epi16(vs, vte); ne = _mm_cmpeq_epi16(eq, zero); VCCL = _mm_and_si128(VCOH, eq); VCCL = _mm_or_si128(VCCL, ne); ACCL = _mm_blendv_epi8(vte, vs, VCCL); VCCH = zero; VCOH = zero; VCOL = zero; vd = ACCL; } } auto RSP::VNOP() -> void { } auto RSP::VNOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = ~(vs.u16(n) | vte.u16(n)); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_or_si128(vs, vt(e)); ACCL = _mm_xor_si128(ACCL, invert); vd = ACCL; } } auto RSP::VNXOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = ~(vs.u16(n) ^ vte.u16(n)); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_xor_si128(vs, vt(e)); ACCL = _mm_xor_si128(ACCL, invert); vd = ACCL; } } auto RSP::VOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = vs.u16(n) | vte.u16(n); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_or_si128(vs, vt(e)); vd = ACCL; } } template auto RSP::VRCP(r128& vd, u8 de, cr128& vt, u8 e) -> void { s32 result = 0; s32 input = L && DIVDP ? DIVIN << 16 | vt.element(e & 7) : s16(vt.element(e & 7)); s32 mask = input >> 31; s32 data = input ^ mask; if(input > -32768) data -= mask; if(data == 0) { result = 0x7fff'ffff; } else if(input == -32768) { result = 0xffff'0000; } else { u32 shift = __builtin_clz(data); u32 index = (u64(data) << shift & 0x7fc0'0000) >> 22; result = reciprocals[index]; result = (0x10000 | result) << 14; result = result >> 31 - shift ^ mask; } DIVDP = 0; DIVOUT = result >> 16; ACCL = vt(e); vd.element(de) = result; } auto RSP::VRCPH(r128& vd, u8 de, cr128& vt, u8 e) -> void { ACCL = vt(e); DIVDP = 1; DIVIN = vt.element(e & 7); vd.element(de) = DIVOUT; } template auto RSP::VRND(r128& vd, u8 vs, cr128& vt, u8 e) -> void { cr128 vte = vt(e); for(u32 n : range(8)) { s32 product = (s16)vte.element(n); if(vs & 1) product <<= 16; s64 acc = 0; acc |= ACCH.element(n); acc <<= 16; acc |= ACCM.element(n); acc <<= 16; acc |= ACCL.element(n); acc <<= 16; acc >>= 16; if(D == 0 && acc < 0) acc += product; if(D == 1 && acc >= 0) acc += product; ACCH.element(n) = acc >> 32; ACCM.element(n) = acc >> 16; ACCL.element(n) = acc >> 0; vd.element(n) = acc >> 16; } } template auto RSP::VRSQ(r128& vd, u8 de, cr128& vt, u8 e) -> void { s32 result = 0; s32 input = L && DIVDP ? DIVIN << 16 | vt.element(e & 7) : s16(vt.element(e & 7)); s32 mask = input >> 31; s32 data = input ^ mask; if(input > -32768) data -= mask; if(data == 0) { result = 0x7fff'ffff; } else if(input == -32768) { result = 0xffff'0000; } else { u32 shift = __builtin_clz(data); u32 index = (u64(data) << shift & 0x7fc0'0000) >> 22; result = inverseSquareRoots[index & 0x1fe | shift & 1]; result = (0x10000 | result) << 14; result = result >> (31 - shift >> 1) ^ mask; } DIVDP = 0; DIVOUT = result >> 16; ACCL = vt(e); vd.element(de) = result; } auto RSP::VRSQH(r128& vd, u8 de, cr128& vt, u8 e) -> void { ACCL = vt(e); DIVDP = 1; DIVIN = vt.element(e & 7); vd.element(de) = DIVOUT; } auto RSP::VSAR(r128& vd, cr128& vs, u8 e) -> void { switch(e) { case 0x8: vd = ACCH; break; case 0x9: vd = ACCM; break; case 0xa: vd = ACCL; break; default: vd = zero; break; } } auto RSP::VSUB(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { s32 result = vs.s16(n) - vte.s16(n) - VCOL.get(n); ACCL.s16(n) = result; vd.s16(n) = sclamp<16>(result); } VCOL = zero; VCOH = zero; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), udiff, sdiff, ov; udiff = _mm_sub_epi16(vte, VCOL); sdiff = _mm_subs_epi16(vte, VCOL); ACCL = _mm_sub_epi16(vs, udiff); ov = _mm_cmpgt_epi16(sdiff, udiff); vd = _mm_subs_epi16(vs, sdiff); vd = _mm_adds_epi16(vd, ov); VCOL = zero; VCOH = zero; } } auto RSP::VSUBC(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { u32 result = vs.u16(n) - vte.u16(n); ACCL.u16(n) = result; VCOL.set(n, result >> 16); VCOH.set(n, result != 0); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { r128 vte = vt(e), equal, udiff, diff0; udiff = _mm_subs_epu16(vs, vte); equal = _mm_cmpeq_epi16(vs, vte); diff0 = _mm_cmpeq_epi16(udiff, zero); VCOH = _mm_cmpeq_epi16(equal, zero); VCOL = _mm_andnot_si128(equal, diff0); ACCL = _mm_sub_epi16(vs, vte); vd = ACCL; } } auto RSP::VXOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void { if constexpr(Accuracy::RSP::SISD) { cr128 vte = vt(e); for(u32 n : range(8)) { ACCL.u16(n) = vs.u16(n) ^ vte.u16(n); } vd = ACCL; } if constexpr(Accuracy::RSP::SIMD) { ACCL = _mm_xor_si128(vs, vt(e)); vd = ACCL; } } #undef ACCH #undef ACCM #undef ACCL #undef VCOH #undef VCOL #undef VCCH #undef VCCL #undef VCE #undef DIVIN #undef DIVOUT #undef DIVDP ares-126/ares/n64/rsp/interpreter.cpp000066400000000000000000000226141415063341600175420ustar00rootroot00000000000000#define OP pipeline.instruction #define RD ipu.r[RDn] #define RT ipu.r[RTn] #define RS ipu.r[RSn] #define VD vpu.r[VDn] #define VS vpu.r[VSn] #define VT vpu.r[VTn] #define jp(id, name, ...) case id: return decoder##name(__VA_ARGS__) #define op(id, name, ...) case id: return name(__VA_ARGS__) #define br(id, name, ...) case id: return name(__VA_ARGS__) #define SA (OP >> 6 & 31) #define RDn (OP >> 11 & 31) #define RTn (OP >> 16 & 31) #define RSn (OP >> 21 & 31) #define VDn (OP >> 6 & 31) #define VSn (OP >> 11 & 31) #define VTn (OP >> 16 & 31) #define IMMi16 s16(OP) #define IMMu16 u16(OP) #define IMMu26 (OP & 0x03ff'ffff) auto RSP::decoderEXECUTE() -> void { switch(OP >> 26) { jp(0x00, SPECIAL); jp(0x01, REGIMM); br(0x02, J, IMMu26); br(0x03, JAL, IMMu26); br(0x04, BEQ, RS, RT, IMMi16); br(0x05, BNE, RS, RT, IMMi16); br(0x06, BLEZ, RS, IMMi16); br(0x07, BGTZ, RS, IMMi16); op(0x08, ADDIU, RT, RS, IMMi16); //ADDI op(0x09, ADDIU, RT, RS, IMMi16); op(0x0a, SLTI, RT, RS, IMMi16); op(0x0b, SLTIU, RT, RS, IMMi16); op(0x0c, ANDI, RT, RS, IMMu16); op(0x0d, ORI, RT, RS, IMMu16); op(0x0e, XORI, RT, RS, IMMu16); op(0x0f, LUI, RT, IMMu16); jp(0x10, SCC); op(0x11, INVALID); //COP1 jp(0x12, VU); op(0x13, INVALID); //COP3 op(0x14, INVALID); //BEQL op(0x15, INVALID); //BNEL op(0x16, INVALID); //BLEZL op(0x17, INVALID); //BGTZL op(0x18, INVALID); //DADDI op(0x19, INVALID); //DADDIU op(0x1a, INVALID); //LDL op(0x1b, INVALID); //LDR op(0x1c, INVALID); op(0x1d, INVALID); op(0x1e, INVALID); op(0x1f, INVALID); op(0x20, LB, RT, RS, IMMi16); op(0x21, LH, RT, RS, IMMi16); op(0x22, INVALID); //LWL op(0x23, LW, RT, RS, IMMi16); op(0x24, LBU, RT, RS, IMMi16); op(0x25, LHU, RT, RS, IMMi16); op(0x26, INVALID); //LWR op(0x27, INVALID); //LWU op(0x28, SB, RT, RS, IMMi16); op(0x29, SH, RT, RS, IMMi16); op(0x2a, INVALID); //SWL op(0x2b, SW, RT, RS, IMMi16); op(0x2c, INVALID); //SDL op(0x2d, INVALID); //SDR op(0x2e, INVALID); //SWR op(0x2f, INVALID); //CACHE op(0x30, INVALID); //LL op(0x31, INVALID); //LWC1 jp(0x32, LWC2); op(0x33, INVALID); //LWC3 op(0x34, INVALID); //LLD op(0x35, INVALID); //LDC1 op(0x36, INVALID); //LDC2 op(0x37, INVALID); //LD op(0x38, INVALID); //SC op(0x39, INVALID); //SWC1 jp(0x3a, SWC2); op(0x3b, INVALID); //SWC3 op(0x3c, INVALID); //SCD op(0x3d, INVALID); //SDC1 op(0x3e, INVALID); //SDC2 op(0x3f, INVALID); //SD } } auto RSP::decoderSPECIAL() -> void { switch(OP & 0x3f) { op(0x00, SLL, RD, RT, SA); op(0x01, INVALID); op(0x02, SRL, RD, RT, SA); op(0x03, SRA, RD, RT, SA); op(0x04, SLLV, RD, RT, RS); op(0x05, INVALID); op(0x06, SRLV, RD, RT, RS); op(0x07, SRAV, RD, RT, RS); br(0x08, JR, RS); br(0x09, JALR, RD, RS); op(0x0a, INVALID); op(0x0b, INVALID); op(0x0c, INVALID); //SYSCALL br(0x0d, BREAK); op(0x0e, INVALID); op(0x0f, INVALID); //SYNC op(0x10, INVALID); //MFHI op(0x11, INVALID); //MTHI op(0x12, INVALID); //MFLO op(0x13, INVALID); //MTLO op(0x14, INVALID); //DSLLV op(0x15, INVALID); op(0x16, INVALID); //DSRLV op(0x17, INVALID); //DSRAV op(0x18, INVALID); //MULT op(0x19, INVALID); //MULTU op(0x1a, INVALID); //DIV op(0x1b, INVALID); //DIVU op(0x1c, INVALID); //DMULT op(0x1d, INVALID); //DMULTU op(0x1e, INVALID); //DDIV op(0x1f, INVALID); //DDIVU op(0x20, ADDU, RD, RS, RT); //ADD op(0x21, ADDU, RD, RS, RT); op(0x22, SUBU, RD, RS, RT); //SUB op(0x23, SUBU, RD, RS, RT); op(0x24, AND, RD, RS, RT); op(0x25, OR, RD, RS, RT); op(0x26, XOR, RD, RS, RT); op(0x27, NOR, RD, RS, RT); op(0x28, INVALID); op(0x29, INVALID); op(0x2a, SLT, RD, RS, RT); op(0x2b, SLTU, RD, RS, RT); op(0x2c, INVALID); //DADD op(0x2d, INVALID); //DADDU op(0x2e, INVALID); //DSUB op(0x2f, INVALID); //DSUBU op(0x30, INVALID); //TGE op(0x31, INVALID); //TGEU op(0x32, INVALID); //TLT op(0x33, INVALID); //TLTU op(0x34, INVALID); //TEQ op(0x35, INVALID); op(0x36, INVALID); //TNE op(0x37, INVALID); op(0x38, INVALID); //DSLL op(0x39, INVALID); op(0x3a, INVALID); //DSRL op(0x3b, INVALID); //DSRA op(0x3c, INVALID); //DSLL32 op(0x3d, INVALID); op(0x3e, INVALID); //DSRL32 op(0x3f, INVALID); //DSRA32 } } auto RSP::decoderREGIMM() -> void { switch(OP >> 16 & 0x1f) { br(0x00, BLTZ, RS, IMMi16); br(0x01, BGEZ, RS, IMMi16); op(0x02, INVALID); //BLTZL op(0x03, INVALID); //BGEZL op(0x04, INVALID); op(0x05, INVALID); op(0x06, INVALID); op(0x07, INVALID); op(0x08, INVALID); //TGEI op(0x09, INVALID); //TGEIU op(0x0a, INVALID); //TLTI op(0x0b, INVALID); //TLTIU op(0x0c, INVALID); //TEQI op(0x0d, INVALID); op(0x0e, INVALID); //TNEI op(0x0f, INVALID); br(0x10, BLTZAL, RS, IMMi16); br(0x11, BGEZAL, RS, IMMi16); op(0x12, INVALID); //BLTZALL op(0x13, INVALID); //BGEZALL op(0x14, INVALID); op(0x15, INVALID); op(0x16, INVALID); op(0x17, INVALID); op(0x18, INVALID); op(0x19, INVALID); op(0x1a, INVALID); op(0x1b, INVALID); op(0x1c, INVALID); op(0x1d, INVALID); op(0x1e, INVALID); op(0x1f, INVALID); } } auto RSP::decoderSCC() -> void { switch(OP >> 21 & 0x1f) { op(0x00, MFC0, RT, RDn); op(0x01, INVALID); //DMFC0 op(0x02, INVALID); //CFC0 op(0x03, INVALID); op(0x04, MTC0, RT, RDn); op(0x05, INVALID); //DMTC0 op(0x06, INVALID); //CTC0 op(0x07, INVALID); op(0x08, INVALID); //BC0 op(0x09, INVALID); op(0x0a, INVALID); op(0x0b, INVALID); op(0x0c, INVALID); op(0x0d, INVALID); op(0x0e, INVALID); op(0x0f, INVALID); } } auto RSP::decoderVU() -> void { #define E (OP >> 7 & 15) switch(OP >> 21 & 0x1f) { op(0x00, MFC2, RT, VS, E); op(0x01, INVALID); //DMFC2 op(0x02, CFC2, RT, RDn); op(0x03, INVALID); op(0x04, MTC2, RT, VS, E); op(0x05, INVALID); //DMTC2 op(0x06, CTC2, RT, RDn); op(0x07, INVALID); op(0x08, INVALID); //BC2 op(0x09, INVALID); op(0x0a, INVALID); op(0x0b, INVALID); op(0x0c, INVALID); op(0x0d, INVALID); op(0x0e, INVALID); op(0x0f, INVALID); } #undef E #define E (OP >> 21 & 15) #define DE (OP >> 11 & 7) switch(OP & 0x3f) { op(0x00, VMULF<0>, VD, VS, VT, E); op(0x01, VMULF<1>, VD, VS, VT, E); op(0x02, VRND<1>, VD, VSn, VT, E); op(0x03, VMULQ, VD, VS, VT, E); op(0x04, VMUDL, VD, VS, VT, E); op(0x05, VMUDM, VD, VS, VT, E); op(0x06, VMUDN, VD, VS, VT, E); op(0x07, VMUDH, VD, VS, VT, E); op(0x08, VMACF<0>, VD, VS, VT, E); op(0x09, VMACF<1>, VD, VS, VT, E); op(0x0a, VRND<0>, VD, VSn, VT, E); op(0x0b, VMACQ, VD); op(0x0c, VMADL, VD, VS, VT, E); op(0x0d, VMADM, VD, VS, VT, E); op(0x0e, VMADN, VD, VS, VT, E); op(0x0f, VMADH, VD, VS, VT, E); op(0x10, VADD, VD, VS, VT, E); op(0x11, VSUB, VD, VS, VT, E); op(0x12, INVALID); op(0x13, VABS, VD, VS, VT, E); op(0x14, VADDC, VD, VS, VT, E); op(0x15, VSUBC, VD, VS, VT, E); op(0x16, INVALID); op(0x17, INVALID); op(0x18, INVALID); op(0x19, INVALID); op(0x1a, INVALID); op(0x1b, INVALID); op(0x1c, INVALID); op(0x1d, VSAR, VD, VS, E); op(0x1e, INVALID); op(0x1f, INVALID); op(0x20, VLT, VD, VS, VT, E); op(0x21, VEQ, VD, VS, VT, E); op(0x22, VNE, VD, VS, VT, E); op(0x23, VGE, VD, VS, VT, E); op(0x24, VCL, VD, VS, VT, E); op(0x25, VCH, VD, VS, VT, E); op(0x26, VCR, VD, VS, VT, E); op(0x27, VMRG, VD, VS, VT, E); op(0x28, VAND, VD, VS, VT, E); op(0x29, VNAND, VD, VS, VT, E); op(0x2a, VOR, VD, VS, VT, E); op(0x2b, VNOR, VD, VS, VT, E); op(0x2c, VXOR, VD, VS, VT, E); op(0x2d, VNXOR, VD, VS, VT, E); op(0x2e, INVALID); op(0x2f, INVALID); op(0x30, VRCP<0>, VD, DE, VT, E); op(0x31, VRCP<1>, VD, DE, VT, E); op(0x32, VRCPH, VD, DE, VT, E); op(0x33, VMOV, VD, DE, VT, E); op(0x34, VRSQ<0>, VD, DE, VT, E); op(0x35, VRSQ<1>, VD, DE, VT, E); op(0x36, VRSQH, VD, DE, VT, E); op(0x37, VNOP); op(0x38, INVALID); op(0x39, INVALID); op(0x3a, INVALID); op(0x3b, INVALID); op(0x3c, INVALID); op(0x3d, INVALID); op(0x3e, INVALID); op(0x3f, INVALID); } #undef E #undef DE } auto RSP::decoderLWC2() -> void { #define E (OP >> 7 & 15) #define IMMi7 i7(OP) switch(OP >> 11 & 0x1f) { op(0x00, LBV, VT, E, RS, IMMi7); op(0x01, LSV, VT, E, RS, IMMi7); op(0x02, LLV, VT, E, RS, IMMi7); op(0x03, LDV, VT, E, RS, IMMi7); op(0x04, LQV, VT, E, RS, IMMi7); op(0x05, LRV, VT, E, RS, IMMi7); op(0x06, LPV, VT, E, RS, IMMi7); op(0x07, LUV, VT, E, RS, IMMi7); op(0x08, LHV, VT, E, RS, IMMi7); op(0x09, LFV, VT, E, RS, IMMi7); //op(0x0a, LWV, VT, E, RS, IMMi7); //not present on N64 RSP op(0x0b, LTV, VTn, E, RS, IMMi7); } #undef E #undef IMMi7 } auto RSP::decoderSWC2() -> void { #define E (OP >> 7 & 15) #define IMMi7 i7(OP) switch(OP >> 11 & 0x1f) { op(0x00, SBV, VT, E, RS, IMMi7); op(0x01, SSV, VT, E, RS, IMMi7); op(0x02, SLV, VT, E, RS, IMMi7); op(0x03, SDV, VT, E, RS, IMMi7); op(0x04, SQV, VT, E, RS, IMMi7); op(0x05, SRV, VT, E, RS, IMMi7); op(0x06, SPV, VT, E, RS, IMMi7); op(0x07, SUV, VT, E, RS, IMMi7); op(0x08, SHV, VT, E, RS, IMMi7); op(0x09, SFV, VT, E, RS, IMMi7); op(0x0a, SWV, VT, E, RS, IMMi7); op(0x0b, STV, VTn, E, RS, IMMi7); } #undef E #undef IMMi7 } auto RSP::INVALID() -> void { } #undef SA #undef RDn #undef RTn #undef RSn #undef VDn #undef VSn #undef VTn #undef IMMi16 #undef IMMu16 #undef IMMu26 #undef jp #undef op #undef br #undef OP #undef RD #undef RT #undef RS #undef VD #undef VS #undef VT ares-126/ares/n64/rsp/io.cpp000066400000000000000000000123101415063341600155760ustar00rootroot00000000000000auto RSP::readWord(u32 address) -> u32 { address = (address & 0x3ffff) >> 2; n32 data; if(address == 0) { //SP_PBUS_ADDRESS data.bit( 0,11) = dma.pbusAddress; data.bit(12) = dma.pbusRegion; } if(address == 1) { //SP_DRAM_ADDRESS data.bit(0,23) = dma.dramAddress; } if(address == 2) { //SP_READ_LENGTH data.bit( 0,11) = dma.read.length; data.bit(12,19) = dma.read.count; data.bit(20,31) = dma.read.skip; } if(address == 3) { //SP_WRITE_LENGTH data.bit( 0,11) = dma.write.length; data.bit(12,19) = dma.write.count; data.bit(20,31) = dma.write.skip; } if(address == 4) { //SP_STATUS data.bit( 0) = status.halted; data.bit( 1) = status.broken; data.bit( 2) = !dma.requests.empty(); data.bit( 3) = dma.requests.full(); data.bit( 4) = status.full; data.bit( 5) = status.singleStep; data.bit( 6) = status.interruptOnBreak; data.bit( 7) = status.signal[0]; data.bit( 8) = status.signal[1]; data.bit( 9) = status.signal[2]; data.bit(10) = status.signal[3]; data.bit(11) = status.signal[4]; data.bit(12) = status.signal[5]; data.bit(13) = status.signal[6]; data.bit(14) = status.signal[7]; } if(address == 5) { //SP_DMA_FULL data.bit(0) = dma.requests.full(); } if(address == 6) { //SP_DMA_BUSY data.bit(0) = !dma.requests.empty(); } if(address == 7) { //SP_SEMAPHORE data.bit(0) = status.semaphore; status.semaphore = 1; } debugger.ioSCC(Read, address, data); return data; } auto RSP::writeWord(u32 address, u32 data_) -> void { address = (address & 0x3ffff) >> 2; n32 data = data_; if(address == 0) { //SP_PBUS_ADDRESS dma.pbusAddress = data.bit( 0,11); dma.pbusRegion = data.bit(12); } if(address == 1) { //SP_DRAM_ADDRESS dma.dramAddress = data.bit(0,23); } if(address == 2) { //SP_READ_LENGTH dma.read.length = data.bit( 0,11); dma.read.count = data.bit(12,19); dma.read.skip = data.bit(20,31); if(!dma.requests.full()) { DMA::Request request; request.type = DMA::Request::Type::Read; request.pbusRegion = dma.pbusRegion; request.pbusAddress = dma.pbusAddress & ~7; request.dramAddress = dma.dramAddress & ~7; request.length = 1 + (dma.read.length | 7); request.count = 1 + (dma.read.count); request.skip = dma.read.skip & ~7; dma.requests.write(request); queue.insert(Queue::RSP_DMA, request.length * request.count / 4); } } if(address == 3) { //SP_WRITE_LENGTH dma.write.length = data.bit( 0,11); dma.write.count = data.bit(12,19); dma.write.skip = data.bit(20,31); if(!dma.requests.full()) { DMA::Request request; request.type = DMA::Request::Type::Write; request.pbusRegion = dma.pbusRegion; request.pbusAddress = dma.pbusAddress & ~7; request.dramAddress = dma.dramAddress & ~7; request.length = 1 + (dma.write.length | 7); request.count = 1 + (dma.write.count); request.skip = dma.write.skip & ~7; dma.requests.write(request); queue.insert(Queue::RSP_DMA, request.length * request.count / 4); } } if(address == 4) { //SP_STATUS if(data.bit( 0)) status.halted = 0; if(data.bit( 1)) status.halted = 1; if(data.bit( 2)) status.broken = 0; if(data.bit( 3)) mi.lower(MI::IRQ::SP); if(data.bit( 4)) mi.raise(MI::IRQ::SP); if(data.bit( 5)) status.singleStep = 0; if(data.bit( 6)) status.singleStep = 1; if(data.bit( 7)) status.interruptOnBreak = 0; if(data.bit( 8)) status.interruptOnBreak = 1; if(data.bit( 9)) status.signal[0] = 0; if(data.bit(10)) status.signal[0] = 1; if(data.bit(11)) status.signal[1] = 0; if(data.bit(12)) status.signal[1] = 1; if(data.bit(13)) status.signal[2] = 0; if(data.bit(14)) status.signal[2] = 1; if(data.bit(15)) status.signal[3] = 0; if(data.bit(16)) status.signal[3] = 1; if(data.bit(17)) status.signal[4] = 0; if(data.bit(18)) status.signal[4] = 1; if(data.bit(19)) status.signal[5] = 0; if(data.bit(20)) status.signal[5] = 1; if(data.bit(21)) status.signal[6] = 0; if(data.bit(22)) status.signal[6] = 1; if(data.bit(23)) status.signal[7] = 0; if(data.bit(24)) status.signal[7] = 1; } if(address == 5) { //SP_DMA_FULL (read-only) } if(address == 6) { //SP_DMA_BUSY (read-only) } if(address == 7) { //SP_SEMAPHORE if(!data.bit(0)) status.semaphore = 0; } debugger.ioSCC(Write, address, data); } auto RSP::Status::readWord(u32 address) -> u32 { address = (address & 0x7ffff) >> 2; n32 data; if(address == 0) { //SP_PC_REG data.bit(0,11) = self.ipu.pc; } if(address == 1) { //SP_IBIST } self.debugger.ioStatus(Read, address, data); return data; } auto RSP::Status::writeWord(u32 address, u32 data_) -> void { address = (address & 0x7ffff) >> 2; n32 data = data_; if(address == 0) { //SP_PC_REG if(self.branch.state == Branch::Take) { self.branch.pc = data.bit(0,11) & ~3; } else { self.ipu.pc = data.bit(0,11) & ~3; } } if(address == 1) { //SP_IBIST } self.debugger.ioStatus(Write, address, data); } ares-126/ares/n64/rsp/recompiler.cpp000066400000000000000000000537751415063341600173540ustar00rootroot00000000000000auto RSP::Recompiler::pool() -> Pool* { if(context) return context; context = (Pool*)allocator.acquire(); u32 hashcode = 0; for(u32 offset : range(4096)) { hashcode = (hashcode << 5) + hashcode + self.imem.read(offset); } context->hashcode = hashcode; if(auto result = pools.find(*context)) { context->hashcode = 0; //leave the memory zeroed out return context = &result(); } allocator.reserve(sizeof(Pool)); if(auto result = pools.insert(*context)) { return context = &result(); } throw; //should never occur } auto RSP::Recompiler::block(u32 address) -> Block* { if(auto block = pool()->blocks[address >> 2 & 0x3ff]) return block; auto block = emit(address); return pool()->blocks[address >> 2 & 0x3ff] = block; } auto RSP::Recompiler::emit(u32 address) -> Block* { if(unlikely(allocator.available() < 1_MiB)) { print("RSP allocator flush\n"); allocator.release(bump_allocator::zero_fill); reset(); } auto block = (Block*)allocator.acquire(sizeof(Block)); block->code = allocator.acquire(); bind({block->code, allocator.available()}); push(rbx); push(rbp); push(r13); if constexpr(ABI::Windows) { sub(rsp, imm8(0x40)); } mov(rbx, ra0); mov(rbp, ra1); mov(r13, ra2); auto entry = declareLabel(); jmp8(entry); auto epilogue = defineLabel(); if constexpr(ABI::Windows) { add(rsp, imm8(0x40)); } pop(r13); pop(rbp); pop(rbx); ret(); defineLabel(entry); bool hasBranched = 0; while(true) { u32 instruction = self.imem.read(address); bool branched = emitEXECUTE(instruction); call(&RSP::instructionEpilogue); address += 4; if(hasBranched || (address & 0xffc) == 0) break; //IMEM boundary hasBranched = branched; test(al, al); jnz(epilogue); } jmp(epilogue); allocator.reserve(size()); //print(hex(PC, 8L), " ", instructions, " ", size(), "\n"); return block; } #define Sa (instruction >> 6 & 31) #define Rdn (instruction >> 11 & 31) #define Rtn (instruction >> 16 & 31) #define Rsn (instruction >> 21 & 31) #define Vdn (instruction >> 6 & 31) #define Vsn (instruction >> 11 & 31) #define Vtn (instruction >> 16 & 31) #define Rd dis8(rbx, Rdn * 4) #define Rt dis8(rbx, Rtn * 4) #define Rs dis8(rbx, Rsn * 4) #define Vd dis32(r13, Vdn * 16) #define Vs dis32(r13, Vsn * 16) #define Vt dis32(r13, Vtn * 16) #define i16 s16(instruction) #define n16 u16(instruction) #define n26 u32(instruction & 0x03ff'ffff) auto RSP::Recompiler::emitEXECUTE(u32 instruction) -> bool { switch(instruction >> 26) { //SPECIAL case 0x00: { return emitSPECIAL(instruction); } //REGIMM case 0x01: { return emitREGIMM(instruction); } //J n26 case 0x02: { mov(ra1d, imm32(n26)); call(&RSP::J); return 1; } //JAL n26 case 0x03: { mov(ra1d, imm32(n26)); call(&RSP::JAL); return 1; } //BEQ Rs,Rt,i16 case 0x04: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&RSP::BEQ); return 1; } //BNE Rs,Rt,i16 case 0x05: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&RSP::BNE); return 1; } //BLEZ Rs,i16 case 0x06: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&RSP::BLEZ); return 1; } //BGTZ Rs,i16 case 0x07: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&RSP::BGTZ); return 1; } //ADDIU Rt,Rs,i16 case 0x08 ... 0x09: { mov(eax, Rs); add(eax, imm32(i16)); mov(Rt, eax); return 0; } //SLTI Rt,Rs,i16 case 0x0a: { mov(eax, Rs); cmp(eax, imm32(i16)); setl(al); movzx(eax, al); mov(Rt, eax); return 0; } //SLTIU Rt,Rs,i16 case 0x0b: { mov(eax, Rs); cmp(eax, imm32(i16)); setb(al); movzx(eax, al); mov(Rt, eax); return 0; } //ANDI Rt,Rs,n16 case 0x0c: { mov(eax, Rs); and(eax, imm32(n16)); mov(Rt, eax); return 0; } //ORI Rt,Rs,n16 case 0x0d: { mov(eax, Rs); or(eax, imm32(n16)); mov(Rt, eax); return 0; } //XORI Rt,Rs,n16 case 0x0e: { mov(eax, Rs); xor(eax, imm32(n16)); mov(Rt, eax); return 0; } //LUI Rt,n16 case 0x0f: { mov(eax, imm32(n16 << 16)); mov(Rt, eax); return 0; } //SCC case 0x10: { return emitSCC(instruction); } //INVALID case 0x11: { return 0; } //VPU case 0x12: { return emitVU(instruction); } //INVALID case 0x13 ... 0x1f: { return 0; } //LB Rt,Rs,i16 case 0x20: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::LB); return 0; } //LH Rt,Rs,i16 case 0x21: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::LH); return 0; } //INVALID case 0x22: { return 0; } //LW Rt,Rs,i16 case 0x23: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::LW); return 0; } //LBU Rt,Rs,i16 case 0x24: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::LBU); return 0; } //LHU Rt,Rs,i16 case 0x25: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::LHU); return 0; } //INVALID case 0x26 ... 0x27: { return 0; } //SB Rt,Rs,i16 case 0x28: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::SB); return 0; } //SH Rt,Rs,i16 case 0x29: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::SH); return 0; } //INVALID case 0x2a: { return 0; } //SW Rt,Rs,i16 case 0x2b: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&RSP::SW); return 0; } //INVALID case 0x2c ... 0x31: { return 0; } //LWC2 case 0x32: { return emitLWC2(instruction); } //INVALID case 0x33 ... 0x39: { return 0; } //SWC2 case 0x3a: { return emitSWC2(instruction); } //INVALID case 0x3b ... 0x3f: { return 0; } } return 0; } auto RSP::Recompiler::emitSPECIAL(u32 instruction) -> bool { switch(instruction & 0x3f) { //SLL Rd,Rt,Sa case 0x00: { mov(eax, Rt); shl(eax, imm8(Sa)); mov(Rd, eax); return 0; } //INVALID case 0x01: { return 0; } //SRL Rd,Rt,Sa case 0x02: { mov(eax, Rt); shr(eax, imm8(Sa)); mov(Rd, eax); return 0; } //SRA Rd,Rt,Sa case 0x03: { mov(eax, Rt); sar(eax, imm8(Sa)); mov(Rd, eax); return 0; } //SLLV Rd,Rt,Rs case 0x04: { mov(eax, Rt); mov(ecx, Rs); and(cl, imm8(31)); shl(eax, cl); mov(Rd, eax); return 0; } //INVALID case 0x05: { return 0; } //SRLV Rd,Rt,Rs case 0x06: { mov(eax, Rt); mov(ecx, Rs); and(cl, imm8(31)); shr(eax, cl); mov(Rd, eax); return 0; } //SRAV Rd,Rt,Rs case 0x07: { mov(eax, Rt); mov(ecx, Rs); and(cl, imm8(31)); sar(eax, cl); mov(Rd, eax); return 0; } //JR Rs case 0x08: { lea(ra1, Rs); call(&RSP::JR); return 1; } //JALR Rd,Rs case 0x09: { lea(ra1, Rd); lea(ra2, Rs); call(&RSP::JALR); return 1; } //INVALID case 0x0a ... 0x0c: { return 0; } //BREAK case 0x0d: { call(&RSP::BREAK); return 1; } //INVALID case 0x0e ... 0x1f: { return 0; } //ADDU Rd,Rs,Rt case 0x20 ... 0x21: { mov(eax, Rs); add(eax, Rt); mov(Rd, eax); return 0; } //SUBU Rd,Rs,Rt case 0x22 ... 0x23: { mov(eax, Rs); sub(eax, Rt); mov(Rd, eax); return 0; } //AND Rd,Rs,Rt case 0x24: { mov(eax, Rs); and(eax, Rt); mov(Rd, eax); return 0; } //OR Rd,Rs,Rt case 0x25: { mov(eax, Rs); or(eax, Rt); mov(Rd, eax); return 0; } //XOR Rd,Rs,Rt case 0x26: { mov(eax, Rs); xor(eax, Rt); mov(Rd, eax); return 0; } //NOR Rd,Rs,Rt case 0x27: { mov(eax, Rs); or(eax, Rt); not(eax); mov(Rd, eax); return 0; } //INVALID case 0x28 ... 0x29: { return 0; } //SLT Rd,Rs,Rt case 0x2a: { mov(eax, Rs); cmp(eax, Rt); setl(al); movzx(eax, al); mov(Rd, eax); return 0; } //SLTU Rd,Rs,Rt case 0x2b: { mov(eax, Rs); cmp(eax, Rt); setb(al); movzx(eax, al); mov(Rd, eax); return 0; } //INVALID case 0x2c ... 0x3f: { return 0; } } return 0; } auto RSP::Recompiler::emitREGIMM(u32 instruction) -> bool { switch(instruction >> 16 & 0x1f) { //BLTZ Rs,i16 case 0x00: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&RSP::BLTZ); return 1; } //BGEZ Rs,i16 case 0x01: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&RSP::BGEZ); return 1; } //INVALID case 0x02 ... 0x0f: { return 0; } //BLTZAL Rs,i16 case 0x10: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&RSP::BLTZAL); return 1; } //BGEZAL Rs,i16 case 0x11: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&RSP::BGEZAL); return 1; } //INVALID case 0x12 ... 0x1f: { return 0; } } return 0; } auto RSP::Recompiler::emitSCC(u32 instruction) -> bool { switch(instruction >> 21 & 0x1f) { //MFC0 Rt,Rd case 0x00: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&RSP::MFC0); return 0; } //INVALID case 0x01 ... 0x03: { return 0; } //MTC0 Rt,Rd case 0x04: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&RSP::MTC0); return 0; } //INVALID case 0x05 ... 0x1f: { return 0; } } return 0; } auto RSP::Recompiler::emitVU(u32 instruction) -> bool { #define E (instruction >> 7 & 15) switch(instruction >> 21 & 0x1f) { //MFC2 Rt,Vs(e) case 0x00: { lea(ra1, Rt); lea(ra2, Vs); mov(ra3d, imm32(E)); call(&RSP::MFC2); return 0; } //INVALID case 0x01: { return 0; } //CFC2 Rt,Rd case 0x02: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&RSP::CFC2); return 0; } //INVALID case 0x03: { return 0; } //MTC2 Rt,Vs(e) case 0x04: { lea(ra1, Rt); lea(ra2, Vs); mov(ra3d, imm32(E)); call(&RSP::MTC2); return 0; } //INVALID case 0x05: { return 0; } //CTC2 Rt,Rd case 0x06: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&RSP::CTC2); return 0; } //INVALID case 0x07 ... 0x0f: { return 0; } } #undef E #define E (instruction >> 21 & 15) #define DE (instruction >> 11 & 7) switch(instruction & 0x3f) { //VMULF Vd,Vs,Vt(e) case 0x00: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMULF<0>); return 0; } //VMULU Vd,Vs,Vt(e) case 0x01: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMULF<1>); return 0; } //VRNDP Vd,Vs,Vt(e) case 0x02: { lea(ra1, Vd); mov(ra2d, imm32(Vsn)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRND<1>); return 0; } //VMULQ Vd,Vs,Vt(e) case 0x03: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMULQ); return 0; } //VMUDL Vd,Vs,Vt(e) case 0x04: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMUDL); return 0; } //VMUDM Vd,Vs,Vt(e) case 0x05: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMUDM); return 0; } //VMUDN Vd,Vs,Vt(e) case 0x06: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMUDN); return 0; } //VMUDH Vd,Vs,Vt(e) case 0x07: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMUDH); return 0; } //VMACF Vd,Vs,Vt(e) case 0x08: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMACF<0>); return 0; } //VMACU Vd,Vs,Vt(e) case 0x09: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMACF<1>); return 0; } //VRNDN Vd,Vs,Vt(e) case 0x0a: { lea(ra1, Vd); mov(ra2d, imm32(Vsn)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRND<0>); return 0; } //VMACQ Vd case 0x0b: { lea(ra1, Vd); call(&RSP::VMACQ); return 0; } //VMADL Vd,Vs,Vt(e) case 0x0c: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMADL); return 0; } //VMADM Vd,Vs,Vt(e) case 0x0d: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMADM); return 0; } //VMADN Vd,Vs,Vt(e) case 0x0e: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMADN); return 0; } //VMADH Vd,Vs,Vt(e) case 0x0f: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMADH); return 0; } //VADD Vd,Vs,Vt(e) case 0x10: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VADD); return 0; } //VSUB Vd,Vs,Vt(e) case 0x11: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VSUB); return 0; } //INVALID case 0x12: { return 0; } //VABS Vd,Vs,Vt(e) case 0x13: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VABS); return 0; } //VADDC Vd,Vs,Vt(e) case 0x14: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VADDC); return 0; } //VSUBC Vd,Vs,Vt(e) case 0x15: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VSUBC); return 0; } //INVALID case 0x16 ... 0x1c: { return 0; } //VSAR Vd,Vs,E case 0x1d: { lea(ra1, Vd); lea(ra2, Vs); mov(ra3d, imm32(E)); call(&RSP::VSAR); return 0; } //INVALID case 0x1e ... 0x1f: { return 0; } //VLT Vd,Vs,Vt(e) case 0x20: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VLT); return 0; } //VEQ Vd,Vs,Vt(e) case 0x21: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VEQ); return 0; } //VNE Vd,Vs,Vt(e) case 0x22: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VNE); return 0; } //VGE Vd,Vs,Vt(e) case 0x23: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VGE); return 0; } //VCL Vd,Vs,Vt(e) case 0x24: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VCL); return 0; } //VCH Vd,Vs,Vt(e) case 0x25: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VCH); return 0; } //VCR Vd,Vs,Vt(e) case 0x26: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VCR); return 0; } //VMRG Vd,Vs,Vt(e) case 0x27: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMRG); return 0; } //VAND Vd,Vs,Vt(e) case 0x28: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VAND); return 0; } //VNAND Vd,Vs,Vt(e) case 0x29: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VNAND); return 0; } //VOR Vd,Vs,Vt(e) case 0x2a: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VOR); return 0; } //VNOR Vd,Vs,Vt(e) case 0x2b: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VNOR); return 0; } //VXOR Vd,Vs,Vt(e) case 0x2c: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VXOR); return 0; } //VNXOR Vd,Vs,Vt(e) case 0x2d: { lea(ra1, Vd); lea(ra2, Vs); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VNXOR); return 0; } //INVALID case 0x2e ... 0x2f: { return 0; } //VCRP Vd(de),Vt(e) case 0x30: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRCP<0>); return 0; } //VRCPL Vd(de),Vt(e) case 0x31: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRCP<1>); return 0; } //VRCPH Vd(de),Vt(e) case 0x32: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRCPH); return 0; } //VMOV Vd(de),Vt(e) case 0x33: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VMOV); return 0; } //VRSQ Vd(de),Vt(e) case 0x34: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRSQ<0>); return 0; } //VRSQL Vd(de),Vt(e) case 0x35: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRSQ<1>); return 0; } //VRSQH Vd(de),Vt(e) case 0x36: { lea(ra1, Vd); mov(ra2d, imm32(DE)); lea(ra3, Vt); mov(ra4d, imm32(E)); call(&RSP::VRSQH); return 0; } //VNOP case 0x37: { call(&RSP::VNOP); } //INVALID case 0x38 ... 0x3f: { return 0; } } #undef E #undef DE return 0; } auto RSP::Recompiler::emitLWC2(u32 instruction) -> bool { #define E (instruction >> 7 & 15) #define i7 (s8(instruction << 1) >> 1) switch(instruction >> 11 & 0x1f) { //LBV Vt(e),Rs,i7 case 0x00: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LBV); return 0; } //LSV Vt(e),Rs,i7 case 0x01: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LSV); return 0; } //LLV Vt(e),Rs,i7 case 0x02: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LLV); return 0; } //LDV Vt(e),Rs,i7 case 0x03: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LDV); return 0; } //LQV Vt(e),Rs,i7 case 0x04: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LQV); return 0; } //LRV Vt(e),Rs,i7 case 0x05: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LRV); return 0; } //LPV Vt(e),Rs,i7 case 0x06: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LPV); return 0; } //LUV Vt(e),Rs,i7 case 0x07: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LUV); return 0; } //LHV Vt(e),Rs,i7 case 0x08: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LHV); return 0; } //LFV Vt(e),Rs,i7 case 0x09: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LFV); return 0; } //LWV (not present on N64 RSP) case 0x0a: { return 0; } //LTV Vt(e),Rs,i7 case 0x0b: { mov(ra1d, imm32(Vtn)); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::LTV); return 0; } //INVALID case 0x0c ... 0x1f: { return 0; } } #undef E #undef i7 return 0; } auto RSP::Recompiler::emitSWC2(u32 instruction) -> bool { #define E (instruction >> 7 & 15) #define i7 (s8(instruction << 1) >> 1) switch(instruction >> 11 & 0x1f) { //SBV Vt(e),Rs,i7 case 0x00: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SBV); return 0; } //SSV Vt(e),Rs,i7 case 0x01: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SSV); return 0; } //SLV Vt(e),Rs,i7 case 0x02: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SLV); return 0; } //SDV Vt(e),Rs,i7 case 0x03: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SDV); return 0; } //SQV Vt(e),Rs,i7 case 0x04: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SQV); return 0; } //SRV Vt(e),Rs,i7 case 0x05: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SRV); return 0; } //SPV Vt(e),Rs,i7 case 0x06: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SPV); return 0; } //SUV Vt(e),Rs,i7 case 0x07: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SUV); return 0; } //SHV Vt(e),Rs,i7 case 0x08: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SHV); return 0; } //SFV Vt(e),Rs,i7 case 0x09: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SFV); return 0; } //SWV Vt(e),Rs,i7 case 0x0a: { lea(ra1, Vt); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::SWV); return 0; } //STV Vt(e),Rs,i7 case 0x0b: { mov(ra1d, imm32(Vtn)); mov(ra2d, imm32(E)); lea(ra3, Rs); mov(ra4d, imm32(i7)); call(&RSP::STV); return 0; } //INVALID case 0x0c ... 0x1f: { return 0; } } #undef E #undef i7 return 0; } #undef Sa #undef Rdn #undef Rtn #undef Rsn #undef Vdn #undef Vsn #undef Vtn #undef Rd #undef Rt #undef Rs #undef Vd #undef Vs #undef Vt #undef i16 #undef n16 #undef n26 template auto RSP::Recompiler::call(V (RSP::*function)(P...)) -> void { static_assert(sizeof...(P) <= 5); if constexpr(ABI::Windows) { if constexpr(sizeof...(P) >= 5) mov(dis8(rsp, 0x28), ra5); if constexpr(sizeof...(P) >= 4) mov(dis8(rsp, 0x20), ra4); } mov(ra0, rbp); call(imm64{function}, rax); } ares-126/ares/n64/rsp/rsp.cpp000066400000000000000000000054211415063341600160000ustar00rootroot00000000000000#include namespace ares::Nintendo64 { RSP rsp; #include "dma.cpp" #include "io.cpp" #include "interpreter.cpp" #include "interpreter-ipu.cpp" #include "interpreter-scc.cpp" #include "interpreter-vpu.cpp" #include "recompiler.cpp" #include "debugger.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto RSP::load(Node::Object parent) -> void { node = parent->append("RSP"); dmem.allocate(4_KiB); imem.allocate(4_KiB); debugger.load(node); } auto RSP::unload() -> void { debugger.unload(); dmem.reset(); imem.reset(); node.reset(); } auto RSP::main() -> void { if(status.halted) return step(128); instruction(); } auto RSP::step(u32 clocks) -> void { Thread::clock += clocks; } auto RSP::instruction() -> void { if constexpr(Accuracy::RSP::Recompiler) { auto block = recompiler.block(ipu.pc); block->execute(*this); } if constexpr(Accuracy::RSP::Interpreter) { pipeline.address = ipu.pc; pipeline.instruction = imem.read(pipeline.address); debugger.instruction(); decoderEXECUTE(); instructionEpilogue(); step(3); } } auto RSP::instructionEpilogue() -> bool { if constexpr(Accuracy::RSP::Recompiler) { step(3); } ipu.r[0].u32 = 0; switch(branch.state) { case Branch::Step: ipu.pc += 4; return 0; case Branch::Take: ipu.pc += 4; branch.delaySlot(); return 0; case Branch::DelaySlot: ipu.pc = branch.pc; branch.reset(); return 1; case Branch::Halt: ipu.pc += 4; return 1; } unreachable; } auto RSP::power(bool reset) -> void { Thread::reset(); dmem.fill(); imem.fill(); pipeline = {}; dma = {}; status.semaphore = 0; status.halted = 1; status.broken = 0; status.full = 0; status.singleStep = 0; status.interruptOnBreak = 0; for(auto& signal : status.signal) signal = 0; for(auto& r : ipu.r) r.u32 = 0; ipu.pc = 0; branch = {}; for(auto& r : vpu.r) r.u128 = 0; vpu.acch.u128 = 0; vpu.accm.u128 = 0; vpu.accl.u128 = 0; vpu.vcoh.u128 = 0; vpu.vcol.u128 = 0; vpu.vcch.u128 = 0; vpu.vccl.u128 = 0; vpu.vce.u128 = 0; vpu.divin = 0; vpu.divout = 0; vpu.divdp = 0; reciprocals[0] = u16(~0); for(u16 index : range(1, 512)) { u64 a = index + 512; u64 b = (u64(1) << 34) / a; reciprocals[index] = u16(b + 1 >> 8); } for(u16 index : range(0, 512)) { u64 a = index + 512 >> (index % 2 == 1); u64 b = 1 << 17; //find the largest b where b < 1.0 / sqrt(a) while(a * (b + 1) * (b + 1) < (u64(1) << 44)) b++; inverseSquareRoots[index] = u16(b >> 1); } if constexpr(Accuracy::RSP::Recompiler) { auto buffer = ares::Memory::FixedAllocator::get().acquire(512_MiB); recompiler.allocator.resize(512_MiB, bump_allocator::executable | bump_allocator::zero_fill, buffer); recompiler.reset(); } } } ares-126/ares/n64/rsp/rsp.hpp000066400000000000000000000320611415063341600160050ustar00rootroot00000000000000//Reality Signal Processor struct RSP : Thread, Memory::IO { Node::Object node; Memory::Writable dmem; Memory::Writable imem; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload() -> void; auto instruction() -> void; auto ioSCC(bool mode, u32 address, u32 data) -> void; auto ioStatus(bool mode, u32 address, u32 data) -> void; struct Memory { Node::Debugger::Memory dmem; Node::Debugger::Memory imem; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification io; } tracer; } debugger; //rsp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto instruction() -> void; auto instructionEpilogue() -> bool; auto power(bool reset) -> void; struct Pipeline { u32 address; u32 instruction; } pipeline; //dma.cpp auto dmaTransfer() -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct DMA { n1 pbusRegion; n12 pbusAddress; n24 dramAddress; struct Transfer { n12 length; n12 skip; n8 count; } read, write; struct Request { //serialization.cpp auto serialize(serializer&) -> void; enum class Type : u32 { Read, Write } type; n1 pbusRegion; n12 pbusAddress; n24 dramAddress; n16 length; n16 skip; n16 count; }; nall::queue requests; } dma; struct Status : Memory::IO { RSP& self; Status(RSP& self) : self(self) {} //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; n1 semaphore; n1 halted = 1; n1 broken; n1 full; n1 singleStep; n1 interruptOnBreak; n1 signal[8]; } status{*this}; //ipu.cpp union r32 { struct { int32_t s32; }; struct { uint32_t u32; }; }; using cr32 = const r32; struct IPU { enum Register : u32 { R0, AT, V0, V1, A0, A1, A2, A3, T0, T1, T2, T3, T4, T5, T6, T7, S0, S1, S2, S3, S4, S5, S6, S7, T8, T9, K0, K1, GP, SP, S8, RA, }; r32 r[32]; u32 pc; } ipu; struct Branch { enum : u32 { Step, Take, DelaySlot, Halt }; auto inDelaySlot() const -> bool { return state == DelaySlot; } auto reset() -> void { state = Step; } auto take(u32 address) -> void { state = Take; pc = address; } auto delaySlot() -> void { state = DelaySlot; } auto halt() -> void { state = Halt; } u64 pc = 0; u32 state = Step; } branch; //cpu-instructions.cpp auto ADDIU(r32& rt, cr32& rs, s16 imm) -> void; auto ADDU(r32& rd, cr32& rs, cr32& rt) -> void; auto AND(r32& rd, cr32& rs, cr32& rt) -> void; auto ANDI(r32& rt, cr32& rs, u16 imm) -> void; auto BEQ(cr32& rs, cr32& rt, s16 imm) -> void; auto BGEZ(cr32& rs, s16 imm) -> void; auto BGEZAL(cr32& rs, s16 imm) -> void; auto BGTZ(cr32& rs, s16 imm) -> void; auto BLEZ(cr32& rs, s16 imm) -> void; auto BLTZ(cr32& rs, s16 imm) -> void; auto BLTZAL(cr32& rs, s16 imm) -> void; auto BNE(cr32& rs, cr32& rt, s16 imm) -> void; auto BREAK() -> void; auto J(u32 imm) -> void; auto JAL(u32 imm) -> void; auto JALR(r32& rd, cr32& rs) -> void; auto JR(cr32& rs) -> void; auto LB(r32& rt, cr32& rs, s16 imm) -> void; auto LBU(r32& rt, cr32& rs, s16 imm) -> void; auto LH(r32& rt, cr32& rs, s16 imm) -> void; auto LHU(r32& rt, cr32& rs, s16 imm) -> void; auto LUI(r32& rt, u16 imm) -> void; auto LW(r32& rt, cr32& rs, s16 imm) -> void; auto NOR(r32& rd, cr32& rs, cr32& rt) -> void; auto OR(r32& rd, cr32& rs, cr32& rt) -> void; auto ORI(r32& rt, cr32& rs, u16 imm) -> void; auto SB(cr32& rt, cr32& rs, s16 imm) -> void; auto SH(cr32& rt, cr32& rs, s16 imm) -> void; auto SLL(r32& rd, cr32& rt, u8 sa) -> void; auto SLLV(r32& rd, cr32& rt, cr32& rs) -> void; auto SLT(r32& rd, cr32& rs, cr32& rt) -> void; auto SLTI(r32& rt, cr32& rs, s16 imm) -> void; auto SLTIU(r32& rt, cr32& rs, s16 imm) -> void; auto SLTU(r32& rd, cr32& rs, cr32& rt) -> void; auto SRA(r32& rd, cr32& rt, u8 sa) -> void; auto SRAV(r32& rd, cr32& rt, cr32& rs) -> void; auto SRL(r32& rd, cr32& rt, u8 sa) -> void; auto SRLV(r32& rd, cr32& rt, cr32& rs) -> void; auto SUBU(r32& rd, cr32& rs, cr32& rt) -> void; auto SW(cr32& rt, cr32& rs, s16 imm) -> void; auto XOR(r32& rd, cr32& rs, cr32& rt) -> void; auto XORI(r32& rt, cr32& rs, u16 imm) -> void; //scc.cpp: System Control Coprocessor auto MFC0(r32& rt, u8 rd) -> void; auto MTC0(cr32& rt, u8 rd) -> void; //vpu.cpp: Vector Processing Unit union r128 { struct { uint128_t u128; }; struct { __m128i v128; }; operator __m128i() const { return v128; } auto operator=(__m128i value) { v128 = value; } auto byte(u32 index) -> uint8_t& { return ((uint8_t*)&u128)[15 - index]; } auto byte(u32 index) const -> uint8_t { return ((uint8_t*)&u128)[15 - index]; } auto element(u32 index) -> uint16_t& { return ((uint16_t*)&u128)[7 - index]; } auto element(u32 index) const -> uint16_t { return ((uint16_t*)&u128)[7 - index]; } auto u8(u32 index) -> uint8_t& { return ((uint8_t*)&u128)[15 - index]; } auto u8(u32 index) const -> uint8_t { return ((uint8_t*)&u128)[15 - index]; } auto s16(u32 index) -> int16_t& { return ((int16_t*)&u128)[7 - index]; } auto s16(u32 index) const -> int16_t { return ((int16_t*)&u128)[7 - index]; } auto u16(u32 index) -> uint16_t& { return ((uint16_t*)&u128)[7 - index]; } auto u16(u32 index) const -> uint16_t { return ((uint16_t*)&u128)[7 - index]; } //VCx registers auto get(u32 index) const -> bool { return u16(index) != 0; } auto set(u32 index, bool value) -> bool { return u16(index) = 0 - value, value; } //vu-registers.cpp auto operator()(u32 index) const -> r128; }; using cr128 = const r128; struct VU { r128 r[32]; r128 acch, accm, accl; r128 vcoh, vcol; //16-bit little endian r128 vcch, vccl; //16-bit little endian r128 vce; // 8-bit little endian s16 divin; s16 divout; bool divdp; } vpu; static constexpr r128 zero{0}; static constexpr r128 invert{u128(0) - 1}; auto accumulatorGet(u32 index) const -> u64; auto accumulatorSet(u32 index, u64 value) -> void; auto accumulatorSaturate(u32 index, bool slice, u16 negative, u16 positive) const -> u16; auto CFC2(r32& rt, u8 rd) -> void; auto CTC2(cr32& rt, u8 rd) -> void; auto LBV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LDV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LFV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LHV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LLV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LPV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LQV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LRV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LSV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LTV(u8 vt, u8 e, cr32& rs, s8 imm) -> void; auto LUV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto LWV(r128& vt, u8 e, cr32& rs, s8 imm) -> void; auto MFC2(r32& rt, cr128& vs, u8 e) -> void; auto MTC2(cr32& rt, r128& vs, u8 e) -> void; auto SBV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SDV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SFV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SHV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SLV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SPV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SQV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SRV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SSV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto STV(u8 vt, u8 e, cr32& rs, s8 imm) -> void; auto SUV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto SWV(cr128& vt, u8 e, cr32& rs, s8 imm) -> void; auto VABS(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VADD(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VADDC(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VAND(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VCH(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VCL(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VCR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VEQ(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VGE(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VLT(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; template auto VMACF(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMACQ(r128& vd) -> void; auto VMADH(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMADL(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMADM(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMADN(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMOV(r128& vd, u8 de, cr128& vt, u8 e) -> void; auto VMRG(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMUDH(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMUDL(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMUDM(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VMUDN(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; template auto VMULF(r128& rd, cr128& vs, cr128& vt, u8 e) -> void; auto VMULQ(r128& rd, cr128& vs, cr128& vt, u8 e) -> void; auto VNAND(r128& rd, cr128& vs, cr128& vt, u8 e) -> void; auto VNE(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VNOP() -> void; auto VNOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VNXOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VOR(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; template auto VRCP(r128& vd, u8 de, cr128& vt, u8 e) -> void; auto VRCPH(r128& vd, u8 de, cr128& vt, u8 e) -> void; template auto VRND(r128& vd, u8 vs, cr128& vt, u8 e) -> void; template auto VRSQ(r128& vd, u8 de, cr128& vt, u8 e) -> void; auto VRSQH(r128& vd, u8 de, cr128& vt, u8 e) -> void; auto VSAR(r128& vd, cr128& vs, u8 e) -> void; auto VSUB(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VSUBC(r128& vd, cr128& vs, cr128& vt, u8 e) -> void; auto VXOR(r128& rd, cr128& vs, cr128& vt, u8 e) -> void; //unserialized: u16 reciprocals[512]; u16 inverseSquareRoots[512]; //decoder.cpp auto decoderEXECUTE() -> void; auto decoderSPECIAL() -> void; auto decoderREGIMM() -> void; auto decoderSCC() -> void; auto decoderVU() -> void; auto decoderLWC2() -> void; auto decoderSWC2() -> void; auto INVALID() -> void; //recompiler.cpp struct Recompiler : recompiler::amd64 { using recompiler::amd64::call; RSP& self; Recompiler(RSP& self) : self(self) {} struct Block { auto execute(RSP& self) -> void { ((void (*)(r32*, RSP*, r128*))code)(&self.ipu.r[0], &self, &self.vpu.r[0]); } u8* code; }; struct Pool { auto operator==(const Pool& source) const -> bool { return hashcode == source.hashcode; } auto operator< (const Pool& source) const -> bool { return hashcode < source.hashcode; } auto hash() const -> u32 { return hashcode; } u32 hashcode; Block* blocks[1024]; }; auto reset() -> void { context = nullptr; pools.reset(); } auto invalidate() -> void { context = nullptr; } auto pool() -> Pool*; auto block(u32 address) -> Block*; auto emit(u32 address) -> Block*; auto emitEXECUTE(u32 instruction) -> bool; auto emitSPECIAL(u32 instruction) -> bool; auto emitREGIMM(u32 instruction) -> bool; auto emitSCC(u32 instruction) -> bool; auto emitVU(u32 instruction) -> bool; auto emitLWC2(u32 instruction) -> bool; auto emitSWC2(u32 instruction) -> bool; template auto call(R (RSP::*function)(P...)) -> void; bump_allocator allocator; Pool* context = nullptr; set pools; //hashset pools; } recompiler{*this}; struct Disassembler { RSP& self; Disassembler(RSP& self) : self(self) {} //disassembler.cpp auto disassemble(u32 address, u32 instruction) -> string; template auto hint(P&&... p) const -> string; bool showColors = true; bool showValues = true; private: auto EXECUTE() -> vector; auto SPECIAL() -> vector; auto REGIMM() -> vector; auto SCC() -> vector; auto LWC2() -> vector; auto SWC2() -> vector; auto VU() -> vector; auto immediate(s64 value, u32 bits = 0) const -> string; auto ipuRegisterName(u32 index) const -> string; auto ipuRegisterValue(u32 index) const -> string; auto ipuRegisterIndex(u32 index, s16 offset) const -> string; auto sccRegisterName(u32 index) const -> string; auto sccRegisterValue(u32 index) const -> string; auto vpuRegisterName(u32 index, u32 element = 0) const -> string; auto vpuRegisterValue(u32 index, u32 element = 0) const -> string; auto ccrRegisterName(u32 index) const -> string; auto ccrRegisterValue(u32 index) const -> string; u32 address; u32 instruction; } disassembler{*this}; }; extern RSP rsp; ares-126/ares/n64/rsp/serialization.cpp000066400000000000000000000020711415063341600200470ustar00rootroot00000000000000auto RSP::serialize(serializer& s) -> void { Thread::serialize(s); s(dmem); s(imem); s(pipeline.address); s(pipeline.instruction); s(dma.pbusRegion); s(dma.pbusAddress); s(dma.dramAddress); s(dma.read.length); s(dma.read.skip); s(dma.read.count); s(dma.write.length); s(dma.write.skip); s(dma.write.count); s(dma.requests); s(status.semaphore); s(status.halted); s(status.broken); s(status.full); s(status.singleStep); s(status.interruptOnBreak); s(status.signal); for(auto& r : ipu.r) s(r.u32); s(ipu.pc); s(branch.pc); s(branch.state); for(auto& r : vpu.r) s(r.u128); s(vpu.acch.u128); s(vpu.accm.u128); s(vpu.accl.u128); s(vpu.vcoh.u128); s(vpu.vcol.u128); s(vpu.vcch.u128); s(vpu.vccl.u128); s(vpu.vce.u128); s(vpu.divin); s(vpu.divout); s(vpu.divdp); if constexpr(Accuracy::RSP::Recompiler) { recompiler.reset(); } } auto RSP::DMA::Request::serialize(serializer& s) -> void { s((u32&)type); s(pbusRegion); s(pbusAddress); s(dramAddress); s(length); s(skip); s(count); } ares-126/ares/n64/si/000077500000000000000000000000001415063341600142755ustar00rootroot00000000000000ares-126/ares/n64/si/debugger.cpp000066400000000000000000000014171415063341600165700ustar00rootroot00000000000000auto SI::Debugger::load(Node::Object parent) -> void { tracer.io = parent->append("I/O", "SI"); } auto SI::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "SI_DRAM_ADDRESS", "SI_PIF_ADDRESS_READ64B", "SI_INT_ADDRESS_WRITE64B", "SI_RESERVED", "SI_PIF_ADDRESS_WRITE64B", "SI_INT_ADDRESS_READ64B", "SI_STATUS", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "SI_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/si/dma.cpp000066400000000000000000000010251415063341600155400ustar00rootroot00000000000000auto SI::dmaRead() -> void { run(); for(u32 offset = 0; offset < 64; offset += 2) { u16 data = bus.read(io.readAddress + offset); bus.write(io.dramAddress + offset, data); } io.dmaBusy = 0; io.interrupt = 1; mi.raise(MI::IRQ::SI); } auto SI::dmaWrite() -> void { for(u32 offset = 0; offset < 64; offset += 2) { u16 data = bus.read(io.dramAddress + offset); bus.write(io.writeAddress + offset, data); } io.dmaBusy = 0; io.interrupt = 1; mi.raise(MI::IRQ::SI); run(); } ares-126/ares/n64/si/io.cpp000066400000000000000000000032071415063341600154120ustar00rootroot00000000000000auto SI::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address == 0) { //SI_DRAM_ADDRESS data.bit(0,23) = io.dramAddress; } if(address == 1) { //SI_PIF_ADDRESS_READ64B data.bit(0,31) = io.readAddress; } if(address == 2) { //SI_INT_ADDRESS_WRITE64B } if(address == 3) { //SI_RESERVED } if(address == 4) { //SI_PIF_ADDRESS_WRITE64B data.bit(0,31) = io.writeAddress; } if(address == 5) { //SI_INT_ADDRESS_READ64B } if(address == 6) { //SI_STATUS data.bit( 0) = io.dmaBusy; data.bit( 1) = io.ioBusy; data.bit( 2) = io.readPending; data.bit( 3) = io.dmaError; data.bit( 4, 7) = io.pchState; data.bit( 8,11) = io.dmaState; data.bit(12) = io.interrupt; } debugger.io(Read, address, data); return data; } auto SI::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; if(address == 0) { //SI_DRAM_ADDRESS io.dramAddress = data.bit(0,23) & ~7; } if(address == 1) { //SI_PIF_ADDRESS_READ64B io.readAddress = data.bit(0,31) & ~1; io.dmaBusy = 1; queue.insert(Queue::SI_DMA_Read, 2304); } if(address == 2) { //SI_INT_ADDRESS_WRITE64B } if(address == 3) { //SI_RESERVED } if(address == 4) { //SI_PIF_ADDRESS_WRITE64B io.writeAddress = data.bit(0,31) & ~1; io.dmaBusy = 1; queue.insert(Queue::SI_DMA_Write, 2304); } if(address == 5) { //SI_INT_ADDRESS_READ64B } if(address == 6) { //SI_STATUS io.interrupt = 0; mi.lower(MI::IRQ::SI); } debugger.io(Write, address, data); } ares-126/ares/n64/si/serialization.cpp000066400000000000000000000003551415063341600176610ustar00rootroot00000000000000auto SI::serialize(serializer& s) -> void { s(io.dramAddress); s(io.readAddress); s(io.writeAddress); s(io.dmaBusy); s(io.ioBusy); s(io.readPending); s(io.pchState); s(io.dmaState); s(io.dmaError); s(io.interrupt); } ares-126/ares/n64/si/si.cpp000066400000000000000000000215241415063341600154200ustar00rootroot00000000000000#include namespace ares::Nintendo64 { SI si; #include "dma.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto SI::load(Node::Object parent) -> void { node = parent->append("SI"); debugger.load(node); /*if(auto fp = system.pak->read("pif.sm5.rom")) { //load 1KB ROM and mirror it to 4KB fp->read({SM5K::ROM, 1024}); memory::copy(&SM5K::ROM[1024], &SM5K::ROM[0], 1024); memory::copy(&SM5K::ROM[2048], &SM5K::ROM[0], 1024); memory::copy(&SM5K::ROM[3072], &SM5K::ROM[0], 1024); }*/ } auto SI::unload() -> void { debugger = {}; node.reset(); } auto SI::addressCRC(u16 address) const -> n5 { n5 crc = 0; for(u32 i : range(16)) { n5 xor = crc & 0x10 ? 0x15 : 0x00; crc <<= 1; if(address & 0x8000) crc |= 1; address <<= 1; crc ^= xor; } return crc; } auto SI::dataCRC(array_view data) const -> n8 { n8 crc = 0; for(u32 i : range(33)) { for(u32 j : reverse(range(8))) { n8 xor = crc & 0x80 ? 0x85 : 0x00; crc <<= 1; if(i < 32) { if(data[i] & 1 << j) crc |= 1; } crc ^= xor; } } return crc; } auto SI::run() -> void { auto flags = pi.ram.read(0x3f); //controller polling if(flags & 0x01) { //todo: this flag is supposed to be cleared, but doing so breaks inputs //flags &= ~0x01; scan(); } //CIC-NUS-6105 challenge/response if(flags & 0x02) { flags &= ~0x02; challenge(); } //unknown purpose if(flags & 0x04) { flags &= ~0x04; debug(unimplemented, "[SI::main] flags & 0x04"); } //must be sent within 5s of the console booting, or SM5 will lock the N64 if(flags & 0x08) { flags &= ~0x08; } //PIF ROM lockout if(flags & 0x10) { flags &= ~0x10; pi.io.romLockout = 1; } //initialization if(flags & 0x20) { flags &= ~0x20; flags |= 0x80; //set completion flag } //clear PIF RAM if(flags & 0x40) { flags &= ~0x40; pi.ram.fill(); } pi.ram.write(0x3f, flags); } auto SI::scan() -> void { ControllerPort* controllers[4] = { &controllerPort1, &controllerPort2, &controllerPort3, &controllerPort4, }; static constexpr bool Debug = 0; if constexpr(Debug) { print("{\n"); for(u32 y : range(8)) { print(" "); for(u32 x : range(8)) { print(hex(pi.ram.read(y * 8 + x), 2L), " "); } print("\n"); } print("}\n"); } n3 channel = 0; //0-5 for(u32 offset = 0; offset < 64;) { n8 send = pi.ram.read(offset++); if(send == 0x00) { channel++; continue; } if(send == 0xfd) continue; //channel reset if(send == 0xfe) break; //end of packets if(send == 0xff) continue; //alignment padding n8 recvOffset = offset; n8 recv = pi.ram.read(offset++); if(recv == 0xfe) break; //end of packets //clear flags from lengths send &= 0x3f; recv &= 0x3f; n8 input[64]; for(u32 index : range(send)) { input[index] = pi.ram.read(offset++); } n8 output[64]; b1 valid = 0; //status if(input[0] == 0x00 || input[0] == 0xff) { //controller if(channel < 4 && controllers[channel]->device) { output[0] = 0x05; //0x05 = gamepad; 0x02 = mouse output[1] = 0x00; output[2] = 0x02; //0x02 = nothing present in controller slot if(auto& device = controllers[channel]->device) { if(auto gamepad = dynamic_cast(device.data())) { if(gamepad->ram || gamepad->motor) { output[2] = 0x01; //0x01 = pak present } } } valid = 1; } //cartridge EEPROM (4kbit) if(channel >= 4 && cartridge.eeprom.size == 512) { output[0] = 0x00; output[1] = 0x80; output[2] = 0x00; valid = 1; } //cartridge EEPROM (16kbit) if(channel >= 4 && cartridge.eeprom.size == 2048) { output[0] = 0x00; output[1] = 0xc0; output[2] = 0x00; valid = 1; } } //read controller state if(input[0] == 0x01) { if(channel < 4 && controllers[channel]->device) { u32 data = controllers[channel]->device->read(); output[0] = data >> 24; output[1] = data >> 16; output[2] = data >> 8; output[3] = data >> 0; if(recv <= 4) { pi.ram.write(recvOffset, 0x00 | recv & 0x3f); } else { pi.ram.write(recvOffset, 0x40 | recv & 0x3f); } valid = 1; } } //read pak if(input[0] == 0x02 && send >= 3 && recv >= 1) { if(auto& device = controllers[channel]->device) { if(auto gamepad = dynamic_cast(device.data())) { //controller pak if(auto& ram = gamepad->ram) { u32 address = (input[1] << 8 | input[2] << 0) & ~31; if(addressCRC(address) == (n5)input[2]) { for(u32 index : range(recv - 1)) { output[index] = ram.read(address++); } output[recv - 1] = dataCRC({&output[0], recv - 1}); valid = 1; } } //rumble pak if(gamepad->motor) { u32 address = (input[1] << 8 | input[2] << 0) & ~31; if(addressCRC(address) == (n5)input[2]) { for(u32 index : range(recv - 1)) { output[index] = 0x80; } output[recv - 1] = dataCRC({&output[0], recv - 1}); valid = 1; } } } } } //write pak if(input[0] == 0x03 && send >= 3 && recv >= 1) { if(auto& device = controllers[channel]->device) { if(auto gamepad = dynamic_cast(device.data())) { //controller pak if(auto& ram = gamepad->ram) { u32 address = (input[1] << 8 | input[2] << 0) & ~31; if(addressCRC(address) == (n5)input[2]) { for(u32 index : range(send - 3)) { ram.write(address++, input[3 + index]); } output[0] = dataCRC({&input[3], send - 3}); valid = 1; } } //rumble pak if(gamepad->motor) { u32 address = (input[1] << 8 | input[2] << 0) & ~31; if(addressCRC(address) == (n5)input[2]) { output[0] = dataCRC({&input[3], send - 3}); valid = 1; gamepad->rumble(input[3] & 1); } } } } } //read EEPROM if(input[0] == 0x04 && send >= 2) { u32 address = input[1] * 8; for(u32 index : range(recv)) { output[index] = cartridge.eeprom.read(address++); } valid = 1; } //write EEPROM if(input[0] == 0x05 && send >= 2 && recv >= 1) { u32 address = input[1] * 8; for(u32 index : range(send - 2)) { cartridge.eeprom.write(address++, input[2 + index]); } output[0] = 0x00; valid = 1; } //RTC status if(input[0] == 0x06) { debug(unimplemented, "[SI::main] RTC status"); } //RTC read if(input[0] == 0x07) { debug(unimplemented, "[SI::main] RTC read"); } //RTC write if(input[0] == 0x08) { debug(unimplemented, "[SI::main] RTC write"); } if(!valid) { pi.ram.write(recvOffset, 0x80 | recv & 0x3f); } for(u32 index : range(recv)) { pi.ram.write(offset++, output[index]); } channel++; } if constexpr(Debug) { print("[\n"); for(u32 y : range(8)) { print(" "); for(u32 x : range(8)) { print(hex(pi.ram.read(y * 8 + x), 2L), " "); } print("\n"); } print("]\n"); } } //CIC-NUS-6105 anti-piracy challenge/response auto SI::challenge() -> void { static n4 lut[32] = { 0x4, 0x7, 0xa, 0x7, 0xe, 0x5, 0xe, 0x1, 0xc, 0xf, 0x8, 0xf, 0x6, 0x3, 0x6, 0x9, 0x4, 0x1, 0xa, 0x7, 0xe, 0x5, 0xe, 0x1, 0xc, 0x9, 0x8, 0x5, 0x6, 0x3, 0xc, 0x9, }; n4 challenge[30]; n4 response[30]; //15 bytes -> 30 nibbles for(u32 address : range(15)) { auto data = pi.ram.read(0x30 + address); challenge[address << 1 | 0] = data >> 4; challenge[address << 1 | 1] = data >> 0; } n4 key = 0xb; n1 sel = 0; for(u32 address : range(30)) { n4 data = key + 5 * challenge[address]; response[address] = data; key = lut[sel << 4 | data]; n1 mod = data >> 3; n3 mag = data >> 0; if(mod) mag = ~mag; if(mag % 3 != 1) mod = !mod; if(sel) { if(data == 0x1 || data == 0x9) mod = 1; if(data == 0xb || data == 0xe) mod = 0; } sel = mod; } //30 nibbles -> 15 bytes for(u32 address : range(15)) { n8 data = 0; data |= response[address << 1 | 0] << 4; data |= response[address << 1 | 1] << 0; pi.ram.write(0x30 + address, data); } } auto SI::power(bool reset) -> void { io = {}; } } ares-126/ares/n64/si/si.hpp000066400000000000000000000020041415063341600154150ustar00rootroot00000000000000//Serial Interface struct SI : Memory::IO { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //si.cpp auto load(Node::Object) -> void; auto unload() -> void; auto addressCRC(u16 address) const -> n5; auto dataCRC(array_view data) const -> n8; auto run() -> void; auto scan() -> void; auto challenge() -> void; auto power(bool reset) -> void; //dma.cpp auto dmaRead() -> void; auto dmaWrite() -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n24 dramAddress; n32 readAddress; n32 writeAddress; n1 dmaBusy; n1 ioBusy; n1 readPending; n4 pchState; n4 dmaState; n1 dmaError; n1 interrupt; } io; }; extern SI si; ares-126/ares/n64/system/000077500000000000000000000000001415063341600152065ustar00rootroot00000000000000ares-126/ares/n64/system/serialization.cpp000066400000000000000000000020701415063341600205660ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(/* reset = */ false); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { s(queue); s(cartridge); s(controllerPort1); s(controllerPort2); s(controllerPort3); s(controllerPort4); s(rdram); s(mi); s(vi); s(ai); s(pi); s(ri); s(si); s(cpu); s(rdp); s(rsp); s(dd); } ares-126/ares/n64/system/system.cpp000066400000000000000000000065671415063341600172540ustar00rootroot00000000000000#include namespace ares::Nintendo64 { auto enumerate() -> vector { return { "[Nintendo] Nintendo 64 (NTSC)", "[Nintendo] Nintendo 64 (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } auto option(string name, string value) -> bool { #if defined(VULKAN) if(name == "Quality" && value == "SD" ) vulkan.internalUpscale = 1; if(name == "Quality" && value == "HD" ) vulkan.internalUpscale = 2; if(name == "Quality" && value == "UHD") vulkan.internalUpscale = 4; if(name == "Supersampling") vulkan.supersampleScanout = value.boolean(); if(vulkan.internalUpscale == 1) vulkan.supersampleScanout = false; vulkan.outputUpscale = vulkan.supersampleScanout ? 1 : vulkan.internalUpscale; #endif return true; } System system; Queue queue; #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { while(!vi.refreshed) cpu.main(); vi.refreshed = false; si.run(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Nintendo 64")) { information.name = "Nintendo 64"; } if(name.find("NTSC")) { information.region = Region::NTSC; } if(name.find("PAL")) { information.region = Region::PAL; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; cartridgeSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); controllerPort3.load(node); controllerPort4.load(node); rdram.load(node); mi.load(node); vi.load(node); ai.load(node); pi.load(node); ri.load(node); si.load(node); cpu.load(node); rdp.load(node); rsp.load(node); dd.load(node); #if defined(VULKAN) vulkan.load(node); #endif return true; } auto System::unload() -> void { if(!node) return; save(); #if defined(VULKAN) vulkan.unload(); #endif cartridgeSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); controllerPort3.unload(); controllerPort4.unload(); rdram.unload(); mi.unload(); vi.unload(); ai.unload(); pi.unload(); ri.unload(); si.unload(); cpu.unload(); rdp.unload(); rsp.unload(); dd.unload(); pak.reset(); node.reset(); } auto System::save() -> void { if(!node) return; cartridge.save(); controllerPort1.save(); controllerPort2.save(); controllerPort3.save(); controllerPort4.save(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); if constexpr(Accuracy::CPU::Recompiler || Accuracy::RSP::Recompiler) { ares::Memory::FixedAllocator::get().release(); } queue.reset(); cartridge.power(reset); rdram.power(reset); dd.power(reset); mi.power(reset); vi.power(reset); ai.power(reset); pi.power(reset); ri.power(reset); si.power(reset); cpu.power(reset); rdp.power(reset); rsp.power(reset); } } ares-126/ares/n64/system/system.hpp000066400000000000000000000017761415063341600172560ustar00rootroot00000000000000struct System { Node::System node; VFS::Pak pak; enum class Region : u32 { NTSC, PAL }; auto name() const -> string { return information.name; } auto region() const -> Region { return information.region; } auto frequency() const -> u32 { return information.frequency; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(bool synchronize = true) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Nintendo 64"; Region region = Region::NTSC; u32 frequency = 93'750'000 * 2; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Region::NTSC() -> bool { return system.region() == System::Region::NTSC; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/n64/vi/000077500000000000000000000000001415063341600143005ustar00rootroot00000000000000ares-126/ares/n64/vi/debugger.cpp000066400000000000000000000015421415063341600165720ustar00rootroot00000000000000auto VI::Debugger::load(Node::Object parent) -> void { tracer.io = parent->append("I/O", "VI"); } auto VI::Debugger::io(bool mode, u32 address, u32 data) -> void { static const vector registerNames = { "VI_CONTROL", "VI_DRAM_ADDRESS", "VI_H_WIDTH", "VI_V_INTR", "VI_V_CURRENT_LINE", "VI_TIMING", "VI_V_SYNC", "VI_H_SYNC", "VI_H_SYNC_LEAP", "VI_H_VIDEO", "VI_V_VIDEO", "VI_V_BURST", "VI_X_SCALE", "VI_Y_SCALE", }; if(unlikely(tracer.io->enabled())) { string message; string name = registerNames(address, "VI_UNKNOWN"); if(mode == Read) { message = {name.split("|").first(), " => ", hex(data, 8L)}; } if(mode == Write) { message = {name.split("|").last(), " <= ", hex(data, 8L)}; } tracer.io->notify(message); } } ares-126/ares/n64/vi/io.cpp000066400000000000000000000100021415063341600154040ustar00rootroot00000000000000auto VI::readWord(u32 address) -> u32 { address = (address & 0xfffff) >> 2; n32 data; if(address == 0) { //VI_CONTROL data.bit( 0, 1) = io.colorDepth; data.bit( 2) = io.gammaDither; data.bit( 3) = io.gamma; data.bit( 4) = io.divot; data.bit( 5) = io.reserved.bit(5); data.bit( 6) = io.serrate; data.bit( 7) = io.reserved.bit(7); data.bit( 8, 9) = io.antialias; data.bit(10,15) = io.reserved.bit(10,15); } if(address == 1) { //VI_DRAM_ADDRESS data.bit(0,23) = io.dramAddress; } if(address == 2) { //VI_H_WIDTH data.bit(0,11) = io.width; } if(address == 3) { //VI_V_INTR data.bit(0,9) = io.coincidence; } if(address == 4) { //VI_V_CURRENT_LINE data.bit(0) = io.field & io.serrate; data.bit(1,9) = io.vcounter; } if(address == 5) { //VI_TIMING data.bit( 0, 7) = io.hsyncWidth; data.bit( 8,15) = io.colorBurstWidth; data.bit(16,19) = io.vsyncWidth; data.bit(20,29) = io.colorBurstHsync; } if(address == 6) { //VI_V_SYNC data.bit(0,9) = io.halfLinesPerField; } if(address == 7) { //VI_H_SYNC data.bit( 0,11) = io.quarterLineDuration; data.bit(16,20) = io.palLeapPattern; } if(address == 8) { //VI_H_SYNC_LEAP data.bit( 0,11) = io.hsyncLeap[0]; data.bit(16,27) = io.hsyncLeap[1]; } if(address == 9) { //VI_H_VIDEO data.bit( 0, 9) = io.hend; data.bit(16,25) = io.hstart; } if(address == 10) { //VI_V_VIDEO data.bit( 0, 9) = io.vend; data.bit(16,25) = io.vstart; } if(address == 11) { //VI_V_BURST data.bit( 0, 9) = io.colorBurstEnd; data.bit(16,25) = io.colorBurstStart; } if(address == 12) { //VI_X_SCALE data.bit( 0,11) = io.xscale; data.bit(16,27) = io.xsubpixel; } if(address == 13) { //VI_Y_SCALE data.bit( 0,11) = io.yscale; data.bit(16,27) = io.ysubpixel; } debugger.io(Read, address, data); return data; } auto VI::writeWord(u32 address, u32 data_) -> void { address = (address & 0xfffff) >> 2; n32 data = data_; #if defined(VULKAN) vulkan.writeWord(address, data); #endif if(address == 0) { //VI_CONTROL io.colorDepth = data.bit( 0, 1); io.gammaDither = data.bit( 2); io.gamma = data.bit( 3); io.divot = data.bit( 4); io.reserved.bit(5) = data.bit( 5); io.serrate = data.bit( 6); io.reserved.bit(7) = data.bit( 7); io.antialias = data.bit( 8, 9); io.reserved.bit(10,15) = data.bit(10,15); } if(address == 1) { //VI_DRAM_ADDRESS io.dramAddress = data.bit(0,23); } if(address == 2) { //VI_H_WIDTH io.width = data.bit(0,11); } if(address == 3) { //VI_V_INTR io.coincidence = data.bit(0,9); } if(address == 4) { //VI_V_CURRENT_LINE mi.lower(MI::IRQ::VI); } if(address == 5) { //VI_TIMING io.hsyncWidth = data.bit( 0, 7); io.colorBurstWidth = data.bit( 8,15); io.vsyncWidth = data.bit(16,19); io.colorBurstHsync = data.bit(20,29); } if(address == 6) { //VI_V_SYNC io.halfLinesPerField = data.bit(0,9); } if(address == 7) { //VI_H_SYNC io.quarterLineDuration = data.bit( 0,11); io.palLeapPattern = data.bit(16,20); } if(address == 8) { //VI_H_SYNC_LEAP io.hsyncLeap[0] = data.bit( 0,11); io.hsyncLeap[1] = data.bit(16,27); } if(address == 9) { //VI_H_VIDEO io.hend = data.bit( 0, 9); io.hstart = data.bit(16,25); } if(address == 10) { //VI_V_VIDEO io.vend = data.bit( 0, 9); io.vstart = data.bit(16,25); } if(address == 11) { //VI_V_BURST io.colorBurstEnd = data.bit( 0, 9); io.colorBurstStart = data.bit(16,25); } if(address == 12) { //VI_X_SCALE io.xscale = data.bit( 0,11); io.xsubpixel = data.bit(16,27); } if(address == 13) { //VI_Y_SCALE io.yscale = data.bit( 0,11); io.ysubpixel = data.bit(16,27); } debugger.io(Write, address, data); } ares-126/ares/n64/vi/serialization.cpp000066400000000000000000000012151415063341600176600ustar00rootroot00000000000000auto VI::serialize(serializer& s) -> void { Thread::serialize(s); s(io.colorDepth); s(io.gammaDither); s(io.gamma); s(io.divot); s(io.serrate); s(io.antialias); s(io.reserved); s(io.dramAddress); s(io.width); s(io.coincidence); s(io.hsyncWidth); s(io.colorBurstWidth); s(io.vsyncWidth); s(io.colorBurstHsync); s(io.halfLinesPerField); s(io.quarterLineDuration); s(io.palLeapPattern); s(io.hsyncLeap); s(io.hend); s(io.hstart); s(io.vend); s(io.vstart); s(io.colorBurstEnd); s(io.colorBurstStart); s(io.xscale); s(io.xsubpixel); s(io.yscale); s(io.ysubpixel); s(io.vcounter); s(io.field); } ares-126/ares/n64/vi/vi.cpp000066400000000000000000000075111415063341600154260ustar00rootroot00000000000000#include namespace ares::Nintendo64 { VI vi; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto VI::load(Node::Object parent) -> void { node = parent->append("VI"); #if defined(VULKAN) screen = node->append("Screen", vulkan.outputUpscale * 640, vulkan.outputUpscale * 576); #else screen = node->append("Screen", 640, 576); #endif screen->setRefresh({&VI::refresh, this}); screen->colors((1 << 24) + (1 << 15), [&](n32 color) -> n64 { if(color < (1 << 24)) { u64 a = 65535; u64 r = image::normalize(color >> 16 & 255, 8, 16); u64 g = image::normalize(color >> 8 & 255, 8, 16); u64 b = image::normalize(color >> 0 & 255, 8, 16); return a << 48 | r << 32 | g << 16 | b << 0; } else { u64 a = 65535; u64 r = image::normalize(color >> 10 & 31, 5, 16); u64 g = image::normalize(color >> 5 & 31, 5, 16); u64 b = image::normalize(color >> 0 & 31, 5, 16); return a << 48 | r << 32 | g << 16 | b << 0; } }); #if defined(VULKAN) screen->setSize(vulkan.outputUpscale * 640, vulkan.outputUpscale * 480); if(!vulkan.supersampleScanout) { screen->setScale(1.0 / vulkan.outputUpscale, 1.0 / vulkan.outputUpscale); } #else screen->setSize(640, 480); #endif debugger.load(node); } auto VI::unload() -> void { debugger = {}; screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VI::main() -> void { //field is not compared if(io.vcounter << 1 == io.coincidence) { mi.raise(MI::IRQ::VI); } if(++io.vcounter >= (Region::NTSC() ? 262 : 312) + io.field) { io.vcounter = 0; io.field = io.field + 1 & io.serrate; if(!io.field) { #if defined(VULKAN) gpuOutputValid = vulkan.scanoutAsync(io.field); vulkan.frame(); #endif refreshed = true; screen->frame(); } } if(Region::NTSC()) step(system.frequency() / 60 / 262); if(Region::PAL ()) step(system.frequency() / 50 / 312); } auto VI::step(u32 clocks) -> void { Thread::clock += clocks; } auto VI::refresh() -> void { #if defined(VULKAN) if(gpuOutputValid) { const u8* rgba = nullptr; u32 width = 0, height = 0; vulkan.mapScanoutRead(rgba, width, height); if(rgba) { screen->setViewport(0, 0, width, height); for(u32 y : range(height)) { auto source = rgba + width * y * sizeof(u32); auto target = screen->pixels(1).data() + y * vulkan.outputUpscale * 640; for(u32 x : range(width)) { target[x] = source[x * 4 + 0] << 16 | source[x * 4 + 1] << 8 | source[x * 4 + 2] << 0; } } } else { screen->setViewport(0, 0, 1, 1); screen->pixels(1).data()[0] = 0; } vulkan.unmapScanoutRead(); vulkan.endScanout(); return; } #endif u32 pitch = vi.io.width; u32 width = vi.io.width; //vi.io.xscale <= 0x300 ? 320 : 640; u32 height = vi.io.yscale <= 0x400 ? 239 : 478; screen->setViewport(0, 0, width, height); if(vi.io.colorDepth == 2) { //15bpp for(u32 y : range(height)) { u32 address = vi.io.dramAddress + y * pitch * 2; auto line = screen->pixels(1).data() + y * 640; for(u32 x : range(min(width, pitch))) { u16 data = bus.read(address + x * 2); *line++ = 1 << 24 | data >> 1; } } } if(vi.io.colorDepth == 3) { //24bpp for(u32 y : range(height)) { u32 address = vi.io.dramAddress + y * pitch * 4; auto line = screen->pixels(1).data() + y * 640; for(u32 x : range(min(width, pitch))) { u32 data = bus.read(address + x * 4); *line++ = data >> 8; } } } } auto VI::power(bool reset) -> void { Thread::reset(); screen->power(); io = {}; refreshed = false; #if defined(VULKAN) gpuOutputValid = false; #endif } } ares-126/ares/n64/vi/vi.hpp000066400000000000000000000026421415063341600154330ustar00rootroot00000000000000//Video Interface struct VI : Thread, Memory::IO { Node::Object node; Node::Video::Screen screen; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto io(bool mode, u32 address, u32 data) -> void; struct Tracer { Node::Debugger::Tracer::Notification io; } tracer; } debugger; //vi.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto refresh() -> void; auto power(bool reset) -> void; //io.cpp auto readWord(u32 address) -> u32; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n2 colorDepth; n1 gammaDither; n1 gamma; n1 divot; n1 serrate; //interlace n2 antialias; n32 reserved; n24 dramAddress; n12 width; n10 coincidence = 256; n8 hsyncWidth; n8 colorBurstWidth; n4 vsyncWidth; n10 colorBurstHsync; n10 halfLinesPerField; n12 quarterLineDuration; n5 palLeapPattern; n12 hsyncLeap[2]; n10 hend; n10 hstart; n10 vend; n10 vstart; n10 colorBurstEnd; n10 colorBurstStart; n12 xscale; n12 xsubpixel; n12 yscale; n12 ysubpixel; //internal: n9 vcounter; n1 field; } io; //unserialized: bool refreshed; #if defined(VULKAN) bool gpuOutputValid = false; #endif }; extern VI vi; ares-126/ares/n64/vulkan/000077500000000000000000000000001415063341600151625ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/000077500000000000000000000000001415063341600175415ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/COMMIT000066400000000000000000000000511415063341600204500ustar00rootroot0000000000000031ea5eb2d6fcb2d8f1df5f0951364322d09ac01a ares-126/ares/n64/vulkan/parallel-rdp/LICENSE000066400000000000000000000020361415063341600205470ustar00rootroot00000000000000Copyright (c) 2020 Themaister Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ares-126/ares/n64/vulkan/parallel-rdp/README.md000066400000000000000000000317111415063341600210230ustar00rootroot00000000000000# paraLLEl-RDP This project is a revival and complete rewrite of the old, defunct paraLLEl-RDP project. The goal is to implement the Nintendo 64 RDP graphics chip as accurately as possible using Vulkan compute. The implementation aims to be bitexact with the [Angrylion-Plus](https://github.com/ata4/angrylion-rdp-plus) reference renderer where possible. ## Disclaimer While paraLLEl-RDP uses [Angrylion-Plus](https://github.com/ata4/angrylion-rdp-plus) as an implementation reference, it is not a port, and not a derived codebase of said project. It is written from scratch by studying [Angrylion-Plus](https://github.com/ata4/angrylion-rdp-plus) and trying to understand what is going on. The test suite uses [Angrylion-Plus](https://github.com/ata4/angrylion-rdp-plus) as a reference to validate implementation and cross-checking behavior. ## Use cases - **Much** faster LLE RDP emulation of N64 compared to a CPU implementation as parallel graphics workloads are offloaded to the GPU. Emulation performance is now completely bound by CPU and LLE RSP performance. Early benchmarking results suggest 2000 - 5000 VI/s being achieved on mid-range desktop GPUs based on timestamp data. There is no way the CPU emulation can keep up with that, but that means this should scale down to fairly gimped GPUs as well, assuming the driver requirements are met. - A backend renderer for standalone engines which aim to efficiently reproduce faithful N64 graphics. - Hopefully, an easier to understand implementation than the reference renderer. - An esoteric use case of advanced Vulkan compute programming. ## Missing features The implementation is quite complete, and compatibility is very high in the limited amount of content I've tested. However, not every single feature is supported at this moment. Ticking the last boxes depends mostly on real content making use of said features. - Color combiner chroma keying - Various "bugs" / questionable behavior that seems meaningless to emulate - Certain extreme edge cases in TMEM upload. The implementation has tests for many "crazy" edge cases though. - ... possibly other obscure features The VI is essentially complete. A fancy deinterlacer might be useful to add since we have plenty of GPU cycles to spare in the graphics queue. The VI filtering is always turned on if game requests it, but features can selectively be turned off for the pixel purists. ## Environment variables for development / testing ### `RDP_DEBUG` / `RDP_DEBUG_X` / `RDP_DEBUG_Y` Supports printf in shaders, which is extremely useful to drill down difficult bugs. Only printfs from certain pixels can be filtered through to avoid spam. ### `VI_DEBUG` / `VI_DEBUG_X` / `VI_DEBUG_Y` Same as `RDP_DEBUG` but for the VI. ### `PARALLEL_RDP_MEASURE_SYNC_TIME` Measures time stalled in `CommandProcessor::wait_for_timeline`. Useful to measure CPU overhead in hard-synced emulator integrations. ### `PARALLEL_RDP_SMALL_TYPES=0` Force-disables 8/16-bit arithmetic support. Useful when suspecting driver bugs. ### `PARALLEL_RDP_UBERSHADER=1` Forces the use of ubershaders. Can be extremely slow depending on the shader compiler. ### `PARALLEL_RDP_FORCE_SYNC_SHADER=1` Disabled async pipeline optimization, and blocks for every shader compiler. Only use if the ubershader crashes, since this adds the dreaded shader compilation stalls. ### `PARALLEL_RDP_BENCH=1` Measures RDP rendering time spent on GPU using Vulkan timestamps. At end of a run, reports average time spent per render pass, and how many render passes are flushed per frame. ### `PARALLEL_RDP_SUBGROUP=0` Force-disables use of Vulkan subgroup operations, which are used to optimize the tile binning algorithm. ### `PARALLEL_RDP_ALLOW_EXTERNAL_HOST=0` Disables use of `VK_EXT_external_memory_host`. For testing. ## Vulkan driver requirements paraLLEl-RDP requires up-to-date Vulkan implementations. A lot of the great improvements over the previous implementation comes from the idea that we can implement N64's UMA by simply importing RDRAM directly as an SSBO and perform 8 and 16-bit data access over the bus. With the tile based architecture in paraLLEl-RDP, this works very well and actual PCI-e traffic is massively reduced. The bandwidth for doing this is also trivial. On iGPU systems, this also works really well, since it's all the same memory anyways. Thus, the requirements are as follows. All of these features are widely supported, or will soon be in drivers. paraLLEl-RDP does not aim for compatibility with ancient hardware and drivers. Just use the reference renderer for that. This is enthusiast software for a niche audience. - Vulkan 1.1 - VK_KHR_8bit_storage / VK_KHR_16bit_storage - Optionally VK_KHR_shader_float16_int8 which enables small integer arithmetic - Optionally subgroup support with VK_EXT_subgroup_size_control - For integration in emulators, VK_EXT_external_memory_host is currently required (may be relaxed later at some performance cost) ### Tested drivers paraLLEl-RDP has been tested on Linux and Windows on all desktop vendors. - Intel Mesa (20.0.6) - Passes conformance - Intel Windows - Passes conformance (**CAVEAT**. Intel Windows requires 64 KiB alignment for host memory import, make sure to add some padding around RDRAM in an emulator to make this work well.) - AMD RADV LLVM (20.0.6) - Passes conformance - AMD RADV ACO - Passes conformance with bleeding edge drivers and `PARALLEL_RDP_SMALL_TYPES=0`. - Linux AMDGPU-PRO - Passes conformance, with caveat that 8/16-bit arithmetic does not work correctly for some tests. paraLLEl-RDP automatically disables small integer arithmetic for proprietary AMD driver. - AMD Windows - Passes conformance with same caveat and workaround as AMDGPU-PRO. - NVIDIA Linux - Passes conformance (**MAJOR CAVEAT**, NVIDIA Linux does not support VK_EXT_external_memory_host as of 2020-05-12.) - NVIDIA Windows - Passes conformance ## Implementation strategy This project uses Vulkan compute shaders to implement a fully programmable rasterization pipeline. The overall rendering architecture is reused from [RetroWarp](https://github.com/Themaister/RetroWarp) with some further refinements. The lower level Vulkan backend comes from [Granite](https://github.com/Themaister/Granite). ### Asynchronous pipeline optimization Toggleable paths in RDP state is expressed as specialization constants. The rendering thread will detect new state combinations and kick off building pipelines which only specify exact state needed to render. This is a massive performance optimization. The same shaders are used for an "ubershader" fallback when pipelines are not ready. In this case, specialization constants are simply not used. The same SPIR-V modules are reused to great effect using this Vulkan feature. ### Tile-based rendering See [RetroWarp](https://github.com/Themaister/RetroWarp) for more details. ### GPU-driven TMEM management TMEM management is fully GPU-driven, but this is a very complicated implementation. Certain combinations of formats are not supported, but such cases would produce meaningless results, and it is unclear that applications can make meaningful use of these "weird" uploads. ### Synchronization Synchronizing the GPU and CPU emulation is one of the hot button issues of N64 emulation. The integration code is designed around a timeline of synchronization points which can be waited on by the CPU when appropriate. For accurate emulation, an OpSyncFull is generally followed by a full wait, but most games can be more relaxed and only synchronize with the CPU N frames later. Implementation of this behavior is outside the scope of paraLLEl-RDP, and is left up to the integration code. ### Asynchronous compute GPUs with a dedicated compute queue is recommended for optimal performance since RDP shading work can happen on the compute queue, and won't be blocked by graphics workloads happening in the graphics queue, which will typically be VI scanout and frontend applying shaders on top. ## Project structure This project implements several submodules which are quite useful. ### rdp-replayer This app replays RDP dump files, which are produced by running content through an RDP dumper. An implementation can be found in e.g. parallel-N64. The file format is very simple and essentially contains a record of RDRAM changes and RDP command streams. This dump is replayed and a live comparison between the reference renderer can be compared to paraLLEl-RDP with visual output. The UI is extremely crude, and is not user-friendly, but good enough for my use. ### rdp-conformance I made a somewhat comprehensive test suite for the RDP, with a custom higher level RDP command stream generator. There are roughly ~150 fuzz tests which exercise many aspects of the RDP. In order to pass the test, paraLLEl-RDP must produce bit-exact results compared to Angrylion, so the test condition is as stringent as possible. #### A note on bitexactness There are a few cases where bit-exactness is a meaningless term, such as the noise feature of the RDP. It is not particularly meaningful to exactly reproduce noise, since it is by its very nature unpredictable. For that reason, this repo references a fork of the reference renderer which implements deterministic "undefined behavior" where appropriate. The exact formulation of the noise generator is not very interesting as long as correct entropy and output range is reproduced. ##### Intentional differences from reference renderer Certain effects invoke "undefined behavior" in the RDP and requires cycle accuracy to resolve bit-accurately with real RDP. Reference renderer attempts to emulate these effects, but to reproduce this behavior breaks any form of multi-threading. To be able to validate dumps in a sensible way with buggy content, I modified the reference slightly to make certain "undefined behavior" deterministic. This doesn't meaningfully change the rendered output in the cases I've seen in the wild. Some of these effects would be possible to emulate, but at the cost of lots of added complexity and it wouldn't be quite correct anyways given the cycle accuracy issue. - CombinedColor/Alpha in first cycle is cleared to zero. Some games read this in first cycle, and reference renderer will read whatever was generated last pixel. This causes issues in some cases, where cycle accuracy would have caused the feedback to converge to zero over time. - Reading LODFrac in 1 cycle mode. This is currently ignored. The results generated seem non-sensical. Never seen this in the wild. - Using TexLOD in copy mode. This is currently ignored. The results generated seem non-sensical. Never seen this in the wild. - Reading MemoryColor in first blender cycle in 2-cycle mode. Reference seems to wait until the second cycle before updating this value, despite memory coverage being updated right away. The sensible thing to do is to allow reading memory color in first cycle. - Alpha testing in 2-cycle mode reads combined alpha from next pixel in reference. Just doing alpha testing in first cycle on current pixel is good enough. If this is correct hardware behavior, I consider this a hardware bug. - Reading Texel1 in cycle 1 of 2-cycle mode reads the Texel0 from next pixel. In the few cases I've seen this, the rendered output is slightly buggy, but it's hardly visible in motion. The workaround is just to read Texel0 from current pixel which still renders fine. ### vi-conformance This is a conformance suite, except for the video interface (VI) unit. ### rdp-validate-dump This tool replays an RDP dump headless and compares outputs between reference renderer and paraLLEl-RDP. To pass, bitexact output must be generated. ## Build Checkout submodules. This pulls in Angrylion-Plus as well as Granite. ``` git submodule update --init --recursive ``` Standard CMake build. ``` mkdir build cd build cmake .. cmake --build . --parallel (--config Release on MSVC) ``` ### Run test suite You can run rdp-conformance and vi-conformance with ctest to verify if your driver is behaving correctly. ``` ctest (-C Release on MSVC) ``` ### Embedding shaders in a C++ header If embedding paraLLEl-RDP in an emulator project, it is helpful to pre-compile and bake SPIR-V shaders in a C++ header. Build slangmosh from Granite, and then run: ``` slangmosh parallel-rdp/shaders/slangmosh.json --output slangmosh.hpp --vk11 --strip -O --namespace RDP ``` ### Generating a standalone code base for emulator integration Run the `generate_standalone_codebase.sh $OUTDIR` script with an output directory `$OUTDIR/` as argument to generate a standalone code base which can be built without any special build system support. Include `$OUTDIR/config.mk` if building with Make to make your life easier. Note that `slangmosh` must be in your path for this script to run. It executes the command above to build `slangmosh.hpp`. ## License paraLLEl-RDP is licensed under the permissive license MIT. See included LICENSE file. This implementation builds heavily on the knowledge (but not code) gained from studying the reference implementation, thus it felt fair to release it under a permissive license, so my work could be reused more easily. ares-126/ares/n64/vulkan/parallel-rdp/config.mk000066400000000000000000000047001415063341600213400ustar00rootroot00000000000000# For use in standalone implementations. PARALLEL_RDP_CFLAGS := PARALLEL_RDP_CXXFLAGS := -DGRANITE_VULKAN_MT PARALLEL_RDP_SOURCES_CXX := \ $(wildcard $(PARALLEL_RDP_IMPLEMENTATION)/parallel-rdp/*.cpp) \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/buffer.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/buffer_pool.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/command_buffer.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/command_pool.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/context.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/cookie.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/descriptor_set.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/device.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/event_manager.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/fence.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/fence_manager.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/image.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/memory_allocator.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/pipeline_event.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/query_pool.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/render_pass.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/sampler.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/semaphore.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/semaphore_manager.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/shader.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/vulkan/texture_format.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/util/logging.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/util/thread_id.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/util/aligned_alloc.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/util/timer.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/util/timeline_trace_file.cpp \ $(PARALLEL_RDP_IMPLEMENTATION)/util/thread_name.cpp PARALLEL_RDP_SOURCES_C := \ $(PARALLEL_RDP_IMPLEMENTATION)/volk/volk.c PARALLEL_RDP_INCLUDE_DIRS := \ -I$(PARALLEL_RDP_IMPLEMENTATION)/parallel-rdp \ -I$(PARALLEL_RDP_IMPLEMENTATION)/volk \ -I$(PARALLEL_RDP_IMPLEMENTATION)/vulkan \ -I$(PARALLEL_RDP_IMPLEMENTATION)/vulkan-headers/include \ -I$(PARALLEL_RDP_IMPLEMENTATION)/util PARALLEL_RDP_LDFLAGS := -pthread ifeq (,$(findstring win,$(platform))) PARALLEL_RDP_LDFLAGS += -ldl else PARALLEL_RDP_CFLAGS += -DVK_USE_PLATFORM_WIN32_KHR PARALLEL_RDP_LDFLAGS += -lwinmm endif ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/000077500000000000000000000000001415063341600221205ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/command_ring.cpp000066400000000000000000000072271415063341600252710ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include #include "command_ring.hpp" #include "rdp_device.hpp" #include "thread_id.hpp" #include namespace RDP { void CommandRing::init( #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::GlobalManagersHandle global_handles_, #endif CommandProcessor *processor_, unsigned count) { assert((count & (count - 1)) == 0); teardown_thread(); processor = processor_; ring.resize(count); write_count = 0; read_count = 0; #ifdef PARALLEL_RDP_SHADER_DIR global_handles = std::move(global_handles_); #endif thr = std::thread(&CommandRing::thread_loop, this); } void CommandRing::teardown_thread() { if (thr.joinable()) { enqueue_command(0, nullptr); thr.join(); } } CommandRing::~CommandRing() { teardown_thread(); } void CommandRing::drain() { std::unique_lock holder{lock}; cond.wait(holder, [this]() { return write_count == completed_count; }); } void CommandRing::enqueue_command(unsigned num_words, const uint32_t *words) { std::unique_lock holder{lock}; cond.wait(holder, [this, num_words]() { return write_count + num_words + 1 <= read_count + ring.size(); }); size_t mask = ring.size() - 1; ring[write_count++ & mask] = num_words; for (unsigned i = 0; i < num_words; i++) ring[write_count++ & mask] = words[i]; cond.notify_one(); } void CommandRing::thread_loop() { Util::register_thread_index(0); #ifdef PARALLEL_RDP_SHADER_DIR // Here to let the RDP play nice with full Granite. // When we move to standalone Granite, we won't need to interact with global subsystems like this. Granite::Global::set_thread_context(*global_handles); global_handles.reset(); #endif std::vector tmp_buffer; tmp_buffer.reserve(64); size_t mask = ring.size() - 1; for (;;) { bool is_idle = false; { std::unique_lock holder{lock}; if (cond.wait_for(holder, std::chrono::microseconds(500), [this]() { return write_count > read_count; })) { uint32_t num_words = ring[read_count++ & mask]; tmp_buffer.resize(num_words); for (uint32_t i = 0; i < num_words; i++) tmp_buffer[i] = ring[read_count++ & mask]; } else { // If we don't receive commands at a steady pace, // notify rendering thread that we should probably kick some work. tmp_buffer.resize(1); tmp_buffer[0] = uint32_t(Op::MetaIdle) << 24; is_idle = true; } } if (tmp_buffer.empty()) break; processor->enqueue_command_direct(tmp_buffer.size(), tmp_buffer.data()); if (!is_idle) { std::lock_guard holder{lock}; completed_count = read_count; cond.notify_one(); } } } } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/command_ring.hpp000066400000000000000000000036771415063341600253030ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #ifdef PARALLEL_RDP_SHADER_DIR #include "global_managers.hpp" #endif namespace RDP { class CommandProcessor; class CommandRing { public: void init( #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::GlobalManagersHandle global_handles, #endif CommandProcessor *processor, unsigned count); ~CommandRing(); void drain(); void enqueue_command(unsigned num_words, const uint32_t *words); private: CommandProcessor *processor = nullptr; std::thread thr; std::mutex lock; std::condition_variable cond; std::vector ring; uint64_t write_count = 0; uint64_t read_count = 0; uint64_t completed_count = 0; void thread_loop(); void teardown_thread(); #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::GlobalManagersHandle global_handles; #endif }; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/luts.hpp000066400000000000000000007456461415063341600236460ustar00rootroot00000000000000#pragma once #include namespace RDP { static const uint8_t blender_lut[0x8000] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, 64, 65, 65, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, 72, 73, 73, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 98, 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, 104, 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, 110, 110, 111, 111, 112, 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132, 133, 133, 134, 134, 135, 135, 136, 136, 137, 137, 138, 138, 139, 139, 140, 140, 141, 141, 142, 142, 143, 143, 144, 144, 145, 145, 146, 146, 147, 147, 148, 148, 149, 149, 150, 150, 151, 151, 152, 152, 153, 153, 154, 154, 155, 155, 156, 156, 157, 157, 158, 158, 159, 159, 160, 160, 161, 161, 162, 162, 163, 163, 164, 164, 165, 165, 166, 166, 167, 167, 168, 168, 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 174, 174, 175, 175, 176, 176, 177, 177, 178, 178, 179, 179, 180, 180, 181, 181, 182, 182, 183, 183, 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, 190, 191, 191, 192, 192, 193, 193, 194, 194, 195, 195, 196, 196, 197, 197, 198, 198, 199, 199, 200, 200, 201, 201, 202, 202, 203, 203, 204, 204, 205, 205, 206, 206, 207, 207, 208, 208, 209, 209, 210, 210, 211, 211, 212, 212, 213, 213, 214, 214, 215, 215, 216, 216, 217, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 224, 225, 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 239, 239, 240, 240, 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 247, 247, 248, 248, 249, 249, 250, 250, 251, 251, 252, 252, 253, 253, 254, 254, 255, 255, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, 64, 65, 65, 66, 66, 67, 67, 68, 68, 69, 69, 70, 70, 71, 71, 72, 72, 73, 73, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 81, 81, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 98, 99, 99, 100, 100, 101, 101, 102, 102, 103, 103, 104, 104, 105, 105, 106, 106, 107, 107, 108, 108, 109, 109, 110, 110, 111, 111, 112, 112, 113, 113, 114, 114, 115, 115, 116, 116, 117, 117, 118, 118, 119, 119, 120, 120, 121, 121, 122, 122, 123, 123, 124, 124, 125, 125, 126, 126, 127, 127, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42, 42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 31, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 132, 132, 132, 133, 133, 133, 134, 134, 134, 135, 135, 135, 136, 136, 136, 137, 137, 137, 138, 138, 138, 139, 139, 139, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 154, 154, 154, 155, 155, 155, 156, 156, 156, 157, 157, 157, 158, 158, 158, 159, 159, 159, 160, 160, 160, 161, 161, 161, 162, 162, 162, 163, 163, 163, 164, 164, 164, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, 182, 182, 182, 183, 183, 183, 184, 184, 184, 185, 185, 185, 186, 186, 186, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190, 190, 190, 191, 191, 191, 192, 192, 192, 193, 193, 193, 194, 194, 194, 195, 195, 195, 196, 196, 196, 197, 197, 197, 198, 198, 198, 199, 199, 199, 200, 200, 200, 201, 201, 201, 202, 202, 202, 203, 203, 203, 204, 204, 204, 205, 205, 205, 206, 206, 206, 207, 207, 207, 208, 208, 208, 209, 209, 209, 210, 210, 210, 211, 211, 211, 212, 212, 212, 213, 213, 213, 214, 214, 214, 215, 215, 215, 216, 216, 216, 217, 217, 217, 218, 218, 218, 219, 219, 219, 220, 220, 220, 221, 221, 221, 222, 222, 222, 223, 223, 223, 224, 224, 224, 225, 225, 225, 226, 226, 226, 227, 227, 227, 228, 228, 228, 229, 229, 229, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 244, 244, 244, 245, 245, 245, 246, 246, 246, 247, 247, 247, 248, 248, 248, 249, 249, 249, 250, 250, 250, 251, 251, 251, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255, 255, 255, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 67, 67, 67, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 72, 72, 72, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 85, 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 89, 89, 89, 90, 90, 90, 91, 91, 91, 92, 92, 92, 93, 93, 93, 94, 94, 94, 95, 95, 95, 96, 96, 96, 97, 97, 97, 98, 98, 98, 99, 99, 99, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 107, 107, 107, 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 119, 119, 119, 120, 120, 120, 121, 121, 121, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 127, 127, 127, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, 46, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 51, 51, 51, 52, 52, 52, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 24, 24, 24, 25, 25, 25, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, 31, 31, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, 64, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 69, 70, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 81, 82, 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, 84, 85, 85, 85, 85, 86, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, 88, 89, 89, 89, 89, 90, 90, 90, 90, 91, 91, 91, 91, 92, 92, 92, 92, 93, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 95, 96, 96, 96, 96, 97, 97, 97, 97, 98, 98, 98, 98, 99, 99, 99, 99, 100, 100, 100, 100, 101, 101, 101, 101, 102, 102, 102, 102, 103, 103, 103, 103, 104, 104, 104, 104, 105, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 107, 108, 108, 108, 108, 109, 109, 109, 109, 110, 110, 110, 110, 111, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 113, 114, 114, 114, 114, 115, 115, 115, 115, 116, 116, 116, 116, 117, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 122, 123, 123, 123, 123, 124, 124, 124, 124, 125, 125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 127, 128, 128, 128, 128, 129, 129, 129, 129, 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, 133, 133, 133, 133, 134, 134, 134, 134, 135, 135, 135, 135, 136, 136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 138, 139, 139, 139, 139, 140, 140, 140, 140, 141, 141, 141, 141, 142, 142, 142, 142, 143, 143, 143, 143, 144, 144, 144, 144, 145, 145, 145, 145, 146, 146, 146, 146, 147, 147, 147, 147, 148, 148, 148, 148, 149, 149, 149, 149, 150, 150, 150, 150, 151, 151, 151, 151, 152, 152, 152, 152, 153, 153, 153, 153, 154, 154, 154, 154, 155, 155, 155, 155, 156, 156, 156, 156, 157, 157, 157, 157, 158, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 160, 161, 161, 161, 161, 162, 162, 162, 162, 163, 163, 163, 163, 164, 164, 164, 164, 165, 165, 165, 165, 166, 166, 166, 166, 167, 167, 167, 167, 168, 168, 168, 168, 169, 169, 169, 169, 170, 170, 170, 170, 171, 171, 171, 171, 172, 172, 172, 172, 173, 173, 173, 173, 174, 174, 174, 174, 175, 175, 175, 175, 176, 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, 178, 179, 179, 179, 179, 180, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182, 182, 183, 183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 185, 186, 186, 186, 186, 187, 187, 187, 187, 188, 188, 188, 188, 189, 189, 189, 189, 190, 190, 190, 190, 191, 191, 191, 191, 192, 192, 192, 192, 193, 193, 193, 193, 194, 194, 194, 194, 195, 195, 195, 195, 196, 196, 196, 196, 197, 197, 197, 197, 198, 198, 198, 198, 199, 199, 199, 199, 200, 200, 200, 200, 201, 201, 201, 201, 202, 202, 202, 202, 203, 203, 203, 203, 204, 204, 204, 204, 205, 205, 205, 205, 206, 206, 206, 206, 207, 207, 207, 207, 208, 208, 208, 208, 209, 209, 209, 209, 210, 210, 210, 210, 211, 211, 211, 211, 212, 212, 212, 212, 213, 213, 213, 213, 214, 214, 214, 214, 215, 215, 215, 215, 216, 216, 216, 216, 217, 217, 217, 217, 218, 218, 218, 218, 219, 219, 219, 219, 220, 220, 220, 220, 221, 221, 221, 221, 222, 222, 222, 222, 223, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 225, 226, 226, 226, 226, 227, 227, 227, 227, 228, 228, 228, 228, 229, 229, 229, 229, 230, 230, 230, 230, 231, 231, 231, 231, 232, 232, 232, 232, 233, 233, 233, 233, 234, 234, 234, 234, 235, 235, 235, 235, 236, 236, 236, 236, 237, 237, 237, 237, 238, 238, 238, 238, 239, 239, 239, 239, 240, 240, 240, 240, 241, 241, 241, 241, 242, 242, 242, 242, 243, 243, 243, 243, 244, 244, 244, 244, 245, 245, 245, 245, 246, 246, 246, 246, 247, 247, 247, 247, 248, 248, 248, 248, 249, 249, 249, 249, 250, 250, 250, 250, 251, 251, 251, 251, 252, 252, 252, 252, 253, 253, 253, 253, 254, 254, 254, 254, 255, 255, 255, 255, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, 64, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 66, 67, 67, 67, 67, 68, 68, 68, 68, 69, 69, 69, 69, 70, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 73, 74, 74, 74, 74, 75, 75, 75, 75, 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 79, 80, 80, 80, 80, 81, 81, 81, 81, 82, 82, 82, 82, 83, 83, 83, 83, 84, 84, 84, 84, 85, 85, 85, 85, 86, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, 88, 89, 89, 89, 89, 90, 90, 90, 90, 91, 91, 91, 91, 92, 92, 92, 92, 93, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 95, 96, 96, 96, 96, 97, 97, 97, 97, 98, 98, 98, 98, 99, 99, 99, 99, 100, 100, 100, 100, 101, 101, 101, 101, 102, 102, 102, 102, 103, 103, 103, 103, 104, 104, 104, 104, 105, 105, 105, 105, 106, 106, 106, 106, 107, 107, 107, 107, 108, 108, 108, 108, 109, 109, 109, 109, 110, 110, 110, 110, 111, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 113, 114, 114, 114, 114, 115, 115, 115, 115, 116, 116, 116, 116, 117, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 122, 123, 123, 123, 123, 124, 124, 124, 124, 125, 125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 127, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51, 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 25, 25, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 207, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 232, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 42, 42, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 10, 10, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 207, 207, 208, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 226, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 232, 232, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 233, 234, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 243, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 246, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 109, 109, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 54, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 13, 13, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 6, 7, 7, 7, 7, 7, 7, 7, 3, 3, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 207, 207, 207, 208, 208, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, 219, 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223, 223, 223, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 225, 226, 226, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 231, 232, 232, 232, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 234, 234, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 243, 243, 244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245, 246, 246, 246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 227, 227, 226, 226, 229, 229, 228, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 229, 229, 228, 228, 235, 235, 234, 234, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 234, 234, 237, 237, 236, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 235, 235, 234, 234, 232, 232, 232, 232, 247, 247, 247, 247, 245, 245, 244, 244, 240, 241, 241, 241, 241, 241, 241, 241, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 186, 186, 189, 189, 188, 188, 174, 174, 174, 174, 174, 174, 174, 175, 171, 171, 170, 170, 168, 168, 168, 168, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 135, 135, 135, 135, 133, 133, 132, 132, 139, 139, 138, 138, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 138, 138, 141, 141, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 23, 23, 23, 23, 21, 21, 20, 20, 16, 17, 17, 17, 17, 17, 17, 17, 46, 46, 46, 46, 46, 46, 46, 47, 43, 43, 42, 42, 40, 40, 40, 40, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 34, 34, 37, 37, 36, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 37, 37, 36, 36, 43, 43, 42, 42, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 42, 42, 45, 45, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 43, 43, 42, 42, 40, 40, 40, 40, 55, 55, 55, 55, 53, 53, 52, 52, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 50, 50, 53, 53, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 53, 53, 52, 52, 59, 59, 58, 58, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 58, 58, 61, 61, 60, 60, 46, 46, 46, 46, 46, 46, 46, 47, 43, 43, 42, 42, 40, 40, 40, 40, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 87, 87, 87, 87, 85, 85, 84, 84, 80, 81, 81, 81, 81, 81, 81, 81, 67, 67, 66, 66, 69, 69, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 69, 69, 68, 68, 75, 75, 74, 74, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 74, 74, 77, 77, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 79, 75, 75, 74, 74, 72, 72, 72, 72, 87, 87, 87, 87, 85, 85, 84, 84, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 83, 82, 82, 85, 85, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 85, 85, 84, 84, 91, 91, 90, 90, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 90, 90, 93, 93, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 87, 87, 87, 87, 85, 85, 84, 84, 80, 81, 81, 81, 81, 81, 81, 81, 110, 110, 110, 110, 110, 110, 110, 111, 107, 107, 106, 106, 104, 104, 104, 104, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 98, 98, 101, 101, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 101, 101, 100, 100, 107, 107, 106, 106, 104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 106, 106, 109, 109, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 107, 107, 106, 106, 104, 104, 104, 104, 119, 119, 119, 119, 117, 117, 116, 116, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115, 115, 114, 114, 117, 117, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 117, 117, 116, 116, 123, 123, 122, 122, 120, 120, 120, 120, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 87, 87, 87, 87, 85, 85, 84, 84, 80, 81, 81, 81, 81, 81, 81, 81, 67, 67, 66, 66, 69, 69, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 186, 186, 189, 189, 188, 188, 174, 174, 174, 174, 174, 174, 174, 175, 171, 171, 170, 170, 168, 168, 168, 168, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 135, 135, 135, 135, 133, 133, 132, 132, 139, 139, 138, 138, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 138, 138, 141, 141, 140, 140, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, 142, 142, 142, 143, 139, 139, 138, 138, 136, 136, 136, 136, 151, 151, 151, 151, 149, 149, 148, 148, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147, 146, 146, 149, 149, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 149, 149, 148, 148, 155, 155, 154, 154, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 154, 154, 157, 157, 156, 156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 151, 151, 151, 151, 149, 149, 148, 148, 144, 145, 145, 145, 145, 145, 145, 145, 174, 174, 174, 174, 174, 174, 174, 175, 171, 171, 170, 170, 168, 168, 168, 168, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 162, 162, 165, 165, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 165, 165, 164, 164, 171, 171, 170, 170, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 170, 170, 173, 173, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 171, 171, 170, 170, 168, 168, 168, 168, 183, 183, 183, 183, 181, 181, 180, 180, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 178, 178, 181, 181, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 181, 181, 180, 180, 187, 187, 186, 186, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 186, 186, 189, 189, 188, 188, 174, 174, 174, 174, 174, 174, 174, 175, 171, 171, 170, 170, 168, 168, 168, 168, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 215, 215, 215, 215, 213, 213, 212, 212, 208, 209, 209, 209, 209, 209, 209, 209, 195, 195, 194, 194, 197, 197, 196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 197, 197, 196, 196, 203, 203, 202, 202, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 203, 202, 202, 205, 205, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, 206, 206, 207, 203, 203, 202, 202, 200, 200, 200, 200, 215, 215, 215, 215, 213, 213, 212, 212, 208, 209, 209, 209, 209, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 210, 210, 213, 213, 212, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 213, 213, 212, 212, 219, 219, 218, 218, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219, 218, 218, 221, 221, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221, 221, 221, 221, 221, 222, 222, 215, 215, 215, 215, 213, 213, 212, 212, 208, 209, 209, 209, 209, 209, 209, 209, 238, 238, 238, 238, 238, 238, 238, 239, 235, 235, 234, 234, 232, 232, 232, 232, 225, 225, 226, 226, 226, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 206, 206, 206, 206, 203, 203, 203, 203, 202, 202, 202, 202, 200, 200, 201, 201, 201, 201, 201, 201, 214, 214, 214, 214, 214, 214, 215, 215, 213, 213, 213, 213, 212, 212, 212, 212, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 210, 210, 210, 210, 213, 213, 213, 213, 212, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 215, 215, 213, 213, 213, 213, 212, 212, 212, 212, 219, 219, 219, 219, 218, 218, 218, 218, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 221, 221, 221, 221, 220, 220, 220, 220, 214, 214, 214, 214, 214, 214, 215, 215, 213, 213, 213, 213, 212, 212, 212, 212, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 236, 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 235, 235, 235, 235, 234, 234, 234, 234, 232, 232, 233, 233, 233, 233, 233, 233, 227, 227, 227, 227, 226, 226, 226, 226, 229, 229, 229, 229, 228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 179, 179, 179, 179, 178, 178, 178, 178, 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 181, 181, 181, 181, 180, 180, 180, 180, 187, 187, 187, 187, 186, 186, 186, 186, 184, 184, 185, 185, 185, 185, 185, 185, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 171, 171, 171, 171, 170, 170, 170, 170, 168, 168, 169, 169, 169, 169, 169, 169, 163, 163, 163, 163, 162, 162, 162, 162, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 139, 139, 139, 139, 138, 138, 138, 138, 136, 136, 137, 137, 137, 137, 137, 137, 150, 150, 150, 150, 150, 150, 151, 151, 149, 149, 149, 149, 148, 148, 148, 148, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 149, 149, 149, 149, 148, 148, 148, 148, 155, 155, 155, 155, 154, 154, 154, 154, 152, 152, 153, 153, 153, 153, 153, 153, 51, 51, 51, 51, 50, 50, 50, 50, 53, 53, 53, 53, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 53, 53, 53, 53, 52, 52, 52, 52, 59, 59, 59, 59, 58, 58, 58, 58, 56, 56, 57, 57, 57, 57, 57, 57, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 43, 43, 43, 43, 42, 42, 42, 42, 40, 40, 41, 41, 41, 41, 41, 41, 35, 35, 35, 35, 34, 34, 34, 34, 37, 37, 37, 37, 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 93, 93, 93, 93, 92, 92, 92, 92, 86, 86, 86, 86, 86, 86, 87, 87, 85, 85, 85, 85, 84, 84, 84, 84, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 70, 70, 70, 70, 70, 70, 71, 71, 69, 69, 69, 69, 68, 68, 68, 68, 75, 75, 75, 75, 74, 74, 74, 74, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 75, 75, 75, 75, 74, 74, 74, 74, 72, 72, 73, 73, 73, 73, 73, 73, 86, 86, 86, 86, 86, 86, 87, 87, 85, 85, 85, 85, 84, 84, 84, 84, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 83, 82, 82, 82, 82, 85, 85, 85, 85, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 85, 85, 85, 85, 84, 84, 84, 84, 91, 91, 91, 91, 90, 90, 90, 90, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 93, 93, 93, 93, 92, 92, 92, 92, 86, 86, 86, 86, 86, 86, 87, 87, 85, 85, 85, 85, 84, 84, 84, 84, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 107, 107, 107, 107, 106, 106, 106, 106, 104, 104, 105, 105, 105, 105, 105, 105, 99, 99, 99, 99, 98, 98, 98, 98, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 103, 101, 101, 101, 101, 100, 100, 100, 100, 107, 107, 107, 107, 106, 106, 106, 106, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 106, 106, 106, 106, 109, 109, 109, 109, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 107, 107, 107, 107, 106, 106, 106, 106, 104, 104, 105, 105, 105, 105, 105, 105, 118, 118, 118, 118, 118, 118, 119, 119, 117, 117, 117, 117, 116, 116, 116, 116, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 90, 90, 90, 90, 93, 93, 93, 93, 92, 92, 92, 92, 86, 86, 86, 86, 86, 86, 87, 87, 85, 85, 85, 85, 84, 84, 84, 84, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 70, 70, 70, 70, 70, 70, 71, 71, 69, 69, 69, 69, 68, 68, 68, 68, 75, 75, 75, 75, 74, 74, 74, 74, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 77, 77, 77, 77, 76, 76, 76, 76, 179, 179, 179, 179, 178, 178, 178, 178, 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 181, 181, 181, 181, 180, 180, 180, 180, 187, 187, 187, 187, 186, 186, 186, 186, 184, 184, 185, 185, 185, 185, 185, 185, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 171, 171, 171, 171, 170, 170, 170, 170, 168, 168, 169, 169, 169, 169, 169, 169, 163, 163, 163, 163, 162, 162, 162, 162, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 139, 139, 139, 139, 138, 138, 138, 138, 136, 136, 137, 137, 137, 137, 137, 137, 150, 150, 150, 150, 150, 150, 151, 151, 149, 149, 149, 149, 148, 148, 148, 148, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 146, 146, 146, 146, 149, 149, 149, 149, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 149, 149, 149, 149, 148, 148, 148, 148, 155, 155, 155, 155, 154, 154, 154, 154, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 154, 154, 154, 154, 157, 157, 157, 157, 156, 156, 156, 156, 150, 150, 150, 150, 150, 150, 151, 151, 149, 149, 149, 149, 148, 148, 148, 148, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 171, 171, 171, 171, 170, 170, 170, 170, 168, 168, 169, 169, 169, 169, 169, 169, 163, 163, 163, 163, 162, 162, 162, 162, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 165, 165, 165, 165, 164, 164, 164, 164, 171, 171, 171, 171, 170, 170, 170, 170, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 170, 170, 170, 170, 173, 173, 173, 173, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 171, 171, 171, 171, 170, 170, 170, 170, 168, 168, 169, 169, 169, 169, 169, 169, 182, 182, 182, 182, 182, 182, 183, 183, 181, 181, 181, 181, 180, 180, 180, 180, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 178, 178, 178, 178, 181, 181, 181, 181, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 181, 181, 181, 181, 180, 180, 180, 180, 187, 187, 187, 187, 186, 186, 186, 186, 184, 184, 185, 185, 185, 185, 185, 185, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 171, 171, 171, 171, 170, 170, 170, 170, 168, 168, 169, 169, 169, 169, 169, 169, 163, 163, 163, 163, 162, 162, 162, 162, 165, 165, 165, 165, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 218, 218, 218, 218, 221, 221, 221, 221, 220, 220, 220, 220, 214, 214, 214, 214, 214, 214, 215, 215, 213, 213, 213, 213, 212, 212, 212, 212, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 198, 198, 198, 198, 198, 198, 199, 199, 197, 197, 197, 197, 196, 196, 196, 196, 203, 203, 203, 203, 202, 202, 202, 202, 200, 200, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 203, 202, 202, 202, 202, 205, 205, 205, 205, 204, 204, 204, 204, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 165, 165, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 165, 170, 171, 171, 171, 171, 171, 170, 170, 213, 213, 212, 212, 212, 212, 212, 213, 218, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218, 218, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 218, 218, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 212, 213, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 210, 210, 210, 210, 210, 210, 213, 213, 213, 213, 202, 202, 202, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 205, 205, 205, 205, 205, 205, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205, 205, 205, 205, 202, 203, 203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 212, 213, 210, 210, 210, 210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 210, 210, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 212, 213, 218, 219, 219, 219, 219, 219, 218, 218, 218, 218, 218, 218, 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 218, 218, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 181, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 165, 165, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 165, 170, 171, 171, 171, 171, 171, 170, 170, 149, 149, 148, 148, 148, 148, 148, 149, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 149, 154, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 154, 154, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 149, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 171, 171, 171, 171, 171, 170, 170, 85, 85, 84, 84, 84, 84, 84, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 74, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 85, 90, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 90, 90, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 106, 106, 106, 106, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 106, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 101, 101, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 101, 106, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109, 106, 107, 107, 107, 107, 107, 106, 106, 85, 85, 84, 84, 84, 84, 84, 85, 90, 91, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 90, 90, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 85, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 74, 75, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 181, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 165, 165, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 165, 170, 171, 171, 171, 171, 171, 170, 170, 149, 149, 148, 148, 148, 148, 148, 149, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 149, 154, 155, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 154, 154, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 148, 149, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 165, 165, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 164, 165, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 181, 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 170, 171, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 181, 181, 181, 181, 178, 178, 178, 178, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 181, 181, 181, 181, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 165, 165, 165, 165, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 213, 213, 213, 213, 218, 218, 218, 218, 219, 219, 219, 219, 218, 218, 218, 218, 218, 218, 218, 218, 217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 213, 213, 213, 213, 210, 210, 210, 210, 211, 211, 211, 211, 210, 210, 210, 210, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 213, 213, 213, 213, 202, 202, 202, 202, 203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 202, 202, 205, 205, 205, 205, 205, 205, 205, 205, 204, 204, 204, 204, 205, 205, 205, 205, 202, 202, 202, 202, 203, 203, 203, 203, 202, 202, 202, 202, 202, 202, 202, 202, 201, 201, 201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 213, 213, 213, 213, 210, 210, 210, 210, 211, 211, 211, 211, 210, 210, 210, 210, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 212, 213, 213, 213, 213, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 181, 181, 181, 181, 178, 178, 178, 178, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 181, 181, 181, 181, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 165, 165, 165, 165, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, 149, 149, 149, 154, 154, 154, 154, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, 149, 149, 149, 146, 146, 146, 146, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, 149, 149, 149, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 165, 165, 165, 165, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 90, 90, 90, 90, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 82, 82, 82, 82, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 106, 106, 106, 106, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 109, 109, 109, 109, 109, 109, 109, 109, 108, 108, 108, 108, 109, 109, 109, 109, 106, 106, 106, 106, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 101, 101, 101, 101, 106, 106, 106, 106, 107, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 90, 90, 90, 90, 91, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 82, 82, 82, 82, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 74, 74, 74, 74, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 77, 77, 77, 77, 74, 74, 74, 74, 75, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 82, 82, 82, 82, 83, 83, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 84, 85, 85, 85, 85, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 181, 181, 181, 181, 178, 178, 178, 178, 179, 179, 179, 179, 178, 178, 178, 178, 178, 178, 178, 178, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 180, 181, 181, 181, 181, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 165, 165, 165, 165, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, 149, 149, 149, 154, 154, 154, 154, 155, 155, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, 149, 149, 149, 146, 146, 146, 146, 147, 147, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 148, 149, 149, 149, 149, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 172, 172, 173, 173, 173, 173, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 164, 165, 165, 165, 165, 170, 170, 170, 170, 171, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 179, 179, 178, 178, 178, 178, 178, 178, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 217, 217, 217, 217, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 211, 211, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 205, 205, 205, 205, 205, 205, 204, 204, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 201, 201, 201, 201, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 179, 179, 178, 178, 178, 178, 178, 178, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 147, 147, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 109, 109, 109, 109, 109, 109, 108, 108, 106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 107, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 89, 89, 89, 89, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 77, 77, 77, 77, 77, 77, 76, 76, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 83, 83, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 90, 90, 90, 90, 90, 90, 90, 91, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 179, 179, 178, 178, 178, 178, 178, 178, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 172, 172, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 166, 166, 166, 166, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 155, 155, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 153, 153, 153, 153, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 148, 149, 149, 149, 149, 149, 149, 149, 147, 147, 146, 146, 146, 146, 146, 146, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 149, 149, 149, 149, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 146, 146, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 181, 181, 181, 181, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 213, 213, 213, 213, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 210, 210, 210, 210, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 218, 218, 218, 218, 213, 213, 213, 213, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 181, 181, 181, 181, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 149, 149, 149, 149, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 146, 146, 146, 146, 146, 146, 146, 146, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 148, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 181, 181, 181, 181, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 74, 74, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 74, 74, 74, 74, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 82, 82, 82, 82, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 90, 90, 90, 90, 85, 85, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 165, 165, 165, 165, 164, 164, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 181, 181, 181, 181, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 181, 181, 181, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 149, 149, 149, 149, 149, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 210, 210, 210, 210, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 212, 213, 213, 213, 213, 213, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 148, 149, 149, 149, 149, 149, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 180, 181, 181, 181, 181, 181, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 90, 90, 90, 90, 90, 90, 90, 90, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 82, 82, 82, 82, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 85, 85, 85, 85, 85, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 173, 173, 173, 173, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 165, 165, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, }; static const uint8_t gamma_table[256 + 256 * 64] = { 0, 16, 22, 26, 32, 34, 38, 42, 44, 48, 50, 52, 54, 56, 58, 60, 64, 64, 66, 68, 70, 72, 74, 76, 78, 80, 80, 82, 84, 86, 86, 88, 90, 90, 92, 94, 96, 96, 98, 98, 100, 102, 102, 104, 106, 106, 108, 108, 110, 112, 112, 114, 114, 116, 116, 118, 118, 120, 120, 122, 122, 124, 124, 126, 128, 128, 128, 130, 130, 132, 132, 134, 134, 136, 136, 138, 138, 140, 140, 142, 142, 144, 144, 144, 146, 146, 148, 148, 150, 150, 150, 152, 152, 154, 154, 154, 156, 156, 158, 158, 160, 160, 160, 162, 162, 162, 164, 164, 166, 166, 166, 168, 168, 170, 170, 170, 172, 172, 172, 174, 174, 176, 176, 176, 178, 178, 178, 180, 180, 180, 182, 182, 182, 184, 184, 184, 186, 186, 186, 188, 188, 188, 190, 190, 192, 192, 192, 192, 194, 194, 194, 196, 196, 196, 198, 198, 198, 200, 200, 200, 202, 202, 202, 204, 204, 204, 206, 206, 206, 208, 208, 208, 208, 210, 210, 210, 212, 212, 212, 214, 214, 214, 214, 216, 216, 216, 218, 218, 218, 218, 220, 220, 220, 222, 222, 222, 224, 224, 224, 224, 226, 226, 226, 226, 228, 228, 228, 230, 230, 230, 230, 232, 232, 232, 234, 234, 234, 234, 236, 236, 236, 236, 238, 238, 238, 240, 240, 240, 240, 242, 242, 242, 242, 244, 244, 244, 244, 246, 246, 246, 246, 248, 248, 248, 248, 250, 250, 250, 250, 252, 252, 252, 252, 254, 254, 254, 0, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 198, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, }; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_common.hpp000066400000000000000000000163771415063341600250040ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once namespace Vulkan { class Program; class Shader; } namespace RDP { template struct Shaders; using ShaderBank = Shaders; // list of command IDs enum class Op { Nop = 0, MetaSignalTimeline = 1, MetaFlush = 2, MetaIdle = 3, MetaSetQuirks = 4, FillTriangle = 0x08, FillZBufferTriangle = 0x09, TextureTriangle = 0x0a, TextureZBufferTriangle = 0x0b, ShadeTriangle = 0x0c, ShadeZBufferTriangle = 0x0d, ShadeTextureTriangle = 0x0e, ShadeTextureZBufferTriangle = 0x0f, TextureRectangle = 0x24, TextureRectangleFlip = 0x25, SyncLoad = 0x26, SyncPipe = 0x27, SyncTile = 0x28, SyncFull = 0x29, SetKeyGB = 0x2a, SetKeyR = 0x2b, SetConvert = 0x2c, SetScissor = 0x2d, SetPrimDepth = 0x2e, SetOtherModes = 0x2f, LoadTLut = 0x30, SetTileSize = 0x32, LoadBlock = 0x33, LoadTile = 0x34, SetTile = 0x35, FillRectangle = 0x36, SetFillColor = 0x37, SetFogColor = 0x38, SetBlendColor = 0x39, SetPrimColor = 0x3a, SetEnvColor = 0x3b, SetCombine = 0x3c, SetTextureImage = 0x3d, SetMaskImage = 0x3e, SetColorImage = 0x3f }; enum class RGBMul : uint8_t { Combined = 0, Texel0 = 1, Texel1 = 2, Primitive = 3, Shade = 4, Env = 5, KeyScale = 6, CombinedAlpha = 7, Texel0Alpha = 8, Texel1Alpha = 9, PrimitiveAlpha = 10, ShadeAlpha = 11, EnvAlpha = 12, LODFrac = 13, PrimLODFrac = 14, ConvertK5 = 15, Zero = 16 }; enum class RGBMulAdd : uint8_t { Combined = 0, Texel0 = 1, Texel1 = 2, Primitive = 3, Shade = 4, Env = 5, One = 6, Noise = 7, Zero = 8 }; enum class RGBMulSub : uint8_t { Combined = 0, Texel0 = 1, Texel1 = 2, Primitive = 3, Shade = 4, Env = 5, KeyCenter = 6, ConvertK4 = 7, Zero = 8 }; enum class RGBAdd : uint8_t { Combined = 0, Texel0 = 1, Texel1 = 2, Primitive = 3, Shade = 4, Env = 5, One = 6, Zero = 7 }; enum class AlphaAddSub : uint8_t { CombinedAlpha = 0, Texel0Alpha = 1, Texel1Alpha = 2, PrimitiveAlpha = 3, ShadeAlpha = 4, EnvAlpha = 5, One = 6, Zero = 7 }; enum class AlphaMul : uint8_t { LODFrac = 0, Texel0Alpha = 1, Texel1Alpha = 2, PrimitiveAlpha = 3, ShadeAlpha = 4, EnvAlpha = 5, PrimLODFrac = 6, Zero = 7 }; enum class TextureSize : uint8_t { Bpp4 = 0, Bpp8 = 1, Bpp16 = 2, Bpp32 = 3 }; enum class TextureFormat : uint8_t { RGBA = 0, YUV = 1, CI = 2, IA = 3, I = 4 }; enum class RGBDitherMode : uint8_t { Magic = 0, Bayer = 1, Noise = 2, Off = 3 }; enum class AlphaDitherMode : uint8_t { Pattern = 0, InvPattern = 1, Noise = 2, Off = 3 }; enum class CycleType : uint8_t { Cycle1 = 0, Cycle2 = 1, Copy = 2, Fill = 3 }; enum class BlendMode1A : uint8_t { PixelColor = 0, MemoryColor = 1, BlendColor = 2, FogColor = 3 }; enum class BlendMode1B : uint8_t { PixelAlpha = 0, FogAlpha = 1, ShadeAlpha = 2, Zero = 3 }; enum class BlendMode2A : uint8_t { PixelColor = 0, MemoryColor = 1, BlendColor = 2, FogColor = 3 }; enum class BlendMode2B : uint8_t { InvPixelAlpha = 0, MemoryAlpha = 1, One = 2, Zero = 3 }; enum class CoverageMode : uint8_t { Clamp = 0, Wrap = 1, Zap = 2, Save = 3 }; enum class ZMode : uint8_t { Opaque = 0, Interpenetrating = 1, Transparent = 2, Decal = 3 }; enum TileInfoFlagBits { TILE_INFO_CLAMP_S_BIT = 1 << 0, TILE_INFO_MIRROR_S_BIT = 1 << 1, TILE_INFO_CLAMP_T_BIT = 1 << 2, TILE_INFO_MIRROR_T_BIT = 1 << 3 }; using TileInfoFlags = uint8_t; struct TileSize { uint32_t slo = 0; uint32_t shi = 0; uint32_t tlo = 0; uint32_t thi = 0; }; struct TileMeta { uint32_t offset = 0; uint32_t stride = 0; TextureFormat fmt = TextureFormat::RGBA; TextureSize size = TextureSize::Bpp16; uint8_t palette = 0; uint8_t mask_s = 0; uint8_t shift_s = 0; uint8_t mask_t = 0; uint8_t shift_t = 0; TileInfoFlags flags = 0; }; struct TileInfo { TileSize size; TileMeta meta; }; struct CombinerInputsRGB { RGBMulAdd muladd; RGBMulSub mulsub; RGBMul mul; RGBAdd add; }; struct CombinerInputsAlpha { AlphaAddSub muladd; AlphaAddSub mulsub; AlphaMul mul; AlphaAddSub add; }; struct CombinerInputs { CombinerInputsRGB rgb; CombinerInputsAlpha alpha; }; struct BlendModes { BlendMode1A blend_1a; BlendMode1B blend_1b; BlendMode2A blend_2a; BlendMode2B blend_2b; }; static_assert(sizeof(TileInfo) == 32, "TileInfo must be 32 bytes."); enum class VIRegister { Control = 0, Origin, Width, Intr, VCurrentLine, Timing, VSync, HSync, Leap, HStart, VStart, VBurst, XScale, YScale, Count }; enum VIControlFlagBits { VI_CONTROL_TYPE_BLANK_BIT = 0 << 0, VI_CONTROL_TYPE_RESERVED_BIT = 1 << 0, VI_CONTROL_TYPE_RGBA5551_BIT = 2 << 0, VI_CONTROL_TYPE_RGBA8888_BIT = 3 << 0, VI_CONTROL_TYPE_MASK = 3 << 0, VI_CONTROL_GAMMA_DITHER_ENABLE_BIT = 1 << 2, VI_CONTROL_GAMMA_ENABLE_BIT = 1 << 3, VI_CONTROL_DIVOT_ENABLE_BIT = 1 << 4, VI_CONTROL_SERRATE_BIT = 1 << 6, VI_CONTROL_AA_MODE_RESAMP_EXTRA_ALWAYS_BIT = 0 << 8, VI_CONTROL_AA_MODE_RESAMP_EXTRA_BIT = 1 << 8, VI_CONTROL_AA_MODE_RESAMP_ONLY_BIT = 2 << 8, VI_CONTROL_AA_MODE_RESAMP_REPLICATE_BIT = 3 << 8, VI_CONTROL_AA_MODE_MASK = 3 << 8, VI_CONTROL_DITHER_FILTER_ENABLE_BIT = 1 << 16, VI_CONTROL_META_AA_BIT = 1 << 17, VI_CONTROL_META_SCALE_BIT = 1 << 18 }; using VIControlFlags = uint32_t; static inline uint32_t make_vi_start_register(uint32_t start_value, uint32_t end_value) { return ((start_value & 0x3ff) << 16) | (end_value & 0x3ff); } static inline uint32_t make_vi_scale_register(uint32_t scale_factor, uint32_t bias) { return ((bias & 0xfff) << 16) | (scale_factor & 0xfff); } constexpr uint32_t VI_V_SYNC_NTSC = 525; constexpr uint32_t VI_V_SYNC_PAL = 625; constexpr uint32_t VI_H_OFFSET_NTSC = 108; constexpr uint32_t VI_H_OFFSET_PAL = 128; constexpr uint32_t VI_V_OFFSET_NTSC = 34; constexpr uint32_t VI_V_OFFSET_PAL = 44; constexpr uint32_t VI_V_RES_NTSC = 480; constexpr uint32_t VI_V_RES_PAL = 576; constexpr int VI_SCANOUT_WIDTH = 640; static inline uint32_t make_default_v_start() { return make_vi_start_register(VI_V_OFFSET_NTSC, VI_V_OFFSET_NTSC + 224 * 2); } static inline uint32_t make_default_h_start() { return make_vi_start_register(VI_H_OFFSET_NTSC, VI_H_OFFSET_NTSC + VI_SCANOUT_WIDTH); } template static int32_t sext(int32_t v) { struct { int32_t dummy : bits; } d; d.dummy = v; return d.dummy; } }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_data_structures.hpp000066400000000000000000000217101415063341600267130ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #include "rdp_common.hpp" namespace RDP { enum TriangleSetupFlagBits { TRIANGLE_SETUP_FLIP_BIT = 1 << 0, TRIANGLE_SETUP_DO_OFFSET_BIT = 1 << 1, TRIANGLE_SETUP_SKIP_XFRAC_BIT = 1 << 2, TRIANGLE_SETUP_INTERLACE_FIELD_BIT = 1 << 3, TRIANGLE_SETUP_INTERLACE_KEEP_ODD_BIT = 1 << 4, TRIANGLE_SETUP_DISABLE_UPSCALING_BIT = 1 << 5, TRIANGLE_SETUP_NATIVE_LOD_BIT = 1 << 6 }; using TriangleSetupFlags = uint8_t; enum StaticRasterizationFlagBits { RASTERIZATION_INTERLACE_FIELD_BIT = 1 << 0, RASTERIZATION_INTERLACE_KEEP_ODD_BIT = 1 << 1, RASTERIZATION_AA_BIT = 1 << 2, RASTERIZATION_PERSPECTIVE_CORRECT_BIT = 1 << 3, RASTERIZATION_TLUT_BIT = 1 << 4, RASTERIZATION_TLUT_TYPE_BIT = 1 << 5, RASTERIZATION_CVG_TIMES_ALPHA_BIT = 1 << 6, RASTERIZATION_ALPHA_CVG_SELECT_BIT = 1 << 7, RASTERIZATION_MULTI_CYCLE_BIT = 1 << 8, RASTERIZATION_TEX_LOD_ENABLE_BIT = 1 << 9, RASTERIZATION_SHARPEN_LOD_ENABLE_BIT = 1 << 10, RASTERIZATION_DETAIL_LOD_ENABLE_BIT = 1 << 11, RASTERIZATION_FILL_BIT = 1 << 12, RASTERIZATION_COPY_BIT = 1 << 13, RASTERIZATION_SAMPLE_MODE_BIT = 1 << 14, RASTERIZATION_ALPHA_TEST_BIT = 1 << 15, RASTERIZATION_ALPHA_TEST_DITHER_BIT = 1 << 16, RASTERIZATION_SAMPLE_MID_TEXEL_BIT = 1 << 17, RASTERIZATION_USES_TEXEL0_BIT = 1 << 18, RASTERIZATION_USES_TEXEL1_BIT = 1 << 19, RASTERIZATION_USES_LOD_BIT = 1 << 20, RASTERIZATION_USES_PIPELINED_TEXEL1_BIT = 1 << 21, RASTERIZATION_CONVERT_ONE_BIT = 1 << 22, RASTERIZATION_BILERP_0_BIT = 1 << 23, RASTERIZATION_BILERP_1_BIT = 1 << 24, RASTERIZATION_UPSCALING_LOG2_BIT_OFFSET = 26, RASTERIZATION_NEED_NOISE_BIT = 1 << 28, RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT = 1 << 29, RASTERIZATION_USE_SPECIALIZATION_CONSTANT_BIT = 1 << 30 }; using StaticRasterizationFlags = uint32_t; enum DepthBlendFlagBits { DEPTH_BLEND_DEPTH_TEST_BIT = 1 << 0, DEPTH_BLEND_DEPTH_UPDATE_BIT = 1 << 1, DEPTH_BLEND_FORCE_BLEND_BIT = 1 << 3, DEPTH_BLEND_IMAGE_READ_ENABLE_BIT = 1 << 4, DEPTH_BLEND_COLOR_ON_COVERAGE_BIT = 1 << 5, DEPTH_BLEND_MULTI_CYCLE_BIT = 1 << 6, DEPTH_BLEND_AA_BIT = 1 << 7, DEPTH_BLEND_DITHER_ENABLE_BIT = 1 << 8 }; using DepthBlendFlags = uint32_t; struct TriangleSetup { int32_t xh, xm, xl; int16_t yh, ym; int32_t dxhdy, dxmdy, dxldy; int16_t yl; TriangleSetupFlags flags; uint8_t tile; }; struct AttributeSetup { int32_t r, g, b, a; int32_t drdx, dgdx, dbdx, dadx; int32_t drde, dgde, dbde, dade; int32_t drdy, dgdy, dbdy, dady; int32_t s, t, z, w; int32_t dsdx, dtdx, dzdx, dwdx; int32_t dsde, dtde, dzde, dwde; int32_t dsdy, dtdy, dzdy, dwdy; }; struct ConstantCombinerInputs { uint8_t muladd[4]; uint8_t mulsub[4]; uint8_t mul[4]; uint8_t add[4]; }; // Per-primitive state which is very dynamic in nature and does not change anything about the shader itself. struct DerivedSetup { ConstantCombinerInputs constants[2]; uint8_t fog_color[4]; uint8_t blend_color[4]; uint32_t fill_color; uint16_t dz; uint8_t dz_compressed; uint8_t min_lod; int16_t convert_factors[4]; }; static_assert((sizeof(TriangleSetup) & 15) == 0, "TriangleSetup must be aligned to 16 bytes."); static_assert((sizeof(AttributeSetup) & 15) == 0, "AttributeSetup must be aligned to 16 bytes."); static_assert(sizeof(DerivedSetup) == 56, "DerivedSetup is not 56 bytes."); struct ScissorState { uint32_t xlo; uint32_t ylo; uint32_t xhi; uint32_t yhi; }; struct StaticRasterizationState { CombinerInputs combiner[2]; StaticRasterizationFlags flags; uint32_t dither; uint32_t texture_size; uint32_t texture_fmt; }; static_assert(sizeof(StaticRasterizationState) == 32, "StaticRasterizationState must be 32 bytes."); struct DepthBlendState { BlendModes blend_cycles[2]; DepthBlendFlags flags; CoverageMode coverage_mode; ZMode z_mode; uint8_t padding[2]; }; static_assert(sizeof(DepthBlendState) == 16, "DepthBlendState must be 16 bytes."); struct InstanceIndices { uint8_t static_index; uint8_t depth_blend_index; uint8_t tile_instance_index; uint8_t padding[5]; uint8_t tile_indices[8]; }; static_assert((sizeof(InstanceIndices) & 15) == 0, "InstanceIndices must be aligned to 16 bytes."); struct UploadInfo { int32_t width, height; float min_t_mod, max_t_mod; int32_t vram_addr; int32_t vram_width; int32_t vram_size; int32_t vram_effective_width; int32_t tmem_offset; int32_t tmem_stride_words; int32_t tmem_size; int32_t tmem_fmt; int32_t mode; float inv_tmem_stride_words; int32_t dxt; int32_t padding; }; static_assert((sizeof(UploadInfo) & 15) == 0, "UploadInfo must be aligned to 16 bytes."); struct SpanSetup { int32_t r, g, b, a; int32_t s, t, w, z; int16_t xlo[4]; int16_t xhi[4]; int32_t interpolation_base_x; int32_t start_x; int32_t end_x; int16_t lodlength; uint16_t valid_line; }; static_assert((sizeof(SpanSetup) & 15) == 0, "SpanSetup is not aligned to 16 bytes."); struct SpanInfoOffsets { int32_t offset, ylo, yhi, padding; }; static_assert((sizeof(SpanInfoOffsets) == 16), "SpanInfoOffsets is not 16 bytes."); struct SpanInterpolationJob { uint16_t primitive_index, base_y, max_y, padding; }; static_assert((sizeof(SpanInterpolationJob) == 8), "SpanInterpolationJob is not 8 bytes."); struct GlobalState { uint32_t addr_index; uint32_t depth_addr_index; uint32_t fb_width, fb_height; uint32_t group_mask; }; struct TileRasterWork { uint32_t tile_x, tile_y; uint32_t tile_instance; uint32_t primitive; }; static_assert((sizeof(TileRasterWork) == 16), "TileRasterWork is not 16 bytes."); struct GlobalFBInfo { uint32_t dx_shift; uint32_t dx_mask; uint32_t fb_size; uint32_t base_primitive_index; }; template class StateCache { public: unsigned add(const T &t) { if (cached_index >= 0) if (memcmp(&elements[cached_index], &t, sizeof(T)) == 0) return unsigned(cached_index); for (int i = int(count) - 1; i >= 0; i--) { if (memcmp(&elements[i], &t, sizeof(T)) == 0) { cached_index = i; return unsigned(i); } } assert(count < N); memcpy(elements + count, &t, sizeof(T)); unsigned ret = count++; cached_index = int(ret); return ret; } bool full() const { return count == N; } unsigned size() const { return count; } unsigned byte_size() const { return size() * sizeof(T); } const T *data() const { return elements; } void reset() { count = 0; cached_index = -1; } bool empty() const { return count == 0; } private: unsigned count = 0; int cached_index = -1; T elements[N]; }; template class StreamCache { public: void add(const T &t) { assert(count < N); memcpy(&elements[count++], &t, sizeof(T)); } bool full() const { return count == N; } unsigned size() const { return count; } unsigned byte_size() const { return size() * sizeof(T); } const T *data() const { return elements; } void reset() { count = 0; } bool empty() const { return count == 0; } private: unsigned count = 0; T elements[N]; }; namespace Limits { constexpr unsigned MaxPrimitives = 256; constexpr unsigned MaxStaticRasterizationStates = 64; constexpr unsigned MaxDepthBlendStates = 64; constexpr unsigned MaxTileInfoStates = 256; constexpr unsigned NumSyncStates = 32; constexpr unsigned MaxNumTiles = 8; constexpr unsigned MaxTMEMInstances = 256; constexpr unsigned MaxSpanSetups = 32 * 1024; constexpr unsigned MaxWidth = 1024; constexpr unsigned MaxHeight = 1024; constexpr unsigned MaxTileInstances = 0x8000; } namespace ImplementationConstants { constexpr unsigned DefaultWorkgroupSize = 64; constexpr unsigned TileWidth = 8; constexpr unsigned TileHeight = 8; constexpr unsigned MaxTilesX = Limits::MaxWidth / TileWidth; constexpr unsigned MaxTilesY = Limits::MaxHeight / TileHeight; constexpr unsigned IncoherentPageSize = 1024; constexpr unsigned MaxPendingRenderPassesBeforeFlush = 8; constexpr unsigned MinimumPrimitivesForIdleFlush = 32; constexpr unsigned MinimumRenderPassesForIdleFlush = 2; } } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_device.cpp000066400000000000000000001144111415063341600247320ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "rdp_device.hpp" #include "rdp_common.hpp" #include #ifdef __SSE2__ #include #endif #ifndef PARALLEL_RDP_SHADER_DIR #include "shaders/slangmosh.hpp" #endif using namespace Vulkan; #define STATE_MASK(flag, cond, mask) do { \ (flag) &= ~(mask); \ if (cond) (flag) |= (mask); \ } while(0) namespace RDP { CommandProcessor::CommandProcessor(Vulkan::Device &device_, void *rdram_ptr, size_t rdram_offset_, size_t rdram_size_, size_t hidden_rdram_size, CommandProcessorFlags flags_) : device(device_), rdram_offset(rdram_offset_), rdram_size(rdram_size_), flags(flags_), renderer(*this), #ifdef PARALLEL_RDP_SHADER_DIR timeline_worker(Granite::Global::create_thread_context(), FenceExecutor{&device, &thread_timeline_value}) #else timeline_worker(FenceExecutor{&device, &thread_timeline_value}) #endif { BufferCreateInfo info = {}; info.size = rdram_size; info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; info.domain = BufferDomain::CachedCoherentHostPreferCached; info.misc = BUFFER_MISC_ZERO_INITIALIZE_BIT; if (const char *env = getenv("PARALLEL_RDP_DUMP_PATH")) { dump_writer.reset(new RDPDumpWriter); if (!dump_writer->init(env, rdram_size, hidden_rdram_size)) { LOGE("Failed to init RDP dump: %s.\n", env); dump_writer.reset(); } else { LOGI("Dumping RDP commands to: %s.\n", env); flags |= COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_HIDDEN_RDRAM_BIT; } } if (rdram_ptr) { bool allow_memory_host = true; if (const char *env = getenv("PARALLEL_RDP_ALLOW_EXTERNAL_HOST")) allow_memory_host = strtol(env, nullptr, 0) > 0; if (allow_memory_host && device.get_device_features().supports_external_memory_host) { size_t import_size = rdram_size + rdram_offset; size_t align = device.get_device_features().host_memory_properties.minImportedHostPointerAlignment; import_size = (import_size + align - 1) & ~(align - 1); info.size = import_size; rdram = device.create_imported_host_buffer(info, VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT, rdram_ptr); if (!rdram) LOGE("Failed to allocate RDRAM with VK_EXT_external_memory_host.\n"); } if (!rdram) { LOGW("VK_EXT_external_memory_host not supported or failed, falling back to a slower path.\n"); is_host_coherent = false; rdram_offset = 0; host_rdram = static_cast(rdram_ptr) + rdram_offset_; BufferCreateInfo device_rdram = {}; device_rdram.size = rdram_size * 2; // Need twice the memory amount so we can also store a writemask. device_rdram.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; if (device.get_gpu_properties().deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU) device_rdram.domain = BufferDomain::CachedCoherentHostPreferCached; else device_rdram.domain = BufferDomain::Device; device_rdram.misc = BUFFER_MISC_ZERO_INITIALIZE_BIT; rdram = device.create_buffer(device_rdram); } } else rdram = device.create_buffer(info); if (!rdram) LOGE("Failed to allocate RDRAM.\n"); info.size = hidden_rdram_size; // Should be CachedHost, but seeing some insane bug on incoherent Arm systems for time being, // so just forcing coherent memory here for now. Not sure what is going on. info.domain = (flags & COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_HIDDEN_RDRAM_BIT) != 0 ? BufferDomain::CachedCoherentHostPreferCoherent : BufferDomain::Device; info.misc = 0; hidden_rdram = device.create_buffer(info); info.size = 0x1000; info.domain = (flags & COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_TMEM_BIT) != 0 ? BufferDomain::CachedCoherentHostPreferCoherent : BufferDomain::Device; tmem = device.create_buffer(info); clear_hidden_rdram(); clear_tmem(); init_renderer(); if (const char *env = getenv("PARALLEL_RDP_BENCH")) { measure_stall_time = strtol(env, nullptr, 0) > 0; if (measure_stall_time) LOGI("Will measure stall timings.\n"); } if (const char *env = getenv("PARALLEL_RDP_SINGLE_THREADED_COMMAND")) { single_threaded_processing = strtol(env, nullptr, 0) > 0; if (single_threaded_processing) LOGI("Will use single threaded command processing.\n"); } if (!single_threaded_processing) { ring.init( #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::create_thread_context(), #endif this, 4 * 1024); } if (const char *env = getenv("PARALLEL_RDP_BENCH")) timestamp = strtol(env, nullptr, 0) > 0; } CommandProcessor::~CommandProcessor() { idle(); } void CommandProcessor::begin_frame_context() { flush(); drain_command_ring(); device.next_frame_context(); } void CommandProcessor::init_renderer() { if (!rdram) { is_supported = false; return; } renderer.set_device(&device); renderer.set_rdram(rdram.get(), host_rdram, rdram_offset, rdram_size, is_host_coherent); renderer.set_hidden_rdram(hidden_rdram.get()); renderer.set_tmem(tmem.get()); unsigned factor = 1; if (flags & COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT) factor = 8; else if (flags & COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT) factor = 4; else if (flags & COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT) factor = 2; if (factor != 1) LOGI("Enabling upscaling: %ux.\n", factor); RendererOptions opts; opts.upscaling_factor = factor; opts.super_sampled_readback = (flags & COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_READ_BACK_BIT) != 0; opts.super_sampled_readback_dither = (flags & COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT) != 0; is_supported = renderer.init_renderer(opts); vi.set_device(&device); vi.set_rdram(rdram.get(), rdram_offset, rdram_size); vi.set_hidden_rdram(hidden_rdram.get()); vi.set_renderer(&renderer); #ifndef PARALLEL_RDP_SHADER_DIR Vulkan::ResourceLayout layout; shader_bank.reset(new ShaderBank(device, layout, [&](const char *name, const char *define) -> int { if (strncmp(name, "vi_", 3) == 0) return vi.resolve_shader_define(name, define); else return renderer.resolve_shader_define(name, define); })); renderer.set_shader_bank(shader_bank.get()); vi.set_shader_bank(shader_bank.get()); #endif } bool CommandProcessor::device_is_supported() const { return is_supported; } void CommandProcessor::clear_hidden_rdram() { clear_buffer(*hidden_rdram, 0x03030303); } void CommandProcessor::clear_tmem() { clear_buffer(*tmem, 0); } void CommandProcessor::clear_buffer(Vulkan::Buffer &buffer, uint32_t value) { if (!buffer.get_allocation().is_host_allocation()) { auto cmd = device.request_command_buffer(); cmd->fill_buffer(buffer, value); Fence fence; device.submit(cmd, &fence); fence->wait(); } else { auto *mapped = device.map_host_buffer(buffer, MEMORY_ACCESS_WRITE_BIT); memset(mapped, value & 0xff, buffer.get_create_info().size); device.unmap_host_buffer(buffer, MEMORY_ACCESS_WRITE_BIT); } } void CommandProcessor::op_sync_full(const uint32_t *) { renderer.flush_and_signal(); } void CommandProcessor::decode_triangle_setup(TriangleSetup &setup, const uint32_t *words) const { bool copy_cycle = (static_state.flags & RASTERIZATION_COPY_BIT) != 0; bool flip = (words[0] & 0x800000u) != 0; bool sign_dxhdy = (words[5] & 0x80000000u) != 0; bool do_offset = flip == sign_dxhdy; setup.flags |= flip ? TRIANGLE_SETUP_FLIP_BIT : 0; setup.flags |= do_offset ? TRIANGLE_SETUP_DO_OFFSET_BIT : 0; setup.flags |= copy_cycle ? TRIANGLE_SETUP_SKIP_XFRAC_BIT : 0; setup.flags |= quirks.u.options.native_texture_lod ? TRIANGLE_SETUP_NATIVE_LOD_BIT : 0; setup.tile = (words[0] >> 16) & 63; setup.yl = sext<14>(words[0]); setup.ym = sext<14>(words[1] >> 16); setup.yh = sext<14>(words[1]); // The lower bit is ignored, so shift here to obtain an extra bit of subpixel precision. // This is very useful for upscaling, since we can obtain 8x before we overflow instead of 4x. setup.xl = sext<28>(words[2]) >> 1; setup.xh = sext<28>(words[4]) >> 1; setup.xm = sext<28>(words[6]) >> 1; setup.dxldy = sext<28>(words[3] >> 2) >> 1; setup.dxhdy = sext<28>(words[5] >> 2) >> 1; setup.dxmdy = sext<28>(words[7] >> 2) >> 1; } static void decode_tex_setup(AttributeSetup &attr, const uint32_t *words) { attr.s = (words[0] & 0xffff0000u) | ((words[4] >> 16) & 0x0000ffffu); attr.t = ((words[0] << 16) & 0xffff0000u) | (words[4] & 0x0000ffffu); attr.w = (words[1] & 0xffff0000u) | ((words[5] >> 16) & 0x0000ffffu); attr.dsdx = (words[2] & 0xffff0000u) | ((words[6] >> 16) & 0x0000ffffu); attr.dtdx = ((words[2] << 16) & 0xffff0000u) | (words[6] & 0x0000ffffu); attr.dwdx = (words[3] & 0xffff0000u) | ((words[7] >> 16) & 0x0000ffffu); attr.dsde = (words[8] & 0xffff0000u) | ((words[12] >> 16) & 0x0000ffffu); attr.dtde = ((words[8] << 16) & 0xffff0000u) | (words[12] & 0x0000ffffu); attr.dwde = (words[9] & 0xffff0000u) | ((words[13] >> 16) & 0x0000ffffu); attr.dsdy = (words[10] & 0xffff0000u) | ((words[14] >> 16) & 0x0000ffffu); attr.dtdy = ((words[10] << 16) & 0xffff0000u) | (words[14] & 0x0000ffffu); attr.dwdy = (words[11] & 0xffff0000u) | ((words[15] >> 16) & 0x0000ffffu); } static void decode_rgba_setup(AttributeSetup &attr, const uint32_t *words) { attr.r = (words[0] & 0xffff0000u) | ((words[4] >> 16) & 0xffff); attr.g = (words[0] << 16) | (words[4] & 0xffff); attr.b = (words[1] & 0xffff0000u) | ((words[5] >> 16) & 0xffff); attr.a = (words[1] << 16) | (words[5] & 0xffff); attr.drdx = (words[2] & 0xffff0000u) | ((words[6] >> 16) & 0xffff); attr.dgdx = (words[2] << 16) | (words[6] & 0xffff); attr.dbdx = (words[3] & 0xffff0000u) | ((words[7] >> 16) & 0xffff); attr.dadx = (words[3] << 16) | (words[7] & 0xffff); attr.drde = (words[8] & 0xffff0000u) | ((words[12] >> 16) & 0xffff); attr.dgde = (words[8] << 16) | (words[12] & 0xffff); attr.dbde = (words[9] & 0xffff0000u) | ((words[13] >> 16) & 0xffff); attr.dade = (words[9] << 16) | (words[13] & 0xffff); attr.drdy = (words[10] & 0xffff0000u) | ((words[14] >> 16) & 0xffff); attr.dgdy = (words[10] << 16) | (words[14] & 0xffff); attr.dbdy = (words[11] & 0xffff0000u) | ((words[15] >> 16) & 0xffff); attr.dady = (words[11] << 16) | (words[15] & 0xffff); } static void decode_z_setup(AttributeSetup &attr, const uint32_t *words) { attr.z = words[0]; attr.dzdx = words[1]; attr.dzde = words[2]; attr.dzdy = words[3]; } void CommandProcessor::op_fill_triangle(const uint32_t *words) { TriangleSetup setup = {}; decode_triangle_setup(setup, words); renderer.draw_flat_primitive(setup); } void CommandProcessor::op_shade_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_rgba_setup(attr, words + 8); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_shade_z_buffer_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_rgba_setup(attr, words + 8); decode_z_setup(attr, words + 24); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_shade_texture_z_buffer_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_rgba_setup(attr, words + 8); decode_tex_setup(attr, words + 24); decode_z_setup(attr, words + 40); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_fill_z_buffer_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_z_setup(attr, words + 8); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_texture_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_tex_setup(attr, words + 8); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_texture_z_buffer_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_tex_setup(attr, words + 8); decode_z_setup(attr, words + 24); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_shade_texture_triangle(const uint32_t *words) { TriangleSetup setup = {}; AttributeSetup attr = {}; decode_triangle_setup(setup, words); decode_rgba_setup(attr, words + 8); decode_tex_setup(attr, words + 24); renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_set_color_image(const uint32_t *words) { unsigned fmt = (words[0] >> 21) & 7; unsigned size = (words[0] >> 19) & 3; unsigned width = (words[0] & 1023) + 1; unsigned addr = words[1] & 0xffffff; FBFormat fbfmt; switch (size) { case 0: fbfmt = FBFormat::I4; break; case 1: fbfmt = FBFormat::I8; break; case 2: fbfmt = fmt ? FBFormat::IA88 : FBFormat::RGBA5551; break; case 3: fbfmt = FBFormat::RGBA8888; break; default: LOGE("Invalid pixel size %u.\n", size); return; } renderer.set_color_framebuffer(addr, width, fbfmt); } void CommandProcessor::op_set_mask_image(const uint32_t *words) { unsigned addr = words[1] & 0xffffff; renderer.set_depth_framebuffer(addr); } void CommandProcessor::op_set_scissor(const uint32_t *words) { scissor_state.xlo = (words[0] >> 12) & 0xfff; scissor_state.xhi = (words[1] >> 12) & 0xfff; scissor_state.ylo = (words[0] >> 0) & 0xfff; scissor_state.yhi = (words[1] >> 0) & 0xfff; STATE_MASK(static_state.flags, bool(words[1] & (1 << 25)), RASTERIZATION_INTERLACE_FIELD_BIT); STATE_MASK(static_state.flags, bool(words[1] & (1 << 24)), RASTERIZATION_INTERLACE_KEEP_ODD_BIT); renderer.set_scissor_state(scissor_state); renderer.set_static_rasterization_state(static_state); } void CommandProcessor::op_set_other_modes(const uint32_t *words) { STATE_MASK(static_state.flags, bool(words[0] & (1 << 19)), RASTERIZATION_PERSPECTIVE_CORRECT_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 18)), RASTERIZATION_DETAIL_LOD_ENABLE_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 17)), RASTERIZATION_SHARPEN_LOD_ENABLE_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 16)), RASTERIZATION_TEX_LOD_ENABLE_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 15)), RASTERIZATION_TLUT_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 14)), RASTERIZATION_TLUT_TYPE_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 13)), RASTERIZATION_SAMPLE_MODE_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 12)), RASTERIZATION_SAMPLE_MID_TEXEL_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 11)), RASTERIZATION_BILERP_0_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 10)), RASTERIZATION_BILERP_1_BIT); STATE_MASK(static_state.flags, bool(words[0] & (1 << 9)), RASTERIZATION_CONVERT_ONE_BIT); STATE_MASK(depth_blend.flags, bool(words[1] & (1 << 14)), DEPTH_BLEND_FORCE_BLEND_BIT); STATE_MASK(static_state.flags, bool(words[1] & (1 << 13)), RASTERIZATION_ALPHA_CVG_SELECT_BIT); STATE_MASK(static_state.flags, bool(words[1] & (1 << 12)), RASTERIZATION_CVG_TIMES_ALPHA_BIT); STATE_MASK(depth_blend.flags, bool(words[1] & (1 << 7)), DEPTH_BLEND_COLOR_ON_COVERAGE_BIT); STATE_MASK(depth_blend.flags, bool(words[1] & (1 << 6)), DEPTH_BLEND_IMAGE_READ_ENABLE_BIT); STATE_MASK(depth_blend.flags, bool(words[1] & (1 << 5)), DEPTH_BLEND_DEPTH_UPDATE_BIT); STATE_MASK(depth_blend.flags, bool(words[1] & (1 << 4)), DEPTH_BLEND_DEPTH_TEST_BIT); STATE_MASK(static_state.flags, bool(words[1] & (1 << 3)), RASTERIZATION_AA_BIT); STATE_MASK(depth_blend.flags, bool(words[1] & (1 << 3)), DEPTH_BLEND_AA_BIT); STATE_MASK(static_state.flags, bool(words[1] & (1 << 1)), RASTERIZATION_ALPHA_TEST_DITHER_BIT); STATE_MASK(static_state.flags, bool(words[1] & (1 << 0)), RASTERIZATION_ALPHA_TEST_BIT); static_state.dither = (words[0] >> 4) & 0x0f; STATE_MASK(depth_blend.flags, RGBDitherMode(static_state.dither >> 2) != RGBDitherMode::Off, DEPTH_BLEND_DITHER_ENABLE_BIT); depth_blend.coverage_mode = static_cast((words[1] >> 8) & 3); depth_blend.z_mode = static_cast((words[1] >> 10) & 3); static_state.flags &= ~(RASTERIZATION_MULTI_CYCLE_BIT | RASTERIZATION_FILL_BIT | RASTERIZATION_COPY_BIT); depth_blend.flags &= ~DEPTH_BLEND_MULTI_CYCLE_BIT; switch (CycleType((words[0] >> 20) & 3)) { case CycleType::Cycle2: static_state.flags |= RASTERIZATION_MULTI_CYCLE_BIT; depth_blend.flags |= DEPTH_BLEND_MULTI_CYCLE_BIT; break; case CycleType::Fill: static_state.flags |= RASTERIZATION_FILL_BIT; break; case CycleType::Copy: static_state.flags |= RASTERIZATION_COPY_BIT; break; default: break; } depth_blend.blend_cycles[0].blend_1a = static_cast((words[1] >> 30) & 3); depth_blend.blend_cycles[1].blend_1a = static_cast((words[1] >> 28) & 3); depth_blend.blend_cycles[0].blend_1b = static_cast((words[1] >> 26) & 3); depth_blend.blend_cycles[1].blend_1b = static_cast((words[1] >> 24) & 3); depth_blend.blend_cycles[0].blend_2a = static_cast((words[1] >> 22) & 3); depth_blend.blend_cycles[1].blend_2a = static_cast((words[1] >> 20) & 3); depth_blend.blend_cycles[0].blend_2b = static_cast((words[1] >> 18) & 3); depth_blend.blend_cycles[1].blend_2b = static_cast((words[1] >> 16) & 3); renderer.set_static_rasterization_state(static_state); renderer.set_depth_blend_state(depth_blend); renderer.set_enable_primitive_depth(bool(words[1] & (1 << 2))); } void CommandProcessor::op_set_texture_image(const uint32_t *words) { auto fmt = TextureFormat((words[0] >> 21) & 7); auto size = TextureSize((words[0] >> 19) & 3); uint32_t width = (words[0] & 0x3ff) + 1; uint32_t addr = words[1] & 0x00ffffffu; texture_image.addr = addr; texture_image.width = width; texture_image.size = size; texture_image.fmt = fmt; } void CommandProcessor::op_set_tile(const uint32_t *words) { uint32_t tile = (words[1] >> 24) & 7; TileMeta info = {}; info.offset = ((words[0] >> 0) & 511) << 3; info.stride = ((words[0] >> 9) & 511) << 3; info.size = TextureSize((words[0] >> 19) & 3); info.fmt = TextureFormat((words[0] >> 21) & 7); info.palette = (words[1] >> 20) & 15; info.shift_s = (words[1] >> 0) & 15; info.mask_s = (words[1] >> 4) & 15; info.shift_t = (words[1] >> 10) & 15; info.mask_t = (words[1] >> 14) & 15; if (words[1] & (1 << 8)) info.flags |= TILE_INFO_MIRROR_S_BIT; if (words[1] & (1 << 9)) info.flags |= TILE_INFO_CLAMP_S_BIT; if (words[1] & (1 << 18)) info.flags |= TILE_INFO_MIRROR_T_BIT; if (words[1] & (1 << 19)) info.flags |= TILE_INFO_CLAMP_T_BIT; if (info.mask_s > 10) info.mask_s = 10; else if (info.mask_s == 0) info.flags |= TILE_INFO_CLAMP_S_BIT; if (info.mask_t > 10) info.mask_t = 10; else if (info.mask_t == 0) info.flags |= TILE_INFO_CLAMP_T_BIT; renderer.set_tile(tile, info); } void CommandProcessor::op_load_tile(const uint32_t *words) { uint32_t tile = (words[1] >> 24) & 7; LoadTileInfo info = {}; info.tex_addr = texture_image.addr; info.tex_width = texture_image.width; info.fmt = texture_image.fmt; info.size = texture_image.size; info.slo = (words[0] >> 12) & 0xfff; info.shi = (words[1] >> 12) & 0xfff; info.tlo = (words[0] >> 0) & 0xfff; info.thi = (words[1] >> 0) & 0xfff; info.mode = UploadMode::Tile; renderer.load_tile(tile, info); } void CommandProcessor::op_load_tlut(const uint32_t *words) { uint32_t tile = (words[1] >> 24) & 7; LoadTileInfo info = {}; info.tex_addr = texture_image.addr; info.tex_width = texture_image.width; info.fmt = texture_image.fmt; info.size = texture_image.size; info.slo = (words[0] >> 12) & 0xfff; info.shi = (words[1] >> 12) & 0xfff; info.tlo = (words[0] >> 0) & 0xfff; info.thi = (words[1] >> 0) & 0xfff; info.mode = UploadMode::TLUT; renderer.load_tile(tile, info); } void CommandProcessor::op_load_block(const uint32_t *words) { uint32_t tile = (words[1] >> 24) & 7; LoadTileInfo info = {}; info.tex_addr = texture_image.addr; info.tex_width = texture_image.width; info.fmt = texture_image.fmt; info.size = texture_image.size; info.slo = (words[0] >> 12) & 0xfff; info.shi = (words[1] >> 12) & 0xfff; info.tlo = (words[0] >> 0) & 0xfff; info.thi = (words[1] >> 0) & 0xfff; info.mode = UploadMode::Block; renderer.load_tile(tile, info); } void CommandProcessor::op_set_tile_size(const uint32_t *words) { uint32_t tile = (words[1] >> 24) & 7; auto slo = (words[0] >> 12) & 0xfff; auto shi = (words[1] >> 12) & 0xfff; auto tlo = (words[0] >> 0) & 0xfff; auto thi = (words[1] >> 0) & 0xfff; renderer.set_tile_size(tile, slo, shi, tlo, thi); } void CommandProcessor::op_set_combine(const uint32_t *words) { static_state.combiner[0].rgb.muladd = static_cast((words[0] >> 20) & 0xf); static_state.combiner[0].rgb.mul = static_cast((words[0] >> 15) & 0x1f); static_state.combiner[0].rgb.mulsub = static_cast((words[1] >> 28) & 0xf); static_state.combiner[0].rgb.add = static_cast(words[1] >> 15 & 0x7); static_state.combiner[0].alpha.muladd = static_cast((words[0] >> 12) & 0x7); static_state.combiner[0].alpha.mulsub = static_cast((words[1] >> 12) & 0x7); static_state.combiner[0].alpha.mul = static_cast((words[0] >> 9) & 0x7); static_state.combiner[0].alpha.add = static_cast((words[1] >> 9) & 0x7); static_state.combiner[1].rgb.muladd = static_cast((words[0] >> 5) & 0xf); static_state.combiner[1].rgb.mul = static_cast((words[0] >> 0) & 0x1f); static_state.combiner[1].rgb.mulsub = static_cast((words[1] >> 24) & 0xf); static_state.combiner[1].rgb.add = static_cast(words[1] >> 6 & 0x7); static_state.combiner[1].alpha.muladd = static_cast((words[1] >> 21) & 0x7); static_state.combiner[1].alpha.mulsub = static_cast((words[1] >> 3) & 0x7); static_state.combiner[1].alpha.mul = static_cast((words[1] >> 18) & 0x7); static_state.combiner[1].alpha.add = static_cast((words[1] >> 0) & 0x7); renderer.set_static_rasterization_state(static_state); } void CommandProcessor::op_set_blend_color(const uint32_t *words) { renderer.set_blend_color(words[1]); } void CommandProcessor::op_set_env_color(const uint32_t *words) { renderer.set_env_color(words[1]); } void CommandProcessor::op_set_fog_color(const uint32_t *words) { renderer.set_fog_color(words[1]); } void CommandProcessor::op_set_prim_color(const uint32_t *words) { uint8_t prim_min_level = (words[0] >> 8) & 31; uint8_t prim_level_frac = (words[0] >> 0) & 0xff; renderer.set_primitive_color(prim_min_level, prim_level_frac, words[1]); } void CommandProcessor::op_set_fill_color(const uint32_t *words) { renderer.set_fill_color(words[1]); } void CommandProcessor::op_fill_rectangle(const uint32_t *words) { uint32_t xl = (words[0] >> 12) & 0xfff; uint32_t yl = (words[0] >> 0) & 0xfff; uint32_t xh = (words[1] >> 12) & 0xfff; uint32_t yh = (words[1] >> 0) & 0xfff; if ((static_state.flags & (RASTERIZATION_COPY_BIT | RASTERIZATION_FILL_BIT)) != 0) yl |= 3; TriangleSetup setup = {}; setup.xh = xh << 13; setup.xl = xl << 13; setup.xm = xl << 13; setup.ym = yl; setup.yl = yl; setup.yh = yh; setup.flags = TRIANGLE_SETUP_FLIP_BIT | TRIANGLE_SETUP_DISABLE_UPSCALING_BIT; renderer.draw_flat_primitive(setup); } void CommandProcessor::op_texture_rectangle(const uint32_t *words) { uint32_t xl = (words[0] >> 12) & 0xfff; uint32_t yl = (words[0] >> 0) & 0xfff; uint32_t xh = (words[1] >> 12) & 0xfff; uint32_t yh = (words[1] >> 0) & 0xfff; uint32_t tile = (words[1] >> 24) & 0x7; int32_t s = (words[2] >> 16) & 0xffff; int32_t t = (words[2] >> 0) & 0xffff; int32_t dsdx = (words[3] >> 16) & 0xffff; int32_t dtdy = (words[3] >> 0) & 0xffff; dsdx = sext<16>(dsdx); dtdy = sext<16>(dtdy); if ((static_state.flags & (RASTERIZATION_COPY_BIT | RASTERIZATION_FILL_BIT)) != 0) yl |= 3; TriangleSetup setup = {}; AttributeSetup attr = {}; setup.xh = xh << 13; setup.xl = xl << 13; setup.xm = xl << 13; setup.ym = yl; setup.yl = yl; setup.yh = yh; setup.flags = TRIANGLE_SETUP_FLIP_BIT | (quirks.u.options.native_resolution_tex_rect ? TRIANGLE_SETUP_DISABLE_UPSCALING_BIT : 0) | (quirks.u.options.native_texture_lod ? TRIANGLE_SETUP_NATIVE_LOD_BIT : 0); setup.tile = tile; attr.s = s << 16; attr.t = t << 16; attr.dsdx = dsdx << 11; attr.dtde = dtdy << 11; attr.dtdy = dtdy << 11; if ((static_state.flags & RASTERIZATION_COPY_BIT) != 0) setup.flags |= TRIANGLE_SETUP_SKIP_XFRAC_BIT; renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_texture_rectangle_flip(const uint32_t *words) { uint32_t xl = (words[0] >> 12) & 0xfff; uint32_t yl = (words[0] >> 0) & 0xfff; uint32_t xh = (words[1] >> 12) & 0xfff; uint32_t yh = (words[1] >> 0) & 0xfff; uint32_t tile = (words[1] >> 24) & 0x7; int32_t s = (words[2] >> 16) & 0xffff; int32_t t = (words[2] >> 0) & 0xffff; int32_t dsdx = (words[3] >> 16) & 0xffff; int32_t dtdy = (words[3] >> 0) & 0xffff; dsdx = sext<16>(dsdx); dtdy = sext<16>(dtdy); if ((static_state.flags & (RASTERIZATION_COPY_BIT | RASTERIZATION_FILL_BIT)) != 0) yl |= 3; TriangleSetup setup = {}; AttributeSetup attr = {}; setup.xh = xh << 13; setup.xl = xl << 13; setup.xm = xl << 13; setup.ym = yl; setup.yl = yl; setup.yh = yh; setup.flags = TRIANGLE_SETUP_FLIP_BIT | TRIANGLE_SETUP_DISABLE_UPSCALING_BIT | (quirks.u.options.native_resolution_tex_rect ? TRIANGLE_SETUP_DISABLE_UPSCALING_BIT : 0) | (quirks.u.options.native_texture_lod ? TRIANGLE_SETUP_NATIVE_LOD_BIT : 0); setup.tile = tile; attr.s = s << 16; attr.t = t << 16; attr.dtdx = dtdy << 11; attr.dsde = dsdx << 11; attr.dsdy = dsdx << 11; if ((static_state.flags & RASTERIZATION_COPY_BIT) != 0) setup.flags |= TRIANGLE_SETUP_SKIP_XFRAC_BIT; renderer.draw_shaded_primitive(setup, attr); } void CommandProcessor::op_set_prim_depth(const uint32_t *words) { renderer.set_primitive_depth((words[1] >> 16) & 0xffff, words[1] & 0xffff); } void CommandProcessor::op_set_convert(const uint32_t *words) { uint64_t merged = (uint64_t(words[0]) << 32) | words[1]; uint16_t k5 = (merged >> 0) & 0x1ff; uint16_t k4 = (merged >> 9) & 0x1ff; uint16_t k3 = (merged >> 18) & 0x1ff; uint16_t k2 = (merged >> 27) & 0x1ff; uint16_t k1 = (merged >> 36) & 0x1ff; uint16_t k0 = (merged >> 45) & 0x1ff; renderer.set_convert(k0, k1, k2, k3, k4, k5); } void CommandProcessor::op_set_key_gb(const uint32_t *words) { uint32_t g_width = (words[0] >> 12) & 0xfff; uint32_t b_width = (words[0] >> 0) & 0xfff; uint32_t g_center = (words[1] >> 24) & 0xff; uint32_t g_scale = (words[1] >> 16) & 0xff; uint32_t b_center = (words[1] >> 8) & 0xff; uint32_t b_scale = (words[1] >> 0) & 0xff; renderer.set_color_key(1, g_width, g_center, g_scale); renderer.set_color_key(2, b_width, b_center, b_scale); } void CommandProcessor::op_set_key_r(const uint32_t *words) { uint32_t r_width = (words[1] >> 16) & 0xfff; uint32_t r_center = (words[1] >> 8) & 0xff; uint32_t r_scale = (words[1] >> 0) & 0xff; renderer.set_color_key(0, r_width, r_center, r_scale); } #define OP(x) void CommandProcessor::op_##x(const uint32_t *) {} OP(sync_load) OP(sync_pipe) OP(sync_tile) #undef OP void CommandProcessor::enqueue_command_inner(unsigned num_words, const uint32_t *words) { if (single_threaded_processing) enqueue_command_direct(num_words, words); else ring.enqueue_command(num_words, words); } void CommandProcessor::enqueue_command(unsigned num_words, const uint32_t *words) { if (dump_writer && !dump_in_command_list) { wait_for_timeline(signal_timeline()); dump_writer->flush_dram(begin_read_rdram(), rdram_size); dump_writer->flush_hidden_dram(begin_read_hidden_rdram(), hidden_rdram->get_create_info().size); dump_in_command_list = true; } enqueue_command_inner(num_words, words); if (dump_writer) { uint32_t cmd_id = (words[0] >> 24) & 63; if (Op(cmd_id) == Op::SyncFull) { dump_writer->signal_complete(); dump_in_command_list = false; } else dump_writer->emit_command(cmd_id, words, num_words); } } void CommandProcessor::enqueue_command_direct(unsigned, const uint32_t *words) { #define OP(x) &CommandProcessor::op_##x using CommandFunc = void (CommandProcessor::*)(const uint32_t *words); static const CommandFunc funcs[64] = { /* 0x00 */ nullptr, nullptr, nullptr, nullptr, /* 0x04 */ nullptr, nullptr, nullptr, nullptr, /* 0x08 */ OP(fill_triangle), OP(fill_z_buffer_triangle), OP(texture_triangle), OP(texture_z_buffer_triangle), /* 0x0c */ OP(shade_triangle), OP(shade_z_buffer_triangle), OP(shade_texture_triangle), OP(shade_texture_z_buffer_triangle), /* 0x10 */ nullptr, nullptr, nullptr, nullptr, /* 0x14 */ nullptr, nullptr, nullptr, nullptr, /* 0x18 */ nullptr, nullptr, nullptr, nullptr, /* 0x1c */ nullptr, nullptr, nullptr, nullptr, /* 0x20 */ nullptr, nullptr, nullptr, nullptr, /* 0x24 */ OP(texture_rectangle), OP(texture_rectangle_flip), OP(sync_load), OP(sync_pipe), /* 0x28 */ OP(sync_tile), OP(sync_full), OP(set_key_gb), OP(set_key_r), /* 0x2c */ OP(set_convert), OP(set_scissor), OP(set_prim_depth), OP(set_other_modes), /* 0x30 */ OP(load_tlut), nullptr, OP(set_tile_size), OP(load_block), /* 0x34 */ OP(load_tile), OP(set_tile), OP(fill_rectangle), OP(set_fill_color), /* 0x38 */ OP(set_fog_color), OP(set_blend_color), OP(set_prim_color), OP(set_env_color), /* 0x3c */ OP(set_combine), OP(set_texture_image), OP(set_mask_image), OP(set_color_image), }; #undef OP unsigned op = (words[0] >> 24) & 63; switch (Op(op)) { case Op::MetaSignalTimeline: { renderer.flush_and_signal(); uint64_t val = words[1] | (uint64_t(words[2]) << 32); CoherencyOperation signal_op; signal_op.timeline_value = val; timeline_worker.push(std::move(signal_op)); break; } case Op::MetaFlush: { renderer.flush_and_signal(); break; } case Op::MetaIdle: { renderer.notify_idle_command_thread(); break; } case Op::MetaSetQuirks: { quirks.u.words[0] = words[1]; break; } default: if (funcs[op]) (this->*funcs[op])(words); break; } } void CommandProcessor::set_quirks(const Quirks &quirks_) { const uint32_t words[2] = { uint32_t(Op::MetaSetQuirks) << 24u, quirks_.u.words[0], }; enqueue_command_inner(2, words); } void CommandProcessor::set_vi_register(VIRegister reg, uint32_t value) { vi.set_vi_register(reg, value); if (dump_writer) dump_writer->set_vi_register(uint32_t(reg), value); } void *CommandProcessor::begin_read_rdram() { if (rdram) return device.map_host_buffer(*rdram, MEMORY_ACCESS_READ_BIT); else return nullptr; } void CommandProcessor::end_write_rdram() { if (rdram) device.unmap_host_buffer(*rdram, MEMORY_ACCESS_WRITE_BIT); } void *CommandProcessor::begin_read_hidden_rdram() { return device.map_host_buffer(*hidden_rdram, MEMORY_ACCESS_READ_BIT); } void CommandProcessor::end_write_hidden_rdram() { device.unmap_host_buffer(*hidden_rdram, MEMORY_ACCESS_WRITE_BIT); } size_t CommandProcessor::get_rdram_size() const { if (is_host_coherent) return rdram->get_create_info().size; else return rdram->get_create_info().size / 2; } size_t CommandProcessor::get_hidden_rdram_size() const { return hidden_rdram->get_create_info().size; } void *CommandProcessor::get_tmem() { return device.map_host_buffer(*tmem, MEMORY_ACCESS_READ_BIT); } void CommandProcessor::idle() { flush(); wait_for_timeline(signal_timeline()); } void CommandProcessor::flush() { const uint32_t words[1] = { uint32_t(Op::MetaFlush) << 24, }; enqueue_command_inner(1, words); } uint64_t CommandProcessor::signal_timeline() { timeline_value++; const uint32_t words[3] = { uint32_t(Op::MetaSignalTimeline) << 24, uint32_t(timeline_value), uint32_t(timeline_value >> 32), }; enqueue_command_inner(3, words); return timeline_value; } void CommandProcessor::wait_for_timeline(uint64_t index) { Vulkan::QueryPoolHandle start_ts, end_ts; if (measure_stall_time) start_ts = device.write_calibrated_timestamp(); timeline_worker.wait([this, index]() -> bool { return thread_timeline_value >= index; }); if (measure_stall_time) { end_ts = device.write_calibrated_timestamp(); device.register_time_interval("RDP CPU", std::move(start_ts), std::move(end_ts), "wait-for-timeline"); } } Vulkan::ImageHandle CommandProcessor::scanout(const ScanoutOptions &opts, VkImageLayout target_layout) { Vulkan::QueryPoolHandle start_ts, end_ts; drain_command_ring(); if (dump_writer) { wait_for_timeline(signal_timeline()); dump_writer->flush_dram(begin_read_rdram(), rdram_size); dump_writer->flush_hidden_dram(begin_read_hidden_rdram(), hidden_rdram->get_create_info().size); dump_writer->end_frame(); } // Block idle callbacks triggering while we're doing this. renderer.lock_command_processing(); { renderer.flush_and_signal(); if (!is_host_coherent) { unsigned offset, length; vi.scanout_memory_range(offset, length); renderer.resolve_coherency_external(offset, length); } } renderer.unlock_command_processing(); auto scanout = vi.scanout(target_layout, opts, renderer.get_scaling_factor()); return scanout; } Vulkan::ImageHandle CommandProcessor::scanout(const ScanoutOptions &opts) { return scanout(opts, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL); } void CommandProcessor::drain_command_ring() { Vulkan::QueryPoolHandle start_ts, end_ts; if (timestamp) start_ts = device.write_calibrated_timestamp(); ring.drain(); if (timestamp) { end_ts = device.write_calibrated_timestamp(); device.register_time_interval("RDP CPU", std::move(start_ts), std::move(end_ts), "drain-command-ring"); } } void CommandProcessor::scanout_async_buffer(VIScanoutBuffer &buffer, const ScanoutOptions &opts) { auto handle = scanout(opts, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); if (!handle) { buffer.width = 0; buffer.height = 0; buffer.fence.reset(); return; } buffer.width = handle->get_width(); buffer.height = handle->get_height(); Vulkan::BufferCreateInfo info = {}; info.size = buffer.width * buffer.height * sizeof(uint32_t); info.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; info.domain = Vulkan::BufferDomain::CachedHost; if (!buffer.buffer || buffer.buffer->get_create_info().size < info.size) buffer.buffer = device.create_buffer(info); auto cmd = device.request_command_buffer(); cmd->copy_image_to_buffer(*buffer.buffer, *handle, 0, {}, { buffer.width, buffer.height, 1 }, 0, 0, { VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 }); cmd->barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_HOST_BIT, VK_ACCESS_HOST_READ_BIT); buffer.fence.reset(); device.submit(cmd, &buffer.fence); } void CommandProcessor::scanout_sync(std::vector &colors, unsigned &width, unsigned &height) { ScanoutOptions opts = {}; // Downscale down to 1x, always. opts.downscale_steps = 32; opts.blend_previous_frame = true; opts.upscale_deinterlacing = false; VIScanoutBuffer scanout; scanout_async_buffer(scanout, opts); if (!scanout.width || !scanout.height) { width = 0; height = 0; colors.clear(); return; } width = scanout.width; height = scanout.height; colors.resize(width * height); scanout.fence->wait(); memcpy(colors.data(), device.map_host_buffer(*scanout.buffer, Vulkan::MEMORY_ACCESS_READ_BIT), width * height * sizeof(uint32_t)); device.unmap_host_buffer(*scanout.buffer, Vulkan::MEMORY_ACCESS_READ_BIT); } void CommandProcessor::FenceExecutor::notify_work_locked(const CoherencyOperation &work) { if (work.timeline_value) *value = work.timeline_value; } bool CommandProcessor::FenceExecutor::is_sentinel(const CoherencyOperation &work) const { return !work.fence && !work.timeline_value; } static void masked_memcpy(uint8_t * __restrict dst, const uint8_t * __restrict data_src, const uint8_t * __restrict masked_src, size_t size) { #if defined(__SSE2__) for (size_t i = 0; i < size; i += 16) { __m128i data = _mm_loadu_si128(reinterpret_cast(data_src + i)); __m128i mask = _mm_loadu_si128(reinterpret_cast(masked_src + i)); _mm_maskmoveu_si128(data, mask, reinterpret_cast(dst + i)); } #else auto * __restrict data32 = reinterpret_cast(data_src); auto * __restrict mask32 = reinterpret_cast(masked_src); auto * __restrict dst32 = reinterpret_cast(dst); auto size32 = size >> 2; for (size_t i = 0; i < size32; i++) { auto mask = mask32[i]; if (mask == ~0u) { dst32[i] = data32[i]; } else if (mask) { // Fairly rare path. for (unsigned j = 0; j < 4; j++) if (masked_src[4 * i + j]) dst[4 * i + j] = data_src[4 * i + j]; } } #endif } void CommandProcessor::FenceExecutor::perform_work(CoherencyOperation &work) { if (work.fence) work.fence->wait(); if (work.unlock_cookie) work.unlock_cookie->fetch_sub(1, std::memory_order_relaxed); if (work.src) { for (auto © : work.copies) { auto *mapped_data = static_cast(device->map_host_buffer(*work.src, MEMORY_ACCESS_READ_BIT, copy.src_offset, copy.size)); auto *mapped_mask = static_cast(device->map_host_buffer(*work.src, MEMORY_ACCESS_READ_BIT, copy.mask_offset, copy.size)); masked_memcpy(work.dst + copy.dst_offset, mapped_data, mapped_mask, copy.size); for (unsigned i = 0; i < copy.counters; i++) { unsigned val = copy.counter_base[i].fetch_sub(1, std::memory_order_release); (void)val; assert(val > 0); } } #ifdef __SSE2__ _mm_mfence(); #endif } } void CommandProcessor::enqueue_coherency_operation(CoherencyOperation &&op) { timeline_worker.push(std::move(op)); } } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_device.hpp000066400000000000000000000160601415063341600247400ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include "device.hpp" #include "video_interface.hpp" #include "rdp_renderer.hpp" #include "rdp_common.hpp" #include "command_ring.hpp" #include "worker_thread.hpp" #include "rdp_dump_write.hpp" #ifndef GRANITE_VULKAN_MT #error "Granite Vulkan backend must be built with multithreading support." #endif namespace RDP { struct RGBA { uint8_t r, g, b, a; }; enum CommandProcessorFlagBits { COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_HIDDEN_RDRAM_BIT = 1 << 0, COMMAND_PROCESSOR_FLAG_HOST_VISIBLE_TMEM_BIT = 1 << 1, COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT = 1 << 2, COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT = 1 << 3, COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT = 1 << 4, COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_READ_BACK_BIT = 1 << 5, COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT = 1 << 6 }; using CommandProcessorFlags = uint32_t; struct CoherencyCopy { size_t src_offset = 0; size_t mask_offset = 0; size_t dst_offset = 0; size_t size = 0; std::atomic_uint32_t *counter_base = nullptr; unsigned counters = 0; }; struct CoherencyOperation { Vulkan::Fence fence; uint64_t timeline_value = 0; uint8_t *dst = nullptr; const Vulkan::Buffer *src = nullptr; std::vector copies; std::atomic_uint32_t *unlock_cookie = nullptr; }; // These options control various behavior when upscaling to workaround glitches which arise naturally as part of upscaling. struct Quirks { inline Quirks() { u.options.native_resolution_tex_rect = true; u.options.native_texture_lod = false; } inline void set_native_resolution_tex_rect(bool enable) { u.options.native_resolution_tex_rect = enable; } inline void set_native_texture_lod(bool enable) { u.options.native_texture_lod = enable; } union { struct Opts { // If true, force TEX_RECT and TEX_RECT_FLIP to render without upscaling. // Works around bilinear filtering bugs in Cycle1/Cycle2 mode where game assumed 1:1 pixel transfer. bool native_resolution_tex_rect; // Forces LOD to be computed as 1x upscale. // Fixes content which relies on LOD computation to select textures in clever ways. bool native_texture_lod; } options; uint32_t words[1]; } u; }; class CommandProcessor { public: CommandProcessor(Vulkan::Device &device, void *rdram_ptr, size_t rdram_offset, size_t rdram_size, size_t hidden_rdram_size, CommandProcessorFlags flags); ~CommandProcessor(); bool device_is_supported() const; // Synchronization. void flush(); uint64_t signal_timeline(); void wait_for_timeline(uint64_t index); void idle(); void begin_frame_context(); // Queues up state and drawing commands. void enqueue_command(unsigned num_words, const uint32_t *words); void enqueue_command_direct(unsigned num_words, const uint32_t *words); void set_quirks(const Quirks &quirks); // Interact with memory. void *begin_read_rdram(); void end_write_rdram(); void *begin_read_hidden_rdram(); void end_write_hidden_rdram(); size_t get_rdram_size() const; size_t get_hidden_rdram_size() const; void *get_tmem(); // Sets VI register void set_vi_register(VIRegister reg, uint32_t value); Vulkan::ImageHandle scanout(const ScanoutOptions &opts = {}); void scanout_sync(std::vector &colors, unsigned &width, unsigned &height); void scanout_async_buffer(VIScanoutBuffer &buffer, const ScanoutOptions &opts = {}); private: Vulkan::Device &device; Vulkan::BufferHandle rdram; Vulkan::BufferHandle hidden_rdram; Vulkan::BufferHandle tmem; size_t rdram_offset; size_t rdram_size; CommandProcessorFlags flags; #ifndef PARALLEL_RDP_SHADER_DIR std::unique_ptr shader_bank; #endif CommandRing ring; VideoInterface vi; Renderer renderer; void clear_hidden_rdram(); void clear_tmem(); void clear_buffer(Vulkan::Buffer &buffer, uint32_t value); void init_renderer(); void enqueue_command_inner(unsigned num_words, const uint32_t *words); Vulkan::ImageHandle scanout(const ScanoutOptions &opts, VkImageLayout target_layout); #define OP(x) void op_##x(const uint32_t *words) OP(fill_triangle); OP(fill_z_buffer_triangle); OP(texture_triangle); OP(texture_z_buffer_triangle); OP(shade_triangle); OP(shade_z_buffer_triangle); OP(shade_texture_triangle); OP(shade_texture_z_buffer_triangle); OP(texture_rectangle); OP(texture_rectangle_flip); OP(sync_load); OP(sync_pipe); OP(sync_tile); OP(sync_full); OP(set_key_gb); OP(set_key_r); OP(set_convert); OP(set_scissor); OP(set_prim_depth); OP(set_other_modes); OP(load_tlut); OP(set_tile_size); OP(load_block); OP(load_tile); OP(set_tile); OP(fill_rectangle); OP(set_fill_color); OP(set_fog_color); OP(set_blend_color); OP(set_prim_color); OP(set_env_color); OP(set_combine); OP(set_texture_image); OP(set_mask_image); OP(set_color_image); #undef OP ScissorState scissor_state = {}; StaticRasterizationState static_state = {}; DepthBlendState depth_blend = {}; struct { uint32_t addr; uint32_t width; TextureFormat fmt; TextureSize size; } texture_image = {}; uint64_t timeline_value = 0; uint64_t thread_timeline_value = 0; struct FenceExecutor { explicit inline FenceExecutor(Vulkan::Device *device_, uint64_t *ptr) : device(device_), value(ptr) { } Vulkan::Device *device; uint64_t *value; bool is_sentinel(const CoherencyOperation &work) const; void perform_work(CoherencyOperation &work); void notify_work_locked(const CoherencyOperation &work); }; WorkerThread timeline_worker; uint8_t *host_rdram = nullptr; bool measure_stall_time = false; bool single_threaded_processing = false; bool is_supported = false; bool is_host_coherent = true; bool timestamp = false; friend class Renderer; void enqueue_coherency_operation(CoherencyOperation &&op); void drain_command_ring(); void decode_triangle_setup(TriangleSetup &setup, const uint32_t *words) const; Quirks quirks; std::unique_ptr dump_writer; bool dump_in_command_list = false; }; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_dump_write.cpp000066400000000000000000000076511415063341600256610ustar00rootroot00000000000000/* Copyright (c) 2021 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "rdp_dump_write.hpp" #include #include #include namespace RDP { RDPDumpWriter::~RDPDumpWriter() { end(); if (file) fclose(file); } bool RDPDumpWriter::init(const char *path, uint32_t dram_size, uint32_t hidden_dram_size) { if (file) return false; rdp_dram_cache.clear(); rdp_dram_cache.resize(dram_size); rdp_hidden_dram_cache.clear(); rdp_hidden_dram_cache.resize(hidden_dram_size); file = fopen(path, "wb"); if (!file) return false; fwrite("RDPDUMP2", 8, 1, file); fwrite(&dram_size, sizeof(dram_size), 1, file); fwrite(&hidden_dram_size, sizeof(hidden_dram_size), 1, file); return true; } void RDPDumpWriter::end_frame() { if (!file) return; uint32_t cmd = RDP_DUMP_CMD_END_FRAME; fwrite(&cmd, sizeof(cmd), 1, file); } void RDPDumpWriter::end() { if (!file) return; uint32_t cmd = RDP_DUMP_CMD_EOF; fwrite(&cmd, sizeof(cmd), 1, file); fclose(file); file = nullptr; rdp_dram_cache.clear(); rdp_hidden_dram_cache.clear(); } void RDPDumpWriter::flush(const void *dram_, uint32_t size, RDPDumpCmd block_cmd, RDPDumpCmd flush_cmd, uint8_t *cache) { if (!file) return; const auto *dram = static_cast(dram_); const uint32_t block_size = 4 * 1024; uint32_t i = 0; for (i = 0; i < size; i += block_size) { if (memcmp(dram + i, cache + i, block_size) != 0) { uint32_t cmd = block_cmd; fwrite(&cmd, sizeof(cmd), 1, file); fwrite(&i, sizeof(i), 1, file); fwrite(&block_size, sizeof(block_size), 1, file); fwrite(dram + i, 1, block_size, file); memcpy(cache + i, dram + i, block_size); } } uint32_t cmd = flush_cmd; fwrite(&cmd, sizeof(cmd), 1, file); } void RDPDumpWriter::flush_dram(const void *dram_, uint32_t size) { flush(dram_, size, RDP_DUMP_CMD_UPDATE_DRAM, RDP_DUMP_CMD_UPDATE_DRAM_FLUSH, rdp_dram_cache.data()); } void RDPDumpWriter::flush_hidden_dram(const void *dram_, uint32_t size) { flush(dram_, size, RDP_DUMP_CMD_UPDATE_HIDDEN_DRAM, RDP_DUMP_CMD_UPDATE_HIDDEN_DRAM_FLUSH, rdp_hidden_dram_cache.data()); } void RDPDumpWriter::signal_complete() { if (!file) return; uint32_t cmd = RDP_DUMP_CMD_SIGNAL_COMPLETE; fwrite(&cmd, sizeof(cmd), 1, file); } void RDPDumpWriter::emit_command(uint32_t command, const uint32_t *cmd_data, uint32_t cmd_words) { if (!file) return; uint32_t cmd = RDP_DUMP_CMD_RDP_COMMAND; fwrite(&cmd, sizeof(cmd), 1, file); fwrite(&command, sizeof(command), 1, file); fwrite(&cmd_words, sizeof(cmd_words), 1, file); fwrite(cmd_data, sizeof(*cmd_data), cmd_words, file); } void RDPDumpWriter::set_vi_register(uint32_t vi_register, uint32_t value) { if (!file) return; uint32_t cmd = RDP_DUMP_CMD_SET_VI_REGISTER; fwrite(&cmd, sizeof(cmd), 1, file); fwrite(&vi_register, sizeof(vi_register), 1, file); fwrite(&value, sizeof(value), 1, file); } } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_dump_write.hpp000066400000000000000000000043511415063341600256600ustar00rootroot00000000000000/* Copyright (c) 2021 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include namespace RDP { class RDPDumpWriter { public: ~RDPDumpWriter(); bool init(const char *path, uint32_t dram_size, uint32_t hidden_dram_size); void flush_dram(const void *dram, uint32_t size); void flush_hidden_dram(const void *dram, uint32_t size); void signal_complete(); void emit_command(uint32_t command, const uint32_t *cmd_data, uint32_t cmd_words); void set_vi_register(uint32_t vi_register, uint32_t value); void end_frame(); private: enum RDPDumpCmd : uint32_t { RDP_DUMP_CMD_INVALID = 0, RDP_DUMP_CMD_UPDATE_DRAM = 1, RDP_DUMP_CMD_RDP_COMMAND = 2, RDP_DUMP_CMD_SET_VI_REGISTER = 3, RDP_DUMP_CMD_END_FRAME = 4, RDP_DUMP_CMD_SIGNAL_COMPLETE = 5, RDP_DUMP_CMD_EOF = 6, RDP_DUMP_CMD_UPDATE_DRAM_FLUSH = 7, RDP_DUMP_CMD_UPDATE_HIDDEN_DRAM = 8, RDP_DUMP_CMD_UPDATE_HIDDEN_DRAM_FLUSH = 9, RDP_DUMP_CMD_INT_MAX = 0x7fffffff }; FILE *file = nullptr; std::vector rdp_dram_cache; std::vector rdp_hidden_dram_cache; void flush(const void *dram_, uint32_t size, RDPDumpCmd block_cmd, RDPDumpCmd flush_cmd, uint8_t *cache); void end(); }; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_renderer.cpp000066400000000000000000003437451415063341600253170ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "rdp_renderer.hpp" #include "rdp_device.hpp" #include "logging.hpp" #include "bitops.hpp" #include "luts.hpp" #include "timer.hpp" #include #ifdef PARALLEL_RDP_SHADER_DIR #include "global_managers.hpp" #include "os_filesystem.hpp" #else #include "shaders/slangmosh.hpp" #endif namespace RDP { Renderer::Renderer(CommandProcessor &processor_) : processor(processor_) { active_submissions = 0; } Renderer::~Renderer() { } void Renderer::set_shader_bank(const ShaderBank *bank) { shader_bank = bank; } bool Renderer::init_renderer(const RendererOptions &options) { if (options.upscaling_factor == 0) return false; if (options.upscaling_factor == 1 && options.super_sampled_readback) return false; caps.max_width = options.upscaling_factor * Limits::MaxWidth; caps.max_height = options.upscaling_factor * Limits::MaxHeight; caps.max_tiles_x = options.upscaling_factor * ImplementationConstants::MaxTilesX; caps.max_tiles_y = options.upscaling_factor * ImplementationConstants::MaxTilesY; caps.max_num_tile_instances = options.upscaling_factor * options.upscaling_factor * Limits::MaxTileInstances; #ifdef PARALLEL_RDP_SHADER_DIR pipeline_worker.reset(new WorkerThread( Granite::Global::create_thread_context(), { device })); #else pipeline_worker.reset(new WorkerThread({ device })); #endif #ifdef PARALLEL_RDP_SHADER_DIR if (!GRANITE_FILESYSTEM()->get_backend("rdp")) GRANITE_FILESYSTEM()->register_protocol("rdp", std::make_unique(PARALLEL_RDP_SHADER_DIR)); device->get_shader_manager().add_include_directory("builtin://shaders/inc"); #endif for (auto &buffer : buffer_instances) buffer.init(*device); if (const char *env = getenv("RDP_DEBUG")) debug_channel = strtoul(env, nullptr, 0) != 0; if (const char *env = getenv("RDP_DEBUG_X")) filter_debug_channel_x = strtol(env, nullptr, 0); if (const char *env = getenv("RDP_DEBUG_Y")) filter_debug_channel_y = strtol(env, nullptr, 0); { Vulkan::BufferCreateInfo info = {}; info.size = Limits::MaxTMEMInstances * 0x1000; info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; info.domain = Vulkan::BufferDomain::Device; info.misc = Vulkan::BUFFER_MISC_ZERO_INITIALIZE_BIT; tmem_instances = device->create_buffer(info); device->set_name(*tmem_instances, "tmem-instances"); stream.tmem_upload_infos.reserve(Limits::MaxTMEMInstances); } { Vulkan::BufferCreateInfo info = {}; info.size = options.upscaling_factor * Limits::MaxSpanSetups * sizeof(SpanSetup); info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; info.domain = Vulkan::BufferDomain::Device; info.misc = Vulkan::BUFFER_MISC_ZERO_INITIALIZE_BIT; span_setups = device->create_buffer(info); device->set_name(*span_setups, "span-setups"); } init_blender_lut(); init_buffers(options); if (options.upscaling_factor > 1 && !init_internal_upscaling_factor(options)) return false; return init_caps(); } void Renderer::set_device(Vulkan::Device *device_) { device = device_; } bool Renderer::init_caps() { auto &features = device->get_device_features(); if (const char *timestamp = getenv("PARALLEL_RDP_BENCH")) { caps.timestamp = strtol(timestamp, nullptr, 0); LOGI("Enabling timestamps = %d\n", caps.timestamp); } if (const char *ubershader = getenv("PARALLEL_RDP_UBERSHADER")) { caps.ubershader = strtol(ubershader, nullptr, 0) > 0; LOGI("Overriding ubershader = %d\n", int(caps.ubershader)); } if (const char *force_sync = getenv("PARALLEL_RDP_FORCE_SYNC_SHADER")) { caps.force_sync = strtol(force_sync, nullptr, 0) > 0; LOGI("Overriding force sync shader = %d\n", int(caps.force_sync)); } bool allow_subgroup = true; if (const char *subgroup = getenv("PARALLEL_RDP_SUBGROUP")) { allow_subgroup = strtol(subgroup, nullptr, 0) > 0; LOGI("Allow subgroups = %d\n", int(allow_subgroup)); } bool allow_small_types = true; bool forces_small_types = false; if (const char *small = getenv("PARALLEL_RDP_SMALL_TYPES")) { allow_small_types = strtol(small, nullptr, 0) > 0; forces_small_types = true; LOGI("Allow small types = %d.\n", int(allow_small_types)); } if (!features.storage_16bit_features.storageBuffer16BitAccess) { LOGE("VK_KHR_16bit_storage for SSBOs is not supported! This is a minimum requirement for paraLLEl-RDP.\n"); return false; } if (!features.storage_8bit_features.storageBuffer8BitAccess) { LOGE("VK_KHR_8bit_storage for SSBOs is not supported! This is a minimum requirement for paraLLEl-RDP.\n"); return false; } // Driver workarounds here for 8/16-bit integer support. if (features.supports_driver_properties && !forces_small_types) { if (features.driver_properties.driverID == VK_DRIVER_ID_AMD_PROPRIETARY_KHR) { LOGW("Current proprietary AMD driver is known to be buggy with 8/16-bit integer arithmetic, disabling support for time being.\n"); allow_small_types = false; } else if (features.driver_properties.driverID == VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR || features.driver_properties.driverID == VK_DRIVER_ID_MESA_RADV_KHR) { LOGW("Current open-source AMD drivers are known to be slightly faster without 8/16-bit integer arithmetic.\n"); allow_small_types = false; } else if (features.driver_properties.driverID == VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR) { LOGW("Current NVIDIA driver is known to be slightly faster without 8/16-bit integer arithmetic.\n"); allow_small_types = false; } else if (features.driver_properties.driverID == VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR) { LOGW("Current proprietary Intel Windows driver is tested to perform much better without 8/16-bit integer support.\n"); allow_small_types = false; } // Intel ANV *must* use small integer arithmetic, or it doesn't pass test suite. } if (!allow_small_types) { caps.supports_small_integer_arithmetic = false; } else if (features.enabled_features.shaderInt16 && features.float16_int8_features.shaderInt8) { LOGI("Enabling 8 and 16-bit integer arithmetic support for more efficient shaders!\n"); caps.supports_small_integer_arithmetic = true; } else { LOGW("Device does not support 8 and 16-bit integer arithmetic support. Falling back to 32-bit arithmetic everywhere.\n"); caps.supports_small_integer_arithmetic = false; } uint32_t subgroup_size = features.subgroup_properties.subgroupSize; const VkSubgroupFeatureFlags required = VK_SUBGROUP_FEATURE_BALLOT_BIT | VK_SUBGROUP_FEATURE_BASIC_BIT | VK_SUBGROUP_FEATURE_VOTE_BIT | VK_SUBGROUP_FEATURE_ARITHMETIC_BIT; caps.subgroup_tile_binning = allow_subgroup && (features.subgroup_properties.supportedOperations & required) == required && (features.subgroup_properties.supportedStages & VK_SHADER_STAGE_COMPUTE_BIT) != 0 && can_support_minimum_subgroup_size(32) && subgroup_size <= 64; caps.subgroup_depth_blend = caps.super_sample_readback && allow_subgroup && (features.subgroup_properties.supportedOperations & required) == required && (features.subgroup_properties.supportedStages & VK_SHADER_STAGE_COMPUTE_BIT) != 0; return true; } int Renderer::resolve_shader_define(const char *name, const char *define) const { if (strcmp(define, "DEBUG_ENABLE") == 0) return int(debug_channel); else if (strcmp(define, "UBERSHADER") == 0) return int(caps.ubershader); else if (strcmp(define, "SMALL_TYPES") == 0) return int(caps.supports_small_integer_arithmetic); else if (strcmp(define, "SUBGROUP") == 0) { if (strcmp(name, "tile_binning_combined") == 0) return int(caps.subgroup_tile_binning); else if (strcmp(name, "depth_blend") == 0 || strcmp(name, "ubershader") == 0) return int(caps.subgroup_depth_blend); else return 0; } else return 0; } void Renderer::init_buffers(const RendererOptions &options) { Vulkan::BufferCreateInfo info = {}; info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; info.domain = Vulkan::BufferDomain::Device; info.misc = Vulkan::BUFFER_MISC_ZERO_INITIALIZE_BIT; static_assert((Limits::MaxPrimitives % 32) == 0, "MaxPrimitives must be divisble by 32."); static_assert(Limits::MaxPrimitives <= (32 * 32), "MaxPrimitives must be less-or-equal than 1024."); info.size = sizeof(uint32_t) * (Limits::MaxPrimitives / 32) * (caps.max_width / ImplementationConstants::TileWidth) * (caps.max_height / ImplementationConstants::TileHeight); tile_binning_buffer = device->create_buffer(info); device->set_name(*tile_binning_buffer, "tile-binning-buffer"); info.size = sizeof(uint32_t) * (caps.max_width / ImplementationConstants::TileWidth) * (caps.max_height / ImplementationConstants::TileHeight); tile_binning_buffer_coarse = device->create_buffer(info); device->set_name(*tile_binning_buffer_coarse, "tile-binning-buffer-coarse"); if (!caps.ubershader) { info.size = sizeof(uint32_t) * (Limits::MaxPrimitives / 32) * (caps.max_width / ImplementationConstants::TileWidth) * (caps.max_height / ImplementationConstants::TileHeight); per_tile_offsets = device->create_buffer(info); device->set_name(*per_tile_offsets, "per-tile-offsets"); info.size = sizeof(TileRasterWork) * Limits::MaxStaticRasterizationStates * caps.max_num_tile_instances; tile_work_list = device->create_buffer(info); device->set_name(*tile_work_list, "tile-work-list"); info.size = sizeof(uint32_t) * caps.max_num_tile_instances * ImplementationConstants::TileWidth * ImplementationConstants::TileHeight; per_tile_shaded_color = device->create_buffer(info); device->set_name(*per_tile_shaded_color, "per-tile-shaded-color"); per_tile_shaded_depth = device->create_buffer(info); device->set_name(*per_tile_shaded_depth, "per-tile-shaded-depth"); info.size = sizeof(uint8_t) * caps.max_num_tile_instances * ImplementationConstants::TileWidth * ImplementationConstants::TileHeight; per_tile_shaded_coverage = device->create_buffer(info); per_tile_shaded_shaded_alpha = device->create_buffer(info); device->set_name(*per_tile_shaded_coverage, "per-tile-shaded-coverage"); device->set_name(*per_tile_shaded_shaded_alpha, "per-tile-shaded-shaded-alpha"); } } void Renderer::init_blender_lut() { Vulkan::BufferCreateInfo info = {}; info.size = sizeof(blender_lut); info.domain = Vulkan::BufferDomain::Device; info.usage = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT; blender_divider_lut_buffer = device->create_buffer(info, blender_lut); device->set_name(*blender_divider_lut_buffer, "blender-divider-lut-buffer"); Vulkan::BufferViewCreateInfo view = {}; view.buffer = blender_divider_lut_buffer.get(); view.format = VK_FORMAT_R8_UINT; view.range = info.size; blender_divider_buffer = device->create_buffer_view(view); } void Renderer::message(const std::string &tag, uint32_t code, uint32_t x, uint32_t y, uint32_t, uint32_t num_words, const Vulkan::DebugChannelInterface::Word *words) { if (filter_debug_channel_x >= 0 && x != uint32_t(filter_debug_channel_x)) return; if (filter_debug_channel_y >= 0 && y != uint32_t(filter_debug_channel_y)) return; enum Code { ASSERT_EQUAL = 0, ASSERT_NOT_EQUAL = 1, ASSERT_LESS_THAN = 2, ASSERT_LESS_THAN_EQUAL = 3, GENERIC = 4, HEX = 5 }; switch (Code(code)) { case ASSERT_EQUAL: LOGE("ASSERT TRIPPED FOR (%u, %u), line %d, %d == %d failed.\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case ASSERT_NOT_EQUAL: LOGE("ASSERT TRIPPED FOR (%u, %u), line %d, %d != %d failed.\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case ASSERT_LESS_THAN: LOGE("ASSERT TRIPPED FOR (%u, %u), line %d, %d < %d failed.\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case ASSERT_LESS_THAN_EQUAL: LOGE("ASSERT TRIPPED FOR (%u, %u), line %d, %d <= %d failed.\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case GENERIC: switch (num_words) { case 1: LOGI("(%u, %u), line %d.\n", x, y, words[0].s32); break; case 2: LOGI("(%u, %u), line %d: (%d).\n", x, y, words[0].s32, words[1].s32); break; case 3: LOGI("(%u, %u), line %d: (%d, %d).\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case 4: LOGI("(%u, %u), line %d: (%d, %d, %d).\n", x, y, words[0].s32, words[1].s32, words[2].s32, words[3].s32); break; default: LOGE("Unknown number of generic parameters: %u\n", num_words); break; } break; case HEX: switch (num_words) { case 1: LOGI("(%u, %u), line %d.\n", x, y, words[0].s32); break; case 2: LOGI("(%u, %u), line %d: (0x%x).\n", x, y, words[0].s32, words[1].s32); break; case 3: LOGI("(%u, %u), line %d: (0x%x, 0x%x).\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case 4: LOGI("(%u, %u), line %d: (0x%x, 0x%x, 0x%x).\n", x, y, words[0].s32, words[1].s32, words[2].s32, words[3].s32); break; default: LOGE("Unknown number of generic parameters: %u\n", num_words); break; } break; default: LOGE("Unexpected message code: %u\n", code); break; } } void Renderer::RenderBuffers::init(Vulkan::Device &device, Vulkan::BufferDomain domain, RenderBuffers *borrow) { triangle_setup = create_buffer(device, domain, sizeof(TriangleSetup) * Limits::MaxPrimitives, borrow ? &borrow->triangle_setup : nullptr); device.set_name(*triangle_setup.buffer, "triangle-setup"); attribute_setup = create_buffer(device, domain, sizeof(AttributeSetup) * Limits::MaxPrimitives, borrow ? &borrow->attribute_setup: nullptr); device.set_name(*attribute_setup.buffer, "attribute-setup"); derived_setup = create_buffer(device, domain, sizeof(DerivedSetup) * Limits::MaxPrimitives, borrow ? &borrow->derived_setup : nullptr); device.set_name(*derived_setup.buffer, "derived-setup"); scissor_setup = create_buffer(device, domain, sizeof(ScissorState) * Limits::MaxPrimitives, borrow ? &borrow->scissor_setup : nullptr); device.set_name(*scissor_setup.buffer, "scissor-state"); static_raster_state = create_buffer(device, domain, sizeof(StaticRasterizationState) * Limits::MaxStaticRasterizationStates, borrow ? &borrow->static_raster_state : nullptr); device.set_name(*static_raster_state.buffer, "static-raster-state"); depth_blend_state = create_buffer(device, domain, sizeof(DepthBlendState) * Limits::MaxDepthBlendStates, borrow ? &borrow->depth_blend_state : nullptr); device.set_name(*depth_blend_state.buffer, "depth-blend-state"); tile_info_state = create_buffer(device, domain, sizeof(TileInfo) * Limits::MaxTileInfoStates, borrow ? &borrow->tile_info_state : nullptr); device.set_name(*tile_info_state.buffer, "tile-info-state"); state_indices = create_buffer(device, domain, sizeof(InstanceIndices) * Limits::MaxPrimitives, borrow ? &borrow->state_indices : nullptr); device.set_name(*state_indices.buffer, "state-indices"); span_info_offsets = create_buffer(device, domain, sizeof(SpanInfoOffsets) * Limits::MaxPrimitives, borrow ? &borrow->span_info_offsets : nullptr); device.set_name(*span_info_offsets.buffer, "span-info-offsets"); span_info_jobs = create_buffer(device, domain, sizeof(SpanInterpolationJob) * Limits::MaxSpanSetups, borrow ? &borrow->span_info_jobs : nullptr); device.set_name(*span_info_jobs.buffer, "span-info-jobs"); if (!borrow) { Vulkan::BufferViewCreateInfo info = {}; info.buffer = span_info_jobs.buffer.get(); info.format = VK_FORMAT_R16G16B16A16_UINT; info.range = span_info_jobs.buffer->get_create_info().size; span_info_jobs_view = device.create_buffer_view(info); } } Renderer::MappedBuffer Renderer::RenderBuffers::create_buffer( Vulkan::Device &device, Vulkan::BufferDomain domain, VkDeviceSize size, Renderer::MappedBuffer *borrow) { Vulkan::BufferCreateInfo info = {}; info.domain = domain; if (domain == Vulkan::BufferDomain::Device || domain == Vulkan::BufferDomain::LinkedDeviceHostPreferDevice) { info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT; } else if (borrow && borrow->is_host) { return *borrow; } else { info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; } info.size = size; Renderer::MappedBuffer buffer; buffer.buffer = device.create_buffer(info); buffer.is_host = device.map_host_buffer(*buffer.buffer, 0) != nullptr; return buffer; } void Renderer::RenderBuffersUpdater::init(Vulkan::Device &device) { gpu.init(device, Vulkan::BufferDomain::LinkedDeviceHostPreferDevice, nullptr); cpu.init(device, Vulkan::BufferDomain::Host, &gpu); } bool Renderer::init_internal_upscaling_factor(const RendererOptions &options) { unsigned factor = options.upscaling_factor; if (!device || !rdram || !hidden_rdram) { LOGE("Renderer is not initialized.\n"); return false; } caps.upscaling = factor; caps.super_sample_readback = options.super_sampled_readback; caps.super_sample_readback_dither = options.super_sampled_readback_dither; if (factor == 1) { upscaling_multisampled_hidden_rdram.reset(); upscaling_reference_rdram.reset(); upscaling_multisampled_rdram.reset(); return true; } Vulkan::BufferCreateInfo info; info.domain = Vulkan::BufferDomain::Device; info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; info.misc = Vulkan::BUFFER_MISC_ZERO_INITIALIZE_BIT; info.size = rdram_size; upscaling_reference_rdram = device->create_buffer(info); device->set_name(*upscaling_reference_rdram, "reference-rdram"); info.size = rdram_size * factor * factor; // If we're super-sampling we'll need to carry forward a u8 writemask per unscaled pixel. // The resolve pass will conditionally write a resolved pixel to avoid potential race conditions. // We allocate 2 bits per pixel (color / depth write). // The SSAA resolve shader will convert this to a VRAM write mask if we also need to handle incoherent // RDRAM. if (caps.super_sample_readback) info.size += 2 * Limits::MaxWidth * Limits::MaxHeight / 8; upscaling_multisampled_rdram = device->create_buffer(info); device->set_name(*upscaling_multisampled_rdram, "multisampled-rdram"); info.size = hidden_rdram->get_create_info().size * factor * factor; upscaling_multisampled_hidden_rdram = device->create_buffer(info); device->set_name(*upscaling_multisampled_hidden_rdram, "multisampled-hidden-rdram"); { auto cmd = device->request_command_buffer(); cmd->fill_buffer(*upscaling_multisampled_hidden_rdram, 0x03030303); cmd->barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT); device->submit(cmd); } return true; } void Renderer::set_rdram(Vulkan::Buffer *buffer, uint8_t *host_rdram, size_t offset, size_t size, bool coherent) { rdram = buffer; rdram_offset = offset; rdram_size = size; is_host_coherent = coherent; device->set_name(*rdram, "rdram"); if (!is_host_coherent) { assert(rdram_offset == 0); incoherent.host_rdram = host_rdram; // If we're not host coherent (missing VK_EXT_external_memory_host), // we need to create a staging RDRAM buffer which is used for the real RDRAM uploads. // RDRAM may be uploaded in a masked way (if GPU has pending writes), or direct copy (if no pending writes are outstanding). Vulkan::BufferCreateInfo info = {}; info.size = size; info.domain = Vulkan::BufferDomain::Host; info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT; incoherent.staging_rdram = device->create_buffer(info); device->set_name(*incoherent.staging_rdram, "staging-rdram"); const auto div_round_up = [](size_t a, size_t b) -> size_t { return (a + b - 1) / b; }; if (!rdram->get_allocation().is_host_allocation()) { // If we cannot map RDRAM, we need a staging readback buffer. Vulkan::BufferCreateInfo readback_info = {}; readback_info.domain = Vulkan::BufferDomain::CachedCoherentHostPreferCached; readback_info.size = rdram_size * Limits::NumSyncStates; readback_info.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; incoherent.staging_readback = device->create_buffer(readback_info); device->set_name(*incoherent.staging_readback, "staging-readback"); incoherent.staging_readback_pages = div_round_up(readback_info.size, ImplementationConstants::IncoherentPageSize); } incoherent.page_to_direct_copy.clear(); incoherent.page_to_masked_copy.clear(); incoherent.page_to_pending_readback.clear(); auto packed_pages = div_round_up(size, ImplementationConstants::IncoherentPageSize * 32); incoherent.num_pages = div_round_up(size, ImplementationConstants::IncoherentPageSize); incoherent.page_to_direct_copy.resize(packed_pages); incoherent.page_to_masked_copy.resize(packed_pages); incoherent.page_to_pending_readback.resize(packed_pages); incoherent.pending_writes_for_page.reset(new std::atomic_uint32_t[incoherent.num_pages]); for (unsigned i = 0; i < incoherent.num_pages; i++) incoherent.pending_writes_for_page[i].store(0); } else { incoherent = {}; } } void Renderer::set_hidden_rdram(Vulkan::Buffer *buffer) { hidden_rdram = buffer; device->set_name(*hidden_rdram, "hidden-rdram"); } void Renderer::set_tmem(Vulkan::Buffer *buffer) { tmem = buffer; device->set_name(*tmem, "tmem"); } void Renderer::flush_and_signal() { flush_queues(); submit_to_queue(); assert(!stream.cmd); } void Renderer::set_color_framebuffer(uint32_t addr, uint32_t width, FBFormat fmt) { if (fb.addr != addr || fb.width != width || fb.fmt != fmt) flush_queues(); fb.addr = addr; fb.width = width; fb.fmt = fmt; } void Renderer::set_depth_framebuffer(uint32_t addr) { if (fb.depth_addr != addr) flush_queues(); fb.depth_addr = addr; } void Renderer::set_scissor_state(const ScissorState &state) { stream.scissor_state = state; } void Renderer::set_static_rasterization_state(const StaticRasterizationState &state) { stream.static_raster_state = state; } void Renderer::set_depth_blend_state(const DepthBlendState &state) { stream.depth_blend_state = state; } void Renderer::draw_flat_primitive(TriangleSetup &setup) { draw_shaded_primitive(setup, {}); } static int normalize_dzpix(int dz) { if (dz >= 0x8000) return 0x8000; else if (dz == 0) return 1; unsigned bit = 31 - leading_zeroes(dz); return 1 << (bit + 1); } static uint16_t dz_compress(int dz) { int val = 0; if (dz & 0xff00) val |= 8; if (dz & 0xf0f0) val |= 4; if (dz & 0xcccc) val |= 2; if (dz & 0xaaaa) val |= 1; return uint16_t(val); } static void encode_rgb(uint8_t *rgba, uint32_t color) { rgba[0] = uint8_t(color >> 24); rgba[1] = uint8_t(color >> 16); rgba[2] = uint8_t(color >> 8); } static void encode_alpha(uint8_t *rgba, uint32_t color) { rgba[3] = uint8_t(color); } void Renderer::build_combiner_constants(DerivedSetup &setup, unsigned cycle) const { auto &comb = stream.static_raster_state.combiner[cycle]; auto &output = setup.constants[cycle]; switch (comb.rgb.muladd) { case RGBMulAdd::Env: encode_rgb(output.muladd, constants.env_color); break; case RGBMulAdd::Primitive: encode_rgb(output.muladd, constants.primitive_color); break; default: break; } switch (comb.rgb.mulsub) { case RGBMulSub::Env: encode_rgb(output.mulsub, constants.env_color); break; case RGBMulSub::Primitive: encode_rgb(output.mulsub, constants.primitive_color); break; case RGBMulSub::ConvertK4: // Need to decode this specially since it's a 9-bit value. encode_rgb(output.mulsub, uint32_t(constants.convert[4]) << 8); break; case RGBMulSub::KeyCenter: output.mulsub[0] = constants.key_center[0]; output.mulsub[1] = constants.key_center[1]; output.mulsub[2] = constants.key_center[2]; break; default: break; } switch (comb.rgb.mul) { case RGBMul::Primitive: encode_rgb(output.mul, constants.primitive_color); break; case RGBMul::Env: encode_rgb(output.mul, constants.env_color); break; case RGBMul::PrimitiveAlpha: encode_rgb(output.mul, 0x01010101 * ((constants.primitive_color) & 0xff)); break; case RGBMul::EnvAlpha: encode_rgb(output.mul, 0x01010101 * ((constants.env_color) & 0xff)); break; case RGBMul::PrimLODFrac: encode_rgb(output.mul, 0x01010101 * constants.prim_lod_frac); break; case RGBMul::ConvertK5: // Need to decode this specially since it's a 9-bit value. encode_rgb(output.mul, uint32_t(constants.convert[5]) << 8); break; case RGBMul::KeyScale: output.mul[0] = constants.key_scale[0]; output.mul[1] = constants.key_scale[1]; output.mul[2] = constants.key_scale[2]; break; default: break; } switch (comb.rgb.add) { case RGBAdd::Primitive: encode_rgb(output.add, constants.primitive_color); break; case RGBAdd::Env: encode_rgb(output.add, constants.env_color); break; default: break; } switch (comb.alpha.muladd) { case AlphaAddSub::PrimitiveAlpha: encode_alpha(output.muladd, constants.primitive_color); break; case AlphaAddSub::EnvAlpha: encode_alpha(output.muladd, constants.env_color); break; default: break; } switch (comb.alpha.mulsub) { case AlphaAddSub::PrimitiveAlpha: encode_alpha(output.mulsub, constants.primitive_color); break; case AlphaAddSub::EnvAlpha: encode_alpha(output.mulsub, constants.env_color); break; default: break; } switch (comb.alpha.mul) { case AlphaMul::PrimitiveAlpha: encode_alpha(output.mul, constants.primitive_color); break; case AlphaMul::EnvAlpha: encode_alpha(output.mul, constants.env_color); break; case AlphaMul::PrimLODFrac: encode_alpha(output.mul, constants.prim_lod_frac); break; default: break; } switch (comb.alpha.add) { case AlphaAddSub::PrimitiveAlpha: encode_alpha(output.add, constants.primitive_color); break; case AlphaAddSub::EnvAlpha: encode_alpha(output.add, constants.env_color); break; default: break; } } DerivedSetup Renderer::build_derived_attributes(const AttributeSetup &attr) const { DerivedSetup setup = {}; if (constants.use_prim_depth) { setup.dz = constants.prim_dz; setup.dz_compressed = dz_compress(setup.dz); } else { int dzdx = attr.dzdx >> 16; int dzdy = attr.dzdy >> 16; int dzpix = (dzdx < 0 ? (~dzdx & 0x7fff) : dzdx) + (dzdy < 0 ? (~dzdy & 0x7fff) : dzdy); dzpix = normalize_dzpix(dzpix); setup.dz = dzpix; setup.dz_compressed = dz_compress(dzpix); } build_combiner_constants(setup, 0); build_combiner_constants(setup, 1); setup.fog_color[0] = uint8_t(constants.fog_color >> 24); setup.fog_color[1] = uint8_t(constants.fog_color >> 16); setup.fog_color[2] = uint8_t(constants.fog_color >> 8); setup.fog_color[3] = uint8_t(constants.fog_color >> 0); setup.blend_color[0] = uint8_t(constants.blend_color >> 24); setup.blend_color[1] = uint8_t(constants.blend_color >> 16); setup.blend_color[2] = uint8_t(constants.blend_color >> 8); setup.blend_color[3] = uint8_t(constants.blend_color >> 0); setup.fill_color = constants.fill_color; setup.min_lod = constants.min_level; for (unsigned i = 0; i < 4; i++) setup.convert_factors[i] = int16_t(constants.convert[i]); return setup; } static constexpr unsigned SUBPIXELS_Y = 4; static int32_t clamp_int32(int64_t v) { if (v < std::numeric_limits::min()) return std::numeric_limits::min(); else if (v > std::numeric_limits::max()) return std::numeric_limits::max(); else return int32_t(v); } static std::pair interpolate_x(const TriangleSetup &setup, int y, bool flip, int scaling) { // Interpolate in 64-bit so we are guaranteed to catch any overflow scenario. int64_t yh_interpolation_base = setup.yh & ~(SUBPIXELS_Y - 1); int64_t ym_interpolation_base = setup.ym; yh_interpolation_base *= scaling; ym_interpolation_base *= scaling; int64_t xh = scaling * setup.xh + int64_t(y - yh_interpolation_base) * setup.dxhdy; int64_t xm = scaling * setup.xm + int64_t(y - yh_interpolation_base) * setup.dxmdy; int64_t xl = scaling * setup.xl + int64_t(y - ym_interpolation_base) * setup.dxldy; if (y < scaling * setup.ym) xl = xm; int64_t xh_shifted = xh >> 15; int64_t xl_shifted = xl >> 15; int64_t xleft, xright; if (flip) { xleft = xh_shifted; xright = xl_shifted; } else { xleft = xl_shifted; xright = xh_shifted; } return { clamp_int32(xleft), clamp_int32(xright) }; } unsigned Renderer::compute_conservative_max_num_tiles(const TriangleSetup &setup) const { if (setup.yl <= setup.yh) return 0; int scaling = int(caps.upscaling); int start_y = setup.yh & ~(SUBPIXELS_Y - 1); int end_y = (setup.yl - 1) | (SUBPIXELS_Y - 1); start_y = std::max(int(stream.scissor_state.ylo), start_y); end_y = std::min(int(stream.scissor_state.yhi) - 1, end_y); start_y *= scaling; end_y *= scaling; // Y is clipped out, exit early. if (end_y < start_y) return 0; bool flip = (setup.flags & TRIANGLE_SETUP_FLIP_BIT) != 0; auto upper = interpolate_x(setup, start_y, flip, scaling); auto lower = interpolate_x(setup, end_y, flip, scaling); auto mid = upper; auto mid1 = upper; int ym = scaling * setup.ym; if (ym > start_y && ym < end_y) { mid = interpolate_x(setup, ym, flip, scaling); mid1 = interpolate_x(setup, ym - 1, flip, scaling); } // Robustness, check if we overflow the X rasterizer precision. // After shifting down, we should have 12 bits signed. // If we detect any overflow here we need to assume X range is scissor rect. // This really should never happen, but it's possible to write tests that intentionally trigger weird // overflow behavior that needs to be specially handled. // There might be freak scenarios where we cannot detect overflow since we're only sampling at 4 scanlines // and we have ~32 overflows happening at once, // So we need to interpolate in 64-bit to make this work. auto start_x = std::min(std::min(upper.first, lower.first), std::min(mid.first, mid1.first)); auto end_x = std::max(std::max(upper.second, lower.second), std::max(mid.second, mid1.second)); auto max_range_x = std::max(std::abs(start_x), std::abs(end_x)); // Effective X range is [-2048, 2047], but just make it [-2047, 2047] to match binning shader. // If we interpolate X to something outside that range, // we must assume the entire X range will be covered. if (max_range_x > 2047 * scaling) { start_x = 0; end_x = 0x7fffffff; } start_x = std::max(start_x, scaling * (int(stream.scissor_state.xlo) >> 2)); end_x = std::min(end_x, scaling * ((int(stream.scissor_state.xhi) + 3) >> 2) - 1); if (end_x < start_x) return 0; start_x /= ImplementationConstants::TileWidth; end_x /= ImplementationConstants::TileWidth; start_y /= (SUBPIXELS_Y * ImplementationConstants::TileHeight); end_y /= (SUBPIXELS_Y * ImplementationConstants::TileHeight); return (end_x - start_x + 1) * (end_y - start_y + 1); } static bool combiner_accesses_texel0(const CombinerInputs &inputs) { return inputs.rgb.muladd == RGBMulAdd::Texel0 || inputs.rgb.mulsub == RGBMulSub::Texel0 || inputs.rgb.mul == RGBMul::Texel0 || inputs.rgb.add == RGBAdd::Texel0 || inputs.rgb.mul == RGBMul::Texel0Alpha || inputs.alpha.muladd == AlphaAddSub::Texel0Alpha || inputs.alpha.mulsub == AlphaAddSub::Texel0Alpha || inputs.alpha.mul == AlphaMul::Texel0Alpha || inputs.alpha.add == AlphaAddSub::Texel0Alpha; } static bool combiner_accesses_lod_frac(const CombinerInputs &inputs) { return inputs.rgb.mul == RGBMul::LODFrac || inputs.alpha.mul == AlphaMul::LODFrac; } static bool combiner_accesses_texel1(const CombinerInputs &inputs) { return inputs.rgb.muladd == RGBMulAdd::Texel1 || inputs.rgb.mulsub == RGBMulSub::Texel1 || inputs.rgb.mul == RGBMul::Texel1 || inputs.rgb.add == RGBAdd::Texel1 || inputs.rgb.mul == RGBMul::Texel1Alpha || inputs.alpha.muladd == AlphaAddSub::Texel1Alpha || inputs.alpha.mulsub == AlphaAddSub::Texel1Alpha || inputs.alpha.mul == AlphaMul::Texel1Alpha || inputs.alpha.add == AlphaAddSub::Texel1Alpha; } static bool combiner_uses_texel0(const StaticRasterizationState &state) { // Texel0 can be safely used in cycle0 of CYCLE2 mode, or in cycle1 (only cycle) of CYCLE1 mode. if ((state.flags & RASTERIZATION_MULTI_CYCLE_BIT) != 0) { // In second cycle, Texel0 and Texel1 swap around ... return combiner_accesses_texel0(state.combiner[0]) || combiner_accesses_texel1(state.combiner[1]); } else return combiner_accesses_texel0(state.combiner[1]); } static bool combiner_uses_texel1(const StaticRasterizationState &state) { // Texel1 can be safely used in cycle0 of CYCLE2 mode, and never in cycle1 mode. // Texel0 can be safely accessed in cycle1, which is an alias due to pipelining. if ((state.flags & RASTERIZATION_MULTI_CYCLE_BIT) != 0) { return combiner_accesses_texel1(state.combiner[0]) || combiner_accesses_texel0(state.combiner[1]); } else return false; } static bool combiner_uses_pipelined_texel1(const StaticRasterizationState &state) { // If you access Texel1 in cycle1 mode, you end up reading the next pixel's color for whatever reason. if ((state.flags & RASTERIZATION_MULTI_CYCLE_BIT) == 0) return combiner_accesses_texel1(state.combiner[1]); else return false; } static bool combiner_uses_lod_frac(const StaticRasterizationState &state) { if ((state.flags & RASTERIZATION_MULTI_CYCLE_BIT) != 0) return combiner_accesses_lod_frac(state.combiner[0]) || combiner_accesses_lod_frac(state.combiner[1]); else return false; } void Renderer::deduce_noise_state() { auto &state = stream.static_raster_state; state.flags &= ~RASTERIZATION_NEED_NOISE_BIT; // Figure out if we need to seed noise variable for this primitive. if ((state.dither & 3) == 2 || ((state.dither >> 2) & 3) == 2) { state.flags |= RASTERIZATION_NEED_NOISE_BIT; return; } if ((state.flags & (RASTERIZATION_COPY_BIT | RASTERIZATION_FILL_BIT)) != 0) return; if ((state.flags & RASTERIZATION_MULTI_CYCLE_BIT) != 0) { if (state.combiner[0].rgb.muladd == RGBMulAdd::Noise) state.flags |= RASTERIZATION_NEED_NOISE_BIT; } else if (state.combiner[1].rgb.muladd == RGBMulAdd::Noise) state.flags |= RASTERIZATION_NEED_NOISE_BIT; if ((state.flags & (RASTERIZATION_ALPHA_TEST_BIT | RASTERIZATION_ALPHA_TEST_DITHER_BIT)) == (RASTERIZATION_ALPHA_TEST_BIT | RASTERIZATION_ALPHA_TEST_DITHER_BIT)) { state.flags |= RASTERIZATION_NEED_NOISE_BIT; } } static RGBMulAdd normalize_combiner(RGBMulAdd muladd) { switch (muladd) { case RGBMulAdd::Noise: case RGBMulAdd::Texel0: case RGBMulAdd::Texel1: case RGBMulAdd::Combined: case RGBMulAdd::One: case RGBMulAdd::Shade: return muladd; default: return RGBMulAdd::Zero; } } static RGBMulSub normalize_combiner(RGBMulSub mulsub) { switch (mulsub) { case RGBMulSub::Combined: case RGBMulSub::Texel0: case RGBMulSub::Texel1: case RGBMulSub::Shade: case RGBMulSub::ConvertK4: return mulsub; default: return RGBMulSub::Zero; } } static RGBMul normalize_combiner(RGBMul mul) { switch (mul) { case RGBMul::Combined: case RGBMul::CombinedAlpha: case RGBMul::Texel0: case RGBMul::Texel1: case RGBMul::Texel0Alpha: case RGBMul::Texel1Alpha: case RGBMul::Shade: case RGBMul::ShadeAlpha: case RGBMul::LODFrac: case RGBMul::ConvertK5: return mul; default: return RGBMul::Zero; } } static RGBAdd normalize_combiner(RGBAdd add) { switch (add) { case RGBAdd::Texel0: case RGBAdd::Texel1: case RGBAdd::Combined: case RGBAdd::One: case RGBAdd::Shade: return add; default: return RGBAdd::Zero; } } static AlphaAddSub normalize_combiner(AlphaAddSub addsub) { switch (addsub) { case AlphaAddSub::CombinedAlpha: case AlphaAddSub::Texel0Alpha: case AlphaAddSub::Texel1Alpha: case AlphaAddSub::ShadeAlpha: case AlphaAddSub::One: return addsub; default: return AlphaAddSub::Zero; } } static AlphaMul normalize_combiner(AlphaMul mul) { switch (mul) { case AlphaMul::LODFrac: case AlphaMul::Texel0Alpha: case AlphaMul::Texel1Alpha: case AlphaMul::ShadeAlpha: return mul; default: return AlphaMul::Zero; } } static void normalize_combiner(CombinerInputsRGB &comb) { comb.muladd = normalize_combiner(comb.muladd); comb.mulsub = normalize_combiner(comb.mulsub); comb.mul = normalize_combiner(comb.mul); comb.add = normalize_combiner(comb.add); } static void normalize_combiner(CombinerInputsAlpha &comb) { comb.muladd = normalize_combiner(comb.muladd); comb.mulsub = normalize_combiner(comb.mulsub); comb.mul = normalize_combiner(comb.mul); comb.add = normalize_combiner(comb.add); } static void normalize_combiner(CombinerInputs &comb) { normalize_combiner(comb.rgb); normalize_combiner(comb.alpha); } StaticRasterizationState Renderer::normalize_static_state(StaticRasterizationState state) { if ((state.flags & RASTERIZATION_FILL_BIT) != 0) { state = {}; state.flags = RASTERIZATION_FILL_BIT; return state; } if ((state.flags & RASTERIZATION_COPY_BIT) != 0) { auto flags = state.flags & (RASTERIZATION_COPY_BIT | RASTERIZATION_TLUT_BIT | RASTERIZATION_TLUT_TYPE_BIT | RASTERIZATION_USES_TEXEL0_BIT | RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT | RASTERIZATION_TEX_LOD_ENABLE_BIT | RASTERIZATION_DETAIL_LOD_ENABLE_BIT | RASTERIZATION_ALPHA_TEST_BIT); auto fmt = state.texture_fmt; auto siz = state.texture_size; state = {}; state.flags = flags; state.texture_fmt = fmt; state.texture_size = siz; return state; } if ((state.flags & (RASTERIZATION_MULTI_CYCLE_BIT | RASTERIZATION_USES_PIPELINED_TEXEL1_BIT)) == 0) state.flags &= ~(RASTERIZATION_BILERP_1_BIT | RASTERIZATION_CONVERT_ONE_BIT); normalize_combiner(state.combiner[0]); normalize_combiner(state.combiner[1]); return state; } void Renderer::deduce_static_texture_state(unsigned tile, unsigned max_lod_level) { auto &state = stream.static_raster_state; state.flags &= ~RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT; state.texture_size = 0; state.texture_fmt = 0; if ((state.flags & RASTERIZATION_FILL_BIT) != 0) return; auto fmt = tiles[tile].meta.fmt; auto siz = tiles[tile].meta.size; if ((state.flags & RASTERIZATION_COPY_BIT) == 0) { // If all tiles we sample have the same fmt and size (common case), we can use a static variant. bool uses_texel0 = combiner_uses_texel0(state); bool uses_texel1 = combiner_uses_texel1(state); bool uses_pipelined_texel1 = combiner_uses_pipelined_texel1(state); bool uses_lod_frac = combiner_uses_lod_frac(state); if (uses_texel1 && (state.flags & RASTERIZATION_CONVERT_ONE_BIT) != 0) uses_texel0 = true; state.flags &= ~(RASTERIZATION_USES_TEXEL0_BIT | RASTERIZATION_USES_TEXEL1_BIT | RASTERIZATION_USES_PIPELINED_TEXEL1_BIT | RASTERIZATION_USES_LOD_BIT); if (uses_texel0) state.flags |= RASTERIZATION_USES_TEXEL0_BIT; if (uses_texel1) state.flags |= RASTERIZATION_USES_TEXEL1_BIT; if (uses_pipelined_texel1) state.flags |= RASTERIZATION_USES_PIPELINED_TEXEL1_BIT; if (uses_lod_frac || (state.flags & RASTERIZATION_TEX_LOD_ENABLE_BIT) != 0) state.flags |= RASTERIZATION_USES_LOD_BIT; if (!uses_texel0 && !uses_texel1 && !uses_pipelined_texel1) return; bool use_lod = (state.flags & RASTERIZATION_TEX_LOD_ENABLE_BIT) != 0; bool use_detail = (state.flags & RASTERIZATION_DETAIL_LOD_ENABLE_BIT) != 0; bool uses_physical_texel1 = uses_texel1 && ((state.flags & RASTERIZATION_CONVERT_ONE_BIT) == 0 || (state.flags & RASTERIZATION_BILERP_1_BIT) != 0); if (!use_lod) max_lod_level = uses_physical_texel1 ? 1 : 0; if (use_detail) max_lod_level++; max_lod_level = std::min(max_lod_level, 7u); for (unsigned i = 1; i <= max_lod_level; i++) { auto &t = tiles[(tile + i) & 7].meta; if (t.fmt != fmt) return; if (t.size != siz) return; } } // We have a static format. state.flags |= RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT; state.texture_fmt = uint32_t(fmt); state.texture_size = uint32_t(siz); } void Renderer::fixup_triangle_setup(TriangleSetup &setup) const { // If YM is lower than the first sub-scanline we rasterize, we will never observe YM at all. // To account for this, fixup here so that YM is out of range. // No known content actually triggers this, but some public tests triggered it. int start_y = setup.yh & ~(SUBPIXELS_Y - 1); if (setup.ym < start_y) setup.ym = std::numeric_limits::max(); if ((stream.static_raster_state.flags & RASTERIZATION_INTERLACE_FIELD_BIT) != 0) { setup.flags |= (stream.static_raster_state.flags & RASTERIZATION_INTERLACE_FIELD_BIT) ? TRIANGLE_SETUP_INTERLACE_FIELD_BIT : 0; setup.flags |= (stream.static_raster_state.flags & RASTERIZATION_INTERLACE_KEEP_ODD_BIT) ? TRIANGLE_SETUP_INTERLACE_KEEP_ODD_BIT : 0; } } void Renderer::draw_shaded_primitive(TriangleSetup &setup, const AttributeSetup &attr) { fixup_triangle_setup(setup); unsigned num_tiles = compute_conservative_max_num_tiles(setup); #if 0 // Don't exit early, throws off seeding of noise channels. if (!num_tiles) return; #endif if (!caps.ubershader) stream.max_shaded_tiles += num_tiles; update_deduced_height(setup); stream.span_info_offsets.add(allocate_span_jobs(setup)); stream.triangle_setup.add(setup); if (constants.use_prim_depth) { auto tmp_attr = attr; tmp_attr.z = constants.prim_depth; tmp_attr.dzdx = 0; tmp_attr.dzde = 0; tmp_attr.dzdy = 0; stream.attribute_setup.add(tmp_attr); } else { stream.attribute_setup.add(attr); } stream.derived_setup.add(build_derived_attributes(attr)); stream.scissor_setup.add(stream.scissor_state); deduce_static_texture_state(setup.tile & 7, setup.tile >> 3); deduce_noise_state(); InstanceIndices indices = {}; indices.static_index = stream.static_raster_state_cache.add(normalize_static_state(stream.static_raster_state)); indices.depth_blend_index = stream.depth_blend_state_cache.add(stream.depth_blend_state); indices.tile_instance_index = uint8_t(stream.tmem_upload_infos.size()); for (unsigned i = 0; i < 8; i++) indices.tile_indices[i] = stream.tile_info_state_cache.add(tiles[i]); stream.state_indices.add(indices); fb.color_write_pending = true; if (stream.depth_blend_state.flags & DEPTH_BLEND_DEPTH_UPDATE_BIT) fb.depth_write_pending = true; pending_primitives++; if (need_flush()) flush_queues(); } SpanInfoOffsets Renderer::allocate_span_jobs(const TriangleSetup &setup) { int min_active_sub_scanline = std::max(int(setup.yh), int(stream.scissor_state.ylo)); int min_active_line = min_active_sub_scanline >> 2; int max_active_sub_scanline = std::min(setup.yl - 1, int(stream.scissor_state.yhi) - 1); int max_active_line = max_active_sub_scanline >> 2; if (max_active_line < min_active_line) return { 0, 0, -1, 0 }; // Need to poke into next scanline validation for certain workarounds. int height = std::max(max_active_line - min_active_line + 2, 0); height = std::min(height, 1024); int num_jobs = (height + ImplementationConstants::DefaultWorkgroupSize - 1) / ImplementationConstants::DefaultWorkgroupSize; SpanInfoOffsets offsets = {}; offsets.offset = uint32_t(stream.span_info_jobs.size()) * ImplementationConstants::DefaultWorkgroupSize; offsets.ylo = min_active_line; offsets.yhi = max_active_line; for (int i = 0; i < num_jobs; i++) { SpanInterpolationJob interpolation_job = {}; interpolation_job.primitive_index = uint32_t(stream.triangle_setup.size()); interpolation_job.base_y = min_active_line + ImplementationConstants::DefaultWorkgroupSize * i; interpolation_job.max_y = max_active_line + 1; stream.span_info_jobs.add(interpolation_job); } return offsets; } void Renderer::update_deduced_height(const TriangleSetup &setup) { int max_active_sub_scanline = std::min(setup.yl - 1, int(stream.scissor_state.yhi) - 1); int max_active_line = max_active_sub_scanline >> 2; int height = std::max(max_active_line + 1, 0); fb.deduced_height = std::max(fb.deduced_height, uint32_t(height)); } bool Renderer::need_flush() const { bool cache_full = stream.static_raster_state_cache.full() || stream.depth_blend_state_cache.full() || (stream.tile_info_state_cache.size() + 8 > Limits::MaxTileInfoStates); bool triangle_full = stream.triangle_setup.full(); bool span_info_full = (stream.span_info_jobs.size() * ImplementationConstants::DefaultWorkgroupSize + Limits::MaxHeight > Limits::MaxSpanSetups); bool max_shaded_tiles = (stream.max_shaded_tiles + caps.max_tiles_x * caps.max_tiles_y > caps.max_num_tile_instances); #ifdef VULKAN_DEBUG if (cache_full) LOGI("Cache is full.\n"); if (triangle_full) LOGI("Triangle is full.\n"); if (span_info_full) LOGI("Span info is full.\n"); if (max_shaded_tiles) LOGI("Shaded tiles is full.\n"); #endif return cache_full || triangle_full || span_info_full || max_shaded_tiles; } template void Renderer::RenderBuffersUpdater::upload(Vulkan::CommandBuffer &cmd, Vulkan::Device &device, const MappedBuffer &gpu, const MappedBuffer &cpu, const Cache &cache, bool &did_upload) { if (!cache.empty()) { memcpy(device.map_host_buffer(*cpu.buffer, Vulkan::MEMORY_ACCESS_WRITE_BIT), cache.data(), cache.byte_size()); device.unmap_host_buffer(*cpu.buffer, Vulkan::MEMORY_ACCESS_WRITE_BIT); if (gpu.buffer != cpu.buffer) { cmd.copy_buffer(*gpu.buffer, 0, *cpu.buffer, 0, cache.byte_size()); did_upload = true; } } } void Renderer::RenderBuffersUpdater::upload(Vulkan::Device &device, const Renderer::StreamCaches &caches, Vulkan::CommandBuffer &cmd) { bool did_upload = false; upload(cmd, device, gpu.triangle_setup, cpu.triangle_setup, caches.triangle_setup, did_upload); upload(cmd, device, gpu.attribute_setup, cpu.attribute_setup, caches.attribute_setup, did_upload); upload(cmd, device, gpu.derived_setup, cpu.derived_setup, caches.derived_setup, did_upload); upload(cmd, device, gpu.scissor_setup, cpu.scissor_setup, caches.scissor_setup, did_upload); upload(cmd, device, gpu.static_raster_state, cpu.static_raster_state, caches.static_raster_state_cache, did_upload); upload(cmd, device, gpu.depth_blend_state, cpu.depth_blend_state, caches.depth_blend_state_cache, did_upload); upload(cmd, device, gpu.tile_info_state, cpu.tile_info_state, caches.tile_info_state_cache, did_upload); upload(cmd, device, gpu.state_indices, cpu.state_indices, caches.state_indices, did_upload); upload(cmd, device, gpu.span_info_offsets, cpu.span_info_offsets, caches.span_info_offsets, did_upload); upload(cmd, device, gpu.span_info_jobs, cpu.span_info_jobs, caches.span_info_jobs, did_upload); if (did_upload) { cmd.barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } } void Renderer::update_tmem_instances(Vulkan::CommandBuffer &cmd) { cmd.begin_region("tmem-update"); cmd.set_storage_buffer(0, 0, *rdram, rdram_offset, rdram_size); cmd.set_storage_buffer(0, 1, *tmem); cmd.set_storage_buffer(0, 2, *tmem_instances); memcpy(cmd.allocate_typed_constant_data(1, 0, stream.tmem_upload_infos.size()), stream.tmem_upload_infos.data(), stream.tmem_upload_infos.size() * sizeof(UploadInfo)); auto count = uint32_t(stream.tmem_upload_infos.size()); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://tmem_update.comp", {{ "DEBUG_ENABLE", debug_channel ? 1 : 0 }}); #else cmd.set_program(shader_bank->tmem_update); #endif cmd.push_constants(&count, 0, sizeof(count)); cmd.set_specialization_constant_mask(1); cmd.set_specialization_constant(0, ImplementationConstants::DefaultWorkgroupSize); Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp >= 2) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); cmd.dispatch(2048 / ImplementationConstants::DefaultWorkgroupSize, 1, 1); if (caps.timestamp >= 2) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(start_ts), std::move(end_ts), "tmem-update", std::to_string(stream.tmem_upload_infos.size())); } cmd.end_region(); } void Renderer::submit_span_setup_jobs(Vulkan::CommandBuffer &cmd, bool upscale) { cmd.begin_region("span-setup"); auto &instance = buffer_instances[buffer_instance]; cmd.set_storage_buffer(0, 0, *instance.gpu.triangle_setup.buffer); cmd.set_storage_buffer(0, 1, *instance.gpu.attribute_setup.buffer); cmd.set_storage_buffer(0, 2, *instance.gpu.scissor_setup.buffer); cmd.set_storage_buffer(0, 3, *span_setups); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://span_setup.comp", {{ "DEBUG_ENABLE", debug_channel ? 1 : 0 }}); #else cmd.set_program(shader_bank->span_setup); #endif cmd.set_buffer_view(1, 0, *instance.gpu.span_info_jobs_view); cmd.set_specialization_constant_mask(3); cmd.set_specialization_constant(0, (upscale ? caps.upscaling : 1) * ImplementationConstants::DefaultWorkgroupSize); cmd.set_specialization_constant(1, upscale ? trailing_zeroes(caps.upscaling) : 0u); Vulkan::QueryPoolHandle begin_ts, end_ts; if (caps.timestamp >= 2) begin_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); cmd.dispatch(stream.span_info_jobs.size(), 1, 1); if (caps.timestamp >= 2) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(begin_ts), std::move(end_ts), "span-info-jobs"); } cmd.end_region(); } void Renderer::clear_indirect_buffer(Vulkan::CommandBuffer &cmd) { cmd.begin_region("clear-indirect-buffer"); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://clear_indirect_buffer.comp"); #else cmd.set_program(shader_bank->clear_indirect_buffer); #endif cmd.set_storage_buffer(0, 0, *indirect_dispatch_buffer); static_assert((Limits::MaxStaticRasterizationStates % ImplementationConstants::DefaultWorkgroupSize) == 0, "MaxStaticRasterizationStates does not align."); cmd.set_specialization_constant_mask(1); cmd.set_specialization_constant(0, ImplementationConstants::DefaultWorkgroupSize); cmd.dispatch(Limits::MaxStaticRasterizationStates / ImplementationConstants::DefaultWorkgroupSize, 1, 1); cmd.end_region(); } void Renderer::submit_rasterization(Vulkan::CommandBuffer &cmd, Vulkan::Buffer &tmem, bool upscaling) { cmd.begin_region("rasterization"); auto &instance = buffer_instances[buffer_instance]; cmd.set_storage_buffer(0, 0, *instance.gpu.triangle_setup.buffer); cmd.set_storage_buffer(0, 1, *instance.gpu.attribute_setup.buffer); cmd.set_storage_buffer(0, 2, *instance.gpu.derived_setup.buffer); cmd.set_storage_buffer(0, 3, *instance.gpu.static_raster_state.buffer); cmd.set_storage_buffer(0, 4, *instance.gpu.state_indices.buffer); cmd.set_storage_buffer(0, 5, *instance.gpu.span_info_offsets.buffer); cmd.set_storage_buffer(0, 6, *span_setups); cmd.set_storage_buffer(0, 7, tmem); cmd.set_storage_buffer(0, 8, *instance.gpu.tile_info_state.buffer); cmd.set_storage_buffer(0, 9, *per_tile_shaded_color); cmd.set_storage_buffer(0, 10, *per_tile_shaded_depth); cmd.set_storage_buffer(0, 11, *per_tile_shaded_shaded_alpha); cmd.set_storage_buffer(0, 12, *per_tile_shaded_coverage); auto *global_fb_info = cmd.allocate_typed_constant_data(2, 0, 1); switch (fb.fmt) { case FBFormat::I4: global_fb_info->fb_size = 0; global_fb_info->dx_mask = 0; global_fb_info->dx_shift = 0; break; case FBFormat::I8: global_fb_info->fb_size = 1; global_fb_info->dx_mask = ~7u; global_fb_info->dx_shift = 3; break; case FBFormat::RGBA5551: case FBFormat::IA88: global_fb_info->fb_size = 2; global_fb_info->dx_mask = ~3u; global_fb_info->dx_shift = 2; break; case FBFormat::RGBA8888: global_fb_info->fb_size = 4; global_fb_info->dx_shift = ~1u; global_fb_info->dx_shift = 1; break; } global_fb_info->base_primitive_index = base_primitive_index; #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://rasterizer.comp", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "SMALL_TYPES", caps.supports_small_integer_arithmetic ? 1 : 0 }, }); #else cmd.set_program(shader_bank->rasterizer); #endif cmd.set_specialization_constant(0, ImplementationConstants::TileWidth); cmd.set_specialization_constant(1, ImplementationConstants::TileHeight); Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp >= 2) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); uint32_t scale_log2_bit = (upscaling ? trailing_zeroes(caps.upscaling) : 0u) << RASTERIZATION_UPSCALING_LOG2_BIT_OFFSET; for (size_t i = 0; i < stream.static_raster_state_cache.size(); i++) { cmd.set_storage_buffer(1, 0, *tile_work_list, i * sizeof(TileRasterWork) * caps.max_num_tile_instances, sizeof(TileRasterWork) * caps.max_num_tile_instances); auto &state = stream.static_raster_state_cache.data()[i]; cmd.set_specialization_constant(2, state.flags | RASTERIZATION_USE_SPECIALIZATION_CONSTANT_BIT | scale_log2_bit); cmd.set_specialization_constant(3, state.combiner[0].rgb); cmd.set_specialization_constant(4, state.combiner[0].alpha); cmd.set_specialization_constant(5, state.combiner[1].rgb); cmd.set_specialization_constant(6, state.combiner[1].alpha); cmd.set_specialization_constant(7, state.dither | (state.texture_size << 8u) | (state.texture_fmt << 16u)); cmd.set_specialization_constant_mask(0xff); if (!caps.force_sync && !cmd.flush_pipeline_state_without_blocking()) { Vulkan::DeferredPipelineCompile compile; cmd.extract_pipeline_state(compile); if (pending_async_pipelines.count(compile.hash) == 0) { pending_async_pipelines.insert(compile.hash); pipeline_worker->push(std::move(compile)); } cmd.set_specialization_constant_mask(7); cmd.set_specialization_constant(2, scale_log2_bit); } cmd.dispatch_indirect(*indirect_dispatch_buffer, 4 * sizeof(uint32_t) * i); } if (caps.timestamp >= 2) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(start_ts), std::move(end_ts), "shading"); } cmd.end_region(); } void Renderer::submit_tile_binning_combined(Vulkan::CommandBuffer &cmd, bool upscale) { cmd.begin_region("tile-binning-combined"); auto &instance = buffer_instances[buffer_instance]; cmd.set_storage_buffer(0, 0, *instance.gpu.triangle_setup.buffer); cmd.set_storage_buffer(0, 1, *instance.gpu.scissor_setup.buffer); cmd.set_storage_buffer(0, 2, *instance.gpu.state_indices.buffer); cmd.set_storage_buffer(0, 3, *tile_binning_buffer); cmd.set_storage_buffer(0, 4, *tile_binning_buffer_coarse); if (!caps.ubershader) { cmd.set_storage_buffer(0, 5, *per_tile_offsets); cmd.set_storage_buffer(0, 6, *indirect_dispatch_buffer); cmd.set_storage_buffer(0, 7, *tile_work_list); } cmd.set_specialization_constant_mask(0x7f); cmd.set_specialization_constant(1, ImplementationConstants::TileWidth); cmd.set_specialization_constant(2, ImplementationConstants::TileHeight); cmd.set_specialization_constant(3, Limits::MaxPrimitives); cmd.set_specialization_constant(4, upscale ? caps.max_width : Limits::MaxWidth); cmd.set_specialization_constant(5, caps.max_num_tile_instances); cmd.set_specialization_constant(6, upscale ? caps.upscaling : 1u); struct PushData { uint32_t width, height; uint32_t num_primitives; } push = {}; push.width = fb.width; push.height = fb.deduced_height; if (upscale) { push.width *= caps.upscaling; push.height *= caps.upscaling; } push.num_primitives = uint32_t(stream.triangle_setup.size()); unsigned num_primitives_32 = (push.num_primitives + 31) / 32; cmd.push_constants(&push, 0, sizeof(push)); auto &features = device->get_device_features(); uint32_t subgroup_size = features.subgroup_properties.subgroupSize; Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp >= 2) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); if (caps.subgroup_tile_binning) { #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://tile_binning_combined.comp", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "SUBGROUP", 1 }, { "UBERSHADER", int(caps.ubershader) }, { "SMALL_TYPES", caps.supports_small_integer_arithmetic ? 1 : 0 }, }); #else cmd.set_program(shader_bank->tile_binning_combined); #endif if (supports_subgroup_size_control(32, subgroup_size)) { cmd.enable_subgroup_size_control(true); cmd.set_subgroup_size_log2(true, 5, trailing_zeroes(subgroup_size)); } } else { #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://tile_binning_combined.comp", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "SUBGROUP", 0 }, { "UBERSHADER", int(caps.ubershader) }, { "SMALL_TYPES", caps.supports_small_integer_arithmetic ? 1 : 0 }, }); #else cmd.set_program(shader_bank->tile_binning_combined); #endif subgroup_size = 32; } cmd.set_specialization_constant(0, subgroup_size); unsigned meta_tiles_x = 8; unsigned meta_tiles_y = subgroup_size / meta_tiles_x; unsigned num_tiles_x = (push.width + ImplementationConstants::TileWidth - 1) / ImplementationConstants::TileWidth; unsigned num_tiles_y = (push.height + ImplementationConstants::TileHeight - 1) / ImplementationConstants::TileHeight; unsigned num_meta_tiles_x = (num_tiles_x + meta_tiles_x - 1) / meta_tiles_x; unsigned num_meta_tiles_y = (num_tiles_y + meta_tiles_y - 1) / meta_tiles_y; cmd.dispatch(num_primitives_32, num_meta_tiles_x, num_meta_tiles_y); if (caps.timestamp >= 2) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(start_ts), std::move(end_ts), "tile-binning"); } cmd.enable_subgroup_size_control(false); cmd.end_region(); } void Renderer::submit_update_upscaled_domain_external(Vulkan::CommandBuffer &cmd, unsigned addr, unsigned length, unsigned pixel_size_log2) { submit_update_upscaled_domain(cmd, ResolveStage::Pre, addr, addr, length, 1, pixel_size_log2); } void Renderer::submit_update_upscaled_domain(Vulkan::CommandBuffer &cmd, ResolveStage stage, unsigned addr, unsigned depth_addr, unsigned width, unsigned height, unsigned pixel_size_log2) { #ifdef PARALLEL_RDP_SHADER_DIR if (stage == ResolveStage::Pre) cmd.set_program("rdp://update_upscaled_domain_pre.comp"); else if (stage == ResolveStage::Post) cmd.set_program("rdp://update_upscaled_domain_post.comp"); else cmd.set_program("rdp://update_upscaled_domain_resolve.comp"); #else if (stage == ResolveStage::Pre) cmd.set_program(shader_bank->update_upscaled_domain_pre); else if (stage == ResolveStage::Post) cmd.set_program(shader_bank->update_upscaled_domain_post); else cmd.set_program(shader_bank->update_upscaled_domain_resolve); #endif unsigned num_pixels = width * height; if (stage != ResolveStage::SSAAResolve) { // Ensure that we always process entire words, thus we avoid having to do weird swizzles, // and memory access patterns are linear with gl_GlobalInvocationID.x. addr &= ~3u; depth_addr &= ~3u; unsigned align_pixels = 4u >> pixel_size_log2; num_pixels = (num_pixels + align_pixels - 1u) & ~(align_pixels - 1u); } cmd.set_storage_buffer(0, 0, *rdram, rdram_offset, (stage == ResolveStage::SSAAResolve && !is_host_coherent ? 2 : 1) * rdram_size); cmd.set_storage_buffer(0, 1, *hidden_rdram); cmd.set_storage_buffer(0, 2, *upscaling_reference_rdram); cmd.set_storage_buffer(0, 3, *upscaling_multisampled_rdram); cmd.set_storage_buffer(0, 4, *upscaling_multisampled_hidden_rdram); cmd.set_specialization_constant_mask(0x7f); cmd.set_specialization_constant(0, uint32_t(rdram_size)); cmd.set_specialization_constant(1, pixel_size_log2); cmd.set_specialization_constant(2, int(addr == depth_addr)); cmd.set_specialization_constant(3, ImplementationConstants::DefaultWorkgroupSize); cmd.set_specialization_constant(4, caps.upscaling * caps.upscaling); if (stage == ResolveStage::SSAAResolve) { cmd.set_specialization_constant(5, uint32_t(caps.super_sample_readback_dither)); cmd.set_specialization_constant(6, uint32_t(!is_host_coherent)); } uint32_t num_workgroups_x, num_workgroups_y; if (stage == ResolveStage::SSAAResolve) { num_workgroups_x = (width + ImplementationConstants::DefaultWorkgroupSize - 1) / ImplementationConstants::DefaultWorkgroupSize; num_workgroups_y = height; } else { num_workgroups_x = (num_pixels + ImplementationConstants::DefaultWorkgroupSize - 1) / ImplementationConstants::DefaultWorkgroupSize; num_workgroups_y = 1; } struct Push { uint32_t pixels; uint32_t fb_addr, fb_depth_addr; uint32_t width, height; } push = {}; push.pixels = num_pixels; push.fb_addr = addr >> pixel_size_log2; push.fb_depth_addr = depth_addr >> 1; push.width = width; push.height = height; cmd.push_constants(&push, 0, sizeof(push)); Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp >= 2 && stage == ResolveStage::SSAAResolve) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); cmd.dispatch(num_workgroups_x, num_workgroups_y, 1); if (caps.timestamp >= 2 && stage == ResolveStage::SSAAResolve) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(start_ts), std::move(end_ts), "ssaa-resolve"); } } void Renderer::submit_clear_super_sample_write_mask(Vulkan::CommandBuffer &cmd, unsigned width, unsigned height) { // Pack 4x4 block of pixel's writemasks in one u32. Allows for one depth_blend workgroup to target a single u32 // in all cases, which is nice :) unsigned blocks_x = (width + 3) / 4; unsigned blocks_y = (height + 3) / 4; unsigned num_words = blocks_x * blocks_y; unsigned num_workgroups = (num_words + ImplementationConstants::DefaultWorkgroupSize - 1) / ImplementationConstants::DefaultWorkgroupSize; #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://clear_super_sampled_write_mask.comp"); #else cmd.set_program(shader_bank->clear_super_sampled_write_mask); #endif cmd.set_storage_buffer(0, 0, *upscaling_multisampled_rdram, rdram_size * caps.upscaling * caps.upscaling, 2 * Limits::MaxWidth * Limits::MaxHeight / 8); cmd.set_specialization_constant_mask(1); cmd.set_specialization_constant(0, ImplementationConstants::DefaultWorkgroupSize); cmd.dispatch(num_workgroups, 1, 1); cmd.set_specialization_constant_mask(0); } void Renderer::submit_update_upscaled_domain(Vulkan::CommandBuffer &cmd, ResolveStage stage) { unsigned pixel_size_log2; switch (fb.fmt) { case FBFormat::RGBA8888: pixel_size_log2 = 2; break; case FBFormat::RGBA5551: case FBFormat::IA88: pixel_size_log2 = 1; break; default: pixel_size_log2 = 0; break; } submit_update_upscaled_domain(cmd, stage, fb.addr, fb.depth_addr, fb.width, fb.deduced_height, pixel_size_log2); } void Renderer::submit_depth_blend(Vulkan::CommandBuffer &cmd, Vulkan::Buffer &tmem, bool upscaled, bool force_write_mask) { cmd.begin_region("render-pass"); auto &instance = buffer_instances[buffer_instance]; cmd.set_specialization_constant_mask(0xff); cmd.set_specialization_constant(0, uint32_t(rdram_size)); cmd.set_specialization_constant(1, uint32_t(fb.fmt)); cmd.set_specialization_constant(2, int(fb.addr == fb.depth_addr)); cmd.set_specialization_constant(3, ImplementationConstants::TileWidth); cmd.set_specialization_constant(4, ImplementationConstants::TileHeight); cmd.set_specialization_constant(5, Limits::MaxPrimitives); cmd.set_specialization_constant(6, upscaled ? caps.max_width : Limits::MaxWidth); cmd.set_specialization_constant(7, uint32_t(force_write_mask || (!is_host_coherent && !upscaled)) | ((upscaled ? trailing_zeroes(caps.upscaling) : 0u) << 1u)); if (upscaled) cmd.set_storage_buffer(0, 0, *upscaling_multisampled_rdram); else cmd.set_storage_buffer(0, 0, *rdram, rdram_offset, rdram_size * (is_host_coherent ? 1 : 2)); cmd.set_storage_buffer(0, 1, upscaled ? *upscaling_multisampled_hidden_rdram : *hidden_rdram); cmd.set_storage_buffer(0, 2, tmem); if (!caps.ubershader) { cmd.set_storage_buffer(0, 3, *per_tile_shaded_color); cmd.set_storage_buffer(0, 4, *per_tile_shaded_depth); cmd.set_storage_buffer(0, 5, *per_tile_shaded_shaded_alpha); cmd.set_storage_buffer(0, 6, *per_tile_shaded_coverage); cmd.set_storage_buffer(0, 7, *per_tile_offsets); } cmd.set_storage_buffer(1, 0, *instance.gpu.triangle_setup.buffer); cmd.set_storage_buffer(1, 1, *instance.gpu.attribute_setup.buffer); cmd.set_storage_buffer(1, 2, *instance.gpu.derived_setup.buffer); cmd.set_storage_buffer(1, 3, *instance.gpu.scissor_setup.buffer); cmd.set_storage_buffer(1, 4, *instance.gpu.static_raster_state.buffer); cmd.set_storage_buffer(1, 5, *instance.gpu.depth_blend_state.buffer); cmd.set_storage_buffer(1, 6, *instance.gpu.state_indices.buffer); cmd.set_storage_buffer(1, 7, *instance.gpu.tile_info_state.buffer); cmd.set_storage_buffer(1, 8, *span_setups); cmd.set_storage_buffer(1, 9, *instance.gpu.span_info_offsets.buffer); cmd.set_buffer_view(1, 10, *blender_divider_buffer); cmd.set_storage_buffer(1, 11, *tile_binning_buffer); cmd.set_storage_buffer(1, 12, *tile_binning_buffer_coarse); auto *global_fb_info = cmd.allocate_typed_constant_data(2, 0, 1); GlobalState push = {}; push.fb_width = fb.width; push.fb_height = fb.deduced_height; if (upscaled) { push.fb_width *= caps.upscaling; push.fb_height *= caps.upscaling; } switch (fb.fmt) { case FBFormat::I4: push.addr_index = fb.addr; global_fb_info->fb_size = 0; global_fb_info->dx_mask = 0; global_fb_info->dx_shift = 0; break; case FBFormat::I8: push.addr_index = fb.addr; global_fb_info->fb_size = 1; global_fb_info->dx_mask = ~7u; global_fb_info->dx_shift = 3; break; case FBFormat::RGBA5551: case FBFormat::IA88: push.addr_index = fb.addr >> 1u; global_fb_info->fb_size = 2; global_fb_info->dx_mask = ~3u; global_fb_info->dx_shift = 2; break; case FBFormat::RGBA8888: push.addr_index = fb.addr >> 2u; global_fb_info->fb_size = 4; global_fb_info->dx_mask = ~1u; global_fb_info->dx_shift = 1; break; } global_fb_info->base_primitive_index = base_primitive_index; push.depth_addr_index = fb.depth_addr >> 1; unsigned num_primitives_32 = (stream.triangle_setup.size() + 31) / 32; push.group_mask = (1u << num_primitives_32) - 1; cmd.push_constants(&push, 0, sizeof(push)); if (caps.ubershader) { #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://ubershader.comp", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "SMALL_TYPES", caps.supports_small_integer_arithmetic ? 1 : 0 }, { "SUBGROUP", caps.subgroup_depth_blend ? 1 : 0 }, }); #else cmd.set_program(shader_bank->ubershader); #endif } else { #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://depth_blend.comp", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "SMALL_TYPES", caps.supports_small_integer_arithmetic ? 1 : 0 }, { "SUBGROUP", caps.subgroup_depth_blend ? 1 : 0 }, }); #else cmd.set_program(shader_bank->depth_blend); #endif } Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp >= 2) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); cmd.dispatch((push.fb_width + 7) / 8, (push.fb_height + 7) / 8, 1); if (caps.timestamp >= 2) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(start_ts), std::move(end_ts), "depth-blending"); } cmd.end_region(); } void Renderer::submit_render_pass(Vulkan::CommandBuffer &cmd) { bool need_render_pass = fb.width != 0 && fb.deduced_height != 0 && !stream.span_info_jobs.empty(); bool need_tmem_upload = !stream.tmem_upload_infos.empty(); bool need_submit = need_render_pass || need_tmem_upload; if (!need_submit) return; Vulkan::QueryPoolHandle render_pass_start, render_pass_end; if (caps.timestamp >= 1) render_pass_start = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); if (debug_channel) cmd.begin_debug_channel(this, "Debug", 16 * 1024 * 1024); // Here we run 3 dispatches in parallel. Span setup and TMEM instances are low occupancy kind of jobs, but the binning // pass should dominate here unless the workload is trivial. if (need_render_pass) { submit_span_setup_jobs(cmd, false); submit_tile_binning_combined(cmd, false); if (caps.upscaling > 1) submit_update_upscaled_domain(cmd, ResolveStage::Pre); } if (need_tmem_upload) update_tmem_instances(cmd); cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | (!caps.ubershader ? VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT : 0), VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | (!caps.ubershader ? VK_ACCESS_INDIRECT_COMMAND_READ_BIT : 0)); if (need_render_pass && !caps.ubershader) { submit_rasterization(cmd, need_tmem_upload ? *tmem_instances : *tmem, false); cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } if (need_render_pass) submit_depth_blend(cmd, need_tmem_upload ? *tmem_instances : *tmem, false, false); if (!caps.ubershader) clear_indirect_buffer(cmd); if (render_pass_is_upscaled()) { cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); // TODO: Could probably do this reference update in the render pass itself, // just write output to two buffers ... This is more composable for now. submit_update_upscaled_domain(cmd, ResolveStage::Post); } if (caps.timestamp >= 1) { render_pass_end = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); std::string tag; tag = "(" + std::to_string(fb.width) + " x " + std::to_string(fb.deduced_height) + ")"; tag += " (" + std::to_string(stream.triangle_setup.size()) + " triangles)"; device->register_time_interval("RDP GPU", std::move(render_pass_start), std::move(render_pass_end), "render-pass", std::move(tag)); } } void Renderer::submit_render_pass_upscaled(Vulkan::CommandBuffer &cmd) { cmd.begin_region("render-pass-upscaled"); Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp >= 1) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); bool need_tmem_upload = !stream.tmem_upload_infos.empty(); submit_span_setup_jobs(cmd, true); submit_tile_binning_combined(cmd, true); if (caps.super_sample_readback) { submit_update_upscaled_domain(cmd, ResolveStage::Pre); submit_clear_super_sample_write_mask(cmd, fb.width, fb.deduced_height); if (need_tmem_upload) update_tmem_instances(cmd); } cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | (!caps.ubershader ? VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT : 0), VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | (!caps.ubershader ? VK_ACCESS_INDIRECT_COMMAND_READ_BIT : 0)); if (!caps.ubershader) { submit_rasterization(cmd, need_tmem_upload ? *tmem_instances : *tmem, true); cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } submit_depth_blend(cmd, need_tmem_upload ? *tmem_instances : *tmem, true, caps.super_sample_readback); if (!caps.ubershader) clear_indirect_buffer(cmd); if (caps.super_sample_readback) { cmd.begin_region("ssaa-resolve"); cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); submit_update_upscaled_domain(cmd, ResolveStage::SSAAResolve); cmd.end_region(); } if (caps.timestamp >= 1) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("RDP GPU", std::move(start_ts), std::move(end_ts), "render-pass-upscaled"); } cmd.end_region(); } void Renderer::submit_render_pass_end(Vulkan::CommandBuffer &cmd) { base_primitive_index += uint32_t(stream.triangle_setup.size()); cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); } void Renderer::maintain_queues() { // Some conditions dictate if we should flush a render pass. // These heuristics ensures we don't wait too long to flush render passes, // and also ensure that we don't spam submissions too often, causing massive bubbles on GPU. // If we get a lot of small render passes in a row, it makes sense to batch them up, e.g. 8 at a time. // If we get 2 full render passes of ~256 primitives, that's also a good indication we should flush since we're getting spammed. // If we have no pending submissions, the GPU is idle and there is no reason not to submit. // If we haven't submitted anything in a while (1.0 ms), it's probably fine to submit again. if (pending_render_passes >= ImplementationConstants::MaxPendingRenderPassesBeforeFlush || (caps.super_sample_readback && pending_render_passes_upscaled >= ImplementationConstants::MaxPendingRenderPassesBeforeFlush) || pending_primitives >= Limits::MaxPrimitives || pending_primitives_upscaled >= Limits::MaxPrimitives || active_submissions.load(std::memory_order_relaxed) == 0 || int64_t(Util::get_current_time_nsecs() - last_submit_ns) > 1000000) { submit_to_queue(); } } void Renderer::lock_command_processing() { idle_lock.lock(); } void Renderer::unlock_command_processing() { idle_lock.unlock(); } void Renderer::maintain_queues_idle() { std::lock_guard holder{idle_lock}; if (pending_primitives >= ImplementationConstants::MinimumPrimitivesForIdleFlush || pending_render_passes >= ImplementationConstants::MinimumRenderPassesForIdleFlush) { flush_queues(); submit_to_queue(); } } void Renderer::enqueue_fence_wait(Vulkan::Fence fence) { CoherencyOperation op; op.fence = std::move(fence); op.unlock_cookie = &active_submissions; active_submissions.fetch_add(1, std::memory_order_relaxed); processor.enqueue_coherency_operation(std::move(op)); last_submit_ns = Util::get_current_time_nsecs(); } void Renderer::submit_to_queue() { bool pending_host_visible_render_passes = (caps.super_sample_readback ? pending_render_passes_upscaled : pending_render_passes) != 0; bool pending_upscaled_passes = pending_render_passes_upscaled != 0; pending_render_passes = 0; pending_render_passes_upscaled = 0; pending_primitives = 0; pending_primitives_upscaled = 0; if (!stream.cmd) { if (pending_host_visible_render_passes) { Vulkan::Fence fence; device->submit_empty(Vulkan::CommandBuffer::Type::AsyncCompute, &fence); enqueue_fence_wait(fence); } return; } bool need_host_barrier = is_host_coherent || !incoherent.staging_readback; // If we maintain queues in-between doing 1x render pass and upscaled render pass, // we haven't flushed memory yet. bool need_memory_flush = pending_host_visible_render_passes && !pending_upscaled_passes; stream.cmd->barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, need_memory_flush ? VK_ACCESS_MEMORY_WRITE_BIT : 0, (need_host_barrier ? VK_PIPELINE_STAGE_HOST_BIT : VK_PIPELINE_STAGE_TRANSFER_BIT), (need_host_barrier ? VK_ACCESS_HOST_READ_BIT : VK_ACCESS_TRANSFER_READ_BIT)); Vulkan::Fence fence; if (is_host_coherent) { device->submit(stream.cmd, &fence); if (pending_host_visible_render_passes) enqueue_fence_wait(fence); } else { CoherencyOperation op; if (pending_host_visible_render_passes) resolve_coherency_gpu_to_host(op, *stream.cmd); device->submit(stream.cmd, &fence); if (pending_host_visible_render_passes) { enqueue_fence_wait(fence); op.fence = fence; if (!op.copies.empty()) processor.enqueue_coherency_operation(std::move(op)); } } Util::for_each_bit(sync_indices_needs_flush, [&](unsigned bit) { auto &sync = internal_sync[bit]; sync.fence = fence; }); sync_indices_needs_flush = 0; stream.cmd.reset(); } void Renderer::reset_context() { stream.scissor_setup.reset(); stream.static_raster_state_cache.reset(); stream.depth_blend_state_cache.reset(); stream.tile_info_state_cache.reset(); stream.triangle_setup.reset(); stream.attribute_setup.reset(); stream.derived_setup.reset(); stream.state_indices.reset(); stream.span_info_offsets.reset(); stream.span_info_jobs.reset(); stream.max_shaded_tiles = 0; fb.deduced_height = 0; fb.color_write_pending = false; fb.depth_write_pending = false; stream.tmem_upload_infos.clear(); } void Renderer::begin_new_context() { buffer_instance = (buffer_instance + 1) % Limits::NumSyncStates; reset_context(); } uint32_t Renderer::get_byte_size_for_bound_color_framebuffer() const { unsigned pixel_count = fb.width * fb.deduced_height; unsigned byte_count; switch (fb.fmt) { case FBFormat::RGBA8888: byte_count = pixel_count * 4; break; case FBFormat::RGBA5551: case FBFormat::IA88: byte_count = pixel_count * 2; break; default: byte_count = pixel_count; break; } return byte_count; } uint32_t Renderer::get_byte_size_for_bound_depth_framebuffer() const { return fb.width * fb.deduced_height * 2; } void Renderer::mark_pages_for_gpu_read(uint32_t base_addr, uint32_t byte_count) { if (byte_count == 0) return; uint32_t start_page = base_addr / ImplementationConstants::IncoherentPageSize; uint32_t end_page = (base_addr + byte_count - 1) / ImplementationConstants::IncoherentPageSize + 1; start_page &= incoherent.num_pages - 1; end_page &= incoherent.num_pages - 1; uint32_t page = start_page; while (page != end_page) { bool pending_writes = (incoherent.page_to_pending_readback[page / 32] & (1u << (page & 31))) != 0 || incoherent.pending_writes_for_page[page].load(std::memory_order_relaxed) != 0; // We'll do an acquire memory barrier later before we start memcpy-ing from host memory. if (pending_writes) incoherent.page_to_masked_copy[page / 32] |= 1u << (page & 31); else incoherent.page_to_direct_copy[page / 32] |= 1u << (page & 31); page = (page + 1) & (incoherent.num_pages - 1); } } void Renderer::lock_pages_for_gpu_write(uint32_t base_addr, uint32_t byte_count) { if (byte_count == 0) return; uint32_t start_page = base_addr / ImplementationConstants::IncoherentPageSize; uint32_t end_page = (base_addr + byte_count - 1) / ImplementationConstants::IncoherentPageSize + 1; for (uint32_t page = start_page; page < end_page; page++) { uint32_t wrapped_page = page & (incoherent.num_pages - 1); incoherent.page_to_pending_readback[wrapped_page / 32] |= 1u << (wrapped_page & 31); } } void Renderer::resolve_coherency_gpu_to_host(CoherencyOperation &op, Vulkan::CommandBuffer &cmd) { cmd.begin_region("resolve-coherency-gpu-to-host"); if (!incoherent.staging_readback) { // iGPU path. op.src = rdram; op.dst = incoherent.host_rdram; op.timeline_value = 0; for (auto &readback : incoherent.page_to_pending_readback) { uint32_t base_index = 32 * uint32_t(&readback - incoherent.page_to_pending_readback.data()); Util::for_each_bit_range(readback, [&](unsigned index, unsigned count) { index += base_index; for (unsigned i = 0; i < count; i++) incoherent.pending_writes_for_page[index + i].fetch_add(1, std::memory_order_relaxed); CoherencyCopy coherent_copy = {}; coherent_copy.counter_base = &incoherent.pending_writes_for_page[index]; coherent_copy.counters = count; coherent_copy.src_offset = index * ImplementationConstants::IncoherentPageSize; coherent_copy.mask_offset = coherent_copy.src_offset + rdram_size; coherent_copy.dst_offset = index * ImplementationConstants::IncoherentPageSize; coherent_copy.size = ImplementationConstants::IncoherentPageSize * count; op.copies.push_back(coherent_copy); }); readback = 0; } } else { // Discrete GPU path. Util::SmallVector copies; op.src = incoherent.staging_readback.get(); op.dst = incoherent.host_rdram; op.timeline_value = 0; for (auto &readback : incoherent.page_to_pending_readback) { uint32_t base_index = 32 * uint32_t(&readback - incoherent.page_to_pending_readback.data()); Util::for_each_bit_range(readback, [&](unsigned index, unsigned count) { index += base_index; for (unsigned i = 0; i < count; i++) incoherent.pending_writes_for_page[index + i].fetch_add(1, std::memory_order_relaxed); VkBufferCopy copy = {}; copy.srcOffset = index * ImplementationConstants::IncoherentPageSize; unsigned dst_page_index = incoherent.staging_readback_index; copy.dstOffset = dst_page_index * ImplementationConstants::IncoherentPageSize; incoherent.staging_readback_index += count; incoherent.staging_readback_index &= (incoherent.staging_readback_pages - 1); // Unclean wraparound check. if (incoherent.staging_readback_index != 0 && incoherent.staging_readback_index < dst_page_index) { copy.dstOffset = 0; incoherent.staging_readback_index = count; } copy.size = ImplementationConstants::IncoherentPageSize * count; copies.push_back(copy); CoherencyCopy coherent_copy = {}; coherent_copy.counter_base = &incoherent.pending_writes_for_page[index]; coherent_copy.counters = count; coherent_copy.src_offset = copy.dstOffset; coherent_copy.dst_offset = index * ImplementationConstants::IncoherentPageSize; coherent_copy.size = ImplementationConstants::IncoherentPageSize * count; VkBufferCopy mask_copy = {}; mask_copy.srcOffset = index * ImplementationConstants::IncoherentPageSize + rdram_size; dst_page_index = incoherent.staging_readback_index; mask_copy.dstOffset = dst_page_index * ImplementationConstants::IncoherentPageSize; incoherent.staging_readback_index += count; incoherent.staging_readback_index &= (incoherent.staging_readback_pages - 1); // Unclean wraparound check. if (incoherent.staging_readback_index != 0 && incoherent.staging_readback_index < dst_page_index) { mask_copy.dstOffset = 0; incoherent.staging_readback_index = count; } mask_copy.size = ImplementationConstants::IncoherentPageSize * count; copies.push_back(mask_copy); coherent_copy.mask_offset = mask_copy.dstOffset; op.copies.push_back(coherent_copy); }); readback = 0; } if (!copies.empty()) { //#define COHERENCY_READBACK_TIMESTAMPS #ifdef COHERENCY_READBACK_TIMESTAMPS Vulkan::QueryPoolHandle start_ts, end_ts; start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_TRANSFER_BIT); #endif cmd.copy_buffer(*incoherent.staging_readback, *rdram, copies.data(), copies.size()); #ifdef COHERENCY_READBACK_TIMESTAMPS end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_TRANSFER_BIT); device->register_time_interval(std::move(start_ts), std::move(end_ts), "coherency-readback"); #endif cmd.barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_HOST_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_HOST_READ_BIT); } } cmd.end_region(); } void Renderer::resolve_coherency_external(unsigned offset, unsigned length) { mark_pages_for_gpu_read(offset, length); ensure_command_buffer(); resolve_coherency_host_to_gpu(*stream.cmd); device->submit(stream.cmd); stream.cmd.reset(); } unsigned Renderer::get_scaling_factor() const { return caps.upscaling; } const Vulkan::Buffer *Renderer::get_upscaled_rdram_buffer() const { return upscaling_multisampled_rdram.get(); } const Vulkan::Buffer *Renderer::get_upscaled_hidden_rdram_buffer() const { return upscaling_multisampled_hidden_rdram.get(); } void Renderer::resolve_coherency_host_to_gpu(Vulkan::CommandBuffer &cmd) { // Now, ensure that the GPU sees a coherent view of the CPU memory writes up until now. // Writes made by the GPU which are not known to be resolved on the timeline waiter thread will always // "win" over writes made by CPU, since CPU is not allowed to meaningfully overwrite data which the GPU // is going to touch. cmd.begin_region("resolve-coherency-host-to-gpu"); Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp) start_ts = device->write_calibrated_timestamp(); std::atomic_thread_fence(std::memory_order_acquire); Util::SmallVector buffer_copies; Util::SmallVector masked_page_copies; Util::SmallVector to_clear_write_mask; // If we're able to map RDRAM directly, we can just memcpy straight into RDRAM if we have an unmasked copy. // Important for iGPU. if (rdram->get_allocation().is_host_allocation()) { for (auto &direct : incoherent.page_to_direct_copy) { uint32_t base_index = 32 * (&direct - incoherent.page_to_direct_copy.data()); Util::for_each_bit_range(direct, [&](unsigned index, unsigned count) { index += base_index; auto *mapped_rdram = device->map_host_buffer(*rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT, ImplementationConstants::IncoherentPageSize * index, ImplementationConstants::IncoherentPageSize * count); memcpy(mapped_rdram, incoherent.host_rdram + ImplementationConstants::IncoherentPageSize * index, ImplementationConstants::IncoherentPageSize * count); device->unmap_host_buffer(*rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT, ImplementationConstants::IncoherentPageSize * index, ImplementationConstants::IncoherentPageSize * count); mapped_rdram = device->map_host_buffer(*rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT, ImplementationConstants::IncoherentPageSize * index + rdram_size, ImplementationConstants::IncoherentPageSize * count); memset(mapped_rdram, 0, ImplementationConstants::IncoherentPageSize * count); device->unmap_host_buffer(*rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT, ImplementationConstants::IncoherentPageSize * index + rdram_size, ImplementationConstants::IncoherentPageSize * count); }); direct = 0; } auto *mapped_staging = static_cast(device->map_host_buffer(*incoherent.staging_rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT)); for (auto &indirect : incoherent.page_to_masked_copy) { uint32_t base_index = 32 * (&indirect - incoherent.page_to_masked_copy.data()); Util::for_each_bit(indirect, [&](unsigned index) { index += base_index; masked_page_copies.push_back(index); memcpy(mapped_staging + ImplementationConstants::IncoherentPageSize * index, incoherent.host_rdram + ImplementationConstants::IncoherentPageSize * index, ImplementationConstants::IncoherentPageSize); }); indirect = 0; } device->unmap_host_buffer(*incoherent.staging_rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT); } else { auto *mapped_rdram = static_cast(device->map_host_buffer(*incoherent.staging_rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT)); size_t num_packed_pages = incoherent.page_to_masked_copy.size(); for (size_t i = 0; i < num_packed_pages; i++) { uint32_t base_index = 32 * i; uint32_t tmp = incoherent.page_to_masked_copy[i] | incoherent.page_to_direct_copy[i]; Util::for_each_bit(tmp, [&](unsigned index) { unsigned bit = index; index += base_index; if ((1u << bit) & incoherent.page_to_masked_copy[i]) masked_page_copies.push_back(index); else { VkBufferCopy copy = {}; copy.size = ImplementationConstants::IncoherentPageSize; copy.dstOffset = copy.srcOffset = index * ImplementationConstants::IncoherentPageSize; buffer_copies.push_back(copy); to_clear_write_mask.push_back(index); } memcpy(mapped_rdram + ImplementationConstants::IncoherentPageSize * index, incoherent.host_rdram + ImplementationConstants::IncoherentPageSize * index, ImplementationConstants::IncoherentPageSize); }); incoherent.page_to_masked_copy[i] = 0; incoherent.page_to_direct_copy[i] = 0; } device->unmap_host_buffer(*incoherent.staging_rdram, Vulkan::MEMORY_ACCESS_WRITE_BIT); } if (!masked_page_copies.empty()) { #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://masked_rdram_resolve.comp"); #else cmd.set_program(shader_bank->masked_rdram_resolve); #endif cmd.set_specialization_constant_mask(3); cmd.set_specialization_constant(0, ImplementationConstants::IncoherentPageSize / 4); cmd.set_specialization_constant(1, ImplementationConstants::IncoherentPageSize / 4); cmd.set_storage_buffer(0, 0, *rdram, rdram_offset, rdram_size); cmd.set_storage_buffer(0, 1, *incoherent.staging_rdram); cmd.set_storage_buffer(0, 2, *rdram, rdram_offset + rdram_size, rdram_size); //#define COHERENCY_MASK_TIMESTAMPS #ifdef COHERENCY_MASK_TIMESTAMPS Vulkan::QueryPoolHandle start_ts, end_ts; start_ts = cmd->write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); #endif for (size_t i = 0; i < masked_page_copies.size(); i += 4096) { size_t to_copy = std::min(masked_page_copies.size() - i, size_t(4096)); memcpy(cmd.allocate_typed_constant_data(1, 0, to_copy), masked_page_copies.data() + i, to_copy * sizeof(uint32_t)); cmd.dispatch(to_copy, 1, 1); } #ifdef COHERENCY_MASK_TIMESTAMPS end_ts = cmd->write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval(std::move(start_ts), std::move(end_ts), "coherent-mask-copy"); #endif } // Could use FillBuffer here, but would need to use TRANSFER stage, and introduce more barriers than needed. if (!to_clear_write_mask.empty()) { #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://clear_write_mask.comp"); #else cmd.set_program(shader_bank->clear_write_mask); #endif cmd.set_specialization_constant_mask(3); cmd.set_specialization_constant(0, ImplementationConstants::IncoherentPageSize / 4); cmd.set_specialization_constant(1, ImplementationConstants::IncoherentPageSize / 4); cmd.set_storage_buffer(0, 0, *rdram, rdram_offset + rdram_size, rdram_size); for (size_t i = 0; i < to_clear_write_mask.size(); i += 4096) { size_t to_copy = std::min(to_clear_write_mask.size() - i, size_t(4096)); memcpy(cmd.allocate_typed_constant_data(1, 0, to_copy), to_clear_write_mask.data() + i, to_copy * sizeof(uint32_t)); cmd.dispatch(to_copy, 1, 1); } } if (!to_clear_write_mask.empty() || !masked_page_copies.empty()) { cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } // If we cannot map the device memory, copy. We're latency sensitive, so don't use DMA queue. if (!buffer_copies.empty()) { cmd.barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT); //#define COHERENCY_COPY_TIMESTAMPS #ifdef COHERENCY_COPY_TIMESTAMPS Vulkan::QueryPoolHandle start_ts, end_ts; start_ts = cmd->write_timestamp(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); #endif cmd.copy_buffer(*rdram, *incoherent.staging_rdram, buffer_copies.data(), buffer_copies.size()); #ifdef COHERENCY_COPY_TIMESTAMPS end_ts = cmd->write_timestamp(VK_PIPELINE_STAGE_TRANSFER_BIT); device->register_time_interval(std::move(start_ts), std::move(end_ts), "coherent-copy"); #endif cmd.barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } if (caps.timestamp) { end_ts = device->write_calibrated_timestamp(); device->register_time_interval("RDP CPU", std::move(start_ts), std::move(end_ts), "coherency-host-to-gpu"); } cmd.end_region(); } void Renderer::flush_queues() { if (stream.tmem_upload_infos.empty() && stream.span_info_jobs.empty()) { base_primitive_index += stream.triangle_setup.size(); reset_context(); return; } if (!is_host_coherent) { mark_pages_for_gpu_read(fb.addr, get_byte_size_for_bound_color_framebuffer()); mark_pages_for_gpu_read(fb.depth_addr, get_byte_size_for_bound_depth_framebuffer()); // We're going to write to these pages, so lock them down. lock_pages_for_gpu_write(fb.addr, get_byte_size_for_bound_color_framebuffer()); lock_pages_for_gpu_write(fb.depth_addr, get_byte_size_for_bound_depth_framebuffer()); } auto &instance = buffer_instances[buffer_instance]; auto &sync = internal_sync[buffer_instance]; if (sync_indices_needs_flush & (1u << buffer_instance)) submit_to_queue(); sync_indices_needs_flush |= 1u << buffer_instance; if (sync.fence) { Vulkan::QueryPoolHandle start_ts, end_ts; if (caps.timestamp) start_ts = device->write_calibrated_timestamp(); sync.fence->wait(); if (caps.timestamp) { end_ts = device->write_calibrated_timestamp(); device->register_time_interval("RDP CPU", std::move(start_ts), std::move(end_ts), "render-pass-fence"); } sync.fence.reset(); } ensure_command_buffer(); if (!is_host_coherent) resolve_coherency_host_to_gpu(*stream.cmd); instance.upload(*device, stream, *stream.cmd); // If we have super-sampled readback, then this is meaningless. bool has_single_sampled_render_pass = !caps.super_sample_readback; if (has_single_sampled_render_pass) { stream.cmd->begin_region("render-pass-1x"); submit_render_pass(*stream.cmd); stream.cmd->end_region(); pending_render_passes++; } if (render_pass_is_upscaled()) { if (has_single_sampled_render_pass) { maintain_queues(); ensure_command_buffer(); // We're going to keep reading the same data structures, so make sure // we signal fence after upscaled render pass is submitted. sync_indices_needs_flush |= 1u << buffer_instance; } submit_render_pass_upscaled(*stream.cmd); pending_render_passes_upscaled++; pending_primitives_upscaled += uint32_t(stream.triangle_setup.size()); } submit_render_pass_end(*stream.cmd); begin_new_context(); maintain_queues(); } bool Renderer::render_pass_is_upscaled() const { if (caps.super_sample_readback) return true; bool need_render_pass = fb.width != 0 && fb.deduced_height != 0 && !stream.span_info_jobs.empty(); return need_render_pass && should_render_upscaled(); } bool Renderer::should_render_upscaled() const { if (caps.upscaling > 1) { // A heuristic. There is no point to render upscaled for purely off-screen passes. // We should ideally only upscale the final pass which hits screen. // From a heuristic point-of-view we expect only 16-bit/32-bit frame buffers to be relevant, // and only frame buffers with at least 256 pixels. return (fb.fmt == FBFormat::RGBA5551 || fb.fmt == FBFormat::RGBA8888) && fb.width >= 256; } else return false; } void Renderer::ensure_command_buffer() { if (!stream.cmd) stream.cmd = device->request_command_buffer(Vulkan::CommandBuffer::Type::AsyncCompute); if (!caps.ubershader && !indirect_dispatch_buffer) { Vulkan::BufferCreateInfo indirect_info = {}; indirect_info.size = 4 * sizeof(uint32_t) * Limits::MaxStaticRasterizationStates; indirect_info.domain = Vulkan::BufferDomain::Device; indirect_info.usage = VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT; indirect_dispatch_buffer = device->create_buffer(indirect_info); device->set_name(*indirect_dispatch_buffer, "indirect-dispatch-buffer"); clear_indirect_buffer(*stream.cmd); stream.cmd->barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT); } } void Renderer::set_tile(uint32_t tile, const TileMeta &meta) { tiles[tile].meta = meta; } void Renderer::set_tile_size(uint32_t tile, uint32_t slo, uint32_t shi, uint32_t tlo, uint32_t thi) { tiles[tile].size.slo = slo; tiles[tile].size.shi = shi; tiles[tile].size.tlo = tlo; tiles[tile].size.thi = thi; } void Renderer::notify_idle_command_thread() { maintain_queues_idle(); } bool Renderer::tmem_upload_needs_flush(uint32_t addr) const { // Not perfect, since TMEM upload could slice into framebuffer, // but I doubt this will be an issue (famous last words ...) if (fb.color_write_pending) { uint32_t offset = (addr - fb.addr) & (rdram_size - 1); uint32_t pending_pixels = fb.deduced_height * fb.width; switch (fb.fmt) { case FBFormat::RGBA5551: case FBFormat::I8: offset >>= 1; break; case FBFormat::RGBA8888: offset >>= 2; break; default: break; } if (offset < pending_pixels) { //LOGI("Flushing render pass due to coherent TMEM fetch from color buffer.\n"); return true; } } if (fb.depth_write_pending) { uint32_t offset = (addr - fb.depth_addr) & (rdram_size - 1); uint32_t pending_pixels = fb.deduced_height * fb.width; offset >>= 1; if (offset < pending_pixels) { //LOGI("Flushing render pass due to coherent TMEM fetch from depth buffer.\n"); return true; } } return false; } void Renderer::load_tile(uint32_t tile, const LoadTileInfo &info) { if (tmem_upload_needs_flush(info.tex_addr)) flush_queues(); // Detect noop cases. if (info.mode != UploadMode::Block) { if ((info.thi >> 2) < (info.tlo >> 2)) return; unsigned pixel_count = (((info.shi >> 2) - (info.slo >> 2)) + 1) & 0xfff; if (!pixel_count) return; } else { unsigned pixel_count = ((info.shi - info.slo) + 1) & 0xfff; if (!pixel_count) return; } if (!is_host_coherent) { unsigned pixel_count; unsigned offset_pixels; unsigned base_addr = info.tex_addr; if (info.mode == UploadMode::Block) { pixel_count = (info.shi - info.slo + 1) & 0xfff; offset_pixels = info.slo + info.tex_width * info.tlo; } else { unsigned max_x = ((info.shi >> 2) - (info.slo >> 2)) & 0xfff; unsigned max_y = (info.thi >> 2) - (info.tlo >> 2); pixel_count = max_y * info.tex_width + max_x + 1; offset_pixels = (info.slo >> 2) + info.tex_width * (info.tlo >> 2); } unsigned byte_size = pixel_count << (unsigned(info.size) - 1); byte_size = (byte_size + 7) & ~7; base_addr += offset_pixels << (unsigned(info.size) - 1); mark_pages_for_gpu_read(base_addr, byte_size); } if (info.mode == UploadMode::Tile) { auto &meta = tiles[tile].meta; unsigned pixels_coverered_per_line = (((info.shi >> 2) - (info.slo >> 2)) + 1) & 0xfff; // Technically, 32-bpp TMEM upload and YUV upload will work like 16bpp, just split into two halves, but that also means // we get 2kB wraparound instead of 4kB wraparound, so this works out just fine for our purposes. unsigned quad_words_covered_per_line = ((pixels_coverered_per_line << unsigned(meta.size)) + 15) >> 4; // Deal with mismatch in state, there is no reasonable scenarios where this should even matter, but you never know ... if (unsigned(meta.size) > unsigned(info.size)) quad_words_covered_per_line <<= unsigned(meta.size) - unsigned(info.size); else if (unsigned(meta.size) < unsigned(info.size)) quad_words_covered_per_line >>= unsigned(info.size) - unsigned(meta.size); // Compute a conservative estimate for how many bytes we're going to splat down into TMEM. unsigned bytes_covered_per_line = std::max(quad_words_covered_per_line * 8, meta.stride); unsigned max_bytes_per_line = 0x1000; // We need to write lower and upper halves at once, // so we need to wrap around at 2k boundary. if (meta.fmt == TextureFormat::YUV) max_bytes_per_line /= 2; unsigned num_lines = ((info.thi >> 2) - (info.tlo >> 2)) + 1; unsigned total_bytes_covered = bytes_covered_per_line * num_lines; if (total_bytes_covered > max_bytes_per_line) { // Welp, for whatever reason, the game wants to write more than 4k of texture data to TMEM in one go. // We can only handle 4kB in one go due to wrap-around effects, // so split up the upload in multiple chunks. unsigned max_lines_per_iteration = max_bytes_per_line / bytes_covered_per_line; // Align T-state. max_lines_per_iteration &= ~1u; if (max_lines_per_iteration == 0) { LOGE("Pure insanity where content is attempting to load more than 2kB of TMEM data in one single line ...\n"); // Could be supported if we start splitting up horizonal direction as well, but seriously ... return; } for (unsigned line = 0; line < num_lines; line += max_lines_per_iteration) { unsigned to_copy_lines = std::min(num_lines - line, max_lines_per_iteration); LoadTileInfo tmp_info = info; tmp_info.tlo = info.tlo + (line << 2); tmp_info.thi = tmp_info.tlo + ((to_copy_lines - 1) << 2); load_tile_iteration(tile, tmp_info, line * meta.stride); } auto &size = tiles[tile].size; size.slo = info.slo; size.shi = info.shi; size.tlo = info.tlo; size.thi = info.thi; } else load_tile_iteration(tile, info, 0); } else load_tile_iteration(tile, info, 0); } void Renderer::load_tile_iteration(uint32_t tile, const LoadTileInfo &info, uint32_t tmem_offset) { auto &size = tiles[tile].size; auto &meta = tiles[tile].meta; size.slo = info.slo; size.shi = info.shi; size.tlo = info.tlo; size.thi = info.thi; if (meta.fmt == TextureFormat::YUV && ((meta.size != TextureSize::Bpp16) || (info.size != TextureSize::Bpp16))) { LOGE("Only 16bpp is supported for YUV uploads.\n"); return; } // This case does not appear to be supported. if (info.size == TextureSize::Bpp4) { LOGE("4-bit VRAM pointer crashes the RDP.\n"); return; } if (meta.size == TextureSize::Bpp32 && meta.fmt != TextureFormat::RGBA) { LOGE("32bpp tile uploads must using RGBA texture format, unsupported otherwise.\n"); return; } if (info.mode == UploadMode::TLUT && meta.size == TextureSize::Bpp32) { LOGE("TLUT uploads with 32bpp tiles are unsupported.\n"); return; } if (info.mode != UploadMode::TLUT) { if (info.size == TextureSize::Bpp32 && meta.size == TextureSize::Bpp8) { LOGE("FIXME: Loading tile with Texture 32-bit and Tile 8-bit. This creates insane results, unsupported.\n"); return; } else if (info.size == TextureSize::Bpp16 && meta.size == TextureSize::Bpp4) { LOGE("FIXME: Loading tile with Texture 16-bit and Tile 4-bit. This creates insane results, unsupported.\n"); return; } else if (info.size == TextureSize::Bpp32 && meta.size == TextureSize::Bpp4) { LOGE("FIXME: Loading tile with Texture 32-bit and Tile 4-bit. This creates insane results, unsupported.\n"); return; } } UploadInfo upload = {}; upload.tmem_stride_words = meta.stride >> 1; uint32_t upload_x = 0; uint32_t upload_y = 0; auto upload_mode = info.mode; if (upload_mode == UploadMode::Block) { upload_x = info.slo; upload_y = info.tlo; // LoadBlock is kinda awkward. Rather than specifying width and height, we get width and dTdx. // dTdx will increment and generate a T coordinate based on S coordinate (T = (S_64bpp_word * dTdx) >> 11). // The stride is added on top of this, so effective stride is stride(T) + stride(tile). // Usually it makes sense for stride(tile) to be 0, but it doesn't have to be ... // The only reasonable solution is to try to decompose this mess into a normal width/height/stride. // In the general dTdx case, we don't have to deduce a stable value for stride. // If dTdx is very weird, we might get variable stride, which is near-impossible to deal with. // However, it makes zero sense for content to actually rely on this behavior. // Even if there are inaccuracies in the fraction, we always floor it to get T, and thus we'll have to run // for quite some time to observe the fractional error accumulate. unsigned pixel_count = (info.shi - info.slo + 1) & 0xfff; unsigned dt = info.thi; unsigned max_tmem_iteration = (pixel_count - 1) >> (4u - unsigned(info.size)); unsigned max_t = (max_tmem_iteration * dt) >> 11; if (max_t != 0) { // dT is an inverse which is not necessarily accurate, we can end up with an uneven amount of // texels per "line". If we have stride == 0, this is fairly easy to deal with, // but for the case where stride != 0, it is very difficult to implement it correctly. // We will need to solve this kind of equation for X: // TMEM word = floor((x * dt) / 2048) * stride + x // This equation has no solutions for cases where we stride over TMEM words. // The only way I can think of is to test all candidates for the floor() expression, and see if that is a valid solution. // We can find an conservative estimate for floor() by: // t_min = TMEM word / (max_num_64bpp_elements + stride) // t_max = TMEM word / (min_num_64bpp_elements + stride) unsigned max_num_64bpp_elements_before_wrap = ((1u << 11u) + dt - 1u) / dt; unsigned min_num_64bpp_elements_before_wrap = (1u << 11u) / dt; bool uneven_dt = max_num_64bpp_elements_before_wrap != min_num_64bpp_elements_before_wrap; if (uneven_dt) { // If we never get rounding errors, we can handwave this issue away and pretend that min == max iterations. // This is by far the common case. // Each overflow into next T adds a certain amount of error. unsigned overflow_amt = dt * max_num_64bpp_elements_before_wrap - (1 << 11); // Multiply this by maximum value of T we can observe, and we have a conservative estimate for our T error. overflow_amt *= max_t; // If this error is less than 1 step of dt, we can be certain that we will get max_num iterations every time, // and we can ignore the worst edge cases. if (overflow_amt < dt) { min_num_64bpp_elements_before_wrap = max_num_64bpp_elements_before_wrap; uneven_dt = false; } } // Add more precision bits to DXT. We might have to shift it down if we have a meta.size fixup down below. // Also makes the right shift nicer (16 vs 11). upload.dxt = dt << 5; if (meta.size == TextureSize::Bpp32 || meta.fmt == TextureFormat::YUV) { // We iterate twice for Bpp32 and YUV to complete a 64bpp word. upload.tmem_stride_words <<= 1; // Pure, utter insanity, but no content should *ever* hit this ... if (uneven_dt && meta.size != info.size) { LOGE("Got uneven_dt, and texture size != tile size.\n"); return; } } // If TMEM and VRAM bpp misalign, we need to fixup this since we step too fast or slow. if (unsigned(meta.size) > unsigned(info.size)) { unsigned shamt = unsigned(meta.size) - unsigned(info.size); max_num_64bpp_elements_before_wrap <<= shamt; min_num_64bpp_elements_before_wrap <<= shamt; // Need to step slower so we can handle the added striding. upload.dxt >>= shamt; } else if (unsigned(info.size) > unsigned(meta.size)) { // Here we step multiple times over the same pixel, but potentially with different T state, // since dTdx applies between the iterations. // Horrible, horrible mess ... LOGE("LoadBlock: VRAM bpp size is larger than tile bpp. This is unsupported.\n"); return; } unsigned max_line_stride_64bpp = max_num_64bpp_elements_before_wrap + (upload.tmem_stride_words >> 2); unsigned min_line_stride_64bpp = min_num_64bpp_elements_before_wrap + (upload.tmem_stride_words >> 2); // Multiplying 64bpp TMEM word by these gives us lower and upper bounds for T. // These serve as candidate expressions for floor(). float min_t_mod = 1.0f / float(max_line_stride_64bpp); float max_t_mod = 1.0f / float(min_line_stride_64bpp); upload.min_t_mod = min_t_mod; upload.max_t_mod = max_t_mod; upload.width = pixel_count; upload.height = 1; upload.tmem_stride_words >>= 2; // Stride in 64bpp instead of 16bpp. } else { // We never trigger a case where T is non-zero, so this is equivalent to a Tile upload. upload.width = pixel_count; upload.height = 1; upload.tmem_stride_words = 0; upload_mode = UploadMode::Tile; } } else { upload_x = info.slo >> 2; upload_y = info.tlo >> 2; upload.width = (((info.shi >> 2) - (info.slo >> 2)) + 1) & 0xfff; upload.height = ((info.thi >> 2) - (info.tlo >> 2)) + 1; } if (!upload.width) return; switch (info.size) { case TextureSize::Bpp8: upload.vram_effective_width = (upload.width + 7) & ~7; break; case TextureSize::Bpp16: // In 16-bit VRAM pointer with TLUT, we iterate one texel at a time, not 4. if (upload_mode == UploadMode::TLUT) upload.vram_effective_width = upload.width; else upload.vram_effective_width = (upload.width + 3) & ~3; break; case TextureSize::Bpp32: upload.vram_effective_width = (upload.width + 1) & ~1; break; default: break; } // Uploads happen in chunks of 8 bytes in groups of 4x16-bits. switch (meta.size) { case TextureSize::Bpp4: upload.width = (upload.width + 15) & ~15; upload.width >>= 2; break; case TextureSize::Bpp8: upload.width = (upload.width + 7) & ~7; upload.width >>= 1; break; case TextureSize::Bpp16: upload.width = (upload.width + 3) & ~3; // Consider YUV uploads to be 32bpp since that's kinda what they are. if (meta.fmt == TextureFormat::YUV) upload.width >>= 1; break; case TextureSize::Bpp32: upload.width = (upload.width + 1) & ~1; break; default: LOGE("Unimplemented!\n"); break; } if (upload.height > 1 && upload_mode == UploadMode::TLUT) { LOGE("Load TLUT with height > 1 is not supported.\n"); return; } upload.vram_addr = info.tex_addr + ((info.tex_width * upload_y + upload_x) << (unsigned(info.size) - 1)); upload.vram_width = upload_mode == UploadMode::Block ? upload.vram_effective_width : info.tex_width; upload.vram_size = int32_t(info.size); upload.tmem_offset = (meta.offset + tmem_offset) & 0xfff; upload.tmem_size = int32_t(meta.size); upload.tmem_fmt = int32_t(meta.fmt); upload.mode = int32_t(upload_mode); upload.inv_tmem_stride_words = 1.0f / float(upload.tmem_stride_words); stream.tmem_upload_infos.push_back(upload); if (stream.tmem_upload_infos.size() + 1 >= Limits::MaxTMEMInstances) flush_queues(); } void Renderer::set_blend_color(uint32_t color) { constants.blend_color = color; } void Renderer::set_fog_color(uint32_t color) { constants.fog_color = color; } void Renderer::set_env_color(uint32_t color) { constants.env_color = color; } void Renderer::set_fill_color(uint32_t color) { constants.fill_color = color; } void Renderer::set_primitive_depth(uint16_t prim_depth, uint16_t prim_dz) { constants.prim_depth = int32_t(prim_depth & 0x7fff) << 16; constants.prim_dz = prim_dz; } void Renderer::set_enable_primitive_depth(bool enable) { constants.use_prim_depth = enable; } void Renderer::set_convert(uint16_t k0, uint16_t k1, uint16_t k2, uint16_t k3, uint16_t k4, uint16_t k5) { constants.convert[0] = 2 * sext<9>(k0) + 1; constants.convert[1] = 2 * sext<9>(k1) + 1; constants.convert[2] = 2 * sext<9>(k2) + 1; constants.convert[3] = 2 * sext<9>(k3) + 1; constants.convert[4] = k4; constants.convert[5] = k5; } void Renderer::set_color_key(unsigned component, uint32_t width, uint32_t center, uint32_t scale) { constants.key_width[component] = width; constants.key_center[component] = center; constants.key_scale[component] = scale; } void Renderer::set_primitive_color(uint8_t min_level, uint8_t prim_lod_frac, uint32_t color) { constants.primitive_color = color; constants.min_level = min_level; constants.prim_lod_frac = prim_lod_frac; } bool Renderer::can_support_minimum_subgroup_size(unsigned size) const { return supports_subgroup_size_control(size, device->get_device_features().subgroup_properties.subgroupSize); } bool Renderer::supports_subgroup_size_control(uint32_t minimum_size, uint32_t maximum_size) const { auto &features = device->get_device_features(); if (!features.subgroup_size_control_features.computeFullSubgroups) return false; bool use_varying = minimum_size <= features.subgroup_size_control_properties.minSubgroupSize && maximum_size >= features.subgroup_size_control_properties.maxSubgroupSize; if (!use_varying) { bool outside_range = minimum_size > features.subgroup_size_control_properties.maxSubgroupSize || maximum_size < features.subgroup_size_control_properties.minSubgroupSize; if (outside_range) return false; if ((features.subgroup_size_control_properties.requiredSubgroupSizeStages & VK_SHADER_STAGE_COMPUTE_BIT) == 0) return false; } return true; } void Renderer::PipelineExecutor::perform_work(const Vulkan::DeferredPipelineCompile &compile) const { auto start_ts = device->write_calibrated_timestamp(); Vulkan::CommandBuffer::build_compute_pipeline(device, compile); auto end_ts = device->write_calibrated_timestamp(); device->register_time_interval("RDP Pipeline", std::move(start_ts), std::move(end_ts), "pipeline-compilation", std::to_string(compile.hash)); } bool Renderer::PipelineExecutor::is_sentinel(const Vulkan::DeferredPipelineCompile &compile) const { return compile.hash == 0; } void Renderer::PipelineExecutor::notify_work_locked(const Vulkan::DeferredPipelineCompile &) const { } } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/rdp_renderer.hpp000066400000000000000000000327351415063341600253160ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "rdp_data_structures.hpp" #include "device.hpp" #include "rdp_common.hpp" #include "worker_thread.hpp" #include namespace RDP { struct CoherencyOperation; struct SyncObject { Vulkan::Fence fence; }; enum class FBFormat : uint32_t { I4 = 0, I8 = 1, RGBA5551 = 2, IA88 = 3, RGBA8888 = 4 }; enum class UploadMode : uint32_t { Tile = 0, TLUT = 1, Block = 2 }; struct LoadTileInfo { uint32_t tex_addr; uint32_t tex_width; uint16_t slo, tlo, shi, thi; TextureFormat fmt; TextureSize size; UploadMode mode; }; class CommandProcessor; struct RendererOptions { unsigned upscaling_factor = 1; bool super_sampled_readback = false; bool super_sampled_readback_dither = false; }; class Renderer : public Vulkan::DebugChannelInterface { public: explicit Renderer(CommandProcessor &processor); ~Renderer(); void set_device(Vulkan::Device *device); // If coherent is false, RDRAM is a buffer split into data in lower half and writemask state in upper half, each part being size large. // offset must be 0 in this case. void set_rdram(Vulkan::Buffer *buffer, uint8_t *host_rdram, size_t offset, size_t size, bool coherent); void set_hidden_rdram(Vulkan::Buffer *buffer); void set_tmem(Vulkan::Buffer *buffer); void set_shader_bank(const ShaderBank *bank); bool init_renderer(const RendererOptions &options); // setup may be mutated to apply various fixups to triangle setup. void draw_flat_primitive(TriangleSetup &setup); void draw_shaded_primitive(TriangleSetup &setup, const AttributeSetup &attr); void set_color_framebuffer(uint32_t addr, uint32_t width, FBFormat fmt); void set_depth_framebuffer(uint32_t addr); void set_scissor_state(const ScissorState &state); void set_static_rasterization_state(const StaticRasterizationState &state); void set_depth_blend_state(const DepthBlendState &state); void set_tile(uint32_t tile, const TileMeta &info); void set_tile_size(uint32_t tile, uint32_t slo, uint32_t shi, uint32_t tlo, uint32_t thi); void load_tile(uint32_t tile, const LoadTileInfo &info); void load_tile_iteration(uint32_t tile, const LoadTileInfo &info, uint32_t tmem_offset); void set_blend_color(uint32_t color); void set_fog_color(uint32_t color); void set_env_color(uint32_t color); void set_primitive_color(uint8_t min_level, uint8_t prim_lod_frac, uint32_t color); void set_fill_color(uint32_t color); void set_primitive_depth(uint16_t prim_depth, uint16_t prim_dz); void set_enable_primitive_depth(bool enable); void set_convert(uint16_t k0, uint16_t k1, uint16_t k2, uint16_t k3, uint16_t k4, uint16_t k5); void set_color_key(unsigned component, uint32_t width, uint32_t center, uint32_t scale); // Called when the command thread has not seen any activity in a given period of time. // This is useful so we don't needlessly queue up work when we might as well kick it to the GPU. void notify_idle_command_thread(); void flush_and_signal(); int resolve_shader_define(const char *name, const char *define) const; void resolve_coherency_external(unsigned offset, unsigned length); void submit_update_upscaled_domain_external(Vulkan::CommandBuffer &cmd, unsigned addr, unsigned pixels, unsigned pixel_size_log2); unsigned get_scaling_factor() const; const Vulkan::Buffer *get_upscaled_rdram_buffer() const; const Vulkan::Buffer *get_upscaled_hidden_rdram_buffer() const; void lock_command_processing(); void unlock_command_processing(); private: CommandProcessor &processor; Vulkan::Device *device = nullptr; Vulkan::Buffer *rdram = nullptr; Vulkan::BufferHandle upscaling_reference_rdram; Vulkan::BufferHandle upscaling_multisampled_rdram; Vulkan::BufferHandle upscaling_multisampled_hidden_rdram; struct { uint8_t *host_rdram = nullptr; Vulkan::BufferHandle staging_rdram; Vulkan::BufferHandle staging_readback; std::unique_ptr pending_writes_for_page; std::vector page_to_direct_copy; std::vector page_to_masked_copy; std::vector page_to_pending_readback; unsigned num_pages = 0; unsigned staging_readback_pages = 0; unsigned staging_readback_index = 0; // Ringbuffer the readbacks. } incoherent; size_t rdram_offset = 0; size_t rdram_size = 0; bool is_host_coherent = false; Vulkan::Buffer *hidden_rdram = nullptr; Vulkan::Buffer *tmem = nullptr; const ShaderBank *shader_bank = nullptr; bool init_caps(); void init_blender_lut(); void init_buffers(const RendererOptions &options); bool init_internal_upscaling_factor(const RendererOptions &options); struct { uint32_t addr = 0; uint32_t depth_addr = 0; uint32_t width = 0; uint32_t deduced_height = 0; FBFormat fmt = FBFormat::I8; bool depth_write_pending = false; bool color_write_pending = false; } fb; struct StreamCaches { ScissorState scissor_state = {}; StaticRasterizationState static_raster_state = {}; DepthBlendState depth_blend_state = {}; StateCache static_raster_state_cache; StateCache depth_blend_state_cache; StateCache tile_info_state_cache; StreamCache triangle_setup; StreamCache scissor_setup; StreamCache attribute_setup; StreamCache derived_setup; StreamCache state_indices; StreamCache span_info_offsets; StreamCache span_info_jobs; std::vector tmem_upload_infos; unsigned max_shaded_tiles = 0; Vulkan::CommandBufferHandle cmd; } stream; void ensure_command_buffer(); TileInfo tiles[Limits::MaxNumTiles]; Vulkan::BufferHandle tmem_instances; Vulkan::BufferHandle span_setups; Vulkan::BufferHandle blender_divider_lut_buffer; Vulkan::BufferViewHandle blender_divider_buffer; Vulkan::BufferHandle tile_binning_buffer; Vulkan::BufferHandle tile_binning_buffer_coarse; Vulkan::BufferHandle indirect_dispatch_buffer; Vulkan::BufferHandle tile_work_list; Vulkan::BufferHandle per_tile_offsets; Vulkan::BufferHandle per_tile_shaded_color; Vulkan::BufferHandle per_tile_shaded_depth; Vulkan::BufferHandle per_tile_shaded_shaded_alpha; Vulkan::BufferHandle per_tile_shaded_coverage; struct MappedBuffer { Vulkan::BufferHandle buffer; bool is_host = false; }; struct RenderBuffers { void init(Vulkan::Device &device, Vulkan::BufferDomain domain, RenderBuffers *borrow); static MappedBuffer create_buffer(Vulkan::Device &device, Vulkan::BufferDomain domain, VkDeviceSize size, MappedBuffer *borrow); MappedBuffer triangle_setup; MappedBuffer attribute_setup; MappedBuffer derived_setup; MappedBuffer scissor_setup; MappedBuffer static_raster_state; MappedBuffer depth_blend_state; MappedBuffer tile_info_state; MappedBuffer state_indices; MappedBuffer span_info_offsets; MappedBuffer span_info_jobs; Vulkan::BufferViewHandle span_info_jobs_view; }; struct RenderBuffersUpdater { void init(Vulkan::Device &device); void upload(Vulkan::Device &device, const StreamCaches &caches, Vulkan::CommandBuffer &cmd); template void upload(Vulkan::CommandBuffer &cmd, Vulkan::Device &device, const MappedBuffer &gpu, const MappedBuffer &cpu, const Cache &cache, bool &did_upload); RenderBuffers cpu, gpu; }; struct InternalSynchronization { Vulkan::Fence fence; }; struct Constants { uint32_t blend_color = 0; uint32_t fog_color = 0; uint32_t env_color = 0; uint32_t primitive_color = 0; uint32_t fill_color = 0; uint8_t min_level = 0; uint8_t prim_lod_frac = 0; int32_t prim_depth = 0; uint16_t prim_dz = 0; uint16_t convert[6] = {}; uint16_t key_width[3] = {}; uint8_t key_center[3] = {}; uint8_t key_scale[3] = {}; bool use_prim_depth = false; } constants; RenderBuffersUpdater buffer_instances[Limits::NumSyncStates]; InternalSynchronization internal_sync[Limits::NumSyncStates]; uint32_t sync_indices_needs_flush = 0; unsigned buffer_instance = 0; uint32_t base_primitive_index = 0; unsigned pending_render_passes = 0; unsigned pending_render_passes_upscaled = 0; unsigned pending_primitives = 0; unsigned pending_primitives_upscaled = 0; bool tmem_upload_needs_flush(uint32_t addr) const; bool render_pass_is_upscaled() const; bool should_render_upscaled() const; void flush_queues(); void submit_render_pass(Vulkan::CommandBuffer &cmd); void submit_render_pass_upscaled(Vulkan::CommandBuffer &cmd); void submit_render_pass_end(Vulkan::CommandBuffer &cmd); void submit_to_queue(); void begin_new_context(); void reset_context(); bool need_flush() const; void maintain_queues(); void maintain_queues_idle(); void update_tmem_instances(Vulkan::CommandBuffer &cmd); void submit_span_setup_jobs(Vulkan::CommandBuffer &cmd, bool upscaled); void update_deduced_height(const TriangleSetup &setup); void submit_tile_binning_combined(Vulkan::CommandBuffer &cmd, bool upscaled); void clear_indirect_buffer(Vulkan::CommandBuffer &cmd); void submit_rasterization(Vulkan::CommandBuffer &cmd, Vulkan::Buffer &tmem, bool upscaled); void submit_depth_blend(Vulkan::CommandBuffer &cmd, Vulkan::Buffer &tmem, bool upscaled, bool force_write_mask); enum class ResolveStage { Pre, Post, SSAAResolve }; void submit_update_upscaled_domain(Vulkan::CommandBuffer &cmd, ResolveStage stage); void submit_update_upscaled_domain(Vulkan::CommandBuffer &cmd, ResolveStage stage, unsigned addr, unsigned depth_addr, unsigned width, unsigned height, unsigned pixel_size_log2); void submit_clear_super_sample_write_mask(Vulkan::CommandBuffer &cmd, unsigned width, unsigned height); SpanInfoOffsets allocate_span_jobs(const TriangleSetup &setup); DerivedSetup build_derived_attributes(const AttributeSetup &attr) const; void build_combiner_constants(DerivedSetup &setup, unsigned cycle) const; int filter_debug_channel_x = -1; int filter_debug_channel_y = -1; bool debug_channel = false; void message(const std::string &tag, uint32_t code, uint32_t x, uint32_t y, uint32_t z, uint32_t num_words, const Vulkan::DebugChannelInterface::Word *words) override; bool can_support_minimum_subgroup_size(unsigned size) const; bool supports_subgroup_size_control(uint32_t minimum_size, uint32_t maximum_size) const; std::unordered_set pending_async_pipelines; unsigned compute_conservative_max_num_tiles(const TriangleSetup &setup) const; void deduce_static_texture_state(unsigned tile, unsigned max_lod_level); void deduce_noise_state(); static StaticRasterizationState normalize_static_state(StaticRasterizationState state); void fixup_triangle_setup(TriangleSetup &setup) const; struct Caps { int timestamp = 0; bool force_sync = false; bool ubershader = false; bool supports_small_integer_arithmetic = false; bool subgroup_tile_binning = false; bool subgroup_depth_blend = false; bool super_sample_readback = false; bool super_sample_readback_dither = false; unsigned upscaling = 1; unsigned max_num_tile_instances = Limits::MaxTileInstances; unsigned max_tiles_x = ImplementationConstants::MaxTilesX; unsigned max_tiles_y = ImplementationConstants::MaxTilesY; unsigned max_width = Limits::MaxWidth; unsigned max_height = Limits::MaxHeight; } caps; struct PipelineExecutor { Vulkan::Device *device; bool is_sentinel(const Vulkan::DeferredPipelineCompile &compile) const; void perform_work(const Vulkan::DeferredPipelineCompile &compile) const; void notify_work_locked(const Vulkan::DeferredPipelineCompile &compile) const; }; std::unique_ptr> pipeline_worker; void resolve_coherency_host_to_gpu(Vulkan::CommandBuffer &cmd); void resolve_coherency_gpu_to_host(CoherencyOperation &op, Vulkan::CommandBuffer &cmd); uint32_t get_byte_size_for_bound_color_framebuffer() const; uint32_t get_byte_size_for_bound_depth_framebuffer() const; void mark_pages_for_gpu_read(uint32_t base_addr, uint32_t byte_count); void lock_pages_for_gpu_write(uint32_t base_addr, uint32_t byte_count); std::atomic_uint32_t active_submissions; void enqueue_fence_wait(Vulkan::Fence fence); uint64_t last_submit_ns = 0; std::mutex idle_lock; }; }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/000077500000000000000000000000001415063341600235515ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/binning.h000066400000000000000000000101341415063341600253450ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef BINNING_H_ #define BINNING_H_ // There are 4 critical Y coordinates to test when binning. Top, bottom, mid, and mid - 1. const int SUBPIXELS_Y = 4; ivec4 quantize_x(ivec4 x) { return x >> 15; } int minimum4(ivec4 v) { ivec2 minimum2 = min(v.xy, v.zw); return min(minimum2.x, minimum2.y); } int maximum4(ivec4 v) { ivec2 maximum2 = max(v.xy, v.zw); return max(maximum2.x, maximum2.y); } ivec4 madd_32_64(ivec4 a, int b, int c, out ivec4 hi_bits) { ivec4 lo, hi; imulExtended(a, ivec4(b), hi, lo); uvec4 carry; lo = ivec4(uaddCarry(lo, uvec4(c), carry)); hi += ivec4(carry); hi_bits = hi; return lo; } ivec2 interpolate_xs(TriangleSetup setup, ivec4 ys, bool flip, int scaling) { int yh_interpolation_base = setup.yh & ~(SUBPIXELS_Y - 1); int ym_interpolation_base = setup.ym; yh_interpolation_base *= scaling; ym_interpolation_base *= scaling; // Interpolate in 64-bit so we can detect quirky overflow scenarios. ivec4 xh_hi, xm_hi, xl_hi; ivec4 xh = madd_32_64(ys - yh_interpolation_base, setup.dxhdy, scaling * setup.xh, xh_hi); ivec4 xm = madd_32_64(ys - yh_interpolation_base, setup.dxmdy, scaling * setup.xm, xm_hi); ivec4 xl = madd_32_64(ys - ym_interpolation_base, setup.dxldy, scaling * setup.xl, xl_hi); xl = mix(xl, xm, lessThan(ys, ivec4(scaling * setup.ym))); xl_hi = mix(xl_hi, xm_hi, lessThan(ys, ivec4(scaling * setup.ym))); // Handle overflow scenarios. Saturate 64-bit signed to 32-bit signed without 64-bit math. xh = mix(xh, ivec4(0x7fffffff), greaterThan(xh_hi, ivec4(0))); xh = mix(xh, ivec4(-0x80000000), lessThan(xh_hi, ivec4(-1))); xl = mix(xl, ivec4(0x7fffffff), greaterThan(xl_hi, ivec4(0))); xl = mix(xl, ivec4(-0x80000000), lessThan(xl_hi, ivec4(-1))); ivec4 xh_shifted = quantize_x(xh); ivec4 xl_shifted = quantize_x(xl); ivec4 xleft, xright; if (flip) { xleft = xh_shifted; xright = xl_shifted; } else { xleft = xl_shifted; xright = xh_shifted; } // If one of the results are out of range, we have overflow, and we need to be conservative when binning. int max_range = maximum4(max(abs(xleft), abs(xright))); ivec2 range; if (max_range <= 2047 * scaling) range = ivec2(minimum4(xleft), maximum4(xright)); else range = ivec2(0, 0x7fffffff); return range; } bool bin_primitive(TriangleSetup setup, ivec2 lo, ivec2 hi, int scaling) { int start_y = lo.y * SUBPIXELS_Y; int end_y = (hi.y * SUBPIXELS_Y) + (SUBPIXELS_Y - 1); // First, we clip start/end against y_lo, y_hi. start_y = max(start_y, scaling * int(setup.yh)); end_y = min(end_y, scaling * int(setup.yl) - 1); // Y is clipped out, exit early. if (end_y < start_y) return false; bool flip = (setup.flags & TRIANGLE_SETUP_FLIP_BIT) != 0; // Sample the X ranges for min and max Y, and potentially the mid-point as well. ivec4 ys = ivec4(start_y, end_y, clamp(setup.ym * scaling + ivec2(-1, 0), ivec2(start_y), ivec2(end_y))); ivec2 x_range = interpolate_xs(setup, ys, flip, scaling); x_range.x = max(x_range.x, lo.x); x_range.y = min(x_range.y, hi.x); return x_range.x <= x_range.y; } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/blender.h000066400000000000000000000111151415063341600253340ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef BLENDER_H_ #define BLENDER_H_ struct BlendInputs { u8x4 pixel_color; u8x4 memory_color; u8x4 fog_color; u8x4 blend_color; u8 shade_alpha; }; const int BLEND_MODE_1A_PIXEL_COLOR = 0; const int BLEND_MODE_1A_MEMORY_COLOR = 1; const int BLEND_MODE_1A_BLEND_COLOR = 2; const int BLEND_MODE_1A_FOG_COLOR = 3; const int BLEND_MODE_1B_PIXEL_ALPHA = 0; const int BLEND_MODE_1B_FOG_ALPHA = 1; const int BLEND_MODE_1B_SHADE_ALPHA = 2; const int BLEND_MODE_1B_ZERO = 3; const int BLEND_MODE_2A_PIXEL_COLOR = 0; const int BLEND_MODE_2A_MEMORY_COLOR = 1; const int BLEND_MODE_2A_BLEND_COLOR = 2; const int BLEND_MODE_2A_FOG_COLOR = 3; const int BLEND_MODE_2B_INV_PIXEL_ALPHA = 0; const int BLEND_MODE_2B_MEMORY_ALPHA = 1; const int BLEND_MODE_2B_ONE = 2; const int BLEND_MODE_2B_ZERO = 3; u8x3 blender(BlendInputs inputs, u8x4 blend_modes, bool force_blend, bool blend_en, bool color_on_coverage, bool coverage_wrap, u8x2 blend_shift, bool final_cycle) { u8x3 rgb1; switch (int(blend_modes.z)) { case BLEND_MODE_2A_PIXEL_COLOR: rgb1 = inputs.pixel_color.rgb; break; case BLEND_MODE_2A_MEMORY_COLOR: rgb1 = inputs.memory_color.rgb; break; case BLEND_MODE_2A_BLEND_COLOR: rgb1 = inputs.blend_color.rgb; break; case BLEND_MODE_2A_FOG_COLOR: rgb1 = inputs.fog_color.rgb; break; } if (final_cycle) { if (color_on_coverage && !coverage_wrap) return rgb1; } u8x3 rgb0; switch (int(blend_modes.x)) { case BLEND_MODE_1A_PIXEL_COLOR: rgb0 = inputs.pixel_color.rgb; break; case BLEND_MODE_1A_MEMORY_COLOR: rgb0 = inputs.memory_color.rgb; break; case BLEND_MODE_1A_BLEND_COLOR: rgb0 = inputs.blend_color.rgb; break; case BLEND_MODE_1A_FOG_COLOR: rgb0 = inputs.fog_color.rgb; break; } if (final_cycle) { if (!blend_en || (blend_modes.y == BLEND_MODE_1B_PIXEL_ALPHA && blend_modes.w == BLEND_MODE_2B_INV_PIXEL_ALPHA && inputs.pixel_color.a == U8_C(0xff))) { return rgb0; } } u8 a0; u8 a1; switch (int(blend_modes.y)) { case BLEND_MODE_1B_PIXEL_ALPHA: a0 = inputs.pixel_color.a; break; case BLEND_MODE_1B_FOG_ALPHA: a0 = inputs.fog_color.a; break; case BLEND_MODE_1B_SHADE_ALPHA: a0 = inputs.shade_alpha; break; case BLEND_MODE_1B_ZERO: a0 = U8_C(0); break; } switch (int(blend_modes.w)) { case BLEND_MODE_2B_INV_PIXEL_ALPHA: a1 = ~a0 & U8_C(0xff); break; case BLEND_MODE_2B_MEMORY_ALPHA: a1 = inputs.memory_color.a; break; case BLEND_MODE_2B_ONE: a1 = U8_C(0xff); break; case BLEND_MODE_2B_ZERO: a1 = U8_C(0); break; } a0 >>= U8_C(3); a1 >>= U8_C(3); if (blend_modes.w == BLEND_MODE_2B_MEMORY_ALPHA) { a0 = (a0 >> blend_shift.x) & U8_C(0x3c); a1 = (a1 >> blend_shift.y) | U8_C(3); } i16x3 blended = i16x3(rgb0) * i16(a0) + i16x3(rgb1) * (i16(a1) + I16_C(1)); if (!final_cycle || force_blend) { rgb0 = u8x3(blended >> I16_C(5)); } else { // Serious funk here. Somehow the RDP implemented a divider to deal with weighted average. // Typically relevant when using blender shifters from interpenetrating Z mode. // Under normal condition, this is implemented as a straight integer divider, but // for edge cases, we need a look-up table. The results make no sense. int blend_sum = (int(a0) >> 2) + (int(a1) >> 2) + 1; blended >>= I16_C(2); blended &= I16_C(0x7ff); rgb0.r = u8(texelFetch(uBlenderDividerLUT, (blend_sum << 11) | blended.x).x); rgb0.g = u8(texelFetch(uBlenderDividerLUT, (blend_sum << 11) | blended.y).x); rgb0.b = u8(texelFetch(uBlenderDividerLUT, (blend_sum << 11) | blended.z).x); } return rgb0 & U8_C(0xff); } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/clamping.h000066400000000000000000000046131415063341600255200ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef CLAMPING_H_ #define CLAMPING_H_ #if SMALL_TYPES && 0 // This path is buggy on RADV LLVM, disable for time being. i16x4 clamp_9bit_notrunc(i16x4 color) { // [-129, -256] should clamp to 0xff, subtracting by 0x80 will underflow back to positive numbers. // [-128, -1] should clamp to 0. color -= I16_C(0x80); // Sign-extend to 9-bit. color <<= I16_C(7); color >>= I16_C(7); color += I16_C(0x80); return clamp(color, i16x4(0), i16x4(0xff)); } #else i16x4 clamp_9bit_notrunc(ivec4 color) { // [-129, -256] should clamp to 0xff, subtracting by 0x80 will underflow back to positive numbers. // [-128, -1] should clamp to 0. color -= 0x80; // Sign-extend to 9-bit. color = bitfieldExtract(color, 0, 9); color += 0x80; return i16x4(clamp(color, ivec4(0), ivec4(0xff))); } #endif u8x4 clamp_9bit(i16x4 color) { return u8x4(clamp_9bit_notrunc(color)); } int clamp_9bit(int color) { return clamp(bitfieldExtract(color - 0x80, 0, 9) + 0x80, 0, 0xff); } // Returns 18-bit UNORM depth. int clamp_z(int z) { // Similar to RGBA, we reserve an extra bit to deal with overflow and underflow. z -= (1 << 17); z <<= (31 - 18); z >>= (31 - 18); z += (1 << 17); // [0x00000, 0x3ffff] maps to self. // [0x40000, 0x5ffff] maps to 0x3ffff. // [0x60000, 0x7ffff] maps to 0. return clamp(z, 0, 0x3ffff); } #endif ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/clear_indirect_buffer.comp000066400000000000000000000024731415063341600307370ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ layout(local_size_x_id = 0) in; layout(set = 0, binding = 0, std430) writeonly buffer ClearIndirectBuffer { uvec4 indirects[]; }; void main() { indirects[gl_GlobalInvocationID.x] = uvec4(0, 1, 1, 0); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/clear_super_sampled_write_mask.comp000066400000000000000000000024531415063341600326730ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ layout(local_size_x_id = 0) in; layout(set = 0, binding = 0, std430) writeonly buffer ToClear { uint elems[]; } mask_ram; void main() { mask_ram.elems[gl_GlobalInvocationID.x] = 0u; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/clear_write_mask.comp000066400000000000000000000030231415063341600277420ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ layout(local_size_x_id = 0) in; layout(constant_id = 1) const int PAGE_STRIDE = 256; layout(set = 0, binding = 0, std430) writeonly buffer SSBO { uint write_mask[]; }; layout(set = 1, binding = 0, std140) uniform UBO { uvec4 offsets[1024]; }; void main() { uint offset = offsets[gl_WorkGroupID.x >> 2u][gl_WorkGroupID.x & 3u]; offset *= PAGE_STRIDE; write_mask[offset + gl_LocalInvocationIndex] = 0u; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/combiner.h000066400000000000000000000221211415063341600255160ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef COMBINER_H_ #define COMBINER_H_ #include "clamping.h" ivec4 special_expand(ivec4 value) { // Special sign-extend without explicit clamp. return bitfieldExtract(value - 0x80, 0, 9) + 0x80; } i16x4 combiner_equation(ivec4 a, ivec4 b, ivec4 c, ivec4 d) { // Sign-extend multiplier to 9 bits. c = bitfieldExtract(c, 0, 9); // Need this to deal with very specific 9-bit sign bits ... a = special_expand(a); b = special_expand(b); d = special_expand(d); ivec4 color = (a - b) * c; color += 0x80; return i16x4(color >> 8) + i16x4(d); } struct CombinerInputs { u8x4 constant_muladd; u8x4 constant_mulsub; u8x4 constant_mul; u8x4 constant_add; u8x4 shade; i16x4 combined; i16x4 texel0; i16x4 texel1; i16 lod_frac; i16 noise; }; const int RGB_MULADD_COMBINED = 0; const int RGB_MULADD_TEXEL0 = 1; const int RGB_MULADD_TEXEL1 = 2; const int RGB_MULADD_SHADE = 4; const int RGB_MULADD_ONE = 6; const int RGB_MULADD_NOISE = 7; const int RGB_MULSUB_COMBINED = 0; const int RGB_MULSUB_TEXEL0 = 1; const int RGB_MULSUB_TEXEL1 = 2; const int RGB_MULSUB_SHADE = 4; const int RGB_MULSUB_K4 = 7; const int RGB_MUL_COMBINED = 0; const int RGB_MUL_TEXEL0 = 1; const int RGB_MUL_TEXEL1 = 2; const int RGB_MUL_SHADE = 4; const int RGB_MUL_COMBINED_ALPHA = 7; const int RGB_MUL_TEXEL0_ALPHA = 8; const int RGB_MUL_TEXEL1_ALPHA = 9; const int RGB_MUL_SHADE_ALPHA = 11; const int RGB_MUL_LOD_FRAC = 13; const int RGB_MUL_K5 = 15; const int RGB_ADD_COMBINED = 0; const int RGB_ADD_TEXEL0 = 1; const int RGB_ADD_TEXEL1 = 2; const int RGB_ADD_SHADE = 4; const int RGB_ADD_ONE = 6; const int ALPHA_ADDSUB_COMBINED = 0; const int ALPHA_ADDSUB_TEXEL0_ALPHA = 1; const int ALPHA_ADDSUB_TEXEL1_ALPHA = 2; const int ALPHA_ADDSUB_SHADE_ALPHA = 4; const int ALPHA_ADDSUB_ONE = 6; const int ALPHA_MUL_LOD_FRAC = 0; const int ALPHA_MUL_TEXEL0_ALPHA = 1; const int ALPHA_MUL_TEXEL1_ALPHA = 2; const int ALPHA_MUL_SHADE_ALPHA = 4; ivec4 select_muladd(CombinerInputs inputs, int selector_rgb, int selector_alpha) { ivec3 res; switch (selector_rgb) { case RGB_MULADD_COMBINED: res = inputs.combined.rgb; break; case RGB_MULADD_TEXEL0: res = inputs.texel0.rgb; break; case RGB_MULADD_TEXEL1: res = inputs.texel1.rgb; break; case RGB_MULADD_SHADE: res = inputs.shade.rgb; break; case RGB_MULADD_NOISE: res = ivec3(inputs.noise); break; case RGB_MULADD_ONE: res = ivec3(0x100); break; default: res = inputs.constant_muladd.rgb; break; } int alpha; switch (selector_alpha) { case ALPHA_ADDSUB_COMBINED: alpha = inputs.combined.a; break; case ALPHA_ADDSUB_TEXEL0_ALPHA: alpha = inputs.texel0.a; break; case ALPHA_ADDSUB_TEXEL1_ALPHA: alpha = inputs.texel1.a; break; case ALPHA_ADDSUB_SHADE_ALPHA: alpha = inputs.shade.a; break; case ALPHA_ADDSUB_ONE: alpha = 0x100; break; default: alpha = inputs.constant_muladd.a; break; } return ivec4(res, alpha); } ivec4 select_mulsub(CombinerInputs inputs, int selector_rgb, int selector_alpha) { ivec3 res; switch (selector_rgb) { case RGB_MULSUB_COMBINED: res = inputs.combined.rgb; break; case RGB_MULSUB_TEXEL0: res = inputs.texel0.rgb; break; case RGB_MULSUB_TEXEL1: res = inputs.texel1.rgb; break; case RGB_MULSUB_SHADE: res = inputs.shade.rgb; break; case RGB_MULSUB_K4: res = ivec3((int(inputs.constant_mulsub.g) << 8) | inputs.constant_mulsub.b); break; default: res = inputs.constant_mulsub.rgb; break; } int alpha; switch (selector_alpha) { case ALPHA_ADDSUB_COMBINED: alpha = inputs.combined.a; break; case ALPHA_ADDSUB_TEXEL0_ALPHA: alpha = inputs.texel0.a; break; case ALPHA_ADDSUB_TEXEL1_ALPHA: alpha = inputs.texel1.a; break; case ALPHA_ADDSUB_SHADE_ALPHA: alpha = inputs.shade.a; break; case ALPHA_ADDSUB_ONE: alpha = 0x100; break; default: alpha = inputs.constant_mulsub.a; break; } return ivec4(res, alpha); } ivec4 select_mul(CombinerInputs inputs, int selector_rgb, int selector_alpha) { ivec3 res; switch (selector_rgb) { case RGB_MUL_COMBINED: res = inputs.combined.rgb; break; case RGB_MUL_COMBINED_ALPHA: res = inputs.combined.aaa; break; case RGB_MUL_TEXEL0: res = inputs.texel0.rgb; break; case RGB_MUL_TEXEL1: res = inputs.texel1.rgb; break; case RGB_MUL_SHADE: res = inputs.shade.rgb; break; case RGB_MUL_TEXEL0_ALPHA: res = inputs.texel0.aaa; break; case RGB_MUL_TEXEL1_ALPHA: res = inputs.texel1.aaa; break; case RGB_MUL_SHADE_ALPHA: res = inputs.shade.aaa; break; case RGB_MUL_LOD_FRAC: res = ivec3(inputs.lod_frac); break; case RGB_MUL_K5: res = ivec3((int(inputs.constant_mul.g) << 8) | inputs.constant_mul.b); break; default: res = inputs.constant_mul.rgb; break; } int alpha; switch (selector_alpha) { case ALPHA_MUL_LOD_FRAC: alpha = inputs.lod_frac; break; case ALPHA_MUL_TEXEL0_ALPHA: alpha = inputs.texel0.a; break; case ALPHA_MUL_TEXEL1_ALPHA: alpha = inputs.texel1.a; break; case ALPHA_MUL_SHADE_ALPHA: alpha = inputs.shade.a; break; default: alpha = inputs.constant_mul.a; break; } return ivec4(res, alpha); } ivec4 select_add(CombinerInputs inputs, int selector_rgb, int selector_alpha) { ivec3 res; switch (selector_rgb) { case RGB_ADD_COMBINED: res = inputs.combined.rgb; break; case RGB_ADD_TEXEL0: res = inputs.texel0.rgb; break; case RGB_ADD_TEXEL1: res = inputs.texel1.rgb; break; case RGB_ADD_SHADE: res = inputs.shade.rgb; break; case RGB_ADD_ONE: res = ivec3(0x100); break; default: res = inputs.constant_add.rgb; break; } int alpha; switch (selector_alpha) { case ALPHA_ADDSUB_COMBINED: alpha = inputs.combined.a; break; case ALPHA_ADDSUB_TEXEL0_ALPHA: alpha = inputs.texel0.a; break; case ALPHA_ADDSUB_TEXEL1_ALPHA: alpha = inputs.texel1.a; break; case ALPHA_ADDSUB_SHADE_ALPHA: alpha = inputs.shade.a; break; case ALPHA_ADDSUB_ONE: alpha = 0x100; break; default: alpha = inputs.constant_add.a; break; } return ivec4(res, alpha); } i16x4 combiner_cycle0(CombinerInputs inputs, u8x4 combiner_inputs_rgb, u8x4 combiner_inputs_alpha, int alpha_dith, int coverage, bool cvg_times_alpha, bool alpha_cvg_select, bool alpha_test, out u8 alpha_test_reference) { ivec4 muladd = select_muladd(inputs, combiner_inputs_rgb.x, combiner_inputs_alpha.x); ivec4 mulsub = select_mulsub(inputs, combiner_inputs_rgb.y, combiner_inputs_alpha.y); ivec4 mul = select_mul(inputs, combiner_inputs_rgb.z, combiner_inputs_alpha.z); ivec4 add = select_add(inputs, combiner_inputs_rgb.w, combiner_inputs_alpha.w); i16x4 combined = combiner_equation(muladd, mulsub, mul, add); if (alpha_test) { int clamped_alpha = clamp_9bit(combined.a); // Expands 0xff to 0x100 to avoid having to divide by 2**n - 1. int expanded_alpha = clamped_alpha + ((clamped_alpha + 1) >> 8); if (alpha_cvg_select) { int modulated_alpha; if (cvg_times_alpha) modulated_alpha = (expanded_alpha * coverage + 4) >> 3; else modulated_alpha = coverage << 5; expanded_alpha = modulated_alpha; } else expanded_alpha += alpha_dith; alpha_test_reference = u8(clamp(expanded_alpha, 0, 0xff)); } else alpha_test_reference = U8_C(0); return combined; } i16x4 combiner_cycle1(CombinerInputs inputs, u8x4 combiner_inputs_rgb, u8x4 combiner_inputs_alpha, int alpha_dith, inout int coverage, bool cvg_times_alpha, bool alpha_cvg_select) { ivec4 muladd = select_muladd(inputs, combiner_inputs_rgb.x, combiner_inputs_alpha.x); ivec4 mulsub = select_mulsub(inputs, combiner_inputs_rgb.y, combiner_inputs_alpha.y); ivec4 mul = select_mul(inputs, combiner_inputs_rgb.z, combiner_inputs_alpha.z); ivec4 add = select_add(inputs, combiner_inputs_rgb.w, combiner_inputs_alpha.w); i16x4 combined = combiner_equation(muladd, mulsub, mul, add); combined = clamp_9bit_notrunc(combined); // Expands 0xff to 0x100 to avoid having to divide by 2**n - 1. int expanded_alpha = combined.a + ((combined.a + 1) >> 8); int modulated_alpha; if (cvg_times_alpha) { modulated_alpha = (expanded_alpha * coverage + 4) >> 3; coverage = modulated_alpha >> 5; } else modulated_alpha = coverage << 5; if (alpha_cvg_select) expanded_alpha = modulated_alpha; else expanded_alpha += alpha_dith; combined.a = i16(clamp(expanded_alpha, 0, 0xff)); return combined; } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/coverage.h000066400000000000000000000047211415063341600255210ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef COVERAGE_H_ #define COVERAGE_H_ #include "data_structures.h" const int SUBPIXELS_LOG2 = 2; const int SUBPIXELS = 1 << SUBPIXELS_LOG2; u8 compute_coverage(u16x4 xleft, u16x4 xright, int x) { u16x4 xshift = u16x4(0, 4, 2, 6) + (u16(x) << U16_C(3)); bvec4 clip_lo_x01 = lessThan(xshift, xleft.xxyy); bvec4 clip_lo_x23 = lessThan(xshift, xleft.zzww); bvec4 clip_hi_x01 = greaterThanEqual(xshift, xright.xxyy); bvec4 clip_hi_x23 = greaterThanEqual(xshift, xright.zzww); u8x4 clip_x0 = u8x4(clip_lo_x01) | u8x4(clip_hi_x01); u8x4 clip_x1 = u8x4(clip_lo_x23) | u8x4(clip_hi_x23); u8x4 clip_x = clip_x0 * u8x4(1, 2, 4, 8) + clip_x1 * u8x4(16, 32, 64, 128); u8 clip_coverage = (clip_x.x | clip_x.y) | (clip_x.z | clip_x.w); return ~clip_coverage & U8_C(0xff); } const int COVERAGE_CLAMP = 0; const int COVERAGE_WRAP = 1; const int COVERAGE_ZAP = 2; const int COVERAGE_SAVE = 3; int blend_coverage(int coverage, int memory_coverage, bool blend_en, int mode) { int res = 0; switch (mode) { case COVERAGE_CLAMP: { if (blend_en) res = min(7, memory_coverage + coverage); // image_read_en to read memory coverage, otherwise, it's 7. else res = (coverage - 1) & 7; break; } case COVERAGE_WRAP: res = (coverage + memory_coverage) & 7; break; case COVERAGE_ZAP: res = 7; break; case COVERAGE_SAVE: res = memory_coverage; break; } return res; } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/data_structures.h000066400000000000000000000166751415063341600271550ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef DATA_STRUCTURES_H_ #define DATA_STRUCTURES_H_ // Data structures which are supposed to match up with rdp_data_structures.hpp. // A little dirty to duplicate like this, but it's non-trivial to share headers with C++, // especially when we need to deal with small integer types. const int TRIANGLE_SETUP_FLIP_BIT = 1 << 0; const int TRIANGLE_SETUP_DO_OFFSET_BIT = 1 << 1; const int TRIANGLE_SETUP_SKIP_XFRAC_BIT = 1 << 2; const int TRIANGLE_SETUP_INTERLACE_FIELD_BIT = 1 << 3; const int TRIANGLE_SETUP_INTERLACE_KEEP_ODD_BIT = 1 << 4; const int TRIANGLE_SETUP_DISABLE_UPSCALING_BIT = 1 << 5; const int TRIANGLE_SETUP_NATIVE_LOD_BIT = 1 << 6; const int RASTERIZATION_INTERLACE_FIELD_BIT = 1 << 0; const int RASTERIZATION_INTERLACE_KEEP_ODD_BIT = 1 << 1; const int RASTERIZATION_AA_BIT = 1 << 2; const int RASTERIZATION_PERSPECTIVE_CORRECT_BIT = 1 << 3; const int RASTERIZATION_TLUT_BIT = 1 << 4; const int RASTERIZATION_TLUT_TYPE_BIT = 1 << 5; const int RASTERIZATION_CVG_TIMES_ALPHA_BIT = 1 << 6; const int RASTERIZATION_ALPHA_CVG_SELECT_BIT = 1 << 7; const int RASTERIZATION_MULTI_CYCLE_BIT = 1 << 8; const int RASTERIZATION_TEX_LOD_ENABLE_BIT = 1 << 9; const int RASTERIZATION_SHARPEN_LOD_ENABLE_BIT = 1 << 10; const int RASTERIZATION_DETAIL_LOD_ENABLE_BIT = 1 << 11; const int RASTERIZATION_FILL_BIT = 1 << 12; const int RASTERIZATION_COPY_BIT = 1 << 13; const int RASTERIZATION_SAMPLE_MODE_BIT = 1 << 14; const int RASTERIZATION_ALPHA_TEST_BIT = 1 << 15; const int RASTERIZATION_ALPHA_TEST_DITHER_BIT = 1 << 16; const int RASTERIZATION_SAMPLE_MID_TEXEL_BIT = 1 << 17; const int RASTERIZATION_USES_TEXEL0_BIT = 1 << 18; const int RASTERIZATION_USES_TEXEL1_BIT = 1 << 19; const int RASTERIZATION_USES_LOD_BIT = 1 << 20; const int RASTERIZATION_USES_PIPELINED_TEXEL1_BIT = 1 << 21; const int RASTERIZATION_CONVERT_ONE_BIT = 1 << 22; const int RASTERIZATION_BILERP_0_BIT = 1 << 23; const int RASTERIZATION_BILERP_1_BIT = 1 << 24; const int RASTERIZATION_UPSCALING_LOG2_BIT_OFFSET = 26; const int RASTERIZATION_NEED_NOISE_BIT = 1 << 28; const int RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT = 1 << 29; const int RASTERIZATION_USE_SPECIALIZATION_CONSTANT_BIT = 1 << 30; const int DEPTH_BLEND_DEPTH_TEST_BIT = 1 << 0; const int DEPTH_BLEND_DEPTH_UPDATE_BIT = 1 << 1; const int DEPTH_BLEND_FORCE_BLEND_BIT = 1 << 3; const int DEPTH_BLEND_IMAGE_READ_ENABLE_BIT = 1 << 4; const int DEPTH_BLEND_COLOR_ON_COVERAGE_BIT = 1 << 5; const int DEPTH_BLEND_MULTI_CYCLE_BIT = 1 << 6; const int DEPTH_BLEND_AA_BIT = 1 << 7; const int DEPTH_BLEND_DITHER_ENABLE_BIT = 1 << 8; struct TriangleSetupMem { int xh, xm, xl; mem_i16 yh, ym; int dxhdy, dxmdy, dxldy; mem_i16 yl; mem_u8 flags; mem_u8 tile; }; #if SMALL_TYPES #define TriangleSetup TriangleSetupMem #else struct TriangleSetup { int xh, xm, xl; i16 yh, ym; int dxhdy, dxmdy, dxldy; i16 yl; u8 flags; u8 tile; }; #endif struct AttributeSetupMem { ivec4 rgba; ivec4 drgba_dx; ivec4 drgba_de; ivec4 drgba_dy; ivec4 stzw; ivec4 dstzw_dx; ivec4 dstzw_de; ivec4 dstzw_dy; }; #define AttributeSetup AttributeSetupMem struct SpanSetupMem { ivec4 rgba; ivec4 stzw; mem_u16x4 xleft; mem_u16x4 xright; int interpolation_base_x; int start_x; int end_x; mem_i16 lodlength; mem_u16 valid_line; }; #if SMALL_TYPES #define SpanSetup SpanSetupMem #else struct SpanSetup { ivec4 rgba; ivec4 stzw; u16x4 xleft; u16x4 xright; int interpolation_base_x; int start_x; int end_x; i16 lodlength; u16 valid_line; }; #endif struct SpanInfoOffsetsMem { int offset; int ylo; int yhi; int padding; }; #define SpanInfoOffsets SpanInfoOffsetsMem struct DerivedSetupMem { mem_u8x4 constant_muladd0; mem_u8x4 constant_mulsub0; mem_u8x4 constant_mul0; mem_u8x4 constant_add0; mem_u8x4 constant_muladd1; mem_u8x4 constant_mulsub1; mem_u8x4 constant_mul1; mem_u8x4 constant_add1; mem_u8x4 fog_color; mem_u8x4 blend_color; uint fill_color; mem_u16 dz; mem_u8 dz_compressed; mem_u8 min_lod; mem_i16x4 factors; }; #if SMALL_TYPES #define DerivedSetup DerivedSetupMem #else struct DerivedSetup { u8x4 constant_muladd0; u8x4 constant_mulsub0; u8x4 constant_mul0; u8x4 constant_add0; u8x4 constant_muladd1; u8x4 constant_mulsub1; u8x4 constant_mul1; u8x4 constant_add1; u8x4 fog_color; u8x4 blend_color; uint fill_color; u16 dz; u8 dz_compressed; u8 min_lod; i16x4 factors; }; #endif #define ScissorStateMem ivec4 struct ScissorState { int xlo, ylo, xhi, yhi; }; const int TILE_INFO_CLAMP_S_BIT = 1 << 0; const int TILE_INFO_MIRROR_S_BIT = 1 << 1; const int TILE_INFO_CLAMP_T_BIT = 1 << 2; const int TILE_INFO_MIRROR_T_BIT = 1 << 3; struct TileInfoMem { uint slo; uint shi; uint tlo; uint thi; uint offset; uint stride; mem_u8 fmt; mem_u8 size; mem_u8 palette; mem_u8 mask_s; mem_u8 shift_s; mem_u8 mask_t; mem_u8 shift_t; mem_u8 flags; }; #if SMALL_TYPES #define TileInfo TileInfoMem #else struct TileInfo { uint slo; uint shi; uint tlo; uint thi; uint offset; uint stride; u8 fmt; u8 size; u8 palette; u8 mask_s; u8 shift_s; u8 mask_t; u8 shift_t; u8 flags; }; #endif struct StaticRasterizationStateMem { mem_u8x4 combiner_inputs_rgb0; mem_u8x4 combiner_inputs_alpha0; mem_u8x4 combiner_inputs_rgb1; mem_u8x4 combiner_inputs_alpha1; uint flags; int dither; int texture_size; int texture_fmt; }; #if SMALL_TYPES #define StaticRasterizationState StaticRasterizationStateMem #else struct StaticRasterizationState { u8x4 combiner_inputs_rgb0; u8x4 combiner_inputs_alpha0; u8x4 combiner_inputs_rgb1; u8x4 combiner_inputs_alpha1; uint flags; int dither; int texture_size; int texture_fmt; }; #endif struct DepthBlendStateMem { mem_u8x4 blend_modes0; mem_u8x4 blend_modes1; uint flags; mem_u8 coverage_mode; mem_u8 z_mode; mem_u8 padding0; mem_u8 padding1; }; #if SMALL_TYPES #define DepthBlendState DepthBlendStateMem #else struct DepthBlendState { u8x4 blend_modes0; u8x4 blend_modes1; uint flags; u8 coverage_mode; u8 z_mode; u8 padding0; u8 padding1; }; #endif struct InstanceIndicesMem { mem_u8x4 static_depth_tmem; mem_u8x4 other; mem_u8 tile_infos[8]; }; struct TMEMInstance16Mem { mem_u16 elems[2048]; }; struct TMEMInstance8Mem { mem_u8 elems[4096]; }; struct ShadedData { u8x4 combined; int z_dith; u8 coverage_count; u8 shade_alpha; }; const int COVERAGE_FILL_BIT = 0x40; const int COVERAGE_COPY_BIT = 0x20; struct GlobalFBInfo { int dx_shift; int dx_mask; int fb_size; uint base_primitive_index; }; #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/data_structures_buffers.h000066400000000000000000000071001415063341600306500ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef DATA_STRUCTURES_BUFFERS_H_ #define DATA_STRUCTURES_BUFFERS_H_ #include "data_structures.h" layout(set = 0, binding = 0, std430) buffer VRAM32 { uint data[]; } vram32; layout(set = 0, binding = 0, std430) buffer VRAM16 { mem_u16 data[]; } vram16; layout(set = 0, binding = 0, std430) buffer VRAM8 { mem_u8 data[]; } vram8; layout(set = 0, binding = 1, std430) buffer HiddenVRAM { mem_u8 data[]; } hidden_vram; layout(set = 0, binding = 2, std430) readonly buffer TMEM16 { TMEMInstance16Mem instances[]; } tmem16; layout(set = 0, binding = 2, std430) readonly buffer TMEM8 { TMEMInstance8Mem instances[]; } tmem8; layout(set = 1, binding = 0, std430) readonly buffer TriangleSetupBuffer { TriangleSetupMem elems[]; } triangle_setup; #include "load_triangle_setup.h" layout(set = 1, binding = 1, std430) readonly buffer AttributeSetupBuffer { AttributeSetupMem elems[]; } attribute_setup; #include "load_attribute_setup.h" layout(set = 1, binding = 2, std430) readonly buffer DerivedSetupBuffer { DerivedSetupMem elems[]; } derived_setup; #include "load_derived_setup.h" layout(set = 1, binding = 3, std430) readonly buffer ScissorStateBuffer { ScissorStateMem elems[]; } scissor_state; #include "load_scissor_state.h" layout(set = 1, binding = 4, std430) readonly buffer StaticRasterStateBuffer { StaticRasterizationStateMem elems[]; } static_raster_state; #include "load_static_raster_state.h" layout(set = 1, binding = 5, std430) readonly buffer DepthBlendStateBuffer { DepthBlendStateMem elems[]; } depth_blend_state; #include "load_depth_blend_state.h" layout(set = 1, binding = 6, std430) readonly buffer StateIndicesBuffer { InstanceIndicesMem elems[]; } state_indices; layout(set = 1, binding = 7, std430) readonly buffer TileInfoBuffer { TileInfoMem elems[]; } tile_infos; #include "load_tile_info.h" layout(set = 1, binding = 8, std430) readonly buffer SpanSetups { SpanSetupMem elems[]; } span_setups; #include "load_span_setup.h" layout(set = 1, binding = 9, std430) readonly buffer SpanInfoOffsetBuffer { SpanInfoOffsetsMem elems[]; } span_offsets; #include "load_span_offsets.h" layout(set = 1, binding = 10) uniform utextureBuffer uBlenderDividerLUT; layout(set = 1, binding = 11, std430) readonly buffer TileBinning { uint elems[]; } tile_binning; layout(set = 1, binding = 12, std430) readonly buffer TileBinningCoarse { uint elems[]; } tile_binning_coarse; layout(set = 2, binding = 0, std140) uniform GlobalConstants { GlobalFBInfo fb_info; } global_constants; #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/debug.h000066400000000000000000000110461415063341600250120ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef DEBUG_H_ #define DEBUG_H_ #if defined(DEBUG_ENABLE) && DEBUG_ENABLE #include "debug_channel.h" const uint CODE_ASSERT_EQUAL = 0; const uint CODE_ASSERT_NOT_EQUAL = 1; const uint CODE_ASSERT_LESS_THAN = 2; const uint CODE_ASSERT_LESS_THAN_EQUAL = 3; const uint CODE_GENERIC = 4; const uint CODE_HEX = 5; void ASSERT_EQUAL_(int line, int a, int b) { if (a != b) add_debug_message(CODE_ASSERT_EQUAL, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_NOT_EQUAL_(int line, int a, int b) { if (a == b) add_debug_message(CODE_ASSERT_NOT_EQUAL, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_LESS_THAN_(int line, int a, int b) { if (a >= b) add_debug_message(CODE_ASSERT_LESS_THAN, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_LESS_THAN_EQUAL_(int line, int a, int b) { if (a > b) add_debug_message(CODE_ASSERT_LESS_THAN_EQUAL, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_EQUAL_(int line, uint a, uint b) { if (a != b) add_debug_message(CODE_ASSERT_EQUAL, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_NOT_EQUAL_(int line, uint a, uint b) { if (a == b) add_debug_message(CODE_ASSERT_NOT_EQUAL, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_LESS_THAN_(int line, uint a, uint b) { if (a >= b) add_debug_message(CODE_ASSERT_LESS_THAN, gl_GlobalInvocationID, ivec3(line, a, b)); } void ASSERT_LESS_THAN_EQUAL_(int line, uint a, uint b) { if (a > b) add_debug_message(CODE_ASSERT_LESS_THAN_EQUAL, gl_GlobalInvocationID, ivec3(line, a, b)); } void GENERIC_MESSAGE_(int line) { add_debug_message(CODE_GENERIC, gl_GlobalInvocationID, line); } void GENERIC_MESSAGE_(int line, uint v) { add_debug_message(CODE_GENERIC, gl_GlobalInvocationID, uvec2(line, v)); } void GENERIC_MESSAGE_(int line, uvec2 v) { add_debug_message(CODE_GENERIC, gl_GlobalInvocationID, uvec3(line, v)); } void GENERIC_MESSAGE_(int line, uvec3 v) { add_debug_message(CODE_GENERIC, gl_GlobalInvocationID, uvec4(line, v)); } void HEX_MESSAGE_(int line) { add_debug_message(CODE_HEX, gl_GlobalInvocationID, line); } void HEX_MESSAGE_(int line, uint v) { add_debug_message(CODE_HEX, gl_GlobalInvocationID, uvec2(line, v)); } void HEX_MESSAGE_(int line, uvec2 v) { add_debug_message(CODE_HEX, gl_GlobalInvocationID, uvec3(line, v)); } void HEX_MESSAGE_(int line, uvec3 v) { add_debug_message(CODE_HEX, gl_GlobalInvocationID, uvec4(line, v)); } #define ASERT_EQUAL(a, b) ASSERT_EQUAL_(__LINE__, a, b) #define ASERT_NOT_EQUAL(a, b) ASSERT_NOT_EQUAL_(__LINE__, a, b) #define ASERT_LESS_THAN(a, b) ASSERT_LESS_THAN_(__LINE__, a, b) #define ASERT_LESS_THAN_EQUAL(a, b) ASSERT_LESS_THAN_EQUAL_(__LINE__, a, b) #define GENERIC_MESSAGE0() GENERIC_MESSAGE_(__LINE__) #define GENERIC_MESSAGE1(a) GENERIC_MESSAGE_(__LINE__, a) #define GENERIC_MESSAGE2(a, b) GENERIC_MESSAGE_(__LINE__, uvec2(a, b)) #define GENERIC_MESSAGE3(a, b, c) GENERIC_MESSAGE_(__LINE__, uvec3(a, b, c)) #define HEX_MESSAGE0() HEX_MESSAGE_(__LINE__) #define HEX_MESSAGE1(a) HEX_MESSAGE_(__LINE__, a) #define HEX_MESSAGE2(a, b) HEX_MESSAGE_(__LINE__, uvec2(a, b)) #define HEX_MESSAGE3(a, b, c) HEX_MESSAGE_(__LINE__, uvec3(a, b, c)) #else #define ASERT_EQUAL(a, b) #define ASERT_NOT_EQUAL(a, b) #define ASERT_LESS_THAN(a, b) #define ASERT_LESS_THAN_EQUAL(a, b) #define GENERIC_MESSAGE0() #define GENERIC_MESSAGE1(a) #define GENERIC_MESSAGE2(a, b) #define GENERIC_MESSAGE3(a, b, c) #define HEX_MESSAGE0() #define HEX_MESSAGE1(a) #define HEX_MESSAGE2(a, b) #define HEX_MESSAGE3(a, b, c) #endif #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/depth_blend.comp000066400000000000000000000114321415063341600267020ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #if SUBGROUP #extension GL_KHR_shader_subgroup_basic : require #extension GL_KHR_shader_subgroup_vote : require #extension GL_KHR_shader_subgroup_ballot : require #extension GL_KHR_shader_subgroup_arithmetic : require #endif #include "small_types.h" layout(local_size_x_id = 3, local_size_y_id = 4) in; #include "noise.h" #include "debug.h" #include "data_structures_buffers.h" #include "memory_interfacing.h" layout(set = 0, binding = 3, std430) readonly buffer ColorBuffer { mem_u8x4 elems[]; } color; layout(set = 0, binding = 3, std430) readonly buffer ColorRawBuffer { uint elems[]; } raw_color; layout(set = 0, binding = 4, std430) readonly buffer DepthBuffer { int elems[]; } depth; layout(set = 0, binding = 5, std430) readonly buffer ShadeAlpha { mem_u8 elems[]; } shade_alpha; layout(set = 0, binding = 6, std430) readonly buffer Coverage { mem_i8 elems[]; } coverage; layout(std430, set = 0, binding = 7) readonly buffer TileInstanceOffset { uint elems[]; } tile_instance_offsets; layout(push_constant, std430) uniform Registers { uint fb_addr_index; uint fb_depth_addr_index; uint fb_width; uint fb_height; uint group_mask; } registers; layout(constant_id = 5) const int MAX_PRIMITIVES = 256; layout(constant_id = 6) const int MAX_WIDTH = 1024; const int TILE_BINNING_STRIDE = MAX_PRIMITIVES / 32; const int MAX_TILES_X = MAX_WIDTH / int(gl_WorkGroupSize.x); // Overall architecture of the tiling is from RetroWarp. void main() { int x = int(gl_GlobalInvocationID.x); int y = int(gl_GlobalInvocationID.y); ivec2 tile = ivec2(gl_WorkGroupID.xy); int linear_tile = tile.x + tile.y * MAX_TILES_X; int linear_tile_base = linear_tile * TILE_BINNING_STRIDE; uint coarse_binned = tile_binning_coarse.elems[linear_tile] & registers.group_mask; if (coarse_binned == 0u) return; init_tile(gl_GlobalInvocationID.xy, registers.fb_width, registers.fb_height, registers.fb_addr_index, registers.fb_depth_addr_index); while (coarse_binned != 0u) { int mask_index = findLSB(coarse_binned); coarse_binned &= ~uint(1 << mask_index); uint tile_instance = tile_instance_offsets.elems[linear_tile_base + mask_index]; uint binned = tile_binning.elems[linear_tile_base + mask_index]; while (binned != 0u) { int i = findLSB(binned); binned &= ~uint(1 << i); uint primitive_index = uint(i + 32 * mask_index); uint index = tile_instance * (gl_WorkGroupSize.x * gl_WorkGroupSize.y) + gl_LocalInvocationIndex; int coverage = int(coverage.elems[index]); if (coverage >= 0) { if ((coverage & COVERAGE_FILL_BIT) != 0) { fill_color(derived_setup.elems[primitive_index].fill_color); } else if ((coverage & COVERAGE_COPY_BIT) != 0) { uint word = raw_color.elems[index]; copy_pipeline(word, primitive_index); } else { ShadedData shaded; shaded.combined = u8x4(color.elems[index]); shaded.z_dith = depth.elems[index]; shaded.shade_alpha = u8(shade_alpha.elems[index]); shaded.coverage_count = u8(coverage); depth_blend(x, y, primitive_index, shaded); } } tile_instance++; } } finish_tile(gl_GlobalInvocationID.xy, registers.fb_width, registers.fb_height, registers.fb_addr_index, registers.fb_depth_addr_index); } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/depth_test.h000066400000000000000000000106241415063341600260700ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef DEPTH_TEST_H_ #define DEPTH_TEST_H_ #include "z_encode.h" const int Z_MODE_OPAQUE = 0; const int Z_MODE_INTERPENETRATING = 1; const int Z_MODE_TRANSPARENT = 2; const int Z_MODE_DECAL = 3; int combine_dz(int dz) { // Find largest POT which is <= dz. if (dz != 0) dz = 1 << findMSB(dz); return dz; } bool depth_test(int z, int dz, int dz_compressed, u16 current_depth, u8 current_dz, inout int coverage_count, int current_coverage_count, bool z_compare, int z_mode, bool force_blend, bool aa_enable, out bool blend_en, out bool coverage_wrap, out u8x2 blend_shift) { bool depth_pass; if (z_compare) { int memory_z = z_decompress(current_depth); int memory_dz = dz_decompress(current_dz); int precision_factor = (int(current_depth) >> 11) & 0xf; bool coplanar = false; blend_shift.x = u8(clamp(dz_compressed - current_dz, 0, 4)); blend_shift.y = u8(clamp(current_dz - dz_compressed, 0, 4)); if (precision_factor < 3) { if (memory_dz != 0x8000) memory_dz = max(memory_dz << 1, 16 >> precision_factor); else { coplanar = true; memory_dz = 0xffff; } } int combined_dz = combine_dz(dz | memory_dz); int combined_dz_interpenetrate = combined_dz; combined_dz <<= 3; bool farther = coplanar || ((z + combined_dz) >= memory_z); bool overflow = (coverage_count + current_coverage_count) >= 8; blend_en = force_blend || (!overflow && aa_enable && farther); coverage_wrap = overflow; depth_pass = false; bool max_z = memory_z == 0x3ffff; bool front = z < memory_z; int z_closest_possible = z - combined_dz; bool nearer = coplanar || (z_closest_possible <= memory_z); switch (z_mode) { case Z_MODE_OPAQUE: { // The OPAQUE mode is normal less-than. // However, if z is sufficiently close enough to memory Z, we assume that we have the same surface // and we should simply increment coverage (blend_en). // If we overflow coverage, it is clear that we have a different surface, and here we should only // consider pure in-front test and overwrite coverage. depth_pass = max_z || (overflow ? front : nearer); break; } case Z_MODE_INTERPENETRATING: { // This one is ... interesting as it affects coverage. if (!front || !farther || !overflow) { // If there is no decal-like intersect, treat this as normal opaque mode. depth_pass = max_z || (overflow ? front : nearer); } else { // Modify coverage based on how far away current surface we are somehow? combined_dz_interpenetrate = dz_compress(combined_dz_interpenetrate & 0xffff); int cvg_coeff = ((memory_z >> combined_dz_interpenetrate) - (z >> combined_dz_interpenetrate)) & 0xf; coverage_count = min((cvg_coeff * coverage_count) >> 3, 8); depth_pass = true; } break; } case Z_MODE_TRANSPARENT: { depth_pass = front || max_z; break; } case Z_MODE_DECAL: { // Decals pass if |z - memory_z| <= max(dz, memory_dz). depth_pass = farther && nearer && !max_z; break; } } } else { blend_shift.x = u8(0); blend_shift.y = u8(min(0xf - dz_compressed, 4)); bool overflow = (coverage_count + current_coverage_count) >= 8; blend_en = force_blend || (!overflow && aa_enable); coverage_wrap = overflow; depth_pass = true; } return depth_pass; } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/dither.h000066400000000000000000000051041415063341600252010ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef DITHER_H_ #define DITHER_H_ const u8 dither_matrices[2][16] = u8[][]( u8[](U8_C(0), U8_C(6), U8_C(1), U8_C(7), U8_C(4), U8_C(2), U8_C(5), U8_C(3), U8_C(3), U8_C(5), U8_C(2), U8_C(4), U8_C(7), U8_C(1), U8_C(6), U8_C(0)), u8[](U8_C(0), U8_C(4), U8_C(1), U8_C(5), U8_C(4), U8_C(0), U8_C(5), U8_C(1), U8_C(3), U8_C(7), U8_C(2), U8_C(6), U8_C(7), U8_C(3), U8_C(6), U8_C(2))); u8x3 rgb_dither(ivec3 orig_rgb, int dith) { ivec3 rgb_dith = (ivec3(dith) >> ivec3(0, 3, 6)) & 7; ivec3 rgb = mix((orig_rgb & 0xf8) + 8, ivec3(255), greaterThan(orig_rgb, ivec3(247))); ivec3 replace_sign = (rgb_dith - (orig_rgb & 7)) >> 31; ivec3 dither_diff = rgb - orig_rgb; rgb = orig_rgb + (dither_diff & replace_sign); return u8x3(rgb & 0xff); } void dither_coefficients(int x, int y, int dither_mode_rgb, int dither_mode_alpha, out int rgb_dither, out int alpha_dither) { const int DITHER_SPLAT = (1 << 0) | (1 << 3) | (1 << 6); if (dither_mode_rgb < 2) rgb_dither = int(dither_matrices[dither_mode_rgb][(y & 3) * 4 + (x & 3)]) * DITHER_SPLAT; else if (dither_mode_rgb == 2) rgb_dither = noise_get_dither_color(); else rgb_dither = 0; if (dither_mode_alpha == 3) alpha_dither = 0; else { if (dither_mode_alpha == 2) { alpha_dither = noise_get_dither_alpha(); } else { alpha_dither = dither_mode_rgb >= 2 ? int(dither_matrices[dither_mode_rgb & 1][(y & 3) * 4 + (x & 3)]) : (rgb_dither & 7); if (dither_mode_alpha == 1) alpha_dither = ~alpha_dither & 7; } } } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/extract_vram.comp000066400000000000000000000064441415063341600271400ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "small_types.h" layout(local_size_x = 16, local_size_y = 8) in; // Copies VRAM into a texture which is then consumed by VI scanout. layout(set = 0, binding = 0, rgba8ui) uniform writeonly uimage2D uAAInput; layout(set = 0, binding = 1, std430) readonly buffer RDRAM16 { mem_u16 elems[]; } vram16; layout(set = 0, binding = 1, std430) readonly buffer RDRAM32 { uint elems[]; } vram32; layout(set = 0, binding = 2, std430) readonly buffer HiddenRDRAM { mem_u8 elems[]; } hidden_vram; layout(push_constant, std430) uniform Registers { int fb_offset; int fb_width; ivec2 offset; ivec2 resolution; } registers; layout(constant_id = 0) const int RDRAM_SIZE = 0; const int RDRAM_MASK_8 = RDRAM_SIZE - 1; const int RDRAM_MASK_16 = RDRAM_MASK_8 >> 1; const int RDRAM_MASK_32 = RDRAM_MASK_16 >> 1; layout(constant_id = 2) const int SCALING_LOG2 = 0; const int SCALING_FACTOR = 1 << SCALING_LOG2; #include "vi_status.h" uvec4 fetch_color(ivec2 coord) { ivec2 slice2d = coord & (SCALING_FACTOR - 1); coord >>= SCALING_LOG2; int slice = slice2d.y * SCALING_FACTOR + slice2d.x; uvec4 color; if (FMT_RGBA8888) { int linear_coord = coord.y * registers.fb_width + coord.x + registers.fb_offset; linear_coord &= RDRAM_MASK_32; linear_coord += slice * (RDRAM_SIZE >> 2); uint word = uint(vram32.elems[linear_coord]); color = (uvec4(word) >> uvec4(24, 16, 8, 5)) & uvec4(0xff, 0xff, 0xff, 7); } else if (FMT_RGBA5551) { int linear_coord = coord.y * registers.fb_width + coord.x + registers.fb_offset; linear_coord &= RDRAM_MASK_16; linear_coord += slice * (RDRAM_SIZE >> 1); uint word = uint(vram16.elems[linear_coord ^ 1]); uint hidden_word = uint(hidden_vram.elems[linear_coord]); uint r = (word >> 8u) & 0xf8u; uint g = (word >> 3u) & 0xf8u; uint b = (word << 2u) & 0xf8u; uint a = ((word & 1u) << 2u) | hidden_word; color = uvec4(r, g, b, a); } else color = uvec4(0); if (!FETCH_AA) color.a = 7u; return color; } void main() { if (any(greaterThanEqual(gl_GlobalInvocationID.xy, registers.resolution))) return; ivec2 coord = ivec2(gl_GlobalInvocationID.xy) + registers.offset; uvec4 col = fetch_color(coord); imageStore(uAAInput, ivec2(gl_GlobalInvocationID.xy), col); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/fb_formats.h000066400000000000000000000002771415063341600260520ustar00rootroot00000000000000#ifndef FB_FORMATS_H_ #define FB_FORMATS_H_ const int FB_FMT_I4 = 0; const int FB_FMT_I8 = 1; const int FB_FMT_RGBA5551 = 2; const int FB_FMT_IA88 = 3; const int FB_FMT_RGBA8888 = 4; #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/fullscreen.vert000066400000000000000000000025271415063341600266230ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ void main() { if (gl_VertexIndex == 0) gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); else if (gl_VertexIndex == 1) gl_Position = vec4(-1.0, +3.0, 0.0, 1.0); else gl_Position = vec4(+3.0, -1.0, 0.0, 1.0); } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/interpolation.h000066400000000000000000000214451415063341600266170ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef INTERPOLATION_H_ #define INTERPOLATION_H_ #include "data_structures.h" #include "clamping.h" #include "perspective.h" u8x4 interpolate_rgba(ivec4 rgba, ivec4 drgba_dx, ivec4 drgba_dy, int dx, int coverage) { rgba += ((drgba_dx & ~0x1f) >> SCALING_LOG2) * dx; // RGBA is interpolated to 9-bit. The last bit is used to deal with clamping. // Slight underflow below 0 is clamped to 0 and slight overflow above 0xff is clamped to 0xff. // Keep 2 sign bits of precision before we complete the centroid interpolation. i16x4 snapped_rgba = i16x4(rgba >> 14); // Centroid clipping is based on the first coverage bit, and we interpolate at the first subpixel in scanline order. // With this layout we can just use findLSB to get correct result. // 0x01 0x02 // 0x04 0x08 // 0x10 0x20 // 0x40 0x80 int first_coverage = findLSB(coverage); i16 yoff = i16(first_coverage >> 1); i16 xoff = i16((first_coverage & 1) << 1) + (yoff & I16_C(1)); snapped_rgba <<= I16_C(2 + SCALING_LOG2); snapped_rgba += xoff * i16x4(drgba_dx >> 14) + yoff * i16x4(drgba_dy >> 14); snapped_rgba >>= I16_C(4 + SCALING_LOG2); return clamp_9bit(snapped_rgba); } void interpolate_st_copy(SpanSetup span, ivec4 dstzw_dx, int x, bool perspective, bool flip, out ivec2 st, out int s_offset) { int dx = flip ? (x - span.start_x) : (span.end_x - x); // For copy pipe, we should duplicate pixels when scaling, there is no filtering we can (or should!) do. dx >>= SCALING_LOG2; // Snap DX to where we perform interpolation (once per N output pixels). int snapped_dx = dx & global_constants.fb_info.dx_mask; s_offset = dx - snapped_dx; int lerp_dx = (dx >> global_constants.fb_info.dx_shift) * (flip ? 1 : -1); ivec3 stw = span.stzw.xyw + (dstzw_dx.xyw & ~0x1f) * lerp_dx; if (perspective) { bool st_overflow; st = perspective_divide(stw >> 16, st_overflow); } else st = no_perspective_divide(stw >> 16); } ivec2 interpolate_st_single(ivec4 stzw, ivec4 dstzw_dx, int dx, bool perspective) { ivec3 stw = stzw.xyw + ((dstzw_dx.xyw & ~0x1f) >> SCALING_LOG2) * dx; stw >>= 16; ivec2 st; if (perspective) { bool st_overflow; st = perspective_divide(stw, st_overflow); } else st = no_perspective_divide(stw); return st; } void interpolate_stz(ivec4 stzw, ivec4 dstzw_dx, ivec4 dstzw_dy, int dx, int coverage, bool perspective, bool uses_lod, int flip_direction, out ivec2 st, out ivec2 st_dx, out ivec2 st_dy, out int z, inout bool st_overflow) { ivec3 stw = stzw.xyw + ((dstzw_dx.xyw & ~0x1f) >> SCALING_LOG2) * dx; ivec3 stw_dx, stw_dy; if (uses_lod) { stw_dx = stw + flip_direction * ((dstzw_dx.xyw & ~0x1f) >> SCALING_LOG2); if (SCALING_FACTOR > 1) stw_dy = stw + abs(flip_direction) * ((dstzw_dy.xyw & ~0x7fff) >> SCALING_LOG2); else stw_dy = stw + ((dstzw_dy.xyw & ~0x7fff) >> SCALING_LOG2); } if (perspective) { st = perspective_divide(stw >> 16, st_overflow); if (uses_lod) { st_dx = perspective_divide(stw_dx >> 16, st_overflow); st_dy = perspective_divide(stw_dy >> 16, st_overflow); } } else { st = no_perspective_divide(stw >> 16); if (uses_lod) { st_dx = no_perspective_divide(stw_dx >> 16); st_dy = no_perspective_divide(stw_dy >> 16); } } // Ensure that interpolation snaps as we expect on every "main" pixel, // for subpixels, interpolate with quantized step factor. z = stzw.z + dstzw_dx.z * (dx >> SCALING_LOG2) + (dstzw_dx.z >> SCALING_LOG2) * (dx & (SCALING_FACTOR - 1)); int snapped_z = z >> 10; int first_coverage = findLSB(coverage); int yoff = first_coverage >> 1; int xoff = ((first_coverage & 1) << 1) + (yoff & I16_C(1)); snapped_z <<= 2 + SCALING_LOG2; snapped_z += xoff * (dstzw_dx.z >> 10) + yoff * (dstzw_dy.z >> 10); snapped_z >>= 5 + SCALING_LOG2; z = clamp_z(snapped_z); } #if 0 u8x4 interpolate_rgba(TriangleSetup setup, AttributeSetup attr, int x, int y, int coverage) { bool do_offset = (setup.flags & TRIANGLE_SETUP_DO_OFFSET_BIT) != 0; int y_interpolation_base = int(setup.yh) >> 2; int xh = setup.xh + (y - y_interpolation_base) * (setup.dxhdy << 2); ivec4 drgba_diff = ivec4(0); // In do_offset mode, varyings are latched at last subpixel line instead of first (for some reason). if (do_offset) { xh += 3 * setup.dxhdy; ivec4 drgba_deh = attr.drgba_de & ~0x1ff; ivec4 drgba_dyh = attr.drgba_dy & ~0x1ff; drgba_diff = drgba_deh - (drgba_deh >> 2) - drgba_dyh + (drgba_dyh >> 2); } int base_x = xh >> 16; int xfrac = (xh >> 8) & 0xff; ivec4 rgba = attr.rgba; rgba += attr.drgba_de * (y - y_interpolation_base); rgba = ((rgba & ~0x1ff) + drgba_diff - xfrac * ((attr.drgba_dx >> 8) & ~1)) & ~0x3ff; rgba += (attr.drgba_dx & ~0x1f) * (x - base_x); // RGBA is interpolated to 9-bit. The last bit is used to deal with clamping. // Slight underflow below 0 is clamped to 0 and slight overflow above 0xff is clamped to 0xff. // Keep 2 sign bits of precision before we complete the centroid interpolation. i16x4 snapped_rgba = i16x4(rgba >> 14); // Centroid clipping is based on the first coverage bit, and we interpolate at the first subpixel in scanline order. // FWIW, Angrylion has a very different coverage bit assignment, but we need this layout to avoid an awkward LUT. // With this layout we can just use findLSB instead. // 0x01 0x02 // 0x04 0x08 // 0x10 0x20 // 0x40 0x80 int first_coverage = findLSB(coverage); i16 yoff = i16(first_coverage >> 1); i16 xoff = i16((first_coverage & 1) << 1) + (yoff & I16_C(1)); snapped_rgba <<= I16_C(2); snapped_rgba += xoff * i16x4(attr.drgba_dx >> 14) + yoff * i16x4(attr.drgba_dy >> 14); snapped_rgba >>= I16_C(4); return clamp_9bit(snapped_rgba); } ivec3 interpolate_stw(TriangleSetup setup, AttributeSetup attr, int x, int y) { bool do_offset = (setup.flags & TRIANGLE_SETUP_DO_OFFSET_BIT) != 0; int y_interpolation_base = int(setup.yh) >> 2; int xh = setup.xh + (y - y_interpolation_base) * (setup.dxhdy << 2); ivec3 dstw_diff = ivec3(0); // In do_offset mode, varyings are latched at last subpixel line instead of first (for some reason). if (do_offset) { xh += 3 * setup.dxhdy; ivec3 dstw_deh = attr.dstzw_de.xyw & ~0x1ff; ivec3 dstw_dyh = attr.dstzw_dy.xyw & ~0x1ff; dstw_diff = dstw_deh - (dstw_deh >> 2) - dstw_dyh + (dstw_dyh >> 2); } int base_x = xh >> 16; int xfrac = (xh >> 8) & 0xff; ivec3 stw = attr.stzw.xyw; stw += attr.dstzw_de.xyw * (y - y_interpolation_base); stw = ((stw & ~0x1ff) + dstw_diff - xfrac * ((attr.dstzw_dx.xyw >> 8) & ~1)) & ~0x3ff; stw += (attr.dstzw_dx.xyw & ~0x1f) * (x - base_x); ivec3 snapped_stw = stw >> 16; return snapped_stw; } int interpolate_z(TriangleSetup setup, AttributeSetup attr, int x, int y, int coverage) { bool do_offset = (setup.flags & TRIANGLE_SETUP_DO_OFFSET_BIT) != 0; int y_interpolation_base = int(setup.yh) >> 2; int xh = setup.xh + (y - y_interpolation_base) * (setup.dxhdy << 2); int dzdiff = 0; // In do_offset mode, varyings are latched at last subpixel line instead of first (for some reason). if (do_offset) { xh += 3 * setup.dxhdy; int dzdeh = attr.dstzw_de.z & ~0x1ff; int dzdyh = attr.dstzw_dy.z & ~0x1ff; dzdiff = dzdeh - (dzdeh >> 2) - dzdyh + (dzdyh >> 2); } int base_x = xh >> 16; int xfrac = (xh >> 8) & 0xff; int z = attr.stzw.z; z += attr.dstzw_de.z * (y - y_interpolation_base); z = ((z & ~0x1ff) + dzdiff - xfrac * ((attr.dstzw_dx.z >> 8) & ~1)) & ~0x3ff; z += attr.dstzw_dx.z * (x - base_x); int snapped_z = z >> 10; int first_coverage = findLSB(coverage); int yoff = first_coverage >> 1; int xoff = ((first_coverage & 1) << 1) + (yoff & 1s); snapped_z <<= 2; snapped_z += xoff * (attr.dstzw_dx.z >> 10) + yoff * (attr.dstzw_dy.z >> 10); snapped_z >>= 5; return clamp_z(snapped_z); } #endif #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_attribute_setup.h000066400000000000000000000023761415063341600301540ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_ATTRIBUTE_SETUP_H_ #define LOAD_ATTRIBUTE_SETUP_H_ AttributeSetup load_attribute_setup(uint index) { return attribute_setup.elems[index]; } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_depth_blend_state.h000066400000000000000000000031071415063341600303720ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_DEPTH_BLEND_STATE_H_ #define LOAD_DEPTH_BLEND_STATE_H_ DepthBlendState load_depth_blend_state(uint index) { #if SMALL_TYPES return depth_blend_state.elems[index]; #else return DepthBlendState( u8x4(depth_blend_state.elems[index].blend_modes0), u8x4(depth_blend_state.elems[index].blend_modes1), depth_blend_state.elems[index].flags, u8(depth_blend_state.elems[index].coverage_mode), u8(depth_blend_state.elems[index].z_mode), u8(0), u8(0)); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_derived_setup.h000066400000000000000000000040151415063341600275630ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_DERIVED_SETUP_H_ #define LOAD_DERIVED_SETUP_H_ DerivedSetup load_derived_setup(uint index) { #if SMALL_TYPES return derived_setup.elems[index]; #else return DerivedSetup( u8x4(derived_setup.elems[index].constant_muladd0), u8x4(derived_setup.elems[index].constant_mulsub0), u8x4(derived_setup.elems[index].constant_mul0), u8x4(derived_setup.elems[index].constant_add0), u8x4(derived_setup.elems[index].constant_muladd1), u8x4(derived_setup.elems[index].constant_mulsub1), u8x4(derived_setup.elems[index].constant_mul1), u8x4(derived_setup.elems[index].constant_add1), u8x4(derived_setup.elems[index].fog_color), u8x4(derived_setup.elems[index].blend_color), uint(derived_setup.elems[index].fill_color), u16(derived_setup.elems[index].dz), u8(derived_setup.elems[index].dz_compressed), u8(derived_setup.elems[index].min_lod), i16x4(derived_setup.elems[index].factors)); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_scissor_state.h000066400000000000000000000024721415063341600276130ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_SCISSOR_STATE_H_ #define LOAD_SCISSOR_STATE_H_ ScissorState load_scissor_state(uint index) { ivec4 values = scissor_state.elems[index]; return ScissorState(values.x, values.y, values.z, values.w); } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_span_offsets.h000066400000000000000000000023631415063341600274170ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_SPAN_OFFSETS_H_ #define LOAD_SPAN_OFFSETS_H_ SpanInfoOffsets load_span_offsets(uint index) { return span_offsets.elems[index]; } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_span_setup.h000066400000000000000000000032211415063341600271000ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_SPAN_SETUP_H_ #define LOAD_SPAN_SETUP_H_ SpanSetup load_span_setup(uint index) { #if SMALL_TYPES return span_setups.elems[index]; #else return SpanSetup( span_setups.elems[index].rgba, span_setups.elems[index].stzw, u16x4(uvec4(span_setups.elems[index].xleft)), u16x4(uvec4(span_setups.elems[index].xright)), span_setups.elems[index].interpolation_base_x, span_setups.elems[index].start_x, span_setups.elems[index].end_x, i16(span_setups.elems[index].lodlength), u16(span_setups.elems[index].valid_line)); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_static_raster_state.h000066400000000000000000000033031415063341600307670ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_STATIC_RASTER_STATE_H_ #define LOAD_STATIC_RASTER_STATE_H_ StaticRasterizationState load_static_rasterization_state(uint index) { #if SMALL_TYPES return static_raster_state.elems[index]; #else return StaticRasterizationState( u8x4(static_raster_state.elems[index].combiner_inputs_rgb0), u8x4(static_raster_state.elems[index].combiner_inputs_alpha0), u8x4(static_raster_state.elems[index].combiner_inputs_rgb1), u8x4(static_raster_state.elems[index].combiner_inputs_alpha1), static_raster_state.elems[index].flags, static_raster_state.elems[index].dither, 0, 0); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_tile_info.h000066400000000000000000000034141415063341600266730ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_TILE_INFO_H_ #define LOAD_TILE_INFO_H_ TileInfo load_tile_info(uint index) { #if SMALL_TYPES return tile_infos.elems[index]; #else return TileInfo( tile_infos.elems[index].slo, tile_infos.elems[index].shi, tile_infos.elems[index].tlo, tile_infos.elems[index].thi, tile_infos.elems[index].offset, tile_infos.elems[index].stride, u8(tile_infos.elems[index].fmt), u8(tile_infos.elems[index].size), u8(tile_infos.elems[index].palette), u8(tile_infos.elems[index].mask_s), u8(tile_infos.elems[index].shift_s), u8(tile_infos.elems[index].mask_t), u8(tile_infos.elems[index].shift_t), u8(tile_infos.elems[index].flags)); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/load_triangle_setup.h000066400000000000000000000033241415063341600277500ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef LOAD_TRIANGLE_SETUP_H_ #define LOAD_TRIANGLE_SETUP_H_ TriangleSetup load_triangle_setup(uint index) { #if SMALL_TYPES return triangle_setup.elems[index]; #else return TriangleSetup( triangle_setup.elems[index].xh, triangle_setup.elems[index].xm, triangle_setup.elems[index].xl, i16(triangle_setup.elems[index].yh), i16(triangle_setup.elems[index].ym), triangle_setup.elems[index].dxhdy, triangle_setup.elems[index].dxmdy, triangle_setup.elems[index].dxldy, i16(triangle_setup.elems[index].yl), u8(triangle_setup.elems[index].flags), u8(triangle_setup.elems[index].tile)); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/masked_rdram_resolve.comp000066400000000000000000000040651415063341600306260ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ layout(local_size_x_id = 0) in; layout(constant_id = 1) const int PAGE_STRIDE = 256; layout(set = 0, binding = 0, std430) buffer RDRAM { uint rdram[]; }; layout(set = 0, binding = 1, std430) readonly buffer StagingRDRAM { uint staging_rdram[]; }; layout(set = 0, binding = 2, std430) readonly buffer WriteMaskRDRAM { uint writemask[]; }; layout(set = 1, binding = 0, std140) uniform UBO { uvec4 offsets[1024]; }; void main() { uint offset = offsets[gl_WorkGroupID.x >> 2u][gl_WorkGroupID.x & 3u]; offset *= PAGE_STRIDE; offset += gl_LocalInvocationIndex; uint mask = writemask[offset]; if (mask == ~0u) { return; } else if (mask == 0u) { uint staging = staging_rdram[offset]; rdram[offset] = staging; } else { uint word = rdram[offset]; uint staging = staging_rdram[offset]; word = (word & mask) | (staging & ~mask); rdram[offset] = word; } }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/memory_interfacing.h000066400000000000000000000374701415063341600276160ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef MEMORY_INTERFACING_H_ #define MEMORY_INTERFACING_H_ #include "dither.h" #include "z_encode.h" #include "blender.h" #include "depth_test.h" #include "coverage.h" #include "fb_formats.h" layout(constant_id = 0) const uint RDRAM_SIZE = 0; layout(constant_id = 7) const int RDRAM_INCOHERENT_SCALING = 0; const bool RDRAM_INCOHERENT = (RDRAM_INCOHERENT_SCALING & 1) != 0; const int SCALING_LOG2 = RDRAM_INCOHERENT_SCALING >> 1; const int SCALING_FACTOR = 1 << SCALING_LOG2; const bool RDRAM_UNSCALED_WRITE_MASK = RDRAM_INCOHERENT && SCALING_LOG2 == 0; const bool RDRAM_SCALED_WRITE_MASK = RDRAM_INCOHERENT && SCALING_LOG2 != 0; const uint RDRAM_MASK_8 = RDRAM_SIZE - 1u; const uint RDRAM_MASK_16 = RDRAM_MASK_8 >> 1u; const uint RDRAM_MASK_32 = RDRAM_MASK_8 >> 2u; layout(constant_id = 1) const int FB_FMT = 0; layout(constant_id = 2) const bool FB_COLOR_DEPTH_ALIAS = false; u8x4 current_color; bool current_color_dirty; u16 current_depth; u8 current_dz; bool current_depth_dirty; void load_vram_color(uint index, uint slice) { switch (FB_FMT) { case FB_FMT_I4: case FB_FMT_I8: { index &= RDRAM_MASK_8; index += slice * RDRAM_SIZE; u8 word = u8(vram8.data[index ^ 3u]); current_color = u8x4(word, word, word, u8(hidden_vram.data[index >> 1])); break; } case FB_FMT_RGBA5551: { index &= RDRAM_MASK_16; index += slice * (RDRAM_SIZE >> 1); uint word = uint(vram16.data[index ^ 1u]); uvec3 rgb = uvec3(word >> 8u, word >> 3u, word << 2u) & 0xf8u; current_color = u8x4(rgb, (u8(hidden_vram.data[index]) << U8_C(5)) | u8((word & 1) << 7)); break; } case FB_FMT_IA88: { index &= RDRAM_MASK_16; index += slice * (RDRAM_SIZE >> 1); uint word = uint(vram16.data[index ^ 1u]); current_color = u8x4(u8x3(word >> 8u), word & 0xff); break; } case FB_FMT_RGBA8888: { index &= RDRAM_MASK_32; index += slice * (RDRAM_SIZE >> 2); uint word = vram32.data[index]; current_color = u8x4((uvec4(word) >> uvec4(24, 16, 8, 0)) & uvec4(0xff)); break; } } } void alias_color_to_depth() { /* Inherit memory depth from color. */ switch (FB_FMT) { case FB_FMT_RGBA5551: { current_dz = (current_color.a >> U8_C(3)) | (current_color.b & U8_C(8)); uint word = (current_color.r & 0xf8u) << 6u; word |= (current_color.g & 0xf8u) << 1u; word |= (current_color.b & 0xf8u) >> 4u; current_depth = u16(word); break; } case FB_FMT_IA88: { uvec2 col = current_color.ra; uint word = (col.x << 8u) | col.y; uint hidden_word = (word & 1u) * 3u; current_depth = u16(word >> 2u); current_dz = u8(((word & 3u) << 2u) | hidden_word); break; } } } void alias_depth_to_color() { uint word = (uint(current_depth) << 4u) | current_dz; switch (FB_FMT) { case FB_FMT_RGBA5551: { current_color.r = u8((word >> 10u) & 0xf8u); current_color.g = u8((word >> 5u) & 0xf8u); current_color.b = u8((word >> 0u) & 0xf8u); current_color.a = u8((word & 7u) << 5u); break; } case FB_FMT_IA88: { current_color.r = u8((word >> 10u) & 0xffu); current_color.a = u8((word >> 2u) & 0xffu); break; } } current_color_dirty = true; } void load_vram_depth(uint index, uint slice) { index &= RDRAM_MASK_16; index += slice * (RDRAM_SIZE >> 1); u16 word = u16(vram16.data[index ^ 1u]); current_depth = word >> U16_C(2); current_dz = u8(hidden_vram.data[index]) | u8((word & U16_C(3)) << U16_C(2)); } void store_vram_color(uint index, uint slice) { //GENERIC_MESSAGE1(index); if (current_color_dirty) { switch (FB_FMT) { case FB_FMT_I4: { index &= RDRAM_MASK_8; index += slice * RDRAM_SIZE; vram8.data[index ^ 3u] = mem_u8(0); if ((index & 1u) != 0u) hidden_vram.data[index >> 1u] = mem_u8(current_color.a); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram8.data[(index ^ 3u) + RDRAM_SIZE] = mem_u8(0xff); } break; } case FB_FMT_I8: { index &= RDRAM_MASK_8; index += slice * RDRAM_SIZE; vram8.data[index ^ 3u] = mem_u8(current_color.r); if ((index & 1u) != 0u) hidden_vram.data[index >> 1u] = mem_u8((current_color.r & 1) * 3); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram8.data[(index ^ 3u) + RDRAM_SIZE] = mem_u8(0xff); } break; } case FB_FMT_RGBA5551: { index &= RDRAM_MASK_16; index += slice * (RDRAM_SIZE >> 1); uvec4 c = uvec4(current_color); c.rgb &= 0xf8u; uint cov = c.w >> 5u; uint word = (c.x << 8u) | (c.y << 3u) | (c.z >> 2u) | (cov >> 2u); vram16.data[index ^ 1u] = mem_u16(word); hidden_vram.data[index] = mem_u8(cov & U8_C(3)); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram16.data[(index ^ 1u) + (RDRAM_SIZE >> 1u)] = mem_u16(0xffff); } break; } case FB_FMT_IA88: { index &= RDRAM_MASK_16; index += slice * (RDRAM_SIZE >> 1); uvec2 col = current_color.ra; uint word = (col.x << 8u) | col.y; vram16.data[index ^ 1u] = mem_u16(word); hidden_vram.data[index] = mem_u8((col.y & 1) * 3); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram16.data[(index ^ 1u) + (RDRAM_SIZE >> 1u)] = mem_u16(0xffff); } break; } case FB_FMT_RGBA8888: { index &= RDRAM_MASK_32; index += slice * (RDRAM_SIZE >> 2); uvec4 col = current_color; uint word = (col.r << 24u) | (col.g << 16u) | (col.b << 8u) | (col.a << 0u); vram32.data[index] = word; hidden_vram.data[2u * index] = mem_u8((current_color.g & 1) * 3); hidden_vram.data[2u * index + 1u] = mem_u8((current_color.a & 1) * 3); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram32.data[index + (RDRAM_SIZE >> 2u)] = ~0u; } break; } } } } void store_vram_depth(uint index, uint slice) { if (!FB_COLOR_DEPTH_ALIAS) { //GENERIC_MESSAGE1(index); if (current_depth_dirty) { index &= RDRAM_MASK_16; index += slice * (RDRAM_SIZE >> 1); vram16.data[index ^ 1u] = mem_u16((current_depth << U16_C(2)) | (current_dz >> U16_C(2))); hidden_vram.data[index] = mem_u8(current_dz & U16_C(3)); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram16.data[(index ^ 1) + (RDRAM_SIZE >> 1u)] = mem_u16(0xffff); } } } } uint color_fb_index; void init_tile(uvec2 coord, uint fb_width, uint fb_height, uint fb_addr_index, uint fb_depth_addr_index) { current_color_dirty = false; current_depth_dirty = false; if (all(lessThan(coord, uvec2(fb_width, fb_height)))) { uvec2 slice2d = coord & (SCALING_FACTOR - 1); coord >>= SCALING_LOG2; uint slice = slice2d.y * SCALING_FACTOR + slice2d.x; uint index = fb_addr_index + (fb_width >> SCALING_LOG2) * coord.y + coord.x; color_fb_index = index; load_vram_color(index, slice); index = fb_depth_addr_index + (fb_width >> SCALING_LOG2) * coord.y + coord.x; load_vram_depth(index, slice); } } void emit_scaled_write_masks(uvec2 unscaled_coord, uint unscaled_fb_width) { // Merge write masks across pixels. // We reserved a chunk of memory after scaled RDRAM to store 2 bits per pixel holding // a write mask for color and depth. The resolve stage will only resolve a pixel // and trigger a write if any sub-sample was marked as written. // Write masks are organized in 4x4 blocks of unscaled pixels for locality purposes. // This guarantees a minimum number of loop iterations to resolve the write masks. uint unscaled_block = (unscaled_coord.y >> 2u) * ((unscaled_fb_width + 3u) >> 2u) + (unscaled_coord.x >> 2u); uvec2 unscaled_sub = unscaled_coord & 3u; uint word = uint(current_color_dirty) + 2u * uint(current_depth_dirty); word <<= 2u * (unscaled_sub.x + unscaled_sub.y * 4u); #if SUBGROUP // This should only need one iteration . bool is_active = true; do { if (subgroupBroadcastFirst(unscaled_block) == unscaled_block) { uint merged = subgroupOr(word); if (subgroupElect()) atomicOr(vram32.data[SCALING_FACTOR * SCALING_FACTOR * (RDRAM_SIZE >> 2) + unscaled_block], merged); is_active = false; } } while (is_active); #else // Just use atomics directly. With subgroup support, we can be a bit smarter about it. if (word != 0u) atomicOr(vram32.data[SCALING_FACTOR * SCALING_FACTOR * (RDRAM_SIZE >> 2) + unscaled_block], word); #endif } void finish_tile(uvec2 coord, uint fb_width, uint fb_height, uint fb_addr_index, uint fb_depth_addr_index) { if (all(lessThan(coord, uvec2(fb_width, fb_height)))) { uint unscaled_fb_width = fb_width >> SCALING_LOG2; uvec2 slice2d = coord & (SCALING_FACTOR - 1); coord >>= SCALING_LOG2; uint slice = slice2d.y * SCALING_FACTOR + slice2d.x; uint index = fb_addr_index + unscaled_fb_width * coord.y + coord.x; store_vram_color(index, slice); index = fb_depth_addr_index + unscaled_fb_width * coord.y + coord.x; store_vram_depth(index, slice); if (RDRAM_SCALED_WRITE_MASK) emit_scaled_write_masks(coord, unscaled_fb_width); } } u8x4 decode_memory_color(bool image_read_en) { u8 memory_coverage = image_read_en ? (current_color.a & U8_C(0xe0)) : U8_C(0xe0); u8x3 color; switch (FB_FMT) { case FB_FMT_I4: color = u8x3(0); memory_coverage = U8_C(0xe0); break; case FB_FMT_I8: color = current_color.rrr; memory_coverage = U8_C(0xe0); break; case FB_FMT_RGBA5551: color = current_color.rgb & U8_C(0xf8); break; case FB_FMT_IA88: color = current_color.rrr; break; case FB_FMT_RGBA8888: color = current_color.rgb; break; } return u8x4(color, memory_coverage); } void write_color(u8x4 col) { if (FB_FMT == FB_FMT_I4) current_color.rgb = col.rgb; else current_color = col; current_color_dirty = true; } void copy_pipeline(uint word, uint primitive_index) { switch (FB_FMT) { case FB_FMT_I4: { current_color = u8x4(0); current_color_dirty = true; break; } case FB_FMT_I8: { // Alpha testing needs to only look at the low dword for some bizarre reason. // I don't think alpha testing is supposed to be used at all with 8-bit FB ... word &= 0xffu; write_color(u8x4(word)); break; } case FB_FMT_RGBA5551: { uint r = (word >> 8) & 0xf8u; uint g = (word >> 3) & 0xf8u; uint b = (word << 2) & 0xf8u; uint a = (word & 1) * 0xe0u; write_color(u8x4(r, g, b, a)); break; } } if (FB_COLOR_DEPTH_ALIAS) alias_color_to_depth(); } void fill_color(uint col) { switch (FB_FMT) { case FB_FMT_RGBA8888: { uint r = (col >> 24u) & 0xffu; uint g = (col >> 16u) & 0xffu; uint b = (col >> 8u) & 0xffu; uint a = (col >> 0u) & 0xffu; write_color(u8x4(r, g, b, a)); break; } case FB_FMT_RGBA5551: { col >>= ((color_fb_index & 1u) ^ 1u) * 16u; uint r = (col >> 8u) & 0xf8u; uint g = (col >> 3u) & 0xf8u; uint b = (col << 2u) & 0xf8u; uint a = (col & 1u) * 0xe0u; write_color(u8x4(r, g, b, a)); break; } case FB_FMT_IA88: { col >>= ((color_fb_index & 1u) ^ 1u) * 16u; col &= 0xffffu; uint r = (col >> 8u) & 0xffu; uint a = (col >> 0u) & 0xffu; write_color(u8x4(r, r, r, a)); break; } case FB_FMT_I8: { col >>= ((color_fb_index & 3u) ^ 3u) * 8u; col &= 0xffu; write_color(u8x4(col)); break; } } if (FB_COLOR_DEPTH_ALIAS) alias_color_to_depth(); } void depth_blend(int x, int y, uint primitive_index, ShadedData shaded) { int z = shaded.z_dith >> 9; int dith = shaded.z_dith & 0x1ff; int coverage_count = shaded.coverage_count; u8x4 combined = shaded.combined; u8 shade_alpha = shaded.shade_alpha; uint blend_state_index = uint(state_indices.elems[primitive_index].static_depth_tmem.y); DerivedSetup derived = load_derived_setup(primitive_index); DepthBlendState depth_blend = load_depth_blend_state(blend_state_index); bool force_blend = (depth_blend.flags & DEPTH_BLEND_FORCE_BLEND_BIT) != 0; bool z_compare = (depth_blend.flags & DEPTH_BLEND_DEPTH_TEST_BIT) != 0; bool z_update = (depth_blend.flags & DEPTH_BLEND_DEPTH_UPDATE_BIT) != 0; bool image_read_enable = (depth_blend.flags & DEPTH_BLEND_IMAGE_READ_ENABLE_BIT) != 0; bool color_on_coverage = (depth_blend.flags & DEPTH_BLEND_COLOR_ON_COVERAGE_BIT) != 0; bool blend_multicycle = (depth_blend.flags & DEPTH_BLEND_MULTI_CYCLE_BIT) != 0; bool aa_enable = (depth_blend.flags & DEPTH_BLEND_AA_BIT) != 0; bool dither_en = (depth_blend.flags & DEPTH_BLEND_DITHER_ENABLE_BIT) != 0; bool blend_en; bool coverage_wrap; u8x2 blend_shift; u8x4 memory_color = decode_memory_color(image_read_enable); u8 memory_coverage = memory_color.a >> U8_C(5); bool z_pass = depth_test(z, derived.dz, derived.dz_compressed, current_depth, current_dz, coverage_count, memory_coverage, z_compare, depth_blend.z_mode, force_blend, aa_enable, blend_en, coverage_wrap, blend_shift); GENERIC_MESSAGE3(combined.x, combined.y, combined.z); // Pixel tests. if (z_pass && (!aa_enable || coverage_count != 0)) { // Blending BlendInputs blender_inputs = BlendInputs(combined, memory_color, derived.fog_color, derived.blend_color, shade_alpha); u8x4 blend_modes = depth_blend.blend_modes0; if (blend_multicycle) { blender_inputs.pixel_color.rgb = blender(blender_inputs, blend_modes, force_blend, blend_en, color_on_coverage, coverage_wrap, blend_shift, false); blend_modes = depth_blend.blend_modes1; } u8x3 rgb = blender(blender_inputs, blend_modes, force_blend, blend_en, color_on_coverage, coverage_wrap, blend_shift, true); // Dither if (dither_en) rgb = rgb_dither(rgb, dith); // Coverage blending int new_coverage = blend_coverage(coverage_count, memory_coverage, blend_en, depth_blend.coverage_mode); GENERIC_MESSAGE3(rgb.x, rgb.y, rgb.z); // Writeback write_color(u8x4(rgb, new_coverage << 5)); // Z-writeback. if (z_update) { current_depth = z_compress(z); current_dz = u8(derived.dz_compressed); current_depth_dirty = true; if (FB_COLOR_DEPTH_ALIAS) alias_depth_to_color(); } else if (FB_COLOR_DEPTH_ALIAS) alias_color_to_depth(); } } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/noise.h000066400000000000000000000042421415063341600250410ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef NOISE_H_ #define NOISE_H_ u16 seeded_noise = U16_C(0); // From: https://www.shadertoy.com/view/XlXcW4 with slight modifications. void reseed_noise(uint x, uint y, uint primitive_offset) { const uint NOISE_PRIME = 1103515245u; uvec3 seed = uvec3(x, y, primitive_offset); seed = ((seed >> 8u) ^ seed.yzx) * NOISE_PRIME; seed = ((seed >> 8u) ^ seed.yzx) * NOISE_PRIME; seed = ((seed >> 8u) ^ seed.yzx) * NOISE_PRIME; seeded_noise = u16(seed.x >> 16u); } i16 noise_get_combiner() { return i16(((seeded_noise & U16_C(7u)) << U16_C(6u)) | U16_C(0x20u)); } int noise_get_dither_alpha() { return int(seeded_noise & U16_C(7u)); } int noise_get_dither_color() { // 3 bits of noise for RGB separately. return int(seeded_noise & U16_C(0x1ff)); } u8 noise_get_blend_threshold() { return u8(seeded_noise & U16_C(0xffu)); } uvec3 noise_get_full_gamma_dither() { uint seed = seeded_noise; return uvec3(seed & 0x3f, (seed >> 6u) & 0x3f, ((seed >> 9u) & 0x38) | (seed & 7u)); } uvec3 noise_get_partial_gamma_dither() { return (uvec3(seeded_noise) >> uvec3(0, 1, 2)) & 1u; } #endif ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/perspective.h000066400000000000000000000103651415063341600262600ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * */ #ifndef PERSPECTIVE_H_ #define PERSPECTIVE_H_ const i16x2 perspective_table[64] = i16x2[]( i16x2(0x4000, -252 * 4), i16x2(0x3f04, -244 * 4), i16x2(0x3e10, -238 * 4), i16x2(0x3d22, -230 * 4), i16x2(0x3c3c, -223 * 4), i16x2(0x3b5d, -218 * 4), i16x2(0x3a83, -210 * 4), i16x2(0x39b1, -205 * 4), i16x2(0x38e4, -200 * 4), i16x2(0x381c, -194 * 4), i16x2(0x375a, -189 * 4), i16x2(0x369d, -184 * 4), i16x2(0x35e5, -179 * 4), i16x2(0x3532, -175 * 4), i16x2(0x3483, -170 * 4), i16x2(0x33d9, -166 * 4), i16x2(0x3333, -162 * 4), i16x2(0x3291, -157 * 4), i16x2(0x31f4, -155 * 4), i16x2(0x3159, -150 * 4), i16x2(0x30c3, -147 * 4), i16x2(0x3030, -143 * 4), i16x2(0x2fa1, -140 * 4), i16x2(0x2f15, -137 * 4), i16x2(0x2e8c, -134 * 4), i16x2(0x2e06, -131 * 4), i16x2(0x2d83, -128 * 4), i16x2(0x2d03, -125 * 4), i16x2(0x2c86, -123 * 4), i16x2(0x2c0b, -120 * 4), i16x2(0x2b93, -117 * 4), i16x2(0x2b1e, -115 * 4), i16x2(0x2aab, -113 * 4), i16x2(0x2a3a, -110 * 4), i16x2(0x29cc, -108 * 4), i16x2(0x2960, -106 * 4), i16x2(0x28f6, -104 * 4), i16x2(0x288e, -102 * 4), i16x2(0x2828, -100 * 4), i16x2(0x27c4, -98 * 4), i16x2(0x2762, -96 * 4), i16x2(0x2702, -94 * 4), i16x2(0x26a4, -92 * 4), i16x2(0x2648, -91 * 4), i16x2(0x25ed, -89 * 4), i16x2(0x2594, -87 * 4), i16x2(0x253d, -86 * 4), i16x2(0x24e7, -85 * 4), i16x2(0x2492, -83 * 4), i16x2(0x243f, -81 * 4), i16x2(0x23ee, -80 * 4), i16x2(0x239e, -79 * 4), i16x2(0x234f, -77 * 4), i16x2(0x2302, -76 * 4), i16x2(0x22b6, -74 * 4), i16x2(0x226c, -74 * 4), i16x2(0x2222, -72 * 4), i16x2(0x21da, -71 * 4), i16x2(0x2193, -70 * 4), i16x2(0x214d, -69 * 4), i16x2(0x2108, -67 * 4), i16x2(0x20c5, -67 * 4), i16x2(0x2082, -65 * 4), i16x2(0x2041, -65 * 4) ); ivec2 perspective_get_lut(int w) { int shift = min(14 - findMSB(w), 14); int normout = (w << shift) & 0x3fff; int wnorm = normout & 0xff; ivec2 table = ivec2(perspective_table[normout >> 8]); int rcp = ((table.y * wnorm) >> 10) + table.x; return ivec2(rcp, shift); } ivec2 no_perspective_divide(ivec3 stw) { return stw.xy; } // s16 divided by s1.15. // Classic approximation of a (x * rcp) >> shift with a LUT to find rcp. ivec2 perspective_divide(ivec3 stw, inout bool overflow) { int w = stw.z; bool w_carry = w <= 0; w &= 0x7fff; ivec2 table = perspective_get_lut(w); int shift = table.y; ivec2 prod = stw.xy * table.x; int temp_mask = ((1 << 30) - 1) & -((1 << 29) >> shift); ivec2 out_of_bounds = prod & temp_mask; ivec2 temp; if (shift != 14) temp = prod = prod >> (13 - shift); else temp = prod << 1; if (any(notEqual(out_of_bounds, ivec2(0)))) { if (out_of_bounds.x != temp_mask && out_of_bounds.x != 0) { if ((prod.x & (1 << 29)) == 0) temp.x = 0x7fff; else temp.x = -0x8000; overflow = true; } if (out_of_bounds.y != temp_mask && out_of_bounds.y != 0) { if ((prod.y & (1 << 29)) == 0) temp.y = 0x7fff; else temp.y = -0x8000; overflow = true; } } if (w_carry) { temp = ivec2(0x7fff); overflow = true; } // Perspective divide produces a 17-bit signed coordinate, which is later clamped to 16-bit signed. // However, the LOD computation happens in 17 bits ... return clamp(temp, ivec2(-0x10000), ivec2(0xffff)); } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/rasterizer.comp000066400000000000000000000144371415063341600266340ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "small_types.h" layout(local_size_x_id = 0, local_size_y_id = 1) in; #include "debug.h" #include "data_structures.h" layout(set = 0, binding = 0, std430) readonly buffer TriangleSetupBuffer { TriangleSetupMem elems[]; } triangle_setup; #include "load_triangle_setup.h" layout(set = 0, binding = 1, std430) readonly buffer AttributeSetupBuffer { AttributeSetupMem elems[]; } attribute_setup; #include "load_attribute_setup.h" layout(set = 0, binding = 2, std430) readonly buffer DerivedSetupBuffer { DerivedSetupMem elems[]; } derived_setup; #include "load_derived_setup.h" layout(set = 0, binding = 3, std430) readonly buffer StaticRasterStateBuffer { StaticRasterizationStateMem elems[]; } static_raster_state; #include "load_static_raster_state.h" layout(set = 0, binding = 4, std430) readonly buffer StateIndicesBuffer { InstanceIndicesMem elems[]; } state_indices; layout(set = 0, binding = 5, std430) readonly buffer SpanInfoOffsetBuffer { SpanInfoOffsetsMem elems[]; } span_offsets; #include "load_span_offsets.h" layout(set = 0, binding = 6, std430) readonly buffer SpanSetups { SpanSetupMem elems[]; } span_setups; #include "load_span_setup.h" layout(set = 0, binding = 7, std430) readonly buffer TMEM16 { TMEMInstance16Mem instances[]; } tmem16; layout(set = 0, binding = 7, std430) readonly buffer TMEM8 { TMEMInstance8Mem instances[]; } tmem8; layout(set = 0, binding = 8, std430) readonly buffer TileInfoBuffer { TileInfoMem elems[]; } tile_infos; #include "load_tile_info.h" layout(set = 2, binding = 0, std140) uniform GlobalConstants { GlobalFBInfo fb_info; } global_constants; layout(constant_id = 2) const int STATIC_STATE_FLAGS = 0; layout(constant_id = 3) const int COMBINER_INPUTS_RGB0 = 0; layout(constant_id = 4) const int COMBINER_INPUTS_ALPHA0 = 0; layout(constant_id = 5) const int COMBINER_INPUTS_RGB1 = 0; layout(constant_id = 6) const int COMBINER_INPUTS_ALPHA1 = 0; layout(constant_id = 7) const int DITHER_TEX_SIZE_TEX_FMT = 0; const int COMBINER_INPUT_RGB0_MULADD = (COMBINER_INPUTS_RGB0 >> 0) & 0xff; const int COMBINER_INPUT_RGB0_MULSUB = (COMBINER_INPUTS_RGB0 >> 8) & 0xff; const int COMBINER_INPUT_RGB0_MUL = (COMBINER_INPUTS_RGB0 >> 16) & 0xff; const int COMBINER_INPUT_RGB0_ADD = (COMBINER_INPUTS_RGB0 >> 24) & 0xff; const int COMBINER_INPUT_ALPHA0_MULADD = (COMBINER_INPUTS_ALPHA0 >> 0) & 0xff; const int COMBINER_INPUT_ALPHA0_MULSUB = (COMBINER_INPUTS_ALPHA0 >> 8) & 0xff; const int COMBINER_INPUT_ALPHA0_MUL = (COMBINER_INPUTS_ALPHA0 >> 16) & 0xff; const int COMBINER_INPUT_ALPHA0_ADD = (COMBINER_INPUTS_ALPHA0 >> 24) & 0xff; const int COMBINER_INPUT_RGB1_MULADD = (COMBINER_INPUTS_RGB1 >> 0) & 0xff; const int COMBINER_INPUT_RGB1_MULSUB = (COMBINER_INPUTS_RGB1 >> 8) & 0xff; const int COMBINER_INPUT_RGB1_MUL = (COMBINER_INPUTS_RGB1 >> 16) & 0xff; const int COMBINER_INPUT_RGB1_ADD = (COMBINER_INPUTS_RGB1 >> 24) & 0xff; const int COMBINER_INPUT_ALPHA1_MULADD = (COMBINER_INPUTS_ALPHA1 >> 0) & 0xff; const int COMBINER_INPUT_ALPHA1_MULSUB = (COMBINER_INPUTS_ALPHA1 >> 8) & 0xff; const int COMBINER_INPUT_ALPHA1_MUL = (COMBINER_INPUTS_ALPHA1 >> 16) & 0xff; const int COMBINER_INPUT_ALPHA1_ADD = (COMBINER_INPUTS_ALPHA1 >> 24) & 0xff; const int DITHER = (DITHER_TEX_SIZE_TEX_FMT >> 0) & 0xff; const int TEX_SIZE = (DITHER_TEX_SIZE_TEX_FMT >> 8) & 0xff; const int TEX_FMT = (DITHER_TEX_SIZE_TEX_FMT >> 16) & 0xff; #define RASTERIZER_SPEC_CONSTANT #include "noise.h" #include "shading.h" layout(set = 0, binding = 9, std430) writeonly buffer ColorBuffer { mem_u8x4 elems[]; } color; layout(set = 0, binding = 9, std430) writeonly buffer ColorBufferRaw { uint elems[]; } raw_color; layout(set = 0, binding = 10, std430) writeonly buffer DepthBuffer { int elems[]; } depth; layout(set = 0, binding = 11, std430) writeonly buffer ShadeAlpha { mem_u8 elems[]; } shade_alpha; layout(set = 0, binding = 12, std430) writeonly buffer Coverage { mem_i8 elems[]; } coverage; layout(set = 1, binding = 0, std430) readonly buffer TileWorkList { uvec4 elems[]; } tile_work_list; void main() { uvec4 work = tile_work_list.elems[gl_WorkGroupID.x]; int x = int(work.x * gl_WorkGroupSize.x + gl_LocalInvocationID.x); int y = int(work.y * gl_WorkGroupSize.y + gl_LocalInvocationID.y); uint tile_instance = work.z; uint primitive_index = work.w; ShadedData shaded; i8 coverage_value; uint index = tile_instance * (gl_WorkGroupSize.x * gl_WorkGroupSize.y) + gl_LocalInvocationIndex; if (shade_pixel(x, y, primitive_index, shaded)) { coverage_value = i8(shaded.coverage_count); if (coverage_value <= I8_C(8)) { // Workaround curious bug with glslang, need to cast manually to uvec4 first. color.elems[index] = mem_u8x4(uvec4(shaded.combined)); shade_alpha.elems[index] = mem_u8(shaded.shade_alpha); depth.elems[index] = shaded.z_dith; } else if ((coverage_value & COVERAGE_COPY_BIT) != 0) { // For copy pipe, we use a raw 32-bit word to represent the loaded texel. raw_color.elems[index] = shaded.z_dith; } } else coverage_value = I8_C(-1); coverage.elems[index] = mem_i8(coverage_value); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/shading.h000066400000000000000000000335001415063341600253400ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef SHADING_H_ #define SHADING_H_ #ifdef RASTERIZER_SPEC_CONSTANT const int SCALING_LOG2 = (STATIC_STATE_FLAGS >> RASTERIZATION_UPSCALING_LOG2_BIT_OFFSET) & 3; const int SCALING_FACTOR = 1 << SCALING_LOG2; #endif #include "coverage.h" #include "interpolation.h" #include "perspective.h" #include "texture.h" #include "dither.h" #include "combiner.h" bool shade_pixel(int x, int y, uint primitive_index, out ShadedData shaded) { SpanInfoOffsets span_offsets = load_span_offsets(primitive_index); if ((y < (SCALING_FACTOR * span_offsets.ylo)) || (y > (span_offsets.yhi * SCALING_FACTOR + (SCALING_FACTOR - 1)))) return false; uint setup_flags = uint(triangle_setup.elems[primitive_index].flags); if (SCALING_FACTOR > 1) { if ((setup_flags & TRIANGLE_SETUP_DISABLE_UPSCALING_BIT) != 0u) { x &= ~(SCALING_FACTOR - 1); y &= ~(SCALING_FACTOR - 1); } } SpanSetup span_setup = load_span_setup(SCALING_FACTOR * span_offsets.offset + (y - SCALING_FACTOR * span_offsets.ylo)); if (span_setup.valid_line == U16_C(0)) return false; uint setup_tile = uint(triangle_setup.elems[primitive_index].tile); AttributeSetup attr = load_attribute_setup(primitive_index); uvec4 states = uvec4(state_indices.elems[primitive_index].static_depth_tmem); uint static_state_index = states.x; uint tmem_instance_index = states.z; StaticRasterizationState static_state = load_static_rasterization_state(static_state_index); uint static_state_flags = static_state.flags; int static_state_dither = static_state.dither; u8x4 combiner_inputs_rgb0 = static_state.combiner_inputs_rgb0; u8x4 combiner_inputs_alpha0 = static_state.combiner_inputs_alpha0; u8x4 combiner_inputs_rgb1 = static_state.combiner_inputs_rgb1; u8x4 combiner_inputs_alpha1 = static_state.combiner_inputs_alpha1; #ifdef RASTERIZER_SPEC_CONSTANT if ((STATIC_STATE_FLAGS & RASTERIZATION_USE_SPECIALIZATION_CONSTANT_BIT) != 0) { static_state_flags = STATIC_STATE_FLAGS; static_state_dither = DITHER; combiner_inputs_rgb0.x = u8(COMBINER_INPUT_RGB0_MULADD); combiner_inputs_rgb0.y = u8(COMBINER_INPUT_RGB0_MULSUB); combiner_inputs_rgb0.z = u8(COMBINER_INPUT_RGB0_MUL); combiner_inputs_rgb0.w = u8(COMBINER_INPUT_RGB0_ADD); combiner_inputs_alpha0.x = u8(COMBINER_INPUT_ALPHA0_MULADD); combiner_inputs_alpha0.y = u8(COMBINER_INPUT_ALPHA0_MULSUB); combiner_inputs_alpha0.z = u8(COMBINER_INPUT_ALPHA0_MUL); combiner_inputs_alpha0.w = u8(COMBINER_INPUT_ALPHA0_ADD); combiner_inputs_rgb1.x = u8(COMBINER_INPUT_RGB1_MULADD); combiner_inputs_rgb1.y = u8(COMBINER_INPUT_RGB1_MULSUB); combiner_inputs_rgb1.z = u8(COMBINER_INPUT_RGB1_MUL); combiner_inputs_rgb1.w = u8(COMBINER_INPUT_RGB1_ADD); combiner_inputs_alpha1.x = u8(COMBINER_INPUT_ALPHA1_MULADD); combiner_inputs_alpha1.y = u8(COMBINER_INPUT_ALPHA1_MULSUB); combiner_inputs_alpha1.z = u8(COMBINER_INPUT_ALPHA1_MUL); combiner_inputs_alpha1.w = u8(COMBINER_INPUT_ALPHA1_ADD); } #endif // This is a great case for specialization constants. bool tlut = (static_state_flags & RASTERIZATION_TLUT_BIT) != 0; bool tlut_type = (static_state_flags & RASTERIZATION_TLUT_TYPE_BIT) != 0; bool sample_quad = (static_state_flags & RASTERIZATION_SAMPLE_MODE_BIT) != 0; bool cvg_times_alpha = (static_state_flags & RASTERIZATION_CVG_TIMES_ALPHA_BIT) != 0; bool alpha_cvg_select = (static_state_flags & RASTERIZATION_ALPHA_CVG_SELECT_BIT) != 0; bool perspective = (static_state_flags & RASTERIZATION_PERSPECTIVE_CORRECT_BIT) != 0; bool tex_lod_en = (static_state_flags & RASTERIZATION_TEX_LOD_ENABLE_BIT) != 0; bool sharpen_lod_en = (static_state_flags & RASTERIZATION_SHARPEN_LOD_ENABLE_BIT) != 0; bool detail_lod_en = (static_state_flags & RASTERIZATION_DETAIL_LOD_ENABLE_BIT) != 0; bool aa_enable = (static_state_flags & RASTERIZATION_AA_BIT) != 0; bool multi_cycle = (static_state_flags & RASTERIZATION_MULTI_CYCLE_BIT) != 0; bool interlace_en = (static_state_flags & RASTERIZATION_INTERLACE_FIELD_BIT) != 0; bool fill_en = (static_state_flags & RASTERIZATION_FILL_BIT) != 0; bool copy_en = (static_state_flags & RASTERIZATION_COPY_BIT) != 0; bool alpha_test = (static_state_flags & RASTERIZATION_ALPHA_TEST_BIT) != 0; bool alpha_test_dither = (static_state_flags & RASTERIZATION_ALPHA_TEST_DITHER_BIT) != 0; bool mid_texel = (static_state_flags & RASTERIZATION_SAMPLE_MID_TEXEL_BIT) != 0; bool uses_texel0 = (static_state_flags & RASTERIZATION_USES_TEXEL0_BIT) != 0; bool uses_texel1 = (static_state_flags & RASTERIZATION_USES_TEXEL1_BIT) != 0; bool uses_pipelined_texel1 = (static_state_flags & RASTERIZATION_USES_PIPELINED_TEXEL1_BIT) != 0; bool uses_lod = (static_state_flags & RASTERIZATION_USES_LOD_BIT) != 0; bool convert_one = (static_state_flags & RASTERIZATION_CONVERT_ONE_BIT) != 0; bool bilerp0 = (static_state_flags & RASTERIZATION_BILERP_0_BIT) != 0; bool bilerp1 = (static_state_flags & RASTERIZATION_BILERP_1_BIT) != 0; if ((static_state_flags & RASTERIZATION_NEED_NOISE_BIT) != 0) reseed_noise(x, y, primitive_index + global_constants.fb_info.base_primitive_index); bool flip = (setup_flags & TRIANGLE_SETUP_FLIP_BIT) != 0; if (copy_en) { bool valid = x >= span_setup.start_x && x <= span_setup.end_x; if (!valid) return false; ivec2 st; int s_offset; interpolate_st_copy(span_setup, attr.dstzw_dx, x, perspective, flip, st, s_offset); uint tile0 = uint(setup_tile) & 7u; uint tile_info_index0 = uint(state_indices.elems[primitive_index].tile_infos[tile0]); TileInfo tile_info0 = load_tile_info(tile_info_index0); #ifdef RASTERIZER_SPEC_CONSTANT if ((STATIC_STATE_FLAGS & RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT) != 0) { tile_info0.fmt = u8(TEX_FMT); tile_info0.size = u8(TEX_SIZE); } #endif int texel0 = sample_texture_copy(tile_info0, tmem_instance_index, st, s_offset, tlut, tlut_type); shaded.z_dith = texel0; shaded.coverage_count = U8_C(COVERAGE_COPY_BIT); if (alpha_test && global_constants.fb_info.fb_size == 2 && (texel0 & 1) == 0) return false; return true; } else if (fill_en) { shaded.coverage_count = U8_C(COVERAGE_FILL_BIT); return x >= span_setup.start_x && x <= span_setup.end_x; } int coverage = compute_coverage(span_setup.xleft, span_setup.xright, x); // There is no way we can gain coverage here. // Reject work as fast as possible. if (coverage == 0) return false; int coverage_count = bitCount(coverage); // If we're not using AA, only the first coverage bit is relevant. if (!aa_enable && (coverage & 1) == 0) return false; DerivedSetup derived = load_derived_setup(primitive_index); int dx = x - span_setup.interpolation_base_x; int interpolation_direction = flip ? 1 : -1; // Interpolate attributes. u8x4 shade = interpolate_rgba(span_setup.rgba, attr.drgba_dx, attr.drgba_dy, dx, coverage); ivec2 st, st_dx, st_dy; int z; bool perspective_overflow = false; int tex_interpolation_direction = interpolation_direction; if (SCALING_FACTOR > 1 && uses_lod) if ((setup_flags & TRIANGLE_SETUP_NATIVE_LOD_BIT) != 0) tex_interpolation_direction *= SCALING_FACTOR; interpolate_stz(span_setup.stzw, attr.dstzw_dx, attr.dstzw_dy, dx, coverage, perspective, uses_lod, tex_interpolation_direction, st, st_dx, st_dy, z, perspective_overflow); // Sample textures. uint tile0 = uint(setup_tile) & 7u; uint tile1 = (tile0 + 1) & 7u; uint max_level = uint(setup_tile) >> 3u; int min_lod = derived.min_lod; i16 lod_frac; if (uses_lod) { compute_lod_2cycle(tile0, tile1, lod_frac, max_level, min_lod, st, st_dx, st_dy, perspective_overflow, tex_lod_en, sharpen_lod_en, detail_lod_en); } i16x4 texel0, texel1; if (uses_texel0) { uint tile_info_index0 = uint(state_indices.elems[primitive_index].tile_infos[tile0]); TileInfo tile_info0 = load_tile_info(tile_info_index0); #ifdef RASTERIZER_SPEC_CONSTANT if ((STATIC_STATE_FLAGS & RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT) != 0) { tile_info0.fmt = u8(TEX_FMT); tile_info0.size = u8(TEX_SIZE); } #endif texel0 = sample_texture(tile_info0, tmem_instance_index, st, tlut, tlut_type, sample_quad, mid_texel, false, i16x4(0)); if (!sample_quad && !bilerp0) texel0 = texture_convert_factors(texel0, derived.factors); } // A very awkward mechanism where we peek into the next pixel, or in some cases, the next scanline's first pixel. if (uses_pipelined_texel1) { bool valid_line = uint(span_setups.elems[SCALING_FACTOR * span_offsets.offset + (y - SCALING_FACTOR * span_offsets.ylo + 1)].valid_line) != 0u; bool long_span = span_setup.lodlength >= 8; bool end_span = x == (flip ? span_setup.end_x : span_setup.start_x); if (end_span && long_span && valid_line) { ivec3 stw = span_setups.elems[SCALING_FACTOR * span_offsets.offset + (y - SCALING_FACTOR * span_offsets.ylo + 1)].stzw.xyw >> 16; if (perspective) { bool st_overflow; st = perspective_divide(stw, st_overflow); } else st = no_perspective_divide(stw); } else st = interpolate_st_single(span_setup.stzw, attr.dstzw_dx, dx + interpolation_direction * SCALING_FACTOR, perspective); tile1 = tile0; uses_texel1 = true; } if (uses_texel1) { if (convert_one && !bilerp1) { texel1 = texture_convert_factors(texel0, derived.factors); } else { uint tile_info_index1 = uint(state_indices.elems[primitive_index].tile_infos[tile1]); TileInfo tile_info1 = load_tile_info(tile_info_index1); #ifdef RASTERIZER_SPEC_CONSTANT if ((STATIC_STATE_FLAGS & RASTERIZATION_USE_STATIC_TEXTURE_SIZE_FORMAT_BIT) != 0) { tile_info1.fmt = u8(TEX_FMT); tile_info1.size = u8(TEX_SIZE); } #endif texel1 = sample_texture(tile_info1, tmem_instance_index, st, tlut, tlut_type, sample_quad, mid_texel, convert_one, texel0); if (!sample_quad && !tlut && !bilerp1) texel1 = texture_convert_factors(texel1, derived.factors); } } int rgb_dith, alpha_dith; dither_coefficients(x, y >> int(interlace_en), static_state_dither >> 2, static_state_dither & 3, rgb_dith, alpha_dith); // Run combiner. u8x4 combined; u8 alpha_reference; if (multi_cycle) { CombinerInputs combined_inputs = CombinerInputs(derived.constant_muladd0, derived.constant_mulsub0, derived.constant_mul0, derived.constant_add0, shade, u8x4(0), texel0, texel1, lod_frac, noise_get_combiner()); combined_inputs.combined = combiner_cycle0(combined_inputs, combiner_inputs_rgb0, combiner_inputs_alpha0, alpha_dith, coverage_count, cvg_times_alpha, alpha_cvg_select, alpha_test, alpha_reference); combined_inputs.constant_muladd = derived.constant_muladd1; combined_inputs.constant_mulsub = derived.constant_mulsub1; combined_inputs.constant_mul = derived.constant_mul1; combined_inputs.constant_add = derived.constant_add1; // Pipelining, texel1 is promoted to texel0 in cycle1. // I don't think hardware ever intended for you to access texels in second cycle due to this nature. i16x4 tmp_texel = combined_inputs.texel0; combined_inputs.texel0 = combined_inputs.texel1; // Following the pipelining, texel1 should become texel0 of next pixel, // but let's not go there ... combined_inputs.texel1 = tmp_texel; combined = u8x4(combiner_cycle1(combined_inputs, combiner_inputs_rgb1, combiner_inputs_alpha1, alpha_dith, coverage_count, cvg_times_alpha, alpha_cvg_select)); } else { CombinerInputs combined_inputs = CombinerInputs(derived.constant_muladd1, derived.constant_mulsub1, derived.constant_mul1, derived.constant_add1, shade, u8x4(0), texel0, texel1, lod_frac, noise_get_combiner()); combined = u8x4(combiner_cycle1(combined_inputs, combiner_inputs_rgb1, combiner_inputs_alpha1, alpha_dith, coverage_count, cvg_times_alpha, alpha_cvg_select)); alpha_reference = combined.a; } // After combiner, color can be modified to 0 through alpha-to-cvg, so check for potential write_enable here. // If we're not using AA, the first coverage bit is used instead, coverage count is ignored. if (aa_enable && coverage_count == 0) return false; if (alpha_test) { u8 alpha_threshold; if (alpha_test_dither) alpha_threshold = noise_get_blend_threshold(); else alpha_threshold = derived.blend_color.a; if (alpha_reference < alpha_threshold) return false; } shaded.combined = combined; shaded.z_dith = (z << 9) | rgb_dith; shaded.coverage_count = u8(coverage_count); // Shade alpha needs to be passed separately since it might affect the blending stage. shaded.shade_alpha = u8(min(shade.a + alpha_dith, 0xff)); return true; } #endif ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/slangmosh.hpp000066400000000000000000532646151415063341600263030ustar00rootroot00000000000000// Autogenerated from slangmosh, do not edit. #pragma once #include namespace RDP { static const uint32_t spirv_bank[] = { 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000be6u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000042fu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001c7u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000001c8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001c8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001c8u, 0x00000002u, 0x00040047u, 0x000001cau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001cau, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001d2u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000001d3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001d3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001d3u, 0x00000002u, 0x00040047u, 0x000001d5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001d5u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000341u, 0x00000006u, 0x00000002u, 0x00040048u, 0x00000342u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000342u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000342u, 0x00000002u, 0x00040047u, 0x00000344u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000344u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000429u, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000042au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000042au, 0x00000002u, 0x00040047u, 0x0000042cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000042cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000042fu, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x0000043fu, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000440u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000441u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000442u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000442u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000442u, 0x00000002u, 0x00040047u, 0x00000444u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000444u, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000044bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000044bu, 0x00000002u, 0x00050048u, 0x0000045bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000045bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000045bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000045bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000045bu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000045bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000045bu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000045bu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000045bu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000045bu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000045bu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000045bu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000045bu, 0x0000000cu, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000045bu, 0x0000000du, 0x00000023u, 0x00000034u, 0x00050048u, 0x0000045bu, 0x0000000eu, 0x00000023u, 0x00000038u, 0x00050048u, 0x0000045bu, 0x0000000fu, 0x00000023u, 0x0000003cu, 0x00040047u, 0x0000045du, 0x00000006u, 0x00000040u, 0x00050048u, 0x0000045eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000045eu, 0x00000002u, 0x00040047u, 0x00000460u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000460u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000004c3u, 0x00000001u, 0x00000000u, 0x00040047u, 0x000004c4u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00030016u, 0x00000008u, 0x00000020u, 0x00040020u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00050021u, 0x0000000au, 0x00000006u, 0x00000007u, 0x00000009u, 0x0012001eu, 0x0000000fu, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000010u, 0x00000007u, 0x0000000fu, 0x00020014u, 0x00000011u, 0x00040020u, 0x00000012u, 0x00000007u, 0x00000011u, 0x00070021u, 0x00000013u, 0x00000002u, 0x00000010u, 0x00000007u, 0x00000012u, 0x00000012u, 0x00050021u, 0x0000001au, 0x00000002u, 0x00000010u, 0x00000007u, 0x0004002bu, 0x00000008u, 0x00000025u, 0x3f000000u, 0x0004002bu, 0x00000006u, 0x0000002du, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000030u, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000032u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000035u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x0000003cu, 0x000003ffu, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000040u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000051u, 0xfffffffeu, 0x0004002bu, 0x00000006u, 0x00000058u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x0000005cu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x00000098u, 0x00000003u, 0x0003002au, 0x00000011u, 0x000000bbu, 0x00030029u, 0x00000011u, 0x000000ecu, 0x0004002bu, 0x00000006u, 0x0000011au, 0x0000000du, 0x0004002bu, 0x00000006u, 0x00000153u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000015cu, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000001aeu, 0x00000005u, 0x00040015u, 0x000001c4u, 0x00000020u, 0x00000000u, 0x00040020u, 0x000001c5u, 0x00000007u, 0x000001c4u, 0x0003001du, 0x000001c7u, 0x000001c4u, 0x0003001eu, 0x000001c8u, 0x000001c7u, 0x00040020u, 0x000001c9u, 0x0000000cu, 0x000001c8u, 0x0004003bu, 0x000001c9u, 0x000001cau, 0x0000000cu, 0x00040020u, 0x000001cdu, 0x0000000cu, 0x000001c4u, 0x00040015u, 0x000001d1u, 0x00000008u, 0x00000000u, 0x0003001du, 0x000001d2u, 0x000001d1u, 0x0003001eu, 0x000001d3u, 0x000001d2u, 0x00040020u, 0x000001d4u, 0x0000000cu, 0x000001d3u, 0x0004003bu, 0x000001d4u, 0x000001d5u, 0x0000000cu, 0x00040020u, 0x000001d8u, 0x0000000cu, 0x000001d1u, 0x0004002bu, 0x00000006u, 0x000001dcu, 0x00000018u, 0x0004002bu, 0x000001c4u, 0x000001fdu, 0x00000010u, 0x0004002bu, 0x000001c4u, 0x000001ffu, 0x000000ffu, 0x0004002bu, 0x000001c4u, 0x00000203u, 0x00000000u, 0x0004002bu, 0x000001c4u, 0x00000207u, 0x00000008u, 0x0004002bu, 0x000001c4u, 0x0000020eu, 0x00000018u, 0x0004002bu, 0x000001c4u, 0x0000021bu, 0x00000001u, 0x0004002bu, 0x000001c4u, 0x00000221u, 0x0000ffffu, 0x00040020u, 0x00000224u, 0x00000006u, 0x000001c4u, 0x0004003bu, 0x00000224u, 0x00000225u, 0x00000006u, 0x00040020u, 0x00000227u, 0x00000006u, 0x00000011u, 0x0004003bu, 0x00000227u, 0x00000228u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000022cu, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x000002ceu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x000002e0u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x000002e6u, 0x00000007u, 0x00040015u, 0x00000340u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000341u, 0x00000340u, 0x0003001eu, 0x00000342u, 0x00000341u, 0x00040020u, 0x00000343u, 0x0000000cu, 0x00000342u, 0x0004003bu, 0x00000343u, 0x00000344u, 0x0000000cu, 0x00040020u, 0x00000348u, 0x0000000cu, 0x00000340u, 0x0004002bu, 0x00000006u, 0x00000393u, 0xfffffff8u, 0x0004002bu, 0x00000006u, 0x000003c8u, 0xffffffffu, 0x0004002bu, 0x00000006u, 0x000003cdu, 0x0000001cu, 0x0004002bu, 0x000001c4u, 0x00000428u, 0x00000800u, 0x0004001cu, 0x00000429u, 0x00000340u, 0x00000428u, 0x0003001eu, 0x0000042au, 0x00000429u, 0x00040020u, 0x0000042bu, 0x0000000cu, 0x0000042au, 0x0004003bu, 0x0000042bu, 0x0000042cu, 0x0000000cu, 0x00040017u, 0x0000042du, 0x000001c4u, 0x00000003u, 0x00040020u, 0x0000042eu, 0x00000001u, 0x0000042du, 0x0004003bu, 0x0000042eu, 0x0000042fu, 0x00000001u, 0x00040020u, 0x00000430u, 0x00000001u, 0x000001c4u, 0x0004002bu, 0x00000006u, 0x0000043du, 0x00000400u, 0x0004001cu, 0x0000043fu, 0x00000340u, 0x00000428u, 0x0003001eu, 0x00000440u, 0x0000043fu, 0x0003001du, 0x00000441u, 0x00000440u, 0x0003001eu, 0x00000442u, 0x00000441u, 0x00040020u, 0x00000443u, 0x0000000cu, 0x00000442u, 0x0004003bu, 0x00000443u, 0x00000444u, 0x0000000cu, 0x0003001eu, 0x0000044bu, 0x00000006u, 0x00040020u, 0x0000044cu, 0x00000009u, 0x0000044bu, 0x0004003bu, 0x0000044cu, 0x0000044du, 0x00000009u, 0x00040020u, 0x0000044eu, 0x00000009u, 0x00000006u, 0x0012001eu, 0x0000045bu, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000006u, 0x00000006u, 0x0004002bu, 0x000001c4u, 0x0000045cu, 0x00000100u, 0x0004001cu, 0x0000045du, 0x0000045bu, 0x0000045cu, 0x0003001eu, 0x0000045eu, 0x0000045du, 0x00040020u, 0x0000045fu, 0x00000002u, 0x0000045eu, 0x0004003bu, 0x0000045fu, 0x00000460u, 0x00000002u, 0x00040020u, 0x00000462u, 0x00000002u, 0x0000045bu, 0x0004002bu, 0x00000006u, 0x0000047cu, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x00000485u, 0x0000000fu, 0x00040032u, 0x000001c4u, 0x000004c3u, 0x00000001u, 0x00060033u, 0x0000042du, 0x000004c4u, 0x000004c3u, 0x0000021bu, 0x0000021bu, 0x0003002eu, 0x00000006u, 0x000008f6u, 0x0003002eu, 0x00000008u, 0x000008f7u, 0x00030001u, 0x00000006u, 0x000009a9u, 0x00030001u, 0x00000006u, 0x00000b92u, 0x00030001u, 0x00000006u, 0x00000bccu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000927u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000926u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000925u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000924u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000923u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000922u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000921u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000920u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091eu, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000091du, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000091cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000090du, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000090cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000090bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000090au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000909u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000908u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000907u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000906u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000905u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000904u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000903u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000902u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c1u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000008c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b7u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000008b6u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000008b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000089eu, 0x00000007u, 0x0005003bu, 0x00000012u, 0x00000776u, 0x00000007u, 0x000000bbu, 0x0004003bu, 0x00000007u, 0x00000777u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000779u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000077au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000077bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000077cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000077du, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000077eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000077fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000780u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000781u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000782u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000783u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x00000784u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000785u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000786u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000787u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000788u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000789u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000078au, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000078bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000078cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000078du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000078eu, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x0000078fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000076fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000768u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000761u, 0x00000007u, 0x0005003bu, 0x00000012u, 0x00000593u, 0x00000007u, 0x000000bbu, 0x0004003bu, 0x00000007u, 0x00000594u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000595u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000596u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000597u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000598u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000599u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a0u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000005a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a3u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000005a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a6u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x000005a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005afu, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000005b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b5u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000005b6u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000005b7u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000005b8u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000005b9u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000005bau, 0x00000007u, 0x0005003bu, 0x00000012u, 0x000004ceu, 0x00000007u, 0x000000bbu, 0x0004003bu, 0x00000007u, 0x000004cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004d7u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000004d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000436u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x0000043bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000044au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000048eu, 0x00000007u, 0x0004003bu, 0x00000012u, 0x00000492u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004a1u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x000004a2u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x000004a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004afu, 0x00000007u, 0x0003003eu, 0x00000228u, 0x000000bbu, 0x00050041u, 0x00000430u, 0x00000431u, 0x0000042fu, 0x00000203u, 0x0004003du, 0x000001c4u, 0x00000432u, 0x00000431u, 0x00060041u, 0x00000348u, 0x00000433u, 0x0000042cu, 0x0000003fu, 0x00000432u, 0x0004003du, 0x00000340u, 0x00000434u, 0x00000433u, 0x00040071u, 0x000001c4u, 0x00000435u, 0x00000434u, 0x0003003eu, 0x00000225u, 0x00000435u, 0x0004007cu, 0x00000006u, 0x00000439u, 0x00000432u, 0x000500c6u, 0x00000006u, 0x0000043au, 0x00000439u, 0x00000032u, 0x0003003eu, 0x00000436u, 0x0000043au, 0x000500afu, 0x00000011u, 0x0000043eu, 0x0000043au, 0x0000043du, 0x0003003eu, 0x0000043bu, 0x0000043eu, 0x0004003du, 0x000001c4u, 0x00000447u, 0x00000225u, 0x00040071u, 0x00000340u, 0x00000448u, 0x00000447u, 0x00080041u, 0x00000348u, 0x00000449u, 0x00000444u, 0x0000003fu, 0x0000003fu, 0x0000003fu, 0x00000432u, 0x0003003eu, 0x00000449u, 0x00000448u, 0x00050041u, 0x0000044eu, 0x0000044fu, 0x0000044du, 0x0000003fu, 0x0004003du, 0x00000006u, 0x00000450u, 0x0000044fu, 0x0003003eu, 0x0000044au, 0x00000450u, 0x0003003eu, 0x00000451u, 0x0000003fu, 0x000200f9u, 0x00000452u, 0x000200f8u, 0x00000452u, 0x000700f5u, 0x00000006u, 0x00000a32u, 0x000009a9u, 0x00000005u, 0x00000b38u, 0x00000455u, 0x000700f5u, 0x00000006u, 0x000009a8u, 0x000009a9u, 0x00000005u, 0x00000aeeu, 0x00000455u, 0x000700f5u, 0x00000006u, 0x00000936u, 0x0000003fu, 0x00000005u, 0x000004b3u, 0x00000455u, 0x000500b1u, 0x00000011u, 0x00000459u, 0x00000936u, 0x00000450u, 0x000400f6u, 0x00000454u, 0x00000455u, 0x00000000u, 0x000400fau, 0x00000459u, 0x00000453u, 0x00000454u, 0x000200f8u, 0x00000453u, 0x00060041u, 0x00000462u, 0x00000463u, 0x00000460u, 0x0000003fu, 0x00000936u, 0x0004003du, 0x0000045bu, 0x00000464u, 0x00000463u, 0x00050051u, 0x00000006u, 0x00000465u, 0x00000464u, 0x00000000u, 0x0003003eu, 0x000008b3u, 0x00000465u, 0x00050051u, 0x00000006u, 0x00000467u, 0x00000464u, 0x00000001u, 0x0003003eu, 0x000008b4u, 0x00000467u, 0x00050051u, 0x00000008u, 0x00000469u, 0x00000464u, 0x00000002u, 0x0003003eu, 0x000008b5u, 0x00000469u, 0x00050051u, 0x00000008u, 0x0000046bu, 0x00000464u, 0x00000003u, 0x0003003eu, 0x000008b6u, 0x0000046bu, 0x00050051u, 0x00000006u, 0x0000046du, 0x00000464u, 0x00000004u, 0x0003003eu, 0x000008b7u, 0x0000046du, 0x00050051u, 0x00000006u, 0x0000046fu, 0x00000464u, 0x00000005u, 0x0003003eu, 0x000008b8u, 0x0000046fu, 0x00050051u, 0x00000006u, 0x00000471u, 0x00000464u, 0x00000006u, 0x0003003eu, 0x000008b9u, 0x00000471u, 0x00050051u, 0x00000006u, 0x00000473u, 0x00000464u, 0x00000007u, 0x0003003eu, 0x000008bau, 0x00000473u, 0x00050051u, 0x00000006u, 0x00000475u, 0x00000464u, 0x00000008u, 0x0003003eu, 0x000008bbu, 0x00000475u, 0x00050051u, 0x00000006u, 0x00000477u, 0x00000464u, 0x00000009u, 0x0003003eu, 0x000008bcu, 0x00000477u, 0x00050051u, 0x00000006u, 0x00000479u, 0x00000464u, 0x0000000au, 0x0003003eu, 0x000008bdu, 0x00000479u, 0x00050051u, 0x00000006u, 0x0000047bu, 0x00000464u, 0x0000000bu, 0x0003003eu, 0x000008beu, 0x0000047bu, 0x00050051u, 0x00000006u, 0x0000047eu, 0x00000464u, 0x0000000cu, 0x0003003eu, 0x000008bfu, 0x0000047eu, 0x00050051u, 0x00000008u, 0x00000480u, 0x00000464u, 0x0000000du, 0x0003003eu, 0x000008c0u, 0x00000480u, 0x00050051u, 0x00000006u, 0x00000482u, 0x00000464u, 0x0000000eu, 0x0003003eu, 0x000008c1u, 0x00000482u, 0x00050051u, 0x00000006u, 0x00000484u, 0x00000464u, 0x0000000fu, 0x0003003eu, 0x000008c2u, 0x00000484u, 0x000500aau, 0x00000011u, 0x00000489u, 0x0000047eu, 0x00000032u, 0x000300f7u, 0x0000048bu, 0x00000000u, 0x000400fau, 0x00000489u, 0x0000048au, 0x00000491u, 0x000200f8u, 0x0000048au, 0x00130050u, 0x0000000fu, 0x000008d3u, 0x00000465u, 0x00000467u, 0x00000469u, 0x0000046bu, 0x0000046du, 0x0000046fu, 0x00000471u, 0x00000473u, 0x00000475u, 0x00000477u, 0x00000479u, 0x0000047bu, 0x0000047eu, 0x00000480u, 0x00000482u, 0x00000484u, 0x0003003eu, 0x000008f8u, 0x0000046du, 0x0003003eu, 0x000008f9u, 0x00000471u, 0x0003003eu, 0x000008fau, 0x00000473u, 0x0003003eu, 0x000008fbu, 0x00000475u, 0x0003003eu, 0x000008fcu, 0x00000479u, 0x0003003eu, 0x0000048eu, 0x0000043au, 0x0003003eu, 0x000004ceu, 0x000000bbu, 0x000300f7u, 0x000004d9u, 0x00000000u, 0x000300fbu, 0x00000203u, 0x000004dau, 0x000200f8u, 0x000004dau, 0x000500c7u, 0x00000006u, 0x000004ddu, 0x00000475u, 0x0000022cu, 0x000500c3u, 0x00000006u, 0x000004deu, 0x000004ddu, 0x00000032u, 0x0003003eu, 0x000004cfu, 0x000004deu, 0x00050082u, 0x00000006u, 0x000004e1u, 0x0000043au, 0x000004deu, 0x000500c7u, 0x00000006u, 0x000004e2u, 0x000004e1u, 0x00000030u, 0x0003003eu, 0x000004d0u, 0x000004e2u, 0x00050082u, 0x00000006u, 0x000004e7u, 0x00000471u, 0x00000479u, 0x000500aau, 0x00000011u, 0x000004e8u, 0x000004e7u, 0x00000043u, 0x000300f7u, 0x000004e9u, 0x00000000u, 0x000400fau, 0x000004e8u, 0x000004eau, 0x000004ebu, 0x000200f8u, 0x000004eau, 0x000500c3u, 0x00000006u, 0x000004edu, 0x000004e2u, 0x00000043u, 0x0003003eu, 0x000004d1u, 0x000004edu, 0x00050082u, 0x00000006u, 0x000004f0u, 0x00000471u, 0x00000043u, 0x000500c4u, 0x00000006u, 0x000004f2u, 0x000004edu, 0x000004f0u, 0x0003003eu, 0x000004d1u, 0x000004f2u, 0x000500afu, 0x00000011u, 0x000004f6u, 0x000004f2u, 0x00000473u, 0x000300f7u, 0x000004f7u, 0x00000000u, 0x000400fau, 0x000004f6u, 0x000004f8u, 0x000004f7u, 0x000200f8u, 0x000004f8u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x000004f7u, 0x000200f9u, 0x000004e9u, 0x000200f8u, 0x000004ebu, 0x000500aau, 0x00000011u, 0x000004feu, 0x000004e7u, 0x00000032u, 0x000300f7u, 0x000004ffu, 0x00000000u, 0x000400fau, 0x000004feu, 0x00000500u, 0x00000501u, 0x000200f8u, 0x00000500u, 0x000500c7u, 0x00000006u, 0x00000503u, 0x000004e2u, 0x0000015cu, 0x000500aau, 0x00000011u, 0x00000504u, 0x00000503u, 0x0000003fu, 0x000300f7u, 0x00000505u, 0x00000000u, 0x000400fau, 0x00000504u, 0x00000506u, 0x00000507u, 0x000200f8u, 0x00000506u, 0x000500aau, 0x00000011u, 0x0000050cu, 0x00000471u, 0x00000043u, 0x000600a9u, 0x00000006u, 0x0000050du, 0x0000050cu, 0x00000043u, 0x0000003fu, 0x00050080u, 0x00000006u, 0x0000050eu, 0x00000479u, 0x0000050du, 0x0003003eu, 0x000004d2u, 0x0000050eu, 0x000500c7u, 0x00000006u, 0x00000510u, 0x000004e2u, 0x00000393u, 0x000500c3u, 0x00000006u, 0x00000512u, 0x00000510u, 0x0000050eu, 0x0003003eu, 0x000004d1u, 0x00000512u, 0x000500afu, 0x00000011u, 0x00000516u, 0x00000512u, 0x00000473u, 0x000300f7u, 0x00000517u, 0x00000000u, 0x000400fau, 0x00000516u, 0x00000518u, 0x00000517u, 0x000200f8u, 0x00000518u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000517u, 0x000200f9u, 0x00000505u, 0x000200f8u, 0x00000507u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000505u, 0x000200f9u, 0x000004ffu, 0x000200f8u, 0x00000501u, 0x000500aau, 0x00000011u, 0x0000051du, 0x00000471u, 0x00000479u, 0x000300f7u, 0x0000051eu, 0x00000000u, 0x000400fau, 0x0000051du, 0x0000051fu, 0x00000520u, 0x000200f8u, 0x0000051fu, 0x000500c7u, 0x00000006u, 0x00000522u, 0x000004e2u, 0x00000040u, 0x000500aau, 0x00000011u, 0x00000523u, 0x00000522u, 0x0000003fu, 0x000300f7u, 0x00000524u, 0x00000000u, 0x000400fau, 0x00000523u, 0x00000525u, 0x00000526u, 0x000200f8u, 0x00000525u, 0x000500aau, 0x00000011u, 0x0000052bu, 0x00000471u, 0x00000043u, 0x000600a9u, 0x00000006u, 0x0000052cu, 0x0000052bu, 0x00000043u, 0x0000003fu, 0x00050080u, 0x00000006u, 0x0000052du, 0x00000479u, 0x0000052cu, 0x0003003eu, 0x000004d3u, 0x0000052du, 0x000500c7u, 0x00000006u, 0x0000052fu, 0x000004e2u, 0x000002e0u, 0x000500c3u, 0x00000006u, 0x00000531u, 0x0000052fu, 0x0000052du, 0x0003003eu, 0x000004d1u, 0x00000531u, 0x000500afu, 0x00000011u, 0x00000535u, 0x00000531u, 0x00000473u, 0x000300f7u, 0x00000536u, 0x00000000u, 0x000400fau, 0x00000535u, 0x00000537u, 0x00000536u, 0x000200f8u, 0x00000537u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000536u, 0x000200f9u, 0x00000524u, 0x000200f8u, 0x00000526u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000524u, 0x000200f9u, 0x0000051eu, 0x000200f8u, 0x00000520u, 0x000500aau, 0x00000011u, 0x0000053du, 0x000004e7u, 0x000003c8u, 0x000300f7u, 0x0000053eu, 0x00000000u, 0x000400fau, 0x0000053du, 0x0000053fu, 0x00000540u, 0x000200f8u, 0x0000053fu, 0x000500c7u, 0x00000006u, 0x00000542u, 0x000004e2u, 0x000003cdu, 0x000500aau, 0x00000011u, 0x00000543u, 0x00000542u, 0x0000003fu, 0x000300f7u, 0x00000544u, 0x00000000u, 0x000400fau, 0x00000543u, 0x00000545u, 0x00000546u, 0x000200f8u, 0x00000545u, 0x0003003eu, 0x000004d4u, 0x00000479u, 0x000500c3u, 0x00000006u, 0x0000054bu, 0x000004e2u, 0x00000479u, 0x000500c7u, 0x00000006u, 0x0000054cu, 0x0000054bu, 0x00000393u, 0x0003003eu, 0x000004d1u, 0x0000054cu, 0x000500afu, 0x00000011u, 0x00000550u, 0x0000054cu, 0x00000473u, 0x000300f7u, 0x00000551u, 0x00000000u, 0x000400fau, 0x00000550u, 0x00000552u, 0x00000551u, 0x000200f8u, 0x00000552u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000551u, 0x000200f9u, 0x00000544u, 0x000200f8u, 0x00000546u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000544u, 0x000200f9u, 0x0000053eu, 0x000200f8u, 0x00000540u, 0x000500c3u, 0x00000006u, 0x00000554u, 0x000004e2u, 0x00000043u, 0x0003003eu, 0x000004d5u, 0x00000554u, 0x00050084u, 0x00000006u, 0x00000556u, 0x00000554u, 0x00000043u, 0x0003003eu, 0x000004d5u, 0x00000556u, 0x00050084u, 0x00000006u, 0x00000558u, 0x00000554u, 0x0000015cu, 0x0003003eu, 0x000004d6u, 0x00000558u, 0x00050080u, 0x00000006u, 0x0000055au, 0x00000558u, 0x00000043u, 0x000500b1u, 0x00000011u, 0x0000055du, 0x0000055au, 0x00000473u, 0x000300f7u, 0x0000055eu, 0x00000000u, 0x000400fau, 0x0000055du, 0x0000055fu, 0x0000055eu, 0x000200f8u, 0x0000055fu, 0x0003003eu, 0x000004d6u, 0x0000055au, 0x000200f9u, 0x0000055eu, 0x000200f8u, 0x0000055eu, 0x000600a9u, 0x00000006u, 0x00000be2u, 0x0000055du, 0x0000055au, 0x00000558u, 0x000500afu, 0x00000011u, 0x00000565u, 0x00000be2u, 0x00000473u, 0x000300f7u, 0x00000566u, 0x00000000u, 0x000400fau, 0x00000565u, 0x00000567u, 0x00000566u, 0x000200f8u, 0x00000567u, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x00000566u, 0x0003003eu, 0x000004d1u, 0x00000be2u, 0x000200f9u, 0x0000053eu, 0x000200f8u, 0x0000053eu, 0x000700f5u, 0x00000006u, 0x00000a5bu, 0x0000054cu, 0x00000544u, 0x00000be2u, 0x00000566u, 0x000200f9u, 0x0000051eu, 0x000200f8u, 0x0000051eu, 0x000700f5u, 0x00000006u, 0x00000a5au, 0x00000531u, 0x00000524u, 0x00000a5bu, 0x0000053eu, 0x000200f9u, 0x000004ffu, 0x000200f8u, 0x000004ffu, 0x000700f5u, 0x00000006u, 0x00000a59u, 0x00000512u, 0x00000505u, 0x00000a5au, 0x0000051eu, 0x000200f9u, 0x000004e9u, 0x000200f8u, 0x000004e9u, 0x000700f5u, 0x00000006u, 0x00000a58u, 0x000004f2u, 0x000004f7u, 0x00000a59u, 0x000004ffu, 0x00050082u, 0x00000006u, 0x0000056eu, 0x00000471u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000056fu, 0x00000a58u, 0x0000056eu, 0x00050080u, 0x00000006u, 0x00000570u, 0x0000046du, 0x0000056fu, 0x0003003eu, 0x000004d7u, 0x00000570u, 0x000500c7u, 0x00000006u, 0x00000572u, 0x00000570u, 0x00000032u, 0x00050084u, 0x00000006u, 0x00000573u, 0x00000043u, 0x00000572u, 0x000500c7u, 0x00000006u, 0x00000575u, 0x000004e2u, 0x00000098u, 0x00050084u, 0x00000006u, 0x00000576u, 0x00000573u, 0x00000575u, 0x00050080u, 0x00000006u, 0x00000578u, 0x00000570u, 0x00000576u, 0x0003003eu, 0x000004d7u, 0x00000578u, 0x000500c7u, 0x00000006u, 0x0000057au, 0x00000578u, 0x00000032u, 0x000500aau, 0x00000011u, 0x0000057bu, 0x0000057au, 0x0000003fu, 0x000300f7u, 0x0000057cu, 0x00000000u, 0x000400fau, 0x0000057bu, 0x0000057du, 0x0000057eu, 0x000200f8u, 0x0000057du, 0x000500c3u, 0x00000006u, 0x00000580u, 0x00000578u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000581u, 0x00000580u, 0x00000032u, 0x00060041u, 0x00000348u, 0x00000582u, 0x00000344u, 0x0000003fu, 0x00000581u, 0x0004003du, 0x00000340u, 0x00000583u, 0x00000582u, 0x00040071u, 0x000001c4u, 0x00000584u, 0x00000583u, 0x0003003eu, 0x000004d8u, 0x00000584u, 0x000200f9u, 0x0000057cu, 0x000200f8u, 0x0000057eu, 0x000500c6u, 0x00000006u, 0x00000586u, 0x00000578u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000587u, 0x000001d5u, 0x0000003fu, 0x00000586u, 0x0004003du, 0x000001d1u, 0x00000588u, 0x00000587u, 0x00040071u, 0x000001c4u, 0x00000589u, 0x00000588u, 0x000500c4u, 0x000001c4u, 0x0000058au, 0x00000589u, 0x0000002du, 0x00050080u, 0x00000006u, 0x0000058cu, 0x00000578u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x0000058du, 0x0000058cu, 0x00000098u, 0x00060041u, 0x000001d8u, 0x0000058eu, 0x000001d5u, 0x0000003fu, 0x0000058du, 0x0004003du, 0x000001d1u, 0x0000058fu, 0x0000058eu, 0x00040071u, 0x000001c4u, 0x00000590u, 0x0000058fu, 0x000500c5u, 0x000001c4u, 0x00000591u, 0x0000058au, 0x00000590u, 0x0003003eu, 0x000004d8u, 0x00000591u, 0x000200f9u, 0x0000057cu, 0x000200f8u, 0x0000057cu, 0x000700f5u, 0x000001c4u, 0x00000a66u, 0x00000584u, 0x0000057du, 0x00000591u, 0x0000057eu, 0x0003003eu, 0x00000225u, 0x00000a66u, 0x0003003eu, 0x00000228u, 0x000000ecu, 0x0003003eu, 0x000004ceu, 0x000000ecu, 0x000200f9u, 0x000004d9u, 0x000200f8u, 0x000004d9u, 0x000200f9u, 0x0000048bu, 0x000200f8u, 0x00000491u, 0x000500aau, 0x00000011u, 0x00000495u, 0x0000047bu, 0x00000032u, 0x0003003eu, 0x00000492u, 0x00000495u, 0x000500aau, 0x00000011u, 0x00000498u, 0x00000479u, 0x00000098u, 0x000500a6u, 0x00000011u, 0x0000049au, 0x00000498u, 0x00000495u, 0x000300f7u, 0x0000049cu, 0x00000000u, 0x000400fau, 0x0000049au, 0x0000049bu, 0x000004a7u, 0x000200f8u, 0x0000049bu, 0x000500c7u, 0x00000006u, 0x0000049eu, 0x0000043au, 0x0000003cu, 0x00130050u, 0x0000000fu, 0x000008e4u, 0x00000465u, 0x00000467u, 0x00000469u, 0x0000046bu, 0x0000046du, 0x0000046fu, 0x00000471u, 0x00000473u, 0x00000475u, 0x00000477u, 0x00000479u, 0x0000047bu, 0x0000047eu, 0x00000480u, 0x00000482u, 0x00000484u, 0x0003003eu, 0x00000902u, 0x00000465u, 0x0003003eu, 0x00000903u, 0x00000467u, 0x0003003eu, 0x00000904u, 0x00000469u, 0x0003003eu, 0x00000905u, 0x0000046bu, 0x0003003eu, 0x00000906u, 0x0000046du, 0x0003003eu, 0x00000907u, 0x0000046fu, 0x0003003eu, 0x00000908u, 0x00000471u, 0x0003003eu, 0x00000909u, 0x00000475u, 0x0003003eu, 0x0000090au, 0x00000477u, 0x0003003eu, 0x0000090bu, 0x0000047eu, 0x0003003eu, 0x0000090cu, 0x00000480u, 0x0003003eu, 0x0000090du, 0x00000482u, 0x0003003eu, 0x000004a1u, 0x0000049eu, 0x0003003eu, 0x000004a2u, 0x0000043eu, 0x0003003eu, 0x000004a4u, 0x00000495u, 0x0003003eu, 0x00000593u, 0x000000bbu, 0x000300f7u, 0x000005bbu, 0x00000000u, 0x000300fbu, 0x00000203u, 0x000005bcu, 0x000200f8u, 0x000005bcu, 0x000500c7u, 0x00000006u, 0x000005bfu, 0x00000475u, 0x00000030u, 0x000500c3u, 0x00000006u, 0x000005c0u, 0x000005bfu, 0x00000032u, 0x0003003eu, 0x00000594u, 0x000005c0u, 0x0003003eu, 0x00000595u, 0x00000477u, 0x00050082u, 0x00000006u, 0x000005c5u, 0x0000049eu, 0x000005c0u, 0x000500c7u, 0x00000006u, 0x000005c6u, 0x000005c5u, 0x0000003cu, 0x0003003eu, 0x00000596u, 0x000005c6u, 0x0003003eu, 0x00000597u, 0x0000003fu, 0x000500aau, 0x00000011u, 0x000005c9u, 0x0000047eu, 0x00000043u, 0x000300f7u, 0x000005cau, 0x00000000u, 0x000400fau, 0x000005c9u, 0x000005cbu, 0x000005ccu, 0x000200f8u, 0x000005cbu, 0x000500c3u, 0x00000006u, 0x000005ceu, 0x000005c6u, 0x00000032u, 0x0003003eu, 0x00000598u, 0x000005ceu, 0x000500aau, 0x00000011u, 0x000005d1u, 0x00000477u, 0x0000003fu, 0x000300f7u, 0x000005d2u, 0x00000000u, 0x000400fau, 0x000005d1u, 0x000005d3u, 0x000005d4u, 0x000200f8u, 0x000005d3u, 0x000500c7u, 0x00000006u, 0x000005d6u, 0x000005ceu, 0x00000051u, 0x0003003eu, 0x00000599u, 0x000005d6u, 0x00050080u, 0x00000006u, 0x000005d8u, 0x000005d6u, 0x00000032u, 0x0003003eu, 0x0000059au, 0x000005d8u, 0x00050084u, 0x00000006u, 0x000005dcu, 0x000005d6u, 0x00000482u, 0x000500c3u, 0x00000006u, 0x000005ddu, 0x000005dcu, 0x0000005cu, 0x0003003eu, 0x0000059bu, 0x000005ddu, 0x00050084u, 0x00000006u, 0x000005e1u, 0x000005d8u, 0x00000482u, 0x000500c3u, 0x00000006u, 0x000005e2u, 0x000005e1u, 0x0000005cu, 0x0003003eu, 0x0000059cu, 0x000005e2u, 0x000500abu, 0x00000011u, 0x000005e5u, 0x000005ddu, 0x000005e2u, 0x000300f7u, 0x000005e6u, 0x00000000u, 0x000400fau, 0x000005e5u, 0x000005e7u, 0x000005e8u, 0x000200f8u, 0x000005e7u, 0x000500c7u, 0x00000006u, 0x000005ebu, 0x000005ddu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x000005ecu, 0x000005d6u, 0x000005ebu, 0x0003003eu, 0x0000059du, 0x000005ecu, 0x000500c7u, 0x00000006u, 0x000005efu, 0x000005e2u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x000005f0u, 0x000005d8u, 0x000005efu, 0x0003003eu, 0x0000059eu, 0x000005f0u, 0x000500aau, 0x00000011u, 0x000005f3u, 0x000005f0u, 0x000005ceu, 0x000300f7u, 0x000005f4u, 0x00000000u, 0x000400fau, 0x000005f3u, 0x000005f5u, 0x000005f6u, 0x000200f8u, 0x000005f5u, 0x000500c4u, 0x00000006u, 0x000005f9u, 0x000005efu, 0x00000032u, 0x0003003eu, 0x00000597u, 0x000005f9u, 0x000200f9u, 0x000005f4u, 0x000200f8u, 0x000005f6u, 0x000500aau, 0x00000011u, 0x000005fcu, 0x000005ecu, 0x000005ceu, 0x000300f7u, 0x000005feu, 0x00000000u, 0x000400fau, 0x000005fcu, 0x000005feu, 0x000005ffu, 0x000200f8u, 0x000005feu, 0x000500c4u, 0x00000006u, 0x00000602u, 0x000005ebu, 0x00000032u, 0x0003003eu, 0x00000597u, 0x00000602u, 0x000200f9u, 0x000005f4u, 0x000200f8u, 0x000005ffu, 0x0003003eu, 0x00000593u, 0x000000ecu, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x000005f4u, 0x000700f5u, 0x00000006u, 0x000009d6u, 0x000005f9u, 0x000005f5u, 0x00000602u, 0x000005feu, 0x000200f9u, 0x000005e6u, 0x000200f8u, 0x000005e8u, 0x000500c7u, 0x00000006u, 0x00000604u, 0x000005ddu, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000605u, 0x00000604u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000607u, 0x0000003fu, 0x00000605u, 0x0003003eu, 0x00000597u, 0x00000607u, 0x000200f9u, 0x000005e6u, 0x000200f8u, 0x000005e6u, 0x000700f5u, 0x00000006u, 0x000009d5u, 0x000009d6u, 0x000005f4u, 0x00000607u, 0x000005e8u, 0x000200f9u, 0x000005d2u, 0x000200f8u, 0x000005d4u, 0x000500c7u, 0x00000006u, 0x00000609u, 0x000005ceu, 0x00000051u, 0x0003003eu, 0x000005a0u, 0x00000609u, 0x0003003eu, 0x000005a1u, 0x00000469u, 0x0004006fu, 0x00000008u, 0x00000763u, 0x00000609u, 0x00050081u, 0x00000008u, 0x00000764u, 0x00000763u, 0x00000025u, 0x00050085u, 0x00000008u, 0x00000766u, 0x00000764u, 0x00000469u, 0x0004006eu, 0x00000006u, 0x00000767u, 0x00000766u, 0x0003003eu, 0x00000761u, 0x00000767u, 0x0003003eu, 0x0000059fu, 0x00000767u, 0x000500c5u, 0x00000006u, 0x0000060eu, 0x000005ceu, 0x00000032u, 0x0003003eu, 0x000005a3u, 0x0000060eu, 0x0003003eu, 0x000005a4u, 0x0000046bu, 0x0004006fu, 0x00000008u, 0x0000076au, 0x0000060eu, 0x00050081u, 0x00000008u, 0x0000076bu, 0x0000076au, 0x00000025u, 0x00050085u, 0x00000008u, 0x0000076du, 0x0000076bu, 0x0000046bu, 0x0004006eu, 0x00000006u, 0x0000076eu, 0x0000076du, 0x0003003eu, 0x00000768u, 0x0000076eu, 0x0003003eu, 0x000005a2u, 0x0000076eu, 0x00050084u, 0x00000006u, 0x00000616u, 0x00000477u, 0x00000767u, 0x00050082u, 0x00000006u, 0x00000617u, 0x0000060eu, 0x00000616u, 0x0003003eu, 0x000005a5u, 0x00000617u, 0x00050084u, 0x00000006u, 0x0000061cu, 0x00000477u, 0x0000076eu, 0x00050082u, 0x00000006u, 0x0000061du, 0x00000609u, 0x0000061cu, 0x0003003eu, 0x000005a6u, 0x0000061du, 0x00050084u, 0x00000006u, 0x00000622u, 0x0000061du, 0x00000482u, 0x000500c3u, 0x00000006u, 0x00000623u, 0x00000622u, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x00000624u, 0x00000001u, 0x0000002au, 0x00000767u, 0x00000623u, 0x0003003eu, 0x0000059fu, 0x00000624u, 0x00050084u, 0x00000006u, 0x00000629u, 0x00000617u, 0x00000482u, 0x000500c3u, 0x00000006u, 0x0000062au, 0x00000629u, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x0000062bu, 0x00000001u, 0x00000027u, 0x0000076eu, 0x0000062au, 0x0003003eu, 0x000005a2u, 0x0000062bu, 0x0003003eu, 0x000005a7u, 0x000000bbu, 0x0003003eu, 0x000005a8u, 0x0000062bu, 0x000200f9u, 0x0000062du, 0x000200f8u, 0x0000062du, 0x000700f5u, 0x00000006u, 0x000009b0u, 0x0000062bu, 0x000005d4u, 0x0000066fu, 0x0000062fu, 0x000500afu, 0x00000011u, 0x00000633u, 0x000009b0u, 0x00000624u, 0x000400f6u, 0x0000062eu, 0x0000062fu, 0x00000000u, 0x000400fau, 0x00000633u, 0x00000634u, 0x0000062eu, 0x000200f8u, 0x00000634u, 0x00050084u, 0x00000006u, 0x00000639u, 0x00000477u, 0x000009b0u, 0x00050082u, 0x00000006u, 0x0000063au, 0x00000609u, 0x00000639u, 0x0003003eu, 0x000005a9u, 0x0000063au, 0x00050082u, 0x00000006u, 0x00000640u, 0x0000060eu, 0x00000639u, 0x0003003eu, 0x000005aau, 0x00000640u, 0x00050084u, 0x00000006u, 0x00000644u, 0x0000063au, 0x00000482u, 0x000500c3u, 0x00000006u, 0x00000645u, 0x00000644u, 0x0000005cu, 0x0003003eu, 0x000005abu, 0x00000645u, 0x00050084u, 0x00000006u, 0x00000649u, 0x00000640u, 0x00000482u, 0x000500c3u, 0x00000006u, 0x0000064au, 0x00000649u, 0x0000005cu, 0x0003003eu, 0x000005acu, 0x0000064au, 0x00050084u, 0x00000006u, 0x0000064eu, 0x0000064au, 0x00000477u, 0x00050080u, 0x00000006u, 0x0000064fu, 0x00000640u, 0x0000064eu, 0x000500c7u, 0x00000006u, 0x00000651u, 0x0000064au, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000652u, 0x0000064fu, 0x00000651u, 0x000500aau, 0x00000011u, 0x00000654u, 0x00000652u, 0x000005ceu, 0x000300f7u, 0x00000655u, 0x00000000u, 0x000400fau, 0x00000654u, 0x00000656u, 0x00000657u, 0x000200f8u, 0x00000656u, 0x0003003eu, 0x000005a7u, 0x000000ecu, 0x000500c4u, 0x00000006u, 0x00000659u, 0x00000640u, 0x00000032u, 0x000500c7u, 0x00000006u, 0x0000065bu, 0x000005c6u, 0x00000032u, 0x00050080u, 0x00000006u, 0x0000065cu, 0x00000659u, 0x0000065bu, 0x0003003eu, 0x00000596u, 0x0000065cu, 0x000200f9u, 0x0000062eu, 0x000200f8u, 0x00000657u, 0x00050084u, 0x00000006u, 0x00000660u, 0x00000645u, 0x00000477u, 0x00050080u, 0x00000006u, 0x00000661u, 0x0000063au, 0x00000660u, 0x000500c7u, 0x00000006u, 0x00000663u, 0x00000645u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000664u, 0x00000661u, 0x00000663u, 0x000500aau, 0x00000011u, 0x00000666u, 0x00000664u, 0x000005ceu, 0x000300f7u, 0x00000667u, 0x00000000u, 0x000400fau, 0x00000666u, 0x00000668u, 0x00000667u, 0x000200f8u, 0x00000668u, 0x0003003eu, 0x000005a7u, 0x000000ecu, 0x000500c4u, 0x00000006u, 0x0000066au, 0x0000063au, 0x00000032u, 0x000500c7u, 0x00000006u, 0x0000066cu, 0x000005c6u, 0x00000032u, 0x00050080u, 0x00000006u, 0x0000066du, 0x0000066au, 0x0000066cu, 0x0003003eu, 0x00000596u, 0x0000066du, 0x000200f9u, 0x0000062eu, 0x000200f8u, 0x00000667u, 0x000200f9u, 0x00000655u, 0x000200f8u, 0x00000655u, 0x000200f9u, 0x0000062fu, 0x000200f8u, 0x0000062fu, 0x00050082u, 0x00000006u, 0x0000066fu, 0x000009b0u, 0x00000032u, 0x0003003eu, 0x000005a8u, 0x0000066fu, 0x000200f9u, 0x0000062du, 0x000200f8u, 0x0000062eu, 0x000900f5u, 0x00000006u, 0x000009bbu, 0x000005c6u, 0x0000062du, 0x0000065cu, 0x00000656u, 0x0000066du, 0x00000668u, 0x000900f5u, 0x00000011u, 0x000009b6u, 0x000000bbu, 0x0000062du, 0x000000ecu, 0x00000656u, 0x000000ecu, 0x00000668u, 0x000400a8u, 0x00000011u, 0x00000671u, 0x000009b6u, 0x000300f7u, 0x00000672u, 0x00000000u, 0x000400fau, 0x00000671u, 0x00000673u, 0x00000672u, 0x000200f8u, 0x00000673u, 0x0003003eu, 0x00000593u, 0x000000ecu, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x00000672u, 0x000200f9u, 0x000005d2u, 0x000200f8u, 0x000005d2u, 0x000700f5u, 0x00000006u, 0x000009d4u, 0x000009d5u, 0x000005e6u, 0x0000003fu, 0x00000672u, 0x000700f5u, 0x00000006u, 0x000009b8u, 0x000005c6u, 0x000005e6u, 0x000009bbu, 0x00000672u, 0x0003003eu, 0x000005adu, 0x000009b8u, 0x0003003eu, 0x000005aeu, 0x0000003fu, 0x000200f9u, 0x000005cau, 0x000200f8u, 0x000005ccu, 0x000500aau, 0x00000011u, 0x00000676u, 0x00000477u, 0x0000003fu, 0x000300f7u, 0x00000677u, 0x00000000u, 0x000400fau, 0x00000676u, 0x00000678u, 0x00000679u, 0x000200f8u, 0x00000678u, 0x0003003eu, 0x000005adu, 0x000005c6u, 0x00050082u, 0x00000006u, 0x0000067du, 0x00000467u, 0x00000032u, 0x0003003eu, 0x000005aeu, 0x0000067du, 0x000200f9u, 0x00000677u, 0x000200f8u, 0x00000679u, 0x0003003eu, 0x000005afu, 0x000005c6u, 0x0003003eu, 0x000005b0u, 0x00000480u, 0x0004006fu, 0x00000008u, 0x00000771u, 0x000005c6u, 0x00050081u, 0x00000008u, 0x00000772u, 0x00000771u, 0x00000025u, 0x00050085u, 0x00000008u, 0x00000774u, 0x00000772u, 0x00000480u, 0x0004006eu, 0x00000006u, 0x00000775u, 0x00000774u, 0x0003003eu, 0x0000076fu, 0x00000775u, 0x0003003eu, 0x000005aeu, 0x00000775u, 0x00050084u, 0x00000006u, 0x00000685u, 0x00000775u, 0x00000477u, 0x00050082u, 0x00000006u, 0x00000686u, 0x000005c6u, 0x00000685u, 0x0003003eu, 0x000005adu, 0x00000686u, 0x000500afu, 0x00000011u, 0x0000068au, 0x00000775u, 0x00000467u, 0x000300f7u, 0x0000068bu, 0x00000000u, 0x000400fau, 0x0000068au, 0x0000068cu, 0x0000068bu, 0x000200f8u, 0x0000068cu, 0x00050082u, 0x00000006u, 0x00000691u, 0x00000775u, 0x00000467u, 0x00050080u, 0x00000006u, 0x00000692u, 0x00000691u, 0x00000032u, 0x00050084u, 0x00000006u, 0x00000693u, 0x00000477u, 0x00000692u, 0x00050080u, 0x00000006u, 0x00000695u, 0x00000686u, 0x00000693u, 0x0003003eu, 0x000005adu, 0x00000695u, 0x00050082u, 0x00000006u, 0x00000698u, 0x00000467u, 0x00000032u, 0x0003003eu, 0x000005aeu, 0x00000698u, 0x000200f9u, 0x0000068bu, 0x000200f8u, 0x0000068bu, 0x000700f5u, 0x00000006u, 0x000009c1u, 0x00000775u, 0x00000679u, 0x00000698u, 0x0000068cu, 0x000700f5u, 0x00000006u, 0x000009beu, 0x00000686u, 0x00000679u, 0x00000695u, 0x0000068cu, 0x000200f9u, 0x00000677u, 0x000200f8u, 0x00000677u, 0x000700f5u, 0x00000006u, 0x000009c0u, 0x0000067du, 0x00000678u, 0x000009c1u, 0x0000068bu, 0x000700f5u, 0x00000006u, 0x000009bdu, 0x000005c6u, 0x00000678u, 0x000009beu, 0x0000068bu, 0x000200f9u, 0x000005cau, 0x000200f8u, 0x000005cau, 0x000700f5u, 0x00000006u, 0x000009d3u, 0x000009d4u, 0x000005d2u, 0x0000003fu, 0x00000677u, 0x000700f5u, 0x00000006u, 0x000009bfu, 0x0000003fu, 0x000005d2u, 0x000009c0u, 0x00000677u, 0x000700f5u, 0x00000006u, 0x000009bcu, 0x000009b8u, 0x000005d2u, 0x000009bdu, 0x00000677u, 0x000500c7u, 0x00000006u, 0x0000069bu, 0x000009bfu, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000069cu, 0x0000069bu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x0000069du, 0x000009bcu, 0x0000069cu, 0x0003003eu, 0x000005b1u, 0x0000069du, 0x000500afu, 0x00000011u, 0x000006a1u, 0x0000069du, 0x00000465u, 0x000500adu, 0x00000011u, 0x000006a3u, 0x000009bfu, 0x0000003fu, 0x000500a7u, 0x00000011u, 0x000006a4u, 0x000006a1u, 0x000006a3u, 0x000300f7u, 0x000006a5u, 0x00000000u, 0x000400fau, 0x000006a4u, 0x000006a6u, 0x000006a5u, 0x000200f8u, 0x000006a6u, 0x00050082u, 0x00000006u, 0x000006a8u, 0x000009bfu, 0x00000032u, 0x0003003eu, 0x000005aeu, 0x000006a8u, 0x00050080u, 0x00000006u, 0x000006abu, 0x000009bcu, 0x00000477u, 0x0003003eu, 0x000005adu, 0x000006abu, 0x000200f9u, 0x000006a5u, 0x000200f8u, 0x000006a5u, 0x000700f5u, 0x00000006u, 0x000009dbu, 0x000009bcu, 0x000005cau, 0x000006abu, 0x000006a6u, 0x000700f5u, 0x00000006u, 0x000009d1u, 0x000009bfu, 0x000005cau, 0x000006a8u, 0x000006a6u, 0x000500c7u, 0x00000006u, 0x000006adu, 0x000009d1u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x000006aeu, 0x000006adu, 0x00000032u, 0x000500c5u, 0x00000006u, 0x000006b0u, 0x000006aeu, 0x000009d3u, 0x000500c6u, 0x00000006u, 0x000006b2u, 0x000009dbu, 0x000006b0u, 0x0003003eu, 0x000005adu, 0x000006b2u, 0x000500aau, 0x00000011u, 0x000006b5u, 0x00000471u, 0x00000098u, 0x000500a6u, 0x00000011u, 0x000006b7u, 0x000006b5u, 0x00000495u, 0x000300f7u, 0x000006b8u, 0x00000000u, 0x000400fau, 0x000006b7u, 0x000006b9u, 0x000006bau, 0x000200f8u, 0x000006b9u, 0x000500c7u, 0x00000006u, 0x000006bcu, 0x000006b2u, 0x00000051u, 0x00050084u, 0x00000006u, 0x000006bdu, 0x0000015cu, 0x000006bcu, 0x0003003eu, 0x000005b2u, 0x000006bdu, 0x000200f9u, 0x000006b8u, 0x000200f8u, 0x000006bau, 0x000500aau, 0x00000011u, 0x000006c0u, 0x00000471u, 0x00000043u, 0x000300f7u, 0x000006c1u, 0x00000000u, 0x000400fau, 0x000006c0u, 0x000006c2u, 0x000006c3u, 0x000200f8u, 0x000006c2u, 0x000500c7u, 0x00000006u, 0x000006c5u, 0x000006b2u, 0x00000043u, 0x000500abu, 0x00000011u, 0x000006c6u, 0x000006c5u, 0x0000003fu, 0x000300f7u, 0x000006c7u, 0x00000000u, 0x000400fau, 0x000006c6u, 0x000006c8u, 0x000006c7u, 0x000200f8u, 0x000006c8u, 0x000500adu, 0x00000011u, 0x000006cau, 0x000009d1u, 0x0000003fu, 0x000300f7u, 0x000006ccu, 0x00000000u, 0x000400fau, 0x000006cau, 0x000006ccu, 0x000006cdu, 0x000200f8u, 0x000006ccu, 0x00050082u, 0x00000006u, 0x000006cfu, 0x000009d1u, 0x00000032u, 0x0003003eu, 0x000005aeu, 0x000006cfu, 0x00050080u, 0x00000006u, 0x000006d2u, 0x000006b2u, 0x00000477u, 0x0003003eu, 0x000005adu, 0x000006d2u, 0x000500c6u, 0x00000006u, 0x000006d4u, 0x000006d2u, 0x00000043u, 0x0003003eu, 0x000005adu, 0x000006d4u, 0x000200f9u, 0x000006c7u, 0x000200f8u, 0x000006cdu, 0x0003003eu, 0x00000593u, 0x000000ecu, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x000006c7u, 0x000700f5u, 0x00000006u, 0x00000a13u, 0x000009d1u, 0x000006c2u, 0x000006cfu, 0x000006ccu, 0x000700f5u, 0x00000006u, 0x000009f7u, 0x000006b2u, 0x000006c2u, 0x000006d4u, 0x000006ccu, 0x000500c7u, 0x00000006u, 0x000006d6u, 0x000009f7u, 0x00000051u, 0x00050084u, 0x00000006u, 0x000006d7u, 0x00000043u, 0x000006d6u, 0x0003003eu, 0x000005b2u, 0x000006d7u, 0x000200f9u, 0x000006c1u, 0x000200f8u, 0x000006c3u, 0x000500aau, 0x00000011u, 0x000006dau, 0x00000471u, 0x00000032u, 0x000300f7u, 0x000006dbu, 0x00000000u, 0x000400fau, 0x000006dau, 0x000006dcu, 0x000006dbu, 0x000200f8u, 0x000006dcu, 0x0003003eu, 0x000005b3u, 0x0000003fu, 0x000200f9u, 0x000006ddu, 0x000200f8u, 0x000006ddu, 0x000700f5u, 0x00000006u, 0x000009f0u, 0x000006b2u, 0x000006dcu, 0x000006f3u, 0x000006ecu, 0x000700f5u, 0x00000006u, 0x000009efu, 0x000009d1u, 0x000006dcu, 0x000006eeu, 0x000006ecu, 0x000700f5u, 0x00000006u, 0x000009eeu, 0x0000003fu, 0x000006dcu, 0x000006f5u, 0x000006ecu, 0x000400f6u, 0x000006deu, 0x000006ecu, 0x00000000u, 0x000200f9u, 0x000006e0u, 0x000200f8u, 0x000006e0u, 0x000500b1u, 0x00000011u, 0x000006e2u, 0x000009eeu, 0x0000015cu, 0x000500adu, 0x00000011u, 0x000006e4u, 0x000009efu, 0x0000003fu, 0x000500a7u, 0x00000011u, 0x000006e5u, 0x000006e2u, 0x000006e4u, 0x000300f7u, 0x000006e6u, 0x00000000u, 0x000400fau, 0x000006e5u, 0x000006e7u, 0x000006e6u, 0x000200f8u, 0x000006e7u, 0x000500c7u, 0x00000006u, 0x000006e9u, 0x000009f0u, 0x00000153u, 0x000500abu, 0x00000011u, 0x000006eau, 0x000006e9u, 0x0000003fu, 0x000200f9u, 0x000006e6u, 0x000200f8u, 0x000006e6u, 0x000700f5u, 0x00000011u, 0x000006ebu, 0x000006e5u, 0x000006e0u, 0x000006eau, 0x000006e7u, 0x000400fau, 0x000006ebu, 0x000006ecu, 0x000006deu, 0x000200f8u, 0x000006ecu, 0x00050082u, 0x00000006u, 0x000006eeu, 0x000009efu, 0x00000032u, 0x0003003eu, 0x000005aeu, 0x000006eeu, 0x00050080u, 0x00000006u, 0x000006f1u, 0x000009f0u, 0x00000477u, 0x0003003eu, 0x000005adu, 0x000006f1u, 0x000500c6u, 0x00000006u, 0x000006f3u, 0x000006f1u, 0x00000043u, 0x0003003eu, 0x000005adu, 0x000006f3u, 0x00050080u, 0x00000006u, 0x000006f5u, 0x000009eeu, 0x00000032u, 0x0003003eu, 0x000005b3u, 0x000006f5u, 0x000200f9u, 0x000006ddu, 0x000200f8u, 0x000006deu, 0x000500c7u, 0x00000006u, 0x000006f7u, 0x000009f0u, 0x00000153u, 0x000500abu, 0x00000011u, 0x000006f8u, 0x000006f7u, 0x0000003fu, 0x000300f7u, 0x000006f9u, 0x00000000u, 0x000400fau, 0x000006f8u, 0x000006fau, 0x000006f9u, 0x000200f8u, 0x000006fau, 0x0003003eu, 0x00000593u, 0x000000ecu, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x000006f9u, 0x000500c7u, 0x00000006u, 0x000006fcu, 0x000009f0u, 0x00000051u, 0x0003003eu, 0x000005b2u, 0x000006fcu, 0x000200f9u, 0x000006dbu, 0x000200f8u, 0x000006dbu, 0x000700f5u, 0x00000006u, 0x00000a2cu, 0x00000a32u, 0x000006c3u, 0x000006fcu, 0x000006f9u, 0x000700f5u, 0x00000006u, 0x00000a14u, 0x000009d1u, 0x000006c3u, 0x000009efu, 0x000006f9u, 0x000700f5u, 0x00000006u, 0x000009fau, 0x000006b2u, 0x000006c3u, 0x000009f0u, 0x000006f9u, 0x000200f9u, 0x000006c1u, 0x000200f8u, 0x000006c1u, 0x000700f5u, 0x00000006u, 0x00000a2bu, 0x000006d7u, 0x000006c7u, 0x00000a2cu, 0x000006dbu, 0x000700f5u, 0x00000006u, 0x00000a12u, 0x00000a13u, 0x000006c7u, 0x00000a14u, 0x000006dbu, 0x000700f5u, 0x00000006u, 0x000009f9u, 0x000009f7u, 0x000006c7u, 0x000009fau, 0x000006dbu, 0x000200f9u, 0x000006b8u, 0x000200f8u, 0x000006b8u, 0x000700f5u, 0x00000006u, 0x00000a2au, 0x000006bdu, 0x000006b9u, 0x00000a2bu, 0x000006c1u, 0x000700f5u, 0x00000006u, 0x00000a11u, 0x000009d1u, 0x000006b9u, 0x00000a12u, 0x000006c1u, 0x000700f5u, 0x00000006u, 0x000009f8u, 0x000006b2u, 0x000006b9u, 0x000009f9u, 0x000006c1u, 0x000500afu, 0x00000011u, 0x00000700u, 0x000009f8u, 0x00000465u, 0x000300f7u, 0x00000701u, 0x00000000u, 0x000400fau, 0x00000700u, 0x00000702u, 0x00000701u, 0x000200f8u, 0x00000702u, 0x0003003eu, 0x00000593u, 0x000000ecu, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x00000701u, 0x00050084u, 0x00000006u, 0x00000708u, 0x00000a11u, 0x0000046fu, 0x00050082u, 0x00000006u, 0x0000070bu, 0x00000471u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000070cu, 0x00000708u, 0x0000070bu, 0x00050080u, 0x00000006u, 0x0000070du, 0x0000046du, 0x0000070cu, 0x0003003eu, 0x000005b4u, 0x0000070du, 0x00050080u, 0x00000006u, 0x00000710u, 0x0000070du, 0x00000a2au, 0x000500c7u, 0x00000006u, 0x00000712u, 0x000009f8u, 0x00000032u, 0x00050084u, 0x00000006u, 0x00000713u, 0x0000015cu, 0x00000712u, 0x00050080u, 0x00000006u, 0x00000714u, 0x00000710u, 0x00000713u, 0x0003003eu, 0x000005b5u, 0x00000714u, 0x000500c7u, 0x00000006u, 0x00000716u, 0x00000714u, 0x00000098u, 0x000500aau, 0x00000011u, 0x00000717u, 0x00000716u, 0x0000003fu, 0x000300f7u, 0x00000718u, 0x00000000u, 0x000400fau, 0x00000717u, 0x00000719u, 0x0000071au, 0x000200f8u, 0x00000719u, 0x000500c3u, 0x00000006u, 0x0000071cu, 0x00000714u, 0x00000043u, 0x00060041u, 0x000001cdu, 0x0000071du, 0x000001cau, 0x0000003fu, 0x0000071cu, 0x0004003du, 0x000001c4u, 0x0000071eu, 0x0000071du, 0x0003003eu, 0x000005b6u, 0x0000071eu, 0x000200f9u, 0x00000718u, 0x000200f8u, 0x0000071au, 0x000500c6u, 0x00000006u, 0x00000720u, 0x00000714u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000721u, 0x000001d5u, 0x0000003fu, 0x00000720u, 0x0004003du, 0x000001d1u, 0x00000722u, 0x00000721u, 0x00040071u, 0x000001c4u, 0x00000723u, 0x00000722u, 0x000500c4u, 0x000001c4u, 0x00000724u, 0x00000723u, 0x000001dcu, 0x00050080u, 0x00000006u, 0x00000726u, 0x00000714u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000727u, 0x00000726u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000728u, 0x000001d5u, 0x0000003fu, 0x00000727u, 0x0004003du, 0x000001d1u, 0x00000729u, 0x00000728u, 0x00040071u, 0x000001c4u, 0x0000072au, 0x00000729u, 0x000500c4u, 0x000001c4u, 0x0000072bu, 0x0000072au, 0x0000005cu, 0x000500c5u, 0x000001c4u, 0x0000072cu, 0x00000724u, 0x0000072bu, 0x00050080u, 0x00000006u, 0x0000072eu, 0x00000714u, 0x00000043u, 0x000500c6u, 0x00000006u, 0x0000072fu, 0x0000072eu, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000730u, 0x000001d5u, 0x0000003fu, 0x0000072fu, 0x0004003du, 0x000001d1u, 0x00000731u, 0x00000730u, 0x00040071u, 0x000001c4u, 0x00000732u, 0x00000731u, 0x000500c4u, 0x000001c4u, 0x00000733u, 0x00000732u, 0x0000002du, 0x000500c5u, 0x000001c4u, 0x00000734u, 0x0000072cu, 0x00000733u, 0x00050080u, 0x00000006u, 0x00000736u, 0x00000714u, 0x00000098u, 0x000500c6u, 0x00000006u, 0x00000737u, 0x00000736u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000738u, 0x000001d5u, 0x0000003fu, 0x00000737u, 0x0004003du, 0x000001d1u, 0x00000739u, 0x00000738u, 0x00040071u, 0x000001c4u, 0x0000073au, 0x00000739u, 0x000500c5u, 0x000001c4u, 0x0000073bu, 0x00000734u, 0x0000073au, 0x0003003eu, 0x000005b6u, 0x0000073bu, 0x000200f9u, 0x00000718u, 0x000200f8u, 0x00000718u, 0x000700f5u, 0x000001c4u, 0x00000a4eu, 0x0000071eu, 0x00000719u, 0x0000073bu, 0x0000071au, 0x000300f7u, 0x0000073du, 0x00000000u, 0x000400fau, 0x00000495u, 0x0000073eu, 0x0000073fu, 0x000200f8u, 0x0000073eu, 0x000300f7u, 0x00000741u, 0x00000000u, 0x000400fau, 0x0000043eu, 0x00000742u, 0x00000743u, 0x000200f8u, 0x00000742u, 0x000500c2u, 0x000001c4u, 0x00000745u, 0x00000a4eu, 0x000001fdu, 0x000500c7u, 0x000001c4u, 0x00000746u, 0x00000745u, 0x000001ffu, 0x0003003eu, 0x000005b7u, 0x00000746u, 0x000500c2u, 0x000001c4u, 0x00000748u, 0x00000a4eu, 0x00000203u, 0x000500c7u, 0x000001c4u, 0x00000749u, 0x00000748u, 0x000001ffu, 0x0003003eu, 0x000005b8u, 0x00000749u, 0x000500c4u, 0x000001c4u, 0x0000074bu, 0x00000746u, 0x00000207u, 0x000500c5u, 0x000001c4u, 0x0000074du, 0x0000074bu, 0x00000749u, 0x0003003eu, 0x000005b6u, 0x0000074du, 0x000200f9u, 0x00000741u, 0x000200f8u, 0x00000743u, 0x000500c2u, 0x000001c4u, 0x0000074fu, 0x00000a4eu, 0x0000020eu, 0x000500c7u, 0x000001c4u, 0x00000750u, 0x0000074fu, 0x000001ffu, 0x0003003eu, 0x000005b9u, 0x00000750u, 0x000500c2u, 0x000001c4u, 0x00000752u, 0x00000a4eu, 0x00000207u, 0x000500c7u, 0x000001c4u, 0x00000753u, 0x00000752u, 0x000001ffu, 0x0003003eu, 0x000005bau, 0x00000753u, 0x000500c4u, 0x000001c4u, 0x00000755u, 0x00000750u, 0x00000207u, 0x000500c5u, 0x000001c4u, 0x00000757u, 0x00000755u, 0x00000753u, 0x0003003eu, 0x000005b6u, 0x00000757u, 0x000200f9u, 0x00000741u, 0x000200f8u, 0x00000741u, 0x000700f5u, 0x000001c4u, 0x00000a50u, 0x0000074du, 0x00000742u, 0x00000757u, 0x00000743u, 0x000200f9u, 0x0000073du, 0x000200f8u, 0x0000073fu, 0x000600a9u, 0x000001c4u, 0x00000759u, 0x0000043eu, 0x0000021bu, 0x00000203u, 0x00050084u, 0x000001c4u, 0x0000075au, 0x000001fdu, 0x00000759u, 0x00050082u, 0x000001c4u, 0x0000075bu, 0x000001fdu, 0x0000075au, 0x000500c2u, 0x000001c4u, 0x0000075du, 0x00000a4eu, 0x0000075bu, 0x0003003eu, 0x000005b6u, 0x0000075du, 0x000500c7u, 0x000001c4u, 0x0000075fu, 0x0000075du, 0x00000221u, 0x0003003eu, 0x000005b6u, 0x0000075fu, 0x000200f9u, 0x0000073du, 0x000200f8u, 0x0000073du, 0x000700f5u, 0x000001c4u, 0x00000a4fu, 0x00000a50u, 0x00000741u, 0x0000075fu, 0x0000073fu, 0x0003003eu, 0x00000225u, 0x00000a4fu, 0x0003003eu, 0x00000228u, 0x000000ecu, 0x0003003eu, 0x00000593u, 0x000000ecu, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x000005bbu, 0x000f00f5u, 0x00000006u, 0x00000b41u, 0x00000a32u, 0x000005ffu, 0x00000a32u, 0x00000673u, 0x00000a32u, 0x000006cdu, 0x00000a32u, 0x000006fau, 0x00000a2au, 0x00000702u, 0x00000a2au, 0x0000073du, 0x000200f9u, 0x0000049cu, 0x000200f8u, 0x000004a7u, 0x000500abu, 0x00000011u, 0x000004aau, 0x0000047bu, 0x00000032u, 0x000300f7u, 0x000004acu, 0x00000000u, 0x000400fau, 0x000004aau, 0x000004abu, 0x000004acu, 0x000200f8u, 0x000004abu, 0x00130050u, 0x0000000fu, 0x000008f5u, 0x00000465u, 0x00000467u, 0x00000469u, 0x0000046bu, 0x0000046du, 0x0000046fu, 0x00000471u, 0x00000473u, 0x00000475u, 0x00000477u, 0x00000479u, 0x0000047bu, 0x0000047eu, 0x00000480u, 0x00000482u, 0x00000484u, 0x0003003eu, 0x0000091au, 0x00000465u, 0x0003003eu, 0x0000091bu, 0x00000467u, 0x0003003eu, 0x0000091cu, 0x00000469u, 0x0003003eu, 0x0000091du, 0x0000046bu, 0x0003003eu, 0x0000091eu, 0x0000046du, 0x0003003eu, 0x0000091fu, 0x0000046fu, 0x0003003eu, 0x00000920u, 0x00000471u, 0x0003003eu, 0x00000921u, 0x00000473u, 0x0003003eu, 0x00000922u, 0x00000475u, 0x0003003eu, 0x00000923u, 0x00000477u, 0x0003003eu, 0x00000924u, 0x00000479u, 0x0003003eu, 0x00000925u, 0x0000047eu, 0x0003003eu, 0x00000926u, 0x00000480u, 0x0003003eu, 0x00000927u, 0x00000482u, 0x0003003eu, 0x000004afu, 0x0000043au, 0x0003003eu, 0x00000776u, 0x000000bbu, 0x000300f7u, 0x00000790u, 0x00000000u, 0x000300fbu, 0x00000203u, 0x00000791u, 0x000200f8u, 0x00000791u, 0x000500c7u, 0x00000006u, 0x00000794u, 0x00000475u, 0x0000022cu, 0x000500c3u, 0x00000006u, 0x00000795u, 0x00000794u, 0x00000032u, 0x0003003eu, 0x00000777u, 0x00000795u, 0x0003003eu, 0x00000778u, 0x00000477u, 0x00050082u, 0x00000006u, 0x0000079au, 0x0000043au, 0x00000795u, 0x000500c7u, 0x00000006u, 0x0000079bu, 0x0000079au, 0x00000030u, 0x0003003eu, 0x00000779u, 0x0000079bu, 0x0003003eu, 0x0000077au, 0x0000003fu, 0x000500aau, 0x00000011u, 0x0000079eu, 0x0000047eu, 0x00000043u, 0x000300f7u, 0x0000079fu, 0x00000000u, 0x000400fau, 0x0000079eu, 0x000007a0u, 0x000007a1u, 0x000200f8u, 0x000007a0u, 0x000500c3u, 0x00000006u, 0x000007a3u, 0x0000079bu, 0x00000043u, 0x0003003eu, 0x0000077bu, 0x000007a3u, 0x000500aau, 0x00000011u, 0x000007a6u, 0x00000477u, 0x0000003fu, 0x000300f7u, 0x000007a7u, 0x00000000u, 0x000400fau, 0x000007a6u, 0x000007a8u, 0x000007a9u, 0x000200f8u, 0x000007a8u, 0x00050084u, 0x00000006u, 0x000007adu, 0x000007a3u, 0x00000482u, 0x000500c3u, 0x00000006u, 0x000007aeu, 0x000007adu, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x000007afu, 0x000007aeu, 0x00000032u, 0x000500c4u, 0x00000006u, 0x000007b0u, 0x000007afu, 0x00000032u, 0x0003003eu, 0x0000077au, 0x000007b0u, 0x000200f9u, 0x000007a7u, 0x000200f8u, 0x000007a9u, 0x0003003eu, 0x0000077du, 0x000007a3u, 0x0003003eu, 0x0000077eu, 0x00000469u, 0x0004006fu, 0x00000008u, 0x000008a0u, 0x000007a3u, 0x00050081u, 0x00000008u, 0x000008a1u, 0x000008a0u, 0x00000025u, 0x00050085u, 0x00000008u, 0x000008a3u, 0x000008a1u, 0x00000469u, 0x0004006eu, 0x00000006u, 0x000008a4u, 0x000008a3u, 0x0003003eu, 0x0000089eu, 0x000008a4u, 0x0003003eu, 0x0000077cu, 0x000008a4u, 0x0003003eu, 0x00000780u, 0x000007a3u, 0x0003003eu, 0x00000781u, 0x0000046bu, 0x00050085u, 0x00000008u, 0x000008aau, 0x000008a1u, 0x0000046bu, 0x0004006eu, 0x00000006u, 0x000008abu, 0x000008aau, 0x0003003eu, 0x000008a5u, 0x000008abu, 0x0003003eu, 0x0000077fu, 0x000008abu, 0x00050084u, 0x00000006u, 0x000007bcu, 0x00000477u, 0x000008a4u, 0x00050082u, 0x00000006u, 0x000007bdu, 0x000007a3u, 0x000007bcu, 0x0003003eu, 0x00000782u, 0x000007bdu, 0x00050084u, 0x00000006u, 0x000007c1u, 0x00000477u, 0x000008abu, 0x00050082u, 0x00000006u, 0x000007c2u, 0x000007a3u, 0x000007c1u, 0x0003003eu, 0x00000783u, 0x000007c2u, 0x00050084u, 0x00000006u, 0x000007c7u, 0x000007c2u, 0x00000482u, 0x000500c3u, 0x00000006u, 0x000007c8u, 0x000007c7u, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x000007c9u, 0x00000001u, 0x0000002au, 0x000008a4u, 0x000007c8u, 0x0003003eu, 0x0000077cu, 0x000007c9u, 0x00050084u, 0x00000006u, 0x000007ceu, 0x000007bdu, 0x00000482u, 0x000500c3u, 0x00000006u, 0x000007cfu, 0x000007ceu, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x000007d0u, 0x00000001u, 0x00000027u, 0x000008abu, 0x000007cfu, 0x0003003eu, 0x0000077fu, 0x000007d0u, 0x0003003eu, 0x00000784u, 0x000000bbu, 0x0003003eu, 0x00000785u, 0x000007d0u, 0x000200f9u, 0x000007d2u, 0x000200f8u, 0x000007d2u, 0x000700f5u, 0x00000006u, 0x0000093fu, 0x0000079bu, 0x000007a9u, 0x00000aedu, 0x000007d4u, 0x000700f5u, 0x00000011u, 0x0000093bu, 0x000000bbu, 0x000007a9u, 0x00000be3u, 0x000007d4u, 0x000700f5u, 0x00000006u, 0x00000939u, 0x000007d0u, 0x000007a9u, 0x000007f6u, 0x000007d4u, 0x000700f5u, 0x00000006u, 0x0000099au, 0x0000003fu, 0x000007a9u, 0x0000099bu, 0x000007d4u, 0x000500afu, 0x00000011u, 0x000007d8u, 0x00000939u, 0x000007c9u, 0x000400f6u, 0x000007d3u, 0x000007d4u, 0x00000000u, 0x000400fau, 0x000007d8u, 0x000007d9u, 0x000007d3u, 0x000200f8u, 0x000007d9u, 0x00050084u, 0x00000006u, 0x000007ddu, 0x00000477u, 0x00000939u, 0x00050082u, 0x00000006u, 0x000007deu, 0x000007a3u, 0x000007ddu, 0x0003003eu, 0x00000786u, 0x000007deu, 0x00050084u, 0x00000006u, 0x000007e2u, 0x000007deu, 0x00000482u, 0x000500c3u, 0x00000006u, 0x000007e3u, 0x000007e2u, 0x0000005cu, 0x0003003eu, 0x00000787u, 0x000007e3u, 0x00050084u, 0x00000006u, 0x000007e7u, 0x000007e3u, 0x00000477u, 0x00050080u, 0x00000006u, 0x000007e8u, 0x000007deu, 0x000007e7u, 0x000500aau, 0x00000011u, 0x000007eau, 0x000007e8u, 0x000007a3u, 0x000300f7u, 0x000007ebu, 0x00000000u, 0x000400fau, 0x000007eau, 0x000007ecu, 0x000007ebu, 0x000200f8u, 0x000007ecu, 0x0003003eu, 0x00000784u, 0x000000ecu, 0x000500c7u, 0x00000006u, 0x000007eeu, 0x000007e3u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x000007efu, 0x000007eeu, 0x00000032u, 0x0003003eu, 0x0000077au, 0x000007efu, 0x000500c4u, 0x00000006u, 0x000007f1u, 0x000007deu, 0x00000043u, 0x000500c7u, 0x00000006u, 0x000007f3u, 0x0000093fu, 0x00000098u, 0x00050080u, 0x00000006u, 0x000007f4u, 0x000007f1u, 0x000007f3u, 0x0003003eu, 0x00000779u, 0x000007f4u, 0x000200f9u, 0x000007ebu, 0x000200f8u, 0x000007ebu, 0x000700f5u, 0x00000006u, 0x00000aedu, 0x0000093fu, 0x000007d9u, 0x000007f4u, 0x000007ecu, 0x000700f5u, 0x00000006u, 0x0000099bu, 0x0000099au, 0x000007d9u, 0x000007efu, 0x000007ecu, 0x000600a9u, 0x00000011u, 0x00000be3u, 0x000007eau, 0x000000ecu, 0x0000093bu, 0x000200f9u, 0x000007d4u, 0x000200f8u, 0x000007d4u, 0x00050082u, 0x00000006u, 0x000007f6u, 0x00000939u, 0x00000032u, 0x0003003eu, 0x00000785u, 0x000007f6u, 0x000200f9u, 0x000007d2u, 0x000200f8u, 0x000007d3u, 0x000400a8u, 0x00000011u, 0x000007f8u, 0x0000093bu, 0x000300f7u, 0x000007f9u, 0x00000000u, 0x000400fau, 0x000007f8u, 0x000007fau, 0x000007f9u, 0x000200f8u, 0x000007fau, 0x0003003eu, 0x00000776u, 0x000000ecu, 0x000200f9u, 0x00000790u, 0x000200f8u, 0x000007f9u, 0x000200f9u, 0x000007a7u, 0x000200f8u, 0x000007a7u, 0x000700f5u, 0x00000006u, 0x00000999u, 0x000007b0u, 0x000007a8u, 0x0000099au, 0x000007f9u, 0x000700f5u, 0x00000006u, 0x00000941u, 0x0000079bu, 0x000007a8u, 0x0000093fu, 0x000007f9u, 0x0003003eu, 0x00000788u, 0x00000941u, 0x0003003eu, 0x00000789u, 0x0000003fu, 0x000200f9u, 0x0000079fu, 0x000200f8u, 0x000007a1u, 0x000500aau, 0x00000011u, 0x000007fdu, 0x00000477u, 0x0000003fu, 0x000300f7u, 0x000007feu, 0x00000000u, 0x000400fau, 0x000007fdu, 0x000007ffu, 0x00000800u, 0x000200f8u, 0x000007ffu, 0x0003003eu, 0x00000788u, 0x0000079bu, 0x00050082u, 0x00000006u, 0x00000804u, 0x00000467u, 0x00000032u, 0x0003003eu, 0x00000789u, 0x00000804u, 0x000200f9u, 0x000007feu, 0x000200f8u, 0x00000800u, 0x0003003eu, 0x0000078au, 0x0000079bu, 0x0003003eu, 0x0000078bu, 0x00000480u, 0x0004006fu, 0x00000008u, 0x000008aeu, 0x0000079bu, 0x00050081u, 0x00000008u, 0x000008afu, 0x000008aeu, 0x00000025u, 0x00050085u, 0x00000008u, 0x000008b1u, 0x000008afu, 0x00000480u, 0x0004006eu, 0x00000006u, 0x000008b2u, 0x000008b1u, 0x0003003eu, 0x000008acu, 0x000008b2u, 0x0003003eu, 0x00000789u, 0x000008b2u, 0x00050084u, 0x00000006u, 0x0000080cu, 0x000008b2u, 0x00000477u, 0x00050082u, 0x00000006u, 0x0000080du, 0x0000079bu, 0x0000080cu, 0x0003003eu, 0x00000788u, 0x0000080du, 0x000500afu, 0x00000011u, 0x00000811u, 0x000008b2u, 0x00000467u, 0x000300f7u, 0x00000812u, 0x00000000u, 0x000400fau, 0x00000811u, 0x00000813u, 0x00000812u, 0x000200f8u, 0x00000813u, 0x00050082u, 0x00000006u, 0x00000818u, 0x000008b2u, 0x00000467u, 0x00050080u, 0x00000006u, 0x00000819u, 0x00000818u, 0x00000032u, 0x00050084u, 0x00000006u, 0x0000081au, 0x00000477u, 0x00000819u, 0x00050080u, 0x00000006u, 0x0000081cu, 0x0000080du, 0x0000081au, 0x0003003eu, 0x00000788u, 0x0000081cu, 0x00050082u, 0x00000006u, 0x0000081fu, 0x00000467u, 0x00000032u, 0x0003003eu, 0x00000789u, 0x0000081fu, 0x000200f9u, 0x00000812u, 0x000200f8u, 0x00000812u, 0x000700f5u, 0x00000006u, 0x0000095au, 0x000008b2u, 0x00000800u, 0x0000081fu, 0x00000813u, 0x000700f5u, 0x00000006u, 0x00000950u, 0x0000080du, 0x00000800u, 0x0000081cu, 0x00000813u, 0x000200f9u, 0x000007feu, 0x000200f8u, 0x000007feu, 0x000700f5u, 0x00000006u, 0x00000959u, 0x00000804u, 0x000007ffu, 0x0000095au, 0x00000812u, 0x000700f5u, 0x00000006u, 0x0000094fu, 0x0000079bu, 0x000007ffu, 0x00000950u, 0x00000812u, 0x000200f9u, 0x0000079fu, 0x000200f8u, 0x0000079fu, 0x000700f5u, 0x00000006u, 0x00000998u, 0x00000999u, 0x000007a7u, 0x0000003fu, 0x000007feu, 0x000700f5u, 0x00000006u, 0x00000958u, 0x0000003fu, 0x000007a7u, 0x00000959u, 0x000007feu, 0x000700f5u, 0x00000006u, 0x0000094eu, 0x00000941u, 0x000007a7u, 0x0000094fu, 0x000007feu, 0x000500abu, 0x00000011u, 0x00000824u, 0x00000479u, 0x00000471u, 0x000300f7u, 0x00000825u, 0x00000000u, 0x000400fau, 0x00000824u, 0x00000826u, 0x00000827u, 0x000200f8u, 0x00000826u, 0x00050082u, 0x00000006u, 0x0000082cu, 0x00000471u, 0x00000479u, 0x000500aau, 0x00000011u, 0x0000082du, 0x0000082cu, 0x00000032u, 0x000300f7u, 0x0000082eu, 0x00000000u, 0x000400fau, 0x0000082du, 0x0000082fu, 0x00000830u, 0x000200f8u, 0x0000082fu, 0x000500c7u, 0x00000006u, 0x00000832u, 0x0000094eu, 0x000002e0u, 0x00050084u, 0x00000006u, 0x00000833u, 0x00000832u, 0x0000015cu, 0x0003003eu, 0x0000078cu, 0x00000833u, 0x00050080u, 0x00000006u, 0x00000836u, 0x00000832u, 0x00000043u, 0x00050082u, 0x00000006u, 0x0000083bu, 0x00000098u, 0x00000471u, 0x000500c3u, 0x00000006u, 0x0000083cu, 0x00000473u, 0x0000083bu, 0x000500b1u, 0x00000011u, 0x0000083du, 0x00000836u, 0x0000083cu, 0x000300f7u, 0x0000083eu, 0x00000000u, 0x000400fau, 0x0000083du, 0x0000083fu, 0x0000083eu, 0x000200f8u, 0x0000083fu, 0x00050080u, 0x00000006u, 0x00000841u, 0x00000833u, 0x0000002du, 0x0003003eu, 0x0000078cu, 0x00000841u, 0x000200f9u, 0x0000083eu, 0x000200f8u, 0x0000083eu, 0x000700f5u, 0x00000006u, 0x000009a3u, 0x00000833u, 0x0000082fu, 0x00000841u, 0x0000083fu, 0x000200f9u, 0x0000082eu, 0x000200f8u, 0x00000830u, 0x000500aau, 0x00000011u, 0x00000844u, 0x00000479u, 0x00000043u, 0x000300f7u, 0x00000845u, 0x00000000u, 0x000400fau, 0x00000844u, 0x00000846u, 0x00000845u, 0x000200f8u, 0x00000846u, 0x000500aau, 0x00000011u, 0x00000849u, 0x00000471u, 0x00000032u, 0x000200f9u, 0x00000845u, 0x000200f8u, 0x00000845u, 0x000700f5u, 0x00000011u, 0x0000084au, 0x00000844u, 0x00000830u, 0x00000849u, 0x00000846u, 0x000300f7u, 0x0000084bu, 0x00000000u, 0x000400fau, 0x0000084au, 0x0000084cu, 0x0000084bu, 0x000200f8u, 0x0000084cu, 0x000500c7u, 0x00000006u, 0x0000084eu, 0x0000094eu, 0x0000015cu, 0x000500abu, 0x00000011u, 0x0000084fu, 0x0000084eu, 0x0000003fu, 0x000300f7u, 0x00000850u, 0x00000000u, 0x000400fau, 0x0000084fu, 0x00000851u, 0x00000850u, 0x000200f8u, 0x00000851u, 0x000500c7u, 0x00000006u, 0x00000853u, 0x00000477u, 0x0000015cu, 0x000500abu, 0x00000011u, 0x00000854u, 0x00000853u, 0x0000003fu, 0x000500adu, 0x00000011u, 0x00000856u, 0x00000958u, 0x0000003fu, 0x000500a7u, 0x00000011u, 0x00000857u, 0x00000854u, 0x00000856u, 0x000300f7u, 0x00000859u, 0x00000000u, 0x000400fau, 0x00000857u, 0x00000859u, 0x0000085au, 0x000200f8u, 0x00000859u, 0x00050082u, 0x00000006u, 0x0000085cu, 0x00000958u, 0x00000032u, 0x0003003eu, 0x00000789u, 0x0000085cu, 0x00050080u, 0x00000006u, 0x0000085fu, 0x0000094eu, 0x00000477u, 0x0003003eu, 0x00000788u, 0x0000085fu, 0x000200f9u, 0x00000850u, 0x000200f8u, 0x0000085au, 0x0003003eu, 0x00000776u, 0x000000ecu, 0x000200f9u, 0x00000790u, 0x000200f8u, 0x00000850u, 0x000700f5u, 0x00000006u, 0x00000982u, 0x00000958u, 0x0000084cu, 0x0000085cu, 0x00000859u, 0x000700f5u, 0x00000006u, 0x0000095bu, 0x0000094eu, 0x0000084cu, 0x0000085fu, 0x00000859u, 0x000500c7u, 0x00000006u, 0x00000861u, 0x0000095bu, 0x000002e0u, 0x0003003eu, 0x0000078cu, 0x00000861u, 0x000200f9u, 0x0000084bu, 0x000200f8u, 0x0000084bu, 0x000700f5u, 0x00000006u, 0x000009a4u, 0x000009a8u, 0x00000845u, 0x00000861u, 0x00000850u, 0x000700f5u, 0x00000006u, 0x00000981u, 0x00000958u, 0x00000845u, 0x00000982u, 0x00000850u, 0x000700f5u, 0x00000006u, 0x00000965u, 0x0000094eu, 0x00000845u, 0x0000095bu, 0x00000850u, 0x000200f9u, 0x0000082eu, 0x000200f8u, 0x0000082eu, 0x000700f5u, 0x00000006u, 0x000009a2u, 0x000009a3u, 0x0000083eu, 0x000009a4u, 0x0000084bu, 0x000700f5u, 0x00000006u, 0x0000097fu, 0x00000958u, 0x0000083eu, 0x00000981u, 0x0000084bu, 0x000700f5u, 0x00000006u, 0x00000963u, 0x0000094eu, 0x0000083eu, 0x00000965u, 0x0000084bu, 0x000200f9u, 0x00000825u, 0x000200f8u, 0x00000827u, 0x000500c7u, 0x00000006u, 0x00000863u, 0x0000094eu, 0x000002e0u, 0x00050084u, 0x00000006u, 0x00000864u, 0x00000863u, 0x00000043u, 0x0003003eu, 0x0000078cu, 0x00000864u, 0x000200f9u, 0x00000825u, 0x000200f8u, 0x00000825u, 0x000700f5u, 0x00000006u, 0x000009a1u, 0x000009a2u, 0x0000082eu, 0x00000864u, 0x00000827u, 0x000700f5u, 0x00000006u, 0x0000097eu, 0x0000097fu, 0x0000082eu, 0x00000958u, 0x00000827u, 0x000700f5u, 0x00000006u, 0x00000962u, 0x00000963u, 0x0000082eu, 0x0000094eu, 0x00000827u, 0x000500afu, 0x00000011u, 0x00000868u, 0x00000962u, 0x00000465u, 0x000300f7u, 0x00000869u, 0x00000000u, 0x000400fau, 0x00000868u, 0x0000086au, 0x00000869u, 0x000200f8u, 0x0000086au, 0x0003003eu, 0x00000776u, 0x000000ecu, 0x000200f9u, 0x00000790u, 0x000200f8u, 0x00000869u, 0x00050084u, 0x00000006u, 0x00000870u, 0x0000097eu, 0x0000046fu, 0x00050082u, 0x00000006u, 0x00000873u, 0x00000471u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000874u, 0x00000870u, 0x00000873u, 0x00050080u, 0x00000006u, 0x00000875u, 0x0000046du, 0x00000874u, 0x0003003eu, 0x0000078du, 0x00000875u, 0x000500c7u, 0x00000006u, 0x00000877u, 0x0000097eu, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000878u, 0x00000877u, 0x00000032u, 0x000500c5u, 0x00000006u, 0x0000087au, 0x00000878u, 0x00000998u, 0x000500c6u, 0x00000006u, 0x0000087cu, 0x00000962u, 0x0000087au, 0x0003003eu, 0x00000788u, 0x0000087cu, 0x00050080u, 0x00000006u, 0x0000087fu, 0x00000875u, 0x000009a1u, 0x000500c7u, 0x00000006u, 0x00000881u, 0x0000087cu, 0x00000098u, 0x00050084u, 0x00000006u, 0x00000882u, 0x00000043u, 0x00000881u, 0x00050080u, 0x00000006u, 0x00000883u, 0x0000087fu, 0x00000882u, 0x0003003eu, 0x0000078eu, 0x00000883u, 0x000500c7u, 0x00000006u, 0x00000885u, 0x00000883u, 0x00000032u, 0x000500aau, 0x00000011u, 0x00000886u, 0x00000885u, 0x0000003fu, 0x000300f7u, 0x00000887u, 0x00000000u, 0x000400fau, 0x00000886u, 0x00000888u, 0x00000889u, 0x000200f8u, 0x00000888u, 0x000500c3u, 0x00000006u, 0x0000088bu, 0x00000883u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x0000088cu, 0x0000088bu, 0x00000032u, 0x00060041u, 0x00000348u, 0x0000088du, 0x00000344u, 0x0000003fu, 0x0000088cu, 0x0004003du, 0x00000340u, 0x0000088eu, 0x0000088du, 0x00040071u, 0x000001c4u, 0x0000088fu, 0x0000088eu, 0x0003003eu, 0x0000078fu, 0x0000088fu, 0x000200f9u, 0x00000887u, 0x000200f8u, 0x00000889u, 0x000500c6u, 0x00000006u, 0x00000891u, 0x00000883u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000892u, 0x000001d5u, 0x0000003fu, 0x00000891u, 0x0004003du, 0x000001d1u, 0x00000893u, 0x00000892u, 0x00040071u, 0x000001c4u, 0x00000894u, 0x00000893u, 0x000500c4u, 0x000001c4u, 0x00000895u, 0x00000894u, 0x0000002du, 0x00050080u, 0x00000006u, 0x00000897u, 0x00000883u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000898u, 0x00000897u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000899u, 0x000001d5u, 0x0000003fu, 0x00000898u, 0x0004003du, 0x000001d1u, 0x0000089au, 0x00000899u, 0x00040071u, 0x000001c4u, 0x0000089bu, 0x0000089au, 0x000500c5u, 0x000001c4u, 0x0000089cu, 0x00000895u, 0x0000089bu, 0x0003003eu, 0x0000078fu, 0x0000089cu, 0x000200f9u, 0x00000887u, 0x000200f8u, 0x00000887u, 0x000700f5u, 0x000001c4u, 0x000009aeu, 0x0000088fu, 0x00000888u, 0x0000089cu, 0x00000889u, 0x0003003eu, 0x00000225u, 0x000009aeu, 0x0003003eu, 0x00000228u, 0x000000ecu, 0x0003003eu, 0x00000776u, 0x000000ecu, 0x000200f9u, 0x00000790u, 0x000200f8u, 0x00000790u, 0x000b00f5u, 0x00000006u, 0x00000b0bu, 0x000009a8u, 0x000007fau, 0x000009a8u, 0x0000085au, 0x000009a1u, 0x0000086au, 0x000009a1u, 0x00000887u, 0x000200f9u, 0x000004acu, 0x000200f8u, 0x000004acu, 0x000700f5u, 0x00000006u, 0x00000b0au, 0x000009a8u, 0x000004a7u, 0x00000b0bu, 0x00000790u, 0x000200f9u, 0x0000049cu, 0x000200f8u, 0x0000049cu, 0x000700f5u, 0x00000006u, 0x00000b40u, 0x00000b41u, 0x000005bbu, 0x00000a32u, 0x000004acu, 0x000700f5u, 0x00000006u, 0x00000af6u, 0x000009a8u, 0x000005bbu, 0x00000b0au, 0x000004acu, 0x000200f9u, 0x0000048bu, 0x000200f8u, 0x0000048bu, 0x000700f5u, 0x00000006u, 0x00000b38u, 0x00000a32u, 0x000004d9u, 0x00000b40u, 0x0000049cu, 0x000700f5u, 0x00000006u, 0x00000aeeu, 0x000009a8u, 0x000004d9u, 0x00000af6u, 0x0000049cu, 0x00050080u, 0x00000006u, 0x000004b3u, 0x00000936u, 0x00000032u, 0x0004003du, 0x000001c4u, 0x000004b6u, 0x00000225u, 0x00040071u, 0x00000340u, 0x000004b7u, 0x000004b6u, 0x00080041u, 0x00000348u, 0x000004b8u, 0x00000444u, 0x0000003fu, 0x000004b3u, 0x0000003fu, 0x00000432u, 0x0003003eu, 0x000004b8u, 0x000004b7u, 0x000200f9u, 0x00000455u, 0x000200f8u, 0x00000455u, 0x0003003eu, 0x00000451u, 0x000004b3u, 0x000200f9u, 0x00000452u, 0x000200f8u, 0x00000454u, 0x0004003du, 0x00000011u, 0x000004bbu, 0x00000228u, 0x000300f7u, 0x000004bdu, 0x00000000u, 0x000400fau, 0x000004bbu, 0x000004bcu, 0x000004bdu, 0x000200f8u, 0x000004bcu, 0x0004003du, 0x000001c4u, 0x000004c0u, 0x00000225u, 0x00040071u, 0x00000340u, 0x000004c1u, 0x000004c0u, 0x0003003eu, 0x00000433u, 0x000004c1u, 0x000200f9u, 0x000004bdu, 0x000200f8u, 0x000004bdu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000du, 0x00000000u, 0x0000000au, 0x00030037u, 0x00000007u, 0x0000000bu, 0x00030037u, 0x00000009u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003du, 0x00000006u, 0x00000023u, 0x0000000bu, 0x0004006fu, 0x00000008u, 0x00000024u, 0x00000023u, 0x00050081u, 0x00000008u, 0x00000026u, 0x00000024u, 0x00000025u, 0x0004003du, 0x00000008u, 0x00000027u, 0x0000000cu, 0x00050085u, 0x00000008u, 0x00000028u, 0x00000026u, 0x00000027u, 0x0004006eu, 0x00000006u, 0x00000029u, 0x00000028u, 0x000200feu, 0x00000029u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000018u, 0x00000000u, 0x00000013u, 0x00030037u, 0x00000010u, 0x00000014u, 0x00030037u, 0x00000007u, 0x00000015u, 0x00030037u, 0x00000012u, 0x00000016u, 0x00030037u, 0x00000012u, 0x00000017u, 0x000200f8u, 0x00000019u, 0x0005003bu, 0x00000012u, 0x000004cau, 0x00000007u, 0x000000bbu, 0x0004003bu, 0x00000007u, 0x0000002cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000034u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000038u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000003eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000047u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000004fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000053u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000056u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000005eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000069u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000006eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000008du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000090u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000091u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000095u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000099u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000009au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000009eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a5u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x000000bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000010du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000010fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000011bu, 0x00000007u, 0x0004003bu, 0x00000009u, 0x0000011du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000181u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b7u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000001c6u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x000001fbu, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x00000201u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x0000020cu, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x00000211u, 0x00000007u, 0x000300f7u, 0x000004c8u, 0x00000000u, 0x000300fbu, 0x00000203u, 0x000004c9u, 0x000200f8u, 0x000004c9u, 0x00050041u, 0x00000007u, 0x0000002eu, 0x00000014u, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x000500c7u, 0x00000006u, 0x00000031u, 0x0000002fu, 0x00000030u, 0x000500c3u, 0x00000006u, 0x00000033u, 0x00000031u, 0x00000032u, 0x0003003eu, 0x0000002cu, 0x00000033u, 0x00050041u, 0x00000007u, 0x00000036u, 0x00000014u, 0x00000035u, 0x0004003du, 0x00000006u, 0x00000037u, 0x00000036u, 0x0003003eu, 0x00000034u, 0x00000037u, 0x0004003du, 0x00000006u, 0x00000039u, 0x00000015u, 0x00050082u, 0x00000006u, 0x0000003bu, 0x00000039u, 0x00000033u, 0x000500c7u, 0x00000006u, 0x0000003du, 0x0000003bu, 0x0000003cu, 0x0003003eu, 0x00000038u, 0x0000003du, 0x0003003eu, 0x0000003eu, 0x0000003fu, 0x00050041u, 0x00000007u, 0x00000041u, 0x00000014u, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000042u, 0x00000041u, 0x000500aau, 0x00000011u, 0x00000044u, 0x00000042u, 0x00000043u, 0x000300f7u, 0x00000046u, 0x00000000u, 0x000400fau, 0x00000044u, 0x00000045u, 0x00000110u, 0x000200f8u, 0x00000045u, 0x000500c3u, 0x00000006u, 0x00000049u, 0x0000003du, 0x00000032u, 0x0003003eu, 0x00000047u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000004bu, 0x00000036u, 0x000500aau, 0x00000011u, 0x0000004cu, 0x0000004bu, 0x0000003fu, 0x000300f7u, 0x0000004eu, 0x00000000u, 0x000400fau, 0x0000004cu, 0x0000004du, 0x0000008cu, 0x000200f8u, 0x0000004du, 0x000500c7u, 0x00000006u, 0x00000052u, 0x00000049u, 0x00000051u, 0x0003003eu, 0x0000004fu, 0x00000052u, 0x00050080u, 0x00000006u, 0x00000055u, 0x00000052u, 0x00000032u, 0x0003003eu, 0x00000053u, 0x00000055u, 0x00050041u, 0x00000007u, 0x00000059u, 0x00000014u, 0x00000058u, 0x0004003du, 0x00000006u, 0x0000005au, 0x00000059u, 0x00050084u, 0x00000006u, 0x0000005bu, 0x00000052u, 0x0000005au, 0x000500c3u, 0x00000006u, 0x0000005du, 0x0000005bu, 0x0000005cu, 0x0003003eu, 0x00000056u, 0x0000005du, 0x0004003du, 0x00000006u, 0x00000061u, 0x00000059u, 0x00050084u, 0x00000006u, 0x00000062u, 0x00000055u, 0x00000061u, 0x000500c3u, 0x00000006u, 0x00000063u, 0x00000062u, 0x0000005cu, 0x0003003eu, 0x0000005eu, 0x00000063u, 0x000500abu, 0x00000011u, 0x00000066u, 0x0000005du, 0x00000063u, 0x000300f7u, 0x00000068u, 0x00000000u, 0x000400fau, 0x00000066u, 0x00000067u, 0x00000086u, 0x000200f8u, 0x00000067u, 0x000500c7u, 0x00000006u, 0x0000006cu, 0x0000005du, 0x00000032u, 0x000500c6u, 0x00000006u, 0x0000006du, 0x00000052u, 0x0000006cu, 0x0003003eu, 0x00000069u, 0x0000006du, 0x000500c7u, 0x00000006u, 0x00000071u, 0x00000063u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000072u, 0x00000055u, 0x00000071u, 0x0003003eu, 0x0000006eu, 0x00000072u, 0x000500aau, 0x00000011u, 0x00000075u, 0x00000072u, 0x00000049u, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, 0x00000076u, 0x0000007bu, 0x000200f8u, 0x00000076u, 0x000500c4u, 0x00000006u, 0x0000007au, 0x00000071u, 0x00000032u, 0x0003003eu, 0x0000003eu, 0x0000007au, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x0000007bu, 0x000500aau, 0x00000011u, 0x0000007eu, 0x0000006du, 0x00000049u, 0x000300f7u, 0x00000080u, 0x00000000u, 0x000400fau, 0x0000007eu, 0x0000007fu, 0x00000084u, 0x000200f8u, 0x0000007fu, 0x000500c4u, 0x00000006u, 0x00000083u, 0x0000006cu, 0x00000032u, 0x0003003eu, 0x0000003eu, 0x00000083u, 0x000200f9u, 0x00000080u, 0x000200f8u, 0x00000084u, 0x0003003eu, 0x000004cau, 0x000000ecu, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x00000080u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000700f5u, 0x00000006u, 0x00000b73u, 0x0000007au, 0x00000076u, 0x00000083u, 0x00000080u, 0x000200f9u, 0x00000068u, 0x000200f8u, 0x00000086u, 0x000500c7u, 0x00000006u, 0x00000088u, 0x0000005du, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000089u, 0x00000088u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x0000008bu, 0x0000003fu, 0x00000089u, 0x0003003eu, 0x0000003eu, 0x0000008bu, 0x000200f9u, 0x00000068u, 0x000200f8u, 0x00000068u, 0x000700f5u, 0x00000006u, 0x00000b72u, 0x00000b73u, 0x00000077u, 0x0000008bu, 0x00000086u, 0x000200f9u, 0x0000004eu, 0x000200f8u, 0x0000008cu, 0x000500c7u, 0x00000006u, 0x0000008fu, 0x00000049u, 0x00000051u, 0x0003003eu, 0x00000090u, 0x0000008fu, 0x00050041u, 0x00000009u, 0x00000092u, 0x00000014u, 0x00000043u, 0x0004003du, 0x00000008u, 0x00000093u, 0x00000092u, 0x0003003eu, 0x00000091u, 0x00000093u, 0x00060039u, 0x00000006u, 0x00000094u, 0x0000000du, 0x00000090u, 0x00000091u, 0x0003003eu, 0x0000008du, 0x00000094u, 0x000500c5u, 0x00000006u, 0x00000097u, 0x00000049u, 0x00000032u, 0x0003003eu, 0x00000099u, 0x00000097u, 0x00050041u, 0x00000009u, 0x0000009bu, 0x00000014u, 0x00000098u, 0x0004003du, 0x00000008u, 0x0000009cu, 0x0000009bu, 0x0003003eu, 0x0000009au, 0x0000009cu, 0x00060039u, 0x00000006u, 0x0000009du, 0x0000000du, 0x00000099u, 0x0000009au, 0x0003003eu, 0x00000095u, 0x0000009du, 0x00050084u, 0x00000006u, 0x000000a3u, 0x00000037u, 0x00000094u, 0x00050082u, 0x00000006u, 0x000000a4u, 0x00000097u, 0x000000a3u, 0x0003003eu, 0x0000009eu, 0x000000a4u, 0x00050084u, 0x00000006u, 0x000000aau, 0x00000037u, 0x0000009du, 0x00050082u, 0x00000006u, 0x000000abu, 0x0000008fu, 0x000000aau, 0x0003003eu, 0x000000a5u, 0x000000abu, 0x00050041u, 0x00000007u, 0x000000aeu, 0x00000014u, 0x00000058u, 0x0004003du, 0x00000006u, 0x000000afu, 0x000000aeu, 0x00050084u, 0x00000006u, 0x000000b0u, 0x000000abu, 0x000000afu, 0x000500c3u, 0x00000006u, 0x000000b1u, 0x000000b0u, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x000000b2u, 0x00000001u, 0x0000002au, 0x00000094u, 0x000000b1u, 0x0003003eu, 0x0000008du, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b6u, 0x000000aeu, 0x00050084u, 0x00000006u, 0x000000b7u, 0x000000a4u, 0x000000b6u, 0x000500c3u, 0x00000006u, 0x000000b8u, 0x000000b7u, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x000000b9u, 0x00000001u, 0x00000027u, 0x0000009du, 0x000000b8u, 0x0003003eu, 0x00000095u, 0x000000b9u, 0x0003003eu, 0x000000bau, 0x000000bbu, 0x0003003eu, 0x000000bcu, 0x000000b9u, 0x000200f9u, 0x000000beu, 0x000200f8u, 0x000000beu, 0x000700f5u, 0x00000006u, 0x00000b56u, 0x000000b9u, 0x0000008cu, 0x00000107u, 0x000000c1u, 0x000400f6u, 0x000000c0u, 0x000000c1u, 0x00000000u, 0x000200f9u, 0x000000c2u, 0x000200f8u, 0x000000c2u, 0x000500afu, 0x00000011u, 0x000000c5u, 0x00000b56u, 0x000000b2u, 0x000400fau, 0x000000c5u, 0x000000bfu, 0x000000c0u, 0x000200f8u, 0x000000bfu, 0x00050084u, 0x00000006u, 0x000000cbu, 0x00000037u, 0x00000b56u, 0x00050082u, 0x00000006u, 0x000000ccu, 0x0000008fu, 0x000000cbu, 0x0003003eu, 0x000000c6u, 0x000000ccu, 0x00050082u, 0x00000006u, 0x000000d3u, 0x00000097u, 0x000000cbu, 0x0003003eu, 0x000000cdu, 0x000000d3u, 0x0004003du, 0x00000006u, 0x000000d7u, 0x000000aeu, 0x00050084u, 0x00000006u, 0x000000d8u, 0x000000ccu, 0x000000d7u, 0x000500c3u, 0x00000006u, 0x000000d9u, 0x000000d8u, 0x0000005cu, 0x0003003eu, 0x000000d4u, 0x000000d9u, 0x0004003du, 0x00000006u, 0x000000ddu, 0x000000aeu, 0x00050084u, 0x00000006u, 0x000000deu, 0x000000d3u, 0x000000ddu, 0x000500c3u, 0x00000006u, 0x000000dfu, 0x000000deu, 0x0000005cu, 0x0003003eu, 0x000000dau, 0x000000dfu, 0x00050084u, 0x00000006u, 0x000000e3u, 0x000000dfu, 0x00000037u, 0x00050080u, 0x00000006u, 0x000000e4u, 0x000000d3u, 0x000000e3u, 0x000500c7u, 0x00000006u, 0x000000e6u, 0x000000dfu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x000000e7u, 0x000000e4u, 0x000000e6u, 0x000500aau, 0x00000011u, 0x000000e9u, 0x000000e7u, 0x00000049u, 0x000300f7u, 0x000000ebu, 0x00000000u, 0x000400fau, 0x000000e9u, 0x000000eau, 0x000000f3u, 0x000200f8u, 0x000000eau, 0x0003003eu, 0x000000bau, 0x000000ecu, 0x000500c4u, 0x00000006u, 0x000000eeu, 0x000000d3u, 0x00000032u, 0x000500c7u, 0x00000006u, 0x000000f0u, 0x0000003du, 0x00000032u, 0x00050080u, 0x00000006u, 0x000000f1u, 0x000000eeu, 0x000000f0u, 0x0003003eu, 0x00000038u, 0x000000f1u, 0x000200f9u, 0x000000c0u, 0x000200f8u, 0x000000f3u, 0x00050084u, 0x00000006u, 0x000000f7u, 0x000000d9u, 0x00000037u, 0x00050080u, 0x00000006u, 0x000000f8u, 0x000000ccu, 0x000000f7u, 0x000500c7u, 0x00000006u, 0x000000fau, 0x000000d9u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x000000fbu, 0x000000f8u, 0x000000fau, 0x000500aau, 0x00000011u, 0x000000fdu, 0x000000fbu, 0x00000049u, 0x000300f7u, 0x000000ffu, 0x00000000u, 0x000400fau, 0x000000fdu, 0x000000feu, 0x000000ffu, 0x000200f8u, 0x000000feu, 0x0003003eu, 0x000000bau, 0x000000ecu, 0x000500c4u, 0x00000006u, 0x00000101u, 0x000000ccu, 0x00000032u, 0x000500c7u, 0x00000006u, 0x00000103u, 0x0000003du, 0x00000032u, 0x00050080u, 0x00000006u, 0x00000104u, 0x00000101u, 0x00000103u, 0x0003003eu, 0x00000038u, 0x00000104u, 0x000200f9u, 0x000000c0u, 0x000200f8u, 0x000000ffu, 0x000200f9u, 0x000000ebu, 0x000200f8u, 0x000000ebu, 0x000200f9u, 0x000000c1u, 0x000200f8u, 0x000000c1u, 0x00050082u, 0x00000006u, 0x00000107u, 0x00000b56u, 0x00000032u, 0x0003003eu, 0x000000bcu, 0x00000107u, 0x000200f9u, 0x000000beu, 0x000200f8u, 0x000000c0u, 0x000900f5u, 0x00000006u, 0x00000b60u, 0x0000003du, 0x000000c2u, 0x000000f1u, 0x000000eau, 0x00000104u, 0x000000feu, 0x000900f5u, 0x00000011u, 0x00000b5bu, 0x000000bbu, 0x000000c2u, 0x000000ecu, 0x000000eau, 0x000000ecu, 0x000000feu, 0x000400a8u, 0x00000011u, 0x00000109u, 0x00000b5bu, 0x000300f7u, 0x0000010bu, 0x00000000u, 0x000400fau, 0x00000109u, 0x0000010au, 0x0000010bu, 0x000200f8u, 0x0000010au, 0x0003003eu, 0x000004cau, 0x000000ecu, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x0000010bu, 0x000200f9u, 0x0000004eu, 0x000200f8u, 0x0000004eu, 0x000700f5u, 0x00000006u, 0x00000b71u, 0x00000b72u, 0x00000068u, 0x0000003fu, 0x0000010bu, 0x000700f5u, 0x00000006u, 0x00000b5du, 0x0000003du, 0x00000068u, 0x00000b60u, 0x0000010bu, 0x0003003eu, 0x0000010du, 0x00000b5du, 0x0003003eu, 0x0000010fu, 0x0000003fu, 0x000200f9u, 0x00000046u, 0x000200f8u, 0x00000110u, 0x000500aau, 0x00000011u, 0x00000112u, 0x00000037u, 0x0000003fu, 0x000300f7u, 0x00000114u, 0x00000000u, 0x000400fau, 0x00000112u, 0x00000113u, 0x00000119u, 0x000200f8u, 0x00000113u, 0x0003003eu, 0x0000010du, 0x0000003du, 0x00050041u, 0x00000007u, 0x00000116u, 0x00000014u, 0x00000032u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000116u, 0x00050082u, 0x00000006u, 0x00000118u, 0x00000117u, 0x00000032u, 0x0003003eu, 0x0000010fu, 0x00000118u, 0x000200f9u, 0x00000114u, 0x000200f8u, 0x00000119u, 0x0003003eu, 0x0000011bu, 0x0000003du, 0x00050041u, 0x00000009u, 0x0000011eu, 0x00000014u, 0x0000011au, 0x0004003du, 0x00000008u, 0x0000011fu, 0x0000011eu, 0x0003003eu, 0x0000011du, 0x0000011fu, 0x00060039u, 0x00000006u, 0x00000120u, 0x0000000du, 0x0000011bu, 0x0000011du, 0x0003003eu, 0x0000010fu, 0x00000120u, 0x00050084u, 0x00000006u, 0x00000124u, 0x00000120u, 0x00000037u, 0x00050082u, 0x00000006u, 0x00000125u, 0x0000003du, 0x00000124u, 0x0003003eu, 0x0000010du, 0x00000125u, 0x00050041u, 0x00000007u, 0x00000127u, 0x00000014u, 0x00000032u, 0x0004003du, 0x00000006u, 0x00000128u, 0x00000127u, 0x000500afu, 0x00000011u, 0x00000129u, 0x00000120u, 0x00000128u, 0x000300f7u, 0x0000012bu, 0x00000000u, 0x000400fau, 0x00000129u, 0x0000012au, 0x0000012bu, 0x000200f8u, 0x0000012au, 0x0004003du, 0x00000006u, 0x0000012fu, 0x00000127u, 0x00050082u, 0x00000006u, 0x00000130u, 0x00000120u, 0x0000012fu, 0x00050080u, 0x00000006u, 0x00000131u, 0x00000130u, 0x00000032u, 0x00050084u, 0x00000006u, 0x00000132u, 0x00000037u, 0x00000131u, 0x00050080u, 0x00000006u, 0x00000134u, 0x00000125u, 0x00000132u, 0x0003003eu, 0x0000010du, 0x00000134u, 0x0004003du, 0x00000006u, 0x00000136u, 0x00000127u, 0x00050082u, 0x00000006u, 0x00000137u, 0x00000136u, 0x00000032u, 0x0003003eu, 0x0000010fu, 0x00000137u, 0x000200f9u, 0x0000012bu, 0x000200f8u, 0x0000012bu, 0x000700f5u, 0x00000006u, 0x00000b66u, 0x00000120u, 0x00000119u, 0x00000137u, 0x0000012au, 0x000700f5u, 0x00000006u, 0x00000b63u, 0x00000125u, 0x00000119u, 0x00000134u, 0x0000012au, 0x000200f9u, 0x00000114u, 0x000200f8u, 0x00000114u, 0x000700f5u, 0x00000006u, 0x00000b65u, 0x00000118u, 0x00000113u, 0x00000b66u, 0x0000012bu, 0x000700f5u, 0x00000006u, 0x00000b62u, 0x0000003du, 0x00000113u, 0x00000b63u, 0x0000012bu, 0x000200f9u, 0x00000046u, 0x000200f8u, 0x00000046u, 0x000700f5u, 0x00000006u, 0x00000b70u, 0x00000b71u, 0x0000004eu, 0x0000003fu, 0x00000114u, 0x000700f5u, 0x00000006u, 0x00000b64u, 0x0000003fu, 0x0000004eu, 0x00000b65u, 0x00000114u, 0x000700f5u, 0x00000006u, 0x00000b61u, 0x00000b5du, 0x0000004eu, 0x00000b62u, 0x00000114u, 0x000500c7u, 0x00000006u, 0x0000013bu, 0x00000b64u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000013cu, 0x0000013bu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x0000013du, 0x00000b61u, 0x0000013cu, 0x0003003eu, 0x00000138u, 0x0000013du, 0x00050041u, 0x00000007u, 0x0000013fu, 0x00000014u, 0x0000003fu, 0x0004003du, 0x00000006u, 0x00000140u, 0x0000013fu, 0x000500afu, 0x00000011u, 0x00000141u, 0x0000013du, 0x00000140u, 0x000500adu, 0x00000011u, 0x00000143u, 0x00000b64u, 0x0000003fu, 0x000500a7u, 0x00000011u, 0x00000144u, 0x00000141u, 0x00000143u, 0x000300f7u, 0x00000146u, 0x00000000u, 0x000400fau, 0x00000144u, 0x00000145u, 0x00000146u, 0x000200f8u, 0x00000145u, 0x00050082u, 0x00000006u, 0x00000148u, 0x00000b64u, 0x00000032u, 0x0003003eu, 0x0000010fu, 0x00000148u, 0x00050080u, 0x00000006u, 0x0000014bu, 0x00000b61u, 0x00000037u, 0x0003003eu, 0x0000010du, 0x0000014bu, 0x000200f9u, 0x00000146u, 0x000200f8u, 0x00000146u, 0x000700f5u, 0x00000006u, 0x00000b78u, 0x00000b61u, 0x00000046u, 0x0000014bu, 0x00000145u, 0x000700f5u, 0x00000006u, 0x00000b6eu, 0x00000b64u, 0x00000046u, 0x00000148u, 0x00000145u, 0x000500c7u, 0x00000006u, 0x0000014du, 0x00000b6eu, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000014eu, 0x0000014du, 0x00000032u, 0x000500c5u, 0x00000006u, 0x00000150u, 0x0000014eu, 0x00000b70u, 0x000500c6u, 0x00000006u, 0x00000152u, 0x00000b78u, 0x00000150u, 0x0003003eu, 0x0000010du, 0x00000152u, 0x00050041u, 0x00000007u, 0x00000154u, 0x00000014u, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000155u, 0x00000154u, 0x000500aau, 0x00000011u, 0x00000156u, 0x00000155u, 0x00000098u, 0x0004003du, 0x00000011u, 0x00000157u, 0x00000017u, 0x000500a6u, 0x00000011u, 0x00000158u, 0x00000156u, 0x00000157u, 0x000300f7u, 0x0000015au, 0x00000000u, 0x000400fau, 0x00000158u, 0x00000159u, 0x00000160u, 0x000200f8u, 0x00000159u, 0x000500c7u, 0x00000006u, 0x0000015eu, 0x00000152u, 0x00000051u, 0x00050084u, 0x00000006u, 0x0000015fu, 0x0000015cu, 0x0000015eu, 0x0003003eu, 0x0000015bu, 0x0000015fu, 0x000200f9u, 0x0000015au, 0x000200f8u, 0x00000160u, 0x0004003du, 0x00000006u, 0x00000162u, 0x00000154u, 0x000500aau, 0x00000011u, 0x00000163u, 0x00000162u, 0x00000043u, 0x000300f7u, 0x00000165u, 0x00000000u, 0x000400fau, 0x00000163u, 0x00000164u, 0x0000017bu, 0x000200f8u, 0x00000164u, 0x000500c7u, 0x00000006u, 0x00000167u, 0x00000152u, 0x00000043u, 0x000500abu, 0x00000011u, 0x00000168u, 0x00000167u, 0x0000003fu, 0x000300f7u, 0x0000016au, 0x00000000u, 0x000400fau, 0x00000168u, 0x00000169u, 0x0000016au, 0x000200f8u, 0x00000169u, 0x000500adu, 0x00000011u, 0x0000016cu, 0x00000b6eu, 0x0000003fu, 0x000300f7u, 0x0000016eu, 0x00000000u, 0x000400fau, 0x0000016cu, 0x0000016du, 0x00000176u, 0x000200f8u, 0x0000016du, 0x00050082u, 0x00000006u, 0x00000170u, 0x00000b6eu, 0x00000032u, 0x0003003eu, 0x0000010fu, 0x00000170u, 0x00050080u, 0x00000006u, 0x00000173u, 0x00000152u, 0x00000037u, 0x0003003eu, 0x0000010du, 0x00000173u, 0x000500c6u, 0x00000006u, 0x00000175u, 0x00000173u, 0x00000043u, 0x0003003eu, 0x0000010du, 0x00000175u, 0x000200f9u, 0x0000016eu, 0x000200f8u, 0x00000176u, 0x0003003eu, 0x000004cau, 0x000000ecu, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x0000016eu, 0x000200f9u, 0x0000016au, 0x000200f8u, 0x0000016au, 0x000700f5u, 0x00000006u, 0x00000b88u, 0x00000b6eu, 0x00000164u, 0x00000170u, 0x0000016eu, 0x000700f5u, 0x00000006u, 0x00000b82u, 0x00000152u, 0x00000164u, 0x00000175u, 0x0000016eu, 0x000500c7u, 0x00000006u, 0x00000179u, 0x00000b82u, 0x00000051u, 0x00050084u, 0x00000006u, 0x0000017au, 0x00000043u, 0x00000179u, 0x0003003eu, 0x0000015bu, 0x0000017au, 0x000200f9u, 0x00000165u, 0x000200f8u, 0x0000017bu, 0x0004003du, 0x00000006u, 0x0000017du, 0x00000154u, 0x000500aau, 0x00000011u, 0x0000017eu, 0x0000017du, 0x00000032u, 0x000300f7u, 0x00000180u, 0x00000000u, 0x000400fau, 0x0000017eu, 0x0000017fu, 0x00000180u, 0x000200f8u, 0x0000017fu, 0x0003003eu, 0x00000181u, 0x0000003fu, 0x000200f9u, 0x00000182u, 0x000200f8u, 0x00000182u, 0x000700f5u, 0x00000006u, 0x00000b7bu, 0x00000152u, 0x0000017fu, 0x00000198u, 0x00000185u, 0x000700f5u, 0x00000006u, 0x00000b7au, 0x00000b6eu, 0x0000017fu, 0x00000193u, 0x00000185u, 0x000700f5u, 0x00000006u, 0x00000b79u, 0x0000003fu, 0x0000017fu, 0x0000019au, 0x00000185u, 0x000400f6u, 0x00000184u, 0x00000185u, 0x00000000u, 0x000200f9u, 0x00000186u, 0x000200f8u, 0x00000186u, 0x000500b1u, 0x00000011u, 0x00000188u, 0x00000b79u, 0x0000015cu, 0x000500adu, 0x00000011u, 0x0000018au, 0x00000b7au, 0x0000003fu, 0x000500a7u, 0x00000011u, 0x0000018bu, 0x00000188u, 0x0000018au, 0x000300f7u, 0x0000018du, 0x00000000u, 0x000400fau, 0x0000018bu, 0x0000018cu, 0x0000018du, 0x000200f8u, 0x0000018cu, 0x000500c7u, 0x00000006u, 0x0000018fu, 0x00000b7bu, 0x00000153u, 0x000500abu, 0x00000011u, 0x00000190u, 0x0000018fu, 0x0000003fu, 0x000200f9u, 0x0000018du, 0x000200f8u, 0x0000018du, 0x000700f5u, 0x00000011u, 0x00000191u, 0x0000018bu, 0x00000186u, 0x00000190u, 0x0000018cu, 0x000400fau, 0x00000191u, 0x00000183u, 0x00000184u, 0x000200f8u, 0x00000183u, 0x00050082u, 0x00000006u, 0x00000193u, 0x00000b7au, 0x00000032u, 0x0003003eu, 0x0000010fu, 0x00000193u, 0x00050080u, 0x00000006u, 0x00000196u, 0x00000b7bu, 0x00000037u, 0x0003003eu, 0x0000010du, 0x00000196u, 0x000500c6u, 0x00000006u, 0x00000198u, 0x00000196u, 0x00000043u, 0x0003003eu, 0x0000010du, 0x00000198u, 0x000200f9u, 0x00000185u, 0x000200f8u, 0x00000185u, 0x00050080u, 0x00000006u, 0x0000019au, 0x00000b79u, 0x00000032u, 0x0003003eu, 0x00000181u, 0x0000019au, 0x000200f9u, 0x00000182u, 0x000200f8u, 0x00000184u, 0x000500c7u, 0x00000006u, 0x0000019cu, 0x00000b7bu, 0x00000153u, 0x000500abu, 0x00000011u, 0x0000019du, 0x0000019cu, 0x0000003fu, 0x000300f7u, 0x0000019fu, 0x00000000u, 0x000400fau, 0x0000019du, 0x0000019eu, 0x0000019fu, 0x000200f8u, 0x0000019eu, 0x0003003eu, 0x000004cau, 0x000000ecu, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x0000019fu, 0x000500c7u, 0x00000006u, 0x000001a2u, 0x00000b7bu, 0x00000051u, 0x0003003eu, 0x0000015bu, 0x000001a2u, 0x000200f9u, 0x00000180u, 0x000200f8u, 0x00000180u, 0x000700f5u, 0x00000006u, 0x00000b8cu, 0x00000b92u, 0x0000017bu, 0x000001a2u, 0x0000019fu, 0x000700f5u, 0x00000006u, 0x00000b89u, 0x00000b6eu, 0x0000017bu, 0x00000b7au, 0x0000019fu, 0x000700f5u, 0x00000006u, 0x00000b85u, 0x00000152u, 0x0000017bu, 0x00000b7bu, 0x0000019fu, 0x000200f9u, 0x00000165u, 0x000200f8u, 0x00000165u, 0x000700f5u, 0x00000006u, 0x00000b8bu, 0x0000017au, 0x0000016au, 0x00000b8cu, 0x00000180u, 0x000700f5u, 0x00000006u, 0x00000b87u, 0x00000b88u, 0x0000016au, 0x00000b89u, 0x00000180u, 0x000700f5u, 0x00000006u, 0x00000b84u, 0x00000b82u, 0x0000016au, 0x00000b85u, 0x00000180u, 0x000200f9u, 0x0000015au, 0x000200f8u, 0x0000015au, 0x000700f5u, 0x00000006u, 0x00000b8au, 0x0000015fu, 0x00000159u, 0x00000b8bu, 0x00000165u, 0x000700f5u, 0x00000006u, 0x00000b86u, 0x00000b6eu, 0x00000159u, 0x00000b87u, 0x00000165u, 0x000700f5u, 0x00000006u, 0x00000b83u, 0x00000152u, 0x00000159u, 0x00000b84u, 0x00000165u, 0x0004003du, 0x00000006u, 0x000001a5u, 0x0000013fu, 0x000500afu, 0x00000011u, 0x000001a6u, 0x00000b83u, 0x000001a5u, 0x000300f7u, 0x000001a8u, 0x00000000u, 0x000400fau, 0x000001a6u, 0x000001a7u, 0x000001a8u, 0x000200f8u, 0x000001a7u, 0x0003003eu, 0x000004cau, 0x000000ecu, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x000001a8u, 0x00050041u, 0x00000007u, 0x000001abu, 0x00000014u, 0x0000015cu, 0x0004003du, 0x00000006u, 0x000001acu, 0x000001abu, 0x00050041u, 0x00000007u, 0x000001afu, 0x00000014u, 0x000001aeu, 0x0004003du, 0x00000006u, 0x000001b0u, 0x000001afu, 0x00050084u, 0x00000006u, 0x000001b1u, 0x00000b86u, 0x000001b0u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x00000154u, 0x00050082u, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x000001b5u, 0x000001b1u, 0x000001b4u, 0x00050080u, 0x00000006u, 0x000001b6u, 0x000001acu, 0x000001b5u, 0x0003003eu, 0x000001aau, 0x000001b6u, 0x00050080u, 0x00000006u, 0x000001bau, 0x000001b6u, 0x00000b8au, 0x000500c7u, 0x00000006u, 0x000001bcu, 0x00000b83u, 0x00000032u, 0x00050084u, 0x00000006u, 0x000001bdu, 0x0000015cu, 0x000001bcu, 0x00050080u, 0x00000006u, 0x000001beu, 0x000001bau, 0x000001bdu, 0x0003003eu, 0x000001b7u, 0x000001beu, 0x000500c7u, 0x00000006u, 0x000001c0u, 0x000001beu, 0x00000098u, 0x000500aau, 0x00000011u, 0x000001c1u, 0x000001c0u, 0x0000003fu, 0x000300f7u, 0x000001c3u, 0x00000000u, 0x000400fau, 0x000001c1u, 0x000001c2u, 0x000001d0u, 0x000200f8u, 0x000001c2u, 0x000500c3u, 0x00000006u, 0x000001ccu, 0x000001beu, 0x00000043u, 0x00060041u, 0x000001cdu, 0x000001ceu, 0x000001cau, 0x0000003fu, 0x000001ccu, 0x0004003du, 0x000001c4u, 0x000001cfu, 0x000001ceu, 0x0003003eu, 0x000001c6u, 0x000001cfu, 0x000200f9u, 0x000001c3u, 0x000200f8u, 0x000001d0u, 0x000500c6u, 0x00000006u, 0x000001d7u, 0x000001beu, 0x00000098u, 0x00060041u, 0x000001d8u, 0x000001d9u, 0x000001d5u, 0x0000003fu, 0x000001d7u, 0x0004003du, 0x000001d1u, 0x000001dau, 0x000001d9u, 0x00040071u, 0x000001c4u, 0x000001dbu, 0x000001dau, 0x000500c4u, 0x000001c4u, 0x000001ddu, 0x000001dbu, 0x000001dcu, 0x00050080u, 0x00000006u, 0x000001dfu, 0x000001beu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x000001e0u, 0x000001dfu, 0x00000098u, 0x00060041u, 0x000001d8u, 0x000001e1u, 0x000001d5u, 0x0000003fu, 0x000001e0u, 0x0004003du, 0x000001d1u, 0x000001e2u, 0x000001e1u, 0x00040071u, 0x000001c4u, 0x000001e3u, 0x000001e2u, 0x000500c4u, 0x000001c4u, 0x000001e4u, 0x000001e3u, 0x0000005cu, 0x000500c5u, 0x000001c4u, 0x000001e5u, 0x000001ddu, 0x000001e4u, 0x00050080u, 0x00000006u, 0x000001e7u, 0x000001beu, 0x00000043u, 0x000500c6u, 0x00000006u, 0x000001e8u, 0x000001e7u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x000001e9u, 0x000001d5u, 0x0000003fu, 0x000001e8u, 0x0004003du, 0x000001d1u, 0x000001eau, 0x000001e9u, 0x00040071u, 0x000001c4u, 0x000001ebu, 0x000001eau, 0x000500c4u, 0x000001c4u, 0x000001ecu, 0x000001ebu, 0x0000002du, 0x000500c5u, 0x000001c4u, 0x000001edu, 0x000001e5u, 0x000001ecu, 0x00050080u, 0x00000006u, 0x000001efu, 0x000001beu, 0x00000098u, 0x000500c6u, 0x00000006u, 0x000001f0u, 0x000001efu, 0x00000098u, 0x00060041u, 0x000001d8u, 0x000001f1u, 0x000001d5u, 0x0000003fu, 0x000001f0u, 0x0004003du, 0x000001d1u, 0x000001f2u, 0x000001f1u, 0x00040071u, 0x000001c4u, 0x000001f3u, 0x000001f2u, 0x000500c5u, 0x000001c4u, 0x000001f4u, 0x000001edu, 0x000001f3u, 0x0003003eu, 0x000001c6u, 0x000001f4u, 0x000200f9u, 0x000001c3u, 0x000200f8u, 0x000001c3u, 0x000700f5u, 0x000001c4u, 0x00000b97u, 0x000001cfu, 0x000001c2u, 0x000001f4u, 0x000001d0u, 0x0004003du, 0x00000011u, 0x000001f5u, 0x00000017u, 0x000300f7u, 0x000001f7u, 0x00000000u, 0x000400fau, 0x000001f5u, 0x000001f6u, 0x00000219u, 0x000200f8u, 0x000001f6u, 0x0004003du, 0x00000011u, 0x000001f8u, 0x00000016u, 0x000300f7u, 0x000001fau, 0x00000000u, 0x000400fau, 0x000001f8u, 0x000001f9u, 0x0000020bu, 0x000200f8u, 0x000001f9u, 0x000500c2u, 0x000001c4u, 0x000001feu, 0x00000b97u, 0x000001fdu, 0x000500c7u, 0x000001c4u, 0x00000200u, 0x000001feu, 0x000001ffu, 0x0003003eu, 0x000001fbu, 0x00000200u, 0x000500c2u, 0x000001c4u, 0x00000204u, 0x00000b97u, 0x00000203u, 0x000500c7u, 0x000001c4u, 0x00000205u, 0x00000204u, 0x000001ffu, 0x0003003eu, 0x00000201u, 0x00000205u, 0x000500c4u, 0x000001c4u, 0x00000208u, 0x00000200u, 0x00000207u, 0x000500c5u, 0x000001c4u, 0x0000020au, 0x00000208u, 0x00000205u, 0x0003003eu, 0x000001c6u, 0x0000020au, 0x000200f9u, 0x000001fau, 0x000200f8u, 0x0000020bu, 0x000500c2u, 0x000001c4u, 0x0000020fu, 0x00000b97u, 0x0000020eu, 0x000500c7u, 0x000001c4u, 0x00000210u, 0x0000020fu, 0x000001ffu, 0x0003003eu, 0x0000020cu, 0x00000210u, 0x000500c2u, 0x000001c4u, 0x00000213u, 0x00000b97u, 0x00000207u, 0x000500c7u, 0x000001c4u, 0x00000214u, 0x00000213u, 0x000001ffu, 0x0003003eu, 0x00000211u, 0x00000214u, 0x000500c4u, 0x000001c4u, 0x00000216u, 0x00000210u, 0x00000207u, 0x000500c5u, 0x000001c4u, 0x00000218u, 0x00000216u, 0x00000214u, 0x0003003eu, 0x000001c6u, 0x00000218u, 0x000200f9u, 0x000001fau, 0x000200f8u, 0x000001fau, 0x000700f5u, 0x000001c4u, 0x00000b99u, 0x0000020au, 0x000001f9u, 0x00000218u, 0x0000020bu, 0x000200f9u, 0x000001f7u, 0x000200f8u, 0x00000219u, 0x0004003du, 0x00000011u, 0x0000021au, 0x00000016u, 0x000600a9u, 0x000001c4u, 0x0000021cu, 0x0000021au, 0x0000021bu, 0x00000203u, 0x00050084u, 0x000001c4u, 0x0000021du, 0x000001fdu, 0x0000021cu, 0x00050082u, 0x000001c4u, 0x0000021eu, 0x000001fdu, 0x0000021du, 0x000500c2u, 0x000001c4u, 0x00000220u, 0x00000b97u, 0x0000021eu, 0x0003003eu, 0x000001c6u, 0x00000220u, 0x000500c7u, 0x000001c4u, 0x00000223u, 0x00000220u, 0x00000221u, 0x0003003eu, 0x000001c6u, 0x00000223u, 0x000200f9u, 0x000001f7u, 0x000200f8u, 0x000001f7u, 0x000700f5u, 0x000001c4u, 0x00000b98u, 0x00000b99u, 0x000001fau, 0x00000223u, 0x00000219u, 0x0003003eu, 0x00000225u, 0x00000b98u, 0x0003003eu, 0x00000228u, 0x000000ecu, 0x0003003eu, 0x000004cau, 0x000000ecu, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x000004c8u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000001du, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000010u, 0x0000001bu, 0x00030037u, 0x00000007u, 0x0000001cu, 0x000200f8u, 0x0000001eu, 0x0005003bu, 0x00000012u, 0x000004cdu, 0x00000007u, 0x000000bbu, 0x0004003bu, 0x00000007u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000022fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000232u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000237u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000023du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000024du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000024eu, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000250u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000254u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000255u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x00000257u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000025bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000261u, 0x00000007u, 0x0004003bu, 0x00000012u, 0x00000275u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000276u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000280u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000286u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b1u, 0x00000007u, 0x0004003bu, 0x00000009u, 0x000002b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000031fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000332u, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x0000033fu, 0x00000007u, 0x000300f7u, 0x000004cbu, 0x00000000u, 0x000300fbu, 0x00000203u, 0x000004ccu, 0x000200f8u, 0x000004ccu, 0x00050041u, 0x00000007u, 0x0000022au, 0x0000001bu, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000022bu, 0x0000022au, 0x000500c7u, 0x00000006u, 0x0000022du, 0x0000022bu, 0x0000022cu, 0x000500c3u, 0x00000006u, 0x0000022eu, 0x0000022du, 0x00000032u, 0x0003003eu, 0x00000229u, 0x0000022eu, 0x00050041u, 0x00000007u, 0x00000230u, 0x0000001bu, 0x00000035u, 0x0004003du, 0x00000006u, 0x00000231u, 0x00000230u, 0x0003003eu, 0x0000022fu, 0x00000231u, 0x0004003du, 0x00000006u, 0x00000233u, 0x0000001cu, 0x00050082u, 0x00000006u, 0x00000235u, 0x00000233u, 0x0000022eu, 0x000500c7u, 0x00000006u, 0x00000236u, 0x00000235u, 0x00000030u, 0x0003003eu, 0x00000232u, 0x00000236u, 0x0003003eu, 0x00000237u, 0x0000003fu, 0x00050041u, 0x00000007u, 0x00000238u, 0x0000001bu, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000239u, 0x00000238u, 0x000500aau, 0x00000011u, 0x0000023au, 0x00000239u, 0x00000043u, 0x000300f7u, 0x0000023cu, 0x00000000u, 0x000400fau, 0x0000023au, 0x0000023bu, 0x000002a7u, 0x000200f8u, 0x0000023bu, 0x000500c3u, 0x00000006u, 0x0000023fu, 0x00000236u, 0x00000043u, 0x0003003eu, 0x0000023du, 0x0000023fu, 0x0004003du, 0x00000006u, 0x00000241u, 0x00000230u, 0x000500aau, 0x00000011u, 0x00000242u, 0x00000241u, 0x0000003fu, 0x000300f7u, 0x00000244u, 0x00000000u, 0x000400fau, 0x00000242u, 0x00000243u, 0x0000024cu, 0x000200f8u, 0x00000243u, 0x00050041u, 0x00000007u, 0x00000246u, 0x0000001bu, 0x00000058u, 0x0004003du, 0x00000006u, 0x00000247u, 0x00000246u, 0x00050084u, 0x00000006u, 0x00000248u, 0x0000023fu, 0x00000247u, 0x000500c3u, 0x00000006u, 0x00000249u, 0x00000248u, 0x0000005cu, 0x000500c7u, 0x00000006u, 0x0000024au, 0x00000249u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000024bu, 0x0000024au, 0x00000032u, 0x0003003eu, 0x00000237u, 0x0000024bu, 0x000200f9u, 0x00000244u, 0x000200f8u, 0x0000024cu, 0x0003003eu, 0x0000024eu, 0x0000023fu, 0x00050041u, 0x00000009u, 0x00000251u, 0x0000001bu, 0x00000043u, 0x0004003du, 0x00000008u, 0x00000252u, 0x00000251u, 0x0003003eu, 0x00000250u, 0x00000252u, 0x00060039u, 0x00000006u, 0x00000253u, 0x0000000du, 0x0000024eu, 0x00000250u, 0x0003003eu, 0x0000024du, 0x00000253u, 0x0003003eu, 0x00000255u, 0x0000023fu, 0x00050041u, 0x00000009u, 0x00000258u, 0x0000001bu, 0x00000098u, 0x0004003du, 0x00000008u, 0x00000259u, 0x00000258u, 0x0003003eu, 0x00000257u, 0x00000259u, 0x00060039u, 0x00000006u, 0x0000025au, 0x0000000du, 0x00000255u, 0x00000257u, 0x0003003eu, 0x00000254u, 0x0000025au, 0x00050084u, 0x00000006u, 0x0000025fu, 0x00000231u, 0x00000253u, 0x00050082u, 0x00000006u, 0x00000260u, 0x0000023fu, 0x0000025fu, 0x0003003eu, 0x0000025bu, 0x00000260u, 0x00050084u, 0x00000006u, 0x00000265u, 0x00000231u, 0x0000025au, 0x00050082u, 0x00000006u, 0x00000266u, 0x0000023fu, 0x00000265u, 0x0003003eu, 0x00000261u, 0x00000266u, 0x00050041u, 0x00000007u, 0x00000269u, 0x0000001bu, 0x00000058u, 0x0004003du, 0x00000006u, 0x0000026au, 0x00000269u, 0x00050084u, 0x00000006u, 0x0000026bu, 0x00000266u, 0x0000026au, 0x000500c3u, 0x00000006u, 0x0000026cu, 0x0000026bu, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x0000026du, 0x00000001u, 0x0000002au, 0x00000253u, 0x0000026cu, 0x0003003eu, 0x0000024du, 0x0000026du, 0x0004003du, 0x00000006u, 0x00000271u, 0x00000269u, 0x00050084u, 0x00000006u, 0x00000272u, 0x00000260u, 0x00000271u, 0x000500c3u, 0x00000006u, 0x00000273u, 0x00000272u, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x00000274u, 0x00000001u, 0x00000027u, 0x0000025au, 0x00000273u, 0x0003003eu, 0x00000254u, 0x00000274u, 0x0003003eu, 0x00000275u, 0x000000bbu, 0x0003003eu, 0x00000276u, 0x00000274u, 0x000200f9u, 0x00000278u, 0x000200f8u, 0x00000278u, 0x000700f5u, 0x00000006u, 0x00000b9fu, 0x00000236u, 0x0000024cu, 0x00000bd6u, 0x0000027bu, 0x000700f5u, 0x00000011u, 0x00000b9cu, 0x000000bbu, 0x0000024cu, 0x00000be4u, 0x0000027bu, 0x000700f5u, 0x00000006u, 0x00000b9au, 0x00000274u, 0x0000024cu, 0x0000029eu, 0x0000027bu, 0x000700f5u, 0x00000006u, 0x00000bbeu, 0x0000003fu, 0x0000024cu, 0x00000bbfu, 0x0000027bu, 0x000400f6u, 0x0000027au, 0x0000027bu, 0x00000000u, 0x000200f9u, 0x0000027cu, 0x000200f8u, 0x0000027cu, 0x000500afu, 0x00000011u, 0x0000027fu, 0x00000b9au, 0x0000026du, 0x000400fau, 0x0000027fu, 0x00000279u, 0x0000027au, 0x000200f8u, 0x00000279u, 0x00050084u, 0x00000006u, 0x00000284u, 0x00000231u, 0x00000b9au, 0x00050082u, 0x00000006u, 0x00000285u, 0x0000023fu, 0x00000284u, 0x0003003eu, 0x00000280u, 0x00000285u, 0x0004003du, 0x00000006u, 0x00000289u, 0x00000269u, 0x00050084u, 0x00000006u, 0x0000028au, 0x00000285u, 0x00000289u, 0x000500c3u, 0x00000006u, 0x0000028bu, 0x0000028au, 0x0000005cu, 0x0003003eu, 0x00000286u, 0x0000028bu, 0x00050084u, 0x00000006u, 0x0000028fu, 0x0000028bu, 0x00000231u, 0x00050080u, 0x00000006u, 0x00000290u, 0x00000285u, 0x0000028fu, 0x000500aau, 0x00000011u, 0x00000292u, 0x00000290u, 0x0000023fu, 0x000300f7u, 0x00000294u, 0x00000000u, 0x000400fau, 0x00000292u, 0x00000293u, 0x00000294u, 0x000200f8u, 0x00000293u, 0x0003003eu, 0x00000275u, 0x000000ecu, 0x000500c7u, 0x00000006u, 0x00000296u, 0x0000028bu, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000297u, 0x00000296u, 0x00000032u, 0x0003003eu, 0x00000237u, 0x00000297u, 0x000500c4u, 0x00000006u, 0x00000299u, 0x00000285u, 0x00000043u, 0x000500c7u, 0x00000006u, 0x0000029bu, 0x00000b9fu, 0x00000098u, 0x00050080u, 0x00000006u, 0x0000029cu, 0x00000299u, 0x0000029bu, 0x0003003eu, 0x00000232u, 0x0000029cu, 0x000200f9u, 0x00000294u, 0x000200f8u, 0x00000294u, 0x000700f5u, 0x00000006u, 0x00000bd6u, 0x00000b9fu, 0x00000279u, 0x0000029cu, 0x00000293u, 0x000700f5u, 0x00000006u, 0x00000bbfu, 0x00000bbeu, 0x00000279u, 0x00000297u, 0x00000293u, 0x000600a9u, 0x00000011u, 0x00000be4u, 0x00000292u, 0x000000ecu, 0x00000b9cu, 0x000200f9u, 0x0000027bu, 0x000200f8u, 0x0000027bu, 0x00050082u, 0x00000006u, 0x0000029eu, 0x00000b9au, 0x00000032u, 0x0003003eu, 0x00000276u, 0x0000029eu, 0x000200f9u, 0x00000278u, 0x000200f8u, 0x0000027au, 0x000400a8u, 0x00000011u, 0x000002a0u, 0x00000b9cu, 0x000300f7u, 0x000002a2u, 0x00000000u, 0x000400fau, 0x000002a0u, 0x000002a1u, 0x000002a2u, 0x000200f8u, 0x000002a1u, 0x0003003eu, 0x000004cdu, 0x000000ecu, 0x000200f9u, 0x000004cbu, 0x000200f8u, 0x000002a2u, 0x000200f9u, 0x00000244u, 0x000200f8u, 0x00000244u, 0x000700f5u, 0x00000006u, 0x00000bbdu, 0x0000024bu, 0x00000243u, 0x00000bbeu, 0x000002a2u, 0x000700f5u, 0x00000006u, 0x00000ba1u, 0x00000236u, 0x00000243u, 0x00000b9fu, 0x000002a2u, 0x0003003eu, 0x000002a4u, 0x00000ba1u, 0x0003003eu, 0x000002a6u, 0x0000003fu, 0x000200f9u, 0x0000023cu, 0x000200f8u, 0x000002a7u, 0x000500aau, 0x00000011u, 0x000002a9u, 0x00000231u, 0x0000003fu, 0x000300f7u, 0x000002abu, 0x00000000u, 0x000400fau, 0x000002a9u, 0x000002aau, 0x000002b0u, 0x000200f8u, 0x000002aau, 0x0003003eu, 0x000002a4u, 0x00000236u, 0x00050041u, 0x00000007u, 0x000002adu, 0x0000001bu, 0x00000032u, 0x0004003du, 0x00000006u, 0x000002aeu, 0x000002adu, 0x00050082u, 0x00000006u, 0x000002afu, 0x000002aeu, 0x00000032u, 0x0003003eu, 0x000002a6u, 0x000002afu, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002b0u, 0x0003003eu, 0x000002b1u, 0x00000236u, 0x00050041u, 0x00000009u, 0x000002b4u, 0x0000001bu, 0x0000011au, 0x0004003du, 0x00000008u, 0x000002b5u, 0x000002b4u, 0x0003003eu, 0x000002b3u, 0x000002b5u, 0x00060039u, 0x00000006u, 0x000002b6u, 0x0000000du, 0x000002b1u, 0x000002b3u, 0x0003003eu, 0x000002a6u, 0x000002b6u, 0x00050084u, 0x00000006u, 0x000002bau, 0x000002b6u, 0x00000231u, 0x00050082u, 0x00000006u, 0x000002bbu, 0x00000236u, 0x000002bau, 0x0003003eu, 0x000002a4u, 0x000002bbu, 0x00050041u, 0x00000007u, 0x000002bdu, 0x0000001bu, 0x00000032u, 0x0004003du, 0x00000006u, 0x000002beu, 0x000002bdu, 0x000500afu, 0x00000011u, 0x000002bfu, 0x000002b6u, 0x000002beu, 0x000300f7u, 0x000002c1u, 0x00000000u, 0x000400fau, 0x000002bfu, 0x000002c0u, 0x000002c1u, 0x000200f8u, 0x000002c0u, 0x0004003du, 0x00000006u, 0x000002c5u, 0x000002bdu, 0x00050082u, 0x00000006u, 0x000002c6u, 0x000002b6u, 0x000002c5u, 0x00050080u, 0x00000006u, 0x000002c7u, 0x000002c6u, 0x00000032u, 0x00050084u, 0x00000006u, 0x000002c8u, 0x00000231u, 0x000002c7u, 0x00050080u, 0x00000006u, 0x000002cau, 0x000002bbu, 0x000002c8u, 0x0003003eu, 0x000002a4u, 0x000002cau, 0x0004003du, 0x00000006u, 0x000002ccu, 0x000002bdu, 0x00050082u, 0x00000006u, 0x000002cdu, 0x000002ccu, 0x00000032u, 0x0003003eu, 0x000002a6u, 0x000002cdu, 0x000200f9u, 0x000002c1u, 0x000200f8u, 0x000002c1u, 0x000700f5u, 0x00000006u, 0x00000baeu, 0x000002b6u, 0x000002b0u, 0x000002cdu, 0x000002c0u, 0x000700f5u, 0x00000006u, 0x00000ba4u, 0x000002bbu, 0x000002b0u, 0x000002cau, 0x000002c0u, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002abu, 0x000700f5u, 0x00000006u, 0x00000badu, 0x000002afu, 0x000002aau, 0x00000baeu, 0x000002c1u, 0x000700f5u, 0x00000006u, 0x00000ba3u, 0x00000236u, 0x000002aau, 0x00000ba4u, 0x000002c1u, 0x000200f9u, 0x0000023cu, 0x000200f8u, 0x0000023cu, 0x000700f5u, 0x00000006u, 0x00000bbcu, 0x00000bbdu, 0x00000244u, 0x0000003fu, 0x000002abu, 0x000700f5u, 0x00000006u, 0x00000bacu, 0x0000003fu, 0x00000244u, 0x00000badu, 0x000002abu, 0x000700f5u, 0x00000006u, 0x00000ba2u, 0x00000ba1u, 0x00000244u, 0x00000ba3u, 0x000002abu, 0x00050041u, 0x00000007u, 0x000002cfu, 0x0000001bu, 0x000002ceu, 0x0004003du, 0x00000006u, 0x000002d0u, 0x000002cfu, 0x00050041u, 0x00000007u, 0x000002d1u, 0x0000001bu, 0x00000153u, 0x0004003du, 0x00000006u, 0x000002d2u, 0x000002d1u, 0x000500abu, 0x00000011u, 0x000002d3u, 0x000002d0u, 0x000002d2u, 0x000300f7u, 0x000002d5u, 0x00000000u, 0x000400fau, 0x000002d3u, 0x000002d4u, 0x00000314u, 0x000200f8u, 0x000002d4u, 0x0004003du, 0x00000006u, 0x000002d7u, 0x000002d1u, 0x0004003du, 0x00000006u, 0x000002d9u, 0x000002cfu, 0x00050082u, 0x00000006u, 0x000002dau, 0x000002d7u, 0x000002d9u, 0x000500aau, 0x00000011u, 0x000002dbu, 0x000002dau, 0x00000032u, 0x000300f7u, 0x000002ddu, 0x00000000u, 0x000400fau, 0x000002dbu, 0x000002dcu, 0x000002f2u, 0x000200f8u, 0x000002dcu, 0x000500c7u, 0x00000006u, 0x000002e1u, 0x00000ba2u, 0x000002e0u, 0x00050084u, 0x00000006u, 0x000002e2u, 0x000002e1u, 0x0000015cu, 0x0003003eu, 0x000002deu, 0x000002e2u, 0x00050080u, 0x00000006u, 0x000002e5u, 0x000002e1u, 0x00000043u, 0x00050041u, 0x00000007u, 0x000002e7u, 0x0000001bu, 0x000002e6u, 0x0004003du, 0x00000006u, 0x000002e8u, 0x000002e7u, 0x0004003du, 0x00000006u, 0x000002eau, 0x000002d1u, 0x00050082u, 0x00000006u, 0x000002ebu, 0x00000098u, 0x000002eau, 0x000500c3u, 0x00000006u, 0x000002ecu, 0x000002e8u, 0x000002ebu, 0x000500b1u, 0x00000011u, 0x000002edu, 0x000002e5u, 0x000002ecu, 0x000300f7u, 0x000002efu, 0x00000000u, 0x000400fau, 0x000002edu, 0x000002eeu, 0x000002efu, 0x000200f8u, 0x000002eeu, 0x00050080u, 0x00000006u, 0x000002f1u, 0x000002e2u, 0x0000002du, 0x0003003eu, 0x000002deu, 0x000002f1u, 0x000200f9u, 0x000002efu, 0x000200f8u, 0x000002efu, 0x000700f5u, 0x00000006u, 0x00000bc7u, 0x000002e2u, 0x000002dcu, 0x000002f1u, 0x000002eeu, 0x000200f9u, 0x000002ddu, 0x000200f8u, 0x000002f2u, 0x0004003du, 0x00000006u, 0x000002f4u, 0x000002cfu, 0x000500aau, 0x00000011u, 0x000002f5u, 0x000002f4u, 0x00000043u, 0x000300f7u, 0x000002f7u, 0x00000000u, 0x000400fau, 0x000002f5u, 0x000002f6u, 0x000002f7u, 0x000200f8u, 0x000002f6u, 0x0004003du, 0x00000006u, 0x000002f9u, 0x000002d1u, 0x000500aau, 0x00000011u, 0x000002fau, 0x000002f9u, 0x00000032u, 0x000200f9u, 0x000002f7u, 0x000200f8u, 0x000002f7u, 0x000700f5u, 0x00000011u, 0x000002fbu, 0x000002f5u, 0x000002f2u, 0x000002fau, 0x000002f6u, 0x000300f7u, 0x000002fdu, 0x00000000u, 0x000400fau, 0x000002fbu, 0x000002fcu, 0x000002fdu, 0x000200f8u, 0x000002fcu, 0x000500c7u, 0x00000006u, 0x000002ffu, 0x00000ba2u, 0x0000015cu, 0x000500abu, 0x00000011u, 0x00000300u, 0x000002ffu, 0x0000003fu, 0x000300f7u, 0x00000302u, 0x00000000u, 0x000400fau, 0x00000300u, 0x00000301u, 0x00000302u, 0x000200f8u, 0x00000301u, 0x000500c7u, 0x00000006u, 0x00000304u, 0x00000231u, 0x0000015cu, 0x000500abu, 0x00000011u, 0x00000305u, 0x00000304u, 0x0000003fu, 0x000500adu, 0x00000011u, 0x00000307u, 0x00000bacu, 0x0000003fu, 0x000500a7u, 0x00000011u, 0x00000308u, 0x00000305u, 0x00000307u, 0x000300f7u, 0x0000030au, 0x00000000u, 0x000400fau, 0x00000308u, 0x00000309u, 0x00000310u, 0x000200f8u, 0x00000309u, 0x00050082u, 0x00000006u, 0x0000030cu, 0x00000bacu, 0x00000032u, 0x0003003eu, 0x000002a6u, 0x0000030cu, 0x00050080u, 0x00000006u, 0x0000030fu, 0x00000ba2u, 0x00000231u, 0x0003003eu, 0x000002a4u, 0x0000030fu, 0x000200f9u, 0x0000030au, 0x000200f8u, 0x00000310u, 0x0003003eu, 0x000004cdu, 0x000000ecu, 0x000200f9u, 0x000004cbu, 0x000200f8u, 0x0000030au, 0x000200f9u, 0x00000302u, 0x000200f8u, 0x00000302u, 0x000700f5u, 0x00000006u, 0x00000bb8u, 0x00000bacu, 0x000002fcu, 0x0000030cu, 0x0000030au, 0x000700f5u, 0x00000006u, 0x00000bafu, 0x00000ba2u, 0x000002fcu, 0x0000030fu, 0x0000030au, 0x000500c7u, 0x00000006u, 0x00000313u, 0x00000bafu, 0x000002e0u, 0x0003003eu, 0x000002deu, 0x00000313u, 0x000200f9u, 0x000002fdu, 0x000200f8u, 0x000002fdu, 0x000700f5u, 0x00000006u, 0x00000bc8u, 0x00000bccu, 0x000002f7u, 0x00000313u, 0x00000302u, 0x000700f5u, 0x00000006u, 0x00000bb7u, 0x00000bacu, 0x000002f7u, 0x00000bb8u, 0x00000302u, 0x000700f5u, 0x00000006u, 0x00000bb3u, 0x00000ba2u, 0x000002f7u, 0x00000bafu, 0x00000302u, 0x000200f9u, 0x000002ddu, 0x000200f8u, 0x000002ddu, 0x000700f5u, 0x00000006u, 0x00000bc6u, 0x00000bc7u, 0x000002efu, 0x00000bc8u, 0x000002fdu, 0x000700f5u, 0x00000006u, 0x00000bb5u, 0x00000bacu, 0x000002efu, 0x00000bb7u, 0x000002fdu, 0x000700f5u, 0x00000006u, 0x00000bb1u, 0x00000ba2u, 0x000002efu, 0x00000bb3u, 0x000002fdu, 0x000200f9u, 0x000002d5u, 0x000200f8u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x00000316u, 0x00000ba2u, 0x000002e0u, 0x00050084u, 0x00000006u, 0x00000317u, 0x00000316u, 0x00000043u, 0x0003003eu, 0x000002deu, 0x00000317u, 0x000200f9u, 0x000002d5u, 0x000200f8u, 0x000002d5u, 0x000700f5u, 0x00000006u, 0x00000bc5u, 0x00000bc6u, 0x000002ddu, 0x00000317u, 0x00000314u, 0x000700f5u, 0x00000006u, 0x00000bb4u, 0x00000bb5u, 0x000002ddu, 0x00000bacu, 0x00000314u, 0x000700f5u, 0x00000006u, 0x00000bb0u, 0x00000bb1u, 0x000002ddu, 0x00000ba2u, 0x00000314u, 0x00050041u, 0x00000007u, 0x00000319u, 0x0000001bu, 0x0000003fu, 0x0004003du, 0x00000006u, 0x0000031au, 0x00000319u, 0x000500afu, 0x00000011u, 0x0000031bu, 0x00000bb0u, 0x0000031au, 0x000300f7u, 0x0000031du, 0x00000000u, 0x000400fau, 0x0000031bu, 0x0000031cu, 0x0000031du, 0x000200f8u, 0x0000031cu, 0x0003003eu, 0x000004cdu, 0x000000ecu, 0x000200f9u, 0x000004cbu, 0x000200f8u, 0x0000031du, 0x00050041u, 0x00000007u, 0x00000320u, 0x0000001bu, 0x0000015cu, 0x0004003du, 0x00000006u, 0x00000321u, 0x00000320u, 0x00050041u, 0x00000007u, 0x00000323u, 0x0000001bu, 0x000001aeu, 0x0004003du, 0x00000006u, 0x00000324u, 0x00000323u, 0x00050084u, 0x00000006u, 0x00000325u, 0x00000bb4u, 0x00000324u, 0x0004003du, 0x00000006u, 0x00000327u, 0x000002d1u, 0x00050082u, 0x00000006u, 0x00000328u, 0x00000327u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000329u, 0x00000325u, 0x00000328u, 0x00050080u, 0x00000006u, 0x0000032au, 0x00000321u, 0x00000329u, 0x0003003eu, 0x0000031fu, 0x0000032au, 0x000500c7u, 0x00000006u, 0x0000032cu, 0x00000bb4u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x0000032du, 0x0000032cu, 0x00000032u, 0x000500c5u, 0x00000006u, 0x0000032fu, 0x0000032du, 0x00000bbcu, 0x000500c6u, 0x00000006u, 0x00000331u, 0x00000bb0u, 0x0000032fu, 0x0003003eu, 0x000002a4u, 0x00000331u, 0x00050080u, 0x00000006u, 0x00000335u, 0x0000032au, 0x00000bc5u, 0x000500c7u, 0x00000006u, 0x00000337u, 0x00000331u, 0x00000098u, 0x00050084u, 0x00000006u, 0x00000338u, 0x00000043u, 0x00000337u, 0x00050080u, 0x00000006u, 0x00000339u, 0x00000335u, 0x00000338u, 0x0003003eu, 0x00000332u, 0x00000339u, 0x000500c7u, 0x00000006u, 0x0000033bu, 0x00000339u, 0x00000032u, 0x000500aau, 0x00000011u, 0x0000033cu, 0x0000033bu, 0x0000003fu, 0x000300f7u, 0x0000033eu, 0x00000000u, 0x000400fau, 0x0000033cu, 0x0000033du, 0x0000034cu, 0x000200f8u, 0x0000033du, 0x000500c3u, 0x00000006u, 0x00000346u, 0x00000339u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000347u, 0x00000346u, 0x00000032u, 0x00060041u, 0x00000348u, 0x00000349u, 0x00000344u, 0x0000003fu, 0x00000347u, 0x0004003du, 0x00000340u, 0x0000034au, 0x00000349u, 0x00040071u, 0x000001c4u, 0x0000034bu, 0x0000034au, 0x0003003eu, 0x0000033fu, 0x0000034bu, 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x0000034cu, 0x000500c6u, 0x00000006u, 0x0000034eu, 0x00000339u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x0000034fu, 0x000001d5u, 0x0000003fu, 0x0000034eu, 0x0004003du, 0x000001d1u, 0x00000350u, 0x0000034fu, 0x00040071u, 0x000001c4u, 0x00000351u, 0x00000350u, 0x000500c4u, 0x000001c4u, 0x00000352u, 0x00000351u, 0x0000002du, 0x00050080u, 0x00000006u, 0x00000354u, 0x00000339u, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000355u, 0x00000354u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000356u, 0x000001d5u, 0x0000003fu, 0x00000355u, 0x0004003du, 0x000001d1u, 0x00000357u, 0x00000356u, 0x00040071u, 0x000001c4u, 0x00000358u, 0x00000357u, 0x000500c5u, 0x000001c4u, 0x00000359u, 0x00000352u, 0x00000358u, 0x0003003eu, 0x0000033fu, 0x00000359u, 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x0000033eu, 0x000700f5u, 0x000001c4u, 0x00000bd1u, 0x0000034bu, 0x0000033du, 0x00000359u, 0x0000034cu, 0x0003003eu, 0x00000225u, 0x00000bd1u, 0x0003003eu, 0x00000228u, 0x000000ecu, 0x0003003eu, 0x000004cdu, 0x000000ecu, 0x000200f9u, 0x000004cbu, 0x000200f8u, 0x000004cbu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000021u, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000010u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0005003bu, 0x00000012u, 0x000004c7u, 0x00000007u, 0x000000bbu, 0x0004003bu, 0x00000007u, 0x0000035bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000360u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000036du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000038au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003fcu, 0x00000007u, 0x0004003bu, 0x000001c5u, 0x00000412u, 0x00000007u, 0x000300f7u, 0x000004c5u, 0x00000000u, 0x000300fbu, 0x00000203u, 0x000004c6u, 0x000200f8u, 0x000004c6u, 0x00050041u, 0x00000007u, 0x0000035cu, 0x0000001fu, 0x0000002du, 0x0004003du, 0x00000006u, 0x0000035du, 0x0000035cu, 0x000500c7u, 0x00000006u, 0x0000035eu, 0x0000035du, 0x0000022cu, 0x000500c3u, 0x00000006u, 0x0000035fu, 0x0000035eu, 0x00000032u, 0x0003003eu, 0x0000035bu, 0x0000035fu, 0x0004003du, 0x00000006u, 0x00000361u, 0x00000020u, 0x00050082u, 0x00000006u, 0x00000363u, 0x00000361u, 0x0000035fu, 0x000500c7u, 0x00000006u, 0x00000364u, 0x00000363u, 0x00000030u, 0x0003003eu, 0x00000360u, 0x00000364u, 0x00050041u, 0x00000007u, 0x00000365u, 0x0000001fu, 0x00000153u, 0x0004003du, 0x00000006u, 0x00000366u, 0x00000365u, 0x00050041u, 0x00000007u, 0x00000367u, 0x0000001fu, 0x000002ceu, 0x0004003du, 0x00000006u, 0x00000368u, 0x00000367u, 0x00050082u, 0x00000006u, 0x00000369u, 0x00000366u, 0x00000368u, 0x000500aau, 0x00000011u, 0x0000036au, 0x00000369u, 0x00000043u, 0x000300f7u, 0x0000036cu, 0x00000000u, 0x000400fau, 0x0000036au, 0x0000036bu, 0x0000037cu, 0x000200f8u, 0x0000036bu, 0x000500c3u, 0x00000006u, 0x0000036fu, 0x00000364u, 0x00000043u, 0x0003003eu, 0x0000036du, 0x0000036fu, 0x0004003du, 0x00000006u, 0x00000371u, 0x00000365u, 0x00050082u, 0x00000006u, 0x00000372u, 0x00000371u, 0x00000043u, 0x000500c4u, 0x00000006u, 0x00000374u, 0x0000036fu, 0x00000372u, 0x0003003eu, 0x0000036du, 0x00000374u, 0x00050041u, 0x00000007u, 0x00000376u, 0x0000001fu, 0x000002e6u, 0x0004003du, 0x00000006u, 0x00000377u, 0x00000376u, 0x000500afu, 0x00000011u, 0x00000378u, 0x00000374u, 0x00000377u, 0x000300f7u, 0x0000037au, 0x00000000u, 0x000400fau, 0x00000378u, 0x00000379u, 0x0000037au, 0x000200f8u, 0x00000379u, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x0000037au, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000037cu, 0x0004003du, 0x00000006u, 0x0000037eu, 0x00000365u, 0x0004003du, 0x00000006u, 0x00000380u, 0x00000367u, 0x00050082u, 0x00000006u, 0x00000381u, 0x0000037eu, 0x00000380u, 0x000500aau, 0x00000011u, 0x00000382u, 0x00000381u, 0x00000032u, 0x000300f7u, 0x00000384u, 0x00000000u, 0x000400fau, 0x00000382u, 0x00000383u, 0x000003a0u, 0x000200f8u, 0x00000383u, 0x000500c7u, 0x00000006u, 0x00000386u, 0x00000364u, 0x0000015cu, 0x000500aau, 0x00000011u, 0x00000387u, 0x00000386u, 0x0000003fu, 0x000300f7u, 0x00000389u, 0x00000000u, 0x000400fau, 0x00000387u, 0x00000388u, 0x0000039eu, 0x000200f8u, 0x00000388u, 0x0004003du, 0x00000006u, 0x0000038cu, 0x00000367u, 0x0004003du, 0x00000006u, 0x0000038eu, 0x00000365u, 0x000500aau, 0x00000011u, 0x0000038fu, 0x0000038eu, 0x00000043u, 0x000600a9u, 0x00000006u, 0x00000390u, 0x0000038fu, 0x00000043u, 0x0000003fu, 0x00050080u, 0x00000006u, 0x00000391u, 0x0000038cu, 0x00000390u, 0x0003003eu, 0x0000038au, 0x00000391u, 0x000500c7u, 0x00000006u, 0x00000394u, 0x00000364u, 0x00000393u, 0x000500c3u, 0x00000006u, 0x00000396u, 0x00000394u, 0x00000391u, 0x0003003eu, 0x0000036du, 0x00000396u, 0x00050041u, 0x00000007u, 0x00000398u, 0x0000001fu, 0x000002e6u, 0x0004003du, 0x00000006u, 0x00000399u, 0x00000398u, 0x000500afu, 0x00000011u, 0x0000039au, 0x00000396u, 0x00000399u, 0x000300f7u, 0x0000039cu, 0x00000000u, 0x000400fau, 0x0000039au, 0x0000039bu, 0x0000039cu, 0x000200f8u, 0x0000039bu, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x0000039cu, 0x000200f9u, 0x00000389u, 0x000200f8u, 0x0000039eu, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x00000389u, 0x000200f9u, 0x00000384u, 0x000200f8u, 0x000003a0u, 0x0004003du, 0x00000006u, 0x000003a2u, 0x00000365u, 0x0004003du, 0x00000006u, 0x000003a4u, 0x00000367u, 0x000500aau, 0x00000011u, 0x000003a5u, 0x000003a2u, 0x000003a4u, 0x000300f7u, 0x000003a7u, 0x00000000u, 0x000400fau, 0x000003a5u, 0x000003a6u, 0x000003c2u, 0x000200f8u, 0x000003a6u, 0x000500c7u, 0x00000006u, 0x000003a9u, 0x00000364u, 0x00000040u, 0x000500aau, 0x00000011u, 0x000003aau, 0x000003a9u, 0x0000003fu, 0x000300f7u, 0x000003acu, 0x00000000u, 0x000400fau, 0x000003aau, 0x000003abu, 0x000003c0u, 0x000200f8u, 0x000003abu, 0x0004003du, 0x00000006u, 0x000003afu, 0x00000367u, 0x0004003du, 0x00000006u, 0x000003b1u, 0x00000365u, 0x000500aau, 0x00000011u, 0x000003b2u, 0x000003b1u, 0x00000043u, 0x000600a9u, 0x00000006u, 0x000003b3u, 0x000003b2u, 0x00000043u, 0x0000003fu, 0x00050080u, 0x00000006u, 0x000003b4u, 0x000003afu, 0x000003b3u, 0x0003003eu, 0x000003adu, 0x000003b4u, 0x000500c7u, 0x00000006u, 0x000003b6u, 0x00000364u, 0x000002e0u, 0x000500c3u, 0x00000006u, 0x000003b8u, 0x000003b6u, 0x000003b4u, 0x0003003eu, 0x0000036du, 0x000003b8u, 0x00050041u, 0x00000007u, 0x000003bau, 0x0000001fu, 0x000002e6u, 0x0004003du, 0x00000006u, 0x000003bbu, 0x000003bau, 0x000500afu, 0x00000011u, 0x000003bcu, 0x000003b8u, 0x000003bbu, 0x000300f7u, 0x000003beu, 0x00000000u, 0x000400fau, 0x000003bcu, 0x000003bdu, 0x000003beu, 0x000200f8u, 0x000003bdu, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x000003beu, 0x000200f9u, 0x000003acu, 0x000200f8u, 0x000003c0u, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x000003acu, 0x000200f9u, 0x000003a7u, 0x000200f8u, 0x000003c2u, 0x0004003du, 0x00000006u, 0x000003c4u, 0x00000365u, 0x0004003du, 0x00000006u, 0x000003c6u, 0x00000367u, 0x00050082u, 0x00000006u, 0x000003c7u, 0x000003c4u, 0x000003c6u, 0x000500aau, 0x00000011u, 0x000003c9u, 0x000003c7u, 0x000003c8u, 0x000300f7u, 0x000003cbu, 0x00000000u, 0x000400fau, 0x000003c9u, 0x000003cau, 0x000003e2u, 0x000200f8u, 0x000003cau, 0x000500c7u, 0x00000006u, 0x000003ceu, 0x00000364u, 0x000003cdu, 0x000500aau, 0x00000011u, 0x000003cfu, 0x000003ceu, 0x0000003fu, 0x000300f7u, 0x000003d1u, 0x00000000u, 0x000400fau, 0x000003cfu, 0x000003d0u, 0x000003e0u, 0x000200f8u, 0x000003d0u, 0x0004003du, 0x00000006u, 0x000003d4u, 0x00000367u, 0x0003003eu, 0x000003d2u, 0x000003d4u, 0x000500c3u, 0x00000006u, 0x000003d7u, 0x00000364u, 0x000003d4u, 0x000500c7u, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x00000393u, 0x0003003eu, 0x0000036du, 0x000003d8u, 0x00050041u, 0x00000007u, 0x000003dau, 0x0000001fu, 0x000002e6u, 0x0004003du, 0x00000006u, 0x000003dbu, 0x000003dau, 0x000500afu, 0x00000011u, 0x000003dcu, 0x000003d8u, 0x000003dbu, 0x000300f7u, 0x000003deu, 0x00000000u, 0x000400fau, 0x000003dcu, 0x000003ddu, 0x000003deu, 0x000200f8u, 0x000003ddu, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x000003deu, 0x000200f9u, 0x000003d1u, 0x000200f8u, 0x000003e0u, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x000003d1u, 0x000200f9u, 0x000003cbu, 0x000200f8u, 0x000003e2u, 0x000500c3u, 0x00000006u, 0x000003e5u, 0x00000364u, 0x00000043u, 0x0003003eu, 0x000003e3u, 0x000003e5u, 0x00050084u, 0x00000006u, 0x000003e7u, 0x000003e5u, 0x00000043u, 0x0003003eu, 0x000003e3u, 0x000003e7u, 0x00050084u, 0x00000006u, 0x000003eau, 0x000003e5u, 0x0000015cu, 0x0003003eu, 0x000003e8u, 0x000003eau, 0x00050080u, 0x00000006u, 0x000003ecu, 0x000003eau, 0x00000043u, 0x00050041u, 0x00000007u, 0x000003edu, 0x0000001fu, 0x000002e6u, 0x0004003du, 0x00000006u, 0x000003eeu, 0x000003edu, 0x000500b1u, 0x00000011u, 0x000003efu, 0x000003ecu, 0x000003eeu, 0x000300f7u, 0x000003f1u, 0x00000000u, 0x000400fau, 0x000003efu, 0x000003f0u, 0x000003f1u, 0x000200f8u, 0x000003f0u, 0x0003003eu, 0x000003e8u, 0x000003ecu, 0x000200f9u, 0x000003f1u, 0x000200f8u, 0x000003f1u, 0x000600a9u, 0x00000006u, 0x00000be5u, 0x000003efu, 0x000003ecu, 0x000003eau, 0x0004003du, 0x00000006u, 0x000003f6u, 0x000003edu, 0x000500afu, 0x00000011u, 0x000003f7u, 0x00000be5u, 0x000003f6u, 0x000300f7u, 0x000003f9u, 0x00000000u, 0x000400fau, 0x000003f7u, 0x000003f8u, 0x000003f9u, 0x000200f8u, 0x000003f8u, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x000003f9u, 0x0003003eu, 0x0000036du, 0x00000be5u, 0x000200f9u, 0x000003cbu, 0x000200f8u, 0x000003cbu, 0x000700f5u, 0x00000006u, 0x00000bdbu, 0x000003d8u, 0x000003d1u, 0x00000be5u, 0x000003f9u, 0x000200f9u, 0x000003a7u, 0x000200f8u, 0x000003a7u, 0x000700f5u, 0x00000006u, 0x00000bdau, 0x000003b8u, 0x000003acu, 0x00000bdbu, 0x000003cbu, 0x000200f9u, 0x00000384u, 0x000200f8u, 0x00000384u, 0x000700f5u, 0x00000006u, 0x00000bd9u, 0x00000396u, 0x00000389u, 0x00000bdau, 0x000003a7u, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036cu, 0x000700f5u, 0x00000006u, 0x00000bd8u, 0x00000374u, 0x0000037au, 0x00000bd9u, 0x00000384u, 0x00050041u, 0x00000007u, 0x000003fdu, 0x0000001fu, 0x0000015cu, 0x0004003du, 0x00000006u, 0x000003feu, 0x000003fdu, 0x0004003du, 0x00000006u, 0x00000401u, 0x00000365u, 0x00050082u, 0x00000006u, 0x00000402u, 0x00000401u, 0x00000032u, 0x000500c4u, 0x00000006u, 0x00000403u, 0x00000bd8u, 0x00000402u, 0x00050080u, 0x00000006u, 0x00000404u, 0x000003feu, 0x00000403u, 0x0003003eu, 0x000003fcu, 0x00000404u, 0x000500c7u, 0x00000006u, 0x00000406u, 0x00000404u, 0x00000032u, 0x00050084u, 0x00000006u, 0x00000407u, 0x00000043u, 0x00000406u, 0x000500c7u, 0x00000006u, 0x00000409u, 0x00000364u, 0x00000098u, 0x00050084u, 0x00000006u, 0x0000040au, 0x00000407u, 0x00000409u, 0x00050080u, 0x00000006u, 0x0000040cu, 0x00000404u, 0x0000040au, 0x0003003eu, 0x000003fcu, 0x0000040cu, 0x000500c7u, 0x00000006u, 0x0000040eu, 0x0000040cu, 0x00000032u, 0x000500aau, 0x00000011u, 0x0000040fu, 0x0000040eu, 0x0000003fu, 0x000300f7u, 0x00000411u, 0x00000000u, 0x000400fau, 0x0000040fu, 0x00000410u, 0x00000419u, 0x000200f8u, 0x00000410u, 0x000500c3u, 0x00000006u, 0x00000414u, 0x0000040cu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000415u, 0x00000414u, 0x00000032u, 0x00060041u, 0x00000348u, 0x00000416u, 0x00000344u, 0x0000003fu, 0x00000415u, 0x0004003du, 0x00000340u, 0x00000417u, 0x00000416u, 0x00040071u, 0x000001c4u, 0x00000418u, 0x00000417u, 0x0003003eu, 0x00000412u, 0x00000418u, 0x000200f9u, 0x00000411u, 0x000200f8u, 0x00000419u, 0x000500c6u, 0x00000006u, 0x0000041bu, 0x0000040cu, 0x00000098u, 0x00060041u, 0x000001d8u, 0x0000041cu, 0x000001d5u, 0x0000003fu, 0x0000041bu, 0x0004003du, 0x000001d1u, 0x0000041du, 0x0000041cu, 0x00040071u, 0x000001c4u, 0x0000041eu, 0x0000041du, 0x000500c4u, 0x000001c4u, 0x0000041fu, 0x0000041eu, 0x0000002du, 0x00050080u, 0x00000006u, 0x00000421u, 0x0000040cu, 0x00000032u, 0x000500c6u, 0x00000006u, 0x00000422u, 0x00000421u, 0x00000098u, 0x00060041u, 0x000001d8u, 0x00000423u, 0x000001d5u, 0x0000003fu, 0x00000422u, 0x0004003du, 0x000001d1u, 0x00000424u, 0x00000423u, 0x00040071u, 0x000001c4u, 0x00000425u, 0x00000424u, 0x000500c5u, 0x000001c4u, 0x00000426u, 0x0000041fu, 0x00000425u, 0x0003003eu, 0x00000412u, 0x00000426u, 0x000200f9u, 0x00000411u, 0x000200f8u, 0x00000411u, 0x000700f5u, 0x000001c4u, 0x00000be1u, 0x00000418u, 0x00000410u, 0x00000426u, 0x00000419u, 0x0003003eu, 0x00000225u, 0x00000be1u, 0x0003003eu, 0x00000228u, 0x000000ecu, 0x0003003eu, 0x000004c7u, 0x000000ecu, 0x000200f9u, 0x000004c5u, 0x000200f8u, 0x000004c5u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000055cu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000131u, 0x00000148u, 0x0000030du, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000034u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000034u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000034u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000034u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000034u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000034u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000034u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000034u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000034u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000034u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000034u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000035u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000036u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000036u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000036u, 0x00000002u, 0x00040047u, 0x00000038u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000038u, 0x00000021u, 0x00000000u, 0x00050048u, 0x00000072u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000072u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000072u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000072u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000072u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000072u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000072u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000072u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000073u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000074u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000074u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000074u, 0x00000002u, 0x00040047u, 0x00000076u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000076u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000091u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000092u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000092u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000092u, 0x00000002u, 0x00040047u, 0x00000094u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000094u, 0x00000021u, 0x00000002u, 0x00050048u, 0x000000aau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000aau, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000000aau, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000aau, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x000000aau, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x000000aau, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x000000aau, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x000000aau, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x000000aau, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x000000abu, 0x00000006u, 0x00000040u, 0x00040048u, 0x000000acu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000000acu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000acu, 0x00000002u, 0x00040047u, 0x000000aeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000aeu, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000114u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000012du, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000012du, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000131u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000148u, 0x0000000bu, 0x0000001du, 0x00040047u, 0x0000030du, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00000314u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000315u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x000d001eu, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000000au, 0x00000009u, 0x00000007u, 0x00040017u, 0x0000000eu, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000fu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x00040021u, 0x00000010u, 0x0000000fu, 0x00000007u, 0x0006001eu, 0x00000014u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x000b001eu, 0x00000019u, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x0000001au, 0x00000007u, 0x00000019u, 0x00050021u, 0x0000001bu, 0x00000002u, 0x00000007u, 0x0000001au, 0x00040020u, 0x00000020u, 0x00000007u, 0x0000000eu, 0x00040021u, 0x00000021u, 0x0000000eu, 0x00000020u, 0x00040021u, 0x00000025u, 0x00000008u, 0x00000020u, 0x00040020u, 0x0000002cu, 0x00000007u, 0x00000008u, 0x00050021u, 0x0000002du, 0x0000000eu, 0x00000020u, 0x0000002cu, 0x00040015u, 0x00000032u, 0x00000010u, 0x00000001u, 0x00040015u, 0x00000033u, 0x00000008u, 0x00000000u, 0x000d001eu, 0x00000034u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000032u, 0x00000032u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000032u, 0x00000033u, 0x00000033u, 0x0003001du, 0x00000035u, 0x00000034u, 0x0003001eu, 0x00000036u, 0x00000035u, 0x00040020u, 0x00000037u, 0x0000000cu, 0x00000036u, 0x0004003bu, 0x00000037u, 0x00000038u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00000039u, 0x00000000u, 0x00040020u, 0x0000003bu, 0x0000000cu, 0x00000008u, 0x0004002bu, 0x00000008u, 0x0000003fu, 0x00000001u, 0x0004002bu, 0x00000008u, 0x00000043u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x00000047u, 0x00000003u, 0x00040020u, 0x00000048u, 0x0000000cu, 0x00000032u, 0x0004002bu, 0x00000008u, 0x0000004du, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000052u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x00000056u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000005au, 0x00000007u, 0x0004002bu, 0x00000008u, 0x0000005eu, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000063u, 0x00000009u, 0x00040020u, 0x00000064u, 0x0000000cu, 0x00000033u, 0x0004002bu, 0x00000008u, 0x0000006au, 0x0000000au, 0x000a001eu, 0x00000072u, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0000000eu, 0x0003001du, 0x00000073u, 0x00000072u, 0x0003001eu, 0x00000074u, 0x00000073u, 0x00040020u, 0x00000075u, 0x0000000cu, 0x00000074u, 0x0004003bu, 0x00000075u, 0x00000076u, 0x0000000cu, 0x00040020u, 0x00000078u, 0x0000000cu, 0x00000072u, 0x00040020u, 0x0000007bu, 0x00000007u, 0x0000000fu, 0x0003001du, 0x00000091u, 0x0000000eu, 0x0003001eu, 0x00000092u, 0x00000091u, 0x00040020u, 0x00000093u, 0x0000000cu, 0x00000092u, 0x0004003bu, 0x00000093u, 0x00000094u, 0x0000000cu, 0x00040020u, 0x00000096u, 0x0000000cu, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000099u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x0000009cu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000009fu, 0x00000002u, 0x0004002bu, 0x00000006u, 0x000000a2u, 0x00000003u, 0x00040015u, 0x000000a8u, 0x00000010u, 0x00000000u, 0x00040017u, 0x000000a9u, 0x000000a8u, 0x00000004u, 0x000b001eu, 0x000000aau, 0x0000000eu, 0x0000000eu, 0x000000a9u, 0x000000a9u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000032u, 0x000000a8u, 0x0003001du, 0x000000abu, 0x000000aau, 0x0003001eu, 0x000000acu, 0x000000abu, 0x00040020u, 0x000000adu, 0x0000000cu, 0x000000acu, 0x0004003bu, 0x000000adu, 0x000000aeu, 0x0000000cu, 0x00040017u, 0x000000bau, 0x00000006u, 0x00000004u, 0x00040020u, 0x000000bdu, 0x0000000cu, 0x000000a9u, 0x00040020u, 0x000000dau, 0x0000000cu, 0x000000a8u, 0x0004002bu, 0x00000008u, 0x000000deu, 0x00000fffu, 0x0007002cu, 0x0000000eu, 0x000000e1u, 0x00000039u, 0x00000039u, 0x00000039u, 0x00000039u, 0x00020014u, 0x000000e2u, 0x00040017u, 0x000000e3u, 0x000000e2u, 0x00000004u, 0x0007002cu, 0x0000000eu, 0x000000e5u, 0x0000003fu, 0x0000003fu, 0x0000003fu, 0x0000003fu, 0x0004002bu, 0x00000008u, 0x000000e9u, 0x0000000cu, 0x00040017u, 0x000000f6u, 0x00000008u, 0x00000002u, 0x00040020u, 0x000000f7u, 0x00000007u, 0x000000f6u, 0x00040032u, 0x00000008u, 0x00000114u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00000118u, 0x000000c4u, 0x0000003fu, 0x00000114u, 0x00060034u, 0x00000008u, 0x00000119u, 0x00000082u, 0x00000118u, 0x0000003fu, 0x00040017u, 0x00000128u, 0x00000008u, 0x00000003u, 0x00040020u, 0x00000129u, 0x00000007u, 0x00000128u, 0x00090019u, 0x0000012bu, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000012cu, 0x00000000u, 0x0000012bu, 0x0004003bu, 0x0000012cu, 0x0000012du, 0x00000000u, 0x00040017u, 0x0000012fu, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000130u, 0x00000001u, 0x0000012fu, 0x0004003bu, 0x00000130u, 0x00000131u, 0x00000001u, 0x00040020u, 0x00000132u, 0x00000001u, 0x00000006u, 0x00060034u, 0x00000008u, 0x00000144u, 0x00000082u, 0x00000118u, 0x0000003fu, 0x0004003bu, 0x00000132u, 0x00000148u, 0x00000001u, 0x00040020u, 0x00000152u, 0x00000007u, 0x00000009u, 0x00040020u, 0x0000015du, 0x00000007u, 0x00000014u, 0x00040020u, 0x00000163u, 0x00000007u, 0x000000e2u, 0x0004002bu, 0x00000008u, 0x00000171u, 0x00000010u, 0x00060034u, 0x00000008u, 0x00000197u, 0x00000084u, 0x00000118u, 0x00000047u, 0x0004002bu, 0x00000008u, 0x000001a0u, 0xfffffe00u, 0x0004002bu, 0x00000008u, 0x000001cau, 0x0000000fu, 0x0004002bu, 0x00000008u, 0x000001d4u, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x000001eau, 0xfffffffeu, 0x0004002bu, 0x00000008u, 0x000001f2u, 0xfffffc00u, 0x0004002bu, 0x00000008u, 0x0000021bu, 0xfffffffcu, 0x0007002cu, 0x0000000eu, 0x00000229u, 0x00000039u, 0x0000003fu, 0x00000043u, 0x00000047u, 0x00040020u, 0x0000023au, 0x00000007u, 0x000000e3u, 0x00040020u, 0x00000245u, 0x00000007u, 0x000000bau, 0x0007002cu, 0x000000bau, 0x00000248u, 0x00000099u, 0x00000099u, 0x00000099u, 0x00000099u, 0x0007002cu, 0x000000bau, 0x00000249u, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x0004002bu, 0x00000008u, 0x00000282u, 0x0000001bu, 0x00060034u, 0x00000008u, 0x00000283u, 0x00000080u, 0x00000282u, 0x00000114u, 0x00060034u, 0x00000008u, 0x00000286u, 0x00000080u, 0x00000282u, 0x00000114u, 0x0004002bu, 0x00000008u, 0x000002ceu, 0x0000ffffu, 0x0007002cu, 0x0000000eu, 0x000002cfu, 0x000002ceu, 0x000002ceu, 0x000002ceu, 0x000002ceu, 0x0004003bu, 0x00000130u, 0x0000030du, 0x00000001u, 0x00040032u, 0x00000006u, 0x00000314u, 0x00000001u, 0x00060033u, 0x0000012fu, 0x00000315u, 0x00000314u, 0x0000009cu, 0x0000009cu, 0x0004002bu, 0x00000008u, 0x00000316u, 0x00000020u, 0x0004002bu, 0x00000008u, 0x00000317u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x00000318u, 0x00000080u, 0x0004002bu, 0x00000008u, 0x00000319u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x0000031au, 0x00000200u, 0x0004002bu, 0x00000008u, 0x0000031bu, 0x00000400u, 0x0004002bu, 0x00000008u, 0x0000031cu, 0x00000800u, 0x0004002bu, 0x00000008u, 0x0000031du, 0x00001000u, 0x0004002bu, 0x00000008u, 0x0000031eu, 0x00002000u, 0x0004002bu, 0x00000008u, 0x0000031fu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x00000320u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x00000321u, 0x00010000u, 0x0004002bu, 0x00000008u, 0x00000322u, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000323u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x00000324u, 0x00080000u, 0x0004002bu, 0x00000008u, 0x00000325u, 0x00100000u, 0x0004002bu, 0x00000008u, 0x00000326u, 0x00200000u, 0x0004002bu, 0x00000008u, 0x00000327u, 0x00400000u, 0x0004002bu, 0x00000008u, 0x00000328u, 0x00800000u, 0x0004002bu, 0x00000008u, 0x00000329u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x0000032au, 0x0000001au, 0x0004002bu, 0x00000008u, 0x0000032bu, 0x10000000u, 0x0004002bu, 0x00000008u, 0x0000032cu, 0x20000000u, 0x0004002bu, 0x00000008u, 0x0000032du, 0x40000000u, 0x0003002au, 0x000000e2u, 0x00000330u, 0x00030029u, 0x000000e2u, 0x00000332u, 0x0003002eu, 0x00000008u, 0x00000494u, 0x0007002cu, 0x0000000eu, 0x00000550u, 0x000001a0u, 0x000001a0u, 0x000001a0u, 0x000001a0u, 0x0007002cu, 0x0000000eu, 0x00000551u, 0x00000043u, 0x00000043u, 0x00000043u, 0x00000043u, 0x0007002cu, 0x0000000eu, 0x00000552u, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0007002cu, 0x0000000eu, 0x00000553u, 0x000001eau, 0x000001eau, 0x000001eau, 0x000001eau, 0x0007002cu, 0x0000000eu, 0x00000554u, 0x000001f2u, 0x000001f2u, 0x000001f2u, 0x000001f2u, 0x0007002cu, 0x0000000eu, 0x00000555u, 0x000000deu, 0x000000deu, 0x000000deu, 0x000000deu, 0x0007002cu, 0x0000000eu, 0x00000556u, 0x000000e9u, 0x000000e9u, 0x000000e9u, 0x000000e9u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000002cu, 0x000004d2u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004d1u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004d0u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004cfu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004ceu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004cdu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004ccu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004cbu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004cau, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004bfu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004beu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004bdu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004bcu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004bbu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004bau, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004b9u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004b8u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004b7u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004b2u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004b1u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004b0u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000004afu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a6u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a5u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a4u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a3u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a2u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a1u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004a0u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000049fu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000493u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000492u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000491u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000490u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000048fu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000048eu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000048du, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000048cu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000048bu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000048au, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000472u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000471u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000470u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000046fu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000046eu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000046du, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000046cu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000046bu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000046au, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000469u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000468u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000456u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000455u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000454u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000453u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000452u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000451u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000450u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000044fu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000445u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000444u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000443u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000442u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000441u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000440u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000043fu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000043eu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000434u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000433u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000432u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000431u, 0x00000007u, 0x0004003bu, 0x000000f7u, 0x000003fbu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000003fcu, 0x00000007u, 0x0004003bu, 0x000000f7u, 0x000003efu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000003f0u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003dcu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003ddu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003deu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003c9u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003cau, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003cbu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000003b7u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000003b8u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003b9u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000003a5u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000003a6u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000003a7u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000393u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000394u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000395u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000381u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000382u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000383u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000373u, 0x00000007u, 0x0005003bu, 0x00000163u, 0x00000331u, 0x00000007u, 0x00000330u, 0x0004003bu, 0x00000129u, 0x0000012au, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000139u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000013cu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000140u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000146u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000156u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000161u, 0x00000007u, 0x0004003bu, 0x00000163u, 0x00000164u, 0x00000007u, 0x0004003bu, 0x00000163u, 0x00000169u, 0x00000007u, 0x0004003bu, 0x00000163u, 0x0000016eu, 0x00000007u, 0x0004003bu, 0x00000163u, 0x00000174u, 0x00000007u, 0x0004003bu, 0x00000163u, 0x00000179u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000017eu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000184u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000188u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000192u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000193u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000019du, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001a3u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001b3u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001b8u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000001c8u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000001ccu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000001ceu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001d7u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001dau, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000001ddu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001edu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000001eeu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001f5u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000001f8u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000001fbu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000020au, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000020bu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000218u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000021du, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000224u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000227u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x0000022cu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000233u, 0x00000007u, 0x0004003bu, 0x0000023au, 0x0000023bu, 0x00000007u, 0x0004003bu, 0x0000023au, 0x00000240u, 0x00000007u, 0x0004003bu, 0x00000245u, 0x00000246u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000024eu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000025cu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000026au, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000288u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000289u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000028cu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x0000028du, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000293u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x00000295u, 0x00000007u, 0x0004003bu, 0x0000023au, 0x0000029au, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000002a2u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000002a8u, 0x00000007u, 0x0004003bu, 0x00000163u, 0x000002aeu, 0x00000007u, 0x0004003bu, 0x00000163u, 0x000002b5u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000002d5u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000002d6u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000002dau, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000002dbu, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x000002ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000030eu, 0x00000007u, 0x000300f7u, 0x0000032eu, 0x00000000u, 0x000300fbu, 0x00000099u, 0x0000032fu, 0x000200f8u, 0x0000032fu, 0x0004003du, 0x0000012bu, 0x0000012eu, 0x0000012du, 0x00050041u, 0x00000132u, 0x00000133u, 0x00000131u, 0x00000099u, 0x0004003du, 0x00000006u, 0x00000134u, 0x00000133u, 0x0004007cu, 0x00000008u, 0x00000135u, 0x00000134u, 0x0005005fu, 0x000000bau, 0x00000136u, 0x0000012eu, 0x00000135u, 0x0008004fu, 0x0000012fu, 0x00000137u, 0x00000136u, 0x00000136u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000128u, 0x00000138u, 0x00000137u, 0x0003003eu, 0x0000012au, 0x00000138u, 0x00050041u, 0x0000002cu, 0x0000013au, 0x0000012au, 0x00000099u, 0x0004003du, 0x00000008u, 0x0000013bu, 0x0000013au, 0x0003003eu, 0x00000139u, 0x0000013bu, 0x00050041u, 0x0000002cu, 0x0000013du, 0x0000012au, 0x0000009cu, 0x0004003du, 0x00000008u, 0x0000013eu, 0x0000013du, 0x00050084u, 0x00000008u, 0x0000013fu, 0x0000013eu, 0x00000118u, 0x0003003eu, 0x0000013cu, 0x0000013fu, 0x00050041u, 0x0000002cu, 0x00000141u, 0x0000012au, 0x0000009fu, 0x0004003du, 0x00000008u, 0x00000142u, 0x00000141u, 0x00050084u, 0x00000008u, 0x00000143u, 0x00000142u, 0x00000118u, 0x00050080u, 0x00000008u, 0x00000145u, 0x00000143u, 0x00000144u, 0x0003003eu, 0x00000140u, 0x00000145u, 0x0004003du, 0x00000006u, 0x00000149u, 0x00000148u, 0x0004007cu, 0x00000008u, 0x0000014au, 0x00000149u, 0x00050080u, 0x00000008u, 0x0000014bu, 0x0000013fu, 0x0000014au, 0x0003003eu, 0x00000146u, 0x0000014bu, 0x000500adu, 0x000000e2u, 0x0000014eu, 0x0000014bu, 0x00000145u, 0x000300f7u, 0x00000150u, 0x00000000u, 0x000400fau, 0x0000014eu, 0x0000014fu, 0x00000150u, 0x000200f8u, 0x0000014fu, 0x0003003eu, 0x00000331u, 0x00000332u, 0x000200f9u, 0x0000032eu, 0x000200f8u, 0x00000150u, 0x0004007cu, 0x00000006u, 0x00000155u, 0x0000013bu, 0x0003003eu, 0x00000156u, 0x00000155u, 0x00070041u, 0x0000003bu, 0x00000335u, 0x00000038u, 0x00000039u, 0x00000155u, 0x00000039u, 0x0004003du, 0x00000008u, 0x00000336u, 0x00000335u, 0x00070041u, 0x0000003bu, 0x00000338u, 0x00000038u, 0x00000039u, 0x00000155u, 0x0000003fu, 0x0004003du, 0x00000008u, 0x00000339u, 0x00000338u, 0x00070041u, 0x0000003bu, 0x0000033bu, 0x00000038u, 0x00000039u, 0x00000155u, 0x00000043u, 0x0004003du, 0x00000008u, 0x0000033cu, 0x0000033bu, 0x00070041u, 0x00000048u, 0x0000033eu, 0x00000038u, 0x00000039u, 0x00000155u, 0x00000047u, 0x0004003du, 0x00000032u, 0x0000033fu, 0x0000033eu, 0x00040072u, 0x00000008u, 0x00000340u, 0x0000033fu, 0x00070041u, 0x00000048u, 0x00000342u, 0x00000038u, 0x00000039u, 0x00000155u, 0x0000004du, 0x0004003du, 0x00000032u, 0x00000343u, 0x00000342u, 0x00040072u, 0x00000008u, 0x00000344u, 0x00000343u, 0x00070041u, 0x0000003bu, 0x00000346u, 0x00000038u, 0x00000039u, 0x00000155u, 0x00000052u, 0x0004003du, 0x00000008u, 0x00000347u, 0x00000346u, 0x00070041u, 0x0000003bu, 0x00000349u, 0x00000038u, 0x00000039u, 0x00000155u, 0x00000056u, 0x0004003du, 0x00000008u, 0x0000034au, 0x00000349u, 0x00070041u, 0x0000003bu, 0x0000034cu, 0x00000038u, 0x00000039u, 0x00000155u, 0x0000005au, 0x0004003du, 0x00000008u, 0x0000034du, 0x0000034cu, 0x00070041u, 0x00000048u, 0x0000034fu, 0x00000038u, 0x00000039u, 0x00000155u, 0x0000005eu, 0x0004003du, 0x00000032u, 0x00000350u, 0x0000034fu, 0x00040072u, 0x00000008u, 0x00000351u, 0x00000350u, 0x00070041u, 0x00000064u, 0x00000353u, 0x00000038u, 0x00000039u, 0x00000155u, 0x00000063u, 0x0004003du, 0x00000033u, 0x00000354u, 0x00000353u, 0x00040071u, 0x00000006u, 0x00000355u, 0x00000354u, 0x0004007cu, 0x00000008u, 0x00000356u, 0x00000355u, 0x00070041u, 0x00000064u, 0x00000358u, 0x00000038u, 0x00000039u, 0x00000155u, 0x0000006au, 0x0004003du, 0x00000033u, 0x00000359u, 0x00000358u, 0x00040071u, 0x00000006u, 0x0000035au, 0x00000359u, 0x0004007cu, 0x00000008u, 0x0000035bu, 0x0000035au, 0x000e0050u, 0x00000009u, 0x0000035cu, 0x00000336u, 0x00000339u, 0x0000033cu, 0x00000340u, 0x00000344u, 0x00000347u, 0x0000034au, 0x0000034du, 0x00000351u, 0x00000356u, 0x0000035bu, 0x0003003eu, 0x00000468u, 0x00000336u, 0x0003003eu, 0x00000469u, 0x00000339u, 0x0003003eu, 0x0000046au, 0x0000033cu, 0x0003003eu, 0x0000046bu, 0x00000340u, 0x0003003eu, 0x0000046cu, 0x00000344u, 0x0003003eu, 0x0000046du, 0x00000347u, 0x0003003eu, 0x0000046eu, 0x0000034au, 0x0003003eu, 0x0000046fu, 0x0000034du, 0x0003003eu, 0x00000470u, 0x00000351u, 0x0003003eu, 0x00000471u, 0x00000356u, 0x0003003eu, 0x00000472u, 0x0000035bu, 0x0003003eu, 0x0000048au, 0x00000336u, 0x0003003eu, 0x0000048bu, 0x00000339u, 0x0003003eu, 0x0000048cu, 0x0000033cu, 0x0003003eu, 0x0000048du, 0x00000340u, 0x0003003eu, 0x0000048eu, 0x00000344u, 0x0003003eu, 0x0000048fu, 0x00000347u, 0x0003003eu, 0x00000490u, 0x0000034au, 0x0003003eu, 0x00000491u, 0x0000034du, 0x0003003eu, 0x00000492u, 0x00000351u, 0x0003003eu, 0x00000493u, 0x00000356u, 0x0003003eu, 0x0000015bu, 0x00000155u, 0x00060041u, 0x00000078u, 0x00000360u, 0x00000076u, 0x00000039u, 0x00000155u, 0x0004003du, 0x00000072u, 0x00000361u, 0x00000360u, 0x00050051u, 0x0000000eu, 0x00000362u, 0x00000361u, 0x00000000u, 0x0003003eu, 0x0000043eu, 0x00000362u, 0x00050051u, 0x0000000eu, 0x00000364u, 0x00000361u, 0x00000001u, 0x0003003eu, 0x0000043fu, 0x00000364u, 0x00050051u, 0x0000000eu, 0x00000366u, 0x00000361u, 0x00000002u, 0x0003003eu, 0x00000440u, 0x00000366u, 0x00050051u, 0x0000000eu, 0x00000368u, 0x00000361u, 0x00000003u, 0x0003003eu, 0x00000441u, 0x00000368u, 0x00050051u, 0x0000000eu, 0x0000036au, 0x00000361u, 0x00000004u, 0x0003003eu, 0x00000442u, 0x0000036au, 0x00050051u, 0x0000000eu, 0x0000036cu, 0x00000361u, 0x00000005u, 0x0003003eu, 0x00000443u, 0x0000036cu, 0x00050051u, 0x0000000eu, 0x0000036eu, 0x00000361u, 0x00000006u, 0x0003003eu, 0x00000444u, 0x0000036eu, 0x00050051u, 0x0000000eu, 0x00000370u, 0x00000361u, 0x00000007u, 0x0003003eu, 0x00000445u, 0x00000370u, 0x000b0050u, 0x0000000fu, 0x0000044eu, 0x00000362u, 0x00000364u, 0x00000366u, 0x00000368u, 0x0000036au, 0x0000036cu, 0x0000036eu, 0x00000370u, 0x0003003eu, 0x0000044fu, 0x00000362u, 0x0003003eu, 0x00000450u, 0x00000364u, 0x0003003eu, 0x00000451u, 0x00000366u, 0x0003003eu, 0x00000452u, 0x00000368u, 0x0003003eu, 0x00000453u, 0x0000036au, 0x0003003eu, 0x00000454u, 0x0000036cu, 0x0003003eu, 0x00000455u, 0x0000036eu, 0x0003003eu, 0x00000456u, 0x00000370u, 0x0003003eu, 0x0000049fu, 0x00000362u, 0x0003003eu, 0x000004a0u, 0x00000364u, 0x0003003eu, 0x000004a1u, 0x00000366u, 0x0003003eu, 0x000004a2u, 0x00000368u, 0x0003003eu, 0x000004a3u, 0x0000036au, 0x0003003eu, 0x000004a4u, 0x0000036cu, 0x0003003eu, 0x000004a5u, 0x0000036eu, 0x0003003eu, 0x000004a6u, 0x00000370u, 0x0003003eu, 0x00000161u, 0x00000155u, 0x00060041u, 0x00000096u, 0x00000376u, 0x00000094u, 0x00000039u, 0x00000155u, 0x0004003du, 0x0000000eu, 0x00000377u, 0x00000376u, 0x0003003eu, 0x00000373u, 0x00000377u, 0x00050041u, 0x0000002cu, 0x00000378u, 0x00000373u, 0x00000099u, 0x0004003du, 0x00000008u, 0x00000379u, 0x00000378u, 0x00050041u, 0x0000002cu, 0x0000037au, 0x00000373u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x0000037bu, 0x0000037au, 0x00050041u, 0x0000002cu, 0x0000037cu, 0x00000373u, 0x0000009fu, 0x0004003du, 0x00000008u, 0x0000037du, 0x0000037cu, 0x00050041u, 0x0000002cu, 0x0000037eu, 0x00000373u, 0x000000a2u, 0x0004003du, 0x00000008u, 0x0000037fu, 0x0000037eu, 0x00070050u, 0x00000014u, 0x00000380u, 0x00000379u, 0x0000037bu, 0x0000037du, 0x0000037fu, 0x0003003eu, 0x00000431u, 0x00000379u, 0x0003003eu, 0x00000432u, 0x0000037bu, 0x0003003eu, 0x00000433u, 0x0000037du, 0x0003003eu, 0x00000434u, 0x0000037fu, 0x0003003eu, 0x000004afu, 0x00000379u, 0x0003003eu, 0x000004b0u, 0x0000037bu, 0x0003003eu, 0x000004b1u, 0x0000037du, 0x0003003eu, 0x000004b2u, 0x0000037fu, 0x000500c7u, 0x00000008u, 0x00000167u, 0x00000356u, 0x0000003fu, 0x000500abu, 0x000000e2u, 0x00000168u, 0x00000167u, 0x00000039u, 0x0003003eu, 0x00000164u, 0x00000168u, 0x000500c7u, 0x00000008u, 0x0000016cu, 0x00000356u, 0x0000005eu, 0x000500abu, 0x000000e2u, 0x0000016du, 0x0000016cu, 0x00000039u, 0x0003003eu, 0x00000169u, 0x0000016du, 0x000500c7u, 0x00000008u, 0x00000172u, 0x00000356u, 0x00000171u, 0x000500abu, 0x000000e2u, 0x00000173u, 0x00000172u, 0x00000039u, 0x0003003eu, 0x0000016eu, 0x00000173u, 0x000500c7u, 0x00000008u, 0x00000177u, 0x00000356u, 0x00000043u, 0x000500abu, 0x000000e2u, 0x00000178u, 0x00000177u, 0x00000039u, 0x0003003eu, 0x00000174u, 0x00000178u, 0x000500c7u, 0x00000008u, 0x0000017cu, 0x00000356u, 0x0000004du, 0x000500abu, 0x000000e2u, 0x0000017du, 0x0000017cu, 0x00000039u, 0x0003003eu, 0x00000179u, 0x0000017du, 0x000500c3u, 0x00000008u, 0x00000181u, 0x00000340u, 0x00000043u, 0x0003003eu, 0x0000017eu, 0x00000181u, 0x00050084u, 0x00000008u, 0x00000183u, 0x00000181u, 0x00000118u, 0x0003003eu, 0x0000017eu, 0x00000183u, 0x00050082u, 0x00000008u, 0x00000187u, 0x0000014bu, 0x00000183u, 0x0003003eu, 0x00000184u, 0x00000187u, 0x00050084u, 0x00000008u, 0x0000018bu, 0x00000336u, 0x00000118u, 0x000500c4u, 0x00000008u, 0x0000018fu, 0x00000347u, 0x00000043u, 0x00050084u, 0x00000008u, 0x00000190u, 0x00000187u, 0x0000018fu, 0x00050080u, 0x00000008u, 0x00000191u, 0x0000018bu, 0x00000190u, 0x0003003eu, 0x00000188u, 0x00000191u, 0x0003003eu, 0x00000192u, 0x000000e1u, 0x0003003eu, 0x00000193u, 0x000000e1u, 0x000300f7u, 0x00000196u, 0x00000000u, 0x000400fau, 0x00000178u, 0x00000195u, 0x00000196u, 0x000200f8u, 0x00000195u, 0x00050084u, 0x00000008u, 0x0000019au, 0x00000197u, 0x00000347u, 0x00050080u, 0x00000008u, 0x0000019cu, 0x00000191u, 0x0000019au, 0x0003003eu, 0x00000188u, 0x0000019cu, 0x000500c7u, 0x0000000eu, 0x000001a2u, 0x00000366u, 0x00000550u, 0x0003003eu, 0x0000019du, 0x000001a2u, 0x000500c7u, 0x0000000eu, 0x000001a7u, 0x00000368u, 0x00000550u, 0x0003003eu, 0x000001a3u, 0x000001a7u, 0x000500c3u, 0x0000000eu, 0x000001abu, 0x000001a2u, 0x00000551u, 0x00050082u, 0x0000000eu, 0x000001acu, 0x000001a2u, 0x000001abu, 0x00050082u, 0x0000000eu, 0x000001aeu, 0x000001acu, 0x000001a7u, 0x000500c3u, 0x0000000eu, 0x000001b1u, 0x000001a7u, 0x00000551u, 0x00050080u, 0x0000000eu, 0x000001b2u, 0x000001aeu, 0x000001b1u, 0x0003003eu, 0x00000192u, 0x000001b2u, 0x000500c7u, 0x0000000eu, 0x000001b7u, 0x0000036eu, 0x00000550u, 0x0003003eu, 0x000001b3u, 0x000001b7u, 0x000500c7u, 0x0000000eu, 0x000001bcu, 0x00000370u, 0x00000550u, 0x0003003eu, 0x000001b8u, 0x000001bcu, 0x000500c3u, 0x0000000eu, 0x000001c0u, 0x000001b7u, 0x00000551u, 0x00050082u, 0x0000000eu, 0x000001c1u, 0x000001b7u, 0x000001c0u, 0x00050082u, 0x0000000eu, 0x000001c3u, 0x000001c1u, 0x000001bcu, 0x000500c3u, 0x0000000eu, 0x000001c6u, 0x000001bcu, 0x00000551u, 0x00050080u, 0x0000000eu, 0x000001c7u, 0x000001c3u, 0x000001c6u, 0x0003003eu, 0x00000193u, 0x000001c7u, 0x000200f9u, 0x00000196u, 0x000200f8u, 0x00000196u, 0x000700f5u, 0x0000000eu, 0x000004ffu, 0x000000e1u, 0x00000150u, 0x000001c7u, 0x00000195u, 0x000700f5u, 0x0000000eu, 0x000004f7u, 0x000000e1u, 0x00000150u, 0x000001b2u, 0x00000195u, 0x000700f5u, 0x00000008u, 0x000004edu, 0x00000191u, 0x00000150u, 0x0000019cu, 0x00000195u, 0x000500c3u, 0x00000008u, 0x000001cbu, 0x000004edu, 0x000001cau, 0x0003003eu, 0x000001c8u, 0x000001cbu, 0x000300f7u, 0x000001d0u, 0x00000000u, 0x000400fau, 0x0000017du, 0x000001cfu, 0x000001d1u, 0x000200f8u, 0x000001cfu, 0x0003003eu, 0x000001ceu, 0x00000039u, 0x000200f9u, 0x000001d0u, 0x000200f8u, 0x000001d1u, 0x000500c3u, 0x00000008u, 0x000001d3u, 0x000004edu, 0x0000005au, 0x000500c7u, 0x00000008u, 0x000001d5u, 0x000001d3u, 0x000001d4u, 0x0003003eu, 0x000001ceu, 0x000001d5u, 0x000200f9u, 0x000001d0u, 0x000200f8u, 0x000001d0u, 0x000700f5u, 0x00000008u, 0x000004efu, 0x00000039u, 0x000001cfu, 0x000001d5u, 0x000001d1u, 0x0003003eu, 0x000001ccu, 0x000004efu, 0x0003003eu, 0x000001dau, 0x00000366u, 0x0003003eu, 0x000001ddu, 0x00000187u, 0x000500c3u, 0x00000008u, 0x00000385u, 0x00000187u, 0x00000114u, 0x0003003eu, 0x00000381u, 0x00000385u, 0x000500c7u, 0x00000008u, 0x00000387u, 0x00000187u, 0x00000119u, 0x0003003eu, 0x00000382u, 0x00000387u, 0x00070050u, 0x0000000eu, 0x0000038au, 0x00000385u, 0x00000385u, 0x00000385u, 0x00000385u, 0x00050084u, 0x0000000eu, 0x0000038bu, 0x0000038au, 0x00000366u, 0x00070050u, 0x0000000eu, 0x0000038eu, 0x00000114u, 0x00000114u, 0x00000114u, 0x00000114u, 0x000500c3u, 0x0000000eu, 0x0000038fu, 0x00000366u, 0x0000038eu, 0x00070050u, 0x0000000eu, 0x00000390u, 0x00000387u, 0x00000387u, 0x00000387u, 0x00000387u, 0x00050084u, 0x0000000eu, 0x00000391u, 0x00000390u, 0x0000038fu, 0x00050080u, 0x0000000eu, 0x00000392u, 0x0000038bu, 0x00000391u, 0x0003003eu, 0x00000383u, 0x00000392u, 0x00050080u, 0x0000000eu, 0x000001e0u, 0x00000362u, 0x00000392u, 0x0003003eu, 0x000001d7u, 0x000001e0u, 0x000500c7u, 0x0000000eu, 0x000001e3u, 0x000001e0u, 0x00000550u, 0x00050080u, 0x0000000eu, 0x000001e5u, 0x000001e3u, 0x000004f7u, 0x000500c3u, 0x0000000eu, 0x000001e9u, 0x00000364u, 0x00000552u, 0x000500c7u, 0x0000000eu, 0x000001ecu, 0x000001e9u, 0x00000553u, 0x0003003eu, 0x000001edu, 0x000001ecu, 0x0003003eu, 0x000001eeu, 0x000004efu, 0x000500c3u, 0x00000008u, 0x00000397u, 0x000004efu, 0x00000114u, 0x0003003eu, 0x00000393u, 0x00000397u, 0x000500c7u, 0x00000008u, 0x00000399u, 0x000004efu, 0x00000119u, 0x0003003eu, 0x00000394u, 0x00000399u, 0x00070050u, 0x0000000eu, 0x0000039cu, 0x00000397u, 0x00000397u, 0x00000397u, 0x00000397u, 0x00050084u, 0x0000000eu, 0x0000039du, 0x0000039cu, 0x000001ecu, 0x000500c3u, 0x0000000eu, 0x000003a1u, 0x000001ecu, 0x0000038eu, 0x00070050u, 0x0000000eu, 0x000003a2u, 0x00000399u, 0x00000399u, 0x00000399u, 0x00000399u, 0x00050084u, 0x0000000eu, 0x000003a3u, 0x000003a2u, 0x000003a1u, 0x00050080u, 0x0000000eu, 0x000003a4u, 0x0000039du, 0x000003a3u, 0x0003003eu, 0x00000395u, 0x000003a4u, 0x00050082u, 0x0000000eu, 0x000001f1u, 0x000001e5u, 0x000003a4u, 0x000500c7u, 0x0000000eu, 0x000001f4u, 0x000001f1u, 0x00000554u, 0x0003003eu, 0x000001d7u, 0x000001f4u, 0x0003003eu, 0x000001f8u, 0x0000036eu, 0x0003003eu, 0x000001fbu, 0x00000187u, 0x0003003eu, 0x000003a5u, 0x00000385u, 0x0003003eu, 0x000003a6u, 0x00000387u, 0x00050084u, 0x0000000eu, 0x000003afu, 0x0000038au, 0x0000036eu, 0x000500c3u, 0x0000000eu, 0x000003b3u, 0x0000036eu, 0x0000038eu, 0x00050084u, 0x0000000eu, 0x000003b5u, 0x00000390u, 0x000003b3u, 0x00050080u, 0x0000000eu, 0x000003b6u, 0x000003afu, 0x000003b5u, 0x0003003eu, 0x000003a7u, 0x000003b6u, 0x00050080u, 0x0000000eu, 0x000001feu, 0x0000036au, 0x000003b6u, 0x0003003eu, 0x000001f5u, 0x000001feu, 0x000500c7u, 0x0000000eu, 0x00000201u, 0x000001feu, 0x00000550u, 0x00050080u, 0x0000000eu, 0x00000203u, 0x00000201u, 0x000004ffu, 0x000500c3u, 0x0000000eu, 0x00000207u, 0x0000036cu, 0x00000552u, 0x000500c7u, 0x0000000eu, 0x00000209u, 0x00000207u, 0x00000553u, 0x0003003eu, 0x0000020au, 0x00000209u, 0x0003003eu, 0x0000020bu, 0x000004efu, 0x0003003eu, 0x000003b7u, 0x00000397u, 0x0003003eu, 0x000003b8u, 0x00000399u, 0x00050084u, 0x0000000eu, 0x000003c1u, 0x0000039cu, 0x00000209u, 0x000500c3u, 0x0000000eu, 0x000003c5u, 0x00000209u, 0x0000038eu, 0x00050084u, 0x0000000eu, 0x000003c7u, 0x000003a2u, 0x000003c5u, 0x00050080u, 0x0000000eu, 0x000003c8u, 0x000003c1u, 0x000003c7u, 0x0003003eu, 0x000003b9u, 0x000003c8u, 0x00050082u, 0x0000000eu, 0x0000020eu, 0x00000203u, 0x000003c8u, 0x000500c7u, 0x0000000eu, 0x00000210u, 0x0000020eu, 0x00000554u, 0x0003003eu, 0x000001f5u, 0x00000210u, 0x0003003eu, 0x000004b7u, 0x000001f4u, 0x0003003eu, 0x000004b8u, 0x00000210u, 0x0003003eu, 0x000004bbu, 0x000001cbu, 0x000500c7u, 0x00000008u, 0x0000021cu, 0x00000340u, 0x0000021bu, 0x0003003eu, 0x00000218u, 0x0000021cu, 0x0003003eu, 0x0000021du, 0x00000344u, 0x00050084u, 0x00000008u, 0x00000221u, 0x0000021cu, 0x00000118u, 0x0003003eu, 0x00000218u, 0x00000221u, 0x00050084u, 0x00000008u, 0x00000223u, 0x00000344u, 0x00000118u, 0x0003003eu, 0x0000021du, 0x00000223u, 0x00050084u, 0x00000008u, 0x00000226u, 0x0000014bu, 0x0000004du, 0x0003003eu, 0x00000224u, 0x00000226u, 0x00070050u, 0x0000000eu, 0x0000022au, 0x00000226u, 0x00000226u, 0x00000226u, 0x00000226u, 0x00050080u, 0x0000000eu, 0x0000022bu, 0x0000022au, 0x00000229u, 0x0003003eu, 0x00000227u, 0x0000022bu, 0x0007000cu, 0x00000008u, 0x00000231u, 0x00000001u, 0x0000002au, 0x00000340u, 0x0000037bu, 0x00050084u, 0x00000008u, 0x00000232u, 0x00000231u, 0x00000118u, 0x0003003eu, 0x0000022cu, 0x00000232u, 0x0007000cu, 0x00000008u, 0x00000238u, 0x00000001u, 0x00000027u, 0x00000351u, 0x0000037fu, 0x00050084u, 0x00000008u, 0x00000239u, 0x00000238u, 0x00000118u, 0x0003003eu, 0x00000233u, 0x00000239u, 0x00070050u, 0x0000000eu, 0x0000023eu, 0x00000232u, 0x00000232u, 0x00000232u, 0x00000232u, 0x000500b1u, 0x000000e3u, 0x0000023fu, 0x0000022bu, 0x0000023eu, 0x0003003eu, 0x0000023bu, 0x0000023fu, 0x00070050u, 0x0000000eu, 0x00000243u, 0x00000239u, 0x00000239u, 0x00000239u, 0x00000239u, 0x000500afu, 0x000000e3u, 0x00000244u, 0x0000022bu, 0x00000243u, 0x0003003eu, 0x00000240u, 0x00000244u, 0x000600a9u, 0x000000bau, 0x0000024au, 0x0000023fu, 0x00000249u, 0x00000248u, 0x000600a9u, 0x000000bau, 0x0000024cu, 0x00000244u, 0x00000249u, 0x00000248u, 0x000500c5u, 0x000000bau, 0x0000024du, 0x0000024au, 0x0000024cu, 0x0003003eu, 0x00000246u, 0x0000024du, 0x00070050u, 0x0000000eu, 0x00000254u, 0x00000221u, 0x00000221u, 0x00000221u, 0x00000221u, 0x00050082u, 0x0000000eu, 0x00000255u, 0x0000022bu, 0x00000254u, 0x00070050u, 0x0000000eu, 0x00000258u, 0x00000347u, 0x00000347u, 0x00000347u, 0x00000347u, 0x00050084u, 0x0000000eu, 0x00000259u, 0x00000255u, 0x00000258u, 0x00070050u, 0x0000000eu, 0x0000025au, 0x0000018bu, 0x0000018bu, 0x0000018bu, 0x0000018bu, 0x00050080u, 0x0000000eu, 0x0000025bu, 0x0000025au, 0x00000259u, 0x0003003eu, 0x0000024eu, 0x0000025bu, 0x00050084u, 0x00000008u, 0x0000025fu, 0x00000339u, 0x00000118u, 0x00070050u, 0x0000000eu, 0x00000266u, 0x0000034au, 0x0000034au, 0x0000034au, 0x0000034au, 0x00050084u, 0x0000000eu, 0x00000267u, 0x00000255u, 0x00000266u, 0x00070050u, 0x0000000eu, 0x00000268u, 0x0000025fu, 0x0000025fu, 0x0000025fu, 0x0000025fu, 0x00050080u, 0x0000000eu, 0x00000269u, 0x00000268u, 0x00000267u, 0x0003003eu, 0x0000025cu, 0x00000269u, 0x00050084u, 0x00000008u, 0x0000026du, 0x0000033cu, 0x00000118u, 0x00070050u, 0x0000000eu, 0x00000270u, 0x00000223u, 0x00000223u, 0x00000223u, 0x00000223u, 0x00050082u, 0x0000000eu, 0x00000271u, 0x0000022bu, 0x00000270u, 0x00070050u, 0x0000000eu, 0x00000274u, 0x0000034du, 0x0000034du, 0x0000034du, 0x0000034du, 0x00050084u, 0x0000000eu, 0x00000275u, 0x00000271u, 0x00000274u, 0x00070050u, 0x0000000eu, 0x00000276u, 0x0000026du, 0x0000026du, 0x0000026du, 0x0000026du, 0x00050080u, 0x0000000eu, 0x00000277u, 0x00000276u, 0x00000275u, 0x0003003eu, 0x0000026au, 0x00000277u, 0x00050084u, 0x00000008u, 0x0000027du, 0x00000118u, 0x00000344u, 0x00070050u, 0x0000000eu, 0x0000027eu, 0x0000027du, 0x0000027du, 0x0000027du, 0x0000027du, 0x000500b1u, 0x000000e3u, 0x0000027fu, 0x0000022bu, 0x0000027eu, 0x000600a9u, 0x0000000eu, 0x00000280u, 0x0000027fu, 0x00000269u, 0x00000277u, 0x0003003eu, 0x0000026au, 0x00000280u, 0x000600cau, 0x0000000eu, 0x00000284u, 0x00000280u, 0x00000039u, 0x00000283u, 0x0003003eu, 0x0000026au, 0x00000284u, 0x000600cau, 0x0000000eu, 0x00000287u, 0x0000025bu, 0x00000039u, 0x00000286u, 0x0003003eu, 0x0000024eu, 0x00000287u, 0x0003003eu, 0x00000289u, 0x00000287u, 0x000500c7u, 0x0000000eu, 0x000003ceu, 0x00000287u, 0x00000555u, 0x000500abu, 0x000000e3u, 0x000003cfu, 0x000003ceu, 0x000000e1u, 0x000600a9u, 0x0000000eu, 0x000003d0u, 0x000003cfu, 0x000000e5u, 0x000000e1u, 0x0003003eu, 0x000003c9u, 0x000003d0u, 0x000500c3u, 0x0000000eu, 0x000003d3u, 0x00000287u, 0x00000556u, 0x000500c5u, 0x0000000eu, 0x000003d5u, 0x000003d3u, 0x000003d0u, 0x00050051u, 0x00000008u, 0x000003d6u, 0x000003d5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003d7u, 0x000003d5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003d8u, 0x000003d5u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000003d9u, 0x000003d5u, 0x00000003u, 0x0003003eu, 0x000003cau, 0x000003d5u, 0x0003003eu, 0x000003cbu, 0x000003d5u, 0x0003003eu, 0x00000288u, 0x000003d5u, 0x0003003eu, 0x0000028du, 0x00000284u, 0x000500c7u, 0x0000000eu, 0x000003e1u, 0x00000284u, 0x00000555u, 0x000500abu, 0x000000e3u, 0x000003e2u, 0x000003e1u, 0x000000e1u, 0x000600a9u, 0x0000000eu, 0x000003e3u, 0x000003e2u, 0x000000e5u, 0x000000e1u, 0x0003003eu, 0x000003dcu, 0x000003e3u, 0x000500c3u, 0x0000000eu, 0x000003e6u, 0x00000284u, 0x00000556u, 0x000500c5u, 0x0000000eu, 0x000003e8u, 0x000003e6u, 0x000003e3u, 0x00050051u, 0x00000008u, 0x000003e9u, 0x000003e8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003eau, 0x000003e8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003ebu, 0x000003e8u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000003ecu, 0x000003e8u, 0x00000003u, 0x0003003eu, 0x000003ddu, 0x000003e8u, 0x0003003eu, 0x000003deu, 0x000003e8u, 0x0003003eu, 0x0000028cu, 0x000003e8u, 0x000300f7u, 0x00000292u, 0x00000000u, 0x000400fau, 0x00000168u, 0x00000291u, 0x00000297u, 0x000200f8u, 0x00000291u, 0x0003003eu, 0x00000293u, 0x000003d5u, 0x0003003eu, 0x00000295u, 0x000003e8u, 0x000200f9u, 0x00000292u, 0x000200f8u, 0x00000297u, 0x0003003eu, 0x00000293u, 0x000003e8u, 0x0003003eu, 0x00000295u, 0x000003d5u, 0x000200f9u, 0x00000292u, 0x000200f8u, 0x00000292u, 0x00070050u, 0x000000e3u, 0x00000557u, 0x00000168u, 0x00000168u, 0x00000168u, 0x00000168u, 0x000600a9u, 0x0000000eu, 0x00000558u, 0x00000557u, 0x000003e8u, 0x000003d5u, 0x000600a9u, 0x0000000eu, 0x0000055au, 0x00000557u, 0x000003d5u, 0x000003e8u, 0x000500c3u, 0x0000000eu, 0x0000029du, 0x0000055au, 0x000000e5u, 0x000500c3u, 0x0000000eu, 0x000002a0u, 0x00000558u, 0x000000e5u, 0x000500adu, 0x000000e3u, 0x000002a1u, 0x0000029du, 0x000002a0u, 0x0003003eu, 0x0000029au, 0x000002a1u, 0x000500c4u, 0x00000008u, 0x000002a5u, 0x00000379u, 0x0000003fu, 0x00050084u, 0x00000008u, 0x000002a6u, 0x00000118u, 0x000002a5u, 0x00070050u, 0x0000000eu, 0x000002a7u, 0x000002a6u, 0x000002a6u, 0x000002a6u, 0x000002a6u, 0x0003003eu, 0x000002a2u, 0x000002a7u, 0x000500c4u, 0x00000008u, 0x000002abu, 0x0000037du, 0x0000003fu, 0x00050084u, 0x00000008u, 0x000002acu, 0x00000118u, 0x000002abu, 0x00070050u, 0x0000000eu, 0x000002adu, 0x000002acu, 0x000002acu, 0x000002acu, 0x000002acu, 0x0003003eu, 0x000002a8u, 0x000002adu, 0x0007000cu, 0x0000000eu, 0x000002b1u, 0x00000001u, 0x00000027u, 0x0000055au, 0x00000558u, 0x000500afu, 0x000000e3u, 0x000002b3u, 0x000002b1u, 0x000002adu, 0x0004009bu, 0x000000e2u, 0x000002b4u, 0x000002b3u, 0x0003003eu, 0x000002aeu, 0x000002b4u, 0x0007000cu, 0x0000000eu, 0x000002b8u, 0x00000001u, 0x0000002au, 0x0000055au, 0x00000558u, 0x000500b1u, 0x000000e3u, 0x000002bau, 0x000002b8u, 0x000002a7u, 0x0004009bu, 0x000000e2u, 0x000002bbu, 0x000002bau, 0x0003003eu, 0x000002b5u, 0x000002bbu, 0x0007000cu, 0x0000000eu, 0x000002beu, 0x00000001u, 0x0000002au, 0x0000055au, 0x000002a7u, 0x0003003eu, 0x00000293u, 0x000002beu, 0x0007000cu, 0x0000000eu, 0x000002c1u, 0x00000001u, 0x00000027u, 0x000002beu, 0x000002adu, 0x0003003eu, 0x00000293u, 0x000002c1u, 0x0007000cu, 0x0000000eu, 0x000002c4u, 0x00000001u, 0x0000002au, 0x00000558u, 0x000002a7u, 0x0003003eu, 0x00000295u, 0x000002c4u, 0x0007000cu, 0x0000000eu, 0x000002c7u, 0x00000001u, 0x00000027u, 0x000002c4u, 0x000002adu, 0x0003003eu, 0x00000295u, 0x000002c7u, 0x000600a9u, 0x000000bau, 0x000002c9u, 0x000002a1u, 0x00000249u, 0x00000248u, 0x000500c5u, 0x000000bau, 0x000002cbu, 0x000002c9u, 0x0000024du, 0x000500abu, 0x000000e3u, 0x000002ccu, 0x000002cbu, 0x00000248u, 0x0003003eu, 0x0000029au, 0x000002ccu, 0x000600a9u, 0x0000000eu, 0x000002d1u, 0x000002ccu, 0x000002cfu, 0x000002c1u, 0x0003003eu, 0x00000293u, 0x000002d1u, 0x000600a9u, 0x0000000eu, 0x000002d4u, 0x000002ccu, 0x000000e1u, 0x000002c7u, 0x0003003eu, 0x00000295u, 0x000002d4u, 0x0003003eu, 0x000002d6u, 0x000002d1u, 0x0007004fu, 0x000000f6u, 0x000003f2u, 0x000002d1u, 0x000002d1u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x000000f6u, 0x000003f4u, 0x000002d1u, 0x000002d1u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x000000f6u, 0x000003f5u, 0x00000001u, 0x00000027u, 0x000003f2u, 0x000003f4u, 0x0003003eu, 0x000003efu, 0x000003f5u, 0x00050041u, 0x0000002cu, 0x000003f6u, 0x000003efu, 0x00000099u, 0x0004003du, 0x00000008u, 0x000003f7u, 0x000003f6u, 0x00050041u, 0x0000002cu, 0x000003f8u, 0x000003efu, 0x0000009cu, 0x0004003du, 0x00000008u, 0x000003f9u, 0x000003f8u, 0x0007000cu, 0x00000008u, 0x000003fau, 0x00000001u, 0x00000027u, 0x000003f7u, 0x000003f9u, 0x0003003eu, 0x000003f0u, 0x000003fau, 0x000500c3u, 0x00000008u, 0x000002d9u, 0x000003fau, 0x00000047u, 0x0003003eu, 0x000002d5u, 0x000002d9u, 0x0003003eu, 0x000002dbu, 0x000002d4u, 0x0007004fu, 0x000000f6u, 0x000003feu, 0x000002d4u, 0x000002d4u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x000000f6u, 0x00000400u, 0x000002d4u, 0x000002d4u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x000000f6u, 0x00000401u, 0x00000001u, 0x0000002au, 0x000003feu, 0x00000400u, 0x0003003eu, 0x000003fbu, 0x00000401u, 0x00050041u, 0x0000002cu, 0x00000402u, 0x000003fbu, 0x00000099u, 0x0004003du, 0x00000008u, 0x00000403u, 0x00000402u, 0x00050041u, 0x0000002cu, 0x00000404u, 0x000003fbu, 0x0000009cu, 0x0004003du, 0x00000008u, 0x00000405u, 0x00000404u, 0x0007000cu, 0x00000008u, 0x00000406u, 0x00000001u, 0x0000002au, 0x00000403u, 0x00000405u, 0x0003003eu, 0x000003fcu, 0x00000406u, 0x000500c3u, 0x00000008u, 0x000002deu, 0x00000406u, 0x00000047u, 0x0003003eu, 0x000002dau, 0x000002deu, 0x0003003eu, 0x000004b9u, 0x000002d1u, 0x0003003eu, 0x000004bau, 0x000002d4u, 0x0003003eu, 0x000004bcu, 0x000002d9u, 0x0003003eu, 0x000004bdu, 0x000002deu, 0x0004009bu, 0x000000e2u, 0x000002e8u, 0x000002ccu, 0x000400a8u, 0x000000e2u, 0x000002e9u, 0x000002e8u, 0x000400a8u, 0x000000e2u, 0x000002ebu, 0x000002b4u, 0x000500a7u, 0x000000e2u, 0x000002ecu, 0x000002e9u, 0x000002ebu, 0x000400a8u, 0x000000e2u, 0x000002eeu, 0x000002bbu, 0x000500a7u, 0x000000e2u, 0x000002efu, 0x000002ecu, 0x000002eeu, 0x000600a9u, 0x00000008u, 0x000002f0u, 0x000002efu, 0x0000003fu, 0x00000039u, 0x0003003eu, 0x000004bfu, 0x000002f0u, 0x000300f7u, 0x000002f4u, 0x00000000u, 0x000400fau, 0x0000016du, 0x000002f3u, 0x000002f4u, 0x000200f8u, 0x000002f3u, 0x000500c3u, 0x00000008u, 0x000002f6u, 0x0000014bu, 0x00000114u, 0x000500c7u, 0x00000008u, 0x000002f7u, 0x000002f6u, 0x0000003fu, 0x000600a9u, 0x00000008u, 0x000002f9u, 0x00000173u, 0x0000003fu, 0x00000039u, 0x000500abu, 0x000000e2u, 0x000002fau, 0x000002f7u, 0x000002f9u, 0x000300f7u, 0x000002fcu, 0x00000000u, 0x000400fau, 0x000002fau, 0x000002fbu, 0x000002fcu, 0x000200f8u, 0x000002fbu, 0x0003003eu, 0x000004bfu, 0x00000039u, 0x000200f9u, 0x000002fcu, 0x000200f8u, 0x000002fcu, 0x000600a9u, 0x00000008u, 0x0000055bu, 0x000002fau, 0x00000039u, 0x000002f0u, 0x000200f9u, 0x000002f4u, 0x000200f8u, 0x000002f4u, 0x000700f5u, 0x00000008u, 0x00000539u, 0x000002f0u, 0x00000292u, 0x0000055bu, 0x000002fcu, 0x000300f7u, 0x00000301u, 0x00000000u, 0x000400fau, 0x00000168u, 0x00000300u, 0x00000306u, 0x000200f8u, 0x00000300u, 0x00050082u, 0x00000008u, 0x00000305u, 0x000002deu, 0x000001cbu, 0x0003003eu, 0x000002ffu, 0x00000305u, 0x000200f9u, 0x00000301u, 0x000200f8u, 0x00000306u, 0x00050082u, 0x00000008u, 0x0000030au, 0x000001cbu, 0x000002d9u, 0x0003003eu, 0x000002ffu, 0x0000030au, 0x000200f9u, 0x00000301u, 0x000200f8u, 0x00000301u, 0x000700f5u, 0x00000008u, 0x00000537u, 0x00000305u, 0x00000300u, 0x0000030au, 0x00000306u, 0x0003003eu, 0x000004beu, 0x00000537u, 0x00050041u, 0x00000132u, 0x0000030fu, 0x0000030du, 0x00000099u, 0x0004003du, 0x00000006u, 0x00000310u, 0x0000030fu, 0x0003003eu, 0x0000030eu, 0x00000310u, 0x000c0050u, 0x00000019u, 0x000004c9u, 0x000001f4u, 0x00000210u, 0x000002d1u, 0x000002d4u, 0x000001cbu, 0x000002d9u, 0x000002deu, 0x00000537u, 0x00000539u, 0x0003003eu, 0x000004cau, 0x000001f4u, 0x0003003eu, 0x000004cbu, 0x00000210u, 0x0003003eu, 0x000004ccu, 0x000002d1u, 0x0003003eu, 0x000004cdu, 0x000002d4u, 0x0003003eu, 0x000004ceu, 0x000001cbu, 0x0003003eu, 0x000004cfu, 0x000002d9u, 0x0003003eu, 0x000004d0u, 0x000002deu, 0x0003003eu, 0x000004d1u, 0x00000537u, 0x0003003eu, 0x000004d2u, 0x00000539u, 0x00070041u, 0x00000096u, 0x0000040au, 0x000000aeu, 0x00000039u, 0x00000310u, 0x00000039u, 0x0003003eu, 0x0000040au, 0x000001f4u, 0x00070041u, 0x00000096u, 0x0000040eu, 0x000000aeu, 0x00000039u, 0x00000310u, 0x0000003fu, 0x0003003eu, 0x0000040eu, 0x00000210u, 0x0004007cu, 0x000000bau, 0x00000412u, 0x000002d1u, 0x00040071u, 0x000000a9u, 0x00000413u, 0x00000412u, 0x00070041u, 0x000000bdu, 0x00000414u, 0x000000aeu, 0x00000039u, 0x00000310u, 0x00000043u, 0x0003003eu, 0x00000414u, 0x00000413u, 0x0004007cu, 0x000000bau, 0x00000418u, 0x000002d4u, 0x00040071u, 0x000000a9u, 0x00000419u, 0x00000418u, 0x00070041u, 0x000000bdu, 0x0000041au, 0x000000aeu, 0x00000039u, 0x00000310u, 0x00000047u, 0x0003003eu, 0x0000041au, 0x00000419u, 0x00070041u, 0x0000003bu, 0x0000041eu, 0x000000aeu, 0x00000039u, 0x00000310u, 0x0000004du, 0x0003003eu, 0x0000041eu, 0x000001cbu, 0x00070041u, 0x0000003bu, 0x00000422u, 0x000000aeu, 0x00000039u, 0x00000310u, 0x00000052u, 0x0003003eu, 0x00000422u, 0x000002d9u, 0x00070041u, 0x0000003bu, 0x00000426u, 0x000000aeu, 0x00000039u, 0x00000310u, 0x00000056u, 0x0003003eu, 0x00000426u, 0x000002deu, 0x00040072u, 0x00000032u, 0x0000042au, 0x00000537u, 0x00070041u, 0x00000048u, 0x0000042bu, 0x000000aeu, 0x00000039u, 0x00000310u, 0x0000005au, 0x0003003eu, 0x0000042bu, 0x0000042au, 0x00040071u, 0x000000a8u, 0x0000042fu, 0x00000539u, 0x00070041u, 0x000000dau, 0x00000430u, 0x000000aeu, 0x00000039u, 0x00000310u, 0x0000005eu, 0x0003003eu, 0x00000430u, 0x0000042fu, 0x0003003eu, 0x00000331u, 0x00000332u, 0x000200f9u, 0x0000032eu, 0x000200f8u, 0x0000032eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000000cu, 0x00000000u, 0x0000000au, 0x00030037u, 0x00000007u, 0x0000000bu, 0x000200f8u, 0x0000000du, 0x0004003du, 0x00000006u, 0x0000003au, 0x0000000bu, 0x00070041u, 0x0000003bu, 0x0000003cu, 0x00000038u, 0x00000039u, 0x0000003au, 0x00000039u, 0x0004003du, 0x00000008u, 0x0000003du, 0x0000003cu, 0x0004003du, 0x00000006u, 0x0000003eu, 0x0000000bu, 0x00070041u, 0x0000003bu, 0x00000040u, 0x00000038u, 0x00000039u, 0x0000003eu, 0x0000003fu, 0x0004003du, 0x00000008u, 0x00000041u, 0x00000040u, 0x0004003du, 0x00000006u, 0x00000042u, 0x0000000bu, 0x00070041u, 0x0000003bu, 0x00000044u, 0x00000038u, 0x00000039u, 0x00000042u, 0x00000043u, 0x0004003du, 0x00000008u, 0x00000045u, 0x00000044u, 0x0004003du, 0x00000006u, 0x00000046u, 0x0000000bu, 0x00070041u, 0x00000048u, 0x00000049u, 0x00000038u, 0x00000039u, 0x00000046u, 0x00000047u, 0x0004003du, 0x00000032u, 0x0000004au, 0x00000049u, 0x00040072u, 0x00000008u, 0x0000004bu, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000004cu, 0x0000000bu, 0x00070041u, 0x00000048u, 0x0000004eu, 0x00000038u, 0x00000039u, 0x0000004cu, 0x0000004du, 0x0004003du, 0x00000032u, 0x0000004fu, 0x0000004eu, 0x00040072u, 0x00000008u, 0x00000050u, 0x0000004fu, 0x0004003du, 0x00000006u, 0x00000051u, 0x0000000bu, 0x00070041u, 0x0000003bu, 0x00000053u, 0x00000038u, 0x00000039u, 0x00000051u, 0x00000052u, 0x0004003du, 0x00000008u, 0x00000054u, 0x00000053u, 0x0004003du, 0x00000006u, 0x00000055u, 0x0000000bu, 0x00070041u, 0x0000003bu, 0x00000057u, 0x00000038u, 0x00000039u, 0x00000055u, 0x00000056u, 0x0004003du, 0x00000008u, 0x00000058u, 0x00000057u, 0x0004003du, 0x00000006u, 0x00000059u, 0x0000000bu, 0x00070041u, 0x0000003bu, 0x0000005bu, 0x00000038u, 0x00000039u, 0x00000059u, 0x0000005au, 0x0004003du, 0x00000008u, 0x0000005cu, 0x0000005bu, 0x0004003du, 0x00000006u, 0x0000005du, 0x0000000bu, 0x00070041u, 0x00000048u, 0x0000005fu, 0x00000038u, 0x00000039u, 0x0000005du, 0x0000005eu, 0x0004003du, 0x00000032u, 0x00000060u, 0x0000005fu, 0x00040072u, 0x00000008u, 0x00000061u, 0x00000060u, 0x0004003du, 0x00000006u, 0x00000062u, 0x0000000bu, 0x00070041u, 0x00000064u, 0x00000065u, 0x00000038u, 0x00000039u, 0x00000062u, 0x00000063u, 0x0004003du, 0x00000033u, 0x00000066u, 0x00000065u, 0x00040071u, 0x00000006u, 0x00000067u, 0x00000066u, 0x0004007cu, 0x00000008u, 0x00000068u, 0x00000067u, 0x0004003du, 0x00000006u, 0x00000069u, 0x0000000bu, 0x00070041u, 0x00000064u, 0x0000006bu, 0x00000038u, 0x00000039u, 0x00000069u, 0x0000006au, 0x0004003du, 0x00000033u, 0x0000006cu, 0x0000006bu, 0x00040071u, 0x00000006u, 0x0000006du, 0x0000006cu, 0x0004007cu, 0x00000008u, 0x0000006eu, 0x0000006du, 0x000e0050u, 0x00000009u, 0x0000006fu, 0x0000003du, 0x00000041u, 0x00000045u, 0x0000004bu, 0x00000050u, 0x00000054u, 0x00000058u, 0x0000005cu, 0x00000061u, 0x00000068u, 0x0000006eu, 0x000200feu, 0x0000006fu, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000012u, 0x00000000u, 0x00000010u, 0x00030037u, 0x00000007u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x00000020u, 0x000004e3u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004e2u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004e1u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004e0u, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004dfu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004deu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004ddu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000004dcu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000077u, 0x00000011u, 0x00060041u, 0x00000078u, 0x00000079u, 0x00000076u, 0x00000039u, 0x00000077u, 0x0004003du, 0x00000072u, 0x0000007au, 0x00000079u, 0x00050051u, 0x0000000eu, 0x0000007du, 0x0000007au, 0x00000000u, 0x0003003eu, 0x000004dcu, 0x0000007du, 0x00050051u, 0x0000000eu, 0x0000007fu, 0x0000007au, 0x00000001u, 0x0003003eu, 0x000004ddu, 0x0000007fu, 0x00050051u, 0x0000000eu, 0x00000081u, 0x0000007au, 0x00000002u, 0x0003003eu, 0x000004deu, 0x00000081u, 0x00050051u, 0x0000000eu, 0x00000083u, 0x0000007au, 0x00000003u, 0x0003003eu, 0x000004dfu, 0x00000083u, 0x00050051u, 0x0000000eu, 0x00000085u, 0x0000007au, 0x00000004u, 0x0003003eu, 0x000004e0u, 0x00000085u, 0x00050051u, 0x0000000eu, 0x00000087u, 0x0000007au, 0x00000005u, 0x0003003eu, 0x000004e1u, 0x00000087u, 0x00050051u, 0x0000000eu, 0x00000089u, 0x0000007au, 0x00000006u, 0x0003003eu, 0x000004e2u, 0x00000089u, 0x00050051u, 0x0000000eu, 0x0000008bu, 0x0000007au, 0x00000007u, 0x0003003eu, 0x000004e3u, 0x0000008bu, 0x000b0050u, 0x0000000fu, 0x000004ecu, 0x0000007du, 0x0000007fu, 0x00000081u, 0x00000083u, 0x00000085u, 0x00000087u, 0x00000089u, 0x0000008bu, 0x000200feu, 0x000004ecu, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003bu, 0x00000020u, 0x00000090u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000095u, 0x00000016u, 0x00060041u, 0x00000096u, 0x00000097u, 0x00000094u, 0x00000039u, 0x00000095u, 0x0004003du, 0x0000000eu, 0x00000098u, 0x00000097u, 0x0003003eu, 0x00000090u, 0x00000098u, 0x00050041u, 0x0000002cu, 0x0000009au, 0x00000090u, 0x00000099u, 0x0004003du, 0x00000008u, 0x0000009bu, 0x0000009au, 0x00050041u, 0x0000002cu, 0x0000009du, 0x00000090u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x0000009eu, 0x0000009du, 0x00050041u, 0x0000002cu, 0x000000a0u, 0x00000090u, 0x0000009fu, 0x0004003du, 0x00000008u, 0x000000a1u, 0x000000a0u, 0x00050041u, 0x0000002cu, 0x000000a3u, 0x00000090u, 0x000000a2u, 0x0004003du, 0x00000008u, 0x000000a4u, 0x000000a3u, 0x00070050u, 0x00000014u, 0x000000a5u, 0x0000009bu, 0x0000009eu, 0x000000a1u, 0x000000a4u, 0x000200feu, 0x000000a5u, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000001eu, 0x00000000u, 0x0000001bu, 0x00030037u, 0x00000007u, 0x0000001cu, 0x00030037u, 0x0000001au, 0x0000001du, 0x000200f8u, 0x0000001fu, 0x0004003du, 0x00000006u, 0x000000afu, 0x0000001cu, 0x00050041u, 0x00000020u, 0x000000b0u, 0x0000001du, 0x00000039u, 0x0004003du, 0x0000000eu, 0x000000b1u, 0x000000b0u, 0x00070041u, 0x00000096u, 0x000000b2u, 0x000000aeu, 0x00000039u, 0x000000afu, 0x00000039u, 0x0003003eu, 0x000000b2u, 0x000000b1u, 0x0004003du, 0x00000006u, 0x000000b3u, 0x0000001cu, 0x00050041u, 0x00000020u, 0x000000b4u, 0x0000001du, 0x0000003fu, 0x0004003du, 0x0000000eu, 0x000000b5u, 0x000000b4u, 0x00070041u, 0x00000096u, 0x000000b6u, 0x000000aeu, 0x00000039u, 0x000000b3u, 0x0000003fu, 0x0003003eu, 0x000000b6u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000b7u, 0x0000001cu, 0x00050041u, 0x00000020u, 0x000000b8u, 0x0000001du, 0x00000043u, 0x0004003du, 0x0000000eu, 0x000000b9u, 0x000000b8u, 0x0004007cu, 0x000000bau, 0x000000bbu, 0x000000b9u, 0x00040071u, 0x000000a9u, 0x000000bcu, 0x000000bbu, 0x00070041u, 0x000000bdu, 0x000000beu, 0x000000aeu, 0x00000039u, 0x000000b7u, 0x00000043u, 0x0003003eu, 0x000000beu, 0x000000bcu, 0x0004003du, 0x00000006u, 0x000000bfu, 0x0000001cu, 0x00050041u, 0x00000020u, 0x000000c0u, 0x0000001du, 0x00000047u, 0x0004003du, 0x0000000eu, 0x000000c1u, 0x000000c0u, 0x0004007cu, 0x000000bau, 0x000000c2u, 0x000000c1u, 0x00040071u, 0x000000a9u, 0x000000c3u, 0x000000c2u, 0x00070041u, 0x000000bdu, 0x000000c4u, 0x000000aeu, 0x00000039u, 0x000000bfu, 0x00000047u, 0x0003003eu, 0x000000c4u, 0x000000c3u, 0x0004003du, 0x00000006u, 0x000000c5u, 0x0000001cu, 0x00050041u, 0x0000002cu, 0x000000c6u, 0x0000001du, 0x0000004du, 0x0004003du, 0x00000008u, 0x000000c7u, 0x000000c6u, 0x00070041u, 0x0000003bu, 0x000000c8u, 0x000000aeu, 0x00000039u, 0x000000c5u, 0x0000004du, 0x0003003eu, 0x000000c8u, 0x000000c7u, 0x0004003du, 0x00000006u, 0x000000c9u, 0x0000001cu, 0x00050041u, 0x0000002cu, 0x000000cau, 0x0000001du, 0x00000052u, 0x0004003du, 0x00000008u, 0x000000cbu, 0x000000cau, 0x00070041u, 0x0000003bu, 0x000000ccu, 0x000000aeu, 0x00000039u, 0x000000c9u, 0x00000052u, 0x0003003eu, 0x000000ccu, 0x000000cbu, 0x0004003du, 0x00000006u, 0x000000cdu, 0x0000001cu, 0x00050041u, 0x0000002cu, 0x000000ceu, 0x0000001du, 0x00000056u, 0x0004003du, 0x00000008u, 0x000000cfu, 0x000000ceu, 0x00070041u, 0x0000003bu, 0x000000d0u, 0x000000aeu, 0x00000039u, 0x000000cdu, 0x00000056u, 0x0003003eu, 0x000000d0u, 0x000000cfu, 0x0004003du, 0x00000006u, 0x000000d1u, 0x0000001cu, 0x00050041u, 0x0000002cu, 0x000000d2u, 0x0000001du, 0x0000005au, 0x0004003du, 0x00000008u, 0x000000d3u, 0x000000d2u, 0x00040072u, 0x00000032u, 0x000000d4u, 0x000000d3u, 0x00070041u, 0x00000048u, 0x000000d5u, 0x000000aeu, 0x00000039u, 0x000000d1u, 0x0000005au, 0x0003003eu, 0x000000d5u, 0x000000d4u, 0x0004003du, 0x00000006u, 0x000000d6u, 0x0000001cu, 0x00050041u, 0x0000002cu, 0x000000d7u, 0x0000001du, 0x0000005eu, 0x0004003du, 0x00000008u, 0x000000d8u, 0x000000d7u, 0x00040071u, 0x000000a8u, 0x000000d9u, 0x000000d8u, 0x00070041u, 0x000000dau, 0x000000dbu, 0x000000aeu, 0x00000039u, 0x000000d6u, 0x0000005eu, 0x0003003eu, 0x000000dbu, 0x000000d9u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000eu, 0x00000023u, 0x00000000u, 0x00000021u, 0x00030037u, 0x00000020u, 0x00000022u, 0x000200f8u, 0x00000024u, 0x0004003bu, 0x00000020u, 0x000000dcu, 0x00000007u, 0x0004003bu, 0x00000020u, 0x000000e7u, 0x00000007u, 0x0004003du, 0x0000000eu, 0x000000ddu, 0x00000022u, 0x000500c7u, 0x0000000eu, 0x000000e0u, 0x000000ddu, 0x00000555u, 0x000500abu, 0x000000e3u, 0x000000e4u, 0x000000e0u, 0x000000e1u, 0x000600a9u, 0x0000000eu, 0x000000e6u, 0x000000e4u, 0x000000e5u, 0x000000e1u, 0x0003003eu, 0x000000dcu, 0x000000e6u, 0x0004003du, 0x0000000eu, 0x000000e8u, 0x00000022u, 0x000500c3u, 0x0000000eu, 0x000000ebu, 0x000000e8u, 0x00000556u, 0x000500c5u, 0x0000000eu, 0x000000edu, 0x000000ebu, 0x000000e6u, 0x00050051u, 0x00000008u, 0x000000eeu, 0x000000edu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000000efu, 0x000000edu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000000f0u, 0x000000edu, 0x00000002u, 0x00050051u, 0x00000008u, 0x000000f1u, 0x000000edu, 0x00000003u, 0x0003003eu, 0x000000e7u, 0x000000edu, 0x000200feu, 0x000000edu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000027u, 0x00000000u, 0x00000025u, 0x00030037u, 0x00000020u, 0x00000026u, 0x000200f8u, 0x00000028u, 0x0004003bu, 0x000000f7u, 0x000000f8u, 0x00000007u, 0x0004003du, 0x0000000eu, 0x000000f9u, 0x00000026u, 0x0007004fu, 0x000000f6u, 0x000000fau, 0x000000f9u, 0x000000f9u, 0x00000000u, 0x00000001u, 0x0004003du, 0x0000000eu, 0x000000fbu, 0x00000026u, 0x0007004fu, 0x000000f6u, 0x000000fcu, 0x000000fbu, 0x000000fbu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x000000f6u, 0x000000fdu, 0x00000001u, 0x00000027u, 0x000000fau, 0x000000fcu, 0x0003003eu, 0x000000f8u, 0x000000fdu, 0x00050041u, 0x0000002cu, 0x000000feu, 0x000000f8u, 0x00000099u, 0x0004003du, 0x00000008u, 0x000000ffu, 0x000000feu, 0x00050041u, 0x0000002cu, 0x00000100u, 0x000000f8u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x00000101u, 0x00000100u, 0x0007000cu, 0x00000008u, 0x00000102u, 0x00000001u, 0x00000027u, 0x000000ffu, 0x00000101u, 0x000200feu, 0x00000102u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000002au, 0x00000000u, 0x00000025u, 0x00030037u, 0x00000020u, 0x00000029u, 0x000200f8u, 0x0000002bu, 0x0004003bu, 0x000000f7u, 0x00000105u, 0x00000007u, 0x0004003du, 0x0000000eu, 0x00000106u, 0x00000029u, 0x0007004fu, 0x000000f6u, 0x00000107u, 0x00000106u, 0x00000106u, 0x00000000u, 0x00000001u, 0x0004003du, 0x0000000eu, 0x00000108u, 0x00000029u, 0x0007004fu, 0x000000f6u, 0x00000109u, 0x00000108u, 0x00000108u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x000000f6u, 0x0000010au, 0x00000001u, 0x0000002au, 0x00000107u, 0x00000109u, 0x0003003eu, 0x00000105u, 0x0000010au, 0x00050041u, 0x0000002cu, 0x0000010bu, 0x00000105u, 0x00000099u, 0x0004003du, 0x00000008u, 0x0000010cu, 0x0000010bu, 0x00050041u, 0x0000002cu, 0x0000010du, 0x00000105u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x0000010eu, 0x0000010du, 0x0007000cu, 0x00000008u, 0x0000010fu, 0x00000001u, 0x0000002au, 0x0000010cu, 0x0000010eu, 0x000200feu, 0x0000010fu, 0x00010038u, 0x00050036u, 0x0000000eu, 0x00000030u, 0x00000000u, 0x0000002du, 0x00030037u, 0x00000020u, 0x0000002eu, 0x00030037u, 0x0000002cu, 0x0000002fu, 0x000200f8u, 0x00000031u, 0x0004003bu, 0x0000002cu, 0x00000112u, 0x00000007u, 0x0004003bu, 0x0000002cu, 0x00000116u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000113u, 0x0000002fu, 0x000500c3u, 0x00000008u, 0x00000115u, 0x00000113u, 0x00000114u, 0x0003003eu, 0x00000112u, 0x00000115u, 0x0004003du, 0x00000008u, 0x00000117u, 0x0000002fu, 0x000500c7u, 0x00000008u, 0x0000011au, 0x00000117u, 0x00000119u, 0x0003003eu, 0x00000116u, 0x0000011au, 0x0004003du, 0x0000000eu, 0x0000011cu, 0x0000002eu, 0x00070050u, 0x0000000eu, 0x0000011du, 0x00000115u, 0x00000115u, 0x00000115u, 0x00000115u, 0x00050084u, 0x0000000eu, 0x0000011eu, 0x0000011du, 0x0000011cu, 0x0004003du, 0x0000000eu, 0x00000120u, 0x0000002eu, 0x00070050u, 0x0000000eu, 0x00000121u, 0x00000114u, 0x00000114u, 0x00000114u, 0x00000114u, 0x000500c3u, 0x0000000eu, 0x00000122u, 0x00000120u, 0x00000121u, 0x00070050u, 0x0000000eu, 0x00000123u, 0x0000011au, 0x0000011au, 0x0000011au, 0x0000011au, 0x00050084u, 0x0000000eu, 0x00000124u, 0x00000123u, 0x00000122u, 0x00050080u, 0x0000000eu, 0x00000125u, 0x0000011eu, 0x00000124u, 0x000200feu, 0x00000125u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000001bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000010u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000008u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000009u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000009u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000009u, 0x00000002u, 0x00040047u, 0x0000000bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000000bu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000010u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00000019u, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000001au, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x0003001du, 0x00000008u, 0x00000007u, 0x0003001eu, 0x00000009u, 0x00000008u, 0x00040020u, 0x0000000au, 0x0000000cu, 0x00000009u, 0x0004003bu, 0x0000000au, 0x0000000bu, 0x0000000cu, 0x00040015u, 0x0000000cu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000cu, 0x0000000du, 0x00000000u, 0x00040017u, 0x0000000eu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000000fu, 0x00000001u, 0x0000000eu, 0x0004003bu, 0x0000000fu, 0x00000010u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000011u, 0x00000000u, 0x00040020u, 0x00000012u, 0x00000001u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000015u, 0x00000001u, 0x0007002cu, 0x00000007u, 0x00000016u, 0x00000011u, 0x00000015u, 0x00000015u, 0x00000011u, 0x00040020u, 0x00000017u, 0x0000000cu, 0x00000007u, 0x00040032u, 0x00000006u, 0x00000019u, 0x00000001u, 0x00060033u, 0x0000000eu, 0x0000001au, 0x00000019u, 0x00000015u, 0x00000015u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x00050041u, 0x00000012u, 0x00000013u, 0x00000010u, 0x00000011u, 0x0004003du, 0x00000006u, 0x00000014u, 0x00000013u, 0x00060041u, 0x00000017u, 0x00000018u, 0x0000000bu, 0x0000000du, 0x00000014u, 0x0003003eu, 0x00000018u, 0x00000016u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000080cu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001d1u, 0x000001dcu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000020u, 0x00000001u, 0x00000001u, 0x00050048u, 0x0000017au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000017au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000017au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000017au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000017au, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x0000017au, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000017au, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000017au, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000017au, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000017au, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000017au, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000017bu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000017cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000017cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000017cu, 0x00000002u, 0x00040047u, 0x0000017eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000017eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001afu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001b0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b0u, 0x00000002u, 0x00040047u, 0x000001b2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b2u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001c4u, 0x00000006u, 0x00000010u, 0x00050048u, 0x000001c5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001c5u, 0x00000002u, 0x00040047u, 0x000001c7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001c7u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000001d1u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x000001dcu, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000001f0u, 0x00000001u, 0x00000004u, 0x00040047u, 0x000001f1u, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001fau, 0x00000001u, 0x00000002u, 0x00050048u, 0x00000204u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000204u, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x00000204u, 0x00000002u, 0x00040047u, 0x00000240u, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002b9u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002bau, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002bau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002bau, 0x00000002u, 0x00040047u, 0x000002bcu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002bcu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002beu, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002c9u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002cau, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002cau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002cau, 0x00000002u, 0x00040047u, 0x000002ccu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ccu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000002e9u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002eau, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002eau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002eau, 0x00000002u, 0x00040047u, 0x000002ecu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002ecu, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000313u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000314u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000314u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000314u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000315u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000316u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000316u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000316u, 0x00000002u, 0x00040047u, 0x00000318u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000318u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000321u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000322u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000322u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000322u, 0x00000002u, 0x00040047u, 0x00000324u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000324u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000326u, 0x00000001u, 0x00000005u, 0x00040047u, 0x0000033au, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x000d001eu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000001du, 0x00000007u, 0x0000001cu, 0x00020014u, 0x0000001eu, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00040017u, 0x00000020u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000021u, 0x00000020u, 0x0000001du, 0x00000008u, 0x0000001fu, 0x00000014u, 0x00040020u, 0x00000028u, 0x00000007u, 0x00000020u, 0x00070021u, 0x00000029u, 0x0000001eu, 0x0000001du, 0x00000028u, 0x00000028u, 0x00000014u, 0x00040015u, 0x00000030u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000031u, 0x00000007u, 0x00000030u, 0x00040021u, 0x00000032u, 0x0000001cu, 0x00000031u, 0x0006001eu, 0x00000036u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000037u, 0x00000036u, 0x00000031u, 0x00040021u, 0x0000003bu, 0x00000030u, 0x00000031u, 0x0004002bu, 0x00000006u, 0x00000040u, 0x0000000fu, 0x0004002bu, 0x00000030u, 0x0000004bu, 0x00000000u, 0x0004002bu, 0x00000030u, 0x0000004eu, 0x00000001u, 0x0004001eu, 0x00000066u, 0x00000007u, 0x00000007u, 0x00040017u, 0x0000006bu, 0x00000030u, 0x00000004u, 0x00040020u, 0x00000070u, 0x00000007u, 0x0000006bu, 0x0004001eu, 0x00000072u, 0x0000006bu, 0x0000006bu, 0x0004002bu, 0x00000006u, 0x00000080u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000083u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x00000086u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000094u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000096u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000a8u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000aau, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000bcu, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000beu, 0x00000002u, 0x00040017u, 0x000000d3u, 0x0000001eu, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000e1u, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000e2u, 0x000000e1u, 0x000000e1u, 0x000000e1u, 0x000000e1u, 0x0007002cu, 0x00000007u, 0x000000e4u, 0x00000096u, 0x00000096u, 0x00000096u, 0x00000096u, 0x0004002bu, 0x00000006u, 0x000000e8u, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000e9u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x0004002bu, 0x00000006u, 0x000000ebu, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000ecu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x0004002bu, 0x00000006u, 0x00000112u, 0x000007ffu, 0x0005002cu, 0x00000020u, 0x00000121u, 0x00000096u, 0x000000e1u, 0x0004002bu, 0x00000006u, 0x00000136u, 0x00000008u, 0x0003002au, 0x0000001eu, 0x00000141u, 0x0004002bu, 0x00000006u, 0x00000144u, 0x00000009u, 0x0005002cu, 0x00000020u, 0x00000150u, 0x000000ebu, 0x00000096u, 0x00040015u, 0x00000178u, 0x00000010u, 0x00000001u, 0x00040015u, 0x00000179u, 0x00000008u, 0x00000000u, 0x000d001eu, 0x0000017au, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000178u, 0x00000178u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000178u, 0x00000179u, 0x00000179u, 0x0003001du, 0x0000017bu, 0x0000017au, 0x0003001eu, 0x0000017cu, 0x0000017bu, 0x00040020u, 0x0000017du, 0x0000000cu, 0x0000017cu, 0x0004003bu, 0x0000017du, 0x0000017eu, 0x0000000cu, 0x00040020u, 0x00000180u, 0x0000000cu, 0x00000006u, 0x00040020u, 0x0000018au, 0x0000000cu, 0x00000178u, 0x00040020u, 0x000001a0u, 0x0000000cu, 0x00000179u, 0x0004002bu, 0x00000006u, 0x000001a6u, 0x0000000au, 0x0003001du, 0x000001afu, 0x00000007u, 0x0003001eu, 0x000001b0u, 0x000001afu, 0x00040020u, 0x000001b1u, 0x0000000cu, 0x000001b0u, 0x0004003bu, 0x000001b1u, 0x000001b2u, 0x0000000cu, 0x00040020u, 0x000001b4u, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000030u, 0x000001bbu, 0x00000002u, 0x0004002bu, 0x00000030u, 0x000001beu, 0x00000003u, 0x0003001du, 0x000001c4u, 0x0000006bu, 0x0003001eu, 0x000001c5u, 0x000001c4u, 0x00040020u, 0x000001c6u, 0x0000000cu, 0x000001c5u, 0x0004003bu, 0x000001c6u, 0x000001c7u, 0x0000000cu, 0x00040020u, 0x000001c9u, 0x0000000cu, 0x00000030u, 0x00040017u, 0x000001cfu, 0x00000030u, 0x00000003u, 0x00040020u, 0x000001d0u, 0x00000001u, 0x000001cfu, 0x0004003bu, 0x000001d0u, 0x000001d1u, 0x00000001u, 0x00040020u, 0x000001d2u, 0x00000001u, 0x00000030u, 0x00040017u, 0x000001d7u, 0x00000030u, 0x00000002u, 0x0004003bu, 0x000001d2u, 0x000001dcu, 0x00000001u, 0x0005002cu, 0x00000020u, 0x000001e7u, 0x00000136u, 0x00000086u, 0x00040032u, 0x00000006u, 0x000001f0u, 0x00000400u, 0x00040032u, 0x00000006u, 0x000001f1u, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001f2u, 0x00000087u, 0x000001f0u, 0x000001f1u, 0x00060034u, 0x00000006u, 0x000001f9u, 0x00000084u, 0x000001f1u, 0x00000136u, 0x00040032u, 0x00000006u, 0x000001fau, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001fbu, 0x00000084u, 0x000001fau, 0x00000086u, 0x00050033u, 0x00000020u, 0x000001fcu, 0x000001f9u, 0x000001fbu, 0x00060034u, 0x00000006u, 0x00000200u, 0x00000084u, 0x000001f1u, 0x00000136u, 0x00060034u, 0x00000006u, 0x00000201u, 0x00000084u, 0x000001fau, 0x00000086u, 0x00050033u, 0x00000020u, 0x00000202u, 0x00000200u, 0x00000201u, 0x0004001eu, 0x00000204u, 0x000001d7u, 0x00000006u, 0x00040020u, 0x00000205u, 0x00000009u, 0x00000204u, 0x0004003bu, 0x00000205u, 0x00000206u, 0x00000009u, 0x00040020u, 0x00000207u, 0x00000009u, 0x000001d7u, 0x00050033u, 0x00000020u, 0x00000210u, 0x000001f1u, 0x000001fau, 0x00050033u, 0x00000020u, 0x00000214u, 0x000001f1u, 0x000001fau, 0x00040020u, 0x0000021du, 0x00000009u, 0x00000006u, 0x00040020u, 0x00000224u, 0x00000004u, 0x00000030u, 0x0004003bu, 0x00000224u, 0x00000225u, 0x00000004u, 0x0004002bu, 0x00000030u, 0x00000226u, 0x00000108u, 0x0004002bu, 0x00000006u, 0x00000229u, 0x00000020u, 0x00040020u, 0x00000239u, 0x00000007u, 0x00000036u, 0x00040032u, 0x00000006u, 0x00000240u, 0x00000001u, 0x0003001du, 0x000002b9u, 0x00000030u, 0x0003001eu, 0x000002bau, 0x000002b9u, 0x00040020u, 0x000002bbu, 0x0000000cu, 0x000002bau, 0x0004003bu, 0x000002bbu, 0x000002bcu, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002beu, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002bfu, 0x00000087u, 0x000002beu, 0x00000229u, 0x0003001du, 0x000002c9u, 0x00000030u, 0x0003001eu, 0x000002cau, 0x000002c9u, 0x00040020u, 0x000002cbu, 0x0000000cu, 0x000002cau, 0x0004003bu, 0x000002cbu, 0x000002ccu, 0x0000000cu, 0x0003001du, 0x000002e9u, 0x00000030u, 0x0003001eu, 0x000002eau, 0x000002e9u, 0x00040020u, 0x000002ebu, 0x0000000cu, 0x000002eau, 0x0004003bu, 0x000002ebu, 0x000002ecu, 0x0000000cu, 0x00040017u, 0x00000311u, 0x00000179u, 0x00000004u, 0x0004002bu, 0x00000030u, 0x00000312u, 0x00000008u, 0x0004001cu, 0x00000313u, 0x00000179u, 0x00000312u, 0x0005001eu, 0x00000314u, 0x00000311u, 0x00000311u, 0x00000313u, 0x0003001du, 0x00000315u, 0x00000314u, 0x0003001eu, 0x00000316u, 0x00000315u, 0x00040020u, 0x00000317u, 0x0000000cu, 0x00000316u, 0x0004003bu, 0x00000317u, 0x00000318u, 0x0000000cu, 0x0003001du, 0x00000321u, 0x0000006bu, 0x0003001eu, 0x00000322u, 0x00000321u, 0x00040020u, 0x00000323u, 0x0000000cu, 0x00000322u, 0x0004003bu, 0x00000323u, 0x00000324u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x00000326u, 0x00008000u, 0x00060034u, 0x00000030u, 0x00000327u, 0x00000080u, 0x00000326u, 0x0000004bu, 0x00040020u, 0x00000335u, 0x0000000cu, 0x0000006bu, 0x0004002bu, 0x00000030u, 0x00000339u, 0x00000020u, 0x0006002cu, 0x000001cfu, 0x0000033au, 0x00000339u, 0x0000004eu, 0x0000004eu, 0x0004002bu, 0x00000006u, 0x0000033bu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x0000033cu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x0000033du, 0x00000080u, 0x0004002bu, 0x00000006u, 0x0000033eu, 0x00000100u, 0x0004002bu, 0x00000006u, 0x0000033fu, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00000340u, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000341u, 0x00000800u, 0x0004002bu, 0x00000006u, 0x00000342u, 0x00001000u, 0x0004002bu, 0x00000006u, 0x00000343u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00000344u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00000345u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00000346u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00000347u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00000348u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00000349u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x0000034au, 0x00100000u, 0x0004002bu, 0x00000006u, 0x0000034bu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x0000034cu, 0x00400000u, 0x0004002bu, 0x00000006u, 0x0000034du, 0x00800000u, 0x0004002bu, 0x00000006u, 0x0000034eu, 0x01000000u, 0x0004002bu, 0x00000006u, 0x0000034fu, 0x0000001au, 0x0004002bu, 0x00000006u, 0x00000350u, 0x10000000u, 0x0004002bu, 0x00000006u, 0x00000351u, 0x20000000u, 0x0004002bu, 0x00000006u, 0x00000352u, 0x40000000u, 0x00030029u, 0x0000001eu, 0x00000358u, 0x0003002eu, 0x00000006u, 0x0000068bu, 0x0005002cu, 0x00000020u, 0x000007fdu, 0x000000aau, 0x000000aau, 0x0005002cu, 0x00000020u, 0x000007feu, 0x000000beu, 0x000000beu, 0x0007002cu, 0x00000007u, 0x000007ffu, 0x00000040u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000014u, 0x0000077eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000077du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000077cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000077bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000077au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000779u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000777u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000775u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000759u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000758u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000757u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000756u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000755u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000754u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000753u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000735u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000734u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000733u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000732u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000731u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000730u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000714u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000713u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000711u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000710u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000705u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000704u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000703u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000702u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ddu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000699u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000698u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000697u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000696u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000695u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000694u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000688u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000687u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000686u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000685u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000684u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000683u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000067fu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000673u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000674u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000667u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000668u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000065bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000657u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000653u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000063au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000063bu, 0x00000007u, 0x0004003bu, 0x00000070u, 0x0000063cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000621u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000622u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x00000623u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000624u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000608u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000609u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x0000060au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000060bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000576u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000577u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000578u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000579u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000057bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000057cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000580u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000581u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000582u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000583u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000584u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000585u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000586u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000587u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000588u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000589u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000058au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000058bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000058cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000058du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000058eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000058fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000590u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000591u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000592u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000593u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000594u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000595u, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x00000524u, 0x00000007u, 0x00000141u, 0x0004003bu, 0x0000001fu, 0x00000525u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000526u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000527u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000528u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000529u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000052au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000052du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000052eu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000052fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004ecu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000004e0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004e1u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004d5u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000004c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004c9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a8u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x000004a9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000048eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000048fu, 0x00000007u, 0x0004003bu, 0x00000070u, 0x00000490u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000491u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000475u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000476u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x00000477u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000478u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003eau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003ebu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003ecu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003edu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003eeu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003efu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003f4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003f5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003fau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003fbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003fcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003fdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003feu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000003ffu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000400u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000401u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000402u, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x00000391u, 0x00000007u, 0x00000141u, 0x0004003bu, 0x0000001fu, 0x00000392u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000393u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000394u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000395u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000396u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000397u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000399u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000039au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000039bu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000039cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000359u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001ceu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001dbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001dfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001e2u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001e5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001edu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001f7u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001feu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000020eu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000212u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000021cu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000227u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000022du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000023bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000023eu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000024du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000025eu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000263u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000265u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000267u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000026fu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000271u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000279u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000281u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000288u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000297u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002a8u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002adu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002afu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002b1u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002d9u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002ddu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002f3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002fcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000304u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000310u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000031du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000031eu, 0x00000007u, 0x00050041u, 0x000001d2u, 0x000001d3u, 0x000001d1u, 0x0000004bu, 0x0004003du, 0x00000030u, 0x000001d4u, 0x000001d3u, 0x0004007cu, 0x00000006u, 0x000001d5u, 0x000001d4u, 0x0003003eu, 0x000001ceu, 0x000001d5u, 0x0004003du, 0x000001cfu, 0x000001d8u, 0x000001d1u, 0x0007004fu, 0x000001d7u, 0x000001d9u, 0x000001d8u, 0x000001d8u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000020u, 0x000001dau, 0x000001d9u, 0x0003003eu, 0x000001d6u, 0x000001dau, 0x0004003du, 0x00000030u, 0x000001ddu, 0x000001dcu, 0x0004007cu, 0x00000006u, 0x000001deu, 0x000001ddu, 0x0003003eu, 0x000001dbu, 0x000001deu, 0x000500c7u, 0x00000006u, 0x000001e1u, 0x000001deu, 0x000000bcu, 0x0003003eu, 0x000001dfu, 0x000001e1u, 0x000500c3u, 0x00000006u, 0x000001e4u, 0x000001deu, 0x00000080u, 0x0003003eu, 0x000001e2u, 0x000001e4u, 0x00050084u, 0x00000020u, 0x000001e8u, 0x000001dau, 0x000001e7u, 0x00050050u, 0x00000020u, 0x000001ebu, 0x000001e1u, 0x000001e4u, 0x00050080u, 0x00000020u, 0x000001ecu, 0x000001e8u, 0x000001ebu, 0x0003003eu, 0x000001e5u, 0x000001ecu, 0x00050041u, 0x00000014u, 0x000001eeu, 0x000001e5u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000001efu, 0x000001eeu, 0x00050084u, 0x00000006u, 0x000001f3u, 0x000001efu, 0x000001f2u, 0x00050041u, 0x00000014u, 0x000001f4u, 0x000001e5u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000001f5u, 0x000001f4u, 0x00050080u, 0x00000006u, 0x000001f6u, 0x000001f3u, 0x000001f5u, 0x0003003eu, 0x000001edu, 0x000001f6u, 0x00050084u, 0x00000020u, 0x000001fdu, 0x000001dau, 0x000001fcu, 0x0003003eu, 0x000001f7u, 0x000001fdu, 0x00050080u, 0x00000020u, 0x00000203u, 0x000001fdu, 0x00000202u, 0x00050041u, 0x00000207u, 0x00000208u, 0x00000206u, 0x00000096u, 0x0004003du, 0x000001d7u, 0x00000209u, 0x00000208u, 0x0004007cu, 0x00000020u, 0x0000020au, 0x00000209u, 0x0007000cu, 0x00000020u, 0x0000020bu, 0x00000001u, 0x00000027u, 0x00000203u, 0x0000020au, 0x00050082u, 0x00000020u, 0x0000020du, 0x0000020bu, 0x000007fdu, 0x0003003eu, 0x000001feu, 0x0000020du, 0x0004003du, 0x00000020u, 0x0000020fu, 0x000001e5u, 0x00050084u, 0x00000020u, 0x00000211u, 0x0000020fu, 0x00000210u, 0x0003003eu, 0x0000020eu, 0x00000211u, 0x00050080u, 0x00000020u, 0x00000215u, 0x00000211u, 0x00000214u, 0x0007000cu, 0x00000020u, 0x00000219u, 0x00000001u, 0x00000027u, 0x00000215u, 0x0000020au, 0x00050082u, 0x00000020u, 0x0000021bu, 0x00000219u, 0x000007fdu, 0x0003003eu, 0x00000212u, 0x0000021bu, 0x00050041u, 0x0000021du, 0x0000021eu, 0x00000206u, 0x000000aau, 0x0004003du, 0x00000006u, 0x0000021fu, 0x0000021eu, 0x0003003eu, 0x0000021cu, 0x0000021fu, 0x000500aau, 0x0000001eu, 0x00000221u, 0x000001deu, 0x00000096u, 0x000300f7u, 0x00000223u, 0x00000000u, 0x000400fau, 0x00000221u, 0x00000222u, 0x00000223u, 0x000200f8u, 0x00000222u, 0x0003003eu, 0x00000225u, 0x0000004bu, 0x000200f9u, 0x00000223u, 0x000200f8u, 0x00000223u, 0x000400e0u, 0x000001bbu, 0x000001bbu, 0x00000226u, 0x0003003eu, 0x00000227u, 0x00000141u, 0x000500b1u, 0x0000001eu, 0x0000022au, 0x000001deu, 0x00000229u, 0x000300f7u, 0x0000022cu, 0x00000000u, 0x000400fau, 0x0000022au, 0x0000022bu, 0x0000022cu, 0x000200f8u, 0x0000022bu, 0x00050084u, 0x00000006u, 0x0000022fu, 0x000001d5u, 0x00000229u, 0x00050080u, 0x00000006u, 0x00000231u, 0x0000022fu, 0x000001deu, 0x0004007cu, 0x00000030u, 0x00000232u, 0x00000231u, 0x0003003eu, 0x0000022du, 0x00000232u, 0x0004007cu, 0x00000030u, 0x00000235u, 0x0000021fu, 0x000500b0u, 0x0000001eu, 0x00000236u, 0x00000232u, 0x00000235u, 0x000300f7u, 0x00000238u, 0x00000000u, 0x000400fau, 0x00000236u, 0x00000237u, 0x00000238u, 0x000200f8u, 0x00000237u, 0x0003003eu, 0x0000023bu, 0x00000232u, 0x00060041u, 0x000001b4u, 0x0000035cu, 0x000001b2u, 0x00000096u, 0x00000232u, 0x0004003du, 0x00000007u, 0x0000035du, 0x0000035cu, 0x0003003eu, 0x00000359u, 0x0000035du, 0x00050041u, 0x00000014u, 0x0000035eu, 0x00000359u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000035fu, 0x0000035eu, 0x00050041u, 0x00000014u, 0x00000360u, 0x00000359u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000361u, 0x00000360u, 0x00050041u, 0x00000014u, 0x00000362u, 0x00000359u, 0x000001bbu, 0x0004003du, 0x00000006u, 0x00000363u, 0x00000362u, 0x00050041u, 0x00000014u, 0x00000364u, 0x00000359u, 0x000001beu, 0x0004003du, 0x00000006u, 0x00000365u, 0x00000364u, 0x00070050u, 0x00000036u, 0x00000366u, 0x0000035fu, 0x00000361u, 0x00000363u, 0x00000365u, 0x0003003eu, 0x000006f5u, 0x0000035fu, 0x0003003eu, 0x000006f6u, 0x00000361u, 0x0003003eu, 0x000006f7u, 0x00000363u, 0x0003003eu, 0x000006f8u, 0x00000365u, 0x0003003eu, 0x00000702u, 0x0000035fu, 0x0003003eu, 0x00000703u, 0x00000361u, 0x0003003eu, 0x00000704u, 0x00000363u, 0x0003003eu, 0x00000705u, 0x00000365u, 0x00050050u, 0x00000020u, 0x00000245u, 0x0000035fu, 0x00000361u, 0x000500c3u, 0x00000020u, 0x00000247u, 0x00000245u, 0x000007feu, 0x00050050u, 0x00000020u, 0x00000248u, 0x00000240u, 0x00000240u, 0x00050084u, 0x00000020u, 0x00000249u, 0x00000248u, 0x00000247u, 0x00050082u, 0x00000020u, 0x0000024bu, 0x00000249u, 0x000007fdu, 0x0007000cu, 0x00000020u, 0x0000024cu, 0x00000001u, 0x0000002au, 0x000001fdu, 0x0000024bu, 0x0003003eu, 0x0000023eu, 0x0000024cu, 0x00050080u, 0x00000006u, 0x00000251u, 0x00000363u, 0x00000080u, 0x00050080u, 0x00000006u, 0x00000254u, 0x00000365u, 0x00000080u, 0x00050050u, 0x00000020u, 0x00000255u, 0x00000251u, 0x00000254u, 0x000500c3u, 0x00000020u, 0x00000257u, 0x00000255u, 0x000007feu, 0x00050084u, 0x00000020u, 0x00000259u, 0x00000248u, 0x00000257u, 0x00050082u, 0x00000020u, 0x0000025bu, 0x00000259u, 0x000007fdu, 0x0007000cu, 0x00000020u, 0x0000025cu, 0x00000001u, 0x00000027u, 0x0000020du, 0x0000025bu, 0x0003003eu, 0x0000024du, 0x0000025cu, 0x0003003eu, 0x0000025eu, 0x00000232u, 0x00070041u, 0x00000180u, 0x00000369u, 0x0000017eu, 0x00000096u, 0x00000232u, 0x00000096u, 0x0004003du, 0x00000006u, 0x0000036au, 0x00000369u, 0x00070041u, 0x00000180u, 0x0000036cu, 0x0000017eu, 0x00000096u, 0x00000232u, 0x000000aau, 0x0004003du, 0x00000006u, 0x0000036du, 0x0000036cu, 0x00070041u, 0x00000180u, 0x0000036fu, 0x0000017eu, 0x00000096u, 0x00000232u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000370u, 0x0000036fu, 0x00070041u, 0x0000018au, 0x00000372u, 0x0000017eu, 0x00000096u, 0x00000232u, 0x00000080u, 0x0004003du, 0x00000178u, 0x00000373u, 0x00000372u, 0x00040072u, 0x00000006u, 0x00000374u, 0x00000373u, 0x00070041u, 0x0000018au, 0x00000376u, 0x0000017eu, 0x00000096u, 0x00000232u, 0x00000086u, 0x0004003du, 0x00000178u, 0x00000377u, 0x00000376u, 0x00040072u, 0x00000006u, 0x00000378u, 0x00000377u, 0x00070041u, 0x00000180u, 0x0000037au, 0x0000017eu, 0x00000096u, 0x00000232u, 0x00000094u, 0x0004003du, 0x00000006u, 0x0000037bu, 0x0000037au, 0x00070041u, 0x00000180u, 0x0000037du, 0x0000017eu, 0x00000096u, 0x00000232u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x0000037eu, 0x0000037du, 0x00070041u, 0x00000180u, 0x00000380u, 0x0000017eu, 0x00000096u, 0x00000232u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x00000381u, 0x00000380u, 0x00070041u, 0x0000018au, 0x00000383u, 0x0000017eu, 0x00000096u, 0x00000232u, 0x00000136u, 0x0004003du, 0x00000178u, 0x00000384u, 0x00000383u, 0x00040072u, 0x00000006u, 0x00000385u, 0x00000384u, 0x00070041u, 0x000001a0u, 0x00000387u, 0x0000017eu, 0x00000096u, 0x00000232u, 0x00000144u, 0x0004003du, 0x00000179u, 0x00000388u, 0x00000387u, 0x00040071u, 0x00000030u, 0x00000389u, 0x00000388u, 0x0004007cu, 0x00000006u, 0x0000038au, 0x00000389u, 0x00070041u, 0x000001a0u, 0x0000038cu, 0x0000017eu, 0x00000096u, 0x00000232u, 0x000001a6u, 0x0004003du, 0x00000179u, 0x0000038du, 0x0000038cu, 0x00040071u, 0x00000030u, 0x0000038eu, 0x0000038du, 0x0004007cu, 0x00000006u, 0x0000038fu, 0x0000038eu, 0x000e0050u, 0x0000001cu, 0x00000390u, 0x0000036au, 0x0000036du, 0x00000370u, 0x00000374u, 0x00000378u, 0x0000037bu, 0x0000037eu, 0x00000381u, 0x00000385u, 0x0000038au, 0x0000038fu, 0x0003003eu, 0x000006d3u, 0x0000036au, 0x0003003eu, 0x000006d4u, 0x0000036du, 0x0003003eu, 0x000006d5u, 0x00000370u, 0x0003003eu, 0x000006d6u, 0x00000374u, 0x0003003eu, 0x000006d7u, 0x00000378u, 0x0003003eu, 0x000006d8u, 0x0000037bu, 0x0003003eu, 0x000006d9u, 0x0000037eu, 0x0003003eu, 0x000006dau, 0x00000381u, 0x0003003eu, 0x000006dbu, 0x00000385u, 0x0003003eu, 0x000006dcu, 0x0000038au, 0x0003003eu, 0x000006ddu, 0x0000038fu, 0x0003003eu, 0x0000070au, 0x0000036au, 0x0003003eu, 0x0000070bu, 0x0000036du, 0x0003003eu, 0x0000070cu, 0x00000370u, 0x0003003eu, 0x0000070du, 0x00000374u, 0x0003003eu, 0x0000070eu, 0x00000378u, 0x0003003eu, 0x0000070fu, 0x0000037bu, 0x0003003eu, 0x00000710u, 0x0000037eu, 0x0003003eu, 0x00000711u, 0x00000381u, 0x0003003eu, 0x00000712u, 0x00000385u, 0x0003003eu, 0x00000713u, 0x0000038au, 0x0003003eu, 0x00000714u, 0x0000038fu, 0x0003003eu, 0x0000072cu, 0x0000036au, 0x0003003eu, 0x0000072du, 0x0000036du, 0x0003003eu, 0x0000072eu, 0x00000370u, 0x0003003eu, 0x0000072fu, 0x00000374u, 0x0003003eu, 0x00000730u, 0x00000378u, 0x0003003eu, 0x00000731u, 0x0000037bu, 0x0003003eu, 0x00000732u, 0x0000037eu, 0x0003003eu, 0x00000733u, 0x00000381u, 0x0003003eu, 0x00000734u, 0x00000385u, 0x0003003eu, 0x00000735u, 0x0000038au, 0x0003003eu, 0x00000263u, 0x0000024cu, 0x0003003eu, 0x00000265u, 0x0000025cu, 0x0003003eu, 0x00000267u, 0x00000240u, 0x0003003eu, 0x00000391u, 0x00000141u, 0x000300f7u, 0x0000039du, 0x00000000u, 0x000300fbu, 0x0000004bu, 0x0000039eu, 0x000200f8u, 0x0000039eu, 0x00050041u, 0x00000014u, 0x0000039fu, 0x00000263u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000003a0u, 0x0000039fu, 0x00050084u, 0x00000006u, 0x000003a1u, 0x000003a0u, 0x00000086u, 0x0003003eu, 0x00000393u, 0x000003a1u, 0x00050041u, 0x00000014u, 0x000003a2u, 0x00000265u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000003a3u, 0x000003a2u, 0x00050084u, 0x00000006u, 0x000003a4u, 0x000003a3u, 0x00000086u, 0x00050080u, 0x00000006u, 0x000003a5u, 0x000003a4u, 0x00000080u, 0x0003003eu, 0x00000394u, 0x000003a5u, 0x00050084u, 0x00000006u, 0x000003aau, 0x00000240u, 0x00000374u, 0x0007000cu, 0x00000006u, 0x000003abu, 0x00000001u, 0x0000002au, 0x000003a1u, 0x000003aau, 0x0003003eu, 0x00000393u, 0x000003abu, 0x00050084u, 0x00000006u, 0x000003b0u, 0x00000240u, 0x00000385u, 0x00050082u, 0x00000006u, 0x000003b1u, 0x000003b0u, 0x000000aau, 0x0007000cu, 0x00000006u, 0x000003b2u, 0x00000001u, 0x00000027u, 0x000003a5u, 0x000003b1u, 0x0003003eu, 0x00000394u, 0x000003b2u, 0x000500b1u, 0x0000001eu, 0x000003b5u, 0x000003b2u, 0x000003abu, 0x000300f7u, 0x000003b6u, 0x00000000u, 0x000400fau, 0x000003b5u, 0x000003b7u, 0x000003b6u, 0x000200f8u, 0x000003b7u, 0x0003003eu, 0x00000391u, 0x00000358u, 0x0003003eu, 0x00000392u, 0x00000141u, 0x000200f9u, 0x0000039du, 0x000200f8u, 0x000003b6u, 0x000500c7u, 0x00000006u, 0x000003bau, 0x0000038au, 0x000000aau, 0x000500abu, 0x0000001eu, 0x000003bbu, 0x000003bau, 0x00000096u, 0x0003003eu, 0x00000395u, 0x000003bbu, 0x00050084u, 0x00000006u, 0x000003c1u, 0x00000378u, 0x00000240u, 0x00050050u, 0x00000020u, 0x000003c2u, 0x000003c1u, 0x000003c1u, 0x00050080u, 0x00000020u, 0x000003c3u, 0x000003c2u, 0x00000150u, 0x00050050u, 0x00000020u, 0x000003c5u, 0x000003abu, 0x000003abu, 0x00050050u, 0x00000020u, 0x000003c7u, 0x000003b2u, 0x000003b2u, 0x0008000cu, 0x00000020u, 0x000003c8u, 0x00000001u, 0x0000002du, 0x000003c3u, 0x000003c5u, 0x000003c7u, 0x00050051u, 0x00000006u, 0x000003c9u, 0x000003c8u, 0x00000000u, 0x00050051u, 0x00000006u, 0x000003cau, 0x000003c8u, 0x00000001u, 0x00070050u, 0x00000007u, 0x000003cbu, 0x000003abu, 0x000003b2u, 0x000003c9u, 0x000003cau, 0x0003003eu, 0x00000396u, 0x000003cbu, 0x000e0050u, 0x0000001cu, 0x0000074au, 0x0000036au, 0x0000036du, 0x00000370u, 0x00000374u, 0x00000378u, 0x0000037bu, 0x0000037eu, 0x00000381u, 0x00000385u, 0x0000038au, 0x0000068bu, 0x0003003eu, 0x000006c3u, 0x0000036au, 0x0003003eu, 0x000006c4u, 0x0000036du, 0x0003003eu, 0x000006c5u, 0x00000370u, 0x0003003eu, 0x000006c6u, 0x00000374u, 0x0003003eu, 0x000006c7u, 0x00000378u, 0x0003003eu, 0x000006c8u, 0x0000037bu, 0x0003003eu, 0x000006c9u, 0x0000037eu, 0x0003003eu, 0x000006cau, 0x00000381u, 0x0003003eu, 0x00000399u, 0x000003cbu, 0x0003003eu, 0x0000039au, 0x000003bbu, 0x0003003eu, 0x0000039bu, 0x00000240u, 0x000500c7u, 0x00000006u, 0x00000405u, 0x00000374u, 0x00000083u, 0x0003003eu, 0x000003e3u, 0x00000405u, 0x0003003eu, 0x000003e4u, 0x00000378u, 0x00050084u, 0x00000006u, 0x0000040au, 0x00000405u, 0x00000240u, 0x0003003eu, 0x000003e3u, 0x0000040au, 0x0003003eu, 0x000003e4u, 0x000003c1u, 0x00070050u, 0x00000007u, 0x00000410u, 0x0000040au, 0x0000040au, 0x0000040au, 0x0000040au, 0x00050082u, 0x00000007u, 0x00000411u, 0x000003cbu, 0x00000410u, 0x00050084u, 0x00000006u, 0x00000415u, 0x00000240u, 0x0000036au, 0x0003003eu, 0x000003e7u, 0x00000411u, 0x0003003eu, 0x000003e8u, 0x0000037bu, 0x0003003eu, 0x000003e9u, 0x00000415u, 0x00070050u, 0x00000007u, 0x0000047bu, 0x0000037bu, 0x0000037bu, 0x0000037bu, 0x0000037bu, 0x00050098u, 0x00000066u, 0x0000047cu, 0x00000411u, 0x0000047bu, 0x00050051u, 0x00000007u, 0x0000047du, 0x0000047cu, 0x00000000u, 0x0003003eu, 0x00000476u, 0x0000047du, 0x00050051u, 0x00000007u, 0x0000047eu, 0x0000047cu, 0x00000001u, 0x0003003eu, 0x00000475u, 0x0000047eu, 0x0004007cu, 0x0000006bu, 0x00000480u, 0x0000047du, 0x0004007cu, 0x00000030u, 0x00000482u, 0x00000415u, 0x00070050u, 0x0000006bu, 0x00000483u, 0x00000482u, 0x00000482u, 0x00000482u, 0x00000482u, 0x00050095u, 0x00000072u, 0x00000484u, 0x00000480u, 0x00000483u, 0x00050051u, 0x0000006bu, 0x00000485u, 0x00000484u, 0x00000001u, 0x0003003eu, 0x00000477u, 0x00000485u, 0x00050051u, 0x0000006bu, 0x00000486u, 0x00000484u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000487u, 0x00000486u, 0x0003003eu, 0x00000476u, 0x00000487u, 0x0004007cu, 0x00000007u, 0x00000489u, 0x00000485u, 0x00050080u, 0x00000007u, 0x0000048bu, 0x0000047eu, 0x00000489u, 0x0003003eu, 0x00000475u, 0x0000048bu, 0x0003003eu, 0x000003eau, 0x0000048bu, 0x0003003eu, 0x00000478u, 0x00000487u, 0x0003003eu, 0x000003e6u, 0x0000048bu, 0x0003003eu, 0x000003e5u, 0x00000487u, 0x00050084u, 0x00000006u, 0x00000421u, 0x00000240u, 0x0000036du, 0x0003003eu, 0x000003edu, 0x00000411u, 0x0003003eu, 0x000003eeu, 0x0000037eu, 0x0003003eu, 0x000003efu, 0x00000421u, 0x00070050u, 0x00000007u, 0x00000494u, 0x0000037eu, 0x0000037eu, 0x0000037eu, 0x0000037eu, 0x00050098u, 0x00000066u, 0x00000495u, 0x00000411u, 0x00000494u, 0x00050051u, 0x00000007u, 0x00000496u, 0x00000495u, 0x00000000u, 0x0003003eu, 0x0000048fu, 0x00000496u, 0x00050051u, 0x00000007u, 0x00000497u, 0x00000495u, 0x00000001u, 0x0003003eu, 0x0000048eu, 0x00000497u, 0x0004007cu, 0x0000006bu, 0x00000499u, 0x00000496u, 0x0004007cu, 0x00000030u, 0x0000049bu, 0x00000421u, 0x00070050u, 0x0000006bu, 0x0000049cu, 0x0000049bu, 0x0000049bu, 0x0000049bu, 0x0000049bu, 0x00050095u, 0x00000072u, 0x0000049du, 0x00000499u, 0x0000049cu, 0x00050051u, 0x0000006bu, 0x0000049eu, 0x0000049du, 0x00000001u, 0x0003003eu, 0x00000490u, 0x0000049eu, 0x00050051u, 0x0000006bu, 0x0000049fu, 0x0000049du, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004a0u, 0x0000049fu, 0x0003003eu, 0x0000048fu, 0x000004a0u, 0x0004007cu, 0x00000007u, 0x000004a2u, 0x0000049eu, 0x00050080u, 0x00000007u, 0x000004a4u, 0x00000497u, 0x000004a2u, 0x0003003eu, 0x0000048eu, 0x000004a4u, 0x0003003eu, 0x000003f0u, 0x000004a4u, 0x0003003eu, 0x00000491u, 0x000004a0u, 0x0003003eu, 0x000003ecu, 0x000004a4u, 0x0003003eu, 0x000003ebu, 0x000004a0u, 0x00070050u, 0x00000007u, 0x00000428u, 0x000003c1u, 0x000003c1u, 0x000003c1u, 0x000003c1u, 0x00050082u, 0x00000007u, 0x00000429u, 0x000003cbu, 0x00000428u, 0x00050084u, 0x00000006u, 0x0000042du, 0x00000240u, 0x00000370u, 0x0003003eu, 0x000003f3u, 0x00000429u, 0x0003003eu, 0x000003f4u, 0x00000381u, 0x0003003eu, 0x000003f5u, 0x0000042du, 0x00070050u, 0x00000007u, 0x000004adu, 0x00000381u, 0x00000381u, 0x00000381u, 0x00000381u, 0x00050098u, 0x00000066u, 0x000004aeu, 0x00000429u, 0x000004adu, 0x00050051u, 0x00000007u, 0x000004afu, 0x000004aeu, 0x00000000u, 0x0003003eu, 0x000004a8u, 0x000004afu, 0x00050051u, 0x00000007u, 0x000004b0u, 0x000004aeu, 0x00000001u, 0x0003003eu, 0x000004a7u, 0x000004b0u, 0x0004007cu, 0x0000006bu, 0x000004b2u, 0x000004afu, 0x0004007cu, 0x00000030u, 0x000004b4u, 0x0000042du, 0x00070050u, 0x0000006bu, 0x000004b5u, 0x000004b4u, 0x000004b4u, 0x000004b4u, 0x000004b4u, 0x00050095u, 0x00000072u, 0x000004b6u, 0x000004b2u, 0x000004b5u, 0x00050051u, 0x0000006bu, 0x000004b7u, 0x000004b6u, 0x00000001u, 0x0003003eu, 0x000004a9u, 0x000004b7u, 0x00050051u, 0x0000006bu, 0x000004b8u, 0x000004b6u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004b9u, 0x000004b8u, 0x0003003eu, 0x000004a8u, 0x000004b9u, 0x0004007cu, 0x00000007u, 0x000004bbu, 0x000004b7u, 0x00050080u, 0x00000007u, 0x000004bdu, 0x000004b0u, 0x000004bbu, 0x0003003eu, 0x000004a7u, 0x000004bdu, 0x0003003eu, 0x000003f6u, 0x000004bdu, 0x0003003eu, 0x000004aau, 0x000004b9u, 0x0003003eu, 0x000003f2u, 0x000004bdu, 0x0003003eu, 0x000003f1u, 0x000004b9u, 0x00050084u, 0x00000006u, 0x00000438u, 0x00000240u, 0x00000378u, 0x00070050u, 0x00000007u, 0x00000439u, 0x00000438u, 0x00000438u, 0x00000438u, 0x00000438u, 0x000500b1u, 0x000000d3u, 0x0000043au, 0x000003cbu, 0x00000439u, 0x000600a9u, 0x00000007u, 0x0000043bu, 0x0000043au, 0x000004a0u, 0x000004b9u, 0x0003003eu, 0x000003f1u, 0x0000043bu, 0x000600a9u, 0x00000007u, 0x00000445u, 0x0000043au, 0x000004a4u, 0x000004bdu, 0x0003003eu, 0x000003f2u, 0x00000445u, 0x000500adu, 0x000000d3u, 0x00000448u, 0x0000048bu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x00000449u, 0x00000448u, 0x000000e2u, 0x00000487u, 0x0003003eu, 0x000003e5u, 0x00000449u, 0x000500b1u, 0x000000d3u, 0x0000044cu, 0x0000048bu, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x0000044du, 0x0000044cu, 0x000000e9u, 0x00000449u, 0x0003003eu, 0x000003e5u, 0x0000044du, 0x000500adu, 0x000000d3u, 0x00000450u, 0x00000445u, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x00000451u, 0x00000450u, 0x000000e2u, 0x0000043bu, 0x0003003eu, 0x000003f1u, 0x00000451u, 0x000500b1u, 0x000000d3u, 0x00000454u, 0x00000445u, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x00000455u, 0x00000454u, 0x000000e9u, 0x00000451u, 0x0003003eu, 0x000003f1u, 0x00000455u, 0x0003003eu, 0x000003f8u, 0x0000044du, 0x000500c3u, 0x00000007u, 0x000004c3u, 0x0000044du, 0x000007ffu, 0x0003003eu, 0x000004c0u, 0x000004c3u, 0x0003003eu, 0x000003f7u, 0x000004c3u, 0x0003003eu, 0x000003fau, 0x00000455u, 0x000500c3u, 0x00000007u, 0x000004c7u, 0x00000455u, 0x000007ffu, 0x0003003eu, 0x000004c4u, 0x000004c7u, 0x0003003eu, 0x000003f9u, 0x000004c7u, 0x000300f7u, 0x0000045bu, 0x00000000u, 0x000400fau, 0x000003bbu, 0x0000045cu, 0x0000045du, 0x000200f8u, 0x0000045cu, 0x0003003eu, 0x000003fbu, 0x000004c3u, 0x0003003eu, 0x000003fcu, 0x000004c7u, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045du, 0x0003003eu, 0x000003fbu, 0x000004c7u, 0x0003003eu, 0x000003fcu, 0x000004c3u, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045bu, 0x00070050u, 0x000000d3u, 0x00000800u, 0x000003bbu, 0x000003bbu, 0x000003bbu, 0x000003bbu, 0x000600a9u, 0x00000007u, 0x00000801u, 0x00000800u, 0x000004c7u, 0x000004c3u, 0x000600a9u, 0x00000007u, 0x00000803u, 0x00000800u, 0x000004c3u, 0x000004c7u, 0x0006000cu, 0x00000007u, 0x00000463u, 0x00000001u, 0x00000005u, 0x00000803u, 0x0006000cu, 0x00000007u, 0x00000465u, 0x00000001u, 0x00000005u, 0x00000801u, 0x0007000cu, 0x00000007u, 0x00000466u, 0x00000001u, 0x0000002au, 0x00000463u, 0x00000465u, 0x0003003eu, 0x000003feu, 0x00000466u, 0x0007004fu, 0x00000020u, 0x000004cbu, 0x00000466u, 0x00000466u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x000004cdu, 0x00000466u, 0x00000466u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x000004ceu, 0x00000001u, 0x0000002au, 0x000004cbu, 0x000004cdu, 0x0003003eu, 0x000004c8u, 0x000004ceu, 0x00050041u, 0x00000014u, 0x000004cfu, 0x000004c8u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000004d0u, 0x000004cfu, 0x00050041u, 0x00000014u, 0x000004d1u, 0x000004c8u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000004d2u, 0x000004d1u, 0x0007000cu, 0x00000006u, 0x000004d3u, 0x00000001u, 0x0000002au, 0x000004d0u, 0x000004d2u, 0x0003003eu, 0x000004c9u, 0x000004d3u, 0x0003003eu, 0x000003fdu, 0x000004d3u, 0x00050084u, 0x00000006u, 0x0000046au, 0x00000112u, 0x00000240u, 0x000500b3u, 0x0000001eu, 0x0000046bu, 0x000004d3u, 0x0000046au, 0x000300f7u, 0x0000046cu, 0x00000000u, 0x000400fau, 0x0000046bu, 0x0000046du, 0x0000046eu, 0x000200f8u, 0x0000046du, 0x0003003eu, 0x00000400u, 0x00000803u, 0x0007004fu, 0x00000020u, 0x000004d7u, 0x00000803u, 0x00000803u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x000004d9u, 0x00000803u, 0x00000803u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x000004dau, 0x00000001u, 0x00000027u, 0x000004d7u, 0x000004d9u, 0x0003003eu, 0x000004d4u, 0x000004dau, 0x00050041u, 0x00000014u, 0x000004dbu, 0x000004d4u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000004dcu, 0x000004dbu, 0x00050041u, 0x00000014u, 0x000004ddu, 0x000004d4u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000004deu, 0x000004ddu, 0x0007000cu, 0x00000006u, 0x000004dfu, 0x00000001u, 0x00000027u, 0x000004dcu, 0x000004deu, 0x0003003eu, 0x000004d5u, 0x000004dfu, 0x0003003eu, 0x00000401u, 0x00000801u, 0x0007004fu, 0x00000020u, 0x000004e3u, 0x00000801u, 0x00000801u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x000004e5u, 0x00000801u, 0x00000801u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x000004e6u, 0x00000001u, 0x0000002au, 0x000004e3u, 0x000004e5u, 0x0003003eu, 0x000004e0u, 0x000004e6u, 0x00050041u, 0x00000014u, 0x000004e7u, 0x000004e0u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000004e8u, 0x000004e7u, 0x00050041u, 0x00000014u, 0x000004e9u, 0x000004e0u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000004eau, 0x000004e9u, 0x0007000cu, 0x00000006u, 0x000004ebu, 0x00000001u, 0x0000002au, 0x000004e8u, 0x000004eau, 0x0003003eu, 0x000004e1u, 0x000004ebu, 0x00050050u, 0x00000020u, 0x00000473u, 0x000004dfu, 0x000004ebu, 0x0003003eu, 0x000003ffu, 0x00000473u, 0x000200f9u, 0x0000046cu, 0x000200f8u, 0x0000046eu, 0x0003003eu, 0x000003ffu, 0x00000121u, 0x000200f9u, 0x0000046cu, 0x000200f8u, 0x0000046cu, 0x000700f5u, 0x00000020u, 0x0000079cu, 0x00000473u, 0x0000046du, 0x00000121u, 0x0000046eu, 0x0003003eu, 0x00000402u, 0x0000079cu, 0x0003003eu, 0x00000397u, 0x0000079cu, 0x00050041u, 0x00000014u, 0x000003d1u, 0x00000397u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000003d2u, 0x000003d1u, 0x00050041u, 0x00000014u, 0x000003d3u, 0x00000263u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000003d4u, 0x000003d3u, 0x0007000cu, 0x00000006u, 0x000003d5u, 0x00000001u, 0x0000002au, 0x000003d2u, 0x000003d4u, 0x0003003eu, 0x000003d1u, 0x000003d5u, 0x00050041u, 0x00000014u, 0x000003d7u, 0x00000397u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x00050041u, 0x00000014u, 0x000003d9u, 0x00000265u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000003dau, 0x000003d9u, 0x0007000cu, 0x00000006u, 0x000003dbu, 0x00000001u, 0x00000027u, 0x000003d8u, 0x000003dau, 0x0003003eu, 0x000003d7u, 0x000003dbu, 0x0004003du, 0x00000006u, 0x000003deu, 0x000003d1u, 0x0004003du, 0x00000006u, 0x000003e0u, 0x000003d7u, 0x000500b3u, 0x0000001eu, 0x000003e1u, 0x000003deu, 0x000003e0u, 0x0003003eu, 0x00000391u, 0x00000358u, 0x0003003eu, 0x00000392u, 0x000003e1u, 0x000200f9u, 0x0000039du, 0x000200f8u, 0x0000039du, 0x000700f5u, 0x0000001eu, 0x0000079du, 0x00000141u, 0x000003b7u, 0x000003e1u, 0x0000046cu, 0x0003003eu, 0x0000039cu, 0x0000079du, 0x0003003eu, 0x00000227u, 0x0000079du, 0x000200f9u, 0x00000238u, 0x000200f8u, 0x00000238u, 0x000700f5u, 0x0000001eu, 0x0000079fu, 0x00000141u, 0x0000022bu, 0x0000079du, 0x0000039du, 0x000200f9u, 0x0000022cu, 0x000200f8u, 0x0000022cu, 0x000700f5u, 0x0000001eu, 0x0000079eu, 0x00000141u, 0x00000223u, 0x0000079fu, 0x00000238u, 0x000300f7u, 0x0000026bu, 0x00000000u, 0x000400fau, 0x0000079eu, 0x0000026au, 0x0000026bu, 0x000200f8u, 0x0000026au, 0x000500c4u, 0x00000030u, 0x0000026du, 0x0000004eu, 0x000001deu, 0x000700f1u, 0x00000030u, 0x0000026eu, 0x00000225u, 0x0000004eu, 0x0000004bu, 0x0000026du, 0x000200f9u, 0x0000026bu, 0x000200f8u, 0x0000026bu, 0x000400e0u, 0x000001bbu, 0x000001bbu, 0x00000226u, 0x0004003du, 0x00000030u, 0x00000270u, 0x00000225u, 0x0003003eu, 0x0000026fu, 0x00000270u, 0x0003003eu, 0x00000271u, 0x0000004bu, 0x000200f9u, 0x00000272u, 0x000200f8u, 0x00000272u, 0x000700f5u, 0x00000030u, 0x000007b5u, 0x0000004bu, 0x0000026bu, 0x000007ecu, 0x00000275u, 0x000700f5u, 0x00000030u, 0x000007a5u, 0x00000270u, 0x0000026bu, 0x00000280u, 0x00000275u, 0x000500abu, 0x0000001eu, 0x00000278u, 0x000007a5u, 0x0000004bu, 0x000400f6u, 0x00000274u, 0x00000275u, 0x00000000u, 0x000400fau, 0x00000278u, 0x00000273u, 0x00000274u, 0x000200f8u, 0x00000273u, 0x0006000cu, 0x00000006u, 0x0000027bu, 0x00000001u, 0x00000049u, 0x000007a5u, 0x0003003eu, 0x00000279u, 0x0000027bu, 0x000500c4u, 0x00000030u, 0x0000027du, 0x0000004eu, 0x0000027bu, 0x000400c8u, 0x00000030u, 0x0000027eu, 0x0000027du, 0x000500c7u, 0x00000030u, 0x00000280u, 0x000007a5u, 0x0000027eu, 0x0003003eu, 0x0000026fu, 0x00000280u, 0x00050084u, 0x00000006u, 0x00000283u, 0x000001d5u, 0x00000229u, 0x00050080u, 0x00000006u, 0x00000285u, 0x00000283u, 0x0000027bu, 0x0004007cu, 0x00000030u, 0x00000286u, 0x00000285u, 0x0003003eu, 0x00000281u, 0x00000286u, 0x0003003eu, 0x00000288u, 0x00000286u, 0x00060041u, 0x000001b4u, 0x000004efu, 0x000001b2u, 0x00000096u, 0x00000286u, 0x0004003du, 0x00000007u, 0x000004f0u, 0x000004efu, 0x0003003eu, 0x000004ecu, 0x000004f0u, 0x00050041u, 0x00000014u, 0x000004f1u, 0x000004ecu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000004f2u, 0x000004f1u, 0x00050041u, 0x00000014u, 0x000004f3u, 0x000004ecu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000004f4u, 0x000004f3u, 0x00050041u, 0x00000014u, 0x000004f5u, 0x000004ecu, 0x000001bbu, 0x0004003du, 0x00000006u, 0x000004f6u, 0x000004f5u, 0x00050041u, 0x00000014u, 0x000004f7u, 0x000004ecu, 0x000001beu, 0x0004003du, 0x00000006u, 0x000004f8u, 0x000004f7u, 0x00070050u, 0x00000036u, 0x000004f9u, 0x000004f2u, 0x000004f4u, 0x000004f6u, 0x000004f8u, 0x0003003eu, 0x000006b6u, 0x000004f2u, 0x0003003eu, 0x000006b7u, 0x000004f4u, 0x0003003eu, 0x000006b8u, 0x000004f6u, 0x0003003eu, 0x000006b9u, 0x000004f8u, 0x0003003eu, 0x0000074bu, 0x000004f2u, 0x0003003eu, 0x0000074cu, 0x000004f4u, 0x0003003eu, 0x0000074du, 0x000004f6u, 0x0003003eu, 0x0000074eu, 0x000004f8u, 0x00050050u, 0x00000020u, 0x00000291u, 0x000004f2u, 0x000004f4u, 0x000500c3u, 0x00000020u, 0x00000293u, 0x00000291u, 0x000007feu, 0x00050050u, 0x00000020u, 0x00000294u, 0x00000240u, 0x00000240u, 0x00050084u, 0x00000020u, 0x00000295u, 0x00000294u, 0x00000293u, 0x0007000cu, 0x00000020u, 0x00000296u, 0x00000001u, 0x0000002au, 0x00000211u, 0x00000295u, 0x0003003eu, 0x0000028bu, 0x00000296u, 0x00050080u, 0x00000006u, 0x0000029bu, 0x000004f6u, 0x00000080u, 0x00050080u, 0x00000006u, 0x0000029eu, 0x000004f8u, 0x00000080u, 0x00050050u, 0x00000020u, 0x0000029fu, 0x0000029bu, 0x0000029eu, 0x000500c3u, 0x00000020u, 0x000002a1u, 0x0000029fu, 0x000007feu, 0x00050084u, 0x00000020u, 0x000002a3u, 0x00000294u, 0x000002a1u, 0x00050082u, 0x00000020u, 0x000002a5u, 0x000002a3u, 0x000007fdu, 0x0007000cu, 0x00000020u, 0x000002a6u, 0x00000001u, 0x00000027u, 0x0000021bu, 0x000002a5u, 0x0003003eu, 0x00000297u, 0x000002a6u, 0x0003003eu, 0x000002a8u, 0x00000286u, 0x00070041u, 0x00000180u, 0x000004fcu, 0x0000017eu, 0x00000096u, 0x00000286u, 0x00000096u, 0x0004003du, 0x00000006u, 0x000004fdu, 0x000004fcu, 0x00070041u, 0x00000180u, 0x000004ffu, 0x0000017eu, 0x00000096u, 0x00000286u, 0x000000aau, 0x0004003du, 0x00000006u, 0x00000500u, 0x000004ffu, 0x00070041u, 0x00000180u, 0x00000502u, 0x0000017eu, 0x00000096u, 0x00000286u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000503u, 0x00000502u, 0x00070041u, 0x0000018au, 0x00000505u, 0x0000017eu, 0x00000096u, 0x00000286u, 0x00000080u, 0x0004003du, 0x00000178u, 0x00000506u, 0x00000505u, 0x00040072u, 0x00000006u, 0x00000507u, 0x00000506u, 0x00070041u, 0x0000018au, 0x00000509u, 0x0000017eu, 0x00000096u, 0x00000286u, 0x00000086u, 0x0004003du, 0x00000178u, 0x0000050au, 0x00000509u, 0x00040072u, 0x00000006u, 0x0000050bu, 0x0000050au, 0x00070041u, 0x00000180u, 0x0000050du, 0x0000017eu, 0x00000096u, 0x00000286u, 0x00000094u, 0x0004003du, 0x00000006u, 0x0000050eu, 0x0000050du, 0x00070041u, 0x00000180u, 0x00000510u, 0x0000017eu, 0x00000096u, 0x00000286u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000511u, 0x00000510u, 0x00070041u, 0x00000180u, 0x00000513u, 0x0000017eu, 0x00000096u, 0x00000286u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x00000514u, 0x00000513u, 0x00070041u, 0x0000018au, 0x00000516u, 0x0000017eu, 0x00000096u, 0x00000286u, 0x00000136u, 0x0004003du, 0x00000178u, 0x00000517u, 0x00000516u, 0x00040072u, 0x00000006u, 0x00000518u, 0x00000517u, 0x00070041u, 0x000001a0u, 0x0000051au, 0x0000017eu, 0x00000096u, 0x00000286u, 0x00000144u, 0x0004003du, 0x00000179u, 0x0000051bu, 0x0000051au, 0x00040071u, 0x00000030u, 0x0000051cu, 0x0000051bu, 0x0004007cu, 0x00000006u, 0x0000051du, 0x0000051cu, 0x00070041u, 0x000001a0u, 0x0000051fu, 0x0000017eu, 0x00000096u, 0x00000286u, 0x000001a6u, 0x0004003du, 0x00000179u, 0x00000520u, 0x0000051fu, 0x00040071u, 0x00000030u, 0x00000521u, 0x00000520u, 0x0004007cu, 0x00000006u, 0x00000522u, 0x00000521u, 0x000e0050u, 0x0000001cu, 0x00000523u, 0x000004fdu, 0x00000500u, 0x00000503u, 0x00000507u, 0x0000050bu, 0x0000050eu, 0x00000511u, 0x00000514u, 0x00000518u, 0x0000051du, 0x00000522u, 0x0003003eu, 0x00000694u, 0x000004fdu, 0x0003003eu, 0x00000695u, 0x00000500u, 0x0003003eu, 0x00000696u, 0x00000503u, 0x0003003eu, 0x00000697u, 0x00000507u, 0x0003003eu, 0x00000698u, 0x0000050bu, 0x0003003eu, 0x00000699u, 0x0000050eu, 0x0003003eu, 0x0000069au, 0x00000511u, 0x0003003eu, 0x0000069bu, 0x00000514u, 0x0003003eu, 0x0000069cu, 0x00000518u, 0x0003003eu, 0x0000069du, 0x0000051du, 0x0003003eu, 0x0000069eu, 0x00000522u, 0x0003003eu, 0x00000753u, 0x000004fdu, 0x0003003eu, 0x00000754u, 0x00000500u, 0x0003003eu, 0x00000755u, 0x00000503u, 0x0003003eu, 0x00000756u, 0x00000507u, 0x0003003eu, 0x00000757u, 0x0000050bu, 0x0003003eu, 0x00000758u, 0x0000050eu, 0x0003003eu, 0x00000759u, 0x00000511u, 0x0003003eu, 0x0000075au, 0x00000514u, 0x0003003eu, 0x0000075bu, 0x00000518u, 0x0003003eu, 0x0000075cu, 0x0000051du, 0x0003003eu, 0x0000075du, 0x00000522u, 0x0003003eu, 0x00000775u, 0x000004fdu, 0x0003003eu, 0x00000776u, 0x00000500u, 0x0003003eu, 0x00000777u, 0x00000503u, 0x0003003eu, 0x00000778u, 0x00000507u, 0x0003003eu, 0x00000779u, 0x0000050bu, 0x0003003eu, 0x0000077au, 0x0000050eu, 0x0003003eu, 0x0000077bu, 0x00000511u, 0x0003003eu, 0x0000077cu, 0x00000514u, 0x0003003eu, 0x0000077du, 0x00000518u, 0x0003003eu, 0x0000077eu, 0x0000051du, 0x0003003eu, 0x000002adu, 0x00000296u, 0x0003003eu, 0x000002afu, 0x000002a6u, 0x0003003eu, 0x000002b1u, 0x00000240u, 0x0003003eu, 0x00000524u, 0x00000141u, 0x000300f7u, 0x00000530u, 0x00000000u, 0x000300fbu, 0x0000004bu, 0x00000531u, 0x000200f8u, 0x00000531u, 0x00050041u, 0x00000014u, 0x00000532u, 0x000002adu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000533u, 0x00000532u, 0x00050084u, 0x00000006u, 0x00000534u, 0x00000533u, 0x00000086u, 0x0003003eu, 0x00000526u, 0x00000534u, 0x00050041u, 0x00000014u, 0x00000535u, 0x000002afu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000536u, 0x00000535u, 0x00050084u, 0x00000006u, 0x00000537u, 0x00000536u, 0x00000086u, 0x00050080u, 0x00000006u, 0x00000538u, 0x00000537u, 0x00000080u, 0x0003003eu, 0x00000527u, 0x00000538u, 0x00050084u, 0x00000006u, 0x0000053du, 0x00000240u, 0x00000507u, 0x0007000cu, 0x00000006u, 0x0000053eu, 0x00000001u, 0x0000002au, 0x00000534u, 0x0000053du, 0x0003003eu, 0x00000526u, 0x0000053eu, 0x00050084u, 0x00000006u, 0x00000543u, 0x00000240u, 0x00000518u, 0x00050082u, 0x00000006u, 0x00000544u, 0x00000543u, 0x000000aau, 0x0007000cu, 0x00000006u, 0x00000545u, 0x00000001u, 0x00000027u, 0x00000538u, 0x00000544u, 0x0003003eu, 0x00000527u, 0x00000545u, 0x000500b1u, 0x0000001eu, 0x00000548u, 0x00000545u, 0x0000053eu, 0x000300f7u, 0x00000549u, 0x00000000u, 0x000400fau, 0x00000548u, 0x0000054au, 0x00000549u, 0x000200f8u, 0x0000054au, 0x0003003eu, 0x00000524u, 0x00000358u, 0x0003003eu, 0x00000525u, 0x00000141u, 0x000200f9u, 0x00000530u, 0x000200f8u, 0x00000549u, 0x000500c7u, 0x00000006u, 0x0000054du, 0x0000051du, 0x000000aau, 0x000500abu, 0x0000001eu, 0x0000054eu, 0x0000054du, 0x00000096u, 0x0003003eu, 0x00000528u, 0x0000054eu, 0x00050084u, 0x00000006u, 0x00000554u, 0x0000050bu, 0x00000240u, 0x00050050u, 0x00000020u, 0x00000555u, 0x00000554u, 0x00000554u, 0x00050080u, 0x00000020u, 0x00000556u, 0x00000555u, 0x00000150u, 0x00050050u, 0x00000020u, 0x00000558u, 0x0000053eu, 0x0000053eu, 0x00050050u, 0x00000020u, 0x0000055au, 0x00000545u, 0x00000545u, 0x0008000cu, 0x00000020u, 0x0000055bu, 0x00000001u, 0x0000002du, 0x00000556u, 0x00000558u, 0x0000055au, 0x00050051u, 0x00000006u, 0x0000055cu, 0x0000055bu, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000055du, 0x0000055bu, 0x00000001u, 0x00070050u, 0x00000007u, 0x0000055eu, 0x0000053eu, 0x00000545u, 0x0000055cu, 0x0000055du, 0x0003003eu, 0x00000529u, 0x0000055eu, 0x000e0050u, 0x0000001cu, 0x00000793u, 0x000004fdu, 0x00000500u, 0x00000503u, 0x00000507u, 0x0000050bu, 0x0000050eu, 0x00000511u, 0x00000514u, 0x00000518u, 0x0000051du, 0x0000068bu, 0x0003003eu, 0x00000683u, 0x000004fdu, 0x0003003eu, 0x00000684u, 0x00000500u, 0x0003003eu, 0x00000685u, 0x00000503u, 0x0003003eu, 0x00000686u, 0x00000507u, 0x0003003eu, 0x00000687u, 0x0000050bu, 0x0003003eu, 0x00000688u, 0x0000050eu, 0x0003003eu, 0x00000689u, 0x00000511u, 0x0003003eu, 0x0000068au, 0x00000514u, 0x0003003eu, 0x0000052cu, 0x0000055eu, 0x0003003eu, 0x0000052du, 0x0000054eu, 0x0003003eu, 0x0000052eu, 0x00000240u, 0x000500c7u, 0x00000006u, 0x00000598u, 0x00000507u, 0x00000083u, 0x0003003eu, 0x00000576u, 0x00000598u, 0x0003003eu, 0x00000577u, 0x0000050bu, 0x00050084u, 0x00000006u, 0x0000059du, 0x00000598u, 0x00000240u, 0x0003003eu, 0x00000576u, 0x0000059du, 0x0003003eu, 0x00000577u, 0x00000554u, 0x00070050u, 0x00000007u, 0x000005a3u, 0x0000059du, 0x0000059du, 0x0000059du, 0x0000059du, 0x00050082u, 0x00000007u, 0x000005a4u, 0x0000055eu, 0x000005a3u, 0x00050084u, 0x00000006u, 0x000005a8u, 0x00000240u, 0x000004fdu, 0x0003003eu, 0x0000057au, 0x000005a4u, 0x0003003eu, 0x0000057bu, 0x0000050eu, 0x0003003eu, 0x0000057cu, 0x000005a8u, 0x00070050u, 0x00000007u, 0x0000060eu, 0x0000050eu, 0x0000050eu, 0x0000050eu, 0x0000050eu, 0x00050098u, 0x00000066u, 0x0000060fu, 0x000005a4u, 0x0000060eu, 0x00050051u, 0x00000007u, 0x00000610u, 0x0000060fu, 0x00000000u, 0x0003003eu, 0x00000609u, 0x00000610u, 0x00050051u, 0x00000007u, 0x00000611u, 0x0000060fu, 0x00000001u, 0x0003003eu, 0x00000608u, 0x00000611u, 0x0004007cu, 0x0000006bu, 0x00000613u, 0x00000610u, 0x0004007cu, 0x00000030u, 0x00000615u, 0x000005a8u, 0x00070050u, 0x0000006bu, 0x00000616u, 0x00000615u, 0x00000615u, 0x00000615u, 0x00000615u, 0x00050095u, 0x00000072u, 0x00000617u, 0x00000613u, 0x00000616u, 0x00050051u, 0x0000006bu, 0x00000618u, 0x00000617u, 0x00000001u, 0x0003003eu, 0x0000060au, 0x00000618u, 0x00050051u, 0x0000006bu, 0x00000619u, 0x00000617u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000061au, 0x00000619u, 0x0003003eu, 0x00000609u, 0x0000061au, 0x0004007cu, 0x00000007u, 0x0000061cu, 0x00000618u, 0x00050080u, 0x00000007u, 0x0000061eu, 0x00000611u, 0x0000061cu, 0x0003003eu, 0x00000608u, 0x0000061eu, 0x0003003eu, 0x0000057du, 0x0000061eu, 0x0003003eu, 0x0000060bu, 0x0000061au, 0x0003003eu, 0x00000579u, 0x0000061eu, 0x0003003eu, 0x00000578u, 0x0000061au, 0x00050084u, 0x00000006u, 0x000005b4u, 0x00000240u, 0x00000500u, 0x0003003eu, 0x00000580u, 0x000005a4u, 0x0003003eu, 0x00000581u, 0x00000511u, 0x0003003eu, 0x00000582u, 0x000005b4u, 0x00070050u, 0x00000007u, 0x00000627u, 0x00000511u, 0x00000511u, 0x00000511u, 0x00000511u, 0x00050098u, 0x00000066u, 0x00000628u, 0x000005a4u, 0x00000627u, 0x00050051u, 0x00000007u, 0x00000629u, 0x00000628u, 0x00000000u, 0x0003003eu, 0x00000622u, 0x00000629u, 0x00050051u, 0x00000007u, 0x0000062au, 0x00000628u, 0x00000001u, 0x0003003eu, 0x00000621u, 0x0000062au, 0x0004007cu, 0x0000006bu, 0x0000062cu, 0x00000629u, 0x0004007cu, 0x00000030u, 0x0000062eu, 0x000005b4u, 0x00070050u, 0x0000006bu, 0x0000062fu, 0x0000062eu, 0x0000062eu, 0x0000062eu, 0x0000062eu, 0x00050095u, 0x00000072u, 0x00000630u, 0x0000062cu, 0x0000062fu, 0x00050051u, 0x0000006bu, 0x00000631u, 0x00000630u, 0x00000001u, 0x0003003eu, 0x00000623u, 0x00000631u, 0x00050051u, 0x0000006bu, 0x00000632u, 0x00000630u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000633u, 0x00000632u, 0x0003003eu, 0x00000622u, 0x00000633u, 0x0004007cu, 0x00000007u, 0x00000635u, 0x00000631u, 0x00050080u, 0x00000007u, 0x00000637u, 0x0000062au, 0x00000635u, 0x0003003eu, 0x00000621u, 0x00000637u, 0x0003003eu, 0x00000583u, 0x00000637u, 0x0003003eu, 0x00000624u, 0x00000633u, 0x0003003eu, 0x0000057fu, 0x00000637u, 0x0003003eu, 0x0000057eu, 0x00000633u, 0x00070050u, 0x00000007u, 0x000005bbu, 0x00000554u, 0x00000554u, 0x00000554u, 0x00000554u, 0x00050082u, 0x00000007u, 0x000005bcu, 0x0000055eu, 0x000005bbu, 0x00050084u, 0x00000006u, 0x000005c0u, 0x00000240u, 0x00000503u, 0x0003003eu, 0x00000586u, 0x000005bcu, 0x0003003eu, 0x00000587u, 0x00000514u, 0x0003003eu, 0x00000588u, 0x000005c0u, 0x00070050u, 0x00000007u, 0x00000640u, 0x00000514u, 0x00000514u, 0x00000514u, 0x00000514u, 0x00050098u, 0x00000066u, 0x00000641u, 0x000005bcu, 0x00000640u, 0x00050051u, 0x00000007u, 0x00000642u, 0x00000641u, 0x00000000u, 0x0003003eu, 0x0000063bu, 0x00000642u, 0x00050051u, 0x00000007u, 0x00000643u, 0x00000641u, 0x00000001u, 0x0003003eu, 0x0000063au, 0x00000643u, 0x0004007cu, 0x0000006bu, 0x00000645u, 0x00000642u, 0x0004007cu, 0x00000030u, 0x00000647u, 0x000005c0u, 0x00070050u, 0x0000006bu, 0x00000648u, 0x00000647u, 0x00000647u, 0x00000647u, 0x00000647u, 0x00050095u, 0x00000072u, 0x00000649u, 0x00000645u, 0x00000648u, 0x00050051u, 0x0000006bu, 0x0000064au, 0x00000649u, 0x00000001u, 0x0003003eu, 0x0000063cu, 0x0000064au, 0x00050051u, 0x0000006bu, 0x0000064bu, 0x00000649u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000064cu, 0x0000064bu, 0x0003003eu, 0x0000063bu, 0x0000064cu, 0x0004007cu, 0x00000007u, 0x0000064eu, 0x0000064au, 0x00050080u, 0x00000007u, 0x00000650u, 0x00000643u, 0x0000064eu, 0x0003003eu, 0x0000063au, 0x00000650u, 0x0003003eu, 0x00000589u, 0x00000650u, 0x0003003eu, 0x0000063du, 0x0000064cu, 0x0003003eu, 0x00000585u, 0x00000650u, 0x0003003eu, 0x00000584u, 0x0000064cu, 0x00050084u, 0x00000006u, 0x000005cbu, 0x00000240u, 0x0000050bu, 0x00070050u, 0x00000007u, 0x000005ccu, 0x000005cbu, 0x000005cbu, 0x000005cbu, 0x000005cbu, 0x000500b1u, 0x000000d3u, 0x000005cdu, 0x0000055eu, 0x000005ccu, 0x000600a9u, 0x00000007u, 0x000005ceu, 0x000005cdu, 0x00000633u, 0x0000064cu, 0x0003003eu, 0x00000584u, 0x000005ceu, 0x000600a9u, 0x00000007u, 0x000005d8u, 0x000005cdu, 0x00000637u, 0x00000650u, 0x0003003eu, 0x00000585u, 0x000005d8u, 0x000500adu, 0x000000d3u, 0x000005dbu, 0x0000061eu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000005dcu, 0x000005dbu, 0x000000e2u, 0x0000061au, 0x0003003eu, 0x00000578u, 0x000005dcu, 0x000500b1u, 0x000000d3u, 0x000005dfu, 0x0000061eu, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x000005e0u, 0x000005dfu, 0x000000e9u, 0x000005dcu, 0x0003003eu, 0x00000578u, 0x000005e0u, 0x000500adu, 0x000000d3u, 0x000005e3u, 0x000005d8u, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000005e4u, 0x000005e3u, 0x000000e2u, 0x000005ceu, 0x0003003eu, 0x00000584u, 0x000005e4u, 0x000500b1u, 0x000000d3u, 0x000005e7u, 0x000005d8u, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x000005e8u, 0x000005e7u, 0x000000e9u, 0x000005e4u, 0x0003003eu, 0x00000584u, 0x000005e8u, 0x0003003eu, 0x0000058bu, 0x000005e0u, 0x000500c3u, 0x00000007u, 0x00000656u, 0x000005e0u, 0x000007ffu, 0x0003003eu, 0x00000653u, 0x00000656u, 0x0003003eu, 0x0000058au, 0x00000656u, 0x0003003eu, 0x0000058du, 0x000005e8u, 0x000500c3u, 0x00000007u, 0x0000065au, 0x000005e8u, 0x000007ffu, 0x0003003eu, 0x00000657u, 0x0000065au, 0x0003003eu, 0x0000058cu, 0x0000065au, 0x000300f7u, 0x000005eeu, 0x00000000u, 0x000400fau, 0x0000054eu, 0x000005efu, 0x000005f0u, 0x000200f8u, 0x000005efu, 0x0003003eu, 0x0000058eu, 0x00000656u, 0x0003003eu, 0x0000058fu, 0x0000065au, 0x000200f9u, 0x000005eeu, 0x000200f8u, 0x000005f0u, 0x0003003eu, 0x0000058eu, 0x0000065au, 0x0003003eu, 0x0000058fu, 0x00000656u, 0x000200f9u, 0x000005eeu, 0x000200f8u, 0x000005eeu, 0x00070050u, 0x000000d3u, 0x00000804u, 0x0000054eu, 0x0000054eu, 0x0000054eu, 0x0000054eu, 0x000600a9u, 0x00000007u, 0x00000805u, 0x00000804u, 0x0000065au, 0x00000656u, 0x000600a9u, 0x00000007u, 0x00000807u, 0x00000804u, 0x00000656u, 0x0000065au, 0x0006000cu, 0x00000007u, 0x000005f6u, 0x00000001u, 0x00000005u, 0x00000807u, 0x0006000cu, 0x00000007u, 0x000005f8u, 0x00000001u, 0x00000005u, 0x00000805u, 0x0007000cu, 0x00000007u, 0x000005f9u, 0x00000001u, 0x0000002au, 0x000005f6u, 0x000005f8u, 0x0003003eu, 0x00000591u, 0x000005f9u, 0x0007004fu, 0x00000020u, 0x0000065eu, 0x000005f9u, 0x000005f9u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000660u, 0x000005f9u, 0x000005f9u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000661u, 0x00000001u, 0x0000002au, 0x0000065eu, 0x00000660u, 0x0003003eu, 0x0000065bu, 0x00000661u, 0x00050041u, 0x00000014u, 0x00000662u, 0x0000065bu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000663u, 0x00000662u, 0x00050041u, 0x00000014u, 0x00000664u, 0x0000065bu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000665u, 0x00000664u, 0x0007000cu, 0x00000006u, 0x00000666u, 0x00000001u, 0x0000002au, 0x00000663u, 0x00000665u, 0x0003003eu, 0x0000065cu, 0x00000666u, 0x0003003eu, 0x00000590u, 0x00000666u, 0x00050084u, 0x00000006u, 0x000005fdu, 0x00000112u, 0x00000240u, 0x000500b3u, 0x0000001eu, 0x000005feu, 0x00000666u, 0x000005fdu, 0x000300f7u, 0x000005ffu, 0x00000000u, 0x000400fau, 0x000005feu, 0x00000600u, 0x00000601u, 0x000200f8u, 0x00000600u, 0x0003003eu, 0x00000593u, 0x00000807u, 0x0007004fu, 0x00000020u, 0x0000066au, 0x00000807u, 0x00000807u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x0000066cu, 0x00000807u, 0x00000807u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x0000066du, 0x00000001u, 0x00000027u, 0x0000066au, 0x0000066cu, 0x0003003eu, 0x00000667u, 0x0000066du, 0x00050041u, 0x00000014u, 0x0000066eu, 0x00000667u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000066fu, 0x0000066eu, 0x00050041u, 0x00000014u, 0x00000670u, 0x00000667u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000671u, 0x00000670u, 0x0007000cu, 0x00000006u, 0x00000672u, 0x00000001u, 0x00000027u, 0x0000066fu, 0x00000671u, 0x0003003eu, 0x00000668u, 0x00000672u, 0x0003003eu, 0x00000594u, 0x00000805u, 0x0007004fu, 0x00000020u, 0x00000676u, 0x00000805u, 0x00000805u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000678u, 0x00000805u, 0x00000805u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000679u, 0x00000001u, 0x0000002au, 0x00000676u, 0x00000678u, 0x0003003eu, 0x00000673u, 0x00000679u, 0x00050041u, 0x00000014u, 0x0000067au, 0x00000673u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000067bu, 0x0000067au, 0x00050041u, 0x00000014u, 0x0000067cu, 0x00000673u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000067du, 0x0000067cu, 0x0007000cu, 0x00000006u, 0x0000067eu, 0x00000001u, 0x0000002au, 0x0000067bu, 0x0000067du, 0x0003003eu, 0x00000674u, 0x0000067eu, 0x00050050u, 0x00000020u, 0x00000606u, 0x00000672u, 0x0000067eu, 0x0003003eu, 0x00000592u, 0x00000606u, 0x000200f9u, 0x000005ffu, 0x000200f8u, 0x00000601u, 0x0003003eu, 0x00000592u, 0x00000121u, 0x000200f9u, 0x000005ffu, 0x000200f8u, 0x000005ffu, 0x000700f5u, 0x00000020u, 0x000007d8u, 0x00000606u, 0x00000600u, 0x00000121u, 0x00000601u, 0x0003003eu, 0x00000595u, 0x000007d8u, 0x0003003eu, 0x0000052au, 0x000007d8u, 0x00050041u, 0x00000014u, 0x00000564u, 0x0000052au, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000565u, 0x00000564u, 0x00050041u, 0x00000014u, 0x00000566u, 0x000002adu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000567u, 0x00000566u, 0x0007000cu, 0x00000006u, 0x00000568u, 0x00000001u, 0x0000002au, 0x00000565u, 0x00000567u, 0x0003003eu, 0x00000564u, 0x00000568u, 0x00050041u, 0x00000014u, 0x0000056au, 0x0000052au, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000056bu, 0x0000056au, 0x00050041u, 0x00000014u, 0x0000056cu, 0x000002afu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000056du, 0x0000056cu, 0x0007000cu, 0x00000006u, 0x0000056eu, 0x00000001u, 0x00000027u, 0x0000056bu, 0x0000056du, 0x0003003eu, 0x0000056au, 0x0000056eu, 0x0004003du, 0x00000006u, 0x00000571u, 0x00000564u, 0x0004003du, 0x00000006u, 0x00000573u, 0x0000056au, 0x000500b3u, 0x0000001eu, 0x00000574u, 0x00000571u, 0x00000573u, 0x0003003eu, 0x00000524u, 0x00000358u, 0x0003003eu, 0x00000525u, 0x00000574u, 0x000200f9u, 0x00000530u, 0x000200f8u, 0x00000530u, 0x000700f5u, 0x0000001eu, 0x000007d9u, 0x00000141u, 0x0000054au, 0x00000574u, 0x000005ffu, 0x0003003eu, 0x0000052fu, 0x000007d9u, 0x000300f7u, 0x000002b4u, 0x00000000u, 0x000400fau, 0x000007d9u, 0x000002b3u, 0x000002b4u, 0x000200f8u, 0x000002b3u, 0x000500c5u, 0x00000030u, 0x000002b8u, 0x000007b5u, 0x0000027du, 0x0003003eu, 0x00000271u, 0x000002b8u, 0x000200f9u, 0x000002b4u, 0x000200f8u, 0x000002b4u, 0x000700f5u, 0x00000030u, 0x000007ecu, 0x000007b5u, 0x00000530u, 0x000002b8u, 0x000002b3u, 0x000200f9u, 0x00000275u, 0x000200f8u, 0x00000275u, 0x000200f9u, 0x00000272u, 0x000200f8u, 0x00000274u, 0x00050084u, 0x00000006u, 0x000002c0u, 0x000001f6u, 0x000002bfu, 0x00050080u, 0x00000006u, 0x000002c2u, 0x000002c0u, 0x000001d5u, 0x00060041u, 0x000001c9u, 0x000002c4u, 0x000002bcu, 0x00000096u, 0x000002c2u, 0x0003003eu, 0x000002c4u, 0x000007b5u, 0x000500abu, 0x0000001eu, 0x000002c6u, 0x000007b5u, 0x0000004bu, 0x000300f7u, 0x000002c8u, 0x00000000u, 0x000400fau, 0x000002c6u, 0x000002c7u, 0x000002d2u, 0x000200f8u, 0x000002c7u, 0x00060041u, 0x000001c9u, 0x000002ceu, 0x000002ccu, 0x00000096u, 0x000001f6u, 0x000500c4u, 0x00000030u, 0x000002d0u, 0x0000004eu, 0x000001d5u, 0x000700f1u, 0x00000030u, 0x000002d1u, 0x000002ceu, 0x0000004eu, 0x0000004bu, 0x000002d0u, 0x000200f9u, 0x000002c8u, 0x000200f8u, 0x000002d2u, 0x00060041u, 0x000001c9u, 0x000002d4u, 0x000002ccu, 0x00000096u, 0x000001f6u, 0x000500c4u, 0x00000030u, 0x000002d6u, 0x0000004eu, 0x000001d5u, 0x000400c8u, 0x00000030u, 0x000002d7u, 0x000002d6u, 0x000700f0u, 0x00000030u, 0x000002d8u, 0x000002d4u, 0x0000004eu, 0x0000004bu, 0x000002d7u, 0x000200f9u, 0x000002c8u, 0x000200f8u, 0x000002c8u, 0x000400cdu, 0x00000006u, 0x000002dbu, 0x000007b5u, 0x0004007cu, 0x00000030u, 0x000002dcu, 0x000002dbu, 0x0003003eu, 0x000002d9u, 0x000002dcu, 0x0003003eu, 0x000002ddu, 0x0000004bu, 0x000500abu, 0x0000001eu, 0x000002dfu, 0x000002dcu, 0x0000004bu, 0x000300f7u, 0x000002e1u, 0x00000000u, 0x000400fau, 0x000002dfu, 0x000002e0u, 0x000002e1u, 0x000200f8u, 0x000002e0u, 0x00070041u, 0x000001c9u, 0x000002e2u, 0x000001c7u, 0x00000096u, 0x00000096u, 0x000001beu, 0x000700eau, 0x00000030u, 0x000002e4u, 0x000002e2u, 0x0000004eu, 0x0000004bu, 0x000002dcu, 0x0003003eu, 0x000002ddu, 0x000002e4u, 0x000200f9u, 0x000002e1u, 0x000200f8u, 0x000002e1u, 0x000700f5u, 0x00000030u, 0x000007bcu, 0x0000004bu, 0x000002c8u, 0x000002e4u, 0x000002e0u, 0x000300f7u, 0x000002e8u, 0x00000000u, 0x000400fau, 0x000002dfu, 0x000002e7u, 0x000002e8u, 0x000200f8u, 0x000002e7u, 0x00060041u, 0x000001c9u, 0x000002f2u, 0x000002ecu, 0x00000096u, 0x000002c2u, 0x0003003eu, 0x000002f2u, 0x000007bcu, 0x000200f9u, 0x000002e8u, 0x000200f8u, 0x000002e8u, 0x0003003eu, 0x000002f3u, 0x000007b5u, 0x000200f9u, 0x000002f5u, 0x000200f8u, 0x000002f5u, 0x000700f5u, 0x00000030u, 0x000007c3u, 0x000007bcu, 0x000002e8u, 0x000007f0u, 0x000002f8u, 0x000700f5u, 0x00000030u, 0x000007bfu, 0x000007b5u, 0x000002e8u, 0x00000303u, 0x000002f8u, 0x000500abu, 0x0000001eu, 0x000002fbu, 0x000007bfu, 0x0000004bu, 0x000400f6u, 0x000002f7u, 0x000002f8u, 0x00000000u, 0x000400fau, 0x000002fbu, 0x000002f6u, 0x000002f7u, 0x000200f8u, 0x000002f6u, 0x0006000cu, 0x00000006u, 0x000002feu, 0x00000001u, 0x00000049u, 0x000007bfu, 0x0003003eu, 0x000002fcu, 0x000002feu, 0x000500c4u, 0x00000030u, 0x00000300u, 0x0000004eu, 0x000002feu, 0x000400c8u, 0x00000030u, 0x00000301u, 0x00000300u, 0x000500c7u, 0x00000030u, 0x00000303u, 0x000007bfu, 0x00000301u, 0x0003003eu, 0x000002f3u, 0x00000303u, 0x00050084u, 0x00000006u, 0x00000306u, 0x000001d5u, 0x00000229u, 0x00050080u, 0x00000006u, 0x00000308u, 0x00000306u, 0x000002feu, 0x0003003eu, 0x00000304u, 0x00000308u, 0x000500c7u, 0x00000030u, 0x0000030cu, 0x000007b5u, 0x00000300u, 0x000500abu, 0x0000001eu, 0x0000030du, 0x0000030cu, 0x0000004bu, 0x000300f7u, 0x0000030fu, 0x00000000u, 0x000400fau, 0x0000030du, 0x0000030eu, 0x0000030fu, 0x000200f8u, 0x0000030eu, 0x00080041u, 0x000001a0u, 0x0000031au, 0x00000318u, 0x00000096u, 0x00000308u, 0x00000096u, 0x0000004bu, 0x0004003du, 0x00000179u, 0x0000031bu, 0x0000031au, 0x00040071u, 0x00000030u, 0x0000031cu, 0x0000031bu, 0x0003003eu, 0x00000310u, 0x0000031cu, 0x0003003eu, 0x0000031eu, 0x0000031cu, 0x00070041u, 0x000001c9u, 0x00000681u, 0x000001c7u, 0x00000096u, 0x0000031cu, 0x0000004bu, 0x000700eau, 0x00000030u, 0x00000682u, 0x00000681u, 0x0000004eu, 0x0000004bu, 0x0000004eu, 0x0003003eu, 0x0000067fu, 0x00000682u, 0x0003003eu, 0x0000031du, 0x00000682u, 0x00050084u, 0x00000030u, 0x00000329u, 0x00000327u, 0x0000031cu, 0x00050080u, 0x00000030u, 0x0000032au, 0x00000682u, 0x00000329u, 0x0004003du, 0x00000006u, 0x0000032cu, 0x000001f4u, 0x0004007cu, 0x00000030u, 0x0000032du, 0x0000032cu, 0x0004003du, 0x00000006u, 0x0000032fu, 0x000001eeu, 0x0004007cu, 0x00000030u, 0x00000330u, 0x0000032fu, 0x0004007cu, 0x00000030u, 0x00000333u, 0x00000308u, 0x00070050u, 0x0000006bu, 0x00000334u, 0x0000032du, 0x00000330u, 0x000007c3u, 0x00000333u, 0x00060041u, 0x00000335u, 0x00000336u, 0x00000324u, 0x00000096u, 0x0000032au, 0x0003003eu, 0x00000336u, 0x00000334u, 0x00050080u, 0x00000030u, 0x00000338u, 0x000007c3u, 0x000000aau, 0x0003003eu, 0x000002ddu, 0x00000338u, 0x000200f9u, 0x0000030fu, 0x000200f8u, 0x0000030fu, 0x000700f5u, 0x00000030u, 0x000007f0u, 0x000007c3u, 0x000002f6u, 0x00000338u, 0x0000030eu, 0x000200f9u, 0x000002f8u, 0x000200f8u, 0x000002f8u, 0x000200f9u, 0x000002f5u, 0x000200f8u, 0x000002f7u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x0000003fu, 0x0000000au, 0x000500c3u, 0x00000007u, 0x00000042u, 0x0000003fu, 0x000007ffu, 0x000200feu, 0x00000042u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x00000028u, 0x00000045u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000046u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000047u, 0x00000046u, 0x00000046u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000048u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000049u, 0x00000048u, 0x00000048u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x0000004au, 0x00000001u, 0x00000027u, 0x00000047u, 0x00000049u, 0x0003003eu, 0x00000045u, 0x0000004au, 0x00050041u, 0x00000014u, 0x0000004cu, 0x00000045u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000004du, 0x0000004cu, 0x00050041u, 0x00000014u, 0x0000004fu, 0x00000045u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000050u, 0x0000004fu, 0x0007000cu, 0x00000006u, 0x00000051u, 0x00000001u, 0x00000027u, 0x0000004du, 0x00000050u, 0x000200feu, 0x00000051u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x00000028u, 0x00000054u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000055u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000056u, 0x00000055u, 0x00000055u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000057u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000058u, 0x00000057u, 0x00000057u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000059u, 0x00000001u, 0x0000002au, 0x00000056u, 0x00000058u, 0x0003003eu, 0x00000054u, 0x00000059u, 0x00050041u, 0x00000014u, 0x0000005au, 0x00000054u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000005bu, 0x0000005au, 0x00050041u, 0x00000014u, 0x0000005cu, 0x00000054u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000005du, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x0000005eu, 0x00000001u, 0x0000002au, 0x0000005bu, 0x0000005du, 0x000200feu, 0x0000005eu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000064u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000065u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x00000071u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000061u, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000062u, 0x00000017u, 0x00070050u, 0x00000007u, 0x00000063u, 0x00000062u, 0x00000062u, 0x00000062u, 0x00000062u, 0x00050098u, 0x00000066u, 0x00000067u, 0x00000061u, 0x00000063u, 0x00050051u, 0x00000007u, 0x00000068u, 0x00000067u, 0x00000000u, 0x0003003eu, 0x00000065u, 0x00000068u, 0x00050051u, 0x00000007u, 0x00000069u, 0x00000067u, 0x00000001u, 0x0003003eu, 0x00000064u, 0x00000069u, 0x0004007cu, 0x0000006bu, 0x0000006cu, 0x00000068u, 0x0004003du, 0x00000006u, 0x0000006du, 0x00000018u, 0x0004007cu, 0x00000030u, 0x0000006eu, 0x0000006du, 0x00070050u, 0x0000006bu, 0x0000006fu, 0x0000006eu, 0x0000006eu, 0x0000006eu, 0x0000006eu, 0x00050095u, 0x00000072u, 0x00000073u, 0x0000006cu, 0x0000006fu, 0x00050051u, 0x0000006bu, 0x00000074u, 0x00000073u, 0x00000001u, 0x0003003eu, 0x00000071u, 0x00000074u, 0x00050051u, 0x0000006bu, 0x00000075u, 0x00000073u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000076u, 0x00000075u, 0x0003003eu, 0x00000065u, 0x00000076u, 0x0004007cu, 0x00000007u, 0x00000078u, 0x00000074u, 0x00050080u, 0x00000007u, 0x0000007au, 0x00000069u, 0x00000078u, 0x0003003eu, 0x00000064u, 0x0000007au, 0x0003003eu, 0x00000019u, 0x0000007au, 0x000200feu, 0x00000076u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000026u, 0x00000000u, 0x00000021u, 0x00030037u, 0x0000001du, 0x00000022u, 0x00030037u, 0x00000008u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000014u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x00000014u, 0x0000007fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000085u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000008fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000aeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000102u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000104u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000109u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000010fu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000118u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000119u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000011cu, 0x00000007u, 0x00050041u, 0x00000014u, 0x00000081u, 0x00000022u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000082u, 0x00000081u, 0x000500c7u, 0x00000006u, 0x00000084u, 0x00000082u, 0x00000083u, 0x0003003eu, 0x0000007fu, 0x00000084u, 0x00050041u, 0x00000014u, 0x00000087u, 0x00000022u, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000088u, 0x00000087u, 0x0003003eu, 0x00000085u, 0x00000088u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000025u, 0x00050084u, 0x00000006u, 0x0000008bu, 0x00000084u, 0x00000089u, 0x0003003eu, 0x0000007fu, 0x0000008bu, 0x0004003du, 0x00000006u, 0x0000008cu, 0x00000025u, 0x00050084u, 0x00000006u, 0x0000008eu, 0x00000088u, 0x0000008cu, 0x0003003eu, 0x00000085u, 0x0000008eu, 0x0004003du, 0x00000007u, 0x00000090u, 0x00000023u, 0x00070050u, 0x00000007u, 0x00000092u, 0x0000008bu, 0x0000008bu, 0x0000008bu, 0x0000008bu, 0x00050082u, 0x00000007u, 0x00000093u, 0x00000090u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000095u, 0x00000025u, 0x00050041u, 0x00000014u, 0x00000097u, 0x00000022u, 0x00000096u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000097u, 0x00050084u, 0x00000006u, 0x00000099u, 0x00000095u, 0x00000098u, 0x0003003eu, 0x0000009bu, 0x00000093u, 0x00050041u, 0x00000014u, 0x0000009du, 0x00000022u, 0x00000094u, 0x0004003du, 0x00000006u, 0x0000009eu, 0x0000009du, 0x0003003eu, 0x0000009cu, 0x0000009eu, 0x0003003eu, 0x0000009fu, 0x00000099u, 0x00080039u, 0x00000007u, 0x000000a1u, 0x0000001au, 0x0000009bu, 0x0000009cu, 0x0000009fu, 0x000000a0u, 0x0004003du, 0x00000007u, 0x000000a2u, 0x000000a0u, 0x0003003eu, 0x0000009au, 0x000000a2u, 0x0003003eu, 0x0000008fu, 0x000000a1u, 0x0004003du, 0x00000007u, 0x000000a4u, 0x00000023u, 0x00050082u, 0x00000007u, 0x000000a7u, 0x000000a4u, 0x00000092u, 0x0004003du, 0x00000006u, 0x000000a9u, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000abu, 0x00000022u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000acu, 0x000000abu, 0x00050084u, 0x00000006u, 0x000000adu, 0x000000a9u, 0x000000acu, 0x0003003eu, 0x000000afu, 0x000000a7u, 0x00050041u, 0x00000014u, 0x000000b1u, 0x00000022u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x000000b2u, 0x000000b1u, 0x0003003eu, 0x000000b0u, 0x000000b2u, 0x0003003eu, 0x000000b3u, 0x000000adu, 0x00080039u, 0x00000007u, 0x000000b5u, 0x0000001au, 0x000000afu, 0x000000b0u, 0x000000b3u, 0x000000b4u, 0x0004003du, 0x00000007u, 0x000000b6u, 0x000000b4u, 0x0003003eu, 0x000000aeu, 0x000000b6u, 0x0003003eu, 0x000000a3u, 0x000000b5u, 0x0004003du, 0x00000007u, 0x000000b8u, 0x00000023u, 0x00070050u, 0x00000007u, 0x000000bau, 0x0000008eu, 0x0000008eu, 0x0000008eu, 0x0000008eu, 0x00050082u, 0x00000007u, 0x000000bbu, 0x000000b8u, 0x000000bau, 0x0004003du, 0x00000006u, 0x000000bdu, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000bfu, 0x00000022u, 0x000000beu, 0x0004003du, 0x00000006u, 0x000000c0u, 0x000000bfu, 0x00050084u, 0x00000006u, 0x000000c1u, 0x000000bdu, 0x000000c0u, 0x0003003eu, 0x000000c3u, 0x000000bbu, 0x00050041u, 0x00000014u, 0x000000c5u, 0x00000022u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x000000c6u, 0x000000c5u, 0x0003003eu, 0x000000c4u, 0x000000c6u, 0x0003003eu, 0x000000c7u, 0x000000c1u, 0x00080039u, 0x00000007u, 0x000000c9u, 0x0000001au, 0x000000c3u, 0x000000c4u, 0x000000c7u, 0x000000c8u, 0x0004003du, 0x00000007u, 0x000000cau, 0x000000c8u, 0x0003003eu, 0x000000c2u, 0x000000cau, 0x0003003eu, 0x000000b7u, 0x000000c9u, 0x0004003du, 0x00000007u, 0x000000cdu, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000ceu, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000d0u, 0x00000087u, 0x00050084u, 0x00000006u, 0x000000d1u, 0x000000ceu, 0x000000d0u, 0x00070050u, 0x00000007u, 0x000000d2u, 0x000000d1u, 0x000000d1u, 0x000000d1u, 0x000000d1u, 0x000500b1u, 0x000000d3u, 0x000000d4u, 0x000000cdu, 0x000000d2u, 0x000600a9u, 0x00000007u, 0x000000d5u, 0x000000d4u, 0x000000b5u, 0x000000c9u, 0x0003003eu, 0x000000b7u, 0x000000d5u, 0x0004003du, 0x00000007u, 0x000000d8u, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000d9u, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000dbu, 0x00000087u, 0x00050084u, 0x00000006u, 0x000000dcu, 0x000000d9u, 0x000000dbu, 0x00070050u, 0x00000007u, 0x000000ddu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x000500b1u, 0x000000d3u, 0x000000deu, 0x000000d8u, 0x000000ddu, 0x000600a9u, 0x00000007u, 0x000000dfu, 0x000000deu, 0x000000b6u, 0x000000cau, 0x0003003eu, 0x000000c2u, 0x000000dfu, 0x000500adu, 0x000000d3u, 0x000000e5u, 0x000000a2u, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000000e6u, 0x000000e5u, 0x000000e2u, 0x000000a1u, 0x0003003eu, 0x0000008fu, 0x000000e6u, 0x000500b1u, 0x000000d3u, 0x000000edu, 0x000000a2u, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x000000eeu, 0x000000edu, 0x000000e9u, 0x000000e6u, 0x0003003eu, 0x0000008fu, 0x000000eeu, 0x000500adu, 0x000000d3u, 0x000000f1u, 0x000000dfu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000000f2u, 0x000000f1u, 0x000000e2u, 0x000000d5u, 0x0003003eu, 0x000000b7u, 0x000000f2u, 0x000500b1u, 0x000000d3u, 0x000000f5u, 0x000000dfu, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x000000f6u, 0x000000f5u, 0x000000e9u, 0x000000f2u, 0x0003003eu, 0x000000b7u, 0x000000f6u, 0x0003003eu, 0x000000f8u, 0x000000eeu, 0x00050039u, 0x00000007u, 0x000000fau, 0x0000000bu, 0x000000f8u, 0x0003003eu, 0x000000f7u, 0x000000fau, 0x0003003eu, 0x000000fcu, 0x000000f6u, 0x00050039u, 0x00000007u, 0x000000feu, 0x0000000bu, 0x000000fcu, 0x0003003eu, 0x000000fbu, 0x000000feu, 0x0004003du, 0x0000001eu, 0x000000ffu, 0x00000024u, 0x000300f7u, 0x00000101u, 0x00000000u, 0x000400fau, 0x000000ffu, 0x00000100u, 0x00000106u, 0x000200f8u, 0x00000100u, 0x0003003eu, 0x00000102u, 0x000000fau, 0x0003003eu, 0x00000104u, 0x000000feu, 0x000200f9u, 0x00000101u, 0x000200f8u, 0x00000106u, 0x0003003eu, 0x00000102u, 0x000000feu, 0x0003003eu, 0x00000104u, 0x000000fau, 0x000200f9u, 0x00000101u, 0x000200f8u, 0x00000101u, 0x00070050u, 0x000000d3u, 0x00000808u, 0x000000ffu, 0x000000ffu, 0x000000ffu, 0x000000ffu, 0x000600a9u, 0x00000007u, 0x00000809u, 0x00000808u, 0x000000feu, 0x000000fau, 0x000600a9u, 0x00000007u, 0x0000080bu, 0x00000808u, 0x000000fau, 0x000000feu, 0x0006000cu, 0x00000007u, 0x0000010bu, 0x00000001u, 0x00000005u, 0x0000080bu, 0x0006000cu, 0x00000007u, 0x0000010du, 0x00000001u, 0x00000005u, 0x00000809u, 0x0007000cu, 0x00000007u, 0x0000010eu, 0x00000001u, 0x0000002au, 0x0000010bu, 0x0000010du, 0x0003003eu, 0x0000010fu, 0x0000010eu, 0x00050039u, 0x00000006u, 0x00000110u, 0x00000012u, 0x0000010fu, 0x0003003eu, 0x00000109u, 0x00000110u, 0x0004003du, 0x00000006u, 0x00000113u, 0x00000025u, 0x00050084u, 0x00000006u, 0x00000114u, 0x00000112u, 0x00000113u, 0x000500b3u, 0x0000001eu, 0x00000115u, 0x00000110u, 0x00000114u, 0x000300f7u, 0x00000117u, 0x00000000u, 0x000400fau, 0x00000115u, 0x00000116u, 0x00000120u, 0x000200f8u, 0x00000116u, 0x0003003eu, 0x00000119u, 0x0000080bu, 0x00050039u, 0x00000006u, 0x0000011bu, 0x0000000fu, 0x00000119u, 0x0003003eu, 0x0000011cu, 0x00000809u, 0x00050039u, 0x00000006u, 0x0000011eu, 0x00000012u, 0x0000011cu, 0x00050050u, 0x00000020u, 0x0000011fu, 0x0000011bu, 0x0000011eu, 0x0003003eu, 0x00000118u, 0x0000011fu, 0x000200f9u, 0x00000117u, 0x000200f8u, 0x00000120u, 0x0003003eu, 0x00000118u, 0x00000121u, 0x000200f9u, 0x00000117u, 0x000200f8u, 0x00000117u, 0x000700f5u, 0x00000020u, 0x000007fbu, 0x0000011fu, 0x00000116u, 0x00000121u, 0x00000120u, 0x000200feu, 0x000007fbu, 0x00010038u, 0x00050036u, 0x0000001eu, 0x0000002eu, 0x00000000u, 0x00000029u, 0x00030037u, 0x0000001du, 0x0000002au, 0x00030037u, 0x00000028u, 0x0000002bu, 0x00030037u, 0x00000028u, 0x0000002cu, 0x00030037u, 0x00000014u, 0x0000002du, 0x000200f8u, 0x0000002fu, 0x0005003bu, 0x0000001fu, 0x00000357u, 0x00000007u, 0x00000141u, 0x0004003bu, 0x0000001fu, 0x00000354u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000129u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000143u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000149u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x0000001du, 0x0000015cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000015eu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000160u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000162u, 0x00000007u, 0x000300f7u, 0x00000353u, 0x00000000u, 0x000300fbu, 0x0000004bu, 0x00000356u, 0x000200f8u, 0x00000356u, 0x00050041u, 0x00000014u, 0x00000126u, 0x0000002bu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000127u, 0x00000126u, 0x00050084u, 0x00000006u, 0x00000128u, 0x00000127u, 0x00000086u, 0x0003003eu, 0x00000125u, 0x00000128u, 0x00050041u, 0x00000014u, 0x0000012au, 0x0000002cu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000012au, 0x00050084u, 0x00000006u, 0x0000012cu, 0x0000012bu, 0x00000086u, 0x00050080u, 0x00000006u, 0x0000012du, 0x0000012cu, 0x00000080u, 0x0003003eu, 0x00000129u, 0x0000012du, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000002du, 0x00050041u, 0x00000014u, 0x00000130u, 0x0000002au, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000131u, 0x00000130u, 0x00050084u, 0x00000006u, 0x00000132u, 0x0000012fu, 0x00000131u, 0x0007000cu, 0x00000006u, 0x00000133u, 0x00000001u, 0x0000002au, 0x00000128u, 0x00000132u, 0x0003003eu, 0x00000125u, 0x00000133u, 0x0004003du, 0x00000006u, 0x00000135u, 0x0000002du, 0x00050041u, 0x00000014u, 0x00000137u, 0x0000002au, 0x00000136u, 0x0004003du, 0x00000006u, 0x00000138u, 0x00000137u, 0x00050084u, 0x00000006u, 0x00000139u, 0x00000135u, 0x00000138u, 0x00050082u, 0x00000006u, 0x0000013au, 0x00000139u, 0x000000aau, 0x0007000cu, 0x00000006u, 0x0000013bu, 0x00000001u, 0x00000027u, 0x0000012du, 0x0000013au, 0x0003003eu, 0x00000129u, 0x0000013bu, 0x000500b1u, 0x0000001eu, 0x0000013eu, 0x0000013bu, 0x00000133u, 0x000300f7u, 0x00000140u, 0x00000000u, 0x000400fau, 0x0000013eu, 0x0000013fu, 0x00000140u, 0x000200f8u, 0x0000013fu, 0x0003003eu, 0x00000357u, 0x00000358u, 0x0003003eu, 0x00000354u, 0x00000141u, 0x000200f9u, 0x00000353u, 0x000200f8u, 0x00000140u, 0x00050041u, 0x00000014u, 0x00000145u, 0x0000002au, 0x00000144u, 0x0004003du, 0x00000006u, 0x00000146u, 0x00000145u, 0x000500c7u, 0x00000006u, 0x00000147u, 0x00000146u, 0x000000aau, 0x000500abu, 0x0000001eu, 0x00000148u, 0x00000147u, 0x00000096u, 0x0003003eu, 0x00000143u, 0x00000148u, 0x00050041u, 0x00000014u, 0x0000014cu, 0x0000002au, 0x00000086u, 0x0004003du, 0x00000006u, 0x0000014du, 0x0000014cu, 0x0004003du, 0x00000006u, 0x0000014eu, 0x0000002du, 0x00050084u, 0x00000006u, 0x0000014fu, 0x0000014du, 0x0000014eu, 0x00050050u, 0x00000020u, 0x00000151u, 0x0000014fu, 0x0000014fu, 0x00050080u, 0x00000020u, 0x00000152u, 0x00000151u, 0x00000150u, 0x00050050u, 0x00000020u, 0x00000154u, 0x00000133u, 0x00000133u, 0x00050050u, 0x00000020u, 0x00000156u, 0x0000013bu, 0x0000013bu, 0x0008000cu, 0x00000020u, 0x00000157u, 0x00000001u, 0x0000002du, 0x00000152u, 0x00000154u, 0x00000156u, 0x00050051u, 0x00000006u, 0x00000158u, 0x00000157u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000159u, 0x00000157u, 0x00000001u, 0x00070050u, 0x00000007u, 0x0000015au, 0x00000133u, 0x0000013bu, 0x00000158u, 0x00000159u, 0x0003003eu, 0x00000149u, 0x0000015au, 0x0004003du, 0x0000001cu, 0x0000015du, 0x0000002au, 0x0003003eu, 0x0000015cu, 0x0000015du, 0x0003003eu, 0x0000015eu, 0x0000015au, 0x0003003eu, 0x00000160u, 0x00000148u, 0x0004003du, 0x00000006u, 0x00000163u, 0x0000002du, 0x0003003eu, 0x00000162u, 0x00000163u, 0x00080039u, 0x00000020u, 0x00000164u, 0x00000026u, 0x0000015cu, 0x0000015eu, 0x00000160u, 0x00000162u, 0x0003003eu, 0x0000015bu, 0x00000164u, 0x00050041u, 0x00000014u, 0x00000165u, 0x0000015bu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000166u, 0x00000165u, 0x00050041u, 0x00000014u, 0x00000167u, 0x0000002bu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000168u, 0x00000167u, 0x0007000cu, 0x00000006u, 0x00000169u, 0x00000001u, 0x0000002au, 0x00000166u, 0x00000168u, 0x0003003eu, 0x00000165u, 0x00000169u, 0x00050041u, 0x00000014u, 0x0000016bu, 0x0000015bu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000016bu, 0x00050041u, 0x00000014u, 0x0000016du, 0x0000002cu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000016eu, 0x0000016du, 0x0007000cu, 0x00000006u, 0x0000016fu, 0x00000001u, 0x00000027u, 0x0000016cu, 0x0000016eu, 0x0003003eu, 0x0000016bu, 0x0000016fu, 0x0004003du, 0x00000006u, 0x00000172u, 0x00000165u, 0x0004003du, 0x00000006u, 0x00000174u, 0x0000016bu, 0x000500b3u, 0x0000001eu, 0x00000175u, 0x00000172u, 0x00000174u, 0x0003003eu, 0x00000357u, 0x00000358u, 0x0003003eu, 0x00000354u, 0x00000175u, 0x000200f9u, 0x00000353u, 0x000200f8u, 0x00000353u, 0x000700f5u, 0x0000001eu, 0x000007fcu, 0x00000141u, 0x0000013fu, 0x00000175u, 0x00000140u, 0x000200feu, 0x000007fcu, 0x00010038u, 0x00050036u, 0x0000001cu, 0x00000034u, 0x00000000u, 0x00000032u, 0x00030037u, 0x00000031u, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003du, 0x00000030u, 0x0000017fu, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000181u, 0x0000017eu, 0x00000096u, 0x0000017fu, 0x00000096u, 0x0004003du, 0x00000006u, 0x00000182u, 0x00000181u, 0x0004003du, 0x00000030u, 0x00000183u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000184u, 0x0000017eu, 0x00000096u, 0x00000183u, 0x000000aau, 0x0004003du, 0x00000006u, 0x00000185u, 0x00000184u, 0x0004003du, 0x00000030u, 0x00000186u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000187u, 0x0000017eu, 0x00000096u, 0x00000186u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000188u, 0x00000187u, 0x0004003du, 0x00000030u, 0x00000189u, 0x00000033u, 0x00070041u, 0x0000018au, 0x0000018bu, 0x0000017eu, 0x00000096u, 0x00000189u, 0x00000080u, 0x0004003du, 0x00000178u, 0x0000018cu, 0x0000018bu, 0x00040072u, 0x00000006u, 0x0000018du, 0x0000018cu, 0x0004003du, 0x00000030u, 0x0000018eu, 0x00000033u, 0x00070041u, 0x0000018au, 0x0000018fu, 0x0000017eu, 0x00000096u, 0x0000018eu, 0x00000086u, 0x0004003du, 0x00000178u, 0x00000190u, 0x0000018fu, 0x00040072u, 0x00000006u, 0x00000191u, 0x00000190u, 0x0004003du, 0x00000030u, 0x00000192u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000193u, 0x0000017eu, 0x00000096u, 0x00000192u, 0x00000094u, 0x0004003du, 0x00000006u, 0x00000194u, 0x00000193u, 0x0004003du, 0x00000030u, 0x00000195u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000196u, 0x0000017eu, 0x00000096u, 0x00000195u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000197u, 0x00000196u, 0x0004003du, 0x00000030u, 0x00000198u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000199u, 0x0000017eu, 0x00000096u, 0x00000198u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x0000019au, 0x00000199u, 0x0004003du, 0x00000030u, 0x0000019bu, 0x00000033u, 0x00070041u, 0x0000018au, 0x0000019cu, 0x0000017eu, 0x00000096u, 0x0000019bu, 0x00000136u, 0x0004003du, 0x00000178u, 0x0000019du, 0x0000019cu, 0x00040072u, 0x00000006u, 0x0000019eu, 0x0000019du, 0x0004003du, 0x00000030u, 0x0000019fu, 0x00000033u, 0x00070041u, 0x000001a0u, 0x000001a1u, 0x0000017eu, 0x00000096u, 0x0000019fu, 0x00000144u, 0x0004003du, 0x00000179u, 0x000001a2u, 0x000001a1u, 0x00040071u, 0x00000030u, 0x000001a3u, 0x000001a2u, 0x0004007cu, 0x00000006u, 0x000001a4u, 0x000001a3u, 0x0004003du, 0x00000030u, 0x000001a5u, 0x00000033u, 0x00070041u, 0x000001a0u, 0x000001a7u, 0x0000017eu, 0x00000096u, 0x000001a5u, 0x000001a6u, 0x0004003du, 0x00000179u, 0x000001a8u, 0x000001a7u, 0x00040071u, 0x00000030u, 0x000001a9u, 0x000001a8u, 0x0004007cu, 0x00000006u, 0x000001aau, 0x000001a9u, 0x000e0050u, 0x0000001cu, 0x000001abu, 0x00000182u, 0x00000185u, 0x00000188u, 0x0000018du, 0x00000191u, 0x00000194u, 0x00000197u, 0x0000019au, 0x0000019eu, 0x000001a4u, 0x000001aau, 0x000200feu, 0x000001abu, 0x00010038u, 0x00050036u, 0x00000036u, 0x00000039u, 0x00000000u, 0x00000037u, 0x00030037u, 0x00000031u, 0x00000038u, 0x000200f8u, 0x0000003au, 0x0004003bu, 0x00000008u, 0x000001aeu, 0x00000007u, 0x0004003du, 0x00000030u, 0x000001b3u, 0x00000038u, 0x00060041u, 0x000001b4u, 0x000001b5u, 0x000001b2u, 0x00000096u, 0x000001b3u, 0x0004003du, 0x00000007u, 0x000001b6u, 0x000001b5u, 0x0003003eu, 0x000001aeu, 0x000001b6u, 0x00050041u, 0x00000014u, 0x000001b7u, 0x000001aeu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x00050041u, 0x00000014u, 0x000001b9u, 0x000001aeu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000001bau, 0x000001b9u, 0x00050041u, 0x00000014u, 0x000001bcu, 0x000001aeu, 0x000001bbu, 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001bcu, 0x00050041u, 0x00000014u, 0x000001bfu, 0x000001aeu, 0x000001beu, 0x0004003du, 0x00000006u, 0x000001c0u, 0x000001bfu, 0x00070050u, 0x00000036u, 0x000001c1u, 0x000001b8u, 0x000001bau, 0x000001bdu, 0x000001c0u, 0x000200feu, 0x000001c1u, 0x00010038u, 0x00050036u, 0x00000030u, 0x0000003du, 0x00000000u, 0x0000003bu, 0x00030037u, 0x00000031u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003du, 0x00000030u, 0x000001c8u, 0x0000003cu, 0x00070041u, 0x000001c9u, 0x000001cau, 0x000001c7u, 0x00000096u, 0x000001c8u, 0x0000004bu, 0x000700eau, 0x00000030u, 0x000001cbu, 0x000001cau, 0x0000004eu, 0x0000004bu, 0x0000004eu, 0x000200feu, 0x000001cbu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000853u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000003du, 0x00020011u, 0x0000003eu, 0x00020011u, 0x0000003fu, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0009000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001e3u, 0x000001eeu, 0x000001f2u, 0x000001fdu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x0000017au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000017au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000017au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000017au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000017au, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x0000017au, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000017au, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000017au, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000017au, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000017au, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000017au, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000017bu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000017cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000017cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000017cu, 0x00000002u, 0x00040047u, 0x0000017eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000017eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001afu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001b0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b0u, 0x00000002u, 0x00040047u, 0x000001b2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b2u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001ceu, 0x00000006u, 0x00000010u, 0x00050048u, 0x000001cfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001cfu, 0x00000002u, 0x00040047u, 0x000001d1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001d1u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000001e3u, 0x0000000bu, 0x0000001au, 0x00030047u, 0x000001eeu, 0x00000000u, 0x00040047u, 0x000001eeu, 0x0000000bu, 0x00000029u, 0x00030047u, 0x000001efu, 0x00000000u, 0x00030047u, 0x000001f2u, 0x00000000u, 0x00040047u, 0x000001f2u, 0x0000000bu, 0x00000024u, 0x00030047u, 0x000001f3u, 0x00000000u, 0x00040047u, 0x000001fdu, 0x0000000bu, 0x00000028u, 0x00040047u, 0x00000205u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000206u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00000213u, 0x00000001u, 0x00000004u, 0x00040047u, 0x00000214u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000021du, 0x00000001u, 0x00000002u, 0x00050048u, 0x00000231u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000231u, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x00000231u, 0x00000002u, 0x00040047u, 0x00000266u, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002dbu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002dcu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002dcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002dcu, 0x00000002u, 0x00040047u, 0x000002deu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002deu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002e0u, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002ebu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002ecu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002ecu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002ecu, 0x00000002u, 0x00040047u, 0x000002eeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002eeu, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000031eu, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000031fu, 0x00000000u, 0x00000019u, 0x00050048u, 0x0000031fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000031fu, 0x00000002u, 0x00040047u, 0x00000321u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000321u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000349u, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000034au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000034au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000034au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x0000034bu, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000034cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000034cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000034cu, 0x00000002u, 0x00040047u, 0x0000034eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000034eu, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000357u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000358u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000358u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000358u, 0x00000002u, 0x00040047u, 0x0000035au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000035au, 0x00000021u, 0x00000007u, 0x00040047u, 0x0000035cu, 0x00000001u, 0x00000005u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x000d001eu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000001du, 0x00000007u, 0x0000001cu, 0x00020014u, 0x0000001eu, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00040017u, 0x00000020u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000021u, 0x00000020u, 0x0000001du, 0x00000008u, 0x0000001fu, 0x00000014u, 0x00040020u, 0x00000028u, 0x00000007u, 0x00000020u, 0x00070021u, 0x00000029u, 0x0000001eu, 0x0000001du, 0x00000028u, 0x00000028u, 0x00000014u, 0x00040015u, 0x00000030u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000031u, 0x00000007u, 0x00000030u, 0x00040021u, 0x00000032u, 0x0000001cu, 0x00000031u, 0x0006001eu, 0x00000036u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000037u, 0x00000036u, 0x00000031u, 0x00040021u, 0x0000003bu, 0x00000030u, 0x00000031u, 0x0004002bu, 0x00000006u, 0x00000040u, 0x0000000fu, 0x0004002bu, 0x00000030u, 0x0000004bu, 0x00000000u, 0x0004002bu, 0x00000030u, 0x0000004eu, 0x00000001u, 0x0004001eu, 0x00000066u, 0x00000007u, 0x00000007u, 0x00040017u, 0x0000006bu, 0x00000030u, 0x00000004u, 0x00040020u, 0x00000070u, 0x00000007u, 0x0000006bu, 0x0004001eu, 0x00000072u, 0x0000006bu, 0x0000006bu, 0x0004002bu, 0x00000006u, 0x00000080u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000083u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x00000086u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000094u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000096u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000a8u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000aau, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000bcu, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000beu, 0x00000002u, 0x00040017u, 0x000000d3u, 0x0000001eu, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000e1u, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000e2u, 0x000000e1u, 0x000000e1u, 0x000000e1u, 0x000000e1u, 0x0007002cu, 0x00000007u, 0x000000e4u, 0x00000096u, 0x00000096u, 0x00000096u, 0x00000096u, 0x0004002bu, 0x00000006u, 0x000000e8u, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000e9u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x0004002bu, 0x00000006u, 0x000000ebu, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000ecu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x0004002bu, 0x00000006u, 0x00000112u, 0x000007ffu, 0x0005002cu, 0x00000020u, 0x00000121u, 0x00000096u, 0x000000e1u, 0x0004002bu, 0x00000006u, 0x00000136u, 0x00000008u, 0x0003002au, 0x0000001eu, 0x00000141u, 0x0004002bu, 0x00000006u, 0x00000144u, 0x00000009u, 0x0005002cu, 0x00000020u, 0x00000150u, 0x000000ebu, 0x00000096u, 0x00040015u, 0x00000178u, 0x00000010u, 0x00000001u, 0x00040015u, 0x00000179u, 0x00000008u, 0x00000000u, 0x000d001eu, 0x0000017au, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000178u, 0x00000178u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000178u, 0x00000179u, 0x00000179u, 0x0003001du, 0x0000017bu, 0x0000017au, 0x0003001eu, 0x0000017cu, 0x0000017bu, 0x00040020u, 0x0000017du, 0x0000000cu, 0x0000017cu, 0x0004003bu, 0x0000017du, 0x0000017eu, 0x0000000cu, 0x00040020u, 0x00000180u, 0x0000000cu, 0x00000006u, 0x00040020u, 0x0000018au, 0x0000000cu, 0x00000178u, 0x00040020u, 0x000001a0u, 0x0000000cu, 0x00000179u, 0x0004002bu, 0x00000006u, 0x000001a6u, 0x0000000au, 0x0003001du, 0x000001afu, 0x00000007u, 0x0003001eu, 0x000001b0u, 0x000001afu, 0x00040020u, 0x000001b1u, 0x0000000cu, 0x000001b0u, 0x0004003bu, 0x000001b1u, 0x000001b2u, 0x0000000cu, 0x00040020u, 0x000001b4u, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000030u, 0x000001bbu, 0x00000002u, 0x0004002bu, 0x00000030u, 0x000001beu, 0x00000003u, 0x00030029u, 0x0000001eu, 0x000001c5u, 0x0003001du, 0x000001ceu, 0x0000006bu, 0x0003001eu, 0x000001cfu, 0x000001ceu, 0x00040020u, 0x000001d0u, 0x0000000cu, 0x000001cfu, 0x0004003bu, 0x000001d0u, 0x000001d1u, 0x0000000cu, 0x00040020u, 0x000001d3u, 0x0000000cu, 0x00000030u, 0x00040017u, 0x000001e1u, 0x00000030u, 0x00000003u, 0x00040020u, 0x000001e2u, 0x00000001u, 0x000001e1u, 0x0004003bu, 0x000001e2u, 0x000001e3u, 0x00000001u, 0x00040020u, 0x000001e4u, 0x00000001u, 0x00000030u, 0x00040017u, 0x000001e9u, 0x00000030u, 0x00000002u, 0x0004003bu, 0x000001e4u, 0x000001eeu, 0x00000001u, 0x0004003bu, 0x000001e4u, 0x000001f2u, 0x00000001u, 0x0004003bu, 0x000001e4u, 0x000001fdu, 0x00000001u, 0x00040032u, 0x00000030u, 0x00000205u, 0x00000001u, 0x00060033u, 0x000001e1u, 0x00000206u, 0x00000205u, 0x0000004eu, 0x0000004eu, 0x00060034u, 0x00000030u, 0x00000207u, 0x00000051u, 0x00000206u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000208u, 0x00000080u, 0x00000207u, 0x0000004bu, 0x00060034u, 0x00000006u, 0x00000209u, 0x000000c3u, 0x00000208u, 0x00000080u, 0x00050033u, 0x00000020u, 0x0000020au, 0x00000136u, 0x00000209u, 0x00040032u, 0x00000006u, 0x00000213u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00000214u, 0x00000008u, 0x00060034u, 0x00000006u, 0x00000215u, 0x00000087u, 0x00000213u, 0x00000214u, 0x00060034u, 0x00000006u, 0x0000021cu, 0x00000084u, 0x00000214u, 0x00000136u, 0x00040032u, 0x00000006u, 0x0000021du, 0x00000008u, 0x00060034u, 0x00000006u, 0x0000021eu, 0x00000084u, 0x0000021du, 0x00000209u, 0x00050033u, 0x00000020u, 0x0000021fu, 0x0000021cu, 0x0000021eu, 0x00060034u, 0x00000006u, 0x0000022cu, 0x00000084u, 0x00000214u, 0x00000136u, 0x0004001eu, 0x00000231u, 0x000001e9u, 0x00000006u, 0x00040020u, 0x00000232u, 0x00000009u, 0x00000231u, 0x0004003bu, 0x00000232u, 0x00000233u, 0x00000009u, 0x00040020u, 0x00000234u, 0x00000009u, 0x000001e9u, 0x00050033u, 0x00000020u, 0x0000023du, 0x00000214u, 0x0000021du, 0x00050033u, 0x00000020u, 0x00000241u, 0x00000214u, 0x0000021du, 0x00040020u, 0x0000024au, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000024fu, 0x00000020u, 0x00040020u, 0x0000025fu, 0x00000007u, 0x00000036u, 0x00040032u, 0x00000006u, 0x00000266u, 0x00000001u, 0x0003001du, 0x000002dbu, 0x00000030u, 0x0003001eu, 0x000002dcu, 0x000002dbu, 0x00040020u, 0x000002ddu, 0x0000000cu, 0x000002dcu, 0x0004003bu, 0x000002ddu, 0x000002deu, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002e0u, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002e1u, 0x00000087u, 0x000002e0u, 0x0000024fu, 0x0003001du, 0x000002ebu, 0x00000030u, 0x0003001eu, 0x000002ecu, 0x000002ebu, 0x00040020u, 0x000002edu, 0x0000000cu, 0x000002ecu, 0x0004003bu, 0x000002edu, 0x000002eeu, 0x0000000cu, 0x0003001du, 0x0000031eu, 0x00000030u, 0x0003001eu, 0x0000031fu, 0x0000031eu, 0x00040020u, 0x00000320u, 0x0000000cu, 0x0000031fu, 0x0004003bu, 0x00000320u, 0x00000321u, 0x0000000cu, 0x00040017u, 0x00000347u, 0x00000179u, 0x00000004u, 0x0004002bu, 0x00000030u, 0x00000348u, 0x00000008u, 0x0004001cu, 0x00000349u, 0x00000179u, 0x00000348u, 0x0005001eu, 0x0000034au, 0x00000347u, 0x00000347u, 0x00000349u, 0x0003001du, 0x0000034bu, 0x0000034au, 0x0003001eu, 0x0000034cu, 0x0000034bu, 0x00040020u, 0x0000034du, 0x0000000cu, 0x0000034cu, 0x0004003bu, 0x0000034du, 0x0000034eu, 0x0000000cu, 0x0003001du, 0x00000357u, 0x0000006bu, 0x0003001eu, 0x00000358u, 0x00000357u, 0x00040020u, 0x00000359u, 0x0000000cu, 0x00000358u, 0x0004003bu, 0x00000359u, 0x0000035au, 0x0000000cu, 0x00040032u, 0x00000006u, 0x0000035cu, 0x00008000u, 0x00060034u, 0x00000030u, 0x0000035du, 0x00000080u, 0x0000035cu, 0x0000004bu, 0x00040020u, 0x0000036bu, 0x0000000cu, 0x0000006bu, 0x0004002bu, 0x00000006u, 0x0000036fu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x00000370u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000371u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000372u, 0x00000100u, 0x0004002bu, 0x00000006u, 0x00000373u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00000374u, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000375u, 0x00000800u, 0x0004002bu, 0x00000006u, 0x00000376u, 0x00001000u, 0x0004002bu, 0x00000006u, 0x00000377u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00000378u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00000379u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x0000037au, 0x00010000u, 0x0004002bu, 0x00000006u, 0x0000037bu, 0x00020000u, 0x0004002bu, 0x00000006u, 0x0000037cu, 0x00040000u, 0x0004002bu, 0x00000006u, 0x0000037du, 0x00080000u, 0x0004002bu, 0x00000006u, 0x0000037eu, 0x00100000u, 0x0004002bu, 0x00000006u, 0x0000037fu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x00000380u, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00000381u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x00000382u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x00000383u, 0x0000001au, 0x0004002bu, 0x00000006u, 0x00000384u, 0x10000000u, 0x0004002bu, 0x00000006u, 0x00000385u, 0x20000000u, 0x0004002bu, 0x00000006u, 0x00000386u, 0x40000000u, 0x0003002eu, 0x00000006u, 0x000006cfu, 0x0005002cu, 0x00000020u, 0x00000844u, 0x000000aau, 0x000000aau, 0x0005002cu, 0x00000020u, 0x00000845u, 0x000000beu, 0x000000beu, 0x0007002cu, 0x00000007u, 0x00000846u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000014u, 0x000007c2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007c1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007c0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007beu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007a0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000799u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000798u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000797u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000792u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000791u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000790u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000078fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000779u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000777u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000775u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000774u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000773u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000772u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000771u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000770u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000758u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000757u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000756u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000755u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000754u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000753u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000752u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000751u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000750u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000749u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000748u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000747u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000746u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000739u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000721u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000720u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000719u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000718u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000717u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000709u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000708u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000707u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006deu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ddu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ceu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ccu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c7u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x000006b2u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000006b3u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000006b4u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000006b5u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000006a6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a7u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000069au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000068eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000068au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000686u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000066du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000066eu, 0x00000007u, 0x0004003bu, 0x00000070u, 0x0000066fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000670u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000654u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000655u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x00000656u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000657u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000063bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000063cu, 0x00000007u, 0x0004003bu, 0x00000070u, 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000063eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005a9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005abu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005acu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005adu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005aeu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005afu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005b5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005bau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005bbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005beu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005c3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c4u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000005c5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c7u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000005c8u, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x00000557u, 0x00000007u, 0x00000141u, 0x0004003bu, 0x0000001fu, 0x00000558u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000559u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000055au, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000055bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000055cu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000055du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000055fu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000560u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000561u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000562u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051fu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000513u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000507u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000508u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000004fbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004fcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004f3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004dau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004dbu, 0x00000007u, 0x0004003bu, 0x00000070u, 0x000004dcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004ddu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c2u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x000004c3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a9u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x000004aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004abu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000416u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000417u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000418u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000419u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000041bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000041cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000420u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000421u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000422u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000423u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000424u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000425u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000426u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000427u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000428u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000429u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000430u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000431u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000432u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000433u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000434u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000435u, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x000003c4u, 0x00000007u, 0x00000141u, 0x0004003bu, 0x0000001fu, 0x000003c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003c6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003c7u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000003c8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003c9u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000003cau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003ccu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000003cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003ceu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000003cfu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001e0u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001e8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001edu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001f1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001f6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001f9u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000203u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000210u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000021au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000022au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000023bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000023fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000249u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000024du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000253u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000261u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000264u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000273u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000284u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000289u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000028du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000028fu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000293u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000029bu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002a3u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002aau, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002adu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002b9u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002cau, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002cfu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002d3u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002fbu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002ffu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000305u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000328u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000332u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000033au, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000346u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000353u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000354u, 0x00000007u, 0x00050041u, 0x000001e4u, 0x000001e5u, 0x000001e3u, 0x0000004bu, 0x0004003du, 0x00000030u, 0x000001e6u, 0x000001e5u, 0x0004007cu, 0x00000006u, 0x000001e7u, 0x000001e6u, 0x0003003eu, 0x000001e0u, 0x000001e7u, 0x0004003du, 0x000001e1u, 0x000001eau, 0x000001e3u, 0x0007004fu, 0x000001e9u, 0x000001ebu, 0x000001eau, 0x000001eau, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000020u, 0x000001ecu, 0x000001ebu, 0x0003003eu, 0x000001e8u, 0x000001ecu, 0x0004003du, 0x00000030u, 0x000001efu, 0x000001eeu, 0x0004007cu, 0x00000006u, 0x000001f0u, 0x000001efu, 0x0003003eu, 0x000001edu, 0x000001f0u, 0x0004003du, 0x00000030u, 0x000001f3u, 0x000001f2u, 0x0004007cu, 0x00000006u, 0x000001f4u, 0x000001f3u, 0x000500c3u, 0x00000006u, 0x000001f5u, 0x000001f4u, 0x00000080u, 0x0003003eu, 0x000001f1u, 0x000001f5u, 0x000500c7u, 0x00000006u, 0x000001f8u, 0x000001f0u, 0x000000bcu, 0x0003003eu, 0x000001f6u, 0x000001f8u, 0x000500c3u, 0x00000006u, 0x000001fbu, 0x000001f0u, 0x00000080u, 0x0003003eu, 0x000001f9u, 0x000001fbu, 0x0004003du, 0x00000030u, 0x000001feu, 0x000001fdu, 0x0004007cu, 0x00000006u, 0x000001ffu, 0x000001feu, 0x00050084u, 0x00000006u, 0x00000200u, 0x000001f5u, 0x000001ffu, 0x00050080u, 0x00000006u, 0x00000202u, 0x000001fbu, 0x00000200u, 0x0003003eu, 0x000001f9u, 0x00000202u, 0x00050084u, 0x00000020u, 0x0000020bu, 0x000001ecu, 0x0000020au, 0x00050050u, 0x00000020u, 0x0000020eu, 0x000001f8u, 0x00000202u, 0x00050080u, 0x00000020u, 0x0000020fu, 0x0000020bu, 0x0000020eu, 0x0003003eu, 0x00000203u, 0x0000020fu, 0x00050041u, 0x00000014u, 0x00000211u, 0x00000203u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000212u, 0x00000211u, 0x00050084u, 0x00000006u, 0x00000216u, 0x00000212u, 0x00000215u, 0x00050041u, 0x00000014u, 0x00000217u, 0x00000203u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000218u, 0x00000217u, 0x00050080u, 0x00000006u, 0x00000219u, 0x00000216u, 0x00000218u, 0x0003003eu, 0x00000210u, 0x00000219u, 0x00050084u, 0x00000020u, 0x00000220u, 0x000001ecu, 0x0000021fu, 0x0003003eu, 0x0000021au, 0x00000220u, 0x00050084u, 0x00000006u, 0x00000222u, 0x000001f5u, 0x0000021du, 0x00050084u, 0x00000006u, 0x00000225u, 0x00000222u, 0x000001ffu, 0x00050041u, 0x00000014u, 0x00000226u, 0x0000021au, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000227u, 0x00000226u, 0x00050080u, 0x00000006u, 0x00000228u, 0x00000227u, 0x00000225u, 0x0003003eu, 0x00000226u, 0x00000228u, 0x0004003du, 0x00000020u, 0x0000022bu, 0x0000021au, 0x00050084u, 0x00000006u, 0x0000022eu, 0x0000021du, 0x000001f5u, 0x00050050u, 0x00000020u, 0x0000022fu, 0x0000022cu, 0x0000022eu, 0x00050080u, 0x00000020u, 0x00000230u, 0x0000022bu, 0x0000022fu, 0x00050041u, 0x00000234u, 0x00000235u, 0x00000233u, 0x00000096u, 0x0004003du, 0x000001e9u, 0x00000236u, 0x00000235u, 0x0004007cu, 0x00000020u, 0x00000237u, 0x00000236u, 0x0007000cu, 0x00000020u, 0x00000238u, 0x00000001u, 0x00000027u, 0x00000230u, 0x00000237u, 0x00050082u, 0x00000020u, 0x0000023au, 0x00000238u, 0x00000844u, 0x0003003eu, 0x0000022au, 0x0000023au, 0x0004003du, 0x00000020u, 0x0000023cu, 0x00000203u, 0x00050084u, 0x00000020u, 0x0000023eu, 0x0000023cu, 0x0000023du, 0x0003003eu, 0x0000023bu, 0x0000023eu, 0x00050080u, 0x00000020u, 0x00000242u, 0x0000023eu, 0x00000241u, 0x0007000cu, 0x00000020u, 0x00000246u, 0x00000001u, 0x00000027u, 0x00000242u, 0x00000237u, 0x00050082u, 0x00000020u, 0x00000248u, 0x00000246u, 0x00000844u, 0x0003003eu, 0x0000023fu, 0x00000248u, 0x00050041u, 0x0000024au, 0x0000024bu, 0x00000233u, 0x000000aau, 0x0004003du, 0x00000006u, 0x0000024cu, 0x0000024bu, 0x0003003eu, 0x00000249u, 0x0000024cu, 0x0003003eu, 0x0000024du, 0x00000141u, 0x000500b1u, 0x0000001eu, 0x00000250u, 0x000001f0u, 0x0000024fu, 0x000300f7u, 0x00000252u, 0x00000000u, 0x000400fau, 0x00000250u, 0x00000251u, 0x00000252u, 0x000200f8u, 0x00000251u, 0x00050084u, 0x00000006u, 0x00000255u, 0x000001e7u, 0x0000024fu, 0x00050080u, 0x00000006u, 0x00000257u, 0x00000255u, 0x000001f0u, 0x0004007cu, 0x00000030u, 0x00000258u, 0x00000257u, 0x0003003eu, 0x00000253u, 0x00000258u, 0x0004007cu, 0x00000030u, 0x0000025bu, 0x0000024cu, 0x000500b0u, 0x0000001eu, 0x0000025cu, 0x00000258u, 0x0000025bu, 0x000300f7u, 0x0000025eu, 0x00000000u, 0x000400fau, 0x0000025cu, 0x0000025du, 0x0000025eu, 0x000200f8u, 0x0000025du, 0x0003003eu, 0x00000261u, 0x00000258u, 0x00060041u, 0x000001b4u, 0x0000038fu, 0x000001b2u, 0x00000096u, 0x00000258u, 0x0004003du, 0x00000007u, 0x00000390u, 0x0000038fu, 0x0003003eu, 0x0000038cu, 0x00000390u, 0x00050041u, 0x00000014u, 0x00000391u, 0x0000038cu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000392u, 0x00000391u, 0x00050041u, 0x00000014u, 0x00000393u, 0x0000038cu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000394u, 0x00000393u, 0x00050041u, 0x00000014u, 0x00000395u, 0x0000038cu, 0x000001bbu, 0x0004003du, 0x00000006u, 0x00000396u, 0x00000395u, 0x00050041u, 0x00000014u, 0x00000397u, 0x0000038cu, 0x000001beu, 0x0004003du, 0x00000006u, 0x00000398u, 0x00000397u, 0x00070050u, 0x00000036u, 0x00000399u, 0x00000392u, 0x00000394u, 0x00000396u, 0x00000398u, 0x0003003eu, 0x00000739u, 0x00000392u, 0x0003003eu, 0x0000073au, 0x00000394u, 0x0003003eu, 0x0000073bu, 0x00000396u, 0x0003003eu, 0x0000073cu, 0x00000398u, 0x0003003eu, 0x00000746u, 0x00000392u, 0x0003003eu, 0x00000747u, 0x00000394u, 0x0003003eu, 0x00000748u, 0x00000396u, 0x0003003eu, 0x00000749u, 0x00000398u, 0x0004003du, 0x00000020u, 0x00000265u, 0x0000021au, 0x00050050u, 0x00000020u, 0x0000026bu, 0x00000392u, 0x00000394u, 0x000500c3u, 0x00000020u, 0x0000026du, 0x0000026bu, 0x00000845u, 0x00050050u, 0x00000020u, 0x0000026eu, 0x00000266u, 0x00000266u, 0x00050084u, 0x00000020u, 0x0000026fu, 0x0000026eu, 0x0000026du, 0x00050082u, 0x00000020u, 0x00000271u, 0x0000026fu, 0x00000844u, 0x0007000cu, 0x00000020u, 0x00000272u, 0x00000001u, 0x0000002au, 0x00000265u, 0x00000271u, 0x0003003eu, 0x00000264u, 0x00000272u, 0x00050080u, 0x00000006u, 0x00000277u, 0x00000396u, 0x00000080u, 0x00050080u, 0x00000006u, 0x0000027au, 0x00000398u, 0x00000080u, 0x00050050u, 0x00000020u, 0x0000027bu, 0x00000277u, 0x0000027au, 0x000500c3u, 0x00000020u, 0x0000027du, 0x0000027bu, 0x00000845u, 0x00050084u, 0x00000020u, 0x0000027fu, 0x0000026eu, 0x0000027du, 0x00050082u, 0x00000020u, 0x00000281u, 0x0000027fu, 0x00000844u, 0x0007000cu, 0x00000020u, 0x00000282u, 0x00000001u, 0x00000027u, 0x0000023au, 0x00000281u, 0x0003003eu, 0x00000273u, 0x00000282u, 0x0003003eu, 0x00000284u, 0x00000258u, 0x00070041u, 0x00000180u, 0x0000039cu, 0x0000017eu, 0x00000096u, 0x00000258u, 0x00000096u, 0x0004003du, 0x00000006u, 0x0000039du, 0x0000039cu, 0x00070041u, 0x00000180u, 0x0000039fu, 0x0000017eu, 0x00000096u, 0x00000258u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000003a0u, 0x0000039fu, 0x00070041u, 0x00000180u, 0x000003a2u, 0x0000017eu, 0x00000096u, 0x00000258u, 0x000000beu, 0x0004003du, 0x00000006u, 0x000003a3u, 0x000003a2u, 0x00070041u, 0x0000018au, 0x000003a5u, 0x0000017eu, 0x00000096u, 0x00000258u, 0x00000080u, 0x0004003du, 0x00000178u, 0x000003a6u, 0x000003a5u, 0x00040072u, 0x00000006u, 0x000003a7u, 0x000003a6u, 0x00070041u, 0x0000018au, 0x000003a9u, 0x0000017eu, 0x00000096u, 0x00000258u, 0x00000086u, 0x0004003du, 0x00000178u, 0x000003aau, 0x000003a9u, 0x00040072u, 0x00000006u, 0x000003abu, 0x000003aau, 0x00070041u, 0x00000180u, 0x000003adu, 0x0000017eu, 0x00000096u, 0x00000258u, 0x00000094u, 0x0004003du, 0x00000006u, 0x000003aeu, 0x000003adu, 0x00070041u, 0x00000180u, 0x000003b0u, 0x0000017eu, 0x00000096u, 0x00000258u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x000003b1u, 0x000003b0u, 0x00070041u, 0x00000180u, 0x000003b3u, 0x0000017eu, 0x00000096u, 0x00000258u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x000003b4u, 0x000003b3u, 0x00070041u, 0x0000018au, 0x000003b6u, 0x0000017eu, 0x00000096u, 0x00000258u, 0x00000136u, 0x0004003du, 0x00000178u, 0x000003b7u, 0x000003b6u, 0x00040072u, 0x00000006u, 0x000003b8u, 0x000003b7u, 0x00070041u, 0x000001a0u, 0x000003bau, 0x0000017eu, 0x00000096u, 0x00000258u, 0x00000144u, 0x0004003du, 0x00000179u, 0x000003bbu, 0x000003bau, 0x00040071u, 0x00000030u, 0x000003bcu, 0x000003bbu, 0x0004007cu, 0x00000006u, 0x000003bdu, 0x000003bcu, 0x00070041u, 0x000001a0u, 0x000003bfu, 0x0000017eu, 0x00000096u, 0x00000258u, 0x000001a6u, 0x0004003du, 0x00000179u, 0x000003c0u, 0x000003bfu, 0x00040071u, 0x00000030u, 0x000003c1u, 0x000003c0u, 0x0004007cu, 0x00000006u, 0x000003c2u, 0x000003c1u, 0x000e0050u, 0x0000001cu, 0x000003c3u, 0x0000039du, 0x000003a0u, 0x000003a3u, 0x000003a7u, 0x000003abu, 0x000003aeu, 0x000003b1u, 0x000003b4u, 0x000003b8u, 0x000003bdu, 0x000003c2u, 0x0003003eu, 0x00000717u, 0x0000039du, 0x0003003eu, 0x00000718u, 0x000003a0u, 0x0003003eu, 0x00000719u, 0x000003a3u, 0x0003003eu, 0x0000071au, 0x000003a7u, 0x0003003eu, 0x0000071bu, 0x000003abu, 0x0003003eu, 0x0000071cu, 0x000003aeu, 0x0003003eu, 0x0000071du, 0x000003b1u, 0x0003003eu, 0x0000071eu, 0x000003b4u, 0x0003003eu, 0x0000071fu, 0x000003b8u, 0x0003003eu, 0x00000720u, 0x000003bdu, 0x0003003eu, 0x00000721u, 0x000003c2u, 0x0003003eu, 0x0000074eu, 0x0000039du, 0x0003003eu, 0x0000074fu, 0x000003a0u, 0x0003003eu, 0x00000750u, 0x000003a3u, 0x0003003eu, 0x00000751u, 0x000003a7u, 0x0003003eu, 0x00000752u, 0x000003abu, 0x0003003eu, 0x00000753u, 0x000003aeu, 0x0003003eu, 0x00000754u, 0x000003b1u, 0x0003003eu, 0x00000755u, 0x000003b4u, 0x0003003eu, 0x00000756u, 0x000003b8u, 0x0003003eu, 0x00000757u, 0x000003bdu, 0x0003003eu, 0x00000758u, 0x000003c2u, 0x0003003eu, 0x00000770u, 0x0000039du, 0x0003003eu, 0x00000771u, 0x000003a0u, 0x0003003eu, 0x00000772u, 0x000003a3u, 0x0003003eu, 0x00000773u, 0x000003a7u, 0x0003003eu, 0x00000774u, 0x000003abu, 0x0003003eu, 0x00000775u, 0x000003aeu, 0x0003003eu, 0x00000776u, 0x000003b1u, 0x0003003eu, 0x00000777u, 0x000003b4u, 0x0003003eu, 0x00000778u, 0x000003b8u, 0x0003003eu, 0x00000779u, 0x000003bdu, 0x0003003eu, 0x00000289u, 0x00000272u, 0x0003003eu, 0x0000028bu, 0x00000282u, 0x0003003eu, 0x0000028du, 0x00000266u, 0x0003003eu, 0x000003c4u, 0x00000141u, 0x000300f7u, 0x000003d0u, 0x00000000u, 0x000300fbu, 0x0000004bu, 0x000003d1u, 0x000200f8u, 0x000003d1u, 0x00050041u, 0x00000014u, 0x000003d2u, 0x00000289u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000003d3u, 0x000003d2u, 0x00050084u, 0x00000006u, 0x000003d4u, 0x000003d3u, 0x00000086u, 0x0003003eu, 0x000003c6u, 0x000003d4u, 0x00050041u, 0x00000014u, 0x000003d5u, 0x0000028bu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000003d6u, 0x000003d5u, 0x00050084u, 0x00000006u, 0x000003d7u, 0x000003d6u, 0x00000086u, 0x00050080u, 0x00000006u, 0x000003d8u, 0x000003d7u, 0x00000080u, 0x0003003eu, 0x000003c7u, 0x000003d8u, 0x00050084u, 0x00000006u, 0x000003ddu, 0x00000266u, 0x000003a7u, 0x0007000cu, 0x00000006u, 0x000003deu, 0x00000001u, 0x0000002au, 0x000003d4u, 0x000003ddu, 0x0003003eu, 0x000003c6u, 0x000003deu, 0x00050084u, 0x00000006u, 0x000003e3u, 0x00000266u, 0x000003b8u, 0x00050082u, 0x00000006u, 0x000003e4u, 0x000003e3u, 0x000000aau, 0x0007000cu, 0x00000006u, 0x000003e5u, 0x00000001u, 0x00000027u, 0x000003d8u, 0x000003e4u, 0x0003003eu, 0x000003c7u, 0x000003e5u, 0x000500b1u, 0x0000001eu, 0x000003e8u, 0x000003e5u, 0x000003deu, 0x000300f7u, 0x000003e9u, 0x00000000u, 0x000400fau, 0x000003e8u, 0x000003eau, 0x000003e9u, 0x000200f8u, 0x000003eau, 0x0003003eu, 0x000003c4u, 0x000001c5u, 0x0003003eu, 0x000003c5u, 0x00000141u, 0x000200f9u, 0x000003d0u, 0x000200f8u, 0x000003e9u, 0x000500c7u, 0x00000006u, 0x000003edu, 0x000003bdu, 0x000000aau, 0x000500abu, 0x0000001eu, 0x000003eeu, 0x000003edu, 0x00000096u, 0x0003003eu, 0x000003c8u, 0x000003eeu, 0x00050084u, 0x00000006u, 0x000003f4u, 0x000003abu, 0x00000266u, 0x00050050u, 0x00000020u, 0x000003f5u, 0x000003f4u, 0x000003f4u, 0x00050080u, 0x00000020u, 0x000003f6u, 0x000003f5u, 0x00000150u, 0x00050050u, 0x00000020u, 0x000003f8u, 0x000003deu, 0x000003deu, 0x00050050u, 0x00000020u, 0x000003fau, 0x000003e5u, 0x000003e5u, 0x0008000cu, 0x00000020u, 0x000003fbu, 0x00000001u, 0x0000002du, 0x000003f6u, 0x000003f8u, 0x000003fau, 0x00050051u, 0x00000006u, 0x000003fcu, 0x000003fbu, 0x00000000u, 0x00050051u, 0x00000006u, 0x000003fdu, 0x000003fbu, 0x00000001u, 0x00070050u, 0x00000007u, 0x000003feu, 0x000003deu, 0x000003e5u, 0x000003fcu, 0x000003fdu, 0x0003003eu, 0x000003c9u, 0x000003feu, 0x000e0050u, 0x0000001cu, 0x0000078eu, 0x0000039du, 0x000003a0u, 0x000003a3u, 0x000003a7u, 0x000003abu, 0x000003aeu, 0x000003b1u, 0x000003b4u, 0x000003b8u, 0x000003bdu, 0x000006cfu, 0x0003003eu, 0x00000707u, 0x0000039du, 0x0003003eu, 0x00000708u, 0x000003a0u, 0x0003003eu, 0x00000709u, 0x000003a3u, 0x0003003eu, 0x0000070au, 0x000003a7u, 0x0003003eu, 0x0000070bu, 0x000003abu, 0x0003003eu, 0x0000070cu, 0x000003aeu, 0x0003003eu, 0x0000070du, 0x000003b1u, 0x0003003eu, 0x0000070eu, 0x000003b4u, 0x0003003eu, 0x000003ccu, 0x000003feu, 0x0003003eu, 0x000003cdu, 0x000003eeu, 0x0003003eu, 0x000003ceu, 0x00000266u, 0x000500c7u, 0x00000006u, 0x00000438u, 0x000003a7u, 0x00000083u, 0x0003003eu, 0x00000416u, 0x00000438u, 0x0003003eu, 0x00000417u, 0x000003abu, 0x00050084u, 0x00000006u, 0x0000043du, 0x00000438u, 0x00000266u, 0x0003003eu, 0x00000416u, 0x0000043du, 0x0003003eu, 0x00000417u, 0x000003f4u, 0x00070050u, 0x00000007u, 0x00000443u, 0x0000043du, 0x0000043du, 0x0000043du, 0x0000043du, 0x00050082u, 0x00000007u, 0x00000444u, 0x000003feu, 0x00000443u, 0x00050084u, 0x00000006u, 0x00000448u, 0x00000266u, 0x0000039du, 0x0003003eu, 0x0000041au, 0x00000444u, 0x0003003eu, 0x0000041bu, 0x000003aeu, 0x0003003eu, 0x0000041cu, 0x00000448u, 0x00070050u, 0x00000007u, 0x000004aeu, 0x000003aeu, 0x000003aeu, 0x000003aeu, 0x000003aeu, 0x00050098u, 0x00000066u, 0x000004afu, 0x00000444u, 0x000004aeu, 0x00050051u, 0x00000007u, 0x000004b0u, 0x000004afu, 0x00000000u, 0x0003003eu, 0x000004a9u, 0x000004b0u, 0x00050051u, 0x00000007u, 0x000004b1u, 0x000004afu, 0x00000001u, 0x0003003eu, 0x000004a8u, 0x000004b1u, 0x0004007cu, 0x0000006bu, 0x000004b3u, 0x000004b0u, 0x0004007cu, 0x00000030u, 0x000004b5u, 0x00000448u, 0x00070050u, 0x0000006bu, 0x000004b6u, 0x000004b5u, 0x000004b5u, 0x000004b5u, 0x000004b5u, 0x00050095u, 0x00000072u, 0x000004b7u, 0x000004b3u, 0x000004b6u, 0x00050051u, 0x0000006bu, 0x000004b8u, 0x000004b7u, 0x00000001u, 0x0003003eu, 0x000004aau, 0x000004b8u, 0x00050051u, 0x0000006bu, 0x000004b9u, 0x000004b7u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004bau, 0x000004b9u, 0x0003003eu, 0x000004a9u, 0x000004bau, 0x0004007cu, 0x00000007u, 0x000004bcu, 0x000004b8u, 0x00050080u, 0x00000007u, 0x000004beu, 0x000004b1u, 0x000004bcu, 0x0003003eu, 0x000004a8u, 0x000004beu, 0x0003003eu, 0x0000041du, 0x000004beu, 0x0003003eu, 0x000004abu, 0x000004bau, 0x0003003eu, 0x00000419u, 0x000004beu, 0x0003003eu, 0x00000418u, 0x000004bau, 0x00050084u, 0x00000006u, 0x00000454u, 0x00000266u, 0x000003a0u, 0x0003003eu, 0x00000420u, 0x00000444u, 0x0003003eu, 0x00000421u, 0x000003b1u, 0x0003003eu, 0x00000422u, 0x00000454u, 0x00070050u, 0x00000007u, 0x000004c7u, 0x000003b1u, 0x000003b1u, 0x000003b1u, 0x000003b1u, 0x00050098u, 0x00000066u, 0x000004c8u, 0x00000444u, 0x000004c7u, 0x00050051u, 0x00000007u, 0x000004c9u, 0x000004c8u, 0x00000000u, 0x0003003eu, 0x000004c2u, 0x000004c9u, 0x00050051u, 0x00000007u, 0x000004cau, 0x000004c8u, 0x00000001u, 0x0003003eu, 0x000004c1u, 0x000004cau, 0x0004007cu, 0x0000006bu, 0x000004ccu, 0x000004c9u, 0x0004007cu, 0x00000030u, 0x000004ceu, 0x00000454u, 0x00070050u, 0x0000006bu, 0x000004cfu, 0x000004ceu, 0x000004ceu, 0x000004ceu, 0x000004ceu, 0x00050095u, 0x00000072u, 0x000004d0u, 0x000004ccu, 0x000004cfu, 0x00050051u, 0x0000006bu, 0x000004d1u, 0x000004d0u, 0x00000001u, 0x0003003eu, 0x000004c3u, 0x000004d1u, 0x00050051u, 0x0000006bu, 0x000004d2u, 0x000004d0u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004d3u, 0x000004d2u, 0x0003003eu, 0x000004c2u, 0x000004d3u, 0x0004007cu, 0x00000007u, 0x000004d5u, 0x000004d1u, 0x00050080u, 0x00000007u, 0x000004d7u, 0x000004cau, 0x000004d5u, 0x0003003eu, 0x000004c1u, 0x000004d7u, 0x0003003eu, 0x00000423u, 0x000004d7u, 0x0003003eu, 0x000004c4u, 0x000004d3u, 0x0003003eu, 0x0000041fu, 0x000004d7u, 0x0003003eu, 0x0000041eu, 0x000004d3u, 0x00070050u, 0x00000007u, 0x0000045bu, 0x000003f4u, 0x000003f4u, 0x000003f4u, 0x000003f4u, 0x00050082u, 0x00000007u, 0x0000045cu, 0x000003feu, 0x0000045bu, 0x00050084u, 0x00000006u, 0x00000460u, 0x00000266u, 0x000003a3u, 0x0003003eu, 0x00000426u, 0x0000045cu, 0x0003003eu, 0x00000427u, 0x000003b4u, 0x0003003eu, 0x00000428u, 0x00000460u, 0x00070050u, 0x00000007u, 0x000004e0u, 0x000003b4u, 0x000003b4u, 0x000003b4u, 0x000003b4u, 0x00050098u, 0x00000066u, 0x000004e1u, 0x0000045cu, 0x000004e0u, 0x00050051u, 0x00000007u, 0x000004e2u, 0x000004e1u, 0x00000000u, 0x0003003eu, 0x000004dbu, 0x000004e2u, 0x00050051u, 0x00000007u, 0x000004e3u, 0x000004e1u, 0x00000001u, 0x0003003eu, 0x000004dau, 0x000004e3u, 0x0004007cu, 0x0000006bu, 0x000004e5u, 0x000004e2u, 0x0004007cu, 0x00000030u, 0x000004e7u, 0x00000460u, 0x00070050u, 0x0000006bu, 0x000004e8u, 0x000004e7u, 0x000004e7u, 0x000004e7u, 0x000004e7u, 0x00050095u, 0x00000072u, 0x000004e9u, 0x000004e5u, 0x000004e8u, 0x00050051u, 0x0000006bu, 0x000004eau, 0x000004e9u, 0x00000001u, 0x0003003eu, 0x000004dcu, 0x000004eau, 0x00050051u, 0x0000006bu, 0x000004ebu, 0x000004e9u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004ecu, 0x000004ebu, 0x0003003eu, 0x000004dbu, 0x000004ecu, 0x0004007cu, 0x00000007u, 0x000004eeu, 0x000004eau, 0x00050080u, 0x00000007u, 0x000004f0u, 0x000004e3u, 0x000004eeu, 0x0003003eu, 0x000004dau, 0x000004f0u, 0x0003003eu, 0x00000429u, 0x000004f0u, 0x0003003eu, 0x000004ddu, 0x000004ecu, 0x0003003eu, 0x00000425u, 0x000004f0u, 0x0003003eu, 0x00000424u, 0x000004ecu, 0x00050084u, 0x00000006u, 0x0000046bu, 0x00000266u, 0x000003abu, 0x00070050u, 0x00000007u, 0x0000046cu, 0x0000046bu, 0x0000046bu, 0x0000046bu, 0x0000046bu, 0x000500b1u, 0x000000d3u, 0x0000046du, 0x000003feu, 0x0000046cu, 0x000600a9u, 0x00000007u, 0x0000046eu, 0x0000046du, 0x000004d3u, 0x000004ecu, 0x0003003eu, 0x00000424u, 0x0000046eu, 0x000600a9u, 0x00000007u, 0x00000478u, 0x0000046du, 0x000004d7u, 0x000004f0u, 0x0003003eu, 0x00000425u, 0x00000478u, 0x000500adu, 0x000000d3u, 0x0000047bu, 0x000004beu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x0000047cu, 0x0000047bu, 0x000000e2u, 0x000004bau, 0x0003003eu, 0x00000418u, 0x0000047cu, 0x000500b1u, 0x000000d3u, 0x0000047fu, 0x000004beu, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x00000480u, 0x0000047fu, 0x000000e9u, 0x0000047cu, 0x0003003eu, 0x00000418u, 0x00000480u, 0x000500adu, 0x000000d3u, 0x00000483u, 0x00000478u, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x00000484u, 0x00000483u, 0x000000e2u, 0x0000046eu, 0x0003003eu, 0x00000424u, 0x00000484u, 0x000500b1u, 0x000000d3u, 0x00000487u, 0x00000478u, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x00000488u, 0x00000487u, 0x000000e9u, 0x00000484u, 0x0003003eu, 0x00000424u, 0x00000488u, 0x0003003eu, 0x0000042bu, 0x00000480u, 0x000500c3u, 0x00000007u, 0x000004f6u, 0x00000480u, 0x00000846u, 0x0003003eu, 0x000004f3u, 0x000004f6u, 0x0003003eu, 0x0000042au, 0x000004f6u, 0x0003003eu, 0x0000042du, 0x00000488u, 0x000500c3u, 0x00000007u, 0x000004fau, 0x00000488u, 0x00000846u, 0x0003003eu, 0x000004f7u, 0x000004fau, 0x0003003eu, 0x0000042cu, 0x000004fau, 0x000300f7u, 0x0000048eu, 0x00000000u, 0x000400fau, 0x000003eeu, 0x0000048fu, 0x00000490u, 0x000200f8u, 0x0000048fu, 0x0003003eu, 0x0000042eu, 0x000004f6u, 0x0003003eu, 0x0000042fu, 0x000004fau, 0x000200f9u, 0x0000048eu, 0x000200f8u, 0x00000490u, 0x0003003eu, 0x0000042eu, 0x000004fau, 0x0003003eu, 0x0000042fu, 0x000004f6u, 0x000200f9u, 0x0000048eu, 0x000200f8u, 0x0000048eu, 0x00070050u, 0x000000d3u, 0x00000847u, 0x000003eeu, 0x000003eeu, 0x000003eeu, 0x000003eeu, 0x000600a9u, 0x00000007u, 0x00000848u, 0x00000847u, 0x000004fau, 0x000004f6u, 0x000600a9u, 0x00000007u, 0x0000084au, 0x00000847u, 0x000004f6u, 0x000004fau, 0x0006000cu, 0x00000007u, 0x00000496u, 0x00000001u, 0x00000005u, 0x0000084au, 0x0006000cu, 0x00000007u, 0x00000498u, 0x00000001u, 0x00000005u, 0x00000848u, 0x0007000cu, 0x00000007u, 0x00000499u, 0x00000001u, 0x0000002au, 0x00000496u, 0x00000498u, 0x0003003eu, 0x00000431u, 0x00000499u, 0x0007004fu, 0x00000020u, 0x000004feu, 0x00000499u, 0x00000499u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000500u, 0x00000499u, 0x00000499u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000501u, 0x00000001u, 0x0000002au, 0x000004feu, 0x00000500u, 0x0003003eu, 0x000004fbu, 0x00000501u, 0x00050041u, 0x00000014u, 0x00000502u, 0x000004fbu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000503u, 0x00000502u, 0x00050041u, 0x00000014u, 0x00000504u, 0x000004fbu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000505u, 0x00000504u, 0x0007000cu, 0x00000006u, 0x00000506u, 0x00000001u, 0x0000002au, 0x00000503u, 0x00000505u, 0x0003003eu, 0x000004fcu, 0x00000506u, 0x0003003eu, 0x00000430u, 0x00000506u, 0x00050084u, 0x00000006u, 0x0000049du, 0x00000112u, 0x00000266u, 0x000500b3u, 0x0000001eu, 0x0000049eu, 0x00000506u, 0x0000049du, 0x000300f7u, 0x0000049fu, 0x00000000u, 0x000400fau, 0x0000049eu, 0x000004a0u, 0x000004a1u, 0x000200f8u, 0x000004a0u, 0x0003003eu, 0x00000433u, 0x0000084au, 0x0007004fu, 0x00000020u, 0x0000050au, 0x0000084au, 0x0000084au, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x0000050cu, 0x0000084au, 0x0000084au, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x0000050du, 0x00000001u, 0x00000027u, 0x0000050au, 0x0000050cu, 0x0003003eu, 0x00000507u, 0x0000050du, 0x00050041u, 0x00000014u, 0x0000050eu, 0x00000507u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000050fu, 0x0000050eu, 0x00050041u, 0x00000014u, 0x00000510u, 0x00000507u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000511u, 0x00000510u, 0x0007000cu, 0x00000006u, 0x00000512u, 0x00000001u, 0x00000027u, 0x0000050fu, 0x00000511u, 0x0003003eu, 0x00000508u, 0x00000512u, 0x0003003eu, 0x00000434u, 0x00000848u, 0x0007004fu, 0x00000020u, 0x00000516u, 0x00000848u, 0x00000848u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000518u, 0x00000848u, 0x00000848u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000519u, 0x00000001u, 0x0000002au, 0x00000516u, 0x00000518u, 0x0003003eu, 0x00000513u, 0x00000519u, 0x00050041u, 0x00000014u, 0x0000051au, 0x00000513u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000051bu, 0x0000051au, 0x00050041u, 0x00000014u, 0x0000051cu, 0x00000513u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000051du, 0x0000051cu, 0x0007000cu, 0x00000006u, 0x0000051eu, 0x00000001u, 0x0000002au, 0x0000051bu, 0x0000051du, 0x0003003eu, 0x00000514u, 0x0000051eu, 0x00050050u, 0x00000020u, 0x000004a6u, 0x00000512u, 0x0000051eu, 0x0003003eu, 0x00000432u, 0x000004a6u, 0x000200f9u, 0x0000049fu, 0x000200f8u, 0x000004a1u, 0x0003003eu, 0x00000432u, 0x00000121u, 0x000200f9u, 0x0000049fu, 0x000200f8u, 0x0000049fu, 0x000700f5u, 0x00000020u, 0x000007dbu, 0x000004a6u, 0x000004a0u, 0x00000121u, 0x000004a1u, 0x0003003eu, 0x00000435u, 0x000007dbu, 0x0003003eu, 0x000003cau, 0x000007dbu, 0x00050041u, 0x00000014u, 0x00000404u, 0x000003cau, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000405u, 0x00000404u, 0x00050041u, 0x00000014u, 0x00000406u, 0x00000289u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000407u, 0x00000406u, 0x0007000cu, 0x00000006u, 0x00000408u, 0x00000001u, 0x0000002au, 0x00000405u, 0x00000407u, 0x0003003eu, 0x00000404u, 0x00000408u, 0x00050041u, 0x00000014u, 0x0000040au, 0x000003cau, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000040bu, 0x0000040au, 0x00050041u, 0x00000014u, 0x0000040cu, 0x0000028bu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000040du, 0x0000040cu, 0x0007000cu, 0x00000006u, 0x0000040eu, 0x00000001u, 0x00000027u, 0x0000040bu, 0x0000040du, 0x0003003eu, 0x0000040au, 0x0000040eu, 0x0004003du, 0x00000006u, 0x00000411u, 0x00000404u, 0x0004003du, 0x00000006u, 0x00000413u, 0x0000040au, 0x000500b3u, 0x0000001eu, 0x00000414u, 0x00000411u, 0x00000413u, 0x0003003eu, 0x000003c4u, 0x000001c5u, 0x0003003eu, 0x000003c5u, 0x00000414u, 0x000200f9u, 0x000003d0u, 0x000200f8u, 0x000003d0u, 0x000700f5u, 0x0000001eu, 0x000007dcu, 0x00000141u, 0x000003eau, 0x00000414u, 0x0000049fu, 0x0003003eu, 0x000003cfu, 0x000007dcu, 0x0003003eu, 0x0000024du, 0x000007dcu, 0x000200f9u, 0x0000025eu, 0x000200f8u, 0x0000025eu, 0x000700f5u, 0x0000001eu, 0x000007deu, 0x00000141u, 0x00000251u, 0x000007dcu, 0x000003d0u, 0x000200f9u, 0x00000252u, 0x000200f8u, 0x00000252u, 0x000700f5u, 0x0000001eu, 0x000007ddu, 0x00000141u, 0x00000005u, 0x000007deu, 0x0000025eu, 0x00050153u, 0x0000006bu, 0x00000291u, 0x000001beu, 0x000007ddu, 0x00050051u, 0x00000030u, 0x00000292u, 0x00000291u, 0x00000000u, 0x0003003eu, 0x0000028fu, 0x00000292u, 0x0003003eu, 0x00000293u, 0x0000004bu, 0x000200f9u, 0x00000294u, 0x000200f8u, 0x00000294u, 0x000700f5u, 0x00000030u, 0x000007ecu, 0x0000004bu, 0x00000252u, 0x0000082eu, 0x00000297u, 0x000700f5u, 0x00000030u, 0x000007dfu, 0x00000292u, 0x00000252u, 0x000002a2u, 0x00000297u, 0x000500abu, 0x0000001eu, 0x0000029au, 0x000007dfu, 0x0000004bu, 0x000400f6u, 0x00000296u, 0x00000297u, 0x00000000u, 0x000400fau, 0x0000029au, 0x00000295u, 0x00000296u, 0x000200f8u, 0x00000295u, 0x0006000cu, 0x00000006u, 0x0000029du, 0x00000001u, 0x00000049u, 0x000007dfu, 0x0003003eu, 0x0000029bu, 0x0000029du, 0x000500c4u, 0x00000030u, 0x0000029fu, 0x0000004eu, 0x0000029du, 0x000400c8u, 0x00000030u, 0x000002a0u, 0x0000029fu, 0x000500c7u, 0x00000030u, 0x000002a2u, 0x000007dfu, 0x000002a0u, 0x0003003eu, 0x0000028fu, 0x000002a2u, 0x00050084u, 0x00000006u, 0x000002a5u, 0x000001e7u, 0x0000024fu, 0x00050080u, 0x00000006u, 0x000002a7u, 0x000002a5u, 0x0000029du, 0x0004007cu, 0x00000030u, 0x000002a8u, 0x000002a7u, 0x0003003eu, 0x000002a3u, 0x000002a8u, 0x0003003eu, 0x000002aau, 0x000002a8u, 0x00060041u, 0x000001b4u, 0x00000522u, 0x000001b2u, 0x00000096u, 0x000002a8u, 0x0004003du, 0x00000007u, 0x00000523u, 0x00000522u, 0x0003003eu, 0x0000051fu, 0x00000523u, 0x00050041u, 0x00000014u, 0x00000524u, 0x0000051fu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000525u, 0x00000524u, 0x00050041u, 0x00000014u, 0x00000526u, 0x0000051fu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000527u, 0x00000526u, 0x00050041u, 0x00000014u, 0x00000528u, 0x0000051fu, 0x000001bbu, 0x0004003du, 0x00000006u, 0x00000529u, 0x00000528u, 0x00050041u, 0x00000014u, 0x0000052au, 0x0000051fu, 0x000001beu, 0x0004003du, 0x00000006u, 0x0000052bu, 0x0000052au, 0x00070050u, 0x00000036u, 0x0000052cu, 0x00000525u, 0x00000527u, 0x00000529u, 0x0000052bu, 0x0003003eu, 0x000006fau, 0x00000525u, 0x0003003eu, 0x000006fbu, 0x00000527u, 0x0003003eu, 0x000006fcu, 0x00000529u, 0x0003003eu, 0x000006fdu, 0x0000052bu, 0x0003003eu, 0x0000078fu, 0x00000525u, 0x0003003eu, 0x00000790u, 0x00000527u, 0x0003003eu, 0x00000791u, 0x00000529u, 0x0003003eu, 0x00000792u, 0x0000052bu, 0x00050050u, 0x00000020u, 0x000002b3u, 0x00000525u, 0x00000527u, 0x000500c3u, 0x00000020u, 0x000002b5u, 0x000002b3u, 0x00000845u, 0x00050050u, 0x00000020u, 0x000002b6u, 0x00000266u, 0x00000266u, 0x00050084u, 0x00000020u, 0x000002b7u, 0x000002b6u, 0x000002b5u, 0x0007000cu, 0x00000020u, 0x000002b8u, 0x00000001u, 0x0000002au, 0x0000023eu, 0x000002b7u, 0x0003003eu, 0x000002adu, 0x000002b8u, 0x00050080u, 0x00000006u, 0x000002bdu, 0x00000529u, 0x00000080u, 0x00050080u, 0x00000006u, 0x000002c0u, 0x0000052bu, 0x00000080u, 0x00050050u, 0x00000020u, 0x000002c1u, 0x000002bdu, 0x000002c0u, 0x000500c3u, 0x00000020u, 0x000002c3u, 0x000002c1u, 0x00000845u, 0x00050084u, 0x00000020u, 0x000002c5u, 0x000002b6u, 0x000002c3u, 0x00050082u, 0x00000020u, 0x000002c7u, 0x000002c5u, 0x00000844u, 0x0007000cu, 0x00000020u, 0x000002c8u, 0x00000001u, 0x00000027u, 0x00000248u, 0x000002c7u, 0x0003003eu, 0x000002b9u, 0x000002c8u, 0x0003003eu, 0x000002cau, 0x000002a8u, 0x00070041u, 0x00000180u, 0x0000052fu, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x00000096u, 0x0004003du, 0x00000006u, 0x00000530u, 0x0000052fu, 0x00070041u, 0x00000180u, 0x00000532u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x000000aau, 0x0004003du, 0x00000006u, 0x00000533u, 0x00000532u, 0x00070041u, 0x00000180u, 0x00000535u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000536u, 0x00000535u, 0x00070041u, 0x0000018au, 0x00000538u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x00000080u, 0x0004003du, 0x00000178u, 0x00000539u, 0x00000538u, 0x00040072u, 0x00000006u, 0x0000053au, 0x00000539u, 0x00070041u, 0x0000018au, 0x0000053cu, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x00000086u, 0x0004003du, 0x00000178u, 0x0000053du, 0x0000053cu, 0x00040072u, 0x00000006u, 0x0000053eu, 0x0000053du, 0x00070041u, 0x00000180u, 0x00000540u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x00000094u, 0x0004003du, 0x00000006u, 0x00000541u, 0x00000540u, 0x00070041u, 0x00000180u, 0x00000543u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000544u, 0x00000543u, 0x00070041u, 0x00000180u, 0x00000546u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x00000547u, 0x00000546u, 0x00070041u, 0x0000018au, 0x00000549u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x00000136u, 0x0004003du, 0x00000178u, 0x0000054au, 0x00000549u, 0x00040072u, 0x00000006u, 0x0000054bu, 0x0000054au, 0x00070041u, 0x000001a0u, 0x0000054du, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x00000144u, 0x0004003du, 0x00000179u, 0x0000054eu, 0x0000054du, 0x00040071u, 0x00000030u, 0x0000054fu, 0x0000054eu, 0x0004007cu, 0x00000006u, 0x00000550u, 0x0000054fu, 0x00070041u, 0x000001a0u, 0x00000552u, 0x0000017eu, 0x00000096u, 0x000002a8u, 0x000001a6u, 0x0004003du, 0x00000179u, 0x00000553u, 0x00000552u, 0x00040071u, 0x00000030u, 0x00000554u, 0x00000553u, 0x0004007cu, 0x00000006u, 0x00000555u, 0x00000554u, 0x000e0050u, 0x0000001cu, 0x00000556u, 0x00000530u, 0x00000533u, 0x00000536u, 0x0000053au, 0x0000053eu, 0x00000541u, 0x00000544u, 0x00000547u, 0x0000054bu, 0x00000550u, 0x00000555u, 0x0003003eu, 0x000006d8u, 0x00000530u, 0x0003003eu, 0x000006d9u, 0x00000533u, 0x0003003eu, 0x000006dau, 0x00000536u, 0x0003003eu, 0x000006dbu, 0x0000053au, 0x0003003eu, 0x000006dcu, 0x0000053eu, 0x0003003eu, 0x000006ddu, 0x00000541u, 0x0003003eu, 0x000006deu, 0x00000544u, 0x0003003eu, 0x000006dfu, 0x00000547u, 0x0003003eu, 0x000006e0u, 0x0000054bu, 0x0003003eu, 0x000006e1u, 0x00000550u, 0x0003003eu, 0x000006e2u, 0x00000555u, 0x0003003eu, 0x00000797u, 0x00000530u, 0x0003003eu, 0x00000798u, 0x00000533u, 0x0003003eu, 0x00000799u, 0x00000536u, 0x0003003eu, 0x0000079au, 0x0000053au, 0x0003003eu, 0x0000079bu, 0x0000053eu, 0x0003003eu, 0x0000079cu, 0x00000541u, 0x0003003eu, 0x0000079du, 0x00000544u, 0x0003003eu, 0x0000079eu, 0x00000547u, 0x0003003eu, 0x0000079fu, 0x0000054bu, 0x0003003eu, 0x000007a0u, 0x00000550u, 0x0003003eu, 0x000007a1u, 0x00000555u, 0x0003003eu, 0x000007b9u, 0x00000530u, 0x0003003eu, 0x000007bau, 0x00000533u, 0x0003003eu, 0x000007bbu, 0x00000536u, 0x0003003eu, 0x000007bcu, 0x0000053au, 0x0003003eu, 0x000007bdu, 0x0000053eu, 0x0003003eu, 0x000007beu, 0x00000541u, 0x0003003eu, 0x000007bfu, 0x00000544u, 0x0003003eu, 0x000007c0u, 0x00000547u, 0x0003003eu, 0x000007c1u, 0x0000054bu, 0x0003003eu, 0x000007c2u, 0x00000550u, 0x0003003eu, 0x000002cfu, 0x000002b8u, 0x0003003eu, 0x000002d1u, 0x000002c8u, 0x0003003eu, 0x000002d3u, 0x00000266u, 0x0003003eu, 0x00000557u, 0x00000141u, 0x000300f7u, 0x00000563u, 0x00000000u, 0x000300fbu, 0x0000004bu, 0x00000564u, 0x000200f8u, 0x00000564u, 0x00050041u, 0x00000014u, 0x00000565u, 0x000002cfu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000566u, 0x00000565u, 0x00050084u, 0x00000006u, 0x00000567u, 0x00000566u, 0x00000086u, 0x0003003eu, 0x00000559u, 0x00000567u, 0x00050041u, 0x00000014u, 0x00000568u, 0x000002d1u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000569u, 0x00000568u, 0x00050084u, 0x00000006u, 0x0000056au, 0x00000569u, 0x00000086u, 0x00050080u, 0x00000006u, 0x0000056bu, 0x0000056au, 0x00000080u, 0x0003003eu, 0x0000055au, 0x0000056bu, 0x00050084u, 0x00000006u, 0x00000570u, 0x00000266u, 0x0000053au, 0x0007000cu, 0x00000006u, 0x00000571u, 0x00000001u, 0x0000002au, 0x00000567u, 0x00000570u, 0x0003003eu, 0x00000559u, 0x00000571u, 0x00050084u, 0x00000006u, 0x00000576u, 0x00000266u, 0x0000054bu, 0x00050082u, 0x00000006u, 0x00000577u, 0x00000576u, 0x000000aau, 0x0007000cu, 0x00000006u, 0x00000578u, 0x00000001u, 0x00000027u, 0x0000056bu, 0x00000577u, 0x0003003eu, 0x0000055au, 0x00000578u, 0x000500b1u, 0x0000001eu, 0x0000057bu, 0x00000578u, 0x00000571u, 0x000300f7u, 0x0000057cu, 0x00000000u, 0x000400fau, 0x0000057bu, 0x0000057du, 0x0000057cu, 0x000200f8u, 0x0000057du, 0x0003003eu, 0x00000557u, 0x000001c5u, 0x0003003eu, 0x00000558u, 0x00000141u, 0x000200f9u, 0x00000563u, 0x000200f8u, 0x0000057cu, 0x000500c7u, 0x00000006u, 0x00000580u, 0x00000550u, 0x000000aau, 0x000500abu, 0x0000001eu, 0x00000581u, 0x00000580u, 0x00000096u, 0x0003003eu, 0x0000055bu, 0x00000581u, 0x00050084u, 0x00000006u, 0x00000587u, 0x0000053eu, 0x00000266u, 0x00050050u, 0x00000020u, 0x00000588u, 0x00000587u, 0x00000587u, 0x00050080u, 0x00000020u, 0x00000589u, 0x00000588u, 0x00000150u, 0x00050050u, 0x00000020u, 0x0000058bu, 0x00000571u, 0x00000571u, 0x00050050u, 0x00000020u, 0x0000058du, 0x00000578u, 0x00000578u, 0x0008000cu, 0x00000020u, 0x0000058eu, 0x00000001u, 0x0000002du, 0x00000589u, 0x0000058bu, 0x0000058du, 0x00050051u, 0x00000006u, 0x0000058fu, 0x0000058eu, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000590u, 0x0000058eu, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000591u, 0x00000571u, 0x00000578u, 0x0000058fu, 0x00000590u, 0x0003003eu, 0x0000055cu, 0x00000591u, 0x000e0050u, 0x0000001cu, 0x000007d7u, 0x00000530u, 0x00000533u, 0x00000536u, 0x0000053au, 0x0000053eu, 0x00000541u, 0x00000544u, 0x00000547u, 0x0000054bu, 0x00000550u, 0x000006cfu, 0x0003003eu, 0x000006c7u, 0x00000530u, 0x0003003eu, 0x000006c8u, 0x00000533u, 0x0003003eu, 0x000006c9u, 0x00000536u, 0x0003003eu, 0x000006cau, 0x0000053au, 0x0003003eu, 0x000006cbu, 0x0000053eu, 0x0003003eu, 0x000006ccu, 0x00000541u, 0x0003003eu, 0x000006cdu, 0x00000544u, 0x0003003eu, 0x000006ceu, 0x00000547u, 0x0003003eu, 0x0000055fu, 0x00000591u, 0x0003003eu, 0x00000560u, 0x00000581u, 0x0003003eu, 0x00000561u, 0x00000266u, 0x000500c7u, 0x00000006u, 0x000005cbu, 0x0000053au, 0x00000083u, 0x0003003eu, 0x000005a9u, 0x000005cbu, 0x0003003eu, 0x000005aau, 0x0000053eu, 0x00050084u, 0x00000006u, 0x000005d0u, 0x000005cbu, 0x00000266u, 0x0003003eu, 0x000005a9u, 0x000005d0u, 0x0003003eu, 0x000005aau, 0x00000587u, 0x00070050u, 0x00000007u, 0x000005d6u, 0x000005d0u, 0x000005d0u, 0x000005d0u, 0x000005d0u, 0x00050082u, 0x00000007u, 0x000005d7u, 0x00000591u, 0x000005d6u, 0x00050084u, 0x00000006u, 0x000005dbu, 0x00000266u, 0x00000530u, 0x0003003eu, 0x000005adu, 0x000005d7u, 0x0003003eu, 0x000005aeu, 0x00000541u, 0x0003003eu, 0x000005afu, 0x000005dbu, 0x00070050u, 0x00000007u, 0x00000641u, 0x00000541u, 0x00000541u, 0x00000541u, 0x00000541u, 0x00050098u, 0x00000066u, 0x00000642u, 0x000005d7u, 0x00000641u, 0x00050051u, 0x00000007u, 0x00000643u, 0x00000642u, 0x00000000u, 0x0003003eu, 0x0000063cu, 0x00000643u, 0x00050051u, 0x00000007u, 0x00000644u, 0x00000642u, 0x00000001u, 0x0003003eu, 0x0000063bu, 0x00000644u, 0x0004007cu, 0x0000006bu, 0x00000646u, 0x00000643u, 0x0004007cu, 0x00000030u, 0x00000648u, 0x000005dbu, 0x00070050u, 0x0000006bu, 0x00000649u, 0x00000648u, 0x00000648u, 0x00000648u, 0x00000648u, 0x00050095u, 0x00000072u, 0x0000064au, 0x00000646u, 0x00000649u, 0x00050051u, 0x0000006bu, 0x0000064bu, 0x0000064au, 0x00000001u, 0x0003003eu, 0x0000063du, 0x0000064bu, 0x00050051u, 0x0000006bu, 0x0000064cu, 0x0000064au, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000064du, 0x0000064cu, 0x0003003eu, 0x0000063cu, 0x0000064du, 0x0004007cu, 0x00000007u, 0x0000064fu, 0x0000064bu, 0x00050080u, 0x00000007u, 0x00000651u, 0x00000644u, 0x0000064fu, 0x0003003eu, 0x0000063bu, 0x00000651u, 0x0003003eu, 0x000005b0u, 0x00000651u, 0x0003003eu, 0x0000063eu, 0x0000064du, 0x0003003eu, 0x000005acu, 0x00000651u, 0x0003003eu, 0x000005abu, 0x0000064du, 0x00050084u, 0x00000006u, 0x000005e7u, 0x00000266u, 0x00000533u, 0x0003003eu, 0x000005b3u, 0x000005d7u, 0x0003003eu, 0x000005b4u, 0x00000544u, 0x0003003eu, 0x000005b5u, 0x000005e7u, 0x00070050u, 0x00000007u, 0x0000065au, 0x00000544u, 0x00000544u, 0x00000544u, 0x00000544u, 0x00050098u, 0x00000066u, 0x0000065bu, 0x000005d7u, 0x0000065au, 0x00050051u, 0x00000007u, 0x0000065cu, 0x0000065bu, 0x00000000u, 0x0003003eu, 0x00000655u, 0x0000065cu, 0x00050051u, 0x00000007u, 0x0000065du, 0x0000065bu, 0x00000001u, 0x0003003eu, 0x00000654u, 0x0000065du, 0x0004007cu, 0x0000006bu, 0x0000065fu, 0x0000065cu, 0x0004007cu, 0x00000030u, 0x00000661u, 0x000005e7u, 0x00070050u, 0x0000006bu, 0x00000662u, 0x00000661u, 0x00000661u, 0x00000661u, 0x00000661u, 0x00050095u, 0x00000072u, 0x00000663u, 0x0000065fu, 0x00000662u, 0x00050051u, 0x0000006bu, 0x00000664u, 0x00000663u, 0x00000001u, 0x0003003eu, 0x00000656u, 0x00000664u, 0x00050051u, 0x0000006bu, 0x00000665u, 0x00000663u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000666u, 0x00000665u, 0x0003003eu, 0x00000655u, 0x00000666u, 0x0004007cu, 0x00000007u, 0x00000668u, 0x00000664u, 0x00050080u, 0x00000007u, 0x0000066au, 0x0000065du, 0x00000668u, 0x0003003eu, 0x00000654u, 0x0000066au, 0x0003003eu, 0x000005b6u, 0x0000066au, 0x0003003eu, 0x00000657u, 0x00000666u, 0x0003003eu, 0x000005b2u, 0x0000066au, 0x0003003eu, 0x000005b1u, 0x00000666u, 0x00070050u, 0x00000007u, 0x000005eeu, 0x00000587u, 0x00000587u, 0x00000587u, 0x00000587u, 0x00050082u, 0x00000007u, 0x000005efu, 0x00000591u, 0x000005eeu, 0x00050084u, 0x00000006u, 0x000005f3u, 0x00000266u, 0x00000536u, 0x0003003eu, 0x000005b9u, 0x000005efu, 0x0003003eu, 0x000005bau, 0x00000547u, 0x0003003eu, 0x000005bbu, 0x000005f3u, 0x00070050u, 0x00000007u, 0x00000673u, 0x00000547u, 0x00000547u, 0x00000547u, 0x00000547u, 0x00050098u, 0x00000066u, 0x00000674u, 0x000005efu, 0x00000673u, 0x00050051u, 0x00000007u, 0x00000675u, 0x00000674u, 0x00000000u, 0x0003003eu, 0x0000066eu, 0x00000675u, 0x00050051u, 0x00000007u, 0x00000676u, 0x00000674u, 0x00000001u, 0x0003003eu, 0x0000066du, 0x00000676u, 0x0004007cu, 0x0000006bu, 0x00000678u, 0x00000675u, 0x0004007cu, 0x00000030u, 0x0000067au, 0x000005f3u, 0x00070050u, 0x0000006bu, 0x0000067bu, 0x0000067au, 0x0000067au, 0x0000067au, 0x0000067au, 0x00050095u, 0x00000072u, 0x0000067cu, 0x00000678u, 0x0000067bu, 0x00050051u, 0x0000006bu, 0x0000067du, 0x0000067cu, 0x00000001u, 0x0003003eu, 0x0000066fu, 0x0000067du, 0x00050051u, 0x0000006bu, 0x0000067eu, 0x0000067cu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000067fu, 0x0000067eu, 0x0003003eu, 0x0000066eu, 0x0000067fu, 0x0004007cu, 0x00000007u, 0x00000681u, 0x0000067du, 0x00050080u, 0x00000007u, 0x00000683u, 0x00000676u, 0x00000681u, 0x0003003eu, 0x0000066du, 0x00000683u, 0x0003003eu, 0x000005bcu, 0x00000683u, 0x0003003eu, 0x00000670u, 0x0000067fu, 0x0003003eu, 0x000005b8u, 0x00000683u, 0x0003003eu, 0x000005b7u, 0x0000067fu, 0x00050084u, 0x00000006u, 0x000005feu, 0x00000266u, 0x0000053eu, 0x00070050u, 0x00000007u, 0x000005ffu, 0x000005feu, 0x000005feu, 0x000005feu, 0x000005feu, 0x000500b1u, 0x000000d3u, 0x00000600u, 0x00000591u, 0x000005ffu, 0x000600a9u, 0x00000007u, 0x00000601u, 0x00000600u, 0x00000666u, 0x0000067fu, 0x0003003eu, 0x000005b7u, 0x00000601u, 0x000600a9u, 0x00000007u, 0x0000060bu, 0x00000600u, 0x0000066au, 0x00000683u, 0x0003003eu, 0x000005b8u, 0x0000060bu, 0x000500adu, 0x000000d3u, 0x0000060eu, 0x00000651u, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x0000060fu, 0x0000060eu, 0x000000e2u, 0x0000064du, 0x0003003eu, 0x000005abu, 0x0000060fu, 0x000500b1u, 0x000000d3u, 0x00000612u, 0x00000651u, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x00000613u, 0x00000612u, 0x000000e9u, 0x0000060fu, 0x0003003eu, 0x000005abu, 0x00000613u, 0x000500adu, 0x000000d3u, 0x00000616u, 0x0000060bu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x00000617u, 0x00000616u, 0x000000e2u, 0x00000601u, 0x0003003eu, 0x000005b7u, 0x00000617u, 0x000500b1u, 0x000000d3u, 0x0000061au, 0x0000060bu, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x0000061bu, 0x0000061au, 0x000000e9u, 0x00000617u, 0x0003003eu, 0x000005b7u, 0x0000061bu, 0x0003003eu, 0x000005beu, 0x00000613u, 0x000500c3u, 0x00000007u, 0x00000689u, 0x00000613u, 0x00000846u, 0x0003003eu, 0x00000686u, 0x00000689u, 0x0003003eu, 0x000005bdu, 0x00000689u, 0x0003003eu, 0x000005c0u, 0x0000061bu, 0x000500c3u, 0x00000007u, 0x0000068du, 0x0000061bu, 0x00000846u, 0x0003003eu, 0x0000068au, 0x0000068du, 0x0003003eu, 0x000005bfu, 0x0000068du, 0x000300f7u, 0x00000621u, 0x00000000u, 0x000400fau, 0x00000581u, 0x00000622u, 0x00000623u, 0x000200f8u, 0x00000622u, 0x0003003eu, 0x000005c1u, 0x00000689u, 0x0003003eu, 0x000005c2u, 0x0000068du, 0x000200f9u, 0x00000621u, 0x000200f8u, 0x00000623u, 0x0003003eu, 0x000005c1u, 0x0000068du, 0x0003003eu, 0x000005c2u, 0x00000689u, 0x000200f9u, 0x00000621u, 0x000200f8u, 0x00000621u, 0x00070050u, 0x000000d3u, 0x0000084bu, 0x00000581u, 0x00000581u, 0x00000581u, 0x00000581u, 0x000600a9u, 0x00000007u, 0x0000084cu, 0x0000084bu, 0x0000068du, 0x00000689u, 0x000600a9u, 0x00000007u, 0x0000084eu, 0x0000084bu, 0x00000689u, 0x0000068du, 0x0006000cu, 0x00000007u, 0x00000629u, 0x00000001u, 0x00000005u, 0x0000084eu, 0x0006000cu, 0x00000007u, 0x0000062bu, 0x00000001u, 0x00000005u, 0x0000084cu, 0x0007000cu, 0x00000007u, 0x0000062cu, 0x00000001u, 0x0000002au, 0x00000629u, 0x0000062bu, 0x0003003eu, 0x000005c4u, 0x0000062cu, 0x0007004fu, 0x00000020u, 0x00000691u, 0x0000062cu, 0x0000062cu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000693u, 0x0000062cu, 0x0000062cu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000694u, 0x00000001u, 0x0000002au, 0x00000691u, 0x00000693u, 0x0003003eu, 0x0000068eu, 0x00000694u, 0x00050041u, 0x00000014u, 0x00000695u, 0x0000068eu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000696u, 0x00000695u, 0x00050041u, 0x00000014u, 0x00000697u, 0x0000068eu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000698u, 0x00000697u, 0x0007000cu, 0x00000006u, 0x00000699u, 0x00000001u, 0x0000002au, 0x00000696u, 0x00000698u, 0x0003003eu, 0x0000068fu, 0x00000699u, 0x0003003eu, 0x000005c3u, 0x00000699u, 0x00050084u, 0x00000006u, 0x00000630u, 0x00000112u, 0x00000266u, 0x000500b3u, 0x0000001eu, 0x00000631u, 0x00000699u, 0x00000630u, 0x000300f7u, 0x00000632u, 0x00000000u, 0x000400fau, 0x00000631u, 0x00000633u, 0x00000634u, 0x000200f8u, 0x00000633u, 0x0003003eu, 0x000005c6u, 0x0000084eu, 0x0007004fu, 0x00000020u, 0x0000069du, 0x0000084eu, 0x0000084eu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x0000069fu, 0x0000084eu, 0x0000084eu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x000006a0u, 0x00000001u, 0x00000027u, 0x0000069du, 0x0000069fu, 0x0003003eu, 0x0000069au, 0x000006a0u, 0x00050041u, 0x00000014u, 0x000006a1u, 0x0000069au, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000006a2u, 0x000006a1u, 0x00050041u, 0x00000014u, 0x000006a3u, 0x0000069au, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000006a4u, 0x000006a3u, 0x0007000cu, 0x00000006u, 0x000006a5u, 0x00000001u, 0x00000027u, 0x000006a2u, 0x000006a4u, 0x0003003eu, 0x0000069bu, 0x000006a5u, 0x0003003eu, 0x000005c7u, 0x0000084cu, 0x0007004fu, 0x00000020u, 0x000006a9u, 0x0000084cu, 0x0000084cu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x000006abu, 0x0000084cu, 0x0000084cu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x000006acu, 0x00000001u, 0x0000002au, 0x000006a9u, 0x000006abu, 0x0003003eu, 0x000006a6u, 0x000006acu, 0x00050041u, 0x00000014u, 0x000006adu, 0x000006a6u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000006aeu, 0x000006adu, 0x00050041u, 0x00000014u, 0x000006afu, 0x000006a6u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000006b0u, 0x000006afu, 0x0007000cu, 0x00000006u, 0x000006b1u, 0x00000001u, 0x0000002au, 0x000006aeu, 0x000006b0u, 0x0003003eu, 0x000006a7u, 0x000006b1u, 0x00050050u, 0x00000020u, 0x00000639u, 0x000006a5u, 0x000006b1u, 0x0003003eu, 0x000005c5u, 0x00000639u, 0x000200f9u, 0x00000632u, 0x000200f8u, 0x00000634u, 0x0003003eu, 0x000005c5u, 0x00000121u, 0x000200f9u, 0x00000632u, 0x000200f8u, 0x00000632u, 0x000700f5u, 0x00000020u, 0x0000081au, 0x00000639u, 0x00000633u, 0x00000121u, 0x00000634u, 0x0003003eu, 0x000005c8u, 0x0000081au, 0x0003003eu, 0x0000055du, 0x0000081au, 0x00050041u, 0x00000014u, 0x00000597u, 0x0000055du, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000598u, 0x00000597u, 0x00050041u, 0x00000014u, 0x00000599u, 0x000002cfu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000059au, 0x00000599u, 0x0007000cu, 0x00000006u, 0x0000059bu, 0x00000001u, 0x0000002au, 0x00000598u, 0x0000059au, 0x0003003eu, 0x00000597u, 0x0000059bu, 0x00050041u, 0x00000014u, 0x0000059du, 0x0000055du, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000059eu, 0x0000059du, 0x00050041u, 0x00000014u, 0x0000059fu, 0x000002d1u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000005a0u, 0x0000059fu, 0x0007000cu, 0x00000006u, 0x000005a1u, 0x00000001u, 0x00000027u, 0x0000059eu, 0x000005a0u, 0x0003003eu, 0x0000059du, 0x000005a1u, 0x0004003du, 0x00000006u, 0x000005a4u, 0x00000597u, 0x0004003du, 0x00000006u, 0x000005a6u, 0x0000059du, 0x000500b3u, 0x0000001eu, 0x000005a7u, 0x000005a4u, 0x000005a6u, 0x0003003eu, 0x00000557u, 0x000001c5u, 0x0003003eu, 0x00000558u, 0x000005a7u, 0x000200f9u, 0x00000563u, 0x000200f8u, 0x00000563u, 0x000700f5u, 0x0000001eu, 0x0000081bu, 0x00000141u, 0x0000057du, 0x000005a7u, 0x00000632u, 0x0003003eu, 0x00000562u, 0x0000081bu, 0x000300f7u, 0x000002d6u, 0x00000000u, 0x000400fau, 0x0000081bu, 0x000002d5u, 0x000002d6u, 0x000200f8u, 0x000002d5u, 0x000500c5u, 0x00000030u, 0x000002dau, 0x000007ecu, 0x0000029fu, 0x0003003eu, 0x00000293u, 0x000002dau, 0x000200f9u, 0x000002d6u, 0x000200f8u, 0x000002d6u, 0x000700f5u, 0x00000030u, 0x0000082eu, 0x000007ecu, 0x00000563u, 0x000002dau, 0x000002d5u, 0x000200f9u, 0x00000297u, 0x000200f8u, 0x00000297u, 0x000200f9u, 0x00000294u, 0x000200f8u, 0x00000296u, 0x00050084u, 0x00000006u, 0x000002e2u, 0x00000219u, 0x000002e1u, 0x00050080u, 0x00000006u, 0x000002e4u, 0x000002e2u, 0x000001e7u, 0x00060041u, 0x000001d3u, 0x000002e6u, 0x000002deu, 0x00000096u, 0x000002e4u, 0x0003003eu, 0x000002e6u, 0x000007ecu, 0x000500abu, 0x0000001eu, 0x000002e8u, 0x000007ecu, 0x0000004bu, 0x000300f7u, 0x000002eau, 0x00000000u, 0x000400fau, 0x000002e8u, 0x000002e9u, 0x000002f4u, 0x000200f8u, 0x000002e9u, 0x00060041u, 0x000001d3u, 0x000002f0u, 0x000002eeu, 0x00000096u, 0x00000219u, 0x000500c4u, 0x00000030u, 0x000002f2u, 0x0000004eu, 0x000001e7u, 0x000700f1u, 0x00000030u, 0x000002f3u, 0x000002f0u, 0x0000004eu, 0x0000004bu, 0x000002f2u, 0x000200f9u, 0x000002eau, 0x000200f8u, 0x000002f4u, 0x00060041u, 0x000001d3u, 0x000002f6u, 0x000002eeu, 0x00000096u, 0x00000219u, 0x000500c4u, 0x00000030u, 0x000002f8u, 0x0000004eu, 0x000001e7u, 0x000400c8u, 0x00000030u, 0x000002f9u, 0x000002f8u, 0x000700f0u, 0x00000030u, 0x000002fau, 0x000002f6u, 0x0000004eu, 0x0000004bu, 0x000002f9u, 0x000200f9u, 0x000002eau, 0x000200f8u, 0x000002eau, 0x000400cdu, 0x00000006u, 0x000002fdu, 0x000007ecu, 0x0004007cu, 0x00000030u, 0x000002feu, 0x000002fdu, 0x0003003eu, 0x000002fbu, 0x000002feu, 0x0003003eu, 0x000002ffu, 0x0000004bu, 0x000500abu, 0x0000001eu, 0x00000301u, 0x000002feu, 0x0000004bu, 0x0005014fu, 0x0000001eu, 0x00000302u, 0x000001beu, 0x00000301u, 0x000300f7u, 0x00000304u, 0x00000000u, 0x000400fau, 0x00000302u, 0x00000303u, 0x00000304u, 0x000200f8u, 0x00000303u, 0x0006015du, 0x00000030u, 0x00000307u, 0x000001beu, 0x00000000u, 0x000002feu, 0x0003003eu, 0x00000305u, 0x00000307u, 0x0004014du, 0x0000001eu, 0x00000308u, 0x000001beu, 0x000300f7u, 0x0000030au, 0x00000000u, 0x000400fau, 0x00000308u, 0x00000309u, 0x0000030au, 0x000200f8u, 0x00000309u, 0x000500abu, 0x0000001eu, 0x0000030cu, 0x00000307u, 0x0000004bu, 0x000300f7u, 0x0000030eu, 0x00000000u, 0x000400fau, 0x0000030cu, 0x0000030du, 0x0000030eu, 0x000200f8u, 0x0000030du, 0x00070041u, 0x000001d3u, 0x0000030fu, 0x000001d1u, 0x00000096u, 0x00000096u, 0x000001beu, 0x000700eau, 0x00000030u, 0x00000311u, 0x0000030fu, 0x0000004eu, 0x0000004bu, 0x00000307u, 0x0003003eu, 0x000002ffu, 0x00000311u, 0x000200f9u, 0x0000030eu, 0x000200f8u, 0x0000030eu, 0x000700f5u, 0x00000030u, 0x000007efu, 0x0000004bu, 0x00000309u, 0x00000311u, 0x0000030du, 0x000200f9u, 0x0000030au, 0x000200f8u, 0x0000030au, 0x000700f5u, 0x00000030u, 0x000007eeu, 0x0000004bu, 0x00000303u, 0x000007efu, 0x0000030eu, 0x00050152u, 0x00000030u, 0x00000313u, 0x000001beu, 0x000007eeu, 0x0003003eu, 0x000002ffu, 0x00000313u, 0x0006015du, 0x00000030u, 0x00000315u, 0x000001beu, 0x00000001u, 0x000002feu, 0x00050082u, 0x00000030u, 0x00000317u, 0x00000315u, 0x000002feu, 0x00050080u, 0x00000030u, 0x00000319u, 0x00000313u, 0x00000317u, 0x0003003eu, 0x000002ffu, 0x00000319u, 0x000200f9u, 0x00000304u, 0x000200f8u, 0x00000304u, 0x000700f5u, 0x00000030u, 0x000007fbu, 0x0000004bu, 0x000002eau, 0x00000319u, 0x0000030au, 0x000300f7u, 0x0000031du, 0x00000000u, 0x000400fau, 0x00000301u, 0x0000031cu, 0x0000031du, 0x000200f8u, 0x0000031cu, 0x00060041u, 0x000001d3u, 0x00000327u, 0x00000321u, 0x00000096u, 0x000002e4u, 0x0003003eu, 0x00000327u, 0x000007fbu, 0x000200f9u, 0x0000031du, 0x000200f8u, 0x0000031du, 0x00060168u, 0x00000030u, 0x0000032au, 0x000001beu, 0x00000000u, 0x000007ecu, 0x0003003eu, 0x00000328u, 0x0000032au, 0x000200f9u, 0x0000032bu, 0x000200f8u, 0x0000032bu, 0x000700f5u, 0x00000030u, 0x00000808u, 0x000007fbu, 0x0000031du, 0x00000835u, 0x0000032eu, 0x000700f5u, 0x00000030u, 0x00000800u, 0x0000032au, 0x0000031du, 0x00000339u, 0x0000032eu, 0x000500abu, 0x0000001eu, 0x00000331u, 0x00000800u, 0x0000004bu, 0x000400f6u, 0x0000032du, 0x0000032eu, 0x00000000u, 0x000400fau, 0x00000331u, 0x0000032cu, 0x0000032du, 0x000200f8u, 0x0000032cu, 0x0006000cu, 0x00000006u, 0x00000334u, 0x00000001u, 0x00000049u, 0x00000800u, 0x0003003eu, 0x00000332u, 0x00000334u, 0x000500c4u, 0x00000030u, 0x00000336u, 0x0000004eu, 0x00000334u, 0x000400c8u, 0x00000030u, 0x00000337u, 0x00000336u, 0x000500c7u, 0x00000030u, 0x00000339u, 0x00000800u, 0x00000337u, 0x0003003eu, 0x00000328u, 0x00000339u, 0x00050084u, 0x00000006u, 0x0000033cu, 0x000001e7u, 0x0000024fu, 0x00050080u, 0x00000006u, 0x0000033eu, 0x0000033cu, 0x00000334u, 0x0003003eu, 0x0000033au, 0x0000033eu, 0x000500c7u, 0x00000030u, 0x00000342u, 0x000007ecu, 0x00000336u, 0x000500abu, 0x0000001eu, 0x00000343u, 0x00000342u, 0x0000004bu, 0x000300f7u, 0x00000345u, 0x00000000u, 0x000400fau, 0x00000343u, 0x00000344u, 0x00000345u, 0x000200f8u, 0x00000344u, 0x00080041u, 0x000001a0u, 0x00000350u, 0x0000034eu, 0x00000096u, 0x0000033eu, 0x00000096u, 0x0000004bu, 0x0004003du, 0x00000179u, 0x00000351u, 0x00000350u, 0x00040071u, 0x00000030u, 0x00000352u, 0x00000351u, 0x0003003eu, 0x00000346u, 0x00000352u, 0x0003003eu, 0x00000354u, 0x00000352u, 0x00050153u, 0x0000006bu, 0x000006b6u, 0x000001beu, 0x000001c5u, 0x0003003eu, 0x000006b2u, 0x000006b6u, 0x00060156u, 0x00000030u, 0x000006b8u, 0x000001beu, 0x00000000u, 0x000006b6u, 0x0003003eu, 0x000006b3u, 0x000006b8u, 0x0003003eu, 0x000006b4u, 0x0000004bu, 0x0004014du, 0x0000001eu, 0x000006b9u, 0x000001beu, 0x000300f7u, 0x000006bau, 0x00000000u, 0x000400fau, 0x000006b9u, 0x000006bbu, 0x000006bau, 0x000200f8u, 0x000006bbu, 0x00070041u, 0x000001d3u, 0x000006bdu, 0x000001d1u, 0x00000096u, 0x00000352u, 0x0000004bu, 0x000700eau, 0x00000030u, 0x000006bfu, 0x000006bdu, 0x0000004eu, 0x0000004bu, 0x000006b8u, 0x0003003eu, 0x000006b4u, 0x000006bfu, 0x000200f9u, 0x000006bau, 0x000200f8u, 0x000006bau, 0x000700f5u, 0x00000030u, 0x00000804u, 0x0000004bu, 0x00000344u, 0x000006bfu, 0x000006bbu, 0x00050152u, 0x00000030u, 0x000006c1u, 0x000001beu, 0x00000804u, 0x0003003eu, 0x000006b4u, 0x000006c1u, 0x00060156u, 0x00000030u, 0x000006c3u, 0x000001beu, 0x00000002u, 0x000006b6u, 0x00050080u, 0x00000030u, 0x000006c5u, 0x000006c1u, 0x000006c3u, 0x0003003eu, 0x000006b4u, 0x000006c5u, 0x0003003eu, 0x000006b5u, 0x000006c5u, 0x0003003eu, 0x00000353u, 0x000006c5u, 0x00050084u, 0x00000030u, 0x0000035fu, 0x0000035du, 0x00000352u, 0x00050080u, 0x00000030u, 0x00000360u, 0x000006c5u, 0x0000035fu, 0x0004003du, 0x00000006u, 0x00000362u, 0x00000217u, 0x0004007cu, 0x00000030u, 0x00000363u, 0x00000362u, 0x0004003du, 0x00000006u, 0x00000365u, 0x00000211u, 0x0004007cu, 0x00000030u, 0x00000366u, 0x00000365u, 0x0004007cu, 0x00000030u, 0x00000369u, 0x0000033eu, 0x00070050u, 0x0000006bu, 0x0000036au, 0x00000363u, 0x00000366u, 0x00000808u, 0x00000369u, 0x00060041u, 0x0000036bu, 0x0000036cu, 0x0000035au, 0x00000096u, 0x00000360u, 0x0003003eu, 0x0000036cu, 0x0000036au, 0x00050080u, 0x00000030u, 0x0000036eu, 0x00000808u, 0x000000aau, 0x0003003eu, 0x000002ffu, 0x0000036eu, 0x000200f9u, 0x00000345u, 0x000200f8u, 0x00000345u, 0x000700f5u, 0x00000030u, 0x00000835u, 0x00000808u, 0x0000032cu, 0x0000036eu, 0x000006bau, 0x000200f9u, 0x0000032eu, 0x000200f8u, 0x0000032eu, 0x000200f9u, 0x0000032bu, 0x000200f8u, 0x0000032du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x0000003fu, 0x0000000au, 0x000500c3u, 0x00000007u, 0x00000042u, 0x0000003fu, 0x00000846u, 0x000200feu, 0x00000042u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x00000028u, 0x00000045u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000046u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000047u, 0x00000046u, 0x00000046u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000048u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000049u, 0x00000048u, 0x00000048u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x0000004au, 0x00000001u, 0x00000027u, 0x00000047u, 0x00000049u, 0x0003003eu, 0x00000045u, 0x0000004au, 0x00050041u, 0x00000014u, 0x0000004cu, 0x00000045u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000004du, 0x0000004cu, 0x00050041u, 0x00000014u, 0x0000004fu, 0x00000045u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000050u, 0x0000004fu, 0x0007000cu, 0x00000006u, 0x00000051u, 0x00000001u, 0x00000027u, 0x0000004du, 0x00000050u, 0x000200feu, 0x00000051u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x00000028u, 0x00000054u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000055u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000056u, 0x00000055u, 0x00000055u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000057u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000058u, 0x00000057u, 0x00000057u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000059u, 0x00000001u, 0x0000002au, 0x00000056u, 0x00000058u, 0x0003003eu, 0x00000054u, 0x00000059u, 0x00050041u, 0x00000014u, 0x0000005au, 0x00000054u, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000005bu, 0x0000005au, 0x00050041u, 0x00000014u, 0x0000005cu, 0x00000054u, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000005du, 0x0000005cu, 0x0007000cu, 0x00000006u, 0x0000005eu, 0x00000001u, 0x0000002au, 0x0000005bu, 0x0000005du, 0x000200feu, 0x0000005eu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000064u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000065u, 0x00000007u, 0x0004003bu, 0x00000070u, 0x00000071u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000061u, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000062u, 0x00000017u, 0x00070050u, 0x00000007u, 0x00000063u, 0x00000062u, 0x00000062u, 0x00000062u, 0x00000062u, 0x00050098u, 0x00000066u, 0x00000067u, 0x00000061u, 0x00000063u, 0x00050051u, 0x00000007u, 0x00000068u, 0x00000067u, 0x00000000u, 0x0003003eu, 0x00000065u, 0x00000068u, 0x00050051u, 0x00000007u, 0x00000069u, 0x00000067u, 0x00000001u, 0x0003003eu, 0x00000064u, 0x00000069u, 0x0004007cu, 0x0000006bu, 0x0000006cu, 0x00000068u, 0x0004003du, 0x00000006u, 0x0000006du, 0x00000018u, 0x0004007cu, 0x00000030u, 0x0000006eu, 0x0000006du, 0x00070050u, 0x0000006bu, 0x0000006fu, 0x0000006eu, 0x0000006eu, 0x0000006eu, 0x0000006eu, 0x00050095u, 0x00000072u, 0x00000073u, 0x0000006cu, 0x0000006fu, 0x00050051u, 0x0000006bu, 0x00000074u, 0x00000073u, 0x00000001u, 0x0003003eu, 0x00000071u, 0x00000074u, 0x00050051u, 0x0000006bu, 0x00000075u, 0x00000073u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000076u, 0x00000075u, 0x0003003eu, 0x00000065u, 0x00000076u, 0x0004007cu, 0x00000007u, 0x00000078u, 0x00000074u, 0x00050080u, 0x00000007u, 0x0000007au, 0x00000069u, 0x00000078u, 0x0003003eu, 0x00000064u, 0x0000007au, 0x0003003eu, 0x00000019u, 0x0000007au, 0x000200feu, 0x00000076u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000026u, 0x00000000u, 0x00000021u, 0x00030037u, 0x0000001du, 0x00000022u, 0x00030037u, 0x00000008u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000014u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x00000014u, 0x0000007fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000085u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000008fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000aeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000102u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000104u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000109u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000010fu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000118u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000119u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000011cu, 0x00000007u, 0x00050041u, 0x00000014u, 0x00000081u, 0x00000022u, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000082u, 0x00000081u, 0x000500c7u, 0x00000006u, 0x00000084u, 0x00000082u, 0x00000083u, 0x0003003eu, 0x0000007fu, 0x00000084u, 0x00050041u, 0x00000014u, 0x00000087u, 0x00000022u, 0x00000086u, 0x0004003du, 0x00000006u, 0x00000088u, 0x00000087u, 0x0003003eu, 0x00000085u, 0x00000088u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000025u, 0x00050084u, 0x00000006u, 0x0000008bu, 0x00000084u, 0x00000089u, 0x0003003eu, 0x0000007fu, 0x0000008bu, 0x0004003du, 0x00000006u, 0x0000008cu, 0x00000025u, 0x00050084u, 0x00000006u, 0x0000008eu, 0x00000088u, 0x0000008cu, 0x0003003eu, 0x00000085u, 0x0000008eu, 0x0004003du, 0x00000007u, 0x00000090u, 0x00000023u, 0x00070050u, 0x00000007u, 0x00000092u, 0x0000008bu, 0x0000008bu, 0x0000008bu, 0x0000008bu, 0x00050082u, 0x00000007u, 0x00000093u, 0x00000090u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000095u, 0x00000025u, 0x00050041u, 0x00000014u, 0x00000097u, 0x00000022u, 0x00000096u, 0x0004003du, 0x00000006u, 0x00000098u, 0x00000097u, 0x00050084u, 0x00000006u, 0x00000099u, 0x00000095u, 0x00000098u, 0x0003003eu, 0x0000009bu, 0x00000093u, 0x00050041u, 0x00000014u, 0x0000009du, 0x00000022u, 0x00000094u, 0x0004003du, 0x00000006u, 0x0000009eu, 0x0000009du, 0x0003003eu, 0x0000009cu, 0x0000009eu, 0x0003003eu, 0x0000009fu, 0x00000099u, 0x00080039u, 0x00000007u, 0x000000a1u, 0x0000001au, 0x0000009bu, 0x0000009cu, 0x0000009fu, 0x000000a0u, 0x0004003du, 0x00000007u, 0x000000a2u, 0x000000a0u, 0x0003003eu, 0x0000009au, 0x000000a2u, 0x0003003eu, 0x0000008fu, 0x000000a1u, 0x0004003du, 0x00000007u, 0x000000a4u, 0x00000023u, 0x00050082u, 0x00000007u, 0x000000a7u, 0x000000a4u, 0x00000092u, 0x0004003du, 0x00000006u, 0x000000a9u, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000abu, 0x00000022u, 0x000000aau, 0x0004003du, 0x00000006u, 0x000000acu, 0x000000abu, 0x00050084u, 0x00000006u, 0x000000adu, 0x000000a9u, 0x000000acu, 0x0003003eu, 0x000000afu, 0x000000a7u, 0x00050041u, 0x00000014u, 0x000000b1u, 0x00000022u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x000000b2u, 0x000000b1u, 0x0003003eu, 0x000000b0u, 0x000000b2u, 0x0003003eu, 0x000000b3u, 0x000000adu, 0x00080039u, 0x00000007u, 0x000000b5u, 0x0000001au, 0x000000afu, 0x000000b0u, 0x000000b3u, 0x000000b4u, 0x0004003du, 0x00000007u, 0x000000b6u, 0x000000b4u, 0x0003003eu, 0x000000aeu, 0x000000b6u, 0x0003003eu, 0x000000a3u, 0x000000b5u, 0x0004003du, 0x00000007u, 0x000000b8u, 0x00000023u, 0x00070050u, 0x00000007u, 0x000000bau, 0x0000008eu, 0x0000008eu, 0x0000008eu, 0x0000008eu, 0x00050082u, 0x00000007u, 0x000000bbu, 0x000000b8u, 0x000000bau, 0x0004003du, 0x00000006u, 0x000000bdu, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000bfu, 0x00000022u, 0x000000beu, 0x0004003du, 0x00000006u, 0x000000c0u, 0x000000bfu, 0x00050084u, 0x00000006u, 0x000000c1u, 0x000000bdu, 0x000000c0u, 0x0003003eu, 0x000000c3u, 0x000000bbu, 0x00050041u, 0x00000014u, 0x000000c5u, 0x00000022u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x000000c6u, 0x000000c5u, 0x0003003eu, 0x000000c4u, 0x000000c6u, 0x0003003eu, 0x000000c7u, 0x000000c1u, 0x00080039u, 0x00000007u, 0x000000c9u, 0x0000001au, 0x000000c3u, 0x000000c4u, 0x000000c7u, 0x000000c8u, 0x0004003du, 0x00000007u, 0x000000cau, 0x000000c8u, 0x0003003eu, 0x000000c2u, 0x000000cau, 0x0003003eu, 0x000000b7u, 0x000000c9u, 0x0004003du, 0x00000007u, 0x000000cdu, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000ceu, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000d0u, 0x00000087u, 0x00050084u, 0x00000006u, 0x000000d1u, 0x000000ceu, 0x000000d0u, 0x00070050u, 0x00000007u, 0x000000d2u, 0x000000d1u, 0x000000d1u, 0x000000d1u, 0x000000d1u, 0x000500b1u, 0x000000d3u, 0x000000d4u, 0x000000cdu, 0x000000d2u, 0x000600a9u, 0x00000007u, 0x000000d5u, 0x000000d4u, 0x000000b5u, 0x000000c9u, 0x0003003eu, 0x000000b7u, 0x000000d5u, 0x0004003du, 0x00000007u, 0x000000d8u, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000d9u, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000dbu, 0x00000087u, 0x00050084u, 0x00000006u, 0x000000dcu, 0x000000d9u, 0x000000dbu, 0x00070050u, 0x00000007u, 0x000000ddu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x000500b1u, 0x000000d3u, 0x000000deu, 0x000000d8u, 0x000000ddu, 0x000600a9u, 0x00000007u, 0x000000dfu, 0x000000deu, 0x000000b6u, 0x000000cau, 0x0003003eu, 0x000000c2u, 0x000000dfu, 0x000500adu, 0x000000d3u, 0x000000e5u, 0x000000a2u, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000000e6u, 0x000000e5u, 0x000000e2u, 0x000000a1u, 0x0003003eu, 0x0000008fu, 0x000000e6u, 0x000500b1u, 0x000000d3u, 0x000000edu, 0x000000a2u, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x000000eeu, 0x000000edu, 0x000000e9u, 0x000000e6u, 0x0003003eu, 0x0000008fu, 0x000000eeu, 0x000500adu, 0x000000d3u, 0x000000f1u, 0x000000dfu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000000f2u, 0x000000f1u, 0x000000e2u, 0x000000d5u, 0x0003003eu, 0x000000b7u, 0x000000f2u, 0x000500b1u, 0x000000d3u, 0x000000f5u, 0x000000dfu, 0x000000ecu, 0x000600a9u, 0x00000007u, 0x000000f6u, 0x000000f5u, 0x000000e9u, 0x000000f2u, 0x0003003eu, 0x000000b7u, 0x000000f6u, 0x0003003eu, 0x000000f8u, 0x000000eeu, 0x00050039u, 0x00000007u, 0x000000fau, 0x0000000bu, 0x000000f8u, 0x0003003eu, 0x000000f7u, 0x000000fau, 0x0003003eu, 0x000000fcu, 0x000000f6u, 0x00050039u, 0x00000007u, 0x000000feu, 0x0000000bu, 0x000000fcu, 0x0003003eu, 0x000000fbu, 0x000000feu, 0x0004003du, 0x0000001eu, 0x000000ffu, 0x00000024u, 0x000300f7u, 0x00000101u, 0x00000000u, 0x000400fau, 0x000000ffu, 0x00000100u, 0x00000106u, 0x000200f8u, 0x00000100u, 0x0003003eu, 0x00000102u, 0x000000fau, 0x0003003eu, 0x00000104u, 0x000000feu, 0x000200f9u, 0x00000101u, 0x000200f8u, 0x00000106u, 0x0003003eu, 0x00000102u, 0x000000feu, 0x0003003eu, 0x00000104u, 0x000000fau, 0x000200f9u, 0x00000101u, 0x000200f8u, 0x00000101u, 0x00070050u, 0x000000d3u, 0x0000084fu, 0x000000ffu, 0x000000ffu, 0x000000ffu, 0x000000ffu, 0x000600a9u, 0x00000007u, 0x00000850u, 0x0000084fu, 0x000000feu, 0x000000fau, 0x000600a9u, 0x00000007u, 0x00000852u, 0x0000084fu, 0x000000fau, 0x000000feu, 0x0006000cu, 0x00000007u, 0x0000010bu, 0x00000001u, 0x00000005u, 0x00000852u, 0x0006000cu, 0x00000007u, 0x0000010du, 0x00000001u, 0x00000005u, 0x00000850u, 0x0007000cu, 0x00000007u, 0x0000010eu, 0x00000001u, 0x0000002au, 0x0000010bu, 0x0000010du, 0x0003003eu, 0x0000010fu, 0x0000010eu, 0x00050039u, 0x00000006u, 0x00000110u, 0x00000012u, 0x0000010fu, 0x0003003eu, 0x00000109u, 0x00000110u, 0x0004003du, 0x00000006u, 0x00000113u, 0x00000025u, 0x00050084u, 0x00000006u, 0x00000114u, 0x00000112u, 0x00000113u, 0x000500b3u, 0x0000001eu, 0x00000115u, 0x00000110u, 0x00000114u, 0x000300f7u, 0x00000117u, 0x00000000u, 0x000400fau, 0x00000115u, 0x00000116u, 0x00000120u, 0x000200f8u, 0x00000116u, 0x0003003eu, 0x00000119u, 0x00000852u, 0x00050039u, 0x00000006u, 0x0000011bu, 0x0000000fu, 0x00000119u, 0x0003003eu, 0x0000011cu, 0x00000850u, 0x00050039u, 0x00000006u, 0x0000011eu, 0x00000012u, 0x0000011cu, 0x00050050u, 0x00000020u, 0x0000011fu, 0x0000011bu, 0x0000011eu, 0x0003003eu, 0x00000118u, 0x0000011fu, 0x000200f9u, 0x00000117u, 0x000200f8u, 0x00000120u, 0x0003003eu, 0x00000118u, 0x00000121u, 0x000200f9u, 0x00000117u, 0x000200f8u, 0x00000117u, 0x000700f5u, 0x00000020u, 0x00000840u, 0x0000011fu, 0x00000116u, 0x00000121u, 0x00000120u, 0x000200feu, 0x00000840u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x0000002eu, 0x00000000u, 0x00000029u, 0x00030037u, 0x0000001du, 0x0000002au, 0x00030037u, 0x00000028u, 0x0000002bu, 0x00030037u, 0x00000028u, 0x0000002cu, 0x00030037u, 0x00000014u, 0x0000002du, 0x000200f8u, 0x0000002fu, 0x0005003bu, 0x0000001fu, 0x0000038bu, 0x00000007u, 0x00000141u, 0x0004003bu, 0x0000001fu, 0x00000388u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000129u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000143u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000149u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x0000001du, 0x0000015cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000015eu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000160u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000162u, 0x00000007u, 0x000300f7u, 0x00000387u, 0x00000000u, 0x000300fbu, 0x0000004bu, 0x0000038au, 0x000200f8u, 0x0000038au, 0x00050041u, 0x00000014u, 0x00000126u, 0x0000002bu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x00000127u, 0x00000126u, 0x00050084u, 0x00000006u, 0x00000128u, 0x00000127u, 0x00000086u, 0x0003003eu, 0x00000125u, 0x00000128u, 0x00050041u, 0x00000014u, 0x0000012au, 0x0000002cu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000012au, 0x00050084u, 0x00000006u, 0x0000012cu, 0x0000012bu, 0x00000086u, 0x00050080u, 0x00000006u, 0x0000012du, 0x0000012cu, 0x00000080u, 0x0003003eu, 0x00000129u, 0x0000012du, 0x0004003du, 0x00000006u, 0x0000012fu, 0x0000002du, 0x00050041u, 0x00000014u, 0x00000130u, 0x0000002au, 0x00000080u, 0x0004003du, 0x00000006u, 0x00000131u, 0x00000130u, 0x00050084u, 0x00000006u, 0x00000132u, 0x0000012fu, 0x00000131u, 0x0007000cu, 0x00000006u, 0x00000133u, 0x00000001u, 0x0000002au, 0x00000128u, 0x00000132u, 0x0003003eu, 0x00000125u, 0x00000133u, 0x0004003du, 0x00000006u, 0x00000135u, 0x0000002du, 0x00050041u, 0x00000014u, 0x00000137u, 0x0000002au, 0x00000136u, 0x0004003du, 0x00000006u, 0x00000138u, 0x00000137u, 0x00050084u, 0x00000006u, 0x00000139u, 0x00000135u, 0x00000138u, 0x00050082u, 0x00000006u, 0x0000013au, 0x00000139u, 0x000000aau, 0x0007000cu, 0x00000006u, 0x0000013bu, 0x00000001u, 0x00000027u, 0x0000012du, 0x0000013au, 0x0003003eu, 0x00000129u, 0x0000013bu, 0x000500b1u, 0x0000001eu, 0x0000013eu, 0x0000013bu, 0x00000133u, 0x000300f7u, 0x00000140u, 0x00000000u, 0x000400fau, 0x0000013eu, 0x0000013fu, 0x00000140u, 0x000200f8u, 0x0000013fu, 0x0003003eu, 0x0000038bu, 0x000001c5u, 0x0003003eu, 0x00000388u, 0x00000141u, 0x000200f9u, 0x00000387u, 0x000200f8u, 0x00000140u, 0x00050041u, 0x00000014u, 0x00000145u, 0x0000002au, 0x00000144u, 0x0004003du, 0x00000006u, 0x00000146u, 0x00000145u, 0x000500c7u, 0x00000006u, 0x00000147u, 0x00000146u, 0x000000aau, 0x000500abu, 0x0000001eu, 0x00000148u, 0x00000147u, 0x00000096u, 0x0003003eu, 0x00000143u, 0x00000148u, 0x00050041u, 0x00000014u, 0x0000014cu, 0x0000002au, 0x00000086u, 0x0004003du, 0x00000006u, 0x0000014du, 0x0000014cu, 0x0004003du, 0x00000006u, 0x0000014eu, 0x0000002du, 0x00050084u, 0x00000006u, 0x0000014fu, 0x0000014du, 0x0000014eu, 0x00050050u, 0x00000020u, 0x00000151u, 0x0000014fu, 0x0000014fu, 0x00050080u, 0x00000020u, 0x00000152u, 0x00000151u, 0x00000150u, 0x00050050u, 0x00000020u, 0x00000154u, 0x00000133u, 0x00000133u, 0x00050050u, 0x00000020u, 0x00000156u, 0x0000013bu, 0x0000013bu, 0x0008000cu, 0x00000020u, 0x00000157u, 0x00000001u, 0x0000002du, 0x00000152u, 0x00000154u, 0x00000156u, 0x00050051u, 0x00000006u, 0x00000158u, 0x00000157u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000159u, 0x00000157u, 0x00000001u, 0x00070050u, 0x00000007u, 0x0000015au, 0x00000133u, 0x0000013bu, 0x00000158u, 0x00000159u, 0x0003003eu, 0x00000149u, 0x0000015au, 0x0004003du, 0x0000001cu, 0x0000015du, 0x0000002au, 0x0003003eu, 0x0000015cu, 0x0000015du, 0x0003003eu, 0x0000015eu, 0x0000015au, 0x0003003eu, 0x00000160u, 0x00000148u, 0x0004003du, 0x00000006u, 0x00000163u, 0x0000002du, 0x0003003eu, 0x00000162u, 0x00000163u, 0x00080039u, 0x00000020u, 0x00000164u, 0x00000026u, 0x0000015cu, 0x0000015eu, 0x00000160u, 0x00000162u, 0x0003003eu, 0x0000015bu, 0x00000164u, 0x00050041u, 0x00000014u, 0x00000165u, 0x0000015bu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000166u, 0x00000165u, 0x00050041u, 0x00000014u, 0x00000167u, 0x0000002bu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x00000168u, 0x00000167u, 0x0007000cu, 0x00000006u, 0x00000169u, 0x00000001u, 0x0000002au, 0x00000166u, 0x00000168u, 0x0003003eu, 0x00000165u, 0x00000169u, 0x00050041u, 0x00000014u, 0x0000016bu, 0x0000015bu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000016bu, 0x00050041u, 0x00000014u, 0x0000016du, 0x0000002cu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x0000016eu, 0x0000016du, 0x0007000cu, 0x00000006u, 0x0000016fu, 0x00000001u, 0x00000027u, 0x0000016cu, 0x0000016eu, 0x0003003eu, 0x0000016bu, 0x0000016fu, 0x0004003du, 0x00000006u, 0x00000172u, 0x00000165u, 0x0004003du, 0x00000006u, 0x00000174u, 0x0000016bu, 0x000500b3u, 0x0000001eu, 0x00000175u, 0x00000172u, 0x00000174u, 0x0003003eu, 0x0000038bu, 0x000001c5u, 0x0003003eu, 0x00000388u, 0x00000175u, 0x000200f9u, 0x00000387u, 0x000200f8u, 0x00000387u, 0x000700f5u, 0x0000001eu, 0x00000841u, 0x00000141u, 0x0000013fu, 0x00000175u, 0x00000140u, 0x000200feu, 0x00000841u, 0x00010038u, 0x00050036u, 0x0000001cu, 0x00000034u, 0x00000000u, 0x00000032u, 0x00030037u, 0x00000031u, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003du, 0x00000030u, 0x0000017fu, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000181u, 0x0000017eu, 0x00000096u, 0x0000017fu, 0x00000096u, 0x0004003du, 0x00000006u, 0x00000182u, 0x00000181u, 0x0004003du, 0x00000030u, 0x00000183u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000184u, 0x0000017eu, 0x00000096u, 0x00000183u, 0x000000aau, 0x0004003du, 0x00000006u, 0x00000185u, 0x00000184u, 0x0004003du, 0x00000030u, 0x00000186u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000187u, 0x0000017eu, 0x00000096u, 0x00000186u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000188u, 0x00000187u, 0x0004003du, 0x00000030u, 0x00000189u, 0x00000033u, 0x00070041u, 0x0000018au, 0x0000018bu, 0x0000017eu, 0x00000096u, 0x00000189u, 0x00000080u, 0x0004003du, 0x00000178u, 0x0000018cu, 0x0000018bu, 0x00040072u, 0x00000006u, 0x0000018du, 0x0000018cu, 0x0004003du, 0x00000030u, 0x0000018eu, 0x00000033u, 0x00070041u, 0x0000018au, 0x0000018fu, 0x0000017eu, 0x00000096u, 0x0000018eu, 0x00000086u, 0x0004003du, 0x00000178u, 0x00000190u, 0x0000018fu, 0x00040072u, 0x00000006u, 0x00000191u, 0x00000190u, 0x0004003du, 0x00000030u, 0x00000192u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000193u, 0x0000017eu, 0x00000096u, 0x00000192u, 0x00000094u, 0x0004003du, 0x00000006u, 0x00000194u, 0x00000193u, 0x0004003du, 0x00000030u, 0x00000195u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000196u, 0x0000017eu, 0x00000096u, 0x00000195u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000197u, 0x00000196u, 0x0004003du, 0x00000030u, 0x00000198u, 0x00000033u, 0x00070041u, 0x00000180u, 0x00000199u, 0x0000017eu, 0x00000096u, 0x00000198u, 0x000000bcu, 0x0004003du, 0x00000006u, 0x0000019au, 0x00000199u, 0x0004003du, 0x00000030u, 0x0000019bu, 0x00000033u, 0x00070041u, 0x0000018au, 0x0000019cu, 0x0000017eu, 0x00000096u, 0x0000019bu, 0x00000136u, 0x0004003du, 0x00000178u, 0x0000019du, 0x0000019cu, 0x00040072u, 0x00000006u, 0x0000019eu, 0x0000019du, 0x0004003du, 0x00000030u, 0x0000019fu, 0x00000033u, 0x00070041u, 0x000001a0u, 0x000001a1u, 0x0000017eu, 0x00000096u, 0x0000019fu, 0x00000144u, 0x0004003du, 0x00000179u, 0x000001a2u, 0x000001a1u, 0x00040071u, 0x00000030u, 0x000001a3u, 0x000001a2u, 0x0004007cu, 0x00000006u, 0x000001a4u, 0x000001a3u, 0x0004003du, 0x00000030u, 0x000001a5u, 0x00000033u, 0x00070041u, 0x000001a0u, 0x000001a7u, 0x0000017eu, 0x00000096u, 0x000001a5u, 0x000001a6u, 0x0004003du, 0x00000179u, 0x000001a8u, 0x000001a7u, 0x00040071u, 0x00000030u, 0x000001a9u, 0x000001a8u, 0x0004007cu, 0x00000006u, 0x000001aau, 0x000001a9u, 0x000e0050u, 0x0000001cu, 0x000001abu, 0x00000182u, 0x00000185u, 0x00000188u, 0x0000018du, 0x00000191u, 0x00000194u, 0x00000197u, 0x0000019au, 0x0000019eu, 0x000001a4u, 0x000001aau, 0x000200feu, 0x000001abu, 0x00010038u, 0x00050036u, 0x00000036u, 0x00000039u, 0x00000000u, 0x00000037u, 0x00030037u, 0x00000031u, 0x00000038u, 0x000200f8u, 0x0000003au, 0x0004003bu, 0x00000008u, 0x000001aeu, 0x00000007u, 0x0004003du, 0x00000030u, 0x000001b3u, 0x00000038u, 0x00060041u, 0x000001b4u, 0x000001b5u, 0x000001b2u, 0x00000096u, 0x000001b3u, 0x0004003du, 0x00000007u, 0x000001b6u, 0x000001b5u, 0x0003003eu, 0x000001aeu, 0x000001b6u, 0x00050041u, 0x00000014u, 0x000001b7u, 0x000001aeu, 0x0000004bu, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x00050041u, 0x00000014u, 0x000001b9u, 0x000001aeu, 0x0000004eu, 0x0004003du, 0x00000006u, 0x000001bau, 0x000001b9u, 0x00050041u, 0x00000014u, 0x000001bcu, 0x000001aeu, 0x000001bbu, 0x0004003du, 0x00000006u, 0x000001bdu, 0x000001bcu, 0x00050041u, 0x00000014u, 0x000001bfu, 0x000001aeu, 0x000001beu, 0x0004003du, 0x00000006u, 0x000001c0u, 0x000001bfu, 0x00070050u, 0x00000036u, 0x000001c1u, 0x000001b8u, 0x000001bau, 0x000001bdu, 0x000001c0u, 0x000200feu, 0x000001c1u, 0x00010038u, 0x00050036u, 0x00000030u, 0x0000003du, 0x00000000u, 0x0000003bu, 0x00030037u, 0x00000031u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003bu, 0x00000070u, 0x000001c4u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000001c7u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000001cau, 0x00000007u, 0x00050153u, 0x0000006bu, 0x000001c6u, 0x000001beu, 0x000001c5u, 0x0003003eu, 0x000001c4u, 0x000001c6u, 0x00060156u, 0x00000030u, 0x000001c9u, 0x000001beu, 0x00000000u, 0x000001c6u, 0x0003003eu, 0x000001c7u, 0x000001c9u, 0x0003003eu, 0x000001cau, 0x0000004bu, 0x0004014du, 0x0000001eu, 0x000001cbu, 0x000001beu, 0x000300f7u, 0x000001cdu, 0x00000000u, 0x000400fau, 0x000001cbu, 0x000001ccu, 0x000001cdu, 0x000200f8u, 0x000001ccu, 0x0004003du, 0x00000030u, 0x000001d2u, 0x0000003cu, 0x00070041u, 0x000001d3u, 0x000001d4u, 0x000001d1u, 0x00000096u, 0x000001d2u, 0x0000004bu, 0x000700eau, 0x00000030u, 0x000001d6u, 0x000001d4u, 0x0000004eu, 0x0000004bu, 0x000001c9u, 0x0003003eu, 0x000001cau, 0x000001d6u, 0x000200f9u, 0x000001cdu, 0x000200f8u, 0x000001cdu, 0x000700f5u, 0x00000030u, 0x00000842u, 0x0000004bu, 0x0000003eu, 0x000001d6u, 0x000001ccu, 0x00050152u, 0x00000030u, 0x000001d8u, 0x000001beu, 0x00000842u, 0x0003003eu, 0x000001cau, 0x000001d8u, 0x00060156u, 0x00000030u, 0x000001dau, 0x000001beu, 0x00000002u, 0x000001c6u, 0x00050080u, 0x00000030u, 0x000001dcu, 0x000001d8u, 0x000001dau, 0x0003003eu, 0x000001cau, 0x000001dcu, 0x000200feu, 0x000001dcu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000791u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001c3u, 0x000001ceu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000020u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000176u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000176u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000176u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000176u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000176u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000176u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000176u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000176u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000176u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000176u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000176u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000177u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000178u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000178u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000178u, 0x00000002u, 0x00040047u, 0x0000017au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000017au, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001abu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001acu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001acu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001acu, 0x00000002u, 0x00040047u, 0x000001aeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001aeu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001c3u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x000001ceu, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000001e2u, 0x00000001u, 0x00000004u, 0x00040047u, 0x000001e3u, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001ecu, 0x00000001u, 0x00000002u, 0x00050048u, 0x000001f6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000001f6u, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x000001f6u, 0x00000002u, 0x00040047u, 0x00000232u, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002abu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002acu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002acu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002acu, 0x00000002u, 0x00040047u, 0x000002aeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002aeu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002b0u, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002bcu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002bdu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002bdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002bdu, 0x00000002u, 0x00040047u, 0x000002bfu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002bfu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000002cdu, 0x0000000bu, 0x00000019u, 0x00040047u, 0x000002e6u, 0x00000001u, 0x00000005u, 0x00040047u, 0x000002e9u, 0x00000006u, 0x00000001u, 0x00050048u, 0x000002eau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002eau, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002eau, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x000002ebu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002ecu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002ecu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002ecu, 0x00000002u, 0x00040047u, 0x000002eeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002eeu, 0x00000021u, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x000d001eu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000001du, 0x00000007u, 0x0000001cu, 0x00020014u, 0x0000001eu, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00040017u, 0x00000020u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000021u, 0x00000020u, 0x0000001du, 0x00000008u, 0x0000001fu, 0x00000014u, 0x00040020u, 0x00000028u, 0x00000007u, 0x00000020u, 0x00070021u, 0x00000029u, 0x0000001eu, 0x0000001du, 0x00000028u, 0x00000028u, 0x00000014u, 0x00040015u, 0x00000030u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000031u, 0x00000007u, 0x00000030u, 0x00040021u, 0x00000032u, 0x0000001cu, 0x00000031u, 0x0006001eu, 0x00000036u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000037u, 0x00000036u, 0x00000031u, 0x0004002bu, 0x00000006u, 0x0000003cu, 0x0000000fu, 0x0004002bu, 0x00000030u, 0x00000047u, 0x00000000u, 0x0004002bu, 0x00000030u, 0x0000004au, 0x00000001u, 0x0004001eu, 0x00000062u, 0x00000007u, 0x00000007u, 0x00040017u, 0x00000067u, 0x00000030u, 0x00000004u, 0x00040020u, 0x0000006cu, 0x00000007u, 0x00000067u, 0x0004001eu, 0x0000006eu, 0x00000067u, 0x00000067u, 0x0004002bu, 0x00000006u, 0x0000007cu, 0x00000003u, 0x0004002bu, 0x00000006u, 0x0000007fu, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000090u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000092u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000a4u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000a6u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000b8u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000bau, 0x00000002u, 0x00040017u, 0x000000cfu, 0x0000001eu, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000ddu, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000deu, 0x000000ddu, 0x000000ddu, 0x000000ddu, 0x000000ddu, 0x0007002cu, 0x00000007u, 0x000000e0u, 0x00000092u, 0x00000092u, 0x00000092u, 0x00000092u, 0x0004002bu, 0x00000006u, 0x000000e4u, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000e5u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x0004002bu, 0x00000006u, 0x000000e7u, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000e8u, 0x000000e7u, 0x000000e7u, 0x000000e7u, 0x000000e7u, 0x0004002bu, 0x00000006u, 0x0000010eu, 0x000007ffu, 0x0005002cu, 0x00000020u, 0x0000011du, 0x00000092u, 0x000000ddu, 0x0004002bu, 0x00000006u, 0x00000132u, 0x00000008u, 0x0003002au, 0x0000001eu, 0x0000013du, 0x0004002bu, 0x00000006u, 0x00000140u, 0x00000009u, 0x0005002cu, 0x00000020u, 0x0000014cu, 0x000000e7u, 0x00000092u, 0x00040015u, 0x00000174u, 0x00000010u, 0x00000001u, 0x00040015u, 0x00000175u, 0x00000008u, 0x00000000u, 0x000d001eu, 0x00000176u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000174u, 0x00000174u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000174u, 0x00000175u, 0x00000175u, 0x0003001du, 0x00000177u, 0x00000176u, 0x0003001eu, 0x00000178u, 0x00000177u, 0x00040020u, 0x00000179u, 0x0000000cu, 0x00000178u, 0x0004003bu, 0x00000179u, 0x0000017au, 0x0000000cu, 0x00040020u, 0x0000017cu, 0x0000000cu, 0x00000006u, 0x00040020u, 0x00000186u, 0x0000000cu, 0x00000174u, 0x00040020u, 0x0000019cu, 0x0000000cu, 0x00000175u, 0x0004002bu, 0x00000006u, 0x000001a2u, 0x0000000au, 0x0003001du, 0x000001abu, 0x00000007u, 0x0003001eu, 0x000001acu, 0x000001abu, 0x00040020u, 0x000001adu, 0x0000000cu, 0x000001acu, 0x0004003bu, 0x000001adu, 0x000001aeu, 0x0000000cu, 0x00040020u, 0x000001b0u, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000030u, 0x000001b7u, 0x00000002u, 0x0004002bu, 0x00000030u, 0x000001bau, 0x00000003u, 0x00040017u, 0x000001c1u, 0x00000030u, 0x00000003u, 0x00040020u, 0x000001c2u, 0x00000001u, 0x000001c1u, 0x0004003bu, 0x000001c2u, 0x000001c3u, 0x00000001u, 0x00040020u, 0x000001c4u, 0x00000001u, 0x00000030u, 0x00040017u, 0x000001c9u, 0x00000030u, 0x00000002u, 0x0004003bu, 0x000001c4u, 0x000001ceu, 0x00000001u, 0x0005002cu, 0x00000020u, 0x000001d9u, 0x00000132u, 0x00000082u, 0x00040032u, 0x00000006u, 0x000001e2u, 0x00000400u, 0x00040032u, 0x00000006u, 0x000001e3u, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001e4u, 0x00000087u, 0x000001e2u, 0x000001e3u, 0x00060034u, 0x00000006u, 0x000001ebu, 0x00000084u, 0x000001e3u, 0x00000132u, 0x00040032u, 0x00000006u, 0x000001ecu, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001edu, 0x00000084u, 0x000001ecu, 0x00000082u, 0x00050033u, 0x00000020u, 0x000001eeu, 0x000001ebu, 0x000001edu, 0x00060034u, 0x00000006u, 0x000001f2u, 0x00000084u, 0x000001e3u, 0x00000132u, 0x00060034u, 0x00000006u, 0x000001f3u, 0x00000084u, 0x000001ecu, 0x00000082u, 0x00050033u, 0x00000020u, 0x000001f4u, 0x000001f2u, 0x000001f3u, 0x0004001eu, 0x000001f6u, 0x000001c9u, 0x00000006u, 0x00040020u, 0x000001f7u, 0x00000009u, 0x000001f6u, 0x0004003bu, 0x000001f7u, 0x000001f8u, 0x00000009u, 0x00040020u, 0x000001f9u, 0x00000009u, 0x000001c9u, 0x00050033u, 0x00000020u, 0x00000202u, 0x000001e3u, 0x000001ecu, 0x00050033u, 0x00000020u, 0x00000206u, 0x000001e3u, 0x000001ecu, 0x00040020u, 0x0000020fu, 0x00000009u, 0x00000006u, 0x00040020u, 0x00000216u, 0x00000004u, 0x00000030u, 0x0004003bu, 0x00000216u, 0x00000217u, 0x00000004u, 0x0004002bu, 0x00000030u, 0x00000218u, 0x00000108u, 0x0004002bu, 0x00000006u, 0x0000021bu, 0x00000020u, 0x00040020u, 0x0000022bu, 0x00000007u, 0x00000036u, 0x00040032u, 0x00000006u, 0x00000232u, 0x00000001u, 0x0003001du, 0x000002abu, 0x00000030u, 0x0003001eu, 0x000002acu, 0x000002abu, 0x00040020u, 0x000002adu, 0x0000000cu, 0x000002acu, 0x0004003bu, 0x000002adu, 0x000002aeu, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002b0u, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002b1u, 0x00000087u, 0x000002b0u, 0x0000021bu, 0x00040020u, 0x000002b6u, 0x0000000cu, 0x00000030u, 0x0003001du, 0x000002bcu, 0x00000030u, 0x0003001eu, 0x000002bdu, 0x000002bcu, 0x00040020u, 0x000002beu, 0x0000000cu, 0x000002bdu, 0x0004003bu, 0x000002beu, 0x000002bfu, 0x0000000cu, 0x0004002bu, 0x00000030u, 0x000002ccu, 0x00000020u, 0x0006002cu, 0x000001c1u, 0x000002cdu, 0x000002ccu, 0x0000004au, 0x0000004au, 0x0004002bu, 0x00000006u, 0x000002ceu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x000002cfu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x000002d0u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x000002d1u, 0x00000100u, 0x0004002bu, 0x00000006u, 0x000002d2u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x000002d3u, 0x00000400u, 0x0004002bu, 0x00000006u, 0x000002d4u, 0x00000800u, 0x0004002bu, 0x00000006u, 0x000002d5u, 0x00001000u, 0x0004002bu, 0x00000006u, 0x000002d6u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x000002d7u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x000002d8u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x000002d9u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x000002dau, 0x00020000u, 0x0004002bu, 0x00000006u, 0x000002dbu, 0x00040000u, 0x0004002bu, 0x00000006u, 0x000002dcu, 0x00080000u, 0x0004002bu, 0x00000006u, 0x000002ddu, 0x00100000u, 0x0004002bu, 0x00000006u, 0x000002deu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x000002dfu, 0x00400000u, 0x0004002bu, 0x00000006u, 0x000002e0u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x000002e1u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x000002e2u, 0x0000001au, 0x0004002bu, 0x00000006u, 0x000002e3u, 0x10000000u, 0x0004002bu, 0x00000006u, 0x000002e4u, 0x20000000u, 0x0004002bu, 0x00000006u, 0x000002e5u, 0x40000000u, 0x00040032u, 0x00000006u, 0x000002e6u, 0x00008000u, 0x00040017u, 0x000002e7u, 0x00000175u, 0x00000004u, 0x0004002bu, 0x00000030u, 0x000002e8u, 0x00000008u, 0x0004001cu, 0x000002e9u, 0x00000175u, 0x000002e8u, 0x0005001eu, 0x000002eau, 0x000002e7u, 0x000002e7u, 0x000002e9u, 0x0003001du, 0x000002ebu, 0x000002eau, 0x0003001eu, 0x000002ecu, 0x000002ebu, 0x00040020u, 0x000002edu, 0x0000000cu, 0x000002ecu, 0x0004003bu, 0x000002edu, 0x000002eeu, 0x0000000cu, 0x00030029u, 0x0000001eu, 0x000002f4u, 0x0003002eu, 0x00000006u, 0x00000623u, 0x0005002cu, 0x00000020u, 0x00000782u, 0x000000a6u, 0x000000a6u, 0x0005002cu, 0x00000020u, 0x00000783u, 0x000000bau, 0x000000bau, 0x0007002cu, 0x00000007u, 0x00000784u, 0x0000003cu, 0x0000003cu, 0x0000003cu, 0x0000003cu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000014u, 0x00000716u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000715u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000714u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000713u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000711u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000710u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006efu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006eeu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006edu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ecu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ebu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ccu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006acu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006abu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006aau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000690u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000675u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000674u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000673u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000672u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000671u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000670u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000662u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000661u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000660u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000651u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000650u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000064fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000064eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000636u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000635u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000634u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000633u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000632u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000631u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000630u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000622u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000621u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000620u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000060fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000610u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000603u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000604u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000005f7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005f8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005f3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005efu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005d6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005d7u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005d8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005d9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005beu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a5u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005a6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000512u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000513u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000516u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000517u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000518u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000519u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000051du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000051eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000520u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000521u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000522u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000523u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000524u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000525u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000526u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000527u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000528u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000529u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052du, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000052eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000530u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000531u, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x000004c0u, 0x00000007u, 0x0000013du, 0x0004003bu, 0x0000001fu, 0x000004c1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004c2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004c3u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000004c4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c5u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000004c6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004c8u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000004c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004cau, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000004cbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000488u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000047cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000047du, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000470u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000471u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000464u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000465u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000460u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000045cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000443u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000444u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000445u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000446u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042bu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000042cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000411u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000412u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000413u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000414u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000037fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000380u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000381u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000382u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000383u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000384u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000385u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000386u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000387u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000388u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000389u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000390u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000391u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000392u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000393u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000394u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000395u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000396u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000397u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000398u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000399u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000039bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039du, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000039eu, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x0000032du, 0x00000007u, 0x0000013du, 0x0004003bu, 0x0000001fu, 0x0000032eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000032fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000330u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000331u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000332u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000333u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000335u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000336u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000337u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000338u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000002f5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001c0u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d4u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001dfu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001e9u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001f0u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000200u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000204u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000020eu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000219u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000021fu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000022du, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000230u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000023fu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000250u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000255u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000257u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000259u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000261u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000263u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000026bu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000273u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000027au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000027du, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000289u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000029au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000029fu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002a3u, 0x00000007u, 0x00050041u, 0x000001c4u, 0x000001c5u, 0x000001c3u, 0x00000047u, 0x0004003du, 0x00000030u, 0x000001c6u, 0x000001c5u, 0x0004007cu, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x0003003eu, 0x000001c0u, 0x000001c7u, 0x0004003du, 0x000001c1u, 0x000001cau, 0x000001c3u, 0x0007004fu, 0x000001c9u, 0x000001cbu, 0x000001cau, 0x000001cau, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000020u, 0x000001ccu, 0x000001cbu, 0x0003003eu, 0x000001c8u, 0x000001ccu, 0x0004003du, 0x00000030u, 0x000001cfu, 0x000001ceu, 0x0004007cu, 0x00000006u, 0x000001d0u, 0x000001cfu, 0x0003003eu, 0x000001cdu, 0x000001d0u, 0x000500c7u, 0x00000006u, 0x000001d3u, 0x000001d0u, 0x000000b8u, 0x0003003eu, 0x000001d1u, 0x000001d3u, 0x000500c3u, 0x00000006u, 0x000001d6u, 0x000001d0u, 0x0000007cu, 0x0003003eu, 0x000001d4u, 0x000001d6u, 0x00050084u, 0x00000020u, 0x000001dau, 0x000001ccu, 0x000001d9u, 0x00050050u, 0x00000020u, 0x000001ddu, 0x000001d3u, 0x000001d6u, 0x00050080u, 0x00000020u, 0x000001deu, 0x000001dau, 0x000001ddu, 0x0003003eu, 0x000001d7u, 0x000001deu, 0x00050041u, 0x00000014u, 0x000001e0u, 0x000001d7u, 0x0000004au, 0x0004003du, 0x00000006u, 0x000001e1u, 0x000001e0u, 0x00050084u, 0x00000006u, 0x000001e5u, 0x000001e1u, 0x000001e4u, 0x00050041u, 0x00000014u, 0x000001e6u, 0x000001d7u, 0x00000047u, 0x0004003du, 0x00000006u, 0x000001e7u, 0x000001e6u, 0x00050080u, 0x00000006u, 0x000001e8u, 0x000001e5u, 0x000001e7u, 0x0003003eu, 0x000001dfu, 0x000001e8u, 0x00050084u, 0x00000020u, 0x000001efu, 0x000001ccu, 0x000001eeu, 0x0003003eu, 0x000001e9u, 0x000001efu, 0x00050080u, 0x00000020u, 0x000001f5u, 0x000001efu, 0x000001f4u, 0x00050041u, 0x000001f9u, 0x000001fau, 0x000001f8u, 0x00000092u, 0x0004003du, 0x000001c9u, 0x000001fbu, 0x000001fau, 0x0004007cu, 0x00000020u, 0x000001fcu, 0x000001fbu, 0x0007000cu, 0x00000020u, 0x000001fdu, 0x00000001u, 0x00000027u, 0x000001f5u, 0x000001fcu, 0x00050082u, 0x00000020u, 0x000001ffu, 0x000001fdu, 0x00000782u, 0x0003003eu, 0x000001f0u, 0x000001ffu, 0x0004003du, 0x00000020u, 0x00000201u, 0x000001d7u, 0x00050084u, 0x00000020u, 0x00000203u, 0x00000201u, 0x00000202u, 0x0003003eu, 0x00000200u, 0x00000203u, 0x00050080u, 0x00000020u, 0x00000207u, 0x00000203u, 0x00000206u, 0x0007000cu, 0x00000020u, 0x0000020bu, 0x00000001u, 0x00000027u, 0x00000207u, 0x000001fcu, 0x00050082u, 0x00000020u, 0x0000020du, 0x0000020bu, 0x00000782u, 0x0003003eu, 0x00000204u, 0x0000020du, 0x00050041u, 0x0000020fu, 0x00000210u, 0x000001f8u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000211u, 0x00000210u, 0x0003003eu, 0x0000020eu, 0x00000211u, 0x000500aau, 0x0000001eu, 0x00000213u, 0x000001d0u, 0x00000092u, 0x000300f7u, 0x00000215u, 0x00000000u, 0x000400fau, 0x00000213u, 0x00000214u, 0x00000215u, 0x000200f8u, 0x00000214u, 0x0003003eu, 0x00000217u, 0x00000047u, 0x000200f9u, 0x00000215u, 0x000200f8u, 0x00000215u, 0x000400e0u, 0x000001b7u, 0x000001b7u, 0x00000218u, 0x0003003eu, 0x00000219u, 0x0000013du, 0x000500b1u, 0x0000001eu, 0x0000021cu, 0x000001d0u, 0x0000021bu, 0x000300f7u, 0x0000021eu, 0x00000000u, 0x000400fau, 0x0000021cu, 0x0000021du, 0x0000021eu, 0x000200f8u, 0x0000021du, 0x00050084u, 0x00000006u, 0x00000221u, 0x000001c7u, 0x0000021bu, 0x00050080u, 0x00000006u, 0x00000223u, 0x00000221u, 0x000001d0u, 0x0004007cu, 0x00000030u, 0x00000224u, 0x00000223u, 0x0003003eu, 0x0000021fu, 0x00000224u, 0x0004007cu, 0x00000030u, 0x00000227u, 0x00000211u, 0x000500b0u, 0x0000001eu, 0x00000228u, 0x00000224u, 0x00000227u, 0x000300f7u, 0x0000022au, 0x00000000u, 0x000400fau, 0x00000228u, 0x00000229u, 0x0000022au, 0x000200f8u, 0x00000229u, 0x0003003eu, 0x0000022du, 0x00000224u, 0x00060041u, 0x000001b0u, 0x000002f8u, 0x000001aeu, 0x00000092u, 0x00000224u, 0x0004003du, 0x00000007u, 0x000002f9u, 0x000002f8u, 0x0003003eu, 0x000002f5u, 0x000002f9u, 0x00050041u, 0x00000014u, 0x000002fau, 0x000002f5u, 0x00000047u, 0x0004003du, 0x00000006u, 0x000002fbu, 0x000002fau, 0x00050041u, 0x00000014u, 0x000002fcu, 0x000002f5u, 0x0000004au, 0x0004003du, 0x00000006u, 0x000002fdu, 0x000002fcu, 0x00050041u, 0x00000014u, 0x000002feu, 0x000002f5u, 0x000001b7u, 0x0004003du, 0x00000006u, 0x000002ffu, 0x000002feu, 0x00050041u, 0x00000014u, 0x00000300u, 0x000002f5u, 0x000001bau, 0x0004003du, 0x00000006u, 0x00000301u, 0x00000300u, 0x00070050u, 0x00000036u, 0x00000302u, 0x000002fbu, 0x000002fdu, 0x000002ffu, 0x00000301u, 0x0003003eu, 0x0000068du, 0x000002fbu, 0x0003003eu, 0x0000068eu, 0x000002fdu, 0x0003003eu, 0x0000068fu, 0x000002ffu, 0x0003003eu, 0x00000690u, 0x00000301u, 0x0003003eu, 0x0000069au, 0x000002fbu, 0x0003003eu, 0x0000069bu, 0x000002fdu, 0x0003003eu, 0x0000069cu, 0x000002ffu, 0x0003003eu, 0x0000069du, 0x00000301u, 0x00050050u, 0x00000020u, 0x00000237u, 0x000002fbu, 0x000002fdu, 0x000500c3u, 0x00000020u, 0x00000239u, 0x00000237u, 0x00000783u, 0x00050050u, 0x00000020u, 0x0000023au, 0x00000232u, 0x00000232u, 0x00050084u, 0x00000020u, 0x0000023bu, 0x0000023au, 0x00000239u, 0x00050082u, 0x00000020u, 0x0000023du, 0x0000023bu, 0x00000782u, 0x0007000cu, 0x00000020u, 0x0000023eu, 0x00000001u, 0x0000002au, 0x000001efu, 0x0000023du, 0x0003003eu, 0x00000230u, 0x0000023eu, 0x00050080u, 0x00000006u, 0x00000243u, 0x000002ffu, 0x0000007cu, 0x00050080u, 0x00000006u, 0x00000246u, 0x00000301u, 0x0000007cu, 0x00050050u, 0x00000020u, 0x00000247u, 0x00000243u, 0x00000246u, 0x000500c3u, 0x00000020u, 0x00000249u, 0x00000247u, 0x00000783u, 0x00050084u, 0x00000020u, 0x0000024bu, 0x0000023au, 0x00000249u, 0x00050082u, 0x00000020u, 0x0000024du, 0x0000024bu, 0x00000782u, 0x0007000cu, 0x00000020u, 0x0000024eu, 0x00000001u, 0x00000027u, 0x000001ffu, 0x0000024du, 0x0003003eu, 0x0000023fu, 0x0000024eu, 0x0003003eu, 0x00000250u, 0x00000224u, 0x00070041u, 0x0000017cu, 0x00000305u, 0x0000017au, 0x00000092u, 0x00000224u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000306u, 0x00000305u, 0x00070041u, 0x0000017cu, 0x00000308u, 0x0000017au, 0x00000092u, 0x00000224u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000309u, 0x00000308u, 0x00070041u, 0x0000017cu, 0x0000030bu, 0x0000017au, 0x00000092u, 0x00000224u, 0x000000bau, 0x0004003du, 0x00000006u, 0x0000030cu, 0x0000030bu, 0x00070041u, 0x00000186u, 0x0000030eu, 0x0000017au, 0x00000092u, 0x00000224u, 0x0000007cu, 0x0004003du, 0x00000174u, 0x0000030fu, 0x0000030eu, 0x00040072u, 0x00000006u, 0x00000310u, 0x0000030fu, 0x00070041u, 0x00000186u, 0x00000312u, 0x0000017au, 0x00000092u, 0x00000224u, 0x00000082u, 0x0004003du, 0x00000174u, 0x00000313u, 0x00000312u, 0x00040072u, 0x00000006u, 0x00000314u, 0x00000313u, 0x00070041u, 0x0000017cu, 0x00000316u, 0x0000017au, 0x00000092u, 0x00000224u, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000317u, 0x00000316u, 0x00070041u, 0x0000017cu, 0x00000319u, 0x0000017au, 0x00000092u, 0x00000224u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x0000031au, 0x00000319u, 0x00070041u, 0x0000017cu, 0x0000031cu, 0x0000017au, 0x00000092u, 0x00000224u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x0000031du, 0x0000031cu, 0x00070041u, 0x00000186u, 0x0000031fu, 0x0000017au, 0x00000092u, 0x00000224u, 0x00000132u, 0x0004003du, 0x00000174u, 0x00000320u, 0x0000031fu, 0x00040072u, 0x00000006u, 0x00000321u, 0x00000320u, 0x00070041u, 0x0000019cu, 0x00000323u, 0x0000017au, 0x00000092u, 0x00000224u, 0x00000140u, 0x0004003du, 0x00000175u, 0x00000324u, 0x00000323u, 0x00040071u, 0x00000030u, 0x00000325u, 0x00000324u, 0x0004007cu, 0x00000006u, 0x00000326u, 0x00000325u, 0x00070041u, 0x0000019cu, 0x00000328u, 0x0000017au, 0x00000092u, 0x00000224u, 0x000001a2u, 0x0004003du, 0x00000175u, 0x00000329u, 0x00000328u, 0x00040071u, 0x00000030u, 0x0000032au, 0x00000329u, 0x0004007cu, 0x00000006u, 0x0000032bu, 0x0000032au, 0x000e0050u, 0x0000001cu, 0x0000032cu, 0x00000306u, 0x00000309u, 0x0000030cu, 0x00000310u, 0x00000314u, 0x00000317u, 0x0000031au, 0x0000031du, 0x00000321u, 0x00000326u, 0x0000032bu, 0x0003003eu, 0x0000066bu, 0x00000306u, 0x0003003eu, 0x0000066cu, 0x00000309u, 0x0003003eu, 0x0000066du, 0x0000030cu, 0x0003003eu, 0x0000066eu, 0x00000310u, 0x0003003eu, 0x0000066fu, 0x00000314u, 0x0003003eu, 0x00000670u, 0x00000317u, 0x0003003eu, 0x00000671u, 0x0000031au, 0x0003003eu, 0x00000672u, 0x0000031du, 0x0003003eu, 0x00000673u, 0x00000321u, 0x0003003eu, 0x00000674u, 0x00000326u, 0x0003003eu, 0x00000675u, 0x0000032bu, 0x0003003eu, 0x000006a2u, 0x00000306u, 0x0003003eu, 0x000006a3u, 0x00000309u, 0x0003003eu, 0x000006a4u, 0x0000030cu, 0x0003003eu, 0x000006a5u, 0x00000310u, 0x0003003eu, 0x000006a6u, 0x00000314u, 0x0003003eu, 0x000006a7u, 0x00000317u, 0x0003003eu, 0x000006a8u, 0x0000031au, 0x0003003eu, 0x000006a9u, 0x0000031du, 0x0003003eu, 0x000006aau, 0x00000321u, 0x0003003eu, 0x000006abu, 0x00000326u, 0x0003003eu, 0x000006acu, 0x0000032bu, 0x0003003eu, 0x000006c4u, 0x00000306u, 0x0003003eu, 0x000006c5u, 0x00000309u, 0x0003003eu, 0x000006c6u, 0x0000030cu, 0x0003003eu, 0x000006c7u, 0x00000310u, 0x0003003eu, 0x000006c8u, 0x00000314u, 0x0003003eu, 0x000006c9u, 0x00000317u, 0x0003003eu, 0x000006cau, 0x0000031au, 0x0003003eu, 0x000006cbu, 0x0000031du, 0x0003003eu, 0x000006ccu, 0x00000321u, 0x0003003eu, 0x000006cdu, 0x00000326u, 0x0003003eu, 0x00000255u, 0x0000023eu, 0x0003003eu, 0x00000257u, 0x0000024eu, 0x0003003eu, 0x00000259u, 0x00000232u, 0x0003003eu, 0x0000032du, 0x0000013du, 0x000300f7u, 0x00000339u, 0x00000000u, 0x000300fbu, 0x00000047u, 0x0000033au, 0x000200f8u, 0x0000033au, 0x00050041u, 0x00000014u, 0x0000033bu, 0x00000255u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000033cu, 0x0000033bu, 0x00050084u, 0x00000006u, 0x0000033du, 0x0000033cu, 0x00000082u, 0x0003003eu, 0x0000032fu, 0x0000033du, 0x00050041u, 0x00000014u, 0x0000033eu, 0x00000257u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000033fu, 0x0000033eu, 0x00050084u, 0x00000006u, 0x00000340u, 0x0000033fu, 0x00000082u, 0x00050080u, 0x00000006u, 0x00000341u, 0x00000340u, 0x0000007cu, 0x0003003eu, 0x00000330u, 0x00000341u, 0x00050084u, 0x00000006u, 0x00000346u, 0x00000232u, 0x00000310u, 0x0007000cu, 0x00000006u, 0x00000347u, 0x00000001u, 0x0000002au, 0x0000033du, 0x00000346u, 0x0003003eu, 0x0000032fu, 0x00000347u, 0x00050084u, 0x00000006u, 0x0000034cu, 0x00000232u, 0x00000321u, 0x00050082u, 0x00000006u, 0x0000034du, 0x0000034cu, 0x000000a6u, 0x0007000cu, 0x00000006u, 0x0000034eu, 0x00000001u, 0x00000027u, 0x00000341u, 0x0000034du, 0x0003003eu, 0x00000330u, 0x0000034eu, 0x000500b1u, 0x0000001eu, 0x00000351u, 0x0000034eu, 0x00000347u, 0x000300f7u, 0x00000352u, 0x00000000u, 0x000400fau, 0x00000351u, 0x00000353u, 0x00000352u, 0x000200f8u, 0x00000353u, 0x0003003eu, 0x0000032du, 0x000002f4u, 0x0003003eu, 0x0000032eu, 0x0000013du, 0x000200f9u, 0x00000339u, 0x000200f8u, 0x00000352u, 0x000500c7u, 0x00000006u, 0x00000356u, 0x00000326u, 0x000000a6u, 0x000500abu, 0x0000001eu, 0x00000357u, 0x00000356u, 0x00000092u, 0x0003003eu, 0x00000331u, 0x00000357u, 0x00050084u, 0x00000006u, 0x0000035du, 0x00000314u, 0x00000232u, 0x00050050u, 0x00000020u, 0x0000035eu, 0x0000035du, 0x0000035du, 0x00050080u, 0x00000020u, 0x0000035fu, 0x0000035eu, 0x0000014cu, 0x00050050u, 0x00000020u, 0x00000361u, 0x00000347u, 0x00000347u, 0x00050050u, 0x00000020u, 0x00000363u, 0x0000034eu, 0x0000034eu, 0x0008000cu, 0x00000020u, 0x00000364u, 0x00000001u, 0x0000002du, 0x0000035fu, 0x00000361u, 0x00000363u, 0x00050051u, 0x00000006u, 0x00000365u, 0x00000364u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000366u, 0x00000364u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000367u, 0x00000347u, 0x0000034eu, 0x00000365u, 0x00000366u, 0x0003003eu, 0x00000332u, 0x00000367u, 0x000e0050u, 0x0000001cu, 0x000006e2u, 0x00000306u, 0x00000309u, 0x0000030cu, 0x00000310u, 0x00000314u, 0x00000317u, 0x0000031au, 0x0000031du, 0x00000321u, 0x00000326u, 0x00000623u, 0x0003003eu, 0x0000065bu, 0x00000306u, 0x0003003eu, 0x0000065cu, 0x00000309u, 0x0003003eu, 0x0000065du, 0x0000030cu, 0x0003003eu, 0x0000065eu, 0x00000310u, 0x0003003eu, 0x0000065fu, 0x00000314u, 0x0003003eu, 0x00000660u, 0x00000317u, 0x0003003eu, 0x00000661u, 0x0000031au, 0x0003003eu, 0x00000662u, 0x0000031du, 0x0003003eu, 0x00000335u, 0x00000367u, 0x0003003eu, 0x00000336u, 0x00000357u, 0x0003003eu, 0x00000337u, 0x00000232u, 0x000500c7u, 0x00000006u, 0x000003a1u, 0x00000310u, 0x0000007fu, 0x0003003eu, 0x0000037fu, 0x000003a1u, 0x0003003eu, 0x00000380u, 0x00000314u, 0x00050084u, 0x00000006u, 0x000003a6u, 0x000003a1u, 0x00000232u, 0x0003003eu, 0x0000037fu, 0x000003a6u, 0x0003003eu, 0x00000380u, 0x0000035du, 0x00070050u, 0x00000007u, 0x000003acu, 0x000003a6u, 0x000003a6u, 0x000003a6u, 0x000003a6u, 0x00050082u, 0x00000007u, 0x000003adu, 0x00000367u, 0x000003acu, 0x00050084u, 0x00000006u, 0x000003b1u, 0x00000232u, 0x00000306u, 0x0003003eu, 0x00000383u, 0x000003adu, 0x0003003eu, 0x00000384u, 0x00000317u, 0x0003003eu, 0x00000385u, 0x000003b1u, 0x00070050u, 0x00000007u, 0x00000417u, 0x00000317u, 0x00000317u, 0x00000317u, 0x00000317u, 0x00050098u, 0x00000062u, 0x00000418u, 0x000003adu, 0x00000417u, 0x00050051u, 0x00000007u, 0x00000419u, 0x00000418u, 0x00000000u, 0x0003003eu, 0x00000412u, 0x00000419u, 0x00050051u, 0x00000007u, 0x0000041au, 0x00000418u, 0x00000001u, 0x0003003eu, 0x00000411u, 0x0000041au, 0x0004007cu, 0x00000067u, 0x0000041cu, 0x00000419u, 0x0004007cu, 0x00000030u, 0x0000041eu, 0x000003b1u, 0x00070050u, 0x00000067u, 0x0000041fu, 0x0000041eu, 0x0000041eu, 0x0000041eu, 0x0000041eu, 0x00050095u, 0x0000006eu, 0x00000420u, 0x0000041cu, 0x0000041fu, 0x00050051u, 0x00000067u, 0x00000421u, 0x00000420u, 0x00000001u, 0x0003003eu, 0x00000413u, 0x00000421u, 0x00050051u, 0x00000067u, 0x00000422u, 0x00000420u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000423u, 0x00000422u, 0x0003003eu, 0x00000412u, 0x00000423u, 0x0004007cu, 0x00000007u, 0x00000425u, 0x00000421u, 0x00050080u, 0x00000007u, 0x00000427u, 0x0000041au, 0x00000425u, 0x0003003eu, 0x00000411u, 0x00000427u, 0x0003003eu, 0x00000386u, 0x00000427u, 0x0003003eu, 0x00000414u, 0x00000423u, 0x0003003eu, 0x00000382u, 0x00000427u, 0x0003003eu, 0x00000381u, 0x00000423u, 0x00050084u, 0x00000006u, 0x000003bdu, 0x00000232u, 0x00000309u, 0x0003003eu, 0x00000389u, 0x000003adu, 0x0003003eu, 0x0000038au, 0x0000031au, 0x0003003eu, 0x0000038bu, 0x000003bdu, 0x00070050u, 0x00000007u, 0x00000430u, 0x0000031au, 0x0000031au, 0x0000031au, 0x0000031au, 0x00050098u, 0x00000062u, 0x00000431u, 0x000003adu, 0x00000430u, 0x00050051u, 0x00000007u, 0x00000432u, 0x00000431u, 0x00000000u, 0x0003003eu, 0x0000042bu, 0x00000432u, 0x00050051u, 0x00000007u, 0x00000433u, 0x00000431u, 0x00000001u, 0x0003003eu, 0x0000042au, 0x00000433u, 0x0004007cu, 0x00000067u, 0x00000435u, 0x00000432u, 0x0004007cu, 0x00000030u, 0x00000437u, 0x000003bdu, 0x00070050u, 0x00000067u, 0x00000438u, 0x00000437u, 0x00000437u, 0x00000437u, 0x00000437u, 0x00050095u, 0x0000006eu, 0x00000439u, 0x00000435u, 0x00000438u, 0x00050051u, 0x00000067u, 0x0000043au, 0x00000439u, 0x00000001u, 0x0003003eu, 0x0000042cu, 0x0000043au, 0x00050051u, 0x00000067u, 0x0000043bu, 0x00000439u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000043cu, 0x0000043bu, 0x0003003eu, 0x0000042bu, 0x0000043cu, 0x0004007cu, 0x00000007u, 0x0000043eu, 0x0000043au, 0x00050080u, 0x00000007u, 0x00000440u, 0x00000433u, 0x0000043eu, 0x0003003eu, 0x0000042au, 0x00000440u, 0x0003003eu, 0x0000038cu, 0x00000440u, 0x0003003eu, 0x0000042du, 0x0000043cu, 0x0003003eu, 0x00000388u, 0x00000440u, 0x0003003eu, 0x00000387u, 0x0000043cu, 0x00070050u, 0x00000007u, 0x000003c4u, 0x0000035du, 0x0000035du, 0x0000035du, 0x0000035du, 0x00050082u, 0x00000007u, 0x000003c5u, 0x00000367u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000003c9u, 0x00000232u, 0x0000030cu, 0x0003003eu, 0x0000038fu, 0x000003c5u, 0x0003003eu, 0x00000390u, 0x0000031du, 0x0003003eu, 0x00000391u, 0x000003c9u, 0x00070050u, 0x00000007u, 0x00000449u, 0x0000031du, 0x0000031du, 0x0000031du, 0x0000031du, 0x00050098u, 0x00000062u, 0x0000044au, 0x000003c5u, 0x00000449u, 0x00050051u, 0x00000007u, 0x0000044bu, 0x0000044au, 0x00000000u, 0x0003003eu, 0x00000444u, 0x0000044bu, 0x00050051u, 0x00000007u, 0x0000044cu, 0x0000044au, 0x00000001u, 0x0003003eu, 0x00000443u, 0x0000044cu, 0x0004007cu, 0x00000067u, 0x0000044eu, 0x0000044bu, 0x0004007cu, 0x00000030u, 0x00000450u, 0x000003c9u, 0x00070050u, 0x00000067u, 0x00000451u, 0x00000450u, 0x00000450u, 0x00000450u, 0x00000450u, 0x00050095u, 0x0000006eu, 0x00000452u, 0x0000044eu, 0x00000451u, 0x00050051u, 0x00000067u, 0x00000453u, 0x00000452u, 0x00000001u, 0x0003003eu, 0x00000445u, 0x00000453u, 0x00050051u, 0x00000067u, 0x00000454u, 0x00000452u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000455u, 0x00000454u, 0x0003003eu, 0x00000444u, 0x00000455u, 0x0004007cu, 0x00000007u, 0x00000457u, 0x00000453u, 0x00050080u, 0x00000007u, 0x00000459u, 0x0000044cu, 0x00000457u, 0x0003003eu, 0x00000443u, 0x00000459u, 0x0003003eu, 0x00000392u, 0x00000459u, 0x0003003eu, 0x00000446u, 0x00000455u, 0x0003003eu, 0x0000038eu, 0x00000459u, 0x0003003eu, 0x0000038du, 0x00000455u, 0x00050084u, 0x00000006u, 0x000003d4u, 0x00000232u, 0x00000314u, 0x00070050u, 0x00000007u, 0x000003d5u, 0x000003d4u, 0x000003d4u, 0x000003d4u, 0x000003d4u, 0x000500b1u, 0x000000cfu, 0x000003d6u, 0x00000367u, 0x000003d5u, 0x000600a9u, 0x00000007u, 0x000003d7u, 0x000003d6u, 0x0000043cu, 0x00000455u, 0x0003003eu, 0x0000038du, 0x000003d7u, 0x000600a9u, 0x00000007u, 0x000003e1u, 0x000003d6u, 0x00000440u, 0x00000459u, 0x0003003eu, 0x0000038eu, 0x000003e1u, 0x000500adu, 0x000000cfu, 0x000003e4u, 0x00000427u, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000003e5u, 0x000003e4u, 0x000000deu, 0x00000423u, 0x0003003eu, 0x00000381u, 0x000003e5u, 0x000500b1u, 0x000000cfu, 0x000003e8u, 0x00000427u, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000003e9u, 0x000003e8u, 0x000000e5u, 0x000003e5u, 0x0003003eu, 0x00000381u, 0x000003e9u, 0x000500adu, 0x000000cfu, 0x000003ecu, 0x000003e1u, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000003edu, 0x000003ecu, 0x000000deu, 0x000003d7u, 0x0003003eu, 0x0000038du, 0x000003edu, 0x000500b1u, 0x000000cfu, 0x000003f0u, 0x000003e1u, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000003f1u, 0x000003f0u, 0x000000e5u, 0x000003edu, 0x0003003eu, 0x0000038du, 0x000003f1u, 0x0003003eu, 0x00000394u, 0x000003e9u, 0x000500c3u, 0x00000007u, 0x0000045fu, 0x000003e9u, 0x00000784u, 0x0003003eu, 0x0000045cu, 0x0000045fu, 0x0003003eu, 0x00000393u, 0x0000045fu, 0x0003003eu, 0x00000396u, 0x000003f1u, 0x000500c3u, 0x00000007u, 0x00000463u, 0x000003f1u, 0x00000784u, 0x0003003eu, 0x00000460u, 0x00000463u, 0x0003003eu, 0x00000395u, 0x00000463u, 0x000300f7u, 0x000003f7u, 0x00000000u, 0x000400fau, 0x00000357u, 0x000003f8u, 0x000003f9u, 0x000200f8u, 0x000003f8u, 0x0003003eu, 0x00000397u, 0x0000045fu, 0x0003003eu, 0x00000398u, 0x00000463u, 0x000200f9u, 0x000003f7u, 0x000200f8u, 0x000003f9u, 0x0003003eu, 0x00000397u, 0x00000463u, 0x0003003eu, 0x00000398u, 0x0000045fu, 0x000200f9u, 0x000003f7u, 0x000200f8u, 0x000003f7u, 0x00070050u, 0x000000cfu, 0x00000785u, 0x00000357u, 0x00000357u, 0x00000357u, 0x00000357u, 0x000600a9u, 0x00000007u, 0x00000786u, 0x00000785u, 0x00000463u, 0x0000045fu, 0x000600a9u, 0x00000007u, 0x00000788u, 0x00000785u, 0x0000045fu, 0x00000463u, 0x0006000cu, 0x00000007u, 0x000003ffu, 0x00000001u, 0x00000005u, 0x00000788u, 0x0006000cu, 0x00000007u, 0x00000401u, 0x00000001u, 0x00000005u, 0x00000786u, 0x0007000cu, 0x00000007u, 0x00000402u, 0x00000001u, 0x0000002au, 0x000003ffu, 0x00000401u, 0x0003003eu, 0x0000039au, 0x00000402u, 0x0007004fu, 0x00000020u, 0x00000467u, 0x00000402u, 0x00000402u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000469u, 0x00000402u, 0x00000402u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x0000046au, 0x00000001u, 0x0000002au, 0x00000467u, 0x00000469u, 0x0003003eu, 0x00000464u, 0x0000046au, 0x00050041u, 0x00000014u, 0x0000046bu, 0x00000464u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000046cu, 0x0000046bu, 0x00050041u, 0x00000014u, 0x0000046du, 0x00000464u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000046eu, 0x0000046du, 0x0007000cu, 0x00000006u, 0x0000046fu, 0x00000001u, 0x0000002au, 0x0000046cu, 0x0000046eu, 0x0003003eu, 0x00000465u, 0x0000046fu, 0x0003003eu, 0x00000399u, 0x0000046fu, 0x00050084u, 0x00000006u, 0x00000406u, 0x0000010eu, 0x00000232u, 0x000500b3u, 0x0000001eu, 0x00000407u, 0x0000046fu, 0x00000406u, 0x000300f7u, 0x00000408u, 0x00000000u, 0x000400fau, 0x00000407u, 0x00000409u, 0x0000040au, 0x000200f8u, 0x00000409u, 0x0003003eu, 0x0000039cu, 0x00000788u, 0x0007004fu, 0x00000020u, 0x00000473u, 0x00000788u, 0x00000788u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000475u, 0x00000788u, 0x00000788u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000476u, 0x00000001u, 0x00000027u, 0x00000473u, 0x00000475u, 0x0003003eu, 0x00000470u, 0x00000476u, 0x00050041u, 0x00000014u, 0x00000477u, 0x00000470u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000478u, 0x00000477u, 0x00050041u, 0x00000014u, 0x00000479u, 0x00000470u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000047au, 0x00000479u, 0x0007000cu, 0x00000006u, 0x0000047bu, 0x00000001u, 0x00000027u, 0x00000478u, 0x0000047au, 0x0003003eu, 0x00000471u, 0x0000047bu, 0x0003003eu, 0x0000039du, 0x00000786u, 0x0007004fu, 0x00000020u, 0x0000047fu, 0x00000786u, 0x00000786u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000481u, 0x00000786u, 0x00000786u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000482u, 0x00000001u, 0x0000002au, 0x0000047fu, 0x00000481u, 0x0003003eu, 0x0000047cu, 0x00000482u, 0x00050041u, 0x00000014u, 0x00000483u, 0x0000047cu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000484u, 0x00000483u, 0x00050041u, 0x00000014u, 0x00000485u, 0x0000047cu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000486u, 0x00000485u, 0x0007000cu, 0x00000006u, 0x00000487u, 0x00000001u, 0x0000002au, 0x00000484u, 0x00000486u, 0x0003003eu, 0x0000047du, 0x00000487u, 0x00050050u, 0x00000020u, 0x0000040fu, 0x0000047bu, 0x00000487u, 0x0003003eu, 0x0000039bu, 0x0000040fu, 0x000200f9u, 0x00000408u, 0x000200f8u, 0x0000040au, 0x0003003eu, 0x0000039bu, 0x0000011du, 0x000200f9u, 0x00000408u, 0x000200f8u, 0x00000408u, 0x000700f5u, 0x00000020u, 0x00000734u, 0x0000040fu, 0x00000409u, 0x0000011du, 0x0000040au, 0x0003003eu, 0x0000039eu, 0x00000734u, 0x0003003eu, 0x00000333u, 0x00000734u, 0x00050041u, 0x00000014u, 0x0000036du, 0x00000333u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000036eu, 0x0000036du, 0x00050041u, 0x00000014u, 0x0000036fu, 0x00000255u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000370u, 0x0000036fu, 0x0007000cu, 0x00000006u, 0x00000371u, 0x00000001u, 0x0000002au, 0x0000036eu, 0x00000370u, 0x0003003eu, 0x0000036du, 0x00000371u, 0x00050041u, 0x00000014u, 0x00000373u, 0x00000333u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000374u, 0x00000373u, 0x00050041u, 0x00000014u, 0x00000375u, 0x00000257u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000376u, 0x00000375u, 0x0007000cu, 0x00000006u, 0x00000377u, 0x00000001u, 0x00000027u, 0x00000374u, 0x00000376u, 0x0003003eu, 0x00000373u, 0x00000377u, 0x0004003du, 0x00000006u, 0x0000037au, 0x0000036du, 0x0004003du, 0x00000006u, 0x0000037cu, 0x00000373u, 0x000500b3u, 0x0000001eu, 0x0000037du, 0x0000037au, 0x0000037cu, 0x0003003eu, 0x0000032du, 0x000002f4u, 0x0003003eu, 0x0000032eu, 0x0000037du, 0x000200f9u, 0x00000339u, 0x000200f8u, 0x00000339u, 0x000700f5u, 0x0000001eu, 0x00000735u, 0x0000013du, 0x00000353u, 0x0000037du, 0x00000408u, 0x0003003eu, 0x00000338u, 0x00000735u, 0x0003003eu, 0x00000219u, 0x00000735u, 0x000200f9u, 0x0000022au, 0x000200f8u, 0x0000022au, 0x000700f5u, 0x0000001eu, 0x00000737u, 0x0000013du, 0x0000021du, 0x00000735u, 0x00000339u, 0x000200f9u, 0x0000021eu, 0x000200f8u, 0x0000021eu, 0x000700f5u, 0x0000001eu, 0x00000736u, 0x0000013du, 0x00000215u, 0x00000737u, 0x0000022au, 0x000300f7u, 0x0000025du, 0x00000000u, 0x000400fau, 0x00000736u, 0x0000025cu, 0x0000025du, 0x000200f8u, 0x0000025cu, 0x000500c4u, 0x00000030u, 0x0000025fu, 0x0000004au, 0x000001d0u, 0x000700f1u, 0x00000030u, 0x00000260u, 0x00000217u, 0x0000004au, 0x00000047u, 0x0000025fu, 0x000200f9u, 0x0000025du, 0x000200f8u, 0x0000025du, 0x000400e0u, 0x000001b7u, 0x000001b7u, 0x00000218u, 0x0004003du, 0x00000030u, 0x00000262u, 0x00000217u, 0x0003003eu, 0x00000261u, 0x00000262u, 0x0003003eu, 0x00000263u, 0x00000047u, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000264u, 0x000700f5u, 0x00000030u, 0x0000074du, 0x00000047u, 0x0000025du, 0x00000775u, 0x00000267u, 0x000700f5u, 0x00000030u, 0x0000073du, 0x00000262u, 0x0000025du, 0x00000272u, 0x00000267u, 0x000500abu, 0x0000001eu, 0x0000026au, 0x0000073du, 0x00000047u, 0x000400f6u, 0x00000266u, 0x00000267u, 0x00000000u, 0x000400fau, 0x0000026au, 0x00000265u, 0x00000266u, 0x000200f8u, 0x00000265u, 0x0006000cu, 0x00000006u, 0x0000026du, 0x00000001u, 0x00000049u, 0x0000073du, 0x0003003eu, 0x0000026bu, 0x0000026du, 0x000500c4u, 0x00000030u, 0x0000026fu, 0x0000004au, 0x0000026du, 0x000400c8u, 0x00000030u, 0x00000270u, 0x0000026fu, 0x000500c7u, 0x00000030u, 0x00000272u, 0x0000073du, 0x00000270u, 0x0003003eu, 0x00000261u, 0x00000272u, 0x00050084u, 0x00000006u, 0x00000275u, 0x000001c7u, 0x0000021bu, 0x00050080u, 0x00000006u, 0x00000277u, 0x00000275u, 0x0000026du, 0x0004007cu, 0x00000030u, 0x00000278u, 0x00000277u, 0x0003003eu, 0x00000273u, 0x00000278u, 0x0003003eu, 0x0000027au, 0x00000278u, 0x00060041u, 0x000001b0u, 0x0000048bu, 0x000001aeu, 0x00000092u, 0x00000278u, 0x0004003du, 0x00000007u, 0x0000048cu, 0x0000048bu, 0x0003003eu, 0x00000488u, 0x0000048cu, 0x00050041u, 0x00000014u, 0x0000048du, 0x00000488u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000048eu, 0x0000048du, 0x00050041u, 0x00000014u, 0x0000048fu, 0x00000488u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000490u, 0x0000048fu, 0x00050041u, 0x00000014u, 0x00000491u, 0x00000488u, 0x000001b7u, 0x0004003du, 0x00000006u, 0x00000492u, 0x00000491u, 0x00050041u, 0x00000014u, 0x00000493u, 0x00000488u, 0x000001bau, 0x0004003du, 0x00000006u, 0x00000494u, 0x00000493u, 0x00070050u, 0x00000036u, 0x00000495u, 0x0000048eu, 0x00000490u, 0x00000492u, 0x00000494u, 0x0003003eu, 0x0000064eu, 0x0000048eu, 0x0003003eu, 0x0000064fu, 0x00000490u, 0x0003003eu, 0x00000650u, 0x00000492u, 0x0003003eu, 0x00000651u, 0x00000494u, 0x0003003eu, 0x000006e3u, 0x0000048eu, 0x0003003eu, 0x000006e4u, 0x00000490u, 0x0003003eu, 0x000006e5u, 0x00000492u, 0x0003003eu, 0x000006e6u, 0x00000494u, 0x00050050u, 0x00000020u, 0x00000283u, 0x0000048eu, 0x00000490u, 0x000500c3u, 0x00000020u, 0x00000285u, 0x00000283u, 0x00000783u, 0x00050050u, 0x00000020u, 0x00000286u, 0x00000232u, 0x00000232u, 0x00050084u, 0x00000020u, 0x00000287u, 0x00000286u, 0x00000285u, 0x0007000cu, 0x00000020u, 0x00000288u, 0x00000001u, 0x0000002au, 0x00000203u, 0x00000287u, 0x0003003eu, 0x0000027du, 0x00000288u, 0x00050080u, 0x00000006u, 0x0000028du, 0x00000492u, 0x0000007cu, 0x00050080u, 0x00000006u, 0x00000290u, 0x00000494u, 0x0000007cu, 0x00050050u, 0x00000020u, 0x00000291u, 0x0000028du, 0x00000290u, 0x000500c3u, 0x00000020u, 0x00000293u, 0x00000291u, 0x00000783u, 0x00050084u, 0x00000020u, 0x00000295u, 0x00000286u, 0x00000293u, 0x00050082u, 0x00000020u, 0x00000297u, 0x00000295u, 0x00000782u, 0x0007000cu, 0x00000020u, 0x00000298u, 0x00000001u, 0x00000027u, 0x0000020du, 0x00000297u, 0x0003003eu, 0x00000289u, 0x00000298u, 0x0003003eu, 0x0000029au, 0x00000278u, 0x00070041u, 0x0000017cu, 0x00000498u, 0x0000017au, 0x00000092u, 0x00000278u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000499u, 0x00000498u, 0x00070041u, 0x0000017cu, 0x0000049bu, 0x0000017au, 0x00000092u, 0x00000278u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x0000049cu, 0x0000049bu, 0x00070041u, 0x0000017cu, 0x0000049eu, 0x0000017au, 0x00000092u, 0x00000278u, 0x000000bau, 0x0004003du, 0x00000006u, 0x0000049fu, 0x0000049eu, 0x00070041u, 0x00000186u, 0x000004a1u, 0x0000017au, 0x00000092u, 0x00000278u, 0x0000007cu, 0x0004003du, 0x00000174u, 0x000004a2u, 0x000004a1u, 0x00040072u, 0x00000006u, 0x000004a3u, 0x000004a2u, 0x00070041u, 0x00000186u, 0x000004a5u, 0x0000017au, 0x00000092u, 0x00000278u, 0x00000082u, 0x0004003du, 0x00000174u, 0x000004a6u, 0x000004a5u, 0x00040072u, 0x00000006u, 0x000004a7u, 0x000004a6u, 0x00070041u, 0x0000017cu, 0x000004a9u, 0x0000017au, 0x00000092u, 0x00000278u, 0x00000090u, 0x0004003du, 0x00000006u, 0x000004aau, 0x000004a9u, 0x00070041u, 0x0000017cu, 0x000004acu, 0x0000017au, 0x00000092u, 0x00000278u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x000004adu, 0x000004acu, 0x00070041u, 0x0000017cu, 0x000004afu, 0x0000017au, 0x00000092u, 0x00000278u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000004b0u, 0x000004afu, 0x00070041u, 0x00000186u, 0x000004b2u, 0x0000017au, 0x00000092u, 0x00000278u, 0x00000132u, 0x0004003du, 0x00000174u, 0x000004b3u, 0x000004b2u, 0x00040072u, 0x00000006u, 0x000004b4u, 0x000004b3u, 0x00070041u, 0x0000019cu, 0x000004b6u, 0x0000017au, 0x00000092u, 0x00000278u, 0x00000140u, 0x0004003du, 0x00000175u, 0x000004b7u, 0x000004b6u, 0x00040071u, 0x00000030u, 0x000004b8u, 0x000004b7u, 0x0004007cu, 0x00000006u, 0x000004b9u, 0x000004b8u, 0x00070041u, 0x0000019cu, 0x000004bbu, 0x0000017au, 0x00000092u, 0x00000278u, 0x000001a2u, 0x0004003du, 0x00000175u, 0x000004bcu, 0x000004bbu, 0x00040071u, 0x00000030u, 0x000004bdu, 0x000004bcu, 0x0004007cu, 0x00000006u, 0x000004beu, 0x000004bdu, 0x000e0050u, 0x0000001cu, 0x000004bfu, 0x00000499u, 0x0000049cu, 0x0000049fu, 0x000004a3u, 0x000004a7u, 0x000004aau, 0x000004adu, 0x000004b0u, 0x000004b4u, 0x000004b9u, 0x000004beu, 0x0003003eu, 0x0000062cu, 0x00000499u, 0x0003003eu, 0x0000062du, 0x0000049cu, 0x0003003eu, 0x0000062eu, 0x0000049fu, 0x0003003eu, 0x0000062fu, 0x000004a3u, 0x0003003eu, 0x00000630u, 0x000004a7u, 0x0003003eu, 0x00000631u, 0x000004aau, 0x0003003eu, 0x00000632u, 0x000004adu, 0x0003003eu, 0x00000633u, 0x000004b0u, 0x0003003eu, 0x00000634u, 0x000004b4u, 0x0003003eu, 0x00000635u, 0x000004b9u, 0x0003003eu, 0x00000636u, 0x000004beu, 0x0003003eu, 0x000006ebu, 0x00000499u, 0x0003003eu, 0x000006ecu, 0x0000049cu, 0x0003003eu, 0x000006edu, 0x0000049fu, 0x0003003eu, 0x000006eeu, 0x000004a3u, 0x0003003eu, 0x000006efu, 0x000004a7u, 0x0003003eu, 0x000006f0u, 0x000004aau, 0x0003003eu, 0x000006f1u, 0x000004adu, 0x0003003eu, 0x000006f2u, 0x000004b0u, 0x0003003eu, 0x000006f3u, 0x000004b4u, 0x0003003eu, 0x000006f4u, 0x000004b9u, 0x0003003eu, 0x000006f5u, 0x000004beu, 0x0003003eu, 0x0000070du, 0x00000499u, 0x0003003eu, 0x0000070eu, 0x0000049cu, 0x0003003eu, 0x0000070fu, 0x0000049fu, 0x0003003eu, 0x00000710u, 0x000004a3u, 0x0003003eu, 0x00000711u, 0x000004a7u, 0x0003003eu, 0x00000712u, 0x000004aau, 0x0003003eu, 0x00000713u, 0x000004adu, 0x0003003eu, 0x00000714u, 0x000004b0u, 0x0003003eu, 0x00000715u, 0x000004b4u, 0x0003003eu, 0x00000716u, 0x000004b9u, 0x0003003eu, 0x0000029fu, 0x00000288u, 0x0003003eu, 0x000002a1u, 0x00000298u, 0x0003003eu, 0x000002a3u, 0x00000232u, 0x0003003eu, 0x000004c0u, 0x0000013du, 0x000300f7u, 0x000004ccu, 0x00000000u, 0x000300fbu, 0x00000047u, 0x000004cdu, 0x000200f8u, 0x000004cdu, 0x00050041u, 0x00000014u, 0x000004ceu, 0x0000029fu, 0x0000004au, 0x0004003du, 0x00000006u, 0x000004cfu, 0x000004ceu, 0x00050084u, 0x00000006u, 0x000004d0u, 0x000004cfu, 0x00000082u, 0x0003003eu, 0x000004c2u, 0x000004d0u, 0x00050041u, 0x00000014u, 0x000004d1u, 0x000002a1u, 0x0000004au, 0x0004003du, 0x00000006u, 0x000004d2u, 0x000004d1u, 0x00050084u, 0x00000006u, 0x000004d3u, 0x000004d2u, 0x00000082u, 0x00050080u, 0x00000006u, 0x000004d4u, 0x000004d3u, 0x0000007cu, 0x0003003eu, 0x000004c3u, 0x000004d4u, 0x00050084u, 0x00000006u, 0x000004d9u, 0x00000232u, 0x000004a3u, 0x0007000cu, 0x00000006u, 0x000004dau, 0x00000001u, 0x0000002au, 0x000004d0u, 0x000004d9u, 0x0003003eu, 0x000004c2u, 0x000004dau, 0x00050084u, 0x00000006u, 0x000004dfu, 0x00000232u, 0x000004b4u, 0x00050082u, 0x00000006u, 0x000004e0u, 0x000004dfu, 0x000000a6u, 0x0007000cu, 0x00000006u, 0x000004e1u, 0x00000001u, 0x00000027u, 0x000004d4u, 0x000004e0u, 0x0003003eu, 0x000004c3u, 0x000004e1u, 0x000500b1u, 0x0000001eu, 0x000004e4u, 0x000004e1u, 0x000004dau, 0x000300f7u, 0x000004e5u, 0x00000000u, 0x000400fau, 0x000004e4u, 0x000004e6u, 0x000004e5u, 0x000200f8u, 0x000004e6u, 0x0003003eu, 0x000004c0u, 0x000002f4u, 0x0003003eu, 0x000004c1u, 0x0000013du, 0x000200f9u, 0x000004ccu, 0x000200f8u, 0x000004e5u, 0x000500c7u, 0x00000006u, 0x000004e9u, 0x000004b9u, 0x000000a6u, 0x000500abu, 0x0000001eu, 0x000004eau, 0x000004e9u, 0x00000092u, 0x0003003eu, 0x000004c4u, 0x000004eau, 0x00050084u, 0x00000006u, 0x000004f0u, 0x000004a7u, 0x00000232u, 0x00050050u, 0x00000020u, 0x000004f1u, 0x000004f0u, 0x000004f0u, 0x00050080u, 0x00000020u, 0x000004f2u, 0x000004f1u, 0x0000014cu, 0x00050050u, 0x00000020u, 0x000004f4u, 0x000004dau, 0x000004dau, 0x00050050u, 0x00000020u, 0x000004f6u, 0x000004e1u, 0x000004e1u, 0x0008000cu, 0x00000020u, 0x000004f7u, 0x00000001u, 0x0000002du, 0x000004f2u, 0x000004f4u, 0x000004f6u, 0x00050051u, 0x00000006u, 0x000004f8u, 0x000004f7u, 0x00000000u, 0x00050051u, 0x00000006u, 0x000004f9u, 0x000004f7u, 0x00000001u, 0x00070050u, 0x00000007u, 0x000004fau, 0x000004dau, 0x000004e1u, 0x000004f8u, 0x000004f9u, 0x0003003eu, 0x000004c5u, 0x000004fau, 0x000e0050u, 0x0000001cu, 0x0000072bu, 0x00000499u, 0x0000049cu, 0x0000049fu, 0x000004a3u, 0x000004a7u, 0x000004aau, 0x000004adu, 0x000004b0u, 0x000004b4u, 0x000004b9u, 0x00000623u, 0x0003003eu, 0x0000061bu, 0x00000499u, 0x0003003eu, 0x0000061cu, 0x0000049cu, 0x0003003eu, 0x0000061du, 0x0000049fu, 0x0003003eu, 0x0000061eu, 0x000004a3u, 0x0003003eu, 0x0000061fu, 0x000004a7u, 0x0003003eu, 0x00000620u, 0x000004aau, 0x0003003eu, 0x00000621u, 0x000004adu, 0x0003003eu, 0x00000622u, 0x000004b0u, 0x0003003eu, 0x000004c8u, 0x000004fau, 0x0003003eu, 0x000004c9u, 0x000004eau, 0x0003003eu, 0x000004cau, 0x00000232u, 0x000500c7u, 0x00000006u, 0x00000534u, 0x000004a3u, 0x0000007fu, 0x0003003eu, 0x00000512u, 0x00000534u, 0x0003003eu, 0x00000513u, 0x000004a7u, 0x00050084u, 0x00000006u, 0x00000539u, 0x00000534u, 0x00000232u, 0x0003003eu, 0x00000512u, 0x00000539u, 0x0003003eu, 0x00000513u, 0x000004f0u, 0x00070050u, 0x00000007u, 0x0000053fu, 0x00000539u, 0x00000539u, 0x00000539u, 0x00000539u, 0x00050082u, 0x00000007u, 0x00000540u, 0x000004fau, 0x0000053fu, 0x00050084u, 0x00000006u, 0x00000544u, 0x00000232u, 0x00000499u, 0x0003003eu, 0x00000516u, 0x00000540u, 0x0003003eu, 0x00000517u, 0x000004aau, 0x0003003eu, 0x00000518u, 0x00000544u, 0x00070050u, 0x00000007u, 0x000005aau, 0x000004aau, 0x000004aau, 0x000004aau, 0x000004aau, 0x00050098u, 0x00000062u, 0x000005abu, 0x00000540u, 0x000005aau, 0x00050051u, 0x00000007u, 0x000005acu, 0x000005abu, 0x00000000u, 0x0003003eu, 0x000005a5u, 0x000005acu, 0x00050051u, 0x00000007u, 0x000005adu, 0x000005abu, 0x00000001u, 0x0003003eu, 0x000005a4u, 0x000005adu, 0x0004007cu, 0x00000067u, 0x000005afu, 0x000005acu, 0x0004007cu, 0x00000030u, 0x000005b1u, 0x00000544u, 0x00070050u, 0x00000067u, 0x000005b2u, 0x000005b1u, 0x000005b1u, 0x000005b1u, 0x000005b1u, 0x00050095u, 0x0000006eu, 0x000005b3u, 0x000005afu, 0x000005b2u, 0x00050051u, 0x00000067u, 0x000005b4u, 0x000005b3u, 0x00000001u, 0x0003003eu, 0x000005a6u, 0x000005b4u, 0x00050051u, 0x00000067u, 0x000005b5u, 0x000005b3u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005b6u, 0x000005b5u, 0x0003003eu, 0x000005a5u, 0x000005b6u, 0x0004007cu, 0x00000007u, 0x000005b8u, 0x000005b4u, 0x00050080u, 0x00000007u, 0x000005bau, 0x000005adu, 0x000005b8u, 0x0003003eu, 0x000005a4u, 0x000005bau, 0x0003003eu, 0x00000519u, 0x000005bau, 0x0003003eu, 0x000005a7u, 0x000005b6u, 0x0003003eu, 0x00000515u, 0x000005bau, 0x0003003eu, 0x00000514u, 0x000005b6u, 0x00050084u, 0x00000006u, 0x00000550u, 0x00000232u, 0x0000049cu, 0x0003003eu, 0x0000051cu, 0x00000540u, 0x0003003eu, 0x0000051du, 0x000004adu, 0x0003003eu, 0x0000051eu, 0x00000550u, 0x00070050u, 0x00000007u, 0x000005c3u, 0x000004adu, 0x000004adu, 0x000004adu, 0x000004adu, 0x00050098u, 0x00000062u, 0x000005c4u, 0x00000540u, 0x000005c3u, 0x00050051u, 0x00000007u, 0x000005c5u, 0x000005c4u, 0x00000000u, 0x0003003eu, 0x000005beu, 0x000005c5u, 0x00050051u, 0x00000007u, 0x000005c6u, 0x000005c4u, 0x00000001u, 0x0003003eu, 0x000005bdu, 0x000005c6u, 0x0004007cu, 0x00000067u, 0x000005c8u, 0x000005c5u, 0x0004007cu, 0x00000030u, 0x000005cau, 0x00000550u, 0x00070050u, 0x00000067u, 0x000005cbu, 0x000005cau, 0x000005cau, 0x000005cau, 0x000005cau, 0x00050095u, 0x0000006eu, 0x000005ccu, 0x000005c8u, 0x000005cbu, 0x00050051u, 0x00000067u, 0x000005cdu, 0x000005ccu, 0x00000001u, 0x0003003eu, 0x000005bfu, 0x000005cdu, 0x00050051u, 0x00000067u, 0x000005ceu, 0x000005ccu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005cfu, 0x000005ceu, 0x0003003eu, 0x000005beu, 0x000005cfu, 0x0004007cu, 0x00000007u, 0x000005d1u, 0x000005cdu, 0x00050080u, 0x00000007u, 0x000005d3u, 0x000005c6u, 0x000005d1u, 0x0003003eu, 0x000005bdu, 0x000005d3u, 0x0003003eu, 0x0000051fu, 0x000005d3u, 0x0003003eu, 0x000005c0u, 0x000005cfu, 0x0003003eu, 0x0000051bu, 0x000005d3u, 0x0003003eu, 0x0000051au, 0x000005cfu, 0x00070050u, 0x00000007u, 0x00000557u, 0x000004f0u, 0x000004f0u, 0x000004f0u, 0x000004f0u, 0x00050082u, 0x00000007u, 0x00000558u, 0x000004fau, 0x00000557u, 0x00050084u, 0x00000006u, 0x0000055cu, 0x00000232u, 0x0000049fu, 0x0003003eu, 0x00000522u, 0x00000558u, 0x0003003eu, 0x00000523u, 0x000004b0u, 0x0003003eu, 0x00000524u, 0x0000055cu, 0x00070050u, 0x00000007u, 0x000005dcu, 0x000004b0u, 0x000004b0u, 0x000004b0u, 0x000004b0u, 0x00050098u, 0x00000062u, 0x000005ddu, 0x00000558u, 0x000005dcu, 0x00050051u, 0x00000007u, 0x000005deu, 0x000005ddu, 0x00000000u, 0x0003003eu, 0x000005d7u, 0x000005deu, 0x00050051u, 0x00000007u, 0x000005dfu, 0x000005ddu, 0x00000001u, 0x0003003eu, 0x000005d6u, 0x000005dfu, 0x0004007cu, 0x00000067u, 0x000005e1u, 0x000005deu, 0x0004007cu, 0x00000030u, 0x000005e3u, 0x0000055cu, 0x00070050u, 0x00000067u, 0x000005e4u, 0x000005e3u, 0x000005e3u, 0x000005e3u, 0x000005e3u, 0x00050095u, 0x0000006eu, 0x000005e5u, 0x000005e1u, 0x000005e4u, 0x00050051u, 0x00000067u, 0x000005e6u, 0x000005e5u, 0x00000001u, 0x0003003eu, 0x000005d8u, 0x000005e6u, 0x00050051u, 0x00000067u, 0x000005e7u, 0x000005e5u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005e8u, 0x000005e7u, 0x0003003eu, 0x000005d7u, 0x000005e8u, 0x0004007cu, 0x00000007u, 0x000005eau, 0x000005e6u, 0x00050080u, 0x00000007u, 0x000005ecu, 0x000005dfu, 0x000005eau, 0x0003003eu, 0x000005d6u, 0x000005ecu, 0x0003003eu, 0x00000525u, 0x000005ecu, 0x0003003eu, 0x000005d9u, 0x000005e8u, 0x0003003eu, 0x00000521u, 0x000005ecu, 0x0003003eu, 0x00000520u, 0x000005e8u, 0x00050084u, 0x00000006u, 0x00000567u, 0x00000232u, 0x000004a7u, 0x00070050u, 0x00000007u, 0x00000568u, 0x00000567u, 0x00000567u, 0x00000567u, 0x00000567u, 0x000500b1u, 0x000000cfu, 0x00000569u, 0x000004fau, 0x00000568u, 0x000600a9u, 0x00000007u, 0x0000056au, 0x00000569u, 0x000005cfu, 0x000005e8u, 0x0003003eu, 0x00000520u, 0x0000056au, 0x000600a9u, 0x00000007u, 0x00000574u, 0x00000569u, 0x000005d3u, 0x000005ecu, 0x0003003eu, 0x00000521u, 0x00000574u, 0x000500adu, 0x000000cfu, 0x00000577u, 0x000005bau, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x00000578u, 0x00000577u, 0x000000deu, 0x000005b6u, 0x0003003eu, 0x00000514u, 0x00000578u, 0x000500b1u, 0x000000cfu, 0x0000057bu, 0x000005bau, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x0000057cu, 0x0000057bu, 0x000000e5u, 0x00000578u, 0x0003003eu, 0x00000514u, 0x0000057cu, 0x000500adu, 0x000000cfu, 0x0000057fu, 0x00000574u, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x00000580u, 0x0000057fu, 0x000000deu, 0x0000056au, 0x0003003eu, 0x00000520u, 0x00000580u, 0x000500b1u, 0x000000cfu, 0x00000583u, 0x00000574u, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x00000584u, 0x00000583u, 0x000000e5u, 0x00000580u, 0x0003003eu, 0x00000520u, 0x00000584u, 0x0003003eu, 0x00000527u, 0x0000057cu, 0x000500c3u, 0x00000007u, 0x000005f2u, 0x0000057cu, 0x00000784u, 0x0003003eu, 0x000005efu, 0x000005f2u, 0x0003003eu, 0x00000526u, 0x000005f2u, 0x0003003eu, 0x00000529u, 0x00000584u, 0x000500c3u, 0x00000007u, 0x000005f6u, 0x00000584u, 0x00000784u, 0x0003003eu, 0x000005f3u, 0x000005f6u, 0x0003003eu, 0x00000528u, 0x000005f6u, 0x000300f7u, 0x0000058au, 0x00000000u, 0x000400fau, 0x000004eau, 0x0000058bu, 0x0000058cu, 0x000200f8u, 0x0000058bu, 0x0003003eu, 0x0000052au, 0x000005f2u, 0x0003003eu, 0x0000052bu, 0x000005f6u, 0x000200f9u, 0x0000058au, 0x000200f8u, 0x0000058cu, 0x0003003eu, 0x0000052au, 0x000005f6u, 0x0003003eu, 0x0000052bu, 0x000005f2u, 0x000200f9u, 0x0000058au, 0x000200f8u, 0x0000058au, 0x00070050u, 0x000000cfu, 0x00000789u, 0x000004eau, 0x000004eau, 0x000004eau, 0x000004eau, 0x000600a9u, 0x00000007u, 0x0000078au, 0x00000789u, 0x000005f6u, 0x000005f2u, 0x000600a9u, 0x00000007u, 0x0000078cu, 0x00000789u, 0x000005f2u, 0x000005f6u, 0x0006000cu, 0x00000007u, 0x00000592u, 0x00000001u, 0x00000005u, 0x0000078cu, 0x0006000cu, 0x00000007u, 0x00000594u, 0x00000001u, 0x00000005u, 0x0000078au, 0x0007000cu, 0x00000007u, 0x00000595u, 0x00000001u, 0x0000002au, 0x00000592u, 0x00000594u, 0x0003003eu, 0x0000052du, 0x00000595u, 0x0007004fu, 0x00000020u, 0x000005fau, 0x00000595u, 0x00000595u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x000005fcu, 0x00000595u, 0x00000595u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x000005fdu, 0x00000001u, 0x0000002au, 0x000005fau, 0x000005fcu, 0x0003003eu, 0x000005f7u, 0x000005fdu, 0x00050041u, 0x00000014u, 0x000005feu, 0x000005f7u, 0x00000047u, 0x0004003du, 0x00000006u, 0x000005ffu, 0x000005feu, 0x00050041u, 0x00000014u, 0x00000600u, 0x000005f7u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000601u, 0x00000600u, 0x0007000cu, 0x00000006u, 0x00000602u, 0x00000001u, 0x0000002au, 0x000005ffu, 0x00000601u, 0x0003003eu, 0x000005f8u, 0x00000602u, 0x0003003eu, 0x0000052cu, 0x00000602u, 0x00050084u, 0x00000006u, 0x00000599u, 0x0000010eu, 0x00000232u, 0x000500b3u, 0x0000001eu, 0x0000059au, 0x00000602u, 0x00000599u, 0x000300f7u, 0x0000059bu, 0x00000000u, 0x000400fau, 0x0000059au, 0x0000059cu, 0x0000059du, 0x000200f8u, 0x0000059cu, 0x0003003eu, 0x0000052fu, 0x0000078cu, 0x0007004fu, 0x00000020u, 0x00000606u, 0x0000078cu, 0x0000078cu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000608u, 0x0000078cu, 0x0000078cu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000609u, 0x00000001u, 0x00000027u, 0x00000606u, 0x00000608u, 0x0003003eu, 0x00000603u, 0x00000609u, 0x00050041u, 0x00000014u, 0x0000060au, 0x00000603u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000060bu, 0x0000060au, 0x00050041u, 0x00000014u, 0x0000060cu, 0x00000603u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000060du, 0x0000060cu, 0x0007000cu, 0x00000006u, 0x0000060eu, 0x00000001u, 0x00000027u, 0x0000060bu, 0x0000060du, 0x0003003eu, 0x00000604u, 0x0000060eu, 0x0003003eu, 0x00000530u, 0x0000078au, 0x0007004fu, 0x00000020u, 0x00000612u, 0x0000078au, 0x0000078au, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000614u, 0x0000078au, 0x0000078au, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000615u, 0x00000001u, 0x0000002au, 0x00000612u, 0x00000614u, 0x0003003eu, 0x0000060fu, 0x00000615u, 0x00050041u, 0x00000014u, 0x00000616u, 0x0000060fu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000617u, 0x00000616u, 0x00050041u, 0x00000014u, 0x00000618u, 0x0000060fu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000619u, 0x00000618u, 0x0007000cu, 0x00000006u, 0x0000061au, 0x00000001u, 0x0000002au, 0x00000617u, 0x00000619u, 0x0003003eu, 0x00000610u, 0x0000061au, 0x00050050u, 0x00000020u, 0x000005a2u, 0x0000060eu, 0x0000061au, 0x0003003eu, 0x0000052eu, 0x000005a2u, 0x000200f9u, 0x0000059bu, 0x000200f8u, 0x0000059du, 0x0003003eu, 0x0000052eu, 0x0000011du, 0x000200f9u, 0x0000059bu, 0x000200f8u, 0x0000059bu, 0x000700f5u, 0x00000020u, 0x00000761u, 0x000005a2u, 0x0000059cu, 0x0000011du, 0x0000059du, 0x0003003eu, 0x00000531u, 0x00000761u, 0x0003003eu, 0x000004c6u, 0x00000761u, 0x00050041u, 0x00000014u, 0x00000500u, 0x000004c6u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000501u, 0x00000500u, 0x00050041u, 0x00000014u, 0x00000502u, 0x0000029fu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000503u, 0x00000502u, 0x0007000cu, 0x00000006u, 0x00000504u, 0x00000001u, 0x0000002au, 0x00000501u, 0x00000503u, 0x0003003eu, 0x00000500u, 0x00000504u, 0x00050041u, 0x00000014u, 0x00000506u, 0x000004c6u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000507u, 0x00000506u, 0x00050041u, 0x00000014u, 0x00000508u, 0x000002a1u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000509u, 0x00000508u, 0x0007000cu, 0x00000006u, 0x0000050au, 0x00000001u, 0x00000027u, 0x00000507u, 0x00000509u, 0x0003003eu, 0x00000506u, 0x0000050au, 0x0004003du, 0x00000006u, 0x0000050du, 0x00000500u, 0x0004003du, 0x00000006u, 0x0000050fu, 0x00000506u, 0x000500b3u, 0x0000001eu, 0x00000510u, 0x0000050du, 0x0000050fu, 0x0003003eu, 0x000004c0u, 0x000002f4u, 0x0003003eu, 0x000004c1u, 0x00000510u, 0x000200f9u, 0x000004ccu, 0x000200f8u, 0x000004ccu, 0x000700f5u, 0x0000001eu, 0x00000762u, 0x0000013du, 0x000004e6u, 0x00000510u, 0x0000059bu, 0x0003003eu, 0x000004cbu, 0x00000762u, 0x000300f7u, 0x000002a6u, 0x00000000u, 0x000400fau, 0x00000762u, 0x000002a5u, 0x000002a6u, 0x000200f8u, 0x000002a5u, 0x000500c5u, 0x00000030u, 0x000002aau, 0x0000074du, 0x0000026fu, 0x0003003eu, 0x00000263u, 0x000002aau, 0x000200f9u, 0x000002a6u, 0x000200f8u, 0x000002a6u, 0x000700f5u, 0x00000030u, 0x00000775u, 0x0000074du, 0x000004ccu, 0x000002aau, 0x000002a5u, 0x000200f9u, 0x00000267u, 0x000200f8u, 0x00000267u, 0x000200f9u, 0x00000264u, 0x000200f8u, 0x00000266u, 0x00050084u, 0x00000006u, 0x000002b2u, 0x000001e8u, 0x000002b1u, 0x00050080u, 0x00000006u, 0x000002b4u, 0x000002b2u, 0x000001c7u, 0x00060041u, 0x000002b6u, 0x000002b7u, 0x000002aeu, 0x00000092u, 0x000002b4u, 0x0003003eu, 0x000002b7u, 0x0000074du, 0x000500abu, 0x0000001eu, 0x000002b9u, 0x0000074du, 0x00000047u, 0x000300f7u, 0x000002bbu, 0x00000000u, 0x000400fau, 0x000002b9u, 0x000002bau, 0x000002c5u, 0x000200f8u, 0x000002bau, 0x00060041u, 0x000002b6u, 0x000002c1u, 0x000002bfu, 0x00000092u, 0x000001e8u, 0x000500c4u, 0x00000030u, 0x000002c3u, 0x0000004au, 0x000001c7u, 0x000700f1u, 0x00000030u, 0x000002c4u, 0x000002c1u, 0x0000004au, 0x00000047u, 0x000002c3u, 0x000200f9u, 0x000002bbu, 0x000200f8u, 0x000002c5u, 0x00060041u, 0x000002b6u, 0x000002c7u, 0x000002bfu, 0x00000092u, 0x000001e8u, 0x000500c4u, 0x00000030u, 0x000002c9u, 0x0000004au, 0x000001c7u, 0x000400c8u, 0x00000030u, 0x000002cau, 0x000002c9u, 0x000700f0u, 0x00000030u, 0x000002cbu, 0x000002c7u, 0x0000004au, 0x00000047u, 0x000002cau, 0x000200f9u, 0x000002bbu, 0x000200f8u, 0x000002bbu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x0000003bu, 0x0000000au, 0x000500c3u, 0x00000007u, 0x0000003eu, 0x0000003bu, 0x00000784u, 0x000200feu, 0x0000003eu, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x00000028u, 0x00000041u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000042u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000043u, 0x00000042u, 0x00000042u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000044u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000045u, 0x00000044u, 0x00000044u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000046u, 0x00000001u, 0x00000027u, 0x00000043u, 0x00000045u, 0x0003003eu, 0x00000041u, 0x00000046u, 0x00050041u, 0x00000014u, 0x00000048u, 0x00000041u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000048u, 0x00050041u, 0x00000014u, 0x0000004bu, 0x00000041u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x0007000cu, 0x00000006u, 0x0000004du, 0x00000001u, 0x00000027u, 0x00000049u, 0x0000004cu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x00000028u, 0x00000050u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000051u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000052u, 0x00000051u, 0x00000051u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000053u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000054u, 0x00000053u, 0x00000053u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000055u, 0x00000001u, 0x0000002au, 0x00000052u, 0x00000054u, 0x0003003eu, 0x00000050u, 0x00000055u, 0x00050041u, 0x00000014u, 0x00000056u, 0x00000050u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000057u, 0x00000056u, 0x00050041u, 0x00000014u, 0x00000058u, 0x00000050u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000059u, 0x00000058u, 0x0007000cu, 0x00000006u, 0x0000005au, 0x00000001u, 0x0000002au, 0x00000057u, 0x00000059u, 0x000200feu, 0x0000005au, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000061u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000006du, 0x00000007u, 0x0004003du, 0x00000007u, 0x0000005du, 0x00000016u, 0x0004003du, 0x00000006u, 0x0000005eu, 0x00000017u, 0x00070050u, 0x00000007u, 0x0000005fu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00050098u, 0x00000062u, 0x00000063u, 0x0000005du, 0x0000005fu, 0x00050051u, 0x00000007u, 0x00000064u, 0x00000063u, 0x00000000u, 0x0003003eu, 0x00000061u, 0x00000064u, 0x00050051u, 0x00000007u, 0x00000065u, 0x00000063u, 0x00000001u, 0x0003003eu, 0x00000060u, 0x00000065u, 0x0004007cu, 0x00000067u, 0x00000068u, 0x00000064u, 0x0004003du, 0x00000006u, 0x00000069u, 0x00000018u, 0x0004007cu, 0x00000030u, 0x0000006au, 0x00000069u, 0x00070050u, 0x00000067u, 0x0000006bu, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x00050095u, 0x0000006eu, 0x0000006fu, 0x00000068u, 0x0000006bu, 0x00050051u, 0x00000067u, 0x00000070u, 0x0000006fu, 0x00000001u, 0x0003003eu, 0x0000006du, 0x00000070u, 0x00050051u, 0x00000067u, 0x00000071u, 0x0000006fu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000072u, 0x00000071u, 0x0003003eu, 0x00000061u, 0x00000072u, 0x0004007cu, 0x00000007u, 0x00000074u, 0x00000070u, 0x00050080u, 0x00000007u, 0x00000076u, 0x00000065u, 0x00000074u, 0x0003003eu, 0x00000060u, 0x00000076u, 0x0003003eu, 0x00000019u, 0x00000076u, 0x000200feu, 0x00000072u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000026u, 0x00000000u, 0x00000021u, 0x00030037u, 0x0000001du, 0x00000022u, 0x00030037u, 0x00000008u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000014u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x00000014u, 0x0000007bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000081u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000008bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000096u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000097u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000098u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000beu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000100u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000105u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000010bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000114u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000115u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000118u, 0x00000007u, 0x00050041u, 0x00000014u, 0x0000007du, 0x00000022u, 0x0000007cu, 0x0004003du, 0x00000006u, 0x0000007eu, 0x0000007du, 0x000500c7u, 0x00000006u, 0x00000080u, 0x0000007eu, 0x0000007fu, 0x0003003eu, 0x0000007bu, 0x00000080u, 0x00050041u, 0x00000014u, 0x00000083u, 0x00000022u, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000084u, 0x00000083u, 0x0003003eu, 0x00000081u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000085u, 0x00000025u, 0x00050084u, 0x00000006u, 0x00000087u, 0x00000080u, 0x00000085u, 0x0003003eu, 0x0000007bu, 0x00000087u, 0x0004003du, 0x00000006u, 0x00000088u, 0x00000025u, 0x00050084u, 0x00000006u, 0x0000008au, 0x00000084u, 0x00000088u, 0x0003003eu, 0x00000081u, 0x0000008au, 0x0004003du, 0x00000007u, 0x0000008cu, 0x00000023u, 0x00070050u, 0x00000007u, 0x0000008eu, 0x00000087u, 0x00000087u, 0x00000087u, 0x00000087u, 0x00050082u, 0x00000007u, 0x0000008fu, 0x0000008cu, 0x0000008eu, 0x0004003du, 0x00000006u, 0x00000091u, 0x00000025u, 0x00050041u, 0x00000014u, 0x00000093u, 0x00000022u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000093u, 0x00050084u, 0x00000006u, 0x00000095u, 0x00000091u, 0x00000094u, 0x0003003eu, 0x00000097u, 0x0000008fu, 0x00050041u, 0x00000014u, 0x00000099u, 0x00000022u, 0x00000090u, 0x0004003du, 0x00000006u, 0x0000009au, 0x00000099u, 0x0003003eu, 0x00000098u, 0x0000009au, 0x0003003eu, 0x0000009bu, 0x00000095u, 0x00080039u, 0x00000007u, 0x0000009du, 0x0000001au, 0x00000097u, 0x00000098u, 0x0000009bu, 0x0000009cu, 0x0004003du, 0x00000007u, 0x0000009eu, 0x0000009cu, 0x0003003eu, 0x00000096u, 0x0000009eu, 0x0003003eu, 0x0000008bu, 0x0000009du, 0x0004003du, 0x00000007u, 0x000000a0u, 0x00000023u, 0x00050082u, 0x00000007u, 0x000000a3u, 0x000000a0u, 0x0000008eu, 0x0004003du, 0x00000006u, 0x000000a5u, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000a7u, 0x00000022u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x00050084u, 0x00000006u, 0x000000a9u, 0x000000a5u, 0x000000a8u, 0x0003003eu, 0x000000abu, 0x000000a3u, 0x00050041u, 0x00000014u, 0x000000adu, 0x00000022u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x000000aeu, 0x000000adu, 0x0003003eu, 0x000000acu, 0x000000aeu, 0x0003003eu, 0x000000afu, 0x000000a9u, 0x00080039u, 0x00000007u, 0x000000b1u, 0x0000001au, 0x000000abu, 0x000000acu, 0x000000afu, 0x000000b0u, 0x0004003du, 0x00000007u, 0x000000b2u, 0x000000b0u, 0x0003003eu, 0x000000aau, 0x000000b2u, 0x0003003eu, 0x0000009fu, 0x000000b1u, 0x0004003du, 0x00000007u, 0x000000b4u, 0x00000023u, 0x00070050u, 0x00000007u, 0x000000b6u, 0x0000008au, 0x0000008au, 0x0000008au, 0x0000008au, 0x00050082u, 0x00000007u, 0x000000b7u, 0x000000b4u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000bbu, 0x00000022u, 0x000000bau, 0x0004003du, 0x00000006u, 0x000000bcu, 0x000000bbu, 0x00050084u, 0x00000006u, 0x000000bdu, 0x000000b9u, 0x000000bcu, 0x0003003eu, 0x000000bfu, 0x000000b7u, 0x00050041u, 0x00000014u, 0x000000c1u, 0x00000022u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000c1u, 0x0003003eu, 0x000000c0u, 0x000000c2u, 0x0003003eu, 0x000000c3u, 0x000000bdu, 0x00080039u, 0x00000007u, 0x000000c5u, 0x0000001au, 0x000000bfu, 0x000000c0u, 0x000000c3u, 0x000000c4u, 0x0004003du, 0x00000007u, 0x000000c6u, 0x000000c4u, 0x0003003eu, 0x000000beu, 0x000000c6u, 0x0003003eu, 0x000000b3u, 0x000000c5u, 0x0004003du, 0x00000007u, 0x000000c9u, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000cau, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x00000083u, 0x00050084u, 0x00000006u, 0x000000cdu, 0x000000cau, 0x000000ccu, 0x00070050u, 0x00000007u, 0x000000ceu, 0x000000cdu, 0x000000cdu, 0x000000cdu, 0x000000cdu, 0x000500b1u, 0x000000cfu, 0x000000d0u, 0x000000c9u, 0x000000ceu, 0x000600a9u, 0x00000007u, 0x000000d1u, 0x000000d0u, 0x000000b1u, 0x000000c5u, 0x0003003eu, 0x000000b3u, 0x000000d1u, 0x0004003du, 0x00000007u, 0x000000d4u, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000d5u, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000d7u, 0x00000083u, 0x00050084u, 0x00000006u, 0x000000d8u, 0x000000d5u, 0x000000d7u, 0x00070050u, 0x00000007u, 0x000000d9u, 0x000000d8u, 0x000000d8u, 0x000000d8u, 0x000000d8u, 0x000500b1u, 0x000000cfu, 0x000000dau, 0x000000d4u, 0x000000d9u, 0x000600a9u, 0x00000007u, 0x000000dbu, 0x000000dau, 0x000000b2u, 0x000000c6u, 0x0003003eu, 0x000000beu, 0x000000dbu, 0x000500adu, 0x000000cfu, 0x000000e1u, 0x0000009eu, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000000e2u, 0x000000e1u, 0x000000deu, 0x0000009du, 0x0003003eu, 0x0000008bu, 0x000000e2u, 0x000500b1u, 0x000000cfu, 0x000000e9u, 0x0000009eu, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000000eau, 0x000000e9u, 0x000000e5u, 0x000000e2u, 0x0003003eu, 0x0000008bu, 0x000000eau, 0x000500adu, 0x000000cfu, 0x000000edu, 0x000000dbu, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000000eeu, 0x000000edu, 0x000000deu, 0x000000d1u, 0x0003003eu, 0x000000b3u, 0x000000eeu, 0x000500b1u, 0x000000cfu, 0x000000f1u, 0x000000dbu, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000000f2u, 0x000000f1u, 0x000000e5u, 0x000000eeu, 0x0003003eu, 0x000000b3u, 0x000000f2u, 0x0003003eu, 0x000000f4u, 0x000000eau, 0x00050039u, 0x00000007u, 0x000000f6u, 0x0000000bu, 0x000000f4u, 0x0003003eu, 0x000000f3u, 0x000000f6u, 0x0003003eu, 0x000000f8u, 0x000000f2u, 0x00050039u, 0x00000007u, 0x000000fau, 0x0000000bu, 0x000000f8u, 0x0003003eu, 0x000000f7u, 0x000000fau, 0x0004003du, 0x0000001eu, 0x000000fbu, 0x00000024u, 0x000300f7u, 0x000000fdu, 0x00000000u, 0x000400fau, 0x000000fbu, 0x000000fcu, 0x00000102u, 0x000200f8u, 0x000000fcu, 0x0003003eu, 0x000000feu, 0x000000f6u, 0x0003003eu, 0x00000100u, 0x000000fau, 0x000200f9u, 0x000000fdu, 0x000200f8u, 0x00000102u, 0x0003003eu, 0x000000feu, 0x000000fau, 0x0003003eu, 0x00000100u, 0x000000f6u, 0x000200f9u, 0x000000fdu, 0x000200f8u, 0x000000fdu, 0x00070050u, 0x000000cfu, 0x0000078du, 0x000000fbu, 0x000000fbu, 0x000000fbu, 0x000000fbu, 0x000600a9u, 0x00000007u, 0x0000078eu, 0x0000078du, 0x000000fau, 0x000000f6u, 0x000600a9u, 0x00000007u, 0x00000790u, 0x0000078du, 0x000000f6u, 0x000000fau, 0x0006000cu, 0x00000007u, 0x00000107u, 0x00000001u, 0x00000005u, 0x00000790u, 0x0006000cu, 0x00000007u, 0x00000109u, 0x00000001u, 0x00000005u, 0x0000078eu, 0x0007000cu, 0x00000007u, 0x0000010au, 0x00000001u, 0x0000002au, 0x00000107u, 0x00000109u, 0x0003003eu, 0x0000010bu, 0x0000010au, 0x00050039u, 0x00000006u, 0x0000010cu, 0x00000012u, 0x0000010bu, 0x0003003eu, 0x00000105u, 0x0000010cu, 0x0004003du, 0x00000006u, 0x0000010fu, 0x00000025u, 0x00050084u, 0x00000006u, 0x00000110u, 0x0000010eu, 0x0000010fu, 0x000500b3u, 0x0000001eu, 0x00000111u, 0x0000010cu, 0x00000110u, 0x000300f7u, 0x00000113u, 0x00000000u, 0x000400fau, 0x00000111u, 0x00000112u, 0x0000011cu, 0x000200f8u, 0x00000112u, 0x0003003eu, 0x00000115u, 0x00000790u, 0x00050039u, 0x00000006u, 0x00000117u, 0x0000000fu, 0x00000115u, 0x0003003eu, 0x00000118u, 0x0000078eu, 0x00050039u, 0x00000006u, 0x0000011au, 0x00000012u, 0x00000118u, 0x00050050u, 0x00000020u, 0x0000011bu, 0x00000117u, 0x0000011au, 0x0003003eu, 0x00000114u, 0x0000011bu, 0x000200f9u, 0x00000113u, 0x000200f8u, 0x0000011cu, 0x0003003eu, 0x00000114u, 0x0000011du, 0x000200f9u, 0x00000113u, 0x000200f8u, 0x00000113u, 0x000700f5u, 0x00000020u, 0x00000780u, 0x0000011bu, 0x00000112u, 0x0000011du, 0x0000011cu, 0x000200feu, 0x00000780u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x0000002eu, 0x00000000u, 0x00000029u, 0x00030037u, 0x0000001du, 0x0000002au, 0x00030037u, 0x00000028u, 0x0000002bu, 0x00030037u, 0x00000028u, 0x0000002cu, 0x00030037u, 0x00000014u, 0x0000002du, 0x000200f8u, 0x0000002fu, 0x0005003bu, 0x0000001fu, 0x000002f3u, 0x00000007u, 0x0000013du, 0x0004003bu, 0x0000001fu, 0x000002f0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000121u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000013fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000157u, 0x00000007u, 0x0004003bu, 0x0000001du, 0x00000158u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000015au, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000015cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000015eu, 0x00000007u, 0x000300f7u, 0x000002efu, 0x00000000u, 0x000300fbu, 0x00000047u, 0x000002f2u, 0x000200f8u, 0x000002f2u, 0x00050041u, 0x00000014u, 0x00000122u, 0x0000002bu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000123u, 0x00000122u, 0x00050084u, 0x00000006u, 0x00000124u, 0x00000123u, 0x00000082u, 0x0003003eu, 0x00000121u, 0x00000124u, 0x00050041u, 0x00000014u, 0x00000126u, 0x0000002cu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000127u, 0x00000126u, 0x00050084u, 0x00000006u, 0x00000128u, 0x00000127u, 0x00000082u, 0x00050080u, 0x00000006u, 0x00000129u, 0x00000128u, 0x0000007cu, 0x0003003eu, 0x00000125u, 0x00000129u, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000002du, 0x00050041u, 0x00000014u, 0x0000012cu, 0x0000002au, 0x0000007cu, 0x0004003du, 0x00000006u, 0x0000012du, 0x0000012cu, 0x00050084u, 0x00000006u, 0x0000012eu, 0x0000012bu, 0x0000012du, 0x0007000cu, 0x00000006u, 0x0000012fu, 0x00000001u, 0x0000002au, 0x00000124u, 0x0000012eu, 0x0003003eu, 0x00000121u, 0x0000012fu, 0x0004003du, 0x00000006u, 0x00000131u, 0x0000002du, 0x00050041u, 0x00000014u, 0x00000133u, 0x0000002au, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000134u, 0x00000133u, 0x00050084u, 0x00000006u, 0x00000135u, 0x00000131u, 0x00000134u, 0x00050082u, 0x00000006u, 0x00000136u, 0x00000135u, 0x000000a6u, 0x0007000cu, 0x00000006u, 0x00000137u, 0x00000001u, 0x00000027u, 0x00000129u, 0x00000136u, 0x0003003eu, 0x00000125u, 0x00000137u, 0x000500b1u, 0x0000001eu, 0x0000013au, 0x00000137u, 0x0000012fu, 0x000300f7u, 0x0000013cu, 0x00000000u, 0x000400fau, 0x0000013au, 0x0000013bu, 0x0000013cu, 0x000200f8u, 0x0000013bu, 0x0003003eu, 0x000002f3u, 0x000002f4u, 0x0003003eu, 0x000002f0u, 0x0000013du, 0x000200f9u, 0x000002efu, 0x000200f8u, 0x0000013cu, 0x00050041u, 0x00000014u, 0x00000141u, 0x0000002au, 0x00000140u, 0x0004003du, 0x00000006u, 0x00000142u, 0x00000141u, 0x000500c7u, 0x00000006u, 0x00000143u, 0x00000142u, 0x000000a6u, 0x000500abu, 0x0000001eu, 0x00000144u, 0x00000143u, 0x00000092u, 0x0003003eu, 0x0000013fu, 0x00000144u, 0x00050041u, 0x00000014u, 0x00000148u, 0x0000002au, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000149u, 0x00000148u, 0x0004003du, 0x00000006u, 0x0000014au, 0x0000002du, 0x00050084u, 0x00000006u, 0x0000014bu, 0x00000149u, 0x0000014au, 0x00050050u, 0x00000020u, 0x0000014du, 0x0000014bu, 0x0000014bu, 0x00050080u, 0x00000020u, 0x0000014eu, 0x0000014du, 0x0000014cu, 0x00050050u, 0x00000020u, 0x00000150u, 0x0000012fu, 0x0000012fu, 0x00050050u, 0x00000020u, 0x00000152u, 0x00000137u, 0x00000137u, 0x0008000cu, 0x00000020u, 0x00000153u, 0x00000001u, 0x0000002du, 0x0000014eu, 0x00000150u, 0x00000152u, 0x00050051u, 0x00000006u, 0x00000154u, 0x00000153u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000155u, 0x00000153u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000156u, 0x0000012fu, 0x00000137u, 0x00000154u, 0x00000155u, 0x0003003eu, 0x00000145u, 0x00000156u, 0x0004003du, 0x0000001cu, 0x00000159u, 0x0000002au, 0x0003003eu, 0x00000158u, 0x00000159u, 0x0003003eu, 0x0000015au, 0x00000156u, 0x0003003eu, 0x0000015cu, 0x00000144u, 0x0004003du, 0x00000006u, 0x0000015fu, 0x0000002du, 0x0003003eu, 0x0000015eu, 0x0000015fu, 0x00080039u, 0x00000020u, 0x00000160u, 0x00000026u, 0x00000158u, 0x0000015au, 0x0000015cu, 0x0000015eu, 0x0003003eu, 0x00000157u, 0x00000160u, 0x00050041u, 0x00000014u, 0x00000161u, 0x00000157u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000162u, 0x00000161u, 0x00050041u, 0x00000014u, 0x00000163u, 0x0000002bu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000163u, 0x0007000cu, 0x00000006u, 0x00000165u, 0x00000001u, 0x0000002au, 0x00000162u, 0x00000164u, 0x0003003eu, 0x00000161u, 0x00000165u, 0x00050041u, 0x00000014u, 0x00000167u, 0x00000157u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000168u, 0x00000167u, 0x00050041u, 0x00000014u, 0x00000169u, 0x0000002cu, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000016au, 0x00000169u, 0x0007000cu, 0x00000006u, 0x0000016bu, 0x00000001u, 0x00000027u, 0x00000168u, 0x0000016au, 0x0003003eu, 0x00000167u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016eu, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000170u, 0x00000167u, 0x000500b3u, 0x0000001eu, 0x00000171u, 0x0000016eu, 0x00000170u, 0x0003003eu, 0x000002f3u, 0x000002f4u, 0x0003003eu, 0x000002f0u, 0x00000171u, 0x000200f9u, 0x000002efu, 0x000200f8u, 0x000002efu, 0x000700f5u, 0x0000001eu, 0x00000781u, 0x0000013du, 0x0000013bu, 0x00000171u, 0x0000013cu, 0x000200feu, 0x00000781u, 0x00010038u, 0x00050036u, 0x0000001cu, 0x00000034u, 0x00000000u, 0x00000032u, 0x00030037u, 0x00000031u, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003du, 0x00000030u, 0x0000017bu, 0x00000033u, 0x00070041u, 0x0000017cu, 0x0000017du, 0x0000017au, 0x00000092u, 0x0000017bu, 0x00000092u, 0x0004003du, 0x00000006u, 0x0000017eu, 0x0000017du, 0x0004003du, 0x00000030u, 0x0000017fu, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000180u, 0x0000017au, 0x00000092u, 0x0000017fu, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000180u, 0x0004003du, 0x00000030u, 0x00000182u, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000183u, 0x0000017au, 0x00000092u, 0x00000182u, 0x000000bau, 0x0004003du, 0x00000006u, 0x00000184u, 0x00000183u, 0x0004003du, 0x00000030u, 0x00000185u, 0x00000033u, 0x00070041u, 0x00000186u, 0x00000187u, 0x0000017au, 0x00000092u, 0x00000185u, 0x0000007cu, 0x0004003du, 0x00000174u, 0x00000188u, 0x00000187u, 0x00040072u, 0x00000006u, 0x00000189u, 0x00000188u, 0x0004003du, 0x00000030u, 0x0000018au, 0x00000033u, 0x00070041u, 0x00000186u, 0x0000018bu, 0x0000017au, 0x00000092u, 0x0000018au, 0x00000082u, 0x0004003du, 0x00000174u, 0x0000018cu, 0x0000018bu, 0x00040072u, 0x00000006u, 0x0000018du, 0x0000018cu, 0x0004003du, 0x00000030u, 0x0000018eu, 0x00000033u, 0x00070041u, 0x0000017cu, 0x0000018fu, 0x0000017au, 0x00000092u, 0x0000018eu, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000190u, 0x0000018fu, 0x0004003du, 0x00000030u, 0x00000191u, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000192u, 0x0000017au, 0x00000092u, 0x00000191u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x00000193u, 0x00000192u, 0x0004003du, 0x00000030u, 0x00000194u, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000195u, 0x0000017au, 0x00000092u, 0x00000194u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x00000196u, 0x00000195u, 0x0004003du, 0x00000030u, 0x00000197u, 0x00000033u, 0x00070041u, 0x00000186u, 0x00000198u, 0x0000017au, 0x00000092u, 0x00000197u, 0x00000132u, 0x0004003du, 0x00000174u, 0x00000199u, 0x00000198u, 0x00040072u, 0x00000006u, 0x0000019au, 0x00000199u, 0x0004003du, 0x00000030u, 0x0000019bu, 0x00000033u, 0x00070041u, 0x0000019cu, 0x0000019du, 0x0000017au, 0x00000092u, 0x0000019bu, 0x00000140u, 0x0004003du, 0x00000175u, 0x0000019eu, 0x0000019du, 0x00040071u, 0x00000030u, 0x0000019fu, 0x0000019eu, 0x0004007cu, 0x00000006u, 0x000001a0u, 0x0000019fu, 0x0004003du, 0x00000030u, 0x000001a1u, 0x00000033u, 0x00070041u, 0x0000019cu, 0x000001a3u, 0x0000017au, 0x00000092u, 0x000001a1u, 0x000001a2u, 0x0004003du, 0x00000175u, 0x000001a4u, 0x000001a3u, 0x00040071u, 0x00000030u, 0x000001a5u, 0x000001a4u, 0x0004007cu, 0x00000006u, 0x000001a6u, 0x000001a5u, 0x000e0050u, 0x0000001cu, 0x000001a7u, 0x0000017eu, 0x00000181u, 0x00000184u, 0x00000189u, 0x0000018du, 0x00000190u, 0x00000193u, 0x00000196u, 0x0000019au, 0x000001a0u, 0x000001a6u, 0x000200feu, 0x000001a7u, 0x00010038u, 0x00050036u, 0x00000036u, 0x00000039u, 0x00000000u, 0x00000037u, 0x00030037u, 0x00000031u, 0x00000038u, 0x000200f8u, 0x0000003au, 0x0004003bu, 0x00000008u, 0x000001aau, 0x00000007u, 0x0004003du, 0x00000030u, 0x000001afu, 0x00000038u, 0x00060041u, 0x000001b0u, 0x000001b1u, 0x000001aeu, 0x00000092u, 0x000001afu, 0x0004003du, 0x00000007u, 0x000001b2u, 0x000001b1u, 0x0003003eu, 0x000001aau, 0x000001b2u, 0x00050041u, 0x00000014u, 0x000001b3u, 0x000001aau, 0x00000047u, 0x0004003du, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x00050041u, 0x00000014u, 0x000001b5u, 0x000001aau, 0x0000004au, 0x0004003du, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x00050041u, 0x00000014u, 0x000001b8u, 0x000001aau, 0x000001b7u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x000001b8u, 0x00050041u, 0x00000014u, 0x000001bbu, 0x000001aau, 0x000001bau, 0x0004003du, 0x00000006u, 0x000001bcu, 0x000001bbu, 0x00070050u, 0x00000036u, 0x000001bdu, 0x000001b4u, 0x000001b6u, 0x000001b9u, 0x000001bcu, 0x000200feu, 0x000001bdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000078eu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000003du, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0009000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001c3u, 0x000001ceu, 0x000001d2u, 0x000001ddu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000176u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000176u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000176u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000176u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000176u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000176u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000176u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000176u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000176u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000176u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000176u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000177u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000178u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000178u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000178u, 0x00000002u, 0x00040047u, 0x0000017au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000017au, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001abu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001acu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001acu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001acu, 0x00000002u, 0x00040047u, 0x000001aeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001aeu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001c3u, 0x0000000bu, 0x0000001au, 0x00030047u, 0x000001ceu, 0x00000000u, 0x00040047u, 0x000001ceu, 0x0000000bu, 0x00000029u, 0x00030047u, 0x000001cfu, 0x00000000u, 0x00030047u, 0x000001d2u, 0x00000000u, 0x00040047u, 0x000001d2u, 0x0000000bu, 0x00000024u, 0x00030047u, 0x000001d3u, 0x00000000u, 0x00040047u, 0x000001ddu, 0x0000000bu, 0x00000028u, 0x00040047u, 0x000001e5u, 0x00000001u, 0x00000000u, 0x00040047u, 0x000001e6u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x000001f3u, 0x00000001u, 0x00000004u, 0x00040047u, 0x000001f4u, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001fdu, 0x00000001u, 0x00000002u, 0x00050048u, 0x00000211u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000211u, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x00000211u, 0x00000002u, 0x00040047u, 0x00000246u, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002bbu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002bcu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002bcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002bcu, 0x00000002u, 0x00040047u, 0x000002beu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002beu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002c0u, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002ccu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002cdu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002cdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002cdu, 0x00000002u, 0x00040047u, 0x000002cfu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002cfu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000002f4u, 0x00000001u, 0x00000005u, 0x00040047u, 0x000002f7u, 0x00000006u, 0x00000001u, 0x00050048u, 0x000002f8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002f8u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002f8u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x000002f9u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002fau, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002fau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002fau, 0x00000002u, 0x00040047u, 0x000002fcu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002fcu, 0x00000021u, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x000d001eu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000001du, 0x00000007u, 0x0000001cu, 0x00020014u, 0x0000001eu, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00040017u, 0x00000020u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000021u, 0x00000020u, 0x0000001du, 0x00000008u, 0x0000001fu, 0x00000014u, 0x00040020u, 0x00000028u, 0x00000007u, 0x00000020u, 0x00070021u, 0x00000029u, 0x0000001eu, 0x0000001du, 0x00000028u, 0x00000028u, 0x00000014u, 0x00040015u, 0x00000030u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000031u, 0x00000007u, 0x00000030u, 0x00040021u, 0x00000032u, 0x0000001cu, 0x00000031u, 0x0006001eu, 0x00000036u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000037u, 0x00000036u, 0x00000031u, 0x0004002bu, 0x00000006u, 0x0000003cu, 0x0000000fu, 0x0004002bu, 0x00000030u, 0x00000047u, 0x00000000u, 0x0004002bu, 0x00000030u, 0x0000004au, 0x00000001u, 0x0004001eu, 0x00000062u, 0x00000007u, 0x00000007u, 0x00040017u, 0x00000067u, 0x00000030u, 0x00000004u, 0x00040020u, 0x0000006cu, 0x00000007u, 0x00000067u, 0x0004001eu, 0x0000006eu, 0x00000067u, 0x00000067u, 0x0004002bu, 0x00000006u, 0x0000007cu, 0x00000003u, 0x0004002bu, 0x00000006u, 0x0000007fu, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000090u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000092u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000a4u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000a6u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000b8u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000bau, 0x00000002u, 0x00040017u, 0x000000cfu, 0x0000001eu, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000ddu, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000deu, 0x000000ddu, 0x000000ddu, 0x000000ddu, 0x000000ddu, 0x0007002cu, 0x00000007u, 0x000000e0u, 0x00000092u, 0x00000092u, 0x00000092u, 0x00000092u, 0x0004002bu, 0x00000006u, 0x000000e4u, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000e5u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x0004002bu, 0x00000006u, 0x000000e7u, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000e8u, 0x000000e7u, 0x000000e7u, 0x000000e7u, 0x000000e7u, 0x0004002bu, 0x00000006u, 0x0000010eu, 0x000007ffu, 0x0005002cu, 0x00000020u, 0x0000011du, 0x00000092u, 0x000000ddu, 0x0004002bu, 0x00000006u, 0x00000132u, 0x00000008u, 0x0003002au, 0x0000001eu, 0x0000013du, 0x0004002bu, 0x00000006u, 0x00000140u, 0x00000009u, 0x0005002cu, 0x00000020u, 0x0000014cu, 0x000000e7u, 0x00000092u, 0x00040015u, 0x00000174u, 0x00000010u, 0x00000001u, 0x00040015u, 0x00000175u, 0x00000008u, 0x00000000u, 0x000d001eu, 0x00000176u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000174u, 0x00000174u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000174u, 0x00000175u, 0x00000175u, 0x0003001du, 0x00000177u, 0x00000176u, 0x0003001eu, 0x00000178u, 0x00000177u, 0x00040020u, 0x00000179u, 0x0000000cu, 0x00000178u, 0x0004003bu, 0x00000179u, 0x0000017au, 0x0000000cu, 0x00040020u, 0x0000017cu, 0x0000000cu, 0x00000006u, 0x00040020u, 0x00000186u, 0x0000000cu, 0x00000174u, 0x00040020u, 0x0000019cu, 0x0000000cu, 0x00000175u, 0x0004002bu, 0x00000006u, 0x000001a2u, 0x0000000au, 0x0003001du, 0x000001abu, 0x00000007u, 0x0003001eu, 0x000001acu, 0x000001abu, 0x00040020u, 0x000001adu, 0x0000000cu, 0x000001acu, 0x0004003bu, 0x000001adu, 0x000001aeu, 0x0000000cu, 0x00040020u, 0x000001b0u, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000030u, 0x000001b7u, 0x00000002u, 0x0004002bu, 0x00000030u, 0x000001bau, 0x00000003u, 0x00040017u, 0x000001c1u, 0x00000030u, 0x00000003u, 0x00040020u, 0x000001c2u, 0x00000001u, 0x000001c1u, 0x0004003bu, 0x000001c2u, 0x000001c3u, 0x00000001u, 0x00040020u, 0x000001c4u, 0x00000001u, 0x00000030u, 0x00040017u, 0x000001c9u, 0x00000030u, 0x00000002u, 0x0004003bu, 0x000001c4u, 0x000001ceu, 0x00000001u, 0x0004003bu, 0x000001c4u, 0x000001d2u, 0x00000001u, 0x0004003bu, 0x000001c4u, 0x000001ddu, 0x00000001u, 0x00040032u, 0x00000030u, 0x000001e5u, 0x00000001u, 0x00060033u, 0x000001c1u, 0x000001e6u, 0x000001e5u, 0x0000004au, 0x0000004au, 0x00060034u, 0x00000030u, 0x000001e7u, 0x00000051u, 0x000001e6u, 0x00000000u, 0x00060034u, 0x00000006u, 0x000001e8u, 0x00000080u, 0x000001e7u, 0x00000047u, 0x00060034u, 0x00000006u, 0x000001e9u, 0x000000c3u, 0x000001e8u, 0x0000007cu, 0x00050033u, 0x00000020u, 0x000001eau, 0x00000132u, 0x000001e9u, 0x00040032u, 0x00000006u, 0x000001f3u, 0x00000400u, 0x00040032u, 0x00000006u, 0x000001f4u, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001f5u, 0x00000087u, 0x000001f3u, 0x000001f4u, 0x00060034u, 0x00000006u, 0x000001fcu, 0x00000084u, 0x000001f4u, 0x00000132u, 0x00040032u, 0x00000006u, 0x000001fdu, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001feu, 0x00000084u, 0x000001fdu, 0x000001e9u, 0x00050033u, 0x00000020u, 0x000001ffu, 0x000001fcu, 0x000001feu, 0x00060034u, 0x00000006u, 0x0000020cu, 0x00000084u, 0x000001f4u, 0x00000132u, 0x0004001eu, 0x00000211u, 0x000001c9u, 0x00000006u, 0x00040020u, 0x00000212u, 0x00000009u, 0x00000211u, 0x0004003bu, 0x00000212u, 0x00000213u, 0x00000009u, 0x00040020u, 0x00000214u, 0x00000009u, 0x000001c9u, 0x00050033u, 0x00000020u, 0x0000021du, 0x000001f4u, 0x000001fdu, 0x00050033u, 0x00000020u, 0x00000221u, 0x000001f4u, 0x000001fdu, 0x00040020u, 0x0000022au, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000022fu, 0x00000020u, 0x00040020u, 0x0000023fu, 0x00000007u, 0x00000036u, 0x00040032u, 0x00000006u, 0x00000246u, 0x00000001u, 0x0003001du, 0x000002bbu, 0x00000030u, 0x0003001eu, 0x000002bcu, 0x000002bbu, 0x00040020u, 0x000002bdu, 0x0000000cu, 0x000002bcu, 0x0004003bu, 0x000002bdu, 0x000002beu, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002c0u, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002c1u, 0x00000087u, 0x000002c0u, 0x0000022fu, 0x00040020u, 0x000002c6u, 0x0000000cu, 0x00000030u, 0x0003001du, 0x000002ccu, 0x00000030u, 0x0003001eu, 0x000002cdu, 0x000002ccu, 0x00040020u, 0x000002ceu, 0x0000000cu, 0x000002cdu, 0x0004003bu, 0x000002ceu, 0x000002cfu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000002dcu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x000002ddu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x000002deu, 0x00000080u, 0x0004002bu, 0x00000006u, 0x000002dfu, 0x00000100u, 0x0004002bu, 0x00000006u, 0x000002e0u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x000002e1u, 0x00000400u, 0x0004002bu, 0x00000006u, 0x000002e2u, 0x00000800u, 0x0004002bu, 0x00000006u, 0x000002e3u, 0x00001000u, 0x0004002bu, 0x00000006u, 0x000002e4u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x000002e5u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x000002e6u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x000002e7u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x000002e8u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x000002e9u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x000002eau, 0x00080000u, 0x0004002bu, 0x00000006u, 0x000002ebu, 0x00100000u, 0x0004002bu, 0x00000006u, 0x000002ecu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x000002edu, 0x00400000u, 0x0004002bu, 0x00000006u, 0x000002eeu, 0x00800000u, 0x0004002bu, 0x00000006u, 0x000002efu, 0x01000000u, 0x0004002bu, 0x00000006u, 0x000002f0u, 0x0000001au, 0x0004002bu, 0x00000006u, 0x000002f1u, 0x10000000u, 0x0004002bu, 0x00000006u, 0x000002f2u, 0x20000000u, 0x0004002bu, 0x00000006u, 0x000002f3u, 0x40000000u, 0x00040032u, 0x00000006u, 0x000002f4u, 0x00008000u, 0x00040017u, 0x000002f5u, 0x00000175u, 0x00000004u, 0x0004002bu, 0x00000030u, 0x000002f6u, 0x00000008u, 0x0004001cu, 0x000002f7u, 0x00000175u, 0x000002f6u, 0x0005001eu, 0x000002f8u, 0x000002f5u, 0x000002f5u, 0x000002f7u, 0x0003001du, 0x000002f9u, 0x000002f8u, 0x0003001eu, 0x000002fau, 0x000002f9u, 0x00040020u, 0x000002fbu, 0x0000000cu, 0x000002fau, 0x0004003bu, 0x000002fbu, 0x000002fcu, 0x0000000cu, 0x00030029u, 0x0000001eu, 0x00000302u, 0x0003002eu, 0x00000006u, 0x00000631u, 0x0005002cu, 0x00000020u, 0x0000077fu, 0x000000a6u, 0x000000a6u, 0x0005002cu, 0x00000020u, 0x00000780u, 0x000000bau, 0x000000bau, 0x0007002cu, 0x00000007u, 0x00000781u, 0x0000003cu, 0x0000003cu, 0x0000003cu, 0x0000003cu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000014u, 0x00000724u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000723u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000722u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000721u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000720u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000703u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000702u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000701u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000700u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ffu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006feu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006abu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006aau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000683u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000682u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000681u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000680u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000679u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000670u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000669u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000644u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000643u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000642u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000641u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000640u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000630u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000629u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000061du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061eu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000611u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000612u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000605u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000606u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000601u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005fdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005e4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005e5u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005e6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005e7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005cbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005ccu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005cdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005ceu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b3u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000520u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000521u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000522u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000523u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000524u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000525u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000526u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000527u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000528u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000529u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000052bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000530u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000531u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000532u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000533u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000534u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000535u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000536u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000537u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000538u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000539u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000053au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000053bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000053cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000053du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000053eu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000053fu, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x000004ceu, 0x00000007u, 0x0000013du, 0x0004003bu, 0x0000001fu, 0x000004cfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004d0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004d1u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000004d2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004d3u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004d6u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000004d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004d8u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x000004d9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000496u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000048au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000048bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000047eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000047fu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000472u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000473u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000046eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000046au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000451u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000452u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000453u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000454u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000438u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000439u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000043au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000043bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000420u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000421u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000422u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000390u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000391u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000392u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000393u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000394u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000395u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000396u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000397u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000398u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000399u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000039eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000039fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003a7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003a8u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000003a9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003abu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000003acu, 0x00000007u, 0x0005003bu, 0x0000001fu, 0x0000033bu, 0x00000007u, 0x0000013du, 0x0004003bu, 0x0000001fu, 0x0000033cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000033du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000033eu, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000033fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000340u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000341u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000343u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000344u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000345u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000346u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000303u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001c0u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d9u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001e3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001f0u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000001fau, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000020au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000021bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000021fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000022du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000233u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000241u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000244u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000253u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000264u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000269u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000026bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000026du, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000026fu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000273u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000027bu, 0x00000007u, 0x0004003bu, 0x00000031u, 0x00000283u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x0000028au, 0x00000007u, 0x0004003bu, 0x00000028u, 0x0000028du, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000299u, 0x00000007u, 0x0004003bu, 0x00000031u, 0x000002aau, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002afu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x000002b1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002b3u, 0x00000007u, 0x00050041u, 0x000001c4u, 0x000001c5u, 0x000001c3u, 0x00000047u, 0x0004003du, 0x00000030u, 0x000001c6u, 0x000001c5u, 0x0004007cu, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x0003003eu, 0x000001c0u, 0x000001c7u, 0x0004003du, 0x000001c1u, 0x000001cau, 0x000001c3u, 0x0007004fu, 0x000001c9u, 0x000001cbu, 0x000001cau, 0x000001cau, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000020u, 0x000001ccu, 0x000001cbu, 0x0003003eu, 0x000001c8u, 0x000001ccu, 0x0004003du, 0x00000030u, 0x000001cfu, 0x000001ceu, 0x0004007cu, 0x00000006u, 0x000001d0u, 0x000001cfu, 0x0003003eu, 0x000001cdu, 0x000001d0u, 0x0004003du, 0x00000030u, 0x000001d3u, 0x000001d2u, 0x0004007cu, 0x00000006u, 0x000001d4u, 0x000001d3u, 0x000500c3u, 0x00000006u, 0x000001d5u, 0x000001d4u, 0x0000007cu, 0x0003003eu, 0x000001d1u, 0x000001d5u, 0x000500c7u, 0x00000006u, 0x000001d8u, 0x000001d0u, 0x000000b8u, 0x0003003eu, 0x000001d6u, 0x000001d8u, 0x000500c3u, 0x00000006u, 0x000001dbu, 0x000001d0u, 0x0000007cu, 0x0003003eu, 0x000001d9u, 0x000001dbu, 0x0004003du, 0x00000030u, 0x000001deu, 0x000001ddu, 0x0004007cu, 0x00000006u, 0x000001dfu, 0x000001deu, 0x00050084u, 0x00000006u, 0x000001e0u, 0x000001d5u, 0x000001dfu, 0x00050080u, 0x00000006u, 0x000001e2u, 0x000001dbu, 0x000001e0u, 0x0003003eu, 0x000001d9u, 0x000001e2u, 0x00050084u, 0x00000020u, 0x000001ebu, 0x000001ccu, 0x000001eau, 0x00050050u, 0x00000020u, 0x000001eeu, 0x000001d8u, 0x000001e2u, 0x00050080u, 0x00000020u, 0x000001efu, 0x000001ebu, 0x000001eeu, 0x0003003eu, 0x000001e3u, 0x000001efu, 0x00050041u, 0x00000014u, 0x000001f1u, 0x000001e3u, 0x0000004au, 0x0004003du, 0x00000006u, 0x000001f2u, 0x000001f1u, 0x00050084u, 0x00000006u, 0x000001f6u, 0x000001f2u, 0x000001f5u, 0x00050041u, 0x00000014u, 0x000001f7u, 0x000001e3u, 0x00000047u, 0x0004003du, 0x00000006u, 0x000001f8u, 0x000001f7u, 0x00050080u, 0x00000006u, 0x000001f9u, 0x000001f6u, 0x000001f8u, 0x0003003eu, 0x000001f0u, 0x000001f9u, 0x00050084u, 0x00000020u, 0x00000200u, 0x000001ccu, 0x000001ffu, 0x0003003eu, 0x000001fau, 0x00000200u, 0x00050084u, 0x00000006u, 0x00000202u, 0x000001d5u, 0x000001fdu, 0x00050084u, 0x00000006u, 0x00000205u, 0x00000202u, 0x000001dfu, 0x00050041u, 0x00000014u, 0x00000206u, 0x000001fau, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000207u, 0x00000206u, 0x00050080u, 0x00000006u, 0x00000208u, 0x00000207u, 0x00000205u, 0x0003003eu, 0x00000206u, 0x00000208u, 0x0004003du, 0x00000020u, 0x0000020bu, 0x000001fau, 0x00050084u, 0x00000006u, 0x0000020eu, 0x000001fdu, 0x000001d5u, 0x00050050u, 0x00000020u, 0x0000020fu, 0x0000020cu, 0x0000020eu, 0x00050080u, 0x00000020u, 0x00000210u, 0x0000020bu, 0x0000020fu, 0x00050041u, 0x00000214u, 0x00000215u, 0x00000213u, 0x00000092u, 0x0004003du, 0x000001c9u, 0x00000216u, 0x00000215u, 0x0004007cu, 0x00000020u, 0x00000217u, 0x00000216u, 0x0007000cu, 0x00000020u, 0x00000218u, 0x00000001u, 0x00000027u, 0x00000210u, 0x00000217u, 0x00050082u, 0x00000020u, 0x0000021au, 0x00000218u, 0x0000077fu, 0x0003003eu, 0x0000020au, 0x0000021au, 0x0004003du, 0x00000020u, 0x0000021cu, 0x000001e3u, 0x00050084u, 0x00000020u, 0x0000021eu, 0x0000021cu, 0x0000021du, 0x0003003eu, 0x0000021bu, 0x0000021eu, 0x00050080u, 0x00000020u, 0x00000222u, 0x0000021eu, 0x00000221u, 0x0007000cu, 0x00000020u, 0x00000226u, 0x00000001u, 0x00000027u, 0x00000222u, 0x00000217u, 0x00050082u, 0x00000020u, 0x00000228u, 0x00000226u, 0x0000077fu, 0x0003003eu, 0x0000021fu, 0x00000228u, 0x00050041u, 0x0000022au, 0x0000022bu, 0x00000213u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x0000022cu, 0x0000022bu, 0x0003003eu, 0x00000229u, 0x0000022cu, 0x0003003eu, 0x0000022du, 0x0000013du, 0x000500b1u, 0x0000001eu, 0x00000230u, 0x000001d0u, 0x0000022fu, 0x000300f7u, 0x00000232u, 0x00000000u, 0x000400fau, 0x00000230u, 0x00000231u, 0x00000232u, 0x000200f8u, 0x00000231u, 0x00050084u, 0x00000006u, 0x00000235u, 0x000001c7u, 0x0000022fu, 0x00050080u, 0x00000006u, 0x00000237u, 0x00000235u, 0x000001d0u, 0x0004007cu, 0x00000030u, 0x00000238u, 0x00000237u, 0x0003003eu, 0x00000233u, 0x00000238u, 0x0004007cu, 0x00000030u, 0x0000023bu, 0x0000022cu, 0x000500b0u, 0x0000001eu, 0x0000023cu, 0x00000238u, 0x0000023bu, 0x000300f7u, 0x0000023eu, 0x00000000u, 0x000400fau, 0x0000023cu, 0x0000023du, 0x0000023eu, 0x000200f8u, 0x0000023du, 0x0003003eu, 0x00000241u, 0x00000238u, 0x00060041u, 0x000001b0u, 0x00000306u, 0x000001aeu, 0x00000092u, 0x00000238u, 0x0004003du, 0x00000007u, 0x00000307u, 0x00000306u, 0x0003003eu, 0x00000303u, 0x00000307u, 0x00050041u, 0x00000014u, 0x00000308u, 0x00000303u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000309u, 0x00000308u, 0x00050041u, 0x00000014u, 0x0000030au, 0x00000303u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000030bu, 0x0000030au, 0x00050041u, 0x00000014u, 0x0000030cu, 0x00000303u, 0x000001b7u, 0x0004003du, 0x00000006u, 0x0000030du, 0x0000030cu, 0x00050041u, 0x00000014u, 0x0000030eu, 0x00000303u, 0x000001bau, 0x0004003du, 0x00000006u, 0x0000030fu, 0x0000030eu, 0x00070050u, 0x00000036u, 0x00000310u, 0x00000309u, 0x0000030bu, 0x0000030du, 0x0000030fu, 0x0003003eu, 0x0000069bu, 0x00000309u, 0x0003003eu, 0x0000069cu, 0x0000030bu, 0x0003003eu, 0x0000069du, 0x0000030du, 0x0003003eu, 0x0000069eu, 0x0000030fu, 0x0003003eu, 0x000006a8u, 0x00000309u, 0x0003003eu, 0x000006a9u, 0x0000030bu, 0x0003003eu, 0x000006aau, 0x0000030du, 0x0003003eu, 0x000006abu, 0x0000030fu, 0x0004003du, 0x00000020u, 0x00000245u, 0x000001fau, 0x00050050u, 0x00000020u, 0x0000024bu, 0x00000309u, 0x0000030bu, 0x000500c3u, 0x00000020u, 0x0000024du, 0x0000024bu, 0x00000780u, 0x00050050u, 0x00000020u, 0x0000024eu, 0x00000246u, 0x00000246u, 0x00050084u, 0x00000020u, 0x0000024fu, 0x0000024eu, 0x0000024du, 0x00050082u, 0x00000020u, 0x00000251u, 0x0000024fu, 0x0000077fu, 0x0007000cu, 0x00000020u, 0x00000252u, 0x00000001u, 0x0000002au, 0x00000245u, 0x00000251u, 0x0003003eu, 0x00000244u, 0x00000252u, 0x00050080u, 0x00000006u, 0x00000257u, 0x0000030du, 0x0000007cu, 0x00050080u, 0x00000006u, 0x0000025au, 0x0000030fu, 0x0000007cu, 0x00050050u, 0x00000020u, 0x0000025bu, 0x00000257u, 0x0000025au, 0x000500c3u, 0x00000020u, 0x0000025du, 0x0000025bu, 0x00000780u, 0x00050084u, 0x00000020u, 0x0000025fu, 0x0000024eu, 0x0000025du, 0x00050082u, 0x00000020u, 0x00000261u, 0x0000025fu, 0x0000077fu, 0x0007000cu, 0x00000020u, 0x00000262u, 0x00000001u, 0x00000027u, 0x0000021au, 0x00000261u, 0x0003003eu, 0x00000253u, 0x00000262u, 0x0003003eu, 0x00000264u, 0x00000238u, 0x00070041u, 0x0000017cu, 0x00000313u, 0x0000017au, 0x00000092u, 0x00000238u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000314u, 0x00000313u, 0x00070041u, 0x0000017cu, 0x00000316u, 0x0000017au, 0x00000092u, 0x00000238u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000317u, 0x00000316u, 0x00070041u, 0x0000017cu, 0x00000319u, 0x0000017au, 0x00000092u, 0x00000238u, 0x000000bau, 0x0004003du, 0x00000006u, 0x0000031au, 0x00000319u, 0x00070041u, 0x00000186u, 0x0000031cu, 0x0000017au, 0x00000092u, 0x00000238u, 0x0000007cu, 0x0004003du, 0x00000174u, 0x0000031du, 0x0000031cu, 0x00040072u, 0x00000006u, 0x0000031eu, 0x0000031du, 0x00070041u, 0x00000186u, 0x00000320u, 0x0000017au, 0x00000092u, 0x00000238u, 0x00000082u, 0x0004003du, 0x00000174u, 0x00000321u, 0x00000320u, 0x00040072u, 0x00000006u, 0x00000322u, 0x00000321u, 0x00070041u, 0x0000017cu, 0x00000324u, 0x0000017au, 0x00000092u, 0x00000238u, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000325u, 0x00000324u, 0x00070041u, 0x0000017cu, 0x00000327u, 0x0000017au, 0x00000092u, 0x00000238u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x00000328u, 0x00000327u, 0x00070041u, 0x0000017cu, 0x0000032au, 0x0000017au, 0x00000092u, 0x00000238u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x0000032bu, 0x0000032au, 0x00070041u, 0x00000186u, 0x0000032du, 0x0000017au, 0x00000092u, 0x00000238u, 0x00000132u, 0x0004003du, 0x00000174u, 0x0000032eu, 0x0000032du, 0x00040072u, 0x00000006u, 0x0000032fu, 0x0000032eu, 0x00070041u, 0x0000019cu, 0x00000331u, 0x0000017au, 0x00000092u, 0x00000238u, 0x00000140u, 0x0004003du, 0x00000175u, 0x00000332u, 0x00000331u, 0x00040071u, 0x00000030u, 0x00000333u, 0x00000332u, 0x0004007cu, 0x00000006u, 0x00000334u, 0x00000333u, 0x00070041u, 0x0000019cu, 0x00000336u, 0x0000017au, 0x00000092u, 0x00000238u, 0x000001a2u, 0x0004003du, 0x00000175u, 0x00000337u, 0x00000336u, 0x00040071u, 0x00000030u, 0x00000338u, 0x00000337u, 0x0004007cu, 0x00000006u, 0x00000339u, 0x00000338u, 0x000e0050u, 0x0000001cu, 0x0000033au, 0x00000314u, 0x00000317u, 0x0000031au, 0x0000031eu, 0x00000322u, 0x00000325u, 0x00000328u, 0x0000032bu, 0x0000032fu, 0x00000334u, 0x00000339u, 0x0003003eu, 0x00000679u, 0x00000314u, 0x0003003eu, 0x0000067au, 0x00000317u, 0x0003003eu, 0x0000067bu, 0x0000031au, 0x0003003eu, 0x0000067cu, 0x0000031eu, 0x0003003eu, 0x0000067du, 0x00000322u, 0x0003003eu, 0x0000067eu, 0x00000325u, 0x0003003eu, 0x0000067fu, 0x00000328u, 0x0003003eu, 0x00000680u, 0x0000032bu, 0x0003003eu, 0x00000681u, 0x0000032fu, 0x0003003eu, 0x00000682u, 0x00000334u, 0x0003003eu, 0x00000683u, 0x00000339u, 0x0003003eu, 0x000006b0u, 0x00000314u, 0x0003003eu, 0x000006b1u, 0x00000317u, 0x0003003eu, 0x000006b2u, 0x0000031au, 0x0003003eu, 0x000006b3u, 0x0000031eu, 0x0003003eu, 0x000006b4u, 0x00000322u, 0x0003003eu, 0x000006b5u, 0x00000325u, 0x0003003eu, 0x000006b6u, 0x00000328u, 0x0003003eu, 0x000006b7u, 0x0000032bu, 0x0003003eu, 0x000006b8u, 0x0000032fu, 0x0003003eu, 0x000006b9u, 0x00000334u, 0x0003003eu, 0x000006bau, 0x00000339u, 0x0003003eu, 0x000006d2u, 0x00000314u, 0x0003003eu, 0x000006d3u, 0x00000317u, 0x0003003eu, 0x000006d4u, 0x0000031au, 0x0003003eu, 0x000006d5u, 0x0000031eu, 0x0003003eu, 0x000006d6u, 0x00000322u, 0x0003003eu, 0x000006d7u, 0x00000325u, 0x0003003eu, 0x000006d8u, 0x00000328u, 0x0003003eu, 0x000006d9u, 0x0000032bu, 0x0003003eu, 0x000006dau, 0x0000032fu, 0x0003003eu, 0x000006dbu, 0x00000334u, 0x0003003eu, 0x00000269u, 0x00000252u, 0x0003003eu, 0x0000026bu, 0x00000262u, 0x0003003eu, 0x0000026du, 0x00000246u, 0x0003003eu, 0x0000033bu, 0x0000013du, 0x000300f7u, 0x00000347u, 0x00000000u, 0x000300fbu, 0x00000047u, 0x00000348u, 0x000200f8u, 0x00000348u, 0x00050041u, 0x00000014u, 0x00000349u, 0x00000269u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000034au, 0x00000349u, 0x00050084u, 0x00000006u, 0x0000034bu, 0x0000034au, 0x00000082u, 0x0003003eu, 0x0000033du, 0x0000034bu, 0x00050041u, 0x00000014u, 0x0000034cu, 0x0000026bu, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000034du, 0x0000034cu, 0x00050084u, 0x00000006u, 0x0000034eu, 0x0000034du, 0x00000082u, 0x00050080u, 0x00000006u, 0x0000034fu, 0x0000034eu, 0x0000007cu, 0x0003003eu, 0x0000033eu, 0x0000034fu, 0x00050084u, 0x00000006u, 0x00000354u, 0x00000246u, 0x0000031eu, 0x0007000cu, 0x00000006u, 0x00000355u, 0x00000001u, 0x0000002au, 0x0000034bu, 0x00000354u, 0x0003003eu, 0x0000033du, 0x00000355u, 0x00050084u, 0x00000006u, 0x0000035au, 0x00000246u, 0x0000032fu, 0x00050082u, 0x00000006u, 0x0000035bu, 0x0000035au, 0x000000a6u, 0x0007000cu, 0x00000006u, 0x0000035cu, 0x00000001u, 0x00000027u, 0x0000034fu, 0x0000035bu, 0x0003003eu, 0x0000033eu, 0x0000035cu, 0x000500b1u, 0x0000001eu, 0x0000035fu, 0x0000035cu, 0x00000355u, 0x000300f7u, 0x00000360u, 0x00000000u, 0x000400fau, 0x0000035fu, 0x00000361u, 0x00000360u, 0x000200f8u, 0x00000361u, 0x0003003eu, 0x0000033bu, 0x00000302u, 0x0003003eu, 0x0000033cu, 0x0000013du, 0x000200f9u, 0x00000347u, 0x000200f8u, 0x00000360u, 0x000500c7u, 0x00000006u, 0x00000364u, 0x00000334u, 0x000000a6u, 0x000500abu, 0x0000001eu, 0x00000365u, 0x00000364u, 0x00000092u, 0x0003003eu, 0x0000033fu, 0x00000365u, 0x00050084u, 0x00000006u, 0x0000036bu, 0x00000322u, 0x00000246u, 0x00050050u, 0x00000020u, 0x0000036cu, 0x0000036bu, 0x0000036bu, 0x00050080u, 0x00000020u, 0x0000036du, 0x0000036cu, 0x0000014cu, 0x00050050u, 0x00000020u, 0x0000036fu, 0x00000355u, 0x00000355u, 0x00050050u, 0x00000020u, 0x00000371u, 0x0000035cu, 0x0000035cu, 0x0008000cu, 0x00000020u, 0x00000372u, 0x00000001u, 0x0000002du, 0x0000036du, 0x0000036fu, 0x00000371u, 0x00050051u, 0x00000006u, 0x00000373u, 0x00000372u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000374u, 0x00000372u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000375u, 0x00000355u, 0x0000035cu, 0x00000373u, 0x00000374u, 0x0003003eu, 0x00000340u, 0x00000375u, 0x000e0050u, 0x0000001cu, 0x000006f0u, 0x00000314u, 0x00000317u, 0x0000031au, 0x0000031eu, 0x00000322u, 0x00000325u, 0x00000328u, 0x0000032bu, 0x0000032fu, 0x00000334u, 0x00000631u, 0x0003003eu, 0x00000669u, 0x00000314u, 0x0003003eu, 0x0000066au, 0x00000317u, 0x0003003eu, 0x0000066bu, 0x0000031au, 0x0003003eu, 0x0000066cu, 0x0000031eu, 0x0003003eu, 0x0000066du, 0x00000322u, 0x0003003eu, 0x0000066eu, 0x00000325u, 0x0003003eu, 0x0000066fu, 0x00000328u, 0x0003003eu, 0x00000670u, 0x0000032bu, 0x0003003eu, 0x00000343u, 0x00000375u, 0x0003003eu, 0x00000344u, 0x00000365u, 0x0003003eu, 0x00000345u, 0x00000246u, 0x000500c7u, 0x00000006u, 0x000003afu, 0x0000031eu, 0x0000007fu, 0x0003003eu, 0x0000038du, 0x000003afu, 0x0003003eu, 0x0000038eu, 0x00000322u, 0x00050084u, 0x00000006u, 0x000003b4u, 0x000003afu, 0x00000246u, 0x0003003eu, 0x0000038du, 0x000003b4u, 0x0003003eu, 0x0000038eu, 0x0000036bu, 0x00070050u, 0x00000007u, 0x000003bau, 0x000003b4u, 0x000003b4u, 0x000003b4u, 0x000003b4u, 0x00050082u, 0x00000007u, 0x000003bbu, 0x00000375u, 0x000003bau, 0x00050084u, 0x00000006u, 0x000003bfu, 0x00000246u, 0x00000314u, 0x0003003eu, 0x00000391u, 0x000003bbu, 0x0003003eu, 0x00000392u, 0x00000325u, 0x0003003eu, 0x00000393u, 0x000003bfu, 0x00070050u, 0x00000007u, 0x00000425u, 0x00000325u, 0x00000325u, 0x00000325u, 0x00000325u, 0x00050098u, 0x00000062u, 0x00000426u, 0x000003bbu, 0x00000425u, 0x00050051u, 0x00000007u, 0x00000427u, 0x00000426u, 0x00000000u, 0x0003003eu, 0x00000420u, 0x00000427u, 0x00050051u, 0x00000007u, 0x00000428u, 0x00000426u, 0x00000001u, 0x0003003eu, 0x0000041fu, 0x00000428u, 0x0004007cu, 0x00000067u, 0x0000042au, 0x00000427u, 0x0004007cu, 0x00000030u, 0x0000042cu, 0x000003bfu, 0x00070050u, 0x00000067u, 0x0000042du, 0x0000042cu, 0x0000042cu, 0x0000042cu, 0x0000042cu, 0x00050095u, 0x0000006eu, 0x0000042eu, 0x0000042au, 0x0000042du, 0x00050051u, 0x00000067u, 0x0000042fu, 0x0000042eu, 0x00000001u, 0x0003003eu, 0x00000421u, 0x0000042fu, 0x00050051u, 0x00000067u, 0x00000430u, 0x0000042eu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000431u, 0x00000430u, 0x0003003eu, 0x00000420u, 0x00000431u, 0x0004007cu, 0x00000007u, 0x00000433u, 0x0000042fu, 0x00050080u, 0x00000007u, 0x00000435u, 0x00000428u, 0x00000433u, 0x0003003eu, 0x0000041fu, 0x00000435u, 0x0003003eu, 0x00000394u, 0x00000435u, 0x0003003eu, 0x00000422u, 0x00000431u, 0x0003003eu, 0x00000390u, 0x00000435u, 0x0003003eu, 0x0000038fu, 0x00000431u, 0x00050084u, 0x00000006u, 0x000003cbu, 0x00000246u, 0x00000317u, 0x0003003eu, 0x00000397u, 0x000003bbu, 0x0003003eu, 0x00000398u, 0x00000328u, 0x0003003eu, 0x00000399u, 0x000003cbu, 0x00070050u, 0x00000007u, 0x0000043eu, 0x00000328u, 0x00000328u, 0x00000328u, 0x00000328u, 0x00050098u, 0x00000062u, 0x0000043fu, 0x000003bbu, 0x0000043eu, 0x00050051u, 0x00000007u, 0x00000440u, 0x0000043fu, 0x00000000u, 0x0003003eu, 0x00000439u, 0x00000440u, 0x00050051u, 0x00000007u, 0x00000441u, 0x0000043fu, 0x00000001u, 0x0003003eu, 0x00000438u, 0x00000441u, 0x0004007cu, 0x00000067u, 0x00000443u, 0x00000440u, 0x0004007cu, 0x00000030u, 0x00000445u, 0x000003cbu, 0x00070050u, 0x00000067u, 0x00000446u, 0x00000445u, 0x00000445u, 0x00000445u, 0x00000445u, 0x00050095u, 0x0000006eu, 0x00000447u, 0x00000443u, 0x00000446u, 0x00050051u, 0x00000067u, 0x00000448u, 0x00000447u, 0x00000001u, 0x0003003eu, 0x0000043au, 0x00000448u, 0x00050051u, 0x00000067u, 0x00000449u, 0x00000447u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000044au, 0x00000449u, 0x0003003eu, 0x00000439u, 0x0000044au, 0x0004007cu, 0x00000007u, 0x0000044cu, 0x00000448u, 0x00050080u, 0x00000007u, 0x0000044eu, 0x00000441u, 0x0000044cu, 0x0003003eu, 0x00000438u, 0x0000044eu, 0x0003003eu, 0x0000039au, 0x0000044eu, 0x0003003eu, 0x0000043bu, 0x0000044au, 0x0003003eu, 0x00000396u, 0x0000044eu, 0x0003003eu, 0x00000395u, 0x0000044au, 0x00070050u, 0x00000007u, 0x000003d2u, 0x0000036bu, 0x0000036bu, 0x0000036bu, 0x0000036bu, 0x00050082u, 0x00000007u, 0x000003d3u, 0x00000375u, 0x000003d2u, 0x00050084u, 0x00000006u, 0x000003d7u, 0x00000246u, 0x0000031au, 0x0003003eu, 0x0000039du, 0x000003d3u, 0x0003003eu, 0x0000039eu, 0x0000032bu, 0x0003003eu, 0x0000039fu, 0x000003d7u, 0x00070050u, 0x00000007u, 0x00000457u, 0x0000032bu, 0x0000032bu, 0x0000032bu, 0x0000032bu, 0x00050098u, 0x00000062u, 0x00000458u, 0x000003d3u, 0x00000457u, 0x00050051u, 0x00000007u, 0x00000459u, 0x00000458u, 0x00000000u, 0x0003003eu, 0x00000452u, 0x00000459u, 0x00050051u, 0x00000007u, 0x0000045au, 0x00000458u, 0x00000001u, 0x0003003eu, 0x00000451u, 0x0000045au, 0x0004007cu, 0x00000067u, 0x0000045cu, 0x00000459u, 0x0004007cu, 0x00000030u, 0x0000045eu, 0x000003d7u, 0x00070050u, 0x00000067u, 0x0000045fu, 0x0000045eu, 0x0000045eu, 0x0000045eu, 0x0000045eu, 0x00050095u, 0x0000006eu, 0x00000460u, 0x0000045cu, 0x0000045fu, 0x00050051u, 0x00000067u, 0x00000461u, 0x00000460u, 0x00000001u, 0x0003003eu, 0x00000453u, 0x00000461u, 0x00050051u, 0x00000067u, 0x00000462u, 0x00000460u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000463u, 0x00000462u, 0x0003003eu, 0x00000452u, 0x00000463u, 0x0004007cu, 0x00000007u, 0x00000465u, 0x00000461u, 0x00050080u, 0x00000007u, 0x00000467u, 0x0000045au, 0x00000465u, 0x0003003eu, 0x00000451u, 0x00000467u, 0x0003003eu, 0x000003a0u, 0x00000467u, 0x0003003eu, 0x00000454u, 0x00000463u, 0x0003003eu, 0x0000039cu, 0x00000467u, 0x0003003eu, 0x0000039bu, 0x00000463u, 0x00050084u, 0x00000006u, 0x000003e2u, 0x00000246u, 0x00000322u, 0x00070050u, 0x00000007u, 0x000003e3u, 0x000003e2u, 0x000003e2u, 0x000003e2u, 0x000003e2u, 0x000500b1u, 0x000000cfu, 0x000003e4u, 0x00000375u, 0x000003e3u, 0x000600a9u, 0x00000007u, 0x000003e5u, 0x000003e4u, 0x0000044au, 0x00000463u, 0x0003003eu, 0x0000039bu, 0x000003e5u, 0x000600a9u, 0x00000007u, 0x000003efu, 0x000003e4u, 0x0000044eu, 0x00000467u, 0x0003003eu, 0x0000039cu, 0x000003efu, 0x000500adu, 0x000000cfu, 0x000003f2u, 0x00000435u, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000003f3u, 0x000003f2u, 0x000000deu, 0x00000431u, 0x0003003eu, 0x0000038fu, 0x000003f3u, 0x000500b1u, 0x000000cfu, 0x000003f6u, 0x00000435u, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000003f7u, 0x000003f6u, 0x000000e5u, 0x000003f3u, 0x0003003eu, 0x0000038fu, 0x000003f7u, 0x000500adu, 0x000000cfu, 0x000003fau, 0x000003efu, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000003fbu, 0x000003fau, 0x000000deu, 0x000003e5u, 0x0003003eu, 0x0000039bu, 0x000003fbu, 0x000500b1u, 0x000000cfu, 0x000003feu, 0x000003efu, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000003ffu, 0x000003feu, 0x000000e5u, 0x000003fbu, 0x0003003eu, 0x0000039bu, 0x000003ffu, 0x0003003eu, 0x000003a2u, 0x000003f7u, 0x000500c3u, 0x00000007u, 0x0000046du, 0x000003f7u, 0x00000781u, 0x0003003eu, 0x0000046au, 0x0000046du, 0x0003003eu, 0x000003a1u, 0x0000046du, 0x0003003eu, 0x000003a4u, 0x000003ffu, 0x000500c3u, 0x00000007u, 0x00000471u, 0x000003ffu, 0x00000781u, 0x0003003eu, 0x0000046eu, 0x00000471u, 0x0003003eu, 0x000003a3u, 0x00000471u, 0x000300f7u, 0x00000405u, 0x00000000u, 0x000400fau, 0x00000365u, 0x00000406u, 0x00000407u, 0x000200f8u, 0x00000406u, 0x0003003eu, 0x000003a5u, 0x0000046du, 0x0003003eu, 0x000003a6u, 0x00000471u, 0x000200f9u, 0x00000405u, 0x000200f8u, 0x00000407u, 0x0003003eu, 0x000003a5u, 0x00000471u, 0x0003003eu, 0x000003a6u, 0x0000046du, 0x000200f9u, 0x00000405u, 0x000200f8u, 0x00000405u, 0x00070050u, 0x000000cfu, 0x00000782u, 0x00000365u, 0x00000365u, 0x00000365u, 0x00000365u, 0x000600a9u, 0x00000007u, 0x00000783u, 0x00000782u, 0x00000471u, 0x0000046du, 0x000600a9u, 0x00000007u, 0x00000785u, 0x00000782u, 0x0000046du, 0x00000471u, 0x0006000cu, 0x00000007u, 0x0000040du, 0x00000001u, 0x00000005u, 0x00000785u, 0x0006000cu, 0x00000007u, 0x0000040fu, 0x00000001u, 0x00000005u, 0x00000783u, 0x0007000cu, 0x00000007u, 0x00000410u, 0x00000001u, 0x0000002au, 0x0000040du, 0x0000040fu, 0x0003003eu, 0x000003a8u, 0x00000410u, 0x0007004fu, 0x00000020u, 0x00000475u, 0x00000410u, 0x00000410u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000477u, 0x00000410u, 0x00000410u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000478u, 0x00000001u, 0x0000002au, 0x00000475u, 0x00000477u, 0x0003003eu, 0x00000472u, 0x00000478u, 0x00050041u, 0x00000014u, 0x00000479u, 0x00000472u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000047au, 0x00000479u, 0x00050041u, 0x00000014u, 0x0000047bu, 0x00000472u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000047cu, 0x0000047bu, 0x0007000cu, 0x00000006u, 0x0000047du, 0x00000001u, 0x0000002au, 0x0000047au, 0x0000047cu, 0x0003003eu, 0x00000473u, 0x0000047du, 0x0003003eu, 0x000003a7u, 0x0000047du, 0x00050084u, 0x00000006u, 0x00000414u, 0x0000010eu, 0x00000246u, 0x000500b3u, 0x0000001eu, 0x00000415u, 0x0000047du, 0x00000414u, 0x000300f7u, 0x00000416u, 0x00000000u, 0x000400fau, 0x00000415u, 0x00000417u, 0x00000418u, 0x000200f8u, 0x00000417u, 0x0003003eu, 0x000003aau, 0x00000785u, 0x0007004fu, 0x00000020u, 0x00000481u, 0x00000785u, 0x00000785u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000483u, 0x00000785u, 0x00000785u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000484u, 0x00000001u, 0x00000027u, 0x00000481u, 0x00000483u, 0x0003003eu, 0x0000047eu, 0x00000484u, 0x00050041u, 0x00000014u, 0x00000485u, 0x0000047eu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000486u, 0x00000485u, 0x00050041u, 0x00000014u, 0x00000487u, 0x0000047eu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000488u, 0x00000487u, 0x0007000cu, 0x00000006u, 0x00000489u, 0x00000001u, 0x00000027u, 0x00000486u, 0x00000488u, 0x0003003eu, 0x0000047fu, 0x00000489u, 0x0003003eu, 0x000003abu, 0x00000783u, 0x0007004fu, 0x00000020u, 0x0000048du, 0x00000783u, 0x00000783u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x0000048fu, 0x00000783u, 0x00000783u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000490u, 0x00000001u, 0x0000002au, 0x0000048du, 0x0000048fu, 0x0003003eu, 0x0000048au, 0x00000490u, 0x00050041u, 0x00000014u, 0x00000491u, 0x0000048au, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000492u, 0x00000491u, 0x00050041u, 0x00000014u, 0x00000493u, 0x0000048au, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000494u, 0x00000493u, 0x0007000cu, 0x00000006u, 0x00000495u, 0x00000001u, 0x0000002au, 0x00000492u, 0x00000494u, 0x0003003eu, 0x0000048bu, 0x00000495u, 0x00050050u, 0x00000020u, 0x0000041du, 0x00000489u, 0x00000495u, 0x0003003eu, 0x000003a9u, 0x0000041du, 0x000200f9u, 0x00000416u, 0x000200f8u, 0x00000418u, 0x0003003eu, 0x000003a9u, 0x0000011du, 0x000200f9u, 0x00000416u, 0x000200f8u, 0x00000416u, 0x000700f5u, 0x00000020u, 0x0000073du, 0x0000041du, 0x00000417u, 0x0000011du, 0x00000418u, 0x0003003eu, 0x000003acu, 0x0000073du, 0x0003003eu, 0x00000341u, 0x0000073du, 0x00050041u, 0x00000014u, 0x0000037bu, 0x00000341u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000037cu, 0x0000037bu, 0x00050041u, 0x00000014u, 0x0000037du, 0x00000269u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000037eu, 0x0000037du, 0x0007000cu, 0x00000006u, 0x0000037fu, 0x00000001u, 0x0000002au, 0x0000037cu, 0x0000037eu, 0x0003003eu, 0x0000037bu, 0x0000037fu, 0x00050041u, 0x00000014u, 0x00000381u, 0x00000341u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000382u, 0x00000381u, 0x00050041u, 0x00000014u, 0x00000383u, 0x0000026bu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000384u, 0x00000383u, 0x0007000cu, 0x00000006u, 0x00000385u, 0x00000001u, 0x00000027u, 0x00000382u, 0x00000384u, 0x0003003eu, 0x00000381u, 0x00000385u, 0x0004003du, 0x00000006u, 0x00000388u, 0x0000037bu, 0x0004003du, 0x00000006u, 0x0000038au, 0x00000381u, 0x000500b3u, 0x0000001eu, 0x0000038bu, 0x00000388u, 0x0000038au, 0x0003003eu, 0x0000033bu, 0x00000302u, 0x0003003eu, 0x0000033cu, 0x0000038bu, 0x000200f9u, 0x00000347u, 0x000200f8u, 0x00000347u, 0x000700f5u, 0x0000001eu, 0x0000073eu, 0x0000013du, 0x00000361u, 0x0000038bu, 0x00000416u, 0x0003003eu, 0x00000346u, 0x0000073eu, 0x0003003eu, 0x0000022du, 0x0000073eu, 0x000200f9u, 0x0000023eu, 0x000200f8u, 0x0000023eu, 0x000700f5u, 0x0000001eu, 0x00000740u, 0x0000013du, 0x00000231u, 0x0000073eu, 0x00000347u, 0x000200f9u, 0x00000232u, 0x000200f8u, 0x00000232u, 0x000700f5u, 0x0000001eu, 0x0000073fu, 0x0000013du, 0x00000005u, 0x00000740u, 0x0000023eu, 0x00050153u, 0x00000067u, 0x00000271u, 0x000001bau, 0x0000073fu, 0x00050051u, 0x00000030u, 0x00000272u, 0x00000271u, 0x00000000u, 0x0003003eu, 0x0000026fu, 0x00000272u, 0x0003003eu, 0x00000273u, 0x00000047u, 0x000200f9u, 0x00000274u, 0x000200f8u, 0x00000274u, 0x000700f5u, 0x00000030u, 0x0000074eu, 0x00000047u, 0x00000232u, 0x00000772u, 0x00000277u, 0x000700f5u, 0x00000030u, 0x00000741u, 0x00000272u, 0x00000232u, 0x00000282u, 0x00000277u, 0x000500abu, 0x0000001eu, 0x0000027au, 0x00000741u, 0x00000047u, 0x000400f6u, 0x00000276u, 0x00000277u, 0x00000000u, 0x000400fau, 0x0000027au, 0x00000275u, 0x00000276u, 0x000200f8u, 0x00000275u, 0x0006000cu, 0x00000006u, 0x0000027du, 0x00000001u, 0x00000049u, 0x00000741u, 0x0003003eu, 0x0000027bu, 0x0000027du, 0x000500c4u, 0x00000030u, 0x0000027fu, 0x0000004au, 0x0000027du, 0x000400c8u, 0x00000030u, 0x00000280u, 0x0000027fu, 0x000500c7u, 0x00000030u, 0x00000282u, 0x00000741u, 0x00000280u, 0x0003003eu, 0x0000026fu, 0x00000282u, 0x00050084u, 0x00000006u, 0x00000285u, 0x000001c7u, 0x0000022fu, 0x00050080u, 0x00000006u, 0x00000287u, 0x00000285u, 0x0000027du, 0x0004007cu, 0x00000030u, 0x00000288u, 0x00000287u, 0x0003003eu, 0x00000283u, 0x00000288u, 0x0003003eu, 0x0000028au, 0x00000288u, 0x00060041u, 0x000001b0u, 0x00000499u, 0x000001aeu, 0x00000092u, 0x00000288u, 0x0004003du, 0x00000007u, 0x0000049au, 0x00000499u, 0x0003003eu, 0x00000496u, 0x0000049au, 0x00050041u, 0x00000014u, 0x0000049bu, 0x00000496u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000049cu, 0x0000049bu, 0x00050041u, 0x00000014u, 0x0000049du, 0x00000496u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000049eu, 0x0000049du, 0x00050041u, 0x00000014u, 0x0000049fu, 0x00000496u, 0x000001b7u, 0x0004003du, 0x00000006u, 0x000004a0u, 0x0000049fu, 0x00050041u, 0x00000014u, 0x000004a1u, 0x00000496u, 0x000001bau, 0x0004003du, 0x00000006u, 0x000004a2u, 0x000004a1u, 0x00070050u, 0x00000036u, 0x000004a3u, 0x0000049cu, 0x0000049eu, 0x000004a0u, 0x000004a2u, 0x0003003eu, 0x0000065cu, 0x0000049cu, 0x0003003eu, 0x0000065du, 0x0000049eu, 0x0003003eu, 0x0000065eu, 0x000004a0u, 0x0003003eu, 0x0000065fu, 0x000004a2u, 0x0003003eu, 0x000006f1u, 0x0000049cu, 0x0003003eu, 0x000006f2u, 0x0000049eu, 0x0003003eu, 0x000006f3u, 0x000004a0u, 0x0003003eu, 0x000006f4u, 0x000004a2u, 0x00050050u, 0x00000020u, 0x00000293u, 0x0000049cu, 0x0000049eu, 0x000500c3u, 0x00000020u, 0x00000295u, 0x00000293u, 0x00000780u, 0x00050050u, 0x00000020u, 0x00000296u, 0x00000246u, 0x00000246u, 0x00050084u, 0x00000020u, 0x00000297u, 0x00000296u, 0x00000295u, 0x0007000cu, 0x00000020u, 0x00000298u, 0x00000001u, 0x0000002au, 0x0000021eu, 0x00000297u, 0x0003003eu, 0x0000028du, 0x00000298u, 0x00050080u, 0x00000006u, 0x0000029du, 0x000004a0u, 0x0000007cu, 0x00050080u, 0x00000006u, 0x000002a0u, 0x000004a2u, 0x0000007cu, 0x00050050u, 0x00000020u, 0x000002a1u, 0x0000029du, 0x000002a0u, 0x000500c3u, 0x00000020u, 0x000002a3u, 0x000002a1u, 0x00000780u, 0x00050084u, 0x00000020u, 0x000002a5u, 0x00000296u, 0x000002a3u, 0x00050082u, 0x00000020u, 0x000002a7u, 0x000002a5u, 0x0000077fu, 0x0007000cu, 0x00000020u, 0x000002a8u, 0x00000001u, 0x00000027u, 0x00000228u, 0x000002a7u, 0x0003003eu, 0x00000299u, 0x000002a8u, 0x0003003eu, 0x000002aau, 0x00000288u, 0x00070041u, 0x0000017cu, 0x000004a6u, 0x0000017au, 0x00000092u, 0x00000288u, 0x00000092u, 0x0004003du, 0x00000006u, 0x000004a7u, 0x000004a6u, 0x00070041u, 0x0000017cu, 0x000004a9u, 0x0000017au, 0x00000092u, 0x00000288u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000004aau, 0x000004a9u, 0x00070041u, 0x0000017cu, 0x000004acu, 0x0000017au, 0x00000092u, 0x00000288u, 0x000000bau, 0x0004003du, 0x00000006u, 0x000004adu, 0x000004acu, 0x00070041u, 0x00000186u, 0x000004afu, 0x0000017au, 0x00000092u, 0x00000288u, 0x0000007cu, 0x0004003du, 0x00000174u, 0x000004b0u, 0x000004afu, 0x00040072u, 0x00000006u, 0x000004b1u, 0x000004b0u, 0x00070041u, 0x00000186u, 0x000004b3u, 0x0000017au, 0x00000092u, 0x00000288u, 0x00000082u, 0x0004003du, 0x00000174u, 0x000004b4u, 0x000004b3u, 0x00040072u, 0x00000006u, 0x000004b5u, 0x000004b4u, 0x00070041u, 0x0000017cu, 0x000004b7u, 0x0000017au, 0x00000092u, 0x00000288u, 0x00000090u, 0x0004003du, 0x00000006u, 0x000004b8u, 0x000004b7u, 0x00070041u, 0x0000017cu, 0x000004bau, 0x0000017au, 0x00000092u, 0x00000288u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x000004bbu, 0x000004bau, 0x00070041u, 0x0000017cu, 0x000004bdu, 0x0000017au, 0x00000092u, 0x00000288u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000004beu, 0x000004bdu, 0x00070041u, 0x00000186u, 0x000004c0u, 0x0000017au, 0x00000092u, 0x00000288u, 0x00000132u, 0x0004003du, 0x00000174u, 0x000004c1u, 0x000004c0u, 0x00040072u, 0x00000006u, 0x000004c2u, 0x000004c1u, 0x00070041u, 0x0000019cu, 0x000004c4u, 0x0000017au, 0x00000092u, 0x00000288u, 0x00000140u, 0x0004003du, 0x00000175u, 0x000004c5u, 0x000004c4u, 0x00040071u, 0x00000030u, 0x000004c6u, 0x000004c5u, 0x0004007cu, 0x00000006u, 0x000004c7u, 0x000004c6u, 0x00070041u, 0x0000019cu, 0x000004c9u, 0x0000017au, 0x00000092u, 0x00000288u, 0x000001a2u, 0x0004003du, 0x00000175u, 0x000004cau, 0x000004c9u, 0x00040071u, 0x00000030u, 0x000004cbu, 0x000004cau, 0x0004007cu, 0x00000006u, 0x000004ccu, 0x000004cbu, 0x000e0050u, 0x0000001cu, 0x000004cdu, 0x000004a7u, 0x000004aau, 0x000004adu, 0x000004b1u, 0x000004b5u, 0x000004b8u, 0x000004bbu, 0x000004beu, 0x000004c2u, 0x000004c7u, 0x000004ccu, 0x0003003eu, 0x0000063au, 0x000004a7u, 0x0003003eu, 0x0000063bu, 0x000004aau, 0x0003003eu, 0x0000063cu, 0x000004adu, 0x0003003eu, 0x0000063du, 0x000004b1u, 0x0003003eu, 0x0000063eu, 0x000004b5u, 0x0003003eu, 0x0000063fu, 0x000004b8u, 0x0003003eu, 0x00000640u, 0x000004bbu, 0x0003003eu, 0x00000641u, 0x000004beu, 0x0003003eu, 0x00000642u, 0x000004c2u, 0x0003003eu, 0x00000643u, 0x000004c7u, 0x0003003eu, 0x00000644u, 0x000004ccu, 0x0003003eu, 0x000006f9u, 0x000004a7u, 0x0003003eu, 0x000006fau, 0x000004aau, 0x0003003eu, 0x000006fbu, 0x000004adu, 0x0003003eu, 0x000006fcu, 0x000004b1u, 0x0003003eu, 0x000006fdu, 0x000004b5u, 0x0003003eu, 0x000006feu, 0x000004b8u, 0x0003003eu, 0x000006ffu, 0x000004bbu, 0x0003003eu, 0x00000700u, 0x000004beu, 0x0003003eu, 0x00000701u, 0x000004c2u, 0x0003003eu, 0x00000702u, 0x000004c7u, 0x0003003eu, 0x00000703u, 0x000004ccu, 0x0003003eu, 0x0000071bu, 0x000004a7u, 0x0003003eu, 0x0000071cu, 0x000004aau, 0x0003003eu, 0x0000071du, 0x000004adu, 0x0003003eu, 0x0000071eu, 0x000004b1u, 0x0003003eu, 0x0000071fu, 0x000004b5u, 0x0003003eu, 0x00000720u, 0x000004b8u, 0x0003003eu, 0x00000721u, 0x000004bbu, 0x0003003eu, 0x00000722u, 0x000004beu, 0x0003003eu, 0x00000723u, 0x000004c2u, 0x0003003eu, 0x00000724u, 0x000004c7u, 0x0003003eu, 0x000002afu, 0x00000298u, 0x0003003eu, 0x000002b1u, 0x000002a8u, 0x0003003eu, 0x000002b3u, 0x00000246u, 0x0003003eu, 0x000004ceu, 0x0000013du, 0x000300f7u, 0x000004dau, 0x00000000u, 0x000300fbu, 0x00000047u, 0x000004dbu, 0x000200f8u, 0x000004dbu, 0x00050041u, 0x00000014u, 0x000004dcu, 0x000002afu, 0x0000004au, 0x0004003du, 0x00000006u, 0x000004ddu, 0x000004dcu, 0x00050084u, 0x00000006u, 0x000004deu, 0x000004ddu, 0x00000082u, 0x0003003eu, 0x000004d0u, 0x000004deu, 0x00050041u, 0x00000014u, 0x000004dfu, 0x000002b1u, 0x0000004au, 0x0004003du, 0x00000006u, 0x000004e0u, 0x000004dfu, 0x00050084u, 0x00000006u, 0x000004e1u, 0x000004e0u, 0x00000082u, 0x00050080u, 0x00000006u, 0x000004e2u, 0x000004e1u, 0x0000007cu, 0x0003003eu, 0x000004d1u, 0x000004e2u, 0x00050084u, 0x00000006u, 0x000004e7u, 0x00000246u, 0x000004b1u, 0x0007000cu, 0x00000006u, 0x000004e8u, 0x00000001u, 0x0000002au, 0x000004deu, 0x000004e7u, 0x0003003eu, 0x000004d0u, 0x000004e8u, 0x00050084u, 0x00000006u, 0x000004edu, 0x00000246u, 0x000004c2u, 0x00050082u, 0x00000006u, 0x000004eeu, 0x000004edu, 0x000000a6u, 0x0007000cu, 0x00000006u, 0x000004efu, 0x00000001u, 0x00000027u, 0x000004e2u, 0x000004eeu, 0x0003003eu, 0x000004d1u, 0x000004efu, 0x000500b1u, 0x0000001eu, 0x000004f2u, 0x000004efu, 0x000004e8u, 0x000300f7u, 0x000004f3u, 0x00000000u, 0x000400fau, 0x000004f2u, 0x000004f4u, 0x000004f3u, 0x000200f8u, 0x000004f4u, 0x0003003eu, 0x000004ceu, 0x00000302u, 0x0003003eu, 0x000004cfu, 0x0000013du, 0x000200f9u, 0x000004dau, 0x000200f8u, 0x000004f3u, 0x000500c7u, 0x00000006u, 0x000004f7u, 0x000004c7u, 0x000000a6u, 0x000500abu, 0x0000001eu, 0x000004f8u, 0x000004f7u, 0x00000092u, 0x0003003eu, 0x000004d2u, 0x000004f8u, 0x00050084u, 0x00000006u, 0x000004feu, 0x000004b5u, 0x00000246u, 0x00050050u, 0x00000020u, 0x000004ffu, 0x000004feu, 0x000004feu, 0x00050080u, 0x00000020u, 0x00000500u, 0x000004ffu, 0x0000014cu, 0x00050050u, 0x00000020u, 0x00000502u, 0x000004e8u, 0x000004e8u, 0x00050050u, 0x00000020u, 0x00000504u, 0x000004efu, 0x000004efu, 0x0008000cu, 0x00000020u, 0x00000505u, 0x00000001u, 0x0000002du, 0x00000500u, 0x00000502u, 0x00000504u, 0x00050051u, 0x00000006u, 0x00000506u, 0x00000505u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000507u, 0x00000505u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000508u, 0x000004e8u, 0x000004efu, 0x00000506u, 0x00000507u, 0x0003003eu, 0x000004d3u, 0x00000508u, 0x000e0050u, 0x0000001cu, 0x00000739u, 0x000004a7u, 0x000004aau, 0x000004adu, 0x000004b1u, 0x000004b5u, 0x000004b8u, 0x000004bbu, 0x000004beu, 0x000004c2u, 0x000004c7u, 0x00000631u, 0x0003003eu, 0x00000629u, 0x000004a7u, 0x0003003eu, 0x0000062au, 0x000004aau, 0x0003003eu, 0x0000062bu, 0x000004adu, 0x0003003eu, 0x0000062cu, 0x000004b1u, 0x0003003eu, 0x0000062du, 0x000004b5u, 0x0003003eu, 0x0000062eu, 0x000004b8u, 0x0003003eu, 0x0000062fu, 0x000004bbu, 0x0003003eu, 0x00000630u, 0x000004beu, 0x0003003eu, 0x000004d6u, 0x00000508u, 0x0003003eu, 0x000004d7u, 0x000004f8u, 0x0003003eu, 0x000004d8u, 0x00000246u, 0x000500c7u, 0x00000006u, 0x00000542u, 0x000004b1u, 0x0000007fu, 0x0003003eu, 0x00000520u, 0x00000542u, 0x0003003eu, 0x00000521u, 0x000004b5u, 0x00050084u, 0x00000006u, 0x00000547u, 0x00000542u, 0x00000246u, 0x0003003eu, 0x00000520u, 0x00000547u, 0x0003003eu, 0x00000521u, 0x000004feu, 0x00070050u, 0x00000007u, 0x0000054du, 0x00000547u, 0x00000547u, 0x00000547u, 0x00000547u, 0x00050082u, 0x00000007u, 0x0000054eu, 0x00000508u, 0x0000054du, 0x00050084u, 0x00000006u, 0x00000552u, 0x00000246u, 0x000004a7u, 0x0003003eu, 0x00000524u, 0x0000054eu, 0x0003003eu, 0x00000525u, 0x000004b8u, 0x0003003eu, 0x00000526u, 0x00000552u, 0x00070050u, 0x00000007u, 0x000005b8u, 0x000004b8u, 0x000004b8u, 0x000004b8u, 0x000004b8u, 0x00050098u, 0x00000062u, 0x000005b9u, 0x0000054eu, 0x000005b8u, 0x00050051u, 0x00000007u, 0x000005bau, 0x000005b9u, 0x00000000u, 0x0003003eu, 0x000005b3u, 0x000005bau, 0x00050051u, 0x00000007u, 0x000005bbu, 0x000005b9u, 0x00000001u, 0x0003003eu, 0x000005b2u, 0x000005bbu, 0x0004007cu, 0x00000067u, 0x000005bdu, 0x000005bau, 0x0004007cu, 0x00000030u, 0x000005bfu, 0x00000552u, 0x00070050u, 0x00000067u, 0x000005c0u, 0x000005bfu, 0x000005bfu, 0x000005bfu, 0x000005bfu, 0x00050095u, 0x0000006eu, 0x000005c1u, 0x000005bdu, 0x000005c0u, 0x00050051u, 0x00000067u, 0x000005c2u, 0x000005c1u, 0x00000001u, 0x0003003eu, 0x000005b4u, 0x000005c2u, 0x00050051u, 0x00000067u, 0x000005c3u, 0x000005c1u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005c4u, 0x000005c3u, 0x0003003eu, 0x000005b3u, 0x000005c4u, 0x0004007cu, 0x00000007u, 0x000005c6u, 0x000005c2u, 0x00050080u, 0x00000007u, 0x000005c8u, 0x000005bbu, 0x000005c6u, 0x0003003eu, 0x000005b2u, 0x000005c8u, 0x0003003eu, 0x00000527u, 0x000005c8u, 0x0003003eu, 0x000005b5u, 0x000005c4u, 0x0003003eu, 0x00000523u, 0x000005c8u, 0x0003003eu, 0x00000522u, 0x000005c4u, 0x00050084u, 0x00000006u, 0x0000055eu, 0x00000246u, 0x000004aau, 0x0003003eu, 0x0000052au, 0x0000054eu, 0x0003003eu, 0x0000052bu, 0x000004bbu, 0x0003003eu, 0x0000052cu, 0x0000055eu, 0x00070050u, 0x00000007u, 0x000005d1u, 0x000004bbu, 0x000004bbu, 0x000004bbu, 0x000004bbu, 0x00050098u, 0x00000062u, 0x000005d2u, 0x0000054eu, 0x000005d1u, 0x00050051u, 0x00000007u, 0x000005d3u, 0x000005d2u, 0x00000000u, 0x0003003eu, 0x000005ccu, 0x000005d3u, 0x00050051u, 0x00000007u, 0x000005d4u, 0x000005d2u, 0x00000001u, 0x0003003eu, 0x000005cbu, 0x000005d4u, 0x0004007cu, 0x00000067u, 0x000005d6u, 0x000005d3u, 0x0004007cu, 0x00000030u, 0x000005d8u, 0x0000055eu, 0x00070050u, 0x00000067u, 0x000005d9u, 0x000005d8u, 0x000005d8u, 0x000005d8u, 0x000005d8u, 0x00050095u, 0x0000006eu, 0x000005dau, 0x000005d6u, 0x000005d9u, 0x00050051u, 0x00000067u, 0x000005dbu, 0x000005dau, 0x00000001u, 0x0003003eu, 0x000005cdu, 0x000005dbu, 0x00050051u, 0x00000067u, 0x000005dcu, 0x000005dau, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005ddu, 0x000005dcu, 0x0003003eu, 0x000005ccu, 0x000005ddu, 0x0004007cu, 0x00000007u, 0x000005dfu, 0x000005dbu, 0x00050080u, 0x00000007u, 0x000005e1u, 0x000005d4u, 0x000005dfu, 0x0003003eu, 0x000005cbu, 0x000005e1u, 0x0003003eu, 0x0000052du, 0x000005e1u, 0x0003003eu, 0x000005ceu, 0x000005ddu, 0x0003003eu, 0x00000529u, 0x000005e1u, 0x0003003eu, 0x00000528u, 0x000005ddu, 0x00070050u, 0x00000007u, 0x00000565u, 0x000004feu, 0x000004feu, 0x000004feu, 0x000004feu, 0x00050082u, 0x00000007u, 0x00000566u, 0x00000508u, 0x00000565u, 0x00050084u, 0x00000006u, 0x0000056au, 0x00000246u, 0x000004adu, 0x0003003eu, 0x00000530u, 0x00000566u, 0x0003003eu, 0x00000531u, 0x000004beu, 0x0003003eu, 0x00000532u, 0x0000056au, 0x00070050u, 0x00000007u, 0x000005eau, 0x000004beu, 0x000004beu, 0x000004beu, 0x000004beu, 0x00050098u, 0x00000062u, 0x000005ebu, 0x00000566u, 0x000005eau, 0x00050051u, 0x00000007u, 0x000005ecu, 0x000005ebu, 0x00000000u, 0x0003003eu, 0x000005e5u, 0x000005ecu, 0x00050051u, 0x00000007u, 0x000005edu, 0x000005ebu, 0x00000001u, 0x0003003eu, 0x000005e4u, 0x000005edu, 0x0004007cu, 0x00000067u, 0x000005efu, 0x000005ecu, 0x0004007cu, 0x00000030u, 0x000005f1u, 0x0000056au, 0x00070050u, 0x00000067u, 0x000005f2u, 0x000005f1u, 0x000005f1u, 0x000005f1u, 0x000005f1u, 0x00050095u, 0x0000006eu, 0x000005f3u, 0x000005efu, 0x000005f2u, 0x00050051u, 0x00000067u, 0x000005f4u, 0x000005f3u, 0x00000001u, 0x0003003eu, 0x000005e6u, 0x000005f4u, 0x00050051u, 0x00000067u, 0x000005f5u, 0x000005f3u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005f6u, 0x000005f5u, 0x0003003eu, 0x000005e5u, 0x000005f6u, 0x0004007cu, 0x00000007u, 0x000005f8u, 0x000005f4u, 0x00050080u, 0x00000007u, 0x000005fau, 0x000005edu, 0x000005f8u, 0x0003003eu, 0x000005e4u, 0x000005fau, 0x0003003eu, 0x00000533u, 0x000005fau, 0x0003003eu, 0x000005e7u, 0x000005f6u, 0x0003003eu, 0x0000052fu, 0x000005fau, 0x0003003eu, 0x0000052eu, 0x000005f6u, 0x00050084u, 0x00000006u, 0x00000575u, 0x00000246u, 0x000004b5u, 0x00070050u, 0x00000007u, 0x00000576u, 0x00000575u, 0x00000575u, 0x00000575u, 0x00000575u, 0x000500b1u, 0x000000cfu, 0x00000577u, 0x00000508u, 0x00000576u, 0x000600a9u, 0x00000007u, 0x00000578u, 0x00000577u, 0x000005ddu, 0x000005f6u, 0x0003003eu, 0x0000052eu, 0x00000578u, 0x000600a9u, 0x00000007u, 0x00000582u, 0x00000577u, 0x000005e1u, 0x000005fau, 0x0003003eu, 0x0000052fu, 0x00000582u, 0x000500adu, 0x000000cfu, 0x00000585u, 0x000005c8u, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x00000586u, 0x00000585u, 0x000000deu, 0x000005c4u, 0x0003003eu, 0x00000522u, 0x00000586u, 0x000500b1u, 0x000000cfu, 0x00000589u, 0x000005c8u, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x0000058au, 0x00000589u, 0x000000e5u, 0x00000586u, 0x0003003eu, 0x00000522u, 0x0000058au, 0x000500adu, 0x000000cfu, 0x0000058du, 0x00000582u, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x0000058eu, 0x0000058du, 0x000000deu, 0x00000578u, 0x0003003eu, 0x0000052eu, 0x0000058eu, 0x000500b1u, 0x000000cfu, 0x00000591u, 0x00000582u, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x00000592u, 0x00000591u, 0x000000e5u, 0x0000058eu, 0x0003003eu, 0x0000052eu, 0x00000592u, 0x0003003eu, 0x00000535u, 0x0000058au, 0x000500c3u, 0x00000007u, 0x00000600u, 0x0000058au, 0x00000781u, 0x0003003eu, 0x000005fdu, 0x00000600u, 0x0003003eu, 0x00000534u, 0x00000600u, 0x0003003eu, 0x00000537u, 0x00000592u, 0x000500c3u, 0x00000007u, 0x00000604u, 0x00000592u, 0x00000781u, 0x0003003eu, 0x00000601u, 0x00000604u, 0x0003003eu, 0x00000536u, 0x00000604u, 0x000300f7u, 0x00000598u, 0x00000000u, 0x000400fau, 0x000004f8u, 0x00000599u, 0x0000059au, 0x000200f8u, 0x00000599u, 0x0003003eu, 0x00000538u, 0x00000600u, 0x0003003eu, 0x00000539u, 0x00000604u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x0000059au, 0x0003003eu, 0x00000538u, 0x00000604u, 0x0003003eu, 0x00000539u, 0x00000600u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000598u, 0x00070050u, 0x000000cfu, 0x00000786u, 0x000004f8u, 0x000004f8u, 0x000004f8u, 0x000004f8u, 0x000600a9u, 0x00000007u, 0x00000787u, 0x00000786u, 0x00000604u, 0x00000600u, 0x000600a9u, 0x00000007u, 0x00000789u, 0x00000786u, 0x00000600u, 0x00000604u, 0x0006000cu, 0x00000007u, 0x000005a0u, 0x00000001u, 0x00000005u, 0x00000789u, 0x0006000cu, 0x00000007u, 0x000005a2u, 0x00000001u, 0x00000005u, 0x00000787u, 0x0007000cu, 0x00000007u, 0x000005a3u, 0x00000001u, 0x0000002au, 0x000005a0u, 0x000005a2u, 0x0003003eu, 0x0000053bu, 0x000005a3u, 0x0007004fu, 0x00000020u, 0x00000608u, 0x000005a3u, 0x000005a3u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x0000060au, 0x000005a3u, 0x000005a3u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x0000060bu, 0x00000001u, 0x0000002au, 0x00000608u, 0x0000060au, 0x0003003eu, 0x00000605u, 0x0000060bu, 0x00050041u, 0x00000014u, 0x0000060cu, 0x00000605u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000060du, 0x0000060cu, 0x00050041u, 0x00000014u, 0x0000060eu, 0x00000605u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000060fu, 0x0000060eu, 0x0007000cu, 0x00000006u, 0x00000610u, 0x00000001u, 0x0000002au, 0x0000060du, 0x0000060fu, 0x0003003eu, 0x00000606u, 0x00000610u, 0x0003003eu, 0x0000053au, 0x00000610u, 0x00050084u, 0x00000006u, 0x000005a7u, 0x0000010eu, 0x00000246u, 0x000500b3u, 0x0000001eu, 0x000005a8u, 0x00000610u, 0x000005a7u, 0x000300f7u, 0x000005a9u, 0x00000000u, 0x000400fau, 0x000005a8u, 0x000005aau, 0x000005abu, 0x000200f8u, 0x000005aau, 0x0003003eu, 0x0000053du, 0x00000789u, 0x0007004fu, 0x00000020u, 0x00000614u, 0x00000789u, 0x00000789u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000616u, 0x00000789u, 0x00000789u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000617u, 0x00000001u, 0x00000027u, 0x00000614u, 0x00000616u, 0x0003003eu, 0x00000611u, 0x00000617u, 0x00050041u, 0x00000014u, 0x00000618u, 0x00000611u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000619u, 0x00000618u, 0x00050041u, 0x00000014u, 0x0000061au, 0x00000611u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000061bu, 0x0000061au, 0x0007000cu, 0x00000006u, 0x0000061cu, 0x00000001u, 0x00000027u, 0x00000619u, 0x0000061bu, 0x0003003eu, 0x00000612u, 0x0000061cu, 0x0003003eu, 0x0000053eu, 0x00000787u, 0x0007004fu, 0x00000020u, 0x00000620u, 0x00000787u, 0x00000787u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000020u, 0x00000622u, 0x00000787u, 0x00000787u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000623u, 0x00000001u, 0x0000002au, 0x00000620u, 0x00000622u, 0x0003003eu, 0x0000061du, 0x00000623u, 0x00050041u, 0x00000014u, 0x00000624u, 0x0000061du, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000625u, 0x00000624u, 0x00050041u, 0x00000014u, 0x00000626u, 0x0000061du, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000627u, 0x00000626u, 0x0007000cu, 0x00000006u, 0x00000628u, 0x00000001u, 0x0000002au, 0x00000625u, 0x00000627u, 0x0003003eu, 0x0000061eu, 0x00000628u, 0x00050050u, 0x00000020u, 0x000005b0u, 0x0000061cu, 0x00000628u, 0x0003003eu, 0x0000053cu, 0x000005b0u, 0x000200f9u, 0x000005a9u, 0x000200f8u, 0x000005abu, 0x0003003eu, 0x0000053cu, 0x0000011du, 0x000200f9u, 0x000005a9u, 0x000200f8u, 0x000005a9u, 0x000700f5u, 0x00000020u, 0x0000075eu, 0x000005b0u, 0x000005aau, 0x0000011du, 0x000005abu, 0x0003003eu, 0x0000053fu, 0x0000075eu, 0x0003003eu, 0x000004d4u, 0x0000075eu, 0x00050041u, 0x00000014u, 0x0000050eu, 0x000004d4u, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000050fu, 0x0000050eu, 0x00050041u, 0x00000014u, 0x00000510u, 0x000002afu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000511u, 0x00000510u, 0x0007000cu, 0x00000006u, 0x00000512u, 0x00000001u, 0x0000002au, 0x0000050fu, 0x00000511u, 0x0003003eu, 0x0000050eu, 0x00000512u, 0x00050041u, 0x00000014u, 0x00000514u, 0x000004d4u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000515u, 0x00000514u, 0x00050041u, 0x00000014u, 0x00000516u, 0x000002b1u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000517u, 0x00000516u, 0x0007000cu, 0x00000006u, 0x00000518u, 0x00000001u, 0x00000027u, 0x00000515u, 0x00000517u, 0x0003003eu, 0x00000514u, 0x00000518u, 0x0004003du, 0x00000006u, 0x0000051bu, 0x0000050eu, 0x0004003du, 0x00000006u, 0x0000051du, 0x00000514u, 0x000500b3u, 0x0000001eu, 0x0000051eu, 0x0000051bu, 0x0000051du, 0x0003003eu, 0x000004ceu, 0x00000302u, 0x0003003eu, 0x000004cfu, 0x0000051eu, 0x000200f9u, 0x000004dau, 0x000200f8u, 0x000004dau, 0x000700f5u, 0x0000001eu, 0x0000075fu, 0x0000013du, 0x000004f4u, 0x0000051eu, 0x000005a9u, 0x0003003eu, 0x000004d9u, 0x0000075fu, 0x000300f7u, 0x000002b6u, 0x00000000u, 0x000400fau, 0x0000075fu, 0x000002b5u, 0x000002b6u, 0x000200f8u, 0x000002b5u, 0x000500c5u, 0x00000030u, 0x000002bau, 0x0000074eu, 0x0000027fu, 0x0003003eu, 0x00000273u, 0x000002bau, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002b6u, 0x000700f5u, 0x00000030u, 0x00000772u, 0x0000074eu, 0x000004dau, 0x000002bau, 0x000002b5u, 0x000200f9u, 0x00000277u, 0x000200f8u, 0x00000277u, 0x000200f9u, 0x00000274u, 0x000200f8u, 0x00000276u, 0x00050084u, 0x00000006u, 0x000002c2u, 0x000001f9u, 0x000002c1u, 0x00050080u, 0x00000006u, 0x000002c4u, 0x000002c2u, 0x000001c7u, 0x00060041u, 0x000002c6u, 0x000002c7u, 0x000002beu, 0x00000092u, 0x000002c4u, 0x0003003eu, 0x000002c7u, 0x0000074eu, 0x000500abu, 0x0000001eu, 0x000002c9u, 0x0000074eu, 0x00000047u, 0x000300f7u, 0x000002cbu, 0x00000000u, 0x000400fau, 0x000002c9u, 0x000002cau, 0x000002d5u, 0x000200f8u, 0x000002cau, 0x00060041u, 0x000002c6u, 0x000002d1u, 0x000002cfu, 0x00000092u, 0x000001f9u, 0x000500c4u, 0x00000030u, 0x000002d3u, 0x0000004au, 0x000001c7u, 0x000700f1u, 0x00000030u, 0x000002d4u, 0x000002d1u, 0x0000004au, 0x00000047u, 0x000002d3u, 0x000200f9u, 0x000002cbu, 0x000200f8u, 0x000002d5u, 0x00060041u, 0x000002c6u, 0x000002d7u, 0x000002cfu, 0x00000092u, 0x000001f9u, 0x000500c4u, 0x00000030u, 0x000002d9u, 0x0000004au, 0x000001c7u, 0x000400c8u, 0x00000030u, 0x000002dau, 0x000002d9u, 0x000700f0u, 0x00000030u, 0x000002dbu, 0x000002d7u, 0x0000004au, 0x00000047u, 0x000002dau, 0x000200f9u, 0x000002cbu, 0x000200f8u, 0x000002cbu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x0000003bu, 0x0000000au, 0x000500c3u, 0x00000007u, 0x0000003eu, 0x0000003bu, 0x00000781u, 0x000200feu, 0x0000003eu, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x00000028u, 0x00000041u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000042u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000043u, 0x00000042u, 0x00000042u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000044u, 0x0000000eu, 0x0007004fu, 0x00000020u, 0x00000045u, 0x00000044u, 0x00000044u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000046u, 0x00000001u, 0x00000027u, 0x00000043u, 0x00000045u, 0x0003003eu, 0x00000041u, 0x00000046u, 0x00050041u, 0x00000014u, 0x00000048u, 0x00000041u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000049u, 0x00000048u, 0x00050041u, 0x00000014u, 0x0000004bu, 0x00000041u, 0x0000004au, 0x0004003du, 0x00000006u, 0x0000004cu, 0x0000004bu, 0x0007000cu, 0x00000006u, 0x0000004du, 0x00000001u, 0x00000027u, 0x00000049u, 0x0000004cu, 0x000200feu, 0x0000004du, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x00000028u, 0x00000050u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000051u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000052u, 0x00000051u, 0x00000051u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000053u, 0x00000011u, 0x0007004fu, 0x00000020u, 0x00000054u, 0x00000053u, 0x00000053u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000020u, 0x00000055u, 0x00000001u, 0x0000002au, 0x00000052u, 0x00000054u, 0x0003003eu, 0x00000050u, 0x00000055u, 0x00050041u, 0x00000014u, 0x00000056u, 0x00000050u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000057u, 0x00000056u, 0x00050041u, 0x00000014u, 0x00000058u, 0x00000050u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000059u, 0x00000058u, 0x0007000cu, 0x00000006u, 0x0000005au, 0x00000001u, 0x0000002au, 0x00000057u, 0x00000059u, 0x000200feu, 0x0000005au, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000060u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000061u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000006du, 0x00000007u, 0x0004003du, 0x00000007u, 0x0000005du, 0x00000016u, 0x0004003du, 0x00000006u, 0x0000005eu, 0x00000017u, 0x00070050u, 0x00000007u, 0x0000005fu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00050098u, 0x00000062u, 0x00000063u, 0x0000005du, 0x0000005fu, 0x00050051u, 0x00000007u, 0x00000064u, 0x00000063u, 0x00000000u, 0x0003003eu, 0x00000061u, 0x00000064u, 0x00050051u, 0x00000007u, 0x00000065u, 0x00000063u, 0x00000001u, 0x0003003eu, 0x00000060u, 0x00000065u, 0x0004007cu, 0x00000067u, 0x00000068u, 0x00000064u, 0x0004003du, 0x00000006u, 0x00000069u, 0x00000018u, 0x0004007cu, 0x00000030u, 0x0000006au, 0x00000069u, 0x00070050u, 0x00000067u, 0x0000006bu, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x00050095u, 0x0000006eu, 0x0000006fu, 0x00000068u, 0x0000006bu, 0x00050051u, 0x00000067u, 0x00000070u, 0x0000006fu, 0x00000001u, 0x0003003eu, 0x0000006du, 0x00000070u, 0x00050051u, 0x00000067u, 0x00000071u, 0x0000006fu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000072u, 0x00000071u, 0x0003003eu, 0x00000061u, 0x00000072u, 0x0004007cu, 0x00000007u, 0x00000074u, 0x00000070u, 0x00050080u, 0x00000007u, 0x00000076u, 0x00000065u, 0x00000074u, 0x0003003eu, 0x00000060u, 0x00000076u, 0x0003003eu, 0x00000019u, 0x00000076u, 0x000200feu, 0x00000072u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000026u, 0x00000000u, 0x00000021u, 0x00030037u, 0x0000001du, 0x00000022u, 0x00030037u, 0x00000008u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000014u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x00000014u, 0x0000007bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000081u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000008bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000096u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000097u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000098u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000abu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000acu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000beu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000f8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000100u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000105u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000010bu, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000114u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000115u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000118u, 0x00000007u, 0x00050041u, 0x00000014u, 0x0000007du, 0x00000022u, 0x0000007cu, 0x0004003du, 0x00000006u, 0x0000007eu, 0x0000007du, 0x000500c7u, 0x00000006u, 0x00000080u, 0x0000007eu, 0x0000007fu, 0x0003003eu, 0x0000007bu, 0x00000080u, 0x00050041u, 0x00000014u, 0x00000083u, 0x00000022u, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000084u, 0x00000083u, 0x0003003eu, 0x00000081u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000085u, 0x00000025u, 0x00050084u, 0x00000006u, 0x00000087u, 0x00000080u, 0x00000085u, 0x0003003eu, 0x0000007bu, 0x00000087u, 0x0004003du, 0x00000006u, 0x00000088u, 0x00000025u, 0x00050084u, 0x00000006u, 0x0000008au, 0x00000084u, 0x00000088u, 0x0003003eu, 0x00000081u, 0x0000008au, 0x0004003du, 0x00000007u, 0x0000008cu, 0x00000023u, 0x00070050u, 0x00000007u, 0x0000008eu, 0x00000087u, 0x00000087u, 0x00000087u, 0x00000087u, 0x00050082u, 0x00000007u, 0x0000008fu, 0x0000008cu, 0x0000008eu, 0x0004003du, 0x00000006u, 0x00000091u, 0x00000025u, 0x00050041u, 0x00000014u, 0x00000093u, 0x00000022u, 0x00000092u, 0x0004003du, 0x00000006u, 0x00000094u, 0x00000093u, 0x00050084u, 0x00000006u, 0x00000095u, 0x00000091u, 0x00000094u, 0x0003003eu, 0x00000097u, 0x0000008fu, 0x00050041u, 0x00000014u, 0x00000099u, 0x00000022u, 0x00000090u, 0x0004003du, 0x00000006u, 0x0000009au, 0x00000099u, 0x0003003eu, 0x00000098u, 0x0000009au, 0x0003003eu, 0x0000009bu, 0x00000095u, 0x00080039u, 0x00000007u, 0x0000009du, 0x0000001au, 0x00000097u, 0x00000098u, 0x0000009bu, 0x0000009cu, 0x0004003du, 0x00000007u, 0x0000009eu, 0x0000009cu, 0x0003003eu, 0x00000096u, 0x0000009eu, 0x0003003eu, 0x0000008bu, 0x0000009du, 0x0004003du, 0x00000007u, 0x000000a0u, 0x00000023u, 0x00050082u, 0x00000007u, 0x000000a3u, 0x000000a0u, 0x0000008eu, 0x0004003du, 0x00000006u, 0x000000a5u, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000a7u, 0x00000022u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x00050084u, 0x00000006u, 0x000000a9u, 0x000000a5u, 0x000000a8u, 0x0003003eu, 0x000000abu, 0x000000a3u, 0x00050041u, 0x00000014u, 0x000000adu, 0x00000022u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x000000aeu, 0x000000adu, 0x0003003eu, 0x000000acu, 0x000000aeu, 0x0003003eu, 0x000000afu, 0x000000a9u, 0x00080039u, 0x00000007u, 0x000000b1u, 0x0000001au, 0x000000abu, 0x000000acu, 0x000000afu, 0x000000b0u, 0x0004003du, 0x00000007u, 0x000000b2u, 0x000000b0u, 0x0003003eu, 0x000000aau, 0x000000b2u, 0x0003003eu, 0x0000009fu, 0x000000b1u, 0x0004003du, 0x00000007u, 0x000000b4u, 0x00000023u, 0x00070050u, 0x00000007u, 0x000000b6u, 0x0000008au, 0x0000008au, 0x0000008au, 0x0000008au, 0x00050082u, 0x00000007u, 0x000000b7u, 0x000000b4u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x000000b9u, 0x00000025u, 0x00050041u, 0x00000014u, 0x000000bbu, 0x00000022u, 0x000000bau, 0x0004003du, 0x00000006u, 0x000000bcu, 0x000000bbu, 0x00050084u, 0x00000006u, 0x000000bdu, 0x000000b9u, 0x000000bcu, 0x0003003eu, 0x000000bfu, 0x000000b7u, 0x00050041u, 0x00000014u, 0x000000c1u, 0x00000022u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000c2u, 0x000000c1u, 0x0003003eu, 0x000000c0u, 0x000000c2u, 0x0003003eu, 0x000000c3u, 0x000000bdu, 0x00080039u, 0x00000007u, 0x000000c5u, 0x0000001au, 0x000000bfu, 0x000000c0u, 0x000000c3u, 0x000000c4u, 0x0004003du, 0x00000007u, 0x000000c6u, 0x000000c4u, 0x0003003eu, 0x000000beu, 0x000000c6u, 0x0003003eu, 0x000000b3u, 0x000000c5u, 0x0004003du, 0x00000007u, 0x000000c9u, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000cau, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000ccu, 0x00000083u, 0x00050084u, 0x00000006u, 0x000000cdu, 0x000000cau, 0x000000ccu, 0x00070050u, 0x00000007u, 0x000000ceu, 0x000000cdu, 0x000000cdu, 0x000000cdu, 0x000000cdu, 0x000500b1u, 0x000000cfu, 0x000000d0u, 0x000000c9u, 0x000000ceu, 0x000600a9u, 0x00000007u, 0x000000d1u, 0x000000d0u, 0x000000b1u, 0x000000c5u, 0x0003003eu, 0x000000b3u, 0x000000d1u, 0x0004003du, 0x00000007u, 0x000000d4u, 0x00000023u, 0x0004003du, 0x00000006u, 0x000000d5u, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000d7u, 0x00000083u, 0x00050084u, 0x00000006u, 0x000000d8u, 0x000000d5u, 0x000000d7u, 0x00070050u, 0x00000007u, 0x000000d9u, 0x000000d8u, 0x000000d8u, 0x000000d8u, 0x000000d8u, 0x000500b1u, 0x000000cfu, 0x000000dau, 0x000000d4u, 0x000000d9u, 0x000600a9u, 0x00000007u, 0x000000dbu, 0x000000dau, 0x000000b2u, 0x000000c6u, 0x0003003eu, 0x000000beu, 0x000000dbu, 0x000500adu, 0x000000cfu, 0x000000e1u, 0x0000009eu, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000000e2u, 0x000000e1u, 0x000000deu, 0x0000009du, 0x0003003eu, 0x0000008bu, 0x000000e2u, 0x000500b1u, 0x000000cfu, 0x000000e9u, 0x0000009eu, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000000eau, 0x000000e9u, 0x000000e5u, 0x000000e2u, 0x0003003eu, 0x0000008bu, 0x000000eau, 0x000500adu, 0x000000cfu, 0x000000edu, 0x000000dbu, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000000eeu, 0x000000edu, 0x000000deu, 0x000000d1u, 0x0003003eu, 0x000000b3u, 0x000000eeu, 0x000500b1u, 0x000000cfu, 0x000000f1u, 0x000000dbu, 0x000000e8u, 0x000600a9u, 0x00000007u, 0x000000f2u, 0x000000f1u, 0x000000e5u, 0x000000eeu, 0x0003003eu, 0x000000b3u, 0x000000f2u, 0x0003003eu, 0x000000f4u, 0x000000eau, 0x00050039u, 0x00000007u, 0x000000f6u, 0x0000000bu, 0x000000f4u, 0x0003003eu, 0x000000f3u, 0x000000f6u, 0x0003003eu, 0x000000f8u, 0x000000f2u, 0x00050039u, 0x00000007u, 0x000000fau, 0x0000000bu, 0x000000f8u, 0x0003003eu, 0x000000f7u, 0x000000fau, 0x0004003du, 0x0000001eu, 0x000000fbu, 0x00000024u, 0x000300f7u, 0x000000fdu, 0x00000000u, 0x000400fau, 0x000000fbu, 0x000000fcu, 0x00000102u, 0x000200f8u, 0x000000fcu, 0x0003003eu, 0x000000feu, 0x000000f6u, 0x0003003eu, 0x00000100u, 0x000000fau, 0x000200f9u, 0x000000fdu, 0x000200f8u, 0x00000102u, 0x0003003eu, 0x000000feu, 0x000000fau, 0x0003003eu, 0x00000100u, 0x000000f6u, 0x000200f9u, 0x000000fdu, 0x000200f8u, 0x000000fdu, 0x00070050u, 0x000000cfu, 0x0000078au, 0x000000fbu, 0x000000fbu, 0x000000fbu, 0x000000fbu, 0x000600a9u, 0x00000007u, 0x0000078bu, 0x0000078au, 0x000000fau, 0x000000f6u, 0x000600a9u, 0x00000007u, 0x0000078du, 0x0000078au, 0x000000f6u, 0x000000fau, 0x0006000cu, 0x00000007u, 0x00000107u, 0x00000001u, 0x00000005u, 0x0000078du, 0x0006000cu, 0x00000007u, 0x00000109u, 0x00000001u, 0x00000005u, 0x0000078bu, 0x0007000cu, 0x00000007u, 0x0000010au, 0x00000001u, 0x0000002au, 0x00000107u, 0x00000109u, 0x0003003eu, 0x0000010bu, 0x0000010au, 0x00050039u, 0x00000006u, 0x0000010cu, 0x00000012u, 0x0000010bu, 0x0003003eu, 0x00000105u, 0x0000010cu, 0x0004003du, 0x00000006u, 0x0000010fu, 0x00000025u, 0x00050084u, 0x00000006u, 0x00000110u, 0x0000010eu, 0x0000010fu, 0x000500b3u, 0x0000001eu, 0x00000111u, 0x0000010cu, 0x00000110u, 0x000300f7u, 0x00000113u, 0x00000000u, 0x000400fau, 0x00000111u, 0x00000112u, 0x0000011cu, 0x000200f8u, 0x00000112u, 0x0003003eu, 0x00000115u, 0x0000078du, 0x00050039u, 0x00000006u, 0x00000117u, 0x0000000fu, 0x00000115u, 0x0003003eu, 0x00000118u, 0x0000078bu, 0x00050039u, 0x00000006u, 0x0000011au, 0x00000012u, 0x00000118u, 0x00050050u, 0x00000020u, 0x0000011bu, 0x00000117u, 0x0000011au, 0x0003003eu, 0x00000114u, 0x0000011bu, 0x000200f9u, 0x00000113u, 0x000200f8u, 0x0000011cu, 0x0003003eu, 0x00000114u, 0x0000011du, 0x000200f9u, 0x00000113u, 0x000200f8u, 0x00000113u, 0x000700f5u, 0x00000020u, 0x0000077du, 0x0000011bu, 0x00000112u, 0x0000011du, 0x0000011cu, 0x000200feu, 0x0000077du, 0x00010038u, 0x00050036u, 0x0000001eu, 0x0000002eu, 0x00000000u, 0x00000029u, 0x00030037u, 0x0000001du, 0x0000002au, 0x00030037u, 0x00000028u, 0x0000002bu, 0x00030037u, 0x00000028u, 0x0000002cu, 0x00030037u, 0x00000014u, 0x0000002du, 0x000200f8u, 0x0000002fu, 0x0005003bu, 0x0000001fu, 0x00000301u, 0x00000007u, 0x0000013du, 0x0004003bu, 0x0000001fu, 0x000002feu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000121u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000013fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000145u, 0x00000007u, 0x0004003bu, 0x00000028u, 0x00000157u, 0x00000007u, 0x0004003bu, 0x0000001du, 0x00000158u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000015au, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x0000015cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000015eu, 0x00000007u, 0x000300f7u, 0x000002fdu, 0x00000000u, 0x000300fbu, 0x00000047u, 0x00000300u, 0x000200f8u, 0x00000300u, 0x00050041u, 0x00000014u, 0x00000122u, 0x0000002bu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000123u, 0x00000122u, 0x00050084u, 0x00000006u, 0x00000124u, 0x00000123u, 0x00000082u, 0x0003003eu, 0x00000121u, 0x00000124u, 0x00050041u, 0x00000014u, 0x00000126u, 0x0000002cu, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000127u, 0x00000126u, 0x00050084u, 0x00000006u, 0x00000128u, 0x00000127u, 0x00000082u, 0x00050080u, 0x00000006u, 0x00000129u, 0x00000128u, 0x0000007cu, 0x0003003eu, 0x00000125u, 0x00000129u, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000002du, 0x00050041u, 0x00000014u, 0x0000012cu, 0x0000002au, 0x0000007cu, 0x0004003du, 0x00000006u, 0x0000012du, 0x0000012cu, 0x00050084u, 0x00000006u, 0x0000012eu, 0x0000012bu, 0x0000012du, 0x0007000cu, 0x00000006u, 0x0000012fu, 0x00000001u, 0x0000002au, 0x00000124u, 0x0000012eu, 0x0003003eu, 0x00000121u, 0x0000012fu, 0x0004003du, 0x00000006u, 0x00000131u, 0x0000002du, 0x00050041u, 0x00000014u, 0x00000133u, 0x0000002au, 0x00000132u, 0x0004003du, 0x00000006u, 0x00000134u, 0x00000133u, 0x00050084u, 0x00000006u, 0x00000135u, 0x00000131u, 0x00000134u, 0x00050082u, 0x00000006u, 0x00000136u, 0x00000135u, 0x000000a6u, 0x0007000cu, 0x00000006u, 0x00000137u, 0x00000001u, 0x00000027u, 0x00000129u, 0x00000136u, 0x0003003eu, 0x00000125u, 0x00000137u, 0x000500b1u, 0x0000001eu, 0x0000013au, 0x00000137u, 0x0000012fu, 0x000300f7u, 0x0000013cu, 0x00000000u, 0x000400fau, 0x0000013au, 0x0000013bu, 0x0000013cu, 0x000200f8u, 0x0000013bu, 0x0003003eu, 0x00000301u, 0x00000302u, 0x0003003eu, 0x000002feu, 0x0000013du, 0x000200f9u, 0x000002fdu, 0x000200f8u, 0x0000013cu, 0x00050041u, 0x00000014u, 0x00000141u, 0x0000002au, 0x00000140u, 0x0004003du, 0x00000006u, 0x00000142u, 0x00000141u, 0x000500c7u, 0x00000006u, 0x00000143u, 0x00000142u, 0x000000a6u, 0x000500abu, 0x0000001eu, 0x00000144u, 0x00000143u, 0x00000092u, 0x0003003eu, 0x0000013fu, 0x00000144u, 0x00050041u, 0x00000014u, 0x00000148u, 0x0000002au, 0x00000082u, 0x0004003du, 0x00000006u, 0x00000149u, 0x00000148u, 0x0004003du, 0x00000006u, 0x0000014au, 0x0000002du, 0x00050084u, 0x00000006u, 0x0000014bu, 0x00000149u, 0x0000014au, 0x00050050u, 0x00000020u, 0x0000014du, 0x0000014bu, 0x0000014bu, 0x00050080u, 0x00000020u, 0x0000014eu, 0x0000014du, 0x0000014cu, 0x00050050u, 0x00000020u, 0x00000150u, 0x0000012fu, 0x0000012fu, 0x00050050u, 0x00000020u, 0x00000152u, 0x00000137u, 0x00000137u, 0x0008000cu, 0x00000020u, 0x00000153u, 0x00000001u, 0x0000002du, 0x0000014eu, 0x00000150u, 0x00000152u, 0x00050051u, 0x00000006u, 0x00000154u, 0x00000153u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000155u, 0x00000153u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000156u, 0x0000012fu, 0x00000137u, 0x00000154u, 0x00000155u, 0x0003003eu, 0x00000145u, 0x00000156u, 0x0004003du, 0x0000001cu, 0x00000159u, 0x0000002au, 0x0003003eu, 0x00000158u, 0x00000159u, 0x0003003eu, 0x0000015au, 0x00000156u, 0x0003003eu, 0x0000015cu, 0x00000144u, 0x0004003du, 0x00000006u, 0x0000015fu, 0x0000002du, 0x0003003eu, 0x0000015eu, 0x0000015fu, 0x00080039u, 0x00000020u, 0x00000160u, 0x00000026u, 0x00000158u, 0x0000015au, 0x0000015cu, 0x0000015eu, 0x0003003eu, 0x00000157u, 0x00000160u, 0x00050041u, 0x00000014u, 0x00000161u, 0x00000157u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000162u, 0x00000161u, 0x00050041u, 0x00000014u, 0x00000163u, 0x0000002bu, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000164u, 0x00000163u, 0x0007000cu, 0x00000006u, 0x00000165u, 0x00000001u, 0x0000002au, 0x00000162u, 0x00000164u, 0x0003003eu, 0x00000161u, 0x00000165u, 0x00050041u, 0x00000014u, 0x00000167u, 0x00000157u, 0x0000004au, 0x0004003du, 0x00000006u, 0x00000168u, 0x00000167u, 0x00050041u, 0x00000014u, 0x00000169u, 0x0000002cu, 0x00000047u, 0x0004003du, 0x00000006u, 0x0000016au, 0x00000169u, 0x0007000cu, 0x00000006u, 0x0000016bu, 0x00000001u, 0x00000027u, 0x00000168u, 0x0000016au, 0x0003003eu, 0x00000167u, 0x0000016bu, 0x0004003du, 0x00000006u, 0x0000016eu, 0x00000161u, 0x0004003du, 0x00000006u, 0x00000170u, 0x00000167u, 0x000500b3u, 0x0000001eu, 0x00000171u, 0x0000016eu, 0x00000170u, 0x0003003eu, 0x00000301u, 0x00000302u, 0x0003003eu, 0x000002feu, 0x00000171u, 0x000200f9u, 0x000002fdu, 0x000200f8u, 0x000002fdu, 0x000700f5u, 0x0000001eu, 0x0000077eu, 0x0000013du, 0x0000013bu, 0x00000171u, 0x0000013cu, 0x000200feu, 0x0000077eu, 0x00010038u, 0x00050036u, 0x0000001cu, 0x00000034u, 0x00000000u, 0x00000032u, 0x00030037u, 0x00000031u, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003du, 0x00000030u, 0x0000017bu, 0x00000033u, 0x00070041u, 0x0000017cu, 0x0000017du, 0x0000017au, 0x00000092u, 0x0000017bu, 0x00000092u, 0x0004003du, 0x00000006u, 0x0000017eu, 0x0000017du, 0x0004003du, 0x00000030u, 0x0000017fu, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000180u, 0x0000017au, 0x00000092u, 0x0000017fu, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000180u, 0x0004003du, 0x00000030u, 0x00000182u, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000183u, 0x0000017au, 0x00000092u, 0x00000182u, 0x000000bau, 0x0004003du, 0x00000006u, 0x00000184u, 0x00000183u, 0x0004003du, 0x00000030u, 0x00000185u, 0x00000033u, 0x00070041u, 0x00000186u, 0x00000187u, 0x0000017au, 0x00000092u, 0x00000185u, 0x0000007cu, 0x0004003du, 0x00000174u, 0x00000188u, 0x00000187u, 0x00040072u, 0x00000006u, 0x00000189u, 0x00000188u, 0x0004003du, 0x00000030u, 0x0000018au, 0x00000033u, 0x00070041u, 0x00000186u, 0x0000018bu, 0x0000017au, 0x00000092u, 0x0000018au, 0x00000082u, 0x0004003du, 0x00000174u, 0x0000018cu, 0x0000018bu, 0x00040072u, 0x00000006u, 0x0000018du, 0x0000018cu, 0x0004003du, 0x00000030u, 0x0000018eu, 0x00000033u, 0x00070041u, 0x0000017cu, 0x0000018fu, 0x0000017au, 0x00000092u, 0x0000018eu, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000190u, 0x0000018fu, 0x0004003du, 0x00000030u, 0x00000191u, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000192u, 0x0000017au, 0x00000092u, 0x00000191u, 0x000000a4u, 0x0004003du, 0x00000006u, 0x00000193u, 0x00000192u, 0x0004003du, 0x00000030u, 0x00000194u, 0x00000033u, 0x00070041u, 0x0000017cu, 0x00000195u, 0x0000017au, 0x00000092u, 0x00000194u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x00000196u, 0x00000195u, 0x0004003du, 0x00000030u, 0x00000197u, 0x00000033u, 0x00070041u, 0x00000186u, 0x00000198u, 0x0000017au, 0x00000092u, 0x00000197u, 0x00000132u, 0x0004003du, 0x00000174u, 0x00000199u, 0x00000198u, 0x00040072u, 0x00000006u, 0x0000019au, 0x00000199u, 0x0004003du, 0x00000030u, 0x0000019bu, 0x00000033u, 0x00070041u, 0x0000019cu, 0x0000019du, 0x0000017au, 0x00000092u, 0x0000019bu, 0x00000140u, 0x0004003du, 0x00000175u, 0x0000019eu, 0x0000019du, 0x00040071u, 0x00000030u, 0x0000019fu, 0x0000019eu, 0x0004007cu, 0x00000006u, 0x000001a0u, 0x0000019fu, 0x0004003du, 0x00000030u, 0x000001a1u, 0x00000033u, 0x00070041u, 0x0000019cu, 0x000001a3u, 0x0000017au, 0x00000092u, 0x000001a1u, 0x000001a2u, 0x0004003du, 0x00000175u, 0x000001a4u, 0x000001a3u, 0x00040071u, 0x00000030u, 0x000001a5u, 0x000001a4u, 0x0004007cu, 0x00000006u, 0x000001a6u, 0x000001a5u, 0x000e0050u, 0x0000001cu, 0x000001a7u, 0x0000017eu, 0x00000181u, 0x00000184u, 0x00000189u, 0x0000018du, 0x00000190u, 0x00000193u, 0x00000196u, 0x0000019au, 0x000001a0u, 0x000001a6u, 0x000200feu, 0x000001a7u, 0x00010038u, 0x00050036u, 0x00000036u, 0x00000039u, 0x00000000u, 0x00000037u, 0x00030037u, 0x00000031u, 0x00000038u, 0x000200f8u, 0x0000003au, 0x0004003bu, 0x00000008u, 0x000001aau, 0x00000007u, 0x0004003du, 0x00000030u, 0x000001afu, 0x00000038u, 0x00060041u, 0x000001b0u, 0x000001b1u, 0x000001aeu, 0x00000092u, 0x000001afu, 0x0004003du, 0x00000007u, 0x000001b2u, 0x000001b1u, 0x0003003eu, 0x000001aau, 0x000001b2u, 0x00050041u, 0x00000014u, 0x000001b3u, 0x000001aau, 0x00000047u, 0x0004003du, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x00050041u, 0x00000014u, 0x000001b5u, 0x000001aau, 0x0000004au, 0x0004003du, 0x00000006u, 0x000001b6u, 0x000001b5u, 0x00050041u, 0x00000014u, 0x000001b8u, 0x000001aau, 0x000001b7u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x000001b8u, 0x00050041u, 0x00000014u, 0x000001bbu, 0x000001aau, 0x000001bau, 0x0004003du, 0x00000006u, 0x000001bcu, 0x000001bbu, 0x00070050u, 0x00000036u, 0x000001bdu, 0x000001b4u, 0x000001b6u, 0x000001b9u, 0x000001bcu, 0x000200feu, 0x000001bdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000844u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001ccu, 0x000001d7u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000020u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000185u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000185u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000185u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000185u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000185u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000185u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000185u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000185u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000185u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000185u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000185u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000186u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000187u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000187u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000187u, 0x00000002u, 0x00040047u, 0x00000189u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000189u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001aau, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001abu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001abu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001abu, 0x00000002u, 0x00040047u, 0x000001adu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001adu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001bfu, 0x00000006u, 0x00000010u, 0x00050048u, 0x000001c0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001c0u, 0x00000002u, 0x00040047u, 0x000001c2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001c2u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000001ccu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x000001d7u, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000001ebu, 0x00000001u, 0x00000004u, 0x00040047u, 0x000001ecu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001f5u, 0x00000001u, 0x00000002u, 0x00050048u, 0x000001ffu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000001ffu, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x000001ffu, 0x00000002u, 0x00040047u, 0x0000023bu, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002b4u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002b5u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002b5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b5u, 0x00000002u, 0x00040047u, 0x000002b7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002b7u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002b9u, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002c4u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002c5u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002c5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002c5u, 0x00000002u, 0x00040047u, 0x000002c7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002c7u, 0x00000021u, 0x00000004u, 0x00040047u, 0x000002e4u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002e5u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002e5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002e5u, 0x00000002u, 0x00040047u, 0x000002e7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002e7u, 0x00000021u, 0x00000005u, 0x00040047u, 0x0000030eu, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000030fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000030fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000030fu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000310u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000311u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000311u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000311u, 0x00000002u, 0x00040047u, 0x00000313u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000313u, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000031du, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000031eu, 0x00000000u, 0x00000019u, 0x00050048u, 0x0000031eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000031eu, 0x00000002u, 0x00040047u, 0x00000320u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000320u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000322u, 0x00000001u, 0x00000005u, 0x00040047u, 0x00000336u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x00040015u, 0x0000001cu, 0x00000010u, 0x00000001u, 0x00040015u, 0x0000001du, 0x00000008u, 0x00000000u, 0x000d001eu, 0x0000001eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00020014u, 0x00000020u, 0x00040020u, 0x00000021u, 0x00000007u, 0x00000020u, 0x00040017u, 0x00000022u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000023u, 0x00000022u, 0x0000001fu, 0x00000008u, 0x00000021u, 0x00000014u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000022u, 0x00070021u, 0x0000002bu, 0x00000020u, 0x0000001fu, 0x0000002au, 0x0000002au, 0x00000014u, 0x00040015u, 0x00000032u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000033u, 0x00000007u, 0x00000032u, 0x00040021u, 0x00000034u, 0x0000001eu, 0x00000033u, 0x0006001eu, 0x00000038u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000039u, 0x00000038u, 0x00000033u, 0x00040021u, 0x0000003du, 0x00000032u, 0x00000033u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x0000000fu, 0x0004002bu, 0x00000032u, 0x0000004du, 0x00000000u, 0x0004002bu, 0x00000032u, 0x00000050u, 0x00000001u, 0x0004001eu, 0x00000068u, 0x00000007u, 0x00000007u, 0x00040017u, 0x0000006du, 0x00000032u, 0x00000004u, 0x00040020u, 0x00000072u, 0x00000007u, 0x0000006du, 0x0004001eu, 0x00000074u, 0x0000006du, 0x0000006du, 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000003u, 0x00040020u, 0x00000083u, 0x00000007u, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x00000087u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x0000008au, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000099u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x0000009bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000adu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000afu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000c1u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000c3u, 0x00000002u, 0x00040017u, 0x000000d9u, 0x00000020u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000e8u, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000e9u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x0007002cu, 0x00000007u, 0x000000ebu, 0x0000009bu, 0x0000009bu, 0x0000009bu, 0x0000009bu, 0x0004002bu, 0x00000006u, 0x000000efu, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000f0u, 0x000000efu, 0x000000efu, 0x000000efu, 0x000000efu, 0x0004002bu, 0x00000006u, 0x000000f2u, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000f3u, 0x000000f2u, 0x000000f2u, 0x000000f2u, 0x000000f2u, 0x0004002bu, 0x00000006u, 0x00000119u, 0x000007ffu, 0x0005002cu, 0x00000022u, 0x00000128u, 0x0000009bu, 0x000000e8u, 0x0004002bu, 0x00000006u, 0x0000013eu, 0x00000008u, 0x0003002au, 0x00000020u, 0x0000014au, 0x0004002bu, 0x00000006u, 0x0000014du, 0x00000009u, 0x00040020u, 0x0000014eu, 0x00000007u, 0x0000001du, 0x0005002cu, 0x00000022u, 0x0000015du, 0x000000f2u, 0x0000009bu, 0x000d001eu, 0x00000185u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x0003001du, 0x00000186u, 0x00000185u, 0x0003001eu, 0x00000187u, 0x00000186u, 0x00040020u, 0x00000188u, 0x0000000cu, 0x00000187u, 0x0004003bu, 0x00000188u, 0x00000189u, 0x0000000cu, 0x00040020u, 0x0000018bu, 0x0000000cu, 0x00000185u, 0x0004002bu, 0x00000006u, 0x000001a4u, 0x0000000au, 0x0003001du, 0x000001aau, 0x00000007u, 0x0003001eu, 0x000001abu, 0x000001aau, 0x00040020u, 0x000001acu, 0x0000000cu, 0x000001abu, 0x0004003bu, 0x000001acu, 0x000001adu, 0x0000000cu, 0x00040020u, 0x000001afu, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000032u, 0x000001b6u, 0x00000002u, 0x0004002bu, 0x00000032u, 0x000001b9u, 0x00000003u, 0x0003001du, 0x000001bfu, 0x0000006du, 0x0003001eu, 0x000001c0u, 0x000001bfu, 0x00040020u, 0x000001c1u, 0x0000000cu, 0x000001c0u, 0x0004003bu, 0x000001c1u, 0x000001c2u, 0x0000000cu, 0x00040020u, 0x000001c4u, 0x0000000cu, 0x00000032u, 0x00040017u, 0x000001cau, 0x00000032u, 0x00000003u, 0x00040020u, 0x000001cbu, 0x00000001u, 0x000001cau, 0x0004003bu, 0x000001cbu, 0x000001ccu, 0x00000001u, 0x00040020u, 0x000001cdu, 0x00000001u, 0x00000032u, 0x00040017u, 0x000001d2u, 0x00000032u, 0x00000002u, 0x0004003bu, 0x000001cdu, 0x000001d7u, 0x00000001u, 0x0005002cu, 0x00000022u, 0x000001e2u, 0x0000013eu, 0x0000008au, 0x00040032u, 0x00000006u, 0x000001ebu, 0x00000400u, 0x00040032u, 0x00000006u, 0x000001ecu, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001edu, 0x00000087u, 0x000001ebu, 0x000001ecu, 0x00060034u, 0x00000006u, 0x000001f4u, 0x00000084u, 0x000001ecu, 0x0000013eu, 0x00040032u, 0x00000006u, 0x000001f5u, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001f6u, 0x00000084u, 0x000001f5u, 0x0000008au, 0x00050033u, 0x00000022u, 0x000001f7u, 0x000001f4u, 0x000001f6u, 0x00060034u, 0x00000006u, 0x000001fbu, 0x00000084u, 0x000001ecu, 0x0000013eu, 0x00060034u, 0x00000006u, 0x000001fcu, 0x00000084u, 0x000001f5u, 0x0000008au, 0x00050033u, 0x00000022u, 0x000001fdu, 0x000001fbu, 0x000001fcu, 0x0004001eu, 0x000001ffu, 0x000001d2u, 0x00000006u, 0x00040020u, 0x00000200u, 0x00000009u, 0x000001ffu, 0x0004003bu, 0x00000200u, 0x00000201u, 0x00000009u, 0x00040020u, 0x00000202u, 0x00000009u, 0x000001d2u, 0x00050033u, 0x00000022u, 0x0000020bu, 0x000001ecu, 0x000001f5u, 0x00050033u, 0x00000022u, 0x0000020fu, 0x000001ecu, 0x000001f5u, 0x00040020u, 0x00000218u, 0x00000009u, 0x00000006u, 0x00040020u, 0x0000021fu, 0x00000004u, 0x00000032u, 0x0004003bu, 0x0000021fu, 0x00000220u, 0x00000004u, 0x0004002bu, 0x00000032u, 0x00000221u, 0x00000108u, 0x0004002bu, 0x00000006u, 0x00000224u, 0x00000020u, 0x00040020u, 0x00000234u, 0x00000007u, 0x00000038u, 0x00040032u, 0x00000006u, 0x0000023bu, 0x00000001u, 0x0003001du, 0x000002b4u, 0x00000032u, 0x0003001eu, 0x000002b5u, 0x000002b4u, 0x00040020u, 0x000002b6u, 0x0000000cu, 0x000002b5u, 0x0004003bu, 0x000002b6u, 0x000002b7u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002b9u, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002bau, 0x00000087u, 0x000002b9u, 0x00000224u, 0x0003001du, 0x000002c4u, 0x00000032u, 0x0003001eu, 0x000002c5u, 0x000002c4u, 0x00040020u, 0x000002c6u, 0x0000000cu, 0x000002c5u, 0x0004003bu, 0x000002c6u, 0x000002c7u, 0x0000000cu, 0x0003001du, 0x000002e4u, 0x00000032u, 0x0003001eu, 0x000002e5u, 0x000002e4u, 0x00040020u, 0x000002e6u, 0x0000000cu, 0x000002e5u, 0x0004003bu, 0x000002e6u, 0x000002e7u, 0x0000000cu, 0x00040017u, 0x0000030cu, 0x0000001du, 0x00000004u, 0x0004002bu, 0x00000032u, 0x0000030du, 0x00000008u, 0x0004001cu, 0x0000030eu, 0x0000001du, 0x0000030du, 0x0005001eu, 0x0000030fu, 0x0000030cu, 0x0000030cu, 0x0000030eu, 0x0003001du, 0x00000310u, 0x0000030fu, 0x0003001eu, 0x00000311u, 0x00000310u, 0x00040020u, 0x00000312u, 0x0000000cu, 0x00000311u, 0x0004003bu, 0x00000312u, 0x00000313u, 0x0000000cu, 0x00040020u, 0x00000315u, 0x0000000cu, 0x0000001du, 0x0003001du, 0x0000031du, 0x0000006du, 0x0003001eu, 0x0000031eu, 0x0000031du, 0x00040020u, 0x0000031fu, 0x0000000cu, 0x0000031eu, 0x0004003bu, 0x0000031fu, 0x00000320u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x00000322u, 0x00008000u, 0x00060034u, 0x00000032u, 0x00000323u, 0x00000080u, 0x00000322u, 0x0000004du, 0x00040020u, 0x00000331u, 0x0000000cu, 0x0000006du, 0x0004002bu, 0x00000032u, 0x00000335u, 0x00000020u, 0x0006002cu, 0x000001cau, 0x00000336u, 0x00000335u, 0x00000050u, 0x00000050u, 0x0004002bu, 0x00000006u, 0x00000337u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x00000338u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000339u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x0000033au, 0x00000100u, 0x0004002bu, 0x00000006u, 0x0000033bu, 0x00000200u, 0x0004002bu, 0x00000006u, 0x0000033cu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x0000033du, 0x00000800u, 0x0004002bu, 0x00000006u, 0x0000033eu, 0x00001000u, 0x0004002bu, 0x00000006u, 0x0000033fu, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00000340u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00000341u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00000342u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00000343u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00000344u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00000345u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x00000346u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x00000347u, 0x00200000u, 0x0004002bu, 0x00000006u, 0x00000348u, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00000349u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x0000034au, 0x01000000u, 0x0004002bu, 0x00000006u, 0x0000034bu, 0x0000001au, 0x0004002bu, 0x00000006u, 0x0000034cu, 0x10000000u, 0x0004002bu, 0x00000006u, 0x0000034du, 0x20000000u, 0x0004002bu, 0x00000006u, 0x0000034eu, 0x40000000u, 0x00030029u, 0x00000020u, 0x00000354u, 0x0003002eu, 0x0000001cu, 0x0000067du, 0x0003002eu, 0x0000001du, 0x0000067eu, 0x0005002cu, 0x00000022u, 0x00000835u, 0x000000afu, 0x000000afu, 0x0005002cu, 0x00000022u, 0x00000836u, 0x000000c3u, 0x000000c3u, 0x0007002cu, 0x00000007u, 0x00000837u, 0x00000042u, 0x00000042u, 0x00000042u, 0x00000042u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000014eu, 0x0000079fu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000079eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000079bu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000079au, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000799u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000798u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000797u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000796u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000077eu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000077du, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000077cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000077bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000077au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000779u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000777u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000775u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000774u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000076fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000076eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000076du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000076cu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000756u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000755u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000754u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000753u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000752u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000751u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000750u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074du, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000735u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000734u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000733u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000732u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000731u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000730u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000072fu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000072eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000726u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000725u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000724u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000723u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000719u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000718u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000717u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000716u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006feu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006fdu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006fcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006fau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f9u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006f8u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006f7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f4u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006e7u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006e5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e2u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006e1u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006e0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006dfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006deu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ddu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d2u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006d1u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006d0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ceu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c0u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006a8u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006a7u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006a6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a3u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006a2u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069eu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000691u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000690u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000068fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068cu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000068bu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000068au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000688u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000687u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067au, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000679u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000678u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000677u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000676u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000675u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000671u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000665u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000666u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000659u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065au, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000064du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000064eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000649u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000645u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000062cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000062du, 0x00000007u, 0x0004003bu, 0x00000072u, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000062fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000613u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000614u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x00000615u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000616u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005fau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005fbu, 0x00000007u, 0x0004003bu, 0x00000072u, 0x000005fcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005fdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000564u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000565u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000566u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000567u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000568u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000569u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000056au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000056bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000056cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000056du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000056eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000056fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000570u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000571u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000572u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000573u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000574u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000575u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000576u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000577u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000578u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000579u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000057eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000057fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000580u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000581u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000582u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000583u, 0x00000007u, 0x0005003bu, 0x00000021u, 0x0000050du, 0x00000007u, 0x0000014au, 0x0004003bu, 0x00000021u, 0x0000050eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000050fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000510u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000511u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000512u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000513u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000516u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000517u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000518u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004e3u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004d8u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004cbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004ccu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004c0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004bbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004b7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000049eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000049fu, 0x00000007u, 0x0004003bu, 0x00000072u, 0x000004a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000485u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000486u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x00000487u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000488u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000046cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000046du, 0x00000007u, 0x0004003bu, 0x00000072u, 0x0000046eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000046fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003d7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003d8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003d9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003dbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003dcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003ddu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003deu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003dfu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003e8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003e9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003eau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003ebu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003ecu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003edu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003eeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003efu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003f0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f1u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000003f2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003f4u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000003f5u, 0x00000007u, 0x0005003bu, 0x00000021u, 0x0000037fu, 0x00000007u, 0x0000014au, 0x0004003bu, 0x00000021u, 0x00000380u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000381u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000382u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000383u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000384u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000385u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000387u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000388u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000389u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000038au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000355u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001c9u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001dau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001ddu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001e0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001e8u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001f2u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001f9u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000209u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000020du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000217u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000222u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000228u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000236u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000239u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000248u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000259u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000025eu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000260u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000262u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000026au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000026cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000274u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000027cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000283u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000286u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000292u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002a3u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002a8u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002aau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002acu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002d4u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002d8u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002eeu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002f7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002ffu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000030bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000319u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000031au, 0x00000007u, 0x00050041u, 0x000001cdu, 0x000001ceu, 0x000001ccu, 0x0000004du, 0x0004003du, 0x00000032u, 0x000001cfu, 0x000001ceu, 0x0004007cu, 0x00000006u, 0x000001d0u, 0x000001cfu, 0x0003003eu, 0x000001c9u, 0x000001d0u, 0x0004003du, 0x000001cau, 0x000001d3u, 0x000001ccu, 0x0007004fu, 0x000001d2u, 0x000001d4u, 0x000001d3u, 0x000001d3u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000022u, 0x000001d5u, 0x000001d4u, 0x0003003eu, 0x000001d1u, 0x000001d5u, 0x0004003du, 0x00000032u, 0x000001d8u, 0x000001d7u, 0x0004007cu, 0x00000006u, 0x000001d9u, 0x000001d8u, 0x0003003eu, 0x000001d6u, 0x000001d9u, 0x000500c7u, 0x00000006u, 0x000001dcu, 0x000001d9u, 0x000000c1u, 0x0003003eu, 0x000001dau, 0x000001dcu, 0x000500c3u, 0x00000006u, 0x000001dfu, 0x000001d9u, 0x00000082u, 0x0003003eu, 0x000001ddu, 0x000001dfu, 0x00050084u, 0x00000022u, 0x000001e3u, 0x000001d5u, 0x000001e2u, 0x00050050u, 0x00000022u, 0x000001e6u, 0x000001dcu, 0x000001dfu, 0x00050080u, 0x00000022u, 0x000001e7u, 0x000001e3u, 0x000001e6u, 0x0003003eu, 0x000001e0u, 0x000001e7u, 0x00050041u, 0x00000014u, 0x000001e9u, 0x000001e0u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000001eau, 0x000001e9u, 0x00050084u, 0x00000006u, 0x000001eeu, 0x000001eau, 0x000001edu, 0x00050041u, 0x00000014u, 0x000001efu, 0x000001e0u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000001f0u, 0x000001efu, 0x00050080u, 0x00000006u, 0x000001f1u, 0x000001eeu, 0x000001f0u, 0x0003003eu, 0x000001e8u, 0x000001f1u, 0x00050084u, 0x00000022u, 0x000001f8u, 0x000001d5u, 0x000001f7u, 0x0003003eu, 0x000001f2u, 0x000001f8u, 0x00050080u, 0x00000022u, 0x000001feu, 0x000001f8u, 0x000001fdu, 0x00050041u, 0x00000202u, 0x00000203u, 0x00000201u, 0x0000009bu, 0x0004003du, 0x000001d2u, 0x00000204u, 0x00000203u, 0x0004007cu, 0x00000022u, 0x00000205u, 0x00000204u, 0x0007000cu, 0x00000022u, 0x00000206u, 0x00000001u, 0x00000027u, 0x000001feu, 0x00000205u, 0x00050082u, 0x00000022u, 0x00000208u, 0x00000206u, 0x00000835u, 0x0003003eu, 0x000001f9u, 0x00000208u, 0x0004003du, 0x00000022u, 0x0000020au, 0x000001e0u, 0x00050084u, 0x00000022u, 0x0000020cu, 0x0000020au, 0x0000020bu, 0x0003003eu, 0x00000209u, 0x0000020cu, 0x00050080u, 0x00000022u, 0x00000210u, 0x0000020cu, 0x0000020fu, 0x0007000cu, 0x00000022u, 0x00000214u, 0x00000001u, 0x00000027u, 0x00000210u, 0x00000205u, 0x00050082u, 0x00000022u, 0x00000216u, 0x00000214u, 0x00000835u, 0x0003003eu, 0x0000020du, 0x00000216u, 0x00050041u, 0x00000218u, 0x00000219u, 0x00000201u, 0x000000afu, 0x0004003du, 0x00000006u, 0x0000021au, 0x00000219u, 0x0003003eu, 0x00000217u, 0x0000021au, 0x000500aau, 0x00000020u, 0x0000021cu, 0x000001d9u, 0x0000009bu, 0x000300f7u, 0x0000021eu, 0x00000000u, 0x000400fau, 0x0000021cu, 0x0000021du, 0x0000021eu, 0x000200f8u, 0x0000021du, 0x0003003eu, 0x00000220u, 0x0000004du, 0x000200f9u, 0x0000021eu, 0x000200f8u, 0x0000021eu, 0x000400e0u, 0x000001b6u, 0x000001b6u, 0x00000221u, 0x0003003eu, 0x00000222u, 0x0000014au, 0x000500b1u, 0x00000020u, 0x00000225u, 0x000001d9u, 0x00000224u, 0x000300f7u, 0x00000227u, 0x00000000u, 0x000400fau, 0x00000225u, 0x00000226u, 0x00000227u, 0x000200f8u, 0x00000226u, 0x00050084u, 0x00000006u, 0x0000022au, 0x000001d0u, 0x00000224u, 0x00050080u, 0x00000006u, 0x0000022cu, 0x0000022au, 0x000001d9u, 0x0004007cu, 0x00000032u, 0x0000022du, 0x0000022cu, 0x0003003eu, 0x00000228u, 0x0000022du, 0x0004007cu, 0x00000032u, 0x00000230u, 0x0000021au, 0x000500b0u, 0x00000020u, 0x00000231u, 0x0000022du, 0x00000230u, 0x000300f7u, 0x00000233u, 0x00000000u, 0x000400fau, 0x00000231u, 0x00000232u, 0x00000233u, 0x000200f8u, 0x00000232u, 0x0003003eu, 0x00000236u, 0x0000022du, 0x00060041u, 0x000001afu, 0x00000358u, 0x000001adu, 0x0000009bu, 0x0000022du, 0x0004003du, 0x00000007u, 0x00000359u, 0x00000358u, 0x0003003eu, 0x00000355u, 0x00000359u, 0x00050041u, 0x00000014u, 0x0000035au, 0x00000355u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000035bu, 0x0000035au, 0x00050041u, 0x00000014u, 0x0000035cu, 0x00000355u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000035du, 0x0000035cu, 0x00050041u, 0x00000014u, 0x0000035eu, 0x00000355u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x0000035fu, 0x0000035eu, 0x00050041u, 0x00000014u, 0x00000360u, 0x00000355u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x00000361u, 0x00000360u, 0x00070050u, 0x00000038u, 0x00000362u, 0x0000035bu, 0x0000035du, 0x0000035fu, 0x00000361u, 0x0003003eu, 0x00000716u, 0x0000035bu, 0x0003003eu, 0x00000717u, 0x0000035du, 0x0003003eu, 0x00000718u, 0x0000035fu, 0x0003003eu, 0x00000719u, 0x00000361u, 0x0003003eu, 0x00000723u, 0x0000035bu, 0x0003003eu, 0x00000724u, 0x0000035du, 0x0003003eu, 0x00000725u, 0x0000035fu, 0x0003003eu, 0x00000726u, 0x00000361u, 0x00050050u, 0x00000022u, 0x00000240u, 0x0000035bu, 0x0000035du, 0x000500c3u, 0x00000022u, 0x00000242u, 0x00000240u, 0x00000836u, 0x00050050u, 0x00000022u, 0x00000243u, 0x0000023bu, 0x0000023bu, 0x00050084u, 0x00000022u, 0x00000244u, 0x00000243u, 0x00000242u, 0x00050082u, 0x00000022u, 0x00000246u, 0x00000244u, 0x00000835u, 0x0007000cu, 0x00000022u, 0x00000247u, 0x00000001u, 0x0000002au, 0x000001f8u, 0x00000246u, 0x0003003eu, 0x00000239u, 0x00000247u, 0x00050080u, 0x00000006u, 0x0000024cu, 0x0000035fu, 0x00000082u, 0x00050080u, 0x00000006u, 0x0000024fu, 0x00000361u, 0x00000082u, 0x00050050u, 0x00000022u, 0x00000250u, 0x0000024cu, 0x0000024fu, 0x000500c3u, 0x00000022u, 0x00000252u, 0x00000250u, 0x00000836u, 0x00050084u, 0x00000022u, 0x00000254u, 0x00000243u, 0x00000252u, 0x00050082u, 0x00000022u, 0x00000256u, 0x00000254u, 0x00000835u, 0x0007000cu, 0x00000022u, 0x00000257u, 0x00000001u, 0x00000027u, 0x00000208u, 0x00000256u, 0x0003003eu, 0x00000248u, 0x00000257u, 0x0003003eu, 0x00000259u, 0x0000022du, 0x00060041u, 0x0000018bu, 0x00000366u, 0x00000189u, 0x0000009bu, 0x0000022du, 0x0004003du, 0x00000185u, 0x00000367u, 0x00000366u, 0x00050051u, 0x00000006u, 0x00000368u, 0x00000367u, 0x00000000u, 0x0003003eu, 0x000006ddu, 0x00000368u, 0x00050051u, 0x00000006u, 0x0000036au, 0x00000367u, 0x00000001u, 0x0003003eu, 0x000006deu, 0x0000036au, 0x00050051u, 0x00000006u, 0x0000036cu, 0x00000367u, 0x00000002u, 0x0003003eu, 0x000006dfu, 0x0000036cu, 0x00050051u, 0x0000001cu, 0x0000036eu, 0x00000367u, 0x00000003u, 0x0003003eu, 0x000006e0u, 0x0000036eu, 0x00050051u, 0x0000001cu, 0x00000370u, 0x00000367u, 0x00000004u, 0x0003003eu, 0x000006e1u, 0x00000370u, 0x00050051u, 0x00000006u, 0x00000372u, 0x00000367u, 0x00000005u, 0x0003003eu, 0x000006e2u, 0x00000372u, 0x00050051u, 0x00000006u, 0x00000374u, 0x00000367u, 0x00000006u, 0x0003003eu, 0x000006e3u, 0x00000374u, 0x00050051u, 0x00000006u, 0x00000376u, 0x00000367u, 0x00000007u, 0x0003003eu, 0x000006e4u, 0x00000376u, 0x00050051u, 0x0000001cu, 0x00000378u, 0x00000367u, 0x00000008u, 0x0003003eu, 0x000006e5u, 0x00000378u, 0x00050051u, 0x0000001du, 0x0000037au, 0x00000367u, 0x00000009u, 0x0003003eu, 0x000006e6u, 0x0000037au, 0x00050051u, 0x0000001du, 0x0000037cu, 0x00000367u, 0x0000000au, 0x0003003eu, 0x000006e7u, 0x0000037cu, 0x000e0050u, 0x0000001eu, 0x000006f3u, 0x00000368u, 0x0000036au, 0x0000036cu, 0x0000036eu, 0x00000370u, 0x00000372u, 0x00000374u, 0x00000376u, 0x00000378u, 0x0000037au, 0x0000037cu, 0x0003003eu, 0x000006f4u, 0x00000368u, 0x0003003eu, 0x000006f5u, 0x0000036au, 0x0003003eu, 0x000006f6u, 0x0000036cu, 0x0003003eu, 0x000006f7u, 0x0000036eu, 0x0003003eu, 0x000006f8u, 0x00000370u, 0x0003003eu, 0x000006f9u, 0x00000372u, 0x0003003eu, 0x000006fau, 0x00000374u, 0x0003003eu, 0x000006fbu, 0x00000376u, 0x0003003eu, 0x000006fcu, 0x00000378u, 0x0003003eu, 0x000006fdu, 0x0000037au, 0x0003003eu, 0x000006feu, 0x0000037cu, 0x0003003eu, 0x0000072bu, 0x00000368u, 0x0003003eu, 0x0000072cu, 0x0000036au, 0x0003003eu, 0x0000072du, 0x0000036cu, 0x0003003eu, 0x0000072eu, 0x0000036eu, 0x0003003eu, 0x0000072fu, 0x00000370u, 0x0003003eu, 0x00000730u, 0x00000372u, 0x0003003eu, 0x00000731u, 0x00000374u, 0x0003003eu, 0x00000732u, 0x00000376u, 0x0003003eu, 0x00000733u, 0x00000378u, 0x0003003eu, 0x00000734u, 0x0000037au, 0x0003003eu, 0x00000735u, 0x0000037cu, 0x0003003eu, 0x0000074du, 0x00000368u, 0x0003003eu, 0x0000074eu, 0x0000036au, 0x0003003eu, 0x0000074fu, 0x0000036cu, 0x0003003eu, 0x00000750u, 0x0000036eu, 0x0003003eu, 0x00000751u, 0x00000370u, 0x0003003eu, 0x00000752u, 0x00000372u, 0x0003003eu, 0x00000753u, 0x00000374u, 0x0003003eu, 0x00000754u, 0x00000376u, 0x0003003eu, 0x00000755u, 0x00000378u, 0x0003003eu, 0x00000756u, 0x0000037au, 0x0003003eu, 0x0000025eu, 0x00000247u, 0x0003003eu, 0x00000260u, 0x00000257u, 0x0003003eu, 0x00000262u, 0x0000023bu, 0x0003003eu, 0x0000037fu, 0x0000014au, 0x000300f7u, 0x0000038bu, 0x00000000u, 0x000300fbu, 0x0000004du, 0x0000038cu, 0x000200f8u, 0x0000038cu, 0x00050041u, 0x00000014u, 0x0000038du, 0x0000025eu, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000038eu, 0x0000038du, 0x00050084u, 0x00000006u, 0x0000038fu, 0x0000038eu, 0x0000008au, 0x0003003eu, 0x00000381u, 0x0000038fu, 0x00050041u, 0x00000014u, 0x00000390u, 0x00000260u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000391u, 0x00000390u, 0x00050084u, 0x00000006u, 0x00000392u, 0x00000391u, 0x0000008au, 0x00050080u, 0x00000006u, 0x00000393u, 0x00000392u, 0x00000082u, 0x0003003eu, 0x00000382u, 0x00000393u, 0x00040072u, 0x00000006u, 0x00000398u, 0x0000036eu, 0x00050084u, 0x00000006u, 0x00000399u, 0x0000023bu, 0x00000398u, 0x0007000cu, 0x00000006u, 0x0000039au, 0x00000001u, 0x0000002au, 0x0000038fu, 0x00000399u, 0x0003003eu, 0x00000381u, 0x0000039au, 0x00040072u, 0x00000006u, 0x0000039fu, 0x00000378u, 0x00050084u, 0x00000006u, 0x000003a0u, 0x0000023bu, 0x0000039fu, 0x00050082u, 0x00000006u, 0x000003a1u, 0x000003a0u, 0x000000afu, 0x0007000cu, 0x00000006u, 0x000003a2u, 0x00000001u, 0x00000027u, 0x00000393u, 0x000003a1u, 0x0003003eu, 0x00000382u, 0x000003a2u, 0x000500b1u, 0x00000020u, 0x000003a5u, 0x000003a2u, 0x0000039au, 0x000300f7u, 0x000003a6u, 0x00000000u, 0x000400fau, 0x000003a5u, 0x000003a7u, 0x000003a6u, 0x000200f8u, 0x000003a7u, 0x0003003eu, 0x0000037fu, 0x00000354u, 0x0003003eu, 0x00000380u, 0x0000014au, 0x000200f9u, 0x0000038bu, 0x000200f8u, 0x000003a6u, 0x00040071u, 0x00000032u, 0x000003aau, 0x0000037au, 0x0004007cu, 0x00000006u, 0x000003abu, 0x000003aau, 0x000500c7u, 0x00000006u, 0x000003acu, 0x000003abu, 0x000000afu, 0x000500abu, 0x00000020u, 0x000003adu, 0x000003acu, 0x0000009bu, 0x0003003eu, 0x00000383u, 0x000003adu, 0x00040072u, 0x00000006u, 0x000003b2u, 0x00000370u, 0x00050084u, 0x00000006u, 0x000003b4u, 0x000003b2u, 0x0000023bu, 0x00050050u, 0x00000022u, 0x000003b5u, 0x000003b4u, 0x000003b4u, 0x00050080u, 0x00000022u, 0x000003b6u, 0x000003b5u, 0x0000015du, 0x00050050u, 0x00000022u, 0x000003b8u, 0x0000039au, 0x0000039au, 0x00050050u, 0x00000022u, 0x000003bau, 0x000003a2u, 0x000003a2u, 0x0008000cu, 0x00000022u, 0x000003bbu, 0x00000001u, 0x0000002du, 0x000003b6u, 0x000003b8u, 0x000003bau, 0x00050051u, 0x00000006u, 0x000003bcu, 0x000003bbu, 0x00000000u, 0x00050051u, 0x00000006u, 0x000003bdu, 0x000003bbu, 0x00000001u, 0x00070050u, 0x00000007u, 0x000003beu, 0x0000039au, 0x000003a2u, 0x000003bcu, 0x000003bdu, 0x0003003eu, 0x00000384u, 0x000003beu, 0x000e0050u, 0x0000001eu, 0x0000076bu, 0x00000368u, 0x0000036au, 0x0000036cu, 0x0000036eu, 0x00000370u, 0x00000372u, 0x00000374u, 0x00000376u, 0x00000378u, 0x0000037au, 0x0000067eu, 0x0003003eu, 0x000006cdu, 0x00000368u, 0x0003003eu, 0x000006ceu, 0x0000036au, 0x0003003eu, 0x000006cfu, 0x0000036cu, 0x0003003eu, 0x000006d0u, 0x0000036eu, 0x0003003eu, 0x000006d1u, 0x00000370u, 0x0003003eu, 0x000006d2u, 0x00000372u, 0x0003003eu, 0x000006d3u, 0x00000374u, 0x0003003eu, 0x000006d4u, 0x00000376u, 0x0003003eu, 0x00000387u, 0x000003beu, 0x0003003eu, 0x00000388u, 0x000003adu, 0x0003003eu, 0x00000389u, 0x0000023bu, 0x000500c7u, 0x00000006u, 0x000003f9u, 0x00000398u, 0x00000087u, 0x0003003eu, 0x000003d6u, 0x000003f9u, 0x0003003eu, 0x000003d7u, 0x000003b2u, 0x00050084u, 0x00000006u, 0x000003ffu, 0x000003f9u, 0x0000023bu, 0x0003003eu, 0x000003d6u, 0x000003ffu, 0x0003003eu, 0x000003d7u, 0x000003b4u, 0x00070050u, 0x00000007u, 0x00000405u, 0x000003ffu, 0x000003ffu, 0x000003ffu, 0x000003ffu, 0x00050082u, 0x00000007u, 0x00000406u, 0x000003beu, 0x00000405u, 0x00050084u, 0x00000006u, 0x0000040au, 0x0000023bu, 0x00000368u, 0x0003003eu, 0x000003dau, 0x00000406u, 0x0003003eu, 0x000003dbu, 0x00000372u, 0x0003003eu, 0x000003dcu, 0x0000040au, 0x00070050u, 0x00000007u, 0x00000472u, 0x00000372u, 0x00000372u, 0x00000372u, 0x00000372u, 0x00050098u, 0x00000068u, 0x00000473u, 0x00000406u, 0x00000472u, 0x00050051u, 0x00000007u, 0x00000474u, 0x00000473u, 0x00000000u, 0x0003003eu, 0x0000046du, 0x00000474u, 0x00050051u, 0x00000007u, 0x00000475u, 0x00000473u, 0x00000001u, 0x0003003eu, 0x0000046cu, 0x00000475u, 0x0004007cu, 0x0000006du, 0x00000477u, 0x00000474u, 0x0004007cu, 0x00000032u, 0x00000479u, 0x0000040au, 0x00070050u, 0x0000006du, 0x0000047au, 0x00000479u, 0x00000479u, 0x00000479u, 0x00000479u, 0x00050095u, 0x00000074u, 0x0000047bu, 0x00000477u, 0x0000047au, 0x00050051u, 0x0000006du, 0x0000047cu, 0x0000047bu, 0x00000001u, 0x0003003eu, 0x0000046eu, 0x0000047cu, 0x00050051u, 0x0000006du, 0x0000047du, 0x0000047bu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000047eu, 0x0000047du, 0x0003003eu, 0x0000046du, 0x0000047eu, 0x0004007cu, 0x00000007u, 0x00000480u, 0x0000047cu, 0x00050080u, 0x00000007u, 0x00000482u, 0x00000475u, 0x00000480u, 0x0003003eu, 0x0000046cu, 0x00000482u, 0x0003003eu, 0x000003ddu, 0x00000482u, 0x0003003eu, 0x0000046fu, 0x0000047eu, 0x0003003eu, 0x000003d9u, 0x00000482u, 0x0003003eu, 0x000003d8u, 0x0000047eu, 0x00050084u, 0x00000006u, 0x00000416u, 0x0000023bu, 0x0000036au, 0x0003003eu, 0x000003e0u, 0x00000406u, 0x0003003eu, 0x000003e1u, 0x00000374u, 0x0003003eu, 0x000003e2u, 0x00000416u, 0x00070050u, 0x00000007u, 0x0000048bu, 0x00000374u, 0x00000374u, 0x00000374u, 0x00000374u, 0x00050098u, 0x00000068u, 0x0000048cu, 0x00000406u, 0x0000048bu, 0x00050051u, 0x00000007u, 0x0000048du, 0x0000048cu, 0x00000000u, 0x0003003eu, 0x00000486u, 0x0000048du, 0x00050051u, 0x00000007u, 0x0000048eu, 0x0000048cu, 0x00000001u, 0x0003003eu, 0x00000485u, 0x0000048eu, 0x0004007cu, 0x0000006du, 0x00000490u, 0x0000048du, 0x0004007cu, 0x00000032u, 0x00000492u, 0x00000416u, 0x00070050u, 0x0000006du, 0x00000493u, 0x00000492u, 0x00000492u, 0x00000492u, 0x00000492u, 0x00050095u, 0x00000074u, 0x00000494u, 0x00000490u, 0x00000493u, 0x00050051u, 0x0000006du, 0x00000495u, 0x00000494u, 0x00000001u, 0x0003003eu, 0x00000487u, 0x00000495u, 0x00050051u, 0x0000006du, 0x00000496u, 0x00000494u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000497u, 0x00000496u, 0x0003003eu, 0x00000486u, 0x00000497u, 0x0004007cu, 0x00000007u, 0x00000499u, 0x00000495u, 0x00050080u, 0x00000007u, 0x0000049bu, 0x0000048eu, 0x00000499u, 0x0003003eu, 0x00000485u, 0x0000049bu, 0x0003003eu, 0x000003e3u, 0x0000049bu, 0x0003003eu, 0x00000488u, 0x00000497u, 0x0003003eu, 0x000003dfu, 0x0000049bu, 0x0003003eu, 0x000003deu, 0x00000497u, 0x00070050u, 0x00000007u, 0x0000041du, 0x000003b4u, 0x000003b4u, 0x000003b4u, 0x000003b4u, 0x00050082u, 0x00000007u, 0x0000041eu, 0x000003beu, 0x0000041du, 0x00050084u, 0x00000006u, 0x00000422u, 0x0000023bu, 0x0000036cu, 0x0003003eu, 0x000003e6u, 0x0000041eu, 0x0003003eu, 0x000003e7u, 0x00000376u, 0x0003003eu, 0x000003e8u, 0x00000422u, 0x00070050u, 0x00000007u, 0x000004a4u, 0x00000376u, 0x00000376u, 0x00000376u, 0x00000376u, 0x00050098u, 0x00000068u, 0x000004a5u, 0x0000041eu, 0x000004a4u, 0x00050051u, 0x00000007u, 0x000004a6u, 0x000004a5u, 0x00000000u, 0x0003003eu, 0x0000049fu, 0x000004a6u, 0x00050051u, 0x00000007u, 0x000004a7u, 0x000004a5u, 0x00000001u, 0x0003003eu, 0x0000049eu, 0x000004a7u, 0x0004007cu, 0x0000006du, 0x000004a9u, 0x000004a6u, 0x0004007cu, 0x00000032u, 0x000004abu, 0x00000422u, 0x00070050u, 0x0000006du, 0x000004acu, 0x000004abu, 0x000004abu, 0x000004abu, 0x000004abu, 0x00050095u, 0x00000074u, 0x000004adu, 0x000004a9u, 0x000004acu, 0x00050051u, 0x0000006du, 0x000004aeu, 0x000004adu, 0x00000001u, 0x0003003eu, 0x000004a0u, 0x000004aeu, 0x00050051u, 0x0000006du, 0x000004afu, 0x000004adu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004b0u, 0x000004afu, 0x0003003eu, 0x0000049fu, 0x000004b0u, 0x0004007cu, 0x00000007u, 0x000004b2u, 0x000004aeu, 0x00050080u, 0x00000007u, 0x000004b4u, 0x000004a7u, 0x000004b2u, 0x0003003eu, 0x0000049eu, 0x000004b4u, 0x0003003eu, 0x000003e9u, 0x000004b4u, 0x0003003eu, 0x000004a1u, 0x000004b0u, 0x0003003eu, 0x000003e5u, 0x000004b4u, 0x0003003eu, 0x000003e4u, 0x000004b0u, 0x00050084u, 0x00000006u, 0x0000042eu, 0x0000023bu, 0x000003b2u, 0x00070050u, 0x00000007u, 0x0000042fu, 0x0000042eu, 0x0000042eu, 0x0000042eu, 0x0000042eu, 0x000500b1u, 0x000000d9u, 0x00000430u, 0x000003beu, 0x0000042fu, 0x000600a9u, 0x00000007u, 0x00000431u, 0x00000430u, 0x00000497u, 0x000004b0u, 0x0003003eu, 0x000003e4u, 0x00000431u, 0x000600a9u, 0x00000007u, 0x0000043cu, 0x00000430u, 0x0000049bu, 0x000004b4u, 0x0003003eu, 0x000003e5u, 0x0000043cu, 0x000500adu, 0x000000d9u, 0x0000043fu, 0x00000482u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x00000440u, 0x0000043fu, 0x000000e9u, 0x0000047eu, 0x0003003eu, 0x000003d8u, 0x00000440u, 0x000500b1u, 0x000000d9u, 0x00000443u, 0x00000482u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x00000444u, 0x00000443u, 0x000000f0u, 0x00000440u, 0x0003003eu, 0x000003d8u, 0x00000444u, 0x000500adu, 0x000000d9u, 0x00000447u, 0x0000043cu, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x00000448u, 0x00000447u, 0x000000e9u, 0x00000431u, 0x0003003eu, 0x000003e4u, 0x00000448u, 0x000500b1u, 0x000000d9u, 0x0000044bu, 0x0000043cu, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x0000044cu, 0x0000044bu, 0x000000f0u, 0x00000448u, 0x0003003eu, 0x000003e4u, 0x0000044cu, 0x0003003eu, 0x000003ebu, 0x00000444u, 0x000500c3u, 0x00000007u, 0x000004bau, 0x00000444u, 0x00000837u, 0x0003003eu, 0x000004b7u, 0x000004bau, 0x0003003eu, 0x000003eau, 0x000004bau, 0x0003003eu, 0x000003edu, 0x0000044cu, 0x000500c3u, 0x00000007u, 0x000004beu, 0x0000044cu, 0x00000837u, 0x0003003eu, 0x000004bbu, 0x000004beu, 0x0003003eu, 0x000003ecu, 0x000004beu, 0x000300f7u, 0x00000452u, 0x00000000u, 0x000400fau, 0x000003adu, 0x00000453u, 0x00000454u, 0x000200f8u, 0x00000453u, 0x0003003eu, 0x000003eeu, 0x000004bau, 0x0003003eu, 0x000003efu, 0x000004beu, 0x000200f9u, 0x00000452u, 0x000200f8u, 0x00000454u, 0x0003003eu, 0x000003eeu, 0x000004beu, 0x0003003eu, 0x000003efu, 0x000004bau, 0x000200f9u, 0x00000452u, 0x000200f8u, 0x00000452u, 0x00070050u, 0x000000d9u, 0x00000838u, 0x000003adu, 0x000003adu, 0x000003adu, 0x000003adu, 0x000600a9u, 0x00000007u, 0x00000839u, 0x00000838u, 0x000004beu, 0x000004bau, 0x000600a9u, 0x00000007u, 0x0000083bu, 0x00000838u, 0x000004bau, 0x000004beu, 0x0006000cu, 0x00000007u, 0x0000045au, 0x00000001u, 0x00000005u, 0x0000083bu, 0x0006000cu, 0x00000007u, 0x0000045cu, 0x00000001u, 0x00000005u, 0x00000839u, 0x0007000cu, 0x00000007u, 0x0000045du, 0x00000001u, 0x0000002au, 0x0000045au, 0x0000045cu, 0x0003003eu, 0x000003f1u, 0x0000045du, 0x0007004fu, 0x00000022u, 0x000004c2u, 0x0000045du, 0x0000045du, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000004c4u, 0x0000045du, 0x0000045du, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000004c5u, 0x00000001u, 0x0000002au, 0x000004c2u, 0x000004c4u, 0x0003003eu, 0x000004bfu, 0x000004c5u, 0x00050041u, 0x00000014u, 0x000004c6u, 0x000004bfu, 0x0000004du, 0x0004003du, 0x00000006u, 0x000004c7u, 0x000004c6u, 0x00050041u, 0x00000014u, 0x000004c8u, 0x000004bfu, 0x00000050u, 0x0004003du, 0x00000006u, 0x000004c9u, 0x000004c8u, 0x0007000cu, 0x00000006u, 0x000004cau, 0x00000001u, 0x0000002au, 0x000004c7u, 0x000004c9u, 0x0003003eu, 0x000004c0u, 0x000004cau, 0x0003003eu, 0x000003f0u, 0x000004cau, 0x00050084u, 0x00000006u, 0x00000461u, 0x00000119u, 0x0000023bu, 0x000500b3u, 0x00000020u, 0x00000462u, 0x000004cau, 0x00000461u, 0x000300f7u, 0x00000463u, 0x00000000u, 0x000400fau, 0x00000462u, 0x00000464u, 0x00000465u, 0x000200f8u, 0x00000464u, 0x0003003eu, 0x000003f3u, 0x0000083bu, 0x0007004fu, 0x00000022u, 0x000004ceu, 0x0000083bu, 0x0000083bu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000004d0u, 0x0000083bu, 0x0000083bu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000004d1u, 0x00000001u, 0x00000027u, 0x000004ceu, 0x000004d0u, 0x0003003eu, 0x000004cbu, 0x000004d1u, 0x00050041u, 0x00000014u, 0x000004d2u, 0x000004cbu, 0x0000004du, 0x0004003du, 0x00000006u, 0x000004d3u, 0x000004d2u, 0x00050041u, 0x00000014u, 0x000004d4u, 0x000004cbu, 0x00000050u, 0x0004003du, 0x00000006u, 0x000004d5u, 0x000004d4u, 0x0007000cu, 0x00000006u, 0x000004d6u, 0x00000001u, 0x00000027u, 0x000004d3u, 0x000004d5u, 0x0003003eu, 0x000004ccu, 0x000004d6u, 0x0003003eu, 0x000003f4u, 0x00000839u, 0x0007004fu, 0x00000022u, 0x000004dau, 0x00000839u, 0x00000839u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000004dcu, 0x00000839u, 0x00000839u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000004ddu, 0x00000001u, 0x0000002au, 0x000004dau, 0x000004dcu, 0x0003003eu, 0x000004d7u, 0x000004ddu, 0x00050041u, 0x00000014u, 0x000004deu, 0x000004d7u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000004dfu, 0x000004deu, 0x00050041u, 0x00000014u, 0x000004e0u, 0x000004d7u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000004e1u, 0x000004e0u, 0x0007000cu, 0x00000006u, 0x000004e2u, 0x00000001u, 0x0000002au, 0x000004dfu, 0x000004e1u, 0x0003003eu, 0x000004d8u, 0x000004e2u, 0x00050050u, 0x00000022u, 0x0000046au, 0x000004d6u, 0x000004e2u, 0x0003003eu, 0x000003f2u, 0x0000046au, 0x000200f9u, 0x00000463u, 0x000200f8u, 0x00000465u, 0x0003003eu, 0x000003f2u, 0x00000128u, 0x000200f9u, 0x00000463u, 0x000200f8u, 0x00000463u, 0x000700f5u, 0x00000022u, 0x000007d4u, 0x0000046au, 0x00000464u, 0x00000128u, 0x00000465u, 0x0003003eu, 0x000003f5u, 0x000007d4u, 0x0003003eu, 0x00000385u, 0x000007d4u, 0x00050041u, 0x00000014u, 0x000003c4u, 0x00000385u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000003c5u, 0x000003c4u, 0x00050041u, 0x00000014u, 0x000003c6u, 0x0000025eu, 0x0000004du, 0x0004003du, 0x00000006u, 0x000003c7u, 0x000003c6u, 0x0007000cu, 0x00000006u, 0x000003c8u, 0x00000001u, 0x0000002au, 0x000003c5u, 0x000003c7u, 0x0003003eu, 0x000003c4u, 0x000003c8u, 0x00050041u, 0x00000014u, 0x000003cau, 0x00000385u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x000003cau, 0x00050041u, 0x00000014u, 0x000003ccu, 0x00000260u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000003cdu, 0x000003ccu, 0x0007000cu, 0x00000006u, 0x000003ceu, 0x00000001u, 0x00000027u, 0x000003cbu, 0x000003cdu, 0x0003003eu, 0x000003cau, 0x000003ceu, 0x0004003du, 0x00000006u, 0x000003d1u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x000003cau, 0x000500b3u, 0x00000020u, 0x000003d4u, 0x000003d1u, 0x000003d3u, 0x0003003eu, 0x0000037fu, 0x00000354u, 0x0003003eu, 0x00000380u, 0x000003d4u, 0x000200f9u, 0x0000038bu, 0x000200f8u, 0x0000038bu, 0x000700f5u, 0x00000020u, 0x000007d5u, 0x0000014au, 0x000003a7u, 0x000003d4u, 0x00000463u, 0x0003003eu, 0x0000038au, 0x000007d5u, 0x0003003eu, 0x00000222u, 0x000007d5u, 0x000200f9u, 0x00000233u, 0x000200f8u, 0x00000233u, 0x000700f5u, 0x00000020u, 0x000007d7u, 0x0000014au, 0x00000226u, 0x000007d5u, 0x0000038bu, 0x000200f9u, 0x00000227u, 0x000200f8u, 0x00000227u, 0x000700f5u, 0x00000020u, 0x000007d6u, 0x0000014au, 0x0000021eu, 0x000007d7u, 0x00000233u, 0x000300f7u, 0x00000266u, 0x00000000u, 0x000400fau, 0x000007d6u, 0x00000265u, 0x00000266u, 0x000200f8u, 0x00000265u, 0x000500c4u, 0x00000032u, 0x00000268u, 0x00000050u, 0x000001d9u, 0x000700f1u, 0x00000032u, 0x00000269u, 0x00000220u, 0x00000050u, 0x0000004du, 0x00000268u, 0x000200f9u, 0x00000266u, 0x000200f8u, 0x00000266u, 0x000400e0u, 0x000001b6u, 0x000001b6u, 0x00000221u, 0x0004003du, 0x00000032u, 0x0000026bu, 0x00000220u, 0x0003003eu, 0x0000026au, 0x0000026bu, 0x0003003eu, 0x0000026cu, 0x0000004du, 0x000200f9u, 0x0000026du, 0x000200f8u, 0x0000026du, 0x000700f5u, 0x00000032u, 0x000007edu, 0x0000004du, 0x00000266u, 0x00000824u, 0x00000270u, 0x000700f5u, 0x00000032u, 0x000007ddu, 0x0000026bu, 0x00000266u, 0x0000027bu, 0x00000270u, 0x000500abu, 0x00000020u, 0x00000273u, 0x000007ddu, 0x0000004du, 0x000400f6u, 0x0000026fu, 0x00000270u, 0x00000000u, 0x000400fau, 0x00000273u, 0x0000026eu, 0x0000026fu, 0x000200f8u, 0x0000026eu, 0x0006000cu, 0x00000006u, 0x00000276u, 0x00000001u, 0x00000049u, 0x000007ddu, 0x0003003eu, 0x00000274u, 0x00000276u, 0x000500c4u, 0x00000032u, 0x00000278u, 0x00000050u, 0x00000276u, 0x000400c8u, 0x00000032u, 0x00000279u, 0x00000278u, 0x000500c7u, 0x00000032u, 0x0000027bu, 0x000007ddu, 0x00000279u, 0x0003003eu, 0x0000026au, 0x0000027bu, 0x00050084u, 0x00000006u, 0x0000027eu, 0x000001d0u, 0x00000224u, 0x00050080u, 0x00000006u, 0x00000280u, 0x0000027eu, 0x00000276u, 0x0004007cu, 0x00000032u, 0x00000281u, 0x00000280u, 0x0003003eu, 0x0000027cu, 0x00000281u, 0x0003003eu, 0x00000283u, 0x00000281u, 0x00060041u, 0x000001afu, 0x000004e6u, 0x000001adu, 0x0000009bu, 0x00000281u, 0x0004003du, 0x00000007u, 0x000004e7u, 0x000004e6u, 0x0003003eu, 0x000004e3u, 0x000004e7u, 0x00050041u, 0x00000014u, 0x000004e8u, 0x000004e3u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000004e9u, 0x000004e8u, 0x00050041u, 0x00000014u, 0x000004eau, 0x000004e3u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000004ebu, 0x000004eau, 0x00050041u, 0x00000014u, 0x000004ecu, 0x000004e3u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x000004edu, 0x000004ecu, 0x00050041u, 0x00000014u, 0x000004eeu, 0x000004e3u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x000004efu, 0x000004eeu, 0x00070050u, 0x00000038u, 0x000004f0u, 0x000004e9u, 0x000004ebu, 0x000004edu, 0x000004efu, 0x0003003eu, 0x000006c0u, 0x000004e9u, 0x0003003eu, 0x000006c1u, 0x000004ebu, 0x0003003eu, 0x000006c2u, 0x000004edu, 0x0003003eu, 0x000006c3u, 0x000004efu, 0x0003003eu, 0x0000076cu, 0x000004e9u, 0x0003003eu, 0x0000076du, 0x000004ebu, 0x0003003eu, 0x0000076eu, 0x000004edu, 0x0003003eu, 0x0000076fu, 0x000004efu, 0x00050050u, 0x00000022u, 0x0000028cu, 0x000004e9u, 0x000004ebu, 0x000500c3u, 0x00000022u, 0x0000028eu, 0x0000028cu, 0x00000836u, 0x00050050u, 0x00000022u, 0x0000028fu, 0x0000023bu, 0x0000023bu, 0x00050084u, 0x00000022u, 0x00000290u, 0x0000028fu, 0x0000028eu, 0x0007000cu, 0x00000022u, 0x00000291u, 0x00000001u, 0x0000002au, 0x0000020cu, 0x00000290u, 0x0003003eu, 0x00000286u, 0x00000291u, 0x00050080u, 0x00000006u, 0x00000296u, 0x000004edu, 0x00000082u, 0x00050080u, 0x00000006u, 0x00000299u, 0x000004efu, 0x00000082u, 0x00050050u, 0x00000022u, 0x0000029au, 0x00000296u, 0x00000299u, 0x000500c3u, 0x00000022u, 0x0000029cu, 0x0000029au, 0x00000836u, 0x00050084u, 0x00000022u, 0x0000029eu, 0x0000028fu, 0x0000029cu, 0x00050082u, 0x00000022u, 0x000002a0u, 0x0000029eu, 0x00000835u, 0x0007000cu, 0x00000022u, 0x000002a1u, 0x00000001u, 0x00000027u, 0x00000216u, 0x000002a0u, 0x0003003eu, 0x00000292u, 0x000002a1u, 0x0003003eu, 0x000002a3u, 0x00000281u, 0x00060041u, 0x0000018bu, 0x000004f4u, 0x00000189u, 0x0000009bu, 0x00000281u, 0x0004003du, 0x00000185u, 0x000004f5u, 0x000004f4u, 0x00050051u, 0x00000006u, 0x000004f6u, 0x000004f5u, 0x00000000u, 0x0003003eu, 0x00000687u, 0x000004f6u, 0x00050051u, 0x00000006u, 0x000004f8u, 0x000004f5u, 0x00000001u, 0x0003003eu, 0x00000688u, 0x000004f8u, 0x00050051u, 0x00000006u, 0x000004fau, 0x000004f5u, 0x00000002u, 0x0003003eu, 0x00000689u, 0x000004fau, 0x00050051u, 0x0000001cu, 0x000004fcu, 0x000004f5u, 0x00000003u, 0x0003003eu, 0x0000068au, 0x000004fcu, 0x00050051u, 0x0000001cu, 0x000004feu, 0x000004f5u, 0x00000004u, 0x0003003eu, 0x0000068bu, 0x000004feu, 0x00050051u, 0x00000006u, 0x00000500u, 0x000004f5u, 0x00000005u, 0x0003003eu, 0x0000068cu, 0x00000500u, 0x00050051u, 0x00000006u, 0x00000502u, 0x000004f5u, 0x00000006u, 0x0003003eu, 0x0000068du, 0x00000502u, 0x00050051u, 0x00000006u, 0x00000504u, 0x000004f5u, 0x00000007u, 0x0003003eu, 0x0000068eu, 0x00000504u, 0x00050051u, 0x0000001cu, 0x00000506u, 0x000004f5u, 0x00000008u, 0x0003003eu, 0x0000068fu, 0x00000506u, 0x00050051u, 0x0000001du, 0x00000508u, 0x000004f5u, 0x00000009u, 0x0003003eu, 0x00000690u, 0x00000508u, 0x00050051u, 0x0000001du, 0x0000050au, 0x000004f5u, 0x0000000au, 0x0003003eu, 0x00000691u, 0x0000050au, 0x000e0050u, 0x0000001eu, 0x0000069du, 0x000004f6u, 0x000004f8u, 0x000004fau, 0x000004fcu, 0x000004feu, 0x00000500u, 0x00000502u, 0x00000504u, 0x00000506u, 0x00000508u, 0x0000050au, 0x0003003eu, 0x0000069eu, 0x000004f6u, 0x0003003eu, 0x0000069fu, 0x000004f8u, 0x0003003eu, 0x000006a0u, 0x000004fau, 0x0003003eu, 0x000006a1u, 0x000004fcu, 0x0003003eu, 0x000006a2u, 0x000004feu, 0x0003003eu, 0x000006a3u, 0x00000500u, 0x0003003eu, 0x000006a4u, 0x00000502u, 0x0003003eu, 0x000006a5u, 0x00000504u, 0x0003003eu, 0x000006a6u, 0x00000506u, 0x0003003eu, 0x000006a7u, 0x00000508u, 0x0003003eu, 0x000006a8u, 0x0000050au, 0x0003003eu, 0x00000774u, 0x000004f6u, 0x0003003eu, 0x00000775u, 0x000004f8u, 0x0003003eu, 0x00000776u, 0x000004fau, 0x0003003eu, 0x00000777u, 0x000004fcu, 0x0003003eu, 0x00000778u, 0x000004feu, 0x0003003eu, 0x00000779u, 0x00000500u, 0x0003003eu, 0x0000077au, 0x00000502u, 0x0003003eu, 0x0000077bu, 0x00000504u, 0x0003003eu, 0x0000077cu, 0x00000506u, 0x0003003eu, 0x0000077du, 0x00000508u, 0x0003003eu, 0x0000077eu, 0x0000050au, 0x0003003eu, 0x00000796u, 0x000004f6u, 0x0003003eu, 0x00000797u, 0x000004f8u, 0x0003003eu, 0x00000798u, 0x000004fau, 0x0003003eu, 0x00000799u, 0x000004fcu, 0x0003003eu, 0x0000079au, 0x000004feu, 0x0003003eu, 0x0000079bu, 0x00000500u, 0x0003003eu, 0x0000079cu, 0x00000502u, 0x0003003eu, 0x0000079du, 0x00000504u, 0x0003003eu, 0x0000079eu, 0x00000506u, 0x0003003eu, 0x0000079fu, 0x00000508u, 0x0003003eu, 0x000002a8u, 0x00000291u, 0x0003003eu, 0x000002aau, 0x000002a1u, 0x0003003eu, 0x000002acu, 0x0000023bu, 0x0003003eu, 0x0000050du, 0x0000014au, 0x000300f7u, 0x00000519u, 0x00000000u, 0x000300fbu, 0x0000004du, 0x0000051au, 0x000200f8u, 0x0000051au, 0x00050041u, 0x00000014u, 0x0000051bu, 0x000002a8u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000051cu, 0x0000051bu, 0x00050084u, 0x00000006u, 0x0000051du, 0x0000051cu, 0x0000008au, 0x0003003eu, 0x0000050fu, 0x0000051du, 0x00050041u, 0x00000014u, 0x0000051eu, 0x000002aau, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000051fu, 0x0000051eu, 0x00050084u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x0000008au, 0x00050080u, 0x00000006u, 0x00000521u, 0x00000520u, 0x00000082u, 0x0003003eu, 0x00000510u, 0x00000521u, 0x00040072u, 0x00000006u, 0x00000526u, 0x000004fcu, 0x00050084u, 0x00000006u, 0x00000527u, 0x0000023bu, 0x00000526u, 0x0007000cu, 0x00000006u, 0x00000528u, 0x00000001u, 0x0000002au, 0x0000051du, 0x00000527u, 0x0003003eu, 0x0000050fu, 0x00000528u, 0x00040072u, 0x00000006u, 0x0000052du, 0x00000506u, 0x00050084u, 0x00000006u, 0x0000052eu, 0x0000023bu, 0x0000052du, 0x00050082u, 0x00000006u, 0x0000052fu, 0x0000052eu, 0x000000afu, 0x0007000cu, 0x00000006u, 0x00000530u, 0x00000001u, 0x00000027u, 0x00000521u, 0x0000052fu, 0x0003003eu, 0x00000510u, 0x00000530u, 0x000500b1u, 0x00000020u, 0x00000533u, 0x00000530u, 0x00000528u, 0x000300f7u, 0x00000534u, 0x00000000u, 0x000400fau, 0x00000533u, 0x00000535u, 0x00000534u, 0x000200f8u, 0x00000535u, 0x0003003eu, 0x0000050du, 0x00000354u, 0x0003003eu, 0x0000050eu, 0x0000014au, 0x000200f9u, 0x00000519u, 0x000200f8u, 0x00000534u, 0x00040071u, 0x00000032u, 0x00000538u, 0x00000508u, 0x0004007cu, 0x00000006u, 0x00000539u, 0x00000538u, 0x000500c7u, 0x00000006u, 0x0000053au, 0x00000539u, 0x000000afu, 0x000500abu, 0x00000020u, 0x0000053bu, 0x0000053au, 0x0000009bu, 0x0003003eu, 0x00000511u, 0x0000053bu, 0x00040072u, 0x00000006u, 0x00000540u, 0x000004feu, 0x00050084u, 0x00000006u, 0x00000542u, 0x00000540u, 0x0000023bu, 0x00050050u, 0x00000022u, 0x00000543u, 0x00000542u, 0x00000542u, 0x00050080u, 0x00000022u, 0x00000544u, 0x00000543u, 0x0000015du, 0x00050050u, 0x00000022u, 0x00000546u, 0x00000528u, 0x00000528u, 0x00050050u, 0x00000022u, 0x00000548u, 0x00000530u, 0x00000530u, 0x0008000cu, 0x00000022u, 0x00000549u, 0x00000001u, 0x0000002du, 0x00000544u, 0x00000546u, 0x00000548u, 0x00050051u, 0x00000006u, 0x0000054au, 0x00000549u, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000054bu, 0x00000549u, 0x00000001u, 0x00070050u, 0x00000007u, 0x0000054cu, 0x00000528u, 0x00000530u, 0x0000054au, 0x0000054bu, 0x0003003eu, 0x00000512u, 0x0000054cu, 0x000e0050u, 0x0000001eu, 0x000007b4u, 0x000004f6u, 0x000004f8u, 0x000004fau, 0x000004fcu, 0x000004feu, 0x00000500u, 0x00000502u, 0x00000504u, 0x00000506u, 0x00000508u, 0x0000067eu, 0x0003003eu, 0x00000675u, 0x000004f6u, 0x0003003eu, 0x00000676u, 0x000004f8u, 0x0003003eu, 0x00000677u, 0x000004fau, 0x0003003eu, 0x00000678u, 0x000004fcu, 0x0003003eu, 0x00000679u, 0x000004feu, 0x0003003eu, 0x0000067au, 0x00000500u, 0x0003003eu, 0x0000067bu, 0x00000502u, 0x0003003eu, 0x0000067cu, 0x00000504u, 0x0003003eu, 0x00000515u, 0x0000054cu, 0x0003003eu, 0x00000516u, 0x0000053bu, 0x0003003eu, 0x00000517u, 0x0000023bu, 0x000500c7u, 0x00000006u, 0x00000587u, 0x00000526u, 0x00000087u, 0x0003003eu, 0x00000564u, 0x00000587u, 0x0003003eu, 0x00000565u, 0x00000540u, 0x00050084u, 0x00000006u, 0x0000058du, 0x00000587u, 0x0000023bu, 0x0003003eu, 0x00000564u, 0x0000058du, 0x0003003eu, 0x00000565u, 0x00000542u, 0x00070050u, 0x00000007u, 0x00000593u, 0x0000058du, 0x0000058du, 0x0000058du, 0x0000058du, 0x00050082u, 0x00000007u, 0x00000594u, 0x0000054cu, 0x00000593u, 0x00050084u, 0x00000006u, 0x00000598u, 0x0000023bu, 0x000004f6u, 0x0003003eu, 0x00000568u, 0x00000594u, 0x0003003eu, 0x00000569u, 0x00000500u, 0x0003003eu, 0x0000056au, 0x00000598u, 0x00070050u, 0x00000007u, 0x00000600u, 0x00000500u, 0x00000500u, 0x00000500u, 0x00000500u, 0x00050098u, 0x00000068u, 0x00000601u, 0x00000594u, 0x00000600u, 0x00050051u, 0x00000007u, 0x00000602u, 0x00000601u, 0x00000000u, 0x0003003eu, 0x000005fbu, 0x00000602u, 0x00050051u, 0x00000007u, 0x00000603u, 0x00000601u, 0x00000001u, 0x0003003eu, 0x000005fau, 0x00000603u, 0x0004007cu, 0x0000006du, 0x00000605u, 0x00000602u, 0x0004007cu, 0x00000032u, 0x00000607u, 0x00000598u, 0x00070050u, 0x0000006du, 0x00000608u, 0x00000607u, 0x00000607u, 0x00000607u, 0x00000607u, 0x00050095u, 0x00000074u, 0x00000609u, 0x00000605u, 0x00000608u, 0x00050051u, 0x0000006du, 0x0000060au, 0x00000609u, 0x00000001u, 0x0003003eu, 0x000005fcu, 0x0000060au, 0x00050051u, 0x0000006du, 0x0000060bu, 0x00000609u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000060cu, 0x0000060bu, 0x0003003eu, 0x000005fbu, 0x0000060cu, 0x0004007cu, 0x00000007u, 0x0000060eu, 0x0000060au, 0x00050080u, 0x00000007u, 0x00000610u, 0x00000603u, 0x0000060eu, 0x0003003eu, 0x000005fau, 0x00000610u, 0x0003003eu, 0x0000056bu, 0x00000610u, 0x0003003eu, 0x000005fdu, 0x0000060cu, 0x0003003eu, 0x00000567u, 0x00000610u, 0x0003003eu, 0x00000566u, 0x0000060cu, 0x00050084u, 0x00000006u, 0x000005a4u, 0x0000023bu, 0x000004f8u, 0x0003003eu, 0x0000056eu, 0x00000594u, 0x0003003eu, 0x0000056fu, 0x00000502u, 0x0003003eu, 0x00000570u, 0x000005a4u, 0x00070050u, 0x00000007u, 0x00000619u, 0x00000502u, 0x00000502u, 0x00000502u, 0x00000502u, 0x00050098u, 0x00000068u, 0x0000061au, 0x00000594u, 0x00000619u, 0x00050051u, 0x00000007u, 0x0000061bu, 0x0000061au, 0x00000000u, 0x0003003eu, 0x00000614u, 0x0000061bu, 0x00050051u, 0x00000007u, 0x0000061cu, 0x0000061au, 0x00000001u, 0x0003003eu, 0x00000613u, 0x0000061cu, 0x0004007cu, 0x0000006du, 0x0000061eu, 0x0000061bu, 0x0004007cu, 0x00000032u, 0x00000620u, 0x000005a4u, 0x00070050u, 0x0000006du, 0x00000621u, 0x00000620u, 0x00000620u, 0x00000620u, 0x00000620u, 0x00050095u, 0x00000074u, 0x00000622u, 0x0000061eu, 0x00000621u, 0x00050051u, 0x0000006du, 0x00000623u, 0x00000622u, 0x00000001u, 0x0003003eu, 0x00000615u, 0x00000623u, 0x00050051u, 0x0000006du, 0x00000624u, 0x00000622u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000625u, 0x00000624u, 0x0003003eu, 0x00000614u, 0x00000625u, 0x0004007cu, 0x00000007u, 0x00000627u, 0x00000623u, 0x00050080u, 0x00000007u, 0x00000629u, 0x0000061cu, 0x00000627u, 0x0003003eu, 0x00000613u, 0x00000629u, 0x0003003eu, 0x00000571u, 0x00000629u, 0x0003003eu, 0x00000616u, 0x00000625u, 0x0003003eu, 0x0000056du, 0x00000629u, 0x0003003eu, 0x0000056cu, 0x00000625u, 0x00070050u, 0x00000007u, 0x000005abu, 0x00000542u, 0x00000542u, 0x00000542u, 0x00000542u, 0x00050082u, 0x00000007u, 0x000005acu, 0x0000054cu, 0x000005abu, 0x00050084u, 0x00000006u, 0x000005b0u, 0x0000023bu, 0x000004fau, 0x0003003eu, 0x00000574u, 0x000005acu, 0x0003003eu, 0x00000575u, 0x00000504u, 0x0003003eu, 0x00000576u, 0x000005b0u, 0x00070050u, 0x00000007u, 0x00000632u, 0x00000504u, 0x00000504u, 0x00000504u, 0x00000504u, 0x00050098u, 0x00000068u, 0x00000633u, 0x000005acu, 0x00000632u, 0x00050051u, 0x00000007u, 0x00000634u, 0x00000633u, 0x00000000u, 0x0003003eu, 0x0000062du, 0x00000634u, 0x00050051u, 0x00000007u, 0x00000635u, 0x00000633u, 0x00000001u, 0x0003003eu, 0x0000062cu, 0x00000635u, 0x0004007cu, 0x0000006du, 0x00000637u, 0x00000634u, 0x0004007cu, 0x00000032u, 0x00000639u, 0x000005b0u, 0x00070050u, 0x0000006du, 0x0000063au, 0x00000639u, 0x00000639u, 0x00000639u, 0x00000639u, 0x00050095u, 0x00000074u, 0x0000063bu, 0x00000637u, 0x0000063au, 0x00050051u, 0x0000006du, 0x0000063cu, 0x0000063bu, 0x00000001u, 0x0003003eu, 0x0000062eu, 0x0000063cu, 0x00050051u, 0x0000006du, 0x0000063du, 0x0000063bu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000063eu, 0x0000063du, 0x0003003eu, 0x0000062du, 0x0000063eu, 0x0004007cu, 0x00000007u, 0x00000640u, 0x0000063cu, 0x00050080u, 0x00000007u, 0x00000642u, 0x00000635u, 0x00000640u, 0x0003003eu, 0x0000062cu, 0x00000642u, 0x0003003eu, 0x00000577u, 0x00000642u, 0x0003003eu, 0x0000062fu, 0x0000063eu, 0x0003003eu, 0x00000573u, 0x00000642u, 0x0003003eu, 0x00000572u, 0x0000063eu, 0x00050084u, 0x00000006u, 0x000005bcu, 0x0000023bu, 0x00000540u, 0x00070050u, 0x00000007u, 0x000005bdu, 0x000005bcu, 0x000005bcu, 0x000005bcu, 0x000005bcu, 0x000500b1u, 0x000000d9u, 0x000005beu, 0x0000054cu, 0x000005bdu, 0x000600a9u, 0x00000007u, 0x000005bfu, 0x000005beu, 0x00000625u, 0x0000063eu, 0x0003003eu, 0x00000572u, 0x000005bfu, 0x000600a9u, 0x00000007u, 0x000005cau, 0x000005beu, 0x00000629u, 0x00000642u, 0x0003003eu, 0x00000573u, 0x000005cau, 0x000500adu, 0x000000d9u, 0x000005cdu, 0x00000610u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x000005ceu, 0x000005cdu, 0x000000e9u, 0x0000060cu, 0x0003003eu, 0x00000566u, 0x000005ceu, 0x000500b1u, 0x000000d9u, 0x000005d1u, 0x00000610u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x000005d2u, 0x000005d1u, 0x000000f0u, 0x000005ceu, 0x0003003eu, 0x00000566u, 0x000005d2u, 0x000500adu, 0x000000d9u, 0x000005d5u, 0x000005cau, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x000005d6u, 0x000005d5u, 0x000000e9u, 0x000005bfu, 0x0003003eu, 0x00000572u, 0x000005d6u, 0x000500b1u, 0x000000d9u, 0x000005d9u, 0x000005cau, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x000005dau, 0x000005d9u, 0x000000f0u, 0x000005d6u, 0x0003003eu, 0x00000572u, 0x000005dau, 0x0003003eu, 0x00000579u, 0x000005d2u, 0x000500c3u, 0x00000007u, 0x00000648u, 0x000005d2u, 0x00000837u, 0x0003003eu, 0x00000645u, 0x00000648u, 0x0003003eu, 0x00000578u, 0x00000648u, 0x0003003eu, 0x0000057bu, 0x000005dau, 0x000500c3u, 0x00000007u, 0x0000064cu, 0x000005dau, 0x00000837u, 0x0003003eu, 0x00000649u, 0x0000064cu, 0x0003003eu, 0x0000057au, 0x0000064cu, 0x000300f7u, 0x000005e0u, 0x00000000u, 0x000400fau, 0x0000053bu, 0x000005e1u, 0x000005e2u, 0x000200f8u, 0x000005e1u, 0x0003003eu, 0x0000057cu, 0x00000648u, 0x0003003eu, 0x0000057du, 0x0000064cu, 0x000200f9u, 0x000005e0u, 0x000200f8u, 0x000005e2u, 0x0003003eu, 0x0000057cu, 0x0000064cu, 0x0003003eu, 0x0000057du, 0x00000648u, 0x000200f9u, 0x000005e0u, 0x000200f8u, 0x000005e0u, 0x00070050u, 0x000000d9u, 0x0000083cu, 0x0000053bu, 0x0000053bu, 0x0000053bu, 0x0000053bu, 0x000600a9u, 0x00000007u, 0x0000083du, 0x0000083cu, 0x0000064cu, 0x00000648u, 0x000600a9u, 0x00000007u, 0x0000083fu, 0x0000083cu, 0x00000648u, 0x0000064cu, 0x0006000cu, 0x00000007u, 0x000005e8u, 0x00000001u, 0x00000005u, 0x0000083fu, 0x0006000cu, 0x00000007u, 0x000005eau, 0x00000001u, 0x00000005u, 0x0000083du, 0x0007000cu, 0x00000007u, 0x000005ebu, 0x00000001u, 0x0000002au, 0x000005e8u, 0x000005eau, 0x0003003eu, 0x0000057fu, 0x000005ebu, 0x0007004fu, 0x00000022u, 0x00000650u, 0x000005ebu, 0x000005ebu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000652u, 0x000005ebu, 0x000005ebu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000653u, 0x00000001u, 0x0000002au, 0x00000650u, 0x00000652u, 0x0003003eu, 0x0000064du, 0x00000653u, 0x00050041u, 0x00000014u, 0x00000654u, 0x0000064du, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000655u, 0x00000654u, 0x00050041u, 0x00000014u, 0x00000656u, 0x0000064du, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000657u, 0x00000656u, 0x0007000cu, 0x00000006u, 0x00000658u, 0x00000001u, 0x0000002au, 0x00000655u, 0x00000657u, 0x0003003eu, 0x0000064eu, 0x00000658u, 0x0003003eu, 0x0000057eu, 0x00000658u, 0x00050084u, 0x00000006u, 0x000005efu, 0x00000119u, 0x0000023bu, 0x000500b3u, 0x00000020u, 0x000005f0u, 0x00000658u, 0x000005efu, 0x000300f7u, 0x000005f1u, 0x00000000u, 0x000400fau, 0x000005f0u, 0x000005f2u, 0x000005f3u, 0x000200f8u, 0x000005f2u, 0x0003003eu, 0x00000581u, 0x0000083fu, 0x0007004fu, 0x00000022u, 0x0000065cu, 0x0000083fu, 0x0000083fu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000065eu, 0x0000083fu, 0x0000083fu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000065fu, 0x00000001u, 0x00000027u, 0x0000065cu, 0x0000065eu, 0x0003003eu, 0x00000659u, 0x0000065fu, 0x00050041u, 0x00000014u, 0x00000660u, 0x00000659u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000661u, 0x00000660u, 0x00050041u, 0x00000014u, 0x00000662u, 0x00000659u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000663u, 0x00000662u, 0x0007000cu, 0x00000006u, 0x00000664u, 0x00000001u, 0x00000027u, 0x00000661u, 0x00000663u, 0x0003003eu, 0x0000065au, 0x00000664u, 0x0003003eu, 0x00000582u, 0x0000083du, 0x0007004fu, 0x00000022u, 0x00000668u, 0x0000083du, 0x0000083du, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000066au, 0x0000083du, 0x0000083du, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000066bu, 0x00000001u, 0x0000002au, 0x00000668u, 0x0000066au, 0x0003003eu, 0x00000665u, 0x0000066bu, 0x00050041u, 0x00000014u, 0x0000066cu, 0x00000665u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000066du, 0x0000066cu, 0x00050041u, 0x00000014u, 0x0000066eu, 0x00000665u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000066fu, 0x0000066eu, 0x0007000cu, 0x00000006u, 0x00000670u, 0x00000001u, 0x0000002au, 0x0000066du, 0x0000066fu, 0x0003003eu, 0x00000666u, 0x00000670u, 0x00050050u, 0x00000022u, 0x000005f8u, 0x00000664u, 0x00000670u, 0x0003003eu, 0x00000580u, 0x000005f8u, 0x000200f9u, 0x000005f1u, 0x000200f8u, 0x000005f3u, 0x0003003eu, 0x00000580u, 0x00000128u, 0x000200f9u, 0x000005f1u, 0x000200f8u, 0x000005f1u, 0x000700f5u, 0x00000022u, 0x00000810u, 0x000005f8u, 0x000005f2u, 0x00000128u, 0x000005f3u, 0x0003003eu, 0x00000583u, 0x00000810u, 0x0003003eu, 0x00000513u, 0x00000810u, 0x00050041u, 0x00000014u, 0x00000552u, 0x00000513u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000553u, 0x00000552u, 0x00050041u, 0x00000014u, 0x00000554u, 0x000002a8u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000555u, 0x00000554u, 0x0007000cu, 0x00000006u, 0x00000556u, 0x00000001u, 0x0000002au, 0x00000553u, 0x00000555u, 0x0003003eu, 0x00000552u, 0x00000556u, 0x00050041u, 0x00000014u, 0x00000558u, 0x00000513u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000559u, 0x00000558u, 0x00050041u, 0x00000014u, 0x0000055au, 0x000002aau, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000055bu, 0x0000055au, 0x0007000cu, 0x00000006u, 0x0000055cu, 0x00000001u, 0x00000027u, 0x00000559u, 0x0000055bu, 0x0003003eu, 0x00000558u, 0x0000055cu, 0x0004003du, 0x00000006u, 0x0000055fu, 0x00000552u, 0x0004003du, 0x00000006u, 0x00000561u, 0x00000558u, 0x000500b3u, 0x00000020u, 0x00000562u, 0x0000055fu, 0x00000561u, 0x0003003eu, 0x0000050du, 0x00000354u, 0x0003003eu, 0x0000050eu, 0x00000562u, 0x000200f9u, 0x00000519u, 0x000200f8u, 0x00000519u, 0x000700f5u, 0x00000020u, 0x00000811u, 0x0000014au, 0x00000535u, 0x00000562u, 0x000005f1u, 0x0003003eu, 0x00000518u, 0x00000811u, 0x000300f7u, 0x000002afu, 0x00000000u, 0x000400fau, 0x00000811u, 0x000002aeu, 0x000002afu, 0x000200f8u, 0x000002aeu, 0x000500c5u, 0x00000032u, 0x000002b3u, 0x000007edu, 0x00000278u, 0x0003003eu, 0x0000026cu, 0x000002b3u, 0x000200f9u, 0x000002afu, 0x000200f8u, 0x000002afu, 0x000700f5u, 0x00000032u, 0x00000824u, 0x000007edu, 0x00000519u, 0x000002b3u, 0x000002aeu, 0x000200f9u, 0x00000270u, 0x000200f8u, 0x00000270u, 0x000200f9u, 0x0000026du, 0x000200f8u, 0x0000026fu, 0x00050084u, 0x00000006u, 0x000002bbu, 0x000001f1u, 0x000002bau, 0x00050080u, 0x00000006u, 0x000002bdu, 0x000002bbu, 0x000001d0u, 0x00060041u, 0x000001c4u, 0x000002bfu, 0x000002b7u, 0x0000009bu, 0x000002bdu, 0x0003003eu, 0x000002bfu, 0x000007edu, 0x000500abu, 0x00000020u, 0x000002c1u, 0x000007edu, 0x0000004du, 0x000300f7u, 0x000002c3u, 0x00000000u, 0x000400fau, 0x000002c1u, 0x000002c2u, 0x000002cdu, 0x000200f8u, 0x000002c2u, 0x00060041u, 0x000001c4u, 0x000002c9u, 0x000002c7u, 0x0000009bu, 0x000001f1u, 0x000500c4u, 0x00000032u, 0x000002cbu, 0x00000050u, 0x000001d0u, 0x000700f1u, 0x00000032u, 0x000002ccu, 0x000002c9u, 0x00000050u, 0x0000004du, 0x000002cbu, 0x000200f9u, 0x000002c3u, 0x000200f8u, 0x000002cdu, 0x00060041u, 0x000001c4u, 0x000002cfu, 0x000002c7u, 0x0000009bu, 0x000001f1u, 0x000500c4u, 0x00000032u, 0x000002d1u, 0x00000050u, 0x000001d0u, 0x000400c8u, 0x00000032u, 0x000002d2u, 0x000002d1u, 0x000700f0u, 0x00000032u, 0x000002d3u, 0x000002cfu, 0x00000050u, 0x0000004du, 0x000002d2u, 0x000200f9u, 0x000002c3u, 0x000200f8u, 0x000002c3u, 0x000400cdu, 0x00000006u, 0x000002d6u, 0x000007edu, 0x0004007cu, 0x00000032u, 0x000002d7u, 0x000002d6u, 0x0003003eu, 0x000002d4u, 0x000002d7u, 0x0003003eu, 0x000002d8u, 0x0000004du, 0x000500abu, 0x00000020u, 0x000002dau, 0x000002d7u, 0x0000004du, 0x000300f7u, 0x000002dcu, 0x00000000u, 0x000400fau, 0x000002dau, 0x000002dbu, 0x000002dcu, 0x000200f8u, 0x000002dbu, 0x00070041u, 0x000001c4u, 0x000002ddu, 0x000001c2u, 0x0000009bu, 0x0000009bu, 0x000001b9u, 0x000700eau, 0x00000032u, 0x000002dfu, 0x000002ddu, 0x00000050u, 0x0000004du, 0x000002d7u, 0x0003003eu, 0x000002d8u, 0x000002dfu, 0x000200f9u, 0x000002dcu, 0x000200f8u, 0x000002dcu, 0x000700f5u, 0x00000032u, 0x000007f4u, 0x0000004du, 0x000002c3u, 0x000002dfu, 0x000002dbu, 0x000300f7u, 0x000002e3u, 0x00000000u, 0x000400fau, 0x000002dau, 0x000002e2u, 0x000002e3u, 0x000200f8u, 0x000002e2u, 0x00060041u, 0x000001c4u, 0x000002edu, 0x000002e7u, 0x0000009bu, 0x000002bdu, 0x0003003eu, 0x000002edu, 0x000007f4u, 0x000200f9u, 0x000002e3u, 0x000200f8u, 0x000002e3u, 0x0003003eu, 0x000002eeu, 0x000007edu, 0x000200f9u, 0x000002f0u, 0x000200f8u, 0x000002f0u, 0x000700f5u, 0x00000032u, 0x000007fbu, 0x000007f4u, 0x000002e3u, 0x00000828u, 0x000002f3u, 0x000700f5u, 0x00000032u, 0x000007f7u, 0x000007edu, 0x000002e3u, 0x000002feu, 0x000002f3u, 0x000500abu, 0x00000020u, 0x000002f6u, 0x000007f7u, 0x0000004du, 0x000400f6u, 0x000002f2u, 0x000002f3u, 0x00000000u, 0x000400fau, 0x000002f6u, 0x000002f1u, 0x000002f2u, 0x000200f8u, 0x000002f1u, 0x0006000cu, 0x00000006u, 0x000002f9u, 0x00000001u, 0x00000049u, 0x000007f7u, 0x0003003eu, 0x000002f7u, 0x000002f9u, 0x000500c4u, 0x00000032u, 0x000002fbu, 0x00000050u, 0x000002f9u, 0x000400c8u, 0x00000032u, 0x000002fcu, 0x000002fbu, 0x000500c7u, 0x00000032u, 0x000002feu, 0x000007f7u, 0x000002fcu, 0x0003003eu, 0x000002eeu, 0x000002feu, 0x00050084u, 0x00000006u, 0x00000301u, 0x000001d0u, 0x00000224u, 0x00050080u, 0x00000006u, 0x00000303u, 0x00000301u, 0x000002f9u, 0x0003003eu, 0x000002ffu, 0x00000303u, 0x000500c7u, 0x00000032u, 0x00000307u, 0x000007edu, 0x000002fbu, 0x000500abu, 0x00000020u, 0x00000308u, 0x00000307u, 0x0000004du, 0x000300f7u, 0x0000030au, 0x00000000u, 0x000400fau, 0x00000308u, 0x00000309u, 0x0000030au, 0x000200f8u, 0x00000309u, 0x00080041u, 0x00000315u, 0x00000316u, 0x00000313u, 0x0000009bu, 0x00000303u, 0x0000009bu, 0x0000004du, 0x0004003du, 0x0000001du, 0x00000317u, 0x00000316u, 0x00040071u, 0x00000032u, 0x00000318u, 0x00000317u, 0x0003003eu, 0x0000030bu, 0x00000318u, 0x0003003eu, 0x0000031au, 0x00000318u, 0x00070041u, 0x000001c4u, 0x00000673u, 0x000001c2u, 0x0000009bu, 0x00000318u, 0x0000004du, 0x000700eau, 0x00000032u, 0x00000674u, 0x00000673u, 0x00000050u, 0x0000004du, 0x00000050u, 0x0003003eu, 0x00000671u, 0x00000674u, 0x0003003eu, 0x00000319u, 0x00000674u, 0x00050084u, 0x00000032u, 0x00000325u, 0x00000323u, 0x00000318u, 0x00050080u, 0x00000032u, 0x00000326u, 0x00000674u, 0x00000325u, 0x0004003du, 0x00000006u, 0x00000328u, 0x000001efu, 0x0004007cu, 0x00000032u, 0x00000329u, 0x00000328u, 0x0004003du, 0x00000006u, 0x0000032bu, 0x000001e9u, 0x0004007cu, 0x00000032u, 0x0000032cu, 0x0000032bu, 0x0004007cu, 0x00000032u, 0x0000032fu, 0x00000303u, 0x00070050u, 0x0000006du, 0x00000330u, 0x00000329u, 0x0000032cu, 0x000007fbu, 0x0000032fu, 0x00060041u, 0x00000331u, 0x00000332u, 0x00000320u, 0x0000009bu, 0x00000326u, 0x0003003eu, 0x00000332u, 0x00000330u, 0x00050080u, 0x00000032u, 0x00000334u, 0x000007fbu, 0x000000afu, 0x0003003eu, 0x000002d8u, 0x00000334u, 0x000200f9u, 0x0000030au, 0x000200f8u, 0x0000030au, 0x000700f5u, 0x00000032u, 0x00000828u, 0x000007fbu, 0x000002f1u, 0x00000334u, 0x00000309u, 0x000200f9u, 0x000002f3u, 0x000200f8u, 0x000002f3u, 0x000200f9u, 0x000002f0u, 0x000200f8u, 0x000002f2u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x00000041u, 0x0000000au, 0x000500c3u, 0x00000007u, 0x00000044u, 0x00000041u, 0x00000837u, 0x000200feu, 0x00000044u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x0000002au, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000048u, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x00000049u, 0x00000048u, 0x00000048u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x0000004au, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x0000004bu, 0x0000004au, 0x0000004au, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000004cu, 0x00000001u, 0x00000027u, 0x00000049u, 0x0000004bu, 0x0003003eu, 0x00000047u, 0x0000004cu, 0x00050041u, 0x00000014u, 0x0000004eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004fu, 0x0000004eu, 0x00050041u, 0x00000014u, 0x00000051u, 0x00000047u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000052u, 0x00000051u, 0x0007000cu, 0x00000006u, 0x00000053u, 0x00000001u, 0x00000027u, 0x0000004fu, 0x00000052u, 0x000200feu, 0x00000053u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x0000002au, 0x00000056u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000057u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x00000058u, 0x00000057u, 0x00000057u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000059u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x0000005au, 0x00000059u, 0x00000059u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000005bu, 0x00000001u, 0x0000002au, 0x00000058u, 0x0000005au, 0x0003003eu, 0x00000056u, 0x0000005bu, 0x00050041u, 0x00000014u, 0x0000005cu, 0x00000056u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000005du, 0x0000005cu, 0x00050041u, 0x00000014u, 0x0000005eu, 0x00000056u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000005fu, 0x0000005eu, 0x0007000cu, 0x00000006u, 0x00000060u, 0x00000001u, 0x0000002au, 0x0000005du, 0x0000005fu, 0x000200feu, 0x00000060u, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000066u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000067u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x00000073u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000063u, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000064u, 0x00000017u, 0x00070050u, 0x00000007u, 0x00000065u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00050098u, 0x00000068u, 0x00000069u, 0x00000063u, 0x00000065u, 0x00050051u, 0x00000007u, 0x0000006au, 0x00000069u, 0x00000000u, 0x0003003eu, 0x00000067u, 0x0000006au, 0x00050051u, 0x00000007u, 0x0000006bu, 0x00000069u, 0x00000001u, 0x0003003eu, 0x00000066u, 0x0000006bu, 0x0004007cu, 0x0000006du, 0x0000006eu, 0x0000006au, 0x0004003du, 0x00000006u, 0x0000006fu, 0x00000018u, 0x0004007cu, 0x00000032u, 0x00000070u, 0x0000006fu, 0x00070050u, 0x0000006du, 0x00000071u, 0x00000070u, 0x00000070u, 0x00000070u, 0x00000070u, 0x00050095u, 0x00000074u, 0x00000075u, 0x0000006eu, 0x00000071u, 0x00050051u, 0x0000006du, 0x00000076u, 0x00000075u, 0x00000001u, 0x0003003eu, 0x00000073u, 0x00000076u, 0x00050051u, 0x0000006du, 0x00000077u, 0x00000075u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000078u, 0x00000077u, 0x0003003eu, 0x00000067u, 0x00000078u, 0x0004007cu, 0x00000007u, 0x0000007au, 0x00000076u, 0x00050080u, 0x00000007u, 0x0000007cu, 0x0000006bu, 0x0000007au, 0x0003003eu, 0x00000066u, 0x0000007cu, 0x0003003eu, 0x00000019u, 0x0000007cu, 0x000200feu, 0x00000078u, 0x00010038u, 0x00050036u, 0x00000022u, 0x00000028u, 0x00000000u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000008u, 0x00000025u, 0x00030037u, 0x00000021u, 0x00000026u, 0x00030037u, 0x00000014u, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x00000014u, 0x00000081u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000089u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000094u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000bcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000ccu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000cdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000ffu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000102u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000103u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000109u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000010bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000110u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000116u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000011fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000120u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000123u, 0x00000007u, 0x00050041u, 0x00000083u, 0x00000084u, 0x00000024u, 0x00000082u, 0x0004003du, 0x0000001cu, 0x00000085u, 0x00000084u, 0x00040072u, 0x00000006u, 0x00000086u, 0x00000085u, 0x000500c7u, 0x00000006u, 0x00000088u, 0x00000086u, 0x00000087u, 0x0003003eu, 0x00000081u, 0x00000088u, 0x00050041u, 0x00000083u, 0x0000008bu, 0x00000024u, 0x0000008au, 0x0004003du, 0x0000001cu, 0x0000008cu, 0x0000008bu, 0x00040072u, 0x00000006u, 0x0000008du, 0x0000008cu, 0x0003003eu, 0x00000089u, 0x0000008du, 0x0004003du, 0x00000006u, 0x0000008eu, 0x00000027u, 0x00050084u, 0x00000006u, 0x00000090u, 0x00000088u, 0x0000008eu, 0x0003003eu, 0x00000081u, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000091u, 0x00000027u, 0x00050084u, 0x00000006u, 0x00000093u, 0x0000008du, 0x00000091u, 0x0003003eu, 0x00000089u, 0x00000093u, 0x0004003du, 0x00000007u, 0x00000095u, 0x00000025u, 0x00070050u, 0x00000007u, 0x00000097u, 0x00000090u, 0x00000090u, 0x00000090u, 0x00000090u, 0x00050082u, 0x00000007u, 0x00000098u, 0x00000095u, 0x00000097u, 0x0004003du, 0x00000006u, 0x0000009au, 0x00000027u, 0x00050041u, 0x00000014u, 0x0000009cu, 0x00000024u, 0x0000009bu, 0x0004003du, 0x00000006u, 0x0000009du, 0x0000009cu, 0x00050084u, 0x00000006u, 0x0000009eu, 0x0000009au, 0x0000009du, 0x0003003eu, 0x000000a0u, 0x00000098u, 0x00050041u, 0x00000014u, 0x000000a2u, 0x00000024u, 0x00000099u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x000000a2u, 0x0003003eu, 0x000000a1u, 0x000000a3u, 0x0003003eu, 0x000000a4u, 0x0000009eu, 0x00080039u, 0x00000007u, 0x000000a6u, 0x0000001au, 0x000000a0u, 0x000000a1u, 0x000000a4u, 0x000000a5u, 0x0004003du, 0x00000007u, 0x000000a7u, 0x000000a5u, 0x0003003eu, 0x0000009fu, 0x000000a7u, 0x0003003eu, 0x00000094u, 0x000000a6u, 0x0004003du, 0x00000007u, 0x000000a9u, 0x00000025u, 0x00050082u, 0x00000007u, 0x000000acu, 0x000000a9u, 0x00000097u, 0x0004003du, 0x00000006u, 0x000000aeu, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000b0u, 0x00000024u, 0x000000afu, 0x0004003du, 0x00000006u, 0x000000b1u, 0x000000b0u, 0x00050084u, 0x00000006u, 0x000000b2u, 0x000000aeu, 0x000000b1u, 0x0003003eu, 0x000000b4u, 0x000000acu, 0x00050041u, 0x00000014u, 0x000000b6u, 0x00000024u, 0x000000adu, 0x0004003du, 0x00000006u, 0x000000b7u, 0x000000b6u, 0x0003003eu, 0x000000b5u, 0x000000b7u, 0x0003003eu, 0x000000b8u, 0x000000b2u, 0x00080039u, 0x00000007u, 0x000000bau, 0x0000001au, 0x000000b4u, 0x000000b5u, 0x000000b8u, 0x000000b9u, 0x0004003du, 0x00000007u, 0x000000bbu, 0x000000b9u, 0x0003003eu, 0x000000b3u, 0x000000bbu, 0x0003003eu, 0x000000a8u, 0x000000bau, 0x0004003du, 0x00000007u, 0x000000bdu, 0x00000025u, 0x00070050u, 0x00000007u, 0x000000bfu, 0x00000093u, 0x00000093u, 0x00000093u, 0x00000093u, 0x00050082u, 0x00000007u, 0x000000c0u, 0x000000bdu, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000000c2u, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000c4u, 0x00000024u, 0x000000c3u, 0x0004003du, 0x00000006u, 0x000000c5u, 0x000000c4u, 0x00050084u, 0x00000006u, 0x000000c6u, 0x000000c2u, 0x000000c5u, 0x0003003eu, 0x000000c8u, 0x000000c0u, 0x00050041u, 0x00000014u, 0x000000cau, 0x00000024u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000cbu, 0x000000cau, 0x0003003eu, 0x000000c9u, 0x000000cbu, 0x0003003eu, 0x000000ccu, 0x000000c6u, 0x00080039u, 0x00000007u, 0x000000ceu, 0x0000001au, 0x000000c8u, 0x000000c9u, 0x000000ccu, 0x000000cdu, 0x0004003du, 0x00000007u, 0x000000cfu, 0x000000cdu, 0x0003003eu, 0x000000c7u, 0x000000cfu, 0x0003003eu, 0x000000bcu, 0x000000ceu, 0x0004003du, 0x00000007u, 0x000000d2u, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000d3u, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000d5u, 0x0000008bu, 0x00040072u, 0x00000006u, 0x000000d6u, 0x000000d5u, 0x00050084u, 0x00000006u, 0x000000d7u, 0x000000d3u, 0x000000d6u, 0x00070050u, 0x00000007u, 0x000000d8u, 0x000000d7u, 0x000000d7u, 0x000000d7u, 0x000000d7u, 0x000500b1u, 0x000000d9u, 0x000000dau, 0x000000d2u, 0x000000d8u, 0x000600a9u, 0x00000007u, 0x000000dbu, 0x000000dau, 0x000000bau, 0x000000ceu, 0x0003003eu, 0x000000bcu, 0x000000dbu, 0x0004003du, 0x00000007u, 0x000000deu, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000dfu, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000e1u, 0x0000008bu, 0x00040072u, 0x00000006u, 0x000000e2u, 0x000000e1u, 0x00050084u, 0x00000006u, 0x000000e3u, 0x000000dfu, 0x000000e2u, 0x00070050u, 0x00000007u, 0x000000e4u, 0x000000e3u, 0x000000e3u, 0x000000e3u, 0x000000e3u, 0x000500b1u, 0x000000d9u, 0x000000e5u, 0x000000deu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000000e6u, 0x000000e5u, 0x000000bbu, 0x000000cfu, 0x0003003eu, 0x000000c7u, 0x000000e6u, 0x000500adu, 0x000000d9u, 0x000000ecu, 0x000000a7u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x000000edu, 0x000000ecu, 0x000000e9u, 0x000000a6u, 0x0003003eu, 0x00000094u, 0x000000edu, 0x000500b1u, 0x000000d9u, 0x000000f4u, 0x000000a7u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x000000f5u, 0x000000f4u, 0x000000f0u, 0x000000edu, 0x0003003eu, 0x00000094u, 0x000000f5u, 0x000500adu, 0x000000d9u, 0x000000f8u, 0x000000e6u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x000000f9u, 0x000000f8u, 0x000000e9u, 0x000000dbu, 0x0003003eu, 0x000000bcu, 0x000000f9u, 0x000500b1u, 0x000000d9u, 0x000000fcu, 0x000000e6u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x000000fdu, 0x000000fcu, 0x000000f0u, 0x000000f9u, 0x0003003eu, 0x000000bcu, 0x000000fdu, 0x0003003eu, 0x000000ffu, 0x000000f5u, 0x00050039u, 0x00000007u, 0x00000101u, 0x0000000bu, 0x000000ffu, 0x0003003eu, 0x000000feu, 0x00000101u, 0x0003003eu, 0x00000103u, 0x000000fdu, 0x00050039u, 0x00000007u, 0x00000105u, 0x0000000bu, 0x00000103u, 0x0003003eu, 0x00000102u, 0x00000105u, 0x0004003du, 0x00000020u, 0x00000106u, 0x00000026u, 0x000300f7u, 0x00000108u, 0x00000000u, 0x000400fau, 0x00000106u, 0x00000107u, 0x0000010du, 0x000200f8u, 0x00000107u, 0x0003003eu, 0x00000109u, 0x00000101u, 0x0003003eu, 0x0000010bu, 0x00000105u, 0x000200f9u, 0x00000108u, 0x000200f8u, 0x0000010du, 0x0003003eu, 0x00000109u, 0x00000105u, 0x0003003eu, 0x0000010bu, 0x00000101u, 0x000200f9u, 0x00000108u, 0x000200f8u, 0x00000108u, 0x00070050u, 0x000000d9u, 0x00000840u, 0x00000106u, 0x00000106u, 0x00000106u, 0x00000106u, 0x000600a9u, 0x00000007u, 0x00000841u, 0x00000840u, 0x00000105u, 0x00000101u, 0x000600a9u, 0x00000007u, 0x00000843u, 0x00000840u, 0x00000101u, 0x00000105u, 0x0006000cu, 0x00000007u, 0x00000112u, 0x00000001u, 0x00000005u, 0x00000843u, 0x0006000cu, 0x00000007u, 0x00000114u, 0x00000001u, 0x00000005u, 0x00000841u, 0x0007000cu, 0x00000007u, 0x00000115u, 0x00000001u, 0x0000002au, 0x00000112u, 0x00000114u, 0x0003003eu, 0x00000116u, 0x00000115u, 0x00050039u, 0x00000006u, 0x00000117u, 0x00000012u, 0x00000116u, 0x0003003eu, 0x00000110u, 0x00000117u, 0x0004003du, 0x00000006u, 0x0000011au, 0x00000027u, 0x00050084u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x000500b3u, 0x00000020u, 0x0000011cu, 0x00000117u, 0x0000011bu, 0x000300f7u, 0x0000011eu, 0x00000000u, 0x000400fau, 0x0000011cu, 0x0000011du, 0x00000127u, 0x000200f8u, 0x0000011du, 0x0003003eu, 0x00000120u, 0x00000843u, 0x00050039u, 0x00000006u, 0x00000122u, 0x0000000fu, 0x00000120u, 0x0003003eu, 0x00000123u, 0x00000841u, 0x00050039u, 0x00000006u, 0x00000125u, 0x00000012u, 0x00000123u, 0x00050050u, 0x00000022u, 0x00000126u, 0x00000122u, 0x00000125u, 0x0003003eu, 0x0000011fu, 0x00000126u, 0x000200f9u, 0x0000011eu, 0x000200f8u, 0x00000127u, 0x0003003eu, 0x0000011fu, 0x00000128u, 0x000200f9u, 0x0000011eu, 0x000200f8u, 0x0000011eu, 0x000700f5u, 0x00000022u, 0x00000833u, 0x00000126u, 0x0000011du, 0x00000128u, 0x00000127u, 0x000200feu, 0x00000833u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000030u, 0x00000000u, 0x0000002bu, 0x00030037u, 0x0000001fu, 0x0000002cu, 0x00030037u, 0x0000002au, 0x0000002du, 0x00030037u, 0x0000002au, 0x0000002eu, 0x00030037u, 0x00000014u, 0x0000002fu, 0x000200f8u, 0x00000031u, 0x0005003bu, 0x00000021u, 0x00000353u, 0x00000007u, 0x0000014au, 0x0004003bu, 0x00000021u, 0x00000350u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000130u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000014cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000155u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000168u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000169u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000016bu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000016du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000016fu, 0x00000007u, 0x000300f7u, 0x0000034fu, 0x00000000u, 0x000300fbu, 0x0000004du, 0x00000352u, 0x000200f8u, 0x00000352u, 0x00050041u, 0x00000014u, 0x0000012du, 0x0000002du, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000012eu, 0x0000012du, 0x00050084u, 0x00000006u, 0x0000012fu, 0x0000012eu, 0x0000008au, 0x0003003eu, 0x0000012cu, 0x0000012fu, 0x00050041u, 0x00000014u, 0x00000131u, 0x0000002eu, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000132u, 0x00000131u, 0x00050084u, 0x00000006u, 0x00000133u, 0x00000132u, 0x0000008au, 0x00050080u, 0x00000006u, 0x00000134u, 0x00000133u, 0x00000082u, 0x0003003eu, 0x00000130u, 0x00000134u, 0x0004003du, 0x00000006u, 0x00000136u, 0x0000002fu, 0x00050041u, 0x00000083u, 0x00000137u, 0x0000002cu, 0x00000082u, 0x0004003du, 0x0000001cu, 0x00000138u, 0x00000137u, 0x00040072u, 0x00000006u, 0x00000139u, 0x00000138u, 0x00050084u, 0x00000006u, 0x0000013au, 0x00000136u, 0x00000139u, 0x0007000cu, 0x00000006u, 0x0000013bu, 0x00000001u, 0x0000002au, 0x0000012fu, 0x0000013au, 0x0003003eu, 0x0000012cu, 0x0000013bu, 0x0004003du, 0x00000006u, 0x0000013du, 0x0000002fu, 0x00050041u, 0x00000083u, 0x0000013fu, 0x0000002cu, 0x0000013eu, 0x0004003du, 0x0000001cu, 0x00000140u, 0x0000013fu, 0x00040072u, 0x00000006u, 0x00000141u, 0x00000140u, 0x00050084u, 0x00000006u, 0x00000142u, 0x0000013du, 0x00000141u, 0x00050082u, 0x00000006u, 0x00000143u, 0x00000142u, 0x000000afu, 0x0007000cu, 0x00000006u, 0x00000144u, 0x00000001u, 0x00000027u, 0x00000134u, 0x00000143u, 0x0003003eu, 0x00000130u, 0x00000144u, 0x000500b1u, 0x00000020u, 0x00000147u, 0x00000144u, 0x0000013bu, 0x000300f7u, 0x00000149u, 0x00000000u, 0x000400fau, 0x00000147u, 0x00000148u, 0x00000149u, 0x000200f8u, 0x00000148u, 0x0003003eu, 0x00000353u, 0x00000354u, 0x0003003eu, 0x00000350u, 0x0000014au, 0x000200f9u, 0x0000034fu, 0x000200f8u, 0x00000149u, 0x00050041u, 0x0000014eu, 0x0000014fu, 0x0000002cu, 0x0000014du, 0x0004003du, 0x0000001du, 0x00000150u, 0x0000014fu, 0x00040071u, 0x00000032u, 0x00000151u, 0x00000150u, 0x0004007cu, 0x00000006u, 0x00000152u, 0x00000151u, 0x000500c7u, 0x00000006u, 0x00000153u, 0x00000152u, 0x000000afu, 0x000500abu, 0x00000020u, 0x00000154u, 0x00000153u, 0x0000009bu, 0x0003003eu, 0x0000014cu, 0x00000154u, 0x00050041u, 0x00000083u, 0x00000158u, 0x0000002cu, 0x0000008au, 0x0004003du, 0x0000001cu, 0x00000159u, 0x00000158u, 0x00040072u, 0x00000006u, 0x0000015au, 0x00000159u, 0x0004003du, 0x00000006u, 0x0000015bu, 0x0000002fu, 0x00050084u, 0x00000006u, 0x0000015cu, 0x0000015au, 0x0000015bu, 0x00050050u, 0x00000022u, 0x0000015eu, 0x0000015cu, 0x0000015cu, 0x00050080u, 0x00000022u, 0x0000015fu, 0x0000015eu, 0x0000015du, 0x00050050u, 0x00000022u, 0x00000161u, 0x0000013bu, 0x0000013bu, 0x00050050u, 0x00000022u, 0x00000163u, 0x00000144u, 0x00000144u, 0x0008000cu, 0x00000022u, 0x00000164u, 0x00000001u, 0x0000002du, 0x0000015fu, 0x00000161u, 0x00000163u, 0x00050051u, 0x00000006u, 0x00000165u, 0x00000164u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000166u, 0x00000164u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000167u, 0x0000013bu, 0x00000144u, 0x00000165u, 0x00000166u, 0x0003003eu, 0x00000155u, 0x00000167u, 0x0004003du, 0x0000001eu, 0x0000016au, 0x0000002cu, 0x0003003eu, 0x00000169u, 0x0000016au, 0x0003003eu, 0x0000016bu, 0x00000167u, 0x0003003eu, 0x0000016du, 0x00000154u, 0x0004003du, 0x00000006u, 0x00000170u, 0x0000002fu, 0x0003003eu, 0x0000016fu, 0x00000170u, 0x00080039u, 0x00000022u, 0x00000171u, 0x00000028u, 0x00000169u, 0x0000016bu, 0x0000016du, 0x0000016fu, 0x0003003eu, 0x00000168u, 0x00000171u, 0x00050041u, 0x00000014u, 0x00000172u, 0x00000168u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000173u, 0x00000172u, 0x00050041u, 0x00000014u, 0x00000174u, 0x0000002du, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000175u, 0x00000174u, 0x0007000cu, 0x00000006u, 0x00000176u, 0x00000001u, 0x0000002au, 0x00000173u, 0x00000175u, 0x0003003eu, 0x00000172u, 0x00000176u, 0x00050041u, 0x00000014u, 0x00000178u, 0x00000168u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000179u, 0x00000178u, 0x00050041u, 0x00000014u, 0x0000017au, 0x0000002eu, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000017au, 0x0007000cu, 0x00000006u, 0x0000017cu, 0x00000001u, 0x00000027u, 0x00000179u, 0x0000017bu, 0x0003003eu, 0x00000178u, 0x0000017cu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x00000172u, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000178u, 0x000500b3u, 0x00000020u, 0x00000182u, 0x0000017fu, 0x00000181u, 0x0003003eu, 0x00000353u, 0x00000354u, 0x0003003eu, 0x00000350u, 0x00000182u, 0x000200f9u, 0x0000034fu, 0x000200f8u, 0x0000034fu, 0x000700f5u, 0x00000020u, 0x00000834u, 0x0000014au, 0x00000148u, 0x00000182u, 0x00000149u, 0x000200feu, 0x00000834u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000036u, 0x00000000u, 0x00000034u, 0x00030037u, 0x00000033u, 0x00000035u, 0x000200f8u, 0x00000037u, 0x0004003bu, 0x0000014eu, 0x000007bfu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000007beu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007bdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bau, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007b9u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007b8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b5u, 0x00000007u, 0x0004003du, 0x00000032u, 0x0000018au, 0x00000035u, 0x00060041u, 0x0000018bu, 0x0000018cu, 0x00000189u, 0x0000009bu, 0x0000018au, 0x0004003du, 0x00000185u, 0x0000018du, 0x0000018cu, 0x00050051u, 0x00000006u, 0x0000018fu, 0x0000018du, 0x00000000u, 0x0003003eu, 0x000007b5u, 0x0000018fu, 0x00050051u, 0x00000006u, 0x00000191u, 0x0000018du, 0x00000001u, 0x0003003eu, 0x000007b6u, 0x00000191u, 0x00050051u, 0x00000006u, 0x00000193u, 0x0000018du, 0x00000002u, 0x0003003eu, 0x000007b7u, 0x00000193u, 0x00050051u, 0x0000001cu, 0x00000195u, 0x0000018du, 0x00000003u, 0x0003003eu, 0x000007b8u, 0x00000195u, 0x00050051u, 0x0000001cu, 0x00000197u, 0x0000018du, 0x00000004u, 0x0003003eu, 0x000007b9u, 0x00000197u, 0x00050051u, 0x00000006u, 0x00000199u, 0x0000018du, 0x00000005u, 0x0003003eu, 0x000007bau, 0x00000199u, 0x00050051u, 0x00000006u, 0x0000019bu, 0x0000018du, 0x00000006u, 0x0003003eu, 0x000007bbu, 0x0000019bu, 0x00050051u, 0x00000006u, 0x0000019du, 0x0000018du, 0x00000007u, 0x0003003eu, 0x000007bcu, 0x0000019du, 0x00050051u, 0x0000001cu, 0x0000019fu, 0x0000018du, 0x00000008u, 0x0003003eu, 0x000007bdu, 0x0000019fu, 0x00050051u, 0x0000001du, 0x000001a1u, 0x0000018du, 0x00000009u, 0x0003003eu, 0x000007beu, 0x000001a1u, 0x00050051u, 0x0000001du, 0x000001a3u, 0x0000018du, 0x0000000au, 0x0003003eu, 0x000007bfu, 0x000001a3u, 0x000e0050u, 0x0000001eu, 0x000007cbu, 0x0000018fu, 0x00000191u, 0x00000193u, 0x00000195u, 0x00000197u, 0x00000199u, 0x0000019bu, 0x0000019du, 0x0000019fu, 0x000001a1u, 0x000001a3u, 0x000200feu, 0x000007cbu, 0x00010038u, 0x00050036u, 0x00000038u, 0x0000003bu, 0x00000000u, 0x00000039u, 0x00030037u, 0x00000033u, 0x0000003au, 0x000200f8u, 0x0000003cu, 0x0004003bu, 0x00000008u, 0x000001a9u, 0x00000007u, 0x0004003du, 0x00000032u, 0x000001aeu, 0x0000003au, 0x00060041u, 0x000001afu, 0x000001b0u, 0x000001adu, 0x0000009bu, 0x000001aeu, 0x0004003du, 0x00000007u, 0x000001b1u, 0x000001b0u, 0x0003003eu, 0x000001a9u, 0x000001b1u, 0x00050041u, 0x00000014u, 0x000001b2u, 0x000001a9u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001b2u, 0x00050041u, 0x00000014u, 0x000001b4u, 0x000001a9u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000001b5u, 0x000001b4u, 0x00050041u, 0x00000014u, 0x000001b7u, 0x000001a9u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x00050041u, 0x00000014u, 0x000001bau, 0x000001a9u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x000001bbu, 0x000001bau, 0x00070050u, 0x00000038u, 0x000001bcu, 0x000001b3u, 0x000001b5u, 0x000001b8u, 0x000001bbu, 0x000200feu, 0x000001bcu, 0x00010038u, 0x00050036u, 0x00000032u, 0x0000003fu, 0x00000000u, 0x0000003du, 0x00030037u, 0x00000033u, 0x0000003eu, 0x000200f8u, 0x00000040u, 0x0004003du, 0x00000032u, 0x000001c3u, 0x0000003eu, 0x00070041u, 0x000001c4u, 0x000001c5u, 0x000001c2u, 0x0000009bu, 0x000001c3u, 0x0000004du, 0x000700eau, 0x00000032u, 0x000001c6u, 0x000001c5u, 0x00000050u, 0x0000004du, 0x00000050u, 0x000200feu, 0x000001c6u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000088bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x0000003du, 0x00020011u, 0x0000003eu, 0x00020011u, 0x0000003fu, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0009000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001deu, 0x000001e9u, 0x000001edu, 0x000001f8u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000185u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000185u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000185u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000185u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000185u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000185u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000185u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000185u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000185u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000185u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000185u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000186u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000187u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000187u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000187u, 0x00000002u, 0x00040047u, 0x00000189u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000189u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001aau, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001abu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001abu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001abu, 0x00000002u, 0x00040047u, 0x000001adu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001adu, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001c9u, 0x00000006u, 0x00000010u, 0x00050048u, 0x000001cau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001cau, 0x00000002u, 0x00040047u, 0x000001ccu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001ccu, 0x00000021u, 0x00000006u, 0x00040047u, 0x000001deu, 0x0000000bu, 0x0000001au, 0x00030047u, 0x000001e9u, 0x00000000u, 0x00040047u, 0x000001e9u, 0x0000000bu, 0x00000029u, 0x00030047u, 0x000001eau, 0x00000000u, 0x00030047u, 0x000001edu, 0x00000000u, 0x00040047u, 0x000001edu, 0x0000000bu, 0x00000024u, 0x00030047u, 0x000001eeu, 0x00000000u, 0x00040047u, 0x000001f8u, 0x0000000bu, 0x00000028u, 0x00040047u, 0x00000200u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000201u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x0000020eu, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000020fu, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000218u, 0x00000001u, 0x00000002u, 0x00050048u, 0x0000022cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000022cu, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x0000022cu, 0x00000002u, 0x00040047u, 0x00000261u, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002d6u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002d7u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002d7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002d7u, 0x00000002u, 0x00040047u, 0x000002d9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002d9u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002dbu, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002e6u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002e7u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002e7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002e7u, 0x00000002u, 0x00040047u, 0x000002e9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002e9u, 0x00000021u, 0x00000004u, 0x00040047u, 0x00000319u, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000031au, 0x00000000u, 0x00000019u, 0x00050048u, 0x0000031au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000031au, 0x00000002u, 0x00040047u, 0x0000031cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000031cu, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000344u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000345u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000345u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000345u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000346u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000347u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000347u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000347u, 0x00000002u, 0x00040047u, 0x00000349u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000349u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000353u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000354u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000354u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000354u, 0x00000002u, 0x00040047u, 0x00000356u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000356u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000358u, 0x00000001u, 0x00000005u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x00040015u, 0x0000001cu, 0x00000010u, 0x00000001u, 0x00040015u, 0x0000001du, 0x00000008u, 0x00000000u, 0x000d001eu, 0x0000001eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00020014u, 0x00000020u, 0x00040020u, 0x00000021u, 0x00000007u, 0x00000020u, 0x00040017u, 0x00000022u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000023u, 0x00000022u, 0x0000001fu, 0x00000008u, 0x00000021u, 0x00000014u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000022u, 0x00070021u, 0x0000002bu, 0x00000020u, 0x0000001fu, 0x0000002au, 0x0000002au, 0x00000014u, 0x00040015u, 0x00000032u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000033u, 0x00000007u, 0x00000032u, 0x00040021u, 0x00000034u, 0x0000001eu, 0x00000033u, 0x0006001eu, 0x00000038u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000039u, 0x00000038u, 0x00000033u, 0x00040021u, 0x0000003du, 0x00000032u, 0x00000033u, 0x0004002bu, 0x00000006u, 0x00000042u, 0x0000000fu, 0x0004002bu, 0x00000032u, 0x0000004du, 0x00000000u, 0x0004002bu, 0x00000032u, 0x00000050u, 0x00000001u, 0x0004001eu, 0x00000068u, 0x00000007u, 0x00000007u, 0x00040017u, 0x0000006du, 0x00000032u, 0x00000004u, 0x00040020u, 0x00000072u, 0x00000007u, 0x0000006du, 0x0004001eu, 0x00000074u, 0x0000006du, 0x0000006du, 0x0004002bu, 0x00000006u, 0x00000082u, 0x00000003u, 0x00040020u, 0x00000083u, 0x00000007u, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x00000087u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x0000008au, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000099u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x0000009bu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000adu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000afu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000c1u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000c3u, 0x00000002u, 0x00040017u, 0x000000d9u, 0x00000020u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000e8u, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000e9u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x0007002cu, 0x00000007u, 0x000000ebu, 0x0000009bu, 0x0000009bu, 0x0000009bu, 0x0000009bu, 0x0004002bu, 0x00000006u, 0x000000efu, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000f0u, 0x000000efu, 0x000000efu, 0x000000efu, 0x000000efu, 0x0004002bu, 0x00000006u, 0x000000f2u, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000f3u, 0x000000f2u, 0x000000f2u, 0x000000f2u, 0x000000f2u, 0x0004002bu, 0x00000006u, 0x00000119u, 0x000007ffu, 0x0005002cu, 0x00000022u, 0x00000128u, 0x0000009bu, 0x000000e8u, 0x0004002bu, 0x00000006u, 0x0000013eu, 0x00000008u, 0x0003002au, 0x00000020u, 0x0000014au, 0x0004002bu, 0x00000006u, 0x0000014du, 0x00000009u, 0x00040020u, 0x0000014eu, 0x00000007u, 0x0000001du, 0x0005002cu, 0x00000022u, 0x0000015du, 0x000000f2u, 0x0000009bu, 0x000d001eu, 0x00000185u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x0003001du, 0x00000186u, 0x00000185u, 0x0003001eu, 0x00000187u, 0x00000186u, 0x00040020u, 0x00000188u, 0x0000000cu, 0x00000187u, 0x0004003bu, 0x00000188u, 0x00000189u, 0x0000000cu, 0x00040020u, 0x0000018bu, 0x0000000cu, 0x00000185u, 0x0004002bu, 0x00000006u, 0x000001a4u, 0x0000000au, 0x0003001du, 0x000001aau, 0x00000007u, 0x0003001eu, 0x000001abu, 0x000001aau, 0x00040020u, 0x000001acu, 0x0000000cu, 0x000001abu, 0x0004003bu, 0x000001acu, 0x000001adu, 0x0000000cu, 0x00040020u, 0x000001afu, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000032u, 0x000001b6u, 0x00000002u, 0x0004002bu, 0x00000032u, 0x000001b9u, 0x00000003u, 0x00030029u, 0x00000020u, 0x000001c0u, 0x0003001du, 0x000001c9u, 0x0000006du, 0x0003001eu, 0x000001cau, 0x000001c9u, 0x00040020u, 0x000001cbu, 0x0000000cu, 0x000001cau, 0x0004003bu, 0x000001cbu, 0x000001ccu, 0x0000000cu, 0x00040020u, 0x000001ceu, 0x0000000cu, 0x00000032u, 0x00040017u, 0x000001dcu, 0x00000032u, 0x00000003u, 0x00040020u, 0x000001ddu, 0x00000001u, 0x000001dcu, 0x0004003bu, 0x000001ddu, 0x000001deu, 0x00000001u, 0x00040020u, 0x000001dfu, 0x00000001u, 0x00000032u, 0x00040017u, 0x000001e4u, 0x00000032u, 0x00000002u, 0x0004003bu, 0x000001dfu, 0x000001e9u, 0x00000001u, 0x0004003bu, 0x000001dfu, 0x000001edu, 0x00000001u, 0x0004003bu, 0x000001dfu, 0x000001f8u, 0x00000001u, 0x00040032u, 0x00000032u, 0x00000200u, 0x00000001u, 0x00060033u, 0x000001dcu, 0x00000201u, 0x00000200u, 0x00000050u, 0x00000050u, 0x00060034u, 0x00000032u, 0x00000202u, 0x00000051u, 0x00000201u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000203u, 0x00000080u, 0x00000202u, 0x0000004du, 0x00060034u, 0x00000006u, 0x00000204u, 0x000000c3u, 0x00000203u, 0x00000082u, 0x00050033u, 0x00000022u, 0x00000205u, 0x0000013eu, 0x00000204u, 0x00040032u, 0x00000006u, 0x0000020eu, 0x00000400u, 0x00040032u, 0x00000006u, 0x0000020fu, 0x00000008u, 0x00060034u, 0x00000006u, 0x00000210u, 0x00000087u, 0x0000020eu, 0x0000020fu, 0x00060034u, 0x00000006u, 0x00000217u, 0x00000084u, 0x0000020fu, 0x0000013eu, 0x00040032u, 0x00000006u, 0x00000218u, 0x00000008u, 0x00060034u, 0x00000006u, 0x00000219u, 0x00000084u, 0x00000218u, 0x00000204u, 0x00050033u, 0x00000022u, 0x0000021au, 0x00000217u, 0x00000219u, 0x00060034u, 0x00000006u, 0x00000227u, 0x00000084u, 0x0000020fu, 0x0000013eu, 0x0004001eu, 0x0000022cu, 0x000001e4u, 0x00000006u, 0x00040020u, 0x0000022du, 0x00000009u, 0x0000022cu, 0x0004003bu, 0x0000022du, 0x0000022eu, 0x00000009u, 0x00040020u, 0x0000022fu, 0x00000009u, 0x000001e4u, 0x00050033u, 0x00000022u, 0x00000238u, 0x0000020fu, 0x00000218u, 0x00050033u, 0x00000022u, 0x0000023cu, 0x0000020fu, 0x00000218u, 0x00040020u, 0x00000245u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000024au, 0x00000020u, 0x00040020u, 0x0000025au, 0x00000007u, 0x00000038u, 0x00040032u, 0x00000006u, 0x00000261u, 0x00000001u, 0x0003001du, 0x000002d6u, 0x00000032u, 0x0003001eu, 0x000002d7u, 0x000002d6u, 0x00040020u, 0x000002d8u, 0x0000000cu, 0x000002d7u, 0x0004003bu, 0x000002d8u, 0x000002d9u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002dbu, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002dcu, 0x00000087u, 0x000002dbu, 0x0000024au, 0x0003001du, 0x000002e6u, 0x00000032u, 0x0003001eu, 0x000002e7u, 0x000002e6u, 0x00040020u, 0x000002e8u, 0x0000000cu, 0x000002e7u, 0x0004003bu, 0x000002e8u, 0x000002e9u, 0x0000000cu, 0x0003001du, 0x00000319u, 0x00000032u, 0x0003001eu, 0x0000031au, 0x00000319u, 0x00040020u, 0x0000031bu, 0x0000000cu, 0x0000031au, 0x0004003bu, 0x0000031bu, 0x0000031cu, 0x0000000cu, 0x00040017u, 0x00000342u, 0x0000001du, 0x00000004u, 0x0004002bu, 0x00000032u, 0x00000343u, 0x00000008u, 0x0004001cu, 0x00000344u, 0x0000001du, 0x00000343u, 0x0005001eu, 0x00000345u, 0x00000342u, 0x00000342u, 0x00000344u, 0x0003001du, 0x00000346u, 0x00000345u, 0x0003001eu, 0x00000347u, 0x00000346u, 0x00040020u, 0x00000348u, 0x0000000cu, 0x00000347u, 0x0004003bu, 0x00000348u, 0x00000349u, 0x0000000cu, 0x00040020u, 0x0000034bu, 0x0000000cu, 0x0000001du, 0x0003001du, 0x00000353u, 0x0000006du, 0x0003001eu, 0x00000354u, 0x00000353u, 0x00040020u, 0x00000355u, 0x0000000cu, 0x00000354u, 0x0004003bu, 0x00000355u, 0x00000356u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x00000358u, 0x00008000u, 0x00060034u, 0x00000032u, 0x00000359u, 0x00000080u, 0x00000358u, 0x0000004du, 0x00040020u, 0x00000367u, 0x0000000cu, 0x0000006du, 0x0004002bu, 0x00000006u, 0x0000036bu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x0000036cu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x0000036du, 0x00000080u, 0x0004002bu, 0x00000006u, 0x0000036eu, 0x00000100u, 0x0004002bu, 0x00000006u, 0x0000036fu, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00000370u, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000371u, 0x00000800u, 0x0004002bu, 0x00000006u, 0x00000372u, 0x00001000u, 0x0004002bu, 0x00000006u, 0x00000373u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00000374u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00000375u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00000376u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00000377u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00000378u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00000379u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x0000037au, 0x00100000u, 0x0004002bu, 0x00000006u, 0x0000037bu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x0000037cu, 0x00400000u, 0x0004002bu, 0x00000006u, 0x0000037du, 0x00800000u, 0x0004002bu, 0x00000006u, 0x0000037eu, 0x01000000u, 0x0004002bu, 0x00000006u, 0x0000037fu, 0x0000001au, 0x0004002bu, 0x00000006u, 0x00000380u, 0x10000000u, 0x0004002bu, 0x00000006u, 0x00000381u, 0x20000000u, 0x0004002bu, 0x00000006u, 0x00000382u, 0x40000000u, 0x0003002eu, 0x0000001cu, 0x000006c1u, 0x0003002eu, 0x0000001du, 0x000006c2u, 0x0005002cu, 0x00000022u, 0x0000087cu, 0x000000afu, 0x000000afu, 0x0005002cu, 0x00000022u, 0x0000087du, 0x000000c3u, 0x000000c3u, 0x0007002cu, 0x00000007u, 0x0000087eu, 0x00000042u, 0x00000042u, 0x00000042u, 0x00000042u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000014eu, 0x000007e3u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007e2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007e1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007e0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007dfu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007deu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007ddu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007dcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007dbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007dau, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000007c2u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000007c1u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007c0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007beu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bdu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007bcu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007bau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007b0u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000079au, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000799u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000798u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000797u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000796u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000795u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000794u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000793u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000792u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000791u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000779u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000777u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000775u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000774u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000773u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000772u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000771u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000770u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000076fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000076au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000769u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000768u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000767u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075au, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000742u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000741u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000740u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073du, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000073cu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x0000073bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000739u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000738u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000072bu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000072au, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000729u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000728u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000727u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000726u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000725u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000724u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000723u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000722u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000721u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000718u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000717u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000716u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000715u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000714u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000713u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000711u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000707u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000706u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000705u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000704u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006ecu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006ebu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006eau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e7u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006e5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e2u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006d5u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000006d4u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006d3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d0u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006cfu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006ceu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ccu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006beu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006bdu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000006bcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b9u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x000006a4u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006a5u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006a6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006a7u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000698u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000699u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000068cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000680u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000681u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000067cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000678u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000065fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000660u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x00000661u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000662u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000646u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000647u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x00000648u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000649u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000062du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x00000072u, 0x0000062fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000630u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000597u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000598u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000599u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000059au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000059bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000059cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000059du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000059eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000059fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005a2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005a3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005a8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005a9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005aau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005abu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005acu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005adu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005aeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005afu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b2u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000005b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b5u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000005b6u, 0x00000007u, 0x0005003bu, 0x00000021u, 0x00000540u, 0x00000007u, 0x0000014au, 0x0004003bu, 0x00000021u, 0x00000541u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000542u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000543u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000544u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000545u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000546u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000548u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000549u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000054au, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000054bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000516u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000050au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000050bu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004feu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004ffu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004f2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004f3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004eeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004eau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004d1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004d2u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x000004d3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004b9u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x000004bau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004bbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000049fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a0u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x000004a1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004a2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000409u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000040au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000040bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000040cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000040du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000040eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000040fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000410u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000411u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000412u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000413u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000414u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000415u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000416u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000417u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000418u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000419u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000041au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000041bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000041fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000420u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000421u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000422u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000423u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000424u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000425u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000426u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000427u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000428u, 0x00000007u, 0x0005003bu, 0x00000021u, 0x000003b2u, 0x00000007u, 0x0000014au, 0x0004003bu, 0x00000021u, 0x000003b3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003b4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003b5u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000003b6u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003b7u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000003b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000003bau, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000003bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000003bcu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000003bdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000388u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001dbu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001e3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001e8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001ecu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001f1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001f4u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001feu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000020bu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000215u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000225u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000236u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000023au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000244u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000248u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000024eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000025cu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000025fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000026eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000027fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000284u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000286u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000288u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000028au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000028eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000296u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000029eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002a5u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002a8u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002b4u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002c5u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002cau, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002ccu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002ceu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002f6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002fau, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000300u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000323u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000032du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000335u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000341u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000034fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000350u, 0x00000007u, 0x00050041u, 0x000001dfu, 0x000001e0u, 0x000001deu, 0x0000004du, 0x0004003du, 0x00000032u, 0x000001e1u, 0x000001e0u, 0x0004007cu, 0x00000006u, 0x000001e2u, 0x000001e1u, 0x0003003eu, 0x000001dbu, 0x000001e2u, 0x0004003du, 0x000001dcu, 0x000001e5u, 0x000001deu, 0x0007004fu, 0x000001e4u, 0x000001e6u, 0x000001e5u, 0x000001e5u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000022u, 0x000001e7u, 0x000001e6u, 0x0003003eu, 0x000001e3u, 0x000001e7u, 0x0004003du, 0x00000032u, 0x000001eau, 0x000001e9u, 0x0004007cu, 0x00000006u, 0x000001ebu, 0x000001eau, 0x0003003eu, 0x000001e8u, 0x000001ebu, 0x0004003du, 0x00000032u, 0x000001eeu, 0x000001edu, 0x0004007cu, 0x00000006u, 0x000001efu, 0x000001eeu, 0x000500c3u, 0x00000006u, 0x000001f0u, 0x000001efu, 0x00000082u, 0x0003003eu, 0x000001ecu, 0x000001f0u, 0x000500c7u, 0x00000006u, 0x000001f3u, 0x000001ebu, 0x000000c1u, 0x0003003eu, 0x000001f1u, 0x000001f3u, 0x000500c3u, 0x00000006u, 0x000001f6u, 0x000001ebu, 0x00000082u, 0x0003003eu, 0x000001f4u, 0x000001f6u, 0x0004003du, 0x00000032u, 0x000001f9u, 0x000001f8u, 0x0004007cu, 0x00000006u, 0x000001fau, 0x000001f9u, 0x00050084u, 0x00000006u, 0x000001fbu, 0x000001f0u, 0x000001fau, 0x00050080u, 0x00000006u, 0x000001fdu, 0x000001f6u, 0x000001fbu, 0x0003003eu, 0x000001f4u, 0x000001fdu, 0x00050084u, 0x00000022u, 0x00000206u, 0x000001e7u, 0x00000205u, 0x00050050u, 0x00000022u, 0x00000209u, 0x000001f3u, 0x000001fdu, 0x00050080u, 0x00000022u, 0x0000020au, 0x00000206u, 0x00000209u, 0x0003003eu, 0x000001feu, 0x0000020au, 0x00050041u, 0x00000014u, 0x0000020cu, 0x000001feu, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000020du, 0x0000020cu, 0x00050084u, 0x00000006u, 0x00000211u, 0x0000020du, 0x00000210u, 0x00050041u, 0x00000014u, 0x00000212u, 0x000001feu, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000213u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000214u, 0x00000211u, 0x00000213u, 0x0003003eu, 0x0000020bu, 0x00000214u, 0x00050084u, 0x00000022u, 0x0000021bu, 0x000001e7u, 0x0000021au, 0x0003003eu, 0x00000215u, 0x0000021bu, 0x00050084u, 0x00000006u, 0x0000021du, 0x000001f0u, 0x00000218u, 0x00050084u, 0x00000006u, 0x00000220u, 0x0000021du, 0x000001fau, 0x00050041u, 0x00000014u, 0x00000221u, 0x00000215u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000222u, 0x00000221u, 0x00050080u, 0x00000006u, 0x00000223u, 0x00000222u, 0x00000220u, 0x0003003eu, 0x00000221u, 0x00000223u, 0x0004003du, 0x00000022u, 0x00000226u, 0x00000215u, 0x00050084u, 0x00000006u, 0x00000229u, 0x00000218u, 0x000001f0u, 0x00050050u, 0x00000022u, 0x0000022au, 0x00000227u, 0x00000229u, 0x00050080u, 0x00000022u, 0x0000022bu, 0x00000226u, 0x0000022au, 0x00050041u, 0x0000022fu, 0x00000230u, 0x0000022eu, 0x0000009bu, 0x0004003du, 0x000001e4u, 0x00000231u, 0x00000230u, 0x0004007cu, 0x00000022u, 0x00000232u, 0x00000231u, 0x0007000cu, 0x00000022u, 0x00000233u, 0x00000001u, 0x00000027u, 0x0000022bu, 0x00000232u, 0x00050082u, 0x00000022u, 0x00000235u, 0x00000233u, 0x0000087cu, 0x0003003eu, 0x00000225u, 0x00000235u, 0x0004003du, 0x00000022u, 0x00000237u, 0x000001feu, 0x00050084u, 0x00000022u, 0x00000239u, 0x00000237u, 0x00000238u, 0x0003003eu, 0x00000236u, 0x00000239u, 0x00050080u, 0x00000022u, 0x0000023du, 0x00000239u, 0x0000023cu, 0x0007000cu, 0x00000022u, 0x00000241u, 0x00000001u, 0x00000027u, 0x0000023du, 0x00000232u, 0x00050082u, 0x00000022u, 0x00000243u, 0x00000241u, 0x0000087cu, 0x0003003eu, 0x0000023au, 0x00000243u, 0x00050041u, 0x00000245u, 0x00000246u, 0x0000022eu, 0x000000afu, 0x0004003du, 0x00000006u, 0x00000247u, 0x00000246u, 0x0003003eu, 0x00000244u, 0x00000247u, 0x0003003eu, 0x00000248u, 0x0000014au, 0x000500b1u, 0x00000020u, 0x0000024bu, 0x000001ebu, 0x0000024au, 0x000300f7u, 0x0000024du, 0x00000000u, 0x000400fau, 0x0000024bu, 0x0000024cu, 0x0000024du, 0x000200f8u, 0x0000024cu, 0x00050084u, 0x00000006u, 0x00000250u, 0x000001e2u, 0x0000024au, 0x00050080u, 0x00000006u, 0x00000252u, 0x00000250u, 0x000001ebu, 0x0004007cu, 0x00000032u, 0x00000253u, 0x00000252u, 0x0003003eu, 0x0000024eu, 0x00000253u, 0x0004007cu, 0x00000032u, 0x00000256u, 0x00000247u, 0x000500b0u, 0x00000020u, 0x00000257u, 0x00000253u, 0x00000256u, 0x000300f7u, 0x00000259u, 0x00000000u, 0x000400fau, 0x00000257u, 0x00000258u, 0x00000259u, 0x000200f8u, 0x00000258u, 0x0003003eu, 0x0000025cu, 0x00000253u, 0x00060041u, 0x000001afu, 0x0000038bu, 0x000001adu, 0x0000009bu, 0x00000253u, 0x0004003du, 0x00000007u, 0x0000038cu, 0x0000038bu, 0x0003003eu, 0x00000388u, 0x0000038cu, 0x00050041u, 0x00000014u, 0x0000038du, 0x00000388u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000038eu, 0x0000038du, 0x00050041u, 0x00000014u, 0x0000038fu, 0x00000388u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000390u, 0x0000038fu, 0x00050041u, 0x00000014u, 0x00000391u, 0x00000388u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x00000392u, 0x00000391u, 0x00050041u, 0x00000014u, 0x00000393u, 0x00000388u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x00000394u, 0x00000393u, 0x00070050u, 0x00000038u, 0x00000395u, 0x0000038eu, 0x00000390u, 0x00000392u, 0x00000394u, 0x0003003eu, 0x0000075au, 0x0000038eu, 0x0003003eu, 0x0000075bu, 0x00000390u, 0x0003003eu, 0x0000075cu, 0x00000392u, 0x0003003eu, 0x0000075du, 0x00000394u, 0x0003003eu, 0x00000767u, 0x0000038eu, 0x0003003eu, 0x00000768u, 0x00000390u, 0x0003003eu, 0x00000769u, 0x00000392u, 0x0003003eu, 0x0000076au, 0x00000394u, 0x0004003du, 0x00000022u, 0x00000260u, 0x00000215u, 0x00050050u, 0x00000022u, 0x00000266u, 0x0000038eu, 0x00000390u, 0x000500c3u, 0x00000022u, 0x00000268u, 0x00000266u, 0x0000087du, 0x00050050u, 0x00000022u, 0x00000269u, 0x00000261u, 0x00000261u, 0x00050084u, 0x00000022u, 0x0000026au, 0x00000269u, 0x00000268u, 0x00050082u, 0x00000022u, 0x0000026cu, 0x0000026au, 0x0000087cu, 0x0007000cu, 0x00000022u, 0x0000026du, 0x00000001u, 0x0000002au, 0x00000260u, 0x0000026cu, 0x0003003eu, 0x0000025fu, 0x0000026du, 0x00050080u, 0x00000006u, 0x00000272u, 0x00000392u, 0x00000082u, 0x00050080u, 0x00000006u, 0x00000275u, 0x00000394u, 0x00000082u, 0x00050050u, 0x00000022u, 0x00000276u, 0x00000272u, 0x00000275u, 0x000500c3u, 0x00000022u, 0x00000278u, 0x00000276u, 0x0000087du, 0x00050084u, 0x00000022u, 0x0000027au, 0x00000269u, 0x00000278u, 0x00050082u, 0x00000022u, 0x0000027cu, 0x0000027au, 0x0000087cu, 0x0007000cu, 0x00000022u, 0x0000027du, 0x00000001u, 0x00000027u, 0x00000235u, 0x0000027cu, 0x0003003eu, 0x0000026eu, 0x0000027du, 0x0003003eu, 0x0000027fu, 0x00000253u, 0x00060041u, 0x0000018bu, 0x00000399u, 0x00000189u, 0x0000009bu, 0x00000253u, 0x0004003du, 0x00000185u, 0x0000039au, 0x00000399u, 0x00050051u, 0x00000006u, 0x0000039bu, 0x0000039au, 0x00000000u, 0x0003003eu, 0x00000721u, 0x0000039bu, 0x00050051u, 0x00000006u, 0x0000039du, 0x0000039au, 0x00000001u, 0x0003003eu, 0x00000722u, 0x0000039du, 0x00050051u, 0x00000006u, 0x0000039fu, 0x0000039au, 0x00000002u, 0x0003003eu, 0x00000723u, 0x0000039fu, 0x00050051u, 0x0000001cu, 0x000003a1u, 0x0000039au, 0x00000003u, 0x0003003eu, 0x00000724u, 0x000003a1u, 0x00050051u, 0x0000001cu, 0x000003a3u, 0x0000039au, 0x00000004u, 0x0003003eu, 0x00000725u, 0x000003a3u, 0x00050051u, 0x00000006u, 0x000003a5u, 0x0000039au, 0x00000005u, 0x0003003eu, 0x00000726u, 0x000003a5u, 0x00050051u, 0x00000006u, 0x000003a7u, 0x0000039au, 0x00000006u, 0x0003003eu, 0x00000727u, 0x000003a7u, 0x00050051u, 0x00000006u, 0x000003a9u, 0x0000039au, 0x00000007u, 0x0003003eu, 0x00000728u, 0x000003a9u, 0x00050051u, 0x0000001cu, 0x000003abu, 0x0000039au, 0x00000008u, 0x0003003eu, 0x00000729u, 0x000003abu, 0x00050051u, 0x0000001du, 0x000003adu, 0x0000039au, 0x00000009u, 0x0003003eu, 0x0000072au, 0x000003adu, 0x00050051u, 0x0000001du, 0x000003afu, 0x0000039au, 0x0000000au, 0x0003003eu, 0x0000072bu, 0x000003afu, 0x000e0050u, 0x0000001eu, 0x00000737u, 0x0000039bu, 0x0000039du, 0x0000039fu, 0x000003a1u, 0x000003a3u, 0x000003a5u, 0x000003a7u, 0x000003a9u, 0x000003abu, 0x000003adu, 0x000003afu, 0x0003003eu, 0x00000738u, 0x0000039bu, 0x0003003eu, 0x00000739u, 0x0000039du, 0x0003003eu, 0x0000073au, 0x0000039fu, 0x0003003eu, 0x0000073bu, 0x000003a1u, 0x0003003eu, 0x0000073cu, 0x000003a3u, 0x0003003eu, 0x0000073du, 0x000003a5u, 0x0003003eu, 0x0000073eu, 0x000003a7u, 0x0003003eu, 0x0000073fu, 0x000003a9u, 0x0003003eu, 0x00000740u, 0x000003abu, 0x0003003eu, 0x00000741u, 0x000003adu, 0x0003003eu, 0x00000742u, 0x000003afu, 0x0003003eu, 0x0000076fu, 0x0000039bu, 0x0003003eu, 0x00000770u, 0x0000039du, 0x0003003eu, 0x00000771u, 0x0000039fu, 0x0003003eu, 0x00000772u, 0x000003a1u, 0x0003003eu, 0x00000773u, 0x000003a3u, 0x0003003eu, 0x00000774u, 0x000003a5u, 0x0003003eu, 0x00000775u, 0x000003a7u, 0x0003003eu, 0x00000776u, 0x000003a9u, 0x0003003eu, 0x00000777u, 0x000003abu, 0x0003003eu, 0x00000778u, 0x000003adu, 0x0003003eu, 0x00000779u, 0x000003afu, 0x0003003eu, 0x00000791u, 0x0000039bu, 0x0003003eu, 0x00000792u, 0x0000039du, 0x0003003eu, 0x00000793u, 0x0000039fu, 0x0003003eu, 0x00000794u, 0x000003a1u, 0x0003003eu, 0x00000795u, 0x000003a3u, 0x0003003eu, 0x00000796u, 0x000003a5u, 0x0003003eu, 0x00000797u, 0x000003a7u, 0x0003003eu, 0x00000798u, 0x000003a9u, 0x0003003eu, 0x00000799u, 0x000003abu, 0x0003003eu, 0x0000079au, 0x000003adu, 0x0003003eu, 0x00000284u, 0x0000026du, 0x0003003eu, 0x00000286u, 0x0000027du, 0x0003003eu, 0x00000288u, 0x00000261u, 0x0003003eu, 0x000003b2u, 0x0000014au, 0x000300f7u, 0x000003beu, 0x00000000u, 0x000300fbu, 0x0000004du, 0x000003bfu, 0x000200f8u, 0x000003bfu, 0x00050041u, 0x00000014u, 0x000003c0u, 0x00000284u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000003c1u, 0x000003c0u, 0x00050084u, 0x00000006u, 0x000003c2u, 0x000003c1u, 0x0000008au, 0x0003003eu, 0x000003b4u, 0x000003c2u, 0x00050041u, 0x00000014u, 0x000003c3u, 0x00000286u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000003c4u, 0x000003c3u, 0x00050084u, 0x00000006u, 0x000003c5u, 0x000003c4u, 0x0000008au, 0x00050080u, 0x00000006u, 0x000003c6u, 0x000003c5u, 0x00000082u, 0x0003003eu, 0x000003b5u, 0x000003c6u, 0x00040072u, 0x00000006u, 0x000003cbu, 0x000003a1u, 0x00050084u, 0x00000006u, 0x000003ccu, 0x00000261u, 0x000003cbu, 0x0007000cu, 0x00000006u, 0x000003cdu, 0x00000001u, 0x0000002au, 0x000003c2u, 0x000003ccu, 0x0003003eu, 0x000003b4u, 0x000003cdu, 0x00040072u, 0x00000006u, 0x000003d2u, 0x000003abu, 0x00050084u, 0x00000006u, 0x000003d3u, 0x00000261u, 0x000003d2u, 0x00050082u, 0x00000006u, 0x000003d4u, 0x000003d3u, 0x000000afu, 0x0007000cu, 0x00000006u, 0x000003d5u, 0x00000001u, 0x00000027u, 0x000003c6u, 0x000003d4u, 0x0003003eu, 0x000003b5u, 0x000003d5u, 0x000500b1u, 0x00000020u, 0x000003d8u, 0x000003d5u, 0x000003cdu, 0x000300f7u, 0x000003d9u, 0x00000000u, 0x000400fau, 0x000003d8u, 0x000003dau, 0x000003d9u, 0x000200f8u, 0x000003dau, 0x0003003eu, 0x000003b2u, 0x000001c0u, 0x0003003eu, 0x000003b3u, 0x0000014au, 0x000200f9u, 0x000003beu, 0x000200f8u, 0x000003d9u, 0x00040071u, 0x00000032u, 0x000003ddu, 0x000003adu, 0x0004007cu, 0x00000006u, 0x000003deu, 0x000003ddu, 0x000500c7u, 0x00000006u, 0x000003dfu, 0x000003deu, 0x000000afu, 0x000500abu, 0x00000020u, 0x000003e0u, 0x000003dfu, 0x0000009bu, 0x0003003eu, 0x000003b6u, 0x000003e0u, 0x00040072u, 0x00000006u, 0x000003e5u, 0x000003a3u, 0x00050084u, 0x00000006u, 0x000003e7u, 0x000003e5u, 0x00000261u, 0x00050050u, 0x00000022u, 0x000003e8u, 0x000003e7u, 0x000003e7u, 0x00050080u, 0x00000022u, 0x000003e9u, 0x000003e8u, 0x0000015du, 0x00050050u, 0x00000022u, 0x000003ebu, 0x000003cdu, 0x000003cdu, 0x00050050u, 0x00000022u, 0x000003edu, 0x000003d5u, 0x000003d5u, 0x0008000cu, 0x00000022u, 0x000003eeu, 0x00000001u, 0x0000002du, 0x000003e9u, 0x000003ebu, 0x000003edu, 0x00050051u, 0x00000006u, 0x000003efu, 0x000003eeu, 0x00000000u, 0x00050051u, 0x00000006u, 0x000003f0u, 0x000003eeu, 0x00000001u, 0x00070050u, 0x00000007u, 0x000003f1u, 0x000003cdu, 0x000003d5u, 0x000003efu, 0x000003f0u, 0x0003003eu, 0x000003b7u, 0x000003f1u, 0x000e0050u, 0x0000001eu, 0x000007afu, 0x0000039bu, 0x0000039du, 0x0000039fu, 0x000003a1u, 0x000003a3u, 0x000003a5u, 0x000003a7u, 0x000003a9u, 0x000003abu, 0x000003adu, 0x000006c2u, 0x0003003eu, 0x00000711u, 0x0000039bu, 0x0003003eu, 0x00000712u, 0x0000039du, 0x0003003eu, 0x00000713u, 0x0000039fu, 0x0003003eu, 0x00000714u, 0x000003a1u, 0x0003003eu, 0x00000715u, 0x000003a3u, 0x0003003eu, 0x00000716u, 0x000003a5u, 0x0003003eu, 0x00000717u, 0x000003a7u, 0x0003003eu, 0x00000718u, 0x000003a9u, 0x0003003eu, 0x000003bau, 0x000003f1u, 0x0003003eu, 0x000003bbu, 0x000003e0u, 0x0003003eu, 0x000003bcu, 0x00000261u, 0x000500c7u, 0x00000006u, 0x0000042cu, 0x000003cbu, 0x00000087u, 0x0003003eu, 0x00000409u, 0x0000042cu, 0x0003003eu, 0x0000040au, 0x000003e5u, 0x00050084u, 0x00000006u, 0x00000432u, 0x0000042cu, 0x00000261u, 0x0003003eu, 0x00000409u, 0x00000432u, 0x0003003eu, 0x0000040au, 0x000003e7u, 0x00070050u, 0x00000007u, 0x00000438u, 0x00000432u, 0x00000432u, 0x00000432u, 0x00000432u, 0x00050082u, 0x00000007u, 0x00000439u, 0x000003f1u, 0x00000438u, 0x00050084u, 0x00000006u, 0x0000043du, 0x00000261u, 0x0000039bu, 0x0003003eu, 0x0000040du, 0x00000439u, 0x0003003eu, 0x0000040eu, 0x000003a5u, 0x0003003eu, 0x0000040fu, 0x0000043du, 0x00070050u, 0x00000007u, 0x000004a5u, 0x000003a5u, 0x000003a5u, 0x000003a5u, 0x000003a5u, 0x00050098u, 0x00000068u, 0x000004a6u, 0x00000439u, 0x000004a5u, 0x00050051u, 0x00000007u, 0x000004a7u, 0x000004a6u, 0x00000000u, 0x0003003eu, 0x000004a0u, 0x000004a7u, 0x00050051u, 0x00000007u, 0x000004a8u, 0x000004a6u, 0x00000001u, 0x0003003eu, 0x0000049fu, 0x000004a8u, 0x0004007cu, 0x0000006du, 0x000004aau, 0x000004a7u, 0x0004007cu, 0x00000032u, 0x000004acu, 0x0000043du, 0x00070050u, 0x0000006du, 0x000004adu, 0x000004acu, 0x000004acu, 0x000004acu, 0x000004acu, 0x00050095u, 0x00000074u, 0x000004aeu, 0x000004aau, 0x000004adu, 0x00050051u, 0x0000006du, 0x000004afu, 0x000004aeu, 0x00000001u, 0x0003003eu, 0x000004a1u, 0x000004afu, 0x00050051u, 0x0000006du, 0x000004b0u, 0x000004aeu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004b1u, 0x000004b0u, 0x0003003eu, 0x000004a0u, 0x000004b1u, 0x0004007cu, 0x00000007u, 0x000004b3u, 0x000004afu, 0x00050080u, 0x00000007u, 0x000004b5u, 0x000004a8u, 0x000004b3u, 0x0003003eu, 0x0000049fu, 0x000004b5u, 0x0003003eu, 0x00000410u, 0x000004b5u, 0x0003003eu, 0x000004a2u, 0x000004b1u, 0x0003003eu, 0x0000040cu, 0x000004b5u, 0x0003003eu, 0x0000040bu, 0x000004b1u, 0x00050084u, 0x00000006u, 0x00000449u, 0x00000261u, 0x0000039du, 0x0003003eu, 0x00000413u, 0x00000439u, 0x0003003eu, 0x00000414u, 0x000003a7u, 0x0003003eu, 0x00000415u, 0x00000449u, 0x00070050u, 0x00000007u, 0x000004beu, 0x000003a7u, 0x000003a7u, 0x000003a7u, 0x000003a7u, 0x00050098u, 0x00000068u, 0x000004bfu, 0x00000439u, 0x000004beu, 0x00050051u, 0x00000007u, 0x000004c0u, 0x000004bfu, 0x00000000u, 0x0003003eu, 0x000004b9u, 0x000004c0u, 0x00050051u, 0x00000007u, 0x000004c1u, 0x000004bfu, 0x00000001u, 0x0003003eu, 0x000004b8u, 0x000004c1u, 0x0004007cu, 0x0000006du, 0x000004c3u, 0x000004c0u, 0x0004007cu, 0x00000032u, 0x000004c5u, 0x00000449u, 0x00070050u, 0x0000006du, 0x000004c6u, 0x000004c5u, 0x000004c5u, 0x000004c5u, 0x000004c5u, 0x00050095u, 0x00000074u, 0x000004c7u, 0x000004c3u, 0x000004c6u, 0x00050051u, 0x0000006du, 0x000004c8u, 0x000004c7u, 0x00000001u, 0x0003003eu, 0x000004bau, 0x000004c8u, 0x00050051u, 0x0000006du, 0x000004c9u, 0x000004c7u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004cau, 0x000004c9u, 0x0003003eu, 0x000004b9u, 0x000004cau, 0x0004007cu, 0x00000007u, 0x000004ccu, 0x000004c8u, 0x00050080u, 0x00000007u, 0x000004ceu, 0x000004c1u, 0x000004ccu, 0x0003003eu, 0x000004b8u, 0x000004ceu, 0x0003003eu, 0x00000416u, 0x000004ceu, 0x0003003eu, 0x000004bbu, 0x000004cau, 0x0003003eu, 0x00000412u, 0x000004ceu, 0x0003003eu, 0x00000411u, 0x000004cau, 0x00070050u, 0x00000007u, 0x00000450u, 0x000003e7u, 0x000003e7u, 0x000003e7u, 0x000003e7u, 0x00050082u, 0x00000007u, 0x00000451u, 0x000003f1u, 0x00000450u, 0x00050084u, 0x00000006u, 0x00000455u, 0x00000261u, 0x0000039fu, 0x0003003eu, 0x00000419u, 0x00000451u, 0x0003003eu, 0x0000041au, 0x000003a9u, 0x0003003eu, 0x0000041bu, 0x00000455u, 0x00070050u, 0x00000007u, 0x000004d7u, 0x000003a9u, 0x000003a9u, 0x000003a9u, 0x000003a9u, 0x00050098u, 0x00000068u, 0x000004d8u, 0x00000451u, 0x000004d7u, 0x00050051u, 0x00000007u, 0x000004d9u, 0x000004d8u, 0x00000000u, 0x0003003eu, 0x000004d2u, 0x000004d9u, 0x00050051u, 0x00000007u, 0x000004dau, 0x000004d8u, 0x00000001u, 0x0003003eu, 0x000004d1u, 0x000004dau, 0x0004007cu, 0x0000006du, 0x000004dcu, 0x000004d9u, 0x0004007cu, 0x00000032u, 0x000004deu, 0x00000455u, 0x00070050u, 0x0000006du, 0x000004dfu, 0x000004deu, 0x000004deu, 0x000004deu, 0x000004deu, 0x00050095u, 0x00000074u, 0x000004e0u, 0x000004dcu, 0x000004dfu, 0x00050051u, 0x0000006du, 0x000004e1u, 0x000004e0u, 0x00000001u, 0x0003003eu, 0x000004d3u, 0x000004e1u, 0x00050051u, 0x0000006du, 0x000004e2u, 0x000004e0u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000004e3u, 0x000004e2u, 0x0003003eu, 0x000004d2u, 0x000004e3u, 0x0004007cu, 0x00000007u, 0x000004e5u, 0x000004e1u, 0x00050080u, 0x00000007u, 0x000004e7u, 0x000004dau, 0x000004e5u, 0x0003003eu, 0x000004d1u, 0x000004e7u, 0x0003003eu, 0x0000041cu, 0x000004e7u, 0x0003003eu, 0x000004d4u, 0x000004e3u, 0x0003003eu, 0x00000418u, 0x000004e7u, 0x0003003eu, 0x00000417u, 0x000004e3u, 0x00050084u, 0x00000006u, 0x00000461u, 0x00000261u, 0x000003e5u, 0x00070050u, 0x00000007u, 0x00000462u, 0x00000461u, 0x00000461u, 0x00000461u, 0x00000461u, 0x000500b1u, 0x000000d9u, 0x00000463u, 0x000003f1u, 0x00000462u, 0x000600a9u, 0x00000007u, 0x00000464u, 0x00000463u, 0x000004cau, 0x000004e3u, 0x0003003eu, 0x00000417u, 0x00000464u, 0x000600a9u, 0x00000007u, 0x0000046fu, 0x00000463u, 0x000004ceu, 0x000004e7u, 0x0003003eu, 0x00000418u, 0x0000046fu, 0x000500adu, 0x000000d9u, 0x00000472u, 0x000004b5u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x00000473u, 0x00000472u, 0x000000e9u, 0x000004b1u, 0x0003003eu, 0x0000040bu, 0x00000473u, 0x000500b1u, 0x000000d9u, 0x00000476u, 0x000004b5u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x00000477u, 0x00000476u, 0x000000f0u, 0x00000473u, 0x0003003eu, 0x0000040bu, 0x00000477u, 0x000500adu, 0x000000d9u, 0x0000047au, 0x0000046fu, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x0000047bu, 0x0000047au, 0x000000e9u, 0x00000464u, 0x0003003eu, 0x00000417u, 0x0000047bu, 0x000500b1u, 0x000000d9u, 0x0000047eu, 0x0000046fu, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x0000047fu, 0x0000047eu, 0x000000f0u, 0x0000047bu, 0x0003003eu, 0x00000417u, 0x0000047fu, 0x0003003eu, 0x0000041eu, 0x00000477u, 0x000500c3u, 0x00000007u, 0x000004edu, 0x00000477u, 0x0000087eu, 0x0003003eu, 0x000004eau, 0x000004edu, 0x0003003eu, 0x0000041du, 0x000004edu, 0x0003003eu, 0x00000420u, 0x0000047fu, 0x000500c3u, 0x00000007u, 0x000004f1u, 0x0000047fu, 0x0000087eu, 0x0003003eu, 0x000004eeu, 0x000004f1u, 0x0003003eu, 0x0000041fu, 0x000004f1u, 0x000300f7u, 0x00000485u, 0x00000000u, 0x000400fau, 0x000003e0u, 0x00000486u, 0x00000487u, 0x000200f8u, 0x00000486u, 0x0003003eu, 0x00000421u, 0x000004edu, 0x0003003eu, 0x00000422u, 0x000004f1u, 0x000200f9u, 0x00000485u, 0x000200f8u, 0x00000487u, 0x0003003eu, 0x00000421u, 0x000004f1u, 0x0003003eu, 0x00000422u, 0x000004edu, 0x000200f9u, 0x00000485u, 0x000200f8u, 0x00000485u, 0x00070050u, 0x000000d9u, 0x0000087fu, 0x000003e0u, 0x000003e0u, 0x000003e0u, 0x000003e0u, 0x000600a9u, 0x00000007u, 0x00000880u, 0x0000087fu, 0x000004f1u, 0x000004edu, 0x000600a9u, 0x00000007u, 0x00000882u, 0x0000087fu, 0x000004edu, 0x000004f1u, 0x0006000cu, 0x00000007u, 0x0000048du, 0x00000001u, 0x00000005u, 0x00000882u, 0x0006000cu, 0x00000007u, 0x0000048fu, 0x00000001u, 0x00000005u, 0x00000880u, 0x0007000cu, 0x00000007u, 0x00000490u, 0x00000001u, 0x0000002au, 0x0000048du, 0x0000048fu, 0x0003003eu, 0x00000424u, 0x00000490u, 0x0007004fu, 0x00000022u, 0x000004f5u, 0x00000490u, 0x00000490u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000004f7u, 0x00000490u, 0x00000490u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000004f8u, 0x00000001u, 0x0000002au, 0x000004f5u, 0x000004f7u, 0x0003003eu, 0x000004f2u, 0x000004f8u, 0x00050041u, 0x00000014u, 0x000004f9u, 0x000004f2u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000004fau, 0x000004f9u, 0x00050041u, 0x00000014u, 0x000004fbu, 0x000004f2u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000004fcu, 0x000004fbu, 0x0007000cu, 0x00000006u, 0x000004fdu, 0x00000001u, 0x0000002au, 0x000004fau, 0x000004fcu, 0x0003003eu, 0x000004f3u, 0x000004fdu, 0x0003003eu, 0x00000423u, 0x000004fdu, 0x00050084u, 0x00000006u, 0x00000494u, 0x00000119u, 0x00000261u, 0x000500b3u, 0x00000020u, 0x00000495u, 0x000004fdu, 0x00000494u, 0x000300f7u, 0x00000496u, 0x00000000u, 0x000400fau, 0x00000495u, 0x00000497u, 0x00000498u, 0x000200f8u, 0x00000497u, 0x0003003eu, 0x00000426u, 0x00000882u, 0x0007004fu, 0x00000022u, 0x00000501u, 0x00000882u, 0x00000882u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000503u, 0x00000882u, 0x00000882u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000504u, 0x00000001u, 0x00000027u, 0x00000501u, 0x00000503u, 0x0003003eu, 0x000004feu, 0x00000504u, 0x00050041u, 0x00000014u, 0x00000505u, 0x000004feu, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000506u, 0x00000505u, 0x00050041u, 0x00000014u, 0x00000507u, 0x000004feu, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000508u, 0x00000507u, 0x0007000cu, 0x00000006u, 0x00000509u, 0x00000001u, 0x00000027u, 0x00000506u, 0x00000508u, 0x0003003eu, 0x000004ffu, 0x00000509u, 0x0003003eu, 0x00000427u, 0x00000880u, 0x0007004fu, 0x00000022u, 0x0000050du, 0x00000880u, 0x00000880u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000050fu, 0x00000880u, 0x00000880u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000510u, 0x00000001u, 0x0000002au, 0x0000050du, 0x0000050fu, 0x0003003eu, 0x0000050au, 0x00000510u, 0x00050041u, 0x00000014u, 0x00000511u, 0x0000050au, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000512u, 0x00000511u, 0x00050041u, 0x00000014u, 0x00000513u, 0x0000050au, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000514u, 0x00000513u, 0x0007000cu, 0x00000006u, 0x00000515u, 0x00000001u, 0x0000002au, 0x00000512u, 0x00000514u, 0x0003003eu, 0x0000050bu, 0x00000515u, 0x00050050u, 0x00000022u, 0x0000049du, 0x00000509u, 0x00000515u, 0x0003003eu, 0x00000425u, 0x0000049du, 0x000200f9u, 0x00000496u, 0x000200f8u, 0x00000498u, 0x0003003eu, 0x00000425u, 0x00000128u, 0x000200f9u, 0x00000496u, 0x000200f8u, 0x00000496u, 0x000700f5u, 0x00000022u, 0x00000813u, 0x0000049du, 0x00000497u, 0x00000128u, 0x00000498u, 0x0003003eu, 0x00000428u, 0x00000813u, 0x0003003eu, 0x000003b8u, 0x00000813u, 0x00050041u, 0x00000014u, 0x000003f7u, 0x000003b8u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000003f8u, 0x000003f7u, 0x00050041u, 0x00000014u, 0x000003f9u, 0x00000284u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000003fau, 0x000003f9u, 0x0007000cu, 0x00000006u, 0x000003fbu, 0x00000001u, 0x0000002au, 0x000003f8u, 0x000003fau, 0x0003003eu, 0x000003f7u, 0x000003fbu, 0x00050041u, 0x00000014u, 0x000003fdu, 0x000003b8u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000003feu, 0x000003fdu, 0x00050041u, 0x00000014u, 0x000003ffu, 0x00000286u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000400u, 0x000003ffu, 0x0007000cu, 0x00000006u, 0x00000401u, 0x00000001u, 0x00000027u, 0x000003feu, 0x00000400u, 0x0003003eu, 0x000003fdu, 0x00000401u, 0x0004003du, 0x00000006u, 0x00000404u, 0x000003f7u, 0x0004003du, 0x00000006u, 0x00000406u, 0x000003fdu, 0x000500b3u, 0x00000020u, 0x00000407u, 0x00000404u, 0x00000406u, 0x0003003eu, 0x000003b2u, 0x000001c0u, 0x0003003eu, 0x000003b3u, 0x00000407u, 0x000200f9u, 0x000003beu, 0x000200f8u, 0x000003beu, 0x000700f5u, 0x00000020u, 0x00000814u, 0x0000014au, 0x000003dau, 0x00000407u, 0x00000496u, 0x0003003eu, 0x000003bdu, 0x00000814u, 0x0003003eu, 0x00000248u, 0x00000814u, 0x000200f9u, 0x00000259u, 0x000200f8u, 0x00000259u, 0x000700f5u, 0x00000020u, 0x00000816u, 0x0000014au, 0x0000024cu, 0x00000814u, 0x000003beu, 0x000200f9u, 0x0000024du, 0x000200f8u, 0x0000024du, 0x000700f5u, 0x00000020u, 0x00000815u, 0x0000014au, 0x00000005u, 0x00000816u, 0x00000259u, 0x00050153u, 0x0000006du, 0x0000028cu, 0x000001b9u, 0x00000815u, 0x00050051u, 0x00000032u, 0x0000028du, 0x0000028cu, 0x00000000u, 0x0003003eu, 0x0000028au, 0x0000028du, 0x0003003eu, 0x0000028eu, 0x0000004du, 0x000200f9u, 0x0000028fu, 0x000200f8u, 0x0000028fu, 0x000700f5u, 0x00000032u, 0x00000824u, 0x0000004du, 0x0000024du, 0x00000866u, 0x00000292u, 0x000700f5u, 0x00000032u, 0x00000817u, 0x0000028du, 0x0000024du, 0x0000029du, 0x00000292u, 0x000500abu, 0x00000020u, 0x00000295u, 0x00000817u, 0x0000004du, 0x000400f6u, 0x00000291u, 0x00000292u, 0x00000000u, 0x000400fau, 0x00000295u, 0x00000290u, 0x00000291u, 0x000200f8u, 0x00000290u, 0x0006000cu, 0x00000006u, 0x00000298u, 0x00000001u, 0x00000049u, 0x00000817u, 0x0003003eu, 0x00000296u, 0x00000298u, 0x000500c4u, 0x00000032u, 0x0000029au, 0x00000050u, 0x00000298u, 0x000400c8u, 0x00000032u, 0x0000029bu, 0x0000029au, 0x000500c7u, 0x00000032u, 0x0000029du, 0x00000817u, 0x0000029bu, 0x0003003eu, 0x0000028au, 0x0000029du, 0x00050084u, 0x00000006u, 0x000002a0u, 0x000001e2u, 0x0000024au, 0x00050080u, 0x00000006u, 0x000002a2u, 0x000002a0u, 0x00000298u, 0x0004007cu, 0x00000032u, 0x000002a3u, 0x000002a2u, 0x0003003eu, 0x0000029eu, 0x000002a3u, 0x0003003eu, 0x000002a5u, 0x000002a3u, 0x00060041u, 0x000001afu, 0x00000519u, 0x000001adu, 0x0000009bu, 0x000002a3u, 0x0004003du, 0x00000007u, 0x0000051au, 0x00000519u, 0x0003003eu, 0x00000516u, 0x0000051au, 0x00050041u, 0x00000014u, 0x0000051bu, 0x00000516u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000051cu, 0x0000051bu, 0x00050041u, 0x00000014u, 0x0000051du, 0x00000516u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000051eu, 0x0000051du, 0x00050041u, 0x00000014u, 0x0000051fu, 0x00000516u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x00000520u, 0x0000051fu, 0x00050041u, 0x00000014u, 0x00000521u, 0x00000516u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x00000522u, 0x00000521u, 0x00070050u, 0x00000038u, 0x00000523u, 0x0000051cu, 0x0000051eu, 0x00000520u, 0x00000522u, 0x0003003eu, 0x00000704u, 0x0000051cu, 0x0003003eu, 0x00000705u, 0x0000051eu, 0x0003003eu, 0x00000706u, 0x00000520u, 0x0003003eu, 0x00000707u, 0x00000522u, 0x0003003eu, 0x000007b0u, 0x0000051cu, 0x0003003eu, 0x000007b1u, 0x0000051eu, 0x0003003eu, 0x000007b2u, 0x00000520u, 0x0003003eu, 0x000007b3u, 0x00000522u, 0x00050050u, 0x00000022u, 0x000002aeu, 0x0000051cu, 0x0000051eu, 0x000500c3u, 0x00000022u, 0x000002b0u, 0x000002aeu, 0x0000087du, 0x00050050u, 0x00000022u, 0x000002b1u, 0x00000261u, 0x00000261u, 0x00050084u, 0x00000022u, 0x000002b2u, 0x000002b1u, 0x000002b0u, 0x0007000cu, 0x00000022u, 0x000002b3u, 0x00000001u, 0x0000002au, 0x00000239u, 0x000002b2u, 0x0003003eu, 0x000002a8u, 0x000002b3u, 0x00050080u, 0x00000006u, 0x000002b8u, 0x00000520u, 0x00000082u, 0x00050080u, 0x00000006u, 0x000002bbu, 0x00000522u, 0x00000082u, 0x00050050u, 0x00000022u, 0x000002bcu, 0x000002b8u, 0x000002bbu, 0x000500c3u, 0x00000022u, 0x000002beu, 0x000002bcu, 0x0000087du, 0x00050084u, 0x00000022u, 0x000002c0u, 0x000002b1u, 0x000002beu, 0x00050082u, 0x00000022u, 0x000002c2u, 0x000002c0u, 0x0000087cu, 0x0007000cu, 0x00000022u, 0x000002c3u, 0x00000001u, 0x00000027u, 0x00000243u, 0x000002c2u, 0x0003003eu, 0x000002b4u, 0x000002c3u, 0x0003003eu, 0x000002c5u, 0x000002a3u, 0x00060041u, 0x0000018bu, 0x00000527u, 0x00000189u, 0x0000009bu, 0x000002a3u, 0x0004003du, 0x00000185u, 0x00000528u, 0x00000527u, 0x00050051u, 0x00000006u, 0x00000529u, 0x00000528u, 0x00000000u, 0x0003003eu, 0x000006cbu, 0x00000529u, 0x00050051u, 0x00000006u, 0x0000052bu, 0x00000528u, 0x00000001u, 0x0003003eu, 0x000006ccu, 0x0000052bu, 0x00050051u, 0x00000006u, 0x0000052du, 0x00000528u, 0x00000002u, 0x0003003eu, 0x000006cdu, 0x0000052du, 0x00050051u, 0x0000001cu, 0x0000052fu, 0x00000528u, 0x00000003u, 0x0003003eu, 0x000006ceu, 0x0000052fu, 0x00050051u, 0x0000001cu, 0x00000531u, 0x00000528u, 0x00000004u, 0x0003003eu, 0x000006cfu, 0x00000531u, 0x00050051u, 0x00000006u, 0x00000533u, 0x00000528u, 0x00000005u, 0x0003003eu, 0x000006d0u, 0x00000533u, 0x00050051u, 0x00000006u, 0x00000535u, 0x00000528u, 0x00000006u, 0x0003003eu, 0x000006d1u, 0x00000535u, 0x00050051u, 0x00000006u, 0x00000537u, 0x00000528u, 0x00000007u, 0x0003003eu, 0x000006d2u, 0x00000537u, 0x00050051u, 0x0000001cu, 0x00000539u, 0x00000528u, 0x00000008u, 0x0003003eu, 0x000006d3u, 0x00000539u, 0x00050051u, 0x0000001du, 0x0000053bu, 0x00000528u, 0x00000009u, 0x0003003eu, 0x000006d4u, 0x0000053bu, 0x00050051u, 0x0000001du, 0x0000053du, 0x00000528u, 0x0000000au, 0x0003003eu, 0x000006d5u, 0x0000053du, 0x000e0050u, 0x0000001eu, 0x000006e1u, 0x00000529u, 0x0000052bu, 0x0000052du, 0x0000052fu, 0x00000531u, 0x00000533u, 0x00000535u, 0x00000537u, 0x00000539u, 0x0000053bu, 0x0000053du, 0x0003003eu, 0x000006e2u, 0x00000529u, 0x0003003eu, 0x000006e3u, 0x0000052bu, 0x0003003eu, 0x000006e4u, 0x0000052du, 0x0003003eu, 0x000006e5u, 0x0000052fu, 0x0003003eu, 0x000006e6u, 0x00000531u, 0x0003003eu, 0x000006e7u, 0x00000533u, 0x0003003eu, 0x000006e8u, 0x00000535u, 0x0003003eu, 0x000006e9u, 0x00000537u, 0x0003003eu, 0x000006eau, 0x00000539u, 0x0003003eu, 0x000006ebu, 0x0000053bu, 0x0003003eu, 0x000006ecu, 0x0000053du, 0x0003003eu, 0x000007b8u, 0x00000529u, 0x0003003eu, 0x000007b9u, 0x0000052bu, 0x0003003eu, 0x000007bau, 0x0000052du, 0x0003003eu, 0x000007bbu, 0x0000052fu, 0x0003003eu, 0x000007bcu, 0x00000531u, 0x0003003eu, 0x000007bdu, 0x00000533u, 0x0003003eu, 0x000007beu, 0x00000535u, 0x0003003eu, 0x000007bfu, 0x00000537u, 0x0003003eu, 0x000007c0u, 0x00000539u, 0x0003003eu, 0x000007c1u, 0x0000053bu, 0x0003003eu, 0x000007c2u, 0x0000053du, 0x0003003eu, 0x000007dau, 0x00000529u, 0x0003003eu, 0x000007dbu, 0x0000052bu, 0x0003003eu, 0x000007dcu, 0x0000052du, 0x0003003eu, 0x000007ddu, 0x0000052fu, 0x0003003eu, 0x000007deu, 0x00000531u, 0x0003003eu, 0x000007dfu, 0x00000533u, 0x0003003eu, 0x000007e0u, 0x00000535u, 0x0003003eu, 0x000007e1u, 0x00000537u, 0x0003003eu, 0x000007e2u, 0x00000539u, 0x0003003eu, 0x000007e3u, 0x0000053bu, 0x0003003eu, 0x000002cau, 0x000002b3u, 0x0003003eu, 0x000002ccu, 0x000002c3u, 0x0003003eu, 0x000002ceu, 0x00000261u, 0x0003003eu, 0x00000540u, 0x0000014au, 0x000300f7u, 0x0000054cu, 0x00000000u, 0x000300fbu, 0x0000004du, 0x0000054du, 0x000200f8u, 0x0000054du, 0x00050041u, 0x00000014u, 0x0000054eu, 0x000002cau, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000054fu, 0x0000054eu, 0x00050084u, 0x00000006u, 0x00000550u, 0x0000054fu, 0x0000008au, 0x0003003eu, 0x00000542u, 0x00000550u, 0x00050041u, 0x00000014u, 0x00000551u, 0x000002ccu, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000552u, 0x00000551u, 0x00050084u, 0x00000006u, 0x00000553u, 0x00000552u, 0x0000008au, 0x00050080u, 0x00000006u, 0x00000554u, 0x00000553u, 0x00000082u, 0x0003003eu, 0x00000543u, 0x00000554u, 0x00040072u, 0x00000006u, 0x00000559u, 0x0000052fu, 0x00050084u, 0x00000006u, 0x0000055au, 0x00000261u, 0x00000559u, 0x0007000cu, 0x00000006u, 0x0000055bu, 0x00000001u, 0x0000002au, 0x00000550u, 0x0000055au, 0x0003003eu, 0x00000542u, 0x0000055bu, 0x00040072u, 0x00000006u, 0x00000560u, 0x00000539u, 0x00050084u, 0x00000006u, 0x00000561u, 0x00000261u, 0x00000560u, 0x00050082u, 0x00000006u, 0x00000562u, 0x00000561u, 0x000000afu, 0x0007000cu, 0x00000006u, 0x00000563u, 0x00000001u, 0x00000027u, 0x00000554u, 0x00000562u, 0x0003003eu, 0x00000543u, 0x00000563u, 0x000500b1u, 0x00000020u, 0x00000566u, 0x00000563u, 0x0000055bu, 0x000300f7u, 0x00000567u, 0x00000000u, 0x000400fau, 0x00000566u, 0x00000568u, 0x00000567u, 0x000200f8u, 0x00000568u, 0x0003003eu, 0x00000540u, 0x000001c0u, 0x0003003eu, 0x00000541u, 0x0000014au, 0x000200f9u, 0x0000054cu, 0x000200f8u, 0x00000567u, 0x00040071u, 0x00000032u, 0x0000056bu, 0x0000053bu, 0x0004007cu, 0x00000006u, 0x0000056cu, 0x0000056bu, 0x000500c7u, 0x00000006u, 0x0000056du, 0x0000056cu, 0x000000afu, 0x000500abu, 0x00000020u, 0x0000056eu, 0x0000056du, 0x0000009bu, 0x0003003eu, 0x00000544u, 0x0000056eu, 0x00040072u, 0x00000006u, 0x00000573u, 0x00000531u, 0x00050084u, 0x00000006u, 0x00000575u, 0x00000573u, 0x00000261u, 0x00050050u, 0x00000022u, 0x00000576u, 0x00000575u, 0x00000575u, 0x00050080u, 0x00000022u, 0x00000577u, 0x00000576u, 0x0000015du, 0x00050050u, 0x00000022u, 0x00000579u, 0x0000055bu, 0x0000055bu, 0x00050050u, 0x00000022u, 0x0000057bu, 0x00000563u, 0x00000563u, 0x0008000cu, 0x00000022u, 0x0000057cu, 0x00000001u, 0x0000002du, 0x00000577u, 0x00000579u, 0x0000057bu, 0x00050051u, 0x00000006u, 0x0000057du, 0x0000057cu, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000057eu, 0x0000057cu, 0x00000001u, 0x00070050u, 0x00000007u, 0x0000057fu, 0x0000055bu, 0x00000563u, 0x0000057du, 0x0000057eu, 0x0003003eu, 0x00000545u, 0x0000057fu, 0x000e0050u, 0x0000001eu, 0x000007f8u, 0x00000529u, 0x0000052bu, 0x0000052du, 0x0000052fu, 0x00000531u, 0x00000533u, 0x00000535u, 0x00000537u, 0x00000539u, 0x0000053bu, 0x000006c2u, 0x0003003eu, 0x000006b9u, 0x00000529u, 0x0003003eu, 0x000006bau, 0x0000052bu, 0x0003003eu, 0x000006bbu, 0x0000052du, 0x0003003eu, 0x000006bcu, 0x0000052fu, 0x0003003eu, 0x000006bdu, 0x00000531u, 0x0003003eu, 0x000006beu, 0x00000533u, 0x0003003eu, 0x000006bfu, 0x00000535u, 0x0003003eu, 0x000006c0u, 0x00000537u, 0x0003003eu, 0x00000548u, 0x0000057fu, 0x0003003eu, 0x00000549u, 0x0000056eu, 0x0003003eu, 0x0000054au, 0x00000261u, 0x000500c7u, 0x00000006u, 0x000005bau, 0x00000559u, 0x00000087u, 0x0003003eu, 0x00000597u, 0x000005bau, 0x0003003eu, 0x00000598u, 0x00000573u, 0x00050084u, 0x00000006u, 0x000005c0u, 0x000005bau, 0x00000261u, 0x0003003eu, 0x00000597u, 0x000005c0u, 0x0003003eu, 0x00000598u, 0x00000575u, 0x00070050u, 0x00000007u, 0x000005c6u, 0x000005c0u, 0x000005c0u, 0x000005c0u, 0x000005c0u, 0x00050082u, 0x00000007u, 0x000005c7u, 0x0000057fu, 0x000005c6u, 0x00050084u, 0x00000006u, 0x000005cbu, 0x00000261u, 0x00000529u, 0x0003003eu, 0x0000059bu, 0x000005c7u, 0x0003003eu, 0x0000059cu, 0x00000533u, 0x0003003eu, 0x0000059du, 0x000005cbu, 0x00070050u, 0x00000007u, 0x00000633u, 0x00000533u, 0x00000533u, 0x00000533u, 0x00000533u, 0x00050098u, 0x00000068u, 0x00000634u, 0x000005c7u, 0x00000633u, 0x00050051u, 0x00000007u, 0x00000635u, 0x00000634u, 0x00000000u, 0x0003003eu, 0x0000062eu, 0x00000635u, 0x00050051u, 0x00000007u, 0x00000636u, 0x00000634u, 0x00000001u, 0x0003003eu, 0x0000062du, 0x00000636u, 0x0004007cu, 0x0000006du, 0x00000638u, 0x00000635u, 0x0004007cu, 0x00000032u, 0x0000063au, 0x000005cbu, 0x00070050u, 0x0000006du, 0x0000063bu, 0x0000063au, 0x0000063au, 0x0000063au, 0x0000063au, 0x00050095u, 0x00000074u, 0x0000063cu, 0x00000638u, 0x0000063bu, 0x00050051u, 0x0000006du, 0x0000063du, 0x0000063cu, 0x00000001u, 0x0003003eu, 0x0000062fu, 0x0000063du, 0x00050051u, 0x0000006du, 0x0000063eu, 0x0000063cu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000063fu, 0x0000063eu, 0x0003003eu, 0x0000062eu, 0x0000063fu, 0x0004007cu, 0x00000007u, 0x00000641u, 0x0000063du, 0x00050080u, 0x00000007u, 0x00000643u, 0x00000636u, 0x00000641u, 0x0003003eu, 0x0000062du, 0x00000643u, 0x0003003eu, 0x0000059eu, 0x00000643u, 0x0003003eu, 0x00000630u, 0x0000063fu, 0x0003003eu, 0x0000059au, 0x00000643u, 0x0003003eu, 0x00000599u, 0x0000063fu, 0x00050084u, 0x00000006u, 0x000005d7u, 0x00000261u, 0x0000052bu, 0x0003003eu, 0x000005a1u, 0x000005c7u, 0x0003003eu, 0x000005a2u, 0x00000535u, 0x0003003eu, 0x000005a3u, 0x000005d7u, 0x00070050u, 0x00000007u, 0x0000064cu, 0x00000535u, 0x00000535u, 0x00000535u, 0x00000535u, 0x00050098u, 0x00000068u, 0x0000064du, 0x000005c7u, 0x0000064cu, 0x00050051u, 0x00000007u, 0x0000064eu, 0x0000064du, 0x00000000u, 0x0003003eu, 0x00000647u, 0x0000064eu, 0x00050051u, 0x00000007u, 0x0000064fu, 0x0000064du, 0x00000001u, 0x0003003eu, 0x00000646u, 0x0000064fu, 0x0004007cu, 0x0000006du, 0x00000651u, 0x0000064eu, 0x0004007cu, 0x00000032u, 0x00000653u, 0x000005d7u, 0x00070050u, 0x0000006du, 0x00000654u, 0x00000653u, 0x00000653u, 0x00000653u, 0x00000653u, 0x00050095u, 0x00000074u, 0x00000655u, 0x00000651u, 0x00000654u, 0x00050051u, 0x0000006du, 0x00000656u, 0x00000655u, 0x00000001u, 0x0003003eu, 0x00000648u, 0x00000656u, 0x00050051u, 0x0000006du, 0x00000657u, 0x00000655u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000658u, 0x00000657u, 0x0003003eu, 0x00000647u, 0x00000658u, 0x0004007cu, 0x00000007u, 0x0000065au, 0x00000656u, 0x00050080u, 0x00000007u, 0x0000065cu, 0x0000064fu, 0x0000065au, 0x0003003eu, 0x00000646u, 0x0000065cu, 0x0003003eu, 0x000005a4u, 0x0000065cu, 0x0003003eu, 0x00000649u, 0x00000658u, 0x0003003eu, 0x000005a0u, 0x0000065cu, 0x0003003eu, 0x0000059fu, 0x00000658u, 0x00070050u, 0x00000007u, 0x000005deu, 0x00000575u, 0x00000575u, 0x00000575u, 0x00000575u, 0x00050082u, 0x00000007u, 0x000005dfu, 0x0000057fu, 0x000005deu, 0x00050084u, 0x00000006u, 0x000005e3u, 0x00000261u, 0x0000052du, 0x0003003eu, 0x000005a7u, 0x000005dfu, 0x0003003eu, 0x000005a8u, 0x00000537u, 0x0003003eu, 0x000005a9u, 0x000005e3u, 0x00070050u, 0x00000007u, 0x00000665u, 0x00000537u, 0x00000537u, 0x00000537u, 0x00000537u, 0x00050098u, 0x00000068u, 0x00000666u, 0x000005dfu, 0x00000665u, 0x00050051u, 0x00000007u, 0x00000667u, 0x00000666u, 0x00000000u, 0x0003003eu, 0x00000660u, 0x00000667u, 0x00050051u, 0x00000007u, 0x00000668u, 0x00000666u, 0x00000001u, 0x0003003eu, 0x0000065fu, 0x00000668u, 0x0004007cu, 0x0000006du, 0x0000066au, 0x00000667u, 0x0004007cu, 0x00000032u, 0x0000066cu, 0x000005e3u, 0x00070050u, 0x0000006du, 0x0000066du, 0x0000066cu, 0x0000066cu, 0x0000066cu, 0x0000066cu, 0x00050095u, 0x00000074u, 0x0000066eu, 0x0000066au, 0x0000066du, 0x00050051u, 0x0000006du, 0x0000066fu, 0x0000066eu, 0x00000001u, 0x0003003eu, 0x00000661u, 0x0000066fu, 0x00050051u, 0x0000006du, 0x00000670u, 0x0000066eu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000671u, 0x00000670u, 0x0003003eu, 0x00000660u, 0x00000671u, 0x0004007cu, 0x00000007u, 0x00000673u, 0x0000066fu, 0x00050080u, 0x00000007u, 0x00000675u, 0x00000668u, 0x00000673u, 0x0003003eu, 0x0000065fu, 0x00000675u, 0x0003003eu, 0x000005aau, 0x00000675u, 0x0003003eu, 0x00000662u, 0x00000671u, 0x0003003eu, 0x000005a6u, 0x00000675u, 0x0003003eu, 0x000005a5u, 0x00000671u, 0x00050084u, 0x00000006u, 0x000005efu, 0x00000261u, 0x00000573u, 0x00070050u, 0x00000007u, 0x000005f0u, 0x000005efu, 0x000005efu, 0x000005efu, 0x000005efu, 0x000500b1u, 0x000000d9u, 0x000005f1u, 0x0000057fu, 0x000005f0u, 0x000600a9u, 0x00000007u, 0x000005f2u, 0x000005f1u, 0x00000658u, 0x00000671u, 0x0003003eu, 0x000005a5u, 0x000005f2u, 0x000600a9u, 0x00000007u, 0x000005fdu, 0x000005f1u, 0x0000065cu, 0x00000675u, 0x0003003eu, 0x000005a6u, 0x000005fdu, 0x000500adu, 0x000000d9u, 0x00000600u, 0x00000643u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x00000601u, 0x00000600u, 0x000000e9u, 0x0000063fu, 0x0003003eu, 0x00000599u, 0x00000601u, 0x000500b1u, 0x000000d9u, 0x00000604u, 0x00000643u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x00000605u, 0x00000604u, 0x000000f0u, 0x00000601u, 0x0003003eu, 0x00000599u, 0x00000605u, 0x000500adu, 0x000000d9u, 0x00000608u, 0x000005fdu, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x00000609u, 0x00000608u, 0x000000e9u, 0x000005f2u, 0x0003003eu, 0x000005a5u, 0x00000609u, 0x000500b1u, 0x000000d9u, 0x0000060cu, 0x000005fdu, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x0000060du, 0x0000060cu, 0x000000f0u, 0x00000609u, 0x0003003eu, 0x000005a5u, 0x0000060du, 0x0003003eu, 0x000005acu, 0x00000605u, 0x000500c3u, 0x00000007u, 0x0000067bu, 0x00000605u, 0x0000087eu, 0x0003003eu, 0x00000678u, 0x0000067bu, 0x0003003eu, 0x000005abu, 0x0000067bu, 0x0003003eu, 0x000005aeu, 0x0000060du, 0x000500c3u, 0x00000007u, 0x0000067fu, 0x0000060du, 0x0000087eu, 0x0003003eu, 0x0000067cu, 0x0000067fu, 0x0003003eu, 0x000005adu, 0x0000067fu, 0x000300f7u, 0x00000613u, 0x00000000u, 0x000400fau, 0x0000056eu, 0x00000614u, 0x00000615u, 0x000200f8u, 0x00000614u, 0x0003003eu, 0x000005afu, 0x0000067bu, 0x0003003eu, 0x000005b0u, 0x0000067fu, 0x000200f9u, 0x00000613u, 0x000200f8u, 0x00000615u, 0x0003003eu, 0x000005afu, 0x0000067fu, 0x0003003eu, 0x000005b0u, 0x0000067bu, 0x000200f9u, 0x00000613u, 0x000200f8u, 0x00000613u, 0x00070050u, 0x000000d9u, 0x00000883u, 0x0000056eu, 0x0000056eu, 0x0000056eu, 0x0000056eu, 0x000600a9u, 0x00000007u, 0x00000884u, 0x00000883u, 0x0000067fu, 0x0000067bu, 0x000600a9u, 0x00000007u, 0x00000886u, 0x00000883u, 0x0000067bu, 0x0000067fu, 0x0006000cu, 0x00000007u, 0x0000061bu, 0x00000001u, 0x00000005u, 0x00000886u, 0x0006000cu, 0x00000007u, 0x0000061du, 0x00000001u, 0x00000005u, 0x00000884u, 0x0007000cu, 0x00000007u, 0x0000061eu, 0x00000001u, 0x0000002au, 0x0000061bu, 0x0000061du, 0x0003003eu, 0x000005b2u, 0x0000061eu, 0x0007004fu, 0x00000022u, 0x00000683u, 0x0000061eu, 0x0000061eu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000685u, 0x0000061eu, 0x0000061eu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000686u, 0x00000001u, 0x0000002au, 0x00000683u, 0x00000685u, 0x0003003eu, 0x00000680u, 0x00000686u, 0x00050041u, 0x00000014u, 0x00000687u, 0x00000680u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000688u, 0x00000687u, 0x00050041u, 0x00000014u, 0x00000689u, 0x00000680u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000068au, 0x00000689u, 0x0007000cu, 0x00000006u, 0x0000068bu, 0x00000001u, 0x0000002au, 0x00000688u, 0x0000068au, 0x0003003eu, 0x00000681u, 0x0000068bu, 0x0003003eu, 0x000005b1u, 0x0000068bu, 0x00050084u, 0x00000006u, 0x00000622u, 0x00000119u, 0x00000261u, 0x000500b3u, 0x00000020u, 0x00000623u, 0x0000068bu, 0x00000622u, 0x000300f7u, 0x00000624u, 0x00000000u, 0x000400fau, 0x00000623u, 0x00000625u, 0x00000626u, 0x000200f8u, 0x00000625u, 0x0003003eu, 0x000005b4u, 0x00000886u, 0x0007004fu, 0x00000022u, 0x0000068fu, 0x00000886u, 0x00000886u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000691u, 0x00000886u, 0x00000886u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000692u, 0x00000001u, 0x00000027u, 0x0000068fu, 0x00000691u, 0x0003003eu, 0x0000068cu, 0x00000692u, 0x00050041u, 0x00000014u, 0x00000693u, 0x0000068cu, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000694u, 0x00000693u, 0x00050041u, 0x00000014u, 0x00000695u, 0x0000068cu, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000696u, 0x00000695u, 0x0007000cu, 0x00000006u, 0x00000697u, 0x00000001u, 0x00000027u, 0x00000694u, 0x00000696u, 0x0003003eu, 0x0000068du, 0x00000697u, 0x0003003eu, 0x000005b5u, 0x00000884u, 0x0007004fu, 0x00000022u, 0x0000069bu, 0x00000884u, 0x00000884u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000069du, 0x00000884u, 0x00000884u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000069eu, 0x00000001u, 0x0000002au, 0x0000069bu, 0x0000069du, 0x0003003eu, 0x00000698u, 0x0000069eu, 0x00050041u, 0x00000014u, 0x0000069fu, 0x00000698u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000006a0u, 0x0000069fu, 0x00050041u, 0x00000014u, 0x000006a1u, 0x00000698u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000006a2u, 0x000006a1u, 0x0007000cu, 0x00000006u, 0x000006a3u, 0x00000001u, 0x0000002au, 0x000006a0u, 0x000006a2u, 0x0003003eu, 0x00000699u, 0x000006a3u, 0x00050050u, 0x00000022u, 0x0000062bu, 0x00000697u, 0x000006a3u, 0x0003003eu, 0x000005b3u, 0x0000062bu, 0x000200f9u, 0x00000624u, 0x000200f8u, 0x00000626u, 0x0003003eu, 0x000005b3u, 0x00000128u, 0x000200f9u, 0x00000624u, 0x000200f8u, 0x00000624u, 0x000700f5u, 0x00000022u, 0x00000852u, 0x0000062bu, 0x00000625u, 0x00000128u, 0x00000626u, 0x0003003eu, 0x000005b6u, 0x00000852u, 0x0003003eu, 0x00000546u, 0x00000852u, 0x00050041u, 0x00000014u, 0x00000585u, 0x00000546u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000586u, 0x00000585u, 0x00050041u, 0x00000014u, 0x00000587u, 0x000002cau, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000588u, 0x00000587u, 0x0007000cu, 0x00000006u, 0x00000589u, 0x00000001u, 0x0000002au, 0x00000586u, 0x00000588u, 0x0003003eu, 0x00000585u, 0x00000589u, 0x00050041u, 0x00000014u, 0x0000058bu, 0x00000546u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000058cu, 0x0000058bu, 0x00050041u, 0x00000014u, 0x0000058du, 0x000002ccu, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000058eu, 0x0000058du, 0x0007000cu, 0x00000006u, 0x0000058fu, 0x00000001u, 0x00000027u, 0x0000058cu, 0x0000058eu, 0x0003003eu, 0x0000058bu, 0x0000058fu, 0x0004003du, 0x00000006u, 0x00000592u, 0x00000585u, 0x0004003du, 0x00000006u, 0x00000594u, 0x0000058bu, 0x000500b3u, 0x00000020u, 0x00000595u, 0x00000592u, 0x00000594u, 0x0003003eu, 0x00000540u, 0x000001c0u, 0x0003003eu, 0x00000541u, 0x00000595u, 0x000200f9u, 0x0000054cu, 0x000200f8u, 0x0000054cu, 0x000700f5u, 0x00000020u, 0x00000853u, 0x0000014au, 0x00000568u, 0x00000595u, 0x00000624u, 0x0003003eu, 0x0000054bu, 0x00000853u, 0x000300f7u, 0x000002d1u, 0x00000000u, 0x000400fau, 0x00000853u, 0x000002d0u, 0x000002d1u, 0x000200f8u, 0x000002d0u, 0x000500c5u, 0x00000032u, 0x000002d5u, 0x00000824u, 0x0000029au, 0x0003003eu, 0x0000028eu, 0x000002d5u, 0x000200f9u, 0x000002d1u, 0x000200f8u, 0x000002d1u, 0x000700f5u, 0x00000032u, 0x00000866u, 0x00000824u, 0x0000054cu, 0x000002d5u, 0x000002d0u, 0x000200f9u, 0x00000292u, 0x000200f8u, 0x00000292u, 0x000200f9u, 0x0000028fu, 0x000200f8u, 0x00000291u, 0x00050084u, 0x00000006u, 0x000002ddu, 0x00000214u, 0x000002dcu, 0x00050080u, 0x00000006u, 0x000002dfu, 0x000002ddu, 0x000001e2u, 0x00060041u, 0x000001ceu, 0x000002e1u, 0x000002d9u, 0x0000009bu, 0x000002dfu, 0x0003003eu, 0x000002e1u, 0x00000824u, 0x000500abu, 0x00000020u, 0x000002e3u, 0x00000824u, 0x0000004du, 0x000300f7u, 0x000002e5u, 0x00000000u, 0x000400fau, 0x000002e3u, 0x000002e4u, 0x000002efu, 0x000200f8u, 0x000002e4u, 0x00060041u, 0x000001ceu, 0x000002ebu, 0x000002e9u, 0x0000009bu, 0x00000214u, 0x000500c4u, 0x00000032u, 0x000002edu, 0x00000050u, 0x000001e2u, 0x000700f1u, 0x00000032u, 0x000002eeu, 0x000002ebu, 0x00000050u, 0x0000004du, 0x000002edu, 0x000200f9u, 0x000002e5u, 0x000200f8u, 0x000002efu, 0x00060041u, 0x000001ceu, 0x000002f1u, 0x000002e9u, 0x0000009bu, 0x00000214u, 0x000500c4u, 0x00000032u, 0x000002f3u, 0x00000050u, 0x000001e2u, 0x000400c8u, 0x00000032u, 0x000002f4u, 0x000002f3u, 0x000700f0u, 0x00000032u, 0x000002f5u, 0x000002f1u, 0x00000050u, 0x0000004du, 0x000002f4u, 0x000200f9u, 0x000002e5u, 0x000200f8u, 0x000002e5u, 0x000400cdu, 0x00000006u, 0x000002f8u, 0x00000824u, 0x0004007cu, 0x00000032u, 0x000002f9u, 0x000002f8u, 0x0003003eu, 0x000002f6u, 0x000002f9u, 0x0003003eu, 0x000002fau, 0x0000004du, 0x000500abu, 0x00000020u, 0x000002fcu, 0x000002f9u, 0x0000004du, 0x0005014fu, 0x00000020u, 0x000002fdu, 0x000001b9u, 0x000002fcu, 0x000300f7u, 0x000002ffu, 0x00000000u, 0x000400fau, 0x000002fdu, 0x000002feu, 0x000002ffu, 0x000200f8u, 0x000002feu, 0x0006015du, 0x00000032u, 0x00000302u, 0x000001b9u, 0x00000000u, 0x000002f9u, 0x0003003eu, 0x00000300u, 0x00000302u, 0x0004014du, 0x00000020u, 0x00000303u, 0x000001b9u, 0x000300f7u, 0x00000305u, 0x00000000u, 0x000400fau, 0x00000303u, 0x00000304u, 0x00000305u, 0x000200f8u, 0x00000304u, 0x000500abu, 0x00000020u, 0x00000307u, 0x00000302u, 0x0000004du, 0x000300f7u, 0x00000309u, 0x00000000u, 0x000400fau, 0x00000307u, 0x00000308u, 0x00000309u, 0x000200f8u, 0x00000308u, 0x00070041u, 0x000001ceu, 0x0000030au, 0x000001ccu, 0x0000009bu, 0x0000009bu, 0x000001b9u, 0x000700eau, 0x00000032u, 0x0000030cu, 0x0000030au, 0x00000050u, 0x0000004du, 0x00000302u, 0x0003003eu, 0x000002fau, 0x0000030cu, 0x000200f9u, 0x00000309u, 0x000200f8u, 0x00000309u, 0x000700f5u, 0x00000032u, 0x00000827u, 0x0000004du, 0x00000304u, 0x0000030cu, 0x00000308u, 0x000200f9u, 0x00000305u, 0x000200f8u, 0x00000305u, 0x000700f5u, 0x00000032u, 0x00000826u, 0x0000004du, 0x000002feu, 0x00000827u, 0x00000309u, 0x00050152u, 0x00000032u, 0x0000030eu, 0x000001b9u, 0x00000826u, 0x0003003eu, 0x000002fau, 0x0000030eu, 0x0006015du, 0x00000032u, 0x00000310u, 0x000001b9u, 0x00000001u, 0x000002f9u, 0x00050082u, 0x00000032u, 0x00000312u, 0x00000310u, 0x000002f9u, 0x00050080u, 0x00000032u, 0x00000314u, 0x0000030eu, 0x00000312u, 0x0003003eu, 0x000002fau, 0x00000314u, 0x000200f9u, 0x000002ffu, 0x000200f8u, 0x000002ffu, 0x000700f5u, 0x00000032u, 0x00000833u, 0x0000004du, 0x000002e5u, 0x00000314u, 0x00000305u, 0x000300f7u, 0x00000318u, 0x00000000u, 0x000400fau, 0x000002fcu, 0x00000317u, 0x00000318u, 0x000200f8u, 0x00000317u, 0x00060041u, 0x000001ceu, 0x00000322u, 0x0000031cu, 0x0000009bu, 0x000002dfu, 0x0003003eu, 0x00000322u, 0x00000833u, 0x000200f9u, 0x00000318u, 0x000200f8u, 0x00000318u, 0x00060168u, 0x00000032u, 0x00000325u, 0x000001b9u, 0x00000000u, 0x00000824u, 0x0003003eu, 0x00000323u, 0x00000325u, 0x000200f9u, 0x00000326u, 0x000200f8u, 0x00000326u, 0x000700f5u, 0x00000032u, 0x00000840u, 0x00000833u, 0x00000318u, 0x0000086du, 0x00000329u, 0x000700f5u, 0x00000032u, 0x00000838u, 0x00000325u, 0x00000318u, 0x00000334u, 0x00000329u, 0x000500abu, 0x00000020u, 0x0000032cu, 0x00000838u, 0x0000004du, 0x000400f6u, 0x00000328u, 0x00000329u, 0x00000000u, 0x000400fau, 0x0000032cu, 0x00000327u, 0x00000328u, 0x000200f8u, 0x00000327u, 0x0006000cu, 0x00000006u, 0x0000032fu, 0x00000001u, 0x00000049u, 0x00000838u, 0x0003003eu, 0x0000032du, 0x0000032fu, 0x000500c4u, 0x00000032u, 0x00000331u, 0x00000050u, 0x0000032fu, 0x000400c8u, 0x00000032u, 0x00000332u, 0x00000331u, 0x000500c7u, 0x00000032u, 0x00000334u, 0x00000838u, 0x00000332u, 0x0003003eu, 0x00000323u, 0x00000334u, 0x00050084u, 0x00000006u, 0x00000337u, 0x000001e2u, 0x0000024au, 0x00050080u, 0x00000006u, 0x00000339u, 0x00000337u, 0x0000032fu, 0x0003003eu, 0x00000335u, 0x00000339u, 0x000500c7u, 0x00000032u, 0x0000033du, 0x00000824u, 0x00000331u, 0x000500abu, 0x00000020u, 0x0000033eu, 0x0000033du, 0x0000004du, 0x000300f7u, 0x00000340u, 0x00000000u, 0x000400fau, 0x0000033eu, 0x0000033fu, 0x00000340u, 0x000200f8u, 0x0000033fu, 0x00080041u, 0x0000034bu, 0x0000034cu, 0x00000349u, 0x0000009bu, 0x00000339u, 0x0000009bu, 0x0000004du, 0x0004003du, 0x0000001du, 0x0000034du, 0x0000034cu, 0x00040071u, 0x00000032u, 0x0000034eu, 0x0000034du, 0x0003003eu, 0x00000341u, 0x0000034eu, 0x0003003eu, 0x00000350u, 0x0000034eu, 0x00050153u, 0x0000006du, 0x000006a8u, 0x000001b9u, 0x000001c0u, 0x0003003eu, 0x000006a4u, 0x000006a8u, 0x00060156u, 0x00000032u, 0x000006aau, 0x000001b9u, 0x00000000u, 0x000006a8u, 0x0003003eu, 0x000006a5u, 0x000006aau, 0x0003003eu, 0x000006a6u, 0x0000004du, 0x0004014du, 0x00000020u, 0x000006abu, 0x000001b9u, 0x000300f7u, 0x000006acu, 0x00000000u, 0x000400fau, 0x000006abu, 0x000006adu, 0x000006acu, 0x000200f8u, 0x000006adu, 0x00070041u, 0x000001ceu, 0x000006afu, 0x000001ccu, 0x0000009bu, 0x0000034eu, 0x0000004du, 0x000700eau, 0x00000032u, 0x000006b1u, 0x000006afu, 0x00000050u, 0x0000004du, 0x000006aau, 0x0003003eu, 0x000006a6u, 0x000006b1u, 0x000200f9u, 0x000006acu, 0x000200f8u, 0x000006acu, 0x000700f5u, 0x00000032u, 0x0000083cu, 0x0000004du, 0x0000033fu, 0x000006b1u, 0x000006adu, 0x00050152u, 0x00000032u, 0x000006b3u, 0x000001b9u, 0x0000083cu, 0x0003003eu, 0x000006a6u, 0x000006b3u, 0x00060156u, 0x00000032u, 0x000006b5u, 0x000001b9u, 0x00000002u, 0x000006a8u, 0x00050080u, 0x00000032u, 0x000006b7u, 0x000006b3u, 0x000006b5u, 0x0003003eu, 0x000006a6u, 0x000006b7u, 0x0003003eu, 0x000006a7u, 0x000006b7u, 0x0003003eu, 0x0000034fu, 0x000006b7u, 0x00050084u, 0x00000032u, 0x0000035bu, 0x00000359u, 0x0000034eu, 0x00050080u, 0x00000032u, 0x0000035cu, 0x000006b7u, 0x0000035bu, 0x0004003du, 0x00000006u, 0x0000035eu, 0x00000212u, 0x0004007cu, 0x00000032u, 0x0000035fu, 0x0000035eu, 0x0004003du, 0x00000006u, 0x00000361u, 0x0000020cu, 0x0004007cu, 0x00000032u, 0x00000362u, 0x00000361u, 0x0004007cu, 0x00000032u, 0x00000365u, 0x00000339u, 0x00070050u, 0x0000006du, 0x00000366u, 0x0000035fu, 0x00000362u, 0x00000840u, 0x00000365u, 0x00060041u, 0x00000367u, 0x00000368u, 0x00000356u, 0x0000009bu, 0x0000035cu, 0x0003003eu, 0x00000368u, 0x00000366u, 0x00050080u, 0x00000032u, 0x0000036au, 0x00000840u, 0x000000afu, 0x0003003eu, 0x000002fau, 0x0000036au, 0x000200f9u, 0x00000340u, 0x000200f8u, 0x00000340u, 0x000700f5u, 0x00000032u, 0x0000086du, 0x00000840u, 0x00000327u, 0x0000036au, 0x000006acu, 0x000200f9u, 0x00000329u, 0x000200f8u, 0x00000329u, 0x000200f9u, 0x00000326u, 0x000200f8u, 0x00000328u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x00000041u, 0x0000000au, 0x000500c3u, 0x00000007u, 0x00000044u, 0x00000041u, 0x0000087eu, 0x000200feu, 0x00000044u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x0000002au, 0x00000047u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000048u, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x00000049u, 0x00000048u, 0x00000048u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x0000004au, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x0000004bu, 0x0000004au, 0x0000004au, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000004cu, 0x00000001u, 0x00000027u, 0x00000049u, 0x0000004bu, 0x0003003eu, 0x00000047u, 0x0000004cu, 0x00050041u, 0x00000014u, 0x0000004eu, 0x00000047u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000004fu, 0x0000004eu, 0x00050041u, 0x00000014u, 0x00000051u, 0x00000047u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000052u, 0x00000051u, 0x0007000cu, 0x00000006u, 0x00000053u, 0x00000001u, 0x00000027u, 0x0000004fu, 0x00000052u, 0x000200feu, 0x00000053u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x0000002au, 0x00000056u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000057u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x00000058u, 0x00000057u, 0x00000057u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000059u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x0000005au, 0x00000059u, 0x00000059u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000005bu, 0x00000001u, 0x0000002au, 0x00000058u, 0x0000005au, 0x0003003eu, 0x00000056u, 0x0000005bu, 0x00050041u, 0x00000014u, 0x0000005cu, 0x00000056u, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000005du, 0x0000005cu, 0x00050041u, 0x00000014u, 0x0000005eu, 0x00000056u, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000005fu, 0x0000005eu, 0x0007000cu, 0x00000006u, 0x00000060u, 0x00000001u, 0x0000002au, 0x0000005du, 0x0000005fu, 0x000200feu, 0x00000060u, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000066u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000067u, 0x00000007u, 0x0004003bu, 0x00000072u, 0x00000073u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000063u, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000064u, 0x00000017u, 0x00070050u, 0x00000007u, 0x00000065u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00050098u, 0x00000068u, 0x00000069u, 0x00000063u, 0x00000065u, 0x00050051u, 0x00000007u, 0x0000006au, 0x00000069u, 0x00000000u, 0x0003003eu, 0x00000067u, 0x0000006au, 0x00050051u, 0x00000007u, 0x0000006bu, 0x00000069u, 0x00000001u, 0x0003003eu, 0x00000066u, 0x0000006bu, 0x0004007cu, 0x0000006du, 0x0000006eu, 0x0000006au, 0x0004003du, 0x00000006u, 0x0000006fu, 0x00000018u, 0x0004007cu, 0x00000032u, 0x00000070u, 0x0000006fu, 0x00070050u, 0x0000006du, 0x00000071u, 0x00000070u, 0x00000070u, 0x00000070u, 0x00000070u, 0x00050095u, 0x00000074u, 0x00000075u, 0x0000006eu, 0x00000071u, 0x00050051u, 0x0000006du, 0x00000076u, 0x00000075u, 0x00000001u, 0x0003003eu, 0x00000073u, 0x00000076u, 0x00050051u, 0x0000006du, 0x00000077u, 0x00000075u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000078u, 0x00000077u, 0x0003003eu, 0x00000067u, 0x00000078u, 0x0004007cu, 0x00000007u, 0x0000007au, 0x00000076u, 0x00050080u, 0x00000007u, 0x0000007cu, 0x0000006bu, 0x0000007au, 0x0003003eu, 0x00000066u, 0x0000007cu, 0x0003003eu, 0x00000019u, 0x0000007cu, 0x000200feu, 0x00000078u, 0x00010038u, 0x00050036u, 0x00000022u, 0x00000028u, 0x00000000u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000008u, 0x00000025u, 0x00030037u, 0x00000021u, 0x00000026u, 0x00030037u, 0x00000014u, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x00000014u, 0x00000081u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000089u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000094u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000bcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000ccu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000cdu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000ffu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000102u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000103u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000109u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000010bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000110u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000116u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000011fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000120u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000123u, 0x00000007u, 0x00050041u, 0x00000083u, 0x00000084u, 0x00000024u, 0x00000082u, 0x0004003du, 0x0000001cu, 0x00000085u, 0x00000084u, 0x00040072u, 0x00000006u, 0x00000086u, 0x00000085u, 0x000500c7u, 0x00000006u, 0x00000088u, 0x00000086u, 0x00000087u, 0x0003003eu, 0x00000081u, 0x00000088u, 0x00050041u, 0x00000083u, 0x0000008bu, 0x00000024u, 0x0000008au, 0x0004003du, 0x0000001cu, 0x0000008cu, 0x0000008bu, 0x00040072u, 0x00000006u, 0x0000008du, 0x0000008cu, 0x0003003eu, 0x00000089u, 0x0000008du, 0x0004003du, 0x00000006u, 0x0000008eu, 0x00000027u, 0x00050084u, 0x00000006u, 0x00000090u, 0x00000088u, 0x0000008eu, 0x0003003eu, 0x00000081u, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000091u, 0x00000027u, 0x00050084u, 0x00000006u, 0x00000093u, 0x0000008du, 0x00000091u, 0x0003003eu, 0x00000089u, 0x00000093u, 0x0004003du, 0x00000007u, 0x00000095u, 0x00000025u, 0x00070050u, 0x00000007u, 0x00000097u, 0x00000090u, 0x00000090u, 0x00000090u, 0x00000090u, 0x00050082u, 0x00000007u, 0x00000098u, 0x00000095u, 0x00000097u, 0x0004003du, 0x00000006u, 0x0000009au, 0x00000027u, 0x00050041u, 0x00000014u, 0x0000009cu, 0x00000024u, 0x0000009bu, 0x0004003du, 0x00000006u, 0x0000009du, 0x0000009cu, 0x00050084u, 0x00000006u, 0x0000009eu, 0x0000009au, 0x0000009du, 0x0003003eu, 0x000000a0u, 0x00000098u, 0x00050041u, 0x00000014u, 0x000000a2u, 0x00000024u, 0x00000099u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x000000a2u, 0x0003003eu, 0x000000a1u, 0x000000a3u, 0x0003003eu, 0x000000a4u, 0x0000009eu, 0x00080039u, 0x00000007u, 0x000000a6u, 0x0000001au, 0x000000a0u, 0x000000a1u, 0x000000a4u, 0x000000a5u, 0x0004003du, 0x00000007u, 0x000000a7u, 0x000000a5u, 0x0003003eu, 0x0000009fu, 0x000000a7u, 0x0003003eu, 0x00000094u, 0x000000a6u, 0x0004003du, 0x00000007u, 0x000000a9u, 0x00000025u, 0x00050082u, 0x00000007u, 0x000000acu, 0x000000a9u, 0x00000097u, 0x0004003du, 0x00000006u, 0x000000aeu, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000b0u, 0x00000024u, 0x000000afu, 0x0004003du, 0x00000006u, 0x000000b1u, 0x000000b0u, 0x00050084u, 0x00000006u, 0x000000b2u, 0x000000aeu, 0x000000b1u, 0x0003003eu, 0x000000b4u, 0x000000acu, 0x00050041u, 0x00000014u, 0x000000b6u, 0x00000024u, 0x000000adu, 0x0004003du, 0x00000006u, 0x000000b7u, 0x000000b6u, 0x0003003eu, 0x000000b5u, 0x000000b7u, 0x0003003eu, 0x000000b8u, 0x000000b2u, 0x00080039u, 0x00000007u, 0x000000bau, 0x0000001au, 0x000000b4u, 0x000000b5u, 0x000000b8u, 0x000000b9u, 0x0004003du, 0x00000007u, 0x000000bbu, 0x000000b9u, 0x0003003eu, 0x000000b3u, 0x000000bbu, 0x0003003eu, 0x000000a8u, 0x000000bau, 0x0004003du, 0x00000007u, 0x000000bdu, 0x00000025u, 0x00070050u, 0x00000007u, 0x000000bfu, 0x00000093u, 0x00000093u, 0x00000093u, 0x00000093u, 0x00050082u, 0x00000007u, 0x000000c0u, 0x000000bdu, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000000c2u, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000c4u, 0x00000024u, 0x000000c3u, 0x0004003du, 0x00000006u, 0x000000c5u, 0x000000c4u, 0x00050084u, 0x00000006u, 0x000000c6u, 0x000000c2u, 0x000000c5u, 0x0003003eu, 0x000000c8u, 0x000000c0u, 0x00050041u, 0x00000014u, 0x000000cau, 0x00000024u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x000000cbu, 0x000000cau, 0x0003003eu, 0x000000c9u, 0x000000cbu, 0x0003003eu, 0x000000ccu, 0x000000c6u, 0x00080039u, 0x00000007u, 0x000000ceu, 0x0000001au, 0x000000c8u, 0x000000c9u, 0x000000ccu, 0x000000cdu, 0x0004003du, 0x00000007u, 0x000000cfu, 0x000000cdu, 0x0003003eu, 0x000000c7u, 0x000000cfu, 0x0003003eu, 0x000000bcu, 0x000000ceu, 0x0004003du, 0x00000007u, 0x000000d2u, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000d3u, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000d5u, 0x0000008bu, 0x00040072u, 0x00000006u, 0x000000d6u, 0x000000d5u, 0x00050084u, 0x00000006u, 0x000000d7u, 0x000000d3u, 0x000000d6u, 0x00070050u, 0x00000007u, 0x000000d8u, 0x000000d7u, 0x000000d7u, 0x000000d7u, 0x000000d7u, 0x000500b1u, 0x000000d9u, 0x000000dau, 0x000000d2u, 0x000000d8u, 0x000600a9u, 0x00000007u, 0x000000dbu, 0x000000dau, 0x000000bau, 0x000000ceu, 0x0003003eu, 0x000000bcu, 0x000000dbu, 0x0004003du, 0x00000007u, 0x000000deu, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000dfu, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000e1u, 0x0000008bu, 0x00040072u, 0x00000006u, 0x000000e2u, 0x000000e1u, 0x00050084u, 0x00000006u, 0x000000e3u, 0x000000dfu, 0x000000e2u, 0x00070050u, 0x00000007u, 0x000000e4u, 0x000000e3u, 0x000000e3u, 0x000000e3u, 0x000000e3u, 0x000500b1u, 0x000000d9u, 0x000000e5u, 0x000000deu, 0x000000e4u, 0x000600a9u, 0x00000007u, 0x000000e6u, 0x000000e5u, 0x000000bbu, 0x000000cfu, 0x0003003eu, 0x000000c7u, 0x000000e6u, 0x000500adu, 0x000000d9u, 0x000000ecu, 0x000000a7u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x000000edu, 0x000000ecu, 0x000000e9u, 0x000000a6u, 0x0003003eu, 0x00000094u, 0x000000edu, 0x000500b1u, 0x000000d9u, 0x000000f4u, 0x000000a7u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x000000f5u, 0x000000f4u, 0x000000f0u, 0x000000edu, 0x0003003eu, 0x00000094u, 0x000000f5u, 0x000500adu, 0x000000d9u, 0x000000f8u, 0x000000e6u, 0x000000ebu, 0x000600a9u, 0x00000007u, 0x000000f9u, 0x000000f8u, 0x000000e9u, 0x000000dbu, 0x0003003eu, 0x000000bcu, 0x000000f9u, 0x000500b1u, 0x000000d9u, 0x000000fcu, 0x000000e6u, 0x000000f3u, 0x000600a9u, 0x00000007u, 0x000000fdu, 0x000000fcu, 0x000000f0u, 0x000000f9u, 0x0003003eu, 0x000000bcu, 0x000000fdu, 0x0003003eu, 0x000000ffu, 0x000000f5u, 0x00050039u, 0x00000007u, 0x00000101u, 0x0000000bu, 0x000000ffu, 0x0003003eu, 0x000000feu, 0x00000101u, 0x0003003eu, 0x00000103u, 0x000000fdu, 0x00050039u, 0x00000007u, 0x00000105u, 0x0000000bu, 0x00000103u, 0x0003003eu, 0x00000102u, 0x00000105u, 0x0004003du, 0x00000020u, 0x00000106u, 0x00000026u, 0x000300f7u, 0x00000108u, 0x00000000u, 0x000400fau, 0x00000106u, 0x00000107u, 0x0000010du, 0x000200f8u, 0x00000107u, 0x0003003eu, 0x00000109u, 0x00000101u, 0x0003003eu, 0x0000010bu, 0x00000105u, 0x000200f9u, 0x00000108u, 0x000200f8u, 0x0000010du, 0x0003003eu, 0x00000109u, 0x00000105u, 0x0003003eu, 0x0000010bu, 0x00000101u, 0x000200f9u, 0x00000108u, 0x000200f8u, 0x00000108u, 0x00070050u, 0x000000d9u, 0x00000887u, 0x00000106u, 0x00000106u, 0x00000106u, 0x00000106u, 0x000600a9u, 0x00000007u, 0x00000888u, 0x00000887u, 0x00000105u, 0x00000101u, 0x000600a9u, 0x00000007u, 0x0000088au, 0x00000887u, 0x00000101u, 0x00000105u, 0x0006000cu, 0x00000007u, 0x00000112u, 0x00000001u, 0x00000005u, 0x0000088au, 0x0006000cu, 0x00000007u, 0x00000114u, 0x00000001u, 0x00000005u, 0x00000888u, 0x0007000cu, 0x00000007u, 0x00000115u, 0x00000001u, 0x0000002au, 0x00000112u, 0x00000114u, 0x0003003eu, 0x00000116u, 0x00000115u, 0x00050039u, 0x00000006u, 0x00000117u, 0x00000012u, 0x00000116u, 0x0003003eu, 0x00000110u, 0x00000117u, 0x0004003du, 0x00000006u, 0x0000011au, 0x00000027u, 0x00050084u, 0x00000006u, 0x0000011bu, 0x00000119u, 0x0000011au, 0x000500b3u, 0x00000020u, 0x0000011cu, 0x00000117u, 0x0000011bu, 0x000300f7u, 0x0000011eu, 0x00000000u, 0x000400fau, 0x0000011cu, 0x0000011du, 0x00000127u, 0x000200f8u, 0x0000011du, 0x0003003eu, 0x00000120u, 0x0000088au, 0x00050039u, 0x00000006u, 0x00000122u, 0x0000000fu, 0x00000120u, 0x0003003eu, 0x00000123u, 0x00000888u, 0x00050039u, 0x00000006u, 0x00000125u, 0x00000012u, 0x00000123u, 0x00050050u, 0x00000022u, 0x00000126u, 0x00000122u, 0x00000125u, 0x0003003eu, 0x0000011fu, 0x00000126u, 0x000200f9u, 0x0000011eu, 0x000200f8u, 0x00000127u, 0x0003003eu, 0x0000011fu, 0x00000128u, 0x000200f9u, 0x0000011eu, 0x000200f8u, 0x0000011eu, 0x000700f5u, 0x00000022u, 0x00000878u, 0x00000126u, 0x0000011du, 0x00000128u, 0x00000127u, 0x000200feu, 0x00000878u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000030u, 0x00000000u, 0x0000002bu, 0x00030037u, 0x0000001fu, 0x0000002cu, 0x00030037u, 0x0000002au, 0x0000002du, 0x00030037u, 0x0000002au, 0x0000002eu, 0x00030037u, 0x00000014u, 0x0000002fu, 0x000200f8u, 0x00000031u, 0x0005003bu, 0x00000021u, 0x00000387u, 0x00000007u, 0x0000014au, 0x0004003bu, 0x00000021u, 0x00000384u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000130u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000014cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000155u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000168u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000169u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000016bu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000016du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000016fu, 0x00000007u, 0x000300f7u, 0x00000383u, 0x00000000u, 0x000300fbu, 0x0000004du, 0x00000386u, 0x000200f8u, 0x00000386u, 0x00050041u, 0x00000014u, 0x0000012du, 0x0000002du, 0x00000050u, 0x0004003du, 0x00000006u, 0x0000012eu, 0x0000012du, 0x00050084u, 0x00000006u, 0x0000012fu, 0x0000012eu, 0x0000008au, 0x0003003eu, 0x0000012cu, 0x0000012fu, 0x00050041u, 0x00000014u, 0x00000131u, 0x0000002eu, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000132u, 0x00000131u, 0x00050084u, 0x00000006u, 0x00000133u, 0x00000132u, 0x0000008au, 0x00050080u, 0x00000006u, 0x00000134u, 0x00000133u, 0x00000082u, 0x0003003eu, 0x00000130u, 0x00000134u, 0x0004003du, 0x00000006u, 0x00000136u, 0x0000002fu, 0x00050041u, 0x00000083u, 0x00000137u, 0x0000002cu, 0x00000082u, 0x0004003du, 0x0000001cu, 0x00000138u, 0x00000137u, 0x00040072u, 0x00000006u, 0x00000139u, 0x00000138u, 0x00050084u, 0x00000006u, 0x0000013au, 0x00000136u, 0x00000139u, 0x0007000cu, 0x00000006u, 0x0000013bu, 0x00000001u, 0x0000002au, 0x0000012fu, 0x0000013au, 0x0003003eu, 0x0000012cu, 0x0000013bu, 0x0004003du, 0x00000006u, 0x0000013du, 0x0000002fu, 0x00050041u, 0x00000083u, 0x0000013fu, 0x0000002cu, 0x0000013eu, 0x0004003du, 0x0000001cu, 0x00000140u, 0x0000013fu, 0x00040072u, 0x00000006u, 0x00000141u, 0x00000140u, 0x00050084u, 0x00000006u, 0x00000142u, 0x0000013du, 0x00000141u, 0x00050082u, 0x00000006u, 0x00000143u, 0x00000142u, 0x000000afu, 0x0007000cu, 0x00000006u, 0x00000144u, 0x00000001u, 0x00000027u, 0x00000134u, 0x00000143u, 0x0003003eu, 0x00000130u, 0x00000144u, 0x000500b1u, 0x00000020u, 0x00000147u, 0x00000144u, 0x0000013bu, 0x000300f7u, 0x00000149u, 0x00000000u, 0x000400fau, 0x00000147u, 0x00000148u, 0x00000149u, 0x000200f8u, 0x00000148u, 0x0003003eu, 0x00000387u, 0x000001c0u, 0x0003003eu, 0x00000384u, 0x0000014au, 0x000200f9u, 0x00000383u, 0x000200f8u, 0x00000149u, 0x00050041u, 0x0000014eu, 0x0000014fu, 0x0000002cu, 0x0000014du, 0x0004003du, 0x0000001du, 0x00000150u, 0x0000014fu, 0x00040071u, 0x00000032u, 0x00000151u, 0x00000150u, 0x0004007cu, 0x00000006u, 0x00000152u, 0x00000151u, 0x000500c7u, 0x00000006u, 0x00000153u, 0x00000152u, 0x000000afu, 0x000500abu, 0x00000020u, 0x00000154u, 0x00000153u, 0x0000009bu, 0x0003003eu, 0x0000014cu, 0x00000154u, 0x00050041u, 0x00000083u, 0x00000158u, 0x0000002cu, 0x0000008au, 0x0004003du, 0x0000001cu, 0x00000159u, 0x00000158u, 0x00040072u, 0x00000006u, 0x0000015au, 0x00000159u, 0x0004003du, 0x00000006u, 0x0000015bu, 0x0000002fu, 0x00050084u, 0x00000006u, 0x0000015cu, 0x0000015au, 0x0000015bu, 0x00050050u, 0x00000022u, 0x0000015eu, 0x0000015cu, 0x0000015cu, 0x00050080u, 0x00000022u, 0x0000015fu, 0x0000015eu, 0x0000015du, 0x00050050u, 0x00000022u, 0x00000161u, 0x0000013bu, 0x0000013bu, 0x00050050u, 0x00000022u, 0x00000163u, 0x00000144u, 0x00000144u, 0x0008000cu, 0x00000022u, 0x00000164u, 0x00000001u, 0x0000002du, 0x0000015fu, 0x00000161u, 0x00000163u, 0x00050051u, 0x00000006u, 0x00000165u, 0x00000164u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000166u, 0x00000164u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000167u, 0x0000013bu, 0x00000144u, 0x00000165u, 0x00000166u, 0x0003003eu, 0x00000155u, 0x00000167u, 0x0004003du, 0x0000001eu, 0x0000016au, 0x0000002cu, 0x0003003eu, 0x00000169u, 0x0000016au, 0x0003003eu, 0x0000016bu, 0x00000167u, 0x0003003eu, 0x0000016du, 0x00000154u, 0x0004003du, 0x00000006u, 0x00000170u, 0x0000002fu, 0x0003003eu, 0x0000016fu, 0x00000170u, 0x00080039u, 0x00000022u, 0x00000171u, 0x00000028u, 0x00000169u, 0x0000016bu, 0x0000016du, 0x0000016fu, 0x0003003eu, 0x00000168u, 0x00000171u, 0x00050041u, 0x00000014u, 0x00000172u, 0x00000168u, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000173u, 0x00000172u, 0x00050041u, 0x00000014u, 0x00000174u, 0x0000002du, 0x0000004du, 0x0004003du, 0x00000006u, 0x00000175u, 0x00000174u, 0x0007000cu, 0x00000006u, 0x00000176u, 0x00000001u, 0x0000002au, 0x00000173u, 0x00000175u, 0x0003003eu, 0x00000172u, 0x00000176u, 0x00050041u, 0x00000014u, 0x00000178u, 0x00000168u, 0x00000050u, 0x0004003du, 0x00000006u, 0x00000179u, 0x00000178u, 0x00050041u, 0x00000014u, 0x0000017au, 0x0000002eu, 0x0000004du, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000017au, 0x0007000cu, 0x00000006u, 0x0000017cu, 0x00000001u, 0x00000027u, 0x00000179u, 0x0000017bu, 0x0003003eu, 0x00000178u, 0x0000017cu, 0x0004003du, 0x00000006u, 0x0000017fu, 0x00000172u, 0x0004003du, 0x00000006u, 0x00000181u, 0x00000178u, 0x000500b3u, 0x00000020u, 0x00000182u, 0x0000017fu, 0x00000181u, 0x0003003eu, 0x00000387u, 0x000001c0u, 0x0003003eu, 0x00000384u, 0x00000182u, 0x000200f9u, 0x00000383u, 0x000200f8u, 0x00000383u, 0x000700f5u, 0x00000020u, 0x00000879u, 0x0000014au, 0x00000148u, 0x00000182u, 0x00000149u, 0x000200feu, 0x00000879u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000036u, 0x00000000u, 0x00000034u, 0x00030037u, 0x00000033u, 0x00000035u, 0x000200f8u, 0x00000037u, 0x0004003bu, 0x0000014eu, 0x00000803u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00000802u, 0x00000007u, 0x0004003bu, 0x00000083u, 0x00000801u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000800u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007ffu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007feu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007fdu, 0x00000007u, 0x0004003bu, 0x00000083u, 0x000007fcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007fbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007fau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000007f9u, 0x00000007u, 0x0004003du, 0x00000032u, 0x0000018au, 0x00000035u, 0x00060041u, 0x0000018bu, 0x0000018cu, 0x00000189u, 0x0000009bu, 0x0000018au, 0x0004003du, 0x00000185u, 0x0000018du, 0x0000018cu, 0x00050051u, 0x00000006u, 0x0000018fu, 0x0000018du, 0x00000000u, 0x0003003eu, 0x000007f9u, 0x0000018fu, 0x00050051u, 0x00000006u, 0x00000191u, 0x0000018du, 0x00000001u, 0x0003003eu, 0x000007fau, 0x00000191u, 0x00050051u, 0x00000006u, 0x00000193u, 0x0000018du, 0x00000002u, 0x0003003eu, 0x000007fbu, 0x00000193u, 0x00050051u, 0x0000001cu, 0x00000195u, 0x0000018du, 0x00000003u, 0x0003003eu, 0x000007fcu, 0x00000195u, 0x00050051u, 0x0000001cu, 0x00000197u, 0x0000018du, 0x00000004u, 0x0003003eu, 0x000007fdu, 0x00000197u, 0x00050051u, 0x00000006u, 0x00000199u, 0x0000018du, 0x00000005u, 0x0003003eu, 0x000007feu, 0x00000199u, 0x00050051u, 0x00000006u, 0x0000019bu, 0x0000018du, 0x00000006u, 0x0003003eu, 0x000007ffu, 0x0000019bu, 0x00050051u, 0x00000006u, 0x0000019du, 0x0000018du, 0x00000007u, 0x0003003eu, 0x00000800u, 0x0000019du, 0x00050051u, 0x0000001cu, 0x0000019fu, 0x0000018du, 0x00000008u, 0x0003003eu, 0x00000801u, 0x0000019fu, 0x00050051u, 0x0000001du, 0x000001a1u, 0x0000018du, 0x00000009u, 0x0003003eu, 0x00000802u, 0x000001a1u, 0x00050051u, 0x0000001du, 0x000001a3u, 0x0000018du, 0x0000000au, 0x0003003eu, 0x00000803u, 0x000001a3u, 0x000e0050u, 0x0000001eu, 0x0000080fu, 0x0000018fu, 0x00000191u, 0x00000193u, 0x00000195u, 0x00000197u, 0x00000199u, 0x0000019bu, 0x0000019du, 0x0000019fu, 0x000001a1u, 0x000001a3u, 0x000200feu, 0x0000080fu, 0x00010038u, 0x00050036u, 0x00000038u, 0x0000003bu, 0x00000000u, 0x00000039u, 0x00030037u, 0x00000033u, 0x0000003au, 0x000200f8u, 0x0000003cu, 0x0004003bu, 0x00000008u, 0x000001a9u, 0x00000007u, 0x0004003du, 0x00000032u, 0x000001aeu, 0x0000003au, 0x00060041u, 0x000001afu, 0x000001b0u, 0x000001adu, 0x0000009bu, 0x000001aeu, 0x0004003du, 0x00000007u, 0x000001b1u, 0x000001b0u, 0x0003003eu, 0x000001a9u, 0x000001b1u, 0x00050041u, 0x00000014u, 0x000001b2u, 0x000001a9u, 0x0000004du, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001b2u, 0x00050041u, 0x00000014u, 0x000001b4u, 0x000001a9u, 0x00000050u, 0x0004003du, 0x00000006u, 0x000001b5u, 0x000001b4u, 0x00050041u, 0x00000014u, 0x000001b7u, 0x000001a9u, 0x000001b6u, 0x0004003du, 0x00000006u, 0x000001b8u, 0x000001b7u, 0x00050041u, 0x00000014u, 0x000001bau, 0x000001a9u, 0x000001b9u, 0x0004003du, 0x00000006u, 0x000001bbu, 0x000001bau, 0x00070050u, 0x00000038u, 0x000001bcu, 0x000001b3u, 0x000001b5u, 0x000001b8u, 0x000001bbu, 0x000200feu, 0x000001bcu, 0x00010038u, 0x00050036u, 0x00000032u, 0x0000003fu, 0x00000000u, 0x0000003du, 0x00030037u, 0x00000033u, 0x0000003eu, 0x000200f8u, 0x00000040u, 0x0004003bu, 0x00000072u, 0x000001bfu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000001c2u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000001c5u, 0x00000007u, 0x00050153u, 0x0000006du, 0x000001c1u, 0x000001b9u, 0x000001c0u, 0x0003003eu, 0x000001bfu, 0x000001c1u, 0x00060156u, 0x00000032u, 0x000001c4u, 0x000001b9u, 0x00000000u, 0x000001c1u, 0x0003003eu, 0x000001c2u, 0x000001c4u, 0x0003003eu, 0x000001c5u, 0x0000004du, 0x0004014du, 0x00000020u, 0x000001c6u, 0x000001b9u, 0x000300f7u, 0x000001c8u, 0x00000000u, 0x000400fau, 0x000001c6u, 0x000001c7u, 0x000001c8u, 0x000200f8u, 0x000001c7u, 0x0004003du, 0x00000032u, 0x000001cdu, 0x0000003eu, 0x00070041u, 0x000001ceu, 0x000001cfu, 0x000001ccu, 0x0000009bu, 0x000001cdu, 0x0000004du, 0x000700eau, 0x00000032u, 0x000001d1u, 0x000001cfu, 0x00000050u, 0x0000004du, 0x000001c4u, 0x0003003eu, 0x000001c5u, 0x000001d1u, 0x000200f9u, 0x000001c8u, 0x000200f8u, 0x000001c8u, 0x000700f5u, 0x00000032u, 0x0000087au, 0x0000004du, 0x00000040u, 0x000001d1u, 0x000001c7u, 0x00050152u, 0x00000032u, 0x000001d3u, 0x000001b9u, 0x0000087au, 0x0003003eu, 0x000001c5u, 0x000001d3u, 0x00060156u, 0x00000032u, 0x000001d5u, 0x000001b9u, 0x00000002u, 0x000001c1u, 0x00050080u, 0x00000032u, 0x000001d7u, 0x000001d3u, 0x000001d5u, 0x0003003eu, 0x000001c5u, 0x000001d7u, 0x000200feu, 0x000001d7u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x000007c8u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001beu, 0x000001c9u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000020u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000181u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000181u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000181u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000181u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000181u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000181u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000181u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000181u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000181u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000181u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000181u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000182u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000183u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000183u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000183u, 0x00000002u, 0x00040047u, 0x00000185u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000185u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001a6u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001a7u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a7u, 0x00000002u, 0x00040047u, 0x000001a9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001a9u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001beu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x000001c9u, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000001ddu, 0x00000001u, 0x00000004u, 0x00040047u, 0x000001deu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001e7u, 0x00000001u, 0x00000002u, 0x00050048u, 0x000001f1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000001f1u, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x000001f1u, 0x00000002u, 0x00040047u, 0x0000022du, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002a6u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002a7u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002a7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002a7u, 0x00000002u, 0x00040047u, 0x000002a9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002a9u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002abu, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002b7u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002b8u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002b8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b8u, 0x00000002u, 0x00040047u, 0x000002bau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002bau, 0x00000021u, 0x00000004u, 0x00040047u, 0x000002c8u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x000002e1u, 0x00000001u, 0x00000005u, 0x00040047u, 0x000002e4u, 0x00000006u, 0x00000001u, 0x00050048u, 0x000002e5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002e5u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002e5u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x000002e6u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002e7u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002e7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002e7u, 0x00000002u, 0x00040047u, 0x000002e9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002e9u, 0x00000021u, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x00040015u, 0x0000001cu, 0x00000010u, 0x00000001u, 0x00040015u, 0x0000001du, 0x00000008u, 0x00000000u, 0x000d001eu, 0x0000001eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00020014u, 0x00000020u, 0x00040020u, 0x00000021u, 0x00000007u, 0x00000020u, 0x00040017u, 0x00000022u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000023u, 0x00000022u, 0x0000001fu, 0x00000008u, 0x00000021u, 0x00000014u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000022u, 0x00070021u, 0x0000002bu, 0x00000020u, 0x0000001fu, 0x0000002au, 0x0000002au, 0x00000014u, 0x00040015u, 0x00000032u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000033u, 0x00000007u, 0x00000032u, 0x00040021u, 0x00000034u, 0x0000001eu, 0x00000033u, 0x0006001eu, 0x00000038u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000039u, 0x00000038u, 0x00000033u, 0x0004002bu, 0x00000006u, 0x0000003eu, 0x0000000fu, 0x0004002bu, 0x00000032u, 0x00000049u, 0x00000000u, 0x0004002bu, 0x00000032u, 0x0000004cu, 0x00000001u, 0x0004001eu, 0x00000064u, 0x00000007u, 0x00000007u, 0x00040017u, 0x00000069u, 0x00000032u, 0x00000004u, 0x00040020u, 0x0000006eu, 0x00000007u, 0x00000069u, 0x0004001eu, 0x00000070u, 0x00000069u, 0x00000069u, 0x0004002bu, 0x00000006u, 0x0000007eu, 0x00000003u, 0x00040020u, 0x0000007fu, 0x00000007u, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x00000083u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x00000086u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000097u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000abu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000bdu, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000bfu, 0x00000002u, 0x00040017u, 0x000000d5u, 0x00000020u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000e4u, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000e5u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x0007002cu, 0x00000007u, 0x000000e7u, 0x00000097u, 0x00000097u, 0x00000097u, 0x00000097u, 0x0004002bu, 0x00000006u, 0x000000ebu, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000ecu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x0004002bu, 0x00000006u, 0x000000eeu, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000efu, 0x000000eeu, 0x000000eeu, 0x000000eeu, 0x000000eeu, 0x0004002bu, 0x00000006u, 0x00000115u, 0x000007ffu, 0x0005002cu, 0x00000022u, 0x00000124u, 0x00000097u, 0x000000e4u, 0x0004002bu, 0x00000006u, 0x0000013au, 0x00000008u, 0x0003002au, 0x00000020u, 0x00000146u, 0x0004002bu, 0x00000006u, 0x00000149u, 0x00000009u, 0x00040020u, 0x0000014au, 0x00000007u, 0x0000001du, 0x0005002cu, 0x00000022u, 0x00000159u, 0x000000eeu, 0x00000097u, 0x000d001eu, 0x00000181u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x0003001du, 0x00000182u, 0x00000181u, 0x0003001eu, 0x00000183u, 0x00000182u, 0x00040020u, 0x00000184u, 0x0000000cu, 0x00000183u, 0x0004003bu, 0x00000184u, 0x00000185u, 0x0000000cu, 0x00040020u, 0x00000187u, 0x0000000cu, 0x00000181u, 0x0004002bu, 0x00000006u, 0x000001a0u, 0x0000000au, 0x0003001du, 0x000001a6u, 0x00000007u, 0x0003001eu, 0x000001a7u, 0x000001a6u, 0x00040020u, 0x000001a8u, 0x0000000cu, 0x000001a7u, 0x0004003bu, 0x000001a8u, 0x000001a9u, 0x0000000cu, 0x00040020u, 0x000001abu, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000032u, 0x000001b2u, 0x00000002u, 0x0004002bu, 0x00000032u, 0x000001b5u, 0x00000003u, 0x00040017u, 0x000001bcu, 0x00000032u, 0x00000003u, 0x00040020u, 0x000001bdu, 0x00000001u, 0x000001bcu, 0x0004003bu, 0x000001bdu, 0x000001beu, 0x00000001u, 0x00040020u, 0x000001bfu, 0x00000001u, 0x00000032u, 0x00040017u, 0x000001c4u, 0x00000032u, 0x00000002u, 0x0004003bu, 0x000001bfu, 0x000001c9u, 0x00000001u, 0x0005002cu, 0x00000022u, 0x000001d4u, 0x0000013au, 0x00000086u, 0x00040032u, 0x00000006u, 0x000001ddu, 0x00000400u, 0x00040032u, 0x00000006u, 0x000001deu, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001dfu, 0x00000087u, 0x000001ddu, 0x000001deu, 0x00060034u, 0x00000006u, 0x000001e6u, 0x00000084u, 0x000001deu, 0x0000013au, 0x00040032u, 0x00000006u, 0x000001e7u, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001e8u, 0x00000084u, 0x000001e7u, 0x00000086u, 0x00050033u, 0x00000022u, 0x000001e9u, 0x000001e6u, 0x000001e8u, 0x00060034u, 0x00000006u, 0x000001edu, 0x00000084u, 0x000001deu, 0x0000013au, 0x00060034u, 0x00000006u, 0x000001eeu, 0x00000084u, 0x000001e7u, 0x00000086u, 0x00050033u, 0x00000022u, 0x000001efu, 0x000001edu, 0x000001eeu, 0x0004001eu, 0x000001f1u, 0x000001c4u, 0x00000006u, 0x00040020u, 0x000001f2u, 0x00000009u, 0x000001f1u, 0x0004003bu, 0x000001f2u, 0x000001f3u, 0x00000009u, 0x00040020u, 0x000001f4u, 0x00000009u, 0x000001c4u, 0x00050033u, 0x00000022u, 0x000001fdu, 0x000001deu, 0x000001e7u, 0x00050033u, 0x00000022u, 0x00000201u, 0x000001deu, 0x000001e7u, 0x00040020u, 0x0000020au, 0x00000009u, 0x00000006u, 0x00040020u, 0x00000211u, 0x00000004u, 0x00000032u, 0x0004003bu, 0x00000211u, 0x00000212u, 0x00000004u, 0x0004002bu, 0x00000032u, 0x00000213u, 0x00000108u, 0x0004002bu, 0x00000006u, 0x00000216u, 0x00000020u, 0x00040020u, 0x00000226u, 0x00000007u, 0x00000038u, 0x00040032u, 0x00000006u, 0x0000022du, 0x00000001u, 0x0003001du, 0x000002a6u, 0x00000032u, 0x0003001eu, 0x000002a7u, 0x000002a6u, 0x00040020u, 0x000002a8u, 0x0000000cu, 0x000002a7u, 0x0004003bu, 0x000002a8u, 0x000002a9u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002abu, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002acu, 0x00000087u, 0x000002abu, 0x00000216u, 0x00040020u, 0x000002b1u, 0x0000000cu, 0x00000032u, 0x0003001du, 0x000002b7u, 0x00000032u, 0x0003001eu, 0x000002b8u, 0x000002b7u, 0x00040020u, 0x000002b9u, 0x0000000cu, 0x000002b8u, 0x0004003bu, 0x000002b9u, 0x000002bau, 0x0000000cu, 0x0004002bu, 0x00000032u, 0x000002c7u, 0x00000020u, 0x0006002cu, 0x000001bcu, 0x000002c8u, 0x000002c7u, 0x0000004cu, 0x0000004cu, 0x0004002bu, 0x00000006u, 0x000002c9u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x000002cau, 0x00000040u, 0x0004002bu, 0x00000006u, 0x000002cbu, 0x00000080u, 0x0004002bu, 0x00000006u, 0x000002ccu, 0x00000100u, 0x0004002bu, 0x00000006u, 0x000002cdu, 0x00000200u, 0x0004002bu, 0x00000006u, 0x000002ceu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x000002cfu, 0x00000800u, 0x0004002bu, 0x00000006u, 0x000002d0u, 0x00001000u, 0x0004002bu, 0x00000006u, 0x000002d1u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x000002d2u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x000002d3u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x000002d4u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x000002d5u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x000002d6u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x000002d7u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x000002d8u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x000002d9u, 0x00200000u, 0x0004002bu, 0x00000006u, 0x000002dau, 0x00400000u, 0x0004002bu, 0x00000006u, 0x000002dbu, 0x00800000u, 0x0004002bu, 0x00000006u, 0x000002dcu, 0x01000000u, 0x0004002bu, 0x00000006u, 0x000002ddu, 0x0000001au, 0x0004002bu, 0x00000006u, 0x000002deu, 0x10000000u, 0x0004002bu, 0x00000006u, 0x000002dfu, 0x20000000u, 0x0004002bu, 0x00000006u, 0x000002e0u, 0x40000000u, 0x00040032u, 0x00000006u, 0x000002e1u, 0x00008000u, 0x00040017u, 0x000002e2u, 0x0000001du, 0x00000004u, 0x0004002bu, 0x00000032u, 0x000002e3u, 0x00000008u, 0x0004001cu, 0x000002e4u, 0x0000001du, 0x000002e3u, 0x0005001eu, 0x000002e5u, 0x000002e2u, 0x000002e2u, 0x000002e4u, 0x0003001du, 0x000002e6u, 0x000002e5u, 0x0003001eu, 0x000002e7u, 0x000002e6u, 0x00040020u, 0x000002e8u, 0x0000000cu, 0x000002e7u, 0x0004003bu, 0x000002e8u, 0x000002e9u, 0x0000000cu, 0x00030029u, 0x00000020u, 0x000002efu, 0x0003002eu, 0x0000001cu, 0x00000614u, 0x0003002eu, 0x0000001du, 0x00000615u, 0x0005002cu, 0x00000022u, 0x000007b9u, 0x000000abu, 0x000000abu, 0x0005002cu, 0x00000022u, 0x000007bau, 0x000000bfu, 0x000000bfu, 0x0007002cu, 0x00000007u, 0x000007bbu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000014au, 0x00000736u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000735u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000734u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000733u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000732u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000731u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000730u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000072du, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000715u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000714u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000713u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000711u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000710u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000070fu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000070eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000070bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000706u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000705u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000704u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000703u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006edu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006ecu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006ebu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006eau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e9u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006e8u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006e7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006e4u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006ccu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006cau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c7u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006c6u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006afu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006aeu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006adu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000695u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000694u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000693u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000692u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000691u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000690u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000068fu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000068eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000068bu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000067eu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000067du, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000067cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000067au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000679u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000678u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000677u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000676u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000675u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000674u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000066au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000669u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000668u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000667u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000666u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000665u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000664u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000065au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000659u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000658u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000657u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000063fu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000063eu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000063au, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000639u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000638u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000637u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000636u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000635u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000628u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000627u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000626u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000625u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000624u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000623u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000622u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000621u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000620u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000613u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000612u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000611u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000610u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000060fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000060eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000060du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000060cu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000600u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000601u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000005f4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005f5u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000005e8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005e9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005e4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005e0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005c8u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x000005c9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005cau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005aeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005afu, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x000005b0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000595u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000596u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x00000597u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000598u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004ffu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000500u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000501u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000502u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000503u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000504u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000505u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000506u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000507u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000508u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000509u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000050au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000050bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000050cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000050du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000050eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000050fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000510u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000511u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000512u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000513u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000516u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000517u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000518u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000519u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051au, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000051bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051du, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000051eu, 0x00000007u, 0x0005003bu, 0x00000021u, 0x000004a8u, 0x00000007u, 0x00000146u, 0x0004003bu, 0x00000021u, 0x000004a9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004aau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004abu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000004acu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004adu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004aeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004b0u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000004b1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004b2u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000004b3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000047eu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000472u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000473u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000466u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000467u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000045au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000045bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000456u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000452u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000439u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000043au, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x0000043bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000043cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000420u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000421u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x00000422u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000423u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000407u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000408u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x00000409u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000040au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000371u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000372u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000373u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000374u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000375u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000376u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000377u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000378u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000379u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000037au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000037bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000037cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000037du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000037eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000037fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000380u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000381u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000382u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000383u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000384u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000385u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000386u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000387u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000388u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000389u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038cu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000038du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000390u, 0x00000007u, 0x0005003bu, 0x00000021u, 0x0000031au, 0x00000007u, 0x00000146u, 0x0004003bu, 0x00000021u, 0x0000031bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000031cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000031du, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000031eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000031fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000320u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000322u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000323u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000324u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000325u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000002f0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001bbu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001ccu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001cfu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001d2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001dau, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001e4u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001ebu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001fbu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001ffu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000209u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000214u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000021au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000228u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000022bu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000023au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000024bu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000250u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000252u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000254u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000025cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000025eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000266u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000026eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000275u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000278u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000284u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000295u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000029au, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000029cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000029eu, 0x00000007u, 0x00050041u, 0x000001bfu, 0x000001c0u, 0x000001beu, 0x00000049u, 0x0004003du, 0x00000032u, 0x000001c1u, 0x000001c0u, 0x0004007cu, 0x00000006u, 0x000001c2u, 0x000001c1u, 0x0003003eu, 0x000001bbu, 0x000001c2u, 0x0004003du, 0x000001bcu, 0x000001c5u, 0x000001beu, 0x0007004fu, 0x000001c4u, 0x000001c6u, 0x000001c5u, 0x000001c5u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000022u, 0x000001c7u, 0x000001c6u, 0x0003003eu, 0x000001c3u, 0x000001c7u, 0x0004003du, 0x00000032u, 0x000001cau, 0x000001c9u, 0x0004007cu, 0x00000006u, 0x000001cbu, 0x000001cau, 0x0003003eu, 0x000001c8u, 0x000001cbu, 0x000500c7u, 0x00000006u, 0x000001ceu, 0x000001cbu, 0x000000bdu, 0x0003003eu, 0x000001ccu, 0x000001ceu, 0x000500c3u, 0x00000006u, 0x000001d1u, 0x000001cbu, 0x0000007eu, 0x0003003eu, 0x000001cfu, 0x000001d1u, 0x00050084u, 0x00000022u, 0x000001d5u, 0x000001c7u, 0x000001d4u, 0x00050050u, 0x00000022u, 0x000001d8u, 0x000001ceu, 0x000001d1u, 0x00050080u, 0x00000022u, 0x000001d9u, 0x000001d5u, 0x000001d8u, 0x0003003eu, 0x000001d2u, 0x000001d9u, 0x00050041u, 0x00000014u, 0x000001dbu, 0x000001d2u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000001dcu, 0x000001dbu, 0x00050084u, 0x00000006u, 0x000001e0u, 0x000001dcu, 0x000001dfu, 0x00050041u, 0x00000014u, 0x000001e1u, 0x000001d2u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000001e2u, 0x000001e1u, 0x00050080u, 0x00000006u, 0x000001e3u, 0x000001e0u, 0x000001e2u, 0x0003003eu, 0x000001dau, 0x000001e3u, 0x00050084u, 0x00000022u, 0x000001eau, 0x000001c7u, 0x000001e9u, 0x0003003eu, 0x000001e4u, 0x000001eau, 0x00050080u, 0x00000022u, 0x000001f0u, 0x000001eau, 0x000001efu, 0x00050041u, 0x000001f4u, 0x000001f5u, 0x000001f3u, 0x00000097u, 0x0004003du, 0x000001c4u, 0x000001f6u, 0x000001f5u, 0x0004007cu, 0x00000022u, 0x000001f7u, 0x000001f6u, 0x0007000cu, 0x00000022u, 0x000001f8u, 0x00000001u, 0x00000027u, 0x000001f0u, 0x000001f7u, 0x00050082u, 0x00000022u, 0x000001fau, 0x000001f8u, 0x000007b9u, 0x0003003eu, 0x000001ebu, 0x000001fau, 0x0004003du, 0x00000022u, 0x000001fcu, 0x000001d2u, 0x00050084u, 0x00000022u, 0x000001feu, 0x000001fcu, 0x000001fdu, 0x0003003eu, 0x000001fbu, 0x000001feu, 0x00050080u, 0x00000022u, 0x00000202u, 0x000001feu, 0x00000201u, 0x0007000cu, 0x00000022u, 0x00000206u, 0x00000001u, 0x00000027u, 0x00000202u, 0x000001f7u, 0x00050082u, 0x00000022u, 0x00000208u, 0x00000206u, 0x000007b9u, 0x0003003eu, 0x000001ffu, 0x00000208u, 0x00050041u, 0x0000020au, 0x0000020bu, 0x000001f3u, 0x000000abu, 0x0004003du, 0x00000006u, 0x0000020cu, 0x0000020bu, 0x0003003eu, 0x00000209u, 0x0000020cu, 0x000500aau, 0x00000020u, 0x0000020eu, 0x000001cbu, 0x00000097u, 0x000300f7u, 0x00000210u, 0x00000000u, 0x000400fau, 0x0000020eu, 0x0000020fu, 0x00000210u, 0x000200f8u, 0x0000020fu, 0x0003003eu, 0x00000212u, 0x00000049u, 0x000200f9u, 0x00000210u, 0x000200f8u, 0x00000210u, 0x000400e0u, 0x000001b2u, 0x000001b2u, 0x00000213u, 0x0003003eu, 0x00000214u, 0x00000146u, 0x000500b1u, 0x00000020u, 0x00000217u, 0x000001cbu, 0x00000216u, 0x000300f7u, 0x00000219u, 0x00000000u, 0x000400fau, 0x00000217u, 0x00000218u, 0x00000219u, 0x000200f8u, 0x00000218u, 0x00050084u, 0x00000006u, 0x0000021cu, 0x000001c2u, 0x00000216u, 0x00050080u, 0x00000006u, 0x0000021eu, 0x0000021cu, 0x000001cbu, 0x0004007cu, 0x00000032u, 0x0000021fu, 0x0000021eu, 0x0003003eu, 0x0000021au, 0x0000021fu, 0x0004007cu, 0x00000032u, 0x00000222u, 0x0000020cu, 0x000500b0u, 0x00000020u, 0x00000223u, 0x0000021fu, 0x00000222u, 0x000300f7u, 0x00000225u, 0x00000000u, 0x000400fau, 0x00000223u, 0x00000224u, 0x00000225u, 0x000200f8u, 0x00000224u, 0x0003003eu, 0x00000228u, 0x0000021fu, 0x00060041u, 0x000001abu, 0x000002f3u, 0x000001a9u, 0x00000097u, 0x0000021fu, 0x0004003du, 0x00000007u, 0x000002f4u, 0x000002f3u, 0x0003003eu, 0x000002f0u, 0x000002f4u, 0x00050041u, 0x00000014u, 0x000002f5u, 0x000002f0u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000002f6u, 0x000002f5u, 0x00050041u, 0x00000014u, 0x000002f7u, 0x000002f0u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000002f8u, 0x000002f7u, 0x00050041u, 0x00000014u, 0x000002f9u, 0x000002f0u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000002fau, 0x000002f9u, 0x00050041u, 0x00000014u, 0x000002fbu, 0x000002f0u, 0x000001b5u, 0x0004003du, 0x00000006u, 0x000002fcu, 0x000002fbu, 0x00070050u, 0x00000038u, 0x000002fdu, 0x000002f6u, 0x000002f8u, 0x000002fau, 0x000002fcu, 0x0003003eu, 0x000006adu, 0x000002f6u, 0x0003003eu, 0x000006aeu, 0x000002f8u, 0x0003003eu, 0x000006afu, 0x000002fau, 0x0003003eu, 0x000006b0u, 0x000002fcu, 0x0003003eu, 0x000006bau, 0x000002f6u, 0x0003003eu, 0x000006bbu, 0x000002f8u, 0x0003003eu, 0x000006bcu, 0x000002fau, 0x0003003eu, 0x000006bdu, 0x000002fcu, 0x00050050u, 0x00000022u, 0x00000232u, 0x000002f6u, 0x000002f8u, 0x000500c3u, 0x00000022u, 0x00000234u, 0x00000232u, 0x000007bau, 0x00050050u, 0x00000022u, 0x00000235u, 0x0000022du, 0x0000022du, 0x00050084u, 0x00000022u, 0x00000236u, 0x00000235u, 0x00000234u, 0x00050082u, 0x00000022u, 0x00000238u, 0x00000236u, 0x000007b9u, 0x0007000cu, 0x00000022u, 0x00000239u, 0x00000001u, 0x0000002au, 0x000001eau, 0x00000238u, 0x0003003eu, 0x0000022bu, 0x00000239u, 0x00050080u, 0x00000006u, 0x0000023eu, 0x000002fau, 0x0000007eu, 0x00050080u, 0x00000006u, 0x00000241u, 0x000002fcu, 0x0000007eu, 0x00050050u, 0x00000022u, 0x00000242u, 0x0000023eu, 0x00000241u, 0x000500c3u, 0x00000022u, 0x00000244u, 0x00000242u, 0x000007bau, 0x00050084u, 0x00000022u, 0x00000246u, 0x00000235u, 0x00000244u, 0x00050082u, 0x00000022u, 0x00000248u, 0x00000246u, 0x000007b9u, 0x0007000cu, 0x00000022u, 0x00000249u, 0x00000001u, 0x00000027u, 0x000001fau, 0x00000248u, 0x0003003eu, 0x0000023au, 0x00000249u, 0x0003003eu, 0x0000024bu, 0x0000021fu, 0x00060041u, 0x00000187u, 0x00000301u, 0x00000185u, 0x00000097u, 0x0000021fu, 0x0004003du, 0x00000181u, 0x00000302u, 0x00000301u, 0x00050051u, 0x00000006u, 0x00000303u, 0x00000302u, 0x00000000u, 0x0003003eu, 0x00000674u, 0x00000303u, 0x00050051u, 0x00000006u, 0x00000305u, 0x00000302u, 0x00000001u, 0x0003003eu, 0x00000675u, 0x00000305u, 0x00050051u, 0x00000006u, 0x00000307u, 0x00000302u, 0x00000002u, 0x0003003eu, 0x00000676u, 0x00000307u, 0x00050051u, 0x0000001cu, 0x00000309u, 0x00000302u, 0x00000003u, 0x0003003eu, 0x00000677u, 0x00000309u, 0x00050051u, 0x0000001cu, 0x0000030bu, 0x00000302u, 0x00000004u, 0x0003003eu, 0x00000678u, 0x0000030bu, 0x00050051u, 0x00000006u, 0x0000030du, 0x00000302u, 0x00000005u, 0x0003003eu, 0x00000679u, 0x0000030du, 0x00050051u, 0x00000006u, 0x0000030fu, 0x00000302u, 0x00000006u, 0x0003003eu, 0x0000067au, 0x0000030fu, 0x00050051u, 0x00000006u, 0x00000311u, 0x00000302u, 0x00000007u, 0x0003003eu, 0x0000067bu, 0x00000311u, 0x00050051u, 0x0000001cu, 0x00000313u, 0x00000302u, 0x00000008u, 0x0003003eu, 0x0000067cu, 0x00000313u, 0x00050051u, 0x0000001du, 0x00000315u, 0x00000302u, 0x00000009u, 0x0003003eu, 0x0000067du, 0x00000315u, 0x00050051u, 0x0000001du, 0x00000317u, 0x00000302u, 0x0000000au, 0x0003003eu, 0x0000067eu, 0x00000317u, 0x000e0050u, 0x0000001eu, 0x0000068au, 0x00000303u, 0x00000305u, 0x00000307u, 0x00000309u, 0x0000030bu, 0x0000030du, 0x0000030fu, 0x00000311u, 0x00000313u, 0x00000315u, 0x00000317u, 0x0003003eu, 0x0000068bu, 0x00000303u, 0x0003003eu, 0x0000068cu, 0x00000305u, 0x0003003eu, 0x0000068du, 0x00000307u, 0x0003003eu, 0x0000068eu, 0x00000309u, 0x0003003eu, 0x0000068fu, 0x0000030bu, 0x0003003eu, 0x00000690u, 0x0000030du, 0x0003003eu, 0x00000691u, 0x0000030fu, 0x0003003eu, 0x00000692u, 0x00000311u, 0x0003003eu, 0x00000693u, 0x00000313u, 0x0003003eu, 0x00000694u, 0x00000315u, 0x0003003eu, 0x00000695u, 0x00000317u, 0x0003003eu, 0x000006c2u, 0x00000303u, 0x0003003eu, 0x000006c3u, 0x00000305u, 0x0003003eu, 0x000006c4u, 0x00000307u, 0x0003003eu, 0x000006c5u, 0x00000309u, 0x0003003eu, 0x000006c6u, 0x0000030bu, 0x0003003eu, 0x000006c7u, 0x0000030du, 0x0003003eu, 0x000006c8u, 0x0000030fu, 0x0003003eu, 0x000006c9u, 0x00000311u, 0x0003003eu, 0x000006cau, 0x00000313u, 0x0003003eu, 0x000006cbu, 0x00000315u, 0x0003003eu, 0x000006ccu, 0x00000317u, 0x0003003eu, 0x000006e4u, 0x00000303u, 0x0003003eu, 0x000006e5u, 0x00000305u, 0x0003003eu, 0x000006e6u, 0x00000307u, 0x0003003eu, 0x000006e7u, 0x00000309u, 0x0003003eu, 0x000006e8u, 0x0000030bu, 0x0003003eu, 0x000006e9u, 0x0000030du, 0x0003003eu, 0x000006eau, 0x0000030fu, 0x0003003eu, 0x000006ebu, 0x00000311u, 0x0003003eu, 0x000006ecu, 0x00000313u, 0x0003003eu, 0x000006edu, 0x00000315u, 0x0003003eu, 0x00000250u, 0x00000239u, 0x0003003eu, 0x00000252u, 0x00000249u, 0x0003003eu, 0x00000254u, 0x0000022du, 0x0003003eu, 0x0000031au, 0x00000146u, 0x000300f7u, 0x00000326u, 0x00000000u, 0x000300fbu, 0x00000049u, 0x00000327u, 0x000200f8u, 0x00000327u, 0x00050041u, 0x00000014u, 0x00000328u, 0x00000250u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000329u, 0x00000328u, 0x00050084u, 0x00000006u, 0x0000032au, 0x00000329u, 0x00000086u, 0x0003003eu, 0x0000031cu, 0x0000032au, 0x00050041u, 0x00000014u, 0x0000032bu, 0x00000252u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000032cu, 0x0000032bu, 0x00050084u, 0x00000006u, 0x0000032du, 0x0000032cu, 0x00000086u, 0x00050080u, 0x00000006u, 0x0000032eu, 0x0000032du, 0x0000007eu, 0x0003003eu, 0x0000031du, 0x0000032eu, 0x00040072u, 0x00000006u, 0x00000333u, 0x00000309u, 0x00050084u, 0x00000006u, 0x00000334u, 0x0000022du, 0x00000333u, 0x0007000cu, 0x00000006u, 0x00000335u, 0x00000001u, 0x0000002au, 0x0000032au, 0x00000334u, 0x0003003eu, 0x0000031cu, 0x00000335u, 0x00040072u, 0x00000006u, 0x0000033au, 0x00000313u, 0x00050084u, 0x00000006u, 0x0000033bu, 0x0000022du, 0x0000033au, 0x00050082u, 0x00000006u, 0x0000033cu, 0x0000033bu, 0x000000abu, 0x0007000cu, 0x00000006u, 0x0000033du, 0x00000001u, 0x00000027u, 0x0000032eu, 0x0000033cu, 0x0003003eu, 0x0000031du, 0x0000033du, 0x000500b1u, 0x00000020u, 0x00000340u, 0x0000033du, 0x00000335u, 0x000300f7u, 0x00000341u, 0x00000000u, 0x000400fau, 0x00000340u, 0x00000342u, 0x00000341u, 0x000200f8u, 0x00000342u, 0x0003003eu, 0x0000031au, 0x000002efu, 0x0003003eu, 0x0000031bu, 0x00000146u, 0x000200f9u, 0x00000326u, 0x000200f8u, 0x00000341u, 0x00040071u, 0x00000032u, 0x00000345u, 0x00000315u, 0x0004007cu, 0x00000006u, 0x00000346u, 0x00000345u, 0x000500c7u, 0x00000006u, 0x00000347u, 0x00000346u, 0x000000abu, 0x000500abu, 0x00000020u, 0x00000348u, 0x00000347u, 0x00000097u, 0x0003003eu, 0x0000031eu, 0x00000348u, 0x00040072u, 0x00000006u, 0x0000034du, 0x0000030bu, 0x00050084u, 0x00000006u, 0x0000034fu, 0x0000034du, 0x0000022du, 0x00050050u, 0x00000022u, 0x00000350u, 0x0000034fu, 0x0000034fu, 0x00050080u, 0x00000022u, 0x00000351u, 0x00000350u, 0x00000159u, 0x00050050u, 0x00000022u, 0x00000353u, 0x00000335u, 0x00000335u, 0x00050050u, 0x00000022u, 0x00000355u, 0x0000033du, 0x0000033du, 0x0008000cu, 0x00000022u, 0x00000356u, 0x00000001u, 0x0000002du, 0x00000351u, 0x00000353u, 0x00000355u, 0x00050051u, 0x00000006u, 0x00000357u, 0x00000356u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000358u, 0x00000356u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000359u, 0x00000335u, 0x0000033du, 0x00000357u, 0x00000358u, 0x0003003eu, 0x0000031fu, 0x00000359u, 0x000e0050u, 0x0000001eu, 0x00000702u, 0x00000303u, 0x00000305u, 0x00000307u, 0x00000309u, 0x0000030bu, 0x0000030du, 0x0000030fu, 0x00000311u, 0x00000313u, 0x00000315u, 0x00000615u, 0x0003003eu, 0x00000664u, 0x00000303u, 0x0003003eu, 0x00000665u, 0x00000305u, 0x0003003eu, 0x00000666u, 0x00000307u, 0x0003003eu, 0x00000667u, 0x00000309u, 0x0003003eu, 0x00000668u, 0x0000030bu, 0x0003003eu, 0x00000669u, 0x0000030du, 0x0003003eu, 0x0000066au, 0x0000030fu, 0x0003003eu, 0x0000066bu, 0x00000311u, 0x0003003eu, 0x00000322u, 0x00000359u, 0x0003003eu, 0x00000323u, 0x00000348u, 0x0003003eu, 0x00000324u, 0x0000022du, 0x000500c7u, 0x00000006u, 0x00000394u, 0x00000333u, 0x00000083u, 0x0003003eu, 0x00000371u, 0x00000394u, 0x0003003eu, 0x00000372u, 0x0000034du, 0x00050084u, 0x00000006u, 0x0000039au, 0x00000394u, 0x0000022du, 0x0003003eu, 0x00000371u, 0x0000039au, 0x0003003eu, 0x00000372u, 0x0000034fu, 0x00070050u, 0x00000007u, 0x000003a0u, 0x0000039au, 0x0000039au, 0x0000039au, 0x0000039au, 0x00050082u, 0x00000007u, 0x000003a1u, 0x00000359u, 0x000003a0u, 0x00050084u, 0x00000006u, 0x000003a5u, 0x0000022du, 0x00000303u, 0x0003003eu, 0x00000375u, 0x000003a1u, 0x0003003eu, 0x00000376u, 0x0000030du, 0x0003003eu, 0x00000377u, 0x000003a5u, 0x00070050u, 0x00000007u, 0x0000040du, 0x0000030du, 0x0000030du, 0x0000030du, 0x0000030du, 0x00050098u, 0x00000064u, 0x0000040eu, 0x000003a1u, 0x0000040du, 0x00050051u, 0x00000007u, 0x0000040fu, 0x0000040eu, 0x00000000u, 0x0003003eu, 0x00000408u, 0x0000040fu, 0x00050051u, 0x00000007u, 0x00000410u, 0x0000040eu, 0x00000001u, 0x0003003eu, 0x00000407u, 0x00000410u, 0x0004007cu, 0x00000069u, 0x00000412u, 0x0000040fu, 0x0004007cu, 0x00000032u, 0x00000414u, 0x000003a5u, 0x00070050u, 0x00000069u, 0x00000415u, 0x00000414u, 0x00000414u, 0x00000414u, 0x00000414u, 0x00050095u, 0x00000070u, 0x00000416u, 0x00000412u, 0x00000415u, 0x00050051u, 0x00000069u, 0x00000417u, 0x00000416u, 0x00000001u, 0x0003003eu, 0x00000409u, 0x00000417u, 0x00050051u, 0x00000069u, 0x00000418u, 0x00000416u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000419u, 0x00000418u, 0x0003003eu, 0x00000408u, 0x00000419u, 0x0004007cu, 0x00000007u, 0x0000041bu, 0x00000417u, 0x00050080u, 0x00000007u, 0x0000041du, 0x00000410u, 0x0000041bu, 0x0003003eu, 0x00000407u, 0x0000041du, 0x0003003eu, 0x00000378u, 0x0000041du, 0x0003003eu, 0x0000040au, 0x00000419u, 0x0003003eu, 0x00000374u, 0x0000041du, 0x0003003eu, 0x00000373u, 0x00000419u, 0x00050084u, 0x00000006u, 0x000003b1u, 0x0000022du, 0x00000305u, 0x0003003eu, 0x0000037bu, 0x000003a1u, 0x0003003eu, 0x0000037cu, 0x0000030fu, 0x0003003eu, 0x0000037du, 0x000003b1u, 0x00070050u, 0x00000007u, 0x00000426u, 0x0000030fu, 0x0000030fu, 0x0000030fu, 0x0000030fu, 0x00050098u, 0x00000064u, 0x00000427u, 0x000003a1u, 0x00000426u, 0x00050051u, 0x00000007u, 0x00000428u, 0x00000427u, 0x00000000u, 0x0003003eu, 0x00000421u, 0x00000428u, 0x00050051u, 0x00000007u, 0x00000429u, 0x00000427u, 0x00000001u, 0x0003003eu, 0x00000420u, 0x00000429u, 0x0004007cu, 0x00000069u, 0x0000042bu, 0x00000428u, 0x0004007cu, 0x00000032u, 0x0000042du, 0x000003b1u, 0x00070050u, 0x00000069u, 0x0000042eu, 0x0000042du, 0x0000042du, 0x0000042du, 0x0000042du, 0x00050095u, 0x00000070u, 0x0000042fu, 0x0000042bu, 0x0000042eu, 0x00050051u, 0x00000069u, 0x00000430u, 0x0000042fu, 0x00000001u, 0x0003003eu, 0x00000422u, 0x00000430u, 0x00050051u, 0x00000069u, 0x00000431u, 0x0000042fu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000432u, 0x00000431u, 0x0003003eu, 0x00000421u, 0x00000432u, 0x0004007cu, 0x00000007u, 0x00000434u, 0x00000430u, 0x00050080u, 0x00000007u, 0x00000436u, 0x00000429u, 0x00000434u, 0x0003003eu, 0x00000420u, 0x00000436u, 0x0003003eu, 0x0000037eu, 0x00000436u, 0x0003003eu, 0x00000423u, 0x00000432u, 0x0003003eu, 0x0000037au, 0x00000436u, 0x0003003eu, 0x00000379u, 0x00000432u, 0x00070050u, 0x00000007u, 0x000003b8u, 0x0000034fu, 0x0000034fu, 0x0000034fu, 0x0000034fu, 0x00050082u, 0x00000007u, 0x000003b9u, 0x00000359u, 0x000003b8u, 0x00050084u, 0x00000006u, 0x000003bdu, 0x0000022du, 0x00000307u, 0x0003003eu, 0x00000381u, 0x000003b9u, 0x0003003eu, 0x00000382u, 0x00000311u, 0x0003003eu, 0x00000383u, 0x000003bdu, 0x00070050u, 0x00000007u, 0x0000043fu, 0x00000311u, 0x00000311u, 0x00000311u, 0x00000311u, 0x00050098u, 0x00000064u, 0x00000440u, 0x000003b9u, 0x0000043fu, 0x00050051u, 0x00000007u, 0x00000441u, 0x00000440u, 0x00000000u, 0x0003003eu, 0x0000043au, 0x00000441u, 0x00050051u, 0x00000007u, 0x00000442u, 0x00000440u, 0x00000001u, 0x0003003eu, 0x00000439u, 0x00000442u, 0x0004007cu, 0x00000069u, 0x00000444u, 0x00000441u, 0x0004007cu, 0x00000032u, 0x00000446u, 0x000003bdu, 0x00070050u, 0x00000069u, 0x00000447u, 0x00000446u, 0x00000446u, 0x00000446u, 0x00000446u, 0x00050095u, 0x00000070u, 0x00000448u, 0x00000444u, 0x00000447u, 0x00050051u, 0x00000069u, 0x00000449u, 0x00000448u, 0x00000001u, 0x0003003eu, 0x0000043bu, 0x00000449u, 0x00050051u, 0x00000069u, 0x0000044au, 0x00000448u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x0000044bu, 0x0000044au, 0x0003003eu, 0x0000043au, 0x0000044bu, 0x0004007cu, 0x00000007u, 0x0000044du, 0x00000449u, 0x00050080u, 0x00000007u, 0x0000044fu, 0x00000442u, 0x0000044du, 0x0003003eu, 0x00000439u, 0x0000044fu, 0x0003003eu, 0x00000384u, 0x0000044fu, 0x0003003eu, 0x0000043cu, 0x0000044bu, 0x0003003eu, 0x00000380u, 0x0000044fu, 0x0003003eu, 0x0000037fu, 0x0000044bu, 0x00050084u, 0x00000006u, 0x000003c9u, 0x0000022du, 0x0000034du, 0x00070050u, 0x00000007u, 0x000003cau, 0x000003c9u, 0x000003c9u, 0x000003c9u, 0x000003c9u, 0x000500b1u, 0x000000d5u, 0x000003cbu, 0x00000359u, 0x000003cau, 0x000600a9u, 0x00000007u, 0x000003ccu, 0x000003cbu, 0x00000432u, 0x0000044bu, 0x0003003eu, 0x0000037fu, 0x000003ccu, 0x000600a9u, 0x00000007u, 0x000003d7u, 0x000003cbu, 0x00000436u, 0x0000044fu, 0x0003003eu, 0x00000380u, 0x000003d7u, 0x000500adu, 0x000000d5u, 0x000003dau, 0x0000041du, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000003dbu, 0x000003dau, 0x000000e5u, 0x00000419u, 0x0003003eu, 0x00000373u, 0x000003dbu, 0x000500b1u, 0x000000d5u, 0x000003deu, 0x0000041du, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000003dfu, 0x000003deu, 0x000000ecu, 0x000003dbu, 0x0003003eu, 0x00000373u, 0x000003dfu, 0x000500adu, 0x000000d5u, 0x000003e2u, 0x000003d7u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000003e3u, 0x000003e2u, 0x000000e5u, 0x000003ccu, 0x0003003eu, 0x0000037fu, 0x000003e3u, 0x000500b1u, 0x000000d5u, 0x000003e6u, 0x000003d7u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000003e7u, 0x000003e6u, 0x000000ecu, 0x000003e3u, 0x0003003eu, 0x0000037fu, 0x000003e7u, 0x0003003eu, 0x00000386u, 0x000003dfu, 0x000500c3u, 0x00000007u, 0x00000455u, 0x000003dfu, 0x000007bbu, 0x0003003eu, 0x00000452u, 0x00000455u, 0x0003003eu, 0x00000385u, 0x00000455u, 0x0003003eu, 0x00000388u, 0x000003e7u, 0x000500c3u, 0x00000007u, 0x00000459u, 0x000003e7u, 0x000007bbu, 0x0003003eu, 0x00000456u, 0x00000459u, 0x0003003eu, 0x00000387u, 0x00000459u, 0x000300f7u, 0x000003edu, 0x00000000u, 0x000400fau, 0x00000348u, 0x000003eeu, 0x000003efu, 0x000200f8u, 0x000003eeu, 0x0003003eu, 0x00000389u, 0x00000455u, 0x0003003eu, 0x0000038au, 0x00000459u, 0x000200f9u, 0x000003edu, 0x000200f8u, 0x000003efu, 0x0003003eu, 0x00000389u, 0x00000459u, 0x0003003eu, 0x0000038au, 0x00000455u, 0x000200f9u, 0x000003edu, 0x000200f8u, 0x000003edu, 0x00070050u, 0x000000d5u, 0x000007bcu, 0x00000348u, 0x00000348u, 0x00000348u, 0x00000348u, 0x000600a9u, 0x00000007u, 0x000007bdu, 0x000007bcu, 0x00000459u, 0x00000455u, 0x000600a9u, 0x00000007u, 0x000007bfu, 0x000007bcu, 0x00000455u, 0x00000459u, 0x0006000cu, 0x00000007u, 0x000003f5u, 0x00000001u, 0x00000005u, 0x000007bfu, 0x0006000cu, 0x00000007u, 0x000003f7u, 0x00000001u, 0x00000005u, 0x000007bdu, 0x0007000cu, 0x00000007u, 0x000003f8u, 0x00000001u, 0x0000002au, 0x000003f5u, 0x000003f7u, 0x0003003eu, 0x0000038cu, 0x000003f8u, 0x0007004fu, 0x00000022u, 0x0000045du, 0x000003f8u, 0x000003f8u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000045fu, 0x000003f8u, 0x000003f8u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000460u, 0x00000001u, 0x0000002au, 0x0000045du, 0x0000045fu, 0x0003003eu, 0x0000045au, 0x00000460u, 0x00050041u, 0x00000014u, 0x00000461u, 0x0000045au, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000462u, 0x00000461u, 0x00050041u, 0x00000014u, 0x00000463u, 0x0000045au, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000464u, 0x00000463u, 0x0007000cu, 0x00000006u, 0x00000465u, 0x00000001u, 0x0000002au, 0x00000462u, 0x00000464u, 0x0003003eu, 0x0000045bu, 0x00000465u, 0x0003003eu, 0x0000038bu, 0x00000465u, 0x00050084u, 0x00000006u, 0x000003fcu, 0x00000115u, 0x0000022du, 0x000500b3u, 0x00000020u, 0x000003fdu, 0x00000465u, 0x000003fcu, 0x000300f7u, 0x000003feu, 0x00000000u, 0x000400fau, 0x000003fdu, 0x000003ffu, 0x00000400u, 0x000200f8u, 0x000003ffu, 0x0003003eu, 0x0000038eu, 0x000007bfu, 0x0007004fu, 0x00000022u, 0x00000469u, 0x000007bfu, 0x000007bfu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000046bu, 0x000007bfu, 0x000007bfu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000046cu, 0x00000001u, 0x00000027u, 0x00000469u, 0x0000046bu, 0x0003003eu, 0x00000466u, 0x0000046cu, 0x00050041u, 0x00000014u, 0x0000046du, 0x00000466u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000046eu, 0x0000046du, 0x00050041u, 0x00000014u, 0x0000046fu, 0x00000466u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000470u, 0x0000046fu, 0x0007000cu, 0x00000006u, 0x00000471u, 0x00000001u, 0x00000027u, 0x0000046eu, 0x00000470u, 0x0003003eu, 0x00000467u, 0x00000471u, 0x0003003eu, 0x0000038fu, 0x000007bdu, 0x0007004fu, 0x00000022u, 0x00000475u, 0x000007bdu, 0x000007bdu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000477u, 0x000007bdu, 0x000007bdu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000478u, 0x00000001u, 0x0000002au, 0x00000475u, 0x00000477u, 0x0003003eu, 0x00000472u, 0x00000478u, 0x00050041u, 0x00000014u, 0x00000479u, 0x00000472u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000047au, 0x00000479u, 0x00050041u, 0x00000014u, 0x0000047bu, 0x00000472u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000047cu, 0x0000047bu, 0x0007000cu, 0x00000006u, 0x0000047du, 0x00000001u, 0x0000002au, 0x0000047au, 0x0000047cu, 0x0003003eu, 0x00000473u, 0x0000047du, 0x00050050u, 0x00000022u, 0x00000405u, 0x00000471u, 0x0000047du, 0x0003003eu, 0x0000038du, 0x00000405u, 0x000200f9u, 0x000003feu, 0x000200f8u, 0x00000400u, 0x0003003eu, 0x0000038du, 0x00000124u, 0x000200f9u, 0x000003feu, 0x000200f8u, 0x000003feu, 0x000700f5u, 0x00000022u, 0x0000076bu, 0x00000405u, 0x000003ffu, 0x00000124u, 0x00000400u, 0x0003003eu, 0x00000390u, 0x0000076bu, 0x0003003eu, 0x00000320u, 0x0000076bu, 0x00050041u, 0x00000014u, 0x0000035fu, 0x00000320u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000360u, 0x0000035fu, 0x00050041u, 0x00000014u, 0x00000361u, 0x00000250u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000362u, 0x00000361u, 0x0007000cu, 0x00000006u, 0x00000363u, 0x00000001u, 0x0000002au, 0x00000360u, 0x00000362u, 0x0003003eu, 0x0000035fu, 0x00000363u, 0x00050041u, 0x00000014u, 0x00000365u, 0x00000320u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000366u, 0x00000365u, 0x00050041u, 0x00000014u, 0x00000367u, 0x00000252u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000368u, 0x00000367u, 0x0007000cu, 0x00000006u, 0x00000369u, 0x00000001u, 0x00000027u, 0x00000366u, 0x00000368u, 0x0003003eu, 0x00000365u, 0x00000369u, 0x0004003du, 0x00000006u, 0x0000036cu, 0x0000035fu, 0x0004003du, 0x00000006u, 0x0000036eu, 0x00000365u, 0x000500b3u, 0x00000020u, 0x0000036fu, 0x0000036cu, 0x0000036eu, 0x0003003eu, 0x0000031au, 0x000002efu, 0x0003003eu, 0x0000031bu, 0x0000036fu, 0x000200f9u, 0x00000326u, 0x000200f8u, 0x00000326u, 0x000700f5u, 0x00000020u, 0x0000076cu, 0x00000146u, 0x00000342u, 0x0000036fu, 0x000003feu, 0x0003003eu, 0x00000325u, 0x0000076cu, 0x0003003eu, 0x00000214u, 0x0000076cu, 0x000200f9u, 0x00000225u, 0x000200f8u, 0x00000225u, 0x000700f5u, 0x00000020u, 0x0000076eu, 0x00000146u, 0x00000218u, 0x0000076cu, 0x00000326u, 0x000200f9u, 0x00000219u, 0x000200f8u, 0x00000219u, 0x000700f5u, 0x00000020u, 0x0000076du, 0x00000146u, 0x00000210u, 0x0000076eu, 0x00000225u, 0x000300f7u, 0x00000258u, 0x00000000u, 0x000400fau, 0x0000076du, 0x00000257u, 0x00000258u, 0x000200f8u, 0x00000257u, 0x000500c4u, 0x00000032u, 0x0000025au, 0x0000004cu, 0x000001cbu, 0x000700f1u, 0x00000032u, 0x0000025bu, 0x00000212u, 0x0000004cu, 0x00000049u, 0x0000025au, 0x000200f9u, 0x00000258u, 0x000200f8u, 0x00000258u, 0x000400e0u, 0x000001b2u, 0x000001b2u, 0x00000213u, 0x0004003du, 0x00000032u, 0x0000025du, 0x00000212u, 0x0003003eu, 0x0000025cu, 0x0000025du, 0x0003003eu, 0x0000025eu, 0x00000049u, 0x000200f9u, 0x0000025fu, 0x000200f8u, 0x0000025fu, 0x000700f5u, 0x00000032u, 0x00000784u, 0x00000049u, 0x00000258u, 0x000007acu, 0x00000262u, 0x000700f5u, 0x00000032u, 0x00000774u, 0x0000025du, 0x00000258u, 0x0000026du, 0x00000262u, 0x000500abu, 0x00000020u, 0x00000265u, 0x00000774u, 0x00000049u, 0x000400f6u, 0x00000261u, 0x00000262u, 0x00000000u, 0x000400fau, 0x00000265u, 0x00000260u, 0x00000261u, 0x000200f8u, 0x00000260u, 0x0006000cu, 0x00000006u, 0x00000268u, 0x00000001u, 0x00000049u, 0x00000774u, 0x0003003eu, 0x00000266u, 0x00000268u, 0x000500c4u, 0x00000032u, 0x0000026au, 0x0000004cu, 0x00000268u, 0x000400c8u, 0x00000032u, 0x0000026bu, 0x0000026au, 0x000500c7u, 0x00000032u, 0x0000026du, 0x00000774u, 0x0000026bu, 0x0003003eu, 0x0000025cu, 0x0000026du, 0x00050084u, 0x00000006u, 0x00000270u, 0x000001c2u, 0x00000216u, 0x00050080u, 0x00000006u, 0x00000272u, 0x00000270u, 0x00000268u, 0x0004007cu, 0x00000032u, 0x00000273u, 0x00000272u, 0x0003003eu, 0x0000026eu, 0x00000273u, 0x0003003eu, 0x00000275u, 0x00000273u, 0x00060041u, 0x000001abu, 0x00000481u, 0x000001a9u, 0x00000097u, 0x00000273u, 0x0004003du, 0x00000007u, 0x00000482u, 0x00000481u, 0x0003003eu, 0x0000047eu, 0x00000482u, 0x00050041u, 0x00000014u, 0x00000483u, 0x0000047eu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000484u, 0x00000483u, 0x00050041u, 0x00000014u, 0x00000485u, 0x0000047eu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000486u, 0x00000485u, 0x00050041u, 0x00000014u, 0x00000487u, 0x0000047eu, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000488u, 0x00000487u, 0x00050041u, 0x00000014u, 0x00000489u, 0x0000047eu, 0x000001b5u, 0x0004003du, 0x00000006u, 0x0000048au, 0x00000489u, 0x00070050u, 0x00000038u, 0x0000048bu, 0x00000484u, 0x00000486u, 0x00000488u, 0x0000048au, 0x0003003eu, 0x00000657u, 0x00000484u, 0x0003003eu, 0x00000658u, 0x00000486u, 0x0003003eu, 0x00000659u, 0x00000488u, 0x0003003eu, 0x0000065au, 0x0000048au, 0x0003003eu, 0x00000703u, 0x00000484u, 0x0003003eu, 0x00000704u, 0x00000486u, 0x0003003eu, 0x00000705u, 0x00000488u, 0x0003003eu, 0x00000706u, 0x0000048au, 0x00050050u, 0x00000022u, 0x0000027eu, 0x00000484u, 0x00000486u, 0x000500c3u, 0x00000022u, 0x00000280u, 0x0000027eu, 0x000007bau, 0x00050050u, 0x00000022u, 0x00000281u, 0x0000022du, 0x0000022du, 0x00050084u, 0x00000022u, 0x00000282u, 0x00000281u, 0x00000280u, 0x0007000cu, 0x00000022u, 0x00000283u, 0x00000001u, 0x0000002au, 0x000001feu, 0x00000282u, 0x0003003eu, 0x00000278u, 0x00000283u, 0x00050080u, 0x00000006u, 0x00000288u, 0x00000488u, 0x0000007eu, 0x00050080u, 0x00000006u, 0x0000028bu, 0x0000048au, 0x0000007eu, 0x00050050u, 0x00000022u, 0x0000028cu, 0x00000288u, 0x0000028bu, 0x000500c3u, 0x00000022u, 0x0000028eu, 0x0000028cu, 0x000007bau, 0x00050084u, 0x00000022u, 0x00000290u, 0x00000281u, 0x0000028eu, 0x00050082u, 0x00000022u, 0x00000292u, 0x00000290u, 0x000007b9u, 0x0007000cu, 0x00000022u, 0x00000293u, 0x00000001u, 0x00000027u, 0x00000208u, 0x00000292u, 0x0003003eu, 0x00000284u, 0x00000293u, 0x0003003eu, 0x00000295u, 0x00000273u, 0x00060041u, 0x00000187u, 0x0000048fu, 0x00000185u, 0x00000097u, 0x00000273u, 0x0004003du, 0x00000181u, 0x00000490u, 0x0000048fu, 0x00050051u, 0x00000006u, 0x00000491u, 0x00000490u, 0x00000000u, 0x0003003eu, 0x0000061eu, 0x00000491u, 0x00050051u, 0x00000006u, 0x00000493u, 0x00000490u, 0x00000001u, 0x0003003eu, 0x0000061fu, 0x00000493u, 0x00050051u, 0x00000006u, 0x00000495u, 0x00000490u, 0x00000002u, 0x0003003eu, 0x00000620u, 0x00000495u, 0x00050051u, 0x0000001cu, 0x00000497u, 0x00000490u, 0x00000003u, 0x0003003eu, 0x00000621u, 0x00000497u, 0x00050051u, 0x0000001cu, 0x00000499u, 0x00000490u, 0x00000004u, 0x0003003eu, 0x00000622u, 0x00000499u, 0x00050051u, 0x00000006u, 0x0000049bu, 0x00000490u, 0x00000005u, 0x0003003eu, 0x00000623u, 0x0000049bu, 0x00050051u, 0x00000006u, 0x0000049du, 0x00000490u, 0x00000006u, 0x0003003eu, 0x00000624u, 0x0000049du, 0x00050051u, 0x00000006u, 0x0000049fu, 0x00000490u, 0x00000007u, 0x0003003eu, 0x00000625u, 0x0000049fu, 0x00050051u, 0x0000001cu, 0x000004a1u, 0x00000490u, 0x00000008u, 0x0003003eu, 0x00000626u, 0x000004a1u, 0x00050051u, 0x0000001du, 0x000004a3u, 0x00000490u, 0x00000009u, 0x0003003eu, 0x00000627u, 0x000004a3u, 0x00050051u, 0x0000001du, 0x000004a5u, 0x00000490u, 0x0000000au, 0x0003003eu, 0x00000628u, 0x000004a5u, 0x000e0050u, 0x0000001eu, 0x00000634u, 0x00000491u, 0x00000493u, 0x00000495u, 0x00000497u, 0x00000499u, 0x0000049bu, 0x0000049du, 0x0000049fu, 0x000004a1u, 0x000004a3u, 0x000004a5u, 0x0003003eu, 0x00000635u, 0x00000491u, 0x0003003eu, 0x00000636u, 0x00000493u, 0x0003003eu, 0x00000637u, 0x00000495u, 0x0003003eu, 0x00000638u, 0x00000497u, 0x0003003eu, 0x00000639u, 0x00000499u, 0x0003003eu, 0x0000063au, 0x0000049bu, 0x0003003eu, 0x0000063bu, 0x0000049du, 0x0003003eu, 0x0000063cu, 0x0000049fu, 0x0003003eu, 0x0000063du, 0x000004a1u, 0x0003003eu, 0x0000063eu, 0x000004a3u, 0x0003003eu, 0x0000063fu, 0x000004a5u, 0x0003003eu, 0x0000070bu, 0x00000491u, 0x0003003eu, 0x0000070cu, 0x00000493u, 0x0003003eu, 0x0000070du, 0x00000495u, 0x0003003eu, 0x0000070eu, 0x00000497u, 0x0003003eu, 0x0000070fu, 0x00000499u, 0x0003003eu, 0x00000710u, 0x0000049bu, 0x0003003eu, 0x00000711u, 0x0000049du, 0x0003003eu, 0x00000712u, 0x0000049fu, 0x0003003eu, 0x00000713u, 0x000004a1u, 0x0003003eu, 0x00000714u, 0x000004a3u, 0x0003003eu, 0x00000715u, 0x000004a5u, 0x0003003eu, 0x0000072du, 0x00000491u, 0x0003003eu, 0x0000072eu, 0x00000493u, 0x0003003eu, 0x0000072fu, 0x00000495u, 0x0003003eu, 0x00000730u, 0x00000497u, 0x0003003eu, 0x00000731u, 0x00000499u, 0x0003003eu, 0x00000732u, 0x0000049bu, 0x0003003eu, 0x00000733u, 0x0000049du, 0x0003003eu, 0x00000734u, 0x0000049fu, 0x0003003eu, 0x00000735u, 0x000004a1u, 0x0003003eu, 0x00000736u, 0x000004a3u, 0x0003003eu, 0x0000029au, 0x00000283u, 0x0003003eu, 0x0000029cu, 0x00000293u, 0x0003003eu, 0x0000029eu, 0x0000022du, 0x0003003eu, 0x000004a8u, 0x00000146u, 0x000300f7u, 0x000004b4u, 0x00000000u, 0x000300fbu, 0x00000049u, 0x000004b5u, 0x000200f8u, 0x000004b5u, 0x00050041u, 0x00000014u, 0x000004b6u, 0x0000029au, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000004b7u, 0x000004b6u, 0x00050084u, 0x00000006u, 0x000004b8u, 0x000004b7u, 0x00000086u, 0x0003003eu, 0x000004aau, 0x000004b8u, 0x00050041u, 0x00000014u, 0x000004b9u, 0x0000029cu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000004bau, 0x000004b9u, 0x00050084u, 0x00000006u, 0x000004bbu, 0x000004bau, 0x00000086u, 0x00050080u, 0x00000006u, 0x000004bcu, 0x000004bbu, 0x0000007eu, 0x0003003eu, 0x000004abu, 0x000004bcu, 0x00040072u, 0x00000006u, 0x000004c1u, 0x00000497u, 0x00050084u, 0x00000006u, 0x000004c2u, 0x0000022du, 0x000004c1u, 0x0007000cu, 0x00000006u, 0x000004c3u, 0x00000001u, 0x0000002au, 0x000004b8u, 0x000004c2u, 0x0003003eu, 0x000004aau, 0x000004c3u, 0x00040072u, 0x00000006u, 0x000004c8u, 0x000004a1u, 0x00050084u, 0x00000006u, 0x000004c9u, 0x0000022du, 0x000004c8u, 0x00050082u, 0x00000006u, 0x000004cau, 0x000004c9u, 0x000000abu, 0x0007000cu, 0x00000006u, 0x000004cbu, 0x00000001u, 0x00000027u, 0x000004bcu, 0x000004cau, 0x0003003eu, 0x000004abu, 0x000004cbu, 0x000500b1u, 0x00000020u, 0x000004ceu, 0x000004cbu, 0x000004c3u, 0x000300f7u, 0x000004cfu, 0x00000000u, 0x000400fau, 0x000004ceu, 0x000004d0u, 0x000004cfu, 0x000200f8u, 0x000004d0u, 0x0003003eu, 0x000004a8u, 0x000002efu, 0x0003003eu, 0x000004a9u, 0x00000146u, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004cfu, 0x00040071u, 0x00000032u, 0x000004d3u, 0x000004a3u, 0x0004007cu, 0x00000006u, 0x000004d4u, 0x000004d3u, 0x000500c7u, 0x00000006u, 0x000004d5u, 0x000004d4u, 0x000000abu, 0x000500abu, 0x00000020u, 0x000004d6u, 0x000004d5u, 0x00000097u, 0x0003003eu, 0x000004acu, 0x000004d6u, 0x00040072u, 0x00000006u, 0x000004dbu, 0x00000499u, 0x00050084u, 0x00000006u, 0x000004ddu, 0x000004dbu, 0x0000022du, 0x00050050u, 0x00000022u, 0x000004deu, 0x000004ddu, 0x000004ddu, 0x00050080u, 0x00000022u, 0x000004dfu, 0x000004deu, 0x00000159u, 0x00050050u, 0x00000022u, 0x000004e1u, 0x000004c3u, 0x000004c3u, 0x00050050u, 0x00000022u, 0x000004e3u, 0x000004cbu, 0x000004cbu, 0x0008000cu, 0x00000022u, 0x000004e4u, 0x00000001u, 0x0000002du, 0x000004dfu, 0x000004e1u, 0x000004e3u, 0x00050051u, 0x00000006u, 0x000004e5u, 0x000004e4u, 0x00000000u, 0x00050051u, 0x00000006u, 0x000004e6u, 0x000004e4u, 0x00000001u, 0x00070050u, 0x00000007u, 0x000004e7u, 0x000004c3u, 0x000004cbu, 0x000004e5u, 0x000004e6u, 0x0003003eu, 0x000004adu, 0x000004e7u, 0x000e0050u, 0x0000001eu, 0x0000074bu, 0x00000491u, 0x00000493u, 0x00000495u, 0x00000497u, 0x00000499u, 0x0000049bu, 0x0000049du, 0x0000049fu, 0x000004a1u, 0x000004a3u, 0x00000615u, 0x0003003eu, 0x0000060cu, 0x00000491u, 0x0003003eu, 0x0000060du, 0x00000493u, 0x0003003eu, 0x0000060eu, 0x00000495u, 0x0003003eu, 0x0000060fu, 0x00000497u, 0x0003003eu, 0x00000610u, 0x00000499u, 0x0003003eu, 0x00000611u, 0x0000049bu, 0x0003003eu, 0x00000612u, 0x0000049du, 0x0003003eu, 0x00000613u, 0x0000049fu, 0x0003003eu, 0x000004b0u, 0x000004e7u, 0x0003003eu, 0x000004b1u, 0x000004d6u, 0x0003003eu, 0x000004b2u, 0x0000022du, 0x000500c7u, 0x00000006u, 0x00000522u, 0x000004c1u, 0x00000083u, 0x0003003eu, 0x000004ffu, 0x00000522u, 0x0003003eu, 0x00000500u, 0x000004dbu, 0x00050084u, 0x00000006u, 0x00000528u, 0x00000522u, 0x0000022du, 0x0003003eu, 0x000004ffu, 0x00000528u, 0x0003003eu, 0x00000500u, 0x000004ddu, 0x00070050u, 0x00000007u, 0x0000052eu, 0x00000528u, 0x00000528u, 0x00000528u, 0x00000528u, 0x00050082u, 0x00000007u, 0x0000052fu, 0x000004e7u, 0x0000052eu, 0x00050084u, 0x00000006u, 0x00000533u, 0x0000022du, 0x00000491u, 0x0003003eu, 0x00000503u, 0x0000052fu, 0x0003003eu, 0x00000504u, 0x0000049bu, 0x0003003eu, 0x00000505u, 0x00000533u, 0x00070050u, 0x00000007u, 0x0000059bu, 0x0000049bu, 0x0000049bu, 0x0000049bu, 0x0000049bu, 0x00050098u, 0x00000064u, 0x0000059cu, 0x0000052fu, 0x0000059bu, 0x00050051u, 0x00000007u, 0x0000059du, 0x0000059cu, 0x00000000u, 0x0003003eu, 0x00000596u, 0x0000059du, 0x00050051u, 0x00000007u, 0x0000059eu, 0x0000059cu, 0x00000001u, 0x0003003eu, 0x00000595u, 0x0000059eu, 0x0004007cu, 0x00000069u, 0x000005a0u, 0x0000059du, 0x0004007cu, 0x00000032u, 0x000005a2u, 0x00000533u, 0x00070050u, 0x00000069u, 0x000005a3u, 0x000005a2u, 0x000005a2u, 0x000005a2u, 0x000005a2u, 0x00050095u, 0x00000070u, 0x000005a4u, 0x000005a0u, 0x000005a3u, 0x00050051u, 0x00000069u, 0x000005a5u, 0x000005a4u, 0x00000001u, 0x0003003eu, 0x00000597u, 0x000005a5u, 0x00050051u, 0x00000069u, 0x000005a6u, 0x000005a4u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005a7u, 0x000005a6u, 0x0003003eu, 0x00000596u, 0x000005a7u, 0x0004007cu, 0x00000007u, 0x000005a9u, 0x000005a5u, 0x00050080u, 0x00000007u, 0x000005abu, 0x0000059eu, 0x000005a9u, 0x0003003eu, 0x00000595u, 0x000005abu, 0x0003003eu, 0x00000506u, 0x000005abu, 0x0003003eu, 0x00000598u, 0x000005a7u, 0x0003003eu, 0x00000502u, 0x000005abu, 0x0003003eu, 0x00000501u, 0x000005a7u, 0x00050084u, 0x00000006u, 0x0000053fu, 0x0000022du, 0x00000493u, 0x0003003eu, 0x00000509u, 0x0000052fu, 0x0003003eu, 0x0000050au, 0x0000049du, 0x0003003eu, 0x0000050bu, 0x0000053fu, 0x00070050u, 0x00000007u, 0x000005b4u, 0x0000049du, 0x0000049du, 0x0000049du, 0x0000049du, 0x00050098u, 0x00000064u, 0x000005b5u, 0x0000052fu, 0x000005b4u, 0x00050051u, 0x00000007u, 0x000005b6u, 0x000005b5u, 0x00000000u, 0x0003003eu, 0x000005afu, 0x000005b6u, 0x00050051u, 0x00000007u, 0x000005b7u, 0x000005b5u, 0x00000001u, 0x0003003eu, 0x000005aeu, 0x000005b7u, 0x0004007cu, 0x00000069u, 0x000005b9u, 0x000005b6u, 0x0004007cu, 0x00000032u, 0x000005bbu, 0x0000053fu, 0x00070050u, 0x00000069u, 0x000005bcu, 0x000005bbu, 0x000005bbu, 0x000005bbu, 0x000005bbu, 0x00050095u, 0x00000070u, 0x000005bdu, 0x000005b9u, 0x000005bcu, 0x00050051u, 0x00000069u, 0x000005beu, 0x000005bdu, 0x00000001u, 0x0003003eu, 0x000005b0u, 0x000005beu, 0x00050051u, 0x00000069u, 0x000005bfu, 0x000005bdu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005c0u, 0x000005bfu, 0x0003003eu, 0x000005afu, 0x000005c0u, 0x0004007cu, 0x00000007u, 0x000005c2u, 0x000005beu, 0x00050080u, 0x00000007u, 0x000005c4u, 0x000005b7u, 0x000005c2u, 0x0003003eu, 0x000005aeu, 0x000005c4u, 0x0003003eu, 0x0000050cu, 0x000005c4u, 0x0003003eu, 0x000005b1u, 0x000005c0u, 0x0003003eu, 0x00000508u, 0x000005c4u, 0x0003003eu, 0x00000507u, 0x000005c0u, 0x00070050u, 0x00000007u, 0x00000546u, 0x000004ddu, 0x000004ddu, 0x000004ddu, 0x000004ddu, 0x00050082u, 0x00000007u, 0x00000547u, 0x000004e7u, 0x00000546u, 0x00050084u, 0x00000006u, 0x0000054bu, 0x0000022du, 0x00000495u, 0x0003003eu, 0x0000050fu, 0x00000547u, 0x0003003eu, 0x00000510u, 0x0000049fu, 0x0003003eu, 0x00000511u, 0x0000054bu, 0x00070050u, 0x00000007u, 0x000005cdu, 0x0000049fu, 0x0000049fu, 0x0000049fu, 0x0000049fu, 0x00050098u, 0x00000064u, 0x000005ceu, 0x00000547u, 0x000005cdu, 0x00050051u, 0x00000007u, 0x000005cfu, 0x000005ceu, 0x00000000u, 0x0003003eu, 0x000005c8u, 0x000005cfu, 0x00050051u, 0x00000007u, 0x000005d0u, 0x000005ceu, 0x00000001u, 0x0003003eu, 0x000005c7u, 0x000005d0u, 0x0004007cu, 0x00000069u, 0x000005d2u, 0x000005cfu, 0x0004007cu, 0x00000032u, 0x000005d4u, 0x0000054bu, 0x00070050u, 0x00000069u, 0x000005d5u, 0x000005d4u, 0x000005d4u, 0x000005d4u, 0x000005d4u, 0x00050095u, 0x00000070u, 0x000005d6u, 0x000005d2u, 0x000005d5u, 0x00050051u, 0x00000069u, 0x000005d7u, 0x000005d6u, 0x00000001u, 0x0003003eu, 0x000005c9u, 0x000005d7u, 0x00050051u, 0x00000069u, 0x000005d8u, 0x000005d6u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005d9u, 0x000005d8u, 0x0003003eu, 0x000005c8u, 0x000005d9u, 0x0004007cu, 0x00000007u, 0x000005dbu, 0x000005d7u, 0x00050080u, 0x00000007u, 0x000005ddu, 0x000005d0u, 0x000005dbu, 0x0003003eu, 0x000005c7u, 0x000005ddu, 0x0003003eu, 0x00000512u, 0x000005ddu, 0x0003003eu, 0x000005cau, 0x000005d9u, 0x0003003eu, 0x0000050eu, 0x000005ddu, 0x0003003eu, 0x0000050du, 0x000005d9u, 0x00050084u, 0x00000006u, 0x00000557u, 0x0000022du, 0x000004dbu, 0x00070050u, 0x00000007u, 0x00000558u, 0x00000557u, 0x00000557u, 0x00000557u, 0x00000557u, 0x000500b1u, 0x000000d5u, 0x00000559u, 0x000004e7u, 0x00000558u, 0x000600a9u, 0x00000007u, 0x0000055au, 0x00000559u, 0x000005c0u, 0x000005d9u, 0x0003003eu, 0x0000050du, 0x0000055au, 0x000600a9u, 0x00000007u, 0x00000565u, 0x00000559u, 0x000005c4u, 0x000005ddu, 0x0003003eu, 0x0000050eu, 0x00000565u, 0x000500adu, 0x000000d5u, 0x00000568u, 0x000005abu, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x00000569u, 0x00000568u, 0x000000e5u, 0x000005a7u, 0x0003003eu, 0x00000501u, 0x00000569u, 0x000500b1u, 0x000000d5u, 0x0000056cu, 0x000005abu, 0x000000efu, 0x000600a9u, 0x00000007u, 0x0000056du, 0x0000056cu, 0x000000ecu, 0x00000569u, 0x0003003eu, 0x00000501u, 0x0000056du, 0x000500adu, 0x000000d5u, 0x00000570u, 0x00000565u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x00000571u, 0x00000570u, 0x000000e5u, 0x0000055au, 0x0003003eu, 0x0000050du, 0x00000571u, 0x000500b1u, 0x000000d5u, 0x00000574u, 0x00000565u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x00000575u, 0x00000574u, 0x000000ecu, 0x00000571u, 0x0003003eu, 0x0000050du, 0x00000575u, 0x0003003eu, 0x00000514u, 0x0000056du, 0x000500c3u, 0x00000007u, 0x000005e3u, 0x0000056du, 0x000007bbu, 0x0003003eu, 0x000005e0u, 0x000005e3u, 0x0003003eu, 0x00000513u, 0x000005e3u, 0x0003003eu, 0x00000516u, 0x00000575u, 0x000500c3u, 0x00000007u, 0x000005e7u, 0x00000575u, 0x000007bbu, 0x0003003eu, 0x000005e4u, 0x000005e7u, 0x0003003eu, 0x00000515u, 0x000005e7u, 0x000300f7u, 0x0000057bu, 0x00000000u, 0x000400fau, 0x000004d6u, 0x0000057cu, 0x0000057du, 0x000200f8u, 0x0000057cu, 0x0003003eu, 0x00000517u, 0x000005e3u, 0x0003003eu, 0x00000518u, 0x000005e7u, 0x000200f9u, 0x0000057bu, 0x000200f8u, 0x0000057du, 0x0003003eu, 0x00000517u, 0x000005e7u, 0x0003003eu, 0x00000518u, 0x000005e3u, 0x000200f9u, 0x0000057bu, 0x000200f8u, 0x0000057bu, 0x00070050u, 0x000000d5u, 0x000007c0u, 0x000004d6u, 0x000004d6u, 0x000004d6u, 0x000004d6u, 0x000600a9u, 0x00000007u, 0x000007c1u, 0x000007c0u, 0x000005e7u, 0x000005e3u, 0x000600a9u, 0x00000007u, 0x000007c3u, 0x000007c0u, 0x000005e3u, 0x000005e7u, 0x0006000cu, 0x00000007u, 0x00000583u, 0x00000001u, 0x00000005u, 0x000007c3u, 0x0006000cu, 0x00000007u, 0x00000585u, 0x00000001u, 0x00000005u, 0x000007c1u, 0x0007000cu, 0x00000007u, 0x00000586u, 0x00000001u, 0x0000002au, 0x00000583u, 0x00000585u, 0x0003003eu, 0x0000051au, 0x00000586u, 0x0007004fu, 0x00000022u, 0x000005ebu, 0x00000586u, 0x00000586u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000005edu, 0x00000586u, 0x00000586u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000005eeu, 0x00000001u, 0x0000002au, 0x000005ebu, 0x000005edu, 0x0003003eu, 0x000005e8u, 0x000005eeu, 0x00050041u, 0x00000014u, 0x000005efu, 0x000005e8u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000005f0u, 0x000005efu, 0x00050041u, 0x00000014u, 0x000005f1u, 0x000005e8u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000005f2u, 0x000005f1u, 0x0007000cu, 0x00000006u, 0x000005f3u, 0x00000001u, 0x0000002au, 0x000005f0u, 0x000005f2u, 0x0003003eu, 0x000005e9u, 0x000005f3u, 0x0003003eu, 0x00000519u, 0x000005f3u, 0x00050084u, 0x00000006u, 0x0000058au, 0x00000115u, 0x0000022du, 0x000500b3u, 0x00000020u, 0x0000058bu, 0x000005f3u, 0x0000058au, 0x000300f7u, 0x0000058cu, 0x00000000u, 0x000400fau, 0x0000058bu, 0x0000058du, 0x0000058eu, 0x000200f8u, 0x0000058du, 0x0003003eu, 0x0000051cu, 0x000007c3u, 0x0007004fu, 0x00000022u, 0x000005f7u, 0x000007c3u, 0x000007c3u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000005f9u, 0x000007c3u, 0x000007c3u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000005fau, 0x00000001u, 0x00000027u, 0x000005f7u, 0x000005f9u, 0x0003003eu, 0x000005f4u, 0x000005fau, 0x00050041u, 0x00000014u, 0x000005fbu, 0x000005f4u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000005fcu, 0x000005fbu, 0x00050041u, 0x00000014u, 0x000005fdu, 0x000005f4u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000005feu, 0x000005fdu, 0x0007000cu, 0x00000006u, 0x000005ffu, 0x00000001u, 0x00000027u, 0x000005fcu, 0x000005feu, 0x0003003eu, 0x000005f5u, 0x000005ffu, 0x0003003eu, 0x0000051du, 0x000007c1u, 0x0007004fu, 0x00000022u, 0x00000603u, 0x000007c1u, 0x000007c1u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000605u, 0x000007c1u, 0x000007c1u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000606u, 0x00000001u, 0x0000002au, 0x00000603u, 0x00000605u, 0x0003003eu, 0x00000600u, 0x00000606u, 0x00050041u, 0x00000014u, 0x00000607u, 0x00000600u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000608u, 0x00000607u, 0x00050041u, 0x00000014u, 0x00000609u, 0x00000600u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000060au, 0x00000609u, 0x0007000cu, 0x00000006u, 0x0000060bu, 0x00000001u, 0x0000002au, 0x00000608u, 0x0000060au, 0x0003003eu, 0x00000601u, 0x0000060bu, 0x00050050u, 0x00000022u, 0x00000593u, 0x000005ffu, 0x0000060bu, 0x0003003eu, 0x0000051bu, 0x00000593u, 0x000200f9u, 0x0000058cu, 0x000200f8u, 0x0000058eu, 0x0003003eu, 0x0000051bu, 0x00000124u, 0x000200f9u, 0x0000058cu, 0x000200f8u, 0x0000058cu, 0x000700f5u, 0x00000022u, 0x00000798u, 0x00000593u, 0x0000058du, 0x00000124u, 0x0000058eu, 0x0003003eu, 0x0000051eu, 0x00000798u, 0x0003003eu, 0x000004aeu, 0x00000798u, 0x00050041u, 0x00000014u, 0x000004edu, 0x000004aeu, 0x00000049u, 0x0004003du, 0x00000006u, 0x000004eeu, 0x000004edu, 0x00050041u, 0x00000014u, 0x000004efu, 0x0000029au, 0x00000049u, 0x0004003du, 0x00000006u, 0x000004f0u, 0x000004efu, 0x0007000cu, 0x00000006u, 0x000004f1u, 0x00000001u, 0x0000002au, 0x000004eeu, 0x000004f0u, 0x0003003eu, 0x000004edu, 0x000004f1u, 0x00050041u, 0x00000014u, 0x000004f3u, 0x000004aeu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000004f4u, 0x000004f3u, 0x00050041u, 0x00000014u, 0x000004f5u, 0x0000029cu, 0x00000049u, 0x0004003du, 0x00000006u, 0x000004f6u, 0x000004f5u, 0x0007000cu, 0x00000006u, 0x000004f7u, 0x00000001u, 0x00000027u, 0x000004f4u, 0x000004f6u, 0x0003003eu, 0x000004f3u, 0x000004f7u, 0x0004003du, 0x00000006u, 0x000004fau, 0x000004edu, 0x0004003du, 0x00000006u, 0x000004fcu, 0x000004f3u, 0x000500b3u, 0x00000020u, 0x000004fdu, 0x000004fau, 0x000004fcu, 0x0003003eu, 0x000004a8u, 0x000002efu, 0x0003003eu, 0x000004a9u, 0x000004fdu, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b4u, 0x000700f5u, 0x00000020u, 0x00000799u, 0x00000146u, 0x000004d0u, 0x000004fdu, 0x0000058cu, 0x0003003eu, 0x000004b3u, 0x00000799u, 0x000300f7u, 0x000002a1u, 0x00000000u, 0x000400fau, 0x00000799u, 0x000002a0u, 0x000002a1u, 0x000200f8u, 0x000002a0u, 0x000500c5u, 0x00000032u, 0x000002a5u, 0x00000784u, 0x0000026au, 0x0003003eu, 0x0000025eu, 0x000002a5u, 0x000200f9u, 0x000002a1u, 0x000200f8u, 0x000002a1u, 0x000700f5u, 0x00000032u, 0x000007acu, 0x00000784u, 0x000004b4u, 0x000002a5u, 0x000002a0u, 0x000200f9u, 0x00000262u, 0x000200f8u, 0x00000262u, 0x000200f9u, 0x0000025fu, 0x000200f8u, 0x00000261u, 0x00050084u, 0x00000006u, 0x000002adu, 0x000001e3u, 0x000002acu, 0x00050080u, 0x00000006u, 0x000002afu, 0x000002adu, 0x000001c2u, 0x00060041u, 0x000002b1u, 0x000002b2u, 0x000002a9u, 0x00000097u, 0x000002afu, 0x0003003eu, 0x000002b2u, 0x00000784u, 0x000500abu, 0x00000020u, 0x000002b4u, 0x00000784u, 0x00000049u, 0x000300f7u, 0x000002b6u, 0x00000000u, 0x000400fau, 0x000002b4u, 0x000002b5u, 0x000002c0u, 0x000200f8u, 0x000002b5u, 0x00060041u, 0x000002b1u, 0x000002bcu, 0x000002bau, 0x00000097u, 0x000001e3u, 0x000500c4u, 0x00000032u, 0x000002beu, 0x0000004cu, 0x000001c2u, 0x000700f1u, 0x00000032u, 0x000002bfu, 0x000002bcu, 0x0000004cu, 0x00000049u, 0x000002beu, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002c0u, 0x00060041u, 0x000002b1u, 0x000002c2u, 0x000002bau, 0x00000097u, 0x000001e3u, 0x000500c4u, 0x00000032u, 0x000002c4u, 0x0000004cu, 0x000001c2u, 0x000400c8u, 0x00000032u, 0x000002c5u, 0x000002c4u, 0x000700f0u, 0x00000032u, 0x000002c6u, 0x000002c2u, 0x0000004cu, 0x00000049u, 0x000002c5u, 0x000200f9u, 0x000002b6u, 0x000200f8u, 0x000002b6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x0000003du, 0x0000000au, 0x000500c3u, 0x00000007u, 0x00000040u, 0x0000003du, 0x000007bbu, 0x000200feu, 0x00000040u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x0000002au, 0x00000043u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000044u, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x00000045u, 0x00000044u, 0x00000044u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000046u, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x00000047u, 0x00000046u, 0x00000046u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000048u, 0x00000001u, 0x00000027u, 0x00000045u, 0x00000047u, 0x0003003eu, 0x00000043u, 0x00000048u, 0x00050041u, 0x00000014u, 0x0000004au, 0x00000043u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000004bu, 0x0000004au, 0x00050041u, 0x00000014u, 0x0000004du, 0x00000043u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000004eu, 0x0000004du, 0x0007000cu, 0x00000006u, 0x0000004fu, 0x00000001u, 0x00000027u, 0x0000004bu, 0x0000004eu, 0x000200feu, 0x0000004fu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x0000002au, 0x00000052u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000053u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x00000054u, 0x00000053u, 0x00000053u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000055u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x00000056u, 0x00000055u, 0x00000055u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000057u, 0x00000001u, 0x0000002au, 0x00000054u, 0x00000056u, 0x0003003eu, 0x00000052u, 0x00000057u, 0x00050041u, 0x00000014u, 0x00000058u, 0x00000052u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000059u, 0x00000058u, 0x00050041u, 0x00000014u, 0x0000005au, 0x00000052u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000005bu, 0x0000005au, 0x0007000cu, 0x00000006u, 0x0000005cu, 0x00000001u, 0x0000002au, 0x00000059u, 0x0000005bu, 0x000200feu, 0x0000005cu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000062u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000063u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x0000006fu, 0x00000007u, 0x0004003du, 0x00000007u, 0x0000005fu, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000060u, 0x00000017u, 0x00070050u, 0x00000007u, 0x00000061u, 0x00000060u, 0x00000060u, 0x00000060u, 0x00000060u, 0x00050098u, 0x00000064u, 0x00000065u, 0x0000005fu, 0x00000061u, 0x00050051u, 0x00000007u, 0x00000066u, 0x00000065u, 0x00000000u, 0x0003003eu, 0x00000063u, 0x00000066u, 0x00050051u, 0x00000007u, 0x00000067u, 0x00000065u, 0x00000001u, 0x0003003eu, 0x00000062u, 0x00000067u, 0x0004007cu, 0x00000069u, 0x0000006au, 0x00000066u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000018u, 0x0004007cu, 0x00000032u, 0x0000006cu, 0x0000006bu, 0x00070050u, 0x00000069u, 0x0000006du, 0x0000006cu, 0x0000006cu, 0x0000006cu, 0x0000006cu, 0x00050095u, 0x00000070u, 0x00000071u, 0x0000006au, 0x0000006du, 0x00050051u, 0x00000069u, 0x00000072u, 0x00000071u, 0x00000001u, 0x0003003eu, 0x0000006fu, 0x00000072u, 0x00050051u, 0x00000069u, 0x00000073u, 0x00000071u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000074u, 0x00000073u, 0x0003003eu, 0x00000063u, 0x00000074u, 0x0004007cu, 0x00000007u, 0x00000076u, 0x00000072u, 0x00050080u, 0x00000007u, 0x00000078u, 0x00000067u, 0x00000076u, 0x0003003eu, 0x00000062u, 0x00000078u, 0x0003003eu, 0x00000019u, 0x00000078u, 0x000200feu, 0x00000074u, 0x00010038u, 0x00050036u, 0x00000022u, 0x00000028u, 0x00000000u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000008u, 0x00000025u, 0x00030037u, 0x00000021u, 0x00000026u, 0x00030037u, 0x00000014u, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x00000014u, 0x0000007du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000085u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000090u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000ffu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000105u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000107u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000112u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000011bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000011cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000011fu, 0x00000007u, 0x00050041u, 0x0000007fu, 0x00000080u, 0x00000024u, 0x0000007eu, 0x0004003du, 0x0000001cu, 0x00000081u, 0x00000080u, 0x00040072u, 0x00000006u, 0x00000082u, 0x00000081u, 0x000500c7u, 0x00000006u, 0x00000084u, 0x00000082u, 0x00000083u, 0x0003003eu, 0x0000007du, 0x00000084u, 0x00050041u, 0x0000007fu, 0x00000087u, 0x00000024u, 0x00000086u, 0x0004003du, 0x0000001cu, 0x00000088u, 0x00000087u, 0x00040072u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0003003eu, 0x00000085u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000027u, 0x00050084u, 0x00000006u, 0x0000008cu, 0x00000084u, 0x0000008au, 0x0003003eu, 0x0000007du, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008du, 0x00000027u, 0x00050084u, 0x00000006u, 0x0000008fu, 0x00000089u, 0x0000008du, 0x0003003eu, 0x00000085u, 0x0000008fu, 0x0004003du, 0x00000007u, 0x00000091u, 0x00000025u, 0x00070050u, 0x00000007u, 0x00000093u, 0x0000008cu, 0x0000008cu, 0x0000008cu, 0x0000008cu, 0x00050082u, 0x00000007u, 0x00000094u, 0x00000091u, 0x00000093u, 0x0004003du, 0x00000006u, 0x00000096u, 0x00000027u, 0x00050041u, 0x00000014u, 0x00000098u, 0x00000024u, 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x00000098u, 0x00050084u, 0x00000006u, 0x0000009au, 0x00000096u, 0x00000099u, 0x0003003eu, 0x0000009cu, 0x00000094u, 0x00050041u, 0x00000014u, 0x0000009eu, 0x00000024u, 0x00000095u, 0x0004003du, 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0003003eu, 0x0000009du, 0x0000009fu, 0x0003003eu, 0x000000a0u, 0x0000009au, 0x00080039u, 0x00000007u, 0x000000a2u, 0x0000001au, 0x0000009cu, 0x0000009du, 0x000000a0u, 0x000000a1u, 0x0004003du, 0x00000007u, 0x000000a3u, 0x000000a1u, 0x0003003eu, 0x0000009bu, 0x000000a3u, 0x0003003eu, 0x00000090u, 0x000000a2u, 0x0004003du, 0x00000007u, 0x000000a5u, 0x00000025u, 0x00050082u, 0x00000007u, 0x000000a8u, 0x000000a5u, 0x00000093u, 0x0004003du, 0x00000006u, 0x000000aau, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000acu, 0x00000024u, 0x000000abu, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000acu, 0x00050084u, 0x00000006u, 0x000000aeu, 0x000000aau, 0x000000adu, 0x0003003eu, 0x000000b0u, 0x000000a8u, 0x00050041u, 0x00000014u, 0x000000b2u, 0x00000024u, 0x000000a9u, 0x0004003du, 0x00000006u, 0x000000b3u, 0x000000b2u, 0x0003003eu, 0x000000b1u, 0x000000b3u, 0x0003003eu, 0x000000b4u, 0x000000aeu, 0x00080039u, 0x00000007u, 0x000000b6u, 0x0000001au, 0x000000b0u, 0x000000b1u, 0x000000b4u, 0x000000b5u, 0x0004003du, 0x00000007u, 0x000000b7u, 0x000000b5u, 0x0003003eu, 0x000000afu, 0x000000b7u, 0x0003003eu, 0x000000a4u, 0x000000b6u, 0x0004003du, 0x00000007u, 0x000000b9u, 0x00000025u, 0x00070050u, 0x00000007u, 0x000000bbu, 0x0000008fu, 0x0000008fu, 0x0000008fu, 0x0000008fu, 0x00050082u, 0x00000007u, 0x000000bcu, 0x000000b9u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000beu, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000c0u, 0x00000024u, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000000c1u, 0x000000c0u, 0x00050084u, 0x00000006u, 0x000000c2u, 0x000000beu, 0x000000c1u, 0x0003003eu, 0x000000c4u, 0x000000bcu, 0x00050041u, 0x00000014u, 0x000000c6u, 0x00000024u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000c7u, 0x000000c6u, 0x0003003eu, 0x000000c5u, 0x000000c7u, 0x0003003eu, 0x000000c8u, 0x000000c2u, 0x00080039u, 0x00000007u, 0x000000cau, 0x0000001au, 0x000000c4u, 0x000000c5u, 0x000000c8u, 0x000000c9u, 0x0004003du, 0x00000007u, 0x000000cbu, 0x000000c9u, 0x0003003eu, 0x000000c3u, 0x000000cbu, 0x0003003eu, 0x000000b8u, 0x000000cau, 0x0004003du, 0x00000007u, 0x000000ceu, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000cfu, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000d1u, 0x00000087u, 0x00040072u, 0x00000006u, 0x000000d2u, 0x000000d1u, 0x00050084u, 0x00000006u, 0x000000d3u, 0x000000cfu, 0x000000d2u, 0x00070050u, 0x00000007u, 0x000000d4u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x000500b1u, 0x000000d5u, 0x000000d6u, 0x000000ceu, 0x000000d4u, 0x000600a9u, 0x00000007u, 0x000000d7u, 0x000000d6u, 0x000000b6u, 0x000000cau, 0x0003003eu, 0x000000b8u, 0x000000d7u, 0x0004003du, 0x00000007u, 0x000000dau, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000dbu, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000ddu, 0x00000087u, 0x00040072u, 0x00000006u, 0x000000deu, 0x000000ddu, 0x00050084u, 0x00000006u, 0x000000dfu, 0x000000dbu, 0x000000deu, 0x00070050u, 0x00000007u, 0x000000e0u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000500b1u, 0x000000d5u, 0x000000e1u, 0x000000dau, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000000e2u, 0x000000e1u, 0x000000b7u, 0x000000cbu, 0x0003003eu, 0x000000c3u, 0x000000e2u, 0x000500adu, 0x000000d5u, 0x000000e8u, 0x000000a3u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000000e9u, 0x000000e8u, 0x000000e5u, 0x000000a2u, 0x0003003eu, 0x00000090u, 0x000000e9u, 0x000500b1u, 0x000000d5u, 0x000000f0u, 0x000000a3u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000000f1u, 0x000000f0u, 0x000000ecu, 0x000000e9u, 0x0003003eu, 0x00000090u, 0x000000f1u, 0x000500adu, 0x000000d5u, 0x000000f4u, 0x000000e2u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000000f5u, 0x000000f4u, 0x000000e5u, 0x000000d7u, 0x0003003eu, 0x000000b8u, 0x000000f5u, 0x000500b1u, 0x000000d5u, 0x000000f8u, 0x000000e2u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000000f9u, 0x000000f8u, 0x000000ecu, 0x000000f5u, 0x0003003eu, 0x000000b8u, 0x000000f9u, 0x0003003eu, 0x000000fbu, 0x000000f1u, 0x00050039u, 0x00000007u, 0x000000fdu, 0x0000000bu, 0x000000fbu, 0x0003003eu, 0x000000fau, 0x000000fdu, 0x0003003eu, 0x000000ffu, 0x000000f9u, 0x00050039u, 0x00000007u, 0x00000101u, 0x0000000bu, 0x000000ffu, 0x0003003eu, 0x000000feu, 0x00000101u, 0x0004003du, 0x00000020u, 0x00000102u, 0x00000026u, 0x000300f7u, 0x00000104u, 0x00000000u, 0x000400fau, 0x00000102u, 0x00000103u, 0x00000109u, 0x000200f8u, 0x00000103u, 0x0003003eu, 0x00000105u, 0x000000fdu, 0x0003003eu, 0x00000107u, 0x00000101u, 0x000200f9u, 0x00000104u, 0x000200f8u, 0x00000109u, 0x0003003eu, 0x00000105u, 0x00000101u, 0x0003003eu, 0x00000107u, 0x000000fdu, 0x000200f9u, 0x00000104u, 0x000200f8u, 0x00000104u, 0x00070050u, 0x000000d5u, 0x000007c4u, 0x00000102u, 0x00000102u, 0x00000102u, 0x00000102u, 0x000600a9u, 0x00000007u, 0x000007c5u, 0x000007c4u, 0x00000101u, 0x000000fdu, 0x000600a9u, 0x00000007u, 0x000007c7u, 0x000007c4u, 0x000000fdu, 0x00000101u, 0x0006000cu, 0x00000007u, 0x0000010eu, 0x00000001u, 0x00000005u, 0x000007c7u, 0x0006000cu, 0x00000007u, 0x00000110u, 0x00000001u, 0x00000005u, 0x000007c5u, 0x0007000cu, 0x00000007u, 0x00000111u, 0x00000001u, 0x0000002au, 0x0000010eu, 0x00000110u, 0x0003003eu, 0x00000112u, 0x00000111u, 0x00050039u, 0x00000006u, 0x00000113u, 0x00000012u, 0x00000112u, 0x0003003eu, 0x0000010cu, 0x00000113u, 0x0004003du, 0x00000006u, 0x00000116u, 0x00000027u, 0x00050084u, 0x00000006u, 0x00000117u, 0x00000115u, 0x00000116u, 0x000500b3u, 0x00000020u, 0x00000118u, 0x00000113u, 0x00000117u, 0x000300f7u, 0x0000011au, 0x00000000u, 0x000400fau, 0x00000118u, 0x00000119u, 0x00000123u, 0x000200f8u, 0x00000119u, 0x0003003eu, 0x0000011cu, 0x000007c7u, 0x00050039u, 0x00000006u, 0x0000011eu, 0x0000000fu, 0x0000011cu, 0x0003003eu, 0x0000011fu, 0x000007c5u, 0x00050039u, 0x00000006u, 0x00000121u, 0x00000012u, 0x0000011fu, 0x00050050u, 0x00000022u, 0x00000122u, 0x0000011eu, 0x00000121u, 0x0003003eu, 0x0000011bu, 0x00000122u, 0x000200f9u, 0x0000011au, 0x000200f8u, 0x00000123u, 0x0003003eu, 0x0000011bu, 0x00000124u, 0x000200f9u, 0x0000011au, 0x000200f8u, 0x0000011au, 0x000700f5u, 0x00000022u, 0x000007b7u, 0x00000122u, 0x00000119u, 0x00000124u, 0x00000123u, 0x000200feu, 0x000007b7u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000030u, 0x00000000u, 0x0000002bu, 0x00030037u, 0x0000001fu, 0x0000002cu, 0x00030037u, 0x0000002au, 0x0000002du, 0x00030037u, 0x0000002au, 0x0000002eu, 0x00030037u, 0x00000014u, 0x0000002fu, 0x000200f8u, 0x00000031u, 0x0005003bu, 0x00000021u, 0x000002eeu, 0x00000007u, 0x00000146u, 0x0004003bu, 0x00000021u, 0x000002ebu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000128u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000148u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000151u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000164u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000165u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000167u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000169u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000016bu, 0x00000007u, 0x000300f7u, 0x000002eau, 0x00000000u, 0x000300fbu, 0x00000049u, 0x000002edu, 0x000200f8u, 0x000002edu, 0x00050041u, 0x00000014u, 0x00000129u, 0x0000002du, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000012au, 0x00000129u, 0x00050084u, 0x00000006u, 0x0000012bu, 0x0000012au, 0x00000086u, 0x0003003eu, 0x00000128u, 0x0000012bu, 0x00050041u, 0x00000014u, 0x0000012du, 0x0000002eu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000012eu, 0x0000012du, 0x00050084u, 0x00000006u, 0x0000012fu, 0x0000012eu, 0x00000086u, 0x00050080u, 0x00000006u, 0x00000130u, 0x0000012fu, 0x0000007eu, 0x0003003eu, 0x0000012cu, 0x00000130u, 0x0004003du, 0x00000006u, 0x00000132u, 0x0000002fu, 0x00050041u, 0x0000007fu, 0x00000133u, 0x0000002cu, 0x0000007eu, 0x0004003du, 0x0000001cu, 0x00000134u, 0x00000133u, 0x00040072u, 0x00000006u, 0x00000135u, 0x00000134u, 0x00050084u, 0x00000006u, 0x00000136u, 0x00000132u, 0x00000135u, 0x0007000cu, 0x00000006u, 0x00000137u, 0x00000001u, 0x0000002au, 0x0000012bu, 0x00000136u, 0x0003003eu, 0x00000128u, 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x0000002fu, 0x00050041u, 0x0000007fu, 0x0000013bu, 0x0000002cu, 0x0000013au, 0x0004003du, 0x0000001cu, 0x0000013cu, 0x0000013bu, 0x00040072u, 0x00000006u, 0x0000013du, 0x0000013cu, 0x00050084u, 0x00000006u, 0x0000013eu, 0x00000139u, 0x0000013du, 0x00050082u, 0x00000006u, 0x0000013fu, 0x0000013eu, 0x000000abu, 0x0007000cu, 0x00000006u, 0x00000140u, 0x00000001u, 0x00000027u, 0x00000130u, 0x0000013fu, 0x0003003eu, 0x0000012cu, 0x00000140u, 0x000500b1u, 0x00000020u, 0x00000143u, 0x00000140u, 0x00000137u, 0x000300f7u, 0x00000145u, 0x00000000u, 0x000400fau, 0x00000143u, 0x00000144u, 0x00000145u, 0x000200f8u, 0x00000144u, 0x0003003eu, 0x000002eeu, 0x000002efu, 0x0003003eu, 0x000002ebu, 0x00000146u, 0x000200f9u, 0x000002eau, 0x000200f8u, 0x00000145u, 0x00050041u, 0x0000014au, 0x0000014bu, 0x0000002cu, 0x00000149u, 0x0004003du, 0x0000001du, 0x0000014cu, 0x0000014bu, 0x00040071u, 0x00000032u, 0x0000014du, 0x0000014cu, 0x0004007cu, 0x00000006u, 0x0000014eu, 0x0000014du, 0x000500c7u, 0x00000006u, 0x0000014fu, 0x0000014eu, 0x000000abu, 0x000500abu, 0x00000020u, 0x00000150u, 0x0000014fu, 0x00000097u, 0x0003003eu, 0x00000148u, 0x00000150u, 0x00050041u, 0x0000007fu, 0x00000154u, 0x0000002cu, 0x00000086u, 0x0004003du, 0x0000001cu, 0x00000155u, 0x00000154u, 0x00040072u, 0x00000006u, 0x00000156u, 0x00000155u, 0x0004003du, 0x00000006u, 0x00000157u, 0x0000002fu, 0x00050084u, 0x00000006u, 0x00000158u, 0x00000156u, 0x00000157u, 0x00050050u, 0x00000022u, 0x0000015au, 0x00000158u, 0x00000158u, 0x00050080u, 0x00000022u, 0x0000015bu, 0x0000015au, 0x00000159u, 0x00050050u, 0x00000022u, 0x0000015du, 0x00000137u, 0x00000137u, 0x00050050u, 0x00000022u, 0x0000015fu, 0x00000140u, 0x00000140u, 0x0008000cu, 0x00000022u, 0x00000160u, 0x00000001u, 0x0000002du, 0x0000015bu, 0x0000015du, 0x0000015fu, 0x00050051u, 0x00000006u, 0x00000161u, 0x00000160u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000162u, 0x00000160u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000163u, 0x00000137u, 0x00000140u, 0x00000161u, 0x00000162u, 0x0003003eu, 0x00000151u, 0x00000163u, 0x0004003du, 0x0000001eu, 0x00000166u, 0x0000002cu, 0x0003003eu, 0x00000165u, 0x00000166u, 0x0003003eu, 0x00000167u, 0x00000163u, 0x0003003eu, 0x00000169u, 0x00000150u, 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000002fu, 0x0003003eu, 0x0000016bu, 0x0000016cu, 0x00080039u, 0x00000022u, 0x0000016du, 0x00000028u, 0x00000165u, 0x00000167u, 0x00000169u, 0x0000016bu, 0x0003003eu, 0x00000164u, 0x0000016du, 0x00050041u, 0x00000014u, 0x0000016eu, 0x00000164u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000016eu, 0x00050041u, 0x00000014u, 0x00000170u, 0x0000002du, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000170u, 0x0007000cu, 0x00000006u, 0x00000172u, 0x00000001u, 0x0000002au, 0x0000016fu, 0x00000171u, 0x0003003eu, 0x0000016eu, 0x00000172u, 0x00050041u, 0x00000014u, 0x00000174u, 0x00000164u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000175u, 0x00000174u, 0x00050041u, 0x00000014u, 0x00000176u, 0x0000002eu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000177u, 0x00000176u, 0x0007000cu, 0x00000006u, 0x00000178u, 0x00000001u, 0x00000027u, 0x00000175u, 0x00000177u, 0x0003003eu, 0x00000174u, 0x00000178u, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000016eu, 0x0004003du, 0x00000006u, 0x0000017du, 0x00000174u, 0x000500b3u, 0x00000020u, 0x0000017eu, 0x0000017bu, 0x0000017du, 0x0003003eu, 0x000002eeu, 0x000002efu, 0x0003003eu, 0x000002ebu, 0x0000017eu, 0x000200f9u, 0x000002eau, 0x000200f8u, 0x000002eau, 0x000700f5u, 0x00000020u, 0x000007b8u, 0x00000146u, 0x00000144u, 0x0000017eu, 0x00000145u, 0x000200feu, 0x000007b8u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000036u, 0x00000000u, 0x00000034u, 0x00030037u, 0x00000033u, 0x00000035u, 0x000200f8u, 0x00000037u, 0x0004003bu, 0x0000014au, 0x00000756u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000755u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000754u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000753u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000752u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000751u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000750u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000074fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000074cu, 0x00000007u, 0x0004003du, 0x00000032u, 0x00000186u, 0x00000035u, 0x00060041u, 0x00000187u, 0x00000188u, 0x00000185u, 0x00000097u, 0x00000186u, 0x0004003du, 0x00000181u, 0x00000189u, 0x00000188u, 0x00050051u, 0x00000006u, 0x0000018bu, 0x00000189u, 0x00000000u, 0x0003003eu, 0x0000074cu, 0x0000018bu, 0x00050051u, 0x00000006u, 0x0000018du, 0x00000189u, 0x00000001u, 0x0003003eu, 0x0000074du, 0x0000018du, 0x00050051u, 0x00000006u, 0x0000018fu, 0x00000189u, 0x00000002u, 0x0003003eu, 0x0000074eu, 0x0000018fu, 0x00050051u, 0x0000001cu, 0x00000191u, 0x00000189u, 0x00000003u, 0x0003003eu, 0x0000074fu, 0x00000191u, 0x00050051u, 0x0000001cu, 0x00000193u, 0x00000189u, 0x00000004u, 0x0003003eu, 0x00000750u, 0x00000193u, 0x00050051u, 0x00000006u, 0x00000195u, 0x00000189u, 0x00000005u, 0x0003003eu, 0x00000751u, 0x00000195u, 0x00050051u, 0x00000006u, 0x00000197u, 0x00000189u, 0x00000006u, 0x0003003eu, 0x00000752u, 0x00000197u, 0x00050051u, 0x00000006u, 0x00000199u, 0x00000189u, 0x00000007u, 0x0003003eu, 0x00000753u, 0x00000199u, 0x00050051u, 0x0000001cu, 0x0000019bu, 0x00000189u, 0x00000008u, 0x0003003eu, 0x00000754u, 0x0000019bu, 0x00050051u, 0x0000001du, 0x0000019du, 0x00000189u, 0x00000009u, 0x0003003eu, 0x00000755u, 0x0000019du, 0x00050051u, 0x0000001du, 0x0000019fu, 0x00000189u, 0x0000000au, 0x0003003eu, 0x00000756u, 0x0000019fu, 0x000e0050u, 0x0000001eu, 0x00000762u, 0x0000018bu, 0x0000018du, 0x0000018fu, 0x00000191u, 0x00000193u, 0x00000195u, 0x00000197u, 0x00000199u, 0x0000019bu, 0x0000019du, 0x0000019fu, 0x000200feu, 0x00000762u, 0x00010038u, 0x00050036u, 0x00000038u, 0x0000003bu, 0x00000000u, 0x00000039u, 0x00030037u, 0x00000033u, 0x0000003au, 0x000200f8u, 0x0000003cu, 0x0004003bu, 0x00000008u, 0x000001a5u, 0x00000007u, 0x0004003du, 0x00000032u, 0x000001aau, 0x0000003au, 0x00060041u, 0x000001abu, 0x000001acu, 0x000001a9u, 0x00000097u, 0x000001aau, 0x0004003du, 0x00000007u, 0x000001adu, 0x000001acu, 0x0003003eu, 0x000001a5u, 0x000001adu, 0x00050041u, 0x00000014u, 0x000001aeu, 0x000001a5u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000001afu, 0x000001aeu, 0x00050041u, 0x00000014u, 0x000001b0u, 0x000001a5u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000001b1u, 0x000001b0u, 0x00050041u, 0x00000014u, 0x000001b3u, 0x000001a5u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x00050041u, 0x00000014u, 0x000001b6u, 0x000001a5u, 0x000001b5u, 0x0004003du, 0x00000006u, 0x000001b7u, 0x000001b6u, 0x00070050u, 0x00000038u, 0x000001b8u, 0x000001afu, 0x000001b1u, 0x000001b4u, 0x000001b7u, 0x000200feu, 0x000001b8u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x000007c5u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x0000003du, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0009000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000001beu, 0x000001c9u, 0x000001cdu, 0x000001d8u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000181u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000181u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000181u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000181u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000181u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000181u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000181u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000181u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000181u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000181u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000181u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000182u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000183u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000183u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000183u, 0x00000002u, 0x00040047u, 0x00000185u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000185u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000001a6u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000001a7u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001a7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001a7u, 0x00000002u, 0x00040047u, 0x000001a9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001a9u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000001beu, 0x0000000bu, 0x0000001au, 0x00030047u, 0x000001c9u, 0x00000000u, 0x00040047u, 0x000001c9u, 0x0000000bu, 0x00000029u, 0x00030047u, 0x000001cau, 0x00000000u, 0x00030047u, 0x000001cdu, 0x00000000u, 0x00040047u, 0x000001cdu, 0x0000000bu, 0x00000024u, 0x00030047u, 0x000001ceu, 0x00000000u, 0x00040047u, 0x000001d8u, 0x0000000bu, 0x00000028u, 0x00040047u, 0x000001e0u, 0x00000001u, 0x00000000u, 0x00040047u, 0x000001e1u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x000001eeu, 0x00000001u, 0x00000004u, 0x00040047u, 0x000001efu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001f8u, 0x00000001u, 0x00000002u, 0x00050048u, 0x0000020cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000020cu, 0x00000001u, 0x00000023u, 0x00000008u, 0x00030047u, 0x0000020cu, 0x00000002u, 0x00040047u, 0x00000241u, 0x00000001u, 0x00000006u, 0x00040047u, 0x000002b6u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002b7u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002b7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b7u, 0x00000002u, 0x00040047u, 0x000002b9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002b9u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000002bbu, 0x00000001u, 0x00000003u, 0x00040047u, 0x000002c7u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000002c8u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000002c8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002c8u, 0x00000002u, 0x00040047u, 0x000002cau, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002cau, 0x00000021u, 0x00000004u, 0x00040047u, 0x000002efu, 0x00000001u, 0x00000005u, 0x00040047u, 0x000002f2u, 0x00000006u, 0x00000001u, 0x00050048u, 0x000002f3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002f3u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002f3u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x000002f4u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002f5u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002f5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002f5u, 0x00000002u, 0x00040047u, 0x000002f7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000002f7u, 0x00000021u, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040021u, 0x00000009u, 0x00000007u, 0x00000008u, 0x00040021u, 0x0000000du, 0x00000006u, 0x00000008u, 0x00040020u, 0x00000014u, 0x00000007u, 0x00000006u, 0x00070021u, 0x00000015u, 0x00000007u, 0x00000008u, 0x00000014u, 0x00000014u, 0x00000008u, 0x00040015u, 0x0000001cu, 0x00000010u, 0x00000001u, 0x00040015u, 0x0000001du, 0x00000008u, 0x00000000u, 0x000d001eu, 0x0000001eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x00040020u, 0x0000001fu, 0x00000007u, 0x0000001eu, 0x00020014u, 0x00000020u, 0x00040020u, 0x00000021u, 0x00000007u, 0x00000020u, 0x00040017u, 0x00000022u, 0x00000006u, 0x00000002u, 0x00070021u, 0x00000023u, 0x00000022u, 0x0000001fu, 0x00000008u, 0x00000021u, 0x00000014u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000022u, 0x00070021u, 0x0000002bu, 0x00000020u, 0x0000001fu, 0x0000002au, 0x0000002au, 0x00000014u, 0x00040015u, 0x00000032u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000033u, 0x00000007u, 0x00000032u, 0x00040021u, 0x00000034u, 0x0000001eu, 0x00000033u, 0x0006001eu, 0x00000038u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040021u, 0x00000039u, 0x00000038u, 0x00000033u, 0x0004002bu, 0x00000006u, 0x0000003eu, 0x0000000fu, 0x0004002bu, 0x00000032u, 0x00000049u, 0x00000000u, 0x0004002bu, 0x00000032u, 0x0000004cu, 0x00000001u, 0x0004001eu, 0x00000064u, 0x00000007u, 0x00000007u, 0x00040017u, 0x00000069u, 0x00000032u, 0x00000004u, 0x00040020u, 0x0000006eu, 0x00000007u, 0x00000069u, 0x0004001eu, 0x00000070u, 0x00000069u, 0x00000069u, 0x0004002bu, 0x00000006u, 0x0000007eu, 0x00000003u, 0x00040020u, 0x0000007fu, 0x00000007u, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x00000083u, 0xfffffffcu, 0x0004002bu, 0x00000006u, 0x00000086u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x00000095u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000097u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000a9u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000000abu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000000bdu, 0x00000007u, 0x0004002bu, 0x00000006u, 0x000000bfu, 0x00000002u, 0x00040017u, 0x000000d5u, 0x00000020u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000e4u, 0x7fffffffu, 0x0007002cu, 0x00000007u, 0x000000e5u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x000000e4u, 0x0007002cu, 0x00000007u, 0x000000e7u, 0x00000097u, 0x00000097u, 0x00000097u, 0x00000097u, 0x0004002bu, 0x00000006u, 0x000000ebu, 0x80000000u, 0x0007002cu, 0x00000007u, 0x000000ecu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x000000ebu, 0x0004002bu, 0x00000006u, 0x000000eeu, 0xffffffffu, 0x0007002cu, 0x00000007u, 0x000000efu, 0x000000eeu, 0x000000eeu, 0x000000eeu, 0x000000eeu, 0x0004002bu, 0x00000006u, 0x00000115u, 0x000007ffu, 0x0005002cu, 0x00000022u, 0x00000124u, 0x00000097u, 0x000000e4u, 0x0004002bu, 0x00000006u, 0x0000013au, 0x00000008u, 0x0003002au, 0x00000020u, 0x00000146u, 0x0004002bu, 0x00000006u, 0x00000149u, 0x00000009u, 0x00040020u, 0x0000014au, 0x00000007u, 0x0000001du, 0x0005002cu, 0x00000022u, 0x00000159u, 0x000000eeu, 0x00000097u, 0x000d001eu, 0x00000181u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000001cu, 0x0000001du, 0x0000001du, 0x0003001du, 0x00000182u, 0x00000181u, 0x0003001eu, 0x00000183u, 0x00000182u, 0x00040020u, 0x00000184u, 0x0000000cu, 0x00000183u, 0x0004003bu, 0x00000184u, 0x00000185u, 0x0000000cu, 0x00040020u, 0x00000187u, 0x0000000cu, 0x00000181u, 0x0004002bu, 0x00000006u, 0x000001a0u, 0x0000000au, 0x0003001du, 0x000001a6u, 0x00000007u, 0x0003001eu, 0x000001a7u, 0x000001a6u, 0x00040020u, 0x000001a8u, 0x0000000cu, 0x000001a7u, 0x0004003bu, 0x000001a8u, 0x000001a9u, 0x0000000cu, 0x00040020u, 0x000001abu, 0x0000000cu, 0x00000007u, 0x0004002bu, 0x00000032u, 0x000001b2u, 0x00000002u, 0x0004002bu, 0x00000032u, 0x000001b5u, 0x00000003u, 0x00040017u, 0x000001bcu, 0x00000032u, 0x00000003u, 0x00040020u, 0x000001bdu, 0x00000001u, 0x000001bcu, 0x0004003bu, 0x000001bdu, 0x000001beu, 0x00000001u, 0x00040020u, 0x000001bfu, 0x00000001u, 0x00000032u, 0x00040017u, 0x000001c4u, 0x00000032u, 0x00000002u, 0x0004003bu, 0x000001bfu, 0x000001c9u, 0x00000001u, 0x0004003bu, 0x000001bfu, 0x000001cdu, 0x00000001u, 0x0004003bu, 0x000001bfu, 0x000001d8u, 0x00000001u, 0x00040032u, 0x00000032u, 0x000001e0u, 0x00000001u, 0x00060033u, 0x000001bcu, 0x000001e1u, 0x000001e0u, 0x0000004cu, 0x0000004cu, 0x00060034u, 0x00000032u, 0x000001e2u, 0x00000051u, 0x000001e1u, 0x00000000u, 0x00060034u, 0x00000006u, 0x000001e3u, 0x00000080u, 0x000001e2u, 0x00000049u, 0x00060034u, 0x00000006u, 0x000001e4u, 0x000000c3u, 0x000001e3u, 0x0000007eu, 0x00050033u, 0x00000022u, 0x000001e5u, 0x0000013au, 0x000001e4u, 0x00040032u, 0x00000006u, 0x000001eeu, 0x00000400u, 0x00040032u, 0x00000006u, 0x000001efu, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001f0u, 0x00000087u, 0x000001eeu, 0x000001efu, 0x00060034u, 0x00000006u, 0x000001f7u, 0x00000084u, 0x000001efu, 0x0000013au, 0x00040032u, 0x00000006u, 0x000001f8u, 0x00000008u, 0x00060034u, 0x00000006u, 0x000001f9u, 0x00000084u, 0x000001f8u, 0x000001e4u, 0x00050033u, 0x00000022u, 0x000001fau, 0x000001f7u, 0x000001f9u, 0x00060034u, 0x00000006u, 0x00000207u, 0x00000084u, 0x000001efu, 0x0000013au, 0x0004001eu, 0x0000020cu, 0x000001c4u, 0x00000006u, 0x00040020u, 0x0000020du, 0x00000009u, 0x0000020cu, 0x0004003bu, 0x0000020du, 0x0000020eu, 0x00000009u, 0x00040020u, 0x0000020fu, 0x00000009u, 0x000001c4u, 0x00050033u, 0x00000022u, 0x00000218u, 0x000001efu, 0x000001f8u, 0x00050033u, 0x00000022u, 0x0000021cu, 0x000001efu, 0x000001f8u, 0x00040020u, 0x00000225u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000022au, 0x00000020u, 0x00040020u, 0x0000023au, 0x00000007u, 0x00000038u, 0x00040032u, 0x00000006u, 0x00000241u, 0x00000001u, 0x0003001du, 0x000002b6u, 0x00000032u, 0x0003001eu, 0x000002b7u, 0x000002b6u, 0x00040020u, 0x000002b8u, 0x0000000cu, 0x000002b7u, 0x0004003bu, 0x000002b8u, 0x000002b9u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x000002bbu, 0x00000100u, 0x00060034u, 0x00000006u, 0x000002bcu, 0x00000087u, 0x000002bbu, 0x0000022au, 0x00040020u, 0x000002c1u, 0x0000000cu, 0x00000032u, 0x0003001du, 0x000002c7u, 0x00000032u, 0x0003001eu, 0x000002c8u, 0x000002c7u, 0x00040020u, 0x000002c9u, 0x0000000cu, 0x000002c8u, 0x0004003bu, 0x000002c9u, 0x000002cau, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000002d7u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x000002d8u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x000002d9u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x000002dau, 0x00000100u, 0x0004002bu, 0x00000006u, 0x000002dbu, 0x00000200u, 0x0004002bu, 0x00000006u, 0x000002dcu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x000002ddu, 0x00000800u, 0x0004002bu, 0x00000006u, 0x000002deu, 0x00001000u, 0x0004002bu, 0x00000006u, 0x000002dfu, 0x00002000u, 0x0004002bu, 0x00000006u, 0x000002e0u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x000002e1u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x000002e2u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x000002e3u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x000002e4u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x000002e5u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x000002e6u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x000002e7u, 0x00200000u, 0x0004002bu, 0x00000006u, 0x000002e8u, 0x00400000u, 0x0004002bu, 0x00000006u, 0x000002e9u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x000002eau, 0x01000000u, 0x0004002bu, 0x00000006u, 0x000002ebu, 0x0000001au, 0x0004002bu, 0x00000006u, 0x000002ecu, 0x10000000u, 0x0004002bu, 0x00000006u, 0x000002edu, 0x20000000u, 0x0004002bu, 0x00000006u, 0x000002eeu, 0x40000000u, 0x00040032u, 0x00000006u, 0x000002efu, 0x00008000u, 0x00040017u, 0x000002f0u, 0x0000001du, 0x00000004u, 0x0004002bu, 0x00000032u, 0x000002f1u, 0x00000008u, 0x0004001cu, 0x000002f2u, 0x0000001du, 0x000002f1u, 0x0005001eu, 0x000002f3u, 0x000002f0u, 0x000002f0u, 0x000002f2u, 0x0003001du, 0x000002f4u, 0x000002f3u, 0x0003001eu, 0x000002f5u, 0x000002f4u, 0x00040020u, 0x000002f6u, 0x0000000cu, 0x000002f5u, 0x0004003bu, 0x000002f6u, 0x000002f7u, 0x0000000cu, 0x00030029u, 0x00000020u, 0x000002fdu, 0x0003002eu, 0x0000001cu, 0x00000622u, 0x0003002eu, 0x0000001du, 0x00000623u, 0x0005002cu, 0x00000022u, 0x000007b6u, 0x000000abu, 0x000000abu, 0x0005002cu, 0x00000022u, 0x000007b7u, 0x000000bfu, 0x000000bfu, 0x0007002cu, 0x00000007u, 0x000007b8u, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000014au, 0x00000744u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000743u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000742u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000741u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000740u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000073fu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000073eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000073bu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000723u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000722u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000721u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000720u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071eu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000071du, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000071cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000071au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000719u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000714u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000713u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000711u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006fbu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006fau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f7u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006f6u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006f5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006f2u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006dau, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006d9u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006d8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d5u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006d4u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006d3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d2u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006d0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006cau, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006beu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bdu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bcu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006bbu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006a3u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x000006a2u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x000006a1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000006a0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069eu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000069du, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000069cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000069au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000699u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000068cu, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000068bu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000068au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000688u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000687u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000686u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000685u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000684u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000683u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000682u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000679u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000678u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000677u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000676u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000675u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000674u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000673u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000672u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000668u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000667u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000666u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000665u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000064du, 0x00000007u, 0x0004003bu, 0x0000014au, 0x0000064cu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000064bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000064au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000649u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000648u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000647u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000646u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000645u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000644u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000643u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000636u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000635u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000634u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000633u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000632u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000631u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000630u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000062fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000062cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000621u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000620u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061fu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000061eu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000061du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000061au, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000060eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000060fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000602u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000603u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000005f6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000005f7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005f2u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005eeu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005d5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005d6u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x000005d7u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005d8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bdu, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x000005beu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a4u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x000005a5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000005a6u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000050du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000050eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000050fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000510u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000511u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000512u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000513u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000515u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000516u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000517u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000518u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000519u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000051du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000051eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000051fu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000520u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000521u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000522u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000523u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000524u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000525u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000526u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000527u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000528u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000529u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000052bu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000052cu, 0x00000007u, 0x0005003bu, 0x00000021u, 0x000004b6u, 0x00000007u, 0x00000146u, 0x0004003bu, 0x00000021u, 0x000004b7u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004b8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004b9u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000004bau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004bbu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000004bcu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000004beu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000004bfu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000004c0u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000004c1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000048cu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000480u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000481u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000474u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000475u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000468u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000469u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000464u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000460u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000447u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000448u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x00000449u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000044au, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000042fu, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x00000430u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000431u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000415u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000416u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x00000417u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000418u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000037fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000380u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000381u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000382u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000383u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000384u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000385u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000386u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000387u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000388u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000389u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000038bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038du, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000038fu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000390u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000391u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000392u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000393u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000394u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000395u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000396u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000397u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000398u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000399u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039au, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000039bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000039du, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000039eu, 0x00000007u, 0x0005003bu, 0x00000021u, 0x00000328u, 0x00000007u, 0x00000146u, 0x0004003bu, 0x00000021u, 0x00000329u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000032au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000032bu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000032cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000032du, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000032eu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000330u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000331u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000332u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000333u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000002feu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001bbu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001c3u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001c8u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001ccu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001d4u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001deu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000001ebu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000001f5u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000205u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000216u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000021au, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000224u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000228u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000022eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000023cu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000023fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000024eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000025fu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000264u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000266u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000268u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000026au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000026eu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000276u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000027eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000285u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000288u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000294u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000002a5u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002aau, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000002acu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000002aeu, 0x00000007u, 0x00050041u, 0x000001bfu, 0x000001c0u, 0x000001beu, 0x00000049u, 0x0004003du, 0x00000032u, 0x000001c1u, 0x000001c0u, 0x0004007cu, 0x00000006u, 0x000001c2u, 0x000001c1u, 0x0003003eu, 0x000001bbu, 0x000001c2u, 0x0004003du, 0x000001bcu, 0x000001c5u, 0x000001beu, 0x0007004fu, 0x000001c4u, 0x000001c6u, 0x000001c5u, 0x000001c5u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000022u, 0x000001c7u, 0x000001c6u, 0x0003003eu, 0x000001c3u, 0x000001c7u, 0x0004003du, 0x00000032u, 0x000001cau, 0x000001c9u, 0x0004007cu, 0x00000006u, 0x000001cbu, 0x000001cau, 0x0003003eu, 0x000001c8u, 0x000001cbu, 0x0004003du, 0x00000032u, 0x000001ceu, 0x000001cdu, 0x0004007cu, 0x00000006u, 0x000001cfu, 0x000001ceu, 0x000500c3u, 0x00000006u, 0x000001d0u, 0x000001cfu, 0x0000007eu, 0x0003003eu, 0x000001ccu, 0x000001d0u, 0x000500c7u, 0x00000006u, 0x000001d3u, 0x000001cbu, 0x000000bdu, 0x0003003eu, 0x000001d1u, 0x000001d3u, 0x000500c3u, 0x00000006u, 0x000001d6u, 0x000001cbu, 0x0000007eu, 0x0003003eu, 0x000001d4u, 0x000001d6u, 0x0004003du, 0x00000032u, 0x000001d9u, 0x000001d8u, 0x0004007cu, 0x00000006u, 0x000001dau, 0x000001d9u, 0x00050084u, 0x00000006u, 0x000001dbu, 0x000001d0u, 0x000001dau, 0x00050080u, 0x00000006u, 0x000001ddu, 0x000001d6u, 0x000001dbu, 0x0003003eu, 0x000001d4u, 0x000001ddu, 0x00050084u, 0x00000022u, 0x000001e6u, 0x000001c7u, 0x000001e5u, 0x00050050u, 0x00000022u, 0x000001e9u, 0x000001d3u, 0x000001ddu, 0x00050080u, 0x00000022u, 0x000001eau, 0x000001e6u, 0x000001e9u, 0x0003003eu, 0x000001deu, 0x000001eau, 0x00050041u, 0x00000014u, 0x000001ecu, 0x000001deu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000001edu, 0x000001ecu, 0x00050084u, 0x00000006u, 0x000001f1u, 0x000001edu, 0x000001f0u, 0x00050041u, 0x00000014u, 0x000001f2u, 0x000001deu, 0x00000049u, 0x0004003du, 0x00000006u, 0x000001f3u, 0x000001f2u, 0x00050080u, 0x00000006u, 0x000001f4u, 0x000001f1u, 0x000001f3u, 0x0003003eu, 0x000001ebu, 0x000001f4u, 0x00050084u, 0x00000022u, 0x000001fbu, 0x000001c7u, 0x000001fau, 0x0003003eu, 0x000001f5u, 0x000001fbu, 0x00050084u, 0x00000006u, 0x000001fdu, 0x000001d0u, 0x000001f8u, 0x00050084u, 0x00000006u, 0x00000200u, 0x000001fdu, 0x000001dau, 0x00050041u, 0x00000014u, 0x00000201u, 0x000001f5u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000202u, 0x00000201u, 0x00050080u, 0x00000006u, 0x00000203u, 0x00000202u, 0x00000200u, 0x0003003eu, 0x00000201u, 0x00000203u, 0x0004003du, 0x00000022u, 0x00000206u, 0x000001f5u, 0x00050084u, 0x00000006u, 0x00000209u, 0x000001f8u, 0x000001d0u, 0x00050050u, 0x00000022u, 0x0000020au, 0x00000207u, 0x00000209u, 0x00050080u, 0x00000022u, 0x0000020bu, 0x00000206u, 0x0000020au, 0x00050041u, 0x0000020fu, 0x00000210u, 0x0000020eu, 0x00000097u, 0x0004003du, 0x000001c4u, 0x00000211u, 0x00000210u, 0x0004007cu, 0x00000022u, 0x00000212u, 0x00000211u, 0x0007000cu, 0x00000022u, 0x00000213u, 0x00000001u, 0x00000027u, 0x0000020bu, 0x00000212u, 0x00050082u, 0x00000022u, 0x00000215u, 0x00000213u, 0x000007b6u, 0x0003003eu, 0x00000205u, 0x00000215u, 0x0004003du, 0x00000022u, 0x00000217u, 0x000001deu, 0x00050084u, 0x00000022u, 0x00000219u, 0x00000217u, 0x00000218u, 0x0003003eu, 0x00000216u, 0x00000219u, 0x00050080u, 0x00000022u, 0x0000021du, 0x00000219u, 0x0000021cu, 0x0007000cu, 0x00000022u, 0x00000221u, 0x00000001u, 0x00000027u, 0x0000021du, 0x00000212u, 0x00050082u, 0x00000022u, 0x00000223u, 0x00000221u, 0x000007b6u, 0x0003003eu, 0x0000021au, 0x00000223u, 0x00050041u, 0x00000225u, 0x00000226u, 0x0000020eu, 0x000000abu, 0x0004003du, 0x00000006u, 0x00000227u, 0x00000226u, 0x0003003eu, 0x00000224u, 0x00000227u, 0x0003003eu, 0x00000228u, 0x00000146u, 0x000500b1u, 0x00000020u, 0x0000022bu, 0x000001cbu, 0x0000022au, 0x000300f7u, 0x0000022du, 0x00000000u, 0x000400fau, 0x0000022bu, 0x0000022cu, 0x0000022du, 0x000200f8u, 0x0000022cu, 0x00050084u, 0x00000006u, 0x00000230u, 0x000001c2u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000232u, 0x00000230u, 0x000001cbu, 0x0004007cu, 0x00000032u, 0x00000233u, 0x00000232u, 0x0003003eu, 0x0000022eu, 0x00000233u, 0x0004007cu, 0x00000032u, 0x00000236u, 0x00000227u, 0x000500b0u, 0x00000020u, 0x00000237u, 0x00000233u, 0x00000236u, 0x000300f7u, 0x00000239u, 0x00000000u, 0x000400fau, 0x00000237u, 0x00000238u, 0x00000239u, 0x000200f8u, 0x00000238u, 0x0003003eu, 0x0000023cu, 0x00000233u, 0x00060041u, 0x000001abu, 0x00000301u, 0x000001a9u, 0x00000097u, 0x00000233u, 0x0004003du, 0x00000007u, 0x00000302u, 0x00000301u, 0x0003003eu, 0x000002feu, 0x00000302u, 0x00050041u, 0x00000014u, 0x00000303u, 0x000002feu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000304u, 0x00000303u, 0x00050041u, 0x00000014u, 0x00000305u, 0x000002feu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000306u, 0x00000305u, 0x00050041u, 0x00000014u, 0x00000307u, 0x000002feu, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000308u, 0x00000307u, 0x00050041u, 0x00000014u, 0x00000309u, 0x000002feu, 0x000001b5u, 0x0004003du, 0x00000006u, 0x0000030au, 0x00000309u, 0x00070050u, 0x00000038u, 0x0000030bu, 0x00000304u, 0x00000306u, 0x00000308u, 0x0000030au, 0x0003003eu, 0x000006bbu, 0x00000304u, 0x0003003eu, 0x000006bcu, 0x00000306u, 0x0003003eu, 0x000006bdu, 0x00000308u, 0x0003003eu, 0x000006beu, 0x0000030au, 0x0003003eu, 0x000006c8u, 0x00000304u, 0x0003003eu, 0x000006c9u, 0x00000306u, 0x0003003eu, 0x000006cau, 0x00000308u, 0x0003003eu, 0x000006cbu, 0x0000030au, 0x0004003du, 0x00000022u, 0x00000240u, 0x000001f5u, 0x00050050u, 0x00000022u, 0x00000246u, 0x00000304u, 0x00000306u, 0x000500c3u, 0x00000022u, 0x00000248u, 0x00000246u, 0x000007b7u, 0x00050050u, 0x00000022u, 0x00000249u, 0x00000241u, 0x00000241u, 0x00050084u, 0x00000022u, 0x0000024au, 0x00000249u, 0x00000248u, 0x00050082u, 0x00000022u, 0x0000024cu, 0x0000024au, 0x000007b6u, 0x0007000cu, 0x00000022u, 0x0000024du, 0x00000001u, 0x0000002au, 0x00000240u, 0x0000024cu, 0x0003003eu, 0x0000023fu, 0x0000024du, 0x00050080u, 0x00000006u, 0x00000252u, 0x00000308u, 0x0000007eu, 0x00050080u, 0x00000006u, 0x00000255u, 0x0000030au, 0x0000007eu, 0x00050050u, 0x00000022u, 0x00000256u, 0x00000252u, 0x00000255u, 0x000500c3u, 0x00000022u, 0x00000258u, 0x00000256u, 0x000007b7u, 0x00050084u, 0x00000022u, 0x0000025au, 0x00000249u, 0x00000258u, 0x00050082u, 0x00000022u, 0x0000025cu, 0x0000025au, 0x000007b6u, 0x0007000cu, 0x00000022u, 0x0000025du, 0x00000001u, 0x00000027u, 0x00000215u, 0x0000025cu, 0x0003003eu, 0x0000024eu, 0x0000025du, 0x0003003eu, 0x0000025fu, 0x00000233u, 0x00060041u, 0x00000187u, 0x0000030fu, 0x00000185u, 0x00000097u, 0x00000233u, 0x0004003du, 0x00000181u, 0x00000310u, 0x0000030fu, 0x00050051u, 0x00000006u, 0x00000311u, 0x00000310u, 0x00000000u, 0x0003003eu, 0x00000682u, 0x00000311u, 0x00050051u, 0x00000006u, 0x00000313u, 0x00000310u, 0x00000001u, 0x0003003eu, 0x00000683u, 0x00000313u, 0x00050051u, 0x00000006u, 0x00000315u, 0x00000310u, 0x00000002u, 0x0003003eu, 0x00000684u, 0x00000315u, 0x00050051u, 0x0000001cu, 0x00000317u, 0x00000310u, 0x00000003u, 0x0003003eu, 0x00000685u, 0x00000317u, 0x00050051u, 0x0000001cu, 0x00000319u, 0x00000310u, 0x00000004u, 0x0003003eu, 0x00000686u, 0x00000319u, 0x00050051u, 0x00000006u, 0x0000031bu, 0x00000310u, 0x00000005u, 0x0003003eu, 0x00000687u, 0x0000031bu, 0x00050051u, 0x00000006u, 0x0000031du, 0x00000310u, 0x00000006u, 0x0003003eu, 0x00000688u, 0x0000031du, 0x00050051u, 0x00000006u, 0x0000031fu, 0x00000310u, 0x00000007u, 0x0003003eu, 0x00000689u, 0x0000031fu, 0x00050051u, 0x0000001cu, 0x00000321u, 0x00000310u, 0x00000008u, 0x0003003eu, 0x0000068au, 0x00000321u, 0x00050051u, 0x0000001du, 0x00000323u, 0x00000310u, 0x00000009u, 0x0003003eu, 0x0000068bu, 0x00000323u, 0x00050051u, 0x0000001du, 0x00000325u, 0x00000310u, 0x0000000au, 0x0003003eu, 0x0000068cu, 0x00000325u, 0x000e0050u, 0x0000001eu, 0x00000698u, 0x00000311u, 0x00000313u, 0x00000315u, 0x00000317u, 0x00000319u, 0x0000031bu, 0x0000031du, 0x0000031fu, 0x00000321u, 0x00000323u, 0x00000325u, 0x0003003eu, 0x00000699u, 0x00000311u, 0x0003003eu, 0x0000069au, 0x00000313u, 0x0003003eu, 0x0000069bu, 0x00000315u, 0x0003003eu, 0x0000069cu, 0x00000317u, 0x0003003eu, 0x0000069du, 0x00000319u, 0x0003003eu, 0x0000069eu, 0x0000031bu, 0x0003003eu, 0x0000069fu, 0x0000031du, 0x0003003eu, 0x000006a0u, 0x0000031fu, 0x0003003eu, 0x000006a1u, 0x00000321u, 0x0003003eu, 0x000006a2u, 0x00000323u, 0x0003003eu, 0x000006a3u, 0x00000325u, 0x0003003eu, 0x000006d0u, 0x00000311u, 0x0003003eu, 0x000006d1u, 0x00000313u, 0x0003003eu, 0x000006d2u, 0x00000315u, 0x0003003eu, 0x000006d3u, 0x00000317u, 0x0003003eu, 0x000006d4u, 0x00000319u, 0x0003003eu, 0x000006d5u, 0x0000031bu, 0x0003003eu, 0x000006d6u, 0x0000031du, 0x0003003eu, 0x000006d7u, 0x0000031fu, 0x0003003eu, 0x000006d8u, 0x00000321u, 0x0003003eu, 0x000006d9u, 0x00000323u, 0x0003003eu, 0x000006dau, 0x00000325u, 0x0003003eu, 0x000006f2u, 0x00000311u, 0x0003003eu, 0x000006f3u, 0x00000313u, 0x0003003eu, 0x000006f4u, 0x00000315u, 0x0003003eu, 0x000006f5u, 0x00000317u, 0x0003003eu, 0x000006f6u, 0x00000319u, 0x0003003eu, 0x000006f7u, 0x0000031bu, 0x0003003eu, 0x000006f8u, 0x0000031du, 0x0003003eu, 0x000006f9u, 0x0000031fu, 0x0003003eu, 0x000006fau, 0x00000321u, 0x0003003eu, 0x000006fbu, 0x00000323u, 0x0003003eu, 0x00000264u, 0x0000024du, 0x0003003eu, 0x00000266u, 0x0000025du, 0x0003003eu, 0x00000268u, 0x00000241u, 0x0003003eu, 0x00000328u, 0x00000146u, 0x000300f7u, 0x00000334u, 0x00000000u, 0x000300fbu, 0x00000049u, 0x00000335u, 0x000200f8u, 0x00000335u, 0x00050041u, 0x00000014u, 0x00000336u, 0x00000264u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000337u, 0x00000336u, 0x00050084u, 0x00000006u, 0x00000338u, 0x00000337u, 0x00000086u, 0x0003003eu, 0x0000032au, 0x00000338u, 0x00050041u, 0x00000014u, 0x00000339u, 0x00000266u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000033au, 0x00000339u, 0x00050084u, 0x00000006u, 0x0000033bu, 0x0000033au, 0x00000086u, 0x00050080u, 0x00000006u, 0x0000033cu, 0x0000033bu, 0x0000007eu, 0x0003003eu, 0x0000032bu, 0x0000033cu, 0x00040072u, 0x00000006u, 0x00000341u, 0x00000317u, 0x00050084u, 0x00000006u, 0x00000342u, 0x00000241u, 0x00000341u, 0x0007000cu, 0x00000006u, 0x00000343u, 0x00000001u, 0x0000002au, 0x00000338u, 0x00000342u, 0x0003003eu, 0x0000032au, 0x00000343u, 0x00040072u, 0x00000006u, 0x00000348u, 0x00000321u, 0x00050084u, 0x00000006u, 0x00000349u, 0x00000241u, 0x00000348u, 0x00050082u, 0x00000006u, 0x0000034au, 0x00000349u, 0x000000abu, 0x0007000cu, 0x00000006u, 0x0000034bu, 0x00000001u, 0x00000027u, 0x0000033cu, 0x0000034au, 0x0003003eu, 0x0000032bu, 0x0000034bu, 0x000500b1u, 0x00000020u, 0x0000034eu, 0x0000034bu, 0x00000343u, 0x000300f7u, 0x0000034fu, 0x00000000u, 0x000400fau, 0x0000034eu, 0x00000350u, 0x0000034fu, 0x000200f8u, 0x00000350u, 0x0003003eu, 0x00000328u, 0x000002fdu, 0x0003003eu, 0x00000329u, 0x00000146u, 0x000200f9u, 0x00000334u, 0x000200f8u, 0x0000034fu, 0x00040071u, 0x00000032u, 0x00000353u, 0x00000323u, 0x0004007cu, 0x00000006u, 0x00000354u, 0x00000353u, 0x000500c7u, 0x00000006u, 0x00000355u, 0x00000354u, 0x000000abu, 0x000500abu, 0x00000020u, 0x00000356u, 0x00000355u, 0x00000097u, 0x0003003eu, 0x0000032cu, 0x00000356u, 0x00040072u, 0x00000006u, 0x0000035bu, 0x00000319u, 0x00050084u, 0x00000006u, 0x0000035du, 0x0000035bu, 0x00000241u, 0x00050050u, 0x00000022u, 0x0000035eu, 0x0000035du, 0x0000035du, 0x00050080u, 0x00000022u, 0x0000035fu, 0x0000035eu, 0x00000159u, 0x00050050u, 0x00000022u, 0x00000361u, 0x00000343u, 0x00000343u, 0x00050050u, 0x00000022u, 0x00000363u, 0x0000034bu, 0x0000034bu, 0x0008000cu, 0x00000022u, 0x00000364u, 0x00000001u, 0x0000002du, 0x0000035fu, 0x00000361u, 0x00000363u, 0x00050051u, 0x00000006u, 0x00000365u, 0x00000364u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000366u, 0x00000364u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000367u, 0x00000343u, 0x0000034bu, 0x00000365u, 0x00000366u, 0x0003003eu, 0x0000032du, 0x00000367u, 0x000e0050u, 0x0000001eu, 0x00000710u, 0x00000311u, 0x00000313u, 0x00000315u, 0x00000317u, 0x00000319u, 0x0000031bu, 0x0000031du, 0x0000031fu, 0x00000321u, 0x00000323u, 0x00000623u, 0x0003003eu, 0x00000672u, 0x00000311u, 0x0003003eu, 0x00000673u, 0x00000313u, 0x0003003eu, 0x00000674u, 0x00000315u, 0x0003003eu, 0x00000675u, 0x00000317u, 0x0003003eu, 0x00000676u, 0x00000319u, 0x0003003eu, 0x00000677u, 0x0000031bu, 0x0003003eu, 0x00000678u, 0x0000031du, 0x0003003eu, 0x00000679u, 0x0000031fu, 0x0003003eu, 0x00000330u, 0x00000367u, 0x0003003eu, 0x00000331u, 0x00000356u, 0x0003003eu, 0x00000332u, 0x00000241u, 0x000500c7u, 0x00000006u, 0x000003a2u, 0x00000341u, 0x00000083u, 0x0003003eu, 0x0000037fu, 0x000003a2u, 0x0003003eu, 0x00000380u, 0x0000035bu, 0x00050084u, 0x00000006u, 0x000003a8u, 0x000003a2u, 0x00000241u, 0x0003003eu, 0x0000037fu, 0x000003a8u, 0x0003003eu, 0x00000380u, 0x0000035du, 0x00070050u, 0x00000007u, 0x000003aeu, 0x000003a8u, 0x000003a8u, 0x000003a8u, 0x000003a8u, 0x00050082u, 0x00000007u, 0x000003afu, 0x00000367u, 0x000003aeu, 0x00050084u, 0x00000006u, 0x000003b3u, 0x00000241u, 0x00000311u, 0x0003003eu, 0x00000383u, 0x000003afu, 0x0003003eu, 0x00000384u, 0x0000031bu, 0x0003003eu, 0x00000385u, 0x000003b3u, 0x00070050u, 0x00000007u, 0x0000041bu, 0x0000031bu, 0x0000031bu, 0x0000031bu, 0x0000031bu, 0x00050098u, 0x00000064u, 0x0000041cu, 0x000003afu, 0x0000041bu, 0x00050051u, 0x00000007u, 0x0000041du, 0x0000041cu, 0x00000000u, 0x0003003eu, 0x00000416u, 0x0000041du, 0x00050051u, 0x00000007u, 0x0000041eu, 0x0000041cu, 0x00000001u, 0x0003003eu, 0x00000415u, 0x0000041eu, 0x0004007cu, 0x00000069u, 0x00000420u, 0x0000041du, 0x0004007cu, 0x00000032u, 0x00000422u, 0x000003b3u, 0x00070050u, 0x00000069u, 0x00000423u, 0x00000422u, 0x00000422u, 0x00000422u, 0x00000422u, 0x00050095u, 0x00000070u, 0x00000424u, 0x00000420u, 0x00000423u, 0x00050051u, 0x00000069u, 0x00000425u, 0x00000424u, 0x00000001u, 0x0003003eu, 0x00000417u, 0x00000425u, 0x00050051u, 0x00000069u, 0x00000426u, 0x00000424u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000427u, 0x00000426u, 0x0003003eu, 0x00000416u, 0x00000427u, 0x0004007cu, 0x00000007u, 0x00000429u, 0x00000425u, 0x00050080u, 0x00000007u, 0x0000042bu, 0x0000041eu, 0x00000429u, 0x0003003eu, 0x00000415u, 0x0000042bu, 0x0003003eu, 0x00000386u, 0x0000042bu, 0x0003003eu, 0x00000418u, 0x00000427u, 0x0003003eu, 0x00000382u, 0x0000042bu, 0x0003003eu, 0x00000381u, 0x00000427u, 0x00050084u, 0x00000006u, 0x000003bfu, 0x00000241u, 0x00000313u, 0x0003003eu, 0x00000389u, 0x000003afu, 0x0003003eu, 0x0000038au, 0x0000031du, 0x0003003eu, 0x0000038bu, 0x000003bfu, 0x00070050u, 0x00000007u, 0x00000434u, 0x0000031du, 0x0000031du, 0x0000031du, 0x0000031du, 0x00050098u, 0x00000064u, 0x00000435u, 0x000003afu, 0x00000434u, 0x00050051u, 0x00000007u, 0x00000436u, 0x00000435u, 0x00000000u, 0x0003003eu, 0x0000042fu, 0x00000436u, 0x00050051u, 0x00000007u, 0x00000437u, 0x00000435u, 0x00000001u, 0x0003003eu, 0x0000042eu, 0x00000437u, 0x0004007cu, 0x00000069u, 0x00000439u, 0x00000436u, 0x0004007cu, 0x00000032u, 0x0000043bu, 0x000003bfu, 0x00070050u, 0x00000069u, 0x0000043cu, 0x0000043bu, 0x0000043bu, 0x0000043bu, 0x0000043bu, 0x00050095u, 0x00000070u, 0x0000043du, 0x00000439u, 0x0000043cu, 0x00050051u, 0x00000069u, 0x0000043eu, 0x0000043du, 0x00000001u, 0x0003003eu, 0x00000430u, 0x0000043eu, 0x00050051u, 0x00000069u, 0x0000043fu, 0x0000043du, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000440u, 0x0000043fu, 0x0003003eu, 0x0000042fu, 0x00000440u, 0x0004007cu, 0x00000007u, 0x00000442u, 0x0000043eu, 0x00050080u, 0x00000007u, 0x00000444u, 0x00000437u, 0x00000442u, 0x0003003eu, 0x0000042eu, 0x00000444u, 0x0003003eu, 0x0000038cu, 0x00000444u, 0x0003003eu, 0x00000431u, 0x00000440u, 0x0003003eu, 0x00000388u, 0x00000444u, 0x0003003eu, 0x00000387u, 0x00000440u, 0x00070050u, 0x00000007u, 0x000003c6u, 0x0000035du, 0x0000035du, 0x0000035du, 0x0000035du, 0x00050082u, 0x00000007u, 0x000003c7u, 0x00000367u, 0x000003c6u, 0x00050084u, 0x00000006u, 0x000003cbu, 0x00000241u, 0x00000315u, 0x0003003eu, 0x0000038fu, 0x000003c7u, 0x0003003eu, 0x00000390u, 0x0000031fu, 0x0003003eu, 0x00000391u, 0x000003cbu, 0x00070050u, 0x00000007u, 0x0000044du, 0x0000031fu, 0x0000031fu, 0x0000031fu, 0x0000031fu, 0x00050098u, 0x00000064u, 0x0000044eu, 0x000003c7u, 0x0000044du, 0x00050051u, 0x00000007u, 0x0000044fu, 0x0000044eu, 0x00000000u, 0x0003003eu, 0x00000448u, 0x0000044fu, 0x00050051u, 0x00000007u, 0x00000450u, 0x0000044eu, 0x00000001u, 0x0003003eu, 0x00000447u, 0x00000450u, 0x0004007cu, 0x00000069u, 0x00000452u, 0x0000044fu, 0x0004007cu, 0x00000032u, 0x00000454u, 0x000003cbu, 0x00070050u, 0x00000069u, 0x00000455u, 0x00000454u, 0x00000454u, 0x00000454u, 0x00000454u, 0x00050095u, 0x00000070u, 0x00000456u, 0x00000452u, 0x00000455u, 0x00050051u, 0x00000069u, 0x00000457u, 0x00000456u, 0x00000001u, 0x0003003eu, 0x00000449u, 0x00000457u, 0x00050051u, 0x00000069u, 0x00000458u, 0x00000456u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000459u, 0x00000458u, 0x0003003eu, 0x00000448u, 0x00000459u, 0x0004007cu, 0x00000007u, 0x0000045bu, 0x00000457u, 0x00050080u, 0x00000007u, 0x0000045du, 0x00000450u, 0x0000045bu, 0x0003003eu, 0x00000447u, 0x0000045du, 0x0003003eu, 0x00000392u, 0x0000045du, 0x0003003eu, 0x0000044au, 0x00000459u, 0x0003003eu, 0x0000038eu, 0x0000045du, 0x0003003eu, 0x0000038du, 0x00000459u, 0x00050084u, 0x00000006u, 0x000003d7u, 0x00000241u, 0x0000035bu, 0x00070050u, 0x00000007u, 0x000003d8u, 0x000003d7u, 0x000003d7u, 0x000003d7u, 0x000003d7u, 0x000500b1u, 0x000000d5u, 0x000003d9u, 0x00000367u, 0x000003d8u, 0x000600a9u, 0x00000007u, 0x000003dau, 0x000003d9u, 0x00000440u, 0x00000459u, 0x0003003eu, 0x0000038du, 0x000003dau, 0x000600a9u, 0x00000007u, 0x000003e5u, 0x000003d9u, 0x00000444u, 0x0000045du, 0x0003003eu, 0x0000038eu, 0x000003e5u, 0x000500adu, 0x000000d5u, 0x000003e8u, 0x0000042bu, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000003e9u, 0x000003e8u, 0x000000e5u, 0x00000427u, 0x0003003eu, 0x00000381u, 0x000003e9u, 0x000500b1u, 0x000000d5u, 0x000003ecu, 0x0000042bu, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000003edu, 0x000003ecu, 0x000000ecu, 0x000003e9u, 0x0003003eu, 0x00000381u, 0x000003edu, 0x000500adu, 0x000000d5u, 0x000003f0u, 0x000003e5u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000003f1u, 0x000003f0u, 0x000000e5u, 0x000003dau, 0x0003003eu, 0x0000038du, 0x000003f1u, 0x000500b1u, 0x000000d5u, 0x000003f4u, 0x000003e5u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000003f5u, 0x000003f4u, 0x000000ecu, 0x000003f1u, 0x0003003eu, 0x0000038du, 0x000003f5u, 0x0003003eu, 0x00000394u, 0x000003edu, 0x000500c3u, 0x00000007u, 0x00000463u, 0x000003edu, 0x000007b8u, 0x0003003eu, 0x00000460u, 0x00000463u, 0x0003003eu, 0x00000393u, 0x00000463u, 0x0003003eu, 0x00000396u, 0x000003f5u, 0x000500c3u, 0x00000007u, 0x00000467u, 0x000003f5u, 0x000007b8u, 0x0003003eu, 0x00000464u, 0x00000467u, 0x0003003eu, 0x00000395u, 0x00000467u, 0x000300f7u, 0x000003fbu, 0x00000000u, 0x000400fau, 0x00000356u, 0x000003fcu, 0x000003fdu, 0x000200f8u, 0x000003fcu, 0x0003003eu, 0x00000397u, 0x00000463u, 0x0003003eu, 0x00000398u, 0x00000467u, 0x000200f9u, 0x000003fbu, 0x000200f8u, 0x000003fdu, 0x0003003eu, 0x00000397u, 0x00000467u, 0x0003003eu, 0x00000398u, 0x00000463u, 0x000200f9u, 0x000003fbu, 0x000200f8u, 0x000003fbu, 0x00070050u, 0x000000d5u, 0x000007b9u, 0x00000356u, 0x00000356u, 0x00000356u, 0x00000356u, 0x000600a9u, 0x00000007u, 0x000007bau, 0x000007b9u, 0x00000467u, 0x00000463u, 0x000600a9u, 0x00000007u, 0x000007bcu, 0x000007b9u, 0x00000463u, 0x00000467u, 0x0006000cu, 0x00000007u, 0x00000403u, 0x00000001u, 0x00000005u, 0x000007bcu, 0x0006000cu, 0x00000007u, 0x00000405u, 0x00000001u, 0x00000005u, 0x000007bau, 0x0007000cu, 0x00000007u, 0x00000406u, 0x00000001u, 0x0000002au, 0x00000403u, 0x00000405u, 0x0003003eu, 0x0000039au, 0x00000406u, 0x0007004fu, 0x00000022u, 0x0000046bu, 0x00000406u, 0x00000406u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x0000046du, 0x00000406u, 0x00000406u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000046eu, 0x00000001u, 0x0000002au, 0x0000046bu, 0x0000046du, 0x0003003eu, 0x00000468u, 0x0000046eu, 0x00050041u, 0x00000014u, 0x0000046fu, 0x00000468u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000470u, 0x0000046fu, 0x00050041u, 0x00000014u, 0x00000471u, 0x00000468u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000472u, 0x00000471u, 0x0007000cu, 0x00000006u, 0x00000473u, 0x00000001u, 0x0000002au, 0x00000470u, 0x00000472u, 0x0003003eu, 0x00000469u, 0x00000473u, 0x0003003eu, 0x00000399u, 0x00000473u, 0x00050084u, 0x00000006u, 0x0000040au, 0x00000115u, 0x00000241u, 0x000500b3u, 0x00000020u, 0x0000040bu, 0x00000473u, 0x0000040au, 0x000300f7u, 0x0000040cu, 0x00000000u, 0x000400fau, 0x0000040bu, 0x0000040du, 0x0000040eu, 0x000200f8u, 0x0000040du, 0x0003003eu, 0x0000039cu, 0x000007bcu, 0x0007004fu, 0x00000022u, 0x00000477u, 0x000007bcu, 0x000007bcu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000479u, 0x000007bcu, 0x000007bcu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x0000047au, 0x00000001u, 0x00000027u, 0x00000477u, 0x00000479u, 0x0003003eu, 0x00000474u, 0x0000047au, 0x00050041u, 0x00000014u, 0x0000047bu, 0x00000474u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000047cu, 0x0000047bu, 0x00050041u, 0x00000014u, 0x0000047du, 0x00000474u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000047eu, 0x0000047du, 0x0007000cu, 0x00000006u, 0x0000047fu, 0x00000001u, 0x00000027u, 0x0000047cu, 0x0000047eu, 0x0003003eu, 0x00000475u, 0x0000047fu, 0x0003003eu, 0x0000039du, 0x000007bau, 0x0007004fu, 0x00000022u, 0x00000483u, 0x000007bau, 0x000007bau, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000485u, 0x000007bau, 0x000007bau, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000486u, 0x00000001u, 0x0000002au, 0x00000483u, 0x00000485u, 0x0003003eu, 0x00000480u, 0x00000486u, 0x00050041u, 0x00000014u, 0x00000487u, 0x00000480u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000488u, 0x00000487u, 0x00050041u, 0x00000014u, 0x00000489u, 0x00000480u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000048au, 0x00000489u, 0x0007000cu, 0x00000006u, 0x0000048bu, 0x00000001u, 0x0000002au, 0x00000488u, 0x0000048au, 0x0003003eu, 0x00000481u, 0x0000048bu, 0x00050050u, 0x00000022u, 0x00000413u, 0x0000047fu, 0x0000048bu, 0x0003003eu, 0x0000039bu, 0x00000413u, 0x000200f9u, 0x0000040cu, 0x000200f8u, 0x0000040eu, 0x0003003eu, 0x0000039bu, 0x00000124u, 0x000200f9u, 0x0000040cu, 0x000200f8u, 0x0000040cu, 0x000700f5u, 0x00000022u, 0x00000774u, 0x00000413u, 0x0000040du, 0x00000124u, 0x0000040eu, 0x0003003eu, 0x0000039eu, 0x00000774u, 0x0003003eu, 0x0000032eu, 0x00000774u, 0x00050041u, 0x00000014u, 0x0000036du, 0x0000032eu, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000036eu, 0x0000036du, 0x00050041u, 0x00000014u, 0x0000036fu, 0x00000264u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000370u, 0x0000036fu, 0x0007000cu, 0x00000006u, 0x00000371u, 0x00000001u, 0x0000002au, 0x0000036eu, 0x00000370u, 0x0003003eu, 0x0000036du, 0x00000371u, 0x00050041u, 0x00000014u, 0x00000373u, 0x0000032eu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000374u, 0x00000373u, 0x00050041u, 0x00000014u, 0x00000375u, 0x00000266u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000376u, 0x00000375u, 0x0007000cu, 0x00000006u, 0x00000377u, 0x00000001u, 0x00000027u, 0x00000374u, 0x00000376u, 0x0003003eu, 0x00000373u, 0x00000377u, 0x0004003du, 0x00000006u, 0x0000037au, 0x0000036du, 0x0004003du, 0x00000006u, 0x0000037cu, 0x00000373u, 0x000500b3u, 0x00000020u, 0x0000037du, 0x0000037au, 0x0000037cu, 0x0003003eu, 0x00000328u, 0x000002fdu, 0x0003003eu, 0x00000329u, 0x0000037du, 0x000200f9u, 0x00000334u, 0x000200f8u, 0x00000334u, 0x000700f5u, 0x00000020u, 0x00000775u, 0x00000146u, 0x00000350u, 0x0000037du, 0x0000040cu, 0x0003003eu, 0x00000333u, 0x00000775u, 0x0003003eu, 0x00000228u, 0x00000775u, 0x000200f9u, 0x00000239u, 0x000200f8u, 0x00000239u, 0x000700f5u, 0x00000020u, 0x00000777u, 0x00000146u, 0x0000022cu, 0x00000775u, 0x00000334u, 0x000200f9u, 0x0000022du, 0x000200f8u, 0x0000022du, 0x000700f5u, 0x00000020u, 0x00000776u, 0x00000146u, 0x00000005u, 0x00000777u, 0x00000239u, 0x00050153u, 0x00000069u, 0x0000026cu, 0x000001b5u, 0x00000776u, 0x00050051u, 0x00000032u, 0x0000026du, 0x0000026cu, 0x00000000u, 0x0003003eu, 0x0000026au, 0x0000026du, 0x0003003eu, 0x0000026eu, 0x00000049u, 0x000200f9u, 0x0000026fu, 0x000200f8u, 0x0000026fu, 0x000700f5u, 0x00000032u, 0x00000785u, 0x00000049u, 0x0000022du, 0x000007a9u, 0x00000272u, 0x000700f5u, 0x00000032u, 0x00000778u, 0x0000026du, 0x0000022du, 0x0000027du, 0x00000272u, 0x000500abu, 0x00000020u, 0x00000275u, 0x00000778u, 0x00000049u, 0x000400f6u, 0x00000271u, 0x00000272u, 0x00000000u, 0x000400fau, 0x00000275u, 0x00000270u, 0x00000271u, 0x000200f8u, 0x00000270u, 0x0006000cu, 0x00000006u, 0x00000278u, 0x00000001u, 0x00000049u, 0x00000778u, 0x0003003eu, 0x00000276u, 0x00000278u, 0x000500c4u, 0x00000032u, 0x0000027au, 0x0000004cu, 0x00000278u, 0x000400c8u, 0x00000032u, 0x0000027bu, 0x0000027au, 0x000500c7u, 0x00000032u, 0x0000027du, 0x00000778u, 0x0000027bu, 0x0003003eu, 0x0000026au, 0x0000027du, 0x00050084u, 0x00000006u, 0x00000280u, 0x000001c2u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000282u, 0x00000280u, 0x00000278u, 0x0004007cu, 0x00000032u, 0x00000283u, 0x00000282u, 0x0003003eu, 0x0000027eu, 0x00000283u, 0x0003003eu, 0x00000285u, 0x00000283u, 0x00060041u, 0x000001abu, 0x0000048fu, 0x000001a9u, 0x00000097u, 0x00000283u, 0x0004003du, 0x00000007u, 0x00000490u, 0x0000048fu, 0x0003003eu, 0x0000048cu, 0x00000490u, 0x00050041u, 0x00000014u, 0x00000491u, 0x0000048cu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000492u, 0x00000491u, 0x00050041u, 0x00000014u, 0x00000493u, 0x0000048cu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000494u, 0x00000493u, 0x00050041u, 0x00000014u, 0x00000495u, 0x0000048cu, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000496u, 0x00000495u, 0x00050041u, 0x00000014u, 0x00000497u, 0x0000048cu, 0x000001b5u, 0x0004003du, 0x00000006u, 0x00000498u, 0x00000497u, 0x00070050u, 0x00000038u, 0x00000499u, 0x00000492u, 0x00000494u, 0x00000496u, 0x00000498u, 0x0003003eu, 0x00000665u, 0x00000492u, 0x0003003eu, 0x00000666u, 0x00000494u, 0x0003003eu, 0x00000667u, 0x00000496u, 0x0003003eu, 0x00000668u, 0x00000498u, 0x0003003eu, 0x00000711u, 0x00000492u, 0x0003003eu, 0x00000712u, 0x00000494u, 0x0003003eu, 0x00000713u, 0x00000496u, 0x0003003eu, 0x00000714u, 0x00000498u, 0x00050050u, 0x00000022u, 0x0000028eu, 0x00000492u, 0x00000494u, 0x000500c3u, 0x00000022u, 0x00000290u, 0x0000028eu, 0x000007b7u, 0x00050050u, 0x00000022u, 0x00000291u, 0x00000241u, 0x00000241u, 0x00050084u, 0x00000022u, 0x00000292u, 0x00000291u, 0x00000290u, 0x0007000cu, 0x00000022u, 0x00000293u, 0x00000001u, 0x0000002au, 0x00000219u, 0x00000292u, 0x0003003eu, 0x00000288u, 0x00000293u, 0x00050080u, 0x00000006u, 0x00000298u, 0x00000496u, 0x0000007eu, 0x00050080u, 0x00000006u, 0x0000029bu, 0x00000498u, 0x0000007eu, 0x00050050u, 0x00000022u, 0x0000029cu, 0x00000298u, 0x0000029bu, 0x000500c3u, 0x00000022u, 0x0000029eu, 0x0000029cu, 0x000007b7u, 0x00050084u, 0x00000022u, 0x000002a0u, 0x00000291u, 0x0000029eu, 0x00050082u, 0x00000022u, 0x000002a2u, 0x000002a0u, 0x000007b6u, 0x0007000cu, 0x00000022u, 0x000002a3u, 0x00000001u, 0x00000027u, 0x00000223u, 0x000002a2u, 0x0003003eu, 0x00000294u, 0x000002a3u, 0x0003003eu, 0x000002a5u, 0x00000283u, 0x00060041u, 0x00000187u, 0x0000049du, 0x00000185u, 0x00000097u, 0x00000283u, 0x0004003du, 0x00000181u, 0x0000049eu, 0x0000049du, 0x00050051u, 0x00000006u, 0x0000049fu, 0x0000049eu, 0x00000000u, 0x0003003eu, 0x0000062cu, 0x0000049fu, 0x00050051u, 0x00000006u, 0x000004a1u, 0x0000049eu, 0x00000001u, 0x0003003eu, 0x0000062du, 0x000004a1u, 0x00050051u, 0x00000006u, 0x000004a3u, 0x0000049eu, 0x00000002u, 0x0003003eu, 0x0000062eu, 0x000004a3u, 0x00050051u, 0x0000001cu, 0x000004a5u, 0x0000049eu, 0x00000003u, 0x0003003eu, 0x0000062fu, 0x000004a5u, 0x00050051u, 0x0000001cu, 0x000004a7u, 0x0000049eu, 0x00000004u, 0x0003003eu, 0x00000630u, 0x000004a7u, 0x00050051u, 0x00000006u, 0x000004a9u, 0x0000049eu, 0x00000005u, 0x0003003eu, 0x00000631u, 0x000004a9u, 0x00050051u, 0x00000006u, 0x000004abu, 0x0000049eu, 0x00000006u, 0x0003003eu, 0x00000632u, 0x000004abu, 0x00050051u, 0x00000006u, 0x000004adu, 0x0000049eu, 0x00000007u, 0x0003003eu, 0x00000633u, 0x000004adu, 0x00050051u, 0x0000001cu, 0x000004afu, 0x0000049eu, 0x00000008u, 0x0003003eu, 0x00000634u, 0x000004afu, 0x00050051u, 0x0000001du, 0x000004b1u, 0x0000049eu, 0x00000009u, 0x0003003eu, 0x00000635u, 0x000004b1u, 0x00050051u, 0x0000001du, 0x000004b3u, 0x0000049eu, 0x0000000au, 0x0003003eu, 0x00000636u, 0x000004b3u, 0x000e0050u, 0x0000001eu, 0x00000642u, 0x0000049fu, 0x000004a1u, 0x000004a3u, 0x000004a5u, 0x000004a7u, 0x000004a9u, 0x000004abu, 0x000004adu, 0x000004afu, 0x000004b1u, 0x000004b3u, 0x0003003eu, 0x00000643u, 0x0000049fu, 0x0003003eu, 0x00000644u, 0x000004a1u, 0x0003003eu, 0x00000645u, 0x000004a3u, 0x0003003eu, 0x00000646u, 0x000004a5u, 0x0003003eu, 0x00000647u, 0x000004a7u, 0x0003003eu, 0x00000648u, 0x000004a9u, 0x0003003eu, 0x00000649u, 0x000004abu, 0x0003003eu, 0x0000064au, 0x000004adu, 0x0003003eu, 0x0000064bu, 0x000004afu, 0x0003003eu, 0x0000064cu, 0x000004b1u, 0x0003003eu, 0x0000064du, 0x000004b3u, 0x0003003eu, 0x00000719u, 0x0000049fu, 0x0003003eu, 0x0000071au, 0x000004a1u, 0x0003003eu, 0x0000071bu, 0x000004a3u, 0x0003003eu, 0x0000071cu, 0x000004a5u, 0x0003003eu, 0x0000071du, 0x000004a7u, 0x0003003eu, 0x0000071eu, 0x000004a9u, 0x0003003eu, 0x0000071fu, 0x000004abu, 0x0003003eu, 0x00000720u, 0x000004adu, 0x0003003eu, 0x00000721u, 0x000004afu, 0x0003003eu, 0x00000722u, 0x000004b1u, 0x0003003eu, 0x00000723u, 0x000004b3u, 0x0003003eu, 0x0000073bu, 0x0000049fu, 0x0003003eu, 0x0000073cu, 0x000004a1u, 0x0003003eu, 0x0000073du, 0x000004a3u, 0x0003003eu, 0x0000073eu, 0x000004a5u, 0x0003003eu, 0x0000073fu, 0x000004a7u, 0x0003003eu, 0x00000740u, 0x000004a9u, 0x0003003eu, 0x00000741u, 0x000004abu, 0x0003003eu, 0x00000742u, 0x000004adu, 0x0003003eu, 0x00000743u, 0x000004afu, 0x0003003eu, 0x00000744u, 0x000004b1u, 0x0003003eu, 0x000002aau, 0x00000293u, 0x0003003eu, 0x000002acu, 0x000002a3u, 0x0003003eu, 0x000002aeu, 0x00000241u, 0x0003003eu, 0x000004b6u, 0x00000146u, 0x000300f7u, 0x000004c2u, 0x00000000u, 0x000300fbu, 0x00000049u, 0x000004c3u, 0x000200f8u, 0x000004c3u, 0x00050041u, 0x00000014u, 0x000004c4u, 0x000002aau, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000004c5u, 0x000004c4u, 0x00050084u, 0x00000006u, 0x000004c6u, 0x000004c5u, 0x00000086u, 0x0003003eu, 0x000004b8u, 0x000004c6u, 0x00050041u, 0x00000014u, 0x000004c7u, 0x000002acu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000004c8u, 0x000004c7u, 0x00050084u, 0x00000006u, 0x000004c9u, 0x000004c8u, 0x00000086u, 0x00050080u, 0x00000006u, 0x000004cau, 0x000004c9u, 0x0000007eu, 0x0003003eu, 0x000004b9u, 0x000004cau, 0x00040072u, 0x00000006u, 0x000004cfu, 0x000004a5u, 0x00050084u, 0x00000006u, 0x000004d0u, 0x00000241u, 0x000004cfu, 0x0007000cu, 0x00000006u, 0x000004d1u, 0x00000001u, 0x0000002au, 0x000004c6u, 0x000004d0u, 0x0003003eu, 0x000004b8u, 0x000004d1u, 0x00040072u, 0x00000006u, 0x000004d6u, 0x000004afu, 0x00050084u, 0x00000006u, 0x000004d7u, 0x00000241u, 0x000004d6u, 0x00050082u, 0x00000006u, 0x000004d8u, 0x000004d7u, 0x000000abu, 0x0007000cu, 0x00000006u, 0x000004d9u, 0x00000001u, 0x00000027u, 0x000004cau, 0x000004d8u, 0x0003003eu, 0x000004b9u, 0x000004d9u, 0x000500b1u, 0x00000020u, 0x000004dcu, 0x000004d9u, 0x000004d1u, 0x000300f7u, 0x000004ddu, 0x00000000u, 0x000400fau, 0x000004dcu, 0x000004deu, 0x000004ddu, 0x000200f8u, 0x000004deu, 0x0003003eu, 0x000004b6u, 0x000002fdu, 0x0003003eu, 0x000004b7u, 0x00000146u, 0x000200f9u, 0x000004c2u, 0x000200f8u, 0x000004ddu, 0x00040071u, 0x00000032u, 0x000004e1u, 0x000004b1u, 0x0004007cu, 0x00000006u, 0x000004e2u, 0x000004e1u, 0x000500c7u, 0x00000006u, 0x000004e3u, 0x000004e2u, 0x000000abu, 0x000500abu, 0x00000020u, 0x000004e4u, 0x000004e3u, 0x00000097u, 0x0003003eu, 0x000004bau, 0x000004e4u, 0x00040072u, 0x00000006u, 0x000004e9u, 0x000004a7u, 0x00050084u, 0x00000006u, 0x000004ebu, 0x000004e9u, 0x00000241u, 0x00050050u, 0x00000022u, 0x000004ecu, 0x000004ebu, 0x000004ebu, 0x00050080u, 0x00000022u, 0x000004edu, 0x000004ecu, 0x00000159u, 0x00050050u, 0x00000022u, 0x000004efu, 0x000004d1u, 0x000004d1u, 0x00050050u, 0x00000022u, 0x000004f1u, 0x000004d9u, 0x000004d9u, 0x0008000cu, 0x00000022u, 0x000004f2u, 0x00000001u, 0x0000002du, 0x000004edu, 0x000004efu, 0x000004f1u, 0x00050051u, 0x00000006u, 0x000004f3u, 0x000004f2u, 0x00000000u, 0x00050051u, 0x00000006u, 0x000004f4u, 0x000004f2u, 0x00000001u, 0x00070050u, 0x00000007u, 0x000004f5u, 0x000004d1u, 0x000004d9u, 0x000004f3u, 0x000004f4u, 0x0003003eu, 0x000004bbu, 0x000004f5u, 0x000e0050u, 0x0000001eu, 0x00000759u, 0x0000049fu, 0x000004a1u, 0x000004a3u, 0x000004a5u, 0x000004a7u, 0x000004a9u, 0x000004abu, 0x000004adu, 0x000004afu, 0x000004b1u, 0x00000623u, 0x0003003eu, 0x0000061au, 0x0000049fu, 0x0003003eu, 0x0000061bu, 0x000004a1u, 0x0003003eu, 0x0000061cu, 0x000004a3u, 0x0003003eu, 0x0000061du, 0x000004a5u, 0x0003003eu, 0x0000061eu, 0x000004a7u, 0x0003003eu, 0x0000061fu, 0x000004a9u, 0x0003003eu, 0x00000620u, 0x000004abu, 0x0003003eu, 0x00000621u, 0x000004adu, 0x0003003eu, 0x000004beu, 0x000004f5u, 0x0003003eu, 0x000004bfu, 0x000004e4u, 0x0003003eu, 0x000004c0u, 0x00000241u, 0x000500c7u, 0x00000006u, 0x00000530u, 0x000004cfu, 0x00000083u, 0x0003003eu, 0x0000050du, 0x00000530u, 0x0003003eu, 0x0000050eu, 0x000004e9u, 0x00050084u, 0x00000006u, 0x00000536u, 0x00000530u, 0x00000241u, 0x0003003eu, 0x0000050du, 0x00000536u, 0x0003003eu, 0x0000050eu, 0x000004ebu, 0x00070050u, 0x00000007u, 0x0000053cu, 0x00000536u, 0x00000536u, 0x00000536u, 0x00000536u, 0x00050082u, 0x00000007u, 0x0000053du, 0x000004f5u, 0x0000053cu, 0x00050084u, 0x00000006u, 0x00000541u, 0x00000241u, 0x0000049fu, 0x0003003eu, 0x00000511u, 0x0000053du, 0x0003003eu, 0x00000512u, 0x000004a9u, 0x0003003eu, 0x00000513u, 0x00000541u, 0x00070050u, 0x00000007u, 0x000005a9u, 0x000004a9u, 0x000004a9u, 0x000004a9u, 0x000004a9u, 0x00050098u, 0x00000064u, 0x000005aau, 0x0000053du, 0x000005a9u, 0x00050051u, 0x00000007u, 0x000005abu, 0x000005aau, 0x00000000u, 0x0003003eu, 0x000005a4u, 0x000005abu, 0x00050051u, 0x00000007u, 0x000005acu, 0x000005aau, 0x00000001u, 0x0003003eu, 0x000005a3u, 0x000005acu, 0x0004007cu, 0x00000069u, 0x000005aeu, 0x000005abu, 0x0004007cu, 0x00000032u, 0x000005b0u, 0x00000541u, 0x00070050u, 0x00000069u, 0x000005b1u, 0x000005b0u, 0x000005b0u, 0x000005b0u, 0x000005b0u, 0x00050095u, 0x00000070u, 0x000005b2u, 0x000005aeu, 0x000005b1u, 0x00050051u, 0x00000069u, 0x000005b3u, 0x000005b2u, 0x00000001u, 0x0003003eu, 0x000005a5u, 0x000005b3u, 0x00050051u, 0x00000069u, 0x000005b4u, 0x000005b2u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005b5u, 0x000005b4u, 0x0003003eu, 0x000005a4u, 0x000005b5u, 0x0004007cu, 0x00000007u, 0x000005b7u, 0x000005b3u, 0x00050080u, 0x00000007u, 0x000005b9u, 0x000005acu, 0x000005b7u, 0x0003003eu, 0x000005a3u, 0x000005b9u, 0x0003003eu, 0x00000514u, 0x000005b9u, 0x0003003eu, 0x000005a6u, 0x000005b5u, 0x0003003eu, 0x00000510u, 0x000005b9u, 0x0003003eu, 0x0000050fu, 0x000005b5u, 0x00050084u, 0x00000006u, 0x0000054du, 0x00000241u, 0x000004a1u, 0x0003003eu, 0x00000517u, 0x0000053du, 0x0003003eu, 0x00000518u, 0x000004abu, 0x0003003eu, 0x00000519u, 0x0000054du, 0x00070050u, 0x00000007u, 0x000005c2u, 0x000004abu, 0x000004abu, 0x000004abu, 0x000004abu, 0x00050098u, 0x00000064u, 0x000005c3u, 0x0000053du, 0x000005c2u, 0x00050051u, 0x00000007u, 0x000005c4u, 0x000005c3u, 0x00000000u, 0x0003003eu, 0x000005bdu, 0x000005c4u, 0x00050051u, 0x00000007u, 0x000005c5u, 0x000005c3u, 0x00000001u, 0x0003003eu, 0x000005bcu, 0x000005c5u, 0x0004007cu, 0x00000069u, 0x000005c7u, 0x000005c4u, 0x0004007cu, 0x00000032u, 0x000005c9u, 0x0000054du, 0x00070050u, 0x00000069u, 0x000005cau, 0x000005c9u, 0x000005c9u, 0x000005c9u, 0x000005c9u, 0x00050095u, 0x00000070u, 0x000005cbu, 0x000005c7u, 0x000005cau, 0x00050051u, 0x00000069u, 0x000005ccu, 0x000005cbu, 0x00000001u, 0x0003003eu, 0x000005beu, 0x000005ccu, 0x00050051u, 0x00000069u, 0x000005cdu, 0x000005cbu, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005ceu, 0x000005cdu, 0x0003003eu, 0x000005bdu, 0x000005ceu, 0x0004007cu, 0x00000007u, 0x000005d0u, 0x000005ccu, 0x00050080u, 0x00000007u, 0x000005d2u, 0x000005c5u, 0x000005d0u, 0x0003003eu, 0x000005bcu, 0x000005d2u, 0x0003003eu, 0x0000051au, 0x000005d2u, 0x0003003eu, 0x000005bfu, 0x000005ceu, 0x0003003eu, 0x00000516u, 0x000005d2u, 0x0003003eu, 0x00000515u, 0x000005ceu, 0x00070050u, 0x00000007u, 0x00000554u, 0x000004ebu, 0x000004ebu, 0x000004ebu, 0x000004ebu, 0x00050082u, 0x00000007u, 0x00000555u, 0x000004f5u, 0x00000554u, 0x00050084u, 0x00000006u, 0x00000559u, 0x00000241u, 0x000004a3u, 0x0003003eu, 0x0000051du, 0x00000555u, 0x0003003eu, 0x0000051eu, 0x000004adu, 0x0003003eu, 0x0000051fu, 0x00000559u, 0x00070050u, 0x00000007u, 0x000005dbu, 0x000004adu, 0x000004adu, 0x000004adu, 0x000004adu, 0x00050098u, 0x00000064u, 0x000005dcu, 0x00000555u, 0x000005dbu, 0x00050051u, 0x00000007u, 0x000005ddu, 0x000005dcu, 0x00000000u, 0x0003003eu, 0x000005d6u, 0x000005ddu, 0x00050051u, 0x00000007u, 0x000005deu, 0x000005dcu, 0x00000001u, 0x0003003eu, 0x000005d5u, 0x000005deu, 0x0004007cu, 0x00000069u, 0x000005e0u, 0x000005ddu, 0x0004007cu, 0x00000032u, 0x000005e2u, 0x00000559u, 0x00070050u, 0x00000069u, 0x000005e3u, 0x000005e2u, 0x000005e2u, 0x000005e2u, 0x000005e2u, 0x00050095u, 0x00000070u, 0x000005e4u, 0x000005e0u, 0x000005e3u, 0x00050051u, 0x00000069u, 0x000005e5u, 0x000005e4u, 0x00000001u, 0x0003003eu, 0x000005d7u, 0x000005e5u, 0x00050051u, 0x00000069u, 0x000005e6u, 0x000005e4u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x000005e7u, 0x000005e6u, 0x0003003eu, 0x000005d6u, 0x000005e7u, 0x0004007cu, 0x00000007u, 0x000005e9u, 0x000005e5u, 0x00050080u, 0x00000007u, 0x000005ebu, 0x000005deu, 0x000005e9u, 0x0003003eu, 0x000005d5u, 0x000005ebu, 0x0003003eu, 0x00000520u, 0x000005ebu, 0x0003003eu, 0x000005d8u, 0x000005e7u, 0x0003003eu, 0x0000051cu, 0x000005ebu, 0x0003003eu, 0x0000051bu, 0x000005e7u, 0x00050084u, 0x00000006u, 0x00000565u, 0x00000241u, 0x000004e9u, 0x00070050u, 0x00000007u, 0x00000566u, 0x00000565u, 0x00000565u, 0x00000565u, 0x00000565u, 0x000500b1u, 0x000000d5u, 0x00000567u, 0x000004f5u, 0x00000566u, 0x000600a9u, 0x00000007u, 0x00000568u, 0x00000567u, 0x000005ceu, 0x000005e7u, 0x0003003eu, 0x0000051bu, 0x00000568u, 0x000600a9u, 0x00000007u, 0x00000573u, 0x00000567u, 0x000005d2u, 0x000005ebu, 0x0003003eu, 0x0000051cu, 0x00000573u, 0x000500adu, 0x000000d5u, 0x00000576u, 0x000005b9u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x00000577u, 0x00000576u, 0x000000e5u, 0x000005b5u, 0x0003003eu, 0x0000050fu, 0x00000577u, 0x000500b1u, 0x000000d5u, 0x0000057au, 0x000005b9u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x0000057bu, 0x0000057au, 0x000000ecu, 0x00000577u, 0x0003003eu, 0x0000050fu, 0x0000057bu, 0x000500adu, 0x000000d5u, 0x0000057eu, 0x00000573u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x0000057fu, 0x0000057eu, 0x000000e5u, 0x00000568u, 0x0003003eu, 0x0000051bu, 0x0000057fu, 0x000500b1u, 0x000000d5u, 0x00000582u, 0x00000573u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x00000583u, 0x00000582u, 0x000000ecu, 0x0000057fu, 0x0003003eu, 0x0000051bu, 0x00000583u, 0x0003003eu, 0x00000522u, 0x0000057bu, 0x000500c3u, 0x00000007u, 0x000005f1u, 0x0000057bu, 0x000007b8u, 0x0003003eu, 0x000005eeu, 0x000005f1u, 0x0003003eu, 0x00000521u, 0x000005f1u, 0x0003003eu, 0x00000524u, 0x00000583u, 0x000500c3u, 0x00000007u, 0x000005f5u, 0x00000583u, 0x000007b8u, 0x0003003eu, 0x000005f2u, 0x000005f5u, 0x0003003eu, 0x00000523u, 0x000005f5u, 0x000300f7u, 0x00000589u, 0x00000000u, 0x000400fau, 0x000004e4u, 0x0000058au, 0x0000058bu, 0x000200f8u, 0x0000058au, 0x0003003eu, 0x00000525u, 0x000005f1u, 0x0003003eu, 0x00000526u, 0x000005f5u, 0x000200f9u, 0x00000589u, 0x000200f8u, 0x0000058bu, 0x0003003eu, 0x00000525u, 0x000005f5u, 0x0003003eu, 0x00000526u, 0x000005f1u, 0x000200f9u, 0x00000589u, 0x000200f8u, 0x00000589u, 0x00070050u, 0x000000d5u, 0x000007bdu, 0x000004e4u, 0x000004e4u, 0x000004e4u, 0x000004e4u, 0x000600a9u, 0x00000007u, 0x000007beu, 0x000007bdu, 0x000005f5u, 0x000005f1u, 0x000600a9u, 0x00000007u, 0x000007c0u, 0x000007bdu, 0x000005f1u, 0x000005f5u, 0x0006000cu, 0x00000007u, 0x00000591u, 0x00000001u, 0x00000005u, 0x000007c0u, 0x0006000cu, 0x00000007u, 0x00000593u, 0x00000001u, 0x00000005u, 0x000007beu, 0x0007000cu, 0x00000007u, 0x00000594u, 0x00000001u, 0x0000002au, 0x00000591u, 0x00000593u, 0x0003003eu, 0x00000528u, 0x00000594u, 0x0007004fu, 0x00000022u, 0x000005f9u, 0x00000594u, 0x00000594u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x000005fbu, 0x00000594u, 0x00000594u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x000005fcu, 0x00000001u, 0x0000002au, 0x000005f9u, 0x000005fbu, 0x0003003eu, 0x000005f6u, 0x000005fcu, 0x00050041u, 0x00000014u, 0x000005fdu, 0x000005f6u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000005feu, 0x000005fdu, 0x00050041u, 0x00000014u, 0x000005ffu, 0x000005f6u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000600u, 0x000005ffu, 0x0007000cu, 0x00000006u, 0x00000601u, 0x00000001u, 0x0000002au, 0x000005feu, 0x00000600u, 0x0003003eu, 0x000005f7u, 0x00000601u, 0x0003003eu, 0x00000527u, 0x00000601u, 0x00050084u, 0x00000006u, 0x00000598u, 0x00000115u, 0x00000241u, 0x000500b3u, 0x00000020u, 0x00000599u, 0x00000601u, 0x00000598u, 0x000300f7u, 0x0000059au, 0x00000000u, 0x000400fau, 0x00000599u, 0x0000059bu, 0x0000059cu, 0x000200f8u, 0x0000059bu, 0x0003003eu, 0x0000052au, 0x000007c0u, 0x0007004fu, 0x00000022u, 0x00000605u, 0x000007c0u, 0x000007c0u, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000607u, 0x000007c0u, 0x000007c0u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000608u, 0x00000001u, 0x00000027u, 0x00000605u, 0x00000607u, 0x0003003eu, 0x00000602u, 0x00000608u, 0x00050041u, 0x00000014u, 0x00000609u, 0x00000602u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000060au, 0x00000609u, 0x00050041u, 0x00000014u, 0x0000060bu, 0x00000602u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000060cu, 0x0000060bu, 0x0007000cu, 0x00000006u, 0x0000060du, 0x00000001u, 0x00000027u, 0x0000060au, 0x0000060cu, 0x0003003eu, 0x00000603u, 0x0000060du, 0x0003003eu, 0x0000052bu, 0x000007beu, 0x0007004fu, 0x00000022u, 0x00000611u, 0x000007beu, 0x000007beu, 0x00000000u, 0x00000001u, 0x0007004fu, 0x00000022u, 0x00000613u, 0x000007beu, 0x000007beu, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000614u, 0x00000001u, 0x0000002au, 0x00000611u, 0x00000613u, 0x0003003eu, 0x0000060eu, 0x00000614u, 0x00050041u, 0x00000014u, 0x00000615u, 0x0000060eu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000616u, 0x00000615u, 0x00050041u, 0x00000014u, 0x00000617u, 0x0000060eu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000618u, 0x00000617u, 0x0007000cu, 0x00000006u, 0x00000619u, 0x00000001u, 0x0000002au, 0x00000616u, 0x00000618u, 0x0003003eu, 0x0000060fu, 0x00000619u, 0x00050050u, 0x00000022u, 0x000005a1u, 0x0000060du, 0x00000619u, 0x0003003eu, 0x00000529u, 0x000005a1u, 0x000200f9u, 0x0000059au, 0x000200f8u, 0x0000059cu, 0x0003003eu, 0x00000529u, 0x00000124u, 0x000200f9u, 0x0000059au, 0x000200f8u, 0x0000059au, 0x000700f5u, 0x00000022u, 0x00000795u, 0x000005a1u, 0x0000059bu, 0x00000124u, 0x0000059cu, 0x0003003eu, 0x0000052cu, 0x00000795u, 0x0003003eu, 0x000004bcu, 0x00000795u, 0x00050041u, 0x00000014u, 0x000004fbu, 0x000004bcu, 0x00000049u, 0x0004003du, 0x00000006u, 0x000004fcu, 0x000004fbu, 0x00050041u, 0x00000014u, 0x000004fdu, 0x000002aau, 0x00000049u, 0x0004003du, 0x00000006u, 0x000004feu, 0x000004fdu, 0x0007000cu, 0x00000006u, 0x000004ffu, 0x00000001u, 0x0000002au, 0x000004fcu, 0x000004feu, 0x0003003eu, 0x000004fbu, 0x000004ffu, 0x00050041u, 0x00000014u, 0x00000501u, 0x000004bcu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000502u, 0x00000501u, 0x00050041u, 0x00000014u, 0x00000503u, 0x000002acu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000504u, 0x00000503u, 0x0007000cu, 0x00000006u, 0x00000505u, 0x00000001u, 0x00000027u, 0x00000502u, 0x00000504u, 0x0003003eu, 0x00000501u, 0x00000505u, 0x0004003du, 0x00000006u, 0x00000508u, 0x000004fbu, 0x0004003du, 0x00000006u, 0x0000050au, 0x00000501u, 0x000500b3u, 0x00000020u, 0x0000050bu, 0x00000508u, 0x0000050au, 0x0003003eu, 0x000004b6u, 0x000002fdu, 0x0003003eu, 0x000004b7u, 0x0000050bu, 0x000200f9u, 0x000004c2u, 0x000200f8u, 0x000004c2u, 0x000700f5u, 0x00000020u, 0x00000796u, 0x00000146u, 0x000004deu, 0x0000050bu, 0x0000059au, 0x0003003eu, 0x000004c1u, 0x00000796u, 0x000300f7u, 0x000002b1u, 0x00000000u, 0x000400fau, 0x00000796u, 0x000002b0u, 0x000002b1u, 0x000200f8u, 0x000002b0u, 0x000500c5u, 0x00000032u, 0x000002b5u, 0x00000785u, 0x0000027au, 0x0003003eu, 0x0000026eu, 0x000002b5u, 0x000200f9u, 0x000002b1u, 0x000200f8u, 0x000002b1u, 0x000700f5u, 0x00000032u, 0x000007a9u, 0x00000785u, 0x000004c2u, 0x000002b5u, 0x000002b0u, 0x000200f9u, 0x00000272u, 0x000200f8u, 0x00000272u, 0x000200f9u, 0x0000026fu, 0x000200f8u, 0x00000271u, 0x00050084u, 0x00000006u, 0x000002bdu, 0x000001f4u, 0x000002bcu, 0x00050080u, 0x00000006u, 0x000002bfu, 0x000002bdu, 0x000001c2u, 0x00060041u, 0x000002c1u, 0x000002c2u, 0x000002b9u, 0x00000097u, 0x000002bfu, 0x0003003eu, 0x000002c2u, 0x00000785u, 0x000500abu, 0x00000020u, 0x000002c4u, 0x00000785u, 0x00000049u, 0x000300f7u, 0x000002c6u, 0x00000000u, 0x000400fau, 0x000002c4u, 0x000002c5u, 0x000002d0u, 0x000200f8u, 0x000002c5u, 0x00060041u, 0x000002c1u, 0x000002ccu, 0x000002cau, 0x00000097u, 0x000001f4u, 0x000500c4u, 0x00000032u, 0x000002ceu, 0x0000004cu, 0x000001c2u, 0x000700f1u, 0x00000032u, 0x000002cfu, 0x000002ccu, 0x0000004cu, 0x00000049u, 0x000002ceu, 0x000200f9u, 0x000002c6u, 0x000200f8u, 0x000002d0u, 0x00060041u, 0x000002c1u, 0x000002d2u, 0x000002cau, 0x00000097u, 0x000001f4u, 0x000500c4u, 0x00000032u, 0x000002d4u, 0x0000004cu, 0x000001c2u, 0x000400c8u, 0x00000032u, 0x000002d5u, 0x000002d4u, 0x000700f0u, 0x00000032u, 0x000002d6u, 0x000002d2u, 0x0000004cu, 0x00000049u, 0x000002d5u, 0x000200f9u, 0x000002c6u, 0x000200f8u, 0x000002c6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000000bu, 0x00000000u, 0x00000009u, 0x00030037u, 0x00000008u, 0x0000000au, 0x000200f8u, 0x0000000cu, 0x0004003du, 0x00000007u, 0x0000003du, 0x0000000au, 0x000500c3u, 0x00000007u, 0x00000040u, 0x0000003du, 0x000007b8u, 0x000200feu, 0x00000040u, 0x00010038u, 0x00050036u, 0x00000006u, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003bu, 0x0000002au, 0x00000043u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000044u, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x00000045u, 0x00000044u, 0x00000044u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000046u, 0x0000000eu, 0x0007004fu, 0x00000022u, 0x00000047u, 0x00000046u, 0x00000046u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000048u, 0x00000001u, 0x00000027u, 0x00000045u, 0x00000047u, 0x0003003eu, 0x00000043u, 0x00000048u, 0x00050041u, 0x00000014u, 0x0000004au, 0x00000043u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000004bu, 0x0000004au, 0x00050041u, 0x00000014u, 0x0000004du, 0x00000043u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000004eu, 0x0000004du, 0x0007000cu, 0x00000006u, 0x0000004fu, 0x00000001u, 0x00000027u, 0x0000004bu, 0x0000004eu, 0x000200feu, 0x0000004fu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000012u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000008u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003bu, 0x0000002au, 0x00000052u, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000053u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x00000054u, 0x00000053u, 0x00000053u, 0x00000000u, 0x00000001u, 0x0004003du, 0x00000007u, 0x00000055u, 0x00000011u, 0x0007004fu, 0x00000022u, 0x00000056u, 0x00000055u, 0x00000055u, 0x00000002u, 0x00000003u, 0x0007000cu, 0x00000022u, 0x00000057u, 0x00000001u, 0x0000002au, 0x00000054u, 0x00000056u, 0x0003003eu, 0x00000052u, 0x00000057u, 0x00050041u, 0x00000014u, 0x00000058u, 0x00000052u, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000059u, 0x00000058u, 0x00050041u, 0x00000014u, 0x0000005au, 0x00000052u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000005bu, 0x0000005au, 0x0007000cu, 0x00000006u, 0x0000005cu, 0x00000001u, 0x0000002au, 0x00000059u, 0x0000005bu, 0x000200feu, 0x0000005cu, 0x00010038u, 0x00050036u, 0x00000007u, 0x0000001au, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000008u, 0x00000016u, 0x00030037u, 0x00000014u, 0x00000017u, 0x00030037u, 0x00000014u, 0x00000018u, 0x00030037u, 0x00000008u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000008u, 0x00000062u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000063u, 0x00000007u, 0x0004003bu, 0x0000006eu, 0x0000006fu, 0x00000007u, 0x0004003du, 0x00000007u, 0x0000005fu, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000060u, 0x00000017u, 0x00070050u, 0x00000007u, 0x00000061u, 0x00000060u, 0x00000060u, 0x00000060u, 0x00000060u, 0x00050098u, 0x00000064u, 0x00000065u, 0x0000005fu, 0x00000061u, 0x00050051u, 0x00000007u, 0x00000066u, 0x00000065u, 0x00000000u, 0x0003003eu, 0x00000063u, 0x00000066u, 0x00050051u, 0x00000007u, 0x00000067u, 0x00000065u, 0x00000001u, 0x0003003eu, 0x00000062u, 0x00000067u, 0x0004007cu, 0x00000069u, 0x0000006au, 0x00000066u, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000018u, 0x0004007cu, 0x00000032u, 0x0000006cu, 0x0000006bu, 0x00070050u, 0x00000069u, 0x0000006du, 0x0000006cu, 0x0000006cu, 0x0000006cu, 0x0000006cu, 0x00050095u, 0x00000070u, 0x00000071u, 0x0000006au, 0x0000006du, 0x00050051u, 0x00000069u, 0x00000072u, 0x00000071u, 0x00000001u, 0x0003003eu, 0x0000006fu, 0x00000072u, 0x00050051u, 0x00000069u, 0x00000073u, 0x00000071u, 0x00000000u, 0x0004007cu, 0x00000007u, 0x00000074u, 0x00000073u, 0x0003003eu, 0x00000063u, 0x00000074u, 0x0004007cu, 0x00000007u, 0x00000076u, 0x00000072u, 0x00050080u, 0x00000007u, 0x00000078u, 0x00000067u, 0x00000076u, 0x0003003eu, 0x00000062u, 0x00000078u, 0x0003003eu, 0x00000019u, 0x00000078u, 0x000200feu, 0x00000074u, 0x00010038u, 0x00050036u, 0x00000022u, 0x00000028u, 0x00000000u, 0x00000023u, 0x00030037u, 0x0000001fu, 0x00000024u, 0x00030037u, 0x00000008u, 0x00000025u, 0x00030037u, 0x00000021u, 0x00000026u, 0x00030037u, 0x00000014u, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x00000014u, 0x0000007du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000085u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000090u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000009cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000009du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000a0u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a1u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000afu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b0u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b1u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000b4u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b5u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000b8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c3u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c4u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c5u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x000000c8u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000c9u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fau, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000fbu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000ffu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000105u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000107u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000010cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000112u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x0000011bu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000011cu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x0000011fu, 0x00000007u, 0x00050041u, 0x0000007fu, 0x00000080u, 0x00000024u, 0x0000007eu, 0x0004003du, 0x0000001cu, 0x00000081u, 0x00000080u, 0x00040072u, 0x00000006u, 0x00000082u, 0x00000081u, 0x000500c7u, 0x00000006u, 0x00000084u, 0x00000082u, 0x00000083u, 0x0003003eu, 0x0000007du, 0x00000084u, 0x00050041u, 0x0000007fu, 0x00000087u, 0x00000024u, 0x00000086u, 0x0004003du, 0x0000001cu, 0x00000088u, 0x00000087u, 0x00040072u, 0x00000006u, 0x00000089u, 0x00000088u, 0x0003003eu, 0x00000085u, 0x00000089u, 0x0004003du, 0x00000006u, 0x0000008au, 0x00000027u, 0x00050084u, 0x00000006u, 0x0000008cu, 0x00000084u, 0x0000008au, 0x0003003eu, 0x0000007du, 0x0000008cu, 0x0004003du, 0x00000006u, 0x0000008du, 0x00000027u, 0x00050084u, 0x00000006u, 0x0000008fu, 0x00000089u, 0x0000008du, 0x0003003eu, 0x00000085u, 0x0000008fu, 0x0004003du, 0x00000007u, 0x00000091u, 0x00000025u, 0x00070050u, 0x00000007u, 0x00000093u, 0x0000008cu, 0x0000008cu, 0x0000008cu, 0x0000008cu, 0x00050082u, 0x00000007u, 0x00000094u, 0x00000091u, 0x00000093u, 0x0004003du, 0x00000006u, 0x00000096u, 0x00000027u, 0x00050041u, 0x00000014u, 0x00000098u, 0x00000024u, 0x00000097u, 0x0004003du, 0x00000006u, 0x00000099u, 0x00000098u, 0x00050084u, 0x00000006u, 0x0000009au, 0x00000096u, 0x00000099u, 0x0003003eu, 0x0000009cu, 0x00000094u, 0x00050041u, 0x00000014u, 0x0000009eu, 0x00000024u, 0x00000095u, 0x0004003du, 0x00000006u, 0x0000009fu, 0x0000009eu, 0x0003003eu, 0x0000009du, 0x0000009fu, 0x0003003eu, 0x000000a0u, 0x0000009au, 0x00080039u, 0x00000007u, 0x000000a2u, 0x0000001au, 0x0000009cu, 0x0000009du, 0x000000a0u, 0x000000a1u, 0x0004003du, 0x00000007u, 0x000000a3u, 0x000000a1u, 0x0003003eu, 0x0000009bu, 0x000000a3u, 0x0003003eu, 0x00000090u, 0x000000a2u, 0x0004003du, 0x00000007u, 0x000000a5u, 0x00000025u, 0x00050082u, 0x00000007u, 0x000000a8u, 0x000000a5u, 0x00000093u, 0x0004003du, 0x00000006u, 0x000000aau, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000acu, 0x00000024u, 0x000000abu, 0x0004003du, 0x00000006u, 0x000000adu, 0x000000acu, 0x00050084u, 0x00000006u, 0x000000aeu, 0x000000aau, 0x000000adu, 0x0003003eu, 0x000000b0u, 0x000000a8u, 0x00050041u, 0x00000014u, 0x000000b2u, 0x00000024u, 0x000000a9u, 0x0004003du, 0x00000006u, 0x000000b3u, 0x000000b2u, 0x0003003eu, 0x000000b1u, 0x000000b3u, 0x0003003eu, 0x000000b4u, 0x000000aeu, 0x00080039u, 0x00000007u, 0x000000b6u, 0x0000001au, 0x000000b0u, 0x000000b1u, 0x000000b4u, 0x000000b5u, 0x0004003du, 0x00000007u, 0x000000b7u, 0x000000b5u, 0x0003003eu, 0x000000afu, 0x000000b7u, 0x0003003eu, 0x000000a4u, 0x000000b6u, 0x0004003du, 0x00000007u, 0x000000b9u, 0x00000025u, 0x00070050u, 0x00000007u, 0x000000bbu, 0x0000008fu, 0x0000008fu, 0x0000008fu, 0x0000008fu, 0x00050082u, 0x00000007u, 0x000000bcu, 0x000000b9u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x000000beu, 0x00000027u, 0x00050041u, 0x00000014u, 0x000000c0u, 0x00000024u, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000000c1u, 0x000000c0u, 0x00050084u, 0x00000006u, 0x000000c2u, 0x000000beu, 0x000000c1u, 0x0003003eu, 0x000000c4u, 0x000000bcu, 0x00050041u, 0x00000014u, 0x000000c6u, 0x00000024u, 0x000000bdu, 0x0004003du, 0x00000006u, 0x000000c7u, 0x000000c6u, 0x0003003eu, 0x000000c5u, 0x000000c7u, 0x0003003eu, 0x000000c8u, 0x000000c2u, 0x00080039u, 0x00000007u, 0x000000cau, 0x0000001au, 0x000000c4u, 0x000000c5u, 0x000000c8u, 0x000000c9u, 0x0004003du, 0x00000007u, 0x000000cbu, 0x000000c9u, 0x0003003eu, 0x000000c3u, 0x000000cbu, 0x0003003eu, 0x000000b8u, 0x000000cau, 0x0004003du, 0x00000007u, 0x000000ceu, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000cfu, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000d1u, 0x00000087u, 0x00040072u, 0x00000006u, 0x000000d2u, 0x000000d1u, 0x00050084u, 0x00000006u, 0x000000d3u, 0x000000cfu, 0x000000d2u, 0x00070050u, 0x00000007u, 0x000000d4u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x000500b1u, 0x000000d5u, 0x000000d6u, 0x000000ceu, 0x000000d4u, 0x000600a9u, 0x00000007u, 0x000000d7u, 0x000000d6u, 0x000000b6u, 0x000000cau, 0x0003003eu, 0x000000b8u, 0x000000d7u, 0x0004003du, 0x00000007u, 0x000000dau, 0x00000025u, 0x0004003du, 0x00000006u, 0x000000dbu, 0x00000027u, 0x0004003du, 0x0000001cu, 0x000000ddu, 0x00000087u, 0x00040072u, 0x00000006u, 0x000000deu, 0x000000ddu, 0x00050084u, 0x00000006u, 0x000000dfu, 0x000000dbu, 0x000000deu, 0x00070050u, 0x00000007u, 0x000000e0u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000500b1u, 0x000000d5u, 0x000000e1u, 0x000000dau, 0x000000e0u, 0x000600a9u, 0x00000007u, 0x000000e2u, 0x000000e1u, 0x000000b7u, 0x000000cbu, 0x0003003eu, 0x000000c3u, 0x000000e2u, 0x000500adu, 0x000000d5u, 0x000000e8u, 0x000000a3u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000000e9u, 0x000000e8u, 0x000000e5u, 0x000000a2u, 0x0003003eu, 0x00000090u, 0x000000e9u, 0x000500b1u, 0x000000d5u, 0x000000f0u, 0x000000a3u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000000f1u, 0x000000f0u, 0x000000ecu, 0x000000e9u, 0x0003003eu, 0x00000090u, 0x000000f1u, 0x000500adu, 0x000000d5u, 0x000000f4u, 0x000000e2u, 0x000000e7u, 0x000600a9u, 0x00000007u, 0x000000f5u, 0x000000f4u, 0x000000e5u, 0x000000d7u, 0x0003003eu, 0x000000b8u, 0x000000f5u, 0x000500b1u, 0x000000d5u, 0x000000f8u, 0x000000e2u, 0x000000efu, 0x000600a9u, 0x00000007u, 0x000000f9u, 0x000000f8u, 0x000000ecu, 0x000000f5u, 0x0003003eu, 0x000000b8u, 0x000000f9u, 0x0003003eu, 0x000000fbu, 0x000000f1u, 0x00050039u, 0x00000007u, 0x000000fdu, 0x0000000bu, 0x000000fbu, 0x0003003eu, 0x000000fau, 0x000000fdu, 0x0003003eu, 0x000000ffu, 0x000000f9u, 0x00050039u, 0x00000007u, 0x00000101u, 0x0000000bu, 0x000000ffu, 0x0003003eu, 0x000000feu, 0x00000101u, 0x0004003du, 0x00000020u, 0x00000102u, 0x00000026u, 0x000300f7u, 0x00000104u, 0x00000000u, 0x000400fau, 0x00000102u, 0x00000103u, 0x00000109u, 0x000200f8u, 0x00000103u, 0x0003003eu, 0x00000105u, 0x000000fdu, 0x0003003eu, 0x00000107u, 0x00000101u, 0x000200f9u, 0x00000104u, 0x000200f8u, 0x00000109u, 0x0003003eu, 0x00000105u, 0x00000101u, 0x0003003eu, 0x00000107u, 0x000000fdu, 0x000200f9u, 0x00000104u, 0x000200f8u, 0x00000104u, 0x00070050u, 0x000000d5u, 0x000007c1u, 0x00000102u, 0x00000102u, 0x00000102u, 0x00000102u, 0x000600a9u, 0x00000007u, 0x000007c2u, 0x000007c1u, 0x00000101u, 0x000000fdu, 0x000600a9u, 0x00000007u, 0x000007c4u, 0x000007c1u, 0x000000fdu, 0x00000101u, 0x0006000cu, 0x00000007u, 0x0000010eu, 0x00000001u, 0x00000005u, 0x000007c4u, 0x0006000cu, 0x00000007u, 0x00000110u, 0x00000001u, 0x00000005u, 0x000007c2u, 0x0007000cu, 0x00000007u, 0x00000111u, 0x00000001u, 0x0000002au, 0x0000010eu, 0x00000110u, 0x0003003eu, 0x00000112u, 0x00000111u, 0x00050039u, 0x00000006u, 0x00000113u, 0x00000012u, 0x00000112u, 0x0003003eu, 0x0000010cu, 0x00000113u, 0x0004003du, 0x00000006u, 0x00000116u, 0x00000027u, 0x00050084u, 0x00000006u, 0x00000117u, 0x00000115u, 0x00000116u, 0x000500b3u, 0x00000020u, 0x00000118u, 0x00000113u, 0x00000117u, 0x000300f7u, 0x0000011au, 0x00000000u, 0x000400fau, 0x00000118u, 0x00000119u, 0x00000123u, 0x000200f8u, 0x00000119u, 0x0003003eu, 0x0000011cu, 0x000007c4u, 0x00050039u, 0x00000006u, 0x0000011eu, 0x0000000fu, 0x0000011cu, 0x0003003eu, 0x0000011fu, 0x000007c2u, 0x00050039u, 0x00000006u, 0x00000121u, 0x00000012u, 0x0000011fu, 0x00050050u, 0x00000022u, 0x00000122u, 0x0000011eu, 0x00000121u, 0x0003003eu, 0x0000011bu, 0x00000122u, 0x000200f9u, 0x0000011au, 0x000200f8u, 0x00000123u, 0x0003003eu, 0x0000011bu, 0x00000124u, 0x000200f9u, 0x0000011au, 0x000200f8u, 0x0000011au, 0x000700f5u, 0x00000022u, 0x000007b4u, 0x00000122u, 0x00000119u, 0x00000124u, 0x00000123u, 0x000200feu, 0x000007b4u, 0x00010038u, 0x00050036u, 0x00000020u, 0x00000030u, 0x00000000u, 0x0000002bu, 0x00030037u, 0x0000001fu, 0x0000002cu, 0x00030037u, 0x0000002au, 0x0000002du, 0x00030037u, 0x0000002au, 0x0000002eu, 0x00030037u, 0x00000014u, 0x0000002fu, 0x000200f8u, 0x00000031u, 0x0005003bu, 0x00000021u, 0x000002fcu, 0x00000007u, 0x00000146u, 0x0004003bu, 0x00000021u, 0x000002f9u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000128u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000148u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000151u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x00000164u, 0x00000007u, 0x0004003bu, 0x0000001fu, 0x00000165u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000167u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000169u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000016bu, 0x00000007u, 0x000300f7u, 0x000002f8u, 0x00000000u, 0x000300fbu, 0x00000049u, 0x000002fbu, 0x000200f8u, 0x000002fbu, 0x00050041u, 0x00000014u, 0x00000129u, 0x0000002du, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000012au, 0x00000129u, 0x00050084u, 0x00000006u, 0x0000012bu, 0x0000012au, 0x00000086u, 0x0003003eu, 0x00000128u, 0x0000012bu, 0x00050041u, 0x00000014u, 0x0000012du, 0x0000002eu, 0x0000004cu, 0x0004003du, 0x00000006u, 0x0000012eu, 0x0000012du, 0x00050084u, 0x00000006u, 0x0000012fu, 0x0000012eu, 0x00000086u, 0x00050080u, 0x00000006u, 0x00000130u, 0x0000012fu, 0x0000007eu, 0x0003003eu, 0x0000012cu, 0x00000130u, 0x0004003du, 0x00000006u, 0x00000132u, 0x0000002fu, 0x00050041u, 0x0000007fu, 0x00000133u, 0x0000002cu, 0x0000007eu, 0x0004003du, 0x0000001cu, 0x00000134u, 0x00000133u, 0x00040072u, 0x00000006u, 0x00000135u, 0x00000134u, 0x00050084u, 0x00000006u, 0x00000136u, 0x00000132u, 0x00000135u, 0x0007000cu, 0x00000006u, 0x00000137u, 0x00000001u, 0x0000002au, 0x0000012bu, 0x00000136u, 0x0003003eu, 0x00000128u, 0x00000137u, 0x0004003du, 0x00000006u, 0x00000139u, 0x0000002fu, 0x00050041u, 0x0000007fu, 0x0000013bu, 0x0000002cu, 0x0000013au, 0x0004003du, 0x0000001cu, 0x0000013cu, 0x0000013bu, 0x00040072u, 0x00000006u, 0x0000013du, 0x0000013cu, 0x00050084u, 0x00000006u, 0x0000013eu, 0x00000139u, 0x0000013du, 0x00050082u, 0x00000006u, 0x0000013fu, 0x0000013eu, 0x000000abu, 0x0007000cu, 0x00000006u, 0x00000140u, 0x00000001u, 0x00000027u, 0x00000130u, 0x0000013fu, 0x0003003eu, 0x0000012cu, 0x00000140u, 0x000500b1u, 0x00000020u, 0x00000143u, 0x00000140u, 0x00000137u, 0x000300f7u, 0x00000145u, 0x00000000u, 0x000400fau, 0x00000143u, 0x00000144u, 0x00000145u, 0x000200f8u, 0x00000144u, 0x0003003eu, 0x000002fcu, 0x000002fdu, 0x0003003eu, 0x000002f9u, 0x00000146u, 0x000200f9u, 0x000002f8u, 0x000200f8u, 0x00000145u, 0x00050041u, 0x0000014au, 0x0000014bu, 0x0000002cu, 0x00000149u, 0x0004003du, 0x0000001du, 0x0000014cu, 0x0000014bu, 0x00040071u, 0x00000032u, 0x0000014du, 0x0000014cu, 0x0004007cu, 0x00000006u, 0x0000014eu, 0x0000014du, 0x000500c7u, 0x00000006u, 0x0000014fu, 0x0000014eu, 0x000000abu, 0x000500abu, 0x00000020u, 0x00000150u, 0x0000014fu, 0x00000097u, 0x0003003eu, 0x00000148u, 0x00000150u, 0x00050041u, 0x0000007fu, 0x00000154u, 0x0000002cu, 0x00000086u, 0x0004003du, 0x0000001cu, 0x00000155u, 0x00000154u, 0x00040072u, 0x00000006u, 0x00000156u, 0x00000155u, 0x0004003du, 0x00000006u, 0x00000157u, 0x0000002fu, 0x00050084u, 0x00000006u, 0x00000158u, 0x00000156u, 0x00000157u, 0x00050050u, 0x00000022u, 0x0000015au, 0x00000158u, 0x00000158u, 0x00050080u, 0x00000022u, 0x0000015bu, 0x0000015au, 0x00000159u, 0x00050050u, 0x00000022u, 0x0000015du, 0x00000137u, 0x00000137u, 0x00050050u, 0x00000022u, 0x0000015fu, 0x00000140u, 0x00000140u, 0x0008000cu, 0x00000022u, 0x00000160u, 0x00000001u, 0x0000002du, 0x0000015bu, 0x0000015du, 0x0000015fu, 0x00050051u, 0x00000006u, 0x00000161u, 0x00000160u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000162u, 0x00000160u, 0x00000001u, 0x00070050u, 0x00000007u, 0x00000163u, 0x00000137u, 0x00000140u, 0x00000161u, 0x00000162u, 0x0003003eu, 0x00000151u, 0x00000163u, 0x0004003du, 0x0000001eu, 0x00000166u, 0x0000002cu, 0x0003003eu, 0x00000165u, 0x00000166u, 0x0003003eu, 0x00000167u, 0x00000163u, 0x0003003eu, 0x00000169u, 0x00000150u, 0x0004003du, 0x00000006u, 0x0000016cu, 0x0000002fu, 0x0003003eu, 0x0000016bu, 0x0000016cu, 0x00080039u, 0x00000022u, 0x0000016du, 0x00000028u, 0x00000165u, 0x00000167u, 0x00000169u, 0x0000016bu, 0x0003003eu, 0x00000164u, 0x0000016du, 0x00050041u, 0x00000014u, 0x0000016eu, 0x00000164u, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000016fu, 0x0000016eu, 0x00050041u, 0x00000014u, 0x00000170u, 0x0000002du, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000171u, 0x00000170u, 0x0007000cu, 0x00000006u, 0x00000172u, 0x00000001u, 0x0000002au, 0x0000016fu, 0x00000171u, 0x0003003eu, 0x0000016eu, 0x00000172u, 0x00050041u, 0x00000014u, 0x00000174u, 0x00000164u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x00000175u, 0x00000174u, 0x00050041u, 0x00000014u, 0x00000176u, 0x0000002eu, 0x00000049u, 0x0004003du, 0x00000006u, 0x00000177u, 0x00000176u, 0x0007000cu, 0x00000006u, 0x00000178u, 0x00000001u, 0x00000027u, 0x00000175u, 0x00000177u, 0x0003003eu, 0x00000174u, 0x00000178u, 0x0004003du, 0x00000006u, 0x0000017bu, 0x0000016eu, 0x0004003du, 0x00000006u, 0x0000017du, 0x00000174u, 0x000500b3u, 0x00000020u, 0x0000017eu, 0x0000017bu, 0x0000017du, 0x0003003eu, 0x000002fcu, 0x000002fdu, 0x0003003eu, 0x000002f9u, 0x0000017eu, 0x000200f9u, 0x000002f8u, 0x000200f8u, 0x000002f8u, 0x000700f5u, 0x00000020u, 0x000007b5u, 0x00000146u, 0x00000144u, 0x0000017eu, 0x00000145u, 0x000200feu, 0x000007b5u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000036u, 0x00000000u, 0x00000034u, 0x00030037u, 0x00000033u, 0x00000035u, 0x000200f8u, 0x00000037u, 0x0004003bu, 0x0000014au, 0x00000764u, 0x00000007u, 0x0004003bu, 0x0000014au, 0x00000763u, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x00000762u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000761u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x00000760u, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075fu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000075eu, 0x00000007u, 0x0004003bu, 0x0000007fu, 0x0000075du, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075cu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075bu, 0x00000007u, 0x0004003bu, 0x00000014u, 0x0000075au, 0x00000007u, 0x0004003du, 0x00000032u, 0x00000186u, 0x00000035u, 0x00060041u, 0x00000187u, 0x00000188u, 0x00000185u, 0x00000097u, 0x00000186u, 0x0004003du, 0x00000181u, 0x00000189u, 0x00000188u, 0x00050051u, 0x00000006u, 0x0000018bu, 0x00000189u, 0x00000000u, 0x0003003eu, 0x0000075au, 0x0000018bu, 0x00050051u, 0x00000006u, 0x0000018du, 0x00000189u, 0x00000001u, 0x0003003eu, 0x0000075bu, 0x0000018du, 0x00050051u, 0x00000006u, 0x0000018fu, 0x00000189u, 0x00000002u, 0x0003003eu, 0x0000075cu, 0x0000018fu, 0x00050051u, 0x0000001cu, 0x00000191u, 0x00000189u, 0x00000003u, 0x0003003eu, 0x0000075du, 0x00000191u, 0x00050051u, 0x0000001cu, 0x00000193u, 0x00000189u, 0x00000004u, 0x0003003eu, 0x0000075eu, 0x00000193u, 0x00050051u, 0x00000006u, 0x00000195u, 0x00000189u, 0x00000005u, 0x0003003eu, 0x0000075fu, 0x00000195u, 0x00050051u, 0x00000006u, 0x00000197u, 0x00000189u, 0x00000006u, 0x0003003eu, 0x00000760u, 0x00000197u, 0x00050051u, 0x00000006u, 0x00000199u, 0x00000189u, 0x00000007u, 0x0003003eu, 0x00000761u, 0x00000199u, 0x00050051u, 0x0000001cu, 0x0000019bu, 0x00000189u, 0x00000008u, 0x0003003eu, 0x00000762u, 0x0000019bu, 0x00050051u, 0x0000001du, 0x0000019du, 0x00000189u, 0x00000009u, 0x0003003eu, 0x00000763u, 0x0000019du, 0x00050051u, 0x0000001du, 0x0000019fu, 0x00000189u, 0x0000000au, 0x0003003eu, 0x00000764u, 0x0000019fu, 0x000e0050u, 0x0000001eu, 0x00000770u, 0x0000018bu, 0x0000018du, 0x0000018fu, 0x00000191u, 0x00000193u, 0x00000195u, 0x00000197u, 0x00000199u, 0x0000019bu, 0x0000019du, 0x0000019fu, 0x000200feu, 0x00000770u, 0x00010038u, 0x00050036u, 0x00000038u, 0x0000003bu, 0x00000000u, 0x00000039u, 0x00030037u, 0x00000033u, 0x0000003au, 0x000200f8u, 0x0000003cu, 0x0004003bu, 0x00000008u, 0x000001a5u, 0x00000007u, 0x0004003du, 0x00000032u, 0x000001aau, 0x0000003au, 0x00060041u, 0x000001abu, 0x000001acu, 0x000001a9u, 0x00000097u, 0x000001aau, 0x0004003du, 0x00000007u, 0x000001adu, 0x000001acu, 0x0003003eu, 0x000001a5u, 0x000001adu, 0x00050041u, 0x00000014u, 0x000001aeu, 0x000001a5u, 0x00000049u, 0x0004003du, 0x00000006u, 0x000001afu, 0x000001aeu, 0x00050041u, 0x00000014u, 0x000001b0u, 0x000001a5u, 0x0000004cu, 0x0004003du, 0x00000006u, 0x000001b1u, 0x000001b0u, 0x00050041u, 0x00000014u, 0x000001b3u, 0x000001a5u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000001b4u, 0x000001b3u, 0x00050041u, 0x00000014u, 0x000001b6u, 0x000001a5u, 0x000001b5u, 0x0004003du, 0x00000006u, 0x000001b7u, 0x000001b6u, 0x00070050u, 0x00000038u, 0x000001b8u, 0x000001afu, 0x000001b1u, 0x000001b4u, 0x000001b7u, 0x000200feu, 0x000001b8u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000eef2u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00001e53u, 0x00001e5du, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000204u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000204u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000204u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000204u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000204u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000204u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000204u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000204u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000205u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000206u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000206u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000206u, 0x00000002u, 0x00040047u, 0x00000208u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000208u, 0x00000021u, 0x00000001u, 0x00050048u, 0x0000022eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000022eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000022eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000022eu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000022eu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000022eu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000022eu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000022eu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000022eu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000022eu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000022eu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000022eu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000022eu, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x0000022eu, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x0000022eu, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x0000022fu, 0x00000006u, 0x00000038u, 0x00040048u, 0x00000230u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000230u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000230u, 0x00000002u, 0x00040047u, 0x00000232u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000232u, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000028bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000028bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000028bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000028bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000028bu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000028bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000028bu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000028bu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000028cu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000028du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000028du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000028du, 0x00000002u, 0x00040047u, 0x0000028fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000028fu, 0x00000021u, 0x00000004u, 0x00050048u, 0x000002aeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002aeu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002aeu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002aeu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000002aeu, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x000002aeu, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x000002aeu, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x000002afu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002b0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b0u, 0x00000002u, 0x00040047u, 0x000002b2u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002b2u, 0x00000021u, 0x00000005u, 0x00050048u, 0x000002cdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002cdu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002cdu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002cdu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000002cdu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000002cdu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000002cdu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000002cdu, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x000002cdu, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x000002cdu, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x000002cdu, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000002cdu, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x000002cdu, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x000002cdu, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x000002ceu, 0x00000006u, 0x00000020u, 0x00040048u, 0x000002cfu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002cfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002cfu, 0x00000002u, 0x00040047u, 0x000002d1u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002d1u, 0x00000021u, 0x00000007u, 0x00050048u, 0x00000310u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000310u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000310u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000310u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000310u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000310u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000310u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000310u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000310u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000311u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000312u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000312u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000312u, 0x00000002u, 0x00040047u, 0x00000314u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000314u, 0x00000021u, 0x00000008u, 0x00050048u, 0x0000033du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000033du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000033du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000033du, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x0000033eu, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000033fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000033fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000033fu, 0x00000002u, 0x00040047u, 0x00000341u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000341u, 0x00000021u, 0x00000009u, 0x00040047u, 0x00000504u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000504u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000657u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000065du, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000666u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000667u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000667u, 0x00000002u, 0x00040047u, 0x00000669u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000669u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000675u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000676u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000676u, 0x00000002u, 0x00040047u, 0x00000678u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000678u, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000068au, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000068bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000068bu, 0x00000002u, 0x00040047u, 0x0000068du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000068du, 0x00000021u, 0x00000000u, 0x00040047u, 0x000006d3u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000006d4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000006d4u, 0x00000002u, 0x00040047u, 0x000006d6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000006d6u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000078au, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000850u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000a06u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000a07u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000a07u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000a07u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000a08u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000a09u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a09u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a09u, 0x00000002u, 0x00040047u, 0x00000a0bu, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000a0bu, 0x00000021u, 0x00000006u, 0x00050048u, 0x00000cbeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000cbeu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000cbeu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000cbeu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000cbfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000cbfu, 0x00000002u, 0x00040047u, 0x00000cc1u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000cc1u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000e60u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000e61u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000e62u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000e63u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000e63u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000e63u, 0x00000002u, 0x00040047u, 0x00000e65u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000e65u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000f27u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000f28u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000f29u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000f2au, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000f2au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000f2au, 0x00000002u, 0x00040047u, 0x00000f2cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000f2cu, 0x00000021u, 0x00000002u, 0x00050048u, 0x00001b03u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001b03u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001b03u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001b03u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001b03u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00001b03u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00001b03u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00001b03u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00001b03u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00001b03u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00001b03u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00001b04u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00001b05u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001b05u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001b05u, 0x00000002u, 0x00040047u, 0x00001b07u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001b07u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00001e53u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00001e5du, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00001e66u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00001e67u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00001e68u, 0x00000001u, 0x00000004u, 0x00040047u, 0x00001e69u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00001e71u, 0x00000001u, 0x00000005u, 0x00040047u, 0x00001e75u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001e76u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001e76u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001e76u, 0x00000002u, 0x00040047u, 0x00001e78u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001e78u, 0x00000021u, 0x0000000cu, 0x00050048u, 0x00001e7cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001e7cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001e7cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001e7cu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001e7cu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x00001e7cu, 0x00000002u, 0x00040047u, 0x00001ea9u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001eaau, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001eaau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001eaau, 0x00000002u, 0x00040047u, 0x00001eacu, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001eacu, 0x00000021u, 0x0000000bu, 0x00040047u, 0x00001f15u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001f16u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001f16u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001f16u, 0x00000002u, 0x00040047u, 0x00001f18u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001f18u, 0x00000021u, 0x00000003u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x0011001eu, 0x0000000fu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000009u, 0x00040021u, 0x00000010u, 0x0000000fu, 0x00000007u, 0x000a001eu, 0x00000014u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x0009001eu, 0x00000019u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001au, 0x00000019u, 0x00000007u, 0x0010001eu, 0x0000001eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001fu, 0x0000001eu, 0x00000007u, 0x000b001eu, 0x00000023u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000024u, 0x00000023u, 0x00000007u, 0x0006001eu, 0x00000028u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000029u, 0x00000028u, 0x00000007u, 0x00060021u, 0x0000002du, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030021u, 0x00000033u, 0x00000008u, 0x00040017u, 0x0000003cu, 0x00000008u, 0x00000003u, 0x00040020u, 0x0000003du, 0x00000007u, 0x0000003cu, 0x00040020u, 0x0000003eu, 0x00000007u, 0x00000008u, 0x00050021u, 0x0000003fu, 0x0000003cu, 0x0000003du, 0x0000003eu, 0x00090021u, 0x00000044u, 0x00000002u, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00040021u, 0x0000004du, 0x00000008u, 0x0000003eu, 0x0007001eu, 0x0000005au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00040020u, 0x0000005bu, 0x00000007u, 0x0000005au, 0x00040020u, 0x0000005cu, 0x00000007u, 0x00000009u, 0x00020014u, 0x0000005du, 0x00040020u, 0x0000005eu, 0x00000007u, 0x0000005du, 0x00040017u, 0x0000005fu, 0x00000008u, 0x00000002u, 0x00040020u, 0x00000060u, 0x00000007u, 0x0000005fu, 0x000b0021u, 0x00000061u, 0x0000003cu, 0x0000005bu, 0x0000005cu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00000060u, 0x0000005eu, 0x00110021u, 0x0000006fu, 0x0000005du, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00000060u, 0x00060021u, 0x00000080u, 0x00000008u, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x00070021u, 0x00000086u, 0x00000008u, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000003eu, 0x00050021u, 0x0000008du, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x000000a2u, 0x00000006u, 0x00000002u, 0x00040020u, 0x000000a3u, 0x00000007u, 0x000000a2u, 0x00080021u, 0x000000a4u, 0x00000002u, 0x000000a3u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x000000acu, 0x00000002u, 0x000000a3u, 0x00000007u, 0x00040021u, 0x000000b8u, 0x00000009u, 0x0000005eu, 0x00040021u, 0x000000bcu, 0x00000002u, 0x0000005cu, 0x00040021u, 0x000000c4u, 0x00000002u, 0x00000007u, 0x0006001eu, 0x000000c8u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x000000c9u, 0x00000007u, 0x000000c8u, 0x00070021u, 0x000000cau, 0x00000002u, 0x0000003eu, 0x0000003eu, 0x00000007u, 0x000000c9u, 0x00040021u, 0x000000d1u, 0x00000009u, 0x0000005cu, 0x00040021u, 0x000000deu, 0x0000005fu, 0x0000003eu, 0x00040021u, 0x000000e2u, 0x0000005fu, 0x0000003du, 0x00050021u, 0x000000e6u, 0x0000005fu, 0x0000003du, 0x0000005eu, 0x00080021u, 0x000000ebu, 0x00000009u, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x00040020u, 0x000000f3u, 0x00000007u, 0x00000023u, 0x000a0021u, 0x000000f4u, 0x00000002u, 0x000000f3u, 0x0000005cu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x00000060u, 0x0000003eu, 0x00070021u, 0x000000feu, 0x0000005fu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000005eu, 0x00100021u, 0x00000105u, 0x00000002u, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x0000003eu, 0x00000060u, 0x00000060u, 0x00000060u, 0x0000003eu, 0x0000005eu, 0x00040020u, 0x00000115u, 0x00000007u, 0x0000001eu, 0x00050021u, 0x00000116u, 0x00000008u, 0x00000115u, 0x0000003eu, 0x00050021u, 0x0000011bu, 0x0000005fu, 0x00000115u, 0x0000003eu, 0x00040021u, 0x00000124u, 0x00000009u, 0x00000007u, 0x00060021u, 0x0000012bu, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00070021u, 0x00000136u, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00000007u, 0x000a0021u, 0x0000013du, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00000007u, 0x00000007u, 0x00000007u, 0x0000005eu, 0x00090021u, 0x00000147u, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00000007u, 0x00000007u, 0x0000005eu, 0x00080021u, 0x0000017cu, 0x00000008u, 0x0000005eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00060021u, 0x00000184u, 0x00000008u, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00090021u, 0x0000018au, 0x00000008u, 0x00000115u, 0x00000007u, 0x00000060u, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x00080021u, 0x0000019bu, 0x0000005fu, 0x00000060u, 0x00000060u, 0x00000060u, 0x00000060u, 0x00000060u, 0x000c0021u, 0x000001a3u, 0x00000009u, 0x00000115u, 0x00000007u, 0x00000060u, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005cu, 0x000f0021u, 0x000001afu, 0x00000002u, 0x00000007u, 0x00000007u, 0x0000003eu, 0x00000007u, 0x0000003eu, 0x00000060u, 0x00000060u, 0x00000060u, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00050021u, 0x000001beu, 0x00000009u, 0x0000005cu, 0x0000005cu, 0x00070021u, 0x000001c6u, 0x00000009u, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x000c001eu, 0x000001cdu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00040020u, 0x000001ceu, 0x00000007u, 0x000001cdu, 0x00060021u, 0x000001cfu, 0x00000009u, 0x000001ceu, 0x0000003eu, 0x0000003eu, 0x000c0021u, 0x000001e4u, 0x00000009u, 0x000001ceu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000003eu, 0x000a0021u, 0x000001f0u, 0x00000009u, 0x000001ceu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x00070021u, 0x000001fau, 0x0000005du, 0x0000003eu, 0x0000003eu, 0x00000007u, 0x000000c9u, 0x00040020u, 0x00000201u, 0x00000006u, 0x00000008u, 0x0004003bu, 0x00000201u, 0x00000202u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000203u, 0x00000000u, 0x000a001eu, 0x00000204u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000205u, 0x00000204u, 0x0003001eu, 0x00000206u, 0x00000205u, 0x00040020u, 0x00000207u, 0x0000000cu, 0x00000206u, 0x0004003bu, 0x00000207u, 0x00000208u, 0x0000000cu, 0x00040020u, 0x0000020au, 0x0000000cu, 0x00000204u, 0x00040020u, 0x0000020du, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x00000212u, 0x00000001u, 0x0004002bu, 0x00000008u, 0x00000215u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x00000218u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x0000021bu, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000021eu, 0x00000005u, 0x0004002bu, 0x00000008u, 0x00000221u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000224u, 0x00000007u, 0x00040015u, 0x00000229u, 0x00000008u, 0x00000000u, 0x00040017u, 0x0000022au, 0x00000229u, 0x00000004u, 0x00040015u, 0x0000022bu, 0x00000010u, 0x00000000u, 0x00040015u, 0x0000022cu, 0x00000010u, 0x00000001u, 0x00040017u, 0x0000022du, 0x0000022cu, 0x00000004u, 0x0011001eu, 0x0000022eu, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x00000006u, 0x0000022bu, 0x00000229u, 0x00000229u, 0x0000022du, 0x0003001du, 0x0000022fu, 0x0000022eu, 0x0003001eu, 0x00000230u, 0x0000022fu, 0x00040020u, 0x00000231u, 0x0000000cu, 0x00000230u, 0x0004003bu, 0x00000231u, 0x00000232u, 0x0000000cu, 0x00040020u, 0x00000234u, 0x0000000cu, 0x0000022au, 0x00040017u, 0x00000237u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000025eu, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000264u, 0x00000009u, 0x0004002bu, 0x00000008u, 0x0000026au, 0x0000000au, 0x00040020u, 0x0000026bu, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000026fu, 0x0000000bu, 0x00040020u, 0x00000270u, 0x0000000cu, 0x0000022bu, 0x0004002bu, 0x00000008u, 0x00000276u, 0x0000000cu, 0x00040020u, 0x00000277u, 0x0000000cu, 0x00000229u, 0x0004002bu, 0x00000008u, 0x0000027du, 0x0000000du, 0x0004002bu, 0x00000008u, 0x00000283u, 0x0000000eu, 0x00040020u, 0x00000284u, 0x0000000cu, 0x0000022du, 0x000a001eu, 0x0000028bu, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000028cu, 0x0000028bu, 0x0003001eu, 0x0000028du, 0x0000028cu, 0x00040020u, 0x0000028eu, 0x0000000cu, 0x0000028du, 0x0004003bu, 0x0000028eu, 0x0000028fu, 0x0000000cu, 0x00040020u, 0x000002a8u, 0x0000000cu, 0x00000008u, 0x0009001eu, 0x000002aeu, 0x0000022au, 0x0000022au, 0x00000006u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x0003001du, 0x000002afu, 0x000002aeu, 0x0003001eu, 0x000002b0u, 0x000002afu, 0x00040020u, 0x000002b1u, 0x0000000cu, 0x000002b0u, 0x0004003bu, 0x000002b1u, 0x000002b2u, 0x0000000cu, 0x0010001eu, 0x000002cdu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x0003001du, 0x000002ceu, 0x000002cdu, 0x0003001eu, 0x000002cfu, 0x000002ceu, 0x00040020u, 0x000002d0u, 0x0000000cu, 0x000002cfu, 0x0004003bu, 0x000002d0u, 0x000002d1u, 0x0000000cu, 0x00040017u, 0x0000030fu, 0x0000022bu, 0x00000004u, 0x000b001eu, 0x00000310u, 0x00000009u, 0x00000009u, 0x0000030fu, 0x0000030fu, 0x00000008u, 0x00000008u, 0x00000008u, 0x0000022cu, 0x0000022bu, 0x0003001du, 0x00000311u, 0x00000310u, 0x0003001eu, 0x00000312u, 0x00000311u, 0x00040020u, 0x00000313u, 0x0000000cu, 0x00000312u, 0x0004003bu, 0x00000313u, 0x00000314u, 0x0000000cu, 0x00040020u, 0x00000316u, 0x0000000cu, 0x00000009u, 0x00040020u, 0x0000031du, 0x0000000cu, 0x0000030fu, 0x00040020u, 0x00000331u, 0x0000000cu, 0x0000022cu, 0x0006001eu, 0x0000033du, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000033eu, 0x0000033du, 0x0003001eu, 0x0000033fu, 0x0000033eu, 0x00040020u, 0x00000340u, 0x0000000cu, 0x0000033fu, 0x0004003bu, 0x00000340u, 0x00000341u, 0x0000000cu, 0x00040020u, 0x00000343u, 0x0000000cu, 0x0000033du, 0x00040020u, 0x00000346u, 0x00000007u, 0x00000028u, 0x00040017u, 0x00000353u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000354u, 0x00000007u, 0x00000353u, 0x0004002bu, 0x00000006u, 0x0000035bu, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000361u, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x00000374u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000377u, 0x00000010u, 0x0004002bu, 0x00000008u, 0x0000037du, 0x00000020u, 0x0004002bu, 0x00000008u, 0x00000386u, 0x000001ffu, 0x0004002bu, 0x00000008u, 0x0000038bu, 0x000000ffu, 0x0006002cu, 0x0000003cu, 0x00000392u, 0x00000203u, 0x00000218u, 0x00000221u, 0x0004002bu, 0x00000008u, 0x00000398u, 0x000000f8u, 0x0006002cu, 0x0000003cu, 0x0000039du, 0x0000038bu, 0x0000038bu, 0x0000038bu, 0x0004002bu, 0x00000008u, 0x0000039fu, 0x000000f7u, 0x0006002cu, 0x0000003cu, 0x000003a0u, 0x0000039fu, 0x0000039fu, 0x0000039fu, 0x00040017u, 0x000003a1u, 0x0000005du, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000003aau, 0x0000001fu, 0x0004001cu, 0x000003c3u, 0x00000008u, 0x00000377u, 0x0004002bu, 0x00000006u, 0x000003c4u, 0x00000002u, 0x0004001cu, 0x000003c5u, 0x000003c3u, 0x000003c4u, 0x0013002cu, 0x000003c3u, 0x000003c6u, 0x00000203u, 0x00000221u, 0x00000212u, 0x00000224u, 0x0000021bu, 0x00000215u, 0x0000021eu, 0x00000218u, 0x00000218u, 0x0000021eu, 0x00000215u, 0x0000021bu, 0x00000224u, 0x00000212u, 0x00000221u, 0x00000203u, 0x0013002cu, 0x000003c3u, 0x000003c7u, 0x00000203u, 0x0000021bu, 0x00000212u, 0x0000021eu, 0x0000021bu, 0x00000203u, 0x0000021eu, 0x00000212u, 0x00000218u, 0x00000224u, 0x00000215u, 0x00000221u, 0x00000224u, 0x00000218u, 0x00000221u, 0x00000215u, 0x0005002cu, 0x000003c5u, 0x000003c8u, 0x000003c6u, 0x000003c7u, 0x00040020u, 0x000003d0u, 0x00000007u, 0x000003c5u, 0x0004002bu, 0x00000008u, 0x000003d4u, 0x00000049u, 0x0004002bu, 0x00000008u, 0x0000040au, 0x000007ffu, 0x0004002bu, 0x00000008u, 0x00000411u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x0000041du, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x00000422u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000485u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000048bu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000004cdu, 0x0000003cu, 0x00090019u, 0x00000502u, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000503u, 0x00000000u, 0x00000502u, 0x0004003bu, 0x00000503u, 0x00000504u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000540u, 0x0000000fu, 0x0003002au, 0x0000005du, 0x00000543u, 0x0004002bu, 0x00000008u, 0x00000553u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x00000559u, 0x00000010u, 0x00030029u, 0x0000005du, 0x0000055eu, 0x0004002bu, 0x00000008u, 0x0000055fu, 0x0000ffffu, 0x0007002cu, 0x00000009u, 0x000005f4u, 0x00000203u, 0x0000021bu, 0x00000215u, 0x00000221u, 0x00040017u, 0x000005f9u, 0x0000005du, 0x00000004u, 0x00040020u, 0x000005fau, 0x00000007u, 0x000005f9u, 0x0007002cu, 0x00000009u, 0x00000611u, 0x00000203u, 0x00000203u, 0x00000203u, 0x00000203u, 0x0007002cu, 0x00000009u, 0x00000612u, 0x00000212u, 0x00000212u, 0x00000212u, 0x00000212u, 0x0007002cu, 0x00000009u, 0x0000061fu, 0x00000212u, 0x00000215u, 0x0000021bu, 0x0000025eu, 0x0004002bu, 0x00000008u, 0x00000622u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x00000623u, 0x00000080u, 0x0007002cu, 0x00000009u, 0x00000624u, 0x00000559u, 0x0000037du, 0x00000622u, 0x00000623u, 0x00040032u, 0x00000008u, 0x00000657u, 0x00000000u, 0x00040032u, 0x00000006u, 0x0000065du, 0x00000000u, 0x00060034u, 0x00000006u, 0x0000065eu, 0x00000082u, 0x0000065du, 0x00000485u, 0x0003001du, 0x00000666u, 0x00000229u, 0x0003001eu, 0x00000667u, 0x00000666u, 0x00040020u, 0x00000668u, 0x0000000cu, 0x00000667u, 0x0004003bu, 0x00000668u, 0x00000669u, 0x0000000cu, 0x00040020u, 0x00000670u, 0x00000006u, 0x00000009u, 0x0004003bu, 0x00000670u, 0x00000671u, 0x00000006u, 0x0003001du, 0x00000675u, 0x00000229u, 0x0003001eu, 0x00000676u, 0x00000675u, 0x00040020u, 0x00000677u, 0x0000000cu, 0x00000676u, 0x0004003bu, 0x00000677u, 0x00000678u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000681u, 0x000000c2u, 0x0000065eu, 0x00000485u, 0x00060034u, 0x00000006u, 0x00000685u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x0003001du, 0x0000068au, 0x0000022bu, 0x0003001eu, 0x0000068bu, 0x0000068au, 0x00040020u, 0x0000068cu, 0x0000000cu, 0x0000068bu, 0x0004003bu, 0x0000068cu, 0x0000068du, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x0000069bu, 0x000000f8u, 0x00060034u, 0x00000006u, 0x000006b3u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x0004002bu, 0x00000006u, 0x000006c2u, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000006cau, 0x000000c2u, 0x0000065eu, 0x000003c4u, 0x00060034u, 0x00000006u, 0x000006ceu, 0x000000c2u, 0x0000065du, 0x00000215u, 0x0003001du, 0x000006d3u, 0x00000006u, 0x0003001eu, 0x000006d4u, 0x000006d3u, 0x00040020u, 0x000006d5u, 0x0000000cu, 0x000006d4u, 0x0004003bu, 0x000006d5u, 0x000006d6u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000006dcu, 0x00000018u, 0x0007002cu, 0x00000237u, 0x000006ddu, 0x000006dcu, 0x00000377u, 0x0000035bu, 0x00000374u, 0x0007002cu, 0x00000237u, 0x000006dfu, 0x000006c2u, 0x000006c2u, 0x000006c2u, 0x000006c2u, 0x0004003bu, 0x00000201u, 0x000006e7u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000006f4u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000701u, 0x00000004u, 0x0004003bu, 0x00000201u, 0x00000705u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000072eu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000734u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x0000073fu, 0x00000007u, 0x00040020u, 0x00000751u, 0x00000006u, 0x0000005du, 0x0004003bu, 0x00000751u, 0x00000752u, 0x00000006u, 0x00060034u, 0x00000006u, 0x00000756u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00040032u, 0x00000008u, 0x0000078au, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000078bu, 0x000000c7u, 0x0000078au, 0x00000212u, 0x00060034u, 0x0000005du, 0x0000078cu, 0x000000abu, 0x0000078bu, 0x00000203u, 0x00060034u, 0x00000008u, 0x0000078du, 0x000000c3u, 0x0000078au, 0x00000212u, 0x00060034u, 0x0000005du, 0x0000078eu, 0x000000aau, 0x0000078du, 0x00000203u, 0x00060034u, 0x0000005du, 0x0000078fu, 0x000000a7u, 0x0000078cu, 0x0000078eu, 0x0004002bu, 0x00000006u, 0x00000792u, 0x00000048u, 0x00060034u, 0x00000006u, 0x000007bdu, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00040020u, 0x000007c1u, 0x00000007u, 0x00000237u, 0x00060034u, 0x00000006u, 0x000007ecu, 0x000000c2u, 0x0000065du, 0x00000485u, 0x0004002bu, 0x00000006u, 0x000007eeu, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x000007f5u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00060034u, 0x00000006u, 0x00000814u, 0x000000c2u, 0x0000065du, 0x00000485u, 0x00060034u, 0x00000006u, 0x0000081cu, 0x000000c2u, 0x0000065du, 0x00000215u, 0x00060034u, 0x00000006u, 0x0000084au, 0x000000c2u, 0x0000065du, 0x000003c4u, 0x0004002bu, 0x00000006u, 0x0000084cu, 0xffffffffu, 0x00030031u, 0x0000005du, 0x00000850u, 0x00050034u, 0x0000005du, 0x00000851u, 0x000000a8u, 0x00000850u, 0x0004003bu, 0x00000751u, 0x00000854u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000085bu, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00060034u, 0x00000006u, 0x00000871u, 0x000000c2u, 0x0000065du, 0x00000485u, 0x00040017u, 0x00000879u, 0x0000005du, 0x00000002u, 0x00060034u, 0x00000008u, 0x00000880u, 0x000000c4u, 0x00000212u, 0x0000078du, 0x00060034u, 0x00000008u, 0x00000881u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000006u, 0x00000882u, 0x00000080u, 0x00000881u, 0x00000374u, 0x00060034u, 0x00000006u, 0x0000088bu, 0x00000080u, 0x00000880u, 0x00000374u, 0x00040020u, 0x0000089bu, 0x00000006u, 0x00000006u, 0x0004003bu, 0x0000089bu, 0x0000089cu, 0x00000006u, 0x00060034u, 0x00000008u, 0x000008d6u, 0x00000084u, 0x00000880u, 0x00000880u, 0x00060034u, 0x00000006u, 0x000008d7u, 0x00000080u, 0x000008d6u, 0x00000374u, 0x00060034u, 0x00000006u, 0x000008d8u, 0x000000c2u, 0x0000065du, 0x00000215u, 0x00060034u, 0x00000006u, 0x000008d9u, 0x00000084u, 0x000008d7u, 0x000008d8u, 0x00060034u, 0x00000008u, 0x000008ecu, 0x00000082u, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000006u, 0x000008edu, 0x00000080u, 0x000008ecu, 0x00000374u, 0x00060034u, 0x00000006u, 0x000008f6u, 0x00000080u, 0x00000880u, 0x00000374u, 0x00060034u, 0x0000005du, 0x00000918u, 0x000000abu, 0x0000078du, 0x00000203u, 0x00060034u, 0x0000005du, 0x00000919u, 0x000000a7u, 0x0000078cu, 0x00000918u, 0x0004002bu, 0x00000008u, 0x00000928u, 0x000000e0u, 0x0006002cu, 0x0000003cu, 0x00000933u, 0x00000203u, 0x00000203u, 0x00000203u, 0x00060034u, 0x0000005du, 0x0000094cu, 0x000000aau, 0x00000657u, 0x00000203u, 0x0004002bu, 0x00000006u, 0x00000971u, 0x000000e0u, 0x0004001cu, 0x00000a06u, 0x00000229u, 0x0000035bu, 0x0005001eu, 0x00000a07u, 0x0000022au, 0x0000022au, 0x00000a06u, 0x0003001du, 0x00000a08u, 0x00000a07u, 0x0003001eu, 0x00000a09u, 0x00000a08u, 0x00040020u, 0x00000a0au, 0x0000000cu, 0x00000a09u, 0x0004003bu, 0x00000a0au, 0x00000a0bu, 0x0000000cu, 0x00040020u, 0x00000a10u, 0x00000007u, 0x0000000fu, 0x00040020u, 0x00000a15u, 0x00000007u, 0x00000019u, 0x0004002bu, 0x00000006u, 0x00000a31u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x00000a37u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000a3du, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000a43u, 0x00000100u, 0x0007002cu, 0x00000009u, 0x00000ae7u, 0x0000038bu, 0x0000038bu, 0x0000038bu, 0x0000038bu, 0x0004002bu, 0x00000008u, 0x00000b01u, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000b17u, 0x00003fffu, 0x0004001cu, 0x00000b1du, 0x0000005fu, 0x00000a37u, 0x0004002bu, 0x00000008u, 0x00000b1eu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x00000b1fu, 0xfffffc10u, 0x0005002cu, 0x0000005fu, 0x00000b20u, 0x00000b1eu, 0x00000b1fu, 0x0004002bu, 0x00000008u, 0x00000b21u, 0x00003f04u, 0x0004002bu, 0x00000008u, 0x00000b22u, 0xfffffc30u, 0x0005002cu, 0x0000005fu, 0x00000b23u, 0x00000b21u, 0x00000b22u, 0x0004002bu, 0x00000008u, 0x00000b24u, 0x00003e10u, 0x0004002bu, 0x00000008u, 0x00000b25u, 0xfffffc48u, 0x0005002cu, 0x0000005fu, 0x00000b26u, 0x00000b24u, 0x00000b25u, 0x0004002bu, 0x00000008u, 0x00000b27u, 0x00003d22u, 0x0004002bu, 0x00000008u, 0x00000b28u, 0xfffffc68u, 0x0005002cu, 0x0000005fu, 0x00000b29u, 0x00000b27u, 0x00000b28u, 0x0004002bu, 0x00000008u, 0x00000b2au, 0x00003c3cu, 0x0004002bu, 0x00000008u, 0x00000b2bu, 0xfffffc84u, 0x0005002cu, 0x0000005fu, 0x00000b2cu, 0x00000b2au, 0x00000b2bu, 0x0004002bu, 0x00000008u, 0x00000b2du, 0x00003b5du, 0x0004002bu, 0x00000008u, 0x00000b2eu, 0xfffffc98u, 0x0005002cu, 0x0000005fu, 0x00000b2fu, 0x00000b2du, 0x00000b2eu, 0x0004002bu, 0x00000008u, 0x00000b30u, 0x00003a83u, 0x0004002bu, 0x00000008u, 0x00000b31u, 0xfffffcb8u, 0x0005002cu, 0x0000005fu, 0x00000b32u, 0x00000b30u, 0x00000b31u, 0x0004002bu, 0x00000008u, 0x00000b33u, 0x000039b1u, 0x0004002bu, 0x00000008u, 0x00000b34u, 0xfffffcccu, 0x0005002cu, 0x0000005fu, 0x00000b35u, 0x00000b33u, 0x00000b34u, 0x0004002bu, 0x00000008u, 0x00000b36u, 0x000038e4u, 0x0004002bu, 0x00000008u, 0x00000b37u, 0xfffffce0u, 0x0005002cu, 0x0000005fu, 0x00000b38u, 0x00000b36u, 0x00000b37u, 0x0004002bu, 0x00000008u, 0x00000b39u, 0x0000381cu, 0x0004002bu, 0x00000008u, 0x00000b3au, 0xfffffcf8u, 0x0005002cu, 0x0000005fu, 0x00000b3bu, 0x00000b39u, 0x00000b3au, 0x0004002bu, 0x00000008u, 0x00000b3cu, 0x0000375au, 0x0004002bu, 0x00000008u, 0x00000b3du, 0xfffffd0cu, 0x0005002cu, 0x0000005fu, 0x00000b3eu, 0x00000b3cu, 0x00000b3du, 0x0004002bu, 0x00000008u, 0x00000b3fu, 0x0000369du, 0x0004002bu, 0x00000008u, 0x00000b40u, 0xfffffd20u, 0x0005002cu, 0x0000005fu, 0x00000b41u, 0x00000b3fu, 0x00000b40u, 0x0004002bu, 0x00000008u, 0x00000b42u, 0x000035e5u, 0x0004002bu, 0x00000008u, 0x00000b43u, 0xfffffd34u, 0x0005002cu, 0x0000005fu, 0x00000b44u, 0x00000b42u, 0x00000b43u, 0x0004002bu, 0x00000008u, 0x00000b45u, 0x00003532u, 0x0004002bu, 0x00000008u, 0x00000b46u, 0xfffffd44u, 0x0005002cu, 0x0000005fu, 0x00000b47u, 0x00000b45u, 0x00000b46u, 0x0004002bu, 0x00000008u, 0x00000b48u, 0x00003483u, 0x0004002bu, 0x00000008u, 0x00000b49u, 0xfffffd58u, 0x0005002cu, 0x0000005fu, 0x00000b4au, 0x00000b48u, 0x00000b49u, 0x0004002bu, 0x00000008u, 0x00000b4bu, 0x000033d9u, 0x0004002bu, 0x00000008u, 0x00000b4cu, 0xfffffd68u, 0x0005002cu, 0x0000005fu, 0x00000b4du, 0x00000b4bu, 0x00000b4cu, 0x0004002bu, 0x00000008u, 0x00000b4eu, 0x00003333u, 0x0004002bu, 0x00000008u, 0x00000b4fu, 0xfffffd78u, 0x0005002cu, 0x0000005fu, 0x00000b50u, 0x00000b4eu, 0x00000b4fu, 0x0004002bu, 0x00000008u, 0x00000b51u, 0x00003291u, 0x0004002bu, 0x00000008u, 0x00000b52u, 0xfffffd8cu, 0x0005002cu, 0x0000005fu, 0x00000b53u, 0x00000b51u, 0x00000b52u, 0x0004002bu, 0x00000008u, 0x00000b54u, 0x000031f4u, 0x0004002bu, 0x00000008u, 0x00000b55u, 0xfffffd94u, 0x0005002cu, 0x0000005fu, 0x00000b56u, 0x00000b54u, 0x00000b55u, 0x0004002bu, 0x00000008u, 0x00000b57u, 0x00003159u, 0x0004002bu, 0x00000008u, 0x00000b58u, 0xfffffda8u, 0x0005002cu, 0x0000005fu, 0x00000b59u, 0x00000b57u, 0x00000b58u, 0x0004002bu, 0x00000008u, 0x00000b5au, 0x000030c3u, 0x0004002bu, 0x00000008u, 0x00000b5bu, 0xfffffdb4u, 0x0005002cu, 0x0000005fu, 0x00000b5cu, 0x00000b5au, 0x00000b5bu, 0x0004002bu, 0x00000008u, 0x00000b5du, 0x00003030u, 0x0004002bu, 0x00000008u, 0x00000b5eu, 0xfffffdc4u, 0x0005002cu, 0x0000005fu, 0x00000b5fu, 0x00000b5du, 0x00000b5eu, 0x0004002bu, 0x00000008u, 0x00000b60u, 0x00002fa1u, 0x0004002bu, 0x00000008u, 0x00000b61u, 0xfffffdd0u, 0x0005002cu, 0x0000005fu, 0x00000b62u, 0x00000b60u, 0x00000b61u, 0x0004002bu, 0x00000008u, 0x00000b63u, 0x00002f15u, 0x0004002bu, 0x00000008u, 0x00000b64u, 0xfffffddcu, 0x0005002cu, 0x0000005fu, 0x00000b65u, 0x00000b63u, 0x00000b64u, 0x0004002bu, 0x00000008u, 0x00000b66u, 0x00002e8cu, 0x0004002bu, 0x00000008u, 0x00000b67u, 0xfffffde8u, 0x0005002cu, 0x0000005fu, 0x00000b68u, 0x00000b66u, 0x00000b67u, 0x0004002bu, 0x00000008u, 0x00000b69u, 0x00002e06u, 0x0004002bu, 0x00000008u, 0x00000b6au, 0xfffffdf4u, 0x0005002cu, 0x0000005fu, 0x00000b6bu, 0x00000b69u, 0x00000b6au, 0x0004002bu, 0x00000008u, 0x00000b6cu, 0x00002d83u, 0x0004002bu, 0x00000008u, 0x00000b6du, 0xfffffe00u, 0x0005002cu, 0x0000005fu, 0x00000b6eu, 0x00000b6cu, 0x00000b6du, 0x0004002bu, 0x00000008u, 0x00000b6fu, 0x00002d03u, 0x0004002bu, 0x00000008u, 0x00000b70u, 0xfffffe0cu, 0x0005002cu, 0x0000005fu, 0x00000b71u, 0x00000b6fu, 0x00000b70u, 0x0004002bu, 0x00000008u, 0x00000b72u, 0x00002c86u, 0x0004002bu, 0x00000008u, 0x00000b73u, 0xfffffe14u, 0x0005002cu, 0x0000005fu, 0x00000b74u, 0x00000b72u, 0x00000b73u, 0x0004002bu, 0x00000008u, 0x00000b75u, 0x00002c0bu, 0x0004002bu, 0x00000008u, 0x00000b76u, 0xfffffe20u, 0x0005002cu, 0x0000005fu, 0x00000b77u, 0x00000b75u, 0x00000b76u, 0x0004002bu, 0x00000008u, 0x00000b78u, 0x00002b93u, 0x0004002bu, 0x00000008u, 0x00000b79u, 0xfffffe2cu, 0x0005002cu, 0x0000005fu, 0x00000b7au, 0x00000b78u, 0x00000b79u, 0x0004002bu, 0x00000008u, 0x00000b7bu, 0x00002b1eu, 0x0004002bu, 0x00000008u, 0x00000b7cu, 0xfffffe34u, 0x0005002cu, 0x0000005fu, 0x00000b7du, 0x00000b7bu, 0x00000b7cu, 0x0004002bu, 0x00000008u, 0x00000b7eu, 0x00002aabu, 0x0004002bu, 0x00000008u, 0x00000b7fu, 0xfffffe3cu, 0x0005002cu, 0x0000005fu, 0x00000b80u, 0x00000b7eu, 0x00000b7fu, 0x0004002bu, 0x00000008u, 0x00000b81u, 0x00002a3au, 0x0004002bu, 0x00000008u, 0x00000b82u, 0xfffffe48u, 0x0005002cu, 0x0000005fu, 0x00000b83u, 0x00000b81u, 0x00000b82u, 0x0004002bu, 0x00000008u, 0x00000b84u, 0x000029ccu, 0x0004002bu, 0x00000008u, 0x00000b85u, 0xfffffe50u, 0x0005002cu, 0x0000005fu, 0x00000b86u, 0x00000b84u, 0x00000b85u, 0x0004002bu, 0x00000008u, 0x00000b87u, 0x00002960u, 0x0004002bu, 0x00000008u, 0x00000b88u, 0xfffffe58u, 0x0005002cu, 0x0000005fu, 0x00000b89u, 0x00000b87u, 0x00000b88u, 0x0004002bu, 0x00000008u, 0x00000b8au, 0x000028f6u, 0x0004002bu, 0x00000008u, 0x00000b8bu, 0xfffffe60u, 0x0005002cu, 0x0000005fu, 0x00000b8cu, 0x00000b8au, 0x00000b8bu, 0x0004002bu, 0x00000008u, 0x00000b8du, 0x0000288eu, 0x0004002bu, 0x00000008u, 0x00000b8eu, 0xfffffe68u, 0x0005002cu, 0x0000005fu, 0x00000b8fu, 0x00000b8du, 0x00000b8eu, 0x0004002bu, 0x00000008u, 0x00000b90u, 0x00002828u, 0x0004002bu, 0x00000008u, 0x00000b91u, 0xfffffe70u, 0x0005002cu, 0x0000005fu, 0x00000b92u, 0x00000b90u, 0x00000b91u, 0x0004002bu, 0x00000008u, 0x00000b93u, 0x000027c4u, 0x0004002bu, 0x00000008u, 0x00000b94u, 0xfffffe78u, 0x0005002cu, 0x0000005fu, 0x00000b95u, 0x00000b93u, 0x00000b94u, 0x0004002bu, 0x00000008u, 0x00000b96u, 0x00002762u, 0x0004002bu, 0x00000008u, 0x00000b97u, 0xfffffe80u, 0x0005002cu, 0x0000005fu, 0x00000b98u, 0x00000b96u, 0x00000b97u, 0x0004002bu, 0x00000008u, 0x00000b99u, 0x00002702u, 0x0004002bu, 0x00000008u, 0x00000b9au, 0xfffffe88u, 0x0005002cu, 0x0000005fu, 0x00000b9bu, 0x00000b99u, 0x00000b9au, 0x0004002bu, 0x00000008u, 0x00000b9cu, 0x000026a4u, 0x0004002bu, 0x00000008u, 0x00000b9du, 0xfffffe90u, 0x0005002cu, 0x0000005fu, 0x00000b9eu, 0x00000b9cu, 0x00000b9du, 0x0004002bu, 0x00000008u, 0x00000b9fu, 0x00002648u, 0x0004002bu, 0x00000008u, 0x00000ba0u, 0xfffffe94u, 0x0005002cu, 0x0000005fu, 0x00000ba1u, 0x00000b9fu, 0x00000ba0u, 0x0004002bu, 0x00000008u, 0x00000ba2u, 0x000025edu, 0x0004002bu, 0x00000008u, 0x00000ba3u, 0xfffffe9cu, 0x0005002cu, 0x0000005fu, 0x00000ba4u, 0x00000ba2u, 0x00000ba3u, 0x0004002bu, 0x00000008u, 0x00000ba5u, 0x00002594u, 0x0004002bu, 0x00000008u, 0x00000ba6u, 0xfffffea4u, 0x0005002cu, 0x0000005fu, 0x00000ba7u, 0x00000ba5u, 0x00000ba6u, 0x0004002bu, 0x00000008u, 0x00000ba8u, 0x0000253du, 0x0004002bu, 0x00000008u, 0x00000ba9u, 0xfffffea8u, 0x0005002cu, 0x0000005fu, 0x00000baau, 0x00000ba8u, 0x00000ba9u, 0x0004002bu, 0x00000008u, 0x00000babu, 0x000024e7u, 0x0004002bu, 0x00000008u, 0x00000bacu, 0xfffffeacu, 0x0005002cu, 0x0000005fu, 0x00000badu, 0x00000babu, 0x00000bacu, 0x0004002bu, 0x00000008u, 0x00000baeu, 0x00002492u, 0x0004002bu, 0x00000008u, 0x00000bafu, 0xfffffeb4u, 0x0005002cu, 0x0000005fu, 0x00000bb0u, 0x00000baeu, 0x00000bafu, 0x0004002bu, 0x00000008u, 0x00000bb1u, 0x0000243fu, 0x0004002bu, 0x00000008u, 0x00000bb2u, 0xfffffebcu, 0x0005002cu, 0x0000005fu, 0x00000bb3u, 0x00000bb1u, 0x00000bb2u, 0x0004002bu, 0x00000008u, 0x00000bb4u, 0x000023eeu, 0x0004002bu, 0x00000008u, 0x00000bb5u, 0xfffffec0u, 0x0005002cu, 0x0000005fu, 0x00000bb6u, 0x00000bb4u, 0x00000bb5u, 0x0004002bu, 0x00000008u, 0x00000bb7u, 0x0000239eu, 0x0004002bu, 0x00000008u, 0x00000bb8u, 0xfffffec4u, 0x0005002cu, 0x0000005fu, 0x00000bb9u, 0x00000bb7u, 0x00000bb8u, 0x0004002bu, 0x00000008u, 0x00000bbau, 0x0000234fu, 0x0004002bu, 0x00000008u, 0x00000bbbu, 0xfffffeccu, 0x0005002cu, 0x0000005fu, 0x00000bbcu, 0x00000bbau, 0x00000bbbu, 0x0004002bu, 0x00000008u, 0x00000bbdu, 0x00002302u, 0x0004002bu, 0x00000008u, 0x00000bbeu, 0xfffffed0u, 0x0005002cu, 0x0000005fu, 0x00000bbfu, 0x00000bbdu, 0x00000bbeu, 0x0004002bu, 0x00000008u, 0x00000bc0u, 0x000022b6u, 0x0004002bu, 0x00000008u, 0x00000bc1u, 0xfffffed8u, 0x0005002cu, 0x0000005fu, 0x00000bc2u, 0x00000bc0u, 0x00000bc1u, 0x0004002bu, 0x00000008u, 0x00000bc3u, 0x0000226cu, 0x0005002cu, 0x0000005fu, 0x00000bc4u, 0x00000bc3u, 0x00000bc1u, 0x0004002bu, 0x00000008u, 0x00000bc5u, 0x00002222u, 0x0004002bu, 0x00000008u, 0x00000bc6u, 0xfffffee0u, 0x0005002cu, 0x0000005fu, 0x00000bc7u, 0x00000bc5u, 0x00000bc6u, 0x0004002bu, 0x00000008u, 0x00000bc8u, 0x000021dau, 0x0004002bu, 0x00000008u, 0x00000bc9u, 0xfffffee4u, 0x0005002cu, 0x0000005fu, 0x00000bcau, 0x00000bc8u, 0x00000bc9u, 0x0004002bu, 0x00000008u, 0x00000bcbu, 0x00002193u, 0x0004002bu, 0x00000008u, 0x00000bccu, 0xfffffee8u, 0x0005002cu, 0x0000005fu, 0x00000bcdu, 0x00000bcbu, 0x00000bccu, 0x0004002bu, 0x00000008u, 0x00000bceu, 0x0000214du, 0x0004002bu, 0x00000008u, 0x00000bcfu, 0xfffffeecu, 0x0005002cu, 0x0000005fu, 0x00000bd0u, 0x00000bceu, 0x00000bcfu, 0x0004002bu, 0x00000008u, 0x00000bd1u, 0x00002108u, 0x0004002bu, 0x00000008u, 0x00000bd2u, 0xfffffef4u, 0x0005002cu, 0x0000005fu, 0x00000bd3u, 0x00000bd1u, 0x00000bd2u, 0x0004002bu, 0x00000008u, 0x00000bd4u, 0x000020c5u, 0x0005002cu, 0x0000005fu, 0x00000bd5u, 0x00000bd4u, 0x00000bd2u, 0x0004002bu, 0x00000008u, 0x00000bd6u, 0x00002082u, 0x0004002bu, 0x00000008u, 0x00000bd7u, 0xfffffefcu, 0x0005002cu, 0x0000005fu, 0x00000bd8u, 0x00000bd6u, 0x00000bd7u, 0x0004002bu, 0x00000008u, 0x00000bd9u, 0x00002041u, 0x0005002cu, 0x0000005fu, 0x00000bdau, 0x00000bd9u, 0x00000bd7u, 0x0043002cu, 0x00000b1du, 0x00000bdbu, 0x00000b20u, 0x00000b23u, 0x00000b26u, 0x00000b29u, 0x00000b2cu, 0x00000b2fu, 0x00000b32u, 0x00000b35u, 0x00000b38u, 0x00000b3bu, 0x00000b3eu, 0x00000b41u, 0x00000b44u, 0x00000b47u, 0x00000b4au, 0x00000b4du, 0x00000b50u, 0x00000b53u, 0x00000b56u, 0x00000b59u, 0x00000b5cu, 0x00000b5fu, 0x00000b62u, 0x00000b65u, 0x00000b68u, 0x00000b6bu, 0x00000b6eu, 0x00000b71u, 0x00000b74u, 0x00000b77u, 0x00000b7au, 0x00000b7du, 0x00000b80u, 0x00000b83u, 0x00000b86u, 0x00000b89u, 0x00000b8cu, 0x00000b8fu, 0x00000b92u, 0x00000b95u, 0x00000b98u, 0x00000b9bu, 0x00000b9eu, 0x00000ba1u, 0x00000ba4u, 0x00000ba7u, 0x00000baau, 0x00000badu, 0x00000bb0u, 0x00000bb3u, 0x00000bb6u, 0x00000bb9u, 0x00000bbcu, 0x00000bbfu, 0x00000bc2u, 0x00000bc4u, 0x00000bc7u, 0x00000bcau, 0x00000bcdu, 0x00000bd0u, 0x00000bd3u, 0x00000bd5u, 0x00000bd8u, 0x00000bdau, 0x00040020u, 0x00000bdeu, 0x00000007u, 0x00000b1du, 0x0004002bu, 0x00000008u, 0x00000bfdu, 0x00007fffu, 0x0004002bu, 0x00000008u, 0x00000c0fu, 0x3fffffffu, 0x0004002bu, 0x00000008u, 0x00000c10u, 0x20000000u, 0x0005002cu, 0x0000005fu, 0x00000c29u, 0x00000203u, 0x00000203u, 0x0004002bu, 0x00000008u, 0x00000c42u, 0xffff8000u, 0x0005002cu, 0x0000005fu, 0x00000c5cu, 0x00000bfdu, 0x00000bfdu, 0x0004002bu, 0x00000008u, 0x00000c5eu, 0xffff0000u, 0x0005002cu, 0x0000005fu, 0x00000c5fu, 0x00000c5eu, 0x00000c5eu, 0x0005002cu, 0x0000005fu, 0x00000c60u, 0x0000055fu, 0x0000055fu, 0x0004002bu, 0x00000008u, 0x00000c65u, 0xffffffe0u, 0x00060034u, 0x00000008u, 0x00000c85u, 0x00000080u, 0x00000215u, 0x0000078du, 0x00060034u, 0x00000008u, 0x00000ca2u, 0x00000080u, 0x0000021bu, 0x0000078du, 0x0006001eu, 0x00000cbeu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x00000cbfu, 0x00000cbeu, 0x00040020u, 0x00000cc0u, 0x00000002u, 0x00000cbfu, 0x0004003bu, 0x00000cc0u, 0x00000cc1u, 0x00000002u, 0x00040020u, 0x00000cc2u, 0x00000002u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000ccfu, 0xffffffffu, 0x00060034u, 0x0000005du, 0x00000d2eu, 0x000000adu, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000008u, 0x00000d84u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000008u, 0x00000d98u, 0x00000080u, 0x00000215u, 0x0000078du, 0x00060034u, 0x00000008u, 0x00000da8u, 0x00000080u, 0x0000021eu, 0x0000078du, 0x0005002cu, 0x0000005fu, 0x00000dcdu, 0x00000203u, 0x00000212u, 0x0004002bu, 0x00000006u, 0x00000e11u, 0x0000000bu, 0x0006002cu, 0x00000353u, 0x00000e12u, 0x00000e11u, 0x000006f4u, 0x00000485u, 0x0004002bu, 0x00000006u, 0x00000e14u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000e4bu, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x00000e5fu, 0x00001000u, 0x0004001cu, 0x00000e60u, 0x00000229u, 0x00000e5fu, 0x0003001eu, 0x00000e61u, 0x00000e60u, 0x0003001du, 0x00000e62u, 0x00000e61u, 0x0003001eu, 0x00000e63u, 0x00000e62u, 0x00040020u, 0x00000e64u, 0x0000000cu, 0x00000e63u, 0x0004003bu, 0x00000e64u, 0x00000e65u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000e6eu, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000ea5u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000efdu, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000f26u, 0x00000800u, 0x0004001cu, 0x00000f27u, 0x0000022bu, 0x00000f26u, 0x0003001eu, 0x00000f28u, 0x00000f27u, 0x0003001du, 0x00000f29u, 0x00000f28u, 0x0003001eu, 0x00000f2au, 0x00000f29u, 0x00040020u, 0x00000f2bu, 0x0000000cu, 0x00000f2au, 0x0004003bu, 0x00000f2bu, 0x00000f2cu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000f2eu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000fccu, 0xfffffffcu, 0x0004002bu, 0x00000008u, 0x00001132u, 0x000003ffu, 0x0004002bu, 0x00000006u, 0x0000119fu, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00001245u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00001268u, 0x00000400u, 0x0004002bu, 0x00000008u, 0x00001357u, 0xffffff01u, 0x0005002cu, 0x0000005fu, 0x00001361u, 0x00000559u, 0x00000559u, 0x0004002bu, 0x00000008u, 0x00001852u, 0xffffff00u, 0x0004002bu, 0x00000008u, 0x00001926u, 0x00000100u, 0x0006002cu, 0x0000003cu, 0x00001927u, 0x00001926u, 0x00001926u, 0x00001926u, 0x00060034u, 0x00000008u, 0x00001afbu, 0x00000082u, 0x00000880u, 0x00000212u, 0x000d001eu, 0x00001b03u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0000022cu, 0x0000022cu, 0x00000008u, 0x00000008u, 0x00000008u, 0x0000022cu, 0x00000229u, 0x00000229u, 0x0003001du, 0x00001b04u, 0x00001b03u, 0x0003001eu, 0x00001b05u, 0x00001b04u, 0x00040020u, 0x00001b06u, 0x0000000cu, 0x00001b05u, 0x0004003bu, 0x00001b06u, 0x00001b07u, 0x0000000cu, 0x00060034u, 0x0000005du, 0x00001b0cu, 0x000000adu, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000008u, 0x00001b14u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00050034u, 0x00000008u, 0x00001b15u, 0x000000c8u, 0x00001b14u, 0x00060034u, 0x00000008u, 0x00001b18u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00050034u, 0x00000008u, 0x00001b19u, 0x000000c8u, 0x00001b18u, 0x00040020u, 0x00001b43u, 0x00000007u, 0x00000014u, 0x0004002bu, 0x00000006u, 0x00001b64u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00001b75u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00001b92u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00001b97u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00001b9cu, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00001ba1u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00001ba6u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00001babu, 0x00080000u, 0x0004002bu, 0x00000006u, 0x00001bb0u, 0x00200000u, 0x0004002bu, 0x00000006u, 0x00001bb5u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x00001bbau, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00001bbfu, 0x00800000u, 0x0004002bu, 0x00000006u, 0x00001bc4u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x00001bc8u, 0x10000000u, 0x00040020u, 0x00001bd2u, 0x00000002u, 0x00000006u, 0x00060034u, 0x0000005du, 0x00001c7fu, 0x000000adu, 0x00000880u, 0x00000212u, 0x00040020u, 0x00001e52u, 0x00000001u, 0x00000353u, 0x0004003bu, 0x00001e52u, 0x00001e53u, 0x00000001u, 0x00040020u, 0x00001e54u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00001e52u, 0x00001e5du, 0x00000001u, 0x00040032u, 0x00000008u, 0x00001e66u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00001e67u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00001e68u, 0x00000001u, 0x00060033u, 0x00000353u, 0x00001e69u, 0x00001e67u, 0x00001e68u, 0x00000485u, 0x00060034u, 0x00000006u, 0x00001e6au, 0x00000051u, 0x00001e69u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00001e6bu, 0x00000080u, 0x00001e6au, 0x00000374u, 0x00060034u, 0x00000008u, 0x00001e6cu, 0x00000087u, 0x00001e66u, 0x00001e6bu, 0x00040032u, 0x00000008u, 0x00001e71u, 0x00000100u, 0x00060034u, 0x00000008u, 0x00001e72u, 0x00000087u, 0x00001e71u, 0x0000037du, 0x0003001du, 0x00001e75u, 0x00000006u, 0x0003001eu, 0x00001e76u, 0x00001e75u, 0x00040020u, 0x00001e77u, 0x0000000cu, 0x00001e76u, 0x0004003bu, 0x00001e77u, 0x00001e78u, 0x0000000cu, 0x0007001eu, 0x00001e7cu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00001e7du, 0x00000009u, 0x00001e7cu, 0x0004003bu, 0x00001e7du, 0x00001e7eu, 0x00000009u, 0x00040020u, 0x00001e7fu, 0x00000009u, 0x00000006u, 0x0003001du, 0x00001ea9u, 0x00000006u, 0x0003001eu, 0x00001eaau, 0x00001ea9u, 0x00040020u, 0x00001eabu, 0x0000000cu, 0x00001eaau, 0x0004003bu, 0x00001eabu, 0x00001eacu, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00001f07u, 0x00000200u, 0x0004002bu, 0x00000008u, 0x00001f08u, 0x00000800u, 0x0004002bu, 0x00000008u, 0x00001f09u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x00001f0au, 0x00002000u, 0x0004002bu, 0x00000008u, 0x00001f0bu, 0x00010000u, 0x0004002bu, 0x00000008u, 0x00001f0cu, 0x00080000u, 0x0004002bu, 0x00000008u, 0x00001f0du, 0x00100000u, 0x0004002bu, 0x00000008u, 0x00001f0eu, 0x00200000u, 0x0004002bu, 0x00000008u, 0x00001f0fu, 0x00400000u, 0x0004002bu, 0x00000008u, 0x00001f10u, 0x00800000u, 0x0004002bu, 0x00000008u, 0x00001f11u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x00001f12u, 0x0000001au, 0x0004002bu, 0x00000008u, 0x00001f13u, 0x10000000u, 0x0004002bu, 0x00000008u, 0x00001f14u, 0x40000000u, 0x0003001du, 0x00001f15u, 0x00000009u, 0x0003001eu, 0x00001f16u, 0x00001f15u, 0x00040020u, 0x00001f17u, 0x0000000cu, 0x00001f16u, 0x0004003bu, 0x00001f17u, 0x00001f18u, 0x0000000cu, 0x0003002eu, 0x00000009u, 0x00006848u, 0x0003002eu, 0x00000006u, 0x0000684bu, 0x0003002eu, 0x00000008u, 0x0000684eu, 0x00030001u, 0x0000003cu, 0x00007a87u, 0x00030001u, 0x0000005fu, 0x00007b5du, 0x00030001u, 0x00000009u, 0x00008285u, 0x00030001u, 0x0000005du, 0x00008d8bu, 0x00030001u, 0x00000008u, 0x0000a6b8u, 0x00030001u, 0x00000008u, 0x0000e9ebu, 0x00030001u, 0x0000003cu, 0x0000ea01u, 0x00030001u, 0x0000003cu, 0x0000ea20u, 0x00030001u, 0x0000005du, 0x0000ea5fu, 0x00030001u, 0x0000005du, 0x0000ea60u, 0x00030001u, 0x0000003cu, 0x0000ea65u, 0x00030001u, 0x00000009u, 0x0000eb11u, 0x00030001u, 0x0000005du, 0x0000ece1u, 0x00030001u, 0x00000009u, 0x0000ed37u, 0x00030001u, 0x00000008u, 0x0000edbbu, 0x0006002cu, 0x00000353u, 0x0000eeaeu, 0x0000069bu, 0x0000069bu, 0x0000069bu, 0x0005002cu, 0x000000a2u, 0x0000eeafu, 0x0000048bu, 0x0000048bu, 0x0006002cu, 0x00000353u, 0x0000eeb0u, 0x0000035bu, 0x0000035bu, 0x0000035bu, 0x0006002cu, 0x00000353u, 0x0000eeb1u, 0x00000361u, 0x00000361u, 0x00000361u, 0x0006002cu, 0x0000003cu, 0x0000eeb2u, 0x00000c65u, 0x00000c65u, 0x00000c65u, 0x0006002cu, 0x0000003cu, 0x0000eeb3u, 0x00000559u, 0x00000559u, 0x00000559u, 0x0007002cu, 0x00000009u, 0x0000eeb4u, 0x00000c65u, 0x00000c65u, 0x00000c65u, 0x00000c65u, 0x0007002cu, 0x00000009u, 0x0000eeb5u, 0x00000283u, 0x00000283u, 0x00000283u, 0x00000283u, 0x0007002cu, 0x00000009u, 0x0000eeb6u, 0x00000623u, 0x00000623u, 0x00000623u, 0x00000623u, 0x0005002cu, 0x0000005fu, 0x0000eeb7u, 0x00000212u, 0x00000212u, 0x0006002cu, 0x0000003cu, 0x0000eeb8u, 0x00000c42u, 0x00000c42u, 0x00000c42u, 0x0005002cu, 0x0000005fu, 0x0000eeb9u, 0x0000021eu, 0x0000021eu, 0x0005002cu, 0x0000005fu, 0x0000eebau, 0x000003aau, 0x000003aau, 0x0005002cu, 0x000000a2u, 0x0000eebbu, 0x0000119fu, 0x0000119fu, 0x0005002cu, 0x000000a2u, 0x0000eebcu, 0x000003c4u, 0x000003c4u, 0x0006002cu, 0x00000353u, 0x0000eebdu, 0x00000e14u, 0x00000e14u, 0x00000e14u, 0x0006002cu, 0x00000353u, 0x0000eebeu, 0x0000048bu, 0x0000048bu, 0x0000048bu, 0x0006002cu, 0x00000353u, 0x0000eebfu, 0x000003c4u, 0x000003c4u, 0x000003c4u, 0x0007002cu, 0x00000009u, 0x0000eec0u, 0x00000215u, 0x00000215u, 0x00000215u, 0x00000215u, 0x0007002cu, 0x00000009u, 0x0000eec1u, 0x0000025eu, 0x0000025eu, 0x0000025eu, 0x0000025eu, 0x0005002cu, 0x0000005fu, 0x0000eec2u, 0x0000037du, 0x0000037du, 0x0007002cu, 0x00000009u, 0x0000eec3u, 0x00000559u, 0x00000559u, 0x00000559u, 0x00000559u, 0x0007002cu, 0x00000009u, 0x0000eec4u, 0x0000021eu, 0x0000021eu, 0x0000021eu, 0x0000021eu, 0x0006002cu, 0x0000003cu, 0x0000eec5u, 0x00000398u, 0x00000398u, 0x00000398u, 0x0006002cu, 0x0000003cu, 0x0000eec6u, 0x00000224u, 0x00000224u, 0x00000224u, 0x0006002cu, 0x0000003cu, 0x0000eec7u, 0x0000025eu, 0x0000025eu, 0x0000025eu, 0x0006002cu, 0x0000003cu, 0x0000eec8u, 0x000003aau, 0x000003aau, 0x000003aau, 0x0006002cu, 0x0000003cu, 0x0000eec9u, 0x0000021eu, 0x0000021eu, 0x0000021eu, 0x0006002cu, 0x0000003cu, 0x0000eecau, 0x00000215u, 0x00000215u, 0x00000215u, 0x0006002cu, 0x0000003cu, 0x0000eecbu, 0x0000040au, 0x0000040au, 0x0000040au, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000003eu, 0x0000789cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000789bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000789au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007899u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007893u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007892u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007891u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007890u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007886u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007885u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007884u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007883u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000784cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000784bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000784au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007849u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007848u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007847u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007846u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007845u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007844u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007843u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000782du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000782cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000782bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000782au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007829u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007828u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007827u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007826u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007825u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007824u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000077edu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000077ecu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077ebu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077eau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077e9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077e8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077e7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077e6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077e5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077e4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000077adu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000077acu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077abu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077aau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077a9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077a8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077a7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077a6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077a5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077a4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007783u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007782u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007781u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007780u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000777fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000777eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000777du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000777cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000777bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000777au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072eau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072ccu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072cbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072cau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072c9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072c8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072c7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072c6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072bfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e3cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e3bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e3au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e39u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e38u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e37u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e36u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e11u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e10u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e0fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e0eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e0du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e0cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e0bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e04u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006df6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006df0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006defu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006deeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006dedu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006da1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006da0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d9fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d9eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d9du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d9cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d9bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d94u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d90u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d8fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d8eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d86u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d85u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d84u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d83u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d82u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d66u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d65u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d64u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d63u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d62u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d61u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d60u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d5fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d5eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d5au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d58u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d4eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d4du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d4cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d4bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d45u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d44u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d43u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d42u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d2eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d2du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d2cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d2bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d2au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d29u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d28u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d27u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d26u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d14u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d13u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d12u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d11u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d10u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d0fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d0eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d0du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d03u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d02u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d01u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d00u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006cffu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006cfeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006cfdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006cfcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ceau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ce9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ce7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006ce6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006ce5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006ce4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006ce3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cc5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cc4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cc3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cc2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cc1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cc0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cbfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cb8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c90u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c8fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c8eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c8du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c8au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c62u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c60u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c5fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c5cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c58u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c55u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c54u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c51u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c50u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c4du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c4cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c49u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c48u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c45u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c44u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c41u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c40u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c3du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c3cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c1cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c1bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c1au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c18u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c17u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c16u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c15u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c14u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c13u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c12u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c11u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c10u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c0fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c0eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006bf0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006befu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006beeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006bedu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006becu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006bebu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006beau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006be9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006babu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006affu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006afcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006afbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006adfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006adcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006adbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ad8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ad7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ad4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ad3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ad0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006acfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006accu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006acbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ac8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ac7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ac4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ac3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ac0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006abfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006abcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006abbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ab8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ab7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ab4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ab3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a95u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a94u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a93u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a92u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a91u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a90u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a8fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006a8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000699du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000699cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006999u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006998u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006995u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006994u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006991u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006990u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000698du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000698cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006989u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006988u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006985u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006984u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006981u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006980u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000697du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000697cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006979u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006978u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006975u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006974u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006971u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006970u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000696du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000696cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006968u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006965u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006964u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006961u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006960u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000695du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000695cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006959u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006958u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000694du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000694cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000694bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000694au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006949u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000693cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000693bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000693au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006939u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006938u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006937u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000692au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006929u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006928u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006927u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006926u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000691au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006919u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006918u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006917u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006916u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006915u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000690au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006909u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006908u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006907u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006906u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068f9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068d7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068c7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068c6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068c5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068c3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068b6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068b5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068b4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068b3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068b2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068b1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068a4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068a3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068a2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068a1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068a0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006894u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006893u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006892u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006891u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006890u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000688fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006885u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006884u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006883u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006882u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006881u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006877u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006876u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006875u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006874u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006873u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006861u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006860u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000685fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000685eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000685du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006857u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006856u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006855u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006854u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006853u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000684du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000684cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000684au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006849u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006828u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006827u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006826u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006825u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006824u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006823u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006822u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006821u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006820u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000681fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000681eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000681du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000681cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000681bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000681au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000680au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006809u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006808u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006807u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006806u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006805u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006804u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000067dbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000067dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000067ddu, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x000066edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066efu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000066f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066f1u, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x000066f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000066b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000066b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006678u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00006679u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000667au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000667bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006650u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006638u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006639u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000663au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000663bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000663cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006617u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006618u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065efu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065f0u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065f1u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065f2u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065f3u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x0000651fu, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003du, 0x00006520u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006521u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006522u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006523u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006524u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006525u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006526u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006527u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x0000644fu, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003du, 0x00006450u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006451u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006452u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006453u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006454u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006455u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006456u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006457u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000644bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006442u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000643fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006429u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000642au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000642bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000642cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000642du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000642eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006374u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006375u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006376u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006377u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006378u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006379u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000637au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000637bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000637cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000637du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000637eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000637fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006380u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006381u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006382u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006383u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006384u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006385u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006386u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006387u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006352u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006353u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006354u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006355u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006211u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006212u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006213u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006214u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006215u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006216u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006218u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000621au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000621bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000621cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000621du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000621eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000621fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006220u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006221u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006222u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006223u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006224u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006225u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006226u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006227u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006228u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006229u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000622au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000622bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000622cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000622du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000622eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000622fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006230u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006231u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006232u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006233u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006234u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006235u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006236u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006237u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006239u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000623bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000623cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000623du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000623eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000623fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006240u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006241u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006242u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006244u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006245u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006246u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006247u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006248u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006249u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000624au, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000624bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000624cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000624du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000624eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000624fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006250u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006251u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006252u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006253u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061d9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000061dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061dcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000061a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061a4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000061a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006168u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00006169u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000616au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000616bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060dfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060e4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060e7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060e8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060e9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000060d9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060c9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060c2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060bbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060b4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006090u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006091u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006092u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006093u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006094u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000605eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000605fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006060u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006012u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006013u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006014u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005fd9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005fdau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005fdbu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005fa3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005fa4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005fa5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f4bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f4du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f4eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f4fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f51u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f52u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f53u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f55u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f56u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f57u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f5au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f5bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f5cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f5du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f5eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f5fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f60u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f62u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f63u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f46u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f36u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f2fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f28u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f21u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005efdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005efeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005effu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f00u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f01u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005ecbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005eccu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005ecdu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005e7fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005e80u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005e81u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005e46u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005e47u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005e48u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005e10u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005e11u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005e12u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005db8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dbau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dbbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dbcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dbeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dbfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dc0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dc4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dc8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dc9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dcau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dcbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dccu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dcdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dceu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dcfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dd0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005db2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dabu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005da4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d9du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d79u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d7au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d7bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d7cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d7du, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005d47u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005d48u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d49u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005cfbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005cfcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005cfdu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005cc2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005cc3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005cc4u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005c8cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c8du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c8eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c33u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c35u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c36u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c37u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c39u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c3au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c3bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c3du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c3eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c3fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c41u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c42u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c43u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c44u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c45u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c46u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c47u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c48u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c49u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c4au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c4bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c4cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c2eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c2bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c28u, 0x00000007u, 0x0004003bu, 0x000003d0u, 0x00005becu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bedu, 0x00000007u, 0x0004003bu, 0x000003d0u, 0x00005beeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005bb4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bb5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bb6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bb7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bb8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005bb9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005b7bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b7cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b7du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b7eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b7fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b80u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005b42u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b43u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b44u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b45u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b46u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b21u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005b22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005affu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005adau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005adbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005adcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005ab9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a87u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a55u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a23u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059f1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000059f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059c6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000059c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000599au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000599bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000599cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000599du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005970u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005971u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005972u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005973u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005946u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005947u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005948u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005949u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000591fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058f4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000058f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058cau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000058cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000589eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000589fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058a0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000058a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000588eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000588fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005890u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005869u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000586au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000586bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000586cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000586du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005859u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000585au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000585bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005834u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005835u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005836u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005837u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005838u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005824u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005825u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005826u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005800u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005801u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005802u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005803u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057f0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000057f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057cdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000057ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005793u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005794u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005795u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005796u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005797u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005798u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000575cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000575du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000575eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000575fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005760u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005761u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005725u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005726u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005727u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005728u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005729u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000572au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056f2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000056f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056b1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000056b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000566cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000566du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000566eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000566fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005670u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005671u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000562bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000562cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000562du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000562eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000562fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005630u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055eeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000055efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055c9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000055cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055a6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000055a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005581u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005582u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005583u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005584u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000555eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000555fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005560u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005561u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000552cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000552du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000552eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000552fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005530u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054fdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000054feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054cbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000054ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005496u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005497u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005498u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005499u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000549au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000546cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000546du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000546eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000546fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005442u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005444u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005445u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005418u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005419u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000541au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000541bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053f0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000053f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053a7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053a8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053a9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053aau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053abu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000053acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005358u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005359u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000535du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000535eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000535fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005360u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005361u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005310u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005311u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005312u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005313u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005314u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005315u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005316u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052c6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052c7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052c8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052c9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052cau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000052cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000528cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000528du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000528eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000528fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005290u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005256u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005257u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005258u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005259u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000525au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005220u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005221u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005222u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005223u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005224u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051edu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051eeu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000051d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051d1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051aeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051afu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00005191u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005192u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005193u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000516cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000516du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000516eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000516fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005170u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00005152u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005153u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005154u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000512du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000512eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000512fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005130u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005131u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00005113u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005114u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005115u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050f1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000050f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050cdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000050ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050aau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000050abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005085u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005086u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005087u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005088u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005062u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005063u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005064u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005065u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005030u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005031u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005032u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005033u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005034u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ffeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005000u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005001u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005002u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fcfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004fd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f9du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f9eu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004f80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f81u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f71u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f39u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f3cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f3du, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004f1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f1du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f0du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ed6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ed9u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004eb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ebau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004eaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e71u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e74u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e75u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004e54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e55u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e45u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e0du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e10u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e11u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004df0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004df2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004de2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d9bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d9eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d9fu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004d7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d7eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d6eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d28u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d2bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d2cu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004d0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d0bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004cfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004cb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cb8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004cb9u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004c97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c98u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c88u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c42u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c45u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c46u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004c24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c25u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c15u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bdau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004bdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bddu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004bdeu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004bbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bbeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004bbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004badu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004baeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004bafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b73u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b76u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b77u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004b56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b57u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b47u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b0cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b0fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b10u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004aefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004af0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004af1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004adfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ae0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ae1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aa4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aa5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004aa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aa8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004aa9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a86u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a87u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a6au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a6bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a4eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a4fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a32u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a33u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004a03u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a04u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000049d4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000049d5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000044dbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044dcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044ddu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044deu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044dfu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000044e0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000044e5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044e9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044eau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044ecu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044edu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044efu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000044f4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000044f5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000044f6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000044f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044f8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000044f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044fbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000044fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044ffu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004500u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004501u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004503u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004504u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004505u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004506u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004507u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004508u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004509u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000450cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004510u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004511u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004513u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004515u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004516u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004517u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004518u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000451bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000451eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004520u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004521u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004522u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004523u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004524u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004526u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004527u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004528u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004529u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000452au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000452du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004530u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004532u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004533u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004534u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004535u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004536u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004538u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004539u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000453cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000453fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004540u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004541u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004542u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004544u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004545u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004546u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004547u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000454au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000454bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000454du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000454eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004550u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004551u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004553u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004554u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004556u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004557u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004559u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000455au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000455du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004560u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004562u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004563u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004565u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004566u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004568u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004569u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000456bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000456cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000456eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000456fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004571u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004572u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004574u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004575u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004577u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004578u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004579u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000457au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000457cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000457du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000457eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004580u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004581u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004582u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004584u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004585u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004586u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004588u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004589u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000458du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004590u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004591u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004592u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004594u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004595u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004596u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004598u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004599u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000459du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045abu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045aeu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045bau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045bdu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045ccu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045cfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045dbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045deu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045eau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045edu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045fcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045ffu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004602u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004603u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004605u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004606u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004607u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004608u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004609u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000460au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000460bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000460cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000460du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000460eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000460fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004610u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004611u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004612u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004613u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004614u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004615u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004616u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004617u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004618u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004619u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000461au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000461bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004467u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004468u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004469u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000446au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000446bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000446cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004464u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004441u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004442u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004443u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004444u, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x00004445u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004446u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004447u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043deu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000043dfu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043e0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043e1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043e2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043e3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043e4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043e5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043e6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043e7u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000043bdu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043beu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000043bfu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000043c0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000043c1u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000043c2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043c3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043bau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004397u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004398u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004399u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000439au, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x0000439bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000439cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000439du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004334u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004335u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004336u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004337u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004338u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004339u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000433au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000433bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000433cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000433du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000042fcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000042fdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000042feu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000042ffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004300u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004301u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000042c3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042c4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042c5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042c6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042c7u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042c8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000428au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000428bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000428cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000428du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000428eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000428fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004267u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004268u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004269u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000426au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004244u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004245u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004246u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004247u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004221u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004222u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004223u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004224u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004200u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004201u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041cfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000041d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000419au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000419bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000419cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000419du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000419eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004168u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004169u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000416au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000416bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000416cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004136u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004137u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004138u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004139u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000413au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000410cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000410du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000410eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000410fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000040e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040bau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000040bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000408eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000408fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004090u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004091u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004064u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004065u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004066u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004067u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000403au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000403bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000403cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000403du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004010u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004011u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004012u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004013u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fe6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fe7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fe8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fe9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fd7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fb4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fa1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fa2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f6du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f4au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f38u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f15u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003edcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003edeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003edfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003ee0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003ea9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e71u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003e72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e3au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003e3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003dfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003db9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d77u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003d78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d36u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d11u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003d12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ceeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003cefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ccau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ccbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003cccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ca6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ca7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ca8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003ca9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c77u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003c78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c45u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003c46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c13u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003c14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003be0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003be1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003be2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bb6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003bb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b8cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b62u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b38u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aefu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003af0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003af1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003af2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003af3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003af4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aa0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aa1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aa4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003aa5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003aa6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003aa7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003aa8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003aa9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a5au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a5bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a5cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a5du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003a5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a0eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a0fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a10u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a11u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a12u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003a13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039d7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000039d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039a1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000039a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003968u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000396au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000396bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000396cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003932u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003933u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003934u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003935u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003936u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003918u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003919u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000391au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038f6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000038f7u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000038d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038dau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000038dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000038b8u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000389au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000389bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000389cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003875u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003876u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003877u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003878u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003879u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000385bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000385cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000385du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003836u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003837u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003838u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003839u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000383au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003813u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003814u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003815u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003816u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000037f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037cfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000037d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037acu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000037adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003778u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003779u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000377cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003746u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003747u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003748u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003749u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000374au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003714u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003715u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003716u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003717u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003718u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000036e6u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000036c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036c9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000036cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036b9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000036bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000367eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000367fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003680u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003681u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003682u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003683u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003684u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003685u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003664u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003665u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003666u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003654u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003655u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003656u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000361au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000361bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000361cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000361du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000361eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000361fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003620u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003621u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003601u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003602u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035f1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000035f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000035bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035bcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000035bdu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000359cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000359du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000359eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000358cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000358du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000358eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003552u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003553u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003554u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003555u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003556u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003557u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003558u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003559u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003539u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000353au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003528u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003529u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000352au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034e3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034e6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034e7u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000034c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034b6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000346cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000346du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000346eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000346fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003470u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003471u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003472u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003473u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003474u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003453u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003454u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003442u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003443u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033fdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000033feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003400u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003401u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000033dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000033e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033d0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000033d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003386u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003387u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003388u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003389u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000338au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000338bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000338cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000338du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000338eu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000336cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000336du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000336eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000335cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000335du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000335eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000331fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003320u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003321u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003322u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003323u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003324u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003325u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003326u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003305u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003306u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003307u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032f6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032bbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032beu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032bfu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000329eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000328eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000328fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003290u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003251u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003252u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003253u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003254u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003255u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003256u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003257u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003258u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003237u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003238u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003239u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003227u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003228u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003229u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031edu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000031eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031f0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000031f1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031ceu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031cfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031b2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031b3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003196u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003197u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000317au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000317bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000314bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000314cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000311cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000311du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c23u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c24u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c25u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c26u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c27u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c28u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c29u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c2au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c2bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c2cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002c2du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c2eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c2fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c31u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c32u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c34u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c35u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c37u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c38u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c3au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c3bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c3cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002c3du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002c3eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c40u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c43u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c47u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c48u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c50u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c53u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c57u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c58u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c62u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c65u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c68u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c6bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c6eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c71u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c74u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c77u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c80u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c83u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c86u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c89u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c8cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c8fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c92u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c95u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c98u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ca2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ca5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ca8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002caau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cadu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002caeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cbcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cbfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ccau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cccu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ccdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ce1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ce5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ceau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cedu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ceeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cf1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cf4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cf7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cfdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cffu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d02u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d05u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d08u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d11u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d14u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d17u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d20u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d23u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d26u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d29u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d32u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d35u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d38u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d41u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d44u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d47u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d4eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d4fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d50u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d51u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d52u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d53u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002d54u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d55u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d56u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d57u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d58u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d59u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d60u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d61u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d62u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d63u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002b5au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002b5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b5cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b5du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b5eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b5fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b60u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b4fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b4cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b49u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b46u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b23u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b24u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b25u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b26u, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x00002b27u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b28u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b29u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ac0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002ac1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ac2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ac3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ac4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ac5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ac6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ac7u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ac8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ac9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a9du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a9eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a9fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002aa0u, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x00002aa1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002aa2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002aa3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a3au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002a3bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a3cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a3du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a3eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a3fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a40u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a41u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a42u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a43u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a17u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a18u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a19u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a1au, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x00002a1bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a1cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a1du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029b4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000029b5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029b6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029b7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029b8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029b9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029bau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029bbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029bcu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029bdu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000291cu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000291du, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000291eu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000291fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002920u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002921u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002922u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002923u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002924u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002925u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002926u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002927u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002928u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002929u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000292au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000292bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000292cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000290cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002903u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002904u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000028c0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000028c1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000028c2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000028c3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000028c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000028c5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000283bu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000283cu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000283du, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000283eu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000283fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002840u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002841u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002842u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002843u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002844u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000281fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002820u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002803u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002804u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000027e7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000027e8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000027c3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000027c4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000027c5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000026afu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000026b0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026b1u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000026b2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026b3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000026b4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026b6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026b7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026bau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000026bbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000026bcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026bdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026beu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026bfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026c8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002693u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002694u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002677u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002678u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000265bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000265cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002637u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002638u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002639u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002523u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002524u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002525u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002526u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002527u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002528u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000252au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000252bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000252du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000252eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000252fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002530u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002531u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002532u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002533u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002534u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002536u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002537u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002539u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000253du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000250du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024f7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024aau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024abu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024acu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024adu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024aeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024afu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024b2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000024b3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024b4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024b5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024b8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000024b9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024bau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024bbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024bcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024bdu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000246bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002448u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002449u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000244au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000244bu, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x0000244cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000244du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000244eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023e5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000023e6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023e7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023e8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023e9u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023eau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023ebu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023ecu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023edu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023eeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023a6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023a7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023a8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023a9u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000023aau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000023abu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000023acu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000023adu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000023aeu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00002385u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x00001fddu, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000005eu, 0x00001fdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe6u, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00001fe7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001febu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fecu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001fedu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001feeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001fefu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ff0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ff1u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ff9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ffau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ffbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ffcu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ffdu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ffeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001fffu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002000u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002001u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002002u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002003u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002004u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002005u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002006u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002007u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002008u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000200au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000200bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000200cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000200fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002010u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002012u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002013u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002014u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002015u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002016u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002017u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002018u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002019u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000201bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000201cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000201eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000201fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002020u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002021u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002022u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002023u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002024u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002025u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002026u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002027u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002029u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000202au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000202bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000202cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000202du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000202eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000202fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002030u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002031u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002032u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002033u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002034u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002035u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002036u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002037u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002038u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002039u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000203au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000203bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000203cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000203du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000203eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000203fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002040u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002041u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002042u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002043u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002044u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002045u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002046u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002047u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002048u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002049u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000204au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000204bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000204cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000204du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000204eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000204fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002050u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002051u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002052u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002053u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002054u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002056u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002058u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002059u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000205bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000205cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000205du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000205eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000205fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002060u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002061u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002062u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002063u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002064u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002065u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002066u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002067u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002068u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002069u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206au, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000206bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206cu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000206du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000206eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000206fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002070u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002071u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002072u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002073u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002074u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002075u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002077u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002079u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000207au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002080u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002081u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002082u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002083u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002084u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002085u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002086u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002087u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002088u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002089u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000208au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000208cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000208eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000208fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002090u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002091u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002092u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002093u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002094u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002095u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002096u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002097u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002099u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000209au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000209bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000209cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000209du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000209eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020a1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020a3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020a4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020a5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020a6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020a7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020a8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001fc5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001f5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f5du, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00001f5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f60u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001f26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f2cu, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x00001f1bu, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003eu, 0x00001e51u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e58u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001e5cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e74u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001e88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e94u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ea8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001eb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ec2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ec9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ecbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ecdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ee9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001eeau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001eeeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ef0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ef2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001ef7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001efau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001efdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f03u, 0x00000007u, 0x000300f7u, 0x00001f19u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00001f1au, 0x000200f8u, 0x00001f1au, 0x0003003eu, 0x00000202u, 0x00000203u, 0x00050041u, 0x00001e54u, 0x00001e55u, 0x00001e53u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001e56u, 0x00001e55u, 0x0004007cu, 0x00000008u, 0x00001e57u, 0x00001e56u, 0x0003003eu, 0x00001e51u, 0x00001e57u, 0x00050041u, 0x00001e54u, 0x00001e59u, 0x00001e53u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001e5au, 0x00001e59u, 0x0004007cu, 0x00000008u, 0x00001e5bu, 0x00001e5au, 0x0003003eu, 0x00001e58u, 0x00001e5bu, 0x0004003du, 0x00000353u, 0x00001e5eu, 0x00001e5du, 0x0007004fu, 0x000000a2u, 0x00001e5fu, 0x00001e5eu, 0x00001e5eu, 0x00000000u, 0x00000001u, 0x0004007cu, 0x0000005fu, 0x00001e60u, 0x00001e5fu, 0x0003003eu, 0x00001e5cu, 0x00001e60u, 0x00050041u, 0x0000003eu, 0x00001e62u, 0x00001e5cu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001e63u, 0x00001e62u, 0x00050041u, 0x0000003eu, 0x00001e64u, 0x00001e5cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001e65u, 0x00001e64u, 0x00050084u, 0x00000008u, 0x00001e6du, 0x00001e65u, 0x00001e6cu, 0x00050080u, 0x00000008u, 0x00001e6eu, 0x00001e63u, 0x00001e6du, 0x0003003eu, 0x00001e61u, 0x00001e6eu, 0x00050084u, 0x00000008u, 0x00001e73u, 0x00001e6eu, 0x00001e72u, 0x0003003eu, 0x00001e6fu, 0x00001e73u, 0x00060041u, 0x0000026bu, 0x00001e7au, 0x00001e78u, 0x00000203u, 0x00001e6eu, 0x0004003du, 0x00000006u, 0x00001e7bu, 0x00001e7au, 0x00050041u, 0x00001e7fu, 0x00001e80u, 0x00001e7eu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001e81u, 0x00001e80u, 0x000500c7u, 0x00000006u, 0x00001e82u, 0x00001e7bu, 0x00001e81u, 0x0003003eu, 0x00001e74u, 0x00001e82u, 0x000500aau, 0x0000005du, 0x00001e84u, 0x00001e82u, 0x00000374u, 0x000300f7u, 0x00001e86u, 0x00000000u, 0x000400fau, 0x00001e84u, 0x00001e85u, 0x00001e86u, 0x000200f8u, 0x00001e85u, 0x0003003eu, 0x00001f1bu, 0x0000055eu, 0x000200f9u, 0x00001f19u, 0x000200f8u, 0x00001e86u, 0x0004003du, 0x00000353u, 0x00001e89u, 0x00001e53u, 0x0007004fu, 0x000000a2u, 0x00001e8au, 0x00001e89u, 0x00001e89u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001e88u, 0x00001e8au, 0x00050041u, 0x00001e7fu, 0x00001e8cu, 0x00001e7eu, 0x00000215u, 0x0004003du, 0x00000006u, 0x00001e8du, 0x00001e8cu, 0x0003003eu, 0x00001e8bu, 0x00001e8du, 0x00050041u, 0x00001e7fu, 0x00001e8fu, 0x00001e7eu, 0x00000218u, 0x0004003du, 0x00000006u, 0x00001e90u, 0x00001e8fu, 0x0003003eu, 0x00001e8eu, 0x00001e90u, 0x00050041u, 0x00001e7fu, 0x00001e92u, 0x00001e7eu, 0x00000203u, 0x0004003du, 0x00000006u, 0x00001e93u, 0x00001e92u, 0x0003003eu, 0x00001e91u, 0x00001e93u, 0x00050041u, 0x00001e7fu, 0x00001e95u, 0x00001e7eu, 0x00000212u, 0x0004003du, 0x00000006u, 0x00001e96u, 0x00001e95u, 0x0003003eu, 0x00001e94u, 0x00001e96u, 0x0003003eu, 0x00000752u, 0x00000543u, 0x0003003eu, 0x00000854u, 0x00000543u, 0x0004003du, 0x000000a2u, 0x00001f2du, 0x00001e88u, 0x00050050u, 0x000000a2u, 0x00001f30u, 0x00001e8du, 0x00001e90u, 0x000500b0u, 0x00000879u, 0x00001f31u, 0x00001f2du, 0x00001f30u, 0x0004009bu, 0x0000005du, 0x00001f32u, 0x00001f31u, 0x000300f7u, 0x00001f33u, 0x00000000u, 0x000400fau, 0x00001f32u, 0x00001f34u, 0x00001f33u, 0x000200f8u, 0x00001f34u, 0x0004003du, 0x000000a2u, 0x00001f35u, 0x00001e88u, 0x00050050u, 0x000000a2u, 0x00001f36u, 0x00000882u, 0x00000882u, 0x000500c7u, 0x000000a2u, 0x00001f37u, 0x00001f35u, 0x00001f36u, 0x0003003eu, 0x00001f26u, 0x00001f37u, 0x0004003du, 0x000000a2u, 0x00001f38u, 0x00001e88u, 0x00050050u, 0x0000005fu, 0x00001f39u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x00001f3au, 0x00001f38u, 0x00001f39u, 0x0003003eu, 0x00001e88u, 0x00001f3au, 0x00050041u, 0x00000007u, 0x00001f3bu, 0x00001f26u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001f3cu, 0x00001f3bu, 0x00050084u, 0x00000006u, 0x00001f3du, 0x00001f3cu, 0x0000088bu, 0x00050041u, 0x00000007u, 0x00001f3eu, 0x00001f26u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001f3fu, 0x00001f3eu, 0x00050080u, 0x00000006u, 0x00001f40u, 0x00001f3du, 0x00001f3fu, 0x0003003eu, 0x00001f27u, 0x00001f40u, 0x000500c2u, 0x00000006u, 0x00001f43u, 0x00001e8du, 0x0000078du, 0x00050041u, 0x00000007u, 0x00001f44u, 0x00001e88u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001f45u, 0x00001f44u, 0x00050084u, 0x00000006u, 0x00001f46u, 0x00001f43u, 0x00001f45u, 0x00050080u, 0x00000006u, 0x00001f47u, 0x00001e93u, 0x00001f46u, 0x00050041u, 0x00000007u, 0x00001f48u, 0x00001e88u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001f49u, 0x00001f48u, 0x00050080u, 0x00000006u, 0x00001f4au, 0x00001f47u, 0x00001f49u, 0x0003003eu, 0x00001f28u, 0x00001f4au, 0x0003003eu, 0x0000089cu, 0x00001f4au, 0x0003003eu, 0x00001f29u, 0x00001f4au, 0x0003003eu, 0x00001f2au, 0x00001f40u, 0x000300f7u, 0x00001f61u, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x00001f61u, 0x00000000u, 0x00001f62u, 0x00000001u, 0x00001f62u, 0x00000002u, 0x00001f63u, 0x00000003u, 0x00001f64u, 0x00000004u, 0x00001f65u, 0x000200f8u, 0x00001f65u, 0x000500c7u, 0x00000006u, 0x00001fb8u, 0x00001f4au, 0x000006cau, 0x0003003eu, 0x00001f29u, 0x00001fb8u, 0x00050084u, 0x00000006u, 0x00001fbau, 0x00001f40u, 0x000006ceu, 0x00050080u, 0x00000006u, 0x00001fbcu, 0x00001fb8u, 0x00001fbau, 0x0003003eu, 0x00001f29u, 0x00001fbcu, 0x00060041u, 0x0000026bu, 0x00001fbeu, 0x000006d6u, 0x00000203u, 0x00001fbcu, 0x0004003du, 0x00000006u, 0x00001fbfu, 0x00001fbeu, 0x0003003eu, 0x00001f60u, 0x00001fbfu, 0x00070050u, 0x00000237u, 0x00001fc1u, 0x00001fbfu, 0x00001fbfu, 0x00001fbfu, 0x00001fbfu, 0x000500c2u, 0x00000237u, 0x00001fc2u, 0x00001fc1u, 0x000006ddu, 0x000500c7u, 0x00000237u, 0x00001fc3u, 0x00001fc2u, 0x000006dfu, 0x0004007cu, 0x00000009u, 0x00001fc4u, 0x00001fc3u, 0x0003003eu, 0x00000671u, 0x00001fc4u, 0x000200f9u, 0x00001f61u, 0x000200f8u, 0x00001f64u, 0x000500c7u, 0x00000006u, 0x00001fa2u, 0x00001f4au, 0x00000681u, 0x0003003eu, 0x00001f29u, 0x00001fa2u, 0x00050084u, 0x00000006u, 0x00001fa4u, 0x00001f40u, 0x000006b3u, 0x00050080u, 0x00000006u, 0x00001fa6u, 0x00001fa2u, 0x00001fa4u, 0x0003003eu, 0x00001f29u, 0x00001fa6u, 0x000500c6u, 0x00000006u, 0x00001fa8u, 0x00001fa6u, 0x00000485u, 0x00060041u, 0x00000270u, 0x00001fa9u, 0x0000068du, 0x00000203u, 0x00001fa8u, 0x0004003du, 0x0000022bu, 0x00001faau, 0x00001fa9u, 0x00040071u, 0x00000006u, 0x00001fabu, 0x00001faau, 0x0003003eu, 0x00001f5fu, 0x00001fabu, 0x000500c2u, 0x00000006u, 0x00001fadu, 0x00001fabu, 0x0000035bu, 0x0004007cu, 0x00000008u, 0x00001faeu, 0x00001fadu, 0x00060050u, 0x0000003cu, 0x00001fafu, 0x00001faeu, 0x00001faeu, 0x00001faeu, 0x000500c7u, 0x00000006u, 0x00001fb1u, 0x00001fabu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00001fb2u, 0x00001fb1u, 0x00070050u, 0x00000009u, 0x00001fb6u, 0x00001faeu, 0x00001faeu, 0x00001faeu, 0x00001fb2u, 0x0003003eu, 0x00000671u, 0x00001fb6u, 0x000200f9u, 0x00001f61u, 0x000200f8u, 0x00001f63u, 0x000500c7u, 0x00000006u, 0x00001f7du, 0x00001f4au, 0x00000681u, 0x0003003eu, 0x00001f29u, 0x00001f7du, 0x00050084u, 0x00000006u, 0x00001f7fu, 0x00001f40u, 0x00000685u, 0x00050080u, 0x00000006u, 0x00001f81u, 0x00001f7du, 0x00001f7fu, 0x0003003eu, 0x00001f29u, 0x00001f81u, 0x000500c6u, 0x00000006u, 0x00001f83u, 0x00001f81u, 0x00000485u, 0x00060041u, 0x00000270u, 0x00001f84u, 0x0000068du, 0x00000203u, 0x00001f83u, 0x0004003du, 0x0000022bu, 0x00001f85u, 0x00001f84u, 0x00040071u, 0x00000006u, 0x00001f86u, 0x00001f85u, 0x0003003eu, 0x00001f5du, 0x00001f86u, 0x000500c2u, 0x00000006u, 0x00001f88u, 0x00001f86u, 0x0000035bu, 0x000500c2u, 0x00000006u, 0x00001f8au, 0x00001f86u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x00001f8cu, 0x00001f86u, 0x000003c4u, 0x00060050u, 0x00000353u, 0x00001f8du, 0x00001f88u, 0x00001f8au, 0x00001f8cu, 0x000500c7u, 0x00000353u, 0x00001f8fu, 0x00001f8du, 0x0000eeaeu, 0x0003003eu, 0x00001f5eu, 0x00001f8fu, 0x0004007cu, 0x0000003cu, 0x00001f91u, 0x00001f8fu, 0x00060041u, 0x00000277u, 0x00001f93u, 0x00000678u, 0x00000203u, 0x00001f81u, 0x0004003du, 0x00000229u, 0x00001f94u, 0x00001f93u, 0x00040071u, 0x00000006u, 0x00001f95u, 0x00001f94u, 0x0004007cu, 0x00000008u, 0x00001f96u, 0x00001f95u, 0x000500c4u, 0x00000008u, 0x00001f97u, 0x00001f96u, 0x0000021eu, 0x000500c7u, 0x00000006u, 0x00001f99u, 0x00001f86u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00001f9au, 0x00001f99u, 0x00000224u, 0x0004007cu, 0x00000008u, 0x00001f9bu, 0x00001f9au, 0x000500c5u, 0x00000008u, 0x00001f9cu, 0x00001f97u, 0x00001f9bu, 0x00050051u, 0x00000008u, 0x00001f9du, 0x00001f91u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001f9eu, 0x00001f91u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001f9fu, 0x00001f91u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001fa0u, 0x00001f9du, 0x00001f9eu, 0x00001f9fu, 0x00001f9cu, 0x0003003eu, 0x00000671u, 0x00001fa0u, 0x000200f9u, 0x00001f61u, 0x000200f8u, 0x00001f62u, 0x000500c7u, 0x00000006u, 0x00001f67u, 0x00001f4au, 0x0000065eu, 0x0003003eu, 0x00001f29u, 0x00001f67u, 0x00050084u, 0x00000006u, 0x00001f69u, 0x00001f40u, 0x0000065du, 0x00050080u, 0x00000006u, 0x00001f6bu, 0x00001f67u, 0x00001f69u, 0x0003003eu, 0x00001f29u, 0x00001f6bu, 0x000500c6u, 0x00000006u, 0x00001f6du, 0x00001f6bu, 0x0000048bu, 0x00060041u, 0x00000277u, 0x00001f6eu, 0x00000669u, 0x00000203u, 0x00001f6du, 0x0004003du, 0x00000229u, 0x00001f6fu, 0x00001f6eu, 0x00040071u, 0x00000006u, 0x00001f70u, 0x00001f6fu, 0x0004007cu, 0x00000008u, 0x00001f71u, 0x00001f70u, 0x0003003eu, 0x00001f5cu, 0x00001f71u, 0x000500c2u, 0x00000006u, 0x00001f76u, 0x00001f6bu, 0x00000212u, 0x00060041u, 0x00000277u, 0x00001f77u, 0x00000678u, 0x00000203u, 0x00001f76u, 0x0004003du, 0x00000229u, 0x00001f78u, 0x00001f77u, 0x00040071u, 0x00000006u, 0x00001f79u, 0x00001f78u, 0x0004007cu, 0x00000008u, 0x00001f7au, 0x00001f79u, 0x00070050u, 0x00000009u, 0x00001f7bu, 0x00001f71u, 0x00001f71u, 0x00001f71u, 0x00001f7au, 0x0003003eu, 0x00000671u, 0x00001f7bu, 0x000200f9u, 0x00001f61u, 0x000200f8u, 0x00001f61u, 0x0004003du, 0x00000006u, 0x00001f53u, 0x00001f44u, 0x00050084u, 0x00000006u, 0x00001f54u, 0x00001f43u, 0x00001f53u, 0x00050080u, 0x00000006u, 0x00001f55u, 0x00001e96u, 0x00001f54u, 0x0004003du, 0x00000006u, 0x00001f57u, 0x00001f48u, 0x00050080u, 0x00000006u, 0x00001f58u, 0x00001f55u, 0x00001f57u, 0x0003003eu, 0x00001f28u, 0x00001f58u, 0x0003003eu, 0x00001f2bu, 0x00001f58u, 0x0003003eu, 0x00001f2cu, 0x00001f40u, 0x000500c7u, 0x00000006u, 0x00001fc7u, 0x00001f58u, 0x00000681u, 0x0003003eu, 0x00001f2bu, 0x00001fc7u, 0x00050084u, 0x00000006u, 0x00001fc9u, 0x00001f40u, 0x00000756u, 0x00050080u, 0x00000006u, 0x00001fcbu, 0x00001fc7u, 0x00001fc9u, 0x0003003eu, 0x00001f2bu, 0x00001fcbu, 0x000500c6u, 0x00000006u, 0x00001fcdu, 0x00001fcbu, 0x00000485u, 0x00060041u, 0x00000270u, 0x00001fceu, 0x0000068du, 0x00000203u, 0x00001fcdu, 0x0004003du, 0x0000022bu, 0x00001fcfu, 0x00001fceu, 0x00040071u, 0x00000006u, 0x00001fd0u, 0x00001fcfu, 0x0004007cu, 0x00000008u, 0x00001fd1u, 0x00001fd0u, 0x0003003eu, 0x00001fc5u, 0x00001fd1u, 0x000500c3u, 0x00000008u, 0x00001fd3u, 0x00001fd1u, 0x00000215u, 0x0003003eu, 0x00000705u, 0x00001fd3u, 0x00060041u, 0x00000277u, 0x00001fd5u, 0x00000678u, 0x00000203u, 0x00001fcbu, 0x0004003du, 0x00000229u, 0x00001fd6u, 0x00001fd5u, 0x00040071u, 0x00000006u, 0x00001fd7u, 0x00001fd6u, 0x0004007cu, 0x00000008u, 0x00001fd8u, 0x00001fd7u, 0x000500c7u, 0x00000008u, 0x00001fdau, 0x00001fd1u, 0x00000218u, 0x000500c4u, 0x00000008u, 0x00001fdbu, 0x00001fdau, 0x00000215u, 0x000500c5u, 0x00000008u, 0x00001fdcu, 0x00001fd8u, 0x00001fdbu, 0x0003003eu, 0x000006e7u, 0x00001fdcu, 0x000200f9u, 0x00001f33u, 0x000200f8u, 0x00001f33u, 0x000200f9u, 0x00001e98u, 0x000200f8u, 0x00001e98u, 0x000700f5u, 0x00000006u, 0x00007a02u, 0x00001e82u, 0x00001f33u, 0x00001ea7u, 0x00001e9bu, 0x000700f5u, 0x0000003cu, 0x0000cd13u, 0x00007a87u, 0x00001f33u, 0x0000cd12u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000cba0u, 0x0000a6b8u, 0x00001f33u, 0x0000cb9fu, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000ca2eu, 0x0000a6b8u, 0x00001f33u, 0x0000ca2du, 0x00001e9bu, 0x000700f5u, 0x0000003cu, 0x0000c809u, 0x00007a87u, 0x00001f33u, 0x0000c808u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000c6a3u, 0x0000a6b8u, 0x00001f33u, 0x0000c6a2u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000c53eu, 0x0000a6b8u, 0x00001f33u, 0x0000c53du, 0x00001e9bu, 0x000700f5u, 0x0000003cu, 0x0000c301u, 0x00007a87u, 0x00001f33u, 0x0000c300u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x0000bddau, 0x00008285u, 0x00001f33u, 0x0000bdd9u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000bcb9u, 0x0000a6b8u, 0x00001f33u, 0x0000bcb8u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000bb98u, 0x0000a6b8u, 0x00001f33u, 0x0000bb97u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000ba4cu, 0x0000a6b8u, 0x00001f33u, 0x0000ba4bu, 0x00001e9bu, 0x000700f5u, 0x0000005du, 0x0000b8b2u, 0x00008d8bu, 0x00001f33u, 0x0000b8b1u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000a6b6u, 0x0000a6b8u, 0x00001f33u, 0x0000a6b5u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x0000a60cu, 0x00008285u, 0x00001f33u, 0x0000a60bu, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x00009b3eu, 0x00008285u, 0x00001f33u, 0x00009b3du, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x00009a5au, 0x00008285u, 0x00001f33u, 0x00009a59u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x00009973u, 0x00008285u, 0x00001f33u, 0x00009972u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x0000988bu, 0x00008285u, 0x00001f33u, 0x0000988au, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x000093beu, 0x00008285u, 0x00001f33u, 0x000093bdu, 0x00001e9bu, 0x000700f5u, 0x0000005du, 0x00008e2cu, 0x00008d8bu, 0x00001f33u, 0x00008e2bu, 0x00001e9bu, 0x000700f5u, 0x0000005du, 0x00008d89u, 0x00008d8bu, 0x00001f33u, 0x00008d88u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x000083f9u, 0x00008285u, 0x00001f33u, 0x000083f8u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x0000837fu, 0x00008285u, 0x00001f33u, 0x0000837eu, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x00008302u, 0x00008285u, 0x00001f33u, 0x00008301u, 0x00001e9bu, 0x000700f5u, 0x00000009u, 0x00008283u, 0x00008285u, 0x00001f33u, 0x00008282u, 0x00001e9bu, 0x000700f5u, 0x0000005fu, 0x00007b7fu, 0x00007b5du, 0x00001f33u, 0x00007b7eu, 0x00001e9bu, 0x000700f5u, 0x0000005fu, 0x00007b5bu, 0x00007b5du, 0x00001f33u, 0x00007b5au, 0x00001e9bu, 0x000700f5u, 0x0000003cu, 0x00007a94u, 0x00007a87u, 0x00001f33u, 0x00007a93u, 0x00001e9bu, 0x000700f5u, 0x0000003cu, 0x00007a85u, 0x00007a87u, 0x00001f33u, 0x00007a84u, 0x00001e9bu, 0x000500abu, 0x0000005du, 0x00001e9eu, 0x00007a02u, 0x00000374u, 0x000400f6u, 0x00001e9au, 0x00001e9bu, 0x00000000u, 0x000400fau, 0x00001e9eu, 0x00001e99u, 0x00001e9au, 0x000200f8u, 0x00001e99u, 0x0006000cu, 0x00000008u, 0x00001ea1u, 0x00000001u, 0x00000049u, 0x00007a02u, 0x0003003eu, 0x00001e9fu, 0x00001ea1u, 0x000500c4u, 0x00000008u, 0x00001ea3u, 0x00000212u, 0x00001ea1u, 0x0004007cu, 0x00000006u, 0x00001ea4u, 0x00001ea3u, 0x000400c8u, 0x00000006u, 0x00001ea5u, 0x00001ea4u, 0x000500c7u, 0x00000006u, 0x00001ea7u, 0x00007a02u, 0x00001ea5u, 0x0003003eu, 0x00001e74u, 0x00001ea7u, 0x00050080u, 0x00000008u, 0x00001eafu, 0x00001e73u, 0x00001ea1u, 0x00060041u, 0x0000026bu, 0x00001eb0u, 0x00001eacu, 0x00000203u, 0x00001eafu, 0x0004003du, 0x00000006u, 0x00001eb1u, 0x00001eb0u, 0x0003003eu, 0x00001ea8u, 0x00001eb1u, 0x000200f9u, 0x00001eb2u, 0x000200f8u, 0x00001eb2u, 0x000700f5u, 0x0000003cu, 0x0000cd12u, 0x0000cd13u, 0x00001e99u, 0x0000e9cau, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000cb9fu, 0x0000cba0u, 0x00001e99u, 0x0000e9afu, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000ca2du, 0x0000ca2eu, 0x00001e99u, 0x0000e994u, 0x00001eb5u, 0x000700f5u, 0x0000003cu, 0x0000c808u, 0x0000c809u, 0x00001e99u, 0x0000e96cu, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000c6a2u, 0x0000c6a3u, 0x00001e99u, 0x0000e944u, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000c53du, 0x0000c53eu, 0x00001e99u, 0x0000e91cu, 0x00001eb5u, 0x000700f5u, 0x0000003cu, 0x0000c300u, 0x0000c301u, 0x00001e99u, 0x0000e8deu, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x0000bdd9u, 0x0000bddau, 0x00001e99u, 0x0000bdd7u, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000bcb8u, 0x0000bcb9u, 0x00001e99u, 0x0000bcb6u, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000bb97u, 0x0000bb98u, 0x00001e99u, 0x0000bb95u, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000ba4bu, 0x0000ba4cu, 0x00001e99u, 0x0000ba49u, 0x00001eb5u, 0x000700f5u, 0x0000005du, 0x0000b8b1u, 0x0000b8b2u, 0x00001e99u, 0x0000e666u, 0x00001eb5u, 0x000700f5u, 0x00000008u, 0x0000a6b5u, 0x0000a6b6u, 0x00001e99u, 0x0000e5d4u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x0000a60bu, 0x0000a60cu, 0x00001e99u, 0x0000e542u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x00009b3du, 0x00009b3eu, 0x00001e99u, 0x0000e4a0u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x00009a59u, 0x00009a5au, 0x00001e99u, 0x0000e400u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x00009972u, 0x00009973u, 0x00001e99u, 0x0000e360u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x0000988au, 0x0000988bu, 0x00001e99u, 0x0000e2c0u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x000093bdu, 0x000093beu, 0x00001e99u, 0x0000e22eu, 0x00001eb5u, 0x000700f5u, 0x0000005du, 0x00008e2bu, 0x00008e2cu, 0x00001e99u, 0x0000e135u, 0x00001eb5u, 0x000700f5u, 0x0000005du, 0x00008d88u, 0x00008d89u, 0x00001e99u, 0x0000e03cu, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x000083f8u, 0x000083f9u, 0x00001e99u, 0x0000df30u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x0000837eu, 0x0000837fu, 0x00001e99u, 0x0000de26u, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x00008301u, 0x00008302u, 0x00001e99u, 0x0000dd1cu, 0x00001eb5u, 0x000700f5u, 0x00000009u, 0x00008282u, 0x00008283u, 0x00001e99u, 0x0000dc12u, 0x00001eb5u, 0x000700f5u, 0x0000005fu, 0x00007b7eu, 0x00007b7fu, 0x00001e99u, 0x0000dab1u, 0x00001eb5u, 0x000700f5u, 0x0000005fu, 0x00007b5au, 0x00007b5bu, 0x00001e99u, 0x0000d950u, 0x00001eb5u, 0x000700f5u, 0x0000003cu, 0x00007a93u, 0x00007a94u, 0x00001e99u, 0x0000d7e3u, 0x00001eb5u, 0x000700f5u, 0x0000003cu, 0x00007a84u, 0x00007a85u, 0x00001e99u, 0x0000d66du, 0x00001eb5u, 0x000700f5u, 0x00000006u, 0x00007a2au, 0x00001eb1u, 0x00001e99u, 0x00001ec1u, 0x00001eb5u, 0x000500abu, 0x0000005du, 0x00001eb8u, 0x00007a2au, 0x00000374u, 0x000400f6u, 0x00001eb4u, 0x00001eb5u, 0x00000000u, 0x000400fau, 0x00001eb8u, 0x00001eb3u, 0x00001eb4u, 0x000200f8u, 0x00001eb3u, 0x0006000cu, 0x00000008u, 0x00001ebbu, 0x00000001u, 0x00000049u, 0x00007a2au, 0x0003003eu, 0x00001eb9u, 0x00001ebbu, 0x000500c4u, 0x00000008u, 0x00001ebdu, 0x00000212u, 0x00001ebbu, 0x0004007cu, 0x00000006u, 0x00001ebeu, 0x00001ebdu, 0x000400c8u, 0x00000006u, 0x00001ebfu, 0x00001ebeu, 0x000500c7u, 0x00000006u, 0x00001ec1u, 0x00007a2au, 0x00001ebfu, 0x0003003eu, 0x00001ea8u, 0x00001ec1u, 0x00050084u, 0x00000008u, 0x00001ec5u, 0x0000037du, 0x00001ea1u, 0x00050080u, 0x00000008u, 0x00001ec6u, 0x00001ebbu, 0x00001ec5u, 0x0004007cu, 0x00000006u, 0x00001ec7u, 0x00001ec6u, 0x0003003eu, 0x00001ec2u, 0x00001ec7u, 0x0003003eu, 0x00001ec9u, 0x00001e57u, 0x0003003eu, 0x00001ecbu, 0x00001e5bu, 0x0003003eu, 0x00001ecdu, 0x00001ec7u, 0x0003003eu, 0x00001fddu, 0x00000543u, 0x000300f7u, 0x000020a9u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x000020aau, 0x000200f8u, 0x000020aau, 0x0003003eu, 0x00001fe0u, 0x00001ec7u, 0x00060041u, 0x00000343u, 0x00002324u, 0x00000341u, 0x00000203u, 0x00001ec7u, 0x0004003du, 0x0000033du, 0x00002325u, 0x00002324u, 0x00050051u, 0x00000008u, 0x00002326u, 0x00002325u, 0x00000000u, 0x0003003eu, 0x00006d42u, 0x00002326u, 0x00050051u, 0x00000008u, 0x00002328u, 0x00002325u, 0x00000001u, 0x0003003eu, 0x00006d43u, 0x00002328u, 0x00050051u, 0x00000008u, 0x0000232au, 0x00002325u, 0x00000002u, 0x0003003eu, 0x00006d44u, 0x0000232au, 0x00050051u, 0x00000008u, 0x0000232cu, 0x00002325u, 0x00000003u, 0x0003003eu, 0x00006d45u, 0x0000232cu, 0x00070050u, 0x00000028u, 0x00006d4au, 0x00002326u, 0x00002328u, 0x0000232au, 0x0000232cu, 0x0003003eu, 0x00006d4bu, 0x00002326u, 0x0003003eu, 0x00006d4cu, 0x00002328u, 0x0003003eu, 0x00006d4du, 0x0000232au, 0x0003003eu, 0x00006d4eu, 0x0000232cu, 0x0003003eu, 0x00006d58u, 0x00002326u, 0x0003003eu, 0x00006d59u, 0x00002328u, 0x0003003eu, 0x00006d5au, 0x0000232au, 0x00050084u, 0x00000008u, 0x000020b0u, 0x00000880u, 0x00002328u, 0x000500b1u, 0x0000005du, 0x000020b1u, 0x00001e5bu, 0x000020b0u, 0x000400a8u, 0x0000005du, 0x000020b2u, 0x000020b1u, 0x000300f7u, 0x000020b3u, 0x00000000u, 0x000400fau, 0x000020b2u, 0x000020b4u, 0x000020b3u, 0x000200f8u, 0x000020b4u, 0x00050084u, 0x00000008u, 0x000020b8u, 0x0000232au, 0x00000880u, 0x00050080u, 0x00000008u, 0x000020b9u, 0x000020b8u, 0x00001afbu, 0x000500adu, 0x0000005du, 0x000020bau, 0x00001e5bu, 0x000020b9u, 0x000200f9u, 0x000020b3u, 0x000200f8u, 0x000020b3u, 0x000700f5u, 0x0000005du, 0x000020bbu, 0x000020b1u, 0x000020aau, 0x000020bau, 0x000020b4u, 0x000300f7u, 0x000020bcu, 0x00000000u, 0x000400fau, 0x000020bbu, 0x000020bdu, 0x000020bcu, 0x000200f8u, 0x000020bdu, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x000020bcu, 0x00070041u, 0x00000277u, 0x000020bfu, 0x00001b07u, 0x00000203u, 0x00001ec7u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000020c0u, 0x000020bfu, 0x00040071u, 0x00000006u, 0x000020c1u, 0x000020c0u, 0x0003003eu, 0x00001fe1u, 0x000020c1u, 0x000300f7u, 0x000020c2u, 0x00000000u, 0x000400fau, 0x00001b0cu, 0x000020c3u, 0x000020c2u, 0x000200f8u, 0x000020c3u, 0x000500c7u, 0x00000006u, 0x000020c5u, 0x000020c1u, 0x00000a31u, 0x000500abu, 0x0000005du, 0x000020c6u, 0x000020c5u, 0x00000374u, 0x000300f7u, 0x000020c7u, 0x00000000u, 0x000400fau, 0x000020c6u, 0x000020c8u, 0x000020c7u, 0x000200f8u, 0x000020c8u, 0x000500c7u, 0x00000008u, 0x000020cau, 0x00001e57u, 0x00001b15u, 0x0003003eu, 0x00001ec9u, 0x000020cau, 0x000500c7u, 0x00000008u, 0x000020ccu, 0x00001e5bu, 0x00001b19u, 0x0003003eu, 0x00001ecbu, 0x000020ccu, 0x000200f9u, 0x000020c7u, 0x000200f8u, 0x000020c7u, 0x000700f5u, 0x00000008u, 0x00007a44u, 0x00001e57u, 0x000020c3u, 0x000020cau, 0x000020c8u, 0x000700f5u, 0x00000008u, 0x00007a3du, 0x00001e5bu, 0x000020c3u, 0x000020ccu, 0x000020c8u, 0x000200f9u, 0x000020c2u, 0x000200f8u, 0x000020c2u, 0x000700f5u, 0x00000008u, 0x00007a43u, 0x00001e57u, 0x000020bcu, 0x00007a44u, 0x000020c7u, 0x000700f5u, 0x00000008u, 0x00007a3cu, 0x00001e5bu, 0x000020bcu, 0x00007a3du, 0x000020c7u, 0x00050084u, 0x00000008u, 0x000020cfu, 0x00000880u, 0x00002326u, 0x00050082u, 0x00000008u, 0x000020d4u, 0x00007a3cu, 0x000020b0u, 0x00050080u, 0x00000008u, 0x000020d5u, 0x000020cfu, 0x000020d4u, 0x0004007cu, 0x00000006u, 0x000020d6u, 0x000020d5u, 0x0003003eu, 0x00001fe3u, 0x000020d6u, 0x00070041u, 0x00000316u, 0x00002331u, 0x00000314u, 0x00000203u, 0x000020d6u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00002332u, 0x00002331u, 0x00070041u, 0x00000316u, 0x00002334u, 0x00000314u, 0x00000203u, 0x000020d6u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00002335u, 0x00002334u, 0x00070041u, 0x0000031du, 0x00002337u, 0x00000314u, 0x00000203u, 0x000020d6u, 0x00000215u, 0x0004003du, 0x0000030fu, 0x00002338u, 0x00002337u, 0x00040071u, 0x00000237u, 0x00002339u, 0x00002338u, 0x0004007cu, 0x00000009u, 0x0000233au, 0x00002339u, 0x00070041u, 0x0000031du, 0x0000233cu, 0x00000314u, 0x00000203u, 0x000020d6u, 0x00000218u, 0x0004003du, 0x0000030fu, 0x0000233du, 0x0000233cu, 0x00040071u, 0x00000237u, 0x0000233eu, 0x0000233du, 0x0004007cu, 0x00000009u, 0x0000233fu, 0x0000233eu, 0x00070041u, 0x000002a8u, 0x00002341u, 0x00000314u, 0x00000203u, 0x000020d6u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x00002342u, 0x00002341u, 0x00070041u, 0x000002a8u, 0x00002344u, 0x00000314u, 0x00000203u, 0x000020d6u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00002345u, 0x00002344u, 0x00070041u, 0x000002a8u, 0x00002347u, 0x00000314u, 0x00000203u, 0x000020d6u, 0x00000221u, 0x0004003du, 0x00000008u, 0x00002348u, 0x00002347u, 0x00070041u, 0x00000331u, 0x0000234au, 0x00000314u, 0x00000203u, 0x000020d6u, 0x00000224u, 0x0004003du, 0x0000022cu, 0x0000234bu, 0x0000234au, 0x00040072u, 0x00000008u, 0x0000234cu, 0x0000234bu, 0x00070041u, 0x00000270u, 0x0000234eu, 0x00000314u, 0x00000203u, 0x000020d6u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x0000234fu, 0x0000234eu, 0x00040071u, 0x00000006u, 0x00002350u, 0x0000234fu, 0x0004007cu, 0x00000008u, 0x00002351u, 0x00002350u, 0x000c0050u, 0x00000023u, 0x00002352u, 0x00002332u, 0x00002335u, 0x0000233au, 0x0000233fu, 0x00002342u, 0x00002345u, 0x00002348u, 0x0000234cu, 0x00002351u, 0x0003003eu, 0x00006d26u, 0x00002332u, 0x0003003eu, 0x00006d27u, 0x00002335u, 0x0003003eu, 0x00006d28u, 0x0000233au, 0x0003003eu, 0x00006d29u, 0x0000233fu, 0x0003003eu, 0x00006d2au, 0x00002342u, 0x0003003eu, 0x00006d2bu, 0x00002345u, 0x0003003eu, 0x00006d2cu, 0x00002348u, 0x0003003eu, 0x00006d2du, 0x0000234cu, 0x0003003eu, 0x00006d2eu, 0x00002351u, 0x0003003eu, 0x00006d5eu, 0x00002332u, 0x0003003eu, 0x00006d5fu, 0x00002335u, 0x0003003eu, 0x00006d60u, 0x0000233au, 0x0003003eu, 0x00006d61u, 0x0000233fu, 0x0003003eu, 0x00006d62u, 0x00002342u, 0x0003003eu, 0x00006d63u, 0x00002345u, 0x0003003eu, 0x00006d64u, 0x00002348u, 0x0003003eu, 0x00006d65u, 0x0000234cu, 0x0003003eu, 0x00006d66u, 0x00002351u, 0x000500aau, 0x0000005du, 0x000020dau, 0x00002351u, 0x00000203u, 0x000300f7u, 0x000020dbu, 0x00000000u, 0x000400fau, 0x000020dau, 0x000020dcu, 0x000020dbu, 0x000200f8u, 0x000020dcu, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x000020dbu, 0x00070041u, 0x00000277u, 0x000020deu, 0x00001b07u, 0x00000203u, 0x00001ec7u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000020dfu, 0x000020deu, 0x00040071u, 0x00000006u, 0x000020e0u, 0x000020dfu, 0x0003003eu, 0x00001fe4u, 0x000020e0u, 0x0003003eu, 0x00001fe6u, 0x00001ec7u, 0x00060041u, 0x0000020au, 0x00002356u, 0x00000208u, 0x00000203u, 0x00001ec7u, 0x0004003du, 0x00000204u, 0x00002357u, 0x00002356u, 0x00050051u, 0x00000009u, 0x00002358u, 0x00002357u, 0x00000000u, 0x0003003eu, 0x00006cfcu, 0x00002358u, 0x00050051u, 0x00000009u, 0x0000235au, 0x00002357u, 0x00000001u, 0x0003003eu, 0x00006cfdu, 0x0000235au, 0x00050051u, 0x00000009u, 0x0000235cu, 0x00002357u, 0x00000002u, 0x0003003eu, 0x00006cfeu, 0x0000235cu, 0x00050051u, 0x00000009u, 0x0000235eu, 0x00002357u, 0x00000003u, 0x0003003eu, 0x00006cffu, 0x0000235eu, 0x00050051u, 0x00000009u, 0x00002360u, 0x00002357u, 0x00000004u, 0x0003003eu, 0x00006d00u, 0x00002360u, 0x00050051u, 0x00000009u, 0x00002362u, 0x00002357u, 0x00000005u, 0x0003003eu, 0x00006d01u, 0x00002362u, 0x00050051u, 0x00000009u, 0x00002364u, 0x00002357u, 0x00000006u, 0x0003003eu, 0x00006d02u, 0x00002364u, 0x00050051u, 0x00000009u, 0x00002366u, 0x00002357u, 0x00000007u, 0x0003003eu, 0x00006d03u, 0x00002366u, 0x000b0050u, 0x0000000au, 0x00006d0cu, 0x00002358u, 0x0000235au, 0x0000235cu, 0x0000235eu, 0x00002360u, 0x00002362u, 0x00002364u, 0x00002366u, 0x0003003eu, 0x00006d0du, 0x00002358u, 0x0003003eu, 0x00006d0eu, 0x0000235au, 0x0003003eu, 0x00006d0fu, 0x0000235cu, 0x0003003eu, 0x00006d10u, 0x0000235eu, 0x0003003eu, 0x00006d11u, 0x00002360u, 0x0003003eu, 0x00006d12u, 0x00002362u, 0x0003003eu, 0x00006d13u, 0x00002364u, 0x0003003eu, 0x00006d14u, 0x00002366u, 0x0003003eu, 0x00006d7au, 0x0000235au, 0x0003003eu, 0x00006d7bu, 0x0000235eu, 0x0003003eu, 0x00006d7cu, 0x00002362u, 0x0003003eu, 0x00006d7du, 0x00002366u, 0x00070041u, 0x00000234u, 0x000020e4u, 0x00000a0bu, 0x00000203u, 0x00001ec7u, 0x00000203u, 0x0004003du, 0x0000022au, 0x000020e5u, 0x000020e4u, 0x00040071u, 0x00000237u, 0x000020e6u, 0x000020e5u, 0x0003003eu, 0x00001fe7u, 0x000020e6u, 0x00050041u, 0x00000007u, 0x000020e7u, 0x00001fe7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000020e8u, 0x000020e7u, 0x0003003eu, 0x00001fe8u, 0x000020e8u, 0x00050041u, 0x00000007u, 0x000020e9u, 0x00001fe7u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000020eau, 0x000020e9u, 0x0003003eu, 0x00001fe9u, 0x000020eau, 0x0003003eu, 0x00001febu, 0x000020e8u, 0x00070041u, 0x00000234u, 0x0000236bu, 0x0000028fu, 0x00000203u, 0x000020e8u, 0x00000203u, 0x0004003du, 0x0000022au, 0x0000236cu, 0x0000236bu, 0x00040071u, 0x00000237u, 0x0000236du, 0x0000236cu, 0x0004007cu, 0x00000009u, 0x0000236eu, 0x0000236du, 0x00070041u, 0x00000234u, 0x00002370u, 0x0000028fu, 0x00000203u, 0x000020e8u, 0x00000212u, 0x0004003du, 0x0000022au, 0x00002371u, 0x00002370u, 0x00040071u, 0x00000237u, 0x00002372u, 0x00002371u, 0x0004007cu, 0x00000009u, 0x00002373u, 0x00002372u, 0x00070041u, 0x00000234u, 0x00002375u, 0x0000028fu, 0x00000203u, 0x000020e8u, 0x00000215u, 0x0004003du, 0x0000022au, 0x00002376u, 0x00002375u, 0x00040071u, 0x00000237u, 0x00002377u, 0x00002376u, 0x0004007cu, 0x00000009u, 0x00002378u, 0x00002377u, 0x00070041u, 0x00000234u, 0x0000237au, 0x0000028fu, 0x00000203u, 0x000020e8u, 0x00000218u, 0x0004003du, 0x0000022au, 0x0000237bu, 0x0000237au, 0x00040071u, 0x00000237u, 0x0000237cu, 0x0000237bu, 0x0004007cu, 0x00000009u, 0x0000237du, 0x0000237cu, 0x00070041u, 0x0000026bu, 0x0000237fu, 0x0000028fu, 0x00000203u, 0x000020e8u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00002380u, 0x0000237fu, 0x00070041u, 0x000002a8u, 0x00002382u, 0x0000028fu, 0x00000203u, 0x000020e8u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00002383u, 0x00002382u, 0x000b0050u, 0x00000014u, 0x00002384u, 0x0000236eu, 0x00002373u, 0x00002378u, 0x0000237du, 0x00002380u, 0x00002383u, 0x00000203u, 0x00000203u, 0x0003003eu, 0x00006ce3u, 0x0000236eu, 0x0003003eu, 0x00006ce4u, 0x00002373u, 0x0003003eu, 0x00006ce5u, 0x00002378u, 0x0003003eu, 0x00006ce6u, 0x0000237du, 0x0003003eu, 0x00006ce7u, 0x00002380u, 0x0003003eu, 0x00006ce8u, 0x00002383u, 0x0003003eu, 0x00006ce9u, 0x00000203u, 0x0003003eu, 0x00006ceau, 0x00000203u, 0x0003003eu, 0x00006d82u, 0x0000236eu, 0x0003003eu, 0x00006d83u, 0x00002373u, 0x0003003eu, 0x00006d84u, 0x00002378u, 0x0003003eu, 0x00006d85u, 0x0000237du, 0x0003003eu, 0x00006d86u, 0x00002380u, 0x0003003eu, 0x00006d87u, 0x00002383u, 0x0003003eu, 0x00001fecu, 0x00002380u, 0x0003003eu, 0x00001fedu, 0x00002383u, 0x0003003eu, 0x00001feeu, 0x0000236eu, 0x0003003eu, 0x00001fefu, 0x00002373u, 0x0003003eu, 0x00001ff0u, 0x00002378u, 0x0003003eu, 0x00001ff1u, 0x0000237du, 0x000500c7u, 0x00000006u, 0x000020fau, 0x00002380u, 0x00000377u, 0x000500abu, 0x0000005du, 0x000020fbu, 0x000020fau, 0x00000374u, 0x0003003eu, 0x00001ff2u, 0x000020fbu, 0x000500c7u, 0x00000006u, 0x000020fdu, 0x00002380u, 0x00000a31u, 0x000500abu, 0x0000005du, 0x000020feu, 0x000020fdu, 0x00000374u, 0x0003003eu, 0x00001ff3u, 0x000020feu, 0x000500c7u, 0x00000006u, 0x00002100u, 0x00002380u, 0x00001b64u, 0x000500abu, 0x0000005du, 0x00002101u, 0x00002100u, 0x00000374u, 0x0003003eu, 0x00001ff4u, 0x00002101u, 0x000500c7u, 0x00000006u, 0x00002103u, 0x00002380u, 0x00000a37u, 0x000500abu, 0x0000005du, 0x00002104u, 0x00002103u, 0x00000374u, 0x0003003eu, 0x00001ff5u, 0x00002104u, 0x000500c7u, 0x00000006u, 0x00002106u, 0x00002380u, 0x00000a3du, 0x000500abu, 0x0000005du, 0x00002107u, 0x00002106u, 0x00000374u, 0x0003003eu, 0x00001ff6u, 0x00002107u, 0x000500c7u, 0x00000006u, 0x00002109u, 0x00002380u, 0x0000035bu, 0x000500abu, 0x0000005du, 0x0000210au, 0x00002109u, 0x00000374u, 0x0003003eu, 0x00001ff7u, 0x0000210au, 0x000500c7u, 0x00000006u, 0x0000210cu, 0x00002380u, 0x00001b75u, 0x000500abu, 0x0000005du, 0x0000210du, 0x0000210cu, 0x00000374u, 0x0003003eu, 0x00001ff8u, 0x0000210du, 0x000500c7u, 0x00000006u, 0x0000210fu, 0x00002380u, 0x00000f2eu, 0x000500abu, 0x0000005du, 0x00002110u, 0x0000210fu, 0x00000374u, 0x0003003eu, 0x00001ff9u, 0x00002110u, 0x000500c7u, 0x00000006u, 0x00002112u, 0x00002380u, 0x00000f26u, 0x000500abu, 0x0000005du, 0x00002113u, 0x00002112u, 0x00000374u, 0x0003003eu, 0x00001ffau, 0x00002113u, 0x000500c7u, 0x00000006u, 0x00002115u, 0x00002380u, 0x00000701u, 0x000500abu, 0x0000005du, 0x00002116u, 0x00002115u, 0x00000374u, 0x0003003eu, 0x00001ffbu, 0x00002116u, 0x000500c7u, 0x00000006u, 0x00002118u, 0x00002380u, 0x00000a43u, 0x000500abu, 0x0000005du, 0x00002119u, 0x00002118u, 0x00000374u, 0x0003003eu, 0x00001ffcu, 0x00002119u, 0x000500c7u, 0x00000006u, 0x0000211bu, 0x00002380u, 0x00000485u, 0x000500abu, 0x0000005du, 0x0000211cu, 0x0000211bu, 0x00000374u, 0x0003003eu, 0x00001ffdu, 0x0000211cu, 0x000500c7u, 0x00000006u, 0x0000211eu, 0x00002380u, 0x00000e5fu, 0x000500abu, 0x0000005du, 0x0000211fu, 0x0000211eu, 0x00000374u, 0x0003003eu, 0x00001ffeu, 0x0000211fu, 0x000500c7u, 0x00000006u, 0x00002121u, 0x00002380u, 0x00001b92u, 0x000500abu, 0x0000005du, 0x00002122u, 0x00002121u, 0x00000374u, 0x0003003eu, 0x00001fffu, 0x00002122u, 0x000500c7u, 0x00000006u, 0x00002124u, 0x00002380u, 0x00001b97u, 0x000500abu, 0x0000005du, 0x00002125u, 0x00002124u, 0x00000374u, 0x0003003eu, 0x00002000u, 0x00002125u, 0x000500c7u, 0x00000006u, 0x00002127u, 0x00002380u, 0x00001b9cu, 0x000500abu, 0x0000005du, 0x00002128u, 0x00002127u, 0x00000374u, 0x0003003eu, 0x00002001u, 0x00002128u, 0x000500c7u, 0x00000006u, 0x0000212au, 0x00002380u, 0x00001ba1u, 0x000500abu, 0x0000005du, 0x0000212bu, 0x0000212au, 0x00000374u, 0x0003003eu, 0x00002002u, 0x0000212bu, 0x000500c7u, 0x00000006u, 0x0000212du, 0x00002380u, 0x00001ba6u, 0x000500abu, 0x0000005du, 0x0000212eu, 0x0000212du, 0x00000374u, 0x0003003eu, 0x00002003u, 0x0000212eu, 0x000500c7u, 0x00000006u, 0x00002130u, 0x00002380u, 0x00001babu, 0x000500abu, 0x0000005du, 0x00002131u, 0x00002130u, 0x00000374u, 0x0003003eu, 0x00002004u, 0x00002131u, 0x000500c7u, 0x00000006u, 0x00002133u, 0x00002380u, 0x00001bb0u, 0x000500abu, 0x0000005du, 0x00002134u, 0x00002133u, 0x00000374u, 0x0003003eu, 0x00002005u, 0x00002134u, 0x000500c7u, 0x00000006u, 0x00002136u, 0x00002380u, 0x00001bb5u, 0x000500abu, 0x0000005du, 0x00002137u, 0x00002136u, 0x00000374u, 0x0003003eu, 0x00002006u, 0x00002137u, 0x000500c7u, 0x00000006u, 0x00002139u, 0x00002380u, 0x00001bbau, 0x000500abu, 0x0000005du, 0x0000213au, 0x00002139u, 0x00000374u, 0x0003003eu, 0x00002007u, 0x0000213au, 0x000500c7u, 0x00000006u, 0x0000213cu, 0x00002380u, 0x00001bbfu, 0x000500abu, 0x0000005du, 0x0000213du, 0x0000213cu, 0x00000374u, 0x0003003eu, 0x00002008u, 0x0000213du, 0x000500c7u, 0x00000006u, 0x0000213fu, 0x00002380u, 0x00001bc4u, 0x000500abu, 0x0000005du, 0x00002140u, 0x0000213fu, 0x00000374u, 0x0003003eu, 0x00002009u, 0x00002140u, 0x000500c7u, 0x00000006u, 0x00002142u, 0x00002380u, 0x00001bc8u, 0x000500abu, 0x0000005du, 0x00002143u, 0x00002142u, 0x00000374u, 0x000300f7u, 0x00002144u, 0x00000000u, 0x000400fau, 0x00002143u, 0x00002145u, 0x00002144u, 0x000200f8u, 0x00002145u, 0x0004007cu, 0x00000006u, 0x00002147u, 0x00007a43u, 0x0004007cu, 0x00000006u, 0x00002149u, 0x00007a3cu, 0x00060041u, 0x00001bd2u, 0x0000214bu, 0x00000cc1u, 0x00000203u, 0x00000218u, 0x0004003du, 0x00000006u, 0x0000214cu, 0x0000214bu, 0x00050080u, 0x00000006u, 0x0000214du, 0x00001ec7u, 0x0000214cu, 0x0003003eu, 0x0000200au, 0x00002147u, 0x0003003eu, 0x0000200bu, 0x00002149u, 0x0003003eu, 0x0000200cu, 0x0000214du, 0x00060050u, 0x00000353u, 0x00002389u, 0x00002147u, 0x00002149u, 0x0000214du, 0x0003003eu, 0x00002385u, 0x00002389u, 0x0004003du, 0x00000353u, 0x0000238au, 0x00002385u, 0x000500c2u, 0x00000353u, 0x0000238cu, 0x0000238au, 0x0000eeb0u, 0x0004003du, 0x00000353u, 0x0000238du, 0x00002385u, 0x0008004fu, 0x00000353u, 0x0000238eu, 0x0000238du, 0x0000238du, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x0000238fu, 0x0000238cu, 0x0000238eu, 0x00050084u, 0x00000353u, 0x00002391u, 0x0000238fu, 0x0000eeb1u, 0x0003003eu, 0x00002385u, 0x00002391u, 0x0004003du, 0x00000353u, 0x00002392u, 0x00002385u, 0x000500c2u, 0x00000353u, 0x00002394u, 0x00002392u, 0x0000eeb0u, 0x0004003du, 0x00000353u, 0x00002395u, 0x00002385u, 0x0008004fu, 0x00000353u, 0x00002396u, 0x00002395u, 0x00002395u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00002397u, 0x00002394u, 0x00002396u, 0x00050084u, 0x00000353u, 0x00002399u, 0x00002397u, 0x0000eeb1u, 0x0003003eu, 0x00002385u, 0x00002399u, 0x0004003du, 0x00000353u, 0x0000239au, 0x00002385u, 0x000500c2u, 0x00000353u, 0x0000239cu, 0x0000239au, 0x0000eeb0u, 0x0004003du, 0x00000353u, 0x0000239du, 0x00002385u, 0x0008004fu, 0x00000353u, 0x0000239eu, 0x0000239du, 0x0000239du, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x0000239fu, 0x0000239cu, 0x0000239eu, 0x00050084u, 0x00000353u, 0x000023a1u, 0x0000239fu, 0x0000eeb1u, 0x0003003eu, 0x00002385u, 0x000023a1u, 0x00050041u, 0x00000007u, 0x000023a2u, 0x00002385u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000023a3u, 0x000023a2u, 0x000500c2u, 0x00000006u, 0x000023a4u, 0x000023a3u, 0x00000377u, 0x0004007cu, 0x00000008u, 0x000023a5u, 0x000023a4u, 0x0003003eu, 0x00000202u, 0x000023a5u, 0x000200f9u, 0x00002144u, 0x000200f8u, 0x00002144u, 0x000500c7u, 0x00000006u, 0x00002150u, 0x000020c1u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00002151u, 0x00002150u, 0x00000374u, 0x0003003eu, 0x0000200du, 0x00002151u, 0x000300f7u, 0x00002153u, 0x00000000u, 0x000400fau, 0x00002122u, 0x00002154u, 0x00002155u, 0x000200f8u, 0x00002155u, 0x000300f7u, 0x00002191u, 0x00000000u, 0x000400fau, 0x0000211fu, 0x00002192u, 0x00002191u, 0x000200f8u, 0x00002192u, 0x0003003eu, 0x00007892u, 0x00000622u, 0x000500afu, 0x0000005du, 0x00002197u, 0x00007a43u, 0x00002345u, 0x000300f7u, 0x00002198u, 0x00000000u, 0x000400fau, 0x00002197u, 0x00002199u, 0x00002198u, 0x000200f8u, 0x00002199u, 0x000500b3u, 0x0000005du, 0x0000219du, 0x00007a43u, 0x00002348u, 0x000200f9u, 0x00002198u, 0x000200f8u, 0x00002198u, 0x000700f5u, 0x0000005du, 0x0000219eu, 0x00002197u, 0x00002192u, 0x0000219du, 0x00002199u, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x0000219eu, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x00002191u, 0x000200f9u, 0x00002153u, 0x000200f8u, 0x00002154u, 0x000500afu, 0x0000005du, 0x00002159u, 0x00007a43u, 0x00002345u, 0x000300f7u, 0x0000215au, 0x00000000u, 0x000400fau, 0x00002159u, 0x0000215bu, 0x0000215au, 0x000200f8u, 0x0000215bu, 0x000500b3u, 0x0000005du, 0x0000215fu, 0x00007a43u, 0x00002348u, 0x000200f9u, 0x0000215au, 0x000200f8u, 0x0000215au, 0x000700f5u, 0x0000005du, 0x00002160u, 0x00002159u, 0x00002154u, 0x0000215fu, 0x0000215bu, 0x0003003eu, 0x0000200eu, 0x00002160u, 0x000400a8u, 0x0000005du, 0x00002162u, 0x00002160u, 0x000300f7u, 0x00002163u, 0x00000000u, 0x000400fau, 0x00002162u, 0x00002164u, 0x00002163u, 0x000200f8u, 0x00002164u, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x00002163u, 0x0003003eu, 0x00006d8eu, 0x00002335u, 0x0003003eu, 0x00006d8fu, 0x00002345u, 0x0003003eu, 0x00006d90u, 0x00002348u, 0x0003003eu, 0x00002012u, 0x00002362u, 0x0003003eu, 0x00002013u, 0x00007a43u, 0x0003003eu, 0x00002014u, 0x0000210au, 0x0003003eu, 0x00002015u, 0x00002151u, 0x000300f7u, 0x000023b0u, 0x00000000u, 0x000400fau, 0x00002151u, 0x000023b1u, 0x000023b2u, 0x000200f8u, 0x000023b2u, 0x00050082u, 0x00000008u, 0x000023bau, 0x00002348u, 0x00007a43u, 0x0003003eu, 0x000023a7u, 0x000023bau, 0x000200f9u, 0x000023b0u, 0x000200f8u, 0x000023b1u, 0x00050082u, 0x00000008u, 0x000023b6u, 0x00007a43u, 0x00002345u, 0x0003003eu, 0x000023a7u, 0x000023b6u, 0x000200f9u, 0x000023b0u, 0x000200f8u, 0x000023b0u, 0x000700f5u, 0x00000008u, 0x0000b8a7u, 0x000023b6u, 0x000023b1u, 0x000023bau, 0x000023b2u, 0x0003003eu, 0x000023a6u, 0x0000b8a7u, 0x000500c3u, 0x00000008u, 0x000023bdu, 0x0000b8a7u, 0x0000078du, 0x0003003eu, 0x000023a6u, 0x000023bdu, 0x00060041u, 0x00000cc2u, 0x000023bfu, 0x00000cc1u, 0x00000203u, 0x00000212u, 0x0004003du, 0x00000008u, 0x000023c0u, 0x000023bfu, 0x000500c7u, 0x00000008u, 0x000023c1u, 0x000023bdu, 0x000023c0u, 0x0003003eu, 0x000023a8u, 0x000023c1u, 0x00050082u, 0x00000008u, 0x000023c4u, 0x000023bdu, 0x000023c1u, 0x0003003eu, 0x00002017u, 0x000023c4u, 0x00060041u, 0x00000cc2u, 0x000023c6u, 0x00000cc1u, 0x00000203u, 0x00000203u, 0x0004003du, 0x00000008u, 0x000023c7u, 0x000023c6u, 0x000500c3u, 0x00000008u, 0x000023c8u, 0x000023bdu, 0x000023c7u, 0x000600a9u, 0x00000008u, 0x000023cau, 0x00002151u, 0x00000212u, 0x00000ccfu, 0x00050084u, 0x00000008u, 0x000023cbu, 0x000023c8u, 0x000023cau, 0x0003003eu, 0x000023a9u, 0x000023cbu, 0x0008004fu, 0x0000003cu, 0x000023ceu, 0x00002335u, 0x00002335u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x0000003cu, 0x000023d0u, 0x00002362u, 0x00002362u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x000023d2u, 0x000023d0u, 0x0000eeb2u, 0x00060050u, 0x0000003cu, 0x000023d4u, 0x000023cbu, 0x000023cbu, 0x000023cbu, 0x00050084u, 0x0000003cu, 0x000023d5u, 0x000023d2u, 0x000023d4u, 0x00050080u, 0x0000003cu, 0x000023d6u, 0x000023ceu, 0x000023d5u, 0x0003003eu, 0x000023aau, 0x000023d6u, 0x000300f7u, 0x000023d8u, 0x00000000u, 0x000400fau, 0x0000210au, 0x000023d9u, 0x000023dau, 0x000200f8u, 0x000023dau, 0x000500c3u, 0x0000003cu, 0x000023e3u, 0x000023d6u, 0x0000eeb3u, 0x0003003eu, 0x000023aeu, 0x000023e3u, 0x0007004fu, 0x0000005fu, 0x0000246du, 0x000023e3u, 0x000023e3u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000246bu, 0x0000246du, 0x0003003eu, 0x00002016u, 0x0000246du, 0x000200f9u, 0x000023d8u, 0x000200f8u, 0x000023d9u, 0x000500c3u, 0x0000003cu, 0x000023ddu, 0x000023d6u, 0x0000eeb3u, 0x0003003eu, 0x000023acu, 0x000023ddu, 0x0003003eu, 0x000023adu, 0x0000b8b1u, 0x00050041u, 0x0000003eu, 0x000023efu, 0x000023acu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000023f0u, 0x000023efu, 0x0003003eu, 0x000023e5u, 0x000023f0u, 0x000500b3u, 0x0000005du, 0x000023f2u, 0x000023f0u, 0x00000203u, 0x0003003eu, 0x000023e6u, 0x000023f2u, 0x000500c7u, 0x00000008u, 0x000023f4u, 0x000023f0u, 0x00000bfdu, 0x0003003eu, 0x000023e5u, 0x000023f4u, 0x0003003eu, 0x000023e8u, 0x000023f4u, 0x0006000cu, 0x00000008u, 0x00002450u, 0x00000001u, 0x0000004au, 0x000023f4u, 0x00050082u, 0x00000008u, 0x00002451u, 0x00000283u, 0x00002450u, 0x0007000cu, 0x00000008u, 0x00002452u, 0x00000001u, 0x00000027u, 0x00002451u, 0x00000283u, 0x0003003eu, 0x00002448u, 0x00002452u, 0x000500c4u, 0x00000008u, 0x00002455u, 0x000023f4u, 0x00002452u, 0x000500c7u, 0x00000008u, 0x00002456u, 0x00002455u, 0x00000b17u, 0x0003003eu, 0x00002449u, 0x00002456u, 0x000500c7u, 0x00000008u, 0x00002458u, 0x00002456u, 0x0000038bu, 0x0003003eu, 0x0000244au, 0x00002458u, 0x000500c3u, 0x00000008u, 0x0000245au, 0x00002456u, 0x0000025eu, 0x0003003eu, 0x0000244cu, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x0000245bu, 0x0000244cu, 0x0000245au, 0x0004003du, 0x0000005fu, 0x0000245cu, 0x0000245bu, 0x00050051u, 0x00000008u, 0x0000245du, 0x0000245cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000245eu, 0x0000245cu, 0x00000001u, 0x0003003eu, 0x0000244bu, 0x0000245cu, 0x00050041u, 0x0000003eu, 0x00002460u, 0x0000244bu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002461u, 0x00002460u, 0x00050084u, 0x00000008u, 0x00002463u, 0x00002461u, 0x00002458u, 0x000500c3u, 0x00000008u, 0x00002464u, 0x00002463u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002465u, 0x0000244bu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002466u, 0x00002465u, 0x00050080u, 0x00000008u, 0x00002467u, 0x00002464u, 0x00002466u, 0x0003003eu, 0x0000244du, 0x00002467u, 0x00050050u, 0x0000005fu, 0x0000246au, 0x00002467u, 0x00002452u, 0x0003003eu, 0x0000244eu, 0x0000246au, 0x0003003eu, 0x000023e7u, 0x0000246au, 0x00050041u, 0x0000003eu, 0x000023f7u, 0x000023e7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000023f8u, 0x000023f7u, 0x0003003eu, 0x000023e9u, 0x000023f8u, 0x0004003du, 0x0000003cu, 0x000023f9u, 0x000023acu, 0x0007004fu, 0x0000005fu, 0x000023fau, 0x000023f9u, 0x000023f9u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x000023fbu, 0x000023e7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000023fcu, 0x000023fbu, 0x00050050u, 0x0000005fu, 0x000023fdu, 0x000023fcu, 0x000023fcu, 0x00050084u, 0x0000005fu, 0x000023feu, 0x000023fau, 0x000023fdu, 0x0003003eu, 0x000023eau, 0x000023feu, 0x000500c3u, 0x00000008u, 0x00002400u, 0x00000c10u, 0x000023f8u, 0x0004007eu, 0x00000008u, 0x00002401u, 0x00002400u, 0x000500c7u, 0x00000008u, 0x00002402u, 0x00000c0fu, 0x00002401u, 0x0003003eu, 0x000023ebu, 0x00002402u, 0x0004003du, 0x0000005fu, 0x00002403u, 0x000023eau, 0x00050050u, 0x0000005fu, 0x00002405u, 0x00002402u, 0x00002402u, 0x000500c7u, 0x0000005fu, 0x00002406u, 0x00002403u, 0x00002405u, 0x0003003eu, 0x000023ecu, 0x00002406u, 0x000500abu, 0x0000005du, 0x00002408u, 0x000023f8u, 0x00000283u, 0x000300f7u, 0x00002409u, 0x00000000u, 0x000400fau, 0x00002408u, 0x0000240au, 0x0000240bu, 0x000200f8u, 0x0000240bu, 0x0004003du, 0x0000005fu, 0x00002411u, 0x000023eau, 0x000500c4u, 0x0000005fu, 0x00002413u, 0x00002411u, 0x0000eeb7u, 0x0003003eu, 0x000023edu, 0x00002413u, 0x000200f9u, 0x00002409u, 0x000200f8u, 0x0000240au, 0x0004003du, 0x0000005fu, 0x0000240cu, 0x000023eau, 0x00050082u, 0x00000008u, 0x0000240eu, 0x0000027du, 0x000023f8u, 0x00050050u, 0x0000005fu, 0x0000240fu, 0x0000240eu, 0x0000240eu, 0x000500c3u, 0x0000005fu, 0x00002410u, 0x0000240cu, 0x0000240fu, 0x0003003eu, 0x000023eau, 0x00002410u, 0x0003003eu, 0x000023edu, 0x00002410u, 0x000200f9u, 0x00002409u, 0x000200f8u, 0x00002409u, 0x0004003du, 0x0000005fu, 0x00002414u, 0x000023ecu, 0x000500abu, 0x00000879u, 0x00002415u, 0x00002414u, 0x00000c29u, 0x0004009au, 0x0000005du, 0x00002416u, 0x00002415u, 0x000300f7u, 0x00002417u, 0x00000000u, 0x000400fau, 0x00002416u, 0x00002418u, 0x00002417u, 0x000200f8u, 0x00002418u, 0x00050041u, 0x0000003eu, 0x00002419u, 0x000023ecu, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000241au, 0x00002419u, 0x000500abu, 0x0000005du, 0x0000241cu, 0x0000241au, 0x00002402u, 0x000300f7u, 0x0000241du, 0x00000000u, 0x000400fau, 0x0000241cu, 0x0000241eu, 0x0000241du, 0x000200f8u, 0x0000241eu, 0x0004003du, 0x00000008u, 0x00002420u, 0x00002419u, 0x000500abu, 0x0000005du, 0x00002421u, 0x00002420u, 0x00000203u, 0x000200f9u, 0x0000241du, 0x000200f8u, 0x0000241du, 0x000700f5u, 0x0000005du, 0x00002422u, 0x0000241cu, 0x00002418u, 0x00002421u, 0x0000241eu, 0x000300f7u, 0x00002423u, 0x00000000u, 0x000400fau, 0x00002422u, 0x00002424u, 0x00002423u, 0x000200f8u, 0x00002424u, 0x00050041u, 0x0000003eu, 0x00002425u, 0x000023eau, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002426u, 0x00002425u, 0x000500c7u, 0x00000008u, 0x00002427u, 0x00002426u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00002428u, 0x00002427u, 0x00000203u, 0x000300f7u, 0x00002429u, 0x00000000u, 0x000400fau, 0x00002428u, 0x0000242au, 0x0000242bu, 0x000200f8u, 0x0000242bu, 0x00050041u, 0x0000003eu, 0x0000242du, 0x000023edu, 0x00000374u, 0x0003003eu, 0x0000242du, 0x00000c42u, 0x000200f9u, 0x00002429u, 0x000200f8u, 0x0000242au, 0x00050041u, 0x0000003eu, 0x0000242cu, 0x000023edu, 0x00000374u, 0x0003003eu, 0x0000242cu, 0x00000bfdu, 0x000200f9u, 0x00002429u, 0x000200f8u, 0x00002429u, 0x0003003eu, 0x000023adu, 0x0000055eu, 0x000200f9u, 0x00002423u, 0x000200f8u, 0x00002423u, 0x000600a9u, 0x0000005du, 0x0000eeccu, 0x00002422u, 0x0000055eu, 0x0000b8b1u, 0x00050041u, 0x0000003eu, 0x0000242eu, 0x000023ecu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000242fu, 0x0000242eu, 0x000500abu, 0x0000005du, 0x00002431u, 0x0000242fu, 0x00002402u, 0x000300f7u, 0x00002432u, 0x00000000u, 0x000400fau, 0x00002431u, 0x00002433u, 0x00002432u, 0x000200f8u, 0x00002433u, 0x0004003du, 0x00000008u, 0x00002435u, 0x0000242eu, 0x000500abu, 0x0000005du, 0x00002436u, 0x00002435u, 0x00000203u, 0x000200f9u, 0x00002432u, 0x000200f8u, 0x00002432u, 0x000700f5u, 0x0000005du, 0x00002437u, 0x00002431u, 0x00002423u, 0x00002436u, 0x00002433u, 0x000300f7u, 0x00002438u, 0x00000000u, 0x000400fau, 0x00002437u, 0x00002439u, 0x00002438u, 0x000200f8u, 0x00002439u, 0x00050041u, 0x0000003eu, 0x0000243au, 0x000023eau, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000243bu, 0x0000243au, 0x000500c7u, 0x00000008u, 0x0000243cu, 0x0000243bu, 0x00000c10u, 0x000500aau, 0x0000005du, 0x0000243du, 0x0000243cu, 0x00000203u, 0x000300f7u, 0x0000243eu, 0x00000000u, 0x000400fau, 0x0000243du, 0x0000243fu, 0x00002440u, 0x000200f8u, 0x00002440u, 0x00050041u, 0x0000003eu, 0x00002442u, 0x000023edu, 0x00000485u, 0x0003003eu, 0x00002442u, 0x00000c42u, 0x000200f9u, 0x0000243eu, 0x000200f8u, 0x0000243fu, 0x00050041u, 0x0000003eu, 0x00002441u, 0x000023edu, 0x00000485u, 0x0003003eu, 0x00002441u, 0x00000bfdu, 0x000200f9u, 0x0000243eu, 0x000200f8u, 0x0000243eu, 0x0003003eu, 0x000023adu, 0x0000055eu, 0x000200f9u, 0x00002438u, 0x000200f8u, 0x00002438u, 0x000600a9u, 0x0000005du, 0x0000eecdu, 0x00002437u, 0x0000055eu, 0x0000eeccu, 0x000200f9u, 0x00002417u, 0x000200f8u, 0x00002417u, 0x000700f5u, 0x0000005du, 0x0000b8c4u, 0x0000b8b1u, 0x00002409u, 0x0000eecdu, 0x00002438u, 0x000300f7u, 0x00002444u, 0x00000000u, 0x000400fau, 0x000023f2u, 0x00002445u, 0x00002444u, 0x000200f8u, 0x00002445u, 0x0003003eu, 0x000023edu, 0x00000c5cu, 0x0003003eu, 0x000023adu, 0x0000055eu, 0x000200f9u, 0x00002444u, 0x000200f8u, 0x00002444u, 0x000600a9u, 0x0000005du, 0x0000eeceu, 0x000023f2u, 0x0000055eu, 0x0000b8c4u, 0x0004003du, 0x0000005fu, 0x00002446u, 0x000023edu, 0x0008000cu, 0x0000005fu, 0x00002447u, 0x00000001u, 0x0000002du, 0x00002446u, 0x00000c5fu, 0x00000c60u, 0x0003003eu, 0x000023eeu, 0x00002447u, 0x0003003eu, 0x000023abu, 0x0000eeceu, 0x0003003eu, 0x00002016u, 0x00002447u, 0x000200f9u, 0x000023d8u, 0x000200f8u, 0x000023d8u, 0x000700f5u, 0x0000005du, 0x0000e66cu, 0x0000eeceu, 0x00002444u, 0x0000b8b1u, 0x000023dau, 0x000700f5u, 0x0000005fu, 0x0000b8cau, 0x00002447u, 0x00002444u, 0x0000246du, 0x000023dau, 0x0003003eu, 0x0000200fu, 0x0000b8cau, 0x0003003eu, 0x00002010u, 0x000023c4u, 0x000500c7u, 0x00000006u, 0x0000216fu, 0x000020e0u, 0x0000073fu, 0x0003003eu, 0x00002018u, 0x0000216fu, 0x00080041u, 0x00000277u, 0x00002172u, 0x00000a0bu, 0x00000203u, 0x00001ec7u, 0x00000215u, 0x0000216fu, 0x0004003du, 0x00000229u, 0x00002173u, 0x00002172u, 0x00040071u, 0x00000006u, 0x00002174u, 0x00002173u, 0x0003003eu, 0x00002019u, 0x00002174u, 0x0003003eu, 0x0000201bu, 0x00002174u, 0x00070041u, 0x0000026bu, 0x00002470u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000203u, 0x0004003du, 0x00000006u, 0x00002471u, 0x00002470u, 0x00070041u, 0x0000026bu, 0x00002473u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000212u, 0x0004003du, 0x00000006u, 0x00002474u, 0x00002473u, 0x00070041u, 0x0000026bu, 0x00002476u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00002477u, 0x00002476u, 0x00070041u, 0x0000026bu, 0x00002479u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000218u, 0x0004003du, 0x00000006u, 0x0000247au, 0x00002479u, 0x00070041u, 0x0000026bu, 0x0000247cu, 0x000002d1u, 0x00000203u, 0x00002174u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000247du, 0x0000247cu, 0x00070041u, 0x0000026bu, 0x0000247fu, 0x000002d1u, 0x00000203u, 0x00002174u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00002480u, 0x0000247fu, 0x00070041u, 0x00000277u, 0x00002482u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000221u, 0x0004003du, 0x00000229u, 0x00002483u, 0x00002482u, 0x00040071u, 0x00000006u, 0x00002484u, 0x00002483u, 0x0004007cu, 0x00000008u, 0x00002485u, 0x00002484u, 0x00070041u, 0x00000277u, 0x00002487u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000224u, 0x0004003du, 0x00000229u, 0x00002488u, 0x00002487u, 0x00040071u, 0x00000006u, 0x00002489u, 0x00002488u, 0x0004007cu, 0x00000008u, 0x0000248au, 0x00002489u, 0x00070041u, 0x00000277u, 0x0000248cu, 0x000002d1u, 0x00000203u, 0x00002174u, 0x0000025eu, 0x0004003du, 0x00000229u, 0x0000248du, 0x0000248cu, 0x00040071u, 0x00000006u, 0x0000248eu, 0x0000248du, 0x0004007cu, 0x00000008u, 0x0000248fu, 0x0000248eu, 0x00070041u, 0x00000277u, 0x00002491u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000264u, 0x0004003du, 0x00000229u, 0x00002492u, 0x00002491u, 0x00040071u, 0x00000006u, 0x00002493u, 0x00002492u, 0x0004007cu, 0x00000008u, 0x00002494u, 0x00002493u, 0x00070041u, 0x00000277u, 0x00002496u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x0000026au, 0x0004003du, 0x00000229u, 0x00002497u, 0x00002496u, 0x00040071u, 0x00000006u, 0x00002498u, 0x00002497u, 0x0004007cu, 0x00000008u, 0x00002499u, 0x00002498u, 0x00070041u, 0x00000277u, 0x0000249bu, 0x000002d1u, 0x00000203u, 0x00002174u, 0x0000026fu, 0x0004003du, 0x00000229u, 0x0000249cu, 0x0000249bu, 0x00040071u, 0x00000006u, 0x0000249du, 0x0000249cu, 0x0004007cu, 0x00000008u, 0x0000249eu, 0x0000249du, 0x00070041u, 0x00000277u, 0x000024a0u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x00000276u, 0x0004003du, 0x00000229u, 0x000024a1u, 0x000024a0u, 0x00040071u, 0x00000006u, 0x000024a2u, 0x000024a1u, 0x0004007cu, 0x00000008u, 0x000024a3u, 0x000024a2u, 0x00070041u, 0x00000277u, 0x000024a5u, 0x000002d1u, 0x00000203u, 0x00002174u, 0x0000027du, 0x0004003du, 0x00000229u, 0x000024a6u, 0x000024a5u, 0x00040071u, 0x00000006u, 0x000024a7u, 0x000024a6u, 0x0004007cu, 0x00000008u, 0x000024a8u, 0x000024a7u, 0x00110050u, 0x0000001eu, 0x000024a9u, 0x00002471u, 0x00002474u, 0x00002477u, 0x0000247au, 0x0000247du, 0x00002480u, 0x00002485u, 0x0000248au, 0x0000248fu, 0x00002494u, 0x00002499u, 0x0000249eu, 0x000024a3u, 0x000024a8u, 0x0003003eu, 0x00006cb8u, 0x00002471u, 0x0003003eu, 0x00006cb9u, 0x00002474u, 0x0003003eu, 0x00006cbau, 0x00002477u, 0x0003003eu, 0x00006cbbu, 0x0000247au, 0x0003003eu, 0x00006cbcu, 0x0000247du, 0x0003003eu, 0x00006cbdu, 0x00002480u, 0x0003003eu, 0x00006cbeu, 0x00002485u, 0x0003003eu, 0x00006cbfu, 0x0000248au, 0x0003003eu, 0x00006cc0u, 0x0000248fu, 0x0003003eu, 0x00006cc1u, 0x00002494u, 0x0003003eu, 0x00006cc2u, 0x00002499u, 0x0003003eu, 0x00006cc3u, 0x0000249eu, 0x0003003eu, 0x00006cc4u, 0x000024a3u, 0x0003003eu, 0x00006cc5u, 0x000024a8u, 0x0003003eu, 0x00006d94u, 0x00002471u, 0x0003003eu, 0x00006d95u, 0x00002474u, 0x0003003eu, 0x00006d96u, 0x00002477u, 0x0003003eu, 0x00006d97u, 0x0000247au, 0x0003003eu, 0x00006d98u, 0x0000247du, 0x0003003eu, 0x00006d99u, 0x00002480u, 0x0003003eu, 0x00006d9au, 0x00002485u, 0x0003003eu, 0x00006d9bu, 0x0000248au, 0x0003003eu, 0x00006d9cu, 0x0000248fu, 0x0003003eu, 0x00006d9du, 0x00002494u, 0x0003003eu, 0x00006d9eu, 0x00002499u, 0x0003003eu, 0x00006d9fu, 0x0000249eu, 0x0003003eu, 0x00006da0u, 0x000024a3u, 0x0003003eu, 0x00006da1u, 0x000024a8u, 0x0003003eu, 0x00006dbfu, 0x00002471u, 0x0003003eu, 0x00006dc0u, 0x00002477u, 0x0003003eu, 0x00006dc1u, 0x0000247du, 0x0003003eu, 0x00006dc2u, 0x00002480u, 0x0003003eu, 0x00006dc3u, 0x0000248au, 0x0003003eu, 0x00006dc4u, 0x0000248fu, 0x0003003eu, 0x00006dc5u, 0x00002494u, 0x0003003eu, 0x00006dc6u, 0x00002499u, 0x0003003eu, 0x00006dc7u, 0x0000249eu, 0x0003003eu, 0x00006dc8u, 0x000024a3u, 0x0003003eu, 0x00006dc9u, 0x000024a8u, 0x0003003eu, 0x0000201eu, 0x000020eau, 0x0003003eu, 0x0000201fu, 0x0000b8cau, 0x0003003eu, 0x00002020u, 0x000023c4u, 0x0003003eu, 0x00002021u, 0x000020fbu, 0x0003003eu, 0x00002022u, 0x000020feu, 0x0004007cu, 0x00000008u, 0x000024c0u, 0x00002471u, 0x00050041u, 0x0000003eu, 0x000024c3u, 0x0000201fu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000024c4u, 0x000024c3u, 0x0003003eu, 0x000024aau, 0x000024c4u, 0x0003003eu, 0x000024abu, 0x000024c0u, 0x0003003eu, 0x000024acu, 0x00002499u, 0x0008000cu, 0x00000008u, 0x000024f9u, 0x00000001u, 0x0000002du, 0x000024c4u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x000024aau, 0x000024f9u, 0x000500b1u, 0x0000005du, 0x000024fbu, 0x00002499u, 0x0000026fu, 0x000300f7u, 0x000024fcu, 0x00000000u, 0x000400fau, 0x000024fbu, 0x000024fdu, 0x000024feu, 0x000200f8u, 0x000024feu, 0x00050082u, 0x00000008u, 0x00002503u, 0x0000037du, 0x00002499u, 0x000500c4u, 0x00000008u, 0x00002505u, 0x000024f9u, 0x00002503u, 0x0003003eu, 0x000024aau, 0x00002505u, 0x000500c3u, 0x00000008u, 0x00002507u, 0x00002505u, 0x00000559u, 0x0003003eu, 0x000024aau, 0x00002507u, 0x000200f9u, 0x000024fcu, 0x000200f8u, 0x000024fdu, 0x000500c3u, 0x00000008u, 0x00002501u, 0x000024f9u, 0x00002499u, 0x0003003eu, 0x000024aau, 0x00002501u, 0x000200f9u, 0x000024fcu, 0x000200f8u, 0x000024fcu, 0x000700f5u, 0x00000008u, 0x0000b912u, 0x00002501u, 0x000024fdu, 0x00002507u, 0x000024feu, 0x000500c4u, 0x00000008u, 0x00002509u, 0x000024c0u, 0x00000218u, 0x00050082u, 0x00000008u, 0x0000250bu, 0x0000b912u, 0x00002509u, 0x0003003eu, 0x000024aau, 0x0000250bu, 0x0003003eu, 0x000024f7u, 0x0000250bu, 0x0003003eu, 0x000024c3u, 0x0000250bu, 0x0004007cu, 0x00000008u, 0x000024c9u, 0x00002477u, 0x00050041u, 0x0000003eu, 0x000024ccu, 0x0000201fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000024cdu, 0x000024ccu, 0x0003003eu, 0x000024adu, 0x000024cdu, 0x0003003eu, 0x000024aeu, 0x000024c9u, 0x0003003eu, 0x000024afu, 0x000024a3u, 0x0008000cu, 0x00000008u, 0x0000250fu, 0x00000001u, 0x0000002du, 0x000024cdu, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x000024adu, 0x0000250fu, 0x000500b1u, 0x0000005du, 0x00002511u, 0x000024a3u, 0x0000026fu, 0x000300f7u, 0x00002512u, 0x00000000u, 0x000400fau, 0x00002511u, 0x00002513u, 0x00002514u, 0x000200f8u, 0x00002514u, 0x00050082u, 0x00000008u, 0x00002519u, 0x0000037du, 0x000024a3u, 0x000500c4u, 0x00000008u, 0x0000251bu, 0x0000250fu, 0x00002519u, 0x0003003eu, 0x000024adu, 0x0000251bu, 0x000500c3u, 0x00000008u, 0x0000251du, 0x0000251bu, 0x00000559u, 0x0003003eu, 0x000024adu, 0x0000251du, 0x000200f9u, 0x00002512u, 0x000200f8u, 0x00002513u, 0x000500c3u, 0x00000008u, 0x00002517u, 0x0000250fu, 0x000024a3u, 0x0003003eu, 0x000024adu, 0x00002517u, 0x000200f9u, 0x00002512u, 0x000200f8u, 0x00002512u, 0x000700f5u, 0x00000008u, 0x0000b916u, 0x00002517u, 0x00002513u, 0x0000251du, 0x00002514u, 0x000500c4u, 0x00000008u, 0x0000251fu, 0x000024c9u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00002521u, 0x0000b916u, 0x0000251fu, 0x0003003eu, 0x000024adu, 0x00002521u, 0x0003003eu, 0x0000250du, 0x00002521u, 0x0003003eu, 0x000024ccu, 0x00002521u, 0x0004003du, 0x0000005fu, 0x000024d0u, 0x0000201fu, 0x000500c3u, 0x0000005fu, 0x000024d2u, 0x000024d0u, 0x0000eeb9u, 0x0003003eu, 0x0000201fu, 0x000024d2u, 0x00060041u, 0x00000cc2u, 0x000024d3u, 0x00000cc1u, 0x00000203u, 0x00000215u, 0x0004003du, 0x00000008u, 0x000024d4u, 0x000024d3u, 0x000500aau, 0x0000005du, 0x000024d5u, 0x000024d4u, 0x00000203u, 0x000300f7u, 0x000024d6u, 0x00000000u, 0x000400fau, 0x000024d5u, 0x000024d7u, 0x000024d8u, 0x000200f8u, 0x000024d8u, 0x000500aau, 0x0000005du, 0x000024dbu, 0x000024d4u, 0x00000212u, 0x000300f7u, 0x000024dcu, 0x00000000u, 0x000400fau, 0x000024dbu, 0x000024ddu, 0x000024deu, 0x000200f8u, 0x000024deu, 0x00110050u, 0x0000001eu, 0x00006decu, 0x00002471u, 0x0000684bu, 0x00002477u, 0x0000684bu, 0x0000247du, 0x00002480u, 0x0000684eu, 0x0000248au, 0x0000248fu, 0x00002494u, 0x00002499u, 0x0000249eu, 0x000024a3u, 0x000024a8u, 0x0003003eu, 0x00006c8au, 0x0000247du, 0x0003003eu, 0x00006c8bu, 0x00002480u, 0x0003003eu, 0x00006c8cu, 0x0000248au, 0x0003003eu, 0x00006c8du, 0x0000248fu, 0x0003003eu, 0x00006c8eu, 0x00002494u, 0x0003003eu, 0x00006c8fu, 0x0000249eu, 0x0003003eu, 0x00006c90u, 0x000024a8u, 0x0003003eu, 0x000024b8u, 0x000020eau, 0x0004003du, 0x0000005fu, 0x000024f1u, 0x0000201fu, 0x0003003eu, 0x000024b9u, 0x000024f1u, 0x0003003eu, 0x000024bau, 0x000023c4u, 0x0003003eu, 0x000024bbu, 0x000020fbu, 0x0003003eu, 0x000024bcu, 0x000020feu, 0x000500b1u, 0x0000005du, 0x000026cbu, 0x000023c4u, 0x00000215u, 0x0003003eu, 0x000026afu, 0x000026cbu, 0x000300f7u, 0x000026cdu, 0x00000000u, 0x000400fau, 0x000026cbu, 0x000026ceu, 0x000026cdu, 0x000200f8u, 0x000026ceu, 0x000500abu, 0x0000005du, 0x000026d1u, 0x0000248au, 0x00000215u, 0x000200f9u, 0x000026cdu, 0x000200f8u, 0x000026cdu, 0x000700f5u, 0x0000005du, 0x000026d2u, 0x000026cbu, 0x000024deu, 0x000026d1u, 0x000026ceu, 0x000400a8u, 0x0000005du, 0x000026d4u, 0x000020fbu, 0x000500a7u, 0x0000005du, 0x000026d5u, 0x000026d2u, 0x000026d4u, 0x0003003eu, 0x000026b0u, 0x000026d5u, 0x0007000cu, 0x00000008u, 0x000026d8u, 0x00000001u, 0x00000027u, 0x0000248au, 0x00000215u, 0x0003003eu, 0x000026b1u, 0x000026d8u, 0x000500aau, 0x0000005du, 0x000026dbu, 0x0000248au, 0x00000218u, 0x0003003eu, 0x000026b2u, 0x000026dbu, 0x000500a6u, 0x0000005du, 0x000026deu, 0x000026dbu, 0x000020fbu, 0x000600a9u, 0x00000008u, 0x000026dfu, 0x000026deu, 0x00001132u, 0x0000040au, 0x0003003eu, 0x000026b3u, 0x000026dfu, 0x000300f7u, 0x000026e1u, 0x00000000u, 0x000400fau, 0x000026d5u, 0x000026e2u, 0x000026e3u, 0x000200f8u, 0x000026e3u, 0x00050041u, 0x0000003eu, 0x00002763u, 0x000024b9u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002764u, 0x00002763u, 0x00050080u, 0x00000008u, 0x00002765u, 0x00002764u, 0x000023c4u, 0x0003003eu, 0x00002763u, 0x00002765u, 0x00110050u, 0x0000001eu, 0x00006cafu, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000247du, 0x00002480u, 0x0000684eu, 0x0000248au, 0x0000248fu, 0x00002494u, 0x0000684eu, 0x0000249eu, 0x0000684eu, 0x000024a8u, 0x0003003eu, 0x00006c44u, 0x00002494u, 0x0003003eu, 0x00006c45u, 0x000024a8u, 0x0004003du, 0x00000008u, 0x00002769u, 0x00002763u, 0x0003003eu, 0x000026c2u, 0x00002769u, 0x000500abu, 0x0000005du, 0x00002807u, 0x00002494u, 0x00000203u, 0x000300f7u, 0x00002808u, 0x00000000u, 0x000400fau, 0x00002807u, 0x00002809u, 0x00002808u, 0x000200f8u, 0x00002809u, 0x000500c4u, 0x00000008u, 0x0000280cu, 0x00000212u, 0x00002494u, 0x0003003eu, 0x00002803u, 0x0000280cu, 0x000500c7u, 0x00000008u, 0x0000280fu, 0x000024a8u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00002810u, 0x0000280fu, 0x00000203u, 0x000300f7u, 0x00002811u, 0x00000000u, 0x000400fau, 0x00002810u, 0x00002812u, 0x00002811u, 0x000200f8u, 0x00002812u, 0x000500c7u, 0x00000008u, 0x00002815u, 0x00002769u, 0x0000280cu, 0x00050082u, 0x00000008u, 0x00002816u, 0x00002815u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00002817u, 0x00000001u, 0x0000002au, 0x00002816u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00002819u, 0x00002769u, 0x00002817u, 0x0003003eu, 0x000026c2u, 0x00002819u, 0x000200f9u, 0x00002811u, 0x000200f8u, 0x00002811u, 0x000700f5u, 0x00000008u, 0x0000b93du, 0x00002769u, 0x00002809u, 0x00002819u, 0x00002812u, 0x00050082u, 0x00000008u, 0x0000281bu, 0x0000280cu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x0000281du, 0x0000b93du, 0x0000281bu, 0x0003003eu, 0x000026c2u, 0x0000281du, 0x000200f9u, 0x00002808u, 0x000200f8u, 0x00002808u, 0x000700f5u, 0x00000008u, 0x0000b93eu, 0x00002769u, 0x000026e3u, 0x0000281du, 0x00002811u, 0x0003003eu, 0x00002804u, 0x0000b93eu, 0x0003003eu, 0x000026c0u, 0x0000b93eu, 0x0003003eu, 0x00006c48u, 0x0000249eu, 0x0003003eu, 0x00006c49u, 0x000024a8u, 0x00050041u, 0x0000003eu, 0x0000276cu, 0x000024b9u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000276du, 0x0000276cu, 0x0003003eu, 0x000026c5u, 0x0000276du, 0x000500abu, 0x0000005du, 0x00002823u, 0x0000249eu, 0x00000203u, 0x000300f7u, 0x00002824u, 0x00000000u, 0x000400fau, 0x00002823u, 0x00002825u, 0x00002824u, 0x000200f8u, 0x00002825u, 0x000500c4u, 0x00000008u, 0x00002828u, 0x00000212u, 0x0000249eu, 0x0003003eu, 0x0000281fu, 0x00002828u, 0x000500c7u, 0x00000008u, 0x0000282bu, 0x000024a8u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x0000282cu, 0x0000282bu, 0x00000203u, 0x000300f7u, 0x0000282du, 0x00000000u, 0x000400fau, 0x0000282cu, 0x0000282eu, 0x0000282du, 0x000200f8u, 0x0000282eu, 0x000500c7u, 0x00000008u, 0x00002831u, 0x0000276du, 0x00002828u, 0x00050082u, 0x00000008u, 0x00002832u, 0x00002831u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00002833u, 0x00000001u, 0x0000002au, 0x00002832u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00002835u, 0x0000276du, 0x00002833u, 0x0003003eu, 0x000026c5u, 0x00002835u, 0x000200f9u, 0x0000282du, 0x000200f8u, 0x0000282du, 0x000700f5u, 0x00000008u, 0x0000b94eu, 0x0000276du, 0x00002825u, 0x00002835u, 0x0000282eu, 0x00050082u, 0x00000008u, 0x00002837u, 0x00002828u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00002839u, 0x0000b94eu, 0x00002837u, 0x0003003eu, 0x000026c5u, 0x00002839u, 0x000200f9u, 0x00002824u, 0x000200f8u, 0x00002824u, 0x000700f5u, 0x00000008u, 0x0000b94fu, 0x0000276du, 0x00002808u, 0x00002839u, 0x0000282du, 0x0003003eu, 0x00002820u, 0x0000b94fu, 0x0003003eu, 0x000026c3u, 0x0000b94fu, 0x0004007cu, 0x00000006u, 0x00002774u, 0x0000b94fu, 0x00050084u, 0x00000006u, 0x00002775u, 0x00002480u, 0x00002774u, 0x00050080u, 0x00000006u, 0x00002776u, 0x0000247du, 0x00002775u, 0x0003003eu, 0x000026c6u, 0x00002776u, 0x00050084u, 0x00000006u, 0x00002778u, 0x00002776u, 0x000003c4u, 0x000500c4u, 0x00000008u, 0x0000277bu, 0x0000b93eu, 0x000026d8u, 0x0004007cu, 0x00000006u, 0x0000277cu, 0x0000277bu, 0x00050080u, 0x00000006u, 0x0000277du, 0x00002778u, 0x0000277cu, 0x000500c7u, 0x00000006u, 0x0000277eu, 0x0000277du, 0x0000119fu, 0x0003003eu, 0x000026c7u, 0x0000277eu, 0x000500c7u, 0x00000006u, 0x00002781u, 0x00002774u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00002782u, 0x00002781u, 0x0000035bu, 0x000500c6u, 0x00000006u, 0x00002784u, 0x0000277eu, 0x00002782u, 0x0003003eu, 0x000026c7u, 0x00002784u, 0x000500c2u, 0x00000006u, 0x00002786u, 0x00002784u, 0x000003c4u, 0x0003003eu, 0x000026c8u, 0x00002786u, 0x0004007cu, 0x00000006u, 0x00002788u, 0x000026dfu, 0x000500c7u, 0x00000006u, 0x0000278au, 0x00002786u, 0x00002788u, 0x0003003eu, 0x000026c8u, 0x0000278au, 0x000500c6u, 0x00000006u, 0x0000278du, 0x0000278au, 0x00000485u, 0x00080041u, 0x00000270u, 0x0000278eu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000278du, 0x0004003du, 0x0000022bu, 0x0000278fu, 0x0000278eu, 0x00040071u, 0x00000006u, 0x00002790u, 0x0000278fu, 0x0004007cu, 0x00000008u, 0x00002791u, 0x00002790u, 0x0003003eu, 0x000026bfu, 0x00002791u, 0x000300f7u, 0x00002793u, 0x00000000u, 0x000400fau, 0x000020fbu, 0x00002794u, 0x00002793u, 0x000200f8u, 0x00002794u, 0x000500aau, 0x0000005du, 0x00002797u, 0x0000248au, 0x00000203u, 0x000300f7u, 0x00002798u, 0x00000000u, 0x000400fau, 0x00002797u, 0x00002799u, 0x0000279au, 0x000200f8u, 0x0000279au, 0x000500c7u, 0x00000006u, 0x000027aeu, 0x00002784u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000027afu, 0x00000701u, 0x000027aeu, 0x00050082u, 0x00000006u, 0x000027b0u, 0x0000035bu, 0x000027afu, 0x000500c3u, 0x00000008u, 0x000027b2u, 0x00002791u, 0x000027b0u, 0x0003003eu, 0x000026bfu, 0x000027b2u, 0x000500c7u, 0x00000008u, 0x000027b4u, 0x000027b2u, 0x0000038bu, 0x0003003eu, 0x000026bfu, 0x000027b4u, 0x000500c4u, 0x00000008u, 0x000027b6u, 0x000027b4u, 0x00000215u, 0x0003003eu, 0x000026bfu, 0x000027b6u, 0x00050080u, 0x00000008u, 0x000027b9u, 0x000027b6u, 0x000023c4u, 0x0003003eu, 0x000026bfu, 0x000027b9u, 0x000200f9u, 0x00002798u, 0x000200f8u, 0x00002799u, 0x000500c7u, 0x00000006u, 0x0000279cu, 0x00002784u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x0000279du, 0x00000701u, 0x0000279cu, 0x00050082u, 0x00000006u, 0x0000279eu, 0x00001245u, 0x0000279du, 0x000500c3u, 0x00000008u, 0x000027a0u, 0x00002791u, 0x0000279eu, 0x0003003eu, 0x000026bfu, 0x000027a0u, 0x000500c7u, 0x00000008u, 0x000027a2u, 0x000027a0u, 0x00000540u, 0x0003003eu, 0x000026bfu, 0x000027a2u, 0x000500c4u, 0x00000008u, 0x000027a5u, 0x0000248fu, 0x0000021bu, 0x000500c5u, 0x00000008u, 0x000027a7u, 0x000027a2u, 0x000027a5u, 0x0003003eu, 0x000026bfu, 0x000027a7u, 0x000500c4u, 0x00000008u, 0x000027a9u, 0x000027a7u, 0x00000215u, 0x0003003eu, 0x000026bfu, 0x000027a9u, 0x00050080u, 0x00000008u, 0x000027acu, 0x000027a9u, 0x000023c4u, 0x0003003eu, 0x000026bfu, 0x000027acu, 0x000200f9u, 0x00002798u, 0x000200f8u, 0x00002798u, 0x000700f5u, 0x00000008u, 0x0000b970u, 0x000027acu, 0x00002799u, 0x000027b9u, 0x0000279au, 0x000500c5u, 0x00000008u, 0x000027bcu, 0x0000b970u, 0x00001268u, 0x000500c6u, 0x00000008u, 0x000027bdu, 0x000027bcu, 0x00000212u, 0x00080041u, 0x00000270u, 0x000027beu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000027bdu, 0x0004003du, 0x0000022bu, 0x000027bfu, 0x000027beu, 0x00040071u, 0x00000006u, 0x000027c0u, 0x000027bfu, 0x0004007cu, 0x00000008u, 0x000027c1u, 0x000027c0u, 0x0003003eu, 0x000026bfu, 0x000027c1u, 0x000200f9u, 0x00002793u, 0x000200f8u, 0x00002793u, 0x000700f5u, 0x00000008u, 0x0000b99eu, 0x00002791u, 0x00002824u, 0x000027c1u, 0x00002798u, 0x000200f9u, 0x000026e1u, 0x000200f8u, 0x000026e2u, 0x00050084u, 0x00000008u, 0x000026e5u, 0x00000215u, 0x000023c4u, 0x00050041u, 0x0000003eu, 0x000026e6u, 0x000024b9u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000026e7u, 0x000026e6u, 0x00050080u, 0x00000008u, 0x000026e8u, 0x000026e7u, 0x000026e5u, 0x0003003eu, 0x000026e6u, 0x000026e8u, 0x00110050u, 0x0000001eu, 0x00006c9fu, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000247du, 0x00002480u, 0x0000684eu, 0x0000248au, 0x0000248fu, 0x00002494u, 0x0000684eu, 0x0000249eu, 0x0000684eu, 0x000024a8u, 0x0003003eu, 0x00006c3cu, 0x00002494u, 0x0003003eu, 0x00006c3du, 0x000024a8u, 0x0004003du, 0x00000008u, 0x000026ecu, 0x000026e6u, 0x0003003eu, 0x000026b6u, 0x000026ecu, 0x00050050u, 0x0000005fu, 0x000027c7u, 0x000026ecu, 0x000026ecu, 0x00050080u, 0x0000005fu, 0x000027c8u, 0x000027c7u, 0x00000dcdu, 0x0003003eu, 0x000027c3u, 0x000027c8u, 0x000500abu, 0x0000005du, 0x000027cbu, 0x00002494u, 0x00000203u, 0x000300f7u, 0x000027ccu, 0x00000000u, 0x000400fau, 0x000027cbu, 0x000027cdu, 0x000027ccu, 0x000200f8u, 0x000027cdu, 0x000500c4u, 0x00000008u, 0x000027d0u, 0x00000212u, 0x00002494u, 0x0003003eu, 0x000027c4u, 0x000027d0u, 0x000500c7u, 0x00000008u, 0x000027d3u, 0x000024a8u, 0x00000215u, 0x000500abu, 0x0000005du, 0x000027d4u, 0x000027d3u, 0x00000203u, 0x000300f7u, 0x000027d5u, 0x00000000u, 0x000400fau, 0x000027d4u, 0x000027d6u, 0x000027d5u, 0x000200f8u, 0x000027d6u, 0x00050050u, 0x0000005fu, 0x000027d9u, 0x000027d0u, 0x000027d0u, 0x000500c7u, 0x0000005fu, 0x000027dau, 0x000027c8u, 0x000027d9u, 0x00050082u, 0x0000005fu, 0x000027dcu, 0x000027dau, 0x0000eeb7u, 0x0007000cu, 0x0000005fu, 0x000027deu, 0x00000001u, 0x0000002au, 0x000027dcu, 0x00000c29u, 0x000500c6u, 0x0000005fu, 0x000027e0u, 0x000027c8u, 0x000027deu, 0x0003003eu, 0x000027c3u, 0x000027e0u, 0x000200f9u, 0x000027d5u, 0x000200f8u, 0x000027d5u, 0x000700f5u, 0x0000005fu, 0x0000b972u, 0x000027c8u, 0x000027cdu, 0x000027e0u, 0x000027d6u, 0x00050082u, 0x00000008u, 0x000027e2u, 0x000027d0u, 0x00000212u, 0x00050050u, 0x0000005fu, 0x000027e4u, 0x000027e2u, 0x000027e2u, 0x000500c7u, 0x0000005fu, 0x000027e5u, 0x0000b972u, 0x000027e4u, 0x0003003eu, 0x000027c3u, 0x000027e5u, 0x000200f9u, 0x000027ccu, 0x000200f8u, 0x000027ccu, 0x000700f5u, 0x0000005fu, 0x0000b973u, 0x000027c8u, 0x000026e2u, 0x000027e5u, 0x000027d5u, 0x0003003eu, 0x000027c5u, 0x0000b973u, 0x0003003eu, 0x000026b4u, 0x0000b973u, 0x0003003eu, 0x00006c40u, 0x0000249eu, 0x0003003eu, 0x00006c41u, 0x000024a8u, 0x00050041u, 0x0000003eu, 0x000026efu, 0x000024b9u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000026f0u, 0x000026efu, 0x0003003eu, 0x000026b9u, 0x000026f0u, 0x000500abu, 0x0000005du, 0x000027ebu, 0x0000249eu, 0x00000203u, 0x000300f7u, 0x000027ecu, 0x00000000u, 0x000400fau, 0x000027ebu, 0x000027edu, 0x000027ecu, 0x000200f8u, 0x000027edu, 0x000500c4u, 0x00000008u, 0x000027f0u, 0x00000212u, 0x0000249eu, 0x0003003eu, 0x000027e7u, 0x000027f0u, 0x000500c7u, 0x00000008u, 0x000027f3u, 0x000024a8u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000027f4u, 0x000027f3u, 0x00000203u, 0x000300f7u, 0x000027f5u, 0x00000000u, 0x000400fau, 0x000027f4u, 0x000027f6u, 0x000027f5u, 0x000200f8u, 0x000027f6u, 0x000500c7u, 0x00000008u, 0x000027f9u, 0x000026f0u, 0x000027f0u, 0x00050082u, 0x00000008u, 0x000027fau, 0x000027f9u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000027fbu, 0x00000001u, 0x0000002au, 0x000027fau, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000027fdu, 0x000026f0u, 0x000027fbu, 0x0003003eu, 0x000026b9u, 0x000027fdu, 0x000200f9u, 0x000027f5u, 0x000200f8u, 0x000027f5u, 0x000700f5u, 0x00000008u, 0x0000b983u, 0x000026f0u, 0x000027edu, 0x000027fdu, 0x000027f6u, 0x00050082u, 0x00000008u, 0x000027ffu, 0x000027f0u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00002801u, 0x0000b983u, 0x000027ffu, 0x0003003eu, 0x000026b9u, 0x00002801u, 0x000200f9u, 0x000027ecu, 0x000200f8u, 0x000027ecu, 0x000700f5u, 0x00000008u, 0x0000b984u, 0x000026f0u, 0x000027ccu, 0x00002801u, 0x000027f5u, 0x0003003eu, 0x000027e8u, 0x0000b984u, 0x0003003eu, 0x000026b7u, 0x0000b984u, 0x0004007cu, 0x00000006u, 0x000026f7u, 0x0000b984u, 0x00050084u, 0x00000006u, 0x000026f8u, 0x00002480u, 0x000026f7u, 0x00050080u, 0x00000006u, 0x000026f9u, 0x0000247du, 0x000026f8u, 0x0003003eu, 0x000026bau, 0x000026f9u, 0x00050084u, 0x00000006u, 0x000026fbu, 0x000026f9u, 0x000003c4u, 0x00050050u, 0x0000005fu, 0x000026feu, 0x000026d8u, 0x000026d8u, 0x000500c4u, 0x0000005fu, 0x000026ffu, 0x0000b973u, 0x000026feu, 0x0004007cu, 0x000000a2u, 0x00002700u, 0x000026ffu, 0x00050050u, 0x000000a2u, 0x00002701u, 0x000026fbu, 0x000026fbu, 0x00050080u, 0x000000a2u, 0x00002702u, 0x00002701u, 0x00002700u, 0x000500c7u, 0x000000a2u, 0x00002704u, 0x00002702u, 0x0000eebbu, 0x0003003eu, 0x000026bbu, 0x00002704u, 0x000500c7u, 0x00000006u, 0x00002707u, 0x000026f7u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00002708u, 0x00002707u, 0x0000035bu, 0x0004003du, 0x000000a2u, 0x00002709u, 0x000026bbu, 0x00050050u, 0x000000a2u, 0x0000270au, 0x00002708u, 0x00002708u, 0x000500c6u, 0x000000a2u, 0x0000270bu, 0x00002709u, 0x0000270au, 0x0003003eu, 0x000026bbu, 0x0000270bu, 0x0004003du, 0x000000a2u, 0x0000270cu, 0x000026bbu, 0x000500c2u, 0x000000a2u, 0x0000270eu, 0x0000270cu, 0x0000eebcu, 0x0003003eu, 0x000026bcu, 0x0000270eu, 0x0004007cu, 0x00000006u, 0x00002710u, 0x000026dfu, 0x0004003du, 0x000000a2u, 0x00002711u, 0x000026bcu, 0x00050050u, 0x000000a2u, 0x00002712u, 0x00002710u, 0x00002710u, 0x000500c7u, 0x000000a2u, 0x00002713u, 0x00002711u, 0x00002712u, 0x0003003eu, 0x000026bcu, 0x00002713u, 0x00050041u, 0x00000007u, 0x00002715u, 0x000026bcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00002716u, 0x00002715u, 0x000500c6u, 0x00000006u, 0x00002717u, 0x00002716u, 0x00000485u, 0x00080041u, 0x00000270u, 0x00002718u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00002717u, 0x0004003du, 0x0000022bu, 0x00002719u, 0x00002718u, 0x00040071u, 0x00000006u, 0x0000271au, 0x00002719u, 0x0004007cu, 0x00000008u, 0x0000271bu, 0x0000271au, 0x0003003eu, 0x000026bdu, 0x0000271bu, 0x00050041u, 0x00000007u, 0x0000271du, 0x000026bcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000271eu, 0x0000271du, 0x000500c6u, 0x00000006u, 0x0000271fu, 0x0000271eu, 0x00000485u, 0x00080041u, 0x00000270u, 0x00002720u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000271fu, 0x0004003du, 0x0000022bu, 0x00002721u, 0x00002720u, 0x00040071u, 0x00000006u, 0x00002722u, 0x00002721u, 0x0004007cu, 0x00000008u, 0x00002723u, 0x00002722u, 0x0003003eu, 0x000026beu, 0x00002723u, 0x000500aau, 0x0000005du, 0x00002726u, 0x0000248au, 0x00000212u, 0x000300f7u, 0x00002727u, 0x00000000u, 0x000400fau, 0x00002726u, 0x00002728u, 0x00002729u, 0x000200f8u, 0x00002729u, 0x000500aau, 0x0000005du, 0x00002740u, 0x0000248au, 0x00000203u, 0x000300f7u, 0x00002741u, 0x00000000u, 0x000400fau, 0x00002740u, 0x00002742u, 0x00002743u, 0x000200f8u, 0x00002743u, 0x000500c3u, 0x00000008u, 0x0000275bu, 0x0000271bu, 0x0000025eu, 0x0003003eu, 0x000026bdu, 0x0000275bu, 0x000500c3u, 0x00000008u, 0x0000275du, 0x00002723u, 0x0000025eu, 0x0003003eu, 0x000026beu, 0x0000275du, 0x000200f9u, 0x00002741u, 0x000200f8u, 0x00002742u, 0x00050041u, 0x00000007u, 0x00002744u, 0x000026bbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00002745u, 0x00002744u, 0x000500c7u, 0x00000006u, 0x00002746u, 0x00002745u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x00002747u, 0x00002746u, 0x00050084u, 0x00000008u, 0x00002748u, 0x0000021bu, 0x00002747u, 0x00050082u, 0x00000008u, 0x00002749u, 0x00000276u, 0x00002748u, 0x000500c3u, 0x00000008u, 0x0000274bu, 0x0000271bu, 0x00002749u, 0x0003003eu, 0x000026bdu, 0x0000274bu, 0x00050041u, 0x00000007u, 0x0000274cu, 0x000026bbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000274du, 0x0000274cu, 0x000500c7u, 0x00000006u, 0x0000274eu, 0x0000274du, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x0000274fu, 0x0000274eu, 0x00050084u, 0x00000008u, 0x00002750u, 0x0000021bu, 0x0000274fu, 0x00050082u, 0x00000008u, 0x00002751u, 0x00000276u, 0x00002750u, 0x000500c3u, 0x00000008u, 0x00002753u, 0x00002723u, 0x00002751u, 0x0003003eu, 0x000026beu, 0x00002753u, 0x000500c7u, 0x00000008u, 0x00002755u, 0x0000274bu, 0x00000540u, 0x00050084u, 0x00000008u, 0x00002756u, 0x00002755u, 0x00000422u, 0x0003003eu, 0x000026bdu, 0x00002756u, 0x000500c7u, 0x00000008u, 0x00002758u, 0x00002753u, 0x00000540u, 0x00050084u, 0x00000008u, 0x00002759u, 0x00002758u, 0x00000422u, 0x0003003eu, 0x000026beu, 0x00002759u, 0x000200f9u, 0x00002741u, 0x000200f8u, 0x00002741u, 0x000700f5u, 0x00000008u, 0x0000b99cu, 0x00002759u, 0x00002742u, 0x0000275du, 0x00002743u, 0x000700f5u, 0x00000008u, 0x0000b99au, 0x00002756u, 0x00002742u, 0x0000275bu, 0x00002743u, 0x000200f9u, 0x00002727u, 0x000200f8u, 0x00002728u, 0x00050041u, 0x00000007u, 0x0000272au, 0x000026bbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000272bu, 0x0000272au, 0x000500c7u, 0x00000006u, 0x0000272cu, 0x0000272bu, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x0000272du, 0x0000272cu, 0x00050084u, 0x00000008u, 0x0000272eu, 0x0000021bu, 0x0000272du, 0x00050082u, 0x00000008u, 0x0000272fu, 0x0000025eu, 0x0000272eu, 0x000500c3u, 0x00000008u, 0x00002731u, 0x0000271bu, 0x0000272fu, 0x0003003eu, 0x000026bdu, 0x00002731u, 0x00050041u, 0x00000007u, 0x00002732u, 0x000026bbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00002733u, 0x00002732u, 0x000500c7u, 0x00000006u, 0x00002734u, 0x00002733u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x00002735u, 0x00002734u, 0x00050084u, 0x00000008u, 0x00002736u, 0x0000021bu, 0x00002735u, 0x00050082u, 0x00000008u, 0x00002737u, 0x0000025eu, 0x00002736u, 0x000500c3u, 0x00000008u, 0x00002739u, 0x00002723u, 0x00002737u, 0x0003003eu, 0x000026beu, 0x00002739u, 0x000500c7u, 0x00000008u, 0x0000273bu, 0x00002731u, 0x0000038bu, 0x0003003eu, 0x000026bdu, 0x0000273bu, 0x000500c7u, 0x00000008u, 0x0000273du, 0x00002739u, 0x0000038bu, 0x0003003eu, 0x000026beu, 0x0000273du, 0x000200f9u, 0x00002727u, 0x000200f8u, 0x00002727u, 0x000700f5u, 0x00000008u, 0x0000b99bu, 0x0000273du, 0x00002728u, 0x0000b99cu, 0x00002741u, 0x000700f5u, 0x00000008u, 0x0000b999u, 0x0000273bu, 0x00002728u, 0x0000b99au, 0x00002741u, 0x000500c4u, 0x00000008u, 0x0000275fu, 0x0000b999u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00002761u, 0x0000275fu, 0x0000b99bu, 0x0003003eu, 0x000026bfu, 0x00002761u, 0x000200f9u, 0x000026e1u, 0x000200f8u, 0x000026e1u, 0x000700f5u, 0x00000008u, 0x0000b99du, 0x00002761u, 0x00002727u, 0x0000b99eu, 0x00002793u, 0x0003003eu, 0x000026c9u, 0x0000b99du, 0x0003003eu, 0x000024b0u, 0x0000b99du, 0x000200f9u, 0x000024dcu, 0x000200f8u, 0x000024ddu, 0x000500c3u, 0x00000008u, 0x000024e0u, 0x000023c4u, 0x00000212u, 0x00110050u, 0x0000001eu, 0x00006de0u, 0x00002471u, 0x0000684bu, 0x00002477u, 0x0000684bu, 0x0000247du, 0x00002480u, 0x0000684eu, 0x0000248au, 0x0000248fu, 0x00002494u, 0x00002499u, 0x0000249eu, 0x000024a3u, 0x000024a8u, 0x0003003eu, 0x00006c5cu, 0x0000247du, 0x0003003eu, 0x00006c5du, 0x00002480u, 0x0003003eu, 0x00006c5eu, 0x0000248au, 0x0003003eu, 0x00006c5fu, 0x0000248fu, 0x0003003eu, 0x00006c60u, 0x00002494u, 0x0003003eu, 0x00006c61u, 0x0000249eu, 0x0003003eu, 0x00006c62u, 0x000024a8u, 0x0003003eu, 0x000024b2u, 0x000020eau, 0x0004003du, 0x0000005fu, 0x000024e3u, 0x0000201fu, 0x0003003eu, 0x000024b3u, 0x000024e3u, 0x0003003eu, 0x000024b4u, 0x000024e0u, 0x0003003eu, 0x000024b5u, 0x000020fbu, 0x0003003eu, 0x000024b6u, 0x000020feu, 0x000500b1u, 0x0000005du, 0x0000253fu, 0x000024e0u, 0x00000215u, 0x0003003eu, 0x00002523u, 0x0000253fu, 0x000300f7u, 0x00002541u, 0x00000000u, 0x000400fau, 0x0000253fu, 0x00002542u, 0x00002541u, 0x000200f8u, 0x00002542u, 0x000500abu, 0x0000005du, 0x00002545u, 0x0000248au, 0x00000215u, 0x000200f9u, 0x00002541u, 0x000200f8u, 0x00002541u, 0x000700f5u, 0x0000005du, 0x00002546u, 0x0000253fu, 0x000024ddu, 0x00002545u, 0x00002542u, 0x000400a8u, 0x0000005du, 0x00002548u, 0x000020fbu, 0x000500a7u, 0x0000005du, 0x00002549u, 0x00002546u, 0x00002548u, 0x0003003eu, 0x00002524u, 0x00002549u, 0x0007000cu, 0x00000008u, 0x0000254cu, 0x00000001u, 0x00000027u, 0x0000248au, 0x00000215u, 0x0003003eu, 0x00002525u, 0x0000254cu, 0x000500aau, 0x0000005du, 0x0000254fu, 0x0000248au, 0x00000218u, 0x0003003eu, 0x00002526u, 0x0000254fu, 0x000500a6u, 0x0000005du, 0x00002552u, 0x0000254fu, 0x000020fbu, 0x000600a9u, 0x00000008u, 0x00002553u, 0x00002552u, 0x00001132u, 0x0000040au, 0x0003003eu, 0x00002527u, 0x00002553u, 0x000300f7u, 0x00002555u, 0x00000000u, 0x000400fau, 0x00002549u, 0x00002556u, 0x00002557u, 0x000200f8u, 0x00002557u, 0x00050041u, 0x0000003eu, 0x000025d7u, 0x000024b3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000025d8u, 0x000025d7u, 0x00050080u, 0x00000008u, 0x000025d9u, 0x000025d8u, 0x000024e0u, 0x0003003eu, 0x000025d7u, 0x000025d9u, 0x00110050u, 0x0000001eu, 0x00006c81u, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000247du, 0x00002480u, 0x0000684eu, 0x0000248au, 0x0000248fu, 0x00002494u, 0x0000684eu, 0x0000249eu, 0x0000684eu, 0x000024a8u, 0x0003003eu, 0x00006c54u, 0x00002494u, 0x0003003eu, 0x00006c55u, 0x000024a8u, 0x0004003du, 0x00000008u, 0x000025ddu, 0x000025d7u, 0x0003003eu, 0x00002536u, 0x000025ddu, 0x000500abu, 0x0000005du, 0x0000267bu, 0x00002494u, 0x00000203u, 0x000300f7u, 0x0000267cu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000267du, 0x0000267cu, 0x000200f8u, 0x0000267du, 0x000500c4u, 0x00000008u, 0x00002680u, 0x00000212u, 0x00002494u, 0x0003003eu, 0x00002677u, 0x00002680u, 0x000500c7u, 0x00000008u, 0x00002683u, 0x000024a8u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00002684u, 0x00002683u, 0x00000203u, 0x000300f7u, 0x00002685u, 0x00000000u, 0x000400fau, 0x00002684u, 0x00002686u, 0x00002685u, 0x000200f8u, 0x00002686u, 0x000500c7u, 0x00000008u, 0x00002689u, 0x000025ddu, 0x00002680u, 0x00050082u, 0x00000008u, 0x0000268au, 0x00002689u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x0000268bu, 0x00000001u, 0x0000002au, 0x0000268au, 0x00000203u, 0x000500c6u, 0x00000008u, 0x0000268du, 0x000025ddu, 0x0000268bu, 0x0003003eu, 0x00002536u, 0x0000268du, 0x000200f9u, 0x00002685u, 0x000200f8u, 0x00002685u, 0x000700f5u, 0x00000008u, 0x0000b9a9u, 0x000025ddu, 0x0000267du, 0x0000268du, 0x00002686u, 0x00050082u, 0x00000008u, 0x0000268fu, 0x00002680u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00002691u, 0x0000b9a9u, 0x0000268fu, 0x0003003eu, 0x00002536u, 0x00002691u, 0x000200f9u, 0x0000267cu, 0x000200f8u, 0x0000267cu, 0x000700f5u, 0x00000008u, 0x0000b9aau, 0x000025ddu, 0x00002557u, 0x00002691u, 0x00002685u, 0x0003003eu, 0x00002678u, 0x0000b9aau, 0x0003003eu, 0x00002534u, 0x0000b9aau, 0x0003003eu, 0x00006c58u, 0x0000249eu, 0x0003003eu, 0x00006c59u, 0x000024a8u, 0x00050041u, 0x0000003eu, 0x000025e0u, 0x000024b3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000025e1u, 0x000025e0u, 0x0003003eu, 0x00002539u, 0x000025e1u, 0x000500abu, 0x0000005du, 0x00002697u, 0x0000249eu, 0x00000203u, 0x000300f7u, 0x00002698u, 0x00000000u, 0x000400fau, 0x00002697u, 0x00002699u, 0x00002698u, 0x000200f8u, 0x00002699u, 0x000500c4u, 0x00000008u, 0x0000269cu, 0x00000212u, 0x0000249eu, 0x0003003eu, 0x00002693u, 0x0000269cu, 0x000500c7u, 0x00000008u, 0x0000269fu, 0x000024a8u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000026a0u, 0x0000269fu, 0x00000203u, 0x000300f7u, 0x000026a1u, 0x00000000u, 0x000400fau, 0x000026a0u, 0x000026a2u, 0x000026a1u, 0x000200f8u, 0x000026a2u, 0x000500c7u, 0x00000008u, 0x000026a5u, 0x000025e1u, 0x0000269cu, 0x00050082u, 0x00000008u, 0x000026a6u, 0x000026a5u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000026a7u, 0x00000001u, 0x0000002au, 0x000026a6u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000026a9u, 0x000025e1u, 0x000026a7u, 0x0003003eu, 0x00002539u, 0x000026a9u, 0x000200f9u, 0x000026a1u, 0x000200f8u, 0x000026a1u, 0x000700f5u, 0x00000008u, 0x0000b9bau, 0x000025e1u, 0x00002699u, 0x000026a9u, 0x000026a2u, 0x00050082u, 0x00000008u, 0x000026abu, 0x0000269cu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000026adu, 0x0000b9bau, 0x000026abu, 0x0003003eu, 0x00002539u, 0x000026adu, 0x000200f9u, 0x00002698u, 0x000200f8u, 0x00002698u, 0x000700f5u, 0x00000008u, 0x0000b9bbu, 0x000025e1u, 0x0000267cu, 0x000026adu, 0x000026a1u, 0x0003003eu, 0x00002694u, 0x0000b9bbu, 0x0003003eu, 0x00002537u, 0x0000b9bbu, 0x0004007cu, 0x00000006u, 0x000025e8u, 0x0000b9bbu, 0x00050084u, 0x00000006u, 0x000025e9u, 0x00002480u, 0x000025e8u, 0x00050080u, 0x00000006u, 0x000025eau, 0x0000247du, 0x000025e9u, 0x0003003eu, 0x0000253au, 0x000025eau, 0x00050084u, 0x00000006u, 0x000025ecu, 0x000025eau, 0x000003c4u, 0x000500c4u, 0x00000008u, 0x000025efu, 0x0000b9aau, 0x0000254cu, 0x0004007cu, 0x00000006u, 0x000025f0u, 0x000025efu, 0x00050080u, 0x00000006u, 0x000025f1u, 0x000025ecu, 0x000025f0u, 0x000500c7u, 0x00000006u, 0x000025f2u, 0x000025f1u, 0x0000119fu, 0x0003003eu, 0x0000253bu, 0x000025f2u, 0x000500c7u, 0x00000006u, 0x000025f5u, 0x000025e8u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000025f6u, 0x000025f5u, 0x0000035bu, 0x000500c6u, 0x00000006u, 0x000025f8u, 0x000025f2u, 0x000025f6u, 0x0003003eu, 0x0000253bu, 0x000025f8u, 0x000500c2u, 0x00000006u, 0x000025fau, 0x000025f8u, 0x000003c4u, 0x0003003eu, 0x0000253cu, 0x000025fau, 0x0004007cu, 0x00000006u, 0x000025fcu, 0x00002553u, 0x000500c7u, 0x00000006u, 0x000025feu, 0x000025fau, 0x000025fcu, 0x0003003eu, 0x0000253cu, 0x000025feu, 0x000500c6u, 0x00000006u, 0x00002601u, 0x000025feu, 0x00000485u, 0x00080041u, 0x00000270u, 0x00002602u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00002601u, 0x0004003du, 0x0000022bu, 0x00002603u, 0x00002602u, 0x00040071u, 0x00000006u, 0x00002604u, 0x00002603u, 0x0004007cu, 0x00000008u, 0x00002605u, 0x00002604u, 0x0003003eu, 0x00002533u, 0x00002605u, 0x000300f7u, 0x00002607u, 0x00000000u, 0x000400fau, 0x000020fbu, 0x00002608u, 0x00002607u, 0x000200f8u, 0x00002608u, 0x000500aau, 0x0000005du, 0x0000260bu, 0x0000248au, 0x00000203u, 0x000300f7u, 0x0000260cu, 0x00000000u, 0x000400fau, 0x0000260bu, 0x0000260du, 0x0000260eu, 0x000200f8u, 0x0000260eu, 0x000500c7u, 0x00000006u, 0x00002622u, 0x000025f8u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x00002623u, 0x00000701u, 0x00002622u, 0x00050082u, 0x00000006u, 0x00002624u, 0x0000035bu, 0x00002623u, 0x000500c3u, 0x00000008u, 0x00002626u, 0x00002605u, 0x00002624u, 0x0003003eu, 0x00002533u, 0x00002626u, 0x000500c7u, 0x00000008u, 0x00002628u, 0x00002626u, 0x0000038bu, 0x0003003eu, 0x00002533u, 0x00002628u, 0x000500c4u, 0x00000008u, 0x0000262au, 0x00002628u, 0x00000215u, 0x0003003eu, 0x00002533u, 0x0000262au, 0x00050080u, 0x00000008u, 0x0000262du, 0x0000262au, 0x000024e0u, 0x0003003eu, 0x00002533u, 0x0000262du, 0x000200f9u, 0x0000260cu, 0x000200f8u, 0x0000260du, 0x000500c7u, 0x00000006u, 0x00002610u, 0x000025f8u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x00002611u, 0x00000701u, 0x00002610u, 0x00050082u, 0x00000006u, 0x00002612u, 0x00001245u, 0x00002611u, 0x000500c3u, 0x00000008u, 0x00002614u, 0x00002605u, 0x00002612u, 0x0003003eu, 0x00002533u, 0x00002614u, 0x000500c7u, 0x00000008u, 0x00002616u, 0x00002614u, 0x00000540u, 0x0003003eu, 0x00002533u, 0x00002616u, 0x000500c4u, 0x00000008u, 0x00002619u, 0x0000248fu, 0x0000021bu, 0x000500c5u, 0x00000008u, 0x0000261bu, 0x00002616u, 0x00002619u, 0x0003003eu, 0x00002533u, 0x0000261bu, 0x000500c4u, 0x00000008u, 0x0000261du, 0x0000261bu, 0x00000215u, 0x0003003eu, 0x00002533u, 0x0000261du, 0x00050080u, 0x00000008u, 0x00002620u, 0x0000261du, 0x000024e0u, 0x0003003eu, 0x00002533u, 0x00002620u, 0x000200f9u, 0x0000260cu, 0x000200f8u, 0x0000260cu, 0x000700f5u, 0x00000008u, 0x0000b9dcu, 0x00002620u, 0x0000260du, 0x0000262du, 0x0000260eu, 0x000500c5u, 0x00000008u, 0x00002630u, 0x0000b9dcu, 0x00001268u, 0x000500c6u, 0x00000008u, 0x00002631u, 0x00002630u, 0x00000212u, 0x00080041u, 0x00000270u, 0x00002632u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00002631u, 0x0004003du, 0x0000022bu, 0x00002633u, 0x00002632u, 0x00040071u, 0x00000006u, 0x00002634u, 0x00002633u, 0x0004007cu, 0x00000008u, 0x00002635u, 0x00002634u, 0x0003003eu, 0x00002533u, 0x00002635u, 0x000200f9u, 0x00002607u, 0x000200f8u, 0x00002607u, 0x000700f5u, 0x00000008u, 0x0000ba0au, 0x00002605u, 0x00002698u, 0x00002635u, 0x0000260cu, 0x000200f9u, 0x00002555u, 0x000200f8u, 0x00002556u, 0x00050084u, 0x00000008u, 0x00002559u, 0x00000215u, 0x000024e0u, 0x00050041u, 0x0000003eu, 0x0000255au, 0x000024b3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000255bu, 0x0000255au, 0x00050080u, 0x00000008u, 0x0000255cu, 0x0000255bu, 0x00002559u, 0x0003003eu, 0x0000255au, 0x0000255cu, 0x00110050u, 0x0000001eu, 0x00006c71u, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000684bu, 0x0000247du, 0x00002480u, 0x0000684eu, 0x0000248au, 0x0000248fu, 0x00002494u, 0x0000684eu, 0x0000249eu, 0x0000684eu, 0x000024a8u, 0x0003003eu, 0x00006c4cu, 0x00002494u, 0x0003003eu, 0x00006c4du, 0x000024a8u, 0x0004003du, 0x00000008u, 0x00002560u, 0x0000255au, 0x0003003eu, 0x0000252au, 0x00002560u, 0x00050050u, 0x0000005fu, 0x0000263bu, 0x00002560u, 0x00002560u, 0x00050080u, 0x0000005fu, 0x0000263cu, 0x0000263bu, 0x00000dcdu, 0x0003003eu, 0x00002637u, 0x0000263cu, 0x000500abu, 0x0000005du, 0x0000263fu, 0x00002494u, 0x00000203u, 0x000300f7u, 0x00002640u, 0x00000000u, 0x000400fau, 0x0000263fu, 0x00002641u, 0x00002640u, 0x000200f8u, 0x00002641u, 0x000500c4u, 0x00000008u, 0x00002644u, 0x00000212u, 0x00002494u, 0x0003003eu, 0x00002638u, 0x00002644u, 0x000500c7u, 0x00000008u, 0x00002647u, 0x000024a8u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00002648u, 0x00002647u, 0x00000203u, 0x000300f7u, 0x00002649u, 0x00000000u, 0x000400fau, 0x00002648u, 0x0000264au, 0x00002649u, 0x000200f8u, 0x0000264au, 0x00050050u, 0x0000005fu, 0x0000264du, 0x00002644u, 0x00002644u, 0x000500c7u, 0x0000005fu, 0x0000264eu, 0x0000263cu, 0x0000264du, 0x00050082u, 0x0000005fu, 0x00002650u, 0x0000264eu, 0x0000eeb7u, 0x0007000cu, 0x0000005fu, 0x00002652u, 0x00000001u, 0x0000002au, 0x00002650u, 0x00000c29u, 0x000500c6u, 0x0000005fu, 0x00002654u, 0x0000263cu, 0x00002652u, 0x0003003eu, 0x00002637u, 0x00002654u, 0x000200f9u, 0x00002649u, 0x000200f8u, 0x00002649u, 0x000700f5u, 0x0000005fu, 0x0000b9deu, 0x0000263cu, 0x00002641u, 0x00002654u, 0x0000264au, 0x00050082u, 0x00000008u, 0x00002656u, 0x00002644u, 0x00000212u, 0x00050050u, 0x0000005fu, 0x00002658u, 0x00002656u, 0x00002656u, 0x000500c7u, 0x0000005fu, 0x00002659u, 0x0000b9deu, 0x00002658u, 0x0003003eu, 0x00002637u, 0x00002659u, 0x000200f9u, 0x00002640u, 0x000200f8u, 0x00002640u, 0x000700f5u, 0x0000005fu, 0x0000b9dfu, 0x0000263cu, 0x00002556u, 0x00002659u, 0x00002649u, 0x0003003eu, 0x00002639u, 0x0000b9dfu, 0x0003003eu, 0x00002528u, 0x0000b9dfu, 0x0003003eu, 0x00006c50u, 0x0000249eu, 0x0003003eu, 0x00006c51u, 0x000024a8u, 0x00050041u, 0x0000003eu, 0x00002563u, 0x000024b3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002564u, 0x00002563u, 0x0003003eu, 0x0000252du, 0x00002564u, 0x000500abu, 0x0000005du, 0x0000265fu, 0x0000249eu, 0x00000203u, 0x000300f7u, 0x00002660u, 0x00000000u, 0x000400fau, 0x0000265fu, 0x00002661u, 0x00002660u, 0x000200f8u, 0x00002661u, 0x000500c4u, 0x00000008u, 0x00002664u, 0x00000212u, 0x0000249eu, 0x0003003eu, 0x0000265bu, 0x00002664u, 0x000500c7u, 0x00000008u, 0x00002667u, 0x000024a8u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00002668u, 0x00002667u, 0x00000203u, 0x000300f7u, 0x00002669u, 0x00000000u, 0x000400fau, 0x00002668u, 0x0000266au, 0x00002669u, 0x000200f8u, 0x0000266au, 0x000500c7u, 0x00000008u, 0x0000266du, 0x00002564u, 0x00002664u, 0x00050082u, 0x00000008u, 0x0000266eu, 0x0000266du, 0x00000212u, 0x0007000cu, 0x00000008u, 0x0000266fu, 0x00000001u, 0x0000002au, 0x0000266eu, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00002671u, 0x00002564u, 0x0000266fu, 0x0003003eu, 0x0000252du, 0x00002671u, 0x000200f9u, 0x00002669u, 0x000200f8u, 0x00002669u, 0x000700f5u, 0x00000008u, 0x0000b9efu, 0x00002564u, 0x00002661u, 0x00002671u, 0x0000266au, 0x00050082u, 0x00000008u, 0x00002673u, 0x00002664u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00002675u, 0x0000b9efu, 0x00002673u, 0x0003003eu, 0x0000252du, 0x00002675u, 0x000200f9u, 0x00002660u, 0x000200f8u, 0x00002660u, 0x000700f5u, 0x00000008u, 0x0000b9f0u, 0x00002564u, 0x00002640u, 0x00002675u, 0x00002669u, 0x0003003eu, 0x0000265cu, 0x0000b9f0u, 0x0003003eu, 0x0000252bu, 0x0000b9f0u, 0x0004007cu, 0x00000006u, 0x0000256bu, 0x0000b9f0u, 0x00050084u, 0x00000006u, 0x0000256cu, 0x00002480u, 0x0000256bu, 0x00050080u, 0x00000006u, 0x0000256du, 0x0000247du, 0x0000256cu, 0x0003003eu, 0x0000252eu, 0x0000256du, 0x00050084u, 0x00000006u, 0x0000256fu, 0x0000256du, 0x000003c4u, 0x00050050u, 0x0000005fu, 0x00002572u, 0x0000254cu, 0x0000254cu, 0x000500c4u, 0x0000005fu, 0x00002573u, 0x0000b9dfu, 0x00002572u, 0x0004007cu, 0x000000a2u, 0x00002574u, 0x00002573u, 0x00050050u, 0x000000a2u, 0x00002575u, 0x0000256fu, 0x0000256fu, 0x00050080u, 0x000000a2u, 0x00002576u, 0x00002575u, 0x00002574u, 0x000500c7u, 0x000000a2u, 0x00002578u, 0x00002576u, 0x0000eebbu, 0x0003003eu, 0x0000252fu, 0x00002578u, 0x000500c7u, 0x00000006u, 0x0000257bu, 0x0000256bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000257cu, 0x0000257bu, 0x0000035bu, 0x0004003du, 0x000000a2u, 0x0000257du, 0x0000252fu, 0x00050050u, 0x000000a2u, 0x0000257eu, 0x0000257cu, 0x0000257cu, 0x000500c6u, 0x000000a2u, 0x0000257fu, 0x0000257du, 0x0000257eu, 0x0003003eu, 0x0000252fu, 0x0000257fu, 0x0004003du, 0x000000a2u, 0x00002580u, 0x0000252fu, 0x000500c2u, 0x000000a2u, 0x00002582u, 0x00002580u, 0x0000eebcu, 0x0003003eu, 0x00002530u, 0x00002582u, 0x0004007cu, 0x00000006u, 0x00002584u, 0x00002553u, 0x0004003du, 0x000000a2u, 0x00002585u, 0x00002530u, 0x00050050u, 0x000000a2u, 0x00002586u, 0x00002584u, 0x00002584u, 0x000500c7u, 0x000000a2u, 0x00002587u, 0x00002585u, 0x00002586u, 0x0003003eu, 0x00002530u, 0x00002587u, 0x00050041u, 0x00000007u, 0x00002589u, 0x00002530u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000258au, 0x00002589u, 0x000500c6u, 0x00000006u, 0x0000258bu, 0x0000258au, 0x00000485u, 0x00080041u, 0x00000270u, 0x0000258cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000258bu, 0x0004003du, 0x0000022bu, 0x0000258du, 0x0000258cu, 0x00040071u, 0x00000006u, 0x0000258eu, 0x0000258du, 0x0004007cu, 0x00000008u, 0x0000258fu, 0x0000258eu, 0x0003003eu, 0x00002531u, 0x0000258fu, 0x00050041u, 0x00000007u, 0x00002591u, 0x00002530u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00002592u, 0x00002591u, 0x000500c6u, 0x00000006u, 0x00002593u, 0x00002592u, 0x00000485u, 0x00080041u, 0x00000270u, 0x00002594u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00002593u, 0x0004003du, 0x0000022bu, 0x00002595u, 0x00002594u, 0x00040071u, 0x00000006u, 0x00002596u, 0x00002595u, 0x0004007cu, 0x00000008u, 0x00002597u, 0x00002596u, 0x0003003eu, 0x00002532u, 0x00002597u, 0x000500aau, 0x0000005du, 0x0000259au, 0x0000248au, 0x00000212u, 0x000300f7u, 0x0000259bu, 0x00000000u, 0x000400fau, 0x0000259au, 0x0000259cu, 0x0000259du, 0x000200f8u, 0x0000259du, 0x000500aau, 0x0000005du, 0x000025b4u, 0x0000248au, 0x00000203u, 0x000300f7u, 0x000025b5u, 0x00000000u, 0x000400fau, 0x000025b4u, 0x000025b6u, 0x000025b7u, 0x000200f8u, 0x000025b7u, 0x000500c3u, 0x00000008u, 0x000025cfu, 0x0000258fu, 0x0000025eu, 0x0003003eu, 0x00002531u, 0x000025cfu, 0x000500c3u, 0x00000008u, 0x000025d1u, 0x00002597u, 0x0000025eu, 0x0003003eu, 0x00002532u, 0x000025d1u, 0x000200f9u, 0x000025b5u, 0x000200f8u, 0x000025b6u, 0x00050041u, 0x00000007u, 0x000025b8u, 0x0000252fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000025b9u, 0x000025b8u, 0x000500c7u, 0x00000006u, 0x000025bau, 0x000025b9u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000025bbu, 0x000025bau, 0x00050084u, 0x00000008u, 0x000025bcu, 0x0000021bu, 0x000025bbu, 0x00050082u, 0x00000008u, 0x000025bdu, 0x00000276u, 0x000025bcu, 0x000500c3u, 0x00000008u, 0x000025bfu, 0x0000258fu, 0x000025bdu, 0x0003003eu, 0x00002531u, 0x000025bfu, 0x00050041u, 0x00000007u, 0x000025c0u, 0x0000252fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000025c1u, 0x000025c0u, 0x000500c7u, 0x00000006u, 0x000025c2u, 0x000025c1u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000025c3u, 0x000025c2u, 0x00050084u, 0x00000008u, 0x000025c4u, 0x0000021bu, 0x000025c3u, 0x00050082u, 0x00000008u, 0x000025c5u, 0x00000276u, 0x000025c4u, 0x000500c3u, 0x00000008u, 0x000025c7u, 0x00002597u, 0x000025c5u, 0x0003003eu, 0x00002532u, 0x000025c7u, 0x000500c7u, 0x00000008u, 0x000025c9u, 0x000025bfu, 0x00000540u, 0x00050084u, 0x00000008u, 0x000025cau, 0x000025c9u, 0x00000422u, 0x0003003eu, 0x00002531u, 0x000025cau, 0x000500c7u, 0x00000008u, 0x000025ccu, 0x000025c7u, 0x00000540u, 0x00050084u, 0x00000008u, 0x000025cdu, 0x000025ccu, 0x00000422u, 0x0003003eu, 0x00002532u, 0x000025cdu, 0x000200f9u, 0x000025b5u, 0x000200f8u, 0x000025b5u, 0x000700f5u, 0x00000008u, 0x0000ba08u, 0x000025cdu, 0x000025b6u, 0x000025d1u, 0x000025b7u, 0x000700f5u, 0x00000008u, 0x0000ba06u, 0x000025cau, 0x000025b6u, 0x000025cfu, 0x000025b7u, 0x000200f9u, 0x0000259bu, 0x000200f8u, 0x0000259cu, 0x00050041u, 0x00000007u, 0x0000259eu, 0x0000252fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000259fu, 0x0000259eu, 0x000500c7u, 0x00000006u, 0x000025a0u, 0x0000259fu, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000025a1u, 0x000025a0u, 0x00050084u, 0x00000008u, 0x000025a2u, 0x0000021bu, 0x000025a1u, 0x00050082u, 0x00000008u, 0x000025a3u, 0x0000025eu, 0x000025a2u, 0x000500c3u, 0x00000008u, 0x000025a5u, 0x0000258fu, 0x000025a3u, 0x0003003eu, 0x00002531u, 0x000025a5u, 0x00050041u, 0x00000007u, 0x000025a6u, 0x0000252fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000025a7u, 0x000025a6u, 0x000500c7u, 0x00000006u, 0x000025a8u, 0x000025a7u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000025a9u, 0x000025a8u, 0x00050084u, 0x00000008u, 0x000025aau, 0x0000021bu, 0x000025a9u, 0x00050082u, 0x00000008u, 0x000025abu, 0x0000025eu, 0x000025aau, 0x000500c3u, 0x00000008u, 0x000025adu, 0x00002597u, 0x000025abu, 0x0003003eu, 0x00002532u, 0x000025adu, 0x000500c7u, 0x00000008u, 0x000025afu, 0x000025a5u, 0x0000038bu, 0x0003003eu, 0x00002531u, 0x000025afu, 0x000500c7u, 0x00000008u, 0x000025b1u, 0x000025adu, 0x0000038bu, 0x0003003eu, 0x00002532u, 0x000025b1u, 0x000200f9u, 0x0000259bu, 0x000200f8u, 0x0000259bu, 0x000700f5u, 0x00000008u, 0x0000ba07u, 0x000025b1u, 0x0000259cu, 0x0000ba08u, 0x000025b5u, 0x000700f5u, 0x00000008u, 0x0000ba05u, 0x000025afu, 0x0000259cu, 0x0000ba06u, 0x000025b5u, 0x000500c4u, 0x00000008u, 0x000025d3u, 0x0000ba05u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x000025d5u, 0x000025d3u, 0x0000ba07u, 0x0003003eu, 0x00002533u, 0x000025d5u, 0x000200f9u, 0x00002555u, 0x000200f8u, 0x00002555u, 0x000700f5u, 0x00000008u, 0x0000ba09u, 0x000025d5u, 0x0000259bu, 0x0000ba0au, 0x00002607u, 0x0003003eu, 0x0000253du, 0x0000ba09u, 0x0003003eu, 0x000024b0u, 0x0000ba09u, 0x000500c7u, 0x00000008u, 0x000024e8u, 0x000023c4u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000024e9u, 0x0000025eu, 0x000024e8u, 0x00050082u, 0x00000008u, 0x000024eau, 0x0000025eu, 0x000024e9u, 0x000500c3u, 0x00000008u, 0x000024ecu, 0x0000ba09u, 0x000024eau, 0x0003003eu, 0x000024b0u, 0x000024ecu, 0x000500c7u, 0x00000008u, 0x000024eeu, 0x000024ecu, 0x0000038bu, 0x0003003eu, 0x000024b0u, 0x000024eeu, 0x000200f9u, 0x000024dcu, 0x000200f8u, 0x000024dcu, 0x000700f5u, 0x00000008u, 0x0000ba1au, 0x000024eeu, 0x00002555u, 0x0000b99du, 0x000026e1u, 0x000200f9u, 0x000024d6u, 0x000200f8u, 0x000024d7u, 0x0003003eu, 0x000024b0u, 0x00000203u, 0x000200f9u, 0x000024d6u, 0x000200f8u, 0x000024d6u, 0x000700f5u, 0x00000008u, 0x0000ba19u, 0x00000203u, 0x000024d7u, 0x0000ba1au, 0x000024dcu, 0x0003003eu, 0x000024bdu, 0x0000ba19u, 0x0003003eu, 0x0000201cu, 0x0000ba19u, 0x0003003eu, 0x00007891u, 0x0000ba19u, 0x0003003eu, 0x00007892u, 0x0000037du, 0x000300f7u, 0x00002182u, 0x00000000u, 0x000400fau, 0x00002125u, 0x00002183u, 0x00002182u, 0x000200f8u, 0x00002183u, 0x000500aau, 0x0000005du, 0x00002186u, 0x000024d4u, 0x00000215u, 0x000200f9u, 0x00002182u, 0x000200f8u, 0x00002182u, 0x000700f5u, 0x0000005du, 0x00002187u, 0x00002125u, 0x000024d6u, 0x00002186u, 0x00002183u, 0x000300f7u, 0x00002188u, 0x00000000u, 0x000400fau, 0x00002187u, 0x00002189u, 0x00002188u, 0x000200f8u, 0x00002189u, 0x000500c7u, 0x00000008u, 0x0000218bu, 0x0000ba19u, 0x00000212u, 0x000500aau, 0x0000005du, 0x0000218cu, 0x0000218bu, 0x00000203u, 0x000200f9u, 0x00002188u, 0x000200f8u, 0x00002188u, 0x000700f5u, 0x0000005du, 0x0000218du, 0x00002187u, 0x00002182u, 0x0000218cu, 0x00002189u, 0x000300f7u, 0x0000218eu, 0x00000000u, 0x000400fau, 0x0000218du, 0x0000218fu, 0x0000218eu, 0x000200f8u, 0x0000218fu, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x0000218eu, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x0000055eu, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x00002153u, 0x0003003eu, 0x00002024u, 0x0000233au, 0x0003003eu, 0x00002025u, 0x0000233fu, 0x0003003eu, 0x00002026u, 0x00007a43u, 0x000500c4u, 0x00000008u, 0x00002846u, 0x00007a43u, 0x00000218u, 0x00070050u, 0x00000009u, 0x00002847u, 0x00002846u, 0x00002846u, 0x00002846u, 0x00002846u, 0x00050080u, 0x00000009u, 0x00002848u, 0x000005f4u, 0x00002847u, 0x0003003eu, 0x0000283bu, 0x00002848u, 0x0009004fu, 0x00000009u, 0x0000284bu, 0x0000233au, 0x0000233au, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b1u, 0x000005f9u, 0x0000284cu, 0x00002848u, 0x0000284bu, 0x0003003eu, 0x0000283cu, 0x0000284cu, 0x0009004fu, 0x00000009u, 0x0000284fu, 0x0000233au, 0x0000233au, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b1u, 0x000005f9u, 0x00002850u, 0x00002848u, 0x0000284fu, 0x0003003eu, 0x0000283du, 0x00002850u, 0x0009004fu, 0x00000009u, 0x00002853u, 0x0000233fu, 0x0000233fu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500afu, 0x000005f9u, 0x00002854u, 0x00002848u, 0x00002853u, 0x0003003eu, 0x0000283eu, 0x00002854u, 0x0009004fu, 0x00000009u, 0x00002857u, 0x0000233fu, 0x0000233fu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500afu, 0x000005f9u, 0x00002858u, 0x00002848u, 0x00002857u, 0x0003003eu, 0x0000283fu, 0x00002858u, 0x000600a9u, 0x00000009u, 0x0000285au, 0x0000284cu, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x0000285cu, 0x00002854u, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x0000285du, 0x0000285au, 0x0000285cu, 0x0003003eu, 0x00002840u, 0x0000285du, 0x000600a9u, 0x00000009u, 0x0000285fu, 0x00002850u, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x00002861u, 0x00002858u, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x00002862u, 0x0000285fu, 0x00002861u, 0x0003003eu, 0x00002841u, 0x00002862u, 0x00050084u, 0x00000009u, 0x00002864u, 0x0000285du, 0x0000061fu, 0x00050084u, 0x00000009u, 0x00002866u, 0x00002862u, 0x00000624u, 0x00050080u, 0x00000009u, 0x00002867u, 0x00002864u, 0x00002866u, 0x0003003eu, 0x00002842u, 0x00002867u, 0x00050041u, 0x0000003eu, 0x00002868u, 0x00002842u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002869u, 0x00002868u, 0x00050041u, 0x0000003eu, 0x0000286au, 0x00002842u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000286bu, 0x0000286au, 0x000500c5u, 0x00000008u, 0x0000286cu, 0x00002869u, 0x0000286bu, 0x00050041u, 0x0000003eu, 0x0000286du, 0x00002842u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000286eu, 0x0000286du, 0x00050041u, 0x0000003eu, 0x0000286fu, 0x00002842u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00002870u, 0x0000286fu, 0x000500c5u, 0x00000008u, 0x00002871u, 0x0000286eu, 0x00002870u, 0x000500c5u, 0x00000008u, 0x00002872u, 0x0000286cu, 0x00002871u, 0x0003003eu, 0x00002843u, 0x00002872u, 0x000400c8u, 0x00000008u, 0x00002874u, 0x00002872u, 0x000500c7u, 0x00000008u, 0x00002875u, 0x00002874u, 0x0000038bu, 0x0003003eu, 0x00002844u, 0x00002875u, 0x0003003eu, 0x00002023u, 0x00002875u, 0x000500aau, 0x0000005du, 0x000021a6u, 0x00002875u, 0x00000203u, 0x000300f7u, 0x000021a7u, 0x00000000u, 0x000400fau, 0x000021a6u, 0x000021a8u, 0x000021a7u, 0x000200f8u, 0x000021a8u, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x000021a7u, 0x000400cdu, 0x00000008u, 0x000021aau, 0x00002875u, 0x0003003eu, 0x00002027u, 0x000021aau, 0x000400a8u, 0x0000005du, 0x000021acu, 0x00002116u, 0x000300f7u, 0x000021adu, 0x00000000u, 0x000400fau, 0x000021acu, 0x000021aeu, 0x000021adu, 0x000200f8u, 0x000021aeu, 0x000500c7u, 0x00000008u, 0x000021b0u, 0x00002875u, 0x00000212u, 0x000500aau, 0x0000005du, 0x000021b1u, 0x000021b0u, 0x00000203u, 0x000200f9u, 0x000021adu, 0x000200f8u, 0x000021adu, 0x000700f5u, 0x0000005du, 0x000021b2u, 0x000021acu, 0x000021a7u, 0x000021b1u, 0x000021aeu, 0x000300f7u, 0x000021b3u, 0x00000000u, 0x000400fau, 0x000021b2u, 0x000021b4u, 0x000021b3u, 0x000200f8u, 0x000021b4u, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x000021b3u, 0x0003003eu, 0x00002029u, 0x00001ec7u, 0x00070041u, 0x00000234u, 0x00002878u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00002879u, 0x00002878u, 0x00040071u, 0x00000237u, 0x0000287au, 0x00002879u, 0x0004007cu, 0x00000009u, 0x0000287bu, 0x0000287au, 0x00070041u, 0x00000234u, 0x0000287du, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000212u, 0x0004003du, 0x0000022au, 0x0000287eu, 0x0000287du, 0x00040071u, 0x00000237u, 0x0000287fu, 0x0000287eu, 0x0004007cu, 0x00000009u, 0x00002880u, 0x0000287fu, 0x00070041u, 0x00000234u, 0x00002882u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000215u, 0x0004003du, 0x0000022au, 0x00002883u, 0x00002882u, 0x00040071u, 0x00000237u, 0x00002884u, 0x00002883u, 0x0004007cu, 0x00000009u, 0x00002885u, 0x00002884u, 0x00070041u, 0x00000234u, 0x00002887u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000218u, 0x0004003du, 0x0000022au, 0x00002888u, 0x00002887u, 0x00040071u, 0x00000237u, 0x00002889u, 0x00002888u, 0x0004007cu, 0x00000009u, 0x0000288au, 0x00002889u, 0x00070041u, 0x00000234u, 0x0000288cu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000021bu, 0x0004003du, 0x0000022au, 0x0000288du, 0x0000288cu, 0x00040071u, 0x00000237u, 0x0000288eu, 0x0000288du, 0x0004007cu, 0x00000009u, 0x0000288fu, 0x0000288eu, 0x00070041u, 0x00000234u, 0x00002891u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000021eu, 0x0004003du, 0x0000022au, 0x00002892u, 0x00002891u, 0x00040071u, 0x00000237u, 0x00002893u, 0x00002892u, 0x0004007cu, 0x00000009u, 0x00002894u, 0x00002893u, 0x00070041u, 0x00000234u, 0x00002896u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000221u, 0x0004003du, 0x0000022au, 0x00002897u, 0x00002896u, 0x00040071u, 0x00000237u, 0x00002898u, 0x00002897u, 0x0004007cu, 0x00000009u, 0x00002899u, 0x00002898u, 0x00070041u, 0x00000234u, 0x0000289bu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000224u, 0x0004003du, 0x0000022au, 0x0000289cu, 0x0000289bu, 0x00040071u, 0x00000237u, 0x0000289du, 0x0000289cu, 0x0004007cu, 0x00000009u, 0x0000289eu, 0x0000289du, 0x00070041u, 0x00000234u, 0x000028a0u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000025eu, 0x0004003du, 0x0000022au, 0x000028a1u, 0x000028a0u, 0x00040071u, 0x00000237u, 0x000028a2u, 0x000028a1u, 0x0004007cu, 0x00000009u, 0x000028a3u, 0x000028a2u, 0x00070041u, 0x00000234u, 0x000028a5u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000264u, 0x0004003du, 0x0000022au, 0x000028a6u, 0x000028a5u, 0x00040071u, 0x00000237u, 0x000028a7u, 0x000028a6u, 0x0004007cu, 0x00000009u, 0x000028a8u, 0x000028a7u, 0x00070041u, 0x0000026bu, 0x000028aau, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000026au, 0x0004003du, 0x00000006u, 0x000028abu, 0x000028aau, 0x00070041u, 0x00000270u, 0x000028adu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000026fu, 0x0004003du, 0x0000022bu, 0x000028aeu, 0x000028adu, 0x00040071u, 0x00000006u, 0x000028afu, 0x000028aeu, 0x0004007cu, 0x00000008u, 0x000028b0u, 0x000028afu, 0x00070041u, 0x00000277u, 0x000028b2u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000276u, 0x0004003du, 0x00000229u, 0x000028b3u, 0x000028b2u, 0x00040071u, 0x00000006u, 0x000028b4u, 0x000028b3u, 0x0004007cu, 0x00000008u, 0x000028b5u, 0x000028b4u, 0x00070041u, 0x00000277u, 0x000028b7u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000027du, 0x0004003du, 0x00000229u, 0x000028b8u, 0x000028b7u, 0x00040071u, 0x00000006u, 0x000028b9u, 0x000028b8u, 0x0004007cu, 0x00000008u, 0x000028bau, 0x000028b9u, 0x00070041u, 0x00000284u, 0x000028bcu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000283u, 0x0004003du, 0x0000022du, 0x000028bdu, 0x000028bcu, 0x00040072u, 0x00000009u, 0x000028beu, 0x000028bdu, 0x00120050u, 0x0000000fu, 0x000028bfu, 0x0000287bu, 0x00002880u, 0x00002885u, 0x0000288au, 0x0000288fu, 0x00002894u, 0x00002899u, 0x0000289eu, 0x000028a3u, 0x000028a8u, 0x000028abu, 0x000028b0u, 0x000028b5u, 0x000028bau, 0x000028beu, 0x0003003eu, 0x00006c0eu, 0x0000287bu, 0x0003003eu, 0x00006c0fu, 0x00002880u, 0x0003003eu, 0x00006c10u, 0x00002885u, 0x0003003eu, 0x00006c11u, 0x0000288au, 0x0003003eu, 0x00006c12u, 0x0000288fu, 0x0003003eu, 0x00006c13u, 0x00002894u, 0x0003003eu, 0x00006c14u, 0x00002899u, 0x0003003eu, 0x00006c15u, 0x0000289eu, 0x0003003eu, 0x00006c16u, 0x000028a3u, 0x0003003eu, 0x00006c17u, 0x000028a8u, 0x0003003eu, 0x00006c18u, 0x000028abu, 0x0003003eu, 0x00006c19u, 0x000028b0u, 0x0003003eu, 0x00006c1au, 0x000028b5u, 0x0003003eu, 0x00006c1bu, 0x000028bau, 0x0003003eu, 0x00006c1cu, 0x000028beu, 0x0003003eu, 0x00006dedu, 0x0000287bu, 0x0003003eu, 0x00006deeu, 0x00002880u, 0x0003003eu, 0x00006defu, 0x00002885u, 0x0003003eu, 0x00006df0u, 0x0000288au, 0x0003003eu, 0x00006df1u, 0x0000288fu, 0x0003003eu, 0x00006df2u, 0x00002894u, 0x0003003eu, 0x00006df3u, 0x00002899u, 0x0003003eu, 0x00006df4u, 0x0000289eu, 0x0003003eu, 0x00006df5u, 0x000028a8u, 0x0003003eu, 0x00006df6u, 0x000028bau, 0x0003003eu, 0x00006df7u, 0x000028beu, 0x00050082u, 0x00000008u, 0x000021bau, 0x00007a43u, 0x00002342u, 0x0003003eu, 0x0000202au, 0x000021bau, 0x000600a9u, 0x00000008u, 0x000021bcu, 0x00002151u, 0x00000212u, 0x00000ccfu, 0x0003003eu, 0x0000202bu, 0x000021bcu, 0x0003003eu, 0x0000202du, 0x00002332u, 0x0003003eu, 0x0000202eu, 0x0000235au, 0x0003003eu, 0x0000202fu, 0x0000235eu, 0x0003003eu, 0x00002030u, 0x000021bau, 0x0003003eu, 0x00002031u, 0x00002875u, 0x000500c7u, 0x00000009u, 0x000028c8u, 0x0000235au, 0x0000eeb4u, 0x00070050u, 0x00000009u, 0x000028c9u, 0x0000078du, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x00000009u, 0x000028cau, 0x000028c8u, 0x000028c9u, 0x00070050u, 0x00000009u, 0x000028ccu, 0x000021bau, 0x000021bau, 0x000021bau, 0x000021bau, 0x00050084u, 0x00000009u, 0x000028cdu, 0x000028cau, 0x000028ccu, 0x00050080u, 0x00000009u, 0x000028cfu, 0x00002332u, 0x000028cdu, 0x0003003eu, 0x0000202du, 0x000028cfu, 0x000500c3u, 0x00000009u, 0x000028d2u, 0x000028cfu, 0x0000eeb5u, 0x00050051u, 0x00000008u, 0x000028d3u, 0x000028d2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000028d4u, 0x000028d2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000028d5u, 0x000028d2u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000028d6u, 0x000028d2u, 0x00000003u, 0x0003003eu, 0x000028c0u, 0x000028d2u, 0x0006000cu, 0x00000008u, 0x000028d9u, 0x00000001u, 0x00000049u, 0x00002875u, 0x0003003eu, 0x000028c1u, 0x000028d9u, 0x000500c3u, 0x00000008u, 0x000028dbu, 0x000028d9u, 0x00000212u, 0x0003003eu, 0x000028c2u, 0x000028dbu, 0x000500c7u, 0x00000008u, 0x000028ddu, 0x000028d9u, 0x00000212u, 0x000500c4u, 0x00000008u, 0x000028deu, 0x000028ddu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000028e0u, 0x000028dbu, 0x00000212u, 0x00050080u, 0x00000008u, 0x000028e1u, 0x000028deu, 0x000028e0u, 0x0003003eu, 0x000028c3u, 0x000028e1u, 0x00070050u, 0x00000009u, 0x000028e3u, 0x00000c85u, 0x00000c85u, 0x00000c85u, 0x00000c85u, 0x000500c4u, 0x00000009u, 0x000028e4u, 0x000028d2u, 0x000028e3u, 0x0003003eu, 0x000028c0u, 0x000028e4u, 0x000500c3u, 0x00000009u, 0x000028e8u, 0x0000235au, 0x0000eeb5u, 0x00050051u, 0x00000008u, 0x000028e9u, 0x000028e8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000028eau, 0x000028e8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000028ebu, 0x000028e8u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000028ecu, 0x000028e8u, 0x00000003u, 0x00070050u, 0x00000009u, 0x000028eeu, 0x000028e1u, 0x000028e1u, 0x000028e1u, 0x000028e1u, 0x00050084u, 0x00000009u, 0x000028efu, 0x000028eeu, 0x000028e8u, 0x000500c3u, 0x00000009u, 0x000028f3u, 0x0000235eu, 0x0000eeb5u, 0x00050051u, 0x00000008u, 0x000028f4u, 0x000028f3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000028f5u, 0x000028f3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000028f6u, 0x000028f3u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000028f7u, 0x000028f3u, 0x00000003u, 0x00070050u, 0x00000009u, 0x000028f9u, 0x000028dbu, 0x000028dbu, 0x000028dbu, 0x000028dbu, 0x00050084u, 0x00000009u, 0x000028fau, 0x000028f9u, 0x000028f3u, 0x00050080u, 0x00000009u, 0x000028fbu, 0x000028efu, 0x000028fau, 0x00050080u, 0x00000009u, 0x000028fdu, 0x000028e4u, 0x000028fbu, 0x0003003eu, 0x000028c0u, 0x000028fdu, 0x00070050u, 0x00000009u, 0x000028ffu, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x000500c3u, 0x00000009u, 0x00002900u, 0x000028fdu, 0x000028ffu, 0x0003003eu, 0x000028c0u, 0x00002900u, 0x0003003eu, 0x000028c4u, 0x00002900u, 0x0003003eu, 0x00002903u, 0x00002900u, 0x00050082u, 0x00000009u, 0x0000290fu, 0x00002900u, 0x0000eeb6u, 0x0003003eu, 0x00002903u, 0x0000290fu, 0x000600cau, 0x00000009u, 0x00002911u, 0x0000290fu, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00002903u, 0x00002911u, 0x00050080u, 0x00000009u, 0x00002914u, 0x00002911u, 0x0000eeb6u, 0x0003003eu, 0x00002903u, 0x00002914u, 0x0008000cu, 0x00000009u, 0x00002916u, 0x00000001u, 0x0000002du, 0x00002914u, 0x00000611u, 0x00000ae7u, 0x00050051u, 0x00000008u, 0x00002917u, 0x00002916u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002918u, 0x00002916u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002919u, 0x00002916u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000291au, 0x00002916u, 0x00000003u, 0x0003003eu, 0x0000290cu, 0x00002916u, 0x0003003eu, 0x00002904u, 0x00002916u, 0x0003003eu, 0x000028c5u, 0x00002916u, 0x0003003eu, 0x0000202cu, 0x00002916u, 0x0003003eu, 0x00002032u, 0x00000543u, 0x0003003eu, 0x00002033u, 0x000021bcu, 0x000500a7u, 0x0000005du, 0x000021c8u, 0x00001c7fu, 0x00002137u, 0x000300f7u, 0x000021c9u, 0x00000000u, 0x000400fau, 0x000021c8u, 0x000021cau, 0x000021c9u, 0x000200f8u, 0x000021cau, 0x000500c7u, 0x00000006u, 0x000021ccu, 0x000020c1u, 0x00000a37u, 0x000500abu, 0x0000005du, 0x000021cdu, 0x000021ccu, 0x00000374u, 0x000300f7u, 0x000021ceu, 0x00000000u, 0x000400fau, 0x000021cdu, 0x000021cfu, 0x000021ceu, 0x000200f8u, 0x000021cfu, 0x00050084u, 0x00000008u, 0x000021d1u, 0x000021bcu, 0x00000880u, 0x0003003eu, 0x00002033u, 0x000021d1u, 0x000200f9u, 0x000021ceu, 0x000200f8u, 0x000021ceu, 0x000700f5u, 0x00000008u, 0x00007a75u, 0x000021bcu, 0x000021cau, 0x000021d1u, 0x000021cfu, 0x000200f9u, 0x000021c9u, 0x000200f8u, 0x000021c9u, 0x000700f5u, 0x00000008u, 0x00007a74u, 0x000021bcu, 0x000021b3u, 0x00007a75u, 0x000021ceu, 0x0003003eu, 0x00002038u, 0x00002335u, 0x0003003eu, 0x00002039u, 0x00002362u, 0x0003003eu, 0x0000203au, 0x00002366u, 0x0003003eu, 0x0000203bu, 0x000021bau, 0x0003003eu, 0x0000203cu, 0x00002875u, 0x0003003eu, 0x0000203du, 0x0000210au, 0x0003003eu, 0x0000203eu, 0x00002137u, 0x0003003eu, 0x0000203fu, 0x00007a74u, 0x0003003eu, 0x00002044u, 0x00000543u, 0x0004003du, 0x00000009u, 0x0000292du, 0x00002038u, 0x0008004fu, 0x0000003cu, 0x0000292eu, 0x0000292du, 0x0000292du, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000292fu, 0x00002039u, 0x0008004fu, 0x0000003cu, 0x00002930u, 0x0000292fu, 0x0000292fu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00002932u, 0x00002930u, 0x0000eeb2u, 0x00060050u, 0x0000003cu, 0x00002933u, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x0000003cu, 0x00002934u, 0x00002932u, 0x00002933u, 0x00060050u, 0x0000003cu, 0x00002936u, 0x000021bau, 0x000021bau, 0x000021bau, 0x00050084u, 0x0000003cu, 0x00002937u, 0x00002934u, 0x00002936u, 0x00050080u, 0x0000003cu, 0x00002938u, 0x0000292eu, 0x00002937u, 0x0003003eu, 0x0000291cu, 0x00002938u, 0x000300f7u, 0x0000293au, 0x00000000u, 0x000400fau, 0x00002137u, 0x0000293bu, 0x0000293au, 0x000200f8u, 0x0000293bu, 0x0004003du, 0x00000009u, 0x0000293eu, 0x00002039u, 0x0008004fu, 0x0000003cu, 0x0000293fu, 0x0000293eu, 0x0000293eu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00002941u, 0x0000293fu, 0x0000eeb2u, 0x000500c3u, 0x0000003cu, 0x00002943u, 0x00002941u, 0x00002933u, 0x00060050u, 0x0000003cu, 0x00002944u, 0x00007a74u, 0x00007a74u, 0x00007a74u, 0x00050084u, 0x0000003cu, 0x00002945u, 0x00002944u, 0x00002943u, 0x00050080u, 0x0000003cu, 0x00002946u, 0x00002938u, 0x00002945u, 0x0003003eu, 0x0000291du, 0x00002946u, 0x000300f7u, 0x00002947u, 0x00000000u, 0x000400fau, 0x00000d2eu, 0x00002948u, 0x00002949u, 0x000200f8u, 0x00002949u, 0x0004003du, 0x00000009u, 0x00002957u, 0x0000203au, 0x0008004fu, 0x0000003cu, 0x00002958u, 0x00002957u, 0x00002957u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x0000295au, 0x00002958u, 0x0000eeb8u, 0x000500c3u, 0x0000003cu, 0x0000295cu, 0x0000295au, 0x00002933u, 0x00050080u, 0x0000003cu, 0x0000295du, 0x00002938u, 0x0000295cu, 0x0003003eu, 0x0000291eu, 0x0000295du, 0x000200f9u, 0x00002947u, 0x000200f8u, 0x00002948u, 0x0006000cu, 0x00000008u, 0x0000294cu, 0x00000001u, 0x00000005u, 0x00007a74u, 0x0004003du, 0x00000009u, 0x0000294du, 0x0000203au, 0x0008004fu, 0x0000003cu, 0x0000294eu, 0x0000294du, 0x0000294du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00002950u, 0x0000294eu, 0x0000eeb8u, 0x000500c3u, 0x0000003cu, 0x00002952u, 0x00002950u, 0x00002933u, 0x00060050u, 0x0000003cu, 0x00002953u, 0x0000294cu, 0x0000294cu, 0x0000294cu, 0x00050084u, 0x0000003cu, 0x00002954u, 0x00002953u, 0x00002952u, 0x00050080u, 0x0000003cu, 0x00002955u, 0x00002938u, 0x00002954u, 0x0003003eu, 0x0000291eu, 0x00002955u, 0x000200f9u, 0x00002947u, 0x000200f8u, 0x00002947u, 0x000700f5u, 0x0000003cu, 0x00007a9au, 0x00002955u, 0x00002948u, 0x0000295du, 0x00002949u, 0x000200f9u, 0x0000293au, 0x000200f8u, 0x0000293au, 0x000700f5u, 0x0000003cu, 0x00007a8du, 0x00007a93u, 0x000021c9u, 0x00007a9au, 0x00002947u, 0x000700f5u, 0x0000003cu, 0x00007a7eu, 0x00007a84u, 0x000021c9u, 0x00002946u, 0x00002947u, 0x000300f7u, 0x0000295fu, 0x00000000u, 0x000400fau, 0x0000210au, 0x00002960u, 0x00002961u, 0x000200f8u, 0x00002961u, 0x000500c3u, 0x0000003cu, 0x00002979u, 0x00002938u, 0x0000eeb3u, 0x0003003eu, 0x00002925u, 0x00002979u, 0x0007004fu, 0x0000005fu, 0x00002b48u, 0x00002979u, 0x00002979u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002b46u, 0x00002b48u, 0x0003003eu, 0x00002040u, 0x00002b48u, 0x000300f7u, 0x0000297cu, 0x00000000u, 0x000400fau, 0x00002137u, 0x0000297du, 0x0000297cu, 0x000200f8u, 0x0000297du, 0x000500c3u, 0x0000003cu, 0x00002980u, 0x00007a7eu, 0x0000eeb3u, 0x0003003eu, 0x00002926u, 0x00002980u, 0x0007004fu, 0x0000005fu, 0x00002b4bu, 0x00002980u, 0x00002980u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002b49u, 0x00002b4bu, 0x0003003eu, 0x00002041u, 0x00002b4bu, 0x000500c3u, 0x0000003cu, 0x00002984u, 0x00007a8du, 0x0000eeb3u, 0x0003003eu, 0x00002927u, 0x00002984u, 0x0007004fu, 0x0000005fu, 0x00002b4eu, 0x00002984u, 0x00002984u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002b4cu, 0x00002b4eu, 0x0003003eu, 0x00002042u, 0x00002b4eu, 0x000200f9u, 0x0000297cu, 0x000200f8u, 0x0000297cu, 0x000700f5u, 0x0000005fu, 0x00007b8cu, 0x00007b7eu, 0x00002961u, 0x00002b4eu, 0x0000297du, 0x000700f5u, 0x0000005fu, 0x00007b72u, 0x00007b5au, 0x00002961u, 0x00002b4bu, 0x0000297du, 0x000200f9u, 0x0000295fu, 0x000200f8u, 0x00002960u, 0x000500c3u, 0x0000003cu, 0x00002964u, 0x00002938u, 0x0000eeb3u, 0x0003003eu, 0x0000291fu, 0x00002964u, 0x0003003eu, 0x00002920u, 0x00000543u, 0x00050041u, 0x0000003eu, 0x000029beu, 0x0000291fu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000029bfu, 0x000029beu, 0x0003003eu, 0x000029b4u, 0x000029bfu, 0x000500b3u, 0x0000005du, 0x000029c1u, 0x000029bfu, 0x00000203u, 0x0003003eu, 0x000029b5u, 0x000029c1u, 0x000500c7u, 0x00000008u, 0x000029c3u, 0x000029bfu, 0x00000bfdu, 0x0003003eu, 0x000029b4u, 0x000029c3u, 0x0003003eu, 0x000029b7u, 0x000029c3u, 0x0006000cu, 0x00000008u, 0x00002a1fu, 0x00000001u, 0x0000004au, 0x000029c3u, 0x00050082u, 0x00000008u, 0x00002a20u, 0x00000283u, 0x00002a1fu, 0x0007000cu, 0x00000008u, 0x00002a21u, 0x00000001u, 0x00000027u, 0x00002a20u, 0x00000283u, 0x0003003eu, 0x00002a17u, 0x00002a21u, 0x000500c4u, 0x00000008u, 0x00002a24u, 0x000029c3u, 0x00002a21u, 0x000500c7u, 0x00000008u, 0x00002a25u, 0x00002a24u, 0x00000b17u, 0x0003003eu, 0x00002a18u, 0x00002a25u, 0x000500c7u, 0x00000008u, 0x00002a27u, 0x00002a25u, 0x0000038bu, 0x0003003eu, 0x00002a19u, 0x00002a27u, 0x000500c3u, 0x00000008u, 0x00002a29u, 0x00002a25u, 0x0000025eu, 0x0003003eu, 0x00002a1bu, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x00002a2au, 0x00002a1bu, 0x00002a29u, 0x0004003du, 0x0000005fu, 0x00002a2bu, 0x00002a2au, 0x00050051u, 0x00000008u, 0x00002a2cu, 0x00002a2bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002a2du, 0x00002a2bu, 0x00000001u, 0x0003003eu, 0x00002a1au, 0x00002a2bu, 0x00050041u, 0x0000003eu, 0x00002a2fu, 0x00002a1au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a30u, 0x00002a2fu, 0x00050084u, 0x00000008u, 0x00002a32u, 0x00002a30u, 0x00002a27u, 0x000500c3u, 0x00000008u, 0x00002a33u, 0x00002a32u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002a34u, 0x00002a1au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a35u, 0x00002a34u, 0x00050080u, 0x00000008u, 0x00002a36u, 0x00002a33u, 0x00002a35u, 0x0003003eu, 0x00002a1cu, 0x00002a36u, 0x00050050u, 0x0000005fu, 0x00002a39u, 0x00002a36u, 0x00002a21u, 0x0003003eu, 0x00002a1du, 0x00002a39u, 0x0003003eu, 0x000029b6u, 0x00002a39u, 0x00050041u, 0x0000003eu, 0x000029c6u, 0x000029b6u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000029c7u, 0x000029c6u, 0x0003003eu, 0x000029b8u, 0x000029c7u, 0x0004003du, 0x0000003cu, 0x000029c8u, 0x0000291fu, 0x0007004fu, 0x0000005fu, 0x000029c9u, 0x000029c8u, 0x000029c8u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x000029cau, 0x000029b6u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000029cbu, 0x000029cau, 0x00050050u, 0x0000005fu, 0x000029ccu, 0x000029cbu, 0x000029cbu, 0x00050084u, 0x0000005fu, 0x000029cdu, 0x000029c9u, 0x000029ccu, 0x0003003eu, 0x000029b9u, 0x000029cdu, 0x000500c3u, 0x00000008u, 0x000029cfu, 0x00000c10u, 0x000029c7u, 0x0004007eu, 0x00000008u, 0x000029d0u, 0x000029cfu, 0x000500c7u, 0x00000008u, 0x000029d1u, 0x00000c0fu, 0x000029d0u, 0x0003003eu, 0x000029bau, 0x000029d1u, 0x0004003du, 0x0000005fu, 0x000029d2u, 0x000029b9u, 0x00050050u, 0x0000005fu, 0x000029d4u, 0x000029d1u, 0x000029d1u, 0x000500c7u, 0x0000005fu, 0x000029d5u, 0x000029d2u, 0x000029d4u, 0x0003003eu, 0x000029bbu, 0x000029d5u, 0x000500abu, 0x0000005du, 0x000029d7u, 0x000029c7u, 0x00000283u, 0x000300f7u, 0x000029d8u, 0x00000000u, 0x000400fau, 0x000029d7u, 0x000029d9u, 0x000029dau, 0x000200f8u, 0x000029dau, 0x0004003du, 0x0000005fu, 0x000029e0u, 0x000029b9u, 0x000500c4u, 0x0000005fu, 0x000029e2u, 0x000029e0u, 0x0000eeb7u, 0x0003003eu, 0x000029bcu, 0x000029e2u, 0x000200f9u, 0x000029d8u, 0x000200f8u, 0x000029d9u, 0x0004003du, 0x0000005fu, 0x000029dbu, 0x000029b9u, 0x00050082u, 0x00000008u, 0x000029ddu, 0x0000027du, 0x000029c7u, 0x00050050u, 0x0000005fu, 0x000029deu, 0x000029ddu, 0x000029ddu, 0x000500c3u, 0x0000005fu, 0x000029dfu, 0x000029dbu, 0x000029deu, 0x0003003eu, 0x000029b9u, 0x000029dfu, 0x0003003eu, 0x000029bcu, 0x000029dfu, 0x000200f9u, 0x000029d8u, 0x000200f8u, 0x000029d8u, 0x0004003du, 0x0000005fu, 0x000029e3u, 0x000029bbu, 0x000500abu, 0x00000879u, 0x000029e4u, 0x000029e3u, 0x00000c29u, 0x0004009au, 0x0000005du, 0x000029e5u, 0x000029e4u, 0x000300f7u, 0x000029e6u, 0x00000000u, 0x000400fau, 0x000029e5u, 0x000029e7u, 0x000029e6u, 0x000200f8u, 0x000029e7u, 0x00050041u, 0x0000003eu, 0x000029e8u, 0x000029bbu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000029e9u, 0x000029e8u, 0x000500abu, 0x0000005du, 0x000029ebu, 0x000029e9u, 0x000029d1u, 0x000300f7u, 0x000029ecu, 0x00000000u, 0x000400fau, 0x000029ebu, 0x000029edu, 0x000029ecu, 0x000200f8u, 0x000029edu, 0x0004003du, 0x00000008u, 0x000029efu, 0x000029e8u, 0x000500abu, 0x0000005du, 0x000029f0u, 0x000029efu, 0x00000203u, 0x000200f9u, 0x000029ecu, 0x000200f8u, 0x000029ecu, 0x000700f5u, 0x0000005du, 0x000029f1u, 0x000029ebu, 0x000029e7u, 0x000029f0u, 0x000029edu, 0x000300f7u, 0x000029f2u, 0x00000000u, 0x000400fau, 0x000029f1u, 0x000029f3u, 0x000029f2u, 0x000200f8u, 0x000029f3u, 0x00050041u, 0x0000003eu, 0x000029f4u, 0x000029b9u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000029f5u, 0x000029f4u, 0x000500c7u, 0x00000008u, 0x000029f6u, 0x000029f5u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x000029f7u, 0x000029f6u, 0x00000203u, 0x000300f7u, 0x000029f8u, 0x00000000u, 0x000400fau, 0x000029f7u, 0x000029f9u, 0x000029fau, 0x000200f8u, 0x000029fau, 0x00050041u, 0x0000003eu, 0x000029fcu, 0x000029bcu, 0x00000374u, 0x0003003eu, 0x000029fcu, 0x00000c42u, 0x000200f9u, 0x000029f8u, 0x000200f8u, 0x000029f9u, 0x00050041u, 0x0000003eu, 0x000029fbu, 0x000029bcu, 0x00000374u, 0x0003003eu, 0x000029fbu, 0x00000bfdu, 0x000200f9u, 0x000029f8u, 0x000200f8u, 0x000029f8u, 0x0003003eu, 0x00002920u, 0x0000055eu, 0x000200f9u, 0x000029f2u, 0x000200f8u, 0x000029f2u, 0x000600a9u, 0x0000005du, 0x0000eecfu, 0x000029f1u, 0x0000055eu, 0x00000543u, 0x00050041u, 0x0000003eu, 0x000029fdu, 0x000029bbu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000029feu, 0x000029fdu, 0x000500abu, 0x0000005du, 0x00002a00u, 0x000029feu, 0x000029d1u, 0x000300f7u, 0x00002a01u, 0x00000000u, 0x000400fau, 0x00002a00u, 0x00002a02u, 0x00002a01u, 0x000200f8u, 0x00002a02u, 0x0004003du, 0x00000008u, 0x00002a04u, 0x000029fdu, 0x000500abu, 0x0000005du, 0x00002a05u, 0x00002a04u, 0x00000203u, 0x000200f9u, 0x00002a01u, 0x000200f8u, 0x00002a01u, 0x000700f5u, 0x0000005du, 0x00002a06u, 0x00002a00u, 0x000029f2u, 0x00002a05u, 0x00002a02u, 0x000300f7u, 0x00002a07u, 0x00000000u, 0x000400fau, 0x00002a06u, 0x00002a08u, 0x00002a07u, 0x000200f8u, 0x00002a08u, 0x00050041u, 0x0000003eu, 0x00002a09u, 0x000029b9u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a0au, 0x00002a09u, 0x000500c7u, 0x00000008u, 0x00002a0bu, 0x00002a0au, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00002a0cu, 0x00002a0bu, 0x00000203u, 0x000300f7u, 0x00002a0du, 0x00000000u, 0x000400fau, 0x00002a0cu, 0x00002a0eu, 0x00002a0fu, 0x000200f8u, 0x00002a0fu, 0x00050041u, 0x0000003eu, 0x00002a11u, 0x000029bcu, 0x00000485u, 0x0003003eu, 0x00002a11u, 0x00000c42u, 0x000200f9u, 0x00002a0du, 0x000200f8u, 0x00002a0eu, 0x00050041u, 0x0000003eu, 0x00002a10u, 0x000029bcu, 0x00000485u, 0x0003003eu, 0x00002a10u, 0x00000bfdu, 0x000200f9u, 0x00002a0du, 0x000200f8u, 0x00002a0du, 0x0003003eu, 0x00002920u, 0x0000055eu, 0x000200f9u, 0x00002a07u, 0x000200f8u, 0x00002a07u, 0x000600a9u, 0x0000005du, 0x0000eed0u, 0x00002a06u, 0x0000055eu, 0x0000eecfu, 0x000200f9u, 0x000029e6u, 0x000200f8u, 0x000029e6u, 0x000700f5u, 0x0000005du, 0x00007aaau, 0x00000543u, 0x000029d8u, 0x0000eed0u, 0x00002a07u, 0x000300f7u, 0x00002a13u, 0x00000000u, 0x000400fau, 0x000029c1u, 0x00002a14u, 0x00002a13u, 0x000200f8u, 0x00002a14u, 0x0003003eu, 0x000029bcu, 0x00000c5cu, 0x0003003eu, 0x00002920u, 0x0000055eu, 0x000200f9u, 0x00002a13u, 0x000200f8u, 0x00002a13u, 0x000600a9u, 0x0000005du, 0x0000eed1u, 0x000029c1u, 0x0000055eu, 0x00007aaau, 0x0004003du, 0x0000005fu, 0x00002a15u, 0x000029bcu, 0x0008000cu, 0x0000005fu, 0x00002a16u, 0x00000001u, 0x0000002du, 0x00002a15u, 0x00000c5fu, 0x00000c60u, 0x0003003eu, 0x000029bdu, 0x00002a16u, 0x0003003eu, 0x00002044u, 0x0000eed1u, 0x0003003eu, 0x00002040u, 0x00002a16u, 0x000300f7u, 0x00002969u, 0x00000000u, 0x000400fau, 0x00002137u, 0x0000296au, 0x00002969u, 0x000200f8u, 0x0000296au, 0x000500c3u, 0x0000003cu, 0x0000296du, 0x00007a7eu, 0x0000eeb3u, 0x0003003eu, 0x00002921u, 0x0000296du, 0x0003003eu, 0x00002922u, 0x0000eed1u, 0x00050041u, 0x0000003eu, 0x00002a44u, 0x00002921u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002a45u, 0x00002a44u, 0x0003003eu, 0x00002a3au, 0x00002a45u, 0x000500b3u, 0x0000005du, 0x00002a47u, 0x00002a45u, 0x00000203u, 0x0003003eu, 0x00002a3bu, 0x00002a47u, 0x000500c7u, 0x00000008u, 0x00002a49u, 0x00002a45u, 0x00000bfdu, 0x0003003eu, 0x00002a3au, 0x00002a49u, 0x0003003eu, 0x00002a3du, 0x00002a49u, 0x0006000cu, 0x00000008u, 0x00002aa5u, 0x00000001u, 0x0000004au, 0x00002a49u, 0x00050082u, 0x00000008u, 0x00002aa6u, 0x00000283u, 0x00002aa5u, 0x0007000cu, 0x00000008u, 0x00002aa7u, 0x00000001u, 0x00000027u, 0x00002aa6u, 0x00000283u, 0x0003003eu, 0x00002a9du, 0x00002aa7u, 0x000500c4u, 0x00000008u, 0x00002aaau, 0x00002a49u, 0x00002aa7u, 0x000500c7u, 0x00000008u, 0x00002aabu, 0x00002aaau, 0x00000b17u, 0x0003003eu, 0x00002a9eu, 0x00002aabu, 0x000500c7u, 0x00000008u, 0x00002aadu, 0x00002aabu, 0x0000038bu, 0x0003003eu, 0x00002a9fu, 0x00002aadu, 0x000500c3u, 0x00000008u, 0x00002aafu, 0x00002aabu, 0x0000025eu, 0x0003003eu, 0x00002aa1u, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x00002ab0u, 0x00002aa1u, 0x00002aafu, 0x0004003du, 0x0000005fu, 0x00002ab1u, 0x00002ab0u, 0x00050051u, 0x00000008u, 0x00002ab2u, 0x00002ab1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002ab3u, 0x00002ab1u, 0x00000001u, 0x0003003eu, 0x00002aa0u, 0x00002ab1u, 0x00050041u, 0x0000003eu, 0x00002ab5u, 0x00002aa0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002ab6u, 0x00002ab5u, 0x00050084u, 0x00000008u, 0x00002ab8u, 0x00002ab6u, 0x00002aadu, 0x000500c3u, 0x00000008u, 0x00002ab9u, 0x00002ab8u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002abau, 0x00002aa0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002abbu, 0x00002abau, 0x00050080u, 0x00000008u, 0x00002abcu, 0x00002ab9u, 0x00002abbu, 0x0003003eu, 0x00002aa2u, 0x00002abcu, 0x00050050u, 0x0000005fu, 0x00002abfu, 0x00002abcu, 0x00002aa7u, 0x0003003eu, 0x00002aa3u, 0x00002abfu, 0x0003003eu, 0x00002a3cu, 0x00002abfu, 0x00050041u, 0x0000003eu, 0x00002a4cu, 0x00002a3cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a4du, 0x00002a4cu, 0x0003003eu, 0x00002a3eu, 0x00002a4du, 0x0004003du, 0x0000003cu, 0x00002a4eu, 0x00002921u, 0x0007004fu, 0x0000005fu, 0x00002a4fu, 0x00002a4eu, 0x00002a4eu, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00002a50u, 0x00002a3cu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a51u, 0x00002a50u, 0x00050050u, 0x0000005fu, 0x00002a52u, 0x00002a51u, 0x00002a51u, 0x00050084u, 0x0000005fu, 0x00002a53u, 0x00002a4fu, 0x00002a52u, 0x0003003eu, 0x00002a3fu, 0x00002a53u, 0x000500c3u, 0x00000008u, 0x00002a55u, 0x00000c10u, 0x00002a4du, 0x0004007eu, 0x00000008u, 0x00002a56u, 0x00002a55u, 0x000500c7u, 0x00000008u, 0x00002a57u, 0x00000c0fu, 0x00002a56u, 0x0003003eu, 0x00002a40u, 0x00002a57u, 0x0004003du, 0x0000005fu, 0x00002a58u, 0x00002a3fu, 0x00050050u, 0x0000005fu, 0x00002a5au, 0x00002a57u, 0x00002a57u, 0x000500c7u, 0x0000005fu, 0x00002a5bu, 0x00002a58u, 0x00002a5au, 0x0003003eu, 0x00002a41u, 0x00002a5bu, 0x000500abu, 0x0000005du, 0x00002a5du, 0x00002a4du, 0x00000283u, 0x000300f7u, 0x00002a5eu, 0x00000000u, 0x000400fau, 0x00002a5du, 0x00002a5fu, 0x00002a60u, 0x000200f8u, 0x00002a60u, 0x0004003du, 0x0000005fu, 0x00002a66u, 0x00002a3fu, 0x000500c4u, 0x0000005fu, 0x00002a68u, 0x00002a66u, 0x0000eeb7u, 0x0003003eu, 0x00002a42u, 0x00002a68u, 0x000200f9u, 0x00002a5eu, 0x000200f8u, 0x00002a5fu, 0x0004003du, 0x0000005fu, 0x00002a61u, 0x00002a3fu, 0x00050082u, 0x00000008u, 0x00002a63u, 0x0000027du, 0x00002a4du, 0x00050050u, 0x0000005fu, 0x00002a64u, 0x00002a63u, 0x00002a63u, 0x000500c3u, 0x0000005fu, 0x00002a65u, 0x00002a61u, 0x00002a64u, 0x0003003eu, 0x00002a3fu, 0x00002a65u, 0x0003003eu, 0x00002a42u, 0x00002a65u, 0x000200f9u, 0x00002a5eu, 0x000200f8u, 0x00002a5eu, 0x0004003du, 0x0000005fu, 0x00002a69u, 0x00002a41u, 0x000500abu, 0x00000879u, 0x00002a6au, 0x00002a69u, 0x00000c29u, 0x0004009au, 0x0000005du, 0x00002a6bu, 0x00002a6au, 0x000300f7u, 0x00002a6cu, 0x00000000u, 0x000400fau, 0x00002a6bu, 0x00002a6du, 0x00002a6cu, 0x000200f8u, 0x00002a6du, 0x00050041u, 0x0000003eu, 0x00002a6eu, 0x00002a41u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a6fu, 0x00002a6eu, 0x000500abu, 0x0000005du, 0x00002a71u, 0x00002a6fu, 0x00002a57u, 0x000300f7u, 0x00002a72u, 0x00000000u, 0x000400fau, 0x00002a71u, 0x00002a73u, 0x00002a72u, 0x000200f8u, 0x00002a73u, 0x0004003du, 0x00000008u, 0x00002a75u, 0x00002a6eu, 0x000500abu, 0x0000005du, 0x00002a76u, 0x00002a75u, 0x00000203u, 0x000200f9u, 0x00002a72u, 0x000200f8u, 0x00002a72u, 0x000700f5u, 0x0000005du, 0x00002a77u, 0x00002a71u, 0x00002a6du, 0x00002a76u, 0x00002a73u, 0x000300f7u, 0x00002a78u, 0x00000000u, 0x000400fau, 0x00002a77u, 0x00002a79u, 0x00002a78u, 0x000200f8u, 0x00002a79u, 0x00050041u, 0x0000003eu, 0x00002a7au, 0x00002a3fu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a7bu, 0x00002a7au, 0x000500c7u, 0x00000008u, 0x00002a7cu, 0x00002a7bu, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00002a7du, 0x00002a7cu, 0x00000203u, 0x000300f7u, 0x00002a7eu, 0x00000000u, 0x000400fau, 0x00002a7du, 0x00002a7fu, 0x00002a80u, 0x000200f8u, 0x00002a80u, 0x00050041u, 0x0000003eu, 0x00002a82u, 0x00002a42u, 0x00000374u, 0x0003003eu, 0x00002a82u, 0x00000c42u, 0x000200f9u, 0x00002a7eu, 0x000200f8u, 0x00002a7fu, 0x00050041u, 0x0000003eu, 0x00002a81u, 0x00002a42u, 0x00000374u, 0x0003003eu, 0x00002a81u, 0x00000bfdu, 0x000200f9u, 0x00002a7eu, 0x000200f8u, 0x00002a7eu, 0x0003003eu, 0x00002922u, 0x0000055eu, 0x000200f9u, 0x00002a78u, 0x000200f8u, 0x00002a78u, 0x000600a9u, 0x0000005du, 0x0000eed2u, 0x00002a77u, 0x0000055eu, 0x0000eed1u, 0x00050041u, 0x0000003eu, 0x00002a83u, 0x00002a41u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a84u, 0x00002a83u, 0x000500abu, 0x0000005du, 0x00002a86u, 0x00002a84u, 0x00002a57u, 0x000300f7u, 0x00002a87u, 0x00000000u, 0x000400fau, 0x00002a86u, 0x00002a88u, 0x00002a87u, 0x000200f8u, 0x00002a88u, 0x0004003du, 0x00000008u, 0x00002a8au, 0x00002a83u, 0x000500abu, 0x0000005du, 0x00002a8bu, 0x00002a8au, 0x00000203u, 0x000200f9u, 0x00002a87u, 0x000200f8u, 0x00002a87u, 0x000700f5u, 0x0000005du, 0x00002a8cu, 0x00002a86u, 0x00002a78u, 0x00002a8bu, 0x00002a88u, 0x000300f7u, 0x00002a8du, 0x00000000u, 0x000400fau, 0x00002a8cu, 0x00002a8eu, 0x00002a8du, 0x000200f8u, 0x00002a8eu, 0x00050041u, 0x0000003eu, 0x00002a8fu, 0x00002a3fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a90u, 0x00002a8fu, 0x000500c7u, 0x00000008u, 0x00002a91u, 0x00002a90u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00002a92u, 0x00002a91u, 0x00000203u, 0x000300f7u, 0x00002a93u, 0x00000000u, 0x000400fau, 0x00002a92u, 0x00002a94u, 0x00002a95u, 0x000200f8u, 0x00002a95u, 0x00050041u, 0x0000003eu, 0x00002a97u, 0x00002a42u, 0x00000485u, 0x0003003eu, 0x00002a97u, 0x00000c42u, 0x000200f9u, 0x00002a93u, 0x000200f8u, 0x00002a94u, 0x00050041u, 0x0000003eu, 0x00002a96u, 0x00002a42u, 0x00000485u, 0x0003003eu, 0x00002a96u, 0x00000bfdu, 0x000200f9u, 0x00002a93u, 0x000200f8u, 0x00002a93u, 0x0003003eu, 0x00002922u, 0x0000055eu, 0x000200f9u, 0x00002a8du, 0x000200f8u, 0x00002a8du, 0x000600a9u, 0x0000005du, 0x0000eed3u, 0x00002a8cu, 0x0000055eu, 0x0000eed2u, 0x000200f9u, 0x00002a6cu, 0x000200f8u, 0x00002a6cu, 0x000700f5u, 0x0000005du, 0x00007acfu, 0x0000eed1u, 0x00002a5eu, 0x0000eed3u, 0x00002a8du, 0x000300f7u, 0x00002a99u, 0x00000000u, 0x000400fau, 0x00002a47u, 0x00002a9au, 0x00002a99u, 0x000200f8u, 0x00002a9au, 0x0003003eu, 0x00002a42u, 0x00000c5cu, 0x0003003eu, 0x00002922u, 0x0000055eu, 0x000200f9u, 0x00002a99u, 0x000200f8u, 0x00002a99u, 0x000600a9u, 0x0000005du, 0x0000eed4u, 0x00002a47u, 0x0000055eu, 0x00007acfu, 0x0004003du, 0x0000005fu, 0x00002a9bu, 0x00002a42u, 0x0008000cu, 0x0000005fu, 0x00002a9cu, 0x00000001u, 0x0000002du, 0x00002a9bu, 0x00000c5fu, 0x00000c60u, 0x0003003eu, 0x00002a43u, 0x00002a9cu, 0x0003003eu, 0x00002044u, 0x0000eed4u, 0x0003003eu, 0x00002041u, 0x00002a9cu, 0x000500c3u, 0x0000003cu, 0x00002973u, 0x00007a8du, 0x0000eeb3u, 0x0003003eu, 0x00002923u, 0x00002973u, 0x0003003eu, 0x00002924u, 0x0000eed4u, 0x00050041u, 0x0000003eu, 0x00002acau, 0x00002923u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002acbu, 0x00002acau, 0x0003003eu, 0x00002ac0u, 0x00002acbu, 0x000500b3u, 0x0000005du, 0x00002acdu, 0x00002acbu, 0x00000203u, 0x0003003eu, 0x00002ac1u, 0x00002acdu, 0x000500c7u, 0x00000008u, 0x00002acfu, 0x00002acbu, 0x00000bfdu, 0x0003003eu, 0x00002ac0u, 0x00002acfu, 0x0003003eu, 0x00002ac3u, 0x00002acfu, 0x0006000cu, 0x00000008u, 0x00002b2bu, 0x00000001u, 0x0000004au, 0x00002acfu, 0x00050082u, 0x00000008u, 0x00002b2cu, 0x00000283u, 0x00002b2bu, 0x0007000cu, 0x00000008u, 0x00002b2du, 0x00000001u, 0x00000027u, 0x00002b2cu, 0x00000283u, 0x0003003eu, 0x00002b23u, 0x00002b2du, 0x000500c4u, 0x00000008u, 0x00002b30u, 0x00002acfu, 0x00002b2du, 0x000500c7u, 0x00000008u, 0x00002b31u, 0x00002b30u, 0x00000b17u, 0x0003003eu, 0x00002b24u, 0x00002b31u, 0x000500c7u, 0x00000008u, 0x00002b33u, 0x00002b31u, 0x0000038bu, 0x0003003eu, 0x00002b25u, 0x00002b33u, 0x000500c3u, 0x00000008u, 0x00002b35u, 0x00002b31u, 0x0000025eu, 0x0003003eu, 0x00002b27u, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x00002b36u, 0x00002b27u, 0x00002b35u, 0x0004003du, 0x0000005fu, 0x00002b37u, 0x00002b36u, 0x00050051u, 0x00000008u, 0x00002b38u, 0x00002b37u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002b39u, 0x00002b37u, 0x00000001u, 0x0003003eu, 0x00002b26u, 0x00002b37u, 0x00050041u, 0x0000003eu, 0x00002b3bu, 0x00002b26u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b3cu, 0x00002b3bu, 0x00050084u, 0x00000008u, 0x00002b3eu, 0x00002b3cu, 0x00002b33u, 0x000500c3u, 0x00000008u, 0x00002b3fu, 0x00002b3eu, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002b40u, 0x00002b26u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b41u, 0x00002b40u, 0x00050080u, 0x00000008u, 0x00002b42u, 0x00002b3fu, 0x00002b41u, 0x0003003eu, 0x00002b28u, 0x00002b42u, 0x00050050u, 0x0000005fu, 0x00002b45u, 0x00002b42u, 0x00002b2du, 0x0003003eu, 0x00002b29u, 0x00002b45u, 0x0003003eu, 0x00002ac2u, 0x00002b45u, 0x00050041u, 0x0000003eu, 0x00002ad2u, 0x00002ac2u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002ad3u, 0x00002ad2u, 0x0003003eu, 0x00002ac4u, 0x00002ad3u, 0x0004003du, 0x0000003cu, 0x00002ad4u, 0x00002923u, 0x0007004fu, 0x0000005fu, 0x00002ad5u, 0x00002ad4u, 0x00002ad4u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00002ad6u, 0x00002ac2u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002ad7u, 0x00002ad6u, 0x00050050u, 0x0000005fu, 0x00002ad8u, 0x00002ad7u, 0x00002ad7u, 0x00050084u, 0x0000005fu, 0x00002ad9u, 0x00002ad5u, 0x00002ad8u, 0x0003003eu, 0x00002ac5u, 0x00002ad9u, 0x000500c3u, 0x00000008u, 0x00002adbu, 0x00000c10u, 0x00002ad3u, 0x0004007eu, 0x00000008u, 0x00002adcu, 0x00002adbu, 0x000500c7u, 0x00000008u, 0x00002addu, 0x00000c0fu, 0x00002adcu, 0x0003003eu, 0x00002ac6u, 0x00002addu, 0x0004003du, 0x0000005fu, 0x00002adeu, 0x00002ac5u, 0x00050050u, 0x0000005fu, 0x00002ae0u, 0x00002addu, 0x00002addu, 0x000500c7u, 0x0000005fu, 0x00002ae1u, 0x00002adeu, 0x00002ae0u, 0x0003003eu, 0x00002ac7u, 0x00002ae1u, 0x000500abu, 0x0000005du, 0x00002ae3u, 0x00002ad3u, 0x00000283u, 0x000300f7u, 0x00002ae4u, 0x00000000u, 0x000400fau, 0x00002ae3u, 0x00002ae5u, 0x00002ae6u, 0x000200f8u, 0x00002ae6u, 0x0004003du, 0x0000005fu, 0x00002aecu, 0x00002ac5u, 0x000500c4u, 0x0000005fu, 0x00002aeeu, 0x00002aecu, 0x0000eeb7u, 0x0003003eu, 0x00002ac8u, 0x00002aeeu, 0x000200f9u, 0x00002ae4u, 0x000200f8u, 0x00002ae5u, 0x0004003du, 0x0000005fu, 0x00002ae7u, 0x00002ac5u, 0x00050082u, 0x00000008u, 0x00002ae9u, 0x0000027du, 0x00002ad3u, 0x00050050u, 0x0000005fu, 0x00002aeau, 0x00002ae9u, 0x00002ae9u, 0x000500c3u, 0x0000005fu, 0x00002aebu, 0x00002ae7u, 0x00002aeau, 0x0003003eu, 0x00002ac5u, 0x00002aebu, 0x0003003eu, 0x00002ac8u, 0x00002aebu, 0x000200f9u, 0x00002ae4u, 0x000200f8u, 0x00002ae4u, 0x0004003du, 0x0000005fu, 0x00002aefu, 0x00002ac7u, 0x000500abu, 0x00000879u, 0x00002af0u, 0x00002aefu, 0x00000c29u, 0x0004009au, 0x0000005du, 0x00002af1u, 0x00002af0u, 0x000300f7u, 0x00002af2u, 0x00000000u, 0x000400fau, 0x00002af1u, 0x00002af3u, 0x00002af2u, 0x000200f8u, 0x00002af3u, 0x00050041u, 0x0000003eu, 0x00002af4u, 0x00002ac7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002af5u, 0x00002af4u, 0x000500abu, 0x0000005du, 0x00002af7u, 0x00002af5u, 0x00002addu, 0x000300f7u, 0x00002af8u, 0x00000000u, 0x000400fau, 0x00002af7u, 0x00002af9u, 0x00002af8u, 0x000200f8u, 0x00002af9u, 0x0004003du, 0x00000008u, 0x00002afbu, 0x00002af4u, 0x000500abu, 0x0000005du, 0x00002afcu, 0x00002afbu, 0x00000203u, 0x000200f9u, 0x00002af8u, 0x000200f8u, 0x00002af8u, 0x000700f5u, 0x0000005du, 0x00002afdu, 0x00002af7u, 0x00002af3u, 0x00002afcu, 0x00002af9u, 0x000300f7u, 0x00002afeu, 0x00000000u, 0x000400fau, 0x00002afdu, 0x00002affu, 0x00002afeu, 0x000200f8u, 0x00002affu, 0x00050041u, 0x0000003eu, 0x00002b00u, 0x00002ac5u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b01u, 0x00002b00u, 0x000500c7u, 0x00000008u, 0x00002b02u, 0x00002b01u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00002b03u, 0x00002b02u, 0x00000203u, 0x000300f7u, 0x00002b04u, 0x00000000u, 0x000400fau, 0x00002b03u, 0x00002b05u, 0x00002b06u, 0x000200f8u, 0x00002b06u, 0x00050041u, 0x0000003eu, 0x00002b08u, 0x00002ac8u, 0x00000374u, 0x0003003eu, 0x00002b08u, 0x00000c42u, 0x000200f9u, 0x00002b04u, 0x000200f8u, 0x00002b05u, 0x00050041u, 0x0000003eu, 0x00002b07u, 0x00002ac8u, 0x00000374u, 0x0003003eu, 0x00002b07u, 0x00000bfdu, 0x000200f9u, 0x00002b04u, 0x000200f8u, 0x00002b04u, 0x0003003eu, 0x00002924u, 0x0000055eu, 0x000200f9u, 0x00002afeu, 0x000200f8u, 0x00002afeu, 0x000600a9u, 0x0000005du, 0x0000eed5u, 0x00002afdu, 0x0000055eu, 0x0000eed4u, 0x00050041u, 0x0000003eu, 0x00002b09u, 0x00002ac7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b0au, 0x00002b09u, 0x000500abu, 0x0000005du, 0x00002b0cu, 0x00002b0au, 0x00002addu, 0x000300f7u, 0x00002b0du, 0x00000000u, 0x000400fau, 0x00002b0cu, 0x00002b0eu, 0x00002b0du, 0x000200f8u, 0x00002b0eu, 0x0004003du, 0x00000008u, 0x00002b10u, 0x00002b09u, 0x000500abu, 0x0000005du, 0x00002b11u, 0x00002b10u, 0x00000203u, 0x000200f9u, 0x00002b0du, 0x000200f8u, 0x00002b0du, 0x000700f5u, 0x0000005du, 0x00002b12u, 0x00002b0cu, 0x00002afeu, 0x00002b11u, 0x00002b0eu, 0x000300f7u, 0x00002b13u, 0x00000000u, 0x000400fau, 0x00002b12u, 0x00002b14u, 0x00002b13u, 0x000200f8u, 0x00002b14u, 0x00050041u, 0x0000003eu, 0x00002b15u, 0x00002ac5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b16u, 0x00002b15u, 0x000500c7u, 0x00000008u, 0x00002b17u, 0x00002b16u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00002b18u, 0x00002b17u, 0x00000203u, 0x000300f7u, 0x00002b19u, 0x00000000u, 0x000400fau, 0x00002b18u, 0x00002b1au, 0x00002b1bu, 0x000200f8u, 0x00002b1bu, 0x00050041u, 0x0000003eu, 0x00002b1du, 0x00002ac8u, 0x00000485u, 0x0003003eu, 0x00002b1du, 0x00000c42u, 0x000200f9u, 0x00002b19u, 0x000200f8u, 0x00002b1au, 0x00050041u, 0x0000003eu, 0x00002b1cu, 0x00002ac8u, 0x00000485u, 0x0003003eu, 0x00002b1cu, 0x00000bfdu, 0x000200f9u, 0x00002b19u, 0x000200f8u, 0x00002b19u, 0x0003003eu, 0x00002924u, 0x0000055eu, 0x000200f9u, 0x00002b13u, 0x000200f8u, 0x00002b13u, 0x000600a9u, 0x0000005du, 0x0000eed6u, 0x00002b12u, 0x0000055eu, 0x0000eed5u, 0x000200f9u, 0x00002af2u, 0x000200f8u, 0x00002af2u, 0x000700f5u, 0x0000005du, 0x00007af4u, 0x0000eed4u, 0x00002ae4u, 0x0000eed6u, 0x00002b13u, 0x000300f7u, 0x00002b1fu, 0x00000000u, 0x000400fau, 0x00002acdu, 0x00002b20u, 0x00002b1fu, 0x000200f8u, 0x00002b20u, 0x0003003eu, 0x00002ac8u, 0x00000c5cu, 0x0003003eu, 0x00002924u, 0x0000055eu, 0x000200f9u, 0x00002b1fu, 0x000200f8u, 0x00002b1fu, 0x000600a9u, 0x0000005du, 0x0000eed7u, 0x00002acdu, 0x0000055eu, 0x00007af4u, 0x0004003du, 0x0000005fu, 0x00002b21u, 0x00002ac8u, 0x0008000cu, 0x0000005fu, 0x00002b22u, 0x00000001u, 0x0000002du, 0x00002b21u, 0x00000c5fu, 0x00000c60u, 0x0003003eu, 0x00002ac9u, 0x00002b22u, 0x0003003eu, 0x00002044u, 0x0000eed7u, 0x0003003eu, 0x00002042u, 0x00002b22u, 0x000200f9u, 0x00002969u, 0x000200f8u, 0x00002969u, 0x000700f5u, 0x0000005du, 0x00007b8eu, 0x0000eed1u, 0x00002a13u, 0x0000eed7u, 0x00002b1fu, 0x000700f5u, 0x0000005fu, 0x00007b74u, 0x00007b7eu, 0x00002a13u, 0x00002b22u, 0x00002b1fu, 0x000700f5u, 0x0000005fu, 0x00007b50u, 0x00007b5au, 0x00002a13u, 0x00002a9cu, 0x00002b1fu, 0x000200f9u, 0x0000295fu, 0x000200f8u, 0x0000295fu, 0x000700f5u, 0x0000005du, 0x00007b8du, 0x00007b8eu, 0x00002969u, 0x00000543u, 0x0000297cu, 0x000700f5u, 0x0000005fu, 0x00007b73u, 0x00007b74u, 0x00002969u, 0x00007b8cu, 0x0000297cu, 0x000700f5u, 0x0000005fu, 0x00007b4fu, 0x00007b50u, 0x00002969u, 0x00007b72u, 0x0000297cu, 0x000700f5u, 0x0000005fu, 0x00007b3au, 0x00002a16u, 0x00002969u, 0x00002b48u, 0x0000297cu, 0x00050041u, 0x0000003eu, 0x00002986u, 0x00002038u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002987u, 0x00002986u, 0x00050041u, 0x0000003eu, 0x00002988u, 0x00002039u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002989u, 0x00002988u, 0x000500c3u, 0x00000008u, 0x0000298bu, 0x000021bau, 0x0000078du, 0x00050084u, 0x00000008u, 0x0000298cu, 0x00002989u, 0x0000298bu, 0x00050080u, 0x00000008u, 0x0000298du, 0x00002987u, 0x0000298cu, 0x0004003du, 0x00000008u, 0x0000298fu, 0x00002988u, 0x000500c3u, 0x00000008u, 0x00002990u, 0x0000298fu, 0x0000078du, 0x000500c7u, 0x00000008u, 0x00002992u, 0x000021bau, 0x00000d84u, 0x00050084u, 0x00000008u, 0x00002993u, 0x00002990u, 0x00002992u, 0x00050080u, 0x00000008u, 0x00002994u, 0x0000298du, 0x00002993u, 0x0003003eu, 0x00002043u, 0x00002994u, 0x000500c3u, 0x00000008u, 0x00002996u, 0x00002994u, 0x0000026au, 0x0003003eu, 0x00002928u, 0x00002996u, 0x0003003eu, 0x00002929u, 0x000028d9u, 0x0003003eu, 0x0000292au, 0x000028dbu, 0x0003003eu, 0x0000292bu, 0x000028e1u, 0x000500c4u, 0x00000008u, 0x000029a2u, 0x00002996u, 0x00000d98u, 0x0003003eu, 0x00002928u, 0x000029a2u, 0x0004003du, 0x00000008u, 0x000029a5u, 0x00002988u, 0x000500c3u, 0x00000008u, 0x000029a6u, 0x000029a5u, 0x0000026au, 0x00050084u, 0x00000008u, 0x000029a7u, 0x000028e1u, 0x000029a6u, 0x00050041u, 0x0000003eu, 0x000029a9u, 0x0000203au, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000029aau, 0x000029a9u, 0x000500c3u, 0x00000008u, 0x000029abu, 0x000029aau, 0x0000026au, 0x00050084u, 0x00000008u, 0x000029acu, 0x000028dbu, 0x000029abu, 0x00050080u, 0x00000008u, 0x000029adu, 0x000029a7u, 0x000029acu, 0x00050080u, 0x00000008u, 0x000029afu, 0x000029a2u, 0x000029adu, 0x0003003eu, 0x00002928u, 0x000029afu, 0x000500c3u, 0x00000008u, 0x000029b1u, 0x000029afu, 0x00000da8u, 0x0003003eu, 0x00002928u, 0x000029b1u, 0x0003003eu, 0x0000292cu, 0x000029b1u, 0x00050082u, 0x00000008u, 0x00002b51u, 0x000029b1u, 0x00000b01u, 0x0003003eu, 0x0000292cu, 0x00002b51u, 0x000500c4u, 0x00000008u, 0x00002b53u, 0x00002b51u, 0x0000027du, 0x0003003eu, 0x0000292cu, 0x00002b53u, 0x000500c3u, 0x00000008u, 0x00002b55u, 0x00002b53u, 0x0000027du, 0x0003003eu, 0x0000292cu, 0x00002b55u, 0x00050080u, 0x00000008u, 0x00002b57u, 0x00002b55u, 0x00000b01u, 0x0003003eu, 0x0000292cu, 0x00002b57u, 0x0008000cu, 0x00000008u, 0x00002b59u, 0x00000001u, 0x0000002du, 0x00002b57u, 0x00000203u, 0x0000041du, 0x0003003eu, 0x00002b4fu, 0x00002b59u, 0x0003003eu, 0x00002043u, 0x00002b59u, 0x0003003eu, 0x00002034u, 0x00007b3au, 0x0003003eu, 0x00002035u, 0x00007b4fu, 0x0003003eu, 0x00002036u, 0x00007b73u, 0x0003003eu, 0x00002037u, 0x00002b59u, 0x0003003eu, 0x00002032u, 0x00007b8du, 0x000500c7u, 0x00000006u, 0x000021e5u, 0x000020e0u, 0x0000073fu, 0x0003003eu, 0x00002045u, 0x000021e5u, 0x00050080u, 0x00000006u, 0x000021e7u, 0x000021e5u, 0x00000485u, 0x000500c7u, 0x00000006u, 0x000021e8u, 0x000021e7u, 0x0000073fu, 0x0003003eu, 0x00002046u, 0x000021e8u, 0x000500c2u, 0x00000006u, 0x000021eau, 0x000020e0u, 0x0000048bu, 0x0003003eu, 0x00002047u, 0x000021eau, 0x0003003eu, 0x00002048u, 0x000028bau, 0x000300f7u, 0x000021eeu, 0x00000000u, 0x000400fau, 0x00002137u, 0x000021efu, 0x000021eeu, 0x000200f8u, 0x000021efu, 0x0003003eu, 0x0000204au, 0x000021e5u, 0x0003003eu, 0x0000204bu, 0x000021e8u, 0x0003003eu, 0x0000204du, 0x000021eau, 0x0003003eu, 0x0000204eu, 0x000028bau, 0x0003003eu, 0x0000204fu, 0x00007b3au, 0x0003003eu, 0x00002050u, 0x00007b4fu, 0x0003003eu, 0x00002051u, 0x00007b73u, 0x0003003eu, 0x00002052u, 0x00007b8du, 0x0003003eu, 0x00002053u, 0x0000210du, 0x0003003eu, 0x00002054u, 0x00002110u, 0x0003003eu, 0x00002055u, 0x00002113u, 0x0003003eu, 0x00002b5au, 0x00000543u, 0x0003003eu, 0x00002b5bu, 0x00000543u, 0x0003003eu, 0x00002b5cu, 0x00000374u, 0x000300f7u, 0x00002b63u, 0x00000000u, 0x000400fau, 0x00007b8du, 0x00002b64u, 0x00002b65u, 0x000200f8u, 0x00002b65u, 0x00050082u, 0x0000005fu, 0x00002b68u, 0x00007b4fu, 0x00007b3au, 0x0003003eu, 0x00002b5du, 0x00002b68u, 0x000500c3u, 0x0000005fu, 0x00002b6bu, 0x00002b68u, 0x0000eebau, 0x000500c6u, 0x0000005fu, 0x00002b6du, 0x00002b68u, 0x00002b6bu, 0x0003003eu, 0x00002b5du, 0x00002b6du, 0x00050082u, 0x0000005fu, 0x00002b70u, 0x00007b73u, 0x00007b3au, 0x0003003eu, 0x00002b5eu, 0x00002b70u, 0x000500c3u, 0x0000005fu, 0x00002b73u, 0x00002b70u, 0x0000eebau, 0x000500c6u, 0x0000005fu, 0x00002b75u, 0x00002b70u, 0x00002b73u, 0x0003003eu, 0x00002b5eu, 0x00002b75u, 0x0007000cu, 0x0000005fu, 0x00002b78u, 0x00000001u, 0x0000002au, 0x00002b6du, 0x00002b75u, 0x0003003eu, 0x00002b5fu, 0x00002b78u, 0x00050041u, 0x0000003eu, 0x00002b79u, 0x00002b5fu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b7au, 0x00002b79u, 0x00050041u, 0x0000003eu, 0x00002b7bu, 0x00002b5fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b7cu, 0x00002b7bu, 0x0007000cu, 0x00000008u, 0x00002b7du, 0x00000001u, 0x0000002au, 0x00002b7au, 0x00002b7cu, 0x0003003eu, 0x00002b60u, 0x00002b7du, 0x000500afu, 0x0000005du, 0x00002b7fu, 0x00002b7du, 0x00000b1eu, 0x000300f7u, 0x00002b80u, 0x00000000u, 0x000400fau, 0x00002b7fu, 0x00002b81u, 0x00002b82u, 0x000200f8u, 0x00002b82u, 0x000500b1u, 0x0000005du, 0x00002b85u, 0x00002b7du, 0x0000037du, 0x000300f7u, 0x00002b86u, 0x00000000u, 0x000400fau, 0x00002b85u, 0x00002b87u, 0x00002b88u, 0x000200f8u, 0x00002b88u, 0x000500c3u, 0x00000008u, 0x00002b9du, 0x00002b7du, 0x0000021eu, 0x0006000cu, 0x00000008u, 0x00002b9eu, 0x00000001u, 0x0000004au, 0x00002b9du, 0x0007000cu, 0x00000008u, 0x00002b9fu, 0x00000001u, 0x0000002au, 0x00002b9eu, 0x00000203u, 0x0003003eu, 0x00002b61u, 0x00002b9fu, 0x0004007cu, 0x00000006u, 0x00002ba1u, 0x00002b9fu, 0x000500aeu, 0x0000005du, 0x00002ba3u, 0x00002ba1u, 0x000021eau, 0x0003003eu, 0x00002b5bu, 0x00002ba3u, 0x000400a8u, 0x0000005du, 0x00002ba6u, 0x00002110u, 0x000500a7u, 0x0000005du, 0x00002ba7u, 0x00002ba3u, 0x00002ba6u, 0x000400a8u, 0x0000005du, 0x00002ba9u, 0x00002113u, 0x000500a7u, 0x0000005du, 0x00002baau, 0x00002ba7u, 0x00002ba9u, 0x000300f7u, 0x00002babu, 0x00000000u, 0x000400fau, 0x00002baau, 0x00002bacu, 0x00002badu, 0x000200f8u, 0x00002badu, 0x000500c4u, 0x00000008u, 0x00002bafu, 0x00002b7du, 0x00000218u, 0x000500c3u, 0x00000008u, 0x00002bb1u, 0x00002bafu, 0x00002b9fu, 0x000500c7u, 0x00000008u, 0x00002bb2u, 0x00002bb1u, 0x0000038bu, 0x0003003eu, 0x0000204cu, 0x00002bb2u, 0x0003003eu, 0x00002b5cu, 0x00002ba1u, 0x000200f9u, 0x00002babu, 0x000200f8u, 0x00002bacu, 0x0003003eu, 0x0000204cu, 0x0000038bu, 0x000200f9u, 0x00002babu, 0x000200f8u, 0x00002babu, 0x000700f5u, 0x00000008u, 0x00007ca1u, 0x0000038bu, 0x00002bacu, 0x00002bb2u, 0x00002badu, 0x000600a9u, 0x00000006u, 0x0000eed8u, 0x00002baau, 0x00000374u, 0x00002ba1u, 0x000200f9u, 0x00002b86u, 0x000200f8u, 0x00002b87u, 0x000500aau, 0x0000005du, 0x00002b8au, 0x000021eau, 0x00000374u, 0x0003003eu, 0x00002b5bu, 0x00002b8au, 0x0003003eu, 0x00002b5au, 0x0000055eu, 0x000400a8u, 0x0000005du, 0x00002b8cu, 0x00002110u, 0x000400a8u, 0x0000005du, 0x00002b8eu, 0x00002113u, 0x000500a7u, 0x0000005du, 0x00002b8fu, 0x00002b8cu, 0x00002b8eu, 0x000300f7u, 0x00002b90u, 0x00000000u, 0x000400fau, 0x00002b8fu, 0x00002b91u, 0x00002b92u, 0x000200f8u, 0x00002b92u, 0x0007000cu, 0x00000008u, 0x00002b97u, 0x00000001u, 0x0000002au, 0x000028bau, 0x00002b7du, 0x000500c4u, 0x00000008u, 0x00002b98u, 0x00002b97u, 0x00000218u, 0x000600a9u, 0x00000008u, 0x00002b9au, 0x00002110u, 0x00001852u, 0x00000203u, 0x00050080u, 0x00000008u, 0x00002b9bu, 0x00002b98u, 0x00002b9au, 0x0003003eu, 0x0000204cu, 0x00002b9bu, 0x000200f9u, 0x00002b90u, 0x000200f8u, 0x00002b91u, 0x000600a9u, 0x00000008u, 0x00002b94u, 0x00002b8au, 0x0000038bu, 0x00000203u, 0x0003003eu, 0x0000204cu, 0x00002b94u, 0x000200f9u, 0x00002b90u, 0x000200f8u, 0x00002b90u, 0x000700f5u, 0x00000008u, 0x00007ca0u, 0x00002b94u, 0x00002b91u, 0x00002b9bu, 0x00002b92u, 0x000200f9u, 0x00002b86u, 0x000200f8u, 0x00002b86u, 0x000700f5u, 0x00000008u, 0x00007c9fu, 0x00007ca0u, 0x00002b90u, 0x00007ca1u, 0x00002babu, 0x000700f5u, 0x00000006u, 0x00007c80u, 0x00000374u, 0x00002b90u, 0x0000eed8u, 0x00002babu, 0x000700f5u, 0x0000005du, 0x00007c69u, 0x00002b8au, 0x00002b90u, 0x00002ba3u, 0x00002babu, 0x000600a9u, 0x0000005du, 0x0000eed9u, 0x00002b85u, 0x0000055eu, 0x00000543u, 0x000200f9u, 0x00002b80u, 0x000200f8u, 0x00002b81u, 0x0003003eu, 0x00002b5bu, 0x0000055eu, 0x0003003eu, 0x0000204cu, 0x0000038bu, 0x0003003eu, 0x00002b5cu, 0x000021eau, 0x000200f9u, 0x00002b80u, 0x000200f8u, 0x00002b80u, 0x000700f5u, 0x00000008u, 0x00007c9eu, 0x0000038bu, 0x00002b81u, 0x00007c9fu, 0x00002b86u, 0x000700f5u, 0x0000005du, 0x00007c86u, 0x00000543u, 0x00002b81u, 0x0000eed9u, 0x00002b86u, 0x000700f5u, 0x00000006u, 0x00007c7fu, 0x000021eau, 0x00002b81u, 0x00007c80u, 0x00002b86u, 0x000700f5u, 0x0000005du, 0x00007c68u, 0x0000055eu, 0x00002b81u, 0x00007c69u, 0x00002b86u, 0x000200f9u, 0x00002b63u, 0x000200f8u, 0x00002b64u, 0x0003003eu, 0x00002b5bu, 0x0000055eu, 0x0003003eu, 0x0000204cu, 0x0000038bu, 0x000200f9u, 0x00002b63u, 0x000200f8u, 0x00002b63u, 0x000700f5u, 0x00000008u, 0x00007c9du, 0x0000038bu, 0x00002b64u, 0x00007c9eu, 0x00002b80u, 0x000700f5u, 0x0000005du, 0x00007c85u, 0x00000543u, 0x00002b64u, 0x00007c86u, 0x00002b80u, 0x000700f5u, 0x00000006u, 0x00007c7eu, 0x00000374u, 0x00002b64u, 0x00007c7fu, 0x00002b80u, 0x000700f5u, 0x0000005du, 0x00007c67u, 0x0000055eu, 0x00002b64u, 0x00007c68u, 0x00002b80u, 0x000300f7u, 0x00002bb6u, 0x00000000u, 0x000400fau, 0x0000210du, 0x00002bb7u, 0x00002bb6u, 0x000200f8u, 0x00002bb7u, 0x000300f7u, 0x00002bb9u, 0x00000000u, 0x000400fau, 0x00007c67u, 0x00002bbau, 0x00002bb9u, 0x000200f8u, 0x00002bbau, 0x0003003eu, 0x00002b5cu, 0x000021eau, 0x000200f9u, 0x00002bb9u, 0x000200f8u, 0x00002bb9u, 0x000600a9u, 0x00000006u, 0x0000eedau, 0x00007c67u, 0x000021eau, 0x00007c7eu, 0x000400a8u, 0x0000005du, 0x00002bbdu, 0x00002113u, 0x000300f7u, 0x00002bbeu, 0x00000000u, 0x000400fau, 0x00002bbdu, 0x00002bbfu, 0x00002bc0u, 0x000200f8u, 0x00002bc0u, 0x00050080u, 0x00000006u, 0x00002bd7u, 0x000021e5u, 0x0000eedau, 0x000500a6u, 0x0000005du, 0x00002bdau, 0x00007c67u, 0x00007c85u, 0x000600a9u, 0x00000008u, 0x00002bdbu, 0x00002bdau, 0x00000212u, 0x00000215u, 0x0004007cu, 0x00000006u, 0x00002bdcu, 0x00002bdbu, 0x00050080u, 0x00000006u, 0x00002bddu, 0x00002bd7u, 0x00002bdcu, 0x000500c7u, 0x00000006u, 0x00002bdeu, 0x00002bddu, 0x0000073fu, 0x0003003eu, 0x0000204bu, 0x00002bdeu, 0x000600a9u, 0x00000008u, 0x00002be3u, 0x00007c85u, 0x00000203u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002be4u, 0x00002be3u, 0x00050080u, 0x00000006u, 0x00002be5u, 0x00002bd7u, 0x00002be4u, 0x000500c7u, 0x00000006u, 0x00002be6u, 0x00002be5u, 0x0000073fu, 0x0003003eu, 0x0000204au, 0x00002be6u, 0x000200f9u, 0x00002bbeu, 0x000200f8u, 0x00002bbfu, 0x00050080u, 0x00000006u, 0x00002bc3u, 0x000021e5u, 0x0000eedau, 0x000500c7u, 0x00000006u, 0x00002bc4u, 0x00002bc3u, 0x0000073fu, 0x0003003eu, 0x0000204au, 0x00002bc4u, 0x000400a8u, 0x0000005du, 0x00002bc6u, 0x00007c67u, 0x000300f7u, 0x00002bc7u, 0x00000000u, 0x000400fau, 0x00002bc6u, 0x00002bc8u, 0x00002bc7u, 0x000200f8u, 0x00002bc8u, 0x000400a8u, 0x0000005du, 0x00002bcau, 0x00002110u, 0x000500a7u, 0x0000005du, 0x00002bccu, 0x00002bcau, 0x00007c85u, 0x000200f9u, 0x00002bc7u, 0x000200f8u, 0x00002bc7u, 0x000700f5u, 0x0000005du, 0x00002bcdu, 0x00007c67u, 0x00002bbfu, 0x00002bccu, 0x00002bc8u, 0x000300f7u, 0x00002bceu, 0x00000000u, 0x000400fau, 0x00002bcdu, 0x00002bcfu, 0x00002bd0u, 0x000200f8u, 0x00002bd0u, 0x00050080u, 0x00000006u, 0x00002bd3u, 0x00002bc4u, 0x00000485u, 0x000500c7u, 0x00000006u, 0x00002bd4u, 0x00002bd3u, 0x0000073fu, 0x0003003eu, 0x0000204bu, 0x00002bd4u, 0x000200f9u, 0x00002bceu, 0x000200f8u, 0x00002bcfu, 0x0003003eu, 0x0000204bu, 0x00002bc4u, 0x000200f9u, 0x00002bceu, 0x000200f8u, 0x00002bceu, 0x000700f5u, 0x00000006u, 0x00007c9bu, 0x00002bc4u, 0x00002bcfu, 0x00002bd4u, 0x00002bd0u, 0x000200f9u, 0x00002bbeu, 0x000200f8u, 0x00002bbeu, 0x000700f5u, 0x00000006u, 0x00007c9au, 0x00007c9bu, 0x00002bceu, 0x00002bdeu, 0x00002bc0u, 0x000700f5u, 0x00000006u, 0x00007c92u, 0x00002bc4u, 0x00002bceu, 0x00002be6u, 0x00002bc0u, 0x000200f9u, 0x00002bb6u, 0x000200f8u, 0x00002bb6u, 0x000700f5u, 0x00000006u, 0x00007c94u, 0x000021e8u, 0x00002b63u, 0x00007c9au, 0x00002bbeu, 0x000700f5u, 0x00000006u, 0x00007c91u, 0x000021e5u, 0x00002b63u, 0x00007c92u, 0x00002bbeu, 0x0003003eu, 0x00002045u, 0x00007c91u, 0x0003003eu, 0x00002046u, 0x00007c94u, 0x0003003eu, 0x00002049u, 0x00007c9du, 0x000200f9u, 0x000021eeu, 0x000200f8u, 0x000021eeu, 0x000700f5u, 0x00000008u, 0x0000a6a9u, 0x0000a6b5u, 0x0000295fu, 0x00007c9du, 0x00002bb6u, 0x000700f5u, 0x00000006u, 0x00009145u, 0x000021e8u, 0x0000295fu, 0x00007c94u, 0x00002bb6u, 0x000700f5u, 0x00000006u, 0x00007d02u, 0x000021e5u, 0x0000295fu, 0x00007c91u, 0x00002bb6u, 0x000300f7u, 0x00002200u, 0x00000000u, 0x000400fau, 0x0000212eu, 0x00002201u, 0x00002200u, 0x000200f8u, 0x00002201u, 0x00080041u, 0x00000277u, 0x00002204u, 0x00000a0bu, 0x00000203u, 0x00001ec7u, 0x00000215u, 0x00007d02u, 0x0004003du, 0x00000229u, 0x00002205u, 0x00002204u, 0x00040071u, 0x00000006u, 0x00002206u, 0x00002205u, 0x0003003eu, 0x00002056u, 0x00002206u, 0x0003003eu, 0x00002058u, 0x00002206u, 0x00070041u, 0x0000026bu, 0x00002be9u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000203u, 0x0004003du, 0x00000006u, 0x00002beau, 0x00002be9u, 0x00070041u, 0x0000026bu, 0x00002becu, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000212u, 0x0004003du, 0x00000006u, 0x00002bedu, 0x00002becu, 0x00070041u, 0x0000026bu, 0x00002befu, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00002bf0u, 0x00002befu, 0x00070041u, 0x0000026bu, 0x00002bf2u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00002bf3u, 0x00002bf2u, 0x00070041u, 0x0000026bu, 0x00002bf5u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00002bf6u, 0x00002bf5u, 0x00070041u, 0x0000026bu, 0x00002bf8u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00002bf9u, 0x00002bf8u, 0x00070041u, 0x00000277u, 0x00002bfbu, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000221u, 0x0004003du, 0x00000229u, 0x00002bfcu, 0x00002bfbu, 0x00040071u, 0x00000006u, 0x00002bfdu, 0x00002bfcu, 0x0004007cu, 0x00000008u, 0x00002bfeu, 0x00002bfdu, 0x00070041u, 0x00000277u, 0x00002c00u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000224u, 0x0004003du, 0x00000229u, 0x00002c01u, 0x00002c00u, 0x00040071u, 0x00000006u, 0x00002c02u, 0x00002c01u, 0x0004007cu, 0x00000008u, 0x00002c03u, 0x00002c02u, 0x00070041u, 0x00000277u, 0x00002c05u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x0000025eu, 0x0004003du, 0x00000229u, 0x00002c06u, 0x00002c05u, 0x00040071u, 0x00000006u, 0x00002c07u, 0x00002c06u, 0x0004007cu, 0x00000008u, 0x00002c08u, 0x00002c07u, 0x00070041u, 0x00000277u, 0x00002c0au, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000264u, 0x0004003du, 0x00000229u, 0x00002c0bu, 0x00002c0au, 0x00040071u, 0x00000006u, 0x00002c0cu, 0x00002c0bu, 0x0004007cu, 0x00000008u, 0x00002c0du, 0x00002c0cu, 0x00070041u, 0x00000277u, 0x00002c0fu, 0x000002d1u, 0x00000203u, 0x00002206u, 0x0000026au, 0x0004003du, 0x00000229u, 0x00002c10u, 0x00002c0fu, 0x00040071u, 0x00000006u, 0x00002c11u, 0x00002c10u, 0x0004007cu, 0x00000008u, 0x00002c12u, 0x00002c11u, 0x00070041u, 0x00000277u, 0x00002c14u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x0000026fu, 0x0004003du, 0x00000229u, 0x00002c15u, 0x00002c14u, 0x00040071u, 0x00000006u, 0x00002c16u, 0x00002c15u, 0x0004007cu, 0x00000008u, 0x00002c17u, 0x00002c16u, 0x00070041u, 0x00000277u, 0x00002c19u, 0x000002d1u, 0x00000203u, 0x00002206u, 0x00000276u, 0x0004003du, 0x00000229u, 0x00002c1au, 0x00002c19u, 0x00040071u, 0x00000006u, 0x00002c1bu, 0x00002c1au, 0x0004007cu, 0x00000008u, 0x00002c1cu, 0x00002c1bu, 0x00070041u, 0x00000277u, 0x00002c1eu, 0x000002d1u, 0x00000203u, 0x00002206u, 0x0000027du, 0x0004003du, 0x00000229u, 0x00002c1fu, 0x00002c1eu, 0x00040071u, 0x00000006u, 0x00002c20u, 0x00002c1fu, 0x0004007cu, 0x00000008u, 0x00002c21u, 0x00002c20u, 0x00110050u, 0x0000001eu, 0x00002c22u, 0x00002beau, 0x00002bedu, 0x00002bf0u, 0x00002bf3u, 0x00002bf6u, 0x00002bf9u, 0x00002bfeu, 0x00002c03u, 0x00002c08u, 0x00002c0du, 0x00002c12u, 0x00002c17u, 0x00002c1cu, 0x00002c21u, 0x0003003eu, 0x00006be3u, 0x00002beau, 0x0003003eu, 0x00006be4u, 0x00002bedu, 0x0003003eu, 0x00006be5u, 0x00002bf0u, 0x0003003eu, 0x00006be6u, 0x00002bf3u, 0x0003003eu, 0x00006be7u, 0x00002bf6u, 0x0003003eu, 0x00006be8u, 0x00002bf9u, 0x0003003eu, 0x00006be9u, 0x00002bfeu, 0x0003003eu, 0x00006beau, 0x00002c03u, 0x0003003eu, 0x00006bebu, 0x00002c08u, 0x0003003eu, 0x00006becu, 0x00002c0du, 0x0003003eu, 0x00006bedu, 0x00002c12u, 0x0003003eu, 0x00006beeu, 0x00002c17u, 0x0003003eu, 0x00006befu, 0x00002c1cu, 0x0003003eu, 0x00006bf0u, 0x00002c21u, 0x0003003eu, 0x00006e04u, 0x00002beau, 0x0003003eu, 0x00006e05u, 0x00002bedu, 0x0003003eu, 0x00006e06u, 0x00002bf0u, 0x0003003eu, 0x00006e07u, 0x00002bf3u, 0x0003003eu, 0x00006e08u, 0x00002bf6u, 0x0003003eu, 0x00006e09u, 0x00002bf9u, 0x0003003eu, 0x00006e0au, 0x00002bfeu, 0x0003003eu, 0x00006e0bu, 0x00002c03u, 0x0003003eu, 0x00006e0cu, 0x00002c08u, 0x0003003eu, 0x00006e0du, 0x00002c0du, 0x0003003eu, 0x00006e0eu, 0x00002c12u, 0x0003003eu, 0x00006e0fu, 0x00002c17u, 0x0003003eu, 0x00006e10u, 0x00002c1cu, 0x0003003eu, 0x00006e11u, 0x00002c21u, 0x0003003eu, 0x00006e2fu, 0x00002beau, 0x0003003eu, 0x00006e30u, 0x00002bedu, 0x0003003eu, 0x00006e31u, 0x00002bf0u, 0x0003003eu, 0x00006e32u, 0x00002bf3u, 0x0003003eu, 0x00006e33u, 0x00002bf6u, 0x0003003eu, 0x00006e34u, 0x00002bf9u, 0x0003003eu, 0x00006e35u, 0x00002bfeu, 0x0003003eu, 0x00006e36u, 0x00002c03u, 0x0003003eu, 0x00006e37u, 0x00002c08u, 0x0003003eu, 0x00006e38u, 0x00002c0du, 0x0003003eu, 0x00006e39u, 0x00002c12u, 0x0003003eu, 0x00006e3au, 0x00002c17u, 0x0003003eu, 0x00006e3bu, 0x00002c1cu, 0x0003003eu, 0x00006e3cu, 0x00002c21u, 0x0003003eu, 0x0000205bu, 0x000020eau, 0x0003003eu, 0x0000205cu, 0x00007b3au, 0x0003003eu, 0x0000205du, 0x000020fbu, 0x0003003eu, 0x0000205eu, 0x000020feu, 0x0003003eu, 0x0000205fu, 0x00002101u, 0x0003003eu, 0x00002060u, 0x0000212bu, 0x0003003eu, 0x00002061u, 0x00000543u, 0x0003003eu, 0x00002062u, 0x00000611u, 0x000500c7u, 0x00000008u, 0x00002d66u, 0x00002c21u, 0x00000212u, 0x000500abu, 0x0000005du, 0x00002d67u, 0x00002d66u, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00002d6au, 0x00002beau, 0x0004007cu, 0x00000008u, 0x00002d6du, 0x00002bedu, 0x0003003eu, 0x00002c23u, 0x00002d67u, 0x00050041u, 0x0000003eu, 0x00002d70u, 0x0000205cu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002d71u, 0x00002d70u, 0x0003003eu, 0x00002c24u, 0x00002d71u, 0x0003003eu, 0x00002c25u, 0x00002d6au, 0x0003003eu, 0x00002c26u, 0x00002d6du, 0x0003003eu, 0x00002c27u, 0x00002c12u, 0x0008000cu, 0x00000008u, 0x0000311fu, 0x00000001u, 0x0000002du, 0x00002d71u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x00002c24u, 0x0000311fu, 0x000500b1u, 0x0000005du, 0x00003121u, 0x00002c12u, 0x0000026fu, 0x000300f7u, 0x00003122u, 0x00000000u, 0x000400fau, 0x00003121u, 0x00003123u, 0x00003124u, 0x000200f8u, 0x00003124u, 0x00050082u, 0x00000008u, 0x00003129u, 0x0000037du, 0x00002c12u, 0x000500c4u, 0x00000008u, 0x0000312bu, 0x0000311fu, 0x00003129u, 0x0003003eu, 0x00002c24u, 0x0000312bu, 0x000500c3u, 0x00000008u, 0x0000312du, 0x0000312bu, 0x00000559u, 0x0003003eu, 0x00002c24u, 0x0000312du, 0x000200f9u, 0x00003122u, 0x000200f8u, 0x00003123u, 0x000500c3u, 0x00000008u, 0x00003127u, 0x0000311fu, 0x00002c12u, 0x0003003eu, 0x00002c24u, 0x00003127u, 0x000200f9u, 0x00003122u, 0x000200f8u, 0x00003122u, 0x000700f5u, 0x00000008u, 0x00007dfbu, 0x00003127u, 0x00003123u, 0x0000312du, 0x00003124u, 0x000300f7u, 0x0000312fu, 0x00000000u, 0x000400fau, 0x00002d67u, 0x00003130u, 0x00003131u, 0x000200f8u, 0x00003131u, 0x000500c4u, 0x00000008u, 0x00003147u, 0x00002d6au, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003149u, 0x00007dfbu, 0x00003147u, 0x0003003eu, 0x00002c24u, 0x00003149u, 0x000200f9u, 0x0000312fu, 0x000200f8u, 0x00003130u, 0x000500c3u, 0x00000008u, 0x00003133u, 0x00007dfbu, 0x00000218u, 0x000500afu, 0x0000005du, 0x00003135u, 0x00003133u, 0x00002d6du, 0x0003003eu, 0x0000311cu, 0x00003135u, 0x000300f7u, 0x00003137u, 0x00000000u, 0x000400fau, 0x00003135u, 0x00003138u, 0x00003139u, 0x000200f8u, 0x00003139u, 0x000500c4u, 0x00000008u, 0x00003143u, 0x00002d6au, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003144u, 0x00007dfbu, 0x00003143u, 0x0007000cu, 0x00000008u, 0x00003145u, 0x00000001u, 0x0000002au, 0x00003144u, 0x00000203u, 0x0003003eu, 0x00002c24u, 0x00003145u, 0x000200f9u, 0x00003137u, 0x000200f8u, 0x00003138u, 0x000500c3u, 0x00000008u, 0x0000313bu, 0x00002d6du, 0x00000215u, 0x000500c3u, 0x00000008u, 0x0000313du, 0x00002d6au, 0x00000215u, 0x00050082u, 0x00000008u, 0x0000313eu, 0x0000313bu, 0x0000313du, 0x000500c7u, 0x00000008u, 0x0000313fu, 0x0000313eu, 0x00001132u, 0x000500c4u, 0x00000008u, 0x00003140u, 0x0000313fu, 0x0000021eu, 0x0003003eu, 0x00002c24u, 0x00003140u, 0x000200f9u, 0x00003137u, 0x000200f8u, 0x00003137u, 0x000700f5u, 0x00000008u, 0x00007dfeu, 0x00003140u, 0x00003138u, 0x00003145u, 0x00003139u, 0x000200f9u, 0x0000312fu, 0x000200f8u, 0x0000312fu, 0x000700f5u, 0x00000008u, 0x00007dfdu, 0x00007dfeu, 0x00003137u, 0x00003149u, 0x00003131u, 0x0003003eu, 0x0000311du, 0x00007dfdu, 0x0003003eu, 0x00002d70u, 0x00007dfdu, 0x000500c7u, 0x00000008u, 0x00002d76u, 0x00002c21u, 0x0000021bu, 0x000500abu, 0x0000005du, 0x00002d77u, 0x00002d76u, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00002d7au, 0x00002bf0u, 0x0004007cu, 0x00000008u, 0x00002d7du, 0x00002bf3u, 0x0003003eu, 0x00002c28u, 0x00002d77u, 0x00050041u, 0x0000003eu, 0x00002d80u, 0x0000205cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002d81u, 0x00002d80u, 0x0003003eu, 0x00002c29u, 0x00002d81u, 0x0003003eu, 0x00002c2au, 0x00002d7au, 0x0003003eu, 0x00002c2bu, 0x00002d7du, 0x0003003eu, 0x00002c2cu, 0x00002c1cu, 0x0008000cu, 0x00000008u, 0x0000314eu, 0x00000001u, 0x0000002du, 0x00002d81u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x00002c29u, 0x0000314eu, 0x000500b1u, 0x0000005du, 0x00003150u, 0x00002c1cu, 0x0000026fu, 0x000300f7u, 0x00003151u, 0x00000000u, 0x000400fau, 0x00003150u, 0x00003152u, 0x00003153u, 0x000200f8u, 0x00003153u, 0x00050082u, 0x00000008u, 0x00003158u, 0x0000037du, 0x00002c1cu, 0x000500c4u, 0x00000008u, 0x0000315au, 0x0000314eu, 0x00003158u, 0x0003003eu, 0x00002c29u, 0x0000315au, 0x000500c3u, 0x00000008u, 0x0000315cu, 0x0000315au, 0x00000559u, 0x0003003eu, 0x00002c29u, 0x0000315cu, 0x000200f9u, 0x00003151u, 0x000200f8u, 0x00003152u, 0x000500c3u, 0x00000008u, 0x00003156u, 0x0000314eu, 0x00002c1cu, 0x0003003eu, 0x00002c29u, 0x00003156u, 0x000200f9u, 0x00003151u, 0x000200f8u, 0x00003151u, 0x000700f5u, 0x00000008u, 0x00007e0du, 0x00003156u, 0x00003152u, 0x0000315cu, 0x00003153u, 0x000300f7u, 0x0000315eu, 0x00000000u, 0x000400fau, 0x00002d77u, 0x0000315fu, 0x00003160u, 0x000200f8u, 0x00003160u, 0x000500c4u, 0x00000008u, 0x00003176u, 0x00002d7au, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003178u, 0x00007e0du, 0x00003176u, 0x0003003eu, 0x00002c29u, 0x00003178u, 0x000200f9u, 0x0000315eu, 0x000200f8u, 0x0000315fu, 0x000500c3u, 0x00000008u, 0x00003162u, 0x00007e0du, 0x00000218u, 0x000500afu, 0x0000005du, 0x00003164u, 0x00003162u, 0x00002d7du, 0x0003003eu, 0x0000314bu, 0x00003164u, 0x000300f7u, 0x00003166u, 0x00000000u, 0x000400fau, 0x00003164u, 0x00003167u, 0x00003168u, 0x000200f8u, 0x00003168u, 0x000500c4u, 0x00000008u, 0x00003172u, 0x00002d7au, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003173u, 0x00007e0du, 0x00003172u, 0x0007000cu, 0x00000008u, 0x00003174u, 0x00000001u, 0x0000002au, 0x00003173u, 0x00000203u, 0x0003003eu, 0x00002c29u, 0x00003174u, 0x000200f9u, 0x00003166u, 0x000200f8u, 0x00003167u, 0x000500c3u, 0x00000008u, 0x0000316au, 0x00002d7du, 0x00000215u, 0x000500c3u, 0x00000008u, 0x0000316cu, 0x00002d7au, 0x00000215u, 0x00050082u, 0x00000008u, 0x0000316du, 0x0000316au, 0x0000316cu, 0x000500c7u, 0x00000008u, 0x0000316eu, 0x0000316du, 0x00001132u, 0x000500c4u, 0x00000008u, 0x0000316fu, 0x0000316eu, 0x0000021eu, 0x0003003eu, 0x00002c29u, 0x0000316fu, 0x000200f9u, 0x00003166u, 0x000200f8u, 0x00003166u, 0x000700f5u, 0x00000008u, 0x00007e10u, 0x0000316fu, 0x00003167u, 0x00003174u, 0x00003168u, 0x000200f9u, 0x0000315eu, 0x000200f8u, 0x0000315eu, 0x000700f5u, 0x00000008u, 0x00007e0fu, 0x00007e10u, 0x00003166u, 0x00003178u, 0x00003160u, 0x0003003eu, 0x0000314cu, 0x00007e0fu, 0x0003003eu, 0x00002d80u, 0x00007e0fu, 0x000300f7u, 0x00002d85u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002d86u, 0x00002d87u, 0x000200f8u, 0x00002d87u, 0x0003003eu, 0x00002c2du, 0x00000c29u, 0x000200f9u, 0x00002d85u, 0x000200f8u, 0x00002d86u, 0x0004003du, 0x0000005fu, 0x00002d88u, 0x0000205cu, 0x000500c7u, 0x0000005fu, 0x00002d8au, 0x00002d88u, 0x0000eebau, 0x0003003eu, 0x00002c2du, 0x00002d8au, 0x000200f9u, 0x00002d85u, 0x000200f8u, 0x00002d85u, 0x00050041u, 0x0000003eu, 0x00002d8bu, 0x00002c2du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002d8cu, 0x00002d8bu, 0x00050041u, 0x0000003eu, 0x00002d8du, 0x00002c2du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002d8eu, 0x00002d8du, 0x00050080u, 0x00000008u, 0x00002d8fu, 0x00002d8cu, 0x00002d8eu, 0x0003003eu, 0x00002c2eu, 0x00002d8fu, 0x0004003du, 0x0000005fu, 0x00002d90u, 0x0000205cu, 0x000500c3u, 0x0000005fu, 0x00002d92u, 0x00002d90u, 0x0000eeb9u, 0x0003003eu, 0x0000205cu, 0x00002d92u, 0x0003003eu, 0x00006ab3u, 0x00002c0du, 0x0003003eu, 0x00006ab4u, 0x00002c21u, 0x0004003du, 0x00000008u, 0x00002d95u, 0x00002d70u, 0x0003003eu, 0x00002c31u, 0x00002d95u, 0x000500abu, 0x0000005du, 0x0000317eu, 0x00002c0du, 0x00000203u, 0x000300f7u, 0x0000317fu, 0x00000000u, 0x000400fau, 0x0000317eu, 0x00003180u, 0x0000317fu, 0x000200f8u, 0x00003180u, 0x000500c4u, 0x00000008u, 0x00003183u, 0x00000212u, 0x00002c0du, 0x0003003eu, 0x0000317au, 0x00003183u, 0x000500c7u, 0x00000008u, 0x00003186u, 0x00002c21u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00003187u, 0x00003186u, 0x00000203u, 0x000300f7u, 0x00003188u, 0x00000000u, 0x000400fau, 0x00003187u, 0x00003189u, 0x00003188u, 0x000200f8u, 0x00003189u, 0x000500c7u, 0x00000008u, 0x0000318cu, 0x00002d95u, 0x00003183u, 0x00050082u, 0x00000008u, 0x0000318du, 0x0000318cu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x0000318eu, 0x00000001u, 0x0000002au, 0x0000318du, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00003190u, 0x00002d95u, 0x0000318eu, 0x0003003eu, 0x00002c31u, 0x00003190u, 0x000200f9u, 0x00003188u, 0x000200f8u, 0x00003188u, 0x000700f5u, 0x00000008u, 0x00007e6eu, 0x00002d95u, 0x00003180u, 0x00003190u, 0x00003189u, 0x00050082u, 0x00000008u, 0x00003192u, 0x00003183u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00003194u, 0x00007e6eu, 0x00003192u, 0x0003003eu, 0x00002c31u, 0x00003194u, 0x000200f9u, 0x0000317fu, 0x000200f8u, 0x0000317fu, 0x000700f5u, 0x00000008u, 0x00007e6fu, 0x00002d95u, 0x00002d85u, 0x00003194u, 0x00003188u, 0x0003003eu, 0x0000317bu, 0x00007e6fu, 0x0003003eu, 0x00002c2fu, 0x00007e6fu, 0x0003003eu, 0x00006ab7u, 0x00002c17u, 0x0003003eu, 0x00006ab8u, 0x00002c21u, 0x0004003du, 0x00000008u, 0x00002d99u, 0x00002d80u, 0x0003003eu, 0x00002c34u, 0x00002d99u, 0x000500abu, 0x0000005du, 0x0000319au, 0x00002c17u, 0x00000203u, 0x000300f7u, 0x0000319bu, 0x00000000u, 0x000400fau, 0x0000319au, 0x0000319cu, 0x0000319bu, 0x000200f8u, 0x0000319cu, 0x000500c4u, 0x00000008u, 0x0000319fu, 0x00000212u, 0x00002c17u, 0x0003003eu, 0x00003196u, 0x0000319fu, 0x000500c7u, 0x00000008u, 0x000031a2u, 0x00002c21u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000031a3u, 0x000031a2u, 0x00000203u, 0x000300f7u, 0x000031a4u, 0x00000000u, 0x000400fau, 0x000031a3u, 0x000031a5u, 0x000031a4u, 0x000200f8u, 0x000031a5u, 0x000500c7u, 0x00000008u, 0x000031a8u, 0x00002d99u, 0x0000319fu, 0x00050082u, 0x00000008u, 0x000031a9u, 0x000031a8u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000031aau, 0x00000001u, 0x0000002au, 0x000031a9u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000031acu, 0x00002d99u, 0x000031aau, 0x0003003eu, 0x00002c34u, 0x000031acu, 0x000200f9u, 0x000031a4u, 0x000200f8u, 0x000031a4u, 0x000700f5u, 0x00000008u, 0x00007e8du, 0x00002d99u, 0x0000319cu, 0x000031acu, 0x000031a5u, 0x00050082u, 0x00000008u, 0x000031aeu, 0x0000319fu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031b0u, 0x00007e8du, 0x000031aeu, 0x0003003eu, 0x00002c34u, 0x000031b0u, 0x000200f9u, 0x0000319bu, 0x000200f8u, 0x0000319bu, 0x000700f5u, 0x00000008u, 0x00007e8eu, 0x00002d99u, 0x0000317fu, 0x000031b0u, 0x000031a4u, 0x0003003eu, 0x00003197u, 0x00007e8eu, 0x0003003eu, 0x00002c32u, 0x00007e8eu, 0x0004003du, 0x00000008u, 0x00002d9cu, 0x00002d70u, 0x00050080u, 0x00000008u, 0x00002d9du, 0x00002d9cu, 0x00000212u, 0x0003003eu, 0x00006abbu, 0x00002c0du, 0x0003003eu, 0x00006abcu, 0x00002c21u, 0x0003003eu, 0x00002c37u, 0x00002d9du, 0x000300f7u, 0x000031b7u, 0x00000000u, 0x000400fau, 0x0000317eu, 0x000031b8u, 0x000031b7u, 0x000200f8u, 0x000031b8u, 0x000500c4u, 0x00000008u, 0x000031bbu, 0x00000212u, 0x00002c0du, 0x0003003eu, 0x000031b2u, 0x000031bbu, 0x000500c7u, 0x00000008u, 0x000031beu, 0x00002c21u, 0x00000215u, 0x000500abu, 0x0000005du, 0x000031bfu, 0x000031beu, 0x00000203u, 0x000300f7u, 0x000031c0u, 0x00000000u, 0x000400fau, 0x000031bfu, 0x000031c1u, 0x000031c0u, 0x000200f8u, 0x000031c1u, 0x000500c7u, 0x00000008u, 0x000031c4u, 0x00002d9du, 0x000031bbu, 0x00050082u, 0x00000008u, 0x000031c5u, 0x000031c4u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000031c6u, 0x00000001u, 0x0000002au, 0x000031c5u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000031c8u, 0x00002d9du, 0x000031c6u, 0x0003003eu, 0x00002c37u, 0x000031c8u, 0x000200f9u, 0x000031c0u, 0x000200f8u, 0x000031c0u, 0x000700f5u, 0x00000008u, 0x00007eacu, 0x00002d9du, 0x000031b8u, 0x000031c8u, 0x000031c1u, 0x00050082u, 0x00000008u, 0x000031cau, 0x000031bbu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031ccu, 0x00007eacu, 0x000031cau, 0x0003003eu, 0x00002c37u, 0x000031ccu, 0x000200f9u, 0x000031b7u, 0x000200f8u, 0x000031b7u, 0x000700f5u, 0x00000008u, 0x00007eadu, 0x00002d9du, 0x0000319bu, 0x000031ccu, 0x000031c0u, 0x0003003eu, 0x000031b3u, 0x00007eadu, 0x0003003eu, 0x00002c35u, 0x00007eadu, 0x0004003du, 0x00000008u, 0x00002da1u, 0x00002d80u, 0x00050080u, 0x00000008u, 0x00002da2u, 0x00002da1u, 0x00000212u, 0x0003003eu, 0x00006abfu, 0x00002c17u, 0x0003003eu, 0x00006ac0u, 0x00002c21u, 0x0003003eu, 0x00002c3au, 0x00002da2u, 0x000300f7u, 0x000031d3u, 0x00000000u, 0x000400fau, 0x0000319au, 0x000031d4u, 0x000031d3u, 0x000200f8u, 0x000031d4u, 0x000500c4u, 0x00000008u, 0x000031d7u, 0x00000212u, 0x00002c17u, 0x0003003eu, 0x000031ceu, 0x000031d7u, 0x000500c7u, 0x00000008u, 0x000031dau, 0x00002c21u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000031dbu, 0x000031dau, 0x00000203u, 0x000300f7u, 0x000031dcu, 0x00000000u, 0x000400fau, 0x000031dbu, 0x000031ddu, 0x000031dcu, 0x000200f8u, 0x000031ddu, 0x000500c7u, 0x00000008u, 0x000031e0u, 0x00002da2u, 0x000031d7u, 0x00050082u, 0x00000008u, 0x000031e1u, 0x000031e0u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000031e2u, 0x00000001u, 0x0000002au, 0x000031e1u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000031e4u, 0x00002da2u, 0x000031e2u, 0x0003003eu, 0x00002c3au, 0x000031e4u, 0x000200f9u, 0x000031dcu, 0x000200f8u, 0x000031dcu, 0x000700f5u, 0x00000008u, 0x00007ecbu, 0x00002da2u, 0x000031d4u, 0x000031e4u, 0x000031ddu, 0x00050082u, 0x00000008u, 0x000031e6u, 0x000031d7u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031e8u, 0x00007ecbu, 0x000031e6u, 0x0003003eu, 0x00002c3au, 0x000031e8u, 0x000200f9u, 0x000031d3u, 0x000200f8u, 0x000031d3u, 0x000700f5u, 0x00000008u, 0x00007eccu, 0x00002da2u, 0x000031b7u, 0x000031e8u, 0x000031dcu, 0x0003003eu, 0x000031cfu, 0x00007eccu, 0x0003003eu, 0x00002c38u, 0x00007eccu, 0x00050082u, 0x00000008u, 0x00002da7u, 0x00007eccu, 0x00007e8eu, 0x0007000cu, 0x00000008u, 0x00002da8u, 0x00000001u, 0x0000002au, 0x00002da7u, 0x00001357u, 0x0003003eu, 0x00002c3bu, 0x00002da8u, 0x000500c7u, 0x00000008u, 0x00002daau, 0x00007e8eu, 0x0000038bu, 0x00050080u, 0x00000008u, 0x00002dacu, 0x00002daau, 0x00002da8u, 0x0003003eu, 0x00002c38u, 0x00002dacu, 0x0003003eu, 0x00002c32u, 0x00002daau, 0x0004003du, 0x0000005fu, 0x00002db0u, 0x00002c2du, 0x000500aau, 0x00000879u, 0x00002db1u, 0x00002db0u, 0x00001361u, 0x00050051u, 0x0000005du, 0x00002db2u, 0x00002db1u, 0x00000000u, 0x00050051u, 0x0000005du, 0x00002db3u, 0x00002db1u, 0x00000001u, 0x00060050u, 0x000003a1u, 0x00002db4u, 0x0000212bu, 0x00002db2u, 0x00002db3u, 0x0004009bu, 0x0000005du, 0x00002db5u, 0x00002db4u, 0x0003003eu, 0x00002060u, 0x00002db5u, 0x000300f7u, 0x00002db7u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002db8u, 0x00002db7u, 0x000200f8u, 0x00002db8u, 0x0003003eu, 0x00002c2eu, 0x00000203u, 0x000200f9u, 0x00002db7u, 0x000200f8u, 0x00002db7u, 0x000600a9u, 0x00000008u, 0x0000eedbu, 0x00002db5u, 0x00000203u, 0x00002d8fu, 0x000500aau, 0x0000005du, 0x00002dbbu, 0x00002bfeu, 0x00000212u, 0x0003003eu, 0x00002c3cu, 0x00002dbbu, 0x000500afu, 0x0000005du, 0x00002dbdu, 0x0000eedbu, 0x0000037du, 0x000300f7u, 0x00002dbeu, 0x00000000u, 0x000400fau, 0x00002dbdu, 0x00002dbfu, 0x00002dc0u, 0x000200f8u, 0x00002dc0u, 0x00050050u, 0x0000005fu, 0x00002dc6u, 0x00007e6fu, 0x00002daau, 0x0003003eu, 0x00002c3eu, 0x00002dc6u, 0x000200f9u, 0x00002dbeu, 0x000200f8u, 0x00002dbfu, 0x00050050u, 0x0000005fu, 0x00002dc3u, 0x00007eadu, 0x00002dacu, 0x0003003eu, 0x00002c3eu, 0x00002dc3u, 0x000200f9u, 0x00002dbeu, 0x000200f8u, 0x00002dbeu, 0x000700f5u, 0x0000005fu, 0x00007ef8u, 0x00002dc3u, 0x00002dbfu, 0x00002dc6u, 0x00002dc0u, 0x0003003eu, 0x00002c3du, 0x00007ef8u, 0x000300f7u, 0x00002dc9u, 0x00000000u, 0x000400fau, 0x000020fbu, 0x00002dcau, 0x00002dcbu, 0x000200f8u, 0x00002dcbu, 0x000300f7u, 0x00002e6au, 0x00000000u, 0x000d00fbu, 0x00002bfeu, 0x00002e6au, 0x00000000u, 0x00002e6bu, 0x00000001u, 0x00002e6cu, 0x00000002u, 0x00002e6du, 0x00000003u, 0x00002e6eu, 0x00000004u, 0x00002e6fu, 0x000200f8u, 0x00002e6fu, 0x000300f7u, 0x0000301fu, 0x00000000u, 0x000700fbu, 0x00002c03u, 0x00003020u, 0x00000000u, 0x00003021u, 0x00000001u, 0x00003022u, 0x000200f8u, 0x00003022u, 0x0004007cu, 0x000000a2u, 0x00003064u, 0x00007ef8u, 0x0003003eu, 0x00006bc3u, 0x00002bf6u, 0x0003003eu, 0x00006bc4u, 0x00002bf9u, 0x0003003eu, 0x00002d38u, 0x000020eau, 0x0003003eu, 0x00002d39u, 0x00003064u, 0x00050041u, 0x00000007u, 0x00004206u, 0x00002d39u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004207u, 0x00004206u, 0x00050084u, 0x00000006u, 0x00004208u, 0x00002bf9u, 0x00004207u, 0x00050080u, 0x00000006u, 0x00004209u, 0x00002bf6u, 0x00004208u, 0x0003003eu, 0x000041feu, 0x00004209u, 0x00050041u, 0x00000007u, 0x0000420au, 0x00002d39u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000420bu, 0x0000420au, 0x00050080u, 0x00000006u, 0x0000420du, 0x00004209u, 0x0000420bu, 0x0003003eu, 0x000041feu, 0x0000420du, 0x000500c7u, 0x00000006u, 0x0000420fu, 0x0000420du, 0x00000e4bu, 0x0003003eu, 0x000041feu, 0x0000420fu, 0x0003003eu, 0x000041ffu, 0x0000420fu, 0x0004003du, 0x00000006u, 0x00004212u, 0x00004206u, 0x000500c7u, 0x00000006u, 0x00004213u, 0x00004212u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004214u, 0x00004213u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004216u, 0x0000420fu, 0x00004214u, 0x0003003eu, 0x000041ffu, 0x00004216u, 0x000500c6u, 0x00000006u, 0x00004218u, 0x00004216u, 0x0000048bu, 0x0003003eu, 0x000041ffu, 0x00004218u, 0x00080041u, 0x00000277u, 0x0000421bu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004218u, 0x0004003du, 0x00000229u, 0x0000421cu, 0x0000421bu, 0x00040071u, 0x00000006u, 0x0000421du, 0x0000421cu, 0x0003003eu, 0x00004200u, 0x0000421du, 0x0004007cu, 0x00000008u, 0x0000421fu, 0x0000421du, 0x00070050u, 0x00000009u, 0x00004220u, 0x0000421fu, 0x0000421fu, 0x0000421fu, 0x0000421fu, 0x0003003eu, 0x00004201u, 0x00004220u, 0x0003003eu, 0x00002c41u, 0x00004220u, 0x000300f7u, 0x00003069u, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000306au, 0x00003069u, 0x000200f8u, 0x0000306au, 0x00050050u, 0x0000005fu, 0x0000306du, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x0000306eu, 0x0000306du, 0x0003003eu, 0x00006bc7u, 0x00002bf6u, 0x0003003eu, 0x00006bc8u, 0x00002bf9u, 0x0003003eu, 0x00002d3bu, 0x000020eau, 0x0003003eu, 0x00002d3cu, 0x0000306eu, 0x00050041u, 0x00000007u, 0x00004229u, 0x00002d3cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000422au, 0x00004229u, 0x00050084u, 0x00000006u, 0x0000422bu, 0x00002bf9u, 0x0000422au, 0x00050080u, 0x00000006u, 0x0000422cu, 0x00002bf6u, 0x0000422bu, 0x0003003eu, 0x00004221u, 0x0000422cu, 0x00050041u, 0x00000007u, 0x0000422du, 0x00002d3cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000422eu, 0x0000422du, 0x00050080u, 0x00000006u, 0x00004230u, 0x0000422cu, 0x0000422eu, 0x0003003eu, 0x00004221u, 0x00004230u, 0x000500c7u, 0x00000006u, 0x00004232u, 0x00004230u, 0x00000e4bu, 0x0003003eu, 0x00004221u, 0x00004232u, 0x0003003eu, 0x00004222u, 0x00004232u, 0x0004003du, 0x00000006u, 0x00004235u, 0x00004229u, 0x000500c7u, 0x00000006u, 0x00004236u, 0x00004235u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004237u, 0x00004236u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004239u, 0x00004232u, 0x00004237u, 0x0003003eu, 0x00004222u, 0x00004239u, 0x000500c6u, 0x00000006u, 0x0000423bu, 0x00004239u, 0x0000048bu, 0x0003003eu, 0x00004222u, 0x0000423bu, 0x00080041u, 0x00000277u, 0x0000423eu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000423bu, 0x0004003du, 0x00000229u, 0x0000423fu, 0x0000423eu, 0x00040071u, 0x00000006u, 0x00004240u, 0x0000423fu, 0x0003003eu, 0x00004223u, 0x00004240u, 0x0004007cu, 0x00000008u, 0x00004242u, 0x00004240u, 0x00070050u, 0x00000009u, 0x00004243u, 0x00004242u, 0x00004242u, 0x00004242u, 0x00004242u, 0x0003003eu, 0x00004224u, 0x00004243u, 0x0003003eu, 0x00002c49u, 0x00004243u, 0x00050050u, 0x0000005fu, 0x00003074u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00003075u, 0x00003074u, 0x0003003eu, 0x00006bcbu, 0x00002bf6u, 0x0003003eu, 0x00006bccu, 0x00002bf9u, 0x0003003eu, 0x00002d3eu, 0x000020eau, 0x0003003eu, 0x00002d3fu, 0x00003075u, 0x00050041u, 0x00000007u, 0x0000424cu, 0x00002d3fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000424du, 0x0000424cu, 0x00050084u, 0x00000006u, 0x0000424eu, 0x00002bf9u, 0x0000424du, 0x00050080u, 0x00000006u, 0x0000424fu, 0x00002bf6u, 0x0000424eu, 0x0003003eu, 0x00004244u, 0x0000424fu, 0x00050041u, 0x00000007u, 0x00004250u, 0x00002d3fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004251u, 0x00004250u, 0x00050080u, 0x00000006u, 0x00004253u, 0x0000424fu, 0x00004251u, 0x0003003eu, 0x00004244u, 0x00004253u, 0x000500c7u, 0x00000006u, 0x00004255u, 0x00004253u, 0x00000e4bu, 0x0003003eu, 0x00004244u, 0x00004255u, 0x0003003eu, 0x00004245u, 0x00004255u, 0x0004003du, 0x00000006u, 0x00004258u, 0x0000424cu, 0x000500c7u, 0x00000006u, 0x00004259u, 0x00004258u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000425au, 0x00004259u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000425cu, 0x00004255u, 0x0000425au, 0x0003003eu, 0x00004245u, 0x0000425cu, 0x000500c6u, 0x00000006u, 0x0000425eu, 0x0000425cu, 0x0000048bu, 0x0003003eu, 0x00004245u, 0x0000425eu, 0x00080041u, 0x00000277u, 0x00004261u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000425eu, 0x0004003du, 0x00000229u, 0x00004262u, 0x00004261u, 0x00040071u, 0x00000006u, 0x00004263u, 0x00004262u, 0x0003003eu, 0x00004246u, 0x00004263u, 0x0004007cu, 0x00000008u, 0x00004265u, 0x00004263u, 0x00070050u, 0x00000009u, 0x00004266u, 0x00004265u, 0x00004265u, 0x00004265u, 0x00004265u, 0x0003003eu, 0x00004247u, 0x00004266u, 0x0003003eu, 0x00002c51u, 0x00004266u, 0x000200f9u, 0x00003069u, 0x000200f8u, 0x00003069u, 0x000700f5u, 0x00000009u, 0x000083dcu, 0x0000837eu, 0x00003022u, 0x00004266u, 0x0000306au, 0x000700f5u, 0x00000009u, 0x000082e4u, 0x00008282u, 0x00003022u, 0x00004243u, 0x0000306au, 0x000300f7u, 0x0000307au, 0x00000000u, 0x000400fau, 0x00002db5u, 0x0000307bu, 0x0000307au, 0x000200f8u, 0x0000307bu, 0x00050050u, 0x0000005fu, 0x0000307eu, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x0000307fu, 0x0000307eu, 0x0003003eu, 0x00006bcfu, 0x00002bf6u, 0x0003003eu, 0x00006bd0u, 0x00002bf9u, 0x0003003eu, 0x00002d41u, 0x000020eau, 0x0003003eu, 0x00002d42u, 0x0000307fu, 0x00050041u, 0x00000007u, 0x0000426fu, 0x00002d42u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004270u, 0x0000426fu, 0x00050084u, 0x00000006u, 0x00004271u, 0x00002bf9u, 0x00004270u, 0x00050080u, 0x00000006u, 0x00004272u, 0x00002bf6u, 0x00004271u, 0x0003003eu, 0x00004267u, 0x00004272u, 0x00050041u, 0x00000007u, 0x00004273u, 0x00002d42u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004274u, 0x00004273u, 0x00050080u, 0x00000006u, 0x00004276u, 0x00004272u, 0x00004274u, 0x0003003eu, 0x00004267u, 0x00004276u, 0x000500c7u, 0x00000006u, 0x00004278u, 0x00004276u, 0x00000e4bu, 0x0003003eu, 0x00004267u, 0x00004278u, 0x0003003eu, 0x00004268u, 0x00004278u, 0x0004003du, 0x00000006u, 0x0000427bu, 0x0000426fu, 0x000500c7u, 0x00000006u, 0x0000427cu, 0x0000427bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000427du, 0x0000427cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000427fu, 0x00004278u, 0x0000427du, 0x0003003eu, 0x00004268u, 0x0000427fu, 0x000500c6u, 0x00000006u, 0x00004281u, 0x0000427fu, 0x0000048bu, 0x0003003eu, 0x00004268u, 0x00004281u, 0x00080041u, 0x00000277u, 0x00004284u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004281u, 0x0004003du, 0x00000229u, 0x00004285u, 0x00004284u, 0x00040071u, 0x00000006u, 0x00004286u, 0x00004285u, 0x0003003eu, 0x00004269u, 0x00004286u, 0x0004007cu, 0x00000008u, 0x00004288u, 0x00004286u, 0x00070050u, 0x00000009u, 0x00004289u, 0x00004288u, 0x00004288u, 0x00004288u, 0x00004288u, 0x0003003eu, 0x0000426au, 0x00004289u, 0x0003003eu, 0x00002c59u, 0x00004289u, 0x000200f9u, 0x0000307au, 0x000200f8u, 0x0000307au, 0x000700f5u, 0x00000009u, 0x00008458u, 0x000083f8u, 0x00003069u, 0x00004289u, 0x0000307bu, 0x000200f9u, 0x0000301fu, 0x000200f8u, 0x00003021u, 0x0004007cu, 0x000000a2u, 0x00003044u, 0x00007ef8u, 0x0003003eu, 0x00006bb3u, 0x00002bf6u, 0x0003003eu, 0x00006bb4u, 0x00002bf9u, 0x0003003eu, 0x00002d2cu, 0x000020eau, 0x0003003eu, 0x00002d2du, 0x00003044u, 0x00050041u, 0x00000007u, 0x0000413fu, 0x00002d2du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004140u, 0x0000413fu, 0x00050084u, 0x00000006u, 0x00004141u, 0x00002bf9u, 0x00004140u, 0x00050080u, 0x00000006u, 0x00004142u, 0x00002bf6u, 0x00004141u, 0x0003003eu, 0x00004136u, 0x00004142u, 0x00050041u, 0x00000007u, 0x00004143u, 0x00002d2du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004144u, 0x00004143u, 0x000500c2u, 0x00000006u, 0x00004145u, 0x00004144u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004147u, 0x00004142u, 0x00004145u, 0x0003003eu, 0x00004136u, 0x00004147u, 0x000500c7u, 0x00000006u, 0x00004149u, 0x00004147u, 0x00000e4bu, 0x0003003eu, 0x00004136u, 0x00004149u, 0x0004003du, 0x00000006u, 0x0000414bu, 0x00004143u, 0x000400c8u, 0x00000006u, 0x0000414cu, 0x0000414bu, 0x000500c7u, 0x00000006u, 0x0000414du, 0x0000414cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000414eu, 0x0000414du, 0x00000701u, 0x0003003eu, 0x00004137u, 0x0000414eu, 0x0003003eu, 0x00004138u, 0x00004149u, 0x0004003du, 0x00000006u, 0x00004151u, 0x0000413fu, 0x000500c7u, 0x00000006u, 0x00004152u, 0x00004151u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004153u, 0x00004152u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004155u, 0x00004149u, 0x00004153u, 0x0003003eu, 0x00004138u, 0x00004155u, 0x000500c6u, 0x00000006u, 0x00004157u, 0x00004155u, 0x0000048bu, 0x0003003eu, 0x00004138u, 0x00004157u, 0x00080041u, 0x00000277u, 0x0000415au, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004157u, 0x0004003du, 0x00000229u, 0x0000415bu, 0x0000415au, 0x00040071u, 0x00000006u, 0x0000415cu, 0x0000415bu, 0x0003003eu, 0x00004139u, 0x0000415cu, 0x000500c2u, 0x00000006u, 0x0000415fu, 0x0000415cu, 0x0000414eu, 0x000500c7u, 0x00000006u, 0x00004160u, 0x0000415fu, 0x00000e6eu, 0x0003003eu, 0x00004139u, 0x00004160u, 0x000500c4u, 0x00000006u, 0x00004162u, 0x00004160u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004164u, 0x00004160u, 0x00004162u, 0x0003003eu, 0x00004139u, 0x00004164u, 0x0004007cu, 0x00000008u, 0x00004166u, 0x00004164u, 0x00070050u, 0x00000009u, 0x00004167u, 0x00004166u, 0x00004166u, 0x00004166u, 0x00004166u, 0x0003003eu, 0x0000413au, 0x00004167u, 0x0003003eu, 0x00002c41u, 0x00004167u, 0x000300f7u, 0x00003049u, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000304au, 0x00003049u, 0x000200f8u, 0x0000304au, 0x00050050u, 0x0000005fu, 0x0000304du, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x0000304eu, 0x0000304du, 0x0003003eu, 0x00006bb7u, 0x00002bf6u, 0x0003003eu, 0x00006bb8u, 0x00002bf9u, 0x0003003eu, 0x00002d2fu, 0x000020eau, 0x0003003eu, 0x00002d30u, 0x0000304eu, 0x00050041u, 0x00000007u, 0x00004171u, 0x00002d30u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004172u, 0x00004171u, 0x00050084u, 0x00000006u, 0x00004173u, 0x00002bf9u, 0x00004172u, 0x00050080u, 0x00000006u, 0x00004174u, 0x00002bf6u, 0x00004173u, 0x0003003eu, 0x00004168u, 0x00004174u, 0x00050041u, 0x00000007u, 0x00004175u, 0x00002d30u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004176u, 0x00004175u, 0x000500c2u, 0x00000006u, 0x00004177u, 0x00004176u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004179u, 0x00004174u, 0x00004177u, 0x0003003eu, 0x00004168u, 0x00004179u, 0x000500c7u, 0x00000006u, 0x0000417bu, 0x00004179u, 0x00000e4bu, 0x0003003eu, 0x00004168u, 0x0000417bu, 0x0004003du, 0x00000006u, 0x0000417du, 0x00004175u, 0x000400c8u, 0x00000006u, 0x0000417eu, 0x0000417du, 0x000500c7u, 0x00000006u, 0x0000417fu, 0x0000417eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004180u, 0x0000417fu, 0x00000701u, 0x0003003eu, 0x00004169u, 0x00004180u, 0x0003003eu, 0x0000416au, 0x0000417bu, 0x0004003du, 0x00000006u, 0x00004183u, 0x00004171u, 0x000500c7u, 0x00000006u, 0x00004184u, 0x00004183u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004185u, 0x00004184u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004187u, 0x0000417bu, 0x00004185u, 0x0003003eu, 0x0000416au, 0x00004187u, 0x000500c6u, 0x00000006u, 0x00004189u, 0x00004187u, 0x0000048bu, 0x0003003eu, 0x0000416au, 0x00004189u, 0x00080041u, 0x00000277u, 0x0000418cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004189u, 0x0004003du, 0x00000229u, 0x0000418du, 0x0000418cu, 0x00040071u, 0x00000006u, 0x0000418eu, 0x0000418du, 0x0003003eu, 0x0000416bu, 0x0000418eu, 0x000500c2u, 0x00000006u, 0x00004191u, 0x0000418eu, 0x00004180u, 0x000500c7u, 0x00000006u, 0x00004192u, 0x00004191u, 0x00000e6eu, 0x0003003eu, 0x0000416bu, 0x00004192u, 0x000500c4u, 0x00000006u, 0x00004194u, 0x00004192u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004196u, 0x00004192u, 0x00004194u, 0x0003003eu, 0x0000416bu, 0x00004196u, 0x0004007cu, 0x00000008u, 0x00004198u, 0x00004196u, 0x00070050u, 0x00000009u, 0x00004199u, 0x00004198u, 0x00004198u, 0x00004198u, 0x00004198u, 0x0003003eu, 0x0000416cu, 0x00004199u, 0x0003003eu, 0x00002c49u, 0x00004199u, 0x00050050u, 0x0000005fu, 0x00003054u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00003055u, 0x00003054u, 0x0003003eu, 0x00006bbbu, 0x00002bf6u, 0x0003003eu, 0x00006bbcu, 0x00002bf9u, 0x0003003eu, 0x00002d32u, 0x000020eau, 0x0003003eu, 0x00002d33u, 0x00003055u, 0x00050041u, 0x00000007u, 0x000041a3u, 0x00002d33u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000041a4u, 0x000041a3u, 0x00050084u, 0x00000006u, 0x000041a5u, 0x00002bf9u, 0x000041a4u, 0x00050080u, 0x00000006u, 0x000041a6u, 0x00002bf6u, 0x000041a5u, 0x0003003eu, 0x0000419au, 0x000041a6u, 0x00050041u, 0x00000007u, 0x000041a7u, 0x00002d33u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000041a8u, 0x000041a7u, 0x000500c2u, 0x00000006u, 0x000041a9u, 0x000041a8u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000041abu, 0x000041a6u, 0x000041a9u, 0x0003003eu, 0x0000419au, 0x000041abu, 0x000500c7u, 0x00000006u, 0x000041adu, 0x000041abu, 0x00000e4bu, 0x0003003eu, 0x0000419au, 0x000041adu, 0x0004003du, 0x00000006u, 0x000041afu, 0x000041a7u, 0x000400c8u, 0x00000006u, 0x000041b0u, 0x000041afu, 0x000500c7u, 0x00000006u, 0x000041b1u, 0x000041b0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000041b2u, 0x000041b1u, 0x00000701u, 0x0003003eu, 0x0000419bu, 0x000041b2u, 0x0003003eu, 0x0000419cu, 0x000041adu, 0x0004003du, 0x00000006u, 0x000041b5u, 0x000041a3u, 0x000500c7u, 0x00000006u, 0x000041b6u, 0x000041b5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000041b7u, 0x000041b6u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000041b9u, 0x000041adu, 0x000041b7u, 0x0003003eu, 0x0000419cu, 0x000041b9u, 0x000500c6u, 0x00000006u, 0x000041bbu, 0x000041b9u, 0x0000048bu, 0x0003003eu, 0x0000419cu, 0x000041bbu, 0x00080041u, 0x00000277u, 0x000041beu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000041bbu, 0x0004003du, 0x00000229u, 0x000041bfu, 0x000041beu, 0x00040071u, 0x00000006u, 0x000041c0u, 0x000041bfu, 0x0003003eu, 0x0000419du, 0x000041c0u, 0x000500c2u, 0x00000006u, 0x000041c3u, 0x000041c0u, 0x000041b2u, 0x000500c7u, 0x00000006u, 0x000041c4u, 0x000041c3u, 0x00000e6eu, 0x0003003eu, 0x0000419du, 0x000041c4u, 0x000500c4u, 0x00000006u, 0x000041c6u, 0x000041c4u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000041c8u, 0x000041c4u, 0x000041c6u, 0x0003003eu, 0x0000419du, 0x000041c8u, 0x0004007cu, 0x00000008u, 0x000041cau, 0x000041c8u, 0x00070050u, 0x00000009u, 0x000041cbu, 0x000041cau, 0x000041cau, 0x000041cau, 0x000041cau, 0x0003003eu, 0x0000419eu, 0x000041cbu, 0x0003003eu, 0x00002c51u, 0x000041cbu, 0x000200f9u, 0x00003049u, 0x000200f8u, 0x00003049u, 0x000700f5u, 0x00000009u, 0x000083dau, 0x0000837eu, 0x00003021u, 0x000041cbu, 0x0000304au, 0x000700f5u, 0x00000009u, 0x000082e2u, 0x00008282u, 0x00003021u, 0x00004199u, 0x0000304au, 0x000300f7u, 0x0000305au, 0x00000000u, 0x000400fau, 0x00002db5u, 0x0000305bu, 0x0000305au, 0x000200f8u, 0x0000305bu, 0x00050050u, 0x0000005fu, 0x0000305eu, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x0000305fu, 0x0000305eu, 0x0003003eu, 0x00006bbfu, 0x00002bf6u, 0x0003003eu, 0x00006bc0u, 0x00002bf9u, 0x0003003eu, 0x00002d35u, 0x000020eau, 0x0003003eu, 0x00002d36u, 0x0000305fu, 0x00050041u, 0x00000007u, 0x000041d5u, 0x00002d36u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000041d6u, 0x000041d5u, 0x00050084u, 0x00000006u, 0x000041d7u, 0x00002bf9u, 0x000041d6u, 0x00050080u, 0x00000006u, 0x000041d8u, 0x00002bf6u, 0x000041d7u, 0x0003003eu, 0x000041ccu, 0x000041d8u, 0x00050041u, 0x00000007u, 0x000041d9u, 0x00002d36u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000041dau, 0x000041d9u, 0x000500c2u, 0x00000006u, 0x000041dbu, 0x000041dau, 0x00000212u, 0x00050080u, 0x00000006u, 0x000041ddu, 0x000041d8u, 0x000041dbu, 0x0003003eu, 0x000041ccu, 0x000041ddu, 0x000500c7u, 0x00000006u, 0x000041dfu, 0x000041ddu, 0x00000e4bu, 0x0003003eu, 0x000041ccu, 0x000041dfu, 0x0004003du, 0x00000006u, 0x000041e1u, 0x000041d9u, 0x000400c8u, 0x00000006u, 0x000041e2u, 0x000041e1u, 0x000500c7u, 0x00000006u, 0x000041e3u, 0x000041e2u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000041e4u, 0x000041e3u, 0x00000701u, 0x0003003eu, 0x000041cdu, 0x000041e4u, 0x0003003eu, 0x000041ceu, 0x000041dfu, 0x0004003du, 0x00000006u, 0x000041e7u, 0x000041d5u, 0x000500c7u, 0x00000006u, 0x000041e8u, 0x000041e7u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000041e9u, 0x000041e8u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000041ebu, 0x000041dfu, 0x000041e9u, 0x0003003eu, 0x000041ceu, 0x000041ebu, 0x000500c6u, 0x00000006u, 0x000041edu, 0x000041ebu, 0x0000048bu, 0x0003003eu, 0x000041ceu, 0x000041edu, 0x00080041u, 0x00000277u, 0x000041f0u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000041edu, 0x0004003du, 0x00000229u, 0x000041f1u, 0x000041f0u, 0x00040071u, 0x00000006u, 0x000041f2u, 0x000041f1u, 0x0003003eu, 0x000041cfu, 0x000041f2u, 0x000500c2u, 0x00000006u, 0x000041f5u, 0x000041f2u, 0x000041e4u, 0x000500c7u, 0x00000006u, 0x000041f6u, 0x000041f5u, 0x00000e6eu, 0x0003003eu, 0x000041cfu, 0x000041f6u, 0x000500c4u, 0x00000006u, 0x000041f8u, 0x000041f6u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000041fau, 0x000041f6u, 0x000041f8u, 0x0003003eu, 0x000041cfu, 0x000041fau, 0x0004007cu, 0x00000008u, 0x000041fcu, 0x000041fau, 0x00070050u, 0x00000009u, 0x000041fdu, 0x000041fcu, 0x000041fcu, 0x000041fcu, 0x000041fcu, 0x0003003eu, 0x000041d0u, 0x000041fdu, 0x0003003eu, 0x00002c59u, 0x000041fdu, 0x000200f9u, 0x0000305au, 0x000200f8u, 0x0000305au, 0x000700f5u, 0x00000009u, 0x00008456u, 0x000083f8u, 0x00003049u, 0x000041fdu, 0x0000305bu, 0x000200f9u, 0x0000301fu, 0x000200f8u, 0x00003020u, 0x0004007cu, 0x000000a2u, 0x00003024u, 0x00007ef8u, 0x0003003eu, 0x00006bd3u, 0x00002bf6u, 0x0003003eu, 0x00006bd4u, 0x00002bf9u, 0x0003003eu, 0x00002d44u, 0x000020eau, 0x0003003eu, 0x00002d45u, 0x00003024u, 0x00050041u, 0x00000007u, 0x00004096u, 0x00002d45u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004097u, 0x00004096u, 0x00050084u, 0x00000006u, 0x00004098u, 0x00002bf9u, 0x00004097u, 0x00050080u, 0x00000006u, 0x00004099u, 0x00002bf6u, 0x00004098u, 0x0003003eu, 0x0000408eu, 0x00004099u, 0x00050041u, 0x00000007u, 0x0000409au, 0x00002d45u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000409bu, 0x0000409au, 0x00050084u, 0x00000006u, 0x0000409cu, 0x0000409bu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000409eu, 0x00004099u, 0x0000409cu, 0x0003003eu, 0x0000408eu, 0x0000409eu, 0x000500c7u, 0x00000006u, 0x000040a0u, 0x0000409eu, 0x00000e4bu, 0x0003003eu, 0x0000408eu, 0x000040a0u, 0x000500c2u, 0x00000006u, 0x000040a2u, 0x000040a0u, 0x00000212u, 0x0003003eu, 0x0000408fu, 0x000040a2u, 0x0004003du, 0x00000006u, 0x000040a4u, 0x00004096u, 0x000500c7u, 0x00000006u, 0x000040a5u, 0x000040a4u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000040a6u, 0x000040a5u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000040a8u, 0x000040a2u, 0x000040a6u, 0x0003003eu, 0x0000408fu, 0x000040a8u, 0x000500c6u, 0x00000006u, 0x000040aau, 0x000040a8u, 0x00000485u, 0x0003003eu, 0x0000408fu, 0x000040aau, 0x00080041u, 0x00000270u, 0x000040adu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000040aau, 0x0004003du, 0x0000022bu, 0x000040aeu, 0x000040adu, 0x00040071u, 0x00000006u, 0x000040afu, 0x000040aeu, 0x0003003eu, 0x00004090u, 0x000040afu, 0x000500c2u, 0x00000006u, 0x000040b1u, 0x000040afu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000040b2u, 0x000040b1u, 0x000500c7u, 0x00000006u, 0x000040b4u, 0x000040afu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000040b5u, 0x000040b4u, 0x00050050u, 0x0000005fu, 0x000040b6u, 0x000040b2u, 0x000040b5u, 0x0009004fu, 0x00000009u, 0x000040b7u, 0x000040b6u, 0x000040b6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004091u, 0x000040b7u, 0x0003003eu, 0x00002c41u, 0x000040b7u, 0x000300f7u, 0x00003029u, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000302au, 0x00003029u, 0x000200f8u, 0x0000302au, 0x00050050u, 0x0000005fu, 0x0000302du, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x0000302eu, 0x0000302du, 0x0003003eu, 0x00006bd7u, 0x00002bf6u, 0x0003003eu, 0x00006bd8u, 0x00002bf9u, 0x0003003eu, 0x00002d47u, 0x000020eau, 0x0003003eu, 0x00002d48u, 0x0000302eu, 0x00050041u, 0x00000007u, 0x000040c0u, 0x00002d48u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000040c1u, 0x000040c0u, 0x00050084u, 0x00000006u, 0x000040c2u, 0x00002bf9u, 0x000040c1u, 0x00050080u, 0x00000006u, 0x000040c3u, 0x00002bf6u, 0x000040c2u, 0x0003003eu, 0x000040b8u, 0x000040c3u, 0x00050041u, 0x00000007u, 0x000040c4u, 0x00002d48u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000040c5u, 0x000040c4u, 0x00050084u, 0x00000006u, 0x000040c6u, 0x000040c5u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000040c8u, 0x000040c3u, 0x000040c6u, 0x0003003eu, 0x000040b8u, 0x000040c8u, 0x000500c7u, 0x00000006u, 0x000040cau, 0x000040c8u, 0x00000e4bu, 0x0003003eu, 0x000040b8u, 0x000040cau, 0x000500c2u, 0x00000006u, 0x000040ccu, 0x000040cau, 0x00000212u, 0x0003003eu, 0x000040b9u, 0x000040ccu, 0x0004003du, 0x00000006u, 0x000040ceu, 0x000040c0u, 0x000500c7u, 0x00000006u, 0x000040cfu, 0x000040ceu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000040d0u, 0x000040cfu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000040d2u, 0x000040ccu, 0x000040d0u, 0x0003003eu, 0x000040b9u, 0x000040d2u, 0x000500c6u, 0x00000006u, 0x000040d4u, 0x000040d2u, 0x00000485u, 0x0003003eu, 0x000040b9u, 0x000040d4u, 0x00080041u, 0x00000270u, 0x000040d7u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000040d4u, 0x0004003du, 0x0000022bu, 0x000040d8u, 0x000040d7u, 0x00040071u, 0x00000006u, 0x000040d9u, 0x000040d8u, 0x0003003eu, 0x000040bau, 0x000040d9u, 0x000500c2u, 0x00000006u, 0x000040dbu, 0x000040d9u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000040dcu, 0x000040dbu, 0x000500c7u, 0x00000006u, 0x000040deu, 0x000040d9u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000040dfu, 0x000040deu, 0x00050050u, 0x0000005fu, 0x000040e0u, 0x000040dcu, 0x000040dfu, 0x0009004fu, 0x00000009u, 0x000040e1u, 0x000040e0u, 0x000040e0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000040bbu, 0x000040e1u, 0x0003003eu, 0x00002c49u, 0x000040e1u, 0x00050050u, 0x0000005fu, 0x00003034u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00003035u, 0x00003034u, 0x0003003eu, 0x00006bdbu, 0x00002bf6u, 0x0003003eu, 0x00006bdcu, 0x00002bf9u, 0x0003003eu, 0x00002d4au, 0x000020eau, 0x0003003eu, 0x00002d4bu, 0x00003035u, 0x00050041u, 0x00000007u, 0x000040eau, 0x00002d4bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000040ebu, 0x000040eau, 0x00050084u, 0x00000006u, 0x000040ecu, 0x00002bf9u, 0x000040ebu, 0x00050080u, 0x00000006u, 0x000040edu, 0x00002bf6u, 0x000040ecu, 0x0003003eu, 0x000040e2u, 0x000040edu, 0x00050041u, 0x00000007u, 0x000040eeu, 0x00002d4bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000040efu, 0x000040eeu, 0x00050084u, 0x00000006u, 0x000040f0u, 0x000040efu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000040f2u, 0x000040edu, 0x000040f0u, 0x0003003eu, 0x000040e2u, 0x000040f2u, 0x000500c7u, 0x00000006u, 0x000040f4u, 0x000040f2u, 0x00000e4bu, 0x0003003eu, 0x000040e2u, 0x000040f4u, 0x000500c2u, 0x00000006u, 0x000040f6u, 0x000040f4u, 0x00000212u, 0x0003003eu, 0x000040e3u, 0x000040f6u, 0x0004003du, 0x00000006u, 0x000040f8u, 0x000040eau, 0x000500c7u, 0x00000006u, 0x000040f9u, 0x000040f8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000040fau, 0x000040f9u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000040fcu, 0x000040f6u, 0x000040fau, 0x0003003eu, 0x000040e3u, 0x000040fcu, 0x000500c6u, 0x00000006u, 0x000040feu, 0x000040fcu, 0x00000485u, 0x0003003eu, 0x000040e3u, 0x000040feu, 0x00080041u, 0x00000270u, 0x00004101u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000040feu, 0x0004003du, 0x0000022bu, 0x00004102u, 0x00004101u, 0x00040071u, 0x00000006u, 0x00004103u, 0x00004102u, 0x0003003eu, 0x000040e4u, 0x00004103u, 0x000500c2u, 0x00000006u, 0x00004105u, 0x00004103u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004106u, 0x00004105u, 0x000500c7u, 0x00000006u, 0x00004108u, 0x00004103u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004109u, 0x00004108u, 0x00050050u, 0x0000005fu, 0x0000410au, 0x00004106u, 0x00004109u, 0x0009004fu, 0x00000009u, 0x0000410bu, 0x0000410au, 0x0000410au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000040e5u, 0x0000410bu, 0x0003003eu, 0x00002c51u, 0x0000410bu, 0x000200f9u, 0x00003029u, 0x000200f8u, 0x00003029u, 0x000700f5u, 0x00000009u, 0x000083d8u, 0x0000837eu, 0x00003020u, 0x0000410bu, 0x0000302au, 0x000700f5u, 0x00000009u, 0x000082e0u, 0x00008282u, 0x00003020u, 0x000040e1u, 0x0000302au, 0x000300f7u, 0x0000303au, 0x00000000u, 0x000400fau, 0x00002db5u, 0x0000303bu, 0x0000303au, 0x000200f8u, 0x0000303bu, 0x00050050u, 0x0000005fu, 0x0000303eu, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x0000303fu, 0x0000303eu, 0x0003003eu, 0x00006bdfu, 0x00002bf6u, 0x0003003eu, 0x00006be0u, 0x00002bf9u, 0x0003003eu, 0x00002d4du, 0x000020eau, 0x0003003eu, 0x00002d4eu, 0x0000303fu, 0x00050041u, 0x00000007u, 0x00004114u, 0x00002d4eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004115u, 0x00004114u, 0x00050084u, 0x00000006u, 0x00004116u, 0x00002bf9u, 0x00004115u, 0x00050080u, 0x00000006u, 0x00004117u, 0x00002bf6u, 0x00004116u, 0x0003003eu, 0x0000410cu, 0x00004117u, 0x00050041u, 0x00000007u, 0x00004118u, 0x00002d4eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004119u, 0x00004118u, 0x00050084u, 0x00000006u, 0x0000411au, 0x00004119u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000411cu, 0x00004117u, 0x0000411au, 0x0003003eu, 0x0000410cu, 0x0000411cu, 0x000500c7u, 0x00000006u, 0x0000411eu, 0x0000411cu, 0x00000e4bu, 0x0003003eu, 0x0000410cu, 0x0000411eu, 0x000500c2u, 0x00000006u, 0x00004120u, 0x0000411eu, 0x00000212u, 0x0003003eu, 0x0000410du, 0x00004120u, 0x0004003du, 0x00000006u, 0x00004122u, 0x00004114u, 0x000500c7u, 0x00000006u, 0x00004123u, 0x00004122u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004124u, 0x00004123u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004126u, 0x00004120u, 0x00004124u, 0x0003003eu, 0x0000410du, 0x00004126u, 0x000500c6u, 0x00000006u, 0x00004128u, 0x00004126u, 0x00000485u, 0x0003003eu, 0x0000410du, 0x00004128u, 0x00080041u, 0x00000270u, 0x0000412bu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004128u, 0x0004003du, 0x0000022bu, 0x0000412cu, 0x0000412bu, 0x00040071u, 0x00000006u, 0x0000412du, 0x0000412cu, 0x0003003eu, 0x0000410eu, 0x0000412du, 0x000500c2u, 0x00000006u, 0x0000412fu, 0x0000412du, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004130u, 0x0000412fu, 0x000500c7u, 0x00000006u, 0x00004132u, 0x0000412du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004133u, 0x00004132u, 0x00050050u, 0x0000005fu, 0x00004134u, 0x00004130u, 0x00004133u, 0x0009004fu, 0x00000009u, 0x00004135u, 0x00004134u, 0x00004134u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000410fu, 0x00004135u, 0x0003003eu, 0x00002c59u, 0x00004135u, 0x000200f9u, 0x0000303au, 0x000200f8u, 0x0000303au, 0x000700f5u, 0x00000009u, 0x00008454u, 0x000083f8u, 0x00003029u, 0x00004135u, 0x0000303bu, 0x000200f9u, 0x0000301fu, 0x000200f8u, 0x0000301fu, 0x000900f5u, 0x00000009u, 0x00008453u, 0x00008454u, 0x0000303au, 0x00008456u, 0x0000305au, 0x00008458u, 0x0000307au, 0x000900f5u, 0x00000009u, 0x000083d6u, 0x000083d8u, 0x0000303au, 0x000083dau, 0x0000305au, 0x000083dcu, 0x0000307au, 0x000900f5u, 0x00000009u, 0x0000835bu, 0x000040b7u, 0x0000303au, 0x00004167u, 0x0000305au, 0x00004220u, 0x0000307au, 0x000900f5u, 0x00000009u, 0x000082deu, 0x000082e0u, 0x0000303au, 0x000082e2u, 0x0000305au, 0x000082e4u, 0x0000307au, 0x000200f9u, 0x00002e6au, 0x000200f8u, 0x00002e6eu, 0x000300f7u, 0x00002f98u, 0x00000000u, 0x000b00fbu, 0x00002c03u, 0x00002f98u, 0x00000000u, 0x00002f99u, 0x00000001u, 0x00002f9au, 0x00000002u, 0x00002f9bu, 0x00000003u, 0x00002f9cu, 0x000200f8u, 0x00002f9cu, 0x0004007cu, 0x000000a2u, 0x00002ffeu, 0x00007ef8u, 0x0003003eu, 0x00006ba3u, 0x00002bf6u, 0x0003003eu, 0x00006ba4u, 0x00002bf9u, 0x0003003eu, 0x00002d20u, 0x000020eau, 0x0003003eu, 0x00002d21u, 0x00002ffeu, 0x00050041u, 0x00000007u, 0x00003feeu, 0x00002d21u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003fefu, 0x00003feeu, 0x00050084u, 0x00000006u, 0x00003ff0u, 0x00002bf9u, 0x00003fefu, 0x00050080u, 0x00000006u, 0x00003ff1u, 0x00002bf6u, 0x00003ff0u, 0x0003003eu, 0x00003fe6u, 0x00003ff1u, 0x00050041u, 0x00000007u, 0x00003ff2u, 0x00002d21u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ff3u, 0x00003ff2u, 0x00050084u, 0x00000006u, 0x00003ff4u, 0x00003ff3u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003ff6u, 0x00003ff1u, 0x00003ff4u, 0x0003003eu, 0x00003fe6u, 0x00003ff6u, 0x000500c7u, 0x00000006u, 0x00003ff8u, 0x00003ff6u, 0x00000e4bu, 0x0003003eu, 0x00003fe6u, 0x00003ff8u, 0x000500c2u, 0x00000006u, 0x00003ffau, 0x00003ff8u, 0x00000212u, 0x0003003eu, 0x00003fe7u, 0x00003ffau, 0x0004003du, 0x00000006u, 0x00003ffcu, 0x00003feeu, 0x000500c7u, 0x00000006u, 0x00003ffdu, 0x00003ffcu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ffeu, 0x00003ffdu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004000u, 0x00003ffau, 0x00003ffeu, 0x0003003eu, 0x00003fe7u, 0x00004000u, 0x000500c6u, 0x00000006u, 0x00004002u, 0x00004000u, 0x00000485u, 0x0003003eu, 0x00003fe7u, 0x00004002u, 0x00080041u, 0x00000270u, 0x00004005u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004002u, 0x0004003du, 0x0000022bu, 0x00004006u, 0x00004005u, 0x00040071u, 0x00000006u, 0x00004007u, 0x00004006u, 0x0003003eu, 0x00003fe8u, 0x00004007u, 0x000500c2u, 0x00000006u, 0x00004009u, 0x00004007u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000400au, 0x00004009u, 0x000500c7u, 0x00000006u, 0x0000400cu, 0x00004007u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000400du, 0x0000400cu, 0x00050050u, 0x0000005fu, 0x0000400eu, 0x0000400au, 0x0000400du, 0x0009004fu, 0x00000009u, 0x0000400fu, 0x0000400eu, 0x0000400eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003fe9u, 0x0000400fu, 0x0003003eu, 0x00002c41u, 0x0000400fu, 0x000300f7u, 0x00003003u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00003004u, 0x00003003u, 0x000200f8u, 0x00003004u, 0x00050050u, 0x0000005fu, 0x00003007u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00003008u, 0x00003007u, 0x0003003eu, 0x00006ba7u, 0x00002bf6u, 0x0003003eu, 0x00006ba8u, 0x00002bf9u, 0x0003003eu, 0x00002d23u, 0x000020eau, 0x0003003eu, 0x00002d24u, 0x00003008u, 0x00050041u, 0x00000007u, 0x00004018u, 0x00002d24u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004019u, 0x00004018u, 0x00050084u, 0x00000006u, 0x0000401au, 0x00002bf9u, 0x00004019u, 0x00050080u, 0x00000006u, 0x0000401bu, 0x00002bf6u, 0x0000401au, 0x0003003eu, 0x00004010u, 0x0000401bu, 0x00050041u, 0x00000007u, 0x0000401cu, 0x00002d24u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000401du, 0x0000401cu, 0x00050084u, 0x00000006u, 0x0000401eu, 0x0000401du, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004020u, 0x0000401bu, 0x0000401eu, 0x0003003eu, 0x00004010u, 0x00004020u, 0x000500c7u, 0x00000006u, 0x00004022u, 0x00004020u, 0x00000e4bu, 0x0003003eu, 0x00004010u, 0x00004022u, 0x000500c2u, 0x00000006u, 0x00004024u, 0x00004022u, 0x00000212u, 0x0003003eu, 0x00004011u, 0x00004024u, 0x0004003du, 0x00000006u, 0x00004026u, 0x00004018u, 0x000500c7u, 0x00000006u, 0x00004027u, 0x00004026u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004028u, 0x00004027u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000402au, 0x00004024u, 0x00004028u, 0x0003003eu, 0x00004011u, 0x0000402au, 0x000500c6u, 0x00000006u, 0x0000402cu, 0x0000402au, 0x00000485u, 0x0003003eu, 0x00004011u, 0x0000402cu, 0x00080041u, 0x00000270u, 0x0000402fu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000402cu, 0x0004003du, 0x0000022bu, 0x00004030u, 0x0000402fu, 0x00040071u, 0x00000006u, 0x00004031u, 0x00004030u, 0x0003003eu, 0x00004012u, 0x00004031u, 0x000500c2u, 0x00000006u, 0x00004033u, 0x00004031u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004034u, 0x00004033u, 0x000500c7u, 0x00000006u, 0x00004036u, 0x00004031u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004037u, 0x00004036u, 0x00050050u, 0x0000005fu, 0x00004038u, 0x00004034u, 0x00004037u, 0x0009004fu, 0x00000009u, 0x00004039u, 0x00004038u, 0x00004038u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004013u, 0x00004039u, 0x0003003eu, 0x00002c49u, 0x00004039u, 0x00050050u, 0x0000005fu, 0x0000300eu, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x0000300fu, 0x0000300eu, 0x0003003eu, 0x00006babu, 0x00002bf6u, 0x0003003eu, 0x00006bacu, 0x00002bf9u, 0x0003003eu, 0x00002d26u, 0x000020eau, 0x0003003eu, 0x00002d27u, 0x0000300fu, 0x00050041u, 0x00000007u, 0x00004042u, 0x00002d27u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004043u, 0x00004042u, 0x00050084u, 0x00000006u, 0x00004044u, 0x00002bf9u, 0x00004043u, 0x00050080u, 0x00000006u, 0x00004045u, 0x00002bf6u, 0x00004044u, 0x0003003eu, 0x0000403au, 0x00004045u, 0x00050041u, 0x00000007u, 0x00004046u, 0x00002d27u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004047u, 0x00004046u, 0x00050084u, 0x00000006u, 0x00004048u, 0x00004047u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000404au, 0x00004045u, 0x00004048u, 0x0003003eu, 0x0000403au, 0x0000404au, 0x000500c7u, 0x00000006u, 0x0000404cu, 0x0000404au, 0x00000e4bu, 0x0003003eu, 0x0000403au, 0x0000404cu, 0x000500c2u, 0x00000006u, 0x0000404eu, 0x0000404cu, 0x00000212u, 0x0003003eu, 0x0000403bu, 0x0000404eu, 0x0004003du, 0x00000006u, 0x00004050u, 0x00004042u, 0x000500c7u, 0x00000006u, 0x00004051u, 0x00004050u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004052u, 0x00004051u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004054u, 0x0000404eu, 0x00004052u, 0x0003003eu, 0x0000403bu, 0x00004054u, 0x000500c6u, 0x00000006u, 0x00004056u, 0x00004054u, 0x00000485u, 0x0003003eu, 0x0000403bu, 0x00004056u, 0x00080041u, 0x00000270u, 0x00004059u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004056u, 0x0004003du, 0x0000022bu, 0x0000405au, 0x00004059u, 0x00040071u, 0x00000006u, 0x0000405bu, 0x0000405au, 0x0003003eu, 0x0000403cu, 0x0000405bu, 0x000500c2u, 0x00000006u, 0x0000405du, 0x0000405bu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000405eu, 0x0000405du, 0x000500c7u, 0x00000006u, 0x00004060u, 0x0000405bu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004061u, 0x00004060u, 0x00050050u, 0x0000005fu, 0x00004062u, 0x0000405eu, 0x00004061u, 0x0009004fu, 0x00000009u, 0x00004063u, 0x00004062u, 0x00004062u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000403du, 0x00004063u, 0x0003003eu, 0x00002c51u, 0x00004063u, 0x000200f9u, 0x00003003u, 0x000200f8u, 0x00003003u, 0x000700f5u, 0x00000009u, 0x000083d5u, 0x0000837eu, 0x00002f9cu, 0x00004063u, 0x00003004u, 0x000700f5u, 0x00000009u, 0x000082ddu, 0x00008282u, 0x00002f9cu, 0x00004039u, 0x00003004u, 0x000300f7u, 0x00003014u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00003015u, 0x00003014u, 0x000200f8u, 0x00003015u, 0x00050050u, 0x0000005fu, 0x00003018u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00003019u, 0x00003018u, 0x0003003eu, 0x00006bafu, 0x00002bf6u, 0x0003003eu, 0x00006bb0u, 0x00002bf9u, 0x0003003eu, 0x00002d29u, 0x000020eau, 0x0003003eu, 0x00002d2au, 0x00003019u, 0x00050041u, 0x00000007u, 0x0000406cu, 0x00002d2au, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000406du, 0x0000406cu, 0x00050084u, 0x00000006u, 0x0000406eu, 0x00002bf9u, 0x0000406du, 0x00050080u, 0x00000006u, 0x0000406fu, 0x00002bf6u, 0x0000406eu, 0x0003003eu, 0x00004064u, 0x0000406fu, 0x00050041u, 0x00000007u, 0x00004070u, 0x00002d2au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004071u, 0x00004070u, 0x00050084u, 0x00000006u, 0x00004072u, 0x00004071u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004074u, 0x0000406fu, 0x00004072u, 0x0003003eu, 0x00004064u, 0x00004074u, 0x000500c7u, 0x00000006u, 0x00004076u, 0x00004074u, 0x00000e4bu, 0x0003003eu, 0x00004064u, 0x00004076u, 0x000500c2u, 0x00000006u, 0x00004078u, 0x00004076u, 0x00000212u, 0x0003003eu, 0x00004065u, 0x00004078u, 0x0004003du, 0x00000006u, 0x0000407au, 0x0000406cu, 0x000500c7u, 0x00000006u, 0x0000407bu, 0x0000407au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000407cu, 0x0000407bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000407eu, 0x00004078u, 0x0000407cu, 0x0003003eu, 0x00004065u, 0x0000407eu, 0x000500c6u, 0x00000006u, 0x00004080u, 0x0000407eu, 0x00000485u, 0x0003003eu, 0x00004065u, 0x00004080u, 0x00080041u, 0x00000270u, 0x00004083u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004080u, 0x0004003du, 0x0000022bu, 0x00004084u, 0x00004083u, 0x00040071u, 0x00000006u, 0x00004085u, 0x00004084u, 0x0003003eu, 0x00004066u, 0x00004085u, 0x000500c2u, 0x00000006u, 0x00004087u, 0x00004085u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004088u, 0x00004087u, 0x000500c7u, 0x00000006u, 0x0000408au, 0x00004085u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000408bu, 0x0000408au, 0x00050050u, 0x0000005fu, 0x0000408cu, 0x00004088u, 0x0000408bu, 0x0009004fu, 0x00000009u, 0x0000408du, 0x0000408cu, 0x0000408cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004067u, 0x0000408du, 0x0003003eu, 0x00002c59u, 0x0000408du, 0x000200f9u, 0x00003014u, 0x000200f8u, 0x00003014u, 0x000700f5u, 0x00000009u, 0x00008451u, 0x000083f8u, 0x00003003u, 0x0000408du, 0x00003015u, 0x000200f9u, 0x00002f98u, 0x000200f8u, 0x00002f9bu, 0x0004007cu, 0x000000a2u, 0x00002fdeu, 0x00007ef8u, 0x0003003eu, 0x00006b93u, 0x00002bf6u, 0x0003003eu, 0x00006b94u, 0x00002bf9u, 0x0003003eu, 0x00002d14u, 0x000020eau, 0x0003003eu, 0x00002d15u, 0x00002fdeu, 0x00050041u, 0x00000007u, 0x00003f1bu, 0x00002d15u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003f1cu, 0x00003f1bu, 0x00050084u, 0x00000006u, 0x00003f1du, 0x00002bf9u, 0x00003f1cu, 0x00050080u, 0x00000006u, 0x00003f1eu, 0x00002bf6u, 0x00003f1du, 0x0003003eu, 0x00003f12u, 0x00003f1eu, 0x00050041u, 0x00000007u, 0x00003f1fu, 0x00002d15u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003f20u, 0x00003f1fu, 0x00050084u, 0x00000006u, 0x00003f21u, 0x00003f20u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003f23u, 0x00003f1eu, 0x00003f21u, 0x0003003eu, 0x00003f12u, 0x00003f23u, 0x000500c7u, 0x00000006u, 0x00003f25u, 0x00003f23u, 0x00000e4bu, 0x0003003eu, 0x00003f12u, 0x00003f25u, 0x000500c2u, 0x00000006u, 0x00003f27u, 0x00003f25u, 0x00000212u, 0x0003003eu, 0x00003f13u, 0x00003f27u, 0x0004003du, 0x00000006u, 0x00003f29u, 0x00003f1bu, 0x000500c7u, 0x00000006u, 0x00003f2au, 0x00003f29u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003f2bu, 0x00003f2au, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003f2du, 0x00003f27u, 0x00003f2bu, 0x0003003eu, 0x00003f13u, 0x00003f2du, 0x000500c6u, 0x00000006u, 0x00003f2fu, 0x00003f2du, 0x00000485u, 0x0003003eu, 0x00003f13u, 0x00003f2fu, 0x00080041u, 0x00000270u, 0x00003f32u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003f2fu, 0x0004003du, 0x0000022bu, 0x00003f33u, 0x00003f32u, 0x00040071u, 0x00000006u, 0x00003f34u, 0x00003f33u, 0x0003003eu, 0x00003f14u, 0x00003f34u, 0x0003003eu, 0x00003f15u, 0x00003f34u, 0x000500c2u, 0x00000006u, 0x00003f3bu, 0x00003f34u, 0x0000025eu, 0x0003003eu, 0x00003f37u, 0x00003f3bu, 0x000500c7u, 0x00000006u, 0x00003f3du, 0x00003f34u, 0x000006c2u, 0x0003003eu, 0x00003f38u, 0x00003f3du, 0x0004007cu, 0x00000008u, 0x00003f3fu, 0x00003f3bu, 0x0004007cu, 0x00000008u, 0x00003f45u, 0x00003f3du, 0x00070050u, 0x00000009u, 0x00003f46u, 0x00003f3fu, 0x00003f3fu, 0x00003f3fu, 0x00003f45u, 0x0003003eu, 0x00003f39u, 0x00003f46u, 0x0003003eu, 0x00003f16u, 0x00003f46u, 0x0003003eu, 0x00002c41u, 0x00003f46u, 0x000300f7u, 0x00002fe3u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002fe4u, 0x00002fe3u, 0x000200f8u, 0x00002fe4u, 0x00050050u, 0x0000005fu, 0x00002fe7u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002fe8u, 0x00002fe7u, 0x0003003eu, 0x00006b97u, 0x00002bf6u, 0x0003003eu, 0x00006b98u, 0x00002bf9u, 0x0003003eu, 0x00002d17u, 0x000020eau, 0x0003003eu, 0x00002d18u, 0x00002fe8u, 0x00050041u, 0x00000007u, 0x00003f50u, 0x00002d18u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003f51u, 0x00003f50u, 0x00050084u, 0x00000006u, 0x00003f52u, 0x00002bf9u, 0x00003f51u, 0x00050080u, 0x00000006u, 0x00003f53u, 0x00002bf6u, 0x00003f52u, 0x0003003eu, 0x00003f47u, 0x00003f53u, 0x00050041u, 0x00000007u, 0x00003f54u, 0x00002d18u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003f55u, 0x00003f54u, 0x00050084u, 0x00000006u, 0x00003f56u, 0x00003f55u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003f58u, 0x00003f53u, 0x00003f56u, 0x0003003eu, 0x00003f47u, 0x00003f58u, 0x000500c7u, 0x00000006u, 0x00003f5au, 0x00003f58u, 0x00000e4bu, 0x0003003eu, 0x00003f47u, 0x00003f5au, 0x000500c2u, 0x00000006u, 0x00003f5cu, 0x00003f5au, 0x00000212u, 0x0003003eu, 0x00003f48u, 0x00003f5cu, 0x0004003du, 0x00000006u, 0x00003f5eu, 0x00003f50u, 0x000500c7u, 0x00000006u, 0x00003f5fu, 0x00003f5eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003f60u, 0x00003f5fu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003f62u, 0x00003f5cu, 0x00003f60u, 0x0003003eu, 0x00003f48u, 0x00003f62u, 0x000500c6u, 0x00000006u, 0x00003f64u, 0x00003f62u, 0x00000485u, 0x0003003eu, 0x00003f48u, 0x00003f64u, 0x00080041u, 0x00000270u, 0x00003f67u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003f64u, 0x0004003du, 0x0000022bu, 0x00003f68u, 0x00003f67u, 0x00040071u, 0x00000006u, 0x00003f69u, 0x00003f68u, 0x0003003eu, 0x00003f49u, 0x00003f69u, 0x0003003eu, 0x00003f4au, 0x00003f69u, 0x000500c2u, 0x00000006u, 0x00003f70u, 0x00003f69u, 0x0000025eu, 0x0003003eu, 0x00003f6cu, 0x00003f70u, 0x000500c7u, 0x00000006u, 0x00003f72u, 0x00003f69u, 0x000006c2u, 0x0003003eu, 0x00003f6du, 0x00003f72u, 0x0004007cu, 0x00000008u, 0x00003f74u, 0x00003f70u, 0x0004007cu, 0x00000008u, 0x00003f7au, 0x00003f72u, 0x00070050u, 0x00000009u, 0x00003f7bu, 0x00003f74u, 0x00003f74u, 0x00003f74u, 0x00003f7au, 0x0003003eu, 0x00003f6eu, 0x00003f7bu, 0x0003003eu, 0x00003f4bu, 0x00003f7bu, 0x0003003eu, 0x00002c49u, 0x00003f7bu, 0x00050050u, 0x0000005fu, 0x00002feeu, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002fefu, 0x00002feeu, 0x0003003eu, 0x00006b9bu, 0x00002bf6u, 0x0003003eu, 0x00006b9cu, 0x00002bf9u, 0x0003003eu, 0x00002d1au, 0x000020eau, 0x0003003eu, 0x00002d1bu, 0x00002fefu, 0x00050041u, 0x00000007u, 0x00003f85u, 0x00002d1bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003f86u, 0x00003f85u, 0x00050084u, 0x00000006u, 0x00003f87u, 0x00002bf9u, 0x00003f86u, 0x00050080u, 0x00000006u, 0x00003f88u, 0x00002bf6u, 0x00003f87u, 0x0003003eu, 0x00003f7cu, 0x00003f88u, 0x00050041u, 0x00000007u, 0x00003f89u, 0x00002d1bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003f8au, 0x00003f89u, 0x00050084u, 0x00000006u, 0x00003f8bu, 0x00003f8au, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003f8du, 0x00003f88u, 0x00003f8bu, 0x0003003eu, 0x00003f7cu, 0x00003f8du, 0x000500c7u, 0x00000006u, 0x00003f8fu, 0x00003f8du, 0x00000e4bu, 0x0003003eu, 0x00003f7cu, 0x00003f8fu, 0x000500c2u, 0x00000006u, 0x00003f91u, 0x00003f8fu, 0x00000212u, 0x0003003eu, 0x00003f7du, 0x00003f91u, 0x0004003du, 0x00000006u, 0x00003f93u, 0x00003f85u, 0x000500c7u, 0x00000006u, 0x00003f94u, 0x00003f93u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003f95u, 0x00003f94u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003f97u, 0x00003f91u, 0x00003f95u, 0x0003003eu, 0x00003f7du, 0x00003f97u, 0x000500c6u, 0x00000006u, 0x00003f99u, 0x00003f97u, 0x00000485u, 0x0003003eu, 0x00003f7du, 0x00003f99u, 0x00080041u, 0x00000270u, 0x00003f9cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003f99u, 0x0004003du, 0x0000022bu, 0x00003f9du, 0x00003f9cu, 0x00040071u, 0x00000006u, 0x00003f9eu, 0x00003f9du, 0x0003003eu, 0x00003f7eu, 0x00003f9eu, 0x0003003eu, 0x00003f7fu, 0x00003f9eu, 0x000500c2u, 0x00000006u, 0x00003fa5u, 0x00003f9eu, 0x0000025eu, 0x0003003eu, 0x00003fa1u, 0x00003fa5u, 0x000500c7u, 0x00000006u, 0x00003fa7u, 0x00003f9eu, 0x000006c2u, 0x0003003eu, 0x00003fa2u, 0x00003fa7u, 0x0004007cu, 0x00000008u, 0x00003fa9u, 0x00003fa5u, 0x0004007cu, 0x00000008u, 0x00003fafu, 0x00003fa7u, 0x00070050u, 0x00000009u, 0x00003fb0u, 0x00003fa9u, 0x00003fa9u, 0x00003fa9u, 0x00003fafu, 0x0003003eu, 0x00003fa3u, 0x00003fb0u, 0x0003003eu, 0x00003f80u, 0x00003fb0u, 0x0003003eu, 0x00002c51u, 0x00003fb0u, 0x000200f9u, 0x00002fe3u, 0x000200f8u, 0x00002fe3u, 0x000700f5u, 0x00000009u, 0x000083d3u, 0x0000837eu, 0x00002f9bu, 0x00003fb0u, 0x00002fe4u, 0x000700f5u, 0x00000009u, 0x000082dbu, 0x00008282u, 0x00002f9bu, 0x00003f7bu, 0x00002fe4u, 0x000300f7u, 0x00002ff4u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002ff5u, 0x00002ff4u, 0x000200f8u, 0x00002ff5u, 0x00050050u, 0x0000005fu, 0x00002ff8u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002ff9u, 0x00002ff8u, 0x0003003eu, 0x00006b9fu, 0x00002bf6u, 0x0003003eu, 0x00006ba0u, 0x00002bf9u, 0x0003003eu, 0x00002d1du, 0x000020eau, 0x0003003eu, 0x00002d1eu, 0x00002ff9u, 0x00050041u, 0x00000007u, 0x00003fbau, 0x00002d1eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003fbbu, 0x00003fbau, 0x00050084u, 0x00000006u, 0x00003fbcu, 0x00002bf9u, 0x00003fbbu, 0x00050080u, 0x00000006u, 0x00003fbdu, 0x00002bf6u, 0x00003fbcu, 0x0003003eu, 0x00003fb1u, 0x00003fbdu, 0x00050041u, 0x00000007u, 0x00003fbeu, 0x00002d1eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003fbfu, 0x00003fbeu, 0x00050084u, 0x00000006u, 0x00003fc0u, 0x00003fbfu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003fc2u, 0x00003fbdu, 0x00003fc0u, 0x0003003eu, 0x00003fb1u, 0x00003fc2u, 0x000500c7u, 0x00000006u, 0x00003fc4u, 0x00003fc2u, 0x00000e4bu, 0x0003003eu, 0x00003fb1u, 0x00003fc4u, 0x000500c2u, 0x00000006u, 0x00003fc6u, 0x00003fc4u, 0x00000212u, 0x0003003eu, 0x00003fb2u, 0x00003fc6u, 0x0004003du, 0x00000006u, 0x00003fc8u, 0x00003fbau, 0x000500c7u, 0x00000006u, 0x00003fc9u, 0x00003fc8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003fcau, 0x00003fc9u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003fccu, 0x00003fc6u, 0x00003fcau, 0x0003003eu, 0x00003fb2u, 0x00003fccu, 0x000500c6u, 0x00000006u, 0x00003fceu, 0x00003fccu, 0x00000485u, 0x0003003eu, 0x00003fb2u, 0x00003fceu, 0x00080041u, 0x00000270u, 0x00003fd1u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003fceu, 0x0004003du, 0x0000022bu, 0x00003fd2u, 0x00003fd1u, 0x00040071u, 0x00000006u, 0x00003fd3u, 0x00003fd2u, 0x0003003eu, 0x00003fb3u, 0x00003fd3u, 0x0003003eu, 0x00003fb4u, 0x00003fd3u, 0x000500c2u, 0x00000006u, 0x00003fdau, 0x00003fd3u, 0x0000025eu, 0x0003003eu, 0x00003fd6u, 0x00003fdau, 0x000500c7u, 0x00000006u, 0x00003fdcu, 0x00003fd3u, 0x000006c2u, 0x0003003eu, 0x00003fd7u, 0x00003fdcu, 0x0004007cu, 0x00000008u, 0x00003fdeu, 0x00003fdau, 0x0004007cu, 0x00000008u, 0x00003fe4u, 0x00003fdcu, 0x00070050u, 0x00000009u, 0x00003fe5u, 0x00003fdeu, 0x00003fdeu, 0x00003fdeu, 0x00003fe4u, 0x0003003eu, 0x00003fd8u, 0x00003fe5u, 0x0003003eu, 0x00003fb5u, 0x00003fe5u, 0x0003003eu, 0x00002c59u, 0x00003fe5u, 0x000200f9u, 0x00002ff4u, 0x000200f8u, 0x00002ff4u, 0x000700f5u, 0x00000009u, 0x0000844fu, 0x000083f8u, 0x00002fe3u, 0x00003fe5u, 0x00002ff5u, 0x000200f9u, 0x00002f98u, 0x000200f8u, 0x00002f9au, 0x0004007cu, 0x000000a2u, 0x00002fbeu, 0x00007ef8u, 0x0003003eu, 0x00006b83u, 0x00002bf6u, 0x0003003eu, 0x00006b84u, 0x00002bf9u, 0x0003003eu, 0x00002d08u, 0x000020eau, 0x0003003eu, 0x00002d09u, 0x00002fbeu, 0x00050041u, 0x00000007u, 0x00003e40u, 0x00002d09u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003e41u, 0x00003e40u, 0x00050084u, 0x00000006u, 0x00003e42u, 0x00002bf9u, 0x00003e41u, 0x00050080u, 0x00000006u, 0x00003e43u, 0x00002bf6u, 0x00003e42u, 0x0003003eu, 0x00003e36u, 0x00003e43u, 0x00050041u, 0x00000007u, 0x00003e44u, 0x00002d09u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003e45u, 0x00003e44u, 0x00050080u, 0x00000006u, 0x00003e47u, 0x00003e43u, 0x00003e45u, 0x0003003eu, 0x00003e36u, 0x00003e47u, 0x000500c7u, 0x00000006u, 0x00003e49u, 0x00003e47u, 0x00000e4bu, 0x0003003eu, 0x00003e36u, 0x00003e49u, 0x0003003eu, 0x00003e37u, 0x00003e49u, 0x0004003du, 0x00000006u, 0x00003e4cu, 0x00003e40u, 0x000500c7u, 0x00000006u, 0x00003e4du, 0x00003e4cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003e4eu, 0x00003e4du, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003e50u, 0x00003e49u, 0x00003e4eu, 0x0003003eu, 0x00003e37u, 0x00003e50u, 0x000500c6u, 0x00000006u, 0x00003e52u, 0x00003e50u, 0x0000048bu, 0x0003003eu, 0x00003e37u, 0x00003e52u, 0x00080041u, 0x00000277u, 0x00003e55u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003e52u, 0x0004003du, 0x00000229u, 0x00003e56u, 0x00003e55u, 0x00040071u, 0x00000006u, 0x00003e57u, 0x00003e56u, 0x0003003eu, 0x00003e38u, 0x00003e57u, 0x000500c2u, 0x00000006u, 0x00003e59u, 0x00003e57u, 0x0000021bu, 0x0003003eu, 0x00003e39u, 0x00003e59u, 0x000500c7u, 0x00000006u, 0x00003e5bu, 0x00003e57u, 0x00000e6eu, 0x0003003eu, 0x00003e3au, 0x00003e5bu, 0x000500c4u, 0x00000006u, 0x00003e5du, 0x00003e5bu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003e5fu, 0x00003e5bu, 0x00003e5du, 0x0003003eu, 0x00003e3au, 0x00003e5fu, 0x000500c4u, 0x00000006u, 0x00003e61u, 0x00003e59u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003e63u, 0x00003e59u, 0x00003e61u, 0x0003003eu, 0x00003e39u, 0x00003e63u, 0x0004007cu, 0x00000008u, 0x00003e65u, 0x00003e63u, 0x0004007cu, 0x00000008u, 0x00003e6bu, 0x00003e5fu, 0x00070050u, 0x00000009u, 0x00003e6cu, 0x00003e65u, 0x00003e65u, 0x00003e65u, 0x00003e6bu, 0x0003003eu, 0x00003e3bu, 0x00003e6cu, 0x0003003eu, 0x00002c41u, 0x00003e6cu, 0x000300f7u, 0x00002fc3u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002fc4u, 0x00002fc3u, 0x000200f8u, 0x00002fc4u, 0x00050050u, 0x0000005fu, 0x00002fc7u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002fc8u, 0x00002fc7u, 0x0003003eu, 0x00006b87u, 0x00002bf6u, 0x0003003eu, 0x00006b88u, 0x00002bf9u, 0x0003003eu, 0x00002d0bu, 0x000020eau, 0x0003003eu, 0x00002d0cu, 0x00002fc8u, 0x00050041u, 0x00000007u, 0x00003e77u, 0x00002d0cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003e78u, 0x00003e77u, 0x00050084u, 0x00000006u, 0x00003e79u, 0x00002bf9u, 0x00003e78u, 0x00050080u, 0x00000006u, 0x00003e7au, 0x00002bf6u, 0x00003e79u, 0x0003003eu, 0x00003e6du, 0x00003e7au, 0x00050041u, 0x00000007u, 0x00003e7bu, 0x00002d0cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003e7cu, 0x00003e7bu, 0x00050080u, 0x00000006u, 0x00003e7eu, 0x00003e7au, 0x00003e7cu, 0x0003003eu, 0x00003e6du, 0x00003e7eu, 0x000500c7u, 0x00000006u, 0x00003e80u, 0x00003e7eu, 0x00000e4bu, 0x0003003eu, 0x00003e6du, 0x00003e80u, 0x0003003eu, 0x00003e6eu, 0x00003e80u, 0x0004003du, 0x00000006u, 0x00003e83u, 0x00003e77u, 0x000500c7u, 0x00000006u, 0x00003e84u, 0x00003e83u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003e85u, 0x00003e84u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003e87u, 0x00003e80u, 0x00003e85u, 0x0003003eu, 0x00003e6eu, 0x00003e87u, 0x000500c6u, 0x00000006u, 0x00003e89u, 0x00003e87u, 0x0000048bu, 0x0003003eu, 0x00003e6eu, 0x00003e89u, 0x00080041u, 0x00000277u, 0x00003e8cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003e89u, 0x0004003du, 0x00000229u, 0x00003e8du, 0x00003e8cu, 0x00040071u, 0x00000006u, 0x00003e8eu, 0x00003e8du, 0x0003003eu, 0x00003e6fu, 0x00003e8eu, 0x000500c2u, 0x00000006u, 0x00003e90u, 0x00003e8eu, 0x0000021bu, 0x0003003eu, 0x00003e70u, 0x00003e90u, 0x000500c7u, 0x00000006u, 0x00003e92u, 0x00003e8eu, 0x00000e6eu, 0x0003003eu, 0x00003e71u, 0x00003e92u, 0x000500c4u, 0x00000006u, 0x00003e94u, 0x00003e92u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003e96u, 0x00003e92u, 0x00003e94u, 0x0003003eu, 0x00003e71u, 0x00003e96u, 0x000500c4u, 0x00000006u, 0x00003e98u, 0x00003e90u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003e9au, 0x00003e90u, 0x00003e98u, 0x0003003eu, 0x00003e70u, 0x00003e9au, 0x0004007cu, 0x00000008u, 0x00003e9cu, 0x00003e9au, 0x0004007cu, 0x00000008u, 0x00003ea2u, 0x00003e96u, 0x00070050u, 0x00000009u, 0x00003ea3u, 0x00003e9cu, 0x00003e9cu, 0x00003e9cu, 0x00003ea2u, 0x0003003eu, 0x00003e72u, 0x00003ea3u, 0x0003003eu, 0x00002c49u, 0x00003ea3u, 0x00050050u, 0x0000005fu, 0x00002fceu, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002fcfu, 0x00002fceu, 0x0003003eu, 0x00006b8bu, 0x00002bf6u, 0x0003003eu, 0x00006b8cu, 0x00002bf9u, 0x0003003eu, 0x00002d0eu, 0x000020eau, 0x0003003eu, 0x00002d0fu, 0x00002fcfu, 0x00050041u, 0x00000007u, 0x00003eaeu, 0x00002d0fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003eafu, 0x00003eaeu, 0x00050084u, 0x00000006u, 0x00003eb0u, 0x00002bf9u, 0x00003eafu, 0x00050080u, 0x00000006u, 0x00003eb1u, 0x00002bf6u, 0x00003eb0u, 0x0003003eu, 0x00003ea4u, 0x00003eb1u, 0x00050041u, 0x00000007u, 0x00003eb2u, 0x00002d0fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003eb3u, 0x00003eb2u, 0x00050080u, 0x00000006u, 0x00003eb5u, 0x00003eb1u, 0x00003eb3u, 0x0003003eu, 0x00003ea4u, 0x00003eb5u, 0x000500c7u, 0x00000006u, 0x00003eb7u, 0x00003eb5u, 0x00000e4bu, 0x0003003eu, 0x00003ea4u, 0x00003eb7u, 0x0003003eu, 0x00003ea5u, 0x00003eb7u, 0x0004003du, 0x00000006u, 0x00003ebau, 0x00003eaeu, 0x000500c7u, 0x00000006u, 0x00003ebbu, 0x00003ebau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ebcu, 0x00003ebbu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003ebeu, 0x00003eb7u, 0x00003ebcu, 0x0003003eu, 0x00003ea5u, 0x00003ebeu, 0x000500c6u, 0x00000006u, 0x00003ec0u, 0x00003ebeu, 0x0000048bu, 0x0003003eu, 0x00003ea5u, 0x00003ec0u, 0x00080041u, 0x00000277u, 0x00003ec3u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003ec0u, 0x0004003du, 0x00000229u, 0x00003ec4u, 0x00003ec3u, 0x00040071u, 0x00000006u, 0x00003ec5u, 0x00003ec4u, 0x0003003eu, 0x00003ea6u, 0x00003ec5u, 0x000500c2u, 0x00000006u, 0x00003ec7u, 0x00003ec5u, 0x0000021bu, 0x0003003eu, 0x00003ea7u, 0x00003ec7u, 0x000500c7u, 0x00000006u, 0x00003ec9u, 0x00003ec5u, 0x00000e6eu, 0x0003003eu, 0x00003ea8u, 0x00003ec9u, 0x000500c4u, 0x00000006u, 0x00003ecbu, 0x00003ec9u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003ecdu, 0x00003ec9u, 0x00003ecbu, 0x0003003eu, 0x00003ea8u, 0x00003ecdu, 0x000500c4u, 0x00000006u, 0x00003ecfu, 0x00003ec7u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003ed1u, 0x00003ec7u, 0x00003ecfu, 0x0003003eu, 0x00003ea7u, 0x00003ed1u, 0x0004007cu, 0x00000008u, 0x00003ed3u, 0x00003ed1u, 0x0004007cu, 0x00000008u, 0x00003ed9u, 0x00003ecdu, 0x00070050u, 0x00000009u, 0x00003edau, 0x00003ed3u, 0x00003ed3u, 0x00003ed3u, 0x00003ed9u, 0x0003003eu, 0x00003ea9u, 0x00003edau, 0x0003003eu, 0x00002c51u, 0x00003edau, 0x000200f9u, 0x00002fc3u, 0x000200f8u, 0x00002fc3u, 0x000700f5u, 0x00000009u, 0x000083d1u, 0x0000837eu, 0x00002f9au, 0x00003edau, 0x00002fc4u, 0x000700f5u, 0x00000009u, 0x000082d9u, 0x00008282u, 0x00002f9au, 0x00003ea3u, 0x00002fc4u, 0x000300f7u, 0x00002fd4u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002fd5u, 0x00002fd4u, 0x000200f8u, 0x00002fd5u, 0x00050050u, 0x0000005fu, 0x00002fd8u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002fd9u, 0x00002fd8u, 0x0003003eu, 0x00006b8fu, 0x00002bf6u, 0x0003003eu, 0x00006b90u, 0x00002bf9u, 0x0003003eu, 0x00002d11u, 0x000020eau, 0x0003003eu, 0x00002d12u, 0x00002fd9u, 0x00050041u, 0x00000007u, 0x00003ee5u, 0x00002d12u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003ee6u, 0x00003ee5u, 0x00050084u, 0x00000006u, 0x00003ee7u, 0x00002bf9u, 0x00003ee6u, 0x00050080u, 0x00000006u, 0x00003ee8u, 0x00002bf6u, 0x00003ee7u, 0x0003003eu, 0x00003edbu, 0x00003ee8u, 0x00050041u, 0x00000007u, 0x00003ee9u, 0x00002d12u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003eeau, 0x00003ee9u, 0x00050080u, 0x00000006u, 0x00003eecu, 0x00003ee8u, 0x00003eeau, 0x0003003eu, 0x00003edbu, 0x00003eecu, 0x000500c7u, 0x00000006u, 0x00003eeeu, 0x00003eecu, 0x00000e4bu, 0x0003003eu, 0x00003edbu, 0x00003eeeu, 0x0003003eu, 0x00003edcu, 0x00003eeeu, 0x0004003du, 0x00000006u, 0x00003ef1u, 0x00003ee5u, 0x000500c7u, 0x00000006u, 0x00003ef2u, 0x00003ef1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ef3u, 0x00003ef2u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003ef5u, 0x00003eeeu, 0x00003ef3u, 0x0003003eu, 0x00003edcu, 0x00003ef5u, 0x000500c6u, 0x00000006u, 0x00003ef7u, 0x00003ef5u, 0x0000048bu, 0x0003003eu, 0x00003edcu, 0x00003ef7u, 0x00080041u, 0x00000277u, 0x00003efau, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003ef7u, 0x0004003du, 0x00000229u, 0x00003efbu, 0x00003efau, 0x00040071u, 0x00000006u, 0x00003efcu, 0x00003efbu, 0x0003003eu, 0x00003eddu, 0x00003efcu, 0x000500c2u, 0x00000006u, 0x00003efeu, 0x00003efcu, 0x0000021bu, 0x0003003eu, 0x00003edeu, 0x00003efeu, 0x000500c7u, 0x00000006u, 0x00003f00u, 0x00003efcu, 0x00000e6eu, 0x0003003eu, 0x00003edfu, 0x00003f00u, 0x000500c4u, 0x00000006u, 0x00003f02u, 0x00003f00u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003f04u, 0x00003f00u, 0x00003f02u, 0x0003003eu, 0x00003edfu, 0x00003f04u, 0x000500c4u, 0x00000006u, 0x00003f06u, 0x00003efeu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003f08u, 0x00003efeu, 0x00003f06u, 0x0003003eu, 0x00003edeu, 0x00003f08u, 0x0004007cu, 0x00000008u, 0x00003f0au, 0x00003f08u, 0x0004007cu, 0x00000008u, 0x00003f10u, 0x00003f04u, 0x00070050u, 0x00000009u, 0x00003f11u, 0x00003f0au, 0x00003f0au, 0x00003f0au, 0x00003f10u, 0x0003003eu, 0x00003ee0u, 0x00003f11u, 0x0003003eu, 0x00002c59u, 0x00003f11u, 0x000200f9u, 0x00002fd4u, 0x000200f8u, 0x00002fd4u, 0x000700f5u, 0x00000009u, 0x0000844du, 0x000083f8u, 0x00002fc3u, 0x00003f11u, 0x00002fd5u, 0x000200f9u, 0x00002f98u, 0x000200f8u, 0x00002f99u, 0x0004007cu, 0x000000a2u, 0x00002f9eu, 0x00007ef8u, 0x0003003eu, 0x00006b73u, 0x00002bf6u, 0x0003003eu, 0x00006b74u, 0x00002bf9u, 0x0003003eu, 0x00002cfcu, 0x000020eau, 0x0003003eu, 0x00002cfdu, 0x00002f9eu, 0x00050041u, 0x00000007u, 0x00003d3cu, 0x00002cfdu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d3du, 0x00003d3cu, 0x00050084u, 0x00000006u, 0x00003d3eu, 0x00002bf9u, 0x00003d3du, 0x00050080u, 0x00000006u, 0x00003d3fu, 0x00002bf6u, 0x00003d3eu, 0x0003003eu, 0x00003d32u, 0x00003d3fu, 0x00050041u, 0x00000007u, 0x00003d40u, 0x00002cfdu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d41u, 0x00003d40u, 0x000500c2u, 0x00000006u, 0x00003d42u, 0x00003d41u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003d44u, 0x00003d3fu, 0x00003d42u, 0x0003003eu, 0x00003d32u, 0x00003d44u, 0x000500c7u, 0x00000006u, 0x00003d46u, 0x00003d44u, 0x00000e4bu, 0x0003003eu, 0x00003d32u, 0x00003d46u, 0x0004003du, 0x00000006u, 0x00003d48u, 0x00003d40u, 0x000400c8u, 0x00000006u, 0x00003d49u, 0x00003d48u, 0x000500c7u, 0x00000006u, 0x00003d4au, 0x00003d49u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003d4bu, 0x00003d4au, 0x00000701u, 0x0003003eu, 0x00003d33u, 0x00003d4bu, 0x0003003eu, 0x00003d34u, 0x00003d46u, 0x0004003du, 0x00000006u, 0x00003d4eu, 0x00003d3cu, 0x000500c7u, 0x00000006u, 0x00003d4fu, 0x00003d4eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d50u, 0x00003d4fu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d52u, 0x00003d46u, 0x00003d50u, 0x0003003eu, 0x00003d34u, 0x00003d52u, 0x000500c6u, 0x00000006u, 0x00003d54u, 0x00003d52u, 0x0000048bu, 0x0003003eu, 0x00003d34u, 0x00003d54u, 0x00080041u, 0x00000277u, 0x00003d57u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003d54u, 0x0004003du, 0x00000229u, 0x00003d58u, 0x00003d57u, 0x00040071u, 0x00000006u, 0x00003d59u, 0x00003d58u, 0x0003003eu, 0x00003d35u, 0x00003d59u, 0x000500c2u, 0x00000006u, 0x00003d5cu, 0x00003d59u, 0x00003d4bu, 0x000500c7u, 0x00000006u, 0x00003d5du, 0x00003d5cu, 0x00000e6eu, 0x0003003eu, 0x00003d35u, 0x00003d5du, 0x000500c7u, 0x00000006u, 0x00003d5fu, 0x00003d5du, 0x00000ea5u, 0x0003003eu, 0x00003d36u, 0x00003d5fu, 0x000500c4u, 0x00000006u, 0x00003d61u, 0x00003d5fu, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003d63u, 0x00003d5fu, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003d64u, 0x00003d61u, 0x00003d63u, 0x000500c2u, 0x00000006u, 0x00003d66u, 0x00003d5fu, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003d67u, 0x00003d64u, 0x00003d66u, 0x0003003eu, 0x00003d36u, 0x00003d67u, 0x0004007cu, 0x00000008u, 0x00003d69u, 0x00003d67u, 0x000500c7u, 0x00000006u, 0x00003d6fu, 0x00003d5du, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003d70u, 0x00003d6fu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003d71u, 0x00003d70u, 0x00070050u, 0x00000009u, 0x00003d72u, 0x00003d69u, 0x00003d69u, 0x00003d69u, 0x00003d71u, 0x0003003eu, 0x00003d37u, 0x00003d72u, 0x0003003eu, 0x00002c41u, 0x00003d72u, 0x000300f7u, 0x00002fa3u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002fa4u, 0x00002fa3u, 0x000200f8u, 0x00002fa4u, 0x00050050u, 0x0000005fu, 0x00002fa7u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002fa8u, 0x00002fa7u, 0x0003003eu, 0x00006b77u, 0x00002bf6u, 0x0003003eu, 0x00006b78u, 0x00002bf9u, 0x0003003eu, 0x00002cffu, 0x000020eau, 0x0003003eu, 0x00002d00u, 0x00002fa8u, 0x00050041u, 0x00000007u, 0x00003d7du, 0x00002d00u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d7eu, 0x00003d7du, 0x00050084u, 0x00000006u, 0x00003d7fu, 0x00002bf9u, 0x00003d7eu, 0x00050080u, 0x00000006u, 0x00003d80u, 0x00002bf6u, 0x00003d7fu, 0x0003003eu, 0x00003d73u, 0x00003d80u, 0x00050041u, 0x00000007u, 0x00003d81u, 0x00002d00u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d82u, 0x00003d81u, 0x000500c2u, 0x00000006u, 0x00003d83u, 0x00003d82u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003d85u, 0x00003d80u, 0x00003d83u, 0x0003003eu, 0x00003d73u, 0x00003d85u, 0x000500c7u, 0x00000006u, 0x00003d87u, 0x00003d85u, 0x00000e4bu, 0x0003003eu, 0x00003d73u, 0x00003d87u, 0x0004003du, 0x00000006u, 0x00003d89u, 0x00003d81u, 0x000400c8u, 0x00000006u, 0x00003d8au, 0x00003d89u, 0x000500c7u, 0x00000006u, 0x00003d8bu, 0x00003d8au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003d8cu, 0x00003d8bu, 0x00000701u, 0x0003003eu, 0x00003d74u, 0x00003d8cu, 0x0003003eu, 0x00003d75u, 0x00003d87u, 0x0004003du, 0x00000006u, 0x00003d8fu, 0x00003d7du, 0x000500c7u, 0x00000006u, 0x00003d90u, 0x00003d8fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d91u, 0x00003d90u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d93u, 0x00003d87u, 0x00003d91u, 0x0003003eu, 0x00003d75u, 0x00003d93u, 0x000500c6u, 0x00000006u, 0x00003d95u, 0x00003d93u, 0x0000048bu, 0x0003003eu, 0x00003d75u, 0x00003d95u, 0x00080041u, 0x00000277u, 0x00003d98u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003d95u, 0x0004003du, 0x00000229u, 0x00003d99u, 0x00003d98u, 0x00040071u, 0x00000006u, 0x00003d9au, 0x00003d99u, 0x0003003eu, 0x00003d76u, 0x00003d9au, 0x000500c2u, 0x00000006u, 0x00003d9du, 0x00003d9au, 0x00003d8cu, 0x000500c7u, 0x00000006u, 0x00003d9eu, 0x00003d9du, 0x00000e6eu, 0x0003003eu, 0x00003d76u, 0x00003d9eu, 0x000500c7u, 0x00000006u, 0x00003da0u, 0x00003d9eu, 0x00000ea5u, 0x0003003eu, 0x00003d77u, 0x00003da0u, 0x000500c4u, 0x00000006u, 0x00003da2u, 0x00003da0u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003da4u, 0x00003da0u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003da5u, 0x00003da2u, 0x00003da4u, 0x000500c2u, 0x00000006u, 0x00003da7u, 0x00003da0u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003da8u, 0x00003da5u, 0x00003da7u, 0x0003003eu, 0x00003d77u, 0x00003da8u, 0x0004007cu, 0x00000008u, 0x00003daau, 0x00003da8u, 0x000500c7u, 0x00000006u, 0x00003db0u, 0x00003d9eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003db1u, 0x00003db0u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003db2u, 0x00003db1u, 0x00070050u, 0x00000009u, 0x00003db3u, 0x00003daau, 0x00003daau, 0x00003daau, 0x00003db2u, 0x0003003eu, 0x00003d78u, 0x00003db3u, 0x0003003eu, 0x00002c49u, 0x00003db3u, 0x00050050u, 0x0000005fu, 0x00002faeu, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002fafu, 0x00002faeu, 0x0003003eu, 0x00006b7bu, 0x00002bf6u, 0x0003003eu, 0x00006b7cu, 0x00002bf9u, 0x0003003eu, 0x00002d02u, 0x000020eau, 0x0003003eu, 0x00002d03u, 0x00002fafu, 0x00050041u, 0x00000007u, 0x00003dbeu, 0x00002d03u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003dbfu, 0x00003dbeu, 0x00050084u, 0x00000006u, 0x00003dc0u, 0x00002bf9u, 0x00003dbfu, 0x00050080u, 0x00000006u, 0x00003dc1u, 0x00002bf6u, 0x00003dc0u, 0x0003003eu, 0x00003db4u, 0x00003dc1u, 0x00050041u, 0x00000007u, 0x00003dc2u, 0x00002d03u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003dc3u, 0x00003dc2u, 0x000500c2u, 0x00000006u, 0x00003dc4u, 0x00003dc3u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003dc6u, 0x00003dc1u, 0x00003dc4u, 0x0003003eu, 0x00003db4u, 0x00003dc6u, 0x000500c7u, 0x00000006u, 0x00003dc8u, 0x00003dc6u, 0x00000e4bu, 0x0003003eu, 0x00003db4u, 0x00003dc8u, 0x0004003du, 0x00000006u, 0x00003dcau, 0x00003dc2u, 0x000400c8u, 0x00000006u, 0x00003dcbu, 0x00003dcau, 0x000500c7u, 0x00000006u, 0x00003dccu, 0x00003dcbu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003dcdu, 0x00003dccu, 0x00000701u, 0x0003003eu, 0x00003db5u, 0x00003dcdu, 0x0003003eu, 0x00003db6u, 0x00003dc8u, 0x0004003du, 0x00000006u, 0x00003dd0u, 0x00003dbeu, 0x000500c7u, 0x00000006u, 0x00003dd1u, 0x00003dd0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003dd2u, 0x00003dd1u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003dd4u, 0x00003dc8u, 0x00003dd2u, 0x0003003eu, 0x00003db6u, 0x00003dd4u, 0x000500c6u, 0x00000006u, 0x00003dd6u, 0x00003dd4u, 0x0000048bu, 0x0003003eu, 0x00003db6u, 0x00003dd6u, 0x00080041u, 0x00000277u, 0x00003dd9u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003dd6u, 0x0004003du, 0x00000229u, 0x00003ddau, 0x00003dd9u, 0x00040071u, 0x00000006u, 0x00003ddbu, 0x00003ddau, 0x0003003eu, 0x00003db7u, 0x00003ddbu, 0x000500c2u, 0x00000006u, 0x00003ddeu, 0x00003ddbu, 0x00003dcdu, 0x000500c7u, 0x00000006u, 0x00003ddfu, 0x00003ddeu, 0x00000e6eu, 0x0003003eu, 0x00003db7u, 0x00003ddfu, 0x000500c7u, 0x00000006u, 0x00003de1u, 0x00003ddfu, 0x00000ea5u, 0x0003003eu, 0x00003db8u, 0x00003de1u, 0x000500c4u, 0x00000006u, 0x00003de3u, 0x00003de1u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003de5u, 0x00003de1u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003de6u, 0x00003de3u, 0x00003de5u, 0x000500c2u, 0x00000006u, 0x00003de8u, 0x00003de1u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003de9u, 0x00003de6u, 0x00003de8u, 0x0003003eu, 0x00003db8u, 0x00003de9u, 0x0004007cu, 0x00000008u, 0x00003debu, 0x00003de9u, 0x000500c7u, 0x00000006u, 0x00003df1u, 0x00003ddfu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003df2u, 0x00003df1u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003df3u, 0x00003df2u, 0x00070050u, 0x00000009u, 0x00003df4u, 0x00003debu, 0x00003debu, 0x00003debu, 0x00003df3u, 0x0003003eu, 0x00003db9u, 0x00003df4u, 0x0003003eu, 0x00002c51u, 0x00003df4u, 0x000200f9u, 0x00002fa3u, 0x000200f8u, 0x00002fa3u, 0x000700f5u, 0x00000009u, 0x000083cfu, 0x0000837eu, 0x00002f99u, 0x00003df4u, 0x00002fa4u, 0x000700f5u, 0x00000009u, 0x000082d7u, 0x00008282u, 0x00002f99u, 0x00003db3u, 0x00002fa4u, 0x000300f7u, 0x00002fb4u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002fb5u, 0x00002fb4u, 0x000200f8u, 0x00002fb5u, 0x00050050u, 0x0000005fu, 0x00002fb8u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002fb9u, 0x00002fb8u, 0x0003003eu, 0x00006b7fu, 0x00002bf6u, 0x0003003eu, 0x00006b80u, 0x00002bf9u, 0x0003003eu, 0x00002d05u, 0x000020eau, 0x0003003eu, 0x00002d06u, 0x00002fb9u, 0x00050041u, 0x00000007u, 0x00003dffu, 0x00002d06u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003e00u, 0x00003dffu, 0x00050084u, 0x00000006u, 0x00003e01u, 0x00002bf9u, 0x00003e00u, 0x00050080u, 0x00000006u, 0x00003e02u, 0x00002bf6u, 0x00003e01u, 0x0003003eu, 0x00003df5u, 0x00003e02u, 0x00050041u, 0x00000007u, 0x00003e03u, 0x00002d06u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003e04u, 0x00003e03u, 0x000500c2u, 0x00000006u, 0x00003e05u, 0x00003e04u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003e07u, 0x00003e02u, 0x00003e05u, 0x0003003eu, 0x00003df5u, 0x00003e07u, 0x000500c7u, 0x00000006u, 0x00003e09u, 0x00003e07u, 0x00000e4bu, 0x0003003eu, 0x00003df5u, 0x00003e09u, 0x0004003du, 0x00000006u, 0x00003e0bu, 0x00003e03u, 0x000400c8u, 0x00000006u, 0x00003e0cu, 0x00003e0bu, 0x000500c7u, 0x00000006u, 0x00003e0du, 0x00003e0cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003e0eu, 0x00003e0du, 0x00000701u, 0x0003003eu, 0x00003df6u, 0x00003e0eu, 0x0003003eu, 0x00003df7u, 0x00003e09u, 0x0004003du, 0x00000006u, 0x00003e11u, 0x00003dffu, 0x000500c7u, 0x00000006u, 0x00003e12u, 0x00003e11u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003e13u, 0x00003e12u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003e15u, 0x00003e09u, 0x00003e13u, 0x0003003eu, 0x00003df7u, 0x00003e15u, 0x000500c6u, 0x00000006u, 0x00003e17u, 0x00003e15u, 0x0000048bu, 0x0003003eu, 0x00003df7u, 0x00003e17u, 0x00080041u, 0x00000277u, 0x00003e1au, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003e17u, 0x0004003du, 0x00000229u, 0x00003e1bu, 0x00003e1au, 0x00040071u, 0x00000006u, 0x00003e1cu, 0x00003e1bu, 0x0003003eu, 0x00003df8u, 0x00003e1cu, 0x000500c2u, 0x00000006u, 0x00003e1fu, 0x00003e1cu, 0x00003e0eu, 0x000500c7u, 0x00000006u, 0x00003e20u, 0x00003e1fu, 0x00000e6eu, 0x0003003eu, 0x00003df8u, 0x00003e20u, 0x000500c7u, 0x00000006u, 0x00003e22u, 0x00003e20u, 0x00000ea5u, 0x0003003eu, 0x00003df9u, 0x00003e22u, 0x000500c4u, 0x00000006u, 0x00003e24u, 0x00003e22u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003e26u, 0x00003e22u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003e27u, 0x00003e24u, 0x00003e26u, 0x000500c2u, 0x00000006u, 0x00003e29u, 0x00003e22u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003e2au, 0x00003e27u, 0x00003e29u, 0x0003003eu, 0x00003df9u, 0x00003e2au, 0x0004007cu, 0x00000008u, 0x00003e2cu, 0x00003e2au, 0x000500c7u, 0x00000006u, 0x00003e32u, 0x00003e20u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003e33u, 0x00003e32u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003e34u, 0x00003e33u, 0x00070050u, 0x00000009u, 0x00003e35u, 0x00003e2cu, 0x00003e2cu, 0x00003e2cu, 0x00003e34u, 0x0003003eu, 0x00003dfau, 0x00003e35u, 0x0003003eu, 0x00002c59u, 0x00003e35u, 0x000200f9u, 0x00002fb4u, 0x000200f8u, 0x00002fb4u, 0x000700f5u, 0x00000009u, 0x0000844bu, 0x000083f8u, 0x00002fa3u, 0x00003e35u, 0x00002fb5u, 0x000200f9u, 0x00002f98u, 0x000200f8u, 0x00002f98u, 0x000d00f5u, 0x00000009u, 0x0000844au, 0x000083f8u, 0x00002e6eu, 0x0000844bu, 0x00002fb4u, 0x0000844du, 0x00002fd4u, 0x0000844fu, 0x00002ff4u, 0x00008451u, 0x00003014u, 0x000d00f5u, 0x00000009u, 0x000083cdu, 0x0000837eu, 0x00002e6eu, 0x000083cfu, 0x00002fb4u, 0x000083d1u, 0x00002fd4u, 0x000083d3u, 0x00002ff4u, 0x000083d5u, 0x00003014u, 0x000d00f5u, 0x00000009u, 0x00008352u, 0x00008301u, 0x00002e6eu, 0x00003d72u, 0x00002fb4u, 0x00003e6cu, 0x00002fd4u, 0x00003f46u, 0x00002ff4u, 0x0000400fu, 0x00003014u, 0x000d00f5u, 0x00000009u, 0x000082d5u, 0x00008282u, 0x00002e6eu, 0x000082d7u, 0x00002fb4u, 0x000082d9u, 0x00002fd4u, 0x000082dbu, 0x00002ff4u, 0x000082ddu, 0x00003014u, 0x000200f9u, 0x00002e6au, 0x000200f8u, 0x00002e6du, 0x000300f7u, 0x00002f26u, 0x00000000u, 0x000700fbu, 0x00002c03u, 0x00002f27u, 0x00000000u, 0x00002f28u, 0x00000001u, 0x00002f29u, 0x000200f8u, 0x00002f29u, 0x0004007cu, 0x000000a2u, 0x00002f77u, 0x00007ef8u, 0x0003003eu, 0x00006b53u, 0x00002bf6u, 0x0003003eu, 0x00006b54u, 0x00002bf9u, 0x0003003eu, 0x00002ce4u, 0x000020eau, 0x0003003eu, 0x00002ce5u, 0x00002f77u, 0x00050041u, 0x00000007u, 0x00003caeu, 0x00002ce5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003cafu, 0x00003caeu, 0x00050084u, 0x00000006u, 0x00003cb0u, 0x00002bf9u, 0x00003cafu, 0x00050080u, 0x00000006u, 0x00003cb1u, 0x00002bf6u, 0x00003cb0u, 0x0003003eu, 0x00003ca6u, 0x00003cb1u, 0x00050041u, 0x00000007u, 0x00003cb2u, 0x00002ce5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003cb3u, 0x00003cb2u, 0x00050080u, 0x00000006u, 0x00003cb5u, 0x00003cb1u, 0x00003cb3u, 0x0003003eu, 0x00003ca6u, 0x00003cb5u, 0x000500c7u, 0x00000006u, 0x00003cb7u, 0x00003cb5u, 0x00000e4bu, 0x0003003eu, 0x00003ca6u, 0x00003cb7u, 0x0003003eu, 0x00003ca7u, 0x00003cb7u, 0x0004003du, 0x00000006u, 0x00003cbau, 0x00003caeu, 0x000500c7u, 0x00000006u, 0x00003cbbu, 0x00003cbau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003cbcu, 0x00003cbbu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003cbeu, 0x00003cb7u, 0x00003cbcu, 0x0003003eu, 0x00003ca7u, 0x00003cbeu, 0x000500c6u, 0x00000006u, 0x00003cc0u, 0x00003cbeu, 0x0000048bu, 0x0003003eu, 0x00003ca7u, 0x00003cc0u, 0x00080041u, 0x00000277u, 0x00003cc3u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003cc0u, 0x0004003du, 0x00000229u, 0x00003cc4u, 0x00003cc3u, 0x00040071u, 0x00000006u, 0x00003cc5u, 0x00003cc4u, 0x0003003eu, 0x00003ca8u, 0x00003cc5u, 0x0004007cu, 0x00000008u, 0x00003cc7u, 0x00003cc5u, 0x00070050u, 0x00000009u, 0x00003cc8u, 0x00003cc7u, 0x00003cc7u, 0x00003cc7u, 0x00003cc7u, 0x0003003eu, 0x00003ca9u, 0x00003cc8u, 0x0003003eu, 0x00002c41u, 0x00003cc8u, 0x000300f7u, 0x00002f7cu, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002f7du, 0x00002f7cu, 0x000200f8u, 0x00002f7du, 0x00050050u, 0x0000005fu, 0x00002f80u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002f81u, 0x00002f80u, 0x0003003eu, 0x00006b57u, 0x00002bf6u, 0x0003003eu, 0x00006b58u, 0x00002bf9u, 0x0003003eu, 0x00002ce7u, 0x000020eau, 0x0003003eu, 0x00002ce8u, 0x00002f81u, 0x00050041u, 0x00000007u, 0x00003cd1u, 0x00002ce8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003cd2u, 0x00003cd1u, 0x00050084u, 0x00000006u, 0x00003cd3u, 0x00002bf9u, 0x00003cd2u, 0x00050080u, 0x00000006u, 0x00003cd4u, 0x00002bf6u, 0x00003cd3u, 0x0003003eu, 0x00003cc9u, 0x00003cd4u, 0x00050041u, 0x00000007u, 0x00003cd5u, 0x00002ce8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003cd6u, 0x00003cd5u, 0x00050080u, 0x00000006u, 0x00003cd8u, 0x00003cd4u, 0x00003cd6u, 0x0003003eu, 0x00003cc9u, 0x00003cd8u, 0x000500c7u, 0x00000006u, 0x00003cdau, 0x00003cd8u, 0x00000e4bu, 0x0003003eu, 0x00003cc9u, 0x00003cdau, 0x0003003eu, 0x00003ccau, 0x00003cdau, 0x0004003du, 0x00000006u, 0x00003cddu, 0x00003cd1u, 0x000500c7u, 0x00000006u, 0x00003cdeu, 0x00003cddu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003cdfu, 0x00003cdeu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003ce1u, 0x00003cdau, 0x00003cdfu, 0x0003003eu, 0x00003ccau, 0x00003ce1u, 0x000500c6u, 0x00000006u, 0x00003ce3u, 0x00003ce1u, 0x0000048bu, 0x0003003eu, 0x00003ccau, 0x00003ce3u, 0x00080041u, 0x00000277u, 0x00003ce6u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003ce3u, 0x0004003du, 0x00000229u, 0x00003ce7u, 0x00003ce6u, 0x00040071u, 0x00000006u, 0x00003ce8u, 0x00003ce7u, 0x0003003eu, 0x00003ccbu, 0x00003ce8u, 0x0004007cu, 0x00000008u, 0x00003ceau, 0x00003ce8u, 0x00070050u, 0x00000009u, 0x00003cebu, 0x00003ceau, 0x00003ceau, 0x00003ceau, 0x00003ceau, 0x0003003eu, 0x00003cccu, 0x00003cebu, 0x0003003eu, 0x00002c49u, 0x00003cebu, 0x00050050u, 0x0000005fu, 0x00002f87u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f88u, 0x00002f87u, 0x0003003eu, 0x00006b5bu, 0x00002bf6u, 0x0003003eu, 0x00006b5cu, 0x00002bf9u, 0x0003003eu, 0x00002ceau, 0x000020eau, 0x0003003eu, 0x00002cebu, 0x00002f88u, 0x00050041u, 0x00000007u, 0x00003cf4u, 0x00002cebu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003cf5u, 0x00003cf4u, 0x00050084u, 0x00000006u, 0x00003cf6u, 0x00002bf9u, 0x00003cf5u, 0x00050080u, 0x00000006u, 0x00003cf7u, 0x00002bf6u, 0x00003cf6u, 0x0003003eu, 0x00003cecu, 0x00003cf7u, 0x00050041u, 0x00000007u, 0x00003cf8u, 0x00002cebu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003cf9u, 0x00003cf8u, 0x00050080u, 0x00000006u, 0x00003cfbu, 0x00003cf7u, 0x00003cf9u, 0x0003003eu, 0x00003cecu, 0x00003cfbu, 0x000500c7u, 0x00000006u, 0x00003cfdu, 0x00003cfbu, 0x00000e4bu, 0x0003003eu, 0x00003cecu, 0x00003cfdu, 0x0003003eu, 0x00003cedu, 0x00003cfdu, 0x0004003du, 0x00000006u, 0x00003d00u, 0x00003cf4u, 0x000500c7u, 0x00000006u, 0x00003d01u, 0x00003d00u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d02u, 0x00003d01u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d04u, 0x00003cfdu, 0x00003d02u, 0x0003003eu, 0x00003cedu, 0x00003d04u, 0x000500c6u, 0x00000006u, 0x00003d06u, 0x00003d04u, 0x0000048bu, 0x0003003eu, 0x00003cedu, 0x00003d06u, 0x00080041u, 0x00000277u, 0x00003d09u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003d06u, 0x0004003du, 0x00000229u, 0x00003d0au, 0x00003d09u, 0x00040071u, 0x00000006u, 0x00003d0bu, 0x00003d0au, 0x0003003eu, 0x00003ceeu, 0x00003d0bu, 0x0004007cu, 0x00000008u, 0x00003d0du, 0x00003d0bu, 0x00070050u, 0x00000009u, 0x00003d0eu, 0x00003d0du, 0x00003d0du, 0x00003d0du, 0x00003d0du, 0x0003003eu, 0x00003cefu, 0x00003d0eu, 0x0003003eu, 0x00002c51u, 0x00003d0eu, 0x000200f9u, 0x00002f7cu, 0x000200f8u, 0x00002f7cu, 0x000700f5u, 0x00000009u, 0x000083ccu, 0x0000837eu, 0x00002f29u, 0x00003d0eu, 0x00002f7du, 0x000700f5u, 0x00000009u, 0x000082d4u, 0x00008282u, 0x00002f29u, 0x00003cebu, 0x00002f7du, 0x000300f7u, 0x00002f8du, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002f8eu, 0x00002f8du, 0x000200f8u, 0x00002f8eu, 0x00050050u, 0x0000005fu, 0x00002f91u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f92u, 0x00002f91u, 0x0003003eu, 0x00006b5fu, 0x00002bf6u, 0x0003003eu, 0x00006b60u, 0x00002bf9u, 0x0003003eu, 0x00002cedu, 0x000020eau, 0x0003003eu, 0x00002ceeu, 0x00002f92u, 0x00050041u, 0x00000007u, 0x00003d17u, 0x00002ceeu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d18u, 0x00003d17u, 0x00050084u, 0x00000006u, 0x00003d19u, 0x00002bf9u, 0x00003d18u, 0x00050080u, 0x00000006u, 0x00003d1au, 0x00002bf6u, 0x00003d19u, 0x0003003eu, 0x00003d0fu, 0x00003d1au, 0x00050041u, 0x00000007u, 0x00003d1bu, 0x00002ceeu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d1cu, 0x00003d1bu, 0x00050080u, 0x00000006u, 0x00003d1eu, 0x00003d1au, 0x00003d1cu, 0x0003003eu, 0x00003d0fu, 0x00003d1eu, 0x000500c7u, 0x00000006u, 0x00003d20u, 0x00003d1eu, 0x00000e4bu, 0x0003003eu, 0x00003d0fu, 0x00003d20u, 0x0003003eu, 0x00003d10u, 0x00003d20u, 0x0004003du, 0x00000006u, 0x00003d23u, 0x00003d17u, 0x000500c7u, 0x00000006u, 0x00003d24u, 0x00003d23u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d25u, 0x00003d24u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d27u, 0x00003d20u, 0x00003d25u, 0x0003003eu, 0x00003d10u, 0x00003d27u, 0x000500c6u, 0x00000006u, 0x00003d29u, 0x00003d27u, 0x0000048bu, 0x0003003eu, 0x00003d10u, 0x00003d29u, 0x00080041u, 0x00000277u, 0x00003d2cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003d29u, 0x0004003du, 0x00000229u, 0x00003d2du, 0x00003d2cu, 0x00040071u, 0x00000006u, 0x00003d2eu, 0x00003d2du, 0x0003003eu, 0x00003d11u, 0x00003d2eu, 0x0004007cu, 0x00000008u, 0x00003d30u, 0x00003d2eu, 0x00070050u, 0x00000009u, 0x00003d31u, 0x00003d30u, 0x00003d30u, 0x00003d30u, 0x00003d30u, 0x0003003eu, 0x00003d12u, 0x00003d31u, 0x0003003eu, 0x00002c59u, 0x00003d31u, 0x000200f9u, 0x00002f8du, 0x000200f8u, 0x00002f8du, 0x000700f5u, 0x00000009u, 0x00008448u, 0x000083f8u, 0x00002f7cu, 0x00003d31u, 0x00002f8eu, 0x000200f9u, 0x00002f26u, 0x000200f8u, 0x00002f28u, 0x0004007cu, 0x000000a2u, 0x00002f4bu, 0x00007ef8u, 0x0004007cu, 0x00000006u, 0x00002f4eu, 0x00002c08u, 0x0003003eu, 0x00006b43u, 0x00002bf6u, 0x0003003eu, 0x00006b44u, 0x00002bf9u, 0x0003003eu, 0x00002cd4u, 0x000020eau, 0x0003003eu, 0x00002cd5u, 0x00002f4bu, 0x0003003eu, 0x00002cd6u, 0x00002f4eu, 0x00050041u, 0x00000007u, 0x00003be7u, 0x00002cd5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003be8u, 0x00003be7u, 0x00050084u, 0x00000006u, 0x00003be9u, 0x00002bf9u, 0x00003be8u, 0x00050080u, 0x00000006u, 0x00003beau, 0x00002bf6u, 0x00003be9u, 0x0003003eu, 0x00003bdeu, 0x00003beau, 0x00050041u, 0x00000007u, 0x00003bebu, 0x00002cd5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003becu, 0x00003bebu, 0x000500c2u, 0x00000006u, 0x00003bedu, 0x00003becu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003befu, 0x00003beau, 0x00003bedu, 0x0003003eu, 0x00003bdeu, 0x00003befu, 0x000500c7u, 0x00000006u, 0x00003bf1u, 0x00003befu, 0x00000e4bu, 0x0003003eu, 0x00003bdeu, 0x00003bf1u, 0x0004003du, 0x00000006u, 0x00003bf3u, 0x00003bebu, 0x000400c8u, 0x00000006u, 0x00003bf4u, 0x00003bf3u, 0x000500c7u, 0x00000006u, 0x00003bf5u, 0x00003bf4u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003bf6u, 0x00003bf5u, 0x00000701u, 0x0003003eu, 0x00003bdfu, 0x00003bf6u, 0x0003003eu, 0x00003be0u, 0x00003bf1u, 0x0004003du, 0x00000006u, 0x00003bf9u, 0x00003be7u, 0x000500c7u, 0x00000006u, 0x00003bfau, 0x00003bf9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003bfbu, 0x00003bfau, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003bfdu, 0x00003bf1u, 0x00003bfbu, 0x0003003eu, 0x00003be0u, 0x00003bfdu, 0x000500c6u, 0x00000006u, 0x00003bffu, 0x00003bfdu, 0x0000048bu, 0x0003003eu, 0x00003be0u, 0x00003bffu, 0x00080041u, 0x00000277u, 0x00003c02u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003bffu, 0x0004003du, 0x00000229u, 0x00003c03u, 0x00003c02u, 0x00040071u, 0x00000006u, 0x00003c04u, 0x00003c03u, 0x0003003eu, 0x00003be1u, 0x00003c04u, 0x000500c2u, 0x00000006u, 0x00003c07u, 0x00003c04u, 0x00003bf6u, 0x000500c7u, 0x00000006u, 0x00003c08u, 0x00003c07u, 0x00000e6eu, 0x0003003eu, 0x00003be1u, 0x00003c08u, 0x000500c4u, 0x00000006u, 0x00003c0au, 0x00002f4eu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003c0cu, 0x00003c08u, 0x00003c0au, 0x0003003eu, 0x00003be1u, 0x00003c0cu, 0x0004007cu, 0x00000008u, 0x00003c0eu, 0x00003c0cu, 0x00070050u, 0x00000009u, 0x00003c0fu, 0x00003c0eu, 0x00003c0eu, 0x00003c0eu, 0x00003c0eu, 0x0003003eu, 0x00003be2u, 0x00003c0fu, 0x0003003eu, 0x00002c41u, 0x00003c0fu, 0x000300f7u, 0x00002f53u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002f54u, 0x00002f53u, 0x000200f8u, 0x00002f54u, 0x00050050u, 0x0000005fu, 0x00002f57u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002f58u, 0x00002f57u, 0x0003003eu, 0x00006b47u, 0x00002bf6u, 0x0003003eu, 0x00006b48u, 0x00002bf9u, 0x0003003eu, 0x00002cd8u, 0x000020eau, 0x0003003eu, 0x00002cd9u, 0x00002f58u, 0x0003003eu, 0x00002cdau, 0x00002f4eu, 0x00050041u, 0x00000007u, 0x00003c19u, 0x00002cd9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003c1au, 0x00003c19u, 0x00050084u, 0x00000006u, 0x00003c1bu, 0x00002bf9u, 0x00003c1au, 0x00050080u, 0x00000006u, 0x00003c1cu, 0x00002bf6u, 0x00003c1bu, 0x0003003eu, 0x00003c10u, 0x00003c1cu, 0x00050041u, 0x00000007u, 0x00003c1du, 0x00002cd9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003c1eu, 0x00003c1du, 0x000500c2u, 0x00000006u, 0x00003c1fu, 0x00003c1eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003c21u, 0x00003c1cu, 0x00003c1fu, 0x0003003eu, 0x00003c10u, 0x00003c21u, 0x000500c7u, 0x00000006u, 0x00003c23u, 0x00003c21u, 0x00000e4bu, 0x0003003eu, 0x00003c10u, 0x00003c23u, 0x0004003du, 0x00000006u, 0x00003c25u, 0x00003c1du, 0x000400c8u, 0x00000006u, 0x00003c26u, 0x00003c25u, 0x000500c7u, 0x00000006u, 0x00003c27u, 0x00003c26u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c28u, 0x00003c27u, 0x00000701u, 0x0003003eu, 0x00003c11u, 0x00003c28u, 0x0003003eu, 0x00003c12u, 0x00003c23u, 0x0004003du, 0x00000006u, 0x00003c2bu, 0x00003c19u, 0x000500c7u, 0x00000006u, 0x00003c2cu, 0x00003c2bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c2du, 0x00003c2cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003c2fu, 0x00003c23u, 0x00003c2du, 0x0003003eu, 0x00003c12u, 0x00003c2fu, 0x000500c6u, 0x00000006u, 0x00003c31u, 0x00003c2fu, 0x0000048bu, 0x0003003eu, 0x00003c12u, 0x00003c31u, 0x00080041u, 0x00000277u, 0x00003c34u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003c31u, 0x0004003du, 0x00000229u, 0x00003c35u, 0x00003c34u, 0x00040071u, 0x00000006u, 0x00003c36u, 0x00003c35u, 0x0003003eu, 0x00003c13u, 0x00003c36u, 0x000500c2u, 0x00000006u, 0x00003c39u, 0x00003c36u, 0x00003c28u, 0x000500c7u, 0x00000006u, 0x00003c3au, 0x00003c39u, 0x00000e6eu, 0x0003003eu, 0x00003c13u, 0x00003c3au, 0x000500c5u, 0x00000006u, 0x00003c3eu, 0x00003c3au, 0x00003c0au, 0x0003003eu, 0x00003c13u, 0x00003c3eu, 0x0004007cu, 0x00000008u, 0x00003c40u, 0x00003c3eu, 0x00070050u, 0x00000009u, 0x00003c41u, 0x00003c40u, 0x00003c40u, 0x00003c40u, 0x00003c40u, 0x0003003eu, 0x00003c14u, 0x00003c41u, 0x0003003eu, 0x00002c49u, 0x00003c41u, 0x00050050u, 0x0000005fu, 0x00002f61u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f62u, 0x00002f61u, 0x0003003eu, 0x00006b4bu, 0x00002bf6u, 0x0003003eu, 0x00006b4cu, 0x00002bf9u, 0x0003003eu, 0x00002cdcu, 0x000020eau, 0x0003003eu, 0x00002cddu, 0x00002f62u, 0x0003003eu, 0x00002cdeu, 0x00002f4eu, 0x00050041u, 0x00000007u, 0x00003c4bu, 0x00002cddu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003c4cu, 0x00003c4bu, 0x00050084u, 0x00000006u, 0x00003c4du, 0x00002bf9u, 0x00003c4cu, 0x00050080u, 0x00000006u, 0x00003c4eu, 0x00002bf6u, 0x00003c4du, 0x0003003eu, 0x00003c42u, 0x00003c4eu, 0x00050041u, 0x00000007u, 0x00003c4fu, 0x00002cddu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003c50u, 0x00003c4fu, 0x000500c2u, 0x00000006u, 0x00003c51u, 0x00003c50u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003c53u, 0x00003c4eu, 0x00003c51u, 0x0003003eu, 0x00003c42u, 0x00003c53u, 0x000500c7u, 0x00000006u, 0x00003c55u, 0x00003c53u, 0x00000e4bu, 0x0003003eu, 0x00003c42u, 0x00003c55u, 0x0004003du, 0x00000006u, 0x00003c57u, 0x00003c4fu, 0x000400c8u, 0x00000006u, 0x00003c58u, 0x00003c57u, 0x000500c7u, 0x00000006u, 0x00003c59u, 0x00003c58u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c5au, 0x00003c59u, 0x00000701u, 0x0003003eu, 0x00003c43u, 0x00003c5au, 0x0003003eu, 0x00003c44u, 0x00003c55u, 0x0004003du, 0x00000006u, 0x00003c5du, 0x00003c4bu, 0x000500c7u, 0x00000006u, 0x00003c5eu, 0x00003c5du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c5fu, 0x00003c5eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003c61u, 0x00003c55u, 0x00003c5fu, 0x0003003eu, 0x00003c44u, 0x00003c61u, 0x000500c6u, 0x00000006u, 0x00003c63u, 0x00003c61u, 0x0000048bu, 0x0003003eu, 0x00003c44u, 0x00003c63u, 0x00080041u, 0x00000277u, 0x00003c66u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003c63u, 0x0004003du, 0x00000229u, 0x00003c67u, 0x00003c66u, 0x00040071u, 0x00000006u, 0x00003c68u, 0x00003c67u, 0x0003003eu, 0x00003c45u, 0x00003c68u, 0x000500c2u, 0x00000006u, 0x00003c6bu, 0x00003c68u, 0x00003c5au, 0x000500c7u, 0x00000006u, 0x00003c6cu, 0x00003c6bu, 0x00000e6eu, 0x0003003eu, 0x00003c45u, 0x00003c6cu, 0x000500c5u, 0x00000006u, 0x00003c70u, 0x00003c6cu, 0x00003c0au, 0x0003003eu, 0x00003c45u, 0x00003c70u, 0x0004007cu, 0x00000008u, 0x00003c72u, 0x00003c70u, 0x00070050u, 0x00000009u, 0x00003c73u, 0x00003c72u, 0x00003c72u, 0x00003c72u, 0x00003c72u, 0x0003003eu, 0x00003c46u, 0x00003c73u, 0x0003003eu, 0x00002c51u, 0x00003c73u, 0x000200f9u, 0x00002f53u, 0x000200f8u, 0x00002f53u, 0x000700f5u, 0x00000009u, 0x000083cau, 0x0000837eu, 0x00002f28u, 0x00003c73u, 0x00002f54u, 0x000700f5u, 0x00000009u, 0x000082d2u, 0x00008282u, 0x00002f28u, 0x00003c41u, 0x00002f54u, 0x000300f7u, 0x00002f6au, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002f6bu, 0x00002f6au, 0x000200f8u, 0x00002f6bu, 0x00050050u, 0x0000005fu, 0x00002f6eu, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f6fu, 0x00002f6eu, 0x0003003eu, 0x00006b4fu, 0x00002bf6u, 0x0003003eu, 0x00006b50u, 0x00002bf9u, 0x0003003eu, 0x00002ce0u, 0x000020eau, 0x0003003eu, 0x00002ce1u, 0x00002f6fu, 0x0003003eu, 0x00002ce2u, 0x00002f4eu, 0x00050041u, 0x00000007u, 0x00003c7du, 0x00002ce1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003c7eu, 0x00003c7du, 0x00050084u, 0x00000006u, 0x00003c7fu, 0x00002bf9u, 0x00003c7eu, 0x00050080u, 0x00000006u, 0x00003c80u, 0x00002bf6u, 0x00003c7fu, 0x0003003eu, 0x00003c74u, 0x00003c80u, 0x00050041u, 0x00000007u, 0x00003c81u, 0x00002ce1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003c82u, 0x00003c81u, 0x000500c2u, 0x00000006u, 0x00003c83u, 0x00003c82u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003c85u, 0x00003c80u, 0x00003c83u, 0x0003003eu, 0x00003c74u, 0x00003c85u, 0x000500c7u, 0x00000006u, 0x00003c87u, 0x00003c85u, 0x00000e4bu, 0x0003003eu, 0x00003c74u, 0x00003c87u, 0x0004003du, 0x00000006u, 0x00003c89u, 0x00003c81u, 0x000400c8u, 0x00000006u, 0x00003c8au, 0x00003c89u, 0x000500c7u, 0x00000006u, 0x00003c8bu, 0x00003c8au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c8cu, 0x00003c8bu, 0x00000701u, 0x0003003eu, 0x00003c75u, 0x00003c8cu, 0x0003003eu, 0x00003c76u, 0x00003c87u, 0x0004003du, 0x00000006u, 0x00003c8fu, 0x00003c7du, 0x000500c7u, 0x00000006u, 0x00003c90u, 0x00003c8fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c91u, 0x00003c90u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003c93u, 0x00003c87u, 0x00003c91u, 0x0003003eu, 0x00003c76u, 0x00003c93u, 0x000500c6u, 0x00000006u, 0x00003c95u, 0x00003c93u, 0x0000048bu, 0x0003003eu, 0x00003c76u, 0x00003c95u, 0x00080041u, 0x00000277u, 0x00003c98u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003c95u, 0x0004003du, 0x00000229u, 0x00003c99u, 0x00003c98u, 0x00040071u, 0x00000006u, 0x00003c9au, 0x00003c99u, 0x0003003eu, 0x00003c77u, 0x00003c9au, 0x000500c2u, 0x00000006u, 0x00003c9du, 0x00003c9au, 0x00003c8cu, 0x000500c7u, 0x00000006u, 0x00003c9eu, 0x00003c9du, 0x00000e6eu, 0x0003003eu, 0x00003c77u, 0x00003c9eu, 0x000500c5u, 0x00000006u, 0x00003ca2u, 0x00003c9eu, 0x00003c0au, 0x0003003eu, 0x00003c77u, 0x00003ca2u, 0x0004007cu, 0x00000008u, 0x00003ca4u, 0x00003ca2u, 0x00070050u, 0x00000009u, 0x00003ca5u, 0x00003ca4u, 0x00003ca4u, 0x00003ca4u, 0x00003ca4u, 0x0003003eu, 0x00003c78u, 0x00003ca5u, 0x0003003eu, 0x00002c59u, 0x00003ca5u, 0x000200f9u, 0x00002f6au, 0x000200f8u, 0x00002f6au, 0x000700f5u, 0x00000009u, 0x00008446u, 0x000083f8u, 0x00002f53u, 0x00003ca5u, 0x00002f6bu, 0x000200f9u, 0x00002f26u, 0x000200f8u, 0x00002f27u, 0x0004007cu, 0x000000a2u, 0x00002f2bu, 0x00007ef8u, 0x0003003eu, 0x00006b63u, 0x00002bf6u, 0x0003003eu, 0x00006b64u, 0x00002bf9u, 0x0003003eu, 0x00002cf0u, 0x000020eau, 0x0003003eu, 0x00002cf1u, 0x00002f2bu, 0x00050041u, 0x00000007u, 0x00003b3eu, 0x00002cf1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003b3fu, 0x00003b3eu, 0x00050084u, 0x00000006u, 0x00003b40u, 0x00002bf9u, 0x00003b3fu, 0x00050080u, 0x00000006u, 0x00003b41u, 0x00002bf6u, 0x00003b40u, 0x0003003eu, 0x00003b36u, 0x00003b41u, 0x00050041u, 0x00000007u, 0x00003b42u, 0x00002cf1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003b43u, 0x00003b42u, 0x00050084u, 0x00000006u, 0x00003b44u, 0x00003b43u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003b46u, 0x00003b41u, 0x00003b44u, 0x0003003eu, 0x00003b36u, 0x00003b46u, 0x000500c7u, 0x00000006u, 0x00003b48u, 0x00003b46u, 0x00000e4bu, 0x0003003eu, 0x00003b36u, 0x00003b48u, 0x000500c2u, 0x00000006u, 0x00003b4au, 0x00003b48u, 0x00000212u, 0x0003003eu, 0x00003b37u, 0x00003b4au, 0x0004003du, 0x00000006u, 0x00003b4cu, 0x00003b3eu, 0x000500c7u, 0x00000006u, 0x00003b4du, 0x00003b4cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b4eu, 0x00003b4du, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003b50u, 0x00003b4au, 0x00003b4eu, 0x0003003eu, 0x00003b37u, 0x00003b50u, 0x000500c6u, 0x00000006u, 0x00003b52u, 0x00003b50u, 0x00000485u, 0x0003003eu, 0x00003b37u, 0x00003b52u, 0x00080041u, 0x00000270u, 0x00003b55u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003b52u, 0x0004003du, 0x0000022bu, 0x00003b56u, 0x00003b55u, 0x00040071u, 0x00000006u, 0x00003b57u, 0x00003b56u, 0x0003003eu, 0x00003b38u, 0x00003b57u, 0x000500c2u, 0x00000006u, 0x00003b59u, 0x00003b57u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003b5au, 0x00003b59u, 0x000500c7u, 0x00000006u, 0x00003b5cu, 0x00003b57u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003b5du, 0x00003b5cu, 0x00050050u, 0x0000005fu, 0x00003b5eu, 0x00003b5au, 0x00003b5du, 0x0009004fu, 0x00000009u, 0x00003b5fu, 0x00003b5eu, 0x00003b5eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003b39u, 0x00003b5fu, 0x0003003eu, 0x00002c41u, 0x00003b5fu, 0x000300f7u, 0x00002f30u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002f31u, 0x00002f30u, 0x000200f8u, 0x00002f31u, 0x00050050u, 0x0000005fu, 0x00002f34u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002f35u, 0x00002f34u, 0x0003003eu, 0x00006b67u, 0x00002bf6u, 0x0003003eu, 0x00006b68u, 0x00002bf9u, 0x0003003eu, 0x00002cf3u, 0x000020eau, 0x0003003eu, 0x00002cf4u, 0x00002f35u, 0x00050041u, 0x00000007u, 0x00003b68u, 0x00002cf4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003b69u, 0x00003b68u, 0x00050084u, 0x00000006u, 0x00003b6au, 0x00002bf9u, 0x00003b69u, 0x00050080u, 0x00000006u, 0x00003b6bu, 0x00002bf6u, 0x00003b6au, 0x0003003eu, 0x00003b60u, 0x00003b6bu, 0x00050041u, 0x00000007u, 0x00003b6cu, 0x00002cf4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003b6du, 0x00003b6cu, 0x00050084u, 0x00000006u, 0x00003b6eu, 0x00003b6du, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003b70u, 0x00003b6bu, 0x00003b6eu, 0x0003003eu, 0x00003b60u, 0x00003b70u, 0x000500c7u, 0x00000006u, 0x00003b72u, 0x00003b70u, 0x00000e4bu, 0x0003003eu, 0x00003b60u, 0x00003b72u, 0x000500c2u, 0x00000006u, 0x00003b74u, 0x00003b72u, 0x00000212u, 0x0003003eu, 0x00003b61u, 0x00003b74u, 0x0004003du, 0x00000006u, 0x00003b76u, 0x00003b68u, 0x000500c7u, 0x00000006u, 0x00003b77u, 0x00003b76u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b78u, 0x00003b77u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003b7au, 0x00003b74u, 0x00003b78u, 0x0003003eu, 0x00003b61u, 0x00003b7au, 0x000500c6u, 0x00000006u, 0x00003b7cu, 0x00003b7au, 0x00000485u, 0x0003003eu, 0x00003b61u, 0x00003b7cu, 0x00080041u, 0x00000270u, 0x00003b7fu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003b7cu, 0x0004003du, 0x0000022bu, 0x00003b80u, 0x00003b7fu, 0x00040071u, 0x00000006u, 0x00003b81u, 0x00003b80u, 0x0003003eu, 0x00003b62u, 0x00003b81u, 0x000500c2u, 0x00000006u, 0x00003b83u, 0x00003b81u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003b84u, 0x00003b83u, 0x000500c7u, 0x00000006u, 0x00003b86u, 0x00003b81u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003b87u, 0x00003b86u, 0x00050050u, 0x0000005fu, 0x00003b88u, 0x00003b84u, 0x00003b87u, 0x0009004fu, 0x00000009u, 0x00003b89u, 0x00003b88u, 0x00003b88u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003b63u, 0x00003b89u, 0x0003003eu, 0x00002c49u, 0x00003b89u, 0x00050050u, 0x0000005fu, 0x00002f3bu, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f3cu, 0x00002f3bu, 0x0003003eu, 0x00006b6bu, 0x00002bf6u, 0x0003003eu, 0x00006b6cu, 0x00002bf9u, 0x0003003eu, 0x00002cf6u, 0x000020eau, 0x0003003eu, 0x00002cf7u, 0x00002f3cu, 0x00050041u, 0x00000007u, 0x00003b92u, 0x00002cf7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003b93u, 0x00003b92u, 0x00050084u, 0x00000006u, 0x00003b94u, 0x00002bf9u, 0x00003b93u, 0x00050080u, 0x00000006u, 0x00003b95u, 0x00002bf6u, 0x00003b94u, 0x0003003eu, 0x00003b8au, 0x00003b95u, 0x00050041u, 0x00000007u, 0x00003b96u, 0x00002cf7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003b97u, 0x00003b96u, 0x00050084u, 0x00000006u, 0x00003b98u, 0x00003b97u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003b9au, 0x00003b95u, 0x00003b98u, 0x0003003eu, 0x00003b8au, 0x00003b9au, 0x000500c7u, 0x00000006u, 0x00003b9cu, 0x00003b9au, 0x00000e4bu, 0x0003003eu, 0x00003b8au, 0x00003b9cu, 0x000500c2u, 0x00000006u, 0x00003b9eu, 0x00003b9cu, 0x00000212u, 0x0003003eu, 0x00003b8bu, 0x00003b9eu, 0x0004003du, 0x00000006u, 0x00003ba0u, 0x00003b92u, 0x000500c7u, 0x00000006u, 0x00003ba1u, 0x00003ba0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ba2u, 0x00003ba1u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003ba4u, 0x00003b9eu, 0x00003ba2u, 0x0003003eu, 0x00003b8bu, 0x00003ba4u, 0x000500c6u, 0x00000006u, 0x00003ba6u, 0x00003ba4u, 0x00000485u, 0x0003003eu, 0x00003b8bu, 0x00003ba6u, 0x00080041u, 0x00000270u, 0x00003ba9u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003ba6u, 0x0004003du, 0x0000022bu, 0x00003baau, 0x00003ba9u, 0x00040071u, 0x00000006u, 0x00003babu, 0x00003baau, 0x0003003eu, 0x00003b8cu, 0x00003babu, 0x000500c2u, 0x00000006u, 0x00003badu, 0x00003babu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003baeu, 0x00003badu, 0x000500c7u, 0x00000006u, 0x00003bb0u, 0x00003babu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003bb1u, 0x00003bb0u, 0x00050050u, 0x0000005fu, 0x00003bb2u, 0x00003baeu, 0x00003bb1u, 0x0009004fu, 0x00000009u, 0x00003bb3u, 0x00003bb2u, 0x00003bb2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003b8du, 0x00003bb3u, 0x0003003eu, 0x00002c51u, 0x00003bb3u, 0x000200f9u, 0x00002f30u, 0x000200f8u, 0x00002f30u, 0x000700f5u, 0x00000009u, 0x000083c8u, 0x0000837eu, 0x00002f27u, 0x00003bb3u, 0x00002f31u, 0x000700f5u, 0x00000009u, 0x000082d0u, 0x00008282u, 0x00002f27u, 0x00003b89u, 0x00002f31u, 0x000300f7u, 0x00002f41u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002f42u, 0x00002f41u, 0x000200f8u, 0x00002f42u, 0x00050050u, 0x0000005fu, 0x00002f45u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f46u, 0x00002f45u, 0x0003003eu, 0x00006b6fu, 0x00002bf6u, 0x0003003eu, 0x00006b70u, 0x00002bf9u, 0x0003003eu, 0x00002cf9u, 0x000020eau, 0x0003003eu, 0x00002cfau, 0x00002f46u, 0x00050041u, 0x00000007u, 0x00003bbcu, 0x00002cfau, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003bbdu, 0x00003bbcu, 0x00050084u, 0x00000006u, 0x00003bbeu, 0x00002bf9u, 0x00003bbdu, 0x00050080u, 0x00000006u, 0x00003bbfu, 0x00002bf6u, 0x00003bbeu, 0x0003003eu, 0x00003bb4u, 0x00003bbfu, 0x00050041u, 0x00000007u, 0x00003bc0u, 0x00002cfau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003bc1u, 0x00003bc0u, 0x00050084u, 0x00000006u, 0x00003bc2u, 0x00003bc1u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003bc4u, 0x00003bbfu, 0x00003bc2u, 0x0003003eu, 0x00003bb4u, 0x00003bc4u, 0x000500c7u, 0x00000006u, 0x00003bc6u, 0x00003bc4u, 0x00000e4bu, 0x0003003eu, 0x00003bb4u, 0x00003bc6u, 0x000500c2u, 0x00000006u, 0x00003bc8u, 0x00003bc6u, 0x00000212u, 0x0003003eu, 0x00003bb5u, 0x00003bc8u, 0x0004003du, 0x00000006u, 0x00003bcau, 0x00003bbcu, 0x000500c7u, 0x00000006u, 0x00003bcbu, 0x00003bcau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003bccu, 0x00003bcbu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003bceu, 0x00003bc8u, 0x00003bccu, 0x0003003eu, 0x00003bb5u, 0x00003bceu, 0x000500c6u, 0x00000006u, 0x00003bd0u, 0x00003bceu, 0x00000485u, 0x0003003eu, 0x00003bb5u, 0x00003bd0u, 0x00080041u, 0x00000270u, 0x00003bd3u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003bd0u, 0x0004003du, 0x0000022bu, 0x00003bd4u, 0x00003bd3u, 0x00040071u, 0x00000006u, 0x00003bd5u, 0x00003bd4u, 0x0003003eu, 0x00003bb6u, 0x00003bd5u, 0x000500c2u, 0x00000006u, 0x00003bd7u, 0x00003bd5u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003bd8u, 0x00003bd7u, 0x000500c7u, 0x00000006u, 0x00003bdau, 0x00003bd5u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003bdbu, 0x00003bdau, 0x00050050u, 0x0000005fu, 0x00003bdcu, 0x00003bd8u, 0x00003bdbu, 0x0009004fu, 0x00000009u, 0x00003bddu, 0x00003bdcu, 0x00003bdcu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003bb7u, 0x00003bddu, 0x0003003eu, 0x00002c59u, 0x00003bddu, 0x000200f9u, 0x00002f41u, 0x000200f8u, 0x00002f41u, 0x000700f5u, 0x00000009u, 0x00008444u, 0x000083f8u, 0x00002f30u, 0x00003bddu, 0x00002f42u, 0x000200f9u, 0x00002f26u, 0x000200f8u, 0x00002f26u, 0x000900f5u, 0x00000009u, 0x00008443u, 0x00008444u, 0x00002f41u, 0x00008446u, 0x00002f6au, 0x00008448u, 0x00002f8du, 0x000900f5u, 0x00000009u, 0x000083c6u, 0x000083c8u, 0x00002f41u, 0x000083cau, 0x00002f6au, 0x000083ccu, 0x00002f8du, 0x000900f5u, 0x00000009u, 0x0000834bu, 0x00003b5fu, 0x00002f41u, 0x00003c0fu, 0x00002f6au, 0x00003cc8u, 0x00002f8du, 0x000900f5u, 0x00000009u, 0x000082ceu, 0x000082d0u, 0x00002f41u, 0x000082d2u, 0x00002f6au, 0x000082d4u, 0x00002f8du, 0x000200f9u, 0x00002e6au, 0x000200f8u, 0x00002e6cu, 0x000500c3u, 0x00000008u, 0x00002ef8u, 0x00007e6fu, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002ef9u, 0x00002ef8u, 0x0003003eu, 0x00002cc1u, 0x00002ef9u, 0x00050082u, 0x00000008u, 0x00002efdu, 0x00007eadu, 0x00007e6fu, 0x00050080u, 0x00000008u, 0x00002efeu, 0x00007eadu, 0x00002efdu, 0x000500c3u, 0x00000008u, 0x00002effu, 0x00002efeu, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002f00u, 0x00002effu, 0x0003003eu, 0x00002cc2u, 0x00002f00u, 0x00050050u, 0x0000005fu, 0x00002f03u, 0x00007e6fu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002f04u, 0x00002f03u, 0x0003003eu, 0x00006b33u, 0x00002bf6u, 0x0003003eu, 0x00006b34u, 0x00002bf9u, 0x0003003eu, 0x00002cc4u, 0x000020eau, 0x0003003eu, 0x00002cc5u, 0x00002f04u, 0x0003003eu, 0x00002cc6u, 0x00002ef9u, 0x00050041u, 0x00000007u, 0x00003a18u, 0x00002cc5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003a19u, 0x00003a18u, 0x00050084u, 0x00000006u, 0x00003a1au, 0x00002bf9u, 0x00003a19u, 0x00050080u, 0x00000006u, 0x00003a1bu, 0x00002bf6u, 0x00003a1au, 0x0003003eu, 0x00003a0au, 0x00003a1bu, 0x00050041u, 0x00000007u, 0x00003a1du, 0x00002cc5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003a1eu, 0x00003a1du, 0x00050080u, 0x00000006u, 0x00003a1fu, 0x00003a1bu, 0x00003a1eu, 0x0003003eu, 0x00003a0bu, 0x00003a1fu, 0x000500c7u, 0x00000006u, 0x00003a21u, 0x00003a1fu, 0x00000efdu, 0x0003003eu, 0x00003a0bu, 0x00003a21u, 0x00050084u, 0x00000006u, 0x00003a24u, 0x00002ef9u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003a25u, 0x00003a1bu, 0x00003a24u, 0x0003003eu, 0x00003a0cu, 0x00003a25u, 0x000500c7u, 0x00000006u, 0x00003a27u, 0x00003a25u, 0x00000efdu, 0x0003003eu, 0x00003a0cu, 0x00003a27u, 0x0003003eu, 0x00003a0du, 0x00003a21u, 0x0004003du, 0x00000006u, 0x00003a2au, 0x00003a18u, 0x000500c7u, 0x00000006u, 0x00003a2bu, 0x00003a2au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a2cu, 0x00003a2bu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003a2eu, 0x00003a21u, 0x00003a2cu, 0x0003003eu, 0x00003a0du, 0x00003a2eu, 0x000500c6u, 0x00000006u, 0x00003a30u, 0x00003a2eu, 0x0000048bu, 0x0003003eu, 0x00003a0du, 0x00003a30u, 0x000500c2u, 0x00000006u, 0x00003a32u, 0x00003a27u, 0x00000212u, 0x0003003eu, 0x00003a0eu, 0x00003a32u, 0x0004003du, 0x00000006u, 0x00003a34u, 0x00003a18u, 0x000500c7u, 0x00000006u, 0x00003a35u, 0x00003a34u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a36u, 0x00003a35u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003a38u, 0x00003a32u, 0x00003a36u, 0x0003003eu, 0x00003a0eu, 0x00003a38u, 0x000500c6u, 0x00000006u, 0x00003a3au, 0x00003a38u, 0x00000485u, 0x0003003eu, 0x00003a0eu, 0x00003a3au, 0x000500c5u, 0x00000006u, 0x00003a3du, 0x00003a30u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x00003a3eu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003a3du, 0x0004003du, 0x00000229u, 0x00003a3fu, 0x00003a3eu, 0x00040071u, 0x00000006u, 0x00003a40u, 0x00003a3fu, 0x0004007cu, 0x00000008u, 0x00003a41u, 0x00003a40u, 0x0003003eu, 0x00003a0fu, 0x00003a41u, 0x00080041u, 0x00000270u, 0x00003a44u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003a3au, 0x0004003du, 0x0000022bu, 0x00003a45u, 0x00003a44u, 0x00040071u, 0x00000006u, 0x00003a46u, 0x00003a45u, 0x0004007cu, 0x00000008u, 0x00003a47u, 0x00003a46u, 0x0003003eu, 0x00003a10u, 0x00003a47u, 0x000500c3u, 0x00000008u, 0x00003a49u, 0x00003a47u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003a4au, 0x00003a49u, 0x0000038bu, 0x0003003eu, 0x00003a11u, 0x00003a4au, 0x000500c3u, 0x00000008u, 0x00003a4cu, 0x00003a47u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003a4du, 0x00003a4cu, 0x0000038bu, 0x0003003eu, 0x00003a12u, 0x00003a4du, 0x00050082u, 0x00000008u, 0x00003a4fu, 0x00003a4au, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003a51u, 0x00003a4du, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003a54u, 0x00003a4fu, 0x00003a51u, 0x00003a41u, 0x00003a41u, 0x0003003eu, 0x00003a13u, 0x00003a54u, 0x0003003eu, 0x00002c41u, 0x00003a54u, 0x000300f7u, 0x00002f0au, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002f0bu, 0x00002f0au, 0x000200f8u, 0x00002f0bu, 0x00050050u, 0x0000005fu, 0x00002f0eu, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002f0fu, 0x00002f0eu, 0x0003003eu, 0x00006b37u, 0x00002bf6u, 0x0003003eu, 0x00006b38u, 0x00002bf9u, 0x0003003eu, 0x00002cc8u, 0x000020eau, 0x0003003eu, 0x00002cc9u, 0x00002f0fu, 0x0003003eu, 0x00002ccau, 0x00002f00u, 0x00050041u, 0x00000007u, 0x00003a63u, 0x00002cc9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003a64u, 0x00003a63u, 0x00050084u, 0x00000006u, 0x00003a65u, 0x00002bf9u, 0x00003a64u, 0x00050080u, 0x00000006u, 0x00003a66u, 0x00002bf6u, 0x00003a65u, 0x0003003eu, 0x00003a55u, 0x00003a66u, 0x00050041u, 0x00000007u, 0x00003a68u, 0x00002cc9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003a69u, 0x00003a68u, 0x00050080u, 0x00000006u, 0x00003a6au, 0x00003a66u, 0x00003a69u, 0x0003003eu, 0x00003a56u, 0x00003a6au, 0x000500c7u, 0x00000006u, 0x00003a6cu, 0x00003a6au, 0x00000efdu, 0x0003003eu, 0x00003a56u, 0x00003a6cu, 0x00050084u, 0x00000006u, 0x00003a6fu, 0x00002f00u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003a70u, 0x00003a66u, 0x00003a6fu, 0x0003003eu, 0x00003a57u, 0x00003a70u, 0x000500c7u, 0x00000006u, 0x00003a72u, 0x00003a70u, 0x00000efdu, 0x0003003eu, 0x00003a57u, 0x00003a72u, 0x0003003eu, 0x00003a58u, 0x00003a6cu, 0x0004003du, 0x00000006u, 0x00003a75u, 0x00003a63u, 0x000500c7u, 0x00000006u, 0x00003a76u, 0x00003a75u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a77u, 0x00003a76u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003a79u, 0x00003a6cu, 0x00003a77u, 0x0003003eu, 0x00003a58u, 0x00003a79u, 0x000500c6u, 0x00000006u, 0x00003a7bu, 0x00003a79u, 0x0000048bu, 0x0003003eu, 0x00003a58u, 0x00003a7bu, 0x000500c2u, 0x00000006u, 0x00003a7du, 0x00003a72u, 0x00000212u, 0x0003003eu, 0x00003a59u, 0x00003a7du, 0x0004003du, 0x00000006u, 0x00003a7fu, 0x00003a63u, 0x000500c7u, 0x00000006u, 0x00003a80u, 0x00003a7fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a81u, 0x00003a80u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003a83u, 0x00003a7du, 0x00003a81u, 0x0003003eu, 0x00003a59u, 0x00003a83u, 0x000500c6u, 0x00000006u, 0x00003a85u, 0x00003a83u, 0x00000485u, 0x0003003eu, 0x00003a59u, 0x00003a85u, 0x000500c5u, 0x00000006u, 0x00003a88u, 0x00003a7bu, 0x00000f26u, 0x00080041u, 0x00000277u, 0x00003a89u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003a88u, 0x0004003du, 0x00000229u, 0x00003a8au, 0x00003a89u, 0x00040071u, 0x00000006u, 0x00003a8bu, 0x00003a8au, 0x0004007cu, 0x00000008u, 0x00003a8cu, 0x00003a8bu, 0x0003003eu, 0x00003a5au, 0x00003a8cu, 0x00080041u, 0x00000270u, 0x00003a8fu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003a85u, 0x0004003du, 0x0000022bu, 0x00003a90u, 0x00003a8fu, 0x00040071u, 0x00000006u, 0x00003a91u, 0x00003a90u, 0x0004007cu, 0x00000008u, 0x00003a92u, 0x00003a91u, 0x0003003eu, 0x00003a5bu, 0x00003a92u, 0x000500c3u, 0x00000008u, 0x00003a94u, 0x00003a92u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003a95u, 0x00003a94u, 0x0000038bu, 0x0003003eu, 0x00003a5cu, 0x00003a95u, 0x000500c3u, 0x00000008u, 0x00003a97u, 0x00003a92u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003a98u, 0x00003a97u, 0x0000038bu, 0x0003003eu, 0x00003a5du, 0x00003a98u, 0x00050082u, 0x00000008u, 0x00003a9au, 0x00003a95u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003a9cu, 0x00003a98u, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003a9fu, 0x00003a9au, 0x00003a9cu, 0x00003a8cu, 0x00003a8cu, 0x0003003eu, 0x00003a5eu, 0x00003a9fu, 0x0003003eu, 0x00002c49u, 0x00003a9fu, 0x00050050u, 0x0000005fu, 0x00002f16u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f17u, 0x00002f16u, 0x0003003eu, 0x00006b3bu, 0x00002bf6u, 0x0003003eu, 0x00006b3cu, 0x00002bf9u, 0x0003003eu, 0x00002cccu, 0x000020eau, 0x0003003eu, 0x00002ccdu, 0x00002f17u, 0x0003003eu, 0x00002cceu, 0x00002ef9u, 0x00050041u, 0x00000007u, 0x00003aaeu, 0x00002ccdu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003aafu, 0x00003aaeu, 0x00050084u, 0x00000006u, 0x00003ab0u, 0x00002bf9u, 0x00003aafu, 0x00050080u, 0x00000006u, 0x00003ab1u, 0x00002bf6u, 0x00003ab0u, 0x0003003eu, 0x00003aa0u, 0x00003ab1u, 0x00050041u, 0x00000007u, 0x00003ab3u, 0x00002ccdu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ab4u, 0x00003ab3u, 0x00050080u, 0x00000006u, 0x00003ab5u, 0x00003ab1u, 0x00003ab4u, 0x0003003eu, 0x00003aa1u, 0x00003ab5u, 0x000500c7u, 0x00000006u, 0x00003ab7u, 0x00003ab5u, 0x00000efdu, 0x0003003eu, 0x00003aa1u, 0x00003ab7u, 0x00050080u, 0x00000006u, 0x00003abbu, 0x00003ab1u, 0x00003a24u, 0x0003003eu, 0x00003aa2u, 0x00003abbu, 0x000500c7u, 0x00000006u, 0x00003abdu, 0x00003abbu, 0x00000efdu, 0x0003003eu, 0x00003aa2u, 0x00003abdu, 0x0003003eu, 0x00003aa3u, 0x00003ab7u, 0x0004003du, 0x00000006u, 0x00003ac0u, 0x00003aaeu, 0x000500c7u, 0x00000006u, 0x00003ac1u, 0x00003ac0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ac2u, 0x00003ac1u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003ac4u, 0x00003ab7u, 0x00003ac2u, 0x0003003eu, 0x00003aa3u, 0x00003ac4u, 0x000500c6u, 0x00000006u, 0x00003ac6u, 0x00003ac4u, 0x0000048bu, 0x0003003eu, 0x00003aa3u, 0x00003ac6u, 0x000500c2u, 0x00000006u, 0x00003ac8u, 0x00003abdu, 0x00000212u, 0x0003003eu, 0x00003aa4u, 0x00003ac8u, 0x0004003du, 0x00000006u, 0x00003acau, 0x00003aaeu, 0x000500c7u, 0x00000006u, 0x00003acbu, 0x00003acau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003accu, 0x00003acbu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003aceu, 0x00003ac8u, 0x00003accu, 0x0003003eu, 0x00003aa4u, 0x00003aceu, 0x000500c6u, 0x00000006u, 0x00003ad0u, 0x00003aceu, 0x00000485u, 0x0003003eu, 0x00003aa4u, 0x00003ad0u, 0x000500c5u, 0x00000006u, 0x00003ad3u, 0x00003ac6u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x00003ad4u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003ad3u, 0x0004003du, 0x00000229u, 0x00003ad5u, 0x00003ad4u, 0x00040071u, 0x00000006u, 0x00003ad6u, 0x00003ad5u, 0x0004007cu, 0x00000008u, 0x00003ad7u, 0x00003ad6u, 0x0003003eu, 0x00003aa5u, 0x00003ad7u, 0x00080041u, 0x00000270u, 0x00003adau, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003ad0u, 0x0004003du, 0x0000022bu, 0x00003adbu, 0x00003adau, 0x00040071u, 0x00000006u, 0x00003adcu, 0x00003adbu, 0x0004007cu, 0x00000008u, 0x00003addu, 0x00003adcu, 0x0003003eu, 0x00003aa6u, 0x00003addu, 0x000500c3u, 0x00000008u, 0x00003adfu, 0x00003addu, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003ae0u, 0x00003adfu, 0x0000038bu, 0x0003003eu, 0x00003aa7u, 0x00003ae0u, 0x000500c3u, 0x00000008u, 0x00003ae2u, 0x00003addu, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003ae3u, 0x00003ae2u, 0x0000038bu, 0x0003003eu, 0x00003aa8u, 0x00003ae3u, 0x00050082u, 0x00000008u, 0x00003ae5u, 0x00003ae0u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003ae7u, 0x00003ae3u, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003aeau, 0x00003ae5u, 0x00003ae7u, 0x00003ad7u, 0x00003ad7u, 0x0003003eu, 0x00003aa9u, 0x00003aeau, 0x0003003eu, 0x00002c51u, 0x00003aeau, 0x00050050u, 0x0000005fu, 0x00002f1eu, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002f1fu, 0x00002f1eu, 0x0003003eu, 0x00006b3fu, 0x00002bf6u, 0x0003003eu, 0x00006b40u, 0x00002bf9u, 0x0003003eu, 0x00002cd0u, 0x000020eau, 0x0003003eu, 0x00002cd1u, 0x00002f1fu, 0x0003003eu, 0x00002cd2u, 0x00002f00u, 0x00050041u, 0x00000007u, 0x00003af9u, 0x00002cd1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003afau, 0x00003af9u, 0x00050084u, 0x00000006u, 0x00003afbu, 0x00002bf9u, 0x00003afau, 0x00050080u, 0x00000006u, 0x00003afcu, 0x00002bf6u, 0x00003afbu, 0x0003003eu, 0x00003aebu, 0x00003afcu, 0x00050041u, 0x00000007u, 0x00003afeu, 0x00002cd1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003affu, 0x00003afeu, 0x00050080u, 0x00000006u, 0x00003b00u, 0x00003afcu, 0x00003affu, 0x0003003eu, 0x00003aecu, 0x00003b00u, 0x000500c7u, 0x00000006u, 0x00003b02u, 0x00003b00u, 0x00000efdu, 0x0003003eu, 0x00003aecu, 0x00003b02u, 0x00050080u, 0x00000006u, 0x00003b06u, 0x00003afcu, 0x00003a6fu, 0x0003003eu, 0x00003aedu, 0x00003b06u, 0x000500c7u, 0x00000006u, 0x00003b08u, 0x00003b06u, 0x00000efdu, 0x0003003eu, 0x00003aedu, 0x00003b08u, 0x0003003eu, 0x00003aeeu, 0x00003b02u, 0x0004003du, 0x00000006u, 0x00003b0bu, 0x00003af9u, 0x000500c7u, 0x00000006u, 0x00003b0cu, 0x00003b0bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b0du, 0x00003b0cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003b0fu, 0x00003b02u, 0x00003b0du, 0x0003003eu, 0x00003aeeu, 0x00003b0fu, 0x000500c6u, 0x00000006u, 0x00003b11u, 0x00003b0fu, 0x0000048bu, 0x0003003eu, 0x00003aeeu, 0x00003b11u, 0x000500c2u, 0x00000006u, 0x00003b13u, 0x00003b08u, 0x00000212u, 0x0003003eu, 0x00003aefu, 0x00003b13u, 0x0004003du, 0x00000006u, 0x00003b15u, 0x00003af9u, 0x000500c7u, 0x00000006u, 0x00003b16u, 0x00003b15u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b17u, 0x00003b16u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003b19u, 0x00003b13u, 0x00003b17u, 0x0003003eu, 0x00003aefu, 0x00003b19u, 0x000500c6u, 0x00000006u, 0x00003b1bu, 0x00003b19u, 0x00000485u, 0x0003003eu, 0x00003aefu, 0x00003b1bu, 0x000500c5u, 0x00000006u, 0x00003b1eu, 0x00003b11u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x00003b1fu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003b1eu, 0x0004003du, 0x00000229u, 0x00003b20u, 0x00003b1fu, 0x00040071u, 0x00000006u, 0x00003b21u, 0x00003b20u, 0x0004007cu, 0x00000008u, 0x00003b22u, 0x00003b21u, 0x0003003eu, 0x00003af0u, 0x00003b22u, 0x00080041u, 0x00000270u, 0x00003b25u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003b1bu, 0x0004003du, 0x0000022bu, 0x00003b26u, 0x00003b25u, 0x00040071u, 0x00000006u, 0x00003b27u, 0x00003b26u, 0x0004007cu, 0x00000008u, 0x00003b28u, 0x00003b27u, 0x0003003eu, 0x00003af1u, 0x00003b28u, 0x000500c3u, 0x00000008u, 0x00003b2au, 0x00003b28u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003b2bu, 0x00003b2au, 0x0000038bu, 0x0003003eu, 0x00003af2u, 0x00003b2bu, 0x000500c3u, 0x00000008u, 0x00003b2du, 0x00003b28u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003b2eu, 0x00003b2du, 0x0000038bu, 0x0003003eu, 0x00003af3u, 0x00003b2eu, 0x00050082u, 0x00000008u, 0x00003b30u, 0x00003b2bu, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003b32u, 0x00003b2eu, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003b35u, 0x00003b30u, 0x00003b32u, 0x00003b22u, 0x00003b22u, 0x0003003eu, 0x00003af4u, 0x00003b35u, 0x0003003eu, 0x00002c59u, 0x00003b35u, 0x000200f9u, 0x00002f0au, 0x000200f8u, 0x00002f0au, 0x000700f5u, 0x00000009u, 0x00008442u, 0x000083f8u, 0x00002e6cu, 0x00003b35u, 0x00002f0bu, 0x000700f5u, 0x00000009u, 0x000083c5u, 0x0000837eu, 0x00002e6cu, 0x00003aeau, 0x00002f0bu, 0x000700f5u, 0x00000009u, 0x000082cdu, 0x00008282u, 0x00002e6cu, 0x00003a9fu, 0x00002f0bu, 0x000200f9u, 0x00002e6au, 0x000200f8u, 0x00002e6bu, 0x000300f7u, 0x00002e72u, 0x00000000u, 0x000b00fbu, 0x00002c03u, 0x00002e72u, 0x00000000u, 0x00002e73u, 0x00000001u, 0x00002e74u, 0x00000002u, 0x00002e75u, 0x00000003u, 0x00002e76u, 0x000200f8u, 0x00002e76u, 0x0004007cu, 0x000000a2u, 0x00002ed8u, 0x00007ef8u, 0x0003003eu, 0x00006b23u, 0x00002bf6u, 0x0003003eu, 0x00006b24u, 0x00002bf9u, 0x0003003eu, 0x00002cb6u, 0x000020eau, 0x0003003eu, 0x00002cb7u, 0x00002ed8u, 0x00050041u, 0x00000007u, 0x0000393bu, 0x00002cb7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000393cu, 0x0000393bu, 0x00050084u, 0x00000006u, 0x0000393du, 0x00002bf9u, 0x0000393cu, 0x00050080u, 0x00000006u, 0x0000393eu, 0x00002bf6u, 0x0000393du, 0x0003003eu, 0x00003932u, 0x0000393eu, 0x00050041u, 0x00000007u, 0x0000393fu, 0x00002cb7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003940u, 0x0000393fu, 0x00050084u, 0x00000006u, 0x00003941u, 0x00003940u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003943u, 0x0000393eu, 0x00003941u, 0x0003003eu, 0x00003932u, 0x00003943u, 0x000500c7u, 0x00000006u, 0x00003945u, 0x00003943u, 0x00000efdu, 0x0003003eu, 0x00003932u, 0x00003945u, 0x000500c2u, 0x00000006u, 0x00003947u, 0x00003945u, 0x00000212u, 0x0003003eu, 0x00003933u, 0x00003947u, 0x0004003du, 0x00000006u, 0x00003949u, 0x0000393bu, 0x000500c7u, 0x00000006u, 0x0000394au, 0x00003949u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000394bu, 0x0000394au, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000394du, 0x00003947u, 0x0000394bu, 0x0003003eu, 0x00003933u, 0x0000394du, 0x000500c6u, 0x00000006u, 0x0000394fu, 0x0000394du, 0x00000485u, 0x0003003eu, 0x00003933u, 0x0000394fu, 0x00080041u, 0x00000270u, 0x00003952u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000394fu, 0x0004003du, 0x0000022bu, 0x00003953u, 0x00003952u, 0x00040071u, 0x00000006u, 0x00003954u, 0x00003953u, 0x0003003eu, 0x00003934u, 0x00003954u, 0x000500c5u, 0x00000006u, 0x00003957u, 0x0000394fu, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x00003958u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003957u, 0x0004003du, 0x0000022bu, 0x00003959u, 0x00003958u, 0x00040071u, 0x00000006u, 0x0000395au, 0x00003959u, 0x0003003eu, 0x00003935u, 0x0000395au, 0x000500c2u, 0x00000006u, 0x0000395cu, 0x00003954u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000395du, 0x0000395cu, 0x000500c7u, 0x00000006u, 0x0000395fu, 0x00003954u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003960u, 0x0000395fu, 0x000500c2u, 0x00000006u, 0x00003962u, 0x0000395au, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003963u, 0x00003962u, 0x000500c7u, 0x00000006u, 0x00003965u, 0x0000395au, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003966u, 0x00003965u, 0x00070050u, 0x00000009u, 0x00003967u, 0x0000395du, 0x00003960u, 0x00003963u, 0x00003966u, 0x0003003eu, 0x00003936u, 0x00003967u, 0x0003003eu, 0x00002c41u, 0x00003967u, 0x000300f7u, 0x00002eddu, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002edeu, 0x00002eddu, 0x000200f8u, 0x00002edeu, 0x00050050u, 0x0000005fu, 0x00002ee1u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002ee2u, 0x00002ee1u, 0x0003003eu, 0x00006b27u, 0x00002bf6u, 0x0003003eu, 0x00006b28u, 0x00002bf9u, 0x0003003eu, 0x00002cb9u, 0x000020eau, 0x0003003eu, 0x00002cbau, 0x00002ee2u, 0x00050041u, 0x00000007u, 0x00003971u, 0x00002cbau, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003972u, 0x00003971u, 0x00050084u, 0x00000006u, 0x00003973u, 0x00002bf9u, 0x00003972u, 0x00050080u, 0x00000006u, 0x00003974u, 0x00002bf6u, 0x00003973u, 0x0003003eu, 0x00003968u, 0x00003974u, 0x00050041u, 0x00000007u, 0x00003975u, 0x00002cbau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003976u, 0x00003975u, 0x00050084u, 0x00000006u, 0x00003977u, 0x00003976u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003979u, 0x00003974u, 0x00003977u, 0x0003003eu, 0x00003968u, 0x00003979u, 0x000500c7u, 0x00000006u, 0x0000397bu, 0x00003979u, 0x00000efdu, 0x0003003eu, 0x00003968u, 0x0000397bu, 0x000500c2u, 0x00000006u, 0x0000397du, 0x0000397bu, 0x00000212u, 0x0003003eu, 0x00003969u, 0x0000397du, 0x0004003du, 0x00000006u, 0x0000397fu, 0x00003971u, 0x000500c7u, 0x00000006u, 0x00003980u, 0x0000397fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003981u, 0x00003980u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003983u, 0x0000397du, 0x00003981u, 0x0003003eu, 0x00003969u, 0x00003983u, 0x000500c6u, 0x00000006u, 0x00003985u, 0x00003983u, 0x00000485u, 0x0003003eu, 0x00003969u, 0x00003985u, 0x00080041u, 0x00000270u, 0x00003988u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003985u, 0x0004003du, 0x0000022bu, 0x00003989u, 0x00003988u, 0x00040071u, 0x00000006u, 0x0000398au, 0x00003989u, 0x0003003eu, 0x0000396au, 0x0000398au, 0x000500c5u, 0x00000006u, 0x0000398du, 0x00003985u, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x0000398eu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000398du, 0x0004003du, 0x0000022bu, 0x0000398fu, 0x0000398eu, 0x00040071u, 0x00000006u, 0x00003990u, 0x0000398fu, 0x0003003eu, 0x0000396bu, 0x00003990u, 0x000500c2u, 0x00000006u, 0x00003992u, 0x0000398au, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003993u, 0x00003992u, 0x000500c7u, 0x00000006u, 0x00003995u, 0x0000398au, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003996u, 0x00003995u, 0x000500c2u, 0x00000006u, 0x00003998u, 0x00003990u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003999u, 0x00003998u, 0x000500c7u, 0x00000006u, 0x0000399bu, 0x00003990u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000399cu, 0x0000399bu, 0x00070050u, 0x00000009u, 0x0000399du, 0x00003993u, 0x00003996u, 0x00003999u, 0x0000399cu, 0x0003003eu, 0x0000396cu, 0x0000399du, 0x0003003eu, 0x00002c49u, 0x0000399du, 0x00050050u, 0x0000005fu, 0x00002ee8u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002ee9u, 0x00002ee8u, 0x0003003eu, 0x00006b2bu, 0x00002bf6u, 0x0003003eu, 0x00006b2cu, 0x00002bf9u, 0x0003003eu, 0x00002cbcu, 0x000020eau, 0x0003003eu, 0x00002cbdu, 0x00002ee9u, 0x00050041u, 0x00000007u, 0x000039a7u, 0x00002cbdu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000039a8u, 0x000039a7u, 0x00050084u, 0x00000006u, 0x000039a9u, 0x00002bf9u, 0x000039a8u, 0x00050080u, 0x00000006u, 0x000039aau, 0x00002bf6u, 0x000039a9u, 0x0003003eu, 0x0000399eu, 0x000039aau, 0x00050041u, 0x00000007u, 0x000039abu, 0x00002cbdu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000039acu, 0x000039abu, 0x00050084u, 0x00000006u, 0x000039adu, 0x000039acu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000039afu, 0x000039aau, 0x000039adu, 0x0003003eu, 0x0000399eu, 0x000039afu, 0x000500c7u, 0x00000006u, 0x000039b1u, 0x000039afu, 0x00000efdu, 0x0003003eu, 0x0000399eu, 0x000039b1u, 0x000500c2u, 0x00000006u, 0x000039b3u, 0x000039b1u, 0x00000212u, 0x0003003eu, 0x0000399fu, 0x000039b3u, 0x0004003du, 0x00000006u, 0x000039b5u, 0x000039a7u, 0x000500c7u, 0x00000006u, 0x000039b6u, 0x000039b5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000039b7u, 0x000039b6u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000039b9u, 0x000039b3u, 0x000039b7u, 0x0003003eu, 0x0000399fu, 0x000039b9u, 0x000500c6u, 0x00000006u, 0x000039bbu, 0x000039b9u, 0x00000485u, 0x0003003eu, 0x0000399fu, 0x000039bbu, 0x00080041u, 0x00000270u, 0x000039beu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000039bbu, 0x0004003du, 0x0000022bu, 0x000039bfu, 0x000039beu, 0x00040071u, 0x00000006u, 0x000039c0u, 0x000039bfu, 0x0003003eu, 0x000039a0u, 0x000039c0u, 0x000500c5u, 0x00000006u, 0x000039c3u, 0x000039bbu, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x000039c4u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000039c3u, 0x0004003du, 0x0000022bu, 0x000039c5u, 0x000039c4u, 0x00040071u, 0x00000006u, 0x000039c6u, 0x000039c5u, 0x0003003eu, 0x000039a1u, 0x000039c6u, 0x000500c2u, 0x00000006u, 0x000039c8u, 0x000039c0u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039c9u, 0x000039c8u, 0x000500c7u, 0x00000006u, 0x000039cbu, 0x000039c0u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000039ccu, 0x000039cbu, 0x000500c2u, 0x00000006u, 0x000039ceu, 0x000039c6u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039cfu, 0x000039ceu, 0x000500c7u, 0x00000006u, 0x000039d1u, 0x000039c6u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000039d2u, 0x000039d1u, 0x00070050u, 0x00000009u, 0x000039d3u, 0x000039c9u, 0x000039ccu, 0x000039cfu, 0x000039d2u, 0x0003003eu, 0x000039a2u, 0x000039d3u, 0x0003003eu, 0x00002c51u, 0x000039d3u, 0x000200f9u, 0x00002eddu, 0x000200f8u, 0x00002eddu, 0x000700f5u, 0x00000009u, 0x000083c4u, 0x0000837eu, 0x00002e76u, 0x000039d3u, 0x00002edeu, 0x000700f5u, 0x00000009u, 0x000082ccu, 0x00008282u, 0x00002e76u, 0x0000399du, 0x00002edeu, 0x000300f7u, 0x00002eeeu, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002eefu, 0x00002eeeu, 0x000200f8u, 0x00002eefu, 0x00050050u, 0x0000005fu, 0x00002ef2u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002ef3u, 0x00002ef2u, 0x0003003eu, 0x00006b2fu, 0x00002bf6u, 0x0003003eu, 0x00006b30u, 0x00002bf9u, 0x0003003eu, 0x00002cbfu, 0x000020eau, 0x0003003eu, 0x00002cc0u, 0x00002ef3u, 0x00050041u, 0x00000007u, 0x000039ddu, 0x00002cc0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000039deu, 0x000039ddu, 0x00050084u, 0x00000006u, 0x000039dfu, 0x00002bf9u, 0x000039deu, 0x00050080u, 0x00000006u, 0x000039e0u, 0x00002bf6u, 0x000039dfu, 0x0003003eu, 0x000039d4u, 0x000039e0u, 0x00050041u, 0x00000007u, 0x000039e1u, 0x00002cc0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000039e2u, 0x000039e1u, 0x00050084u, 0x00000006u, 0x000039e3u, 0x000039e2u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000039e5u, 0x000039e0u, 0x000039e3u, 0x0003003eu, 0x000039d4u, 0x000039e5u, 0x000500c7u, 0x00000006u, 0x000039e7u, 0x000039e5u, 0x00000efdu, 0x0003003eu, 0x000039d4u, 0x000039e7u, 0x000500c2u, 0x00000006u, 0x000039e9u, 0x000039e7u, 0x00000212u, 0x0003003eu, 0x000039d5u, 0x000039e9u, 0x0004003du, 0x00000006u, 0x000039ebu, 0x000039ddu, 0x000500c7u, 0x00000006u, 0x000039ecu, 0x000039ebu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000039edu, 0x000039ecu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000039efu, 0x000039e9u, 0x000039edu, 0x0003003eu, 0x000039d5u, 0x000039efu, 0x000500c6u, 0x00000006u, 0x000039f1u, 0x000039efu, 0x00000485u, 0x0003003eu, 0x000039d5u, 0x000039f1u, 0x00080041u, 0x00000270u, 0x000039f4u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000039f1u, 0x0004003du, 0x0000022bu, 0x000039f5u, 0x000039f4u, 0x00040071u, 0x00000006u, 0x000039f6u, 0x000039f5u, 0x0003003eu, 0x000039d6u, 0x000039f6u, 0x000500c5u, 0x00000006u, 0x000039f9u, 0x000039f1u, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x000039fau, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000039f9u, 0x0004003du, 0x0000022bu, 0x000039fbu, 0x000039fau, 0x00040071u, 0x00000006u, 0x000039fcu, 0x000039fbu, 0x0003003eu, 0x000039d7u, 0x000039fcu, 0x000500c2u, 0x00000006u, 0x000039feu, 0x000039f6u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039ffu, 0x000039feu, 0x000500c7u, 0x00000006u, 0x00003a01u, 0x000039f6u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003a02u, 0x00003a01u, 0x000500c2u, 0x00000006u, 0x00003a04u, 0x000039fcu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003a05u, 0x00003a04u, 0x000500c7u, 0x00000006u, 0x00003a07u, 0x000039fcu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003a08u, 0x00003a07u, 0x00070050u, 0x00000009u, 0x00003a09u, 0x000039ffu, 0x00003a02u, 0x00003a05u, 0x00003a08u, 0x0003003eu, 0x000039d8u, 0x00003a09u, 0x0003003eu, 0x00002c59u, 0x00003a09u, 0x000200f9u, 0x00002eeeu, 0x000200f8u, 0x00002eeeu, 0x000700f5u, 0x00000009u, 0x00008440u, 0x000083f8u, 0x00002eddu, 0x00003a09u, 0x00002eefu, 0x000200f9u, 0x00002e72u, 0x000200f8u, 0x00002e75u, 0x0004007cu, 0x000000a2u, 0x00002eb8u, 0x00007ef8u, 0x0003003eu, 0x00006b13u, 0x00002bf6u, 0x0003003eu, 0x00006b14u, 0x00002bf9u, 0x0003003eu, 0x00002caau, 0x000020eau, 0x0003003eu, 0x00002cabu, 0x00002eb8u, 0x00050041u, 0x00000007u, 0x0000383fu, 0x00002cabu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003840u, 0x0000383fu, 0x00050084u, 0x00000006u, 0x00003841u, 0x00002bf9u, 0x00003840u, 0x00050080u, 0x00000006u, 0x00003842u, 0x00002bf6u, 0x00003841u, 0x0003003eu, 0x00003836u, 0x00003842u, 0x00050041u, 0x00000007u, 0x00003843u, 0x00002cabu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003844u, 0x00003843u, 0x00050084u, 0x00000006u, 0x00003845u, 0x00003844u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003847u, 0x00003842u, 0x00003845u, 0x0003003eu, 0x00003836u, 0x00003847u, 0x000500c7u, 0x00000006u, 0x00003849u, 0x00003847u, 0x00000e4bu, 0x0003003eu, 0x00003836u, 0x00003849u, 0x000500c2u, 0x00000006u, 0x0000384bu, 0x00003849u, 0x00000212u, 0x0003003eu, 0x00003837u, 0x0000384bu, 0x0004003du, 0x00000006u, 0x0000384du, 0x0000383fu, 0x000500c7u, 0x00000006u, 0x0000384eu, 0x0000384du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000384fu, 0x0000384eu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003851u, 0x0000384bu, 0x0000384fu, 0x0003003eu, 0x00003837u, 0x00003851u, 0x000500c6u, 0x00000006u, 0x00003853u, 0x00003851u, 0x00000485u, 0x0003003eu, 0x00003837u, 0x00003853u, 0x00080041u, 0x00000270u, 0x00003856u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003853u, 0x0004003du, 0x0000022bu, 0x00003857u, 0x00003856u, 0x00040071u, 0x00000006u, 0x00003858u, 0x00003857u, 0x0003003eu, 0x00003838u, 0x00003858u, 0x0003003eu, 0x00003839u, 0x00003858u, 0x00060050u, 0x00000353u, 0x0000385fu, 0x00003858u, 0x00003858u, 0x00003858u, 0x000500c2u, 0x00000353u, 0x00003860u, 0x0000385fu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00003862u, 0x00003860u, 0x0000eebdu, 0x0003003eu, 0x0000385bu, 0x00003862u, 0x000500c4u, 0x00000353u, 0x00003865u, 0x00003862u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003868u, 0x00003862u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003869u, 0x00003865u, 0x00003868u, 0x0003003eu, 0x0000385bu, 0x00003869u, 0x000500c7u, 0x00000006u, 0x0000386bu, 0x00003858u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000386cu, 0x0000386bu, 0x000006c2u, 0x0003003eu, 0x0000385cu, 0x0000386cu, 0x0004007cu, 0x0000003cu, 0x0000386eu, 0x00003869u, 0x0004007cu, 0x00000008u, 0x00003870u, 0x0000386cu, 0x00050051u, 0x00000008u, 0x00003871u, 0x0000386eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003872u, 0x0000386eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003873u, 0x0000386eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003874u, 0x00003871u, 0x00003872u, 0x00003873u, 0x00003870u, 0x0003003eu, 0x0000385du, 0x00003874u, 0x0003003eu, 0x0000383au, 0x00003874u, 0x0003003eu, 0x00002c41u, 0x00003874u, 0x000300f7u, 0x00002ebdu, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002ebeu, 0x00002ebdu, 0x000200f8u, 0x00002ebeu, 0x00050050u, 0x0000005fu, 0x00002ec1u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002ec2u, 0x00002ec1u, 0x0003003eu, 0x00006b17u, 0x00002bf6u, 0x0003003eu, 0x00006b18u, 0x00002bf9u, 0x0003003eu, 0x00002cadu, 0x000020eau, 0x0003003eu, 0x00002caeu, 0x00002ec2u, 0x00050041u, 0x00000007u, 0x0000387eu, 0x00002caeu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000387fu, 0x0000387eu, 0x00050084u, 0x00000006u, 0x00003880u, 0x00002bf9u, 0x0000387fu, 0x00050080u, 0x00000006u, 0x00003881u, 0x00002bf6u, 0x00003880u, 0x0003003eu, 0x00003875u, 0x00003881u, 0x00050041u, 0x00000007u, 0x00003882u, 0x00002caeu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003883u, 0x00003882u, 0x00050084u, 0x00000006u, 0x00003884u, 0x00003883u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003886u, 0x00003881u, 0x00003884u, 0x0003003eu, 0x00003875u, 0x00003886u, 0x000500c7u, 0x00000006u, 0x00003888u, 0x00003886u, 0x00000e4bu, 0x0003003eu, 0x00003875u, 0x00003888u, 0x000500c2u, 0x00000006u, 0x0000388au, 0x00003888u, 0x00000212u, 0x0003003eu, 0x00003876u, 0x0000388au, 0x0004003du, 0x00000006u, 0x0000388cu, 0x0000387eu, 0x000500c7u, 0x00000006u, 0x0000388du, 0x0000388cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000388eu, 0x0000388du, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003890u, 0x0000388au, 0x0000388eu, 0x0003003eu, 0x00003876u, 0x00003890u, 0x000500c6u, 0x00000006u, 0x00003892u, 0x00003890u, 0x00000485u, 0x0003003eu, 0x00003876u, 0x00003892u, 0x00080041u, 0x00000270u, 0x00003895u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003892u, 0x0004003du, 0x0000022bu, 0x00003896u, 0x00003895u, 0x00040071u, 0x00000006u, 0x00003897u, 0x00003896u, 0x0003003eu, 0x00003877u, 0x00003897u, 0x0003003eu, 0x00003878u, 0x00003897u, 0x00060050u, 0x00000353u, 0x0000389eu, 0x00003897u, 0x00003897u, 0x00003897u, 0x000500c2u, 0x00000353u, 0x0000389fu, 0x0000389eu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000038a1u, 0x0000389fu, 0x0000eebdu, 0x0003003eu, 0x0000389au, 0x000038a1u, 0x000500c4u, 0x00000353u, 0x000038a4u, 0x000038a1u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000038a7u, 0x000038a1u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000038a8u, 0x000038a4u, 0x000038a7u, 0x0003003eu, 0x0000389au, 0x000038a8u, 0x000500c7u, 0x00000006u, 0x000038aau, 0x00003897u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000038abu, 0x000038aau, 0x000006c2u, 0x0003003eu, 0x0000389bu, 0x000038abu, 0x0004007cu, 0x0000003cu, 0x000038adu, 0x000038a8u, 0x0004007cu, 0x00000008u, 0x000038afu, 0x000038abu, 0x00050051u, 0x00000008u, 0x000038b0u, 0x000038adu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000038b1u, 0x000038adu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000038b2u, 0x000038adu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000038b3u, 0x000038b0u, 0x000038b1u, 0x000038b2u, 0x000038afu, 0x0003003eu, 0x0000389cu, 0x000038b3u, 0x0003003eu, 0x00003879u, 0x000038b3u, 0x0003003eu, 0x00002c49u, 0x000038b3u, 0x00050050u, 0x0000005fu, 0x00002ec8u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002ec9u, 0x00002ec8u, 0x0003003eu, 0x00006b1bu, 0x00002bf6u, 0x0003003eu, 0x00006b1cu, 0x00002bf9u, 0x0003003eu, 0x00002cb0u, 0x000020eau, 0x0003003eu, 0x00002cb1u, 0x00002ec9u, 0x00050041u, 0x00000007u, 0x000038bdu, 0x00002cb1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000038beu, 0x000038bdu, 0x00050084u, 0x00000006u, 0x000038bfu, 0x00002bf9u, 0x000038beu, 0x00050080u, 0x00000006u, 0x000038c0u, 0x00002bf6u, 0x000038bfu, 0x0003003eu, 0x000038b4u, 0x000038c0u, 0x00050041u, 0x00000007u, 0x000038c1u, 0x00002cb1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000038c2u, 0x000038c1u, 0x00050084u, 0x00000006u, 0x000038c3u, 0x000038c2u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000038c5u, 0x000038c0u, 0x000038c3u, 0x0003003eu, 0x000038b4u, 0x000038c5u, 0x000500c7u, 0x00000006u, 0x000038c7u, 0x000038c5u, 0x00000e4bu, 0x0003003eu, 0x000038b4u, 0x000038c7u, 0x000500c2u, 0x00000006u, 0x000038c9u, 0x000038c7u, 0x00000212u, 0x0003003eu, 0x000038b5u, 0x000038c9u, 0x0004003du, 0x00000006u, 0x000038cbu, 0x000038bdu, 0x000500c7u, 0x00000006u, 0x000038ccu, 0x000038cbu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000038cdu, 0x000038ccu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000038cfu, 0x000038c9u, 0x000038cdu, 0x0003003eu, 0x000038b5u, 0x000038cfu, 0x000500c6u, 0x00000006u, 0x000038d1u, 0x000038cfu, 0x00000485u, 0x0003003eu, 0x000038b5u, 0x000038d1u, 0x00080041u, 0x00000270u, 0x000038d4u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000038d1u, 0x0004003du, 0x0000022bu, 0x000038d5u, 0x000038d4u, 0x00040071u, 0x00000006u, 0x000038d6u, 0x000038d5u, 0x0003003eu, 0x000038b6u, 0x000038d6u, 0x0003003eu, 0x000038b7u, 0x000038d6u, 0x00060050u, 0x00000353u, 0x000038ddu, 0x000038d6u, 0x000038d6u, 0x000038d6u, 0x000500c2u, 0x00000353u, 0x000038deu, 0x000038ddu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000038e0u, 0x000038deu, 0x0000eebdu, 0x0003003eu, 0x000038d9u, 0x000038e0u, 0x000500c4u, 0x00000353u, 0x000038e3u, 0x000038e0u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000038e6u, 0x000038e0u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000038e7u, 0x000038e3u, 0x000038e6u, 0x0003003eu, 0x000038d9u, 0x000038e7u, 0x000500c7u, 0x00000006u, 0x000038e9u, 0x000038d6u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000038eau, 0x000038e9u, 0x000006c2u, 0x0003003eu, 0x000038dau, 0x000038eau, 0x0004007cu, 0x0000003cu, 0x000038ecu, 0x000038e7u, 0x0004007cu, 0x00000008u, 0x000038eeu, 0x000038eau, 0x00050051u, 0x00000008u, 0x000038efu, 0x000038ecu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000038f0u, 0x000038ecu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000038f1u, 0x000038ecu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000038f2u, 0x000038efu, 0x000038f0u, 0x000038f1u, 0x000038eeu, 0x0003003eu, 0x000038dbu, 0x000038f2u, 0x0003003eu, 0x000038b8u, 0x000038f2u, 0x0003003eu, 0x00002c51u, 0x000038f2u, 0x000200f9u, 0x00002ebdu, 0x000200f8u, 0x00002ebdu, 0x000700f5u, 0x00000009u, 0x000083c2u, 0x0000837eu, 0x00002e75u, 0x000038f2u, 0x00002ebeu, 0x000700f5u, 0x00000009u, 0x000082cau, 0x00008282u, 0x00002e75u, 0x000038b3u, 0x00002ebeu, 0x000300f7u, 0x00002eceu, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002ecfu, 0x00002eceu, 0x000200f8u, 0x00002ecfu, 0x00050050u, 0x0000005fu, 0x00002ed2u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002ed3u, 0x00002ed2u, 0x0003003eu, 0x00006b1fu, 0x00002bf6u, 0x0003003eu, 0x00006b20u, 0x00002bf9u, 0x0003003eu, 0x00002cb3u, 0x000020eau, 0x0003003eu, 0x00002cb4u, 0x00002ed3u, 0x00050041u, 0x00000007u, 0x000038fcu, 0x00002cb4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000038fdu, 0x000038fcu, 0x00050084u, 0x00000006u, 0x000038feu, 0x00002bf9u, 0x000038fdu, 0x00050080u, 0x00000006u, 0x000038ffu, 0x00002bf6u, 0x000038feu, 0x0003003eu, 0x000038f3u, 0x000038ffu, 0x00050041u, 0x00000007u, 0x00003900u, 0x00002cb4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003901u, 0x00003900u, 0x00050084u, 0x00000006u, 0x00003902u, 0x00003901u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003904u, 0x000038ffu, 0x00003902u, 0x0003003eu, 0x000038f3u, 0x00003904u, 0x000500c7u, 0x00000006u, 0x00003906u, 0x00003904u, 0x00000e4bu, 0x0003003eu, 0x000038f3u, 0x00003906u, 0x000500c2u, 0x00000006u, 0x00003908u, 0x00003906u, 0x00000212u, 0x0003003eu, 0x000038f4u, 0x00003908u, 0x0004003du, 0x00000006u, 0x0000390au, 0x000038fcu, 0x000500c7u, 0x00000006u, 0x0000390bu, 0x0000390au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000390cu, 0x0000390bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000390eu, 0x00003908u, 0x0000390cu, 0x0003003eu, 0x000038f4u, 0x0000390eu, 0x000500c6u, 0x00000006u, 0x00003910u, 0x0000390eu, 0x00000485u, 0x0003003eu, 0x000038f4u, 0x00003910u, 0x00080041u, 0x00000270u, 0x00003913u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003910u, 0x0004003du, 0x0000022bu, 0x00003914u, 0x00003913u, 0x00040071u, 0x00000006u, 0x00003915u, 0x00003914u, 0x0003003eu, 0x000038f5u, 0x00003915u, 0x0003003eu, 0x000038f6u, 0x00003915u, 0x00060050u, 0x00000353u, 0x0000391cu, 0x00003915u, 0x00003915u, 0x00003915u, 0x000500c2u, 0x00000353u, 0x0000391du, 0x0000391cu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x0000391fu, 0x0000391du, 0x0000eebdu, 0x0003003eu, 0x00003918u, 0x0000391fu, 0x000500c4u, 0x00000353u, 0x00003922u, 0x0000391fu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003925u, 0x0000391fu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003926u, 0x00003922u, 0x00003925u, 0x0003003eu, 0x00003918u, 0x00003926u, 0x000500c7u, 0x00000006u, 0x00003928u, 0x00003915u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003929u, 0x00003928u, 0x000006c2u, 0x0003003eu, 0x00003919u, 0x00003929u, 0x0004007cu, 0x0000003cu, 0x0000392bu, 0x00003926u, 0x0004007cu, 0x00000008u, 0x0000392du, 0x00003929u, 0x00050051u, 0x00000008u, 0x0000392eu, 0x0000392bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000392fu, 0x0000392bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003930u, 0x0000392bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003931u, 0x0000392eu, 0x0000392fu, 0x00003930u, 0x0000392du, 0x0003003eu, 0x0000391au, 0x00003931u, 0x0003003eu, 0x000038f7u, 0x00003931u, 0x0003003eu, 0x00002c59u, 0x00003931u, 0x000200f9u, 0x00002eceu, 0x000200f8u, 0x00002eceu, 0x000700f5u, 0x00000009u, 0x0000843eu, 0x000083f8u, 0x00002ebdu, 0x00003931u, 0x00002ecfu, 0x000200f9u, 0x00002e72u, 0x000200f8u, 0x00002e74u, 0x0004007cu, 0x000000a2u, 0x00002e98u, 0x00007ef8u, 0x0003003eu, 0x00006b03u, 0x00002bf6u, 0x0003003eu, 0x00006b04u, 0x00002bf9u, 0x0003003eu, 0x00002c9eu, 0x000020eau, 0x0003003eu, 0x00002c9fu, 0x00002e98u, 0x00050041u, 0x00000007u, 0x000037b2u, 0x00002c9fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000037b3u, 0x000037b2u, 0x00050084u, 0x00000006u, 0x000037b4u, 0x00002bf9u, 0x000037b3u, 0x00050080u, 0x00000006u, 0x000037b5u, 0x00002bf6u, 0x000037b4u, 0x0003003eu, 0x000037aau, 0x000037b5u, 0x00050041u, 0x00000007u, 0x000037b6u, 0x00002c9fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000037b7u, 0x000037b6u, 0x00050080u, 0x00000006u, 0x000037b9u, 0x000037b5u, 0x000037b7u, 0x0003003eu, 0x000037aau, 0x000037b9u, 0x000500c7u, 0x00000006u, 0x000037bbu, 0x000037b9u, 0x00000e4bu, 0x0003003eu, 0x000037aau, 0x000037bbu, 0x0003003eu, 0x000037abu, 0x000037bbu, 0x0004003du, 0x00000006u, 0x000037beu, 0x000037b2u, 0x000500c7u, 0x00000006u, 0x000037bfu, 0x000037beu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000037c0u, 0x000037bfu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000037c2u, 0x000037bbu, 0x000037c0u, 0x0003003eu, 0x000037abu, 0x000037c2u, 0x000500c6u, 0x00000006u, 0x000037c4u, 0x000037c2u, 0x0000048bu, 0x0003003eu, 0x000037abu, 0x000037c4u, 0x00080041u, 0x00000277u, 0x000037c7u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000037c4u, 0x0004003du, 0x00000229u, 0x000037c8u, 0x000037c7u, 0x00040071u, 0x00000006u, 0x000037c9u, 0x000037c8u, 0x0003003eu, 0x000037acu, 0x000037c9u, 0x0004007cu, 0x00000008u, 0x000037cbu, 0x000037c9u, 0x00070050u, 0x00000009u, 0x000037ccu, 0x000037cbu, 0x000037cbu, 0x000037cbu, 0x000037cbu, 0x0003003eu, 0x000037adu, 0x000037ccu, 0x0003003eu, 0x00002c41u, 0x000037ccu, 0x000300f7u, 0x00002e9du, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002e9eu, 0x00002e9du, 0x000200f8u, 0x00002e9eu, 0x00050050u, 0x0000005fu, 0x00002ea1u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002ea2u, 0x00002ea1u, 0x0003003eu, 0x00006b07u, 0x00002bf6u, 0x0003003eu, 0x00006b08u, 0x00002bf9u, 0x0003003eu, 0x00002ca1u, 0x000020eau, 0x0003003eu, 0x00002ca2u, 0x00002ea2u, 0x00050041u, 0x00000007u, 0x000037d5u, 0x00002ca2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000037d6u, 0x000037d5u, 0x00050084u, 0x00000006u, 0x000037d7u, 0x00002bf9u, 0x000037d6u, 0x00050080u, 0x00000006u, 0x000037d8u, 0x00002bf6u, 0x000037d7u, 0x0003003eu, 0x000037cdu, 0x000037d8u, 0x00050041u, 0x00000007u, 0x000037d9u, 0x00002ca2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000037dau, 0x000037d9u, 0x00050080u, 0x00000006u, 0x000037dcu, 0x000037d8u, 0x000037dau, 0x0003003eu, 0x000037cdu, 0x000037dcu, 0x000500c7u, 0x00000006u, 0x000037deu, 0x000037dcu, 0x00000e4bu, 0x0003003eu, 0x000037cdu, 0x000037deu, 0x0003003eu, 0x000037ceu, 0x000037deu, 0x0004003du, 0x00000006u, 0x000037e1u, 0x000037d5u, 0x000500c7u, 0x00000006u, 0x000037e2u, 0x000037e1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000037e3u, 0x000037e2u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000037e5u, 0x000037deu, 0x000037e3u, 0x0003003eu, 0x000037ceu, 0x000037e5u, 0x000500c6u, 0x00000006u, 0x000037e7u, 0x000037e5u, 0x0000048bu, 0x0003003eu, 0x000037ceu, 0x000037e7u, 0x00080041u, 0x00000277u, 0x000037eau, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000037e7u, 0x0004003du, 0x00000229u, 0x000037ebu, 0x000037eau, 0x00040071u, 0x00000006u, 0x000037ecu, 0x000037ebu, 0x0003003eu, 0x000037cfu, 0x000037ecu, 0x0004007cu, 0x00000008u, 0x000037eeu, 0x000037ecu, 0x00070050u, 0x00000009u, 0x000037efu, 0x000037eeu, 0x000037eeu, 0x000037eeu, 0x000037eeu, 0x0003003eu, 0x000037d0u, 0x000037efu, 0x0003003eu, 0x00002c49u, 0x000037efu, 0x00050050u, 0x0000005fu, 0x00002ea8u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002ea9u, 0x00002ea8u, 0x0003003eu, 0x00006b0bu, 0x00002bf6u, 0x0003003eu, 0x00006b0cu, 0x00002bf9u, 0x0003003eu, 0x00002ca4u, 0x000020eau, 0x0003003eu, 0x00002ca5u, 0x00002ea9u, 0x00050041u, 0x00000007u, 0x000037f8u, 0x00002ca5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000037f9u, 0x000037f8u, 0x00050084u, 0x00000006u, 0x000037fau, 0x00002bf9u, 0x000037f9u, 0x00050080u, 0x00000006u, 0x000037fbu, 0x00002bf6u, 0x000037fau, 0x0003003eu, 0x000037f0u, 0x000037fbu, 0x00050041u, 0x00000007u, 0x000037fcu, 0x00002ca5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000037fdu, 0x000037fcu, 0x00050080u, 0x00000006u, 0x000037ffu, 0x000037fbu, 0x000037fdu, 0x0003003eu, 0x000037f0u, 0x000037ffu, 0x000500c7u, 0x00000006u, 0x00003801u, 0x000037ffu, 0x00000e4bu, 0x0003003eu, 0x000037f0u, 0x00003801u, 0x0003003eu, 0x000037f1u, 0x00003801u, 0x0004003du, 0x00000006u, 0x00003804u, 0x000037f8u, 0x000500c7u, 0x00000006u, 0x00003805u, 0x00003804u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003806u, 0x00003805u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003808u, 0x00003801u, 0x00003806u, 0x0003003eu, 0x000037f1u, 0x00003808u, 0x000500c6u, 0x00000006u, 0x0000380au, 0x00003808u, 0x0000048bu, 0x0003003eu, 0x000037f1u, 0x0000380au, 0x00080041u, 0x00000277u, 0x0000380du, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000380au, 0x0004003du, 0x00000229u, 0x0000380eu, 0x0000380du, 0x00040071u, 0x00000006u, 0x0000380fu, 0x0000380eu, 0x0003003eu, 0x000037f2u, 0x0000380fu, 0x0004007cu, 0x00000008u, 0x00003811u, 0x0000380fu, 0x00070050u, 0x00000009u, 0x00003812u, 0x00003811u, 0x00003811u, 0x00003811u, 0x00003811u, 0x0003003eu, 0x000037f3u, 0x00003812u, 0x0003003eu, 0x00002c51u, 0x00003812u, 0x000200f9u, 0x00002e9du, 0x000200f8u, 0x00002e9du, 0x000700f5u, 0x00000009u, 0x000083c0u, 0x0000837eu, 0x00002e74u, 0x00003812u, 0x00002e9eu, 0x000700f5u, 0x00000009u, 0x000082c8u, 0x00008282u, 0x00002e74u, 0x000037efu, 0x00002e9eu, 0x000300f7u, 0x00002eaeu, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002eafu, 0x00002eaeu, 0x000200f8u, 0x00002eafu, 0x00050050u, 0x0000005fu, 0x00002eb2u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002eb3u, 0x00002eb2u, 0x0003003eu, 0x00006b0fu, 0x00002bf6u, 0x0003003eu, 0x00006b10u, 0x00002bf9u, 0x0003003eu, 0x00002ca7u, 0x000020eau, 0x0003003eu, 0x00002ca8u, 0x00002eb3u, 0x00050041u, 0x00000007u, 0x0000381bu, 0x00002ca8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000381cu, 0x0000381bu, 0x00050084u, 0x00000006u, 0x0000381du, 0x00002bf9u, 0x0000381cu, 0x00050080u, 0x00000006u, 0x0000381eu, 0x00002bf6u, 0x0000381du, 0x0003003eu, 0x00003813u, 0x0000381eu, 0x00050041u, 0x00000007u, 0x0000381fu, 0x00002ca8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003820u, 0x0000381fu, 0x00050080u, 0x00000006u, 0x00003822u, 0x0000381eu, 0x00003820u, 0x0003003eu, 0x00003813u, 0x00003822u, 0x000500c7u, 0x00000006u, 0x00003824u, 0x00003822u, 0x00000e4bu, 0x0003003eu, 0x00003813u, 0x00003824u, 0x0003003eu, 0x00003814u, 0x00003824u, 0x0004003du, 0x00000006u, 0x00003827u, 0x0000381bu, 0x000500c7u, 0x00000006u, 0x00003828u, 0x00003827u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003829u, 0x00003828u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000382bu, 0x00003824u, 0x00003829u, 0x0003003eu, 0x00003814u, 0x0000382bu, 0x000500c6u, 0x00000006u, 0x0000382du, 0x0000382bu, 0x0000048bu, 0x0003003eu, 0x00003814u, 0x0000382du, 0x00080041u, 0x00000277u, 0x00003830u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000382du, 0x0004003du, 0x00000229u, 0x00003831u, 0x00003830u, 0x00040071u, 0x00000006u, 0x00003832u, 0x00003831u, 0x0003003eu, 0x00003815u, 0x00003832u, 0x0004007cu, 0x00000008u, 0x00003834u, 0x00003832u, 0x00070050u, 0x00000009u, 0x00003835u, 0x00003834u, 0x00003834u, 0x00003834u, 0x00003834u, 0x0003003eu, 0x00003816u, 0x00003835u, 0x0003003eu, 0x00002c59u, 0x00003835u, 0x000200f9u, 0x00002eaeu, 0x000200f8u, 0x00002eaeu, 0x000700f5u, 0x00000009u, 0x0000843cu, 0x000083f8u, 0x00002e9du, 0x00003835u, 0x00002eafu, 0x000200f9u, 0x00002e72u, 0x000200f8u, 0x00002e73u, 0x0004007cu, 0x000000a2u, 0x00002e78u, 0x00007ef8u, 0x0003003eu, 0x00006af3u, 0x00002bf6u, 0x0003003eu, 0x00006af4u, 0x00002bf9u, 0x0003003eu, 0x00002c92u, 0x000020eau, 0x0003003eu, 0x00002c93u, 0x00002e78u, 0x00050041u, 0x00000007u, 0x000036ebu, 0x00002c93u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000036ecu, 0x000036ebu, 0x00050084u, 0x00000006u, 0x000036edu, 0x00002bf9u, 0x000036ecu, 0x00050080u, 0x00000006u, 0x000036eeu, 0x00002bf6u, 0x000036edu, 0x0003003eu, 0x000036e2u, 0x000036eeu, 0x00050041u, 0x00000007u, 0x000036efu, 0x00002c93u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000036f0u, 0x000036efu, 0x000500c2u, 0x00000006u, 0x000036f1u, 0x000036f0u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000036f3u, 0x000036eeu, 0x000036f1u, 0x0003003eu, 0x000036e2u, 0x000036f3u, 0x000500c7u, 0x00000006u, 0x000036f5u, 0x000036f3u, 0x00000e4bu, 0x0003003eu, 0x000036e2u, 0x000036f5u, 0x0004003du, 0x00000006u, 0x000036f7u, 0x000036efu, 0x000400c8u, 0x00000006u, 0x000036f8u, 0x000036f7u, 0x000500c7u, 0x00000006u, 0x000036f9u, 0x000036f8u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000036fau, 0x000036f9u, 0x00000701u, 0x0003003eu, 0x000036e3u, 0x000036fau, 0x0003003eu, 0x000036e4u, 0x000036f5u, 0x0004003du, 0x00000006u, 0x000036fdu, 0x000036ebu, 0x000500c7u, 0x00000006u, 0x000036feu, 0x000036fdu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000036ffu, 0x000036feu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003701u, 0x000036f5u, 0x000036ffu, 0x0003003eu, 0x000036e4u, 0x00003701u, 0x000500c6u, 0x00000006u, 0x00003703u, 0x00003701u, 0x0000048bu, 0x0003003eu, 0x000036e4u, 0x00003703u, 0x00080041u, 0x00000277u, 0x00003706u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003703u, 0x0004003du, 0x00000229u, 0x00003707u, 0x00003706u, 0x00040071u, 0x00000006u, 0x00003708u, 0x00003707u, 0x0003003eu, 0x000036e5u, 0x00003708u, 0x000500c2u, 0x00000006u, 0x0000370bu, 0x00003708u, 0x000036fau, 0x000500c7u, 0x00000006u, 0x0000370cu, 0x0000370bu, 0x00000e6eu, 0x0003003eu, 0x000036e5u, 0x0000370cu, 0x000500c4u, 0x00000006u, 0x0000370eu, 0x0000370cu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003710u, 0x0000370cu, 0x0000370eu, 0x0003003eu, 0x000036e5u, 0x00003710u, 0x0004007cu, 0x00000008u, 0x00003712u, 0x00003710u, 0x00070050u, 0x00000009u, 0x00003713u, 0x00003712u, 0x00003712u, 0x00003712u, 0x00003712u, 0x0003003eu, 0x000036e6u, 0x00003713u, 0x0003003eu, 0x00002c41u, 0x00003713u, 0x000300f7u, 0x00002e7du, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002e7eu, 0x00002e7du, 0x000200f8u, 0x00002e7eu, 0x00050050u, 0x0000005fu, 0x00002e81u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002e82u, 0x00002e81u, 0x0003003eu, 0x00006af7u, 0x00002bf6u, 0x0003003eu, 0x00006af8u, 0x00002bf9u, 0x0003003eu, 0x00002c95u, 0x000020eau, 0x0003003eu, 0x00002c96u, 0x00002e82u, 0x00050041u, 0x00000007u, 0x0000371du, 0x00002c96u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000371eu, 0x0000371du, 0x00050084u, 0x00000006u, 0x0000371fu, 0x00002bf9u, 0x0000371eu, 0x00050080u, 0x00000006u, 0x00003720u, 0x00002bf6u, 0x0000371fu, 0x0003003eu, 0x00003714u, 0x00003720u, 0x00050041u, 0x00000007u, 0x00003721u, 0x00002c96u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003722u, 0x00003721u, 0x000500c2u, 0x00000006u, 0x00003723u, 0x00003722u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003725u, 0x00003720u, 0x00003723u, 0x0003003eu, 0x00003714u, 0x00003725u, 0x000500c7u, 0x00000006u, 0x00003727u, 0x00003725u, 0x00000e4bu, 0x0003003eu, 0x00003714u, 0x00003727u, 0x0004003du, 0x00000006u, 0x00003729u, 0x00003721u, 0x000400c8u, 0x00000006u, 0x0000372au, 0x00003729u, 0x000500c7u, 0x00000006u, 0x0000372bu, 0x0000372au, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000372cu, 0x0000372bu, 0x00000701u, 0x0003003eu, 0x00003715u, 0x0000372cu, 0x0003003eu, 0x00003716u, 0x00003727u, 0x0004003du, 0x00000006u, 0x0000372fu, 0x0000371du, 0x000500c7u, 0x00000006u, 0x00003730u, 0x0000372fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003731u, 0x00003730u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003733u, 0x00003727u, 0x00003731u, 0x0003003eu, 0x00003716u, 0x00003733u, 0x000500c6u, 0x00000006u, 0x00003735u, 0x00003733u, 0x0000048bu, 0x0003003eu, 0x00003716u, 0x00003735u, 0x00080041u, 0x00000277u, 0x00003738u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003735u, 0x0004003du, 0x00000229u, 0x00003739u, 0x00003738u, 0x00040071u, 0x00000006u, 0x0000373au, 0x00003739u, 0x0003003eu, 0x00003717u, 0x0000373au, 0x000500c2u, 0x00000006u, 0x0000373du, 0x0000373au, 0x0000372cu, 0x000500c7u, 0x00000006u, 0x0000373eu, 0x0000373du, 0x00000e6eu, 0x0003003eu, 0x00003717u, 0x0000373eu, 0x000500c4u, 0x00000006u, 0x00003740u, 0x0000373eu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003742u, 0x0000373eu, 0x00003740u, 0x0003003eu, 0x00003717u, 0x00003742u, 0x0004007cu, 0x00000008u, 0x00003744u, 0x00003742u, 0x00070050u, 0x00000009u, 0x00003745u, 0x00003744u, 0x00003744u, 0x00003744u, 0x00003744u, 0x0003003eu, 0x00003718u, 0x00003745u, 0x0003003eu, 0x00002c49u, 0x00003745u, 0x00050050u, 0x0000005fu, 0x00002e88u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e89u, 0x00002e88u, 0x0003003eu, 0x00006afbu, 0x00002bf6u, 0x0003003eu, 0x00006afcu, 0x00002bf9u, 0x0003003eu, 0x00002c98u, 0x000020eau, 0x0003003eu, 0x00002c99u, 0x00002e89u, 0x00050041u, 0x00000007u, 0x0000374fu, 0x00002c99u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003750u, 0x0000374fu, 0x00050084u, 0x00000006u, 0x00003751u, 0x00002bf9u, 0x00003750u, 0x00050080u, 0x00000006u, 0x00003752u, 0x00002bf6u, 0x00003751u, 0x0003003eu, 0x00003746u, 0x00003752u, 0x00050041u, 0x00000007u, 0x00003753u, 0x00002c99u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003754u, 0x00003753u, 0x000500c2u, 0x00000006u, 0x00003755u, 0x00003754u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003757u, 0x00003752u, 0x00003755u, 0x0003003eu, 0x00003746u, 0x00003757u, 0x000500c7u, 0x00000006u, 0x00003759u, 0x00003757u, 0x00000e4bu, 0x0003003eu, 0x00003746u, 0x00003759u, 0x0004003du, 0x00000006u, 0x0000375bu, 0x00003753u, 0x000400c8u, 0x00000006u, 0x0000375cu, 0x0000375bu, 0x000500c7u, 0x00000006u, 0x0000375du, 0x0000375cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000375eu, 0x0000375du, 0x00000701u, 0x0003003eu, 0x00003747u, 0x0000375eu, 0x0003003eu, 0x00003748u, 0x00003759u, 0x0004003du, 0x00000006u, 0x00003761u, 0x0000374fu, 0x000500c7u, 0x00000006u, 0x00003762u, 0x00003761u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003763u, 0x00003762u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003765u, 0x00003759u, 0x00003763u, 0x0003003eu, 0x00003748u, 0x00003765u, 0x000500c6u, 0x00000006u, 0x00003767u, 0x00003765u, 0x0000048bu, 0x0003003eu, 0x00003748u, 0x00003767u, 0x00080041u, 0x00000277u, 0x0000376au, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003767u, 0x0004003du, 0x00000229u, 0x0000376bu, 0x0000376au, 0x00040071u, 0x00000006u, 0x0000376cu, 0x0000376bu, 0x0003003eu, 0x00003749u, 0x0000376cu, 0x000500c2u, 0x00000006u, 0x0000376fu, 0x0000376cu, 0x0000375eu, 0x000500c7u, 0x00000006u, 0x00003770u, 0x0000376fu, 0x00000e6eu, 0x0003003eu, 0x00003749u, 0x00003770u, 0x000500c4u, 0x00000006u, 0x00003772u, 0x00003770u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003774u, 0x00003770u, 0x00003772u, 0x0003003eu, 0x00003749u, 0x00003774u, 0x0004007cu, 0x00000008u, 0x00003776u, 0x00003774u, 0x00070050u, 0x00000009u, 0x00003777u, 0x00003776u, 0x00003776u, 0x00003776u, 0x00003776u, 0x0003003eu, 0x0000374au, 0x00003777u, 0x0003003eu, 0x00002c51u, 0x00003777u, 0x000200f9u, 0x00002e7du, 0x000200f8u, 0x00002e7du, 0x000700f5u, 0x00000009u, 0x000083beu, 0x0000837eu, 0x00002e73u, 0x00003777u, 0x00002e7eu, 0x000700f5u, 0x00000009u, 0x000082c6u, 0x00008282u, 0x00002e73u, 0x00003745u, 0x00002e7eu, 0x000300f7u, 0x00002e8eu, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002e8fu, 0x00002e8eu, 0x000200f8u, 0x00002e8fu, 0x00050050u, 0x0000005fu, 0x00002e92u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e93u, 0x00002e92u, 0x0003003eu, 0x00006affu, 0x00002bf6u, 0x0003003eu, 0x00006b00u, 0x00002bf9u, 0x0003003eu, 0x00002c9bu, 0x000020eau, 0x0003003eu, 0x00002c9cu, 0x00002e93u, 0x00050041u, 0x00000007u, 0x00003781u, 0x00002c9cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003782u, 0x00003781u, 0x00050084u, 0x00000006u, 0x00003783u, 0x00002bf9u, 0x00003782u, 0x00050080u, 0x00000006u, 0x00003784u, 0x00002bf6u, 0x00003783u, 0x0003003eu, 0x00003778u, 0x00003784u, 0x00050041u, 0x00000007u, 0x00003785u, 0x00002c9cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003786u, 0x00003785u, 0x000500c2u, 0x00000006u, 0x00003787u, 0x00003786u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003789u, 0x00003784u, 0x00003787u, 0x0003003eu, 0x00003778u, 0x00003789u, 0x000500c7u, 0x00000006u, 0x0000378bu, 0x00003789u, 0x00000e4bu, 0x0003003eu, 0x00003778u, 0x0000378bu, 0x0004003du, 0x00000006u, 0x0000378du, 0x00003785u, 0x000400c8u, 0x00000006u, 0x0000378eu, 0x0000378du, 0x000500c7u, 0x00000006u, 0x0000378fu, 0x0000378eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003790u, 0x0000378fu, 0x00000701u, 0x0003003eu, 0x00003779u, 0x00003790u, 0x0003003eu, 0x0000377au, 0x0000378bu, 0x0004003du, 0x00000006u, 0x00003793u, 0x00003781u, 0x000500c7u, 0x00000006u, 0x00003794u, 0x00003793u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003795u, 0x00003794u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003797u, 0x0000378bu, 0x00003795u, 0x0003003eu, 0x0000377au, 0x00003797u, 0x000500c6u, 0x00000006u, 0x00003799u, 0x00003797u, 0x0000048bu, 0x0003003eu, 0x0000377au, 0x00003799u, 0x00080041u, 0x00000277u, 0x0000379cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003799u, 0x0004003du, 0x00000229u, 0x0000379du, 0x0000379cu, 0x00040071u, 0x00000006u, 0x0000379eu, 0x0000379du, 0x0003003eu, 0x0000377bu, 0x0000379eu, 0x000500c2u, 0x00000006u, 0x000037a1u, 0x0000379eu, 0x00003790u, 0x000500c7u, 0x00000006u, 0x000037a2u, 0x000037a1u, 0x00000e6eu, 0x0003003eu, 0x0000377bu, 0x000037a2u, 0x000500c4u, 0x00000006u, 0x000037a4u, 0x000037a2u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000037a6u, 0x000037a2u, 0x000037a4u, 0x0003003eu, 0x0000377bu, 0x000037a6u, 0x0004007cu, 0x00000008u, 0x000037a8u, 0x000037a6u, 0x00070050u, 0x00000009u, 0x000037a9u, 0x000037a8u, 0x000037a8u, 0x000037a8u, 0x000037a8u, 0x0003003eu, 0x0000377cu, 0x000037a9u, 0x0003003eu, 0x00002c59u, 0x000037a9u, 0x000200f9u, 0x00002e8eu, 0x000200f8u, 0x00002e8eu, 0x000700f5u, 0x00000009u, 0x0000843au, 0x000083f8u, 0x00002e7du, 0x000037a9u, 0x00002e8fu, 0x000200f9u, 0x00002e72u, 0x000200f8u, 0x00002e72u, 0x000d00f5u, 0x00000009u, 0x00008439u, 0x000083f8u, 0x00002e6bu, 0x0000843au, 0x00002e8eu, 0x0000843cu, 0x00002eaeu, 0x0000843eu, 0x00002eceu, 0x00008440u, 0x00002eeeu, 0x000d00f5u, 0x00000009u, 0x000083bcu, 0x0000837eu, 0x00002e6bu, 0x000083beu, 0x00002e8eu, 0x000083c0u, 0x00002eaeu, 0x000083c2u, 0x00002eceu, 0x000083c4u, 0x00002eeeu, 0x000d00f5u, 0x00000009u, 0x00008341u, 0x00008301u, 0x00002e6bu, 0x00003713u, 0x00002e8eu, 0x000037ccu, 0x00002eaeu, 0x00003874u, 0x00002eceu, 0x00003967u, 0x00002eeeu, 0x000d00f5u, 0x00000009u, 0x000082c4u, 0x00008282u, 0x00002e6bu, 0x000082c6u, 0x00002e8eu, 0x000082c8u, 0x00002eaeu, 0x000082cau, 0x00002eceu, 0x000082ccu, 0x00002eeeu, 0x000200f9u, 0x00002e6au, 0x000200f8u, 0x00002e6au, 0x000f00f5u, 0x00000009u, 0x00008438u, 0x000083f8u, 0x00002dcbu, 0x00008439u, 0x00002e72u, 0x00008442u, 0x00002f0au, 0x00008443u, 0x00002f26u, 0x0000844au, 0x00002f98u, 0x00008453u, 0x0000301fu, 0x000f00f5u, 0x00000009u, 0x000083bbu, 0x0000837eu, 0x00002dcbu, 0x000083bcu, 0x00002e72u, 0x000083c5u, 0x00002f0au, 0x000083c6u, 0x00002f26u, 0x000083cdu, 0x00002f98u, 0x000083d6u, 0x0000301fu, 0x000f00f5u, 0x00000009u, 0x00008340u, 0x00008301u, 0x00002dcbu, 0x00008341u, 0x00002e72u, 0x00003a54u, 0x00002f0au, 0x0000834bu, 0x00002f26u, 0x00008352u, 0x00002f98u, 0x0000835bu, 0x0000301fu, 0x000f00f5u, 0x00000009u, 0x000082c3u, 0x00008282u, 0x00002dcbu, 0x000082c4u, 0x00002e72u, 0x000082cdu, 0x00002f0au, 0x000082ceu, 0x00002f26u, 0x000082d5u, 0x00002f98u, 0x000082deu, 0x0000301fu, 0x000200f9u, 0x00002dc9u, 0x000200f8u, 0x00002dcau, 0x000300f7u, 0x00002dceu, 0x00000000u, 0x000b00fbu, 0x00002bfeu, 0x00002dceu, 0x00000000u, 0x00002dcfu, 0x00000002u, 0x00002dcfu, 0x00000003u, 0x00002dcfu, 0x00000004u, 0x00002dcfu, 0x000200f8u, 0x00002dcfu, 0x0003003eu, 0x00002c3fu, 0x00002dbdu, 0x000600a9u, 0x00000008u, 0x00002dd3u, 0x00002dbdu, 0x00000215u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002dd4u, 0x00002dd3u, 0x0003003eu, 0x00002c40u, 0x00002dd4u, 0x000300f7u, 0x00002dd7u, 0x00000000u, 0x000700fbu, 0x00002c03u, 0x00002dd8u, 0x00000000u, 0x00002dd9u, 0x00000001u, 0x00002ddau, 0x000200f8u, 0x00002ddau, 0x0004007cu, 0x000000a2u, 0x00002e3eu, 0x00007ef8u, 0x000600a9u, 0x00000008u, 0x00002e40u, 0x00002dbdu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00002e41u, 0x00002e40u, 0x0003003eu, 0x00006ad3u, 0x00002bf6u, 0x0003003eu, 0x00006ad4u, 0x00002bf9u, 0x0003003eu, 0x00002c62u, 0x000020eau, 0x0003003eu, 0x00002c63u, 0x00002e3eu, 0x0003003eu, 0x00002c64u, 0x00002e41u, 0x0003003eu, 0x00002c65u, 0x00002dd4u, 0x0003003eu, 0x00002c66u, 0x000020feu, 0x00050041u, 0x00000007u, 0x0000355eu, 0x00002c63u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000355fu, 0x0000355eu, 0x00050084u, 0x00000006u, 0x00003560u, 0x00002bf9u, 0x0000355fu, 0x00050080u, 0x00000006u, 0x00003561u, 0x00002bf6u, 0x00003560u, 0x0003003eu, 0x00003552u, 0x00003561u, 0x00050041u, 0x00000007u, 0x00003562u, 0x00002c63u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003563u, 0x00003562u, 0x00050080u, 0x00000006u, 0x00003565u, 0x00003561u, 0x00003563u, 0x0003003eu, 0x00003552u, 0x00003565u, 0x000500c7u, 0x00000006u, 0x00003567u, 0x00003565u, 0x00000efdu, 0x0003003eu, 0x00003552u, 0x00003567u, 0x0003003eu, 0x00003553u, 0x00003567u, 0x0004003du, 0x00000006u, 0x0000356au, 0x0000355eu, 0x000500c7u, 0x00000006u, 0x0000356bu, 0x0000356au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000356cu, 0x0000356bu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000356eu, 0x00003567u, 0x0000356cu, 0x0003003eu, 0x00003553u, 0x0000356eu, 0x000500c6u, 0x00000006u, 0x00003570u, 0x0000356eu, 0x0000048bu, 0x0003003eu, 0x00003553u, 0x00003570u, 0x00080041u, 0x00000277u, 0x00003573u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003570u, 0x0004003du, 0x00000229u, 0x00003574u, 0x00003573u, 0x00040071u, 0x00000006u, 0x00003575u, 0x00003574u, 0x0003003eu, 0x00003554u, 0x00003575u, 0x000500c4u, 0x00000006u, 0x00003577u, 0x00003575u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00003579u, 0x00003577u, 0x00002e41u, 0x0003003eu, 0x00003555u, 0x00003579u, 0x000500c6u, 0x00000006u, 0x0000357cu, 0x00003579u, 0x00002dd4u, 0x0003003eu, 0x00003555u, 0x0000357cu, 0x000500c5u, 0x00000006u, 0x0000357fu, 0x00000f2eu, 0x0000357cu, 0x00080041u, 0x00000270u, 0x00003580u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000357fu, 0x0004003du, 0x0000022bu, 0x00003581u, 0x00003580u, 0x00040071u, 0x00000006u, 0x00003582u, 0x00003581u, 0x0003003eu, 0x00003554u, 0x00003582u, 0x000300f7u, 0x00003584u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00003585u, 0x00003586u, 0x000200f8u, 0x00003586u, 0x0003003eu, 0x00003558u, 0x00003582u, 0x00060050u, 0x00000353u, 0x000035a0u, 0x00003582u, 0x00003582u, 0x00003582u, 0x000500c2u, 0x00000353u, 0x000035a1u, 0x000035a0u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000035a3u, 0x000035a1u, 0x0000eebdu, 0x0003003eu, 0x0000359cu, 0x000035a3u, 0x000500c4u, 0x00000353u, 0x000035a6u, 0x000035a3u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000035a9u, 0x000035a3u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000035aau, 0x000035a6u, 0x000035a9u, 0x0003003eu, 0x0000359cu, 0x000035aau, 0x000500c7u, 0x00000006u, 0x000035acu, 0x00003582u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000035adu, 0x000035acu, 0x000006c2u, 0x0003003eu, 0x0000359du, 0x000035adu, 0x0004007cu, 0x0000003cu, 0x000035afu, 0x000035aau, 0x0004007cu, 0x00000008u, 0x000035b1u, 0x000035adu, 0x00050051u, 0x00000008u, 0x000035b2u, 0x000035afu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000035b3u, 0x000035afu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000035b4u, 0x000035afu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000035b5u, 0x000035b2u, 0x000035b3u, 0x000035b4u, 0x000035b1u, 0x0003003eu, 0x0000359eu, 0x000035b5u, 0x0003003eu, 0x00003556u, 0x000035b5u, 0x000200f9u, 0x00003584u, 0x000200f8u, 0x00003585u, 0x0003003eu, 0x00003557u, 0x00003582u, 0x000500c2u, 0x00000006u, 0x00003590u, 0x00003582u, 0x0000025eu, 0x0003003eu, 0x0000358cu, 0x00003590u, 0x000500c7u, 0x00000006u, 0x00003592u, 0x00003582u, 0x000006c2u, 0x0003003eu, 0x0000358du, 0x00003592u, 0x0004007cu, 0x00000008u, 0x00003594u, 0x00003590u, 0x0004007cu, 0x00000008u, 0x0000359au, 0x00003592u, 0x00070050u, 0x00000009u, 0x0000359bu, 0x00003594u, 0x00003594u, 0x00003594u, 0x0000359au, 0x0003003eu, 0x0000358eu, 0x0000359bu, 0x0003003eu, 0x00003556u, 0x0000359bu, 0x000200f9u, 0x00003584u, 0x000200f8u, 0x00003584u, 0x000700f5u, 0x00000009u, 0x00008081u, 0x0000359bu, 0x00003585u, 0x000035b5u, 0x00003586u, 0x0003003eu, 0x00003559u, 0x00008081u, 0x0003003eu, 0x00002c41u, 0x00008081u, 0x000300f7u, 0x00002e48u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002e49u, 0x00002e48u, 0x000200f8u, 0x00002e49u, 0x00050050u, 0x0000005fu, 0x00002e4cu, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002e4du, 0x00002e4cu, 0x0003003eu, 0x00006ad7u, 0x00002bf6u, 0x0003003eu, 0x00006ad8u, 0x00002bf9u, 0x0003003eu, 0x00002c68u, 0x000020eau, 0x0003003eu, 0x00002c69u, 0x00002e4du, 0x0003003eu, 0x00002c6au, 0x00000485u, 0x0003003eu, 0x00002c6bu, 0x00002dd4u, 0x0003003eu, 0x00002c6cu, 0x000020feu, 0x00050041u, 0x00000007u, 0x000035c2u, 0x00002c69u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000035c3u, 0x000035c2u, 0x00050084u, 0x00000006u, 0x000035c4u, 0x00002bf9u, 0x000035c3u, 0x00050080u, 0x00000006u, 0x000035c5u, 0x00002bf6u, 0x000035c4u, 0x0003003eu, 0x000035b6u, 0x000035c5u, 0x00050041u, 0x00000007u, 0x000035c6u, 0x00002c69u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000035c7u, 0x000035c6u, 0x00050080u, 0x00000006u, 0x000035c9u, 0x000035c5u, 0x000035c7u, 0x0003003eu, 0x000035b6u, 0x000035c9u, 0x000500c7u, 0x00000006u, 0x000035cbu, 0x000035c9u, 0x00000efdu, 0x0003003eu, 0x000035b6u, 0x000035cbu, 0x0003003eu, 0x000035b7u, 0x000035cbu, 0x0004003du, 0x00000006u, 0x000035ceu, 0x000035c2u, 0x000500c7u, 0x00000006u, 0x000035cfu, 0x000035ceu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000035d0u, 0x000035cfu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000035d2u, 0x000035cbu, 0x000035d0u, 0x0003003eu, 0x000035b7u, 0x000035d2u, 0x000500c6u, 0x00000006u, 0x000035d4u, 0x000035d2u, 0x0000048bu, 0x0003003eu, 0x000035b7u, 0x000035d4u, 0x00080041u, 0x00000277u, 0x000035d7u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000035d4u, 0x0004003du, 0x00000229u, 0x000035d8u, 0x000035d7u, 0x00040071u, 0x00000006u, 0x000035d9u, 0x000035d8u, 0x0003003eu, 0x000035b8u, 0x000035d9u, 0x000500c4u, 0x00000006u, 0x000035dbu, 0x000035d9u, 0x00000215u, 0x00050080u, 0x00000006u, 0x000035ddu, 0x000035dbu, 0x00000485u, 0x0003003eu, 0x000035b9u, 0x000035ddu, 0x000500c6u, 0x00000006u, 0x000035e0u, 0x000035ddu, 0x00002dd4u, 0x0003003eu, 0x000035b9u, 0x000035e0u, 0x000500c5u, 0x00000006u, 0x000035e3u, 0x00000f2eu, 0x000035e0u, 0x00080041u, 0x00000270u, 0x000035e4u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000035e3u, 0x0004003du, 0x0000022bu, 0x000035e5u, 0x000035e4u, 0x00040071u, 0x00000006u, 0x000035e6u, 0x000035e5u, 0x0003003eu, 0x000035b8u, 0x000035e6u, 0x000300f7u, 0x000035e8u, 0x00000000u, 0x000400fau, 0x000020feu, 0x000035e9u, 0x000035eau, 0x000200f8u, 0x000035eau, 0x0003003eu, 0x000035bcu, 0x000035e6u, 0x00060050u, 0x00000353u, 0x00003604u, 0x000035e6u, 0x000035e6u, 0x000035e6u, 0x000500c2u, 0x00000353u, 0x00003605u, 0x00003604u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00003607u, 0x00003605u, 0x0000eebdu, 0x0003003eu, 0x00003600u, 0x00003607u, 0x000500c4u, 0x00000353u, 0x0000360au, 0x00003607u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x0000360du, 0x00003607u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x0000360eu, 0x0000360au, 0x0000360du, 0x0003003eu, 0x00003600u, 0x0000360eu, 0x000500c7u, 0x00000006u, 0x00003610u, 0x000035e6u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003611u, 0x00003610u, 0x000006c2u, 0x0003003eu, 0x00003601u, 0x00003611u, 0x0004007cu, 0x0000003cu, 0x00003613u, 0x0000360eu, 0x0004007cu, 0x00000008u, 0x00003615u, 0x00003611u, 0x00050051u, 0x00000008u, 0x00003616u, 0x00003613u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003617u, 0x00003613u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003618u, 0x00003613u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003619u, 0x00003616u, 0x00003617u, 0x00003618u, 0x00003615u, 0x0003003eu, 0x00003602u, 0x00003619u, 0x0003003eu, 0x000035bau, 0x00003619u, 0x000200f9u, 0x000035e8u, 0x000200f8u, 0x000035e9u, 0x0003003eu, 0x000035bbu, 0x000035e6u, 0x000500c2u, 0x00000006u, 0x000035f4u, 0x000035e6u, 0x0000025eu, 0x0003003eu, 0x000035f0u, 0x000035f4u, 0x000500c7u, 0x00000006u, 0x000035f6u, 0x000035e6u, 0x000006c2u, 0x0003003eu, 0x000035f1u, 0x000035f6u, 0x0004007cu, 0x00000008u, 0x000035f8u, 0x000035f4u, 0x0004007cu, 0x00000008u, 0x000035feu, 0x000035f6u, 0x00070050u, 0x00000009u, 0x000035ffu, 0x000035f8u, 0x000035f8u, 0x000035f8u, 0x000035feu, 0x0003003eu, 0x000035f2u, 0x000035ffu, 0x0003003eu, 0x000035bau, 0x000035ffu, 0x000200f9u, 0x000035e8u, 0x000200f8u, 0x000035e8u, 0x000700f5u, 0x00000009u, 0x00008099u, 0x000035ffu, 0x000035e9u, 0x00003619u, 0x000035eau, 0x0003003eu, 0x000035bdu, 0x00008099u, 0x0003003eu, 0x00002c49u, 0x00008099u, 0x00050050u, 0x0000005fu, 0x00002e55u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e56u, 0x00002e55u, 0x0003003eu, 0x00006adbu, 0x00002bf6u, 0x0003003eu, 0x00006adcu, 0x00002bf9u, 0x0003003eu, 0x00002c6eu, 0x000020eau, 0x0003003eu, 0x00002c6fu, 0x00002e56u, 0x0003003eu, 0x00002c70u, 0x000003c4u, 0x0003003eu, 0x00002c71u, 0x00002dd4u, 0x0003003eu, 0x00002c72u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00003626u, 0x00002c6fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003627u, 0x00003626u, 0x00050084u, 0x00000006u, 0x00003628u, 0x00002bf9u, 0x00003627u, 0x00050080u, 0x00000006u, 0x00003629u, 0x00002bf6u, 0x00003628u, 0x0003003eu, 0x0000361au, 0x00003629u, 0x00050041u, 0x00000007u, 0x0000362au, 0x00002c6fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000362bu, 0x0000362au, 0x00050080u, 0x00000006u, 0x0000362du, 0x00003629u, 0x0000362bu, 0x0003003eu, 0x0000361au, 0x0000362du, 0x000500c7u, 0x00000006u, 0x0000362fu, 0x0000362du, 0x00000efdu, 0x0003003eu, 0x0000361au, 0x0000362fu, 0x0003003eu, 0x0000361bu, 0x0000362fu, 0x0004003du, 0x00000006u, 0x00003632u, 0x00003626u, 0x000500c7u, 0x00000006u, 0x00003633u, 0x00003632u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003634u, 0x00003633u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003636u, 0x0000362fu, 0x00003634u, 0x0003003eu, 0x0000361bu, 0x00003636u, 0x000500c6u, 0x00000006u, 0x00003638u, 0x00003636u, 0x0000048bu, 0x0003003eu, 0x0000361bu, 0x00003638u, 0x00080041u, 0x00000277u, 0x0000363bu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003638u, 0x0004003du, 0x00000229u, 0x0000363cu, 0x0000363bu, 0x00040071u, 0x00000006u, 0x0000363du, 0x0000363cu, 0x0003003eu, 0x0000361cu, 0x0000363du, 0x000500c4u, 0x00000006u, 0x0000363fu, 0x0000363du, 0x00000215u, 0x00050080u, 0x00000006u, 0x00003641u, 0x0000363fu, 0x000003c4u, 0x0003003eu, 0x0000361du, 0x00003641u, 0x000500c6u, 0x00000006u, 0x00003644u, 0x00003641u, 0x00002dd4u, 0x0003003eu, 0x0000361du, 0x00003644u, 0x000500c5u, 0x00000006u, 0x00003647u, 0x00000f2eu, 0x00003644u, 0x00080041u, 0x00000270u, 0x00003648u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003647u, 0x0004003du, 0x0000022bu, 0x00003649u, 0x00003648u, 0x00040071u, 0x00000006u, 0x0000364au, 0x00003649u, 0x0003003eu, 0x0000361cu, 0x0000364au, 0x000300f7u, 0x0000364cu, 0x00000000u, 0x000400fau, 0x000020feu, 0x0000364du, 0x0000364eu, 0x000200f8u, 0x0000364eu, 0x0003003eu, 0x00003620u, 0x0000364au, 0x00060050u, 0x00000353u, 0x00003668u, 0x0000364au, 0x0000364au, 0x0000364au, 0x000500c2u, 0x00000353u, 0x00003669u, 0x00003668u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x0000366bu, 0x00003669u, 0x0000eebdu, 0x0003003eu, 0x00003664u, 0x0000366bu, 0x000500c4u, 0x00000353u, 0x0000366eu, 0x0000366bu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003671u, 0x0000366bu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003672u, 0x0000366eu, 0x00003671u, 0x0003003eu, 0x00003664u, 0x00003672u, 0x000500c7u, 0x00000006u, 0x00003674u, 0x0000364au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003675u, 0x00003674u, 0x000006c2u, 0x0003003eu, 0x00003665u, 0x00003675u, 0x0004007cu, 0x0000003cu, 0x00003677u, 0x00003672u, 0x0004007cu, 0x00000008u, 0x00003679u, 0x00003675u, 0x00050051u, 0x00000008u, 0x0000367au, 0x00003677u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000367bu, 0x00003677u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000367cu, 0x00003677u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000367du, 0x0000367au, 0x0000367bu, 0x0000367cu, 0x00003679u, 0x0003003eu, 0x00003666u, 0x0000367du, 0x0003003eu, 0x0000361eu, 0x0000367du, 0x000200f9u, 0x0000364cu, 0x000200f8u, 0x0000364du, 0x0003003eu, 0x0000361fu, 0x0000364au, 0x000500c2u, 0x00000006u, 0x00003658u, 0x0000364au, 0x0000025eu, 0x0003003eu, 0x00003654u, 0x00003658u, 0x000500c7u, 0x00000006u, 0x0000365au, 0x0000364au, 0x000006c2u, 0x0003003eu, 0x00003655u, 0x0000365au, 0x0004007cu, 0x00000008u, 0x0000365cu, 0x00003658u, 0x0004007cu, 0x00000008u, 0x00003662u, 0x0000365au, 0x00070050u, 0x00000009u, 0x00003663u, 0x0000365cu, 0x0000365cu, 0x0000365cu, 0x00003662u, 0x0003003eu, 0x00003656u, 0x00003663u, 0x0003003eu, 0x0000361eu, 0x00003663u, 0x000200f9u, 0x0000364cu, 0x000200f8u, 0x0000364cu, 0x000700f5u, 0x00000009u, 0x000080b1u, 0x00003663u, 0x0000364du, 0x0000367du, 0x0000364eu, 0x0003003eu, 0x00003621u, 0x000080b1u, 0x0003003eu, 0x00002c51u, 0x000080b1u, 0x000200f9u, 0x00002e48u, 0x000200f8u, 0x00002e48u, 0x000700f5u, 0x00000009u, 0x000083b8u, 0x0000837eu, 0x00003584u, 0x000080b1u, 0x0000364cu, 0x000700f5u, 0x00000009u, 0x000082bfu, 0x00008282u, 0x00003584u, 0x00008099u, 0x0000364cu, 0x000300f7u, 0x00002e5du, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002e5eu, 0x00002e5du, 0x000200f8u, 0x00002e5eu, 0x00050050u, 0x0000005fu, 0x00002e61u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e62u, 0x00002e61u, 0x0003003eu, 0x00006adfu, 0x00002bf6u, 0x0003003eu, 0x00006ae0u, 0x00002bf9u, 0x0003003eu, 0x00002c74u, 0x000020eau, 0x0003003eu, 0x00002c75u, 0x00002e62u, 0x0003003eu, 0x00002c76u, 0x0000048bu, 0x0003003eu, 0x00002c77u, 0x00002dd4u, 0x0003003eu, 0x00002c78u, 0x000020feu, 0x00050041u, 0x00000007u, 0x0000368au, 0x00002c75u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000368bu, 0x0000368au, 0x00050084u, 0x00000006u, 0x0000368cu, 0x00002bf9u, 0x0000368bu, 0x00050080u, 0x00000006u, 0x0000368du, 0x00002bf6u, 0x0000368cu, 0x0003003eu, 0x0000367eu, 0x0000368du, 0x00050041u, 0x00000007u, 0x0000368eu, 0x00002c75u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000368fu, 0x0000368eu, 0x00050080u, 0x00000006u, 0x00003691u, 0x0000368du, 0x0000368fu, 0x0003003eu, 0x0000367eu, 0x00003691u, 0x000500c7u, 0x00000006u, 0x00003693u, 0x00003691u, 0x00000efdu, 0x0003003eu, 0x0000367eu, 0x00003693u, 0x0003003eu, 0x0000367fu, 0x00003693u, 0x0004003du, 0x00000006u, 0x00003696u, 0x0000368au, 0x000500c7u, 0x00000006u, 0x00003697u, 0x00003696u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003698u, 0x00003697u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000369au, 0x00003693u, 0x00003698u, 0x0003003eu, 0x0000367fu, 0x0000369au, 0x000500c6u, 0x00000006u, 0x0000369cu, 0x0000369au, 0x0000048bu, 0x0003003eu, 0x0000367fu, 0x0000369cu, 0x00080041u, 0x00000277u, 0x0000369fu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000369cu, 0x0004003du, 0x00000229u, 0x000036a0u, 0x0000369fu, 0x00040071u, 0x00000006u, 0x000036a1u, 0x000036a0u, 0x0003003eu, 0x00003680u, 0x000036a1u, 0x000500c4u, 0x00000006u, 0x000036a3u, 0x000036a1u, 0x00000215u, 0x00050080u, 0x00000006u, 0x000036a5u, 0x000036a3u, 0x0000048bu, 0x0003003eu, 0x00003681u, 0x000036a5u, 0x000500c6u, 0x00000006u, 0x000036a8u, 0x000036a5u, 0x00002dd4u, 0x0003003eu, 0x00003681u, 0x000036a8u, 0x000500c5u, 0x00000006u, 0x000036abu, 0x00000f2eu, 0x000036a8u, 0x00080041u, 0x00000270u, 0x000036acu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000036abu, 0x0004003du, 0x0000022bu, 0x000036adu, 0x000036acu, 0x00040071u, 0x00000006u, 0x000036aeu, 0x000036adu, 0x0003003eu, 0x00003680u, 0x000036aeu, 0x000300f7u, 0x000036b0u, 0x00000000u, 0x000400fau, 0x000020feu, 0x000036b1u, 0x000036b2u, 0x000200f8u, 0x000036b2u, 0x0003003eu, 0x00003684u, 0x000036aeu, 0x00060050u, 0x00000353u, 0x000036ccu, 0x000036aeu, 0x000036aeu, 0x000036aeu, 0x000500c2u, 0x00000353u, 0x000036cdu, 0x000036ccu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000036cfu, 0x000036cdu, 0x0000eebdu, 0x0003003eu, 0x000036c8u, 0x000036cfu, 0x000500c4u, 0x00000353u, 0x000036d2u, 0x000036cfu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000036d5u, 0x000036cfu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000036d6u, 0x000036d2u, 0x000036d5u, 0x0003003eu, 0x000036c8u, 0x000036d6u, 0x000500c7u, 0x00000006u, 0x000036d8u, 0x000036aeu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000036d9u, 0x000036d8u, 0x000006c2u, 0x0003003eu, 0x000036c9u, 0x000036d9u, 0x0004007cu, 0x0000003cu, 0x000036dbu, 0x000036d6u, 0x0004007cu, 0x00000008u, 0x000036ddu, 0x000036d9u, 0x00050051u, 0x00000008u, 0x000036deu, 0x000036dbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000036dfu, 0x000036dbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000036e0u, 0x000036dbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000036e1u, 0x000036deu, 0x000036dfu, 0x000036e0u, 0x000036ddu, 0x0003003eu, 0x000036cau, 0x000036e1u, 0x0003003eu, 0x00003682u, 0x000036e1u, 0x000200f9u, 0x000036b0u, 0x000200f8u, 0x000036b1u, 0x0003003eu, 0x00003683u, 0x000036aeu, 0x000500c2u, 0x00000006u, 0x000036bcu, 0x000036aeu, 0x0000025eu, 0x0003003eu, 0x000036b8u, 0x000036bcu, 0x000500c7u, 0x00000006u, 0x000036beu, 0x000036aeu, 0x000006c2u, 0x0003003eu, 0x000036b9u, 0x000036beu, 0x0004007cu, 0x00000008u, 0x000036c0u, 0x000036bcu, 0x0004007cu, 0x00000008u, 0x000036c6u, 0x000036beu, 0x00070050u, 0x00000009u, 0x000036c7u, 0x000036c0u, 0x000036c0u, 0x000036c0u, 0x000036c6u, 0x0003003eu, 0x000036bau, 0x000036c7u, 0x0003003eu, 0x00003682u, 0x000036c7u, 0x000200f9u, 0x000036b0u, 0x000200f8u, 0x000036b0u, 0x000700f5u, 0x00000009u, 0x000080deu, 0x000036c7u, 0x000036b1u, 0x000036e1u, 0x000036b2u, 0x0003003eu, 0x00003685u, 0x000080deu, 0x0003003eu, 0x00002c59u, 0x000080deu, 0x000200f9u, 0x00002e5du, 0x000200f8u, 0x00002e5du, 0x000700f5u, 0x00000009u, 0x00008433u, 0x000083f8u, 0x00002e48u, 0x000080deu, 0x000036b0u, 0x000200f9u, 0x00002dd7u, 0x000200f8u, 0x00002dd9u, 0x0004007cu, 0x000000a2u, 0x00002e07u, 0x00007ef8u, 0x0004007cu, 0x00000006u, 0x00002e0au, 0x00002c08u, 0x000600a9u, 0x00000008u, 0x00002e0cu, 0x00002dbdu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00002e0du, 0x00002e0cu, 0x0003003eu, 0x00006ac3u, 0x00002bf6u, 0x0003003eu, 0x00006ac4u, 0x00002bf9u, 0x0003003eu, 0x00002c43u, 0x000020eau, 0x0003003eu, 0x00002c44u, 0x00002e07u, 0x0003003eu, 0x00002c45u, 0x00002e0au, 0x0003003eu, 0x00002c46u, 0x00002e0du, 0x0003003eu, 0x00002c47u, 0x00002dd4u, 0x0003003eu, 0x00002c48u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00003393u, 0x00002c44u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003394u, 0x00003393u, 0x00050084u, 0x00000006u, 0x00003395u, 0x00002bf9u, 0x00003394u, 0x00050080u, 0x00000006u, 0x00003396u, 0x00002bf6u, 0x00003395u, 0x0003003eu, 0x00003386u, 0x00003396u, 0x00050041u, 0x00000007u, 0x00003397u, 0x00002c44u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003398u, 0x00003397u, 0x000500c2u, 0x00000006u, 0x00003399u, 0x00003398u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000339bu, 0x00003396u, 0x00003399u, 0x0003003eu, 0x00003386u, 0x0000339bu, 0x000500c7u, 0x00000006u, 0x0000339du, 0x0000339bu, 0x00000efdu, 0x0003003eu, 0x00003386u, 0x0000339du, 0x0004003du, 0x00000006u, 0x0000339fu, 0x00003397u, 0x000400c8u, 0x00000006u, 0x000033a0u, 0x0000339fu, 0x000500c7u, 0x00000006u, 0x000033a1u, 0x000033a0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000033a2u, 0x000033a1u, 0x00000701u, 0x0003003eu, 0x00003387u, 0x000033a2u, 0x0003003eu, 0x00003388u, 0x0000339du, 0x0004003du, 0x00000006u, 0x000033a5u, 0x00003393u, 0x000500c7u, 0x00000006u, 0x000033a6u, 0x000033a5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000033a7u, 0x000033a6u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000033a9u, 0x0000339du, 0x000033a7u, 0x0003003eu, 0x00003388u, 0x000033a9u, 0x000500c6u, 0x00000006u, 0x000033abu, 0x000033a9u, 0x0000048bu, 0x0003003eu, 0x00003388u, 0x000033abu, 0x00080041u, 0x00000277u, 0x000033aeu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000033abu, 0x0004003du, 0x00000229u, 0x000033afu, 0x000033aeu, 0x00040071u, 0x00000006u, 0x000033b0u, 0x000033afu, 0x0003003eu, 0x00003389u, 0x000033b0u, 0x000500c2u, 0x00000006u, 0x000033b3u, 0x000033b0u, 0x000033a2u, 0x000500c7u, 0x00000006u, 0x000033b4u, 0x000033b3u, 0x00000e6eu, 0x0003003eu, 0x00003389u, 0x000033b4u, 0x000500c4u, 0x00000006u, 0x000033b6u, 0x00002e0au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000033b8u, 0x000033b4u, 0x000033b6u, 0x0003003eu, 0x00003389u, 0x000033b8u, 0x000500c4u, 0x00000006u, 0x000033bau, 0x000033b8u, 0x00000215u, 0x00050080u, 0x00000006u, 0x000033bcu, 0x000033bau, 0x00002e0du, 0x0003003eu, 0x0000338au, 0x000033bcu, 0x000500c6u, 0x00000006u, 0x000033bfu, 0x000033bcu, 0x00002dd4u, 0x0003003eu, 0x0000338au, 0x000033bfu, 0x000500c5u, 0x00000006u, 0x000033c2u, 0x00000f2eu, 0x000033bfu, 0x00080041u, 0x00000270u, 0x000033c3u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000033c2u, 0x0004003du, 0x0000022bu, 0x000033c4u, 0x000033c3u, 0x00040071u, 0x00000006u, 0x000033c5u, 0x000033c4u, 0x0003003eu, 0x00003389u, 0x000033c5u, 0x000300f7u, 0x000033c7u, 0x00000000u, 0x000400fau, 0x000020feu, 0x000033c8u, 0x000033c9u, 0x000200f8u, 0x000033c9u, 0x0003003eu, 0x0000338du, 0x000033c5u, 0x00060050u, 0x00000353u, 0x000033e3u, 0x000033c5u, 0x000033c5u, 0x000033c5u, 0x000500c2u, 0x00000353u, 0x000033e4u, 0x000033e3u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000033e6u, 0x000033e4u, 0x0000eebdu, 0x0003003eu, 0x000033dfu, 0x000033e6u, 0x000500c4u, 0x00000353u, 0x000033e9u, 0x000033e6u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000033ecu, 0x000033e6u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000033edu, 0x000033e9u, 0x000033ecu, 0x0003003eu, 0x000033dfu, 0x000033edu, 0x000500c7u, 0x00000006u, 0x000033efu, 0x000033c5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000033f0u, 0x000033efu, 0x000006c2u, 0x0003003eu, 0x000033e0u, 0x000033f0u, 0x0004007cu, 0x0000003cu, 0x000033f2u, 0x000033edu, 0x0004007cu, 0x00000008u, 0x000033f4u, 0x000033f0u, 0x00050051u, 0x00000008u, 0x000033f5u, 0x000033f2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000033f6u, 0x000033f2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000033f7u, 0x000033f2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000033f8u, 0x000033f5u, 0x000033f6u, 0x000033f7u, 0x000033f4u, 0x0003003eu, 0x000033e1u, 0x000033f8u, 0x0003003eu, 0x0000338bu, 0x000033f8u, 0x000200f9u, 0x000033c7u, 0x000200f8u, 0x000033c8u, 0x0003003eu, 0x0000338cu, 0x000033c5u, 0x000500c2u, 0x00000006u, 0x000033d3u, 0x000033c5u, 0x0000025eu, 0x0003003eu, 0x000033cfu, 0x000033d3u, 0x000500c7u, 0x00000006u, 0x000033d5u, 0x000033c5u, 0x000006c2u, 0x0003003eu, 0x000033d0u, 0x000033d5u, 0x0004007cu, 0x00000008u, 0x000033d7u, 0x000033d3u, 0x0004007cu, 0x00000008u, 0x000033ddu, 0x000033d5u, 0x00070050u, 0x00000009u, 0x000033deu, 0x000033d7u, 0x000033d7u, 0x000033d7u, 0x000033ddu, 0x0003003eu, 0x000033d1u, 0x000033deu, 0x0003003eu, 0x0000338bu, 0x000033deu, 0x000200f9u, 0x000033c7u, 0x000200f8u, 0x000033c7u, 0x000700f5u, 0x00000009u, 0x000080dfu, 0x000033deu, 0x000033c8u, 0x000033f8u, 0x000033c9u, 0x0003003eu, 0x0000338eu, 0x000080dfu, 0x0003003eu, 0x00002c41u, 0x000080dfu, 0x000300f7u, 0x00002e14u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002e15u, 0x00002e14u, 0x000200f8u, 0x00002e15u, 0x00050050u, 0x0000005fu, 0x00002e18u, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002e19u, 0x00002e18u, 0x0003003eu, 0x00006ac7u, 0x00002bf6u, 0x0003003eu, 0x00006ac8u, 0x00002bf9u, 0x0003003eu, 0x00002c4bu, 0x000020eau, 0x0003003eu, 0x00002c4cu, 0x00002e19u, 0x0003003eu, 0x00002c4du, 0x00002e0au, 0x0003003eu, 0x00002c4eu, 0x00000485u, 0x0003003eu, 0x00002c4fu, 0x00002dd4u, 0x0003003eu, 0x00002c50u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00003406u, 0x00002c4cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003407u, 0x00003406u, 0x00050084u, 0x00000006u, 0x00003408u, 0x00002bf9u, 0x00003407u, 0x00050080u, 0x00000006u, 0x00003409u, 0x00002bf6u, 0x00003408u, 0x0003003eu, 0x000033f9u, 0x00003409u, 0x00050041u, 0x00000007u, 0x0000340au, 0x00002c4cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000340bu, 0x0000340au, 0x000500c2u, 0x00000006u, 0x0000340cu, 0x0000340bu, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000340eu, 0x00003409u, 0x0000340cu, 0x0003003eu, 0x000033f9u, 0x0000340eu, 0x000500c7u, 0x00000006u, 0x00003410u, 0x0000340eu, 0x00000efdu, 0x0003003eu, 0x000033f9u, 0x00003410u, 0x0004003du, 0x00000006u, 0x00003412u, 0x0000340au, 0x000400c8u, 0x00000006u, 0x00003413u, 0x00003412u, 0x000500c7u, 0x00000006u, 0x00003414u, 0x00003413u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003415u, 0x00003414u, 0x00000701u, 0x0003003eu, 0x000033fau, 0x00003415u, 0x0003003eu, 0x000033fbu, 0x00003410u, 0x0004003du, 0x00000006u, 0x00003418u, 0x00003406u, 0x000500c7u, 0x00000006u, 0x00003419u, 0x00003418u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000341au, 0x00003419u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000341cu, 0x00003410u, 0x0000341au, 0x0003003eu, 0x000033fbu, 0x0000341cu, 0x000500c6u, 0x00000006u, 0x0000341eu, 0x0000341cu, 0x0000048bu, 0x0003003eu, 0x000033fbu, 0x0000341eu, 0x00080041u, 0x00000277u, 0x00003421u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000341eu, 0x0004003du, 0x00000229u, 0x00003422u, 0x00003421u, 0x00040071u, 0x00000006u, 0x00003423u, 0x00003422u, 0x0003003eu, 0x000033fcu, 0x00003423u, 0x000500c2u, 0x00000006u, 0x00003426u, 0x00003423u, 0x00003415u, 0x000500c7u, 0x00000006u, 0x00003427u, 0x00003426u, 0x00000e6eu, 0x0003003eu, 0x000033fcu, 0x00003427u, 0x000500c5u, 0x00000006u, 0x0000342bu, 0x00003427u, 0x000033b6u, 0x0003003eu, 0x000033fcu, 0x0000342bu, 0x000500c4u, 0x00000006u, 0x0000342du, 0x0000342bu, 0x00000215u, 0x00050080u, 0x00000006u, 0x0000342fu, 0x0000342du, 0x00000485u, 0x0003003eu, 0x000033fdu, 0x0000342fu, 0x000500c6u, 0x00000006u, 0x00003432u, 0x0000342fu, 0x00002dd4u, 0x0003003eu, 0x000033fdu, 0x00003432u, 0x000500c5u, 0x00000006u, 0x00003435u, 0x00000f2eu, 0x00003432u, 0x00080041u, 0x00000270u, 0x00003436u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003435u, 0x0004003du, 0x0000022bu, 0x00003437u, 0x00003436u, 0x00040071u, 0x00000006u, 0x00003438u, 0x00003437u, 0x0003003eu, 0x000033fcu, 0x00003438u, 0x000300f7u, 0x0000343au, 0x00000000u, 0x000400fau, 0x000020feu, 0x0000343bu, 0x0000343cu, 0x000200f8u, 0x0000343cu, 0x0003003eu, 0x00003400u, 0x00003438u, 0x00060050u, 0x00000353u, 0x00003456u, 0x00003438u, 0x00003438u, 0x00003438u, 0x000500c2u, 0x00000353u, 0x00003457u, 0x00003456u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00003459u, 0x00003457u, 0x0000eebdu, 0x0003003eu, 0x00003452u, 0x00003459u, 0x000500c4u, 0x00000353u, 0x0000345cu, 0x00003459u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x0000345fu, 0x00003459u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003460u, 0x0000345cu, 0x0000345fu, 0x0003003eu, 0x00003452u, 0x00003460u, 0x000500c7u, 0x00000006u, 0x00003462u, 0x00003438u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003463u, 0x00003462u, 0x000006c2u, 0x0003003eu, 0x00003453u, 0x00003463u, 0x0004007cu, 0x0000003cu, 0x00003465u, 0x00003460u, 0x0004007cu, 0x00000008u, 0x00003467u, 0x00003463u, 0x00050051u, 0x00000008u, 0x00003468u, 0x00003465u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003469u, 0x00003465u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000346au, 0x00003465u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000346bu, 0x00003468u, 0x00003469u, 0x0000346au, 0x00003467u, 0x0003003eu, 0x00003454u, 0x0000346bu, 0x0003003eu, 0x000033feu, 0x0000346bu, 0x000200f9u, 0x0000343au, 0x000200f8u, 0x0000343bu, 0x0003003eu, 0x000033ffu, 0x00003438u, 0x000500c2u, 0x00000006u, 0x00003446u, 0x00003438u, 0x0000025eu, 0x0003003eu, 0x00003442u, 0x00003446u, 0x000500c7u, 0x00000006u, 0x00003448u, 0x00003438u, 0x000006c2u, 0x0003003eu, 0x00003443u, 0x00003448u, 0x0004007cu, 0x00000008u, 0x0000344au, 0x00003446u, 0x0004007cu, 0x00000008u, 0x00003450u, 0x00003448u, 0x00070050u, 0x00000009u, 0x00003451u, 0x0000344au, 0x0000344au, 0x0000344au, 0x00003450u, 0x0003003eu, 0x00003444u, 0x00003451u, 0x0003003eu, 0x000033feu, 0x00003451u, 0x000200f9u, 0x0000343au, 0x000200f8u, 0x0000343au, 0x000700f5u, 0x00000009u, 0x000080f4u, 0x00003451u, 0x0000343bu, 0x0000346bu, 0x0000343cu, 0x0003003eu, 0x00003401u, 0x000080f4u, 0x0003003eu, 0x00002c49u, 0x000080f4u, 0x00050050u, 0x0000005fu, 0x00002e24u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e25u, 0x00002e24u, 0x0003003eu, 0x00006acbu, 0x00002bf6u, 0x0003003eu, 0x00006accu, 0x00002bf9u, 0x0003003eu, 0x00002c53u, 0x000020eau, 0x0003003eu, 0x00002c54u, 0x00002e25u, 0x0003003eu, 0x00002c55u, 0x00002e0au, 0x0003003eu, 0x00002c56u, 0x000003c4u, 0x0003003eu, 0x00002c57u, 0x00002dd4u, 0x0003003eu, 0x00002c58u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00003479u, 0x00002c54u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000347au, 0x00003479u, 0x00050084u, 0x00000006u, 0x0000347bu, 0x00002bf9u, 0x0000347au, 0x00050080u, 0x00000006u, 0x0000347cu, 0x00002bf6u, 0x0000347bu, 0x0003003eu, 0x0000346cu, 0x0000347cu, 0x00050041u, 0x00000007u, 0x0000347du, 0x00002c54u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000347eu, 0x0000347du, 0x000500c2u, 0x00000006u, 0x0000347fu, 0x0000347eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003481u, 0x0000347cu, 0x0000347fu, 0x0003003eu, 0x0000346cu, 0x00003481u, 0x000500c7u, 0x00000006u, 0x00003483u, 0x00003481u, 0x00000efdu, 0x0003003eu, 0x0000346cu, 0x00003483u, 0x0004003du, 0x00000006u, 0x00003485u, 0x0000347du, 0x000400c8u, 0x00000006u, 0x00003486u, 0x00003485u, 0x000500c7u, 0x00000006u, 0x00003487u, 0x00003486u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003488u, 0x00003487u, 0x00000701u, 0x0003003eu, 0x0000346du, 0x00003488u, 0x0003003eu, 0x0000346eu, 0x00003483u, 0x0004003du, 0x00000006u, 0x0000348bu, 0x00003479u, 0x000500c7u, 0x00000006u, 0x0000348cu, 0x0000348bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000348du, 0x0000348cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000348fu, 0x00003483u, 0x0000348du, 0x0003003eu, 0x0000346eu, 0x0000348fu, 0x000500c6u, 0x00000006u, 0x00003491u, 0x0000348fu, 0x0000048bu, 0x0003003eu, 0x0000346eu, 0x00003491u, 0x00080041u, 0x00000277u, 0x00003494u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003491u, 0x0004003du, 0x00000229u, 0x00003495u, 0x00003494u, 0x00040071u, 0x00000006u, 0x00003496u, 0x00003495u, 0x0003003eu, 0x0000346fu, 0x00003496u, 0x000500c2u, 0x00000006u, 0x00003499u, 0x00003496u, 0x00003488u, 0x000500c7u, 0x00000006u, 0x0000349au, 0x00003499u, 0x00000e6eu, 0x0003003eu, 0x0000346fu, 0x0000349au, 0x000500c5u, 0x00000006u, 0x0000349eu, 0x0000349au, 0x000033b6u, 0x0003003eu, 0x0000346fu, 0x0000349eu, 0x000500c4u, 0x00000006u, 0x000034a0u, 0x0000349eu, 0x00000215u, 0x00050080u, 0x00000006u, 0x000034a2u, 0x000034a0u, 0x000003c4u, 0x0003003eu, 0x00003470u, 0x000034a2u, 0x000500c6u, 0x00000006u, 0x000034a5u, 0x000034a2u, 0x00002dd4u, 0x0003003eu, 0x00003470u, 0x000034a5u, 0x000500c5u, 0x00000006u, 0x000034a8u, 0x00000f2eu, 0x000034a5u, 0x00080041u, 0x00000270u, 0x000034a9u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000034a8u, 0x0004003du, 0x0000022bu, 0x000034aau, 0x000034a9u, 0x00040071u, 0x00000006u, 0x000034abu, 0x000034aau, 0x0003003eu, 0x0000346fu, 0x000034abu, 0x000300f7u, 0x000034adu, 0x00000000u, 0x000400fau, 0x000020feu, 0x000034aeu, 0x000034afu, 0x000200f8u, 0x000034afu, 0x0003003eu, 0x00003473u, 0x000034abu, 0x00060050u, 0x00000353u, 0x000034c9u, 0x000034abu, 0x000034abu, 0x000034abu, 0x000500c2u, 0x00000353u, 0x000034cau, 0x000034c9u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000034ccu, 0x000034cau, 0x0000eebdu, 0x0003003eu, 0x000034c5u, 0x000034ccu, 0x000500c4u, 0x00000353u, 0x000034cfu, 0x000034ccu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000034d2u, 0x000034ccu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000034d3u, 0x000034cfu, 0x000034d2u, 0x0003003eu, 0x000034c5u, 0x000034d3u, 0x000500c7u, 0x00000006u, 0x000034d5u, 0x000034abu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000034d6u, 0x000034d5u, 0x000006c2u, 0x0003003eu, 0x000034c6u, 0x000034d6u, 0x0004007cu, 0x0000003cu, 0x000034d8u, 0x000034d3u, 0x0004007cu, 0x00000008u, 0x000034dau, 0x000034d6u, 0x00050051u, 0x00000008u, 0x000034dbu, 0x000034d8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000034dcu, 0x000034d8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000034ddu, 0x000034d8u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000034deu, 0x000034dbu, 0x000034dcu, 0x000034ddu, 0x000034dau, 0x0003003eu, 0x000034c7u, 0x000034deu, 0x0003003eu, 0x00003471u, 0x000034deu, 0x000200f9u, 0x000034adu, 0x000200f8u, 0x000034aeu, 0x0003003eu, 0x00003472u, 0x000034abu, 0x000500c2u, 0x00000006u, 0x000034b9u, 0x000034abu, 0x0000025eu, 0x0003003eu, 0x000034b5u, 0x000034b9u, 0x000500c7u, 0x00000006u, 0x000034bbu, 0x000034abu, 0x000006c2u, 0x0003003eu, 0x000034b6u, 0x000034bbu, 0x0004007cu, 0x00000008u, 0x000034bdu, 0x000034b9u, 0x0004007cu, 0x00000008u, 0x000034c3u, 0x000034bbu, 0x00070050u, 0x00000009u, 0x000034c4u, 0x000034bdu, 0x000034bdu, 0x000034bdu, 0x000034c3u, 0x0003003eu, 0x000034b7u, 0x000034c4u, 0x0003003eu, 0x00003471u, 0x000034c4u, 0x000200f9u, 0x000034adu, 0x000200f8u, 0x000034adu, 0x000700f5u, 0x00000009u, 0x0000810au, 0x000034c4u, 0x000034aeu, 0x000034deu, 0x000034afu, 0x0003003eu, 0x00003474u, 0x0000810au, 0x0003003eu, 0x00002c51u, 0x0000810au, 0x000200f9u, 0x00002e14u, 0x000200f8u, 0x00002e14u, 0x000700f5u, 0x00000009u, 0x000083b4u, 0x0000837eu, 0x000033c7u, 0x0000810au, 0x000034adu, 0x000700f5u, 0x00000009u, 0x000082bau, 0x00008282u, 0x000033c7u, 0x000080f4u, 0x000034adu, 0x000300f7u, 0x00002e2fu, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002e30u, 0x00002e2fu, 0x000200f8u, 0x00002e30u, 0x00050050u, 0x0000005fu, 0x00002e33u, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e34u, 0x00002e33u, 0x0003003eu, 0x00006acfu, 0x00002bf6u, 0x0003003eu, 0x00006ad0u, 0x00002bf9u, 0x0003003eu, 0x00002c5bu, 0x000020eau, 0x0003003eu, 0x00002c5cu, 0x00002e34u, 0x0003003eu, 0x00002c5du, 0x00002e0au, 0x0003003eu, 0x00002c5eu, 0x0000048bu, 0x0003003eu, 0x00002c5fu, 0x00002dd4u, 0x0003003eu, 0x00002c60u, 0x000020feu, 0x00050041u, 0x00000007u, 0x000034ecu, 0x00002c5cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000034edu, 0x000034ecu, 0x00050084u, 0x00000006u, 0x000034eeu, 0x00002bf9u, 0x000034edu, 0x00050080u, 0x00000006u, 0x000034efu, 0x00002bf6u, 0x000034eeu, 0x0003003eu, 0x000034dfu, 0x000034efu, 0x00050041u, 0x00000007u, 0x000034f0u, 0x00002c5cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000034f1u, 0x000034f0u, 0x000500c2u, 0x00000006u, 0x000034f2u, 0x000034f1u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000034f4u, 0x000034efu, 0x000034f2u, 0x0003003eu, 0x000034dfu, 0x000034f4u, 0x000500c7u, 0x00000006u, 0x000034f6u, 0x000034f4u, 0x00000efdu, 0x0003003eu, 0x000034dfu, 0x000034f6u, 0x0004003du, 0x00000006u, 0x000034f8u, 0x000034f0u, 0x000400c8u, 0x00000006u, 0x000034f9u, 0x000034f8u, 0x000500c7u, 0x00000006u, 0x000034fau, 0x000034f9u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000034fbu, 0x000034fau, 0x00000701u, 0x0003003eu, 0x000034e0u, 0x000034fbu, 0x0003003eu, 0x000034e1u, 0x000034f6u, 0x0004003du, 0x00000006u, 0x000034feu, 0x000034ecu, 0x000500c7u, 0x00000006u, 0x000034ffu, 0x000034feu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003500u, 0x000034ffu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003502u, 0x000034f6u, 0x00003500u, 0x0003003eu, 0x000034e1u, 0x00003502u, 0x000500c6u, 0x00000006u, 0x00003504u, 0x00003502u, 0x0000048bu, 0x0003003eu, 0x000034e1u, 0x00003504u, 0x00080041u, 0x00000277u, 0x00003507u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003504u, 0x0004003du, 0x00000229u, 0x00003508u, 0x00003507u, 0x00040071u, 0x00000006u, 0x00003509u, 0x00003508u, 0x0003003eu, 0x000034e2u, 0x00003509u, 0x000500c2u, 0x00000006u, 0x0000350cu, 0x00003509u, 0x000034fbu, 0x000500c7u, 0x00000006u, 0x0000350du, 0x0000350cu, 0x00000e6eu, 0x0003003eu, 0x000034e2u, 0x0000350du, 0x000500c5u, 0x00000006u, 0x00003511u, 0x0000350du, 0x000033b6u, 0x0003003eu, 0x000034e2u, 0x00003511u, 0x000500c4u, 0x00000006u, 0x00003513u, 0x00003511u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00003515u, 0x00003513u, 0x0000048bu, 0x0003003eu, 0x000034e3u, 0x00003515u, 0x000500c6u, 0x00000006u, 0x00003518u, 0x00003515u, 0x00002dd4u, 0x0003003eu, 0x000034e3u, 0x00003518u, 0x000500c5u, 0x00000006u, 0x0000351bu, 0x00000f2eu, 0x00003518u, 0x00080041u, 0x00000270u, 0x0000351cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000351bu, 0x0004003du, 0x0000022bu, 0x0000351du, 0x0000351cu, 0x00040071u, 0x00000006u, 0x0000351eu, 0x0000351du, 0x0003003eu, 0x000034e2u, 0x0000351eu, 0x000300f7u, 0x00003520u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00003521u, 0x00003522u, 0x000200f8u, 0x00003522u, 0x0003003eu, 0x000034e6u, 0x0000351eu, 0x00060050u, 0x00000353u, 0x0000353cu, 0x0000351eu, 0x0000351eu, 0x0000351eu, 0x000500c2u, 0x00000353u, 0x0000353du, 0x0000353cu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x0000353fu, 0x0000353du, 0x0000eebdu, 0x0003003eu, 0x00003538u, 0x0000353fu, 0x000500c4u, 0x00000353u, 0x00003542u, 0x0000353fu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003545u, 0x0000353fu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003546u, 0x00003542u, 0x00003545u, 0x0003003eu, 0x00003538u, 0x00003546u, 0x000500c7u, 0x00000006u, 0x00003548u, 0x0000351eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003549u, 0x00003548u, 0x000006c2u, 0x0003003eu, 0x00003539u, 0x00003549u, 0x0004007cu, 0x0000003cu, 0x0000354bu, 0x00003546u, 0x0004007cu, 0x00000008u, 0x0000354du, 0x00003549u, 0x00050051u, 0x00000008u, 0x0000354eu, 0x0000354bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000354fu, 0x0000354bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003550u, 0x0000354bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003551u, 0x0000354eu, 0x0000354fu, 0x00003550u, 0x0000354du, 0x0003003eu, 0x0000353au, 0x00003551u, 0x0003003eu, 0x000034e4u, 0x00003551u, 0x000200f9u, 0x00003520u, 0x000200f8u, 0x00003521u, 0x0003003eu, 0x000034e5u, 0x0000351eu, 0x000500c2u, 0x00000006u, 0x0000352cu, 0x0000351eu, 0x0000025eu, 0x0003003eu, 0x00003528u, 0x0000352cu, 0x000500c7u, 0x00000006u, 0x0000352eu, 0x0000351eu, 0x000006c2u, 0x0003003eu, 0x00003529u, 0x0000352eu, 0x0004007cu, 0x00000008u, 0x00003530u, 0x0000352cu, 0x0004007cu, 0x00000008u, 0x00003536u, 0x0000352eu, 0x00070050u, 0x00000009u, 0x00003537u, 0x00003530u, 0x00003530u, 0x00003530u, 0x00003536u, 0x0003003eu, 0x0000352au, 0x00003537u, 0x0003003eu, 0x000034e4u, 0x00003537u, 0x000200f9u, 0x00003520u, 0x000200f8u, 0x00003520u, 0x000700f5u, 0x00000009u, 0x00008136u, 0x00003537u, 0x00003521u, 0x00003551u, 0x00003522u, 0x0003003eu, 0x000034e7u, 0x00008136u, 0x0003003eu, 0x00002c59u, 0x00008136u, 0x000200f9u, 0x00002e2fu, 0x000200f8u, 0x00002e2fu, 0x000700f5u, 0x00000009u, 0x0000842eu, 0x000083f8u, 0x00002e14u, 0x00008136u, 0x00003520u, 0x000200f9u, 0x00002dd7u, 0x000200f8u, 0x00002dd8u, 0x0004007cu, 0x000000a2u, 0x00002ddcu, 0x00007ef8u, 0x000600a9u, 0x00000008u, 0x00002ddeu, 0x00002dbdu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00002ddfu, 0x00002ddeu, 0x0003003eu, 0x00006ae3u, 0x00002bf6u, 0x0003003eu, 0x00006ae4u, 0x00002bf9u, 0x0003003eu, 0x00002c7au, 0x000020eau, 0x0003003eu, 0x00002c7bu, 0x00002ddcu, 0x0003003eu, 0x00002c7cu, 0x00002ddfu, 0x0003003eu, 0x00002c7du, 0x00002dd4u, 0x0003003eu, 0x00002c7eu, 0x000020feu, 0x00050041u, 0x00000007u, 0x000031f6u, 0x00002c7bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000031f7u, 0x000031f6u, 0x00050084u, 0x00000006u, 0x000031f8u, 0x00002bf9u, 0x000031f7u, 0x00050080u, 0x00000006u, 0x000031f9u, 0x00002bf6u, 0x000031f8u, 0x0003003eu, 0x000031eau, 0x000031f9u, 0x00050041u, 0x00000007u, 0x000031fau, 0x00002c7bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000031fbu, 0x000031fau, 0x00050084u, 0x00000006u, 0x000031fcu, 0x000031fbu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000031feu, 0x000031f9u, 0x000031fcu, 0x0003003eu, 0x000031eau, 0x000031feu, 0x000500c7u, 0x00000006u, 0x00003200u, 0x000031feu, 0x00000efdu, 0x0003003eu, 0x000031eau, 0x00003200u, 0x000500c2u, 0x00000006u, 0x00003202u, 0x00003200u, 0x00000212u, 0x0003003eu, 0x000031ebu, 0x00003202u, 0x0004003du, 0x00000006u, 0x00003204u, 0x000031f6u, 0x000500c7u, 0x00000006u, 0x00003205u, 0x00003204u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003206u, 0x00003205u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003208u, 0x00003202u, 0x00003206u, 0x0003003eu, 0x000031ebu, 0x00003208u, 0x000500c6u, 0x00000006u, 0x0000320au, 0x00003208u, 0x00000485u, 0x0003003eu, 0x000031ebu, 0x0000320au, 0x00080041u, 0x00000270u, 0x0000320du, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000320au, 0x0004003du, 0x0000022bu, 0x0000320eu, 0x0000320du, 0x00040071u, 0x00000006u, 0x0000320fu, 0x0000320eu, 0x0003003eu, 0x000031ecu, 0x0000320fu, 0x000500c2u, 0x00000006u, 0x00003211u, 0x0000320fu, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00003212u, 0x00003211u, 0x00000fccu, 0x00050080u, 0x00000006u, 0x00003214u, 0x00003212u, 0x00002ddfu, 0x0003003eu, 0x000031edu, 0x00003214u, 0x000500c6u, 0x00000006u, 0x00003217u, 0x00003214u, 0x00002dd4u, 0x0003003eu, 0x000031edu, 0x00003217u, 0x000500c5u, 0x00000006u, 0x0000321au, 0x00000f2eu, 0x00003217u, 0x00080041u, 0x00000270u, 0x0000321bu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000321au, 0x0004003du, 0x0000022bu, 0x0000321cu, 0x0000321bu, 0x00040071u, 0x00000006u, 0x0000321du, 0x0000321cu, 0x0003003eu, 0x000031ecu, 0x0000321du, 0x000300f7u, 0x0000321fu, 0x00000000u, 0x000400fau, 0x000020feu, 0x00003220u, 0x00003221u, 0x000200f8u, 0x00003221u, 0x0003003eu, 0x000031f0u, 0x0000321du, 0x00060050u, 0x00000353u, 0x0000323bu, 0x0000321du, 0x0000321du, 0x0000321du, 0x000500c2u, 0x00000353u, 0x0000323cu, 0x0000323bu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x0000323eu, 0x0000323cu, 0x0000eebdu, 0x0003003eu, 0x00003237u, 0x0000323eu, 0x000500c4u, 0x00000353u, 0x00003241u, 0x0000323eu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003244u, 0x0000323eu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003245u, 0x00003241u, 0x00003244u, 0x0003003eu, 0x00003237u, 0x00003245u, 0x000500c7u, 0x00000006u, 0x00003247u, 0x0000321du, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003248u, 0x00003247u, 0x000006c2u, 0x0003003eu, 0x00003238u, 0x00003248u, 0x0004007cu, 0x0000003cu, 0x0000324au, 0x00003245u, 0x0004007cu, 0x00000008u, 0x0000324cu, 0x00003248u, 0x00050051u, 0x00000008u, 0x0000324du, 0x0000324au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000324eu, 0x0000324au, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000324fu, 0x0000324au, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003250u, 0x0000324du, 0x0000324eu, 0x0000324fu, 0x0000324cu, 0x0003003eu, 0x00003239u, 0x00003250u, 0x0003003eu, 0x000031eeu, 0x00003250u, 0x000200f9u, 0x0000321fu, 0x000200f8u, 0x00003220u, 0x0003003eu, 0x000031efu, 0x0000321du, 0x000500c2u, 0x00000006u, 0x0000322bu, 0x0000321du, 0x0000025eu, 0x0003003eu, 0x00003227u, 0x0000322bu, 0x000500c7u, 0x00000006u, 0x0000322du, 0x0000321du, 0x000006c2u, 0x0003003eu, 0x00003228u, 0x0000322du, 0x0004007cu, 0x00000008u, 0x0000322fu, 0x0000322bu, 0x0004007cu, 0x00000008u, 0x00003235u, 0x0000322du, 0x00070050u, 0x00000009u, 0x00003236u, 0x0000322fu, 0x0000322fu, 0x0000322fu, 0x00003235u, 0x0003003eu, 0x00003229u, 0x00003236u, 0x0003003eu, 0x000031eeu, 0x00003236u, 0x000200f9u, 0x0000321fu, 0x000200f8u, 0x0000321fu, 0x000700f5u, 0x00000009u, 0x00008137u, 0x00003236u, 0x00003220u, 0x00003250u, 0x00003221u, 0x0003003eu, 0x000031f1u, 0x00008137u, 0x0003003eu, 0x00002c41u, 0x00008137u, 0x000300f7u, 0x00002de6u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00002de7u, 0x00002de6u, 0x000200f8u, 0x00002de7u, 0x00050050u, 0x0000005fu, 0x00002deau, 0x00007eadu, 0x00002daau, 0x0004007cu, 0x000000a2u, 0x00002debu, 0x00002deau, 0x0003003eu, 0x00006ae7u, 0x00002bf6u, 0x0003003eu, 0x00006ae8u, 0x00002bf9u, 0x0003003eu, 0x00002c80u, 0x000020eau, 0x0003003eu, 0x00002c81u, 0x00002debu, 0x0003003eu, 0x00002c82u, 0x00000485u, 0x0003003eu, 0x00002c83u, 0x00002dd4u, 0x0003003eu, 0x00002c84u, 0x000020feu, 0x00050041u, 0x00000007u, 0x0000325du, 0x00002c81u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000325eu, 0x0000325du, 0x00050084u, 0x00000006u, 0x0000325fu, 0x00002bf9u, 0x0000325eu, 0x00050080u, 0x00000006u, 0x00003260u, 0x00002bf6u, 0x0000325fu, 0x0003003eu, 0x00003251u, 0x00003260u, 0x00050041u, 0x00000007u, 0x00003261u, 0x00002c81u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003262u, 0x00003261u, 0x00050084u, 0x00000006u, 0x00003263u, 0x00003262u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003265u, 0x00003260u, 0x00003263u, 0x0003003eu, 0x00003251u, 0x00003265u, 0x000500c7u, 0x00000006u, 0x00003267u, 0x00003265u, 0x00000efdu, 0x0003003eu, 0x00003251u, 0x00003267u, 0x000500c2u, 0x00000006u, 0x00003269u, 0x00003267u, 0x00000212u, 0x0003003eu, 0x00003252u, 0x00003269u, 0x0004003du, 0x00000006u, 0x0000326bu, 0x0000325du, 0x000500c7u, 0x00000006u, 0x0000326cu, 0x0000326bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000326du, 0x0000326cu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000326fu, 0x00003269u, 0x0000326du, 0x0003003eu, 0x00003252u, 0x0000326fu, 0x000500c6u, 0x00000006u, 0x00003271u, 0x0000326fu, 0x00000485u, 0x0003003eu, 0x00003252u, 0x00003271u, 0x00080041u, 0x00000270u, 0x00003274u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003271u, 0x0004003du, 0x0000022bu, 0x00003275u, 0x00003274u, 0x00040071u, 0x00000006u, 0x00003276u, 0x00003275u, 0x0003003eu, 0x00003253u, 0x00003276u, 0x000500c2u, 0x00000006u, 0x00003278u, 0x00003276u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00003279u, 0x00003278u, 0x00000fccu, 0x00050080u, 0x00000006u, 0x0000327bu, 0x00003279u, 0x00000485u, 0x0003003eu, 0x00003254u, 0x0000327bu, 0x000500c6u, 0x00000006u, 0x0000327eu, 0x0000327bu, 0x00002dd4u, 0x0003003eu, 0x00003254u, 0x0000327eu, 0x000500c5u, 0x00000006u, 0x00003281u, 0x00000f2eu, 0x0000327eu, 0x00080041u, 0x00000270u, 0x00003282u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00003281u, 0x0004003du, 0x0000022bu, 0x00003283u, 0x00003282u, 0x00040071u, 0x00000006u, 0x00003284u, 0x00003283u, 0x0003003eu, 0x00003253u, 0x00003284u, 0x000300f7u, 0x00003286u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00003287u, 0x00003288u, 0x000200f8u, 0x00003288u, 0x0003003eu, 0x00003257u, 0x00003284u, 0x00060050u, 0x00000353u, 0x000032a2u, 0x00003284u, 0x00003284u, 0x00003284u, 0x000500c2u, 0x00000353u, 0x000032a3u, 0x000032a2u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000032a5u, 0x000032a3u, 0x0000eebdu, 0x0003003eu, 0x0000329eu, 0x000032a5u, 0x000500c4u, 0x00000353u, 0x000032a8u, 0x000032a5u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000032abu, 0x000032a5u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000032acu, 0x000032a8u, 0x000032abu, 0x0003003eu, 0x0000329eu, 0x000032acu, 0x000500c7u, 0x00000006u, 0x000032aeu, 0x00003284u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000032afu, 0x000032aeu, 0x000006c2u, 0x0003003eu, 0x0000329fu, 0x000032afu, 0x0004007cu, 0x0000003cu, 0x000032b1u, 0x000032acu, 0x0004007cu, 0x00000008u, 0x000032b3u, 0x000032afu, 0x00050051u, 0x00000008u, 0x000032b4u, 0x000032b1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000032b5u, 0x000032b1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000032b6u, 0x000032b1u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000032b7u, 0x000032b4u, 0x000032b5u, 0x000032b6u, 0x000032b3u, 0x0003003eu, 0x000032a0u, 0x000032b7u, 0x0003003eu, 0x00003255u, 0x000032b7u, 0x000200f9u, 0x00003286u, 0x000200f8u, 0x00003287u, 0x0003003eu, 0x00003256u, 0x00003284u, 0x000500c2u, 0x00000006u, 0x00003292u, 0x00003284u, 0x0000025eu, 0x0003003eu, 0x0000328eu, 0x00003292u, 0x000500c7u, 0x00000006u, 0x00003294u, 0x00003284u, 0x000006c2u, 0x0003003eu, 0x0000328fu, 0x00003294u, 0x0004007cu, 0x00000008u, 0x00003296u, 0x00003292u, 0x0004007cu, 0x00000008u, 0x0000329cu, 0x00003294u, 0x00070050u, 0x00000009u, 0x0000329du, 0x00003296u, 0x00003296u, 0x00003296u, 0x0000329cu, 0x0003003eu, 0x00003290u, 0x0000329du, 0x0003003eu, 0x00003255u, 0x0000329du, 0x000200f9u, 0x00003286u, 0x000200f8u, 0x00003286u, 0x000700f5u, 0x00000009u, 0x0000814cu, 0x0000329du, 0x00003287u, 0x000032b7u, 0x00003288u, 0x0003003eu, 0x00003258u, 0x0000814cu, 0x0003003eu, 0x00002c49u, 0x0000814cu, 0x00050050u, 0x0000005fu, 0x00002df3u, 0x00007e6fu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002df4u, 0x00002df3u, 0x0003003eu, 0x00006aebu, 0x00002bf6u, 0x0003003eu, 0x00006aecu, 0x00002bf9u, 0x0003003eu, 0x00002c86u, 0x000020eau, 0x0003003eu, 0x00002c87u, 0x00002df4u, 0x0003003eu, 0x00002c88u, 0x000003c4u, 0x0003003eu, 0x00002c89u, 0x00002dd4u, 0x0003003eu, 0x00002c8au, 0x000020feu, 0x00050041u, 0x00000007u, 0x000032c4u, 0x00002c87u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000032c5u, 0x000032c4u, 0x00050084u, 0x00000006u, 0x000032c6u, 0x00002bf9u, 0x000032c5u, 0x00050080u, 0x00000006u, 0x000032c7u, 0x00002bf6u, 0x000032c6u, 0x0003003eu, 0x000032b8u, 0x000032c7u, 0x00050041u, 0x00000007u, 0x000032c8u, 0x00002c87u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000032c9u, 0x000032c8u, 0x00050084u, 0x00000006u, 0x000032cau, 0x000032c9u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000032ccu, 0x000032c7u, 0x000032cau, 0x0003003eu, 0x000032b8u, 0x000032ccu, 0x000500c7u, 0x00000006u, 0x000032ceu, 0x000032ccu, 0x00000efdu, 0x0003003eu, 0x000032b8u, 0x000032ceu, 0x000500c2u, 0x00000006u, 0x000032d0u, 0x000032ceu, 0x00000212u, 0x0003003eu, 0x000032b9u, 0x000032d0u, 0x0004003du, 0x00000006u, 0x000032d2u, 0x000032c4u, 0x000500c7u, 0x00000006u, 0x000032d3u, 0x000032d2u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000032d4u, 0x000032d3u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000032d6u, 0x000032d0u, 0x000032d4u, 0x0003003eu, 0x000032b9u, 0x000032d6u, 0x000500c6u, 0x00000006u, 0x000032d8u, 0x000032d6u, 0x00000485u, 0x0003003eu, 0x000032b9u, 0x000032d8u, 0x00080041u, 0x00000270u, 0x000032dbu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000032d8u, 0x0004003du, 0x0000022bu, 0x000032dcu, 0x000032dbu, 0x00040071u, 0x00000006u, 0x000032ddu, 0x000032dcu, 0x0003003eu, 0x000032bau, 0x000032ddu, 0x000500c2u, 0x00000006u, 0x000032dfu, 0x000032ddu, 0x00000221u, 0x000500c7u, 0x00000006u, 0x000032e0u, 0x000032dfu, 0x00000fccu, 0x00050080u, 0x00000006u, 0x000032e2u, 0x000032e0u, 0x000003c4u, 0x0003003eu, 0x000032bbu, 0x000032e2u, 0x000500c6u, 0x00000006u, 0x000032e5u, 0x000032e2u, 0x00002dd4u, 0x0003003eu, 0x000032bbu, 0x000032e5u, 0x000500c5u, 0x00000006u, 0x000032e8u, 0x00000f2eu, 0x000032e5u, 0x00080041u, 0x00000270u, 0x000032e9u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000032e8u, 0x0004003du, 0x0000022bu, 0x000032eau, 0x000032e9u, 0x00040071u, 0x00000006u, 0x000032ebu, 0x000032eau, 0x0003003eu, 0x000032bau, 0x000032ebu, 0x000300f7u, 0x000032edu, 0x00000000u, 0x000400fau, 0x000020feu, 0x000032eeu, 0x000032efu, 0x000200f8u, 0x000032efu, 0x0003003eu, 0x000032beu, 0x000032ebu, 0x00060050u, 0x00000353u, 0x00003309u, 0x000032ebu, 0x000032ebu, 0x000032ebu, 0x000500c2u, 0x00000353u, 0x0000330au, 0x00003309u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x0000330cu, 0x0000330au, 0x0000eebdu, 0x0003003eu, 0x00003305u, 0x0000330cu, 0x000500c4u, 0x00000353u, 0x0000330fu, 0x0000330cu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003312u, 0x0000330cu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00003313u, 0x0000330fu, 0x00003312u, 0x0003003eu, 0x00003305u, 0x00003313u, 0x000500c7u, 0x00000006u, 0x00003315u, 0x000032ebu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003316u, 0x00003315u, 0x000006c2u, 0x0003003eu, 0x00003306u, 0x00003316u, 0x0004007cu, 0x0000003cu, 0x00003318u, 0x00003313u, 0x0004007cu, 0x00000008u, 0x0000331au, 0x00003316u, 0x00050051u, 0x00000008u, 0x0000331bu, 0x00003318u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000331cu, 0x00003318u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000331du, 0x00003318u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000331eu, 0x0000331bu, 0x0000331cu, 0x0000331du, 0x0000331au, 0x0003003eu, 0x00003307u, 0x0000331eu, 0x0003003eu, 0x000032bcu, 0x0000331eu, 0x000200f9u, 0x000032edu, 0x000200f8u, 0x000032eeu, 0x0003003eu, 0x000032bdu, 0x000032ebu, 0x000500c2u, 0x00000006u, 0x000032f9u, 0x000032ebu, 0x0000025eu, 0x0003003eu, 0x000032f5u, 0x000032f9u, 0x000500c7u, 0x00000006u, 0x000032fbu, 0x000032ebu, 0x000006c2u, 0x0003003eu, 0x000032f6u, 0x000032fbu, 0x0004007cu, 0x00000008u, 0x000032fdu, 0x000032f9u, 0x0004007cu, 0x00000008u, 0x00003303u, 0x000032fbu, 0x00070050u, 0x00000009u, 0x00003304u, 0x000032fdu, 0x000032fdu, 0x000032fdu, 0x00003303u, 0x0003003eu, 0x000032f7u, 0x00003304u, 0x0003003eu, 0x000032bcu, 0x00003304u, 0x000200f9u, 0x000032edu, 0x000200f8u, 0x000032edu, 0x000700f5u, 0x00000009u, 0x00008162u, 0x00003304u, 0x000032eeu, 0x0000331eu, 0x000032efu, 0x0003003eu, 0x000032bfu, 0x00008162u, 0x0003003eu, 0x00002c51u, 0x00008162u, 0x000200f9u, 0x00002de6u, 0x000200f8u, 0x00002de6u, 0x000700f5u, 0x00000009u, 0x000083afu, 0x0000837eu, 0x0000321fu, 0x00008162u, 0x000032edu, 0x000700f5u, 0x00000009u, 0x000082b4u, 0x00008282u, 0x0000321fu, 0x0000814cu, 0x000032edu, 0x000300f7u, 0x00002dfbu, 0x00000000u, 0x000400fau, 0x00002db5u, 0x00002dfcu, 0x00002dfbu, 0x000200f8u, 0x00002dfcu, 0x00050050u, 0x0000005fu, 0x00002dffu, 0x00007eadu, 0x00002dacu, 0x0004007cu, 0x000000a2u, 0x00002e00u, 0x00002dffu, 0x0003003eu, 0x00006aefu, 0x00002bf6u, 0x0003003eu, 0x00006af0u, 0x00002bf9u, 0x0003003eu, 0x00002c8cu, 0x000020eau, 0x0003003eu, 0x00002c8du, 0x00002e00u, 0x0003003eu, 0x00002c8eu, 0x0000048bu, 0x0003003eu, 0x00002c8fu, 0x00002dd4u, 0x0003003eu, 0x00002c90u, 0x000020feu, 0x00050041u, 0x00000007u, 0x0000332bu, 0x00002c8du, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000332cu, 0x0000332bu, 0x00050084u, 0x00000006u, 0x0000332du, 0x00002bf9u, 0x0000332cu, 0x00050080u, 0x00000006u, 0x0000332eu, 0x00002bf6u, 0x0000332du, 0x0003003eu, 0x0000331fu, 0x0000332eu, 0x00050041u, 0x00000007u, 0x0000332fu, 0x00002c8du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003330u, 0x0000332fu, 0x00050084u, 0x00000006u, 0x00003331u, 0x00003330u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003333u, 0x0000332eu, 0x00003331u, 0x0003003eu, 0x0000331fu, 0x00003333u, 0x000500c7u, 0x00000006u, 0x00003335u, 0x00003333u, 0x00000efdu, 0x0003003eu, 0x0000331fu, 0x00003335u, 0x000500c2u, 0x00000006u, 0x00003337u, 0x00003335u, 0x00000212u, 0x0003003eu, 0x00003320u, 0x00003337u, 0x0004003du, 0x00000006u, 0x00003339u, 0x0000332bu, 0x000500c7u, 0x00000006u, 0x0000333au, 0x00003339u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000333bu, 0x0000333au, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000333du, 0x00003337u, 0x0000333bu, 0x0003003eu, 0x00003320u, 0x0000333du, 0x000500c6u, 0x00000006u, 0x0000333fu, 0x0000333du, 0x00000485u, 0x0003003eu, 0x00003320u, 0x0000333fu, 0x00080041u, 0x00000270u, 0x00003342u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000333fu, 0x0004003du, 0x0000022bu, 0x00003343u, 0x00003342u, 0x00040071u, 0x00000006u, 0x00003344u, 0x00003343u, 0x0003003eu, 0x00003321u, 0x00003344u, 0x000500c2u, 0x00000006u, 0x00003346u, 0x00003344u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00003347u, 0x00003346u, 0x00000fccu, 0x00050080u, 0x00000006u, 0x00003349u, 0x00003347u, 0x0000048bu, 0x0003003eu, 0x00003322u, 0x00003349u, 0x000500c6u, 0x00000006u, 0x0000334cu, 0x00003349u, 0x00002dd4u, 0x0003003eu, 0x00003322u, 0x0000334cu, 0x000500c5u, 0x00000006u, 0x0000334fu, 0x00000f2eu, 0x0000334cu, 0x00080041u, 0x00000270u, 0x00003350u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000334fu, 0x0004003du, 0x0000022bu, 0x00003351u, 0x00003350u, 0x00040071u, 0x00000006u, 0x00003352u, 0x00003351u, 0x0003003eu, 0x00003321u, 0x00003352u, 0x000300f7u, 0x00003354u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00003355u, 0x00003356u, 0x000200f8u, 0x00003356u, 0x0003003eu, 0x00003325u, 0x00003352u, 0x00060050u, 0x00000353u, 0x00003370u, 0x00003352u, 0x00003352u, 0x00003352u, 0x000500c2u, 0x00000353u, 0x00003371u, 0x00003370u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00003373u, 0x00003371u, 0x0000eebdu, 0x0003003eu, 0x0000336cu, 0x00003373u, 0x000500c4u, 0x00000353u, 0x00003376u, 0x00003373u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00003379u, 0x00003373u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x0000337au, 0x00003376u, 0x00003379u, 0x0003003eu, 0x0000336cu, 0x0000337au, 0x000500c7u, 0x00000006u, 0x0000337cu, 0x00003352u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000337du, 0x0000337cu, 0x000006c2u, 0x0003003eu, 0x0000336du, 0x0000337du, 0x0004007cu, 0x0000003cu, 0x0000337fu, 0x0000337au, 0x0004007cu, 0x00000008u, 0x00003381u, 0x0000337du, 0x00050051u, 0x00000008u, 0x00003382u, 0x0000337fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003383u, 0x0000337fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003384u, 0x0000337fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003385u, 0x00003382u, 0x00003383u, 0x00003384u, 0x00003381u, 0x0003003eu, 0x0000336eu, 0x00003385u, 0x0003003eu, 0x00003323u, 0x00003385u, 0x000200f9u, 0x00003354u, 0x000200f8u, 0x00003355u, 0x0003003eu, 0x00003324u, 0x00003352u, 0x000500c2u, 0x00000006u, 0x00003360u, 0x00003352u, 0x0000025eu, 0x0003003eu, 0x0000335cu, 0x00003360u, 0x000500c7u, 0x00000006u, 0x00003362u, 0x00003352u, 0x000006c2u, 0x0003003eu, 0x0000335du, 0x00003362u, 0x0004007cu, 0x00000008u, 0x00003364u, 0x00003360u, 0x0004007cu, 0x00000008u, 0x0000336au, 0x00003362u, 0x00070050u, 0x00000009u, 0x0000336bu, 0x00003364u, 0x00003364u, 0x00003364u, 0x0000336au, 0x0003003eu, 0x0000335eu, 0x0000336bu, 0x0003003eu, 0x00003323u, 0x0000336bu, 0x000200f9u, 0x00003354u, 0x000200f8u, 0x00003354u, 0x000700f5u, 0x00000009u, 0x0000818eu, 0x0000336bu, 0x00003355u, 0x00003385u, 0x00003356u, 0x0003003eu, 0x00003326u, 0x0000818eu, 0x0003003eu, 0x00002c59u, 0x0000818eu, 0x000200f9u, 0x00002dfbu, 0x000200f8u, 0x00002dfbu, 0x000700f5u, 0x00000009u, 0x00008428u, 0x000083f8u, 0x00002de6u, 0x0000818eu, 0x00003354u, 0x000200f9u, 0x00002dd7u, 0x000200f8u, 0x00002dd7u, 0x000900f5u, 0x00000009u, 0x00008427u, 0x00008428u, 0x00002dfbu, 0x0000842eu, 0x00002e2fu, 0x00008433u, 0x00002e5du, 0x000900f5u, 0x00000009u, 0x000083adu, 0x000083afu, 0x00002dfbu, 0x000083b4u, 0x00002e2fu, 0x000083b8u, 0x00002e5du, 0x000900f5u, 0x00000009u, 0x00008330u, 0x00008137u, 0x00002dfbu, 0x000080dfu, 0x00002e2fu, 0x00008081u, 0x00002e5du, 0x000900f5u, 0x00000009u, 0x000082b2u, 0x000082b4u, 0x00002dfbu, 0x000082bau, 0x00002e2fu, 0x000082bfu, 0x00002e5du, 0x000200f9u, 0x00002dceu, 0x000200f8u, 0x00002dceu, 0x000700f5u, 0x00000009u, 0x000083deu, 0x000083f8u, 0x00002dcau, 0x00008427u, 0x00002dd7u, 0x000700f5u, 0x00000009u, 0x00008364u, 0x0000837eu, 0x00002dcau, 0x000083adu, 0x00002dd7u, 0x000700f5u, 0x00000009u, 0x000082e7u, 0x00008301u, 0x00002dcau, 0x00008330u, 0x00002dd7u, 0x000700f5u, 0x00000009u, 0x00008268u, 0x00008282u, 0x00002dcau, 0x000082b2u, 0x00002dd7u, 0x000200f9u, 0x00002dc9u, 0x000200f8u, 0x00002dc9u, 0x000700f5u, 0x00000009u, 0x000083ddu, 0x000083deu, 0x00002dceu, 0x00008438u, 0x00002e6au, 0x000700f5u, 0x00000009u, 0x00008363u, 0x00008364u, 0x00002dceu, 0x000083bbu, 0x00002e6au, 0x000700f5u, 0x00000009u, 0x000082e6u, 0x000082e7u, 0x00002dceu, 0x00008340u, 0x00002e6au, 0x000700f5u, 0x00000009u, 0x00008267u, 0x00008268u, 0x00002dceu, 0x000082c3u, 0x00002e6au, 0x000300f7u, 0x000030b8u, 0x00000000u, 0x000400fau, 0x00002dbbu, 0x000030b9u, 0x000030bau, 0x000200f8u, 0x000030bau, 0x000300f7u, 0x000030e6u, 0x00000000u, 0x000400fau, 0x00002db5u, 0x000030e7u, 0x000030e8u, 0x000200f8u, 0x000030e8u, 0x000300f7u, 0x000030f6u, 0x00000000u, 0x000400fau, 0x00002dbdu, 0x000030f7u, 0x000030f8u, 0x000200f8u, 0x000030f8u, 0x0004003du, 0x0000005fu, 0x000030fdu, 0x00002c2du, 0x0003003eu, 0x00002d62u, 0x000030fdu, 0x000200f9u, 0x000030f6u, 0x000200f8u, 0x000030f7u, 0x0004003du, 0x0000005fu, 0x000030f9u, 0x00002c2du, 0x0007004fu, 0x0000005fu, 0x000030fau, 0x000030f9u, 0x000030f9u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000030fcu, 0x0000eec2u, 0x000030fau, 0x0003003eu, 0x00002d62u, 0x000030fcu, 0x000200f9u, 0x000030f6u, 0x000200f8u, 0x000030f6u, 0x000700f5u, 0x0000005fu, 0x00008265u, 0x000030fcu, 0x000030f7u, 0x000030fdu, 0x000030f8u, 0x00050051u, 0x00000008u, 0x000030ffu, 0x00008265u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003100u, 0x00008265u, 0x00000001u, 0x0003003eu, 0x00002d61u, 0x00008265u, 0x00050082u, 0x00000009u, 0x00003104u, 0x00008267u, 0x000082e6u, 0x00050041u, 0x0000003eu, 0x00003105u, 0x00002d61u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00003106u, 0x00003105u, 0x00070050u, 0x00000009u, 0x00003107u, 0x00003106u, 0x00003106u, 0x00003106u, 0x00003106u, 0x00050084u, 0x00000009u, 0x00003108u, 0x00003104u, 0x00003107u, 0x0003003eu, 0x00002d53u, 0x00003108u, 0x00050082u, 0x00000009u, 0x0000310bu, 0x00008363u, 0x000082e6u, 0x00050041u, 0x0000003eu, 0x0000310cu, 0x00002d61u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000310du, 0x0000310cu, 0x00070050u, 0x00000009u, 0x0000310eu, 0x0000310du, 0x0000310du, 0x0000310du, 0x0000310du, 0x00050084u, 0x00000009u, 0x0000310fu, 0x0000310bu, 0x0000310eu, 0x00050080u, 0x00000009u, 0x00003111u, 0x00003108u, 0x0000310fu, 0x0003003eu, 0x00002d53u, 0x00003111u, 0x00050080u, 0x00000009u, 0x00003114u, 0x00003111u, 0x0000eec3u, 0x0003003eu, 0x00002d53u, 0x00003114u, 0x000500c3u, 0x00000009u, 0x00003117u, 0x00003114u, 0x0000eec4u, 0x0003003eu, 0x00002d53u, 0x00003117u, 0x00050080u, 0x00000009u, 0x0000311au, 0x00003117u, 0x000082e6u, 0x0003003eu, 0x00002d53u, 0x0000311au, 0x000200f9u, 0x000030e6u, 0x000200f8u, 0x000030e7u, 0x00050080u, 0x00000009u, 0x000030ebu, 0x000082e6u, 0x00008363u, 0x00050080u, 0x00000009u, 0x000030edu, 0x000030ebu, 0x00008267u, 0x00050080u, 0x00000009u, 0x000030efu, 0x000030edu, 0x000083ddu, 0x00050080u, 0x00000009u, 0x000030f1u, 0x000030efu, 0x0000eec0u, 0x000500c3u, 0x00000009u, 0x000030f3u, 0x000030f1u, 0x0000eec0u, 0x0003003eu, 0x00002d53u, 0x000030f3u, 0x000200f9u, 0x000030e6u, 0x000200f8u, 0x000030e6u, 0x000700f5u, 0x00000009u, 0x0000851cu, 0x000030f3u, 0x000030e7u, 0x0000311au, 0x000030f6u, 0x000200f9u, 0x000030b8u, 0x000200f8u, 0x000030b9u, 0x000300f7u, 0x000030bcu, 0x00000000u, 0x000400fau, 0x00002101u, 0x000030bdu, 0x000030beu, 0x000200f8u, 0x000030beu, 0x0003003eu, 0x00002d53u, 0x000082e6u, 0x000200f9u, 0x000030bcu, 0x000200f8u, 0x000030bdu, 0x000500c7u, 0x00000008u, 0x000030c0u, 0x00007e6fu, 0x00000212u, 0x000500c4u, 0x00000008u, 0x000030c1u, 0x000030c0u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000030c3u, 0x00002d8bu, 0x000500c3u, 0x00000008u, 0x000030c4u, 0x000030c3u, 0x00000212u, 0x000500c5u, 0x00000008u, 0x000030c5u, 0x000030c1u, 0x000030c4u, 0x0003003eu, 0x00002d54u, 0x000030c5u, 0x0004003du, 0x00000008u, 0x000030c8u, 0x00002d8du, 0x00050050u, 0x0000005fu, 0x000030c9u, 0x000030c5u, 0x000030c8u, 0x0007004fu, 0x0000005fu, 0x000030cbu, 0x000082e6u, 0x000082e6u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d56u, 0x000030cbu, 0x0007004fu, 0x0000005fu, 0x000030cdu, 0x00008267u, 0x00008267u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d57u, 0x000030cdu, 0x0007004fu, 0x0000005fu, 0x000030cfu, 0x00008363u, 0x00008363u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d58u, 0x000030cfu, 0x0007004fu, 0x0000005fu, 0x000030d1u, 0x000083ddu, 0x000083ddu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d59u, 0x000030d1u, 0x0003003eu, 0x00002d5au, 0x000030c9u, 0x00050041u, 0x0000003eu, 0x00004290u, 0x00002d5au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004291u, 0x00004290u, 0x00050041u, 0x0000003eu, 0x00004292u, 0x00002d5au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004293u, 0x00004292u, 0x00050080u, 0x00000008u, 0x00004294u, 0x00004291u, 0x00004293u, 0x0003003eu, 0x0000428au, 0x00004294u, 0x000500afu, 0x0000005du, 0x00004296u, 0x00004294u, 0x0000037du, 0x00050050u, 0x00000879u, 0x00004299u, 0x00004296u, 0x00004296u, 0x000600a9u, 0x0000005fu, 0x0000429au, 0x00004299u, 0x000030d1u, 0x000030cbu, 0x0003003eu, 0x0000428bu, 0x0000429au, 0x000300f7u, 0x0000429du, 0x00000000u, 0x000400fau, 0x00004296u, 0x0000429eu, 0x0000429fu, 0x000200f8u, 0x0000429fu, 0x0004003du, 0x0000005fu, 0x000042a4u, 0x00002d5au, 0x0003003eu, 0x0000428du, 0x000042a4u, 0x000200f9u, 0x0000429du, 0x000200f8u, 0x0000429eu, 0x0004003du, 0x0000005fu, 0x000042a0u, 0x00002d5au, 0x0007004fu, 0x0000005fu, 0x000042a1u, 0x000042a0u, 0x000042a0u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000042a3u, 0x0000eec2u, 0x000042a1u, 0x0003003eu, 0x0000428du, 0x000042a3u, 0x000200f9u, 0x0000429du, 0x000200f8u, 0x0000429du, 0x000700f5u, 0x0000005fu, 0x000084bfu, 0x000042a3u, 0x0000429eu, 0x000042a4u, 0x0000429fu, 0x00050051u, 0x00000008u, 0x000042a6u, 0x000084bfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000042a7u, 0x000084bfu, 0x00000001u, 0x0003003eu, 0x0000428cu, 0x000084bfu, 0x00050082u, 0x0000005fu, 0x000042abu, 0x000030cdu, 0x0000429au, 0x00050041u, 0x0000003eu, 0x000042acu, 0x0000428cu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000042adu, 0x000042acu, 0x00050050u, 0x0000005fu, 0x000042aeu, 0x000042adu, 0x000042adu, 0x00050084u, 0x0000005fu, 0x000042afu, 0x000042abu, 0x000042aeu, 0x0003003eu, 0x0000428eu, 0x000042afu, 0x00050082u, 0x0000005fu, 0x000042b2u, 0x000030cfu, 0x0000429au, 0x00050041u, 0x0000003eu, 0x000042b3u, 0x0000428cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042b4u, 0x000042b3u, 0x00050050u, 0x0000005fu, 0x000042b5u, 0x000042b4u, 0x000042b4u, 0x00050084u, 0x0000005fu, 0x000042b6u, 0x000042b2u, 0x000042b5u, 0x00050080u, 0x0000005fu, 0x000042b8u, 0x000042afu, 0x000042b6u, 0x0003003eu, 0x0000428eu, 0x000042b8u, 0x00050080u, 0x0000005fu, 0x000042bbu, 0x000042b8u, 0x00001361u, 0x0003003eu, 0x0000428eu, 0x000042bbu, 0x000500c3u, 0x0000005fu, 0x000042beu, 0x000042bbu, 0x0000eeb9u, 0x0003003eu, 0x0000428eu, 0x000042beu, 0x00050080u, 0x0000005fu, 0x000042c1u, 0x000042beu, 0x0000429au, 0x0003003eu, 0x0000428eu, 0x000042c1u, 0x0003003eu, 0x0000428fu, 0x000042c1u, 0x0003003eu, 0x00002d55u, 0x000042c1u, 0x0007004fu, 0x0000005fu, 0x000030d4u, 0x000082e6u, 0x000082e6u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d5cu, 0x000030d4u, 0x0007004fu, 0x0000005fu, 0x000030d6u, 0x00008267u, 0x00008267u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d5du, 0x000030d6u, 0x0007004fu, 0x0000005fu, 0x000030d8u, 0x00008363u, 0x00008363u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d5eu, 0x000030d8u, 0x0007004fu, 0x0000005fu, 0x000030dau, 0x000083ddu, 0x000083ddu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d5fu, 0x000030dau, 0x0004003du, 0x0000005fu, 0x000030dbu, 0x00002c2du, 0x0003003eu, 0x00002d60u, 0x000030dbu, 0x00050041u, 0x0000003eu, 0x000042c9u, 0x00002d60u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000042cau, 0x000042c9u, 0x00050041u, 0x0000003eu, 0x000042cbu, 0x00002d60u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042ccu, 0x000042cbu, 0x00050080u, 0x00000008u, 0x000042cdu, 0x000042cau, 0x000042ccu, 0x0003003eu, 0x000042c3u, 0x000042cdu, 0x000500afu, 0x0000005du, 0x000042cfu, 0x000042cdu, 0x0000037du, 0x00050050u, 0x00000879u, 0x000042d2u, 0x000042cfu, 0x000042cfu, 0x000600a9u, 0x0000005fu, 0x000042d3u, 0x000042d2u, 0x000030dau, 0x000030d4u, 0x0003003eu, 0x000042c4u, 0x000042d3u, 0x000300f7u, 0x000042d6u, 0x00000000u, 0x000400fau, 0x000042cfu, 0x000042d7u, 0x000042d8u, 0x000200f8u, 0x000042d8u, 0x0004003du, 0x0000005fu, 0x000042ddu, 0x00002d60u, 0x0003003eu, 0x000042c6u, 0x000042ddu, 0x000200f9u, 0x000042d6u, 0x000200f8u, 0x000042d7u, 0x0004003du, 0x0000005fu, 0x000042d9u, 0x00002d60u, 0x0007004fu, 0x0000005fu, 0x000042dau, 0x000042d9u, 0x000042d9u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000042dcu, 0x0000eec2u, 0x000042dau, 0x0003003eu, 0x000042c6u, 0x000042dcu, 0x000200f9u, 0x000042d6u, 0x000200f8u, 0x000042d6u, 0x000700f5u, 0x0000005fu, 0x000084c7u, 0x000042dcu, 0x000042d7u, 0x000042ddu, 0x000042d8u, 0x00050051u, 0x00000008u, 0x000042dfu, 0x000084c7u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000042e0u, 0x000084c7u, 0x00000001u, 0x0003003eu, 0x000042c5u, 0x000084c7u, 0x00050082u, 0x0000005fu, 0x000042e4u, 0x000030d6u, 0x000042d3u, 0x00050041u, 0x0000003eu, 0x000042e5u, 0x000042c5u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000042e6u, 0x000042e5u, 0x00050050u, 0x0000005fu, 0x000042e7u, 0x000042e6u, 0x000042e6u, 0x00050084u, 0x0000005fu, 0x000042e8u, 0x000042e4u, 0x000042e7u, 0x0003003eu, 0x000042c7u, 0x000042e8u, 0x00050082u, 0x0000005fu, 0x000042ebu, 0x000030d8u, 0x000042d3u, 0x00050041u, 0x0000003eu, 0x000042ecu, 0x000042c5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042edu, 0x000042ecu, 0x00050050u, 0x0000005fu, 0x000042eeu, 0x000042edu, 0x000042edu, 0x00050084u, 0x0000005fu, 0x000042efu, 0x000042ebu, 0x000042eeu, 0x00050080u, 0x0000005fu, 0x000042f1u, 0x000042e8u, 0x000042efu, 0x0003003eu, 0x000042c7u, 0x000042f1u, 0x00050080u, 0x0000005fu, 0x000042f4u, 0x000042f1u, 0x00001361u, 0x0003003eu, 0x000042c7u, 0x000042f4u, 0x000500c3u, 0x0000005fu, 0x000042f7u, 0x000042f4u, 0x0000eeb9u, 0x0003003eu, 0x000042c7u, 0x000042f7u, 0x00050080u, 0x0000005fu, 0x000042fau, 0x000042f7u, 0x000042d3u, 0x0003003eu, 0x000042c7u, 0x000042fau, 0x0003003eu, 0x000042c8u, 0x000042fau, 0x0003003eu, 0x00002d5bu, 0x000042fau, 0x00050051u, 0x00000008u, 0x000030dfu, 0x000042c1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000030e0u, 0x000042c1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000030e1u, 0x000042fau, 0x00000000u, 0x00050051u, 0x00000008u, 0x000030e2u, 0x000042fau, 0x00000001u, 0x00070050u, 0x00000009u, 0x000030e3u, 0x000030dfu, 0x000030e0u, 0x000030e1u, 0x000030e2u, 0x0003003eu, 0x00002d53u, 0x000030e3u, 0x000200f9u, 0x000030bcu, 0x000200f8u, 0x000030bcu, 0x000700f5u, 0x00000009u, 0x0000851bu, 0x000030e3u, 0x000042d6u, 0x000082e6u, 0x000030beu, 0x000200f9u, 0x000030b8u, 0x000200f8u, 0x000030b8u, 0x000700f5u, 0x00000009u, 0x0000851au, 0x0000851bu, 0x000030bcu, 0x0000851cu, 0x000030e6u, 0x0003003eu, 0x00002d63u, 0x0000851au, 0x0003003eu, 0x00002059u, 0x0000851au, 0x000400a8u, 0x0000005du, 0x00002212u, 0x00002101u, 0x000400a8u, 0x0000005du, 0x00002214u, 0x0000213du, 0x000500a7u, 0x0000005du, 0x00002215u, 0x00002212u, 0x00002214u, 0x000300f7u, 0x00002216u, 0x00000000u, 0x000400fau, 0x00002215u, 0x00002217u, 0x00002216u, 0x000200f8u, 0x00002217u, 0x0003003eu, 0x00002063u, 0x0000851au, 0x0003003eu, 0x00002064u, 0x000028beu, 0x00050051u, 0x00000008u, 0x00004303u, 0x0000851au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004304u, 0x0000851au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004305u, 0x0000851au, 0x00000002u, 0x00050051u, 0x00000008u, 0x00004306u, 0x0000851au, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004308u, 0x0000851au, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000042fcu, 0x00004308u, 0x00050041u, 0x0000003eu, 0x00004309u, 0x000042fcu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000430au, 0x00004309u, 0x00050041u, 0x0000003eu, 0x0000430bu, 0x00002064u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000430cu, 0x0000430bu, 0x00050041u, 0x0000003eu, 0x0000430du, 0x000042fcu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000430eu, 0x0000430du, 0x00050084u, 0x00000008u, 0x0000430fu, 0x0000430cu, 0x0000430eu, 0x00050080u, 0x00000008u, 0x00004310u, 0x0000430fu, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00004311u, 0x00004310u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00004312u, 0x0000430au, 0x00004311u, 0x0003003eu, 0x000042fdu, 0x00004312u, 0x0004003du, 0x00000008u, 0x00004314u, 0x00004309u, 0x00050041u, 0x0000003eu, 0x00004315u, 0x00002064u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004316u, 0x00004315u, 0x00050041u, 0x0000003eu, 0x00004317u, 0x000042fcu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004318u, 0x00004317u, 0x00050084u, 0x00000008u, 0x00004319u, 0x00004316u, 0x00004318u, 0x00050041u, 0x0000003eu, 0x0000431au, 0x00002064u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000431bu, 0x0000431au, 0x0004003du, 0x00000008u, 0x0000431du, 0x0000430du, 0x00050084u, 0x00000008u, 0x0000431eu, 0x0000431bu, 0x0000431du, 0x00050080u, 0x00000008u, 0x0000431fu, 0x00004319u, 0x0000431eu, 0x00050080u, 0x00000008u, 0x00004320u, 0x0000431fu, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00004321u, 0x00004320u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00004322u, 0x00004314u, 0x00004321u, 0x0003003eu, 0x000042feu, 0x00004322u, 0x0004003du, 0x00000008u, 0x00004324u, 0x00004309u, 0x00050041u, 0x0000003eu, 0x00004325u, 0x00002064u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00004326u, 0x00004325u, 0x0004003du, 0x00000008u, 0x00004328u, 0x00004317u, 0x00050084u, 0x00000008u, 0x00004329u, 0x00004326u, 0x00004328u, 0x00050080u, 0x00000008u, 0x0000432au, 0x00004329u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000432bu, 0x0000432au, 0x0000025eu, 0x00050080u, 0x00000008u, 0x0000432cu, 0x00004324u, 0x0000432bu, 0x0003003eu, 0x000042ffu, 0x0000432cu, 0x0004003du, 0x00000008u, 0x0000432eu, 0x00004309u, 0x0003003eu, 0x00004300u, 0x0000432eu, 0x00070050u, 0x00000009u, 0x00004333u, 0x00004312u, 0x00004322u, 0x0000432cu, 0x0000432eu, 0x0003003eu, 0x00004301u, 0x00004333u, 0x0003003eu, 0x00002059u, 0x00004333u, 0x000200f9u, 0x00002216u, 0x000200f8u, 0x00002216u, 0x000700f5u, 0x00000009u, 0x000093e8u, 0x0000851au, 0x000030b8u, 0x00004333u, 0x00002217u, 0x000200f9u, 0x00002200u, 0x000200f8u, 0x00002200u, 0x000700f5u, 0x00000009u, 0x0000df7au, 0x000083f8u, 0x000021eeu, 0x000083ddu, 0x00002216u, 0x000700f5u, 0x00000009u, 0x0000de70u, 0x0000837eu, 0x000021eeu, 0x00008363u, 0x00002216u, 0x000700f5u, 0x00000009u, 0x0000dd66u, 0x00008301u, 0x000021eeu, 0x000082e6u, 0x00002216u, 0x000700f5u, 0x00000009u, 0x0000dc5cu, 0x00008282u, 0x000021eeu, 0x00008267u, 0x00002216u, 0x000700f5u, 0x00000009u, 0x000093b0u, 0x000093bdu, 0x000021eeu, 0x000093e8u, 0x00002216u, 0x000300f7u, 0x0000221du, 0x00000000u, 0x000400fau, 0x00002134u, 0x0000221eu, 0x0000221du, 0x000200f8u, 0x0000221eu, 0x00050080u, 0x00000008u, 0x00002227u, 0x000020d4u, 0x00000212u, 0x00050080u, 0x00000008u, 0x00002228u, 0x000020cfu, 0x00002227u, 0x00070041u, 0x00000270u, 0x00002229u, 0x00000314u, 0x00000203u, 0x00002228u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x0000222au, 0x00002229u, 0x00040071u, 0x00000006u, 0x0000222bu, 0x0000222au, 0x000500abu, 0x0000005du, 0x0000222cu, 0x0000222bu, 0x00000374u, 0x0003003eu, 0x00002065u, 0x0000222cu, 0x000500afu, 0x0000005du, 0x0000222fu, 0x0000234cu, 0x0000025eu, 0x0003003eu, 0x00002066u, 0x0000222fu, 0x000300f7u, 0x00002232u, 0x00000000u, 0x000400fau, 0x00002151u, 0x00002233u, 0x00002234u, 0x000200f8u, 0x00002234u, 0x0003003eu, 0x00002068u, 0x00002345u, 0x000200f9u, 0x00002232u, 0x000200f8u, 0x00002233u, 0x0003003eu, 0x00002068u, 0x00002348u, 0x000200f9u, 0x00002232u, 0x000200f8u, 0x00002232u, 0x000600a9u, 0x00000008u, 0x0000eedcu, 0x00002151u, 0x00002348u, 0x00002345u, 0x000500aau, 0x0000005du, 0x0000223au, 0x00007a43u, 0x0000eedcu, 0x0003003eu, 0x00002067u, 0x0000223au, 0x000500a7u, 0x0000005du, 0x0000223du, 0x0000223au, 0x0000222fu, 0x000500a7u, 0x0000005du, 0x0000223fu, 0x0000223du, 0x0000222cu, 0x000300f7u, 0x00002240u, 0x00000000u, 0x000400fau, 0x0000223fu, 0x00002241u, 0x00002242u, 0x000200f8u, 0x00002242u, 0x00050084u, 0x00000008u, 0x0000225eu, 0x000021bcu, 0x00000880u, 0x00050080u, 0x00000008u, 0x0000225fu, 0x000021bau, 0x0000225eu, 0x0003003eu, 0x0000206eu, 0x00002335u, 0x0003003eu, 0x0000206fu, 0x00002362u, 0x0003003eu, 0x00002070u, 0x0000225fu, 0x0003003eu, 0x00002071u, 0x0000210au, 0x0008004fu, 0x0000003cu, 0x000043c5u, 0x00002335u, 0x00002335u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x0000003cu, 0x000043c7u, 0x00002362u, 0x00002362u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x000043c9u, 0x000043c7u, 0x0000eeb2u, 0x000500c3u, 0x0000003cu, 0x000043cbu, 0x000043c9u, 0x00002933u, 0x00060050u, 0x0000003cu, 0x000043cdu, 0x0000225fu, 0x0000225fu, 0x0000225fu, 0x00050084u, 0x0000003cu, 0x000043ceu, 0x000043cbu, 0x000043cdu, 0x00050080u, 0x0000003cu, 0x000043cfu, 0x000043c5u, 0x000043ceu, 0x0003003eu, 0x000043bdu, 0x000043cfu, 0x000500c3u, 0x0000003cu, 0x000043d2u, 0x000043cfu, 0x0000eeb3u, 0x0003003eu, 0x000043bdu, 0x000043d2u, 0x000300f7u, 0x000043d4u, 0x00000000u, 0x000400fau, 0x0000210au, 0x000043d5u, 0x000043d6u, 0x000200f8u, 0x000043d6u, 0x0003003eu, 0x000043c2u, 0x000043d2u, 0x0007004fu, 0x0000005fu, 0x00004466u, 0x000043d2u, 0x000043d2u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004464u, 0x00004466u, 0x0003003eu, 0x000043beu, 0x00004466u, 0x000200f9u, 0x000043d4u, 0x000200f8u, 0x000043d5u, 0x0003003eu, 0x000043c0u, 0x000043d2u, 0x0003003eu, 0x000043c1u, 0x00008d88u, 0x00050041u, 0x0000003eu, 0x000043e8u, 0x000043c0u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000043e9u, 0x000043e8u, 0x0003003eu, 0x000043deu, 0x000043e9u, 0x000500b3u, 0x0000005du, 0x000043ebu, 0x000043e9u, 0x00000203u, 0x0003003eu, 0x000043dfu, 0x000043ebu, 0x000500c7u, 0x00000008u, 0x000043edu, 0x000043e9u, 0x00000bfdu, 0x0003003eu, 0x000043deu, 0x000043edu, 0x0003003eu, 0x000043e1u, 0x000043edu, 0x0006000cu, 0x00000008u, 0x00004449u, 0x00000001u, 0x0000004au, 0x000043edu, 0x00050082u, 0x00000008u, 0x0000444au, 0x00000283u, 0x00004449u, 0x0007000cu, 0x00000008u, 0x0000444bu, 0x00000001u, 0x00000027u, 0x0000444au, 0x00000283u, 0x0003003eu, 0x00004441u, 0x0000444bu, 0x000500c4u, 0x00000008u, 0x0000444eu, 0x000043edu, 0x0000444bu, 0x000500c7u, 0x00000008u, 0x0000444fu, 0x0000444eu, 0x00000b17u, 0x0003003eu, 0x00004442u, 0x0000444fu, 0x000500c7u, 0x00000008u, 0x00004451u, 0x0000444fu, 0x0000038bu, 0x0003003eu, 0x00004443u, 0x00004451u, 0x000500c3u, 0x00000008u, 0x00004453u, 0x0000444fu, 0x0000025eu, 0x0003003eu, 0x00004445u, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x00004454u, 0x00004445u, 0x00004453u, 0x0004003du, 0x0000005fu, 0x00004455u, 0x00004454u, 0x00050051u, 0x00000008u, 0x00004456u, 0x00004455u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004457u, 0x00004455u, 0x00000001u, 0x0003003eu, 0x00004444u, 0x00004455u, 0x00050041u, 0x0000003eu, 0x00004459u, 0x00004444u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000445au, 0x00004459u, 0x00050084u, 0x00000008u, 0x0000445cu, 0x0000445au, 0x00004451u, 0x000500c3u, 0x00000008u, 0x0000445du, 0x0000445cu, 0x0000026au, 0x00050041u, 0x0000003eu, 0x0000445eu, 0x00004444u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000445fu, 0x0000445eu, 0x00050080u, 0x00000008u, 0x00004460u, 0x0000445du, 0x0000445fu, 0x0003003eu, 0x00004446u, 0x00004460u, 0x00050050u, 0x0000005fu, 0x00004463u, 0x00004460u, 0x0000444bu, 0x0003003eu, 0x00004447u, 0x00004463u, 0x0003003eu, 0x000043e0u, 0x00004463u, 0x00050041u, 0x0000003eu, 0x000043f0u, 0x000043e0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000043f1u, 0x000043f0u, 0x0003003eu, 0x000043e2u, 0x000043f1u, 0x0004003du, 0x0000003cu, 0x000043f2u, 0x000043c0u, 0x0007004fu, 0x0000005fu, 0x000043f3u, 0x000043f2u, 0x000043f2u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x000043f4u, 0x000043e0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000043f5u, 0x000043f4u, 0x00050050u, 0x0000005fu, 0x000043f6u, 0x000043f5u, 0x000043f5u, 0x00050084u, 0x0000005fu, 0x000043f7u, 0x000043f3u, 0x000043f6u, 0x0003003eu, 0x000043e3u, 0x000043f7u, 0x000500c3u, 0x00000008u, 0x000043f9u, 0x00000c10u, 0x000043f1u, 0x0004007eu, 0x00000008u, 0x000043fau, 0x000043f9u, 0x000500c7u, 0x00000008u, 0x000043fbu, 0x00000c0fu, 0x000043fau, 0x0003003eu, 0x000043e4u, 0x000043fbu, 0x0004003du, 0x0000005fu, 0x000043fcu, 0x000043e3u, 0x00050050u, 0x0000005fu, 0x000043feu, 0x000043fbu, 0x000043fbu, 0x000500c7u, 0x0000005fu, 0x000043ffu, 0x000043fcu, 0x000043feu, 0x0003003eu, 0x000043e5u, 0x000043ffu, 0x000500abu, 0x0000005du, 0x00004401u, 0x000043f1u, 0x00000283u, 0x000300f7u, 0x00004402u, 0x00000000u, 0x000400fau, 0x00004401u, 0x00004403u, 0x00004404u, 0x000200f8u, 0x00004404u, 0x0004003du, 0x0000005fu, 0x0000440au, 0x000043e3u, 0x000500c4u, 0x0000005fu, 0x0000440cu, 0x0000440au, 0x0000eeb7u, 0x0003003eu, 0x000043e6u, 0x0000440cu, 0x000200f9u, 0x00004402u, 0x000200f8u, 0x00004403u, 0x0004003du, 0x0000005fu, 0x00004405u, 0x000043e3u, 0x00050082u, 0x00000008u, 0x00004407u, 0x0000027du, 0x000043f1u, 0x00050050u, 0x0000005fu, 0x00004408u, 0x00004407u, 0x00004407u, 0x000500c3u, 0x0000005fu, 0x00004409u, 0x00004405u, 0x00004408u, 0x0003003eu, 0x000043e3u, 0x00004409u, 0x0003003eu, 0x000043e6u, 0x00004409u, 0x000200f9u, 0x00004402u, 0x000200f8u, 0x00004402u, 0x0004003du, 0x0000005fu, 0x0000440du, 0x000043e5u, 0x000500abu, 0x00000879u, 0x0000440eu, 0x0000440du, 0x00000c29u, 0x0004009au, 0x0000005du, 0x0000440fu, 0x0000440eu, 0x000300f7u, 0x00004410u, 0x00000000u, 0x000400fau, 0x0000440fu, 0x00004411u, 0x00004410u, 0x000200f8u, 0x00004411u, 0x00050041u, 0x0000003eu, 0x00004412u, 0x000043e5u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004413u, 0x00004412u, 0x000500abu, 0x0000005du, 0x00004415u, 0x00004413u, 0x000043fbu, 0x000300f7u, 0x00004416u, 0x00000000u, 0x000400fau, 0x00004415u, 0x00004417u, 0x00004416u, 0x000200f8u, 0x00004417u, 0x0004003du, 0x00000008u, 0x00004419u, 0x00004412u, 0x000500abu, 0x0000005du, 0x0000441au, 0x00004419u, 0x00000203u, 0x000200f9u, 0x00004416u, 0x000200f8u, 0x00004416u, 0x000700f5u, 0x0000005du, 0x0000441bu, 0x00004415u, 0x00004411u, 0x0000441au, 0x00004417u, 0x000300f7u, 0x0000441cu, 0x00000000u, 0x000400fau, 0x0000441bu, 0x0000441du, 0x0000441cu, 0x000200f8u, 0x0000441du, 0x00050041u, 0x0000003eu, 0x0000441eu, 0x000043e3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000441fu, 0x0000441eu, 0x000500c7u, 0x00000008u, 0x00004420u, 0x0000441fu, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00004421u, 0x00004420u, 0x00000203u, 0x000300f7u, 0x00004422u, 0x00000000u, 0x000400fau, 0x00004421u, 0x00004423u, 0x00004424u, 0x000200f8u, 0x00004424u, 0x00050041u, 0x0000003eu, 0x00004426u, 0x000043e6u, 0x00000374u, 0x0003003eu, 0x00004426u, 0x00000c42u, 0x000200f9u, 0x00004422u, 0x000200f8u, 0x00004423u, 0x00050041u, 0x0000003eu, 0x00004425u, 0x000043e6u, 0x00000374u, 0x0003003eu, 0x00004425u, 0x00000bfdu, 0x000200f9u, 0x00004422u, 0x000200f8u, 0x00004422u, 0x0003003eu, 0x000043c1u, 0x0000055eu, 0x000200f9u, 0x0000441cu, 0x000200f8u, 0x0000441cu, 0x000600a9u, 0x0000005du, 0x0000eeddu, 0x0000441bu, 0x0000055eu, 0x00008d88u, 0x00050041u, 0x0000003eu, 0x00004427u, 0x000043e5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004428u, 0x00004427u, 0x000500abu, 0x0000005du, 0x0000442au, 0x00004428u, 0x000043fbu, 0x000300f7u, 0x0000442bu, 0x00000000u, 0x000400fau, 0x0000442au, 0x0000442cu, 0x0000442bu, 0x000200f8u, 0x0000442cu, 0x0004003du, 0x00000008u, 0x0000442eu, 0x00004427u, 0x000500abu, 0x0000005du, 0x0000442fu, 0x0000442eu, 0x00000203u, 0x000200f9u, 0x0000442bu, 0x000200f8u, 0x0000442bu, 0x000700f5u, 0x0000005du, 0x00004430u, 0x0000442au, 0x0000441cu, 0x0000442fu, 0x0000442cu, 0x000300f7u, 0x00004431u, 0x00000000u, 0x000400fau, 0x00004430u, 0x00004432u, 0x00004431u, 0x000200f8u, 0x00004432u, 0x00050041u, 0x0000003eu, 0x00004433u, 0x000043e3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004434u, 0x00004433u, 0x000500c7u, 0x00000008u, 0x00004435u, 0x00004434u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00004436u, 0x00004435u, 0x00000203u, 0x000300f7u, 0x00004437u, 0x00000000u, 0x000400fau, 0x00004436u, 0x00004438u, 0x00004439u, 0x000200f8u, 0x00004439u, 0x00050041u, 0x0000003eu, 0x0000443bu, 0x000043e6u, 0x00000485u, 0x0003003eu, 0x0000443bu, 0x00000c42u, 0x000200f9u, 0x00004437u, 0x000200f8u, 0x00004438u, 0x00050041u, 0x0000003eu, 0x0000443au, 0x000043e6u, 0x00000485u, 0x0003003eu, 0x0000443au, 0x00000bfdu, 0x000200f9u, 0x00004437u, 0x000200f8u, 0x00004437u, 0x0003003eu, 0x000043c1u, 0x0000055eu, 0x000200f9u, 0x00004431u, 0x000200f8u, 0x00004431u, 0x000600a9u, 0x0000005du, 0x0000eedeu, 0x00004430u, 0x0000055eu, 0x0000eeddu, 0x000200f9u, 0x00004410u, 0x000200f8u, 0x00004410u, 0x000700f5u, 0x0000005du, 0x00008e13u, 0x00008d88u, 0x00004402u, 0x0000eedeu, 0x00004431u, 0x000300f7u, 0x0000443du, 0x00000000u, 0x000400fau, 0x000043ebu, 0x0000443eu, 0x0000443du, 0x000200f8u, 0x0000443eu, 0x0003003eu, 0x000043e6u, 0x00000c5cu, 0x0003003eu, 0x000043c1u, 0x0000055eu, 0x000200f9u, 0x0000443du, 0x000200f8u, 0x0000443du, 0x000600a9u, 0x0000005du, 0x0000eedfu, 0x000043ebu, 0x0000055eu, 0x00008e13u, 0x0004003du, 0x0000005fu, 0x0000443fu, 0x000043e6u, 0x0008000cu, 0x0000005fu, 0x00004440u, 0x00000001u, 0x0000002du, 0x0000443fu, 0x00000c5fu, 0x00000c60u, 0x0003003eu, 0x000043e7u, 0x00004440u, 0x0003003eu, 0x000043bfu, 0x0000eedfu, 0x0003003eu, 0x000043beu, 0x00004440u, 0x000200f9u, 0x000043d4u, 0x000200f8u, 0x000043d4u, 0x000700f5u, 0x0000005du, 0x0000e091u, 0x0000eedfu, 0x0000443du, 0x00008d88u, 0x000043d6u, 0x000700f5u, 0x0000005fu, 0x00008e19u, 0x00004440u, 0x0000443du, 0x00004466u, 0x000043d6u, 0x0003003eu, 0x000043c3u, 0x00008e19u, 0x0003003eu, 0x00002034u, 0x00008e19u, 0x000200f9u, 0x00002240u, 0x000200f8u, 0x00002241u, 0x00070041u, 0x00000316u, 0x0000224du, 0x00000314u, 0x00000203u, 0x00002228u, 0x00000212u, 0x0004003du, 0x00000009u, 0x0000224eu, 0x0000224du, 0x0008004fu, 0x0000003cu, 0x0000224fu, 0x0000224eu, 0x0000224eu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x0000003cu, 0x00002251u, 0x0000224fu, 0x0000eeb3u, 0x0003003eu, 0x00002069u, 0x00002251u, 0x000300f7u, 0x00002253u, 0x00000000u, 0x000400fau, 0x0000210au, 0x00002254u, 0x00002255u, 0x000200f8u, 0x00002255u, 0x0003003eu, 0x0000206du, 0x00002251u, 0x0007004fu, 0x0000005fu, 0x000043bcu, 0x00002251u, 0x00002251u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000043bau, 0x000043bcu, 0x0003003eu, 0x00002034u, 0x000043bcu, 0x000200f9u, 0x00002253u, 0x000200f8u, 0x00002254u, 0x0003003eu, 0x0000206bu, 0x00002251u, 0x0003003eu, 0x0000206cu, 0x00008e2bu, 0x00050041u, 0x0000003eu, 0x0000433eu, 0x0000206bu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000433fu, 0x0000433eu, 0x0003003eu, 0x00004334u, 0x0000433fu, 0x000500b3u, 0x0000005du, 0x00004341u, 0x0000433fu, 0x00000203u, 0x0003003eu, 0x00004335u, 0x00004341u, 0x000500c7u, 0x00000008u, 0x00004343u, 0x0000433fu, 0x00000bfdu, 0x0003003eu, 0x00004334u, 0x00004343u, 0x0003003eu, 0x00004337u, 0x00004343u, 0x0006000cu, 0x00000008u, 0x0000439fu, 0x00000001u, 0x0000004au, 0x00004343u, 0x00050082u, 0x00000008u, 0x000043a0u, 0x00000283u, 0x0000439fu, 0x0007000cu, 0x00000008u, 0x000043a1u, 0x00000001u, 0x00000027u, 0x000043a0u, 0x00000283u, 0x0003003eu, 0x00004397u, 0x000043a1u, 0x000500c4u, 0x00000008u, 0x000043a4u, 0x00004343u, 0x000043a1u, 0x000500c7u, 0x00000008u, 0x000043a5u, 0x000043a4u, 0x00000b17u, 0x0003003eu, 0x00004398u, 0x000043a5u, 0x000500c7u, 0x00000008u, 0x000043a7u, 0x000043a5u, 0x0000038bu, 0x0003003eu, 0x00004399u, 0x000043a7u, 0x000500c3u, 0x00000008u, 0x000043a9u, 0x000043a5u, 0x0000025eu, 0x0003003eu, 0x0000439bu, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x000043aau, 0x0000439bu, 0x000043a9u, 0x0004003du, 0x0000005fu, 0x000043abu, 0x000043aau, 0x00050051u, 0x00000008u, 0x000043acu, 0x000043abu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000043adu, 0x000043abu, 0x00000001u, 0x0003003eu, 0x0000439au, 0x000043abu, 0x00050041u, 0x0000003eu, 0x000043afu, 0x0000439au, 0x00000485u, 0x0004003du, 0x00000008u, 0x000043b0u, 0x000043afu, 0x00050084u, 0x00000008u, 0x000043b2u, 0x000043b0u, 0x000043a7u, 0x000500c3u, 0x00000008u, 0x000043b3u, 0x000043b2u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x000043b4u, 0x0000439au, 0x00000374u, 0x0004003du, 0x00000008u, 0x000043b5u, 0x000043b4u, 0x00050080u, 0x00000008u, 0x000043b6u, 0x000043b3u, 0x000043b5u, 0x0003003eu, 0x0000439cu, 0x000043b6u, 0x00050050u, 0x0000005fu, 0x000043b9u, 0x000043b6u, 0x000043a1u, 0x0003003eu, 0x0000439du, 0x000043b9u, 0x0003003eu, 0x00004336u, 0x000043b9u, 0x00050041u, 0x0000003eu, 0x00004346u, 0x00004336u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004347u, 0x00004346u, 0x0003003eu, 0x00004338u, 0x00004347u, 0x0004003du, 0x0000003cu, 0x00004348u, 0x0000206bu, 0x0007004fu, 0x0000005fu, 0x00004349u, 0x00004348u, 0x00004348u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x0000434au, 0x00004336u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000434bu, 0x0000434au, 0x00050050u, 0x0000005fu, 0x0000434cu, 0x0000434bu, 0x0000434bu, 0x00050084u, 0x0000005fu, 0x0000434du, 0x00004349u, 0x0000434cu, 0x0003003eu, 0x00004339u, 0x0000434du, 0x000500c3u, 0x00000008u, 0x0000434fu, 0x00000c10u, 0x00004347u, 0x0004007eu, 0x00000008u, 0x00004350u, 0x0000434fu, 0x000500c7u, 0x00000008u, 0x00004351u, 0x00000c0fu, 0x00004350u, 0x0003003eu, 0x0000433au, 0x00004351u, 0x0004003du, 0x0000005fu, 0x00004352u, 0x00004339u, 0x00050050u, 0x0000005fu, 0x00004354u, 0x00004351u, 0x00004351u, 0x000500c7u, 0x0000005fu, 0x00004355u, 0x00004352u, 0x00004354u, 0x0003003eu, 0x0000433bu, 0x00004355u, 0x000500abu, 0x0000005du, 0x00004357u, 0x00004347u, 0x00000283u, 0x000300f7u, 0x00004358u, 0x00000000u, 0x000400fau, 0x00004357u, 0x00004359u, 0x0000435au, 0x000200f8u, 0x0000435au, 0x0004003du, 0x0000005fu, 0x00004360u, 0x00004339u, 0x000500c4u, 0x0000005fu, 0x00004362u, 0x00004360u, 0x0000eeb7u, 0x0003003eu, 0x0000433cu, 0x00004362u, 0x000200f9u, 0x00004358u, 0x000200f8u, 0x00004359u, 0x0004003du, 0x0000005fu, 0x0000435bu, 0x00004339u, 0x00050082u, 0x00000008u, 0x0000435du, 0x0000027du, 0x00004347u, 0x00050050u, 0x0000005fu, 0x0000435eu, 0x0000435du, 0x0000435du, 0x000500c3u, 0x0000005fu, 0x0000435fu, 0x0000435bu, 0x0000435eu, 0x0003003eu, 0x00004339u, 0x0000435fu, 0x0003003eu, 0x0000433cu, 0x0000435fu, 0x000200f9u, 0x00004358u, 0x000200f8u, 0x00004358u, 0x0004003du, 0x0000005fu, 0x00004363u, 0x0000433bu, 0x000500abu, 0x00000879u, 0x00004364u, 0x00004363u, 0x00000c29u, 0x0004009au, 0x0000005du, 0x00004365u, 0x00004364u, 0x000300f7u, 0x00004366u, 0x00000000u, 0x000400fau, 0x00004365u, 0x00004367u, 0x00004366u, 0x000200f8u, 0x00004367u, 0x00050041u, 0x0000003eu, 0x00004368u, 0x0000433bu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004369u, 0x00004368u, 0x000500abu, 0x0000005du, 0x0000436bu, 0x00004369u, 0x00004351u, 0x000300f7u, 0x0000436cu, 0x00000000u, 0x000400fau, 0x0000436bu, 0x0000436du, 0x0000436cu, 0x000200f8u, 0x0000436du, 0x0004003du, 0x00000008u, 0x0000436fu, 0x00004368u, 0x000500abu, 0x0000005du, 0x00004370u, 0x0000436fu, 0x00000203u, 0x000200f9u, 0x0000436cu, 0x000200f8u, 0x0000436cu, 0x000700f5u, 0x0000005du, 0x00004371u, 0x0000436bu, 0x00004367u, 0x00004370u, 0x0000436du, 0x000300f7u, 0x00004372u, 0x00000000u, 0x000400fau, 0x00004371u, 0x00004373u, 0x00004372u, 0x000200f8u, 0x00004373u, 0x00050041u, 0x0000003eu, 0x00004374u, 0x00004339u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004375u, 0x00004374u, 0x000500c7u, 0x00000008u, 0x00004376u, 0x00004375u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00004377u, 0x00004376u, 0x00000203u, 0x000300f7u, 0x00004378u, 0x00000000u, 0x000400fau, 0x00004377u, 0x00004379u, 0x0000437au, 0x000200f8u, 0x0000437au, 0x00050041u, 0x0000003eu, 0x0000437cu, 0x0000433cu, 0x00000374u, 0x0003003eu, 0x0000437cu, 0x00000c42u, 0x000200f9u, 0x00004378u, 0x000200f8u, 0x00004379u, 0x00050041u, 0x0000003eu, 0x0000437bu, 0x0000433cu, 0x00000374u, 0x0003003eu, 0x0000437bu, 0x00000bfdu, 0x000200f9u, 0x00004378u, 0x000200f8u, 0x00004378u, 0x0003003eu, 0x0000206cu, 0x0000055eu, 0x000200f9u, 0x00004372u, 0x000200f8u, 0x00004372u, 0x000600a9u, 0x0000005du, 0x0000eee0u, 0x00004371u, 0x0000055eu, 0x00008e2bu, 0x00050041u, 0x0000003eu, 0x0000437du, 0x0000433bu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000437eu, 0x0000437du, 0x000500abu, 0x0000005du, 0x00004380u, 0x0000437eu, 0x00004351u, 0x000300f7u, 0x00004381u, 0x00000000u, 0x000400fau, 0x00004380u, 0x00004382u, 0x00004381u, 0x000200f8u, 0x00004382u, 0x0004003du, 0x00000008u, 0x00004384u, 0x0000437du, 0x000500abu, 0x0000005du, 0x00004385u, 0x00004384u, 0x00000203u, 0x000200f9u, 0x00004381u, 0x000200f8u, 0x00004381u, 0x000700f5u, 0x0000005du, 0x00004386u, 0x00004380u, 0x00004372u, 0x00004385u, 0x00004382u, 0x000300f7u, 0x00004387u, 0x00000000u, 0x000400fau, 0x00004386u, 0x00004388u, 0x00004387u, 0x000200f8u, 0x00004388u, 0x00050041u, 0x0000003eu, 0x00004389u, 0x00004339u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000438au, 0x00004389u, 0x000500c7u, 0x00000008u, 0x0000438bu, 0x0000438au, 0x00000c10u, 0x000500aau, 0x0000005du, 0x0000438cu, 0x0000438bu, 0x00000203u, 0x000300f7u, 0x0000438du, 0x00000000u, 0x000400fau, 0x0000438cu, 0x0000438eu, 0x0000438fu, 0x000200f8u, 0x0000438fu, 0x00050041u, 0x0000003eu, 0x00004391u, 0x0000433cu, 0x00000485u, 0x0003003eu, 0x00004391u, 0x00000c42u, 0x000200f9u, 0x0000438du, 0x000200f8u, 0x0000438eu, 0x00050041u, 0x0000003eu, 0x00004390u, 0x0000433cu, 0x00000485u, 0x0003003eu, 0x00004390u, 0x00000bfdu, 0x000200f9u, 0x0000438du, 0x000200f8u, 0x0000438du, 0x0003003eu, 0x0000206cu, 0x0000055eu, 0x000200f9u, 0x00004387u, 0x000200f8u, 0x00004387u, 0x000600a9u, 0x0000005du, 0x0000eee1u, 0x00004386u, 0x0000055eu, 0x0000eee0u, 0x000200f9u, 0x00004366u, 0x000200f8u, 0x00004366u, 0x000700f5u, 0x0000005du, 0x00008eb5u, 0x00008e2bu, 0x00004358u, 0x0000eee1u, 0x00004387u, 0x000300f7u, 0x00004393u, 0x00000000u, 0x000400fau, 0x00004341u, 0x00004394u, 0x00004393u, 0x000200f8u, 0x00004394u, 0x0003003eu, 0x0000433cu, 0x00000c5cu, 0x0003003eu, 0x0000206cu, 0x0000055eu, 0x000200f9u, 0x00004393u, 0x000200f8u, 0x00004393u, 0x000600a9u, 0x0000005du, 0x0000eee2u, 0x00004341u, 0x0000055eu, 0x00008eb5u, 0x0004003du, 0x0000005fu, 0x00004395u, 0x0000433cu, 0x0008000cu, 0x0000005fu, 0x00004396u, 0x00000001u, 0x0000002du, 0x00004395u, 0x00000c5fu, 0x00000c60u, 0x0003003eu, 0x0000433du, 0x00004396u, 0x0003003eu, 0x0000206au, 0x0000eee2u, 0x0003003eu, 0x00002034u, 0x00004396u, 0x000200f9u, 0x00002253u, 0x000200f8u, 0x00002253u, 0x000700f5u, 0x0000005du, 0x0000e180u, 0x0000eee2u, 0x00004393u, 0x00008e2bu, 0x00002255u, 0x000700f5u, 0x0000005fu, 0x00009257u, 0x00004396u, 0x00004393u, 0x000043bcu, 0x00002255u, 0x000200f9u, 0x00002240u, 0x000200f8u, 0x00002240u, 0x000700f5u, 0x0000005du, 0x0000e17fu, 0x0000e180u, 0x00002253u, 0x00008e2bu, 0x000043d4u, 0x000700f5u, 0x0000005du, 0x0000e086u, 0x00008d88u, 0x00002253u, 0x0000e091u, 0x000043d4u, 0x000700f5u, 0x0000005fu, 0x00009256u, 0x00009257u, 0x00002253u, 0x00008e19u, 0x000043d4u, 0x0003003eu, 0x00002046u, 0x00007d02u, 0x0003003eu, 0x00002004u, 0x0000055eu, 0x000200f9u, 0x0000221du, 0x000200f8u, 0x0000221du, 0x000700f5u, 0x0000005du, 0x0000e17eu, 0x00008e2bu, 0x00002200u, 0x0000e17fu, 0x00002240u, 0x000700f5u, 0x0000005du, 0x0000e085u, 0x00008d88u, 0x00002200u, 0x0000e086u, 0x00002240u, 0x000700f5u, 0x0000005fu, 0x00009202u, 0x00007b3au, 0x00002200u, 0x00009256u, 0x00002240u, 0x000600a9u, 0x00000006u, 0x0000eee3u, 0x00002134u, 0x00007d02u, 0x00009145u, 0x000600a9u, 0x0000005du, 0x0000eee4u, 0x00002134u, 0x0000055eu, 0x00002131u, 0x000300f7u, 0x00002268u, 0x00000000u, 0x000400fau, 0x0000eee4u, 0x00002269u, 0x00002268u, 0x000200f8u, 0x00002269u, 0x000400a8u, 0x0000005du, 0x0000226cu, 0x00002140u, 0x000500a7u, 0x0000005du, 0x0000226du, 0x0000213au, 0x0000226cu, 0x000300f7u, 0x0000226eu, 0x00000000u, 0x000400fau, 0x0000226du, 0x0000226fu, 0x00002270u, 0x000200f8u, 0x00002270u, 0x00080041u, 0x00000277u, 0x00002277u, 0x00000a0bu, 0x00000203u, 0x00001ec7u, 0x00000215u, 0x0000eee3u, 0x0004003du, 0x00000229u, 0x00002278u, 0x00002277u, 0x00040071u, 0x00000006u, 0x00002279u, 0x00002278u, 0x0003003eu, 0x00002075u, 0x00002279u, 0x0003003eu, 0x00002077u, 0x00002279u, 0x00070041u, 0x0000026bu, 0x000044a1u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000203u, 0x0004003du, 0x00000006u, 0x000044a2u, 0x000044a1u, 0x00070041u, 0x0000026bu, 0x000044a4u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000212u, 0x0004003du, 0x00000006u, 0x000044a5u, 0x000044a4u, 0x00070041u, 0x0000026bu, 0x000044a7u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000215u, 0x0004003du, 0x00000006u, 0x000044a8u, 0x000044a7u, 0x00070041u, 0x0000026bu, 0x000044aau, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000218u, 0x0004003du, 0x00000006u, 0x000044abu, 0x000044aau, 0x00070041u, 0x0000026bu, 0x000044adu, 0x000002d1u, 0x00000203u, 0x00002279u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000044aeu, 0x000044adu, 0x00070041u, 0x0000026bu, 0x000044b0u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000044b1u, 0x000044b0u, 0x00070041u, 0x00000277u, 0x000044b3u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000221u, 0x0004003du, 0x00000229u, 0x000044b4u, 0x000044b3u, 0x00040071u, 0x00000006u, 0x000044b5u, 0x000044b4u, 0x0004007cu, 0x00000008u, 0x000044b6u, 0x000044b5u, 0x00070041u, 0x00000277u, 0x000044b8u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000224u, 0x0004003du, 0x00000229u, 0x000044b9u, 0x000044b8u, 0x00040071u, 0x00000006u, 0x000044bau, 0x000044b9u, 0x0004007cu, 0x00000008u, 0x000044bbu, 0x000044bau, 0x00070041u, 0x00000277u, 0x000044bdu, 0x000002d1u, 0x00000203u, 0x00002279u, 0x0000025eu, 0x0004003du, 0x00000229u, 0x000044beu, 0x000044bdu, 0x00040071u, 0x00000006u, 0x000044bfu, 0x000044beu, 0x0004007cu, 0x00000008u, 0x000044c0u, 0x000044bfu, 0x00070041u, 0x00000277u, 0x000044c2u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000044c3u, 0x000044c2u, 0x00040071u, 0x00000006u, 0x000044c4u, 0x000044c3u, 0x0004007cu, 0x00000008u, 0x000044c5u, 0x000044c4u, 0x00070041u, 0x00000277u, 0x000044c7u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000044c8u, 0x000044c7u, 0x00040071u, 0x00000006u, 0x000044c9u, 0x000044c8u, 0x0004007cu, 0x00000008u, 0x000044cau, 0x000044c9u, 0x00070041u, 0x00000277u, 0x000044ccu, 0x000002d1u, 0x00000203u, 0x00002279u, 0x0000026fu, 0x0004003du, 0x00000229u, 0x000044cdu, 0x000044ccu, 0x00040071u, 0x00000006u, 0x000044ceu, 0x000044cdu, 0x0004007cu, 0x00000008u, 0x000044cfu, 0x000044ceu, 0x00070041u, 0x00000277u, 0x000044d1u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x00000276u, 0x0004003du, 0x00000229u, 0x000044d2u, 0x000044d1u, 0x00040071u, 0x00000006u, 0x000044d3u, 0x000044d2u, 0x0004007cu, 0x00000008u, 0x000044d4u, 0x000044d3u, 0x00070041u, 0x00000277u, 0x000044d6u, 0x000002d1u, 0x00000203u, 0x00002279u, 0x0000027du, 0x0004003du, 0x00000229u, 0x000044d7u, 0x000044d6u, 0x00040071u, 0x00000006u, 0x000044d8u, 0x000044d7u, 0x0004007cu, 0x00000008u, 0x000044d9u, 0x000044d8u, 0x00110050u, 0x0000001eu, 0x000044dau, 0x000044a2u, 0x000044a5u, 0x000044a8u, 0x000044abu, 0x000044aeu, 0x000044b1u, 0x000044b6u, 0x000044bbu, 0x000044c0u, 0x000044c5u, 0x000044cau, 0x000044cfu, 0x000044d4u, 0x000044d9u, 0x0003003eu, 0x00006a88u, 0x000044a2u, 0x0003003eu, 0x00006a89u, 0x000044a5u, 0x0003003eu, 0x00006a8au, 0x000044a8u, 0x0003003eu, 0x00006a8bu, 0x000044abu, 0x0003003eu, 0x00006a8cu, 0x000044aeu, 0x0003003eu, 0x00006a8du, 0x000044b1u, 0x0003003eu, 0x00006a8eu, 0x000044b6u, 0x0003003eu, 0x00006a8fu, 0x000044bbu, 0x0003003eu, 0x00006a90u, 0x000044c0u, 0x0003003eu, 0x00006a91u, 0x000044c5u, 0x0003003eu, 0x00006a92u, 0x000044cau, 0x0003003eu, 0x00006a93u, 0x000044cfu, 0x0003003eu, 0x00006a94u, 0x000044d4u, 0x0003003eu, 0x00006a95u, 0x000044d9u, 0x0003003eu, 0x000072bfu, 0x000044a2u, 0x0003003eu, 0x000072c0u, 0x000044a5u, 0x0003003eu, 0x000072c1u, 0x000044a8u, 0x0003003eu, 0x000072c2u, 0x000044abu, 0x0003003eu, 0x000072c3u, 0x000044aeu, 0x0003003eu, 0x000072c4u, 0x000044b1u, 0x0003003eu, 0x000072c5u, 0x000044b6u, 0x0003003eu, 0x000072c6u, 0x000044bbu, 0x0003003eu, 0x000072c7u, 0x000044c0u, 0x0003003eu, 0x000072c8u, 0x000044c5u, 0x0003003eu, 0x000072c9u, 0x000044cau, 0x0003003eu, 0x000072cau, 0x000044cfu, 0x0003003eu, 0x000072cbu, 0x000044d4u, 0x0003003eu, 0x000072ccu, 0x000044d9u, 0x0003003eu, 0x000072eau, 0x000044a2u, 0x0003003eu, 0x000072ebu, 0x000044a5u, 0x0003003eu, 0x000072ecu, 0x000044a8u, 0x0003003eu, 0x000072edu, 0x000044abu, 0x0003003eu, 0x000072eeu, 0x000044aeu, 0x0003003eu, 0x000072efu, 0x000044b1u, 0x0003003eu, 0x000072f0u, 0x000044b6u, 0x0003003eu, 0x000072f1u, 0x000044bbu, 0x0003003eu, 0x000072f2u, 0x000044c0u, 0x0003003eu, 0x000072f3u, 0x000044c5u, 0x0003003eu, 0x000072f4u, 0x000044cau, 0x0003003eu, 0x000072f5u, 0x000044cfu, 0x0003003eu, 0x000072f6u, 0x000044d4u, 0x0003003eu, 0x000072f7u, 0x000044d9u, 0x0003003eu, 0x00002079u, 0x000020eau, 0x0003003eu, 0x0000207au, 0x00009202u, 0x0003003eu, 0x0000207bu, 0x000020fbu, 0x0003003eu, 0x0000207cu, 0x000020feu, 0x0003003eu, 0x0000207du, 0x00002101u, 0x0003003eu, 0x0000207eu, 0x0000212bu, 0x0003003eu, 0x0000207fu, 0x0000213au, 0x0003003eu, 0x00002080u, 0x000093b0u, 0x000500c7u, 0x00000008u, 0x0000461eu, 0x000044d9u, 0x00000212u, 0x000500abu, 0x0000005du, 0x0000461fu, 0x0000461eu, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00004622u, 0x000044a2u, 0x0004007cu, 0x00000008u, 0x00004625u, 0x000044a5u, 0x0003003eu, 0x000044dbu, 0x0000461fu, 0x00050041u, 0x0000003eu, 0x00004628u, 0x0000207au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004629u, 0x00004628u, 0x0003003eu, 0x000044dcu, 0x00004629u, 0x0003003eu, 0x000044ddu, 0x00004622u, 0x0003003eu, 0x000044deu, 0x00004625u, 0x0003003eu, 0x000044dfu, 0x000044cau, 0x0008000cu, 0x00000008u, 0x000049d7u, 0x00000001u, 0x0000002du, 0x00004629u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x000044dcu, 0x000049d7u, 0x000500b1u, 0x0000005du, 0x000049d9u, 0x000044cau, 0x0000026fu, 0x000300f7u, 0x000049dau, 0x00000000u, 0x000400fau, 0x000049d9u, 0x000049dbu, 0x000049dcu, 0x000200f8u, 0x000049dcu, 0x00050082u, 0x00000008u, 0x000049e1u, 0x0000037du, 0x000044cau, 0x000500c4u, 0x00000008u, 0x000049e3u, 0x000049d7u, 0x000049e1u, 0x0003003eu, 0x000044dcu, 0x000049e3u, 0x000500c3u, 0x00000008u, 0x000049e5u, 0x000049e3u, 0x00000559u, 0x0003003eu, 0x000044dcu, 0x000049e5u, 0x000200f9u, 0x000049dau, 0x000200f8u, 0x000049dbu, 0x000500c3u, 0x00000008u, 0x000049dfu, 0x000049d7u, 0x000044cau, 0x0003003eu, 0x000044dcu, 0x000049dfu, 0x000200f9u, 0x000049dau, 0x000200f8u, 0x000049dau, 0x000700f5u, 0x00000008u, 0x00009401u, 0x000049dfu, 0x000049dbu, 0x000049e5u, 0x000049dcu, 0x000300f7u, 0x000049e7u, 0x00000000u, 0x000400fau, 0x0000461fu, 0x000049e8u, 0x000049e9u, 0x000200f8u, 0x000049e9u, 0x000500c4u, 0x00000008u, 0x000049ffu, 0x00004622u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a01u, 0x00009401u, 0x000049ffu, 0x0003003eu, 0x000044dcu, 0x00004a01u, 0x000200f9u, 0x000049e7u, 0x000200f8u, 0x000049e8u, 0x000500c3u, 0x00000008u, 0x000049ebu, 0x00009401u, 0x00000218u, 0x000500afu, 0x0000005du, 0x000049edu, 0x000049ebu, 0x00004625u, 0x0003003eu, 0x000049d4u, 0x000049edu, 0x000300f7u, 0x000049efu, 0x00000000u, 0x000400fau, 0x000049edu, 0x000049f0u, 0x000049f1u, 0x000200f8u, 0x000049f1u, 0x000500c4u, 0x00000008u, 0x000049fbu, 0x00004622u, 0x00000218u, 0x00050082u, 0x00000008u, 0x000049fcu, 0x00009401u, 0x000049fbu, 0x0007000cu, 0x00000008u, 0x000049fdu, 0x00000001u, 0x0000002au, 0x000049fcu, 0x00000203u, 0x0003003eu, 0x000044dcu, 0x000049fdu, 0x000200f9u, 0x000049efu, 0x000200f8u, 0x000049f0u, 0x000500c3u, 0x00000008u, 0x000049f3u, 0x00004625u, 0x00000215u, 0x000500c3u, 0x00000008u, 0x000049f5u, 0x00004622u, 0x00000215u, 0x00050082u, 0x00000008u, 0x000049f6u, 0x000049f3u, 0x000049f5u, 0x000500c7u, 0x00000008u, 0x000049f7u, 0x000049f6u, 0x00001132u, 0x000500c4u, 0x00000008u, 0x000049f8u, 0x000049f7u, 0x0000021eu, 0x0003003eu, 0x000044dcu, 0x000049f8u, 0x000200f9u, 0x000049efu, 0x000200f8u, 0x000049efu, 0x000700f5u, 0x00000008u, 0x00009404u, 0x000049f8u, 0x000049f0u, 0x000049fdu, 0x000049f1u, 0x000200f9u, 0x000049e7u, 0x000200f8u, 0x000049e7u, 0x000700f5u, 0x00000008u, 0x00009403u, 0x00009404u, 0x000049efu, 0x00004a01u, 0x000049e9u, 0x0003003eu, 0x000049d5u, 0x00009403u, 0x0003003eu, 0x00004628u, 0x00009403u, 0x000500c7u, 0x00000008u, 0x0000462eu, 0x000044d9u, 0x0000021bu, 0x000500abu, 0x0000005du, 0x0000462fu, 0x0000462eu, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00004632u, 0x000044a8u, 0x0004007cu, 0x00000008u, 0x00004635u, 0x000044abu, 0x0003003eu, 0x000044e0u, 0x0000462fu, 0x00050041u, 0x0000003eu, 0x00004638u, 0x0000207au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004639u, 0x00004638u, 0x0003003eu, 0x000044e1u, 0x00004639u, 0x0003003eu, 0x000044e2u, 0x00004632u, 0x0003003eu, 0x000044e3u, 0x00004635u, 0x0003003eu, 0x000044e4u, 0x000044d4u, 0x0008000cu, 0x00000008u, 0x00004a06u, 0x00000001u, 0x0000002du, 0x00004639u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x000044e1u, 0x00004a06u, 0x000500b1u, 0x0000005du, 0x00004a08u, 0x000044d4u, 0x0000026fu, 0x000300f7u, 0x00004a09u, 0x00000000u, 0x000400fau, 0x00004a08u, 0x00004a0au, 0x00004a0bu, 0x000200f8u, 0x00004a0bu, 0x00050082u, 0x00000008u, 0x00004a10u, 0x0000037du, 0x000044d4u, 0x000500c4u, 0x00000008u, 0x00004a12u, 0x00004a06u, 0x00004a10u, 0x0003003eu, 0x000044e1u, 0x00004a12u, 0x000500c3u, 0x00000008u, 0x00004a14u, 0x00004a12u, 0x00000559u, 0x0003003eu, 0x000044e1u, 0x00004a14u, 0x000200f9u, 0x00004a09u, 0x000200f8u, 0x00004a0au, 0x000500c3u, 0x00000008u, 0x00004a0eu, 0x00004a06u, 0x000044d4u, 0x0003003eu, 0x000044e1u, 0x00004a0eu, 0x000200f9u, 0x00004a09u, 0x000200f8u, 0x00004a09u, 0x000700f5u, 0x00000008u, 0x00009413u, 0x00004a0eu, 0x00004a0au, 0x00004a14u, 0x00004a0bu, 0x000300f7u, 0x00004a16u, 0x00000000u, 0x000400fau, 0x0000462fu, 0x00004a17u, 0x00004a18u, 0x000200f8u, 0x00004a18u, 0x000500c4u, 0x00000008u, 0x00004a2eu, 0x00004632u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a30u, 0x00009413u, 0x00004a2eu, 0x0003003eu, 0x000044e1u, 0x00004a30u, 0x000200f9u, 0x00004a16u, 0x000200f8u, 0x00004a17u, 0x000500c3u, 0x00000008u, 0x00004a1au, 0x00009413u, 0x00000218u, 0x000500afu, 0x0000005du, 0x00004a1cu, 0x00004a1au, 0x00004635u, 0x0003003eu, 0x00004a03u, 0x00004a1cu, 0x000300f7u, 0x00004a1eu, 0x00000000u, 0x000400fau, 0x00004a1cu, 0x00004a1fu, 0x00004a20u, 0x000200f8u, 0x00004a20u, 0x000500c4u, 0x00000008u, 0x00004a2au, 0x00004632u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a2bu, 0x00009413u, 0x00004a2au, 0x0007000cu, 0x00000008u, 0x00004a2cu, 0x00000001u, 0x0000002au, 0x00004a2bu, 0x00000203u, 0x0003003eu, 0x000044e1u, 0x00004a2cu, 0x000200f9u, 0x00004a1eu, 0x000200f8u, 0x00004a1fu, 0x000500c3u, 0x00000008u, 0x00004a22u, 0x00004635u, 0x00000215u, 0x000500c3u, 0x00000008u, 0x00004a24u, 0x00004632u, 0x00000215u, 0x00050082u, 0x00000008u, 0x00004a25u, 0x00004a22u, 0x00004a24u, 0x000500c7u, 0x00000008u, 0x00004a26u, 0x00004a25u, 0x00001132u, 0x000500c4u, 0x00000008u, 0x00004a27u, 0x00004a26u, 0x0000021eu, 0x0003003eu, 0x000044e1u, 0x00004a27u, 0x000200f9u, 0x00004a1eu, 0x000200f8u, 0x00004a1eu, 0x000700f5u, 0x00000008u, 0x00009416u, 0x00004a27u, 0x00004a1fu, 0x00004a2cu, 0x00004a20u, 0x000200f9u, 0x00004a16u, 0x000200f8u, 0x00004a16u, 0x000700f5u, 0x00000008u, 0x00009415u, 0x00009416u, 0x00004a1eu, 0x00004a30u, 0x00004a18u, 0x0003003eu, 0x00004a04u, 0x00009415u, 0x0003003eu, 0x00004638u, 0x00009415u, 0x000300f7u, 0x0000463du, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000463eu, 0x0000463fu, 0x000200f8u, 0x0000463fu, 0x0003003eu, 0x000044e5u, 0x00000c29u, 0x000200f9u, 0x0000463du, 0x000200f8u, 0x0000463eu, 0x0004003du, 0x0000005fu, 0x00004640u, 0x0000207au, 0x000500c7u, 0x0000005fu, 0x00004642u, 0x00004640u, 0x0000eebau, 0x0003003eu, 0x000044e5u, 0x00004642u, 0x000200f9u, 0x0000463du, 0x000200f8u, 0x0000463du, 0x00050041u, 0x0000003eu, 0x00004643u, 0x000044e5u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004644u, 0x00004643u, 0x00050041u, 0x0000003eu, 0x00004645u, 0x000044e5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004646u, 0x00004645u, 0x00050080u, 0x00000008u, 0x00004647u, 0x00004644u, 0x00004646u, 0x0003003eu, 0x000044e6u, 0x00004647u, 0x0004003du, 0x0000005fu, 0x00004648u, 0x0000207au, 0x000500c3u, 0x0000005fu, 0x0000464au, 0x00004648u, 0x0000eeb9u, 0x0003003eu, 0x0000207au, 0x0000464au, 0x0003003eu, 0x00006958u, 0x000044c5u, 0x0003003eu, 0x00006959u, 0x000044d9u, 0x0004003du, 0x00000008u, 0x0000464du, 0x00004628u, 0x0003003eu, 0x000044e9u, 0x0000464du, 0x000500abu, 0x0000005du, 0x00004a36u, 0x000044c5u, 0x00000203u, 0x000300f7u, 0x00004a37u, 0x00000000u, 0x000400fau, 0x00004a36u, 0x00004a38u, 0x00004a37u, 0x000200f8u, 0x00004a38u, 0x000500c4u, 0x00000008u, 0x00004a3bu, 0x00000212u, 0x000044c5u, 0x0003003eu, 0x00004a32u, 0x00004a3bu, 0x000500c7u, 0x00000008u, 0x00004a3eu, 0x000044d9u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00004a3fu, 0x00004a3eu, 0x00000203u, 0x000300f7u, 0x00004a40u, 0x00000000u, 0x000400fau, 0x00004a3fu, 0x00004a41u, 0x00004a40u, 0x000200f8u, 0x00004a41u, 0x000500c7u, 0x00000008u, 0x00004a44u, 0x0000464du, 0x00004a3bu, 0x00050082u, 0x00000008u, 0x00004a45u, 0x00004a44u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a46u, 0x00000001u, 0x0000002au, 0x00004a45u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a48u, 0x0000464du, 0x00004a46u, 0x0003003eu, 0x000044e9u, 0x00004a48u, 0x000200f9u, 0x00004a40u, 0x000200f8u, 0x00004a40u, 0x000700f5u, 0x00000008u, 0x00009474u, 0x0000464du, 0x00004a38u, 0x00004a48u, 0x00004a41u, 0x00050082u, 0x00000008u, 0x00004a4au, 0x00004a3bu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004a4cu, 0x00009474u, 0x00004a4au, 0x0003003eu, 0x000044e9u, 0x00004a4cu, 0x000200f9u, 0x00004a37u, 0x000200f8u, 0x00004a37u, 0x000700f5u, 0x00000008u, 0x00009475u, 0x0000464du, 0x0000463du, 0x00004a4cu, 0x00004a40u, 0x0003003eu, 0x00004a33u, 0x00009475u, 0x0003003eu, 0x000044e7u, 0x00009475u, 0x0003003eu, 0x0000695cu, 0x000044cfu, 0x0003003eu, 0x0000695du, 0x000044d9u, 0x0004003du, 0x00000008u, 0x00004651u, 0x00004638u, 0x0003003eu, 0x000044ecu, 0x00004651u, 0x000500abu, 0x0000005du, 0x00004a52u, 0x000044cfu, 0x00000203u, 0x000300f7u, 0x00004a53u, 0x00000000u, 0x000400fau, 0x00004a52u, 0x00004a54u, 0x00004a53u, 0x000200f8u, 0x00004a54u, 0x000500c4u, 0x00000008u, 0x00004a57u, 0x00000212u, 0x000044cfu, 0x0003003eu, 0x00004a4eu, 0x00004a57u, 0x000500c7u, 0x00000008u, 0x00004a5au, 0x000044d9u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00004a5bu, 0x00004a5au, 0x00000203u, 0x000300f7u, 0x00004a5cu, 0x00000000u, 0x000400fau, 0x00004a5bu, 0x00004a5du, 0x00004a5cu, 0x000200f8u, 0x00004a5du, 0x000500c7u, 0x00000008u, 0x00004a60u, 0x00004651u, 0x00004a57u, 0x00050082u, 0x00000008u, 0x00004a61u, 0x00004a60u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a62u, 0x00000001u, 0x0000002au, 0x00004a61u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a64u, 0x00004651u, 0x00004a62u, 0x0003003eu, 0x000044ecu, 0x00004a64u, 0x000200f9u, 0x00004a5cu, 0x000200f8u, 0x00004a5cu, 0x000700f5u, 0x00000008u, 0x00009493u, 0x00004651u, 0x00004a54u, 0x00004a64u, 0x00004a5du, 0x00050082u, 0x00000008u, 0x00004a66u, 0x00004a57u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004a68u, 0x00009493u, 0x00004a66u, 0x0003003eu, 0x000044ecu, 0x00004a68u, 0x000200f9u, 0x00004a53u, 0x000200f8u, 0x00004a53u, 0x000700f5u, 0x00000008u, 0x00009494u, 0x00004651u, 0x00004a37u, 0x00004a68u, 0x00004a5cu, 0x0003003eu, 0x00004a4fu, 0x00009494u, 0x0003003eu, 0x000044eau, 0x00009494u, 0x0004003du, 0x00000008u, 0x00004654u, 0x00004628u, 0x00050080u, 0x00000008u, 0x00004655u, 0x00004654u, 0x00000212u, 0x0003003eu, 0x00006960u, 0x000044c5u, 0x0003003eu, 0x00006961u, 0x000044d9u, 0x0003003eu, 0x000044efu, 0x00004655u, 0x000300f7u, 0x00004a6fu, 0x00000000u, 0x000400fau, 0x00004a36u, 0x00004a70u, 0x00004a6fu, 0x000200f8u, 0x00004a70u, 0x000500c4u, 0x00000008u, 0x00004a73u, 0x00000212u, 0x000044c5u, 0x0003003eu, 0x00004a6au, 0x00004a73u, 0x000500c7u, 0x00000008u, 0x00004a76u, 0x000044d9u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00004a77u, 0x00004a76u, 0x00000203u, 0x000300f7u, 0x00004a78u, 0x00000000u, 0x000400fau, 0x00004a77u, 0x00004a79u, 0x00004a78u, 0x000200f8u, 0x00004a79u, 0x000500c7u, 0x00000008u, 0x00004a7cu, 0x00004655u, 0x00004a73u, 0x00050082u, 0x00000008u, 0x00004a7du, 0x00004a7cu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a7eu, 0x00000001u, 0x0000002au, 0x00004a7du, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a80u, 0x00004655u, 0x00004a7eu, 0x0003003eu, 0x000044efu, 0x00004a80u, 0x000200f9u, 0x00004a78u, 0x000200f8u, 0x00004a78u, 0x000700f5u, 0x00000008u, 0x000094b2u, 0x00004655u, 0x00004a70u, 0x00004a80u, 0x00004a79u, 0x00050082u, 0x00000008u, 0x00004a82u, 0x00004a73u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004a84u, 0x000094b2u, 0x00004a82u, 0x0003003eu, 0x000044efu, 0x00004a84u, 0x000200f9u, 0x00004a6fu, 0x000200f8u, 0x00004a6fu, 0x000700f5u, 0x00000008u, 0x000094b3u, 0x00004655u, 0x00004a53u, 0x00004a84u, 0x00004a78u, 0x0003003eu, 0x00004a6bu, 0x000094b3u, 0x0003003eu, 0x000044edu, 0x000094b3u, 0x0004003du, 0x00000008u, 0x00004659u, 0x00004638u, 0x00050080u, 0x00000008u, 0x0000465au, 0x00004659u, 0x00000212u, 0x0003003eu, 0x00006964u, 0x000044cfu, 0x0003003eu, 0x00006965u, 0x000044d9u, 0x0003003eu, 0x000044f2u, 0x0000465au, 0x000300f7u, 0x00004a8bu, 0x00000000u, 0x000400fau, 0x00004a52u, 0x00004a8cu, 0x00004a8bu, 0x000200f8u, 0x00004a8cu, 0x000500c4u, 0x00000008u, 0x00004a8fu, 0x00000212u, 0x000044cfu, 0x0003003eu, 0x00004a86u, 0x00004a8fu, 0x000500c7u, 0x00000008u, 0x00004a92u, 0x000044d9u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00004a93u, 0x00004a92u, 0x00000203u, 0x000300f7u, 0x00004a94u, 0x00000000u, 0x000400fau, 0x00004a93u, 0x00004a95u, 0x00004a94u, 0x000200f8u, 0x00004a95u, 0x000500c7u, 0x00000008u, 0x00004a98u, 0x0000465au, 0x00004a8fu, 0x00050082u, 0x00000008u, 0x00004a99u, 0x00004a98u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a9au, 0x00000001u, 0x0000002au, 0x00004a99u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a9cu, 0x0000465au, 0x00004a9au, 0x0003003eu, 0x000044f2u, 0x00004a9cu, 0x000200f9u, 0x00004a94u, 0x000200f8u, 0x00004a94u, 0x000700f5u, 0x00000008u, 0x000094d1u, 0x0000465au, 0x00004a8cu, 0x00004a9cu, 0x00004a95u, 0x00050082u, 0x00000008u, 0x00004a9eu, 0x00004a8fu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004aa0u, 0x000094d1u, 0x00004a9eu, 0x0003003eu, 0x000044f2u, 0x00004aa0u, 0x000200f9u, 0x00004a8bu, 0x000200f8u, 0x00004a8bu, 0x000700f5u, 0x00000008u, 0x000094d2u, 0x0000465au, 0x00004a6fu, 0x00004aa0u, 0x00004a94u, 0x0003003eu, 0x00004a87u, 0x000094d2u, 0x0003003eu, 0x000044f0u, 0x000094d2u, 0x00050082u, 0x00000008u, 0x0000465fu, 0x000094d2u, 0x00009494u, 0x0007000cu, 0x00000008u, 0x00004660u, 0x00000001u, 0x0000002au, 0x0000465fu, 0x00001357u, 0x0003003eu, 0x000044f3u, 0x00004660u, 0x000500c7u, 0x00000008u, 0x00004662u, 0x00009494u, 0x0000038bu, 0x00050080u, 0x00000008u, 0x00004664u, 0x00004662u, 0x00004660u, 0x0003003eu, 0x000044f0u, 0x00004664u, 0x0003003eu, 0x000044eau, 0x00004662u, 0x0004003du, 0x0000005fu, 0x00004668u, 0x000044e5u, 0x000500aau, 0x00000879u, 0x00004669u, 0x00004668u, 0x00001361u, 0x00050051u, 0x0000005du, 0x0000466au, 0x00004669u, 0x00000000u, 0x00050051u, 0x0000005du, 0x0000466bu, 0x00004669u, 0x00000001u, 0x00060050u, 0x000003a1u, 0x0000466cu, 0x0000212bu, 0x0000466au, 0x0000466bu, 0x0004009bu, 0x0000005du, 0x0000466du, 0x0000466cu, 0x0003003eu, 0x0000207eu, 0x0000466du, 0x000300f7u, 0x0000466fu, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004670u, 0x0000466fu, 0x000200f8u, 0x00004670u, 0x0003003eu, 0x000044e6u, 0x00000203u, 0x000200f9u, 0x0000466fu, 0x000200f8u, 0x0000466fu, 0x000600a9u, 0x00000008u, 0x0000eee5u, 0x0000466du, 0x00000203u, 0x00004647u, 0x000500aau, 0x0000005du, 0x00004673u, 0x000044b6u, 0x00000212u, 0x0003003eu, 0x000044f4u, 0x00004673u, 0x000500afu, 0x0000005du, 0x00004675u, 0x0000eee5u, 0x0000037du, 0x000300f7u, 0x00004676u, 0x00000000u, 0x000400fau, 0x00004675u, 0x00004677u, 0x00004678u, 0x000200f8u, 0x00004678u, 0x00050050u, 0x0000005fu, 0x0000467eu, 0x00009475u, 0x00004662u, 0x0003003eu, 0x000044f6u, 0x0000467eu, 0x000200f9u, 0x00004676u, 0x000200f8u, 0x00004677u, 0x00050050u, 0x0000005fu, 0x0000467bu, 0x000094b3u, 0x00004664u, 0x0003003eu, 0x000044f6u, 0x0000467bu, 0x000200f9u, 0x00004676u, 0x000200f8u, 0x00004676u, 0x000700f5u, 0x0000005fu, 0x000094feu, 0x0000467bu, 0x00004677u, 0x0000467eu, 0x00004678u, 0x0003003eu, 0x000044f5u, 0x000094feu, 0x000300f7u, 0x00004681u, 0x00000000u, 0x000400fau, 0x000020fbu, 0x00004682u, 0x00004683u, 0x000200f8u, 0x00004683u, 0x000300f7u, 0x00004722u, 0x00000000u, 0x000d00fbu, 0x000044b6u, 0x00004722u, 0x00000000u, 0x00004723u, 0x00000001u, 0x00004724u, 0x00000002u, 0x00004725u, 0x00000003u, 0x00004726u, 0x00000004u, 0x00004727u, 0x000200f8u, 0x00004727u, 0x000300f7u, 0x000048d7u, 0x00000000u, 0x000700fbu, 0x000044bbu, 0x000048d8u, 0x00000000u, 0x000048d9u, 0x00000001u, 0x000048dau, 0x000200f8u, 0x000048dau, 0x0004007cu, 0x000000a2u, 0x0000491cu, 0x000094feu, 0x0003003eu, 0x00006a68u, 0x000044aeu, 0x0003003eu, 0x00006a69u, 0x000044b1u, 0x0003003eu, 0x000045f0u, 0x000020eau, 0x0003003eu, 0x000045f1u, 0x0000491cu, 0x00050041u, 0x00000007u, 0x00005abeu, 0x000045f1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005abfu, 0x00005abeu, 0x00050084u, 0x00000006u, 0x00005ac0u, 0x000044b1u, 0x00005abfu, 0x00050080u, 0x00000006u, 0x00005ac1u, 0x000044aeu, 0x00005ac0u, 0x0003003eu, 0x00005ab6u, 0x00005ac1u, 0x00050041u, 0x00000007u, 0x00005ac2u, 0x000045f1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005ac3u, 0x00005ac2u, 0x00050080u, 0x00000006u, 0x00005ac5u, 0x00005ac1u, 0x00005ac3u, 0x0003003eu, 0x00005ab6u, 0x00005ac5u, 0x000500c7u, 0x00000006u, 0x00005ac7u, 0x00005ac5u, 0x00000e4bu, 0x0003003eu, 0x00005ab6u, 0x00005ac7u, 0x0003003eu, 0x00005ab7u, 0x00005ac7u, 0x0004003du, 0x00000006u, 0x00005acau, 0x00005abeu, 0x000500c7u, 0x00000006u, 0x00005acbu, 0x00005acau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005accu, 0x00005acbu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005aceu, 0x00005ac7u, 0x00005accu, 0x0003003eu, 0x00005ab7u, 0x00005aceu, 0x000500c6u, 0x00000006u, 0x00005ad0u, 0x00005aceu, 0x0000048bu, 0x0003003eu, 0x00005ab7u, 0x00005ad0u, 0x00080041u, 0x00000277u, 0x00005ad3u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005ad0u, 0x0004003du, 0x00000229u, 0x00005ad4u, 0x00005ad3u, 0x00040071u, 0x00000006u, 0x00005ad5u, 0x00005ad4u, 0x0003003eu, 0x00005ab8u, 0x00005ad5u, 0x0004007cu, 0x00000008u, 0x00005ad7u, 0x00005ad5u, 0x00070050u, 0x00000009u, 0x00005ad8u, 0x00005ad7u, 0x00005ad7u, 0x00005ad7u, 0x00005ad7u, 0x0003003eu, 0x00005ab9u, 0x00005ad8u, 0x0003003eu, 0x000044f9u, 0x00005ad8u, 0x000300f7u, 0x00004921u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004922u, 0x00004921u, 0x000200f8u, 0x00004922u, 0x00050050u, 0x0000005fu, 0x00004925u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004926u, 0x00004925u, 0x0003003eu, 0x00006a6cu, 0x000044aeu, 0x0003003eu, 0x00006a6du, 0x000044b1u, 0x0003003eu, 0x000045f3u, 0x000020eau, 0x0003003eu, 0x000045f4u, 0x00004926u, 0x00050041u, 0x00000007u, 0x00005ae1u, 0x000045f4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005ae2u, 0x00005ae1u, 0x00050084u, 0x00000006u, 0x00005ae3u, 0x000044b1u, 0x00005ae2u, 0x00050080u, 0x00000006u, 0x00005ae4u, 0x000044aeu, 0x00005ae3u, 0x0003003eu, 0x00005ad9u, 0x00005ae4u, 0x00050041u, 0x00000007u, 0x00005ae5u, 0x000045f4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005ae6u, 0x00005ae5u, 0x00050080u, 0x00000006u, 0x00005ae8u, 0x00005ae4u, 0x00005ae6u, 0x0003003eu, 0x00005ad9u, 0x00005ae8u, 0x000500c7u, 0x00000006u, 0x00005aeau, 0x00005ae8u, 0x00000e4bu, 0x0003003eu, 0x00005ad9u, 0x00005aeau, 0x0003003eu, 0x00005adau, 0x00005aeau, 0x0004003du, 0x00000006u, 0x00005aedu, 0x00005ae1u, 0x000500c7u, 0x00000006u, 0x00005aeeu, 0x00005aedu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005aefu, 0x00005aeeu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005af1u, 0x00005aeau, 0x00005aefu, 0x0003003eu, 0x00005adau, 0x00005af1u, 0x000500c6u, 0x00000006u, 0x00005af3u, 0x00005af1u, 0x0000048bu, 0x0003003eu, 0x00005adau, 0x00005af3u, 0x00080041u, 0x00000277u, 0x00005af6u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005af3u, 0x0004003du, 0x00000229u, 0x00005af7u, 0x00005af6u, 0x00040071u, 0x00000006u, 0x00005af8u, 0x00005af7u, 0x0003003eu, 0x00005adbu, 0x00005af8u, 0x0004007cu, 0x00000008u, 0x00005afau, 0x00005af8u, 0x00070050u, 0x00000009u, 0x00005afbu, 0x00005afau, 0x00005afau, 0x00005afau, 0x00005afau, 0x0003003eu, 0x00005adcu, 0x00005afbu, 0x0003003eu, 0x00004501u, 0x00005afbu, 0x00050050u, 0x0000005fu, 0x0000492cu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000492du, 0x0000492cu, 0x0003003eu, 0x00006a70u, 0x000044aeu, 0x0003003eu, 0x00006a71u, 0x000044b1u, 0x0003003eu, 0x000045f6u, 0x000020eau, 0x0003003eu, 0x000045f7u, 0x0000492du, 0x00050041u, 0x00000007u, 0x00005b04u, 0x000045f7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005b05u, 0x00005b04u, 0x00050084u, 0x00000006u, 0x00005b06u, 0x000044b1u, 0x00005b05u, 0x00050080u, 0x00000006u, 0x00005b07u, 0x000044aeu, 0x00005b06u, 0x0003003eu, 0x00005afcu, 0x00005b07u, 0x00050041u, 0x00000007u, 0x00005b08u, 0x000045f7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005b09u, 0x00005b08u, 0x00050080u, 0x00000006u, 0x00005b0bu, 0x00005b07u, 0x00005b09u, 0x0003003eu, 0x00005afcu, 0x00005b0bu, 0x000500c7u, 0x00000006u, 0x00005b0du, 0x00005b0bu, 0x00000e4bu, 0x0003003eu, 0x00005afcu, 0x00005b0du, 0x0003003eu, 0x00005afdu, 0x00005b0du, 0x0004003du, 0x00000006u, 0x00005b10u, 0x00005b04u, 0x000500c7u, 0x00000006u, 0x00005b11u, 0x00005b10u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005b12u, 0x00005b11u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005b14u, 0x00005b0du, 0x00005b12u, 0x0003003eu, 0x00005afdu, 0x00005b14u, 0x000500c6u, 0x00000006u, 0x00005b16u, 0x00005b14u, 0x0000048bu, 0x0003003eu, 0x00005afdu, 0x00005b16u, 0x00080041u, 0x00000277u, 0x00005b19u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005b16u, 0x0004003du, 0x00000229u, 0x00005b1au, 0x00005b19u, 0x00040071u, 0x00000006u, 0x00005b1bu, 0x00005b1au, 0x0003003eu, 0x00005afeu, 0x00005b1bu, 0x0004007cu, 0x00000008u, 0x00005b1du, 0x00005b1bu, 0x00070050u, 0x00000009u, 0x00005b1eu, 0x00005b1du, 0x00005b1du, 0x00005b1du, 0x00005b1du, 0x0003003eu, 0x00005affu, 0x00005b1eu, 0x0003003eu, 0x00004509u, 0x00005b1eu, 0x000200f9u, 0x00004921u, 0x000200f8u, 0x00004921u, 0x000700f5u, 0x00000009u, 0x00009b1fu, 0x00009a59u, 0x000048dau, 0x00005b1eu, 0x00004922u, 0x000700f5u, 0x00000009u, 0x00009953u, 0x0000988au, 0x000048dau, 0x00005afbu, 0x00004922u, 0x000300f7u, 0x00004932u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004933u, 0x00004932u, 0x000200f8u, 0x00004933u, 0x00050050u, 0x0000005fu, 0x00004936u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004937u, 0x00004936u, 0x0003003eu, 0x00006a74u, 0x000044aeu, 0x0003003eu, 0x00006a75u, 0x000044b1u, 0x0003003eu, 0x000045f9u, 0x000020eau, 0x0003003eu, 0x000045fau, 0x00004937u, 0x00050041u, 0x00000007u, 0x00005b27u, 0x000045fau, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005b28u, 0x00005b27u, 0x00050084u, 0x00000006u, 0x00005b29u, 0x000044b1u, 0x00005b28u, 0x00050080u, 0x00000006u, 0x00005b2au, 0x000044aeu, 0x00005b29u, 0x0003003eu, 0x00005b1fu, 0x00005b2au, 0x00050041u, 0x00000007u, 0x00005b2bu, 0x000045fau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005b2cu, 0x00005b2bu, 0x00050080u, 0x00000006u, 0x00005b2eu, 0x00005b2au, 0x00005b2cu, 0x0003003eu, 0x00005b1fu, 0x00005b2eu, 0x000500c7u, 0x00000006u, 0x00005b30u, 0x00005b2eu, 0x00000e4bu, 0x0003003eu, 0x00005b1fu, 0x00005b30u, 0x0003003eu, 0x00005b20u, 0x00005b30u, 0x0004003du, 0x00000006u, 0x00005b33u, 0x00005b27u, 0x000500c7u, 0x00000006u, 0x00005b34u, 0x00005b33u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005b35u, 0x00005b34u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005b37u, 0x00005b30u, 0x00005b35u, 0x0003003eu, 0x00005b20u, 0x00005b37u, 0x000500c6u, 0x00000006u, 0x00005b39u, 0x00005b37u, 0x0000048bu, 0x0003003eu, 0x00005b20u, 0x00005b39u, 0x00080041u, 0x00000277u, 0x00005b3cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005b39u, 0x0004003du, 0x00000229u, 0x00005b3du, 0x00005b3cu, 0x00040071u, 0x00000006u, 0x00005b3eu, 0x00005b3du, 0x0003003eu, 0x00005b21u, 0x00005b3eu, 0x0004007cu, 0x00000008u, 0x00005b40u, 0x00005b3eu, 0x00070050u, 0x00000009u, 0x00005b41u, 0x00005b40u, 0x00005b40u, 0x00005b40u, 0x00005b40u, 0x0003003eu, 0x00005b22u, 0x00005b41u, 0x0003003eu, 0x00004511u, 0x00005b41u, 0x000200f9u, 0x00004932u, 0x000200f8u, 0x00004932u, 0x000700f5u, 0x00000009u, 0x00009c05u, 0x00009b3du, 0x00004921u, 0x00005b41u, 0x00004933u, 0x000200f9u, 0x000048d7u, 0x000200f8u, 0x000048d9u, 0x0004007cu, 0x000000a2u, 0x000048fcu, 0x000094feu, 0x0003003eu, 0x00006a58u, 0x000044aeu, 0x0003003eu, 0x00006a59u, 0x000044b1u, 0x0003003eu, 0x000045e4u, 0x000020eau, 0x0003003eu, 0x000045e5u, 0x000048fcu, 0x00050041u, 0x00000007u, 0x000059f7u, 0x000045e5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000059f8u, 0x000059f7u, 0x00050084u, 0x00000006u, 0x000059f9u, 0x000044b1u, 0x000059f8u, 0x00050080u, 0x00000006u, 0x000059fau, 0x000044aeu, 0x000059f9u, 0x0003003eu, 0x000059eeu, 0x000059fau, 0x00050041u, 0x00000007u, 0x000059fbu, 0x000045e5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000059fcu, 0x000059fbu, 0x000500c2u, 0x00000006u, 0x000059fdu, 0x000059fcu, 0x00000212u, 0x00050080u, 0x00000006u, 0x000059ffu, 0x000059fau, 0x000059fdu, 0x0003003eu, 0x000059eeu, 0x000059ffu, 0x000500c7u, 0x00000006u, 0x00005a01u, 0x000059ffu, 0x00000e4bu, 0x0003003eu, 0x000059eeu, 0x00005a01u, 0x0004003du, 0x00000006u, 0x00005a03u, 0x000059fbu, 0x000400c8u, 0x00000006u, 0x00005a04u, 0x00005a03u, 0x000500c7u, 0x00000006u, 0x00005a05u, 0x00005a04u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a06u, 0x00005a05u, 0x00000701u, 0x0003003eu, 0x000059efu, 0x00005a06u, 0x0003003eu, 0x000059f0u, 0x00005a01u, 0x0004003du, 0x00000006u, 0x00005a09u, 0x000059f7u, 0x000500c7u, 0x00000006u, 0x00005a0au, 0x00005a09u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005a0bu, 0x00005a0au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005a0du, 0x00005a01u, 0x00005a0bu, 0x0003003eu, 0x000059f0u, 0x00005a0du, 0x000500c6u, 0x00000006u, 0x00005a0fu, 0x00005a0du, 0x0000048bu, 0x0003003eu, 0x000059f0u, 0x00005a0fu, 0x00080041u, 0x00000277u, 0x00005a12u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005a0fu, 0x0004003du, 0x00000229u, 0x00005a13u, 0x00005a12u, 0x00040071u, 0x00000006u, 0x00005a14u, 0x00005a13u, 0x0003003eu, 0x000059f1u, 0x00005a14u, 0x000500c2u, 0x00000006u, 0x00005a17u, 0x00005a14u, 0x00005a06u, 0x000500c7u, 0x00000006u, 0x00005a18u, 0x00005a17u, 0x00000e6eu, 0x0003003eu, 0x000059f1u, 0x00005a18u, 0x000500c4u, 0x00000006u, 0x00005a1au, 0x00005a18u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005a1cu, 0x00005a18u, 0x00005a1au, 0x0003003eu, 0x000059f1u, 0x00005a1cu, 0x0004007cu, 0x00000008u, 0x00005a1eu, 0x00005a1cu, 0x00070050u, 0x00000009u, 0x00005a1fu, 0x00005a1eu, 0x00005a1eu, 0x00005a1eu, 0x00005a1eu, 0x0003003eu, 0x000059f2u, 0x00005a1fu, 0x0003003eu, 0x000044f9u, 0x00005a1fu, 0x000300f7u, 0x00004901u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004902u, 0x00004901u, 0x000200f8u, 0x00004902u, 0x00050050u, 0x0000005fu, 0x00004905u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004906u, 0x00004905u, 0x0003003eu, 0x00006a5cu, 0x000044aeu, 0x0003003eu, 0x00006a5du, 0x000044b1u, 0x0003003eu, 0x000045e7u, 0x000020eau, 0x0003003eu, 0x000045e8u, 0x00004906u, 0x00050041u, 0x00000007u, 0x00005a29u, 0x000045e8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a2au, 0x00005a29u, 0x00050084u, 0x00000006u, 0x00005a2bu, 0x000044b1u, 0x00005a2au, 0x00050080u, 0x00000006u, 0x00005a2cu, 0x000044aeu, 0x00005a2bu, 0x0003003eu, 0x00005a20u, 0x00005a2cu, 0x00050041u, 0x00000007u, 0x00005a2du, 0x000045e8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005a2eu, 0x00005a2du, 0x000500c2u, 0x00000006u, 0x00005a2fu, 0x00005a2eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005a31u, 0x00005a2cu, 0x00005a2fu, 0x0003003eu, 0x00005a20u, 0x00005a31u, 0x000500c7u, 0x00000006u, 0x00005a33u, 0x00005a31u, 0x00000e4bu, 0x0003003eu, 0x00005a20u, 0x00005a33u, 0x0004003du, 0x00000006u, 0x00005a35u, 0x00005a2du, 0x000400c8u, 0x00000006u, 0x00005a36u, 0x00005a35u, 0x000500c7u, 0x00000006u, 0x00005a37u, 0x00005a36u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a38u, 0x00005a37u, 0x00000701u, 0x0003003eu, 0x00005a21u, 0x00005a38u, 0x0003003eu, 0x00005a22u, 0x00005a33u, 0x0004003du, 0x00000006u, 0x00005a3bu, 0x00005a29u, 0x000500c7u, 0x00000006u, 0x00005a3cu, 0x00005a3bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005a3du, 0x00005a3cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005a3fu, 0x00005a33u, 0x00005a3du, 0x0003003eu, 0x00005a22u, 0x00005a3fu, 0x000500c6u, 0x00000006u, 0x00005a41u, 0x00005a3fu, 0x0000048bu, 0x0003003eu, 0x00005a22u, 0x00005a41u, 0x00080041u, 0x00000277u, 0x00005a44u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005a41u, 0x0004003du, 0x00000229u, 0x00005a45u, 0x00005a44u, 0x00040071u, 0x00000006u, 0x00005a46u, 0x00005a45u, 0x0003003eu, 0x00005a23u, 0x00005a46u, 0x000500c2u, 0x00000006u, 0x00005a49u, 0x00005a46u, 0x00005a38u, 0x000500c7u, 0x00000006u, 0x00005a4au, 0x00005a49u, 0x00000e6eu, 0x0003003eu, 0x00005a23u, 0x00005a4au, 0x000500c4u, 0x00000006u, 0x00005a4cu, 0x00005a4au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005a4eu, 0x00005a4au, 0x00005a4cu, 0x0003003eu, 0x00005a23u, 0x00005a4eu, 0x0004007cu, 0x00000008u, 0x00005a50u, 0x00005a4eu, 0x00070050u, 0x00000009u, 0x00005a51u, 0x00005a50u, 0x00005a50u, 0x00005a50u, 0x00005a50u, 0x0003003eu, 0x00005a24u, 0x00005a51u, 0x0003003eu, 0x00004501u, 0x00005a51u, 0x00050050u, 0x0000005fu, 0x0000490cu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000490du, 0x0000490cu, 0x0003003eu, 0x00006a60u, 0x000044aeu, 0x0003003eu, 0x00006a61u, 0x000044b1u, 0x0003003eu, 0x000045eau, 0x000020eau, 0x0003003eu, 0x000045ebu, 0x0000490du, 0x00050041u, 0x00000007u, 0x00005a5bu, 0x000045ebu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a5cu, 0x00005a5bu, 0x00050084u, 0x00000006u, 0x00005a5du, 0x000044b1u, 0x00005a5cu, 0x00050080u, 0x00000006u, 0x00005a5eu, 0x000044aeu, 0x00005a5du, 0x0003003eu, 0x00005a52u, 0x00005a5eu, 0x00050041u, 0x00000007u, 0x00005a5fu, 0x000045ebu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005a60u, 0x00005a5fu, 0x000500c2u, 0x00000006u, 0x00005a61u, 0x00005a60u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005a63u, 0x00005a5eu, 0x00005a61u, 0x0003003eu, 0x00005a52u, 0x00005a63u, 0x000500c7u, 0x00000006u, 0x00005a65u, 0x00005a63u, 0x00000e4bu, 0x0003003eu, 0x00005a52u, 0x00005a65u, 0x0004003du, 0x00000006u, 0x00005a67u, 0x00005a5fu, 0x000400c8u, 0x00000006u, 0x00005a68u, 0x00005a67u, 0x000500c7u, 0x00000006u, 0x00005a69u, 0x00005a68u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a6au, 0x00005a69u, 0x00000701u, 0x0003003eu, 0x00005a53u, 0x00005a6au, 0x0003003eu, 0x00005a54u, 0x00005a65u, 0x0004003du, 0x00000006u, 0x00005a6du, 0x00005a5bu, 0x000500c7u, 0x00000006u, 0x00005a6eu, 0x00005a6du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005a6fu, 0x00005a6eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005a71u, 0x00005a65u, 0x00005a6fu, 0x0003003eu, 0x00005a54u, 0x00005a71u, 0x000500c6u, 0x00000006u, 0x00005a73u, 0x00005a71u, 0x0000048bu, 0x0003003eu, 0x00005a54u, 0x00005a73u, 0x00080041u, 0x00000277u, 0x00005a76u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005a73u, 0x0004003du, 0x00000229u, 0x00005a77u, 0x00005a76u, 0x00040071u, 0x00000006u, 0x00005a78u, 0x00005a77u, 0x0003003eu, 0x00005a55u, 0x00005a78u, 0x000500c2u, 0x00000006u, 0x00005a7bu, 0x00005a78u, 0x00005a6au, 0x000500c7u, 0x00000006u, 0x00005a7cu, 0x00005a7bu, 0x00000e6eu, 0x0003003eu, 0x00005a55u, 0x00005a7cu, 0x000500c4u, 0x00000006u, 0x00005a7eu, 0x00005a7cu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005a80u, 0x00005a7cu, 0x00005a7eu, 0x0003003eu, 0x00005a55u, 0x00005a80u, 0x0004007cu, 0x00000008u, 0x00005a82u, 0x00005a80u, 0x00070050u, 0x00000009u, 0x00005a83u, 0x00005a82u, 0x00005a82u, 0x00005a82u, 0x00005a82u, 0x0003003eu, 0x00005a56u, 0x00005a83u, 0x0003003eu, 0x00004509u, 0x00005a83u, 0x000200f9u, 0x00004901u, 0x000200f8u, 0x00004901u, 0x000700f5u, 0x00000009u, 0x00009b1du, 0x00009a59u, 0x000048d9u, 0x00005a83u, 0x00004902u, 0x000700f5u, 0x00000009u, 0x00009951u, 0x0000988au, 0x000048d9u, 0x00005a51u, 0x00004902u, 0x000300f7u, 0x00004912u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004913u, 0x00004912u, 0x000200f8u, 0x00004913u, 0x00050050u, 0x0000005fu, 0x00004916u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004917u, 0x00004916u, 0x0003003eu, 0x00006a64u, 0x000044aeu, 0x0003003eu, 0x00006a65u, 0x000044b1u, 0x0003003eu, 0x000045edu, 0x000020eau, 0x0003003eu, 0x000045eeu, 0x00004917u, 0x00050041u, 0x00000007u, 0x00005a8du, 0x000045eeu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a8eu, 0x00005a8du, 0x00050084u, 0x00000006u, 0x00005a8fu, 0x000044b1u, 0x00005a8eu, 0x00050080u, 0x00000006u, 0x00005a90u, 0x000044aeu, 0x00005a8fu, 0x0003003eu, 0x00005a84u, 0x00005a90u, 0x00050041u, 0x00000007u, 0x00005a91u, 0x000045eeu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005a92u, 0x00005a91u, 0x000500c2u, 0x00000006u, 0x00005a93u, 0x00005a92u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005a95u, 0x00005a90u, 0x00005a93u, 0x0003003eu, 0x00005a84u, 0x00005a95u, 0x000500c7u, 0x00000006u, 0x00005a97u, 0x00005a95u, 0x00000e4bu, 0x0003003eu, 0x00005a84u, 0x00005a97u, 0x0004003du, 0x00000006u, 0x00005a99u, 0x00005a91u, 0x000400c8u, 0x00000006u, 0x00005a9au, 0x00005a99u, 0x000500c7u, 0x00000006u, 0x00005a9bu, 0x00005a9au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a9cu, 0x00005a9bu, 0x00000701u, 0x0003003eu, 0x00005a85u, 0x00005a9cu, 0x0003003eu, 0x00005a86u, 0x00005a97u, 0x0004003du, 0x00000006u, 0x00005a9fu, 0x00005a8du, 0x000500c7u, 0x00000006u, 0x00005aa0u, 0x00005a9fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005aa1u, 0x00005aa0u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005aa3u, 0x00005a97u, 0x00005aa1u, 0x0003003eu, 0x00005a86u, 0x00005aa3u, 0x000500c6u, 0x00000006u, 0x00005aa5u, 0x00005aa3u, 0x0000048bu, 0x0003003eu, 0x00005a86u, 0x00005aa5u, 0x00080041u, 0x00000277u, 0x00005aa8u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005aa5u, 0x0004003du, 0x00000229u, 0x00005aa9u, 0x00005aa8u, 0x00040071u, 0x00000006u, 0x00005aaau, 0x00005aa9u, 0x0003003eu, 0x00005a87u, 0x00005aaau, 0x000500c2u, 0x00000006u, 0x00005aadu, 0x00005aaau, 0x00005a9cu, 0x000500c7u, 0x00000006u, 0x00005aaeu, 0x00005aadu, 0x00000e6eu, 0x0003003eu, 0x00005a87u, 0x00005aaeu, 0x000500c4u, 0x00000006u, 0x00005ab0u, 0x00005aaeu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005ab2u, 0x00005aaeu, 0x00005ab0u, 0x0003003eu, 0x00005a87u, 0x00005ab2u, 0x0004007cu, 0x00000008u, 0x00005ab4u, 0x00005ab2u, 0x00070050u, 0x00000009u, 0x00005ab5u, 0x00005ab4u, 0x00005ab4u, 0x00005ab4u, 0x00005ab4u, 0x0003003eu, 0x00005a88u, 0x00005ab5u, 0x0003003eu, 0x00004511u, 0x00005ab5u, 0x000200f9u, 0x00004912u, 0x000200f8u, 0x00004912u, 0x000700f5u, 0x00000009u, 0x00009c03u, 0x00009b3du, 0x00004901u, 0x00005ab5u, 0x00004913u, 0x000200f9u, 0x000048d7u, 0x000200f8u, 0x000048d8u, 0x0004007cu, 0x000000a2u, 0x000048dcu, 0x000094feu, 0x0003003eu, 0x00006a78u, 0x000044aeu, 0x0003003eu, 0x00006a79u, 0x000044b1u, 0x0003003eu, 0x000045fcu, 0x000020eau, 0x0003003eu, 0x000045fdu, 0x000048dcu, 0x00050041u, 0x00000007u, 0x0000594eu, 0x000045fdu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000594fu, 0x0000594eu, 0x00050084u, 0x00000006u, 0x00005950u, 0x000044b1u, 0x0000594fu, 0x00050080u, 0x00000006u, 0x00005951u, 0x000044aeu, 0x00005950u, 0x0003003eu, 0x00005946u, 0x00005951u, 0x00050041u, 0x00000007u, 0x00005952u, 0x000045fdu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005953u, 0x00005952u, 0x00050084u, 0x00000006u, 0x00005954u, 0x00005953u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005956u, 0x00005951u, 0x00005954u, 0x0003003eu, 0x00005946u, 0x00005956u, 0x000500c7u, 0x00000006u, 0x00005958u, 0x00005956u, 0x00000e4bu, 0x0003003eu, 0x00005946u, 0x00005958u, 0x000500c2u, 0x00000006u, 0x0000595au, 0x00005958u, 0x00000212u, 0x0003003eu, 0x00005947u, 0x0000595au, 0x0004003du, 0x00000006u, 0x0000595cu, 0x0000594eu, 0x000500c7u, 0x00000006u, 0x0000595du, 0x0000595cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000595eu, 0x0000595du, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005960u, 0x0000595au, 0x0000595eu, 0x0003003eu, 0x00005947u, 0x00005960u, 0x000500c6u, 0x00000006u, 0x00005962u, 0x00005960u, 0x00000485u, 0x0003003eu, 0x00005947u, 0x00005962u, 0x00080041u, 0x00000270u, 0x00005965u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005962u, 0x0004003du, 0x0000022bu, 0x00005966u, 0x00005965u, 0x00040071u, 0x00000006u, 0x00005967u, 0x00005966u, 0x0003003eu, 0x00005948u, 0x00005967u, 0x000500c2u, 0x00000006u, 0x00005969u, 0x00005967u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000596au, 0x00005969u, 0x000500c7u, 0x00000006u, 0x0000596cu, 0x00005967u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000596du, 0x0000596cu, 0x00050050u, 0x0000005fu, 0x0000596eu, 0x0000596au, 0x0000596du, 0x0009004fu, 0x00000009u, 0x0000596fu, 0x0000596eu, 0x0000596eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005949u, 0x0000596fu, 0x0003003eu, 0x000044f9u, 0x0000596fu, 0x000300f7u, 0x000048e1u, 0x00000000u, 0x000400fau, 0x00002101u, 0x000048e2u, 0x000048e1u, 0x000200f8u, 0x000048e2u, 0x00050050u, 0x0000005fu, 0x000048e5u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000048e6u, 0x000048e5u, 0x0003003eu, 0x00006a7cu, 0x000044aeu, 0x0003003eu, 0x00006a7du, 0x000044b1u, 0x0003003eu, 0x000045ffu, 0x000020eau, 0x0003003eu, 0x00004600u, 0x000048e6u, 0x00050041u, 0x00000007u, 0x00005978u, 0x00004600u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005979u, 0x00005978u, 0x00050084u, 0x00000006u, 0x0000597au, 0x000044b1u, 0x00005979u, 0x00050080u, 0x00000006u, 0x0000597bu, 0x000044aeu, 0x0000597au, 0x0003003eu, 0x00005970u, 0x0000597bu, 0x00050041u, 0x00000007u, 0x0000597cu, 0x00004600u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000597du, 0x0000597cu, 0x00050084u, 0x00000006u, 0x0000597eu, 0x0000597du, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005980u, 0x0000597bu, 0x0000597eu, 0x0003003eu, 0x00005970u, 0x00005980u, 0x000500c7u, 0x00000006u, 0x00005982u, 0x00005980u, 0x00000e4bu, 0x0003003eu, 0x00005970u, 0x00005982u, 0x000500c2u, 0x00000006u, 0x00005984u, 0x00005982u, 0x00000212u, 0x0003003eu, 0x00005971u, 0x00005984u, 0x0004003du, 0x00000006u, 0x00005986u, 0x00005978u, 0x000500c7u, 0x00000006u, 0x00005987u, 0x00005986u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005988u, 0x00005987u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000598au, 0x00005984u, 0x00005988u, 0x0003003eu, 0x00005971u, 0x0000598au, 0x000500c6u, 0x00000006u, 0x0000598cu, 0x0000598au, 0x00000485u, 0x0003003eu, 0x00005971u, 0x0000598cu, 0x00080041u, 0x00000270u, 0x0000598fu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000598cu, 0x0004003du, 0x0000022bu, 0x00005990u, 0x0000598fu, 0x00040071u, 0x00000006u, 0x00005991u, 0x00005990u, 0x0003003eu, 0x00005972u, 0x00005991u, 0x000500c2u, 0x00000006u, 0x00005993u, 0x00005991u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005994u, 0x00005993u, 0x000500c7u, 0x00000006u, 0x00005996u, 0x00005991u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005997u, 0x00005996u, 0x00050050u, 0x0000005fu, 0x00005998u, 0x00005994u, 0x00005997u, 0x0009004fu, 0x00000009u, 0x00005999u, 0x00005998u, 0x00005998u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005973u, 0x00005999u, 0x0003003eu, 0x00004501u, 0x00005999u, 0x00050050u, 0x0000005fu, 0x000048ecu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000048edu, 0x000048ecu, 0x0003003eu, 0x00006a80u, 0x000044aeu, 0x0003003eu, 0x00006a81u, 0x000044b1u, 0x0003003eu, 0x00004602u, 0x000020eau, 0x0003003eu, 0x00004603u, 0x000048edu, 0x00050041u, 0x00000007u, 0x000059a2u, 0x00004603u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000059a3u, 0x000059a2u, 0x00050084u, 0x00000006u, 0x000059a4u, 0x000044b1u, 0x000059a3u, 0x00050080u, 0x00000006u, 0x000059a5u, 0x000044aeu, 0x000059a4u, 0x0003003eu, 0x0000599au, 0x000059a5u, 0x00050041u, 0x00000007u, 0x000059a6u, 0x00004603u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000059a7u, 0x000059a6u, 0x00050084u, 0x00000006u, 0x000059a8u, 0x000059a7u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000059aau, 0x000059a5u, 0x000059a8u, 0x0003003eu, 0x0000599au, 0x000059aau, 0x000500c7u, 0x00000006u, 0x000059acu, 0x000059aau, 0x00000e4bu, 0x0003003eu, 0x0000599au, 0x000059acu, 0x000500c2u, 0x00000006u, 0x000059aeu, 0x000059acu, 0x00000212u, 0x0003003eu, 0x0000599bu, 0x000059aeu, 0x0004003du, 0x00000006u, 0x000059b0u, 0x000059a2u, 0x000500c7u, 0x00000006u, 0x000059b1u, 0x000059b0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000059b2u, 0x000059b1u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000059b4u, 0x000059aeu, 0x000059b2u, 0x0003003eu, 0x0000599bu, 0x000059b4u, 0x000500c6u, 0x00000006u, 0x000059b6u, 0x000059b4u, 0x00000485u, 0x0003003eu, 0x0000599bu, 0x000059b6u, 0x00080041u, 0x00000270u, 0x000059b9u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000059b6u, 0x0004003du, 0x0000022bu, 0x000059bau, 0x000059b9u, 0x00040071u, 0x00000006u, 0x000059bbu, 0x000059bau, 0x0003003eu, 0x0000599cu, 0x000059bbu, 0x000500c2u, 0x00000006u, 0x000059bdu, 0x000059bbu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000059beu, 0x000059bdu, 0x000500c7u, 0x00000006u, 0x000059c0u, 0x000059bbu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000059c1u, 0x000059c0u, 0x00050050u, 0x0000005fu, 0x000059c2u, 0x000059beu, 0x000059c1u, 0x0009004fu, 0x00000009u, 0x000059c3u, 0x000059c2u, 0x000059c2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000599du, 0x000059c3u, 0x0003003eu, 0x00004509u, 0x000059c3u, 0x000200f9u, 0x000048e1u, 0x000200f8u, 0x000048e1u, 0x000700f5u, 0x00000009u, 0x00009b1bu, 0x00009a59u, 0x000048d8u, 0x000059c3u, 0x000048e2u, 0x000700f5u, 0x00000009u, 0x0000994fu, 0x0000988au, 0x000048d8u, 0x00005999u, 0x000048e2u, 0x000300f7u, 0x000048f2u, 0x00000000u, 0x000400fau, 0x0000466du, 0x000048f3u, 0x000048f2u, 0x000200f8u, 0x000048f3u, 0x00050050u, 0x0000005fu, 0x000048f6u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000048f7u, 0x000048f6u, 0x0003003eu, 0x00006a84u, 0x000044aeu, 0x0003003eu, 0x00006a85u, 0x000044b1u, 0x0003003eu, 0x00004605u, 0x000020eau, 0x0003003eu, 0x00004606u, 0x000048f7u, 0x00050041u, 0x00000007u, 0x000059ccu, 0x00004606u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000059cdu, 0x000059ccu, 0x00050084u, 0x00000006u, 0x000059ceu, 0x000044b1u, 0x000059cdu, 0x00050080u, 0x00000006u, 0x000059cfu, 0x000044aeu, 0x000059ceu, 0x0003003eu, 0x000059c4u, 0x000059cfu, 0x00050041u, 0x00000007u, 0x000059d0u, 0x00004606u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000059d1u, 0x000059d0u, 0x00050084u, 0x00000006u, 0x000059d2u, 0x000059d1u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000059d4u, 0x000059cfu, 0x000059d2u, 0x0003003eu, 0x000059c4u, 0x000059d4u, 0x000500c7u, 0x00000006u, 0x000059d6u, 0x000059d4u, 0x00000e4bu, 0x0003003eu, 0x000059c4u, 0x000059d6u, 0x000500c2u, 0x00000006u, 0x000059d8u, 0x000059d6u, 0x00000212u, 0x0003003eu, 0x000059c5u, 0x000059d8u, 0x0004003du, 0x00000006u, 0x000059dau, 0x000059ccu, 0x000500c7u, 0x00000006u, 0x000059dbu, 0x000059dau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000059dcu, 0x000059dbu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000059deu, 0x000059d8u, 0x000059dcu, 0x0003003eu, 0x000059c5u, 0x000059deu, 0x000500c6u, 0x00000006u, 0x000059e0u, 0x000059deu, 0x00000485u, 0x0003003eu, 0x000059c5u, 0x000059e0u, 0x00080041u, 0x00000270u, 0x000059e3u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000059e0u, 0x0004003du, 0x0000022bu, 0x000059e4u, 0x000059e3u, 0x00040071u, 0x00000006u, 0x000059e5u, 0x000059e4u, 0x0003003eu, 0x000059c6u, 0x000059e5u, 0x000500c2u, 0x00000006u, 0x000059e7u, 0x000059e5u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000059e8u, 0x000059e7u, 0x000500c7u, 0x00000006u, 0x000059eau, 0x000059e5u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000059ebu, 0x000059eau, 0x00050050u, 0x0000005fu, 0x000059ecu, 0x000059e8u, 0x000059ebu, 0x0009004fu, 0x00000009u, 0x000059edu, 0x000059ecu, 0x000059ecu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000059c7u, 0x000059edu, 0x0003003eu, 0x00004511u, 0x000059edu, 0x000200f9u, 0x000048f2u, 0x000200f8u, 0x000048f2u, 0x000700f5u, 0x00000009u, 0x00009c01u, 0x00009b3du, 0x000048e1u, 0x000059edu, 0x000048f3u, 0x000200f9u, 0x000048d7u, 0x000200f8u, 0x000048d7u, 0x000900f5u, 0x00000009u, 0x00009c00u, 0x00009c01u, 0x000048f2u, 0x00009c03u, 0x00004912u, 0x00009c05u, 0x00004932u, 0x000900f5u, 0x00000009u, 0x00009b19u, 0x00009b1bu, 0x000048f2u, 0x00009b1du, 0x00004912u, 0x00009b1fu, 0x00004932u, 0x000900f5u, 0x00000009u, 0x00009a34u, 0x0000596fu, 0x000048f2u, 0x00005a1fu, 0x00004912u, 0x00005ad8u, 0x00004932u, 0x000900f5u, 0x00000009u, 0x0000994du, 0x0000994fu, 0x000048f2u, 0x00009951u, 0x00004912u, 0x00009953u, 0x00004932u, 0x000200f9u, 0x00004722u, 0x000200f8u, 0x00004726u, 0x000300f7u, 0x00004850u, 0x00000000u, 0x000b00fbu, 0x000044bbu, 0x00004850u, 0x00000000u, 0x00004851u, 0x00000001u, 0x00004852u, 0x00000002u, 0x00004853u, 0x00000003u, 0x00004854u, 0x000200f8u, 0x00004854u, 0x0004007cu, 0x000000a2u, 0x000048b6u, 0x000094feu, 0x0003003eu, 0x00006a48u, 0x000044aeu, 0x0003003eu, 0x00006a49u, 0x000044b1u, 0x0003003eu, 0x000045d8u, 0x000020eau, 0x0003003eu, 0x000045d9u, 0x000048b6u, 0x00050041u, 0x00000007u, 0x000058a6u, 0x000045d9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000058a7u, 0x000058a6u, 0x00050084u, 0x00000006u, 0x000058a8u, 0x000044b1u, 0x000058a7u, 0x00050080u, 0x00000006u, 0x000058a9u, 0x000044aeu, 0x000058a8u, 0x0003003eu, 0x0000589eu, 0x000058a9u, 0x00050041u, 0x00000007u, 0x000058aau, 0x000045d9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000058abu, 0x000058aau, 0x00050084u, 0x00000006u, 0x000058acu, 0x000058abu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000058aeu, 0x000058a9u, 0x000058acu, 0x0003003eu, 0x0000589eu, 0x000058aeu, 0x000500c7u, 0x00000006u, 0x000058b0u, 0x000058aeu, 0x00000e4bu, 0x0003003eu, 0x0000589eu, 0x000058b0u, 0x000500c2u, 0x00000006u, 0x000058b2u, 0x000058b0u, 0x00000212u, 0x0003003eu, 0x0000589fu, 0x000058b2u, 0x0004003du, 0x00000006u, 0x000058b4u, 0x000058a6u, 0x000500c7u, 0x00000006u, 0x000058b5u, 0x000058b4u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000058b6u, 0x000058b5u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000058b8u, 0x000058b2u, 0x000058b6u, 0x0003003eu, 0x0000589fu, 0x000058b8u, 0x000500c6u, 0x00000006u, 0x000058bau, 0x000058b8u, 0x00000485u, 0x0003003eu, 0x0000589fu, 0x000058bau, 0x00080041u, 0x00000270u, 0x000058bdu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000058bau, 0x0004003du, 0x0000022bu, 0x000058beu, 0x000058bdu, 0x00040071u, 0x00000006u, 0x000058bfu, 0x000058beu, 0x0003003eu, 0x000058a0u, 0x000058bfu, 0x000500c2u, 0x00000006u, 0x000058c1u, 0x000058bfu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000058c2u, 0x000058c1u, 0x000500c7u, 0x00000006u, 0x000058c4u, 0x000058bfu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000058c5u, 0x000058c4u, 0x00050050u, 0x0000005fu, 0x000058c6u, 0x000058c2u, 0x000058c5u, 0x0009004fu, 0x00000009u, 0x000058c7u, 0x000058c6u, 0x000058c6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000058a1u, 0x000058c7u, 0x0003003eu, 0x000044f9u, 0x000058c7u, 0x000300f7u, 0x000048bbu, 0x00000000u, 0x000400fau, 0x00002101u, 0x000048bcu, 0x000048bbu, 0x000200f8u, 0x000048bcu, 0x00050050u, 0x0000005fu, 0x000048bfu, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000048c0u, 0x000048bfu, 0x0003003eu, 0x00006a4cu, 0x000044aeu, 0x0003003eu, 0x00006a4du, 0x000044b1u, 0x0003003eu, 0x000045dbu, 0x000020eau, 0x0003003eu, 0x000045dcu, 0x000048c0u, 0x00050041u, 0x00000007u, 0x000058d0u, 0x000045dcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000058d1u, 0x000058d0u, 0x00050084u, 0x00000006u, 0x000058d2u, 0x000044b1u, 0x000058d1u, 0x00050080u, 0x00000006u, 0x000058d3u, 0x000044aeu, 0x000058d2u, 0x0003003eu, 0x000058c8u, 0x000058d3u, 0x00050041u, 0x00000007u, 0x000058d4u, 0x000045dcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000058d5u, 0x000058d4u, 0x00050084u, 0x00000006u, 0x000058d6u, 0x000058d5u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000058d8u, 0x000058d3u, 0x000058d6u, 0x0003003eu, 0x000058c8u, 0x000058d8u, 0x000500c7u, 0x00000006u, 0x000058dau, 0x000058d8u, 0x00000e4bu, 0x0003003eu, 0x000058c8u, 0x000058dau, 0x000500c2u, 0x00000006u, 0x000058dcu, 0x000058dau, 0x00000212u, 0x0003003eu, 0x000058c9u, 0x000058dcu, 0x0004003du, 0x00000006u, 0x000058deu, 0x000058d0u, 0x000500c7u, 0x00000006u, 0x000058dfu, 0x000058deu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000058e0u, 0x000058dfu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000058e2u, 0x000058dcu, 0x000058e0u, 0x0003003eu, 0x000058c9u, 0x000058e2u, 0x000500c6u, 0x00000006u, 0x000058e4u, 0x000058e2u, 0x00000485u, 0x0003003eu, 0x000058c9u, 0x000058e4u, 0x00080041u, 0x00000270u, 0x000058e7u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000058e4u, 0x0004003du, 0x0000022bu, 0x000058e8u, 0x000058e7u, 0x00040071u, 0x00000006u, 0x000058e9u, 0x000058e8u, 0x0003003eu, 0x000058cau, 0x000058e9u, 0x000500c2u, 0x00000006u, 0x000058ebu, 0x000058e9u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000058ecu, 0x000058ebu, 0x000500c7u, 0x00000006u, 0x000058eeu, 0x000058e9u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000058efu, 0x000058eeu, 0x00050050u, 0x0000005fu, 0x000058f0u, 0x000058ecu, 0x000058efu, 0x0009004fu, 0x00000009u, 0x000058f1u, 0x000058f0u, 0x000058f0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000058cbu, 0x000058f1u, 0x0003003eu, 0x00004501u, 0x000058f1u, 0x00050050u, 0x0000005fu, 0x000048c6u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000048c7u, 0x000048c6u, 0x0003003eu, 0x00006a50u, 0x000044aeu, 0x0003003eu, 0x00006a51u, 0x000044b1u, 0x0003003eu, 0x000045deu, 0x000020eau, 0x0003003eu, 0x000045dfu, 0x000048c7u, 0x00050041u, 0x00000007u, 0x000058fau, 0x000045dfu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000058fbu, 0x000058fau, 0x00050084u, 0x00000006u, 0x000058fcu, 0x000044b1u, 0x000058fbu, 0x00050080u, 0x00000006u, 0x000058fdu, 0x000044aeu, 0x000058fcu, 0x0003003eu, 0x000058f2u, 0x000058fdu, 0x00050041u, 0x00000007u, 0x000058feu, 0x000045dfu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000058ffu, 0x000058feu, 0x00050084u, 0x00000006u, 0x00005900u, 0x000058ffu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005902u, 0x000058fdu, 0x00005900u, 0x0003003eu, 0x000058f2u, 0x00005902u, 0x000500c7u, 0x00000006u, 0x00005904u, 0x00005902u, 0x00000e4bu, 0x0003003eu, 0x000058f2u, 0x00005904u, 0x000500c2u, 0x00000006u, 0x00005906u, 0x00005904u, 0x00000212u, 0x0003003eu, 0x000058f3u, 0x00005906u, 0x0004003du, 0x00000006u, 0x00005908u, 0x000058fau, 0x000500c7u, 0x00000006u, 0x00005909u, 0x00005908u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000590au, 0x00005909u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000590cu, 0x00005906u, 0x0000590au, 0x0003003eu, 0x000058f3u, 0x0000590cu, 0x000500c6u, 0x00000006u, 0x0000590eu, 0x0000590cu, 0x00000485u, 0x0003003eu, 0x000058f3u, 0x0000590eu, 0x00080041u, 0x00000270u, 0x00005911u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000590eu, 0x0004003du, 0x0000022bu, 0x00005912u, 0x00005911u, 0x00040071u, 0x00000006u, 0x00005913u, 0x00005912u, 0x0003003eu, 0x000058f4u, 0x00005913u, 0x000500c2u, 0x00000006u, 0x00005915u, 0x00005913u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005916u, 0x00005915u, 0x000500c7u, 0x00000006u, 0x00005918u, 0x00005913u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005919u, 0x00005918u, 0x00050050u, 0x0000005fu, 0x0000591au, 0x00005916u, 0x00005919u, 0x0009004fu, 0x00000009u, 0x0000591bu, 0x0000591au, 0x0000591au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000058f5u, 0x0000591bu, 0x0003003eu, 0x00004509u, 0x0000591bu, 0x000200f9u, 0x000048bbu, 0x000200f8u, 0x000048bbu, 0x000700f5u, 0x00000009u, 0x00009b18u, 0x00009a59u, 0x00004854u, 0x0000591bu, 0x000048bcu, 0x000700f5u, 0x00000009u, 0x0000994cu, 0x0000988au, 0x00004854u, 0x000058f1u, 0x000048bcu, 0x000300f7u, 0x000048ccu, 0x00000000u, 0x000400fau, 0x0000466du, 0x000048cdu, 0x000048ccu, 0x000200f8u, 0x000048cdu, 0x00050050u, 0x0000005fu, 0x000048d0u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000048d1u, 0x000048d0u, 0x0003003eu, 0x00006a54u, 0x000044aeu, 0x0003003eu, 0x00006a55u, 0x000044b1u, 0x0003003eu, 0x000045e1u, 0x000020eau, 0x0003003eu, 0x000045e2u, 0x000048d1u, 0x00050041u, 0x00000007u, 0x00005924u, 0x000045e2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005925u, 0x00005924u, 0x00050084u, 0x00000006u, 0x00005926u, 0x000044b1u, 0x00005925u, 0x00050080u, 0x00000006u, 0x00005927u, 0x000044aeu, 0x00005926u, 0x0003003eu, 0x0000591cu, 0x00005927u, 0x00050041u, 0x00000007u, 0x00005928u, 0x000045e2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005929u, 0x00005928u, 0x00050084u, 0x00000006u, 0x0000592au, 0x00005929u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000592cu, 0x00005927u, 0x0000592au, 0x0003003eu, 0x0000591cu, 0x0000592cu, 0x000500c7u, 0x00000006u, 0x0000592eu, 0x0000592cu, 0x00000e4bu, 0x0003003eu, 0x0000591cu, 0x0000592eu, 0x000500c2u, 0x00000006u, 0x00005930u, 0x0000592eu, 0x00000212u, 0x0003003eu, 0x0000591du, 0x00005930u, 0x0004003du, 0x00000006u, 0x00005932u, 0x00005924u, 0x000500c7u, 0x00000006u, 0x00005933u, 0x00005932u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005934u, 0x00005933u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005936u, 0x00005930u, 0x00005934u, 0x0003003eu, 0x0000591du, 0x00005936u, 0x000500c6u, 0x00000006u, 0x00005938u, 0x00005936u, 0x00000485u, 0x0003003eu, 0x0000591du, 0x00005938u, 0x00080041u, 0x00000270u, 0x0000593bu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005938u, 0x0004003du, 0x0000022bu, 0x0000593cu, 0x0000593bu, 0x00040071u, 0x00000006u, 0x0000593du, 0x0000593cu, 0x0003003eu, 0x0000591eu, 0x0000593du, 0x000500c2u, 0x00000006u, 0x0000593fu, 0x0000593du, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005940u, 0x0000593fu, 0x000500c7u, 0x00000006u, 0x00005942u, 0x0000593du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005943u, 0x00005942u, 0x00050050u, 0x0000005fu, 0x00005944u, 0x00005940u, 0x00005943u, 0x0009004fu, 0x00000009u, 0x00005945u, 0x00005944u, 0x00005944u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000591fu, 0x00005945u, 0x0003003eu, 0x00004511u, 0x00005945u, 0x000200f9u, 0x000048ccu, 0x000200f8u, 0x000048ccu, 0x000700f5u, 0x00000009u, 0x00009bfeu, 0x00009b3du, 0x000048bbu, 0x00005945u, 0x000048cdu, 0x000200f9u, 0x00004850u, 0x000200f8u, 0x00004853u, 0x0004007cu, 0x000000a2u, 0x00004896u, 0x000094feu, 0x0003003eu, 0x00006a38u, 0x000044aeu, 0x0003003eu, 0x00006a39u, 0x000044b1u, 0x0003003eu, 0x000045ccu, 0x000020eau, 0x0003003eu, 0x000045cdu, 0x00004896u, 0x00050041u, 0x00000007u, 0x000057d3u, 0x000045cdu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000057d4u, 0x000057d3u, 0x00050084u, 0x00000006u, 0x000057d5u, 0x000044b1u, 0x000057d4u, 0x00050080u, 0x00000006u, 0x000057d6u, 0x000044aeu, 0x000057d5u, 0x0003003eu, 0x000057cau, 0x000057d6u, 0x00050041u, 0x00000007u, 0x000057d7u, 0x000045cdu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000057d8u, 0x000057d7u, 0x00050084u, 0x00000006u, 0x000057d9u, 0x000057d8u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000057dbu, 0x000057d6u, 0x000057d9u, 0x0003003eu, 0x000057cau, 0x000057dbu, 0x000500c7u, 0x00000006u, 0x000057ddu, 0x000057dbu, 0x00000e4bu, 0x0003003eu, 0x000057cau, 0x000057ddu, 0x000500c2u, 0x00000006u, 0x000057dfu, 0x000057ddu, 0x00000212u, 0x0003003eu, 0x000057cbu, 0x000057dfu, 0x0004003du, 0x00000006u, 0x000057e1u, 0x000057d3u, 0x000500c7u, 0x00000006u, 0x000057e2u, 0x000057e1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000057e3u, 0x000057e2u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000057e5u, 0x000057dfu, 0x000057e3u, 0x0003003eu, 0x000057cbu, 0x000057e5u, 0x000500c6u, 0x00000006u, 0x000057e7u, 0x000057e5u, 0x00000485u, 0x0003003eu, 0x000057cbu, 0x000057e7u, 0x00080041u, 0x00000270u, 0x000057eau, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000057e7u, 0x0004003du, 0x0000022bu, 0x000057ebu, 0x000057eau, 0x00040071u, 0x00000006u, 0x000057ecu, 0x000057ebu, 0x0003003eu, 0x000057ccu, 0x000057ecu, 0x0003003eu, 0x000057cdu, 0x000057ecu, 0x000500c2u, 0x00000006u, 0x000057f3u, 0x000057ecu, 0x0000025eu, 0x0003003eu, 0x000057efu, 0x000057f3u, 0x000500c7u, 0x00000006u, 0x000057f5u, 0x000057ecu, 0x000006c2u, 0x0003003eu, 0x000057f0u, 0x000057f5u, 0x0004007cu, 0x00000008u, 0x000057f7u, 0x000057f3u, 0x0004007cu, 0x00000008u, 0x000057fdu, 0x000057f5u, 0x00070050u, 0x00000009u, 0x000057feu, 0x000057f7u, 0x000057f7u, 0x000057f7u, 0x000057fdu, 0x0003003eu, 0x000057f1u, 0x000057feu, 0x0003003eu, 0x000057ceu, 0x000057feu, 0x0003003eu, 0x000044f9u, 0x000057feu, 0x000300f7u, 0x0000489bu, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000489cu, 0x0000489bu, 0x000200f8u, 0x0000489cu, 0x00050050u, 0x0000005fu, 0x0000489fu, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000048a0u, 0x0000489fu, 0x0003003eu, 0x00006a3cu, 0x000044aeu, 0x0003003eu, 0x00006a3du, 0x000044b1u, 0x0003003eu, 0x000045cfu, 0x000020eau, 0x0003003eu, 0x000045d0u, 0x000048a0u, 0x00050041u, 0x00000007u, 0x00005808u, 0x000045d0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005809u, 0x00005808u, 0x00050084u, 0x00000006u, 0x0000580au, 0x000044b1u, 0x00005809u, 0x00050080u, 0x00000006u, 0x0000580bu, 0x000044aeu, 0x0000580au, 0x0003003eu, 0x000057ffu, 0x0000580bu, 0x00050041u, 0x00000007u, 0x0000580cu, 0x000045d0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000580du, 0x0000580cu, 0x00050084u, 0x00000006u, 0x0000580eu, 0x0000580du, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005810u, 0x0000580bu, 0x0000580eu, 0x0003003eu, 0x000057ffu, 0x00005810u, 0x000500c7u, 0x00000006u, 0x00005812u, 0x00005810u, 0x00000e4bu, 0x0003003eu, 0x000057ffu, 0x00005812u, 0x000500c2u, 0x00000006u, 0x00005814u, 0x00005812u, 0x00000212u, 0x0003003eu, 0x00005800u, 0x00005814u, 0x0004003du, 0x00000006u, 0x00005816u, 0x00005808u, 0x000500c7u, 0x00000006u, 0x00005817u, 0x00005816u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005818u, 0x00005817u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000581au, 0x00005814u, 0x00005818u, 0x0003003eu, 0x00005800u, 0x0000581au, 0x000500c6u, 0x00000006u, 0x0000581cu, 0x0000581au, 0x00000485u, 0x0003003eu, 0x00005800u, 0x0000581cu, 0x00080041u, 0x00000270u, 0x0000581fu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000581cu, 0x0004003du, 0x0000022bu, 0x00005820u, 0x0000581fu, 0x00040071u, 0x00000006u, 0x00005821u, 0x00005820u, 0x0003003eu, 0x00005801u, 0x00005821u, 0x0003003eu, 0x00005802u, 0x00005821u, 0x000500c2u, 0x00000006u, 0x00005828u, 0x00005821u, 0x0000025eu, 0x0003003eu, 0x00005824u, 0x00005828u, 0x000500c7u, 0x00000006u, 0x0000582au, 0x00005821u, 0x000006c2u, 0x0003003eu, 0x00005825u, 0x0000582au, 0x0004007cu, 0x00000008u, 0x0000582cu, 0x00005828u, 0x0004007cu, 0x00000008u, 0x00005832u, 0x0000582au, 0x00070050u, 0x00000009u, 0x00005833u, 0x0000582cu, 0x0000582cu, 0x0000582cu, 0x00005832u, 0x0003003eu, 0x00005826u, 0x00005833u, 0x0003003eu, 0x00005803u, 0x00005833u, 0x0003003eu, 0x00004501u, 0x00005833u, 0x00050050u, 0x0000005fu, 0x000048a6u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000048a7u, 0x000048a6u, 0x0003003eu, 0x00006a40u, 0x000044aeu, 0x0003003eu, 0x00006a41u, 0x000044b1u, 0x0003003eu, 0x000045d2u, 0x000020eau, 0x0003003eu, 0x000045d3u, 0x000048a7u, 0x00050041u, 0x00000007u, 0x0000583du, 0x000045d3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000583eu, 0x0000583du, 0x00050084u, 0x00000006u, 0x0000583fu, 0x000044b1u, 0x0000583eu, 0x00050080u, 0x00000006u, 0x00005840u, 0x000044aeu, 0x0000583fu, 0x0003003eu, 0x00005834u, 0x00005840u, 0x00050041u, 0x00000007u, 0x00005841u, 0x000045d3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005842u, 0x00005841u, 0x00050084u, 0x00000006u, 0x00005843u, 0x00005842u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005845u, 0x00005840u, 0x00005843u, 0x0003003eu, 0x00005834u, 0x00005845u, 0x000500c7u, 0x00000006u, 0x00005847u, 0x00005845u, 0x00000e4bu, 0x0003003eu, 0x00005834u, 0x00005847u, 0x000500c2u, 0x00000006u, 0x00005849u, 0x00005847u, 0x00000212u, 0x0003003eu, 0x00005835u, 0x00005849u, 0x0004003du, 0x00000006u, 0x0000584bu, 0x0000583du, 0x000500c7u, 0x00000006u, 0x0000584cu, 0x0000584bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000584du, 0x0000584cu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000584fu, 0x00005849u, 0x0000584du, 0x0003003eu, 0x00005835u, 0x0000584fu, 0x000500c6u, 0x00000006u, 0x00005851u, 0x0000584fu, 0x00000485u, 0x0003003eu, 0x00005835u, 0x00005851u, 0x00080041u, 0x00000270u, 0x00005854u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005851u, 0x0004003du, 0x0000022bu, 0x00005855u, 0x00005854u, 0x00040071u, 0x00000006u, 0x00005856u, 0x00005855u, 0x0003003eu, 0x00005836u, 0x00005856u, 0x0003003eu, 0x00005837u, 0x00005856u, 0x000500c2u, 0x00000006u, 0x0000585du, 0x00005856u, 0x0000025eu, 0x0003003eu, 0x00005859u, 0x0000585du, 0x000500c7u, 0x00000006u, 0x0000585fu, 0x00005856u, 0x000006c2u, 0x0003003eu, 0x0000585au, 0x0000585fu, 0x0004007cu, 0x00000008u, 0x00005861u, 0x0000585du, 0x0004007cu, 0x00000008u, 0x00005867u, 0x0000585fu, 0x00070050u, 0x00000009u, 0x00005868u, 0x00005861u, 0x00005861u, 0x00005861u, 0x00005867u, 0x0003003eu, 0x0000585bu, 0x00005868u, 0x0003003eu, 0x00005838u, 0x00005868u, 0x0003003eu, 0x00004509u, 0x00005868u, 0x000200f9u, 0x0000489bu, 0x000200f8u, 0x0000489bu, 0x000700f5u, 0x00000009u, 0x00009b16u, 0x00009a59u, 0x00004853u, 0x00005868u, 0x0000489cu, 0x000700f5u, 0x00000009u, 0x0000994au, 0x0000988au, 0x00004853u, 0x00005833u, 0x0000489cu, 0x000300f7u, 0x000048acu, 0x00000000u, 0x000400fau, 0x0000466du, 0x000048adu, 0x000048acu, 0x000200f8u, 0x000048adu, 0x00050050u, 0x0000005fu, 0x000048b0u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000048b1u, 0x000048b0u, 0x0003003eu, 0x00006a44u, 0x000044aeu, 0x0003003eu, 0x00006a45u, 0x000044b1u, 0x0003003eu, 0x000045d5u, 0x000020eau, 0x0003003eu, 0x000045d6u, 0x000048b1u, 0x00050041u, 0x00000007u, 0x00005872u, 0x000045d6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005873u, 0x00005872u, 0x00050084u, 0x00000006u, 0x00005874u, 0x000044b1u, 0x00005873u, 0x00050080u, 0x00000006u, 0x00005875u, 0x000044aeu, 0x00005874u, 0x0003003eu, 0x00005869u, 0x00005875u, 0x00050041u, 0x00000007u, 0x00005876u, 0x000045d6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005877u, 0x00005876u, 0x00050084u, 0x00000006u, 0x00005878u, 0x00005877u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000587au, 0x00005875u, 0x00005878u, 0x0003003eu, 0x00005869u, 0x0000587au, 0x000500c7u, 0x00000006u, 0x0000587cu, 0x0000587au, 0x00000e4bu, 0x0003003eu, 0x00005869u, 0x0000587cu, 0x000500c2u, 0x00000006u, 0x0000587eu, 0x0000587cu, 0x00000212u, 0x0003003eu, 0x0000586au, 0x0000587eu, 0x0004003du, 0x00000006u, 0x00005880u, 0x00005872u, 0x000500c7u, 0x00000006u, 0x00005881u, 0x00005880u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005882u, 0x00005881u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005884u, 0x0000587eu, 0x00005882u, 0x0003003eu, 0x0000586au, 0x00005884u, 0x000500c6u, 0x00000006u, 0x00005886u, 0x00005884u, 0x00000485u, 0x0003003eu, 0x0000586au, 0x00005886u, 0x00080041u, 0x00000270u, 0x00005889u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005886u, 0x0004003du, 0x0000022bu, 0x0000588au, 0x00005889u, 0x00040071u, 0x00000006u, 0x0000588bu, 0x0000588au, 0x0003003eu, 0x0000586bu, 0x0000588bu, 0x0003003eu, 0x0000586cu, 0x0000588bu, 0x000500c2u, 0x00000006u, 0x00005892u, 0x0000588bu, 0x0000025eu, 0x0003003eu, 0x0000588eu, 0x00005892u, 0x000500c7u, 0x00000006u, 0x00005894u, 0x0000588bu, 0x000006c2u, 0x0003003eu, 0x0000588fu, 0x00005894u, 0x0004007cu, 0x00000008u, 0x00005896u, 0x00005892u, 0x0004007cu, 0x00000008u, 0x0000589cu, 0x00005894u, 0x00070050u, 0x00000009u, 0x0000589du, 0x00005896u, 0x00005896u, 0x00005896u, 0x0000589cu, 0x0003003eu, 0x00005890u, 0x0000589du, 0x0003003eu, 0x0000586du, 0x0000589du, 0x0003003eu, 0x00004511u, 0x0000589du, 0x000200f9u, 0x000048acu, 0x000200f8u, 0x000048acu, 0x000700f5u, 0x00000009u, 0x00009bfcu, 0x00009b3du, 0x0000489bu, 0x0000589du, 0x000048adu, 0x000200f9u, 0x00004850u, 0x000200f8u, 0x00004852u, 0x0004007cu, 0x000000a2u, 0x00004876u, 0x000094feu, 0x0003003eu, 0x00006a28u, 0x000044aeu, 0x0003003eu, 0x00006a29u, 0x000044b1u, 0x0003003eu, 0x000045c0u, 0x000020eau, 0x0003003eu, 0x000045c1u, 0x00004876u, 0x00050041u, 0x00000007u, 0x000056f8u, 0x000045c1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000056f9u, 0x000056f8u, 0x00050084u, 0x00000006u, 0x000056fau, 0x000044b1u, 0x000056f9u, 0x00050080u, 0x00000006u, 0x000056fbu, 0x000044aeu, 0x000056fau, 0x0003003eu, 0x000056eeu, 0x000056fbu, 0x00050041u, 0x00000007u, 0x000056fcu, 0x000045c1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000056fdu, 0x000056fcu, 0x00050080u, 0x00000006u, 0x000056ffu, 0x000056fbu, 0x000056fdu, 0x0003003eu, 0x000056eeu, 0x000056ffu, 0x000500c7u, 0x00000006u, 0x00005701u, 0x000056ffu, 0x00000e4bu, 0x0003003eu, 0x000056eeu, 0x00005701u, 0x0003003eu, 0x000056efu, 0x00005701u, 0x0004003du, 0x00000006u, 0x00005704u, 0x000056f8u, 0x000500c7u, 0x00000006u, 0x00005705u, 0x00005704u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005706u, 0x00005705u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005708u, 0x00005701u, 0x00005706u, 0x0003003eu, 0x000056efu, 0x00005708u, 0x000500c6u, 0x00000006u, 0x0000570au, 0x00005708u, 0x0000048bu, 0x0003003eu, 0x000056efu, 0x0000570au, 0x00080041u, 0x00000277u, 0x0000570du, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000570au, 0x0004003du, 0x00000229u, 0x0000570eu, 0x0000570du, 0x00040071u, 0x00000006u, 0x0000570fu, 0x0000570eu, 0x0003003eu, 0x000056f0u, 0x0000570fu, 0x000500c2u, 0x00000006u, 0x00005711u, 0x0000570fu, 0x0000021bu, 0x0003003eu, 0x000056f1u, 0x00005711u, 0x000500c7u, 0x00000006u, 0x00005713u, 0x0000570fu, 0x00000e6eu, 0x0003003eu, 0x000056f2u, 0x00005713u, 0x000500c4u, 0x00000006u, 0x00005715u, 0x00005713u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005717u, 0x00005713u, 0x00005715u, 0x0003003eu, 0x000056f2u, 0x00005717u, 0x000500c4u, 0x00000006u, 0x00005719u, 0x00005711u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000571bu, 0x00005711u, 0x00005719u, 0x0003003eu, 0x000056f1u, 0x0000571bu, 0x0004007cu, 0x00000008u, 0x0000571du, 0x0000571bu, 0x0004007cu, 0x00000008u, 0x00005723u, 0x00005717u, 0x00070050u, 0x00000009u, 0x00005724u, 0x0000571du, 0x0000571du, 0x0000571du, 0x00005723u, 0x0003003eu, 0x000056f3u, 0x00005724u, 0x0003003eu, 0x000044f9u, 0x00005724u, 0x000300f7u, 0x0000487bu, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000487cu, 0x0000487bu, 0x000200f8u, 0x0000487cu, 0x00050050u, 0x0000005fu, 0x0000487fu, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004880u, 0x0000487fu, 0x0003003eu, 0x00006a2cu, 0x000044aeu, 0x0003003eu, 0x00006a2du, 0x000044b1u, 0x0003003eu, 0x000045c3u, 0x000020eau, 0x0003003eu, 0x000045c4u, 0x00004880u, 0x00050041u, 0x00000007u, 0x0000572fu, 0x000045c4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005730u, 0x0000572fu, 0x00050084u, 0x00000006u, 0x00005731u, 0x000044b1u, 0x00005730u, 0x00050080u, 0x00000006u, 0x00005732u, 0x000044aeu, 0x00005731u, 0x0003003eu, 0x00005725u, 0x00005732u, 0x00050041u, 0x00000007u, 0x00005733u, 0x000045c4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005734u, 0x00005733u, 0x00050080u, 0x00000006u, 0x00005736u, 0x00005732u, 0x00005734u, 0x0003003eu, 0x00005725u, 0x00005736u, 0x000500c7u, 0x00000006u, 0x00005738u, 0x00005736u, 0x00000e4bu, 0x0003003eu, 0x00005725u, 0x00005738u, 0x0003003eu, 0x00005726u, 0x00005738u, 0x0004003du, 0x00000006u, 0x0000573bu, 0x0000572fu, 0x000500c7u, 0x00000006u, 0x0000573cu, 0x0000573bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000573du, 0x0000573cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000573fu, 0x00005738u, 0x0000573du, 0x0003003eu, 0x00005726u, 0x0000573fu, 0x000500c6u, 0x00000006u, 0x00005741u, 0x0000573fu, 0x0000048bu, 0x0003003eu, 0x00005726u, 0x00005741u, 0x00080041u, 0x00000277u, 0x00005744u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005741u, 0x0004003du, 0x00000229u, 0x00005745u, 0x00005744u, 0x00040071u, 0x00000006u, 0x00005746u, 0x00005745u, 0x0003003eu, 0x00005727u, 0x00005746u, 0x000500c2u, 0x00000006u, 0x00005748u, 0x00005746u, 0x0000021bu, 0x0003003eu, 0x00005728u, 0x00005748u, 0x000500c7u, 0x00000006u, 0x0000574au, 0x00005746u, 0x00000e6eu, 0x0003003eu, 0x00005729u, 0x0000574au, 0x000500c4u, 0x00000006u, 0x0000574cu, 0x0000574au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000574eu, 0x0000574au, 0x0000574cu, 0x0003003eu, 0x00005729u, 0x0000574eu, 0x000500c4u, 0x00000006u, 0x00005750u, 0x00005748u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005752u, 0x00005748u, 0x00005750u, 0x0003003eu, 0x00005728u, 0x00005752u, 0x0004007cu, 0x00000008u, 0x00005754u, 0x00005752u, 0x0004007cu, 0x00000008u, 0x0000575au, 0x0000574eu, 0x00070050u, 0x00000009u, 0x0000575bu, 0x00005754u, 0x00005754u, 0x00005754u, 0x0000575au, 0x0003003eu, 0x0000572au, 0x0000575bu, 0x0003003eu, 0x00004501u, 0x0000575bu, 0x00050050u, 0x0000005fu, 0x00004886u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004887u, 0x00004886u, 0x0003003eu, 0x00006a30u, 0x000044aeu, 0x0003003eu, 0x00006a31u, 0x000044b1u, 0x0003003eu, 0x000045c6u, 0x000020eau, 0x0003003eu, 0x000045c7u, 0x00004887u, 0x00050041u, 0x00000007u, 0x00005766u, 0x000045c7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005767u, 0x00005766u, 0x00050084u, 0x00000006u, 0x00005768u, 0x000044b1u, 0x00005767u, 0x00050080u, 0x00000006u, 0x00005769u, 0x000044aeu, 0x00005768u, 0x0003003eu, 0x0000575cu, 0x00005769u, 0x00050041u, 0x00000007u, 0x0000576au, 0x000045c7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000576bu, 0x0000576au, 0x00050080u, 0x00000006u, 0x0000576du, 0x00005769u, 0x0000576bu, 0x0003003eu, 0x0000575cu, 0x0000576du, 0x000500c7u, 0x00000006u, 0x0000576fu, 0x0000576du, 0x00000e4bu, 0x0003003eu, 0x0000575cu, 0x0000576fu, 0x0003003eu, 0x0000575du, 0x0000576fu, 0x0004003du, 0x00000006u, 0x00005772u, 0x00005766u, 0x000500c7u, 0x00000006u, 0x00005773u, 0x00005772u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005774u, 0x00005773u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005776u, 0x0000576fu, 0x00005774u, 0x0003003eu, 0x0000575du, 0x00005776u, 0x000500c6u, 0x00000006u, 0x00005778u, 0x00005776u, 0x0000048bu, 0x0003003eu, 0x0000575du, 0x00005778u, 0x00080041u, 0x00000277u, 0x0000577bu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005778u, 0x0004003du, 0x00000229u, 0x0000577cu, 0x0000577bu, 0x00040071u, 0x00000006u, 0x0000577du, 0x0000577cu, 0x0003003eu, 0x0000575eu, 0x0000577du, 0x000500c2u, 0x00000006u, 0x0000577fu, 0x0000577du, 0x0000021bu, 0x0003003eu, 0x0000575fu, 0x0000577fu, 0x000500c7u, 0x00000006u, 0x00005781u, 0x0000577du, 0x00000e6eu, 0x0003003eu, 0x00005760u, 0x00005781u, 0x000500c4u, 0x00000006u, 0x00005783u, 0x00005781u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005785u, 0x00005781u, 0x00005783u, 0x0003003eu, 0x00005760u, 0x00005785u, 0x000500c4u, 0x00000006u, 0x00005787u, 0x0000577fu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005789u, 0x0000577fu, 0x00005787u, 0x0003003eu, 0x0000575fu, 0x00005789u, 0x0004007cu, 0x00000008u, 0x0000578bu, 0x00005789u, 0x0004007cu, 0x00000008u, 0x00005791u, 0x00005785u, 0x00070050u, 0x00000009u, 0x00005792u, 0x0000578bu, 0x0000578bu, 0x0000578bu, 0x00005791u, 0x0003003eu, 0x00005761u, 0x00005792u, 0x0003003eu, 0x00004509u, 0x00005792u, 0x000200f9u, 0x0000487bu, 0x000200f8u, 0x0000487bu, 0x000700f5u, 0x00000009u, 0x00009b14u, 0x00009a59u, 0x00004852u, 0x00005792u, 0x0000487cu, 0x000700f5u, 0x00000009u, 0x00009948u, 0x0000988au, 0x00004852u, 0x0000575bu, 0x0000487cu, 0x000300f7u, 0x0000488cu, 0x00000000u, 0x000400fau, 0x0000466du, 0x0000488du, 0x0000488cu, 0x000200f8u, 0x0000488du, 0x00050050u, 0x0000005fu, 0x00004890u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004891u, 0x00004890u, 0x0003003eu, 0x00006a34u, 0x000044aeu, 0x0003003eu, 0x00006a35u, 0x000044b1u, 0x0003003eu, 0x000045c9u, 0x000020eau, 0x0003003eu, 0x000045cau, 0x00004891u, 0x00050041u, 0x00000007u, 0x0000579du, 0x000045cau, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000579eu, 0x0000579du, 0x00050084u, 0x00000006u, 0x0000579fu, 0x000044b1u, 0x0000579eu, 0x00050080u, 0x00000006u, 0x000057a0u, 0x000044aeu, 0x0000579fu, 0x0003003eu, 0x00005793u, 0x000057a0u, 0x00050041u, 0x00000007u, 0x000057a1u, 0x000045cau, 0x00000374u, 0x0004003du, 0x00000006u, 0x000057a2u, 0x000057a1u, 0x00050080u, 0x00000006u, 0x000057a4u, 0x000057a0u, 0x000057a2u, 0x0003003eu, 0x00005793u, 0x000057a4u, 0x000500c7u, 0x00000006u, 0x000057a6u, 0x000057a4u, 0x00000e4bu, 0x0003003eu, 0x00005793u, 0x000057a6u, 0x0003003eu, 0x00005794u, 0x000057a6u, 0x0004003du, 0x00000006u, 0x000057a9u, 0x0000579du, 0x000500c7u, 0x00000006u, 0x000057aau, 0x000057a9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000057abu, 0x000057aau, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000057adu, 0x000057a6u, 0x000057abu, 0x0003003eu, 0x00005794u, 0x000057adu, 0x000500c6u, 0x00000006u, 0x000057afu, 0x000057adu, 0x0000048bu, 0x0003003eu, 0x00005794u, 0x000057afu, 0x00080041u, 0x00000277u, 0x000057b2u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000057afu, 0x0004003du, 0x00000229u, 0x000057b3u, 0x000057b2u, 0x00040071u, 0x00000006u, 0x000057b4u, 0x000057b3u, 0x0003003eu, 0x00005795u, 0x000057b4u, 0x000500c2u, 0x00000006u, 0x000057b6u, 0x000057b4u, 0x0000021bu, 0x0003003eu, 0x00005796u, 0x000057b6u, 0x000500c7u, 0x00000006u, 0x000057b8u, 0x000057b4u, 0x00000e6eu, 0x0003003eu, 0x00005797u, 0x000057b8u, 0x000500c4u, 0x00000006u, 0x000057bau, 0x000057b8u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000057bcu, 0x000057b8u, 0x000057bau, 0x0003003eu, 0x00005797u, 0x000057bcu, 0x000500c4u, 0x00000006u, 0x000057beu, 0x000057b6u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000057c0u, 0x000057b6u, 0x000057beu, 0x0003003eu, 0x00005796u, 0x000057c0u, 0x0004007cu, 0x00000008u, 0x000057c2u, 0x000057c0u, 0x0004007cu, 0x00000008u, 0x000057c8u, 0x000057bcu, 0x00070050u, 0x00000009u, 0x000057c9u, 0x000057c2u, 0x000057c2u, 0x000057c2u, 0x000057c8u, 0x0003003eu, 0x00005798u, 0x000057c9u, 0x0003003eu, 0x00004511u, 0x000057c9u, 0x000200f9u, 0x0000488cu, 0x000200f8u, 0x0000488cu, 0x000700f5u, 0x00000009u, 0x00009bfau, 0x00009b3du, 0x0000487bu, 0x000057c9u, 0x0000488du, 0x000200f9u, 0x00004850u, 0x000200f8u, 0x00004851u, 0x0004007cu, 0x000000a2u, 0x00004856u, 0x000094feu, 0x0003003eu, 0x00006a18u, 0x000044aeu, 0x0003003eu, 0x00006a19u, 0x000044b1u, 0x0003003eu, 0x000045b4u, 0x000020eau, 0x0003003eu, 0x000045b5u, 0x00004856u, 0x00050041u, 0x00000007u, 0x000055f4u, 0x000045b5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000055f5u, 0x000055f4u, 0x00050084u, 0x00000006u, 0x000055f6u, 0x000044b1u, 0x000055f5u, 0x00050080u, 0x00000006u, 0x000055f7u, 0x000044aeu, 0x000055f6u, 0x0003003eu, 0x000055eau, 0x000055f7u, 0x00050041u, 0x00000007u, 0x000055f8u, 0x000045b5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000055f9u, 0x000055f8u, 0x000500c2u, 0x00000006u, 0x000055fau, 0x000055f9u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000055fcu, 0x000055f7u, 0x000055fau, 0x0003003eu, 0x000055eau, 0x000055fcu, 0x000500c7u, 0x00000006u, 0x000055feu, 0x000055fcu, 0x00000e4bu, 0x0003003eu, 0x000055eau, 0x000055feu, 0x0004003du, 0x00000006u, 0x00005600u, 0x000055f8u, 0x000400c8u, 0x00000006u, 0x00005601u, 0x00005600u, 0x000500c7u, 0x00000006u, 0x00005602u, 0x00005601u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005603u, 0x00005602u, 0x00000701u, 0x0003003eu, 0x000055ebu, 0x00005603u, 0x0003003eu, 0x000055ecu, 0x000055feu, 0x0004003du, 0x00000006u, 0x00005606u, 0x000055f4u, 0x000500c7u, 0x00000006u, 0x00005607u, 0x00005606u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005608u, 0x00005607u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000560au, 0x000055feu, 0x00005608u, 0x0003003eu, 0x000055ecu, 0x0000560au, 0x000500c6u, 0x00000006u, 0x0000560cu, 0x0000560au, 0x0000048bu, 0x0003003eu, 0x000055ecu, 0x0000560cu, 0x00080041u, 0x00000277u, 0x0000560fu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000560cu, 0x0004003du, 0x00000229u, 0x00005610u, 0x0000560fu, 0x00040071u, 0x00000006u, 0x00005611u, 0x00005610u, 0x0003003eu, 0x000055edu, 0x00005611u, 0x000500c2u, 0x00000006u, 0x00005614u, 0x00005611u, 0x00005603u, 0x000500c7u, 0x00000006u, 0x00005615u, 0x00005614u, 0x00000e6eu, 0x0003003eu, 0x000055edu, 0x00005615u, 0x000500c7u, 0x00000006u, 0x00005617u, 0x00005615u, 0x00000ea5u, 0x0003003eu, 0x000055eeu, 0x00005617u, 0x000500c4u, 0x00000006u, 0x00005619u, 0x00005617u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x0000561bu, 0x00005617u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x0000561cu, 0x00005619u, 0x0000561bu, 0x000500c2u, 0x00000006u, 0x0000561eu, 0x00005617u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x0000561fu, 0x0000561cu, 0x0000561eu, 0x0003003eu, 0x000055eeu, 0x0000561fu, 0x0004007cu, 0x00000008u, 0x00005621u, 0x0000561fu, 0x000500c7u, 0x00000006u, 0x00005627u, 0x00005615u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005628u, 0x00005627u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005629u, 0x00005628u, 0x00070050u, 0x00000009u, 0x0000562au, 0x00005621u, 0x00005621u, 0x00005621u, 0x00005629u, 0x0003003eu, 0x000055efu, 0x0000562au, 0x0003003eu, 0x000044f9u, 0x0000562au, 0x000300f7u, 0x0000485bu, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000485cu, 0x0000485bu, 0x000200f8u, 0x0000485cu, 0x00050050u, 0x0000005fu, 0x0000485fu, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004860u, 0x0000485fu, 0x0003003eu, 0x00006a1cu, 0x000044aeu, 0x0003003eu, 0x00006a1du, 0x000044b1u, 0x0003003eu, 0x000045b7u, 0x000020eau, 0x0003003eu, 0x000045b8u, 0x00004860u, 0x00050041u, 0x00000007u, 0x00005635u, 0x000045b8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005636u, 0x00005635u, 0x00050084u, 0x00000006u, 0x00005637u, 0x000044b1u, 0x00005636u, 0x00050080u, 0x00000006u, 0x00005638u, 0x000044aeu, 0x00005637u, 0x0003003eu, 0x0000562bu, 0x00005638u, 0x00050041u, 0x00000007u, 0x00005639u, 0x000045b8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000563au, 0x00005639u, 0x000500c2u, 0x00000006u, 0x0000563bu, 0x0000563au, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000563du, 0x00005638u, 0x0000563bu, 0x0003003eu, 0x0000562bu, 0x0000563du, 0x000500c7u, 0x00000006u, 0x0000563fu, 0x0000563du, 0x00000e4bu, 0x0003003eu, 0x0000562bu, 0x0000563fu, 0x0004003du, 0x00000006u, 0x00005641u, 0x00005639u, 0x000400c8u, 0x00000006u, 0x00005642u, 0x00005641u, 0x000500c7u, 0x00000006u, 0x00005643u, 0x00005642u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005644u, 0x00005643u, 0x00000701u, 0x0003003eu, 0x0000562cu, 0x00005644u, 0x0003003eu, 0x0000562du, 0x0000563fu, 0x0004003du, 0x00000006u, 0x00005647u, 0x00005635u, 0x000500c7u, 0x00000006u, 0x00005648u, 0x00005647u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005649u, 0x00005648u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000564bu, 0x0000563fu, 0x00005649u, 0x0003003eu, 0x0000562du, 0x0000564bu, 0x000500c6u, 0x00000006u, 0x0000564du, 0x0000564bu, 0x0000048bu, 0x0003003eu, 0x0000562du, 0x0000564du, 0x00080041u, 0x00000277u, 0x00005650u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000564du, 0x0004003du, 0x00000229u, 0x00005651u, 0x00005650u, 0x00040071u, 0x00000006u, 0x00005652u, 0x00005651u, 0x0003003eu, 0x0000562eu, 0x00005652u, 0x000500c2u, 0x00000006u, 0x00005655u, 0x00005652u, 0x00005644u, 0x000500c7u, 0x00000006u, 0x00005656u, 0x00005655u, 0x00000e6eu, 0x0003003eu, 0x0000562eu, 0x00005656u, 0x000500c7u, 0x00000006u, 0x00005658u, 0x00005656u, 0x00000ea5u, 0x0003003eu, 0x0000562fu, 0x00005658u, 0x000500c4u, 0x00000006u, 0x0000565au, 0x00005658u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x0000565cu, 0x00005658u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x0000565du, 0x0000565au, 0x0000565cu, 0x000500c2u, 0x00000006u, 0x0000565fu, 0x00005658u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00005660u, 0x0000565du, 0x0000565fu, 0x0003003eu, 0x0000562fu, 0x00005660u, 0x0004007cu, 0x00000008u, 0x00005662u, 0x00005660u, 0x000500c7u, 0x00000006u, 0x00005668u, 0x00005656u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005669u, 0x00005668u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000566au, 0x00005669u, 0x00070050u, 0x00000009u, 0x0000566bu, 0x00005662u, 0x00005662u, 0x00005662u, 0x0000566au, 0x0003003eu, 0x00005630u, 0x0000566bu, 0x0003003eu, 0x00004501u, 0x0000566bu, 0x00050050u, 0x0000005fu, 0x00004866u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004867u, 0x00004866u, 0x0003003eu, 0x00006a20u, 0x000044aeu, 0x0003003eu, 0x00006a21u, 0x000044b1u, 0x0003003eu, 0x000045bau, 0x000020eau, 0x0003003eu, 0x000045bbu, 0x00004867u, 0x00050041u, 0x00000007u, 0x00005676u, 0x000045bbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005677u, 0x00005676u, 0x00050084u, 0x00000006u, 0x00005678u, 0x000044b1u, 0x00005677u, 0x00050080u, 0x00000006u, 0x00005679u, 0x000044aeu, 0x00005678u, 0x0003003eu, 0x0000566cu, 0x00005679u, 0x00050041u, 0x00000007u, 0x0000567au, 0x000045bbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000567bu, 0x0000567au, 0x000500c2u, 0x00000006u, 0x0000567cu, 0x0000567bu, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000567eu, 0x00005679u, 0x0000567cu, 0x0003003eu, 0x0000566cu, 0x0000567eu, 0x000500c7u, 0x00000006u, 0x00005680u, 0x0000567eu, 0x00000e4bu, 0x0003003eu, 0x0000566cu, 0x00005680u, 0x0004003du, 0x00000006u, 0x00005682u, 0x0000567au, 0x000400c8u, 0x00000006u, 0x00005683u, 0x00005682u, 0x000500c7u, 0x00000006u, 0x00005684u, 0x00005683u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005685u, 0x00005684u, 0x00000701u, 0x0003003eu, 0x0000566du, 0x00005685u, 0x0003003eu, 0x0000566eu, 0x00005680u, 0x0004003du, 0x00000006u, 0x00005688u, 0x00005676u, 0x000500c7u, 0x00000006u, 0x00005689u, 0x00005688u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000568au, 0x00005689u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000568cu, 0x00005680u, 0x0000568au, 0x0003003eu, 0x0000566eu, 0x0000568cu, 0x000500c6u, 0x00000006u, 0x0000568eu, 0x0000568cu, 0x0000048bu, 0x0003003eu, 0x0000566eu, 0x0000568eu, 0x00080041u, 0x00000277u, 0x00005691u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000568eu, 0x0004003du, 0x00000229u, 0x00005692u, 0x00005691u, 0x00040071u, 0x00000006u, 0x00005693u, 0x00005692u, 0x0003003eu, 0x0000566fu, 0x00005693u, 0x000500c2u, 0x00000006u, 0x00005696u, 0x00005693u, 0x00005685u, 0x000500c7u, 0x00000006u, 0x00005697u, 0x00005696u, 0x00000e6eu, 0x0003003eu, 0x0000566fu, 0x00005697u, 0x000500c7u, 0x00000006u, 0x00005699u, 0x00005697u, 0x00000ea5u, 0x0003003eu, 0x00005670u, 0x00005699u, 0x000500c4u, 0x00000006u, 0x0000569bu, 0x00005699u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x0000569du, 0x00005699u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x0000569eu, 0x0000569bu, 0x0000569du, 0x000500c2u, 0x00000006u, 0x000056a0u, 0x00005699u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x000056a1u, 0x0000569eu, 0x000056a0u, 0x0003003eu, 0x00005670u, 0x000056a1u, 0x0004007cu, 0x00000008u, 0x000056a3u, 0x000056a1u, 0x000500c7u, 0x00000006u, 0x000056a9u, 0x00005697u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000056aau, 0x000056a9u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000056abu, 0x000056aau, 0x00070050u, 0x00000009u, 0x000056acu, 0x000056a3u, 0x000056a3u, 0x000056a3u, 0x000056abu, 0x0003003eu, 0x00005671u, 0x000056acu, 0x0003003eu, 0x00004509u, 0x000056acu, 0x000200f9u, 0x0000485bu, 0x000200f8u, 0x0000485bu, 0x000700f5u, 0x00000009u, 0x00009b12u, 0x00009a59u, 0x00004851u, 0x000056acu, 0x0000485cu, 0x000700f5u, 0x00000009u, 0x00009946u, 0x0000988au, 0x00004851u, 0x0000566bu, 0x0000485cu, 0x000300f7u, 0x0000486cu, 0x00000000u, 0x000400fau, 0x0000466du, 0x0000486du, 0x0000486cu, 0x000200f8u, 0x0000486du, 0x00050050u, 0x0000005fu, 0x00004870u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004871u, 0x00004870u, 0x0003003eu, 0x00006a24u, 0x000044aeu, 0x0003003eu, 0x00006a25u, 0x000044b1u, 0x0003003eu, 0x000045bdu, 0x000020eau, 0x0003003eu, 0x000045beu, 0x00004871u, 0x00050041u, 0x00000007u, 0x000056b7u, 0x000045beu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000056b8u, 0x000056b7u, 0x00050084u, 0x00000006u, 0x000056b9u, 0x000044b1u, 0x000056b8u, 0x00050080u, 0x00000006u, 0x000056bau, 0x000044aeu, 0x000056b9u, 0x0003003eu, 0x000056adu, 0x000056bau, 0x00050041u, 0x00000007u, 0x000056bbu, 0x000045beu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000056bcu, 0x000056bbu, 0x000500c2u, 0x00000006u, 0x000056bdu, 0x000056bcu, 0x00000212u, 0x00050080u, 0x00000006u, 0x000056bfu, 0x000056bau, 0x000056bdu, 0x0003003eu, 0x000056adu, 0x000056bfu, 0x000500c7u, 0x00000006u, 0x000056c1u, 0x000056bfu, 0x00000e4bu, 0x0003003eu, 0x000056adu, 0x000056c1u, 0x0004003du, 0x00000006u, 0x000056c3u, 0x000056bbu, 0x000400c8u, 0x00000006u, 0x000056c4u, 0x000056c3u, 0x000500c7u, 0x00000006u, 0x000056c5u, 0x000056c4u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000056c6u, 0x000056c5u, 0x00000701u, 0x0003003eu, 0x000056aeu, 0x000056c6u, 0x0003003eu, 0x000056afu, 0x000056c1u, 0x0004003du, 0x00000006u, 0x000056c9u, 0x000056b7u, 0x000500c7u, 0x00000006u, 0x000056cau, 0x000056c9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000056cbu, 0x000056cau, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000056cdu, 0x000056c1u, 0x000056cbu, 0x0003003eu, 0x000056afu, 0x000056cdu, 0x000500c6u, 0x00000006u, 0x000056cfu, 0x000056cdu, 0x0000048bu, 0x0003003eu, 0x000056afu, 0x000056cfu, 0x00080041u, 0x00000277u, 0x000056d2u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000056cfu, 0x0004003du, 0x00000229u, 0x000056d3u, 0x000056d2u, 0x00040071u, 0x00000006u, 0x000056d4u, 0x000056d3u, 0x0003003eu, 0x000056b0u, 0x000056d4u, 0x000500c2u, 0x00000006u, 0x000056d7u, 0x000056d4u, 0x000056c6u, 0x000500c7u, 0x00000006u, 0x000056d8u, 0x000056d7u, 0x00000e6eu, 0x0003003eu, 0x000056b0u, 0x000056d8u, 0x000500c7u, 0x00000006u, 0x000056dau, 0x000056d8u, 0x00000ea5u, 0x0003003eu, 0x000056b1u, 0x000056dau, 0x000500c4u, 0x00000006u, 0x000056dcu, 0x000056dau, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x000056deu, 0x000056dau, 0x00000212u, 0x000500c5u, 0x00000006u, 0x000056dfu, 0x000056dcu, 0x000056deu, 0x000500c2u, 0x00000006u, 0x000056e1u, 0x000056dau, 0x00000215u, 0x000500c5u, 0x00000006u, 0x000056e2u, 0x000056dfu, 0x000056e1u, 0x0003003eu, 0x000056b1u, 0x000056e2u, 0x0004007cu, 0x00000008u, 0x000056e4u, 0x000056e2u, 0x000500c7u, 0x00000006u, 0x000056eau, 0x000056d8u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000056ebu, 0x000056eau, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000056ecu, 0x000056ebu, 0x00070050u, 0x00000009u, 0x000056edu, 0x000056e4u, 0x000056e4u, 0x000056e4u, 0x000056ecu, 0x0003003eu, 0x000056b2u, 0x000056edu, 0x0003003eu, 0x00004511u, 0x000056edu, 0x000200f9u, 0x0000486cu, 0x000200f8u, 0x0000486cu, 0x000700f5u, 0x00000009u, 0x00009bf8u, 0x00009b3du, 0x0000485bu, 0x000056edu, 0x0000486du, 0x000200f9u, 0x00004850u, 0x000200f8u, 0x00004850u, 0x000d00f5u, 0x00000009u, 0x00009bf7u, 0x00009b3du, 0x00004726u, 0x00009bf8u, 0x0000486cu, 0x00009bfau, 0x0000488cu, 0x00009bfcu, 0x000048acu, 0x00009bfeu, 0x000048ccu, 0x000d00f5u, 0x00000009u, 0x00009b10u, 0x00009a59u, 0x00004726u, 0x00009b12u, 0x0000486cu, 0x00009b14u, 0x0000488cu, 0x00009b16u, 0x000048acu, 0x00009b18u, 0x000048ccu, 0x000d00f5u, 0x00000009u, 0x00009a2bu, 0x00009972u, 0x00004726u, 0x0000562au, 0x0000486cu, 0x00005724u, 0x0000488cu, 0x000057feu, 0x000048acu, 0x000058c7u, 0x000048ccu, 0x000d00f5u, 0x00000009u, 0x00009944u, 0x0000988au, 0x00004726u, 0x00009946u, 0x0000486cu, 0x00009948u, 0x0000488cu, 0x0000994au, 0x000048acu, 0x0000994cu, 0x000048ccu, 0x000200f9u, 0x00004722u, 0x000200f8u, 0x00004725u, 0x000300f7u, 0x000047deu, 0x00000000u, 0x000700fbu, 0x000044bbu, 0x000047dfu, 0x00000000u, 0x000047e0u, 0x00000001u, 0x000047e1u, 0x000200f8u, 0x000047e1u, 0x0004007cu, 0x000000a2u, 0x0000482fu, 0x000094feu, 0x0003003eu, 0x000069f8u, 0x000044aeu, 0x0003003eu, 0x000069f9u, 0x000044b1u, 0x0003003eu, 0x0000459cu, 0x000020eau, 0x0003003eu, 0x0000459du, 0x0000482fu, 0x00050041u, 0x00000007u, 0x00005566u, 0x0000459du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005567u, 0x00005566u, 0x00050084u, 0x00000006u, 0x00005568u, 0x000044b1u, 0x00005567u, 0x00050080u, 0x00000006u, 0x00005569u, 0x000044aeu, 0x00005568u, 0x0003003eu, 0x0000555eu, 0x00005569u, 0x00050041u, 0x00000007u, 0x0000556au, 0x0000459du, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000556bu, 0x0000556au, 0x00050080u, 0x00000006u, 0x0000556du, 0x00005569u, 0x0000556bu, 0x0003003eu, 0x0000555eu, 0x0000556du, 0x000500c7u, 0x00000006u, 0x0000556fu, 0x0000556du, 0x00000e4bu, 0x0003003eu, 0x0000555eu, 0x0000556fu, 0x0003003eu, 0x0000555fu, 0x0000556fu, 0x0004003du, 0x00000006u, 0x00005572u, 0x00005566u, 0x000500c7u, 0x00000006u, 0x00005573u, 0x00005572u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005574u, 0x00005573u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005576u, 0x0000556fu, 0x00005574u, 0x0003003eu, 0x0000555fu, 0x00005576u, 0x000500c6u, 0x00000006u, 0x00005578u, 0x00005576u, 0x0000048bu, 0x0003003eu, 0x0000555fu, 0x00005578u, 0x00080041u, 0x00000277u, 0x0000557bu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005578u, 0x0004003du, 0x00000229u, 0x0000557cu, 0x0000557bu, 0x00040071u, 0x00000006u, 0x0000557du, 0x0000557cu, 0x0003003eu, 0x00005560u, 0x0000557du, 0x0004007cu, 0x00000008u, 0x0000557fu, 0x0000557du, 0x00070050u, 0x00000009u, 0x00005580u, 0x0000557fu, 0x0000557fu, 0x0000557fu, 0x0000557fu, 0x0003003eu, 0x00005561u, 0x00005580u, 0x0003003eu, 0x000044f9u, 0x00005580u, 0x000300f7u, 0x00004834u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004835u, 0x00004834u, 0x000200f8u, 0x00004835u, 0x00050050u, 0x0000005fu, 0x00004838u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004839u, 0x00004838u, 0x0003003eu, 0x000069fcu, 0x000044aeu, 0x0003003eu, 0x000069fdu, 0x000044b1u, 0x0003003eu, 0x0000459fu, 0x000020eau, 0x0003003eu, 0x000045a0u, 0x00004839u, 0x00050041u, 0x00000007u, 0x00005589u, 0x000045a0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000558au, 0x00005589u, 0x00050084u, 0x00000006u, 0x0000558bu, 0x000044b1u, 0x0000558au, 0x00050080u, 0x00000006u, 0x0000558cu, 0x000044aeu, 0x0000558bu, 0x0003003eu, 0x00005581u, 0x0000558cu, 0x00050041u, 0x00000007u, 0x0000558du, 0x000045a0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000558eu, 0x0000558du, 0x00050080u, 0x00000006u, 0x00005590u, 0x0000558cu, 0x0000558eu, 0x0003003eu, 0x00005581u, 0x00005590u, 0x000500c7u, 0x00000006u, 0x00005592u, 0x00005590u, 0x00000e4bu, 0x0003003eu, 0x00005581u, 0x00005592u, 0x0003003eu, 0x00005582u, 0x00005592u, 0x0004003du, 0x00000006u, 0x00005595u, 0x00005589u, 0x000500c7u, 0x00000006u, 0x00005596u, 0x00005595u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005597u, 0x00005596u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005599u, 0x00005592u, 0x00005597u, 0x0003003eu, 0x00005582u, 0x00005599u, 0x000500c6u, 0x00000006u, 0x0000559bu, 0x00005599u, 0x0000048bu, 0x0003003eu, 0x00005582u, 0x0000559bu, 0x00080041u, 0x00000277u, 0x0000559eu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000559bu, 0x0004003du, 0x00000229u, 0x0000559fu, 0x0000559eu, 0x00040071u, 0x00000006u, 0x000055a0u, 0x0000559fu, 0x0003003eu, 0x00005583u, 0x000055a0u, 0x0004007cu, 0x00000008u, 0x000055a2u, 0x000055a0u, 0x00070050u, 0x00000009u, 0x000055a3u, 0x000055a2u, 0x000055a2u, 0x000055a2u, 0x000055a2u, 0x0003003eu, 0x00005584u, 0x000055a3u, 0x0003003eu, 0x00004501u, 0x000055a3u, 0x00050050u, 0x0000005fu, 0x0000483fu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004840u, 0x0000483fu, 0x0003003eu, 0x00006a00u, 0x000044aeu, 0x0003003eu, 0x00006a01u, 0x000044b1u, 0x0003003eu, 0x000045a2u, 0x000020eau, 0x0003003eu, 0x000045a3u, 0x00004840u, 0x00050041u, 0x00000007u, 0x000055acu, 0x000045a3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000055adu, 0x000055acu, 0x00050084u, 0x00000006u, 0x000055aeu, 0x000044b1u, 0x000055adu, 0x00050080u, 0x00000006u, 0x000055afu, 0x000044aeu, 0x000055aeu, 0x0003003eu, 0x000055a4u, 0x000055afu, 0x00050041u, 0x00000007u, 0x000055b0u, 0x000045a3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000055b1u, 0x000055b0u, 0x00050080u, 0x00000006u, 0x000055b3u, 0x000055afu, 0x000055b1u, 0x0003003eu, 0x000055a4u, 0x000055b3u, 0x000500c7u, 0x00000006u, 0x000055b5u, 0x000055b3u, 0x00000e4bu, 0x0003003eu, 0x000055a4u, 0x000055b5u, 0x0003003eu, 0x000055a5u, 0x000055b5u, 0x0004003du, 0x00000006u, 0x000055b8u, 0x000055acu, 0x000500c7u, 0x00000006u, 0x000055b9u, 0x000055b8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000055bau, 0x000055b9u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000055bcu, 0x000055b5u, 0x000055bau, 0x0003003eu, 0x000055a5u, 0x000055bcu, 0x000500c6u, 0x00000006u, 0x000055beu, 0x000055bcu, 0x0000048bu, 0x0003003eu, 0x000055a5u, 0x000055beu, 0x00080041u, 0x00000277u, 0x000055c1u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000055beu, 0x0004003du, 0x00000229u, 0x000055c2u, 0x000055c1u, 0x00040071u, 0x00000006u, 0x000055c3u, 0x000055c2u, 0x0003003eu, 0x000055a6u, 0x000055c3u, 0x0004007cu, 0x00000008u, 0x000055c5u, 0x000055c3u, 0x00070050u, 0x00000009u, 0x000055c6u, 0x000055c5u, 0x000055c5u, 0x000055c5u, 0x000055c5u, 0x0003003eu, 0x000055a7u, 0x000055c6u, 0x0003003eu, 0x00004509u, 0x000055c6u, 0x000200f9u, 0x00004834u, 0x000200f8u, 0x00004834u, 0x000700f5u, 0x00000009u, 0x00009b0fu, 0x00009a59u, 0x000047e1u, 0x000055c6u, 0x00004835u, 0x000700f5u, 0x00000009u, 0x00009943u, 0x0000988au, 0x000047e1u, 0x000055a3u, 0x00004835u, 0x000300f7u, 0x00004845u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004846u, 0x00004845u, 0x000200f8u, 0x00004846u, 0x00050050u, 0x0000005fu, 0x00004849u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000484au, 0x00004849u, 0x0003003eu, 0x00006a04u, 0x000044aeu, 0x0003003eu, 0x00006a05u, 0x000044b1u, 0x0003003eu, 0x000045a5u, 0x000020eau, 0x0003003eu, 0x000045a6u, 0x0000484au, 0x00050041u, 0x00000007u, 0x000055cfu, 0x000045a6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000055d0u, 0x000055cfu, 0x00050084u, 0x00000006u, 0x000055d1u, 0x000044b1u, 0x000055d0u, 0x00050080u, 0x00000006u, 0x000055d2u, 0x000044aeu, 0x000055d1u, 0x0003003eu, 0x000055c7u, 0x000055d2u, 0x00050041u, 0x00000007u, 0x000055d3u, 0x000045a6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000055d4u, 0x000055d3u, 0x00050080u, 0x00000006u, 0x000055d6u, 0x000055d2u, 0x000055d4u, 0x0003003eu, 0x000055c7u, 0x000055d6u, 0x000500c7u, 0x00000006u, 0x000055d8u, 0x000055d6u, 0x00000e4bu, 0x0003003eu, 0x000055c7u, 0x000055d8u, 0x0003003eu, 0x000055c8u, 0x000055d8u, 0x0004003du, 0x00000006u, 0x000055dbu, 0x000055cfu, 0x000500c7u, 0x00000006u, 0x000055dcu, 0x000055dbu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000055ddu, 0x000055dcu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000055dfu, 0x000055d8u, 0x000055ddu, 0x0003003eu, 0x000055c8u, 0x000055dfu, 0x000500c6u, 0x00000006u, 0x000055e1u, 0x000055dfu, 0x0000048bu, 0x0003003eu, 0x000055c8u, 0x000055e1u, 0x00080041u, 0x00000277u, 0x000055e4u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000055e1u, 0x0004003du, 0x00000229u, 0x000055e5u, 0x000055e4u, 0x00040071u, 0x00000006u, 0x000055e6u, 0x000055e5u, 0x0003003eu, 0x000055c9u, 0x000055e6u, 0x0004007cu, 0x00000008u, 0x000055e8u, 0x000055e6u, 0x00070050u, 0x00000009u, 0x000055e9u, 0x000055e8u, 0x000055e8u, 0x000055e8u, 0x000055e8u, 0x0003003eu, 0x000055cau, 0x000055e9u, 0x0003003eu, 0x00004511u, 0x000055e9u, 0x000200f9u, 0x00004845u, 0x000200f8u, 0x00004845u, 0x000700f5u, 0x00000009u, 0x00009bf5u, 0x00009b3du, 0x00004834u, 0x000055e9u, 0x00004846u, 0x000200f9u, 0x000047deu, 0x000200f8u, 0x000047e0u, 0x0004007cu, 0x000000a2u, 0x00004803u, 0x000094feu, 0x0004007cu, 0x00000006u, 0x00004806u, 0x000044c0u, 0x0003003eu, 0x000069e8u, 0x000044aeu, 0x0003003eu, 0x000069e9u, 0x000044b1u, 0x0003003eu, 0x0000458cu, 0x000020eau, 0x0003003eu, 0x0000458du, 0x00004803u, 0x0003003eu, 0x0000458eu, 0x00004806u, 0x00050041u, 0x00000007u, 0x0000549fu, 0x0000458du, 0x00000485u, 0x0004003du, 0x00000006u, 0x000054a0u, 0x0000549fu, 0x00050084u, 0x00000006u, 0x000054a1u, 0x000044b1u, 0x000054a0u, 0x00050080u, 0x00000006u, 0x000054a2u, 0x000044aeu, 0x000054a1u, 0x0003003eu, 0x00005496u, 0x000054a2u, 0x00050041u, 0x00000007u, 0x000054a3u, 0x0000458du, 0x00000374u, 0x0004003du, 0x00000006u, 0x000054a4u, 0x000054a3u, 0x000500c2u, 0x00000006u, 0x000054a5u, 0x000054a4u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000054a7u, 0x000054a2u, 0x000054a5u, 0x0003003eu, 0x00005496u, 0x000054a7u, 0x000500c7u, 0x00000006u, 0x000054a9u, 0x000054a7u, 0x00000e4bu, 0x0003003eu, 0x00005496u, 0x000054a9u, 0x0004003du, 0x00000006u, 0x000054abu, 0x000054a3u, 0x000400c8u, 0x00000006u, 0x000054acu, 0x000054abu, 0x000500c7u, 0x00000006u, 0x000054adu, 0x000054acu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000054aeu, 0x000054adu, 0x00000701u, 0x0003003eu, 0x00005497u, 0x000054aeu, 0x0003003eu, 0x00005498u, 0x000054a9u, 0x0004003du, 0x00000006u, 0x000054b1u, 0x0000549fu, 0x000500c7u, 0x00000006u, 0x000054b2u, 0x000054b1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000054b3u, 0x000054b2u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000054b5u, 0x000054a9u, 0x000054b3u, 0x0003003eu, 0x00005498u, 0x000054b5u, 0x000500c6u, 0x00000006u, 0x000054b7u, 0x000054b5u, 0x0000048bu, 0x0003003eu, 0x00005498u, 0x000054b7u, 0x00080041u, 0x00000277u, 0x000054bau, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000054b7u, 0x0004003du, 0x00000229u, 0x000054bbu, 0x000054bau, 0x00040071u, 0x00000006u, 0x000054bcu, 0x000054bbu, 0x0003003eu, 0x00005499u, 0x000054bcu, 0x000500c2u, 0x00000006u, 0x000054bfu, 0x000054bcu, 0x000054aeu, 0x000500c7u, 0x00000006u, 0x000054c0u, 0x000054bfu, 0x00000e6eu, 0x0003003eu, 0x00005499u, 0x000054c0u, 0x000500c4u, 0x00000006u, 0x000054c2u, 0x00004806u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000054c4u, 0x000054c0u, 0x000054c2u, 0x0003003eu, 0x00005499u, 0x000054c4u, 0x0004007cu, 0x00000008u, 0x000054c6u, 0x000054c4u, 0x00070050u, 0x00000009u, 0x000054c7u, 0x000054c6u, 0x000054c6u, 0x000054c6u, 0x000054c6u, 0x0003003eu, 0x0000549au, 0x000054c7u, 0x0003003eu, 0x000044f9u, 0x000054c7u, 0x000300f7u, 0x0000480bu, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000480cu, 0x0000480bu, 0x000200f8u, 0x0000480cu, 0x00050050u, 0x0000005fu, 0x0000480fu, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004810u, 0x0000480fu, 0x0003003eu, 0x000069ecu, 0x000044aeu, 0x0003003eu, 0x000069edu, 0x000044b1u, 0x0003003eu, 0x00004590u, 0x000020eau, 0x0003003eu, 0x00004591u, 0x00004810u, 0x0003003eu, 0x00004592u, 0x00004806u, 0x00050041u, 0x00000007u, 0x000054d1u, 0x00004591u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000054d2u, 0x000054d1u, 0x00050084u, 0x00000006u, 0x000054d3u, 0x000044b1u, 0x000054d2u, 0x00050080u, 0x00000006u, 0x000054d4u, 0x000044aeu, 0x000054d3u, 0x0003003eu, 0x000054c8u, 0x000054d4u, 0x00050041u, 0x00000007u, 0x000054d5u, 0x00004591u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000054d6u, 0x000054d5u, 0x000500c2u, 0x00000006u, 0x000054d7u, 0x000054d6u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000054d9u, 0x000054d4u, 0x000054d7u, 0x0003003eu, 0x000054c8u, 0x000054d9u, 0x000500c7u, 0x00000006u, 0x000054dbu, 0x000054d9u, 0x00000e4bu, 0x0003003eu, 0x000054c8u, 0x000054dbu, 0x0004003du, 0x00000006u, 0x000054ddu, 0x000054d5u, 0x000400c8u, 0x00000006u, 0x000054deu, 0x000054ddu, 0x000500c7u, 0x00000006u, 0x000054dfu, 0x000054deu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000054e0u, 0x000054dfu, 0x00000701u, 0x0003003eu, 0x000054c9u, 0x000054e0u, 0x0003003eu, 0x000054cau, 0x000054dbu, 0x0004003du, 0x00000006u, 0x000054e3u, 0x000054d1u, 0x000500c7u, 0x00000006u, 0x000054e4u, 0x000054e3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000054e5u, 0x000054e4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000054e7u, 0x000054dbu, 0x000054e5u, 0x0003003eu, 0x000054cau, 0x000054e7u, 0x000500c6u, 0x00000006u, 0x000054e9u, 0x000054e7u, 0x0000048bu, 0x0003003eu, 0x000054cau, 0x000054e9u, 0x00080041u, 0x00000277u, 0x000054ecu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000054e9u, 0x0004003du, 0x00000229u, 0x000054edu, 0x000054ecu, 0x00040071u, 0x00000006u, 0x000054eeu, 0x000054edu, 0x0003003eu, 0x000054cbu, 0x000054eeu, 0x000500c2u, 0x00000006u, 0x000054f1u, 0x000054eeu, 0x000054e0u, 0x000500c7u, 0x00000006u, 0x000054f2u, 0x000054f1u, 0x00000e6eu, 0x0003003eu, 0x000054cbu, 0x000054f2u, 0x000500c5u, 0x00000006u, 0x000054f6u, 0x000054f2u, 0x000054c2u, 0x0003003eu, 0x000054cbu, 0x000054f6u, 0x0004007cu, 0x00000008u, 0x000054f8u, 0x000054f6u, 0x00070050u, 0x00000009u, 0x000054f9u, 0x000054f8u, 0x000054f8u, 0x000054f8u, 0x000054f8u, 0x0003003eu, 0x000054ccu, 0x000054f9u, 0x0003003eu, 0x00004501u, 0x000054f9u, 0x00050050u, 0x0000005fu, 0x00004819u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000481au, 0x00004819u, 0x0003003eu, 0x000069f0u, 0x000044aeu, 0x0003003eu, 0x000069f1u, 0x000044b1u, 0x0003003eu, 0x00004594u, 0x000020eau, 0x0003003eu, 0x00004595u, 0x0000481au, 0x0003003eu, 0x00004596u, 0x00004806u, 0x00050041u, 0x00000007u, 0x00005503u, 0x00004595u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005504u, 0x00005503u, 0x00050084u, 0x00000006u, 0x00005505u, 0x000044b1u, 0x00005504u, 0x00050080u, 0x00000006u, 0x00005506u, 0x000044aeu, 0x00005505u, 0x0003003eu, 0x000054fau, 0x00005506u, 0x00050041u, 0x00000007u, 0x00005507u, 0x00004595u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005508u, 0x00005507u, 0x000500c2u, 0x00000006u, 0x00005509u, 0x00005508u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000550bu, 0x00005506u, 0x00005509u, 0x0003003eu, 0x000054fau, 0x0000550bu, 0x000500c7u, 0x00000006u, 0x0000550du, 0x0000550bu, 0x00000e4bu, 0x0003003eu, 0x000054fau, 0x0000550du, 0x0004003du, 0x00000006u, 0x0000550fu, 0x00005507u, 0x000400c8u, 0x00000006u, 0x00005510u, 0x0000550fu, 0x000500c7u, 0x00000006u, 0x00005511u, 0x00005510u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005512u, 0x00005511u, 0x00000701u, 0x0003003eu, 0x000054fbu, 0x00005512u, 0x0003003eu, 0x000054fcu, 0x0000550du, 0x0004003du, 0x00000006u, 0x00005515u, 0x00005503u, 0x000500c7u, 0x00000006u, 0x00005516u, 0x00005515u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005517u, 0x00005516u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005519u, 0x0000550du, 0x00005517u, 0x0003003eu, 0x000054fcu, 0x00005519u, 0x000500c6u, 0x00000006u, 0x0000551bu, 0x00005519u, 0x0000048bu, 0x0003003eu, 0x000054fcu, 0x0000551bu, 0x00080041u, 0x00000277u, 0x0000551eu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000551bu, 0x0004003du, 0x00000229u, 0x0000551fu, 0x0000551eu, 0x00040071u, 0x00000006u, 0x00005520u, 0x0000551fu, 0x0003003eu, 0x000054fdu, 0x00005520u, 0x000500c2u, 0x00000006u, 0x00005523u, 0x00005520u, 0x00005512u, 0x000500c7u, 0x00000006u, 0x00005524u, 0x00005523u, 0x00000e6eu, 0x0003003eu, 0x000054fdu, 0x00005524u, 0x000500c5u, 0x00000006u, 0x00005528u, 0x00005524u, 0x000054c2u, 0x0003003eu, 0x000054fdu, 0x00005528u, 0x0004007cu, 0x00000008u, 0x0000552au, 0x00005528u, 0x00070050u, 0x00000009u, 0x0000552bu, 0x0000552au, 0x0000552au, 0x0000552au, 0x0000552au, 0x0003003eu, 0x000054feu, 0x0000552bu, 0x0003003eu, 0x00004509u, 0x0000552bu, 0x000200f9u, 0x0000480bu, 0x000200f8u, 0x0000480bu, 0x000700f5u, 0x00000009u, 0x00009b0du, 0x00009a59u, 0x000047e0u, 0x0000552bu, 0x0000480cu, 0x000700f5u, 0x00000009u, 0x00009941u, 0x0000988au, 0x000047e0u, 0x000054f9u, 0x0000480cu, 0x000300f7u, 0x00004822u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004823u, 0x00004822u, 0x000200f8u, 0x00004823u, 0x00050050u, 0x0000005fu, 0x00004826u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004827u, 0x00004826u, 0x0003003eu, 0x000069f4u, 0x000044aeu, 0x0003003eu, 0x000069f5u, 0x000044b1u, 0x0003003eu, 0x00004598u, 0x000020eau, 0x0003003eu, 0x00004599u, 0x00004827u, 0x0003003eu, 0x0000459au, 0x00004806u, 0x00050041u, 0x00000007u, 0x00005535u, 0x00004599u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005536u, 0x00005535u, 0x00050084u, 0x00000006u, 0x00005537u, 0x000044b1u, 0x00005536u, 0x00050080u, 0x00000006u, 0x00005538u, 0x000044aeu, 0x00005537u, 0x0003003eu, 0x0000552cu, 0x00005538u, 0x00050041u, 0x00000007u, 0x00005539u, 0x00004599u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000553au, 0x00005539u, 0x000500c2u, 0x00000006u, 0x0000553bu, 0x0000553au, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000553du, 0x00005538u, 0x0000553bu, 0x0003003eu, 0x0000552cu, 0x0000553du, 0x000500c7u, 0x00000006u, 0x0000553fu, 0x0000553du, 0x00000e4bu, 0x0003003eu, 0x0000552cu, 0x0000553fu, 0x0004003du, 0x00000006u, 0x00005541u, 0x00005539u, 0x000400c8u, 0x00000006u, 0x00005542u, 0x00005541u, 0x000500c7u, 0x00000006u, 0x00005543u, 0x00005542u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005544u, 0x00005543u, 0x00000701u, 0x0003003eu, 0x0000552du, 0x00005544u, 0x0003003eu, 0x0000552eu, 0x0000553fu, 0x0004003du, 0x00000006u, 0x00005547u, 0x00005535u, 0x000500c7u, 0x00000006u, 0x00005548u, 0x00005547u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005549u, 0x00005548u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000554bu, 0x0000553fu, 0x00005549u, 0x0003003eu, 0x0000552eu, 0x0000554bu, 0x000500c6u, 0x00000006u, 0x0000554du, 0x0000554bu, 0x0000048bu, 0x0003003eu, 0x0000552eu, 0x0000554du, 0x00080041u, 0x00000277u, 0x00005550u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000554du, 0x0004003du, 0x00000229u, 0x00005551u, 0x00005550u, 0x00040071u, 0x00000006u, 0x00005552u, 0x00005551u, 0x0003003eu, 0x0000552fu, 0x00005552u, 0x000500c2u, 0x00000006u, 0x00005555u, 0x00005552u, 0x00005544u, 0x000500c7u, 0x00000006u, 0x00005556u, 0x00005555u, 0x00000e6eu, 0x0003003eu, 0x0000552fu, 0x00005556u, 0x000500c5u, 0x00000006u, 0x0000555au, 0x00005556u, 0x000054c2u, 0x0003003eu, 0x0000552fu, 0x0000555au, 0x0004007cu, 0x00000008u, 0x0000555cu, 0x0000555au, 0x00070050u, 0x00000009u, 0x0000555du, 0x0000555cu, 0x0000555cu, 0x0000555cu, 0x0000555cu, 0x0003003eu, 0x00005530u, 0x0000555du, 0x0003003eu, 0x00004511u, 0x0000555du, 0x000200f9u, 0x00004822u, 0x000200f8u, 0x00004822u, 0x000700f5u, 0x00000009u, 0x00009bf3u, 0x00009b3du, 0x0000480bu, 0x0000555du, 0x00004823u, 0x000200f9u, 0x000047deu, 0x000200f8u, 0x000047dfu, 0x0004007cu, 0x000000a2u, 0x000047e3u, 0x000094feu, 0x0003003eu, 0x00006a08u, 0x000044aeu, 0x0003003eu, 0x00006a09u, 0x000044b1u, 0x0003003eu, 0x000045a8u, 0x000020eau, 0x0003003eu, 0x000045a9u, 0x000047e3u, 0x00050041u, 0x00000007u, 0x000053f6u, 0x000045a9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000053f7u, 0x000053f6u, 0x00050084u, 0x00000006u, 0x000053f8u, 0x000044b1u, 0x000053f7u, 0x00050080u, 0x00000006u, 0x000053f9u, 0x000044aeu, 0x000053f8u, 0x0003003eu, 0x000053eeu, 0x000053f9u, 0x00050041u, 0x00000007u, 0x000053fau, 0x000045a9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000053fbu, 0x000053fau, 0x00050084u, 0x00000006u, 0x000053fcu, 0x000053fbu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000053feu, 0x000053f9u, 0x000053fcu, 0x0003003eu, 0x000053eeu, 0x000053feu, 0x000500c7u, 0x00000006u, 0x00005400u, 0x000053feu, 0x00000e4bu, 0x0003003eu, 0x000053eeu, 0x00005400u, 0x000500c2u, 0x00000006u, 0x00005402u, 0x00005400u, 0x00000212u, 0x0003003eu, 0x000053efu, 0x00005402u, 0x0004003du, 0x00000006u, 0x00005404u, 0x000053f6u, 0x000500c7u, 0x00000006u, 0x00005405u, 0x00005404u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005406u, 0x00005405u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005408u, 0x00005402u, 0x00005406u, 0x0003003eu, 0x000053efu, 0x00005408u, 0x000500c6u, 0x00000006u, 0x0000540au, 0x00005408u, 0x00000485u, 0x0003003eu, 0x000053efu, 0x0000540au, 0x00080041u, 0x00000270u, 0x0000540du, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000540au, 0x0004003du, 0x0000022bu, 0x0000540eu, 0x0000540du, 0x00040071u, 0x00000006u, 0x0000540fu, 0x0000540eu, 0x0003003eu, 0x000053f0u, 0x0000540fu, 0x000500c2u, 0x00000006u, 0x00005411u, 0x0000540fu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005412u, 0x00005411u, 0x000500c7u, 0x00000006u, 0x00005414u, 0x0000540fu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005415u, 0x00005414u, 0x00050050u, 0x0000005fu, 0x00005416u, 0x00005412u, 0x00005415u, 0x0009004fu, 0x00000009u, 0x00005417u, 0x00005416u, 0x00005416u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000053f1u, 0x00005417u, 0x0003003eu, 0x000044f9u, 0x00005417u, 0x000300f7u, 0x000047e8u, 0x00000000u, 0x000400fau, 0x00002101u, 0x000047e9u, 0x000047e8u, 0x000200f8u, 0x000047e9u, 0x00050050u, 0x0000005fu, 0x000047ecu, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000047edu, 0x000047ecu, 0x0003003eu, 0x00006a0cu, 0x000044aeu, 0x0003003eu, 0x00006a0du, 0x000044b1u, 0x0003003eu, 0x000045abu, 0x000020eau, 0x0003003eu, 0x000045acu, 0x000047edu, 0x00050041u, 0x00000007u, 0x00005420u, 0x000045acu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005421u, 0x00005420u, 0x00050084u, 0x00000006u, 0x00005422u, 0x000044b1u, 0x00005421u, 0x00050080u, 0x00000006u, 0x00005423u, 0x000044aeu, 0x00005422u, 0x0003003eu, 0x00005418u, 0x00005423u, 0x00050041u, 0x00000007u, 0x00005424u, 0x000045acu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005425u, 0x00005424u, 0x00050084u, 0x00000006u, 0x00005426u, 0x00005425u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005428u, 0x00005423u, 0x00005426u, 0x0003003eu, 0x00005418u, 0x00005428u, 0x000500c7u, 0x00000006u, 0x0000542au, 0x00005428u, 0x00000e4bu, 0x0003003eu, 0x00005418u, 0x0000542au, 0x000500c2u, 0x00000006u, 0x0000542cu, 0x0000542au, 0x00000212u, 0x0003003eu, 0x00005419u, 0x0000542cu, 0x0004003du, 0x00000006u, 0x0000542eu, 0x00005420u, 0x000500c7u, 0x00000006u, 0x0000542fu, 0x0000542eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005430u, 0x0000542fu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005432u, 0x0000542cu, 0x00005430u, 0x0003003eu, 0x00005419u, 0x00005432u, 0x000500c6u, 0x00000006u, 0x00005434u, 0x00005432u, 0x00000485u, 0x0003003eu, 0x00005419u, 0x00005434u, 0x00080041u, 0x00000270u, 0x00005437u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005434u, 0x0004003du, 0x0000022bu, 0x00005438u, 0x00005437u, 0x00040071u, 0x00000006u, 0x00005439u, 0x00005438u, 0x0003003eu, 0x0000541au, 0x00005439u, 0x000500c2u, 0x00000006u, 0x0000543bu, 0x00005439u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000543cu, 0x0000543bu, 0x000500c7u, 0x00000006u, 0x0000543eu, 0x00005439u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000543fu, 0x0000543eu, 0x00050050u, 0x0000005fu, 0x00005440u, 0x0000543cu, 0x0000543fu, 0x0009004fu, 0x00000009u, 0x00005441u, 0x00005440u, 0x00005440u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000541bu, 0x00005441u, 0x0003003eu, 0x00004501u, 0x00005441u, 0x00050050u, 0x0000005fu, 0x000047f3u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000047f4u, 0x000047f3u, 0x0003003eu, 0x00006a10u, 0x000044aeu, 0x0003003eu, 0x00006a11u, 0x000044b1u, 0x0003003eu, 0x000045aeu, 0x000020eau, 0x0003003eu, 0x000045afu, 0x000047f4u, 0x00050041u, 0x00000007u, 0x0000544au, 0x000045afu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000544bu, 0x0000544au, 0x00050084u, 0x00000006u, 0x0000544cu, 0x000044b1u, 0x0000544bu, 0x00050080u, 0x00000006u, 0x0000544du, 0x000044aeu, 0x0000544cu, 0x0003003eu, 0x00005442u, 0x0000544du, 0x00050041u, 0x00000007u, 0x0000544eu, 0x000045afu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000544fu, 0x0000544eu, 0x00050084u, 0x00000006u, 0x00005450u, 0x0000544fu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005452u, 0x0000544du, 0x00005450u, 0x0003003eu, 0x00005442u, 0x00005452u, 0x000500c7u, 0x00000006u, 0x00005454u, 0x00005452u, 0x00000e4bu, 0x0003003eu, 0x00005442u, 0x00005454u, 0x000500c2u, 0x00000006u, 0x00005456u, 0x00005454u, 0x00000212u, 0x0003003eu, 0x00005443u, 0x00005456u, 0x0004003du, 0x00000006u, 0x00005458u, 0x0000544au, 0x000500c7u, 0x00000006u, 0x00005459u, 0x00005458u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000545au, 0x00005459u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000545cu, 0x00005456u, 0x0000545au, 0x0003003eu, 0x00005443u, 0x0000545cu, 0x000500c6u, 0x00000006u, 0x0000545eu, 0x0000545cu, 0x00000485u, 0x0003003eu, 0x00005443u, 0x0000545eu, 0x00080041u, 0x00000270u, 0x00005461u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000545eu, 0x0004003du, 0x0000022bu, 0x00005462u, 0x00005461u, 0x00040071u, 0x00000006u, 0x00005463u, 0x00005462u, 0x0003003eu, 0x00005444u, 0x00005463u, 0x000500c2u, 0x00000006u, 0x00005465u, 0x00005463u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005466u, 0x00005465u, 0x000500c7u, 0x00000006u, 0x00005468u, 0x00005463u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005469u, 0x00005468u, 0x00050050u, 0x0000005fu, 0x0000546au, 0x00005466u, 0x00005469u, 0x0009004fu, 0x00000009u, 0x0000546bu, 0x0000546au, 0x0000546au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005445u, 0x0000546bu, 0x0003003eu, 0x00004509u, 0x0000546bu, 0x000200f9u, 0x000047e8u, 0x000200f8u, 0x000047e8u, 0x000700f5u, 0x00000009u, 0x00009b0bu, 0x00009a59u, 0x000047dfu, 0x0000546bu, 0x000047e9u, 0x000700f5u, 0x00000009u, 0x0000993fu, 0x0000988au, 0x000047dfu, 0x00005441u, 0x000047e9u, 0x000300f7u, 0x000047f9u, 0x00000000u, 0x000400fau, 0x0000466du, 0x000047fau, 0x000047f9u, 0x000200f8u, 0x000047fau, 0x00050050u, 0x0000005fu, 0x000047fdu, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000047feu, 0x000047fdu, 0x0003003eu, 0x00006a14u, 0x000044aeu, 0x0003003eu, 0x00006a15u, 0x000044b1u, 0x0003003eu, 0x000045b1u, 0x000020eau, 0x0003003eu, 0x000045b2u, 0x000047feu, 0x00050041u, 0x00000007u, 0x00005474u, 0x000045b2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005475u, 0x00005474u, 0x00050084u, 0x00000006u, 0x00005476u, 0x000044b1u, 0x00005475u, 0x00050080u, 0x00000006u, 0x00005477u, 0x000044aeu, 0x00005476u, 0x0003003eu, 0x0000546cu, 0x00005477u, 0x00050041u, 0x00000007u, 0x00005478u, 0x000045b2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005479u, 0x00005478u, 0x00050084u, 0x00000006u, 0x0000547au, 0x00005479u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000547cu, 0x00005477u, 0x0000547au, 0x0003003eu, 0x0000546cu, 0x0000547cu, 0x000500c7u, 0x00000006u, 0x0000547eu, 0x0000547cu, 0x00000e4bu, 0x0003003eu, 0x0000546cu, 0x0000547eu, 0x000500c2u, 0x00000006u, 0x00005480u, 0x0000547eu, 0x00000212u, 0x0003003eu, 0x0000546du, 0x00005480u, 0x0004003du, 0x00000006u, 0x00005482u, 0x00005474u, 0x000500c7u, 0x00000006u, 0x00005483u, 0x00005482u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005484u, 0x00005483u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005486u, 0x00005480u, 0x00005484u, 0x0003003eu, 0x0000546du, 0x00005486u, 0x000500c6u, 0x00000006u, 0x00005488u, 0x00005486u, 0x00000485u, 0x0003003eu, 0x0000546du, 0x00005488u, 0x00080041u, 0x00000270u, 0x0000548bu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005488u, 0x0004003du, 0x0000022bu, 0x0000548cu, 0x0000548bu, 0x00040071u, 0x00000006u, 0x0000548du, 0x0000548cu, 0x0003003eu, 0x0000546eu, 0x0000548du, 0x000500c2u, 0x00000006u, 0x0000548fu, 0x0000548du, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005490u, 0x0000548fu, 0x000500c7u, 0x00000006u, 0x00005492u, 0x0000548du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005493u, 0x00005492u, 0x00050050u, 0x0000005fu, 0x00005494u, 0x00005490u, 0x00005493u, 0x0009004fu, 0x00000009u, 0x00005495u, 0x00005494u, 0x00005494u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000546fu, 0x00005495u, 0x0003003eu, 0x00004511u, 0x00005495u, 0x000200f9u, 0x000047f9u, 0x000200f8u, 0x000047f9u, 0x000700f5u, 0x00000009u, 0x00009bf1u, 0x00009b3du, 0x000047e8u, 0x00005495u, 0x000047fau, 0x000200f9u, 0x000047deu, 0x000200f8u, 0x000047deu, 0x000900f5u, 0x00000009u, 0x00009bf0u, 0x00009bf1u, 0x000047f9u, 0x00009bf3u, 0x00004822u, 0x00009bf5u, 0x00004845u, 0x000900f5u, 0x00000009u, 0x00009b09u, 0x00009b0bu, 0x000047f9u, 0x00009b0du, 0x00004822u, 0x00009b0fu, 0x00004845u, 0x000900f5u, 0x00000009u, 0x00009a24u, 0x00005417u, 0x000047f9u, 0x000054c7u, 0x00004822u, 0x00005580u, 0x00004845u, 0x000900f5u, 0x00000009u, 0x0000993du, 0x0000993fu, 0x000047f9u, 0x00009941u, 0x00004822u, 0x00009943u, 0x00004845u, 0x000200f9u, 0x00004722u, 0x000200f8u, 0x00004724u, 0x000500c3u, 0x00000008u, 0x000047b0u, 0x00009475u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x000047b1u, 0x000047b0u, 0x0003003eu, 0x00004579u, 0x000047b1u, 0x00050082u, 0x00000008u, 0x000047b5u, 0x000094b3u, 0x00009475u, 0x00050080u, 0x00000008u, 0x000047b6u, 0x000094b3u, 0x000047b5u, 0x000500c3u, 0x00000008u, 0x000047b7u, 0x000047b6u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x000047b8u, 0x000047b7u, 0x0003003eu, 0x0000457au, 0x000047b8u, 0x00050050u, 0x0000005fu, 0x000047bbu, 0x00009475u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000047bcu, 0x000047bbu, 0x0003003eu, 0x000069d8u, 0x000044aeu, 0x0003003eu, 0x000069d9u, 0x000044b1u, 0x0003003eu, 0x0000457cu, 0x000020eau, 0x0003003eu, 0x0000457du, 0x000047bcu, 0x0003003eu, 0x0000457eu, 0x000047b1u, 0x00050041u, 0x00000007u, 0x000052d0u, 0x0000457du, 0x00000485u, 0x0004003du, 0x00000006u, 0x000052d1u, 0x000052d0u, 0x00050084u, 0x00000006u, 0x000052d2u, 0x000044b1u, 0x000052d1u, 0x00050080u, 0x00000006u, 0x000052d3u, 0x000044aeu, 0x000052d2u, 0x0003003eu, 0x000052c2u, 0x000052d3u, 0x00050041u, 0x00000007u, 0x000052d5u, 0x0000457du, 0x00000374u, 0x0004003du, 0x00000006u, 0x000052d6u, 0x000052d5u, 0x00050080u, 0x00000006u, 0x000052d7u, 0x000052d3u, 0x000052d6u, 0x0003003eu, 0x000052c3u, 0x000052d7u, 0x000500c7u, 0x00000006u, 0x000052d9u, 0x000052d7u, 0x00000efdu, 0x0003003eu, 0x000052c3u, 0x000052d9u, 0x00050084u, 0x00000006u, 0x000052dcu, 0x000047b1u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000052ddu, 0x000052d3u, 0x000052dcu, 0x0003003eu, 0x000052c4u, 0x000052ddu, 0x000500c7u, 0x00000006u, 0x000052dfu, 0x000052ddu, 0x00000efdu, 0x0003003eu, 0x000052c4u, 0x000052dfu, 0x0003003eu, 0x000052c5u, 0x000052d9u, 0x0004003du, 0x00000006u, 0x000052e2u, 0x000052d0u, 0x000500c7u, 0x00000006u, 0x000052e3u, 0x000052e2u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000052e4u, 0x000052e3u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000052e6u, 0x000052d9u, 0x000052e4u, 0x0003003eu, 0x000052c5u, 0x000052e6u, 0x000500c6u, 0x00000006u, 0x000052e8u, 0x000052e6u, 0x0000048bu, 0x0003003eu, 0x000052c5u, 0x000052e8u, 0x000500c2u, 0x00000006u, 0x000052eau, 0x000052dfu, 0x00000212u, 0x0003003eu, 0x000052c6u, 0x000052eau, 0x0004003du, 0x00000006u, 0x000052ecu, 0x000052d0u, 0x000500c7u, 0x00000006u, 0x000052edu, 0x000052ecu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000052eeu, 0x000052edu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000052f0u, 0x000052eau, 0x000052eeu, 0x0003003eu, 0x000052c6u, 0x000052f0u, 0x000500c6u, 0x00000006u, 0x000052f2u, 0x000052f0u, 0x00000485u, 0x0003003eu, 0x000052c6u, 0x000052f2u, 0x000500c5u, 0x00000006u, 0x000052f5u, 0x000052e8u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x000052f6u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000052f5u, 0x0004003du, 0x00000229u, 0x000052f7u, 0x000052f6u, 0x00040071u, 0x00000006u, 0x000052f8u, 0x000052f7u, 0x0004007cu, 0x00000008u, 0x000052f9u, 0x000052f8u, 0x0003003eu, 0x000052c7u, 0x000052f9u, 0x00080041u, 0x00000270u, 0x000052fcu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000052f2u, 0x0004003du, 0x0000022bu, 0x000052fdu, 0x000052fcu, 0x00040071u, 0x00000006u, 0x000052feu, 0x000052fdu, 0x0004007cu, 0x00000008u, 0x000052ffu, 0x000052feu, 0x0003003eu, 0x000052c8u, 0x000052ffu, 0x000500c3u, 0x00000008u, 0x00005301u, 0x000052ffu, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00005302u, 0x00005301u, 0x0000038bu, 0x0003003eu, 0x000052c9u, 0x00005302u, 0x000500c3u, 0x00000008u, 0x00005304u, 0x000052ffu, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00005305u, 0x00005304u, 0x0000038bu, 0x0003003eu, 0x000052cau, 0x00005305u, 0x00050082u, 0x00000008u, 0x00005307u, 0x00005302u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00005309u, 0x00005305u, 0x00000623u, 0x00070050u, 0x00000009u, 0x0000530cu, 0x00005307u, 0x00005309u, 0x000052f9u, 0x000052f9u, 0x0003003eu, 0x000052cbu, 0x0000530cu, 0x0003003eu, 0x000044f9u, 0x0000530cu, 0x000300f7u, 0x000047c2u, 0x00000000u, 0x000400fau, 0x00002101u, 0x000047c3u, 0x000047c2u, 0x000200f8u, 0x000047c3u, 0x00050050u, 0x0000005fu, 0x000047c6u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000047c7u, 0x000047c6u, 0x0003003eu, 0x000069dcu, 0x000044aeu, 0x0003003eu, 0x000069ddu, 0x000044b1u, 0x0003003eu, 0x00004580u, 0x000020eau, 0x0003003eu, 0x00004581u, 0x000047c7u, 0x0003003eu, 0x00004582u, 0x000047b8u, 0x00050041u, 0x00000007u, 0x0000531bu, 0x00004581u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000531cu, 0x0000531bu, 0x00050084u, 0x00000006u, 0x0000531du, 0x000044b1u, 0x0000531cu, 0x00050080u, 0x00000006u, 0x0000531eu, 0x000044aeu, 0x0000531du, 0x0003003eu, 0x0000530du, 0x0000531eu, 0x00050041u, 0x00000007u, 0x00005320u, 0x00004581u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005321u, 0x00005320u, 0x00050080u, 0x00000006u, 0x00005322u, 0x0000531eu, 0x00005321u, 0x0003003eu, 0x0000530eu, 0x00005322u, 0x000500c7u, 0x00000006u, 0x00005324u, 0x00005322u, 0x00000efdu, 0x0003003eu, 0x0000530eu, 0x00005324u, 0x00050084u, 0x00000006u, 0x00005327u, 0x000047b8u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005328u, 0x0000531eu, 0x00005327u, 0x0003003eu, 0x0000530fu, 0x00005328u, 0x000500c7u, 0x00000006u, 0x0000532au, 0x00005328u, 0x00000efdu, 0x0003003eu, 0x0000530fu, 0x0000532au, 0x0003003eu, 0x00005310u, 0x00005324u, 0x0004003du, 0x00000006u, 0x0000532du, 0x0000531bu, 0x000500c7u, 0x00000006u, 0x0000532eu, 0x0000532du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000532fu, 0x0000532eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005331u, 0x00005324u, 0x0000532fu, 0x0003003eu, 0x00005310u, 0x00005331u, 0x000500c6u, 0x00000006u, 0x00005333u, 0x00005331u, 0x0000048bu, 0x0003003eu, 0x00005310u, 0x00005333u, 0x000500c2u, 0x00000006u, 0x00005335u, 0x0000532au, 0x00000212u, 0x0003003eu, 0x00005311u, 0x00005335u, 0x0004003du, 0x00000006u, 0x00005337u, 0x0000531bu, 0x000500c7u, 0x00000006u, 0x00005338u, 0x00005337u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005339u, 0x00005338u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000533bu, 0x00005335u, 0x00005339u, 0x0003003eu, 0x00005311u, 0x0000533bu, 0x000500c6u, 0x00000006u, 0x0000533du, 0x0000533bu, 0x00000485u, 0x0003003eu, 0x00005311u, 0x0000533du, 0x000500c5u, 0x00000006u, 0x00005340u, 0x00005333u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x00005341u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005340u, 0x0004003du, 0x00000229u, 0x00005342u, 0x00005341u, 0x00040071u, 0x00000006u, 0x00005343u, 0x00005342u, 0x0004007cu, 0x00000008u, 0x00005344u, 0x00005343u, 0x0003003eu, 0x00005312u, 0x00005344u, 0x00080041u, 0x00000270u, 0x00005347u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000533du, 0x0004003du, 0x0000022bu, 0x00005348u, 0x00005347u, 0x00040071u, 0x00000006u, 0x00005349u, 0x00005348u, 0x0004007cu, 0x00000008u, 0x0000534au, 0x00005349u, 0x0003003eu, 0x00005313u, 0x0000534au, 0x000500c3u, 0x00000008u, 0x0000534cu, 0x0000534au, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x0000534du, 0x0000534cu, 0x0000038bu, 0x0003003eu, 0x00005314u, 0x0000534du, 0x000500c3u, 0x00000008u, 0x0000534fu, 0x0000534au, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00005350u, 0x0000534fu, 0x0000038bu, 0x0003003eu, 0x00005315u, 0x00005350u, 0x00050082u, 0x00000008u, 0x00005352u, 0x0000534du, 0x00000623u, 0x00050082u, 0x00000008u, 0x00005354u, 0x00005350u, 0x00000623u, 0x00070050u, 0x00000009u, 0x00005357u, 0x00005352u, 0x00005354u, 0x00005344u, 0x00005344u, 0x0003003eu, 0x00005316u, 0x00005357u, 0x0003003eu, 0x00004501u, 0x00005357u, 0x00050050u, 0x0000005fu, 0x000047ceu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000047cfu, 0x000047ceu, 0x0003003eu, 0x000069e0u, 0x000044aeu, 0x0003003eu, 0x000069e1u, 0x000044b1u, 0x0003003eu, 0x00004584u, 0x000020eau, 0x0003003eu, 0x00004585u, 0x000047cfu, 0x0003003eu, 0x00004586u, 0x000047b1u, 0x00050041u, 0x00000007u, 0x00005366u, 0x00004585u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005367u, 0x00005366u, 0x00050084u, 0x00000006u, 0x00005368u, 0x000044b1u, 0x00005367u, 0x00050080u, 0x00000006u, 0x00005369u, 0x000044aeu, 0x00005368u, 0x0003003eu, 0x00005358u, 0x00005369u, 0x00050041u, 0x00000007u, 0x0000536bu, 0x00004585u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000536cu, 0x0000536bu, 0x00050080u, 0x00000006u, 0x0000536du, 0x00005369u, 0x0000536cu, 0x0003003eu, 0x00005359u, 0x0000536du, 0x000500c7u, 0x00000006u, 0x0000536fu, 0x0000536du, 0x00000efdu, 0x0003003eu, 0x00005359u, 0x0000536fu, 0x00050080u, 0x00000006u, 0x00005373u, 0x00005369u, 0x000052dcu, 0x0003003eu, 0x0000535au, 0x00005373u, 0x000500c7u, 0x00000006u, 0x00005375u, 0x00005373u, 0x00000efdu, 0x0003003eu, 0x0000535au, 0x00005375u, 0x0003003eu, 0x0000535bu, 0x0000536fu, 0x0004003du, 0x00000006u, 0x00005378u, 0x00005366u, 0x000500c7u, 0x00000006u, 0x00005379u, 0x00005378u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000537au, 0x00005379u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000537cu, 0x0000536fu, 0x0000537au, 0x0003003eu, 0x0000535bu, 0x0000537cu, 0x000500c6u, 0x00000006u, 0x0000537eu, 0x0000537cu, 0x0000048bu, 0x0003003eu, 0x0000535bu, 0x0000537eu, 0x000500c2u, 0x00000006u, 0x00005380u, 0x00005375u, 0x00000212u, 0x0003003eu, 0x0000535cu, 0x00005380u, 0x0004003du, 0x00000006u, 0x00005382u, 0x00005366u, 0x000500c7u, 0x00000006u, 0x00005383u, 0x00005382u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005384u, 0x00005383u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005386u, 0x00005380u, 0x00005384u, 0x0003003eu, 0x0000535cu, 0x00005386u, 0x000500c6u, 0x00000006u, 0x00005388u, 0x00005386u, 0x00000485u, 0x0003003eu, 0x0000535cu, 0x00005388u, 0x000500c5u, 0x00000006u, 0x0000538bu, 0x0000537eu, 0x00000f26u, 0x00080041u, 0x00000277u, 0x0000538cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000538bu, 0x0004003du, 0x00000229u, 0x0000538du, 0x0000538cu, 0x00040071u, 0x00000006u, 0x0000538eu, 0x0000538du, 0x0004007cu, 0x00000008u, 0x0000538fu, 0x0000538eu, 0x0003003eu, 0x0000535du, 0x0000538fu, 0x00080041u, 0x00000270u, 0x00005392u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005388u, 0x0004003du, 0x0000022bu, 0x00005393u, 0x00005392u, 0x00040071u, 0x00000006u, 0x00005394u, 0x00005393u, 0x0004007cu, 0x00000008u, 0x00005395u, 0x00005394u, 0x0003003eu, 0x0000535eu, 0x00005395u, 0x000500c3u, 0x00000008u, 0x00005397u, 0x00005395u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00005398u, 0x00005397u, 0x0000038bu, 0x0003003eu, 0x0000535fu, 0x00005398u, 0x000500c3u, 0x00000008u, 0x0000539au, 0x00005395u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x0000539bu, 0x0000539au, 0x0000038bu, 0x0003003eu, 0x00005360u, 0x0000539bu, 0x00050082u, 0x00000008u, 0x0000539du, 0x00005398u, 0x00000623u, 0x00050082u, 0x00000008u, 0x0000539fu, 0x0000539bu, 0x00000623u, 0x00070050u, 0x00000009u, 0x000053a2u, 0x0000539du, 0x0000539fu, 0x0000538fu, 0x0000538fu, 0x0003003eu, 0x00005361u, 0x000053a2u, 0x0003003eu, 0x00004509u, 0x000053a2u, 0x00050050u, 0x0000005fu, 0x000047d6u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000047d7u, 0x000047d6u, 0x0003003eu, 0x000069e4u, 0x000044aeu, 0x0003003eu, 0x000069e5u, 0x000044b1u, 0x0003003eu, 0x00004588u, 0x000020eau, 0x0003003eu, 0x00004589u, 0x000047d7u, 0x0003003eu, 0x0000458au, 0x000047b8u, 0x00050041u, 0x00000007u, 0x000053b1u, 0x00004589u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000053b2u, 0x000053b1u, 0x00050084u, 0x00000006u, 0x000053b3u, 0x000044b1u, 0x000053b2u, 0x00050080u, 0x00000006u, 0x000053b4u, 0x000044aeu, 0x000053b3u, 0x0003003eu, 0x000053a3u, 0x000053b4u, 0x00050041u, 0x00000007u, 0x000053b6u, 0x00004589u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000053b7u, 0x000053b6u, 0x00050080u, 0x00000006u, 0x000053b8u, 0x000053b4u, 0x000053b7u, 0x0003003eu, 0x000053a4u, 0x000053b8u, 0x000500c7u, 0x00000006u, 0x000053bau, 0x000053b8u, 0x00000efdu, 0x0003003eu, 0x000053a4u, 0x000053bau, 0x00050080u, 0x00000006u, 0x000053beu, 0x000053b4u, 0x00005327u, 0x0003003eu, 0x000053a5u, 0x000053beu, 0x000500c7u, 0x00000006u, 0x000053c0u, 0x000053beu, 0x00000efdu, 0x0003003eu, 0x000053a5u, 0x000053c0u, 0x0003003eu, 0x000053a6u, 0x000053bau, 0x0004003du, 0x00000006u, 0x000053c3u, 0x000053b1u, 0x000500c7u, 0x00000006u, 0x000053c4u, 0x000053c3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000053c5u, 0x000053c4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000053c7u, 0x000053bau, 0x000053c5u, 0x0003003eu, 0x000053a6u, 0x000053c7u, 0x000500c6u, 0x00000006u, 0x000053c9u, 0x000053c7u, 0x0000048bu, 0x0003003eu, 0x000053a6u, 0x000053c9u, 0x000500c2u, 0x00000006u, 0x000053cbu, 0x000053c0u, 0x00000212u, 0x0003003eu, 0x000053a7u, 0x000053cbu, 0x0004003du, 0x00000006u, 0x000053cdu, 0x000053b1u, 0x000500c7u, 0x00000006u, 0x000053ceu, 0x000053cdu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000053cfu, 0x000053ceu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000053d1u, 0x000053cbu, 0x000053cfu, 0x0003003eu, 0x000053a7u, 0x000053d1u, 0x000500c6u, 0x00000006u, 0x000053d3u, 0x000053d1u, 0x00000485u, 0x0003003eu, 0x000053a7u, 0x000053d3u, 0x000500c5u, 0x00000006u, 0x000053d6u, 0x000053c9u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x000053d7u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000053d6u, 0x0004003du, 0x00000229u, 0x000053d8u, 0x000053d7u, 0x00040071u, 0x00000006u, 0x000053d9u, 0x000053d8u, 0x0004007cu, 0x00000008u, 0x000053dau, 0x000053d9u, 0x0003003eu, 0x000053a8u, 0x000053dau, 0x00080041u, 0x00000270u, 0x000053ddu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000053d3u, 0x0004003du, 0x0000022bu, 0x000053deu, 0x000053ddu, 0x00040071u, 0x00000006u, 0x000053dfu, 0x000053deu, 0x0004007cu, 0x00000008u, 0x000053e0u, 0x000053dfu, 0x0003003eu, 0x000053a9u, 0x000053e0u, 0x000500c3u, 0x00000008u, 0x000053e2u, 0x000053e0u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x000053e3u, 0x000053e2u, 0x0000038bu, 0x0003003eu, 0x000053aau, 0x000053e3u, 0x000500c3u, 0x00000008u, 0x000053e5u, 0x000053e0u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x000053e6u, 0x000053e5u, 0x0000038bu, 0x0003003eu, 0x000053abu, 0x000053e6u, 0x00050082u, 0x00000008u, 0x000053e8u, 0x000053e3u, 0x00000623u, 0x00050082u, 0x00000008u, 0x000053eau, 0x000053e6u, 0x00000623u, 0x00070050u, 0x00000009u, 0x000053edu, 0x000053e8u, 0x000053eau, 0x000053dau, 0x000053dau, 0x0003003eu, 0x000053acu, 0x000053edu, 0x0003003eu, 0x00004511u, 0x000053edu, 0x000200f9u, 0x000047c2u, 0x000200f8u, 0x000047c2u, 0x000700f5u, 0x00000009u, 0x00009befu, 0x00009b3du, 0x00004724u, 0x000053edu, 0x000047c3u, 0x000700f5u, 0x00000009u, 0x00009b08u, 0x00009a59u, 0x00004724u, 0x000053a2u, 0x000047c3u, 0x000700f5u, 0x00000009u, 0x0000993cu, 0x0000988au, 0x00004724u, 0x00005357u, 0x000047c3u, 0x000200f9u, 0x00004722u, 0x000200f8u, 0x00004723u, 0x000300f7u, 0x0000472au, 0x00000000u, 0x000b00fbu, 0x000044bbu, 0x0000472au, 0x00000000u, 0x0000472bu, 0x00000001u, 0x0000472cu, 0x00000002u, 0x0000472du, 0x00000003u, 0x0000472eu, 0x000200f8u, 0x0000472eu, 0x0004007cu, 0x000000a2u, 0x00004790u, 0x000094feu, 0x0003003eu, 0x000069c8u, 0x000044aeu, 0x0003003eu, 0x000069c9u, 0x000044b1u, 0x0003003eu, 0x0000456eu, 0x000020eau, 0x0003003eu, 0x0000456fu, 0x00004790u, 0x00050041u, 0x00000007u, 0x000051f3u, 0x0000456fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000051f4u, 0x000051f3u, 0x00050084u, 0x00000006u, 0x000051f5u, 0x000044b1u, 0x000051f4u, 0x00050080u, 0x00000006u, 0x000051f6u, 0x000044aeu, 0x000051f5u, 0x0003003eu, 0x000051eau, 0x000051f6u, 0x00050041u, 0x00000007u, 0x000051f7u, 0x0000456fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000051f8u, 0x000051f7u, 0x00050084u, 0x00000006u, 0x000051f9u, 0x000051f8u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000051fbu, 0x000051f6u, 0x000051f9u, 0x0003003eu, 0x000051eau, 0x000051fbu, 0x000500c7u, 0x00000006u, 0x000051fdu, 0x000051fbu, 0x00000efdu, 0x0003003eu, 0x000051eau, 0x000051fdu, 0x000500c2u, 0x00000006u, 0x000051ffu, 0x000051fdu, 0x00000212u, 0x0003003eu, 0x000051ebu, 0x000051ffu, 0x0004003du, 0x00000006u, 0x00005201u, 0x000051f3u, 0x000500c7u, 0x00000006u, 0x00005202u, 0x00005201u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005203u, 0x00005202u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005205u, 0x000051ffu, 0x00005203u, 0x0003003eu, 0x000051ebu, 0x00005205u, 0x000500c6u, 0x00000006u, 0x00005207u, 0x00005205u, 0x00000485u, 0x0003003eu, 0x000051ebu, 0x00005207u, 0x00080041u, 0x00000270u, 0x0000520au, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005207u, 0x0004003du, 0x0000022bu, 0x0000520bu, 0x0000520au, 0x00040071u, 0x00000006u, 0x0000520cu, 0x0000520bu, 0x0003003eu, 0x000051ecu, 0x0000520cu, 0x000500c5u, 0x00000006u, 0x0000520fu, 0x00005207u, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x00005210u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000520fu, 0x0004003du, 0x0000022bu, 0x00005211u, 0x00005210u, 0x00040071u, 0x00000006u, 0x00005212u, 0x00005211u, 0x0003003eu, 0x000051edu, 0x00005212u, 0x000500c2u, 0x00000006u, 0x00005214u, 0x0000520cu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005215u, 0x00005214u, 0x000500c7u, 0x00000006u, 0x00005217u, 0x0000520cu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005218u, 0x00005217u, 0x000500c2u, 0x00000006u, 0x0000521au, 0x00005212u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000521bu, 0x0000521au, 0x000500c7u, 0x00000006u, 0x0000521du, 0x00005212u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000521eu, 0x0000521du, 0x00070050u, 0x00000009u, 0x0000521fu, 0x00005215u, 0x00005218u, 0x0000521bu, 0x0000521eu, 0x0003003eu, 0x000051eeu, 0x0000521fu, 0x0003003eu, 0x000044f9u, 0x0000521fu, 0x000300f7u, 0x00004795u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004796u, 0x00004795u, 0x000200f8u, 0x00004796u, 0x00050050u, 0x0000005fu, 0x00004799u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x0000479au, 0x00004799u, 0x0003003eu, 0x000069ccu, 0x000044aeu, 0x0003003eu, 0x000069cdu, 0x000044b1u, 0x0003003eu, 0x00004571u, 0x000020eau, 0x0003003eu, 0x00004572u, 0x0000479au, 0x00050041u, 0x00000007u, 0x00005229u, 0x00004572u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000522au, 0x00005229u, 0x00050084u, 0x00000006u, 0x0000522bu, 0x000044b1u, 0x0000522au, 0x00050080u, 0x00000006u, 0x0000522cu, 0x000044aeu, 0x0000522bu, 0x0003003eu, 0x00005220u, 0x0000522cu, 0x00050041u, 0x00000007u, 0x0000522du, 0x00004572u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000522eu, 0x0000522du, 0x00050084u, 0x00000006u, 0x0000522fu, 0x0000522eu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005231u, 0x0000522cu, 0x0000522fu, 0x0003003eu, 0x00005220u, 0x00005231u, 0x000500c7u, 0x00000006u, 0x00005233u, 0x00005231u, 0x00000efdu, 0x0003003eu, 0x00005220u, 0x00005233u, 0x000500c2u, 0x00000006u, 0x00005235u, 0x00005233u, 0x00000212u, 0x0003003eu, 0x00005221u, 0x00005235u, 0x0004003du, 0x00000006u, 0x00005237u, 0x00005229u, 0x000500c7u, 0x00000006u, 0x00005238u, 0x00005237u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005239u, 0x00005238u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000523bu, 0x00005235u, 0x00005239u, 0x0003003eu, 0x00005221u, 0x0000523bu, 0x000500c6u, 0x00000006u, 0x0000523du, 0x0000523bu, 0x00000485u, 0x0003003eu, 0x00005221u, 0x0000523du, 0x00080041u, 0x00000270u, 0x00005240u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000523du, 0x0004003du, 0x0000022bu, 0x00005241u, 0x00005240u, 0x00040071u, 0x00000006u, 0x00005242u, 0x00005241u, 0x0003003eu, 0x00005222u, 0x00005242u, 0x000500c5u, 0x00000006u, 0x00005245u, 0x0000523du, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x00005246u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005245u, 0x0004003du, 0x0000022bu, 0x00005247u, 0x00005246u, 0x00040071u, 0x00000006u, 0x00005248u, 0x00005247u, 0x0003003eu, 0x00005223u, 0x00005248u, 0x000500c2u, 0x00000006u, 0x0000524au, 0x00005242u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000524bu, 0x0000524au, 0x000500c7u, 0x00000006u, 0x0000524du, 0x00005242u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000524eu, 0x0000524du, 0x000500c2u, 0x00000006u, 0x00005250u, 0x00005248u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005251u, 0x00005250u, 0x000500c7u, 0x00000006u, 0x00005253u, 0x00005248u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005254u, 0x00005253u, 0x00070050u, 0x00000009u, 0x00005255u, 0x0000524bu, 0x0000524eu, 0x00005251u, 0x00005254u, 0x0003003eu, 0x00005224u, 0x00005255u, 0x0003003eu, 0x00004501u, 0x00005255u, 0x00050050u, 0x0000005fu, 0x000047a0u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000047a1u, 0x000047a0u, 0x0003003eu, 0x000069d0u, 0x000044aeu, 0x0003003eu, 0x000069d1u, 0x000044b1u, 0x0003003eu, 0x00004574u, 0x000020eau, 0x0003003eu, 0x00004575u, 0x000047a1u, 0x00050041u, 0x00000007u, 0x0000525fu, 0x00004575u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005260u, 0x0000525fu, 0x00050084u, 0x00000006u, 0x00005261u, 0x000044b1u, 0x00005260u, 0x00050080u, 0x00000006u, 0x00005262u, 0x000044aeu, 0x00005261u, 0x0003003eu, 0x00005256u, 0x00005262u, 0x00050041u, 0x00000007u, 0x00005263u, 0x00004575u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005264u, 0x00005263u, 0x00050084u, 0x00000006u, 0x00005265u, 0x00005264u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005267u, 0x00005262u, 0x00005265u, 0x0003003eu, 0x00005256u, 0x00005267u, 0x000500c7u, 0x00000006u, 0x00005269u, 0x00005267u, 0x00000efdu, 0x0003003eu, 0x00005256u, 0x00005269u, 0x000500c2u, 0x00000006u, 0x0000526bu, 0x00005269u, 0x00000212u, 0x0003003eu, 0x00005257u, 0x0000526bu, 0x0004003du, 0x00000006u, 0x0000526du, 0x0000525fu, 0x000500c7u, 0x00000006u, 0x0000526eu, 0x0000526du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000526fu, 0x0000526eu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005271u, 0x0000526bu, 0x0000526fu, 0x0003003eu, 0x00005257u, 0x00005271u, 0x000500c6u, 0x00000006u, 0x00005273u, 0x00005271u, 0x00000485u, 0x0003003eu, 0x00005257u, 0x00005273u, 0x00080041u, 0x00000270u, 0x00005276u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005273u, 0x0004003du, 0x0000022bu, 0x00005277u, 0x00005276u, 0x00040071u, 0x00000006u, 0x00005278u, 0x00005277u, 0x0003003eu, 0x00005258u, 0x00005278u, 0x000500c5u, 0x00000006u, 0x0000527bu, 0x00005273u, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x0000527cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000527bu, 0x0004003du, 0x0000022bu, 0x0000527du, 0x0000527cu, 0x00040071u, 0x00000006u, 0x0000527eu, 0x0000527du, 0x0003003eu, 0x00005259u, 0x0000527eu, 0x000500c2u, 0x00000006u, 0x00005280u, 0x00005278u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005281u, 0x00005280u, 0x000500c7u, 0x00000006u, 0x00005283u, 0x00005278u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005284u, 0x00005283u, 0x000500c2u, 0x00000006u, 0x00005286u, 0x0000527eu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005287u, 0x00005286u, 0x000500c7u, 0x00000006u, 0x00005289u, 0x0000527eu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000528au, 0x00005289u, 0x00070050u, 0x00000009u, 0x0000528bu, 0x00005281u, 0x00005284u, 0x00005287u, 0x0000528au, 0x0003003eu, 0x0000525au, 0x0000528bu, 0x0003003eu, 0x00004509u, 0x0000528bu, 0x000200f9u, 0x00004795u, 0x000200f8u, 0x00004795u, 0x000700f5u, 0x00000009u, 0x00009b07u, 0x00009a59u, 0x0000472eu, 0x0000528bu, 0x00004796u, 0x000700f5u, 0x00000009u, 0x0000993bu, 0x0000988au, 0x0000472eu, 0x00005255u, 0x00004796u, 0x000300f7u, 0x000047a6u, 0x00000000u, 0x000400fau, 0x0000466du, 0x000047a7u, 0x000047a6u, 0x000200f8u, 0x000047a7u, 0x00050050u, 0x0000005fu, 0x000047aau, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000047abu, 0x000047aau, 0x0003003eu, 0x000069d4u, 0x000044aeu, 0x0003003eu, 0x000069d5u, 0x000044b1u, 0x0003003eu, 0x00004577u, 0x000020eau, 0x0003003eu, 0x00004578u, 0x000047abu, 0x00050041u, 0x00000007u, 0x00005295u, 0x00004578u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005296u, 0x00005295u, 0x00050084u, 0x00000006u, 0x00005297u, 0x000044b1u, 0x00005296u, 0x00050080u, 0x00000006u, 0x00005298u, 0x000044aeu, 0x00005297u, 0x0003003eu, 0x0000528cu, 0x00005298u, 0x00050041u, 0x00000007u, 0x00005299u, 0x00004578u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000529au, 0x00005299u, 0x00050084u, 0x00000006u, 0x0000529bu, 0x0000529au, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000529du, 0x00005298u, 0x0000529bu, 0x0003003eu, 0x0000528cu, 0x0000529du, 0x000500c7u, 0x00000006u, 0x0000529fu, 0x0000529du, 0x00000efdu, 0x0003003eu, 0x0000528cu, 0x0000529fu, 0x000500c2u, 0x00000006u, 0x000052a1u, 0x0000529fu, 0x00000212u, 0x0003003eu, 0x0000528du, 0x000052a1u, 0x0004003du, 0x00000006u, 0x000052a3u, 0x00005295u, 0x000500c7u, 0x00000006u, 0x000052a4u, 0x000052a3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000052a5u, 0x000052a4u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000052a7u, 0x000052a1u, 0x000052a5u, 0x0003003eu, 0x0000528du, 0x000052a7u, 0x000500c6u, 0x00000006u, 0x000052a9u, 0x000052a7u, 0x00000485u, 0x0003003eu, 0x0000528du, 0x000052a9u, 0x00080041u, 0x00000270u, 0x000052acu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000052a9u, 0x0004003du, 0x0000022bu, 0x000052adu, 0x000052acu, 0x00040071u, 0x00000006u, 0x000052aeu, 0x000052adu, 0x0003003eu, 0x0000528eu, 0x000052aeu, 0x000500c5u, 0x00000006u, 0x000052b1u, 0x000052a9u, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x000052b2u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000052b1u, 0x0004003du, 0x0000022bu, 0x000052b3u, 0x000052b2u, 0x00040071u, 0x00000006u, 0x000052b4u, 0x000052b3u, 0x0003003eu, 0x0000528fu, 0x000052b4u, 0x000500c2u, 0x00000006u, 0x000052b6u, 0x000052aeu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000052b7u, 0x000052b6u, 0x000500c7u, 0x00000006u, 0x000052b9u, 0x000052aeu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000052bau, 0x000052b9u, 0x000500c2u, 0x00000006u, 0x000052bcu, 0x000052b4u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000052bdu, 0x000052bcu, 0x000500c7u, 0x00000006u, 0x000052bfu, 0x000052b4u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000052c0u, 0x000052bfu, 0x00070050u, 0x00000009u, 0x000052c1u, 0x000052b7u, 0x000052bau, 0x000052bdu, 0x000052c0u, 0x0003003eu, 0x00005290u, 0x000052c1u, 0x0003003eu, 0x00004511u, 0x000052c1u, 0x000200f9u, 0x000047a6u, 0x000200f8u, 0x000047a6u, 0x000700f5u, 0x00000009u, 0x00009bedu, 0x00009b3du, 0x00004795u, 0x000052c1u, 0x000047a7u, 0x000200f9u, 0x0000472au, 0x000200f8u, 0x0000472du, 0x0004007cu, 0x000000a2u, 0x00004770u, 0x000094feu, 0x0003003eu, 0x000069b8u, 0x000044aeu, 0x0003003eu, 0x000069b9u, 0x000044b1u, 0x0003003eu, 0x00004562u, 0x000020eau, 0x0003003eu, 0x00004563u, 0x00004770u, 0x00050041u, 0x00000007u, 0x000050f7u, 0x00004563u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000050f8u, 0x000050f7u, 0x00050084u, 0x00000006u, 0x000050f9u, 0x000044b1u, 0x000050f8u, 0x00050080u, 0x00000006u, 0x000050fau, 0x000044aeu, 0x000050f9u, 0x0003003eu, 0x000050eeu, 0x000050fau, 0x00050041u, 0x00000007u, 0x000050fbu, 0x00004563u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000050fcu, 0x000050fbu, 0x00050084u, 0x00000006u, 0x000050fdu, 0x000050fcu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000050ffu, 0x000050fau, 0x000050fdu, 0x0003003eu, 0x000050eeu, 0x000050ffu, 0x000500c7u, 0x00000006u, 0x00005101u, 0x000050ffu, 0x00000e4bu, 0x0003003eu, 0x000050eeu, 0x00005101u, 0x000500c2u, 0x00000006u, 0x00005103u, 0x00005101u, 0x00000212u, 0x0003003eu, 0x000050efu, 0x00005103u, 0x0004003du, 0x00000006u, 0x00005105u, 0x000050f7u, 0x000500c7u, 0x00000006u, 0x00005106u, 0x00005105u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005107u, 0x00005106u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005109u, 0x00005103u, 0x00005107u, 0x0003003eu, 0x000050efu, 0x00005109u, 0x000500c6u, 0x00000006u, 0x0000510bu, 0x00005109u, 0x00000485u, 0x0003003eu, 0x000050efu, 0x0000510bu, 0x00080041u, 0x00000270u, 0x0000510eu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000510bu, 0x0004003du, 0x0000022bu, 0x0000510fu, 0x0000510eu, 0x00040071u, 0x00000006u, 0x00005110u, 0x0000510fu, 0x0003003eu, 0x000050f0u, 0x00005110u, 0x0003003eu, 0x000050f1u, 0x00005110u, 0x00060050u, 0x00000353u, 0x00005117u, 0x00005110u, 0x00005110u, 0x00005110u, 0x000500c2u, 0x00000353u, 0x00005118u, 0x00005117u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x0000511au, 0x00005118u, 0x0000eebdu, 0x0003003eu, 0x00005113u, 0x0000511au, 0x000500c4u, 0x00000353u, 0x0000511du, 0x0000511au, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00005120u, 0x0000511au, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00005121u, 0x0000511du, 0x00005120u, 0x0003003eu, 0x00005113u, 0x00005121u, 0x000500c7u, 0x00000006u, 0x00005123u, 0x00005110u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005124u, 0x00005123u, 0x000006c2u, 0x0003003eu, 0x00005114u, 0x00005124u, 0x0004007cu, 0x0000003cu, 0x00005126u, 0x00005121u, 0x0004007cu, 0x00000008u, 0x00005128u, 0x00005124u, 0x00050051u, 0x00000008u, 0x00005129u, 0x00005126u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000512au, 0x00005126u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000512bu, 0x00005126u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000512cu, 0x00005129u, 0x0000512au, 0x0000512bu, 0x00005128u, 0x0003003eu, 0x00005115u, 0x0000512cu, 0x0003003eu, 0x000050f2u, 0x0000512cu, 0x0003003eu, 0x000044f9u, 0x0000512cu, 0x000300f7u, 0x00004775u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004776u, 0x00004775u, 0x000200f8u, 0x00004776u, 0x00050050u, 0x0000005fu, 0x00004779u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x0000477au, 0x00004779u, 0x0003003eu, 0x000069bcu, 0x000044aeu, 0x0003003eu, 0x000069bdu, 0x000044b1u, 0x0003003eu, 0x00004565u, 0x000020eau, 0x0003003eu, 0x00004566u, 0x0000477au, 0x00050041u, 0x00000007u, 0x00005136u, 0x00004566u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005137u, 0x00005136u, 0x00050084u, 0x00000006u, 0x00005138u, 0x000044b1u, 0x00005137u, 0x00050080u, 0x00000006u, 0x00005139u, 0x000044aeu, 0x00005138u, 0x0003003eu, 0x0000512du, 0x00005139u, 0x00050041u, 0x00000007u, 0x0000513au, 0x00004566u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000513bu, 0x0000513au, 0x00050084u, 0x00000006u, 0x0000513cu, 0x0000513bu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000513eu, 0x00005139u, 0x0000513cu, 0x0003003eu, 0x0000512du, 0x0000513eu, 0x000500c7u, 0x00000006u, 0x00005140u, 0x0000513eu, 0x00000e4bu, 0x0003003eu, 0x0000512du, 0x00005140u, 0x000500c2u, 0x00000006u, 0x00005142u, 0x00005140u, 0x00000212u, 0x0003003eu, 0x0000512eu, 0x00005142u, 0x0004003du, 0x00000006u, 0x00005144u, 0x00005136u, 0x000500c7u, 0x00000006u, 0x00005145u, 0x00005144u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005146u, 0x00005145u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005148u, 0x00005142u, 0x00005146u, 0x0003003eu, 0x0000512eu, 0x00005148u, 0x000500c6u, 0x00000006u, 0x0000514au, 0x00005148u, 0x00000485u, 0x0003003eu, 0x0000512eu, 0x0000514au, 0x00080041u, 0x00000270u, 0x0000514du, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000514au, 0x0004003du, 0x0000022bu, 0x0000514eu, 0x0000514du, 0x00040071u, 0x00000006u, 0x0000514fu, 0x0000514eu, 0x0003003eu, 0x0000512fu, 0x0000514fu, 0x0003003eu, 0x00005130u, 0x0000514fu, 0x00060050u, 0x00000353u, 0x00005156u, 0x0000514fu, 0x0000514fu, 0x0000514fu, 0x000500c2u, 0x00000353u, 0x00005157u, 0x00005156u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00005159u, 0x00005157u, 0x0000eebdu, 0x0003003eu, 0x00005152u, 0x00005159u, 0x000500c4u, 0x00000353u, 0x0000515cu, 0x00005159u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x0000515fu, 0x00005159u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00005160u, 0x0000515cu, 0x0000515fu, 0x0003003eu, 0x00005152u, 0x00005160u, 0x000500c7u, 0x00000006u, 0x00005162u, 0x0000514fu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005163u, 0x00005162u, 0x000006c2u, 0x0003003eu, 0x00005153u, 0x00005163u, 0x0004007cu, 0x0000003cu, 0x00005165u, 0x00005160u, 0x0004007cu, 0x00000008u, 0x00005167u, 0x00005163u, 0x00050051u, 0x00000008u, 0x00005168u, 0x00005165u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005169u, 0x00005165u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000516au, 0x00005165u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000516bu, 0x00005168u, 0x00005169u, 0x0000516au, 0x00005167u, 0x0003003eu, 0x00005154u, 0x0000516bu, 0x0003003eu, 0x00005131u, 0x0000516bu, 0x0003003eu, 0x00004501u, 0x0000516bu, 0x00050050u, 0x0000005fu, 0x00004780u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004781u, 0x00004780u, 0x0003003eu, 0x000069c0u, 0x000044aeu, 0x0003003eu, 0x000069c1u, 0x000044b1u, 0x0003003eu, 0x00004568u, 0x000020eau, 0x0003003eu, 0x00004569u, 0x00004781u, 0x00050041u, 0x00000007u, 0x00005175u, 0x00004569u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005176u, 0x00005175u, 0x00050084u, 0x00000006u, 0x00005177u, 0x000044b1u, 0x00005176u, 0x00050080u, 0x00000006u, 0x00005178u, 0x000044aeu, 0x00005177u, 0x0003003eu, 0x0000516cu, 0x00005178u, 0x00050041u, 0x00000007u, 0x00005179u, 0x00004569u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000517au, 0x00005179u, 0x00050084u, 0x00000006u, 0x0000517bu, 0x0000517au, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000517du, 0x00005178u, 0x0000517bu, 0x0003003eu, 0x0000516cu, 0x0000517du, 0x000500c7u, 0x00000006u, 0x0000517fu, 0x0000517du, 0x00000e4bu, 0x0003003eu, 0x0000516cu, 0x0000517fu, 0x000500c2u, 0x00000006u, 0x00005181u, 0x0000517fu, 0x00000212u, 0x0003003eu, 0x0000516du, 0x00005181u, 0x0004003du, 0x00000006u, 0x00005183u, 0x00005175u, 0x000500c7u, 0x00000006u, 0x00005184u, 0x00005183u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005185u, 0x00005184u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005187u, 0x00005181u, 0x00005185u, 0x0003003eu, 0x0000516du, 0x00005187u, 0x000500c6u, 0x00000006u, 0x00005189u, 0x00005187u, 0x00000485u, 0x0003003eu, 0x0000516du, 0x00005189u, 0x00080041u, 0x00000270u, 0x0000518cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005189u, 0x0004003du, 0x0000022bu, 0x0000518du, 0x0000518cu, 0x00040071u, 0x00000006u, 0x0000518eu, 0x0000518du, 0x0003003eu, 0x0000516eu, 0x0000518eu, 0x0003003eu, 0x0000516fu, 0x0000518eu, 0x00060050u, 0x00000353u, 0x00005195u, 0x0000518eu, 0x0000518eu, 0x0000518eu, 0x000500c2u, 0x00000353u, 0x00005196u, 0x00005195u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00005198u, 0x00005196u, 0x0000eebdu, 0x0003003eu, 0x00005191u, 0x00005198u, 0x000500c4u, 0x00000353u, 0x0000519bu, 0x00005198u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x0000519eu, 0x00005198u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x0000519fu, 0x0000519bu, 0x0000519eu, 0x0003003eu, 0x00005191u, 0x0000519fu, 0x000500c7u, 0x00000006u, 0x000051a1u, 0x0000518eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000051a2u, 0x000051a1u, 0x000006c2u, 0x0003003eu, 0x00005192u, 0x000051a2u, 0x0004007cu, 0x0000003cu, 0x000051a4u, 0x0000519fu, 0x0004007cu, 0x00000008u, 0x000051a6u, 0x000051a2u, 0x00050051u, 0x00000008u, 0x000051a7u, 0x000051a4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000051a8u, 0x000051a4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000051a9u, 0x000051a4u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000051aau, 0x000051a7u, 0x000051a8u, 0x000051a9u, 0x000051a6u, 0x0003003eu, 0x00005193u, 0x000051aau, 0x0003003eu, 0x00005170u, 0x000051aau, 0x0003003eu, 0x00004509u, 0x000051aau, 0x000200f9u, 0x00004775u, 0x000200f8u, 0x00004775u, 0x000700f5u, 0x00000009u, 0x00009b05u, 0x00009a59u, 0x0000472du, 0x000051aau, 0x00004776u, 0x000700f5u, 0x00000009u, 0x00009939u, 0x0000988au, 0x0000472du, 0x0000516bu, 0x00004776u, 0x000300f7u, 0x00004786u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004787u, 0x00004786u, 0x000200f8u, 0x00004787u, 0x00050050u, 0x0000005fu, 0x0000478au, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000478bu, 0x0000478au, 0x0003003eu, 0x000069c4u, 0x000044aeu, 0x0003003eu, 0x000069c5u, 0x000044b1u, 0x0003003eu, 0x0000456bu, 0x000020eau, 0x0003003eu, 0x0000456cu, 0x0000478bu, 0x00050041u, 0x00000007u, 0x000051b4u, 0x0000456cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000051b5u, 0x000051b4u, 0x00050084u, 0x00000006u, 0x000051b6u, 0x000044b1u, 0x000051b5u, 0x00050080u, 0x00000006u, 0x000051b7u, 0x000044aeu, 0x000051b6u, 0x0003003eu, 0x000051abu, 0x000051b7u, 0x00050041u, 0x00000007u, 0x000051b8u, 0x0000456cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000051b9u, 0x000051b8u, 0x00050084u, 0x00000006u, 0x000051bau, 0x000051b9u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000051bcu, 0x000051b7u, 0x000051bau, 0x0003003eu, 0x000051abu, 0x000051bcu, 0x000500c7u, 0x00000006u, 0x000051beu, 0x000051bcu, 0x00000e4bu, 0x0003003eu, 0x000051abu, 0x000051beu, 0x000500c2u, 0x00000006u, 0x000051c0u, 0x000051beu, 0x00000212u, 0x0003003eu, 0x000051acu, 0x000051c0u, 0x0004003du, 0x00000006u, 0x000051c2u, 0x000051b4u, 0x000500c7u, 0x00000006u, 0x000051c3u, 0x000051c2u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000051c4u, 0x000051c3u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000051c6u, 0x000051c0u, 0x000051c4u, 0x0003003eu, 0x000051acu, 0x000051c6u, 0x000500c6u, 0x00000006u, 0x000051c8u, 0x000051c6u, 0x00000485u, 0x0003003eu, 0x000051acu, 0x000051c8u, 0x00080041u, 0x00000270u, 0x000051cbu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x000051c8u, 0x0004003du, 0x0000022bu, 0x000051ccu, 0x000051cbu, 0x00040071u, 0x00000006u, 0x000051cdu, 0x000051ccu, 0x0003003eu, 0x000051adu, 0x000051cdu, 0x0003003eu, 0x000051aeu, 0x000051cdu, 0x00060050u, 0x00000353u, 0x000051d4u, 0x000051cdu, 0x000051cdu, 0x000051cdu, 0x000500c2u, 0x00000353u, 0x000051d5u, 0x000051d4u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x000051d7u, 0x000051d5u, 0x0000eebdu, 0x0003003eu, 0x000051d0u, 0x000051d7u, 0x000500c4u, 0x00000353u, 0x000051dau, 0x000051d7u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x000051ddu, 0x000051d7u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x000051deu, 0x000051dau, 0x000051ddu, 0x0003003eu, 0x000051d0u, 0x000051deu, 0x000500c7u, 0x00000006u, 0x000051e0u, 0x000051cdu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000051e1u, 0x000051e0u, 0x000006c2u, 0x0003003eu, 0x000051d1u, 0x000051e1u, 0x0004007cu, 0x0000003cu, 0x000051e3u, 0x000051deu, 0x0004007cu, 0x00000008u, 0x000051e5u, 0x000051e1u, 0x00050051u, 0x00000008u, 0x000051e6u, 0x000051e3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000051e7u, 0x000051e3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000051e8u, 0x000051e3u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000051e9u, 0x000051e6u, 0x000051e7u, 0x000051e8u, 0x000051e5u, 0x0003003eu, 0x000051d2u, 0x000051e9u, 0x0003003eu, 0x000051afu, 0x000051e9u, 0x0003003eu, 0x00004511u, 0x000051e9u, 0x000200f9u, 0x00004786u, 0x000200f8u, 0x00004786u, 0x000700f5u, 0x00000009u, 0x00009bebu, 0x00009b3du, 0x00004775u, 0x000051e9u, 0x00004787u, 0x000200f9u, 0x0000472au, 0x000200f8u, 0x0000472cu, 0x0004007cu, 0x000000a2u, 0x00004750u, 0x000094feu, 0x0003003eu, 0x000069a8u, 0x000044aeu, 0x0003003eu, 0x000069a9u, 0x000044b1u, 0x0003003eu, 0x00004556u, 0x000020eau, 0x0003003eu, 0x00004557u, 0x00004750u, 0x00050041u, 0x00000007u, 0x0000506au, 0x00004557u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000506bu, 0x0000506au, 0x00050084u, 0x00000006u, 0x0000506cu, 0x000044b1u, 0x0000506bu, 0x00050080u, 0x00000006u, 0x0000506du, 0x000044aeu, 0x0000506cu, 0x0003003eu, 0x00005062u, 0x0000506du, 0x00050041u, 0x00000007u, 0x0000506eu, 0x00004557u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000506fu, 0x0000506eu, 0x00050080u, 0x00000006u, 0x00005071u, 0x0000506du, 0x0000506fu, 0x0003003eu, 0x00005062u, 0x00005071u, 0x000500c7u, 0x00000006u, 0x00005073u, 0x00005071u, 0x00000e4bu, 0x0003003eu, 0x00005062u, 0x00005073u, 0x0003003eu, 0x00005063u, 0x00005073u, 0x0004003du, 0x00000006u, 0x00005076u, 0x0000506au, 0x000500c7u, 0x00000006u, 0x00005077u, 0x00005076u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005078u, 0x00005077u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000507au, 0x00005073u, 0x00005078u, 0x0003003eu, 0x00005063u, 0x0000507au, 0x000500c6u, 0x00000006u, 0x0000507cu, 0x0000507au, 0x0000048bu, 0x0003003eu, 0x00005063u, 0x0000507cu, 0x00080041u, 0x00000277u, 0x0000507fu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000507cu, 0x0004003du, 0x00000229u, 0x00005080u, 0x0000507fu, 0x00040071u, 0x00000006u, 0x00005081u, 0x00005080u, 0x0003003eu, 0x00005064u, 0x00005081u, 0x0004007cu, 0x00000008u, 0x00005083u, 0x00005081u, 0x00070050u, 0x00000009u, 0x00005084u, 0x00005083u, 0x00005083u, 0x00005083u, 0x00005083u, 0x0003003eu, 0x00005065u, 0x00005084u, 0x0003003eu, 0x000044f9u, 0x00005084u, 0x000300f7u, 0x00004755u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004756u, 0x00004755u, 0x000200f8u, 0x00004756u, 0x00050050u, 0x0000005fu, 0x00004759u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x0000475au, 0x00004759u, 0x0003003eu, 0x000069acu, 0x000044aeu, 0x0003003eu, 0x000069adu, 0x000044b1u, 0x0003003eu, 0x00004559u, 0x000020eau, 0x0003003eu, 0x0000455au, 0x0000475au, 0x00050041u, 0x00000007u, 0x0000508du, 0x0000455au, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000508eu, 0x0000508du, 0x00050084u, 0x00000006u, 0x0000508fu, 0x000044b1u, 0x0000508eu, 0x00050080u, 0x00000006u, 0x00005090u, 0x000044aeu, 0x0000508fu, 0x0003003eu, 0x00005085u, 0x00005090u, 0x00050041u, 0x00000007u, 0x00005091u, 0x0000455au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005092u, 0x00005091u, 0x00050080u, 0x00000006u, 0x00005094u, 0x00005090u, 0x00005092u, 0x0003003eu, 0x00005085u, 0x00005094u, 0x000500c7u, 0x00000006u, 0x00005096u, 0x00005094u, 0x00000e4bu, 0x0003003eu, 0x00005085u, 0x00005096u, 0x0003003eu, 0x00005086u, 0x00005096u, 0x0004003du, 0x00000006u, 0x00005099u, 0x0000508du, 0x000500c7u, 0x00000006u, 0x0000509au, 0x00005099u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000509bu, 0x0000509au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000509du, 0x00005096u, 0x0000509bu, 0x0003003eu, 0x00005086u, 0x0000509du, 0x000500c6u, 0x00000006u, 0x0000509fu, 0x0000509du, 0x0000048bu, 0x0003003eu, 0x00005086u, 0x0000509fu, 0x00080041u, 0x00000277u, 0x000050a2u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000509fu, 0x0004003du, 0x00000229u, 0x000050a3u, 0x000050a2u, 0x00040071u, 0x00000006u, 0x000050a4u, 0x000050a3u, 0x0003003eu, 0x00005087u, 0x000050a4u, 0x0004007cu, 0x00000008u, 0x000050a6u, 0x000050a4u, 0x00070050u, 0x00000009u, 0x000050a7u, 0x000050a6u, 0x000050a6u, 0x000050a6u, 0x000050a6u, 0x0003003eu, 0x00005088u, 0x000050a7u, 0x0003003eu, 0x00004501u, 0x000050a7u, 0x00050050u, 0x0000005fu, 0x00004760u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004761u, 0x00004760u, 0x0003003eu, 0x000069b0u, 0x000044aeu, 0x0003003eu, 0x000069b1u, 0x000044b1u, 0x0003003eu, 0x0000455cu, 0x000020eau, 0x0003003eu, 0x0000455du, 0x00004761u, 0x00050041u, 0x00000007u, 0x000050b0u, 0x0000455du, 0x00000485u, 0x0004003du, 0x00000006u, 0x000050b1u, 0x000050b0u, 0x00050084u, 0x00000006u, 0x000050b2u, 0x000044b1u, 0x000050b1u, 0x00050080u, 0x00000006u, 0x000050b3u, 0x000044aeu, 0x000050b2u, 0x0003003eu, 0x000050a8u, 0x000050b3u, 0x00050041u, 0x00000007u, 0x000050b4u, 0x0000455du, 0x00000374u, 0x0004003du, 0x00000006u, 0x000050b5u, 0x000050b4u, 0x00050080u, 0x00000006u, 0x000050b7u, 0x000050b3u, 0x000050b5u, 0x0003003eu, 0x000050a8u, 0x000050b7u, 0x000500c7u, 0x00000006u, 0x000050b9u, 0x000050b7u, 0x00000e4bu, 0x0003003eu, 0x000050a8u, 0x000050b9u, 0x0003003eu, 0x000050a9u, 0x000050b9u, 0x0004003du, 0x00000006u, 0x000050bcu, 0x000050b0u, 0x000500c7u, 0x00000006u, 0x000050bdu, 0x000050bcu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000050beu, 0x000050bdu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000050c0u, 0x000050b9u, 0x000050beu, 0x0003003eu, 0x000050a9u, 0x000050c0u, 0x000500c6u, 0x00000006u, 0x000050c2u, 0x000050c0u, 0x0000048bu, 0x0003003eu, 0x000050a9u, 0x000050c2u, 0x00080041u, 0x00000277u, 0x000050c5u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000050c2u, 0x0004003du, 0x00000229u, 0x000050c6u, 0x000050c5u, 0x00040071u, 0x00000006u, 0x000050c7u, 0x000050c6u, 0x0003003eu, 0x000050aau, 0x000050c7u, 0x0004007cu, 0x00000008u, 0x000050c9u, 0x000050c7u, 0x00070050u, 0x00000009u, 0x000050cau, 0x000050c9u, 0x000050c9u, 0x000050c9u, 0x000050c9u, 0x0003003eu, 0x000050abu, 0x000050cau, 0x0003003eu, 0x00004509u, 0x000050cau, 0x000200f9u, 0x00004755u, 0x000200f8u, 0x00004755u, 0x000700f5u, 0x00000009u, 0x00009b03u, 0x00009a59u, 0x0000472cu, 0x000050cau, 0x00004756u, 0x000700f5u, 0x00000009u, 0x00009937u, 0x0000988au, 0x0000472cu, 0x000050a7u, 0x00004756u, 0x000300f7u, 0x00004766u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004767u, 0x00004766u, 0x000200f8u, 0x00004767u, 0x00050050u, 0x0000005fu, 0x0000476au, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000476bu, 0x0000476au, 0x0003003eu, 0x000069b4u, 0x000044aeu, 0x0003003eu, 0x000069b5u, 0x000044b1u, 0x0003003eu, 0x0000455fu, 0x000020eau, 0x0003003eu, 0x00004560u, 0x0000476bu, 0x00050041u, 0x00000007u, 0x000050d3u, 0x00004560u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000050d4u, 0x000050d3u, 0x00050084u, 0x00000006u, 0x000050d5u, 0x000044b1u, 0x000050d4u, 0x00050080u, 0x00000006u, 0x000050d6u, 0x000044aeu, 0x000050d5u, 0x0003003eu, 0x000050cbu, 0x000050d6u, 0x00050041u, 0x00000007u, 0x000050d7u, 0x00004560u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000050d8u, 0x000050d7u, 0x00050080u, 0x00000006u, 0x000050dau, 0x000050d6u, 0x000050d8u, 0x0003003eu, 0x000050cbu, 0x000050dau, 0x000500c7u, 0x00000006u, 0x000050dcu, 0x000050dau, 0x00000e4bu, 0x0003003eu, 0x000050cbu, 0x000050dcu, 0x0003003eu, 0x000050ccu, 0x000050dcu, 0x0004003du, 0x00000006u, 0x000050dfu, 0x000050d3u, 0x000500c7u, 0x00000006u, 0x000050e0u, 0x000050dfu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000050e1u, 0x000050e0u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000050e3u, 0x000050dcu, 0x000050e1u, 0x0003003eu, 0x000050ccu, 0x000050e3u, 0x000500c6u, 0x00000006u, 0x000050e5u, 0x000050e3u, 0x0000048bu, 0x0003003eu, 0x000050ccu, 0x000050e5u, 0x00080041u, 0x00000277u, 0x000050e8u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x000050e5u, 0x0004003du, 0x00000229u, 0x000050e9u, 0x000050e8u, 0x00040071u, 0x00000006u, 0x000050eau, 0x000050e9u, 0x0003003eu, 0x000050cdu, 0x000050eau, 0x0004007cu, 0x00000008u, 0x000050ecu, 0x000050eau, 0x00070050u, 0x00000009u, 0x000050edu, 0x000050ecu, 0x000050ecu, 0x000050ecu, 0x000050ecu, 0x0003003eu, 0x000050ceu, 0x000050edu, 0x0003003eu, 0x00004511u, 0x000050edu, 0x000200f9u, 0x00004766u, 0x000200f8u, 0x00004766u, 0x000700f5u, 0x00000009u, 0x00009be9u, 0x00009b3du, 0x00004755u, 0x000050edu, 0x00004767u, 0x000200f9u, 0x0000472au, 0x000200f8u, 0x0000472bu, 0x0004007cu, 0x000000a2u, 0x00004730u, 0x000094feu, 0x0003003eu, 0x00006998u, 0x000044aeu, 0x0003003eu, 0x00006999u, 0x000044b1u, 0x0003003eu, 0x0000454au, 0x000020eau, 0x0003003eu, 0x0000454bu, 0x00004730u, 0x00050041u, 0x00000007u, 0x00004fa3u, 0x0000454bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004fa4u, 0x00004fa3u, 0x00050084u, 0x00000006u, 0x00004fa5u, 0x000044b1u, 0x00004fa4u, 0x00050080u, 0x00000006u, 0x00004fa6u, 0x000044aeu, 0x00004fa5u, 0x0003003eu, 0x00004f9au, 0x00004fa6u, 0x00050041u, 0x00000007u, 0x00004fa7u, 0x0000454bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004fa8u, 0x00004fa7u, 0x000500c2u, 0x00000006u, 0x00004fa9u, 0x00004fa8u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004fabu, 0x00004fa6u, 0x00004fa9u, 0x0003003eu, 0x00004f9au, 0x00004fabu, 0x000500c7u, 0x00000006u, 0x00004fadu, 0x00004fabu, 0x00000e4bu, 0x0003003eu, 0x00004f9au, 0x00004fadu, 0x0004003du, 0x00000006u, 0x00004fafu, 0x00004fa7u, 0x000400c8u, 0x00000006u, 0x00004fb0u, 0x00004fafu, 0x000500c7u, 0x00000006u, 0x00004fb1u, 0x00004fb0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004fb2u, 0x00004fb1u, 0x00000701u, 0x0003003eu, 0x00004f9bu, 0x00004fb2u, 0x0003003eu, 0x00004f9cu, 0x00004fadu, 0x0004003du, 0x00000006u, 0x00004fb5u, 0x00004fa3u, 0x000500c7u, 0x00000006u, 0x00004fb6u, 0x00004fb5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004fb7u, 0x00004fb6u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004fb9u, 0x00004fadu, 0x00004fb7u, 0x0003003eu, 0x00004f9cu, 0x00004fb9u, 0x000500c6u, 0x00000006u, 0x00004fbbu, 0x00004fb9u, 0x0000048bu, 0x0003003eu, 0x00004f9cu, 0x00004fbbu, 0x00080041u, 0x00000277u, 0x00004fbeu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004fbbu, 0x0004003du, 0x00000229u, 0x00004fbfu, 0x00004fbeu, 0x00040071u, 0x00000006u, 0x00004fc0u, 0x00004fbfu, 0x0003003eu, 0x00004f9du, 0x00004fc0u, 0x000500c2u, 0x00000006u, 0x00004fc3u, 0x00004fc0u, 0x00004fb2u, 0x000500c7u, 0x00000006u, 0x00004fc4u, 0x00004fc3u, 0x00000e6eu, 0x0003003eu, 0x00004f9du, 0x00004fc4u, 0x000500c4u, 0x00000006u, 0x00004fc6u, 0x00004fc4u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004fc8u, 0x00004fc4u, 0x00004fc6u, 0x0003003eu, 0x00004f9du, 0x00004fc8u, 0x0004007cu, 0x00000008u, 0x00004fcau, 0x00004fc8u, 0x00070050u, 0x00000009u, 0x00004fcbu, 0x00004fcau, 0x00004fcau, 0x00004fcau, 0x00004fcau, 0x0003003eu, 0x00004f9eu, 0x00004fcbu, 0x0003003eu, 0x000044f9u, 0x00004fcbu, 0x000300f7u, 0x00004735u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004736u, 0x00004735u, 0x000200f8u, 0x00004736u, 0x00050050u, 0x0000005fu, 0x00004739u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x0000473au, 0x00004739u, 0x0003003eu, 0x0000699cu, 0x000044aeu, 0x0003003eu, 0x0000699du, 0x000044b1u, 0x0003003eu, 0x0000454du, 0x000020eau, 0x0003003eu, 0x0000454eu, 0x0000473au, 0x00050041u, 0x00000007u, 0x00004fd5u, 0x0000454eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004fd6u, 0x00004fd5u, 0x00050084u, 0x00000006u, 0x00004fd7u, 0x000044b1u, 0x00004fd6u, 0x00050080u, 0x00000006u, 0x00004fd8u, 0x000044aeu, 0x00004fd7u, 0x0003003eu, 0x00004fccu, 0x00004fd8u, 0x00050041u, 0x00000007u, 0x00004fd9u, 0x0000454eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004fdau, 0x00004fd9u, 0x000500c2u, 0x00000006u, 0x00004fdbu, 0x00004fdau, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004fddu, 0x00004fd8u, 0x00004fdbu, 0x0003003eu, 0x00004fccu, 0x00004fddu, 0x000500c7u, 0x00000006u, 0x00004fdfu, 0x00004fddu, 0x00000e4bu, 0x0003003eu, 0x00004fccu, 0x00004fdfu, 0x0004003du, 0x00000006u, 0x00004fe1u, 0x00004fd9u, 0x000400c8u, 0x00000006u, 0x00004fe2u, 0x00004fe1u, 0x000500c7u, 0x00000006u, 0x00004fe3u, 0x00004fe2u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004fe4u, 0x00004fe3u, 0x00000701u, 0x0003003eu, 0x00004fcdu, 0x00004fe4u, 0x0003003eu, 0x00004fceu, 0x00004fdfu, 0x0004003du, 0x00000006u, 0x00004fe7u, 0x00004fd5u, 0x000500c7u, 0x00000006u, 0x00004fe8u, 0x00004fe7u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004fe9u, 0x00004fe8u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004febu, 0x00004fdfu, 0x00004fe9u, 0x0003003eu, 0x00004fceu, 0x00004febu, 0x000500c6u, 0x00000006u, 0x00004fedu, 0x00004febu, 0x0000048bu, 0x0003003eu, 0x00004fceu, 0x00004fedu, 0x00080041u, 0x00000277u, 0x00004ff0u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004fedu, 0x0004003du, 0x00000229u, 0x00004ff1u, 0x00004ff0u, 0x00040071u, 0x00000006u, 0x00004ff2u, 0x00004ff1u, 0x0003003eu, 0x00004fcfu, 0x00004ff2u, 0x000500c2u, 0x00000006u, 0x00004ff5u, 0x00004ff2u, 0x00004fe4u, 0x000500c7u, 0x00000006u, 0x00004ff6u, 0x00004ff5u, 0x00000e6eu, 0x0003003eu, 0x00004fcfu, 0x00004ff6u, 0x000500c4u, 0x00000006u, 0x00004ff8u, 0x00004ff6u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004ffau, 0x00004ff6u, 0x00004ff8u, 0x0003003eu, 0x00004fcfu, 0x00004ffau, 0x0004007cu, 0x00000008u, 0x00004ffcu, 0x00004ffau, 0x00070050u, 0x00000009u, 0x00004ffdu, 0x00004ffcu, 0x00004ffcu, 0x00004ffcu, 0x00004ffcu, 0x0003003eu, 0x00004fd0u, 0x00004ffdu, 0x0003003eu, 0x00004501u, 0x00004ffdu, 0x00050050u, 0x0000005fu, 0x00004740u, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x00004741u, 0x00004740u, 0x0003003eu, 0x000069a0u, 0x000044aeu, 0x0003003eu, 0x000069a1u, 0x000044b1u, 0x0003003eu, 0x00004550u, 0x000020eau, 0x0003003eu, 0x00004551u, 0x00004741u, 0x00050041u, 0x00000007u, 0x00005007u, 0x00004551u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005008u, 0x00005007u, 0x00050084u, 0x00000006u, 0x00005009u, 0x000044b1u, 0x00005008u, 0x00050080u, 0x00000006u, 0x0000500au, 0x000044aeu, 0x00005009u, 0x0003003eu, 0x00004ffeu, 0x0000500au, 0x00050041u, 0x00000007u, 0x0000500bu, 0x00004551u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000500cu, 0x0000500bu, 0x000500c2u, 0x00000006u, 0x0000500du, 0x0000500cu, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000500fu, 0x0000500au, 0x0000500du, 0x0003003eu, 0x00004ffeu, 0x0000500fu, 0x000500c7u, 0x00000006u, 0x00005011u, 0x0000500fu, 0x00000e4bu, 0x0003003eu, 0x00004ffeu, 0x00005011u, 0x0004003du, 0x00000006u, 0x00005013u, 0x0000500bu, 0x000400c8u, 0x00000006u, 0x00005014u, 0x00005013u, 0x000500c7u, 0x00000006u, 0x00005015u, 0x00005014u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005016u, 0x00005015u, 0x00000701u, 0x0003003eu, 0x00004fffu, 0x00005016u, 0x0003003eu, 0x00005000u, 0x00005011u, 0x0004003du, 0x00000006u, 0x00005019u, 0x00005007u, 0x000500c7u, 0x00000006u, 0x0000501au, 0x00005019u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000501bu, 0x0000501au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000501du, 0x00005011u, 0x0000501bu, 0x0003003eu, 0x00005000u, 0x0000501du, 0x000500c6u, 0x00000006u, 0x0000501fu, 0x0000501du, 0x0000048bu, 0x0003003eu, 0x00005000u, 0x0000501fu, 0x00080041u, 0x00000277u, 0x00005022u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x0000501fu, 0x0004003du, 0x00000229u, 0x00005023u, 0x00005022u, 0x00040071u, 0x00000006u, 0x00005024u, 0x00005023u, 0x0003003eu, 0x00005001u, 0x00005024u, 0x000500c2u, 0x00000006u, 0x00005027u, 0x00005024u, 0x00005016u, 0x000500c7u, 0x00000006u, 0x00005028u, 0x00005027u, 0x00000e6eu, 0x0003003eu, 0x00005001u, 0x00005028u, 0x000500c4u, 0x00000006u, 0x0000502au, 0x00005028u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000502cu, 0x00005028u, 0x0000502au, 0x0003003eu, 0x00005001u, 0x0000502cu, 0x0004007cu, 0x00000008u, 0x0000502eu, 0x0000502cu, 0x00070050u, 0x00000009u, 0x0000502fu, 0x0000502eu, 0x0000502eu, 0x0000502eu, 0x0000502eu, 0x0003003eu, 0x00005002u, 0x0000502fu, 0x0003003eu, 0x00004509u, 0x0000502fu, 0x000200f9u, 0x00004735u, 0x000200f8u, 0x00004735u, 0x000700f5u, 0x00000009u, 0x00009b01u, 0x00009a59u, 0x0000472bu, 0x0000502fu, 0x00004736u, 0x000700f5u, 0x00000009u, 0x00009935u, 0x0000988au, 0x0000472bu, 0x00004ffdu, 0x00004736u, 0x000300f7u, 0x00004746u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004747u, 0x00004746u, 0x000200f8u, 0x00004747u, 0x00050050u, 0x0000005fu, 0x0000474au, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000474bu, 0x0000474au, 0x0003003eu, 0x000069a4u, 0x000044aeu, 0x0003003eu, 0x000069a5u, 0x000044b1u, 0x0003003eu, 0x00004553u, 0x000020eau, 0x0003003eu, 0x00004554u, 0x0000474bu, 0x00050041u, 0x00000007u, 0x00005039u, 0x00004554u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000503au, 0x00005039u, 0x00050084u, 0x00000006u, 0x0000503bu, 0x000044b1u, 0x0000503au, 0x00050080u, 0x00000006u, 0x0000503cu, 0x000044aeu, 0x0000503bu, 0x0003003eu, 0x00005030u, 0x0000503cu, 0x00050041u, 0x00000007u, 0x0000503du, 0x00004554u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000503eu, 0x0000503du, 0x000500c2u, 0x00000006u, 0x0000503fu, 0x0000503eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005041u, 0x0000503cu, 0x0000503fu, 0x0003003eu, 0x00005030u, 0x00005041u, 0x000500c7u, 0x00000006u, 0x00005043u, 0x00005041u, 0x00000e4bu, 0x0003003eu, 0x00005030u, 0x00005043u, 0x0004003du, 0x00000006u, 0x00005045u, 0x0000503du, 0x000400c8u, 0x00000006u, 0x00005046u, 0x00005045u, 0x000500c7u, 0x00000006u, 0x00005047u, 0x00005046u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005048u, 0x00005047u, 0x00000701u, 0x0003003eu, 0x00005031u, 0x00005048u, 0x0003003eu, 0x00005032u, 0x00005043u, 0x0004003du, 0x00000006u, 0x0000504bu, 0x00005039u, 0x000500c7u, 0x00000006u, 0x0000504cu, 0x0000504bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000504du, 0x0000504cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000504fu, 0x00005043u, 0x0000504du, 0x0003003eu, 0x00005032u, 0x0000504fu, 0x000500c6u, 0x00000006u, 0x00005051u, 0x0000504fu, 0x0000048bu, 0x0003003eu, 0x00005032u, 0x00005051u, 0x00080041u, 0x00000277u, 0x00005054u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00005051u, 0x0004003du, 0x00000229u, 0x00005055u, 0x00005054u, 0x00040071u, 0x00000006u, 0x00005056u, 0x00005055u, 0x0003003eu, 0x00005033u, 0x00005056u, 0x000500c2u, 0x00000006u, 0x00005059u, 0x00005056u, 0x00005048u, 0x000500c7u, 0x00000006u, 0x0000505au, 0x00005059u, 0x00000e6eu, 0x0003003eu, 0x00005033u, 0x0000505au, 0x000500c4u, 0x00000006u, 0x0000505cu, 0x0000505au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000505eu, 0x0000505au, 0x0000505cu, 0x0003003eu, 0x00005033u, 0x0000505eu, 0x0004007cu, 0x00000008u, 0x00005060u, 0x0000505eu, 0x00070050u, 0x00000009u, 0x00005061u, 0x00005060u, 0x00005060u, 0x00005060u, 0x00005060u, 0x0003003eu, 0x00005034u, 0x00005061u, 0x0003003eu, 0x00004511u, 0x00005061u, 0x000200f9u, 0x00004746u, 0x000200f8u, 0x00004746u, 0x000700f5u, 0x00000009u, 0x00009be7u, 0x00009b3du, 0x00004735u, 0x00005061u, 0x00004747u, 0x000200f9u, 0x0000472au, 0x000200f8u, 0x0000472au, 0x000d00f5u, 0x00000009u, 0x00009be6u, 0x00009b3du, 0x00004723u, 0x00009be7u, 0x00004746u, 0x00009be9u, 0x00004766u, 0x00009bebu, 0x00004786u, 0x00009bedu, 0x000047a6u, 0x000d00f5u, 0x00000009u, 0x00009affu, 0x00009a59u, 0x00004723u, 0x00009b01u, 0x00004746u, 0x00009b03u, 0x00004766u, 0x00009b05u, 0x00004786u, 0x00009b07u, 0x000047a6u, 0x000d00f5u, 0x00000009u, 0x00009a1au, 0x00009972u, 0x00004723u, 0x00004fcbu, 0x00004746u, 0x00005084u, 0x00004766u, 0x0000512cu, 0x00004786u, 0x0000521fu, 0x000047a6u, 0x000d00f5u, 0x00000009u, 0x00009933u, 0x0000988au, 0x00004723u, 0x00009935u, 0x00004746u, 0x00009937u, 0x00004766u, 0x00009939u, 0x00004786u, 0x0000993bu, 0x000047a6u, 0x000200f9u, 0x00004722u, 0x000200f8u, 0x00004722u, 0x000f00f5u, 0x00000009u, 0x00009be5u, 0x00009b3du, 0x00004683u, 0x00009be6u, 0x0000472au, 0x00009befu, 0x000047c2u, 0x00009bf0u, 0x000047deu, 0x00009bf7u, 0x00004850u, 0x00009c00u, 0x000048d7u, 0x000f00f5u, 0x00000009u, 0x00009afeu, 0x00009a59u, 0x00004683u, 0x00009affu, 0x0000472au, 0x00009b08u, 0x000047c2u, 0x00009b09u, 0x000047deu, 0x00009b10u, 0x00004850u, 0x00009b19u, 0x000048d7u, 0x000f00f5u, 0x00000009u, 0x00009a19u, 0x00009972u, 0x00004683u, 0x00009a1au, 0x0000472au, 0x0000530cu, 0x000047c2u, 0x00009a24u, 0x000047deu, 0x00009a2bu, 0x00004850u, 0x00009a34u, 0x000048d7u, 0x000f00f5u, 0x00000009u, 0x00009932u, 0x0000988au, 0x00004683u, 0x00009933u, 0x0000472au, 0x0000993cu, 0x000047c2u, 0x0000993du, 0x000047deu, 0x00009944u, 0x00004850u, 0x0000994du, 0x000048d7u, 0x000200f9u, 0x00004681u, 0x000200f8u, 0x00004682u, 0x000300f7u, 0x00004686u, 0x00000000u, 0x000b00fbu, 0x000044b6u, 0x00004686u, 0x00000000u, 0x00004687u, 0x00000002u, 0x00004687u, 0x00000003u, 0x00004687u, 0x00000004u, 0x00004687u, 0x000200f8u, 0x00004687u, 0x0003003eu, 0x000044f7u, 0x00004675u, 0x000600a9u, 0x00000008u, 0x0000468bu, 0x00004675u, 0x00000215u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x0000468cu, 0x0000468bu, 0x0003003eu, 0x000044f8u, 0x0000468cu, 0x000300f7u, 0x0000468fu, 0x00000000u, 0x000700fbu, 0x000044bbu, 0x00004690u, 0x00000000u, 0x00004691u, 0x00000001u, 0x00004692u, 0x000200f8u, 0x00004692u, 0x0004007cu, 0x000000a2u, 0x000046f6u, 0x000094feu, 0x000600a9u, 0x00000008u, 0x000046f8u, 0x00004675u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000046f9u, 0x000046f8u, 0x0003003eu, 0x00006978u, 0x000044aeu, 0x0003003eu, 0x00006979u, 0x000044b1u, 0x0003003eu, 0x0000451au, 0x000020eau, 0x0003003eu, 0x0000451bu, 0x000046f6u, 0x0003003eu, 0x0000451cu, 0x000046f9u, 0x0003003eu, 0x0000451du, 0x0000468cu, 0x0003003eu, 0x0000451eu, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004e16u, 0x0000451bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004e17u, 0x00004e16u, 0x00050084u, 0x00000006u, 0x00004e18u, 0x000044b1u, 0x00004e17u, 0x00050080u, 0x00000006u, 0x00004e19u, 0x000044aeu, 0x00004e18u, 0x0003003eu, 0x00004e0au, 0x00004e19u, 0x00050041u, 0x00000007u, 0x00004e1au, 0x0000451bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004e1bu, 0x00004e1au, 0x00050080u, 0x00000006u, 0x00004e1du, 0x00004e19u, 0x00004e1bu, 0x0003003eu, 0x00004e0au, 0x00004e1du, 0x000500c7u, 0x00000006u, 0x00004e1fu, 0x00004e1du, 0x00000efdu, 0x0003003eu, 0x00004e0au, 0x00004e1fu, 0x0003003eu, 0x00004e0bu, 0x00004e1fu, 0x0004003du, 0x00000006u, 0x00004e22u, 0x00004e16u, 0x000500c7u, 0x00000006u, 0x00004e23u, 0x00004e22u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004e24u, 0x00004e23u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004e26u, 0x00004e1fu, 0x00004e24u, 0x0003003eu, 0x00004e0bu, 0x00004e26u, 0x000500c6u, 0x00000006u, 0x00004e28u, 0x00004e26u, 0x0000048bu, 0x0003003eu, 0x00004e0bu, 0x00004e28u, 0x00080041u, 0x00000277u, 0x00004e2bu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004e28u, 0x0004003du, 0x00000229u, 0x00004e2cu, 0x00004e2bu, 0x00040071u, 0x00000006u, 0x00004e2du, 0x00004e2cu, 0x0003003eu, 0x00004e0cu, 0x00004e2du, 0x000500c4u, 0x00000006u, 0x00004e2fu, 0x00004e2du, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004e31u, 0x00004e2fu, 0x000046f9u, 0x0003003eu, 0x00004e0du, 0x00004e31u, 0x000500c6u, 0x00000006u, 0x00004e34u, 0x00004e31u, 0x0000468cu, 0x0003003eu, 0x00004e0du, 0x00004e34u, 0x000500c5u, 0x00000006u, 0x00004e37u, 0x00000f2eu, 0x00004e34u, 0x00080041u, 0x00000270u, 0x00004e38u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004e37u, 0x0004003du, 0x0000022bu, 0x00004e39u, 0x00004e38u, 0x00040071u, 0x00000006u, 0x00004e3au, 0x00004e39u, 0x0003003eu, 0x00004e0cu, 0x00004e3au, 0x000300f7u, 0x00004e3cu, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004e3du, 0x00004e3eu, 0x000200f8u, 0x00004e3eu, 0x0003003eu, 0x00004e10u, 0x00004e3au, 0x00060050u, 0x00000353u, 0x00004e58u, 0x00004e3au, 0x00004e3au, 0x00004e3au, 0x000500c2u, 0x00000353u, 0x00004e59u, 0x00004e58u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004e5bu, 0x00004e59u, 0x0000eebdu, 0x0003003eu, 0x00004e54u, 0x00004e5bu, 0x000500c4u, 0x00000353u, 0x00004e5eu, 0x00004e5bu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004e61u, 0x00004e5bu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004e62u, 0x00004e5eu, 0x00004e61u, 0x0003003eu, 0x00004e54u, 0x00004e62u, 0x000500c7u, 0x00000006u, 0x00004e64u, 0x00004e3au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004e65u, 0x00004e64u, 0x000006c2u, 0x0003003eu, 0x00004e55u, 0x00004e65u, 0x0004007cu, 0x0000003cu, 0x00004e67u, 0x00004e62u, 0x0004007cu, 0x00000008u, 0x00004e69u, 0x00004e65u, 0x00050051u, 0x00000008u, 0x00004e6au, 0x00004e67u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004e6bu, 0x00004e67u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004e6cu, 0x00004e67u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004e6du, 0x00004e6au, 0x00004e6bu, 0x00004e6cu, 0x00004e69u, 0x0003003eu, 0x00004e56u, 0x00004e6du, 0x0003003eu, 0x00004e0eu, 0x00004e6du, 0x000200f9u, 0x00004e3cu, 0x000200f8u, 0x00004e3du, 0x0003003eu, 0x00004e0fu, 0x00004e3au, 0x000500c2u, 0x00000006u, 0x00004e48u, 0x00004e3au, 0x0000025eu, 0x0003003eu, 0x00004e44u, 0x00004e48u, 0x000500c7u, 0x00000006u, 0x00004e4au, 0x00004e3au, 0x000006c2u, 0x0003003eu, 0x00004e45u, 0x00004e4au, 0x0004007cu, 0x00000008u, 0x00004e4cu, 0x00004e48u, 0x0004007cu, 0x00000008u, 0x00004e52u, 0x00004e4au, 0x00070050u, 0x00000009u, 0x00004e53u, 0x00004e4cu, 0x00004e4cu, 0x00004e4cu, 0x00004e52u, 0x0003003eu, 0x00004e46u, 0x00004e53u, 0x0003003eu, 0x00004e0eu, 0x00004e53u, 0x000200f9u, 0x00004e3cu, 0x000200f8u, 0x00004e3cu, 0x000700f5u, 0x00000009u, 0x00009687u, 0x00004e53u, 0x00004e3du, 0x00004e6du, 0x00004e3eu, 0x0003003eu, 0x00004e11u, 0x00009687u, 0x0003003eu, 0x000044f9u, 0x00009687u, 0x000300f7u, 0x00004700u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004701u, 0x00004700u, 0x000200f8u, 0x00004701u, 0x00050050u, 0x0000005fu, 0x00004704u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x00004705u, 0x00004704u, 0x0003003eu, 0x0000697cu, 0x000044aeu, 0x0003003eu, 0x0000697du, 0x000044b1u, 0x0003003eu, 0x00004520u, 0x000020eau, 0x0003003eu, 0x00004521u, 0x00004705u, 0x0003003eu, 0x00004522u, 0x00000485u, 0x0003003eu, 0x00004523u, 0x0000468cu, 0x0003003eu, 0x00004524u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004e7au, 0x00004521u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004e7bu, 0x00004e7au, 0x00050084u, 0x00000006u, 0x00004e7cu, 0x000044b1u, 0x00004e7bu, 0x00050080u, 0x00000006u, 0x00004e7du, 0x000044aeu, 0x00004e7cu, 0x0003003eu, 0x00004e6eu, 0x00004e7du, 0x00050041u, 0x00000007u, 0x00004e7eu, 0x00004521u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004e7fu, 0x00004e7eu, 0x00050080u, 0x00000006u, 0x00004e81u, 0x00004e7du, 0x00004e7fu, 0x0003003eu, 0x00004e6eu, 0x00004e81u, 0x000500c7u, 0x00000006u, 0x00004e83u, 0x00004e81u, 0x00000efdu, 0x0003003eu, 0x00004e6eu, 0x00004e83u, 0x0003003eu, 0x00004e6fu, 0x00004e83u, 0x0004003du, 0x00000006u, 0x00004e86u, 0x00004e7au, 0x000500c7u, 0x00000006u, 0x00004e87u, 0x00004e86u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004e88u, 0x00004e87u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004e8au, 0x00004e83u, 0x00004e88u, 0x0003003eu, 0x00004e6fu, 0x00004e8au, 0x000500c6u, 0x00000006u, 0x00004e8cu, 0x00004e8au, 0x0000048bu, 0x0003003eu, 0x00004e6fu, 0x00004e8cu, 0x00080041u, 0x00000277u, 0x00004e8fu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004e8cu, 0x0004003du, 0x00000229u, 0x00004e90u, 0x00004e8fu, 0x00040071u, 0x00000006u, 0x00004e91u, 0x00004e90u, 0x0003003eu, 0x00004e70u, 0x00004e91u, 0x000500c4u, 0x00000006u, 0x00004e93u, 0x00004e91u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004e95u, 0x00004e93u, 0x00000485u, 0x0003003eu, 0x00004e71u, 0x00004e95u, 0x000500c6u, 0x00000006u, 0x00004e98u, 0x00004e95u, 0x0000468cu, 0x0003003eu, 0x00004e71u, 0x00004e98u, 0x000500c5u, 0x00000006u, 0x00004e9bu, 0x00000f2eu, 0x00004e98u, 0x00080041u, 0x00000270u, 0x00004e9cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004e9bu, 0x0004003du, 0x0000022bu, 0x00004e9du, 0x00004e9cu, 0x00040071u, 0x00000006u, 0x00004e9eu, 0x00004e9du, 0x0003003eu, 0x00004e70u, 0x00004e9eu, 0x000300f7u, 0x00004ea0u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004ea1u, 0x00004ea2u, 0x000200f8u, 0x00004ea2u, 0x0003003eu, 0x00004e74u, 0x00004e9eu, 0x00060050u, 0x00000353u, 0x00004ebcu, 0x00004e9eu, 0x00004e9eu, 0x00004e9eu, 0x000500c2u, 0x00000353u, 0x00004ebdu, 0x00004ebcu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004ebfu, 0x00004ebdu, 0x0000eebdu, 0x0003003eu, 0x00004eb8u, 0x00004ebfu, 0x000500c4u, 0x00000353u, 0x00004ec2u, 0x00004ebfu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004ec5u, 0x00004ebfu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004ec6u, 0x00004ec2u, 0x00004ec5u, 0x0003003eu, 0x00004eb8u, 0x00004ec6u, 0x000500c7u, 0x00000006u, 0x00004ec8u, 0x00004e9eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004ec9u, 0x00004ec8u, 0x000006c2u, 0x0003003eu, 0x00004eb9u, 0x00004ec9u, 0x0004007cu, 0x0000003cu, 0x00004ecbu, 0x00004ec6u, 0x0004007cu, 0x00000008u, 0x00004ecdu, 0x00004ec9u, 0x00050051u, 0x00000008u, 0x00004eceu, 0x00004ecbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004ecfu, 0x00004ecbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004ed0u, 0x00004ecbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004ed1u, 0x00004eceu, 0x00004ecfu, 0x00004ed0u, 0x00004ecdu, 0x0003003eu, 0x00004ebau, 0x00004ed1u, 0x0003003eu, 0x00004e72u, 0x00004ed1u, 0x000200f9u, 0x00004ea0u, 0x000200f8u, 0x00004ea1u, 0x0003003eu, 0x00004e73u, 0x00004e9eu, 0x000500c2u, 0x00000006u, 0x00004eacu, 0x00004e9eu, 0x0000025eu, 0x0003003eu, 0x00004ea8u, 0x00004eacu, 0x000500c7u, 0x00000006u, 0x00004eaeu, 0x00004e9eu, 0x000006c2u, 0x0003003eu, 0x00004ea9u, 0x00004eaeu, 0x0004007cu, 0x00000008u, 0x00004eb0u, 0x00004eacu, 0x0004007cu, 0x00000008u, 0x00004eb6u, 0x00004eaeu, 0x00070050u, 0x00000009u, 0x00004eb7u, 0x00004eb0u, 0x00004eb0u, 0x00004eb0u, 0x00004eb6u, 0x0003003eu, 0x00004eaau, 0x00004eb7u, 0x0003003eu, 0x00004e72u, 0x00004eb7u, 0x000200f9u, 0x00004ea0u, 0x000200f8u, 0x00004ea0u, 0x000700f5u, 0x00000009u, 0x0000969fu, 0x00004eb7u, 0x00004ea1u, 0x00004ed1u, 0x00004ea2u, 0x0003003eu, 0x00004e75u, 0x0000969fu, 0x0003003eu, 0x00004501u, 0x0000969fu, 0x00050050u, 0x0000005fu, 0x0000470du, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000470eu, 0x0000470du, 0x0003003eu, 0x00006980u, 0x000044aeu, 0x0003003eu, 0x00006981u, 0x000044b1u, 0x0003003eu, 0x00004526u, 0x000020eau, 0x0003003eu, 0x00004527u, 0x0000470eu, 0x0003003eu, 0x00004528u, 0x000003c4u, 0x0003003eu, 0x00004529u, 0x0000468cu, 0x0003003eu, 0x0000452au, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004edeu, 0x00004527u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004edfu, 0x00004edeu, 0x00050084u, 0x00000006u, 0x00004ee0u, 0x000044b1u, 0x00004edfu, 0x00050080u, 0x00000006u, 0x00004ee1u, 0x000044aeu, 0x00004ee0u, 0x0003003eu, 0x00004ed2u, 0x00004ee1u, 0x00050041u, 0x00000007u, 0x00004ee2u, 0x00004527u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004ee3u, 0x00004ee2u, 0x00050080u, 0x00000006u, 0x00004ee5u, 0x00004ee1u, 0x00004ee3u, 0x0003003eu, 0x00004ed2u, 0x00004ee5u, 0x000500c7u, 0x00000006u, 0x00004ee7u, 0x00004ee5u, 0x00000efdu, 0x0003003eu, 0x00004ed2u, 0x00004ee7u, 0x0003003eu, 0x00004ed3u, 0x00004ee7u, 0x0004003du, 0x00000006u, 0x00004eeau, 0x00004edeu, 0x000500c7u, 0x00000006u, 0x00004eebu, 0x00004eeau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004eecu, 0x00004eebu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004eeeu, 0x00004ee7u, 0x00004eecu, 0x0003003eu, 0x00004ed3u, 0x00004eeeu, 0x000500c6u, 0x00000006u, 0x00004ef0u, 0x00004eeeu, 0x0000048bu, 0x0003003eu, 0x00004ed3u, 0x00004ef0u, 0x00080041u, 0x00000277u, 0x00004ef3u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004ef0u, 0x0004003du, 0x00000229u, 0x00004ef4u, 0x00004ef3u, 0x00040071u, 0x00000006u, 0x00004ef5u, 0x00004ef4u, 0x0003003eu, 0x00004ed4u, 0x00004ef5u, 0x000500c4u, 0x00000006u, 0x00004ef7u, 0x00004ef5u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004ef9u, 0x00004ef7u, 0x000003c4u, 0x0003003eu, 0x00004ed5u, 0x00004ef9u, 0x000500c6u, 0x00000006u, 0x00004efcu, 0x00004ef9u, 0x0000468cu, 0x0003003eu, 0x00004ed5u, 0x00004efcu, 0x000500c5u, 0x00000006u, 0x00004effu, 0x00000f2eu, 0x00004efcu, 0x00080041u, 0x00000270u, 0x00004f00u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004effu, 0x0004003du, 0x0000022bu, 0x00004f01u, 0x00004f00u, 0x00040071u, 0x00000006u, 0x00004f02u, 0x00004f01u, 0x0003003eu, 0x00004ed4u, 0x00004f02u, 0x000300f7u, 0x00004f04u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004f05u, 0x00004f06u, 0x000200f8u, 0x00004f06u, 0x0003003eu, 0x00004ed8u, 0x00004f02u, 0x00060050u, 0x00000353u, 0x00004f20u, 0x00004f02u, 0x00004f02u, 0x00004f02u, 0x000500c2u, 0x00000353u, 0x00004f21u, 0x00004f20u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004f23u, 0x00004f21u, 0x0000eebdu, 0x0003003eu, 0x00004f1cu, 0x00004f23u, 0x000500c4u, 0x00000353u, 0x00004f26u, 0x00004f23u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004f29u, 0x00004f23u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004f2au, 0x00004f26u, 0x00004f29u, 0x0003003eu, 0x00004f1cu, 0x00004f2au, 0x000500c7u, 0x00000006u, 0x00004f2cu, 0x00004f02u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004f2du, 0x00004f2cu, 0x000006c2u, 0x0003003eu, 0x00004f1du, 0x00004f2du, 0x0004007cu, 0x0000003cu, 0x00004f2fu, 0x00004f2au, 0x0004007cu, 0x00000008u, 0x00004f31u, 0x00004f2du, 0x00050051u, 0x00000008u, 0x00004f32u, 0x00004f2fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004f33u, 0x00004f2fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004f34u, 0x00004f2fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004f35u, 0x00004f32u, 0x00004f33u, 0x00004f34u, 0x00004f31u, 0x0003003eu, 0x00004f1eu, 0x00004f35u, 0x0003003eu, 0x00004ed6u, 0x00004f35u, 0x000200f9u, 0x00004f04u, 0x000200f8u, 0x00004f05u, 0x0003003eu, 0x00004ed7u, 0x00004f02u, 0x000500c2u, 0x00000006u, 0x00004f10u, 0x00004f02u, 0x0000025eu, 0x0003003eu, 0x00004f0cu, 0x00004f10u, 0x000500c7u, 0x00000006u, 0x00004f12u, 0x00004f02u, 0x000006c2u, 0x0003003eu, 0x00004f0du, 0x00004f12u, 0x0004007cu, 0x00000008u, 0x00004f14u, 0x00004f10u, 0x0004007cu, 0x00000008u, 0x00004f1au, 0x00004f12u, 0x00070050u, 0x00000009u, 0x00004f1bu, 0x00004f14u, 0x00004f14u, 0x00004f14u, 0x00004f1au, 0x0003003eu, 0x00004f0eu, 0x00004f1bu, 0x0003003eu, 0x00004ed6u, 0x00004f1bu, 0x000200f9u, 0x00004f04u, 0x000200f8u, 0x00004f04u, 0x000700f5u, 0x00000009u, 0x000096b7u, 0x00004f1bu, 0x00004f05u, 0x00004f35u, 0x00004f06u, 0x0003003eu, 0x00004ed9u, 0x000096b7u, 0x0003003eu, 0x00004509u, 0x000096b7u, 0x000200f9u, 0x00004700u, 0x000200f8u, 0x00004700u, 0x000700f5u, 0x00000009u, 0x00009afbu, 0x00009a59u, 0x00004e3cu, 0x000096b7u, 0x00004f04u, 0x000700f5u, 0x00000009u, 0x0000992eu, 0x0000988au, 0x00004e3cu, 0x0000969fu, 0x00004f04u, 0x000300f7u, 0x00004715u, 0x00000000u, 0x000400fau, 0x0000466du, 0x00004716u, 0x00004715u, 0x000200f8u, 0x00004716u, 0x00050050u, 0x0000005fu, 0x00004719u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x0000471au, 0x00004719u, 0x0003003eu, 0x00006984u, 0x000044aeu, 0x0003003eu, 0x00006985u, 0x000044b1u, 0x0003003eu, 0x0000452cu, 0x000020eau, 0x0003003eu, 0x0000452du, 0x0000471au, 0x0003003eu, 0x0000452eu, 0x0000048bu, 0x0003003eu, 0x0000452fu, 0x0000468cu, 0x0003003eu, 0x00004530u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004f42u, 0x0000452du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004f43u, 0x00004f42u, 0x00050084u, 0x00000006u, 0x00004f44u, 0x000044b1u, 0x00004f43u, 0x00050080u, 0x00000006u, 0x00004f45u, 0x000044aeu, 0x00004f44u, 0x0003003eu, 0x00004f36u, 0x00004f45u, 0x00050041u, 0x00000007u, 0x00004f46u, 0x0000452du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004f47u, 0x00004f46u, 0x00050080u, 0x00000006u, 0x00004f49u, 0x00004f45u, 0x00004f47u, 0x0003003eu, 0x00004f36u, 0x00004f49u, 0x000500c7u, 0x00000006u, 0x00004f4bu, 0x00004f49u, 0x00000efdu, 0x0003003eu, 0x00004f36u, 0x00004f4bu, 0x0003003eu, 0x00004f37u, 0x00004f4bu, 0x0004003du, 0x00000006u, 0x00004f4eu, 0x00004f42u, 0x000500c7u, 0x00000006u, 0x00004f4fu, 0x00004f4eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004f50u, 0x00004f4fu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004f52u, 0x00004f4bu, 0x00004f50u, 0x0003003eu, 0x00004f37u, 0x00004f52u, 0x000500c6u, 0x00000006u, 0x00004f54u, 0x00004f52u, 0x0000048bu, 0x0003003eu, 0x00004f37u, 0x00004f54u, 0x00080041u, 0x00000277u, 0x00004f57u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004f54u, 0x0004003du, 0x00000229u, 0x00004f58u, 0x00004f57u, 0x00040071u, 0x00000006u, 0x00004f59u, 0x00004f58u, 0x0003003eu, 0x00004f38u, 0x00004f59u, 0x000500c4u, 0x00000006u, 0x00004f5bu, 0x00004f59u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004f5du, 0x00004f5bu, 0x0000048bu, 0x0003003eu, 0x00004f39u, 0x00004f5du, 0x000500c6u, 0x00000006u, 0x00004f60u, 0x00004f5du, 0x0000468cu, 0x0003003eu, 0x00004f39u, 0x00004f60u, 0x000500c5u, 0x00000006u, 0x00004f63u, 0x00000f2eu, 0x00004f60u, 0x00080041u, 0x00000270u, 0x00004f64u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004f63u, 0x0004003du, 0x0000022bu, 0x00004f65u, 0x00004f64u, 0x00040071u, 0x00000006u, 0x00004f66u, 0x00004f65u, 0x0003003eu, 0x00004f38u, 0x00004f66u, 0x000300f7u, 0x00004f68u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004f69u, 0x00004f6au, 0x000200f8u, 0x00004f6au, 0x0003003eu, 0x00004f3cu, 0x00004f66u, 0x00060050u, 0x00000353u, 0x00004f84u, 0x00004f66u, 0x00004f66u, 0x00004f66u, 0x000500c2u, 0x00000353u, 0x00004f85u, 0x00004f84u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004f87u, 0x00004f85u, 0x0000eebdu, 0x0003003eu, 0x00004f80u, 0x00004f87u, 0x000500c4u, 0x00000353u, 0x00004f8au, 0x00004f87u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004f8du, 0x00004f87u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004f8eu, 0x00004f8au, 0x00004f8du, 0x0003003eu, 0x00004f80u, 0x00004f8eu, 0x000500c7u, 0x00000006u, 0x00004f90u, 0x00004f66u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004f91u, 0x00004f90u, 0x000006c2u, 0x0003003eu, 0x00004f81u, 0x00004f91u, 0x0004007cu, 0x0000003cu, 0x00004f93u, 0x00004f8eu, 0x0004007cu, 0x00000008u, 0x00004f95u, 0x00004f91u, 0x00050051u, 0x00000008u, 0x00004f96u, 0x00004f93u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004f97u, 0x00004f93u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004f98u, 0x00004f93u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004f99u, 0x00004f96u, 0x00004f97u, 0x00004f98u, 0x00004f95u, 0x0003003eu, 0x00004f82u, 0x00004f99u, 0x0003003eu, 0x00004f3au, 0x00004f99u, 0x000200f9u, 0x00004f68u, 0x000200f8u, 0x00004f69u, 0x0003003eu, 0x00004f3bu, 0x00004f66u, 0x000500c2u, 0x00000006u, 0x00004f74u, 0x00004f66u, 0x0000025eu, 0x0003003eu, 0x00004f70u, 0x00004f74u, 0x000500c7u, 0x00000006u, 0x00004f76u, 0x00004f66u, 0x000006c2u, 0x0003003eu, 0x00004f71u, 0x00004f76u, 0x0004007cu, 0x00000008u, 0x00004f78u, 0x00004f74u, 0x0004007cu, 0x00000008u, 0x00004f7eu, 0x00004f76u, 0x00070050u, 0x00000009u, 0x00004f7fu, 0x00004f78u, 0x00004f78u, 0x00004f78u, 0x00004f7eu, 0x0003003eu, 0x00004f72u, 0x00004f7fu, 0x0003003eu, 0x00004f3au, 0x00004f7fu, 0x000200f9u, 0x00004f68u, 0x000200f8u, 0x00004f68u, 0x000700f5u, 0x00000009u, 0x000096e4u, 0x00004f7fu, 0x00004f69u, 0x00004f99u, 0x00004f6au, 0x0003003eu, 0x00004f3du, 0x000096e4u, 0x0003003eu, 0x00004511u, 0x000096e4u, 0x000200f9u, 0x00004715u, 0x000200f8u, 0x00004715u, 0x000700f5u, 0x00000009u, 0x00009be0u, 0x00009b3du, 0x00004700u, 0x000096e4u, 0x00004f68u, 0x000200f9u, 0x0000468fu, 0x000200f8u, 0x00004691u, 0x0004007cu, 0x000000a2u, 0x000046bfu, 0x000094feu, 0x0004007cu, 0x00000006u, 0x000046c2u, 0x000044c0u, 0x000600a9u, 0x00000008u, 0x000046c4u, 0x00004675u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000046c5u, 0x000046c4u, 0x0003003eu, 0x00006968u, 0x000044aeu, 0x0003003eu, 0x00006969u, 0x000044b1u, 0x0003003eu, 0x000044fbu, 0x000020eau, 0x0003003eu, 0x000044fcu, 0x000046bfu, 0x0003003eu, 0x000044fdu, 0x000046c2u, 0x0003003eu, 0x000044feu, 0x000046c5u, 0x0003003eu, 0x000044ffu, 0x0000468cu, 0x0003003eu, 0x00004500u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004c4bu, 0x000044fcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004c4cu, 0x00004c4bu, 0x00050084u, 0x00000006u, 0x00004c4du, 0x000044b1u, 0x00004c4cu, 0x00050080u, 0x00000006u, 0x00004c4eu, 0x000044aeu, 0x00004c4du, 0x0003003eu, 0x00004c3eu, 0x00004c4eu, 0x00050041u, 0x00000007u, 0x00004c4fu, 0x000044fcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004c50u, 0x00004c4fu, 0x000500c2u, 0x00000006u, 0x00004c51u, 0x00004c50u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004c53u, 0x00004c4eu, 0x00004c51u, 0x0003003eu, 0x00004c3eu, 0x00004c53u, 0x000500c7u, 0x00000006u, 0x00004c55u, 0x00004c53u, 0x00000efdu, 0x0003003eu, 0x00004c3eu, 0x00004c55u, 0x0004003du, 0x00000006u, 0x00004c57u, 0x00004c4fu, 0x000400c8u, 0x00000006u, 0x00004c58u, 0x00004c57u, 0x000500c7u, 0x00000006u, 0x00004c59u, 0x00004c58u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004c5au, 0x00004c59u, 0x00000701u, 0x0003003eu, 0x00004c3fu, 0x00004c5au, 0x0003003eu, 0x00004c40u, 0x00004c55u, 0x0004003du, 0x00000006u, 0x00004c5du, 0x00004c4bu, 0x000500c7u, 0x00000006u, 0x00004c5eu, 0x00004c5du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004c5fu, 0x00004c5eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004c61u, 0x00004c55u, 0x00004c5fu, 0x0003003eu, 0x00004c40u, 0x00004c61u, 0x000500c6u, 0x00000006u, 0x00004c63u, 0x00004c61u, 0x0000048bu, 0x0003003eu, 0x00004c40u, 0x00004c63u, 0x00080041u, 0x00000277u, 0x00004c66u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004c63u, 0x0004003du, 0x00000229u, 0x00004c67u, 0x00004c66u, 0x00040071u, 0x00000006u, 0x00004c68u, 0x00004c67u, 0x0003003eu, 0x00004c41u, 0x00004c68u, 0x000500c2u, 0x00000006u, 0x00004c6bu, 0x00004c68u, 0x00004c5au, 0x000500c7u, 0x00000006u, 0x00004c6cu, 0x00004c6bu, 0x00000e6eu, 0x0003003eu, 0x00004c41u, 0x00004c6cu, 0x000500c4u, 0x00000006u, 0x00004c6eu, 0x000046c2u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004c70u, 0x00004c6cu, 0x00004c6eu, 0x0003003eu, 0x00004c41u, 0x00004c70u, 0x000500c4u, 0x00000006u, 0x00004c72u, 0x00004c70u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004c74u, 0x00004c72u, 0x000046c5u, 0x0003003eu, 0x00004c42u, 0x00004c74u, 0x000500c6u, 0x00000006u, 0x00004c77u, 0x00004c74u, 0x0000468cu, 0x0003003eu, 0x00004c42u, 0x00004c77u, 0x000500c5u, 0x00000006u, 0x00004c7au, 0x00000f2eu, 0x00004c77u, 0x00080041u, 0x00000270u, 0x00004c7bu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004c7au, 0x0004003du, 0x0000022bu, 0x00004c7cu, 0x00004c7bu, 0x00040071u, 0x00000006u, 0x00004c7du, 0x00004c7cu, 0x0003003eu, 0x00004c41u, 0x00004c7du, 0x000300f7u, 0x00004c7fu, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004c80u, 0x00004c81u, 0x000200f8u, 0x00004c81u, 0x0003003eu, 0x00004c45u, 0x00004c7du, 0x00060050u, 0x00000353u, 0x00004c9bu, 0x00004c7du, 0x00004c7du, 0x00004c7du, 0x000500c2u, 0x00000353u, 0x00004c9cu, 0x00004c9bu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004c9eu, 0x00004c9cu, 0x0000eebdu, 0x0003003eu, 0x00004c97u, 0x00004c9eu, 0x000500c4u, 0x00000353u, 0x00004ca1u, 0x00004c9eu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004ca4u, 0x00004c9eu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004ca5u, 0x00004ca1u, 0x00004ca4u, 0x0003003eu, 0x00004c97u, 0x00004ca5u, 0x000500c7u, 0x00000006u, 0x00004ca7u, 0x00004c7du, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004ca8u, 0x00004ca7u, 0x000006c2u, 0x0003003eu, 0x00004c98u, 0x00004ca8u, 0x0004007cu, 0x0000003cu, 0x00004caau, 0x00004ca5u, 0x0004007cu, 0x00000008u, 0x00004cacu, 0x00004ca8u, 0x00050051u, 0x00000008u, 0x00004cadu, 0x00004caau, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004caeu, 0x00004caau, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004cafu, 0x00004caau, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004cb0u, 0x00004cadu, 0x00004caeu, 0x00004cafu, 0x00004cacu, 0x0003003eu, 0x00004c99u, 0x00004cb0u, 0x0003003eu, 0x00004c43u, 0x00004cb0u, 0x000200f9u, 0x00004c7fu, 0x000200f8u, 0x00004c80u, 0x0003003eu, 0x00004c44u, 0x00004c7du, 0x000500c2u, 0x00000006u, 0x00004c8bu, 0x00004c7du, 0x0000025eu, 0x0003003eu, 0x00004c87u, 0x00004c8bu, 0x000500c7u, 0x00000006u, 0x00004c8du, 0x00004c7du, 0x000006c2u, 0x0003003eu, 0x00004c88u, 0x00004c8du, 0x0004007cu, 0x00000008u, 0x00004c8fu, 0x00004c8bu, 0x0004007cu, 0x00000008u, 0x00004c95u, 0x00004c8du, 0x00070050u, 0x00000009u, 0x00004c96u, 0x00004c8fu, 0x00004c8fu, 0x00004c8fu, 0x00004c95u, 0x0003003eu, 0x00004c89u, 0x00004c96u, 0x0003003eu, 0x00004c43u, 0x00004c96u, 0x000200f9u, 0x00004c7fu, 0x000200f8u, 0x00004c7fu, 0x000700f5u, 0x00000009u, 0x000096e5u, 0x00004c96u, 0x00004c80u, 0x00004cb0u, 0x00004c81u, 0x0003003eu, 0x00004c46u, 0x000096e5u, 0x0003003eu, 0x000044f9u, 0x000096e5u, 0x000300f7u, 0x000046ccu, 0x00000000u, 0x000400fau, 0x00002101u, 0x000046cdu, 0x000046ccu, 0x000200f8u, 0x000046cdu, 0x00050050u, 0x0000005fu, 0x000046d0u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000046d1u, 0x000046d0u, 0x0003003eu, 0x0000696cu, 0x000044aeu, 0x0003003eu, 0x0000696du, 0x000044b1u, 0x0003003eu, 0x00004503u, 0x000020eau, 0x0003003eu, 0x00004504u, 0x000046d1u, 0x0003003eu, 0x00004505u, 0x000046c2u, 0x0003003eu, 0x00004506u, 0x00000485u, 0x0003003eu, 0x00004507u, 0x0000468cu, 0x0003003eu, 0x00004508u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004cbeu, 0x00004504u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004cbfu, 0x00004cbeu, 0x00050084u, 0x00000006u, 0x00004cc0u, 0x000044b1u, 0x00004cbfu, 0x00050080u, 0x00000006u, 0x00004cc1u, 0x000044aeu, 0x00004cc0u, 0x0003003eu, 0x00004cb1u, 0x00004cc1u, 0x00050041u, 0x00000007u, 0x00004cc2u, 0x00004504u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004cc3u, 0x00004cc2u, 0x000500c2u, 0x00000006u, 0x00004cc4u, 0x00004cc3u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004cc6u, 0x00004cc1u, 0x00004cc4u, 0x0003003eu, 0x00004cb1u, 0x00004cc6u, 0x000500c7u, 0x00000006u, 0x00004cc8u, 0x00004cc6u, 0x00000efdu, 0x0003003eu, 0x00004cb1u, 0x00004cc8u, 0x0004003du, 0x00000006u, 0x00004ccau, 0x00004cc2u, 0x000400c8u, 0x00000006u, 0x00004ccbu, 0x00004ccau, 0x000500c7u, 0x00000006u, 0x00004cccu, 0x00004ccbu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004ccdu, 0x00004cccu, 0x00000701u, 0x0003003eu, 0x00004cb2u, 0x00004ccdu, 0x0003003eu, 0x00004cb3u, 0x00004cc8u, 0x0004003du, 0x00000006u, 0x00004cd0u, 0x00004cbeu, 0x000500c7u, 0x00000006u, 0x00004cd1u, 0x00004cd0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004cd2u, 0x00004cd1u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004cd4u, 0x00004cc8u, 0x00004cd2u, 0x0003003eu, 0x00004cb3u, 0x00004cd4u, 0x000500c6u, 0x00000006u, 0x00004cd6u, 0x00004cd4u, 0x0000048bu, 0x0003003eu, 0x00004cb3u, 0x00004cd6u, 0x00080041u, 0x00000277u, 0x00004cd9u, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004cd6u, 0x0004003du, 0x00000229u, 0x00004cdau, 0x00004cd9u, 0x00040071u, 0x00000006u, 0x00004cdbu, 0x00004cdau, 0x0003003eu, 0x00004cb4u, 0x00004cdbu, 0x000500c2u, 0x00000006u, 0x00004cdeu, 0x00004cdbu, 0x00004ccdu, 0x000500c7u, 0x00000006u, 0x00004cdfu, 0x00004cdeu, 0x00000e6eu, 0x0003003eu, 0x00004cb4u, 0x00004cdfu, 0x000500c5u, 0x00000006u, 0x00004ce3u, 0x00004cdfu, 0x00004c6eu, 0x0003003eu, 0x00004cb4u, 0x00004ce3u, 0x000500c4u, 0x00000006u, 0x00004ce5u, 0x00004ce3u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004ce7u, 0x00004ce5u, 0x00000485u, 0x0003003eu, 0x00004cb5u, 0x00004ce7u, 0x000500c6u, 0x00000006u, 0x00004ceau, 0x00004ce7u, 0x0000468cu, 0x0003003eu, 0x00004cb5u, 0x00004ceau, 0x000500c5u, 0x00000006u, 0x00004cedu, 0x00000f2eu, 0x00004ceau, 0x00080041u, 0x00000270u, 0x00004ceeu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004cedu, 0x0004003du, 0x0000022bu, 0x00004cefu, 0x00004ceeu, 0x00040071u, 0x00000006u, 0x00004cf0u, 0x00004cefu, 0x0003003eu, 0x00004cb4u, 0x00004cf0u, 0x000300f7u, 0x00004cf2u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004cf3u, 0x00004cf4u, 0x000200f8u, 0x00004cf4u, 0x0003003eu, 0x00004cb8u, 0x00004cf0u, 0x00060050u, 0x00000353u, 0x00004d0eu, 0x00004cf0u, 0x00004cf0u, 0x00004cf0u, 0x000500c2u, 0x00000353u, 0x00004d0fu, 0x00004d0eu, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004d11u, 0x00004d0fu, 0x0000eebdu, 0x0003003eu, 0x00004d0au, 0x00004d11u, 0x000500c4u, 0x00000353u, 0x00004d14u, 0x00004d11u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004d17u, 0x00004d11u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004d18u, 0x00004d14u, 0x00004d17u, 0x0003003eu, 0x00004d0au, 0x00004d18u, 0x000500c7u, 0x00000006u, 0x00004d1au, 0x00004cf0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004d1bu, 0x00004d1au, 0x000006c2u, 0x0003003eu, 0x00004d0bu, 0x00004d1bu, 0x0004007cu, 0x0000003cu, 0x00004d1du, 0x00004d18u, 0x0004007cu, 0x00000008u, 0x00004d1fu, 0x00004d1bu, 0x00050051u, 0x00000008u, 0x00004d20u, 0x00004d1du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004d21u, 0x00004d1du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004d22u, 0x00004d1du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004d23u, 0x00004d20u, 0x00004d21u, 0x00004d22u, 0x00004d1fu, 0x0003003eu, 0x00004d0cu, 0x00004d23u, 0x0003003eu, 0x00004cb6u, 0x00004d23u, 0x000200f9u, 0x00004cf2u, 0x000200f8u, 0x00004cf3u, 0x0003003eu, 0x00004cb7u, 0x00004cf0u, 0x000500c2u, 0x00000006u, 0x00004cfeu, 0x00004cf0u, 0x0000025eu, 0x0003003eu, 0x00004cfau, 0x00004cfeu, 0x000500c7u, 0x00000006u, 0x00004d00u, 0x00004cf0u, 0x000006c2u, 0x0003003eu, 0x00004cfbu, 0x00004d00u, 0x0004007cu, 0x00000008u, 0x00004d02u, 0x00004cfeu, 0x0004007cu, 0x00000008u, 0x00004d08u, 0x00004d00u, 0x00070050u, 0x00000009u, 0x00004d09u, 0x00004d02u, 0x00004d02u, 0x00004d02u, 0x00004d08u, 0x0003003eu, 0x00004cfcu, 0x00004d09u, 0x0003003eu, 0x00004cb6u, 0x00004d09u, 0x000200f9u, 0x00004cf2u, 0x000200f8u, 0x00004cf2u, 0x000700f5u, 0x00000009u, 0x000096fau, 0x00004d09u, 0x00004cf3u, 0x00004d23u, 0x00004cf4u, 0x0003003eu, 0x00004cb9u, 0x000096fau, 0x0003003eu, 0x00004501u, 0x000096fau, 0x00050050u, 0x0000005fu, 0x000046dcu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000046ddu, 0x000046dcu, 0x0003003eu, 0x00006970u, 0x000044aeu, 0x0003003eu, 0x00006971u, 0x000044b1u, 0x0003003eu, 0x0000450bu, 0x000020eau, 0x0003003eu, 0x0000450cu, 0x000046ddu, 0x0003003eu, 0x0000450du, 0x000046c2u, 0x0003003eu, 0x0000450eu, 0x000003c4u, 0x0003003eu, 0x0000450fu, 0x0000468cu, 0x0003003eu, 0x00004510u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004d31u, 0x0000450cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004d32u, 0x00004d31u, 0x00050084u, 0x00000006u, 0x00004d33u, 0x000044b1u, 0x00004d32u, 0x00050080u, 0x00000006u, 0x00004d34u, 0x000044aeu, 0x00004d33u, 0x0003003eu, 0x00004d24u, 0x00004d34u, 0x00050041u, 0x00000007u, 0x00004d35u, 0x0000450cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004d36u, 0x00004d35u, 0x000500c2u, 0x00000006u, 0x00004d37u, 0x00004d36u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004d39u, 0x00004d34u, 0x00004d37u, 0x0003003eu, 0x00004d24u, 0x00004d39u, 0x000500c7u, 0x00000006u, 0x00004d3bu, 0x00004d39u, 0x00000efdu, 0x0003003eu, 0x00004d24u, 0x00004d3bu, 0x0004003du, 0x00000006u, 0x00004d3du, 0x00004d35u, 0x000400c8u, 0x00000006u, 0x00004d3eu, 0x00004d3du, 0x000500c7u, 0x00000006u, 0x00004d3fu, 0x00004d3eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004d40u, 0x00004d3fu, 0x00000701u, 0x0003003eu, 0x00004d25u, 0x00004d40u, 0x0003003eu, 0x00004d26u, 0x00004d3bu, 0x0004003du, 0x00000006u, 0x00004d43u, 0x00004d31u, 0x000500c7u, 0x00000006u, 0x00004d44u, 0x00004d43u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004d45u, 0x00004d44u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004d47u, 0x00004d3bu, 0x00004d45u, 0x0003003eu, 0x00004d26u, 0x00004d47u, 0x000500c6u, 0x00000006u, 0x00004d49u, 0x00004d47u, 0x0000048bu, 0x0003003eu, 0x00004d26u, 0x00004d49u, 0x00080041u, 0x00000277u, 0x00004d4cu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004d49u, 0x0004003du, 0x00000229u, 0x00004d4du, 0x00004d4cu, 0x00040071u, 0x00000006u, 0x00004d4eu, 0x00004d4du, 0x0003003eu, 0x00004d27u, 0x00004d4eu, 0x000500c2u, 0x00000006u, 0x00004d51u, 0x00004d4eu, 0x00004d40u, 0x000500c7u, 0x00000006u, 0x00004d52u, 0x00004d51u, 0x00000e6eu, 0x0003003eu, 0x00004d27u, 0x00004d52u, 0x000500c5u, 0x00000006u, 0x00004d56u, 0x00004d52u, 0x00004c6eu, 0x0003003eu, 0x00004d27u, 0x00004d56u, 0x000500c4u, 0x00000006u, 0x00004d58u, 0x00004d56u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004d5au, 0x00004d58u, 0x000003c4u, 0x0003003eu, 0x00004d28u, 0x00004d5au, 0x000500c6u, 0x00000006u, 0x00004d5du, 0x00004d5au, 0x0000468cu, 0x0003003eu, 0x00004d28u, 0x00004d5du, 0x000500c5u, 0x00000006u, 0x00004d60u, 0x00000f2eu, 0x00004d5du, 0x00080041u, 0x00000270u, 0x00004d61u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004d60u, 0x0004003du, 0x0000022bu, 0x00004d62u, 0x00004d61u, 0x00040071u, 0x00000006u, 0x00004d63u, 0x00004d62u, 0x0003003eu, 0x00004d27u, 0x00004d63u, 0x000300f7u, 0x00004d65u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004d66u, 0x00004d67u, 0x000200f8u, 0x00004d67u, 0x0003003eu, 0x00004d2bu, 0x00004d63u, 0x00060050u, 0x00000353u, 0x00004d81u, 0x00004d63u, 0x00004d63u, 0x00004d63u, 0x000500c2u, 0x00000353u, 0x00004d82u, 0x00004d81u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004d84u, 0x00004d82u, 0x0000eebdu, 0x0003003eu, 0x00004d7du, 0x00004d84u, 0x000500c4u, 0x00000353u, 0x00004d87u, 0x00004d84u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004d8au, 0x00004d84u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004d8bu, 0x00004d87u, 0x00004d8au, 0x0003003eu, 0x00004d7du, 0x00004d8bu, 0x000500c7u, 0x00000006u, 0x00004d8du, 0x00004d63u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004d8eu, 0x00004d8du, 0x000006c2u, 0x0003003eu, 0x00004d7eu, 0x00004d8eu, 0x0004007cu, 0x0000003cu, 0x00004d90u, 0x00004d8bu, 0x0004007cu, 0x00000008u, 0x00004d92u, 0x00004d8eu, 0x00050051u, 0x00000008u, 0x00004d93u, 0x00004d90u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004d94u, 0x00004d90u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004d95u, 0x00004d90u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004d96u, 0x00004d93u, 0x00004d94u, 0x00004d95u, 0x00004d92u, 0x0003003eu, 0x00004d7fu, 0x00004d96u, 0x0003003eu, 0x00004d29u, 0x00004d96u, 0x000200f9u, 0x00004d65u, 0x000200f8u, 0x00004d66u, 0x0003003eu, 0x00004d2au, 0x00004d63u, 0x000500c2u, 0x00000006u, 0x00004d71u, 0x00004d63u, 0x0000025eu, 0x0003003eu, 0x00004d6du, 0x00004d71u, 0x000500c7u, 0x00000006u, 0x00004d73u, 0x00004d63u, 0x000006c2u, 0x0003003eu, 0x00004d6eu, 0x00004d73u, 0x0004007cu, 0x00000008u, 0x00004d75u, 0x00004d71u, 0x0004007cu, 0x00000008u, 0x00004d7bu, 0x00004d73u, 0x00070050u, 0x00000009u, 0x00004d7cu, 0x00004d75u, 0x00004d75u, 0x00004d75u, 0x00004d7bu, 0x0003003eu, 0x00004d6fu, 0x00004d7cu, 0x0003003eu, 0x00004d29u, 0x00004d7cu, 0x000200f9u, 0x00004d65u, 0x000200f8u, 0x00004d65u, 0x000700f5u, 0x00000009u, 0x00009710u, 0x00004d7cu, 0x00004d66u, 0x00004d96u, 0x00004d67u, 0x0003003eu, 0x00004d2cu, 0x00009710u, 0x0003003eu, 0x00004509u, 0x00009710u, 0x000200f9u, 0x000046ccu, 0x000200f8u, 0x000046ccu, 0x000700f5u, 0x00000009u, 0x00009af7u, 0x00009a59u, 0x00004c7fu, 0x00009710u, 0x00004d65u, 0x000700f5u, 0x00000009u, 0x00009929u, 0x0000988au, 0x00004c7fu, 0x000096fau, 0x00004d65u, 0x000300f7u, 0x000046e7u, 0x00000000u, 0x000400fau, 0x0000466du, 0x000046e8u, 0x000046e7u, 0x000200f8u, 0x000046e8u, 0x00050050u, 0x0000005fu, 0x000046ebu, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000046ecu, 0x000046ebu, 0x0003003eu, 0x00006974u, 0x000044aeu, 0x0003003eu, 0x00006975u, 0x000044b1u, 0x0003003eu, 0x00004513u, 0x000020eau, 0x0003003eu, 0x00004514u, 0x000046ecu, 0x0003003eu, 0x00004515u, 0x000046c2u, 0x0003003eu, 0x00004516u, 0x0000048bu, 0x0003003eu, 0x00004517u, 0x0000468cu, 0x0003003eu, 0x00004518u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004da4u, 0x00004514u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004da5u, 0x00004da4u, 0x00050084u, 0x00000006u, 0x00004da6u, 0x000044b1u, 0x00004da5u, 0x00050080u, 0x00000006u, 0x00004da7u, 0x000044aeu, 0x00004da6u, 0x0003003eu, 0x00004d97u, 0x00004da7u, 0x00050041u, 0x00000007u, 0x00004da8u, 0x00004514u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004da9u, 0x00004da8u, 0x000500c2u, 0x00000006u, 0x00004daau, 0x00004da9u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004dacu, 0x00004da7u, 0x00004daau, 0x0003003eu, 0x00004d97u, 0x00004dacu, 0x000500c7u, 0x00000006u, 0x00004daeu, 0x00004dacu, 0x00000efdu, 0x0003003eu, 0x00004d97u, 0x00004daeu, 0x0004003du, 0x00000006u, 0x00004db0u, 0x00004da8u, 0x000400c8u, 0x00000006u, 0x00004db1u, 0x00004db0u, 0x000500c7u, 0x00000006u, 0x00004db2u, 0x00004db1u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004db3u, 0x00004db2u, 0x00000701u, 0x0003003eu, 0x00004d98u, 0x00004db3u, 0x0003003eu, 0x00004d99u, 0x00004daeu, 0x0004003du, 0x00000006u, 0x00004db6u, 0x00004da4u, 0x000500c7u, 0x00000006u, 0x00004db7u, 0x00004db6u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004db8u, 0x00004db7u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004dbau, 0x00004daeu, 0x00004db8u, 0x0003003eu, 0x00004d99u, 0x00004dbau, 0x000500c6u, 0x00000006u, 0x00004dbcu, 0x00004dbau, 0x0000048bu, 0x0003003eu, 0x00004d99u, 0x00004dbcu, 0x00080041u, 0x00000277u, 0x00004dbfu, 0x00000e65u, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004dbcu, 0x0004003du, 0x00000229u, 0x00004dc0u, 0x00004dbfu, 0x00040071u, 0x00000006u, 0x00004dc1u, 0x00004dc0u, 0x0003003eu, 0x00004d9au, 0x00004dc1u, 0x000500c2u, 0x00000006u, 0x00004dc4u, 0x00004dc1u, 0x00004db3u, 0x000500c7u, 0x00000006u, 0x00004dc5u, 0x00004dc4u, 0x00000e6eu, 0x0003003eu, 0x00004d9au, 0x00004dc5u, 0x000500c5u, 0x00000006u, 0x00004dc9u, 0x00004dc5u, 0x00004c6eu, 0x0003003eu, 0x00004d9au, 0x00004dc9u, 0x000500c4u, 0x00000006u, 0x00004dcbu, 0x00004dc9u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004dcdu, 0x00004dcbu, 0x0000048bu, 0x0003003eu, 0x00004d9bu, 0x00004dcdu, 0x000500c6u, 0x00000006u, 0x00004dd0u, 0x00004dcdu, 0x0000468cu, 0x0003003eu, 0x00004d9bu, 0x00004dd0u, 0x000500c5u, 0x00000006u, 0x00004dd3u, 0x00000f2eu, 0x00004dd0u, 0x00080041u, 0x00000270u, 0x00004dd4u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004dd3u, 0x0004003du, 0x0000022bu, 0x00004dd5u, 0x00004dd4u, 0x00040071u, 0x00000006u, 0x00004dd6u, 0x00004dd5u, 0x0003003eu, 0x00004d9au, 0x00004dd6u, 0x000300f7u, 0x00004dd8u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004dd9u, 0x00004ddau, 0x000200f8u, 0x00004ddau, 0x0003003eu, 0x00004d9eu, 0x00004dd6u, 0x00060050u, 0x00000353u, 0x00004df4u, 0x00004dd6u, 0x00004dd6u, 0x00004dd6u, 0x000500c2u, 0x00000353u, 0x00004df5u, 0x00004df4u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004df7u, 0x00004df5u, 0x0000eebdu, 0x0003003eu, 0x00004df0u, 0x00004df7u, 0x000500c4u, 0x00000353u, 0x00004dfau, 0x00004df7u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004dfdu, 0x00004df7u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004dfeu, 0x00004dfau, 0x00004dfdu, 0x0003003eu, 0x00004df0u, 0x00004dfeu, 0x000500c7u, 0x00000006u, 0x00004e00u, 0x00004dd6u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004e01u, 0x00004e00u, 0x000006c2u, 0x0003003eu, 0x00004df1u, 0x00004e01u, 0x0004007cu, 0x0000003cu, 0x00004e03u, 0x00004dfeu, 0x0004007cu, 0x00000008u, 0x00004e05u, 0x00004e01u, 0x00050051u, 0x00000008u, 0x00004e06u, 0x00004e03u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004e07u, 0x00004e03u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004e08u, 0x00004e03u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004e09u, 0x00004e06u, 0x00004e07u, 0x00004e08u, 0x00004e05u, 0x0003003eu, 0x00004df2u, 0x00004e09u, 0x0003003eu, 0x00004d9cu, 0x00004e09u, 0x000200f9u, 0x00004dd8u, 0x000200f8u, 0x00004dd9u, 0x0003003eu, 0x00004d9du, 0x00004dd6u, 0x000500c2u, 0x00000006u, 0x00004de4u, 0x00004dd6u, 0x0000025eu, 0x0003003eu, 0x00004de0u, 0x00004de4u, 0x000500c7u, 0x00000006u, 0x00004de6u, 0x00004dd6u, 0x000006c2u, 0x0003003eu, 0x00004de1u, 0x00004de6u, 0x0004007cu, 0x00000008u, 0x00004de8u, 0x00004de4u, 0x0004007cu, 0x00000008u, 0x00004deeu, 0x00004de6u, 0x00070050u, 0x00000009u, 0x00004defu, 0x00004de8u, 0x00004de8u, 0x00004de8u, 0x00004deeu, 0x0003003eu, 0x00004de2u, 0x00004defu, 0x0003003eu, 0x00004d9cu, 0x00004defu, 0x000200f9u, 0x00004dd8u, 0x000200f8u, 0x00004dd8u, 0x000700f5u, 0x00000009u, 0x0000973cu, 0x00004defu, 0x00004dd9u, 0x00004e09u, 0x00004ddau, 0x0003003eu, 0x00004d9fu, 0x0000973cu, 0x0003003eu, 0x00004511u, 0x0000973cu, 0x000200f9u, 0x000046e7u, 0x000200f8u, 0x000046e7u, 0x000700f5u, 0x00000009u, 0x00009bdbu, 0x00009b3du, 0x000046ccu, 0x0000973cu, 0x00004dd8u, 0x000200f9u, 0x0000468fu, 0x000200f8u, 0x00004690u, 0x0004007cu, 0x000000a2u, 0x00004694u, 0x000094feu, 0x000600a9u, 0x00000008u, 0x00004696u, 0x00004675u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00004697u, 0x00004696u, 0x0003003eu, 0x00006988u, 0x000044aeu, 0x0003003eu, 0x00006989u, 0x000044b1u, 0x0003003eu, 0x00004532u, 0x000020eau, 0x0003003eu, 0x00004533u, 0x00004694u, 0x0003003eu, 0x00004534u, 0x00004697u, 0x0003003eu, 0x00004535u, 0x0000468cu, 0x0003003eu, 0x00004536u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004aaeu, 0x00004533u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004aafu, 0x00004aaeu, 0x00050084u, 0x00000006u, 0x00004ab0u, 0x000044b1u, 0x00004aafu, 0x00050080u, 0x00000006u, 0x00004ab1u, 0x000044aeu, 0x00004ab0u, 0x0003003eu, 0x00004aa2u, 0x00004ab1u, 0x00050041u, 0x00000007u, 0x00004ab2u, 0x00004533u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004ab3u, 0x00004ab2u, 0x00050084u, 0x00000006u, 0x00004ab4u, 0x00004ab3u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004ab6u, 0x00004ab1u, 0x00004ab4u, 0x0003003eu, 0x00004aa2u, 0x00004ab6u, 0x000500c7u, 0x00000006u, 0x00004ab8u, 0x00004ab6u, 0x00000efdu, 0x0003003eu, 0x00004aa2u, 0x00004ab8u, 0x000500c2u, 0x00000006u, 0x00004abau, 0x00004ab8u, 0x00000212u, 0x0003003eu, 0x00004aa3u, 0x00004abau, 0x0004003du, 0x00000006u, 0x00004abcu, 0x00004aaeu, 0x000500c7u, 0x00000006u, 0x00004abdu, 0x00004abcu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004abeu, 0x00004abdu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004ac0u, 0x00004abau, 0x00004abeu, 0x0003003eu, 0x00004aa3u, 0x00004ac0u, 0x000500c6u, 0x00000006u, 0x00004ac2u, 0x00004ac0u, 0x00000485u, 0x0003003eu, 0x00004aa3u, 0x00004ac2u, 0x00080041u, 0x00000270u, 0x00004ac5u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004ac2u, 0x0004003du, 0x0000022bu, 0x00004ac6u, 0x00004ac5u, 0x00040071u, 0x00000006u, 0x00004ac7u, 0x00004ac6u, 0x0003003eu, 0x00004aa4u, 0x00004ac7u, 0x000500c2u, 0x00000006u, 0x00004ac9u, 0x00004ac7u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004acau, 0x00004ac9u, 0x00000fccu, 0x00050080u, 0x00000006u, 0x00004accu, 0x00004acau, 0x00004697u, 0x0003003eu, 0x00004aa5u, 0x00004accu, 0x000500c6u, 0x00000006u, 0x00004acfu, 0x00004accu, 0x0000468cu, 0x0003003eu, 0x00004aa5u, 0x00004acfu, 0x000500c5u, 0x00000006u, 0x00004ad2u, 0x00000f2eu, 0x00004acfu, 0x00080041u, 0x00000270u, 0x00004ad3u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004ad2u, 0x0004003du, 0x0000022bu, 0x00004ad4u, 0x00004ad3u, 0x00040071u, 0x00000006u, 0x00004ad5u, 0x00004ad4u, 0x0003003eu, 0x00004aa4u, 0x00004ad5u, 0x000300f7u, 0x00004ad7u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004ad8u, 0x00004ad9u, 0x000200f8u, 0x00004ad9u, 0x0003003eu, 0x00004aa8u, 0x00004ad5u, 0x00060050u, 0x00000353u, 0x00004af3u, 0x00004ad5u, 0x00004ad5u, 0x00004ad5u, 0x000500c2u, 0x00000353u, 0x00004af4u, 0x00004af3u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004af6u, 0x00004af4u, 0x0000eebdu, 0x0003003eu, 0x00004aefu, 0x00004af6u, 0x000500c4u, 0x00000353u, 0x00004af9u, 0x00004af6u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004afcu, 0x00004af6u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004afdu, 0x00004af9u, 0x00004afcu, 0x0003003eu, 0x00004aefu, 0x00004afdu, 0x000500c7u, 0x00000006u, 0x00004affu, 0x00004ad5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004b00u, 0x00004affu, 0x000006c2u, 0x0003003eu, 0x00004af0u, 0x00004b00u, 0x0004007cu, 0x0000003cu, 0x00004b02u, 0x00004afdu, 0x0004007cu, 0x00000008u, 0x00004b04u, 0x00004b00u, 0x00050051u, 0x00000008u, 0x00004b05u, 0x00004b02u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004b06u, 0x00004b02u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004b07u, 0x00004b02u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004b08u, 0x00004b05u, 0x00004b06u, 0x00004b07u, 0x00004b04u, 0x0003003eu, 0x00004af1u, 0x00004b08u, 0x0003003eu, 0x00004aa6u, 0x00004b08u, 0x000200f9u, 0x00004ad7u, 0x000200f8u, 0x00004ad8u, 0x0003003eu, 0x00004aa7u, 0x00004ad5u, 0x000500c2u, 0x00000006u, 0x00004ae3u, 0x00004ad5u, 0x0000025eu, 0x0003003eu, 0x00004adfu, 0x00004ae3u, 0x000500c7u, 0x00000006u, 0x00004ae5u, 0x00004ad5u, 0x000006c2u, 0x0003003eu, 0x00004ae0u, 0x00004ae5u, 0x0004007cu, 0x00000008u, 0x00004ae7u, 0x00004ae3u, 0x0004007cu, 0x00000008u, 0x00004aedu, 0x00004ae5u, 0x00070050u, 0x00000009u, 0x00004aeeu, 0x00004ae7u, 0x00004ae7u, 0x00004ae7u, 0x00004aedu, 0x0003003eu, 0x00004ae1u, 0x00004aeeu, 0x0003003eu, 0x00004aa6u, 0x00004aeeu, 0x000200f9u, 0x00004ad7u, 0x000200f8u, 0x00004ad7u, 0x000700f5u, 0x00000009u, 0x0000973du, 0x00004aeeu, 0x00004ad8u, 0x00004b08u, 0x00004ad9u, 0x0003003eu, 0x00004aa9u, 0x0000973du, 0x0003003eu, 0x000044f9u, 0x0000973du, 0x000300f7u, 0x0000469eu, 0x00000000u, 0x000400fau, 0x00002101u, 0x0000469fu, 0x0000469eu, 0x000200f8u, 0x0000469fu, 0x00050050u, 0x0000005fu, 0x000046a2u, 0x000094b3u, 0x00004662u, 0x0004007cu, 0x000000a2u, 0x000046a3u, 0x000046a2u, 0x0003003eu, 0x0000698cu, 0x000044aeu, 0x0003003eu, 0x0000698du, 0x000044b1u, 0x0003003eu, 0x00004538u, 0x000020eau, 0x0003003eu, 0x00004539u, 0x000046a3u, 0x0003003eu, 0x0000453au, 0x00000485u, 0x0003003eu, 0x0000453bu, 0x0000468cu, 0x0003003eu, 0x0000453cu, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004b15u, 0x00004539u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004b16u, 0x00004b15u, 0x00050084u, 0x00000006u, 0x00004b17u, 0x000044b1u, 0x00004b16u, 0x00050080u, 0x00000006u, 0x00004b18u, 0x000044aeu, 0x00004b17u, 0x0003003eu, 0x00004b09u, 0x00004b18u, 0x00050041u, 0x00000007u, 0x00004b19u, 0x00004539u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004b1au, 0x00004b19u, 0x00050084u, 0x00000006u, 0x00004b1bu, 0x00004b1au, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004b1du, 0x00004b18u, 0x00004b1bu, 0x0003003eu, 0x00004b09u, 0x00004b1du, 0x000500c7u, 0x00000006u, 0x00004b1fu, 0x00004b1du, 0x00000efdu, 0x0003003eu, 0x00004b09u, 0x00004b1fu, 0x000500c2u, 0x00000006u, 0x00004b21u, 0x00004b1fu, 0x00000212u, 0x0003003eu, 0x00004b0au, 0x00004b21u, 0x0004003du, 0x00000006u, 0x00004b23u, 0x00004b15u, 0x000500c7u, 0x00000006u, 0x00004b24u, 0x00004b23u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004b25u, 0x00004b24u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004b27u, 0x00004b21u, 0x00004b25u, 0x0003003eu, 0x00004b0au, 0x00004b27u, 0x000500c6u, 0x00000006u, 0x00004b29u, 0x00004b27u, 0x00000485u, 0x0003003eu, 0x00004b0au, 0x00004b29u, 0x00080041u, 0x00000270u, 0x00004b2cu, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004b29u, 0x0004003du, 0x0000022bu, 0x00004b2du, 0x00004b2cu, 0x00040071u, 0x00000006u, 0x00004b2eu, 0x00004b2du, 0x0003003eu, 0x00004b0bu, 0x00004b2eu, 0x000500c2u, 0x00000006u, 0x00004b30u, 0x00004b2eu, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004b31u, 0x00004b30u, 0x00000fccu, 0x00050080u, 0x00000006u, 0x00004b33u, 0x00004b31u, 0x00000485u, 0x0003003eu, 0x00004b0cu, 0x00004b33u, 0x000500c6u, 0x00000006u, 0x00004b36u, 0x00004b33u, 0x0000468cu, 0x0003003eu, 0x00004b0cu, 0x00004b36u, 0x000500c5u, 0x00000006u, 0x00004b39u, 0x00000f2eu, 0x00004b36u, 0x00080041u, 0x00000270u, 0x00004b3au, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004b39u, 0x0004003du, 0x0000022bu, 0x00004b3bu, 0x00004b3au, 0x00040071u, 0x00000006u, 0x00004b3cu, 0x00004b3bu, 0x0003003eu, 0x00004b0bu, 0x00004b3cu, 0x000300f7u, 0x00004b3eu, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004b3fu, 0x00004b40u, 0x000200f8u, 0x00004b40u, 0x0003003eu, 0x00004b0fu, 0x00004b3cu, 0x00060050u, 0x00000353u, 0x00004b5au, 0x00004b3cu, 0x00004b3cu, 0x00004b3cu, 0x000500c2u, 0x00000353u, 0x00004b5bu, 0x00004b5au, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004b5du, 0x00004b5bu, 0x0000eebdu, 0x0003003eu, 0x00004b56u, 0x00004b5du, 0x000500c4u, 0x00000353u, 0x00004b60u, 0x00004b5du, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004b63u, 0x00004b5du, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004b64u, 0x00004b60u, 0x00004b63u, 0x0003003eu, 0x00004b56u, 0x00004b64u, 0x000500c7u, 0x00000006u, 0x00004b66u, 0x00004b3cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004b67u, 0x00004b66u, 0x000006c2u, 0x0003003eu, 0x00004b57u, 0x00004b67u, 0x0004007cu, 0x0000003cu, 0x00004b69u, 0x00004b64u, 0x0004007cu, 0x00000008u, 0x00004b6bu, 0x00004b67u, 0x00050051u, 0x00000008u, 0x00004b6cu, 0x00004b69u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004b6du, 0x00004b69u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004b6eu, 0x00004b69u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004b6fu, 0x00004b6cu, 0x00004b6du, 0x00004b6eu, 0x00004b6bu, 0x0003003eu, 0x00004b58u, 0x00004b6fu, 0x0003003eu, 0x00004b0du, 0x00004b6fu, 0x000200f9u, 0x00004b3eu, 0x000200f8u, 0x00004b3fu, 0x0003003eu, 0x00004b0eu, 0x00004b3cu, 0x000500c2u, 0x00000006u, 0x00004b4au, 0x00004b3cu, 0x0000025eu, 0x0003003eu, 0x00004b46u, 0x00004b4au, 0x000500c7u, 0x00000006u, 0x00004b4cu, 0x00004b3cu, 0x000006c2u, 0x0003003eu, 0x00004b47u, 0x00004b4cu, 0x0004007cu, 0x00000008u, 0x00004b4eu, 0x00004b4au, 0x0004007cu, 0x00000008u, 0x00004b54u, 0x00004b4cu, 0x00070050u, 0x00000009u, 0x00004b55u, 0x00004b4eu, 0x00004b4eu, 0x00004b4eu, 0x00004b54u, 0x0003003eu, 0x00004b48u, 0x00004b55u, 0x0003003eu, 0x00004b0du, 0x00004b55u, 0x000200f9u, 0x00004b3eu, 0x000200f8u, 0x00004b3eu, 0x000700f5u, 0x00000009u, 0x00009752u, 0x00004b55u, 0x00004b3fu, 0x00004b6fu, 0x00004b40u, 0x0003003eu, 0x00004b10u, 0x00009752u, 0x0003003eu, 0x00004501u, 0x00009752u, 0x00050050u, 0x0000005fu, 0x000046abu, 0x00009475u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000046acu, 0x000046abu, 0x0003003eu, 0x00006990u, 0x000044aeu, 0x0003003eu, 0x00006991u, 0x000044b1u, 0x0003003eu, 0x0000453eu, 0x000020eau, 0x0003003eu, 0x0000453fu, 0x000046acu, 0x0003003eu, 0x00004540u, 0x000003c4u, 0x0003003eu, 0x00004541u, 0x0000468cu, 0x0003003eu, 0x00004542u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004b7cu, 0x0000453fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004b7du, 0x00004b7cu, 0x00050084u, 0x00000006u, 0x00004b7eu, 0x000044b1u, 0x00004b7du, 0x00050080u, 0x00000006u, 0x00004b7fu, 0x000044aeu, 0x00004b7eu, 0x0003003eu, 0x00004b70u, 0x00004b7fu, 0x00050041u, 0x00000007u, 0x00004b80u, 0x0000453fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004b81u, 0x00004b80u, 0x00050084u, 0x00000006u, 0x00004b82u, 0x00004b81u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004b84u, 0x00004b7fu, 0x00004b82u, 0x0003003eu, 0x00004b70u, 0x00004b84u, 0x000500c7u, 0x00000006u, 0x00004b86u, 0x00004b84u, 0x00000efdu, 0x0003003eu, 0x00004b70u, 0x00004b86u, 0x000500c2u, 0x00000006u, 0x00004b88u, 0x00004b86u, 0x00000212u, 0x0003003eu, 0x00004b71u, 0x00004b88u, 0x0004003du, 0x00000006u, 0x00004b8au, 0x00004b7cu, 0x000500c7u, 0x00000006u, 0x00004b8bu, 0x00004b8au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004b8cu, 0x00004b8bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004b8eu, 0x00004b88u, 0x00004b8cu, 0x0003003eu, 0x00004b71u, 0x00004b8eu, 0x000500c6u, 0x00000006u, 0x00004b90u, 0x00004b8eu, 0x00000485u, 0x0003003eu, 0x00004b71u, 0x00004b90u, 0x00080041u, 0x00000270u, 0x00004b93u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004b90u, 0x0004003du, 0x0000022bu, 0x00004b94u, 0x00004b93u, 0x00040071u, 0x00000006u, 0x00004b95u, 0x00004b94u, 0x0003003eu, 0x00004b72u, 0x00004b95u, 0x000500c2u, 0x00000006u, 0x00004b97u, 0x00004b95u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004b98u, 0x00004b97u, 0x00000fccu, 0x00050080u, 0x00000006u, 0x00004b9au, 0x00004b98u, 0x000003c4u, 0x0003003eu, 0x00004b73u, 0x00004b9au, 0x000500c6u, 0x00000006u, 0x00004b9du, 0x00004b9au, 0x0000468cu, 0x0003003eu, 0x00004b73u, 0x00004b9du, 0x000500c5u, 0x00000006u, 0x00004ba0u, 0x00000f2eu, 0x00004b9du, 0x00080041u, 0x00000270u, 0x00004ba1u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004ba0u, 0x0004003du, 0x0000022bu, 0x00004ba2u, 0x00004ba1u, 0x00040071u, 0x00000006u, 0x00004ba3u, 0x00004ba2u, 0x0003003eu, 0x00004b72u, 0x00004ba3u, 0x000300f7u, 0x00004ba5u, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004ba6u, 0x00004ba7u, 0x000200f8u, 0x00004ba7u, 0x0003003eu, 0x00004b76u, 0x00004ba3u, 0x00060050u, 0x00000353u, 0x00004bc1u, 0x00004ba3u, 0x00004ba3u, 0x00004ba3u, 0x000500c2u, 0x00000353u, 0x00004bc2u, 0x00004bc1u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004bc4u, 0x00004bc2u, 0x0000eebdu, 0x0003003eu, 0x00004bbdu, 0x00004bc4u, 0x000500c4u, 0x00000353u, 0x00004bc7u, 0x00004bc4u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004bcau, 0x00004bc4u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004bcbu, 0x00004bc7u, 0x00004bcau, 0x0003003eu, 0x00004bbdu, 0x00004bcbu, 0x000500c7u, 0x00000006u, 0x00004bcdu, 0x00004ba3u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004bceu, 0x00004bcdu, 0x000006c2u, 0x0003003eu, 0x00004bbeu, 0x00004bceu, 0x0004007cu, 0x0000003cu, 0x00004bd0u, 0x00004bcbu, 0x0004007cu, 0x00000008u, 0x00004bd2u, 0x00004bceu, 0x00050051u, 0x00000008u, 0x00004bd3u, 0x00004bd0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004bd4u, 0x00004bd0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004bd5u, 0x00004bd0u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004bd6u, 0x00004bd3u, 0x00004bd4u, 0x00004bd5u, 0x00004bd2u, 0x0003003eu, 0x00004bbfu, 0x00004bd6u, 0x0003003eu, 0x00004b74u, 0x00004bd6u, 0x000200f9u, 0x00004ba5u, 0x000200f8u, 0x00004ba6u, 0x0003003eu, 0x00004b75u, 0x00004ba3u, 0x000500c2u, 0x00000006u, 0x00004bb1u, 0x00004ba3u, 0x0000025eu, 0x0003003eu, 0x00004badu, 0x00004bb1u, 0x000500c7u, 0x00000006u, 0x00004bb3u, 0x00004ba3u, 0x000006c2u, 0x0003003eu, 0x00004baeu, 0x00004bb3u, 0x0004007cu, 0x00000008u, 0x00004bb5u, 0x00004bb1u, 0x0004007cu, 0x00000008u, 0x00004bbbu, 0x00004bb3u, 0x00070050u, 0x00000009u, 0x00004bbcu, 0x00004bb5u, 0x00004bb5u, 0x00004bb5u, 0x00004bbbu, 0x0003003eu, 0x00004bafu, 0x00004bbcu, 0x0003003eu, 0x00004b74u, 0x00004bbcu, 0x000200f9u, 0x00004ba5u, 0x000200f8u, 0x00004ba5u, 0x000700f5u, 0x00000009u, 0x00009768u, 0x00004bbcu, 0x00004ba6u, 0x00004bd6u, 0x00004ba7u, 0x0003003eu, 0x00004b77u, 0x00009768u, 0x0003003eu, 0x00004509u, 0x00009768u, 0x000200f9u, 0x0000469eu, 0x000200f8u, 0x0000469eu, 0x000700f5u, 0x00000009u, 0x00009af2u, 0x00009a59u, 0x00004ad7u, 0x00009768u, 0x00004ba5u, 0x000700f5u, 0x00000009u, 0x00009923u, 0x0000988au, 0x00004ad7u, 0x00009752u, 0x00004ba5u, 0x000300f7u, 0x000046b3u, 0x00000000u, 0x000400fau, 0x0000466du, 0x000046b4u, 0x000046b3u, 0x000200f8u, 0x000046b4u, 0x00050050u, 0x0000005fu, 0x000046b7u, 0x000094b3u, 0x00004664u, 0x0004007cu, 0x000000a2u, 0x000046b8u, 0x000046b7u, 0x0003003eu, 0x00006994u, 0x000044aeu, 0x0003003eu, 0x00006995u, 0x000044b1u, 0x0003003eu, 0x00004544u, 0x000020eau, 0x0003003eu, 0x00004545u, 0x000046b8u, 0x0003003eu, 0x00004546u, 0x0000048bu, 0x0003003eu, 0x00004547u, 0x0000468cu, 0x0003003eu, 0x00004548u, 0x000020feu, 0x00050041u, 0x00000007u, 0x00004be3u, 0x00004545u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004be4u, 0x00004be3u, 0x00050084u, 0x00000006u, 0x00004be5u, 0x000044b1u, 0x00004be4u, 0x00050080u, 0x00000006u, 0x00004be6u, 0x000044aeu, 0x00004be5u, 0x0003003eu, 0x00004bd7u, 0x00004be6u, 0x00050041u, 0x00000007u, 0x00004be7u, 0x00004545u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004be8u, 0x00004be7u, 0x00050084u, 0x00000006u, 0x00004be9u, 0x00004be8u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004bebu, 0x00004be6u, 0x00004be9u, 0x0003003eu, 0x00004bd7u, 0x00004bebu, 0x000500c7u, 0x00000006u, 0x00004bedu, 0x00004bebu, 0x00000efdu, 0x0003003eu, 0x00004bd7u, 0x00004bedu, 0x000500c2u, 0x00000006u, 0x00004befu, 0x00004bedu, 0x00000212u, 0x0003003eu, 0x00004bd8u, 0x00004befu, 0x0004003du, 0x00000006u, 0x00004bf1u, 0x00004be3u, 0x000500c7u, 0x00000006u, 0x00004bf2u, 0x00004bf1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004bf3u, 0x00004bf2u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004bf5u, 0x00004befu, 0x00004bf3u, 0x0003003eu, 0x00004bd8u, 0x00004bf5u, 0x000500c6u, 0x00000006u, 0x00004bf7u, 0x00004bf5u, 0x00000485u, 0x0003003eu, 0x00004bd8u, 0x00004bf7u, 0x00080041u, 0x00000270u, 0x00004bfau, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004bf7u, 0x0004003du, 0x0000022bu, 0x00004bfbu, 0x00004bfau, 0x00040071u, 0x00000006u, 0x00004bfcu, 0x00004bfbu, 0x0003003eu, 0x00004bd9u, 0x00004bfcu, 0x000500c2u, 0x00000006u, 0x00004bfeu, 0x00004bfcu, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004bffu, 0x00004bfeu, 0x00000fccu, 0x00050080u, 0x00000006u, 0x00004c01u, 0x00004bffu, 0x0000048bu, 0x0003003eu, 0x00004bdau, 0x00004c01u, 0x000500c6u, 0x00000006u, 0x00004c04u, 0x00004c01u, 0x0000468cu, 0x0003003eu, 0x00004bdau, 0x00004c04u, 0x000500c5u, 0x00000006u, 0x00004c07u, 0x00000f2eu, 0x00004c04u, 0x00080041u, 0x00000270u, 0x00004c08u, 0x00000f2cu, 0x00000203u, 0x000020eau, 0x00000203u, 0x00004c07u, 0x0004003du, 0x0000022bu, 0x00004c09u, 0x00004c08u, 0x00040071u, 0x00000006u, 0x00004c0au, 0x00004c09u, 0x0003003eu, 0x00004bd9u, 0x00004c0au, 0x000300f7u, 0x00004c0cu, 0x00000000u, 0x000400fau, 0x000020feu, 0x00004c0du, 0x00004c0eu, 0x000200f8u, 0x00004c0eu, 0x0003003eu, 0x00004bddu, 0x00004c0au, 0x00060050u, 0x00000353u, 0x00004c28u, 0x00004c0au, 0x00004c0au, 0x00004c0au, 0x000500c2u, 0x00000353u, 0x00004c29u, 0x00004c28u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00004c2bu, 0x00004c29u, 0x0000eebdu, 0x0003003eu, 0x00004c24u, 0x00004c2bu, 0x000500c4u, 0x00000353u, 0x00004c2eu, 0x00004c2bu, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00004c31u, 0x00004c2bu, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00004c32u, 0x00004c2eu, 0x00004c31u, 0x0003003eu, 0x00004c24u, 0x00004c32u, 0x000500c7u, 0x00000006u, 0x00004c34u, 0x00004c0au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004c35u, 0x00004c34u, 0x000006c2u, 0x0003003eu, 0x00004c25u, 0x00004c35u, 0x0004007cu, 0x0000003cu, 0x00004c37u, 0x00004c32u, 0x0004007cu, 0x00000008u, 0x00004c39u, 0x00004c35u, 0x00050051u, 0x00000008u, 0x00004c3au, 0x00004c37u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004c3bu, 0x00004c37u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004c3cu, 0x00004c37u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004c3du, 0x00004c3au, 0x00004c3bu, 0x00004c3cu, 0x00004c39u, 0x0003003eu, 0x00004c26u, 0x00004c3du, 0x0003003eu, 0x00004bdbu, 0x00004c3du, 0x000200f9u, 0x00004c0cu, 0x000200f8u, 0x00004c0du, 0x0003003eu, 0x00004bdcu, 0x00004c0au, 0x000500c2u, 0x00000006u, 0x00004c18u, 0x00004c0au, 0x0000025eu, 0x0003003eu, 0x00004c14u, 0x00004c18u, 0x000500c7u, 0x00000006u, 0x00004c1au, 0x00004c0au, 0x000006c2u, 0x0003003eu, 0x00004c15u, 0x00004c1au, 0x0004007cu, 0x00000008u, 0x00004c1cu, 0x00004c18u, 0x0004007cu, 0x00000008u, 0x00004c22u, 0x00004c1au, 0x00070050u, 0x00000009u, 0x00004c23u, 0x00004c1cu, 0x00004c1cu, 0x00004c1cu, 0x00004c22u, 0x0003003eu, 0x00004c16u, 0x00004c23u, 0x0003003eu, 0x00004bdbu, 0x00004c23u, 0x000200f9u, 0x00004c0cu, 0x000200f8u, 0x00004c0cu, 0x000700f5u, 0x00000009u, 0x00009794u, 0x00004c23u, 0x00004c0du, 0x00004c3du, 0x00004c0eu, 0x0003003eu, 0x00004bdeu, 0x00009794u, 0x0003003eu, 0x00004511u, 0x00009794u, 0x000200f9u, 0x000046b3u, 0x000200f8u, 0x000046b3u, 0x000700f5u, 0x00000009u, 0x00009bd5u, 0x00009b3du, 0x0000469eu, 0x00009794u, 0x00004c0cu, 0x000200f9u, 0x0000468fu, 0x000200f8u, 0x0000468fu, 0x000900f5u, 0x00000009u, 0x00009bd4u, 0x00009bd5u, 0x000046b3u, 0x00009bdbu, 0x000046e7u, 0x00009be0u, 0x00004715u, 0x000900f5u, 0x00000009u, 0x00009af0u, 0x00009af2u, 0x000046b3u, 0x00009af7u, 0x000046e7u, 0x00009afbu, 0x00004715u, 0x000900f5u, 0x00000009u, 0x00009a09u, 0x0000973du, 0x000046b3u, 0x000096e5u, 0x000046e7u, 0x00009687u, 0x00004715u, 0x000900f5u, 0x00000009u, 0x00009921u, 0x00009923u, 0x000046b3u, 0x00009929u, 0x000046e7u, 0x0000992eu, 0x00004715u, 0x000200f9u, 0x00004686u, 0x000200f8u, 0x00004686u, 0x000700f5u, 0x00000009u, 0x00009b21u, 0x00009b3du, 0x00004682u, 0x00009bd4u, 0x0000468fu, 0x000700f5u, 0x00000009u, 0x00009a3du, 0x00009a59u, 0x00004682u, 0x00009af0u, 0x0000468fu, 0x000700f5u, 0x00000009u, 0x00009956u, 0x00009972u, 0x00004682u, 0x00009a09u, 0x0000468fu, 0x000700f5u, 0x00000009u, 0x0000986eu, 0x0000988au, 0x00004682u, 0x00009921u, 0x0000468fu, 0x000200f9u, 0x00004681u, 0x000200f8u, 0x00004681u, 0x000700f5u, 0x00000009u, 0x00009b20u, 0x00009b21u, 0x00004686u, 0x00009be5u, 0x00004722u, 0x000700f5u, 0x00000009u, 0x00009a3cu, 0x00009a3du, 0x00004686u, 0x00009afeu, 0x00004722u, 0x000700f5u, 0x00000009u, 0x00009955u, 0x00009956u, 0x00004686u, 0x00009a19u, 0x00004722u, 0x000700f5u, 0x00000009u, 0x0000986du, 0x0000986eu, 0x00004686u, 0x00009932u, 0x00004722u, 0x000300f7u, 0x0000493cu, 0x00000000u, 0x000400fau, 0x0000213au, 0x0000493du, 0x0000493eu, 0x000200f8u, 0x0000493eu, 0x000300f7u, 0x00004970u, 0x00000000u, 0x000400fau, 0x00004673u, 0x00004971u, 0x00004972u, 0x000200f8u, 0x00004972u, 0x000300f7u, 0x0000499eu, 0x00000000u, 0x000400fau, 0x0000466du, 0x0000499fu, 0x000049a0u, 0x000200f8u, 0x000049a0u, 0x000300f7u, 0x000049aeu, 0x00000000u, 0x000400fau, 0x00004675u, 0x000049afu, 0x000049b0u, 0x000200f8u, 0x000049b0u, 0x0004003du, 0x0000005fu, 0x000049b5u, 0x000044e5u, 0x0003003eu, 0x0000461au, 0x000049b5u, 0x000200f9u, 0x000049aeu, 0x000200f8u, 0x000049afu, 0x0004003du, 0x0000005fu, 0x000049b1u, 0x000044e5u, 0x0007004fu, 0x0000005fu, 0x000049b2u, 0x000049b1u, 0x000049b1u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000049b4u, 0x0000eec2u, 0x000049b2u, 0x0003003eu, 0x0000461au, 0x000049b4u, 0x000200f9u, 0x000049aeu, 0x000200f8u, 0x000049aeu, 0x000700f5u, 0x0000005fu, 0x0000986bu, 0x000049b4u, 0x000049afu, 0x000049b5u, 0x000049b0u, 0x00050051u, 0x00000008u, 0x000049b7u, 0x0000986bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000049b8u, 0x0000986bu, 0x00000001u, 0x0003003eu, 0x00004619u, 0x0000986bu, 0x00050082u, 0x00000009u, 0x000049bcu, 0x0000986du, 0x00009955u, 0x00050041u, 0x0000003eu, 0x000049bdu, 0x00004619u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000049beu, 0x000049bdu, 0x00070050u, 0x00000009u, 0x000049bfu, 0x000049beu, 0x000049beu, 0x000049beu, 0x000049beu, 0x00050084u, 0x00000009u, 0x000049c0u, 0x000049bcu, 0x000049bfu, 0x0003003eu, 0x0000460bu, 0x000049c0u, 0x00050082u, 0x00000009u, 0x000049c3u, 0x00009a3cu, 0x00009955u, 0x00050041u, 0x0000003eu, 0x000049c4u, 0x00004619u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000049c5u, 0x000049c4u, 0x00070050u, 0x00000009u, 0x000049c6u, 0x000049c5u, 0x000049c5u, 0x000049c5u, 0x000049c5u, 0x00050084u, 0x00000009u, 0x000049c7u, 0x000049c3u, 0x000049c6u, 0x00050080u, 0x00000009u, 0x000049c9u, 0x000049c0u, 0x000049c7u, 0x0003003eu, 0x0000460bu, 0x000049c9u, 0x00050080u, 0x00000009u, 0x000049ccu, 0x000049c9u, 0x0000eec3u, 0x0003003eu, 0x0000460bu, 0x000049ccu, 0x000500c3u, 0x00000009u, 0x000049cfu, 0x000049ccu, 0x0000eec4u, 0x0003003eu, 0x0000460bu, 0x000049cfu, 0x00050080u, 0x00000009u, 0x000049d2u, 0x000049cfu, 0x00009955u, 0x0003003eu, 0x0000460bu, 0x000049d2u, 0x000200f9u, 0x0000499eu, 0x000200f8u, 0x0000499fu, 0x00050080u, 0x00000009u, 0x000049a3u, 0x00009955u, 0x00009a3cu, 0x00050080u, 0x00000009u, 0x000049a5u, 0x000049a3u, 0x0000986du, 0x00050080u, 0x00000009u, 0x000049a7u, 0x000049a5u, 0x00009b20u, 0x00050080u, 0x00000009u, 0x000049a9u, 0x000049a7u, 0x0000eec0u, 0x000500c3u, 0x00000009u, 0x000049abu, 0x000049a9u, 0x0000eec0u, 0x0003003eu, 0x0000460bu, 0x000049abu, 0x000200f9u, 0x0000499eu, 0x000200f8u, 0x0000499eu, 0x000700f5u, 0x00000009u, 0x00009cc9u, 0x000049abu, 0x0000499fu, 0x000049d2u, 0x000049aeu, 0x000200f9u, 0x00004970u, 0x000200f8u, 0x00004971u, 0x000300f7u, 0x00004974u, 0x00000000u, 0x000400fau, 0x00002101u, 0x00004975u, 0x00004976u, 0x000200f8u, 0x00004976u, 0x0003003eu, 0x0000460bu, 0x00009955u, 0x000200f9u, 0x00004974u, 0x000200f8u, 0x00004975u, 0x000500c7u, 0x00000008u, 0x00004978u, 0x00009475u, 0x00000212u, 0x000500c4u, 0x00000008u, 0x00004979u, 0x00004978u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x0000497bu, 0x00004643u, 0x000500c3u, 0x00000008u, 0x0000497cu, 0x0000497bu, 0x00000212u, 0x000500c5u, 0x00000008u, 0x0000497du, 0x00004979u, 0x0000497cu, 0x0003003eu, 0x0000460cu, 0x0000497du, 0x0004003du, 0x00000008u, 0x00004980u, 0x00004645u, 0x00050050u, 0x0000005fu, 0x00004981u, 0x0000497du, 0x00004980u, 0x0007004fu, 0x0000005fu, 0x00004983u, 0x00009955u, 0x00009955u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000460eu, 0x00004983u, 0x0007004fu, 0x0000005fu, 0x00004985u, 0x0000986du, 0x0000986du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000460fu, 0x00004985u, 0x0007004fu, 0x0000005fu, 0x00004987u, 0x00009a3cu, 0x00009a3cu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004610u, 0x00004987u, 0x0007004fu, 0x0000005fu, 0x00004989u, 0x00009b20u, 0x00009b20u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004611u, 0x00004989u, 0x0003003eu, 0x00004612u, 0x00004981u, 0x00050041u, 0x0000003eu, 0x00005b48u, 0x00004612u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b49u, 0x00005b48u, 0x00050041u, 0x0000003eu, 0x00005b4au, 0x00004612u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005b4bu, 0x00005b4au, 0x00050080u, 0x00000008u, 0x00005b4cu, 0x00005b49u, 0x00005b4bu, 0x0003003eu, 0x00005b42u, 0x00005b4cu, 0x000500afu, 0x0000005du, 0x00005b4eu, 0x00005b4cu, 0x0000037du, 0x00050050u, 0x00000879u, 0x00005b51u, 0x00005b4eu, 0x00005b4eu, 0x000600a9u, 0x0000005fu, 0x00005b52u, 0x00005b51u, 0x00004989u, 0x00004983u, 0x0003003eu, 0x00005b43u, 0x00005b52u, 0x000300f7u, 0x00005b55u, 0x00000000u, 0x000400fau, 0x00005b4eu, 0x00005b56u, 0x00005b57u, 0x000200f8u, 0x00005b57u, 0x0004003du, 0x0000005fu, 0x00005b5cu, 0x00004612u, 0x0003003eu, 0x00005b45u, 0x00005b5cu, 0x000200f9u, 0x00005b55u, 0x000200f8u, 0x00005b56u, 0x0004003du, 0x0000005fu, 0x00005b58u, 0x00004612u, 0x0007004fu, 0x0000005fu, 0x00005b59u, 0x00005b58u, 0x00005b58u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x00005b5bu, 0x0000eec2u, 0x00005b59u, 0x0003003eu, 0x00005b45u, 0x00005b5bu, 0x000200f9u, 0x00005b55u, 0x000200f8u, 0x00005b55u, 0x000700f5u, 0x0000005fu, 0x00009c6cu, 0x00005b5bu, 0x00005b56u, 0x00005b5cu, 0x00005b57u, 0x00050051u, 0x00000008u, 0x00005b5eu, 0x00009c6cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005b5fu, 0x00009c6cu, 0x00000001u, 0x0003003eu, 0x00005b44u, 0x00009c6cu, 0x00050082u, 0x0000005fu, 0x00005b63u, 0x00004985u, 0x00005b52u, 0x00050041u, 0x0000003eu, 0x00005b64u, 0x00005b44u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b65u, 0x00005b64u, 0x00050050u, 0x0000005fu, 0x00005b66u, 0x00005b65u, 0x00005b65u, 0x00050084u, 0x0000005fu, 0x00005b67u, 0x00005b63u, 0x00005b66u, 0x0003003eu, 0x00005b46u, 0x00005b67u, 0x00050082u, 0x0000005fu, 0x00005b6au, 0x00004987u, 0x00005b52u, 0x00050041u, 0x0000003eu, 0x00005b6bu, 0x00005b44u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005b6cu, 0x00005b6bu, 0x00050050u, 0x0000005fu, 0x00005b6du, 0x00005b6cu, 0x00005b6cu, 0x00050084u, 0x0000005fu, 0x00005b6eu, 0x00005b6au, 0x00005b6du, 0x00050080u, 0x0000005fu, 0x00005b70u, 0x00005b67u, 0x00005b6eu, 0x0003003eu, 0x00005b46u, 0x00005b70u, 0x00050080u, 0x0000005fu, 0x00005b73u, 0x00005b70u, 0x00001361u, 0x0003003eu, 0x00005b46u, 0x00005b73u, 0x000500c3u, 0x0000005fu, 0x00005b76u, 0x00005b73u, 0x0000eeb9u, 0x0003003eu, 0x00005b46u, 0x00005b76u, 0x00050080u, 0x0000005fu, 0x00005b79u, 0x00005b76u, 0x00005b52u, 0x0003003eu, 0x00005b46u, 0x00005b79u, 0x0003003eu, 0x00005b47u, 0x00005b79u, 0x0003003eu, 0x0000460du, 0x00005b79u, 0x0007004fu, 0x0000005fu, 0x0000498cu, 0x00009955u, 0x00009955u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004614u, 0x0000498cu, 0x0007004fu, 0x0000005fu, 0x0000498eu, 0x0000986du, 0x0000986du, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004615u, 0x0000498eu, 0x0007004fu, 0x0000005fu, 0x00004990u, 0x00009a3cu, 0x00009a3cu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004616u, 0x00004990u, 0x0007004fu, 0x0000005fu, 0x00004992u, 0x00009b20u, 0x00009b20u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004617u, 0x00004992u, 0x0004003du, 0x0000005fu, 0x00004993u, 0x000044e5u, 0x0003003eu, 0x00004618u, 0x00004993u, 0x00050041u, 0x0000003eu, 0x00005b81u, 0x00004618u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b82u, 0x00005b81u, 0x00050041u, 0x0000003eu, 0x00005b83u, 0x00004618u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005b84u, 0x00005b83u, 0x00050080u, 0x00000008u, 0x00005b85u, 0x00005b82u, 0x00005b84u, 0x0003003eu, 0x00005b7bu, 0x00005b85u, 0x000500afu, 0x0000005du, 0x00005b87u, 0x00005b85u, 0x0000037du, 0x00050050u, 0x00000879u, 0x00005b8au, 0x00005b87u, 0x00005b87u, 0x000600a9u, 0x0000005fu, 0x00005b8bu, 0x00005b8au, 0x00004992u, 0x0000498cu, 0x0003003eu, 0x00005b7cu, 0x00005b8bu, 0x000300f7u, 0x00005b8eu, 0x00000000u, 0x000400fau, 0x00005b87u, 0x00005b8fu, 0x00005b90u, 0x000200f8u, 0x00005b90u, 0x0004003du, 0x0000005fu, 0x00005b95u, 0x00004618u, 0x0003003eu, 0x00005b7eu, 0x00005b95u, 0x000200f9u, 0x00005b8eu, 0x000200f8u, 0x00005b8fu, 0x0004003du, 0x0000005fu, 0x00005b91u, 0x00004618u, 0x0007004fu, 0x0000005fu, 0x00005b92u, 0x00005b91u, 0x00005b91u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x00005b94u, 0x0000eec2u, 0x00005b92u, 0x0003003eu, 0x00005b7eu, 0x00005b94u, 0x000200f9u, 0x00005b8eu, 0x000200f8u, 0x00005b8eu, 0x000700f5u, 0x0000005fu, 0x00009c74u, 0x00005b94u, 0x00005b8fu, 0x00005b95u, 0x00005b90u, 0x00050051u, 0x00000008u, 0x00005b97u, 0x00009c74u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005b98u, 0x00009c74u, 0x00000001u, 0x0003003eu, 0x00005b7du, 0x00009c74u, 0x00050082u, 0x0000005fu, 0x00005b9cu, 0x0000498eu, 0x00005b8bu, 0x00050041u, 0x0000003eu, 0x00005b9du, 0x00005b7du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b9eu, 0x00005b9du, 0x00050050u, 0x0000005fu, 0x00005b9fu, 0x00005b9eu, 0x00005b9eu, 0x00050084u, 0x0000005fu, 0x00005ba0u, 0x00005b9cu, 0x00005b9fu, 0x0003003eu, 0x00005b7fu, 0x00005ba0u, 0x00050082u, 0x0000005fu, 0x00005ba3u, 0x00004990u, 0x00005b8bu, 0x00050041u, 0x0000003eu, 0x00005ba4u, 0x00005b7du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005ba5u, 0x00005ba4u, 0x00050050u, 0x0000005fu, 0x00005ba6u, 0x00005ba5u, 0x00005ba5u, 0x00050084u, 0x0000005fu, 0x00005ba7u, 0x00005ba3u, 0x00005ba6u, 0x00050080u, 0x0000005fu, 0x00005ba9u, 0x00005ba0u, 0x00005ba7u, 0x0003003eu, 0x00005b7fu, 0x00005ba9u, 0x00050080u, 0x0000005fu, 0x00005bacu, 0x00005ba9u, 0x00001361u, 0x0003003eu, 0x00005b7fu, 0x00005bacu, 0x000500c3u, 0x0000005fu, 0x00005bafu, 0x00005bacu, 0x0000eeb9u, 0x0003003eu, 0x00005b7fu, 0x00005bafu, 0x00050080u, 0x0000005fu, 0x00005bb2u, 0x00005bafu, 0x00005b8bu, 0x0003003eu, 0x00005b7fu, 0x00005bb2u, 0x0003003eu, 0x00005b80u, 0x00005bb2u, 0x0003003eu, 0x00004613u, 0x00005bb2u, 0x00050051u, 0x00000008u, 0x00004997u, 0x00005b79u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004998u, 0x00005b79u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004999u, 0x00005bb2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000499au, 0x00005bb2u, 0x00000001u, 0x00070050u, 0x00000009u, 0x0000499bu, 0x00004997u, 0x00004998u, 0x00004999u, 0x0000499au, 0x0003003eu, 0x0000460bu, 0x0000499bu, 0x000200f9u, 0x00004974u, 0x000200f8u, 0x00004974u, 0x000700f5u, 0x00000009u, 0x00009cc8u, 0x0000499bu, 0x00005b8eu, 0x00009955u, 0x00004976u, 0x000200f9u, 0x00004970u, 0x000200f8u, 0x00004970u, 0x000700f5u, 0x00000009u, 0x00009cc7u, 0x00009cc8u, 0x00004974u, 0x00009cc9u, 0x0000499eu, 0x000200f9u, 0x0000493cu, 0x000200f8u, 0x0000493du, 0x00050051u, 0x00000008u, 0x00004940u, 0x000093b0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004941u, 0x000093b0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004942u, 0x000093b0u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00004943u, 0x000093b0u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004945u, 0x000093b0u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00004607u, 0x00004945u, 0x000300f7u, 0x00004948u, 0x00000000u, 0x000400fau, 0x00004675u, 0x00004949u, 0x0000494au, 0x000200f8u, 0x0000494au, 0x0004003du, 0x00000009u, 0x0000494du, 0x00004607u, 0x0007004fu, 0x0000005fu, 0x0000494eu, 0x0000494du, 0x0000494du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004609u, 0x0000494eu, 0x000200f9u, 0x00004948u, 0x000200f8u, 0x00004949u, 0x0004003du, 0x00000009u, 0x0000494bu, 0x00004607u, 0x0007004fu, 0x0000005fu, 0x0000494cu, 0x0000494bu, 0x0000494bu, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00004609u, 0x0000494cu, 0x000200f9u, 0x00004948u, 0x000200f8u, 0x00004948u, 0x000700f5u, 0x0000005fu, 0x00009cc2u, 0x0000494cu, 0x00004949u, 0x0000494eu, 0x0000494au, 0x0003003eu, 0x00004608u, 0x00009cc2u, 0x00050041u, 0x0000003eu, 0x00004950u, 0x00004608u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004951u, 0x00004950u, 0x00050082u, 0x00000009u, 0x00004954u, 0x0000986du, 0x00009955u, 0x00070050u, 0x00000009u, 0x00004955u, 0x00004951u, 0x00004951u, 0x00004951u, 0x00004951u, 0x00050084u, 0x00000009u, 0x00004956u, 0x00004955u, 0x00004954u, 0x00050041u, 0x0000003eu, 0x00004957u, 0x00004608u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004958u, 0x00004957u, 0x00050082u, 0x00000009u, 0x0000495bu, 0x00009a3cu, 0x00009955u, 0x00070050u, 0x00000009u, 0x0000495cu, 0x00004958u, 0x00004958u, 0x00004958u, 0x00004958u, 0x00050084u, 0x00000009u, 0x0000495du, 0x0000495cu, 0x0000495bu, 0x00050080u, 0x00000009u, 0x0000495eu, 0x00004956u, 0x0000495du, 0x00050080u, 0x00000009u, 0x00004960u, 0x0000495eu, 0x0000eeb6u, 0x0003003eu, 0x0000460au, 0x00004960u, 0x000500c3u, 0x00000009u, 0x00004963u, 0x00004960u, 0x0000eec1u, 0x0003003eu, 0x0000460au, 0x00004963u, 0x00050041u, 0x0000003eu, 0x00004964u, 0x00004607u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004965u, 0x00004964u, 0x00070050u, 0x00000009u, 0x00004967u, 0x00004965u, 0x00004965u, 0x00004965u, 0x00004965u, 0x00050080u, 0x00000009u, 0x00004968u, 0x00004963u, 0x00004967u, 0x0003003eu, 0x0000460au, 0x00004968u, 0x00050051u, 0x00000008u, 0x0000496au, 0x00004968u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000496bu, 0x00004968u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000496cu, 0x00004968u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000496du, 0x00004968u, 0x00000003u, 0x0003003eu, 0x0000460bu, 0x00004968u, 0x000200f9u, 0x0000493cu, 0x000200f8u, 0x0000493cu, 0x000700f5u, 0x00000009u, 0x00009cc6u, 0x00004968u, 0x00004948u, 0x00009cc7u, 0x00004970u, 0x0003003eu, 0x0000461bu, 0x00009cc6u, 0x0003003eu, 0x00002072u, 0x00009cc6u, 0x000400a8u, 0x0000005du, 0x00002287u, 0x00002101u, 0x000400a8u, 0x0000005du, 0x00002289u, 0x000020fbu, 0x000500a7u, 0x0000005du, 0x0000228au, 0x00002287u, 0x00002289u, 0x000500a7u, 0x0000005du, 0x0000228du, 0x0000228au, 0x0000226cu, 0x000300f7u, 0x0000228eu, 0x00000000u, 0x000400fau, 0x0000228du, 0x0000228fu, 0x0000228eu, 0x000200f8u, 0x0000228fu, 0x0003003eu, 0x00002081u, 0x00009cc6u, 0x0003003eu, 0x00002082u, 0x000028beu, 0x00050051u, 0x00000008u, 0x00005bbbu, 0x00009cc6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005bbcu, 0x00009cc6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005bbdu, 0x00009cc6u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005bbeu, 0x00009cc6u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00005bc0u, 0x00009cc6u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005bb4u, 0x00005bc0u, 0x00050041u, 0x0000003eu, 0x00005bc1u, 0x00005bb4u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005bc2u, 0x00005bc1u, 0x00050041u, 0x0000003eu, 0x00005bc3u, 0x00002082u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005bc4u, 0x00005bc3u, 0x00050041u, 0x0000003eu, 0x00005bc5u, 0x00005bb4u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005bc6u, 0x00005bc5u, 0x00050084u, 0x00000008u, 0x00005bc7u, 0x00005bc4u, 0x00005bc6u, 0x00050080u, 0x00000008u, 0x00005bc8u, 0x00005bc7u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00005bc9u, 0x00005bc8u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005bcau, 0x00005bc2u, 0x00005bc9u, 0x0003003eu, 0x00005bb5u, 0x00005bcau, 0x0004003du, 0x00000008u, 0x00005bccu, 0x00005bc1u, 0x00050041u, 0x0000003eu, 0x00005bcdu, 0x00002082u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005bceu, 0x00005bcdu, 0x00050041u, 0x0000003eu, 0x00005bcfu, 0x00005bb4u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005bd0u, 0x00005bcfu, 0x00050084u, 0x00000008u, 0x00005bd1u, 0x00005bceu, 0x00005bd0u, 0x00050041u, 0x0000003eu, 0x00005bd2u, 0x00002082u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005bd3u, 0x00005bd2u, 0x0004003du, 0x00000008u, 0x00005bd5u, 0x00005bc5u, 0x00050084u, 0x00000008u, 0x00005bd6u, 0x00005bd3u, 0x00005bd5u, 0x00050080u, 0x00000008u, 0x00005bd7u, 0x00005bd1u, 0x00005bd6u, 0x00050080u, 0x00000008u, 0x00005bd8u, 0x00005bd7u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00005bd9u, 0x00005bd8u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005bdau, 0x00005bccu, 0x00005bd9u, 0x0003003eu, 0x00005bb6u, 0x00005bdau, 0x0004003du, 0x00000008u, 0x00005bdcu, 0x00005bc1u, 0x00050041u, 0x0000003eu, 0x00005bddu, 0x00002082u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005bdeu, 0x00005bddu, 0x0004003du, 0x00000008u, 0x00005be0u, 0x00005bcfu, 0x00050084u, 0x00000008u, 0x00005be1u, 0x00005bdeu, 0x00005be0u, 0x00050080u, 0x00000008u, 0x00005be2u, 0x00005be1u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00005be3u, 0x00005be2u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005be4u, 0x00005bdcu, 0x00005be3u, 0x0003003eu, 0x00005bb7u, 0x00005be4u, 0x0004003du, 0x00000008u, 0x00005be6u, 0x00005bc1u, 0x0003003eu, 0x00005bb8u, 0x00005be6u, 0x00070050u, 0x00000009u, 0x00005bebu, 0x00005bcau, 0x00005bdau, 0x00005be4u, 0x00005be6u, 0x0003003eu, 0x00005bb9u, 0x00005bebu, 0x0003003eu, 0x00002072u, 0x00005bebu, 0x000200f9u, 0x0000228eu, 0x000200f8u, 0x0000228eu, 0x000700f5u, 0x00000009u, 0x0000a69fu, 0x00009cc6u, 0x0000493cu, 0x00005bebu, 0x0000228fu, 0x000200f9u, 0x0000226eu, 0x000200f8u, 0x0000226fu, 0x0003003eu, 0x00002073u, 0x000093b0u, 0x0003003eu, 0x00002074u, 0x000028beu, 0x00050051u, 0x00000008u, 0x0000446eu, 0x000093b0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000446fu, 0x000093b0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004470u, 0x000093b0u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00004471u, 0x000093b0u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004473u, 0x000093b0u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00004467u, 0x00004473u, 0x00050041u, 0x0000003eu, 0x00004474u, 0x00004467u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004475u, 0x00004474u, 0x00050041u, 0x0000003eu, 0x00004476u, 0x00002074u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004477u, 0x00004476u, 0x00050041u, 0x0000003eu, 0x00004478u, 0x00004467u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004479u, 0x00004478u, 0x00050084u, 0x00000008u, 0x0000447au, 0x00004477u, 0x00004479u, 0x00050080u, 0x00000008u, 0x0000447bu, 0x0000447au, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000447cu, 0x0000447bu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x0000447du, 0x00004475u, 0x0000447cu, 0x0003003eu, 0x00004468u, 0x0000447du, 0x0004003du, 0x00000008u, 0x0000447fu, 0x00004474u, 0x00050041u, 0x0000003eu, 0x00004480u, 0x00002074u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004481u, 0x00004480u, 0x00050041u, 0x0000003eu, 0x00004482u, 0x00004467u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004483u, 0x00004482u, 0x00050084u, 0x00000008u, 0x00004484u, 0x00004481u, 0x00004483u, 0x00050041u, 0x0000003eu, 0x00004485u, 0x00002074u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004486u, 0x00004485u, 0x0004003du, 0x00000008u, 0x00004488u, 0x00004478u, 0x00050084u, 0x00000008u, 0x00004489u, 0x00004486u, 0x00004488u, 0x00050080u, 0x00000008u, 0x0000448au, 0x00004484u, 0x00004489u, 0x00050080u, 0x00000008u, 0x0000448bu, 0x0000448au, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000448cu, 0x0000448bu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x0000448du, 0x0000447fu, 0x0000448cu, 0x0003003eu, 0x00004469u, 0x0000448du, 0x0004003du, 0x00000008u, 0x0000448fu, 0x00004474u, 0x00050041u, 0x0000003eu, 0x00004490u, 0x00002074u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00004491u, 0x00004490u, 0x0004003du, 0x00000008u, 0x00004493u, 0x00004482u, 0x00050084u, 0x00000008u, 0x00004494u, 0x00004491u, 0x00004493u, 0x00050080u, 0x00000008u, 0x00004495u, 0x00004494u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00004496u, 0x00004495u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00004497u, 0x0000448fu, 0x00004496u, 0x0003003eu, 0x0000446au, 0x00004497u, 0x0004003du, 0x00000008u, 0x00004499u, 0x00004474u, 0x0003003eu, 0x0000446bu, 0x00004499u, 0x00070050u, 0x00000009u, 0x0000449eu, 0x0000447du, 0x0000448du, 0x00004497u, 0x00004499u, 0x0003003eu, 0x0000446cu, 0x0000449eu, 0x0003003eu, 0x00002072u, 0x0000449eu, 0x000200f9u, 0x0000226eu, 0x000200f8u, 0x0000226eu, 0x000700f5u, 0x00000009u, 0x0000e4e9u, 0x00009b3du, 0x0000226fu, 0x00009b20u, 0x0000228eu, 0x000700f5u, 0x00000009u, 0x0000e449u, 0x00009a59u, 0x0000226fu, 0x00009a3cu, 0x0000228eu, 0x000700f5u, 0x00000009u, 0x0000e3a9u, 0x00009972u, 0x0000226fu, 0x00009955u, 0x0000228eu, 0x000700f5u, 0x00000009u, 0x0000e309u, 0x0000988au, 0x0000226fu, 0x0000986du, 0x0000228eu, 0x000700f5u, 0x00000009u, 0x0000a69eu, 0x0000449eu, 0x0000226fu, 0x0000a69fu, 0x0000228eu, 0x000200f9u, 0x00002268u, 0x000200f8u, 0x00002268u, 0x000700f5u, 0x00000009u, 0x0000e4e8u, 0x00009b3du, 0x0000221du, 0x0000e4e9u, 0x0000226eu, 0x000700f5u, 0x00000009u, 0x0000e448u, 0x00009a59u, 0x0000221du, 0x0000e449u, 0x0000226eu, 0x000700f5u, 0x00000009u, 0x0000e3a8u, 0x00009972u, 0x0000221du, 0x0000e3a9u, 0x0000226eu, 0x000700f5u, 0x00000009u, 0x0000e308u, 0x0000988au, 0x0000221du, 0x0000e309u, 0x0000226eu, 0x000700f5u, 0x00000009u, 0x0000a5fcu, 0x0000a60bu, 0x0000221du, 0x0000a69eu, 0x0000226eu, 0x000600a9u, 0x00000008u, 0x00002296u, 0x0000211cu, 0x00000212u, 0x00000203u, 0x000500c3u, 0x00000008u, 0x00002297u, 0x00007a3cu, 0x00002296u, 0x000500c3u, 0x00000008u, 0x00002299u, 0x00002383u, 0x00000215u, 0x000500c7u, 0x00000008u, 0x0000229bu, 0x00002383u, 0x00000218u, 0x0003003eu, 0x00002085u, 0x00007a43u, 0x0003003eu, 0x00002086u, 0x00002297u, 0x0003003eu, 0x00002087u, 0x00002299u, 0x0003003eu, 0x00002088u, 0x0000229bu, 0x000500b1u, 0x0000005du, 0x00005bf0u, 0x00002299u, 0x00000215u, 0x000300f7u, 0x00005bf1u, 0x00000000u, 0x000400fau, 0x00005bf0u, 0x00005bf2u, 0x00005bf3u, 0x000200f8u, 0x00005bf3u, 0x000500aau, 0x0000005du, 0x00005bffu, 0x00002299u, 0x00000215u, 0x000300f7u, 0x00005c00u, 0x00000000u, 0x000400fau, 0x00005bffu, 0x00005c01u, 0x00005c02u, 0x000200f8u, 0x00005c02u, 0x0003003eu, 0x00002089u, 0x00000203u, 0x000200f9u, 0x00005c00u, 0x000200f8u, 0x00005c01u, 0x0004003du, 0x00000008u, 0x00005c29u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005c2au, 0x00005c29u, 0x00000386u, 0x0003003eu, 0x00005c28u, 0x00005c2au, 0x0003003eu, 0x00002089u, 0x00005c2au, 0x000200f9u, 0x00005c00u, 0x000200f8u, 0x00005c00u, 0x000700f5u, 0x00000008u, 0x0000a0dbu, 0x00005c2au, 0x00005c01u, 0x00000203u, 0x00005c02u, 0x000200f9u, 0x00005bf1u, 0x000200f8u, 0x00005bf2u, 0x000500c7u, 0x00000008u, 0x00005bf6u, 0x00002297u, 0x00000218u, 0x00050084u, 0x00000008u, 0x00005bf7u, 0x00005bf6u, 0x0000021bu, 0x000500c7u, 0x00000008u, 0x00005bf9u, 0x00007a43u, 0x00000218u, 0x00050080u, 0x00000008u, 0x00005bfau, 0x00005bf7u, 0x00005bf9u, 0x0003003eu, 0x00005becu, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x00005bfbu, 0x00005becu, 0x00002299u, 0x00005bfau, 0x0004003du, 0x00000008u, 0x00005bfcu, 0x00005bfbu, 0x00050084u, 0x00000008u, 0x00005bfdu, 0x00005bfcu, 0x000003d4u, 0x0003003eu, 0x00002089u, 0x00005bfdu, 0x000200f9u, 0x00005bf1u, 0x000200f8u, 0x00005bf1u, 0x000700f5u, 0x00000008u, 0x0000a0dau, 0x00005bfdu, 0x00005bf2u, 0x0000a0dbu, 0x00005c00u, 0x000500aau, 0x0000005du, 0x00005c05u, 0x0000229bu, 0x00000218u, 0x000300f7u, 0x00005c06u, 0x00000000u, 0x000400fau, 0x00005c05u, 0x00005c07u, 0x00005c08u, 0x000200f8u, 0x00005c08u, 0x000500aau, 0x0000005du, 0x00005c0au, 0x0000229bu, 0x00000215u, 0x000300f7u, 0x00005c0bu, 0x00000000u, 0x000400fau, 0x00005c0au, 0x00005c0cu, 0x00005c0du, 0x000200f8u, 0x00005c0du, 0x000500afu, 0x0000005du, 0x00005c10u, 0x00002299u, 0x00000215u, 0x000300f7u, 0x00005c11u, 0x00000000u, 0x000400fau, 0x00005c10u, 0x00005c12u, 0x00005c13u, 0x000200f8u, 0x00005c13u, 0x000500c7u, 0x00000008u, 0x00005c1fu, 0x0000a0dau, 0x00000224u, 0x0003003eu, 0x00005bedu, 0x00005c1fu, 0x000200f9u, 0x00005c11u, 0x000200f8u, 0x00005c12u, 0x000500c7u, 0x00000008u, 0x00005c15u, 0x00002299u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00005c17u, 0x00002297u, 0x00000218u, 0x00050084u, 0x00000008u, 0x00005c18u, 0x00005c17u, 0x0000021bu, 0x000500c7u, 0x00000008u, 0x00005c1au, 0x00007a43u, 0x00000218u, 0x00050080u, 0x00000008u, 0x00005c1bu, 0x00005c18u, 0x00005c1au, 0x0003003eu, 0x00005beeu, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x00005c1cu, 0x00005beeu, 0x00005c15u, 0x00005c1bu, 0x0004003du, 0x00000008u, 0x00005c1du, 0x00005c1cu, 0x0003003eu, 0x00005bedu, 0x00005c1du, 0x000200f9u, 0x00005c11u, 0x000200f8u, 0x00005c11u, 0x000700f5u, 0x00000008u, 0x0000a0e0u, 0x00005c1du, 0x00005c12u, 0x00005c1fu, 0x00005c13u, 0x0003003eu, 0x0000208au, 0x0000a0e0u, 0x000500aau, 0x0000005du, 0x00005c22u, 0x0000229bu, 0x00000212u, 0x000300f7u, 0x00005c23u, 0x00000000u, 0x000400fau, 0x00005c22u, 0x00005c24u, 0x00005c23u, 0x000200f8u, 0x00005c24u, 0x000400c8u, 0x00000008u, 0x00005c26u, 0x0000a0e0u, 0x000500c7u, 0x00000008u, 0x00005c27u, 0x00005c26u, 0x00000224u, 0x0003003eu, 0x0000208au, 0x00005c27u, 0x000200f9u, 0x00005c23u, 0x000200f8u, 0x00005c23u, 0x000700f5u, 0x00000008u, 0x0000a0e8u, 0x0000a0e0u, 0x00005c11u, 0x00005c27u, 0x00005c24u, 0x000200f9u, 0x00005c0bu, 0x000200f8u, 0x00005c0cu, 0x0004003du, 0x00000008u, 0x00005c2cu, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005c2du, 0x00005c2cu, 0x00000224u, 0x0003003eu, 0x00005c2bu, 0x00005c2du, 0x0003003eu, 0x0000208au, 0x00005c2du, 0x000200f9u, 0x00005c0bu, 0x000200f8u, 0x00005c0bu, 0x000700f5u, 0x00000008u, 0x0000a0e7u, 0x00005c2du, 0x00005c0cu, 0x0000a0e8u, 0x00005c23u, 0x000200f9u, 0x00005c06u, 0x000200f8u, 0x00005c07u, 0x0003003eu, 0x0000208au, 0x00000203u, 0x000200f9u, 0x00005c06u, 0x000200f8u, 0x00005c06u, 0x000700f5u, 0x00000008u, 0x0000a0e6u, 0x00000203u, 0x00005c07u, 0x0000a0e7u, 0x00005c0bu, 0x0003003eu, 0x00002083u, 0x0000a0dau, 0x0003003eu, 0x00002084u, 0x0000a0e6u, 0x000300f7u, 0x000022a1u, 0x00000000u, 0x000400fau, 0x00002119u, 0x000022a2u, 0x000022a3u, 0x000200f8u, 0x000022a3u, 0x0004003du, 0x00000009u, 0x000022e6u, 0x0000202cu, 0x0004003du, 0x00000008u, 0x00005f47u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005f48u, 0x00005f47u, 0x00000224u, 0x000500c4u, 0x00000008u, 0x00005f49u, 0x00005f48u, 0x00000221u, 0x000500c5u, 0x00000008u, 0x00005f4au, 0x00005f49u, 0x0000037du, 0x0003003eu, 0x00005f46u, 0x00005f4au, 0x000d0050u, 0x000001cdu, 0x000022ebu, 0x0000288fu, 0x00002894u, 0x00002899u, 0x0000289eu, 0x000022e6u, 0x00000611u, 0x000093b0u, 0x0000a5fcu, 0x0000a6a9u, 0x00005f4au, 0x0003003eu, 0x00007824u, 0x0000288fu, 0x0003003eu, 0x00007825u, 0x00002894u, 0x0003003eu, 0x00007826u, 0x00002899u, 0x0003003eu, 0x00007827u, 0x0000289eu, 0x0003003eu, 0x00007828u, 0x000022e6u, 0x0003003eu, 0x00007829u, 0x00000611u, 0x0003003eu, 0x0000782au, 0x000093b0u, 0x0003003eu, 0x0000782bu, 0x0000a5fcu, 0x0003003eu, 0x0000782cu, 0x0000a6a9u, 0x0003003eu, 0x0000782du, 0x00005f4au, 0x0003003eu, 0x00007843u, 0x0000288fu, 0x0003003eu, 0x00007844u, 0x00002894u, 0x0003003eu, 0x00007845u, 0x00002899u, 0x0003003eu, 0x00007846u, 0x0000289eu, 0x0003003eu, 0x00007847u, 0x000022e6u, 0x0003003eu, 0x00007848u, 0x00000611u, 0x0003003eu, 0x00007849u, 0x000093b0u, 0x0003003eu, 0x0000784au, 0x0000a5fcu, 0x0003003eu, 0x0000784bu, 0x0000a6a9u, 0x0003003eu, 0x0000784cu, 0x00005f4au, 0x0003003eu, 0x000020a1u, 0x00002378u, 0x0003003eu, 0x000020a2u, 0x0000237du, 0x0003003eu, 0x000020a3u, 0x0000a0e6u, 0x0003003eu, 0x000020a4u, 0x000021aau, 0x0003003eu, 0x000020a5u, 0x00002104u, 0x0003003eu, 0x000020a6u, 0x00002107u, 0x0003003eu, 0x0000688fu, 0x0000288fu, 0x0003003eu, 0x00006890u, 0x000022e6u, 0x0003003eu, 0x00006891u, 0x00000611u, 0x0003003eu, 0x00006892u, 0x000093b0u, 0x0003003eu, 0x00006893u, 0x0000a5fcu, 0x0003003eu, 0x00006894u, 0x00005f4au, 0x00050041u, 0x0000003eu, 0x00005f65u, 0x000020a1u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005f66u, 0x00005f65u, 0x0003003eu, 0x00005f4du, 0x00005f66u, 0x00050041u, 0x0000003eu, 0x00005f67u, 0x000020a2u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005f68u, 0x00005f67u, 0x0003003eu, 0x00005f4eu, 0x00005f68u, 0x000300f7u, 0x00005fa7u, 0x00000000u, 0x000f00fbu, 0x00005f66u, 0x00005fa8u, 0x00000000u, 0x00005fa9u, 0x00000001u, 0x00005faau, 0x00000002u, 0x00005fabu, 0x00000004u, 0x00005facu, 0x00000007u, 0x00005fadu, 0x00000006u, 0x00005faeu, 0x000200f8u, 0x00005faeu, 0x0003003eu, 0x00005fa3u, 0x00001927u, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005fadu, 0x00060050u, 0x0000003cu, 0x00005fc0u, 0x00005f4au, 0x00005f4au, 0x00005f4au, 0x0003003eu, 0x00005fa3u, 0x00005fc0u, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005facu, 0x0004003du, 0x00000009u, 0x00005fbcu, 0x00006890u, 0x0008004fu, 0x0000003cu, 0x00005fbdu, 0x00005fbcu, 0x00005fbcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fa3u, 0x00005fbdu, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005fabu, 0x0004003du, 0x00000009u, 0x00005fb9u, 0x00006893u, 0x0008004fu, 0x0000003cu, 0x00005fbau, 0x00005fb9u, 0x00005fb9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fa3u, 0x00005fbau, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005faau, 0x0004003du, 0x00000009u, 0x00005fb6u, 0x00006892u, 0x0008004fu, 0x0000003cu, 0x00005fb7u, 0x00005fb6u, 0x00005fb6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fa3u, 0x00005fb7u, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005fa9u, 0x0004003du, 0x00000009u, 0x00005fb3u, 0x00006891u, 0x0008004fu, 0x0000003cu, 0x00005fb4u, 0x00005fb3u, 0x00005fb3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fa3u, 0x00005fb4u, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005fa8u, 0x0004003du, 0x00000009u, 0x00005fb0u, 0x0000688fu, 0x0008004fu, 0x0000003cu, 0x00005fb1u, 0x00005fb0u, 0x00005fb0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fa3u, 0x00005fb1u, 0x000200f9u, 0x00005fa7u, 0x000200f8u, 0x00005fa7u, 0x001100f5u, 0x0000003cu, 0x0000ac56u, 0x00005fb1u, 0x00005fa8u, 0x00005fb4u, 0x00005fa9u, 0x00005fb7u, 0x00005faau, 0x00005fbau, 0x00005fabu, 0x00005fbdu, 0x00005facu, 0x00005fc0u, 0x00005fadu, 0x00001927u, 0x00005faeu, 0x000300f7u, 0x00005fc2u, 0x00000000u, 0x000d00fbu, 0x00005f68u, 0x00005fc3u, 0x00000000u, 0x00005fc4u, 0x00000001u, 0x00005fc5u, 0x00000002u, 0x00005fc6u, 0x00000004u, 0x00005fc7u, 0x00000006u, 0x00005fc8u, 0x000200f8u, 0x00005fc8u, 0x0003003eu, 0x00005fa4u, 0x00001926u, 0x000200f9u, 0x00005fc2u, 0x000200f8u, 0x00005fc7u, 0x00050041u, 0x0000003eu, 0x0000689fu, 0x00006890u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fd2u, 0x0000689fu, 0x0003003eu, 0x00005fa4u, 0x00005fd2u, 0x000200f9u, 0x00005fc2u, 0x000200f8u, 0x00005fc6u, 0x00050041u, 0x0000003eu, 0x0000689eu, 0x00006893u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fd0u, 0x0000689eu, 0x0003003eu, 0x00005fa4u, 0x00005fd0u, 0x000200f9u, 0x00005fc2u, 0x000200f8u, 0x00005fc5u, 0x00050041u, 0x0000003eu, 0x0000689du, 0x00006892u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fceu, 0x0000689du, 0x0003003eu, 0x00005fa4u, 0x00005fceu, 0x000200f9u, 0x00005fc2u, 0x000200f8u, 0x00005fc4u, 0x00050041u, 0x0000003eu, 0x0000689cu, 0x00006891u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fccu, 0x0000689cu, 0x0003003eu, 0x00005fa4u, 0x00005fccu, 0x000200f9u, 0x00005fc2u, 0x000200f8u, 0x00005fc3u, 0x00050041u, 0x0000003eu, 0x0000689bu, 0x0000688fu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fcau, 0x0000689bu, 0x0003003eu, 0x00005fa4u, 0x00005fcau, 0x000200f9u, 0x00005fc2u, 0x000200f8u, 0x00005fc2u, 0x000f00f5u, 0x00000008u, 0x0000ac57u, 0x00005fcau, 0x00005fc3u, 0x00005fccu, 0x00005fc4u, 0x00005fceu, 0x00005fc5u, 0x00005fd0u, 0x00005fc6u, 0x00005fd2u, 0x00005fc7u, 0x00001926u, 0x00005fc8u, 0x00050051u, 0x00000008u, 0x00005fd5u, 0x0000ac56u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005fd6u, 0x0000ac56u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005fd7u, 0x0000ac56u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005fd8u, 0x00005fd5u, 0x00005fd6u, 0x00005fd7u, 0x0000ac57u, 0x0003003eu, 0x00005fa5u, 0x00005fd8u, 0x0003003eu, 0x00005f4bu, 0x00005fd8u, 0x0003003eu, 0x000068a0u, 0x00002894u, 0x0003003eu, 0x000068a1u, 0x000022e6u, 0x0003003eu, 0x000068a2u, 0x00000611u, 0x0003003eu, 0x000068a3u, 0x000093b0u, 0x0003003eu, 0x000068a4u, 0x0000a5fcu, 0x00050041u, 0x0000003eu, 0x00005f6bu, 0x000020a1u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005f6cu, 0x00005f6bu, 0x0003003eu, 0x00005f51u, 0x00005f6cu, 0x00050041u, 0x0000003eu, 0x00005f6du, 0x000020a2u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005f6eu, 0x00005f6du, 0x0003003eu, 0x00005f52u, 0x00005f6eu, 0x000300f7u, 0x00005fddu, 0x00000000u, 0x000d00fbu, 0x00005f6cu, 0x00005fdeu, 0x00000000u, 0x00005fdfu, 0x00000001u, 0x00005fe0u, 0x00000002u, 0x00005fe1u, 0x00000004u, 0x00005fe2u, 0x00000007u, 0x00005fe3u, 0x000200f8u, 0x00005fe3u, 0x00050041u, 0x0000003eu, 0x000068aau, 0x000068a0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005ff4u, 0x000068aau, 0x000500c4u, 0x00000008u, 0x00005ff5u, 0x00005ff4u, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x000068abu, 0x000068a0u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005ff7u, 0x000068abu, 0x000500c5u, 0x00000008u, 0x00005ff8u, 0x00005ff5u, 0x00005ff7u, 0x00060050u, 0x0000003cu, 0x00005ff9u, 0x00005ff8u, 0x00005ff8u, 0x00005ff8u, 0x0003003eu, 0x00005fd9u, 0x00005ff9u, 0x000200f9u, 0x00005fddu, 0x000200f8u, 0x00005fe2u, 0x0004003du, 0x00000009u, 0x00005ff1u, 0x000068a1u, 0x0008004fu, 0x0000003cu, 0x00005ff2u, 0x00005ff1u, 0x00005ff1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fd9u, 0x00005ff2u, 0x000200f9u, 0x00005fddu, 0x000200f8u, 0x00005fe1u, 0x0004003du, 0x00000009u, 0x00005feeu, 0x000068a4u, 0x0008004fu, 0x0000003cu, 0x00005fefu, 0x00005feeu, 0x00005feeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fd9u, 0x00005fefu, 0x000200f9u, 0x00005fddu, 0x000200f8u, 0x00005fe0u, 0x0004003du, 0x00000009u, 0x00005febu, 0x000068a3u, 0x0008004fu, 0x0000003cu, 0x00005fecu, 0x00005febu, 0x00005febu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fd9u, 0x00005fecu, 0x000200f9u, 0x00005fddu, 0x000200f8u, 0x00005fdfu, 0x0004003du, 0x00000009u, 0x00005fe8u, 0x000068a2u, 0x0008004fu, 0x0000003cu, 0x00005fe9u, 0x00005fe8u, 0x00005fe8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fd9u, 0x00005fe9u, 0x000200f9u, 0x00005fddu, 0x000200f8u, 0x00005fdeu, 0x0004003du, 0x00000009u, 0x00005fe5u, 0x000068a0u, 0x0008004fu, 0x0000003cu, 0x00005fe6u, 0x00005fe5u, 0x00005fe5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fd9u, 0x00005fe6u, 0x000200f9u, 0x00005fddu, 0x000200f8u, 0x00005fddu, 0x000f00f5u, 0x0000003cu, 0x0000ac6eu, 0x00005fe6u, 0x00005fdeu, 0x00005fe9u, 0x00005fdfu, 0x00005fecu, 0x00005fe0u, 0x00005fefu, 0x00005fe1u, 0x00005ff2u, 0x00005fe2u, 0x00005ff9u, 0x00005fe3u, 0x000300f7u, 0x00005ffbu, 0x00000000u, 0x000d00fbu, 0x00005f6eu, 0x00005ffcu, 0x00000000u, 0x00005ffdu, 0x00000001u, 0x00005ffeu, 0x00000002u, 0x00005fffu, 0x00000004u, 0x00006000u, 0x00000006u, 0x00006001u, 0x000200f8u, 0x00006001u, 0x0003003eu, 0x00005fdau, 0x00001926u, 0x000200f9u, 0x00005ffbu, 0x000200f8u, 0x00006000u, 0x00050041u, 0x0000003eu, 0x000068b0u, 0x000068a1u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000600bu, 0x000068b0u, 0x0003003eu, 0x00005fdau, 0x0000600bu, 0x000200f9u, 0x00005ffbu, 0x000200f8u, 0x00005fffu, 0x00050041u, 0x0000003eu, 0x000068afu, 0x000068a4u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006009u, 0x000068afu, 0x0003003eu, 0x00005fdau, 0x00006009u, 0x000200f9u, 0x00005ffbu, 0x000200f8u, 0x00005ffeu, 0x00050041u, 0x0000003eu, 0x000068aeu, 0x000068a3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006007u, 0x000068aeu, 0x0003003eu, 0x00005fdau, 0x00006007u, 0x000200f9u, 0x00005ffbu, 0x000200f8u, 0x00005ffdu, 0x00050041u, 0x0000003eu, 0x000068adu, 0x000068a2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006005u, 0x000068adu, 0x0003003eu, 0x00005fdau, 0x00006005u, 0x000200f9u, 0x00005ffbu, 0x000200f8u, 0x00005ffcu, 0x00050041u, 0x0000003eu, 0x000068acu, 0x000068a0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006003u, 0x000068acu, 0x0003003eu, 0x00005fdau, 0x00006003u, 0x000200f9u, 0x00005ffbu, 0x000200f8u, 0x00005ffbu, 0x000f00f5u, 0x00000008u, 0x0000ac6fu, 0x00006003u, 0x00005ffcu, 0x00006005u, 0x00005ffdu, 0x00006007u, 0x00005ffeu, 0x00006009u, 0x00005fffu, 0x0000600bu, 0x00006000u, 0x00001926u, 0x00006001u, 0x00050051u, 0x00000008u, 0x0000600eu, 0x0000ac6eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000600fu, 0x0000ac6eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006010u, 0x0000ac6eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006011u, 0x0000600eu, 0x0000600fu, 0x00006010u, 0x0000ac6fu, 0x0003003eu, 0x00005fdbu, 0x00006011u, 0x0003003eu, 0x00005f4fu, 0x00006011u, 0x0003003eu, 0x000068b1u, 0x00002899u, 0x0003003eu, 0x000068b2u, 0x000022e6u, 0x0003003eu, 0x000068b3u, 0x00000611u, 0x0003003eu, 0x000068b4u, 0x000093b0u, 0x0003003eu, 0x000068b5u, 0x0000a5fcu, 0x0003003eu, 0x000068b6u, 0x0000a6a9u, 0x00050041u, 0x0000003eu, 0x00005f71u, 0x000020a1u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005f72u, 0x00005f71u, 0x0003003eu, 0x00005f55u, 0x00005f72u, 0x00050041u, 0x0000003eu, 0x00005f73u, 0x000020a2u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005f74u, 0x00005f73u, 0x0003003eu, 0x00005f56u, 0x00005f74u, 0x000300f7u, 0x00006016u, 0x00000000u, 0x001700fbu, 0x00005f72u, 0x00006017u, 0x00000000u, 0x00006018u, 0x00000007u, 0x00006019u, 0x00000001u, 0x0000601au, 0x00000002u, 0x0000601bu, 0x00000004u, 0x0000601cu, 0x00000008u, 0x0000601du, 0x00000009u, 0x0000601eu, 0x0000000bu, 0x0000601fu, 0x0000000du, 0x00006020u, 0x0000000fu, 0x00006021u, 0x000200f8u, 0x00006021u, 0x00050041u, 0x0000003eu, 0x000068bdu, 0x000068b1u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00006041u, 0x000068bdu, 0x000500c4u, 0x00000008u, 0x00006042u, 0x00006041u, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x000068beu, 0x000068b1u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006044u, 0x000068beu, 0x000500c5u, 0x00000008u, 0x00006045u, 0x00006042u, 0x00006044u, 0x00060050u, 0x0000003cu, 0x00006046u, 0x00006045u, 0x00006045u, 0x00006045u, 0x0003003eu, 0x00006012u, 0x00006046u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x00006020u, 0x00060050u, 0x0000003cu, 0x0000603fu, 0x0000a6a9u, 0x0000a6a9u, 0x0000a6a9u, 0x0003003eu, 0x00006012u, 0x0000603fu, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x0000601fu, 0x0004003du, 0x00000009u, 0x0000603bu, 0x000068b2u, 0x0008004fu, 0x0000003cu, 0x0000603cu, 0x0000603bu, 0x0000603bu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00006012u, 0x0000603cu, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x0000601eu, 0x0004003du, 0x00000009u, 0x00006038u, 0x000068b5u, 0x0008004fu, 0x0000003cu, 0x00006039u, 0x00006038u, 0x00006038u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00006012u, 0x00006039u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x0000601du, 0x0004003du, 0x00000009u, 0x00006035u, 0x000068b4u, 0x0008004fu, 0x0000003cu, 0x00006036u, 0x00006035u, 0x00006035u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00006012u, 0x00006036u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x0000601cu, 0x0004003du, 0x00000009u, 0x00006032u, 0x000068b2u, 0x0008004fu, 0x0000003cu, 0x00006033u, 0x00006032u, 0x00006032u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006012u, 0x00006033u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x0000601bu, 0x0004003du, 0x00000009u, 0x0000602fu, 0x000068b5u, 0x0008004fu, 0x0000003cu, 0x00006030u, 0x0000602fu, 0x0000602fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006012u, 0x00006030u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x0000601au, 0x0004003du, 0x00000009u, 0x0000602cu, 0x000068b4u, 0x0008004fu, 0x0000003cu, 0x0000602du, 0x0000602cu, 0x0000602cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006012u, 0x0000602du, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x00006019u, 0x0003003eu, 0x00006012u, 0x00000933u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x00006018u, 0x0003003eu, 0x00006012u, 0x00000933u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x00006017u, 0x0004003du, 0x00000009u, 0x00006023u, 0x000068b1u, 0x0008004fu, 0x0000003cu, 0x00006024u, 0x00006023u, 0x00006023u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006012u, 0x00006024u, 0x000200f9u, 0x00006016u, 0x000200f8u, 0x00006016u, 0x001900f5u, 0x0000003cu, 0x0000ac87u, 0x00006024u, 0x00006017u, 0x00000933u, 0x00006018u, 0x00000933u, 0x00006019u, 0x0000602du, 0x0000601au, 0x00006030u, 0x0000601bu, 0x00006033u, 0x0000601cu, 0x00006036u, 0x0000601du, 0x00006039u, 0x0000601eu, 0x0000603cu, 0x0000601fu, 0x0000603fu, 0x00006020u, 0x00006046u, 0x00006021u, 0x000300f7u, 0x00006048u, 0x00000000u, 0x000b00fbu, 0x00005f74u, 0x00006049u, 0x00000000u, 0x0000604au, 0x00000001u, 0x0000604bu, 0x00000002u, 0x0000604cu, 0x00000004u, 0x0000604du, 0x000200f8u, 0x0000604du, 0x00050041u, 0x0000003eu, 0x000068c2u, 0x000068b2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006057u, 0x000068c2u, 0x0003003eu, 0x00006013u, 0x00006057u, 0x000200f9u, 0x00006048u, 0x000200f8u, 0x0000604cu, 0x00050041u, 0x0000003eu, 0x000068c1u, 0x000068b5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006055u, 0x000068c1u, 0x0003003eu, 0x00006013u, 0x00006055u, 0x000200f9u, 0x00006048u, 0x000200f8u, 0x0000604bu, 0x00050041u, 0x0000003eu, 0x000068c0u, 0x000068b4u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006053u, 0x000068c0u, 0x0003003eu, 0x00006013u, 0x00006053u, 0x000200f9u, 0x00006048u, 0x000200f8u, 0x0000604au, 0x0003003eu, 0x00006013u, 0x0000a6a9u, 0x000200f9u, 0x00006048u, 0x000200f8u, 0x00006049u, 0x00050041u, 0x0000003eu, 0x000068bfu, 0x000068b1u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000604fu, 0x000068bfu, 0x0003003eu, 0x00006013u, 0x0000604fu, 0x000200f9u, 0x00006048u, 0x000200f8u, 0x00006048u, 0x000d00f5u, 0x00000008u, 0x0000ac88u, 0x0000604fu, 0x00006049u, 0x0000a6a9u, 0x0000604au, 0x00006053u, 0x0000604bu, 0x00006055u, 0x0000604cu, 0x00006057u, 0x0000604du, 0x00050051u, 0x00000008u, 0x0000605au, 0x0000ac87u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000605bu, 0x0000ac87u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000605cu, 0x0000ac87u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000605du, 0x0000605au, 0x0000605bu, 0x0000605cu, 0x0000ac88u, 0x0003003eu, 0x00006014u, 0x0000605du, 0x0003003eu, 0x00005f53u, 0x0000605du, 0x0003003eu, 0x000068c3u, 0x0000289eu, 0x0003003eu, 0x000068c4u, 0x000022e6u, 0x0003003eu, 0x000068c5u, 0x00000611u, 0x0003003eu, 0x000068c6u, 0x000093b0u, 0x0003003eu, 0x000068c7u, 0x0000a5fcu, 0x00050041u, 0x0000003eu, 0x00005f77u, 0x000020a1u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f78u, 0x00005f77u, 0x0003003eu, 0x00005f59u, 0x00005f78u, 0x00050041u, 0x0000003eu, 0x00005f79u, 0x000020a2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f7au, 0x00005f79u, 0x0003003eu, 0x00005f5au, 0x00005f7au, 0x000300f7u, 0x00006062u, 0x00000000u, 0x000d00fbu, 0x00005f78u, 0x00006063u, 0x00000000u, 0x00006064u, 0x00000001u, 0x00006065u, 0x00000002u, 0x00006066u, 0x00000004u, 0x00006067u, 0x00000006u, 0x00006068u, 0x000200f8u, 0x00006068u, 0x0003003eu, 0x0000605eu, 0x00001927u, 0x000200f9u, 0x00006062u, 0x000200f8u, 0x00006067u, 0x0004003du, 0x00000009u, 0x00006076u, 0x000068c4u, 0x0008004fu, 0x0000003cu, 0x00006077u, 0x00006076u, 0x00006076u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000605eu, 0x00006077u, 0x000200f9u, 0x00006062u, 0x000200f8u, 0x00006066u, 0x0004003du, 0x00000009u, 0x00006073u, 0x000068c7u, 0x0008004fu, 0x0000003cu, 0x00006074u, 0x00006073u, 0x00006073u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000605eu, 0x00006074u, 0x000200f9u, 0x00006062u, 0x000200f8u, 0x00006065u, 0x0004003du, 0x00000009u, 0x00006070u, 0x000068c6u, 0x0008004fu, 0x0000003cu, 0x00006071u, 0x00006070u, 0x00006070u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000605eu, 0x00006071u, 0x000200f9u, 0x00006062u, 0x000200f8u, 0x00006064u, 0x0004003du, 0x00000009u, 0x0000606du, 0x000068c5u, 0x0008004fu, 0x0000003cu, 0x0000606eu, 0x0000606du, 0x0000606du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000605eu, 0x0000606eu, 0x000200f9u, 0x00006062u, 0x000200f8u, 0x00006063u, 0x0004003du, 0x00000009u, 0x0000606au, 0x000068c3u, 0x0008004fu, 0x0000003cu, 0x0000606bu, 0x0000606au, 0x0000606au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000605eu, 0x0000606bu, 0x000200f9u, 0x00006062u, 0x000200f8u, 0x00006062u, 0x000f00f5u, 0x0000003cu, 0x0000ac9fu, 0x0000606bu, 0x00006063u, 0x0000606eu, 0x00006064u, 0x00006071u, 0x00006065u, 0x00006074u, 0x00006066u, 0x00006077u, 0x00006067u, 0x00001927u, 0x00006068u, 0x000300f7u, 0x00006079u, 0x00000000u, 0x000d00fbu, 0x00005f7au, 0x0000607au, 0x00000000u, 0x0000607bu, 0x00000001u, 0x0000607cu, 0x00000002u, 0x0000607du, 0x00000004u, 0x0000607eu, 0x00000006u, 0x0000607fu, 0x000200f8u, 0x0000607fu, 0x0003003eu, 0x0000605fu, 0x00001926u, 0x000200f9u, 0x00006079u, 0x000200f8u, 0x0000607eu, 0x00050041u, 0x0000003eu, 0x000068d1u, 0x000068c4u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006089u, 0x000068d1u, 0x0003003eu, 0x0000605fu, 0x00006089u, 0x000200f9u, 0x00006079u, 0x000200f8u, 0x0000607du, 0x00050041u, 0x0000003eu, 0x000068d0u, 0x000068c7u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006087u, 0x000068d0u, 0x0003003eu, 0x0000605fu, 0x00006087u, 0x000200f9u, 0x00006079u, 0x000200f8u, 0x0000607cu, 0x00050041u, 0x0000003eu, 0x000068cfu, 0x000068c6u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006085u, 0x000068cfu, 0x0003003eu, 0x0000605fu, 0x00006085u, 0x000200f9u, 0x00006079u, 0x000200f8u, 0x0000607bu, 0x00050041u, 0x0000003eu, 0x000068ceu, 0x000068c5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006083u, 0x000068ceu, 0x0003003eu, 0x0000605fu, 0x00006083u, 0x000200f9u, 0x00006079u, 0x000200f8u, 0x0000607au, 0x00050041u, 0x0000003eu, 0x000068cdu, 0x000068c3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006081u, 0x000068cdu, 0x0003003eu, 0x0000605fu, 0x00006081u, 0x000200f9u, 0x00006079u, 0x000200f8u, 0x00006079u, 0x000f00f5u, 0x00000008u, 0x0000aca0u, 0x00006081u, 0x0000607au, 0x00006083u, 0x0000607bu, 0x00006085u, 0x0000607cu, 0x00006087u, 0x0000607du, 0x00006089u, 0x0000607eu, 0x00001926u, 0x0000607fu, 0x00050051u, 0x00000008u, 0x0000608cu, 0x0000ac9fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000608du, 0x0000ac9fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000608eu, 0x0000ac9fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000608fu, 0x0000608cu, 0x0000608du, 0x0000608eu, 0x0000aca0u, 0x0003003eu, 0x00006060u, 0x0000608fu, 0x0003003eu, 0x00005f57u, 0x0000608fu, 0x0003003eu, 0x00005f5cu, 0x00005fd8u, 0x0003003eu, 0x00005f5du, 0x00006011u, 0x0003003eu, 0x00005f5eu, 0x0000605du, 0x0003003eu, 0x00005f5fu, 0x0000608fu, 0x000600cau, 0x00000009u, 0x00006096u, 0x0000605du, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005f5eu, 0x00006096u, 0x0003003eu, 0x00006090u, 0x00005fd8u, 0x00050082u, 0x00000009u, 0x000060b7u, 0x00005fd8u, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x000060b8u, 0x000060b7u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000060bau, 0x000060b8u, 0x0000eeb6u, 0x0003003eu, 0x000060b4u, 0x000060bau, 0x0003003eu, 0x00005f5cu, 0x000060bau, 0x0003003eu, 0x00006091u, 0x00006011u, 0x00050082u, 0x00000009u, 0x000060beu, 0x00006011u, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x000060bfu, 0x000060beu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000060c1u, 0x000060bfu, 0x0000eeb6u, 0x0003003eu, 0x000060bbu, 0x000060c1u, 0x0003003eu, 0x00005f5du, 0x000060c1u, 0x0003003eu, 0x00006092u, 0x0000608fu, 0x00050082u, 0x00000009u, 0x000060c5u, 0x0000608fu, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x000060c6u, 0x000060c5u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000060c8u, 0x000060c6u, 0x0000eeb6u, 0x0003003eu, 0x000060c2u, 0x000060c8u, 0x0003003eu, 0x00005f5fu, 0x000060c8u, 0x00050082u, 0x00000009u, 0x0000609fu, 0x000060bau, 0x000060c1u, 0x00050084u, 0x00000009u, 0x000060a1u, 0x0000609fu, 0x00006096u, 0x0003003eu, 0x00006093u, 0x000060a1u, 0x00050080u, 0x00000009u, 0x000060a4u, 0x000060a1u, 0x0000eeb6u, 0x0003003eu, 0x00006093u, 0x000060a4u, 0x000500c3u, 0x00000009u, 0x000060a7u, 0x000060a4u, 0x0000eec1u, 0x00050051u, 0x00000008u, 0x000060a8u, 0x000060a7u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000060a9u, 0x000060a7u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000060aau, 0x000060a7u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000060abu, 0x000060a7u, 0x00000003u, 0x00050051u, 0x00000008u, 0x000060aeu, 0x000060c8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000060afu, 0x000060c8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000060b0u, 0x000060c8u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000060b1u, 0x000060c8u, 0x00000003u, 0x00050080u, 0x00000009u, 0x000060b3u, 0x000060a7u, 0x000060c8u, 0x0003003eu, 0x00006094u, 0x000060b3u, 0x0003003eu, 0x00005f5bu, 0x000060b3u, 0x0004003du, 0x00000009u, 0x00005f81u, 0x00005f5bu, 0x0003003eu, 0x00005f60u, 0x00005f81u, 0x00050082u, 0x00000009u, 0x000060ccu, 0x00005f81u, 0x0000eeb6u, 0x0003003eu, 0x00005f60u, 0x000060ccu, 0x000600cau, 0x00000009u, 0x000060ceu, 0x000060ccu, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005f60u, 0x000060ceu, 0x00050080u, 0x00000009u, 0x000060d1u, 0x000060ceu, 0x0000eeb6u, 0x0003003eu, 0x00005f60u, 0x000060d1u, 0x0008000cu, 0x00000009u, 0x000060d3u, 0x00000001u, 0x0000002du, 0x000060d1u, 0x00000611u, 0x00000ae7u, 0x00050051u, 0x00000008u, 0x000060d4u, 0x000060d3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000060d5u, 0x000060d3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000060d6u, 0x000060d3u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000060d7u, 0x000060d3u, 0x00000003u, 0x0003003eu, 0x000060c9u, 0x000060d3u, 0x0003003eu, 0x00005f5bu, 0x000060d3u, 0x00050041u, 0x0000003eu, 0x00005f83u, 0x00005f5bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f84u, 0x00005f83u, 0x0004003du, 0x00000008u, 0x00005f86u, 0x00005f83u, 0x00050080u, 0x00000008u, 0x00005f87u, 0x00005f86u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00005f88u, 0x00005f87u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005f89u, 0x00005f84u, 0x00005f88u, 0x0003003eu, 0x00005f61u, 0x00005f89u, 0x000300f7u, 0x00005f8bu, 0x00000000u, 0x000400fau, 0x00002104u, 0x00005f8cu, 0x00005f8du, 0x000200f8u, 0x00005f8du, 0x000500c4u, 0x00000008u, 0x00005f96u, 0x000021aau, 0x0000021eu, 0x0003003eu, 0x00005f62u, 0x00005f96u, 0x000200f9u, 0x00005f8bu, 0x000200f8u, 0x00005f8cu, 0x00050084u, 0x00000008u, 0x00005f90u, 0x00005f89u, 0x000021aau, 0x00050080u, 0x00000008u, 0x00005f91u, 0x00005f90u, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00005f92u, 0x00005f91u, 0x00000218u, 0x0003003eu, 0x00005f62u, 0x00005f92u, 0x000500c3u, 0x00000008u, 0x00005f94u, 0x00005f92u, 0x0000021eu, 0x0003003eu, 0x000020a4u, 0x00005f94u, 0x000200f9u, 0x00005f8bu, 0x000200f8u, 0x00005f8bu, 0x000700f5u, 0x00000008u, 0x0000acd3u, 0x00005f94u, 0x00005f8cu, 0x000021aau, 0x00005f8du, 0x000700f5u, 0x00000008u, 0x0000acd0u, 0x00005f92u, 0x00005f8cu, 0x00005f96u, 0x00005f8du, 0x000300f7u, 0x00005f98u, 0x00000000u, 0x000400fau, 0x00002107u, 0x00005f99u, 0x00005f9au, 0x000200f8u, 0x00005f9au, 0x00050080u, 0x00000008u, 0x00005f9eu, 0x00005f89u, 0x0000a0e6u, 0x0003003eu, 0x00005f61u, 0x00005f9eu, 0x000200f9u, 0x00005f98u, 0x000200f8u, 0x00005f99u, 0x0003003eu, 0x00005f61u, 0x0000acd0u, 0x000200f9u, 0x00005f98u, 0x000200f8u, 0x00005f98u, 0x000700f5u, 0x00000008u, 0x0000acd1u, 0x0000acd0u, 0x00005f99u, 0x00005f9eu, 0x00005f9au, 0x0008000cu, 0x00000008u, 0x00005fa0u, 0x00000001u, 0x0000002du, 0x0000acd1u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00005f83u, 0x00005fa0u, 0x0004003du, 0x00000009u, 0x00005fa2u, 0x00005f5bu, 0x0003003eu, 0x00005f63u, 0x00005fa2u, 0x0003003eu, 0x00002027u, 0x0000acd3u, 0x00050051u, 0x00000008u, 0x000022f5u, 0x00005fa2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000022f6u, 0x00005fa2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000022f7u, 0x00005fa2u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000022f8u, 0x00005fa2u, 0x00000003u, 0x0003003eu, 0x00002097u, 0x00005fa2u, 0x00050041u, 0x0000003eu, 0x000022fau, 0x00002097u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000022fbu, 0x000022fau, 0x0003003eu, 0x0000208cu, 0x000022fbu, 0x000200f9u, 0x000022a1u, 0x000200f8u, 0x000022a2u, 0x0004003du, 0x00000009u, 0x000022acu, 0x0000202cu, 0x0004003du, 0x00000008u, 0x00005c2fu, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005c30u, 0x00005c2fu, 0x00000224u, 0x000500c4u, 0x00000008u, 0x00005c31u, 0x00005c30u, 0x00000221u, 0x000500c5u, 0x00000008u, 0x00005c32u, 0x00005c31u, 0x0000037du, 0x0003003eu, 0x00005c2eu, 0x00005c32u, 0x000d0050u, 0x000001cdu, 0x000022b1u, 0x0000287bu, 0x00002880u, 0x00002885u, 0x0000288au, 0x000022acu, 0x00000611u, 0x000093b0u, 0x0000a5fcu, 0x0000a6a9u, 0x00005c32u, 0x0003003eu, 0x0000777au, 0x0000287bu, 0x0003003eu, 0x0000777bu, 0x00002880u, 0x0003003eu, 0x0000777cu, 0x00002885u, 0x0003003eu, 0x0000777du, 0x0000288au, 0x0003003eu, 0x0000777eu, 0x000022acu, 0x0003003eu, 0x0000777fu, 0x00000611u, 0x0003003eu, 0x00007780u, 0x000093b0u, 0x0003003eu, 0x00007781u, 0x0000a5fcu, 0x0003003eu, 0x00007782u, 0x0000a6a9u, 0x0003003eu, 0x00007783u, 0x00005c32u, 0x0003003eu, 0x000077a4u, 0x0000287bu, 0x0003003eu, 0x000077a5u, 0x00002880u, 0x0003003eu, 0x000077a6u, 0x00002885u, 0x0003003eu, 0x000077a7u, 0x0000288au, 0x0003003eu, 0x000077a8u, 0x000022acu, 0x0003003eu, 0x000077a9u, 0x00000611u, 0x0003003eu, 0x000077aau, 0x000093b0u, 0x0003003eu, 0x000077abu, 0x0000a5fcu, 0x0003003eu, 0x000077acu, 0x0000a6a9u, 0x0003003eu, 0x000077adu, 0x00005c32u, 0x0003003eu, 0x0000208eu, 0x0000236eu, 0x0003003eu, 0x0000208fu, 0x00002373u, 0x0003003eu, 0x00002090u, 0x0000a0e6u, 0x0003003eu, 0x00002091u, 0x000021aau, 0x0003003eu, 0x00002092u, 0x00002104u, 0x0003003eu, 0x00002093u, 0x00002107u, 0x0003003eu, 0x00002094u, 0x00002125u, 0x0003003eu, 0x00006915u, 0x0000287bu, 0x0003003eu, 0x00006916u, 0x000022acu, 0x0003003eu, 0x00006917u, 0x00000611u, 0x0003003eu, 0x00006918u, 0x000093b0u, 0x0003003eu, 0x00006919u, 0x0000a5fcu, 0x0003003eu, 0x0000691au, 0x00005c32u, 0x00050041u, 0x0000003eu, 0x00005c4eu, 0x0000208eu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005c4fu, 0x00005c4eu, 0x0003003eu, 0x00005c35u, 0x00005c4fu, 0x00050041u, 0x0000003eu, 0x00005c50u, 0x0000208fu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005c51u, 0x00005c50u, 0x0003003eu, 0x00005c36u, 0x00005c51u, 0x000300f7u, 0x00005c90u, 0x00000000u, 0x000f00fbu, 0x00005c4fu, 0x00005c91u, 0x00000000u, 0x00005c92u, 0x00000001u, 0x00005c93u, 0x00000002u, 0x00005c94u, 0x00000004u, 0x00005c95u, 0x00000007u, 0x00005c96u, 0x00000006u, 0x00005c97u, 0x000200f8u, 0x00005c97u, 0x0003003eu, 0x00005c8cu, 0x00001927u, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c96u, 0x00060050u, 0x0000003cu, 0x00005ca9u, 0x00005c32u, 0x00005c32u, 0x00005c32u, 0x0003003eu, 0x00005c8cu, 0x00005ca9u, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c95u, 0x0004003du, 0x00000009u, 0x00005ca5u, 0x00006916u, 0x0008004fu, 0x0000003cu, 0x00005ca6u, 0x00005ca5u, 0x00005ca5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c8cu, 0x00005ca6u, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c94u, 0x0004003du, 0x00000009u, 0x00005ca2u, 0x00006919u, 0x0008004fu, 0x0000003cu, 0x00005ca3u, 0x00005ca2u, 0x00005ca2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c8cu, 0x00005ca3u, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c93u, 0x0004003du, 0x00000009u, 0x00005c9fu, 0x00006918u, 0x0008004fu, 0x0000003cu, 0x00005ca0u, 0x00005c9fu, 0x00005c9fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c8cu, 0x00005ca0u, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c92u, 0x0004003du, 0x00000009u, 0x00005c9cu, 0x00006917u, 0x0008004fu, 0x0000003cu, 0x00005c9du, 0x00005c9cu, 0x00005c9cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c8cu, 0x00005c9du, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c91u, 0x0004003du, 0x00000009u, 0x00005c99u, 0x00006915u, 0x0008004fu, 0x0000003cu, 0x00005c9au, 0x00005c99u, 0x00005c99u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c8cu, 0x00005c9au, 0x000200f9u, 0x00005c90u, 0x000200f8u, 0x00005c90u, 0x001100f5u, 0x0000003cu, 0x0000b373u, 0x00005c9au, 0x00005c91u, 0x00005c9du, 0x00005c92u, 0x00005ca0u, 0x00005c93u, 0x00005ca3u, 0x00005c94u, 0x00005ca6u, 0x00005c95u, 0x00005ca9u, 0x00005c96u, 0x00001927u, 0x00005c97u, 0x000300f7u, 0x00005cabu, 0x00000000u, 0x000d00fbu, 0x00005c51u, 0x00005cacu, 0x00000000u, 0x00005cadu, 0x00000001u, 0x00005caeu, 0x00000002u, 0x00005cafu, 0x00000004u, 0x00005cb0u, 0x00000006u, 0x00005cb1u, 0x000200f8u, 0x00005cb1u, 0x0003003eu, 0x00005c8du, 0x00001926u, 0x000200f9u, 0x00005cabu, 0x000200f8u, 0x00005cb0u, 0x00050041u, 0x0000003eu, 0x00006925u, 0x00006916u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cbbu, 0x00006925u, 0x0003003eu, 0x00005c8du, 0x00005cbbu, 0x000200f9u, 0x00005cabu, 0x000200f8u, 0x00005cafu, 0x00050041u, 0x0000003eu, 0x00006924u, 0x00006919u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cb9u, 0x00006924u, 0x0003003eu, 0x00005c8du, 0x00005cb9u, 0x000200f9u, 0x00005cabu, 0x000200f8u, 0x00005caeu, 0x00050041u, 0x0000003eu, 0x00006923u, 0x00006918u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cb7u, 0x00006923u, 0x0003003eu, 0x00005c8du, 0x00005cb7u, 0x000200f9u, 0x00005cabu, 0x000200f8u, 0x00005cadu, 0x00050041u, 0x0000003eu, 0x00006922u, 0x00006917u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cb5u, 0x00006922u, 0x0003003eu, 0x00005c8du, 0x00005cb5u, 0x000200f9u, 0x00005cabu, 0x000200f8u, 0x00005cacu, 0x00050041u, 0x0000003eu, 0x00006921u, 0x00006915u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cb3u, 0x00006921u, 0x0003003eu, 0x00005c8du, 0x00005cb3u, 0x000200f9u, 0x00005cabu, 0x000200f8u, 0x00005cabu, 0x000f00f5u, 0x00000008u, 0x0000b374u, 0x00005cb3u, 0x00005cacu, 0x00005cb5u, 0x00005cadu, 0x00005cb7u, 0x00005caeu, 0x00005cb9u, 0x00005cafu, 0x00005cbbu, 0x00005cb0u, 0x00001926u, 0x00005cb1u, 0x00050051u, 0x00000008u, 0x00005cbeu, 0x0000b373u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005cbfu, 0x0000b373u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005cc0u, 0x0000b373u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005cc1u, 0x00005cbeu, 0x00005cbfu, 0x00005cc0u, 0x0000b374u, 0x0003003eu, 0x00005c8eu, 0x00005cc1u, 0x0003003eu, 0x00005c33u, 0x00005cc1u, 0x0003003eu, 0x00006926u, 0x00002880u, 0x0003003eu, 0x00006927u, 0x000022acu, 0x0003003eu, 0x00006928u, 0x00000611u, 0x0003003eu, 0x00006929u, 0x000093b0u, 0x0003003eu, 0x0000692au, 0x0000a5fcu, 0x00050041u, 0x0000003eu, 0x00005c54u, 0x0000208eu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005c55u, 0x00005c54u, 0x0003003eu, 0x00005c39u, 0x00005c55u, 0x00050041u, 0x0000003eu, 0x00005c56u, 0x0000208fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005c57u, 0x00005c56u, 0x0003003eu, 0x00005c3au, 0x00005c57u, 0x000300f7u, 0x00005cc6u, 0x00000000u, 0x000d00fbu, 0x00005c55u, 0x00005cc7u, 0x00000000u, 0x00005cc8u, 0x00000001u, 0x00005cc9u, 0x00000002u, 0x00005ccau, 0x00000004u, 0x00005ccbu, 0x00000007u, 0x00005cccu, 0x000200f8u, 0x00005cccu, 0x00050041u, 0x0000003eu, 0x00006930u, 0x00006926u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005cddu, 0x00006930u, 0x000500c4u, 0x00000008u, 0x00005cdeu, 0x00005cddu, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x00006931u, 0x00006926u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005ce0u, 0x00006931u, 0x000500c5u, 0x00000008u, 0x00005ce1u, 0x00005cdeu, 0x00005ce0u, 0x00060050u, 0x0000003cu, 0x00005ce2u, 0x00005ce1u, 0x00005ce1u, 0x00005ce1u, 0x0003003eu, 0x00005cc2u, 0x00005ce2u, 0x000200f9u, 0x00005cc6u, 0x000200f8u, 0x00005ccbu, 0x0004003du, 0x00000009u, 0x00005cdau, 0x00006927u, 0x0008004fu, 0x0000003cu, 0x00005cdbu, 0x00005cdau, 0x00005cdau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cc2u, 0x00005cdbu, 0x000200f9u, 0x00005cc6u, 0x000200f8u, 0x00005ccau, 0x0004003du, 0x00000009u, 0x00005cd7u, 0x0000692au, 0x0008004fu, 0x0000003cu, 0x00005cd8u, 0x00005cd7u, 0x00005cd7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cc2u, 0x00005cd8u, 0x000200f9u, 0x00005cc6u, 0x000200f8u, 0x00005cc9u, 0x0004003du, 0x00000009u, 0x00005cd4u, 0x00006929u, 0x0008004fu, 0x0000003cu, 0x00005cd5u, 0x00005cd4u, 0x00005cd4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cc2u, 0x00005cd5u, 0x000200f9u, 0x00005cc6u, 0x000200f8u, 0x00005cc8u, 0x0004003du, 0x00000009u, 0x00005cd1u, 0x00006928u, 0x0008004fu, 0x0000003cu, 0x00005cd2u, 0x00005cd1u, 0x00005cd1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cc2u, 0x00005cd2u, 0x000200f9u, 0x00005cc6u, 0x000200f8u, 0x00005cc7u, 0x0004003du, 0x00000009u, 0x00005cceu, 0x00006926u, 0x0008004fu, 0x0000003cu, 0x00005ccfu, 0x00005cceu, 0x00005cceu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cc2u, 0x00005ccfu, 0x000200f9u, 0x00005cc6u, 0x000200f8u, 0x00005cc6u, 0x000f00f5u, 0x0000003cu, 0x0000b38bu, 0x00005ccfu, 0x00005cc7u, 0x00005cd2u, 0x00005cc8u, 0x00005cd5u, 0x00005cc9u, 0x00005cd8u, 0x00005ccau, 0x00005cdbu, 0x00005ccbu, 0x00005ce2u, 0x00005cccu, 0x000300f7u, 0x00005ce4u, 0x00000000u, 0x000d00fbu, 0x00005c57u, 0x00005ce5u, 0x00000000u, 0x00005ce6u, 0x00000001u, 0x00005ce7u, 0x00000002u, 0x00005ce8u, 0x00000004u, 0x00005ce9u, 0x00000006u, 0x00005ceau, 0x000200f8u, 0x00005ceau, 0x0003003eu, 0x00005cc3u, 0x00001926u, 0x000200f9u, 0x00005ce4u, 0x000200f8u, 0x00005ce9u, 0x00050041u, 0x0000003eu, 0x00006936u, 0x00006927u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cf4u, 0x00006936u, 0x0003003eu, 0x00005cc3u, 0x00005cf4u, 0x000200f9u, 0x00005ce4u, 0x000200f8u, 0x00005ce8u, 0x00050041u, 0x0000003eu, 0x00006935u, 0x0000692au, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cf2u, 0x00006935u, 0x0003003eu, 0x00005cc3u, 0x00005cf2u, 0x000200f9u, 0x00005ce4u, 0x000200f8u, 0x00005ce7u, 0x00050041u, 0x0000003eu, 0x00006934u, 0x00006929u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cf0u, 0x00006934u, 0x0003003eu, 0x00005cc3u, 0x00005cf0u, 0x000200f9u, 0x00005ce4u, 0x000200f8u, 0x00005ce6u, 0x00050041u, 0x0000003eu, 0x00006933u, 0x00006928u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ceeu, 0x00006933u, 0x0003003eu, 0x00005cc3u, 0x00005ceeu, 0x000200f9u, 0x00005ce4u, 0x000200f8u, 0x00005ce5u, 0x00050041u, 0x0000003eu, 0x00006932u, 0x00006926u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cecu, 0x00006932u, 0x0003003eu, 0x00005cc3u, 0x00005cecu, 0x000200f9u, 0x00005ce4u, 0x000200f8u, 0x00005ce4u, 0x000f00f5u, 0x00000008u, 0x0000b38cu, 0x00005cecu, 0x00005ce5u, 0x00005ceeu, 0x00005ce6u, 0x00005cf0u, 0x00005ce7u, 0x00005cf2u, 0x00005ce8u, 0x00005cf4u, 0x00005ce9u, 0x00001926u, 0x00005ceau, 0x00050051u, 0x00000008u, 0x00005cf7u, 0x0000b38bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005cf8u, 0x0000b38bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005cf9u, 0x0000b38bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005cfau, 0x00005cf7u, 0x00005cf8u, 0x00005cf9u, 0x0000b38cu, 0x0003003eu, 0x00005cc4u, 0x00005cfau, 0x0003003eu, 0x00005c37u, 0x00005cfau, 0x0003003eu, 0x00006937u, 0x00002885u, 0x0003003eu, 0x00006938u, 0x000022acu, 0x0003003eu, 0x00006939u, 0x00000611u, 0x0003003eu, 0x0000693au, 0x000093b0u, 0x0003003eu, 0x0000693bu, 0x0000a5fcu, 0x0003003eu, 0x0000693cu, 0x0000a6a9u, 0x00050041u, 0x0000003eu, 0x00005c5au, 0x0000208eu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005c5bu, 0x00005c5au, 0x0003003eu, 0x00005c3du, 0x00005c5bu, 0x00050041u, 0x0000003eu, 0x00005c5cu, 0x0000208fu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005c5du, 0x00005c5cu, 0x0003003eu, 0x00005c3eu, 0x00005c5du, 0x000300f7u, 0x00005cffu, 0x00000000u, 0x001700fbu, 0x00005c5bu, 0x00005d00u, 0x00000000u, 0x00005d01u, 0x00000007u, 0x00005d02u, 0x00000001u, 0x00005d03u, 0x00000002u, 0x00005d04u, 0x00000004u, 0x00005d05u, 0x00000008u, 0x00005d06u, 0x00000009u, 0x00005d07u, 0x0000000bu, 0x00005d08u, 0x0000000du, 0x00005d09u, 0x0000000fu, 0x00005d0au, 0x000200f8u, 0x00005d0au, 0x00050041u, 0x0000003eu, 0x00006943u, 0x00006937u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005d2au, 0x00006943u, 0x000500c4u, 0x00000008u, 0x00005d2bu, 0x00005d2au, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x00006944u, 0x00006937u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005d2du, 0x00006944u, 0x000500c5u, 0x00000008u, 0x00005d2eu, 0x00005d2bu, 0x00005d2du, 0x00060050u, 0x0000003cu, 0x00005d2fu, 0x00005d2eu, 0x00005d2eu, 0x00005d2eu, 0x0003003eu, 0x00005cfbu, 0x00005d2fu, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d09u, 0x00060050u, 0x0000003cu, 0x00005d28u, 0x0000a6a9u, 0x0000a6a9u, 0x0000a6a9u, 0x0003003eu, 0x00005cfbu, 0x00005d28u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d08u, 0x0004003du, 0x00000009u, 0x00005d24u, 0x00006938u, 0x0008004fu, 0x0000003cu, 0x00005d25u, 0x00005d24u, 0x00005d24u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005cfbu, 0x00005d25u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d07u, 0x0004003du, 0x00000009u, 0x00005d21u, 0x0000693bu, 0x0008004fu, 0x0000003cu, 0x00005d22u, 0x00005d21u, 0x00005d21u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005cfbu, 0x00005d22u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d06u, 0x0004003du, 0x00000009u, 0x00005d1eu, 0x0000693au, 0x0008004fu, 0x0000003cu, 0x00005d1fu, 0x00005d1eu, 0x00005d1eu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005cfbu, 0x00005d1fu, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d05u, 0x0004003du, 0x00000009u, 0x00005d1bu, 0x00006938u, 0x0008004fu, 0x0000003cu, 0x00005d1cu, 0x00005d1bu, 0x00005d1bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cfbu, 0x00005d1cu, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d04u, 0x0004003du, 0x00000009u, 0x00005d18u, 0x0000693bu, 0x0008004fu, 0x0000003cu, 0x00005d19u, 0x00005d18u, 0x00005d18u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cfbu, 0x00005d19u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d03u, 0x0004003du, 0x00000009u, 0x00005d15u, 0x0000693au, 0x0008004fu, 0x0000003cu, 0x00005d16u, 0x00005d15u, 0x00005d15u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cfbu, 0x00005d16u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d02u, 0x0003003eu, 0x00005cfbu, 0x00000933u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d01u, 0x0003003eu, 0x00005cfbu, 0x00000933u, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005d00u, 0x0004003du, 0x00000009u, 0x00005d0cu, 0x00006937u, 0x0008004fu, 0x0000003cu, 0x00005d0du, 0x00005d0cu, 0x00005d0cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cfbu, 0x00005d0du, 0x000200f9u, 0x00005cffu, 0x000200f8u, 0x00005cffu, 0x001900f5u, 0x0000003cu, 0x0000b3a4u, 0x00005d0du, 0x00005d00u, 0x00000933u, 0x00005d01u, 0x00000933u, 0x00005d02u, 0x00005d16u, 0x00005d03u, 0x00005d19u, 0x00005d04u, 0x00005d1cu, 0x00005d05u, 0x00005d1fu, 0x00005d06u, 0x00005d22u, 0x00005d07u, 0x00005d25u, 0x00005d08u, 0x00005d28u, 0x00005d09u, 0x00005d2fu, 0x00005d0au, 0x000300f7u, 0x00005d31u, 0x00000000u, 0x000b00fbu, 0x00005c5du, 0x00005d32u, 0x00000000u, 0x00005d33u, 0x00000001u, 0x00005d34u, 0x00000002u, 0x00005d35u, 0x00000004u, 0x00005d36u, 0x000200f8u, 0x00005d36u, 0x00050041u, 0x0000003eu, 0x00006948u, 0x00006938u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d40u, 0x00006948u, 0x0003003eu, 0x00005cfcu, 0x00005d40u, 0x000200f9u, 0x00005d31u, 0x000200f8u, 0x00005d35u, 0x00050041u, 0x0000003eu, 0x00006947u, 0x0000693bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d3eu, 0x00006947u, 0x0003003eu, 0x00005cfcu, 0x00005d3eu, 0x000200f9u, 0x00005d31u, 0x000200f8u, 0x00005d34u, 0x00050041u, 0x0000003eu, 0x00006946u, 0x0000693au, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d3cu, 0x00006946u, 0x0003003eu, 0x00005cfcu, 0x00005d3cu, 0x000200f9u, 0x00005d31u, 0x000200f8u, 0x00005d33u, 0x0003003eu, 0x00005cfcu, 0x0000a6a9u, 0x000200f9u, 0x00005d31u, 0x000200f8u, 0x00005d32u, 0x00050041u, 0x0000003eu, 0x00006945u, 0x00006937u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d38u, 0x00006945u, 0x0003003eu, 0x00005cfcu, 0x00005d38u, 0x000200f9u, 0x00005d31u, 0x000200f8u, 0x00005d31u, 0x000d00f5u, 0x00000008u, 0x0000b3a5u, 0x00005d38u, 0x00005d32u, 0x0000a6a9u, 0x00005d33u, 0x00005d3cu, 0x00005d34u, 0x00005d3eu, 0x00005d35u, 0x00005d40u, 0x00005d36u, 0x00050051u, 0x00000008u, 0x00005d43u, 0x0000b3a4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d44u, 0x0000b3a4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d45u, 0x0000b3a4u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005d46u, 0x00005d43u, 0x00005d44u, 0x00005d45u, 0x0000b3a5u, 0x0003003eu, 0x00005cfdu, 0x00005d46u, 0x0003003eu, 0x00005c3bu, 0x00005d46u, 0x0003003eu, 0x00006949u, 0x0000288au, 0x0003003eu, 0x0000694au, 0x000022acu, 0x0003003eu, 0x0000694bu, 0x00000611u, 0x0003003eu, 0x0000694cu, 0x000093b0u, 0x0003003eu, 0x0000694du, 0x0000a5fcu, 0x00050041u, 0x0000003eu, 0x00005c60u, 0x0000208eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005c61u, 0x00005c60u, 0x0003003eu, 0x00005c41u, 0x00005c61u, 0x00050041u, 0x0000003eu, 0x00005c62u, 0x0000208fu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005c63u, 0x00005c62u, 0x0003003eu, 0x00005c42u, 0x00005c63u, 0x000300f7u, 0x00005d4bu, 0x00000000u, 0x000d00fbu, 0x00005c61u, 0x00005d4cu, 0x00000000u, 0x00005d4du, 0x00000001u, 0x00005d4eu, 0x00000002u, 0x00005d4fu, 0x00000004u, 0x00005d50u, 0x00000006u, 0x00005d51u, 0x000200f8u, 0x00005d51u, 0x0003003eu, 0x00005d47u, 0x00001927u, 0x000200f9u, 0x00005d4bu, 0x000200f8u, 0x00005d50u, 0x0004003du, 0x00000009u, 0x00005d5fu, 0x0000694au, 0x0008004fu, 0x0000003cu, 0x00005d60u, 0x00005d5fu, 0x00005d5fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d47u, 0x00005d60u, 0x000200f9u, 0x00005d4bu, 0x000200f8u, 0x00005d4fu, 0x0004003du, 0x00000009u, 0x00005d5cu, 0x0000694du, 0x0008004fu, 0x0000003cu, 0x00005d5du, 0x00005d5cu, 0x00005d5cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d47u, 0x00005d5du, 0x000200f9u, 0x00005d4bu, 0x000200f8u, 0x00005d4eu, 0x0004003du, 0x00000009u, 0x00005d59u, 0x0000694cu, 0x0008004fu, 0x0000003cu, 0x00005d5au, 0x00005d59u, 0x00005d59u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d47u, 0x00005d5au, 0x000200f9u, 0x00005d4bu, 0x000200f8u, 0x00005d4du, 0x0004003du, 0x00000009u, 0x00005d56u, 0x0000694bu, 0x0008004fu, 0x0000003cu, 0x00005d57u, 0x00005d56u, 0x00005d56u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d47u, 0x00005d57u, 0x000200f9u, 0x00005d4bu, 0x000200f8u, 0x00005d4cu, 0x0004003du, 0x00000009u, 0x00005d53u, 0x00006949u, 0x0008004fu, 0x0000003cu, 0x00005d54u, 0x00005d53u, 0x00005d53u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d47u, 0x00005d54u, 0x000200f9u, 0x00005d4bu, 0x000200f8u, 0x00005d4bu, 0x000f00f5u, 0x0000003cu, 0x0000b3bcu, 0x00005d54u, 0x00005d4cu, 0x00005d57u, 0x00005d4du, 0x00005d5au, 0x00005d4eu, 0x00005d5du, 0x00005d4fu, 0x00005d60u, 0x00005d50u, 0x00001927u, 0x00005d51u, 0x000300f7u, 0x00005d62u, 0x00000000u, 0x000d00fbu, 0x00005c63u, 0x00005d63u, 0x00000000u, 0x00005d64u, 0x00000001u, 0x00005d65u, 0x00000002u, 0x00005d66u, 0x00000004u, 0x00005d67u, 0x00000006u, 0x00005d68u, 0x000200f8u, 0x00005d68u, 0x0003003eu, 0x00005d48u, 0x00001926u, 0x000200f9u, 0x00005d62u, 0x000200f8u, 0x00005d67u, 0x00050041u, 0x0000003eu, 0x00006957u, 0x0000694au, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d72u, 0x00006957u, 0x0003003eu, 0x00005d48u, 0x00005d72u, 0x000200f9u, 0x00005d62u, 0x000200f8u, 0x00005d66u, 0x00050041u, 0x0000003eu, 0x00006956u, 0x0000694du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d70u, 0x00006956u, 0x0003003eu, 0x00005d48u, 0x00005d70u, 0x000200f9u, 0x00005d62u, 0x000200f8u, 0x00005d65u, 0x00050041u, 0x0000003eu, 0x00006955u, 0x0000694cu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d6eu, 0x00006955u, 0x0003003eu, 0x00005d48u, 0x00005d6eu, 0x000200f9u, 0x00005d62u, 0x000200f8u, 0x00005d64u, 0x00050041u, 0x0000003eu, 0x00006954u, 0x0000694bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d6cu, 0x00006954u, 0x0003003eu, 0x00005d48u, 0x00005d6cu, 0x000200f9u, 0x00005d62u, 0x000200f8u, 0x00005d63u, 0x00050041u, 0x0000003eu, 0x00006953u, 0x00006949u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d6au, 0x00006953u, 0x0003003eu, 0x00005d48u, 0x00005d6au, 0x000200f9u, 0x00005d62u, 0x000200f8u, 0x00005d62u, 0x000f00f5u, 0x00000008u, 0x0000b3bdu, 0x00005d6au, 0x00005d63u, 0x00005d6cu, 0x00005d64u, 0x00005d6eu, 0x00005d65u, 0x00005d70u, 0x00005d66u, 0x00005d72u, 0x00005d67u, 0x00001926u, 0x00005d68u, 0x00050051u, 0x00000008u, 0x00005d75u, 0x0000b3bcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d76u, 0x0000b3bcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d77u, 0x0000b3bcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005d78u, 0x00005d75u, 0x00005d76u, 0x00005d77u, 0x0000b3bdu, 0x0003003eu, 0x00005d49u, 0x00005d78u, 0x0003003eu, 0x00005c3fu, 0x00005d78u, 0x0003003eu, 0x00005c44u, 0x00005cc1u, 0x0003003eu, 0x00005c45u, 0x00005cfau, 0x0003003eu, 0x00005c46u, 0x00005d46u, 0x0003003eu, 0x00005c47u, 0x00005d78u, 0x000600cau, 0x00000009u, 0x00005d7fu, 0x00005d46u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005c46u, 0x00005d7fu, 0x0003003eu, 0x00005d79u, 0x00005cc1u, 0x00050082u, 0x00000009u, 0x00005da0u, 0x00005cc1u, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x00005da1u, 0x00005da0u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005da3u, 0x00005da1u, 0x0000eeb6u, 0x0003003eu, 0x00005d9du, 0x00005da3u, 0x0003003eu, 0x00005c44u, 0x00005da3u, 0x0003003eu, 0x00005d7au, 0x00005cfau, 0x00050082u, 0x00000009u, 0x00005da7u, 0x00005cfau, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x00005da8u, 0x00005da7u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005daau, 0x00005da8u, 0x0000eeb6u, 0x0003003eu, 0x00005da4u, 0x00005daau, 0x0003003eu, 0x00005c45u, 0x00005daau, 0x0003003eu, 0x00005d7bu, 0x00005d78u, 0x00050082u, 0x00000009u, 0x00005daeu, 0x00005d78u, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x00005dafu, 0x00005daeu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005db1u, 0x00005dafu, 0x0000eeb6u, 0x0003003eu, 0x00005dabu, 0x00005db1u, 0x0003003eu, 0x00005c47u, 0x00005db1u, 0x00050082u, 0x00000009u, 0x00005d88u, 0x00005da3u, 0x00005daau, 0x00050084u, 0x00000009u, 0x00005d8au, 0x00005d88u, 0x00005d7fu, 0x0003003eu, 0x00005d7cu, 0x00005d8au, 0x00050080u, 0x00000009u, 0x00005d8du, 0x00005d8au, 0x0000eeb6u, 0x0003003eu, 0x00005d7cu, 0x00005d8du, 0x000500c3u, 0x00000009u, 0x00005d90u, 0x00005d8du, 0x0000eec1u, 0x00050051u, 0x00000008u, 0x00005d91u, 0x00005d90u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d92u, 0x00005d90u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d93u, 0x00005d90u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005d94u, 0x00005d90u, 0x00000003u, 0x00050051u, 0x00000008u, 0x00005d97u, 0x00005db1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d98u, 0x00005db1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d99u, 0x00005db1u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005d9au, 0x00005db1u, 0x00000003u, 0x00050080u, 0x00000009u, 0x00005d9cu, 0x00005d90u, 0x00005db1u, 0x0003003eu, 0x00005d7du, 0x00005d9cu, 0x0003003eu, 0x00005c43u, 0x00005d9cu, 0x000300f7u, 0x00005c6bu, 0x00000000u, 0x000400fau, 0x00002125u, 0x00005c6cu, 0x00005c6du, 0x000200f8u, 0x00005c6du, 0x0003003eu, 0x00002095u, 0x00000203u, 0x000200f9u, 0x00005c6bu, 0x000200f8u, 0x00005c6cu, 0x00050041u, 0x0000003eu, 0x00005c6eu, 0x00005c43u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005c6fu, 0x00005c6eu, 0x0003003eu, 0x00005c49u, 0x00005c6fu, 0x00050082u, 0x00000008u, 0x00005db4u, 0x00005c6fu, 0x00000623u, 0x000600cau, 0x00000008u, 0x00005db5u, 0x00005db4u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000008u, 0x00005db6u, 0x00005db5u, 0x00000623u, 0x0008000cu, 0x00000008u, 0x00005db7u, 0x00000001u, 0x0000002du, 0x00005db6u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00005db2u, 0x00005db7u, 0x0003003eu, 0x00005c48u, 0x00005db7u, 0x00050080u, 0x00000008u, 0x00005c73u, 0x00005db7u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00005c74u, 0x00005c73u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005c75u, 0x00005db7u, 0x00005c74u, 0x0003003eu, 0x00005c4au, 0x00005c75u, 0x000300f7u, 0x00005c77u, 0x00000000u, 0x000400fau, 0x00002107u, 0x00005c78u, 0x00005c79u, 0x000200f8u, 0x00005c79u, 0x00050080u, 0x00000008u, 0x00005c88u, 0x00005c75u, 0x0000a0e6u, 0x0003003eu, 0x00005c4au, 0x00005c88u, 0x000200f9u, 0x00005c77u, 0x000200f8u, 0x00005c78u, 0x000300f7u, 0x00005c7bu, 0x00000000u, 0x000400fau, 0x00002104u, 0x00005c7cu, 0x00005c7du, 0x000200f8u, 0x00005c7du, 0x000500c4u, 0x00000008u, 0x00005c84u, 0x000021aau, 0x0000021eu, 0x0003003eu, 0x00005c4bu, 0x00005c84u, 0x000200f9u, 0x00005c7bu, 0x000200f8u, 0x00005c7cu, 0x00050084u, 0x00000008u, 0x00005c80u, 0x00005c75u, 0x000021aau, 0x00050080u, 0x00000008u, 0x00005c81u, 0x00005c80u, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00005c82u, 0x00005c81u, 0x00000218u, 0x0003003eu, 0x00005c4bu, 0x00005c82u, 0x000200f9u, 0x00005c7bu, 0x000200f8u, 0x00005c7bu, 0x000700f5u, 0x00000008u, 0x0000b3f2u, 0x00005c82u, 0x00005c7cu, 0x00005c84u, 0x00005c7du, 0x0003003eu, 0x00005c4au, 0x0000b3f2u, 0x000200f9u, 0x00005c77u, 0x000200f8u, 0x00005c77u, 0x000700f5u, 0x00000008u, 0x0000b3f3u, 0x0000b3f2u, 0x00005c7bu, 0x00005c88u, 0x00005c79u, 0x0008000cu, 0x00000008u, 0x00005c8au, 0x00000001u, 0x0000002du, 0x0000b3f3u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00002095u, 0x00005c8au, 0x000200f9u, 0x00005c6bu, 0x000200f8u, 0x00005c6bu, 0x000700f5u, 0x00000008u, 0x0000b3f4u, 0x00005c8au, 0x00005c77u, 0x00000203u, 0x00005c6du, 0x0004003du, 0x00000009u, 0x00005c8bu, 0x00005c43u, 0x0003003eu, 0x00005c4cu, 0x00005c8bu, 0x0003003eu, 0x0000208cu, 0x0000b3f4u, 0x0003003eu, 0x0000777fu, 0x00005c8bu, 0x0003003eu, 0x0000777au, 0x0000288fu, 0x0003003eu, 0x0000777bu, 0x00002894u, 0x0003003eu, 0x0000777cu, 0x00002899u, 0x0003003eu, 0x0000777du, 0x0000289eu, 0x0003003eu, 0x00002096u, 0x000093b0u, 0x0003003eu, 0x00007780u, 0x0000a5fcu, 0x0003003eu, 0x00007781u, 0x000093b0u, 0x000d0050u, 0x000001cdu, 0x000077a3u, 0x0000288fu, 0x00002894u, 0x00002899u, 0x0000289eu, 0x000022acu, 0x00005c8bu, 0x0000a5fcu, 0x000093b0u, 0x0000a6a9u, 0x00005c32u, 0x0003003eu, 0x000077e4u, 0x0000288fu, 0x0003003eu, 0x000077e5u, 0x00002894u, 0x0003003eu, 0x000077e6u, 0x00002899u, 0x0003003eu, 0x000077e7u, 0x0000289eu, 0x0003003eu, 0x000077e8u, 0x000022acu, 0x0003003eu, 0x000077e9u, 0x00005c8bu, 0x0003003eu, 0x000077eau, 0x0000a5fcu, 0x0003003eu, 0x000077ebu, 0x000093b0u, 0x0003003eu, 0x000077ecu, 0x0000a6a9u, 0x0003003eu, 0x000077edu, 0x00005c32u, 0x0003003eu, 0x00002099u, 0x00002378u, 0x0003003eu, 0x0000209au, 0x0000237du, 0x0003003eu, 0x0000209bu, 0x0000a0e6u, 0x0003003eu, 0x0000209cu, 0x000021aau, 0x0003003eu, 0x0000209du, 0x00002104u, 0x0003003eu, 0x0000209eu, 0x00002107u, 0x0003003eu, 0x000068d2u, 0x0000288fu, 0x0003003eu, 0x000068d3u, 0x000022acu, 0x0003003eu, 0x000068d4u, 0x00005c8bu, 0x0003003eu, 0x000068d5u, 0x0000a5fcu, 0x0003003eu, 0x000068d6u, 0x000093b0u, 0x0003003eu, 0x000068d7u, 0x00005c32u, 0x00050041u, 0x0000003eu, 0x00005dd2u, 0x00002099u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005dd3u, 0x00005dd2u, 0x0003003eu, 0x00005dbau, 0x00005dd3u, 0x00050041u, 0x0000003eu, 0x00005dd4u, 0x0000209au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005dd5u, 0x00005dd4u, 0x0003003eu, 0x00005dbbu, 0x00005dd5u, 0x000300f7u, 0x00005e14u, 0x00000000u, 0x000f00fbu, 0x00005dd3u, 0x00005e15u, 0x00000000u, 0x00005e16u, 0x00000001u, 0x00005e17u, 0x00000002u, 0x00005e18u, 0x00000004u, 0x00005e19u, 0x00000007u, 0x00005e1au, 0x00000006u, 0x00005e1bu, 0x000200f8u, 0x00005e1bu, 0x0003003eu, 0x00005e10u, 0x00001927u, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e1au, 0x00060050u, 0x0000003cu, 0x00005e2du, 0x00005c32u, 0x00005c32u, 0x00005c32u, 0x0003003eu, 0x00005e10u, 0x00005e2du, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e19u, 0x0004003du, 0x00000009u, 0x00005e29u, 0x000068d3u, 0x0008004fu, 0x0000003cu, 0x00005e2au, 0x00005e29u, 0x00005e29u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e10u, 0x00005e2au, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e18u, 0x0004003du, 0x00000009u, 0x00005e26u, 0x000068d6u, 0x0008004fu, 0x0000003cu, 0x00005e27u, 0x00005e26u, 0x00005e26u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e10u, 0x00005e27u, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e17u, 0x0004003du, 0x00000009u, 0x00005e23u, 0x000068d5u, 0x0008004fu, 0x0000003cu, 0x00005e24u, 0x00005e23u, 0x00005e23u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e10u, 0x00005e24u, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e16u, 0x0004003du, 0x00000009u, 0x00005e20u, 0x000068d4u, 0x0008004fu, 0x0000003cu, 0x00005e21u, 0x00005e20u, 0x00005e20u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e10u, 0x00005e21u, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e15u, 0x0004003du, 0x00000009u, 0x00005e1du, 0x000068d2u, 0x0008004fu, 0x0000003cu, 0x00005e1eu, 0x00005e1du, 0x00005e1du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e10u, 0x00005e1eu, 0x000200f9u, 0x00005e14u, 0x000200f8u, 0x00005e14u, 0x001100f5u, 0x0000003cu, 0x0000b49cu, 0x00005e1eu, 0x00005e15u, 0x00005e21u, 0x00005e16u, 0x00005e24u, 0x00005e17u, 0x00005e27u, 0x00005e18u, 0x00005e2au, 0x00005e19u, 0x00005e2du, 0x00005e1au, 0x00001927u, 0x00005e1bu, 0x000300f7u, 0x00005e2fu, 0x00000000u, 0x000d00fbu, 0x00005dd5u, 0x00005e30u, 0x00000000u, 0x00005e31u, 0x00000001u, 0x00005e32u, 0x00000002u, 0x00005e33u, 0x00000004u, 0x00005e34u, 0x00000006u, 0x00005e35u, 0x000200f8u, 0x00005e35u, 0x0003003eu, 0x00005e11u, 0x00001926u, 0x000200f9u, 0x00005e2fu, 0x000200f8u, 0x00005e34u, 0x00050041u, 0x0000003eu, 0x000068e2u, 0x000068d3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e3fu, 0x000068e2u, 0x0003003eu, 0x00005e11u, 0x00005e3fu, 0x000200f9u, 0x00005e2fu, 0x000200f8u, 0x00005e33u, 0x00050041u, 0x0000003eu, 0x000068e1u, 0x000068d6u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e3du, 0x000068e1u, 0x0003003eu, 0x00005e11u, 0x00005e3du, 0x000200f9u, 0x00005e2fu, 0x000200f8u, 0x00005e32u, 0x00050041u, 0x0000003eu, 0x000068e0u, 0x000068d5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e3bu, 0x000068e0u, 0x0003003eu, 0x00005e11u, 0x00005e3bu, 0x000200f9u, 0x00005e2fu, 0x000200f8u, 0x00005e31u, 0x00050041u, 0x0000003eu, 0x000068dfu, 0x000068d4u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e39u, 0x000068dfu, 0x0003003eu, 0x00005e11u, 0x00005e39u, 0x000200f9u, 0x00005e2fu, 0x000200f8u, 0x00005e30u, 0x00050041u, 0x0000003eu, 0x000068deu, 0x000068d2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e37u, 0x000068deu, 0x0003003eu, 0x00005e11u, 0x00005e37u, 0x000200f9u, 0x00005e2fu, 0x000200f8u, 0x00005e2fu, 0x000f00f5u, 0x00000008u, 0x0000b49du, 0x00005e37u, 0x00005e30u, 0x00005e39u, 0x00005e31u, 0x00005e3bu, 0x00005e32u, 0x00005e3du, 0x00005e33u, 0x00005e3fu, 0x00005e34u, 0x00001926u, 0x00005e35u, 0x00050051u, 0x00000008u, 0x00005e42u, 0x0000b49cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005e43u, 0x0000b49cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005e44u, 0x0000b49cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005e45u, 0x00005e42u, 0x00005e43u, 0x00005e44u, 0x0000b49du, 0x0003003eu, 0x00005e12u, 0x00005e45u, 0x0003003eu, 0x00005db8u, 0x00005e45u, 0x0003003eu, 0x000068e3u, 0x00002894u, 0x0003003eu, 0x000068e4u, 0x000022acu, 0x0003003eu, 0x000068e5u, 0x00005c8bu, 0x0003003eu, 0x000068e6u, 0x0000a5fcu, 0x0003003eu, 0x000068e7u, 0x000093b0u, 0x00050041u, 0x0000003eu, 0x00005dd8u, 0x00002099u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005dd9u, 0x00005dd8u, 0x0003003eu, 0x00005dbeu, 0x00005dd9u, 0x00050041u, 0x0000003eu, 0x00005ddau, 0x0000209au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005ddbu, 0x00005ddau, 0x0003003eu, 0x00005dbfu, 0x00005ddbu, 0x000300f7u, 0x00005e4au, 0x00000000u, 0x000d00fbu, 0x00005dd9u, 0x00005e4bu, 0x00000000u, 0x00005e4cu, 0x00000001u, 0x00005e4du, 0x00000002u, 0x00005e4eu, 0x00000004u, 0x00005e4fu, 0x00000007u, 0x00005e50u, 0x000200f8u, 0x00005e50u, 0x00050041u, 0x0000003eu, 0x000068edu, 0x000068e3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005e61u, 0x000068edu, 0x000500c4u, 0x00000008u, 0x00005e62u, 0x00005e61u, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x000068eeu, 0x000068e3u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005e64u, 0x000068eeu, 0x000500c5u, 0x00000008u, 0x00005e65u, 0x00005e62u, 0x00005e64u, 0x00060050u, 0x0000003cu, 0x00005e66u, 0x00005e65u, 0x00005e65u, 0x00005e65u, 0x0003003eu, 0x00005e46u, 0x00005e66u, 0x000200f9u, 0x00005e4au, 0x000200f8u, 0x00005e4fu, 0x0004003du, 0x00000009u, 0x00005e5eu, 0x000068e4u, 0x0008004fu, 0x0000003cu, 0x00005e5fu, 0x00005e5eu, 0x00005e5eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e46u, 0x00005e5fu, 0x000200f9u, 0x00005e4au, 0x000200f8u, 0x00005e4eu, 0x0004003du, 0x00000009u, 0x00005e5bu, 0x000068e7u, 0x0008004fu, 0x0000003cu, 0x00005e5cu, 0x00005e5bu, 0x00005e5bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e46u, 0x00005e5cu, 0x000200f9u, 0x00005e4au, 0x000200f8u, 0x00005e4du, 0x0004003du, 0x00000009u, 0x00005e58u, 0x000068e6u, 0x0008004fu, 0x0000003cu, 0x00005e59u, 0x00005e58u, 0x00005e58u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e46u, 0x00005e59u, 0x000200f9u, 0x00005e4au, 0x000200f8u, 0x00005e4cu, 0x0004003du, 0x00000009u, 0x00005e55u, 0x000068e5u, 0x0008004fu, 0x0000003cu, 0x00005e56u, 0x00005e55u, 0x00005e55u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e46u, 0x00005e56u, 0x000200f9u, 0x00005e4au, 0x000200f8u, 0x00005e4bu, 0x0004003du, 0x00000009u, 0x00005e52u, 0x000068e3u, 0x0008004fu, 0x0000003cu, 0x00005e53u, 0x00005e52u, 0x00005e52u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e46u, 0x00005e53u, 0x000200f9u, 0x00005e4au, 0x000200f8u, 0x00005e4au, 0x000f00f5u, 0x0000003cu, 0x0000b4b4u, 0x00005e53u, 0x00005e4bu, 0x00005e56u, 0x00005e4cu, 0x00005e59u, 0x00005e4du, 0x00005e5cu, 0x00005e4eu, 0x00005e5fu, 0x00005e4fu, 0x00005e66u, 0x00005e50u, 0x000300f7u, 0x00005e68u, 0x00000000u, 0x000d00fbu, 0x00005ddbu, 0x00005e69u, 0x00000000u, 0x00005e6au, 0x00000001u, 0x00005e6bu, 0x00000002u, 0x00005e6cu, 0x00000004u, 0x00005e6du, 0x00000006u, 0x00005e6eu, 0x000200f8u, 0x00005e6eu, 0x0003003eu, 0x00005e47u, 0x00001926u, 0x000200f9u, 0x00005e68u, 0x000200f8u, 0x00005e6du, 0x00050041u, 0x0000003eu, 0x000068f3u, 0x000068e4u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e78u, 0x000068f3u, 0x0003003eu, 0x00005e47u, 0x00005e78u, 0x000200f9u, 0x00005e68u, 0x000200f8u, 0x00005e6cu, 0x00050041u, 0x0000003eu, 0x000068f2u, 0x000068e7u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e76u, 0x000068f2u, 0x0003003eu, 0x00005e47u, 0x00005e76u, 0x000200f9u, 0x00005e68u, 0x000200f8u, 0x00005e6bu, 0x00050041u, 0x0000003eu, 0x000068f1u, 0x000068e6u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e74u, 0x000068f1u, 0x0003003eu, 0x00005e47u, 0x00005e74u, 0x000200f9u, 0x00005e68u, 0x000200f8u, 0x00005e6au, 0x00050041u, 0x0000003eu, 0x000068f0u, 0x000068e5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e72u, 0x000068f0u, 0x0003003eu, 0x00005e47u, 0x00005e72u, 0x000200f9u, 0x00005e68u, 0x000200f8u, 0x00005e69u, 0x00050041u, 0x0000003eu, 0x000068efu, 0x000068e3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e70u, 0x000068efu, 0x0003003eu, 0x00005e47u, 0x00005e70u, 0x000200f9u, 0x00005e68u, 0x000200f8u, 0x00005e68u, 0x000f00f5u, 0x00000008u, 0x0000b4b5u, 0x00005e70u, 0x00005e69u, 0x00005e72u, 0x00005e6au, 0x00005e74u, 0x00005e6bu, 0x00005e76u, 0x00005e6cu, 0x00005e78u, 0x00005e6du, 0x00001926u, 0x00005e6eu, 0x00050051u, 0x00000008u, 0x00005e7bu, 0x0000b4b4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005e7cu, 0x0000b4b4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005e7du, 0x0000b4b4u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005e7eu, 0x00005e7bu, 0x00005e7cu, 0x00005e7du, 0x0000b4b5u, 0x0003003eu, 0x00005e48u, 0x00005e7eu, 0x0003003eu, 0x00005dbcu, 0x00005e7eu, 0x0003003eu, 0x000068f4u, 0x00002899u, 0x0003003eu, 0x000068f5u, 0x000022acu, 0x0003003eu, 0x000068f6u, 0x00005c8bu, 0x0003003eu, 0x000068f7u, 0x0000a5fcu, 0x0003003eu, 0x000068f8u, 0x000093b0u, 0x0003003eu, 0x000068f9u, 0x0000a6a9u, 0x00050041u, 0x0000003eu, 0x00005ddeu, 0x00002099u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005ddfu, 0x00005ddeu, 0x0003003eu, 0x00005dc2u, 0x00005ddfu, 0x00050041u, 0x0000003eu, 0x00005de0u, 0x0000209au, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005de1u, 0x00005de0u, 0x0003003eu, 0x00005dc3u, 0x00005de1u, 0x000300f7u, 0x00005e83u, 0x00000000u, 0x001700fbu, 0x00005ddfu, 0x00005e84u, 0x00000000u, 0x00005e85u, 0x00000007u, 0x00005e86u, 0x00000001u, 0x00005e87u, 0x00000002u, 0x00005e88u, 0x00000004u, 0x00005e89u, 0x00000008u, 0x00005e8au, 0x00000009u, 0x00005e8bu, 0x0000000bu, 0x00005e8cu, 0x0000000du, 0x00005e8du, 0x0000000fu, 0x00005e8eu, 0x000200f8u, 0x00005e8eu, 0x00050041u, 0x0000003eu, 0x00006900u, 0x000068f4u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005eaeu, 0x00006900u, 0x000500c4u, 0x00000008u, 0x00005eafu, 0x00005eaeu, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x00006901u, 0x000068f4u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005eb1u, 0x00006901u, 0x000500c5u, 0x00000008u, 0x00005eb2u, 0x00005eafu, 0x00005eb1u, 0x00060050u, 0x0000003cu, 0x00005eb3u, 0x00005eb2u, 0x00005eb2u, 0x00005eb2u, 0x0003003eu, 0x00005e7fu, 0x00005eb3u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e8du, 0x00060050u, 0x0000003cu, 0x00005eacu, 0x0000a6a9u, 0x0000a6a9u, 0x0000a6a9u, 0x0003003eu, 0x00005e7fu, 0x00005eacu, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e8cu, 0x0004003du, 0x00000009u, 0x00005ea8u, 0x000068f5u, 0x0008004fu, 0x0000003cu, 0x00005ea9u, 0x00005ea8u, 0x00005ea8u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e7fu, 0x00005ea9u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e8bu, 0x0004003du, 0x00000009u, 0x00005ea5u, 0x000068f8u, 0x0008004fu, 0x0000003cu, 0x00005ea6u, 0x00005ea5u, 0x00005ea5u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e7fu, 0x00005ea6u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e8au, 0x0004003du, 0x00000009u, 0x00005ea2u, 0x000068f7u, 0x0008004fu, 0x0000003cu, 0x00005ea3u, 0x00005ea2u, 0x00005ea2u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e7fu, 0x00005ea3u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e89u, 0x0004003du, 0x00000009u, 0x00005e9fu, 0x000068f5u, 0x0008004fu, 0x0000003cu, 0x00005ea0u, 0x00005e9fu, 0x00005e9fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e7fu, 0x00005ea0u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e88u, 0x0004003du, 0x00000009u, 0x00005e9cu, 0x000068f8u, 0x0008004fu, 0x0000003cu, 0x00005e9du, 0x00005e9cu, 0x00005e9cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e7fu, 0x00005e9du, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e87u, 0x0004003du, 0x00000009u, 0x00005e99u, 0x000068f7u, 0x0008004fu, 0x0000003cu, 0x00005e9au, 0x00005e99u, 0x00005e99u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e7fu, 0x00005e9au, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e86u, 0x0008004fu, 0x0000003cu, 0x00005e97u, 0x00005c8bu, 0x00005c8bu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e7fu, 0x00005e97u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e85u, 0x0008004fu, 0x0000003cu, 0x00005e94u, 0x00005c8bu, 0x00005c8bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e7fu, 0x00005e94u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e84u, 0x0004003du, 0x00000009u, 0x00005e90u, 0x000068f4u, 0x0008004fu, 0x0000003cu, 0x00005e91u, 0x00005e90u, 0x00005e90u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e7fu, 0x00005e91u, 0x000200f9u, 0x00005e83u, 0x000200f8u, 0x00005e83u, 0x001900f5u, 0x0000003cu, 0x0000b4cdu, 0x00005e91u, 0x00005e84u, 0x00005e94u, 0x00005e85u, 0x00005e97u, 0x00005e86u, 0x00005e9au, 0x00005e87u, 0x00005e9du, 0x00005e88u, 0x00005ea0u, 0x00005e89u, 0x00005ea3u, 0x00005e8au, 0x00005ea6u, 0x00005e8bu, 0x00005ea9u, 0x00005e8cu, 0x00005eacu, 0x00005e8du, 0x00005eb3u, 0x00005e8eu, 0x000300f7u, 0x00005eb5u, 0x00000000u, 0x000b00fbu, 0x00005de1u, 0x00005eb6u, 0x00000000u, 0x00005eb7u, 0x00000001u, 0x00005eb8u, 0x00000002u, 0x00005eb9u, 0x00000004u, 0x00005ebau, 0x000200f8u, 0x00005ebau, 0x00050041u, 0x0000003eu, 0x00006905u, 0x000068f5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ec4u, 0x00006905u, 0x0003003eu, 0x00005e80u, 0x00005ec4u, 0x000200f9u, 0x00005eb5u, 0x000200f8u, 0x00005eb9u, 0x00050041u, 0x0000003eu, 0x00006904u, 0x000068f8u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ec2u, 0x00006904u, 0x0003003eu, 0x00005e80u, 0x00005ec2u, 0x000200f9u, 0x00005eb5u, 0x000200f8u, 0x00005eb8u, 0x00050041u, 0x0000003eu, 0x00006903u, 0x000068f7u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ec0u, 0x00006903u, 0x0003003eu, 0x00005e80u, 0x00005ec0u, 0x000200f9u, 0x00005eb5u, 0x000200f8u, 0x00005eb7u, 0x0003003eu, 0x00005e80u, 0x0000a6a9u, 0x000200f9u, 0x00005eb5u, 0x000200f8u, 0x00005eb6u, 0x00050041u, 0x0000003eu, 0x00006902u, 0x000068f4u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ebcu, 0x00006902u, 0x0003003eu, 0x00005e80u, 0x00005ebcu, 0x000200f9u, 0x00005eb5u, 0x000200f8u, 0x00005eb5u, 0x000d00f5u, 0x00000008u, 0x0000b4ceu, 0x00005ebcu, 0x00005eb6u, 0x0000a6a9u, 0x00005eb7u, 0x00005ec0u, 0x00005eb8u, 0x00005ec2u, 0x00005eb9u, 0x00005ec4u, 0x00005ebau, 0x00050051u, 0x00000008u, 0x00005ec7u, 0x0000b4cdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005ec8u, 0x0000b4cdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005ec9u, 0x0000b4cdu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005ecau, 0x00005ec7u, 0x00005ec8u, 0x00005ec9u, 0x0000b4ceu, 0x0003003eu, 0x00005e81u, 0x00005ecau, 0x0003003eu, 0x00005dc0u, 0x00005ecau, 0x0003003eu, 0x00006906u, 0x0000289eu, 0x0003003eu, 0x00006907u, 0x000022acu, 0x0003003eu, 0x00006908u, 0x00005c8bu, 0x0003003eu, 0x00006909u, 0x0000a5fcu, 0x0003003eu, 0x0000690au, 0x000093b0u, 0x00050041u, 0x0000003eu, 0x00005de4u, 0x00002099u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005de5u, 0x00005de4u, 0x0003003eu, 0x00005dc6u, 0x00005de5u, 0x00050041u, 0x0000003eu, 0x00005de6u, 0x0000209au, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005de7u, 0x00005de6u, 0x0003003eu, 0x00005dc7u, 0x00005de7u, 0x000300f7u, 0x00005ecfu, 0x00000000u, 0x000d00fbu, 0x00005de5u, 0x00005ed0u, 0x00000000u, 0x00005ed1u, 0x00000001u, 0x00005ed2u, 0x00000002u, 0x00005ed3u, 0x00000004u, 0x00005ed4u, 0x00000006u, 0x00005ed5u, 0x000200f8u, 0x00005ed5u, 0x0003003eu, 0x00005ecbu, 0x00001927u, 0x000200f9u, 0x00005ecfu, 0x000200f8u, 0x00005ed4u, 0x0004003du, 0x00000009u, 0x00005ee3u, 0x00006907u, 0x0008004fu, 0x0000003cu, 0x00005ee4u, 0x00005ee3u, 0x00005ee3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ecbu, 0x00005ee4u, 0x000200f9u, 0x00005ecfu, 0x000200f8u, 0x00005ed3u, 0x0004003du, 0x00000009u, 0x00005ee0u, 0x0000690au, 0x0008004fu, 0x0000003cu, 0x00005ee1u, 0x00005ee0u, 0x00005ee0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ecbu, 0x00005ee1u, 0x000200f9u, 0x00005ecfu, 0x000200f8u, 0x00005ed2u, 0x0004003du, 0x00000009u, 0x00005eddu, 0x00006909u, 0x0008004fu, 0x0000003cu, 0x00005edeu, 0x00005eddu, 0x00005eddu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ecbu, 0x00005edeu, 0x000200f9u, 0x00005ecfu, 0x000200f8u, 0x00005ed1u, 0x0004003du, 0x00000009u, 0x00005edau, 0x00006908u, 0x0008004fu, 0x0000003cu, 0x00005edbu, 0x00005edau, 0x00005edau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ecbu, 0x00005edbu, 0x000200f9u, 0x00005ecfu, 0x000200f8u, 0x00005ed0u, 0x0004003du, 0x00000009u, 0x00005ed7u, 0x00006906u, 0x0008004fu, 0x0000003cu, 0x00005ed8u, 0x00005ed7u, 0x00005ed7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ecbu, 0x00005ed8u, 0x000200f9u, 0x00005ecfu, 0x000200f8u, 0x00005ecfu, 0x000f00f5u, 0x0000003cu, 0x0000b4e5u, 0x00005ed8u, 0x00005ed0u, 0x00005edbu, 0x00005ed1u, 0x00005edeu, 0x00005ed2u, 0x00005ee1u, 0x00005ed3u, 0x00005ee4u, 0x00005ed4u, 0x00001927u, 0x00005ed5u, 0x000300f7u, 0x00005ee6u, 0x00000000u, 0x000d00fbu, 0x00005de7u, 0x00005ee7u, 0x00000000u, 0x00005ee8u, 0x00000001u, 0x00005ee9u, 0x00000002u, 0x00005eeau, 0x00000004u, 0x00005eebu, 0x00000006u, 0x00005eecu, 0x000200f8u, 0x00005eecu, 0x0003003eu, 0x00005eccu, 0x00001926u, 0x000200f9u, 0x00005ee6u, 0x000200f8u, 0x00005eebu, 0x00050041u, 0x0000003eu, 0x00006914u, 0x00006907u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ef6u, 0x00006914u, 0x0003003eu, 0x00005eccu, 0x00005ef6u, 0x000200f9u, 0x00005ee6u, 0x000200f8u, 0x00005eeau, 0x00050041u, 0x0000003eu, 0x00006913u, 0x0000690au, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ef4u, 0x00006913u, 0x0003003eu, 0x00005eccu, 0x00005ef4u, 0x000200f9u, 0x00005ee6u, 0x000200f8u, 0x00005ee9u, 0x00050041u, 0x0000003eu, 0x00006912u, 0x00006909u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ef2u, 0x00006912u, 0x0003003eu, 0x00005eccu, 0x00005ef2u, 0x000200f9u, 0x00005ee6u, 0x000200f8u, 0x00005ee8u, 0x00050041u, 0x0000003eu, 0x00006911u, 0x00006908u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ef0u, 0x00006911u, 0x0003003eu, 0x00005eccu, 0x00005ef0u, 0x000200f9u, 0x00005ee6u, 0x000200f8u, 0x00005ee7u, 0x00050041u, 0x0000003eu, 0x00006910u, 0x00006906u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005eeeu, 0x00006910u, 0x0003003eu, 0x00005eccu, 0x00005eeeu, 0x000200f9u, 0x00005ee6u, 0x000200f8u, 0x00005ee6u, 0x000f00f5u, 0x00000008u, 0x0000b4e6u, 0x00005eeeu, 0x00005ee7u, 0x00005ef0u, 0x00005ee8u, 0x00005ef2u, 0x00005ee9u, 0x00005ef4u, 0x00005eeau, 0x00005ef6u, 0x00005eebu, 0x00001926u, 0x00005eecu, 0x00050051u, 0x00000008u, 0x00005ef9u, 0x0000b4e5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005efau, 0x0000b4e5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005efbu, 0x0000b4e5u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005efcu, 0x00005ef9u, 0x00005efau, 0x00005efbu, 0x0000b4e6u, 0x0003003eu, 0x00005ecdu, 0x00005efcu, 0x0003003eu, 0x00005dc4u, 0x00005efcu, 0x0003003eu, 0x00005dc9u, 0x00005e45u, 0x0003003eu, 0x00005dcau, 0x00005e7eu, 0x0003003eu, 0x00005dcbu, 0x00005ecau, 0x0003003eu, 0x00005dccu, 0x00005efcu, 0x000600cau, 0x00000009u, 0x00005f03u, 0x00005ecau, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005dcbu, 0x00005f03u, 0x0003003eu, 0x00005efdu, 0x00005e45u, 0x00050082u, 0x00000009u, 0x00005f24u, 0x00005e45u, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x00005f25u, 0x00005f24u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005f27u, 0x00005f25u, 0x0000eeb6u, 0x0003003eu, 0x00005f21u, 0x00005f27u, 0x0003003eu, 0x00005dc9u, 0x00005f27u, 0x0003003eu, 0x00005efeu, 0x00005e7eu, 0x00050082u, 0x00000009u, 0x00005f2bu, 0x00005e7eu, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x00005f2cu, 0x00005f2bu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005f2eu, 0x00005f2cu, 0x0000eeb6u, 0x0003003eu, 0x00005f28u, 0x00005f2eu, 0x0003003eu, 0x00005dcau, 0x00005f2eu, 0x0003003eu, 0x00005effu, 0x00005efcu, 0x00050082u, 0x00000009u, 0x00005f32u, 0x00005efcu, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x00005f33u, 0x00005f32u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005f35u, 0x00005f33u, 0x0000eeb6u, 0x0003003eu, 0x00005f2fu, 0x00005f35u, 0x0003003eu, 0x00005dccu, 0x00005f35u, 0x00050082u, 0x00000009u, 0x00005f0cu, 0x00005f27u, 0x00005f2eu, 0x00050084u, 0x00000009u, 0x00005f0eu, 0x00005f0cu, 0x00005f03u, 0x0003003eu, 0x00005f00u, 0x00005f0eu, 0x00050080u, 0x00000009u, 0x00005f11u, 0x00005f0eu, 0x0000eeb6u, 0x0003003eu, 0x00005f00u, 0x00005f11u, 0x000500c3u, 0x00000009u, 0x00005f14u, 0x00005f11u, 0x0000eec1u, 0x00050051u, 0x00000008u, 0x00005f15u, 0x00005f14u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f16u, 0x00005f14u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f17u, 0x00005f14u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005f18u, 0x00005f14u, 0x00000003u, 0x00050051u, 0x00000008u, 0x00005f1bu, 0x00005f35u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f1cu, 0x00005f35u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f1du, 0x00005f35u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005f1eu, 0x00005f35u, 0x00000003u, 0x00050080u, 0x00000009u, 0x00005f20u, 0x00005f14u, 0x00005f35u, 0x0003003eu, 0x00005f01u, 0x00005f20u, 0x0003003eu, 0x00005dc8u, 0x00005f20u, 0x0004003du, 0x00000009u, 0x00005deeu, 0x00005dc8u, 0x0003003eu, 0x00005dcdu, 0x00005deeu, 0x00050082u, 0x00000009u, 0x00005f39u, 0x00005deeu, 0x0000eeb6u, 0x0003003eu, 0x00005dcdu, 0x00005f39u, 0x000600cau, 0x00000009u, 0x00005f3bu, 0x00005f39u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005dcdu, 0x00005f3bu, 0x00050080u, 0x00000009u, 0x00005f3eu, 0x00005f3bu, 0x0000eeb6u, 0x0003003eu, 0x00005dcdu, 0x00005f3eu, 0x0008000cu, 0x00000009u, 0x00005f40u, 0x00000001u, 0x0000002du, 0x00005f3eu, 0x00000611u, 0x00000ae7u, 0x00050051u, 0x00000008u, 0x00005f41u, 0x00005f40u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f42u, 0x00005f40u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f43u, 0x00005f40u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005f44u, 0x00005f40u, 0x00000003u, 0x0003003eu, 0x00005f36u, 0x00005f40u, 0x0003003eu, 0x00005dc8u, 0x00005f40u, 0x00050041u, 0x0000003eu, 0x00005df0u, 0x00005dc8u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005df1u, 0x00005df0u, 0x0004003du, 0x00000008u, 0x00005df3u, 0x00005df0u, 0x00050080u, 0x00000008u, 0x00005df4u, 0x00005df3u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00005df5u, 0x00005df4u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005df6u, 0x00005df1u, 0x00005df5u, 0x0003003eu, 0x00005dceu, 0x00005df6u, 0x000300f7u, 0x00005df8u, 0x00000000u, 0x000400fau, 0x00002104u, 0x00005df9u, 0x00005dfau, 0x000200f8u, 0x00005dfau, 0x000500c4u, 0x00000008u, 0x00005e03u, 0x000021aau, 0x0000021eu, 0x0003003eu, 0x00005dcfu, 0x00005e03u, 0x000200f9u, 0x00005df8u, 0x000200f8u, 0x00005df9u, 0x00050084u, 0x00000008u, 0x00005dfdu, 0x00005df6u, 0x000021aau, 0x00050080u, 0x00000008u, 0x00005dfeu, 0x00005dfdu, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00005dffu, 0x00005dfeu, 0x00000218u, 0x0003003eu, 0x00005dcfu, 0x00005dffu, 0x000500c3u, 0x00000008u, 0x00005e01u, 0x00005dffu, 0x0000021eu, 0x0003003eu, 0x0000209cu, 0x00005e01u, 0x000200f9u, 0x00005df8u, 0x000200f8u, 0x00005df8u, 0x000700f5u, 0x00000008u, 0x0000b519u, 0x00005e01u, 0x00005df9u, 0x000021aau, 0x00005dfau, 0x000700f5u, 0x00000008u, 0x0000b516u, 0x00005dffu, 0x00005df9u, 0x00005e03u, 0x00005dfau, 0x000300f7u, 0x00005e05u, 0x00000000u, 0x000400fau, 0x00002107u, 0x00005e06u, 0x00005e07u, 0x000200f8u, 0x00005e07u, 0x00050080u, 0x00000008u, 0x00005e0bu, 0x00005df6u, 0x0000a0e6u, 0x0003003eu, 0x00005dceu, 0x00005e0bu, 0x000200f9u, 0x00005e05u, 0x000200f8u, 0x00005e06u, 0x0003003eu, 0x00005dceu, 0x0000b516u, 0x000200f9u, 0x00005e05u, 0x000200f8u, 0x00005e05u, 0x000700f5u, 0x00000008u, 0x0000b517u, 0x0000b516u, 0x00005e06u, 0x00005e0bu, 0x00005e07u, 0x0008000cu, 0x00000008u, 0x00005e0du, 0x00000001u, 0x0000002du, 0x0000b517u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00005df0u, 0x00005e0du, 0x0004003du, 0x00000009u, 0x00005e0fu, 0x00005dc8u, 0x0003003eu, 0x00005dd0u, 0x00005e0fu, 0x0003003eu, 0x00002027u, 0x0000b519u, 0x00050051u, 0x00000008u, 0x000022d9u, 0x00005e0fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000022dau, 0x00005e0fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000022dbu, 0x00005e0fu, 0x00000002u, 0x00050051u, 0x00000008u, 0x000022dcu, 0x00005e0fu, 0x00000003u, 0x0003003eu, 0x00002097u, 0x00005e0fu, 0x000200f9u, 0x000022a1u, 0x000200f8u, 0x000022a1u, 0x000700f5u, 0x00000008u, 0x0000b761u, 0x0000b3f4u, 0x00005e05u, 0x000022fbu, 0x00005f98u, 0x000700f5u, 0x00000008u, 0x0000b62cu, 0x0000b519u, 0x00005e05u, 0x0000acd3u, 0x00005f98u, 0x000500aau, 0x0000005du, 0x000022feu, 0x0000b62cu, 0x00000203u, 0x000500a7u, 0x0000005du, 0x000022ffu, 0x00002116u, 0x000022feu, 0x000300f7u, 0x00002300u, 0x00000000u, 0x000400fau, 0x000022ffu, 0x00002301u, 0x00002300u, 0x000200f8u, 0x00002301u, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x00002300u, 0x000300f7u, 0x00002303u, 0x00000000u, 0x000400fau, 0x00002125u, 0x00002304u, 0x00002303u, 0x000200f8u, 0x00002304u, 0x000300f7u, 0x00002306u, 0x00000000u, 0x000400fau, 0x00002128u, 0x00002307u, 0x00002308u, 0x000200f8u, 0x00002308u, 0x00050041u, 0x0000003eu, 0x00006e03u, 0x00006df5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000230bu, 0x00006e03u, 0x0003003eu, 0x000020a7u, 0x0000230bu, 0x000200f9u, 0x00002306u, 0x000200f8u, 0x00002307u, 0x0004003du, 0x00000008u, 0x000060dau, 0x00000202u, 0x000500c7u, 0x00000008u, 0x000060dbu, 0x000060dau, 0x0000038bu, 0x0003003eu, 0x000060d9u, 0x000060dbu, 0x0003003eu, 0x000020a7u, 0x000060dbu, 0x000200f9u, 0x00002306u, 0x000200f8u, 0x00002306u, 0x000700f5u, 0x00000008u, 0x0000b76cu, 0x000060dbu, 0x00002307u, 0x0000230bu, 0x00002308u, 0x000500b1u, 0x0000005du, 0x0000230eu, 0x0000b761u, 0x0000b76cu, 0x000300f7u, 0x0000230fu, 0x00000000u, 0x000400fau, 0x0000230eu, 0x00002310u, 0x0000230fu, 0x000200f8u, 0x00002310u, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x00000543u, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x0000230fu, 0x000200f9u, 0x00002303u, 0x000200f8u, 0x00002303u, 0x0004003du, 0x00000009u, 0x00002311u, 0x00002097u, 0x0003003eu, 0x00007890u, 0x00002311u, 0x000500c4u, 0x00000008u, 0x00002314u, 0x00002b59u, 0x00000264u, 0x000500c5u, 0x00000008u, 0x00002316u, 0x00002314u, 0x0000a0dau, 0x0003003eu, 0x00007891u, 0x00002316u, 0x0003003eu, 0x00007892u, 0x0000b62cu, 0x00050041u, 0x0000003eu, 0x0000231au, 0x0000202cu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000231bu, 0x0000231au, 0x00050080u, 0x00000008u, 0x0000231du, 0x0000231bu, 0x0000a0e6u, 0x0007000cu, 0x00000008u, 0x0000231eu, 0x00000001u, 0x00000027u, 0x0000231du, 0x0000038bu, 0x0003003eu, 0x00007893u, 0x0000231eu, 0x0003003eu, 0x00001fddu, 0x0000055eu, 0x0003003eu, 0x00001fdeu, 0x0000055eu, 0x000200f9u, 0x000020a9u, 0x000200f8u, 0x000020a9u, 0x001900f5u, 0x0000005du, 0x0000e666u, 0x0000b8b1u, 0x000020bdu, 0x0000b8b1u, 0x000020dcu, 0x0000b8b1u, 0x00002164u, 0x0000e66cu, 0x0000218fu, 0x0000e66cu, 0x0000218eu, 0x0000b8b1u, 0x00002198u, 0x0000b8b1u, 0x000021a8u, 0x0000b8b1u, 0x000021b4u, 0x0000b8b1u, 0x00002301u, 0x0000b8b1u, 0x00002310u, 0x0000b8b1u, 0x00002303u, 0x001900f5u, 0x00000008u, 0x0000e5d4u, 0x0000a6b5u, 0x000020bdu, 0x0000a6b5u, 0x000020dcu, 0x0000a6b5u, 0x00002164u, 0x0000a6b5u, 0x0000218fu, 0x0000a6b5u, 0x0000218eu, 0x0000a6b5u, 0x00002198u, 0x0000a6b5u, 0x000021a8u, 0x0000a6b5u, 0x000021b4u, 0x0000a6a9u, 0x00002301u, 0x0000a6a9u, 0x00002310u, 0x0000a6a9u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000e542u, 0x0000a60bu, 0x000020bdu, 0x0000a60bu, 0x000020dcu, 0x0000a60bu, 0x00002164u, 0x0000a60bu, 0x0000218fu, 0x0000a60bu, 0x0000218eu, 0x0000a60bu, 0x00002198u, 0x0000a60bu, 0x000021a8u, 0x0000a60bu, 0x000021b4u, 0x0000a5fcu, 0x00002301u, 0x0000a5fcu, 0x00002310u, 0x0000a5fcu, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000e4a0u, 0x00009b3du, 0x000020bdu, 0x00009b3du, 0x000020dcu, 0x00009b3du, 0x00002164u, 0x00009b3du, 0x0000218fu, 0x00009b3du, 0x0000218eu, 0x00009b3du, 0x00002198u, 0x00009b3du, 0x000021a8u, 0x00009b3du, 0x000021b4u, 0x0000e4e8u, 0x00002301u, 0x0000e4e8u, 0x00002310u, 0x0000e4e8u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000e400u, 0x00009a59u, 0x000020bdu, 0x00009a59u, 0x000020dcu, 0x00009a59u, 0x00002164u, 0x00009a59u, 0x0000218fu, 0x00009a59u, 0x0000218eu, 0x00009a59u, 0x00002198u, 0x00009a59u, 0x000021a8u, 0x00009a59u, 0x000021b4u, 0x0000e448u, 0x00002301u, 0x0000e448u, 0x00002310u, 0x0000e448u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000e360u, 0x00009972u, 0x000020bdu, 0x00009972u, 0x000020dcu, 0x00009972u, 0x00002164u, 0x00009972u, 0x0000218fu, 0x00009972u, 0x0000218eu, 0x00009972u, 0x00002198u, 0x00009972u, 0x000021a8u, 0x00009972u, 0x000021b4u, 0x0000e3a8u, 0x00002301u, 0x0000e3a8u, 0x00002310u, 0x0000e3a8u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000e2c0u, 0x0000988au, 0x000020bdu, 0x0000988au, 0x000020dcu, 0x0000988au, 0x00002164u, 0x0000988au, 0x0000218fu, 0x0000988au, 0x0000218eu, 0x0000988au, 0x00002198u, 0x0000988au, 0x000021a8u, 0x0000988au, 0x000021b4u, 0x0000e308u, 0x00002301u, 0x0000e308u, 0x00002310u, 0x0000e308u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000e22eu, 0x000093bdu, 0x000020bdu, 0x000093bdu, 0x000020dcu, 0x000093bdu, 0x00002164u, 0x000093bdu, 0x0000218fu, 0x000093bdu, 0x0000218eu, 0x000093bdu, 0x00002198u, 0x000093bdu, 0x000021a8u, 0x000093bdu, 0x000021b4u, 0x000093b0u, 0x00002301u, 0x000093b0u, 0x00002310u, 0x000093b0u, 0x00002303u, 0x001900f5u, 0x0000005du, 0x0000e135u, 0x00008e2bu, 0x000020bdu, 0x00008e2bu, 0x000020dcu, 0x00008e2bu, 0x00002164u, 0x00008e2bu, 0x0000218fu, 0x00008e2bu, 0x0000218eu, 0x00008e2bu, 0x00002198u, 0x00008e2bu, 0x000021a8u, 0x00008e2bu, 0x000021b4u, 0x0000e17eu, 0x00002301u, 0x0000e17eu, 0x00002310u, 0x0000e17eu, 0x00002303u, 0x001900f5u, 0x0000005du, 0x0000e03cu, 0x00008d88u, 0x000020bdu, 0x00008d88u, 0x000020dcu, 0x00008d88u, 0x00002164u, 0x00008d88u, 0x0000218fu, 0x00008d88u, 0x0000218eu, 0x00008d88u, 0x00002198u, 0x00008d88u, 0x000021a8u, 0x00008d88u, 0x000021b4u, 0x0000e085u, 0x00002301u, 0x0000e085u, 0x00002310u, 0x0000e085u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000df30u, 0x000083f8u, 0x000020bdu, 0x000083f8u, 0x000020dcu, 0x000083f8u, 0x00002164u, 0x000083f8u, 0x0000218fu, 0x000083f8u, 0x0000218eu, 0x000083f8u, 0x00002198u, 0x000083f8u, 0x000021a8u, 0x000083f8u, 0x000021b4u, 0x0000df7au, 0x00002301u, 0x0000df7au, 0x00002310u, 0x0000df7au, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000de26u, 0x0000837eu, 0x000020bdu, 0x0000837eu, 0x000020dcu, 0x0000837eu, 0x00002164u, 0x0000837eu, 0x0000218fu, 0x0000837eu, 0x0000218eu, 0x0000837eu, 0x00002198u, 0x0000837eu, 0x000021a8u, 0x0000837eu, 0x000021b4u, 0x0000de70u, 0x00002301u, 0x0000de70u, 0x00002310u, 0x0000de70u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000dd1cu, 0x00008301u, 0x000020bdu, 0x00008301u, 0x000020dcu, 0x00008301u, 0x00002164u, 0x00008301u, 0x0000218fu, 0x00008301u, 0x0000218eu, 0x00008301u, 0x00002198u, 0x00008301u, 0x000021a8u, 0x00008301u, 0x000021b4u, 0x0000dd66u, 0x00002301u, 0x0000dd66u, 0x00002310u, 0x0000dd66u, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000dc12u, 0x00008282u, 0x000020bdu, 0x00008282u, 0x000020dcu, 0x00008282u, 0x00002164u, 0x00008282u, 0x0000218fu, 0x00008282u, 0x0000218eu, 0x00008282u, 0x00002198u, 0x00008282u, 0x000021a8u, 0x00008282u, 0x000021b4u, 0x0000dc5cu, 0x00002301u, 0x0000dc5cu, 0x00002310u, 0x0000dc5cu, 0x00002303u, 0x001900f5u, 0x0000005fu, 0x0000dab1u, 0x00007b7eu, 0x000020bdu, 0x00007b7eu, 0x000020dcu, 0x00007b7eu, 0x00002164u, 0x00007b7eu, 0x0000218fu, 0x00007b7eu, 0x0000218eu, 0x00007b7eu, 0x00002198u, 0x00007b7eu, 0x000021a8u, 0x00007b7eu, 0x000021b4u, 0x00007b73u, 0x00002301u, 0x00007b73u, 0x00002310u, 0x00007b73u, 0x00002303u, 0x001900f5u, 0x0000005fu, 0x0000d950u, 0x00007b5au, 0x000020bdu, 0x00007b5au, 0x000020dcu, 0x00007b5au, 0x00002164u, 0x00007b5au, 0x0000218fu, 0x00007b5au, 0x0000218eu, 0x00007b5au, 0x00002198u, 0x00007b5au, 0x000021a8u, 0x00007b5au, 0x000021b4u, 0x00007b4fu, 0x00002301u, 0x00007b4fu, 0x00002310u, 0x00007b4fu, 0x00002303u, 0x001900f5u, 0x0000003cu, 0x0000d7e3u, 0x00007a93u, 0x000020bdu, 0x00007a93u, 0x000020dcu, 0x00007a93u, 0x00002164u, 0x00007a93u, 0x0000218fu, 0x00007a93u, 0x0000218eu, 0x00007a93u, 0x00002198u, 0x00007a93u, 0x000021a8u, 0x00007a93u, 0x000021b4u, 0x00007a8du, 0x00002301u, 0x00007a8du, 0x00002310u, 0x00007a8du, 0x00002303u, 0x001900f5u, 0x0000003cu, 0x0000d66du, 0x00007a84u, 0x000020bdu, 0x00007a84u, 0x000020dcu, 0x00007a84u, 0x00002164u, 0x00007a84u, 0x0000218fu, 0x00007a84u, 0x0000218eu, 0x00007a84u, 0x00002198u, 0x00007a84u, 0x000021a8u, 0x00007a84u, 0x000021b4u, 0x00007a7eu, 0x00002301u, 0x00007a7eu, 0x00002310u, 0x00007a7eu, 0x00002303u, 0x001900f5u, 0x00000009u, 0x0000bdd7u, 0x0000bdd9u, 0x000020bdu, 0x0000bdd9u, 0x000020dcu, 0x0000bdd9u, 0x00002164u, 0x0000bdd9u, 0x0000218fu, 0x0000bdd9u, 0x0000218eu, 0x0000bdd9u, 0x00002198u, 0x0000bdd9u, 0x000021a8u, 0x0000bdd9u, 0x000021b4u, 0x0000bdd9u, 0x00002301u, 0x0000bdd9u, 0x00002310u, 0x00002311u, 0x00002303u, 0x001900f5u, 0x00000008u, 0x0000bcb6u, 0x0000bcb8u, 0x000020bdu, 0x0000bcb8u, 0x000020dcu, 0x0000bcb8u, 0x00002164u, 0x0000ba19u, 0x0000218fu, 0x0000ba19u, 0x0000218eu, 0x0000bcb8u, 0x00002198u, 0x0000bcb8u, 0x000021a8u, 0x0000bcb8u, 0x000021b4u, 0x0000bcb8u, 0x00002301u, 0x0000bcb8u, 0x00002310u, 0x00002316u, 0x00002303u, 0x001900f5u, 0x00000008u, 0x0000bb95u, 0x0000bb97u, 0x000020bdu, 0x0000bb97u, 0x000020dcu, 0x0000bb97u, 0x00002164u, 0x0000037du, 0x0000218fu, 0x0000037du, 0x0000218eu, 0x00000622u, 0x00002198u, 0x0000bb97u, 0x000021a8u, 0x0000bb97u, 0x000021b4u, 0x0000bb97u, 0x00002301u, 0x0000bb97u, 0x00002310u, 0x0000b62cu, 0x00002303u, 0x001900f5u, 0x00000008u, 0x0000ba49u, 0x0000ba4bu, 0x000020bdu, 0x0000ba4bu, 0x000020dcu, 0x0000ba4bu, 0x00002164u, 0x0000ba4bu, 0x0000218fu, 0x0000ba4bu, 0x0000218eu, 0x0000ba4bu, 0x00002198u, 0x0000ba4bu, 0x000021a8u, 0x0000ba4bu, 0x000021b4u, 0x0000ba4bu, 0x00002301u, 0x0000ba4bu, 0x00002310u, 0x0000231eu, 0x00002303u, 0x001900f5u, 0x0000005du, 0x0000ba48u, 0x00000543u, 0x000020bdu, 0x00000543u, 0x000020dcu, 0x00000543u, 0x00002164u, 0x00000543u, 0x0000218fu, 0x0000055eu, 0x0000218eu, 0x0000219eu, 0x00002198u, 0x00000543u, 0x000021a8u, 0x00000543u, 0x000021b4u, 0x00000543u, 0x00002301u, 0x00000543u, 0x00002310u, 0x0000055eu, 0x00002303u, 0x0003003eu, 0x000020a8u, 0x0000ba48u, 0x00070050u, 0x000000c8u, 0x00007898u, 0x0000bdd7u, 0x0000bcb6u, 0x0000bb95u, 0x0000ba49u, 0x0003003eu, 0x00007883u, 0x0000bdd7u, 0x0003003eu, 0x00007884u, 0x0000bcb6u, 0x0003003eu, 0x00007885u, 0x0000bb95u, 0x0003003eu, 0x00007886u, 0x0000ba49u, 0x000300f7u, 0x00001ed3u, 0x00000000u, 0x000400fau, 0x0000ba48u, 0x00001ed2u, 0x00001ed3u, 0x000200f8u, 0x00001ed2u, 0x000500c7u, 0x00000008u, 0x00001ed6u, 0x0000bb95u, 0x00000622u, 0x000500abu, 0x0000005du, 0x00001ed7u, 0x00001ed6u, 0x00000203u, 0x000300f7u, 0x00001ed9u, 0x00000000u, 0x000400fau, 0x00001ed7u, 0x00001ed8u, 0x00001edfu, 0x000200f8u, 0x00001edfu, 0x000500c7u, 0x00000008u, 0x00001ee2u, 0x0000bb95u, 0x0000037du, 0x000500abu, 0x0000005du, 0x00001ee3u, 0x00001ee2u, 0x00000203u, 0x000300f7u, 0x00001ee5u, 0x00000000u, 0x000400fau, 0x00001ee3u, 0x00001ee4u, 0x00001eedu, 0x000200f8u, 0x00001eedu, 0x0003003eu, 0x00001eeeu, 0x00001e57u, 0x0003003eu, 0x00001ef0u, 0x00001e5bu, 0x0003003eu, 0x00001ef2u, 0x00001ec7u, 0x0003003eu, 0x00007899u, 0x0000bdd7u, 0x0003003eu, 0x0000789au, 0x0000bcb6u, 0x0003003eu, 0x0000789bu, 0x0000bb95u, 0x0003003eu, 0x0000789cu, 0x0000ba49u, 0x000500c3u, 0x00000008u, 0x00006256u, 0x0000bcb6u, 0x00000264u, 0x0003003eu, 0x00006211u, 0x00006256u, 0x000500c7u, 0x00000008u, 0x00006259u, 0x0000bcb6u, 0x00000386u, 0x0003003eu, 0x00006212u, 0x00006259u, 0x0003003eu, 0x00006213u, 0x0000bb95u, 0x0003003eu, 0x00006214u, 0x0000bdd7u, 0x0003003eu, 0x00006215u, 0x0000ba49u, 0x00080041u, 0x00000277u, 0x00006261u, 0x00000a0bu, 0x00000203u, 0x00001ec7u, 0x00000203u, 0x00000485u, 0x0004003du, 0x00000229u, 0x00006262u, 0x00006261u, 0x00040071u, 0x00000006u, 0x00006263u, 0x00006262u, 0x0003003eu, 0x00006216u, 0x00006263u, 0x0003003eu, 0x00006218u, 0x00001ec7u, 0x00070041u, 0x00000234u, 0x000062f1u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000203u, 0x0004003du, 0x0000022au, 0x000062f2u, 0x000062f1u, 0x00040071u, 0x00000237u, 0x000062f3u, 0x000062f2u, 0x0004007cu, 0x00000009u, 0x000062f4u, 0x000062f3u, 0x00070041u, 0x00000234u, 0x000062f6u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000212u, 0x0004003du, 0x0000022au, 0x000062f7u, 0x000062f6u, 0x00040071u, 0x00000237u, 0x000062f8u, 0x000062f7u, 0x0004007cu, 0x00000009u, 0x000062f9u, 0x000062f8u, 0x00070041u, 0x00000234u, 0x000062fbu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000215u, 0x0004003du, 0x0000022au, 0x000062fcu, 0x000062fbu, 0x00040071u, 0x00000237u, 0x000062fdu, 0x000062fcu, 0x0004007cu, 0x00000009u, 0x000062feu, 0x000062fdu, 0x00070041u, 0x00000234u, 0x00006300u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000218u, 0x0004003du, 0x0000022au, 0x00006301u, 0x00006300u, 0x00040071u, 0x00000237u, 0x00006302u, 0x00006301u, 0x0004007cu, 0x00000009u, 0x00006303u, 0x00006302u, 0x00070041u, 0x00000234u, 0x00006305u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000021bu, 0x0004003du, 0x0000022au, 0x00006306u, 0x00006305u, 0x00040071u, 0x00000237u, 0x00006307u, 0x00006306u, 0x0004007cu, 0x00000009u, 0x00006308u, 0x00006307u, 0x00070041u, 0x00000234u, 0x0000630au, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000021eu, 0x0004003du, 0x0000022au, 0x0000630bu, 0x0000630au, 0x00040071u, 0x00000237u, 0x0000630cu, 0x0000630bu, 0x0004007cu, 0x00000009u, 0x0000630du, 0x0000630cu, 0x00070041u, 0x00000234u, 0x0000630fu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000221u, 0x0004003du, 0x0000022au, 0x00006310u, 0x0000630fu, 0x00040071u, 0x00000237u, 0x00006311u, 0x00006310u, 0x0004007cu, 0x00000009u, 0x00006312u, 0x00006311u, 0x00070041u, 0x00000234u, 0x00006314u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000224u, 0x0004003du, 0x0000022au, 0x00006315u, 0x00006314u, 0x00040071u, 0x00000237u, 0x00006316u, 0x00006315u, 0x0004007cu, 0x00000009u, 0x00006317u, 0x00006316u, 0x00070041u, 0x00000234u, 0x00006319u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000025eu, 0x0004003du, 0x0000022au, 0x0000631au, 0x00006319u, 0x00040071u, 0x00000237u, 0x0000631bu, 0x0000631au, 0x0004007cu, 0x00000009u, 0x0000631cu, 0x0000631bu, 0x00070041u, 0x00000234u, 0x0000631eu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000264u, 0x0004003du, 0x0000022au, 0x0000631fu, 0x0000631eu, 0x00040071u, 0x00000237u, 0x00006320u, 0x0000631fu, 0x0004007cu, 0x00000009u, 0x00006321u, 0x00006320u, 0x00070041u, 0x0000026bu, 0x00006323u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000026au, 0x0004003du, 0x00000006u, 0x00006324u, 0x00006323u, 0x00070041u, 0x00000270u, 0x00006326u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000026fu, 0x0004003du, 0x0000022bu, 0x00006327u, 0x00006326u, 0x00040071u, 0x00000006u, 0x00006328u, 0x00006327u, 0x0004007cu, 0x00000008u, 0x00006329u, 0x00006328u, 0x00070041u, 0x00000277u, 0x0000632bu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000276u, 0x0004003du, 0x00000229u, 0x0000632cu, 0x0000632bu, 0x00040071u, 0x00000006u, 0x0000632du, 0x0000632cu, 0x0004007cu, 0x00000008u, 0x0000632eu, 0x0000632du, 0x00070041u, 0x00000277u, 0x00006330u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000027du, 0x0004003du, 0x00000229u, 0x00006331u, 0x00006330u, 0x00040071u, 0x00000006u, 0x00006332u, 0x00006331u, 0x0004007cu, 0x00000008u, 0x00006333u, 0x00006332u, 0x00070041u, 0x00000284u, 0x00006335u, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x00000283u, 0x0004003du, 0x0000022du, 0x00006336u, 0x00006335u, 0x00040072u, 0x00000009u, 0x00006337u, 0x00006336u, 0x00120050u, 0x0000000fu, 0x00006338u, 0x000062f4u, 0x000062f9u, 0x000062feu, 0x00006303u, 0x00006308u, 0x0000630du, 0x00006312u, 0x00006317u, 0x0000631cu, 0x00006321u, 0x00006324u, 0x00006329u, 0x0000632eu, 0x00006333u, 0x00006337u, 0x0003003eu, 0x0000681au, 0x000062f4u, 0x0003003eu, 0x0000681bu, 0x000062f9u, 0x0003003eu, 0x0000681cu, 0x000062feu, 0x0003003eu, 0x0000681du, 0x00006303u, 0x0003003eu, 0x0000681eu, 0x00006308u, 0x0003003eu, 0x0000681fu, 0x0000630du, 0x0003003eu, 0x00006820u, 0x00006312u, 0x0003003eu, 0x00006821u, 0x00006317u, 0x0003003eu, 0x00006822u, 0x0000631cu, 0x0003003eu, 0x00006823u, 0x00006321u, 0x0003003eu, 0x00006824u, 0x00006324u, 0x0003003eu, 0x00006825u, 0x00006329u, 0x0003003eu, 0x00006826u, 0x0000632eu, 0x0003003eu, 0x00006827u, 0x00006333u, 0x0003003eu, 0x00006828u, 0x00006337u, 0x0003003eu, 0x00006849u, 0x0000631cu, 0x0003003eu, 0x0000684au, 0x00006321u, 0x0003003eu, 0x0000684cu, 0x00006329u, 0x0003003eu, 0x0000684du, 0x0000632eu, 0x0003003eu, 0x0000621au, 0x00006263u, 0x00070041u, 0x00000234u, 0x0000633bu, 0x000002b2u, 0x00000203u, 0x00006263u, 0x00000203u, 0x0004003du, 0x0000022au, 0x0000633cu, 0x0000633bu, 0x00040071u, 0x00000237u, 0x0000633du, 0x0000633cu, 0x0004007cu, 0x00000009u, 0x0000633eu, 0x0000633du, 0x00070041u, 0x00000234u, 0x00006340u, 0x000002b2u, 0x00000203u, 0x00006263u, 0x00000212u, 0x0004003du, 0x0000022au, 0x00006341u, 0x00006340u, 0x00040071u, 0x00000237u, 0x00006342u, 0x00006341u, 0x0004007cu, 0x00000009u, 0x00006343u, 0x00006342u, 0x00070041u, 0x0000026bu, 0x00006345u, 0x000002b2u, 0x00000203u, 0x00006263u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00006346u, 0x00006345u, 0x00070041u, 0x00000277u, 0x00006348u, 0x000002b2u, 0x00000203u, 0x00006263u, 0x00000218u, 0x0004003du, 0x00000229u, 0x00006349u, 0x00006348u, 0x00040071u, 0x00000006u, 0x0000634au, 0x00006349u, 0x0004007cu, 0x00000008u, 0x0000634bu, 0x0000634au, 0x00070041u, 0x00000277u, 0x0000634du, 0x000002b2u, 0x00000203u, 0x00006263u, 0x0000021bu, 0x0004003du, 0x00000229u, 0x0000634eu, 0x0000634du, 0x00040071u, 0x00000006u, 0x0000634fu, 0x0000634eu, 0x0004007cu, 0x00000008u, 0x00006350u, 0x0000634fu, 0x000a0050u, 0x00000019u, 0x00006351u, 0x0000633eu, 0x00006343u, 0x00006346u, 0x0000634bu, 0x00006350u, 0x00000203u, 0x00000203u, 0x0003003eu, 0x00006804u, 0x0000633eu, 0x0003003eu, 0x00006805u, 0x00006343u, 0x0003003eu, 0x00006806u, 0x00006346u, 0x0003003eu, 0x00006807u, 0x0000634bu, 0x0003003eu, 0x00006808u, 0x00006350u, 0x0003003eu, 0x00006809u, 0x00000203u, 0x0003003eu, 0x0000680au, 0x00000203u, 0x0003003eu, 0x00006853u, 0x0000633eu, 0x0003003eu, 0x00006854u, 0x00006343u, 0x0003003eu, 0x00006855u, 0x00006346u, 0x0003003eu, 0x00006856u, 0x0000634bu, 0x0003003eu, 0x00006857u, 0x00006350u, 0x000500c7u, 0x00000006u, 0x0000626au, 0x00006346u, 0x0000035bu, 0x000500abu, 0x0000005du, 0x0000626bu, 0x0000626au, 0x00000374u, 0x0003003eu, 0x0000621bu, 0x0000626bu, 0x000500c7u, 0x00000006u, 0x0000626eu, 0x00006346u, 0x00000485u, 0x000500abu, 0x0000005du, 0x0000626fu, 0x0000626eu, 0x00000374u, 0x0003003eu, 0x0000621cu, 0x0000626fu, 0x000500c7u, 0x00000006u, 0x00006272u, 0x00006346u, 0x000003c4u, 0x000500abu, 0x0000005du, 0x00006273u, 0x00006272u, 0x00000374u, 0x0003003eu, 0x0000621du, 0x00006273u, 0x000500c7u, 0x00000006u, 0x00006276u, 0x00006346u, 0x00000377u, 0x000500abu, 0x0000005du, 0x00006277u, 0x00006276u, 0x00000374u, 0x0003003eu, 0x0000621eu, 0x00006277u, 0x000500c7u, 0x00000006u, 0x0000627au, 0x00006346u, 0x00000a31u, 0x000500abu, 0x0000005du, 0x0000627bu, 0x0000627au, 0x00000374u, 0x0003003eu, 0x0000621fu, 0x0000627bu, 0x000500c7u, 0x00000006u, 0x0000627eu, 0x00006346u, 0x00000a37u, 0x000500abu, 0x0000005du, 0x0000627fu, 0x0000627eu, 0x00000374u, 0x0003003eu, 0x00006220u, 0x0000627fu, 0x000500c7u, 0x00000006u, 0x00006282u, 0x00006346u, 0x00000a3du, 0x000500abu, 0x0000005du, 0x00006283u, 0x00006282u, 0x00000374u, 0x0003003eu, 0x00006221u, 0x00006283u, 0x000500c7u, 0x00000006u, 0x00006286u, 0x00006346u, 0x00000a43u, 0x000500abu, 0x0000005du, 0x00006287u, 0x00006286u, 0x00000374u, 0x0003003eu, 0x00006222u, 0x00006287u, 0x0003003eu, 0x00006224u, 0x00006277u, 0x000300f7u, 0x00006357u, 0x00000000u, 0x000400fau, 0x00006277u, 0x00006358u, 0x00006359u, 0x000200f8u, 0x00006359u, 0x0003003eu, 0x00006353u, 0x00000928u, 0x000200f9u, 0x00006357u, 0x000200f8u, 0x00006358u, 0x00050041u, 0x00000201u, 0x0000635au, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000635bu, 0x0000635au, 0x000500c7u, 0x00000008u, 0x0000635cu, 0x0000635bu, 0x00000928u, 0x0003003eu, 0x00006353u, 0x0000635cu, 0x000200f9u, 0x00006357u, 0x000200f8u, 0x00006357u, 0x000700f5u, 0x00000008u, 0x0000c2fbu, 0x0000635cu, 0x00006358u, 0x00000928u, 0x00006359u, 0x0003003eu, 0x00006352u, 0x0000c2fbu, 0x000300f7u, 0x0000635eu, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x0000635eu, 0x00000000u, 0x0000635fu, 0x00000001u, 0x00006360u, 0x00000002u, 0x00006361u, 0x00000003u, 0x00006362u, 0x00000004u, 0x00006363u, 0x000200f8u, 0x00006363u, 0x0004003du, 0x00000009u, 0x0000636cu, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x0000636du, 0x0000636cu, 0x0000636cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006354u, 0x0000636du, 0x000200f9u, 0x0000635eu, 0x000200f8u, 0x00006362u, 0x0004003du, 0x00000009u, 0x0000636au, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x0000636bu, 0x0000636au, 0x0000636au, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00006354u, 0x0000636bu, 0x000200f9u, 0x0000635eu, 0x000200f8u, 0x00006361u, 0x0004003du, 0x00000009u, 0x00006366u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00006367u, 0x00006366u, 0x00006366u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000003cu, 0x00006369u, 0x00006367u, 0x0000eec5u, 0x0003003eu, 0x00006354u, 0x00006369u, 0x000200f9u, 0x0000635eu, 0x000200f8u, 0x00006360u, 0x0004003du, 0x00000009u, 0x00006364u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00006365u, 0x00006364u, 0x00006364u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00006354u, 0x00006365u, 0x0003003eu, 0x00006352u, 0x00000928u, 0x000200f9u, 0x0000635eu, 0x000200f8u, 0x0000635fu, 0x0003003eu, 0x00006354u, 0x00000933u, 0x0003003eu, 0x00006352u, 0x00000928u, 0x000200f9u, 0x0000635eu, 0x000200f8u, 0x0000635eu, 0x000f00f5u, 0x00000008u, 0x0000c44bu, 0x0000c2fbu, 0x00006357u, 0x00000928u, 0x0000635fu, 0x00000928u, 0x00006360u, 0x0000c2fbu, 0x00006361u, 0x0000c2fbu, 0x00006362u, 0x0000c2fbu, 0x00006363u, 0x000f00f5u, 0x0000003cu, 0x0000c2fcu, 0x0000c300u, 0x00006357u, 0x00000933u, 0x0000635fu, 0x00006365u, 0x00006360u, 0x00006369u, 0x00006361u, 0x0000636bu, 0x00006362u, 0x0000636du, 0x00006363u, 0x00050051u, 0x00000008u, 0x00006370u, 0x0000c2fcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006371u, 0x0000c2fcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006372u, 0x0000c2fcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006373u, 0x00006370u, 0x00006371u, 0x00006372u, 0x0000c44bu, 0x0003003eu, 0x00006355u, 0x00006373u, 0x0003003eu, 0x00006223u, 0x00006373u, 0x00050041u, 0x0000003eu, 0x0000628au, 0x00006223u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000628bu, 0x0000628au, 0x000500c3u, 0x00000008u, 0x0000628cu, 0x0000628bu, 0x0000021eu, 0x0003003eu, 0x00006225u, 0x0000628cu, 0x0003003eu, 0x0000622au, 0x00006256u, 0x0003003eu, 0x0000622bu, 0x00006329u, 0x0003003eu, 0x0000622cu, 0x0000632eu, 0x0004003du, 0x00000008u, 0x00006292u, 0x00000705u, 0x0003003eu, 0x0000622du, 0x00006292u, 0x0004003du, 0x00000008u, 0x00006293u, 0x000006e7u, 0x0003003eu, 0x0000622eu, 0x00006293u, 0x0003003eu, 0x0000622fu, 0x0000bb95u, 0x0003003eu, 0x00006230u, 0x0000628cu, 0x0003003eu, 0x00006231u, 0x0000626fu, 0x0003003eu, 0x00006232u, 0x00006350u, 0x0003003eu, 0x00006233u, 0x0000626bu, 0x0003003eu, 0x00006234u, 0x00006283u, 0x00050080u, 0x00000008u, 0x000063beu, 0x0000bb95u, 0x0000628cu, 0x000500afu, 0x0000005du, 0x000063bfu, 0x000063beu, 0x0000025eu, 0x000300f7u, 0x00006389u, 0x00000000u, 0x000400fau, 0x0000626fu, 0x0000638au, 0x0000638bu, 0x000200f8u, 0x0000638bu, 0x00050041u, 0x0000003eu, 0x00006415u, 0x00006237u, 0x00000374u, 0x0003003eu, 0x00006415u, 0x00000203u, 0x00050082u, 0x00000008u, 0x00006417u, 0x00000540u, 0x0000632eu, 0x0007000cu, 0x00000008u, 0x00006418u, 0x00000001u, 0x00000027u, 0x00006417u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x00006419u, 0x00006237u, 0x00000485u, 0x0003003eu, 0x00006419u, 0x00006418u, 0x0003003eu, 0x00006386u, 0x000063bfu, 0x000400a8u, 0x0000005du, 0x0000641fu, 0x0000626bu, 0x000300f7u, 0x00006420u, 0x00000000u, 0x000400fau, 0x0000641fu, 0x00006421u, 0x00006420u, 0x000200f8u, 0x00006421u, 0x000400a8u, 0x0000005du, 0x00006423u, 0x000063bfu, 0x000500a7u, 0x0000005du, 0x00006425u, 0x00006423u, 0x00006283u, 0x000200f9u, 0x00006420u, 0x000200f8u, 0x00006420u, 0x000700f5u, 0x0000005du, 0x00006426u, 0x0000626bu, 0x0000638bu, 0x00006425u, 0x00006421u, 0x0003003eu, 0x00006235u, 0x00006426u, 0x0003003eu, 0x00006236u, 0x000063bfu, 0x0003003eu, 0x0000637fu, 0x0000055eu, 0x000200f9u, 0x00006389u, 0x000200f8u, 0x0000638au, 0x0003003eu, 0x00006375u, 0x00006292u, 0x0003003eu, 0x00006429u, 0x00006292u, 0x000500c3u, 0x00000008u, 0x00006431u, 0x00006292u, 0x0000026fu, 0x0003003eu, 0x0000642au, 0x00006431u, 0x000500c7u, 0x00000008u, 0x00006433u, 0x00006292u, 0x0000040au, 0x0003003eu, 0x0000642bu, 0x00006433u, 0x00050082u, 0x00000008u, 0x00006435u, 0x00000221u, 0x00006431u, 0x0007000cu, 0x00000008u, 0x00006436u, 0x00000001u, 0x0000002au, 0x00006435u, 0x00000203u, 0x0003003eu, 0x0000642cu, 0x00006436u, 0x000500c3u, 0x00000008u, 0x00006438u, 0x00000411u, 0x00006431u, 0x00050082u, 0x00000008u, 0x00006439u, 0x00000411u, 0x00006438u, 0x0003003eu, 0x0000642du, 0x00006439u, 0x000500c4u, 0x00000008u, 0x0000643cu, 0x00006433u, 0x00006436u, 0x00050080u, 0x00000008u, 0x0000643eu, 0x0000643cu, 0x00006439u, 0x0003003eu, 0x0000642eu, 0x0000643eu, 0x0003003eu, 0x00006374u, 0x0000643eu, 0x0003003eu, 0x00006377u, 0x00006293u, 0x000500c4u, 0x00000008u, 0x00006441u, 0x00000212u, 0x00006293u, 0x0003003eu, 0x0000643fu, 0x00006441u, 0x0003003eu, 0x00006376u, 0x00006441u, 0x000500c7u, 0x00000008u, 0x00006392u, 0x00006431u, 0x00000540u, 0x0003003eu, 0x00006378u, 0x00006392u, 0x0003003eu, 0x00006379u, 0x00000543u, 0x00050082u, 0x00000008u, 0x00006395u, 0x0000632eu, 0x00006293u, 0x0008000cu, 0x00000008u, 0x00006396u, 0x00000001u, 0x0000002du, 0x00006395u, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x00006397u, 0x00006237u, 0x00000374u, 0x0003003eu, 0x00006397u, 0x00006396u, 0x00050082u, 0x00000008u, 0x0000639au, 0x00006293u, 0x0000632eu, 0x0008000cu, 0x00000008u, 0x0000639bu, 0x00000001u, 0x0000002du, 0x0000639au, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x0000639cu, 0x00006237u, 0x00000485u, 0x0003003eu, 0x0000639cu, 0x0000639bu, 0x000500b1u, 0x0000005du, 0x0000639eu, 0x00006392u, 0x00000218u, 0x000300f7u, 0x0000639fu, 0x00000000u, 0x000400fau, 0x0000639eu, 0x000063a0u, 0x0000639fu, 0x000200f8u, 0x000063a0u, 0x000500abu, 0x0000005du, 0x000063a2u, 0x00006441u, 0x00000553u, 0x000300f7u, 0x000063a3u, 0x00000000u, 0x000400fau, 0x000063a2u, 0x000063a4u, 0x000063a5u, 0x000200f8u, 0x000063a5u, 0x0003003eu, 0x00006379u, 0x0000055eu, 0x0003003eu, 0x00006376u, 0x0000055fu, 0x000200f9u, 0x000063a3u, 0x000200f8u, 0x000063a4u, 0x000500c4u, 0x00000008u, 0x000063a7u, 0x00006441u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x000063a9u, 0x00000559u, 0x00006392u, 0x0007000cu, 0x00000008u, 0x000063aau, 0x00000001u, 0x0000002au, 0x000063a7u, 0x000063a9u, 0x0003003eu, 0x00006376u, 0x000063aau, 0x000200f9u, 0x000063a3u, 0x000200f8u, 0x000063a3u, 0x000700f5u, 0x00000008u, 0x0000c460u, 0x000063aau, 0x000063a4u, 0x0000055fu, 0x000063a5u, 0x000600a9u, 0x0000005du, 0x0000eee6u, 0x000063a2u, 0x00000543u, 0x0000055eu, 0x000200f9u, 0x0000639fu, 0x000200f8u, 0x0000639fu, 0x000700f5u, 0x0000005du, 0x0000c463u, 0x00000543u, 0x0000638au, 0x0000eee6u, 0x000063a3u, 0x000700f5u, 0x00000008u, 0x0000c45fu, 0x00006441u, 0x0000638au, 0x0000c460u, 0x000063a3u, 0x000500c5u, 0x00000008u, 0x000063adu, 0x00006329u, 0x0000c45fu, 0x0003003eu, 0x0000637bu, 0x000063adu, 0x000500abu, 0x0000005du, 0x00006444u, 0x000063adu, 0x00000203u, 0x000300f7u, 0x00006445u, 0x00000000u, 0x000400fau, 0x00006444u, 0x00006446u, 0x00006445u, 0x000200f8u, 0x00006446u, 0x0006000cu, 0x00000008u, 0x00006448u, 0x00000001u, 0x0000004au, 0x000063adu, 0x000500c4u, 0x00000008u, 0x00006449u, 0x00000212u, 0x00006448u, 0x0003003eu, 0x0000637bu, 0x00006449u, 0x000200f9u, 0x00006445u, 0x000200f8u, 0x00006445u, 0x000700f5u, 0x00000008u, 0x0000c461u, 0x000063adu, 0x0000639fu, 0x00006449u, 0x00006446u, 0x0003003eu, 0x00006442u, 0x0000c461u, 0x0003003eu, 0x0000637au, 0x0000c461u, 0x0003003eu, 0x0000637cu, 0x0000c461u, 0x000500c4u, 0x00000008u, 0x000063b1u, 0x0000c461u, 0x00000218u, 0x0003003eu, 0x0000637au, 0x000063b1u, 0x000400a8u, 0x0000005du, 0x000063b3u, 0x0000c463u, 0x000300f7u, 0x000063b4u, 0x00000000u, 0x000400fau, 0x000063b3u, 0x000063b5u, 0x000063b4u, 0x000200f8u, 0x000063b5u, 0x00050080u, 0x00000008u, 0x000063b8u, 0x00006256u, 0x000063b1u, 0x000500afu, 0x0000005du, 0x000063bau, 0x000063b8u, 0x0000643eu, 0x000200f9u, 0x000063b4u, 0x000200f8u, 0x000063b4u, 0x000700f5u, 0x0000005du, 0x000063bbu, 0x0000c463u, 0x00006445u, 0x000063bau, 0x000063b5u, 0x0003003eu, 0x0000637du, 0x000063bbu, 0x0003003eu, 0x0000637eu, 0x000063bfu, 0x000400a8u, 0x0000005du, 0x000063c1u, 0x0000626bu, 0x000300f7u, 0x000063c2u, 0x00000000u, 0x000400fau, 0x000063c1u, 0x000063c3u, 0x000063c2u, 0x000200f8u, 0x000063c3u, 0x000400a8u, 0x0000005du, 0x000063c5u, 0x000063bfu, 0x000500a7u, 0x0000005du, 0x000063c7u, 0x000063c5u, 0x00006283u, 0x000500a7u, 0x0000005du, 0x000063c9u, 0x000063c7u, 0x000063bbu, 0x000200f9u, 0x000063c2u, 0x000200f8u, 0x000063c2u, 0x000700f5u, 0x0000005du, 0x000063cau, 0x0000626bu, 0x000063b4u, 0x000063c9u, 0x000063c3u, 0x0003003eu, 0x00006235u, 0x000063cau, 0x0003003eu, 0x00006236u, 0x000063bfu, 0x0003003eu, 0x0000637fu, 0x00000543u, 0x000500aau, 0x0000005du, 0x000063cdu, 0x0000643eu, 0x0000041du, 0x0003003eu, 0x00006380u, 0x000063cdu, 0x000500b1u, 0x0000005du, 0x000063d0u, 0x00006256u, 0x0000643eu, 0x0003003eu, 0x00006381u, 0x000063d0u, 0x00050082u, 0x00000008u, 0x000063d3u, 0x00006256u, 0x000063b1u, 0x0003003eu, 0x00006382u, 0x000063d3u, 0x000500b3u, 0x0000005du, 0x000063d7u, 0x000063d3u, 0x0000643eu, 0x000500a6u, 0x0000005du, 0x000063d8u, 0x0000c463u, 0x000063d7u, 0x0003003eu, 0x00006383u, 0x000063d8u, 0x000300f7u, 0x000063dau, 0x00000000u, 0x000b00fbu, 0x00006350u, 0x000063dau, 0x00000000u, 0x000063dbu, 0x00000001u, 0x000063dcu, 0x00000002u, 0x000063ddu, 0x00000003u, 0x000063deu, 0x000200f8u, 0x000063deu, 0x000500a7u, 0x0000005du, 0x00006411u, 0x000063bbu, 0x000063d8u, 0x000400a8u, 0x0000005du, 0x00006413u, 0x000063cdu, 0x000500a7u, 0x0000005du, 0x00006414u, 0x00006411u, 0x00006413u, 0x0003003eu, 0x0000637fu, 0x00006414u, 0x000200f9u, 0x000063dau, 0x000200f8u, 0x000063ddu, 0x000500a6u, 0x0000005du, 0x0000640eu, 0x000063d0u, 0x000063cdu, 0x0003003eu, 0x0000637fu, 0x0000640eu, 0x000200f9u, 0x000063dau, 0x000200f8u, 0x000063dcu, 0x000400a8u, 0x0000005du, 0x000063e9u, 0x000063d0u, 0x000400a8u, 0x0000005du, 0x000063ebu, 0x000063bbu, 0x000500a6u, 0x0000005du, 0x000063ecu, 0x000063e9u, 0x000063ebu, 0x000400a8u, 0x0000005du, 0x000063eeu, 0x000063bfu, 0x000500a6u, 0x0000005du, 0x000063efu, 0x000063ecu, 0x000063eeu, 0x000300f7u, 0x000063f0u, 0x00000000u, 0x000400fau, 0x000063efu, 0x000063f1u, 0x000063f2u, 0x000200f8u, 0x000063f2u, 0x000500c7u, 0x00000008u, 0x000063fdu, 0x0000c461u, 0x0000055fu, 0x0003003eu, 0x00006384u, 0x000063fdu, 0x0006000cu, 0x00000008u, 0x0000644du, 0x00000001u, 0x0000004au, 0x000063fdu, 0x0007000cu, 0x00000008u, 0x0000644eu, 0x00000001u, 0x0000002au, 0x0000644du, 0x00000203u, 0x0003003eu, 0x0000644bu, 0x0000644eu, 0x0003003eu, 0x0000637cu, 0x0000644eu, 0x000500c3u, 0x00000008u, 0x00006401u, 0x0000643eu, 0x0000644eu, 0x000500c3u, 0x00000008u, 0x00006404u, 0x00006256u, 0x0000644eu, 0x00050082u, 0x00000008u, 0x00006405u, 0x00006401u, 0x00006404u, 0x000500c7u, 0x00000008u, 0x00006406u, 0x00006405u, 0x00000540u, 0x0003003eu, 0x00006385u, 0x00006406u, 0x00050084u, 0x00000008u, 0x00006409u, 0x00006406u, 0x0000bb95u, 0x000500c3u, 0x00000008u, 0x0000640au, 0x00006409u, 0x00000218u, 0x0007000cu, 0x00000008u, 0x0000640bu, 0x00000001u, 0x00000027u, 0x0000640au, 0x0000025eu, 0x0003003eu, 0x0000622fu, 0x0000640bu, 0x0003003eu, 0x0000637fu, 0x0000055eu, 0x000200f9u, 0x000063f0u, 0x000200f8u, 0x000063f1u, 0x000400a8u, 0x0000005du, 0x000063f4u, 0x000063cdu, 0x000300f7u, 0x000063f5u, 0x00000000u, 0x000400fau, 0x000063f4u, 0x000063f6u, 0x000063f5u, 0x000200f8u, 0x000063f6u, 0x000600a9u, 0x0000005du, 0x000063fau, 0x000063bfu, 0x000063d0u, 0x000063d8u, 0x000200f9u, 0x000063f5u, 0x000200f8u, 0x000063f5u, 0x000700f5u, 0x0000005du, 0x000063fbu, 0x000063cdu, 0x000063f1u, 0x000063fau, 0x000063f6u, 0x0003003eu, 0x0000637fu, 0x000063fbu, 0x000200f9u, 0x000063f0u, 0x000200f8u, 0x000063f0u, 0x000700f5u, 0x00000008u, 0x0000c493u, 0x0000bb95u, 0x000063f5u, 0x0000640bu, 0x000063f2u, 0x000700f5u, 0x0000005du, 0x0000c48fu, 0x000063fbu, 0x000063f5u, 0x0000055eu, 0x000063f2u, 0x000200f9u, 0x000063dau, 0x000200f8u, 0x000063dbu, 0x000400a8u, 0x0000005du, 0x000063e0u, 0x000063cdu, 0x000300f7u, 0x000063e1u, 0x00000000u, 0x000400fau, 0x000063e0u, 0x000063e2u, 0x000063e1u, 0x000200f8u, 0x000063e2u, 0x000600a9u, 0x0000005du, 0x000063e6u, 0x000063bfu, 0x000063d0u, 0x000063d8u, 0x000200f9u, 0x000063e1u, 0x000200f8u, 0x000063e1u, 0x000700f5u, 0x0000005du, 0x000063e7u, 0x000063cdu, 0x000063dbu, 0x000063e6u, 0x000063e2u, 0x0003003eu, 0x0000637fu, 0x000063e7u, 0x000200f9u, 0x000063dau, 0x000200f8u, 0x000063dau, 0x000d00f5u, 0x00000008u, 0x0000c491u, 0x0000bb95u, 0x000063c2u, 0x0000bb95u, 0x000063e1u, 0x0000c493u, 0x000063f0u, 0x0000bb95u, 0x000063ddu, 0x0000bb95u, 0x000063deu, 0x000d00f5u, 0x0000005du, 0x0000c48eu, 0x00000543u, 0x000063c2u, 0x000063e7u, 0x000063e1u, 0x0000c48fu, 0x000063f0u, 0x0000640eu, 0x000063ddu, 0x00006414u, 0x000063deu, 0x000200f9u, 0x00006389u, 0x000200f8u, 0x00006389u, 0x000700f5u, 0x0000005du, 0x0000c496u, 0x000063cau, 0x000063dau, 0x00006426u, 0x00006420u, 0x000700f5u, 0x00000008u, 0x0000c490u, 0x0000c491u, 0x000063dau, 0x0000bb95u, 0x00006420u, 0x000700f5u, 0x0000005du, 0x0000c48du, 0x0000c48eu, 0x000063dau, 0x0000055eu, 0x00006420u, 0x0003003eu, 0x00006387u, 0x0000c48du, 0x0003003eu, 0x00006213u, 0x0000c490u, 0x0003003eu, 0x00006227u, 0x0000c496u, 0x0003003eu, 0x00006228u, 0x000063bfu, 0x0004003du, 0x0000005fu, 0x0000629fu, 0x00006237u, 0x0003003eu, 0x00006229u, 0x0000629fu, 0x0003003eu, 0x00006226u, 0x0000c48du, 0x000300f7u, 0x000062a1u, 0x00000000u, 0x000400fau, 0x0000c48du, 0x000062a2u, 0x000062a1u, 0x000200f8u, 0x000062a2u, 0x000400a8u, 0x0000005du, 0x000062a4u, 0x00006283u, 0x000500abu, 0x0000005du, 0x000062a6u, 0x0000c490u, 0x00000203u, 0x000500a6u, 0x0000005du, 0x000062a7u, 0x000062a4u, 0x000062a6u, 0x000200f9u, 0x000062a1u, 0x000200f8u, 0x000062a1u, 0x000700f5u, 0x0000005du, 0x000062a8u, 0x0000c48du, 0x00006389u, 0x000062a7u, 0x000062a2u, 0x000300f7u, 0x000062a9u, 0x00000000u, 0x000400fau, 0x000062a8u, 0x000062aau, 0x000062a9u, 0x000200f8u, 0x000062aau, 0x0004003du, 0x00000009u, 0x000062acu, 0x00006223u, 0x00080050u, 0x0000005au, 0x000062b2u, 0x0000bdd7u, 0x000062acu, 0x0000631cu, 0x00006321u, 0x0000ba49u, 0x0003003eu, 0x0000685du, 0x0000bdd7u, 0x0003003eu, 0x0000685eu, 0x000062acu, 0x0003003eu, 0x0000685fu, 0x0000631cu, 0x0003003eu, 0x00006860u, 0x00006321u, 0x0003003eu, 0x00006861u, 0x0000ba49u, 0x0003003eu, 0x00006239u, 0x0000633eu, 0x000300f7u, 0x000062b6u, 0x00000000u, 0x000400fau, 0x0000627fu, 0x000062b7u, 0x000062b6u, 0x000200f8u, 0x000062b7u, 0x0003003eu, 0x00006873u, 0x0000bdd7u, 0x0003003eu, 0x00006874u, 0x000062acu, 0x0003003eu, 0x00006875u, 0x0000631cu, 0x0003003eu, 0x00006876u, 0x00006321u, 0x0003003eu, 0x00006877u, 0x0000ba49u, 0x0003003eu, 0x0000623bu, 0x0000633eu, 0x0003003eu, 0x0000623cu, 0x0000626bu, 0x0003003eu, 0x0000623du, 0x0000c496u, 0x0003003eu, 0x0000623eu, 0x0000627bu, 0x0003003eu, 0x0000623fu, 0x000063bfu, 0x0003003eu, 0x00006240u, 0x0000629fu, 0x0003003eu, 0x00006241u, 0x00000543u, 0x0003003eu, 0x0000644fu, 0x00000543u, 0x00050041u, 0x0000003eu, 0x0000645au, 0x0000623bu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000645bu, 0x0000645au, 0x000300f7u, 0x0000645cu, 0x00000000u, 0x000b00fbu, 0x0000645bu, 0x0000645cu, 0x00000000u, 0x0000645du, 0x00000001u, 0x0000645eu, 0x00000002u, 0x0000645fu, 0x00000003u, 0x00006460u, 0x000200f8u, 0x00006460u, 0x0004003du, 0x00000009u, 0x0000646bu, 0x00006875u, 0x0008004fu, 0x0000003cu, 0x0000646cu, 0x0000646bu, 0x0000646bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006451u, 0x0000646cu, 0x000200f9u, 0x0000645cu, 0x000200f8u, 0x0000645fu, 0x0008004fu, 0x0000003cu, 0x00006469u, 0x00006321u, 0x00006321u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006451u, 0x00006469u, 0x000200f9u, 0x0000645cu, 0x000200f8u, 0x0000645eu, 0x0004003du, 0x00000009u, 0x00006465u, 0x00006874u, 0x0008004fu, 0x0000003cu, 0x00006466u, 0x00006465u, 0x00006465u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006451u, 0x00006466u, 0x000200f9u, 0x0000645cu, 0x000200f8u, 0x0000645du, 0x0004003du, 0x00000009u, 0x00006462u, 0x00006873u, 0x0008004fu, 0x0000003cu, 0x00006463u, 0x00006462u, 0x00006462u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006451u, 0x00006463u, 0x000200f9u, 0x0000645cu, 0x000200f8u, 0x0000645cu, 0x000d00f5u, 0x0000003cu, 0x0000c7fcu, 0x0000c808u, 0x000062b7u, 0x00006463u, 0x0000645du, 0x00006466u, 0x0000645eu, 0x00006469u, 0x0000645fu, 0x0000646cu, 0x00006460u, 0x00050041u, 0x0000003eu, 0x00006477u, 0x0000623bu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006478u, 0x00006477u, 0x000300f7u, 0x00006479u, 0x00000000u, 0x000b00fbu, 0x00006478u, 0x00006479u, 0x00000000u, 0x0000647au, 0x00000001u, 0x0000647bu, 0x00000002u, 0x0000647cu, 0x00000003u, 0x0000647du, 0x000200f8u, 0x0000647du, 0x0004003du, 0x00000009u, 0x00006488u, 0x00006875u, 0x0008004fu, 0x0000003cu, 0x00006489u, 0x00006488u, 0x00006488u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006452u, 0x00006489u, 0x000200f9u, 0x00006479u, 0x000200f8u, 0x0000647cu, 0x0008004fu, 0x0000003cu, 0x00006486u, 0x00006321u, 0x00006321u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006452u, 0x00006486u, 0x000200f9u, 0x00006479u, 0x000200f8u, 0x0000647bu, 0x0004003du, 0x00000009u, 0x00006482u, 0x00006874u, 0x0008004fu, 0x0000003cu, 0x00006483u, 0x00006482u, 0x00006482u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006452u, 0x00006483u, 0x000200f9u, 0x00006479u, 0x000200f8u, 0x0000647au, 0x0004003du, 0x00000009u, 0x0000647fu, 0x00006873u, 0x0008004fu, 0x0000003cu, 0x00006480u, 0x0000647fu, 0x0000647fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006452u, 0x00006480u, 0x000200f9u, 0x00006479u, 0x000200f8u, 0x00006479u, 0x00050041u, 0x0000003eu, 0x000064a5u, 0x0000623bu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000064a6u, 0x000064a5u, 0x000300f7u, 0x000064a7u, 0x00000000u, 0x000b00fbu, 0x000064a6u, 0x000064a7u, 0x00000000u, 0x000064a8u, 0x00000001u, 0x000064a9u, 0x00000002u, 0x000064aau, 0x00000003u, 0x000064abu, 0x000200f8u, 0x000064abu, 0x0003003eu, 0x00006453u, 0x00000203u, 0x000200f9u, 0x000064a7u, 0x000200f8u, 0x000064aau, 0x0003003eu, 0x00006453u, 0x0000ba49u, 0x000200f9u, 0x000064a7u, 0x000200f8u, 0x000064a9u, 0x00050041u, 0x0000003eu, 0x0000687fu, 0x00006875u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064afu, 0x0000687fu, 0x0003003eu, 0x00006453u, 0x000064afu, 0x000200f9u, 0x000064a7u, 0x000200f8u, 0x000064a8u, 0x00050041u, 0x0000003eu, 0x0000687eu, 0x00006873u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064adu, 0x0000687eu, 0x0003003eu, 0x00006453u, 0x000064adu, 0x000200f9u, 0x000064a7u, 0x000200f8u, 0x000064a7u, 0x000d00f5u, 0x00000008u, 0x0000c52du, 0x0000c53du, 0x00006479u, 0x000064adu, 0x000064a8u, 0x000064afu, 0x000064a9u, 0x0000ba49u, 0x000064aau, 0x00000203u, 0x000064abu, 0x00050041u, 0x0000003eu, 0x000064b2u, 0x0000623bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064b3u, 0x000064b2u, 0x000300f7u, 0x000064b4u, 0x00000000u, 0x000b00fbu, 0x000064b3u, 0x000064b4u, 0x00000000u, 0x000064b5u, 0x00000001u, 0x000064b6u, 0x00000002u, 0x000064b7u, 0x00000003u, 0x000064b8u, 0x000200f8u, 0x000064b8u, 0x0003003eu, 0x00006454u, 0x00000203u, 0x000200f9u, 0x000064b4u, 0x000200f8u, 0x000064b7u, 0x0003003eu, 0x00006454u, 0x0000038bu, 0x000200f9u, 0x000064b4u, 0x000200f8u, 0x000064b6u, 0x00050041u, 0x0000003eu, 0x00006880u, 0x00006874u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064bdu, 0x00006880u, 0x0003003eu, 0x00006454u, 0x000064bdu, 0x000200f9u, 0x000064b4u, 0x000200f8u, 0x000064b5u, 0x000400c8u, 0x00000008u, 0x000064bau, 0x0000c52du, 0x000500c7u, 0x00000008u, 0x000064bbu, 0x000064bau, 0x0000038bu, 0x0003003eu, 0x00006454u, 0x000064bbu, 0x000200f9u, 0x000064b4u, 0x000200f8u, 0x000064b4u, 0x000d00f5u, 0x00000008u, 0x0000c691u, 0x0000c6a2u, 0x000064a7u, 0x000064bbu, 0x000064b5u, 0x000064bdu, 0x000064b6u, 0x0000038bu, 0x000064b7u, 0x00000203u, 0x000064b8u, 0x000500c3u, 0x00000008u, 0x000064bfu, 0x0000c52du, 0x00000218u, 0x0003003eu, 0x00006453u, 0x000064bfu, 0x000500c3u, 0x00000008u, 0x000064c1u, 0x0000c691u, 0x00000218u, 0x0003003eu, 0x00006454u, 0x000064c1u, 0x0004003du, 0x00000008u, 0x000064c3u, 0x000064b2u, 0x000500aau, 0x0000005du, 0x000064c4u, 0x000064c3u, 0x00000212u, 0x000300f7u, 0x000064c5u, 0x00000000u, 0x000400fau, 0x000064c4u, 0x000064c6u, 0x000064c5u, 0x000200f8u, 0x000064c6u, 0x00050041u, 0x0000003eu, 0x000064c8u, 0x00006240u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000064c9u, 0x000064c8u, 0x000500c3u, 0x00000008u, 0x000064cau, 0x000064bfu, 0x000064c9u, 0x000500c7u, 0x00000008u, 0x000064cbu, 0x000064cau, 0x000004cdu, 0x0003003eu, 0x00006453u, 0x000064cbu, 0x00050041u, 0x0000003eu, 0x000064cdu, 0x00006240u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000064ceu, 0x000064cdu, 0x000500c3u, 0x00000008u, 0x000064cfu, 0x000064c1u, 0x000064ceu, 0x000500c5u, 0x00000008u, 0x000064d0u, 0x000064cfu, 0x00000218u, 0x0003003eu, 0x00006454u, 0x000064d0u, 0x000200f9u, 0x000064c5u, 0x000200f8u, 0x000064c5u, 0x000700f5u, 0x00000008u, 0x0000c95bu, 0x000064c1u, 0x000064b4u, 0x000064d0u, 0x000064c6u, 0x000700f5u, 0x00000008u, 0x0000c7f5u, 0x000064bfu, 0x000064b4u, 0x000064cbu, 0x000064c6u, 0x0004003du, 0x0000003cu, 0x000064d1u, 0x00006452u, 0x00050051u, 0x00000008u, 0x000064d2u, 0x000064d1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000064d3u, 0x000064d1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000064d4u, 0x000064d1u, 0x00000002u, 0x00060050u, 0x0000003cu, 0x000064d7u, 0x0000c7f5u, 0x0000c7f5u, 0x0000c7f5u, 0x00050084u, 0x0000003cu, 0x000064d8u, 0x000064d1u, 0x000064d7u, 0x00050051u, 0x00000008u, 0x000064dau, 0x0000c7fcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000064dbu, 0x0000c7fcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000064dcu, 0x0000c7fcu, 0x00000002u, 0x00050080u, 0x00000008u, 0x000064dfu, 0x0000c95bu, 0x00000212u, 0x00060050u, 0x0000003cu, 0x000064e0u, 0x000064dfu, 0x000064dfu, 0x000064dfu, 0x00050084u, 0x0000003cu, 0x000064e1u, 0x0000c7fcu, 0x000064e0u, 0x00050080u, 0x0000003cu, 0x000064e2u, 0x000064d8u, 0x000064e1u, 0x0003003eu, 0x00006455u, 0x000064e2u, 0x0004003du, 0x0000003cu, 0x000064eau, 0x00006455u, 0x000500c3u, 0x0000003cu, 0x000064ecu, 0x000064eau, 0x0000eec9u, 0x00050051u, 0x00000008u, 0x000064edu, 0x000064ecu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000064eeu, 0x000064ecu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000064efu, 0x000064ecu, 0x00000002u, 0x0003003eu, 0x00006452u, 0x000064ecu, 0x0004003du, 0x0000003cu, 0x0000651bu, 0x00006452u, 0x000500c7u, 0x0000003cu, 0x0000651du, 0x0000651bu, 0x0000039du, 0x0003003eu, 0x0000644fu, 0x0000055eu, 0x0003003eu, 0x00006450u, 0x0000651du, 0x0003003eu, 0x00006457u, 0x0000651du, 0x0009004fu, 0x00000009u, 0x000062c2u, 0x0000bdd7u, 0x0000651du, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000685du, 0x000062c2u, 0x0003003eu, 0x00006239u, 0x00006343u, 0x000200f9u, 0x000062b6u, 0x000200f8u, 0x000062b6u, 0x000700f5u, 0x0000003cu, 0x0000e983u, 0x0000c808u, 0x000062aau, 0x0000c7fcu, 0x000064c5u, 0x000700f5u, 0x00000008u, 0x0000e95bu, 0x0000c6a2u, 0x000062aau, 0x0000c95bu, 0x000064c5u, 0x000700f5u, 0x00000008u, 0x0000e933u, 0x0000c53du, 0x000062aau, 0x0000c7f5u, 0x000064c5u, 0x000700f5u, 0x00000009u, 0x0000c9c8u, 0x0000bdd7u, 0x000062aau, 0x000062c2u, 0x000064c5u, 0x00070050u, 0x000005f9u, 0x0000eee7u, 0x0000627fu, 0x0000627fu, 0x0000627fu, 0x0000627fu, 0x000600a9u, 0x00000009u, 0x0000eee8u, 0x0000eee7u, 0x00006343u, 0x0000633eu, 0x00080050u, 0x0000005au, 0x00006872u, 0x0000c9c8u, 0x000062acu, 0x0000631cu, 0x00006321u, 0x0000ba49u, 0x0003003eu, 0x00006881u, 0x0000c9c8u, 0x0003003eu, 0x00006882u, 0x000062acu, 0x0003003eu, 0x00006883u, 0x0000631cu, 0x0003003eu, 0x00006884u, 0x00006321u, 0x0003003eu, 0x00006885u, 0x0000ba49u, 0x0003003eu, 0x00006244u, 0x0000eee8u, 0x0003003eu, 0x00006245u, 0x0000626bu, 0x0003003eu, 0x00006246u, 0x0000c496u, 0x0003003eu, 0x00006247u, 0x0000627bu, 0x0003003eu, 0x00006248u, 0x000063bfu, 0x0003003eu, 0x00006249u, 0x0000629fu, 0x0003003eu, 0x0000624au, 0x0000055eu, 0x0003003eu, 0x0000651fu, 0x00000543u, 0x000300f7u, 0x00006528u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00006529u, 0x000200f8u, 0x00006529u, 0x00050041u, 0x0000003eu, 0x0000652au, 0x00006244u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000652bu, 0x0000652au, 0x000300f7u, 0x0000652cu, 0x00000000u, 0x000b00fbu, 0x0000652bu, 0x0000652cu, 0x00000000u, 0x0000652du, 0x00000001u, 0x0000652eu, 0x00000002u, 0x0000652fu, 0x00000003u, 0x00006530u, 0x000200f8u, 0x00006530u, 0x0004003du, 0x00000009u, 0x0000653bu, 0x00006883u, 0x0008004fu, 0x0000003cu, 0x0000653cu, 0x0000653bu, 0x0000653bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006521u, 0x0000653cu, 0x000200f9u, 0x0000652cu, 0x000200f8u, 0x0000652fu, 0x0008004fu, 0x0000003cu, 0x00006539u, 0x00006321u, 0x00006321u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006521u, 0x00006539u, 0x000200f9u, 0x0000652cu, 0x000200f8u, 0x0000652eu, 0x0004003du, 0x00000009u, 0x00006535u, 0x00006882u, 0x0008004fu, 0x0000003cu, 0x00006536u, 0x00006535u, 0x00006535u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006521u, 0x00006536u, 0x000200f9u, 0x0000652cu, 0x000200f8u, 0x0000652du, 0x0004003du, 0x00000009u, 0x00006532u, 0x00006881u, 0x0008004fu, 0x0000003cu, 0x00006533u, 0x00006532u, 0x00006532u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006521u, 0x00006533u, 0x000200f9u, 0x0000652cu, 0x000200f8u, 0x0000652cu, 0x000d00f5u, 0x0000003cu, 0x0000cd05u, 0x0000cd12u, 0x00006529u, 0x00006533u, 0x0000652du, 0x00006536u, 0x0000652eu, 0x00006539u, 0x0000652fu, 0x0000653cu, 0x00006530u, 0x000400a8u, 0x0000005du, 0x00006542u, 0x000063bfu, 0x000500a7u, 0x0000005du, 0x00006543u, 0x0000627bu, 0x00006542u, 0x000300f7u, 0x00006544u, 0x00000000u, 0x000400fau, 0x00006543u, 0x00006545u, 0x00006544u, 0x000200f8u, 0x00006545u, 0x0003003eu, 0x0000651fu, 0x0000055eu, 0x0003003eu, 0x00006520u, 0x0000cd05u, 0x000200f9u, 0x00006528u, 0x000200f8u, 0x00006544u, 0x00050041u, 0x0000003eu, 0x00006547u, 0x00006244u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006548u, 0x00006547u, 0x000300f7u, 0x00006549u, 0x00000000u, 0x000b00fbu, 0x00006548u, 0x00006549u, 0x00000000u, 0x0000654au, 0x00000001u, 0x0000654bu, 0x00000002u, 0x0000654cu, 0x00000003u, 0x0000654du, 0x000200f8u, 0x0000654du, 0x0004003du, 0x00000009u, 0x00006558u, 0x00006883u, 0x0008004fu, 0x0000003cu, 0x00006559u, 0x00006558u, 0x00006558u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006522u, 0x00006559u, 0x000200f9u, 0x00006549u, 0x000200f8u, 0x0000654cu, 0x0008004fu, 0x0000003cu, 0x00006556u, 0x00006321u, 0x00006321u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006522u, 0x00006556u, 0x000200f9u, 0x00006549u, 0x000200f8u, 0x0000654bu, 0x0004003du, 0x00000009u, 0x00006552u, 0x00006882u, 0x0008004fu, 0x0000003cu, 0x00006553u, 0x00006552u, 0x00006552u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006522u, 0x00006553u, 0x000200f9u, 0x00006549u, 0x000200f8u, 0x0000654au, 0x0004003du, 0x00000009u, 0x0000654fu, 0x00006881u, 0x0008004fu, 0x0000003cu, 0x00006550u, 0x0000654fu, 0x0000654fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006522u, 0x00006550u, 0x000200f9u, 0x00006549u, 0x000200f8u, 0x00006549u, 0x000400a8u, 0x0000005du, 0x0000655eu, 0x0000c496u, 0x000400a8u, 0x0000005du, 0x0000655fu, 0x0000655eu, 0x000300f7u, 0x00006560u, 0x00000000u, 0x000400fau, 0x0000655fu, 0x00006561u, 0x00006560u, 0x000200f8u, 0x00006561u, 0x00050041u, 0x0000003eu, 0x00006562u, 0x00006244u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00006563u, 0x00006562u, 0x000500aau, 0x0000005du, 0x00006564u, 0x00006563u, 0x00000203u, 0x000300f7u, 0x00006565u, 0x00000000u, 0x000400fau, 0x00006564u, 0x00006566u, 0x00006565u, 0x000200f8u, 0x00006566u, 0x00050041u, 0x0000003eu, 0x00006567u, 0x00006244u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006568u, 0x00006567u, 0x000500aau, 0x0000005du, 0x00006569u, 0x00006568u, 0x00000203u, 0x000200f9u, 0x00006565u, 0x000200f8u, 0x00006565u, 0x000700f5u, 0x0000005du, 0x0000656au, 0x00006564u, 0x00006561u, 0x00006569u, 0x00006566u, 0x000300f7u, 0x0000656bu, 0x00000000u, 0x000400fau, 0x0000656au, 0x0000656cu, 0x0000656bu, 0x000200f8u, 0x0000656cu, 0x00050041u, 0x0000003eu, 0x0000688bu, 0x00006881u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000656eu, 0x0000688bu, 0x000500aau, 0x0000005du, 0x0000656fu, 0x0000656eu, 0x0000038bu, 0x000200f9u, 0x0000656bu, 0x000200f8u, 0x0000656bu, 0x000700f5u, 0x0000005du, 0x00006570u, 0x0000656au, 0x00006565u, 0x0000656fu, 0x0000656cu, 0x000200f9u, 0x00006560u, 0x000200f8u, 0x00006560u, 0x000700f5u, 0x0000005du, 0x00006571u, 0x0000655eu, 0x00006549u, 0x00006570u, 0x0000656bu, 0x000300f7u, 0x00006572u, 0x00000000u, 0x000400fau, 0x00006571u, 0x00006573u, 0x00006572u, 0x000200f8u, 0x00006573u, 0x0004003du, 0x0000003cu, 0x00006574u, 0x00006522u, 0x0003003eu, 0x0000651fu, 0x0000055eu, 0x0003003eu, 0x00006520u, 0x00006574u, 0x000200f9u, 0x00006528u, 0x000200f8u, 0x00006572u, 0x00050041u, 0x0000003eu, 0x00006575u, 0x00006244u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00006576u, 0x00006575u, 0x000300f7u, 0x00006577u, 0x00000000u, 0x000b00fbu, 0x00006576u, 0x00006577u, 0x00000000u, 0x00006578u, 0x00000001u, 0x00006579u, 0x00000002u, 0x0000657au, 0x00000003u, 0x0000657bu, 0x000200f8u, 0x0000657bu, 0x0003003eu, 0x00006523u, 0x00000203u, 0x000200f9u, 0x00006577u, 0x000200f8u, 0x0000657au, 0x0003003eu, 0x00006523u, 0x0000ba49u, 0x000200f9u, 0x00006577u, 0x000200f8u, 0x00006579u, 0x00050041u, 0x0000003eu, 0x0000688du, 0x00006883u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000657fu, 0x0000688du, 0x0003003eu, 0x00006523u, 0x0000657fu, 0x000200f9u, 0x00006577u, 0x000200f8u, 0x00006578u, 0x00050041u, 0x0000003eu, 0x0000688cu, 0x00006881u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000657du, 0x0000688cu, 0x0003003eu, 0x00006523u, 0x0000657du, 0x000200f9u, 0x00006577u, 0x000200f8u, 0x00006577u, 0x000d00f5u, 0x00000008u, 0x0000ca1cu, 0x0000ca2du, 0x00006572u, 0x0000657du, 0x00006578u, 0x0000657fu, 0x00006579u, 0x0000ba49u, 0x0000657au, 0x00000203u, 0x0000657bu, 0x00050041u, 0x0000003eu, 0x00006582u, 0x00006244u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006583u, 0x00006582u, 0x000300f7u, 0x00006584u, 0x00000000u, 0x000b00fbu, 0x00006583u, 0x00006584u, 0x00000000u, 0x00006585u, 0x00000001u, 0x00006586u, 0x00000002u, 0x00006587u, 0x00000003u, 0x00006588u, 0x000200f8u, 0x00006588u, 0x0003003eu, 0x00006524u, 0x00000203u, 0x000200f9u, 0x00006584u, 0x000200f8u, 0x00006587u, 0x0003003eu, 0x00006524u, 0x0000038bu, 0x000200f9u, 0x00006584u, 0x000200f8u, 0x00006586u, 0x00050041u, 0x0000003eu, 0x0000688eu, 0x00006882u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000658du, 0x0000688eu, 0x0003003eu, 0x00006524u, 0x0000658du, 0x000200f9u, 0x00006584u, 0x000200f8u, 0x00006585u, 0x000400c8u, 0x00000008u, 0x0000658au, 0x0000ca1cu, 0x000500c7u, 0x00000008u, 0x0000658bu, 0x0000658au, 0x0000038bu, 0x0003003eu, 0x00006524u, 0x0000658bu, 0x000200f9u, 0x00006584u, 0x000200f8u, 0x00006584u, 0x000d00f5u, 0x00000008u, 0x0000cb8du, 0x0000cb9fu, 0x00006577u, 0x0000658bu, 0x00006585u, 0x0000658du, 0x00006586u, 0x0000038bu, 0x00006587u, 0x00000203u, 0x00006588u, 0x000500c3u, 0x00000008u, 0x0000658fu, 0x0000ca1cu, 0x00000218u, 0x0003003eu, 0x00006523u, 0x0000658fu, 0x000500c3u, 0x00000008u, 0x00006591u, 0x0000cb8du, 0x00000218u, 0x0003003eu, 0x00006524u, 0x00006591u, 0x0004003du, 0x00000008u, 0x00006593u, 0x00006582u, 0x000500aau, 0x0000005du, 0x00006594u, 0x00006593u, 0x00000212u, 0x000300f7u, 0x00006595u, 0x00000000u, 0x000400fau, 0x00006594u, 0x00006596u, 0x00006595u, 0x000200f8u, 0x00006596u, 0x00050041u, 0x0000003eu, 0x00006598u, 0x00006249u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006599u, 0x00006598u, 0x000500c3u, 0x00000008u, 0x0000659au, 0x0000658fu, 0x00006599u, 0x000500c7u, 0x00000008u, 0x0000659bu, 0x0000659au, 0x000004cdu, 0x0003003eu, 0x00006523u, 0x0000659bu, 0x00050041u, 0x0000003eu, 0x0000659du, 0x00006249u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000659eu, 0x0000659du, 0x000500c3u, 0x00000008u, 0x0000659fu, 0x00006591u, 0x0000659eu, 0x000500c5u, 0x00000008u, 0x000065a0u, 0x0000659fu, 0x00000218u, 0x0003003eu, 0x00006524u, 0x000065a0u, 0x000200f9u, 0x00006595u, 0x000200f8u, 0x00006595u, 0x000700f5u, 0x00000008u, 0x0000ce71u, 0x00006591u, 0x00006584u, 0x000065a0u, 0x00006596u, 0x000700f5u, 0x00000008u, 0x0000ccfeu, 0x0000658fu, 0x00006584u, 0x0000659bu, 0x00006596u, 0x0004003du, 0x0000003cu, 0x000065a1u, 0x00006522u, 0x00050051u, 0x00000008u, 0x000065a2u, 0x000065a1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000065a3u, 0x000065a1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000065a4u, 0x000065a1u, 0x00000002u, 0x00060050u, 0x0000003cu, 0x000065a7u, 0x0000ccfeu, 0x0000ccfeu, 0x0000ccfeu, 0x00050084u, 0x0000003cu, 0x000065a8u, 0x000065a1u, 0x000065a7u, 0x00050051u, 0x00000008u, 0x000065aau, 0x0000cd05u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000065abu, 0x0000cd05u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000065acu, 0x0000cd05u, 0x00000002u, 0x00050080u, 0x00000008u, 0x000065afu, 0x0000ce71u, 0x00000212u, 0x00060050u, 0x0000003cu, 0x000065b0u, 0x000065afu, 0x000065afu, 0x000065afu, 0x00050084u, 0x0000003cu, 0x000065b1u, 0x0000cd05u, 0x000065b0u, 0x00050080u, 0x0000003cu, 0x000065b2u, 0x000065a8u, 0x000065b1u, 0x0003003eu, 0x00006525u, 0x000065b2u, 0x000500a6u, 0x0000005du, 0x000065b6u, 0x00000543u, 0x0000626bu, 0x000300f7u, 0x000065b7u, 0x00000000u, 0x000400fau, 0x000065b6u, 0x000065b8u, 0x000065b9u, 0x000200f8u, 0x000065b9u, 0x000500c3u, 0x00000008u, 0x000065c2u, 0x0000ccfeu, 0x00000215u, 0x000500c3u, 0x00000008u, 0x000065c4u, 0x0000ce71u, 0x00000215u, 0x00050080u, 0x00000008u, 0x000065c5u, 0x000065c2u, 0x000065c4u, 0x00050080u, 0x00000008u, 0x000065c6u, 0x000065c5u, 0x00000212u, 0x0003003eu, 0x00006526u, 0x000065c6u, 0x0004003du, 0x0000003cu, 0x000065c7u, 0x00006525u, 0x000500c3u, 0x0000003cu, 0x000065c9u, 0x000065c7u, 0x0000eecau, 0x0003003eu, 0x00006525u, 0x000065c9u, 0x0004003du, 0x0000003cu, 0x000065cau, 0x00006525u, 0x000500c7u, 0x0000003cu, 0x000065ccu, 0x000065cau, 0x0000eecbu, 0x0003003eu, 0x00006525u, 0x000065ccu, 0x0004003du, 0x00000502u, 0x000065cdu, 0x00000504u, 0x000500c4u, 0x00000008u, 0x000065cfu, 0x000065c6u, 0x0000026fu, 0x00050041u, 0x0000003eu, 0x000065d0u, 0x00006525u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000065d1u, 0x000065d0u, 0x000500c5u, 0x00000008u, 0x000065d2u, 0x000065cfu, 0x000065d1u, 0x0005005fu, 0x00000237u, 0x000065d3u, 0x000065cdu, 0x000065d2u, 0x00050051u, 0x00000006u, 0x000065d4u, 0x000065d3u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x000065d5u, 0x000065d4u, 0x00050041u, 0x0000003eu, 0x000065d6u, 0x00006522u, 0x00000374u, 0x0003003eu, 0x000065d6u, 0x000065d5u, 0x00050041u, 0x0000003eu, 0x000065dau, 0x00006525u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000065dbu, 0x000065dau, 0x000500c5u, 0x00000008u, 0x000065dcu, 0x000065cfu, 0x000065dbu, 0x0005005fu, 0x00000237u, 0x000065ddu, 0x000065cdu, 0x000065dcu, 0x00050051u, 0x00000006u, 0x000065deu, 0x000065ddu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x000065dfu, 0x000065deu, 0x00050041u, 0x0000003eu, 0x000065e0u, 0x00006522u, 0x00000485u, 0x0003003eu, 0x000065e0u, 0x000065dfu, 0x00050041u, 0x0000003eu, 0x000065e4u, 0x00006525u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000065e5u, 0x000065e4u, 0x000500c5u, 0x00000008u, 0x000065e6u, 0x000065cfu, 0x000065e5u, 0x0005005fu, 0x00000237u, 0x000065e7u, 0x000065cdu, 0x000065e6u, 0x00050051u, 0x00000006u, 0x000065e8u, 0x000065e7u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x000065e9u, 0x000065e8u, 0x00050041u, 0x0000003eu, 0x000065eau, 0x00006522u, 0x000003c4u, 0x0003003eu, 0x000065eau, 0x000065e9u, 0x000200f9u, 0x000065b7u, 0x000200f8u, 0x000065b8u, 0x0004003du, 0x0000003cu, 0x000065bau, 0x00006525u, 0x000500c3u, 0x0000003cu, 0x000065bcu, 0x000065bau, 0x0000eec9u, 0x00050051u, 0x00000008u, 0x000065bdu, 0x000065bcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000065beu, 0x000065bcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000065bfu, 0x000065bcu, 0x00000002u, 0x0003003eu, 0x00006522u, 0x000065bcu, 0x000200f9u, 0x000065b7u, 0x000200f8u, 0x000065b7u, 0x0004003du, 0x0000003cu, 0x000065ebu, 0x00006522u, 0x000500c7u, 0x0000003cu, 0x000065edu, 0x000065ebu, 0x0000039du, 0x0003003eu, 0x0000651fu, 0x0000055eu, 0x0003003eu, 0x00006520u, 0x000065edu, 0x000200f9u, 0x00006528u, 0x000200f8u, 0x00006528u, 0x000900f5u, 0x00000008u, 0x0000e9c4u, 0x0000cb9fu, 0x00006545u, 0x0000cb9fu, 0x00006573u, 0x0000ce71u, 0x000065b7u, 0x000900f5u, 0x00000008u, 0x0000e9a9u, 0x0000ca2du, 0x00006545u, 0x0000ca2du, 0x00006573u, 0x0000ccfeu, 0x000065b7u, 0x000900f5u, 0x0000003cu, 0x0000ce83u, 0x0000cd05u, 0x00006545u, 0x00006574u, 0x00006573u, 0x000065edu, 0x000065b7u, 0x0003003eu, 0x00006527u, 0x0000ce83u, 0x0003003eu, 0x00006242u, 0x0000ce83u, 0x000300f7u, 0x000062ceu, 0x00000000u, 0x000400fau, 0x00006287u, 0x000062cfu, 0x000062ceu, 0x000200f8u, 0x000062cfu, 0x0003003eu, 0x0000624bu, 0x0000ce83u, 0x0003003eu, 0x0000624cu, 0x00006259u, 0x00060050u, 0x0000003cu, 0x000065f5u, 0x00006259u, 0x00006259u, 0x00006259u, 0x000500c3u, 0x0000003cu, 0x000065f6u, 0x000065f5u, 0x00000392u, 0x000500c7u, 0x0000003cu, 0x000065f8u, 0x000065f6u, 0x0000eec6u, 0x0003003eu, 0x000065efu, 0x000065f8u, 0x000500c7u, 0x0000003cu, 0x000065fbu, 0x0000ce83u, 0x0000eec5u, 0x00050080u, 0x0000003cu, 0x000065fdu, 0x000065fbu, 0x0000eec7u, 0x000500adu, 0x000003a1u, 0x000065ffu, 0x0000ce83u, 0x000003a0u, 0x000600a9u, 0x0000003cu, 0x00006600u, 0x000065ffu, 0x0000039du, 0x000065fdu, 0x0003003eu, 0x000065f0u, 0x00006600u, 0x000500c7u, 0x0000003cu, 0x00006604u, 0x0000ce83u, 0x0000eec6u, 0x00050082u, 0x0000003cu, 0x00006605u, 0x000065f8u, 0x00006604u, 0x000500c3u, 0x0000003cu, 0x00006607u, 0x00006605u, 0x0000eec8u, 0x0003003eu, 0x000065f1u, 0x00006607u, 0x00050082u, 0x0000003cu, 0x0000660au, 0x00006600u, 0x0000ce83u, 0x0003003eu, 0x000065f2u, 0x0000660au, 0x000500c7u, 0x0000003cu, 0x0000660eu, 0x0000660au, 0x00006607u, 0x00050080u, 0x0000003cu, 0x0000660fu, 0x0000ce83u, 0x0000660eu, 0x0003003eu, 0x000065f0u, 0x0000660fu, 0x000500c7u, 0x0000003cu, 0x00006612u, 0x0000660fu, 0x0000039du, 0x00050051u, 0x00000008u, 0x00006613u, 0x00006612u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006614u, 0x00006612u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006615u, 0x00006612u, 0x00000002u, 0x0003003eu, 0x000065f3u, 0x00006612u, 0x0003003eu, 0x00006242u, 0x00006612u, 0x000200f9u, 0x000062ceu, 0x000200f8u, 0x000062ceu, 0x000700f5u, 0x0000003cu, 0x0000cf4bu, 0x0000ce83u, 0x00006528u, 0x00006612u, 0x000062cfu, 0x0003003eu, 0x0000624eu, 0x0000c490u, 0x0003003eu, 0x0000624fu, 0x0000628cu, 0x0003003eu, 0x00006250u, 0x0000c496u, 0x0003003eu, 0x00006251u, 0x0000634bu, 0x0003003eu, 0x00006617u, 0x00000203u, 0x000300f7u, 0x0000661au, 0x00000000u, 0x000b00fbu, 0x0000634bu, 0x0000661au, 0x00000000u, 0x0000661bu, 0x00000001u, 0x0000661cu, 0x00000002u, 0x0000661du, 0x00000003u, 0x0000661eu, 0x000200f8u, 0x0000661eu, 0x0003003eu, 0x00006617u, 0x0000628cu, 0x000200f9u, 0x0000661au, 0x000200f8u, 0x0000661du, 0x0003003eu, 0x00006617u, 0x00000224u, 0x000200f9u, 0x0000661au, 0x000200f8u, 0x0000661cu, 0x00050080u, 0x00000008u, 0x0000662cu, 0x0000c490u, 0x0000628cu, 0x000500c7u, 0x00000008u, 0x0000662du, 0x0000662cu, 0x00000224u, 0x0003003eu, 0x00006617u, 0x0000662du, 0x000200f9u, 0x0000661au, 0x000200f8u, 0x0000661bu, 0x000300f7u, 0x00006620u, 0x00000000u, 0x000400fau, 0x0000c496u, 0x00006621u, 0x00006622u, 0x000200f8u, 0x00006622u, 0x00050082u, 0x00000008u, 0x00006628u, 0x0000c490u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00006629u, 0x00006628u, 0x00000224u, 0x0003003eu, 0x00006617u, 0x00006629u, 0x000200f9u, 0x00006620u, 0x000200f8u, 0x00006621u, 0x00050080u, 0x00000008u, 0x00006625u, 0x0000628cu, 0x0000c490u, 0x0007000cu, 0x00000008u, 0x00006626u, 0x00000001u, 0x00000027u, 0x00000224u, 0x00006625u, 0x0003003eu, 0x00006617u, 0x00006626u, 0x000200f9u, 0x00006620u, 0x000200f8u, 0x00006620u, 0x000700f5u, 0x00000008u, 0x0000cf49u, 0x00006626u, 0x00006621u, 0x00006629u, 0x00006622u, 0x000200f9u, 0x0000661au, 0x000200f8u, 0x0000661au, 0x000d00f5u, 0x00000008u, 0x0000cf48u, 0x00000203u, 0x000062ceu, 0x0000cf49u, 0x00006620u, 0x0000662du, 0x0000661cu, 0x00000224u, 0x0000661du, 0x0000628cu, 0x0000661eu, 0x0003003eu, 0x00006618u, 0x0000cf48u, 0x0003003eu, 0x0000624du, 0x0000cf48u, 0x000500c4u, 0x00000008u, 0x000062dbu, 0x0000cf48u, 0x0000021eu, 0x00050051u, 0x00000008u, 0x000062dcu, 0x0000cf4bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000062ddu, 0x0000cf4bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000062deu, 0x0000cf4bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000062dfu, 0x000062dcu, 0x000062ddu, 0x000062deu, 0x000062dbu, 0x0003003eu, 0x00006252u, 0x000062dfu, 0x000300f7u, 0x00006630u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x00006631u, 0x00006632u, 0x000200f8u, 0x00006632u, 0x0003003eu, 0x00000671u, 0x000062dfu, 0x000200f9u, 0x00006630u, 0x000200f8u, 0x00006631u, 0x0008004fu, 0x0000003cu, 0x00006634u, 0x000062dfu, 0x000062dfu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00006635u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00006636u, 0x00006635u, 0x000062dfu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00006636u, 0x000200f9u, 0x00006630u, 0x000200f8u, 0x00006630u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000300f7u, 0x000062e2u, 0x00000000u, 0x000400fau, 0x00006273u, 0x000062e3u, 0x000062e4u, 0x000200f8u, 0x000062e4u, 0x000300f7u, 0x000062ecu, 0x00000000u, 0x000400fau, 0x00000850u, 0x000062edu, 0x000062ecu, 0x000200f8u, 0x000062edu, 0x000300f7u, 0x0000667cu, 0x00000000u, 0x000700fbu, 0x00000657u, 0x0000667cu, 0x00000002u, 0x0000667du, 0x00000003u, 0x0000667eu, 0x000200f8u, 0x0000667eu, 0x0004003du, 0x00000009u, 0x0000669bu, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000669cu, 0x0000669bu, 0x0000669bu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000669du, 0x0000669cu, 0x0003003eu, 0x00006679u, 0x0000669du, 0x00050041u, 0x00000007u, 0x0000669eu, 0x00006679u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000669fu, 0x0000669eu, 0x000500c4u, 0x00000006u, 0x000066a0u, 0x0000669fu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x000066a1u, 0x00006679u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000066a2u, 0x000066a1u, 0x000500c5u, 0x00000006u, 0x000066a3u, 0x000066a0u, 0x000066a2u, 0x0003003eu, 0x0000667au, 0x000066a3u, 0x000500c7u, 0x00000006u, 0x000066a5u, 0x000066a3u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000066a6u, 0x000066a5u, 0x0000048bu, 0x0003003eu, 0x0000667bu, 0x000066a6u, 0x000500c2u, 0x00000006u, 0x000066a8u, 0x000066a3u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000066a9u, 0x000066a8u, 0x0003003eu, 0x00000705u, 0x000066a9u, 0x000500c7u, 0x00000006u, 0x000066abu, 0x000066a3u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x000066acu, 0x000066abu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000066aeu, 0x000066acu, 0x000066a6u, 0x0004007cu, 0x00000008u, 0x000066afu, 0x000066aeu, 0x0003003eu, 0x000006e7u, 0x000066afu, 0x000200f9u, 0x0000667cu, 0x000200f8u, 0x0000667du, 0x00050041u, 0x00000201u, 0x0000667fu, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006680u, 0x0000667fu, 0x000500c3u, 0x00000008u, 0x00006681u, 0x00006680u, 0x00000218u, 0x00050041u, 0x00000201u, 0x00006682u, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006683u, 0x00006682u, 0x000500c7u, 0x00000008u, 0x00006684u, 0x00006683u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00006685u, 0x00006681u, 0x00006684u, 0x0003003eu, 0x000006e7u, 0x00006685u, 0x00050041u, 0x00000201u, 0x00006686u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006687u, 0x00006686u, 0x0004007cu, 0x00000006u, 0x00006688u, 0x00006687u, 0x000500c7u, 0x00000006u, 0x00006689u, 0x00006688u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x0000668au, 0x00006689u, 0x000006f4u, 0x0003003eu, 0x00006678u, 0x0000668au, 0x00050041u, 0x00000201u, 0x0000668bu, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000668cu, 0x0000668bu, 0x0004007cu, 0x00000006u, 0x0000668du, 0x0000668cu, 0x000500c7u, 0x00000006u, 0x0000668eu, 0x0000668du, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x0000668fu, 0x0000668eu, 0x00000485u, 0x000500c5u, 0x00000006u, 0x00006691u, 0x0000668au, 0x0000668fu, 0x0003003eu, 0x00006678u, 0x00006691u, 0x0004003du, 0x00000008u, 0x00006693u, 0x00006682u, 0x0004007cu, 0x00000006u, 0x00006694u, 0x00006693u, 0x000500c7u, 0x00000006u, 0x00006695u, 0x00006694u, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x00006696u, 0x00006695u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x00006698u, 0x00006691u, 0x00006696u, 0x0003003eu, 0x00006678u, 0x00006698u, 0x0004007cu, 0x00000008u, 0x0000669au, 0x00006698u, 0x0003003eu, 0x00000705u, 0x0000669au, 0x000200f9u, 0x0000667cu, 0x000200f8u, 0x0000667cu, 0x000200f9u, 0x000062ecu, 0x000200f8u, 0x000062ecu, 0x000200f9u, 0x000062e2u, 0x000200f8u, 0x000062e3u, 0x0003003eu, 0x00006253u, 0x00006256u, 0x00050082u, 0x00000008u, 0x0000663eu, 0x0000041du, 0x00006256u, 0x0007000cu, 0x00000008u, 0x0000663fu, 0x00000001u, 0x0000002au, 0x0000663eu, 0x00000212u, 0x0003003eu, 0x00006638u, 0x0000663fu, 0x0006000cu, 0x00000008u, 0x00006641u, 0x00000001u, 0x0000004au, 0x0000663fu, 0x00050082u, 0x00000008u, 0x00006642u, 0x00000422u, 0x00006641u, 0x0003003eu, 0x00006639u, 0x00006642u, 0x0008000cu, 0x00000008u, 0x00006644u, 0x00000001u, 0x0000002du, 0x00006642u, 0x00000203u, 0x00000224u, 0x0003003eu, 0x00006639u, 0x00006644u, 0x00050082u, 0x00000008u, 0x00006646u, 0x00000221u, 0x00006644u, 0x0007000cu, 0x00000008u, 0x00006647u, 0x00000001u, 0x0000002au, 0x00006646u, 0x00000203u, 0x0003003eu, 0x0000663au, 0x00006647u, 0x000500c3u, 0x00000008u, 0x0000664au, 0x00006256u, 0x00006647u, 0x000500c7u, 0x00000008u, 0x0000664bu, 0x0000664au, 0x0000040au, 0x0003003eu, 0x0000663bu, 0x0000664bu, 0x000500c4u, 0x00000008u, 0x0000664du, 0x00006644u, 0x0000026fu, 0x00050080u, 0x00000008u, 0x0000664fu, 0x0000664du, 0x0000664bu, 0x0003003eu, 0x0000663cu, 0x0000664fu, 0x0003003eu, 0x00000705u, 0x0000664fu, 0x0003003eu, 0x000006e7u, 0x0000632eu, 0x0003003eu, 0x00000854u, 0x0000055eu, 0x000300f7u, 0x000062e9u, 0x00000000u, 0x000400fau, 0x00000850u, 0x000062eau, 0x000062e9u, 0x000200f8u, 0x000062eau, 0x0004003du, 0x00000008u, 0x00006651u, 0x00000705u, 0x0004007cu, 0x00000006u, 0x00006652u, 0x00006651u, 0x000500c4u, 0x00000006u, 0x00006653u, 0x00006652u, 0x00000701u, 0x0004003du, 0x00000008u, 0x00006654u, 0x000006e7u, 0x0004007cu, 0x00000006u, 0x00006655u, 0x00006654u, 0x000500c5u, 0x00000006u, 0x00006656u, 0x00006653u, 0x00006655u, 0x0003003eu, 0x00006650u, 0x00006656u, 0x000300f7u, 0x00006657u, 0x00000000u, 0x000700fbu, 0x00000657u, 0x00006657u, 0x00000002u, 0x00006658u, 0x00000003u, 0x00006659u, 0x000200f8u, 0x00006659u, 0x000500c2u, 0x00000006u, 0x0000666fu, 0x00006656u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x00006670u, 0x0000666fu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00006671u, 0x00006670u, 0x00050041u, 0x00000201u, 0x00006672u, 0x00000671u, 0x00000374u, 0x0003003eu, 0x00006672u, 0x00006671u, 0x000500c2u, 0x00000006u, 0x00006674u, 0x00006656u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x00006675u, 0x00006674u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00006676u, 0x00006675u, 0x00050041u, 0x00000201u, 0x00006677u, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x00006677u, 0x00006676u, 0x000200f9u, 0x00006657u, 0x000200f8u, 0x00006658u, 0x000500c2u, 0x00000006u, 0x0000665bu, 0x00006656u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x0000665cu, 0x0000665bu, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x0000665du, 0x0000665cu, 0x00050041u, 0x00000201u, 0x0000665eu, 0x00000671u, 0x00000374u, 0x0003003eu, 0x0000665eu, 0x0000665du, 0x000500c2u, 0x00000006u, 0x00006660u, 0x00006656u, 0x00000734u, 0x000500c7u, 0x00000006u, 0x00006661u, 0x00006660u, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00006662u, 0x00006661u, 0x00050041u, 0x00000201u, 0x00006663u, 0x00000671u, 0x00000485u, 0x0003003eu, 0x00006663u, 0x00006662u, 0x000500c2u, 0x00000006u, 0x00006665u, 0x00006656u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x00006666u, 0x00006665u, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00006667u, 0x00006666u, 0x00050041u, 0x00000201u, 0x00006668u, 0x00000671u, 0x000003c4u, 0x0003003eu, 0x00006668u, 0x00006667u, 0x000500c7u, 0x00000006u, 0x0000666au, 0x00006656u, 0x0000073fu, 0x000500c4u, 0x00000006u, 0x0000666bu, 0x0000666au, 0x00000734u, 0x0004007cu, 0x00000008u, 0x0000666cu, 0x0000666bu, 0x00050041u, 0x00000201u, 0x0000666du, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x0000666du, 0x0000666cu, 0x000200f9u, 0x00006657u, 0x000200f8u, 0x00006657u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000062e9u, 0x000200f8u, 0x000062e9u, 0x000200f9u, 0x000062e2u, 0x000200f8u, 0x000062e2u, 0x000200f9u, 0x000062a9u, 0x000200f8u, 0x000062a9u, 0x000700f5u, 0x0000003cu, 0x0000e9d9u, 0x0000cd12u, 0x000062a1u, 0x0000cd05u, 0x000062e2u, 0x000700f5u, 0x00000008u, 0x0000e9beu, 0x0000cb9fu, 0x000062a1u, 0x0000e9c4u, 0x000062e2u, 0x000700f5u, 0x00000008u, 0x0000e9a3u, 0x0000ca2du, 0x000062a1u, 0x0000e9a9u, 0x000062e2u, 0x000700f5u, 0x0000003cu, 0x0000e97bu, 0x0000c808u, 0x000062a1u, 0x0000e983u, 0x000062e2u, 0x000700f5u, 0x00000008u, 0x0000e953u, 0x0000c6a2u, 0x000062a1u, 0x0000e95bu, 0x000062e2u, 0x000700f5u, 0x00000008u, 0x0000e92bu, 0x0000c53du, 0x000062a1u, 0x0000e933u, 0x000062e2u, 0x000200f9u, 0x00001ee5u, 0x000200f8u, 0x00001ee4u, 0x0004007cu, 0x00000006u, 0x00001ee8u, 0x0000bcb6u, 0x0003003eu, 0x00001ee9u, 0x00001ee8u, 0x0003003eu, 0x00001eeau, 0x00001ec7u, 0x000300f7u, 0x000061a6u, 0x00000000u, 0x000900fbu, 0x00000657u, 0x000061a6u, 0x00000000u, 0x000061a7u, 0x00000001u, 0x000061a8u, 0x00000002u, 0x000061a9u, 0x000200f8u, 0x000061a9u, 0x000500c2u, 0x00000006u, 0x000061b1u, 0x00001ee8u, 0x0000025eu, 0x000500c7u, 0x00000006u, 0x000061b2u, 0x000061b1u, 0x0000069bu, 0x0003003eu, 0x000061a1u, 0x000061b2u, 0x000500c2u, 0x00000006u, 0x000061b4u, 0x00001ee8u, 0x00000218u, 0x000500c7u, 0x00000006u, 0x000061b5u, 0x000061b4u, 0x0000069bu, 0x0003003eu, 0x000061a2u, 0x000061b5u, 0x000500c4u, 0x00000006u, 0x000061b7u, 0x00001ee8u, 0x00000215u, 0x000500c7u, 0x00000006u, 0x000061b8u, 0x000061b7u, 0x0000069bu, 0x0003003eu, 0x000061a3u, 0x000061b8u, 0x000500c7u, 0x00000006u, 0x000061bau, 0x00001ee8u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000061bbu, 0x000061bau, 0x00000971u, 0x0003003eu, 0x000061a4u, 0x000061bbu, 0x0004007cu, 0x00000008u, 0x000061bdu, 0x000061b2u, 0x0004007cu, 0x00000008u, 0x000061bfu, 0x000061b5u, 0x0004007cu, 0x00000008u, 0x000061c1u, 0x000061b8u, 0x0004007cu, 0x00000008u, 0x000061c3u, 0x000061bbu, 0x00070050u, 0x00000009u, 0x000061c4u, 0x000061bdu, 0x000061bfu, 0x000061c1u, 0x000061c3u, 0x0003003eu, 0x000061a5u, 0x000061c4u, 0x000300f7u, 0x000061d1u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x000061d2u, 0x000061d3u, 0x000200f8u, 0x000061d3u, 0x0003003eu, 0x00000671u, 0x000061c4u, 0x000200f9u, 0x000061d1u, 0x000200f8u, 0x000061d2u, 0x0008004fu, 0x0000003cu, 0x000061d5u, 0x000061c4u, 0x000061c4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x000061d6u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x000061d7u, 0x000061d6u, 0x000061c4u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x000061d7u, 0x000200f9u, 0x000061d1u, 0x000200f8u, 0x000061d1u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000061a6u, 0x000200f8u, 0x000061a8u, 0x000500c7u, 0x00000006u, 0x000061abu, 0x00001ee8u, 0x000006c2u, 0x0003003eu, 0x00001ee9u, 0x000061abu, 0x0004007cu, 0x00000008u, 0x000061adu, 0x000061abu, 0x00070050u, 0x00000009u, 0x000061aeu, 0x000061adu, 0x000061adu, 0x000061adu, 0x000061adu, 0x0003003eu, 0x000061a0u, 0x000061aeu, 0x000300f7u, 0x000061c9u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x000061cau, 0x000061cbu, 0x000200f8u, 0x000061cbu, 0x0003003eu, 0x00000671u, 0x000061aeu, 0x000200f9u, 0x000061c9u, 0x000200f8u, 0x000061cau, 0x0008004fu, 0x0000003cu, 0x000061cdu, 0x000061aeu, 0x000061aeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x000061ceu, 0x00000671u, 0x0009004fu, 0x00000009u, 0x000061cfu, 0x000061ceu, 0x000061aeu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x000061cfu, 0x000200f9u, 0x000061c9u, 0x000200f8u, 0x000061c9u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000061a6u, 0x000200f8u, 0x000061a7u, 0x0003003eu, 0x00000671u, 0x00000611u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000061a6u, 0x000200f8u, 0x000061a6u, 0x000300f7u, 0x000061c6u, 0x00000000u, 0x000400fau, 0x00000850u, 0x000061c7u, 0x000061c6u, 0x000200f8u, 0x000061c7u, 0x000300f7u, 0x000061ddu, 0x00000000u, 0x000700fbu, 0x00000657u, 0x000061ddu, 0x00000002u, 0x000061deu, 0x00000003u, 0x000061dfu, 0x000200f8u, 0x000061dfu, 0x0004003du, 0x00000009u, 0x000061fcu, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x000061fdu, 0x000061fcu, 0x000061fcu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x000061feu, 0x000061fdu, 0x0003003eu, 0x000061dau, 0x000061feu, 0x00050041u, 0x00000007u, 0x000061ffu, 0x000061dau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00006200u, 0x000061ffu, 0x000500c4u, 0x00000006u, 0x00006201u, 0x00006200u, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00006202u, 0x000061dau, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006203u, 0x00006202u, 0x000500c5u, 0x00000006u, 0x00006204u, 0x00006201u, 0x00006203u, 0x0003003eu, 0x000061dbu, 0x00006204u, 0x000500c7u, 0x00000006u, 0x00006206u, 0x00006204u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006207u, 0x00006206u, 0x0000048bu, 0x0003003eu, 0x000061dcu, 0x00006207u, 0x000500c2u, 0x00000006u, 0x00006209u, 0x00006204u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x0000620au, 0x00006209u, 0x0003003eu, 0x00000705u, 0x0000620au, 0x000500c7u, 0x00000006u, 0x0000620cu, 0x00006204u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x0000620du, 0x0000620cu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x0000620fu, 0x0000620du, 0x00006207u, 0x0004007cu, 0x00000008u, 0x00006210u, 0x0000620fu, 0x0003003eu, 0x000006e7u, 0x00006210u, 0x000200f9u, 0x000061ddu, 0x000200f8u, 0x000061deu, 0x00050041u, 0x00000201u, 0x000061e0u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000061e1u, 0x000061e0u, 0x000500c3u, 0x00000008u, 0x000061e2u, 0x000061e1u, 0x00000218u, 0x00050041u, 0x00000201u, 0x000061e3u, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000061e4u, 0x000061e3u, 0x000500c7u, 0x00000008u, 0x000061e5u, 0x000061e4u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x000061e6u, 0x000061e2u, 0x000061e5u, 0x0003003eu, 0x000006e7u, 0x000061e6u, 0x00050041u, 0x00000201u, 0x000061e7u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000061e8u, 0x000061e7u, 0x0004007cu, 0x00000006u, 0x000061e9u, 0x000061e8u, 0x000500c7u, 0x00000006u, 0x000061eau, 0x000061e9u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000061ebu, 0x000061eau, 0x000006f4u, 0x0003003eu, 0x000061d9u, 0x000061ebu, 0x00050041u, 0x00000201u, 0x000061ecu, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000061edu, 0x000061ecu, 0x0004007cu, 0x00000006u, 0x000061eeu, 0x000061edu, 0x000500c7u, 0x00000006u, 0x000061efu, 0x000061eeu, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000061f0u, 0x000061efu, 0x00000485u, 0x000500c5u, 0x00000006u, 0x000061f2u, 0x000061ebu, 0x000061f0u, 0x0003003eu, 0x000061d9u, 0x000061f2u, 0x0004003du, 0x00000008u, 0x000061f4u, 0x000061e3u, 0x0004007cu, 0x00000006u, 0x000061f5u, 0x000061f4u, 0x000500c7u, 0x00000006u, 0x000061f6u, 0x000061f5u, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x000061f7u, 0x000061f6u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x000061f9u, 0x000061f2u, 0x000061f7u, 0x0003003eu, 0x000061d9u, 0x000061f9u, 0x0004007cu, 0x00000008u, 0x000061fbu, 0x000061f9u, 0x0003003eu, 0x00000705u, 0x000061fbu, 0x000200f9u, 0x000061ddu, 0x000200f8u, 0x000061ddu, 0x000200f9u, 0x000061c6u, 0x000200f8u, 0x000061c6u, 0x000200f9u, 0x00001ee5u, 0x000200f8u, 0x00001ee5u, 0x000700f5u, 0x0000003cu, 0x0000e9d3u, 0x0000cd12u, 0x000061c6u, 0x0000e9d9u, 0x000062a9u, 0x000700f5u, 0x00000008u, 0x0000e9b8u, 0x0000cb9fu, 0x000061c6u, 0x0000e9beu, 0x000062a9u, 0x000700f5u, 0x00000008u, 0x0000e99du, 0x0000ca2du, 0x000061c6u, 0x0000e9a3u, 0x000062a9u, 0x000700f5u, 0x0000003cu, 0x0000e975u, 0x0000c808u, 0x000061c6u, 0x0000e97bu, 0x000062a9u, 0x000700f5u, 0x00000008u, 0x0000e94du, 0x0000c6a2u, 0x000061c6u, 0x0000e953u, 0x000062a9u, 0x000700f5u, 0x00000008u, 0x0000e925u, 0x0000c53du, 0x000061c6u, 0x0000e92bu, 0x000062a9u, 0x000700f5u, 0x0000003cu, 0x0000e8e7u, 0x0000c300u, 0x000061c6u, 0x0000c2fcu, 0x000062a9u, 0x000200f9u, 0x00001ed9u, 0x000200f8u, 0x00001ed8u, 0x00070041u, 0x0000026bu, 0x00001edcu, 0x00000232u, 0x00000203u, 0x00001ec7u, 0x0000026au, 0x0004003du, 0x00000006u, 0x00001eddu, 0x00001edcu, 0x0003003eu, 0x00001edbu, 0x00001eddu, 0x000300f7u, 0x000060eau, 0x00000000u, 0x000b00fbu, 0x00000657u, 0x000060eau, 0x00000004u, 0x000060ebu, 0x00000002u, 0x000060ecu, 0x00000003u, 0x000060edu, 0x00000001u, 0x000060eeu, 0x000200f8u, 0x000060eeu, 0x0004003du, 0x00000006u, 0x00006139u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x0000613au, 0x00006139u, 0x0000048bu, 0x000500c6u, 0x00000006u, 0x0000613bu, 0x0000613au, 0x0000048bu, 0x00050084u, 0x00000006u, 0x0000613cu, 0x0000613bu, 0x0000035bu, 0x000500c2u, 0x00000006u, 0x0000613eu, 0x00001eddu, 0x0000613cu, 0x0003003eu, 0x00001edbu, 0x0000613eu, 0x000500c7u, 0x00000006u, 0x00006140u, 0x0000613eu, 0x000006c2u, 0x0003003eu, 0x00001edbu, 0x00006140u, 0x0004007cu, 0x00000008u, 0x00006142u, 0x00006140u, 0x00070050u, 0x00000009u, 0x00006143u, 0x00006142u, 0x00006142u, 0x00006142u, 0x00006142u, 0x0003003eu, 0x000060e9u, 0x00006143u, 0x000300f7u, 0x00006160u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x00006161u, 0x00006162u, 0x000200f8u, 0x00006162u, 0x0003003eu, 0x00000671u, 0x00006143u, 0x000200f9u, 0x00006160u, 0x000200f8u, 0x00006161u, 0x0008004fu, 0x0000003cu, 0x00006164u, 0x00006143u, 0x00006143u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00006165u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00006166u, 0x00006165u, 0x00006143u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00006166u, 0x000200f9u, 0x00006160u, 0x000200f8u, 0x00006160u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060eau, 0x000200f8u, 0x000060edu, 0x0004003du, 0x00000006u, 0x00006121u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x00006122u, 0x00006121u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x00006123u, 0x00006122u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006124u, 0x00006123u, 0x00000377u, 0x000500c2u, 0x00000006u, 0x00006126u, 0x00001eddu, 0x00006124u, 0x0003003eu, 0x00001edbu, 0x00006126u, 0x000500c7u, 0x00000006u, 0x00006128u, 0x00006126u, 0x000007eeu, 0x0003003eu, 0x00001edbu, 0x00006128u, 0x000500c2u, 0x00000006u, 0x0000612au, 0x00006128u, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x0000612bu, 0x0000612au, 0x000006c2u, 0x0003003eu, 0x000060e6u, 0x0000612bu, 0x000500c2u, 0x00000006u, 0x0000612du, 0x00006128u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x0000612eu, 0x0000612du, 0x000006c2u, 0x0003003eu, 0x000060e7u, 0x0000612eu, 0x0004007cu, 0x00000008u, 0x00006130u, 0x0000612bu, 0x0004007cu, 0x00000008u, 0x00006136u, 0x0000612eu, 0x00070050u, 0x00000009u, 0x00006137u, 0x00006130u, 0x00006130u, 0x00006130u, 0x00006136u, 0x0003003eu, 0x000060e8u, 0x00006137u, 0x000300f7u, 0x00006158u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x00006159u, 0x0000615au, 0x000200f8u, 0x0000615au, 0x0003003eu, 0x00000671u, 0x00006137u, 0x000200f9u, 0x00006158u, 0x000200f8u, 0x00006159u, 0x0008004fu, 0x0000003cu, 0x0000615cu, 0x00006137u, 0x00006137u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x0000615du, 0x00000671u, 0x0009004fu, 0x00000009u, 0x0000615eu, 0x0000615du, 0x00006137u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x0000615eu, 0x000200f9u, 0x00006158u, 0x000200f8u, 0x00006158u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060eau, 0x000200f8u, 0x000060ecu, 0x0004003du, 0x00000006u, 0x00006105u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x00006106u, 0x00006105u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x00006107u, 0x00006106u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006108u, 0x00006107u, 0x00000377u, 0x000500c2u, 0x00000006u, 0x0000610au, 0x00001eddu, 0x00006108u, 0x0003003eu, 0x00001edbu, 0x0000610au, 0x000500c2u, 0x00000006u, 0x0000610cu, 0x0000610au, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x0000610du, 0x0000610cu, 0x0000069bu, 0x0003003eu, 0x000060e1u, 0x0000610du, 0x000500c2u, 0x00000006u, 0x0000610fu, 0x0000610au, 0x0000048bu, 0x000500c7u, 0x00000006u, 0x00006110u, 0x0000610fu, 0x0000069bu, 0x0003003eu, 0x000060e2u, 0x00006110u, 0x000500c4u, 0x00000006u, 0x00006112u, 0x0000610au, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x00006113u, 0x00006112u, 0x0000069bu, 0x0003003eu, 0x000060e3u, 0x00006113u, 0x000500c7u, 0x00000006u, 0x00006115u, 0x0000610au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006116u, 0x00006115u, 0x00000971u, 0x0003003eu, 0x000060e4u, 0x00006116u, 0x0004007cu, 0x00000008u, 0x00006118u, 0x0000610du, 0x0004007cu, 0x00000008u, 0x0000611au, 0x00006110u, 0x0004007cu, 0x00000008u, 0x0000611cu, 0x00006113u, 0x0004007cu, 0x00000008u, 0x0000611eu, 0x00006116u, 0x00070050u, 0x00000009u, 0x0000611fu, 0x00006118u, 0x0000611au, 0x0000611cu, 0x0000611eu, 0x0003003eu, 0x000060e5u, 0x0000611fu, 0x000300f7u, 0x00006150u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x00006151u, 0x00006152u, 0x000200f8u, 0x00006152u, 0x0003003eu, 0x00000671u, 0x0000611fu, 0x000200f9u, 0x00006150u, 0x000200f8u, 0x00006151u, 0x0008004fu, 0x0000003cu, 0x00006154u, 0x0000611fu, 0x0000611fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00006155u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00006156u, 0x00006155u, 0x0000611fu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00006156u, 0x000200f9u, 0x00006150u, 0x000200f8u, 0x00006150u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060eau, 0x000200f8u, 0x000060ebu, 0x000500c2u, 0x00000006u, 0x000060f0u, 0x00001eddu, 0x000006dcu, 0x000500c7u, 0x00000006u, 0x000060f1u, 0x000060f0u, 0x000006c2u, 0x0003003eu, 0x000060dcu, 0x000060f1u, 0x000500c2u, 0x00000006u, 0x000060f3u, 0x00001eddu, 0x00000377u, 0x000500c7u, 0x00000006u, 0x000060f4u, 0x000060f3u, 0x000006c2u, 0x0003003eu, 0x000060ddu, 0x000060f4u, 0x000500c2u, 0x00000006u, 0x000060f6u, 0x00001eddu, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x000060f7u, 0x000060f6u, 0x000006c2u, 0x0003003eu, 0x000060deu, 0x000060f7u, 0x000500c2u, 0x00000006u, 0x000060f9u, 0x00001eddu, 0x00000374u, 0x000500c7u, 0x00000006u, 0x000060fau, 0x000060f9u, 0x000006c2u, 0x0003003eu, 0x000060dfu, 0x000060fau, 0x0004007cu, 0x00000008u, 0x000060fcu, 0x000060f1u, 0x0004007cu, 0x00000008u, 0x000060feu, 0x000060f4u, 0x0004007cu, 0x00000008u, 0x00006100u, 0x000060f7u, 0x0004007cu, 0x00000008u, 0x00006102u, 0x000060fau, 0x00070050u, 0x00000009u, 0x00006103u, 0x000060fcu, 0x000060feu, 0x00006100u, 0x00006102u, 0x0003003eu, 0x000060e0u, 0x00006103u, 0x000300f7u, 0x00006148u, 0x00000000u, 0x000400fau, 0x0000094cu, 0x00006149u, 0x0000614au, 0x000200f8u, 0x0000614au, 0x0003003eu, 0x00000671u, 0x00006103u, 0x000200f9u, 0x00006148u, 0x000200f8u, 0x00006149u, 0x0008004fu, 0x0000003cu, 0x0000614cu, 0x00006103u, 0x00006103u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x0000614du, 0x00000671u, 0x0009004fu, 0x00000009u, 0x0000614eu, 0x0000614du, 0x00006103u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x0000614eu, 0x000200f9u, 0x00006148u, 0x000200f8u, 0x00006148u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060eau, 0x000200f8u, 0x000060eau, 0x000300f7u, 0x00006145u, 0x00000000u, 0x000400fau, 0x00000850u, 0x00006146u, 0x00006145u, 0x000200f8u, 0x00006146u, 0x000300f7u, 0x0000616cu, 0x00000000u, 0x000700fbu, 0x00000657u, 0x0000616cu, 0x00000002u, 0x0000616du, 0x00000003u, 0x0000616eu, 0x000200f8u, 0x0000616eu, 0x0004003du, 0x00000009u, 0x0000618bu, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000618cu, 0x0000618bu, 0x0000618bu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000618du, 0x0000618cu, 0x0003003eu, 0x00006169u, 0x0000618du, 0x00050041u, 0x00000007u, 0x0000618eu, 0x00006169u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000618fu, 0x0000618eu, 0x000500c4u, 0x00000006u, 0x00006190u, 0x0000618fu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00006191u, 0x00006169u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006192u, 0x00006191u, 0x000500c5u, 0x00000006u, 0x00006193u, 0x00006190u, 0x00006192u, 0x0003003eu, 0x0000616au, 0x00006193u, 0x000500c7u, 0x00000006u, 0x00006195u, 0x00006193u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006196u, 0x00006195u, 0x0000048bu, 0x0003003eu, 0x0000616bu, 0x00006196u, 0x000500c2u, 0x00000006u, 0x00006198u, 0x00006193u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x00006199u, 0x00006198u, 0x0003003eu, 0x00000705u, 0x00006199u, 0x000500c7u, 0x00000006u, 0x0000619bu, 0x00006193u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x0000619cu, 0x0000619bu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x0000619eu, 0x0000619cu, 0x00006196u, 0x0004007cu, 0x00000008u, 0x0000619fu, 0x0000619eu, 0x0003003eu, 0x000006e7u, 0x0000619fu, 0x000200f9u, 0x0000616cu, 0x000200f8u, 0x0000616du, 0x00050041u, 0x00000201u, 0x0000616fu, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006170u, 0x0000616fu, 0x000500c3u, 0x00000008u, 0x00006171u, 0x00006170u, 0x00000218u, 0x00050041u, 0x00000201u, 0x00006172u, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006173u, 0x00006172u, 0x000500c7u, 0x00000008u, 0x00006174u, 0x00006173u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00006175u, 0x00006171u, 0x00006174u, 0x0003003eu, 0x000006e7u, 0x00006175u, 0x00050041u, 0x00000201u, 0x00006176u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006177u, 0x00006176u, 0x0004007cu, 0x00000006u, 0x00006178u, 0x00006177u, 0x000500c7u, 0x00000006u, 0x00006179u, 0x00006178u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x0000617au, 0x00006179u, 0x000006f4u, 0x0003003eu, 0x00006168u, 0x0000617au, 0x00050041u, 0x00000201u, 0x0000617bu, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000617cu, 0x0000617bu, 0x0004007cu, 0x00000006u, 0x0000617du, 0x0000617cu, 0x000500c7u, 0x00000006u, 0x0000617eu, 0x0000617du, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x0000617fu, 0x0000617eu, 0x00000485u, 0x000500c5u, 0x00000006u, 0x00006181u, 0x0000617au, 0x0000617fu, 0x0003003eu, 0x00006168u, 0x00006181u, 0x0004003du, 0x00000008u, 0x00006183u, 0x00006172u, 0x0004007cu, 0x00000006u, 0x00006184u, 0x00006183u, 0x000500c7u, 0x00000006u, 0x00006185u, 0x00006184u, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x00006186u, 0x00006185u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x00006188u, 0x00006181u, 0x00006186u, 0x0003003eu, 0x00006168u, 0x00006188u, 0x0004007cu, 0x00000008u, 0x0000618au, 0x00006188u, 0x0003003eu, 0x00000705u, 0x0000618au, 0x000200f9u, 0x0000616cu, 0x000200f8u, 0x0000616cu, 0x000200f9u, 0x00006145u, 0x000200f8u, 0x00006145u, 0x000200f9u, 0x00001ed9u, 0x000200f8u, 0x00001ed9u, 0x000700f5u, 0x0000003cu, 0x0000e9cbu, 0x0000cd12u, 0x00006145u, 0x0000e9d3u, 0x00001ee5u, 0x000700f5u, 0x00000008u, 0x0000e9b0u, 0x0000cb9fu, 0x00006145u, 0x0000e9b8u, 0x00001ee5u, 0x000700f5u, 0x00000008u, 0x0000e995u, 0x0000ca2du, 0x00006145u, 0x0000e99du, 0x00001ee5u, 0x000700f5u, 0x0000003cu, 0x0000e96du, 0x0000c808u, 0x00006145u, 0x0000e975u, 0x00001ee5u, 0x000700f5u, 0x00000008u, 0x0000e945u, 0x0000c6a2u, 0x00006145u, 0x0000e94du, 0x00001ee5u, 0x000700f5u, 0x00000008u, 0x0000e91du, 0x0000c53du, 0x00006145u, 0x0000e925u, 0x00001ee5u, 0x000700f5u, 0x0000003cu, 0x0000e8dfu, 0x0000c300u, 0x00006145u, 0x0000e8e7u, 0x00001ee5u, 0x000200f9u, 0x00001ed3u, 0x000200f8u, 0x00001ed3u, 0x000700f5u, 0x0000003cu, 0x0000e9cau, 0x0000cd12u, 0x000020a9u, 0x0000e9cbu, 0x00001ed9u, 0x000700f5u, 0x00000008u, 0x0000e9afu, 0x0000cb9fu, 0x000020a9u, 0x0000e9b0u, 0x00001ed9u, 0x000700f5u, 0x00000008u, 0x0000e994u, 0x0000ca2du, 0x000020a9u, 0x0000e995u, 0x00001ed9u, 0x000700f5u, 0x0000003cu, 0x0000e96cu, 0x0000c808u, 0x000020a9u, 0x0000e96du, 0x00001ed9u, 0x000700f5u, 0x00000008u, 0x0000e944u, 0x0000c6a2u, 0x000020a9u, 0x0000e945u, 0x00001ed9u, 0x000700f5u, 0x00000008u, 0x0000e91cu, 0x0000c53du, 0x000020a9u, 0x0000e91du, 0x00001ed9u, 0x000700f5u, 0x0000003cu, 0x0000e8deu, 0x0000c300u, 0x000020a9u, 0x0000e8dfu, 0x00001ed9u, 0x000200f9u, 0x00001eb5u, 0x000200f8u, 0x00001eb5u, 0x000200f9u, 0x00001eb2u, 0x000200f8u, 0x00001eb4u, 0x000200f9u, 0x00001e9bu, 0x000200f8u, 0x00001e9bu, 0x000200f9u, 0x00001e98u, 0x000200f8u, 0x00001e9au, 0x0003003eu, 0x00001ef7u, 0x00001e8au, 0x0003003eu, 0x00001efau, 0x00001e8du, 0x0003003eu, 0x00001efdu, 0x00001e90u, 0x0003003eu, 0x00001f00u, 0x00001e93u, 0x0003003eu, 0x00001f03u, 0x00001e96u, 0x0004003du, 0x000000a2u, 0x000066bau, 0x00001ef7u, 0x000500b0u, 0x00000879u, 0x000066beu, 0x000066bau, 0x00001f30u, 0x0004009bu, 0x0000005du, 0x000066bfu, 0x000066beu, 0x000300f7u, 0x000066c0u, 0x00000000u, 0x000400fau, 0x000066bfu, 0x000066c1u, 0x000066c0u, 0x000200f8u, 0x000066c1u, 0x000500c2u, 0x00000006u, 0x000066c3u, 0x00001e8du, 0x0000078du, 0x0003003eu, 0x000066b0u, 0x000066c3u, 0x0004003du, 0x000000a2u, 0x000066c4u, 0x00001ef7u, 0x00050050u, 0x000000a2u, 0x000066c5u, 0x000008edu, 0x000008edu, 0x000500c7u, 0x000000a2u, 0x000066c6u, 0x000066c4u, 0x000066c5u, 0x0003003eu, 0x000066b1u, 0x000066c6u, 0x0004003du, 0x000000a2u, 0x000066c7u, 0x00001ef7u, 0x00050050u, 0x0000005fu, 0x000066c8u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x000066c9u, 0x000066c7u, 0x000066c8u, 0x0003003eu, 0x00001ef7u, 0x000066c9u, 0x00050041u, 0x00000007u, 0x000066cau, 0x000066b1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000066cbu, 0x000066cau, 0x00050084u, 0x00000006u, 0x000066ccu, 0x000066cbu, 0x000008f6u, 0x00050041u, 0x00000007u, 0x000066cdu, 0x000066b1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000066ceu, 0x000066cdu, 0x00050080u, 0x00000006u, 0x000066cfu, 0x000066ccu, 0x000066ceu, 0x0003003eu, 0x000066b2u, 0x000066cfu, 0x00050041u, 0x00000007u, 0x000066d2u, 0x00001ef7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000066d3u, 0x000066d2u, 0x00050084u, 0x00000006u, 0x000066d4u, 0x000066c3u, 0x000066d3u, 0x00050080u, 0x00000006u, 0x000066d5u, 0x00001e93u, 0x000066d4u, 0x00050041u, 0x00000007u, 0x000066d6u, 0x00001ef7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000066d7u, 0x000066d6u, 0x00050080u, 0x00000006u, 0x000066d8u, 0x000066d5u, 0x000066d7u, 0x0003003eu, 0x000066b3u, 0x000066d8u, 0x0003003eu, 0x000066b4u, 0x000066d8u, 0x0003003eu, 0x000066b5u, 0x000066cfu, 0x0004003du, 0x0000005du, 0x000066f4u, 0x00000752u, 0x000300f7u, 0x000066f5u, 0x00000000u, 0x000400fau, 0x000066f4u, 0x000066f6u, 0x000066f5u, 0x000200f8u, 0x000066f6u, 0x000300f7u, 0x000066f7u, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x000066f7u, 0x00000000u, 0x000066f8u, 0x00000001u, 0x000066f9u, 0x00000002u, 0x000066fau, 0x00000003u, 0x000066fbu, 0x00000004u, 0x000066fcu, 0x000200f8u, 0x000066fcu, 0x000500c7u, 0x00000006u, 0x0000678cu, 0x000066d8u, 0x000006cau, 0x0003003eu, 0x000066b4u, 0x0000678cu, 0x00050084u, 0x00000006u, 0x0000678eu, 0x000066cfu, 0x0000081cu, 0x00050080u, 0x00000006u, 0x00006790u, 0x0000678cu, 0x0000678eu, 0x0003003eu, 0x000066b4u, 0x00006790u, 0x0004003du, 0x00000009u, 0x00006791u, 0x00000671u, 0x0004007cu, 0x00000237u, 0x00006792u, 0x00006791u, 0x0003003eu, 0x000066f2u, 0x00006792u, 0x00050041u, 0x00000007u, 0x00006793u, 0x000066f2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00006794u, 0x00006793u, 0x000500c4u, 0x00000006u, 0x00006795u, 0x00006794u, 0x000006dcu, 0x00050041u, 0x00000007u, 0x00006796u, 0x000066f2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006797u, 0x00006796u, 0x000500c4u, 0x00000006u, 0x00006798u, 0x00006797u, 0x00000377u, 0x000500c5u, 0x00000006u, 0x00006799u, 0x00006795u, 0x00006798u, 0x00050041u, 0x00000007u, 0x0000679au, 0x000066f2u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x0000679bu, 0x0000679au, 0x000500c4u, 0x00000006u, 0x0000679cu, 0x0000679bu, 0x0000035bu, 0x000500c5u, 0x00000006u, 0x0000679du, 0x00006799u, 0x0000679cu, 0x00050041u, 0x00000007u, 0x0000679eu, 0x000066f2u, 0x0000048bu, 0x0004003du, 0x00000006u, 0x0000679fu, 0x0000679eu, 0x000500c4u, 0x00000006u, 0x000067a0u, 0x0000679fu, 0x00000374u, 0x000500c5u, 0x00000006u, 0x000067a1u, 0x0000679du, 0x000067a0u, 0x0003003eu, 0x000066f3u, 0x000067a1u, 0x00060041u, 0x0000026bu, 0x000067a4u, 0x000006d6u, 0x00000203u, 0x00006790u, 0x0003003eu, 0x000067a4u, 0x000067a1u, 0x00050084u, 0x00000006u, 0x000067a6u, 0x000003c4u, 0x00006790u, 0x00050041u, 0x00000201u, 0x000067a7u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000067a8u, 0x000067a7u, 0x000500c7u, 0x00000008u, 0x000067a9u, 0x000067a8u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000067aau, 0x000067a9u, 0x00000218u, 0x00040071u, 0x00000229u, 0x000067abu, 0x000067aau, 0x00060041u, 0x00000277u, 0x000067acu, 0x00000678u, 0x00000203u, 0x000067a6u, 0x0003003eu, 0x000067acu, 0x000067abu, 0x00050080u, 0x00000006u, 0x000067afu, 0x000067a6u, 0x00000485u, 0x00050041u, 0x00000201u, 0x000067b0u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000067b1u, 0x000067b0u, 0x000500c7u, 0x00000008u, 0x000067b2u, 0x000067b1u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000067b3u, 0x000067b2u, 0x00000218u, 0x00040071u, 0x00000229u, 0x000067b4u, 0x000067b3u, 0x00060041u, 0x00000277u, 0x000067b5u, 0x00000678u, 0x00000203u, 0x000067afu, 0x0003003eu, 0x000067b5u, 0x000067b4u, 0x000300f7u, 0x000067b6u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000067b7u, 0x000067b6u, 0x000200f8u, 0x000067b7u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x000067b9u, 0x00006790u, 0x0000084au, 0x00060041u, 0x0000026bu, 0x000067bau, 0x000006d6u, 0x00000203u, 0x000067b9u, 0x0003003eu, 0x000067bau, 0x0000084cu, 0x000200f9u, 0x000067b6u, 0x000200f8u, 0x000067b6u, 0x000200f9u, 0x000066f7u, 0x000200f8u, 0x000066fbu, 0x000500c7u, 0x00000006u, 0x0000676au, 0x000066d8u, 0x00000681u, 0x0003003eu, 0x000066b4u, 0x0000676au, 0x00050084u, 0x00000006u, 0x0000676cu, 0x000066cfu, 0x000007f5u, 0x00050080u, 0x00000006u, 0x0000676eu, 0x0000676au, 0x0000676cu, 0x0003003eu, 0x000066b4u, 0x0000676eu, 0x0004003du, 0x00000009u, 0x0000676fu, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x00006770u, 0x0000676fu, 0x0000676fu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x00006771u, 0x00006770u, 0x0003003eu, 0x000066f0u, 0x00006771u, 0x00050041u, 0x00000007u, 0x00006772u, 0x000066f0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00006773u, 0x00006772u, 0x000500c4u, 0x00000006u, 0x00006774u, 0x00006773u, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00006775u, 0x000066f0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006776u, 0x00006775u, 0x000500c5u, 0x00000006u, 0x00006777u, 0x00006774u, 0x00006776u, 0x0003003eu, 0x000066f1u, 0x00006777u, 0x000500c6u, 0x00000006u, 0x00006779u, 0x0000676eu, 0x00000485u, 0x00040071u, 0x0000022bu, 0x0000677bu, 0x00006777u, 0x00060041u, 0x00000270u, 0x0000677cu, 0x0000068du, 0x00000203u, 0x00006779u, 0x0003003eu, 0x0000677cu, 0x0000677bu, 0x0004003du, 0x00000006u, 0x0000677fu, 0x00006775u, 0x000500c7u, 0x00000006u, 0x00006780u, 0x0000677fu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006781u, 0x00006780u, 0x0000048bu, 0x00040071u, 0x00000229u, 0x00006782u, 0x00006781u, 0x00060041u, 0x00000277u, 0x00006783u, 0x00000678u, 0x00000203u, 0x0000676eu, 0x0003003eu, 0x00006783u, 0x00006782u, 0x000300f7u, 0x00006784u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006785u, 0x00006784u, 0x000200f8u, 0x00006785u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006788u, 0x00006779u, 0x00000814u, 0x00040071u, 0x0000022bu, 0x00006789u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x0000678au, 0x0000068du, 0x00000203u, 0x00006788u, 0x0003003eu, 0x0000678au, 0x00006789u, 0x000200f9u, 0x00006784u, 0x000200f8u, 0x00006784u, 0x000200f9u, 0x000066f7u, 0x000200f8u, 0x000066fau, 0x000500c7u, 0x00000006u, 0x0000673au, 0x000066d8u, 0x00000681u, 0x0003003eu, 0x000066b4u, 0x0000673au, 0x00050084u, 0x00000006u, 0x0000673cu, 0x000066cfu, 0x000007bdu, 0x00050080u, 0x00000006u, 0x0000673eu, 0x0000673au, 0x0000673cu, 0x0003003eu, 0x000066b4u, 0x0000673eu, 0x0004003du, 0x00000009u, 0x0000673fu, 0x00000671u, 0x0004007cu, 0x00000237u, 0x00006740u, 0x0000673fu, 0x0003003eu, 0x000066edu, 0x00006740u, 0x0004003du, 0x00000237u, 0x00006741u, 0x000066edu, 0x0008004fu, 0x00000353u, 0x00006742u, 0x00006741u, 0x00006741u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000353u, 0x00006744u, 0x00006742u, 0x0000eeaeu, 0x0004003du, 0x00000237u, 0x00006745u, 0x000066edu, 0x0009004fu, 0x00000237u, 0x00006746u, 0x00006745u, 0x00006744u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000066edu, 0x00006746u, 0x00050041u, 0x00000007u, 0x00006747u, 0x000066edu, 0x0000048bu, 0x0004003du, 0x00000006u, 0x00006748u, 0x00006747u, 0x000500c2u, 0x00000006u, 0x00006749u, 0x00006748u, 0x00000734u, 0x0003003eu, 0x000066eeu, 0x00006749u, 0x00050041u, 0x00000007u, 0x0000674au, 0x000066edu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000674bu, 0x0000674au, 0x000500c4u, 0x00000006u, 0x0000674cu, 0x0000674bu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x0000674du, 0x000066edu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000674eu, 0x0000674du, 0x000500c4u, 0x00000006u, 0x0000674fu, 0x0000674eu, 0x0000048bu, 0x000500c5u, 0x00000006u, 0x00006750u, 0x0000674cu, 0x0000674fu, 0x00050041u, 0x00000007u, 0x00006751u, 0x000066edu, 0x000003c4u, 0x0004003du, 0x00000006u, 0x00006752u, 0x00006751u, 0x000500c2u, 0x00000006u, 0x00006753u, 0x00006752u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x00006754u, 0x00006750u, 0x00006753u, 0x000500c2u, 0x00000006u, 0x00006756u, 0x00006749u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x00006757u, 0x00006754u, 0x00006756u, 0x0003003eu, 0x000066efu, 0x00006757u, 0x000500c6u, 0x00000006u, 0x00006759u, 0x0000673eu, 0x00000485u, 0x00040071u, 0x0000022bu, 0x0000675bu, 0x00006757u, 0x00060041u, 0x00000270u, 0x0000675cu, 0x0000068du, 0x00000203u, 0x00006759u, 0x0003003eu, 0x0000675cu, 0x0000675bu, 0x000500c7u, 0x00000006u, 0x0000675fu, 0x00006749u, 0x0000048bu, 0x00040071u, 0x00000229u, 0x00006760u, 0x0000675fu, 0x00060041u, 0x00000277u, 0x00006761u, 0x00000678u, 0x00000203u, 0x0000673eu, 0x0003003eu, 0x00006761u, 0x00006760u, 0x000300f7u, 0x00006762u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006763u, 0x00006762u, 0x000200f8u, 0x00006763u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006766u, 0x00006759u, 0x000007ecu, 0x00040071u, 0x0000022bu, 0x00006767u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00006768u, 0x0000068du, 0x00000203u, 0x00006766u, 0x0003003eu, 0x00006768u, 0x00006767u, 0x000200f9u, 0x00006762u, 0x000200f8u, 0x00006762u, 0x000200f9u, 0x000066f7u, 0x000200f8u, 0x000066f9u, 0x000500c7u, 0x00000006u, 0x0000671au, 0x000066d8u, 0x0000065eu, 0x0003003eu, 0x000066b4u, 0x0000671au, 0x00050084u, 0x00000006u, 0x0000671cu, 0x000066cfu, 0x0000065du, 0x00050080u, 0x00000006u, 0x0000671eu, 0x0000671au, 0x0000671cu, 0x0003003eu, 0x000066b4u, 0x0000671eu, 0x000500c6u, 0x00000006u, 0x00006720u, 0x0000671eu, 0x0000048bu, 0x00050041u, 0x00000201u, 0x00006721u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006722u, 0x00006721u, 0x00040071u, 0x00000229u, 0x00006723u, 0x00006722u, 0x00060041u, 0x00000277u, 0x00006724u, 0x00000669u, 0x00000203u, 0x00006720u, 0x0003003eu, 0x00006724u, 0x00006723u, 0x000500c7u, 0x00000006u, 0x00006726u, 0x0000671eu, 0x00000485u, 0x000500abu, 0x0000005du, 0x00006727u, 0x00006726u, 0x00000374u, 0x000300f7u, 0x00006728u, 0x00000000u, 0x000400fau, 0x00006727u, 0x00006729u, 0x00006728u, 0x000200f8u, 0x00006729u, 0x000500c2u, 0x00000006u, 0x0000672bu, 0x0000671eu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000672du, 0x00006721u, 0x000500c7u, 0x00000008u, 0x0000672eu, 0x0000672du, 0x00000212u, 0x00050084u, 0x00000008u, 0x0000672fu, 0x0000672eu, 0x00000218u, 0x00040071u, 0x00000229u, 0x00006730u, 0x0000672fu, 0x00060041u, 0x00000277u, 0x00006731u, 0x00000678u, 0x00000203u, 0x0000672bu, 0x0003003eu, 0x00006731u, 0x00006730u, 0x000200f9u, 0x00006728u, 0x000200f8u, 0x00006728u, 0x000300f7u, 0x00006732u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006733u, 0x00006732u, 0x000200f8u, 0x00006733u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006736u, 0x00006720u, 0x0000065du, 0x00040071u, 0x00000229u, 0x00006737u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x00006738u, 0x00000669u, 0x00000203u, 0x00006736u, 0x0003003eu, 0x00006738u, 0x00006737u, 0x000200f9u, 0x00006732u, 0x000200f8u, 0x00006732u, 0x000200f9u, 0x000066f7u, 0x000200f8u, 0x000066f8u, 0x000500c7u, 0x00000006u, 0x000066feu, 0x000066d8u, 0x0000065eu, 0x0003003eu, 0x000066b4u, 0x000066feu, 0x00050084u, 0x00000006u, 0x00006700u, 0x000066cfu, 0x0000065du, 0x00050080u, 0x00000006u, 0x00006702u, 0x000066feu, 0x00006700u, 0x0003003eu, 0x000066b4u, 0x00006702u, 0x000500c6u, 0x00000006u, 0x00006704u, 0x00006702u, 0x0000048bu, 0x00040071u, 0x00000229u, 0x00006705u, 0x00000374u, 0x00060041u, 0x00000277u, 0x00006706u, 0x00000669u, 0x00000203u, 0x00006704u, 0x0003003eu, 0x00006706u, 0x00006705u, 0x000500c7u, 0x00000006u, 0x00006708u, 0x00006702u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00006709u, 0x00006708u, 0x00000374u, 0x000300f7u, 0x0000670au, 0x00000000u, 0x000400fau, 0x00006709u, 0x0000670bu, 0x0000670au, 0x000200f8u, 0x0000670bu, 0x000500c2u, 0x00000006u, 0x0000670du, 0x00006702u, 0x00000485u, 0x00050041u, 0x00000201u, 0x0000670eu, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000670fu, 0x0000670eu, 0x00040071u, 0x00000229u, 0x00006710u, 0x0000670fu, 0x00060041u, 0x00000277u, 0x00006711u, 0x00000678u, 0x00000203u, 0x0000670du, 0x0003003eu, 0x00006711u, 0x00006710u, 0x000200f9u, 0x0000670au, 0x000200f8u, 0x0000670au, 0x000300f7u, 0x00006712u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006713u, 0x00006712u, 0x000200f8u, 0x00006713u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006716u, 0x00006704u, 0x0000065du, 0x00040071u, 0x00000229u, 0x00006717u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x00006718u, 0x00000669u, 0x00000203u, 0x00006716u, 0x0003003eu, 0x00006718u, 0x00006717u, 0x000200f9u, 0x00006712u, 0x000200f8u, 0x00006712u, 0x000200f9u, 0x000066f7u, 0x000200f8u, 0x000066f7u, 0x000200f9u, 0x000066f5u, 0x000200f8u, 0x000066f5u, 0x0004003du, 0x00000006u, 0x000066dfu, 0x000066d2u, 0x00050084u, 0x00000006u, 0x000066e0u, 0x000066c3u, 0x000066dfu, 0x00050080u, 0x00000006u, 0x000066e1u, 0x00001e96u, 0x000066e0u, 0x0004003du, 0x00000006u, 0x000066e3u, 0x000066d6u, 0x00050080u, 0x00000006u, 0x000066e4u, 0x000066e1u, 0x000066e3u, 0x0003003eu, 0x000066b3u, 0x000066e4u, 0x0003003eu, 0x000066b6u, 0x000066e4u, 0x0003003eu, 0x000066b7u, 0x000066cfu, 0x000300f7u, 0x000067bbu, 0x00000000u, 0x000400fau, 0x00000851u, 0x000067bcu, 0x000067bbu, 0x000200f8u, 0x000067bcu, 0x0004003du, 0x0000005du, 0x000067bdu, 0x00000854u, 0x000300f7u, 0x000067beu, 0x00000000u, 0x000400fau, 0x000067bdu, 0x000067bfu, 0x000067beu, 0x000200f8u, 0x000067bfu, 0x000500c7u, 0x00000006u, 0x000067c1u, 0x000066e4u, 0x00000681u, 0x0003003eu, 0x000066b6u, 0x000067c1u, 0x00050084u, 0x00000006u, 0x000067c3u, 0x000066cfu, 0x0000085bu, 0x00050080u, 0x00000006u, 0x000067c5u, 0x000067c1u, 0x000067c3u, 0x0003003eu, 0x000066b6u, 0x000067c5u, 0x000500c6u, 0x00000006u, 0x000067c7u, 0x000067c5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000067c8u, 0x00000705u, 0x000500c4u, 0x00000008u, 0x000067c9u, 0x000067c8u, 0x00000215u, 0x0004003du, 0x00000008u, 0x000067cau, 0x000006e7u, 0x000500c3u, 0x00000008u, 0x000067cbu, 0x000067cau, 0x00000215u, 0x000500c5u, 0x00000008u, 0x000067ccu, 0x000067c9u, 0x000067cbu, 0x00040071u, 0x0000022bu, 0x000067cdu, 0x000067ccu, 0x00060041u, 0x00000270u, 0x000067ceu, 0x0000068du, 0x00000203u, 0x000067c7u, 0x0003003eu, 0x000067ceu, 0x000067cdu, 0x0004003du, 0x00000008u, 0x000067d0u, 0x000006e7u, 0x000500c7u, 0x00000008u, 0x000067d1u, 0x000067d0u, 0x00000218u, 0x00040071u, 0x00000229u, 0x000067d2u, 0x000067d1u, 0x00060041u, 0x00000277u, 0x000067d3u, 0x00000678u, 0x00000203u, 0x000067c5u, 0x0003003eu, 0x000067d3u, 0x000067d2u, 0x000300f7u, 0x000067d4u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000067d5u, 0x000067d4u, 0x000200f8u, 0x000067d5u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x000067d8u, 0x000067c7u, 0x00000871u, 0x00040071u, 0x0000022bu, 0x000067d9u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x000067dau, 0x0000068du, 0x00000203u, 0x000067d8u, 0x0003003eu, 0x000067dau, 0x000067d9u, 0x000200f9u, 0x000067d4u, 0x000200f8u, 0x000067d4u, 0x000200f9u, 0x000067beu, 0x000200f8u, 0x000067beu, 0x000200f9u, 0x000067bbu, 0x000200f8u, 0x000067bbu, 0x000300f7u, 0x000066e8u, 0x00000000u, 0x000400fau, 0x00000919u, 0x000066e9u, 0x000066e8u, 0x000200f8u, 0x000066e9u, 0x0004003du, 0x000000a2u, 0x000066eau, 0x00001ef7u, 0x0003003eu, 0x000066b8u, 0x000066eau, 0x0003003eu, 0x000066b9u, 0x000066c3u, 0x00050041u, 0x00000007u, 0x000067deu, 0x000066b8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000067dfu, 0x000067deu, 0x000500c2u, 0x00000006u, 0x000067e0u, 0x000067dfu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000067e2u, 0x000066c3u, 0x0000048bu, 0x000500c2u, 0x00000006u, 0x000067e3u, 0x000067e2u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000067e4u, 0x000067e0u, 0x000067e3u, 0x00050041u, 0x00000007u, 0x000067e5u, 0x000066b8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000067e6u, 0x000067e5u, 0x000500c2u, 0x00000006u, 0x000067e7u, 0x000067e6u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000067e8u, 0x000067e4u, 0x000067e7u, 0x0003003eu, 0x000067dbu, 0x000067e8u, 0x0004003du, 0x000000a2u, 0x000067e9u, 0x000066b8u, 0x000500c7u, 0x000000a2u, 0x000067ebu, 0x000067e9u, 0x0000eeafu, 0x0003003eu, 0x000067dcu, 0x000067ebu, 0x0004003du, 0x0000005du, 0x000067ecu, 0x00000752u, 0x000600a9u, 0x00000006u, 0x000067edu, 0x000067ecu, 0x00000485u, 0x00000374u, 0x0004003du, 0x0000005du, 0x000067eeu, 0x00000854u, 0x000600a9u, 0x00000006u, 0x000067efu, 0x000067eeu, 0x00000485u, 0x00000374u, 0x00050084u, 0x00000006u, 0x000067f0u, 0x000003c4u, 0x000067efu, 0x00050080u, 0x00000006u, 0x000067f1u, 0x000067edu, 0x000067f0u, 0x0003003eu, 0x000067ddu, 0x000067f1u, 0x00050041u, 0x00000007u, 0x000067f2u, 0x000067dcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000067f3u, 0x000067f2u, 0x00050041u, 0x00000007u, 0x000067f4u, 0x000067dcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000067f5u, 0x000067f4u, 0x00050084u, 0x00000006u, 0x000067f6u, 0x000067f5u, 0x00000701u, 0x00050080u, 0x00000006u, 0x000067f7u, 0x000067f3u, 0x000067f6u, 0x00050084u, 0x00000006u, 0x000067f8u, 0x000003c4u, 0x000067f7u, 0x000500c4u, 0x00000006u, 0x000067fau, 0x000067f1u, 0x000067f8u, 0x0003003eu, 0x000067ddu, 0x000067fau, 0x000500abu, 0x0000005du, 0x000067fcu, 0x000067fau, 0x00000374u, 0x000300f7u, 0x000067fdu, 0x00000000u, 0x000400fau, 0x000067fcu, 0x000067feu, 0x000067fdu, 0x000200f8u, 0x000067feu, 0x00050080u, 0x00000006u, 0x00006800u, 0x000008d9u, 0x000067e8u, 0x00060041u, 0x0000026bu, 0x00006801u, 0x000006d6u, 0x00000203u, 0x00006800u, 0x000700f1u, 0x00000006u, 0x00006803u, 0x00006801u, 0x00000485u, 0x00000374u, 0x000067fau, 0x000200f9u, 0x000067fdu, 0x000200f8u, 0x000067fdu, 0x000200f9u, 0x000066e8u, 0x000200f8u, 0x000066e8u, 0x000200f9u, 0x000066c0u, 0x000200f8u, 0x000066c0u, 0x0003003eu, 0x00001f1bu, 0x0000055eu, 0x000200f9u, 0x00001f19u, 0x000200f8u, 0x00001f19u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x0000005cu, 0x000078a8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078a1u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000209u, 0x0000000cu, 0x00060041u, 0x0000020au, 0x0000020bu, 0x00000208u, 0x00000203u, 0x00000209u, 0x0004003du, 0x00000204u, 0x0000020cu, 0x0000020bu, 0x00050051u, 0x00000009u, 0x0000020fu, 0x0000020cu, 0x00000000u, 0x0003003eu, 0x000078a1u, 0x0000020fu, 0x00050051u, 0x00000009u, 0x00000211u, 0x0000020cu, 0x00000001u, 0x0003003eu, 0x000078a2u, 0x00000211u, 0x00050051u, 0x00000009u, 0x00000214u, 0x0000020cu, 0x00000002u, 0x0003003eu, 0x000078a3u, 0x00000214u, 0x00050051u, 0x00000009u, 0x00000217u, 0x0000020cu, 0x00000003u, 0x0003003eu, 0x000078a4u, 0x00000217u, 0x00050051u, 0x00000009u, 0x0000021au, 0x0000020cu, 0x00000004u, 0x0003003eu, 0x000078a5u, 0x0000021au, 0x00050051u, 0x00000009u, 0x0000021du, 0x0000020cu, 0x00000005u, 0x0003003eu, 0x000078a6u, 0x0000021du, 0x00050051u, 0x00000009u, 0x00000220u, 0x0000020cu, 0x00000006u, 0x0003003eu, 0x000078a7u, 0x00000220u, 0x00050051u, 0x00000009u, 0x00000223u, 0x0000020cu, 0x00000007u, 0x0003003eu, 0x000078a8u, 0x00000223u, 0x000b0050u, 0x0000000au, 0x000078b1u, 0x0000020fu, 0x00000211u, 0x00000214u, 0x00000217u, 0x0000021au, 0x0000021du, 0x00000220u, 0x00000223u, 0x000200feu, 0x000078b1u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000012u, 0x00000000u, 0x00000010u, 0x00030037u, 0x00000007u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003du, 0x00000006u, 0x00000233u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000235u, 0x00000232u, 0x00000203u, 0x00000233u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00000236u, 0x00000235u, 0x00040071u, 0x00000237u, 0x00000238u, 0x00000236u, 0x0004007cu, 0x00000009u, 0x00000239u, 0x00000238u, 0x0004003du, 0x00000006u, 0x0000023au, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000023bu, 0x00000232u, 0x00000203u, 0x0000023au, 0x00000212u, 0x0004003du, 0x0000022au, 0x0000023cu, 0x0000023bu, 0x00040071u, 0x00000237u, 0x0000023du, 0x0000023cu, 0x0004007cu, 0x00000009u, 0x0000023eu, 0x0000023du, 0x0004003du, 0x00000006u, 0x0000023fu, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000240u, 0x00000232u, 0x00000203u, 0x0000023fu, 0x00000215u, 0x0004003du, 0x0000022au, 0x00000241u, 0x00000240u, 0x00040071u, 0x00000237u, 0x00000242u, 0x00000241u, 0x0004007cu, 0x00000009u, 0x00000243u, 0x00000242u, 0x0004003du, 0x00000006u, 0x00000244u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000245u, 0x00000232u, 0x00000203u, 0x00000244u, 0x00000218u, 0x0004003du, 0x0000022au, 0x00000246u, 0x00000245u, 0x00040071u, 0x00000237u, 0x00000247u, 0x00000246u, 0x0004007cu, 0x00000009u, 0x00000248u, 0x00000247u, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000024au, 0x00000232u, 0x00000203u, 0x00000249u, 0x0000021bu, 0x0004003du, 0x0000022au, 0x0000024bu, 0x0000024au, 0x00040071u, 0x00000237u, 0x0000024cu, 0x0000024bu, 0x0004007cu, 0x00000009u, 0x0000024du, 0x0000024cu, 0x0004003du, 0x00000006u, 0x0000024eu, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000024fu, 0x00000232u, 0x00000203u, 0x0000024eu, 0x0000021eu, 0x0004003du, 0x0000022au, 0x00000250u, 0x0000024fu, 0x00040071u, 0x00000237u, 0x00000251u, 0x00000250u, 0x0004007cu, 0x00000009u, 0x00000252u, 0x00000251u, 0x0004003du, 0x00000006u, 0x00000253u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000254u, 0x00000232u, 0x00000203u, 0x00000253u, 0x00000221u, 0x0004003du, 0x0000022au, 0x00000255u, 0x00000254u, 0x00040071u, 0x00000237u, 0x00000256u, 0x00000255u, 0x0004007cu, 0x00000009u, 0x00000257u, 0x00000256u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000259u, 0x00000232u, 0x00000203u, 0x00000258u, 0x00000224u, 0x0004003du, 0x0000022au, 0x0000025au, 0x00000259u, 0x00040071u, 0x00000237u, 0x0000025bu, 0x0000025au, 0x0004007cu, 0x00000009u, 0x0000025cu, 0x0000025bu, 0x0004003du, 0x00000006u, 0x0000025du, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000025fu, 0x00000232u, 0x00000203u, 0x0000025du, 0x0000025eu, 0x0004003du, 0x0000022au, 0x00000260u, 0x0000025fu, 0x00040071u, 0x00000237u, 0x00000261u, 0x00000260u, 0x0004007cu, 0x00000009u, 0x00000262u, 0x00000261u, 0x0004003du, 0x00000006u, 0x00000263u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000265u, 0x00000232u, 0x00000203u, 0x00000263u, 0x00000264u, 0x0004003du, 0x0000022au, 0x00000266u, 0x00000265u, 0x00040071u, 0x00000237u, 0x00000267u, 0x00000266u, 0x0004007cu, 0x00000009u, 0x00000268u, 0x00000267u, 0x0004003du, 0x00000006u, 0x00000269u, 0x00000011u, 0x00070041u, 0x0000026bu, 0x0000026cu, 0x00000232u, 0x00000203u, 0x00000269u, 0x0000026au, 0x0004003du, 0x00000006u, 0x0000026du, 0x0000026cu, 0x0004003du, 0x00000006u, 0x0000026eu, 0x00000011u, 0x00070041u, 0x00000270u, 0x00000271u, 0x00000232u, 0x00000203u, 0x0000026eu, 0x0000026fu, 0x0004003du, 0x0000022bu, 0x00000272u, 0x00000271u, 0x00040071u, 0x00000006u, 0x00000273u, 0x00000272u, 0x0004007cu, 0x00000008u, 0x00000274u, 0x00000273u, 0x0004003du, 0x00000006u, 0x00000275u, 0x00000011u, 0x00070041u, 0x00000277u, 0x00000278u, 0x00000232u, 0x00000203u, 0x00000275u, 0x00000276u, 0x0004003du, 0x00000229u, 0x00000279u, 0x00000278u, 0x00040071u, 0x00000006u, 0x0000027au, 0x00000279u, 0x0004007cu, 0x00000008u, 0x0000027bu, 0x0000027au, 0x0004003du, 0x00000006u, 0x0000027cu, 0x00000011u, 0x00070041u, 0x00000277u, 0x0000027eu, 0x00000232u, 0x00000203u, 0x0000027cu, 0x0000027du, 0x0004003du, 0x00000229u, 0x0000027fu, 0x0000027eu, 0x00040071u, 0x00000006u, 0x00000280u, 0x0000027fu, 0x0004007cu, 0x00000008u, 0x00000281u, 0x00000280u, 0x0004003du, 0x00000006u, 0x00000282u, 0x00000011u, 0x00070041u, 0x00000284u, 0x00000285u, 0x00000232u, 0x00000203u, 0x00000282u, 0x00000283u, 0x0004003du, 0x0000022du, 0x00000286u, 0x00000285u, 0x00040072u, 0x00000009u, 0x00000287u, 0x00000286u, 0x00120050u, 0x0000000fu, 0x00000288u, 0x00000239u, 0x0000023eu, 0x00000243u, 0x00000248u, 0x0000024du, 0x00000252u, 0x00000257u, 0x0000025cu, 0x00000262u, 0x00000268u, 0x0000026du, 0x00000274u, 0x0000027bu, 0x00000281u, 0x00000287u, 0x000200feu, 0x00000288u, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003du, 0x00000006u, 0x00000290u, 0x00000016u, 0x00070041u, 0x00000234u, 0x00000291u, 0x0000028fu, 0x00000203u, 0x00000290u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00000292u, 0x00000291u, 0x00040071u, 0x00000237u, 0x00000293u, 0x00000292u, 0x0004007cu, 0x00000009u, 0x00000294u, 0x00000293u, 0x0004003du, 0x00000006u, 0x00000295u, 0x00000016u, 0x00070041u, 0x00000234u, 0x00000296u, 0x0000028fu, 0x00000203u, 0x00000295u, 0x00000212u, 0x0004003du, 0x0000022au, 0x00000297u, 0x00000296u, 0x00040071u, 0x00000237u, 0x00000298u, 0x00000297u, 0x0004007cu, 0x00000009u, 0x00000299u, 0x00000298u, 0x0004003du, 0x00000006u, 0x0000029au, 0x00000016u, 0x00070041u, 0x00000234u, 0x0000029bu, 0x0000028fu, 0x00000203u, 0x0000029au, 0x00000215u, 0x0004003du, 0x0000022au, 0x0000029cu, 0x0000029bu, 0x00040071u, 0x00000237u, 0x0000029du, 0x0000029cu, 0x0004007cu, 0x00000009u, 0x0000029eu, 0x0000029du, 0x0004003du, 0x00000006u, 0x0000029fu, 0x00000016u, 0x00070041u, 0x00000234u, 0x000002a0u, 0x0000028fu, 0x00000203u, 0x0000029fu, 0x00000218u, 0x0004003du, 0x0000022au, 0x000002a1u, 0x000002a0u, 0x00040071u, 0x00000237u, 0x000002a2u, 0x000002a1u, 0x0004007cu, 0x00000009u, 0x000002a3u, 0x000002a2u, 0x0004003du, 0x00000006u, 0x000002a4u, 0x00000016u, 0x00070041u, 0x0000026bu, 0x000002a5u, 0x0000028fu, 0x00000203u, 0x000002a4u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000002a6u, 0x000002a5u, 0x0004003du, 0x00000006u, 0x000002a7u, 0x00000016u, 0x00070041u, 0x000002a8u, 0x000002a9u, 0x0000028fu, 0x00000203u, 0x000002a7u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x000002aau, 0x000002a9u, 0x000b0050u, 0x00000014u, 0x000002abu, 0x00000294u, 0x00000299u, 0x0000029eu, 0x000002a3u, 0x000002a6u, 0x000002aau, 0x00000203u, 0x00000203u, 0x000200feu, 0x000002abu, 0x00010038u, 0x00050036u, 0x00000019u, 0x0000001cu, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000007u, 0x0000001bu, 0x000200f8u, 0x0000001du, 0x0004003du, 0x00000006u, 0x000002b3u, 0x0000001bu, 0x00070041u, 0x00000234u, 0x000002b4u, 0x000002b2u, 0x00000203u, 0x000002b3u, 0x00000203u, 0x0004003du, 0x0000022au, 0x000002b5u, 0x000002b4u, 0x00040071u, 0x00000237u, 0x000002b6u, 0x000002b5u, 0x0004007cu, 0x00000009u, 0x000002b7u, 0x000002b6u, 0x0004003du, 0x00000006u, 0x000002b8u, 0x0000001bu, 0x00070041u, 0x00000234u, 0x000002b9u, 0x000002b2u, 0x00000203u, 0x000002b8u, 0x00000212u, 0x0004003du, 0x0000022au, 0x000002bau, 0x000002b9u, 0x00040071u, 0x00000237u, 0x000002bbu, 0x000002bau, 0x0004007cu, 0x00000009u, 0x000002bcu, 0x000002bbu, 0x0004003du, 0x00000006u, 0x000002bdu, 0x0000001bu, 0x00070041u, 0x0000026bu, 0x000002beu, 0x000002b2u, 0x00000203u, 0x000002bdu, 0x00000215u, 0x0004003du, 0x00000006u, 0x000002bfu, 0x000002beu, 0x0004003du, 0x00000006u, 0x000002c0u, 0x0000001bu, 0x00070041u, 0x00000277u, 0x000002c1u, 0x000002b2u, 0x00000203u, 0x000002c0u, 0x00000218u, 0x0004003du, 0x00000229u, 0x000002c2u, 0x000002c1u, 0x00040071u, 0x00000006u, 0x000002c3u, 0x000002c2u, 0x0004007cu, 0x00000008u, 0x000002c4u, 0x000002c3u, 0x0004003du, 0x00000006u, 0x000002c5u, 0x0000001bu, 0x00070041u, 0x00000277u, 0x000002c6u, 0x000002b2u, 0x00000203u, 0x000002c5u, 0x0000021bu, 0x0004003du, 0x00000229u, 0x000002c7u, 0x000002c6u, 0x00040071u, 0x00000006u, 0x000002c8u, 0x000002c7u, 0x0004007cu, 0x00000008u, 0x000002c9u, 0x000002c8u, 0x000a0050u, 0x00000019u, 0x000002cau, 0x000002b7u, 0x000002bcu, 0x000002bfu, 0x000002c4u, 0x000002c9u, 0x00000203u, 0x00000203u, 0x000200feu, 0x000002cau, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000021u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003du, 0x00000006u, 0x000002d2u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002d3u, 0x000002d1u, 0x00000203u, 0x000002d2u, 0x00000203u, 0x0004003du, 0x00000006u, 0x000002d4u, 0x000002d3u, 0x0004003du, 0x00000006u, 0x000002d5u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002d6u, 0x000002d1u, 0x00000203u, 0x000002d5u, 0x00000212u, 0x0004003du, 0x00000006u, 0x000002d7u, 0x000002d6u, 0x0004003du, 0x00000006u, 0x000002d8u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002d9u, 0x000002d1u, 0x00000203u, 0x000002d8u, 0x00000215u, 0x0004003du, 0x00000006u, 0x000002dau, 0x000002d9u, 0x0004003du, 0x00000006u, 0x000002dbu, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002dcu, 0x000002d1u, 0x00000203u, 0x000002dbu, 0x00000218u, 0x0004003du, 0x00000006u, 0x000002ddu, 0x000002dcu, 0x0004003du, 0x00000006u, 0x000002deu, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002dfu, 0x000002d1u, 0x00000203u, 0x000002deu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000002e0u, 0x000002dfu, 0x0004003du, 0x00000006u, 0x000002e1u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002e2u, 0x000002d1u, 0x00000203u, 0x000002e1u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000002e3u, 0x000002e2u, 0x0004003du, 0x00000006u, 0x000002e4u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002e5u, 0x000002d1u, 0x00000203u, 0x000002e4u, 0x00000221u, 0x0004003du, 0x00000229u, 0x000002e6u, 0x000002e5u, 0x00040071u, 0x00000006u, 0x000002e7u, 0x000002e6u, 0x0004007cu, 0x00000008u, 0x000002e8u, 0x000002e7u, 0x0004003du, 0x00000006u, 0x000002e9u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002eau, 0x000002d1u, 0x00000203u, 0x000002e9u, 0x00000224u, 0x0004003du, 0x00000229u, 0x000002ebu, 0x000002eau, 0x00040071u, 0x00000006u, 0x000002ecu, 0x000002ebu, 0x0004007cu, 0x00000008u, 0x000002edu, 0x000002ecu, 0x0004003du, 0x00000006u, 0x000002eeu, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002efu, 0x000002d1u, 0x00000203u, 0x000002eeu, 0x0000025eu, 0x0004003du, 0x00000229u, 0x000002f0u, 0x000002efu, 0x00040071u, 0x00000006u, 0x000002f1u, 0x000002f0u, 0x0004007cu, 0x00000008u, 0x000002f2u, 0x000002f1u, 0x0004003du, 0x00000006u, 0x000002f3u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002f4u, 0x000002d1u, 0x00000203u, 0x000002f3u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000002f5u, 0x000002f4u, 0x00040071u, 0x00000006u, 0x000002f6u, 0x000002f5u, 0x0004007cu, 0x00000008u, 0x000002f7u, 0x000002f6u, 0x0004003du, 0x00000006u, 0x000002f8u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002f9u, 0x000002d1u, 0x00000203u, 0x000002f8u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000002fau, 0x000002f9u, 0x00040071u, 0x00000006u, 0x000002fbu, 0x000002fau, 0x0004007cu, 0x00000008u, 0x000002fcu, 0x000002fbu, 0x0004003du, 0x00000006u, 0x000002fdu, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002feu, 0x000002d1u, 0x00000203u, 0x000002fdu, 0x0000026fu, 0x0004003du, 0x00000229u, 0x000002ffu, 0x000002feu, 0x00040071u, 0x00000006u, 0x00000300u, 0x000002ffu, 0x0004007cu, 0x00000008u, 0x00000301u, 0x00000300u, 0x0004003du, 0x00000006u, 0x00000302u, 0x00000020u, 0x00070041u, 0x00000277u, 0x00000303u, 0x000002d1u, 0x00000203u, 0x00000302u, 0x00000276u, 0x0004003du, 0x00000229u, 0x00000304u, 0x00000303u, 0x00040071u, 0x00000006u, 0x00000305u, 0x00000304u, 0x0004007cu, 0x00000008u, 0x00000306u, 0x00000305u, 0x0004003du, 0x00000006u, 0x00000307u, 0x00000020u, 0x00070041u, 0x00000277u, 0x00000308u, 0x000002d1u, 0x00000203u, 0x00000307u, 0x0000027du, 0x0004003du, 0x00000229u, 0x00000309u, 0x00000308u, 0x00040071u, 0x00000006u, 0x0000030au, 0x00000309u, 0x0004007cu, 0x00000008u, 0x0000030bu, 0x0000030au, 0x00110050u, 0x0000001eu, 0x0000030cu, 0x000002d4u, 0x000002d7u, 0x000002dau, 0x000002ddu, 0x000002e0u, 0x000002e3u, 0x000002e8u, 0x000002edu, 0x000002f2u, 0x000002f7u, 0x000002fcu, 0x00000301u, 0x00000306u, 0x0000030bu, 0x000200feu, 0x0000030cu, 0x00010038u, 0x00050036u, 0x00000023u, 0x00000026u, 0x00000000u, 0x00000024u, 0x00030037u, 0x00000007u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000315u, 0x00000025u, 0x00070041u, 0x00000316u, 0x00000317u, 0x00000314u, 0x00000203u, 0x00000315u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00000318u, 0x00000317u, 0x0004003du, 0x00000006u, 0x00000319u, 0x00000025u, 0x00070041u, 0x00000316u, 0x0000031au, 0x00000314u, 0x00000203u, 0x00000319u, 0x00000212u, 0x0004003du, 0x00000009u, 0x0000031bu, 0x0000031au, 0x0004003du, 0x00000006u, 0x0000031cu, 0x00000025u, 0x00070041u, 0x0000031du, 0x0000031eu, 0x00000314u, 0x00000203u, 0x0000031cu, 0x00000215u, 0x0004003du, 0x0000030fu, 0x0000031fu, 0x0000031eu, 0x00040071u, 0x00000237u, 0x00000320u, 0x0000031fu, 0x0004007cu, 0x00000009u, 0x00000321u, 0x00000320u, 0x0004003du, 0x00000006u, 0x00000322u, 0x00000025u, 0x00070041u, 0x0000031du, 0x00000323u, 0x00000314u, 0x00000203u, 0x00000322u, 0x00000218u, 0x0004003du, 0x0000030fu, 0x00000324u, 0x00000323u, 0x00040071u, 0x00000237u, 0x00000325u, 0x00000324u, 0x0004007cu, 0x00000009u, 0x00000326u, 0x00000325u, 0x0004003du, 0x00000006u, 0x00000327u, 0x00000025u, 0x00070041u, 0x000002a8u, 0x00000328u, 0x00000314u, 0x00000203u, 0x00000327u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x00000329u, 0x00000328u, 0x0004003du, 0x00000006u, 0x0000032au, 0x00000025u, 0x00070041u, 0x000002a8u, 0x0000032bu, 0x00000314u, 0x00000203u, 0x0000032au, 0x0000021eu, 0x0004003du, 0x00000008u, 0x0000032cu, 0x0000032bu, 0x0004003du, 0x00000006u, 0x0000032du, 0x00000025u, 0x00070041u, 0x000002a8u, 0x0000032eu, 0x00000314u, 0x00000203u, 0x0000032du, 0x00000221u, 0x0004003du, 0x00000008u, 0x0000032fu, 0x0000032eu, 0x0004003du, 0x00000006u, 0x00000330u, 0x00000025u, 0x00070041u, 0x00000331u, 0x00000332u, 0x00000314u, 0x00000203u, 0x00000330u, 0x00000224u, 0x0004003du, 0x0000022cu, 0x00000333u, 0x00000332u, 0x00040072u, 0x00000008u, 0x00000334u, 0x00000333u, 0x0004003du, 0x00000006u, 0x00000335u, 0x00000025u, 0x00070041u, 0x00000270u, 0x00000336u, 0x00000314u, 0x00000203u, 0x00000335u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x00000337u, 0x00000336u, 0x00040071u, 0x00000006u, 0x00000338u, 0x00000337u, 0x0004007cu, 0x00000008u, 0x00000339u, 0x00000338u, 0x000c0050u, 0x00000023u, 0x0000033au, 0x00000318u, 0x0000031bu, 0x00000321u, 0x00000326u, 0x00000329u, 0x0000032cu, 0x0000032fu, 0x00000334u, 0x00000339u, 0x000200feu, 0x0000033au, 0x00010038u, 0x00050036u, 0x00000028u, 0x0000002bu, 0x00000000u, 0x00000029u, 0x00030037u, 0x00000007u, 0x0000002au, 0x000200f8u, 0x0000002cu, 0x0004003bu, 0x0000003eu, 0x000078b5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078b4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078b3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078b2u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000342u, 0x0000002au, 0x00060041u, 0x00000343u, 0x00000344u, 0x00000341u, 0x00000203u, 0x00000342u, 0x0004003du, 0x0000033du, 0x00000345u, 0x00000344u, 0x00050051u, 0x00000008u, 0x00000348u, 0x00000345u, 0x00000000u, 0x0003003eu, 0x000078b2u, 0x00000348u, 0x00050051u, 0x00000008u, 0x0000034au, 0x00000345u, 0x00000001u, 0x0003003eu, 0x000078b3u, 0x0000034au, 0x00050051u, 0x00000008u, 0x0000034cu, 0x00000345u, 0x00000002u, 0x0003003eu, 0x000078b4u, 0x0000034cu, 0x00050051u, 0x00000008u, 0x0000034eu, 0x00000345u, 0x00000003u, 0x0003003eu, 0x000078b5u, 0x0000034eu, 0x00070050u, 0x00000028u, 0x000078bau, 0x00000348u, 0x0000034au, 0x0000034cu, 0x0000034eu, 0x000200feu, 0x000078bau, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000031u, 0x00000000u, 0x0000002du, 0x00030037u, 0x00000007u, 0x0000002eu, 0x00030037u, 0x00000007u, 0x0000002fu, 0x00030037u, 0x00000007u, 0x00000030u, 0x000200f8u, 0x00000032u, 0x0004003bu, 0x00000354u, 0x00000355u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000356u, 0x0000002eu, 0x0004003du, 0x00000006u, 0x00000357u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x00000358u, 0x00000030u, 0x00060050u, 0x00000353u, 0x00000359u, 0x00000356u, 0x00000357u, 0x00000358u, 0x0003003eu, 0x00000355u, 0x00000359u, 0x0004003du, 0x00000353u, 0x0000035au, 0x00000355u, 0x000500c2u, 0x00000353u, 0x0000035du, 0x0000035au, 0x0000eeb0u, 0x0004003du, 0x00000353u, 0x0000035eu, 0x00000355u, 0x0008004fu, 0x00000353u, 0x0000035fu, 0x0000035eu, 0x0000035eu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00000360u, 0x0000035du, 0x0000035fu, 0x00050084u, 0x00000353u, 0x00000363u, 0x00000360u, 0x0000eeb1u, 0x0003003eu, 0x00000355u, 0x00000363u, 0x0004003du, 0x00000353u, 0x00000364u, 0x00000355u, 0x000500c2u, 0x00000353u, 0x00000366u, 0x00000364u, 0x0000eeb0u, 0x0004003du, 0x00000353u, 0x00000367u, 0x00000355u, 0x0008004fu, 0x00000353u, 0x00000368u, 0x00000367u, 0x00000367u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00000369u, 0x00000366u, 0x00000368u, 0x00050084u, 0x00000353u, 0x0000036bu, 0x00000369u, 0x0000eeb1u, 0x0003003eu, 0x00000355u, 0x0000036bu, 0x0004003du, 0x00000353u, 0x0000036cu, 0x00000355u, 0x000500c2u, 0x00000353u, 0x0000036eu, 0x0000036cu, 0x0000eeb0u, 0x0004003du, 0x00000353u, 0x0000036fu, 0x00000355u, 0x0008004fu, 0x00000353u, 0x00000370u, 0x0000036fu, 0x0000036fu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00000371u, 0x0000036eu, 0x00000370u, 0x00050084u, 0x00000353u, 0x00000373u, 0x00000371u, 0x0000eeb1u, 0x0003003eu, 0x00000355u, 0x00000373u, 0x00050041u, 0x00000007u, 0x00000375u, 0x00000355u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000376u, 0x00000375u, 0x000500c2u, 0x00000006u, 0x00000378u, 0x00000376u, 0x00000377u, 0x0004007cu, 0x00000008u, 0x00000379u, 0x00000378u, 0x0003003eu, 0x00000202u, 0x00000379u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000034u, 0x00000000u, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003du, 0x00000008u, 0x0000037au, 0x00000202u, 0x000500c7u, 0x00000008u, 0x0000037bu, 0x0000037au, 0x00000224u, 0x000500c4u, 0x00000008u, 0x0000037cu, 0x0000037bu, 0x00000221u, 0x000500c5u, 0x00000008u, 0x0000037eu, 0x0000037cu, 0x0000037du, 0x000200feu, 0x0000037eu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000036u, 0x00000000u, 0x00000033u, 0x000200f8u, 0x00000037u, 0x0004003du, 0x00000008u, 0x00000381u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00000382u, 0x00000381u, 0x00000224u, 0x000200feu, 0x00000382u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000038u, 0x00000000u, 0x00000033u, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000008u, 0x00000385u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00000387u, 0x00000385u, 0x00000386u, 0x000200feu, 0x00000387u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003au, 0x00000000u, 0x00000033u, 0x000200f8u, 0x0000003bu, 0x0004003du, 0x00000008u, 0x0000038au, 0x00000202u, 0x000500c7u, 0x00000008u, 0x0000038cu, 0x0000038au, 0x0000038bu, 0x000200feu, 0x0000038cu, 0x00010038u, 0x00050036u, 0x0000003cu, 0x00000042u, 0x00000000u, 0x0000003fu, 0x00030037u, 0x0000003du, 0x00000040u, 0x00030037u, 0x0000003eu, 0x00000041u, 0x000200f8u, 0x00000043u, 0x0004003bu, 0x0000003du, 0x0000038fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000396u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000003a4u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000003adu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000390u, 0x00000041u, 0x00060050u, 0x0000003cu, 0x00000391u, 0x00000390u, 0x00000390u, 0x00000390u, 0x000500c3u, 0x0000003cu, 0x00000393u, 0x00000391u, 0x00000392u, 0x000500c7u, 0x0000003cu, 0x00000395u, 0x00000393u, 0x0000eec6u, 0x0003003eu, 0x0000038fu, 0x00000395u, 0x0004003du, 0x0000003cu, 0x00000397u, 0x00000040u, 0x000500c7u, 0x0000003cu, 0x0000039au, 0x00000397u, 0x0000eec5u, 0x00050080u, 0x0000003cu, 0x0000039cu, 0x0000039au, 0x0000eec7u, 0x0004003du, 0x0000003cu, 0x0000039eu, 0x00000040u, 0x000500adu, 0x000003a1u, 0x000003a2u, 0x0000039eu, 0x000003a0u, 0x000600a9u, 0x0000003cu, 0x000003a3u, 0x000003a2u, 0x0000039du, 0x0000039cu, 0x0003003eu, 0x00000396u, 0x000003a3u, 0x0004003du, 0x0000003cu, 0x000003a6u, 0x00000040u, 0x000500c7u, 0x0000003cu, 0x000003a8u, 0x000003a6u, 0x0000eec6u, 0x00050082u, 0x0000003cu, 0x000003a9u, 0x00000395u, 0x000003a8u, 0x000500c3u, 0x0000003cu, 0x000003acu, 0x000003a9u, 0x0000eec8u, 0x0003003eu, 0x000003a4u, 0x000003acu, 0x0004003du, 0x0000003cu, 0x000003afu, 0x00000040u, 0x00050082u, 0x0000003cu, 0x000003b0u, 0x000003a3u, 0x000003afu, 0x0003003eu, 0x000003adu, 0x000003b0u, 0x0004003du, 0x0000003cu, 0x000003b1u, 0x00000040u, 0x000500c7u, 0x0000003cu, 0x000003b4u, 0x000003b0u, 0x000003acu, 0x00050080u, 0x0000003cu, 0x000003b5u, 0x000003b1u, 0x000003b4u, 0x0003003eu, 0x00000396u, 0x000003b5u, 0x000500c7u, 0x0000003cu, 0x000003b8u, 0x000003b5u, 0x0000039du, 0x00050051u, 0x00000008u, 0x000003b9u, 0x000003b8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003bau, 0x000003b8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003bbu, 0x000003b8u, 0x00000002u, 0x000200feu, 0x000003b8u, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000004bu, 0x00000000u, 0x00000044u, 0x00030037u, 0x0000003eu, 0x00000045u, 0x00030037u, 0x0000003eu, 0x00000046u, 0x00030037u, 0x0000003eu, 0x00000047u, 0x00030037u, 0x0000003eu, 0x00000048u, 0x00030037u, 0x0000003eu, 0x00000049u, 0x00030037u, 0x0000003eu, 0x0000004au, 0x000200f8u, 0x0000004cu, 0x0004003bu, 0x000003d0u, 0x000003d1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000003eau, 0x00000007u, 0x0004003bu, 0x000003d0u, 0x000003f5u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000003bfu, 0x00000047u, 0x000500b1u, 0x0000005du, 0x000003c0u, 0x000003bfu, 0x00000215u, 0x000300f7u, 0x000003c2u, 0x00000000u, 0x000400fau, 0x000003c0u, 0x000003c1u, 0x000003d6u, 0x000200f8u, 0x000003c1u, 0x0004003du, 0x00000008u, 0x000003c9u, 0x00000047u, 0x0004003du, 0x00000008u, 0x000003cau, 0x00000046u, 0x000500c7u, 0x00000008u, 0x000003cbu, 0x000003cau, 0x00000218u, 0x00050084u, 0x00000008u, 0x000003ccu, 0x000003cbu, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000003cdu, 0x00000045u, 0x000500c7u, 0x00000008u, 0x000003ceu, 0x000003cdu, 0x00000218u, 0x00050080u, 0x00000008u, 0x000003cfu, 0x000003ccu, 0x000003ceu, 0x0003003eu, 0x000003d1u, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x000003d2u, 0x000003d1u, 0x000003c9u, 0x000003cfu, 0x0004003du, 0x00000008u, 0x000003d3u, 0x000003d2u, 0x00050084u, 0x00000008u, 0x000003d5u, 0x000003d3u, 0x000003d4u, 0x0003003eu, 0x00000049u, 0x000003d5u, 0x000200f9u, 0x000003c2u, 0x000200f8u, 0x000003d6u, 0x0004003du, 0x00000008u, 0x000003d7u, 0x00000047u, 0x000500aau, 0x0000005du, 0x000003d8u, 0x000003d7u, 0x00000215u, 0x000300f7u, 0x000003dau, 0x00000000u, 0x000400fau, 0x000003d8u, 0x000003d9u, 0x000003dcu, 0x000200f8u, 0x000003d9u, 0x00040039u, 0x00000008u, 0x000003dbu, 0x00000038u, 0x0003003eu, 0x00000049u, 0x000003dbu, 0x000200f9u, 0x000003dau, 0x000200f8u, 0x000003dcu, 0x0003003eu, 0x00000049u, 0x00000203u, 0x000200f9u, 0x000003dau, 0x000200f8u, 0x000003dau, 0x000200f9u, 0x000003c2u, 0x000200f8u, 0x000003c2u, 0x0004003du, 0x00000008u, 0x000003ddu, 0x00000048u, 0x000500aau, 0x0000005du, 0x000003deu, 0x000003ddu, 0x00000218u, 0x000300f7u, 0x000003e0u, 0x00000000u, 0x000400fau, 0x000003deu, 0x000003dfu, 0x000003e1u, 0x000200f8u, 0x000003dfu, 0x0003003eu, 0x0000004au, 0x00000203u, 0x000200f9u, 0x000003e0u, 0x000200f8u, 0x000003e1u, 0x0004003du, 0x00000008u, 0x000003e2u, 0x00000048u, 0x000500aau, 0x0000005du, 0x000003e3u, 0x000003e2u, 0x00000215u, 0x000300f7u, 0x000003e5u, 0x00000000u, 0x000400fau, 0x000003e3u, 0x000003e4u, 0x000003e7u, 0x000200f8u, 0x000003e4u, 0x00040039u, 0x00000008u, 0x000003e6u, 0x00000036u, 0x0003003eu, 0x0000004au, 0x000003e6u, 0x000200f9u, 0x000003e5u, 0x000200f8u, 0x000003e7u, 0x0004003du, 0x00000008u, 0x000003e8u, 0x00000047u, 0x000500afu, 0x0000005du, 0x000003e9u, 0x000003e8u, 0x00000215u, 0x000300f7u, 0x000003ecu, 0x00000000u, 0x000400fau, 0x000003e9u, 0x000003ebu, 0x000003f8u, 0x000200f8u, 0x000003ebu, 0x0004003du, 0x00000008u, 0x000003edu, 0x00000047u, 0x000500c7u, 0x00000008u, 0x000003eeu, 0x000003edu, 0x00000212u, 0x0004003du, 0x00000008u, 0x000003efu, 0x00000046u, 0x000500c7u, 0x00000008u, 0x000003f0u, 0x000003efu, 0x00000218u, 0x00050084u, 0x00000008u, 0x000003f1u, 0x000003f0u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000003f2u, 0x00000045u, 0x000500c7u, 0x00000008u, 0x000003f3u, 0x000003f2u, 0x00000218u, 0x00050080u, 0x00000008u, 0x000003f4u, 0x000003f1u, 0x000003f3u, 0x0003003eu, 0x000003f5u, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x000003f6u, 0x000003f5u, 0x000003eeu, 0x000003f4u, 0x0004003du, 0x00000008u, 0x000003f7u, 0x000003f6u, 0x0003003eu, 0x000003eau, 0x000003f7u, 0x000200f9u, 0x000003ecu, 0x000200f8u, 0x000003f8u, 0x0004003du, 0x00000008u, 0x000003f9u, 0x00000049u, 0x000500c7u, 0x00000008u, 0x000003fau, 0x000003f9u, 0x00000224u, 0x0003003eu, 0x000003eau, 0x000003fau, 0x000200f9u, 0x000003ecu, 0x000200f8u, 0x000003ecu, 0x000700f5u, 0x00000008u, 0x0000e9e5u, 0x000003f7u, 0x000003ebu, 0x000003fau, 0x000003f8u, 0x0003003eu, 0x0000004au, 0x0000e9e5u, 0x0004003du, 0x00000008u, 0x000003fcu, 0x00000048u, 0x000500aau, 0x0000005du, 0x000003fdu, 0x000003fcu, 0x00000212u, 0x000300f7u, 0x000003ffu, 0x00000000u, 0x000400fau, 0x000003fdu, 0x000003feu, 0x000003ffu, 0x000200f8u, 0x000003feu, 0x0004003du, 0x00000008u, 0x00000400u, 0x0000004au, 0x000400c8u, 0x00000008u, 0x00000401u, 0x00000400u, 0x000500c7u, 0x00000008u, 0x00000402u, 0x00000401u, 0x00000224u, 0x0003003eu, 0x0000004au, 0x00000402u, 0x000200f9u, 0x000003ffu, 0x000200f8u, 0x000003ffu, 0x000200f9u, 0x000003e5u, 0x000200f8u, 0x000003e5u, 0x000200f9u, 0x000003e0u, 0x000200f8u, 0x000003e0u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000004fu, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x0000004eu, 0x000200f8u, 0x00000050u, 0x0004003bu, 0x0000003eu, 0x00000403u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000405u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000408u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000040cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000410u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000404u, 0x0000004eu, 0x0003003eu, 0x00000403u, 0x00000404u, 0x000500c3u, 0x00000008u, 0x00000407u, 0x00000404u, 0x0000026fu, 0x0003003eu, 0x00000405u, 0x00000407u, 0x000500c7u, 0x00000008u, 0x0000040bu, 0x00000404u, 0x0000040au, 0x0003003eu, 0x00000408u, 0x0000040bu, 0x00050082u, 0x00000008u, 0x0000040eu, 0x00000221u, 0x00000407u, 0x0007000cu, 0x00000008u, 0x0000040fu, 0x00000001u, 0x0000002au, 0x0000040eu, 0x00000203u, 0x0003003eu, 0x0000040cu, 0x0000040fu, 0x000500c3u, 0x00000008u, 0x00000413u, 0x00000411u, 0x00000407u, 0x00050082u, 0x00000008u, 0x00000414u, 0x00000411u, 0x00000413u, 0x0003003eu, 0x00000410u, 0x00000414u, 0x000500c4u, 0x00000008u, 0x00000417u, 0x0000040bu, 0x0000040fu, 0x00050080u, 0x00000008u, 0x00000419u, 0x00000417u, 0x00000414u, 0x000200feu, 0x00000419u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000052u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x00000051u, 0x000200f8u, 0x00000053u, 0x0004003bu, 0x0000003eu, 0x0000041cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000421u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000428u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000042cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000041eu, 0x00000051u, 0x00050082u, 0x00000008u, 0x0000041fu, 0x0000041du, 0x0000041eu, 0x0007000cu, 0x00000008u, 0x00000420u, 0x00000001u, 0x0000002au, 0x0000041fu, 0x00000212u, 0x0003003eu, 0x0000041cu, 0x00000420u, 0x0006000cu, 0x00000008u, 0x00000424u, 0x00000001u, 0x0000004au, 0x00000420u, 0x00050082u, 0x00000008u, 0x00000425u, 0x00000422u, 0x00000424u, 0x0003003eu, 0x00000421u, 0x00000425u, 0x0008000cu, 0x00000008u, 0x00000427u, 0x00000001u, 0x0000002du, 0x00000425u, 0x00000203u, 0x00000224u, 0x0003003eu, 0x00000421u, 0x00000427u, 0x00050082u, 0x00000008u, 0x0000042au, 0x00000221u, 0x00000427u, 0x0007000cu, 0x00000008u, 0x0000042bu, 0x00000001u, 0x0000002au, 0x0000042au, 0x00000203u, 0x0003003eu, 0x00000428u, 0x0000042bu, 0x0004003du, 0x00000008u, 0x0000042du, 0x00000051u, 0x000500c3u, 0x00000008u, 0x0000042fu, 0x0000042du, 0x0000042bu, 0x000500c7u, 0x00000008u, 0x00000430u, 0x0000042fu, 0x0000040au, 0x0003003eu, 0x0000042cu, 0x00000430u, 0x000500c4u, 0x00000008u, 0x00000432u, 0x00000427u, 0x0000026fu, 0x00050080u, 0x00000008u, 0x00000434u, 0x00000432u, 0x00000430u, 0x000200feu, 0x00000434u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000055u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x00000054u, 0x000200f8u, 0x00000056u, 0x0004003du, 0x00000008u, 0x00000437u, 0x00000054u, 0x000500c4u, 0x00000008u, 0x00000438u, 0x00000212u, 0x00000437u, 0x000200feu, 0x00000438u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000058u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x00000057u, 0x000200f8u, 0x00000059u, 0x0004003du, 0x00000008u, 0x0000043bu, 0x00000057u, 0x0006000cu, 0x00000008u, 0x0000043cu, 0x00000001u, 0x0000004au, 0x0000043bu, 0x0007000cu, 0x00000008u, 0x0000043du, 0x00000001u, 0x0000002au, 0x0000043cu, 0x00000203u, 0x000200feu, 0x0000043du, 0x00010038u, 0x00050036u, 0x0000003cu, 0x0000006au, 0x00000000u, 0x00000061u, 0x00030037u, 0x0000005bu, 0x00000062u, 0x00030037u, 0x0000005cu, 0x00000063u, 0x00030037u, 0x0000005eu, 0x00000064u, 0x00030037u, 0x0000005eu, 0x00000065u, 0x00030037u, 0x0000005eu, 0x00000066u, 0x00030037u, 0x0000005eu, 0x00000067u, 0x00030037u, 0x00000060u, 0x00000068u, 0x00030037u, 0x0000005eu, 0x00000069u, 0x000200f8u, 0x0000006bu, 0x0005003bu, 0x0000005eu, 0x00001f25u, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003du, 0x00001f22u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000447u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000046bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000004a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000004b5u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000004f5u, 0x00000007u, 0x000300f7u, 0x00001f21u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00001f24u, 0x000200f8u, 0x00001f24u, 0x00050041u, 0x0000003eu, 0x00000440u, 0x00000063u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000441u, 0x00000440u, 0x000300f7u, 0x00000446u, 0x00000000u, 0x000b00fbu, 0x00000441u, 0x00000446u, 0x00000000u, 0x00000442u, 0x00000001u, 0x00000443u, 0x00000002u, 0x00000444u, 0x00000003u, 0x00000445u, 0x000200f8u, 0x00000442u, 0x00050041u, 0x0000005cu, 0x00000448u, 0x00000062u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00000449u, 0x00000448u, 0x0008004fu, 0x0000003cu, 0x0000044au, 0x00000449u, 0x00000449u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x0000044au, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000443u, 0x00050041u, 0x0000005cu, 0x0000044cu, 0x00000062u, 0x00000212u, 0x0004003du, 0x00000009u, 0x0000044du, 0x0000044cu, 0x0008004fu, 0x0000003cu, 0x0000044eu, 0x0000044du, 0x0000044du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x0000044eu, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000444u, 0x00050041u, 0x0000005cu, 0x00000450u, 0x00000062u, 0x00000218u, 0x0004003du, 0x00000009u, 0x00000451u, 0x00000450u, 0x0008004fu, 0x0000003cu, 0x00000452u, 0x00000451u, 0x00000451u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x00000452u, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000445u, 0x00050041u, 0x0000005cu, 0x00000454u, 0x00000062u, 0x00000215u, 0x0004003du, 0x00000009u, 0x00000455u, 0x00000454u, 0x0008004fu, 0x0000003cu, 0x00000456u, 0x00000455u, 0x00000455u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x00000456u, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000446u, 0x000d00f5u, 0x0000003cu, 0x0000ea00u, 0x0000ea01u, 0x00001f24u, 0x0000044au, 0x00000442u, 0x0000044eu, 0x00000443u, 0x00000452u, 0x00000444u, 0x00000456u, 0x00000445u, 0x0004003du, 0x0000005du, 0x00000459u, 0x00000069u, 0x000300f7u, 0x0000045bu, 0x00000000u, 0x000400fau, 0x00000459u, 0x0000045au, 0x0000045bu, 0x000200f8u, 0x0000045au, 0x0004003du, 0x0000005du, 0x0000045cu, 0x00000066u, 0x0004003du, 0x0000005du, 0x0000045du, 0x00000067u, 0x000400a8u, 0x0000005du, 0x0000045eu, 0x0000045du, 0x000500a7u, 0x0000005du, 0x0000045fu, 0x0000045cu, 0x0000045eu, 0x000300f7u, 0x00000461u, 0x00000000u, 0x000400fau, 0x0000045fu, 0x00000460u, 0x00000461u, 0x000200f8u, 0x00000460u, 0x0003003eu, 0x00001f25u, 0x0000055eu, 0x0003003eu, 0x00001f22u, 0x0000ea00u, 0x000200f9u, 0x00001f21u, 0x000200f8u, 0x00000461u, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045bu, 0x00050041u, 0x0000003eu, 0x00000464u, 0x00000063u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000465u, 0x00000464u, 0x000300f7u, 0x0000046au, 0x00000000u, 0x000b00fbu, 0x00000465u, 0x0000046au, 0x00000000u, 0x00000466u, 0x00000001u, 0x00000467u, 0x00000002u, 0x00000468u, 0x00000003u, 0x00000469u, 0x000200f8u, 0x00000466u, 0x00050041u, 0x0000005cu, 0x0000046cu, 0x00000062u, 0x00000203u, 0x0004003du, 0x00000009u, 0x0000046du, 0x0000046cu, 0x0008004fu, 0x0000003cu, 0x0000046eu, 0x0000046du, 0x0000046du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x0000046eu, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x00000467u, 0x00050041u, 0x0000005cu, 0x00000470u, 0x00000062u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00000471u, 0x00000470u, 0x0008004fu, 0x0000003cu, 0x00000472u, 0x00000471u, 0x00000471u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x00000472u, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x00000468u, 0x00050041u, 0x0000005cu, 0x00000474u, 0x00000062u, 0x00000218u, 0x0004003du, 0x00000009u, 0x00000475u, 0x00000474u, 0x0008004fu, 0x0000003cu, 0x00000476u, 0x00000475u, 0x00000475u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x00000476u, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x00000469u, 0x00050041u, 0x0000005cu, 0x00000478u, 0x00000062u, 0x00000215u, 0x0004003du, 0x00000009u, 0x00000479u, 0x00000478u, 0x0008004fu, 0x0000003cu, 0x0000047au, 0x00000479u, 0x00000479u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x0000047au, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x0000046au, 0x0004003du, 0x0000005du, 0x0000047du, 0x00000069u, 0x000300f7u, 0x0000047fu, 0x00000000u, 0x000400fau, 0x0000047du, 0x0000047eu, 0x0000047fu, 0x000200f8u, 0x0000047eu, 0x0004003du, 0x0000005du, 0x00000480u, 0x00000065u, 0x000400a8u, 0x0000005du, 0x00000481u, 0x00000480u, 0x000400a8u, 0x0000005du, 0x00000482u, 0x00000481u, 0x000300f7u, 0x00000484u, 0x00000000u, 0x000400fau, 0x00000482u, 0x00000483u, 0x00000484u, 0x000200f8u, 0x00000483u, 0x00050041u, 0x0000003eu, 0x00000486u, 0x00000063u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000487u, 0x00000486u, 0x000500aau, 0x0000005du, 0x00000488u, 0x00000487u, 0x00000203u, 0x000300f7u, 0x0000048au, 0x00000000u, 0x000400fau, 0x00000488u, 0x00000489u, 0x0000048au, 0x000200f8u, 0x00000489u, 0x00050041u, 0x0000003eu, 0x0000048cu, 0x00000063u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000048du, 0x0000048cu, 0x000500aau, 0x0000005du, 0x0000048eu, 0x0000048du, 0x00000203u, 0x000200f9u, 0x0000048au, 0x000200f8u, 0x0000048au, 0x000700f5u, 0x0000005du, 0x0000048fu, 0x00000488u, 0x00000483u, 0x0000048eu, 0x00000489u, 0x000300f7u, 0x00000491u, 0x00000000u, 0x000400fau, 0x0000048fu, 0x00000490u, 0x00000491u, 0x000200f8u, 0x00000490u, 0x00060041u, 0x0000003eu, 0x00000492u, 0x00000062u, 0x00000203u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000493u, 0x00000492u, 0x000500aau, 0x0000005du, 0x00000494u, 0x00000493u, 0x0000038bu, 0x000200f9u, 0x00000491u, 0x000200f8u, 0x00000491u, 0x000700f5u, 0x0000005du, 0x00000495u, 0x0000048fu, 0x0000048au, 0x00000494u, 0x00000490u, 0x000200f9u, 0x00000484u, 0x000200f8u, 0x00000484u, 0x000700f5u, 0x0000005du, 0x00000496u, 0x00000481u, 0x0000047eu, 0x00000495u, 0x00000491u, 0x000300f7u, 0x00000498u, 0x00000000u, 0x000400fau, 0x00000496u, 0x00000497u, 0x00000498u, 0x000200f8u, 0x00000497u, 0x0004003du, 0x0000003cu, 0x00000499u, 0x0000046bu, 0x0003003eu, 0x00001f25u, 0x0000055eu, 0x0003003eu, 0x00001f22u, 0x00000499u, 0x000200f9u, 0x00001f21u, 0x000200f8u, 0x00000498u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047fu, 0x00050041u, 0x0000003eu, 0x0000049bu, 0x00000063u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000049cu, 0x0000049bu, 0x000300f7u, 0x000004a1u, 0x00000000u, 0x000b00fbu, 0x0000049cu, 0x000004a1u, 0x00000000u, 0x0000049du, 0x00000001u, 0x0000049eu, 0x00000002u, 0x0000049fu, 0x00000003u, 0x000004a0u, 0x000200f8u, 0x0000049du, 0x00060041u, 0x0000003eu, 0x000004a3u, 0x00000062u, 0x00000203u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004a4u, 0x000004a3u, 0x0003003eu, 0x000004a2u, 0x000004a4u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x0000049eu, 0x00060041u, 0x0000003eu, 0x000004a6u, 0x00000062u, 0x00000215u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004a7u, 0x000004a6u, 0x0003003eu, 0x000004a2u, 0x000004a7u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x0000049fu, 0x00050041u, 0x0000003eu, 0x000004a9u, 0x00000062u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000004aau, 0x000004a9u, 0x0003003eu, 0x000004a2u, 0x000004aau, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x000004a0u, 0x0003003eu, 0x000004a2u, 0x00000203u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x000004a1u, 0x000d00f5u, 0x00000008u, 0x0000e9e6u, 0x0000e9ebu, 0x0000047fu, 0x000004a4u, 0x0000049du, 0x000004a7u, 0x0000049eu, 0x000004aau, 0x0000049fu, 0x00000203u, 0x000004a0u, 0x00050041u, 0x0000003eu, 0x000004aeu, 0x00000063u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004afu, 0x000004aeu, 0x000300f7u, 0x000004b4u, 0x00000000u, 0x000b00fbu, 0x000004afu, 0x000004b4u, 0x00000000u, 0x000004b0u, 0x00000001u, 0x000004b1u, 0x00000002u, 0x000004b2u, 0x00000003u, 0x000004b3u, 0x000200f8u, 0x000004b0u, 0x000400c8u, 0x00000008u, 0x000004b7u, 0x0000e9e6u, 0x000500c7u, 0x00000008u, 0x000004b8u, 0x000004b7u, 0x0000038bu, 0x0003003eu, 0x000004b5u, 0x000004b8u, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b1u, 0x00060041u, 0x0000003eu, 0x000004bau, 0x00000062u, 0x00000212u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004bbu, 0x000004bau, 0x0003003eu, 0x000004b5u, 0x000004bbu, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b2u, 0x0003003eu, 0x000004b5u, 0x0000038bu, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b3u, 0x0003003eu, 0x000004b5u, 0x00000203u, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b4u, 0x000d00f5u, 0x00000008u, 0x0000e9f0u, 0x0000e9ebu, 0x000004a1u, 0x000004b8u, 0x000004b0u, 0x000004bbu, 0x000004b1u, 0x0000038bu, 0x000004b2u, 0x00000203u, 0x000004b3u, 0x000500c3u, 0x00000008u, 0x000004c1u, 0x0000e9e6u, 0x00000218u, 0x0003003eu, 0x000004a2u, 0x000004c1u, 0x000500c3u, 0x00000008u, 0x000004c3u, 0x0000e9f0u, 0x00000218u, 0x0003003eu, 0x000004b5u, 0x000004c3u, 0x0004003du, 0x00000008u, 0x000004c5u, 0x000004aeu, 0x000500aau, 0x0000005du, 0x000004c6u, 0x000004c5u, 0x00000212u, 0x000300f7u, 0x000004c8u, 0x00000000u, 0x000400fau, 0x000004c6u, 0x000004c7u, 0x000004c8u, 0x000200f8u, 0x000004c7u, 0x00050041u, 0x0000003eu, 0x000004cau, 0x00000068u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000004cbu, 0x000004cau, 0x000500c3u, 0x00000008u, 0x000004ccu, 0x000004c1u, 0x000004cbu, 0x000500c7u, 0x00000008u, 0x000004ceu, 0x000004ccu, 0x000004cdu, 0x0003003eu, 0x000004a2u, 0x000004ceu, 0x00050041u, 0x0000003eu, 0x000004d0u, 0x00000068u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000004d1u, 0x000004d0u, 0x000500c3u, 0x00000008u, 0x000004d2u, 0x000004c3u, 0x000004d1u, 0x000500c5u, 0x00000008u, 0x000004d3u, 0x000004d2u, 0x00000218u, 0x0003003eu, 0x000004b5u, 0x000004d3u, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x000004c8u, 0x000700f5u, 0x00000008u, 0x0000ea05u, 0x000004c3u, 0x000004b4u, 0x000004d3u, 0x000004c7u, 0x000700f5u, 0x00000008u, 0x0000e9f9u, 0x000004c1u, 0x000004b4u, 0x000004ceu, 0x000004c7u, 0x0004003du, 0x0000003cu, 0x000004d5u, 0x0000046bu, 0x00050051u, 0x00000008u, 0x000004d6u, 0x000004d5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004d7u, 0x000004d5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004d8u, 0x000004d5u, 0x00000002u, 0x00060050u, 0x0000003cu, 0x000004dbu, 0x0000e9f9u, 0x0000e9f9u, 0x0000e9f9u, 0x00050084u, 0x0000003cu, 0x000004dcu, 0x000004d5u, 0x000004dbu, 0x00050051u, 0x00000008u, 0x000004deu, 0x0000ea00u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004dfu, 0x0000ea00u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004e0u, 0x0000ea00u, 0x00000002u, 0x00050080u, 0x00000008u, 0x000004e3u, 0x0000ea05u, 0x00000212u, 0x00060050u, 0x0000003cu, 0x000004e4u, 0x000004e3u, 0x000004e3u, 0x000004e3u, 0x00050084u, 0x0000003cu, 0x000004e5u, 0x0000ea00u, 0x000004e4u, 0x00050080u, 0x0000003cu, 0x000004e6u, 0x000004dcu, 0x000004e5u, 0x0003003eu, 0x000004d4u, 0x000004e6u, 0x0004003du, 0x0000005du, 0x000004e7u, 0x00000069u, 0x000400a8u, 0x0000005du, 0x000004e8u, 0x000004e7u, 0x0004003du, 0x0000005du, 0x000004e9u, 0x00000064u, 0x000500a6u, 0x0000005du, 0x000004eau, 0x000004e8u, 0x000004e9u, 0x000300f7u, 0x000004ecu, 0x00000000u, 0x000400fau, 0x000004eau, 0x000004ebu, 0x000004f4u, 0x000200f8u, 0x000004ebu, 0x0004003du, 0x0000003cu, 0x000004edu, 0x000004d4u, 0x000500c3u, 0x0000003cu, 0x000004efu, 0x000004edu, 0x0000eec9u, 0x00050051u, 0x00000008u, 0x000004f0u, 0x000004efu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004f1u, 0x000004efu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004f2u, 0x000004efu, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x000004efu, 0x000200f9u, 0x000004ecu, 0x000200f8u, 0x000004f4u, 0x000500c3u, 0x00000008u, 0x000004f7u, 0x0000e9f9u, 0x00000215u, 0x000500c3u, 0x00000008u, 0x000004f9u, 0x0000ea05u, 0x00000215u, 0x00050080u, 0x00000008u, 0x000004fau, 0x000004f7u, 0x000004f9u, 0x00050080u, 0x00000008u, 0x000004fbu, 0x000004fau, 0x00000212u, 0x0003003eu, 0x000004f5u, 0x000004fbu, 0x0004003du, 0x0000003cu, 0x000004fcu, 0x000004d4u, 0x000500c3u, 0x0000003cu, 0x000004feu, 0x000004fcu, 0x0000eecau, 0x0003003eu, 0x000004d4u, 0x000004feu, 0x0004003du, 0x0000003cu, 0x000004ffu, 0x000004d4u, 0x000500c7u, 0x0000003cu, 0x00000501u, 0x000004ffu, 0x0000eecbu, 0x0003003eu, 0x000004d4u, 0x00000501u, 0x0004003du, 0x00000502u, 0x00000505u, 0x00000504u, 0x000500c4u, 0x00000008u, 0x00000507u, 0x000004fbu, 0x0000026fu, 0x00050041u, 0x0000003eu, 0x00000508u, 0x000004d4u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000509u, 0x00000508u, 0x000500c5u, 0x00000008u, 0x0000050au, 0x00000507u, 0x00000509u, 0x0005005fu, 0x00000237u, 0x0000050bu, 0x00000505u, 0x0000050au, 0x00050051u, 0x00000006u, 0x0000050cu, 0x0000050bu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x0000050du, 0x0000050cu, 0x00050041u, 0x0000003eu, 0x0000050eu, 0x0000046bu, 0x00000374u, 0x0003003eu, 0x0000050eu, 0x0000050du, 0x00050041u, 0x0000003eu, 0x00000512u, 0x000004d4u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000513u, 0x00000512u, 0x000500c5u, 0x00000008u, 0x00000514u, 0x00000507u, 0x00000513u, 0x0005005fu, 0x00000237u, 0x00000515u, 0x00000505u, 0x00000514u, 0x00050051u, 0x00000006u, 0x00000516u, 0x00000515u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000517u, 0x00000516u, 0x00050041u, 0x0000003eu, 0x00000518u, 0x0000046bu, 0x00000485u, 0x0003003eu, 0x00000518u, 0x00000517u, 0x00050041u, 0x0000003eu, 0x0000051cu, 0x000004d4u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000051du, 0x0000051cu, 0x000500c5u, 0x00000008u, 0x0000051eu, 0x00000507u, 0x0000051du, 0x0005005fu, 0x00000237u, 0x0000051fu, 0x00000505u, 0x0000051eu, 0x00050051u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000521u, 0x00000520u, 0x00050041u, 0x0000003eu, 0x00000522u, 0x0000046bu, 0x000003c4u, 0x0003003eu, 0x00000522u, 0x00000521u, 0x000200f9u, 0x000004ecu, 0x000200f8u, 0x000004ecu, 0x0004003du, 0x0000003cu, 0x00000523u, 0x0000046bu, 0x000500c7u, 0x0000003cu, 0x00000525u, 0x00000523u, 0x0000039du, 0x0003003eu, 0x00001f25u, 0x0000055eu, 0x0003003eu, 0x00001f22u, 0x00000525u, 0x000200f9u, 0x00001f21u, 0x000200f8u, 0x00001f21u, 0x000900f5u, 0x0000003cu, 0x0000ea06u, 0x0000ea00u, 0x00000460u, 0x00000499u, 0x00000497u, 0x00000525u, 0x000004ecu, 0x000200feu, 0x0000ea06u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000006du, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x0000006cu, 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000008u, 0x00000528u, 0x0000006cu, 0x000500abu, 0x0000005du, 0x00000529u, 0x00000528u, 0x00000203u, 0x000300f7u, 0x0000052bu, 0x00000000u, 0x000400fau, 0x00000529u, 0x0000052au, 0x0000052bu, 0x000200f8u, 0x0000052au, 0x0004003du, 0x00000008u, 0x0000052cu, 0x0000006cu, 0x0006000cu, 0x00000008u, 0x0000052du, 0x00000001u, 0x0000004au, 0x0000052cu, 0x000500c4u, 0x00000008u, 0x0000052eu, 0x00000212u, 0x0000052du, 0x0003003eu, 0x0000006cu, 0x0000052eu, 0x000200f9u, 0x0000052bu, 0x000200f8u, 0x0000052bu, 0x0004003du, 0x00000008u, 0x0000052fu, 0x0000006cu, 0x000200feu, 0x0000052fu, 0x00010038u, 0x00050036u, 0x0000005du, 0x0000007eu, 0x00000000u, 0x0000006fu, 0x00030037u, 0x0000003eu, 0x00000070u, 0x00030037u, 0x0000003eu, 0x00000071u, 0x00030037u, 0x0000003eu, 0x00000072u, 0x00030037u, 0x0000003eu, 0x00000073u, 0x00030037u, 0x0000003eu, 0x00000074u, 0x00030037u, 0x0000003eu, 0x00000075u, 0x00030037u, 0x0000003eu, 0x00000076u, 0x00030037u, 0x0000005eu, 0x00000077u, 0x00030037u, 0x0000003eu, 0x00000078u, 0x00030037u, 0x0000005eu, 0x00000079u, 0x00030037u, 0x0000005eu, 0x0000007au, 0x00030037u, 0x0000005eu, 0x0000007bu, 0x00030037u, 0x0000005eu, 0x0000007cu, 0x00030037u, 0x00000060u, 0x0000007du, 0x000200f8u, 0x0000007fu, 0x0004003bu, 0x0000003eu, 0x00000535u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000536u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000539u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000053au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000053du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000542u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000560u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000564u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000566u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000056au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000575u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000586u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000587u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000058au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000058eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000592u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000005beu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000005e1u, 0x00000007u, 0x0004003du, 0x0000005du, 0x00000532u, 0x00000077u, 0x000300f7u, 0x00000534u, 0x00000000u, 0x000400fau, 0x00000532u, 0x00000533u, 0x000005dbu, 0x000200f8u, 0x00000533u, 0x0004003du, 0x00000008u, 0x00000537u, 0x00000073u, 0x0003003eu, 0x00000536u, 0x00000537u, 0x00050039u, 0x00000008u, 0x00000538u, 0x0000004fu, 0x00000536u, 0x0003003eu, 0x00000535u, 0x00000538u, 0x0004003du, 0x00000008u, 0x0000053bu, 0x00000074u, 0x0003003eu, 0x0000053au, 0x0000053bu, 0x00050039u, 0x00000008u, 0x0000053cu, 0x00000055u, 0x0000053au, 0x0003003eu, 0x00000539u, 0x0000053cu, 0x0004003du, 0x00000008u, 0x0000053eu, 0x00000073u, 0x000500c3u, 0x00000008u, 0x0000053fu, 0x0000053eu, 0x0000026fu, 0x000500c7u, 0x00000008u, 0x00000541u, 0x0000053fu, 0x00000540u, 0x0003003eu, 0x0000053du, 0x00000541u, 0x0003003eu, 0x00000542u, 0x00000543u, 0x0004003du, 0x00000008u, 0x00000544u, 0x00000072u, 0x0004003du, 0x00000008u, 0x00000545u, 0x00000074u, 0x00050082u, 0x00000008u, 0x00000546u, 0x00000544u, 0x00000545u, 0x0008000cu, 0x00000008u, 0x00000547u, 0x00000001u, 0x0000002du, 0x00000546u, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x00000548u, 0x0000007du, 0x00000374u, 0x0003003eu, 0x00000548u, 0x00000547u, 0x0004003du, 0x00000008u, 0x00000549u, 0x00000074u, 0x0004003du, 0x00000008u, 0x0000054au, 0x00000072u, 0x00050082u, 0x00000008u, 0x0000054bu, 0x00000549u, 0x0000054au, 0x0008000cu, 0x00000008u, 0x0000054cu, 0x00000001u, 0x0000002du, 0x0000054bu, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x0000054du, 0x0000007du, 0x00000485u, 0x0003003eu, 0x0000054du, 0x0000054cu, 0x000500b1u, 0x0000005du, 0x0000054fu, 0x00000541u, 0x00000218u, 0x000300f7u, 0x00000551u, 0x00000000u, 0x000400fau, 0x0000054fu, 0x00000550u, 0x00000551u, 0x000200f8u, 0x00000550u, 0x000500abu, 0x0000005du, 0x00000554u, 0x0000053cu, 0x00000553u, 0x000300f7u, 0x00000556u, 0x00000000u, 0x000400fau, 0x00000554u, 0x00000555u, 0x0000055du, 0x000200f8u, 0x00000555u, 0x000500c4u, 0x00000008u, 0x00000558u, 0x0000053cu, 0x00000212u, 0x000500c3u, 0x00000008u, 0x0000055bu, 0x00000559u, 0x00000541u, 0x0007000cu, 0x00000008u, 0x0000055cu, 0x00000001u, 0x0000002au, 0x00000558u, 0x0000055bu, 0x0003003eu, 0x00000539u, 0x0000055cu, 0x000200f9u, 0x00000556u, 0x000200f8u, 0x0000055du, 0x0003003eu, 0x00000542u, 0x0000055eu, 0x0003003eu, 0x00000539u, 0x0000055fu, 0x000200f9u, 0x00000556u, 0x000200f8u, 0x00000556u, 0x000700f5u, 0x00000008u, 0x0000ea09u, 0x0000055cu, 0x00000555u, 0x0000055fu, 0x0000055du, 0x000600a9u, 0x0000005du, 0x0000eee9u, 0x00000554u, 0x00000543u, 0x0000055eu, 0x000200f9u, 0x00000551u, 0x000200f8u, 0x00000551u, 0x000700f5u, 0x0000005du, 0x0000ea0au, 0x00000543u, 0x00000533u, 0x0000eee9u, 0x00000556u, 0x000700f5u, 0x00000008u, 0x0000ea08u, 0x0000053cu, 0x00000533u, 0x0000ea09u, 0x00000556u, 0x0004003du, 0x00000008u, 0x00000561u, 0x00000071u, 0x000500c5u, 0x00000008u, 0x00000563u, 0x00000561u, 0x0000ea08u, 0x0003003eu, 0x00000564u, 0x00000563u, 0x00050039u, 0x00000008u, 0x00000565u, 0x0000006du, 0x00000564u, 0x0003003eu, 0x00000560u, 0x00000565u, 0x0003003eu, 0x00000566u, 0x00000565u, 0x000500c4u, 0x00000008u, 0x00000569u, 0x00000565u, 0x00000218u, 0x0003003eu, 0x00000560u, 0x00000569u, 0x000400a8u, 0x0000005du, 0x0000056cu, 0x0000ea0au, 0x000300f7u, 0x0000056eu, 0x00000000u, 0x000400fau, 0x0000056cu, 0x0000056du, 0x0000056eu, 0x000200f8u, 0x0000056du, 0x0004003du, 0x00000008u, 0x0000056fu, 0x00000070u, 0x00050080u, 0x00000008u, 0x00000571u, 0x0000056fu, 0x00000569u, 0x000500afu, 0x0000005du, 0x00000573u, 0x00000571u, 0x00000538u, 0x000200f9u, 0x0000056eu, 0x000200f8u, 0x0000056eu, 0x000700f5u, 0x0000005du, 0x00000574u, 0x0000ea0au, 0x00000551u, 0x00000573u, 0x0000056du, 0x0003003eu, 0x0000056au, 0x00000574u, 0x0004003du, 0x00000008u, 0x00000576u, 0x00000075u, 0x0004003du, 0x00000008u, 0x00000577u, 0x00000076u, 0x00050080u, 0x00000008u, 0x00000578u, 0x00000576u, 0x00000577u, 0x000500afu, 0x0000005du, 0x00000579u, 0x00000578u, 0x0000025eu, 0x0003003eu, 0x00000575u, 0x00000579u, 0x0004003du, 0x0000005du, 0x0000057au, 0x00000079u, 0x000400a8u, 0x0000005du, 0x0000057bu, 0x0000057au, 0x000300f7u, 0x0000057du, 0x00000000u, 0x000400fau, 0x0000057bu, 0x0000057cu, 0x0000057du, 0x000200f8u, 0x0000057cu, 0x000400a8u, 0x0000005du, 0x0000057fu, 0x00000579u, 0x0004003du, 0x0000005du, 0x00000580u, 0x0000007au, 0x000500a7u, 0x0000005du, 0x00000581u, 0x0000057fu, 0x00000580u, 0x000500a7u, 0x0000005du, 0x00000583u, 0x00000581u, 0x00000574u, 0x000200f9u, 0x0000057du, 0x000200f8u, 0x0000057du, 0x000700f5u, 0x0000005du, 0x00000584u, 0x0000057au, 0x0000056eu, 0x00000583u, 0x0000057cu, 0x0003003eu, 0x0000007bu, 0x00000584u, 0x0003003eu, 0x0000007cu, 0x00000579u, 0x0003003eu, 0x00000586u, 0x00000543u, 0x000500aau, 0x0000005du, 0x00000589u, 0x00000538u, 0x0000041du, 0x0003003eu, 0x00000587u, 0x00000589u, 0x0004003du, 0x00000008u, 0x0000058bu, 0x00000070u, 0x000500b1u, 0x0000005du, 0x0000058du, 0x0000058bu, 0x00000538u, 0x0003003eu, 0x0000058au, 0x0000058du, 0x0004003du, 0x00000008u, 0x0000058fu, 0x00000070u, 0x00050082u, 0x00000008u, 0x00000591u, 0x0000058fu, 0x00000569u, 0x0003003eu, 0x0000058eu, 0x00000591u, 0x000500b3u, 0x0000005du, 0x00000596u, 0x00000591u, 0x00000538u, 0x000500a6u, 0x0000005du, 0x00000597u, 0x0000ea0au, 0x00000596u, 0x0003003eu, 0x00000592u, 0x00000597u, 0x0004003du, 0x00000008u, 0x00000598u, 0x00000078u, 0x000300f7u, 0x0000059du, 0x00000000u, 0x000b00fbu, 0x00000598u, 0x0000059du, 0x00000000u, 0x00000599u, 0x00000001u, 0x0000059au, 0x00000002u, 0x0000059bu, 0x00000003u, 0x0000059cu, 0x000200f8u, 0x00000599u, 0x000400a8u, 0x0000005du, 0x0000059fu, 0x00000589u, 0x000300f7u, 0x000005a1u, 0x00000000u, 0x000400fau, 0x0000059fu, 0x000005a0u, 0x000005a1u, 0x000200f8u, 0x000005a0u, 0x000600a9u, 0x0000005du, 0x000005a5u, 0x00000579u, 0x0000058du, 0x00000597u, 0x000200f9u, 0x000005a1u, 0x000200f8u, 0x000005a1u, 0x000700f5u, 0x0000005du, 0x000005a6u, 0x00000589u, 0x00000599u, 0x000005a5u, 0x000005a0u, 0x0003003eu, 0x00000586u, 0x000005a6u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059au, 0x000400a8u, 0x0000005du, 0x000005a9u, 0x0000058du, 0x000400a8u, 0x0000005du, 0x000005abu, 0x00000574u, 0x000500a6u, 0x0000005du, 0x000005acu, 0x000005a9u, 0x000005abu, 0x000400a8u, 0x0000005du, 0x000005aeu, 0x00000579u, 0x000500a6u, 0x0000005du, 0x000005afu, 0x000005acu, 0x000005aeu, 0x000300f7u, 0x000005b1u, 0x00000000u, 0x000400fau, 0x000005afu, 0x000005b0u, 0x000005bbu, 0x000200f8u, 0x000005b0u, 0x000400a8u, 0x0000005du, 0x000005b3u, 0x00000589u, 0x000300f7u, 0x000005b5u, 0x00000000u, 0x000400fau, 0x000005b3u, 0x000005b4u, 0x000005b5u, 0x000200f8u, 0x000005b4u, 0x000600a9u, 0x0000005du, 0x000005b9u, 0x00000579u, 0x0000058du, 0x00000597u, 0x000200f9u, 0x000005b5u, 0x000200f8u, 0x000005b5u, 0x000700f5u, 0x0000005du, 0x000005bau, 0x00000589u, 0x000005b0u, 0x000005b9u, 0x000005b4u, 0x0003003eu, 0x00000586u, 0x000005bau, 0x000200f9u, 0x000005b1u, 0x000200f8u, 0x000005bbu, 0x000500c7u, 0x00000008u, 0x000005bdu, 0x00000565u, 0x0000055fu, 0x0003003eu, 0x000005beu, 0x000005bdu, 0x00050039u, 0x00000008u, 0x000005bfu, 0x00000058u, 0x000005beu, 0x0003003eu, 0x00000566u, 0x000005bfu, 0x000500c3u, 0x00000008u, 0x000005c3u, 0x00000538u, 0x000005bfu, 0x0004003du, 0x00000008u, 0x000005c4u, 0x00000070u, 0x000500c3u, 0x00000008u, 0x000005c6u, 0x000005c4u, 0x000005bfu, 0x00050082u, 0x00000008u, 0x000005c7u, 0x000005c3u, 0x000005c6u, 0x000500c7u, 0x00000008u, 0x000005c8u, 0x000005c7u, 0x00000540u, 0x0003003eu, 0x000005c0u, 0x000005c8u, 0x0004003du, 0x00000008u, 0x000005cau, 0x00000075u, 0x00050084u, 0x00000008u, 0x000005cbu, 0x000005c8u, 0x000005cau, 0x000500c3u, 0x00000008u, 0x000005ccu, 0x000005cbu, 0x00000218u, 0x0007000cu, 0x00000008u, 0x000005cdu, 0x00000001u, 0x00000027u, 0x000005ccu, 0x0000025eu, 0x0003003eu, 0x00000075u, 0x000005cdu, 0x0003003eu, 0x00000586u, 0x0000055eu, 0x000200f9u, 0x000005b1u, 0x000200f8u, 0x000005b1u, 0x000700f5u, 0x0000005du, 0x0000ea1au, 0x000005bau, 0x000005b5u, 0x0000055eu, 0x000005bbu, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059bu, 0x000500a6u, 0x0000005du, 0x000005d1u, 0x0000058du, 0x00000589u, 0x0003003eu, 0x00000586u, 0x000005d1u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059cu, 0x000500a7u, 0x0000005du, 0x000005d5u, 0x00000574u, 0x00000597u, 0x000400a8u, 0x0000005du, 0x000005d7u, 0x00000589u, 0x000500a7u, 0x0000005du, 0x000005d8u, 0x000005d5u, 0x000005d7u, 0x0003003eu, 0x00000586u, 0x000005d8u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059du, 0x000d00f5u, 0x0000005du, 0x0000ea19u, 0x00000543u, 0x0000057du, 0x000005a6u, 0x000005a1u, 0x0000ea1au, 0x000005b1u, 0x000005d1u, 0x0000059bu, 0x000005d8u, 0x0000059cu, 0x000200f9u, 0x00000534u, 0x000200f8u, 0x000005dbu, 0x00050041u, 0x0000003eu, 0x000005dcu, 0x0000007du, 0x00000374u, 0x0003003eu, 0x000005dcu, 0x00000203u, 0x0004003du, 0x00000008u, 0x000005ddu, 0x00000072u, 0x00050082u, 0x00000008u, 0x000005deu, 0x00000540u, 0x000005ddu, 0x0007000cu, 0x00000008u, 0x000005dfu, 0x00000001u, 0x00000027u, 0x000005deu, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x000005e0u, 0x0000007du, 0x00000485u, 0x0003003eu, 0x000005e0u, 0x000005dfu, 0x0004003du, 0x00000008u, 0x000005e2u, 0x00000075u, 0x0004003du, 0x00000008u, 0x000005e3u, 0x00000076u, 0x00050080u, 0x00000008u, 0x000005e4u, 0x000005e2u, 0x000005e3u, 0x000500afu, 0x0000005du, 0x000005e5u, 0x000005e4u, 0x0000025eu, 0x0003003eu, 0x000005e1u, 0x000005e5u, 0x0004003du, 0x0000005du, 0x000005e6u, 0x00000079u, 0x000400a8u, 0x0000005du, 0x000005e7u, 0x000005e6u, 0x000300f7u, 0x000005e9u, 0x00000000u, 0x000400fau, 0x000005e7u, 0x000005e8u, 0x000005e9u, 0x000200f8u, 0x000005e8u, 0x000400a8u, 0x0000005du, 0x000005ebu, 0x000005e5u, 0x0004003du, 0x0000005du, 0x000005ecu, 0x0000007au, 0x000500a7u, 0x0000005du, 0x000005edu, 0x000005ebu, 0x000005ecu, 0x000200f9u, 0x000005e9u, 0x000200f8u, 0x000005e9u, 0x000700f5u, 0x0000005du, 0x000005eeu, 0x000005e6u, 0x000005dbu, 0x000005edu, 0x000005e8u, 0x0003003eu, 0x0000007bu, 0x000005eeu, 0x0003003eu, 0x0000007cu, 0x000005e5u, 0x0003003eu, 0x00000586u, 0x0000055eu, 0x000200f9u, 0x00000534u, 0x000200f8u, 0x00000534u, 0x000700f5u, 0x0000005du, 0x0000ea18u, 0x0000ea19u, 0x0000059du, 0x0000055eu, 0x000005e9u, 0x000200feu, 0x0000ea18u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000084u, 0x00000000u, 0x00000080u, 0x00030037u, 0x0000005cu, 0x00000081u, 0x00030037u, 0x0000005cu, 0x00000082u, 0x00030037u, 0x0000003eu, 0x00000083u, 0x000200f8u, 0x00000085u, 0x0004003bu, 0x0000005cu, 0x000005f3u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x000005fbu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x00000600u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x00000605u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000060au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000060fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000617u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000061du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000627u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000005f5u, 0x00000083u, 0x000500c4u, 0x00000008u, 0x000005f6u, 0x000005f5u, 0x00000218u, 0x00070050u, 0x00000009u, 0x000005f7u, 0x000005f6u, 0x000005f6u, 0x000005f6u, 0x000005f6u, 0x00050080u, 0x00000009u, 0x000005f8u, 0x000005f4u, 0x000005f7u, 0x0003003eu, 0x000005f3u, 0x000005f8u, 0x0004003du, 0x00000009u, 0x000005fdu, 0x00000081u, 0x0009004fu, 0x00000009u, 0x000005feu, 0x000005fdu, 0x000005fdu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b1u, 0x000005f9u, 0x000005ffu, 0x000005f8u, 0x000005feu, 0x0003003eu, 0x000005fbu, 0x000005ffu, 0x0004003du, 0x00000009u, 0x00000602u, 0x00000081u, 0x0009004fu, 0x00000009u, 0x00000603u, 0x00000602u, 0x00000602u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b1u, 0x000005f9u, 0x00000604u, 0x000005f8u, 0x00000603u, 0x0003003eu, 0x00000600u, 0x00000604u, 0x0004003du, 0x00000009u, 0x00000607u, 0x00000082u, 0x0009004fu, 0x00000009u, 0x00000608u, 0x00000607u, 0x00000607u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500afu, 0x000005f9u, 0x00000609u, 0x000005f8u, 0x00000608u, 0x0003003eu, 0x00000605u, 0x00000609u, 0x0004003du, 0x00000009u, 0x0000060cu, 0x00000082u, 0x0009004fu, 0x00000009u, 0x0000060du, 0x0000060cu, 0x0000060cu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500afu, 0x000005f9u, 0x0000060eu, 0x000005f8u, 0x0000060du, 0x0003003eu, 0x0000060au, 0x0000060eu, 0x000600a9u, 0x00000009u, 0x00000613u, 0x000005ffu, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x00000615u, 0x00000609u, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x00000616u, 0x00000613u, 0x00000615u, 0x0003003eu, 0x0000060fu, 0x00000616u, 0x000600a9u, 0x00000009u, 0x00000619u, 0x00000604u, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x0000061bu, 0x0000060eu, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x0000061cu, 0x00000619u, 0x0000061bu, 0x0003003eu, 0x00000617u, 0x0000061cu, 0x00050084u, 0x00000009u, 0x00000620u, 0x00000616u, 0x0000061fu, 0x00050084u, 0x00000009u, 0x00000625u, 0x0000061cu, 0x00000624u, 0x00050080u, 0x00000009u, 0x00000626u, 0x00000620u, 0x00000625u, 0x0003003eu, 0x0000061du, 0x00000626u, 0x00050041u, 0x0000003eu, 0x00000628u, 0x0000061du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000629u, 0x00000628u, 0x00050041u, 0x0000003eu, 0x0000062au, 0x0000061du, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000062bu, 0x0000062au, 0x000500c5u, 0x00000008u, 0x0000062cu, 0x00000629u, 0x0000062bu, 0x00050041u, 0x0000003eu, 0x0000062du, 0x0000061du, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000062eu, 0x0000062du, 0x00050041u, 0x0000003eu, 0x0000062fu, 0x0000061du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000630u, 0x0000062fu, 0x000500c5u, 0x00000008u, 0x00000631u, 0x0000062eu, 0x00000630u, 0x000500c5u, 0x00000008u, 0x00000632u, 0x0000062cu, 0x00000631u, 0x0003003eu, 0x00000627u, 0x00000632u, 0x000400c8u, 0x00000008u, 0x00000634u, 0x00000632u, 0x000500c7u, 0x00000008u, 0x00000635u, 0x00000634u, 0x0000038bu, 0x000200feu, 0x00000635u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000008bu, 0x00000000u, 0x00000086u, 0x00030037u, 0x0000003eu, 0x00000087u, 0x00030037u, 0x0000003eu, 0x00000088u, 0x00030037u, 0x0000005eu, 0x00000089u, 0x00030037u, 0x0000003eu, 0x0000008au, 0x000200f8u, 0x0000008cu, 0x0004003bu, 0x0000003eu, 0x00000638u, 0x00000007u, 0x0003003eu, 0x00000638u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000639u, 0x0000008au, 0x000300f7u, 0x0000063eu, 0x00000000u, 0x000b00fbu, 0x00000639u, 0x0000063eu, 0x00000000u, 0x0000063au, 0x00000001u, 0x0000063bu, 0x00000002u, 0x0000063cu, 0x00000003u, 0x0000063du, 0x000200f8u, 0x0000063au, 0x0004003du, 0x0000005du, 0x0000063fu, 0x00000089u, 0x000300f7u, 0x00000641u, 0x00000000u, 0x000400fau, 0x0000063fu, 0x00000640u, 0x00000646u, 0x000200f8u, 0x00000640u, 0x0004003du, 0x00000008u, 0x00000642u, 0x00000088u, 0x0004003du, 0x00000008u, 0x00000643u, 0x00000087u, 0x00050080u, 0x00000008u, 0x00000644u, 0x00000642u, 0x00000643u, 0x0007000cu, 0x00000008u, 0x00000645u, 0x00000001u, 0x00000027u, 0x00000224u, 0x00000644u, 0x0003003eu, 0x00000638u, 0x00000645u, 0x000200f9u, 0x00000641u, 0x000200f8u, 0x00000646u, 0x0004003du, 0x00000008u, 0x00000647u, 0x00000087u, 0x00050082u, 0x00000008u, 0x00000648u, 0x00000647u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00000649u, 0x00000648u, 0x00000224u, 0x0003003eu, 0x00000638u, 0x00000649u, 0x000200f9u, 0x00000641u, 0x000200f8u, 0x00000641u, 0x000700f5u, 0x00000008u, 0x0000ea1cu, 0x00000645u, 0x00000640u, 0x00000649u, 0x00000646u, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063bu, 0x0004003du, 0x00000008u, 0x0000064bu, 0x00000087u, 0x0004003du, 0x00000008u, 0x0000064cu, 0x00000088u, 0x00050080u, 0x00000008u, 0x0000064du, 0x0000064bu, 0x0000064cu, 0x000500c7u, 0x00000008u, 0x0000064eu, 0x0000064du, 0x00000224u, 0x0003003eu, 0x00000638u, 0x0000064eu, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063cu, 0x0003003eu, 0x00000638u, 0x00000224u, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063du, 0x0004003du, 0x00000008u, 0x00000651u, 0x00000088u, 0x0003003eu, 0x00000638u, 0x00000651u, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063eu, 0x000d00f5u, 0x00000008u, 0x0000ea1bu, 0x00000203u, 0x0000008cu, 0x0000ea1cu, 0x00000641u, 0x0000064eu, 0x0000063bu, 0x00000224u, 0x0000063cu, 0x00000651u, 0x0000063du, 0x000200feu, 0x0000ea1bu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000090u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000008eu, 0x00030037u, 0x00000007u, 0x0000008fu, 0x000200f8u, 0x00000091u, 0x0004003bu, 0x0000003eu, 0x00000665u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00000693u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d2u, 0x00000007u, 0x000300f7u, 0x0000065cu, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x0000065cu, 0x00000000u, 0x00000658u, 0x00000001u, 0x00000658u, 0x00000002u, 0x00000659u, 0x00000003u, 0x0000065au, 0x00000004u, 0x0000065bu, 0x000200f8u, 0x00000658u, 0x0004003du, 0x00000006u, 0x0000065fu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x00000660u, 0x0000065fu, 0x0000065eu, 0x0003003eu, 0x0000008eu, 0x00000660u, 0x0004003du, 0x00000006u, 0x00000661u, 0x0000008fu, 0x00050084u, 0x00000006u, 0x00000662u, 0x00000661u, 0x0000065du, 0x0004003du, 0x00000006u, 0x00000663u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x00000664u, 0x00000663u, 0x00000662u, 0x0003003eu, 0x0000008eu, 0x00000664u, 0x0004003du, 0x00000006u, 0x0000066au, 0x0000008eu, 0x000500c6u, 0x00000006u, 0x0000066bu, 0x0000066au, 0x0000048bu, 0x00060041u, 0x00000277u, 0x0000066cu, 0x00000669u, 0x00000203u, 0x0000066bu, 0x0004003du, 0x00000229u, 0x0000066du, 0x0000066cu, 0x00040071u, 0x00000006u, 0x0000066eu, 0x0000066du, 0x0004007cu, 0x00000008u, 0x0000066fu, 0x0000066eu, 0x0003003eu, 0x00000665u, 0x0000066fu, 0x0004003du, 0x00000006u, 0x00000679u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x0000067au, 0x00000679u, 0x00000212u, 0x00060041u, 0x00000277u, 0x0000067bu, 0x00000678u, 0x00000203u, 0x0000067au, 0x0004003du, 0x00000229u, 0x0000067cu, 0x0000067bu, 0x00040071u, 0x00000006u, 0x0000067du, 0x0000067cu, 0x0004007cu, 0x00000008u, 0x0000067eu, 0x0000067du, 0x00070050u, 0x00000009u, 0x0000067fu, 0x0000066fu, 0x0000066fu, 0x0000066fu, 0x0000067eu, 0x0003003eu, 0x00000671u, 0x0000067fu, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x00000659u, 0x0004003du, 0x00000006u, 0x00000682u, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x00000683u, 0x00000682u, 0x00000681u, 0x0003003eu, 0x0000008eu, 0x00000683u, 0x0004003du, 0x00000006u, 0x00000684u, 0x0000008fu, 0x00050084u, 0x00000006u, 0x00000686u, 0x00000684u, 0x00000685u, 0x0004003du, 0x00000006u, 0x00000687u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x00000688u, 0x00000687u, 0x00000686u, 0x0003003eu, 0x0000008eu, 0x00000688u, 0x0004003du, 0x00000006u, 0x0000068eu, 0x0000008eu, 0x000500c6u, 0x00000006u, 0x0000068fu, 0x0000068eu, 0x00000485u, 0x00060041u, 0x00000270u, 0x00000690u, 0x0000068du, 0x00000203u, 0x0000068fu, 0x0004003du, 0x0000022bu, 0x00000691u, 0x00000690u, 0x00040071u, 0x00000006u, 0x00000692u, 0x00000691u, 0x0003003eu, 0x00000689u, 0x00000692u, 0x000500c2u, 0x00000006u, 0x00000695u, 0x00000692u, 0x0000035bu, 0x000500c2u, 0x00000006u, 0x00000697u, 0x00000692u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x00000699u, 0x00000692u, 0x000003c4u, 0x00060050u, 0x00000353u, 0x0000069au, 0x00000695u, 0x00000697u, 0x00000699u, 0x000500c7u, 0x00000353u, 0x0000069du, 0x0000069au, 0x0000eeaeu, 0x0003003eu, 0x00000693u, 0x0000069du, 0x0004007cu, 0x0000003cu, 0x0000069fu, 0x0000069du, 0x0004003du, 0x00000006u, 0x000006a0u, 0x0000008eu, 0x00060041u, 0x00000277u, 0x000006a1u, 0x00000678u, 0x00000203u, 0x000006a0u, 0x0004003du, 0x00000229u, 0x000006a2u, 0x000006a1u, 0x00040071u, 0x00000006u, 0x000006a3u, 0x000006a2u, 0x0004007cu, 0x00000008u, 0x000006a4u, 0x000006a3u, 0x000500c4u, 0x00000008u, 0x000006a5u, 0x000006a4u, 0x0000021eu, 0x000500c7u, 0x00000006u, 0x000006a7u, 0x00000692u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000006a8u, 0x000006a7u, 0x00000224u, 0x0004007cu, 0x00000008u, 0x000006a9u, 0x000006a8u, 0x000500c5u, 0x00000008u, 0x000006aau, 0x000006a5u, 0x000006a9u, 0x00050051u, 0x00000008u, 0x000006abu, 0x0000069fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000006acu, 0x0000069fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000006adu, 0x0000069fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000006aeu, 0x000006abu, 0x000006acu, 0x000006adu, 0x000006aau, 0x0003003eu, 0x00000671u, 0x000006aeu, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065au, 0x0004003du, 0x00000006u, 0x000006b0u, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006b1u, 0x000006b0u, 0x00000681u, 0x0003003eu, 0x0000008eu, 0x000006b1u, 0x0004003du, 0x00000006u, 0x000006b2u, 0x0000008fu, 0x00050084u, 0x00000006u, 0x000006b4u, 0x000006b2u, 0x000006b3u, 0x0004003du, 0x00000006u, 0x000006b5u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x000006b6u, 0x000006b5u, 0x000006b4u, 0x0003003eu, 0x0000008eu, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006b8u, 0x0000008eu, 0x000500c6u, 0x00000006u, 0x000006b9u, 0x000006b8u, 0x00000485u, 0x00060041u, 0x00000270u, 0x000006bau, 0x0000068du, 0x00000203u, 0x000006b9u, 0x0004003du, 0x0000022bu, 0x000006bbu, 0x000006bau, 0x00040071u, 0x00000006u, 0x000006bcu, 0x000006bbu, 0x0003003eu, 0x000006b7u, 0x000006bcu, 0x000500c2u, 0x00000006u, 0x000006beu, 0x000006bcu, 0x0000035bu, 0x0004007cu, 0x00000008u, 0x000006bfu, 0x000006beu, 0x00060050u, 0x0000003cu, 0x000006c0u, 0x000006bfu, 0x000006bfu, 0x000006bfu, 0x000500c7u, 0x00000006u, 0x000006c3u, 0x000006bcu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000006c4u, 0x000006c3u, 0x00070050u, 0x00000009u, 0x000006c8u, 0x000006bfu, 0x000006bfu, 0x000006bfu, 0x000006c4u, 0x0003003eu, 0x00000671u, 0x000006c8u, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065bu, 0x0004003du, 0x00000006u, 0x000006cbu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006ccu, 0x000006cbu, 0x000006cau, 0x0003003eu, 0x0000008eu, 0x000006ccu, 0x0004003du, 0x00000006u, 0x000006cdu, 0x0000008fu, 0x00050084u, 0x00000006u, 0x000006cfu, 0x000006cdu, 0x000006ceu, 0x0004003du, 0x00000006u, 0x000006d0u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x000006d1u, 0x000006d0u, 0x000006cfu, 0x0003003eu, 0x0000008eu, 0x000006d1u, 0x0004003du, 0x00000006u, 0x000006d7u, 0x0000008eu, 0x00060041u, 0x0000026bu, 0x000006d8u, 0x000006d6u, 0x00000203u, 0x000006d7u, 0x0004003du, 0x00000006u, 0x000006d9u, 0x000006d8u, 0x0003003eu, 0x000006d2u, 0x000006d9u, 0x00070050u, 0x00000237u, 0x000006dbu, 0x000006d9u, 0x000006d9u, 0x000006d9u, 0x000006d9u, 0x000500c2u, 0x00000237u, 0x000006deu, 0x000006dbu, 0x000006ddu, 0x000500c7u, 0x00000237u, 0x000006e0u, 0x000006deu, 0x000006dfu, 0x0004007cu, 0x00000009u, 0x000006e1u, 0x000006e0u, 0x0003003eu, 0x00000671u, 0x000006e1u, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000092u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000093u, 0x0004003bu, 0x00000007u, 0x000006efu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00000709u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000714u, 0x00000007u, 0x000300f7u, 0x000006e6u, 0x00000000u, 0x000700fbu, 0x00000657u, 0x000006e6u, 0x00000002u, 0x000006e4u, 0x00000003u, 0x000006e5u, 0x000200f8u, 0x000006e4u, 0x00050041u, 0x00000201u, 0x000006e8u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000006e9u, 0x000006e8u, 0x000500c3u, 0x00000008u, 0x000006eau, 0x000006e9u, 0x00000218u, 0x00050041u, 0x00000201u, 0x000006ebu, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000006ecu, 0x000006ebu, 0x000500c7u, 0x00000008u, 0x000006edu, 0x000006ecu, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x000006eeu, 0x000006eau, 0x000006edu, 0x0003003eu, 0x000006e7u, 0x000006eeu, 0x00050041u, 0x00000201u, 0x000006f0u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000006f1u, 0x000006f0u, 0x0004007cu, 0x00000006u, 0x000006f2u, 0x000006f1u, 0x000500c7u, 0x00000006u, 0x000006f3u, 0x000006f2u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000006f5u, 0x000006f3u, 0x000006f4u, 0x0003003eu, 0x000006efu, 0x000006f5u, 0x00050041u, 0x00000201u, 0x000006f6u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000006f7u, 0x000006f6u, 0x0004007cu, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x000500c7u, 0x00000006u, 0x000006f9u, 0x000006f8u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000006fau, 0x000006f9u, 0x00000485u, 0x000500c5u, 0x00000006u, 0x000006fcu, 0x000006f5u, 0x000006fau, 0x0003003eu, 0x000006efu, 0x000006fcu, 0x0004003du, 0x00000008u, 0x000006feu, 0x000006ebu, 0x0004007cu, 0x00000006u, 0x000006ffu, 0x000006feu, 0x000500c7u, 0x00000006u, 0x00000700u, 0x000006ffu, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x00000702u, 0x00000700u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x00000704u, 0x000006fcu, 0x00000702u, 0x0003003eu, 0x000006efu, 0x00000704u, 0x0004007cu, 0x00000008u, 0x00000707u, 0x00000704u, 0x0003003eu, 0x00000705u, 0x00000707u, 0x000200f9u, 0x000006e6u, 0x000200f8u, 0x000006e5u, 0x0004003du, 0x00000009u, 0x0000070au, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000070bu, 0x0000070au, 0x0000070au, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000070cu, 0x0000070bu, 0x0003003eu, 0x00000709u, 0x0000070cu, 0x00050041u, 0x00000007u, 0x0000070eu, 0x00000709u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000070fu, 0x0000070eu, 0x000500c4u, 0x00000006u, 0x00000710u, 0x0000070fu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00000711u, 0x00000709u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000712u, 0x00000711u, 0x000500c5u, 0x00000006u, 0x00000713u, 0x00000710u, 0x00000712u, 0x0003003eu, 0x0000070du, 0x00000713u, 0x000500c7u, 0x00000006u, 0x00000716u, 0x00000713u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000717u, 0x00000716u, 0x0000048bu, 0x0003003eu, 0x00000714u, 0x00000717u, 0x000500c2u, 0x00000006u, 0x00000719u, 0x00000713u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x0000071au, 0x00000719u, 0x0003003eu, 0x00000705u, 0x0000071au, 0x000500c7u, 0x00000006u, 0x0000071cu, 0x00000713u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x0000071du, 0x0000071cu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x0000071fu, 0x0000071du, 0x00000717u, 0x0004007cu, 0x00000008u, 0x00000720u, 0x0000071fu, 0x0003003eu, 0x000006e7u, 0x00000720u, 0x000200f9u, 0x000006e6u, 0x000200f8u, 0x000006e6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000094u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000095u, 0x0004003bu, 0x00000007u, 0x00000723u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000724u, 0x00000705u, 0x0004007cu, 0x00000006u, 0x00000725u, 0x00000724u, 0x000500c4u, 0x00000006u, 0x00000726u, 0x00000725u, 0x00000701u, 0x0004003du, 0x00000008u, 0x00000727u, 0x000006e7u, 0x0004007cu, 0x00000006u, 0x00000728u, 0x00000727u, 0x000500c5u, 0x00000006u, 0x00000729u, 0x00000726u, 0x00000728u, 0x0003003eu, 0x00000723u, 0x00000729u, 0x000300f7u, 0x0000072cu, 0x00000000u, 0x000700fbu, 0x00000657u, 0x0000072cu, 0x00000002u, 0x0000072au, 0x00000003u, 0x0000072bu, 0x000200f8u, 0x0000072au, 0x000500c2u, 0x00000006u, 0x0000072fu, 0x00000729u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x00000730u, 0x0000072fu, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00000731u, 0x00000730u, 0x00050041u, 0x00000201u, 0x00000732u, 0x00000671u, 0x00000374u, 0x0003003eu, 0x00000732u, 0x00000731u, 0x000500c2u, 0x00000006u, 0x00000735u, 0x00000729u, 0x00000734u, 0x000500c7u, 0x00000006u, 0x00000736u, 0x00000735u, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00000737u, 0x00000736u, 0x00050041u, 0x00000201u, 0x00000738u, 0x00000671u, 0x00000485u, 0x0003003eu, 0x00000738u, 0x00000737u, 0x000500c2u, 0x00000006u, 0x0000073au, 0x00000729u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x0000073bu, 0x0000073au, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x0000073cu, 0x0000073bu, 0x00050041u, 0x00000201u, 0x0000073du, 0x00000671u, 0x000003c4u, 0x0003003eu, 0x0000073du, 0x0000073cu, 0x000500c7u, 0x00000006u, 0x00000740u, 0x00000729u, 0x0000073fu, 0x000500c4u, 0x00000006u, 0x00000741u, 0x00000740u, 0x00000734u, 0x0004007cu, 0x00000008u, 0x00000742u, 0x00000741u, 0x00050041u, 0x00000201u, 0x00000743u, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x00000743u, 0x00000742u, 0x000200f9u, 0x0000072cu, 0x000200f8u, 0x0000072bu, 0x000500c2u, 0x00000006u, 0x00000746u, 0x00000729u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x00000747u, 0x00000746u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00000748u, 0x00000747u, 0x00050041u, 0x00000201u, 0x00000749u, 0x00000671u, 0x00000374u, 0x0003003eu, 0x00000749u, 0x00000748u, 0x000500c2u, 0x00000006u, 0x0000074bu, 0x00000729u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x0000074cu, 0x0000074bu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000074du, 0x0000074cu, 0x00050041u, 0x00000201u, 0x0000074eu, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x0000074eu, 0x0000074du, 0x000200f9u, 0x0000072cu, 0x000200f8u, 0x0000072cu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000098u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x00000096u, 0x00030037u, 0x00000007u, 0x00000097u, 0x000200f8u, 0x00000099u, 0x0004003bu, 0x0000003eu, 0x0000075au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000753u, 0x00000096u, 0x000500c7u, 0x00000006u, 0x00000754u, 0x00000753u, 0x00000681u, 0x0003003eu, 0x00000096u, 0x00000754u, 0x0004003du, 0x00000006u, 0x00000755u, 0x00000097u, 0x00050084u, 0x00000006u, 0x00000757u, 0x00000755u, 0x00000756u, 0x0004003du, 0x00000006u, 0x00000758u, 0x00000096u, 0x00050080u, 0x00000006u, 0x00000759u, 0x00000758u, 0x00000757u, 0x0003003eu, 0x00000096u, 0x00000759u, 0x0004003du, 0x00000006u, 0x0000075bu, 0x00000096u, 0x000500c6u, 0x00000006u, 0x0000075cu, 0x0000075bu, 0x00000485u, 0x00060041u, 0x00000270u, 0x0000075du, 0x0000068du, 0x00000203u, 0x0000075cu, 0x0004003du, 0x0000022bu, 0x0000075eu, 0x0000075du, 0x00040071u, 0x00000006u, 0x0000075fu, 0x0000075eu, 0x0004007cu, 0x00000008u, 0x00000760u, 0x0000075fu, 0x0003003eu, 0x0000075au, 0x00000760u, 0x000500c3u, 0x00000008u, 0x00000762u, 0x00000760u, 0x00000215u, 0x0003003eu, 0x00000705u, 0x00000762u, 0x0004003du, 0x00000006u, 0x00000763u, 0x00000096u, 0x00060041u, 0x00000277u, 0x00000764u, 0x00000678u, 0x00000203u, 0x00000763u, 0x0004003du, 0x00000229u, 0x00000765u, 0x00000764u, 0x00040071u, 0x00000006u, 0x00000766u, 0x00000765u, 0x0004007cu, 0x00000008u, 0x00000767u, 0x00000766u, 0x000500c7u, 0x00000008u, 0x00000769u, 0x00000760u, 0x00000218u, 0x000500c4u, 0x00000008u, 0x0000076au, 0x00000769u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x0000076bu, 0x00000767u, 0x0000076au, 0x0003003eu, 0x000006e7u, 0x0000076bu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000009cu, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000009au, 0x00030037u, 0x00000007u, 0x0000009bu, 0x000200f8u, 0x0000009du, 0x0004003bu, 0x000007c1u, 0x000007c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000007f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007fdu, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00000820u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000823u, 0x00000007u, 0x0004003du, 0x0000005du, 0x0000076cu, 0x00000752u, 0x000300f7u, 0x0000076eu, 0x00000000u, 0x000400fau, 0x0000076cu, 0x0000076du, 0x0000076eu, 0x000200f8u, 0x0000076du, 0x000300f7u, 0x00000774u, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x00000774u, 0x00000000u, 0x0000076fu, 0x00000001u, 0x00000770u, 0x00000002u, 0x00000771u, 0x00000003u, 0x00000772u, 0x00000004u, 0x00000773u, 0x000200f8u, 0x0000076fu, 0x0004003du, 0x00000006u, 0x00000775u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x00000776u, 0x00000775u, 0x0000065eu, 0x0003003eu, 0x0000009au, 0x00000776u, 0x0004003du, 0x00000006u, 0x00000777u, 0x0000009bu, 0x00050084u, 0x00000006u, 0x00000778u, 0x00000777u, 0x0000065du, 0x0004003du, 0x00000006u, 0x00000779u, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000077au, 0x00000779u, 0x00000778u, 0x0003003eu, 0x0000009au, 0x0000077au, 0x0004003du, 0x00000006u, 0x0000077bu, 0x0000009au, 0x000500c6u, 0x00000006u, 0x0000077cu, 0x0000077bu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x0000077du, 0x00000374u, 0x00060041u, 0x00000277u, 0x0000077eu, 0x00000669u, 0x00000203u, 0x0000077cu, 0x0003003eu, 0x0000077eu, 0x0000077du, 0x0004003du, 0x00000006u, 0x0000077fu, 0x0000009au, 0x000500c7u, 0x00000006u, 0x00000780u, 0x0000077fu, 0x00000485u, 0x000500abu, 0x0000005du, 0x00000781u, 0x00000780u, 0x00000374u, 0x000300f7u, 0x00000783u, 0x00000000u, 0x000400fau, 0x00000781u, 0x00000782u, 0x00000783u, 0x000200f8u, 0x00000782u, 0x0004003du, 0x00000006u, 0x00000784u, 0x0000009au, 0x000500c2u, 0x00000006u, 0x00000785u, 0x00000784u, 0x00000485u, 0x00050041u, 0x00000201u, 0x00000786u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000787u, 0x00000786u, 0x00040071u, 0x00000229u, 0x00000788u, 0x00000787u, 0x00060041u, 0x00000277u, 0x00000789u, 0x00000678u, 0x00000203u, 0x00000785u, 0x0003003eu, 0x00000789u, 0x00000788u, 0x000200f9u, 0x00000783u, 0x000200f8u, 0x00000783u, 0x000300f7u, 0x00000791u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00000790u, 0x00000791u, 0x000200f8u, 0x00000790u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x00000793u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x00000794u, 0x00000793u, 0x0000048bu, 0x00050080u, 0x00000006u, 0x00000795u, 0x00000794u, 0x0000065du, 0x00040071u, 0x00000229u, 0x00000796u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x00000797u, 0x00000669u, 0x00000203u, 0x00000795u, 0x0003003eu, 0x00000797u, 0x00000796u, 0x000200f9u, 0x00000791u, 0x000200f8u, 0x00000791u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000770u, 0x0004003du, 0x00000006u, 0x00000799u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x0000079au, 0x00000799u, 0x0000065eu, 0x0003003eu, 0x0000009au, 0x0000079au, 0x0004003du, 0x00000006u, 0x0000079bu, 0x0000009bu, 0x00050084u, 0x00000006u, 0x0000079cu, 0x0000079bu, 0x0000065du, 0x0004003du, 0x00000006u, 0x0000079du, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000079eu, 0x0000079du, 0x0000079cu, 0x0003003eu, 0x0000009au, 0x0000079eu, 0x0004003du, 0x00000006u, 0x0000079fu, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007a0u, 0x0000079fu, 0x0000048bu, 0x00050041u, 0x00000201u, 0x000007a1u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000007a2u, 0x000007a1u, 0x00040071u, 0x00000229u, 0x000007a3u, 0x000007a2u, 0x00060041u, 0x00000277u, 0x000007a4u, 0x00000669u, 0x00000203u, 0x000007a0u, 0x0003003eu, 0x000007a4u, 0x000007a3u, 0x0004003du, 0x00000006u, 0x000007a5u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007a6u, 0x000007a5u, 0x00000485u, 0x000500abu, 0x0000005du, 0x000007a7u, 0x000007a6u, 0x00000374u, 0x000300f7u, 0x000007a9u, 0x00000000u, 0x000400fau, 0x000007a7u, 0x000007a8u, 0x000007a9u, 0x000200f8u, 0x000007a8u, 0x0004003du, 0x00000006u, 0x000007aau, 0x0000009au, 0x000500c2u, 0x00000006u, 0x000007abu, 0x000007aau, 0x00000485u, 0x0004003du, 0x00000008u, 0x000007adu, 0x000007a1u, 0x000500c7u, 0x00000008u, 0x000007aeu, 0x000007adu, 0x00000212u, 0x00050084u, 0x00000008u, 0x000007afu, 0x000007aeu, 0x00000218u, 0x00040071u, 0x00000229u, 0x000007b0u, 0x000007afu, 0x00060041u, 0x00000277u, 0x000007b1u, 0x00000678u, 0x00000203u, 0x000007abu, 0x0003003eu, 0x000007b1u, 0x000007b0u, 0x000200f9u, 0x000007a9u, 0x000200f8u, 0x000007a9u, 0x000300f7u, 0x000007b3u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000007b2u, 0x000007b3u, 0x000200f8u, 0x000007b2u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x000007b4u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007b5u, 0x000007b4u, 0x0000048bu, 0x00050080u, 0x00000006u, 0x000007b6u, 0x000007b5u, 0x0000065du, 0x00040071u, 0x00000229u, 0x000007b7u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x000007b8u, 0x00000669u, 0x00000203u, 0x000007b6u, 0x0003003eu, 0x000007b8u, 0x000007b7u, 0x000200f9u, 0x000007b3u, 0x000200f8u, 0x000007b3u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000771u, 0x0004003du, 0x00000006u, 0x000007bau, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007bbu, 0x000007bau, 0x00000681u, 0x0003003eu, 0x0000009au, 0x000007bbu, 0x0004003du, 0x00000006u, 0x000007bcu, 0x0000009bu, 0x00050084u, 0x00000006u, 0x000007beu, 0x000007bcu, 0x000007bdu, 0x0004003du, 0x00000006u, 0x000007bfu, 0x0000009au, 0x00050080u, 0x00000006u, 0x000007c0u, 0x000007bfu, 0x000007beu, 0x0003003eu, 0x0000009au, 0x000007c0u, 0x0004003du, 0x00000009u, 0x000007c3u, 0x00000671u, 0x0004007cu, 0x00000237u, 0x000007c4u, 0x000007c3u, 0x0003003eu, 0x000007c2u, 0x000007c4u, 0x0004003du, 0x00000237u, 0x000007c5u, 0x000007c2u, 0x0008004fu, 0x00000353u, 0x000007c6u, 0x000007c5u, 0x000007c5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000353u, 0x000007c8u, 0x000007c6u, 0x0000eeaeu, 0x0004003du, 0x00000237u, 0x000007c9u, 0x000007c2u, 0x0009004fu, 0x00000237u, 0x000007cau, 0x000007c9u, 0x000007c8u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000007c2u, 0x000007cau, 0x00050041u, 0x00000007u, 0x000007ccu, 0x000007c2u, 0x0000048bu, 0x0004003du, 0x00000006u, 0x000007cdu, 0x000007ccu, 0x000500c2u, 0x00000006u, 0x000007ceu, 0x000007cdu, 0x00000734u, 0x0003003eu, 0x000007cbu, 0x000007ceu, 0x00050041u, 0x00000007u, 0x000007d0u, 0x000007c2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000007d1u, 0x000007d0u, 0x000500c4u, 0x00000006u, 0x000007d2u, 0x000007d1u, 0x0000035bu, 0x00050041u, 0x00000007u, 0x000007d3u, 0x000007c2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000007d4u, 0x000007d3u, 0x000500c4u, 0x00000006u, 0x000007d5u, 0x000007d4u, 0x0000048bu, 0x000500c5u, 0x00000006u, 0x000007d6u, 0x000007d2u, 0x000007d5u, 0x00050041u, 0x00000007u, 0x000007d7u, 0x000007c2u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000007d8u, 0x000007d7u, 0x000500c2u, 0x00000006u, 0x000007d9u, 0x000007d8u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000007dau, 0x000007d6u, 0x000007d9u, 0x000500c2u, 0x00000006u, 0x000007dcu, 0x000007ceu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000007ddu, 0x000007dau, 0x000007dcu, 0x0003003eu, 0x000007cfu, 0x000007ddu, 0x0004003du, 0x00000006u, 0x000007deu, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007dfu, 0x000007deu, 0x00000485u, 0x00040071u, 0x0000022bu, 0x000007e1u, 0x000007ddu, 0x00060041u, 0x00000270u, 0x000007e2u, 0x0000068du, 0x00000203u, 0x000007dfu, 0x0003003eu, 0x000007e2u, 0x000007e1u, 0x0004003du, 0x00000006u, 0x000007e3u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007e5u, 0x000007ceu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x000007e6u, 0x000007e5u, 0x00060041u, 0x00000277u, 0x000007e7u, 0x00000678u, 0x00000203u, 0x000007e3u, 0x0003003eu, 0x000007e7u, 0x000007e6u, 0x000300f7u, 0x000007e9u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000007e8u, 0x000007e9u, 0x000200f8u, 0x000007e8u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x000007eau, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007ebu, 0x000007eau, 0x00000485u, 0x00050080u, 0x00000006u, 0x000007edu, 0x000007ebu, 0x000007ecu, 0x00040071u, 0x0000022bu, 0x000007efu, 0x000007eeu, 0x00060041u, 0x00000270u, 0x000007f0u, 0x0000068du, 0x00000203u, 0x000007edu, 0x0003003eu, 0x000007f0u, 0x000007efu, 0x000200f9u, 0x000007e9u, 0x000200f8u, 0x000007e9u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000772u, 0x0004003du, 0x00000006u, 0x000007f2u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007f3u, 0x000007f2u, 0x00000681u, 0x0003003eu, 0x0000009au, 0x000007f3u, 0x0004003du, 0x00000006u, 0x000007f4u, 0x0000009bu, 0x00050084u, 0x00000006u, 0x000007f6u, 0x000007f4u, 0x000007f5u, 0x0004003du, 0x00000006u, 0x000007f7u, 0x0000009au, 0x00050080u, 0x00000006u, 0x000007f8u, 0x000007f7u, 0x000007f6u, 0x0003003eu, 0x0000009au, 0x000007f8u, 0x0004003du, 0x00000009u, 0x000007fau, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x000007fbu, 0x000007fau, 0x000007fau, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x000007fcu, 0x000007fbu, 0x0003003eu, 0x000007f9u, 0x000007fcu, 0x00050041u, 0x00000007u, 0x000007feu, 0x000007f9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000007ffu, 0x000007feu, 0x000500c4u, 0x00000006u, 0x00000800u, 0x000007ffu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00000801u, 0x000007f9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000802u, 0x00000801u, 0x000500c5u, 0x00000006u, 0x00000803u, 0x00000800u, 0x00000802u, 0x0003003eu, 0x000007fdu, 0x00000803u, 0x0004003du, 0x00000006u, 0x00000804u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x00000805u, 0x00000804u, 0x00000485u, 0x00040071u, 0x0000022bu, 0x00000807u, 0x00000803u, 0x00060041u, 0x00000270u, 0x00000808u, 0x0000068du, 0x00000203u, 0x00000805u, 0x0003003eu, 0x00000808u, 0x00000807u, 0x0004003du, 0x00000006u, 0x00000809u, 0x0000009au, 0x0004003du, 0x00000006u, 0x0000080bu, 0x00000801u, 0x000500c7u, 0x00000006u, 0x0000080cu, 0x0000080bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000080du, 0x0000080cu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x0000080eu, 0x0000080du, 0x00060041u, 0x00000277u, 0x0000080fu, 0x00000678u, 0x00000203u, 0x00000809u, 0x0003003eu, 0x0000080fu, 0x0000080eu, 0x000300f7u, 0x00000811u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00000810u, 0x00000811u, 0x000200f8u, 0x00000810u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x00000812u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x00000813u, 0x00000812u, 0x00000485u, 0x00050080u, 0x00000006u, 0x00000815u, 0x00000813u, 0x00000814u, 0x00040071u, 0x0000022bu, 0x00000816u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00000817u, 0x0000068du, 0x00000203u, 0x00000815u, 0x0003003eu, 0x00000817u, 0x00000816u, 0x000200f9u, 0x00000811u, 0x000200f8u, 0x00000811u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000773u, 0x0004003du, 0x00000006u, 0x00000819u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x0000081au, 0x00000819u, 0x000006cau, 0x0003003eu, 0x0000009au, 0x0000081au, 0x0004003du, 0x00000006u, 0x0000081bu, 0x0000009bu, 0x00050084u, 0x00000006u, 0x0000081du, 0x0000081bu, 0x0000081cu, 0x0004003du, 0x00000006u, 0x0000081eu, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000081fu, 0x0000081eu, 0x0000081du, 0x0003003eu, 0x0000009au, 0x0000081fu, 0x0004003du, 0x00000009u, 0x00000821u, 0x00000671u, 0x0004007cu, 0x00000237u, 0x00000822u, 0x00000821u, 0x0003003eu, 0x00000820u, 0x00000822u, 0x00050041u, 0x00000007u, 0x00000824u, 0x00000820u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000825u, 0x00000824u, 0x000500c4u, 0x00000006u, 0x00000826u, 0x00000825u, 0x000006dcu, 0x00050041u, 0x00000007u, 0x00000827u, 0x00000820u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000828u, 0x00000827u, 0x000500c4u, 0x00000006u, 0x00000829u, 0x00000828u, 0x00000377u, 0x000500c5u, 0x00000006u, 0x0000082au, 0x00000826u, 0x00000829u, 0x00050041u, 0x00000007u, 0x0000082bu, 0x00000820u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x0000082cu, 0x0000082bu, 0x000500c4u, 0x00000006u, 0x0000082du, 0x0000082cu, 0x0000035bu, 0x000500c5u, 0x00000006u, 0x0000082eu, 0x0000082au, 0x0000082du, 0x00050041u, 0x00000007u, 0x0000082fu, 0x00000820u, 0x0000048bu, 0x0004003du, 0x00000006u, 0x00000830u, 0x0000082fu, 0x000500c4u, 0x00000006u, 0x00000831u, 0x00000830u, 0x00000374u, 0x000500c5u, 0x00000006u, 0x00000832u, 0x0000082eu, 0x00000831u, 0x0003003eu, 0x00000823u, 0x00000832u, 0x0004003du, 0x00000006u, 0x00000833u, 0x0000009au, 0x00060041u, 0x0000026bu, 0x00000835u, 0x000006d6u, 0x00000203u, 0x00000833u, 0x0003003eu, 0x00000835u, 0x00000832u, 0x0004003du, 0x00000006u, 0x00000836u, 0x0000009au, 0x00050084u, 0x00000006u, 0x00000837u, 0x000003c4u, 0x00000836u, 0x00050041u, 0x00000201u, 0x00000838u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000839u, 0x00000838u, 0x000500c7u, 0x00000008u, 0x0000083au, 0x00000839u, 0x00000212u, 0x00050084u, 0x00000008u, 0x0000083bu, 0x0000083au, 0x00000218u, 0x00040071u, 0x00000229u, 0x0000083cu, 0x0000083bu, 0x00060041u, 0x00000277u, 0x0000083du, 0x00000678u, 0x00000203u, 0x00000837u, 0x0003003eu, 0x0000083du, 0x0000083cu, 0x0004003du, 0x00000006u, 0x0000083eu, 0x0000009au, 0x00050084u, 0x00000006u, 0x0000083fu, 0x000003c4u, 0x0000083eu, 0x00050080u, 0x00000006u, 0x00000840u, 0x0000083fu, 0x00000485u, 0x00050041u, 0x00000201u, 0x00000841u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000842u, 0x00000841u, 0x000500c7u, 0x00000008u, 0x00000843u, 0x00000842u, 0x00000212u, 0x00050084u, 0x00000008u, 0x00000844u, 0x00000843u, 0x00000218u, 0x00040071u, 0x00000229u, 0x00000845u, 0x00000844u, 0x00060041u, 0x00000277u, 0x00000846u, 0x00000678u, 0x00000203u, 0x00000840u, 0x0003003eu, 0x00000846u, 0x00000845u, 0x000300f7u, 0x00000848u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00000847u, 0x00000848u, 0x000200f8u, 0x00000847u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x00000849u, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000084bu, 0x00000849u, 0x0000084au, 0x00060041u, 0x0000026bu, 0x0000084du, 0x000006d6u, 0x00000203u, 0x0000084bu, 0x0003003eu, 0x0000084du, 0x0000084cu, 0x000200f9u, 0x00000848u, 0x000200f8u, 0x00000848u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000774u, 0x000200f9u, 0x0000076eu, 0x000200f8u, 0x0000076eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a0u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000009eu, 0x00030037u, 0x00000007u, 0x0000009fu, 0x000200f8u, 0x000000a1u, 0x000300f7u, 0x00000853u, 0x00000000u, 0x000400fau, 0x00000851u, 0x00000852u, 0x00000853u, 0x000200f8u, 0x00000852u, 0x0004003du, 0x0000005du, 0x00000855u, 0x00000854u, 0x000300f7u, 0x00000857u, 0x00000000u, 0x000400fau, 0x00000855u, 0x00000856u, 0x00000857u, 0x000200f8u, 0x00000856u, 0x0004003du, 0x00000006u, 0x00000858u, 0x0000009eu, 0x000500c7u, 0x00000006u, 0x00000859u, 0x00000858u, 0x00000681u, 0x0003003eu, 0x0000009eu, 0x00000859u, 0x0004003du, 0x00000006u, 0x0000085au, 0x0000009fu, 0x00050084u, 0x00000006u, 0x0000085cu, 0x0000085au, 0x0000085bu, 0x0004003du, 0x00000006u, 0x0000085du, 0x0000009eu, 0x00050080u, 0x00000006u, 0x0000085eu, 0x0000085du, 0x0000085cu, 0x0003003eu, 0x0000009eu, 0x0000085eu, 0x0004003du, 0x00000006u, 0x0000085fu, 0x0000009eu, 0x000500c6u, 0x00000006u, 0x00000860u, 0x0000085fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000861u, 0x00000705u, 0x000500c4u, 0x00000008u, 0x00000862u, 0x00000861u, 0x00000215u, 0x0004003du, 0x00000008u, 0x00000863u, 0x000006e7u, 0x000500c3u, 0x00000008u, 0x00000864u, 0x00000863u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x00000865u, 0x00000862u, 0x00000864u, 0x00040071u, 0x0000022bu, 0x00000866u, 0x00000865u, 0x00060041u, 0x00000270u, 0x00000867u, 0x0000068du, 0x00000203u, 0x00000860u, 0x0003003eu, 0x00000867u, 0x00000866u, 0x0004003du, 0x00000006u, 0x00000868u, 0x0000009eu, 0x0004003du, 0x00000008u, 0x00000869u, 0x000006e7u, 0x000500c7u, 0x00000008u, 0x0000086au, 0x00000869u, 0x00000218u, 0x00040071u, 0x00000229u, 0x0000086bu, 0x0000086au, 0x00060041u, 0x00000277u, 0x0000086cu, 0x00000678u, 0x00000203u, 0x00000868u, 0x0003003eu, 0x0000086cu, 0x0000086bu, 0x000300f7u, 0x0000086eu, 0x00000000u, 0x000400fau, 0x0000078fu, 0x0000086du, 0x0000086eu, 0x000200f8u, 0x0000086du, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x0000086fu, 0x0000009eu, 0x000500c6u, 0x00000006u, 0x00000870u, 0x0000086fu, 0x00000485u, 0x00050080u, 0x00000006u, 0x00000872u, 0x00000870u, 0x00000871u, 0x00040071u, 0x0000022bu, 0x00000873u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00000874u, 0x0000068du, 0x00000203u, 0x00000872u, 0x0003003eu, 0x00000874u, 0x00000873u, 0x000200f9u, 0x0000086eu, 0x000200f8u, 0x0000086eu, 0x000200f9u, 0x00000857u, 0x000200f8u, 0x00000857u, 0x000200f9u, 0x00000853u, 0x000200f8u, 0x00000853u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000aau, 0x00000000u, 0x000000a4u, 0x00030037u, 0x000000a3u, 0x000000a5u, 0x00030037u, 0x00000007u, 0x000000a6u, 0x00030037u, 0x00000007u, 0x000000a7u, 0x00030037u, 0x00000007u, 0x000000a8u, 0x00030037u, 0x00000007u, 0x000000a9u, 0x000200f8u, 0x000000abu, 0x0004003bu, 0x000000a3u, 0x0000087eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000888u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000890u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000089eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008afu, 0x00000007u, 0x0003003eu, 0x00000752u, 0x00000543u, 0x0003003eu, 0x00000854u, 0x00000543u, 0x0004003du, 0x000000a2u, 0x00000875u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x00000876u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000877u, 0x000000a7u, 0x00050050u, 0x000000a2u, 0x00000878u, 0x00000876u, 0x00000877u, 0x000500b0u, 0x00000879u, 0x0000087au, 0x00000875u, 0x00000878u, 0x0004009bu, 0x0000005du, 0x0000087bu, 0x0000087au, 0x000300f7u, 0x0000087du, 0x00000000u, 0x000400fau, 0x0000087bu, 0x0000087cu, 0x0000087du, 0x000200f8u, 0x0000087cu, 0x0004003du, 0x000000a2u, 0x0000087fu, 0x000000a5u, 0x00050050u, 0x000000a2u, 0x00000883u, 0x00000882u, 0x00000882u, 0x000500c7u, 0x000000a2u, 0x00000884u, 0x0000087fu, 0x00000883u, 0x0003003eu, 0x0000087eu, 0x00000884u, 0x0004003du, 0x000000a2u, 0x00000885u, 0x000000a5u, 0x00050050u, 0x0000005fu, 0x00000886u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x00000887u, 0x00000885u, 0x00000886u, 0x0003003eu, 0x000000a5u, 0x00000887u, 0x00050041u, 0x00000007u, 0x00000889u, 0x0000087eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000088au, 0x00000889u, 0x00050084u, 0x00000006u, 0x0000088cu, 0x0000088au, 0x0000088bu, 0x00050041u, 0x00000007u, 0x0000088du, 0x0000087eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000088eu, 0x0000088du, 0x00050080u, 0x00000006u, 0x0000088fu, 0x0000088cu, 0x0000088eu, 0x0003003eu, 0x00000888u, 0x0000088fu, 0x0004003du, 0x00000006u, 0x00000891u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000892u, 0x000000a6u, 0x000500c2u, 0x00000006u, 0x00000893u, 0x00000892u, 0x0000078du, 0x00050041u, 0x00000007u, 0x00000894u, 0x000000a5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000895u, 0x00000894u, 0x00050084u, 0x00000006u, 0x00000896u, 0x00000893u, 0x00000895u, 0x00050080u, 0x00000006u, 0x00000897u, 0x00000891u, 0x00000896u, 0x00050041u, 0x00000007u, 0x00000898u, 0x000000a5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000899u, 0x00000898u, 0x00050080u, 0x00000006u, 0x0000089au, 0x00000897u, 0x00000899u, 0x0003003eu, 0x00000890u, 0x0000089au, 0x0003003eu, 0x0000089cu, 0x0000089au, 0x0003003eu, 0x0000089eu, 0x0000089au, 0x0003003eu, 0x000008a0u, 0x0000088fu, 0x00060039u, 0x00000002u, 0x000008a2u, 0x00000090u, 0x0000089eu, 0x000008a0u, 0x0004003du, 0x00000006u, 0x000008a3u, 0x000000a9u, 0x0004003du, 0x00000006u, 0x000008a4u, 0x000000a6u, 0x000500c2u, 0x00000006u, 0x000008a5u, 0x000008a4u, 0x0000078du, 0x0004003du, 0x00000006u, 0x000008a7u, 0x00000894u, 0x00050084u, 0x00000006u, 0x000008a8u, 0x000008a5u, 0x000008a7u, 0x00050080u, 0x00000006u, 0x000008a9u, 0x000008a3u, 0x000008a8u, 0x0004003du, 0x00000006u, 0x000008abu, 0x00000898u, 0x00050080u, 0x00000006u, 0x000008acu, 0x000008a9u, 0x000008abu, 0x0003003eu, 0x00000890u, 0x000008acu, 0x0003003eu, 0x000008adu, 0x000008acu, 0x0003003eu, 0x000008afu, 0x0000088fu, 0x00060039u, 0x00000002u, 0x000008b1u, 0x00000098u, 0x000008adu, 0x000008afu, 0x000200f9u, 0x0000087du, 0x000200f8u, 0x0000087du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000afu, 0x00000000u, 0x000000acu, 0x00030037u, 0x000000a3u, 0x000000adu, 0x00030037u, 0x00000007u, 0x000000aeu, 0x000200f8u, 0x000000b0u, 0x0004003bu, 0x00000007u, 0x000008b2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000008beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c2u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008b3u, 0x000000adu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000008b4u, 0x000008b3u, 0x000500c2u, 0x00000006u, 0x000008b5u, 0x000008b4u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000008b6u, 0x000000aeu, 0x00050080u, 0x00000006u, 0x000008b7u, 0x000008b6u, 0x0000048bu, 0x000500c2u, 0x00000006u, 0x000008b8u, 0x000008b7u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000008b9u, 0x000008b5u, 0x000008b8u, 0x00050041u, 0x00000007u, 0x000008bau, 0x000000adu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000008bbu, 0x000008bau, 0x000500c2u, 0x00000006u, 0x000008bcu, 0x000008bbu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000008bdu, 0x000008b9u, 0x000008bcu, 0x0003003eu, 0x000008b2u, 0x000008bdu, 0x0004003du, 0x000000a2u, 0x000008bfu, 0x000000adu, 0x000500c7u, 0x000000a2u, 0x000008c1u, 0x000008bfu, 0x0000eeafu, 0x0003003eu, 0x000008beu, 0x000008c1u, 0x0004003du, 0x0000005du, 0x000008c3u, 0x00000752u, 0x000600a9u, 0x00000006u, 0x000008c4u, 0x000008c3u, 0x00000485u, 0x00000374u, 0x0004003du, 0x0000005du, 0x000008c5u, 0x00000854u, 0x000600a9u, 0x00000006u, 0x000008c6u, 0x000008c5u, 0x00000485u, 0x00000374u, 0x00050084u, 0x00000006u, 0x000008c7u, 0x000003c4u, 0x000008c6u, 0x00050080u, 0x00000006u, 0x000008c8u, 0x000008c4u, 0x000008c7u, 0x0003003eu, 0x000008c2u, 0x000008c8u, 0x00050041u, 0x00000007u, 0x000008c9u, 0x000008beu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000008cau, 0x000008c9u, 0x00050041u, 0x00000007u, 0x000008cbu, 0x000008beu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000008ccu, 0x000008cbu, 0x00050084u, 0x00000006u, 0x000008cdu, 0x000008ccu, 0x00000701u, 0x00050080u, 0x00000006u, 0x000008ceu, 0x000008cau, 0x000008cdu, 0x00050084u, 0x00000006u, 0x000008cfu, 0x000003c4u, 0x000008ceu, 0x000500c4u, 0x00000006u, 0x000008d1u, 0x000008c8u, 0x000008cfu, 0x0003003eu, 0x000008c2u, 0x000008d1u, 0x000500abu, 0x0000005du, 0x000008d3u, 0x000008d1u, 0x00000374u, 0x000300f7u, 0x000008d5u, 0x00000000u, 0x000400fau, 0x000008d3u, 0x000008d4u, 0x000008d5u, 0x000200f8u, 0x000008d4u, 0x00050080u, 0x00000006u, 0x000008dbu, 0x000008d9u, 0x000008bdu, 0x00060041u, 0x0000026bu, 0x000008dcu, 0x000006d6u, 0x00000203u, 0x000008dbu, 0x000700f1u, 0x00000006u, 0x000008deu, 0x000008dcu, 0x00000485u, 0x00000374u, 0x000008d1u, 0x000200f9u, 0x000008d5u, 0x000200f8u, 0x000008d5u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000b6u, 0x00000000u, 0x000000a4u, 0x00030037u, 0x000000a3u, 0x000000b1u, 0x00030037u, 0x00000007u, 0x000000b2u, 0x00030037u, 0x00000007u, 0x000000b3u, 0x00030037u, 0x00000007u, 0x000000b4u, 0x00030037u, 0x00000007u, 0x000000b5u, 0x000200f8u, 0x000000b7u, 0x0004003bu, 0x00000007u, 0x000008e7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000008eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000905u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000907u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000913u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000915u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000091cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091eu, 0x00000007u, 0x0004003du, 0x000000a2u, 0x000008dfu, 0x000000b1u, 0x0004003du, 0x00000006u, 0x000008e0u, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000008e1u, 0x000000b3u, 0x00050050u, 0x000000a2u, 0x000008e2u, 0x000008e0u, 0x000008e1u, 0x000500b0u, 0x00000879u, 0x000008e3u, 0x000008dfu, 0x000008e2u, 0x0004009bu, 0x0000005du, 0x000008e4u, 0x000008e3u, 0x000300f7u, 0x000008e6u, 0x00000000u, 0x000400fau, 0x000008e4u, 0x000008e5u, 0x000008e6u, 0x000200f8u, 0x000008e5u, 0x0004003du, 0x00000006u, 0x000008e8u, 0x000000b2u, 0x000500c2u, 0x00000006u, 0x000008e9u, 0x000008e8u, 0x0000078du, 0x0003003eu, 0x000008e7u, 0x000008e9u, 0x0004003du, 0x000000a2u, 0x000008ebu, 0x000000b1u, 0x00050050u, 0x000000a2u, 0x000008eeu, 0x000008edu, 0x000008edu, 0x000500c7u, 0x000000a2u, 0x000008efu, 0x000008ebu, 0x000008eeu, 0x0003003eu, 0x000008eau, 0x000008efu, 0x0004003du, 0x000000a2u, 0x000008f0u, 0x000000b1u, 0x00050050u, 0x0000005fu, 0x000008f1u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x000008f2u, 0x000008f0u, 0x000008f1u, 0x0003003eu, 0x000000b1u, 0x000008f2u, 0x00050041u, 0x00000007u, 0x000008f4u, 0x000008eau, 0x00000485u, 0x0004003du, 0x00000006u, 0x000008f5u, 0x000008f4u, 0x00050084u, 0x00000006u, 0x000008f7u, 0x000008f5u, 0x000008f6u, 0x00050041u, 0x00000007u, 0x000008f8u, 0x000008eau, 0x00000374u, 0x0004003du, 0x00000006u, 0x000008f9u, 0x000008f8u, 0x00050080u, 0x00000006u, 0x000008fau, 0x000008f7u, 0x000008f9u, 0x0003003eu, 0x000008f3u, 0x000008fau, 0x0004003du, 0x00000006u, 0x000008fcu, 0x000000b4u, 0x00050041u, 0x00000007u, 0x000008feu, 0x000000b1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000008ffu, 0x000008feu, 0x00050084u, 0x00000006u, 0x00000900u, 0x000008e9u, 0x000008ffu, 0x00050080u, 0x00000006u, 0x00000901u, 0x000008fcu, 0x00000900u, 0x00050041u, 0x00000007u, 0x00000902u, 0x000000b1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000903u, 0x00000902u, 0x00050080u, 0x00000006u, 0x00000904u, 0x00000901u, 0x00000903u, 0x0003003eu, 0x000008fbu, 0x00000904u, 0x0003003eu, 0x00000905u, 0x00000904u, 0x0003003eu, 0x00000907u, 0x000008fau, 0x00060039u, 0x00000002u, 0x00000909u, 0x0000009cu, 0x00000905u, 0x00000907u, 0x0004003du, 0x00000006u, 0x0000090au, 0x000000b5u, 0x0004003du, 0x00000006u, 0x0000090du, 0x000008feu, 0x00050084u, 0x00000006u, 0x0000090eu, 0x000008e9u, 0x0000090du, 0x00050080u, 0x00000006u, 0x0000090fu, 0x0000090au, 0x0000090eu, 0x0004003du, 0x00000006u, 0x00000911u, 0x00000902u, 0x00050080u, 0x00000006u, 0x00000912u, 0x0000090fu, 0x00000911u, 0x0003003eu, 0x000008fbu, 0x00000912u, 0x0003003eu, 0x00000913u, 0x00000912u, 0x0003003eu, 0x00000915u, 0x000008fau, 0x00060039u, 0x00000002u, 0x00000917u, 0x000000a0u, 0x00000913u, 0x00000915u, 0x000300f7u, 0x0000091bu, 0x00000000u, 0x000400fau, 0x00000919u, 0x0000091au, 0x0000091bu, 0x000200f8u, 0x0000091au, 0x0004003du, 0x000000a2u, 0x0000091du, 0x000000b1u, 0x0003003eu, 0x0000091cu, 0x0000091du, 0x0003003eu, 0x0000091eu, 0x000008e9u, 0x00060039u, 0x00000002u, 0x00000920u, 0x000000afu, 0x0000091cu, 0x0000091eu, 0x000200f9u, 0x0000091bu, 0x000200f8u, 0x0000091bu, 0x000200f9u, 0x000008e6u, 0x000200f8u, 0x000008e6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000bau, 0x00000000u, 0x000000b8u, 0x00030037u, 0x0000005eu, 0x000000b9u, 0x000200f8u, 0x000000bbu, 0x0004003bu, 0x0000003eu, 0x00000921u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000923u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000932u, 0x00000007u, 0x0004003du, 0x0000005du, 0x00000922u, 0x000000b9u, 0x000300f7u, 0x00000925u, 0x00000000u, 0x000400fau, 0x00000922u, 0x00000924u, 0x0000092au, 0x000200f8u, 0x00000924u, 0x00050041u, 0x00000201u, 0x00000926u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000927u, 0x00000926u, 0x000500c7u, 0x00000008u, 0x00000929u, 0x00000927u, 0x00000928u, 0x0003003eu, 0x00000923u, 0x00000929u, 0x000200f9u, 0x00000925u, 0x000200f8u, 0x0000092au, 0x0003003eu, 0x00000923u, 0x00000928u, 0x000200f9u, 0x00000925u, 0x000200f8u, 0x00000925u, 0x000700f5u, 0x00000008u, 0x0000ea1du, 0x00000929u, 0x00000924u, 0x00000928u, 0x0000092au, 0x0003003eu, 0x00000921u, 0x0000ea1du, 0x000300f7u, 0x00000931u, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x00000931u, 0x00000000u, 0x0000092cu, 0x00000001u, 0x0000092du, 0x00000002u, 0x0000092eu, 0x00000003u, 0x0000092fu, 0x00000004u, 0x00000930u, 0x000200f8u, 0x0000092cu, 0x0003003eu, 0x00000932u, 0x00000933u, 0x0003003eu, 0x00000921u, 0x00000928u, 0x000200f9u, 0x00000931u, 0x000200f8u, 0x0000092du, 0x0004003du, 0x00000009u, 0x00000935u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00000936u, 0x00000935u, 0x00000935u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000932u, 0x00000936u, 0x0003003eu, 0x00000921u, 0x00000928u, 0x000200f9u, 0x00000931u, 0x000200f8u, 0x0000092eu, 0x0004003du, 0x00000009u, 0x00000938u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00000939u, 0x00000938u, 0x00000938u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000003cu, 0x0000093bu, 0x00000939u, 0x0000eec5u, 0x0003003eu, 0x00000932u, 0x0000093bu, 0x000200f9u, 0x00000931u, 0x000200f8u, 0x0000092fu, 0x0004003du, 0x00000009u, 0x0000093du, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x0000093eu, 0x0000093du, 0x0000093du, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000932u, 0x0000093eu, 0x000200f9u, 0x00000931u, 0x000200f8u, 0x00000930u, 0x0004003du, 0x00000009u, 0x00000940u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00000941u, 0x00000940u, 0x00000940u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000932u, 0x00000941u, 0x000200f9u, 0x00000931u, 0x000200f8u, 0x00000931u, 0x000f00f5u, 0x00000008u, 0x0000ea21u, 0x0000ea1du, 0x00000925u, 0x00000928u, 0x0000092cu, 0x00000928u, 0x0000092du, 0x0000ea1du, 0x0000092eu, 0x0000ea1du, 0x0000092fu, 0x0000ea1du, 0x00000930u, 0x000f00f5u, 0x0000003cu, 0x0000ea1eu, 0x0000ea20u, 0x00000925u, 0x00000933u, 0x0000092cu, 0x00000936u, 0x0000092du, 0x0000093bu, 0x0000092eu, 0x0000093eu, 0x0000092fu, 0x00000941u, 0x00000930u, 0x00050051u, 0x00000008u, 0x00000946u, 0x0000ea1eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000947u, 0x0000ea1eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000948u, 0x0000ea1eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000949u, 0x00000946u, 0x00000947u, 0x00000948u, 0x0000ea21u, 0x000200feu, 0x00000949u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000beu, 0x00000000u, 0x000000bcu, 0x00030037u, 0x0000005cu, 0x000000bdu, 0x000200f8u, 0x000000bfu, 0x000300f7u, 0x0000094eu, 0x00000000u, 0x000400fau, 0x0000094cu, 0x0000094du, 0x00000953u, 0x000200f8u, 0x0000094du, 0x0004003du, 0x00000009u, 0x0000094fu, 0x000000bdu, 0x0008004fu, 0x0000003cu, 0x00000950u, 0x0000094fu, 0x0000094fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000951u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00000952u, 0x00000951u, 0x0000094fu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00000952u, 0x000200f9u, 0x0000094eu, 0x000200f8u, 0x00000953u, 0x0004003du, 0x00000009u, 0x00000954u, 0x000000bdu, 0x0003003eu, 0x00000671u, 0x00000954u, 0x000200f9u, 0x0000094eu, 0x000200f8u, 0x0000094eu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000c2u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x000000c0u, 0x00030037u, 0x00000007u, 0x000000c1u, 0x000200f8u, 0x000000c3u, 0x0004003bu, 0x0000005cu, 0x0000095fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000962u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000966u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000097cu, 0x00000007u, 0x000300f7u, 0x00000958u, 0x00000000u, 0x000900fbu, 0x00000657u, 0x00000958u, 0x00000000u, 0x00000955u, 0x00000001u, 0x00000956u, 0x00000002u, 0x00000957u, 0x000200f8u, 0x00000955u, 0x0003003eu, 0x00000671u, 0x00000611u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x00000958u, 0x000200f8u, 0x00000956u, 0x0004003du, 0x00000006u, 0x0000095au, 0x000000c0u, 0x000500c7u, 0x00000006u, 0x0000095bu, 0x0000095au, 0x000006c2u, 0x0003003eu, 0x000000c0u, 0x0000095bu, 0x0004003du, 0x00000006u, 0x0000095cu, 0x000000c0u, 0x0004007cu, 0x00000008u, 0x0000095du, 0x0000095cu, 0x00070050u, 0x00000009u, 0x0000095eu, 0x0000095du, 0x0000095du, 0x0000095du, 0x0000095du, 0x0003003eu, 0x0000095fu, 0x0000095eu, 0x00050039u, 0x00000002u, 0x00000960u, 0x000000beu, 0x0000095fu, 0x000200f9u, 0x00000958u, 0x000200f8u, 0x00000957u, 0x0004003du, 0x00000006u, 0x00000963u, 0x000000c0u, 0x000500c2u, 0x00000006u, 0x00000964u, 0x00000963u, 0x0000025eu, 0x000500c7u, 0x00000006u, 0x00000965u, 0x00000964u, 0x0000069bu, 0x0003003eu, 0x00000962u, 0x00000965u, 0x0004003du, 0x00000006u, 0x00000967u, 0x000000c0u, 0x000500c2u, 0x00000006u, 0x00000968u, 0x00000967u, 0x00000218u, 0x000500c7u, 0x00000006u, 0x00000969u, 0x00000968u, 0x0000069bu, 0x0003003eu, 0x00000966u, 0x00000969u, 0x0004003du, 0x00000006u, 0x0000096bu, 0x000000c0u, 0x000500c4u, 0x00000006u, 0x0000096cu, 0x0000096bu, 0x00000215u, 0x000500c7u, 0x00000006u, 0x0000096du, 0x0000096cu, 0x0000069bu, 0x0003003eu, 0x0000096au, 0x0000096du, 0x0004003du, 0x00000006u, 0x0000096fu, 0x000000c0u, 0x000500c7u, 0x00000006u, 0x00000970u, 0x0000096fu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000972u, 0x00000970u, 0x00000971u, 0x0003003eu, 0x0000096eu, 0x00000972u, 0x0004007cu, 0x00000008u, 0x00000974u, 0x00000965u, 0x0004007cu, 0x00000008u, 0x00000976u, 0x00000969u, 0x0004007cu, 0x00000008u, 0x00000978u, 0x0000096du, 0x0004007cu, 0x00000008u, 0x0000097au, 0x00000972u, 0x00070050u, 0x00000009u, 0x0000097bu, 0x00000974u, 0x00000976u, 0x00000978u, 0x0000097au, 0x0003003eu, 0x0000097cu, 0x0000097bu, 0x00050039u, 0x00000002u, 0x0000097du, 0x000000beu, 0x0000097cu, 0x000200f9u, 0x00000958u, 0x000200f8u, 0x00000958u, 0x000300f7u, 0x00000981u, 0x00000000u, 0x000400fau, 0x00000850u, 0x00000980u, 0x00000981u, 0x000200f8u, 0x00000980u, 0x00040039u, 0x00000002u, 0x00000982u, 0x00000092u, 0x000200f9u, 0x00000981u, 0x000200f8u, 0x00000981u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000c6u, 0x00000000u, 0x000000c4u, 0x00030037u, 0x00000007u, 0x000000c5u, 0x000200f8u, 0x000000c7u, 0x0004003bu, 0x00000007u, 0x00000988u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000098cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000990u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000994u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009b6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009d2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009dfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009edu, 0x00000007u, 0x000300f7u, 0x00000987u, 0x00000000u, 0x000b00fbu, 0x00000657u, 0x00000987u, 0x00000004u, 0x00000983u, 0x00000002u, 0x00000984u, 0x00000003u, 0x00000985u, 0x00000001u, 0x00000986u, 0x000200f8u, 0x00000983u, 0x0004003du, 0x00000006u, 0x00000989u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x0000098au, 0x00000989u, 0x000006dcu, 0x000500c7u, 0x00000006u, 0x0000098bu, 0x0000098au, 0x000006c2u, 0x0003003eu, 0x00000988u, 0x0000098bu, 0x0004003du, 0x00000006u, 0x0000098du, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x0000098eu, 0x0000098du, 0x00000377u, 0x000500c7u, 0x00000006u, 0x0000098fu, 0x0000098eu, 0x000006c2u, 0x0003003eu, 0x0000098cu, 0x0000098fu, 0x0004003du, 0x00000006u, 0x00000991u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x00000992u, 0x00000991u, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x00000993u, 0x00000992u, 0x000006c2u, 0x0003003eu, 0x00000990u, 0x00000993u, 0x0004003du, 0x00000006u, 0x00000995u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x00000996u, 0x00000995u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x00000997u, 0x00000996u, 0x000006c2u, 0x0003003eu, 0x00000994u, 0x00000997u, 0x0004007cu, 0x00000008u, 0x00000999u, 0x0000098bu, 0x0004007cu, 0x00000008u, 0x0000099bu, 0x0000098fu, 0x0004007cu, 0x00000008u, 0x0000099du, 0x00000993u, 0x0004007cu, 0x00000008u, 0x0000099fu, 0x00000997u, 0x00070050u, 0x00000009u, 0x000009a0u, 0x00000999u, 0x0000099bu, 0x0000099du, 0x0000099fu, 0x0003003eu, 0x000009a1u, 0x000009a0u, 0x00050039u, 0x00000002u, 0x000009a2u, 0x000000beu, 0x000009a1u, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000984u, 0x0004003du, 0x00000006u, 0x000009a4u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x000009a5u, 0x000009a4u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x000009a6u, 0x000009a5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000009a7u, 0x000009a6u, 0x00000377u, 0x0004003du, 0x00000006u, 0x000009a8u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009a9u, 0x000009a8u, 0x000009a7u, 0x0003003eu, 0x000000c5u, 0x000009a9u, 0x0004003du, 0x00000006u, 0x000009abu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009acu, 0x000009abu, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x000009adu, 0x000009acu, 0x0000069bu, 0x0003003eu, 0x000009aau, 0x000009adu, 0x0004003du, 0x00000006u, 0x000009afu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009b0u, 0x000009afu, 0x0000048bu, 0x000500c7u, 0x00000006u, 0x000009b1u, 0x000009b0u, 0x0000069bu, 0x0003003eu, 0x000009aeu, 0x000009b1u, 0x0004003du, 0x00000006u, 0x000009b3u, 0x000000c5u, 0x000500c4u, 0x00000006u, 0x000009b4u, 0x000009b3u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x000009b5u, 0x000009b4u, 0x0000069bu, 0x0003003eu, 0x000009b2u, 0x000009b5u, 0x0004003du, 0x00000006u, 0x000009b7u, 0x000000c5u, 0x000500c7u, 0x00000006u, 0x000009b8u, 0x000009b7u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000009b9u, 0x000009b8u, 0x00000971u, 0x0003003eu, 0x000009b6u, 0x000009b9u, 0x0004007cu, 0x00000008u, 0x000009bbu, 0x000009adu, 0x0004007cu, 0x00000008u, 0x000009bdu, 0x000009b1u, 0x0004007cu, 0x00000008u, 0x000009bfu, 0x000009b5u, 0x0004007cu, 0x00000008u, 0x000009c1u, 0x000009b9u, 0x00070050u, 0x00000009u, 0x000009c2u, 0x000009bbu, 0x000009bdu, 0x000009bfu, 0x000009c1u, 0x0003003eu, 0x000009c3u, 0x000009c2u, 0x00050039u, 0x00000002u, 0x000009c4u, 0x000000beu, 0x000009c3u, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000985u, 0x0004003du, 0x00000006u, 0x000009c6u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x000009c7u, 0x000009c6u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x000009c8u, 0x000009c7u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000009c9u, 0x000009c8u, 0x00000377u, 0x0004003du, 0x00000006u, 0x000009cau, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009cbu, 0x000009cau, 0x000009c9u, 0x0003003eu, 0x000000c5u, 0x000009cbu, 0x0004003du, 0x00000006u, 0x000009ccu, 0x000000c5u, 0x000500c7u, 0x00000006u, 0x000009cdu, 0x000009ccu, 0x000007eeu, 0x0003003eu, 0x000000c5u, 0x000009cdu, 0x0004003du, 0x00000006u, 0x000009cfu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009d0u, 0x000009cfu, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x000009d1u, 0x000009d0u, 0x000006c2u, 0x0003003eu, 0x000009ceu, 0x000009d1u, 0x0004003du, 0x00000006u, 0x000009d3u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009d4u, 0x000009d3u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x000009d5u, 0x000009d4u, 0x000006c2u, 0x0003003eu, 0x000009d2u, 0x000009d5u, 0x0004007cu, 0x00000008u, 0x000009d7u, 0x000009d1u, 0x0004007cu, 0x00000008u, 0x000009ddu, 0x000009d5u, 0x00070050u, 0x00000009u, 0x000009deu, 0x000009d7u, 0x000009d7u, 0x000009d7u, 0x000009ddu, 0x0003003eu, 0x000009dfu, 0x000009deu, 0x00050039u, 0x00000002u, 0x000009e0u, 0x000000beu, 0x000009dfu, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000986u, 0x0004003du, 0x00000006u, 0x000009e2u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x000009e3u, 0x000009e2u, 0x0000048bu, 0x000500c6u, 0x00000006u, 0x000009e4u, 0x000009e3u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x000009e5u, 0x000009e4u, 0x0000035bu, 0x0004003du, 0x00000006u, 0x000009e6u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009e7u, 0x000009e6u, 0x000009e5u, 0x0003003eu, 0x000000c5u, 0x000009e7u, 0x0004003du, 0x00000006u, 0x000009e8u, 0x000000c5u, 0x000500c7u, 0x00000006u, 0x000009e9u, 0x000009e8u, 0x000006c2u, 0x0003003eu, 0x000000c5u, 0x000009e9u, 0x0004003du, 0x00000006u, 0x000009eau, 0x000000c5u, 0x0004007cu, 0x00000008u, 0x000009ebu, 0x000009eau, 0x00070050u, 0x00000009u, 0x000009ecu, 0x000009ebu, 0x000009ebu, 0x000009ebu, 0x000009ebu, 0x0003003eu, 0x000009edu, 0x000009ecu, 0x00050039u, 0x00000002u, 0x000009eeu, 0x000000beu, 0x000009edu, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000987u, 0x000300f7u, 0x000009f2u, 0x00000000u, 0x000400fau, 0x00000850u, 0x000009f1u, 0x000009f2u, 0x000200f8u, 0x000009f1u, 0x00040039u, 0x00000002u, 0x000009f3u, 0x00000092u, 0x000200f9u, 0x000009f2u, 0x000200f8u, 0x000009f2u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000cfu, 0x00000000u, 0x000000cau, 0x00030037u, 0x0000003eu, 0x000000cbu, 0x00030037u, 0x0000003eu, 0x000000ccu, 0x00030037u, 0x00000007u, 0x000000cdu, 0x00030037u, 0x000000c9u, 0x000000ceu, 0x000200f8u, 0x000000d0u, 0x0004003bu, 0x0000003eu, 0x000078d1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078d0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078cfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078ceu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078cdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078c7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000078c5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078c3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078beu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078bdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078bcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078bbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000009f4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000009f8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000009fcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009ffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a17u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a1au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a1fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a24u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a29u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a2eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a34u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a3au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a40u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a46u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a47u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a4au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a4eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a4fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a50u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000a51u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a52u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a54u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a57u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a5au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a5cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a5eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a60u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a62u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a64u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a67u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a69u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a6bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a6cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000a6du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a87u, 0x00000007u, 0x0004003bu, 0x0000005bu, 0x00000a8du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a8fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a91u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a93u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a95u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a97u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000a99u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a9bu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000aa2u, 0x00000007u, 0x0004003bu, 0x0000005bu, 0x00000aa3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000aa5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aa7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aa9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aabu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aadu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000aafu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ab1u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000ab6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ab8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000abbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000abcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000abeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ac0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ac2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000acdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ad2u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x000009f5u, 0x000000ceu, 0x00000212u, 0x0004003du, 0x00000008u, 0x000009f6u, 0x000009f5u, 0x000500c3u, 0x00000008u, 0x000009f7u, 0x000009f6u, 0x00000264u, 0x0003003eu, 0x000009f4u, 0x000009f7u, 0x0004003du, 0x00000008u, 0x000009fau, 0x000009f5u, 0x000500c7u, 0x00000008u, 0x000009fbu, 0x000009fau, 0x00000386u, 0x0003003eu, 0x000009f8u, 0x000009fbu, 0x00050041u, 0x0000003eu, 0x000009fdu, 0x000000ceu, 0x00000215u, 0x0004003du, 0x00000008u, 0x000009feu, 0x000009fdu, 0x0003003eu, 0x000009fcu, 0x000009feu, 0x00050041u, 0x0000005cu, 0x00000a00u, 0x000000ceu, 0x00000203u, 0x0004003du, 0x00000009u, 0x00000a01u, 0x00000a00u, 0x0003003eu, 0x000009ffu, 0x00000a01u, 0x00050041u, 0x0000003eu, 0x00000a03u, 0x000000ceu, 0x00000218u, 0x0004003du, 0x00000008u, 0x00000a04u, 0x00000a03u, 0x0003003eu, 0x00000a02u, 0x00000a04u, 0x0004003du, 0x00000006u, 0x00000a0cu, 0x000000cdu, 0x00080041u, 0x00000277u, 0x00000a0du, 0x00000a0bu, 0x00000203u, 0x00000a0cu, 0x00000203u, 0x00000485u, 0x0004003du, 0x00000229u, 0x00000a0eu, 0x00000a0du, 0x00040071u, 0x00000006u, 0x00000a0fu, 0x00000a0eu, 0x0003003eu, 0x00000a05u, 0x00000a0fu, 0x0004003du, 0x00000006u, 0x00000a13u, 0x000000cdu, 0x0003003eu, 0x00000a12u, 0x00000a13u, 0x00050039u, 0x0000000fu, 0x00000a14u, 0x00000012u, 0x00000a12u, 0x00050051u, 0x00000009u, 0x000078bfu, 0x00000a14u, 0x00000008u, 0x0003003eu, 0x000078bbu, 0x000078bfu, 0x00050051u, 0x00000009u, 0x000078c0u, 0x00000a14u, 0x00000009u, 0x0003003eu, 0x000078bcu, 0x000078c0u, 0x00050051u, 0x00000008u, 0x000078c1u, 0x00000a14u, 0x0000000bu, 0x0003003eu, 0x000078bdu, 0x000078c1u, 0x00050051u, 0x00000008u, 0x000078c2u, 0x00000a14u, 0x0000000cu, 0x0003003eu, 0x000078beu, 0x000078c2u, 0x0003003eu, 0x00000a17u, 0x00000a0fu, 0x00050039u, 0x00000019u, 0x00000a19u, 0x0000001cu, 0x00000a17u, 0x00050051u, 0x00000009u, 0x000078c8u, 0x00000a19u, 0x00000000u, 0x0003003eu, 0x000078c3u, 0x000078c8u, 0x00050051u, 0x00000009u, 0x000078c9u, 0x00000a19u, 0x00000001u, 0x0003003eu, 0x000078c4u, 0x000078c9u, 0x00050051u, 0x00000006u, 0x000078cau, 0x00000a19u, 0x00000002u, 0x0003003eu, 0x000078c5u, 0x000078cau, 0x00050051u, 0x00000008u, 0x000078cbu, 0x00000a19u, 0x00000003u, 0x0003003eu, 0x000078c6u, 0x000078cbu, 0x00050051u, 0x00000008u, 0x000078ccu, 0x00000a19u, 0x00000004u, 0x0003003eu, 0x000078c7u, 0x000078ccu, 0x000500c7u, 0x00000006u, 0x00000a1du, 0x000078cau, 0x0000035bu, 0x000500abu, 0x0000005du, 0x00000a1eu, 0x00000a1du, 0x00000374u, 0x0003003eu, 0x00000a1au, 0x00000a1eu, 0x000500c7u, 0x00000006u, 0x00000a22u, 0x000078cau, 0x00000485u, 0x000500abu, 0x0000005du, 0x00000a23u, 0x00000a22u, 0x00000374u, 0x0003003eu, 0x00000a1fu, 0x00000a23u, 0x000500c7u, 0x00000006u, 0x00000a27u, 0x000078cau, 0x000003c4u, 0x000500abu, 0x0000005du, 0x00000a28u, 0x00000a27u, 0x00000374u, 0x0003003eu, 0x00000a24u, 0x00000a28u, 0x000500c7u, 0x00000006u, 0x00000a2cu, 0x000078cau, 0x00000377u, 0x000500abu, 0x0000005du, 0x00000a2du, 0x00000a2cu, 0x00000374u, 0x0003003eu, 0x00000a29u, 0x00000a2du, 0x000500c7u, 0x00000006u, 0x00000a32u, 0x000078cau, 0x00000a31u, 0x000500abu, 0x0000005du, 0x00000a33u, 0x00000a32u, 0x00000374u, 0x0003003eu, 0x00000a2eu, 0x00000a33u, 0x000500c7u, 0x00000006u, 0x00000a38u, 0x000078cau, 0x00000a37u, 0x000500abu, 0x0000005du, 0x00000a39u, 0x00000a38u, 0x00000374u, 0x0003003eu, 0x00000a34u, 0x00000a39u, 0x000500c7u, 0x00000006u, 0x00000a3eu, 0x000078cau, 0x00000a3du, 0x000500abu, 0x0000005du, 0x00000a3fu, 0x00000a3eu, 0x00000374u, 0x0003003eu, 0x00000a3au, 0x00000a3fu, 0x000500c7u, 0x00000006u, 0x00000a44u, 0x000078cau, 0x00000a43u, 0x000500abu, 0x0000005du, 0x00000a45u, 0x00000a44u, 0x00000374u, 0x0003003eu, 0x00000a40u, 0x00000a45u, 0x0003003eu, 0x00000a47u, 0x00000a2du, 0x00050039u, 0x00000009u, 0x00000a49u, 0x000000bau, 0x00000a47u, 0x0003003eu, 0x00000a46u, 0x00000a49u, 0x00050041u, 0x0000003eu, 0x00000a4bu, 0x00000a46u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000a4cu, 0x00000a4bu, 0x000500c3u, 0x00000008u, 0x00000a4du, 0x00000a4cu, 0x0000021eu, 0x0003003eu, 0x00000a4au, 0x00000a4du, 0x0003003eu, 0x00000a52u, 0x000009f7u, 0x0003003eu, 0x00000a54u, 0x000078c1u, 0x0003003eu, 0x00000a57u, 0x000078c2u, 0x0004003du, 0x00000008u, 0x00000a5bu, 0x00000705u, 0x0003003eu, 0x00000a5au, 0x00000a5bu, 0x0004003du, 0x00000008u, 0x00000a5du, 0x000006e7u, 0x0003003eu, 0x00000a5cu, 0x00000a5du, 0x0003003eu, 0x00000a5eu, 0x000009feu, 0x0003003eu, 0x00000a60u, 0x00000a4du, 0x0003003eu, 0x00000a62u, 0x00000a23u, 0x0003003eu, 0x00000a64u, 0x000078ccu, 0x0003003eu, 0x00000a67u, 0x00000a1eu, 0x0003003eu, 0x00000a69u, 0x00000a3fu, 0x00120039u, 0x0000005du, 0x00000a6eu, 0x0000007eu, 0x00000a52u, 0x00000a54u, 0x00000a57u, 0x00000a5au, 0x00000a5cu, 0x00000a5eu, 0x00000a60u, 0x00000a62u, 0x00000a64u, 0x00000a67u, 0x00000a69u, 0x00000a6bu, 0x00000a6cu, 0x00000a6du, 0x0004003du, 0x00000008u, 0x00000a6fu, 0x00000a5eu, 0x0003003eu, 0x000009fcu, 0x00000a6fu, 0x0004003du, 0x0000005du, 0x00000a70u, 0x00000a6bu, 0x0003003eu, 0x00000a4fu, 0x00000a70u, 0x0004003du, 0x0000005du, 0x00000a71u, 0x00000a6cu, 0x0003003eu, 0x00000a50u, 0x00000a71u, 0x0004003du, 0x0000005fu, 0x00000a72u, 0x00000a6du, 0x0003003eu, 0x00000a51u, 0x00000a72u, 0x0003003eu, 0x00000a4eu, 0x00000a6eu, 0x000300f7u, 0x00000a75u, 0x00000000u, 0x000400fau, 0x00000a6eu, 0x00000a74u, 0x00000a75u, 0x000200f8u, 0x00000a74u, 0x000400a8u, 0x0000005du, 0x00000a77u, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x00000a79u, 0x00000a6fu, 0x00000203u, 0x000500a6u, 0x0000005du, 0x00000a7au, 0x00000a77u, 0x00000a79u, 0x000200f9u, 0x00000a75u, 0x000200f8u, 0x00000a75u, 0x000700f5u, 0x0000005du, 0x00000a7bu, 0x00000a6eu, 0x000000d0u, 0x00000a7au, 0x00000a74u, 0x000300f7u, 0x00000a7du, 0x00000000u, 0x000400fau, 0x00000a7bu, 0x00000a7cu, 0x00000a7du, 0x000200f8u, 0x00000a7cu, 0x0004003du, 0x00000009u, 0x00000a80u, 0x00000a46u, 0x00080050u, 0x0000005au, 0x00000a86u, 0x00000a01u, 0x00000a80u, 0x000078bfu, 0x000078c0u, 0x00000a04u, 0x0003003eu, 0x000078cdu, 0x00000a01u, 0x0003003eu, 0x000078ceu, 0x00000a80u, 0x0003003eu, 0x000078cfu, 0x000078bfu, 0x0003003eu, 0x000078d0u, 0x000078c0u, 0x0003003eu, 0x000078d1u, 0x00000a04u, 0x0003003eu, 0x00000a87u, 0x000078c8u, 0x000300f7u, 0x00000a8cu, 0x00000000u, 0x000400fau, 0x00000a39u, 0x00000a8bu, 0x00000a8cu, 0x000200f8u, 0x00000a8bu, 0x0003003eu, 0x00000a8du, 0x00000a86u, 0x0003003eu, 0x00000a8fu, 0x000078c8u, 0x0003003eu, 0x00000a91u, 0x00000a1eu, 0x0003003eu, 0x00000a93u, 0x00000a70u, 0x0003003eu, 0x00000a95u, 0x00000a33u, 0x0003003eu, 0x00000a97u, 0x00000a71u, 0x0003003eu, 0x00000a99u, 0x00000a72u, 0x0003003eu, 0x00000a9bu, 0x00000543u, 0x000c0039u, 0x0000003cu, 0x00000a9cu, 0x0000006au, 0x00000a8du, 0x00000a8fu, 0x00000a91u, 0x00000a93u, 0x00000a95u, 0x00000a97u, 0x00000a99u, 0x00000a9bu, 0x0009004fu, 0x00000009u, 0x00000a9fu, 0x00000a01u, 0x00000a9cu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000078cdu, 0x00000a9fu, 0x0003003eu, 0x00000a87u, 0x000078c9u, 0x000200f9u, 0x00000a8cu, 0x000200f8u, 0x00000a8cu, 0x000700f5u, 0x00000009u, 0x0000ea32u, 0x00000a01u, 0x00000a7cu, 0x00000a9fu, 0x00000a8bu, 0x00070050u, 0x000005f9u, 0x0000eeeau, 0x00000a39u, 0x00000a39u, 0x00000a39u, 0x00000a39u, 0x000600a9u, 0x00000009u, 0x0000eeebu, 0x0000eeeau, 0x000078c9u, 0x000078c8u, 0x00080050u, 0x0000005au, 0x000078e2u, 0x0000ea32u, 0x00000a80u, 0x000078bfu, 0x000078c0u, 0x00000a04u, 0x0003003eu, 0x00000aa3u, 0x000078e2u, 0x0003003eu, 0x00000aa5u, 0x0000eeebu, 0x0003003eu, 0x00000aa7u, 0x00000a1eu, 0x0003003eu, 0x00000aa9u, 0x00000a70u, 0x0003003eu, 0x00000aabu, 0x00000a33u, 0x0003003eu, 0x00000aadu, 0x00000a71u, 0x0003003eu, 0x00000aafu, 0x00000a72u, 0x0003003eu, 0x00000ab1u, 0x0000055eu, 0x000c0039u, 0x0000003cu, 0x00000ab2u, 0x0000006au, 0x00000aa3u, 0x00000aa5u, 0x00000aa7u, 0x00000aa9u, 0x00000aabu, 0x00000aadu, 0x00000aafu, 0x00000ab1u, 0x0003003eu, 0x00000aa2u, 0x00000ab2u, 0x000300f7u, 0x00000ab5u, 0x00000000u, 0x000400fau, 0x00000a45u, 0x00000ab4u, 0x00000ab5u, 0x000200f8u, 0x00000ab4u, 0x0003003eu, 0x00000ab6u, 0x00000ab2u, 0x0003003eu, 0x00000ab8u, 0x000009fbu, 0x00060039u, 0x0000003cu, 0x00000abau, 0x00000042u, 0x00000ab6u, 0x00000ab8u, 0x0003003eu, 0x00000aa2u, 0x00000abau, 0x000200f9u, 0x00000ab5u, 0x000200f8u, 0x00000ab5u, 0x000700f5u, 0x0000003cu, 0x0000ea47u, 0x00000ab2u, 0x00000a8cu, 0x00000abau, 0x00000ab4u, 0x0003003eu, 0x00000abcu, 0x00000a6fu, 0x0003003eu, 0x00000abeu, 0x00000a4du, 0x0003003eu, 0x00000ac0u, 0x00000a70u, 0x0003003eu, 0x00000ac2u, 0x000078cbu, 0x00080039u, 0x00000008u, 0x00000ac5u, 0x0000008bu, 0x00000abcu, 0x00000abeu, 0x00000ac0u, 0x00000ac2u, 0x0003003eu, 0x00000abbu, 0x00000ac5u, 0x000500c4u, 0x00000008u, 0x00000ac8u, 0x00000ac5u, 0x0000021eu, 0x00050051u, 0x00000008u, 0x00000ac9u, 0x0000ea47u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000acau, 0x0000ea47u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000acbu, 0x0000ea47u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000accu, 0x00000ac9u, 0x00000acau, 0x00000acbu, 0x00000ac8u, 0x0003003eu, 0x00000acdu, 0x00000accu, 0x00050039u, 0x00000002u, 0x00000aceu, 0x000000beu, 0x00000acdu, 0x000300f7u, 0x00000ad1u, 0x00000000u, 0x000400fau, 0x00000a28u, 0x00000ad0u, 0x00000adau, 0x000200f8u, 0x00000ad0u, 0x0003003eu, 0x00000ad2u, 0x000009f7u, 0x00050039u, 0x00000008u, 0x00000ad4u, 0x00000052u, 0x00000ad2u, 0x0003003eu, 0x00000705u, 0x00000ad4u, 0x0003003eu, 0x000006e7u, 0x000078c2u, 0x0003003eu, 0x00000854u, 0x0000055eu, 0x000300f7u, 0x00000ad8u, 0x00000000u, 0x000400fau, 0x00000850u, 0x00000ad7u, 0x00000ad8u, 0x000200f8u, 0x00000ad7u, 0x00040039u, 0x00000002u, 0x00000ad9u, 0x00000094u, 0x000200f9u, 0x00000ad8u, 0x000200f8u, 0x00000ad8u, 0x000200f9u, 0x00000ad1u, 0x000200f8u, 0x00000adau, 0x000300f7u, 0x00000adcu, 0x00000000u, 0x000400fau, 0x00000850u, 0x00000adbu, 0x00000adcu, 0x000200f8u, 0x00000adbu, 0x00040039u, 0x00000002u, 0x00000addu, 0x00000092u, 0x000200f9u, 0x00000adcu, 0x000200f8u, 0x00000adcu, 0x000200f9u, 0x00000ad1u, 0x000200f8u, 0x00000ad1u, 0x000200f9u, 0x00000a7du, 0x000200f8u, 0x00000a7du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000d3u, 0x00000000u, 0x000000d1u, 0x00030037u, 0x0000005cu, 0x000000d2u, 0x000200f8u, 0x000000d4u, 0x0004003du, 0x00000009u, 0x00000adeu, 0x000000d2u, 0x00050082u, 0x00000009u, 0x00000ae0u, 0x00000adeu, 0x0000eeb6u, 0x0003003eu, 0x000000d2u, 0x00000ae0u, 0x0004003du, 0x00000009u, 0x00000ae1u, 0x000000d2u, 0x000600cau, 0x00000009u, 0x00000ae2u, 0x00000ae1u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000000d2u, 0x00000ae2u, 0x0004003du, 0x00000009u, 0x00000ae3u, 0x000000d2u, 0x00050080u, 0x00000009u, 0x00000ae5u, 0x00000ae3u, 0x0000eeb6u, 0x0003003eu, 0x000000d2u, 0x00000ae5u, 0x0004003du, 0x00000009u, 0x00000ae6u, 0x000000d2u, 0x0008000cu, 0x00000009u, 0x00000ae8u, 0x00000001u, 0x0000002du, 0x00000ae6u, 0x00000611u, 0x00000ae7u, 0x00050051u, 0x00000008u, 0x00000ae9u, 0x00000ae8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000aeau, 0x00000ae8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000aebu, 0x00000ae8u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000aecu, 0x00000ae8u, 0x00000003u, 0x000200feu, 0x00000ae8u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000d6u, 0x00000000u, 0x000000d1u, 0x00030037u, 0x0000005cu, 0x000000d5u, 0x000200f8u, 0x000000d7u, 0x0004003bu, 0x0000005cu, 0x00000af0u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000af1u, 0x000000d5u, 0x0003003eu, 0x00000af0u, 0x00000af1u, 0x00050039u, 0x00000009u, 0x00000af2u, 0x000000d3u, 0x00000af0u, 0x00050051u, 0x00000008u, 0x00000af3u, 0x00000af2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000af4u, 0x00000af2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000af5u, 0x00000af2u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000af6u, 0x00000af2u, 0x00000003u, 0x000200feu, 0x00000af2u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000d9u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x000000d8u, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000008u, 0x00000afau, 0x000000d8u, 0x00050082u, 0x00000008u, 0x00000afbu, 0x00000afau, 0x00000623u, 0x000600cau, 0x00000008u, 0x00000afcu, 0x00000afbu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000008u, 0x00000afdu, 0x00000afcu, 0x00000623u, 0x0008000cu, 0x00000008u, 0x00000afeu, 0x00000001u, 0x0000002du, 0x00000afdu, 0x00000203u, 0x0000038bu, 0x000200feu, 0x00000afeu, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000dcu, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x000000dbu, 0x000200f8u, 0x000000ddu, 0x0004003du, 0x00000008u, 0x00000b02u, 0x000000dbu, 0x00050082u, 0x00000008u, 0x00000b03u, 0x00000b02u, 0x00000b01u, 0x0003003eu, 0x000000dbu, 0x00000b03u, 0x0004003du, 0x00000008u, 0x00000b04u, 0x000000dbu, 0x000500c4u, 0x00000008u, 0x00000b05u, 0x00000b04u, 0x0000027du, 0x0003003eu, 0x000000dbu, 0x00000b05u, 0x0004003du, 0x00000008u, 0x00000b06u, 0x000000dbu, 0x000500c3u, 0x00000008u, 0x00000b07u, 0x00000b06u, 0x0000027du, 0x0003003eu, 0x000000dbu, 0x00000b07u, 0x0004003du, 0x00000008u, 0x00000b08u, 0x000000dbu, 0x00050080u, 0x00000008u, 0x00000b09u, 0x00000b08u, 0x00000b01u, 0x0003003eu, 0x000000dbu, 0x00000b09u, 0x0004003du, 0x00000008u, 0x00000b0au, 0x000000dbu, 0x0008000cu, 0x00000008u, 0x00000b0bu, 0x00000001u, 0x0000002du, 0x00000b0au, 0x00000203u, 0x0000041du, 0x000200feu, 0x00000b0bu, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000000e0u, 0x00000000u, 0x000000deu, 0x00030037u, 0x0000003eu, 0x000000dfu, 0x000200f8u, 0x000000e1u, 0x0004003bu, 0x0000003eu, 0x00000b0eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000b13u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000b19u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000b1cu, 0x00000007u, 0x0004003bu, 0x00000bdeu, 0x00000bdfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000be5u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000b0fu, 0x000000dfu, 0x0006000cu, 0x00000008u, 0x00000b10u, 0x00000001u, 0x0000004au, 0x00000b0fu, 0x00050082u, 0x00000008u, 0x00000b11u, 0x00000283u, 0x00000b10u, 0x0007000cu, 0x00000008u, 0x00000b12u, 0x00000001u, 0x00000027u, 0x00000b11u, 0x00000283u, 0x0003003eu, 0x00000b0eu, 0x00000b12u, 0x0004003du, 0x00000008u, 0x00000b14u, 0x000000dfu, 0x000500c4u, 0x00000008u, 0x00000b16u, 0x00000b14u, 0x00000b12u, 0x000500c7u, 0x00000008u, 0x00000b18u, 0x00000b16u, 0x00000b17u, 0x0003003eu, 0x00000b13u, 0x00000b18u, 0x000500c7u, 0x00000008u, 0x00000b1bu, 0x00000b18u, 0x0000038bu, 0x0003003eu, 0x00000b19u, 0x00000b1bu, 0x000500c3u, 0x00000008u, 0x00000bddu, 0x00000b18u, 0x0000025eu, 0x0003003eu, 0x00000bdfu, 0x00000bdbu, 0x00050041u, 0x00000060u, 0x00000be0u, 0x00000bdfu, 0x00000bddu, 0x0004003du, 0x0000005fu, 0x00000be1u, 0x00000be0u, 0x00050051u, 0x00000008u, 0x00000be2u, 0x00000be1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000be3u, 0x00000be1u, 0x00000001u, 0x0003003eu, 0x00000b1cu, 0x00000be1u, 0x00050041u, 0x0000003eu, 0x00000be6u, 0x00000b1cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000be7u, 0x00000be6u, 0x00050084u, 0x00000008u, 0x00000be9u, 0x00000be7u, 0x00000b1bu, 0x000500c3u, 0x00000008u, 0x00000beau, 0x00000be9u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00000bebu, 0x00000b1cu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000becu, 0x00000bebu, 0x00050080u, 0x00000008u, 0x00000bedu, 0x00000beau, 0x00000becu, 0x0003003eu, 0x00000be5u, 0x00000bedu, 0x00050050u, 0x0000005fu, 0x00000bf0u, 0x00000bedu, 0x00000b12u, 0x000200feu, 0x00000bf0u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000000e4u, 0x00000000u, 0x000000e2u, 0x00030037u, 0x0000003du, 0x000000e3u, 0x000200f8u, 0x000000e5u, 0x0004003du, 0x0000003cu, 0x00000bf3u, 0x000000e3u, 0x0007004fu, 0x0000005fu, 0x00000bf4u, 0x00000bf3u, 0x00000bf3u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000bf4u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000000e9u, 0x00000000u, 0x000000e6u, 0x00030037u, 0x0000003du, 0x000000e7u, 0x00030037u, 0x0000005eu, 0x000000e8u, 0x000200f8u, 0x000000eau, 0x0004003bu, 0x0000003eu, 0x00000bf7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000bfau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c00u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c01u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c04u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c07u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c0eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c15u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c1eu, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000bf8u, 0x000000e7u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000bf9u, 0x00000bf8u, 0x0003003eu, 0x00000bf7u, 0x00000bf9u, 0x000500b3u, 0x0000005du, 0x00000bfcu, 0x00000bf9u, 0x00000203u, 0x0003003eu, 0x00000bfau, 0x00000bfcu, 0x000500c7u, 0x00000008u, 0x00000bffu, 0x00000bf9u, 0x00000bfdu, 0x0003003eu, 0x00000bf7u, 0x00000bffu, 0x0003003eu, 0x00000c01u, 0x00000bffu, 0x00050039u, 0x0000005fu, 0x00000c03u, 0x000000e0u, 0x00000c01u, 0x0003003eu, 0x00000c00u, 0x00000c03u, 0x00050041u, 0x0000003eu, 0x00000c05u, 0x00000c00u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000c06u, 0x00000c05u, 0x0003003eu, 0x00000c04u, 0x00000c06u, 0x0004003du, 0x0000003cu, 0x00000c08u, 0x000000e7u, 0x0007004fu, 0x0000005fu, 0x00000c09u, 0x00000c08u, 0x00000c08u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00000c0au, 0x00000c00u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000c0bu, 0x00000c0au, 0x00050050u, 0x0000005fu, 0x00000c0cu, 0x00000c0bu, 0x00000c0bu, 0x00050084u, 0x0000005fu, 0x00000c0du, 0x00000c09u, 0x00000c0cu, 0x0003003eu, 0x00000c07u, 0x00000c0du, 0x000500c3u, 0x00000008u, 0x00000c12u, 0x00000c10u, 0x00000c06u, 0x0004007eu, 0x00000008u, 0x00000c13u, 0x00000c12u, 0x000500c7u, 0x00000008u, 0x00000c14u, 0x00000c0fu, 0x00000c13u, 0x0003003eu, 0x00000c0eu, 0x00000c14u, 0x0004003du, 0x0000005fu, 0x00000c16u, 0x00000c07u, 0x00050050u, 0x0000005fu, 0x00000c18u, 0x00000c14u, 0x00000c14u, 0x000500c7u, 0x0000005fu, 0x00000c19u, 0x00000c16u, 0x00000c18u, 0x0003003eu, 0x00000c15u, 0x00000c19u, 0x000500abu, 0x0000005du, 0x00000c1bu, 0x00000c06u, 0x00000283u, 0x000300f7u, 0x00000c1du, 0x00000000u, 0x000400fau, 0x00000c1bu, 0x00000c1cu, 0x00000c24u, 0x000200f8u, 0x00000c1cu, 0x0004003du, 0x0000005fu, 0x00000c1fu, 0x00000c07u, 0x00050082u, 0x00000008u, 0x00000c21u, 0x0000027du, 0x00000c06u, 0x00050050u, 0x0000005fu, 0x00000c22u, 0x00000c21u, 0x00000c21u, 0x000500c3u, 0x0000005fu, 0x00000c23u, 0x00000c1fu, 0x00000c22u, 0x0003003eu, 0x00000c07u, 0x00000c23u, 0x0003003eu, 0x00000c1eu, 0x00000c23u, 0x000200f9u, 0x00000c1du, 0x000200f8u, 0x00000c24u, 0x0004003du, 0x0000005fu, 0x00000c25u, 0x00000c07u, 0x000500c4u, 0x0000005fu, 0x00000c27u, 0x00000c25u, 0x0000eeb7u, 0x0003003eu, 0x00000c1eu, 0x00000c27u, 0x000200f9u, 0x00000c1du, 0x000200f8u, 0x00000c1du, 0x0004003du, 0x0000005fu, 0x00000c28u, 0x00000c15u, 0x000500abu, 0x00000879u, 0x00000c2au, 0x00000c28u, 0x00000c29u, 0x0004009au, 0x0000005du, 0x00000c2bu, 0x00000c2au, 0x000300f7u, 0x00000c2du, 0x00000000u, 0x000400fau, 0x00000c2bu, 0x00000c2cu, 0x00000c2du, 0x000200f8u, 0x00000c2cu, 0x00050041u, 0x0000003eu, 0x00000c2eu, 0x00000c15u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000c2fu, 0x00000c2eu, 0x000500abu, 0x0000005du, 0x00000c31u, 0x00000c2fu, 0x00000c14u, 0x000300f7u, 0x00000c33u, 0x00000000u, 0x000400fau, 0x00000c31u, 0x00000c32u, 0x00000c33u, 0x000200f8u, 0x00000c32u, 0x0004003du, 0x00000008u, 0x00000c35u, 0x00000c2eu, 0x000500abu, 0x0000005du, 0x00000c36u, 0x00000c35u, 0x00000203u, 0x000200f9u, 0x00000c33u, 0x000200f8u, 0x00000c33u, 0x000700f5u, 0x0000005du, 0x00000c37u, 0x00000c31u, 0x00000c2cu, 0x00000c36u, 0x00000c32u, 0x000300f7u, 0x00000c39u, 0x00000000u, 0x000400fau, 0x00000c37u, 0x00000c38u, 0x00000c39u, 0x000200f8u, 0x00000c38u, 0x00050041u, 0x0000003eu, 0x00000c3au, 0x00000c07u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000c3bu, 0x00000c3au, 0x000500c7u, 0x00000008u, 0x00000c3cu, 0x00000c3bu, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00000c3du, 0x00000c3cu, 0x00000203u, 0x000300f7u, 0x00000c3fu, 0x00000000u, 0x000400fau, 0x00000c3du, 0x00000c3eu, 0x00000c41u, 0x000200f8u, 0x00000c3eu, 0x00050041u, 0x0000003eu, 0x00000c40u, 0x00000c1eu, 0x00000374u, 0x0003003eu, 0x00000c40u, 0x00000bfdu, 0x000200f9u, 0x00000c3fu, 0x000200f8u, 0x00000c41u, 0x00050041u, 0x0000003eu, 0x00000c43u, 0x00000c1eu, 0x00000374u, 0x0003003eu, 0x00000c43u, 0x00000c42u, 0x000200f9u, 0x00000c3fu, 0x000200f8u, 0x00000c3fu, 0x0003003eu, 0x000000e8u, 0x0000055eu, 0x000200f9u, 0x00000c39u, 0x000200f8u, 0x00000c39u, 0x00050041u, 0x0000003eu, 0x00000c44u, 0x00000c15u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000c45u, 0x00000c44u, 0x000500abu, 0x0000005du, 0x00000c47u, 0x00000c45u, 0x00000c14u, 0x000300f7u, 0x00000c49u, 0x00000000u, 0x000400fau, 0x00000c47u, 0x00000c48u, 0x00000c49u, 0x000200f8u, 0x00000c48u, 0x0004003du, 0x00000008u, 0x00000c4bu, 0x00000c44u, 0x000500abu, 0x0000005du, 0x00000c4cu, 0x00000c4bu, 0x00000203u, 0x000200f9u, 0x00000c49u, 0x000200f8u, 0x00000c49u, 0x000700f5u, 0x0000005du, 0x00000c4du, 0x00000c47u, 0x00000c39u, 0x00000c4cu, 0x00000c48u, 0x000300f7u, 0x00000c4fu, 0x00000000u, 0x000400fau, 0x00000c4du, 0x00000c4eu, 0x00000c4fu, 0x000200f8u, 0x00000c4eu, 0x00050041u, 0x0000003eu, 0x00000c50u, 0x00000c07u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000c51u, 0x00000c50u, 0x000500c7u, 0x00000008u, 0x00000c52u, 0x00000c51u, 0x00000c10u, 0x000500aau, 0x0000005du, 0x00000c53u, 0x00000c52u, 0x00000203u, 0x000300f7u, 0x00000c55u, 0x00000000u, 0x000400fau, 0x00000c53u, 0x00000c54u, 0x00000c57u, 0x000200f8u, 0x00000c54u, 0x00050041u, 0x0000003eu, 0x00000c56u, 0x00000c1eu, 0x00000485u, 0x0003003eu, 0x00000c56u, 0x00000bfdu, 0x000200f9u, 0x00000c55u, 0x000200f8u, 0x00000c57u, 0x00050041u, 0x0000003eu, 0x00000c58u, 0x00000c1eu, 0x00000485u, 0x0003003eu, 0x00000c58u, 0x00000c42u, 0x000200f9u, 0x00000c55u, 0x000200f8u, 0x00000c55u, 0x0003003eu, 0x000000e8u, 0x0000055eu, 0x000200f9u, 0x00000c4fu, 0x000200f8u, 0x00000c4fu, 0x000200f9u, 0x00000c2du, 0x000200f8u, 0x00000c2du, 0x000300f7u, 0x00000c5bu, 0x00000000u, 0x000400fau, 0x00000bfcu, 0x00000c5au, 0x00000c5bu, 0x000200f8u, 0x00000c5au, 0x0003003eu, 0x00000c1eu, 0x00000c5cu, 0x0003003eu, 0x000000e8u, 0x0000055eu, 0x000200f9u, 0x00000c5bu, 0x000200f8u, 0x00000c5bu, 0x0004003du, 0x0000005fu, 0x00000c5du, 0x00000c1eu, 0x0008000cu, 0x0000005fu, 0x00000c61u, 0x00000001u, 0x0000002du, 0x00000c5du, 0x00000c5fu, 0x00000c60u, 0x000200feu, 0x00000c61u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000f1u, 0x00000000u, 0x000000ebu, 0x00030037u, 0x0000005cu, 0x000000ecu, 0x00030037u, 0x0000005cu, 0x000000edu, 0x00030037u, 0x0000005cu, 0x000000eeu, 0x00030037u, 0x0000003eu, 0x000000efu, 0x00030037u, 0x0000003eu, 0x000000f0u, 0x000200f8u, 0x000000f2u, 0x0004003bu, 0x0000005cu, 0x00000c6fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c78u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c7bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c7eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000ca6u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000c64u, 0x000000edu, 0x000500c7u, 0x00000009u, 0x00000c67u, 0x00000c64u, 0x0000eeb4u, 0x00070050u, 0x00000009u, 0x00000c68u, 0x0000078du, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x00000009u, 0x00000c69u, 0x00000c67u, 0x00000c68u, 0x0004003du, 0x00000008u, 0x00000c6au, 0x000000efu, 0x00070050u, 0x00000009u, 0x00000c6bu, 0x00000c6au, 0x00000c6au, 0x00000c6au, 0x00000c6au, 0x00050084u, 0x00000009u, 0x00000c6cu, 0x00000c69u, 0x00000c6bu, 0x0004003du, 0x00000009u, 0x00000c6du, 0x000000ecu, 0x00050080u, 0x00000009u, 0x00000c6eu, 0x00000c6du, 0x00000c6cu, 0x0003003eu, 0x000000ecu, 0x00000c6eu, 0x0004003du, 0x00000009u, 0x00000c70u, 0x000000ecu, 0x000500c3u, 0x00000009u, 0x00000c72u, 0x00000c70u, 0x0000eeb5u, 0x00050051u, 0x00000008u, 0x00000c73u, 0x00000c72u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c74u, 0x00000c72u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c75u, 0x00000c72u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000c76u, 0x00000c72u, 0x00000003u, 0x0003003eu, 0x00000c6fu, 0x00000c72u, 0x0004003du, 0x00000008u, 0x00000c79u, 0x000000f0u, 0x0006000cu, 0x00000008u, 0x00000c7au, 0x00000001u, 0x00000049u, 0x00000c79u, 0x0003003eu, 0x00000c78u, 0x00000c7au, 0x000500c3u, 0x00000008u, 0x00000c7du, 0x00000c7au, 0x00000212u, 0x0003003eu, 0x00000c7bu, 0x00000c7du, 0x000500c7u, 0x00000008u, 0x00000c80u, 0x00000c7au, 0x00000212u, 0x000500c4u, 0x00000008u, 0x00000c81u, 0x00000c80u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00000c83u, 0x00000c7du, 0x00000212u, 0x00050080u, 0x00000008u, 0x00000c84u, 0x00000c81u, 0x00000c83u, 0x0003003eu, 0x00000c7eu, 0x00000c84u, 0x00070050u, 0x00000009u, 0x00000c87u, 0x00000c85u, 0x00000c85u, 0x00000c85u, 0x00000c85u, 0x000500c4u, 0x00000009u, 0x00000c88u, 0x00000c72u, 0x00000c87u, 0x0003003eu, 0x00000c6fu, 0x00000c88u, 0x0004003du, 0x00000009u, 0x00000c8au, 0x000000edu, 0x000500c3u, 0x00000009u, 0x00000c8cu, 0x00000c8au, 0x0000eeb5u, 0x00050051u, 0x00000008u, 0x00000c8du, 0x00000c8cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c8eu, 0x00000c8cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c8fu, 0x00000c8cu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000c90u, 0x00000c8cu, 0x00000003u, 0x00070050u, 0x00000009u, 0x00000c92u, 0x00000c84u, 0x00000c84u, 0x00000c84u, 0x00000c84u, 0x00050084u, 0x00000009u, 0x00000c93u, 0x00000c92u, 0x00000c8cu, 0x0004003du, 0x00000009u, 0x00000c95u, 0x000000eeu, 0x000500c3u, 0x00000009u, 0x00000c97u, 0x00000c95u, 0x0000eeb5u, 0x00050051u, 0x00000008u, 0x00000c98u, 0x00000c97u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c99u, 0x00000c97u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c9au, 0x00000c97u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000c9bu, 0x00000c97u, 0x00000003u, 0x00070050u, 0x00000009u, 0x00000c9du, 0x00000c7du, 0x00000c7du, 0x00000c7du, 0x00000c7du, 0x00050084u, 0x00000009u, 0x00000c9eu, 0x00000c9du, 0x00000c97u, 0x00050080u, 0x00000009u, 0x00000c9fu, 0x00000c93u, 0x00000c9eu, 0x00050080u, 0x00000009u, 0x00000ca1u, 0x00000c88u, 0x00000c9fu, 0x0003003eu, 0x00000c6fu, 0x00000ca1u, 0x00070050u, 0x00000009u, 0x00000ca4u, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x000500c3u, 0x00000009u, 0x00000ca5u, 0x00000ca1u, 0x00000ca4u, 0x0003003eu, 0x00000c6fu, 0x00000ca5u, 0x0003003eu, 0x00000ca6u, 0x00000ca5u, 0x00050039u, 0x00000009u, 0x00000ca8u, 0x000000d6u, 0x00000ca6u, 0x000200feu, 0x00000ca8u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000fcu, 0x00000000u, 0x000000f4u, 0x00030037u, 0x000000f3u, 0x000000f5u, 0x00030037u, 0x0000005cu, 0x000000f6u, 0x00030037u, 0x0000003eu, 0x000000f7u, 0x00030037u, 0x0000005eu, 0x000000f8u, 0x00030037u, 0x0000005eu, 0x000000f9u, 0x00030037u, 0x00000060u, 0x000000fau, 0x00030037u, 0x0000003eu, 0x000000fbu, 0x000200f8u, 0x000000fdu, 0x0004003bu, 0x0000003eu, 0x00000cabu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000cadu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000cbcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000cc9u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000cd2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ce4u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000ce5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ce6u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000ceeu, 0x00000007u, 0x0004003du, 0x0000005du, 0x00000cacu, 0x000000f9u, 0x000300f7u, 0x00000cafu, 0x00000000u, 0x000400fau, 0x00000cacu, 0x00000caeu, 0x00000cb4u, 0x000200f8u, 0x00000caeu, 0x0004003du, 0x00000008u, 0x00000cb0u, 0x000000f7u, 0x00050041u, 0x0000003eu, 0x00000cb1u, 0x000000f5u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00000cb2u, 0x00000cb1u, 0x00050082u, 0x00000008u, 0x00000cb3u, 0x00000cb0u, 0x00000cb2u, 0x0003003eu, 0x00000cadu, 0x00000cb3u, 0x000200f9u, 0x00000cafu, 0x000200f8u, 0x00000cb4u, 0x00050041u, 0x0000003eu, 0x00000cb5u, 0x000000f5u, 0x00000221u, 0x0004003du, 0x00000008u, 0x00000cb6u, 0x00000cb5u, 0x0004003du, 0x00000008u, 0x00000cb7u, 0x000000f7u, 0x00050082u, 0x00000008u, 0x00000cb8u, 0x00000cb6u, 0x00000cb7u, 0x0003003eu, 0x00000cadu, 0x00000cb8u, 0x000200f9u, 0x00000cafu, 0x000200f8u, 0x00000cafu, 0x000700f5u, 0x00000008u, 0x0000ea5du, 0x00000cb3u, 0x00000caeu, 0x00000cb8u, 0x00000cb4u, 0x0003003eu, 0x00000cabu, 0x0000ea5du, 0x000500c3u, 0x00000008u, 0x00000cbbu, 0x0000ea5du, 0x0000078du, 0x0003003eu, 0x00000cabu, 0x00000cbbu, 0x00060041u, 0x00000cc2u, 0x00000cc3u, 0x00000cc1u, 0x00000203u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000cc4u, 0x00000cc3u, 0x000500c7u, 0x00000008u, 0x00000cc5u, 0x00000cbbu, 0x00000cc4u, 0x0003003eu, 0x00000cbcu, 0x00000cc5u, 0x00050082u, 0x00000008u, 0x00000cc8u, 0x00000cbbu, 0x00000cc5u, 0x0003003eu, 0x000000fbu, 0x00000cc8u, 0x00060041u, 0x00000cc2u, 0x00000ccbu, 0x00000cc1u, 0x00000203u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000cccu, 0x00000ccbu, 0x000500c3u, 0x00000008u, 0x00000ccdu, 0x00000cbbu, 0x00000cccu, 0x0004003du, 0x0000005du, 0x00000cceu, 0x000000f9u, 0x000600a9u, 0x00000008u, 0x00000cd0u, 0x00000cceu, 0x00000212u, 0x00000ccfu, 0x00050084u, 0x00000008u, 0x00000cd1u, 0x00000ccdu, 0x00000cd0u, 0x0003003eu, 0x00000cc9u, 0x00000cd1u, 0x00050041u, 0x0000005cu, 0x00000cd3u, 0x000000f5u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00000cd4u, 0x00000cd3u, 0x0008004fu, 0x0000003cu, 0x00000cd5u, 0x00000cd4u, 0x00000cd4u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000cd6u, 0x000000f6u, 0x0008004fu, 0x0000003cu, 0x00000cd7u, 0x00000cd6u, 0x00000cd6u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000cd9u, 0x00000cd7u, 0x0000eeb2u, 0x00060050u, 0x0000003cu, 0x00000cdbu, 0x00000cd1u, 0x00000cd1u, 0x00000cd1u, 0x00050084u, 0x0000003cu, 0x00000cdcu, 0x00000cd9u, 0x00000cdbu, 0x00050080u, 0x0000003cu, 0x00000cddu, 0x00000cd5u, 0x00000cdcu, 0x0003003eu, 0x00000cd2u, 0x00000cddu, 0x0004003du, 0x0000005du, 0x00000cdeu, 0x000000f8u, 0x000300f7u, 0x00000ce0u, 0x00000000u, 0x000400fau, 0x00000cdeu, 0x00000cdfu, 0x00000ceau, 0x000200f8u, 0x00000cdfu, 0x000500c3u, 0x0000003cu, 0x00000ce3u, 0x00000cddu, 0x0000eeb3u, 0x0003003eu, 0x00000ce5u, 0x00000ce3u, 0x00060039u, 0x0000005fu, 0x00000ce8u, 0x000000e9u, 0x00000ce5u, 0x00000ce6u, 0x0004003du, 0x0000005du, 0x00000ce9u, 0x00000ce6u, 0x0003003eu, 0x00000ce4u, 0x00000ce9u, 0x0003003eu, 0x000000fau, 0x00000ce8u, 0x000200f9u, 0x00000ce0u, 0x000200f8u, 0x00000ceau, 0x000500c3u, 0x0000003cu, 0x00000cedu, 0x00000cddu, 0x0000eeb3u, 0x0003003eu, 0x00000ceeu, 0x00000cedu, 0x00050039u, 0x0000005fu, 0x00000cefu, 0x000000e4u, 0x00000ceeu, 0x0003003eu, 0x000000fau, 0x00000cefu, 0x000200f9u, 0x00000ce0u, 0x000200f8u, 0x00000ce0u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000005fu, 0x00000103u, 0x00000000u, 0x000000feu, 0x00030037u, 0x0000005cu, 0x000000ffu, 0x00030037u, 0x0000005cu, 0x00000100u, 0x00030037u, 0x0000003eu, 0x00000101u, 0x00030037u, 0x0000005eu, 0x00000102u, 0x000200f8u, 0x00000104u, 0x0004003bu, 0x0000003du, 0x00000cf0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000d03u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d04u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d05u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d07u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d0cu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000cf1u, 0x000000ffu, 0x0008004fu, 0x0000003cu, 0x00000cf2u, 0x00000cf1u, 0x00000cf1u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000cf3u, 0x00000100u, 0x0008004fu, 0x0000003cu, 0x00000cf4u, 0x00000cf3u, 0x00000cf3u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000cf6u, 0x00000cf4u, 0x0000eeb2u, 0x00060050u, 0x0000003cu, 0x00000cf7u, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x0000003cu, 0x00000cf8u, 0x00000cf6u, 0x00000cf7u, 0x0004003du, 0x00000008u, 0x00000cf9u, 0x00000101u, 0x00060050u, 0x0000003cu, 0x00000cfau, 0x00000cf9u, 0x00000cf9u, 0x00000cf9u, 0x00050084u, 0x0000003cu, 0x00000cfbu, 0x00000cf8u, 0x00000cfau, 0x00050080u, 0x0000003cu, 0x00000cfcu, 0x00000cf2u, 0x00000cfbu, 0x0003003eu, 0x00000cf0u, 0x00000cfcu, 0x000500c3u, 0x0000003cu, 0x00000cffu, 0x00000cfcu, 0x0000eeb3u, 0x0003003eu, 0x00000cf0u, 0x00000cffu, 0x0004003du, 0x0000005du, 0x00000d00u, 0x00000102u, 0x000300f7u, 0x00000d02u, 0x00000000u, 0x000400fau, 0x00000d00u, 0x00000d01u, 0x00000d0bu, 0x000200f8u, 0x00000d01u, 0x0003003eu, 0x00000d05u, 0x00000cffu, 0x00060039u, 0x0000005fu, 0x00000d09u, 0x000000e9u, 0x00000d05u, 0x00000d07u, 0x0004003du, 0x0000005du, 0x00000d0au, 0x00000d07u, 0x0003003eu, 0x00000d04u, 0x00000d0au, 0x0003003eu, 0x00000d03u, 0x00000d09u, 0x000200f9u, 0x00000d02u, 0x000200f8u, 0x00000d0bu, 0x0003003eu, 0x00000d0cu, 0x00000cffu, 0x00050039u, 0x0000005fu, 0x00000d0eu, 0x000000e4u, 0x00000d0cu, 0x0003003eu, 0x00000d03u, 0x00000d0eu, 0x000200f9u, 0x00000d02u, 0x000200f8u, 0x00000d02u, 0x000700f5u, 0x0000005fu, 0x0000ea61u, 0x00000d09u, 0x00000d01u, 0x00000d0eu, 0x00000d0bu, 0x000200feu, 0x0000ea61u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000113u, 0x00000000u, 0x00000105u, 0x00030037u, 0x0000005cu, 0x00000106u, 0x00030037u, 0x0000005cu, 0x00000107u, 0x00030037u, 0x0000005cu, 0x00000108u, 0x00030037u, 0x0000003eu, 0x00000109u, 0x00030037u, 0x0000003eu, 0x0000010au, 0x00030037u, 0x0000005eu, 0x0000010bu, 0x00030037u, 0x0000005eu, 0x0000010cu, 0x00030037u, 0x0000003eu, 0x0000010du, 0x00030037u, 0x00000060u, 0x0000010eu, 0x00030037u, 0x00000060u, 0x0000010fu, 0x00030037u, 0x00000060u, 0x00000110u, 0x00030037u, 0x0000003eu, 0x00000111u, 0x00030037u, 0x0000005eu, 0x00000112u, 0x000200f8u, 0x00000114u, 0x0004003bu, 0x0000003du, 0x00000d12u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d22u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d31u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d4du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d4eu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d58u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d59u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d60u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d61u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d69u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d71u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d76u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d88u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d8bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d8eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d91u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000dabu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000d13u, 0x00000106u, 0x0008004fu, 0x0000003cu, 0x00000d14u, 0x00000d13u, 0x00000d13u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000d15u, 0x00000107u, 0x0008004fu, 0x0000003cu, 0x00000d16u, 0x00000d15u, 0x00000d15u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d18u, 0x00000d16u, 0x0000eeb2u, 0x00060050u, 0x0000003cu, 0x00000d19u, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x0000003cu, 0x00000d1au, 0x00000d18u, 0x00000d19u, 0x0004003du, 0x00000008u, 0x00000d1bu, 0x00000109u, 0x00060050u, 0x0000003cu, 0x00000d1cu, 0x00000d1bu, 0x00000d1bu, 0x00000d1bu, 0x00050084u, 0x0000003cu, 0x00000d1du, 0x00000d1au, 0x00000d1cu, 0x00050080u, 0x0000003cu, 0x00000d1eu, 0x00000d14u, 0x00000d1du, 0x0003003eu, 0x00000d12u, 0x00000d1eu, 0x0004003du, 0x0000005du, 0x00000d1fu, 0x0000010cu, 0x000300f7u, 0x00000d21u, 0x00000000u, 0x000400fau, 0x00000d1fu, 0x00000d20u, 0x00000d21u, 0x000200f8u, 0x00000d20u, 0x0004003du, 0x00000008u, 0x00000d24u, 0x0000010du, 0x0004003du, 0x00000009u, 0x00000d25u, 0x00000107u, 0x0008004fu, 0x0000003cu, 0x00000d26u, 0x00000d25u, 0x00000d25u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d28u, 0x00000d26u, 0x0000eeb2u, 0x000500c3u, 0x0000003cu, 0x00000d2au, 0x00000d28u, 0x00000d19u, 0x00060050u, 0x0000003cu, 0x00000d2bu, 0x00000d24u, 0x00000d24u, 0x00000d24u, 0x00050084u, 0x0000003cu, 0x00000d2cu, 0x00000d2bu, 0x00000d2au, 0x00050080u, 0x0000003cu, 0x00000d2du, 0x00000d1eu, 0x00000d2cu, 0x0003003eu, 0x00000d22u, 0x00000d2du, 0x000300f7u, 0x00000d30u, 0x00000000u, 0x000400fau, 0x00000d2eu, 0x00000d2fu, 0x00000d3eu, 0x000200f8u, 0x00000d2fu, 0x0004003du, 0x00000008u, 0x00000d33u, 0x0000010du, 0x0006000cu, 0x00000008u, 0x00000d34u, 0x00000001u, 0x00000005u, 0x00000d33u, 0x0004003du, 0x00000009u, 0x00000d35u, 0x00000108u, 0x0008004fu, 0x0000003cu, 0x00000d36u, 0x00000d35u, 0x00000d35u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d38u, 0x00000d36u, 0x0000eeb8u, 0x000500c3u, 0x0000003cu, 0x00000d3au, 0x00000d38u, 0x00000d19u, 0x00060050u, 0x0000003cu, 0x00000d3bu, 0x00000d34u, 0x00000d34u, 0x00000d34u, 0x00050084u, 0x0000003cu, 0x00000d3cu, 0x00000d3bu, 0x00000d3au, 0x00050080u, 0x0000003cu, 0x00000d3du, 0x00000d1eu, 0x00000d3cu, 0x0003003eu, 0x00000d31u, 0x00000d3du, 0x000200f9u, 0x00000d30u, 0x000200f8u, 0x00000d3eu, 0x0004003du, 0x00000009u, 0x00000d40u, 0x00000108u, 0x0008004fu, 0x0000003cu, 0x00000d41u, 0x00000d40u, 0x00000d40u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d43u, 0x00000d41u, 0x0000eeb8u, 0x000500c3u, 0x0000003cu, 0x00000d45u, 0x00000d43u, 0x00000d19u, 0x00050080u, 0x0000003cu, 0x00000d46u, 0x00000d1eu, 0x00000d45u, 0x0003003eu, 0x00000d31u, 0x00000d46u, 0x000200f9u, 0x00000d30u, 0x000200f8u, 0x00000d30u, 0x000700f5u, 0x0000003cu, 0x0000ea68u, 0x00000d3du, 0x00000d2fu, 0x00000d46u, 0x00000d3eu, 0x000200f9u, 0x00000d21u, 0x000200f8u, 0x00000d21u, 0x000700f5u, 0x0000003cu, 0x0000ea67u, 0x0000ea65u, 0x00000114u, 0x0000ea68u, 0x00000d30u, 0x000700f5u, 0x0000003cu, 0x0000ea64u, 0x0000ea65u, 0x00000114u, 0x00000d2du, 0x00000d30u, 0x0004003du, 0x0000005du, 0x00000d47u, 0x0000010bu, 0x000300f7u, 0x00000d49u, 0x00000000u, 0x000400fau, 0x00000d47u, 0x00000d48u, 0x00000d65u, 0x000200f8u, 0x00000d48u, 0x000500c3u, 0x0000003cu, 0x00000d4cu, 0x00000d1eu, 0x0000eeb3u, 0x0003003eu, 0x00000d4du, 0x00000d4cu, 0x0004003du, 0x0000005du, 0x00000d4fu, 0x00000112u, 0x0003003eu, 0x00000d4eu, 0x00000d4fu, 0x00060039u, 0x0000005fu, 0x00000d50u, 0x000000e9u, 0x00000d4du, 0x00000d4eu, 0x0004003du, 0x0000005du, 0x00000d51u, 0x00000d4eu, 0x0003003eu, 0x00000112u, 0x00000d51u, 0x0003003eu, 0x0000010eu, 0x00000d50u, 0x0004003du, 0x0000005du, 0x00000d52u, 0x0000010cu, 0x000300f7u, 0x00000d54u, 0x00000000u, 0x000400fau, 0x00000d52u, 0x00000d53u, 0x00000d54u, 0x000200f8u, 0x00000d53u, 0x000500c3u, 0x0000003cu, 0x00000d57u, 0x0000ea64u, 0x0000eeb3u, 0x0003003eu, 0x00000d58u, 0x00000d57u, 0x0004003du, 0x0000005du, 0x00000d5au, 0x00000112u, 0x0003003eu, 0x00000d59u, 0x00000d5au, 0x00060039u, 0x0000005fu, 0x00000d5bu, 0x000000e9u, 0x00000d58u, 0x00000d59u, 0x0004003du, 0x0000005du, 0x00000d5cu, 0x00000d59u, 0x0003003eu, 0x00000112u, 0x00000d5cu, 0x0003003eu, 0x0000010fu, 0x00000d5bu, 0x000500c3u, 0x0000003cu, 0x00000d5fu, 0x0000ea67u, 0x0000eeb3u, 0x0003003eu, 0x00000d60u, 0x00000d5fu, 0x0004003du, 0x0000005du, 0x00000d62u, 0x00000112u, 0x0003003eu, 0x00000d61u, 0x00000d62u, 0x00060039u, 0x0000005fu, 0x00000d63u, 0x000000e9u, 0x00000d60u, 0x00000d61u, 0x0004003du, 0x0000005du, 0x00000d64u, 0x00000d61u, 0x0003003eu, 0x00000112u, 0x00000d64u, 0x0003003eu, 0x00000110u, 0x00000d63u, 0x000200f9u, 0x00000d54u, 0x000200f8u, 0x00000d54u, 0x000200f9u, 0x00000d49u, 0x000200f8u, 0x00000d65u, 0x000500c3u, 0x0000003cu, 0x00000d68u, 0x00000d1eu, 0x0000eeb3u, 0x0003003eu, 0x00000d69u, 0x00000d68u, 0x00050039u, 0x0000005fu, 0x00000d6au, 0x000000e4u, 0x00000d69u, 0x0003003eu, 0x0000010eu, 0x00000d6au, 0x0004003du, 0x0000005du, 0x00000d6bu, 0x0000010cu, 0x000300f7u, 0x00000d6du, 0x00000000u, 0x000400fau, 0x00000d6bu, 0x00000d6cu, 0x00000d6du, 0x000200f8u, 0x00000d6cu, 0x000500c3u, 0x0000003cu, 0x00000d70u, 0x0000ea64u, 0x0000eeb3u, 0x0003003eu, 0x00000d71u, 0x00000d70u, 0x00050039u, 0x0000005fu, 0x00000d72u, 0x000000e4u, 0x00000d71u, 0x0003003eu, 0x0000010fu, 0x00000d72u, 0x000500c3u, 0x0000003cu, 0x00000d75u, 0x0000ea67u, 0x0000eeb3u, 0x0003003eu, 0x00000d76u, 0x00000d75u, 0x00050039u, 0x0000005fu, 0x00000d77u, 0x000000e4u, 0x00000d76u, 0x0003003eu, 0x00000110u, 0x00000d77u, 0x000200f9u, 0x00000d6du, 0x000200f8u, 0x00000d6du, 0x000200f9u, 0x00000d49u, 0x000200f8u, 0x00000d49u, 0x00050041u, 0x0000003eu, 0x00000d78u, 0x00000106u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000d79u, 0x00000d78u, 0x00050041u, 0x0000003eu, 0x00000d7au, 0x00000107u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000d7bu, 0x00000d7au, 0x0004003du, 0x00000008u, 0x00000d7cu, 0x00000109u, 0x000500c3u, 0x00000008u, 0x00000d7du, 0x00000d7cu, 0x0000078du, 0x00050084u, 0x00000008u, 0x00000d7eu, 0x00000d7bu, 0x00000d7du, 0x00050080u, 0x00000008u, 0x00000d7fu, 0x00000d79u, 0x00000d7eu, 0x0004003du, 0x00000008u, 0x00000d81u, 0x00000d7au, 0x000500c3u, 0x00000008u, 0x00000d82u, 0x00000d81u, 0x0000078du, 0x0004003du, 0x00000008u, 0x00000d83u, 0x00000109u, 0x000500c7u, 0x00000008u, 0x00000d85u, 0x00000d83u, 0x00000d84u, 0x00050084u, 0x00000008u, 0x00000d86u, 0x00000d82u, 0x00000d85u, 0x00050080u, 0x00000008u, 0x00000d87u, 0x00000d7fu, 0x00000d86u, 0x0003003eu, 0x00000111u, 0x00000d87u, 0x0004003du, 0x00000008u, 0x00000d89u, 0x00000111u, 0x000500c3u, 0x00000008u, 0x00000d8au, 0x00000d89u, 0x0000026au, 0x0003003eu, 0x00000d88u, 0x00000d8au, 0x0004003du, 0x00000008u, 0x00000d8cu, 0x0000010au, 0x0006000cu, 0x00000008u, 0x00000d8du, 0x00000001u, 0x00000049u, 0x00000d8cu, 0x0003003eu, 0x00000d8bu, 0x00000d8du, 0x000500c3u, 0x00000008u, 0x00000d90u, 0x00000d8du, 0x00000212u, 0x0003003eu, 0x00000d8eu, 0x00000d90u, 0x000500c7u, 0x00000008u, 0x00000d93u, 0x00000d8du, 0x00000212u, 0x000500c4u, 0x00000008u, 0x00000d94u, 0x00000d93u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00000d96u, 0x00000d90u, 0x00000212u, 0x00050080u, 0x00000008u, 0x00000d97u, 0x00000d94u, 0x00000d96u, 0x0003003eu, 0x00000d91u, 0x00000d97u, 0x000500c4u, 0x00000008u, 0x00000d9au, 0x00000d8au, 0x00000d98u, 0x0003003eu, 0x00000d88u, 0x00000d9au, 0x0004003du, 0x00000008u, 0x00000d9du, 0x00000d7au, 0x000500c3u, 0x00000008u, 0x00000d9eu, 0x00000d9du, 0x0000026au, 0x00050084u, 0x00000008u, 0x00000d9fu, 0x00000d97u, 0x00000d9eu, 0x00050041u, 0x0000003eu, 0x00000da1u, 0x00000108u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000da2u, 0x00000da1u, 0x000500c3u, 0x00000008u, 0x00000da3u, 0x00000da2u, 0x0000026au, 0x00050084u, 0x00000008u, 0x00000da4u, 0x00000d90u, 0x00000da3u, 0x00050080u, 0x00000008u, 0x00000da5u, 0x00000d9fu, 0x00000da4u, 0x00050080u, 0x00000008u, 0x00000da7u, 0x00000d9au, 0x00000da5u, 0x0003003eu, 0x00000d88u, 0x00000da7u, 0x000500c3u, 0x00000008u, 0x00000daau, 0x00000da7u, 0x00000da8u, 0x0003003eu, 0x00000d88u, 0x00000daau, 0x0003003eu, 0x00000dabu, 0x00000daau, 0x00050039u, 0x00000008u, 0x00000dadu, 0x000000dcu, 0x00000dabu, 0x0003003eu, 0x00000111u, 0x00000dadu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000119u, 0x00000000u, 0x00000116u, 0x00030037u, 0x00000115u, 0x00000117u, 0x00030037u, 0x0000003eu, 0x00000118u, 0x000200f8u, 0x0000011au, 0x0004003bu, 0x0000003eu, 0x00000db3u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000daeu, 0x00000117u, 0x00000264u, 0x0004003du, 0x00000008u, 0x00000dafu, 0x00000daeu, 0x000500abu, 0x0000005du, 0x00000db0u, 0x00000dafu, 0x00000203u, 0x000300f7u, 0x00000db2u, 0x00000000u, 0x000400fau, 0x00000db0u, 0x00000db1u, 0x00000db2u, 0x000200f8u, 0x00000db1u, 0x0004003du, 0x00000008u, 0x00000db5u, 0x00000daeu, 0x000500c4u, 0x00000008u, 0x00000db6u, 0x00000212u, 0x00000db5u, 0x0003003eu, 0x00000db3u, 0x00000db6u, 0x00050041u, 0x0000003eu, 0x00000db7u, 0x00000117u, 0x0000027du, 0x0004003du, 0x00000008u, 0x00000db8u, 0x00000db7u, 0x000500c7u, 0x00000008u, 0x00000db9u, 0x00000db8u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00000dbau, 0x00000db9u, 0x00000203u, 0x000300f7u, 0x00000dbcu, 0x00000000u, 0x000400fau, 0x00000dbau, 0x00000dbbu, 0x00000dbcu, 0x000200f8u, 0x00000dbbu, 0x0004003du, 0x00000008u, 0x00000dbdu, 0x00000118u, 0x000500c7u, 0x00000008u, 0x00000dbfu, 0x00000dbdu, 0x00000db6u, 0x00050082u, 0x00000008u, 0x00000dc0u, 0x00000dbfu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00000dc1u, 0x00000001u, 0x0000002au, 0x00000dc0u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000dc2u, 0x00000118u, 0x000500c6u, 0x00000008u, 0x00000dc3u, 0x00000dc2u, 0x00000dc1u, 0x0003003eu, 0x00000118u, 0x00000dc3u, 0x000200f9u, 0x00000dbcu, 0x000200f8u, 0x00000dbcu, 0x00050082u, 0x00000008u, 0x00000dc5u, 0x00000db6u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000dc6u, 0x00000118u, 0x000500c7u, 0x00000008u, 0x00000dc7u, 0x00000dc6u, 0x00000dc5u, 0x0003003eu, 0x00000118u, 0x00000dc7u, 0x000200f9u, 0x00000db2u, 0x000200f8u, 0x00000db2u, 0x0004003du, 0x00000008u, 0x00000dc8u, 0x00000118u, 0x000200feu, 0x00000dc8u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x0000011eu, 0x00000000u, 0x0000011bu, 0x00030037u, 0x00000115u, 0x0000011cu, 0x00030037u, 0x0000003eu, 0x0000011du, 0x000200f8u, 0x0000011fu, 0x0004003bu, 0x00000060u, 0x00000dcbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000dd5u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000dccu, 0x0000011du, 0x00050050u, 0x0000005fu, 0x00000dceu, 0x00000dccu, 0x00000dccu, 0x00050080u, 0x0000005fu, 0x00000dcfu, 0x00000dceu, 0x00000dcdu, 0x0003003eu, 0x00000dcbu, 0x00000dcfu, 0x00050041u, 0x0000003eu, 0x00000dd0u, 0x0000011cu, 0x00000264u, 0x0004003du, 0x00000008u, 0x00000dd1u, 0x00000dd0u, 0x000500abu, 0x0000005du, 0x00000dd2u, 0x00000dd1u, 0x00000203u, 0x000300f7u, 0x00000dd4u, 0x00000000u, 0x000400fau, 0x00000dd2u, 0x00000dd3u, 0x00000dd4u, 0x000200f8u, 0x00000dd3u, 0x0004003du, 0x00000008u, 0x00000dd7u, 0x00000dd0u, 0x000500c4u, 0x00000008u, 0x00000dd8u, 0x00000212u, 0x00000dd7u, 0x0003003eu, 0x00000dd5u, 0x00000dd8u, 0x00050041u, 0x0000003eu, 0x00000dd9u, 0x0000011cu, 0x0000027du, 0x0004003du, 0x00000008u, 0x00000ddau, 0x00000dd9u, 0x000500c7u, 0x00000008u, 0x00000ddbu, 0x00000ddau, 0x00000215u, 0x000500abu, 0x0000005du, 0x00000ddcu, 0x00000ddbu, 0x00000203u, 0x000300f7u, 0x00000ddeu, 0x00000000u, 0x000400fau, 0x00000ddcu, 0x00000dddu, 0x00000ddeu, 0x000200f8u, 0x00000dddu, 0x00050050u, 0x0000005fu, 0x00000de1u, 0x00000dd8u, 0x00000dd8u, 0x000500c7u, 0x0000005fu, 0x00000de2u, 0x00000dcfu, 0x00000de1u, 0x00050082u, 0x0000005fu, 0x00000de4u, 0x00000de2u, 0x0000eeb7u, 0x0007000cu, 0x0000005fu, 0x00000de6u, 0x00000001u, 0x0000002au, 0x00000de4u, 0x00000c29u, 0x000500c6u, 0x0000005fu, 0x00000de8u, 0x00000dcfu, 0x00000de6u, 0x0003003eu, 0x00000dcbu, 0x00000de8u, 0x000200f9u, 0x00000ddeu, 0x000200f8u, 0x00000ddeu, 0x000700f5u, 0x0000005fu, 0x0000ea6bu, 0x00000dcfu, 0x00000dd3u, 0x00000de8u, 0x00000dddu, 0x00050082u, 0x00000008u, 0x00000deau, 0x00000dd8u, 0x00000212u, 0x00050050u, 0x0000005fu, 0x00000decu, 0x00000deau, 0x00000deau, 0x000500c7u, 0x0000005fu, 0x00000dedu, 0x0000ea6bu, 0x00000decu, 0x0003003eu, 0x00000dcbu, 0x00000dedu, 0x000200f9u, 0x00000dd4u, 0x000200f8u, 0x00000dd4u, 0x000700f5u, 0x0000005fu, 0x0000ea6cu, 0x00000dcfu, 0x0000011fu, 0x00000dedu, 0x00000ddeu, 0x000200feu, 0x0000ea6cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000122u, 0x00000000u, 0x00000116u, 0x00030037u, 0x00000115u, 0x00000120u, 0x00030037u, 0x0000003eu, 0x00000121u, 0x000200f8u, 0x00000123u, 0x0004003bu, 0x0000003eu, 0x00000df6u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000df1u, 0x00000120u, 0x0000026fu, 0x0004003du, 0x00000008u, 0x00000df2u, 0x00000df1u, 0x000500abu, 0x0000005du, 0x00000df3u, 0x00000df2u, 0x00000203u, 0x000300f7u, 0x00000df5u, 0x00000000u, 0x000400fau, 0x00000df3u, 0x00000df4u, 0x00000df5u, 0x000200f8u, 0x00000df4u, 0x0004003du, 0x00000008u, 0x00000df8u, 0x00000df1u, 0x000500c4u, 0x00000008u, 0x00000df9u, 0x00000212u, 0x00000df8u, 0x0003003eu, 0x00000df6u, 0x00000df9u, 0x00050041u, 0x0000003eu, 0x00000dfau, 0x00000120u, 0x0000027du, 0x0004003du, 0x00000008u, 0x00000dfbu, 0x00000dfau, 0x000500c7u, 0x00000008u, 0x00000dfcu, 0x00000dfbu, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00000dfdu, 0x00000dfcu, 0x00000203u, 0x000300f7u, 0x00000dffu, 0x00000000u, 0x000400fau, 0x00000dfdu, 0x00000dfeu, 0x00000dffu, 0x000200f8u, 0x00000dfeu, 0x0004003du, 0x00000008u, 0x00000e00u, 0x00000121u, 0x000500c7u, 0x00000008u, 0x00000e02u, 0x00000e00u, 0x00000df9u, 0x00050082u, 0x00000008u, 0x00000e03u, 0x00000e02u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00000e04u, 0x00000001u, 0x0000002au, 0x00000e03u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000e05u, 0x00000121u, 0x000500c6u, 0x00000008u, 0x00000e06u, 0x00000e05u, 0x00000e04u, 0x0003003eu, 0x00000121u, 0x00000e06u, 0x000200f9u, 0x00000dffu, 0x000200f8u, 0x00000dffu, 0x00050082u, 0x00000008u, 0x00000e08u, 0x00000df9u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000e09u, 0x00000121u, 0x000500c7u, 0x00000008u, 0x00000e0au, 0x00000e09u, 0x00000e08u, 0x0003003eu, 0x00000121u, 0x00000e0au, 0x000200f9u, 0x00000df5u, 0x000200f8u, 0x00000df5u, 0x0004003du, 0x00000008u, 0x00000e0bu, 0x00000121u, 0x000200feu, 0x00000e0bu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000126u, 0x00000000u, 0x00000124u, 0x00030037u, 0x00000007u, 0x00000125u, 0x000200f8u, 0x00000127u, 0x0004003bu, 0x00000354u, 0x00000e0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e1eu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e0fu, 0x00000125u, 0x00060050u, 0x00000353u, 0x00000e10u, 0x00000e0fu, 0x00000e0fu, 0x00000e0fu, 0x000500c2u, 0x00000353u, 0x00000e13u, 0x00000e10u, 0x00000e12u, 0x000500c7u, 0x00000353u, 0x00000e16u, 0x00000e13u, 0x0000eebdu, 0x0003003eu, 0x00000e0eu, 0x00000e16u, 0x000500c4u, 0x00000353u, 0x00000e19u, 0x00000e16u, 0x0000eebeu, 0x000500c2u, 0x00000353u, 0x00000e1cu, 0x00000e16u, 0x0000eebfu, 0x000500c5u, 0x00000353u, 0x00000e1du, 0x00000e19u, 0x00000e1cu, 0x0003003eu, 0x00000e0eu, 0x00000e1du, 0x0004003du, 0x00000006u, 0x00000e1fu, 0x00000125u, 0x000500c7u, 0x00000006u, 0x00000e20u, 0x00000e1fu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000e21u, 0x00000e20u, 0x000006c2u, 0x0003003eu, 0x00000e1eu, 0x00000e21u, 0x0004007cu, 0x0000003cu, 0x00000e23u, 0x00000e1du, 0x0004007cu, 0x00000008u, 0x00000e25u, 0x00000e21u, 0x00050051u, 0x00000008u, 0x00000e26u, 0x00000e23u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000e27u, 0x00000e23u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000e28u, 0x00000e23u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000e29u, 0x00000e26u, 0x00000e27u, 0x00000e28u, 0x00000e25u, 0x000200feu, 0x00000e29u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000129u, 0x00000000u, 0x00000124u, 0x00030037u, 0x00000007u, 0x00000128u, 0x000200f8u, 0x0000012au, 0x0004003bu, 0x00000007u, 0x00000e2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e2fu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e2du, 0x00000128u, 0x000500c2u, 0x00000006u, 0x00000e2eu, 0x00000e2du, 0x0000025eu, 0x0003003eu, 0x00000e2cu, 0x00000e2eu, 0x0004003du, 0x00000006u, 0x00000e30u, 0x00000128u, 0x000500c7u, 0x00000006u, 0x00000e31u, 0x00000e30u, 0x000006c2u, 0x0003003eu, 0x00000e2fu, 0x00000e31u, 0x0004007cu, 0x00000008u, 0x00000e33u, 0x00000e2eu, 0x0004007cu, 0x00000008u, 0x00000e39u, 0x00000e31u, 0x00070050u, 0x00000009u, 0x00000e3au, 0x00000e33u, 0x00000e33u, 0x00000e33u, 0x00000e39u, 0x000200feu, 0x00000e3au, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000012fu, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x0000012cu, 0x00030037u, 0x00000007u, 0x0000012du, 0x00030037u, 0x000000a3u, 0x0000012eu, 0x000200f8u, 0x00000130u, 0x0004003bu, 0x00000007u, 0x00000e3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e5eu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e3eu, 0x0000012cu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000e3fu, 0x00000e3eu, 0x00050041u, 0x00000007u, 0x00000e40u, 0x0000012cu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000e41u, 0x00000e40u, 0x00050041u, 0x00000007u, 0x00000e42u, 0x0000012eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000e43u, 0x00000e42u, 0x00050084u, 0x00000006u, 0x00000e44u, 0x00000e41u, 0x00000e43u, 0x00050080u, 0x00000006u, 0x00000e45u, 0x00000e3fu, 0x00000e44u, 0x0003003eu, 0x00000e3du, 0x00000e45u, 0x00050041u, 0x00000007u, 0x00000e46u, 0x0000012eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000e47u, 0x00000e46u, 0x000500c2u, 0x00000006u, 0x00000e48u, 0x00000e47u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000e4au, 0x00000e45u, 0x00000e48u, 0x0003003eu, 0x00000e3du, 0x00000e4au, 0x000500c7u, 0x00000006u, 0x00000e4du, 0x00000e4au, 0x00000e4bu, 0x0003003eu, 0x00000e3du, 0x00000e4du, 0x0004003du, 0x00000006u, 0x00000e50u, 0x00000e46u, 0x000400c8u, 0x00000006u, 0x00000e51u, 0x00000e50u, 0x000500c7u, 0x00000006u, 0x00000e52u, 0x00000e51u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000e53u, 0x00000e52u, 0x00000701u, 0x0003003eu, 0x00000e4eu, 0x00000e53u, 0x0003003eu, 0x00000e54u, 0x00000e4du, 0x0004003du, 0x00000006u, 0x00000e57u, 0x00000e42u, 0x000500c7u, 0x00000006u, 0x00000e58u, 0x00000e57u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000e59u, 0x00000e58u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000e5bu, 0x00000e4du, 0x00000e59u, 0x0003003eu, 0x00000e54u, 0x00000e5bu, 0x000500c6u, 0x00000006u, 0x00000e5du, 0x00000e5bu, 0x0000048bu, 0x0003003eu, 0x00000e54u, 0x00000e5du, 0x0004003du, 0x00000006u, 0x00000e66u, 0x0000012du, 0x00080041u, 0x00000277u, 0x00000e68u, 0x00000e65u, 0x00000203u, 0x00000e66u, 0x00000203u, 0x00000e5du, 0x0004003du, 0x00000229u, 0x00000e69u, 0x00000e68u, 0x00040071u, 0x00000006u, 0x00000e6au, 0x00000e69u, 0x0003003eu, 0x00000e5eu, 0x00000e6au, 0x000500c2u, 0x00000006u, 0x00000e6du, 0x00000e6au, 0x00000e53u, 0x000500c7u, 0x00000006u, 0x00000e6fu, 0x00000e6du, 0x00000e6eu, 0x0003003eu, 0x00000e5eu, 0x00000e6fu, 0x000500c4u, 0x00000006u, 0x00000e71u, 0x00000e6fu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00000e73u, 0x00000e6fu, 0x00000e71u, 0x0003003eu, 0x00000e5eu, 0x00000e73u, 0x0004007cu, 0x00000008u, 0x00000e75u, 0x00000e73u, 0x00070050u, 0x00000009u, 0x00000e76u, 0x00000e75u, 0x00000e75u, 0x00000e75u, 0x00000e75u, 0x000200feu, 0x00000e76u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000134u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000131u, 0x00030037u, 0x00000007u, 0x00000132u, 0x00030037u, 0x000000a3u, 0x00000133u, 0x000200f8u, 0x00000135u, 0x0004003bu, 0x00000007u, 0x00000e79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ea3u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e7au, 0x00000131u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000e7bu, 0x00000e7au, 0x00050041u, 0x00000007u, 0x00000e7cu, 0x00000131u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000e7du, 0x00000e7cu, 0x00050041u, 0x00000007u, 0x00000e7eu, 0x00000133u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000e7fu, 0x00000e7eu, 0x00050084u, 0x00000006u, 0x00000e80u, 0x00000e7du, 0x00000e7fu, 0x00050080u, 0x00000006u, 0x00000e81u, 0x00000e7bu, 0x00000e80u, 0x0003003eu, 0x00000e79u, 0x00000e81u, 0x00050041u, 0x00000007u, 0x00000e82u, 0x00000133u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000e83u, 0x00000e82u, 0x000500c2u, 0x00000006u, 0x00000e84u, 0x00000e83u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000e86u, 0x00000e81u, 0x00000e84u, 0x0003003eu, 0x00000e79u, 0x00000e86u, 0x000500c7u, 0x00000006u, 0x00000e88u, 0x00000e86u, 0x00000e4bu, 0x0003003eu, 0x00000e79u, 0x00000e88u, 0x0004003du, 0x00000006u, 0x00000e8bu, 0x00000e82u, 0x000400c8u, 0x00000006u, 0x00000e8cu, 0x00000e8bu, 0x000500c7u, 0x00000006u, 0x00000e8du, 0x00000e8cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000e8eu, 0x00000e8du, 0x00000701u, 0x0003003eu, 0x00000e89u, 0x00000e8eu, 0x0003003eu, 0x00000e8fu, 0x00000e88u, 0x0004003du, 0x00000006u, 0x00000e92u, 0x00000e7eu, 0x000500c7u, 0x00000006u, 0x00000e93u, 0x00000e92u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000e94u, 0x00000e93u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000e96u, 0x00000e88u, 0x00000e94u, 0x0003003eu, 0x00000e8fu, 0x00000e96u, 0x000500c6u, 0x00000006u, 0x00000e98u, 0x00000e96u, 0x0000048bu, 0x0003003eu, 0x00000e8fu, 0x00000e98u, 0x0004003du, 0x00000006u, 0x00000e9au, 0x00000132u, 0x00080041u, 0x00000277u, 0x00000e9cu, 0x00000e65u, 0x00000203u, 0x00000e9au, 0x00000203u, 0x00000e98u, 0x0004003du, 0x00000229u, 0x00000e9du, 0x00000e9cu, 0x00040071u, 0x00000006u, 0x00000e9eu, 0x00000e9du, 0x0003003eu, 0x00000e99u, 0x00000e9eu, 0x000500c2u, 0x00000006u, 0x00000ea1u, 0x00000e9eu, 0x00000e8eu, 0x000500c7u, 0x00000006u, 0x00000ea2u, 0x00000ea1u, 0x00000e6eu, 0x0003003eu, 0x00000e99u, 0x00000ea2u, 0x000500c7u, 0x00000006u, 0x00000ea6u, 0x00000ea2u, 0x00000ea5u, 0x0003003eu, 0x00000ea3u, 0x00000ea6u, 0x000500c4u, 0x00000006u, 0x00000ea8u, 0x00000ea6u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00000eaau, 0x00000ea6u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00000eabu, 0x00000ea8u, 0x00000eaau, 0x000500c2u, 0x00000006u, 0x00000eadu, 0x00000ea6u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00000eaeu, 0x00000eabu, 0x00000eadu, 0x0003003eu, 0x00000ea3u, 0x00000eaeu, 0x0004007cu, 0x00000008u, 0x00000eb0u, 0x00000eaeu, 0x000500c7u, 0x00000006u, 0x00000eb6u, 0x00000ea2u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000eb7u, 0x00000eb6u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00000eb8u, 0x00000eb7u, 0x00070050u, 0x00000009u, 0x00000eb9u, 0x00000eb0u, 0x00000eb0u, 0x00000eb0u, 0x00000eb8u, 0x000200feu, 0x00000eb9u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000013bu, 0x00000000u, 0x00000136u, 0x00030037u, 0x00000115u, 0x00000137u, 0x00030037u, 0x00000007u, 0x00000138u, 0x00030037u, 0x000000a3u, 0x00000139u, 0x00030037u, 0x00000007u, 0x0000013au, 0x000200f8u, 0x0000013cu, 0x0004003bu, 0x00000007u, 0x00000ebcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ed2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000edcu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000ebdu, 0x00000137u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000ebeu, 0x00000ebdu, 0x00050041u, 0x00000007u, 0x00000ebfu, 0x00000137u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000ec0u, 0x00000ebfu, 0x00050041u, 0x00000007u, 0x00000ec1u, 0x00000139u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000ec2u, 0x00000ec1u, 0x00050084u, 0x00000006u, 0x00000ec3u, 0x00000ec0u, 0x00000ec2u, 0x00050080u, 0x00000006u, 0x00000ec4u, 0x00000ebeu, 0x00000ec3u, 0x0003003eu, 0x00000ebcu, 0x00000ec4u, 0x00050041u, 0x00000007u, 0x00000ec5u, 0x00000139u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000ec6u, 0x00000ec5u, 0x000500c2u, 0x00000006u, 0x00000ec7u, 0x00000ec6u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000ec9u, 0x00000ec4u, 0x00000ec7u, 0x0003003eu, 0x00000ebcu, 0x00000ec9u, 0x000500c7u, 0x00000006u, 0x00000ecbu, 0x00000ec9u, 0x00000e4bu, 0x0003003eu, 0x00000ebcu, 0x00000ecbu, 0x0004003du, 0x00000006u, 0x00000eceu, 0x00000ec5u, 0x000400c8u, 0x00000006u, 0x00000ecfu, 0x00000eceu, 0x000500c7u, 0x00000006u, 0x00000ed0u, 0x00000ecfu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000ed1u, 0x00000ed0u, 0x00000701u, 0x0003003eu, 0x00000eccu, 0x00000ed1u, 0x0003003eu, 0x00000ed2u, 0x00000ecbu, 0x0004003du, 0x00000006u, 0x00000ed5u, 0x00000ec1u, 0x000500c7u, 0x00000006u, 0x00000ed6u, 0x00000ed5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000ed7u, 0x00000ed6u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000ed9u, 0x00000ecbu, 0x00000ed7u, 0x0003003eu, 0x00000ed2u, 0x00000ed9u, 0x000500c6u, 0x00000006u, 0x00000edbu, 0x00000ed9u, 0x0000048bu, 0x0003003eu, 0x00000ed2u, 0x00000edbu, 0x0004003du, 0x00000006u, 0x00000eddu, 0x00000138u, 0x00080041u, 0x00000277u, 0x00000edfu, 0x00000e65u, 0x00000203u, 0x00000eddu, 0x00000203u, 0x00000edbu, 0x0004003du, 0x00000229u, 0x00000ee0u, 0x00000edfu, 0x00040071u, 0x00000006u, 0x00000ee1u, 0x00000ee0u, 0x0003003eu, 0x00000edcu, 0x00000ee1u, 0x000500c2u, 0x00000006u, 0x00000ee4u, 0x00000ee1u, 0x00000ed1u, 0x000500c7u, 0x00000006u, 0x00000ee5u, 0x00000ee4u, 0x00000e6eu, 0x0003003eu, 0x00000edcu, 0x00000ee5u, 0x0004003du, 0x00000006u, 0x00000ee6u, 0x0000013au, 0x000500c4u, 0x00000006u, 0x00000ee7u, 0x00000ee6u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00000ee9u, 0x00000ee5u, 0x00000ee7u, 0x0003003eu, 0x00000edcu, 0x00000ee9u, 0x0004007cu, 0x00000008u, 0x00000eebu, 0x00000ee9u, 0x00070050u, 0x00000009u, 0x00000eecu, 0x00000eebu, 0x00000eebu, 0x00000eebu, 0x00000eebu, 0x000200feu, 0x00000eecu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000145u, 0x00000000u, 0x0000013du, 0x00030037u, 0x00000115u, 0x0000013eu, 0x00030037u, 0x00000007u, 0x0000013fu, 0x00030037u, 0x000000a3u, 0x00000140u, 0x00030037u, 0x00000007u, 0x00000141u, 0x00030037u, 0x00000007u, 0x00000142u, 0x00030037u, 0x00000007u, 0x00000143u, 0x00030037u, 0x0000005eu, 0x00000144u, 0x000200f8u, 0x00000146u, 0x0004003bu, 0x00000007u, 0x00000eefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f1eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000f35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f3cu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000ef0u, 0x0000013eu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000ef1u, 0x00000ef0u, 0x00050041u, 0x00000007u, 0x00000ef2u, 0x0000013eu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000ef3u, 0x00000ef2u, 0x00050041u, 0x00000007u, 0x00000ef4u, 0x00000140u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000ef5u, 0x00000ef4u, 0x00050084u, 0x00000006u, 0x00000ef6u, 0x00000ef3u, 0x00000ef5u, 0x00050080u, 0x00000006u, 0x00000ef7u, 0x00000ef1u, 0x00000ef6u, 0x0003003eu, 0x00000eefu, 0x00000ef7u, 0x00050041u, 0x00000007u, 0x00000ef8u, 0x00000140u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000ef9u, 0x00000ef8u, 0x000500c2u, 0x00000006u, 0x00000efau, 0x00000ef9u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000efcu, 0x00000ef7u, 0x00000efau, 0x0003003eu, 0x00000eefu, 0x00000efcu, 0x000500c7u, 0x00000006u, 0x00000effu, 0x00000efcu, 0x00000efdu, 0x0003003eu, 0x00000eefu, 0x00000effu, 0x0004003du, 0x00000006u, 0x00000f02u, 0x00000ef8u, 0x000400c8u, 0x00000006u, 0x00000f03u, 0x00000f02u, 0x000500c7u, 0x00000006u, 0x00000f04u, 0x00000f03u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000f05u, 0x00000f04u, 0x00000701u, 0x0003003eu, 0x00000f00u, 0x00000f05u, 0x0003003eu, 0x00000f06u, 0x00000effu, 0x0004003du, 0x00000006u, 0x00000f09u, 0x00000ef4u, 0x000500c7u, 0x00000006u, 0x00000f0au, 0x00000f09u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000f0bu, 0x00000f0au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000f0du, 0x00000effu, 0x00000f0bu, 0x0003003eu, 0x00000f06u, 0x00000f0du, 0x000500c6u, 0x00000006u, 0x00000f0fu, 0x00000f0du, 0x0000048bu, 0x0003003eu, 0x00000f06u, 0x00000f0fu, 0x0004003du, 0x00000006u, 0x00000f11u, 0x0000013fu, 0x00080041u, 0x00000277u, 0x00000f13u, 0x00000e65u, 0x00000203u, 0x00000f11u, 0x00000203u, 0x00000f0fu, 0x0004003du, 0x00000229u, 0x00000f14u, 0x00000f13u, 0x00040071u, 0x00000006u, 0x00000f15u, 0x00000f14u, 0x0003003eu, 0x00000f10u, 0x00000f15u, 0x000500c2u, 0x00000006u, 0x00000f18u, 0x00000f15u, 0x00000f05u, 0x000500c7u, 0x00000006u, 0x00000f19u, 0x00000f18u, 0x00000e6eu, 0x0003003eu, 0x00000f10u, 0x00000f19u, 0x0004003du, 0x00000006u, 0x00000f1au, 0x00000141u, 0x000500c4u, 0x00000006u, 0x00000f1bu, 0x00000f1au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00000f1du, 0x00000f19u, 0x00000f1bu, 0x0003003eu, 0x00000f10u, 0x00000f1du, 0x000500c4u, 0x00000006u, 0x00000f20u, 0x00000f1du, 0x00000215u, 0x0004003du, 0x00000006u, 0x00000f21u, 0x00000142u, 0x00050080u, 0x00000006u, 0x00000f22u, 0x00000f20u, 0x00000f21u, 0x0003003eu, 0x00000f1eu, 0x00000f22u, 0x0004003du, 0x00000006u, 0x00000f23u, 0x00000143u, 0x000500c6u, 0x00000006u, 0x00000f25u, 0x00000f22u, 0x00000f23u, 0x0003003eu, 0x00000f1eu, 0x00000f25u, 0x0004003du, 0x00000006u, 0x00000f2du, 0x0000013fu, 0x000500c5u, 0x00000006u, 0x00000f30u, 0x00000f2eu, 0x00000f25u, 0x00080041u, 0x00000270u, 0x00000f31u, 0x00000f2cu, 0x00000203u, 0x00000f2du, 0x00000203u, 0x00000f30u, 0x0004003du, 0x0000022bu, 0x00000f32u, 0x00000f31u, 0x00040071u, 0x00000006u, 0x00000f33u, 0x00000f32u, 0x0003003eu, 0x00000f10u, 0x00000f33u, 0x0004003du, 0x0000005du, 0x00000f34u, 0x00000144u, 0x000300f7u, 0x00000f37u, 0x00000000u, 0x000400fau, 0x00000f34u, 0x00000f36u, 0x00000f3bu, 0x000200f8u, 0x00000f36u, 0x0003003eu, 0x00000f38u, 0x00000f33u, 0x00050039u, 0x00000009u, 0x00000f3au, 0x00000129u, 0x00000f38u, 0x0003003eu, 0x00000f35u, 0x00000f3au, 0x000200f9u, 0x00000f37u, 0x000200f8u, 0x00000f3bu, 0x0003003eu, 0x00000f3cu, 0x00000f33u, 0x00050039u, 0x00000009u, 0x00000f3eu, 0x00000126u, 0x00000f3cu, 0x0003003eu, 0x00000f35u, 0x00000f3eu, 0x000200f9u, 0x00000f37u, 0x000200f8u, 0x00000f37u, 0x000700f5u, 0x00000009u, 0x0000ea6eu, 0x00000f3au, 0x00000f36u, 0x00000f3eu, 0x00000f3bu, 0x000200feu, 0x0000ea6eu, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000014eu, 0x00000000u, 0x00000147u, 0x00030037u, 0x00000115u, 0x00000148u, 0x00030037u, 0x00000007u, 0x00000149u, 0x00030037u, 0x000000a3u, 0x0000014au, 0x00030037u, 0x00000007u, 0x0000014bu, 0x00030037u, 0x00000007u, 0x0000014cu, 0x00030037u, 0x0000005eu, 0x0000014du, 0x000200f8u, 0x0000014fu, 0x0004003bu, 0x00000007u, 0x00000f42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f61u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000f70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f77u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f43u, 0x00000148u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000f44u, 0x00000f43u, 0x00050041u, 0x00000007u, 0x00000f45u, 0x00000148u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000f46u, 0x00000f45u, 0x00050041u, 0x00000007u, 0x00000f47u, 0x0000014au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000f48u, 0x00000f47u, 0x00050084u, 0x00000006u, 0x00000f49u, 0x00000f46u, 0x00000f48u, 0x00050080u, 0x00000006u, 0x00000f4au, 0x00000f44u, 0x00000f49u, 0x0003003eu, 0x00000f42u, 0x00000f4au, 0x00050041u, 0x00000007u, 0x00000f4bu, 0x0000014au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000f4cu, 0x00000f4bu, 0x00050080u, 0x00000006u, 0x00000f4eu, 0x00000f4au, 0x00000f4cu, 0x0003003eu, 0x00000f42u, 0x00000f4eu, 0x000500c7u, 0x00000006u, 0x00000f50u, 0x00000f4eu, 0x00000efdu, 0x0003003eu, 0x00000f42u, 0x00000f50u, 0x0003003eu, 0x00000f51u, 0x00000f50u, 0x0004003du, 0x00000006u, 0x00000f54u, 0x00000f47u, 0x000500c7u, 0x00000006u, 0x00000f55u, 0x00000f54u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000f56u, 0x00000f55u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000f58u, 0x00000f50u, 0x00000f56u, 0x0003003eu, 0x00000f51u, 0x00000f58u, 0x000500c6u, 0x00000006u, 0x00000f5au, 0x00000f58u, 0x0000048bu, 0x0003003eu, 0x00000f51u, 0x00000f5au, 0x0004003du, 0x00000006u, 0x00000f5cu, 0x00000149u, 0x00080041u, 0x00000277u, 0x00000f5eu, 0x00000e65u, 0x00000203u, 0x00000f5cu, 0x00000203u, 0x00000f5au, 0x0004003du, 0x00000229u, 0x00000f5fu, 0x00000f5eu, 0x00040071u, 0x00000006u, 0x00000f60u, 0x00000f5fu, 0x0003003eu, 0x00000f5bu, 0x00000f60u, 0x000500c4u, 0x00000006u, 0x00000f63u, 0x00000f60u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00000f64u, 0x0000014bu, 0x00050080u, 0x00000006u, 0x00000f65u, 0x00000f63u, 0x00000f64u, 0x0003003eu, 0x00000f61u, 0x00000f65u, 0x0004003du, 0x00000006u, 0x00000f66u, 0x0000014cu, 0x000500c6u, 0x00000006u, 0x00000f68u, 0x00000f65u, 0x00000f66u, 0x0003003eu, 0x00000f61u, 0x00000f68u, 0x0004003du, 0x00000006u, 0x00000f69u, 0x00000149u, 0x000500c5u, 0x00000006u, 0x00000f6bu, 0x00000f2eu, 0x00000f68u, 0x00080041u, 0x00000270u, 0x00000f6cu, 0x00000f2cu, 0x00000203u, 0x00000f69u, 0x00000203u, 0x00000f6bu, 0x0004003du, 0x0000022bu, 0x00000f6du, 0x00000f6cu, 0x00040071u, 0x00000006u, 0x00000f6eu, 0x00000f6du, 0x0003003eu, 0x00000f5bu, 0x00000f6eu, 0x0004003du, 0x0000005du, 0x00000f6fu, 0x0000014du, 0x000300f7u, 0x00000f72u, 0x00000000u, 0x000400fau, 0x00000f6fu, 0x00000f71u, 0x00000f76u, 0x000200f8u, 0x00000f71u, 0x0003003eu, 0x00000f73u, 0x00000f6eu, 0x00050039u, 0x00000009u, 0x00000f75u, 0x00000129u, 0x00000f73u, 0x0003003eu, 0x00000f70u, 0x00000f75u, 0x000200f9u, 0x00000f72u, 0x000200f8u, 0x00000f76u, 0x0003003eu, 0x00000f77u, 0x00000f6eu, 0x00050039u, 0x00000009u, 0x00000f79u, 0x00000126u, 0x00000f77u, 0x0003003eu, 0x00000f70u, 0x00000f79u, 0x000200f9u, 0x00000f72u, 0x000200f8u, 0x00000f72u, 0x000700f5u, 0x00000009u, 0x0000ea6fu, 0x00000f75u, 0x00000f71u, 0x00000f79u, 0x00000f76u, 0x000200feu, 0x0000ea6fu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000153u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000150u, 0x00030037u, 0x00000007u, 0x00000151u, 0x00030037u, 0x000000a3u, 0x00000152u, 0x000200f8u, 0x00000154u, 0x0004003bu, 0x00000007u, 0x00000f7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f98u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f7eu, 0x00000150u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000f7fu, 0x00000f7eu, 0x00050041u, 0x00000007u, 0x00000f80u, 0x00000150u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000f81u, 0x00000f80u, 0x00050041u, 0x00000007u, 0x00000f82u, 0x00000152u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000f83u, 0x00000f82u, 0x00050084u, 0x00000006u, 0x00000f84u, 0x00000f81u, 0x00000f83u, 0x00050080u, 0x00000006u, 0x00000f85u, 0x00000f7fu, 0x00000f84u, 0x0003003eu, 0x00000f7du, 0x00000f85u, 0x00050041u, 0x00000007u, 0x00000f86u, 0x00000152u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000f87u, 0x00000f86u, 0x00050084u, 0x00000006u, 0x00000f88u, 0x00000f87u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00000f8au, 0x00000f85u, 0x00000f88u, 0x0003003eu, 0x00000f7du, 0x00000f8au, 0x000500c7u, 0x00000006u, 0x00000f8cu, 0x00000f8au, 0x00000e4bu, 0x0003003eu, 0x00000f7du, 0x00000f8cu, 0x000500c2u, 0x00000006u, 0x00000f8fu, 0x00000f8cu, 0x00000212u, 0x0003003eu, 0x00000f8du, 0x00000f8fu, 0x0004003du, 0x00000006u, 0x00000f91u, 0x00000f82u, 0x000500c7u, 0x00000006u, 0x00000f92u, 0x00000f91u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000f93u, 0x00000f92u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00000f95u, 0x00000f8fu, 0x00000f93u, 0x0003003eu, 0x00000f8du, 0x00000f95u, 0x000500c6u, 0x00000006u, 0x00000f97u, 0x00000f95u, 0x00000485u, 0x0003003eu, 0x00000f8du, 0x00000f97u, 0x0004003du, 0x00000006u, 0x00000f99u, 0x00000151u, 0x00080041u, 0x00000270u, 0x00000f9bu, 0x00000f2cu, 0x00000203u, 0x00000f99u, 0x00000203u, 0x00000f97u, 0x0004003du, 0x0000022bu, 0x00000f9cu, 0x00000f9bu, 0x00040071u, 0x00000006u, 0x00000f9du, 0x00000f9cu, 0x0003003eu, 0x00000f98u, 0x00000f9du, 0x000500c2u, 0x00000006u, 0x00000f9fu, 0x00000f9du, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00000fa0u, 0x00000f9fu, 0x000500c7u, 0x00000006u, 0x00000fa2u, 0x00000f9du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00000fa3u, 0x00000fa2u, 0x00050050u, 0x0000005fu, 0x00000fa4u, 0x00000fa0u, 0x00000fa3u, 0x0009004fu, 0x00000009u, 0x00000fa5u, 0x00000fa4u, 0x00000fa4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000fa5u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000015bu, 0x00000000u, 0x00000147u, 0x00030037u, 0x00000115u, 0x00000155u, 0x00030037u, 0x00000007u, 0x00000156u, 0x00030037u, 0x000000a3u, 0x00000157u, 0x00030037u, 0x00000007u, 0x00000158u, 0x00030037u, 0x00000007u, 0x00000159u, 0x00030037u, 0x0000005eu, 0x0000015au, 0x000200f8u, 0x0000015cu, 0x0004003bu, 0x00000007u, 0x00000fa8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fc9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000fdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fe1u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000fa9u, 0x00000155u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000faau, 0x00000fa9u, 0x00050041u, 0x00000007u, 0x00000fabu, 0x00000155u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000facu, 0x00000fabu, 0x00050041u, 0x00000007u, 0x00000fadu, 0x00000157u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000faeu, 0x00000fadu, 0x00050084u, 0x00000006u, 0x00000fafu, 0x00000facu, 0x00000faeu, 0x00050080u, 0x00000006u, 0x00000fb0u, 0x00000faau, 0x00000fafu, 0x0003003eu, 0x00000fa8u, 0x00000fb0u, 0x00050041u, 0x00000007u, 0x00000fb1u, 0x00000157u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000fb2u, 0x00000fb1u, 0x00050084u, 0x00000006u, 0x00000fb3u, 0x00000fb2u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00000fb5u, 0x00000fb0u, 0x00000fb3u, 0x0003003eu, 0x00000fa8u, 0x00000fb5u, 0x000500c7u, 0x00000006u, 0x00000fb7u, 0x00000fb5u, 0x00000efdu, 0x0003003eu, 0x00000fa8u, 0x00000fb7u, 0x000500c2u, 0x00000006u, 0x00000fbau, 0x00000fb7u, 0x00000212u, 0x0003003eu, 0x00000fb8u, 0x00000fbau, 0x0004003du, 0x00000006u, 0x00000fbcu, 0x00000fadu, 0x000500c7u, 0x00000006u, 0x00000fbdu, 0x00000fbcu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000fbeu, 0x00000fbdu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00000fc0u, 0x00000fbau, 0x00000fbeu, 0x0003003eu, 0x00000fb8u, 0x00000fc0u, 0x000500c6u, 0x00000006u, 0x00000fc2u, 0x00000fc0u, 0x00000485u, 0x0003003eu, 0x00000fb8u, 0x00000fc2u, 0x0004003du, 0x00000006u, 0x00000fc4u, 0x00000156u, 0x00080041u, 0x00000270u, 0x00000fc6u, 0x00000f2cu, 0x00000203u, 0x00000fc4u, 0x00000203u, 0x00000fc2u, 0x0004003du, 0x0000022bu, 0x00000fc7u, 0x00000fc6u, 0x00040071u, 0x00000006u, 0x00000fc8u, 0x00000fc7u, 0x0003003eu, 0x00000fc3u, 0x00000fc8u, 0x000500c2u, 0x00000006u, 0x00000fcbu, 0x00000fc8u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00000fcdu, 0x00000fcbu, 0x00000fccu, 0x0004003du, 0x00000006u, 0x00000fceu, 0x00000158u, 0x00050080u, 0x00000006u, 0x00000fcfu, 0x00000fcdu, 0x00000fceu, 0x0003003eu, 0x00000fc9u, 0x00000fcfu, 0x0004003du, 0x00000006u, 0x00000fd0u, 0x00000159u, 0x000500c6u, 0x00000006u, 0x00000fd2u, 0x00000fcfu, 0x00000fd0u, 0x0003003eu, 0x00000fc9u, 0x00000fd2u, 0x0004003du, 0x00000006u, 0x00000fd3u, 0x00000156u, 0x000500c5u, 0x00000006u, 0x00000fd5u, 0x00000f2eu, 0x00000fd2u, 0x00080041u, 0x00000270u, 0x00000fd6u, 0x00000f2cu, 0x00000203u, 0x00000fd3u, 0x00000203u, 0x00000fd5u, 0x0004003du, 0x0000022bu, 0x00000fd7u, 0x00000fd6u, 0x00040071u, 0x00000006u, 0x00000fd8u, 0x00000fd7u, 0x0003003eu, 0x00000fc3u, 0x00000fd8u, 0x0004003du, 0x0000005du, 0x00000fd9u, 0x0000015au, 0x000300f7u, 0x00000fdcu, 0x00000000u, 0x000400fau, 0x00000fd9u, 0x00000fdbu, 0x00000fe0u, 0x000200f8u, 0x00000fdbu, 0x0003003eu, 0x00000fddu, 0x00000fd8u, 0x00050039u, 0x00000009u, 0x00000fdfu, 0x00000129u, 0x00000fddu, 0x0003003eu, 0x00000fdau, 0x00000fdfu, 0x000200f9u, 0x00000fdcu, 0x000200f8u, 0x00000fe0u, 0x0003003eu, 0x00000fe1u, 0x00000fd8u, 0x00050039u, 0x00000009u, 0x00000fe3u, 0x00000126u, 0x00000fe1u, 0x0003003eu, 0x00000fdau, 0x00000fe3u, 0x000200f9u, 0x00000fdcu, 0x000200f8u, 0x00000fdcu, 0x000700f5u, 0x00000009u, 0x0000ea70u, 0x00000fdfu, 0x00000fdbu, 0x00000fe3u, 0x00000fe0u, 0x000200feu, 0x0000ea70u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000160u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x0000015du, 0x00030037u, 0x00000007u, 0x0000015eu, 0x00030037u, 0x000000a3u, 0x0000015fu, 0x000200f8u, 0x00000161u, 0x0004003bu, 0x00000007u, 0x00000fe7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ff6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001000u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000fe8u, 0x0000015du, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000fe9u, 0x00000fe8u, 0x00050041u, 0x00000007u, 0x00000feau, 0x0000015du, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000febu, 0x00000feau, 0x00050041u, 0x00000007u, 0x00000fecu, 0x0000015fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000fedu, 0x00000fecu, 0x00050084u, 0x00000006u, 0x00000feeu, 0x00000febu, 0x00000fedu, 0x00050080u, 0x00000006u, 0x00000fefu, 0x00000fe9u, 0x00000feeu, 0x0003003eu, 0x00000fe7u, 0x00000fefu, 0x00050041u, 0x00000007u, 0x00000ff0u, 0x0000015fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000ff1u, 0x00000ff0u, 0x00050080u, 0x00000006u, 0x00000ff3u, 0x00000fefu, 0x00000ff1u, 0x0003003eu, 0x00000fe7u, 0x00000ff3u, 0x000500c7u, 0x00000006u, 0x00000ff5u, 0x00000ff3u, 0x00000e4bu, 0x0003003eu, 0x00000fe7u, 0x00000ff5u, 0x0003003eu, 0x00000ff6u, 0x00000ff5u, 0x0004003du, 0x00000006u, 0x00000ff9u, 0x00000fecu, 0x000500c7u, 0x00000006u, 0x00000ffau, 0x00000ff9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000ffbu, 0x00000ffau, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000ffdu, 0x00000ff5u, 0x00000ffbu, 0x0003003eu, 0x00000ff6u, 0x00000ffdu, 0x000500c6u, 0x00000006u, 0x00000fffu, 0x00000ffdu, 0x0000048bu, 0x0003003eu, 0x00000ff6u, 0x00000fffu, 0x0004003du, 0x00000006u, 0x00001001u, 0x0000015eu, 0x00080041u, 0x00000277u, 0x00001003u, 0x00000e65u, 0x00000203u, 0x00001001u, 0x00000203u, 0x00000fffu, 0x0004003du, 0x00000229u, 0x00001004u, 0x00001003u, 0x00040071u, 0x00000006u, 0x00001005u, 0x00001004u, 0x0003003eu, 0x00001000u, 0x00001005u, 0x0004007cu, 0x00000008u, 0x00001007u, 0x00001005u, 0x00070050u, 0x00000009u, 0x00001008u, 0x00001007u, 0x00001007u, 0x00001007u, 0x00001007u, 0x000200feu, 0x00001008u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000165u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000162u, 0x00030037u, 0x00000007u, 0x00000163u, 0x00030037u, 0x000000a3u, 0x00000164u, 0x000200f8u, 0x00000166u, 0x0004003bu, 0x00000007u, 0x0000100bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000101au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001024u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000102au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000102du, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000100cu, 0x00000162u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000100du, 0x0000100cu, 0x00050041u, 0x00000007u, 0x0000100eu, 0x00000162u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000100fu, 0x0000100eu, 0x00050041u, 0x00000007u, 0x00001010u, 0x00000164u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001011u, 0x00001010u, 0x00050084u, 0x00000006u, 0x00001012u, 0x0000100fu, 0x00001011u, 0x00050080u, 0x00000006u, 0x00001013u, 0x0000100du, 0x00001012u, 0x0003003eu, 0x0000100bu, 0x00001013u, 0x00050041u, 0x00000007u, 0x00001014u, 0x00000164u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001015u, 0x00001014u, 0x00050080u, 0x00000006u, 0x00001017u, 0x00001013u, 0x00001015u, 0x0003003eu, 0x0000100bu, 0x00001017u, 0x000500c7u, 0x00000006u, 0x00001019u, 0x00001017u, 0x00000e4bu, 0x0003003eu, 0x0000100bu, 0x00001019u, 0x0003003eu, 0x0000101au, 0x00001019u, 0x0004003du, 0x00000006u, 0x0000101du, 0x00001010u, 0x000500c7u, 0x00000006u, 0x0000101eu, 0x0000101du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000101fu, 0x0000101eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00001021u, 0x00001019u, 0x0000101fu, 0x0003003eu, 0x0000101au, 0x00001021u, 0x000500c6u, 0x00000006u, 0x00001023u, 0x00001021u, 0x0000048bu, 0x0003003eu, 0x0000101au, 0x00001023u, 0x0004003du, 0x00000006u, 0x00001025u, 0x00000163u, 0x00080041u, 0x00000277u, 0x00001027u, 0x00000e65u, 0x00000203u, 0x00001025u, 0x00000203u, 0x00001023u, 0x0004003du, 0x00000229u, 0x00001028u, 0x00001027u, 0x00040071u, 0x00000006u, 0x00001029u, 0x00001028u, 0x0003003eu, 0x00001024u, 0x00001029u, 0x000500c2u, 0x00000006u, 0x0000102cu, 0x00001029u, 0x0000021bu, 0x0003003eu, 0x0000102au, 0x0000102cu, 0x000500c7u, 0x00000006u, 0x0000102fu, 0x00001029u, 0x00000e6eu, 0x0003003eu, 0x0000102du, 0x0000102fu, 0x000500c4u, 0x00000006u, 0x00001031u, 0x0000102fu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00001033u, 0x0000102fu, 0x00001031u, 0x0003003eu, 0x0000102du, 0x00001033u, 0x000500c4u, 0x00000006u, 0x00001035u, 0x0000102cu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00001037u, 0x0000102cu, 0x00001035u, 0x0003003eu, 0x0000102au, 0x00001037u, 0x0004007cu, 0x00000008u, 0x00001039u, 0x00001037u, 0x0004007cu, 0x00000008u, 0x0000103fu, 0x00001033u, 0x00070050u, 0x00000009u, 0x00001040u, 0x00001039u, 0x00001039u, 0x00001039u, 0x0000103fu, 0x000200feu, 0x00001040u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000016bu, 0x00000000u, 0x00000136u, 0x00030037u, 0x00000115u, 0x00000167u, 0x00030037u, 0x00000007u, 0x00000168u, 0x00030037u, 0x000000a3u, 0x00000169u, 0x00030037u, 0x00000007u, 0x0000016au, 0x000200f8u, 0x0000016cu, 0x0004003bu, 0x00000007u, 0x00001043u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000104cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001053u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000105au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001064u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000106fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001077u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000107eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001082u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001044u, 0x00000167u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001045u, 0x00001044u, 0x00050041u, 0x00000007u, 0x00001046u, 0x00000167u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00001047u, 0x00001046u, 0x00050041u, 0x00000007u, 0x00001048u, 0x00000169u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001049u, 0x00001048u, 0x00050084u, 0x00000006u, 0x0000104au, 0x00001047u, 0x00001049u, 0x00050080u, 0x00000006u, 0x0000104bu, 0x00001045u, 0x0000104au, 0x0003003eu, 0x00001043u, 0x0000104bu, 0x00050041u, 0x00000007u, 0x0000104eu, 0x00000169u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000104fu, 0x0000104eu, 0x00050080u, 0x00000006u, 0x00001050u, 0x0000104bu, 0x0000104fu, 0x0003003eu, 0x0000104cu, 0x00001050u, 0x000500c7u, 0x00000006u, 0x00001052u, 0x00001050u, 0x00000efdu, 0x0003003eu, 0x0000104cu, 0x00001052u, 0x0004003du, 0x00000006u, 0x00001055u, 0x0000016au, 0x00050084u, 0x00000006u, 0x00001056u, 0x00001055u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00001057u, 0x0000104bu, 0x00001056u, 0x0003003eu, 0x00001053u, 0x00001057u, 0x000500c7u, 0x00000006u, 0x00001059u, 0x00001057u, 0x00000efdu, 0x0003003eu, 0x00001053u, 0x00001059u, 0x0003003eu, 0x0000105au, 0x00001052u, 0x0004003du, 0x00000006u, 0x0000105du, 0x00001048u, 0x000500c7u, 0x00000006u, 0x0000105eu, 0x0000105du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000105fu, 0x0000105eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00001061u, 0x00001052u, 0x0000105fu, 0x0003003eu, 0x0000105au, 0x00001061u, 0x000500c6u, 0x00000006u, 0x00001063u, 0x00001061u, 0x0000048bu, 0x0003003eu, 0x0000105au, 0x00001063u, 0x000500c2u, 0x00000006u, 0x00001066u, 0x00001059u, 0x00000212u, 0x0003003eu, 0x00001064u, 0x00001066u, 0x0004003du, 0x00000006u, 0x00001068u, 0x00001048u, 0x000500c7u, 0x00000006u, 0x00001069u, 0x00001068u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000106au, 0x00001069u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000106cu, 0x00001066u, 0x0000106au, 0x0003003eu, 0x00001064u, 0x0000106cu, 0x000500c6u, 0x00000006u, 0x0000106eu, 0x0000106cu, 0x00000485u, 0x0003003eu, 0x00001064u, 0x0000106eu, 0x0004003du, 0x00000006u, 0x00001070u, 0x00000168u, 0x000500c5u, 0x00000006u, 0x00001072u, 0x00001063u, 0x00000f26u, 0x00080041u, 0x00000277u, 0x00001073u, 0x00000e65u, 0x00000203u, 0x00001070u, 0x00000203u, 0x00001072u, 0x0004003du, 0x00000229u, 0x00001074u, 0x00001073u, 0x00040071u, 0x00000006u, 0x00001075u, 0x00001074u, 0x0004007cu, 0x00000008u, 0x00001076u, 0x00001075u, 0x0003003eu, 0x0000106fu, 0x00001076u, 0x0004003du, 0x00000006u, 0x00001078u, 0x00000168u, 0x00080041u, 0x00000270u, 0x0000107au, 0x00000f2cu, 0x00000203u, 0x00001078u, 0x00000203u, 0x0000106eu, 0x0004003du, 0x0000022bu, 0x0000107bu, 0x0000107au, 0x00040071u, 0x00000006u, 0x0000107cu, 0x0000107bu, 0x0004007cu, 0x00000008u, 0x0000107du, 0x0000107cu, 0x0003003eu, 0x00001077u, 0x0000107du, 0x000500c3u, 0x00000008u, 0x00001080u, 0x0000107du, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00001081u, 0x00001080u, 0x0000038bu, 0x0003003eu, 0x0000107eu, 0x00001081u, 0x000500c3u, 0x00000008u, 0x00001084u, 0x0000107du, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00001085u, 0x00001084u, 0x0000038bu, 0x0003003eu, 0x00001082u, 0x00001085u, 0x00050082u, 0x00000008u, 0x00001087u, 0x00001081u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00001089u, 0x00001085u, 0x00000623u, 0x00070050u, 0x00000009u, 0x0000108cu, 0x00001087u, 0x00001089u, 0x00001076u, 0x00001076u, 0x000200feu, 0x0000108cu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000170u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x0000016du, 0x00030037u, 0x00000007u, 0x0000016eu, 0x00030037u, 0x000000a3u, 0x0000016fu, 0x000200f8u, 0x00000171u, 0x0004003bu, 0x00000007u, 0x0000108fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000109fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010b0u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001090u, 0x0000016du, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001091u, 0x00001090u, 0x00050041u, 0x00000007u, 0x00001092u, 0x0000016du, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00001093u, 0x00001092u, 0x00050041u, 0x00000007u, 0x00001094u, 0x0000016fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001095u, 0x00001094u, 0x00050084u, 0x00000006u, 0x00001096u, 0x00001093u, 0x00001095u, 0x00050080u, 0x00000006u, 0x00001097u, 0x00001091u, 0x00001096u, 0x0003003eu, 0x0000108fu, 0x00001097u, 0x00050041u, 0x00000007u, 0x00001098u, 0x0000016fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001099u, 0x00001098u, 0x00050084u, 0x00000006u, 0x0000109au, 0x00001099u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000109cu, 0x00001097u, 0x0000109au, 0x0003003eu, 0x0000108fu, 0x0000109cu, 0x000500c7u, 0x00000006u, 0x0000109eu, 0x0000109cu, 0x00000e4bu, 0x0003003eu, 0x0000108fu, 0x0000109eu, 0x000500c2u, 0x00000006u, 0x000010a1u, 0x0000109eu, 0x00000212u, 0x0003003eu, 0x0000109fu, 0x000010a1u, 0x0004003du, 0x00000006u, 0x000010a3u, 0x00001094u, 0x000500c7u, 0x00000006u, 0x000010a4u, 0x000010a3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000010a5u, 0x000010a4u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000010a7u, 0x000010a1u, 0x000010a5u, 0x0003003eu, 0x0000109fu, 0x000010a7u, 0x000500c6u, 0x00000006u, 0x000010a9u, 0x000010a7u, 0x00000485u, 0x0003003eu, 0x0000109fu, 0x000010a9u, 0x0004003du, 0x00000006u, 0x000010abu, 0x0000016eu, 0x00080041u, 0x00000270u, 0x000010adu, 0x00000f2cu, 0x00000203u, 0x000010abu, 0x00000203u, 0x000010a9u, 0x0004003du, 0x0000022bu, 0x000010aeu, 0x000010adu, 0x00040071u, 0x00000006u, 0x000010afu, 0x000010aeu, 0x0003003eu, 0x000010aau, 0x000010afu, 0x0003003eu, 0x000010b0u, 0x000010afu, 0x00050039u, 0x00000009u, 0x000010b2u, 0x00000126u, 0x000010b0u, 0x000200feu, 0x000010b2u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000175u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000172u, 0x00030037u, 0x00000007u, 0x00000173u, 0x00030037u, 0x000000a3u, 0x00000174u, 0x000200f8u, 0x00000176u, 0x0004003bu, 0x00000007u, 0x000010b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010d6u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010b6u, 0x00000172u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000010b7u, 0x000010b6u, 0x00050041u, 0x00000007u, 0x000010b8u, 0x00000172u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000010b9u, 0x000010b8u, 0x00050041u, 0x00000007u, 0x000010bau, 0x00000174u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000010bbu, 0x000010bau, 0x00050084u, 0x00000006u, 0x000010bcu, 0x000010b9u, 0x000010bbu, 0x00050080u, 0x00000006u, 0x000010bdu, 0x000010b7u, 0x000010bcu, 0x0003003eu, 0x000010b5u, 0x000010bdu, 0x00050041u, 0x00000007u, 0x000010beu, 0x00000174u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000010bfu, 0x000010beu, 0x00050084u, 0x00000006u, 0x000010c0u, 0x000010bfu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000010c2u, 0x000010bdu, 0x000010c0u, 0x0003003eu, 0x000010b5u, 0x000010c2u, 0x000500c7u, 0x00000006u, 0x000010c4u, 0x000010c2u, 0x00000e4bu, 0x0003003eu, 0x000010b5u, 0x000010c4u, 0x000500c2u, 0x00000006u, 0x000010c7u, 0x000010c4u, 0x00000212u, 0x0003003eu, 0x000010c5u, 0x000010c7u, 0x0004003du, 0x00000006u, 0x000010c9u, 0x000010bau, 0x000500c7u, 0x00000006u, 0x000010cau, 0x000010c9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000010cbu, 0x000010cau, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000010cdu, 0x000010c7u, 0x000010cbu, 0x0003003eu, 0x000010c5u, 0x000010cdu, 0x000500c6u, 0x00000006u, 0x000010cfu, 0x000010cdu, 0x00000485u, 0x0003003eu, 0x000010c5u, 0x000010cfu, 0x0004003du, 0x00000006u, 0x000010d1u, 0x00000173u, 0x00080041u, 0x00000270u, 0x000010d3u, 0x00000f2cu, 0x00000203u, 0x000010d1u, 0x00000203u, 0x000010cfu, 0x0004003du, 0x0000022bu, 0x000010d4u, 0x000010d3u, 0x00040071u, 0x00000006u, 0x000010d5u, 0x000010d4u, 0x0003003eu, 0x000010d0u, 0x000010d5u, 0x0003003eu, 0x000010d6u, 0x000010d5u, 0x00050039u, 0x00000009u, 0x000010d8u, 0x00000129u, 0x000010d6u, 0x000200feu, 0x000010d8u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000017au, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000177u, 0x00030037u, 0x00000007u, 0x00000178u, 0x00030037u, 0x000000a3u, 0x00000179u, 0x000200f8u, 0x0000017bu, 0x0004003bu, 0x00000007u, 0x000010dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010fcu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010dcu, 0x00000177u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000010ddu, 0x000010dcu, 0x00050041u, 0x00000007u, 0x000010deu, 0x00000177u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000010dfu, 0x000010deu, 0x00050041u, 0x00000007u, 0x000010e0u, 0x00000179u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000010e1u, 0x000010e0u, 0x00050084u, 0x00000006u, 0x000010e2u, 0x000010dfu, 0x000010e1u, 0x00050080u, 0x00000006u, 0x000010e3u, 0x000010ddu, 0x000010e2u, 0x0003003eu, 0x000010dbu, 0x000010e3u, 0x00050041u, 0x00000007u, 0x000010e4u, 0x00000179u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000010e5u, 0x000010e4u, 0x00050084u, 0x00000006u, 0x000010e6u, 0x000010e5u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000010e8u, 0x000010e3u, 0x000010e6u, 0x0003003eu, 0x000010dbu, 0x000010e8u, 0x000500c7u, 0x00000006u, 0x000010eau, 0x000010e8u, 0x00000efdu, 0x0003003eu, 0x000010dbu, 0x000010eau, 0x000500c2u, 0x00000006u, 0x000010edu, 0x000010eau, 0x00000212u, 0x0003003eu, 0x000010ebu, 0x000010edu, 0x0004003du, 0x00000006u, 0x000010efu, 0x000010e0u, 0x000500c7u, 0x00000006u, 0x000010f0u, 0x000010efu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000010f1u, 0x000010f0u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000010f3u, 0x000010edu, 0x000010f1u, 0x0003003eu, 0x000010ebu, 0x000010f3u, 0x000500c6u, 0x00000006u, 0x000010f5u, 0x000010f3u, 0x00000485u, 0x0003003eu, 0x000010ebu, 0x000010f5u, 0x0004003du, 0x00000006u, 0x000010f7u, 0x00000178u, 0x00080041u, 0x00000270u, 0x000010f9u, 0x00000f2cu, 0x00000203u, 0x000010f7u, 0x00000203u, 0x000010f5u, 0x0004003du, 0x0000022bu, 0x000010fau, 0x000010f9u, 0x00040071u, 0x00000006u, 0x000010fbu, 0x000010fau, 0x0003003eu, 0x000010f6u, 0x000010fbu, 0x0004003du, 0x00000006u, 0x000010fdu, 0x00000178u, 0x000500c5u, 0x00000006u, 0x000010ffu, 0x000010f5u, 0x00000f2eu, 0x00080041u, 0x00000270u, 0x00001100u, 0x00000f2cu, 0x00000203u, 0x000010fdu, 0x00000203u, 0x000010ffu, 0x0004003du, 0x0000022bu, 0x00001101u, 0x00001100u, 0x00040071u, 0x00000006u, 0x00001102u, 0x00001101u, 0x0003003eu, 0x000010fcu, 0x00001102u, 0x000500c2u, 0x00000006u, 0x00001104u, 0x000010fbu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00001105u, 0x00001104u, 0x000500c7u, 0x00000006u, 0x00001107u, 0x000010fbu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00001108u, 0x00001107u, 0x000500c2u, 0x00000006u, 0x0000110au, 0x00001102u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000110bu, 0x0000110au, 0x000500c7u, 0x00000006u, 0x0000110du, 0x00001102u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000110eu, 0x0000110du, 0x00070050u, 0x00000009u, 0x0000110fu, 0x00001105u, 0x00001108u, 0x0000110bu, 0x0000110eu, 0x000200feu, 0x0000110fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000182u, 0x00000000u, 0x0000017cu, 0x00030037u, 0x0000005eu, 0x0000017du, 0x00030037u, 0x0000003eu, 0x0000017eu, 0x00030037u, 0x0000003eu, 0x0000017fu, 0x00030037u, 0x0000003eu, 0x00000180u, 0x00030037u, 0x0000003eu, 0x00000181u, 0x000200f8u, 0x00000183u, 0x0004003bu, 0x0000005eu, 0x00001125u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001112u, 0x0000017eu, 0x0008000cu, 0x00000008u, 0x00001113u, 0x00000001u, 0x0000002du, 0x00001112u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x0000017eu, 0x00001113u, 0x0004003du, 0x00000008u, 0x00001114u, 0x00000181u, 0x000500b1u, 0x0000005du, 0x00001115u, 0x00001114u, 0x0000026fu, 0x000300f7u, 0x00001117u, 0x00000000u, 0x000400fau, 0x00001115u, 0x00001116u, 0x0000111bu, 0x000200f8u, 0x00001116u, 0x0004003du, 0x00000008u, 0x00001118u, 0x00000181u, 0x0004003du, 0x00000008u, 0x00001119u, 0x0000017eu, 0x000500c3u, 0x00000008u, 0x0000111au, 0x00001119u, 0x00001118u, 0x0003003eu, 0x0000017eu, 0x0000111au, 0x000200f9u, 0x00001117u, 0x000200f8u, 0x0000111bu, 0x0004003du, 0x00000008u, 0x0000111cu, 0x00000181u, 0x00050082u, 0x00000008u, 0x0000111du, 0x0000037du, 0x0000111cu, 0x0004003du, 0x00000008u, 0x0000111eu, 0x0000017eu, 0x000500c4u, 0x00000008u, 0x0000111fu, 0x0000111eu, 0x0000111du, 0x0003003eu, 0x0000017eu, 0x0000111fu, 0x0004003du, 0x00000008u, 0x00001120u, 0x0000017eu, 0x000500c3u, 0x00000008u, 0x00001121u, 0x00001120u, 0x00000559u, 0x0003003eu, 0x0000017eu, 0x00001121u, 0x000200f9u, 0x00001117u, 0x000200f8u, 0x00001117u, 0x0004003du, 0x0000005du, 0x00001122u, 0x0000017du, 0x000300f7u, 0x00001124u, 0x00000000u, 0x000400fau, 0x00001122u, 0x00001123u, 0x0000113bu, 0x000200f8u, 0x00001123u, 0x0004003du, 0x00000008u, 0x00001126u, 0x0000017eu, 0x000500c3u, 0x00000008u, 0x00001127u, 0x00001126u, 0x00000218u, 0x0004003du, 0x00000008u, 0x00001128u, 0x00000180u, 0x000500afu, 0x0000005du, 0x00001129u, 0x00001127u, 0x00001128u, 0x0003003eu, 0x00001125u, 0x00001129u, 0x000300f7u, 0x0000112cu, 0x00000000u, 0x000400fau, 0x00001129u, 0x0000112bu, 0x00001135u, 0x000200f8u, 0x0000112bu, 0x0004003du, 0x00000008u, 0x0000112du, 0x00000180u, 0x000500c3u, 0x00000008u, 0x0000112eu, 0x0000112du, 0x00000215u, 0x0004003du, 0x00000008u, 0x0000112fu, 0x0000017fu, 0x000500c3u, 0x00000008u, 0x00001130u, 0x0000112fu, 0x00000215u, 0x00050082u, 0x00000008u, 0x00001131u, 0x0000112eu, 0x00001130u, 0x000500c7u, 0x00000008u, 0x00001133u, 0x00001131u, 0x00001132u, 0x000500c4u, 0x00000008u, 0x00001134u, 0x00001133u, 0x0000021eu, 0x0003003eu, 0x0000017eu, 0x00001134u, 0x000200f9u, 0x0000112cu, 0x000200f8u, 0x00001135u, 0x0004003du, 0x00000008u, 0x00001136u, 0x0000017eu, 0x0004003du, 0x00000008u, 0x00001137u, 0x0000017fu, 0x000500c4u, 0x00000008u, 0x00001138u, 0x00001137u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00001139u, 0x00001136u, 0x00001138u, 0x0007000cu, 0x00000008u, 0x0000113au, 0x00000001u, 0x0000002au, 0x00001139u, 0x00000203u, 0x0003003eu, 0x0000017eu, 0x0000113au, 0x000200f9u, 0x0000112cu, 0x000200f8u, 0x0000112cu, 0x000200f9u, 0x00001124u, 0x000200f8u, 0x0000113bu, 0x0004003du, 0x00000008u, 0x0000113cu, 0x0000017fu, 0x000500c4u, 0x00000008u, 0x0000113du, 0x0000113cu, 0x00000218u, 0x0004003du, 0x00000008u, 0x0000113eu, 0x0000017eu, 0x00050082u, 0x00000008u, 0x0000113fu, 0x0000113eu, 0x0000113du, 0x0003003eu, 0x0000017eu, 0x0000113fu, 0x000200f9u, 0x00001124u, 0x000200f8u, 0x00001124u, 0x0004003du, 0x00000008u, 0x00001140u, 0x0000017eu, 0x000200feu, 0x00001140u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000188u, 0x00000000u, 0x00000184u, 0x00030037u, 0x0000003eu, 0x00000185u, 0x00030037u, 0x0000003eu, 0x00000186u, 0x00030037u, 0x0000003eu, 0x00000187u, 0x000200f8u, 0x00000189u, 0x0004003du, 0x00000008u, 0x00001143u, 0x00000185u, 0x0008000cu, 0x00000008u, 0x00001144u, 0x00000001u, 0x0000002du, 0x00001143u, 0x00000c42u, 0x00000bfdu, 0x0003003eu, 0x00000185u, 0x00001144u, 0x0004003du, 0x00000008u, 0x00001145u, 0x00000187u, 0x000500b1u, 0x0000005du, 0x00001146u, 0x00001145u, 0x0000026fu, 0x000300f7u, 0x00001148u, 0x00000000u, 0x000400fau, 0x00001146u, 0x00001147u, 0x0000114cu, 0x000200f8u, 0x00001147u, 0x0004003du, 0x00000008u, 0x00001149u, 0x00000187u, 0x0004003du, 0x00000008u, 0x0000114au, 0x00000185u, 0x000500c3u, 0x00000008u, 0x0000114bu, 0x0000114au, 0x00001149u, 0x0003003eu, 0x00000185u, 0x0000114bu, 0x000200f9u, 0x00001148u, 0x000200f8u, 0x0000114cu, 0x0004003du, 0x00000008u, 0x0000114du, 0x00000187u, 0x00050082u, 0x00000008u, 0x0000114eu, 0x0000037du, 0x0000114du, 0x0004003du, 0x00000008u, 0x0000114fu, 0x00000185u, 0x000500c4u, 0x00000008u, 0x00001150u, 0x0000114fu, 0x0000114eu, 0x0003003eu, 0x00000185u, 0x00001150u, 0x0004003du, 0x00000008u, 0x00001151u, 0x00000185u, 0x000500c3u, 0x00000008u, 0x00001152u, 0x00001151u, 0x00000559u, 0x0003003eu, 0x00000185u, 0x00001152u, 0x000200f9u, 0x00001148u, 0x000200f8u, 0x00001148u, 0x0004003du, 0x00000008u, 0x00001153u, 0x00000186u, 0x000500c4u, 0x00000008u, 0x00001154u, 0x00001153u, 0x00000218u, 0x0004003du, 0x00000008u, 0x00001155u, 0x00000185u, 0x00050082u, 0x00000008u, 0x00001156u, 0x00001155u, 0x00001154u, 0x0003003eu, 0x00000185u, 0x00001156u, 0x0004003du, 0x00000008u, 0x00001157u, 0x00000185u, 0x000200feu, 0x00001157u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000191u, 0x00000000u, 0x0000018au, 0x00030037u, 0x00000115u, 0x0000018bu, 0x00030037u, 0x00000007u, 0x0000018cu, 0x00030037u, 0x00000060u, 0x0000018du, 0x00030037u, 0x0000003eu, 0x0000018eu, 0x00030037u, 0x0000005eu, 0x0000018fu, 0x00030037u, 0x0000005eu, 0x00000190u, 0x000200f8u, 0x00000192u, 0x0004003bu, 0x0000005eu, 0x0000115au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000115du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001168u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000116cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001170u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000117eu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000117fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001181u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001185u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001186u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001188u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000118cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001195u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000011a9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000011b2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000011bbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000011feu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001209u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000120au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000120cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001210u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001211u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001213u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001217u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001220u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000122fu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000115bu, 0x0000018eu, 0x000500b1u, 0x0000005du, 0x0000115cu, 0x0000115bu, 0x00000215u, 0x0003003eu, 0x0000115au, 0x0000115cu, 0x000300f7u, 0x00001160u, 0x00000000u, 0x000400fau, 0x0000115cu, 0x0000115fu, 0x00001160u, 0x000200f8u, 0x0000115fu, 0x00050041u, 0x0000003eu, 0x00001161u, 0x0000018bu, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001162u, 0x00001161u, 0x000500abu, 0x0000005du, 0x00001163u, 0x00001162u, 0x00000215u, 0x000200f9u, 0x00001160u, 0x000200f8u, 0x00001160u, 0x000700f5u, 0x0000005du, 0x00001164u, 0x0000115cu, 0x00000192u, 0x00001163u, 0x0000115fu, 0x0004003du, 0x0000005du, 0x00001165u, 0x0000018fu, 0x000400a8u, 0x0000005du, 0x00001166u, 0x00001165u, 0x000500a7u, 0x0000005du, 0x00001167u, 0x00001164u, 0x00001166u, 0x0003003eu, 0x0000115du, 0x00001167u, 0x00050041u, 0x0000003eu, 0x00001169u, 0x0000018bu, 0x00000224u, 0x0004003du, 0x00000008u, 0x0000116au, 0x00001169u, 0x0007000cu, 0x00000008u, 0x0000116bu, 0x00000001u, 0x00000027u, 0x0000116au, 0x00000215u, 0x0003003eu, 0x00001168u, 0x0000116bu, 0x0004003du, 0x00000008u, 0x0000116eu, 0x00001169u, 0x000500aau, 0x0000005du, 0x0000116fu, 0x0000116eu, 0x00000218u, 0x0003003eu, 0x0000116cu, 0x0000116fu, 0x0004003du, 0x0000005du, 0x00001172u, 0x0000018fu, 0x000500a6u, 0x0000005du, 0x00001173u, 0x0000116fu, 0x00001172u, 0x000600a9u, 0x00000008u, 0x00001174u, 0x00001173u, 0x00001132u, 0x0000040au, 0x0003003eu, 0x00001170u, 0x00001174u, 0x000300f7u, 0x00001177u, 0x00000000u, 0x000400fau, 0x00001167u, 0x00001176u, 0x00001203u, 0x000200f8u, 0x00001176u, 0x0004003du, 0x00000008u, 0x00001178u, 0x0000018eu, 0x00050084u, 0x00000008u, 0x00001179u, 0x00000215u, 0x00001178u, 0x00050041u, 0x0000003eu, 0x0000117au, 0x0000018du, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000117bu, 0x0000117au, 0x00050080u, 0x00000008u, 0x0000117cu, 0x0000117bu, 0x00001179u, 0x0003003eu, 0x0000117au, 0x0000117cu, 0x0004003du, 0x0000001eu, 0x00001180u, 0x0000018bu, 0x0003003eu, 0x0000117fu, 0x00001180u, 0x0004003du, 0x00000008u, 0x00001183u, 0x0000117au, 0x0003003eu, 0x00001181u, 0x00001183u, 0x00060039u, 0x0000005fu, 0x00001184u, 0x0000011eu, 0x0000117fu, 0x00001181u, 0x0003003eu, 0x0000117eu, 0x00001184u, 0x0004003du, 0x0000001eu, 0x00001187u, 0x0000018bu, 0x0003003eu, 0x00001186u, 0x00001187u, 0x00050041u, 0x0000003eu, 0x00001189u, 0x0000018du, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000118au, 0x00001189u, 0x0003003eu, 0x00001188u, 0x0000118au, 0x00060039u, 0x00000008u, 0x0000118bu, 0x00000122u, 0x00001186u, 0x00001188u, 0x0003003eu, 0x00001185u, 0x0000118bu, 0x00050041u, 0x00000007u, 0x0000118du, 0x0000018bu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000118eu, 0x0000118du, 0x00050041u, 0x00000007u, 0x0000118fu, 0x0000018bu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00001190u, 0x0000118fu, 0x0004007cu, 0x00000006u, 0x00001192u, 0x0000118bu, 0x00050084u, 0x00000006u, 0x00001193u, 0x00001190u, 0x00001192u, 0x00050080u, 0x00000006u, 0x00001194u, 0x0000118eu, 0x00001193u, 0x0003003eu, 0x0000118cu, 0x00001194u, 0x00050084u, 0x00000006u, 0x00001197u, 0x00001194u, 0x000003c4u, 0x00050050u, 0x0000005fu, 0x0000119au, 0x0000116bu, 0x0000116bu, 0x000500c4u, 0x0000005fu, 0x0000119bu, 0x00001184u, 0x0000119au, 0x0004007cu, 0x000000a2u, 0x0000119cu, 0x0000119bu, 0x00050050u, 0x000000a2u, 0x0000119du, 0x00001197u, 0x00001197u, 0x00050080u, 0x000000a2u, 0x0000119eu, 0x0000119du, 0x0000119cu, 0x000500c7u, 0x000000a2u, 0x000011a1u, 0x0000119eu, 0x0000eebbu, 0x0003003eu, 0x00001195u, 0x000011a1u, 0x000500c7u, 0x00000006u, 0x000011a4u, 0x00001192u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000011a5u, 0x000011a4u, 0x0000035bu, 0x0004003du, 0x000000a2u, 0x000011a6u, 0x00001195u, 0x00050050u, 0x000000a2u, 0x000011a7u, 0x000011a5u, 0x000011a5u, 0x000500c6u, 0x000000a2u, 0x000011a8u, 0x000011a6u, 0x000011a7u, 0x0003003eu, 0x00001195u, 0x000011a8u, 0x0004003du, 0x000000a2u, 0x000011aau, 0x00001195u, 0x000500c2u, 0x000000a2u, 0x000011acu, 0x000011aau, 0x0000eebcu, 0x0003003eu, 0x000011a9u, 0x000011acu, 0x0004007cu, 0x00000006u, 0x000011aeu, 0x00001174u, 0x0004003du, 0x000000a2u, 0x000011afu, 0x000011a9u, 0x00050050u, 0x000000a2u, 0x000011b0u, 0x000011aeu, 0x000011aeu, 0x000500c7u, 0x000000a2u, 0x000011b1u, 0x000011afu, 0x000011b0u, 0x0003003eu, 0x000011a9u, 0x000011b1u, 0x0004003du, 0x00000006u, 0x000011b3u, 0x0000018cu, 0x00050041u, 0x00000007u, 0x000011b4u, 0x000011a9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000011b5u, 0x000011b4u, 0x000500c6u, 0x00000006u, 0x000011b6u, 0x000011b5u, 0x00000485u, 0x00080041u, 0x00000270u, 0x000011b7u, 0x00000f2cu, 0x00000203u, 0x000011b3u, 0x00000203u, 0x000011b6u, 0x0004003du, 0x0000022bu, 0x000011b8u, 0x000011b7u, 0x00040071u, 0x00000006u, 0x000011b9u, 0x000011b8u, 0x0004007cu, 0x00000008u, 0x000011bau, 0x000011b9u, 0x0003003eu, 0x000011b2u, 0x000011bau, 0x0004003du, 0x00000006u, 0x000011bcu, 0x0000018cu, 0x00050041u, 0x00000007u, 0x000011bdu, 0x000011a9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000011beu, 0x000011bdu, 0x000500c6u, 0x00000006u, 0x000011bfu, 0x000011beu, 0x00000485u, 0x00080041u, 0x00000270u, 0x000011c0u, 0x00000f2cu, 0x00000203u, 0x000011bcu, 0x00000203u, 0x000011bfu, 0x0004003du, 0x0000022bu, 0x000011c1u, 0x000011c0u, 0x00040071u, 0x00000006u, 0x000011c2u, 0x000011c1u, 0x0004007cu, 0x00000008u, 0x000011c3u, 0x000011c2u, 0x0003003eu, 0x000011bbu, 0x000011c3u, 0x0004003du, 0x00000008u, 0x000011c5u, 0x00001169u, 0x000500aau, 0x0000005du, 0x000011c6u, 0x000011c5u, 0x00000212u, 0x000300f7u, 0x000011c8u, 0x00000000u, 0x000400fau, 0x000011c6u, 0x000011c7u, 0x000011ddu, 0x000200f8u, 0x000011c7u, 0x00050041u, 0x00000007u, 0x000011c9u, 0x00001195u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000011cau, 0x000011c9u, 0x000500c7u, 0x00000006u, 0x000011cbu, 0x000011cau, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000011ccu, 0x000011cbu, 0x00050084u, 0x00000008u, 0x000011cdu, 0x0000021bu, 0x000011ccu, 0x00050082u, 0x00000008u, 0x000011ceu, 0x0000025eu, 0x000011cdu, 0x000500c3u, 0x00000008u, 0x000011d0u, 0x000011bau, 0x000011ceu, 0x0003003eu, 0x000011b2u, 0x000011d0u, 0x00050041u, 0x00000007u, 0x000011d1u, 0x00001195u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000011d2u, 0x000011d1u, 0x000500c7u, 0x00000006u, 0x000011d3u, 0x000011d2u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000011d4u, 0x000011d3u, 0x00050084u, 0x00000008u, 0x000011d5u, 0x0000021bu, 0x000011d4u, 0x00050082u, 0x00000008u, 0x000011d6u, 0x0000025eu, 0x000011d5u, 0x000500c3u, 0x00000008u, 0x000011d8u, 0x000011c3u, 0x000011d6u, 0x0003003eu, 0x000011bbu, 0x000011d8u, 0x000500c7u, 0x00000008u, 0x000011dau, 0x000011d0u, 0x0000038bu, 0x0003003eu, 0x000011b2u, 0x000011dau, 0x000500c7u, 0x00000008u, 0x000011dcu, 0x000011d8u, 0x0000038bu, 0x0003003eu, 0x000011bbu, 0x000011dcu, 0x000200f9u, 0x000011c8u, 0x000200f8u, 0x000011ddu, 0x0004003du, 0x00000008u, 0x000011dfu, 0x00001169u, 0x000500aau, 0x0000005du, 0x000011e0u, 0x000011dfu, 0x00000203u, 0x000300f7u, 0x000011e2u, 0x00000000u, 0x000400fau, 0x000011e0u, 0x000011e1u, 0x000011f9u, 0x000200f8u, 0x000011e1u, 0x00050041u, 0x00000007u, 0x000011e3u, 0x00001195u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000011e4u, 0x000011e3u, 0x000500c7u, 0x00000006u, 0x000011e5u, 0x000011e4u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000011e6u, 0x000011e5u, 0x00050084u, 0x00000008u, 0x000011e7u, 0x0000021bu, 0x000011e6u, 0x00050082u, 0x00000008u, 0x000011e8u, 0x00000276u, 0x000011e7u, 0x000500c3u, 0x00000008u, 0x000011eau, 0x000011bau, 0x000011e8u, 0x0003003eu, 0x000011b2u, 0x000011eau, 0x00050041u, 0x00000007u, 0x000011ebu, 0x00001195u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000011ecu, 0x000011ebu, 0x000500c7u, 0x00000006u, 0x000011edu, 0x000011ecu, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000011eeu, 0x000011edu, 0x00050084u, 0x00000008u, 0x000011efu, 0x0000021bu, 0x000011eeu, 0x00050082u, 0x00000008u, 0x000011f0u, 0x00000276u, 0x000011efu, 0x000500c3u, 0x00000008u, 0x000011f2u, 0x000011c3u, 0x000011f0u, 0x0003003eu, 0x000011bbu, 0x000011f2u, 0x000500c7u, 0x00000008u, 0x000011f4u, 0x000011eau, 0x00000540u, 0x00050084u, 0x00000008u, 0x000011f5u, 0x000011f4u, 0x00000422u, 0x0003003eu, 0x000011b2u, 0x000011f5u, 0x000500c7u, 0x00000008u, 0x000011f7u, 0x000011f2u, 0x00000540u, 0x00050084u, 0x00000008u, 0x000011f8u, 0x000011f7u, 0x00000422u, 0x0003003eu, 0x000011bbu, 0x000011f8u, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011f9u, 0x000500c3u, 0x00000008u, 0x000011fbu, 0x000011bau, 0x0000025eu, 0x0003003eu, 0x000011b2u, 0x000011fbu, 0x000500c3u, 0x00000008u, 0x000011fdu, 0x000011c3u, 0x0000025eu, 0x0003003eu, 0x000011bbu, 0x000011fdu, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011e2u, 0x000700f5u, 0x00000008u, 0x0000ea75u, 0x000011f8u, 0x000011e1u, 0x000011fdu, 0x000011f9u, 0x000700f5u, 0x00000008u, 0x0000ea73u, 0x000011f5u, 0x000011e1u, 0x000011fbu, 0x000011f9u, 0x000200f9u, 0x000011c8u, 0x000200f8u, 0x000011c8u, 0x000700f5u, 0x00000008u, 0x0000ea74u, 0x000011dcu, 0x000011c7u, 0x0000ea75u, 0x000011e2u, 0x000700f5u, 0x00000008u, 0x0000ea72u, 0x000011dau, 0x000011c7u, 0x0000ea73u, 0x000011e2u, 0x000500c4u, 0x00000008u, 0x00001200u, 0x0000ea72u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00001202u, 0x00001200u, 0x0000ea74u, 0x0003003eu, 0x000011feu, 0x00001202u, 0x000200f9u, 0x00001177u, 0x000200f8u, 0x00001203u, 0x0004003du, 0x00000008u, 0x00001204u, 0x0000018eu, 0x00050041u, 0x0000003eu, 0x00001205u, 0x0000018du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001206u, 0x00001205u, 0x00050080u, 0x00000008u, 0x00001207u, 0x00001206u, 0x00001204u, 0x0003003eu, 0x00001205u, 0x00001207u, 0x0004003du, 0x0000001eu, 0x0000120bu, 0x0000018bu, 0x0003003eu, 0x0000120au, 0x0000120bu, 0x0004003du, 0x00000008u, 0x0000120eu, 0x00001205u, 0x0003003eu, 0x0000120cu, 0x0000120eu, 0x00060039u, 0x00000008u, 0x0000120fu, 0x00000119u, 0x0000120au, 0x0000120cu, 0x0003003eu, 0x00001209u, 0x0000120fu, 0x0004003du, 0x0000001eu, 0x00001212u, 0x0000018bu, 0x0003003eu, 0x00001211u, 0x00001212u, 0x00050041u, 0x0000003eu, 0x00001214u, 0x0000018du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001215u, 0x00001214u, 0x0003003eu, 0x00001213u, 0x00001215u, 0x00060039u, 0x00000008u, 0x00001216u, 0x00000122u, 0x00001211u, 0x00001213u, 0x0003003eu, 0x00001210u, 0x00001216u, 0x00050041u, 0x00000007u, 0x00001218u, 0x0000018bu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001219u, 0x00001218u, 0x00050041u, 0x00000007u, 0x0000121au, 0x0000018bu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000121bu, 0x0000121au, 0x0004007cu, 0x00000006u, 0x0000121du, 0x00001216u, 0x00050084u, 0x00000006u, 0x0000121eu, 0x0000121bu, 0x0000121du, 0x00050080u, 0x00000006u, 0x0000121fu, 0x00001219u, 0x0000121eu, 0x0003003eu, 0x00001217u, 0x0000121fu, 0x00050084u, 0x00000006u, 0x00001222u, 0x0000121fu, 0x000003c4u, 0x000500c4u, 0x00000008u, 0x00001225u, 0x0000120fu, 0x0000116bu, 0x0004007cu, 0x00000006u, 0x00001226u, 0x00001225u, 0x00050080u, 0x00000006u, 0x00001227u, 0x00001222u, 0x00001226u, 0x000500c7u, 0x00000006u, 0x00001228u, 0x00001227u, 0x0000119fu, 0x0003003eu, 0x00001220u, 0x00001228u, 0x000500c7u, 0x00000006u, 0x0000122bu, 0x0000121du, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000122cu, 0x0000122bu, 0x0000035bu, 0x000500c6u, 0x00000006u, 0x0000122eu, 0x00001228u, 0x0000122cu, 0x0003003eu, 0x00001220u, 0x0000122eu, 0x000500c2u, 0x00000006u, 0x00001231u, 0x0000122eu, 0x000003c4u, 0x0003003eu, 0x0000122fu, 0x00001231u, 0x0004007cu, 0x00000006u, 0x00001233u, 0x00001174u, 0x000500c7u, 0x00000006u, 0x00001235u, 0x00001231u, 0x00001233u, 0x0003003eu, 0x0000122fu, 0x00001235u, 0x0004003du, 0x00000006u, 0x00001236u, 0x0000018cu, 0x000500c6u, 0x00000006u, 0x00001238u, 0x00001235u, 0x00000485u, 0x00080041u, 0x00000270u, 0x00001239u, 0x00000f2cu, 0x00000203u, 0x00001236u, 0x00000203u, 0x00001238u, 0x0004003du, 0x0000022bu, 0x0000123au, 0x00001239u, 0x00040071u, 0x00000006u, 0x0000123bu, 0x0000123au, 0x0004007cu, 0x00000008u, 0x0000123cu, 0x0000123bu, 0x0003003eu, 0x000011feu, 0x0000123cu, 0x0004003du, 0x0000005du, 0x0000123du, 0x0000018fu, 0x000300f7u, 0x0000123fu, 0x00000000u, 0x000400fau, 0x0000123du, 0x0000123eu, 0x0000123fu, 0x000200f8u, 0x0000123eu, 0x0004003du, 0x00000008u, 0x00001241u, 0x00001169u, 0x000500aau, 0x0000005du, 0x00001242u, 0x00001241u, 0x00000203u, 0x000300f7u, 0x00001244u, 0x00000000u, 0x000400fau, 0x00001242u, 0x00001243u, 0x00001258u, 0x000200f8u, 0x00001243u, 0x000500c7u, 0x00000006u, 0x00001247u, 0x0000122eu, 0x0000048bu, 0x00050084u, 0x00000006u, 0x00001248u, 0x00000701u, 0x00001247u, 0x00050082u, 0x00000006u, 0x00001249u, 0x00001245u, 0x00001248u, 0x000500c3u, 0x00000008u, 0x0000124bu, 0x0000123cu, 0x00001249u, 0x0003003eu, 0x000011feu, 0x0000124bu, 0x000500c7u, 0x00000008u, 0x0000124du, 0x0000124bu, 0x00000540u, 0x0003003eu, 0x000011feu, 0x0000124du, 0x00050041u, 0x0000003eu, 0x0000124eu, 0x0000018bu, 0x0000025eu, 0x0004003du, 0x00000008u, 0x0000124fu, 0x0000124eu, 0x000500c4u, 0x00000008u, 0x00001250u, 0x0000124fu, 0x0000021bu, 0x000500c5u, 0x00000008u, 0x00001252u, 0x0000124du, 0x00001250u, 0x0003003eu, 0x000011feu, 0x00001252u, 0x000500c4u, 0x00000008u, 0x00001254u, 0x00001252u, 0x00000215u, 0x0003003eu, 0x000011feu, 0x00001254u, 0x0004003du, 0x00000008u, 0x00001255u, 0x0000018eu, 0x00050080u, 0x00000008u, 0x00001257u, 0x00001254u, 0x00001255u, 0x0003003eu, 0x000011feu, 0x00001257u, 0x000200f9u, 0x00001244u, 0x000200f8u, 0x00001258u, 0x000500c7u, 0x00000006u, 0x0000125au, 0x0000122eu, 0x000003c4u, 0x00050084u, 0x00000006u, 0x0000125bu, 0x00000701u, 0x0000125au, 0x00050082u, 0x00000006u, 0x0000125cu, 0x0000035bu, 0x0000125bu, 0x000500c3u, 0x00000008u, 0x0000125eu, 0x0000123cu, 0x0000125cu, 0x0003003eu, 0x000011feu, 0x0000125eu, 0x000500c7u, 0x00000008u, 0x00001260u, 0x0000125eu, 0x0000038bu, 0x0003003eu, 0x000011feu, 0x00001260u, 0x000500c4u, 0x00000008u, 0x00001262u, 0x00001260u, 0x00000215u, 0x0003003eu, 0x000011feu, 0x00001262u, 0x0004003du, 0x00000008u, 0x00001263u, 0x0000018eu, 0x00050080u, 0x00000008u, 0x00001265u, 0x00001262u, 0x00001263u, 0x0003003eu, 0x000011feu, 0x00001265u, 0x000200f9u, 0x00001244u, 0x000200f8u, 0x00001244u, 0x000700f5u, 0x00000008u, 0x0000ea71u, 0x00001257u, 0x00001243u, 0x00001265u, 0x00001258u, 0x0004003du, 0x00000006u, 0x00001266u, 0x0000018cu, 0x000500c5u, 0x00000008u, 0x00001269u, 0x0000ea71u, 0x00001268u, 0x000500c6u, 0x00000008u, 0x0000126au, 0x00001269u, 0x00000212u, 0x00080041u, 0x00000270u, 0x0000126bu, 0x00000f2cu, 0x00000203u, 0x00001266u, 0x00000203u, 0x0000126au, 0x0004003du, 0x0000022bu, 0x0000126cu, 0x0000126bu, 0x00040071u, 0x00000006u, 0x0000126du, 0x0000126cu, 0x0004007cu, 0x00000008u, 0x0000126eu, 0x0000126du, 0x0003003eu, 0x000011feu, 0x0000126eu, 0x000200f9u, 0x0000123fu, 0x000200f8u, 0x0000123fu, 0x000700f5u, 0x00000008u, 0x0000ea77u, 0x0000123cu, 0x00001203u, 0x0000126eu, 0x00001244u, 0x000200f9u, 0x00001177u, 0x000200f8u, 0x00001177u, 0x000700f5u, 0x00000008u, 0x0000ea76u, 0x00001202u, 0x000011c8u, 0x0000ea77u, 0x0000123fu, 0x000200feu, 0x0000ea76u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000199u, 0x00000000u, 0x0000018au, 0x00030037u, 0x00000115u, 0x00000193u, 0x00030037u, 0x00000007u, 0x00000194u, 0x00030037u, 0x00000060u, 0x00000195u, 0x00030037u, 0x0000003eu, 0x00000196u, 0x00030037u, 0x0000005eu, 0x00000197u, 0x00030037u, 0x0000005eu, 0x00000198u, 0x000200f8u, 0x0000019au, 0x0004003bu, 0x0000003eu, 0x00001277u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000127au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000127bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001283u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001286u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001287u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001292u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000129bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000129du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000129fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000012a1u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012a2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012a4u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000012b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000012b2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012b4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000012b6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012b8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012bau, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001272u, 0x00000193u, 0x00000203u, 0x0004003du, 0x00000006u, 0x00001273u, 0x00001272u, 0x0004007cu, 0x00000008u, 0x00001274u, 0x00001273u, 0x00050041u, 0x0000003eu, 0x00001275u, 0x00000193u, 0x0000026au, 0x0004003du, 0x00000008u, 0x00001276u, 0x00001275u, 0x00050041u, 0x0000003eu, 0x00001278u, 0x00000195u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001279u, 0x00001278u, 0x0003003eu, 0x00001277u, 0x00001279u, 0x0003003eu, 0x0000127au, 0x00001274u, 0x0003003eu, 0x0000127bu, 0x00001276u, 0x00070039u, 0x00000008u, 0x0000127cu, 0x00000188u, 0x00001277u, 0x0000127au, 0x0000127bu, 0x0003003eu, 0x00001278u, 0x0000127cu, 0x00050041u, 0x00000007u, 0x0000127eu, 0x00000193u, 0x00000215u, 0x0004003du, 0x00000006u, 0x0000127fu, 0x0000127eu, 0x0004007cu, 0x00000008u, 0x00001280u, 0x0000127fu, 0x00050041u, 0x0000003eu, 0x00001281u, 0x00000193u, 0x00000276u, 0x0004003du, 0x00000008u, 0x00001282u, 0x00001281u, 0x00050041u, 0x0000003eu, 0x00001284u, 0x00000195u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001285u, 0x00001284u, 0x0003003eu, 0x00001283u, 0x00001285u, 0x0003003eu, 0x00001286u, 0x00001280u, 0x0003003eu, 0x00001287u, 0x00001282u, 0x00070039u, 0x00000008u, 0x00001288u, 0x00000188u, 0x00001283u, 0x00001286u, 0x00001287u, 0x0003003eu, 0x00001284u, 0x00001288u, 0x0004003du, 0x0000005fu, 0x0000128au, 0x00000195u, 0x000500c3u, 0x0000005fu, 0x0000128cu, 0x0000128au, 0x0000eeb9u, 0x0003003eu, 0x00000195u, 0x0000128cu, 0x00060041u, 0x00000cc2u, 0x0000128du, 0x00000cc1u, 0x00000203u, 0x00000215u, 0x0004003du, 0x00000008u, 0x0000128eu, 0x0000128du, 0x000500aau, 0x0000005du, 0x0000128fu, 0x0000128eu, 0x00000203u, 0x000300f7u, 0x00001291u, 0x00000000u, 0x000400fau, 0x0000128fu, 0x00001290u, 0x00001293u, 0x000200f8u, 0x00001290u, 0x0003003eu, 0x00001292u, 0x00000203u, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x00001293u, 0x000500aau, 0x0000005du, 0x00001296u, 0x0000128eu, 0x00000212u, 0x000300f7u, 0x00001298u, 0x00000000u, 0x000400fau, 0x00001296u, 0x00001297u, 0x000012afu, 0x000200f8u, 0x00001297u, 0x0004003du, 0x00000008u, 0x00001299u, 0x00000196u, 0x000500c3u, 0x00000008u, 0x0000129au, 0x00001299u, 0x00000212u, 0x0004003du, 0x0000001eu, 0x0000129cu, 0x00000193u, 0x0003003eu, 0x0000129bu, 0x0000129cu, 0x0004003du, 0x00000006u, 0x0000129eu, 0x00000194u, 0x0003003eu, 0x0000129du, 0x0000129eu, 0x0004003du, 0x0000005fu, 0x000012a0u, 0x00000195u, 0x0003003eu, 0x0000129fu, 0x000012a0u, 0x0003003eu, 0x000012a1u, 0x0000129au, 0x0004003du, 0x0000005du, 0x000012a3u, 0x00000197u, 0x0003003eu, 0x000012a2u, 0x000012a3u, 0x0004003du, 0x0000005du, 0x000012a5u, 0x00000198u, 0x0003003eu, 0x000012a4u, 0x000012a5u, 0x000a0039u, 0x00000008u, 0x000012a6u, 0x00000191u, 0x0000129bu, 0x0000129du, 0x0000129fu, 0x000012a1u, 0x000012a2u, 0x000012a4u, 0x0003003eu, 0x00001292u, 0x000012a6u, 0x0004003du, 0x00000008u, 0x000012a7u, 0x00000196u, 0x000500c7u, 0x00000008u, 0x000012a8u, 0x000012a7u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000012a9u, 0x0000025eu, 0x000012a8u, 0x00050082u, 0x00000008u, 0x000012aau, 0x0000025eu, 0x000012a9u, 0x000500c3u, 0x00000008u, 0x000012acu, 0x000012a6u, 0x000012aau, 0x0003003eu, 0x00001292u, 0x000012acu, 0x000500c7u, 0x00000008u, 0x000012aeu, 0x000012acu, 0x0000038bu, 0x0003003eu, 0x00001292u, 0x000012aeu, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x000012afu, 0x0004003du, 0x0000001eu, 0x000012b1u, 0x00000193u, 0x0003003eu, 0x000012b0u, 0x000012b1u, 0x0004003du, 0x00000006u, 0x000012b3u, 0x00000194u, 0x0003003eu, 0x000012b2u, 0x000012b3u, 0x0004003du, 0x0000005fu, 0x000012b5u, 0x00000195u, 0x0003003eu, 0x000012b4u, 0x000012b5u, 0x0004003du, 0x00000008u, 0x000012b7u, 0x00000196u, 0x0003003eu, 0x000012b6u, 0x000012b7u, 0x0004003du, 0x0000005du, 0x000012b9u, 0x00000197u, 0x0003003eu, 0x000012b8u, 0x000012b9u, 0x0004003du, 0x0000005du, 0x000012bbu, 0x00000198u, 0x0003003eu, 0x000012bau, 0x000012bbu, 0x000a0039u, 0x00000008u, 0x000012bcu, 0x00000191u, 0x000012b0u, 0x000012b2u, 0x000012b4u, 0x000012b6u, 0x000012b8u, 0x000012bau, 0x0003003eu, 0x00001292u, 0x000012bcu, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001298u, 0x000700f5u, 0x00000008u, 0x0000ea79u, 0x000012aeu, 0x00001297u, 0x000012bcu, 0x000012afu, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x00001291u, 0x000700f5u, 0x00000008u, 0x0000ea78u, 0x00000203u, 0x00001290u, 0x0000ea79u, 0x00001298u, 0x000200feu, 0x0000ea78u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000001a1u, 0x00000000u, 0x0000019bu, 0x00030037u, 0x00000060u, 0x0000019cu, 0x00030037u, 0x00000060u, 0x0000019du, 0x00030037u, 0x00000060u, 0x0000019eu, 0x00030037u, 0x00000060u, 0x0000019fu, 0x00030037u, 0x00000060u, 0x000001a0u, 0x000200f8u, 0x000001a2u, 0x0004003bu, 0x0000003eu, 0x000012c0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012c6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012cdu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012d0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012ddu, 0x00000007u, 0x00050041u, 0x0000003eu, 0x000012c1u, 0x000001a0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000012c2u, 0x000012c1u, 0x00050041u, 0x0000003eu, 0x000012c3u, 0x000001a0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000012c4u, 0x000012c3u, 0x00050080u, 0x00000008u, 0x000012c5u, 0x000012c2u, 0x000012c4u, 0x0003003eu, 0x000012c0u, 0x000012c5u, 0x000500afu, 0x0000005du, 0x000012c8u, 0x000012c5u, 0x0000037du, 0x0004003du, 0x0000005fu, 0x000012c9u, 0x0000019fu, 0x0004003du, 0x0000005fu, 0x000012cau, 0x0000019cu, 0x00050050u, 0x00000879u, 0x000012cbu, 0x000012c8u, 0x000012c8u, 0x000600a9u, 0x0000005fu, 0x000012ccu, 0x000012cbu, 0x000012c9u, 0x000012cau, 0x0003003eu, 0x000012c6u, 0x000012ccu, 0x000300f7u, 0x000012d2u, 0x00000000u, 0x000400fau, 0x000012c8u, 0x000012d1u, 0x000012d7u, 0x000200f8u, 0x000012d1u, 0x0004003du, 0x0000005fu, 0x000012d3u, 0x000001a0u, 0x0007004fu, 0x0000005fu, 0x000012d4u, 0x000012d3u, 0x000012d3u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000012d6u, 0x0000eec2u, 0x000012d4u, 0x0003003eu, 0x000012d0u, 0x000012d6u, 0x000200f9u, 0x000012d2u, 0x000200f8u, 0x000012d7u, 0x0004003du, 0x0000005fu, 0x000012d8u, 0x000001a0u, 0x0003003eu, 0x000012d0u, 0x000012d8u, 0x000200f9u, 0x000012d2u, 0x000200f8u, 0x000012d2u, 0x000700f5u, 0x0000005fu, 0x0000ea7au, 0x000012d6u, 0x000012d1u, 0x000012d8u, 0x000012d7u, 0x00050051u, 0x00000008u, 0x000012dau, 0x0000ea7au, 0x00000000u, 0x00050051u, 0x00000008u, 0x000012dbu, 0x0000ea7au, 0x00000001u, 0x0003003eu, 0x000012cdu, 0x0000ea7au, 0x0004003du, 0x0000005fu, 0x000012deu, 0x0000019du, 0x00050082u, 0x0000005fu, 0x000012e0u, 0x000012deu, 0x000012ccu, 0x00050041u, 0x0000003eu, 0x000012e1u, 0x000012cdu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000012e2u, 0x000012e1u, 0x00050050u, 0x0000005fu, 0x000012e3u, 0x000012e2u, 0x000012e2u, 0x00050084u, 0x0000005fu, 0x000012e4u, 0x000012e0u, 0x000012e3u, 0x0003003eu, 0x000012ddu, 0x000012e4u, 0x0004003du, 0x0000005fu, 0x000012e5u, 0x0000019eu, 0x00050082u, 0x0000005fu, 0x000012e7u, 0x000012e5u, 0x000012ccu, 0x00050041u, 0x0000003eu, 0x000012e8u, 0x000012cdu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000012e9u, 0x000012e8u, 0x00050050u, 0x0000005fu, 0x000012eau, 0x000012e9u, 0x000012e9u, 0x00050084u, 0x0000005fu, 0x000012ebu, 0x000012e7u, 0x000012eau, 0x00050080u, 0x0000005fu, 0x000012edu, 0x000012e4u, 0x000012ebu, 0x0003003eu, 0x000012ddu, 0x000012edu, 0x00050080u, 0x0000005fu, 0x000012f0u, 0x000012edu, 0x00001361u, 0x0003003eu, 0x000012ddu, 0x000012f0u, 0x000500c3u, 0x0000005fu, 0x000012f3u, 0x000012f0u, 0x0000eeb9u, 0x0003003eu, 0x000012ddu, 0x000012f3u, 0x00050080u, 0x0000005fu, 0x000012f6u, 0x000012f3u, 0x000012ccu, 0x0003003eu, 0x000012ddu, 0x000012f6u, 0x000200feu, 0x000012f6u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001adu, 0x00000000u, 0x000001a3u, 0x00030037u, 0x00000115u, 0x000001a4u, 0x00030037u, 0x00000007u, 0x000001a5u, 0x00030037u, 0x00000060u, 0x000001a6u, 0x00030037u, 0x0000005eu, 0x000001a7u, 0x00030037u, 0x0000005eu, 0x000001a8u, 0x00030037u, 0x0000005eu, 0x000001a9u, 0x00030037u, 0x0000005eu, 0x000001aau, 0x00030037u, 0x0000005eu, 0x000001abu, 0x00030037u, 0x0000005cu, 0x000001acu, 0x000200f8u, 0x000001aeu, 0x0004003bu, 0x0000005eu, 0x00001306u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001307u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000130au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000130bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000130cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000131bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000131cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000131fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001320u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001321u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001327u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000132cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001335u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001336u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001338u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000133cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000133du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000133fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001343u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001347u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001349u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000134bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000134fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001351u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001353u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000136au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000136eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001371u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001383u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001386u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001390u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001399u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000139bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000139du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000139eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000139fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013a0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013a2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000013a8u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013b2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013b7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013b9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000013bcu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013c6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013cbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013cdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000013d3u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013ddu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013e2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013e4u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013efu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013f5u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001401u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001403u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001404u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001405u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001407u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000140eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001410u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001412u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001413u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001414u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001416u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001420u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001422u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001424u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001425u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001426u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001428u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001431u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001433u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001435u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001436u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001437u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001439u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001445u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001447u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001448u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001449u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000144bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001454u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001456u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001457u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001458u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000145au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001464u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001466u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001468u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001469u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000146au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000146cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001485u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001487u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001489u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001492u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001494u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001496u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000149cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000149eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014a0u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014abu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014adu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014b4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014b6u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014c1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014c3u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014cbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014cdu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014d8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014dau, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014e1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014e3u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014eeu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014f0u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014f8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014fau, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001503u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001505u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001507u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000150cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000150eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001510u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001519u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000151bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000151du, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001523u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001525u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001527u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001530u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001532u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001534u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001539u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000153du, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001549u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000154bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000154du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000154eu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001558u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000155au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000155cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000155du, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001564u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001566u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001568u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001569u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001570u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001572u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001574u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001575u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001584u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001586u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001588u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001589u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001595u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001597u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001599u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000159au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a8u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b9u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015c2u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015cdu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015cfu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015d7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015d9u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015e4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015e6u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015edu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015efu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015fau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015fcu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001602u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001604u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001606u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000160fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001611u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001613u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001621u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001623u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001625u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000162eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001630u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001632u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001638u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000163au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000163cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001645u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001647u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001649u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000164eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001650u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001652u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000165bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000165du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000165fu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001665u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001667u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001669u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001672u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001674u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001676u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000167bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000167du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000167fu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001688u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000168au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000168cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001692u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001694u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001696u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000169fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016a1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016a3u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016aau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016acu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016b7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016b9u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016c1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016c3u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016ceu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016d0u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016dfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016e1u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016ecu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016eeu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016f6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016f8u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001701u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001703u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001705u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000170au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000170cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000170eu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001717u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001719u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000171bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001721u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001723u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001725u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000172eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001730u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001732u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001737u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001739u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000173bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001744u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001746u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001748u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000174eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001750u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001752u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000175bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000175du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000175fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001768u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001770u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001773u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000177cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001796u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000017a4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017acu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017b1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017b4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017b7u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017bau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017bdu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017bfu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c9u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017ccu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017e8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017ebu, 0x00000007u, 0x00050041u, 0x0000003eu, 0x000012fau, 0x000001a4u, 0x0000027du, 0x0004003du, 0x00000008u, 0x000012fbu, 0x000012fau, 0x000500c7u, 0x00000008u, 0x000012fcu, 0x000012fbu, 0x00000212u, 0x000500abu, 0x0000005du, 0x000012fdu, 0x000012fcu, 0x00000203u, 0x00050041u, 0x00000007u, 0x000012feu, 0x000001a4u, 0x00000203u, 0x0004003du, 0x00000006u, 0x000012ffu, 0x000012feu, 0x0004007cu, 0x00000008u, 0x00001300u, 0x000012ffu, 0x00050041u, 0x00000007u, 0x00001301u, 0x000001a4u, 0x00000212u, 0x0004003du, 0x00000006u, 0x00001302u, 0x00001301u, 0x0004007cu, 0x00000008u, 0x00001303u, 0x00001302u, 0x00050041u, 0x0000003eu, 0x00001304u, 0x000001a4u, 0x0000026au, 0x0004003du, 0x00000008u, 0x00001305u, 0x00001304u, 0x0003003eu, 0x00001306u, 0x000012fdu, 0x00050041u, 0x0000003eu, 0x00001308u, 0x000001a6u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001309u, 0x00001308u, 0x0003003eu, 0x00001307u, 0x00001309u, 0x0003003eu, 0x0000130au, 0x00001300u, 0x0003003eu, 0x0000130bu, 0x00001303u, 0x0003003eu, 0x0000130cu, 0x00001305u, 0x00090039u, 0x00000008u, 0x0000130du, 0x00000182u, 0x00001306u, 0x00001307u, 0x0000130au, 0x0000130bu, 0x0000130cu, 0x0003003eu, 0x00001308u, 0x0000130du, 0x0004003du, 0x00000008u, 0x00001310u, 0x000012fau, 0x000500c7u, 0x00000008u, 0x00001311u, 0x00001310u, 0x0000021bu, 0x000500abu, 0x0000005du, 0x00001312u, 0x00001311u, 0x00000203u, 0x00050041u, 0x00000007u, 0x00001313u, 0x000001a4u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00001314u, 0x00001313u, 0x0004007cu, 0x00000008u, 0x00001315u, 0x00001314u, 0x00050041u, 0x00000007u, 0x00001316u, 0x000001a4u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00001317u, 0x00001316u, 0x0004007cu, 0x00000008u, 0x00001318u, 0x00001317u, 0x00050041u, 0x0000003eu, 0x00001319u, 0x000001a4u, 0x00000276u, 0x0004003du, 0x00000008u, 0x0000131au, 0x00001319u, 0x0003003eu, 0x0000131bu, 0x00001312u, 0x00050041u, 0x0000003eu, 0x0000131du, 0x000001a6u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000131eu, 0x0000131du, 0x0003003eu, 0x0000131cu, 0x0000131eu, 0x0003003eu, 0x0000131fu, 0x00001315u, 0x0003003eu, 0x00001320u, 0x00001318u, 0x0003003eu, 0x00001321u, 0x0000131au, 0x00090039u, 0x00000008u, 0x00001322u, 0x00000182u, 0x0000131bu, 0x0000131cu, 0x0000131fu, 0x00001320u, 0x00001321u, 0x0003003eu, 0x0000131du, 0x00001322u, 0x0004003du, 0x0000005du, 0x00001324u, 0x000001a9u, 0x000300f7u, 0x00001326u, 0x00000000u, 0x000400fau, 0x00001324u, 0x00001325u, 0x0000132bu, 0x000200f8u, 0x00001325u, 0x0004003du, 0x0000005fu, 0x00001328u, 0x000001a6u, 0x000500c7u, 0x0000005fu, 0x0000132au, 0x00001328u, 0x0000eebau, 0x0003003eu, 0x00001327u, 0x0000132au, 0x000200f9u, 0x00001326u, 0x000200f8u, 0x0000132bu, 0x0003003eu, 0x00001327u, 0x00000c29u, 0x000200f9u, 0x00001326u, 0x000200f8u, 0x00001326u, 0x00050041u, 0x0000003eu, 0x0000132du, 0x00001327u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000132eu, 0x0000132du, 0x00050041u, 0x0000003eu, 0x0000132fu, 0x00001327u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001330u, 0x0000132fu, 0x00050080u, 0x00000008u, 0x00001331u, 0x0000132eu, 0x00001330u, 0x0003003eu, 0x0000132cu, 0x00001331u, 0x0004003du, 0x0000005fu, 0x00001332u, 0x000001a6u, 0x000500c3u, 0x0000005fu, 0x00001334u, 0x00001332u, 0x0000eeb9u, 0x0003003eu, 0x000001a6u, 0x00001334u, 0x0004003du, 0x0000001eu, 0x00001337u, 0x000001a4u, 0x0003003eu, 0x00001336u, 0x00001337u, 0x0004003du, 0x00000008u, 0x0000133au, 0x00001308u, 0x0003003eu, 0x00001338u, 0x0000133au, 0x00060039u, 0x00000008u, 0x0000133bu, 0x00000119u, 0x00001336u, 0x00001338u, 0x0003003eu, 0x00001335u, 0x0000133bu, 0x0004003du, 0x0000001eu, 0x0000133eu, 0x000001a4u, 0x0003003eu, 0x0000133du, 0x0000133eu, 0x0004003du, 0x00000008u, 0x00001341u, 0x0000131du, 0x0003003eu, 0x0000133fu, 0x00001341u, 0x00060039u, 0x00000008u, 0x00001342u, 0x00000122u, 0x0000133du, 0x0000133fu, 0x0003003eu, 0x0000133cu, 0x00001342u, 0x0004003du, 0x00000008u, 0x00001345u, 0x00001308u, 0x00050080u, 0x00000008u, 0x00001346u, 0x00001345u, 0x00000212u, 0x0004003du, 0x0000001eu, 0x00001348u, 0x000001a4u, 0x0003003eu, 0x00001347u, 0x00001348u, 0x0003003eu, 0x00001349u, 0x00001346u, 0x00060039u, 0x00000008u, 0x0000134au, 0x00000119u, 0x00001347u, 0x00001349u, 0x0003003eu, 0x00001343u, 0x0000134au, 0x0004003du, 0x00000008u, 0x0000134du, 0x0000131du, 0x00050080u, 0x00000008u, 0x0000134eu, 0x0000134du, 0x00000212u, 0x0004003du, 0x0000001eu, 0x00001350u, 0x000001a4u, 0x0003003eu, 0x0000134fu, 0x00001350u, 0x0003003eu, 0x00001351u, 0x0000134eu, 0x00060039u, 0x00000008u, 0x00001352u, 0x00000122u, 0x0000134fu, 0x00001351u, 0x0003003eu, 0x0000134bu, 0x00001352u, 0x00050082u, 0x00000008u, 0x00001356u, 0x00001352u, 0x00001342u, 0x0007000cu, 0x00000008u, 0x00001358u, 0x00000001u, 0x0000002au, 0x00001356u, 0x00001357u, 0x0003003eu, 0x00001353u, 0x00001358u, 0x000500c7u, 0x00000008u, 0x0000135au, 0x00001342u, 0x0000038bu, 0x00050080u, 0x00000008u, 0x0000135cu, 0x0000135au, 0x00001358u, 0x0003003eu, 0x0000134bu, 0x0000135cu, 0x0003003eu, 0x0000133cu, 0x0000135au, 0x0004003du, 0x0000005du, 0x0000135fu, 0x000001aau, 0x0004003du, 0x0000005fu, 0x00001360u, 0x00001327u, 0x000500aau, 0x00000879u, 0x00001362u, 0x00001360u, 0x00001361u, 0x00050051u, 0x0000005du, 0x00001363u, 0x00001362u, 0x00000000u, 0x00050051u, 0x0000005du, 0x00001364u, 0x00001362u, 0x00000001u, 0x00060050u, 0x000003a1u, 0x00001365u, 0x0000135fu, 0x00001363u, 0x00001364u, 0x0004009bu, 0x0000005du, 0x00001366u, 0x00001365u, 0x0003003eu, 0x000001aau, 0x00001366u, 0x0004003du, 0x0000005du, 0x00001367u, 0x000001aau, 0x000300f7u, 0x00001369u, 0x00000000u, 0x000400fau, 0x00001367u, 0x00001368u, 0x00001369u, 0x000200f8u, 0x00001368u, 0x0003003eu, 0x0000132cu, 0x00000203u, 0x000200f9u, 0x00001369u, 0x000200f8u, 0x00001369u, 0x000600a9u, 0x00000008u, 0x0000eeecu, 0x00001367u, 0x00000203u, 0x00001331u, 0x00050041u, 0x0000003eu, 0x0000136bu, 0x000001a4u, 0x00000221u, 0x0004003du, 0x00000008u, 0x0000136cu, 0x0000136bu, 0x000500aau, 0x0000005du, 0x0000136du, 0x0000136cu, 0x00000212u, 0x0003003eu, 0x0000136au, 0x0000136du, 0x000500afu, 0x0000005du, 0x00001370u, 0x0000eeecu, 0x0000037du, 0x000300f7u, 0x00001373u, 0x00000000u, 0x000400fau, 0x00001370u, 0x00001372u, 0x00001377u, 0x000200f8u, 0x00001372u, 0x00050050u, 0x0000005fu, 0x00001376u, 0x0000134au, 0x0000135cu, 0x0003003eu, 0x00001371u, 0x00001376u, 0x000200f9u, 0x00001373u, 0x000200f8u, 0x00001377u, 0x00050050u, 0x0000005fu, 0x0000137au, 0x0000133bu, 0x0000135au, 0x0003003eu, 0x00001371u, 0x0000137au, 0x000200f9u, 0x00001373u, 0x000200f8u, 0x00001373u, 0x000700f5u, 0x0000005fu, 0x0000ea81u, 0x00001376u, 0x00001372u, 0x0000137au, 0x00001377u, 0x0003003eu, 0x0000136eu, 0x0000ea81u, 0x0004003du, 0x0000005du, 0x0000137cu, 0x000001a7u, 0x000300f7u, 0x0000137eu, 0x00000000u, 0x000400fau, 0x0000137cu, 0x0000137du, 0x00001473u, 0x000200f8u, 0x0000137du, 0x0004003du, 0x00000008u, 0x00001380u, 0x0000136bu, 0x000300f7u, 0x00001382u, 0x00000000u, 0x000b00fbu, 0x00001380u, 0x00001382u, 0x00000000u, 0x00001381u, 0x00000002u, 0x00001381u, 0x00000003u, 0x00001381u, 0x00000004u, 0x00001381u, 0x000200f8u, 0x00001381u, 0x0003003eu, 0x00001383u, 0x00001370u, 0x000600a9u, 0x00000008u, 0x00001388u, 0x00001370u, 0x00000215u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00001389u, 0x00001388u, 0x0003003eu, 0x00001386u, 0x00001389u, 0x00050041u, 0x0000003eu, 0x0000138au, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x0000138bu, 0x0000138au, 0x000300f7u, 0x0000138fu, 0x00000000u, 0x000700fbu, 0x0000138bu, 0x0000138eu, 0x00000000u, 0x0000138cu, 0x00000001u, 0x0000138du, 0x000200f8u, 0x0000138eu, 0x0004007cu, 0x000000a2u, 0x0000142du, 0x0000ea81u, 0x000600a9u, 0x00000008u, 0x0000142fu, 0x00001370u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00001430u, 0x0000142fu, 0x0004003du, 0x0000001eu, 0x00001432u, 0x000001a4u, 0x0003003eu, 0x00001431u, 0x00001432u, 0x0004003du, 0x00000006u, 0x00001434u, 0x000001a5u, 0x0003003eu, 0x00001433u, 0x00001434u, 0x0003003eu, 0x00001435u, 0x0000142du, 0x0003003eu, 0x00001436u, 0x00001430u, 0x0003003eu, 0x00001437u, 0x00001389u, 0x0004003du, 0x0000005du, 0x0000143au, 0x000001a8u, 0x0003003eu, 0x00001439u, 0x0000143au, 0x000a0039u, 0x00000009u, 0x0000143bu, 0x0000015bu, 0x00001431u, 0x00001433u, 0x00001435u, 0x00001436u, 0x00001437u, 0x00001439u, 0x0003003eu, 0x00001390u, 0x0000143bu, 0x0004003du, 0x0000005du, 0x0000143cu, 0x000001a9u, 0x000300f7u, 0x0000143eu, 0x00000000u, 0x000400fau, 0x0000143cu, 0x0000143du, 0x0000143eu, 0x000200f8u, 0x0000143du, 0x00050050u, 0x0000005fu, 0x00001441u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001442u, 0x00001441u, 0x0004003du, 0x0000001eu, 0x00001444u, 0x000001a4u, 0x0003003eu, 0x00001443u, 0x00001444u, 0x0004003du, 0x00000006u, 0x00001446u, 0x000001a5u, 0x0003003eu, 0x00001445u, 0x00001446u, 0x0003003eu, 0x00001447u, 0x00001442u, 0x0003003eu, 0x00001448u, 0x00000485u, 0x0003003eu, 0x00001449u, 0x00001389u, 0x0004003du, 0x0000005du, 0x0000144cu, 0x000001a8u, 0x0003003eu, 0x0000144bu, 0x0000144cu, 0x000a0039u, 0x00000009u, 0x0000144du, 0x0000015bu, 0x00001443u, 0x00001445u, 0x00001447u, 0x00001448u, 0x00001449u, 0x0000144bu, 0x0003003eu, 0x000013a8u, 0x0000144du, 0x00050050u, 0x0000005fu, 0x00001450u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001451u, 0x00001450u, 0x0004003du, 0x0000001eu, 0x00001453u, 0x000001a4u, 0x0003003eu, 0x00001452u, 0x00001453u, 0x0004003du, 0x00000006u, 0x00001455u, 0x000001a5u, 0x0003003eu, 0x00001454u, 0x00001455u, 0x0003003eu, 0x00001456u, 0x00001451u, 0x0003003eu, 0x00001457u, 0x000003c4u, 0x0003003eu, 0x00001458u, 0x00001389u, 0x0004003du, 0x0000005du, 0x0000145bu, 0x000001a8u, 0x0003003eu, 0x0000145au, 0x0000145bu, 0x000a0039u, 0x00000009u, 0x0000145cu, 0x0000015bu, 0x00001452u, 0x00001454u, 0x00001456u, 0x00001457u, 0x00001458u, 0x0000145au, 0x0003003eu, 0x000013bcu, 0x0000145cu, 0x000200f9u, 0x0000143eu, 0x000200f8u, 0x0000143eu, 0x000700f5u, 0x00000009u, 0x0000eb73u, 0x0000eb11u, 0x0000138eu, 0x0000145cu, 0x0000143du, 0x000700f5u, 0x00000009u, 0x0000eb14u, 0x0000eb11u, 0x0000138eu, 0x0000144du, 0x0000143du, 0x0004003du, 0x0000005du, 0x0000145du, 0x000001aau, 0x000300f7u, 0x0000145fu, 0x00000000u, 0x000400fau, 0x0000145du, 0x0000145eu, 0x0000145fu, 0x000200f8u, 0x0000145eu, 0x00050050u, 0x0000005fu, 0x00001462u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001463u, 0x00001462u, 0x0004003du, 0x0000001eu, 0x00001465u, 0x000001a4u, 0x0003003eu, 0x00001464u, 0x00001465u, 0x0004003du, 0x00000006u, 0x00001467u, 0x000001a5u, 0x0003003eu, 0x00001466u, 0x00001467u, 0x0003003eu, 0x00001468u, 0x00001463u, 0x0003003eu, 0x00001469u, 0x0000048bu, 0x0003003eu, 0x0000146au, 0x00001389u, 0x0004003du, 0x0000005du, 0x0000146du, 0x000001a8u, 0x0003003eu, 0x0000146cu, 0x0000146du, 0x000a0039u, 0x00000009u, 0x0000146eu, 0x0000015bu, 0x00001464u, 0x00001466u, 0x00001468u, 0x00001469u, 0x0000146au, 0x0000146cu, 0x0003003eu, 0x000013d3u, 0x0000146eu, 0x000200f9u, 0x0000145fu, 0x000200f8u, 0x0000145fu, 0x000700f5u, 0x00000009u, 0x0000eba1u, 0x0000eb11u, 0x0000143eu, 0x0000146eu, 0x0000145eu, 0x000200f9u, 0x0000138fu, 0x000200f8u, 0x0000138cu, 0x0004007cu, 0x000000a2u, 0x00001392u, 0x0000ea81u, 0x00050041u, 0x0000003eu, 0x00001393u, 0x000001a4u, 0x0000025eu, 0x0004003du, 0x00000008u, 0x00001394u, 0x00001393u, 0x0004007cu, 0x00000006u, 0x00001395u, 0x00001394u, 0x000600a9u, 0x00000008u, 0x00001397u, 0x00001370u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00001398u, 0x00001397u, 0x0004003du, 0x0000001eu, 0x0000139au, 0x000001a4u, 0x0003003eu, 0x00001399u, 0x0000139au, 0x0004003du, 0x00000006u, 0x0000139cu, 0x000001a5u, 0x0003003eu, 0x0000139bu, 0x0000139cu, 0x0003003eu, 0x0000139du, 0x00001392u, 0x0003003eu, 0x0000139eu, 0x00001395u, 0x0003003eu, 0x0000139fu, 0x00001398u, 0x0003003eu, 0x000013a0u, 0x00001389u, 0x0004003du, 0x0000005du, 0x000013a3u, 0x000001a8u, 0x0003003eu, 0x000013a2u, 0x000013a3u, 0x000b0039u, 0x00000009u, 0x000013a4u, 0x00000145u, 0x00001399u, 0x0000139bu, 0x0000139du, 0x0000139eu, 0x0000139fu, 0x000013a0u, 0x000013a2u, 0x0003003eu, 0x00001390u, 0x000013a4u, 0x0004003du, 0x0000005du, 0x000013a5u, 0x000001a9u, 0x000300f7u, 0x000013a7u, 0x00000000u, 0x000400fau, 0x000013a5u, 0x000013a6u, 0x000013a7u, 0x000200f8u, 0x000013a6u, 0x00050050u, 0x0000005fu, 0x000013abu, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000013acu, 0x000013abu, 0x0004003du, 0x00000008u, 0x000013aeu, 0x00001393u, 0x0004007cu, 0x00000006u, 0x000013afu, 0x000013aeu, 0x0004003du, 0x0000001eu, 0x000013b1u, 0x000001a4u, 0x0003003eu, 0x000013b0u, 0x000013b1u, 0x0004003du, 0x00000006u, 0x000013b3u, 0x000001a5u, 0x0003003eu, 0x000013b2u, 0x000013b3u, 0x0003003eu, 0x000013b4u, 0x000013acu, 0x0003003eu, 0x000013b5u, 0x000013afu, 0x0003003eu, 0x000013b6u, 0x00000485u, 0x0003003eu, 0x000013b7u, 0x00001389u, 0x0004003du, 0x0000005du, 0x000013bau, 0x000001a8u, 0x0003003eu, 0x000013b9u, 0x000013bau, 0x000b0039u, 0x00000009u, 0x000013bbu, 0x00000145u, 0x000013b0u, 0x000013b2u, 0x000013b4u, 0x000013b5u, 0x000013b6u, 0x000013b7u, 0x000013b9u, 0x0003003eu, 0x000013a8u, 0x000013bbu, 0x00050050u, 0x0000005fu, 0x000013bfu, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000013c0u, 0x000013bfu, 0x0004003du, 0x00000008u, 0x000013c2u, 0x00001393u, 0x0004007cu, 0x00000006u, 0x000013c3u, 0x000013c2u, 0x0004003du, 0x0000001eu, 0x000013c5u, 0x000001a4u, 0x0003003eu, 0x000013c4u, 0x000013c5u, 0x0004003du, 0x00000006u, 0x000013c7u, 0x000001a5u, 0x0003003eu, 0x000013c6u, 0x000013c7u, 0x0003003eu, 0x000013c8u, 0x000013c0u, 0x0003003eu, 0x000013c9u, 0x000013c3u, 0x0003003eu, 0x000013cau, 0x000003c4u, 0x0003003eu, 0x000013cbu, 0x00001389u, 0x0004003du, 0x0000005du, 0x000013ceu, 0x000001a8u, 0x0003003eu, 0x000013cdu, 0x000013ceu, 0x000b0039u, 0x00000009u, 0x000013cfu, 0x00000145u, 0x000013c4u, 0x000013c6u, 0x000013c8u, 0x000013c9u, 0x000013cau, 0x000013cbu, 0x000013cdu, 0x0003003eu, 0x000013bcu, 0x000013cfu, 0x000200f9u, 0x000013a7u, 0x000200f8u, 0x000013a7u, 0x000700f5u, 0x00000009u, 0x0000eb76u, 0x0000eb11u, 0x0000138cu, 0x000013cfu, 0x000013a6u, 0x000700f5u, 0x00000009u, 0x0000eb17u, 0x0000eb11u, 0x0000138cu, 0x000013bbu, 0x000013a6u, 0x0004003du, 0x0000005du, 0x000013d0u, 0x000001aau, 0x000300f7u, 0x000013d2u, 0x00000000u, 0x000400fau, 0x000013d0u, 0x000013d1u, 0x000013d2u, 0x000200f8u, 0x000013d1u, 0x00050050u, 0x0000005fu, 0x000013d6u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000013d7u, 0x000013d6u, 0x0004003du, 0x00000008u, 0x000013d9u, 0x00001393u, 0x0004007cu, 0x00000006u, 0x000013dau, 0x000013d9u, 0x0004003du, 0x0000001eu, 0x000013dcu, 0x000001a4u, 0x0003003eu, 0x000013dbu, 0x000013dcu, 0x0004003du, 0x00000006u, 0x000013deu, 0x000001a5u, 0x0003003eu, 0x000013ddu, 0x000013deu, 0x0003003eu, 0x000013dfu, 0x000013d7u, 0x0003003eu, 0x000013e0u, 0x000013dau, 0x0003003eu, 0x000013e1u, 0x0000048bu, 0x0003003eu, 0x000013e2u, 0x00001389u, 0x0004003du, 0x0000005du, 0x000013e5u, 0x000001a8u, 0x0003003eu, 0x000013e4u, 0x000013e5u, 0x000b0039u, 0x00000009u, 0x000013e6u, 0x00000145u, 0x000013dbu, 0x000013ddu, 0x000013dfu, 0x000013e0u, 0x000013e1u, 0x000013e2u, 0x000013e4u, 0x0003003eu, 0x000013d3u, 0x000013e6u, 0x000200f9u, 0x000013d2u, 0x000200f8u, 0x000013d2u, 0x000700f5u, 0x00000009u, 0x0000eba4u, 0x0000eb11u, 0x000013a7u, 0x000013e6u, 0x000013d1u, 0x000200f9u, 0x0000138fu, 0x000200f8u, 0x0000138du, 0x0004007cu, 0x000000a2u, 0x000013e9u, 0x0000ea81u, 0x000600a9u, 0x00000008u, 0x000013ebu, 0x00001370u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000013ecu, 0x000013ebu, 0x0004003du, 0x0000001eu, 0x000013eeu, 0x000001a4u, 0x0003003eu, 0x000013edu, 0x000013eeu, 0x0004003du, 0x00000006u, 0x000013f0u, 0x000001a5u, 0x0003003eu, 0x000013efu, 0x000013f0u, 0x0003003eu, 0x000013f1u, 0x000013e9u, 0x0003003eu, 0x000013f2u, 0x000013ecu, 0x0003003eu, 0x000013f3u, 0x00001389u, 0x0004003du, 0x0000005du, 0x000013f6u, 0x000001a8u, 0x0003003eu, 0x000013f5u, 0x000013f6u, 0x000a0039u, 0x00000009u, 0x000013f7u, 0x0000014eu, 0x000013edu, 0x000013efu, 0x000013f1u, 0x000013f2u, 0x000013f3u, 0x000013f5u, 0x0003003eu, 0x00001390u, 0x000013f7u, 0x0004003du, 0x0000005du, 0x000013f8u, 0x000001a9u, 0x000300f7u, 0x000013fau, 0x00000000u, 0x000400fau, 0x000013f8u, 0x000013f9u, 0x000013fau, 0x000200f8u, 0x000013f9u, 0x00050050u, 0x0000005fu, 0x000013fdu, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000013feu, 0x000013fdu, 0x0004003du, 0x0000001eu, 0x00001400u, 0x000001a4u, 0x0003003eu, 0x000013ffu, 0x00001400u, 0x0004003du, 0x00000006u, 0x00001402u, 0x000001a5u, 0x0003003eu, 0x00001401u, 0x00001402u, 0x0003003eu, 0x00001403u, 0x000013feu, 0x0003003eu, 0x00001404u, 0x00000485u, 0x0003003eu, 0x00001405u, 0x00001389u, 0x0004003du, 0x0000005du, 0x00001408u, 0x000001a8u, 0x0003003eu, 0x00001407u, 0x00001408u, 0x000a0039u, 0x00000009u, 0x00001409u, 0x0000014eu, 0x000013ffu, 0x00001401u, 0x00001403u, 0x00001404u, 0x00001405u, 0x00001407u, 0x0003003eu, 0x000013a8u, 0x00001409u, 0x00050050u, 0x0000005fu, 0x0000140cu, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000140du, 0x0000140cu, 0x0004003du, 0x0000001eu, 0x0000140fu, 0x000001a4u, 0x0003003eu, 0x0000140eu, 0x0000140fu, 0x0004003du, 0x00000006u, 0x00001411u, 0x000001a5u, 0x0003003eu, 0x00001410u, 0x00001411u, 0x0003003eu, 0x00001412u, 0x0000140du, 0x0003003eu, 0x00001413u, 0x000003c4u, 0x0003003eu, 0x00001414u, 0x00001389u, 0x0004003du, 0x0000005du, 0x00001417u, 0x000001a8u, 0x0003003eu, 0x00001416u, 0x00001417u, 0x000a0039u, 0x00000009u, 0x00001418u, 0x0000014eu, 0x0000140eu, 0x00001410u, 0x00001412u, 0x00001413u, 0x00001414u, 0x00001416u, 0x0003003eu, 0x000013bcu, 0x00001418u, 0x000200f9u, 0x000013fau, 0x000200f8u, 0x000013fau, 0x000700f5u, 0x00000009u, 0x0000eb78u, 0x0000eb11u, 0x0000138du, 0x00001418u, 0x000013f9u, 0x000700f5u, 0x00000009u, 0x0000eb19u, 0x0000eb11u, 0x0000138du, 0x00001409u, 0x000013f9u, 0x0004003du, 0x0000005du, 0x00001419u, 0x000001aau, 0x000300f7u, 0x0000141bu, 0x00000000u, 0x000400fau, 0x00001419u, 0x0000141au, 0x0000141bu, 0x000200f8u, 0x0000141au, 0x00050050u, 0x0000005fu, 0x0000141eu, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000141fu, 0x0000141eu, 0x0004003du, 0x0000001eu, 0x00001421u, 0x000001a4u, 0x0003003eu, 0x00001420u, 0x00001421u, 0x0004003du, 0x00000006u, 0x00001423u, 0x000001a5u, 0x0003003eu, 0x00001422u, 0x00001423u, 0x0003003eu, 0x00001424u, 0x0000141fu, 0x0003003eu, 0x00001425u, 0x0000048bu, 0x0003003eu, 0x00001426u, 0x00001389u, 0x0004003du, 0x0000005du, 0x00001429u, 0x000001a8u, 0x0003003eu, 0x00001428u, 0x00001429u, 0x000a0039u, 0x00000009u, 0x0000142au, 0x0000014eu, 0x00001420u, 0x00001422u, 0x00001424u, 0x00001425u, 0x00001426u, 0x00001428u, 0x0003003eu, 0x000013d3u, 0x0000142au, 0x000200f9u, 0x0000141bu, 0x000200f8u, 0x0000141bu, 0x000700f5u, 0x00000009u, 0x0000eba6u, 0x0000eb11u, 0x000013fau, 0x0000142au, 0x0000141au, 0x000200f9u, 0x0000138fu, 0x000200f8u, 0x0000138fu, 0x000900f5u, 0x00000009u, 0x0000eba0u, 0x0000eba1u, 0x0000145fu, 0x0000eba4u, 0x000013d2u, 0x0000eba6u, 0x0000141bu, 0x000900f5u, 0x00000009u, 0x0000eb71u, 0x0000eb73u, 0x0000145fu, 0x0000eb76u, 0x000013d2u, 0x0000eb78u, 0x0000141bu, 0x000900f5u, 0x00000009u, 0x0000eb42u, 0x0000143bu, 0x0000145fu, 0x000013a4u, 0x000013d2u, 0x000013f7u, 0x0000141bu, 0x000900f5u, 0x00000009u, 0x0000eb12u, 0x0000eb14u, 0x0000145fu, 0x0000eb17u, 0x000013d2u, 0x0000eb19u, 0x0000141bu, 0x000200f9u, 0x00001382u, 0x000200f8u, 0x00001382u, 0x000700f5u, 0x00000009u, 0x0000eb9cu, 0x0000eb11u, 0x0000137du, 0x0000eba0u, 0x0000138fu, 0x000700f5u, 0x00000009u, 0x0000eb6du, 0x0000eb11u, 0x0000137du, 0x0000eb71u, 0x0000138fu, 0x000700f5u, 0x00000009u, 0x0000eb3eu, 0x0000eb11u, 0x0000137du, 0x0000eb42u, 0x0000138fu, 0x000700f5u, 0x00000009u, 0x0000eb0du, 0x0000eb11u, 0x0000137du, 0x0000eb12u, 0x0000138fu, 0x000200f9u, 0x0000137eu, 0x000200f8u, 0x00001473u, 0x0004003du, 0x00000008u, 0x00001475u, 0x0000136bu, 0x000300f7u, 0x0000147bu, 0x00000000u, 0x000d00fbu, 0x00001475u, 0x0000147bu, 0x00000000u, 0x00001476u, 0x00000001u, 0x00001477u, 0x00000002u, 0x00001478u, 0x00000003u, 0x00001479u, 0x00000004u, 0x0000147au, 0x000200f8u, 0x00001476u, 0x00050041u, 0x0000003eu, 0x0000147cu, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x0000147du, 0x0000147cu, 0x000300f7u, 0x00001482u, 0x00000000u, 0x000b00fbu, 0x0000147du, 0x00001482u, 0x00000000u, 0x0000147eu, 0x00000001u, 0x0000147fu, 0x00000002u, 0x00001480u, 0x00000003u, 0x00001481u, 0x000200f8u, 0x0000147eu, 0x0004007cu, 0x000000a2u, 0x00001484u, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x00001486u, 0x000001a4u, 0x0003003eu, 0x00001485u, 0x00001486u, 0x0004003du, 0x00000006u, 0x00001488u, 0x000001a5u, 0x0003003eu, 0x00001487u, 0x00001488u, 0x0003003eu, 0x00001489u, 0x00001484u, 0x00070039u, 0x00000009u, 0x0000148au, 0x0000012fu, 0x00001485u, 0x00001487u, 0x00001489u, 0x0003003eu, 0x00001390u, 0x0000148au, 0x0004003du, 0x0000005du, 0x0000148bu, 0x000001a9u, 0x000300f7u, 0x0000148du, 0x00000000u, 0x000400fau, 0x0000148bu, 0x0000148cu, 0x0000148du, 0x000200f8u, 0x0000148cu, 0x00050050u, 0x0000005fu, 0x00001490u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001491u, 0x00001490u, 0x0004003du, 0x0000001eu, 0x00001493u, 0x000001a4u, 0x0003003eu, 0x00001492u, 0x00001493u, 0x0004003du, 0x00000006u, 0x00001495u, 0x000001a5u, 0x0003003eu, 0x00001494u, 0x00001495u, 0x0003003eu, 0x00001496u, 0x00001491u, 0x00070039u, 0x00000009u, 0x00001497u, 0x0000012fu, 0x00001492u, 0x00001494u, 0x00001496u, 0x0003003eu, 0x000013a8u, 0x00001497u, 0x00050050u, 0x0000005fu, 0x0000149au, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000149bu, 0x0000149au, 0x0004003du, 0x0000001eu, 0x0000149du, 0x000001a4u, 0x0003003eu, 0x0000149cu, 0x0000149du, 0x0004003du, 0x00000006u, 0x0000149fu, 0x000001a5u, 0x0003003eu, 0x0000149eu, 0x0000149fu, 0x0003003eu, 0x000014a0u, 0x0000149bu, 0x00070039u, 0x00000009u, 0x000014a1u, 0x0000012fu, 0x0000149cu, 0x0000149eu, 0x000014a0u, 0x0003003eu, 0x000013bcu, 0x000014a1u, 0x000200f9u, 0x0000148du, 0x000200f8u, 0x0000148du, 0x000700f5u, 0x00000009u, 0x0000eb7cu, 0x0000eb11u, 0x0000147eu, 0x000014a1u, 0x0000148cu, 0x000700f5u, 0x00000009u, 0x0000eb1du, 0x0000eb11u, 0x0000147eu, 0x00001497u, 0x0000148cu, 0x0004003du, 0x0000005du, 0x000014a2u, 0x000001aau, 0x000300f7u, 0x000014a4u, 0x00000000u, 0x000400fau, 0x000014a2u, 0x000014a3u, 0x000014a4u, 0x000200f8u, 0x000014a3u, 0x00050050u, 0x0000005fu, 0x000014a7u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000014a8u, 0x000014a7u, 0x0004003du, 0x0000001eu, 0x000014aau, 0x000001a4u, 0x0003003eu, 0x000014a9u, 0x000014aau, 0x0004003du, 0x00000006u, 0x000014acu, 0x000001a5u, 0x0003003eu, 0x000014abu, 0x000014acu, 0x0003003eu, 0x000014adu, 0x000014a8u, 0x00070039u, 0x00000009u, 0x000014aeu, 0x0000012fu, 0x000014a9u, 0x000014abu, 0x000014adu, 0x0003003eu, 0x000013d3u, 0x000014aeu, 0x000200f9u, 0x000014a4u, 0x000200f8u, 0x000014a4u, 0x000700f5u, 0x00000009u, 0x0000ebaau, 0x0000eb11u, 0x0000148du, 0x000014aeu, 0x000014a3u, 0x000200f9u, 0x00001482u, 0x000200f8u, 0x0000147fu, 0x0004007cu, 0x000000a2u, 0x000014b1u, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x000014b3u, 0x000001a4u, 0x0003003eu, 0x000014b2u, 0x000014b3u, 0x0004003du, 0x00000006u, 0x000014b5u, 0x000001a5u, 0x0003003eu, 0x000014b4u, 0x000014b5u, 0x0003003eu, 0x000014b6u, 0x000014b1u, 0x00070039u, 0x00000009u, 0x000014b7u, 0x00000160u, 0x000014b2u, 0x000014b4u, 0x000014b6u, 0x0003003eu, 0x00001390u, 0x000014b7u, 0x0004003du, 0x0000005du, 0x000014b8u, 0x000001a9u, 0x000300f7u, 0x000014bau, 0x00000000u, 0x000400fau, 0x000014b8u, 0x000014b9u, 0x000014bau, 0x000200f8u, 0x000014b9u, 0x00050050u, 0x0000005fu, 0x000014bdu, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000014beu, 0x000014bdu, 0x0004003du, 0x0000001eu, 0x000014c0u, 0x000001a4u, 0x0003003eu, 0x000014bfu, 0x000014c0u, 0x0004003du, 0x00000006u, 0x000014c2u, 0x000001a5u, 0x0003003eu, 0x000014c1u, 0x000014c2u, 0x0003003eu, 0x000014c3u, 0x000014beu, 0x00070039u, 0x00000009u, 0x000014c4u, 0x00000160u, 0x000014bfu, 0x000014c1u, 0x000014c3u, 0x0003003eu, 0x000013a8u, 0x000014c4u, 0x00050050u, 0x0000005fu, 0x000014c7u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000014c8u, 0x000014c7u, 0x0004003du, 0x0000001eu, 0x000014cau, 0x000001a4u, 0x0003003eu, 0x000014c9u, 0x000014cau, 0x0004003du, 0x00000006u, 0x000014ccu, 0x000001a5u, 0x0003003eu, 0x000014cbu, 0x000014ccu, 0x0003003eu, 0x000014cdu, 0x000014c8u, 0x00070039u, 0x00000009u, 0x000014ceu, 0x00000160u, 0x000014c9u, 0x000014cbu, 0x000014cdu, 0x0003003eu, 0x000013bcu, 0x000014ceu, 0x000200f9u, 0x000014bau, 0x000200f8u, 0x000014bau, 0x000700f5u, 0x00000009u, 0x0000eb7eu, 0x0000eb11u, 0x0000147fu, 0x000014ceu, 0x000014b9u, 0x000700f5u, 0x00000009u, 0x0000eb1fu, 0x0000eb11u, 0x0000147fu, 0x000014c4u, 0x000014b9u, 0x0004003du, 0x0000005du, 0x000014cfu, 0x000001aau, 0x000300f7u, 0x000014d1u, 0x00000000u, 0x000400fau, 0x000014cfu, 0x000014d0u, 0x000014d1u, 0x000200f8u, 0x000014d0u, 0x00050050u, 0x0000005fu, 0x000014d4u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000014d5u, 0x000014d4u, 0x0004003du, 0x0000001eu, 0x000014d7u, 0x000001a4u, 0x0003003eu, 0x000014d6u, 0x000014d7u, 0x0004003du, 0x00000006u, 0x000014d9u, 0x000001a5u, 0x0003003eu, 0x000014d8u, 0x000014d9u, 0x0003003eu, 0x000014dau, 0x000014d5u, 0x00070039u, 0x00000009u, 0x000014dbu, 0x00000160u, 0x000014d6u, 0x000014d8u, 0x000014dau, 0x0003003eu, 0x000013d3u, 0x000014dbu, 0x000200f9u, 0x000014d1u, 0x000200f8u, 0x000014d1u, 0x000700f5u, 0x00000009u, 0x0000ebacu, 0x0000eb11u, 0x000014bau, 0x000014dbu, 0x000014d0u, 0x000200f9u, 0x00001482u, 0x000200f8u, 0x00001480u, 0x0004007cu, 0x000000a2u, 0x000014deu, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x000014e0u, 0x000001a4u, 0x0003003eu, 0x000014dfu, 0x000014e0u, 0x0004003du, 0x00000006u, 0x000014e2u, 0x000001a5u, 0x0003003eu, 0x000014e1u, 0x000014e2u, 0x0003003eu, 0x000014e3u, 0x000014deu, 0x00070039u, 0x00000009u, 0x000014e4u, 0x00000170u, 0x000014dfu, 0x000014e1u, 0x000014e3u, 0x0003003eu, 0x00001390u, 0x000014e4u, 0x0004003du, 0x0000005du, 0x000014e5u, 0x000001a9u, 0x000300f7u, 0x000014e7u, 0x00000000u, 0x000400fau, 0x000014e5u, 0x000014e6u, 0x000014e7u, 0x000200f8u, 0x000014e6u, 0x00050050u, 0x0000005fu, 0x000014eau, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000014ebu, 0x000014eau, 0x0004003du, 0x0000001eu, 0x000014edu, 0x000001a4u, 0x0003003eu, 0x000014ecu, 0x000014edu, 0x0004003du, 0x00000006u, 0x000014efu, 0x000001a5u, 0x0003003eu, 0x000014eeu, 0x000014efu, 0x0003003eu, 0x000014f0u, 0x000014ebu, 0x00070039u, 0x00000009u, 0x000014f1u, 0x00000170u, 0x000014ecu, 0x000014eeu, 0x000014f0u, 0x0003003eu, 0x000013a8u, 0x000014f1u, 0x00050050u, 0x0000005fu, 0x000014f4u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000014f5u, 0x000014f4u, 0x0004003du, 0x0000001eu, 0x000014f7u, 0x000001a4u, 0x0003003eu, 0x000014f6u, 0x000014f7u, 0x0004003du, 0x00000006u, 0x000014f9u, 0x000001a5u, 0x0003003eu, 0x000014f8u, 0x000014f9u, 0x0003003eu, 0x000014fau, 0x000014f5u, 0x00070039u, 0x00000009u, 0x000014fbu, 0x00000170u, 0x000014f6u, 0x000014f8u, 0x000014fau, 0x0003003eu, 0x000013bcu, 0x000014fbu, 0x000200f9u, 0x000014e7u, 0x000200f8u, 0x000014e7u, 0x000700f5u, 0x00000009u, 0x0000eb80u, 0x0000eb11u, 0x00001480u, 0x000014fbu, 0x000014e6u, 0x000700f5u, 0x00000009u, 0x0000eb21u, 0x0000eb11u, 0x00001480u, 0x000014f1u, 0x000014e6u, 0x0004003du, 0x0000005du, 0x000014fcu, 0x000001aau, 0x000300f7u, 0x000014feu, 0x00000000u, 0x000400fau, 0x000014fcu, 0x000014fdu, 0x000014feu, 0x000200f8u, 0x000014fdu, 0x00050050u, 0x0000005fu, 0x00001501u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001502u, 0x00001501u, 0x0004003du, 0x0000001eu, 0x00001504u, 0x000001a4u, 0x0003003eu, 0x00001503u, 0x00001504u, 0x0004003du, 0x00000006u, 0x00001506u, 0x000001a5u, 0x0003003eu, 0x00001505u, 0x00001506u, 0x0003003eu, 0x00001507u, 0x00001502u, 0x00070039u, 0x00000009u, 0x00001508u, 0x00000170u, 0x00001503u, 0x00001505u, 0x00001507u, 0x0003003eu, 0x000013d3u, 0x00001508u, 0x000200f9u, 0x000014feu, 0x000200f8u, 0x000014feu, 0x000700f5u, 0x00000009u, 0x0000ebaeu, 0x0000eb11u, 0x000014e7u, 0x00001508u, 0x000014fdu, 0x000200f9u, 0x00001482u, 0x000200f8u, 0x00001481u, 0x0004007cu, 0x000000a2u, 0x0000150bu, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x0000150du, 0x000001a4u, 0x0003003eu, 0x0000150cu, 0x0000150du, 0x0004003du, 0x00000006u, 0x0000150fu, 0x000001a5u, 0x0003003eu, 0x0000150eu, 0x0000150fu, 0x0003003eu, 0x00001510u, 0x0000150bu, 0x00070039u, 0x00000009u, 0x00001511u, 0x0000017au, 0x0000150cu, 0x0000150eu, 0x00001510u, 0x0003003eu, 0x00001390u, 0x00001511u, 0x0004003du, 0x0000005du, 0x00001512u, 0x000001a9u, 0x000300f7u, 0x00001514u, 0x00000000u, 0x000400fau, 0x00001512u, 0x00001513u, 0x00001514u, 0x000200f8u, 0x00001513u, 0x00050050u, 0x0000005fu, 0x00001517u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001518u, 0x00001517u, 0x0004003du, 0x0000001eu, 0x0000151au, 0x000001a4u, 0x0003003eu, 0x00001519u, 0x0000151au, 0x0004003du, 0x00000006u, 0x0000151cu, 0x000001a5u, 0x0003003eu, 0x0000151bu, 0x0000151cu, 0x0003003eu, 0x0000151du, 0x00001518u, 0x00070039u, 0x00000009u, 0x0000151eu, 0x0000017au, 0x00001519u, 0x0000151bu, 0x0000151du, 0x0003003eu, 0x000013a8u, 0x0000151eu, 0x00050050u, 0x0000005fu, 0x00001521u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001522u, 0x00001521u, 0x0004003du, 0x0000001eu, 0x00001524u, 0x000001a4u, 0x0003003eu, 0x00001523u, 0x00001524u, 0x0004003du, 0x00000006u, 0x00001526u, 0x000001a5u, 0x0003003eu, 0x00001525u, 0x00001526u, 0x0003003eu, 0x00001527u, 0x00001522u, 0x00070039u, 0x00000009u, 0x00001528u, 0x0000017au, 0x00001523u, 0x00001525u, 0x00001527u, 0x0003003eu, 0x000013bcu, 0x00001528u, 0x000200f9u, 0x00001514u, 0x000200f8u, 0x00001514u, 0x000700f5u, 0x00000009u, 0x0000eb82u, 0x0000eb11u, 0x00001481u, 0x00001528u, 0x00001513u, 0x000700f5u, 0x00000009u, 0x0000eb23u, 0x0000eb11u, 0x00001481u, 0x0000151eu, 0x00001513u, 0x0004003du, 0x0000005du, 0x00001529u, 0x000001aau, 0x000300f7u, 0x0000152bu, 0x00000000u, 0x000400fau, 0x00001529u, 0x0000152au, 0x0000152bu, 0x000200f8u, 0x0000152au, 0x00050050u, 0x0000005fu, 0x0000152eu, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000152fu, 0x0000152eu, 0x0004003du, 0x0000001eu, 0x00001531u, 0x000001a4u, 0x0003003eu, 0x00001530u, 0x00001531u, 0x0004003du, 0x00000006u, 0x00001533u, 0x000001a5u, 0x0003003eu, 0x00001532u, 0x00001533u, 0x0003003eu, 0x00001534u, 0x0000152fu, 0x00070039u, 0x00000009u, 0x00001535u, 0x0000017au, 0x00001530u, 0x00001532u, 0x00001534u, 0x0003003eu, 0x000013d3u, 0x00001535u, 0x000200f9u, 0x0000152bu, 0x000200f8u, 0x0000152bu, 0x000700f5u, 0x00000009u, 0x0000ebb0u, 0x0000eb11u, 0x00001514u, 0x00001535u, 0x0000152au, 0x000200f9u, 0x00001482u, 0x000200f8u, 0x00001482u, 0x000d00f5u, 0x00000009u, 0x0000eba9u, 0x0000eb11u, 0x00001476u, 0x0000ebaau, 0x000014a4u, 0x0000ebacu, 0x000014d1u, 0x0000ebaeu, 0x000014feu, 0x0000ebb0u, 0x0000152bu, 0x000d00f5u, 0x00000009u, 0x0000eb7au, 0x0000eb11u, 0x00001476u, 0x0000eb7cu, 0x000014a4u, 0x0000eb7eu, 0x000014d1u, 0x0000eb80u, 0x000014feu, 0x0000eb82u, 0x0000152bu, 0x000d00f5u, 0x00000009u, 0x0000eb4au, 0x0000eb11u, 0x00001476u, 0x0000148au, 0x000014a4u, 0x000014b7u, 0x000014d1u, 0x000014e4u, 0x000014feu, 0x00001511u, 0x0000152bu, 0x000d00f5u, 0x00000009u, 0x0000eb1bu, 0x0000eb11u, 0x00001476u, 0x0000eb1du, 0x000014a4u, 0x0000eb1fu, 0x000014d1u, 0x0000eb21u, 0x000014feu, 0x0000eb23u, 0x0000152bu, 0x000200f9u, 0x0000147bu, 0x000200f8u, 0x00001477u, 0x000500c3u, 0x00000008u, 0x0000153bu, 0x0000133bu, 0x00000212u, 0x0004007cu, 0x00000006u, 0x0000153cu, 0x0000153bu, 0x0003003eu, 0x00001539u, 0x0000153cu, 0x00050082u, 0x00000008u, 0x00001541u, 0x0000134au, 0x0000133bu, 0x00050080u, 0x00000008u, 0x00001542u, 0x0000134au, 0x00001541u, 0x000500c3u, 0x00000008u, 0x00001543u, 0x00001542u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00001544u, 0x00001543u, 0x0003003eu, 0x0000153du, 0x00001544u, 0x00050050u, 0x0000005fu, 0x00001547u, 0x0000133bu, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001548u, 0x00001547u, 0x0004003du, 0x0000001eu, 0x0000154au, 0x000001a4u, 0x0003003eu, 0x00001549u, 0x0000154au, 0x0004003du, 0x00000006u, 0x0000154cu, 0x000001a5u, 0x0003003eu, 0x0000154bu, 0x0000154cu, 0x0003003eu, 0x0000154du, 0x00001548u, 0x0003003eu, 0x0000154eu, 0x0000153cu, 0x00080039u, 0x00000009u, 0x00001550u, 0x0000016bu, 0x00001549u, 0x0000154bu, 0x0000154du, 0x0000154eu, 0x0003003eu, 0x00001390u, 0x00001550u, 0x0004003du, 0x0000005du, 0x00001551u, 0x000001a9u, 0x000300f7u, 0x00001553u, 0x00000000u, 0x000400fau, 0x00001551u, 0x00001552u, 0x00001553u, 0x000200f8u, 0x00001552u, 0x00050050u, 0x0000005fu, 0x00001556u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001557u, 0x00001556u, 0x0004003du, 0x0000001eu, 0x00001559u, 0x000001a4u, 0x0003003eu, 0x00001558u, 0x00001559u, 0x0004003du, 0x00000006u, 0x0000155bu, 0x000001a5u, 0x0003003eu, 0x0000155au, 0x0000155bu, 0x0003003eu, 0x0000155cu, 0x00001557u, 0x0003003eu, 0x0000155du, 0x00001544u, 0x00080039u, 0x00000009u, 0x0000155fu, 0x0000016bu, 0x00001558u, 0x0000155au, 0x0000155cu, 0x0000155du, 0x0003003eu, 0x000013a8u, 0x0000155fu, 0x00050050u, 0x0000005fu, 0x00001562u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001563u, 0x00001562u, 0x0004003du, 0x0000001eu, 0x00001565u, 0x000001a4u, 0x0003003eu, 0x00001564u, 0x00001565u, 0x0004003du, 0x00000006u, 0x00001567u, 0x000001a5u, 0x0003003eu, 0x00001566u, 0x00001567u, 0x0003003eu, 0x00001568u, 0x00001563u, 0x0003003eu, 0x00001569u, 0x0000153cu, 0x00080039u, 0x00000009u, 0x0000156bu, 0x0000016bu, 0x00001564u, 0x00001566u, 0x00001568u, 0x00001569u, 0x0003003eu, 0x000013bcu, 0x0000156bu, 0x00050050u, 0x0000005fu, 0x0000156eu, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000156fu, 0x0000156eu, 0x0004003du, 0x0000001eu, 0x00001571u, 0x000001a4u, 0x0003003eu, 0x00001570u, 0x00001571u, 0x0004003du, 0x00000006u, 0x00001573u, 0x000001a5u, 0x0003003eu, 0x00001572u, 0x00001573u, 0x0003003eu, 0x00001574u, 0x0000156fu, 0x0003003eu, 0x00001575u, 0x00001544u, 0x00080039u, 0x00000009u, 0x00001577u, 0x0000016bu, 0x00001570u, 0x00001572u, 0x00001574u, 0x00001575u, 0x0003003eu, 0x000013d3u, 0x00001577u, 0x000200f9u, 0x00001553u, 0x000200f8u, 0x00001553u, 0x000700f5u, 0x00000009u, 0x0000ebb2u, 0x0000eb11u, 0x00001477u, 0x00001577u, 0x00001552u, 0x000700f5u, 0x00000009u, 0x0000eb83u, 0x0000eb11u, 0x00001477u, 0x0000156bu, 0x00001552u, 0x000700f5u, 0x00000009u, 0x0000eb24u, 0x0000eb11u, 0x00001477u, 0x0000155fu, 0x00001552u, 0x000200f9u, 0x0000147bu, 0x000200f8u, 0x00001478u, 0x00050041u, 0x0000003eu, 0x00001579u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x0000157au, 0x00001579u, 0x000300f7u, 0x0000157eu, 0x00000000u, 0x000700fbu, 0x0000157au, 0x0000157du, 0x00000000u, 0x0000157bu, 0x00000001u, 0x0000157cu, 0x000200f8u, 0x0000157du, 0x0004007cu, 0x000000a2u, 0x000015eau, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x000015ecu, 0x000001a4u, 0x0003003eu, 0x000015ebu, 0x000015ecu, 0x0004003du, 0x00000006u, 0x000015eeu, 0x000001a5u, 0x0003003eu, 0x000015edu, 0x000015eeu, 0x0003003eu, 0x000015efu, 0x000015eau, 0x00070039u, 0x00000009u, 0x000015f0u, 0x00000153u, 0x000015ebu, 0x000015edu, 0x000015efu, 0x0003003eu, 0x00001390u, 0x000015f0u, 0x0004003du, 0x0000005du, 0x000015f1u, 0x000001a9u, 0x000300f7u, 0x000015f3u, 0x00000000u, 0x000400fau, 0x000015f1u, 0x000015f2u, 0x000015f3u, 0x000200f8u, 0x000015f2u, 0x00050050u, 0x0000005fu, 0x000015f6u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000015f7u, 0x000015f6u, 0x0004003du, 0x0000001eu, 0x000015f9u, 0x000001a4u, 0x0003003eu, 0x000015f8u, 0x000015f9u, 0x0004003du, 0x00000006u, 0x000015fbu, 0x000001a5u, 0x0003003eu, 0x000015fau, 0x000015fbu, 0x0003003eu, 0x000015fcu, 0x000015f7u, 0x00070039u, 0x00000009u, 0x000015fdu, 0x00000153u, 0x000015f8u, 0x000015fau, 0x000015fcu, 0x0003003eu, 0x000013a8u, 0x000015fdu, 0x00050050u, 0x0000005fu, 0x00001600u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001601u, 0x00001600u, 0x0004003du, 0x0000001eu, 0x00001603u, 0x000001a4u, 0x0003003eu, 0x00001602u, 0x00001603u, 0x0004003du, 0x00000006u, 0x00001605u, 0x000001a5u, 0x0003003eu, 0x00001604u, 0x00001605u, 0x0003003eu, 0x00001606u, 0x00001601u, 0x00070039u, 0x00000009u, 0x00001607u, 0x00000153u, 0x00001602u, 0x00001604u, 0x00001606u, 0x0003003eu, 0x000013bcu, 0x00001607u, 0x000200f9u, 0x000015f3u, 0x000200f8u, 0x000015f3u, 0x000700f5u, 0x00000009u, 0x0000eb86u, 0x0000eb11u, 0x0000157du, 0x00001607u, 0x000015f2u, 0x000700f5u, 0x00000009u, 0x0000eb27u, 0x0000eb11u, 0x0000157du, 0x000015fdu, 0x000015f2u, 0x0004003du, 0x0000005du, 0x00001608u, 0x000001aau, 0x000300f7u, 0x0000160au, 0x00000000u, 0x000400fau, 0x00001608u, 0x00001609u, 0x0000160au, 0x000200f8u, 0x00001609u, 0x00050050u, 0x0000005fu, 0x0000160du, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000160eu, 0x0000160du, 0x0004003du, 0x0000001eu, 0x00001610u, 0x000001a4u, 0x0003003eu, 0x0000160fu, 0x00001610u, 0x0004003du, 0x00000006u, 0x00001612u, 0x000001a5u, 0x0003003eu, 0x00001611u, 0x00001612u, 0x0003003eu, 0x00001613u, 0x0000160eu, 0x00070039u, 0x00000009u, 0x00001614u, 0x00000153u, 0x0000160fu, 0x00001611u, 0x00001613u, 0x0003003eu, 0x000013d3u, 0x00001614u, 0x000200f9u, 0x0000160au, 0x000200f8u, 0x0000160au, 0x000700f5u, 0x00000009u, 0x0000ebb4u, 0x0000eb11u, 0x000015f3u, 0x00001614u, 0x00001609u, 0x000200f9u, 0x0000157eu, 0x000200f8u, 0x0000157bu, 0x0004007cu, 0x000000a2u, 0x00001580u, 0x0000ea81u, 0x00050041u, 0x0000003eu, 0x00001581u, 0x000001a4u, 0x0000025eu, 0x0004003du, 0x00000008u, 0x00001582u, 0x00001581u, 0x0004007cu, 0x00000006u, 0x00001583u, 0x00001582u, 0x0004003du, 0x0000001eu, 0x00001585u, 0x000001a4u, 0x0003003eu, 0x00001584u, 0x00001585u, 0x0004003du, 0x00000006u, 0x00001587u, 0x000001a5u, 0x0003003eu, 0x00001586u, 0x00001587u, 0x0003003eu, 0x00001588u, 0x00001580u, 0x0003003eu, 0x00001589u, 0x00001583u, 0x00080039u, 0x00000009u, 0x0000158au, 0x0000013bu, 0x00001584u, 0x00001586u, 0x00001588u, 0x00001589u, 0x0003003eu, 0x00001390u, 0x0000158au, 0x0004003du, 0x0000005du, 0x0000158bu, 0x000001a9u, 0x000300f7u, 0x0000158du, 0x00000000u, 0x000400fau, 0x0000158bu, 0x0000158cu, 0x0000158du, 0x000200f8u, 0x0000158cu, 0x00050050u, 0x0000005fu, 0x00001590u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001591u, 0x00001590u, 0x0004003du, 0x00000008u, 0x00001593u, 0x00001581u, 0x0004007cu, 0x00000006u, 0x00001594u, 0x00001593u, 0x0004003du, 0x0000001eu, 0x00001596u, 0x000001a4u, 0x0003003eu, 0x00001595u, 0x00001596u, 0x0004003du, 0x00000006u, 0x00001598u, 0x000001a5u, 0x0003003eu, 0x00001597u, 0x00001598u, 0x0003003eu, 0x00001599u, 0x00001591u, 0x0003003eu, 0x0000159au, 0x00001594u, 0x00080039u, 0x00000009u, 0x0000159bu, 0x0000013bu, 0x00001595u, 0x00001597u, 0x00001599u, 0x0000159au, 0x0003003eu, 0x000013a8u, 0x0000159bu, 0x00050050u, 0x0000005fu, 0x0000159eu, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000159fu, 0x0000159eu, 0x0004003du, 0x00000008u, 0x000015a1u, 0x00001581u, 0x0004007cu, 0x00000006u, 0x000015a2u, 0x000015a1u, 0x0004003du, 0x0000001eu, 0x000015a4u, 0x000001a4u, 0x0003003eu, 0x000015a3u, 0x000015a4u, 0x0004003du, 0x00000006u, 0x000015a6u, 0x000001a5u, 0x0003003eu, 0x000015a5u, 0x000015a6u, 0x0003003eu, 0x000015a7u, 0x0000159fu, 0x0003003eu, 0x000015a8u, 0x000015a2u, 0x00080039u, 0x00000009u, 0x000015a9u, 0x0000013bu, 0x000015a3u, 0x000015a5u, 0x000015a7u, 0x000015a8u, 0x0003003eu, 0x000013bcu, 0x000015a9u, 0x000200f9u, 0x0000158du, 0x000200f8u, 0x0000158du, 0x000700f5u, 0x00000009u, 0x0000eb88u, 0x0000eb11u, 0x0000157bu, 0x000015a9u, 0x0000158cu, 0x000700f5u, 0x00000009u, 0x0000eb29u, 0x0000eb11u, 0x0000157bu, 0x0000159bu, 0x0000158cu, 0x0004003du, 0x0000005du, 0x000015aau, 0x000001aau, 0x000300f7u, 0x000015acu, 0x00000000u, 0x000400fau, 0x000015aau, 0x000015abu, 0x000015acu, 0x000200f8u, 0x000015abu, 0x00050050u, 0x0000005fu, 0x000015afu, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000015b0u, 0x000015afu, 0x0004003du, 0x00000008u, 0x000015b2u, 0x00001581u, 0x0004007cu, 0x00000006u, 0x000015b3u, 0x000015b2u, 0x0004003du, 0x0000001eu, 0x000015b5u, 0x000001a4u, 0x0003003eu, 0x000015b4u, 0x000015b5u, 0x0004003du, 0x00000006u, 0x000015b7u, 0x000001a5u, 0x0003003eu, 0x000015b6u, 0x000015b7u, 0x0003003eu, 0x000015b8u, 0x000015b0u, 0x0003003eu, 0x000015b9u, 0x000015b3u, 0x00080039u, 0x00000009u, 0x000015bau, 0x0000013bu, 0x000015b4u, 0x000015b6u, 0x000015b8u, 0x000015b9u, 0x0003003eu, 0x000013d3u, 0x000015bau, 0x000200f9u, 0x000015acu, 0x000200f8u, 0x000015acu, 0x000700f5u, 0x00000009u, 0x0000ebb6u, 0x0000eb11u, 0x0000158du, 0x000015bau, 0x000015abu, 0x000200f9u, 0x0000157eu, 0x000200f8u, 0x0000157cu, 0x0004007cu, 0x000000a2u, 0x000015bdu, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x000015bfu, 0x000001a4u, 0x0003003eu, 0x000015beu, 0x000015bfu, 0x0004003du, 0x00000006u, 0x000015c1u, 0x000001a5u, 0x0003003eu, 0x000015c0u, 0x000015c1u, 0x0003003eu, 0x000015c2u, 0x000015bdu, 0x00070039u, 0x00000009u, 0x000015c3u, 0x00000160u, 0x000015beu, 0x000015c0u, 0x000015c2u, 0x0003003eu, 0x00001390u, 0x000015c3u, 0x0004003du, 0x0000005du, 0x000015c4u, 0x000001a9u, 0x000300f7u, 0x000015c6u, 0x00000000u, 0x000400fau, 0x000015c4u, 0x000015c5u, 0x000015c6u, 0x000200f8u, 0x000015c5u, 0x00050050u, 0x0000005fu, 0x000015c9u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000015cau, 0x000015c9u, 0x0004003du, 0x0000001eu, 0x000015ccu, 0x000001a4u, 0x0003003eu, 0x000015cbu, 0x000015ccu, 0x0004003du, 0x00000006u, 0x000015ceu, 0x000001a5u, 0x0003003eu, 0x000015cdu, 0x000015ceu, 0x0003003eu, 0x000015cfu, 0x000015cau, 0x00070039u, 0x00000009u, 0x000015d0u, 0x00000160u, 0x000015cbu, 0x000015cdu, 0x000015cfu, 0x0003003eu, 0x000013a8u, 0x000015d0u, 0x00050050u, 0x0000005fu, 0x000015d3u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000015d4u, 0x000015d3u, 0x0004003du, 0x0000001eu, 0x000015d6u, 0x000001a4u, 0x0003003eu, 0x000015d5u, 0x000015d6u, 0x0004003du, 0x00000006u, 0x000015d8u, 0x000001a5u, 0x0003003eu, 0x000015d7u, 0x000015d8u, 0x0003003eu, 0x000015d9u, 0x000015d4u, 0x00070039u, 0x00000009u, 0x000015dau, 0x00000160u, 0x000015d5u, 0x000015d7u, 0x000015d9u, 0x0003003eu, 0x000013bcu, 0x000015dau, 0x000200f9u, 0x000015c6u, 0x000200f8u, 0x000015c6u, 0x000700f5u, 0x00000009u, 0x0000eb8au, 0x0000eb11u, 0x0000157cu, 0x000015dau, 0x000015c5u, 0x000700f5u, 0x00000009u, 0x0000eb2bu, 0x0000eb11u, 0x0000157cu, 0x000015d0u, 0x000015c5u, 0x0004003du, 0x0000005du, 0x000015dbu, 0x000001aau, 0x000300f7u, 0x000015ddu, 0x00000000u, 0x000400fau, 0x000015dbu, 0x000015dcu, 0x000015ddu, 0x000200f8u, 0x000015dcu, 0x00050050u, 0x0000005fu, 0x000015e0u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000015e1u, 0x000015e0u, 0x0004003du, 0x0000001eu, 0x000015e3u, 0x000001a4u, 0x0003003eu, 0x000015e2u, 0x000015e3u, 0x0004003du, 0x00000006u, 0x000015e5u, 0x000001a5u, 0x0003003eu, 0x000015e4u, 0x000015e5u, 0x0003003eu, 0x000015e6u, 0x000015e1u, 0x00070039u, 0x00000009u, 0x000015e7u, 0x00000160u, 0x000015e2u, 0x000015e4u, 0x000015e6u, 0x0003003eu, 0x000013d3u, 0x000015e7u, 0x000200f9u, 0x000015ddu, 0x000200f8u, 0x000015ddu, 0x000700f5u, 0x00000009u, 0x0000ebb8u, 0x0000eb11u, 0x000015c6u, 0x000015e7u, 0x000015dcu, 0x000200f9u, 0x0000157eu, 0x000200f8u, 0x0000157eu, 0x000900f5u, 0x00000009u, 0x0000ebb3u, 0x0000ebb4u, 0x0000160au, 0x0000ebb6u, 0x000015acu, 0x0000ebb8u, 0x000015ddu, 0x000900f5u, 0x00000009u, 0x0000eb84u, 0x0000eb86u, 0x0000160au, 0x0000eb88u, 0x000015acu, 0x0000eb8au, 0x000015ddu, 0x000900f5u, 0x00000009u, 0x0000eb54u, 0x000015f0u, 0x0000160au, 0x0000158au, 0x000015acu, 0x000015c3u, 0x000015ddu, 0x000900f5u, 0x00000009u, 0x0000eb25u, 0x0000eb27u, 0x0000160au, 0x0000eb29u, 0x000015acu, 0x0000eb2bu, 0x000015ddu, 0x000200f9u, 0x0000147bu, 0x000200f8u, 0x00001479u, 0x00050041u, 0x0000003eu, 0x00001618u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001619u, 0x00001618u, 0x000300f7u, 0x0000161eu, 0x00000000u, 0x000b00fbu, 0x00001619u, 0x0000161eu, 0x00000000u, 0x0000161au, 0x00000001u, 0x0000161bu, 0x00000002u, 0x0000161cu, 0x00000003u, 0x0000161du, 0x000200f8u, 0x0000161au, 0x0004007cu, 0x000000a2u, 0x00001620u, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x00001622u, 0x000001a4u, 0x0003003eu, 0x00001621u, 0x00001622u, 0x0004003du, 0x00000006u, 0x00001624u, 0x000001a5u, 0x0003003eu, 0x00001623u, 0x00001624u, 0x0003003eu, 0x00001625u, 0x00001620u, 0x00070039u, 0x00000009u, 0x00001626u, 0x00000134u, 0x00001621u, 0x00001623u, 0x00001625u, 0x0003003eu, 0x00001390u, 0x00001626u, 0x0004003du, 0x0000005du, 0x00001627u, 0x000001a9u, 0x000300f7u, 0x00001629u, 0x00000000u, 0x000400fau, 0x00001627u, 0x00001628u, 0x00001629u, 0x000200f8u, 0x00001628u, 0x00050050u, 0x0000005fu, 0x0000162cu, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x0000162du, 0x0000162cu, 0x0004003du, 0x0000001eu, 0x0000162fu, 0x000001a4u, 0x0003003eu, 0x0000162eu, 0x0000162fu, 0x0004003du, 0x00000006u, 0x00001631u, 0x000001a5u, 0x0003003eu, 0x00001630u, 0x00001631u, 0x0003003eu, 0x00001632u, 0x0000162du, 0x00070039u, 0x00000009u, 0x00001633u, 0x00000134u, 0x0000162eu, 0x00001630u, 0x00001632u, 0x0003003eu, 0x000013a8u, 0x00001633u, 0x00050050u, 0x0000005fu, 0x00001636u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001637u, 0x00001636u, 0x0004003du, 0x0000001eu, 0x00001639u, 0x000001a4u, 0x0003003eu, 0x00001638u, 0x00001639u, 0x0004003du, 0x00000006u, 0x0000163bu, 0x000001a5u, 0x0003003eu, 0x0000163au, 0x0000163bu, 0x0003003eu, 0x0000163cu, 0x00001637u, 0x00070039u, 0x00000009u, 0x0000163du, 0x00000134u, 0x00001638u, 0x0000163au, 0x0000163cu, 0x0003003eu, 0x000013bcu, 0x0000163du, 0x000200f9u, 0x00001629u, 0x000200f8u, 0x00001629u, 0x000700f5u, 0x00000009u, 0x0000eb8du, 0x0000eb11u, 0x0000161au, 0x0000163du, 0x00001628u, 0x000700f5u, 0x00000009u, 0x0000eb2eu, 0x0000eb11u, 0x0000161au, 0x00001633u, 0x00001628u, 0x0004003du, 0x0000005du, 0x0000163eu, 0x000001aau, 0x000300f7u, 0x00001640u, 0x00000000u, 0x000400fau, 0x0000163eu, 0x0000163fu, 0x00001640u, 0x000200f8u, 0x0000163fu, 0x00050050u, 0x0000005fu, 0x00001643u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001644u, 0x00001643u, 0x0004003du, 0x0000001eu, 0x00001646u, 0x000001a4u, 0x0003003eu, 0x00001645u, 0x00001646u, 0x0004003du, 0x00000006u, 0x00001648u, 0x000001a5u, 0x0003003eu, 0x00001647u, 0x00001648u, 0x0003003eu, 0x00001649u, 0x00001644u, 0x00070039u, 0x00000009u, 0x0000164au, 0x00000134u, 0x00001645u, 0x00001647u, 0x00001649u, 0x0003003eu, 0x000013d3u, 0x0000164au, 0x000200f9u, 0x00001640u, 0x000200f8u, 0x00001640u, 0x000700f5u, 0x00000009u, 0x0000ebbbu, 0x0000eb11u, 0x00001629u, 0x0000164au, 0x0000163fu, 0x000200f9u, 0x0000161eu, 0x000200f8u, 0x0000161bu, 0x0004007cu, 0x000000a2u, 0x0000164du, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x0000164fu, 0x000001a4u, 0x0003003eu, 0x0000164eu, 0x0000164fu, 0x0004003du, 0x00000006u, 0x00001651u, 0x000001a5u, 0x0003003eu, 0x00001650u, 0x00001651u, 0x0003003eu, 0x00001652u, 0x0000164du, 0x00070039u, 0x00000009u, 0x00001653u, 0x00000165u, 0x0000164eu, 0x00001650u, 0x00001652u, 0x0003003eu, 0x00001390u, 0x00001653u, 0x0004003du, 0x0000005du, 0x00001654u, 0x000001a9u, 0x000300f7u, 0x00001656u, 0x00000000u, 0x000400fau, 0x00001654u, 0x00001655u, 0x00001656u, 0x000200f8u, 0x00001655u, 0x00050050u, 0x0000005fu, 0x00001659u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x0000165au, 0x00001659u, 0x0004003du, 0x0000001eu, 0x0000165cu, 0x000001a4u, 0x0003003eu, 0x0000165bu, 0x0000165cu, 0x0004003du, 0x00000006u, 0x0000165eu, 0x000001a5u, 0x0003003eu, 0x0000165du, 0x0000165eu, 0x0003003eu, 0x0000165fu, 0x0000165au, 0x00070039u, 0x00000009u, 0x00001660u, 0x00000165u, 0x0000165bu, 0x0000165du, 0x0000165fu, 0x0003003eu, 0x000013a8u, 0x00001660u, 0x00050050u, 0x0000005fu, 0x00001663u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001664u, 0x00001663u, 0x0004003du, 0x0000001eu, 0x00001666u, 0x000001a4u, 0x0003003eu, 0x00001665u, 0x00001666u, 0x0004003du, 0x00000006u, 0x00001668u, 0x000001a5u, 0x0003003eu, 0x00001667u, 0x00001668u, 0x0003003eu, 0x00001669u, 0x00001664u, 0x00070039u, 0x00000009u, 0x0000166au, 0x00000165u, 0x00001665u, 0x00001667u, 0x00001669u, 0x0003003eu, 0x000013bcu, 0x0000166au, 0x000200f9u, 0x00001656u, 0x000200f8u, 0x00001656u, 0x000700f5u, 0x00000009u, 0x0000eb8fu, 0x0000eb11u, 0x0000161bu, 0x0000166au, 0x00001655u, 0x000700f5u, 0x00000009u, 0x0000eb30u, 0x0000eb11u, 0x0000161bu, 0x00001660u, 0x00001655u, 0x0004003du, 0x0000005du, 0x0000166bu, 0x000001aau, 0x000300f7u, 0x0000166du, 0x00000000u, 0x000400fau, 0x0000166bu, 0x0000166cu, 0x0000166du, 0x000200f8u, 0x0000166cu, 0x00050050u, 0x0000005fu, 0x00001670u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001671u, 0x00001670u, 0x0004003du, 0x0000001eu, 0x00001673u, 0x000001a4u, 0x0003003eu, 0x00001672u, 0x00001673u, 0x0004003du, 0x00000006u, 0x00001675u, 0x000001a5u, 0x0003003eu, 0x00001674u, 0x00001675u, 0x0003003eu, 0x00001676u, 0x00001671u, 0x00070039u, 0x00000009u, 0x00001677u, 0x00000165u, 0x00001672u, 0x00001674u, 0x00001676u, 0x0003003eu, 0x000013d3u, 0x00001677u, 0x000200f9u, 0x0000166du, 0x000200f8u, 0x0000166du, 0x000700f5u, 0x00000009u, 0x0000ebbdu, 0x0000eb11u, 0x00001656u, 0x00001677u, 0x0000166cu, 0x000200f9u, 0x0000161eu, 0x000200f8u, 0x0000161cu, 0x0004007cu, 0x000000a2u, 0x0000167au, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x0000167cu, 0x000001a4u, 0x0003003eu, 0x0000167bu, 0x0000167cu, 0x0004003du, 0x00000006u, 0x0000167eu, 0x000001a5u, 0x0003003eu, 0x0000167du, 0x0000167eu, 0x0003003eu, 0x0000167fu, 0x0000167au, 0x00070039u, 0x00000009u, 0x00001680u, 0x00000175u, 0x0000167bu, 0x0000167du, 0x0000167fu, 0x0003003eu, 0x00001390u, 0x00001680u, 0x0004003du, 0x0000005du, 0x00001681u, 0x000001a9u, 0x000300f7u, 0x00001683u, 0x00000000u, 0x000400fau, 0x00001681u, 0x00001682u, 0x00001683u, 0x000200f8u, 0x00001682u, 0x00050050u, 0x0000005fu, 0x00001686u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001687u, 0x00001686u, 0x0004003du, 0x0000001eu, 0x00001689u, 0x000001a4u, 0x0003003eu, 0x00001688u, 0x00001689u, 0x0004003du, 0x00000006u, 0x0000168bu, 0x000001a5u, 0x0003003eu, 0x0000168au, 0x0000168bu, 0x0003003eu, 0x0000168cu, 0x00001687u, 0x00070039u, 0x00000009u, 0x0000168du, 0x00000175u, 0x00001688u, 0x0000168au, 0x0000168cu, 0x0003003eu, 0x000013a8u, 0x0000168du, 0x00050050u, 0x0000005fu, 0x00001690u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001691u, 0x00001690u, 0x0004003du, 0x0000001eu, 0x00001693u, 0x000001a4u, 0x0003003eu, 0x00001692u, 0x00001693u, 0x0004003du, 0x00000006u, 0x00001695u, 0x000001a5u, 0x0003003eu, 0x00001694u, 0x00001695u, 0x0003003eu, 0x00001696u, 0x00001691u, 0x00070039u, 0x00000009u, 0x00001697u, 0x00000175u, 0x00001692u, 0x00001694u, 0x00001696u, 0x0003003eu, 0x000013bcu, 0x00001697u, 0x000200f9u, 0x00001683u, 0x000200f8u, 0x00001683u, 0x000700f5u, 0x00000009u, 0x0000eb91u, 0x0000eb11u, 0x0000161cu, 0x00001697u, 0x00001682u, 0x000700f5u, 0x00000009u, 0x0000eb32u, 0x0000eb11u, 0x0000161cu, 0x0000168du, 0x00001682u, 0x0004003du, 0x0000005du, 0x00001698u, 0x000001aau, 0x000300f7u, 0x0000169au, 0x00000000u, 0x000400fau, 0x00001698u, 0x00001699u, 0x0000169au, 0x000200f8u, 0x00001699u, 0x00050050u, 0x0000005fu, 0x0000169du, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000169eu, 0x0000169du, 0x0004003du, 0x0000001eu, 0x000016a0u, 0x000001a4u, 0x0003003eu, 0x0000169fu, 0x000016a0u, 0x0004003du, 0x00000006u, 0x000016a2u, 0x000001a5u, 0x0003003eu, 0x000016a1u, 0x000016a2u, 0x0003003eu, 0x000016a3u, 0x0000169eu, 0x00070039u, 0x00000009u, 0x000016a4u, 0x00000175u, 0x0000169fu, 0x000016a1u, 0x000016a3u, 0x0003003eu, 0x000013d3u, 0x000016a4u, 0x000200f9u, 0x0000169au, 0x000200f8u, 0x0000169au, 0x000700f5u, 0x00000009u, 0x0000ebbfu, 0x0000eb11u, 0x00001683u, 0x000016a4u, 0x00001699u, 0x000200f9u, 0x0000161eu, 0x000200f8u, 0x0000161du, 0x0004007cu, 0x000000a2u, 0x000016a7u, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x000016a9u, 0x000001a4u, 0x0003003eu, 0x000016a8u, 0x000016a9u, 0x0004003du, 0x00000006u, 0x000016abu, 0x000001a5u, 0x0003003eu, 0x000016aau, 0x000016abu, 0x0003003eu, 0x000016acu, 0x000016a7u, 0x00070039u, 0x00000009u, 0x000016adu, 0x00000153u, 0x000016a8u, 0x000016aau, 0x000016acu, 0x0003003eu, 0x00001390u, 0x000016adu, 0x0004003du, 0x0000005du, 0x000016aeu, 0x000001a9u, 0x000300f7u, 0x000016b0u, 0x00000000u, 0x000400fau, 0x000016aeu, 0x000016afu, 0x000016b0u, 0x000200f8u, 0x000016afu, 0x00050050u, 0x0000005fu, 0x000016b3u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000016b4u, 0x000016b3u, 0x0004003du, 0x0000001eu, 0x000016b6u, 0x000001a4u, 0x0003003eu, 0x000016b5u, 0x000016b6u, 0x0004003du, 0x00000006u, 0x000016b8u, 0x000001a5u, 0x0003003eu, 0x000016b7u, 0x000016b8u, 0x0003003eu, 0x000016b9u, 0x000016b4u, 0x00070039u, 0x00000009u, 0x000016bau, 0x00000153u, 0x000016b5u, 0x000016b7u, 0x000016b9u, 0x0003003eu, 0x000013a8u, 0x000016bau, 0x00050050u, 0x0000005fu, 0x000016bdu, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000016beu, 0x000016bdu, 0x0004003du, 0x0000001eu, 0x000016c0u, 0x000001a4u, 0x0003003eu, 0x000016bfu, 0x000016c0u, 0x0004003du, 0x00000006u, 0x000016c2u, 0x000001a5u, 0x0003003eu, 0x000016c1u, 0x000016c2u, 0x0003003eu, 0x000016c3u, 0x000016beu, 0x00070039u, 0x00000009u, 0x000016c4u, 0x00000153u, 0x000016bfu, 0x000016c1u, 0x000016c3u, 0x0003003eu, 0x000013bcu, 0x000016c4u, 0x000200f9u, 0x000016b0u, 0x000200f8u, 0x000016b0u, 0x000700f5u, 0x00000009u, 0x0000eb93u, 0x0000eb11u, 0x0000161du, 0x000016c4u, 0x000016afu, 0x000700f5u, 0x00000009u, 0x0000eb34u, 0x0000eb11u, 0x0000161du, 0x000016bau, 0x000016afu, 0x0004003du, 0x0000005du, 0x000016c5u, 0x000001aau, 0x000300f7u, 0x000016c7u, 0x00000000u, 0x000400fau, 0x000016c5u, 0x000016c6u, 0x000016c7u, 0x000200f8u, 0x000016c6u, 0x00050050u, 0x0000005fu, 0x000016cau, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000016cbu, 0x000016cau, 0x0004003du, 0x0000001eu, 0x000016cdu, 0x000001a4u, 0x0003003eu, 0x000016ccu, 0x000016cdu, 0x0004003du, 0x00000006u, 0x000016cfu, 0x000001a5u, 0x0003003eu, 0x000016ceu, 0x000016cfu, 0x0003003eu, 0x000016d0u, 0x000016cbu, 0x00070039u, 0x00000009u, 0x000016d1u, 0x00000153u, 0x000016ccu, 0x000016ceu, 0x000016d0u, 0x0003003eu, 0x000013d3u, 0x000016d1u, 0x000200f9u, 0x000016c7u, 0x000200f8u, 0x000016c7u, 0x000700f5u, 0x00000009u, 0x0000ebc1u, 0x0000eb11u, 0x000016b0u, 0x000016d1u, 0x000016c6u, 0x000200f9u, 0x0000161eu, 0x000200f8u, 0x0000161eu, 0x000d00f5u, 0x00000009u, 0x0000ebbau, 0x0000eb11u, 0x00001479u, 0x0000ebbbu, 0x00001640u, 0x0000ebbdu, 0x0000166du, 0x0000ebbfu, 0x0000169au, 0x0000ebc1u, 0x000016c7u, 0x000d00f5u, 0x00000009u, 0x0000eb8bu, 0x0000eb11u, 0x00001479u, 0x0000eb8du, 0x00001640u, 0x0000eb8fu, 0x0000166du, 0x0000eb91u, 0x0000169au, 0x0000eb93u, 0x000016c7u, 0x000d00f5u, 0x00000009u, 0x0000eb5bu, 0x0000eb11u, 0x00001479u, 0x00001626u, 0x00001640u, 0x00001653u, 0x0000166du, 0x00001680u, 0x0000169au, 0x000016adu, 0x000016c7u, 0x000d00f5u, 0x00000009u, 0x0000eb2cu, 0x0000eb11u, 0x00001479u, 0x0000eb2eu, 0x00001640u, 0x0000eb30u, 0x0000166du, 0x0000eb32u, 0x0000169au, 0x0000eb34u, 0x000016c7u, 0x000200f9u, 0x0000147bu, 0x000200f8u, 0x0000147au, 0x00050041u, 0x0000003eu, 0x000016d5u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x000016d6u, 0x000016d5u, 0x000300f7u, 0x000016dau, 0x00000000u, 0x000700fbu, 0x000016d6u, 0x000016d9u, 0x00000000u, 0x000016d7u, 0x00000001u, 0x000016d8u, 0x000200f8u, 0x000016d9u, 0x0004007cu, 0x000000a2u, 0x00001736u, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x00001738u, 0x000001a4u, 0x0003003eu, 0x00001737u, 0x00001738u, 0x0004003du, 0x00000006u, 0x0000173au, 0x000001a5u, 0x0003003eu, 0x00001739u, 0x0000173au, 0x0003003eu, 0x0000173bu, 0x00001736u, 0x00070039u, 0x00000009u, 0x0000173cu, 0x00000153u, 0x00001737u, 0x00001739u, 0x0000173bu, 0x0003003eu, 0x00001390u, 0x0000173cu, 0x0004003du, 0x0000005du, 0x0000173du, 0x000001a9u, 0x000300f7u, 0x0000173fu, 0x00000000u, 0x000400fau, 0x0000173du, 0x0000173eu, 0x0000173fu, 0x000200f8u, 0x0000173eu, 0x00050050u, 0x0000005fu, 0x00001742u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001743u, 0x00001742u, 0x0004003du, 0x0000001eu, 0x00001745u, 0x000001a4u, 0x0003003eu, 0x00001744u, 0x00001745u, 0x0004003du, 0x00000006u, 0x00001747u, 0x000001a5u, 0x0003003eu, 0x00001746u, 0x00001747u, 0x0003003eu, 0x00001748u, 0x00001743u, 0x00070039u, 0x00000009u, 0x00001749u, 0x00000153u, 0x00001744u, 0x00001746u, 0x00001748u, 0x0003003eu, 0x000013a8u, 0x00001749u, 0x00050050u, 0x0000005fu, 0x0000174cu, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000174du, 0x0000174cu, 0x0004003du, 0x0000001eu, 0x0000174fu, 0x000001a4u, 0x0003003eu, 0x0000174eu, 0x0000174fu, 0x0004003du, 0x00000006u, 0x00001751u, 0x000001a5u, 0x0003003eu, 0x00001750u, 0x00001751u, 0x0003003eu, 0x00001752u, 0x0000174du, 0x00070039u, 0x00000009u, 0x00001753u, 0x00000153u, 0x0000174eu, 0x00001750u, 0x00001752u, 0x0003003eu, 0x000013bcu, 0x00001753u, 0x000200f9u, 0x0000173fu, 0x000200f8u, 0x0000173fu, 0x000700f5u, 0x00000009u, 0x0000eb96u, 0x0000eb11u, 0x000016d9u, 0x00001753u, 0x0000173eu, 0x000700f5u, 0x00000009u, 0x0000eb37u, 0x0000eb11u, 0x000016d9u, 0x00001749u, 0x0000173eu, 0x0004003du, 0x0000005du, 0x00001754u, 0x000001aau, 0x000300f7u, 0x00001756u, 0x00000000u, 0x000400fau, 0x00001754u, 0x00001755u, 0x00001756u, 0x000200f8u, 0x00001755u, 0x00050050u, 0x0000005fu, 0x00001759u, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000175au, 0x00001759u, 0x0004003du, 0x0000001eu, 0x0000175cu, 0x000001a4u, 0x0003003eu, 0x0000175bu, 0x0000175cu, 0x0004003du, 0x00000006u, 0x0000175eu, 0x000001a5u, 0x0003003eu, 0x0000175du, 0x0000175eu, 0x0003003eu, 0x0000175fu, 0x0000175au, 0x00070039u, 0x00000009u, 0x00001760u, 0x00000153u, 0x0000175bu, 0x0000175du, 0x0000175fu, 0x0003003eu, 0x000013d3u, 0x00001760u, 0x000200f9u, 0x00001756u, 0x000200f8u, 0x00001756u, 0x000700f5u, 0x00000009u, 0x0000ebc4u, 0x0000eb11u, 0x0000173fu, 0x00001760u, 0x00001755u, 0x000200f9u, 0x000016dau, 0x000200f8u, 0x000016d7u, 0x0004007cu, 0x000000a2u, 0x000016dcu, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x000016deu, 0x000001a4u, 0x0003003eu, 0x000016ddu, 0x000016deu, 0x0004003du, 0x00000006u, 0x000016e0u, 0x000001a5u, 0x0003003eu, 0x000016dfu, 0x000016e0u, 0x0003003eu, 0x000016e1u, 0x000016dcu, 0x00070039u, 0x00000009u, 0x000016e2u, 0x0000012fu, 0x000016ddu, 0x000016dfu, 0x000016e1u, 0x0003003eu, 0x00001390u, 0x000016e2u, 0x0004003du, 0x0000005du, 0x000016e3u, 0x000001a9u, 0x000300f7u, 0x000016e5u, 0x00000000u, 0x000400fau, 0x000016e3u, 0x000016e4u, 0x000016e5u, 0x000200f8u, 0x000016e4u, 0x00050050u, 0x0000005fu, 0x000016e8u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x000016e9u, 0x000016e8u, 0x0004003du, 0x0000001eu, 0x000016ebu, 0x000001a4u, 0x0003003eu, 0x000016eau, 0x000016ebu, 0x0004003du, 0x00000006u, 0x000016edu, 0x000001a5u, 0x0003003eu, 0x000016ecu, 0x000016edu, 0x0003003eu, 0x000016eeu, 0x000016e9u, 0x00070039u, 0x00000009u, 0x000016efu, 0x0000012fu, 0x000016eau, 0x000016ecu, 0x000016eeu, 0x0003003eu, 0x000013a8u, 0x000016efu, 0x00050050u, 0x0000005fu, 0x000016f2u, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x000016f3u, 0x000016f2u, 0x0004003du, 0x0000001eu, 0x000016f5u, 0x000001a4u, 0x0003003eu, 0x000016f4u, 0x000016f5u, 0x0004003du, 0x00000006u, 0x000016f7u, 0x000001a5u, 0x0003003eu, 0x000016f6u, 0x000016f7u, 0x0003003eu, 0x000016f8u, 0x000016f3u, 0x00070039u, 0x00000009u, 0x000016f9u, 0x0000012fu, 0x000016f4u, 0x000016f6u, 0x000016f8u, 0x0003003eu, 0x000013bcu, 0x000016f9u, 0x000200f9u, 0x000016e5u, 0x000200f8u, 0x000016e5u, 0x000700f5u, 0x00000009u, 0x0000eb98u, 0x0000eb11u, 0x000016d7u, 0x000016f9u, 0x000016e4u, 0x000700f5u, 0x00000009u, 0x0000eb39u, 0x0000eb11u, 0x000016d7u, 0x000016efu, 0x000016e4u, 0x0004003du, 0x0000005du, 0x000016fau, 0x000001aau, 0x000300f7u, 0x000016fcu, 0x00000000u, 0x000400fau, 0x000016fau, 0x000016fbu, 0x000016fcu, 0x000200f8u, 0x000016fbu, 0x00050050u, 0x0000005fu, 0x000016ffu, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001700u, 0x000016ffu, 0x0004003du, 0x0000001eu, 0x00001702u, 0x000001a4u, 0x0003003eu, 0x00001701u, 0x00001702u, 0x0004003du, 0x00000006u, 0x00001704u, 0x000001a5u, 0x0003003eu, 0x00001703u, 0x00001704u, 0x0003003eu, 0x00001705u, 0x00001700u, 0x00070039u, 0x00000009u, 0x00001706u, 0x0000012fu, 0x00001701u, 0x00001703u, 0x00001705u, 0x0003003eu, 0x000013d3u, 0x00001706u, 0x000200f9u, 0x000016fcu, 0x000200f8u, 0x000016fcu, 0x000700f5u, 0x00000009u, 0x0000ebc6u, 0x0000eb11u, 0x000016e5u, 0x00001706u, 0x000016fbu, 0x000200f9u, 0x000016dau, 0x000200f8u, 0x000016d8u, 0x0004007cu, 0x000000a2u, 0x00001709u, 0x0000ea81u, 0x0004003du, 0x0000001eu, 0x0000170bu, 0x000001a4u, 0x0003003eu, 0x0000170au, 0x0000170bu, 0x0004003du, 0x00000006u, 0x0000170du, 0x000001a5u, 0x0003003eu, 0x0000170cu, 0x0000170du, 0x0003003eu, 0x0000170eu, 0x00001709u, 0x00070039u, 0x00000009u, 0x0000170fu, 0x00000160u, 0x0000170au, 0x0000170cu, 0x0000170eu, 0x0003003eu, 0x00001390u, 0x0000170fu, 0x0004003du, 0x0000005du, 0x00001710u, 0x000001a9u, 0x000300f7u, 0x00001712u, 0x00000000u, 0x000400fau, 0x00001710u, 0x00001711u, 0x00001712u, 0x000200f8u, 0x00001711u, 0x00050050u, 0x0000005fu, 0x00001715u, 0x0000134au, 0x0000135au, 0x0004007cu, 0x000000a2u, 0x00001716u, 0x00001715u, 0x0004003du, 0x0000001eu, 0x00001718u, 0x000001a4u, 0x0003003eu, 0x00001717u, 0x00001718u, 0x0004003du, 0x00000006u, 0x0000171au, 0x000001a5u, 0x0003003eu, 0x00001719u, 0x0000171au, 0x0003003eu, 0x0000171bu, 0x00001716u, 0x00070039u, 0x00000009u, 0x0000171cu, 0x00000160u, 0x00001717u, 0x00001719u, 0x0000171bu, 0x0003003eu, 0x000013a8u, 0x0000171cu, 0x00050050u, 0x0000005fu, 0x0000171fu, 0x0000133bu, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x00001720u, 0x0000171fu, 0x0004003du, 0x0000001eu, 0x00001722u, 0x000001a4u, 0x0003003eu, 0x00001721u, 0x00001722u, 0x0004003du, 0x00000006u, 0x00001724u, 0x000001a5u, 0x0003003eu, 0x00001723u, 0x00001724u, 0x0003003eu, 0x00001725u, 0x00001720u, 0x00070039u, 0x00000009u, 0x00001726u, 0x00000160u, 0x00001721u, 0x00001723u, 0x00001725u, 0x0003003eu, 0x000013bcu, 0x00001726u, 0x000200f9u, 0x00001712u, 0x000200f8u, 0x00001712u, 0x000700f5u, 0x00000009u, 0x0000eb9au, 0x0000eb11u, 0x000016d8u, 0x00001726u, 0x00001711u, 0x000700f5u, 0x00000009u, 0x0000eb3bu, 0x0000eb11u, 0x000016d8u, 0x0000171cu, 0x00001711u, 0x0004003du, 0x0000005du, 0x00001727u, 0x000001aau, 0x000300f7u, 0x00001729u, 0x00000000u, 0x000400fau, 0x00001727u, 0x00001728u, 0x00001729u, 0x000200f8u, 0x00001728u, 0x00050050u, 0x0000005fu, 0x0000172cu, 0x0000134au, 0x0000135cu, 0x0004007cu, 0x000000a2u, 0x0000172du, 0x0000172cu, 0x0004003du, 0x0000001eu, 0x0000172fu, 0x000001a4u, 0x0003003eu, 0x0000172eu, 0x0000172fu, 0x0004003du, 0x00000006u, 0x00001731u, 0x000001a5u, 0x0003003eu, 0x00001730u, 0x00001731u, 0x0003003eu, 0x00001732u, 0x0000172du, 0x00070039u, 0x00000009u, 0x00001733u, 0x00000160u, 0x0000172eu, 0x00001730u, 0x00001732u, 0x0003003eu, 0x000013d3u, 0x00001733u, 0x000200f9u, 0x00001729u, 0x000200f8u, 0x00001729u, 0x000700f5u, 0x00000009u, 0x0000ebc8u, 0x0000eb11u, 0x00001712u, 0x00001733u, 0x00001728u, 0x000200f9u, 0x000016dau, 0x000200f8u, 0x000016dau, 0x000900f5u, 0x00000009u, 0x0000ebc3u, 0x0000ebc4u, 0x00001756u, 0x0000ebc6u, 0x000016fcu, 0x0000ebc8u, 0x00001729u, 0x000900f5u, 0x00000009u, 0x0000eb94u, 0x0000eb96u, 0x00001756u, 0x0000eb98u, 0x000016fcu, 0x0000eb9au, 0x00001729u, 0x000900f5u, 0x00000009u, 0x0000eb64u, 0x0000173cu, 0x00001756u, 0x000016e2u, 0x000016fcu, 0x0000170fu, 0x00001729u, 0x000900f5u, 0x00000009u, 0x0000eb35u, 0x0000eb37u, 0x00001756u, 0x0000eb39u, 0x000016fcu, 0x0000eb3bu, 0x00001729u, 0x000200f9u, 0x0000147bu, 0x000200f8u, 0x0000147bu, 0x000f00f5u, 0x00000009u, 0x0000eba8u, 0x0000eb11u, 0x00001473u, 0x0000eba9u, 0x00001482u, 0x0000ebb2u, 0x00001553u, 0x0000ebb3u, 0x0000157eu, 0x0000ebbau, 0x0000161eu, 0x0000ebc3u, 0x000016dau, 0x000f00f5u, 0x00000009u, 0x0000eb79u, 0x0000eb11u, 0x00001473u, 0x0000eb7au, 0x00001482u, 0x0000eb83u, 0x00001553u, 0x0000eb84u, 0x0000157eu, 0x0000eb8bu, 0x0000161eu, 0x0000eb94u, 0x000016dau, 0x000f00f5u, 0x00000009u, 0x0000eb49u, 0x0000eb11u, 0x00001473u, 0x0000eb4au, 0x00001482u, 0x00001550u, 0x00001553u, 0x0000eb54u, 0x0000157eu, 0x0000eb5bu, 0x0000161eu, 0x0000eb64u, 0x000016dau, 0x000f00f5u, 0x00000009u, 0x0000eb1au, 0x0000eb11u, 0x00001473u, 0x0000eb1bu, 0x00001482u, 0x0000eb24u, 0x00001553u, 0x0000eb25u, 0x0000157eu, 0x0000eb2cu, 0x0000161eu, 0x0000eb35u, 0x000016dau, 0x000200f9u, 0x0000137eu, 0x000200f8u, 0x0000137eu, 0x000700f5u, 0x00000009u, 0x0000eb9bu, 0x0000eb9cu, 0x00001382u, 0x0000eba8u, 0x0000147bu, 0x000700f5u, 0x00000009u, 0x0000eb6cu, 0x0000eb6du, 0x00001382u, 0x0000eb79u, 0x0000147bu, 0x000700f5u, 0x00000009u, 0x0000eb3du, 0x0000eb3eu, 0x00001382u, 0x0000eb49u, 0x0000147bu, 0x000700f5u, 0x00000009u, 0x0000eb0cu, 0x0000eb0du, 0x00001382u, 0x0000eb1au, 0x0000147bu, 0x0004003du, 0x0000005du, 0x00001765u, 0x000001abu, 0x000300f7u, 0x00001767u, 0x00000000u, 0x000400fau, 0x00001765u, 0x00001766u, 0x0000179du, 0x000200f8u, 0x00001766u, 0x0004003du, 0x00000009u, 0x00001769u, 0x000001acu, 0x00050051u, 0x00000008u, 0x0000176au, 0x00001769u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000176bu, 0x00001769u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000176cu, 0x00001769u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000176du, 0x00001769u, 0x00000003u, 0x000600cau, 0x00000009u, 0x0000176fu, 0x00001769u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00001768u, 0x0000176fu, 0x000300f7u, 0x00001775u, 0x00000000u, 0x000400fau, 0x00001370u, 0x00001774u, 0x00001778u, 0x000200f8u, 0x00001774u, 0x0004003du, 0x00000009u, 0x00001776u, 0x00001768u, 0x0007004fu, 0x0000005fu, 0x00001777u, 0x00001776u, 0x00001776u, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00001773u, 0x00001777u, 0x000200f9u, 0x00001775u, 0x000200f8u, 0x00001778u, 0x0004003du, 0x00000009u, 0x00001779u, 0x00001768u, 0x0007004fu, 0x0000005fu, 0x0000177au, 0x00001779u, 0x00001779u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001773u, 0x0000177au, 0x000200f9u, 0x00001775u, 0x000200f8u, 0x00001775u, 0x000700f5u, 0x0000005fu, 0x0000ebf5u, 0x00001777u, 0x00001774u, 0x0000177au, 0x00001778u, 0x0003003eu, 0x00001770u, 0x0000ebf5u, 0x00050041u, 0x0000003eu, 0x0000177du, 0x00001770u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000177eu, 0x0000177du, 0x00050082u, 0x00000009u, 0x00001781u, 0x0000eb0cu, 0x0000eb3du, 0x00070050u, 0x00000009u, 0x00001782u, 0x0000177eu, 0x0000177eu, 0x0000177eu, 0x0000177eu, 0x00050084u, 0x00000009u, 0x00001783u, 0x00001782u, 0x00001781u, 0x00050041u, 0x0000003eu, 0x00001784u, 0x00001770u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001785u, 0x00001784u, 0x00050082u, 0x00000009u, 0x00001788u, 0x0000eb6cu, 0x0000eb3du, 0x00070050u, 0x00000009u, 0x00001789u, 0x00001785u, 0x00001785u, 0x00001785u, 0x00001785u, 0x00050084u, 0x00000009u, 0x0000178au, 0x00001789u, 0x00001788u, 0x00050080u, 0x00000009u, 0x0000178bu, 0x00001783u, 0x0000178au, 0x00050080u, 0x00000009u, 0x0000178du, 0x0000178bu, 0x0000eeb6u, 0x0003003eu, 0x0000177cu, 0x0000178du, 0x000500c3u, 0x00000009u, 0x00001790u, 0x0000178du, 0x0000eec1u, 0x0003003eu, 0x0000177cu, 0x00001790u, 0x00050041u, 0x0000003eu, 0x00001791u, 0x00001768u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001792u, 0x00001791u, 0x00070050u, 0x00000009u, 0x00001794u, 0x00001792u, 0x00001792u, 0x00001792u, 0x00001792u, 0x00050080u, 0x00000009u, 0x00001795u, 0x00001790u, 0x00001794u, 0x0003003eu, 0x0000177cu, 0x00001795u, 0x00050051u, 0x00000008u, 0x00001798u, 0x00001795u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001799u, 0x00001795u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000179au, 0x00001795u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000179bu, 0x00001795u, 0x00000003u, 0x0003003eu, 0x00001796u, 0x00001795u, 0x000200f9u, 0x00001767u, 0x000200f8u, 0x0000179du, 0x000300f7u, 0x000017a0u, 0x00000000u, 0x000400fau, 0x0000136du, 0x0000179fu, 0x000017d8u, 0x000200f8u, 0x0000179fu, 0x0004003du, 0x0000005du, 0x000017a1u, 0x000001a9u, 0x000300f7u, 0x000017a3u, 0x00000000u, 0x000400fau, 0x000017a1u, 0x000017a2u, 0x000017d6u, 0x000200f8u, 0x000017a2u, 0x000500c7u, 0x00000008u, 0x000017a6u, 0x0000133bu, 0x00000212u, 0x000500c4u, 0x00000008u, 0x000017a7u, 0x000017a6u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000017a9u, 0x0000132du, 0x000500c3u, 0x00000008u, 0x000017aau, 0x000017a9u, 0x00000212u, 0x000500c5u, 0x00000008u, 0x000017abu, 0x000017a7u, 0x000017aau, 0x0003003eu, 0x000017a4u, 0x000017abu, 0x0004003du, 0x00000008u, 0x000017afu, 0x0000132fu, 0x00050050u, 0x0000005fu, 0x000017b0u, 0x000017abu, 0x000017afu, 0x0007004fu, 0x0000005fu, 0x000017b3u, 0x0000eb3du, 0x0000eb3du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017b1u, 0x000017b3u, 0x0007004fu, 0x0000005fu, 0x000017b6u, 0x0000eb0cu, 0x0000eb0cu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017b4u, 0x000017b6u, 0x0007004fu, 0x0000005fu, 0x000017b9u, 0x0000eb6cu, 0x0000eb6cu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017b7u, 0x000017b9u, 0x0007004fu, 0x0000005fu, 0x000017bcu, 0x0000eb9bu, 0x0000eb9bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017bau, 0x000017bcu, 0x0003003eu, 0x000017bdu, 0x000017b0u, 0x00090039u, 0x0000005fu, 0x000017beu, 0x000001a1u, 0x000017b1u, 0x000017b4u, 0x000017b7u, 0x000017bau, 0x000017bdu, 0x0003003eu, 0x000017acu, 0x000017beu, 0x0007004fu, 0x0000005fu, 0x000017c2u, 0x0000eb3du, 0x0000eb3du, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017c0u, 0x000017c2u, 0x0007004fu, 0x0000005fu, 0x000017c5u, 0x0000eb0cu, 0x0000eb0cu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017c3u, 0x000017c5u, 0x0007004fu, 0x0000005fu, 0x000017c8u, 0x0000eb6cu, 0x0000eb6cu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017c6u, 0x000017c8u, 0x0007004fu, 0x0000005fu, 0x000017cbu, 0x0000eb9bu, 0x0000eb9bu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017c9u, 0x000017cbu, 0x0004003du, 0x0000005fu, 0x000017cdu, 0x00001327u, 0x0003003eu, 0x000017ccu, 0x000017cdu, 0x00090039u, 0x0000005fu, 0x000017ceu, 0x000001a1u, 0x000017c0u, 0x000017c3u, 0x000017c6u, 0x000017c9u, 0x000017ccu, 0x0003003eu, 0x000017bfu, 0x000017ceu, 0x00050051u, 0x00000008u, 0x000017d1u, 0x000017beu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000017d2u, 0x000017beu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000017d3u, 0x000017ceu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000017d4u, 0x000017ceu, 0x00000001u, 0x00070050u, 0x00000009u, 0x000017d5u, 0x000017d1u, 0x000017d2u, 0x000017d3u, 0x000017d4u, 0x0003003eu, 0x00001796u, 0x000017d5u, 0x000200f9u, 0x000017a3u, 0x000200f8u, 0x000017d6u, 0x0003003eu, 0x00001796u, 0x0000eb3du, 0x000200f9u, 0x000017a3u, 0x000200f8u, 0x000017a3u, 0x000700f5u, 0x00000009u, 0x0000ebfbu, 0x000017d5u, 0x000017a2u, 0x0000eb3du, 0x000017d6u, 0x000200f9u, 0x000017a0u, 0x000200f8u, 0x000017d8u, 0x0004003du, 0x0000005du, 0x000017d9u, 0x000001aau, 0x000300f7u, 0x000017dbu, 0x00000000u, 0x000400fau, 0x000017d9u, 0x000017dau, 0x000017e7u, 0x000200f8u, 0x000017dau, 0x00050080u, 0x00000009u, 0x000017deu, 0x0000eb3du, 0x0000eb6cu, 0x00050080u, 0x00000009u, 0x000017e0u, 0x000017deu, 0x0000eb0cu, 0x00050080u, 0x00000009u, 0x000017e2u, 0x000017e0u, 0x0000eb9bu, 0x00050080u, 0x00000009u, 0x000017e4u, 0x000017e2u, 0x0000eec0u, 0x000500c3u, 0x00000009u, 0x000017e6u, 0x000017e4u, 0x0000eec0u, 0x0003003eu, 0x00001796u, 0x000017e6u, 0x000200f9u, 0x000017dbu, 0x000200f8u, 0x000017e7u, 0x000300f7u, 0x000017edu, 0x00000000u, 0x000400fau, 0x00001370u, 0x000017ecu, 0x000017f2u, 0x000200f8u, 0x000017ecu, 0x0004003du, 0x0000005fu, 0x000017eeu, 0x00001327u, 0x0007004fu, 0x0000005fu, 0x000017efu, 0x000017eeu, 0x000017eeu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000017f1u, 0x0000eec2u, 0x000017efu, 0x0003003eu, 0x000017ebu, 0x000017f1u, 0x000200f9u, 0x000017edu, 0x000200f8u, 0x000017f2u, 0x0004003du, 0x0000005fu, 0x000017f3u, 0x00001327u, 0x0003003eu, 0x000017ebu, 0x000017f3u, 0x000200f9u, 0x000017edu, 0x000200f8u, 0x000017edu, 0x000700f5u, 0x0000005fu, 0x0000eb0au, 0x000017f1u, 0x000017ecu, 0x000017f3u, 0x000017f2u, 0x00050051u, 0x00000008u, 0x000017f5u, 0x0000eb0au, 0x00000000u, 0x00050051u, 0x00000008u, 0x000017f6u, 0x0000eb0au, 0x00000001u, 0x0003003eu, 0x000017e8u, 0x0000eb0au, 0x00050082u, 0x00000009u, 0x000017fau, 0x0000eb0cu, 0x0000eb3du, 0x00050041u, 0x0000003eu, 0x000017fbu, 0x000017e8u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000017fcu, 0x000017fbu, 0x00070050u, 0x00000009u, 0x000017fdu, 0x000017fcu, 0x000017fcu, 0x000017fcu, 0x000017fcu, 0x00050084u, 0x00000009u, 0x000017feu, 0x000017fau, 0x000017fdu, 0x0003003eu, 0x00001796u, 0x000017feu, 0x00050082u, 0x00000009u, 0x00001801u, 0x0000eb6cu, 0x0000eb3du, 0x00050041u, 0x0000003eu, 0x00001802u, 0x000017e8u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001803u, 0x00001802u, 0x00070050u, 0x00000009u, 0x00001804u, 0x00001803u, 0x00001803u, 0x00001803u, 0x00001803u, 0x00050084u, 0x00000009u, 0x00001805u, 0x00001801u, 0x00001804u, 0x00050080u, 0x00000009u, 0x00001807u, 0x000017feu, 0x00001805u, 0x0003003eu, 0x00001796u, 0x00001807u, 0x00050080u, 0x00000009u, 0x0000180au, 0x00001807u, 0x0000eec3u, 0x0003003eu, 0x00001796u, 0x0000180au, 0x000500c3u, 0x00000009u, 0x0000180du, 0x0000180au, 0x0000eec4u, 0x0003003eu, 0x00001796u, 0x0000180du, 0x00050080u, 0x00000009u, 0x00001810u, 0x0000180du, 0x0000eb3du, 0x0003003eu, 0x00001796u, 0x00001810u, 0x000200f9u, 0x000017dbu, 0x000200f8u, 0x000017dbu, 0x000700f5u, 0x00000009u, 0x0000ebfcu, 0x000017e6u, 0x000017dau, 0x00001810u, 0x000017edu, 0x000200f9u, 0x000017a0u, 0x000200f8u, 0x000017a0u, 0x000700f5u, 0x00000009u, 0x0000ebfau, 0x0000ebfbu, 0x000017a3u, 0x0000ebfcu, 0x000017dbu, 0x000200f9u, 0x00001767u, 0x000200f8u, 0x00001767u, 0x000700f5u, 0x00000009u, 0x0000ebf9u, 0x00001795u, 0x00001775u, 0x0000ebfau, 0x000017a0u, 0x000200feu, 0x0000ebf9u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000001bcu, 0x00000000u, 0x000001afu, 0x00030037u, 0x00000007u, 0x000001b0u, 0x00030037u, 0x00000007u, 0x000001b1u, 0x00030037u, 0x0000003eu, 0x000001b2u, 0x00030037u, 0x00000007u, 0x000001b3u, 0x00030037u, 0x0000003eu, 0x000001b4u, 0x00030037u, 0x00000060u, 0x000001b5u, 0x00030037u, 0x00000060u, 0x000001b6u, 0x00030037u, 0x00000060u, 0x000001b7u, 0x00030037u, 0x0000005eu, 0x000001b8u, 0x00030037u, 0x0000005eu, 0x000001b9u, 0x00030037u, 0x0000005eu, 0x000001bau, 0x00030037u, 0x0000005eu, 0x000001bbu, 0x000200f8u, 0x000001bdu, 0x0004003bu, 0x0000005eu, 0x00001814u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001815u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001816u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000181bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001824u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000182du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001831u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001856u, 0x00000007u, 0x0003003eu, 0x00001814u, 0x00000543u, 0x0003003eu, 0x00001815u, 0x00000543u, 0x0003003eu, 0x00001816u, 0x00000374u, 0x0004003du, 0x0000005du, 0x00001817u, 0x000001b8u, 0x000300f7u, 0x00001819u, 0x00000000u, 0x000400fau, 0x00001817u, 0x00001818u, 0x0000181au, 0x000200f8u, 0x00001818u, 0x0003003eu, 0x00001815u, 0x0000055eu, 0x0003003eu, 0x000001b2u, 0x0000038bu, 0x000200f9u, 0x00001819u, 0x000200f8u, 0x0000181au, 0x0004003du, 0x0000005fu, 0x0000181cu, 0x000001b6u, 0x0004003du, 0x0000005fu, 0x0000181du, 0x000001b5u, 0x00050082u, 0x0000005fu, 0x0000181eu, 0x0000181cu, 0x0000181du, 0x0003003eu, 0x0000181bu, 0x0000181eu, 0x000500c3u, 0x0000005fu, 0x00001821u, 0x0000181eu, 0x0000eebau, 0x000500c6u, 0x0000005fu, 0x00001823u, 0x0000181eu, 0x00001821u, 0x0003003eu, 0x0000181bu, 0x00001823u, 0x0004003du, 0x0000005fu, 0x00001825u, 0x000001b7u, 0x0004003du, 0x0000005fu, 0x00001826u, 0x000001b5u, 0x00050082u, 0x0000005fu, 0x00001827u, 0x00001825u, 0x00001826u, 0x0003003eu, 0x00001824u, 0x00001827u, 0x000500c3u, 0x0000005fu, 0x0000182au, 0x00001827u, 0x0000eebau, 0x000500c6u, 0x0000005fu, 0x0000182cu, 0x00001827u, 0x0000182au, 0x0003003eu, 0x00001824u, 0x0000182cu, 0x0007000cu, 0x0000005fu, 0x00001830u, 0x00000001u, 0x0000002au, 0x00001823u, 0x0000182cu, 0x0003003eu, 0x0000182du, 0x00001830u, 0x00050041u, 0x0000003eu, 0x00001832u, 0x0000182du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001833u, 0x00001832u, 0x00050041u, 0x0000003eu, 0x00001834u, 0x0000182du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001835u, 0x00001834u, 0x0007000cu, 0x00000008u, 0x00001836u, 0x00000001u, 0x0000002au, 0x00001833u, 0x00001835u, 0x0003003eu, 0x00001831u, 0x00001836u, 0x000500afu, 0x0000005du, 0x00001838u, 0x00001836u, 0x00000b1eu, 0x000300f7u, 0x0000183au, 0x00000000u, 0x000400fau, 0x00001838u, 0x00001839u, 0x0000183cu, 0x000200f8u, 0x00001839u, 0x0003003eu, 0x00001815u, 0x0000055eu, 0x0003003eu, 0x000001b2u, 0x0000038bu, 0x0004003du, 0x00000006u, 0x0000183bu, 0x000001b3u, 0x0003003eu, 0x00001816u, 0x0000183bu, 0x000200f9u, 0x0000183au, 0x000200f8u, 0x0000183cu, 0x000500b1u, 0x0000005du, 0x0000183eu, 0x00001836u, 0x0000037du, 0x000300f7u, 0x00001840u, 0x00000000u, 0x000400fau, 0x0000183eu, 0x0000183fu, 0x00001855u, 0x000200f8u, 0x0000183fu, 0x0004003du, 0x00000006u, 0x00001841u, 0x000001b3u, 0x000500aau, 0x0000005du, 0x00001842u, 0x00001841u, 0x00000374u, 0x0003003eu, 0x00001815u, 0x00001842u, 0x0003003eu, 0x00001814u, 0x0000055eu, 0x0004003du, 0x0000005du, 0x00001843u, 0x000001bau, 0x000400a8u, 0x0000005du, 0x00001844u, 0x00001843u, 0x0004003du, 0x0000005du, 0x00001845u, 0x000001bbu, 0x000400a8u, 0x0000005du, 0x00001846u, 0x00001845u, 0x000500a7u, 0x0000005du, 0x00001847u, 0x00001844u, 0x00001846u, 0x000300f7u, 0x00001849u, 0x00000000u, 0x000400fau, 0x00001847u, 0x00001848u, 0x0000184cu, 0x000200f8u, 0x00001848u, 0x000600a9u, 0x00000008u, 0x0000184bu, 0x00001842u, 0x0000038bu, 0x00000203u, 0x0003003eu, 0x000001b2u, 0x0000184bu, 0x000200f9u, 0x00001849u, 0x000200f8u, 0x0000184cu, 0x0004003du, 0x00000008u, 0x0000184du, 0x000001b4u, 0x0007000cu, 0x00000008u, 0x0000184fu, 0x00000001u, 0x0000002au, 0x0000184du, 0x00001836u, 0x000500c4u, 0x00000008u, 0x00001850u, 0x0000184fu, 0x00000218u, 0x0004003du, 0x0000005du, 0x00001851u, 0x000001bau, 0x000600a9u, 0x00000008u, 0x00001853u, 0x00001851u, 0x00001852u, 0x00000203u, 0x00050080u, 0x00000008u, 0x00001854u, 0x00001850u, 0x00001853u, 0x0003003eu, 0x000001b2u, 0x00001854u, 0x000200f9u, 0x00001849u, 0x000200f8u, 0x00001849u, 0x000200f9u, 0x00001840u, 0x000200f8u, 0x00001855u, 0x000500c3u, 0x00000008u, 0x00001858u, 0x00001836u, 0x0000021eu, 0x0006000cu, 0x00000008u, 0x00001859u, 0x00000001u, 0x0000004au, 0x00001858u, 0x0007000cu, 0x00000008u, 0x0000185au, 0x00000001u, 0x0000002au, 0x00001859u, 0x00000203u, 0x0003003eu, 0x00001856u, 0x0000185au, 0x0004007cu, 0x00000006u, 0x0000185cu, 0x0000185au, 0x0004003du, 0x00000006u, 0x0000185du, 0x000001b3u, 0x000500aeu, 0x0000005du, 0x0000185eu, 0x0000185cu, 0x0000185du, 0x0003003eu, 0x00001815u, 0x0000185eu, 0x0004003du, 0x0000005du, 0x00001860u, 0x000001bau, 0x000400a8u, 0x0000005du, 0x00001861u, 0x00001860u, 0x000500a7u, 0x0000005du, 0x00001862u, 0x0000185eu, 0x00001861u, 0x0004003du, 0x0000005du, 0x00001863u, 0x000001bbu, 0x000400a8u, 0x0000005du, 0x00001864u, 0x00001863u, 0x000500a7u, 0x0000005du, 0x00001865u, 0x00001862u, 0x00001864u, 0x000300f7u, 0x00001867u, 0x00000000u, 0x000400fau, 0x00001865u, 0x00001866u, 0x00001868u, 0x000200f8u, 0x00001866u, 0x0003003eu, 0x000001b2u, 0x0000038bu, 0x000200f9u, 0x00001867u, 0x000200f8u, 0x00001868u, 0x000500c4u, 0x00000008u, 0x0000186au, 0x00001836u, 0x00000218u, 0x000500c3u, 0x00000008u, 0x0000186cu, 0x0000186au, 0x0000185au, 0x000500c7u, 0x00000008u, 0x0000186du, 0x0000186cu, 0x0000038bu, 0x0003003eu, 0x000001b2u, 0x0000186du, 0x0003003eu, 0x00001816u, 0x0000185cu, 0x000200f9u, 0x00001867u, 0x000200f8u, 0x00001867u, 0x000600a9u, 0x00000006u, 0x0000eeedu, 0x00001865u, 0x00000374u, 0x0000185cu, 0x000200f9u, 0x00001840u, 0x000200f8u, 0x00001840u, 0x000700f5u, 0x00000006u, 0x0000ec05u, 0x00000374u, 0x00001849u, 0x0000eeedu, 0x00001867u, 0x000700f5u, 0x0000005du, 0x0000ebffu, 0x00001842u, 0x00001849u, 0x0000185eu, 0x00001867u, 0x000600a9u, 0x0000005du, 0x0000eeeeu, 0x0000183eu, 0x0000055eu, 0x00000543u, 0x000200f9u, 0x0000183au, 0x000200f8u, 0x0000183au, 0x000700f5u, 0x0000005du, 0x0000ec0bu, 0x00000543u, 0x00001839u, 0x0000eeeeu, 0x00001840u, 0x000700f5u, 0x00000006u, 0x0000ec04u, 0x0000183bu, 0x00001839u, 0x0000ec05u, 0x00001840u, 0x000700f5u, 0x0000005du, 0x0000ebfeu, 0x0000055eu, 0x00001839u, 0x0000ebffu, 0x00001840u, 0x000200f9u, 0x00001819u, 0x000200f8u, 0x00001819u, 0x000700f5u, 0x0000005du, 0x0000ec0au, 0x00000543u, 0x00001818u, 0x0000ec0bu, 0x0000183au, 0x000700f5u, 0x00000006u, 0x0000ec03u, 0x00000374u, 0x00001818u, 0x0000ec04u, 0x0000183au, 0x000700f5u, 0x0000005du, 0x0000ebfdu, 0x0000055eu, 0x00001818u, 0x0000ebfeu, 0x0000183au, 0x0004003du, 0x0000005du, 0x00001870u, 0x000001b9u, 0x000300f7u, 0x00001872u, 0x00000000u, 0x000400fau, 0x00001870u, 0x00001871u, 0x00001872u, 0x000200f8u, 0x00001871u, 0x000300f7u, 0x00001875u, 0x00000000u, 0x000400fau, 0x0000ebfdu, 0x00001874u, 0x00001875u, 0x000200f8u, 0x00001874u, 0x0004003du, 0x00000006u, 0x00001876u, 0x000001b3u, 0x0003003eu, 0x00001816u, 0x00001876u, 0x000200f9u, 0x00001875u, 0x000200f8u, 0x00001875u, 0x000700f5u, 0x00000006u, 0x0000ec02u, 0x0000ec03u, 0x00001871u, 0x00001876u, 0x00001874u, 0x0004003du, 0x0000005du, 0x00001877u, 0x000001bbu, 0x000400a8u, 0x0000005du, 0x00001878u, 0x00001877u, 0x000300f7u, 0x0000187au, 0x00000000u, 0x000400fau, 0x00001878u, 0x00001879u, 0x0000188fu, 0x000200f8u, 0x00001879u, 0x0004003du, 0x00000006u, 0x0000187bu, 0x000001b0u, 0x00050080u, 0x00000006u, 0x0000187du, 0x0000187bu, 0x0000ec02u, 0x000500c7u, 0x00000006u, 0x0000187eu, 0x0000187du, 0x0000073fu, 0x0003003eu, 0x000001b0u, 0x0000187eu, 0x000400a8u, 0x0000005du, 0x00001880u, 0x0000ebfdu, 0x000300f7u, 0x00001882u, 0x00000000u, 0x000400fau, 0x00001880u, 0x00001881u, 0x00001882u, 0x000200f8u, 0x00001881u, 0x0004003du, 0x0000005du, 0x00001883u, 0x000001bau, 0x000400a8u, 0x0000005du, 0x00001884u, 0x00001883u, 0x000500a7u, 0x0000005du, 0x00001886u, 0x00001884u, 0x0000ec0au, 0x000200f9u, 0x00001882u, 0x000200f8u, 0x00001882u, 0x000700f5u, 0x0000005du, 0x00001887u, 0x0000ebfdu, 0x00001879u, 0x00001886u, 0x00001881u, 0x000300f7u, 0x00001889u, 0x00000000u, 0x000400fau, 0x00001887u, 0x00001888u, 0x0000188bu, 0x000200f8u, 0x00001888u, 0x0004003du, 0x00000006u, 0x0000188au, 0x000001b0u, 0x0003003eu, 0x000001b1u, 0x0000188au, 0x000200f9u, 0x00001889u, 0x000200f8u, 0x0000188bu, 0x0004003du, 0x00000006u, 0x0000188cu, 0x000001b0u, 0x00050080u, 0x00000006u, 0x0000188du, 0x0000188cu, 0x00000485u, 0x000500c7u, 0x00000006u, 0x0000188eu, 0x0000188du, 0x0000073fu, 0x0003003eu, 0x000001b1u, 0x0000188eu, 0x000200f9u, 0x00001889u, 0x000200f8u, 0x00001889u, 0x000200f9u, 0x0000187au, 0x000200f8u, 0x0000188fu, 0x0004003du, 0x00000006u, 0x00001890u, 0x000001b0u, 0x00050080u, 0x00000006u, 0x00001892u, 0x00001890u, 0x0000ec02u, 0x000500a6u, 0x0000005du, 0x00001895u, 0x0000ebfdu, 0x0000ec0au, 0x000600a9u, 0x00000008u, 0x00001896u, 0x00001895u, 0x00000212u, 0x00000215u, 0x0004007cu, 0x00000006u, 0x00001897u, 0x00001896u, 0x00050080u, 0x00000006u, 0x00001898u, 0x00001892u, 0x00001897u, 0x000500c7u, 0x00000006u, 0x00001899u, 0x00001898u, 0x0000073fu, 0x0003003eu, 0x000001b1u, 0x00001899u, 0x0004003du, 0x00000006u, 0x0000189au, 0x000001b0u, 0x00050080u, 0x00000006u, 0x0000189cu, 0x0000189au, 0x0000ec02u, 0x000600a9u, 0x00000008u, 0x0000189eu, 0x0000ec0au, 0x00000203u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x0000189fu, 0x0000189eu, 0x00050080u, 0x00000006u, 0x000018a0u, 0x0000189cu, 0x0000189fu, 0x000500c7u, 0x00000006u, 0x000018a1u, 0x000018a0u, 0x0000073fu, 0x0003003eu, 0x000001b0u, 0x000018a1u, 0x000200f9u, 0x0000187au, 0x000200f8u, 0x0000187au, 0x000200f9u, 0x00001872u, 0x000200f8u, 0x00001872u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001c1u, 0x00000000u, 0x000001beu, 0x00030037u, 0x0000005cu, 0x000001bfu, 0x00030037u, 0x0000005cu, 0x000001c0u, 0x000200f8u, 0x000001c2u, 0x0004003bu, 0x0000005cu, 0x000018a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018aau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018b5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018c6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018d1u, 0x00000007u, 0x0004003du, 0x00000009u, 0x000018a3u, 0x000001bfu, 0x00050051u, 0x00000008u, 0x000018a4u, 0x000018a3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000018a5u, 0x000018a3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000018a6u, 0x000018a3u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000018a7u, 0x000018a3u, 0x00000003u, 0x000600cau, 0x00000009u, 0x000018a9u, 0x000018a3u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000018a2u, 0x000018a9u, 0x00050041u, 0x0000003eu, 0x000018abu, 0x000018a2u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000018acu, 0x000018abu, 0x00050041u, 0x0000003eu, 0x000018adu, 0x000001c0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000018aeu, 0x000018adu, 0x00050041u, 0x0000003eu, 0x000018afu, 0x000018a2u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000018b0u, 0x000018afu, 0x00050084u, 0x00000008u, 0x000018b1u, 0x000018aeu, 0x000018b0u, 0x00050080u, 0x00000008u, 0x000018b2u, 0x000018b1u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000018b3u, 0x000018b2u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000018b4u, 0x000018acu, 0x000018b3u, 0x0003003eu, 0x000018aau, 0x000018b4u, 0x0004003du, 0x00000008u, 0x000018b7u, 0x000018abu, 0x00050041u, 0x0000003eu, 0x000018b8u, 0x000001c0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000018b9u, 0x000018b8u, 0x00050041u, 0x0000003eu, 0x000018bau, 0x000018a2u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000018bbu, 0x000018bau, 0x00050084u, 0x00000008u, 0x000018bcu, 0x000018b9u, 0x000018bbu, 0x00050041u, 0x0000003eu, 0x000018bdu, 0x000001c0u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000018beu, 0x000018bdu, 0x0004003du, 0x00000008u, 0x000018c0u, 0x000018afu, 0x00050084u, 0x00000008u, 0x000018c1u, 0x000018beu, 0x000018c0u, 0x00050080u, 0x00000008u, 0x000018c2u, 0x000018bcu, 0x000018c1u, 0x00050080u, 0x00000008u, 0x000018c3u, 0x000018c2u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000018c4u, 0x000018c3u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000018c5u, 0x000018b7u, 0x000018c4u, 0x0003003eu, 0x000018b5u, 0x000018c5u, 0x0004003du, 0x00000008u, 0x000018c8u, 0x000018abu, 0x00050041u, 0x0000003eu, 0x000018c9u, 0x000001c0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000018cau, 0x000018c9u, 0x0004003du, 0x00000008u, 0x000018ccu, 0x000018bau, 0x00050084u, 0x00000008u, 0x000018cdu, 0x000018cau, 0x000018ccu, 0x00050080u, 0x00000008u, 0x000018ceu, 0x000018cdu, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000018cfu, 0x000018ceu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000018d0u, 0x000018c8u, 0x000018cfu, 0x0003003eu, 0x000018c6u, 0x000018d0u, 0x0004003du, 0x00000008u, 0x000018d3u, 0x000018abu, 0x0003003eu, 0x000018d1u, 0x000018d3u, 0x00070050u, 0x00000009u, 0x000018d8u, 0x000018b4u, 0x000018c5u, 0x000018d0u, 0x000018d3u, 0x000200feu, 0x000018d8u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001c4u, 0x00000000u, 0x000000d1u, 0x00030037u, 0x0000005cu, 0x000001c3u, 0x000200f8u, 0x000001c5u, 0x0004003du, 0x00000009u, 0x000018dbu, 0x000001c3u, 0x00050082u, 0x00000009u, 0x000018ddu, 0x000018dbu, 0x0000eeb6u, 0x000600cau, 0x00000009u, 0x000018deu, 0x000018ddu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000018e0u, 0x000018deu, 0x0000eeb6u, 0x000200feu, 0x000018e0u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001cbu, 0x00000000u, 0x000001c6u, 0x00030037u, 0x0000005cu, 0x000001c7u, 0x00030037u, 0x0000005cu, 0x000001c8u, 0x00030037u, 0x0000005cu, 0x000001c9u, 0x00030037u, 0x0000005cu, 0x000001cau, 0x000200f8u, 0x000001ccu, 0x0004003bu, 0x0000005cu, 0x000018e5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000018e8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000018ebu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000018eeu, 0x00000007u, 0x0004003du, 0x00000009u, 0x000018e3u, 0x000001c9u, 0x000600cau, 0x00000009u, 0x000018e4u, 0x000018e3u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000001c9u, 0x000018e4u, 0x0004003du, 0x00000009u, 0x000018e6u, 0x000001c7u, 0x0003003eu, 0x000018e5u, 0x000018e6u, 0x00050039u, 0x00000009u, 0x000018e7u, 0x000001c4u, 0x000018e5u, 0x0003003eu, 0x000001c7u, 0x000018e7u, 0x0004003du, 0x00000009u, 0x000018e9u, 0x000001c8u, 0x0003003eu, 0x000018e8u, 0x000018e9u, 0x00050039u, 0x00000009u, 0x000018eau, 0x000001c4u, 0x000018e8u, 0x0003003eu, 0x000001c8u, 0x000018eau, 0x0004003du, 0x00000009u, 0x000018ecu, 0x000001cau, 0x0003003eu, 0x000018ebu, 0x000018ecu, 0x00050039u, 0x00000009u, 0x000018edu, 0x000001c4u, 0x000018ebu, 0x0003003eu, 0x000001cau, 0x000018edu, 0x0004003du, 0x00000009u, 0x000018efu, 0x000001c7u, 0x0004003du, 0x00000009u, 0x000018f0u, 0x000001c8u, 0x00050082u, 0x00000009u, 0x000018f1u, 0x000018efu, 0x000018f0u, 0x0004003du, 0x00000009u, 0x000018f2u, 0x000001c9u, 0x00050084u, 0x00000009u, 0x000018f3u, 0x000018f1u, 0x000018f2u, 0x0003003eu, 0x000018eeu, 0x000018f3u, 0x00050080u, 0x00000009u, 0x000018f6u, 0x000018f3u, 0x0000eeb6u, 0x0003003eu, 0x000018eeu, 0x000018f6u, 0x000500c3u, 0x00000009u, 0x000018f9u, 0x000018f6u, 0x0000eec1u, 0x00050051u, 0x00000008u, 0x000018fau, 0x000018f9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000018fbu, 0x000018f9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000018fcu, 0x000018f9u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000018fdu, 0x000018f9u, 0x00000003u, 0x0004003du, 0x00000009u, 0x000018ffu, 0x000001cau, 0x00050051u, 0x00000008u, 0x00001900u, 0x000018ffu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001901u, 0x000018ffu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001902u, 0x000018ffu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001903u, 0x000018ffu, 0x00000003u, 0x00050080u, 0x00000009u, 0x00001905u, 0x000018f9u, 0x000018ffu, 0x000200feu, 0x00001905u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001d3u, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001d0u, 0x00030037u, 0x0000003eu, 0x000001d1u, 0x00030037u, 0x0000003eu, 0x000001d2u, 0x000200f8u, 0x000001d4u, 0x0004003bu, 0x0000003du, 0x00001911u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001936u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001908u, 0x000001d1u, 0x000300f7u, 0x00001910u, 0x00000000u, 0x000f00fbu, 0x00001908u, 0x0000190fu, 0x00000000u, 0x00001909u, 0x00000001u, 0x0000190au, 0x00000002u, 0x0000190bu, 0x00000004u, 0x0000190cu, 0x00000007u, 0x0000190du, 0x00000006u, 0x0000190eu, 0x000200f8u, 0x0000190fu, 0x00050041u, 0x0000005cu, 0x00001929u, 0x000001d0u, 0x00000203u, 0x0004003du, 0x00000009u, 0x0000192au, 0x00001929u, 0x0008004fu, 0x0000003cu, 0x0000192bu, 0x0000192au, 0x0000192au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001911u, 0x0000192bu, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x00001909u, 0x00050041u, 0x0000005cu, 0x00001912u, 0x000001d0u, 0x0000021eu, 0x0004003du, 0x00000009u, 0x00001913u, 0x00001912u, 0x0008004fu, 0x0000003cu, 0x00001914u, 0x00001913u, 0x00001913u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001911u, 0x00001914u, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x0000190au, 0x00050041u, 0x0000005cu, 0x00001916u, 0x000001d0u, 0x00000221u, 0x0004003du, 0x00000009u, 0x00001917u, 0x00001916u, 0x0008004fu, 0x0000003cu, 0x00001918u, 0x00001917u, 0x00001917u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001911u, 0x00001918u, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x0000190bu, 0x00050041u, 0x0000005cu, 0x0000191au, 0x000001d0u, 0x00000224u, 0x0004003du, 0x00000009u, 0x0000191bu, 0x0000191au, 0x0008004fu, 0x0000003cu, 0x0000191cu, 0x0000191bu, 0x0000191bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001911u, 0x0000191cu, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x0000190cu, 0x00050041u, 0x0000005cu, 0x0000191eu, 0x000001d0u, 0x0000021bu, 0x0004003du, 0x00000009u, 0x0000191fu, 0x0000191eu, 0x0008004fu, 0x0000003cu, 0x00001920u, 0x0000191fu, 0x0000191fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001911u, 0x00001920u, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x0000190du, 0x00050041u, 0x0000003eu, 0x00001922u, 0x000001d0u, 0x00000264u, 0x0004003du, 0x00000008u, 0x00001923u, 0x00001922u, 0x00060050u, 0x0000003cu, 0x00001924u, 0x00001923u, 0x00001923u, 0x00001923u, 0x0003003eu, 0x00001911u, 0x00001924u, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x0000190eu, 0x0003003eu, 0x00001911u, 0x00001927u, 0x000200f9u, 0x00001910u, 0x000200f8u, 0x00001910u, 0x001100f5u, 0x0000003cu, 0x0000ec10u, 0x0000192bu, 0x0000190fu, 0x00001914u, 0x00001909u, 0x00001918u, 0x0000190au, 0x0000191cu, 0x0000190bu, 0x00001920u, 0x0000190cu, 0x00001924u, 0x0000190du, 0x00001927u, 0x0000190eu, 0x0004003du, 0x00000008u, 0x0000192eu, 0x000001d2u, 0x000300f7u, 0x00001935u, 0x00000000u, 0x000d00fbu, 0x0000192eu, 0x00001934u, 0x00000000u, 0x0000192fu, 0x00000001u, 0x00001930u, 0x00000002u, 0x00001931u, 0x00000004u, 0x00001932u, 0x00000006u, 0x00001933u, 0x000200f8u, 0x00001934u, 0x00060041u, 0x0000003eu, 0x00001944u, 0x000001d0u, 0x00000203u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001945u, 0x00001944u, 0x0003003eu, 0x00001936u, 0x00001945u, 0x000200f9u, 0x00001935u, 0x000200f8u, 0x0000192fu, 0x00060041u, 0x0000003eu, 0x00001937u, 0x000001d0u, 0x0000021eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001938u, 0x00001937u, 0x0003003eu, 0x00001936u, 0x00001938u, 0x000200f9u, 0x00001935u, 0x000200f8u, 0x00001930u, 0x00060041u, 0x0000003eu, 0x0000193au, 0x000001d0u, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000193bu, 0x0000193au, 0x0003003eu, 0x00001936u, 0x0000193bu, 0x000200f9u, 0x00001935u, 0x000200f8u, 0x00001931u, 0x00060041u, 0x0000003eu, 0x0000193du, 0x000001d0u, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000193eu, 0x0000193du, 0x0003003eu, 0x00001936u, 0x0000193eu, 0x000200f9u, 0x00001935u, 0x000200f8u, 0x00001932u, 0x00060041u, 0x0000003eu, 0x00001940u, 0x000001d0u, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001941u, 0x00001940u, 0x0003003eu, 0x00001936u, 0x00001941u, 0x000200f9u, 0x00001935u, 0x000200f8u, 0x00001933u, 0x0003003eu, 0x00001936u, 0x00001926u, 0x000200f9u, 0x00001935u, 0x000200f8u, 0x00001935u, 0x000f00f5u, 0x00000008u, 0x0000ec11u, 0x00001945u, 0x00001934u, 0x00001938u, 0x0000192fu, 0x0000193bu, 0x00001930u, 0x0000193eu, 0x00001931u, 0x00001941u, 0x00001932u, 0x00001926u, 0x00001933u, 0x00050051u, 0x00000008u, 0x0000194au, 0x0000ec10u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000194bu, 0x0000ec10u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000194cu, 0x0000ec10u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000194du, 0x0000194au, 0x0000194bu, 0x0000194cu, 0x0000ec11u, 0x000200feu, 0x0000194du, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001d8u, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001d5u, 0x00030037u, 0x0000003eu, 0x000001d6u, 0x00030037u, 0x0000003eu, 0x000001d7u, 0x000200f8u, 0x000001d9u, 0x0004003bu, 0x0000003du, 0x00001958u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000197eu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001950u, 0x000001d6u, 0x000300f7u, 0x00001957u, 0x00000000u, 0x000d00fbu, 0x00001950u, 0x00001956u, 0x00000000u, 0x00001951u, 0x00000001u, 0x00001952u, 0x00000002u, 0x00001953u, 0x00000004u, 0x00001954u, 0x00000007u, 0x00001955u, 0x000200f8u, 0x00001956u, 0x00050041u, 0x0000005cu, 0x00001971u, 0x000001d5u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00001972u, 0x00001971u, 0x0008004fu, 0x0000003cu, 0x00001973u, 0x00001972u, 0x00001972u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001958u, 0x00001973u, 0x000200f9u, 0x00001957u, 0x000200f8u, 0x00001951u, 0x00050041u, 0x0000005cu, 0x00001959u, 0x000001d5u, 0x0000021eu, 0x0004003du, 0x00000009u, 0x0000195au, 0x00001959u, 0x0008004fu, 0x0000003cu, 0x0000195bu, 0x0000195au, 0x0000195au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001958u, 0x0000195bu, 0x000200f9u, 0x00001957u, 0x000200f8u, 0x00001952u, 0x00050041u, 0x0000005cu, 0x0000195du, 0x000001d5u, 0x00000221u, 0x0004003du, 0x00000009u, 0x0000195eu, 0x0000195du, 0x0008004fu, 0x0000003cu, 0x0000195fu, 0x0000195eu, 0x0000195eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001958u, 0x0000195fu, 0x000200f9u, 0x00001957u, 0x000200f8u, 0x00001953u, 0x00050041u, 0x0000005cu, 0x00001961u, 0x000001d5u, 0x00000224u, 0x0004003du, 0x00000009u, 0x00001962u, 0x00001961u, 0x0008004fu, 0x0000003cu, 0x00001963u, 0x00001962u, 0x00001962u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001958u, 0x00001963u, 0x000200f9u, 0x00001957u, 0x000200f8u, 0x00001954u, 0x00050041u, 0x0000005cu, 0x00001965u, 0x000001d5u, 0x0000021bu, 0x0004003du, 0x00000009u, 0x00001966u, 0x00001965u, 0x0008004fu, 0x0000003cu, 0x00001967u, 0x00001966u, 0x00001966u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001958u, 0x00001967u, 0x000200f9u, 0x00001957u, 0x000200f8u, 0x00001955u, 0x00060041u, 0x0000003eu, 0x00001969u, 0x000001d5u, 0x00000212u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000196au, 0x00001969u, 0x000500c4u, 0x00000008u, 0x0000196bu, 0x0000196au, 0x0000025eu, 0x00060041u, 0x0000003eu, 0x0000196cu, 0x000001d5u, 0x00000212u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000196du, 0x0000196cu, 0x000500c5u, 0x00000008u, 0x0000196eu, 0x0000196bu, 0x0000196du, 0x00060050u, 0x0000003cu, 0x0000196fu, 0x0000196eu, 0x0000196eu, 0x0000196eu, 0x0003003eu, 0x00001958u, 0x0000196fu, 0x000200f9u, 0x00001957u, 0x000200f8u, 0x00001957u, 0x000f00f5u, 0x0000003cu, 0x0000ec13u, 0x00001973u, 0x00001956u, 0x0000195bu, 0x00001951u, 0x0000195fu, 0x00001952u, 0x00001963u, 0x00001953u, 0x00001967u, 0x00001954u, 0x0000196fu, 0x00001955u, 0x0004003du, 0x00000008u, 0x00001976u, 0x000001d7u, 0x000300f7u, 0x0000197du, 0x00000000u, 0x000d00fbu, 0x00001976u, 0x0000197cu, 0x00000000u, 0x00001977u, 0x00000001u, 0x00001978u, 0x00000002u, 0x00001979u, 0x00000004u, 0x0000197au, 0x00000006u, 0x0000197bu, 0x000200f8u, 0x0000197cu, 0x00060041u, 0x0000003eu, 0x0000198cu, 0x000001d5u, 0x00000212u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000198du, 0x0000198cu, 0x0003003eu, 0x0000197eu, 0x0000198du, 0x000200f9u, 0x0000197du, 0x000200f8u, 0x00001977u, 0x00060041u, 0x0000003eu, 0x0000197fu, 0x000001d5u, 0x0000021eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001980u, 0x0000197fu, 0x0003003eu, 0x0000197eu, 0x00001980u, 0x000200f9u, 0x0000197du, 0x000200f8u, 0x00001978u, 0x00060041u, 0x0000003eu, 0x00001982u, 0x000001d5u, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001983u, 0x00001982u, 0x0003003eu, 0x0000197eu, 0x00001983u, 0x000200f9u, 0x0000197du, 0x000200f8u, 0x00001979u, 0x00060041u, 0x0000003eu, 0x00001985u, 0x000001d5u, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001986u, 0x00001985u, 0x0003003eu, 0x0000197eu, 0x00001986u, 0x000200f9u, 0x0000197du, 0x000200f8u, 0x0000197au, 0x00060041u, 0x0000003eu, 0x00001988u, 0x000001d5u, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001989u, 0x00001988u, 0x0003003eu, 0x0000197eu, 0x00001989u, 0x000200f9u, 0x0000197du, 0x000200f8u, 0x0000197bu, 0x0003003eu, 0x0000197eu, 0x00001926u, 0x000200f9u, 0x0000197du, 0x000200f8u, 0x0000197du, 0x000f00f5u, 0x00000008u, 0x0000ec14u, 0x0000198du, 0x0000197cu, 0x00001980u, 0x00001977u, 0x00001983u, 0x00001978u, 0x00001986u, 0x00001979u, 0x00001989u, 0x0000197au, 0x00001926u, 0x0000197bu, 0x00050051u, 0x00000008u, 0x00001992u, 0x0000ec13u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001993u, 0x0000ec13u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001994u, 0x0000ec13u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001995u, 0x00001992u, 0x00001993u, 0x00001994u, 0x0000ec14u, 0x000200feu, 0x00001995u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001ddu, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001dau, 0x00030037u, 0x0000003eu, 0x000001dbu, 0x00030037u, 0x0000003eu, 0x000001dcu, 0x000200f8u, 0x000001deu, 0x0004003bu, 0x0000003du, 0x000019a5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000019deu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001998u, 0x000001dbu, 0x000300f7u, 0x000019a4u, 0x00000000u, 0x001700fbu, 0x00001998u, 0x000019a3u, 0x00000000u, 0x00001999u, 0x00000007u, 0x0000199au, 0x00000001u, 0x0000199bu, 0x00000002u, 0x0000199cu, 0x00000004u, 0x0000199du, 0x00000008u, 0x0000199eu, 0x00000009u, 0x0000199fu, 0x0000000bu, 0x000019a0u, 0x0000000du, 0x000019a1u, 0x0000000fu, 0x000019a2u, 0x000200f8u, 0x000019a3u, 0x00050041u, 0x0000005cu, 0x000019d2u, 0x000001dau, 0x00000215u, 0x0004003du, 0x00000009u, 0x000019d3u, 0x000019d2u, 0x0008004fu, 0x0000003cu, 0x000019d4u, 0x000019d3u, 0x000019d3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019a5u, 0x000019d4u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x00001999u, 0x00050041u, 0x0000005cu, 0x000019a6u, 0x000001dau, 0x0000021eu, 0x0004003du, 0x00000009u, 0x000019a7u, 0x000019a6u, 0x0008004fu, 0x0000003cu, 0x000019a8u, 0x000019a7u, 0x000019a7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019a5u, 0x000019a8u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x0000199au, 0x00050041u, 0x0000005cu, 0x000019aau, 0x000001dau, 0x0000021eu, 0x0004003du, 0x00000009u, 0x000019abu, 0x000019aau, 0x0008004fu, 0x0000003cu, 0x000019acu, 0x000019abu, 0x000019abu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019a5u, 0x000019acu, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x0000199bu, 0x00050041u, 0x0000005cu, 0x000019aeu, 0x000001dau, 0x00000221u, 0x0004003du, 0x00000009u, 0x000019afu, 0x000019aeu, 0x0008004fu, 0x0000003cu, 0x000019b0u, 0x000019afu, 0x000019afu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019a5u, 0x000019b0u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x0000199cu, 0x00050041u, 0x0000005cu, 0x000019b2u, 0x000001dau, 0x00000224u, 0x0004003du, 0x00000009u, 0x000019b3u, 0x000019b2u, 0x0008004fu, 0x0000003cu, 0x000019b4u, 0x000019b3u, 0x000019b3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019a5u, 0x000019b4u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x0000199du, 0x00050041u, 0x0000005cu, 0x000019b6u, 0x000001dau, 0x0000021bu, 0x0004003du, 0x00000009u, 0x000019b7u, 0x000019b6u, 0x0008004fu, 0x0000003cu, 0x000019b8u, 0x000019b7u, 0x000019b7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019a5u, 0x000019b8u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x0000199eu, 0x00050041u, 0x0000005cu, 0x000019bau, 0x000001dau, 0x00000221u, 0x0004003du, 0x00000009u, 0x000019bbu, 0x000019bau, 0x0008004fu, 0x0000003cu, 0x000019bcu, 0x000019bbu, 0x000019bbu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019a5u, 0x000019bcu, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x0000199fu, 0x00050041u, 0x0000005cu, 0x000019beu, 0x000001dau, 0x00000224u, 0x0004003du, 0x00000009u, 0x000019bfu, 0x000019beu, 0x0008004fu, 0x0000003cu, 0x000019c0u, 0x000019bfu, 0x000019bfu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019a5u, 0x000019c0u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x000019a0u, 0x00050041u, 0x0000005cu, 0x000019c2u, 0x000001dau, 0x0000021bu, 0x0004003du, 0x00000009u, 0x000019c3u, 0x000019c2u, 0x0008004fu, 0x0000003cu, 0x000019c4u, 0x000019c3u, 0x000019c3u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019a5u, 0x000019c4u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x000019a1u, 0x00050041u, 0x0000003eu, 0x000019c6u, 0x000001dau, 0x0000025eu, 0x0004003du, 0x00000008u, 0x000019c7u, 0x000019c6u, 0x00060050u, 0x0000003cu, 0x000019c8u, 0x000019c7u, 0x000019c7u, 0x000019c7u, 0x0003003eu, 0x000019a5u, 0x000019c8u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x000019a2u, 0x00060041u, 0x0000003eu, 0x000019cau, 0x000001dau, 0x00000215u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000019cbu, 0x000019cau, 0x000500c4u, 0x00000008u, 0x000019ccu, 0x000019cbu, 0x0000025eu, 0x00060041u, 0x0000003eu, 0x000019cdu, 0x000001dau, 0x00000215u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000019ceu, 0x000019cdu, 0x000500c5u, 0x00000008u, 0x000019cfu, 0x000019ccu, 0x000019ceu, 0x00060050u, 0x0000003cu, 0x000019d0u, 0x000019cfu, 0x000019cfu, 0x000019cfu, 0x0003003eu, 0x000019a5u, 0x000019d0u, 0x000200f9u, 0x000019a4u, 0x000200f8u, 0x000019a4u, 0x001900f5u, 0x0000003cu, 0x0000ec16u, 0x000019d4u, 0x000019a3u, 0x000019a8u, 0x00001999u, 0x000019acu, 0x0000199au, 0x000019b0u, 0x0000199bu, 0x000019b4u, 0x0000199cu, 0x000019b8u, 0x0000199du, 0x000019bcu, 0x0000199eu, 0x000019c0u, 0x0000199fu, 0x000019c4u, 0x000019a0u, 0x000019c8u, 0x000019a1u, 0x000019d0u, 0x000019a2u, 0x0004003du, 0x00000008u, 0x000019d7u, 0x000001dcu, 0x000300f7u, 0x000019ddu, 0x00000000u, 0x000b00fbu, 0x000019d7u, 0x000019dcu, 0x00000000u, 0x000019d8u, 0x00000001u, 0x000019d9u, 0x00000002u, 0x000019dau, 0x00000004u, 0x000019dbu, 0x000200f8u, 0x000019dcu, 0x00060041u, 0x0000003eu, 0x000019ebu, 0x000001dau, 0x00000215u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019ecu, 0x000019ebu, 0x0003003eu, 0x000019deu, 0x000019ecu, 0x000200f9u, 0x000019ddu, 0x000200f8u, 0x000019d8u, 0x00050041u, 0x0000003eu, 0x000019dfu, 0x000001dau, 0x0000025eu, 0x0004003du, 0x00000008u, 0x000019e0u, 0x000019dfu, 0x0003003eu, 0x000019deu, 0x000019e0u, 0x000200f9u, 0x000019ddu, 0x000200f8u, 0x000019d9u, 0x00060041u, 0x0000003eu, 0x000019e2u, 0x000001dau, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019e3u, 0x000019e2u, 0x0003003eu, 0x000019deu, 0x000019e3u, 0x000200f9u, 0x000019ddu, 0x000200f8u, 0x000019dau, 0x00060041u, 0x0000003eu, 0x000019e5u, 0x000001dau, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019e6u, 0x000019e5u, 0x0003003eu, 0x000019deu, 0x000019e6u, 0x000200f9u, 0x000019ddu, 0x000200f8u, 0x000019dbu, 0x00060041u, 0x0000003eu, 0x000019e8u, 0x000001dau, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019e9u, 0x000019e8u, 0x0003003eu, 0x000019deu, 0x000019e9u, 0x000200f9u, 0x000019ddu, 0x000200f8u, 0x000019ddu, 0x000d00f5u, 0x00000008u, 0x0000ec17u, 0x000019ecu, 0x000019dcu, 0x000019e0u, 0x000019d8u, 0x000019e3u, 0x000019d9u, 0x000019e6u, 0x000019dau, 0x000019e9u, 0x000019dbu, 0x00050051u, 0x00000008u, 0x000019f1u, 0x0000ec16u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000019f2u, 0x0000ec16u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000019f3u, 0x0000ec16u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000019f4u, 0x000019f1u, 0x000019f2u, 0x000019f3u, 0x0000ec17u, 0x000200feu, 0x000019f4u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001e2u, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001dfu, 0x00030037u, 0x0000003eu, 0x000001e0u, 0x00030037u, 0x0000003eu, 0x000001e1u, 0x000200f8u, 0x000001e3u, 0x0004003bu, 0x0000003du, 0x000019ffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a1eu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000019f7u, 0x000001e0u, 0x000300f7u, 0x000019feu, 0x00000000u, 0x000d00fbu, 0x000019f7u, 0x000019fdu, 0x00000000u, 0x000019f8u, 0x00000001u, 0x000019f9u, 0x00000002u, 0x000019fau, 0x00000004u, 0x000019fbu, 0x00000006u, 0x000019fcu, 0x000200f8u, 0x000019fdu, 0x00050041u, 0x0000005cu, 0x00001a11u, 0x000001dfu, 0x00000218u, 0x0004003du, 0x00000009u, 0x00001a12u, 0x00001a11u, 0x0008004fu, 0x0000003cu, 0x00001a13u, 0x00001a12u, 0x00001a12u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019ffu, 0x00001a13u, 0x000200f9u, 0x000019feu, 0x000200f8u, 0x000019f8u, 0x00050041u, 0x0000005cu, 0x00001a00u, 0x000001dfu, 0x0000021eu, 0x0004003du, 0x00000009u, 0x00001a01u, 0x00001a00u, 0x0008004fu, 0x0000003cu, 0x00001a02u, 0x00001a01u, 0x00001a01u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019ffu, 0x00001a02u, 0x000200f9u, 0x000019feu, 0x000200f8u, 0x000019f9u, 0x00050041u, 0x0000005cu, 0x00001a04u, 0x000001dfu, 0x00000221u, 0x0004003du, 0x00000009u, 0x00001a05u, 0x00001a04u, 0x0008004fu, 0x0000003cu, 0x00001a06u, 0x00001a05u, 0x00001a05u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019ffu, 0x00001a06u, 0x000200f9u, 0x000019feu, 0x000200f8u, 0x000019fau, 0x00050041u, 0x0000005cu, 0x00001a08u, 0x000001dfu, 0x00000224u, 0x0004003du, 0x00000009u, 0x00001a09u, 0x00001a08u, 0x0008004fu, 0x0000003cu, 0x00001a0au, 0x00001a09u, 0x00001a09u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019ffu, 0x00001a0au, 0x000200f9u, 0x000019feu, 0x000200f8u, 0x000019fbu, 0x00050041u, 0x0000005cu, 0x00001a0cu, 0x000001dfu, 0x0000021bu, 0x0004003du, 0x00000009u, 0x00001a0du, 0x00001a0cu, 0x0008004fu, 0x0000003cu, 0x00001a0eu, 0x00001a0du, 0x00001a0du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019ffu, 0x00001a0eu, 0x000200f9u, 0x000019feu, 0x000200f8u, 0x000019fcu, 0x0003003eu, 0x000019ffu, 0x00001927u, 0x000200f9u, 0x000019feu, 0x000200f8u, 0x000019feu, 0x000f00f5u, 0x0000003cu, 0x0000ec19u, 0x00001a13u, 0x000019fdu, 0x00001a02u, 0x000019f8u, 0x00001a06u, 0x000019f9u, 0x00001a0au, 0x000019fau, 0x00001a0eu, 0x000019fbu, 0x00001927u, 0x000019fcu, 0x0004003du, 0x00000008u, 0x00001a16u, 0x000001e1u, 0x000300f7u, 0x00001a1du, 0x00000000u, 0x000d00fbu, 0x00001a16u, 0x00001a1cu, 0x00000000u, 0x00001a17u, 0x00000001u, 0x00001a18u, 0x00000002u, 0x00001a19u, 0x00000004u, 0x00001a1au, 0x00000006u, 0x00001a1bu, 0x000200f8u, 0x00001a1cu, 0x00060041u, 0x0000003eu, 0x00001a2cu, 0x000001dfu, 0x00000218u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a2du, 0x00001a2cu, 0x0003003eu, 0x00001a1eu, 0x00001a2du, 0x000200f9u, 0x00001a1du, 0x000200f8u, 0x00001a17u, 0x00060041u, 0x0000003eu, 0x00001a1fu, 0x000001dfu, 0x0000021eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a20u, 0x00001a1fu, 0x0003003eu, 0x00001a1eu, 0x00001a20u, 0x000200f9u, 0x00001a1du, 0x000200f8u, 0x00001a18u, 0x00060041u, 0x0000003eu, 0x00001a22u, 0x000001dfu, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a23u, 0x00001a22u, 0x0003003eu, 0x00001a1eu, 0x00001a23u, 0x000200f9u, 0x00001a1du, 0x000200f8u, 0x00001a19u, 0x00060041u, 0x0000003eu, 0x00001a25u, 0x000001dfu, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a26u, 0x00001a25u, 0x0003003eu, 0x00001a1eu, 0x00001a26u, 0x000200f9u, 0x00001a1du, 0x000200f8u, 0x00001a1au, 0x00060041u, 0x0000003eu, 0x00001a28u, 0x000001dfu, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a29u, 0x00001a28u, 0x0003003eu, 0x00001a1eu, 0x00001a29u, 0x000200f9u, 0x00001a1du, 0x000200f8u, 0x00001a1bu, 0x0003003eu, 0x00001a1eu, 0x00001926u, 0x000200f9u, 0x00001a1du, 0x000200f8u, 0x00001a1du, 0x000f00f5u, 0x00000008u, 0x0000ec1au, 0x00001a2du, 0x00001a1cu, 0x00001a20u, 0x00001a17u, 0x00001a23u, 0x00001a18u, 0x00001a26u, 0x00001a19u, 0x00001a29u, 0x00001a1au, 0x00001926u, 0x00001a1bu, 0x00050051u, 0x00000008u, 0x00001a32u, 0x0000ec19u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a33u, 0x0000ec19u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a34u, 0x0000ec19u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a35u, 0x00001a32u, 0x00001a33u, 0x00001a34u, 0x0000ec1au, 0x000200feu, 0x00001a35u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001eeu, 0x00000000u, 0x000001e4u, 0x00030037u, 0x000001ceu, 0x000001e5u, 0x00030037u, 0x0000005cu, 0x000001e6u, 0x00030037u, 0x0000005cu, 0x000001e7u, 0x00030037u, 0x0000003eu, 0x000001e8u, 0x00030037u, 0x0000003eu, 0x000001e9u, 0x00030037u, 0x0000005eu, 0x000001eau, 0x00030037u, 0x0000005eu, 0x000001ebu, 0x00030037u, 0x0000005eu, 0x000001ecu, 0x00030037u, 0x0000003eu, 0x000001edu, 0x000200f8u, 0x000001efu, 0x0004003bu, 0x0000005cu, 0x00001a38u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a39u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a3bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a3eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a42u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a43u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a45u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a48u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a4cu, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a4du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a4fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a52u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a56u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a57u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a5cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a60u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a61u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a63u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a65u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a67u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a6du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a6eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a72u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a7eu, 0x00000007u, 0x0004003du, 0x000001cdu, 0x00001a3au, 0x000001e5u, 0x0003003eu, 0x00001a39u, 0x00001a3au, 0x00050041u, 0x0000003eu, 0x00001a3cu, 0x000001e6u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001a3du, 0x00001a3cu, 0x0003003eu, 0x00001a3bu, 0x00001a3du, 0x00050041u, 0x0000003eu, 0x00001a3fu, 0x000001e7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001a40u, 0x00001a3fu, 0x0003003eu, 0x00001a3eu, 0x00001a40u, 0x00070039u, 0x00000009u, 0x00001a41u, 0x000001d3u, 0x00001a39u, 0x00001a3bu, 0x00001a3eu, 0x0003003eu, 0x00001a38u, 0x00001a41u, 0x0004003du, 0x000001cdu, 0x00001a44u, 0x000001e5u, 0x0003003eu, 0x00001a43u, 0x00001a44u, 0x00050041u, 0x0000003eu, 0x00001a46u, 0x000001e6u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001a47u, 0x00001a46u, 0x0003003eu, 0x00001a45u, 0x00001a47u, 0x00050041u, 0x0000003eu, 0x00001a49u, 0x000001e7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001a4au, 0x00001a49u, 0x0003003eu, 0x00001a48u, 0x00001a4au, 0x00070039u, 0x00000009u, 0x00001a4bu, 0x000001d8u, 0x00001a43u, 0x00001a45u, 0x00001a48u, 0x0003003eu, 0x00001a42u, 0x00001a4bu, 0x0004003du, 0x000001cdu, 0x00001a4eu, 0x000001e5u, 0x0003003eu, 0x00001a4du, 0x00001a4eu, 0x00050041u, 0x0000003eu, 0x00001a50u, 0x000001e6u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001a51u, 0x00001a50u, 0x0003003eu, 0x00001a4fu, 0x00001a51u, 0x00050041u, 0x0000003eu, 0x00001a53u, 0x000001e7u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001a54u, 0x00001a53u, 0x0003003eu, 0x00001a52u, 0x00001a54u, 0x00070039u, 0x00000009u, 0x00001a55u, 0x000001ddu, 0x00001a4du, 0x00001a4fu, 0x00001a52u, 0x0003003eu, 0x00001a4cu, 0x00001a55u, 0x0004003du, 0x000001cdu, 0x00001a58u, 0x000001e5u, 0x0003003eu, 0x00001a57u, 0x00001a58u, 0x00050041u, 0x0000003eu, 0x00001a5au, 0x000001e6u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a5bu, 0x00001a5au, 0x0003003eu, 0x00001a59u, 0x00001a5bu, 0x00050041u, 0x0000003eu, 0x00001a5du, 0x000001e7u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a5eu, 0x00001a5du, 0x0003003eu, 0x00001a5cu, 0x00001a5eu, 0x00070039u, 0x00000009u, 0x00001a5fu, 0x000001e2u, 0x00001a57u, 0x00001a59u, 0x00001a5cu, 0x0003003eu, 0x00001a56u, 0x00001a5fu, 0x0003003eu, 0x00001a61u, 0x00001a41u, 0x0003003eu, 0x00001a63u, 0x00001a4bu, 0x0003003eu, 0x00001a65u, 0x00001a55u, 0x0003003eu, 0x00001a67u, 0x00001a5fu, 0x00080039u, 0x00000009u, 0x00001a69u, 0x000001cbu, 0x00001a61u, 0x00001a63u, 0x00001a65u, 0x00001a67u, 0x0003003eu, 0x00001a60u, 0x00001a69u, 0x0004003du, 0x0000005du, 0x00001a6au, 0x000001ecu, 0x000300f7u, 0x00001a6cu, 0x00000000u, 0x000400fau, 0x00001a6au, 0x00001a6bu, 0x00001a8eu, 0x000200f8u, 0x00001a6bu, 0x00050041u, 0x0000003eu, 0x00001a6fu, 0x00001a60u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a70u, 0x00001a6fu, 0x0003003eu, 0x00001a6eu, 0x00001a70u, 0x00050039u, 0x00000008u, 0x00001a71u, 0x000000d9u, 0x00001a6eu, 0x0003003eu, 0x00001a6du, 0x00001a71u, 0x00050080u, 0x00000008u, 0x00001a75u, 0x00001a71u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00001a76u, 0x00001a75u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00001a77u, 0x00001a71u, 0x00001a76u, 0x0003003eu, 0x00001a72u, 0x00001a77u, 0x0004003du, 0x0000005du, 0x00001a78u, 0x000001ebu, 0x000300f7u, 0x00001a7au, 0x00000000u, 0x000400fau, 0x00001a78u, 0x00001a79u, 0x00001a88u, 0x000200f8u, 0x00001a79u, 0x0004003du, 0x0000005du, 0x00001a7bu, 0x000001eau, 0x000300f7u, 0x00001a7du, 0x00000000u, 0x000400fau, 0x00001a7bu, 0x00001a7cu, 0x00001a84u, 0x000200f8u, 0x00001a7cu, 0x0004003du, 0x00000008u, 0x00001a80u, 0x000001e9u, 0x00050084u, 0x00000008u, 0x00001a81u, 0x00001a77u, 0x00001a80u, 0x00050080u, 0x00000008u, 0x00001a82u, 0x00001a81u, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00001a83u, 0x00001a82u, 0x00000218u, 0x0003003eu, 0x00001a7eu, 0x00001a83u, 0x000200f9u, 0x00001a7du, 0x000200f8u, 0x00001a84u, 0x0004003du, 0x00000008u, 0x00001a85u, 0x000001e9u, 0x000500c4u, 0x00000008u, 0x00001a86u, 0x00001a85u, 0x0000021eu, 0x0003003eu, 0x00001a7eu, 0x00001a86u, 0x000200f9u, 0x00001a7du, 0x000200f8u, 0x00001a7du, 0x000700f5u, 0x00000008u, 0x0000ec1bu, 0x00001a83u, 0x00001a7cu, 0x00001a86u, 0x00001a84u, 0x0003003eu, 0x00001a72u, 0x0000ec1bu, 0x000200f9u, 0x00001a7au, 0x000200f8u, 0x00001a88u, 0x0004003du, 0x00000008u, 0x00001a89u, 0x000001e8u, 0x00050080u, 0x00000008u, 0x00001a8bu, 0x00001a77u, 0x00001a89u, 0x0003003eu, 0x00001a72u, 0x00001a8bu, 0x000200f9u, 0x00001a7au, 0x000200f8u, 0x00001a7au, 0x000700f5u, 0x00000008u, 0x0000ec1cu, 0x0000ec1bu, 0x00001a7du, 0x00001a8bu, 0x00001a88u, 0x0008000cu, 0x00000008u, 0x00001a8du, 0x00000001u, 0x0000002du, 0x0000ec1cu, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x000001edu, 0x00001a8du, 0x000200f9u, 0x00001a6cu, 0x000200f8u, 0x00001a8eu, 0x0003003eu, 0x000001edu, 0x00000203u, 0x000200f9u, 0x00001a6cu, 0x000200f8u, 0x00001a6cu, 0x0004003du, 0x00000009u, 0x00001a8fu, 0x00001a60u, 0x000200feu, 0x00001a8fu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001f8u, 0x00000000u, 0x000001f0u, 0x00030037u, 0x000001ceu, 0x000001f1u, 0x00030037u, 0x0000005cu, 0x000001f2u, 0x00030037u, 0x0000005cu, 0x000001f3u, 0x00030037u, 0x0000003eu, 0x000001f4u, 0x00030037u, 0x0000003eu, 0x000001f5u, 0x00030037u, 0x0000005eu, 0x000001f6u, 0x00030037u, 0x0000005eu, 0x000001f7u, 0x000200f8u, 0x000001f9u, 0x0004003bu, 0x0000005cu, 0x00001a92u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a93u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a95u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a98u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a9cu, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a9du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a9fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001aa2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001aa6u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001aa7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001aa9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001aacu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ab0u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001ab1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ab3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ab6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001abau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001abbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001abdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001abfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ac1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ac4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ac7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ad2u, 0x00000007u, 0x0004003du, 0x000001cdu, 0x00001a94u, 0x000001f1u, 0x0003003eu, 0x00001a93u, 0x00001a94u, 0x00050041u, 0x0000003eu, 0x00001a96u, 0x000001f2u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001a97u, 0x00001a96u, 0x0003003eu, 0x00001a95u, 0x00001a97u, 0x00050041u, 0x0000003eu, 0x00001a99u, 0x000001f3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001a9au, 0x00001a99u, 0x0003003eu, 0x00001a98u, 0x00001a9au, 0x00070039u, 0x00000009u, 0x00001a9bu, 0x000001d3u, 0x00001a93u, 0x00001a95u, 0x00001a98u, 0x0003003eu, 0x00001a92u, 0x00001a9bu, 0x0004003du, 0x000001cdu, 0x00001a9eu, 0x000001f1u, 0x0003003eu, 0x00001a9du, 0x00001a9eu, 0x00050041u, 0x0000003eu, 0x00001aa0u, 0x000001f2u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001aa1u, 0x00001aa0u, 0x0003003eu, 0x00001a9fu, 0x00001aa1u, 0x00050041u, 0x0000003eu, 0x00001aa3u, 0x000001f3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001aa4u, 0x00001aa3u, 0x0003003eu, 0x00001aa2u, 0x00001aa4u, 0x00070039u, 0x00000009u, 0x00001aa5u, 0x000001d8u, 0x00001a9du, 0x00001a9fu, 0x00001aa2u, 0x0003003eu, 0x00001a9cu, 0x00001aa5u, 0x0004003du, 0x000001cdu, 0x00001aa8u, 0x000001f1u, 0x0003003eu, 0x00001aa7u, 0x00001aa8u, 0x00050041u, 0x0000003eu, 0x00001aaau, 0x000001f2u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001aabu, 0x00001aaau, 0x0003003eu, 0x00001aa9u, 0x00001aabu, 0x00050041u, 0x0000003eu, 0x00001aadu, 0x000001f3u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001aaeu, 0x00001aadu, 0x0003003eu, 0x00001aacu, 0x00001aaeu, 0x00070039u, 0x00000009u, 0x00001aafu, 0x000001ddu, 0x00001aa7u, 0x00001aa9u, 0x00001aacu, 0x0003003eu, 0x00001aa6u, 0x00001aafu, 0x0004003du, 0x000001cdu, 0x00001ab2u, 0x000001f1u, 0x0003003eu, 0x00001ab1u, 0x00001ab2u, 0x00050041u, 0x0000003eu, 0x00001ab4u, 0x000001f2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001ab5u, 0x00001ab4u, 0x0003003eu, 0x00001ab3u, 0x00001ab5u, 0x00050041u, 0x0000003eu, 0x00001ab7u, 0x000001f3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001ab8u, 0x00001ab7u, 0x0003003eu, 0x00001ab6u, 0x00001ab8u, 0x00070039u, 0x00000009u, 0x00001ab9u, 0x000001e2u, 0x00001ab1u, 0x00001ab3u, 0x00001ab6u, 0x0003003eu, 0x00001ab0u, 0x00001ab9u, 0x0003003eu, 0x00001abbu, 0x00001a9bu, 0x0003003eu, 0x00001abdu, 0x00001aa5u, 0x0003003eu, 0x00001abfu, 0x00001aafu, 0x0003003eu, 0x00001ac1u, 0x00001ab9u, 0x00080039u, 0x00000009u, 0x00001ac3u, 0x000001cbu, 0x00001abbu, 0x00001abdu, 0x00001abfu, 0x00001ac1u, 0x0003003eu, 0x00001abau, 0x00001ac3u, 0x0004003du, 0x00000009u, 0x00001ac5u, 0x00001abau, 0x0003003eu, 0x00001ac4u, 0x00001ac5u, 0x00050039u, 0x00000009u, 0x00001ac6u, 0x000000d3u, 0x00001ac4u, 0x0003003eu, 0x00001abau, 0x00001ac6u, 0x00050041u, 0x0000003eu, 0x00001ac8u, 0x00001abau, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001ac9u, 0x00001ac8u, 0x0004003du, 0x00000008u, 0x00001acbu, 0x00001ac8u, 0x00050080u, 0x00000008u, 0x00001accu, 0x00001acbu, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00001acdu, 0x00001accu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00001aceu, 0x00001ac9u, 0x00001acdu, 0x0003003eu, 0x00001ac7u, 0x00001aceu, 0x0004003du, 0x0000005du, 0x00001acfu, 0x000001f6u, 0x000300f7u, 0x00001ad1u, 0x00000000u, 0x000400fau, 0x00001acfu, 0x00001ad0u, 0x00001adau, 0x000200f8u, 0x00001ad0u, 0x0004003du, 0x00000008u, 0x00001ad4u, 0x000001f5u, 0x00050084u, 0x00000008u, 0x00001ad5u, 0x00001aceu, 0x00001ad4u, 0x00050080u, 0x00000008u, 0x00001ad6u, 0x00001ad5u, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00001ad7u, 0x00001ad6u, 0x00000218u, 0x0003003eu, 0x00001ad2u, 0x00001ad7u, 0x000500c3u, 0x00000008u, 0x00001ad9u, 0x00001ad7u, 0x0000021eu, 0x0003003eu, 0x000001f5u, 0x00001ad9u, 0x000200f9u, 0x00001ad1u, 0x000200f8u, 0x00001adau, 0x0004003du, 0x00000008u, 0x00001adbu, 0x000001f5u, 0x000500c4u, 0x00000008u, 0x00001adcu, 0x00001adbu, 0x0000021eu, 0x0003003eu, 0x00001ad2u, 0x00001adcu, 0x000200f9u, 0x00001ad1u, 0x000200f8u, 0x00001ad1u, 0x000700f5u, 0x00000008u, 0x0000ec1eu, 0x00001ad7u, 0x00001ad0u, 0x00001adcu, 0x00001adau, 0x0004003du, 0x0000005du, 0x00001addu, 0x000001f7u, 0x000300f7u, 0x00001adfu, 0x00000000u, 0x000400fau, 0x00001addu, 0x00001adeu, 0x00001ae1u, 0x000200f8u, 0x00001adeu, 0x0003003eu, 0x00001ac7u, 0x0000ec1eu, 0x000200f9u, 0x00001adfu, 0x000200f8u, 0x00001ae1u, 0x0004003du, 0x00000008u, 0x00001ae2u, 0x000001f4u, 0x00050080u, 0x00000008u, 0x00001ae4u, 0x00001aceu, 0x00001ae2u, 0x0003003eu, 0x00001ac7u, 0x00001ae4u, 0x000200f9u, 0x00001adfu, 0x000200f8u, 0x00001adfu, 0x000700f5u, 0x00000008u, 0x0000ec1fu, 0x0000ec1eu, 0x00001adeu, 0x00001ae4u, 0x00001ae1u, 0x0008000cu, 0x00000008u, 0x00001ae6u, 0x00000001u, 0x0000002du, 0x0000ec1fu, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00001ac8u, 0x00001ae6u, 0x0004003du, 0x00000009u, 0x00001ae8u, 0x00001abau, 0x000200feu, 0x00001ae8u, 0x00010038u, 0x00050036u, 0x0000005du, 0x000001ffu, 0x00000000u, 0x000001fau, 0x00030037u, 0x0000003eu, 0x000001fbu, 0x00030037u, 0x0000003eu, 0x000001fcu, 0x00030037u, 0x00000007u, 0x000001fdu, 0x00030037u, 0x000000c9u, 0x000001feu, 0x000200f8u, 0x00000200u, 0x0004003bu, 0x0000003eu, 0x000079e4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079e3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079e2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079e1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079e0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079dfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079deu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079ddu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079dcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079dbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079bau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079b9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079b1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007993u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007992u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007991u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007990u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000798fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000798eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000798du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000798cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000798bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000798au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007989u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007988u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007987u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007986u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007968u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007967u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007966u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007965u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007964u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007963u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007962u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007961u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007960u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000795fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000795eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000795du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000795cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000795bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000794eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000794du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000794cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000794bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000794au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007949u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007948u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007947u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007946u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007945u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007944u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007926u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007925u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007924u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007923u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007922u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007921u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007920u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000791fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000791eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000791du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000791cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000791bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000791au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007919u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007912u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007911u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007910u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000790fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000790eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000790du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007908u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007907u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007906u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007905u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078f1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078f0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078efu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078eeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078edu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078ecu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078ebu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078eau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078e9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078e5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078e4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078e3u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x00001f20u, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000005eu, 0x00001f1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001aecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b35u, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00001b38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b48u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001b4bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b4eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b51u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b54u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b57u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b5au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b5eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b62u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b67u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b6bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b6fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b73u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b78u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b7cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b80u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b84u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b88u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b8cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b90u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b95u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b9au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b9fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ba4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ba9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001baeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bb3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bb8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bbdu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bd8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bdau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001be1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001bf2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001bf3u, 0x00000007u, 0x0004003bu, 0x000000f3u, 0x00001bf4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001bf6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001bf9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bfbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bfdu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001bffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c0eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c11u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001c12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c14u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c16u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c18u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c1au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c1cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c44u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c45u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c48u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c4bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c62u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c65u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c6au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c6du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c6eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c71u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c74u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c77u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c79u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c7cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c7du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c8bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c8cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c8du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c8eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c8fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c92u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c95u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c98u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c9au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c9cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c9eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ca0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001ca2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001ca3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001ca4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ca5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ca6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001caeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cb5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cb8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cc1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cc4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cc6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cc8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001ccau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cccu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cceu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cd0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cd2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ce4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ce7u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ceau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cecu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ceeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cf0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cf2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cf4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cf6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001cf7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d00u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d02u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d09u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d18u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d1cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001d1fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00001d30u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d43u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00001d44u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d46u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00001d4bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d53u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d56u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001d59u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d5au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d67u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d68u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d76u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001d79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d7bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001d7du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d7fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d81u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d83u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d85u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d87u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d89u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d96u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d98u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001da4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001da5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001da6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001da8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001da9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001daau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dabu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dacu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dc2u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001dc3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001dc5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001dc7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dc9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dcbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001dcdu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001dcfu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001dd1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dd3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001de3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001debu, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001decu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001deeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001df0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001df2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001df4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001df6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001df8u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001e11u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001e13u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001e15u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e17u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e19u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001e1bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001e1du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e35u, 0x00000007u, 0x000300f7u, 0x00001f1cu, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00001f1fu, 0x000200f8u, 0x00001f1fu, 0x0004003du, 0x00000006u, 0x00001aedu, 0x000001fdu, 0x0003003eu, 0x00001aecu, 0x00001aedu, 0x00050039u, 0x00000028u, 0x00001aeeu, 0x0000002bu, 0x00001aecu, 0x00050051u, 0x00000008u, 0x000078e6u, 0x00001aeeu, 0x00000000u, 0x0003003eu, 0x000078e3u, 0x000078e6u, 0x00050051u, 0x00000008u, 0x000078e7u, 0x00001aeeu, 0x00000001u, 0x0003003eu, 0x000078e4u, 0x000078e7u, 0x00050051u, 0x00000008u, 0x000078e8u, 0x00001aeeu, 0x00000002u, 0x0003003eu, 0x000078e5u, 0x000078e8u, 0x0004003du, 0x00000008u, 0x00001aefu, 0x000001fcu, 0x00050084u, 0x00000008u, 0x00001af2u, 0x00000880u, 0x000078e7u, 0x000500b1u, 0x0000005du, 0x00001af3u, 0x00001aefu, 0x00001af2u, 0x000400a8u, 0x0000005du, 0x00001af4u, 0x00001af3u, 0x000300f7u, 0x00001af6u, 0x00000000u, 0x000400fau, 0x00001af4u, 0x00001af5u, 0x00001af6u, 0x000200f8u, 0x00001af5u, 0x0004003du, 0x00000008u, 0x00001af7u, 0x000001fcu, 0x00050084u, 0x00000008u, 0x00001afau, 0x000078e8u, 0x00000880u, 0x00050080u, 0x00000008u, 0x00001afcu, 0x00001afau, 0x00001afbu, 0x000500adu, 0x0000005du, 0x00001afdu, 0x00001af7u, 0x00001afcu, 0x000200f9u, 0x00001af6u, 0x000200f8u, 0x00001af6u, 0x000700f5u, 0x0000005du, 0x00001afeu, 0x00001af3u, 0x00001f1fu, 0x00001afdu, 0x00001af5u, 0x000300f7u, 0x00001b00u, 0x00000000u, 0x000400fau, 0x00001afeu, 0x00001affu, 0x00001b00u, 0x000200f8u, 0x00001affu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001b00u, 0x0004003du, 0x00000006u, 0x00001b08u, 0x000001fdu, 0x00070041u, 0x00000277u, 0x00001b09u, 0x00001b07u, 0x00000203u, 0x00001b08u, 0x00000264u, 0x0004003du, 0x00000229u, 0x00001b0au, 0x00001b09u, 0x00040071u, 0x00000006u, 0x00001b0bu, 0x00001b0au, 0x0003003eu, 0x00001b02u, 0x00001b0bu, 0x000300f7u, 0x00001b0eu, 0x00000000u, 0x000400fau, 0x00001b0cu, 0x00001b0du, 0x00001b0eu, 0x000200f8u, 0x00001b0du, 0x000500c7u, 0x00000006u, 0x00001b10u, 0x00001b0bu, 0x00000a31u, 0x000500abu, 0x0000005du, 0x00001b11u, 0x00001b10u, 0x00000374u, 0x000300f7u, 0x00001b13u, 0x00000000u, 0x000400fau, 0x00001b11u, 0x00001b12u, 0x00001b13u, 0x000200f8u, 0x00001b12u, 0x0004003du, 0x00000008u, 0x00001b16u, 0x000001fbu, 0x000500c7u, 0x00000008u, 0x00001b17u, 0x00001b16u, 0x00001b15u, 0x0003003eu, 0x000001fbu, 0x00001b17u, 0x0004003du, 0x00000008u, 0x00001b1au, 0x000001fcu, 0x000500c7u, 0x00000008u, 0x00001b1bu, 0x00001b1au, 0x00001b19u, 0x0003003eu, 0x000001fcu, 0x00001b1bu, 0x000200f9u, 0x00001b13u, 0x000200f8u, 0x00001b13u, 0x000200f9u, 0x00001b0eu, 0x000200f8u, 0x00001b0eu, 0x00050084u, 0x00000008u, 0x00001b1fu, 0x00000880u, 0x000078e6u, 0x0004003du, 0x00000008u, 0x00001b20u, 0x000001fcu, 0x00050082u, 0x00000008u, 0x00001b24u, 0x00001b20u, 0x00001af2u, 0x00050080u, 0x00000008u, 0x00001b25u, 0x00001b1fu, 0x00001b24u, 0x0004007cu, 0x00000006u, 0x00001b26u, 0x00001b25u, 0x0003003eu, 0x00001b27u, 0x00001b26u, 0x00050039u, 0x00000023u, 0x00001b28u, 0x00000026u, 0x00001b27u, 0x00050051u, 0x00000009u, 0x000078f2u, 0x00001b28u, 0x00000000u, 0x0003003eu, 0x000078e9u, 0x000078f2u, 0x00050051u, 0x00000009u, 0x000078f3u, 0x00001b28u, 0x00000001u, 0x0003003eu, 0x000078eau, 0x000078f3u, 0x00050051u, 0x00000009u, 0x000078f4u, 0x00001b28u, 0x00000002u, 0x0003003eu, 0x000078ebu, 0x000078f4u, 0x00050051u, 0x00000009u, 0x000078f5u, 0x00001b28u, 0x00000003u, 0x0003003eu, 0x000078ecu, 0x000078f5u, 0x00050051u, 0x00000008u, 0x000078f6u, 0x00001b28u, 0x00000004u, 0x0003003eu, 0x000078edu, 0x000078f6u, 0x00050051u, 0x00000008u, 0x000078f7u, 0x00001b28u, 0x00000005u, 0x0003003eu, 0x000078eeu, 0x000078f7u, 0x00050051u, 0x00000008u, 0x000078f8u, 0x00001b28u, 0x00000006u, 0x0003003eu, 0x000078efu, 0x000078f8u, 0x00050051u, 0x00000008u, 0x000078f9u, 0x00001b28u, 0x00000007u, 0x0003003eu, 0x000078f0u, 0x000078f9u, 0x00050051u, 0x00000008u, 0x000078fau, 0x00001b28u, 0x00000008u, 0x0003003eu, 0x000078f1u, 0x000078fau, 0x000500aau, 0x0000005du, 0x00001b2bu, 0x000078fau, 0x00000203u, 0x000300f7u, 0x00001b2du, 0x00000000u, 0x000400fau, 0x00001b2bu, 0x00001b2cu, 0x00001b2du, 0x000200f8u, 0x00001b2cu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001b2du, 0x0004003du, 0x00000006u, 0x00001b30u, 0x000001fdu, 0x00070041u, 0x00000277u, 0x00001b31u, 0x00001b07u, 0x00000203u, 0x00001b30u, 0x0000026au, 0x0004003du, 0x00000229u, 0x00001b32u, 0x00001b31u, 0x00040071u, 0x00000006u, 0x00001b33u, 0x00001b32u, 0x0003003eu, 0x00001b2fu, 0x00001b33u, 0x0004003du, 0x00000006u, 0x00001b36u, 0x000001fdu, 0x0003003eu, 0x00001b35u, 0x00001b36u, 0x00050039u, 0x0000000au, 0x00001b37u, 0x0000000du, 0x00001b35u, 0x00050051u, 0x00000009u, 0x00007909u, 0x00001b37u, 0x00000001u, 0x0003003eu, 0x00007905u, 0x00007909u, 0x00050051u, 0x00000009u, 0x0000790au, 0x00001b37u, 0x00000003u, 0x0003003eu, 0x00007906u, 0x0000790au, 0x00050051u, 0x00000009u, 0x0000790bu, 0x00001b37u, 0x00000005u, 0x0003003eu, 0x00007907u, 0x0000790bu, 0x00050051u, 0x00000009u, 0x0000790cu, 0x00001b37u, 0x00000007u, 0x0003003eu, 0x00007908u, 0x0000790cu, 0x0004003du, 0x00000006u, 0x00001b39u, 0x000001fdu, 0x00070041u, 0x00000234u, 0x00001b3au, 0x00000a0bu, 0x00000203u, 0x00001b39u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00001b3bu, 0x00001b3au, 0x00040071u, 0x00000237u, 0x00001b3cu, 0x00001b3bu, 0x0003003eu, 0x00001b38u, 0x00001b3cu, 0x00050041u, 0x00000007u, 0x00001b3eu, 0x00001b38u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001b3fu, 0x00001b3eu, 0x0003003eu, 0x00001b3du, 0x00001b3fu, 0x00050041u, 0x00000007u, 0x00001b41u, 0x00001b38u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x00001b42u, 0x00001b41u, 0x0003003eu, 0x00001b40u, 0x00001b42u, 0x0003003eu, 0x00001b45u, 0x00001b3fu, 0x00050039u, 0x00000014u, 0x00001b47u, 0x00000017u, 0x00001b45u, 0x00050051u, 0x00000009u, 0x00007913u, 0x00001b47u, 0x00000000u, 0x0003003eu, 0x0000790du, 0x00007913u, 0x00050051u, 0x00000009u, 0x00007914u, 0x00001b47u, 0x00000001u, 0x0003003eu, 0x0000790eu, 0x00007914u, 0x00050051u, 0x00000009u, 0x00007915u, 0x00001b47u, 0x00000002u, 0x0003003eu, 0x0000790fu, 0x00007915u, 0x00050051u, 0x00000009u, 0x00007916u, 0x00001b47u, 0x00000003u, 0x0003003eu, 0x00007910u, 0x00007916u, 0x00050051u, 0x00000006u, 0x00007917u, 0x00001b47u, 0x00000004u, 0x0003003eu, 0x00007911u, 0x00007917u, 0x00050051u, 0x00000008u, 0x00007918u, 0x00001b47u, 0x00000005u, 0x0003003eu, 0x00007912u, 0x00007918u, 0x0003003eu, 0x00001b48u, 0x00007917u, 0x0003003eu, 0x00001b4bu, 0x00007918u, 0x0003003eu, 0x00001b4eu, 0x00007913u, 0x0003003eu, 0x00001b51u, 0x00007914u, 0x0003003eu, 0x00001b54u, 0x00007915u, 0x0003003eu, 0x00001b57u, 0x00007916u, 0x000500c7u, 0x00000006u, 0x00001b5cu, 0x00007917u, 0x00000377u, 0x000500abu, 0x0000005du, 0x00001b5du, 0x00001b5cu, 0x00000374u, 0x0003003eu, 0x00001b5au, 0x00001b5du, 0x000500c7u, 0x00000006u, 0x00001b60u, 0x00007917u, 0x00000a31u, 0x000500abu, 0x0000005du, 0x00001b61u, 0x00001b60u, 0x00000374u, 0x0003003eu, 0x00001b5eu, 0x00001b61u, 0x000500c7u, 0x00000006u, 0x00001b65u, 0x00007917u, 0x00001b64u, 0x000500abu, 0x0000005du, 0x00001b66u, 0x00001b65u, 0x00000374u, 0x0003003eu, 0x00001b62u, 0x00001b66u, 0x000500c7u, 0x00000006u, 0x00001b69u, 0x00007917u, 0x00000a37u, 0x000500abu, 0x0000005du, 0x00001b6au, 0x00001b69u, 0x00000374u, 0x0003003eu, 0x00001b67u, 0x00001b6au, 0x000500c7u, 0x00000006u, 0x00001b6du, 0x00007917u, 0x00000a3du, 0x000500abu, 0x0000005du, 0x00001b6eu, 0x00001b6du, 0x00000374u, 0x0003003eu, 0x00001b6bu, 0x00001b6eu, 0x000500c7u, 0x00000006u, 0x00001b71u, 0x00007917u, 0x0000035bu, 0x000500abu, 0x0000005du, 0x00001b72u, 0x00001b71u, 0x00000374u, 0x0003003eu, 0x00001b6fu, 0x00001b72u, 0x000500c7u, 0x00000006u, 0x00001b76u, 0x00007917u, 0x00001b75u, 0x000500abu, 0x0000005du, 0x00001b77u, 0x00001b76u, 0x00000374u, 0x0003003eu, 0x00001b73u, 0x00001b77u, 0x000500c7u, 0x00000006u, 0x00001b7au, 0x00007917u, 0x00000f2eu, 0x000500abu, 0x0000005du, 0x00001b7bu, 0x00001b7au, 0x00000374u, 0x0003003eu, 0x00001b78u, 0x00001b7bu, 0x000500c7u, 0x00000006u, 0x00001b7eu, 0x00007917u, 0x00000f26u, 0x000500abu, 0x0000005du, 0x00001b7fu, 0x00001b7eu, 0x00000374u, 0x0003003eu, 0x00001b7cu, 0x00001b7fu, 0x000500c7u, 0x00000006u, 0x00001b82u, 0x00007917u, 0x00000701u, 0x000500abu, 0x0000005du, 0x00001b83u, 0x00001b82u, 0x00000374u, 0x0003003eu, 0x00001b80u, 0x00001b83u, 0x000500c7u, 0x00000006u, 0x00001b86u, 0x00007917u, 0x00000a43u, 0x000500abu, 0x0000005du, 0x00001b87u, 0x00001b86u, 0x00000374u, 0x0003003eu, 0x00001b84u, 0x00001b87u, 0x000500c7u, 0x00000006u, 0x00001b8au, 0x00007917u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00001b8bu, 0x00001b8au, 0x00000374u, 0x0003003eu, 0x00001b88u, 0x00001b8bu, 0x000500c7u, 0x00000006u, 0x00001b8eu, 0x00007917u, 0x00000e5fu, 0x000500abu, 0x0000005du, 0x00001b8fu, 0x00001b8eu, 0x00000374u, 0x0003003eu, 0x00001b8cu, 0x00001b8fu, 0x000500c7u, 0x00000006u, 0x00001b93u, 0x00007917u, 0x00001b92u, 0x000500abu, 0x0000005du, 0x00001b94u, 0x00001b93u, 0x00000374u, 0x0003003eu, 0x00001b90u, 0x00001b94u, 0x000500c7u, 0x00000006u, 0x00001b98u, 0x00007917u, 0x00001b97u, 0x000500abu, 0x0000005du, 0x00001b99u, 0x00001b98u, 0x00000374u, 0x0003003eu, 0x00001b95u, 0x00001b99u, 0x000500c7u, 0x00000006u, 0x00001b9du, 0x00007917u, 0x00001b9cu, 0x000500abu, 0x0000005du, 0x00001b9eu, 0x00001b9du, 0x00000374u, 0x0003003eu, 0x00001b9au, 0x00001b9eu, 0x000500c7u, 0x00000006u, 0x00001ba2u, 0x00007917u, 0x00001ba1u, 0x000500abu, 0x0000005du, 0x00001ba3u, 0x00001ba2u, 0x00000374u, 0x0003003eu, 0x00001b9fu, 0x00001ba3u, 0x000500c7u, 0x00000006u, 0x00001ba7u, 0x00007917u, 0x00001ba6u, 0x000500abu, 0x0000005du, 0x00001ba8u, 0x00001ba7u, 0x00000374u, 0x0003003eu, 0x00001ba4u, 0x00001ba8u, 0x000500c7u, 0x00000006u, 0x00001bacu, 0x00007917u, 0x00001babu, 0x000500abu, 0x0000005du, 0x00001badu, 0x00001bacu, 0x00000374u, 0x0003003eu, 0x00001ba9u, 0x00001badu, 0x000500c7u, 0x00000006u, 0x00001bb1u, 0x00007917u, 0x00001bb0u, 0x000500abu, 0x0000005du, 0x00001bb2u, 0x00001bb1u, 0x00000374u, 0x0003003eu, 0x00001baeu, 0x00001bb2u, 0x000500c7u, 0x00000006u, 0x00001bb6u, 0x00007917u, 0x00001bb5u, 0x000500abu, 0x0000005du, 0x00001bb7u, 0x00001bb6u, 0x00000374u, 0x0003003eu, 0x00001bb3u, 0x00001bb7u, 0x000500c7u, 0x00000006u, 0x00001bbbu, 0x00007917u, 0x00001bbau, 0x000500abu, 0x0000005du, 0x00001bbcu, 0x00001bbbu, 0x00000374u, 0x0003003eu, 0x00001bb8u, 0x00001bbcu, 0x000500c7u, 0x00000006u, 0x00001bc0u, 0x00007917u, 0x00001bbfu, 0x000500abu, 0x0000005du, 0x00001bc1u, 0x00001bc0u, 0x00000374u, 0x0003003eu, 0x00001bbdu, 0x00001bc1u, 0x000500c7u, 0x00000006u, 0x00001bc5u, 0x00007917u, 0x00001bc4u, 0x000500abu, 0x0000005du, 0x00001bc6u, 0x00001bc5u, 0x00000374u, 0x0003003eu, 0x00001bc2u, 0x00001bc6u, 0x000500c7u, 0x00000006u, 0x00001bc9u, 0x00007917u, 0x00001bc8u, 0x000500abu, 0x0000005du, 0x00001bcau, 0x00001bc9u, 0x00000374u, 0x000300f7u, 0x00001bccu, 0x00000000u, 0x000400fau, 0x00001bcau, 0x00001bcbu, 0x00001bccu, 0x000200f8u, 0x00001bcbu, 0x0004003du, 0x00000008u, 0x00001bcdu, 0x000001fbu, 0x0004007cu, 0x00000006u, 0x00001bceu, 0x00001bcdu, 0x0004003du, 0x00000008u, 0x00001bcfu, 0x000001fcu, 0x0004007cu, 0x00000006u, 0x00001bd0u, 0x00001bcfu, 0x0004003du, 0x00000006u, 0x00001bd1u, 0x000001fdu, 0x00060041u, 0x00001bd2u, 0x00001bd3u, 0x00000cc1u, 0x00000203u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00001bd4u, 0x00001bd3u, 0x00050080u, 0x00000006u, 0x00001bd5u, 0x00001bd1u, 0x00001bd4u, 0x0003003eu, 0x00001bd6u, 0x00001bceu, 0x0003003eu, 0x00001bd7u, 0x00001bd0u, 0x0003003eu, 0x00001bd8u, 0x00001bd5u, 0x00070039u, 0x00000002u, 0x00001bd9u, 0x00000031u, 0x00001bd6u, 0x00001bd7u, 0x00001bd8u, 0x000200f9u, 0x00001bccu, 0x000200f8u, 0x00001bccu, 0x000500c7u, 0x00000006u, 0x00001bdcu, 0x00001b0bu, 0x00000485u, 0x000500abu, 0x0000005du, 0x00001bddu, 0x00001bdcu, 0x00000374u, 0x0003003eu, 0x00001bdau, 0x00001bddu, 0x000300f7u, 0x00001be0u, 0x00000000u, 0x000400fau, 0x00001b94u, 0x00001bdfu, 0x00001c33u, 0x000200f8u, 0x00001bdfu, 0x0004003du, 0x00000008u, 0x00001be2u, 0x000001fbu, 0x000500afu, 0x0000005du, 0x00001be5u, 0x00001be2u, 0x000078f7u, 0x000300f7u, 0x00001be7u, 0x00000000u, 0x000400fau, 0x00001be5u, 0x00001be6u, 0x00001be7u, 0x000200f8u, 0x00001be6u, 0x0004003du, 0x00000008u, 0x00001be8u, 0x000001fbu, 0x000500b3u, 0x0000005du, 0x00001bebu, 0x00001be8u, 0x000078f8u, 0x000200f9u, 0x00001be7u, 0x000200f8u, 0x00001be7u, 0x000700f5u, 0x0000005du, 0x00001becu, 0x00001be5u, 0x00001bdfu, 0x00001bebu, 0x00001be6u, 0x0003003eu, 0x00001be1u, 0x00001becu, 0x000400a8u, 0x0000005du, 0x00001beeu, 0x00001becu, 0x000300f7u, 0x00001bf0u, 0x00000000u, 0x000400fau, 0x00001beeu, 0x00001befu, 0x00001bf0u, 0x000200f8u, 0x00001befu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001bf0u, 0x0003003eu, 0x00001bf4u, 0x00001b28u, 0x0003003eu, 0x00001bf6u, 0x0000790bu, 0x0004003du, 0x00000008u, 0x00001bfau, 0x000001fbu, 0x0003003eu, 0x00001bf9u, 0x00001bfau, 0x0003003eu, 0x00001bfbu, 0x00001b72u, 0x0003003eu, 0x00001bfdu, 0x00001bddu, 0x000b0039u, 0x00000002u, 0x00001c01u, 0x000000fcu, 0x00001bf4u, 0x00001bf6u, 0x00001bf9u, 0x00001bfbu, 0x00001bfdu, 0x00001bffu, 0x00001c00u, 0x0004003du, 0x0000005fu, 0x00001c02u, 0x00001bffu, 0x0003003eu, 0x00001bf2u, 0x00001c02u, 0x0004003du, 0x00000008u, 0x00001c03u, 0x00001c00u, 0x0003003eu, 0x00001bf3u, 0x00001c03u, 0x000500c7u, 0x00000006u, 0x00001c06u, 0x00001b33u, 0x0000073fu, 0x0003003eu, 0x00001c04u, 0x00001c06u, 0x0004003du, 0x00000006u, 0x00001c08u, 0x000001fdu, 0x00080041u, 0x00000277u, 0x00001c0au, 0x00000a0bu, 0x00000203u, 0x00001c08u, 0x00000215u, 0x00001c06u, 0x0004003du, 0x00000229u, 0x00001c0bu, 0x00001c0au, 0x00040071u, 0x00000006u, 0x00001c0cu, 0x00001c0bu, 0x0003003eu, 0x00001c07u, 0x00001c0cu, 0x0003003eu, 0x00001c0eu, 0x00001c0cu, 0x00050039u, 0x0000001eu, 0x00001c10u, 0x00000021u, 0x00001c0eu, 0x00050051u, 0x00000006u, 0x00007927u, 0x00001c10u, 0x00000000u, 0x0003003eu, 0x00007919u, 0x00007927u, 0x00050051u, 0x00000006u, 0x00007928u, 0x00001c10u, 0x00000001u, 0x0003003eu, 0x0000791au, 0x00007928u, 0x00050051u, 0x00000006u, 0x00007929u, 0x00001c10u, 0x00000002u, 0x0003003eu, 0x0000791bu, 0x00007929u, 0x00050051u, 0x00000006u, 0x0000792au, 0x00001c10u, 0x00000003u, 0x0003003eu, 0x0000791cu, 0x0000792au, 0x00050051u, 0x00000006u, 0x0000792bu, 0x00001c10u, 0x00000004u, 0x0003003eu, 0x0000791du, 0x0000792bu, 0x00050051u, 0x00000006u, 0x0000792cu, 0x00001c10u, 0x00000005u, 0x0003003eu, 0x0000791eu, 0x0000792cu, 0x00050051u, 0x00000008u, 0x0000792du, 0x00001c10u, 0x00000006u, 0x0003003eu, 0x0000791fu, 0x0000792du, 0x00050051u, 0x00000008u, 0x0000792eu, 0x00001c10u, 0x00000007u, 0x0003003eu, 0x00007920u, 0x0000792eu, 0x00050051u, 0x00000008u, 0x0000792fu, 0x00001c10u, 0x00000008u, 0x0003003eu, 0x00007921u, 0x0000792fu, 0x00050051u, 0x00000008u, 0x00007930u, 0x00001c10u, 0x00000009u, 0x0003003eu, 0x00007922u, 0x00007930u, 0x00050051u, 0x00000008u, 0x00007931u, 0x00001c10u, 0x0000000au, 0x0003003eu, 0x00007923u, 0x00007931u, 0x00050051u, 0x00000008u, 0x00007932u, 0x00001c10u, 0x0000000bu, 0x0003003eu, 0x00007924u, 0x00007932u, 0x00050051u, 0x00000008u, 0x00007933u, 0x00001c10u, 0x0000000cu, 0x0003003eu, 0x00007925u, 0x00007933u, 0x00050051u, 0x00000008u, 0x00007934u, 0x00001c10u, 0x0000000du, 0x0003003eu, 0x00007926u, 0x00007934u, 0x0003003eu, 0x00001c12u, 0x00001c10u, 0x0003003eu, 0x00001c14u, 0x00001b42u, 0x0003003eu, 0x00001c16u, 0x00001c02u, 0x0003003eu, 0x00001c18u, 0x00001c03u, 0x0003003eu, 0x00001c1au, 0x00001b5du, 0x0003003eu, 0x00001c1cu, 0x00001b61u, 0x000a0039u, 0x00000008u, 0x00001c1eu, 0x00000199u, 0x00001c12u, 0x00001c14u, 0x00001c16u, 0x00001c18u, 0x00001c1au, 0x00001c1cu, 0x0003003eu, 0x00001c11u, 0x00001c1eu, 0x00050041u, 0x0000003eu, 0x00001c20u, 0x000001feu, 0x00000212u, 0x0003003eu, 0x00001c20u, 0x00001c1eu, 0x00050041u, 0x0000003eu, 0x00001c21u, 0x000001feu, 0x00000215u, 0x0003003eu, 0x00001c21u, 0x0000037du, 0x000300f7u, 0x00001c24u, 0x00000000u, 0x000400fau, 0x00001b99u, 0x00001c23u, 0x00001c24u, 0x000200f8u, 0x00001c23u, 0x00060041u, 0x00000cc2u, 0x00001c25u, 0x00000cc1u, 0x00000203u, 0x00000215u, 0x0004003du, 0x00000008u, 0x00001c26u, 0x00001c25u, 0x000500aau, 0x0000005du, 0x00001c27u, 0x00001c26u, 0x00000215u, 0x000200f9u, 0x00001c24u, 0x000200f8u, 0x00001c24u, 0x000700f5u, 0x0000005du, 0x00001c28u, 0x00001b99u, 0x00001bf0u, 0x00001c27u, 0x00001c23u, 0x000300f7u, 0x00001c2au, 0x00000000u, 0x000400fau, 0x00001c28u, 0x00001c29u, 0x00001c2au, 0x000200f8u, 0x00001c29u, 0x000500c7u, 0x00000008u, 0x00001c2cu, 0x00001c1eu, 0x00000212u, 0x000500aau, 0x0000005du, 0x00001c2du, 0x00001c2cu, 0x00000203u, 0x000200f9u, 0x00001c2au, 0x000200f8u, 0x00001c2au, 0x000700f5u, 0x0000005du, 0x00001c2eu, 0x00001c28u, 0x00001c24u, 0x00001c2du, 0x00001c29u, 0x000300f7u, 0x00001c30u, 0x00000000u, 0x000400fau, 0x00001c2eu, 0x00001c2fu, 0x00001c30u, 0x000200f8u, 0x00001c2fu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001c30u, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x0000055eu, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001c33u, 0x000300f7u, 0x00001c36u, 0x00000000u, 0x000400fau, 0x00001b8fu, 0x00001c35u, 0x00001c36u, 0x000200f8u, 0x00001c35u, 0x00050041u, 0x0000003eu, 0x00001c37u, 0x000001feu, 0x00000215u, 0x0003003eu, 0x00001c37u, 0x00000622u, 0x0004003du, 0x00000008u, 0x00001c38u, 0x000001fbu, 0x000500afu, 0x0000005du, 0x00001c3bu, 0x00001c38u, 0x000078f7u, 0x000300f7u, 0x00001c3du, 0x00000000u, 0x000400fau, 0x00001c3bu, 0x00001c3cu, 0x00001c3du, 0x000200f8u, 0x00001c3cu, 0x0004003du, 0x00000008u, 0x00001c3eu, 0x000001fbu, 0x000500b3u, 0x0000005du, 0x00001c41u, 0x00001c3eu, 0x000078f8u, 0x000200f9u, 0x00001c3du, 0x000200f8u, 0x00001c3du, 0x000700f5u, 0x0000005du, 0x00001c42u, 0x00001c3bu, 0x00001c35u, 0x00001c41u, 0x00001c3cu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00001c42u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001c36u, 0x000200f9u, 0x00001be0u, 0x000200f8u, 0x00001be0u, 0x0003003eu, 0x00001c45u, 0x000078f4u, 0x0003003eu, 0x00001c48u, 0x000078f5u, 0x0004003du, 0x00000008u, 0x00001c4cu, 0x000001fbu, 0x0003003eu, 0x00001c4bu, 0x00001c4cu, 0x00070039u, 0x00000008u, 0x00001c4du, 0x00000084u, 0x00001c45u, 0x00001c48u, 0x00001c4bu, 0x0003003eu, 0x00001c44u, 0x00001c4du, 0x000500aau, 0x0000005du, 0x00001c4fu, 0x00001c4du, 0x00000203u, 0x000300f7u, 0x00001c51u, 0x00000000u, 0x000400fau, 0x00001c4fu, 0x00001c50u, 0x00001c51u, 0x000200f8u, 0x00001c50u, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001c51u, 0x000400cdu, 0x00000008u, 0x00001c55u, 0x00001c4du, 0x0003003eu, 0x00001c53u, 0x00001c55u, 0x000400a8u, 0x0000005du, 0x00001c57u, 0x00001b83u, 0x000300f7u, 0x00001c59u, 0x00000000u, 0x000400fau, 0x00001c57u, 0x00001c58u, 0x00001c59u, 0x000200f8u, 0x00001c58u, 0x000500c7u, 0x00000008u, 0x00001c5bu, 0x00001c4du, 0x00000212u, 0x000500aau, 0x0000005du, 0x00001c5cu, 0x00001c5bu, 0x00000203u, 0x000200f9u, 0x00001c59u, 0x000200f8u, 0x00001c59u, 0x000700f5u, 0x0000005du, 0x00001c5du, 0x00001c57u, 0x00001c51u, 0x00001c5cu, 0x00001c58u, 0x000300f7u, 0x00001c5fu, 0x00000000u, 0x000400fau, 0x00001c5du, 0x00001c5eu, 0x00001c5fu, 0x000200f8u, 0x00001c5eu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001c5fu, 0x0004003du, 0x00000006u, 0x00001c63u, 0x000001fdu, 0x0003003eu, 0x00001c62u, 0x00001c63u, 0x00050039u, 0x0000000fu, 0x00001c64u, 0x00000012u, 0x00001c62u, 0x00050051u, 0x00000009u, 0x0000794fu, 0x00001c64u, 0x00000000u, 0x0003003eu, 0x00007944u, 0x0000794fu, 0x00050051u, 0x00000009u, 0x00007950u, 0x00001c64u, 0x00000001u, 0x0003003eu, 0x00007945u, 0x00007950u, 0x00050051u, 0x00000009u, 0x00007951u, 0x00001c64u, 0x00000002u, 0x0003003eu, 0x00007946u, 0x00007951u, 0x00050051u, 0x00000009u, 0x00007952u, 0x00001c64u, 0x00000003u, 0x0003003eu, 0x00007947u, 0x00007952u, 0x00050051u, 0x00000009u, 0x00007953u, 0x00001c64u, 0x00000004u, 0x0003003eu, 0x00007948u, 0x00007953u, 0x00050051u, 0x00000009u, 0x00007954u, 0x00001c64u, 0x00000005u, 0x0003003eu, 0x00007949u, 0x00007954u, 0x00050051u, 0x00000009u, 0x00007955u, 0x00001c64u, 0x00000006u, 0x0003003eu, 0x0000794au, 0x00007955u, 0x00050051u, 0x00000009u, 0x00007956u, 0x00001c64u, 0x00000007u, 0x0003003eu, 0x0000794bu, 0x00007956u, 0x00050051u, 0x00000009u, 0x00007957u, 0x00001c64u, 0x00000009u, 0x0003003eu, 0x0000794cu, 0x00007957u, 0x00050051u, 0x00000008u, 0x00007958u, 0x00001c64u, 0x0000000du, 0x0003003eu, 0x0000794du, 0x00007958u, 0x00050051u, 0x00000009u, 0x00007959u, 0x00001c64u, 0x0000000eu, 0x0003003eu, 0x0000794eu, 0x00007959u, 0x0004003du, 0x00000008u, 0x00001c66u, 0x000001fbu, 0x00050082u, 0x00000008u, 0x00001c69u, 0x00001c66u, 0x000078f6u, 0x0003003eu, 0x00001c65u, 0x00001c69u, 0x000600a9u, 0x00000008u, 0x00001c6cu, 0x00001bddu, 0x00000212u, 0x00000ccfu, 0x0003003eu, 0x00001c6au, 0x00001c6cu, 0x0003003eu, 0x00001c6eu, 0x000078f2u, 0x0003003eu, 0x00001c71u, 0x00007909u, 0x0003003eu, 0x00001c74u, 0x0000790au, 0x0003003eu, 0x00001c77u, 0x00001c69u, 0x0003003eu, 0x00001c79u, 0x00001c4du, 0x00090039u, 0x00000009u, 0x00001c7bu, 0x000000f1u, 0x00001c6eu, 0x00001c71u, 0x00001c74u, 0x00001c77u, 0x00001c79u, 0x0003003eu, 0x00001c6du, 0x00001c7bu, 0x0003003eu, 0x00001c7cu, 0x00000543u, 0x0003003eu, 0x00001c7du, 0x00001c6cu, 0x000500a7u, 0x0000005du, 0x00001c81u, 0x00001c7fu, 0x00001bb7u, 0x000300f7u, 0x00001c83u, 0x00000000u, 0x000400fau, 0x00001c81u, 0x00001c82u, 0x00001c83u, 0x000200f8u, 0x00001c82u, 0x000500c7u, 0x00000006u, 0x00001c85u, 0x00001b0bu, 0x00000a37u, 0x000500abu, 0x0000005du, 0x00001c86u, 0x00001c85u, 0x00000374u, 0x000300f7u, 0x00001c88u, 0x00000000u, 0x000400fau, 0x00001c86u, 0x00001c87u, 0x00001c88u, 0x000200f8u, 0x00001c87u, 0x00050084u, 0x00000008u, 0x00001c8au, 0x00001c6cu, 0x00000880u, 0x0003003eu, 0x00001c7du, 0x00001c8au, 0x000200f9u, 0x00001c88u, 0x000200f8u, 0x00001c88u, 0x000700f5u, 0x00000008u, 0x0000ec52u, 0x00001c6cu, 0x00001c82u, 0x00001c8au, 0x00001c87u, 0x000200f9u, 0x00001c83u, 0x000200f8u, 0x00001c83u, 0x000700f5u, 0x00000008u, 0x0000ec51u, 0x00001c6cu, 0x00001c5fu, 0x0000ec52u, 0x00001c88u, 0x0003003eu, 0x00001c8fu, 0x000078f3u, 0x0003003eu, 0x00001c92u, 0x0000790bu, 0x0003003eu, 0x00001c95u, 0x0000790cu, 0x0003003eu, 0x00001c98u, 0x00001c69u, 0x0003003eu, 0x00001c9au, 0x00001c4du, 0x0003003eu, 0x00001c9cu, 0x00001b72u, 0x0003003eu, 0x00001c9eu, 0x00001bb7u, 0x0003003eu, 0x00001ca0u, 0x0000ec51u, 0x0003003eu, 0x00001ca6u, 0x00000543u, 0x00110039u, 0x00000002u, 0x00001ca8u, 0x00000113u, 0x00001c8fu, 0x00001c92u, 0x00001c95u, 0x00001c98u, 0x00001c9au, 0x00001c9cu, 0x00001c9eu, 0x00001ca0u, 0x00001ca2u, 0x00001ca3u, 0x00001ca4u, 0x00001ca5u, 0x00001ca6u, 0x0004003du, 0x0000005fu, 0x00001ca9u, 0x00001ca2u, 0x0003003eu, 0x00001c8bu, 0x00001ca9u, 0x0004003du, 0x0000005fu, 0x00001caau, 0x00001ca3u, 0x0003003eu, 0x00001c8cu, 0x00001caau, 0x0004003du, 0x0000005fu, 0x00001cabu, 0x00001ca4u, 0x0003003eu, 0x00001c8du, 0x00001cabu, 0x0004003du, 0x00000008u, 0x00001cacu, 0x00001ca5u, 0x0003003eu, 0x00001c8eu, 0x00001cacu, 0x0004003du, 0x0000005du, 0x00001cadu, 0x00001ca6u, 0x0003003eu, 0x00001c7cu, 0x00001cadu, 0x000500c7u, 0x00000006u, 0x00001cb0u, 0x00001b33u, 0x0000073fu, 0x0003003eu, 0x00001caeu, 0x00001cb0u, 0x00050080u, 0x00000006u, 0x00001cb3u, 0x00001cb0u, 0x00000485u, 0x000500c7u, 0x00000006u, 0x00001cb4u, 0x00001cb3u, 0x0000073fu, 0x0003003eu, 0x00001cb1u, 0x00001cb4u, 0x000500c2u, 0x00000006u, 0x00001cb7u, 0x00001b33u, 0x0000048bu, 0x0003003eu, 0x00001cb5u, 0x00001cb7u, 0x0003003eu, 0x00001cb8u, 0x00007958u, 0x000300f7u, 0x00001cbdu, 0x00000000u, 0x000400fau, 0x00001bb7u, 0x00001cbcu, 0x00001cbdu, 0x000200f8u, 0x00001cbcu, 0x0003003eu, 0x00001cbfu, 0x00001cb0u, 0x0003003eu, 0x00001cc1u, 0x00001cb4u, 0x0003003eu, 0x00001cc4u, 0x00001cb7u, 0x0003003eu, 0x00001cc6u, 0x00007958u, 0x0003003eu, 0x00001cc8u, 0x00001ca9u, 0x0003003eu, 0x00001ccau, 0x00001caau, 0x0003003eu, 0x00001cccu, 0x00001cabu, 0x0003003eu, 0x00001cceu, 0x00001cadu, 0x0003003eu, 0x00001cd0u, 0x00001b77u, 0x0003003eu, 0x00001cd2u, 0x00001b7bu, 0x0003003eu, 0x00001cd4u, 0x00001b7fu, 0x00100039u, 0x00000002u, 0x00001cd6u, 0x000001bcu, 0x00001cbfu, 0x00001cc1u, 0x00001cc3u, 0x00001cc4u, 0x00001cc6u, 0x00001cc8u, 0x00001ccau, 0x00001cccu, 0x00001cceu, 0x00001cd0u, 0x00001cd2u, 0x00001cd4u, 0x0004003du, 0x00000006u, 0x00001cd7u, 0x00001cbfu, 0x0003003eu, 0x00001caeu, 0x00001cd7u, 0x0004003du, 0x00000006u, 0x00001cd8u, 0x00001cc1u, 0x0003003eu, 0x00001cb1u, 0x00001cd8u, 0x0004003du, 0x00000008u, 0x00001cd9u, 0x00001cc3u, 0x0003003eu, 0x00001cbeu, 0x00001cd9u, 0x000200f9u, 0x00001cbdu, 0x000200f8u, 0x00001cbdu, 0x000700f5u, 0x00000008u, 0x0000edb5u, 0x0000edbbu, 0x00001c83u, 0x00001cd9u, 0x00001cbcu, 0x000700f5u, 0x00000006u, 0x0000ed0au, 0x00001cb4u, 0x00001c83u, 0x00001cd8u, 0x00001cbcu, 0x000700f5u, 0x00000006u, 0x0000ec6cu, 0x00001cb0u, 0x00001c83u, 0x00001cd7u, 0x00001cbcu, 0x000300f7u, 0x00001cdcu, 0x00000000u, 0x000400fau, 0x00001ba8u, 0x00001cdbu, 0x00001cdcu, 0x000200f8u, 0x00001cdbu, 0x0004003du, 0x00000006u, 0x00001cdeu, 0x000001fdu, 0x00080041u, 0x00000277u, 0x00001ce0u, 0x00000a0bu, 0x00000203u, 0x00001cdeu, 0x00000215u, 0x0000ec6cu, 0x0004003du, 0x00000229u, 0x00001ce1u, 0x00001ce0u, 0x00040071u, 0x00000006u, 0x00001ce2u, 0x00001ce1u, 0x0003003eu, 0x00001cddu, 0x00001ce2u, 0x0003003eu, 0x00001ce4u, 0x00001ce2u, 0x00050039u, 0x0000001eu, 0x00001ce6u, 0x00000021u, 0x00001ce4u, 0x00050051u, 0x00000006u, 0x00007969u, 0x00001ce6u, 0x00000000u, 0x0003003eu, 0x0000795bu, 0x00007969u, 0x00050051u, 0x00000006u, 0x0000796au, 0x00001ce6u, 0x00000001u, 0x0003003eu, 0x0000795cu, 0x0000796au, 0x00050051u, 0x00000006u, 0x0000796bu, 0x00001ce6u, 0x00000002u, 0x0003003eu, 0x0000795du, 0x0000796bu, 0x00050051u, 0x00000006u, 0x0000796cu, 0x00001ce6u, 0x00000003u, 0x0003003eu, 0x0000795eu, 0x0000796cu, 0x00050051u, 0x00000006u, 0x0000796du, 0x00001ce6u, 0x00000004u, 0x0003003eu, 0x0000795fu, 0x0000796du, 0x00050051u, 0x00000006u, 0x0000796eu, 0x00001ce6u, 0x00000005u, 0x0003003eu, 0x00007960u, 0x0000796eu, 0x00050051u, 0x00000008u, 0x0000796fu, 0x00001ce6u, 0x00000006u, 0x0003003eu, 0x00007961u, 0x0000796fu, 0x00050051u, 0x00000008u, 0x00007970u, 0x00001ce6u, 0x00000007u, 0x0003003eu, 0x00007962u, 0x00007970u, 0x00050051u, 0x00000008u, 0x00007971u, 0x00001ce6u, 0x00000008u, 0x0003003eu, 0x00007963u, 0x00007971u, 0x00050051u, 0x00000008u, 0x00007972u, 0x00001ce6u, 0x00000009u, 0x0003003eu, 0x00007964u, 0x00007972u, 0x00050051u, 0x00000008u, 0x00007973u, 0x00001ce6u, 0x0000000au, 0x0003003eu, 0x00007965u, 0x00007973u, 0x00050051u, 0x00000008u, 0x00007974u, 0x00001ce6u, 0x0000000bu, 0x0003003eu, 0x00007966u, 0x00007974u, 0x00050051u, 0x00000008u, 0x00007975u, 0x00001ce6u, 0x0000000cu, 0x0003003eu, 0x00007967u, 0x00007975u, 0x00050051u, 0x00000008u, 0x00007976u, 0x00001ce6u, 0x0000000du, 0x0003003eu, 0x00007968u, 0x00007976u, 0x0003003eu, 0x00001ce8u, 0x00001ce6u, 0x0003003eu, 0x00001ceau, 0x00001b42u, 0x0003003eu, 0x00001cecu, 0x00001ca9u, 0x0003003eu, 0x00001ceeu, 0x00001b5du, 0x0003003eu, 0x00001cf0u, 0x00001b61u, 0x0003003eu, 0x00001cf2u, 0x00001b66u, 0x0003003eu, 0x00001cf4u, 0x00001ba3u, 0x0003003eu, 0x00001cf6u, 0x00000543u, 0x0003003eu, 0x00001cf7u, 0x00000611u, 0x000d0039u, 0x00000009u, 0x00001cf8u, 0x000001adu, 0x00001ce8u, 0x00001ceau, 0x00001cecu, 0x00001ceeu, 0x00001cf0u, 0x00001cf2u, 0x00001cf4u, 0x00001cf6u, 0x00001cf7u, 0x0003003eu, 0x00001ce7u, 0x00001cf8u, 0x000400a8u, 0x0000005du, 0x00001cfau, 0x00001b66u, 0x000400a8u, 0x0000005du, 0x00001cfcu, 0x00001bc1u, 0x000500a7u, 0x0000005du, 0x00001cfdu, 0x00001cfau, 0x00001cfcu, 0x000300f7u, 0x00001cffu, 0x00000000u, 0x000400fau, 0x00001cfdu, 0x00001cfeu, 0x00001cffu, 0x000200f8u, 0x00001cfeu, 0x0003003eu, 0x00001d00u, 0x00001cf8u, 0x0003003eu, 0x00001d02u, 0x00007959u, 0x00060039u, 0x00000009u, 0x00001d05u, 0x000001c1u, 0x00001d00u, 0x00001d02u, 0x0003003eu, 0x00001ce7u, 0x00001d05u, 0x000200f9u, 0x00001cffu, 0x000200f8u, 0x00001cffu, 0x000700f5u, 0x00000009u, 0x0000ed3au, 0x00001cf8u, 0x00001cdbu, 0x00001d05u, 0x00001cfeu, 0x000200f9u, 0x00001cdcu, 0x000200f8u, 0x00001cdcu, 0x000700f5u, 0x00000009u, 0x0000ed30u, 0x0000ed37u, 0x00001cbdu, 0x0000ed3au, 0x00001cffu, 0x000300f7u, 0x00001d08u, 0x00000000u, 0x000400fau, 0x00001bb2u, 0x00001d07u, 0x00001d08u, 0x000200f8u, 0x00001d07u, 0x0004003du, 0x00000008u, 0x00001d0du, 0x000001fcu, 0x00050082u, 0x00000008u, 0x00001d11u, 0x00001d0du, 0x00001af2u, 0x00050080u, 0x00000008u, 0x00001d12u, 0x00001d11u, 0x00000212u, 0x00050080u, 0x00000008u, 0x00001d13u, 0x00001b1fu, 0x00001d12u, 0x00070041u, 0x00000270u, 0x00001d14u, 0x00000314u, 0x00000203u, 0x00001d13u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x00001d15u, 0x00001d14u, 0x00040071u, 0x00000006u, 0x00001d16u, 0x00001d15u, 0x000500abu, 0x0000005du, 0x00001d17u, 0x00001d16u, 0x00000374u, 0x0003003eu, 0x00001d09u, 0x00001d17u, 0x000500afu, 0x0000005du, 0x00001d1bu, 0x000078f9u, 0x0000025eu, 0x0003003eu, 0x00001d18u, 0x00001d1bu, 0x0004003du, 0x00000008u, 0x00001d1du, 0x000001fbu, 0x000300f7u, 0x00001d21u, 0x00000000u, 0x000400fau, 0x00001bddu, 0x00001d20u, 0x00001d24u, 0x000200f8u, 0x00001d20u, 0x0003003eu, 0x00001d1fu, 0x000078f8u, 0x000200f9u, 0x00001d21u, 0x000200f8u, 0x00001d24u, 0x0003003eu, 0x00001d1fu, 0x000078f7u, 0x000200f9u, 0x00001d21u, 0x000200f8u, 0x00001d21u, 0x000600a9u, 0x00000008u, 0x0000eeefu, 0x00001bddu, 0x000078f8u, 0x000078f7u, 0x000500aau, 0x0000005du, 0x00001d28u, 0x00001d1du, 0x0000eeefu, 0x0003003eu, 0x00001d1cu, 0x00001d28u, 0x000500a7u, 0x0000005du, 0x00001d2bu, 0x00001d28u, 0x00001d1bu, 0x000500a7u, 0x0000005du, 0x00001d2du, 0x00001d2bu, 0x00001d17u, 0x000300f7u, 0x00001d2fu, 0x00000000u, 0x000400fau, 0x00001d2du, 0x00001d2eu, 0x00001d4eu, 0x000200f8u, 0x00001d2eu, 0x0004003du, 0x00000008u, 0x00001d34u, 0x000001fcu, 0x00050082u, 0x00000008u, 0x00001d38u, 0x00001d34u, 0x00001af2u, 0x00050080u, 0x00000008u, 0x00001d39u, 0x00001d38u, 0x00000212u, 0x00050080u, 0x00000008u, 0x00001d3au, 0x00001b1fu, 0x00001d39u, 0x00070041u, 0x00000316u, 0x00001d3bu, 0x00000314u, 0x00000203u, 0x00001d3au, 0x00000212u, 0x0004003du, 0x00000009u, 0x00001d3cu, 0x00001d3bu, 0x0008004fu, 0x0000003cu, 0x00001d3du, 0x00001d3cu, 0x00001d3cu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x0000003cu, 0x00001d3fu, 0x00001d3du, 0x0000eeb3u, 0x0003003eu, 0x00001d30u, 0x00001d3fu, 0x000300f7u, 0x00001d42u, 0x00000000u, 0x000400fau, 0x00001b72u, 0x00001d41u, 0x00001d4au, 0x000200f8u, 0x00001d41u, 0x0003003eu, 0x00001d44u, 0x00001d3fu, 0x00060039u, 0x0000005fu, 0x00001d48u, 0x000000e9u, 0x00001d44u, 0x00001d46u, 0x0004003du, 0x0000005du, 0x00001d49u, 0x00001d46u, 0x0003003eu, 0x00001d43u, 0x00001d49u, 0x0003003eu, 0x00001c8bu, 0x00001d48u, 0x000200f9u, 0x00001d42u, 0x000200f8u, 0x00001d4au, 0x0003003eu, 0x00001d4bu, 0x00001d3fu, 0x00050039u, 0x0000005fu, 0x00001d4du, 0x000000e4u, 0x00001d4bu, 0x0003003eu, 0x00001c8bu, 0x00001d4du, 0x000200f9u, 0x00001d42u, 0x000200f8u, 0x00001d42u, 0x000700f5u, 0x0000005fu, 0x0000ed16u, 0x00001d48u, 0x00001d41u, 0x00001d4du, 0x00001d4au, 0x000200f9u, 0x00001d2fu, 0x000200f8u, 0x00001d4eu, 0x00050084u, 0x00000008u, 0x00001d51u, 0x00001c6cu, 0x00000880u, 0x00050080u, 0x00000008u, 0x00001d52u, 0x00001c69u, 0x00001d51u, 0x0003003eu, 0x00001d53u, 0x000078f3u, 0x0003003eu, 0x00001d56u, 0x0000790bu, 0x0003003eu, 0x00001d59u, 0x00001d52u, 0x0003003eu, 0x00001d5au, 0x00001b72u, 0x00080039u, 0x0000005fu, 0x00001d5cu, 0x00000103u, 0x00001d53u, 0x00001d56u, 0x00001d59u, 0x00001d5au, 0x0003003eu, 0x00001c8bu, 0x00001d5cu, 0x000200f9u, 0x00001d2fu, 0x000200f8u, 0x00001d2fu, 0x000700f5u, 0x0000005fu, 0x0000ed15u, 0x0000ed16u, 0x00001d42u, 0x00001d5cu, 0x00001d4eu, 0x0003003eu, 0x00001cb1u, 0x0000ec6cu, 0x0003003eu, 0x00001ba9u, 0x0000055eu, 0x000200f9u, 0x00001d08u, 0x000200f8u, 0x00001d08u, 0x000700f5u, 0x0000005fu, 0x0000ed12u, 0x00001ca9u, 0x00001cdcu, 0x0000ed15u, 0x00001d2fu, 0x000600a9u, 0x00000006u, 0x0000eef0u, 0x00001bb2u, 0x0000ec6cu, 0x0000ed0au, 0x000600a9u, 0x0000005du, 0x0000eef1u, 0x00001bb2u, 0x0000055eu, 0x00001badu, 0x000300f7u, 0x00001d60u, 0x00000000u, 0x000400fau, 0x0000eef1u, 0x00001d5fu, 0x00001d60u, 0x000200f8u, 0x00001d5fu, 0x000400a8u, 0x0000005du, 0x00001d63u, 0x00001bc6u, 0x000500a7u, 0x0000005du, 0x00001d64u, 0x00001bbcu, 0x00001d63u, 0x000300f7u, 0x00001d66u, 0x00000000u, 0x000400fau, 0x00001d64u, 0x00001d65u, 0x00001d6eu, 0x000200f8u, 0x00001d65u, 0x0003003eu, 0x00001d68u, 0x0000ed30u, 0x0003003eu, 0x00001d6au, 0x00007959u, 0x00060039u, 0x00000009u, 0x00001d6du, 0x000001c1u, 0x00001d68u, 0x00001d6au, 0x0003003eu, 0x00001d67u, 0x00001d6du, 0x000200f9u, 0x00001d66u, 0x000200f8u, 0x00001d6eu, 0x0004003du, 0x00000006u, 0x00001d70u, 0x000001fdu, 0x00080041u, 0x00000277u, 0x00001d72u, 0x00000a0bu, 0x00000203u, 0x00001d70u, 0x00000215u, 0x0000eef0u, 0x0004003du, 0x00000229u, 0x00001d73u, 0x00001d72u, 0x00040071u, 0x00000006u, 0x00001d74u, 0x00001d73u, 0x0003003eu, 0x00001d6fu, 0x00001d74u, 0x0003003eu, 0x00001d76u, 0x00001d74u, 0x00050039u, 0x0000001eu, 0x00001d78u, 0x00000021u, 0x00001d76u, 0x00050051u, 0x00000006u, 0x00007994u, 0x00001d78u, 0x00000000u, 0x0003003eu, 0x00007986u, 0x00007994u, 0x00050051u, 0x00000006u, 0x00007995u, 0x00001d78u, 0x00000001u, 0x0003003eu, 0x00007987u, 0x00007995u, 0x00050051u, 0x00000006u, 0x00007996u, 0x00001d78u, 0x00000002u, 0x0003003eu, 0x00007988u, 0x00007996u, 0x00050051u, 0x00000006u, 0x00007997u, 0x00001d78u, 0x00000003u, 0x0003003eu, 0x00007989u, 0x00007997u, 0x00050051u, 0x00000006u, 0x00007998u, 0x00001d78u, 0x00000004u, 0x0003003eu, 0x0000798au, 0x00007998u, 0x00050051u, 0x00000006u, 0x00007999u, 0x00001d78u, 0x00000005u, 0x0003003eu, 0x0000798bu, 0x00007999u, 0x00050051u, 0x00000008u, 0x0000799au, 0x00001d78u, 0x00000006u, 0x0003003eu, 0x0000798cu, 0x0000799au, 0x00050051u, 0x00000008u, 0x0000799bu, 0x00001d78u, 0x00000007u, 0x0003003eu, 0x0000798du, 0x0000799bu, 0x00050051u, 0x00000008u, 0x0000799cu, 0x00001d78u, 0x00000008u, 0x0003003eu, 0x0000798eu, 0x0000799cu, 0x00050051u, 0x00000008u, 0x0000799du, 0x00001d78u, 0x00000009u, 0x0003003eu, 0x0000798fu, 0x0000799du, 0x00050051u, 0x00000008u, 0x0000799eu, 0x00001d78u, 0x0000000au, 0x0003003eu, 0x00007990u, 0x0000799eu, 0x00050051u, 0x00000008u, 0x0000799fu, 0x00001d78u, 0x0000000bu, 0x0003003eu, 0x00007991u, 0x0000799fu, 0x00050051u, 0x00000008u, 0x000079a0u, 0x00001d78u, 0x0000000cu, 0x0003003eu, 0x00007992u, 0x000079a0u, 0x00050051u, 0x00000008u, 0x000079a1u, 0x00001d78u, 0x0000000du, 0x0003003eu, 0x00007993u, 0x000079a1u, 0x0003003eu, 0x00001d79u, 0x00001d78u, 0x0003003eu, 0x00001d7bu, 0x00001b42u, 0x0003003eu, 0x00001d7du, 0x0000ed12u, 0x0003003eu, 0x00001d7fu, 0x00001b5du, 0x0003003eu, 0x00001d81u, 0x00001b61u, 0x0003003eu, 0x00001d83u, 0x00001b66u, 0x0003003eu, 0x00001d85u, 0x00001ba3u, 0x0003003eu, 0x00001d87u, 0x00001bbcu, 0x0003003eu, 0x00001d89u, 0x0000ed30u, 0x000d0039u, 0x00000009u, 0x00001d8bu, 0x000001adu, 0x00001d79u, 0x00001d7bu, 0x00001d7du, 0x00001d7fu, 0x00001d81u, 0x00001d83u, 0x00001d85u, 0x00001d87u, 0x00001d89u, 0x0003003eu, 0x00001d67u, 0x00001d8bu, 0x000400a8u, 0x0000005du, 0x00001d8du, 0x00001b66u, 0x000400a8u, 0x0000005du, 0x00001d8fu, 0x00001b5du, 0x000500a7u, 0x0000005du, 0x00001d90u, 0x00001d8du, 0x00001d8fu, 0x000500a7u, 0x0000005du, 0x00001d93u, 0x00001d90u, 0x00001d63u, 0x000300f7u, 0x00001d95u, 0x00000000u, 0x000400fau, 0x00001d93u, 0x00001d94u, 0x00001d95u, 0x000200f8u, 0x00001d94u, 0x0003003eu, 0x00001d96u, 0x00001d8bu, 0x0003003eu, 0x00001d98u, 0x00007959u, 0x00060039u, 0x00000009u, 0x00001d9bu, 0x000001c1u, 0x00001d96u, 0x00001d98u, 0x0003003eu, 0x00001d67u, 0x00001d9bu, 0x000200f9u, 0x00001d95u, 0x000200f8u, 0x00001d95u, 0x000700f5u, 0x00000009u, 0x0000edb1u, 0x00001d8bu, 0x00001d6eu, 0x00001d9bu, 0x00001d94u, 0x000200f9u, 0x00001d66u, 0x000200f8u, 0x00001d66u, 0x000700f5u, 0x00000009u, 0x0000edb0u, 0x00001d6du, 0x00001d65u, 0x0000edb1u, 0x00001d95u, 0x000200f9u, 0x00001d60u, 0x000200f8u, 0x00001d60u, 0x000700f5u, 0x00000009u, 0x0000eda1u, 0x0000ed37u, 0x00001d08u, 0x0000edb0u, 0x00001d66u, 0x0004003du, 0x00000008u, 0x00001d9cu, 0x000001fcu, 0x000600a9u, 0x00000008u, 0x00001d9eu, 0x00001b8bu, 0x00000212u, 0x00000203u, 0x000500c3u, 0x00000008u, 0x00001d9fu, 0x00001d9cu, 0x00001d9eu, 0x000500c3u, 0x00000008u, 0x00001da1u, 0x00007918u, 0x00000215u, 0x000500c7u, 0x00000008u, 0x00001da3u, 0x00007918u, 0x00000218u, 0x0004003du, 0x00000008u, 0x00001da7u, 0x000001fbu, 0x0003003eu, 0x00001da6u, 0x00001da7u, 0x0003003eu, 0x00001da8u, 0x00001d9fu, 0x0003003eu, 0x00001da9u, 0x00001da1u, 0x0003003eu, 0x00001daau, 0x00001da3u, 0x000a0039u, 0x00000002u, 0x00001dadu, 0x0000004bu, 0x00001da6u, 0x00001da8u, 0x00001da9u, 0x00001daau, 0x00001dabu, 0x00001dacu, 0x0004003du, 0x00000008u, 0x00001daeu, 0x00001dabu, 0x0003003eu, 0x00001da4u, 0x00001daeu, 0x0004003du, 0x00000008u, 0x00001dafu, 0x00001dacu, 0x0003003eu, 0x00001da5u, 0x00001dafu, 0x000300f7u, 0x00001db2u, 0x00000000u, 0x000400fau, 0x00001b87u, 0x00001db1u, 0x00001e01u, 0x000200f8u, 0x00001db1u, 0x0004003du, 0x00000009u, 0x00001dbcu, 0x00001c6du, 0x00040039u, 0x00000008u, 0x00001dc0u, 0x00000034u, 0x000d0050u, 0x000001cdu, 0x00001dc1u, 0x0000794fu, 0x00007950u, 0x00007951u, 0x00007952u, 0x00001dbcu, 0x00000611u, 0x0000ed30u, 0x0000eda1u, 0x0000edb5u, 0x00001dc0u, 0x0003003eu, 0x000079b1u, 0x0000794fu, 0x0003003eu, 0x000079b2u, 0x00007950u, 0x0003003eu, 0x000079b3u, 0x00007951u, 0x0003003eu, 0x000079b4u, 0x00007952u, 0x0003003eu, 0x000079b5u, 0x00001dbcu, 0x0003003eu, 0x000079b6u, 0x00000611u, 0x0003003eu, 0x000079b7u, 0x0000ed30u, 0x0003003eu, 0x000079b8u, 0x0000eda1u, 0x0003003eu, 0x000079b9u, 0x0000edb5u, 0x0003003eu, 0x000079bau, 0x00001dc0u, 0x0003003eu, 0x00001dc3u, 0x00001dc1u, 0x0003003eu, 0x00001dc5u, 0x00007913u, 0x0003003eu, 0x00001dc7u, 0x00007914u, 0x0003003eu, 0x00001dc9u, 0x00001dafu, 0x0003003eu, 0x00001dcbu, 0x00001c55u, 0x0003003eu, 0x00001dcdu, 0x00001b6au, 0x0003003eu, 0x00001dcfu, 0x00001b6eu, 0x0003003eu, 0x00001dd1u, 0x00001b99u, 0x000d0039u, 0x00000009u, 0x00001dd4u, 0x000001eeu, 0x00001dc3u, 0x00001dc5u, 0x00001dc7u, 0x00001dc9u, 0x00001dcbu, 0x00001dcdu, 0x00001dcfu, 0x00001dd1u, 0x00001dd3u, 0x0004003du, 0x00000008u, 0x00001dd5u, 0x00001dd3u, 0x0003003eu, 0x00001dc2u, 0x00001dd5u, 0x0003003eu, 0x000079b6u, 0x00001dd4u, 0x0003003eu, 0x000079b1u, 0x00007953u, 0x0003003eu, 0x000079b2u, 0x00007954u, 0x0003003eu, 0x000079b3u, 0x00007955u, 0x0003003eu, 0x000079b4u, 0x00007956u, 0x0003003eu, 0x00001de3u, 0x0000ed30u, 0x0003003eu, 0x000079b7u, 0x0000eda1u, 0x0003003eu, 0x000079b8u, 0x0000ed30u, 0x000d0050u, 0x000001cdu, 0x000079dau, 0x00007953u, 0x00007954u, 0x00007955u, 0x00007956u, 0x00001dbcu, 0x00001dd4u, 0x0000eda1u, 0x0000ed30u, 0x0000edb5u, 0x00001dc0u, 0x0003003eu, 0x00001decu, 0x000079dau, 0x0003003eu, 0x00001deeu, 0x00007915u, 0x0003003eu, 0x00001df0u, 0x00007916u, 0x0003003eu, 0x00001df2u, 0x00001dafu, 0x0003003eu, 0x00001df4u, 0x00001c55u, 0x0003003eu, 0x00001df6u, 0x00001b6au, 0x0003003eu, 0x00001df8u, 0x00001b6eu, 0x000b0039u, 0x00000009u, 0x00001dfau, 0x000001f8u, 0x00001decu, 0x00001deeu, 0x00001df0u, 0x00001df2u, 0x00001df4u, 0x00001df6u, 0x00001df8u, 0x0004003du, 0x00000008u, 0x00001dfbu, 0x00001df4u, 0x0003003eu, 0x00001c53u, 0x00001dfbu, 0x00050051u, 0x00000008u, 0x00001dfcu, 0x00001dfau, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001dfdu, 0x00001dfau, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001dfeu, 0x00001dfau, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001dffu, 0x00001dfau, 0x00000003u, 0x0003003eu, 0x00001debu, 0x00001dfau, 0x000200f9u, 0x00001db2u, 0x000200f8u, 0x00001e01u, 0x0004003du, 0x00000009u, 0x00001e0bu, 0x00001c6du, 0x00040039u, 0x00000008u, 0x00001e0fu, 0x00000034u, 0x000d0050u, 0x000001cdu, 0x00001e10u, 0x00007953u, 0x00007954u, 0x00007955u, 0x00007956u, 0x00001e0bu, 0x00000611u, 0x0000ed30u, 0x0000eda1u, 0x0000edb5u, 0x00001e0fu, 0x0003003eu, 0x000079dbu, 0x00007953u, 0x0003003eu, 0x000079dcu, 0x00007954u, 0x0003003eu, 0x000079ddu, 0x00007955u, 0x0003003eu, 0x000079deu, 0x00007956u, 0x0003003eu, 0x000079dfu, 0x00001e0bu, 0x0003003eu, 0x000079e0u, 0x00000611u, 0x0003003eu, 0x000079e1u, 0x0000ed30u, 0x0003003eu, 0x000079e2u, 0x0000eda1u, 0x0003003eu, 0x000079e3u, 0x0000edb5u, 0x0003003eu, 0x000079e4u, 0x00001e0fu, 0x0003003eu, 0x00001e11u, 0x00001e10u, 0x0003003eu, 0x00001e13u, 0x00007915u, 0x0003003eu, 0x00001e15u, 0x00007916u, 0x0003003eu, 0x00001e17u, 0x00001dafu, 0x0003003eu, 0x00001e19u, 0x00001c55u, 0x0003003eu, 0x00001e1bu, 0x00001b6au, 0x0003003eu, 0x00001e1du, 0x00001b6eu, 0x000b0039u, 0x00000009u, 0x00001e1fu, 0x000001f8u, 0x00001e11u, 0x00001e13u, 0x00001e15u, 0x00001e17u, 0x00001e19u, 0x00001e1bu, 0x00001e1du, 0x0004003du, 0x00000008u, 0x00001e20u, 0x00001e19u, 0x0003003eu, 0x00001c53u, 0x00001e20u, 0x00050051u, 0x00000008u, 0x00001e21u, 0x00001e1fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001e22u, 0x00001e1fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001e23u, 0x00001e1fu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001e24u, 0x00001e1fu, 0x00000003u, 0x0003003eu, 0x00001debu, 0x00001e1fu, 0x00050041u, 0x0000003eu, 0x00001e26u, 0x00001debu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001e27u, 0x00001e26u, 0x0003003eu, 0x00001dc2u, 0x00001e27u, 0x000200f9u, 0x00001db2u, 0x000200f8u, 0x00001db2u, 0x000700f5u, 0x00000008u, 0x0000ee83u, 0x00001dd5u, 0x00001db1u, 0x00001e27u, 0x00001e01u, 0x000700f5u, 0x00000008u, 0x0000ee71u, 0x00001dfbu, 0x00001db1u, 0x00001e20u, 0x00001e01u, 0x000500aau, 0x0000005du, 0x00001e2au, 0x0000ee71u, 0x00000203u, 0x000500a7u, 0x0000005du, 0x00001e2bu, 0x00001b83u, 0x00001e2au, 0x000300f7u, 0x00001e2du, 0x00000000u, 0x000400fau, 0x00001e2bu, 0x00001e2cu, 0x00001e2du, 0x000200f8u, 0x00001e2cu, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001e2du, 0x000300f7u, 0x00001e31u, 0x00000000u, 0x000400fau, 0x00001b99u, 0x00001e30u, 0x00001e31u, 0x000200f8u, 0x00001e30u, 0x000300f7u, 0x00001e34u, 0x00000000u, 0x000400fau, 0x00001b9eu, 0x00001e33u, 0x00001e37u, 0x000200f8u, 0x00001e33u, 0x00040039u, 0x00000008u, 0x00001e36u, 0x0000003au, 0x0003003eu, 0x00001e35u, 0x00001e36u, 0x000200f9u, 0x00001e34u, 0x000200f8u, 0x00001e37u, 0x00050041u, 0x0000003eu, 0x0000795au, 0x0000794cu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001e39u, 0x0000795au, 0x0003003eu, 0x00001e35u, 0x00001e39u, 0x000200f9u, 0x00001e34u, 0x000200f8u, 0x00001e34u, 0x000700f5u, 0x00000008u, 0x0000ee84u, 0x00001e36u, 0x00001e33u, 0x00001e39u, 0x00001e37u, 0x000500b1u, 0x0000005du, 0x00001e3cu, 0x0000ee83u, 0x0000ee84u, 0x000300f7u, 0x00001e3eu, 0x00000000u, 0x000400fau, 0x00001e3cu, 0x00001e3du, 0x00001e3eu, 0x000200f8u, 0x00001e3du, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x00000543u, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001e3eu, 0x000200f9u, 0x00001e31u, 0x000200f8u, 0x00001e31u, 0x0004003du, 0x00000009u, 0x00001e40u, 0x00001debu, 0x00050041u, 0x0000005cu, 0x00001e41u, 0x000001feu, 0x00000203u, 0x0003003eu, 0x00001e41u, 0x00001e40u, 0x000500c4u, 0x00000008u, 0x00001e43u, 0x00001cacu, 0x00000264u, 0x000500c5u, 0x00000008u, 0x00001e45u, 0x00001e43u, 0x00001daeu, 0x00050041u, 0x0000003eu, 0x00001e46u, 0x000001feu, 0x00000212u, 0x0003003eu, 0x00001e46u, 0x00001e45u, 0x00050041u, 0x0000003eu, 0x00001e48u, 0x000001feu, 0x00000215u, 0x0003003eu, 0x00001e48u, 0x0000ee71u, 0x00050041u, 0x0000003eu, 0x00001e49u, 0x00001c6du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001e4au, 0x00001e49u, 0x00050080u, 0x00000008u, 0x00001e4cu, 0x00001e4au, 0x00001dafu, 0x0007000cu, 0x00000008u, 0x00001e4du, 0x00000001u, 0x00000027u, 0x00001e4cu, 0x0000038bu, 0x00050041u, 0x0000003eu, 0x00001e4eu, 0x000001feu, 0x00000218u, 0x0003003eu, 0x00001e4eu, 0x00001e4du, 0x0003003eu, 0x00001f20u, 0x0000055eu, 0x0003003eu, 0x00001f1du, 0x0000055eu, 0x000200f9u, 0x00001f1cu, 0x000200f8u, 0x00001f1cu, 0x001900f5u, 0x0000005du, 0x0000eeadu, 0x00000543u, 0x00001affu, 0x00000543u, 0x00001b2cu, 0x00000543u, 0x00001befu, 0x00000543u, 0x00001c2fu, 0x0000055eu, 0x00001c30u, 0x00001c42u, 0x00001c3du, 0x00000543u, 0x00001c50u, 0x00000543u, 0x00001c5eu, 0x00000543u, 0x00001e2cu, 0x00000543u, 0x00001e3du, 0x0000055eu, 0x00001e31u, 0x000200feu, 0x0000eeadu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000ef20u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x0000003du, 0x00020011u, 0x0000003fu, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00001e61u, 0x00001e6bu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000204u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000204u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000204u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000204u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000204u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000204u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000204u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000204u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000205u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000206u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000206u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000206u, 0x00000002u, 0x00040047u, 0x00000208u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000208u, 0x00000021u, 0x00000001u, 0x00050048u, 0x0000022eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000022eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000022eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000022eu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000022eu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000022eu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000022eu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000022eu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000022eu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000022eu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x0000022eu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x0000022eu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x0000022eu, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x0000022eu, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x0000022eu, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x0000022fu, 0x00000006u, 0x00000038u, 0x00040048u, 0x00000230u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000230u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000230u, 0x00000002u, 0x00040047u, 0x00000232u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000232u, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000028bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000028bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000028bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000028bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000028bu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000028bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000028bu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000028bu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000028cu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000028du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000028du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000028du, 0x00000002u, 0x00040047u, 0x0000028fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000028fu, 0x00000021u, 0x00000004u, 0x00050048u, 0x000002aeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002aeu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002aeu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002aeu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000002aeu, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x000002aeu, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x000002aeu, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x000002afu, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002b0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b0u, 0x00000002u, 0x00040047u, 0x000002b2u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002b2u, 0x00000021u, 0x00000005u, 0x00050048u, 0x000002cdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002cdu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002cdu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002cdu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000002cdu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000002cdu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000002cdu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000002cdu, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x000002cdu, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x000002cdu, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x000002cdu, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000002cdu, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x000002cdu, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x000002cdu, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x000002ceu, 0x00000006u, 0x00000020u, 0x00040048u, 0x000002cfu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002cfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002cfu, 0x00000002u, 0x00040047u, 0x000002d1u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002d1u, 0x00000021u, 0x00000007u, 0x00050048u, 0x00000310u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000310u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000310u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000310u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000310u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000310u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000310u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000310u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000310u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000311u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000312u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000312u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000312u, 0x00000002u, 0x00040047u, 0x00000314u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000314u, 0x00000021u, 0x00000008u, 0x00050048u, 0x0000033du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000033du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000033du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000033du, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x0000033eu, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000033fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000033fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000033fu, 0x00000002u, 0x00040047u, 0x00000341u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000341u, 0x00000021u, 0x00000009u, 0x00040047u, 0x00000504u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000504u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000657u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000065du, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000666u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000667u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000667u, 0x00000002u, 0x00040047u, 0x00000669u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000669u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000675u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000676u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000676u, 0x00000002u, 0x00040047u, 0x00000678u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000678u, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000068au, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000068bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000068bu, 0x00000002u, 0x00040047u, 0x0000068du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000068du, 0x00000021u, 0x00000000u, 0x00040047u, 0x000006d3u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000006d4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000006d4u, 0x00000002u, 0x00040047u, 0x000006d6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000006d6u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000078au, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000850u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000a14u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000a15u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000a15u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000a15u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000a16u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000a17u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a17u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a17u, 0x00000002u, 0x00040047u, 0x00000a19u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000a19u, 0x00000021u, 0x00000006u, 0x00050048u, 0x00000cccu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000cccu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000cccu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000cccu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000ccdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000ccdu, 0x00000002u, 0x00040047u, 0x00000ccfu, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000ccfu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000e6eu, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000e6fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000e70u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000e71u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000e71u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000e71u, 0x00000002u, 0x00040047u, 0x00000e73u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000e73u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000f35u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000f36u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000f37u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000f38u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000f38u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000f38u, 0x00000002u, 0x00040047u, 0x00000f3au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000f3au, 0x00000021u, 0x00000002u, 0x00050048u, 0x00001b11u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001b11u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001b11u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001b11u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001b11u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00001b11u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00001b11u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00001b11u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00001b11u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00001b11u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00001b11u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00001b12u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00001b13u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001b13u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001b13u, 0x00000002u, 0x00040047u, 0x00001b15u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001b15u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00001e61u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00001e6bu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00001e74u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00001e75u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00001e76u, 0x00000001u, 0x00000004u, 0x00040047u, 0x00001e77u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00001e7fu, 0x00000001u, 0x00000005u, 0x00040047u, 0x00001e83u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001e84u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001e84u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001e84u, 0x00000002u, 0x00040047u, 0x00001e86u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001e86u, 0x00000021u, 0x0000000cu, 0x00050048u, 0x00001e8au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001e8au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001e8au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001e8au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001e8au, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x00001e8au, 0x00000002u, 0x00040047u, 0x00001eb7u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001eb8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001eb8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001eb8u, 0x00000002u, 0x00040047u, 0x00001ebau, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001ebau, 0x00000021u, 0x0000000bu, 0x00040047u, 0x00001f23u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001f24u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001f24u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001f24u, 0x00000002u, 0x00040047u, 0x00001f26u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001f26u, 0x00000021u, 0x00000003u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x0011001eu, 0x0000000fu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000009u, 0x00040021u, 0x00000010u, 0x0000000fu, 0x00000007u, 0x000a001eu, 0x00000014u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x0009001eu, 0x00000019u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001au, 0x00000019u, 0x00000007u, 0x0010001eu, 0x0000001eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001fu, 0x0000001eu, 0x00000007u, 0x000b001eu, 0x00000023u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000024u, 0x00000023u, 0x00000007u, 0x0006001eu, 0x00000028u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000029u, 0x00000028u, 0x00000007u, 0x00060021u, 0x0000002du, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030021u, 0x00000033u, 0x00000008u, 0x00040017u, 0x0000003cu, 0x00000008u, 0x00000003u, 0x00040020u, 0x0000003du, 0x00000007u, 0x0000003cu, 0x00040020u, 0x0000003eu, 0x00000007u, 0x00000008u, 0x00050021u, 0x0000003fu, 0x0000003cu, 0x0000003du, 0x0000003eu, 0x00090021u, 0x00000044u, 0x00000002u, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00040021u, 0x0000004du, 0x00000008u, 0x0000003eu, 0x0007001eu, 0x0000005au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00040020u, 0x0000005bu, 0x00000007u, 0x0000005au, 0x00040020u, 0x0000005cu, 0x00000007u, 0x00000009u, 0x00020014u, 0x0000005du, 0x00040020u, 0x0000005eu, 0x00000007u, 0x0000005du, 0x00040017u, 0x0000005fu, 0x00000008u, 0x00000002u, 0x00040020u, 0x00000060u, 0x00000007u, 0x0000005fu, 0x000b0021u, 0x00000061u, 0x0000003cu, 0x0000005bu, 0x0000005cu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00000060u, 0x0000005eu, 0x00110021u, 0x0000006fu, 0x0000005du, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00000060u, 0x00060021u, 0x00000080u, 0x00000008u, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x00070021u, 0x00000086u, 0x00000008u, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000003eu, 0x00050021u, 0x0000008du, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x000000a2u, 0x00000006u, 0x00000002u, 0x00040020u, 0x000000a3u, 0x00000007u, 0x000000a2u, 0x00080021u, 0x000000a4u, 0x00000002u, 0x000000a3u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x000000acu, 0x00000002u, 0x000000a3u, 0x00000007u, 0x00040021u, 0x000000b8u, 0x00000009u, 0x0000005eu, 0x00040021u, 0x000000bcu, 0x00000002u, 0x0000005cu, 0x00040021u, 0x000000c4u, 0x00000002u, 0x00000007u, 0x0006001eu, 0x000000c8u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x000000c9u, 0x00000007u, 0x000000c8u, 0x00070021u, 0x000000cau, 0x00000002u, 0x0000003eu, 0x0000003eu, 0x00000007u, 0x000000c9u, 0x00040021u, 0x000000d1u, 0x00000009u, 0x0000005cu, 0x00040021u, 0x000000deu, 0x0000005fu, 0x0000003eu, 0x00040021u, 0x000000e2u, 0x0000005fu, 0x0000003du, 0x00050021u, 0x000000e6u, 0x0000005fu, 0x0000003du, 0x0000005eu, 0x00080021u, 0x000000ebu, 0x00000009u, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x00040020u, 0x000000f3u, 0x00000007u, 0x00000023u, 0x000a0021u, 0x000000f4u, 0x00000002u, 0x000000f3u, 0x0000005cu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x00000060u, 0x0000003eu, 0x00070021u, 0x000000feu, 0x0000005fu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000005eu, 0x00100021u, 0x00000105u, 0x00000002u, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x0000003eu, 0x00000060u, 0x00000060u, 0x00000060u, 0x0000003eu, 0x0000005eu, 0x00040020u, 0x00000115u, 0x00000007u, 0x0000001eu, 0x00050021u, 0x00000116u, 0x00000008u, 0x00000115u, 0x0000003eu, 0x00050021u, 0x0000011bu, 0x0000005fu, 0x00000115u, 0x0000003eu, 0x00040021u, 0x00000124u, 0x00000009u, 0x00000007u, 0x00060021u, 0x0000012bu, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00070021u, 0x00000136u, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00000007u, 0x000a0021u, 0x0000013du, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00000007u, 0x00000007u, 0x00000007u, 0x0000005eu, 0x00090021u, 0x00000147u, 0x00000009u, 0x00000115u, 0x00000007u, 0x000000a3u, 0x00000007u, 0x00000007u, 0x0000005eu, 0x00080021u, 0x0000017cu, 0x00000008u, 0x0000005eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00060021u, 0x00000184u, 0x00000008u, 0x0000003eu, 0x0000003eu, 0x0000003eu, 0x00090021u, 0x0000018au, 0x00000008u, 0x00000115u, 0x00000007u, 0x00000060u, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x00080021u, 0x0000019bu, 0x0000005fu, 0x00000060u, 0x00000060u, 0x00000060u, 0x00000060u, 0x00000060u, 0x000c0021u, 0x000001a3u, 0x00000009u, 0x00000115u, 0x00000007u, 0x00000060u, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005cu, 0x000f0021u, 0x000001afu, 0x00000002u, 0x00000007u, 0x00000007u, 0x0000003eu, 0x00000007u, 0x0000003eu, 0x00000060u, 0x00000060u, 0x00000060u, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x00050021u, 0x000001beu, 0x00000009u, 0x0000005cu, 0x0000005cu, 0x00070021u, 0x000001c6u, 0x00000009u, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x000c001eu, 0x000001cdu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00040020u, 0x000001ceu, 0x00000007u, 0x000001cdu, 0x00060021u, 0x000001cfu, 0x00000009u, 0x000001ceu, 0x0000003eu, 0x0000003eu, 0x000c0021u, 0x000001e4u, 0x00000009u, 0x000001ceu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x0000005eu, 0x0000003eu, 0x000a0021u, 0x000001f0u, 0x00000009u, 0x000001ceu, 0x0000005cu, 0x0000005cu, 0x0000003eu, 0x0000003eu, 0x0000005eu, 0x0000005eu, 0x00070021u, 0x000001fau, 0x0000005du, 0x0000003eu, 0x0000003eu, 0x00000007u, 0x000000c9u, 0x00040020u, 0x00000201u, 0x00000006u, 0x00000008u, 0x0004003bu, 0x00000201u, 0x00000202u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000203u, 0x00000000u, 0x000a001eu, 0x00000204u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000205u, 0x00000204u, 0x0003001eu, 0x00000206u, 0x00000205u, 0x00040020u, 0x00000207u, 0x0000000cu, 0x00000206u, 0x0004003bu, 0x00000207u, 0x00000208u, 0x0000000cu, 0x00040020u, 0x0000020au, 0x0000000cu, 0x00000204u, 0x00040020u, 0x0000020du, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x00000212u, 0x00000001u, 0x0004002bu, 0x00000008u, 0x00000215u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x00000218u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x0000021bu, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000021eu, 0x00000005u, 0x0004002bu, 0x00000008u, 0x00000221u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000224u, 0x00000007u, 0x00040015u, 0x00000229u, 0x00000008u, 0x00000000u, 0x00040017u, 0x0000022au, 0x00000229u, 0x00000004u, 0x00040015u, 0x0000022bu, 0x00000010u, 0x00000000u, 0x00040015u, 0x0000022cu, 0x00000010u, 0x00000001u, 0x00040017u, 0x0000022du, 0x0000022cu, 0x00000004u, 0x0011001eu, 0x0000022eu, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x00000006u, 0x0000022bu, 0x00000229u, 0x00000229u, 0x0000022du, 0x0003001du, 0x0000022fu, 0x0000022eu, 0x0003001eu, 0x00000230u, 0x0000022fu, 0x00040020u, 0x00000231u, 0x0000000cu, 0x00000230u, 0x0004003bu, 0x00000231u, 0x00000232u, 0x0000000cu, 0x00040020u, 0x00000234u, 0x0000000cu, 0x0000022au, 0x00040017u, 0x00000237u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000025eu, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000264u, 0x00000009u, 0x0004002bu, 0x00000008u, 0x0000026au, 0x0000000au, 0x00040020u, 0x0000026bu, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000026fu, 0x0000000bu, 0x00040020u, 0x00000270u, 0x0000000cu, 0x0000022bu, 0x0004002bu, 0x00000008u, 0x00000276u, 0x0000000cu, 0x00040020u, 0x00000277u, 0x0000000cu, 0x00000229u, 0x0004002bu, 0x00000008u, 0x0000027du, 0x0000000du, 0x0004002bu, 0x00000008u, 0x00000283u, 0x0000000eu, 0x00040020u, 0x00000284u, 0x0000000cu, 0x0000022du, 0x000a001eu, 0x0000028bu, 0x0000022au, 0x0000022au, 0x0000022au, 0x0000022au, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000028cu, 0x0000028bu, 0x0003001eu, 0x0000028du, 0x0000028cu, 0x00040020u, 0x0000028eu, 0x0000000cu, 0x0000028du, 0x0004003bu, 0x0000028eu, 0x0000028fu, 0x0000000cu, 0x00040020u, 0x000002a8u, 0x0000000cu, 0x00000008u, 0x0009001eu, 0x000002aeu, 0x0000022au, 0x0000022au, 0x00000006u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x0003001du, 0x000002afu, 0x000002aeu, 0x0003001eu, 0x000002b0u, 0x000002afu, 0x00040020u, 0x000002b1u, 0x0000000cu, 0x000002b0u, 0x0004003bu, 0x000002b1u, 0x000002b2u, 0x0000000cu, 0x0010001eu, 0x000002cdu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x00000229u, 0x0003001du, 0x000002ceu, 0x000002cdu, 0x0003001eu, 0x000002cfu, 0x000002ceu, 0x00040020u, 0x000002d0u, 0x0000000cu, 0x000002cfu, 0x0004003bu, 0x000002d0u, 0x000002d1u, 0x0000000cu, 0x00040017u, 0x0000030fu, 0x0000022bu, 0x00000004u, 0x000b001eu, 0x00000310u, 0x00000009u, 0x00000009u, 0x0000030fu, 0x0000030fu, 0x00000008u, 0x00000008u, 0x00000008u, 0x0000022cu, 0x0000022bu, 0x0003001du, 0x00000311u, 0x00000310u, 0x0003001eu, 0x00000312u, 0x00000311u, 0x00040020u, 0x00000313u, 0x0000000cu, 0x00000312u, 0x0004003bu, 0x00000313u, 0x00000314u, 0x0000000cu, 0x00040020u, 0x00000316u, 0x0000000cu, 0x00000009u, 0x00040020u, 0x0000031du, 0x0000000cu, 0x0000030fu, 0x00040020u, 0x00000331u, 0x0000000cu, 0x0000022cu, 0x0006001eu, 0x0000033du, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000033eu, 0x0000033du, 0x0003001eu, 0x0000033fu, 0x0000033eu, 0x00040020u, 0x00000340u, 0x0000000cu, 0x0000033fu, 0x0004003bu, 0x00000340u, 0x00000341u, 0x0000000cu, 0x00040020u, 0x00000343u, 0x0000000cu, 0x0000033du, 0x00040020u, 0x00000346u, 0x00000007u, 0x00000028u, 0x00040017u, 0x00000353u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000354u, 0x00000007u, 0x00000353u, 0x0004002bu, 0x00000006u, 0x0000035bu, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000361u, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x00000374u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000377u, 0x00000010u, 0x0004002bu, 0x00000008u, 0x0000037du, 0x00000020u, 0x0004002bu, 0x00000008u, 0x00000386u, 0x000001ffu, 0x0004002bu, 0x00000008u, 0x0000038bu, 0x000000ffu, 0x0006002cu, 0x0000003cu, 0x00000392u, 0x00000203u, 0x00000218u, 0x00000221u, 0x0004002bu, 0x00000008u, 0x00000398u, 0x000000f8u, 0x0006002cu, 0x0000003cu, 0x0000039du, 0x0000038bu, 0x0000038bu, 0x0000038bu, 0x0004002bu, 0x00000008u, 0x0000039fu, 0x000000f7u, 0x0006002cu, 0x0000003cu, 0x000003a0u, 0x0000039fu, 0x0000039fu, 0x0000039fu, 0x00040017u, 0x000003a1u, 0x0000005du, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000003aau, 0x0000001fu, 0x0004001cu, 0x000003c3u, 0x00000008u, 0x00000377u, 0x0004002bu, 0x00000006u, 0x000003c4u, 0x00000002u, 0x0004001cu, 0x000003c5u, 0x000003c3u, 0x000003c4u, 0x0013002cu, 0x000003c3u, 0x000003c6u, 0x00000203u, 0x00000221u, 0x00000212u, 0x00000224u, 0x0000021bu, 0x00000215u, 0x0000021eu, 0x00000218u, 0x00000218u, 0x0000021eu, 0x00000215u, 0x0000021bu, 0x00000224u, 0x00000212u, 0x00000221u, 0x00000203u, 0x0013002cu, 0x000003c3u, 0x000003c7u, 0x00000203u, 0x0000021bu, 0x00000212u, 0x0000021eu, 0x0000021bu, 0x00000203u, 0x0000021eu, 0x00000212u, 0x00000218u, 0x00000224u, 0x00000215u, 0x00000221u, 0x00000224u, 0x00000218u, 0x00000221u, 0x00000215u, 0x0005002cu, 0x000003c5u, 0x000003c8u, 0x000003c6u, 0x000003c7u, 0x00040020u, 0x000003d0u, 0x00000007u, 0x000003c5u, 0x0004002bu, 0x00000008u, 0x000003d4u, 0x00000049u, 0x0004002bu, 0x00000008u, 0x0000040au, 0x000007ffu, 0x0004002bu, 0x00000008u, 0x00000411u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x0000041du, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x00000422u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000485u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000048bu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000004cdu, 0x0000003cu, 0x00090019u, 0x00000502u, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000503u, 0x00000000u, 0x00000502u, 0x0004003bu, 0x00000503u, 0x00000504u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000540u, 0x0000000fu, 0x0003002au, 0x0000005du, 0x00000543u, 0x0004002bu, 0x00000008u, 0x00000553u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x00000559u, 0x00000010u, 0x00030029u, 0x0000005du, 0x0000055eu, 0x0004002bu, 0x00000008u, 0x0000055fu, 0x0000ffffu, 0x0007002cu, 0x00000009u, 0x000005f4u, 0x00000203u, 0x0000021bu, 0x00000215u, 0x00000221u, 0x00040017u, 0x000005f9u, 0x0000005du, 0x00000004u, 0x00040020u, 0x000005fau, 0x00000007u, 0x000005f9u, 0x0007002cu, 0x00000009u, 0x00000611u, 0x00000203u, 0x00000203u, 0x00000203u, 0x00000203u, 0x0007002cu, 0x00000009u, 0x00000612u, 0x00000212u, 0x00000212u, 0x00000212u, 0x00000212u, 0x0007002cu, 0x00000009u, 0x0000061fu, 0x00000212u, 0x00000215u, 0x0000021bu, 0x0000025eu, 0x0004002bu, 0x00000008u, 0x00000622u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x00000623u, 0x00000080u, 0x0007002cu, 0x00000009u, 0x00000624u, 0x00000559u, 0x0000037du, 0x00000622u, 0x00000623u, 0x00040032u, 0x00000008u, 0x00000657u, 0x00000000u, 0x00040032u, 0x00000006u, 0x0000065du, 0x00000000u, 0x00060034u, 0x00000006u, 0x0000065eu, 0x00000082u, 0x0000065du, 0x00000485u, 0x0003001du, 0x00000666u, 0x00000229u, 0x0003001eu, 0x00000667u, 0x00000666u, 0x00040020u, 0x00000668u, 0x0000000cu, 0x00000667u, 0x0004003bu, 0x00000668u, 0x00000669u, 0x0000000cu, 0x00040020u, 0x00000670u, 0x00000006u, 0x00000009u, 0x0004003bu, 0x00000670u, 0x00000671u, 0x00000006u, 0x0003001du, 0x00000675u, 0x00000229u, 0x0003001eu, 0x00000676u, 0x00000675u, 0x00040020u, 0x00000677u, 0x0000000cu, 0x00000676u, 0x0004003bu, 0x00000677u, 0x00000678u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000681u, 0x000000c2u, 0x0000065eu, 0x00000485u, 0x00060034u, 0x00000006u, 0x00000685u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x0003001du, 0x0000068au, 0x0000022bu, 0x0003001eu, 0x0000068bu, 0x0000068au, 0x00040020u, 0x0000068cu, 0x0000000cu, 0x0000068bu, 0x0004003bu, 0x0000068cu, 0x0000068du, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x0000069bu, 0x000000f8u, 0x00060034u, 0x00000006u, 0x000006b3u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x0004002bu, 0x00000006u, 0x000006c2u, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000006cau, 0x000000c2u, 0x0000065eu, 0x000003c4u, 0x00060034u, 0x00000006u, 0x000006ceu, 0x000000c2u, 0x0000065du, 0x00000215u, 0x0003001du, 0x000006d3u, 0x00000006u, 0x0003001eu, 0x000006d4u, 0x000006d3u, 0x00040020u, 0x000006d5u, 0x0000000cu, 0x000006d4u, 0x0004003bu, 0x000006d5u, 0x000006d6u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000006dcu, 0x00000018u, 0x0007002cu, 0x00000237u, 0x000006ddu, 0x000006dcu, 0x00000377u, 0x0000035bu, 0x00000374u, 0x0007002cu, 0x00000237u, 0x000006dfu, 0x000006c2u, 0x000006c2u, 0x000006c2u, 0x000006c2u, 0x0004003bu, 0x00000201u, 0x000006e7u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000006f4u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000701u, 0x00000004u, 0x0004003bu, 0x00000201u, 0x00000705u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000072eu, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000734u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x0000073fu, 0x00000007u, 0x00040020u, 0x00000751u, 0x00000006u, 0x0000005du, 0x0004003bu, 0x00000751u, 0x00000752u, 0x00000006u, 0x00060034u, 0x00000006u, 0x00000756u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00040032u, 0x00000008u, 0x0000078au, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000078bu, 0x000000c7u, 0x0000078au, 0x00000212u, 0x00060034u, 0x0000005du, 0x0000078cu, 0x000000abu, 0x0000078bu, 0x00000203u, 0x00060034u, 0x00000008u, 0x0000078du, 0x000000c3u, 0x0000078au, 0x00000212u, 0x00060034u, 0x0000005du, 0x0000078eu, 0x000000aau, 0x0000078du, 0x00000203u, 0x00060034u, 0x0000005du, 0x0000078fu, 0x000000a7u, 0x0000078cu, 0x0000078eu, 0x0004002bu, 0x00000006u, 0x00000792u, 0x00000048u, 0x00060034u, 0x00000006u, 0x000007bdu, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00040020u, 0x000007c1u, 0x00000007u, 0x00000237u, 0x00060034u, 0x00000006u, 0x000007ecu, 0x000000c2u, 0x0000065du, 0x00000485u, 0x0004002bu, 0x00000006u, 0x000007eeu, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x000007f5u, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00060034u, 0x00000006u, 0x00000814u, 0x000000c2u, 0x0000065du, 0x00000485u, 0x00060034u, 0x00000006u, 0x0000081cu, 0x000000c2u, 0x0000065du, 0x00000215u, 0x00060034u, 0x00000006u, 0x0000084au, 0x000000c2u, 0x0000065du, 0x000003c4u, 0x0004002bu, 0x00000006u, 0x0000084cu, 0xffffffffu, 0x00030031u, 0x0000005du, 0x00000850u, 0x00050034u, 0x0000005du, 0x00000851u, 0x000000a8u, 0x00000850u, 0x0004003bu, 0x00000751u, 0x00000854u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000085bu, 0x000000c2u, 0x0000065du, 0x00000212u, 0x00060034u, 0x00000006u, 0x00000871u, 0x000000c2u, 0x0000065du, 0x00000485u, 0x00040017u, 0x00000879u, 0x0000005du, 0x00000002u, 0x00060034u, 0x00000008u, 0x00000880u, 0x000000c4u, 0x00000212u, 0x0000078du, 0x00060034u, 0x00000008u, 0x00000881u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000006u, 0x00000882u, 0x00000080u, 0x00000881u, 0x00000374u, 0x00060034u, 0x00000006u, 0x0000088bu, 0x00000080u, 0x00000880u, 0x00000374u, 0x00040020u, 0x0000089bu, 0x00000006u, 0x00000006u, 0x0004003bu, 0x0000089bu, 0x0000089cu, 0x00000006u, 0x00060034u, 0x00000008u, 0x000008e3u, 0x00000084u, 0x00000880u, 0x00000880u, 0x00060034u, 0x00000006u, 0x000008e4u, 0x00000080u, 0x000008e3u, 0x00000374u, 0x00060034u, 0x00000006u, 0x000008e5u, 0x000000c2u, 0x0000065du, 0x00000215u, 0x00060034u, 0x00000006u, 0x000008e6u, 0x00000084u, 0x000008e4u, 0x000008e5u, 0x00060034u, 0x00000008u, 0x000008fau, 0x00000082u, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000006u, 0x000008fbu, 0x00000080u, 0x000008fau, 0x00000374u, 0x00060034u, 0x00000006u, 0x00000904u, 0x00000080u, 0x00000880u, 0x00000374u, 0x00060034u, 0x0000005du, 0x00000926u, 0x000000abu, 0x0000078du, 0x00000203u, 0x00060034u, 0x0000005du, 0x00000927u, 0x000000a7u, 0x0000078cu, 0x00000926u, 0x0004002bu, 0x00000008u, 0x00000936u, 0x000000e0u, 0x0006002cu, 0x0000003cu, 0x00000941u, 0x00000203u, 0x00000203u, 0x00000203u, 0x00060034u, 0x0000005du, 0x0000095au, 0x000000aau, 0x00000657u, 0x00000203u, 0x0004002bu, 0x00000006u, 0x0000097fu, 0x000000e0u, 0x0004001cu, 0x00000a14u, 0x00000229u, 0x0000035bu, 0x0005001eu, 0x00000a15u, 0x0000022au, 0x0000022au, 0x00000a14u, 0x0003001du, 0x00000a16u, 0x00000a15u, 0x0003001eu, 0x00000a17u, 0x00000a16u, 0x00040020u, 0x00000a18u, 0x0000000cu, 0x00000a17u, 0x0004003bu, 0x00000a18u, 0x00000a19u, 0x0000000cu, 0x00040020u, 0x00000a1eu, 0x00000007u, 0x0000000fu, 0x00040020u, 0x00000a23u, 0x00000007u, 0x00000019u, 0x0004002bu, 0x00000006u, 0x00000a3fu, 0x00000020u, 0x0004002bu, 0x00000006u, 0x00000a45u, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000a4bu, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000a51u, 0x00000100u, 0x0007002cu, 0x00000009u, 0x00000af5u, 0x0000038bu, 0x0000038bu, 0x0000038bu, 0x0000038bu, 0x0004002bu, 0x00000008u, 0x00000b0fu, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000b25u, 0x00003fffu, 0x0004001cu, 0x00000b2bu, 0x0000005fu, 0x00000a45u, 0x0004002bu, 0x00000008u, 0x00000b2cu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x00000b2du, 0xfffffc10u, 0x0005002cu, 0x0000005fu, 0x00000b2eu, 0x00000b2cu, 0x00000b2du, 0x0004002bu, 0x00000008u, 0x00000b2fu, 0x00003f04u, 0x0004002bu, 0x00000008u, 0x00000b30u, 0xfffffc30u, 0x0005002cu, 0x0000005fu, 0x00000b31u, 0x00000b2fu, 0x00000b30u, 0x0004002bu, 0x00000008u, 0x00000b32u, 0x00003e10u, 0x0004002bu, 0x00000008u, 0x00000b33u, 0xfffffc48u, 0x0005002cu, 0x0000005fu, 0x00000b34u, 0x00000b32u, 0x00000b33u, 0x0004002bu, 0x00000008u, 0x00000b35u, 0x00003d22u, 0x0004002bu, 0x00000008u, 0x00000b36u, 0xfffffc68u, 0x0005002cu, 0x0000005fu, 0x00000b37u, 0x00000b35u, 0x00000b36u, 0x0004002bu, 0x00000008u, 0x00000b38u, 0x00003c3cu, 0x0004002bu, 0x00000008u, 0x00000b39u, 0xfffffc84u, 0x0005002cu, 0x0000005fu, 0x00000b3au, 0x00000b38u, 0x00000b39u, 0x0004002bu, 0x00000008u, 0x00000b3bu, 0x00003b5du, 0x0004002bu, 0x00000008u, 0x00000b3cu, 0xfffffc98u, 0x0005002cu, 0x0000005fu, 0x00000b3du, 0x00000b3bu, 0x00000b3cu, 0x0004002bu, 0x00000008u, 0x00000b3eu, 0x00003a83u, 0x0004002bu, 0x00000008u, 0x00000b3fu, 0xfffffcb8u, 0x0005002cu, 0x0000005fu, 0x00000b40u, 0x00000b3eu, 0x00000b3fu, 0x0004002bu, 0x00000008u, 0x00000b41u, 0x000039b1u, 0x0004002bu, 0x00000008u, 0x00000b42u, 0xfffffcccu, 0x0005002cu, 0x0000005fu, 0x00000b43u, 0x00000b41u, 0x00000b42u, 0x0004002bu, 0x00000008u, 0x00000b44u, 0x000038e4u, 0x0004002bu, 0x00000008u, 0x00000b45u, 0xfffffce0u, 0x0005002cu, 0x0000005fu, 0x00000b46u, 0x00000b44u, 0x00000b45u, 0x0004002bu, 0x00000008u, 0x00000b47u, 0x0000381cu, 0x0004002bu, 0x00000008u, 0x00000b48u, 0xfffffcf8u, 0x0005002cu, 0x0000005fu, 0x00000b49u, 0x00000b47u, 0x00000b48u, 0x0004002bu, 0x00000008u, 0x00000b4au, 0x0000375au, 0x0004002bu, 0x00000008u, 0x00000b4bu, 0xfffffd0cu, 0x0005002cu, 0x0000005fu, 0x00000b4cu, 0x00000b4au, 0x00000b4bu, 0x0004002bu, 0x00000008u, 0x00000b4du, 0x0000369du, 0x0004002bu, 0x00000008u, 0x00000b4eu, 0xfffffd20u, 0x0005002cu, 0x0000005fu, 0x00000b4fu, 0x00000b4du, 0x00000b4eu, 0x0004002bu, 0x00000008u, 0x00000b50u, 0x000035e5u, 0x0004002bu, 0x00000008u, 0x00000b51u, 0xfffffd34u, 0x0005002cu, 0x0000005fu, 0x00000b52u, 0x00000b50u, 0x00000b51u, 0x0004002bu, 0x00000008u, 0x00000b53u, 0x00003532u, 0x0004002bu, 0x00000008u, 0x00000b54u, 0xfffffd44u, 0x0005002cu, 0x0000005fu, 0x00000b55u, 0x00000b53u, 0x00000b54u, 0x0004002bu, 0x00000008u, 0x00000b56u, 0x00003483u, 0x0004002bu, 0x00000008u, 0x00000b57u, 0xfffffd58u, 0x0005002cu, 0x0000005fu, 0x00000b58u, 0x00000b56u, 0x00000b57u, 0x0004002bu, 0x00000008u, 0x00000b59u, 0x000033d9u, 0x0004002bu, 0x00000008u, 0x00000b5au, 0xfffffd68u, 0x0005002cu, 0x0000005fu, 0x00000b5bu, 0x00000b59u, 0x00000b5au, 0x0004002bu, 0x00000008u, 0x00000b5cu, 0x00003333u, 0x0004002bu, 0x00000008u, 0x00000b5du, 0xfffffd78u, 0x0005002cu, 0x0000005fu, 0x00000b5eu, 0x00000b5cu, 0x00000b5du, 0x0004002bu, 0x00000008u, 0x00000b5fu, 0x00003291u, 0x0004002bu, 0x00000008u, 0x00000b60u, 0xfffffd8cu, 0x0005002cu, 0x0000005fu, 0x00000b61u, 0x00000b5fu, 0x00000b60u, 0x0004002bu, 0x00000008u, 0x00000b62u, 0x000031f4u, 0x0004002bu, 0x00000008u, 0x00000b63u, 0xfffffd94u, 0x0005002cu, 0x0000005fu, 0x00000b64u, 0x00000b62u, 0x00000b63u, 0x0004002bu, 0x00000008u, 0x00000b65u, 0x00003159u, 0x0004002bu, 0x00000008u, 0x00000b66u, 0xfffffda8u, 0x0005002cu, 0x0000005fu, 0x00000b67u, 0x00000b65u, 0x00000b66u, 0x0004002bu, 0x00000008u, 0x00000b68u, 0x000030c3u, 0x0004002bu, 0x00000008u, 0x00000b69u, 0xfffffdb4u, 0x0005002cu, 0x0000005fu, 0x00000b6au, 0x00000b68u, 0x00000b69u, 0x0004002bu, 0x00000008u, 0x00000b6bu, 0x00003030u, 0x0004002bu, 0x00000008u, 0x00000b6cu, 0xfffffdc4u, 0x0005002cu, 0x0000005fu, 0x00000b6du, 0x00000b6bu, 0x00000b6cu, 0x0004002bu, 0x00000008u, 0x00000b6eu, 0x00002fa1u, 0x0004002bu, 0x00000008u, 0x00000b6fu, 0xfffffdd0u, 0x0005002cu, 0x0000005fu, 0x00000b70u, 0x00000b6eu, 0x00000b6fu, 0x0004002bu, 0x00000008u, 0x00000b71u, 0x00002f15u, 0x0004002bu, 0x00000008u, 0x00000b72u, 0xfffffddcu, 0x0005002cu, 0x0000005fu, 0x00000b73u, 0x00000b71u, 0x00000b72u, 0x0004002bu, 0x00000008u, 0x00000b74u, 0x00002e8cu, 0x0004002bu, 0x00000008u, 0x00000b75u, 0xfffffde8u, 0x0005002cu, 0x0000005fu, 0x00000b76u, 0x00000b74u, 0x00000b75u, 0x0004002bu, 0x00000008u, 0x00000b77u, 0x00002e06u, 0x0004002bu, 0x00000008u, 0x00000b78u, 0xfffffdf4u, 0x0005002cu, 0x0000005fu, 0x00000b79u, 0x00000b77u, 0x00000b78u, 0x0004002bu, 0x00000008u, 0x00000b7au, 0x00002d83u, 0x0004002bu, 0x00000008u, 0x00000b7bu, 0xfffffe00u, 0x0005002cu, 0x0000005fu, 0x00000b7cu, 0x00000b7au, 0x00000b7bu, 0x0004002bu, 0x00000008u, 0x00000b7du, 0x00002d03u, 0x0004002bu, 0x00000008u, 0x00000b7eu, 0xfffffe0cu, 0x0005002cu, 0x0000005fu, 0x00000b7fu, 0x00000b7du, 0x00000b7eu, 0x0004002bu, 0x00000008u, 0x00000b80u, 0x00002c86u, 0x0004002bu, 0x00000008u, 0x00000b81u, 0xfffffe14u, 0x0005002cu, 0x0000005fu, 0x00000b82u, 0x00000b80u, 0x00000b81u, 0x0004002bu, 0x00000008u, 0x00000b83u, 0x00002c0bu, 0x0004002bu, 0x00000008u, 0x00000b84u, 0xfffffe20u, 0x0005002cu, 0x0000005fu, 0x00000b85u, 0x00000b83u, 0x00000b84u, 0x0004002bu, 0x00000008u, 0x00000b86u, 0x00002b93u, 0x0004002bu, 0x00000008u, 0x00000b87u, 0xfffffe2cu, 0x0005002cu, 0x0000005fu, 0x00000b88u, 0x00000b86u, 0x00000b87u, 0x0004002bu, 0x00000008u, 0x00000b89u, 0x00002b1eu, 0x0004002bu, 0x00000008u, 0x00000b8au, 0xfffffe34u, 0x0005002cu, 0x0000005fu, 0x00000b8bu, 0x00000b89u, 0x00000b8au, 0x0004002bu, 0x00000008u, 0x00000b8cu, 0x00002aabu, 0x0004002bu, 0x00000008u, 0x00000b8du, 0xfffffe3cu, 0x0005002cu, 0x0000005fu, 0x00000b8eu, 0x00000b8cu, 0x00000b8du, 0x0004002bu, 0x00000008u, 0x00000b8fu, 0x00002a3au, 0x0004002bu, 0x00000008u, 0x00000b90u, 0xfffffe48u, 0x0005002cu, 0x0000005fu, 0x00000b91u, 0x00000b8fu, 0x00000b90u, 0x0004002bu, 0x00000008u, 0x00000b92u, 0x000029ccu, 0x0004002bu, 0x00000008u, 0x00000b93u, 0xfffffe50u, 0x0005002cu, 0x0000005fu, 0x00000b94u, 0x00000b92u, 0x00000b93u, 0x0004002bu, 0x00000008u, 0x00000b95u, 0x00002960u, 0x0004002bu, 0x00000008u, 0x00000b96u, 0xfffffe58u, 0x0005002cu, 0x0000005fu, 0x00000b97u, 0x00000b95u, 0x00000b96u, 0x0004002bu, 0x00000008u, 0x00000b98u, 0x000028f6u, 0x0004002bu, 0x00000008u, 0x00000b99u, 0xfffffe60u, 0x0005002cu, 0x0000005fu, 0x00000b9au, 0x00000b98u, 0x00000b99u, 0x0004002bu, 0x00000008u, 0x00000b9bu, 0x0000288eu, 0x0004002bu, 0x00000008u, 0x00000b9cu, 0xfffffe68u, 0x0005002cu, 0x0000005fu, 0x00000b9du, 0x00000b9bu, 0x00000b9cu, 0x0004002bu, 0x00000008u, 0x00000b9eu, 0x00002828u, 0x0004002bu, 0x00000008u, 0x00000b9fu, 0xfffffe70u, 0x0005002cu, 0x0000005fu, 0x00000ba0u, 0x00000b9eu, 0x00000b9fu, 0x0004002bu, 0x00000008u, 0x00000ba1u, 0x000027c4u, 0x0004002bu, 0x00000008u, 0x00000ba2u, 0xfffffe78u, 0x0005002cu, 0x0000005fu, 0x00000ba3u, 0x00000ba1u, 0x00000ba2u, 0x0004002bu, 0x00000008u, 0x00000ba4u, 0x00002762u, 0x0004002bu, 0x00000008u, 0x00000ba5u, 0xfffffe80u, 0x0005002cu, 0x0000005fu, 0x00000ba6u, 0x00000ba4u, 0x00000ba5u, 0x0004002bu, 0x00000008u, 0x00000ba7u, 0x00002702u, 0x0004002bu, 0x00000008u, 0x00000ba8u, 0xfffffe88u, 0x0005002cu, 0x0000005fu, 0x00000ba9u, 0x00000ba7u, 0x00000ba8u, 0x0004002bu, 0x00000008u, 0x00000baau, 0x000026a4u, 0x0004002bu, 0x00000008u, 0x00000babu, 0xfffffe90u, 0x0005002cu, 0x0000005fu, 0x00000bacu, 0x00000baau, 0x00000babu, 0x0004002bu, 0x00000008u, 0x00000badu, 0x00002648u, 0x0004002bu, 0x00000008u, 0x00000baeu, 0xfffffe94u, 0x0005002cu, 0x0000005fu, 0x00000bafu, 0x00000badu, 0x00000baeu, 0x0004002bu, 0x00000008u, 0x00000bb0u, 0x000025edu, 0x0004002bu, 0x00000008u, 0x00000bb1u, 0xfffffe9cu, 0x0005002cu, 0x0000005fu, 0x00000bb2u, 0x00000bb0u, 0x00000bb1u, 0x0004002bu, 0x00000008u, 0x00000bb3u, 0x00002594u, 0x0004002bu, 0x00000008u, 0x00000bb4u, 0xfffffea4u, 0x0005002cu, 0x0000005fu, 0x00000bb5u, 0x00000bb3u, 0x00000bb4u, 0x0004002bu, 0x00000008u, 0x00000bb6u, 0x0000253du, 0x0004002bu, 0x00000008u, 0x00000bb7u, 0xfffffea8u, 0x0005002cu, 0x0000005fu, 0x00000bb8u, 0x00000bb6u, 0x00000bb7u, 0x0004002bu, 0x00000008u, 0x00000bb9u, 0x000024e7u, 0x0004002bu, 0x00000008u, 0x00000bbau, 0xfffffeacu, 0x0005002cu, 0x0000005fu, 0x00000bbbu, 0x00000bb9u, 0x00000bbau, 0x0004002bu, 0x00000008u, 0x00000bbcu, 0x00002492u, 0x0004002bu, 0x00000008u, 0x00000bbdu, 0xfffffeb4u, 0x0005002cu, 0x0000005fu, 0x00000bbeu, 0x00000bbcu, 0x00000bbdu, 0x0004002bu, 0x00000008u, 0x00000bbfu, 0x0000243fu, 0x0004002bu, 0x00000008u, 0x00000bc0u, 0xfffffebcu, 0x0005002cu, 0x0000005fu, 0x00000bc1u, 0x00000bbfu, 0x00000bc0u, 0x0004002bu, 0x00000008u, 0x00000bc2u, 0x000023eeu, 0x0004002bu, 0x00000008u, 0x00000bc3u, 0xfffffec0u, 0x0005002cu, 0x0000005fu, 0x00000bc4u, 0x00000bc2u, 0x00000bc3u, 0x0004002bu, 0x00000008u, 0x00000bc5u, 0x0000239eu, 0x0004002bu, 0x00000008u, 0x00000bc6u, 0xfffffec4u, 0x0005002cu, 0x0000005fu, 0x00000bc7u, 0x00000bc5u, 0x00000bc6u, 0x0004002bu, 0x00000008u, 0x00000bc8u, 0x0000234fu, 0x0004002bu, 0x00000008u, 0x00000bc9u, 0xfffffeccu, 0x0005002cu, 0x0000005fu, 0x00000bcau, 0x00000bc8u, 0x00000bc9u, 0x0004002bu, 0x00000008u, 0x00000bcbu, 0x00002302u, 0x0004002bu, 0x00000008u, 0x00000bccu, 0xfffffed0u, 0x0005002cu, 0x0000005fu, 0x00000bcdu, 0x00000bcbu, 0x00000bccu, 0x0004002bu, 0x00000008u, 0x00000bceu, 0x000022b6u, 0x0004002bu, 0x00000008u, 0x00000bcfu, 0xfffffed8u, 0x0005002cu, 0x0000005fu, 0x00000bd0u, 0x00000bceu, 0x00000bcfu, 0x0004002bu, 0x00000008u, 0x00000bd1u, 0x0000226cu, 0x0005002cu, 0x0000005fu, 0x00000bd2u, 0x00000bd1u, 0x00000bcfu, 0x0004002bu, 0x00000008u, 0x00000bd3u, 0x00002222u, 0x0004002bu, 0x00000008u, 0x00000bd4u, 0xfffffee0u, 0x0005002cu, 0x0000005fu, 0x00000bd5u, 0x00000bd3u, 0x00000bd4u, 0x0004002bu, 0x00000008u, 0x00000bd6u, 0x000021dau, 0x0004002bu, 0x00000008u, 0x00000bd7u, 0xfffffee4u, 0x0005002cu, 0x0000005fu, 0x00000bd8u, 0x00000bd6u, 0x00000bd7u, 0x0004002bu, 0x00000008u, 0x00000bd9u, 0x00002193u, 0x0004002bu, 0x00000008u, 0x00000bdau, 0xfffffee8u, 0x0005002cu, 0x0000005fu, 0x00000bdbu, 0x00000bd9u, 0x00000bdau, 0x0004002bu, 0x00000008u, 0x00000bdcu, 0x0000214du, 0x0004002bu, 0x00000008u, 0x00000bddu, 0xfffffeecu, 0x0005002cu, 0x0000005fu, 0x00000bdeu, 0x00000bdcu, 0x00000bddu, 0x0004002bu, 0x00000008u, 0x00000bdfu, 0x00002108u, 0x0004002bu, 0x00000008u, 0x00000be0u, 0xfffffef4u, 0x0005002cu, 0x0000005fu, 0x00000be1u, 0x00000bdfu, 0x00000be0u, 0x0004002bu, 0x00000008u, 0x00000be2u, 0x000020c5u, 0x0005002cu, 0x0000005fu, 0x00000be3u, 0x00000be2u, 0x00000be0u, 0x0004002bu, 0x00000008u, 0x00000be4u, 0x00002082u, 0x0004002bu, 0x00000008u, 0x00000be5u, 0xfffffefcu, 0x0005002cu, 0x0000005fu, 0x00000be6u, 0x00000be4u, 0x00000be5u, 0x0004002bu, 0x00000008u, 0x00000be7u, 0x00002041u, 0x0005002cu, 0x0000005fu, 0x00000be8u, 0x00000be7u, 0x00000be5u, 0x0043002cu, 0x00000b2bu, 0x00000be9u, 0x00000b2eu, 0x00000b31u, 0x00000b34u, 0x00000b37u, 0x00000b3au, 0x00000b3du, 0x00000b40u, 0x00000b43u, 0x00000b46u, 0x00000b49u, 0x00000b4cu, 0x00000b4fu, 0x00000b52u, 0x00000b55u, 0x00000b58u, 0x00000b5bu, 0x00000b5eu, 0x00000b61u, 0x00000b64u, 0x00000b67u, 0x00000b6au, 0x00000b6du, 0x00000b70u, 0x00000b73u, 0x00000b76u, 0x00000b79u, 0x00000b7cu, 0x00000b7fu, 0x00000b82u, 0x00000b85u, 0x00000b88u, 0x00000b8bu, 0x00000b8eu, 0x00000b91u, 0x00000b94u, 0x00000b97u, 0x00000b9au, 0x00000b9du, 0x00000ba0u, 0x00000ba3u, 0x00000ba6u, 0x00000ba9u, 0x00000bacu, 0x00000bafu, 0x00000bb2u, 0x00000bb5u, 0x00000bb8u, 0x00000bbbu, 0x00000bbeu, 0x00000bc1u, 0x00000bc4u, 0x00000bc7u, 0x00000bcau, 0x00000bcdu, 0x00000bd0u, 0x00000bd2u, 0x00000bd5u, 0x00000bd8u, 0x00000bdbu, 0x00000bdeu, 0x00000be1u, 0x00000be3u, 0x00000be6u, 0x00000be8u, 0x00040020u, 0x00000becu, 0x00000007u, 0x00000b2bu, 0x0004002bu, 0x00000008u, 0x00000c0bu, 0x00007fffu, 0x0004002bu, 0x00000008u, 0x00000c1du, 0x3fffffffu, 0x0004002bu, 0x00000008u, 0x00000c1eu, 0x20000000u, 0x0005002cu, 0x0000005fu, 0x00000c37u, 0x00000203u, 0x00000203u, 0x0004002bu, 0x00000008u, 0x00000c50u, 0xffff8000u, 0x0005002cu, 0x0000005fu, 0x00000c6au, 0x00000c0bu, 0x00000c0bu, 0x0004002bu, 0x00000008u, 0x00000c6cu, 0xffff0000u, 0x0005002cu, 0x0000005fu, 0x00000c6du, 0x00000c6cu, 0x00000c6cu, 0x0005002cu, 0x0000005fu, 0x00000c6eu, 0x0000055fu, 0x0000055fu, 0x0004002bu, 0x00000008u, 0x00000c73u, 0xffffffe0u, 0x00060034u, 0x00000008u, 0x00000c93u, 0x00000080u, 0x00000215u, 0x0000078du, 0x00060034u, 0x00000008u, 0x00000cb0u, 0x00000080u, 0x0000021bu, 0x0000078du, 0x0006001eu, 0x00000cccu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x00000ccdu, 0x00000cccu, 0x00040020u, 0x00000cceu, 0x00000002u, 0x00000ccdu, 0x0004003bu, 0x00000cceu, 0x00000ccfu, 0x00000002u, 0x00040020u, 0x00000cd0u, 0x00000002u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000cddu, 0xffffffffu, 0x00060034u, 0x0000005du, 0x00000d3cu, 0x000000adu, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000008u, 0x00000d92u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000008u, 0x00000da6u, 0x00000080u, 0x00000215u, 0x0000078du, 0x00060034u, 0x00000008u, 0x00000db6u, 0x00000080u, 0x0000021eu, 0x0000078du, 0x0005002cu, 0x0000005fu, 0x00000ddbu, 0x00000203u, 0x00000212u, 0x0004002bu, 0x00000006u, 0x00000e1fu, 0x0000000bu, 0x0006002cu, 0x00000353u, 0x00000e20u, 0x00000e1fu, 0x000006f4u, 0x00000485u, 0x0004002bu, 0x00000006u, 0x00000e22u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000e59u, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x00000e6du, 0x00001000u, 0x0004001cu, 0x00000e6eu, 0x00000229u, 0x00000e6du, 0x0003001eu, 0x00000e6fu, 0x00000e6eu, 0x0003001du, 0x00000e70u, 0x00000e6fu, 0x0003001eu, 0x00000e71u, 0x00000e70u, 0x00040020u, 0x00000e72u, 0x0000000cu, 0x00000e71u, 0x0004003bu, 0x00000e72u, 0x00000e73u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000e7cu, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000eb3u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000f0bu, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000f34u, 0x00000800u, 0x0004001cu, 0x00000f35u, 0x0000022bu, 0x00000f34u, 0x0003001eu, 0x00000f36u, 0x00000f35u, 0x0003001du, 0x00000f37u, 0x00000f36u, 0x0003001eu, 0x00000f38u, 0x00000f37u, 0x00040020u, 0x00000f39u, 0x0000000cu, 0x00000f38u, 0x0004003bu, 0x00000f39u, 0x00000f3au, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000f3cu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000fdau, 0xfffffffcu, 0x0004002bu, 0x00000008u, 0x00001140u, 0x000003ffu, 0x0004002bu, 0x00000006u, 0x000011adu, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00001253u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00001276u, 0x00000400u, 0x0004002bu, 0x00000008u, 0x00001365u, 0xffffff01u, 0x0005002cu, 0x0000005fu, 0x0000136fu, 0x00000559u, 0x00000559u, 0x0004002bu, 0x00000008u, 0x00001860u, 0xffffff00u, 0x0004002bu, 0x00000008u, 0x00001934u, 0x00000100u, 0x0006002cu, 0x0000003cu, 0x00001935u, 0x00001934u, 0x00001934u, 0x00001934u, 0x00060034u, 0x00000008u, 0x00001b09u, 0x00000082u, 0x00000880u, 0x00000212u, 0x000d001eu, 0x00001b11u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0000022cu, 0x0000022cu, 0x00000008u, 0x00000008u, 0x00000008u, 0x0000022cu, 0x00000229u, 0x00000229u, 0x0003001du, 0x00001b12u, 0x00001b11u, 0x0003001eu, 0x00001b13u, 0x00001b12u, 0x00040020u, 0x00001b14u, 0x0000000cu, 0x00001b13u, 0x0004003bu, 0x00001b14u, 0x00001b15u, 0x0000000cu, 0x00060034u, 0x0000005du, 0x00001b1au, 0x000000adu, 0x00000880u, 0x00000212u, 0x00060034u, 0x00000008u, 0x00001b22u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00050034u, 0x00000008u, 0x00001b23u, 0x000000c8u, 0x00001b22u, 0x00060034u, 0x00000008u, 0x00001b26u, 0x00000082u, 0x00000880u, 0x00000212u, 0x00050034u, 0x00000008u, 0x00001b27u, 0x000000c8u, 0x00001b26u, 0x00040020u, 0x00001b51u, 0x00000007u, 0x00000014u, 0x0004002bu, 0x00000006u, 0x00001b72u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00001b83u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00001ba0u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00001ba5u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00001baau, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00001bafu, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00001bb4u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00001bb9u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x00001bbeu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x00001bc3u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x00001bc8u, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00001bcdu, 0x00800000u, 0x0004002bu, 0x00000006u, 0x00001bd2u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x00001bd6u, 0x10000000u, 0x00040020u, 0x00001be0u, 0x00000002u, 0x00000006u, 0x00060034u, 0x0000005du, 0x00001c8du, 0x000000adu, 0x00000880u, 0x00000212u, 0x00040020u, 0x00001e60u, 0x00000001u, 0x00000353u, 0x0004003bu, 0x00001e60u, 0x00001e61u, 0x00000001u, 0x00040020u, 0x00001e62u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00001e60u, 0x00001e6bu, 0x00000001u, 0x00040032u, 0x00000008u, 0x00001e74u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00001e75u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00001e76u, 0x00000001u, 0x00060033u, 0x00000353u, 0x00001e77u, 0x00001e75u, 0x00001e76u, 0x00000485u, 0x00060034u, 0x00000006u, 0x00001e78u, 0x00000051u, 0x00001e77u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00001e79u, 0x00000080u, 0x00001e78u, 0x00000374u, 0x00060034u, 0x00000008u, 0x00001e7au, 0x00000087u, 0x00001e74u, 0x00001e79u, 0x00040032u, 0x00000008u, 0x00001e7fu, 0x00000100u, 0x00060034u, 0x00000008u, 0x00001e80u, 0x00000087u, 0x00001e7fu, 0x0000037du, 0x0003001du, 0x00001e83u, 0x00000006u, 0x0003001eu, 0x00001e84u, 0x00001e83u, 0x00040020u, 0x00001e85u, 0x0000000cu, 0x00001e84u, 0x0004003bu, 0x00001e85u, 0x00001e86u, 0x0000000cu, 0x0007001eu, 0x00001e8au, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00001e8bu, 0x00000009u, 0x00001e8au, 0x0004003bu, 0x00001e8bu, 0x00001e8cu, 0x00000009u, 0x00040020u, 0x00001e8du, 0x00000009u, 0x00000006u, 0x0003001du, 0x00001eb7u, 0x00000006u, 0x0003001eu, 0x00001eb8u, 0x00001eb7u, 0x00040020u, 0x00001eb9u, 0x0000000cu, 0x00001eb8u, 0x0004003bu, 0x00001eb9u, 0x00001ebau, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00001f15u, 0x00000200u, 0x0004002bu, 0x00000008u, 0x00001f16u, 0x00000800u, 0x0004002bu, 0x00000008u, 0x00001f17u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x00001f18u, 0x00002000u, 0x0004002bu, 0x00000008u, 0x00001f19u, 0x00010000u, 0x0004002bu, 0x00000008u, 0x00001f1au, 0x00080000u, 0x0004002bu, 0x00000008u, 0x00001f1bu, 0x00100000u, 0x0004002bu, 0x00000008u, 0x00001f1cu, 0x00200000u, 0x0004002bu, 0x00000008u, 0x00001f1du, 0x00400000u, 0x0004002bu, 0x00000008u, 0x00001f1eu, 0x00800000u, 0x0004002bu, 0x00000008u, 0x00001f1fu, 0x01000000u, 0x0004002bu, 0x00000008u, 0x00001f20u, 0x0000001au, 0x0004002bu, 0x00000008u, 0x00001f21u, 0x10000000u, 0x0004002bu, 0x00000008u, 0x00001f22u, 0x40000000u, 0x0003001du, 0x00001f23u, 0x00000009u, 0x0003001eu, 0x00001f24u, 0x00001f23u, 0x00040020u, 0x00001f25u, 0x0000000cu, 0x00001f24u, 0x0004003bu, 0x00001f25u, 0x00001f26u, 0x0000000cu, 0x0003002eu, 0x00000009u, 0x00006864u, 0x0003002eu, 0x00000006u, 0x00006867u, 0x0003002eu, 0x00000008u, 0x0000686au, 0x00030001u, 0x0000003cu, 0x00007aa7u, 0x00030001u, 0x0000005fu, 0x00007b7du, 0x00030001u, 0x00000009u, 0x000082a5u, 0x00030001u, 0x0000005du, 0x00008dabu, 0x00030001u, 0x00000008u, 0x0000a6d8u, 0x00030001u, 0x00000008u, 0x0000ea0fu, 0x00030001u, 0x0000003cu, 0x0000ea25u, 0x00030001u, 0x0000003cu, 0x0000ea4cu, 0x00030001u, 0x0000005du, 0x0000ea8bu, 0x00030001u, 0x0000005du, 0x0000ea8cu, 0x00030001u, 0x0000003cu, 0x0000ea91u, 0x00030001u, 0x00000009u, 0x0000eb3du, 0x00030001u, 0x0000005du, 0x0000ed0du, 0x00030001u, 0x00000009u, 0x0000ed63u, 0x00030001u, 0x00000008u, 0x0000ede7u, 0x0006002cu, 0x00000353u, 0x0000eedau, 0x0000069bu, 0x0000069bu, 0x0000069bu, 0x0005002cu, 0x000000a2u, 0x0000eedbu, 0x0000048bu, 0x0000048bu, 0x0006002cu, 0x00000353u, 0x0000eedcu, 0x0000035bu, 0x0000035bu, 0x0000035bu, 0x0006002cu, 0x00000353u, 0x0000eeddu, 0x00000361u, 0x00000361u, 0x00000361u, 0x0006002cu, 0x0000003cu, 0x0000eedeu, 0x00000c73u, 0x00000c73u, 0x00000c73u, 0x0006002cu, 0x0000003cu, 0x0000eedfu, 0x00000559u, 0x00000559u, 0x00000559u, 0x0007002cu, 0x00000009u, 0x0000eee0u, 0x00000c73u, 0x00000c73u, 0x00000c73u, 0x00000c73u, 0x0007002cu, 0x00000009u, 0x0000eee1u, 0x00000283u, 0x00000283u, 0x00000283u, 0x00000283u, 0x0007002cu, 0x00000009u, 0x0000eee2u, 0x00000623u, 0x00000623u, 0x00000623u, 0x00000623u, 0x0005002cu, 0x0000005fu, 0x0000eee3u, 0x00000212u, 0x00000212u, 0x0006002cu, 0x0000003cu, 0x0000eee4u, 0x00000c50u, 0x00000c50u, 0x00000c50u, 0x0005002cu, 0x0000005fu, 0x0000eee5u, 0x0000021eu, 0x0000021eu, 0x0005002cu, 0x0000005fu, 0x0000eee6u, 0x000003aau, 0x000003aau, 0x0005002cu, 0x000000a2u, 0x0000eee7u, 0x000011adu, 0x000011adu, 0x0005002cu, 0x000000a2u, 0x0000eee8u, 0x000003c4u, 0x000003c4u, 0x0006002cu, 0x00000353u, 0x0000eee9u, 0x00000e22u, 0x00000e22u, 0x00000e22u, 0x0006002cu, 0x00000353u, 0x0000eeeau, 0x0000048bu, 0x0000048bu, 0x0000048bu, 0x0006002cu, 0x00000353u, 0x0000eeebu, 0x000003c4u, 0x000003c4u, 0x000003c4u, 0x0007002cu, 0x00000009u, 0x0000eeecu, 0x00000215u, 0x00000215u, 0x00000215u, 0x00000215u, 0x0007002cu, 0x00000009u, 0x0000eeedu, 0x0000025eu, 0x0000025eu, 0x0000025eu, 0x0000025eu, 0x0005002cu, 0x0000005fu, 0x0000eeeeu, 0x0000037du, 0x0000037du, 0x0007002cu, 0x00000009u, 0x0000eeefu, 0x00000559u, 0x00000559u, 0x00000559u, 0x00000559u, 0x0007002cu, 0x00000009u, 0x0000eef0u, 0x0000021eu, 0x0000021eu, 0x0000021eu, 0x0000021eu, 0x0006002cu, 0x0000003cu, 0x0000eef1u, 0x00000398u, 0x00000398u, 0x00000398u, 0x0006002cu, 0x0000003cu, 0x0000eef2u, 0x00000224u, 0x00000224u, 0x00000224u, 0x0006002cu, 0x0000003cu, 0x0000eef3u, 0x0000025eu, 0x0000025eu, 0x0000025eu, 0x0006002cu, 0x0000003cu, 0x0000eef4u, 0x000003aau, 0x000003aau, 0x000003aau, 0x0006002cu, 0x0000003cu, 0x0000eef5u, 0x0000021eu, 0x0000021eu, 0x0000021eu, 0x0006002cu, 0x0000003cu, 0x0000eef6u, 0x00000215u, 0x00000215u, 0x00000215u, 0x0006002cu, 0x0000003cu, 0x0000eef7u, 0x0000040au, 0x0000040au, 0x0000040au, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000003eu, 0x000078b8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078b7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078b6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078b5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078afu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078aeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078adu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078acu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078a1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078a0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000789fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007868u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007867u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007866u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007865u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007864u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007863u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007862u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007861u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007860u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000785fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007849u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007848u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007847u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007846u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007845u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007844u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007843u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007842u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007841u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007840u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007809u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007808u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007807u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007806u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007805u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007804u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007803u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007802u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007801u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007800u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000077c9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000077c8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000077c0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000779fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000779eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000779du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000779cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000779bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000779au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007799u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007798u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007797u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007796u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007313u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007312u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007311u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007310u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000730fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000730eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000730du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000730cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000730bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000730au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007309u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007308u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007307u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007306u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000072e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000072dbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e58u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e57u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e56u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e55u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e54u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e53u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e52u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e2du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e2cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e2bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e2au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e29u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e28u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e27u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e20u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e13u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006e12u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e11u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e10u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e0fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e0eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e0du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e0cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e0bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e0au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006e09u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006de5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006de4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006de3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006de2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006de1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006de0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ddfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dbdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dbcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dbbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dbau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006db9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006db8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006db7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006db6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dacu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006dabu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006daau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006da3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006da1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006da0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d9fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d9eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d99u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d98u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d97u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d96u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d82u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d81u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d80u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d7fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d7eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d7au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d76u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d75u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d74u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d6au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d69u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d68u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d67u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d60u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d5fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d5eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d4au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d49u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d48u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d47u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d46u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d45u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d44u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d43u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d42u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d30u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d2fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d2eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d2du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d2cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d2bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d2au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d29u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d1fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d1eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d1du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d1cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d1bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d1au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d19u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d18u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d06u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d05u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006d04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d03u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d02u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d01u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006d00u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006cffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ce1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ce0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cdfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cdeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cddu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cdcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cdbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006cd4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cacu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006cabu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006caau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ca9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ca8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ca7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ca6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c7eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c7du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c7cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c7bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c78u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c75u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c74u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c71u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c70u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c6du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c6cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c69u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c68u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c65u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c64u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c60u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c5du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c5cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c58u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c38u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c37u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c36u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c34u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c33u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c32u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c31u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c30u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c2fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c2eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c2du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c2cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c2bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006c2au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c0cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c0bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c0au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c09u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c08u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c07u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c06u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006c05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bf8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bf7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bf4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bf3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bf0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006befu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006becu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006be0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006babu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006affu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006afcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006afbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006af0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ae0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006adfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006adcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006adbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ad8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ad7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ad4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ad3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ad0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006acfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ab1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006ab0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006aafu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006aaeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006aadu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006aacu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006aabu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006aaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006aa0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000699du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000699cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006999u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006998u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006995u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006994u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006991u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006990u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000698du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000698cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006989u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006988u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006985u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006984u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006981u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006980u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000697du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000697cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006979u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006978u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006975u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006974u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006969u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006968u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006967u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006966u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006965u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006958u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006957u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006956u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006955u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006954u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006953u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006946u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006945u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006944u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006943u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006942u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006936u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006935u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006934u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006933u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006932u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006931u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006926u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006925u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006924u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006923u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006922u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006915u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006914u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006913u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006912u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006911u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006910u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006903u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006902u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006901u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006900u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068ffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068f3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068f0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068efu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068eeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068e0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068dfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068d2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068d0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068cfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068ceu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068cdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068c0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068bfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068beu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068bdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068bcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068b0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068afu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068aeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068adu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068acu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068abu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000068a1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000068a0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000689fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000689eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000689du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006893u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006892u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006891u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006890u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000688fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000687du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000687cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000687bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000687au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006879u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006873u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006872u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006871u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006870u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000686fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006869u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006868u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006866u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006865u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006844u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006843u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006842u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006841u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006840u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000683fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000683eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000683du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000683cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000683bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000683au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006839u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006838u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006837u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006836u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006826u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006825u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006824u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006823u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006822u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006821u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006820u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000067e9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000067eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000067ebu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000067ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000067edu, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x000066fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066fdu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000066feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066ffu, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00006700u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006701u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066beu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000066bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000066c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000066c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006686u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00006687u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006688u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006689u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000665eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006646u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006647u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006648u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006649u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000664au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006625u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006626u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065fdu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065feu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000065ffu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006600u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006601u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x0000652du, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003du, 0x0000652eu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000652fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006530u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006531u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006532u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006533u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006534u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006535u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x0000645du, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003du, 0x0000645eu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000645fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006460u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006461u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006462u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006463u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006464u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006465u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006459u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006450u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000644du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006437u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006438u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006439u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000643au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000643bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000643cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006382u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006383u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006384u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006385u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006386u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006387u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006388u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006389u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000638au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000638bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000638cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000638du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000638eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000638fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006390u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006391u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006392u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006393u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006394u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006395u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006360u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006361u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006362u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006363u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000621fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006220u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006221u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006222u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006223u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006224u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006226u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006228u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006229u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000622au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000622bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000622cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000622du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000622eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000622fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006230u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006231u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006232u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006233u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006234u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006235u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006236u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006237u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006238u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006239u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000623au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000623bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000623cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000623du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000623eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000623fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006240u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006241u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006242u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006243u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006244u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006245u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006247u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006249u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000624au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000624bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000624cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000624du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000624eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000624fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006250u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006252u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006253u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006254u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006255u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006256u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00006257u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00006258u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006259u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000625au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000625bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000625cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000625du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000625eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000625fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006260u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006261u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061e7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000061e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061eau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000061aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000061b2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000061b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006176u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00006177u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006178u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060edu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060f6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060f7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000060e7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060d7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060d0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060c9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060c2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000609eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000609fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060a0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060a1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000060a2u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000606cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000606du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000606eu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00006020u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00006021u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00006022u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005fe7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005fe8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005fe9u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005fb1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005fb2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005fb3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f5bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f5cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f5du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f5fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f60u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f63u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f64u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f65u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f67u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f68u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f69u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f6au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f6bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f6cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f6du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f6eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f6fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f70u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f71u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005f54u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f44u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f3du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f36u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f2fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f0bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f0cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f0du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f0eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005f0fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005ed9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005edau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005edbu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005e8du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005e8eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005e8fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005e54u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005e55u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005e56u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005e1eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005e1fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005e20u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dc6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dcau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dccu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dcdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dceu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dd0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dd1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dd2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dd4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dd5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dd6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dd7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dd8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dd9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005ddau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005ddbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005ddcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dddu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005ddeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005dc0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005db9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005db2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005dabu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d87u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d88u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d89u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d8au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d8bu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005d55u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005d56u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d57u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005d09u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005d0au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005d0bu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005cd0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005cd1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005cd2u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00005c9au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c9bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c9cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c41u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c43u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c44u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c45u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c47u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c48u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c49u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c4bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c4cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c4du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c4fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c50u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c51u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c52u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c53u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c54u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c55u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c56u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c57u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c58u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c59u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005c5au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c3cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c39u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005c36u, 0x00000007u, 0x0004003bu, 0x000003d0u, 0x00005bfau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bfbu, 0x00000007u, 0x0004003bu, 0x000003d0u, 0x00005bfcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005bc2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bc3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bc4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bc5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005bc6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005bc7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005b89u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b8au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b8bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b8cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b8du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b8eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005b50u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b51u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b52u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b53u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b54u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00005b55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b2fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005b30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005b0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005aeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005ac7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a95u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a63u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a31u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059ffu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005a00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059d4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000059d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059aau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000059abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000597eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000597fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005980u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005981u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005954u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005955u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005956u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005957u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000592au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000592bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000592cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000592du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005900u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005901u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005902u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005903u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000058d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058aeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000058afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000589cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000589du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000589eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005877u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005878u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005879u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000587au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000587bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005867u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005868u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005869u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005842u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005843u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005844u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005845u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005846u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005832u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005833u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005834u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000580du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000580eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000580fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005810u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005811u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057feu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000057ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057dbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000057dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000057a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000576au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000576bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000576cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000576du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000576eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000576fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005733u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005734u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005735u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005736u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005737u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005738u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005700u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005701u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056bfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000056c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000567fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005639u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000563au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000563bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000563cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000563du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000563eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055fcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000055fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055d7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000055d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000055b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000558fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005590u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005591u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005592u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000556fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000553au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000553bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000553cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000553du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000553eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005508u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005509u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000550au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000550bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000550cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054d9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000054dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054a7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000054a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000547du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005450u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005452u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005453u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005426u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005427u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005428u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005429u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053feu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000053ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053b5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053b6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053b7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053b8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000053b9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000053bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005366u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005367u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005368u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005369u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000536au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000536bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000536cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000536du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000536eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000536fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005320u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005321u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005322u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00005323u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005324u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052d5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052d6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052d7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000052d8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000052d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000529au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000529bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000529cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000529du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000529eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005264u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005265u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005266u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005267u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005268u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000522eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000522fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005230u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005231u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005232u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051fbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051fcu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000051deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051dfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051bcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051bdu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000519fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000051a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000517eu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00005160u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005161u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005162u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000513bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000513cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000513du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000513eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000513fu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00005121u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005122u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005123u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050ffu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005100u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050dbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000050dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050b8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000050b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005093u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005094u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005095u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005096u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005070u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005071u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005072u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005073u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000503eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000503fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005040u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005041u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005042u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000500cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000500du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000500eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000500fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00005010u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fddu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004fdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fabu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004facu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004f8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f8fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f7fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f47u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f4au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f4bu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004f2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f2bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f1bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004f1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ee4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ee7u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004ec6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ec7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ec8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004eb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e7fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e82u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e83u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004e62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e63u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e53u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e1fu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004dfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dffu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004e00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004deeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004defu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004df0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004da5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004da6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004da7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004da8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004da9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004daau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dacu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004dadu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004d8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d8cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d7cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d36u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d39u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d3au, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d19u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d09u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004d0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004cc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004cc7u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004ca5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ca6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ca7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c96u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c50u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c53u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c54u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004c32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c33u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c23u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004c24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004be5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004be6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004be7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004be8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004be9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004beau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bebu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004becu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004bcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bccu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004bcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bbcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004bbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b81u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b84u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b85u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004b64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b65u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b55u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b1au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b1du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004b1eu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00004afdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004afeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004affu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004aeeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004aefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ab4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004ab7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a94u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a95u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a78u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a79u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a5cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a5du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a40u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a41u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004a11u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004a12u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000049e2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000049e3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000044e9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044eau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044ebu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044ecu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044edu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000044eeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044efu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000044f3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044f8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044fau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044fbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044fdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000044feu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004500u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004501u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004502u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004503u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004504u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004505u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004506u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004507u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004509u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000450au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000450du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000450eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000450fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004511u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004512u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004513u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004515u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004516u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004517u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004519u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000451au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000451eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000451fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004521u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004522u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004523u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004524u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004525u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004526u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004528u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004529u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000452cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000452fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004530u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004531u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004532u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004534u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004535u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004536u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004537u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000453bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000453eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004540u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004541u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004542u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004543u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004544u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004546u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004547u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004549u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000454au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000454cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000454du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000454eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000454fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004550u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004552u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004553u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004554u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004555u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004556u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004558u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004559u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000455cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000455fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004561u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004562u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004564u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004565u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004567u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004568u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000456au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000456bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000456du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000456eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004570u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004571u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004573u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004574u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004576u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004577u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004579u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000457au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000457cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000457du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000457fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004580u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004582u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004583u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004585u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004586u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004587u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004588u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000458bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000458fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004590u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004592u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004593u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004594u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004596u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004597u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004598u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000459bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000459fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045aau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045adu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045bcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045bfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045cbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045ceu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045dau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045ddu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045ecu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045efu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045fbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045feu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000045ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004601u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004602u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004604u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004605u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004607u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004608u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000460au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000460bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000460du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000460eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004610u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004611u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004613u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00004614u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004615u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004616u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004617u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004618u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004619u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000461au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000461bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000461cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000461du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000461eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000461fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004620u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004621u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004622u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004623u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004624u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004625u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004626u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004627u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004628u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004629u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004475u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004476u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004477u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004478u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004479u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000447au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004472u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000444fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004450u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004451u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004452u, 0x00000007u, 0x0004003bu, 0x00000becu, 0x00004453u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004454u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004455u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043ecu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000043edu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043eeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043efu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043f0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043f1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043f2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043f3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043f4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043f5u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000043cbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043ccu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000043cdu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000043ceu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000043cfu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000043d0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043d1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043c8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043a5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043a6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043a7u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043a8u, 0x00000007u, 0x0004003bu, 0x00000becu, 0x000043a9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000043aau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000043abu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004342u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00004343u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004344u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004345u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004346u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004347u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004348u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004349u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000434au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000434bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000430au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000430bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000430cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000430du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000430eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000430fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000042d1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042d2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042d3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042d4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042d5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000042d6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00004298u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00004299u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000429au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000429bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000429cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000429du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004275u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004276u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004277u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004278u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004252u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004253u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004254u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004255u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000422fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004230u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004231u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004232u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000420cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000420du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000420eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000420fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041ddu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000041deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041abu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000041acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004176u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004177u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004178u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004179u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000417au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004144u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004145u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004146u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004147u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004148u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000411du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000040f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040c8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000040c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000409cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000409du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000409eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000409fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004072u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004073u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004074u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004075u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004048u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004049u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000404au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000404bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000401eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000401fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004020u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00004021u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ff4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ff5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ff6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003ff7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fe4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fe5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fe6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fb0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003fb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f8du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f58u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f46u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f23u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003f24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ee9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eedu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003eeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003e80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e48u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003e49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e07u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003e08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d85u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003d86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d44u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003d45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d1fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003d20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cfcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003cfdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cd9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003cdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cb6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003cb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c85u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003c86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c53u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003c54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c21u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003c22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003becu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003beeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003befu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003bf0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003bc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b9au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b70u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b46u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003af9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003afau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003afbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003afcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003afdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003afeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003affu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003b00u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003b01u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003b02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ab0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ab1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ab2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003ab3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003ab4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003ab5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003ab6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003ab7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a67u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a68u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a69u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a6au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a6bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003a6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a1cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a1du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a1eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a1fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003a20u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003a21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039e5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000039e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039afu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000039b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003976u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003977u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003978u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003979u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000397au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003940u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003941u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003942u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003943u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003944u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003926u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003927u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003928u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003901u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003902u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003903u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003904u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003905u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000038e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038e8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000038e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000038c6u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000038a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000038aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003883u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003884u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003885u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003886u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003887u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003869u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000386au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000386bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003844u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003845u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003846u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003847u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003848u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003821u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003822u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003823u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003824u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003800u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003801u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037ddu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000037deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037bau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000037bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003786u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003787u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003788u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003789u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000378au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003754u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003755u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003756u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003757u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003758u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003722u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003723u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003724u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003725u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003726u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036f3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000036f4u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000036d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000036d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036c7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000036c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000368cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000368du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000368eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000368fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003690u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003691u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003692u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003693u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003672u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003673u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003674u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003662u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003663u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003664u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003628u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003629u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000362au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000362bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000362cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000362du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000362eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000362fu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000360eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000360fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003610u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035ffu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000035c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035cau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000035cbu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000035aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035abu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000035acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000359au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000359bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000359cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003560u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003561u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003562u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003563u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003564u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003565u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003566u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003567u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003546u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003547u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003536u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003537u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034f1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034f4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034f5u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000034d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000034c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000347au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000347bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000347cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000347du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000347eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000347fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003480u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003481u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003482u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003460u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003461u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003462u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003450u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003451u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003407u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003408u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003409u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000340au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000340bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000340cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000340du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000340eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000340fu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000033edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033eeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000033efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033deu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000033dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003394u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003395u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003396u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003397u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003398u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003399u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000339au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000339bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000339cu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x0000337au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000337bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000337cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000336au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000336bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000336cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000332du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000332eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000332fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003330u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003331u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003332u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003333u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003334u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003313u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003314u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003315u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003303u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003304u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003305u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032c9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032ccu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032cdu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x000032acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032adu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000032aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000329eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000325fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003260u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003261u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003262u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003263u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003264u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003265u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003266u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00003245u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003246u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003247u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003235u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003236u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00003237u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031fbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000031fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031feu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000031ffu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031dcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031ddu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031c0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031c1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031a4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000031a5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003188u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00003189u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00003159u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000315au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000312au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000312bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c31u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c32u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c33u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c34u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c35u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c36u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c37u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c38u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c39u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c3au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002c3bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c3cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c3du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c3fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c40u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c42u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c43u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c45u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c46u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c48u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002c49u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c4au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002c4bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002c4cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c51u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c55u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c56u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c59u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c5du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c5eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c61u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c65u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c66u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002c67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c69u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c6du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c70u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c73u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c76u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c79u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c82u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c85u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c88u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c8bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c8eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c91u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c94u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c97u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002c9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002c9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ca1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ca4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ca7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002caau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cacu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cafu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cb8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cbbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cbeu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc1u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc7u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ccau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ccbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ccdu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ccfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdeu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ce3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002ce7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ceau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ceeu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cf3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cf6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfeu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002cffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d01u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d04u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d07u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d10u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d13u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d16u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d19u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d22u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d25u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d28u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d31u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d34u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d37u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d40u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d43u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d46u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d49u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d52u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d55u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d58u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00002d5cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d5du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d5fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d60u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d61u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002d62u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d63u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d64u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d65u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d66u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d67u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d68u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d69u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d6au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d6bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d6cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d6du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d6eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d6fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002d70u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002d71u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002b68u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002b69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b6au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b6bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b6cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b6du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b6eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b6fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b5du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b5au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b57u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b54u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b31u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b32u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b33u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b34u, 0x00000007u, 0x0004003bu, 0x00000becu, 0x00002b35u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002b36u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002b37u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002aceu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002acfu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ad0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ad1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ad2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ad3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ad4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ad5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ad6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ad7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002aabu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002aacu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002aadu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002aaeu, 0x00000007u, 0x0004003bu, 0x00000becu, 0x00002aafu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002ab0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002ab1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a48u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002a49u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a4au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a4bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a4cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a4du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a4eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a4fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a50u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a51u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a25u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a26u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a27u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a28u, 0x00000007u, 0x0004003bu, 0x00000becu, 0x00002a29u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002a2au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002a2bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029c2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000029c3u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029c4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029c5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029c6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029c7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000029c8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029c9u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029cau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000029cbu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000292au, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000292bu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000292cu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000292du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000292eu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000292fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002930u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002931u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002932u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002933u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002934u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002935u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002936u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002937u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002938u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002939u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000293au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000291au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002911u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002912u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000028ceu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000028cfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000028d0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000028d1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000028d2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000028d3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002849u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000284au, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000284bu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000284cu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000284du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000284eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000284fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002850u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002851u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002852u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000282du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000282eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002811u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002812u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000027f5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000027f6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000027d1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000027d2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000027d3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000026bdu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000026beu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026bfu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000026c0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000026c2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026c8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000026c9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000026cau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026cbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026ccu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026cdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026ceu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026d0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026d1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000026d6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026d7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026a1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000026a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002685u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002686u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002669u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000266au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002645u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002646u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002647u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002531u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002532u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002533u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002534u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002535u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002536u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002538u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002539u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000253bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000253du, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000253eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000253fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002540u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002541u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002542u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002544u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002545u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002547u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002549u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000254au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000254bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000251bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002505u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024b8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024b9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024bau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024bbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024bcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024bdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024c0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000024c1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024c2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024c3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024c6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000024c7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024c8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024c9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000024cau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000024cbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002479u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002456u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002457u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002458u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002459u, 0x00000007u, 0x0004003bu, 0x00000becu, 0x0000245au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000245bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000245cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023f3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000023f4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023f5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023f6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023f7u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023f8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023f9u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023fau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023fbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000023fcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023b4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023b5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023b6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000023b7u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000023b8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000023b9u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000023bau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000023bbu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000023bcu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00002393u, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x00001febu, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000005eu, 0x00001fecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001feeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff4u, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00001ff5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ffau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ffbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ffcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ffdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ffeu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001fffu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002000u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002001u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002002u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002003u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002004u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002005u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002006u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002007u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002008u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002009u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000200fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002010u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002011u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002012u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002013u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002014u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002015u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002016u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002017u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002018u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002019u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000201au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000201bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000201cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000201du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000201eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002020u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002021u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002022u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002023u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002024u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002025u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002026u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002027u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002029u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000202au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000202cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000202du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000202eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000202fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002030u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002031u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002032u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002033u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002034u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002035u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002037u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002038u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002039u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000203au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000203bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000203cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000203du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000203eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000203fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002040u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002041u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002042u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002043u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002044u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002045u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002046u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002047u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002048u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002049u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000204au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000204bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000204cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000204du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000204eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000204fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002050u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002051u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002052u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002053u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002054u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002055u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002056u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002057u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002058u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002059u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000205au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000205bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000205cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000205du, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000205eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000205fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002060u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002061u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002062u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002063u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002064u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002066u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002067u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002069u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000206au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000206fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002070u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002071u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002072u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002073u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002074u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002075u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002076u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002077u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002078u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00002079u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207au, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000207bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000207cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000207du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000207eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000207fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002080u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002081u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002082u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002083u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002085u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002087u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00002088u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002089u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000208au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000208bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000208cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000208du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000208eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000208fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00002090u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002091u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002092u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002093u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002094u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002095u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002096u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002097u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00002098u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000209au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000209cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000209du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000209eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000209fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020a0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020a1u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020a3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020a4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020a5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020a7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020a8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020a9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020aau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020abu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020acu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020afu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000020b0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020b1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020b2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020b3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020b4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000020b5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000020b6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001fd3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001f6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f6bu, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00001f6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f6eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001f34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f3au, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x00001f29u, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003eu, 0x00001e5fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e66u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001e6au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e6fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e82u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001e96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ea2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001eadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001eb6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ec7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ed0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ed7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ed9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ee9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ef7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ef8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001efcu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001efeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f00u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001f05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f11u, 0x00000007u, 0x000300f7u, 0x00001f27u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00001f28u, 0x000200f8u, 0x00001f28u, 0x0003003eu, 0x00000202u, 0x00000203u, 0x00050041u, 0x00001e62u, 0x00001e63u, 0x00001e61u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001e64u, 0x00001e63u, 0x0004007cu, 0x00000008u, 0x00001e65u, 0x00001e64u, 0x0003003eu, 0x00001e5fu, 0x00001e65u, 0x00050041u, 0x00001e62u, 0x00001e67u, 0x00001e61u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001e68u, 0x00001e67u, 0x0004007cu, 0x00000008u, 0x00001e69u, 0x00001e68u, 0x0003003eu, 0x00001e66u, 0x00001e69u, 0x0004003du, 0x00000353u, 0x00001e6cu, 0x00001e6bu, 0x0007004fu, 0x000000a2u, 0x00001e6du, 0x00001e6cu, 0x00001e6cu, 0x00000000u, 0x00000001u, 0x0004007cu, 0x0000005fu, 0x00001e6eu, 0x00001e6du, 0x0003003eu, 0x00001e6au, 0x00001e6eu, 0x00050041u, 0x0000003eu, 0x00001e70u, 0x00001e6au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001e71u, 0x00001e70u, 0x00050041u, 0x0000003eu, 0x00001e72u, 0x00001e6au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001e73u, 0x00001e72u, 0x00050084u, 0x00000008u, 0x00001e7bu, 0x00001e73u, 0x00001e7au, 0x00050080u, 0x00000008u, 0x00001e7cu, 0x00001e71u, 0x00001e7bu, 0x0003003eu, 0x00001e6fu, 0x00001e7cu, 0x00050084u, 0x00000008u, 0x00001e81u, 0x00001e7cu, 0x00001e80u, 0x0003003eu, 0x00001e7du, 0x00001e81u, 0x00060041u, 0x0000026bu, 0x00001e88u, 0x00001e86u, 0x00000203u, 0x00001e7cu, 0x0004003du, 0x00000006u, 0x00001e89u, 0x00001e88u, 0x00050041u, 0x00001e8du, 0x00001e8eu, 0x00001e8cu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001e8fu, 0x00001e8eu, 0x000500c7u, 0x00000006u, 0x00001e90u, 0x00001e89u, 0x00001e8fu, 0x0003003eu, 0x00001e82u, 0x00001e90u, 0x000500aau, 0x0000005du, 0x00001e92u, 0x00001e90u, 0x00000374u, 0x000300f7u, 0x00001e94u, 0x00000000u, 0x000400fau, 0x00001e92u, 0x00001e93u, 0x00001e94u, 0x000200f8u, 0x00001e93u, 0x0003003eu, 0x00001f29u, 0x0000055eu, 0x000200f9u, 0x00001f27u, 0x000200f8u, 0x00001e94u, 0x0004003du, 0x00000353u, 0x00001e97u, 0x00001e61u, 0x0007004fu, 0x000000a2u, 0x00001e98u, 0x00001e97u, 0x00001e97u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001e96u, 0x00001e98u, 0x00050041u, 0x00001e8du, 0x00001e9au, 0x00001e8cu, 0x00000215u, 0x0004003du, 0x00000006u, 0x00001e9bu, 0x00001e9au, 0x0003003eu, 0x00001e99u, 0x00001e9bu, 0x00050041u, 0x00001e8du, 0x00001e9du, 0x00001e8cu, 0x00000218u, 0x0004003du, 0x00000006u, 0x00001e9eu, 0x00001e9du, 0x0003003eu, 0x00001e9cu, 0x00001e9eu, 0x00050041u, 0x00001e8du, 0x00001ea0u, 0x00001e8cu, 0x00000203u, 0x0004003du, 0x00000006u, 0x00001ea1u, 0x00001ea0u, 0x0003003eu, 0x00001e9fu, 0x00001ea1u, 0x00050041u, 0x00001e8du, 0x00001ea3u, 0x00001e8cu, 0x00000212u, 0x0004003du, 0x00000006u, 0x00001ea4u, 0x00001ea3u, 0x0003003eu, 0x00001ea2u, 0x00001ea4u, 0x0003003eu, 0x00000752u, 0x00000543u, 0x0003003eu, 0x00000854u, 0x00000543u, 0x0004003du, 0x000000a2u, 0x00001f3bu, 0x00001e96u, 0x00050050u, 0x000000a2u, 0x00001f3eu, 0x00001e9bu, 0x00001e9eu, 0x000500b0u, 0x00000879u, 0x00001f3fu, 0x00001f3bu, 0x00001f3eu, 0x0004009bu, 0x0000005du, 0x00001f40u, 0x00001f3fu, 0x000300f7u, 0x00001f41u, 0x00000000u, 0x000400fau, 0x00001f40u, 0x00001f42u, 0x00001f41u, 0x000200f8u, 0x00001f42u, 0x0004003du, 0x000000a2u, 0x00001f43u, 0x00001e96u, 0x00050050u, 0x000000a2u, 0x00001f44u, 0x00000882u, 0x00000882u, 0x000500c7u, 0x000000a2u, 0x00001f45u, 0x00001f43u, 0x00001f44u, 0x0003003eu, 0x00001f34u, 0x00001f45u, 0x0004003du, 0x000000a2u, 0x00001f46u, 0x00001e96u, 0x00050050u, 0x0000005fu, 0x00001f47u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x00001f48u, 0x00001f46u, 0x00001f47u, 0x0003003eu, 0x00001e96u, 0x00001f48u, 0x00050041u, 0x00000007u, 0x00001f49u, 0x00001f34u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001f4au, 0x00001f49u, 0x00050084u, 0x00000006u, 0x00001f4bu, 0x00001f4au, 0x0000088bu, 0x00050041u, 0x00000007u, 0x00001f4cu, 0x00001f34u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001f4du, 0x00001f4cu, 0x00050080u, 0x00000006u, 0x00001f4eu, 0x00001f4bu, 0x00001f4du, 0x0003003eu, 0x00001f35u, 0x00001f4eu, 0x000500c2u, 0x00000006u, 0x00001f51u, 0x00001e9bu, 0x0000078du, 0x00050041u, 0x00000007u, 0x00001f52u, 0x00001e96u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001f53u, 0x00001f52u, 0x00050084u, 0x00000006u, 0x00001f54u, 0x00001f51u, 0x00001f53u, 0x00050080u, 0x00000006u, 0x00001f55u, 0x00001ea1u, 0x00001f54u, 0x00050041u, 0x00000007u, 0x00001f56u, 0x00001e96u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001f57u, 0x00001f56u, 0x00050080u, 0x00000006u, 0x00001f58u, 0x00001f55u, 0x00001f57u, 0x0003003eu, 0x00001f36u, 0x00001f58u, 0x0003003eu, 0x0000089cu, 0x00001f58u, 0x0003003eu, 0x00001f37u, 0x00001f58u, 0x0003003eu, 0x00001f38u, 0x00001f4eu, 0x000300f7u, 0x00001f6fu, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x00001f6fu, 0x00000000u, 0x00001f70u, 0x00000001u, 0x00001f70u, 0x00000002u, 0x00001f71u, 0x00000003u, 0x00001f72u, 0x00000004u, 0x00001f73u, 0x000200f8u, 0x00001f73u, 0x000500c7u, 0x00000006u, 0x00001fc6u, 0x00001f58u, 0x000006cau, 0x0003003eu, 0x00001f37u, 0x00001fc6u, 0x00050084u, 0x00000006u, 0x00001fc8u, 0x00001f4eu, 0x000006ceu, 0x00050080u, 0x00000006u, 0x00001fcau, 0x00001fc6u, 0x00001fc8u, 0x0003003eu, 0x00001f37u, 0x00001fcau, 0x00060041u, 0x0000026bu, 0x00001fccu, 0x000006d6u, 0x00000203u, 0x00001fcau, 0x0004003du, 0x00000006u, 0x00001fcdu, 0x00001fccu, 0x0003003eu, 0x00001f6eu, 0x00001fcdu, 0x00070050u, 0x00000237u, 0x00001fcfu, 0x00001fcdu, 0x00001fcdu, 0x00001fcdu, 0x00001fcdu, 0x000500c2u, 0x00000237u, 0x00001fd0u, 0x00001fcfu, 0x000006ddu, 0x000500c7u, 0x00000237u, 0x00001fd1u, 0x00001fd0u, 0x000006dfu, 0x0004007cu, 0x00000009u, 0x00001fd2u, 0x00001fd1u, 0x0003003eu, 0x00000671u, 0x00001fd2u, 0x000200f9u, 0x00001f6fu, 0x000200f8u, 0x00001f72u, 0x000500c7u, 0x00000006u, 0x00001fb0u, 0x00001f58u, 0x00000681u, 0x0003003eu, 0x00001f37u, 0x00001fb0u, 0x00050084u, 0x00000006u, 0x00001fb2u, 0x00001f4eu, 0x000006b3u, 0x00050080u, 0x00000006u, 0x00001fb4u, 0x00001fb0u, 0x00001fb2u, 0x0003003eu, 0x00001f37u, 0x00001fb4u, 0x000500c6u, 0x00000006u, 0x00001fb6u, 0x00001fb4u, 0x00000485u, 0x00060041u, 0x00000270u, 0x00001fb7u, 0x0000068du, 0x00000203u, 0x00001fb6u, 0x0004003du, 0x0000022bu, 0x00001fb8u, 0x00001fb7u, 0x00040071u, 0x00000006u, 0x00001fb9u, 0x00001fb8u, 0x0003003eu, 0x00001f6du, 0x00001fb9u, 0x000500c2u, 0x00000006u, 0x00001fbbu, 0x00001fb9u, 0x0000035bu, 0x0004007cu, 0x00000008u, 0x00001fbcu, 0x00001fbbu, 0x00060050u, 0x0000003cu, 0x00001fbdu, 0x00001fbcu, 0x00001fbcu, 0x00001fbcu, 0x000500c7u, 0x00000006u, 0x00001fbfu, 0x00001fb9u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00001fc0u, 0x00001fbfu, 0x00070050u, 0x00000009u, 0x00001fc4u, 0x00001fbcu, 0x00001fbcu, 0x00001fbcu, 0x00001fc0u, 0x0003003eu, 0x00000671u, 0x00001fc4u, 0x000200f9u, 0x00001f6fu, 0x000200f8u, 0x00001f71u, 0x000500c7u, 0x00000006u, 0x00001f8bu, 0x00001f58u, 0x00000681u, 0x0003003eu, 0x00001f37u, 0x00001f8bu, 0x00050084u, 0x00000006u, 0x00001f8du, 0x00001f4eu, 0x00000685u, 0x00050080u, 0x00000006u, 0x00001f8fu, 0x00001f8bu, 0x00001f8du, 0x0003003eu, 0x00001f37u, 0x00001f8fu, 0x000500c6u, 0x00000006u, 0x00001f91u, 0x00001f8fu, 0x00000485u, 0x00060041u, 0x00000270u, 0x00001f92u, 0x0000068du, 0x00000203u, 0x00001f91u, 0x0004003du, 0x0000022bu, 0x00001f93u, 0x00001f92u, 0x00040071u, 0x00000006u, 0x00001f94u, 0x00001f93u, 0x0003003eu, 0x00001f6bu, 0x00001f94u, 0x000500c2u, 0x00000006u, 0x00001f96u, 0x00001f94u, 0x0000035bu, 0x000500c2u, 0x00000006u, 0x00001f98u, 0x00001f94u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x00001f9au, 0x00001f94u, 0x000003c4u, 0x00060050u, 0x00000353u, 0x00001f9bu, 0x00001f96u, 0x00001f98u, 0x00001f9au, 0x000500c7u, 0x00000353u, 0x00001f9du, 0x00001f9bu, 0x0000eedau, 0x0003003eu, 0x00001f6cu, 0x00001f9du, 0x0004007cu, 0x0000003cu, 0x00001f9fu, 0x00001f9du, 0x00060041u, 0x00000277u, 0x00001fa1u, 0x00000678u, 0x00000203u, 0x00001f8fu, 0x0004003du, 0x00000229u, 0x00001fa2u, 0x00001fa1u, 0x00040071u, 0x00000006u, 0x00001fa3u, 0x00001fa2u, 0x0004007cu, 0x00000008u, 0x00001fa4u, 0x00001fa3u, 0x000500c4u, 0x00000008u, 0x00001fa5u, 0x00001fa4u, 0x0000021eu, 0x000500c7u, 0x00000006u, 0x00001fa7u, 0x00001f94u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00001fa8u, 0x00001fa7u, 0x00000224u, 0x0004007cu, 0x00000008u, 0x00001fa9u, 0x00001fa8u, 0x000500c5u, 0x00000008u, 0x00001faau, 0x00001fa5u, 0x00001fa9u, 0x00050051u, 0x00000008u, 0x00001fabu, 0x00001f9fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001facu, 0x00001f9fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001fadu, 0x00001f9fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001faeu, 0x00001fabu, 0x00001facu, 0x00001fadu, 0x00001faau, 0x0003003eu, 0x00000671u, 0x00001faeu, 0x000200f9u, 0x00001f6fu, 0x000200f8u, 0x00001f70u, 0x000500c7u, 0x00000006u, 0x00001f75u, 0x00001f58u, 0x0000065eu, 0x0003003eu, 0x00001f37u, 0x00001f75u, 0x00050084u, 0x00000006u, 0x00001f77u, 0x00001f4eu, 0x0000065du, 0x00050080u, 0x00000006u, 0x00001f79u, 0x00001f75u, 0x00001f77u, 0x0003003eu, 0x00001f37u, 0x00001f79u, 0x000500c6u, 0x00000006u, 0x00001f7bu, 0x00001f79u, 0x0000048bu, 0x00060041u, 0x00000277u, 0x00001f7cu, 0x00000669u, 0x00000203u, 0x00001f7bu, 0x0004003du, 0x00000229u, 0x00001f7du, 0x00001f7cu, 0x00040071u, 0x00000006u, 0x00001f7eu, 0x00001f7du, 0x0004007cu, 0x00000008u, 0x00001f7fu, 0x00001f7eu, 0x0003003eu, 0x00001f6au, 0x00001f7fu, 0x000500c2u, 0x00000006u, 0x00001f84u, 0x00001f79u, 0x00000212u, 0x00060041u, 0x00000277u, 0x00001f85u, 0x00000678u, 0x00000203u, 0x00001f84u, 0x0004003du, 0x00000229u, 0x00001f86u, 0x00001f85u, 0x00040071u, 0x00000006u, 0x00001f87u, 0x00001f86u, 0x0004007cu, 0x00000008u, 0x00001f88u, 0x00001f87u, 0x00070050u, 0x00000009u, 0x00001f89u, 0x00001f7fu, 0x00001f7fu, 0x00001f7fu, 0x00001f88u, 0x0003003eu, 0x00000671u, 0x00001f89u, 0x000200f9u, 0x00001f6fu, 0x000200f8u, 0x00001f6fu, 0x0004003du, 0x00000006u, 0x00001f61u, 0x00001f52u, 0x00050084u, 0x00000006u, 0x00001f62u, 0x00001f51u, 0x00001f61u, 0x00050080u, 0x00000006u, 0x00001f63u, 0x00001ea4u, 0x00001f62u, 0x0004003du, 0x00000006u, 0x00001f65u, 0x00001f56u, 0x00050080u, 0x00000006u, 0x00001f66u, 0x00001f63u, 0x00001f65u, 0x0003003eu, 0x00001f36u, 0x00001f66u, 0x0003003eu, 0x00001f39u, 0x00001f66u, 0x0003003eu, 0x00001f3au, 0x00001f4eu, 0x000500c7u, 0x00000006u, 0x00001fd5u, 0x00001f66u, 0x00000681u, 0x0003003eu, 0x00001f39u, 0x00001fd5u, 0x00050084u, 0x00000006u, 0x00001fd7u, 0x00001f4eu, 0x00000756u, 0x00050080u, 0x00000006u, 0x00001fd9u, 0x00001fd5u, 0x00001fd7u, 0x0003003eu, 0x00001f39u, 0x00001fd9u, 0x000500c6u, 0x00000006u, 0x00001fdbu, 0x00001fd9u, 0x00000485u, 0x00060041u, 0x00000270u, 0x00001fdcu, 0x0000068du, 0x00000203u, 0x00001fdbu, 0x0004003du, 0x0000022bu, 0x00001fddu, 0x00001fdcu, 0x00040071u, 0x00000006u, 0x00001fdeu, 0x00001fddu, 0x0004007cu, 0x00000008u, 0x00001fdfu, 0x00001fdeu, 0x0003003eu, 0x00001fd3u, 0x00001fdfu, 0x000500c3u, 0x00000008u, 0x00001fe1u, 0x00001fdfu, 0x00000215u, 0x0003003eu, 0x00000705u, 0x00001fe1u, 0x00060041u, 0x00000277u, 0x00001fe3u, 0x00000678u, 0x00000203u, 0x00001fd9u, 0x0004003du, 0x00000229u, 0x00001fe4u, 0x00001fe3u, 0x00040071u, 0x00000006u, 0x00001fe5u, 0x00001fe4u, 0x0004007cu, 0x00000008u, 0x00001fe6u, 0x00001fe5u, 0x000500c7u, 0x00000008u, 0x00001fe8u, 0x00001fdfu, 0x00000218u, 0x000500c4u, 0x00000008u, 0x00001fe9u, 0x00001fe8u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x00001feau, 0x00001fe6u, 0x00001fe9u, 0x0003003eu, 0x000006e7u, 0x00001feau, 0x000200f9u, 0x00001f41u, 0x000200f8u, 0x00001f41u, 0x000200f9u, 0x00001ea6u, 0x000200f8u, 0x00001ea6u, 0x000700f5u, 0x00000006u, 0x00007a1eu, 0x00001e90u, 0x00001f41u, 0x00001eb5u, 0x00001ea9u, 0x000700f5u, 0x0000003cu, 0x0000cd33u, 0x00007aa7u, 0x00001f41u, 0x0000cd32u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000cbc0u, 0x0000a6d8u, 0x00001f41u, 0x0000cbbfu, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000ca4eu, 0x0000a6d8u, 0x00001f41u, 0x0000ca4du, 0x00001ea9u, 0x000700f5u, 0x0000003cu, 0x0000c829u, 0x00007aa7u, 0x00001f41u, 0x0000c828u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000c6c3u, 0x0000a6d8u, 0x00001f41u, 0x0000c6c2u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000c55eu, 0x0000a6d8u, 0x00001f41u, 0x0000c55du, 0x00001ea9u, 0x000700f5u, 0x0000003cu, 0x0000c321u, 0x00007aa7u, 0x00001f41u, 0x0000c320u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x0000bdfau, 0x000082a5u, 0x00001f41u, 0x0000bdf9u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000bcd9u, 0x0000a6d8u, 0x00001f41u, 0x0000bcd8u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000bbb8u, 0x0000a6d8u, 0x00001f41u, 0x0000bbb7u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000ba6cu, 0x0000a6d8u, 0x00001f41u, 0x0000ba6bu, 0x00001ea9u, 0x000700f5u, 0x0000005du, 0x0000b8d2u, 0x00008dabu, 0x00001f41u, 0x0000b8d1u, 0x00001ea9u, 0x000700f5u, 0x00000008u, 0x0000a6d6u, 0x0000a6d8u, 0x00001f41u, 0x0000a6d5u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x0000a62cu, 0x000082a5u, 0x00001f41u, 0x0000a62bu, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x00009b5eu, 0x000082a5u, 0x00001f41u, 0x00009b5du, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x00009a7au, 0x000082a5u, 0x00001f41u, 0x00009a79u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x00009993u, 0x000082a5u, 0x00001f41u, 0x00009992u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x000098abu, 0x000082a5u, 0x00001f41u, 0x000098aau, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x000093deu, 0x000082a5u, 0x00001f41u, 0x000093ddu, 0x00001ea9u, 0x000700f5u, 0x0000005du, 0x00008e4cu, 0x00008dabu, 0x00001f41u, 0x00008e4bu, 0x00001ea9u, 0x000700f5u, 0x0000005du, 0x00008da9u, 0x00008dabu, 0x00001f41u, 0x00008da8u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x00008419u, 0x000082a5u, 0x00001f41u, 0x00008418u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x0000839fu, 0x000082a5u, 0x00001f41u, 0x0000839eu, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x00008322u, 0x000082a5u, 0x00001f41u, 0x00008321u, 0x00001ea9u, 0x000700f5u, 0x00000009u, 0x000082a3u, 0x000082a5u, 0x00001f41u, 0x000082a2u, 0x00001ea9u, 0x000700f5u, 0x0000005fu, 0x00007b9fu, 0x00007b7du, 0x00001f41u, 0x00007b9eu, 0x00001ea9u, 0x000700f5u, 0x0000005fu, 0x00007b7bu, 0x00007b7du, 0x00001f41u, 0x00007b7au, 0x00001ea9u, 0x000700f5u, 0x0000003cu, 0x00007ab4u, 0x00007aa7u, 0x00001f41u, 0x00007ab3u, 0x00001ea9u, 0x000700f5u, 0x0000003cu, 0x00007aa5u, 0x00007aa7u, 0x00001f41u, 0x00007aa4u, 0x00001ea9u, 0x000500abu, 0x0000005du, 0x00001eacu, 0x00007a1eu, 0x00000374u, 0x000400f6u, 0x00001ea8u, 0x00001ea9u, 0x00000000u, 0x000400fau, 0x00001eacu, 0x00001ea7u, 0x00001ea8u, 0x000200f8u, 0x00001ea7u, 0x0006000cu, 0x00000008u, 0x00001eafu, 0x00000001u, 0x00000049u, 0x00007a1eu, 0x0003003eu, 0x00001eadu, 0x00001eafu, 0x000500c4u, 0x00000008u, 0x00001eb1u, 0x00000212u, 0x00001eafu, 0x0004007cu, 0x00000006u, 0x00001eb2u, 0x00001eb1u, 0x000400c8u, 0x00000006u, 0x00001eb3u, 0x00001eb2u, 0x000500c7u, 0x00000006u, 0x00001eb5u, 0x00007a1eu, 0x00001eb3u, 0x0003003eu, 0x00001e82u, 0x00001eb5u, 0x00050080u, 0x00000008u, 0x00001ebdu, 0x00001e81u, 0x00001eafu, 0x00060041u, 0x0000026bu, 0x00001ebeu, 0x00001ebau, 0x00000203u, 0x00001ebdu, 0x0004003du, 0x00000006u, 0x00001ebfu, 0x00001ebeu, 0x0003003eu, 0x00001eb6u, 0x00001ebfu, 0x000200f9u, 0x00001ec0u, 0x000200f8u, 0x00001ec0u, 0x000700f5u, 0x0000003cu, 0x0000cd32u, 0x0000cd33u, 0x00001ea7u, 0x0000e9eeu, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000cbbfu, 0x0000cbc0u, 0x00001ea7u, 0x0000e9d3u, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000ca4du, 0x0000ca4eu, 0x00001ea7u, 0x0000e9b8u, 0x00001ec3u, 0x000700f5u, 0x0000003cu, 0x0000c828u, 0x0000c829u, 0x00001ea7u, 0x0000e990u, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000c6c2u, 0x0000c6c3u, 0x00001ea7u, 0x0000e968u, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000c55du, 0x0000c55eu, 0x00001ea7u, 0x0000e940u, 0x00001ec3u, 0x000700f5u, 0x0000003cu, 0x0000c320u, 0x0000c321u, 0x00001ea7u, 0x0000e902u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x0000bdf9u, 0x0000bdfau, 0x00001ea7u, 0x0000bdf7u, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000bcd8u, 0x0000bcd9u, 0x00001ea7u, 0x0000bcd6u, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000bbb7u, 0x0000bbb8u, 0x00001ea7u, 0x0000bbb5u, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000ba6bu, 0x0000ba6cu, 0x00001ea7u, 0x0000ba69u, 0x00001ec3u, 0x000700f5u, 0x0000005du, 0x0000b8d1u, 0x0000b8d2u, 0x00001ea7u, 0x0000e68au, 0x00001ec3u, 0x000700f5u, 0x00000008u, 0x0000a6d5u, 0x0000a6d6u, 0x00001ea7u, 0x0000e5f8u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x0000a62bu, 0x0000a62cu, 0x00001ea7u, 0x0000e566u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x00009b5du, 0x00009b5eu, 0x00001ea7u, 0x0000e4c4u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x00009a79u, 0x00009a7au, 0x00001ea7u, 0x0000e424u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x00009992u, 0x00009993u, 0x00001ea7u, 0x0000e384u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x000098aau, 0x000098abu, 0x00001ea7u, 0x0000e2e4u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x000093ddu, 0x000093deu, 0x00001ea7u, 0x0000e252u, 0x00001ec3u, 0x000700f5u, 0x0000005du, 0x00008e4bu, 0x00008e4cu, 0x00001ea7u, 0x0000e159u, 0x00001ec3u, 0x000700f5u, 0x0000005du, 0x00008da8u, 0x00008da9u, 0x00001ea7u, 0x0000e060u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x00008418u, 0x00008419u, 0x00001ea7u, 0x0000df54u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x0000839eu, 0x0000839fu, 0x00001ea7u, 0x0000de4au, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x00008321u, 0x00008322u, 0x00001ea7u, 0x0000dd40u, 0x00001ec3u, 0x000700f5u, 0x00000009u, 0x000082a2u, 0x000082a3u, 0x00001ea7u, 0x0000dc36u, 0x00001ec3u, 0x000700f5u, 0x0000005fu, 0x00007b9eu, 0x00007b9fu, 0x00001ea7u, 0x0000dad5u, 0x00001ec3u, 0x000700f5u, 0x0000005fu, 0x00007b7au, 0x00007b7bu, 0x00001ea7u, 0x0000d974u, 0x00001ec3u, 0x000700f5u, 0x0000003cu, 0x00007ab3u, 0x00007ab4u, 0x00001ea7u, 0x0000d807u, 0x00001ec3u, 0x000700f5u, 0x0000003cu, 0x00007aa4u, 0x00007aa5u, 0x00001ea7u, 0x0000d691u, 0x00001ec3u, 0x000700f5u, 0x00000006u, 0x00007a4au, 0x00001ebfu, 0x00001ea7u, 0x00001ecfu, 0x00001ec3u, 0x000500abu, 0x0000005du, 0x00001ec6u, 0x00007a4au, 0x00000374u, 0x000400f6u, 0x00001ec2u, 0x00001ec3u, 0x00000000u, 0x000400fau, 0x00001ec6u, 0x00001ec1u, 0x00001ec2u, 0x000200f8u, 0x00001ec1u, 0x0006000cu, 0x00000008u, 0x00001ec9u, 0x00000001u, 0x00000049u, 0x00007a4au, 0x0003003eu, 0x00001ec7u, 0x00001ec9u, 0x000500c4u, 0x00000008u, 0x00001ecbu, 0x00000212u, 0x00001ec9u, 0x0004007cu, 0x00000006u, 0x00001eccu, 0x00001ecbu, 0x000400c8u, 0x00000006u, 0x00001ecdu, 0x00001eccu, 0x000500c7u, 0x00000006u, 0x00001ecfu, 0x00007a4au, 0x00001ecdu, 0x0003003eu, 0x00001eb6u, 0x00001ecfu, 0x00050084u, 0x00000008u, 0x00001ed3u, 0x0000037du, 0x00001eafu, 0x00050080u, 0x00000008u, 0x00001ed4u, 0x00001ec9u, 0x00001ed3u, 0x0004007cu, 0x00000006u, 0x00001ed5u, 0x00001ed4u, 0x0003003eu, 0x00001ed0u, 0x00001ed5u, 0x0003003eu, 0x00001ed7u, 0x00001e65u, 0x0003003eu, 0x00001ed9u, 0x00001e69u, 0x0003003eu, 0x00001edbu, 0x00001ed5u, 0x0003003eu, 0x00001febu, 0x00000543u, 0x000300f7u, 0x000020b7u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x000020b8u, 0x000200f8u, 0x000020b8u, 0x0003003eu, 0x00001feeu, 0x00001ed5u, 0x00060041u, 0x00000343u, 0x00002332u, 0x00000341u, 0x00000203u, 0x00001ed5u, 0x0004003du, 0x0000033du, 0x00002333u, 0x00002332u, 0x00050051u, 0x00000008u, 0x00002334u, 0x00002333u, 0x00000000u, 0x0003003eu, 0x00006d5eu, 0x00002334u, 0x00050051u, 0x00000008u, 0x00002336u, 0x00002333u, 0x00000001u, 0x0003003eu, 0x00006d5fu, 0x00002336u, 0x00050051u, 0x00000008u, 0x00002338u, 0x00002333u, 0x00000002u, 0x0003003eu, 0x00006d60u, 0x00002338u, 0x00050051u, 0x00000008u, 0x0000233au, 0x00002333u, 0x00000003u, 0x0003003eu, 0x00006d61u, 0x0000233au, 0x00070050u, 0x00000028u, 0x00006d66u, 0x00002334u, 0x00002336u, 0x00002338u, 0x0000233au, 0x0003003eu, 0x00006d67u, 0x00002334u, 0x0003003eu, 0x00006d68u, 0x00002336u, 0x0003003eu, 0x00006d69u, 0x00002338u, 0x0003003eu, 0x00006d6au, 0x0000233au, 0x0003003eu, 0x00006d74u, 0x00002334u, 0x0003003eu, 0x00006d75u, 0x00002336u, 0x0003003eu, 0x00006d76u, 0x00002338u, 0x00050084u, 0x00000008u, 0x000020beu, 0x00000880u, 0x00002336u, 0x000500b1u, 0x0000005du, 0x000020bfu, 0x00001e69u, 0x000020beu, 0x000400a8u, 0x0000005du, 0x000020c0u, 0x000020bfu, 0x000300f7u, 0x000020c1u, 0x00000000u, 0x000400fau, 0x000020c0u, 0x000020c2u, 0x000020c1u, 0x000200f8u, 0x000020c2u, 0x00050084u, 0x00000008u, 0x000020c6u, 0x00002338u, 0x00000880u, 0x00050080u, 0x00000008u, 0x000020c7u, 0x000020c6u, 0x00001b09u, 0x000500adu, 0x0000005du, 0x000020c8u, 0x00001e69u, 0x000020c7u, 0x000200f9u, 0x000020c1u, 0x000200f8u, 0x000020c1u, 0x000700f5u, 0x0000005du, 0x000020c9u, 0x000020bfu, 0x000020b8u, 0x000020c8u, 0x000020c2u, 0x000300f7u, 0x000020cau, 0x00000000u, 0x000400fau, 0x000020c9u, 0x000020cbu, 0x000020cau, 0x000200f8u, 0x000020cbu, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x000020cau, 0x00070041u, 0x00000277u, 0x000020cdu, 0x00001b15u, 0x00000203u, 0x00001ed5u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000020ceu, 0x000020cdu, 0x00040071u, 0x00000006u, 0x000020cfu, 0x000020ceu, 0x0003003eu, 0x00001fefu, 0x000020cfu, 0x000300f7u, 0x000020d0u, 0x00000000u, 0x000400fau, 0x00001b1au, 0x000020d1u, 0x000020d0u, 0x000200f8u, 0x000020d1u, 0x000500c7u, 0x00000006u, 0x000020d3u, 0x000020cfu, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x000020d4u, 0x000020d3u, 0x00000374u, 0x000300f7u, 0x000020d5u, 0x00000000u, 0x000400fau, 0x000020d4u, 0x000020d6u, 0x000020d5u, 0x000200f8u, 0x000020d6u, 0x000500c7u, 0x00000008u, 0x000020d8u, 0x00001e65u, 0x00001b23u, 0x0003003eu, 0x00001ed7u, 0x000020d8u, 0x000500c7u, 0x00000008u, 0x000020dau, 0x00001e69u, 0x00001b27u, 0x0003003eu, 0x00001ed9u, 0x000020dau, 0x000200f9u, 0x000020d5u, 0x000200f8u, 0x000020d5u, 0x000700f5u, 0x00000008u, 0x00007a64u, 0x00001e65u, 0x000020d1u, 0x000020d8u, 0x000020d6u, 0x000700f5u, 0x00000008u, 0x00007a5du, 0x00001e69u, 0x000020d1u, 0x000020dau, 0x000020d6u, 0x000200f9u, 0x000020d0u, 0x000200f8u, 0x000020d0u, 0x000700f5u, 0x00000008u, 0x00007a63u, 0x00001e65u, 0x000020cau, 0x00007a64u, 0x000020d5u, 0x000700f5u, 0x00000008u, 0x00007a5cu, 0x00001e69u, 0x000020cau, 0x00007a5du, 0x000020d5u, 0x00050084u, 0x00000008u, 0x000020ddu, 0x00000880u, 0x00002334u, 0x00050082u, 0x00000008u, 0x000020e2u, 0x00007a5cu, 0x000020beu, 0x00050080u, 0x00000008u, 0x000020e3u, 0x000020ddu, 0x000020e2u, 0x0004007cu, 0x00000006u, 0x000020e4u, 0x000020e3u, 0x0003003eu, 0x00001ff1u, 0x000020e4u, 0x00070041u, 0x00000316u, 0x0000233fu, 0x00000314u, 0x00000203u, 0x000020e4u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00002340u, 0x0000233fu, 0x00070041u, 0x00000316u, 0x00002342u, 0x00000314u, 0x00000203u, 0x000020e4u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00002343u, 0x00002342u, 0x00070041u, 0x0000031du, 0x00002345u, 0x00000314u, 0x00000203u, 0x000020e4u, 0x00000215u, 0x0004003du, 0x0000030fu, 0x00002346u, 0x00002345u, 0x00040071u, 0x00000237u, 0x00002347u, 0x00002346u, 0x0004007cu, 0x00000009u, 0x00002348u, 0x00002347u, 0x00070041u, 0x0000031du, 0x0000234au, 0x00000314u, 0x00000203u, 0x000020e4u, 0x00000218u, 0x0004003du, 0x0000030fu, 0x0000234bu, 0x0000234au, 0x00040071u, 0x00000237u, 0x0000234cu, 0x0000234bu, 0x0004007cu, 0x00000009u, 0x0000234du, 0x0000234cu, 0x00070041u, 0x000002a8u, 0x0000234fu, 0x00000314u, 0x00000203u, 0x000020e4u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x00002350u, 0x0000234fu, 0x00070041u, 0x000002a8u, 0x00002352u, 0x00000314u, 0x00000203u, 0x000020e4u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00002353u, 0x00002352u, 0x00070041u, 0x000002a8u, 0x00002355u, 0x00000314u, 0x00000203u, 0x000020e4u, 0x00000221u, 0x0004003du, 0x00000008u, 0x00002356u, 0x00002355u, 0x00070041u, 0x00000331u, 0x00002358u, 0x00000314u, 0x00000203u, 0x000020e4u, 0x00000224u, 0x0004003du, 0x0000022cu, 0x00002359u, 0x00002358u, 0x00040072u, 0x00000008u, 0x0000235au, 0x00002359u, 0x00070041u, 0x00000270u, 0x0000235cu, 0x00000314u, 0x00000203u, 0x000020e4u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x0000235du, 0x0000235cu, 0x00040071u, 0x00000006u, 0x0000235eu, 0x0000235du, 0x0004007cu, 0x00000008u, 0x0000235fu, 0x0000235eu, 0x000c0050u, 0x00000023u, 0x00002360u, 0x00002340u, 0x00002343u, 0x00002348u, 0x0000234du, 0x00002350u, 0x00002353u, 0x00002356u, 0x0000235au, 0x0000235fu, 0x0003003eu, 0x00006d42u, 0x00002340u, 0x0003003eu, 0x00006d43u, 0x00002343u, 0x0003003eu, 0x00006d44u, 0x00002348u, 0x0003003eu, 0x00006d45u, 0x0000234du, 0x0003003eu, 0x00006d46u, 0x00002350u, 0x0003003eu, 0x00006d47u, 0x00002353u, 0x0003003eu, 0x00006d48u, 0x00002356u, 0x0003003eu, 0x00006d49u, 0x0000235au, 0x0003003eu, 0x00006d4au, 0x0000235fu, 0x0003003eu, 0x00006d7au, 0x00002340u, 0x0003003eu, 0x00006d7bu, 0x00002343u, 0x0003003eu, 0x00006d7cu, 0x00002348u, 0x0003003eu, 0x00006d7du, 0x0000234du, 0x0003003eu, 0x00006d7eu, 0x00002350u, 0x0003003eu, 0x00006d7fu, 0x00002353u, 0x0003003eu, 0x00006d80u, 0x00002356u, 0x0003003eu, 0x00006d81u, 0x0000235au, 0x0003003eu, 0x00006d82u, 0x0000235fu, 0x000500aau, 0x0000005du, 0x000020e8u, 0x0000235fu, 0x00000203u, 0x000300f7u, 0x000020e9u, 0x00000000u, 0x000400fau, 0x000020e8u, 0x000020eau, 0x000020e9u, 0x000200f8u, 0x000020eau, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x000020e9u, 0x00070041u, 0x00000277u, 0x000020ecu, 0x00001b15u, 0x00000203u, 0x00001ed5u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000020edu, 0x000020ecu, 0x00040071u, 0x00000006u, 0x000020eeu, 0x000020edu, 0x0003003eu, 0x00001ff2u, 0x000020eeu, 0x0003003eu, 0x00001ff4u, 0x00001ed5u, 0x00060041u, 0x0000020au, 0x00002364u, 0x00000208u, 0x00000203u, 0x00001ed5u, 0x0004003du, 0x00000204u, 0x00002365u, 0x00002364u, 0x00050051u, 0x00000009u, 0x00002366u, 0x00002365u, 0x00000000u, 0x0003003eu, 0x00006d18u, 0x00002366u, 0x00050051u, 0x00000009u, 0x00002368u, 0x00002365u, 0x00000001u, 0x0003003eu, 0x00006d19u, 0x00002368u, 0x00050051u, 0x00000009u, 0x0000236au, 0x00002365u, 0x00000002u, 0x0003003eu, 0x00006d1au, 0x0000236au, 0x00050051u, 0x00000009u, 0x0000236cu, 0x00002365u, 0x00000003u, 0x0003003eu, 0x00006d1bu, 0x0000236cu, 0x00050051u, 0x00000009u, 0x0000236eu, 0x00002365u, 0x00000004u, 0x0003003eu, 0x00006d1cu, 0x0000236eu, 0x00050051u, 0x00000009u, 0x00002370u, 0x00002365u, 0x00000005u, 0x0003003eu, 0x00006d1du, 0x00002370u, 0x00050051u, 0x00000009u, 0x00002372u, 0x00002365u, 0x00000006u, 0x0003003eu, 0x00006d1eu, 0x00002372u, 0x00050051u, 0x00000009u, 0x00002374u, 0x00002365u, 0x00000007u, 0x0003003eu, 0x00006d1fu, 0x00002374u, 0x000b0050u, 0x0000000au, 0x00006d28u, 0x00002366u, 0x00002368u, 0x0000236au, 0x0000236cu, 0x0000236eu, 0x00002370u, 0x00002372u, 0x00002374u, 0x0003003eu, 0x00006d29u, 0x00002366u, 0x0003003eu, 0x00006d2au, 0x00002368u, 0x0003003eu, 0x00006d2bu, 0x0000236au, 0x0003003eu, 0x00006d2cu, 0x0000236cu, 0x0003003eu, 0x00006d2du, 0x0000236eu, 0x0003003eu, 0x00006d2eu, 0x00002370u, 0x0003003eu, 0x00006d2fu, 0x00002372u, 0x0003003eu, 0x00006d30u, 0x00002374u, 0x0003003eu, 0x00006d96u, 0x00002368u, 0x0003003eu, 0x00006d97u, 0x0000236cu, 0x0003003eu, 0x00006d98u, 0x00002370u, 0x0003003eu, 0x00006d99u, 0x00002374u, 0x00070041u, 0x00000234u, 0x000020f2u, 0x00000a19u, 0x00000203u, 0x00001ed5u, 0x00000203u, 0x0004003du, 0x0000022au, 0x000020f3u, 0x000020f2u, 0x00040071u, 0x00000237u, 0x000020f4u, 0x000020f3u, 0x0003003eu, 0x00001ff5u, 0x000020f4u, 0x00050041u, 0x00000007u, 0x000020f5u, 0x00001ff5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000020f6u, 0x000020f5u, 0x0003003eu, 0x00001ff6u, 0x000020f6u, 0x00050041u, 0x00000007u, 0x000020f7u, 0x00001ff5u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000020f8u, 0x000020f7u, 0x0003003eu, 0x00001ff7u, 0x000020f8u, 0x0003003eu, 0x00001ff9u, 0x000020f6u, 0x00070041u, 0x00000234u, 0x00002379u, 0x0000028fu, 0x00000203u, 0x000020f6u, 0x00000203u, 0x0004003du, 0x0000022au, 0x0000237au, 0x00002379u, 0x00040071u, 0x00000237u, 0x0000237bu, 0x0000237au, 0x0004007cu, 0x00000009u, 0x0000237cu, 0x0000237bu, 0x00070041u, 0x00000234u, 0x0000237eu, 0x0000028fu, 0x00000203u, 0x000020f6u, 0x00000212u, 0x0004003du, 0x0000022au, 0x0000237fu, 0x0000237eu, 0x00040071u, 0x00000237u, 0x00002380u, 0x0000237fu, 0x0004007cu, 0x00000009u, 0x00002381u, 0x00002380u, 0x00070041u, 0x00000234u, 0x00002383u, 0x0000028fu, 0x00000203u, 0x000020f6u, 0x00000215u, 0x0004003du, 0x0000022au, 0x00002384u, 0x00002383u, 0x00040071u, 0x00000237u, 0x00002385u, 0x00002384u, 0x0004007cu, 0x00000009u, 0x00002386u, 0x00002385u, 0x00070041u, 0x00000234u, 0x00002388u, 0x0000028fu, 0x00000203u, 0x000020f6u, 0x00000218u, 0x0004003du, 0x0000022au, 0x00002389u, 0x00002388u, 0x00040071u, 0x00000237u, 0x0000238au, 0x00002389u, 0x0004007cu, 0x00000009u, 0x0000238bu, 0x0000238au, 0x00070041u, 0x0000026bu, 0x0000238du, 0x0000028fu, 0x00000203u, 0x000020f6u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000238eu, 0x0000238du, 0x00070041u, 0x000002a8u, 0x00002390u, 0x0000028fu, 0x00000203u, 0x000020f6u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00002391u, 0x00002390u, 0x000b0050u, 0x00000014u, 0x00002392u, 0x0000237cu, 0x00002381u, 0x00002386u, 0x0000238bu, 0x0000238eu, 0x00002391u, 0x00000203u, 0x00000203u, 0x0003003eu, 0x00006cffu, 0x0000237cu, 0x0003003eu, 0x00006d00u, 0x00002381u, 0x0003003eu, 0x00006d01u, 0x00002386u, 0x0003003eu, 0x00006d02u, 0x0000238bu, 0x0003003eu, 0x00006d03u, 0x0000238eu, 0x0003003eu, 0x00006d04u, 0x00002391u, 0x0003003eu, 0x00006d05u, 0x00000203u, 0x0003003eu, 0x00006d06u, 0x00000203u, 0x0003003eu, 0x00006d9eu, 0x0000237cu, 0x0003003eu, 0x00006d9fu, 0x00002381u, 0x0003003eu, 0x00006da0u, 0x00002386u, 0x0003003eu, 0x00006da1u, 0x0000238bu, 0x0003003eu, 0x00006da2u, 0x0000238eu, 0x0003003eu, 0x00006da3u, 0x00002391u, 0x0003003eu, 0x00001ffau, 0x0000238eu, 0x0003003eu, 0x00001ffbu, 0x00002391u, 0x0003003eu, 0x00001ffcu, 0x0000237cu, 0x0003003eu, 0x00001ffdu, 0x00002381u, 0x0003003eu, 0x00001ffeu, 0x00002386u, 0x0003003eu, 0x00001fffu, 0x0000238bu, 0x000500c7u, 0x00000006u, 0x00002108u, 0x0000238eu, 0x00000377u, 0x000500abu, 0x0000005du, 0x00002109u, 0x00002108u, 0x00000374u, 0x0003003eu, 0x00002000u, 0x00002109u, 0x000500c7u, 0x00000006u, 0x0000210bu, 0x0000238eu, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x0000210cu, 0x0000210bu, 0x00000374u, 0x0003003eu, 0x00002001u, 0x0000210cu, 0x000500c7u, 0x00000006u, 0x0000210eu, 0x0000238eu, 0x00001b72u, 0x000500abu, 0x0000005du, 0x0000210fu, 0x0000210eu, 0x00000374u, 0x0003003eu, 0x00002002u, 0x0000210fu, 0x000500c7u, 0x00000006u, 0x00002111u, 0x0000238eu, 0x00000a45u, 0x000500abu, 0x0000005du, 0x00002112u, 0x00002111u, 0x00000374u, 0x0003003eu, 0x00002003u, 0x00002112u, 0x000500c7u, 0x00000006u, 0x00002114u, 0x0000238eu, 0x00000a4bu, 0x000500abu, 0x0000005du, 0x00002115u, 0x00002114u, 0x00000374u, 0x0003003eu, 0x00002004u, 0x00002115u, 0x000500c7u, 0x00000006u, 0x00002117u, 0x0000238eu, 0x0000035bu, 0x000500abu, 0x0000005du, 0x00002118u, 0x00002117u, 0x00000374u, 0x0003003eu, 0x00002005u, 0x00002118u, 0x000500c7u, 0x00000006u, 0x0000211au, 0x0000238eu, 0x00001b83u, 0x000500abu, 0x0000005du, 0x0000211bu, 0x0000211au, 0x00000374u, 0x0003003eu, 0x00002006u, 0x0000211bu, 0x000500c7u, 0x00000006u, 0x0000211du, 0x0000238eu, 0x00000f3cu, 0x000500abu, 0x0000005du, 0x0000211eu, 0x0000211du, 0x00000374u, 0x0003003eu, 0x00002007u, 0x0000211eu, 0x000500c7u, 0x00000006u, 0x00002120u, 0x0000238eu, 0x00000f34u, 0x000500abu, 0x0000005du, 0x00002121u, 0x00002120u, 0x00000374u, 0x0003003eu, 0x00002008u, 0x00002121u, 0x000500c7u, 0x00000006u, 0x00002123u, 0x0000238eu, 0x00000701u, 0x000500abu, 0x0000005du, 0x00002124u, 0x00002123u, 0x00000374u, 0x0003003eu, 0x00002009u, 0x00002124u, 0x000500c7u, 0x00000006u, 0x00002126u, 0x0000238eu, 0x00000a51u, 0x000500abu, 0x0000005du, 0x00002127u, 0x00002126u, 0x00000374u, 0x0003003eu, 0x0000200au, 0x00002127u, 0x000500c7u, 0x00000006u, 0x00002129u, 0x0000238eu, 0x00000485u, 0x000500abu, 0x0000005du, 0x0000212au, 0x00002129u, 0x00000374u, 0x0003003eu, 0x0000200bu, 0x0000212au, 0x000500c7u, 0x00000006u, 0x0000212cu, 0x0000238eu, 0x00000e6du, 0x000500abu, 0x0000005du, 0x0000212du, 0x0000212cu, 0x00000374u, 0x0003003eu, 0x0000200cu, 0x0000212du, 0x000500c7u, 0x00000006u, 0x0000212fu, 0x0000238eu, 0x00001ba0u, 0x000500abu, 0x0000005du, 0x00002130u, 0x0000212fu, 0x00000374u, 0x0003003eu, 0x0000200du, 0x00002130u, 0x000500c7u, 0x00000006u, 0x00002132u, 0x0000238eu, 0x00001ba5u, 0x000500abu, 0x0000005du, 0x00002133u, 0x00002132u, 0x00000374u, 0x0003003eu, 0x0000200eu, 0x00002133u, 0x000500c7u, 0x00000006u, 0x00002135u, 0x0000238eu, 0x00001baau, 0x000500abu, 0x0000005du, 0x00002136u, 0x00002135u, 0x00000374u, 0x0003003eu, 0x0000200fu, 0x00002136u, 0x000500c7u, 0x00000006u, 0x00002138u, 0x0000238eu, 0x00001bafu, 0x000500abu, 0x0000005du, 0x00002139u, 0x00002138u, 0x00000374u, 0x0003003eu, 0x00002010u, 0x00002139u, 0x000500c7u, 0x00000006u, 0x0000213bu, 0x0000238eu, 0x00001bb4u, 0x000500abu, 0x0000005du, 0x0000213cu, 0x0000213bu, 0x00000374u, 0x0003003eu, 0x00002011u, 0x0000213cu, 0x000500c7u, 0x00000006u, 0x0000213eu, 0x0000238eu, 0x00001bb9u, 0x000500abu, 0x0000005du, 0x0000213fu, 0x0000213eu, 0x00000374u, 0x0003003eu, 0x00002012u, 0x0000213fu, 0x000500c7u, 0x00000006u, 0x00002141u, 0x0000238eu, 0x00001bbeu, 0x000500abu, 0x0000005du, 0x00002142u, 0x00002141u, 0x00000374u, 0x0003003eu, 0x00002013u, 0x00002142u, 0x000500c7u, 0x00000006u, 0x00002144u, 0x0000238eu, 0x00001bc3u, 0x000500abu, 0x0000005du, 0x00002145u, 0x00002144u, 0x00000374u, 0x0003003eu, 0x00002014u, 0x00002145u, 0x000500c7u, 0x00000006u, 0x00002147u, 0x0000238eu, 0x00001bc8u, 0x000500abu, 0x0000005du, 0x00002148u, 0x00002147u, 0x00000374u, 0x0003003eu, 0x00002015u, 0x00002148u, 0x000500c7u, 0x00000006u, 0x0000214au, 0x0000238eu, 0x00001bcdu, 0x000500abu, 0x0000005du, 0x0000214bu, 0x0000214au, 0x00000374u, 0x0003003eu, 0x00002016u, 0x0000214bu, 0x000500c7u, 0x00000006u, 0x0000214du, 0x0000238eu, 0x00001bd2u, 0x000500abu, 0x0000005du, 0x0000214eu, 0x0000214du, 0x00000374u, 0x0003003eu, 0x00002017u, 0x0000214eu, 0x000500c7u, 0x00000006u, 0x00002150u, 0x0000238eu, 0x00001bd6u, 0x000500abu, 0x0000005du, 0x00002151u, 0x00002150u, 0x00000374u, 0x000300f7u, 0x00002152u, 0x00000000u, 0x000400fau, 0x00002151u, 0x00002153u, 0x00002152u, 0x000200f8u, 0x00002153u, 0x0004007cu, 0x00000006u, 0x00002155u, 0x00007a63u, 0x0004007cu, 0x00000006u, 0x00002157u, 0x00007a5cu, 0x00060041u, 0x00001be0u, 0x00002159u, 0x00000ccfu, 0x00000203u, 0x00000218u, 0x0004003du, 0x00000006u, 0x0000215au, 0x00002159u, 0x00050080u, 0x00000006u, 0x0000215bu, 0x00001ed5u, 0x0000215au, 0x0003003eu, 0x00002018u, 0x00002155u, 0x0003003eu, 0x00002019u, 0x00002157u, 0x0003003eu, 0x0000201au, 0x0000215bu, 0x00060050u, 0x00000353u, 0x00002397u, 0x00002155u, 0x00002157u, 0x0000215bu, 0x0003003eu, 0x00002393u, 0x00002397u, 0x0004003du, 0x00000353u, 0x00002398u, 0x00002393u, 0x000500c2u, 0x00000353u, 0x0000239au, 0x00002398u, 0x0000eedcu, 0x0004003du, 0x00000353u, 0x0000239bu, 0x00002393u, 0x0008004fu, 0x00000353u, 0x0000239cu, 0x0000239bu, 0x0000239bu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x0000239du, 0x0000239au, 0x0000239cu, 0x00050084u, 0x00000353u, 0x0000239fu, 0x0000239du, 0x0000eeddu, 0x0003003eu, 0x00002393u, 0x0000239fu, 0x0004003du, 0x00000353u, 0x000023a0u, 0x00002393u, 0x000500c2u, 0x00000353u, 0x000023a2u, 0x000023a0u, 0x0000eedcu, 0x0004003du, 0x00000353u, 0x000023a3u, 0x00002393u, 0x0008004fu, 0x00000353u, 0x000023a4u, 0x000023a3u, 0x000023a3u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x000023a5u, 0x000023a2u, 0x000023a4u, 0x00050084u, 0x00000353u, 0x000023a7u, 0x000023a5u, 0x0000eeddu, 0x0003003eu, 0x00002393u, 0x000023a7u, 0x0004003du, 0x00000353u, 0x000023a8u, 0x00002393u, 0x000500c2u, 0x00000353u, 0x000023aau, 0x000023a8u, 0x0000eedcu, 0x0004003du, 0x00000353u, 0x000023abu, 0x00002393u, 0x0008004fu, 0x00000353u, 0x000023acu, 0x000023abu, 0x000023abu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x000023adu, 0x000023aau, 0x000023acu, 0x00050084u, 0x00000353u, 0x000023afu, 0x000023adu, 0x0000eeddu, 0x0003003eu, 0x00002393u, 0x000023afu, 0x00050041u, 0x00000007u, 0x000023b0u, 0x00002393u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000023b1u, 0x000023b0u, 0x000500c2u, 0x00000006u, 0x000023b2u, 0x000023b1u, 0x00000377u, 0x0004007cu, 0x00000008u, 0x000023b3u, 0x000023b2u, 0x0003003eu, 0x00000202u, 0x000023b3u, 0x000200f9u, 0x00002152u, 0x000200f8u, 0x00002152u, 0x000500c7u, 0x00000006u, 0x0000215eu, 0x000020cfu, 0x00000485u, 0x000500abu, 0x0000005du, 0x0000215fu, 0x0000215eu, 0x00000374u, 0x0003003eu, 0x0000201bu, 0x0000215fu, 0x000300f7u, 0x00002161u, 0x00000000u, 0x000400fau, 0x00002130u, 0x00002162u, 0x00002163u, 0x000200f8u, 0x00002163u, 0x000300f7u, 0x0000219fu, 0x00000000u, 0x000400fau, 0x0000212du, 0x000021a0u, 0x0000219fu, 0x000200f8u, 0x000021a0u, 0x0003003eu, 0x000078aeu, 0x00000622u, 0x000500afu, 0x0000005du, 0x000021a5u, 0x00007a63u, 0x00002353u, 0x000300f7u, 0x000021a6u, 0x00000000u, 0x000400fau, 0x000021a5u, 0x000021a7u, 0x000021a6u, 0x000200f8u, 0x000021a7u, 0x000500b3u, 0x0000005du, 0x000021abu, 0x00007a63u, 0x00002356u, 0x000200f9u, 0x000021a6u, 0x000200f8u, 0x000021a6u, 0x000700f5u, 0x0000005du, 0x000021acu, 0x000021a5u, 0x000021a0u, 0x000021abu, 0x000021a7u, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x000021acu, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x0000219fu, 0x000200f9u, 0x00002161u, 0x000200f8u, 0x00002162u, 0x000500afu, 0x0000005du, 0x00002167u, 0x00007a63u, 0x00002353u, 0x000300f7u, 0x00002168u, 0x00000000u, 0x000400fau, 0x00002167u, 0x00002169u, 0x00002168u, 0x000200f8u, 0x00002169u, 0x000500b3u, 0x0000005du, 0x0000216du, 0x00007a63u, 0x00002356u, 0x000200f9u, 0x00002168u, 0x000200f8u, 0x00002168u, 0x000700f5u, 0x0000005du, 0x0000216eu, 0x00002167u, 0x00002162u, 0x0000216du, 0x00002169u, 0x0003003eu, 0x0000201cu, 0x0000216eu, 0x000400a8u, 0x0000005du, 0x00002170u, 0x0000216eu, 0x000300f7u, 0x00002171u, 0x00000000u, 0x000400fau, 0x00002170u, 0x00002172u, 0x00002171u, 0x000200f8u, 0x00002172u, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x00002171u, 0x0003003eu, 0x00006daau, 0x00002343u, 0x0003003eu, 0x00006dabu, 0x00002353u, 0x0003003eu, 0x00006dacu, 0x00002356u, 0x0003003eu, 0x00002020u, 0x00002370u, 0x0003003eu, 0x00002021u, 0x00007a63u, 0x0003003eu, 0x00002022u, 0x00002118u, 0x0003003eu, 0x00002023u, 0x0000215fu, 0x000300f7u, 0x000023beu, 0x00000000u, 0x000400fau, 0x0000215fu, 0x000023bfu, 0x000023c0u, 0x000200f8u, 0x000023c0u, 0x00050082u, 0x00000008u, 0x000023c8u, 0x00002356u, 0x00007a63u, 0x0003003eu, 0x000023b5u, 0x000023c8u, 0x000200f9u, 0x000023beu, 0x000200f8u, 0x000023bfu, 0x00050082u, 0x00000008u, 0x000023c4u, 0x00007a63u, 0x00002353u, 0x0003003eu, 0x000023b5u, 0x000023c4u, 0x000200f9u, 0x000023beu, 0x000200f8u, 0x000023beu, 0x000700f5u, 0x00000008u, 0x0000b8c7u, 0x000023c4u, 0x000023bfu, 0x000023c8u, 0x000023c0u, 0x0003003eu, 0x000023b4u, 0x0000b8c7u, 0x000500c3u, 0x00000008u, 0x000023cbu, 0x0000b8c7u, 0x0000078du, 0x0003003eu, 0x000023b4u, 0x000023cbu, 0x00060041u, 0x00000cd0u, 0x000023cdu, 0x00000ccfu, 0x00000203u, 0x00000212u, 0x0004003du, 0x00000008u, 0x000023ceu, 0x000023cdu, 0x000500c7u, 0x00000008u, 0x000023cfu, 0x000023cbu, 0x000023ceu, 0x0003003eu, 0x000023b6u, 0x000023cfu, 0x00050082u, 0x00000008u, 0x000023d2u, 0x000023cbu, 0x000023cfu, 0x0003003eu, 0x00002025u, 0x000023d2u, 0x00060041u, 0x00000cd0u, 0x000023d4u, 0x00000ccfu, 0x00000203u, 0x00000203u, 0x0004003du, 0x00000008u, 0x000023d5u, 0x000023d4u, 0x000500c3u, 0x00000008u, 0x000023d6u, 0x000023cbu, 0x000023d5u, 0x000600a9u, 0x00000008u, 0x000023d8u, 0x0000215fu, 0x00000212u, 0x00000cddu, 0x00050084u, 0x00000008u, 0x000023d9u, 0x000023d6u, 0x000023d8u, 0x0003003eu, 0x000023b7u, 0x000023d9u, 0x0008004fu, 0x0000003cu, 0x000023dcu, 0x00002343u, 0x00002343u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x0000003cu, 0x000023deu, 0x00002370u, 0x00002370u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x000023e0u, 0x000023deu, 0x0000eedeu, 0x00060050u, 0x0000003cu, 0x000023e2u, 0x000023d9u, 0x000023d9u, 0x000023d9u, 0x00050084u, 0x0000003cu, 0x000023e3u, 0x000023e0u, 0x000023e2u, 0x00050080u, 0x0000003cu, 0x000023e4u, 0x000023dcu, 0x000023e3u, 0x0003003eu, 0x000023b8u, 0x000023e4u, 0x000300f7u, 0x000023e6u, 0x00000000u, 0x000400fau, 0x00002118u, 0x000023e7u, 0x000023e8u, 0x000200f8u, 0x000023e8u, 0x000500c3u, 0x0000003cu, 0x000023f1u, 0x000023e4u, 0x0000eedfu, 0x0003003eu, 0x000023bcu, 0x000023f1u, 0x0007004fu, 0x0000005fu, 0x0000247bu, 0x000023f1u, 0x000023f1u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002479u, 0x0000247bu, 0x0003003eu, 0x00002024u, 0x0000247bu, 0x000200f9u, 0x000023e6u, 0x000200f8u, 0x000023e7u, 0x000500c3u, 0x0000003cu, 0x000023ebu, 0x000023e4u, 0x0000eedfu, 0x0003003eu, 0x000023bau, 0x000023ebu, 0x0003003eu, 0x000023bbu, 0x0000b8d1u, 0x00050041u, 0x0000003eu, 0x000023fdu, 0x000023bau, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000023feu, 0x000023fdu, 0x0003003eu, 0x000023f3u, 0x000023feu, 0x000500b3u, 0x0000005du, 0x00002400u, 0x000023feu, 0x00000203u, 0x0003003eu, 0x000023f4u, 0x00002400u, 0x000500c7u, 0x00000008u, 0x00002402u, 0x000023feu, 0x00000c0bu, 0x0003003eu, 0x000023f3u, 0x00002402u, 0x0003003eu, 0x000023f6u, 0x00002402u, 0x0006000cu, 0x00000008u, 0x0000245eu, 0x00000001u, 0x0000004au, 0x00002402u, 0x00050082u, 0x00000008u, 0x0000245fu, 0x00000283u, 0x0000245eu, 0x0007000cu, 0x00000008u, 0x00002460u, 0x00000001u, 0x00000027u, 0x0000245fu, 0x00000283u, 0x0003003eu, 0x00002456u, 0x00002460u, 0x000500c4u, 0x00000008u, 0x00002463u, 0x00002402u, 0x00002460u, 0x000500c7u, 0x00000008u, 0x00002464u, 0x00002463u, 0x00000b25u, 0x0003003eu, 0x00002457u, 0x00002464u, 0x000500c7u, 0x00000008u, 0x00002466u, 0x00002464u, 0x0000038bu, 0x0003003eu, 0x00002458u, 0x00002466u, 0x000500c3u, 0x00000008u, 0x00002468u, 0x00002464u, 0x0000025eu, 0x0003003eu, 0x0000245au, 0x00000be9u, 0x00050041u, 0x00000060u, 0x00002469u, 0x0000245au, 0x00002468u, 0x0004003du, 0x0000005fu, 0x0000246au, 0x00002469u, 0x00050051u, 0x00000008u, 0x0000246bu, 0x0000246au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000246cu, 0x0000246au, 0x00000001u, 0x0003003eu, 0x00002459u, 0x0000246au, 0x00050041u, 0x0000003eu, 0x0000246eu, 0x00002459u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000246fu, 0x0000246eu, 0x00050084u, 0x00000008u, 0x00002471u, 0x0000246fu, 0x00002466u, 0x000500c3u, 0x00000008u, 0x00002472u, 0x00002471u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002473u, 0x00002459u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002474u, 0x00002473u, 0x00050080u, 0x00000008u, 0x00002475u, 0x00002472u, 0x00002474u, 0x0003003eu, 0x0000245bu, 0x00002475u, 0x00050050u, 0x0000005fu, 0x00002478u, 0x00002475u, 0x00002460u, 0x0003003eu, 0x0000245cu, 0x00002478u, 0x0003003eu, 0x000023f5u, 0x00002478u, 0x00050041u, 0x0000003eu, 0x00002405u, 0x000023f5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002406u, 0x00002405u, 0x0003003eu, 0x000023f7u, 0x00002406u, 0x0004003du, 0x0000003cu, 0x00002407u, 0x000023bau, 0x0007004fu, 0x0000005fu, 0x00002408u, 0x00002407u, 0x00002407u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00002409u, 0x000023f5u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000240au, 0x00002409u, 0x00050050u, 0x0000005fu, 0x0000240bu, 0x0000240au, 0x0000240au, 0x00050084u, 0x0000005fu, 0x0000240cu, 0x00002408u, 0x0000240bu, 0x0003003eu, 0x000023f8u, 0x0000240cu, 0x000500c3u, 0x00000008u, 0x0000240eu, 0x00000c1eu, 0x00002406u, 0x0004007eu, 0x00000008u, 0x0000240fu, 0x0000240eu, 0x000500c7u, 0x00000008u, 0x00002410u, 0x00000c1du, 0x0000240fu, 0x0003003eu, 0x000023f9u, 0x00002410u, 0x0004003du, 0x0000005fu, 0x00002411u, 0x000023f8u, 0x00050050u, 0x0000005fu, 0x00002413u, 0x00002410u, 0x00002410u, 0x000500c7u, 0x0000005fu, 0x00002414u, 0x00002411u, 0x00002413u, 0x0003003eu, 0x000023fau, 0x00002414u, 0x000500abu, 0x0000005du, 0x00002416u, 0x00002406u, 0x00000283u, 0x000300f7u, 0x00002417u, 0x00000000u, 0x000400fau, 0x00002416u, 0x00002418u, 0x00002419u, 0x000200f8u, 0x00002419u, 0x0004003du, 0x0000005fu, 0x0000241fu, 0x000023f8u, 0x000500c4u, 0x0000005fu, 0x00002421u, 0x0000241fu, 0x0000eee3u, 0x0003003eu, 0x000023fbu, 0x00002421u, 0x000200f9u, 0x00002417u, 0x000200f8u, 0x00002418u, 0x0004003du, 0x0000005fu, 0x0000241au, 0x000023f8u, 0x00050082u, 0x00000008u, 0x0000241cu, 0x0000027du, 0x00002406u, 0x00050050u, 0x0000005fu, 0x0000241du, 0x0000241cu, 0x0000241cu, 0x000500c3u, 0x0000005fu, 0x0000241eu, 0x0000241au, 0x0000241du, 0x0003003eu, 0x000023f8u, 0x0000241eu, 0x0003003eu, 0x000023fbu, 0x0000241eu, 0x000200f9u, 0x00002417u, 0x000200f8u, 0x00002417u, 0x0004003du, 0x0000005fu, 0x00002422u, 0x000023fau, 0x000500abu, 0x00000879u, 0x00002423u, 0x00002422u, 0x00000c37u, 0x0004009au, 0x0000005du, 0x00002424u, 0x00002423u, 0x000300f7u, 0x00002425u, 0x00000000u, 0x000400fau, 0x00002424u, 0x00002426u, 0x00002425u, 0x000200f8u, 0x00002426u, 0x00050041u, 0x0000003eu, 0x00002427u, 0x000023fau, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002428u, 0x00002427u, 0x000500abu, 0x0000005du, 0x0000242au, 0x00002428u, 0x00002410u, 0x000300f7u, 0x0000242bu, 0x00000000u, 0x000400fau, 0x0000242au, 0x0000242cu, 0x0000242bu, 0x000200f8u, 0x0000242cu, 0x0004003du, 0x00000008u, 0x0000242eu, 0x00002427u, 0x000500abu, 0x0000005du, 0x0000242fu, 0x0000242eu, 0x00000203u, 0x000200f9u, 0x0000242bu, 0x000200f8u, 0x0000242bu, 0x000700f5u, 0x0000005du, 0x00002430u, 0x0000242au, 0x00002426u, 0x0000242fu, 0x0000242cu, 0x000300f7u, 0x00002431u, 0x00000000u, 0x000400fau, 0x00002430u, 0x00002432u, 0x00002431u, 0x000200f8u, 0x00002432u, 0x00050041u, 0x0000003eu, 0x00002433u, 0x000023f8u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002434u, 0x00002433u, 0x000500c7u, 0x00000008u, 0x00002435u, 0x00002434u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002436u, 0x00002435u, 0x00000203u, 0x000300f7u, 0x00002437u, 0x00000000u, 0x000400fau, 0x00002436u, 0x00002438u, 0x00002439u, 0x000200f8u, 0x00002439u, 0x00050041u, 0x0000003eu, 0x0000243bu, 0x000023fbu, 0x00000374u, 0x0003003eu, 0x0000243bu, 0x00000c50u, 0x000200f9u, 0x00002437u, 0x000200f8u, 0x00002438u, 0x00050041u, 0x0000003eu, 0x0000243au, 0x000023fbu, 0x00000374u, 0x0003003eu, 0x0000243au, 0x00000c0bu, 0x000200f9u, 0x00002437u, 0x000200f8u, 0x00002437u, 0x0003003eu, 0x000023bbu, 0x0000055eu, 0x000200f9u, 0x00002431u, 0x000200f8u, 0x00002431u, 0x000600a9u, 0x0000005du, 0x0000eef8u, 0x00002430u, 0x0000055eu, 0x0000b8d1u, 0x00050041u, 0x0000003eu, 0x0000243cu, 0x000023fau, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000243du, 0x0000243cu, 0x000500abu, 0x0000005du, 0x0000243fu, 0x0000243du, 0x00002410u, 0x000300f7u, 0x00002440u, 0x00000000u, 0x000400fau, 0x0000243fu, 0x00002441u, 0x00002440u, 0x000200f8u, 0x00002441u, 0x0004003du, 0x00000008u, 0x00002443u, 0x0000243cu, 0x000500abu, 0x0000005du, 0x00002444u, 0x00002443u, 0x00000203u, 0x000200f9u, 0x00002440u, 0x000200f8u, 0x00002440u, 0x000700f5u, 0x0000005du, 0x00002445u, 0x0000243fu, 0x00002431u, 0x00002444u, 0x00002441u, 0x000300f7u, 0x00002446u, 0x00000000u, 0x000400fau, 0x00002445u, 0x00002447u, 0x00002446u, 0x000200f8u, 0x00002447u, 0x00050041u, 0x0000003eu, 0x00002448u, 0x000023f8u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002449u, 0x00002448u, 0x000500c7u, 0x00000008u, 0x0000244au, 0x00002449u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x0000244bu, 0x0000244au, 0x00000203u, 0x000300f7u, 0x0000244cu, 0x00000000u, 0x000400fau, 0x0000244bu, 0x0000244du, 0x0000244eu, 0x000200f8u, 0x0000244eu, 0x00050041u, 0x0000003eu, 0x00002450u, 0x000023fbu, 0x00000485u, 0x0003003eu, 0x00002450u, 0x00000c50u, 0x000200f9u, 0x0000244cu, 0x000200f8u, 0x0000244du, 0x00050041u, 0x0000003eu, 0x0000244fu, 0x000023fbu, 0x00000485u, 0x0003003eu, 0x0000244fu, 0x00000c0bu, 0x000200f9u, 0x0000244cu, 0x000200f8u, 0x0000244cu, 0x0003003eu, 0x000023bbu, 0x0000055eu, 0x000200f9u, 0x00002446u, 0x000200f8u, 0x00002446u, 0x000600a9u, 0x0000005du, 0x0000eef9u, 0x00002445u, 0x0000055eu, 0x0000eef8u, 0x000200f9u, 0x00002425u, 0x000200f8u, 0x00002425u, 0x000700f5u, 0x0000005du, 0x0000b8e4u, 0x0000b8d1u, 0x00002417u, 0x0000eef9u, 0x00002446u, 0x000300f7u, 0x00002452u, 0x00000000u, 0x000400fau, 0x00002400u, 0x00002453u, 0x00002452u, 0x000200f8u, 0x00002453u, 0x0003003eu, 0x000023fbu, 0x00000c6au, 0x0003003eu, 0x000023bbu, 0x0000055eu, 0x000200f9u, 0x00002452u, 0x000200f8u, 0x00002452u, 0x000600a9u, 0x0000005du, 0x0000eefau, 0x00002400u, 0x0000055eu, 0x0000b8e4u, 0x0004003du, 0x0000005fu, 0x00002454u, 0x000023fbu, 0x0008000cu, 0x0000005fu, 0x00002455u, 0x00000001u, 0x0000002du, 0x00002454u, 0x00000c6du, 0x00000c6eu, 0x0003003eu, 0x000023fcu, 0x00002455u, 0x0003003eu, 0x000023b9u, 0x0000eefau, 0x0003003eu, 0x00002024u, 0x00002455u, 0x000200f9u, 0x000023e6u, 0x000200f8u, 0x000023e6u, 0x000700f5u, 0x0000005du, 0x0000e690u, 0x0000eefau, 0x00002452u, 0x0000b8d1u, 0x000023e8u, 0x000700f5u, 0x0000005fu, 0x0000b8eau, 0x00002455u, 0x00002452u, 0x0000247bu, 0x000023e8u, 0x0003003eu, 0x0000201du, 0x0000b8eau, 0x0003003eu, 0x0000201eu, 0x000023d2u, 0x000500c7u, 0x00000006u, 0x0000217du, 0x000020eeu, 0x0000073fu, 0x0003003eu, 0x00002026u, 0x0000217du, 0x00080041u, 0x00000277u, 0x00002180u, 0x00000a19u, 0x00000203u, 0x00001ed5u, 0x00000215u, 0x0000217du, 0x0004003du, 0x00000229u, 0x00002181u, 0x00002180u, 0x00040071u, 0x00000006u, 0x00002182u, 0x00002181u, 0x0003003eu, 0x00002027u, 0x00002182u, 0x0003003eu, 0x00002029u, 0x00002182u, 0x00070041u, 0x0000026bu, 0x0000247eu, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000203u, 0x0004003du, 0x00000006u, 0x0000247fu, 0x0000247eu, 0x00070041u, 0x0000026bu, 0x00002481u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000212u, 0x0004003du, 0x00000006u, 0x00002482u, 0x00002481u, 0x00070041u, 0x0000026bu, 0x00002484u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00002485u, 0x00002484u, 0x00070041u, 0x0000026bu, 0x00002487u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00002488u, 0x00002487u, 0x00070041u, 0x0000026bu, 0x0000248au, 0x000002d1u, 0x00000203u, 0x00002182u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000248bu, 0x0000248au, 0x00070041u, 0x0000026bu, 0x0000248du, 0x000002d1u, 0x00000203u, 0x00002182u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000248eu, 0x0000248du, 0x00070041u, 0x00000277u, 0x00002490u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000221u, 0x0004003du, 0x00000229u, 0x00002491u, 0x00002490u, 0x00040071u, 0x00000006u, 0x00002492u, 0x00002491u, 0x0004007cu, 0x00000008u, 0x00002493u, 0x00002492u, 0x00070041u, 0x00000277u, 0x00002495u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000224u, 0x0004003du, 0x00000229u, 0x00002496u, 0x00002495u, 0x00040071u, 0x00000006u, 0x00002497u, 0x00002496u, 0x0004007cu, 0x00000008u, 0x00002498u, 0x00002497u, 0x00070041u, 0x00000277u, 0x0000249au, 0x000002d1u, 0x00000203u, 0x00002182u, 0x0000025eu, 0x0004003du, 0x00000229u, 0x0000249bu, 0x0000249au, 0x00040071u, 0x00000006u, 0x0000249cu, 0x0000249bu, 0x0004007cu, 0x00000008u, 0x0000249du, 0x0000249cu, 0x00070041u, 0x00000277u, 0x0000249fu, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000024a0u, 0x0000249fu, 0x00040071u, 0x00000006u, 0x000024a1u, 0x000024a0u, 0x0004007cu, 0x00000008u, 0x000024a2u, 0x000024a1u, 0x00070041u, 0x00000277u, 0x000024a4u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000024a5u, 0x000024a4u, 0x00040071u, 0x00000006u, 0x000024a6u, 0x000024a5u, 0x0004007cu, 0x00000008u, 0x000024a7u, 0x000024a6u, 0x00070041u, 0x00000277u, 0x000024a9u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x0000026fu, 0x0004003du, 0x00000229u, 0x000024aau, 0x000024a9u, 0x00040071u, 0x00000006u, 0x000024abu, 0x000024aau, 0x0004007cu, 0x00000008u, 0x000024acu, 0x000024abu, 0x00070041u, 0x00000277u, 0x000024aeu, 0x000002d1u, 0x00000203u, 0x00002182u, 0x00000276u, 0x0004003du, 0x00000229u, 0x000024afu, 0x000024aeu, 0x00040071u, 0x00000006u, 0x000024b0u, 0x000024afu, 0x0004007cu, 0x00000008u, 0x000024b1u, 0x000024b0u, 0x00070041u, 0x00000277u, 0x000024b3u, 0x000002d1u, 0x00000203u, 0x00002182u, 0x0000027du, 0x0004003du, 0x00000229u, 0x000024b4u, 0x000024b3u, 0x00040071u, 0x00000006u, 0x000024b5u, 0x000024b4u, 0x0004007cu, 0x00000008u, 0x000024b6u, 0x000024b5u, 0x00110050u, 0x0000001eu, 0x000024b7u, 0x0000247fu, 0x00002482u, 0x00002485u, 0x00002488u, 0x0000248bu, 0x0000248eu, 0x00002493u, 0x00002498u, 0x0000249du, 0x000024a2u, 0x000024a7u, 0x000024acu, 0x000024b1u, 0x000024b6u, 0x0003003eu, 0x00006cd4u, 0x0000247fu, 0x0003003eu, 0x00006cd5u, 0x00002482u, 0x0003003eu, 0x00006cd6u, 0x00002485u, 0x0003003eu, 0x00006cd7u, 0x00002488u, 0x0003003eu, 0x00006cd8u, 0x0000248bu, 0x0003003eu, 0x00006cd9u, 0x0000248eu, 0x0003003eu, 0x00006cdau, 0x00002493u, 0x0003003eu, 0x00006cdbu, 0x00002498u, 0x0003003eu, 0x00006cdcu, 0x0000249du, 0x0003003eu, 0x00006cddu, 0x000024a2u, 0x0003003eu, 0x00006cdeu, 0x000024a7u, 0x0003003eu, 0x00006cdfu, 0x000024acu, 0x0003003eu, 0x00006ce0u, 0x000024b1u, 0x0003003eu, 0x00006ce1u, 0x000024b6u, 0x0003003eu, 0x00006db0u, 0x0000247fu, 0x0003003eu, 0x00006db1u, 0x00002482u, 0x0003003eu, 0x00006db2u, 0x00002485u, 0x0003003eu, 0x00006db3u, 0x00002488u, 0x0003003eu, 0x00006db4u, 0x0000248bu, 0x0003003eu, 0x00006db5u, 0x0000248eu, 0x0003003eu, 0x00006db6u, 0x00002493u, 0x0003003eu, 0x00006db7u, 0x00002498u, 0x0003003eu, 0x00006db8u, 0x0000249du, 0x0003003eu, 0x00006db9u, 0x000024a2u, 0x0003003eu, 0x00006dbau, 0x000024a7u, 0x0003003eu, 0x00006dbbu, 0x000024acu, 0x0003003eu, 0x00006dbcu, 0x000024b1u, 0x0003003eu, 0x00006dbdu, 0x000024b6u, 0x0003003eu, 0x00006ddbu, 0x0000247fu, 0x0003003eu, 0x00006ddcu, 0x00002485u, 0x0003003eu, 0x00006dddu, 0x0000248bu, 0x0003003eu, 0x00006ddeu, 0x0000248eu, 0x0003003eu, 0x00006ddfu, 0x00002498u, 0x0003003eu, 0x00006de0u, 0x0000249du, 0x0003003eu, 0x00006de1u, 0x000024a2u, 0x0003003eu, 0x00006de2u, 0x000024a7u, 0x0003003eu, 0x00006de3u, 0x000024acu, 0x0003003eu, 0x00006de4u, 0x000024b1u, 0x0003003eu, 0x00006de5u, 0x000024b6u, 0x0003003eu, 0x0000202cu, 0x000020f8u, 0x0003003eu, 0x0000202du, 0x0000b8eau, 0x0003003eu, 0x0000202eu, 0x000023d2u, 0x0003003eu, 0x0000202fu, 0x00002109u, 0x0003003eu, 0x00002030u, 0x0000210cu, 0x0004007cu, 0x00000008u, 0x000024ceu, 0x0000247fu, 0x00050041u, 0x0000003eu, 0x000024d1u, 0x0000202du, 0x00000374u, 0x0004003du, 0x00000008u, 0x000024d2u, 0x000024d1u, 0x0003003eu, 0x000024b8u, 0x000024d2u, 0x0003003eu, 0x000024b9u, 0x000024ceu, 0x0003003eu, 0x000024bau, 0x000024a7u, 0x0008000cu, 0x00000008u, 0x00002507u, 0x00000001u, 0x0000002du, 0x000024d2u, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x000024b8u, 0x00002507u, 0x000500b1u, 0x0000005du, 0x00002509u, 0x000024a7u, 0x0000026fu, 0x000300f7u, 0x0000250au, 0x00000000u, 0x000400fau, 0x00002509u, 0x0000250bu, 0x0000250cu, 0x000200f8u, 0x0000250cu, 0x00050082u, 0x00000008u, 0x00002511u, 0x0000037du, 0x000024a7u, 0x000500c4u, 0x00000008u, 0x00002513u, 0x00002507u, 0x00002511u, 0x0003003eu, 0x000024b8u, 0x00002513u, 0x000500c3u, 0x00000008u, 0x00002515u, 0x00002513u, 0x00000559u, 0x0003003eu, 0x000024b8u, 0x00002515u, 0x000200f9u, 0x0000250au, 0x000200f8u, 0x0000250bu, 0x000500c3u, 0x00000008u, 0x0000250fu, 0x00002507u, 0x000024a7u, 0x0003003eu, 0x000024b8u, 0x0000250fu, 0x000200f9u, 0x0000250au, 0x000200f8u, 0x0000250au, 0x000700f5u, 0x00000008u, 0x0000b932u, 0x0000250fu, 0x0000250bu, 0x00002515u, 0x0000250cu, 0x000500c4u, 0x00000008u, 0x00002517u, 0x000024ceu, 0x00000218u, 0x00050082u, 0x00000008u, 0x00002519u, 0x0000b932u, 0x00002517u, 0x0003003eu, 0x000024b8u, 0x00002519u, 0x0003003eu, 0x00002505u, 0x00002519u, 0x0003003eu, 0x000024d1u, 0x00002519u, 0x0004007cu, 0x00000008u, 0x000024d7u, 0x00002485u, 0x00050041u, 0x0000003eu, 0x000024dau, 0x0000202du, 0x00000485u, 0x0004003du, 0x00000008u, 0x000024dbu, 0x000024dau, 0x0003003eu, 0x000024bbu, 0x000024dbu, 0x0003003eu, 0x000024bcu, 0x000024d7u, 0x0003003eu, 0x000024bdu, 0x000024b1u, 0x0008000cu, 0x00000008u, 0x0000251du, 0x00000001u, 0x0000002du, 0x000024dbu, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x000024bbu, 0x0000251du, 0x000500b1u, 0x0000005du, 0x0000251fu, 0x000024b1u, 0x0000026fu, 0x000300f7u, 0x00002520u, 0x00000000u, 0x000400fau, 0x0000251fu, 0x00002521u, 0x00002522u, 0x000200f8u, 0x00002522u, 0x00050082u, 0x00000008u, 0x00002527u, 0x0000037du, 0x000024b1u, 0x000500c4u, 0x00000008u, 0x00002529u, 0x0000251du, 0x00002527u, 0x0003003eu, 0x000024bbu, 0x00002529u, 0x000500c3u, 0x00000008u, 0x0000252bu, 0x00002529u, 0x00000559u, 0x0003003eu, 0x000024bbu, 0x0000252bu, 0x000200f9u, 0x00002520u, 0x000200f8u, 0x00002521u, 0x000500c3u, 0x00000008u, 0x00002525u, 0x0000251du, 0x000024b1u, 0x0003003eu, 0x000024bbu, 0x00002525u, 0x000200f9u, 0x00002520u, 0x000200f8u, 0x00002520u, 0x000700f5u, 0x00000008u, 0x0000b936u, 0x00002525u, 0x00002521u, 0x0000252bu, 0x00002522u, 0x000500c4u, 0x00000008u, 0x0000252du, 0x000024d7u, 0x00000218u, 0x00050082u, 0x00000008u, 0x0000252fu, 0x0000b936u, 0x0000252du, 0x0003003eu, 0x000024bbu, 0x0000252fu, 0x0003003eu, 0x0000251bu, 0x0000252fu, 0x0003003eu, 0x000024dau, 0x0000252fu, 0x0004003du, 0x0000005fu, 0x000024deu, 0x0000202du, 0x000500c3u, 0x0000005fu, 0x000024e0u, 0x000024deu, 0x0000eee5u, 0x0003003eu, 0x0000202du, 0x000024e0u, 0x00060041u, 0x00000cd0u, 0x000024e1u, 0x00000ccfu, 0x00000203u, 0x00000215u, 0x0004003du, 0x00000008u, 0x000024e2u, 0x000024e1u, 0x000500aau, 0x0000005du, 0x000024e3u, 0x000024e2u, 0x00000203u, 0x000300f7u, 0x000024e4u, 0x00000000u, 0x000400fau, 0x000024e3u, 0x000024e5u, 0x000024e6u, 0x000200f8u, 0x000024e6u, 0x000500aau, 0x0000005du, 0x000024e9u, 0x000024e2u, 0x00000212u, 0x000300f7u, 0x000024eau, 0x00000000u, 0x000400fau, 0x000024e9u, 0x000024ebu, 0x000024ecu, 0x000200f8u, 0x000024ecu, 0x00110050u, 0x0000001eu, 0x00006e08u, 0x0000247fu, 0x00006867u, 0x00002485u, 0x00006867u, 0x0000248bu, 0x0000248eu, 0x0000686au, 0x00002498u, 0x0000249du, 0x000024a2u, 0x000024a7u, 0x000024acu, 0x000024b1u, 0x000024b6u, 0x0003003eu, 0x00006ca6u, 0x0000248bu, 0x0003003eu, 0x00006ca7u, 0x0000248eu, 0x0003003eu, 0x00006ca8u, 0x00002498u, 0x0003003eu, 0x00006ca9u, 0x0000249du, 0x0003003eu, 0x00006caau, 0x000024a2u, 0x0003003eu, 0x00006cabu, 0x000024acu, 0x0003003eu, 0x00006cacu, 0x000024b6u, 0x0003003eu, 0x000024c6u, 0x000020f8u, 0x0004003du, 0x0000005fu, 0x000024ffu, 0x0000202du, 0x0003003eu, 0x000024c7u, 0x000024ffu, 0x0003003eu, 0x000024c8u, 0x000023d2u, 0x0003003eu, 0x000024c9u, 0x00002109u, 0x0003003eu, 0x000024cau, 0x0000210cu, 0x000500b1u, 0x0000005du, 0x000026d9u, 0x000023d2u, 0x00000215u, 0x0003003eu, 0x000026bdu, 0x000026d9u, 0x000300f7u, 0x000026dbu, 0x00000000u, 0x000400fau, 0x000026d9u, 0x000026dcu, 0x000026dbu, 0x000200f8u, 0x000026dcu, 0x000500abu, 0x0000005du, 0x000026dfu, 0x00002498u, 0x00000215u, 0x000200f9u, 0x000026dbu, 0x000200f8u, 0x000026dbu, 0x000700f5u, 0x0000005du, 0x000026e0u, 0x000026d9u, 0x000024ecu, 0x000026dfu, 0x000026dcu, 0x000400a8u, 0x0000005du, 0x000026e2u, 0x00002109u, 0x000500a7u, 0x0000005du, 0x000026e3u, 0x000026e0u, 0x000026e2u, 0x0003003eu, 0x000026beu, 0x000026e3u, 0x0007000cu, 0x00000008u, 0x000026e6u, 0x00000001u, 0x00000027u, 0x00002498u, 0x00000215u, 0x0003003eu, 0x000026bfu, 0x000026e6u, 0x000500aau, 0x0000005du, 0x000026e9u, 0x00002498u, 0x00000218u, 0x0003003eu, 0x000026c0u, 0x000026e9u, 0x000500a6u, 0x0000005du, 0x000026ecu, 0x000026e9u, 0x00002109u, 0x000600a9u, 0x00000008u, 0x000026edu, 0x000026ecu, 0x00001140u, 0x0000040au, 0x0003003eu, 0x000026c1u, 0x000026edu, 0x000300f7u, 0x000026efu, 0x00000000u, 0x000400fau, 0x000026e3u, 0x000026f0u, 0x000026f1u, 0x000200f8u, 0x000026f1u, 0x00050041u, 0x0000003eu, 0x00002771u, 0x000024c7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002772u, 0x00002771u, 0x00050080u, 0x00000008u, 0x00002773u, 0x00002772u, 0x000023d2u, 0x0003003eu, 0x00002771u, 0x00002773u, 0x00110050u, 0x0000001eu, 0x00006ccbu, 0x00006867u, 0x00006867u, 0x00006867u, 0x00006867u, 0x0000248bu, 0x0000248eu, 0x0000686au, 0x00002498u, 0x0000249du, 0x000024a2u, 0x0000686au, 0x000024acu, 0x0000686au, 0x000024b6u, 0x0003003eu, 0x00006c60u, 0x000024a2u, 0x0003003eu, 0x00006c61u, 0x000024b6u, 0x0004003du, 0x00000008u, 0x00002777u, 0x00002771u, 0x0003003eu, 0x000026d0u, 0x00002777u, 0x000500abu, 0x0000005du, 0x00002815u, 0x000024a2u, 0x00000203u, 0x000300f7u, 0x00002816u, 0x00000000u, 0x000400fau, 0x00002815u, 0x00002817u, 0x00002816u, 0x000200f8u, 0x00002817u, 0x000500c4u, 0x00000008u, 0x0000281au, 0x00000212u, 0x000024a2u, 0x0003003eu, 0x00002811u, 0x0000281au, 0x000500c7u, 0x00000008u, 0x0000281du, 0x000024b6u, 0x00000215u, 0x000500abu, 0x0000005du, 0x0000281eu, 0x0000281du, 0x00000203u, 0x000300f7u, 0x0000281fu, 0x00000000u, 0x000400fau, 0x0000281eu, 0x00002820u, 0x0000281fu, 0x000200f8u, 0x00002820u, 0x000500c7u, 0x00000008u, 0x00002823u, 0x00002777u, 0x0000281au, 0x00050082u, 0x00000008u, 0x00002824u, 0x00002823u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00002825u, 0x00000001u, 0x0000002au, 0x00002824u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00002827u, 0x00002777u, 0x00002825u, 0x0003003eu, 0x000026d0u, 0x00002827u, 0x000200f9u, 0x0000281fu, 0x000200f8u, 0x0000281fu, 0x000700f5u, 0x00000008u, 0x0000b95du, 0x00002777u, 0x00002817u, 0x00002827u, 0x00002820u, 0x00050082u, 0x00000008u, 0x00002829u, 0x0000281au, 0x00000212u, 0x000500c7u, 0x00000008u, 0x0000282bu, 0x0000b95du, 0x00002829u, 0x0003003eu, 0x000026d0u, 0x0000282bu, 0x000200f9u, 0x00002816u, 0x000200f8u, 0x00002816u, 0x000700f5u, 0x00000008u, 0x0000b95eu, 0x00002777u, 0x000026f1u, 0x0000282bu, 0x0000281fu, 0x0003003eu, 0x00002812u, 0x0000b95eu, 0x0003003eu, 0x000026ceu, 0x0000b95eu, 0x0003003eu, 0x00006c64u, 0x000024acu, 0x0003003eu, 0x00006c65u, 0x000024b6u, 0x00050041u, 0x0000003eu, 0x0000277au, 0x000024c7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000277bu, 0x0000277au, 0x0003003eu, 0x000026d3u, 0x0000277bu, 0x000500abu, 0x0000005du, 0x00002831u, 0x000024acu, 0x00000203u, 0x000300f7u, 0x00002832u, 0x00000000u, 0x000400fau, 0x00002831u, 0x00002833u, 0x00002832u, 0x000200f8u, 0x00002833u, 0x000500c4u, 0x00000008u, 0x00002836u, 0x00000212u, 0x000024acu, 0x0003003eu, 0x0000282du, 0x00002836u, 0x000500c7u, 0x00000008u, 0x00002839u, 0x000024b6u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x0000283au, 0x00002839u, 0x00000203u, 0x000300f7u, 0x0000283bu, 0x00000000u, 0x000400fau, 0x0000283au, 0x0000283cu, 0x0000283bu, 0x000200f8u, 0x0000283cu, 0x000500c7u, 0x00000008u, 0x0000283fu, 0x0000277bu, 0x00002836u, 0x00050082u, 0x00000008u, 0x00002840u, 0x0000283fu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00002841u, 0x00000001u, 0x0000002au, 0x00002840u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00002843u, 0x0000277bu, 0x00002841u, 0x0003003eu, 0x000026d3u, 0x00002843u, 0x000200f9u, 0x0000283bu, 0x000200f8u, 0x0000283bu, 0x000700f5u, 0x00000008u, 0x0000b96eu, 0x0000277bu, 0x00002833u, 0x00002843u, 0x0000283cu, 0x00050082u, 0x00000008u, 0x00002845u, 0x00002836u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00002847u, 0x0000b96eu, 0x00002845u, 0x0003003eu, 0x000026d3u, 0x00002847u, 0x000200f9u, 0x00002832u, 0x000200f8u, 0x00002832u, 0x000700f5u, 0x00000008u, 0x0000b96fu, 0x0000277bu, 0x00002816u, 0x00002847u, 0x0000283bu, 0x0003003eu, 0x0000282eu, 0x0000b96fu, 0x0003003eu, 0x000026d1u, 0x0000b96fu, 0x0004007cu, 0x00000006u, 0x00002782u, 0x0000b96fu, 0x00050084u, 0x00000006u, 0x00002783u, 0x0000248eu, 0x00002782u, 0x00050080u, 0x00000006u, 0x00002784u, 0x0000248bu, 0x00002783u, 0x0003003eu, 0x000026d4u, 0x00002784u, 0x00050084u, 0x00000006u, 0x00002786u, 0x00002784u, 0x000003c4u, 0x000500c4u, 0x00000008u, 0x00002789u, 0x0000b95eu, 0x000026e6u, 0x0004007cu, 0x00000006u, 0x0000278au, 0x00002789u, 0x00050080u, 0x00000006u, 0x0000278bu, 0x00002786u, 0x0000278au, 0x000500c7u, 0x00000006u, 0x0000278cu, 0x0000278bu, 0x000011adu, 0x0003003eu, 0x000026d5u, 0x0000278cu, 0x000500c7u, 0x00000006u, 0x0000278fu, 0x00002782u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00002790u, 0x0000278fu, 0x0000035bu, 0x000500c6u, 0x00000006u, 0x00002792u, 0x0000278cu, 0x00002790u, 0x0003003eu, 0x000026d5u, 0x00002792u, 0x000500c2u, 0x00000006u, 0x00002794u, 0x00002792u, 0x000003c4u, 0x0003003eu, 0x000026d6u, 0x00002794u, 0x0004007cu, 0x00000006u, 0x00002796u, 0x000026edu, 0x000500c7u, 0x00000006u, 0x00002798u, 0x00002794u, 0x00002796u, 0x0003003eu, 0x000026d6u, 0x00002798u, 0x000500c6u, 0x00000006u, 0x0000279bu, 0x00002798u, 0x00000485u, 0x00080041u, 0x00000270u, 0x0000279cu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000279bu, 0x0004003du, 0x0000022bu, 0x0000279du, 0x0000279cu, 0x00040071u, 0x00000006u, 0x0000279eu, 0x0000279du, 0x0004007cu, 0x00000008u, 0x0000279fu, 0x0000279eu, 0x0003003eu, 0x000026cdu, 0x0000279fu, 0x000300f7u, 0x000027a1u, 0x00000000u, 0x000400fau, 0x00002109u, 0x000027a2u, 0x000027a1u, 0x000200f8u, 0x000027a2u, 0x000500aau, 0x0000005du, 0x000027a5u, 0x00002498u, 0x00000203u, 0x000300f7u, 0x000027a6u, 0x00000000u, 0x000400fau, 0x000027a5u, 0x000027a7u, 0x000027a8u, 0x000200f8u, 0x000027a8u, 0x000500c7u, 0x00000006u, 0x000027bcu, 0x00002792u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000027bdu, 0x00000701u, 0x000027bcu, 0x00050082u, 0x00000006u, 0x000027beu, 0x0000035bu, 0x000027bdu, 0x000500c3u, 0x00000008u, 0x000027c0u, 0x0000279fu, 0x000027beu, 0x0003003eu, 0x000026cdu, 0x000027c0u, 0x000500c7u, 0x00000008u, 0x000027c2u, 0x000027c0u, 0x0000038bu, 0x0003003eu, 0x000026cdu, 0x000027c2u, 0x000500c4u, 0x00000008u, 0x000027c4u, 0x000027c2u, 0x00000215u, 0x0003003eu, 0x000026cdu, 0x000027c4u, 0x00050080u, 0x00000008u, 0x000027c7u, 0x000027c4u, 0x000023d2u, 0x0003003eu, 0x000026cdu, 0x000027c7u, 0x000200f9u, 0x000027a6u, 0x000200f8u, 0x000027a7u, 0x000500c7u, 0x00000006u, 0x000027aau, 0x00002792u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x000027abu, 0x00000701u, 0x000027aau, 0x00050082u, 0x00000006u, 0x000027acu, 0x00001253u, 0x000027abu, 0x000500c3u, 0x00000008u, 0x000027aeu, 0x0000279fu, 0x000027acu, 0x0003003eu, 0x000026cdu, 0x000027aeu, 0x000500c7u, 0x00000008u, 0x000027b0u, 0x000027aeu, 0x00000540u, 0x0003003eu, 0x000026cdu, 0x000027b0u, 0x000500c4u, 0x00000008u, 0x000027b3u, 0x0000249du, 0x0000021bu, 0x000500c5u, 0x00000008u, 0x000027b5u, 0x000027b0u, 0x000027b3u, 0x0003003eu, 0x000026cdu, 0x000027b5u, 0x000500c4u, 0x00000008u, 0x000027b7u, 0x000027b5u, 0x00000215u, 0x0003003eu, 0x000026cdu, 0x000027b7u, 0x00050080u, 0x00000008u, 0x000027bau, 0x000027b7u, 0x000023d2u, 0x0003003eu, 0x000026cdu, 0x000027bau, 0x000200f9u, 0x000027a6u, 0x000200f8u, 0x000027a6u, 0x000700f5u, 0x00000008u, 0x0000b990u, 0x000027bau, 0x000027a7u, 0x000027c7u, 0x000027a8u, 0x000500c5u, 0x00000008u, 0x000027cau, 0x0000b990u, 0x00001276u, 0x000500c6u, 0x00000008u, 0x000027cbu, 0x000027cau, 0x00000212u, 0x00080041u, 0x00000270u, 0x000027ccu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000027cbu, 0x0004003du, 0x0000022bu, 0x000027cdu, 0x000027ccu, 0x00040071u, 0x00000006u, 0x000027ceu, 0x000027cdu, 0x0004007cu, 0x00000008u, 0x000027cfu, 0x000027ceu, 0x0003003eu, 0x000026cdu, 0x000027cfu, 0x000200f9u, 0x000027a1u, 0x000200f8u, 0x000027a1u, 0x000700f5u, 0x00000008u, 0x0000b9beu, 0x0000279fu, 0x00002832u, 0x000027cfu, 0x000027a6u, 0x000200f9u, 0x000026efu, 0x000200f8u, 0x000026f0u, 0x00050084u, 0x00000008u, 0x000026f3u, 0x00000215u, 0x000023d2u, 0x00050041u, 0x0000003eu, 0x000026f4u, 0x000024c7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000026f5u, 0x000026f4u, 0x00050080u, 0x00000008u, 0x000026f6u, 0x000026f5u, 0x000026f3u, 0x0003003eu, 0x000026f4u, 0x000026f6u, 0x00110050u, 0x0000001eu, 0x00006cbbu, 0x00006867u, 0x00006867u, 0x00006867u, 0x00006867u, 0x0000248bu, 0x0000248eu, 0x0000686au, 0x00002498u, 0x0000249du, 0x000024a2u, 0x0000686au, 0x000024acu, 0x0000686au, 0x000024b6u, 0x0003003eu, 0x00006c58u, 0x000024a2u, 0x0003003eu, 0x00006c59u, 0x000024b6u, 0x0004003du, 0x00000008u, 0x000026fau, 0x000026f4u, 0x0003003eu, 0x000026c4u, 0x000026fau, 0x00050050u, 0x0000005fu, 0x000027d5u, 0x000026fau, 0x000026fau, 0x00050080u, 0x0000005fu, 0x000027d6u, 0x000027d5u, 0x00000ddbu, 0x0003003eu, 0x000027d1u, 0x000027d6u, 0x000500abu, 0x0000005du, 0x000027d9u, 0x000024a2u, 0x00000203u, 0x000300f7u, 0x000027dau, 0x00000000u, 0x000400fau, 0x000027d9u, 0x000027dbu, 0x000027dau, 0x000200f8u, 0x000027dbu, 0x000500c4u, 0x00000008u, 0x000027deu, 0x00000212u, 0x000024a2u, 0x0003003eu, 0x000027d2u, 0x000027deu, 0x000500c7u, 0x00000008u, 0x000027e1u, 0x000024b6u, 0x00000215u, 0x000500abu, 0x0000005du, 0x000027e2u, 0x000027e1u, 0x00000203u, 0x000300f7u, 0x000027e3u, 0x00000000u, 0x000400fau, 0x000027e2u, 0x000027e4u, 0x000027e3u, 0x000200f8u, 0x000027e4u, 0x00050050u, 0x0000005fu, 0x000027e7u, 0x000027deu, 0x000027deu, 0x000500c7u, 0x0000005fu, 0x000027e8u, 0x000027d6u, 0x000027e7u, 0x00050082u, 0x0000005fu, 0x000027eau, 0x000027e8u, 0x0000eee3u, 0x0007000cu, 0x0000005fu, 0x000027ecu, 0x00000001u, 0x0000002au, 0x000027eau, 0x00000c37u, 0x000500c6u, 0x0000005fu, 0x000027eeu, 0x000027d6u, 0x000027ecu, 0x0003003eu, 0x000027d1u, 0x000027eeu, 0x000200f9u, 0x000027e3u, 0x000200f8u, 0x000027e3u, 0x000700f5u, 0x0000005fu, 0x0000b992u, 0x000027d6u, 0x000027dbu, 0x000027eeu, 0x000027e4u, 0x00050082u, 0x00000008u, 0x000027f0u, 0x000027deu, 0x00000212u, 0x00050050u, 0x0000005fu, 0x000027f2u, 0x000027f0u, 0x000027f0u, 0x000500c7u, 0x0000005fu, 0x000027f3u, 0x0000b992u, 0x000027f2u, 0x0003003eu, 0x000027d1u, 0x000027f3u, 0x000200f9u, 0x000027dau, 0x000200f8u, 0x000027dau, 0x000700f5u, 0x0000005fu, 0x0000b993u, 0x000027d6u, 0x000026f0u, 0x000027f3u, 0x000027e3u, 0x0003003eu, 0x000027d3u, 0x0000b993u, 0x0003003eu, 0x000026c2u, 0x0000b993u, 0x0003003eu, 0x00006c5cu, 0x000024acu, 0x0003003eu, 0x00006c5du, 0x000024b6u, 0x00050041u, 0x0000003eu, 0x000026fdu, 0x000024c7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000026feu, 0x000026fdu, 0x0003003eu, 0x000026c7u, 0x000026feu, 0x000500abu, 0x0000005du, 0x000027f9u, 0x000024acu, 0x00000203u, 0x000300f7u, 0x000027fau, 0x00000000u, 0x000400fau, 0x000027f9u, 0x000027fbu, 0x000027fau, 0x000200f8u, 0x000027fbu, 0x000500c4u, 0x00000008u, 0x000027feu, 0x00000212u, 0x000024acu, 0x0003003eu, 0x000027f5u, 0x000027feu, 0x000500c7u, 0x00000008u, 0x00002801u, 0x000024b6u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00002802u, 0x00002801u, 0x00000203u, 0x000300f7u, 0x00002803u, 0x00000000u, 0x000400fau, 0x00002802u, 0x00002804u, 0x00002803u, 0x000200f8u, 0x00002804u, 0x000500c7u, 0x00000008u, 0x00002807u, 0x000026feu, 0x000027feu, 0x00050082u, 0x00000008u, 0x00002808u, 0x00002807u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00002809u, 0x00000001u, 0x0000002au, 0x00002808u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x0000280bu, 0x000026feu, 0x00002809u, 0x0003003eu, 0x000026c7u, 0x0000280bu, 0x000200f9u, 0x00002803u, 0x000200f8u, 0x00002803u, 0x000700f5u, 0x00000008u, 0x0000b9a3u, 0x000026feu, 0x000027fbu, 0x0000280bu, 0x00002804u, 0x00050082u, 0x00000008u, 0x0000280du, 0x000027feu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x0000280fu, 0x0000b9a3u, 0x0000280du, 0x0003003eu, 0x000026c7u, 0x0000280fu, 0x000200f9u, 0x000027fau, 0x000200f8u, 0x000027fau, 0x000700f5u, 0x00000008u, 0x0000b9a4u, 0x000026feu, 0x000027dau, 0x0000280fu, 0x00002803u, 0x0003003eu, 0x000027f6u, 0x0000b9a4u, 0x0003003eu, 0x000026c5u, 0x0000b9a4u, 0x0004007cu, 0x00000006u, 0x00002705u, 0x0000b9a4u, 0x00050084u, 0x00000006u, 0x00002706u, 0x0000248eu, 0x00002705u, 0x00050080u, 0x00000006u, 0x00002707u, 0x0000248bu, 0x00002706u, 0x0003003eu, 0x000026c8u, 0x00002707u, 0x00050084u, 0x00000006u, 0x00002709u, 0x00002707u, 0x000003c4u, 0x00050050u, 0x0000005fu, 0x0000270cu, 0x000026e6u, 0x000026e6u, 0x000500c4u, 0x0000005fu, 0x0000270du, 0x0000b993u, 0x0000270cu, 0x0004007cu, 0x000000a2u, 0x0000270eu, 0x0000270du, 0x00050050u, 0x000000a2u, 0x0000270fu, 0x00002709u, 0x00002709u, 0x00050080u, 0x000000a2u, 0x00002710u, 0x0000270fu, 0x0000270eu, 0x000500c7u, 0x000000a2u, 0x00002712u, 0x00002710u, 0x0000eee7u, 0x0003003eu, 0x000026c9u, 0x00002712u, 0x000500c7u, 0x00000006u, 0x00002715u, 0x00002705u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00002716u, 0x00002715u, 0x0000035bu, 0x0004003du, 0x000000a2u, 0x00002717u, 0x000026c9u, 0x00050050u, 0x000000a2u, 0x00002718u, 0x00002716u, 0x00002716u, 0x000500c6u, 0x000000a2u, 0x00002719u, 0x00002717u, 0x00002718u, 0x0003003eu, 0x000026c9u, 0x00002719u, 0x0004003du, 0x000000a2u, 0x0000271au, 0x000026c9u, 0x000500c2u, 0x000000a2u, 0x0000271cu, 0x0000271au, 0x0000eee8u, 0x0003003eu, 0x000026cau, 0x0000271cu, 0x0004007cu, 0x00000006u, 0x0000271eu, 0x000026edu, 0x0004003du, 0x000000a2u, 0x0000271fu, 0x000026cau, 0x00050050u, 0x000000a2u, 0x00002720u, 0x0000271eu, 0x0000271eu, 0x000500c7u, 0x000000a2u, 0x00002721u, 0x0000271fu, 0x00002720u, 0x0003003eu, 0x000026cau, 0x00002721u, 0x00050041u, 0x00000007u, 0x00002723u, 0x000026cau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00002724u, 0x00002723u, 0x000500c6u, 0x00000006u, 0x00002725u, 0x00002724u, 0x00000485u, 0x00080041u, 0x00000270u, 0x00002726u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00002725u, 0x0004003du, 0x0000022bu, 0x00002727u, 0x00002726u, 0x00040071u, 0x00000006u, 0x00002728u, 0x00002727u, 0x0004007cu, 0x00000008u, 0x00002729u, 0x00002728u, 0x0003003eu, 0x000026cbu, 0x00002729u, 0x00050041u, 0x00000007u, 0x0000272bu, 0x000026cau, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000272cu, 0x0000272bu, 0x000500c6u, 0x00000006u, 0x0000272du, 0x0000272cu, 0x00000485u, 0x00080041u, 0x00000270u, 0x0000272eu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000272du, 0x0004003du, 0x0000022bu, 0x0000272fu, 0x0000272eu, 0x00040071u, 0x00000006u, 0x00002730u, 0x0000272fu, 0x0004007cu, 0x00000008u, 0x00002731u, 0x00002730u, 0x0003003eu, 0x000026ccu, 0x00002731u, 0x000500aau, 0x0000005du, 0x00002734u, 0x00002498u, 0x00000212u, 0x000300f7u, 0x00002735u, 0x00000000u, 0x000400fau, 0x00002734u, 0x00002736u, 0x00002737u, 0x000200f8u, 0x00002737u, 0x000500aau, 0x0000005du, 0x0000274eu, 0x00002498u, 0x00000203u, 0x000300f7u, 0x0000274fu, 0x00000000u, 0x000400fau, 0x0000274eu, 0x00002750u, 0x00002751u, 0x000200f8u, 0x00002751u, 0x000500c3u, 0x00000008u, 0x00002769u, 0x00002729u, 0x0000025eu, 0x0003003eu, 0x000026cbu, 0x00002769u, 0x000500c3u, 0x00000008u, 0x0000276bu, 0x00002731u, 0x0000025eu, 0x0003003eu, 0x000026ccu, 0x0000276bu, 0x000200f9u, 0x0000274fu, 0x000200f8u, 0x00002750u, 0x00050041u, 0x00000007u, 0x00002752u, 0x000026c9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00002753u, 0x00002752u, 0x000500c7u, 0x00000006u, 0x00002754u, 0x00002753u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x00002755u, 0x00002754u, 0x00050084u, 0x00000008u, 0x00002756u, 0x0000021bu, 0x00002755u, 0x00050082u, 0x00000008u, 0x00002757u, 0x00000276u, 0x00002756u, 0x000500c3u, 0x00000008u, 0x00002759u, 0x00002729u, 0x00002757u, 0x0003003eu, 0x000026cbu, 0x00002759u, 0x00050041u, 0x00000007u, 0x0000275au, 0x000026c9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000275bu, 0x0000275au, 0x000500c7u, 0x00000006u, 0x0000275cu, 0x0000275bu, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x0000275du, 0x0000275cu, 0x00050084u, 0x00000008u, 0x0000275eu, 0x0000021bu, 0x0000275du, 0x00050082u, 0x00000008u, 0x0000275fu, 0x00000276u, 0x0000275eu, 0x000500c3u, 0x00000008u, 0x00002761u, 0x00002731u, 0x0000275fu, 0x0003003eu, 0x000026ccu, 0x00002761u, 0x000500c7u, 0x00000008u, 0x00002763u, 0x00002759u, 0x00000540u, 0x00050084u, 0x00000008u, 0x00002764u, 0x00002763u, 0x00000422u, 0x0003003eu, 0x000026cbu, 0x00002764u, 0x000500c7u, 0x00000008u, 0x00002766u, 0x00002761u, 0x00000540u, 0x00050084u, 0x00000008u, 0x00002767u, 0x00002766u, 0x00000422u, 0x0003003eu, 0x000026ccu, 0x00002767u, 0x000200f9u, 0x0000274fu, 0x000200f8u, 0x0000274fu, 0x000700f5u, 0x00000008u, 0x0000b9bcu, 0x00002767u, 0x00002750u, 0x0000276bu, 0x00002751u, 0x000700f5u, 0x00000008u, 0x0000b9bau, 0x00002764u, 0x00002750u, 0x00002769u, 0x00002751u, 0x000200f9u, 0x00002735u, 0x000200f8u, 0x00002736u, 0x00050041u, 0x00000007u, 0x00002738u, 0x000026c9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00002739u, 0x00002738u, 0x000500c7u, 0x00000006u, 0x0000273au, 0x00002739u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x0000273bu, 0x0000273au, 0x00050084u, 0x00000008u, 0x0000273cu, 0x0000021bu, 0x0000273bu, 0x00050082u, 0x00000008u, 0x0000273du, 0x0000025eu, 0x0000273cu, 0x000500c3u, 0x00000008u, 0x0000273fu, 0x00002729u, 0x0000273du, 0x0003003eu, 0x000026cbu, 0x0000273fu, 0x00050041u, 0x00000007u, 0x00002740u, 0x000026c9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00002741u, 0x00002740u, 0x000500c7u, 0x00000006u, 0x00002742u, 0x00002741u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x00002743u, 0x00002742u, 0x00050084u, 0x00000008u, 0x00002744u, 0x0000021bu, 0x00002743u, 0x00050082u, 0x00000008u, 0x00002745u, 0x0000025eu, 0x00002744u, 0x000500c3u, 0x00000008u, 0x00002747u, 0x00002731u, 0x00002745u, 0x0003003eu, 0x000026ccu, 0x00002747u, 0x000500c7u, 0x00000008u, 0x00002749u, 0x0000273fu, 0x0000038bu, 0x0003003eu, 0x000026cbu, 0x00002749u, 0x000500c7u, 0x00000008u, 0x0000274bu, 0x00002747u, 0x0000038bu, 0x0003003eu, 0x000026ccu, 0x0000274bu, 0x000200f9u, 0x00002735u, 0x000200f8u, 0x00002735u, 0x000700f5u, 0x00000008u, 0x0000b9bbu, 0x0000274bu, 0x00002736u, 0x0000b9bcu, 0x0000274fu, 0x000700f5u, 0x00000008u, 0x0000b9b9u, 0x00002749u, 0x00002736u, 0x0000b9bau, 0x0000274fu, 0x000500c4u, 0x00000008u, 0x0000276du, 0x0000b9b9u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x0000276fu, 0x0000276du, 0x0000b9bbu, 0x0003003eu, 0x000026cdu, 0x0000276fu, 0x000200f9u, 0x000026efu, 0x000200f8u, 0x000026efu, 0x000700f5u, 0x00000008u, 0x0000b9bdu, 0x0000276fu, 0x00002735u, 0x0000b9beu, 0x000027a1u, 0x0003003eu, 0x000026d7u, 0x0000b9bdu, 0x0003003eu, 0x000024beu, 0x0000b9bdu, 0x000200f9u, 0x000024eau, 0x000200f8u, 0x000024ebu, 0x000500c3u, 0x00000008u, 0x000024eeu, 0x000023d2u, 0x00000212u, 0x00110050u, 0x0000001eu, 0x00006dfcu, 0x0000247fu, 0x00006867u, 0x00002485u, 0x00006867u, 0x0000248bu, 0x0000248eu, 0x0000686au, 0x00002498u, 0x0000249du, 0x000024a2u, 0x000024a7u, 0x000024acu, 0x000024b1u, 0x000024b6u, 0x0003003eu, 0x00006c78u, 0x0000248bu, 0x0003003eu, 0x00006c79u, 0x0000248eu, 0x0003003eu, 0x00006c7au, 0x00002498u, 0x0003003eu, 0x00006c7bu, 0x0000249du, 0x0003003eu, 0x00006c7cu, 0x000024a2u, 0x0003003eu, 0x00006c7du, 0x000024acu, 0x0003003eu, 0x00006c7eu, 0x000024b6u, 0x0003003eu, 0x000024c0u, 0x000020f8u, 0x0004003du, 0x0000005fu, 0x000024f1u, 0x0000202du, 0x0003003eu, 0x000024c1u, 0x000024f1u, 0x0003003eu, 0x000024c2u, 0x000024eeu, 0x0003003eu, 0x000024c3u, 0x00002109u, 0x0003003eu, 0x000024c4u, 0x0000210cu, 0x000500b1u, 0x0000005du, 0x0000254du, 0x000024eeu, 0x00000215u, 0x0003003eu, 0x00002531u, 0x0000254du, 0x000300f7u, 0x0000254fu, 0x00000000u, 0x000400fau, 0x0000254du, 0x00002550u, 0x0000254fu, 0x000200f8u, 0x00002550u, 0x000500abu, 0x0000005du, 0x00002553u, 0x00002498u, 0x00000215u, 0x000200f9u, 0x0000254fu, 0x000200f8u, 0x0000254fu, 0x000700f5u, 0x0000005du, 0x00002554u, 0x0000254du, 0x000024ebu, 0x00002553u, 0x00002550u, 0x000400a8u, 0x0000005du, 0x00002556u, 0x00002109u, 0x000500a7u, 0x0000005du, 0x00002557u, 0x00002554u, 0x00002556u, 0x0003003eu, 0x00002532u, 0x00002557u, 0x0007000cu, 0x00000008u, 0x0000255au, 0x00000001u, 0x00000027u, 0x00002498u, 0x00000215u, 0x0003003eu, 0x00002533u, 0x0000255au, 0x000500aau, 0x0000005du, 0x0000255du, 0x00002498u, 0x00000218u, 0x0003003eu, 0x00002534u, 0x0000255du, 0x000500a6u, 0x0000005du, 0x00002560u, 0x0000255du, 0x00002109u, 0x000600a9u, 0x00000008u, 0x00002561u, 0x00002560u, 0x00001140u, 0x0000040au, 0x0003003eu, 0x00002535u, 0x00002561u, 0x000300f7u, 0x00002563u, 0x00000000u, 0x000400fau, 0x00002557u, 0x00002564u, 0x00002565u, 0x000200f8u, 0x00002565u, 0x00050041u, 0x0000003eu, 0x000025e5u, 0x000024c1u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000025e6u, 0x000025e5u, 0x00050080u, 0x00000008u, 0x000025e7u, 0x000025e6u, 0x000024eeu, 0x0003003eu, 0x000025e5u, 0x000025e7u, 0x00110050u, 0x0000001eu, 0x00006c9du, 0x00006867u, 0x00006867u, 0x00006867u, 0x00006867u, 0x0000248bu, 0x0000248eu, 0x0000686au, 0x00002498u, 0x0000249du, 0x000024a2u, 0x0000686au, 0x000024acu, 0x0000686au, 0x000024b6u, 0x0003003eu, 0x00006c70u, 0x000024a2u, 0x0003003eu, 0x00006c71u, 0x000024b6u, 0x0004003du, 0x00000008u, 0x000025ebu, 0x000025e5u, 0x0003003eu, 0x00002544u, 0x000025ebu, 0x000500abu, 0x0000005du, 0x00002689u, 0x000024a2u, 0x00000203u, 0x000300f7u, 0x0000268au, 0x00000000u, 0x000400fau, 0x00002689u, 0x0000268bu, 0x0000268au, 0x000200f8u, 0x0000268bu, 0x000500c4u, 0x00000008u, 0x0000268eu, 0x00000212u, 0x000024a2u, 0x0003003eu, 0x00002685u, 0x0000268eu, 0x000500c7u, 0x00000008u, 0x00002691u, 0x000024b6u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00002692u, 0x00002691u, 0x00000203u, 0x000300f7u, 0x00002693u, 0x00000000u, 0x000400fau, 0x00002692u, 0x00002694u, 0x00002693u, 0x000200f8u, 0x00002694u, 0x000500c7u, 0x00000008u, 0x00002697u, 0x000025ebu, 0x0000268eu, 0x00050082u, 0x00000008u, 0x00002698u, 0x00002697u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00002699u, 0x00000001u, 0x0000002au, 0x00002698u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x0000269bu, 0x000025ebu, 0x00002699u, 0x0003003eu, 0x00002544u, 0x0000269bu, 0x000200f9u, 0x00002693u, 0x000200f8u, 0x00002693u, 0x000700f5u, 0x00000008u, 0x0000b9c9u, 0x000025ebu, 0x0000268bu, 0x0000269bu, 0x00002694u, 0x00050082u, 0x00000008u, 0x0000269du, 0x0000268eu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x0000269fu, 0x0000b9c9u, 0x0000269du, 0x0003003eu, 0x00002544u, 0x0000269fu, 0x000200f9u, 0x0000268au, 0x000200f8u, 0x0000268au, 0x000700f5u, 0x00000008u, 0x0000b9cau, 0x000025ebu, 0x00002565u, 0x0000269fu, 0x00002693u, 0x0003003eu, 0x00002686u, 0x0000b9cau, 0x0003003eu, 0x00002542u, 0x0000b9cau, 0x0003003eu, 0x00006c74u, 0x000024acu, 0x0003003eu, 0x00006c75u, 0x000024b6u, 0x00050041u, 0x0000003eu, 0x000025eeu, 0x000024c1u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000025efu, 0x000025eeu, 0x0003003eu, 0x00002547u, 0x000025efu, 0x000500abu, 0x0000005du, 0x000026a5u, 0x000024acu, 0x00000203u, 0x000300f7u, 0x000026a6u, 0x00000000u, 0x000400fau, 0x000026a5u, 0x000026a7u, 0x000026a6u, 0x000200f8u, 0x000026a7u, 0x000500c4u, 0x00000008u, 0x000026aau, 0x00000212u, 0x000024acu, 0x0003003eu, 0x000026a1u, 0x000026aau, 0x000500c7u, 0x00000008u, 0x000026adu, 0x000024b6u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000026aeu, 0x000026adu, 0x00000203u, 0x000300f7u, 0x000026afu, 0x00000000u, 0x000400fau, 0x000026aeu, 0x000026b0u, 0x000026afu, 0x000200f8u, 0x000026b0u, 0x000500c7u, 0x00000008u, 0x000026b3u, 0x000025efu, 0x000026aau, 0x00050082u, 0x00000008u, 0x000026b4u, 0x000026b3u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000026b5u, 0x00000001u, 0x0000002au, 0x000026b4u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000026b7u, 0x000025efu, 0x000026b5u, 0x0003003eu, 0x00002547u, 0x000026b7u, 0x000200f9u, 0x000026afu, 0x000200f8u, 0x000026afu, 0x000700f5u, 0x00000008u, 0x0000b9dau, 0x000025efu, 0x000026a7u, 0x000026b7u, 0x000026b0u, 0x00050082u, 0x00000008u, 0x000026b9u, 0x000026aau, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000026bbu, 0x0000b9dau, 0x000026b9u, 0x0003003eu, 0x00002547u, 0x000026bbu, 0x000200f9u, 0x000026a6u, 0x000200f8u, 0x000026a6u, 0x000700f5u, 0x00000008u, 0x0000b9dbu, 0x000025efu, 0x0000268au, 0x000026bbu, 0x000026afu, 0x0003003eu, 0x000026a2u, 0x0000b9dbu, 0x0003003eu, 0x00002545u, 0x0000b9dbu, 0x0004007cu, 0x00000006u, 0x000025f6u, 0x0000b9dbu, 0x00050084u, 0x00000006u, 0x000025f7u, 0x0000248eu, 0x000025f6u, 0x00050080u, 0x00000006u, 0x000025f8u, 0x0000248bu, 0x000025f7u, 0x0003003eu, 0x00002548u, 0x000025f8u, 0x00050084u, 0x00000006u, 0x000025fau, 0x000025f8u, 0x000003c4u, 0x000500c4u, 0x00000008u, 0x000025fdu, 0x0000b9cau, 0x0000255au, 0x0004007cu, 0x00000006u, 0x000025feu, 0x000025fdu, 0x00050080u, 0x00000006u, 0x000025ffu, 0x000025fau, 0x000025feu, 0x000500c7u, 0x00000006u, 0x00002600u, 0x000025ffu, 0x000011adu, 0x0003003eu, 0x00002549u, 0x00002600u, 0x000500c7u, 0x00000006u, 0x00002603u, 0x000025f6u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00002604u, 0x00002603u, 0x0000035bu, 0x000500c6u, 0x00000006u, 0x00002606u, 0x00002600u, 0x00002604u, 0x0003003eu, 0x00002549u, 0x00002606u, 0x000500c2u, 0x00000006u, 0x00002608u, 0x00002606u, 0x000003c4u, 0x0003003eu, 0x0000254au, 0x00002608u, 0x0004007cu, 0x00000006u, 0x0000260au, 0x00002561u, 0x000500c7u, 0x00000006u, 0x0000260cu, 0x00002608u, 0x0000260au, 0x0003003eu, 0x0000254au, 0x0000260cu, 0x000500c6u, 0x00000006u, 0x0000260fu, 0x0000260cu, 0x00000485u, 0x00080041u, 0x00000270u, 0x00002610u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000260fu, 0x0004003du, 0x0000022bu, 0x00002611u, 0x00002610u, 0x00040071u, 0x00000006u, 0x00002612u, 0x00002611u, 0x0004007cu, 0x00000008u, 0x00002613u, 0x00002612u, 0x0003003eu, 0x00002541u, 0x00002613u, 0x000300f7u, 0x00002615u, 0x00000000u, 0x000400fau, 0x00002109u, 0x00002616u, 0x00002615u, 0x000200f8u, 0x00002616u, 0x000500aau, 0x0000005du, 0x00002619u, 0x00002498u, 0x00000203u, 0x000300f7u, 0x0000261au, 0x00000000u, 0x000400fau, 0x00002619u, 0x0000261bu, 0x0000261cu, 0x000200f8u, 0x0000261cu, 0x000500c7u, 0x00000006u, 0x00002630u, 0x00002606u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x00002631u, 0x00000701u, 0x00002630u, 0x00050082u, 0x00000006u, 0x00002632u, 0x0000035bu, 0x00002631u, 0x000500c3u, 0x00000008u, 0x00002634u, 0x00002613u, 0x00002632u, 0x0003003eu, 0x00002541u, 0x00002634u, 0x000500c7u, 0x00000008u, 0x00002636u, 0x00002634u, 0x0000038bu, 0x0003003eu, 0x00002541u, 0x00002636u, 0x000500c4u, 0x00000008u, 0x00002638u, 0x00002636u, 0x00000215u, 0x0003003eu, 0x00002541u, 0x00002638u, 0x00050080u, 0x00000008u, 0x0000263bu, 0x00002638u, 0x000024eeu, 0x0003003eu, 0x00002541u, 0x0000263bu, 0x000200f9u, 0x0000261au, 0x000200f8u, 0x0000261bu, 0x000500c7u, 0x00000006u, 0x0000261eu, 0x00002606u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x0000261fu, 0x00000701u, 0x0000261eu, 0x00050082u, 0x00000006u, 0x00002620u, 0x00001253u, 0x0000261fu, 0x000500c3u, 0x00000008u, 0x00002622u, 0x00002613u, 0x00002620u, 0x0003003eu, 0x00002541u, 0x00002622u, 0x000500c7u, 0x00000008u, 0x00002624u, 0x00002622u, 0x00000540u, 0x0003003eu, 0x00002541u, 0x00002624u, 0x000500c4u, 0x00000008u, 0x00002627u, 0x0000249du, 0x0000021bu, 0x000500c5u, 0x00000008u, 0x00002629u, 0x00002624u, 0x00002627u, 0x0003003eu, 0x00002541u, 0x00002629u, 0x000500c4u, 0x00000008u, 0x0000262bu, 0x00002629u, 0x00000215u, 0x0003003eu, 0x00002541u, 0x0000262bu, 0x00050080u, 0x00000008u, 0x0000262eu, 0x0000262bu, 0x000024eeu, 0x0003003eu, 0x00002541u, 0x0000262eu, 0x000200f9u, 0x0000261au, 0x000200f8u, 0x0000261au, 0x000700f5u, 0x00000008u, 0x0000b9fcu, 0x0000262eu, 0x0000261bu, 0x0000263bu, 0x0000261cu, 0x000500c5u, 0x00000008u, 0x0000263eu, 0x0000b9fcu, 0x00001276u, 0x000500c6u, 0x00000008u, 0x0000263fu, 0x0000263eu, 0x00000212u, 0x00080041u, 0x00000270u, 0x00002640u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000263fu, 0x0004003du, 0x0000022bu, 0x00002641u, 0x00002640u, 0x00040071u, 0x00000006u, 0x00002642u, 0x00002641u, 0x0004007cu, 0x00000008u, 0x00002643u, 0x00002642u, 0x0003003eu, 0x00002541u, 0x00002643u, 0x000200f9u, 0x00002615u, 0x000200f8u, 0x00002615u, 0x000700f5u, 0x00000008u, 0x0000ba2au, 0x00002613u, 0x000026a6u, 0x00002643u, 0x0000261au, 0x000200f9u, 0x00002563u, 0x000200f8u, 0x00002564u, 0x00050084u, 0x00000008u, 0x00002567u, 0x00000215u, 0x000024eeu, 0x00050041u, 0x0000003eu, 0x00002568u, 0x000024c1u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002569u, 0x00002568u, 0x00050080u, 0x00000008u, 0x0000256au, 0x00002569u, 0x00002567u, 0x0003003eu, 0x00002568u, 0x0000256au, 0x00110050u, 0x0000001eu, 0x00006c8du, 0x00006867u, 0x00006867u, 0x00006867u, 0x00006867u, 0x0000248bu, 0x0000248eu, 0x0000686au, 0x00002498u, 0x0000249du, 0x000024a2u, 0x0000686au, 0x000024acu, 0x0000686au, 0x000024b6u, 0x0003003eu, 0x00006c68u, 0x000024a2u, 0x0003003eu, 0x00006c69u, 0x000024b6u, 0x0004003du, 0x00000008u, 0x0000256eu, 0x00002568u, 0x0003003eu, 0x00002538u, 0x0000256eu, 0x00050050u, 0x0000005fu, 0x00002649u, 0x0000256eu, 0x0000256eu, 0x00050080u, 0x0000005fu, 0x0000264au, 0x00002649u, 0x00000ddbu, 0x0003003eu, 0x00002645u, 0x0000264au, 0x000500abu, 0x0000005du, 0x0000264du, 0x000024a2u, 0x00000203u, 0x000300f7u, 0x0000264eu, 0x00000000u, 0x000400fau, 0x0000264du, 0x0000264fu, 0x0000264eu, 0x000200f8u, 0x0000264fu, 0x000500c4u, 0x00000008u, 0x00002652u, 0x00000212u, 0x000024a2u, 0x0003003eu, 0x00002646u, 0x00002652u, 0x000500c7u, 0x00000008u, 0x00002655u, 0x000024b6u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00002656u, 0x00002655u, 0x00000203u, 0x000300f7u, 0x00002657u, 0x00000000u, 0x000400fau, 0x00002656u, 0x00002658u, 0x00002657u, 0x000200f8u, 0x00002658u, 0x00050050u, 0x0000005fu, 0x0000265bu, 0x00002652u, 0x00002652u, 0x000500c7u, 0x0000005fu, 0x0000265cu, 0x0000264au, 0x0000265bu, 0x00050082u, 0x0000005fu, 0x0000265eu, 0x0000265cu, 0x0000eee3u, 0x0007000cu, 0x0000005fu, 0x00002660u, 0x00000001u, 0x0000002au, 0x0000265eu, 0x00000c37u, 0x000500c6u, 0x0000005fu, 0x00002662u, 0x0000264au, 0x00002660u, 0x0003003eu, 0x00002645u, 0x00002662u, 0x000200f9u, 0x00002657u, 0x000200f8u, 0x00002657u, 0x000700f5u, 0x0000005fu, 0x0000b9feu, 0x0000264au, 0x0000264fu, 0x00002662u, 0x00002658u, 0x00050082u, 0x00000008u, 0x00002664u, 0x00002652u, 0x00000212u, 0x00050050u, 0x0000005fu, 0x00002666u, 0x00002664u, 0x00002664u, 0x000500c7u, 0x0000005fu, 0x00002667u, 0x0000b9feu, 0x00002666u, 0x0003003eu, 0x00002645u, 0x00002667u, 0x000200f9u, 0x0000264eu, 0x000200f8u, 0x0000264eu, 0x000700f5u, 0x0000005fu, 0x0000b9ffu, 0x0000264au, 0x00002564u, 0x00002667u, 0x00002657u, 0x0003003eu, 0x00002647u, 0x0000b9ffu, 0x0003003eu, 0x00002536u, 0x0000b9ffu, 0x0003003eu, 0x00006c6cu, 0x000024acu, 0x0003003eu, 0x00006c6du, 0x000024b6u, 0x00050041u, 0x0000003eu, 0x00002571u, 0x000024c1u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002572u, 0x00002571u, 0x0003003eu, 0x0000253bu, 0x00002572u, 0x000500abu, 0x0000005du, 0x0000266du, 0x000024acu, 0x00000203u, 0x000300f7u, 0x0000266eu, 0x00000000u, 0x000400fau, 0x0000266du, 0x0000266fu, 0x0000266eu, 0x000200f8u, 0x0000266fu, 0x000500c4u, 0x00000008u, 0x00002672u, 0x00000212u, 0x000024acu, 0x0003003eu, 0x00002669u, 0x00002672u, 0x000500c7u, 0x00000008u, 0x00002675u, 0x000024b6u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00002676u, 0x00002675u, 0x00000203u, 0x000300f7u, 0x00002677u, 0x00000000u, 0x000400fau, 0x00002676u, 0x00002678u, 0x00002677u, 0x000200f8u, 0x00002678u, 0x000500c7u, 0x00000008u, 0x0000267bu, 0x00002572u, 0x00002672u, 0x00050082u, 0x00000008u, 0x0000267cu, 0x0000267bu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x0000267du, 0x00000001u, 0x0000002au, 0x0000267cu, 0x00000203u, 0x000500c6u, 0x00000008u, 0x0000267fu, 0x00002572u, 0x0000267du, 0x0003003eu, 0x0000253bu, 0x0000267fu, 0x000200f9u, 0x00002677u, 0x000200f8u, 0x00002677u, 0x000700f5u, 0x00000008u, 0x0000ba0fu, 0x00002572u, 0x0000266fu, 0x0000267fu, 0x00002678u, 0x00050082u, 0x00000008u, 0x00002681u, 0x00002672u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00002683u, 0x0000ba0fu, 0x00002681u, 0x0003003eu, 0x0000253bu, 0x00002683u, 0x000200f9u, 0x0000266eu, 0x000200f8u, 0x0000266eu, 0x000700f5u, 0x00000008u, 0x0000ba10u, 0x00002572u, 0x0000264eu, 0x00002683u, 0x00002677u, 0x0003003eu, 0x0000266au, 0x0000ba10u, 0x0003003eu, 0x00002539u, 0x0000ba10u, 0x0004007cu, 0x00000006u, 0x00002579u, 0x0000ba10u, 0x00050084u, 0x00000006u, 0x0000257au, 0x0000248eu, 0x00002579u, 0x00050080u, 0x00000006u, 0x0000257bu, 0x0000248bu, 0x0000257au, 0x0003003eu, 0x0000253cu, 0x0000257bu, 0x00050084u, 0x00000006u, 0x0000257du, 0x0000257bu, 0x000003c4u, 0x00050050u, 0x0000005fu, 0x00002580u, 0x0000255au, 0x0000255au, 0x000500c4u, 0x0000005fu, 0x00002581u, 0x0000b9ffu, 0x00002580u, 0x0004007cu, 0x000000a2u, 0x00002582u, 0x00002581u, 0x00050050u, 0x000000a2u, 0x00002583u, 0x0000257du, 0x0000257du, 0x00050080u, 0x000000a2u, 0x00002584u, 0x00002583u, 0x00002582u, 0x000500c7u, 0x000000a2u, 0x00002586u, 0x00002584u, 0x0000eee7u, 0x0003003eu, 0x0000253du, 0x00002586u, 0x000500c7u, 0x00000006u, 0x00002589u, 0x00002579u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000258au, 0x00002589u, 0x0000035bu, 0x0004003du, 0x000000a2u, 0x0000258bu, 0x0000253du, 0x00050050u, 0x000000a2u, 0x0000258cu, 0x0000258au, 0x0000258au, 0x000500c6u, 0x000000a2u, 0x0000258du, 0x0000258bu, 0x0000258cu, 0x0003003eu, 0x0000253du, 0x0000258du, 0x0004003du, 0x000000a2u, 0x0000258eu, 0x0000253du, 0x000500c2u, 0x000000a2u, 0x00002590u, 0x0000258eu, 0x0000eee8u, 0x0003003eu, 0x0000253eu, 0x00002590u, 0x0004007cu, 0x00000006u, 0x00002592u, 0x00002561u, 0x0004003du, 0x000000a2u, 0x00002593u, 0x0000253eu, 0x00050050u, 0x000000a2u, 0x00002594u, 0x00002592u, 0x00002592u, 0x000500c7u, 0x000000a2u, 0x00002595u, 0x00002593u, 0x00002594u, 0x0003003eu, 0x0000253eu, 0x00002595u, 0x00050041u, 0x00000007u, 0x00002597u, 0x0000253eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00002598u, 0x00002597u, 0x000500c6u, 0x00000006u, 0x00002599u, 0x00002598u, 0x00000485u, 0x00080041u, 0x00000270u, 0x0000259au, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00002599u, 0x0004003du, 0x0000022bu, 0x0000259bu, 0x0000259au, 0x00040071u, 0x00000006u, 0x0000259cu, 0x0000259bu, 0x0004007cu, 0x00000008u, 0x0000259du, 0x0000259cu, 0x0003003eu, 0x0000253fu, 0x0000259du, 0x00050041u, 0x00000007u, 0x0000259fu, 0x0000253eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000025a0u, 0x0000259fu, 0x000500c6u, 0x00000006u, 0x000025a1u, 0x000025a0u, 0x00000485u, 0x00080041u, 0x00000270u, 0x000025a2u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000025a1u, 0x0004003du, 0x0000022bu, 0x000025a3u, 0x000025a2u, 0x00040071u, 0x00000006u, 0x000025a4u, 0x000025a3u, 0x0004007cu, 0x00000008u, 0x000025a5u, 0x000025a4u, 0x0003003eu, 0x00002540u, 0x000025a5u, 0x000500aau, 0x0000005du, 0x000025a8u, 0x00002498u, 0x00000212u, 0x000300f7u, 0x000025a9u, 0x00000000u, 0x000400fau, 0x000025a8u, 0x000025aau, 0x000025abu, 0x000200f8u, 0x000025abu, 0x000500aau, 0x0000005du, 0x000025c2u, 0x00002498u, 0x00000203u, 0x000300f7u, 0x000025c3u, 0x00000000u, 0x000400fau, 0x000025c2u, 0x000025c4u, 0x000025c5u, 0x000200f8u, 0x000025c5u, 0x000500c3u, 0x00000008u, 0x000025ddu, 0x0000259du, 0x0000025eu, 0x0003003eu, 0x0000253fu, 0x000025ddu, 0x000500c3u, 0x00000008u, 0x000025dfu, 0x000025a5u, 0x0000025eu, 0x0003003eu, 0x00002540u, 0x000025dfu, 0x000200f9u, 0x000025c3u, 0x000200f8u, 0x000025c4u, 0x00050041u, 0x00000007u, 0x000025c6u, 0x0000253du, 0x00000374u, 0x0004003du, 0x00000006u, 0x000025c7u, 0x000025c6u, 0x000500c7u, 0x00000006u, 0x000025c8u, 0x000025c7u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000025c9u, 0x000025c8u, 0x00050084u, 0x00000008u, 0x000025cau, 0x0000021bu, 0x000025c9u, 0x00050082u, 0x00000008u, 0x000025cbu, 0x00000276u, 0x000025cau, 0x000500c3u, 0x00000008u, 0x000025cdu, 0x0000259du, 0x000025cbu, 0x0003003eu, 0x0000253fu, 0x000025cdu, 0x00050041u, 0x00000007u, 0x000025ceu, 0x0000253du, 0x00000485u, 0x0004003du, 0x00000006u, 0x000025cfu, 0x000025ceu, 0x000500c7u, 0x00000006u, 0x000025d0u, 0x000025cfu, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000025d1u, 0x000025d0u, 0x00050084u, 0x00000008u, 0x000025d2u, 0x0000021bu, 0x000025d1u, 0x00050082u, 0x00000008u, 0x000025d3u, 0x00000276u, 0x000025d2u, 0x000500c3u, 0x00000008u, 0x000025d5u, 0x000025a5u, 0x000025d3u, 0x0003003eu, 0x00002540u, 0x000025d5u, 0x000500c7u, 0x00000008u, 0x000025d7u, 0x000025cdu, 0x00000540u, 0x00050084u, 0x00000008u, 0x000025d8u, 0x000025d7u, 0x00000422u, 0x0003003eu, 0x0000253fu, 0x000025d8u, 0x000500c7u, 0x00000008u, 0x000025dau, 0x000025d5u, 0x00000540u, 0x00050084u, 0x00000008u, 0x000025dbu, 0x000025dau, 0x00000422u, 0x0003003eu, 0x00002540u, 0x000025dbu, 0x000200f9u, 0x000025c3u, 0x000200f8u, 0x000025c3u, 0x000700f5u, 0x00000008u, 0x0000ba28u, 0x000025dbu, 0x000025c4u, 0x000025dfu, 0x000025c5u, 0x000700f5u, 0x00000008u, 0x0000ba26u, 0x000025d8u, 0x000025c4u, 0x000025ddu, 0x000025c5u, 0x000200f9u, 0x000025a9u, 0x000200f8u, 0x000025aau, 0x00050041u, 0x00000007u, 0x000025acu, 0x0000253du, 0x00000374u, 0x0004003du, 0x00000006u, 0x000025adu, 0x000025acu, 0x000500c7u, 0x00000006u, 0x000025aeu, 0x000025adu, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000025afu, 0x000025aeu, 0x00050084u, 0x00000008u, 0x000025b0u, 0x0000021bu, 0x000025afu, 0x00050082u, 0x00000008u, 0x000025b1u, 0x0000025eu, 0x000025b0u, 0x000500c3u, 0x00000008u, 0x000025b3u, 0x0000259du, 0x000025b1u, 0x0003003eu, 0x0000253fu, 0x000025b3u, 0x00050041u, 0x00000007u, 0x000025b4u, 0x0000253du, 0x00000485u, 0x0004003du, 0x00000006u, 0x000025b5u, 0x000025b4u, 0x000500c7u, 0x00000006u, 0x000025b6u, 0x000025b5u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000025b7u, 0x000025b6u, 0x00050084u, 0x00000008u, 0x000025b8u, 0x0000021bu, 0x000025b7u, 0x00050082u, 0x00000008u, 0x000025b9u, 0x0000025eu, 0x000025b8u, 0x000500c3u, 0x00000008u, 0x000025bbu, 0x000025a5u, 0x000025b9u, 0x0003003eu, 0x00002540u, 0x000025bbu, 0x000500c7u, 0x00000008u, 0x000025bdu, 0x000025b3u, 0x0000038bu, 0x0003003eu, 0x0000253fu, 0x000025bdu, 0x000500c7u, 0x00000008u, 0x000025bfu, 0x000025bbu, 0x0000038bu, 0x0003003eu, 0x00002540u, 0x000025bfu, 0x000200f9u, 0x000025a9u, 0x000200f8u, 0x000025a9u, 0x000700f5u, 0x00000008u, 0x0000ba27u, 0x000025bfu, 0x000025aau, 0x0000ba28u, 0x000025c3u, 0x000700f5u, 0x00000008u, 0x0000ba25u, 0x000025bdu, 0x000025aau, 0x0000ba26u, 0x000025c3u, 0x000500c4u, 0x00000008u, 0x000025e1u, 0x0000ba25u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x000025e3u, 0x000025e1u, 0x0000ba27u, 0x0003003eu, 0x00002541u, 0x000025e3u, 0x000200f9u, 0x00002563u, 0x000200f8u, 0x00002563u, 0x000700f5u, 0x00000008u, 0x0000ba29u, 0x000025e3u, 0x000025a9u, 0x0000ba2au, 0x00002615u, 0x0003003eu, 0x0000254bu, 0x0000ba29u, 0x0003003eu, 0x000024beu, 0x0000ba29u, 0x000500c7u, 0x00000008u, 0x000024f6u, 0x000023d2u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000024f7u, 0x0000025eu, 0x000024f6u, 0x00050082u, 0x00000008u, 0x000024f8u, 0x0000025eu, 0x000024f7u, 0x000500c3u, 0x00000008u, 0x000024fau, 0x0000ba29u, 0x000024f8u, 0x0003003eu, 0x000024beu, 0x000024fau, 0x000500c7u, 0x00000008u, 0x000024fcu, 0x000024fau, 0x0000038bu, 0x0003003eu, 0x000024beu, 0x000024fcu, 0x000200f9u, 0x000024eau, 0x000200f8u, 0x000024eau, 0x000700f5u, 0x00000008u, 0x0000ba3au, 0x000024fcu, 0x00002563u, 0x0000b9bdu, 0x000026efu, 0x000200f9u, 0x000024e4u, 0x000200f8u, 0x000024e5u, 0x0003003eu, 0x000024beu, 0x00000203u, 0x000200f9u, 0x000024e4u, 0x000200f8u, 0x000024e4u, 0x000700f5u, 0x00000008u, 0x0000ba39u, 0x00000203u, 0x000024e5u, 0x0000ba3au, 0x000024eau, 0x0003003eu, 0x000024cbu, 0x0000ba39u, 0x0003003eu, 0x0000202au, 0x0000ba39u, 0x0003003eu, 0x000078adu, 0x0000ba39u, 0x0003003eu, 0x000078aeu, 0x0000037du, 0x000300f7u, 0x00002190u, 0x00000000u, 0x000400fau, 0x00002133u, 0x00002191u, 0x00002190u, 0x000200f8u, 0x00002191u, 0x000500aau, 0x0000005du, 0x00002194u, 0x000024e2u, 0x00000215u, 0x000200f9u, 0x00002190u, 0x000200f8u, 0x00002190u, 0x000700f5u, 0x0000005du, 0x00002195u, 0x00002133u, 0x000024e4u, 0x00002194u, 0x00002191u, 0x000300f7u, 0x00002196u, 0x00000000u, 0x000400fau, 0x00002195u, 0x00002197u, 0x00002196u, 0x000200f8u, 0x00002197u, 0x000500c7u, 0x00000008u, 0x00002199u, 0x0000ba39u, 0x00000212u, 0x000500aau, 0x0000005du, 0x0000219au, 0x00002199u, 0x00000203u, 0x000200f9u, 0x00002196u, 0x000200f8u, 0x00002196u, 0x000700f5u, 0x0000005du, 0x0000219bu, 0x00002195u, 0x00002190u, 0x0000219au, 0x00002197u, 0x000300f7u, 0x0000219cu, 0x00000000u, 0x000400fau, 0x0000219bu, 0x0000219du, 0x0000219cu, 0x000200f8u, 0x0000219du, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x0000219cu, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x0000055eu, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x00002161u, 0x0003003eu, 0x00002032u, 0x00002348u, 0x0003003eu, 0x00002033u, 0x0000234du, 0x0003003eu, 0x00002034u, 0x00007a63u, 0x000500c4u, 0x00000008u, 0x00002854u, 0x00007a63u, 0x00000218u, 0x00070050u, 0x00000009u, 0x00002855u, 0x00002854u, 0x00002854u, 0x00002854u, 0x00002854u, 0x00050080u, 0x00000009u, 0x00002856u, 0x000005f4u, 0x00002855u, 0x0003003eu, 0x00002849u, 0x00002856u, 0x0009004fu, 0x00000009u, 0x00002859u, 0x00002348u, 0x00002348u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b1u, 0x000005f9u, 0x0000285au, 0x00002856u, 0x00002859u, 0x0003003eu, 0x0000284au, 0x0000285au, 0x0009004fu, 0x00000009u, 0x0000285du, 0x00002348u, 0x00002348u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b1u, 0x000005f9u, 0x0000285eu, 0x00002856u, 0x0000285du, 0x0003003eu, 0x0000284bu, 0x0000285eu, 0x0009004fu, 0x00000009u, 0x00002861u, 0x0000234du, 0x0000234du, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500afu, 0x000005f9u, 0x00002862u, 0x00002856u, 0x00002861u, 0x0003003eu, 0x0000284cu, 0x00002862u, 0x0009004fu, 0x00000009u, 0x00002865u, 0x0000234du, 0x0000234du, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500afu, 0x000005f9u, 0x00002866u, 0x00002856u, 0x00002865u, 0x0003003eu, 0x0000284du, 0x00002866u, 0x000600a9u, 0x00000009u, 0x00002868u, 0x0000285au, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x0000286au, 0x00002862u, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x0000286bu, 0x00002868u, 0x0000286au, 0x0003003eu, 0x0000284eu, 0x0000286bu, 0x000600a9u, 0x00000009u, 0x0000286du, 0x0000285eu, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x0000286fu, 0x00002866u, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x00002870u, 0x0000286du, 0x0000286fu, 0x0003003eu, 0x0000284fu, 0x00002870u, 0x00050084u, 0x00000009u, 0x00002872u, 0x0000286bu, 0x0000061fu, 0x00050084u, 0x00000009u, 0x00002874u, 0x00002870u, 0x00000624u, 0x00050080u, 0x00000009u, 0x00002875u, 0x00002872u, 0x00002874u, 0x0003003eu, 0x00002850u, 0x00002875u, 0x00050041u, 0x0000003eu, 0x00002876u, 0x00002850u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002877u, 0x00002876u, 0x00050041u, 0x0000003eu, 0x00002878u, 0x00002850u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002879u, 0x00002878u, 0x000500c5u, 0x00000008u, 0x0000287au, 0x00002877u, 0x00002879u, 0x00050041u, 0x0000003eu, 0x0000287bu, 0x00002850u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000287cu, 0x0000287bu, 0x00050041u, 0x0000003eu, 0x0000287du, 0x00002850u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000287eu, 0x0000287du, 0x000500c5u, 0x00000008u, 0x0000287fu, 0x0000287cu, 0x0000287eu, 0x000500c5u, 0x00000008u, 0x00002880u, 0x0000287au, 0x0000287fu, 0x0003003eu, 0x00002851u, 0x00002880u, 0x000400c8u, 0x00000008u, 0x00002882u, 0x00002880u, 0x000500c7u, 0x00000008u, 0x00002883u, 0x00002882u, 0x0000038bu, 0x0003003eu, 0x00002852u, 0x00002883u, 0x0003003eu, 0x00002031u, 0x00002883u, 0x000500aau, 0x0000005du, 0x000021b4u, 0x00002883u, 0x00000203u, 0x000300f7u, 0x000021b5u, 0x00000000u, 0x000400fau, 0x000021b4u, 0x000021b6u, 0x000021b5u, 0x000200f8u, 0x000021b6u, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x000021b5u, 0x000400cdu, 0x00000008u, 0x000021b8u, 0x00002883u, 0x0003003eu, 0x00002035u, 0x000021b8u, 0x000400a8u, 0x0000005du, 0x000021bau, 0x00002124u, 0x000300f7u, 0x000021bbu, 0x00000000u, 0x000400fau, 0x000021bau, 0x000021bcu, 0x000021bbu, 0x000200f8u, 0x000021bcu, 0x000500c7u, 0x00000008u, 0x000021beu, 0x00002883u, 0x00000212u, 0x000500aau, 0x0000005du, 0x000021bfu, 0x000021beu, 0x00000203u, 0x000200f9u, 0x000021bbu, 0x000200f8u, 0x000021bbu, 0x000700f5u, 0x0000005du, 0x000021c0u, 0x000021bau, 0x000021b5u, 0x000021bfu, 0x000021bcu, 0x000300f7u, 0x000021c1u, 0x00000000u, 0x000400fau, 0x000021c0u, 0x000021c2u, 0x000021c1u, 0x000200f8u, 0x000021c2u, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x000021c1u, 0x0003003eu, 0x00002037u, 0x00001ed5u, 0x00070041u, 0x00000234u, 0x00002886u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00002887u, 0x00002886u, 0x00040071u, 0x00000237u, 0x00002888u, 0x00002887u, 0x0004007cu, 0x00000009u, 0x00002889u, 0x00002888u, 0x00070041u, 0x00000234u, 0x0000288bu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000212u, 0x0004003du, 0x0000022au, 0x0000288cu, 0x0000288bu, 0x00040071u, 0x00000237u, 0x0000288du, 0x0000288cu, 0x0004007cu, 0x00000009u, 0x0000288eu, 0x0000288du, 0x00070041u, 0x00000234u, 0x00002890u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000215u, 0x0004003du, 0x0000022au, 0x00002891u, 0x00002890u, 0x00040071u, 0x00000237u, 0x00002892u, 0x00002891u, 0x0004007cu, 0x00000009u, 0x00002893u, 0x00002892u, 0x00070041u, 0x00000234u, 0x00002895u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000218u, 0x0004003du, 0x0000022au, 0x00002896u, 0x00002895u, 0x00040071u, 0x00000237u, 0x00002897u, 0x00002896u, 0x0004007cu, 0x00000009u, 0x00002898u, 0x00002897u, 0x00070041u, 0x00000234u, 0x0000289au, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000021bu, 0x0004003du, 0x0000022au, 0x0000289bu, 0x0000289au, 0x00040071u, 0x00000237u, 0x0000289cu, 0x0000289bu, 0x0004007cu, 0x00000009u, 0x0000289du, 0x0000289cu, 0x00070041u, 0x00000234u, 0x0000289fu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000021eu, 0x0004003du, 0x0000022au, 0x000028a0u, 0x0000289fu, 0x00040071u, 0x00000237u, 0x000028a1u, 0x000028a0u, 0x0004007cu, 0x00000009u, 0x000028a2u, 0x000028a1u, 0x00070041u, 0x00000234u, 0x000028a4u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000221u, 0x0004003du, 0x0000022au, 0x000028a5u, 0x000028a4u, 0x00040071u, 0x00000237u, 0x000028a6u, 0x000028a5u, 0x0004007cu, 0x00000009u, 0x000028a7u, 0x000028a6u, 0x00070041u, 0x00000234u, 0x000028a9u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000224u, 0x0004003du, 0x0000022au, 0x000028aau, 0x000028a9u, 0x00040071u, 0x00000237u, 0x000028abu, 0x000028aau, 0x0004007cu, 0x00000009u, 0x000028acu, 0x000028abu, 0x00070041u, 0x00000234u, 0x000028aeu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000025eu, 0x0004003du, 0x0000022au, 0x000028afu, 0x000028aeu, 0x00040071u, 0x00000237u, 0x000028b0u, 0x000028afu, 0x0004007cu, 0x00000009u, 0x000028b1u, 0x000028b0u, 0x00070041u, 0x00000234u, 0x000028b3u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000264u, 0x0004003du, 0x0000022au, 0x000028b4u, 0x000028b3u, 0x00040071u, 0x00000237u, 0x000028b5u, 0x000028b4u, 0x0004007cu, 0x00000009u, 0x000028b6u, 0x000028b5u, 0x00070041u, 0x0000026bu, 0x000028b8u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000026au, 0x0004003du, 0x00000006u, 0x000028b9u, 0x000028b8u, 0x00070041u, 0x00000270u, 0x000028bbu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000026fu, 0x0004003du, 0x0000022bu, 0x000028bcu, 0x000028bbu, 0x00040071u, 0x00000006u, 0x000028bdu, 0x000028bcu, 0x0004007cu, 0x00000008u, 0x000028beu, 0x000028bdu, 0x00070041u, 0x00000277u, 0x000028c0u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000276u, 0x0004003du, 0x00000229u, 0x000028c1u, 0x000028c0u, 0x00040071u, 0x00000006u, 0x000028c2u, 0x000028c1u, 0x0004007cu, 0x00000008u, 0x000028c3u, 0x000028c2u, 0x00070041u, 0x00000277u, 0x000028c5u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000027du, 0x0004003du, 0x00000229u, 0x000028c6u, 0x000028c5u, 0x00040071u, 0x00000006u, 0x000028c7u, 0x000028c6u, 0x0004007cu, 0x00000008u, 0x000028c8u, 0x000028c7u, 0x00070041u, 0x00000284u, 0x000028cau, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000283u, 0x0004003du, 0x0000022du, 0x000028cbu, 0x000028cau, 0x00040072u, 0x00000009u, 0x000028ccu, 0x000028cbu, 0x00120050u, 0x0000000fu, 0x000028cdu, 0x00002889u, 0x0000288eu, 0x00002893u, 0x00002898u, 0x0000289du, 0x000028a2u, 0x000028a7u, 0x000028acu, 0x000028b1u, 0x000028b6u, 0x000028b9u, 0x000028beu, 0x000028c3u, 0x000028c8u, 0x000028ccu, 0x0003003eu, 0x00006c2au, 0x00002889u, 0x0003003eu, 0x00006c2bu, 0x0000288eu, 0x0003003eu, 0x00006c2cu, 0x00002893u, 0x0003003eu, 0x00006c2du, 0x00002898u, 0x0003003eu, 0x00006c2eu, 0x0000289du, 0x0003003eu, 0x00006c2fu, 0x000028a2u, 0x0003003eu, 0x00006c30u, 0x000028a7u, 0x0003003eu, 0x00006c31u, 0x000028acu, 0x0003003eu, 0x00006c32u, 0x000028b1u, 0x0003003eu, 0x00006c33u, 0x000028b6u, 0x0003003eu, 0x00006c34u, 0x000028b9u, 0x0003003eu, 0x00006c35u, 0x000028beu, 0x0003003eu, 0x00006c36u, 0x000028c3u, 0x0003003eu, 0x00006c37u, 0x000028c8u, 0x0003003eu, 0x00006c38u, 0x000028ccu, 0x0003003eu, 0x00006e09u, 0x00002889u, 0x0003003eu, 0x00006e0au, 0x0000288eu, 0x0003003eu, 0x00006e0bu, 0x00002893u, 0x0003003eu, 0x00006e0cu, 0x00002898u, 0x0003003eu, 0x00006e0du, 0x0000289du, 0x0003003eu, 0x00006e0eu, 0x000028a2u, 0x0003003eu, 0x00006e0fu, 0x000028a7u, 0x0003003eu, 0x00006e10u, 0x000028acu, 0x0003003eu, 0x00006e11u, 0x000028b6u, 0x0003003eu, 0x00006e12u, 0x000028c8u, 0x0003003eu, 0x00006e13u, 0x000028ccu, 0x00050082u, 0x00000008u, 0x000021c8u, 0x00007a63u, 0x00002350u, 0x0003003eu, 0x00002038u, 0x000021c8u, 0x000600a9u, 0x00000008u, 0x000021cau, 0x0000215fu, 0x00000212u, 0x00000cddu, 0x0003003eu, 0x00002039u, 0x000021cau, 0x0003003eu, 0x0000203bu, 0x00002340u, 0x0003003eu, 0x0000203cu, 0x00002368u, 0x0003003eu, 0x0000203du, 0x0000236cu, 0x0003003eu, 0x0000203eu, 0x000021c8u, 0x0003003eu, 0x0000203fu, 0x00002883u, 0x000500c7u, 0x00000009u, 0x000028d6u, 0x00002368u, 0x0000eee0u, 0x00070050u, 0x00000009u, 0x000028d7u, 0x0000078du, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x00000009u, 0x000028d8u, 0x000028d6u, 0x000028d7u, 0x00070050u, 0x00000009u, 0x000028dau, 0x000021c8u, 0x000021c8u, 0x000021c8u, 0x000021c8u, 0x00050084u, 0x00000009u, 0x000028dbu, 0x000028d8u, 0x000028dau, 0x00050080u, 0x00000009u, 0x000028ddu, 0x00002340u, 0x000028dbu, 0x0003003eu, 0x0000203bu, 0x000028ddu, 0x000500c3u, 0x00000009u, 0x000028e0u, 0x000028ddu, 0x0000eee1u, 0x00050051u, 0x00000008u, 0x000028e1u, 0x000028e0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000028e2u, 0x000028e0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000028e3u, 0x000028e0u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000028e4u, 0x000028e0u, 0x00000003u, 0x0003003eu, 0x000028ceu, 0x000028e0u, 0x0006000cu, 0x00000008u, 0x000028e7u, 0x00000001u, 0x00000049u, 0x00002883u, 0x0003003eu, 0x000028cfu, 0x000028e7u, 0x000500c3u, 0x00000008u, 0x000028e9u, 0x000028e7u, 0x00000212u, 0x0003003eu, 0x000028d0u, 0x000028e9u, 0x000500c7u, 0x00000008u, 0x000028ebu, 0x000028e7u, 0x00000212u, 0x000500c4u, 0x00000008u, 0x000028ecu, 0x000028ebu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000028eeu, 0x000028e9u, 0x00000212u, 0x00050080u, 0x00000008u, 0x000028efu, 0x000028ecu, 0x000028eeu, 0x0003003eu, 0x000028d1u, 0x000028efu, 0x00070050u, 0x00000009u, 0x000028f1u, 0x00000c93u, 0x00000c93u, 0x00000c93u, 0x00000c93u, 0x000500c4u, 0x00000009u, 0x000028f2u, 0x000028e0u, 0x000028f1u, 0x0003003eu, 0x000028ceu, 0x000028f2u, 0x000500c3u, 0x00000009u, 0x000028f6u, 0x00002368u, 0x0000eee1u, 0x00050051u, 0x00000008u, 0x000028f7u, 0x000028f6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000028f8u, 0x000028f6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000028f9u, 0x000028f6u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000028fau, 0x000028f6u, 0x00000003u, 0x00070050u, 0x00000009u, 0x000028fcu, 0x000028efu, 0x000028efu, 0x000028efu, 0x000028efu, 0x00050084u, 0x00000009u, 0x000028fdu, 0x000028fcu, 0x000028f6u, 0x000500c3u, 0x00000009u, 0x00002901u, 0x0000236cu, 0x0000eee1u, 0x00050051u, 0x00000008u, 0x00002902u, 0x00002901u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002903u, 0x00002901u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002904u, 0x00002901u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00002905u, 0x00002901u, 0x00000003u, 0x00070050u, 0x00000009u, 0x00002907u, 0x000028e9u, 0x000028e9u, 0x000028e9u, 0x000028e9u, 0x00050084u, 0x00000009u, 0x00002908u, 0x00002907u, 0x00002901u, 0x00050080u, 0x00000009u, 0x00002909u, 0x000028fdu, 0x00002908u, 0x00050080u, 0x00000009u, 0x0000290bu, 0x000028f2u, 0x00002909u, 0x0003003eu, 0x000028ceu, 0x0000290bu, 0x00070050u, 0x00000009u, 0x0000290du, 0x00000cb0u, 0x00000cb0u, 0x00000cb0u, 0x00000cb0u, 0x000500c3u, 0x00000009u, 0x0000290eu, 0x0000290bu, 0x0000290du, 0x0003003eu, 0x000028ceu, 0x0000290eu, 0x0003003eu, 0x000028d2u, 0x0000290eu, 0x0003003eu, 0x00002911u, 0x0000290eu, 0x00050082u, 0x00000009u, 0x0000291du, 0x0000290eu, 0x0000eee2u, 0x0003003eu, 0x00002911u, 0x0000291du, 0x000600cau, 0x00000009u, 0x0000291fu, 0x0000291du, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00002911u, 0x0000291fu, 0x00050080u, 0x00000009u, 0x00002922u, 0x0000291fu, 0x0000eee2u, 0x0003003eu, 0x00002911u, 0x00002922u, 0x0008000cu, 0x00000009u, 0x00002924u, 0x00000001u, 0x0000002du, 0x00002922u, 0x00000611u, 0x00000af5u, 0x00050051u, 0x00000008u, 0x00002925u, 0x00002924u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002926u, 0x00002924u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002927u, 0x00002924u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00002928u, 0x00002924u, 0x00000003u, 0x0003003eu, 0x0000291au, 0x00002924u, 0x0003003eu, 0x00002912u, 0x00002924u, 0x0003003eu, 0x000028d3u, 0x00002924u, 0x0003003eu, 0x0000203au, 0x00002924u, 0x0003003eu, 0x00002040u, 0x00000543u, 0x0003003eu, 0x00002041u, 0x000021cau, 0x000500a7u, 0x0000005du, 0x000021d6u, 0x00001c8du, 0x00002145u, 0x000300f7u, 0x000021d7u, 0x00000000u, 0x000400fau, 0x000021d6u, 0x000021d8u, 0x000021d7u, 0x000200f8u, 0x000021d8u, 0x000500c7u, 0x00000006u, 0x000021dau, 0x000020cfu, 0x00000a45u, 0x000500abu, 0x0000005du, 0x000021dbu, 0x000021dau, 0x00000374u, 0x000300f7u, 0x000021dcu, 0x00000000u, 0x000400fau, 0x000021dbu, 0x000021ddu, 0x000021dcu, 0x000200f8u, 0x000021ddu, 0x00050084u, 0x00000008u, 0x000021dfu, 0x000021cau, 0x00000880u, 0x0003003eu, 0x00002041u, 0x000021dfu, 0x000200f9u, 0x000021dcu, 0x000200f8u, 0x000021dcu, 0x000700f5u, 0x00000008u, 0x00007a95u, 0x000021cau, 0x000021d8u, 0x000021dfu, 0x000021ddu, 0x000200f9u, 0x000021d7u, 0x000200f8u, 0x000021d7u, 0x000700f5u, 0x00000008u, 0x00007a94u, 0x000021cau, 0x000021c1u, 0x00007a95u, 0x000021dcu, 0x0003003eu, 0x00002046u, 0x00002343u, 0x0003003eu, 0x00002047u, 0x00002370u, 0x0003003eu, 0x00002048u, 0x00002374u, 0x0003003eu, 0x00002049u, 0x000021c8u, 0x0003003eu, 0x0000204au, 0x00002883u, 0x0003003eu, 0x0000204bu, 0x00002118u, 0x0003003eu, 0x0000204cu, 0x00002145u, 0x0003003eu, 0x0000204du, 0x00007a94u, 0x0003003eu, 0x00002052u, 0x00000543u, 0x0004003du, 0x00000009u, 0x0000293bu, 0x00002046u, 0x0008004fu, 0x0000003cu, 0x0000293cu, 0x0000293bu, 0x0000293bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000293du, 0x00002047u, 0x0008004fu, 0x0000003cu, 0x0000293eu, 0x0000293du, 0x0000293du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00002940u, 0x0000293eu, 0x0000eedeu, 0x00060050u, 0x0000003cu, 0x00002941u, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x0000003cu, 0x00002942u, 0x00002940u, 0x00002941u, 0x00060050u, 0x0000003cu, 0x00002944u, 0x000021c8u, 0x000021c8u, 0x000021c8u, 0x00050084u, 0x0000003cu, 0x00002945u, 0x00002942u, 0x00002944u, 0x00050080u, 0x0000003cu, 0x00002946u, 0x0000293cu, 0x00002945u, 0x0003003eu, 0x0000292au, 0x00002946u, 0x000300f7u, 0x00002948u, 0x00000000u, 0x000400fau, 0x00002145u, 0x00002949u, 0x00002948u, 0x000200f8u, 0x00002949u, 0x0004003du, 0x00000009u, 0x0000294cu, 0x00002047u, 0x0008004fu, 0x0000003cu, 0x0000294du, 0x0000294cu, 0x0000294cu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x0000294fu, 0x0000294du, 0x0000eedeu, 0x000500c3u, 0x0000003cu, 0x00002951u, 0x0000294fu, 0x00002941u, 0x00060050u, 0x0000003cu, 0x00002952u, 0x00007a94u, 0x00007a94u, 0x00007a94u, 0x00050084u, 0x0000003cu, 0x00002953u, 0x00002952u, 0x00002951u, 0x00050080u, 0x0000003cu, 0x00002954u, 0x00002946u, 0x00002953u, 0x0003003eu, 0x0000292bu, 0x00002954u, 0x000300f7u, 0x00002955u, 0x00000000u, 0x000400fau, 0x00000d3cu, 0x00002956u, 0x00002957u, 0x000200f8u, 0x00002957u, 0x0004003du, 0x00000009u, 0x00002965u, 0x00002048u, 0x0008004fu, 0x0000003cu, 0x00002966u, 0x00002965u, 0x00002965u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00002968u, 0x00002966u, 0x0000eee4u, 0x000500c3u, 0x0000003cu, 0x0000296au, 0x00002968u, 0x00002941u, 0x00050080u, 0x0000003cu, 0x0000296bu, 0x00002946u, 0x0000296au, 0x0003003eu, 0x0000292cu, 0x0000296bu, 0x000200f9u, 0x00002955u, 0x000200f8u, 0x00002956u, 0x0006000cu, 0x00000008u, 0x0000295au, 0x00000001u, 0x00000005u, 0x00007a94u, 0x0004003du, 0x00000009u, 0x0000295bu, 0x00002048u, 0x0008004fu, 0x0000003cu, 0x0000295cu, 0x0000295bu, 0x0000295bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x0000295eu, 0x0000295cu, 0x0000eee4u, 0x000500c3u, 0x0000003cu, 0x00002960u, 0x0000295eu, 0x00002941u, 0x00060050u, 0x0000003cu, 0x00002961u, 0x0000295au, 0x0000295au, 0x0000295au, 0x00050084u, 0x0000003cu, 0x00002962u, 0x00002961u, 0x00002960u, 0x00050080u, 0x0000003cu, 0x00002963u, 0x00002946u, 0x00002962u, 0x0003003eu, 0x0000292cu, 0x00002963u, 0x000200f9u, 0x00002955u, 0x000200f8u, 0x00002955u, 0x000700f5u, 0x0000003cu, 0x00007abau, 0x00002963u, 0x00002956u, 0x0000296bu, 0x00002957u, 0x000200f9u, 0x00002948u, 0x000200f8u, 0x00002948u, 0x000700f5u, 0x0000003cu, 0x00007aadu, 0x00007ab3u, 0x000021d7u, 0x00007abau, 0x00002955u, 0x000700f5u, 0x0000003cu, 0x00007a9eu, 0x00007aa4u, 0x000021d7u, 0x00002954u, 0x00002955u, 0x000300f7u, 0x0000296du, 0x00000000u, 0x000400fau, 0x00002118u, 0x0000296eu, 0x0000296fu, 0x000200f8u, 0x0000296fu, 0x000500c3u, 0x0000003cu, 0x00002987u, 0x00002946u, 0x0000eedfu, 0x0003003eu, 0x00002933u, 0x00002987u, 0x0007004fu, 0x0000005fu, 0x00002b56u, 0x00002987u, 0x00002987u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002b54u, 0x00002b56u, 0x0003003eu, 0x0000204eu, 0x00002b56u, 0x000300f7u, 0x0000298au, 0x00000000u, 0x000400fau, 0x00002145u, 0x0000298bu, 0x0000298au, 0x000200f8u, 0x0000298bu, 0x000500c3u, 0x0000003cu, 0x0000298eu, 0x00007a9eu, 0x0000eedfu, 0x0003003eu, 0x00002934u, 0x0000298eu, 0x0007004fu, 0x0000005fu, 0x00002b59u, 0x0000298eu, 0x0000298eu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002b57u, 0x00002b59u, 0x0003003eu, 0x0000204fu, 0x00002b59u, 0x000500c3u, 0x0000003cu, 0x00002992u, 0x00007aadu, 0x0000eedfu, 0x0003003eu, 0x00002935u, 0x00002992u, 0x0007004fu, 0x0000005fu, 0x00002b5cu, 0x00002992u, 0x00002992u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002b5au, 0x00002b5cu, 0x0003003eu, 0x00002050u, 0x00002b5cu, 0x000200f9u, 0x0000298au, 0x000200f8u, 0x0000298au, 0x000700f5u, 0x0000005fu, 0x00007bacu, 0x00007b9eu, 0x0000296fu, 0x00002b5cu, 0x0000298bu, 0x000700f5u, 0x0000005fu, 0x00007b92u, 0x00007b7au, 0x0000296fu, 0x00002b59u, 0x0000298bu, 0x000200f9u, 0x0000296du, 0x000200f8u, 0x0000296eu, 0x000500c3u, 0x0000003cu, 0x00002972u, 0x00002946u, 0x0000eedfu, 0x0003003eu, 0x0000292du, 0x00002972u, 0x0003003eu, 0x0000292eu, 0x00000543u, 0x00050041u, 0x0000003eu, 0x000029ccu, 0x0000292du, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000029cdu, 0x000029ccu, 0x0003003eu, 0x000029c2u, 0x000029cdu, 0x000500b3u, 0x0000005du, 0x000029cfu, 0x000029cdu, 0x00000203u, 0x0003003eu, 0x000029c3u, 0x000029cfu, 0x000500c7u, 0x00000008u, 0x000029d1u, 0x000029cdu, 0x00000c0bu, 0x0003003eu, 0x000029c2u, 0x000029d1u, 0x0003003eu, 0x000029c5u, 0x000029d1u, 0x0006000cu, 0x00000008u, 0x00002a2du, 0x00000001u, 0x0000004au, 0x000029d1u, 0x00050082u, 0x00000008u, 0x00002a2eu, 0x00000283u, 0x00002a2du, 0x0007000cu, 0x00000008u, 0x00002a2fu, 0x00000001u, 0x00000027u, 0x00002a2eu, 0x00000283u, 0x0003003eu, 0x00002a25u, 0x00002a2fu, 0x000500c4u, 0x00000008u, 0x00002a32u, 0x000029d1u, 0x00002a2fu, 0x000500c7u, 0x00000008u, 0x00002a33u, 0x00002a32u, 0x00000b25u, 0x0003003eu, 0x00002a26u, 0x00002a33u, 0x000500c7u, 0x00000008u, 0x00002a35u, 0x00002a33u, 0x0000038bu, 0x0003003eu, 0x00002a27u, 0x00002a35u, 0x000500c3u, 0x00000008u, 0x00002a37u, 0x00002a33u, 0x0000025eu, 0x0003003eu, 0x00002a29u, 0x00000be9u, 0x00050041u, 0x00000060u, 0x00002a38u, 0x00002a29u, 0x00002a37u, 0x0004003du, 0x0000005fu, 0x00002a39u, 0x00002a38u, 0x00050051u, 0x00000008u, 0x00002a3au, 0x00002a39u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002a3bu, 0x00002a39u, 0x00000001u, 0x0003003eu, 0x00002a28u, 0x00002a39u, 0x00050041u, 0x0000003eu, 0x00002a3du, 0x00002a28u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a3eu, 0x00002a3du, 0x00050084u, 0x00000008u, 0x00002a40u, 0x00002a3eu, 0x00002a35u, 0x000500c3u, 0x00000008u, 0x00002a41u, 0x00002a40u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002a42u, 0x00002a28u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a43u, 0x00002a42u, 0x00050080u, 0x00000008u, 0x00002a44u, 0x00002a41u, 0x00002a43u, 0x0003003eu, 0x00002a2au, 0x00002a44u, 0x00050050u, 0x0000005fu, 0x00002a47u, 0x00002a44u, 0x00002a2fu, 0x0003003eu, 0x00002a2bu, 0x00002a47u, 0x0003003eu, 0x000029c4u, 0x00002a47u, 0x00050041u, 0x0000003eu, 0x000029d4u, 0x000029c4u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000029d5u, 0x000029d4u, 0x0003003eu, 0x000029c6u, 0x000029d5u, 0x0004003du, 0x0000003cu, 0x000029d6u, 0x0000292du, 0x0007004fu, 0x0000005fu, 0x000029d7u, 0x000029d6u, 0x000029d6u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x000029d8u, 0x000029c4u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000029d9u, 0x000029d8u, 0x00050050u, 0x0000005fu, 0x000029dau, 0x000029d9u, 0x000029d9u, 0x00050084u, 0x0000005fu, 0x000029dbu, 0x000029d7u, 0x000029dau, 0x0003003eu, 0x000029c7u, 0x000029dbu, 0x000500c3u, 0x00000008u, 0x000029ddu, 0x00000c1eu, 0x000029d5u, 0x0004007eu, 0x00000008u, 0x000029deu, 0x000029ddu, 0x000500c7u, 0x00000008u, 0x000029dfu, 0x00000c1du, 0x000029deu, 0x0003003eu, 0x000029c8u, 0x000029dfu, 0x0004003du, 0x0000005fu, 0x000029e0u, 0x000029c7u, 0x00050050u, 0x0000005fu, 0x000029e2u, 0x000029dfu, 0x000029dfu, 0x000500c7u, 0x0000005fu, 0x000029e3u, 0x000029e0u, 0x000029e2u, 0x0003003eu, 0x000029c9u, 0x000029e3u, 0x000500abu, 0x0000005du, 0x000029e5u, 0x000029d5u, 0x00000283u, 0x000300f7u, 0x000029e6u, 0x00000000u, 0x000400fau, 0x000029e5u, 0x000029e7u, 0x000029e8u, 0x000200f8u, 0x000029e8u, 0x0004003du, 0x0000005fu, 0x000029eeu, 0x000029c7u, 0x000500c4u, 0x0000005fu, 0x000029f0u, 0x000029eeu, 0x0000eee3u, 0x0003003eu, 0x000029cau, 0x000029f0u, 0x000200f9u, 0x000029e6u, 0x000200f8u, 0x000029e7u, 0x0004003du, 0x0000005fu, 0x000029e9u, 0x000029c7u, 0x00050082u, 0x00000008u, 0x000029ebu, 0x0000027du, 0x000029d5u, 0x00050050u, 0x0000005fu, 0x000029ecu, 0x000029ebu, 0x000029ebu, 0x000500c3u, 0x0000005fu, 0x000029edu, 0x000029e9u, 0x000029ecu, 0x0003003eu, 0x000029c7u, 0x000029edu, 0x0003003eu, 0x000029cau, 0x000029edu, 0x000200f9u, 0x000029e6u, 0x000200f8u, 0x000029e6u, 0x0004003du, 0x0000005fu, 0x000029f1u, 0x000029c9u, 0x000500abu, 0x00000879u, 0x000029f2u, 0x000029f1u, 0x00000c37u, 0x0004009au, 0x0000005du, 0x000029f3u, 0x000029f2u, 0x000300f7u, 0x000029f4u, 0x00000000u, 0x000400fau, 0x000029f3u, 0x000029f5u, 0x000029f4u, 0x000200f8u, 0x000029f5u, 0x00050041u, 0x0000003eu, 0x000029f6u, 0x000029c9u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000029f7u, 0x000029f6u, 0x000500abu, 0x0000005du, 0x000029f9u, 0x000029f7u, 0x000029dfu, 0x000300f7u, 0x000029fau, 0x00000000u, 0x000400fau, 0x000029f9u, 0x000029fbu, 0x000029fau, 0x000200f8u, 0x000029fbu, 0x0004003du, 0x00000008u, 0x000029fdu, 0x000029f6u, 0x000500abu, 0x0000005du, 0x000029feu, 0x000029fdu, 0x00000203u, 0x000200f9u, 0x000029fau, 0x000200f8u, 0x000029fau, 0x000700f5u, 0x0000005du, 0x000029ffu, 0x000029f9u, 0x000029f5u, 0x000029feu, 0x000029fbu, 0x000300f7u, 0x00002a00u, 0x00000000u, 0x000400fau, 0x000029ffu, 0x00002a01u, 0x00002a00u, 0x000200f8u, 0x00002a01u, 0x00050041u, 0x0000003eu, 0x00002a02u, 0x000029c7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a03u, 0x00002a02u, 0x000500c7u, 0x00000008u, 0x00002a04u, 0x00002a03u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002a05u, 0x00002a04u, 0x00000203u, 0x000300f7u, 0x00002a06u, 0x00000000u, 0x000400fau, 0x00002a05u, 0x00002a07u, 0x00002a08u, 0x000200f8u, 0x00002a08u, 0x00050041u, 0x0000003eu, 0x00002a0au, 0x000029cau, 0x00000374u, 0x0003003eu, 0x00002a0au, 0x00000c50u, 0x000200f9u, 0x00002a06u, 0x000200f8u, 0x00002a07u, 0x00050041u, 0x0000003eu, 0x00002a09u, 0x000029cau, 0x00000374u, 0x0003003eu, 0x00002a09u, 0x00000c0bu, 0x000200f9u, 0x00002a06u, 0x000200f8u, 0x00002a06u, 0x0003003eu, 0x0000292eu, 0x0000055eu, 0x000200f9u, 0x00002a00u, 0x000200f8u, 0x00002a00u, 0x000600a9u, 0x0000005du, 0x0000eefbu, 0x000029ffu, 0x0000055eu, 0x00000543u, 0x00050041u, 0x0000003eu, 0x00002a0bu, 0x000029c9u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a0cu, 0x00002a0bu, 0x000500abu, 0x0000005du, 0x00002a0eu, 0x00002a0cu, 0x000029dfu, 0x000300f7u, 0x00002a0fu, 0x00000000u, 0x000400fau, 0x00002a0eu, 0x00002a10u, 0x00002a0fu, 0x000200f8u, 0x00002a10u, 0x0004003du, 0x00000008u, 0x00002a12u, 0x00002a0bu, 0x000500abu, 0x0000005du, 0x00002a13u, 0x00002a12u, 0x00000203u, 0x000200f9u, 0x00002a0fu, 0x000200f8u, 0x00002a0fu, 0x000700f5u, 0x0000005du, 0x00002a14u, 0x00002a0eu, 0x00002a00u, 0x00002a13u, 0x00002a10u, 0x000300f7u, 0x00002a15u, 0x00000000u, 0x000400fau, 0x00002a14u, 0x00002a16u, 0x00002a15u, 0x000200f8u, 0x00002a16u, 0x00050041u, 0x0000003eu, 0x00002a17u, 0x000029c7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a18u, 0x00002a17u, 0x000500c7u, 0x00000008u, 0x00002a19u, 0x00002a18u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002a1au, 0x00002a19u, 0x00000203u, 0x000300f7u, 0x00002a1bu, 0x00000000u, 0x000400fau, 0x00002a1au, 0x00002a1cu, 0x00002a1du, 0x000200f8u, 0x00002a1du, 0x00050041u, 0x0000003eu, 0x00002a1fu, 0x000029cau, 0x00000485u, 0x0003003eu, 0x00002a1fu, 0x00000c50u, 0x000200f9u, 0x00002a1bu, 0x000200f8u, 0x00002a1cu, 0x00050041u, 0x0000003eu, 0x00002a1eu, 0x000029cau, 0x00000485u, 0x0003003eu, 0x00002a1eu, 0x00000c0bu, 0x000200f9u, 0x00002a1bu, 0x000200f8u, 0x00002a1bu, 0x0003003eu, 0x0000292eu, 0x0000055eu, 0x000200f9u, 0x00002a15u, 0x000200f8u, 0x00002a15u, 0x000600a9u, 0x0000005du, 0x0000eefcu, 0x00002a14u, 0x0000055eu, 0x0000eefbu, 0x000200f9u, 0x000029f4u, 0x000200f8u, 0x000029f4u, 0x000700f5u, 0x0000005du, 0x00007acau, 0x00000543u, 0x000029e6u, 0x0000eefcu, 0x00002a15u, 0x000300f7u, 0x00002a21u, 0x00000000u, 0x000400fau, 0x000029cfu, 0x00002a22u, 0x00002a21u, 0x000200f8u, 0x00002a22u, 0x0003003eu, 0x000029cau, 0x00000c6au, 0x0003003eu, 0x0000292eu, 0x0000055eu, 0x000200f9u, 0x00002a21u, 0x000200f8u, 0x00002a21u, 0x000600a9u, 0x0000005du, 0x0000eefdu, 0x000029cfu, 0x0000055eu, 0x00007acau, 0x0004003du, 0x0000005fu, 0x00002a23u, 0x000029cau, 0x0008000cu, 0x0000005fu, 0x00002a24u, 0x00000001u, 0x0000002du, 0x00002a23u, 0x00000c6du, 0x00000c6eu, 0x0003003eu, 0x000029cbu, 0x00002a24u, 0x0003003eu, 0x00002052u, 0x0000eefdu, 0x0003003eu, 0x0000204eu, 0x00002a24u, 0x000300f7u, 0x00002977u, 0x00000000u, 0x000400fau, 0x00002145u, 0x00002978u, 0x00002977u, 0x000200f8u, 0x00002978u, 0x000500c3u, 0x0000003cu, 0x0000297bu, 0x00007a9eu, 0x0000eedfu, 0x0003003eu, 0x0000292fu, 0x0000297bu, 0x0003003eu, 0x00002930u, 0x0000eefdu, 0x00050041u, 0x0000003eu, 0x00002a52u, 0x0000292fu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002a53u, 0x00002a52u, 0x0003003eu, 0x00002a48u, 0x00002a53u, 0x000500b3u, 0x0000005du, 0x00002a55u, 0x00002a53u, 0x00000203u, 0x0003003eu, 0x00002a49u, 0x00002a55u, 0x000500c7u, 0x00000008u, 0x00002a57u, 0x00002a53u, 0x00000c0bu, 0x0003003eu, 0x00002a48u, 0x00002a57u, 0x0003003eu, 0x00002a4bu, 0x00002a57u, 0x0006000cu, 0x00000008u, 0x00002ab3u, 0x00000001u, 0x0000004au, 0x00002a57u, 0x00050082u, 0x00000008u, 0x00002ab4u, 0x00000283u, 0x00002ab3u, 0x0007000cu, 0x00000008u, 0x00002ab5u, 0x00000001u, 0x00000027u, 0x00002ab4u, 0x00000283u, 0x0003003eu, 0x00002aabu, 0x00002ab5u, 0x000500c4u, 0x00000008u, 0x00002ab8u, 0x00002a57u, 0x00002ab5u, 0x000500c7u, 0x00000008u, 0x00002ab9u, 0x00002ab8u, 0x00000b25u, 0x0003003eu, 0x00002aacu, 0x00002ab9u, 0x000500c7u, 0x00000008u, 0x00002abbu, 0x00002ab9u, 0x0000038bu, 0x0003003eu, 0x00002aadu, 0x00002abbu, 0x000500c3u, 0x00000008u, 0x00002abdu, 0x00002ab9u, 0x0000025eu, 0x0003003eu, 0x00002aafu, 0x00000be9u, 0x00050041u, 0x00000060u, 0x00002abeu, 0x00002aafu, 0x00002abdu, 0x0004003du, 0x0000005fu, 0x00002abfu, 0x00002abeu, 0x00050051u, 0x00000008u, 0x00002ac0u, 0x00002abfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002ac1u, 0x00002abfu, 0x00000001u, 0x0003003eu, 0x00002aaeu, 0x00002abfu, 0x00050041u, 0x0000003eu, 0x00002ac3u, 0x00002aaeu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002ac4u, 0x00002ac3u, 0x00050084u, 0x00000008u, 0x00002ac6u, 0x00002ac4u, 0x00002abbu, 0x000500c3u, 0x00000008u, 0x00002ac7u, 0x00002ac6u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002ac8u, 0x00002aaeu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002ac9u, 0x00002ac8u, 0x00050080u, 0x00000008u, 0x00002acau, 0x00002ac7u, 0x00002ac9u, 0x0003003eu, 0x00002ab0u, 0x00002acau, 0x00050050u, 0x0000005fu, 0x00002acdu, 0x00002acau, 0x00002ab5u, 0x0003003eu, 0x00002ab1u, 0x00002acdu, 0x0003003eu, 0x00002a4au, 0x00002acdu, 0x00050041u, 0x0000003eu, 0x00002a5au, 0x00002a4au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a5bu, 0x00002a5au, 0x0003003eu, 0x00002a4cu, 0x00002a5bu, 0x0004003du, 0x0000003cu, 0x00002a5cu, 0x0000292fu, 0x0007004fu, 0x0000005fu, 0x00002a5du, 0x00002a5cu, 0x00002a5cu, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00002a5eu, 0x00002a4au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a5fu, 0x00002a5eu, 0x00050050u, 0x0000005fu, 0x00002a60u, 0x00002a5fu, 0x00002a5fu, 0x00050084u, 0x0000005fu, 0x00002a61u, 0x00002a5du, 0x00002a60u, 0x0003003eu, 0x00002a4du, 0x00002a61u, 0x000500c3u, 0x00000008u, 0x00002a63u, 0x00000c1eu, 0x00002a5bu, 0x0004007eu, 0x00000008u, 0x00002a64u, 0x00002a63u, 0x000500c7u, 0x00000008u, 0x00002a65u, 0x00000c1du, 0x00002a64u, 0x0003003eu, 0x00002a4eu, 0x00002a65u, 0x0004003du, 0x0000005fu, 0x00002a66u, 0x00002a4du, 0x00050050u, 0x0000005fu, 0x00002a68u, 0x00002a65u, 0x00002a65u, 0x000500c7u, 0x0000005fu, 0x00002a69u, 0x00002a66u, 0x00002a68u, 0x0003003eu, 0x00002a4fu, 0x00002a69u, 0x000500abu, 0x0000005du, 0x00002a6bu, 0x00002a5bu, 0x00000283u, 0x000300f7u, 0x00002a6cu, 0x00000000u, 0x000400fau, 0x00002a6bu, 0x00002a6du, 0x00002a6eu, 0x000200f8u, 0x00002a6eu, 0x0004003du, 0x0000005fu, 0x00002a74u, 0x00002a4du, 0x000500c4u, 0x0000005fu, 0x00002a76u, 0x00002a74u, 0x0000eee3u, 0x0003003eu, 0x00002a50u, 0x00002a76u, 0x000200f9u, 0x00002a6cu, 0x000200f8u, 0x00002a6du, 0x0004003du, 0x0000005fu, 0x00002a6fu, 0x00002a4du, 0x00050082u, 0x00000008u, 0x00002a71u, 0x0000027du, 0x00002a5bu, 0x00050050u, 0x0000005fu, 0x00002a72u, 0x00002a71u, 0x00002a71u, 0x000500c3u, 0x0000005fu, 0x00002a73u, 0x00002a6fu, 0x00002a72u, 0x0003003eu, 0x00002a4du, 0x00002a73u, 0x0003003eu, 0x00002a50u, 0x00002a73u, 0x000200f9u, 0x00002a6cu, 0x000200f8u, 0x00002a6cu, 0x0004003du, 0x0000005fu, 0x00002a77u, 0x00002a4fu, 0x000500abu, 0x00000879u, 0x00002a78u, 0x00002a77u, 0x00000c37u, 0x0004009au, 0x0000005du, 0x00002a79u, 0x00002a78u, 0x000300f7u, 0x00002a7au, 0x00000000u, 0x000400fau, 0x00002a79u, 0x00002a7bu, 0x00002a7au, 0x000200f8u, 0x00002a7bu, 0x00050041u, 0x0000003eu, 0x00002a7cu, 0x00002a4fu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a7du, 0x00002a7cu, 0x000500abu, 0x0000005du, 0x00002a7fu, 0x00002a7du, 0x00002a65u, 0x000300f7u, 0x00002a80u, 0x00000000u, 0x000400fau, 0x00002a7fu, 0x00002a81u, 0x00002a80u, 0x000200f8u, 0x00002a81u, 0x0004003du, 0x00000008u, 0x00002a83u, 0x00002a7cu, 0x000500abu, 0x0000005du, 0x00002a84u, 0x00002a83u, 0x00000203u, 0x000200f9u, 0x00002a80u, 0x000200f8u, 0x00002a80u, 0x000700f5u, 0x0000005du, 0x00002a85u, 0x00002a7fu, 0x00002a7bu, 0x00002a84u, 0x00002a81u, 0x000300f7u, 0x00002a86u, 0x00000000u, 0x000400fau, 0x00002a85u, 0x00002a87u, 0x00002a86u, 0x000200f8u, 0x00002a87u, 0x00050041u, 0x0000003eu, 0x00002a88u, 0x00002a4du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002a89u, 0x00002a88u, 0x000500c7u, 0x00000008u, 0x00002a8au, 0x00002a89u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002a8bu, 0x00002a8au, 0x00000203u, 0x000300f7u, 0x00002a8cu, 0x00000000u, 0x000400fau, 0x00002a8bu, 0x00002a8du, 0x00002a8eu, 0x000200f8u, 0x00002a8eu, 0x00050041u, 0x0000003eu, 0x00002a90u, 0x00002a50u, 0x00000374u, 0x0003003eu, 0x00002a90u, 0x00000c50u, 0x000200f9u, 0x00002a8cu, 0x000200f8u, 0x00002a8du, 0x00050041u, 0x0000003eu, 0x00002a8fu, 0x00002a50u, 0x00000374u, 0x0003003eu, 0x00002a8fu, 0x00000c0bu, 0x000200f9u, 0x00002a8cu, 0x000200f8u, 0x00002a8cu, 0x0003003eu, 0x00002930u, 0x0000055eu, 0x000200f9u, 0x00002a86u, 0x000200f8u, 0x00002a86u, 0x000600a9u, 0x0000005du, 0x0000eefeu, 0x00002a85u, 0x0000055eu, 0x0000eefdu, 0x00050041u, 0x0000003eu, 0x00002a91u, 0x00002a4fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a92u, 0x00002a91u, 0x000500abu, 0x0000005du, 0x00002a94u, 0x00002a92u, 0x00002a65u, 0x000300f7u, 0x00002a95u, 0x00000000u, 0x000400fau, 0x00002a94u, 0x00002a96u, 0x00002a95u, 0x000200f8u, 0x00002a96u, 0x0004003du, 0x00000008u, 0x00002a98u, 0x00002a91u, 0x000500abu, 0x0000005du, 0x00002a99u, 0x00002a98u, 0x00000203u, 0x000200f9u, 0x00002a95u, 0x000200f8u, 0x00002a95u, 0x000700f5u, 0x0000005du, 0x00002a9au, 0x00002a94u, 0x00002a86u, 0x00002a99u, 0x00002a96u, 0x000300f7u, 0x00002a9bu, 0x00000000u, 0x000400fau, 0x00002a9au, 0x00002a9cu, 0x00002a9bu, 0x000200f8u, 0x00002a9cu, 0x00050041u, 0x0000003eu, 0x00002a9du, 0x00002a4du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002a9eu, 0x00002a9du, 0x000500c7u, 0x00000008u, 0x00002a9fu, 0x00002a9eu, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002aa0u, 0x00002a9fu, 0x00000203u, 0x000300f7u, 0x00002aa1u, 0x00000000u, 0x000400fau, 0x00002aa0u, 0x00002aa2u, 0x00002aa3u, 0x000200f8u, 0x00002aa3u, 0x00050041u, 0x0000003eu, 0x00002aa5u, 0x00002a50u, 0x00000485u, 0x0003003eu, 0x00002aa5u, 0x00000c50u, 0x000200f9u, 0x00002aa1u, 0x000200f8u, 0x00002aa2u, 0x00050041u, 0x0000003eu, 0x00002aa4u, 0x00002a50u, 0x00000485u, 0x0003003eu, 0x00002aa4u, 0x00000c0bu, 0x000200f9u, 0x00002aa1u, 0x000200f8u, 0x00002aa1u, 0x0003003eu, 0x00002930u, 0x0000055eu, 0x000200f9u, 0x00002a9bu, 0x000200f8u, 0x00002a9bu, 0x000600a9u, 0x0000005du, 0x0000eeffu, 0x00002a9au, 0x0000055eu, 0x0000eefeu, 0x000200f9u, 0x00002a7au, 0x000200f8u, 0x00002a7au, 0x000700f5u, 0x0000005du, 0x00007aefu, 0x0000eefdu, 0x00002a6cu, 0x0000eeffu, 0x00002a9bu, 0x000300f7u, 0x00002aa7u, 0x00000000u, 0x000400fau, 0x00002a55u, 0x00002aa8u, 0x00002aa7u, 0x000200f8u, 0x00002aa8u, 0x0003003eu, 0x00002a50u, 0x00000c6au, 0x0003003eu, 0x00002930u, 0x0000055eu, 0x000200f9u, 0x00002aa7u, 0x000200f8u, 0x00002aa7u, 0x000600a9u, 0x0000005du, 0x0000ef00u, 0x00002a55u, 0x0000055eu, 0x00007aefu, 0x0004003du, 0x0000005fu, 0x00002aa9u, 0x00002a50u, 0x0008000cu, 0x0000005fu, 0x00002aaau, 0x00000001u, 0x0000002du, 0x00002aa9u, 0x00000c6du, 0x00000c6eu, 0x0003003eu, 0x00002a51u, 0x00002aaau, 0x0003003eu, 0x00002052u, 0x0000ef00u, 0x0003003eu, 0x0000204fu, 0x00002aaau, 0x000500c3u, 0x0000003cu, 0x00002981u, 0x00007aadu, 0x0000eedfu, 0x0003003eu, 0x00002931u, 0x00002981u, 0x0003003eu, 0x00002932u, 0x0000ef00u, 0x00050041u, 0x0000003eu, 0x00002ad8u, 0x00002931u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002ad9u, 0x00002ad8u, 0x0003003eu, 0x00002aceu, 0x00002ad9u, 0x000500b3u, 0x0000005du, 0x00002adbu, 0x00002ad9u, 0x00000203u, 0x0003003eu, 0x00002acfu, 0x00002adbu, 0x000500c7u, 0x00000008u, 0x00002addu, 0x00002ad9u, 0x00000c0bu, 0x0003003eu, 0x00002aceu, 0x00002addu, 0x0003003eu, 0x00002ad1u, 0x00002addu, 0x0006000cu, 0x00000008u, 0x00002b39u, 0x00000001u, 0x0000004au, 0x00002addu, 0x00050082u, 0x00000008u, 0x00002b3au, 0x00000283u, 0x00002b39u, 0x0007000cu, 0x00000008u, 0x00002b3bu, 0x00000001u, 0x00000027u, 0x00002b3au, 0x00000283u, 0x0003003eu, 0x00002b31u, 0x00002b3bu, 0x000500c4u, 0x00000008u, 0x00002b3eu, 0x00002addu, 0x00002b3bu, 0x000500c7u, 0x00000008u, 0x00002b3fu, 0x00002b3eu, 0x00000b25u, 0x0003003eu, 0x00002b32u, 0x00002b3fu, 0x000500c7u, 0x00000008u, 0x00002b41u, 0x00002b3fu, 0x0000038bu, 0x0003003eu, 0x00002b33u, 0x00002b41u, 0x000500c3u, 0x00000008u, 0x00002b43u, 0x00002b3fu, 0x0000025eu, 0x0003003eu, 0x00002b35u, 0x00000be9u, 0x00050041u, 0x00000060u, 0x00002b44u, 0x00002b35u, 0x00002b43u, 0x0004003du, 0x0000005fu, 0x00002b45u, 0x00002b44u, 0x00050051u, 0x00000008u, 0x00002b46u, 0x00002b45u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002b47u, 0x00002b45u, 0x00000001u, 0x0003003eu, 0x00002b34u, 0x00002b45u, 0x00050041u, 0x0000003eu, 0x00002b49u, 0x00002b34u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b4au, 0x00002b49u, 0x00050084u, 0x00000008u, 0x00002b4cu, 0x00002b4au, 0x00002b41u, 0x000500c3u, 0x00000008u, 0x00002b4du, 0x00002b4cu, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00002b4eu, 0x00002b34u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b4fu, 0x00002b4eu, 0x00050080u, 0x00000008u, 0x00002b50u, 0x00002b4du, 0x00002b4fu, 0x0003003eu, 0x00002b36u, 0x00002b50u, 0x00050050u, 0x0000005fu, 0x00002b53u, 0x00002b50u, 0x00002b3bu, 0x0003003eu, 0x00002b37u, 0x00002b53u, 0x0003003eu, 0x00002ad0u, 0x00002b53u, 0x00050041u, 0x0000003eu, 0x00002ae0u, 0x00002ad0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002ae1u, 0x00002ae0u, 0x0003003eu, 0x00002ad2u, 0x00002ae1u, 0x0004003du, 0x0000003cu, 0x00002ae2u, 0x00002931u, 0x0007004fu, 0x0000005fu, 0x00002ae3u, 0x00002ae2u, 0x00002ae2u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00002ae4u, 0x00002ad0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002ae5u, 0x00002ae4u, 0x00050050u, 0x0000005fu, 0x00002ae6u, 0x00002ae5u, 0x00002ae5u, 0x00050084u, 0x0000005fu, 0x00002ae7u, 0x00002ae3u, 0x00002ae6u, 0x0003003eu, 0x00002ad3u, 0x00002ae7u, 0x000500c3u, 0x00000008u, 0x00002ae9u, 0x00000c1eu, 0x00002ae1u, 0x0004007eu, 0x00000008u, 0x00002aeau, 0x00002ae9u, 0x000500c7u, 0x00000008u, 0x00002aebu, 0x00000c1du, 0x00002aeau, 0x0003003eu, 0x00002ad4u, 0x00002aebu, 0x0004003du, 0x0000005fu, 0x00002aecu, 0x00002ad3u, 0x00050050u, 0x0000005fu, 0x00002aeeu, 0x00002aebu, 0x00002aebu, 0x000500c7u, 0x0000005fu, 0x00002aefu, 0x00002aecu, 0x00002aeeu, 0x0003003eu, 0x00002ad5u, 0x00002aefu, 0x000500abu, 0x0000005du, 0x00002af1u, 0x00002ae1u, 0x00000283u, 0x000300f7u, 0x00002af2u, 0x00000000u, 0x000400fau, 0x00002af1u, 0x00002af3u, 0x00002af4u, 0x000200f8u, 0x00002af4u, 0x0004003du, 0x0000005fu, 0x00002afau, 0x00002ad3u, 0x000500c4u, 0x0000005fu, 0x00002afcu, 0x00002afau, 0x0000eee3u, 0x0003003eu, 0x00002ad6u, 0x00002afcu, 0x000200f9u, 0x00002af2u, 0x000200f8u, 0x00002af3u, 0x0004003du, 0x0000005fu, 0x00002af5u, 0x00002ad3u, 0x00050082u, 0x00000008u, 0x00002af7u, 0x0000027du, 0x00002ae1u, 0x00050050u, 0x0000005fu, 0x00002af8u, 0x00002af7u, 0x00002af7u, 0x000500c3u, 0x0000005fu, 0x00002af9u, 0x00002af5u, 0x00002af8u, 0x0003003eu, 0x00002ad3u, 0x00002af9u, 0x0003003eu, 0x00002ad6u, 0x00002af9u, 0x000200f9u, 0x00002af2u, 0x000200f8u, 0x00002af2u, 0x0004003du, 0x0000005fu, 0x00002afdu, 0x00002ad5u, 0x000500abu, 0x00000879u, 0x00002afeu, 0x00002afdu, 0x00000c37u, 0x0004009au, 0x0000005du, 0x00002affu, 0x00002afeu, 0x000300f7u, 0x00002b00u, 0x00000000u, 0x000400fau, 0x00002affu, 0x00002b01u, 0x00002b00u, 0x000200f8u, 0x00002b01u, 0x00050041u, 0x0000003eu, 0x00002b02u, 0x00002ad5u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b03u, 0x00002b02u, 0x000500abu, 0x0000005du, 0x00002b05u, 0x00002b03u, 0x00002aebu, 0x000300f7u, 0x00002b06u, 0x00000000u, 0x000400fau, 0x00002b05u, 0x00002b07u, 0x00002b06u, 0x000200f8u, 0x00002b07u, 0x0004003du, 0x00000008u, 0x00002b09u, 0x00002b02u, 0x000500abu, 0x0000005du, 0x00002b0au, 0x00002b09u, 0x00000203u, 0x000200f9u, 0x00002b06u, 0x000200f8u, 0x00002b06u, 0x000700f5u, 0x0000005du, 0x00002b0bu, 0x00002b05u, 0x00002b01u, 0x00002b0au, 0x00002b07u, 0x000300f7u, 0x00002b0cu, 0x00000000u, 0x000400fau, 0x00002b0bu, 0x00002b0du, 0x00002b0cu, 0x000200f8u, 0x00002b0du, 0x00050041u, 0x0000003eu, 0x00002b0eu, 0x00002ad3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b0fu, 0x00002b0eu, 0x000500c7u, 0x00000008u, 0x00002b10u, 0x00002b0fu, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002b11u, 0x00002b10u, 0x00000203u, 0x000300f7u, 0x00002b12u, 0x00000000u, 0x000400fau, 0x00002b11u, 0x00002b13u, 0x00002b14u, 0x000200f8u, 0x00002b14u, 0x00050041u, 0x0000003eu, 0x00002b16u, 0x00002ad6u, 0x00000374u, 0x0003003eu, 0x00002b16u, 0x00000c50u, 0x000200f9u, 0x00002b12u, 0x000200f8u, 0x00002b13u, 0x00050041u, 0x0000003eu, 0x00002b15u, 0x00002ad6u, 0x00000374u, 0x0003003eu, 0x00002b15u, 0x00000c0bu, 0x000200f9u, 0x00002b12u, 0x000200f8u, 0x00002b12u, 0x0003003eu, 0x00002932u, 0x0000055eu, 0x000200f9u, 0x00002b0cu, 0x000200f8u, 0x00002b0cu, 0x000600a9u, 0x0000005du, 0x0000ef01u, 0x00002b0bu, 0x0000055eu, 0x0000ef00u, 0x00050041u, 0x0000003eu, 0x00002b17u, 0x00002ad5u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b18u, 0x00002b17u, 0x000500abu, 0x0000005du, 0x00002b1au, 0x00002b18u, 0x00002aebu, 0x000300f7u, 0x00002b1bu, 0x00000000u, 0x000400fau, 0x00002b1au, 0x00002b1cu, 0x00002b1bu, 0x000200f8u, 0x00002b1cu, 0x0004003du, 0x00000008u, 0x00002b1eu, 0x00002b17u, 0x000500abu, 0x0000005du, 0x00002b1fu, 0x00002b1eu, 0x00000203u, 0x000200f9u, 0x00002b1bu, 0x000200f8u, 0x00002b1bu, 0x000700f5u, 0x0000005du, 0x00002b20u, 0x00002b1au, 0x00002b0cu, 0x00002b1fu, 0x00002b1cu, 0x000300f7u, 0x00002b21u, 0x00000000u, 0x000400fau, 0x00002b20u, 0x00002b22u, 0x00002b21u, 0x000200f8u, 0x00002b22u, 0x00050041u, 0x0000003eu, 0x00002b23u, 0x00002ad3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b24u, 0x00002b23u, 0x000500c7u, 0x00000008u, 0x00002b25u, 0x00002b24u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00002b26u, 0x00002b25u, 0x00000203u, 0x000300f7u, 0x00002b27u, 0x00000000u, 0x000400fau, 0x00002b26u, 0x00002b28u, 0x00002b29u, 0x000200f8u, 0x00002b29u, 0x00050041u, 0x0000003eu, 0x00002b2bu, 0x00002ad6u, 0x00000485u, 0x0003003eu, 0x00002b2bu, 0x00000c50u, 0x000200f9u, 0x00002b27u, 0x000200f8u, 0x00002b28u, 0x00050041u, 0x0000003eu, 0x00002b2au, 0x00002ad6u, 0x00000485u, 0x0003003eu, 0x00002b2au, 0x00000c0bu, 0x000200f9u, 0x00002b27u, 0x000200f8u, 0x00002b27u, 0x0003003eu, 0x00002932u, 0x0000055eu, 0x000200f9u, 0x00002b21u, 0x000200f8u, 0x00002b21u, 0x000600a9u, 0x0000005du, 0x0000ef02u, 0x00002b20u, 0x0000055eu, 0x0000ef01u, 0x000200f9u, 0x00002b00u, 0x000200f8u, 0x00002b00u, 0x000700f5u, 0x0000005du, 0x00007b14u, 0x0000ef00u, 0x00002af2u, 0x0000ef02u, 0x00002b21u, 0x000300f7u, 0x00002b2du, 0x00000000u, 0x000400fau, 0x00002adbu, 0x00002b2eu, 0x00002b2du, 0x000200f8u, 0x00002b2eu, 0x0003003eu, 0x00002ad6u, 0x00000c6au, 0x0003003eu, 0x00002932u, 0x0000055eu, 0x000200f9u, 0x00002b2du, 0x000200f8u, 0x00002b2du, 0x000600a9u, 0x0000005du, 0x0000ef03u, 0x00002adbu, 0x0000055eu, 0x00007b14u, 0x0004003du, 0x0000005fu, 0x00002b2fu, 0x00002ad6u, 0x0008000cu, 0x0000005fu, 0x00002b30u, 0x00000001u, 0x0000002du, 0x00002b2fu, 0x00000c6du, 0x00000c6eu, 0x0003003eu, 0x00002ad7u, 0x00002b30u, 0x0003003eu, 0x00002052u, 0x0000ef03u, 0x0003003eu, 0x00002050u, 0x00002b30u, 0x000200f9u, 0x00002977u, 0x000200f8u, 0x00002977u, 0x000700f5u, 0x0000005du, 0x00007baeu, 0x0000eefdu, 0x00002a21u, 0x0000ef03u, 0x00002b2du, 0x000700f5u, 0x0000005fu, 0x00007b94u, 0x00007b9eu, 0x00002a21u, 0x00002b30u, 0x00002b2du, 0x000700f5u, 0x0000005fu, 0x00007b70u, 0x00007b7au, 0x00002a21u, 0x00002aaau, 0x00002b2du, 0x000200f9u, 0x0000296du, 0x000200f8u, 0x0000296du, 0x000700f5u, 0x0000005du, 0x00007badu, 0x00007baeu, 0x00002977u, 0x00000543u, 0x0000298au, 0x000700f5u, 0x0000005fu, 0x00007b93u, 0x00007b94u, 0x00002977u, 0x00007bacu, 0x0000298au, 0x000700f5u, 0x0000005fu, 0x00007b6fu, 0x00007b70u, 0x00002977u, 0x00007b92u, 0x0000298au, 0x000700f5u, 0x0000005fu, 0x00007b5au, 0x00002a24u, 0x00002977u, 0x00002b56u, 0x0000298au, 0x00050041u, 0x0000003eu, 0x00002994u, 0x00002046u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002995u, 0x00002994u, 0x00050041u, 0x0000003eu, 0x00002996u, 0x00002047u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00002997u, 0x00002996u, 0x000500c3u, 0x00000008u, 0x00002999u, 0x000021c8u, 0x0000078du, 0x00050084u, 0x00000008u, 0x0000299au, 0x00002997u, 0x00002999u, 0x00050080u, 0x00000008u, 0x0000299bu, 0x00002995u, 0x0000299au, 0x0004003du, 0x00000008u, 0x0000299du, 0x00002996u, 0x000500c3u, 0x00000008u, 0x0000299eu, 0x0000299du, 0x0000078du, 0x000500c7u, 0x00000008u, 0x000029a0u, 0x000021c8u, 0x00000d92u, 0x00050084u, 0x00000008u, 0x000029a1u, 0x0000299eu, 0x000029a0u, 0x00050080u, 0x00000008u, 0x000029a2u, 0x0000299bu, 0x000029a1u, 0x0003003eu, 0x00002051u, 0x000029a2u, 0x000500c3u, 0x00000008u, 0x000029a4u, 0x000029a2u, 0x0000026au, 0x0003003eu, 0x00002936u, 0x000029a4u, 0x0003003eu, 0x00002937u, 0x000028e7u, 0x0003003eu, 0x00002938u, 0x000028e9u, 0x0003003eu, 0x00002939u, 0x000028efu, 0x000500c4u, 0x00000008u, 0x000029b0u, 0x000029a4u, 0x00000da6u, 0x0003003eu, 0x00002936u, 0x000029b0u, 0x0004003du, 0x00000008u, 0x000029b3u, 0x00002996u, 0x000500c3u, 0x00000008u, 0x000029b4u, 0x000029b3u, 0x0000026au, 0x00050084u, 0x00000008u, 0x000029b5u, 0x000028efu, 0x000029b4u, 0x00050041u, 0x0000003eu, 0x000029b7u, 0x00002048u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000029b8u, 0x000029b7u, 0x000500c3u, 0x00000008u, 0x000029b9u, 0x000029b8u, 0x0000026au, 0x00050084u, 0x00000008u, 0x000029bau, 0x000028e9u, 0x000029b9u, 0x00050080u, 0x00000008u, 0x000029bbu, 0x000029b5u, 0x000029bau, 0x00050080u, 0x00000008u, 0x000029bdu, 0x000029b0u, 0x000029bbu, 0x0003003eu, 0x00002936u, 0x000029bdu, 0x000500c3u, 0x00000008u, 0x000029bfu, 0x000029bdu, 0x00000db6u, 0x0003003eu, 0x00002936u, 0x000029bfu, 0x0003003eu, 0x0000293au, 0x000029bfu, 0x00050082u, 0x00000008u, 0x00002b5fu, 0x000029bfu, 0x00000b0fu, 0x0003003eu, 0x0000293au, 0x00002b5fu, 0x000500c4u, 0x00000008u, 0x00002b61u, 0x00002b5fu, 0x0000027du, 0x0003003eu, 0x0000293au, 0x00002b61u, 0x000500c3u, 0x00000008u, 0x00002b63u, 0x00002b61u, 0x0000027du, 0x0003003eu, 0x0000293au, 0x00002b63u, 0x00050080u, 0x00000008u, 0x00002b65u, 0x00002b63u, 0x00000b0fu, 0x0003003eu, 0x0000293au, 0x00002b65u, 0x0008000cu, 0x00000008u, 0x00002b67u, 0x00000001u, 0x0000002du, 0x00002b65u, 0x00000203u, 0x0000041du, 0x0003003eu, 0x00002b5du, 0x00002b67u, 0x0003003eu, 0x00002051u, 0x00002b67u, 0x0003003eu, 0x00002042u, 0x00007b5au, 0x0003003eu, 0x00002043u, 0x00007b6fu, 0x0003003eu, 0x00002044u, 0x00007b93u, 0x0003003eu, 0x00002045u, 0x00002b67u, 0x0003003eu, 0x00002040u, 0x00007badu, 0x000500c7u, 0x00000006u, 0x000021f3u, 0x000020eeu, 0x0000073fu, 0x0003003eu, 0x00002053u, 0x000021f3u, 0x00050080u, 0x00000006u, 0x000021f5u, 0x000021f3u, 0x00000485u, 0x000500c7u, 0x00000006u, 0x000021f6u, 0x000021f5u, 0x0000073fu, 0x0003003eu, 0x00002054u, 0x000021f6u, 0x000500c2u, 0x00000006u, 0x000021f8u, 0x000020eeu, 0x0000048bu, 0x0003003eu, 0x00002055u, 0x000021f8u, 0x0003003eu, 0x00002056u, 0x000028c8u, 0x000300f7u, 0x000021fcu, 0x00000000u, 0x000400fau, 0x00002145u, 0x000021fdu, 0x000021fcu, 0x000200f8u, 0x000021fdu, 0x0003003eu, 0x00002058u, 0x000021f3u, 0x0003003eu, 0x00002059u, 0x000021f6u, 0x0003003eu, 0x0000205bu, 0x000021f8u, 0x0003003eu, 0x0000205cu, 0x000028c8u, 0x0003003eu, 0x0000205du, 0x00007b5au, 0x0003003eu, 0x0000205eu, 0x00007b6fu, 0x0003003eu, 0x0000205fu, 0x00007b93u, 0x0003003eu, 0x00002060u, 0x00007badu, 0x0003003eu, 0x00002061u, 0x0000211bu, 0x0003003eu, 0x00002062u, 0x0000211eu, 0x0003003eu, 0x00002063u, 0x00002121u, 0x0003003eu, 0x00002b68u, 0x00000543u, 0x0003003eu, 0x00002b69u, 0x00000543u, 0x0003003eu, 0x00002b6au, 0x00000374u, 0x000300f7u, 0x00002b71u, 0x00000000u, 0x000400fau, 0x00007badu, 0x00002b72u, 0x00002b73u, 0x000200f8u, 0x00002b73u, 0x00050082u, 0x0000005fu, 0x00002b76u, 0x00007b6fu, 0x00007b5au, 0x0003003eu, 0x00002b6bu, 0x00002b76u, 0x000500c3u, 0x0000005fu, 0x00002b79u, 0x00002b76u, 0x0000eee6u, 0x000500c6u, 0x0000005fu, 0x00002b7bu, 0x00002b76u, 0x00002b79u, 0x0003003eu, 0x00002b6bu, 0x00002b7bu, 0x00050082u, 0x0000005fu, 0x00002b7eu, 0x00007b93u, 0x00007b5au, 0x0003003eu, 0x00002b6cu, 0x00002b7eu, 0x000500c3u, 0x0000005fu, 0x00002b81u, 0x00002b7eu, 0x0000eee6u, 0x000500c6u, 0x0000005fu, 0x00002b83u, 0x00002b7eu, 0x00002b81u, 0x0003003eu, 0x00002b6cu, 0x00002b83u, 0x0007000cu, 0x0000005fu, 0x00002b86u, 0x00000001u, 0x0000002au, 0x00002b7bu, 0x00002b83u, 0x0003003eu, 0x00002b6du, 0x00002b86u, 0x00050041u, 0x0000003eu, 0x00002b87u, 0x00002b6du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002b88u, 0x00002b87u, 0x00050041u, 0x0000003eu, 0x00002b89u, 0x00002b6du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002b8au, 0x00002b89u, 0x0007000cu, 0x00000008u, 0x00002b8bu, 0x00000001u, 0x0000002au, 0x00002b88u, 0x00002b8au, 0x0003003eu, 0x00002b6eu, 0x00002b8bu, 0x000500afu, 0x0000005du, 0x00002b8du, 0x00002b8bu, 0x00000b2cu, 0x000300f7u, 0x00002b8eu, 0x00000000u, 0x000400fau, 0x00002b8du, 0x00002b8fu, 0x00002b90u, 0x000200f8u, 0x00002b90u, 0x000500b1u, 0x0000005du, 0x00002b93u, 0x00002b8bu, 0x0000037du, 0x000300f7u, 0x00002b94u, 0x00000000u, 0x000400fau, 0x00002b93u, 0x00002b95u, 0x00002b96u, 0x000200f8u, 0x00002b96u, 0x000500c3u, 0x00000008u, 0x00002babu, 0x00002b8bu, 0x0000021eu, 0x0006000cu, 0x00000008u, 0x00002bacu, 0x00000001u, 0x0000004au, 0x00002babu, 0x0007000cu, 0x00000008u, 0x00002badu, 0x00000001u, 0x0000002au, 0x00002bacu, 0x00000203u, 0x0003003eu, 0x00002b6fu, 0x00002badu, 0x0004007cu, 0x00000006u, 0x00002bafu, 0x00002badu, 0x000500aeu, 0x0000005du, 0x00002bb1u, 0x00002bafu, 0x000021f8u, 0x0003003eu, 0x00002b69u, 0x00002bb1u, 0x000400a8u, 0x0000005du, 0x00002bb4u, 0x0000211eu, 0x000500a7u, 0x0000005du, 0x00002bb5u, 0x00002bb1u, 0x00002bb4u, 0x000400a8u, 0x0000005du, 0x00002bb7u, 0x00002121u, 0x000500a7u, 0x0000005du, 0x00002bb8u, 0x00002bb5u, 0x00002bb7u, 0x000300f7u, 0x00002bb9u, 0x00000000u, 0x000400fau, 0x00002bb8u, 0x00002bbau, 0x00002bbbu, 0x000200f8u, 0x00002bbbu, 0x000500c4u, 0x00000008u, 0x00002bbdu, 0x00002b8bu, 0x00000218u, 0x000500c3u, 0x00000008u, 0x00002bbfu, 0x00002bbdu, 0x00002badu, 0x000500c7u, 0x00000008u, 0x00002bc0u, 0x00002bbfu, 0x0000038bu, 0x0003003eu, 0x0000205au, 0x00002bc0u, 0x0003003eu, 0x00002b6au, 0x00002bafu, 0x000200f9u, 0x00002bb9u, 0x000200f8u, 0x00002bbau, 0x0003003eu, 0x0000205au, 0x0000038bu, 0x000200f9u, 0x00002bb9u, 0x000200f8u, 0x00002bb9u, 0x000700f5u, 0x00000008u, 0x00007cc1u, 0x0000038bu, 0x00002bbau, 0x00002bc0u, 0x00002bbbu, 0x000600a9u, 0x00000006u, 0x0000ef04u, 0x00002bb8u, 0x00000374u, 0x00002bafu, 0x000200f9u, 0x00002b94u, 0x000200f8u, 0x00002b95u, 0x000500aau, 0x0000005du, 0x00002b98u, 0x000021f8u, 0x00000374u, 0x0003003eu, 0x00002b69u, 0x00002b98u, 0x0003003eu, 0x00002b68u, 0x0000055eu, 0x000400a8u, 0x0000005du, 0x00002b9au, 0x0000211eu, 0x000400a8u, 0x0000005du, 0x00002b9cu, 0x00002121u, 0x000500a7u, 0x0000005du, 0x00002b9du, 0x00002b9au, 0x00002b9cu, 0x000300f7u, 0x00002b9eu, 0x00000000u, 0x000400fau, 0x00002b9du, 0x00002b9fu, 0x00002ba0u, 0x000200f8u, 0x00002ba0u, 0x0007000cu, 0x00000008u, 0x00002ba5u, 0x00000001u, 0x0000002au, 0x000028c8u, 0x00002b8bu, 0x000500c4u, 0x00000008u, 0x00002ba6u, 0x00002ba5u, 0x00000218u, 0x000600a9u, 0x00000008u, 0x00002ba8u, 0x0000211eu, 0x00001860u, 0x00000203u, 0x00050080u, 0x00000008u, 0x00002ba9u, 0x00002ba6u, 0x00002ba8u, 0x0003003eu, 0x0000205au, 0x00002ba9u, 0x000200f9u, 0x00002b9eu, 0x000200f8u, 0x00002b9fu, 0x000600a9u, 0x00000008u, 0x00002ba2u, 0x00002b98u, 0x0000038bu, 0x00000203u, 0x0003003eu, 0x0000205au, 0x00002ba2u, 0x000200f9u, 0x00002b9eu, 0x000200f8u, 0x00002b9eu, 0x000700f5u, 0x00000008u, 0x00007cc0u, 0x00002ba2u, 0x00002b9fu, 0x00002ba9u, 0x00002ba0u, 0x000200f9u, 0x00002b94u, 0x000200f8u, 0x00002b94u, 0x000700f5u, 0x00000008u, 0x00007cbfu, 0x00007cc0u, 0x00002b9eu, 0x00007cc1u, 0x00002bb9u, 0x000700f5u, 0x00000006u, 0x00007ca0u, 0x00000374u, 0x00002b9eu, 0x0000ef04u, 0x00002bb9u, 0x000700f5u, 0x0000005du, 0x00007c89u, 0x00002b98u, 0x00002b9eu, 0x00002bb1u, 0x00002bb9u, 0x000600a9u, 0x0000005du, 0x0000ef05u, 0x00002b93u, 0x0000055eu, 0x00000543u, 0x000200f9u, 0x00002b8eu, 0x000200f8u, 0x00002b8fu, 0x0003003eu, 0x00002b69u, 0x0000055eu, 0x0003003eu, 0x0000205au, 0x0000038bu, 0x0003003eu, 0x00002b6au, 0x000021f8u, 0x000200f9u, 0x00002b8eu, 0x000200f8u, 0x00002b8eu, 0x000700f5u, 0x00000008u, 0x00007cbeu, 0x0000038bu, 0x00002b8fu, 0x00007cbfu, 0x00002b94u, 0x000700f5u, 0x0000005du, 0x00007ca6u, 0x00000543u, 0x00002b8fu, 0x0000ef05u, 0x00002b94u, 0x000700f5u, 0x00000006u, 0x00007c9fu, 0x000021f8u, 0x00002b8fu, 0x00007ca0u, 0x00002b94u, 0x000700f5u, 0x0000005du, 0x00007c88u, 0x0000055eu, 0x00002b8fu, 0x00007c89u, 0x00002b94u, 0x000200f9u, 0x00002b71u, 0x000200f8u, 0x00002b72u, 0x0003003eu, 0x00002b69u, 0x0000055eu, 0x0003003eu, 0x0000205au, 0x0000038bu, 0x000200f9u, 0x00002b71u, 0x000200f8u, 0x00002b71u, 0x000700f5u, 0x00000008u, 0x00007cbdu, 0x0000038bu, 0x00002b72u, 0x00007cbeu, 0x00002b8eu, 0x000700f5u, 0x0000005du, 0x00007ca5u, 0x00000543u, 0x00002b72u, 0x00007ca6u, 0x00002b8eu, 0x000700f5u, 0x00000006u, 0x00007c9eu, 0x00000374u, 0x00002b72u, 0x00007c9fu, 0x00002b8eu, 0x000700f5u, 0x0000005du, 0x00007c87u, 0x0000055eu, 0x00002b72u, 0x00007c88u, 0x00002b8eu, 0x000300f7u, 0x00002bc4u, 0x00000000u, 0x000400fau, 0x0000211bu, 0x00002bc5u, 0x00002bc4u, 0x000200f8u, 0x00002bc5u, 0x000300f7u, 0x00002bc7u, 0x00000000u, 0x000400fau, 0x00007c87u, 0x00002bc8u, 0x00002bc7u, 0x000200f8u, 0x00002bc8u, 0x0003003eu, 0x00002b6au, 0x000021f8u, 0x000200f9u, 0x00002bc7u, 0x000200f8u, 0x00002bc7u, 0x000600a9u, 0x00000006u, 0x0000ef06u, 0x00007c87u, 0x000021f8u, 0x00007c9eu, 0x000400a8u, 0x0000005du, 0x00002bcbu, 0x00002121u, 0x000300f7u, 0x00002bccu, 0x00000000u, 0x000400fau, 0x00002bcbu, 0x00002bcdu, 0x00002bceu, 0x000200f8u, 0x00002bceu, 0x00050080u, 0x00000006u, 0x00002be5u, 0x000021f3u, 0x0000ef06u, 0x000500a6u, 0x0000005du, 0x00002be8u, 0x00007c87u, 0x00007ca5u, 0x000600a9u, 0x00000008u, 0x00002be9u, 0x00002be8u, 0x00000212u, 0x00000215u, 0x0004007cu, 0x00000006u, 0x00002beau, 0x00002be9u, 0x00050080u, 0x00000006u, 0x00002bebu, 0x00002be5u, 0x00002beau, 0x000500c7u, 0x00000006u, 0x00002becu, 0x00002bebu, 0x0000073fu, 0x0003003eu, 0x00002059u, 0x00002becu, 0x000600a9u, 0x00000008u, 0x00002bf1u, 0x00007ca5u, 0x00000203u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002bf2u, 0x00002bf1u, 0x00050080u, 0x00000006u, 0x00002bf3u, 0x00002be5u, 0x00002bf2u, 0x000500c7u, 0x00000006u, 0x00002bf4u, 0x00002bf3u, 0x0000073fu, 0x0003003eu, 0x00002058u, 0x00002bf4u, 0x000200f9u, 0x00002bccu, 0x000200f8u, 0x00002bcdu, 0x00050080u, 0x00000006u, 0x00002bd1u, 0x000021f3u, 0x0000ef06u, 0x000500c7u, 0x00000006u, 0x00002bd2u, 0x00002bd1u, 0x0000073fu, 0x0003003eu, 0x00002058u, 0x00002bd2u, 0x000400a8u, 0x0000005du, 0x00002bd4u, 0x00007c87u, 0x000300f7u, 0x00002bd5u, 0x00000000u, 0x000400fau, 0x00002bd4u, 0x00002bd6u, 0x00002bd5u, 0x000200f8u, 0x00002bd6u, 0x000400a8u, 0x0000005du, 0x00002bd8u, 0x0000211eu, 0x000500a7u, 0x0000005du, 0x00002bdau, 0x00002bd8u, 0x00007ca5u, 0x000200f9u, 0x00002bd5u, 0x000200f8u, 0x00002bd5u, 0x000700f5u, 0x0000005du, 0x00002bdbu, 0x00007c87u, 0x00002bcdu, 0x00002bdau, 0x00002bd6u, 0x000300f7u, 0x00002bdcu, 0x00000000u, 0x000400fau, 0x00002bdbu, 0x00002bddu, 0x00002bdeu, 0x000200f8u, 0x00002bdeu, 0x00050080u, 0x00000006u, 0x00002be1u, 0x00002bd2u, 0x00000485u, 0x000500c7u, 0x00000006u, 0x00002be2u, 0x00002be1u, 0x0000073fu, 0x0003003eu, 0x00002059u, 0x00002be2u, 0x000200f9u, 0x00002bdcu, 0x000200f8u, 0x00002bddu, 0x0003003eu, 0x00002059u, 0x00002bd2u, 0x000200f9u, 0x00002bdcu, 0x000200f8u, 0x00002bdcu, 0x000700f5u, 0x00000006u, 0x00007cbbu, 0x00002bd2u, 0x00002bddu, 0x00002be2u, 0x00002bdeu, 0x000200f9u, 0x00002bccu, 0x000200f8u, 0x00002bccu, 0x000700f5u, 0x00000006u, 0x00007cbau, 0x00007cbbu, 0x00002bdcu, 0x00002becu, 0x00002bceu, 0x000700f5u, 0x00000006u, 0x00007cb2u, 0x00002bd2u, 0x00002bdcu, 0x00002bf4u, 0x00002bceu, 0x000200f9u, 0x00002bc4u, 0x000200f8u, 0x00002bc4u, 0x000700f5u, 0x00000006u, 0x00007cb4u, 0x000021f6u, 0x00002b71u, 0x00007cbau, 0x00002bccu, 0x000700f5u, 0x00000006u, 0x00007cb1u, 0x000021f3u, 0x00002b71u, 0x00007cb2u, 0x00002bccu, 0x0003003eu, 0x00002053u, 0x00007cb1u, 0x0003003eu, 0x00002054u, 0x00007cb4u, 0x0003003eu, 0x00002057u, 0x00007cbdu, 0x000200f9u, 0x000021fcu, 0x000200f8u, 0x000021fcu, 0x000700f5u, 0x00000008u, 0x0000a6c9u, 0x0000a6d5u, 0x0000296du, 0x00007cbdu, 0x00002bc4u, 0x000700f5u, 0x00000006u, 0x00009165u, 0x000021f6u, 0x0000296du, 0x00007cb4u, 0x00002bc4u, 0x000700f5u, 0x00000006u, 0x00007d22u, 0x000021f3u, 0x0000296du, 0x00007cb1u, 0x00002bc4u, 0x000300f7u, 0x0000220eu, 0x00000000u, 0x000400fau, 0x0000213cu, 0x0000220fu, 0x0000220eu, 0x000200f8u, 0x0000220fu, 0x00080041u, 0x00000277u, 0x00002212u, 0x00000a19u, 0x00000203u, 0x00001ed5u, 0x00000215u, 0x00007d22u, 0x0004003du, 0x00000229u, 0x00002213u, 0x00002212u, 0x00040071u, 0x00000006u, 0x00002214u, 0x00002213u, 0x0003003eu, 0x00002064u, 0x00002214u, 0x0003003eu, 0x00002066u, 0x00002214u, 0x00070041u, 0x0000026bu, 0x00002bf7u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000203u, 0x0004003du, 0x00000006u, 0x00002bf8u, 0x00002bf7u, 0x00070041u, 0x0000026bu, 0x00002bfau, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000212u, 0x0004003du, 0x00000006u, 0x00002bfbu, 0x00002bfau, 0x00070041u, 0x0000026bu, 0x00002bfdu, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00002bfeu, 0x00002bfdu, 0x00070041u, 0x0000026bu, 0x00002c00u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00002c01u, 0x00002c00u, 0x00070041u, 0x0000026bu, 0x00002c03u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00002c04u, 0x00002c03u, 0x00070041u, 0x0000026bu, 0x00002c06u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00002c07u, 0x00002c06u, 0x00070041u, 0x00000277u, 0x00002c09u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000221u, 0x0004003du, 0x00000229u, 0x00002c0au, 0x00002c09u, 0x00040071u, 0x00000006u, 0x00002c0bu, 0x00002c0au, 0x0004007cu, 0x00000008u, 0x00002c0cu, 0x00002c0bu, 0x00070041u, 0x00000277u, 0x00002c0eu, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000224u, 0x0004003du, 0x00000229u, 0x00002c0fu, 0x00002c0eu, 0x00040071u, 0x00000006u, 0x00002c10u, 0x00002c0fu, 0x0004007cu, 0x00000008u, 0x00002c11u, 0x00002c10u, 0x00070041u, 0x00000277u, 0x00002c13u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x0000025eu, 0x0004003du, 0x00000229u, 0x00002c14u, 0x00002c13u, 0x00040071u, 0x00000006u, 0x00002c15u, 0x00002c14u, 0x0004007cu, 0x00000008u, 0x00002c16u, 0x00002c15u, 0x00070041u, 0x00000277u, 0x00002c18u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000264u, 0x0004003du, 0x00000229u, 0x00002c19u, 0x00002c18u, 0x00040071u, 0x00000006u, 0x00002c1au, 0x00002c19u, 0x0004007cu, 0x00000008u, 0x00002c1bu, 0x00002c1au, 0x00070041u, 0x00000277u, 0x00002c1du, 0x000002d1u, 0x00000203u, 0x00002214u, 0x0000026au, 0x0004003du, 0x00000229u, 0x00002c1eu, 0x00002c1du, 0x00040071u, 0x00000006u, 0x00002c1fu, 0x00002c1eu, 0x0004007cu, 0x00000008u, 0x00002c20u, 0x00002c1fu, 0x00070041u, 0x00000277u, 0x00002c22u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x0000026fu, 0x0004003du, 0x00000229u, 0x00002c23u, 0x00002c22u, 0x00040071u, 0x00000006u, 0x00002c24u, 0x00002c23u, 0x0004007cu, 0x00000008u, 0x00002c25u, 0x00002c24u, 0x00070041u, 0x00000277u, 0x00002c27u, 0x000002d1u, 0x00000203u, 0x00002214u, 0x00000276u, 0x0004003du, 0x00000229u, 0x00002c28u, 0x00002c27u, 0x00040071u, 0x00000006u, 0x00002c29u, 0x00002c28u, 0x0004007cu, 0x00000008u, 0x00002c2au, 0x00002c29u, 0x00070041u, 0x00000277u, 0x00002c2cu, 0x000002d1u, 0x00000203u, 0x00002214u, 0x0000027du, 0x0004003du, 0x00000229u, 0x00002c2du, 0x00002c2cu, 0x00040071u, 0x00000006u, 0x00002c2eu, 0x00002c2du, 0x0004007cu, 0x00000008u, 0x00002c2fu, 0x00002c2eu, 0x00110050u, 0x0000001eu, 0x00002c30u, 0x00002bf8u, 0x00002bfbu, 0x00002bfeu, 0x00002c01u, 0x00002c04u, 0x00002c07u, 0x00002c0cu, 0x00002c11u, 0x00002c16u, 0x00002c1bu, 0x00002c20u, 0x00002c25u, 0x00002c2au, 0x00002c2fu, 0x0003003eu, 0x00006bffu, 0x00002bf8u, 0x0003003eu, 0x00006c00u, 0x00002bfbu, 0x0003003eu, 0x00006c01u, 0x00002bfeu, 0x0003003eu, 0x00006c02u, 0x00002c01u, 0x0003003eu, 0x00006c03u, 0x00002c04u, 0x0003003eu, 0x00006c04u, 0x00002c07u, 0x0003003eu, 0x00006c05u, 0x00002c0cu, 0x0003003eu, 0x00006c06u, 0x00002c11u, 0x0003003eu, 0x00006c07u, 0x00002c16u, 0x0003003eu, 0x00006c08u, 0x00002c1bu, 0x0003003eu, 0x00006c09u, 0x00002c20u, 0x0003003eu, 0x00006c0au, 0x00002c25u, 0x0003003eu, 0x00006c0bu, 0x00002c2au, 0x0003003eu, 0x00006c0cu, 0x00002c2fu, 0x0003003eu, 0x00006e20u, 0x00002bf8u, 0x0003003eu, 0x00006e21u, 0x00002bfbu, 0x0003003eu, 0x00006e22u, 0x00002bfeu, 0x0003003eu, 0x00006e23u, 0x00002c01u, 0x0003003eu, 0x00006e24u, 0x00002c04u, 0x0003003eu, 0x00006e25u, 0x00002c07u, 0x0003003eu, 0x00006e26u, 0x00002c0cu, 0x0003003eu, 0x00006e27u, 0x00002c11u, 0x0003003eu, 0x00006e28u, 0x00002c16u, 0x0003003eu, 0x00006e29u, 0x00002c1bu, 0x0003003eu, 0x00006e2au, 0x00002c20u, 0x0003003eu, 0x00006e2bu, 0x00002c25u, 0x0003003eu, 0x00006e2cu, 0x00002c2au, 0x0003003eu, 0x00006e2du, 0x00002c2fu, 0x0003003eu, 0x00006e4bu, 0x00002bf8u, 0x0003003eu, 0x00006e4cu, 0x00002bfbu, 0x0003003eu, 0x00006e4du, 0x00002bfeu, 0x0003003eu, 0x00006e4eu, 0x00002c01u, 0x0003003eu, 0x00006e4fu, 0x00002c04u, 0x0003003eu, 0x00006e50u, 0x00002c07u, 0x0003003eu, 0x00006e51u, 0x00002c0cu, 0x0003003eu, 0x00006e52u, 0x00002c11u, 0x0003003eu, 0x00006e53u, 0x00002c16u, 0x0003003eu, 0x00006e54u, 0x00002c1bu, 0x0003003eu, 0x00006e55u, 0x00002c20u, 0x0003003eu, 0x00006e56u, 0x00002c25u, 0x0003003eu, 0x00006e57u, 0x00002c2au, 0x0003003eu, 0x00006e58u, 0x00002c2fu, 0x0003003eu, 0x00002069u, 0x000020f8u, 0x0003003eu, 0x0000206au, 0x00007b5au, 0x0003003eu, 0x0000206bu, 0x00002109u, 0x0003003eu, 0x0000206cu, 0x0000210cu, 0x0003003eu, 0x0000206du, 0x0000210fu, 0x0003003eu, 0x0000206eu, 0x00002139u, 0x0003003eu, 0x0000206fu, 0x00000543u, 0x0003003eu, 0x00002070u, 0x00000611u, 0x000500c7u, 0x00000008u, 0x00002d74u, 0x00002c2fu, 0x00000212u, 0x000500abu, 0x0000005du, 0x00002d75u, 0x00002d74u, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00002d78u, 0x00002bf8u, 0x0004007cu, 0x00000008u, 0x00002d7bu, 0x00002bfbu, 0x0003003eu, 0x00002c31u, 0x00002d75u, 0x00050041u, 0x0000003eu, 0x00002d7eu, 0x0000206au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002d7fu, 0x00002d7eu, 0x0003003eu, 0x00002c32u, 0x00002d7fu, 0x0003003eu, 0x00002c33u, 0x00002d78u, 0x0003003eu, 0x00002c34u, 0x00002d7bu, 0x0003003eu, 0x00002c35u, 0x00002c20u, 0x0008000cu, 0x00000008u, 0x0000312du, 0x00000001u, 0x0000002du, 0x00002d7fu, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x00002c32u, 0x0000312du, 0x000500b1u, 0x0000005du, 0x0000312fu, 0x00002c20u, 0x0000026fu, 0x000300f7u, 0x00003130u, 0x00000000u, 0x000400fau, 0x0000312fu, 0x00003131u, 0x00003132u, 0x000200f8u, 0x00003132u, 0x00050082u, 0x00000008u, 0x00003137u, 0x0000037du, 0x00002c20u, 0x000500c4u, 0x00000008u, 0x00003139u, 0x0000312du, 0x00003137u, 0x0003003eu, 0x00002c32u, 0x00003139u, 0x000500c3u, 0x00000008u, 0x0000313bu, 0x00003139u, 0x00000559u, 0x0003003eu, 0x00002c32u, 0x0000313bu, 0x000200f9u, 0x00003130u, 0x000200f8u, 0x00003131u, 0x000500c3u, 0x00000008u, 0x00003135u, 0x0000312du, 0x00002c20u, 0x0003003eu, 0x00002c32u, 0x00003135u, 0x000200f9u, 0x00003130u, 0x000200f8u, 0x00003130u, 0x000700f5u, 0x00000008u, 0x00007e1bu, 0x00003135u, 0x00003131u, 0x0000313bu, 0x00003132u, 0x000300f7u, 0x0000313du, 0x00000000u, 0x000400fau, 0x00002d75u, 0x0000313eu, 0x0000313fu, 0x000200f8u, 0x0000313fu, 0x000500c4u, 0x00000008u, 0x00003155u, 0x00002d78u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003157u, 0x00007e1bu, 0x00003155u, 0x0003003eu, 0x00002c32u, 0x00003157u, 0x000200f9u, 0x0000313du, 0x000200f8u, 0x0000313eu, 0x000500c3u, 0x00000008u, 0x00003141u, 0x00007e1bu, 0x00000218u, 0x000500afu, 0x0000005du, 0x00003143u, 0x00003141u, 0x00002d7bu, 0x0003003eu, 0x0000312au, 0x00003143u, 0x000300f7u, 0x00003145u, 0x00000000u, 0x000400fau, 0x00003143u, 0x00003146u, 0x00003147u, 0x000200f8u, 0x00003147u, 0x000500c4u, 0x00000008u, 0x00003151u, 0x00002d78u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003152u, 0x00007e1bu, 0x00003151u, 0x0007000cu, 0x00000008u, 0x00003153u, 0x00000001u, 0x0000002au, 0x00003152u, 0x00000203u, 0x0003003eu, 0x00002c32u, 0x00003153u, 0x000200f9u, 0x00003145u, 0x000200f8u, 0x00003146u, 0x000500c3u, 0x00000008u, 0x00003149u, 0x00002d7bu, 0x00000215u, 0x000500c3u, 0x00000008u, 0x0000314bu, 0x00002d78u, 0x00000215u, 0x00050082u, 0x00000008u, 0x0000314cu, 0x00003149u, 0x0000314bu, 0x000500c7u, 0x00000008u, 0x0000314du, 0x0000314cu, 0x00001140u, 0x000500c4u, 0x00000008u, 0x0000314eu, 0x0000314du, 0x0000021eu, 0x0003003eu, 0x00002c32u, 0x0000314eu, 0x000200f9u, 0x00003145u, 0x000200f8u, 0x00003145u, 0x000700f5u, 0x00000008u, 0x00007e1eu, 0x0000314eu, 0x00003146u, 0x00003153u, 0x00003147u, 0x000200f9u, 0x0000313du, 0x000200f8u, 0x0000313du, 0x000700f5u, 0x00000008u, 0x00007e1du, 0x00007e1eu, 0x00003145u, 0x00003157u, 0x0000313fu, 0x0003003eu, 0x0000312bu, 0x00007e1du, 0x0003003eu, 0x00002d7eu, 0x00007e1du, 0x000500c7u, 0x00000008u, 0x00002d84u, 0x00002c2fu, 0x0000021bu, 0x000500abu, 0x0000005du, 0x00002d85u, 0x00002d84u, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00002d88u, 0x00002bfeu, 0x0004007cu, 0x00000008u, 0x00002d8bu, 0x00002c01u, 0x0003003eu, 0x00002c36u, 0x00002d85u, 0x00050041u, 0x0000003eu, 0x00002d8eu, 0x0000206au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002d8fu, 0x00002d8eu, 0x0003003eu, 0x00002c37u, 0x00002d8fu, 0x0003003eu, 0x00002c38u, 0x00002d88u, 0x0003003eu, 0x00002c39u, 0x00002d8bu, 0x0003003eu, 0x00002c3au, 0x00002c2au, 0x0008000cu, 0x00000008u, 0x0000315cu, 0x00000001u, 0x0000002du, 0x00002d8fu, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x00002c37u, 0x0000315cu, 0x000500b1u, 0x0000005du, 0x0000315eu, 0x00002c2au, 0x0000026fu, 0x000300f7u, 0x0000315fu, 0x00000000u, 0x000400fau, 0x0000315eu, 0x00003160u, 0x00003161u, 0x000200f8u, 0x00003161u, 0x00050082u, 0x00000008u, 0x00003166u, 0x0000037du, 0x00002c2au, 0x000500c4u, 0x00000008u, 0x00003168u, 0x0000315cu, 0x00003166u, 0x0003003eu, 0x00002c37u, 0x00003168u, 0x000500c3u, 0x00000008u, 0x0000316au, 0x00003168u, 0x00000559u, 0x0003003eu, 0x00002c37u, 0x0000316au, 0x000200f9u, 0x0000315fu, 0x000200f8u, 0x00003160u, 0x000500c3u, 0x00000008u, 0x00003164u, 0x0000315cu, 0x00002c2au, 0x0003003eu, 0x00002c37u, 0x00003164u, 0x000200f9u, 0x0000315fu, 0x000200f8u, 0x0000315fu, 0x000700f5u, 0x00000008u, 0x00007e2du, 0x00003164u, 0x00003160u, 0x0000316au, 0x00003161u, 0x000300f7u, 0x0000316cu, 0x00000000u, 0x000400fau, 0x00002d85u, 0x0000316du, 0x0000316eu, 0x000200f8u, 0x0000316eu, 0x000500c4u, 0x00000008u, 0x00003184u, 0x00002d88u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003186u, 0x00007e2du, 0x00003184u, 0x0003003eu, 0x00002c37u, 0x00003186u, 0x000200f9u, 0x0000316cu, 0x000200f8u, 0x0000316du, 0x000500c3u, 0x00000008u, 0x00003170u, 0x00007e2du, 0x00000218u, 0x000500afu, 0x0000005du, 0x00003172u, 0x00003170u, 0x00002d8bu, 0x0003003eu, 0x00003159u, 0x00003172u, 0x000300f7u, 0x00003174u, 0x00000000u, 0x000400fau, 0x00003172u, 0x00003175u, 0x00003176u, 0x000200f8u, 0x00003176u, 0x000500c4u, 0x00000008u, 0x00003180u, 0x00002d88u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00003181u, 0x00007e2du, 0x00003180u, 0x0007000cu, 0x00000008u, 0x00003182u, 0x00000001u, 0x0000002au, 0x00003181u, 0x00000203u, 0x0003003eu, 0x00002c37u, 0x00003182u, 0x000200f9u, 0x00003174u, 0x000200f8u, 0x00003175u, 0x000500c3u, 0x00000008u, 0x00003178u, 0x00002d8bu, 0x00000215u, 0x000500c3u, 0x00000008u, 0x0000317au, 0x00002d88u, 0x00000215u, 0x00050082u, 0x00000008u, 0x0000317bu, 0x00003178u, 0x0000317au, 0x000500c7u, 0x00000008u, 0x0000317cu, 0x0000317bu, 0x00001140u, 0x000500c4u, 0x00000008u, 0x0000317du, 0x0000317cu, 0x0000021eu, 0x0003003eu, 0x00002c37u, 0x0000317du, 0x000200f9u, 0x00003174u, 0x000200f8u, 0x00003174u, 0x000700f5u, 0x00000008u, 0x00007e30u, 0x0000317du, 0x00003175u, 0x00003182u, 0x00003176u, 0x000200f9u, 0x0000316cu, 0x000200f8u, 0x0000316cu, 0x000700f5u, 0x00000008u, 0x00007e2fu, 0x00007e30u, 0x00003174u, 0x00003186u, 0x0000316eu, 0x0003003eu, 0x0000315au, 0x00007e2fu, 0x0003003eu, 0x00002d8eu, 0x00007e2fu, 0x000300f7u, 0x00002d93u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002d94u, 0x00002d95u, 0x000200f8u, 0x00002d95u, 0x0003003eu, 0x00002c3bu, 0x00000c37u, 0x000200f9u, 0x00002d93u, 0x000200f8u, 0x00002d94u, 0x0004003du, 0x0000005fu, 0x00002d96u, 0x0000206au, 0x000500c7u, 0x0000005fu, 0x00002d98u, 0x00002d96u, 0x0000eee6u, 0x0003003eu, 0x00002c3bu, 0x00002d98u, 0x000200f9u, 0x00002d93u, 0x000200f8u, 0x00002d93u, 0x00050041u, 0x0000003eu, 0x00002d99u, 0x00002c3bu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00002d9au, 0x00002d99u, 0x00050041u, 0x0000003eu, 0x00002d9bu, 0x00002c3bu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00002d9cu, 0x00002d9bu, 0x00050080u, 0x00000008u, 0x00002d9du, 0x00002d9au, 0x00002d9cu, 0x0003003eu, 0x00002c3cu, 0x00002d9du, 0x0004003du, 0x0000005fu, 0x00002d9eu, 0x0000206au, 0x000500c3u, 0x0000005fu, 0x00002da0u, 0x00002d9eu, 0x0000eee5u, 0x0003003eu, 0x0000206au, 0x00002da0u, 0x0003003eu, 0x00006acfu, 0x00002c1bu, 0x0003003eu, 0x00006ad0u, 0x00002c2fu, 0x0004003du, 0x00000008u, 0x00002da3u, 0x00002d7eu, 0x0003003eu, 0x00002c3fu, 0x00002da3u, 0x000500abu, 0x0000005du, 0x0000318cu, 0x00002c1bu, 0x00000203u, 0x000300f7u, 0x0000318du, 0x00000000u, 0x000400fau, 0x0000318cu, 0x0000318eu, 0x0000318du, 0x000200f8u, 0x0000318eu, 0x000500c4u, 0x00000008u, 0x00003191u, 0x00000212u, 0x00002c1bu, 0x0003003eu, 0x00003188u, 0x00003191u, 0x000500c7u, 0x00000008u, 0x00003194u, 0x00002c2fu, 0x00000215u, 0x000500abu, 0x0000005du, 0x00003195u, 0x00003194u, 0x00000203u, 0x000300f7u, 0x00003196u, 0x00000000u, 0x000400fau, 0x00003195u, 0x00003197u, 0x00003196u, 0x000200f8u, 0x00003197u, 0x000500c7u, 0x00000008u, 0x0000319au, 0x00002da3u, 0x00003191u, 0x00050082u, 0x00000008u, 0x0000319bu, 0x0000319au, 0x00000212u, 0x0007000cu, 0x00000008u, 0x0000319cu, 0x00000001u, 0x0000002au, 0x0000319bu, 0x00000203u, 0x000500c6u, 0x00000008u, 0x0000319eu, 0x00002da3u, 0x0000319cu, 0x0003003eu, 0x00002c3fu, 0x0000319eu, 0x000200f9u, 0x00003196u, 0x000200f8u, 0x00003196u, 0x000700f5u, 0x00000008u, 0x00007e8eu, 0x00002da3u, 0x0000318eu, 0x0000319eu, 0x00003197u, 0x00050082u, 0x00000008u, 0x000031a0u, 0x00003191u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031a2u, 0x00007e8eu, 0x000031a0u, 0x0003003eu, 0x00002c3fu, 0x000031a2u, 0x000200f9u, 0x0000318du, 0x000200f8u, 0x0000318du, 0x000700f5u, 0x00000008u, 0x00007e8fu, 0x00002da3u, 0x00002d93u, 0x000031a2u, 0x00003196u, 0x0003003eu, 0x00003189u, 0x00007e8fu, 0x0003003eu, 0x00002c3du, 0x00007e8fu, 0x0003003eu, 0x00006ad3u, 0x00002c25u, 0x0003003eu, 0x00006ad4u, 0x00002c2fu, 0x0004003du, 0x00000008u, 0x00002da7u, 0x00002d8eu, 0x0003003eu, 0x00002c42u, 0x00002da7u, 0x000500abu, 0x0000005du, 0x000031a8u, 0x00002c25u, 0x00000203u, 0x000300f7u, 0x000031a9u, 0x00000000u, 0x000400fau, 0x000031a8u, 0x000031aau, 0x000031a9u, 0x000200f8u, 0x000031aau, 0x000500c4u, 0x00000008u, 0x000031adu, 0x00000212u, 0x00002c25u, 0x0003003eu, 0x000031a4u, 0x000031adu, 0x000500c7u, 0x00000008u, 0x000031b0u, 0x00002c2fu, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000031b1u, 0x000031b0u, 0x00000203u, 0x000300f7u, 0x000031b2u, 0x00000000u, 0x000400fau, 0x000031b1u, 0x000031b3u, 0x000031b2u, 0x000200f8u, 0x000031b3u, 0x000500c7u, 0x00000008u, 0x000031b6u, 0x00002da7u, 0x000031adu, 0x00050082u, 0x00000008u, 0x000031b7u, 0x000031b6u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000031b8u, 0x00000001u, 0x0000002au, 0x000031b7u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000031bau, 0x00002da7u, 0x000031b8u, 0x0003003eu, 0x00002c42u, 0x000031bau, 0x000200f9u, 0x000031b2u, 0x000200f8u, 0x000031b2u, 0x000700f5u, 0x00000008u, 0x00007eadu, 0x00002da7u, 0x000031aau, 0x000031bau, 0x000031b3u, 0x00050082u, 0x00000008u, 0x000031bcu, 0x000031adu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031beu, 0x00007eadu, 0x000031bcu, 0x0003003eu, 0x00002c42u, 0x000031beu, 0x000200f9u, 0x000031a9u, 0x000200f8u, 0x000031a9u, 0x000700f5u, 0x00000008u, 0x00007eaeu, 0x00002da7u, 0x0000318du, 0x000031beu, 0x000031b2u, 0x0003003eu, 0x000031a5u, 0x00007eaeu, 0x0003003eu, 0x00002c40u, 0x00007eaeu, 0x0004003du, 0x00000008u, 0x00002daau, 0x00002d7eu, 0x00050080u, 0x00000008u, 0x00002dabu, 0x00002daau, 0x00000212u, 0x0003003eu, 0x00006ad7u, 0x00002c1bu, 0x0003003eu, 0x00006ad8u, 0x00002c2fu, 0x0003003eu, 0x00002c45u, 0x00002dabu, 0x000300f7u, 0x000031c5u, 0x00000000u, 0x000400fau, 0x0000318cu, 0x000031c6u, 0x000031c5u, 0x000200f8u, 0x000031c6u, 0x000500c4u, 0x00000008u, 0x000031c9u, 0x00000212u, 0x00002c1bu, 0x0003003eu, 0x000031c0u, 0x000031c9u, 0x000500c7u, 0x00000008u, 0x000031ccu, 0x00002c2fu, 0x00000215u, 0x000500abu, 0x0000005du, 0x000031cdu, 0x000031ccu, 0x00000203u, 0x000300f7u, 0x000031ceu, 0x00000000u, 0x000400fau, 0x000031cdu, 0x000031cfu, 0x000031ceu, 0x000200f8u, 0x000031cfu, 0x000500c7u, 0x00000008u, 0x000031d2u, 0x00002dabu, 0x000031c9u, 0x00050082u, 0x00000008u, 0x000031d3u, 0x000031d2u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000031d4u, 0x00000001u, 0x0000002au, 0x000031d3u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000031d6u, 0x00002dabu, 0x000031d4u, 0x0003003eu, 0x00002c45u, 0x000031d6u, 0x000200f9u, 0x000031ceu, 0x000200f8u, 0x000031ceu, 0x000700f5u, 0x00000008u, 0x00007eccu, 0x00002dabu, 0x000031c6u, 0x000031d6u, 0x000031cfu, 0x00050082u, 0x00000008u, 0x000031d8u, 0x000031c9u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031dau, 0x00007eccu, 0x000031d8u, 0x0003003eu, 0x00002c45u, 0x000031dau, 0x000200f9u, 0x000031c5u, 0x000200f8u, 0x000031c5u, 0x000700f5u, 0x00000008u, 0x00007ecdu, 0x00002dabu, 0x000031a9u, 0x000031dau, 0x000031ceu, 0x0003003eu, 0x000031c1u, 0x00007ecdu, 0x0003003eu, 0x00002c43u, 0x00007ecdu, 0x0004003du, 0x00000008u, 0x00002dafu, 0x00002d8eu, 0x00050080u, 0x00000008u, 0x00002db0u, 0x00002dafu, 0x00000212u, 0x0003003eu, 0x00006adbu, 0x00002c25u, 0x0003003eu, 0x00006adcu, 0x00002c2fu, 0x0003003eu, 0x00002c48u, 0x00002db0u, 0x000300f7u, 0x000031e1u, 0x00000000u, 0x000400fau, 0x000031a8u, 0x000031e2u, 0x000031e1u, 0x000200f8u, 0x000031e2u, 0x000500c4u, 0x00000008u, 0x000031e5u, 0x00000212u, 0x00002c25u, 0x0003003eu, 0x000031dcu, 0x000031e5u, 0x000500c7u, 0x00000008u, 0x000031e8u, 0x00002c2fu, 0x0000025eu, 0x000500abu, 0x0000005du, 0x000031e9u, 0x000031e8u, 0x00000203u, 0x000300f7u, 0x000031eau, 0x00000000u, 0x000400fau, 0x000031e9u, 0x000031ebu, 0x000031eau, 0x000200f8u, 0x000031ebu, 0x000500c7u, 0x00000008u, 0x000031eeu, 0x00002db0u, 0x000031e5u, 0x00050082u, 0x00000008u, 0x000031efu, 0x000031eeu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x000031f0u, 0x00000001u, 0x0000002au, 0x000031efu, 0x00000203u, 0x000500c6u, 0x00000008u, 0x000031f2u, 0x00002db0u, 0x000031f0u, 0x0003003eu, 0x00002c48u, 0x000031f2u, 0x000200f9u, 0x000031eau, 0x000200f8u, 0x000031eau, 0x000700f5u, 0x00000008u, 0x00007eebu, 0x00002db0u, 0x000031e2u, 0x000031f2u, 0x000031ebu, 0x00050082u, 0x00000008u, 0x000031f4u, 0x000031e5u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x000031f6u, 0x00007eebu, 0x000031f4u, 0x0003003eu, 0x00002c48u, 0x000031f6u, 0x000200f9u, 0x000031e1u, 0x000200f8u, 0x000031e1u, 0x000700f5u, 0x00000008u, 0x00007eecu, 0x00002db0u, 0x000031c5u, 0x000031f6u, 0x000031eau, 0x0003003eu, 0x000031ddu, 0x00007eecu, 0x0003003eu, 0x00002c46u, 0x00007eecu, 0x00050082u, 0x00000008u, 0x00002db5u, 0x00007eecu, 0x00007eaeu, 0x0007000cu, 0x00000008u, 0x00002db6u, 0x00000001u, 0x0000002au, 0x00002db5u, 0x00001365u, 0x0003003eu, 0x00002c49u, 0x00002db6u, 0x000500c7u, 0x00000008u, 0x00002db8u, 0x00007eaeu, 0x0000038bu, 0x00050080u, 0x00000008u, 0x00002dbau, 0x00002db8u, 0x00002db6u, 0x0003003eu, 0x00002c46u, 0x00002dbau, 0x0003003eu, 0x00002c40u, 0x00002db8u, 0x0004003du, 0x0000005fu, 0x00002dbeu, 0x00002c3bu, 0x000500aau, 0x00000879u, 0x00002dbfu, 0x00002dbeu, 0x0000136fu, 0x00050051u, 0x0000005du, 0x00002dc0u, 0x00002dbfu, 0x00000000u, 0x00050051u, 0x0000005du, 0x00002dc1u, 0x00002dbfu, 0x00000001u, 0x00060050u, 0x000003a1u, 0x00002dc2u, 0x00002139u, 0x00002dc0u, 0x00002dc1u, 0x0004009bu, 0x0000005du, 0x00002dc3u, 0x00002dc2u, 0x0003003eu, 0x0000206eu, 0x00002dc3u, 0x000300f7u, 0x00002dc5u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002dc6u, 0x00002dc5u, 0x000200f8u, 0x00002dc6u, 0x0003003eu, 0x00002c3cu, 0x00000203u, 0x000200f9u, 0x00002dc5u, 0x000200f8u, 0x00002dc5u, 0x000600a9u, 0x00000008u, 0x0000ef07u, 0x00002dc3u, 0x00000203u, 0x00002d9du, 0x000500aau, 0x0000005du, 0x00002dc9u, 0x00002c0cu, 0x00000212u, 0x0003003eu, 0x00002c4au, 0x00002dc9u, 0x000500afu, 0x0000005du, 0x00002dcbu, 0x0000ef07u, 0x0000037du, 0x000300f7u, 0x00002dccu, 0x00000000u, 0x000400fau, 0x00002dcbu, 0x00002dcdu, 0x00002dceu, 0x000200f8u, 0x00002dceu, 0x00050050u, 0x0000005fu, 0x00002dd4u, 0x00007e8fu, 0x00002db8u, 0x0003003eu, 0x00002c4cu, 0x00002dd4u, 0x000200f9u, 0x00002dccu, 0x000200f8u, 0x00002dcdu, 0x00050050u, 0x0000005fu, 0x00002dd1u, 0x00007ecdu, 0x00002dbau, 0x0003003eu, 0x00002c4cu, 0x00002dd1u, 0x000200f9u, 0x00002dccu, 0x000200f8u, 0x00002dccu, 0x000700f5u, 0x0000005fu, 0x00007f18u, 0x00002dd1u, 0x00002dcdu, 0x00002dd4u, 0x00002dceu, 0x0003003eu, 0x00002c4bu, 0x00007f18u, 0x000300f7u, 0x00002dd7u, 0x00000000u, 0x000400fau, 0x00002109u, 0x00002dd8u, 0x00002dd9u, 0x000200f8u, 0x00002dd9u, 0x000300f7u, 0x00002e78u, 0x00000000u, 0x000d00fbu, 0x00002c0cu, 0x00002e78u, 0x00000000u, 0x00002e79u, 0x00000001u, 0x00002e7au, 0x00000002u, 0x00002e7bu, 0x00000003u, 0x00002e7cu, 0x00000004u, 0x00002e7du, 0x000200f8u, 0x00002e7du, 0x000300f7u, 0x0000302du, 0x00000000u, 0x000700fbu, 0x00002c11u, 0x0000302eu, 0x00000000u, 0x0000302fu, 0x00000001u, 0x00003030u, 0x000200f8u, 0x00003030u, 0x0004007cu, 0x000000a2u, 0x00003072u, 0x00007f18u, 0x0003003eu, 0x00006bdfu, 0x00002c04u, 0x0003003eu, 0x00006be0u, 0x00002c07u, 0x0003003eu, 0x00002d46u, 0x000020f8u, 0x0003003eu, 0x00002d47u, 0x00003072u, 0x00050041u, 0x00000007u, 0x00004214u, 0x00002d47u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004215u, 0x00004214u, 0x00050084u, 0x00000006u, 0x00004216u, 0x00002c07u, 0x00004215u, 0x00050080u, 0x00000006u, 0x00004217u, 0x00002c04u, 0x00004216u, 0x0003003eu, 0x0000420cu, 0x00004217u, 0x00050041u, 0x00000007u, 0x00004218u, 0x00002d47u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004219u, 0x00004218u, 0x00050080u, 0x00000006u, 0x0000421bu, 0x00004217u, 0x00004219u, 0x0003003eu, 0x0000420cu, 0x0000421bu, 0x000500c7u, 0x00000006u, 0x0000421du, 0x0000421bu, 0x00000e59u, 0x0003003eu, 0x0000420cu, 0x0000421du, 0x0003003eu, 0x0000420du, 0x0000421du, 0x0004003du, 0x00000006u, 0x00004220u, 0x00004214u, 0x000500c7u, 0x00000006u, 0x00004221u, 0x00004220u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004222u, 0x00004221u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004224u, 0x0000421du, 0x00004222u, 0x0003003eu, 0x0000420du, 0x00004224u, 0x000500c6u, 0x00000006u, 0x00004226u, 0x00004224u, 0x0000048bu, 0x0003003eu, 0x0000420du, 0x00004226u, 0x00080041u, 0x00000277u, 0x00004229u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004226u, 0x0004003du, 0x00000229u, 0x0000422au, 0x00004229u, 0x00040071u, 0x00000006u, 0x0000422bu, 0x0000422au, 0x0003003eu, 0x0000420eu, 0x0000422bu, 0x0004007cu, 0x00000008u, 0x0000422du, 0x0000422bu, 0x00070050u, 0x00000009u, 0x0000422eu, 0x0000422du, 0x0000422du, 0x0000422du, 0x0000422du, 0x0003003eu, 0x0000420fu, 0x0000422eu, 0x0003003eu, 0x00002c4fu, 0x0000422eu, 0x000300f7u, 0x00003077u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00003078u, 0x00003077u, 0x000200f8u, 0x00003078u, 0x00050050u, 0x0000005fu, 0x0000307bu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x0000307cu, 0x0000307bu, 0x0003003eu, 0x00006be3u, 0x00002c04u, 0x0003003eu, 0x00006be4u, 0x00002c07u, 0x0003003eu, 0x00002d49u, 0x000020f8u, 0x0003003eu, 0x00002d4au, 0x0000307cu, 0x00050041u, 0x00000007u, 0x00004237u, 0x00002d4au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004238u, 0x00004237u, 0x00050084u, 0x00000006u, 0x00004239u, 0x00002c07u, 0x00004238u, 0x00050080u, 0x00000006u, 0x0000423au, 0x00002c04u, 0x00004239u, 0x0003003eu, 0x0000422fu, 0x0000423au, 0x00050041u, 0x00000007u, 0x0000423bu, 0x00002d4au, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000423cu, 0x0000423bu, 0x00050080u, 0x00000006u, 0x0000423eu, 0x0000423au, 0x0000423cu, 0x0003003eu, 0x0000422fu, 0x0000423eu, 0x000500c7u, 0x00000006u, 0x00004240u, 0x0000423eu, 0x00000e59u, 0x0003003eu, 0x0000422fu, 0x00004240u, 0x0003003eu, 0x00004230u, 0x00004240u, 0x0004003du, 0x00000006u, 0x00004243u, 0x00004237u, 0x000500c7u, 0x00000006u, 0x00004244u, 0x00004243u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004245u, 0x00004244u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004247u, 0x00004240u, 0x00004245u, 0x0003003eu, 0x00004230u, 0x00004247u, 0x000500c6u, 0x00000006u, 0x00004249u, 0x00004247u, 0x0000048bu, 0x0003003eu, 0x00004230u, 0x00004249u, 0x00080041u, 0x00000277u, 0x0000424cu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004249u, 0x0004003du, 0x00000229u, 0x0000424du, 0x0000424cu, 0x00040071u, 0x00000006u, 0x0000424eu, 0x0000424du, 0x0003003eu, 0x00004231u, 0x0000424eu, 0x0004007cu, 0x00000008u, 0x00004250u, 0x0000424eu, 0x00070050u, 0x00000009u, 0x00004251u, 0x00004250u, 0x00004250u, 0x00004250u, 0x00004250u, 0x0003003eu, 0x00004232u, 0x00004251u, 0x0003003eu, 0x00002c57u, 0x00004251u, 0x00050050u, 0x0000005fu, 0x00003082u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00003083u, 0x00003082u, 0x0003003eu, 0x00006be7u, 0x00002c04u, 0x0003003eu, 0x00006be8u, 0x00002c07u, 0x0003003eu, 0x00002d4cu, 0x000020f8u, 0x0003003eu, 0x00002d4du, 0x00003083u, 0x00050041u, 0x00000007u, 0x0000425au, 0x00002d4du, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000425bu, 0x0000425au, 0x00050084u, 0x00000006u, 0x0000425cu, 0x00002c07u, 0x0000425bu, 0x00050080u, 0x00000006u, 0x0000425du, 0x00002c04u, 0x0000425cu, 0x0003003eu, 0x00004252u, 0x0000425du, 0x00050041u, 0x00000007u, 0x0000425eu, 0x00002d4du, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000425fu, 0x0000425eu, 0x00050080u, 0x00000006u, 0x00004261u, 0x0000425du, 0x0000425fu, 0x0003003eu, 0x00004252u, 0x00004261u, 0x000500c7u, 0x00000006u, 0x00004263u, 0x00004261u, 0x00000e59u, 0x0003003eu, 0x00004252u, 0x00004263u, 0x0003003eu, 0x00004253u, 0x00004263u, 0x0004003du, 0x00000006u, 0x00004266u, 0x0000425au, 0x000500c7u, 0x00000006u, 0x00004267u, 0x00004266u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004268u, 0x00004267u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000426au, 0x00004263u, 0x00004268u, 0x0003003eu, 0x00004253u, 0x0000426au, 0x000500c6u, 0x00000006u, 0x0000426cu, 0x0000426au, 0x0000048bu, 0x0003003eu, 0x00004253u, 0x0000426cu, 0x00080041u, 0x00000277u, 0x0000426fu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000426cu, 0x0004003du, 0x00000229u, 0x00004270u, 0x0000426fu, 0x00040071u, 0x00000006u, 0x00004271u, 0x00004270u, 0x0003003eu, 0x00004254u, 0x00004271u, 0x0004007cu, 0x00000008u, 0x00004273u, 0x00004271u, 0x00070050u, 0x00000009u, 0x00004274u, 0x00004273u, 0x00004273u, 0x00004273u, 0x00004273u, 0x0003003eu, 0x00004255u, 0x00004274u, 0x0003003eu, 0x00002c5fu, 0x00004274u, 0x000200f9u, 0x00003077u, 0x000200f8u, 0x00003077u, 0x000700f5u, 0x00000009u, 0x000083fcu, 0x0000839eu, 0x00003030u, 0x00004274u, 0x00003078u, 0x000700f5u, 0x00000009u, 0x00008304u, 0x000082a2u, 0x00003030u, 0x00004251u, 0x00003078u, 0x000300f7u, 0x00003088u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00003089u, 0x00003088u, 0x000200f8u, 0x00003089u, 0x00050050u, 0x0000005fu, 0x0000308cu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x0000308du, 0x0000308cu, 0x0003003eu, 0x00006bebu, 0x00002c04u, 0x0003003eu, 0x00006becu, 0x00002c07u, 0x0003003eu, 0x00002d4fu, 0x000020f8u, 0x0003003eu, 0x00002d50u, 0x0000308du, 0x00050041u, 0x00000007u, 0x0000427du, 0x00002d50u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000427eu, 0x0000427du, 0x00050084u, 0x00000006u, 0x0000427fu, 0x00002c07u, 0x0000427eu, 0x00050080u, 0x00000006u, 0x00004280u, 0x00002c04u, 0x0000427fu, 0x0003003eu, 0x00004275u, 0x00004280u, 0x00050041u, 0x00000007u, 0x00004281u, 0x00002d50u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004282u, 0x00004281u, 0x00050080u, 0x00000006u, 0x00004284u, 0x00004280u, 0x00004282u, 0x0003003eu, 0x00004275u, 0x00004284u, 0x000500c7u, 0x00000006u, 0x00004286u, 0x00004284u, 0x00000e59u, 0x0003003eu, 0x00004275u, 0x00004286u, 0x0003003eu, 0x00004276u, 0x00004286u, 0x0004003du, 0x00000006u, 0x00004289u, 0x0000427du, 0x000500c7u, 0x00000006u, 0x0000428au, 0x00004289u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000428bu, 0x0000428au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000428du, 0x00004286u, 0x0000428bu, 0x0003003eu, 0x00004276u, 0x0000428du, 0x000500c6u, 0x00000006u, 0x0000428fu, 0x0000428du, 0x0000048bu, 0x0003003eu, 0x00004276u, 0x0000428fu, 0x00080041u, 0x00000277u, 0x00004292u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000428fu, 0x0004003du, 0x00000229u, 0x00004293u, 0x00004292u, 0x00040071u, 0x00000006u, 0x00004294u, 0x00004293u, 0x0003003eu, 0x00004277u, 0x00004294u, 0x0004007cu, 0x00000008u, 0x00004296u, 0x00004294u, 0x00070050u, 0x00000009u, 0x00004297u, 0x00004296u, 0x00004296u, 0x00004296u, 0x00004296u, 0x0003003eu, 0x00004278u, 0x00004297u, 0x0003003eu, 0x00002c67u, 0x00004297u, 0x000200f9u, 0x00003088u, 0x000200f8u, 0x00003088u, 0x000700f5u, 0x00000009u, 0x00008478u, 0x00008418u, 0x00003077u, 0x00004297u, 0x00003089u, 0x000200f9u, 0x0000302du, 0x000200f8u, 0x0000302fu, 0x0004007cu, 0x000000a2u, 0x00003052u, 0x00007f18u, 0x0003003eu, 0x00006bcfu, 0x00002c04u, 0x0003003eu, 0x00006bd0u, 0x00002c07u, 0x0003003eu, 0x00002d3au, 0x000020f8u, 0x0003003eu, 0x00002d3bu, 0x00003052u, 0x00050041u, 0x00000007u, 0x0000414du, 0x00002d3bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000414eu, 0x0000414du, 0x00050084u, 0x00000006u, 0x0000414fu, 0x00002c07u, 0x0000414eu, 0x00050080u, 0x00000006u, 0x00004150u, 0x00002c04u, 0x0000414fu, 0x0003003eu, 0x00004144u, 0x00004150u, 0x00050041u, 0x00000007u, 0x00004151u, 0x00002d3bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004152u, 0x00004151u, 0x000500c2u, 0x00000006u, 0x00004153u, 0x00004152u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004155u, 0x00004150u, 0x00004153u, 0x0003003eu, 0x00004144u, 0x00004155u, 0x000500c7u, 0x00000006u, 0x00004157u, 0x00004155u, 0x00000e59u, 0x0003003eu, 0x00004144u, 0x00004157u, 0x0004003du, 0x00000006u, 0x00004159u, 0x00004151u, 0x000400c8u, 0x00000006u, 0x0000415au, 0x00004159u, 0x000500c7u, 0x00000006u, 0x0000415bu, 0x0000415au, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000415cu, 0x0000415bu, 0x00000701u, 0x0003003eu, 0x00004145u, 0x0000415cu, 0x0003003eu, 0x00004146u, 0x00004157u, 0x0004003du, 0x00000006u, 0x0000415fu, 0x0000414du, 0x000500c7u, 0x00000006u, 0x00004160u, 0x0000415fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004161u, 0x00004160u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004163u, 0x00004157u, 0x00004161u, 0x0003003eu, 0x00004146u, 0x00004163u, 0x000500c6u, 0x00000006u, 0x00004165u, 0x00004163u, 0x0000048bu, 0x0003003eu, 0x00004146u, 0x00004165u, 0x00080041u, 0x00000277u, 0x00004168u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004165u, 0x0004003du, 0x00000229u, 0x00004169u, 0x00004168u, 0x00040071u, 0x00000006u, 0x0000416au, 0x00004169u, 0x0003003eu, 0x00004147u, 0x0000416au, 0x000500c2u, 0x00000006u, 0x0000416du, 0x0000416au, 0x0000415cu, 0x000500c7u, 0x00000006u, 0x0000416eu, 0x0000416du, 0x00000e7cu, 0x0003003eu, 0x00004147u, 0x0000416eu, 0x000500c4u, 0x00000006u, 0x00004170u, 0x0000416eu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004172u, 0x0000416eu, 0x00004170u, 0x0003003eu, 0x00004147u, 0x00004172u, 0x0004007cu, 0x00000008u, 0x00004174u, 0x00004172u, 0x00070050u, 0x00000009u, 0x00004175u, 0x00004174u, 0x00004174u, 0x00004174u, 0x00004174u, 0x0003003eu, 0x00004148u, 0x00004175u, 0x0003003eu, 0x00002c4fu, 0x00004175u, 0x000300f7u, 0x00003057u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00003058u, 0x00003057u, 0x000200f8u, 0x00003058u, 0x00050050u, 0x0000005fu, 0x0000305bu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x0000305cu, 0x0000305bu, 0x0003003eu, 0x00006bd3u, 0x00002c04u, 0x0003003eu, 0x00006bd4u, 0x00002c07u, 0x0003003eu, 0x00002d3du, 0x000020f8u, 0x0003003eu, 0x00002d3eu, 0x0000305cu, 0x00050041u, 0x00000007u, 0x0000417fu, 0x00002d3eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004180u, 0x0000417fu, 0x00050084u, 0x00000006u, 0x00004181u, 0x00002c07u, 0x00004180u, 0x00050080u, 0x00000006u, 0x00004182u, 0x00002c04u, 0x00004181u, 0x0003003eu, 0x00004176u, 0x00004182u, 0x00050041u, 0x00000007u, 0x00004183u, 0x00002d3eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004184u, 0x00004183u, 0x000500c2u, 0x00000006u, 0x00004185u, 0x00004184u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004187u, 0x00004182u, 0x00004185u, 0x0003003eu, 0x00004176u, 0x00004187u, 0x000500c7u, 0x00000006u, 0x00004189u, 0x00004187u, 0x00000e59u, 0x0003003eu, 0x00004176u, 0x00004189u, 0x0004003du, 0x00000006u, 0x0000418bu, 0x00004183u, 0x000400c8u, 0x00000006u, 0x0000418cu, 0x0000418bu, 0x000500c7u, 0x00000006u, 0x0000418du, 0x0000418cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000418eu, 0x0000418du, 0x00000701u, 0x0003003eu, 0x00004177u, 0x0000418eu, 0x0003003eu, 0x00004178u, 0x00004189u, 0x0004003du, 0x00000006u, 0x00004191u, 0x0000417fu, 0x000500c7u, 0x00000006u, 0x00004192u, 0x00004191u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004193u, 0x00004192u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004195u, 0x00004189u, 0x00004193u, 0x0003003eu, 0x00004178u, 0x00004195u, 0x000500c6u, 0x00000006u, 0x00004197u, 0x00004195u, 0x0000048bu, 0x0003003eu, 0x00004178u, 0x00004197u, 0x00080041u, 0x00000277u, 0x0000419au, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004197u, 0x0004003du, 0x00000229u, 0x0000419bu, 0x0000419au, 0x00040071u, 0x00000006u, 0x0000419cu, 0x0000419bu, 0x0003003eu, 0x00004179u, 0x0000419cu, 0x000500c2u, 0x00000006u, 0x0000419fu, 0x0000419cu, 0x0000418eu, 0x000500c7u, 0x00000006u, 0x000041a0u, 0x0000419fu, 0x00000e7cu, 0x0003003eu, 0x00004179u, 0x000041a0u, 0x000500c4u, 0x00000006u, 0x000041a2u, 0x000041a0u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000041a4u, 0x000041a0u, 0x000041a2u, 0x0003003eu, 0x00004179u, 0x000041a4u, 0x0004007cu, 0x00000008u, 0x000041a6u, 0x000041a4u, 0x00070050u, 0x00000009u, 0x000041a7u, 0x000041a6u, 0x000041a6u, 0x000041a6u, 0x000041a6u, 0x0003003eu, 0x0000417au, 0x000041a7u, 0x0003003eu, 0x00002c57u, 0x000041a7u, 0x00050050u, 0x0000005fu, 0x00003062u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00003063u, 0x00003062u, 0x0003003eu, 0x00006bd7u, 0x00002c04u, 0x0003003eu, 0x00006bd8u, 0x00002c07u, 0x0003003eu, 0x00002d40u, 0x000020f8u, 0x0003003eu, 0x00002d41u, 0x00003063u, 0x00050041u, 0x00000007u, 0x000041b1u, 0x00002d41u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000041b2u, 0x000041b1u, 0x00050084u, 0x00000006u, 0x000041b3u, 0x00002c07u, 0x000041b2u, 0x00050080u, 0x00000006u, 0x000041b4u, 0x00002c04u, 0x000041b3u, 0x0003003eu, 0x000041a8u, 0x000041b4u, 0x00050041u, 0x00000007u, 0x000041b5u, 0x00002d41u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000041b6u, 0x000041b5u, 0x000500c2u, 0x00000006u, 0x000041b7u, 0x000041b6u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000041b9u, 0x000041b4u, 0x000041b7u, 0x0003003eu, 0x000041a8u, 0x000041b9u, 0x000500c7u, 0x00000006u, 0x000041bbu, 0x000041b9u, 0x00000e59u, 0x0003003eu, 0x000041a8u, 0x000041bbu, 0x0004003du, 0x00000006u, 0x000041bdu, 0x000041b5u, 0x000400c8u, 0x00000006u, 0x000041beu, 0x000041bdu, 0x000500c7u, 0x00000006u, 0x000041bfu, 0x000041beu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000041c0u, 0x000041bfu, 0x00000701u, 0x0003003eu, 0x000041a9u, 0x000041c0u, 0x0003003eu, 0x000041aau, 0x000041bbu, 0x0004003du, 0x00000006u, 0x000041c3u, 0x000041b1u, 0x000500c7u, 0x00000006u, 0x000041c4u, 0x000041c3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000041c5u, 0x000041c4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000041c7u, 0x000041bbu, 0x000041c5u, 0x0003003eu, 0x000041aau, 0x000041c7u, 0x000500c6u, 0x00000006u, 0x000041c9u, 0x000041c7u, 0x0000048bu, 0x0003003eu, 0x000041aau, 0x000041c9u, 0x00080041u, 0x00000277u, 0x000041ccu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000041c9u, 0x0004003du, 0x00000229u, 0x000041cdu, 0x000041ccu, 0x00040071u, 0x00000006u, 0x000041ceu, 0x000041cdu, 0x0003003eu, 0x000041abu, 0x000041ceu, 0x000500c2u, 0x00000006u, 0x000041d1u, 0x000041ceu, 0x000041c0u, 0x000500c7u, 0x00000006u, 0x000041d2u, 0x000041d1u, 0x00000e7cu, 0x0003003eu, 0x000041abu, 0x000041d2u, 0x000500c4u, 0x00000006u, 0x000041d4u, 0x000041d2u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000041d6u, 0x000041d2u, 0x000041d4u, 0x0003003eu, 0x000041abu, 0x000041d6u, 0x0004007cu, 0x00000008u, 0x000041d8u, 0x000041d6u, 0x00070050u, 0x00000009u, 0x000041d9u, 0x000041d8u, 0x000041d8u, 0x000041d8u, 0x000041d8u, 0x0003003eu, 0x000041acu, 0x000041d9u, 0x0003003eu, 0x00002c5fu, 0x000041d9u, 0x000200f9u, 0x00003057u, 0x000200f8u, 0x00003057u, 0x000700f5u, 0x00000009u, 0x000083fau, 0x0000839eu, 0x0000302fu, 0x000041d9u, 0x00003058u, 0x000700f5u, 0x00000009u, 0x00008302u, 0x000082a2u, 0x0000302fu, 0x000041a7u, 0x00003058u, 0x000300f7u, 0x00003068u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00003069u, 0x00003068u, 0x000200f8u, 0x00003069u, 0x00050050u, 0x0000005fu, 0x0000306cu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x0000306du, 0x0000306cu, 0x0003003eu, 0x00006bdbu, 0x00002c04u, 0x0003003eu, 0x00006bdcu, 0x00002c07u, 0x0003003eu, 0x00002d43u, 0x000020f8u, 0x0003003eu, 0x00002d44u, 0x0000306du, 0x00050041u, 0x00000007u, 0x000041e3u, 0x00002d44u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000041e4u, 0x000041e3u, 0x00050084u, 0x00000006u, 0x000041e5u, 0x00002c07u, 0x000041e4u, 0x00050080u, 0x00000006u, 0x000041e6u, 0x00002c04u, 0x000041e5u, 0x0003003eu, 0x000041dau, 0x000041e6u, 0x00050041u, 0x00000007u, 0x000041e7u, 0x00002d44u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000041e8u, 0x000041e7u, 0x000500c2u, 0x00000006u, 0x000041e9u, 0x000041e8u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000041ebu, 0x000041e6u, 0x000041e9u, 0x0003003eu, 0x000041dau, 0x000041ebu, 0x000500c7u, 0x00000006u, 0x000041edu, 0x000041ebu, 0x00000e59u, 0x0003003eu, 0x000041dau, 0x000041edu, 0x0004003du, 0x00000006u, 0x000041efu, 0x000041e7u, 0x000400c8u, 0x00000006u, 0x000041f0u, 0x000041efu, 0x000500c7u, 0x00000006u, 0x000041f1u, 0x000041f0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000041f2u, 0x000041f1u, 0x00000701u, 0x0003003eu, 0x000041dbu, 0x000041f2u, 0x0003003eu, 0x000041dcu, 0x000041edu, 0x0004003du, 0x00000006u, 0x000041f5u, 0x000041e3u, 0x000500c7u, 0x00000006u, 0x000041f6u, 0x000041f5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000041f7u, 0x000041f6u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000041f9u, 0x000041edu, 0x000041f7u, 0x0003003eu, 0x000041dcu, 0x000041f9u, 0x000500c6u, 0x00000006u, 0x000041fbu, 0x000041f9u, 0x0000048bu, 0x0003003eu, 0x000041dcu, 0x000041fbu, 0x00080041u, 0x00000277u, 0x000041feu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000041fbu, 0x0004003du, 0x00000229u, 0x000041ffu, 0x000041feu, 0x00040071u, 0x00000006u, 0x00004200u, 0x000041ffu, 0x0003003eu, 0x000041ddu, 0x00004200u, 0x000500c2u, 0x00000006u, 0x00004203u, 0x00004200u, 0x000041f2u, 0x000500c7u, 0x00000006u, 0x00004204u, 0x00004203u, 0x00000e7cu, 0x0003003eu, 0x000041ddu, 0x00004204u, 0x000500c4u, 0x00000006u, 0x00004206u, 0x00004204u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004208u, 0x00004204u, 0x00004206u, 0x0003003eu, 0x000041ddu, 0x00004208u, 0x0004007cu, 0x00000008u, 0x0000420au, 0x00004208u, 0x00070050u, 0x00000009u, 0x0000420bu, 0x0000420au, 0x0000420au, 0x0000420au, 0x0000420au, 0x0003003eu, 0x000041deu, 0x0000420bu, 0x0003003eu, 0x00002c67u, 0x0000420bu, 0x000200f9u, 0x00003068u, 0x000200f8u, 0x00003068u, 0x000700f5u, 0x00000009u, 0x00008476u, 0x00008418u, 0x00003057u, 0x0000420bu, 0x00003069u, 0x000200f9u, 0x0000302du, 0x000200f8u, 0x0000302eu, 0x0004007cu, 0x000000a2u, 0x00003032u, 0x00007f18u, 0x0003003eu, 0x00006befu, 0x00002c04u, 0x0003003eu, 0x00006bf0u, 0x00002c07u, 0x0003003eu, 0x00002d52u, 0x000020f8u, 0x0003003eu, 0x00002d53u, 0x00003032u, 0x00050041u, 0x00000007u, 0x000040a4u, 0x00002d53u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000040a5u, 0x000040a4u, 0x00050084u, 0x00000006u, 0x000040a6u, 0x00002c07u, 0x000040a5u, 0x00050080u, 0x00000006u, 0x000040a7u, 0x00002c04u, 0x000040a6u, 0x0003003eu, 0x0000409cu, 0x000040a7u, 0x00050041u, 0x00000007u, 0x000040a8u, 0x00002d53u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000040a9u, 0x000040a8u, 0x00050084u, 0x00000006u, 0x000040aau, 0x000040a9u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000040acu, 0x000040a7u, 0x000040aau, 0x0003003eu, 0x0000409cu, 0x000040acu, 0x000500c7u, 0x00000006u, 0x000040aeu, 0x000040acu, 0x00000e59u, 0x0003003eu, 0x0000409cu, 0x000040aeu, 0x000500c2u, 0x00000006u, 0x000040b0u, 0x000040aeu, 0x00000212u, 0x0003003eu, 0x0000409du, 0x000040b0u, 0x0004003du, 0x00000006u, 0x000040b2u, 0x000040a4u, 0x000500c7u, 0x00000006u, 0x000040b3u, 0x000040b2u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000040b4u, 0x000040b3u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000040b6u, 0x000040b0u, 0x000040b4u, 0x0003003eu, 0x0000409du, 0x000040b6u, 0x000500c6u, 0x00000006u, 0x000040b8u, 0x000040b6u, 0x00000485u, 0x0003003eu, 0x0000409du, 0x000040b8u, 0x00080041u, 0x00000270u, 0x000040bbu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000040b8u, 0x0004003du, 0x0000022bu, 0x000040bcu, 0x000040bbu, 0x00040071u, 0x00000006u, 0x000040bdu, 0x000040bcu, 0x0003003eu, 0x0000409eu, 0x000040bdu, 0x000500c2u, 0x00000006u, 0x000040bfu, 0x000040bdu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000040c0u, 0x000040bfu, 0x000500c7u, 0x00000006u, 0x000040c2u, 0x000040bdu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000040c3u, 0x000040c2u, 0x00050050u, 0x0000005fu, 0x000040c4u, 0x000040c0u, 0x000040c3u, 0x0009004fu, 0x00000009u, 0x000040c5u, 0x000040c4u, 0x000040c4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000409fu, 0x000040c5u, 0x0003003eu, 0x00002c4fu, 0x000040c5u, 0x000300f7u, 0x00003037u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00003038u, 0x00003037u, 0x000200f8u, 0x00003038u, 0x00050050u, 0x0000005fu, 0x0000303bu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x0000303cu, 0x0000303bu, 0x0003003eu, 0x00006bf3u, 0x00002c04u, 0x0003003eu, 0x00006bf4u, 0x00002c07u, 0x0003003eu, 0x00002d55u, 0x000020f8u, 0x0003003eu, 0x00002d56u, 0x0000303cu, 0x00050041u, 0x00000007u, 0x000040ceu, 0x00002d56u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000040cfu, 0x000040ceu, 0x00050084u, 0x00000006u, 0x000040d0u, 0x00002c07u, 0x000040cfu, 0x00050080u, 0x00000006u, 0x000040d1u, 0x00002c04u, 0x000040d0u, 0x0003003eu, 0x000040c6u, 0x000040d1u, 0x00050041u, 0x00000007u, 0x000040d2u, 0x00002d56u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000040d3u, 0x000040d2u, 0x00050084u, 0x00000006u, 0x000040d4u, 0x000040d3u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000040d6u, 0x000040d1u, 0x000040d4u, 0x0003003eu, 0x000040c6u, 0x000040d6u, 0x000500c7u, 0x00000006u, 0x000040d8u, 0x000040d6u, 0x00000e59u, 0x0003003eu, 0x000040c6u, 0x000040d8u, 0x000500c2u, 0x00000006u, 0x000040dau, 0x000040d8u, 0x00000212u, 0x0003003eu, 0x000040c7u, 0x000040dau, 0x0004003du, 0x00000006u, 0x000040dcu, 0x000040ceu, 0x000500c7u, 0x00000006u, 0x000040ddu, 0x000040dcu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000040deu, 0x000040ddu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000040e0u, 0x000040dau, 0x000040deu, 0x0003003eu, 0x000040c7u, 0x000040e0u, 0x000500c6u, 0x00000006u, 0x000040e2u, 0x000040e0u, 0x00000485u, 0x0003003eu, 0x000040c7u, 0x000040e2u, 0x00080041u, 0x00000270u, 0x000040e5u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000040e2u, 0x0004003du, 0x0000022bu, 0x000040e6u, 0x000040e5u, 0x00040071u, 0x00000006u, 0x000040e7u, 0x000040e6u, 0x0003003eu, 0x000040c8u, 0x000040e7u, 0x000500c2u, 0x00000006u, 0x000040e9u, 0x000040e7u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000040eau, 0x000040e9u, 0x000500c7u, 0x00000006u, 0x000040ecu, 0x000040e7u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000040edu, 0x000040ecu, 0x00050050u, 0x0000005fu, 0x000040eeu, 0x000040eau, 0x000040edu, 0x0009004fu, 0x00000009u, 0x000040efu, 0x000040eeu, 0x000040eeu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000040c9u, 0x000040efu, 0x0003003eu, 0x00002c57u, 0x000040efu, 0x00050050u, 0x0000005fu, 0x00003042u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00003043u, 0x00003042u, 0x0003003eu, 0x00006bf7u, 0x00002c04u, 0x0003003eu, 0x00006bf8u, 0x00002c07u, 0x0003003eu, 0x00002d58u, 0x000020f8u, 0x0003003eu, 0x00002d59u, 0x00003043u, 0x00050041u, 0x00000007u, 0x000040f8u, 0x00002d59u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000040f9u, 0x000040f8u, 0x00050084u, 0x00000006u, 0x000040fau, 0x00002c07u, 0x000040f9u, 0x00050080u, 0x00000006u, 0x000040fbu, 0x00002c04u, 0x000040fau, 0x0003003eu, 0x000040f0u, 0x000040fbu, 0x00050041u, 0x00000007u, 0x000040fcu, 0x00002d59u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000040fdu, 0x000040fcu, 0x00050084u, 0x00000006u, 0x000040feu, 0x000040fdu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004100u, 0x000040fbu, 0x000040feu, 0x0003003eu, 0x000040f0u, 0x00004100u, 0x000500c7u, 0x00000006u, 0x00004102u, 0x00004100u, 0x00000e59u, 0x0003003eu, 0x000040f0u, 0x00004102u, 0x000500c2u, 0x00000006u, 0x00004104u, 0x00004102u, 0x00000212u, 0x0003003eu, 0x000040f1u, 0x00004104u, 0x0004003du, 0x00000006u, 0x00004106u, 0x000040f8u, 0x000500c7u, 0x00000006u, 0x00004107u, 0x00004106u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004108u, 0x00004107u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000410au, 0x00004104u, 0x00004108u, 0x0003003eu, 0x000040f1u, 0x0000410au, 0x000500c6u, 0x00000006u, 0x0000410cu, 0x0000410au, 0x00000485u, 0x0003003eu, 0x000040f1u, 0x0000410cu, 0x00080041u, 0x00000270u, 0x0000410fu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000410cu, 0x0004003du, 0x0000022bu, 0x00004110u, 0x0000410fu, 0x00040071u, 0x00000006u, 0x00004111u, 0x00004110u, 0x0003003eu, 0x000040f2u, 0x00004111u, 0x000500c2u, 0x00000006u, 0x00004113u, 0x00004111u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004114u, 0x00004113u, 0x000500c7u, 0x00000006u, 0x00004116u, 0x00004111u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004117u, 0x00004116u, 0x00050050u, 0x0000005fu, 0x00004118u, 0x00004114u, 0x00004117u, 0x0009004fu, 0x00000009u, 0x00004119u, 0x00004118u, 0x00004118u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000040f3u, 0x00004119u, 0x0003003eu, 0x00002c5fu, 0x00004119u, 0x000200f9u, 0x00003037u, 0x000200f8u, 0x00003037u, 0x000700f5u, 0x00000009u, 0x000083f8u, 0x0000839eu, 0x0000302eu, 0x00004119u, 0x00003038u, 0x000700f5u, 0x00000009u, 0x00008300u, 0x000082a2u, 0x0000302eu, 0x000040efu, 0x00003038u, 0x000300f7u, 0x00003048u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00003049u, 0x00003048u, 0x000200f8u, 0x00003049u, 0x00050050u, 0x0000005fu, 0x0000304cu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x0000304du, 0x0000304cu, 0x0003003eu, 0x00006bfbu, 0x00002c04u, 0x0003003eu, 0x00006bfcu, 0x00002c07u, 0x0003003eu, 0x00002d5bu, 0x000020f8u, 0x0003003eu, 0x00002d5cu, 0x0000304du, 0x00050041u, 0x00000007u, 0x00004122u, 0x00002d5cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004123u, 0x00004122u, 0x00050084u, 0x00000006u, 0x00004124u, 0x00002c07u, 0x00004123u, 0x00050080u, 0x00000006u, 0x00004125u, 0x00002c04u, 0x00004124u, 0x0003003eu, 0x0000411au, 0x00004125u, 0x00050041u, 0x00000007u, 0x00004126u, 0x00002d5cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004127u, 0x00004126u, 0x00050084u, 0x00000006u, 0x00004128u, 0x00004127u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000412au, 0x00004125u, 0x00004128u, 0x0003003eu, 0x0000411au, 0x0000412au, 0x000500c7u, 0x00000006u, 0x0000412cu, 0x0000412au, 0x00000e59u, 0x0003003eu, 0x0000411au, 0x0000412cu, 0x000500c2u, 0x00000006u, 0x0000412eu, 0x0000412cu, 0x00000212u, 0x0003003eu, 0x0000411bu, 0x0000412eu, 0x0004003du, 0x00000006u, 0x00004130u, 0x00004122u, 0x000500c7u, 0x00000006u, 0x00004131u, 0x00004130u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004132u, 0x00004131u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004134u, 0x0000412eu, 0x00004132u, 0x0003003eu, 0x0000411bu, 0x00004134u, 0x000500c6u, 0x00000006u, 0x00004136u, 0x00004134u, 0x00000485u, 0x0003003eu, 0x0000411bu, 0x00004136u, 0x00080041u, 0x00000270u, 0x00004139u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004136u, 0x0004003du, 0x0000022bu, 0x0000413au, 0x00004139u, 0x00040071u, 0x00000006u, 0x0000413bu, 0x0000413au, 0x0003003eu, 0x0000411cu, 0x0000413bu, 0x000500c2u, 0x00000006u, 0x0000413du, 0x0000413bu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000413eu, 0x0000413du, 0x000500c7u, 0x00000006u, 0x00004140u, 0x0000413bu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004141u, 0x00004140u, 0x00050050u, 0x0000005fu, 0x00004142u, 0x0000413eu, 0x00004141u, 0x0009004fu, 0x00000009u, 0x00004143u, 0x00004142u, 0x00004142u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000411du, 0x00004143u, 0x0003003eu, 0x00002c67u, 0x00004143u, 0x000200f9u, 0x00003048u, 0x000200f8u, 0x00003048u, 0x000700f5u, 0x00000009u, 0x00008474u, 0x00008418u, 0x00003037u, 0x00004143u, 0x00003049u, 0x000200f9u, 0x0000302du, 0x000200f8u, 0x0000302du, 0x000900f5u, 0x00000009u, 0x00008473u, 0x00008474u, 0x00003048u, 0x00008476u, 0x00003068u, 0x00008478u, 0x00003088u, 0x000900f5u, 0x00000009u, 0x000083f6u, 0x000083f8u, 0x00003048u, 0x000083fau, 0x00003068u, 0x000083fcu, 0x00003088u, 0x000900f5u, 0x00000009u, 0x0000837bu, 0x000040c5u, 0x00003048u, 0x00004175u, 0x00003068u, 0x0000422eu, 0x00003088u, 0x000900f5u, 0x00000009u, 0x000082feu, 0x00008300u, 0x00003048u, 0x00008302u, 0x00003068u, 0x00008304u, 0x00003088u, 0x000200f9u, 0x00002e78u, 0x000200f8u, 0x00002e7cu, 0x000300f7u, 0x00002fa6u, 0x00000000u, 0x000b00fbu, 0x00002c11u, 0x00002fa6u, 0x00000000u, 0x00002fa7u, 0x00000001u, 0x00002fa8u, 0x00000002u, 0x00002fa9u, 0x00000003u, 0x00002faau, 0x000200f8u, 0x00002faau, 0x0004007cu, 0x000000a2u, 0x0000300cu, 0x00007f18u, 0x0003003eu, 0x00006bbfu, 0x00002c04u, 0x0003003eu, 0x00006bc0u, 0x00002c07u, 0x0003003eu, 0x00002d2eu, 0x000020f8u, 0x0003003eu, 0x00002d2fu, 0x0000300cu, 0x00050041u, 0x00000007u, 0x00003ffcu, 0x00002d2fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003ffdu, 0x00003ffcu, 0x00050084u, 0x00000006u, 0x00003ffeu, 0x00002c07u, 0x00003ffdu, 0x00050080u, 0x00000006u, 0x00003fffu, 0x00002c04u, 0x00003ffeu, 0x0003003eu, 0x00003ff4u, 0x00003fffu, 0x00050041u, 0x00000007u, 0x00004000u, 0x00002d2fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004001u, 0x00004000u, 0x00050084u, 0x00000006u, 0x00004002u, 0x00004001u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004004u, 0x00003fffu, 0x00004002u, 0x0003003eu, 0x00003ff4u, 0x00004004u, 0x000500c7u, 0x00000006u, 0x00004006u, 0x00004004u, 0x00000e59u, 0x0003003eu, 0x00003ff4u, 0x00004006u, 0x000500c2u, 0x00000006u, 0x00004008u, 0x00004006u, 0x00000212u, 0x0003003eu, 0x00003ff5u, 0x00004008u, 0x0004003du, 0x00000006u, 0x0000400au, 0x00003ffcu, 0x000500c7u, 0x00000006u, 0x0000400bu, 0x0000400au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000400cu, 0x0000400bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000400eu, 0x00004008u, 0x0000400cu, 0x0003003eu, 0x00003ff5u, 0x0000400eu, 0x000500c6u, 0x00000006u, 0x00004010u, 0x0000400eu, 0x00000485u, 0x0003003eu, 0x00003ff5u, 0x00004010u, 0x00080041u, 0x00000270u, 0x00004013u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004010u, 0x0004003du, 0x0000022bu, 0x00004014u, 0x00004013u, 0x00040071u, 0x00000006u, 0x00004015u, 0x00004014u, 0x0003003eu, 0x00003ff6u, 0x00004015u, 0x000500c2u, 0x00000006u, 0x00004017u, 0x00004015u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004018u, 0x00004017u, 0x000500c7u, 0x00000006u, 0x0000401au, 0x00004015u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000401bu, 0x0000401au, 0x00050050u, 0x0000005fu, 0x0000401cu, 0x00004018u, 0x0000401bu, 0x0009004fu, 0x00000009u, 0x0000401du, 0x0000401cu, 0x0000401cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003ff7u, 0x0000401du, 0x0003003eu, 0x00002c4fu, 0x0000401du, 0x000300f7u, 0x00003011u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00003012u, 0x00003011u, 0x000200f8u, 0x00003012u, 0x00050050u, 0x0000005fu, 0x00003015u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00003016u, 0x00003015u, 0x0003003eu, 0x00006bc3u, 0x00002c04u, 0x0003003eu, 0x00006bc4u, 0x00002c07u, 0x0003003eu, 0x00002d31u, 0x000020f8u, 0x0003003eu, 0x00002d32u, 0x00003016u, 0x00050041u, 0x00000007u, 0x00004026u, 0x00002d32u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004027u, 0x00004026u, 0x00050084u, 0x00000006u, 0x00004028u, 0x00002c07u, 0x00004027u, 0x00050080u, 0x00000006u, 0x00004029u, 0x00002c04u, 0x00004028u, 0x0003003eu, 0x0000401eu, 0x00004029u, 0x00050041u, 0x00000007u, 0x0000402au, 0x00002d32u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000402bu, 0x0000402au, 0x00050084u, 0x00000006u, 0x0000402cu, 0x0000402bu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000402eu, 0x00004029u, 0x0000402cu, 0x0003003eu, 0x0000401eu, 0x0000402eu, 0x000500c7u, 0x00000006u, 0x00004030u, 0x0000402eu, 0x00000e59u, 0x0003003eu, 0x0000401eu, 0x00004030u, 0x000500c2u, 0x00000006u, 0x00004032u, 0x00004030u, 0x00000212u, 0x0003003eu, 0x0000401fu, 0x00004032u, 0x0004003du, 0x00000006u, 0x00004034u, 0x00004026u, 0x000500c7u, 0x00000006u, 0x00004035u, 0x00004034u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004036u, 0x00004035u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004038u, 0x00004032u, 0x00004036u, 0x0003003eu, 0x0000401fu, 0x00004038u, 0x000500c6u, 0x00000006u, 0x0000403au, 0x00004038u, 0x00000485u, 0x0003003eu, 0x0000401fu, 0x0000403au, 0x00080041u, 0x00000270u, 0x0000403du, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000403au, 0x0004003du, 0x0000022bu, 0x0000403eu, 0x0000403du, 0x00040071u, 0x00000006u, 0x0000403fu, 0x0000403eu, 0x0003003eu, 0x00004020u, 0x0000403fu, 0x000500c2u, 0x00000006u, 0x00004041u, 0x0000403fu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004042u, 0x00004041u, 0x000500c7u, 0x00000006u, 0x00004044u, 0x0000403fu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004045u, 0x00004044u, 0x00050050u, 0x0000005fu, 0x00004046u, 0x00004042u, 0x00004045u, 0x0009004fu, 0x00000009u, 0x00004047u, 0x00004046u, 0x00004046u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004021u, 0x00004047u, 0x0003003eu, 0x00002c57u, 0x00004047u, 0x00050050u, 0x0000005fu, 0x0000301cu, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x0000301du, 0x0000301cu, 0x0003003eu, 0x00006bc7u, 0x00002c04u, 0x0003003eu, 0x00006bc8u, 0x00002c07u, 0x0003003eu, 0x00002d34u, 0x000020f8u, 0x0003003eu, 0x00002d35u, 0x0000301du, 0x00050041u, 0x00000007u, 0x00004050u, 0x00002d35u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004051u, 0x00004050u, 0x00050084u, 0x00000006u, 0x00004052u, 0x00002c07u, 0x00004051u, 0x00050080u, 0x00000006u, 0x00004053u, 0x00002c04u, 0x00004052u, 0x0003003eu, 0x00004048u, 0x00004053u, 0x00050041u, 0x00000007u, 0x00004054u, 0x00002d35u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004055u, 0x00004054u, 0x00050084u, 0x00000006u, 0x00004056u, 0x00004055u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004058u, 0x00004053u, 0x00004056u, 0x0003003eu, 0x00004048u, 0x00004058u, 0x000500c7u, 0x00000006u, 0x0000405au, 0x00004058u, 0x00000e59u, 0x0003003eu, 0x00004048u, 0x0000405au, 0x000500c2u, 0x00000006u, 0x0000405cu, 0x0000405au, 0x00000212u, 0x0003003eu, 0x00004049u, 0x0000405cu, 0x0004003du, 0x00000006u, 0x0000405eu, 0x00004050u, 0x000500c7u, 0x00000006u, 0x0000405fu, 0x0000405eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004060u, 0x0000405fu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004062u, 0x0000405cu, 0x00004060u, 0x0003003eu, 0x00004049u, 0x00004062u, 0x000500c6u, 0x00000006u, 0x00004064u, 0x00004062u, 0x00000485u, 0x0003003eu, 0x00004049u, 0x00004064u, 0x00080041u, 0x00000270u, 0x00004067u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004064u, 0x0004003du, 0x0000022bu, 0x00004068u, 0x00004067u, 0x00040071u, 0x00000006u, 0x00004069u, 0x00004068u, 0x0003003eu, 0x0000404au, 0x00004069u, 0x000500c2u, 0x00000006u, 0x0000406bu, 0x00004069u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000406cu, 0x0000406bu, 0x000500c7u, 0x00000006u, 0x0000406eu, 0x00004069u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000406fu, 0x0000406eu, 0x00050050u, 0x0000005fu, 0x00004070u, 0x0000406cu, 0x0000406fu, 0x0009004fu, 0x00000009u, 0x00004071u, 0x00004070u, 0x00004070u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000404bu, 0x00004071u, 0x0003003eu, 0x00002c5fu, 0x00004071u, 0x000200f9u, 0x00003011u, 0x000200f8u, 0x00003011u, 0x000700f5u, 0x00000009u, 0x000083f5u, 0x0000839eu, 0x00002faau, 0x00004071u, 0x00003012u, 0x000700f5u, 0x00000009u, 0x000082fdu, 0x000082a2u, 0x00002faau, 0x00004047u, 0x00003012u, 0x000300f7u, 0x00003022u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00003023u, 0x00003022u, 0x000200f8u, 0x00003023u, 0x00050050u, 0x0000005fu, 0x00003026u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00003027u, 0x00003026u, 0x0003003eu, 0x00006bcbu, 0x00002c04u, 0x0003003eu, 0x00006bccu, 0x00002c07u, 0x0003003eu, 0x00002d37u, 0x000020f8u, 0x0003003eu, 0x00002d38u, 0x00003027u, 0x00050041u, 0x00000007u, 0x0000407au, 0x00002d38u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000407bu, 0x0000407au, 0x00050084u, 0x00000006u, 0x0000407cu, 0x00002c07u, 0x0000407bu, 0x00050080u, 0x00000006u, 0x0000407du, 0x00002c04u, 0x0000407cu, 0x0003003eu, 0x00004072u, 0x0000407du, 0x00050041u, 0x00000007u, 0x0000407eu, 0x00002d38u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000407fu, 0x0000407eu, 0x00050084u, 0x00000006u, 0x00004080u, 0x0000407fu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004082u, 0x0000407du, 0x00004080u, 0x0003003eu, 0x00004072u, 0x00004082u, 0x000500c7u, 0x00000006u, 0x00004084u, 0x00004082u, 0x00000e59u, 0x0003003eu, 0x00004072u, 0x00004084u, 0x000500c2u, 0x00000006u, 0x00004086u, 0x00004084u, 0x00000212u, 0x0003003eu, 0x00004073u, 0x00004086u, 0x0004003du, 0x00000006u, 0x00004088u, 0x0000407au, 0x000500c7u, 0x00000006u, 0x00004089u, 0x00004088u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000408au, 0x00004089u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000408cu, 0x00004086u, 0x0000408au, 0x0003003eu, 0x00004073u, 0x0000408cu, 0x000500c6u, 0x00000006u, 0x0000408eu, 0x0000408cu, 0x00000485u, 0x0003003eu, 0x00004073u, 0x0000408eu, 0x00080041u, 0x00000270u, 0x00004091u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000408eu, 0x0004003du, 0x0000022bu, 0x00004092u, 0x00004091u, 0x00040071u, 0x00000006u, 0x00004093u, 0x00004092u, 0x0003003eu, 0x00004074u, 0x00004093u, 0x000500c2u, 0x00000006u, 0x00004095u, 0x00004093u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00004096u, 0x00004095u, 0x000500c7u, 0x00000006u, 0x00004098u, 0x00004093u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00004099u, 0x00004098u, 0x00050050u, 0x0000005fu, 0x0000409au, 0x00004096u, 0x00004099u, 0x0009004fu, 0x00000009u, 0x0000409bu, 0x0000409au, 0x0000409au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004075u, 0x0000409bu, 0x0003003eu, 0x00002c67u, 0x0000409bu, 0x000200f9u, 0x00003022u, 0x000200f8u, 0x00003022u, 0x000700f5u, 0x00000009u, 0x00008471u, 0x00008418u, 0x00003011u, 0x0000409bu, 0x00003023u, 0x000200f9u, 0x00002fa6u, 0x000200f8u, 0x00002fa9u, 0x0004007cu, 0x000000a2u, 0x00002fecu, 0x00007f18u, 0x0003003eu, 0x00006bafu, 0x00002c04u, 0x0003003eu, 0x00006bb0u, 0x00002c07u, 0x0003003eu, 0x00002d22u, 0x000020f8u, 0x0003003eu, 0x00002d23u, 0x00002fecu, 0x00050041u, 0x00000007u, 0x00003f29u, 0x00002d23u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003f2au, 0x00003f29u, 0x00050084u, 0x00000006u, 0x00003f2bu, 0x00002c07u, 0x00003f2au, 0x00050080u, 0x00000006u, 0x00003f2cu, 0x00002c04u, 0x00003f2bu, 0x0003003eu, 0x00003f20u, 0x00003f2cu, 0x00050041u, 0x00000007u, 0x00003f2du, 0x00002d23u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003f2eu, 0x00003f2du, 0x00050084u, 0x00000006u, 0x00003f2fu, 0x00003f2eu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003f31u, 0x00003f2cu, 0x00003f2fu, 0x0003003eu, 0x00003f20u, 0x00003f31u, 0x000500c7u, 0x00000006u, 0x00003f33u, 0x00003f31u, 0x00000e59u, 0x0003003eu, 0x00003f20u, 0x00003f33u, 0x000500c2u, 0x00000006u, 0x00003f35u, 0x00003f33u, 0x00000212u, 0x0003003eu, 0x00003f21u, 0x00003f35u, 0x0004003du, 0x00000006u, 0x00003f37u, 0x00003f29u, 0x000500c7u, 0x00000006u, 0x00003f38u, 0x00003f37u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003f39u, 0x00003f38u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003f3bu, 0x00003f35u, 0x00003f39u, 0x0003003eu, 0x00003f21u, 0x00003f3bu, 0x000500c6u, 0x00000006u, 0x00003f3du, 0x00003f3bu, 0x00000485u, 0x0003003eu, 0x00003f21u, 0x00003f3du, 0x00080041u, 0x00000270u, 0x00003f40u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003f3du, 0x0004003du, 0x0000022bu, 0x00003f41u, 0x00003f40u, 0x00040071u, 0x00000006u, 0x00003f42u, 0x00003f41u, 0x0003003eu, 0x00003f22u, 0x00003f42u, 0x0003003eu, 0x00003f23u, 0x00003f42u, 0x000500c2u, 0x00000006u, 0x00003f49u, 0x00003f42u, 0x0000025eu, 0x0003003eu, 0x00003f45u, 0x00003f49u, 0x000500c7u, 0x00000006u, 0x00003f4bu, 0x00003f42u, 0x000006c2u, 0x0003003eu, 0x00003f46u, 0x00003f4bu, 0x0004007cu, 0x00000008u, 0x00003f4du, 0x00003f49u, 0x0004007cu, 0x00000008u, 0x00003f53u, 0x00003f4bu, 0x00070050u, 0x00000009u, 0x00003f54u, 0x00003f4du, 0x00003f4du, 0x00003f4du, 0x00003f53u, 0x0003003eu, 0x00003f47u, 0x00003f54u, 0x0003003eu, 0x00003f24u, 0x00003f54u, 0x0003003eu, 0x00002c4fu, 0x00003f54u, 0x000300f7u, 0x00002ff1u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002ff2u, 0x00002ff1u, 0x000200f8u, 0x00002ff2u, 0x00050050u, 0x0000005fu, 0x00002ff5u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002ff6u, 0x00002ff5u, 0x0003003eu, 0x00006bb3u, 0x00002c04u, 0x0003003eu, 0x00006bb4u, 0x00002c07u, 0x0003003eu, 0x00002d25u, 0x000020f8u, 0x0003003eu, 0x00002d26u, 0x00002ff6u, 0x00050041u, 0x00000007u, 0x00003f5eu, 0x00002d26u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003f5fu, 0x00003f5eu, 0x00050084u, 0x00000006u, 0x00003f60u, 0x00002c07u, 0x00003f5fu, 0x00050080u, 0x00000006u, 0x00003f61u, 0x00002c04u, 0x00003f60u, 0x0003003eu, 0x00003f55u, 0x00003f61u, 0x00050041u, 0x00000007u, 0x00003f62u, 0x00002d26u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003f63u, 0x00003f62u, 0x00050084u, 0x00000006u, 0x00003f64u, 0x00003f63u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003f66u, 0x00003f61u, 0x00003f64u, 0x0003003eu, 0x00003f55u, 0x00003f66u, 0x000500c7u, 0x00000006u, 0x00003f68u, 0x00003f66u, 0x00000e59u, 0x0003003eu, 0x00003f55u, 0x00003f68u, 0x000500c2u, 0x00000006u, 0x00003f6au, 0x00003f68u, 0x00000212u, 0x0003003eu, 0x00003f56u, 0x00003f6au, 0x0004003du, 0x00000006u, 0x00003f6cu, 0x00003f5eu, 0x000500c7u, 0x00000006u, 0x00003f6du, 0x00003f6cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003f6eu, 0x00003f6du, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003f70u, 0x00003f6au, 0x00003f6eu, 0x0003003eu, 0x00003f56u, 0x00003f70u, 0x000500c6u, 0x00000006u, 0x00003f72u, 0x00003f70u, 0x00000485u, 0x0003003eu, 0x00003f56u, 0x00003f72u, 0x00080041u, 0x00000270u, 0x00003f75u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003f72u, 0x0004003du, 0x0000022bu, 0x00003f76u, 0x00003f75u, 0x00040071u, 0x00000006u, 0x00003f77u, 0x00003f76u, 0x0003003eu, 0x00003f57u, 0x00003f77u, 0x0003003eu, 0x00003f58u, 0x00003f77u, 0x000500c2u, 0x00000006u, 0x00003f7eu, 0x00003f77u, 0x0000025eu, 0x0003003eu, 0x00003f7au, 0x00003f7eu, 0x000500c7u, 0x00000006u, 0x00003f80u, 0x00003f77u, 0x000006c2u, 0x0003003eu, 0x00003f7bu, 0x00003f80u, 0x0004007cu, 0x00000008u, 0x00003f82u, 0x00003f7eu, 0x0004007cu, 0x00000008u, 0x00003f88u, 0x00003f80u, 0x00070050u, 0x00000009u, 0x00003f89u, 0x00003f82u, 0x00003f82u, 0x00003f82u, 0x00003f88u, 0x0003003eu, 0x00003f7cu, 0x00003f89u, 0x0003003eu, 0x00003f59u, 0x00003f89u, 0x0003003eu, 0x00002c57u, 0x00003f89u, 0x00050050u, 0x0000005fu, 0x00002ffcu, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002ffdu, 0x00002ffcu, 0x0003003eu, 0x00006bb7u, 0x00002c04u, 0x0003003eu, 0x00006bb8u, 0x00002c07u, 0x0003003eu, 0x00002d28u, 0x000020f8u, 0x0003003eu, 0x00002d29u, 0x00002ffdu, 0x00050041u, 0x00000007u, 0x00003f93u, 0x00002d29u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003f94u, 0x00003f93u, 0x00050084u, 0x00000006u, 0x00003f95u, 0x00002c07u, 0x00003f94u, 0x00050080u, 0x00000006u, 0x00003f96u, 0x00002c04u, 0x00003f95u, 0x0003003eu, 0x00003f8au, 0x00003f96u, 0x00050041u, 0x00000007u, 0x00003f97u, 0x00002d29u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003f98u, 0x00003f97u, 0x00050084u, 0x00000006u, 0x00003f99u, 0x00003f98u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003f9bu, 0x00003f96u, 0x00003f99u, 0x0003003eu, 0x00003f8au, 0x00003f9bu, 0x000500c7u, 0x00000006u, 0x00003f9du, 0x00003f9bu, 0x00000e59u, 0x0003003eu, 0x00003f8au, 0x00003f9du, 0x000500c2u, 0x00000006u, 0x00003f9fu, 0x00003f9du, 0x00000212u, 0x0003003eu, 0x00003f8bu, 0x00003f9fu, 0x0004003du, 0x00000006u, 0x00003fa1u, 0x00003f93u, 0x000500c7u, 0x00000006u, 0x00003fa2u, 0x00003fa1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003fa3u, 0x00003fa2u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003fa5u, 0x00003f9fu, 0x00003fa3u, 0x0003003eu, 0x00003f8bu, 0x00003fa5u, 0x000500c6u, 0x00000006u, 0x00003fa7u, 0x00003fa5u, 0x00000485u, 0x0003003eu, 0x00003f8bu, 0x00003fa7u, 0x00080041u, 0x00000270u, 0x00003faau, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003fa7u, 0x0004003du, 0x0000022bu, 0x00003fabu, 0x00003faau, 0x00040071u, 0x00000006u, 0x00003facu, 0x00003fabu, 0x0003003eu, 0x00003f8cu, 0x00003facu, 0x0003003eu, 0x00003f8du, 0x00003facu, 0x000500c2u, 0x00000006u, 0x00003fb3u, 0x00003facu, 0x0000025eu, 0x0003003eu, 0x00003fafu, 0x00003fb3u, 0x000500c7u, 0x00000006u, 0x00003fb5u, 0x00003facu, 0x000006c2u, 0x0003003eu, 0x00003fb0u, 0x00003fb5u, 0x0004007cu, 0x00000008u, 0x00003fb7u, 0x00003fb3u, 0x0004007cu, 0x00000008u, 0x00003fbdu, 0x00003fb5u, 0x00070050u, 0x00000009u, 0x00003fbeu, 0x00003fb7u, 0x00003fb7u, 0x00003fb7u, 0x00003fbdu, 0x0003003eu, 0x00003fb1u, 0x00003fbeu, 0x0003003eu, 0x00003f8eu, 0x00003fbeu, 0x0003003eu, 0x00002c5fu, 0x00003fbeu, 0x000200f9u, 0x00002ff1u, 0x000200f8u, 0x00002ff1u, 0x000700f5u, 0x00000009u, 0x000083f3u, 0x0000839eu, 0x00002fa9u, 0x00003fbeu, 0x00002ff2u, 0x000700f5u, 0x00000009u, 0x000082fbu, 0x000082a2u, 0x00002fa9u, 0x00003f89u, 0x00002ff2u, 0x000300f7u, 0x00003002u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00003003u, 0x00003002u, 0x000200f8u, 0x00003003u, 0x00050050u, 0x0000005fu, 0x00003006u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00003007u, 0x00003006u, 0x0003003eu, 0x00006bbbu, 0x00002c04u, 0x0003003eu, 0x00006bbcu, 0x00002c07u, 0x0003003eu, 0x00002d2bu, 0x000020f8u, 0x0003003eu, 0x00002d2cu, 0x00003007u, 0x00050041u, 0x00000007u, 0x00003fc8u, 0x00002d2cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003fc9u, 0x00003fc8u, 0x00050084u, 0x00000006u, 0x00003fcau, 0x00002c07u, 0x00003fc9u, 0x00050080u, 0x00000006u, 0x00003fcbu, 0x00002c04u, 0x00003fcau, 0x0003003eu, 0x00003fbfu, 0x00003fcbu, 0x00050041u, 0x00000007u, 0x00003fccu, 0x00002d2cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003fcdu, 0x00003fccu, 0x00050084u, 0x00000006u, 0x00003fceu, 0x00003fcdu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003fd0u, 0x00003fcbu, 0x00003fceu, 0x0003003eu, 0x00003fbfu, 0x00003fd0u, 0x000500c7u, 0x00000006u, 0x00003fd2u, 0x00003fd0u, 0x00000e59u, 0x0003003eu, 0x00003fbfu, 0x00003fd2u, 0x000500c2u, 0x00000006u, 0x00003fd4u, 0x00003fd2u, 0x00000212u, 0x0003003eu, 0x00003fc0u, 0x00003fd4u, 0x0004003du, 0x00000006u, 0x00003fd6u, 0x00003fc8u, 0x000500c7u, 0x00000006u, 0x00003fd7u, 0x00003fd6u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003fd8u, 0x00003fd7u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003fdau, 0x00003fd4u, 0x00003fd8u, 0x0003003eu, 0x00003fc0u, 0x00003fdau, 0x000500c6u, 0x00000006u, 0x00003fdcu, 0x00003fdau, 0x00000485u, 0x0003003eu, 0x00003fc0u, 0x00003fdcu, 0x00080041u, 0x00000270u, 0x00003fdfu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003fdcu, 0x0004003du, 0x0000022bu, 0x00003fe0u, 0x00003fdfu, 0x00040071u, 0x00000006u, 0x00003fe1u, 0x00003fe0u, 0x0003003eu, 0x00003fc1u, 0x00003fe1u, 0x0003003eu, 0x00003fc2u, 0x00003fe1u, 0x000500c2u, 0x00000006u, 0x00003fe8u, 0x00003fe1u, 0x0000025eu, 0x0003003eu, 0x00003fe4u, 0x00003fe8u, 0x000500c7u, 0x00000006u, 0x00003feau, 0x00003fe1u, 0x000006c2u, 0x0003003eu, 0x00003fe5u, 0x00003feau, 0x0004007cu, 0x00000008u, 0x00003fecu, 0x00003fe8u, 0x0004007cu, 0x00000008u, 0x00003ff2u, 0x00003feau, 0x00070050u, 0x00000009u, 0x00003ff3u, 0x00003fecu, 0x00003fecu, 0x00003fecu, 0x00003ff2u, 0x0003003eu, 0x00003fe6u, 0x00003ff3u, 0x0003003eu, 0x00003fc3u, 0x00003ff3u, 0x0003003eu, 0x00002c67u, 0x00003ff3u, 0x000200f9u, 0x00003002u, 0x000200f8u, 0x00003002u, 0x000700f5u, 0x00000009u, 0x0000846fu, 0x00008418u, 0x00002ff1u, 0x00003ff3u, 0x00003003u, 0x000200f9u, 0x00002fa6u, 0x000200f8u, 0x00002fa8u, 0x0004007cu, 0x000000a2u, 0x00002fccu, 0x00007f18u, 0x0003003eu, 0x00006b9fu, 0x00002c04u, 0x0003003eu, 0x00006ba0u, 0x00002c07u, 0x0003003eu, 0x00002d16u, 0x000020f8u, 0x0003003eu, 0x00002d17u, 0x00002fccu, 0x00050041u, 0x00000007u, 0x00003e4eu, 0x00002d17u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003e4fu, 0x00003e4eu, 0x00050084u, 0x00000006u, 0x00003e50u, 0x00002c07u, 0x00003e4fu, 0x00050080u, 0x00000006u, 0x00003e51u, 0x00002c04u, 0x00003e50u, 0x0003003eu, 0x00003e44u, 0x00003e51u, 0x00050041u, 0x00000007u, 0x00003e52u, 0x00002d17u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003e53u, 0x00003e52u, 0x00050080u, 0x00000006u, 0x00003e55u, 0x00003e51u, 0x00003e53u, 0x0003003eu, 0x00003e44u, 0x00003e55u, 0x000500c7u, 0x00000006u, 0x00003e57u, 0x00003e55u, 0x00000e59u, 0x0003003eu, 0x00003e44u, 0x00003e57u, 0x0003003eu, 0x00003e45u, 0x00003e57u, 0x0004003du, 0x00000006u, 0x00003e5au, 0x00003e4eu, 0x000500c7u, 0x00000006u, 0x00003e5bu, 0x00003e5au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003e5cu, 0x00003e5bu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003e5eu, 0x00003e57u, 0x00003e5cu, 0x0003003eu, 0x00003e45u, 0x00003e5eu, 0x000500c6u, 0x00000006u, 0x00003e60u, 0x00003e5eu, 0x0000048bu, 0x0003003eu, 0x00003e45u, 0x00003e60u, 0x00080041u, 0x00000277u, 0x00003e63u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003e60u, 0x0004003du, 0x00000229u, 0x00003e64u, 0x00003e63u, 0x00040071u, 0x00000006u, 0x00003e65u, 0x00003e64u, 0x0003003eu, 0x00003e46u, 0x00003e65u, 0x000500c2u, 0x00000006u, 0x00003e67u, 0x00003e65u, 0x0000021bu, 0x0003003eu, 0x00003e47u, 0x00003e67u, 0x000500c7u, 0x00000006u, 0x00003e69u, 0x00003e65u, 0x00000e7cu, 0x0003003eu, 0x00003e48u, 0x00003e69u, 0x000500c4u, 0x00000006u, 0x00003e6bu, 0x00003e69u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003e6du, 0x00003e69u, 0x00003e6bu, 0x0003003eu, 0x00003e48u, 0x00003e6du, 0x000500c4u, 0x00000006u, 0x00003e6fu, 0x00003e67u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003e71u, 0x00003e67u, 0x00003e6fu, 0x0003003eu, 0x00003e47u, 0x00003e71u, 0x0004007cu, 0x00000008u, 0x00003e73u, 0x00003e71u, 0x0004007cu, 0x00000008u, 0x00003e79u, 0x00003e6du, 0x00070050u, 0x00000009u, 0x00003e7au, 0x00003e73u, 0x00003e73u, 0x00003e73u, 0x00003e79u, 0x0003003eu, 0x00003e49u, 0x00003e7au, 0x0003003eu, 0x00002c4fu, 0x00003e7au, 0x000300f7u, 0x00002fd1u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002fd2u, 0x00002fd1u, 0x000200f8u, 0x00002fd2u, 0x00050050u, 0x0000005fu, 0x00002fd5u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002fd6u, 0x00002fd5u, 0x0003003eu, 0x00006ba3u, 0x00002c04u, 0x0003003eu, 0x00006ba4u, 0x00002c07u, 0x0003003eu, 0x00002d19u, 0x000020f8u, 0x0003003eu, 0x00002d1au, 0x00002fd6u, 0x00050041u, 0x00000007u, 0x00003e85u, 0x00002d1au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003e86u, 0x00003e85u, 0x00050084u, 0x00000006u, 0x00003e87u, 0x00002c07u, 0x00003e86u, 0x00050080u, 0x00000006u, 0x00003e88u, 0x00002c04u, 0x00003e87u, 0x0003003eu, 0x00003e7bu, 0x00003e88u, 0x00050041u, 0x00000007u, 0x00003e89u, 0x00002d1au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003e8au, 0x00003e89u, 0x00050080u, 0x00000006u, 0x00003e8cu, 0x00003e88u, 0x00003e8au, 0x0003003eu, 0x00003e7bu, 0x00003e8cu, 0x000500c7u, 0x00000006u, 0x00003e8eu, 0x00003e8cu, 0x00000e59u, 0x0003003eu, 0x00003e7bu, 0x00003e8eu, 0x0003003eu, 0x00003e7cu, 0x00003e8eu, 0x0004003du, 0x00000006u, 0x00003e91u, 0x00003e85u, 0x000500c7u, 0x00000006u, 0x00003e92u, 0x00003e91u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003e93u, 0x00003e92u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003e95u, 0x00003e8eu, 0x00003e93u, 0x0003003eu, 0x00003e7cu, 0x00003e95u, 0x000500c6u, 0x00000006u, 0x00003e97u, 0x00003e95u, 0x0000048bu, 0x0003003eu, 0x00003e7cu, 0x00003e97u, 0x00080041u, 0x00000277u, 0x00003e9au, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003e97u, 0x0004003du, 0x00000229u, 0x00003e9bu, 0x00003e9au, 0x00040071u, 0x00000006u, 0x00003e9cu, 0x00003e9bu, 0x0003003eu, 0x00003e7du, 0x00003e9cu, 0x000500c2u, 0x00000006u, 0x00003e9eu, 0x00003e9cu, 0x0000021bu, 0x0003003eu, 0x00003e7eu, 0x00003e9eu, 0x000500c7u, 0x00000006u, 0x00003ea0u, 0x00003e9cu, 0x00000e7cu, 0x0003003eu, 0x00003e7fu, 0x00003ea0u, 0x000500c4u, 0x00000006u, 0x00003ea2u, 0x00003ea0u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003ea4u, 0x00003ea0u, 0x00003ea2u, 0x0003003eu, 0x00003e7fu, 0x00003ea4u, 0x000500c4u, 0x00000006u, 0x00003ea6u, 0x00003e9eu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003ea8u, 0x00003e9eu, 0x00003ea6u, 0x0003003eu, 0x00003e7eu, 0x00003ea8u, 0x0004007cu, 0x00000008u, 0x00003eaau, 0x00003ea8u, 0x0004007cu, 0x00000008u, 0x00003eb0u, 0x00003ea4u, 0x00070050u, 0x00000009u, 0x00003eb1u, 0x00003eaau, 0x00003eaau, 0x00003eaau, 0x00003eb0u, 0x0003003eu, 0x00003e80u, 0x00003eb1u, 0x0003003eu, 0x00002c57u, 0x00003eb1u, 0x00050050u, 0x0000005fu, 0x00002fdcu, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002fddu, 0x00002fdcu, 0x0003003eu, 0x00006ba7u, 0x00002c04u, 0x0003003eu, 0x00006ba8u, 0x00002c07u, 0x0003003eu, 0x00002d1cu, 0x000020f8u, 0x0003003eu, 0x00002d1du, 0x00002fddu, 0x00050041u, 0x00000007u, 0x00003ebcu, 0x00002d1du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003ebdu, 0x00003ebcu, 0x00050084u, 0x00000006u, 0x00003ebeu, 0x00002c07u, 0x00003ebdu, 0x00050080u, 0x00000006u, 0x00003ebfu, 0x00002c04u, 0x00003ebeu, 0x0003003eu, 0x00003eb2u, 0x00003ebfu, 0x00050041u, 0x00000007u, 0x00003ec0u, 0x00002d1du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ec1u, 0x00003ec0u, 0x00050080u, 0x00000006u, 0x00003ec3u, 0x00003ebfu, 0x00003ec1u, 0x0003003eu, 0x00003eb2u, 0x00003ec3u, 0x000500c7u, 0x00000006u, 0x00003ec5u, 0x00003ec3u, 0x00000e59u, 0x0003003eu, 0x00003eb2u, 0x00003ec5u, 0x0003003eu, 0x00003eb3u, 0x00003ec5u, 0x0004003du, 0x00000006u, 0x00003ec8u, 0x00003ebcu, 0x000500c7u, 0x00000006u, 0x00003ec9u, 0x00003ec8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ecau, 0x00003ec9u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003eccu, 0x00003ec5u, 0x00003ecau, 0x0003003eu, 0x00003eb3u, 0x00003eccu, 0x000500c6u, 0x00000006u, 0x00003eceu, 0x00003eccu, 0x0000048bu, 0x0003003eu, 0x00003eb3u, 0x00003eceu, 0x00080041u, 0x00000277u, 0x00003ed1u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003eceu, 0x0004003du, 0x00000229u, 0x00003ed2u, 0x00003ed1u, 0x00040071u, 0x00000006u, 0x00003ed3u, 0x00003ed2u, 0x0003003eu, 0x00003eb4u, 0x00003ed3u, 0x000500c2u, 0x00000006u, 0x00003ed5u, 0x00003ed3u, 0x0000021bu, 0x0003003eu, 0x00003eb5u, 0x00003ed5u, 0x000500c7u, 0x00000006u, 0x00003ed7u, 0x00003ed3u, 0x00000e7cu, 0x0003003eu, 0x00003eb6u, 0x00003ed7u, 0x000500c4u, 0x00000006u, 0x00003ed9u, 0x00003ed7u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003edbu, 0x00003ed7u, 0x00003ed9u, 0x0003003eu, 0x00003eb6u, 0x00003edbu, 0x000500c4u, 0x00000006u, 0x00003eddu, 0x00003ed5u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003edfu, 0x00003ed5u, 0x00003eddu, 0x0003003eu, 0x00003eb5u, 0x00003edfu, 0x0004007cu, 0x00000008u, 0x00003ee1u, 0x00003edfu, 0x0004007cu, 0x00000008u, 0x00003ee7u, 0x00003edbu, 0x00070050u, 0x00000009u, 0x00003ee8u, 0x00003ee1u, 0x00003ee1u, 0x00003ee1u, 0x00003ee7u, 0x0003003eu, 0x00003eb7u, 0x00003ee8u, 0x0003003eu, 0x00002c5fu, 0x00003ee8u, 0x000200f9u, 0x00002fd1u, 0x000200f8u, 0x00002fd1u, 0x000700f5u, 0x00000009u, 0x000083f1u, 0x0000839eu, 0x00002fa8u, 0x00003ee8u, 0x00002fd2u, 0x000700f5u, 0x00000009u, 0x000082f9u, 0x000082a2u, 0x00002fa8u, 0x00003eb1u, 0x00002fd2u, 0x000300f7u, 0x00002fe2u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002fe3u, 0x00002fe2u, 0x000200f8u, 0x00002fe3u, 0x00050050u, 0x0000005fu, 0x00002fe6u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002fe7u, 0x00002fe6u, 0x0003003eu, 0x00006babu, 0x00002c04u, 0x0003003eu, 0x00006bacu, 0x00002c07u, 0x0003003eu, 0x00002d1fu, 0x000020f8u, 0x0003003eu, 0x00002d20u, 0x00002fe7u, 0x00050041u, 0x00000007u, 0x00003ef3u, 0x00002d20u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003ef4u, 0x00003ef3u, 0x00050084u, 0x00000006u, 0x00003ef5u, 0x00002c07u, 0x00003ef4u, 0x00050080u, 0x00000006u, 0x00003ef6u, 0x00002c04u, 0x00003ef5u, 0x0003003eu, 0x00003ee9u, 0x00003ef6u, 0x00050041u, 0x00000007u, 0x00003ef7u, 0x00002d20u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ef8u, 0x00003ef7u, 0x00050080u, 0x00000006u, 0x00003efau, 0x00003ef6u, 0x00003ef8u, 0x0003003eu, 0x00003ee9u, 0x00003efau, 0x000500c7u, 0x00000006u, 0x00003efcu, 0x00003efau, 0x00000e59u, 0x0003003eu, 0x00003ee9u, 0x00003efcu, 0x0003003eu, 0x00003eeau, 0x00003efcu, 0x0004003du, 0x00000006u, 0x00003effu, 0x00003ef3u, 0x000500c7u, 0x00000006u, 0x00003f00u, 0x00003effu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003f01u, 0x00003f00u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003f03u, 0x00003efcu, 0x00003f01u, 0x0003003eu, 0x00003eeau, 0x00003f03u, 0x000500c6u, 0x00000006u, 0x00003f05u, 0x00003f03u, 0x0000048bu, 0x0003003eu, 0x00003eeau, 0x00003f05u, 0x00080041u, 0x00000277u, 0x00003f08u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003f05u, 0x0004003du, 0x00000229u, 0x00003f09u, 0x00003f08u, 0x00040071u, 0x00000006u, 0x00003f0au, 0x00003f09u, 0x0003003eu, 0x00003eebu, 0x00003f0au, 0x000500c2u, 0x00000006u, 0x00003f0cu, 0x00003f0au, 0x0000021bu, 0x0003003eu, 0x00003eecu, 0x00003f0cu, 0x000500c7u, 0x00000006u, 0x00003f0eu, 0x00003f0au, 0x00000e7cu, 0x0003003eu, 0x00003eedu, 0x00003f0eu, 0x000500c4u, 0x00000006u, 0x00003f10u, 0x00003f0eu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003f12u, 0x00003f0eu, 0x00003f10u, 0x0003003eu, 0x00003eedu, 0x00003f12u, 0x000500c4u, 0x00000006u, 0x00003f14u, 0x00003f0cu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003f16u, 0x00003f0cu, 0x00003f14u, 0x0003003eu, 0x00003eecu, 0x00003f16u, 0x0004007cu, 0x00000008u, 0x00003f18u, 0x00003f16u, 0x0004007cu, 0x00000008u, 0x00003f1eu, 0x00003f12u, 0x00070050u, 0x00000009u, 0x00003f1fu, 0x00003f18u, 0x00003f18u, 0x00003f18u, 0x00003f1eu, 0x0003003eu, 0x00003eeeu, 0x00003f1fu, 0x0003003eu, 0x00002c67u, 0x00003f1fu, 0x000200f9u, 0x00002fe2u, 0x000200f8u, 0x00002fe2u, 0x000700f5u, 0x00000009u, 0x0000846du, 0x00008418u, 0x00002fd1u, 0x00003f1fu, 0x00002fe3u, 0x000200f9u, 0x00002fa6u, 0x000200f8u, 0x00002fa7u, 0x0004007cu, 0x000000a2u, 0x00002facu, 0x00007f18u, 0x0003003eu, 0x00006b8fu, 0x00002c04u, 0x0003003eu, 0x00006b90u, 0x00002c07u, 0x0003003eu, 0x00002d0au, 0x000020f8u, 0x0003003eu, 0x00002d0bu, 0x00002facu, 0x00050041u, 0x00000007u, 0x00003d4au, 0x00002d0bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d4bu, 0x00003d4au, 0x00050084u, 0x00000006u, 0x00003d4cu, 0x00002c07u, 0x00003d4bu, 0x00050080u, 0x00000006u, 0x00003d4du, 0x00002c04u, 0x00003d4cu, 0x0003003eu, 0x00003d40u, 0x00003d4du, 0x00050041u, 0x00000007u, 0x00003d4eu, 0x00002d0bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d4fu, 0x00003d4eu, 0x000500c2u, 0x00000006u, 0x00003d50u, 0x00003d4fu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003d52u, 0x00003d4du, 0x00003d50u, 0x0003003eu, 0x00003d40u, 0x00003d52u, 0x000500c7u, 0x00000006u, 0x00003d54u, 0x00003d52u, 0x00000e59u, 0x0003003eu, 0x00003d40u, 0x00003d54u, 0x0004003du, 0x00000006u, 0x00003d56u, 0x00003d4eu, 0x000400c8u, 0x00000006u, 0x00003d57u, 0x00003d56u, 0x000500c7u, 0x00000006u, 0x00003d58u, 0x00003d57u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003d59u, 0x00003d58u, 0x00000701u, 0x0003003eu, 0x00003d41u, 0x00003d59u, 0x0003003eu, 0x00003d42u, 0x00003d54u, 0x0004003du, 0x00000006u, 0x00003d5cu, 0x00003d4au, 0x000500c7u, 0x00000006u, 0x00003d5du, 0x00003d5cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d5eu, 0x00003d5du, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d60u, 0x00003d54u, 0x00003d5eu, 0x0003003eu, 0x00003d42u, 0x00003d60u, 0x000500c6u, 0x00000006u, 0x00003d62u, 0x00003d60u, 0x0000048bu, 0x0003003eu, 0x00003d42u, 0x00003d62u, 0x00080041u, 0x00000277u, 0x00003d65u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003d62u, 0x0004003du, 0x00000229u, 0x00003d66u, 0x00003d65u, 0x00040071u, 0x00000006u, 0x00003d67u, 0x00003d66u, 0x0003003eu, 0x00003d43u, 0x00003d67u, 0x000500c2u, 0x00000006u, 0x00003d6au, 0x00003d67u, 0x00003d59u, 0x000500c7u, 0x00000006u, 0x00003d6bu, 0x00003d6au, 0x00000e7cu, 0x0003003eu, 0x00003d43u, 0x00003d6bu, 0x000500c7u, 0x00000006u, 0x00003d6du, 0x00003d6bu, 0x00000eb3u, 0x0003003eu, 0x00003d44u, 0x00003d6du, 0x000500c4u, 0x00000006u, 0x00003d6fu, 0x00003d6du, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003d71u, 0x00003d6du, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003d72u, 0x00003d6fu, 0x00003d71u, 0x000500c2u, 0x00000006u, 0x00003d74u, 0x00003d6du, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003d75u, 0x00003d72u, 0x00003d74u, 0x0003003eu, 0x00003d44u, 0x00003d75u, 0x0004007cu, 0x00000008u, 0x00003d77u, 0x00003d75u, 0x000500c7u, 0x00000006u, 0x00003d7du, 0x00003d6bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003d7eu, 0x00003d7du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003d7fu, 0x00003d7eu, 0x00070050u, 0x00000009u, 0x00003d80u, 0x00003d77u, 0x00003d77u, 0x00003d77u, 0x00003d7fu, 0x0003003eu, 0x00003d45u, 0x00003d80u, 0x0003003eu, 0x00002c4fu, 0x00003d80u, 0x000300f7u, 0x00002fb1u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002fb2u, 0x00002fb1u, 0x000200f8u, 0x00002fb2u, 0x00050050u, 0x0000005fu, 0x00002fb5u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002fb6u, 0x00002fb5u, 0x0003003eu, 0x00006b93u, 0x00002c04u, 0x0003003eu, 0x00006b94u, 0x00002c07u, 0x0003003eu, 0x00002d0du, 0x000020f8u, 0x0003003eu, 0x00002d0eu, 0x00002fb6u, 0x00050041u, 0x00000007u, 0x00003d8bu, 0x00002d0eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d8cu, 0x00003d8bu, 0x00050084u, 0x00000006u, 0x00003d8du, 0x00002c07u, 0x00003d8cu, 0x00050080u, 0x00000006u, 0x00003d8eu, 0x00002c04u, 0x00003d8du, 0x0003003eu, 0x00003d81u, 0x00003d8eu, 0x00050041u, 0x00000007u, 0x00003d8fu, 0x00002d0eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d90u, 0x00003d8fu, 0x000500c2u, 0x00000006u, 0x00003d91u, 0x00003d90u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003d93u, 0x00003d8eu, 0x00003d91u, 0x0003003eu, 0x00003d81u, 0x00003d93u, 0x000500c7u, 0x00000006u, 0x00003d95u, 0x00003d93u, 0x00000e59u, 0x0003003eu, 0x00003d81u, 0x00003d95u, 0x0004003du, 0x00000006u, 0x00003d97u, 0x00003d8fu, 0x000400c8u, 0x00000006u, 0x00003d98u, 0x00003d97u, 0x000500c7u, 0x00000006u, 0x00003d99u, 0x00003d98u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003d9au, 0x00003d99u, 0x00000701u, 0x0003003eu, 0x00003d82u, 0x00003d9au, 0x0003003eu, 0x00003d83u, 0x00003d95u, 0x0004003du, 0x00000006u, 0x00003d9du, 0x00003d8bu, 0x000500c7u, 0x00000006u, 0x00003d9eu, 0x00003d9du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d9fu, 0x00003d9eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003da1u, 0x00003d95u, 0x00003d9fu, 0x0003003eu, 0x00003d83u, 0x00003da1u, 0x000500c6u, 0x00000006u, 0x00003da3u, 0x00003da1u, 0x0000048bu, 0x0003003eu, 0x00003d83u, 0x00003da3u, 0x00080041u, 0x00000277u, 0x00003da6u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003da3u, 0x0004003du, 0x00000229u, 0x00003da7u, 0x00003da6u, 0x00040071u, 0x00000006u, 0x00003da8u, 0x00003da7u, 0x0003003eu, 0x00003d84u, 0x00003da8u, 0x000500c2u, 0x00000006u, 0x00003dabu, 0x00003da8u, 0x00003d9au, 0x000500c7u, 0x00000006u, 0x00003dacu, 0x00003dabu, 0x00000e7cu, 0x0003003eu, 0x00003d84u, 0x00003dacu, 0x000500c7u, 0x00000006u, 0x00003daeu, 0x00003dacu, 0x00000eb3u, 0x0003003eu, 0x00003d85u, 0x00003daeu, 0x000500c4u, 0x00000006u, 0x00003db0u, 0x00003daeu, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003db2u, 0x00003daeu, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003db3u, 0x00003db0u, 0x00003db2u, 0x000500c2u, 0x00000006u, 0x00003db5u, 0x00003daeu, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003db6u, 0x00003db3u, 0x00003db5u, 0x0003003eu, 0x00003d85u, 0x00003db6u, 0x0004007cu, 0x00000008u, 0x00003db8u, 0x00003db6u, 0x000500c7u, 0x00000006u, 0x00003dbeu, 0x00003dacu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003dbfu, 0x00003dbeu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003dc0u, 0x00003dbfu, 0x00070050u, 0x00000009u, 0x00003dc1u, 0x00003db8u, 0x00003db8u, 0x00003db8u, 0x00003dc0u, 0x0003003eu, 0x00003d86u, 0x00003dc1u, 0x0003003eu, 0x00002c57u, 0x00003dc1u, 0x00050050u, 0x0000005fu, 0x00002fbcu, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002fbdu, 0x00002fbcu, 0x0003003eu, 0x00006b97u, 0x00002c04u, 0x0003003eu, 0x00006b98u, 0x00002c07u, 0x0003003eu, 0x00002d10u, 0x000020f8u, 0x0003003eu, 0x00002d11u, 0x00002fbdu, 0x00050041u, 0x00000007u, 0x00003dccu, 0x00002d11u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003dcdu, 0x00003dccu, 0x00050084u, 0x00000006u, 0x00003dceu, 0x00002c07u, 0x00003dcdu, 0x00050080u, 0x00000006u, 0x00003dcfu, 0x00002c04u, 0x00003dceu, 0x0003003eu, 0x00003dc2u, 0x00003dcfu, 0x00050041u, 0x00000007u, 0x00003dd0u, 0x00002d11u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003dd1u, 0x00003dd0u, 0x000500c2u, 0x00000006u, 0x00003dd2u, 0x00003dd1u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003dd4u, 0x00003dcfu, 0x00003dd2u, 0x0003003eu, 0x00003dc2u, 0x00003dd4u, 0x000500c7u, 0x00000006u, 0x00003dd6u, 0x00003dd4u, 0x00000e59u, 0x0003003eu, 0x00003dc2u, 0x00003dd6u, 0x0004003du, 0x00000006u, 0x00003dd8u, 0x00003dd0u, 0x000400c8u, 0x00000006u, 0x00003dd9u, 0x00003dd8u, 0x000500c7u, 0x00000006u, 0x00003ddau, 0x00003dd9u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003ddbu, 0x00003ddau, 0x00000701u, 0x0003003eu, 0x00003dc3u, 0x00003ddbu, 0x0003003eu, 0x00003dc4u, 0x00003dd6u, 0x0004003du, 0x00000006u, 0x00003ddeu, 0x00003dccu, 0x000500c7u, 0x00000006u, 0x00003ddfu, 0x00003ddeu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003de0u, 0x00003ddfu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003de2u, 0x00003dd6u, 0x00003de0u, 0x0003003eu, 0x00003dc4u, 0x00003de2u, 0x000500c6u, 0x00000006u, 0x00003de4u, 0x00003de2u, 0x0000048bu, 0x0003003eu, 0x00003dc4u, 0x00003de4u, 0x00080041u, 0x00000277u, 0x00003de7u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003de4u, 0x0004003du, 0x00000229u, 0x00003de8u, 0x00003de7u, 0x00040071u, 0x00000006u, 0x00003de9u, 0x00003de8u, 0x0003003eu, 0x00003dc5u, 0x00003de9u, 0x000500c2u, 0x00000006u, 0x00003decu, 0x00003de9u, 0x00003ddbu, 0x000500c7u, 0x00000006u, 0x00003dedu, 0x00003decu, 0x00000e7cu, 0x0003003eu, 0x00003dc5u, 0x00003dedu, 0x000500c7u, 0x00000006u, 0x00003defu, 0x00003dedu, 0x00000eb3u, 0x0003003eu, 0x00003dc6u, 0x00003defu, 0x000500c4u, 0x00000006u, 0x00003df1u, 0x00003defu, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003df3u, 0x00003defu, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003df4u, 0x00003df1u, 0x00003df3u, 0x000500c2u, 0x00000006u, 0x00003df6u, 0x00003defu, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003df7u, 0x00003df4u, 0x00003df6u, 0x0003003eu, 0x00003dc6u, 0x00003df7u, 0x0004007cu, 0x00000008u, 0x00003df9u, 0x00003df7u, 0x000500c7u, 0x00000006u, 0x00003dffu, 0x00003dedu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003e00u, 0x00003dffu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003e01u, 0x00003e00u, 0x00070050u, 0x00000009u, 0x00003e02u, 0x00003df9u, 0x00003df9u, 0x00003df9u, 0x00003e01u, 0x0003003eu, 0x00003dc7u, 0x00003e02u, 0x0003003eu, 0x00002c5fu, 0x00003e02u, 0x000200f9u, 0x00002fb1u, 0x000200f8u, 0x00002fb1u, 0x000700f5u, 0x00000009u, 0x000083efu, 0x0000839eu, 0x00002fa7u, 0x00003e02u, 0x00002fb2u, 0x000700f5u, 0x00000009u, 0x000082f7u, 0x000082a2u, 0x00002fa7u, 0x00003dc1u, 0x00002fb2u, 0x000300f7u, 0x00002fc2u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002fc3u, 0x00002fc2u, 0x000200f8u, 0x00002fc3u, 0x00050050u, 0x0000005fu, 0x00002fc6u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002fc7u, 0x00002fc6u, 0x0003003eu, 0x00006b9bu, 0x00002c04u, 0x0003003eu, 0x00006b9cu, 0x00002c07u, 0x0003003eu, 0x00002d13u, 0x000020f8u, 0x0003003eu, 0x00002d14u, 0x00002fc7u, 0x00050041u, 0x00000007u, 0x00003e0du, 0x00002d14u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003e0eu, 0x00003e0du, 0x00050084u, 0x00000006u, 0x00003e0fu, 0x00002c07u, 0x00003e0eu, 0x00050080u, 0x00000006u, 0x00003e10u, 0x00002c04u, 0x00003e0fu, 0x0003003eu, 0x00003e03u, 0x00003e10u, 0x00050041u, 0x00000007u, 0x00003e11u, 0x00002d14u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003e12u, 0x00003e11u, 0x000500c2u, 0x00000006u, 0x00003e13u, 0x00003e12u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003e15u, 0x00003e10u, 0x00003e13u, 0x0003003eu, 0x00003e03u, 0x00003e15u, 0x000500c7u, 0x00000006u, 0x00003e17u, 0x00003e15u, 0x00000e59u, 0x0003003eu, 0x00003e03u, 0x00003e17u, 0x0004003du, 0x00000006u, 0x00003e19u, 0x00003e11u, 0x000400c8u, 0x00000006u, 0x00003e1au, 0x00003e19u, 0x000500c7u, 0x00000006u, 0x00003e1bu, 0x00003e1au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003e1cu, 0x00003e1bu, 0x00000701u, 0x0003003eu, 0x00003e04u, 0x00003e1cu, 0x0003003eu, 0x00003e05u, 0x00003e17u, 0x0004003du, 0x00000006u, 0x00003e1fu, 0x00003e0du, 0x000500c7u, 0x00000006u, 0x00003e20u, 0x00003e1fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003e21u, 0x00003e20u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003e23u, 0x00003e17u, 0x00003e21u, 0x0003003eu, 0x00003e05u, 0x00003e23u, 0x000500c6u, 0x00000006u, 0x00003e25u, 0x00003e23u, 0x0000048bu, 0x0003003eu, 0x00003e05u, 0x00003e25u, 0x00080041u, 0x00000277u, 0x00003e28u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003e25u, 0x0004003du, 0x00000229u, 0x00003e29u, 0x00003e28u, 0x00040071u, 0x00000006u, 0x00003e2au, 0x00003e29u, 0x0003003eu, 0x00003e06u, 0x00003e2au, 0x000500c2u, 0x00000006u, 0x00003e2du, 0x00003e2au, 0x00003e1cu, 0x000500c7u, 0x00000006u, 0x00003e2eu, 0x00003e2du, 0x00000e7cu, 0x0003003eu, 0x00003e06u, 0x00003e2eu, 0x000500c7u, 0x00000006u, 0x00003e30u, 0x00003e2eu, 0x00000eb3u, 0x0003003eu, 0x00003e07u, 0x00003e30u, 0x000500c4u, 0x00000006u, 0x00003e32u, 0x00003e30u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00003e34u, 0x00003e30u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00003e35u, 0x00003e32u, 0x00003e34u, 0x000500c2u, 0x00000006u, 0x00003e37u, 0x00003e30u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00003e38u, 0x00003e35u, 0x00003e37u, 0x0003003eu, 0x00003e07u, 0x00003e38u, 0x0004007cu, 0x00000008u, 0x00003e3au, 0x00003e38u, 0x000500c7u, 0x00000006u, 0x00003e40u, 0x00003e2eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003e41u, 0x00003e40u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003e42u, 0x00003e41u, 0x00070050u, 0x00000009u, 0x00003e43u, 0x00003e3au, 0x00003e3au, 0x00003e3au, 0x00003e42u, 0x0003003eu, 0x00003e08u, 0x00003e43u, 0x0003003eu, 0x00002c67u, 0x00003e43u, 0x000200f9u, 0x00002fc2u, 0x000200f8u, 0x00002fc2u, 0x000700f5u, 0x00000009u, 0x0000846bu, 0x00008418u, 0x00002fb1u, 0x00003e43u, 0x00002fc3u, 0x000200f9u, 0x00002fa6u, 0x000200f8u, 0x00002fa6u, 0x000d00f5u, 0x00000009u, 0x0000846au, 0x00008418u, 0x00002e7cu, 0x0000846bu, 0x00002fc2u, 0x0000846du, 0x00002fe2u, 0x0000846fu, 0x00003002u, 0x00008471u, 0x00003022u, 0x000d00f5u, 0x00000009u, 0x000083edu, 0x0000839eu, 0x00002e7cu, 0x000083efu, 0x00002fc2u, 0x000083f1u, 0x00002fe2u, 0x000083f3u, 0x00003002u, 0x000083f5u, 0x00003022u, 0x000d00f5u, 0x00000009u, 0x00008372u, 0x00008321u, 0x00002e7cu, 0x00003d80u, 0x00002fc2u, 0x00003e7au, 0x00002fe2u, 0x00003f54u, 0x00003002u, 0x0000401du, 0x00003022u, 0x000d00f5u, 0x00000009u, 0x000082f5u, 0x000082a2u, 0x00002e7cu, 0x000082f7u, 0x00002fc2u, 0x000082f9u, 0x00002fe2u, 0x000082fbu, 0x00003002u, 0x000082fdu, 0x00003022u, 0x000200f9u, 0x00002e78u, 0x000200f8u, 0x00002e7bu, 0x000300f7u, 0x00002f34u, 0x00000000u, 0x000700fbu, 0x00002c11u, 0x00002f35u, 0x00000000u, 0x00002f36u, 0x00000001u, 0x00002f37u, 0x000200f8u, 0x00002f37u, 0x0004007cu, 0x000000a2u, 0x00002f85u, 0x00007f18u, 0x0003003eu, 0x00006b6fu, 0x00002c04u, 0x0003003eu, 0x00006b70u, 0x00002c07u, 0x0003003eu, 0x00002cf2u, 0x000020f8u, 0x0003003eu, 0x00002cf3u, 0x00002f85u, 0x00050041u, 0x00000007u, 0x00003cbcu, 0x00002cf3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003cbdu, 0x00003cbcu, 0x00050084u, 0x00000006u, 0x00003cbeu, 0x00002c07u, 0x00003cbdu, 0x00050080u, 0x00000006u, 0x00003cbfu, 0x00002c04u, 0x00003cbeu, 0x0003003eu, 0x00003cb4u, 0x00003cbfu, 0x00050041u, 0x00000007u, 0x00003cc0u, 0x00002cf3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003cc1u, 0x00003cc0u, 0x00050080u, 0x00000006u, 0x00003cc3u, 0x00003cbfu, 0x00003cc1u, 0x0003003eu, 0x00003cb4u, 0x00003cc3u, 0x000500c7u, 0x00000006u, 0x00003cc5u, 0x00003cc3u, 0x00000e59u, 0x0003003eu, 0x00003cb4u, 0x00003cc5u, 0x0003003eu, 0x00003cb5u, 0x00003cc5u, 0x0004003du, 0x00000006u, 0x00003cc8u, 0x00003cbcu, 0x000500c7u, 0x00000006u, 0x00003cc9u, 0x00003cc8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ccau, 0x00003cc9u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003cccu, 0x00003cc5u, 0x00003ccau, 0x0003003eu, 0x00003cb5u, 0x00003cccu, 0x000500c6u, 0x00000006u, 0x00003cceu, 0x00003cccu, 0x0000048bu, 0x0003003eu, 0x00003cb5u, 0x00003cceu, 0x00080041u, 0x00000277u, 0x00003cd1u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003cceu, 0x0004003du, 0x00000229u, 0x00003cd2u, 0x00003cd1u, 0x00040071u, 0x00000006u, 0x00003cd3u, 0x00003cd2u, 0x0003003eu, 0x00003cb6u, 0x00003cd3u, 0x0004007cu, 0x00000008u, 0x00003cd5u, 0x00003cd3u, 0x00070050u, 0x00000009u, 0x00003cd6u, 0x00003cd5u, 0x00003cd5u, 0x00003cd5u, 0x00003cd5u, 0x0003003eu, 0x00003cb7u, 0x00003cd6u, 0x0003003eu, 0x00002c4fu, 0x00003cd6u, 0x000300f7u, 0x00002f8au, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002f8bu, 0x00002f8au, 0x000200f8u, 0x00002f8bu, 0x00050050u, 0x0000005fu, 0x00002f8eu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002f8fu, 0x00002f8eu, 0x0003003eu, 0x00006b73u, 0x00002c04u, 0x0003003eu, 0x00006b74u, 0x00002c07u, 0x0003003eu, 0x00002cf5u, 0x000020f8u, 0x0003003eu, 0x00002cf6u, 0x00002f8fu, 0x00050041u, 0x00000007u, 0x00003cdfu, 0x00002cf6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003ce0u, 0x00003cdfu, 0x00050084u, 0x00000006u, 0x00003ce1u, 0x00002c07u, 0x00003ce0u, 0x00050080u, 0x00000006u, 0x00003ce2u, 0x00002c04u, 0x00003ce1u, 0x0003003eu, 0x00003cd7u, 0x00003ce2u, 0x00050041u, 0x00000007u, 0x00003ce3u, 0x00002cf6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ce4u, 0x00003ce3u, 0x00050080u, 0x00000006u, 0x00003ce6u, 0x00003ce2u, 0x00003ce4u, 0x0003003eu, 0x00003cd7u, 0x00003ce6u, 0x000500c7u, 0x00000006u, 0x00003ce8u, 0x00003ce6u, 0x00000e59u, 0x0003003eu, 0x00003cd7u, 0x00003ce8u, 0x0003003eu, 0x00003cd8u, 0x00003ce8u, 0x0004003du, 0x00000006u, 0x00003cebu, 0x00003cdfu, 0x000500c7u, 0x00000006u, 0x00003cecu, 0x00003cebu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003cedu, 0x00003cecu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003cefu, 0x00003ce8u, 0x00003cedu, 0x0003003eu, 0x00003cd8u, 0x00003cefu, 0x000500c6u, 0x00000006u, 0x00003cf1u, 0x00003cefu, 0x0000048bu, 0x0003003eu, 0x00003cd8u, 0x00003cf1u, 0x00080041u, 0x00000277u, 0x00003cf4u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003cf1u, 0x0004003du, 0x00000229u, 0x00003cf5u, 0x00003cf4u, 0x00040071u, 0x00000006u, 0x00003cf6u, 0x00003cf5u, 0x0003003eu, 0x00003cd9u, 0x00003cf6u, 0x0004007cu, 0x00000008u, 0x00003cf8u, 0x00003cf6u, 0x00070050u, 0x00000009u, 0x00003cf9u, 0x00003cf8u, 0x00003cf8u, 0x00003cf8u, 0x00003cf8u, 0x0003003eu, 0x00003cdau, 0x00003cf9u, 0x0003003eu, 0x00002c57u, 0x00003cf9u, 0x00050050u, 0x0000005fu, 0x00002f95u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f96u, 0x00002f95u, 0x0003003eu, 0x00006b77u, 0x00002c04u, 0x0003003eu, 0x00006b78u, 0x00002c07u, 0x0003003eu, 0x00002cf8u, 0x000020f8u, 0x0003003eu, 0x00002cf9u, 0x00002f96u, 0x00050041u, 0x00000007u, 0x00003d02u, 0x00002cf9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d03u, 0x00003d02u, 0x00050084u, 0x00000006u, 0x00003d04u, 0x00002c07u, 0x00003d03u, 0x00050080u, 0x00000006u, 0x00003d05u, 0x00002c04u, 0x00003d04u, 0x0003003eu, 0x00003cfau, 0x00003d05u, 0x00050041u, 0x00000007u, 0x00003d06u, 0x00002cf9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d07u, 0x00003d06u, 0x00050080u, 0x00000006u, 0x00003d09u, 0x00003d05u, 0x00003d07u, 0x0003003eu, 0x00003cfau, 0x00003d09u, 0x000500c7u, 0x00000006u, 0x00003d0bu, 0x00003d09u, 0x00000e59u, 0x0003003eu, 0x00003cfau, 0x00003d0bu, 0x0003003eu, 0x00003cfbu, 0x00003d0bu, 0x0004003du, 0x00000006u, 0x00003d0eu, 0x00003d02u, 0x000500c7u, 0x00000006u, 0x00003d0fu, 0x00003d0eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d10u, 0x00003d0fu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d12u, 0x00003d0bu, 0x00003d10u, 0x0003003eu, 0x00003cfbu, 0x00003d12u, 0x000500c6u, 0x00000006u, 0x00003d14u, 0x00003d12u, 0x0000048bu, 0x0003003eu, 0x00003cfbu, 0x00003d14u, 0x00080041u, 0x00000277u, 0x00003d17u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003d14u, 0x0004003du, 0x00000229u, 0x00003d18u, 0x00003d17u, 0x00040071u, 0x00000006u, 0x00003d19u, 0x00003d18u, 0x0003003eu, 0x00003cfcu, 0x00003d19u, 0x0004007cu, 0x00000008u, 0x00003d1bu, 0x00003d19u, 0x00070050u, 0x00000009u, 0x00003d1cu, 0x00003d1bu, 0x00003d1bu, 0x00003d1bu, 0x00003d1bu, 0x0003003eu, 0x00003cfdu, 0x00003d1cu, 0x0003003eu, 0x00002c5fu, 0x00003d1cu, 0x000200f9u, 0x00002f8au, 0x000200f8u, 0x00002f8au, 0x000700f5u, 0x00000009u, 0x000083ecu, 0x0000839eu, 0x00002f37u, 0x00003d1cu, 0x00002f8bu, 0x000700f5u, 0x00000009u, 0x000082f4u, 0x000082a2u, 0x00002f37u, 0x00003cf9u, 0x00002f8bu, 0x000300f7u, 0x00002f9bu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002f9cu, 0x00002f9bu, 0x000200f8u, 0x00002f9cu, 0x00050050u, 0x0000005fu, 0x00002f9fu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002fa0u, 0x00002f9fu, 0x0003003eu, 0x00006b7bu, 0x00002c04u, 0x0003003eu, 0x00006b7cu, 0x00002c07u, 0x0003003eu, 0x00002cfbu, 0x000020f8u, 0x0003003eu, 0x00002cfcu, 0x00002fa0u, 0x00050041u, 0x00000007u, 0x00003d25u, 0x00002cfcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003d26u, 0x00003d25u, 0x00050084u, 0x00000006u, 0x00003d27u, 0x00002c07u, 0x00003d26u, 0x00050080u, 0x00000006u, 0x00003d28u, 0x00002c04u, 0x00003d27u, 0x0003003eu, 0x00003d1du, 0x00003d28u, 0x00050041u, 0x00000007u, 0x00003d29u, 0x00002cfcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003d2au, 0x00003d29u, 0x00050080u, 0x00000006u, 0x00003d2cu, 0x00003d28u, 0x00003d2au, 0x0003003eu, 0x00003d1du, 0x00003d2cu, 0x000500c7u, 0x00000006u, 0x00003d2eu, 0x00003d2cu, 0x00000e59u, 0x0003003eu, 0x00003d1du, 0x00003d2eu, 0x0003003eu, 0x00003d1eu, 0x00003d2eu, 0x0004003du, 0x00000006u, 0x00003d31u, 0x00003d25u, 0x000500c7u, 0x00000006u, 0x00003d32u, 0x00003d31u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003d33u, 0x00003d32u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003d35u, 0x00003d2eu, 0x00003d33u, 0x0003003eu, 0x00003d1eu, 0x00003d35u, 0x000500c6u, 0x00000006u, 0x00003d37u, 0x00003d35u, 0x0000048bu, 0x0003003eu, 0x00003d1eu, 0x00003d37u, 0x00080041u, 0x00000277u, 0x00003d3au, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003d37u, 0x0004003du, 0x00000229u, 0x00003d3bu, 0x00003d3au, 0x00040071u, 0x00000006u, 0x00003d3cu, 0x00003d3bu, 0x0003003eu, 0x00003d1fu, 0x00003d3cu, 0x0004007cu, 0x00000008u, 0x00003d3eu, 0x00003d3cu, 0x00070050u, 0x00000009u, 0x00003d3fu, 0x00003d3eu, 0x00003d3eu, 0x00003d3eu, 0x00003d3eu, 0x0003003eu, 0x00003d20u, 0x00003d3fu, 0x0003003eu, 0x00002c67u, 0x00003d3fu, 0x000200f9u, 0x00002f9bu, 0x000200f8u, 0x00002f9bu, 0x000700f5u, 0x00000009u, 0x00008468u, 0x00008418u, 0x00002f8au, 0x00003d3fu, 0x00002f9cu, 0x000200f9u, 0x00002f34u, 0x000200f8u, 0x00002f36u, 0x0004007cu, 0x000000a2u, 0x00002f59u, 0x00007f18u, 0x0004007cu, 0x00000006u, 0x00002f5cu, 0x00002c16u, 0x0003003eu, 0x00006b5fu, 0x00002c04u, 0x0003003eu, 0x00006b60u, 0x00002c07u, 0x0003003eu, 0x00002ce2u, 0x000020f8u, 0x0003003eu, 0x00002ce3u, 0x00002f59u, 0x0003003eu, 0x00002ce4u, 0x00002f5cu, 0x00050041u, 0x00000007u, 0x00003bf5u, 0x00002ce3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003bf6u, 0x00003bf5u, 0x00050084u, 0x00000006u, 0x00003bf7u, 0x00002c07u, 0x00003bf6u, 0x00050080u, 0x00000006u, 0x00003bf8u, 0x00002c04u, 0x00003bf7u, 0x0003003eu, 0x00003becu, 0x00003bf8u, 0x00050041u, 0x00000007u, 0x00003bf9u, 0x00002ce3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003bfau, 0x00003bf9u, 0x000500c2u, 0x00000006u, 0x00003bfbu, 0x00003bfau, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003bfdu, 0x00003bf8u, 0x00003bfbu, 0x0003003eu, 0x00003becu, 0x00003bfdu, 0x000500c7u, 0x00000006u, 0x00003bffu, 0x00003bfdu, 0x00000e59u, 0x0003003eu, 0x00003becu, 0x00003bffu, 0x0004003du, 0x00000006u, 0x00003c01u, 0x00003bf9u, 0x000400c8u, 0x00000006u, 0x00003c02u, 0x00003c01u, 0x000500c7u, 0x00000006u, 0x00003c03u, 0x00003c02u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c04u, 0x00003c03u, 0x00000701u, 0x0003003eu, 0x00003bedu, 0x00003c04u, 0x0003003eu, 0x00003beeu, 0x00003bffu, 0x0004003du, 0x00000006u, 0x00003c07u, 0x00003bf5u, 0x000500c7u, 0x00000006u, 0x00003c08u, 0x00003c07u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c09u, 0x00003c08u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003c0bu, 0x00003bffu, 0x00003c09u, 0x0003003eu, 0x00003beeu, 0x00003c0bu, 0x000500c6u, 0x00000006u, 0x00003c0du, 0x00003c0bu, 0x0000048bu, 0x0003003eu, 0x00003beeu, 0x00003c0du, 0x00080041u, 0x00000277u, 0x00003c10u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003c0du, 0x0004003du, 0x00000229u, 0x00003c11u, 0x00003c10u, 0x00040071u, 0x00000006u, 0x00003c12u, 0x00003c11u, 0x0003003eu, 0x00003befu, 0x00003c12u, 0x000500c2u, 0x00000006u, 0x00003c15u, 0x00003c12u, 0x00003c04u, 0x000500c7u, 0x00000006u, 0x00003c16u, 0x00003c15u, 0x00000e7cu, 0x0003003eu, 0x00003befu, 0x00003c16u, 0x000500c4u, 0x00000006u, 0x00003c18u, 0x00002f5cu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003c1au, 0x00003c16u, 0x00003c18u, 0x0003003eu, 0x00003befu, 0x00003c1au, 0x0004007cu, 0x00000008u, 0x00003c1cu, 0x00003c1au, 0x00070050u, 0x00000009u, 0x00003c1du, 0x00003c1cu, 0x00003c1cu, 0x00003c1cu, 0x00003c1cu, 0x0003003eu, 0x00003bf0u, 0x00003c1du, 0x0003003eu, 0x00002c4fu, 0x00003c1du, 0x000300f7u, 0x00002f61u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002f62u, 0x00002f61u, 0x000200f8u, 0x00002f62u, 0x00050050u, 0x0000005fu, 0x00002f65u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002f66u, 0x00002f65u, 0x0003003eu, 0x00006b63u, 0x00002c04u, 0x0003003eu, 0x00006b64u, 0x00002c07u, 0x0003003eu, 0x00002ce6u, 0x000020f8u, 0x0003003eu, 0x00002ce7u, 0x00002f66u, 0x0003003eu, 0x00002ce8u, 0x00002f5cu, 0x00050041u, 0x00000007u, 0x00003c27u, 0x00002ce7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003c28u, 0x00003c27u, 0x00050084u, 0x00000006u, 0x00003c29u, 0x00002c07u, 0x00003c28u, 0x00050080u, 0x00000006u, 0x00003c2au, 0x00002c04u, 0x00003c29u, 0x0003003eu, 0x00003c1eu, 0x00003c2au, 0x00050041u, 0x00000007u, 0x00003c2bu, 0x00002ce7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003c2cu, 0x00003c2bu, 0x000500c2u, 0x00000006u, 0x00003c2du, 0x00003c2cu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003c2fu, 0x00003c2au, 0x00003c2du, 0x0003003eu, 0x00003c1eu, 0x00003c2fu, 0x000500c7u, 0x00000006u, 0x00003c31u, 0x00003c2fu, 0x00000e59u, 0x0003003eu, 0x00003c1eu, 0x00003c31u, 0x0004003du, 0x00000006u, 0x00003c33u, 0x00003c2bu, 0x000400c8u, 0x00000006u, 0x00003c34u, 0x00003c33u, 0x000500c7u, 0x00000006u, 0x00003c35u, 0x00003c34u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c36u, 0x00003c35u, 0x00000701u, 0x0003003eu, 0x00003c1fu, 0x00003c36u, 0x0003003eu, 0x00003c20u, 0x00003c31u, 0x0004003du, 0x00000006u, 0x00003c39u, 0x00003c27u, 0x000500c7u, 0x00000006u, 0x00003c3au, 0x00003c39u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c3bu, 0x00003c3au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003c3du, 0x00003c31u, 0x00003c3bu, 0x0003003eu, 0x00003c20u, 0x00003c3du, 0x000500c6u, 0x00000006u, 0x00003c3fu, 0x00003c3du, 0x0000048bu, 0x0003003eu, 0x00003c20u, 0x00003c3fu, 0x00080041u, 0x00000277u, 0x00003c42u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003c3fu, 0x0004003du, 0x00000229u, 0x00003c43u, 0x00003c42u, 0x00040071u, 0x00000006u, 0x00003c44u, 0x00003c43u, 0x0003003eu, 0x00003c21u, 0x00003c44u, 0x000500c2u, 0x00000006u, 0x00003c47u, 0x00003c44u, 0x00003c36u, 0x000500c7u, 0x00000006u, 0x00003c48u, 0x00003c47u, 0x00000e7cu, 0x0003003eu, 0x00003c21u, 0x00003c48u, 0x000500c5u, 0x00000006u, 0x00003c4cu, 0x00003c48u, 0x00003c18u, 0x0003003eu, 0x00003c21u, 0x00003c4cu, 0x0004007cu, 0x00000008u, 0x00003c4eu, 0x00003c4cu, 0x00070050u, 0x00000009u, 0x00003c4fu, 0x00003c4eu, 0x00003c4eu, 0x00003c4eu, 0x00003c4eu, 0x0003003eu, 0x00003c22u, 0x00003c4fu, 0x0003003eu, 0x00002c57u, 0x00003c4fu, 0x00050050u, 0x0000005fu, 0x00002f6fu, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f70u, 0x00002f6fu, 0x0003003eu, 0x00006b67u, 0x00002c04u, 0x0003003eu, 0x00006b68u, 0x00002c07u, 0x0003003eu, 0x00002ceau, 0x000020f8u, 0x0003003eu, 0x00002cebu, 0x00002f70u, 0x0003003eu, 0x00002cecu, 0x00002f5cu, 0x00050041u, 0x00000007u, 0x00003c59u, 0x00002cebu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003c5au, 0x00003c59u, 0x00050084u, 0x00000006u, 0x00003c5bu, 0x00002c07u, 0x00003c5au, 0x00050080u, 0x00000006u, 0x00003c5cu, 0x00002c04u, 0x00003c5bu, 0x0003003eu, 0x00003c50u, 0x00003c5cu, 0x00050041u, 0x00000007u, 0x00003c5du, 0x00002cebu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003c5eu, 0x00003c5du, 0x000500c2u, 0x00000006u, 0x00003c5fu, 0x00003c5eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003c61u, 0x00003c5cu, 0x00003c5fu, 0x0003003eu, 0x00003c50u, 0x00003c61u, 0x000500c7u, 0x00000006u, 0x00003c63u, 0x00003c61u, 0x00000e59u, 0x0003003eu, 0x00003c50u, 0x00003c63u, 0x0004003du, 0x00000006u, 0x00003c65u, 0x00003c5du, 0x000400c8u, 0x00000006u, 0x00003c66u, 0x00003c65u, 0x000500c7u, 0x00000006u, 0x00003c67u, 0x00003c66u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c68u, 0x00003c67u, 0x00000701u, 0x0003003eu, 0x00003c51u, 0x00003c68u, 0x0003003eu, 0x00003c52u, 0x00003c63u, 0x0004003du, 0x00000006u, 0x00003c6bu, 0x00003c59u, 0x000500c7u, 0x00000006u, 0x00003c6cu, 0x00003c6bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c6du, 0x00003c6cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003c6fu, 0x00003c63u, 0x00003c6du, 0x0003003eu, 0x00003c52u, 0x00003c6fu, 0x000500c6u, 0x00000006u, 0x00003c71u, 0x00003c6fu, 0x0000048bu, 0x0003003eu, 0x00003c52u, 0x00003c71u, 0x00080041u, 0x00000277u, 0x00003c74u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003c71u, 0x0004003du, 0x00000229u, 0x00003c75u, 0x00003c74u, 0x00040071u, 0x00000006u, 0x00003c76u, 0x00003c75u, 0x0003003eu, 0x00003c53u, 0x00003c76u, 0x000500c2u, 0x00000006u, 0x00003c79u, 0x00003c76u, 0x00003c68u, 0x000500c7u, 0x00000006u, 0x00003c7au, 0x00003c79u, 0x00000e7cu, 0x0003003eu, 0x00003c53u, 0x00003c7au, 0x000500c5u, 0x00000006u, 0x00003c7eu, 0x00003c7au, 0x00003c18u, 0x0003003eu, 0x00003c53u, 0x00003c7eu, 0x0004007cu, 0x00000008u, 0x00003c80u, 0x00003c7eu, 0x00070050u, 0x00000009u, 0x00003c81u, 0x00003c80u, 0x00003c80u, 0x00003c80u, 0x00003c80u, 0x0003003eu, 0x00003c54u, 0x00003c81u, 0x0003003eu, 0x00002c5fu, 0x00003c81u, 0x000200f9u, 0x00002f61u, 0x000200f8u, 0x00002f61u, 0x000700f5u, 0x00000009u, 0x000083eau, 0x0000839eu, 0x00002f36u, 0x00003c81u, 0x00002f62u, 0x000700f5u, 0x00000009u, 0x000082f2u, 0x000082a2u, 0x00002f36u, 0x00003c4fu, 0x00002f62u, 0x000300f7u, 0x00002f78u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002f79u, 0x00002f78u, 0x000200f8u, 0x00002f79u, 0x00050050u, 0x0000005fu, 0x00002f7cu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f7du, 0x00002f7cu, 0x0003003eu, 0x00006b6bu, 0x00002c04u, 0x0003003eu, 0x00006b6cu, 0x00002c07u, 0x0003003eu, 0x00002ceeu, 0x000020f8u, 0x0003003eu, 0x00002cefu, 0x00002f7du, 0x0003003eu, 0x00002cf0u, 0x00002f5cu, 0x00050041u, 0x00000007u, 0x00003c8bu, 0x00002cefu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003c8cu, 0x00003c8bu, 0x00050084u, 0x00000006u, 0x00003c8du, 0x00002c07u, 0x00003c8cu, 0x00050080u, 0x00000006u, 0x00003c8eu, 0x00002c04u, 0x00003c8du, 0x0003003eu, 0x00003c82u, 0x00003c8eu, 0x00050041u, 0x00000007u, 0x00003c8fu, 0x00002cefu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003c90u, 0x00003c8fu, 0x000500c2u, 0x00000006u, 0x00003c91u, 0x00003c90u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003c93u, 0x00003c8eu, 0x00003c91u, 0x0003003eu, 0x00003c82u, 0x00003c93u, 0x000500c7u, 0x00000006u, 0x00003c95u, 0x00003c93u, 0x00000e59u, 0x0003003eu, 0x00003c82u, 0x00003c95u, 0x0004003du, 0x00000006u, 0x00003c97u, 0x00003c8fu, 0x000400c8u, 0x00000006u, 0x00003c98u, 0x00003c97u, 0x000500c7u, 0x00000006u, 0x00003c99u, 0x00003c98u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003c9au, 0x00003c99u, 0x00000701u, 0x0003003eu, 0x00003c83u, 0x00003c9au, 0x0003003eu, 0x00003c84u, 0x00003c95u, 0x0004003du, 0x00000006u, 0x00003c9du, 0x00003c8bu, 0x000500c7u, 0x00000006u, 0x00003c9eu, 0x00003c9du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003c9fu, 0x00003c9eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003ca1u, 0x00003c95u, 0x00003c9fu, 0x0003003eu, 0x00003c84u, 0x00003ca1u, 0x000500c6u, 0x00000006u, 0x00003ca3u, 0x00003ca1u, 0x0000048bu, 0x0003003eu, 0x00003c84u, 0x00003ca3u, 0x00080041u, 0x00000277u, 0x00003ca6u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003ca3u, 0x0004003du, 0x00000229u, 0x00003ca7u, 0x00003ca6u, 0x00040071u, 0x00000006u, 0x00003ca8u, 0x00003ca7u, 0x0003003eu, 0x00003c85u, 0x00003ca8u, 0x000500c2u, 0x00000006u, 0x00003cabu, 0x00003ca8u, 0x00003c9au, 0x000500c7u, 0x00000006u, 0x00003cacu, 0x00003cabu, 0x00000e7cu, 0x0003003eu, 0x00003c85u, 0x00003cacu, 0x000500c5u, 0x00000006u, 0x00003cb0u, 0x00003cacu, 0x00003c18u, 0x0003003eu, 0x00003c85u, 0x00003cb0u, 0x0004007cu, 0x00000008u, 0x00003cb2u, 0x00003cb0u, 0x00070050u, 0x00000009u, 0x00003cb3u, 0x00003cb2u, 0x00003cb2u, 0x00003cb2u, 0x00003cb2u, 0x0003003eu, 0x00003c86u, 0x00003cb3u, 0x0003003eu, 0x00002c67u, 0x00003cb3u, 0x000200f9u, 0x00002f78u, 0x000200f8u, 0x00002f78u, 0x000700f5u, 0x00000009u, 0x00008466u, 0x00008418u, 0x00002f61u, 0x00003cb3u, 0x00002f79u, 0x000200f9u, 0x00002f34u, 0x000200f8u, 0x00002f35u, 0x0004007cu, 0x000000a2u, 0x00002f39u, 0x00007f18u, 0x0003003eu, 0x00006b7fu, 0x00002c04u, 0x0003003eu, 0x00006b80u, 0x00002c07u, 0x0003003eu, 0x00002cfeu, 0x000020f8u, 0x0003003eu, 0x00002cffu, 0x00002f39u, 0x00050041u, 0x00000007u, 0x00003b4cu, 0x00002cffu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003b4du, 0x00003b4cu, 0x00050084u, 0x00000006u, 0x00003b4eu, 0x00002c07u, 0x00003b4du, 0x00050080u, 0x00000006u, 0x00003b4fu, 0x00002c04u, 0x00003b4eu, 0x0003003eu, 0x00003b44u, 0x00003b4fu, 0x00050041u, 0x00000007u, 0x00003b50u, 0x00002cffu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003b51u, 0x00003b50u, 0x00050084u, 0x00000006u, 0x00003b52u, 0x00003b51u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003b54u, 0x00003b4fu, 0x00003b52u, 0x0003003eu, 0x00003b44u, 0x00003b54u, 0x000500c7u, 0x00000006u, 0x00003b56u, 0x00003b54u, 0x00000e59u, 0x0003003eu, 0x00003b44u, 0x00003b56u, 0x000500c2u, 0x00000006u, 0x00003b58u, 0x00003b56u, 0x00000212u, 0x0003003eu, 0x00003b45u, 0x00003b58u, 0x0004003du, 0x00000006u, 0x00003b5au, 0x00003b4cu, 0x000500c7u, 0x00000006u, 0x00003b5bu, 0x00003b5au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b5cu, 0x00003b5bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003b5eu, 0x00003b58u, 0x00003b5cu, 0x0003003eu, 0x00003b45u, 0x00003b5eu, 0x000500c6u, 0x00000006u, 0x00003b60u, 0x00003b5eu, 0x00000485u, 0x0003003eu, 0x00003b45u, 0x00003b60u, 0x00080041u, 0x00000270u, 0x00003b63u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003b60u, 0x0004003du, 0x0000022bu, 0x00003b64u, 0x00003b63u, 0x00040071u, 0x00000006u, 0x00003b65u, 0x00003b64u, 0x0003003eu, 0x00003b46u, 0x00003b65u, 0x000500c2u, 0x00000006u, 0x00003b67u, 0x00003b65u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003b68u, 0x00003b67u, 0x000500c7u, 0x00000006u, 0x00003b6au, 0x00003b65u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003b6bu, 0x00003b6au, 0x00050050u, 0x0000005fu, 0x00003b6cu, 0x00003b68u, 0x00003b6bu, 0x0009004fu, 0x00000009u, 0x00003b6du, 0x00003b6cu, 0x00003b6cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003b47u, 0x00003b6du, 0x0003003eu, 0x00002c4fu, 0x00003b6du, 0x000300f7u, 0x00002f3eu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002f3fu, 0x00002f3eu, 0x000200f8u, 0x00002f3fu, 0x00050050u, 0x0000005fu, 0x00002f42u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002f43u, 0x00002f42u, 0x0003003eu, 0x00006b83u, 0x00002c04u, 0x0003003eu, 0x00006b84u, 0x00002c07u, 0x0003003eu, 0x00002d01u, 0x000020f8u, 0x0003003eu, 0x00002d02u, 0x00002f43u, 0x00050041u, 0x00000007u, 0x00003b76u, 0x00002d02u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003b77u, 0x00003b76u, 0x00050084u, 0x00000006u, 0x00003b78u, 0x00002c07u, 0x00003b77u, 0x00050080u, 0x00000006u, 0x00003b79u, 0x00002c04u, 0x00003b78u, 0x0003003eu, 0x00003b6eu, 0x00003b79u, 0x00050041u, 0x00000007u, 0x00003b7au, 0x00002d02u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003b7bu, 0x00003b7au, 0x00050084u, 0x00000006u, 0x00003b7cu, 0x00003b7bu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003b7eu, 0x00003b79u, 0x00003b7cu, 0x0003003eu, 0x00003b6eu, 0x00003b7eu, 0x000500c7u, 0x00000006u, 0x00003b80u, 0x00003b7eu, 0x00000e59u, 0x0003003eu, 0x00003b6eu, 0x00003b80u, 0x000500c2u, 0x00000006u, 0x00003b82u, 0x00003b80u, 0x00000212u, 0x0003003eu, 0x00003b6fu, 0x00003b82u, 0x0004003du, 0x00000006u, 0x00003b84u, 0x00003b76u, 0x000500c7u, 0x00000006u, 0x00003b85u, 0x00003b84u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b86u, 0x00003b85u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003b88u, 0x00003b82u, 0x00003b86u, 0x0003003eu, 0x00003b6fu, 0x00003b88u, 0x000500c6u, 0x00000006u, 0x00003b8au, 0x00003b88u, 0x00000485u, 0x0003003eu, 0x00003b6fu, 0x00003b8au, 0x00080041u, 0x00000270u, 0x00003b8du, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003b8au, 0x0004003du, 0x0000022bu, 0x00003b8eu, 0x00003b8du, 0x00040071u, 0x00000006u, 0x00003b8fu, 0x00003b8eu, 0x0003003eu, 0x00003b70u, 0x00003b8fu, 0x000500c2u, 0x00000006u, 0x00003b91u, 0x00003b8fu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003b92u, 0x00003b91u, 0x000500c7u, 0x00000006u, 0x00003b94u, 0x00003b8fu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003b95u, 0x00003b94u, 0x00050050u, 0x0000005fu, 0x00003b96u, 0x00003b92u, 0x00003b95u, 0x0009004fu, 0x00000009u, 0x00003b97u, 0x00003b96u, 0x00003b96u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003b71u, 0x00003b97u, 0x0003003eu, 0x00002c57u, 0x00003b97u, 0x00050050u, 0x0000005fu, 0x00002f49u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f4au, 0x00002f49u, 0x0003003eu, 0x00006b87u, 0x00002c04u, 0x0003003eu, 0x00006b88u, 0x00002c07u, 0x0003003eu, 0x00002d04u, 0x000020f8u, 0x0003003eu, 0x00002d05u, 0x00002f4au, 0x00050041u, 0x00000007u, 0x00003ba0u, 0x00002d05u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003ba1u, 0x00003ba0u, 0x00050084u, 0x00000006u, 0x00003ba2u, 0x00002c07u, 0x00003ba1u, 0x00050080u, 0x00000006u, 0x00003ba3u, 0x00002c04u, 0x00003ba2u, 0x0003003eu, 0x00003b98u, 0x00003ba3u, 0x00050041u, 0x00000007u, 0x00003ba4u, 0x00002d05u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ba5u, 0x00003ba4u, 0x00050084u, 0x00000006u, 0x00003ba6u, 0x00003ba5u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003ba8u, 0x00003ba3u, 0x00003ba6u, 0x0003003eu, 0x00003b98u, 0x00003ba8u, 0x000500c7u, 0x00000006u, 0x00003baau, 0x00003ba8u, 0x00000e59u, 0x0003003eu, 0x00003b98u, 0x00003baau, 0x000500c2u, 0x00000006u, 0x00003bacu, 0x00003baau, 0x00000212u, 0x0003003eu, 0x00003b99u, 0x00003bacu, 0x0004003du, 0x00000006u, 0x00003baeu, 0x00003ba0u, 0x000500c7u, 0x00000006u, 0x00003bafu, 0x00003baeu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003bb0u, 0x00003bafu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003bb2u, 0x00003bacu, 0x00003bb0u, 0x0003003eu, 0x00003b99u, 0x00003bb2u, 0x000500c6u, 0x00000006u, 0x00003bb4u, 0x00003bb2u, 0x00000485u, 0x0003003eu, 0x00003b99u, 0x00003bb4u, 0x00080041u, 0x00000270u, 0x00003bb7u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003bb4u, 0x0004003du, 0x0000022bu, 0x00003bb8u, 0x00003bb7u, 0x00040071u, 0x00000006u, 0x00003bb9u, 0x00003bb8u, 0x0003003eu, 0x00003b9au, 0x00003bb9u, 0x000500c2u, 0x00000006u, 0x00003bbbu, 0x00003bb9u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003bbcu, 0x00003bbbu, 0x000500c7u, 0x00000006u, 0x00003bbeu, 0x00003bb9u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003bbfu, 0x00003bbeu, 0x00050050u, 0x0000005fu, 0x00003bc0u, 0x00003bbcu, 0x00003bbfu, 0x0009004fu, 0x00000009u, 0x00003bc1u, 0x00003bc0u, 0x00003bc0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003b9bu, 0x00003bc1u, 0x0003003eu, 0x00002c5fu, 0x00003bc1u, 0x000200f9u, 0x00002f3eu, 0x000200f8u, 0x00002f3eu, 0x000700f5u, 0x00000009u, 0x000083e8u, 0x0000839eu, 0x00002f35u, 0x00003bc1u, 0x00002f3fu, 0x000700f5u, 0x00000009u, 0x000082f0u, 0x000082a2u, 0x00002f35u, 0x00003b97u, 0x00002f3fu, 0x000300f7u, 0x00002f4fu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002f50u, 0x00002f4fu, 0x000200f8u, 0x00002f50u, 0x00050050u, 0x0000005fu, 0x00002f53u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f54u, 0x00002f53u, 0x0003003eu, 0x00006b8bu, 0x00002c04u, 0x0003003eu, 0x00006b8cu, 0x00002c07u, 0x0003003eu, 0x00002d07u, 0x000020f8u, 0x0003003eu, 0x00002d08u, 0x00002f54u, 0x00050041u, 0x00000007u, 0x00003bcau, 0x00002d08u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003bcbu, 0x00003bcau, 0x00050084u, 0x00000006u, 0x00003bccu, 0x00002c07u, 0x00003bcbu, 0x00050080u, 0x00000006u, 0x00003bcdu, 0x00002c04u, 0x00003bccu, 0x0003003eu, 0x00003bc2u, 0x00003bcdu, 0x00050041u, 0x00000007u, 0x00003bceu, 0x00002d08u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003bcfu, 0x00003bceu, 0x00050084u, 0x00000006u, 0x00003bd0u, 0x00003bcfu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003bd2u, 0x00003bcdu, 0x00003bd0u, 0x0003003eu, 0x00003bc2u, 0x00003bd2u, 0x000500c7u, 0x00000006u, 0x00003bd4u, 0x00003bd2u, 0x00000e59u, 0x0003003eu, 0x00003bc2u, 0x00003bd4u, 0x000500c2u, 0x00000006u, 0x00003bd6u, 0x00003bd4u, 0x00000212u, 0x0003003eu, 0x00003bc3u, 0x00003bd6u, 0x0004003du, 0x00000006u, 0x00003bd8u, 0x00003bcau, 0x000500c7u, 0x00000006u, 0x00003bd9u, 0x00003bd8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003bdau, 0x00003bd9u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003bdcu, 0x00003bd6u, 0x00003bdau, 0x0003003eu, 0x00003bc3u, 0x00003bdcu, 0x000500c6u, 0x00000006u, 0x00003bdeu, 0x00003bdcu, 0x00000485u, 0x0003003eu, 0x00003bc3u, 0x00003bdeu, 0x00080041u, 0x00000270u, 0x00003be1u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003bdeu, 0x0004003du, 0x0000022bu, 0x00003be2u, 0x00003be1u, 0x00040071u, 0x00000006u, 0x00003be3u, 0x00003be2u, 0x0003003eu, 0x00003bc4u, 0x00003be3u, 0x000500c2u, 0x00000006u, 0x00003be5u, 0x00003be3u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003be6u, 0x00003be5u, 0x000500c7u, 0x00000006u, 0x00003be8u, 0x00003be3u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003be9u, 0x00003be8u, 0x00050050u, 0x0000005fu, 0x00003beau, 0x00003be6u, 0x00003be9u, 0x0009004fu, 0x00000009u, 0x00003bebu, 0x00003beau, 0x00003beau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003bc5u, 0x00003bebu, 0x0003003eu, 0x00002c67u, 0x00003bebu, 0x000200f9u, 0x00002f4fu, 0x000200f8u, 0x00002f4fu, 0x000700f5u, 0x00000009u, 0x00008464u, 0x00008418u, 0x00002f3eu, 0x00003bebu, 0x00002f50u, 0x000200f9u, 0x00002f34u, 0x000200f8u, 0x00002f34u, 0x000900f5u, 0x00000009u, 0x00008463u, 0x00008464u, 0x00002f4fu, 0x00008466u, 0x00002f78u, 0x00008468u, 0x00002f9bu, 0x000900f5u, 0x00000009u, 0x000083e6u, 0x000083e8u, 0x00002f4fu, 0x000083eau, 0x00002f78u, 0x000083ecu, 0x00002f9bu, 0x000900f5u, 0x00000009u, 0x0000836bu, 0x00003b6du, 0x00002f4fu, 0x00003c1du, 0x00002f78u, 0x00003cd6u, 0x00002f9bu, 0x000900f5u, 0x00000009u, 0x000082eeu, 0x000082f0u, 0x00002f4fu, 0x000082f2u, 0x00002f78u, 0x000082f4u, 0x00002f9bu, 0x000200f9u, 0x00002e78u, 0x000200f8u, 0x00002e7au, 0x000500c3u, 0x00000008u, 0x00002f06u, 0x00007e8fu, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002f07u, 0x00002f06u, 0x0003003eu, 0x00002ccfu, 0x00002f07u, 0x00050082u, 0x00000008u, 0x00002f0bu, 0x00007ecdu, 0x00007e8fu, 0x00050080u, 0x00000008u, 0x00002f0cu, 0x00007ecdu, 0x00002f0bu, 0x000500c3u, 0x00000008u, 0x00002f0du, 0x00002f0cu, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002f0eu, 0x00002f0du, 0x0003003eu, 0x00002cd0u, 0x00002f0eu, 0x00050050u, 0x0000005fu, 0x00002f11u, 0x00007e8fu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002f12u, 0x00002f11u, 0x0003003eu, 0x00006b4fu, 0x00002c04u, 0x0003003eu, 0x00006b50u, 0x00002c07u, 0x0003003eu, 0x00002cd2u, 0x000020f8u, 0x0003003eu, 0x00002cd3u, 0x00002f12u, 0x0003003eu, 0x00002cd4u, 0x00002f07u, 0x00050041u, 0x00000007u, 0x00003a26u, 0x00002cd3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003a27u, 0x00003a26u, 0x00050084u, 0x00000006u, 0x00003a28u, 0x00002c07u, 0x00003a27u, 0x00050080u, 0x00000006u, 0x00003a29u, 0x00002c04u, 0x00003a28u, 0x0003003eu, 0x00003a18u, 0x00003a29u, 0x00050041u, 0x00000007u, 0x00003a2bu, 0x00002cd3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003a2cu, 0x00003a2bu, 0x00050080u, 0x00000006u, 0x00003a2du, 0x00003a29u, 0x00003a2cu, 0x0003003eu, 0x00003a19u, 0x00003a2du, 0x000500c7u, 0x00000006u, 0x00003a2fu, 0x00003a2du, 0x00000f0bu, 0x0003003eu, 0x00003a19u, 0x00003a2fu, 0x00050084u, 0x00000006u, 0x00003a32u, 0x00002f07u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003a33u, 0x00003a29u, 0x00003a32u, 0x0003003eu, 0x00003a1au, 0x00003a33u, 0x000500c7u, 0x00000006u, 0x00003a35u, 0x00003a33u, 0x00000f0bu, 0x0003003eu, 0x00003a1au, 0x00003a35u, 0x0003003eu, 0x00003a1bu, 0x00003a2fu, 0x0004003du, 0x00000006u, 0x00003a38u, 0x00003a26u, 0x000500c7u, 0x00000006u, 0x00003a39u, 0x00003a38u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a3au, 0x00003a39u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003a3cu, 0x00003a2fu, 0x00003a3au, 0x0003003eu, 0x00003a1bu, 0x00003a3cu, 0x000500c6u, 0x00000006u, 0x00003a3eu, 0x00003a3cu, 0x0000048bu, 0x0003003eu, 0x00003a1bu, 0x00003a3eu, 0x000500c2u, 0x00000006u, 0x00003a40u, 0x00003a35u, 0x00000212u, 0x0003003eu, 0x00003a1cu, 0x00003a40u, 0x0004003du, 0x00000006u, 0x00003a42u, 0x00003a26u, 0x000500c7u, 0x00000006u, 0x00003a43u, 0x00003a42u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a44u, 0x00003a43u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003a46u, 0x00003a40u, 0x00003a44u, 0x0003003eu, 0x00003a1cu, 0x00003a46u, 0x000500c6u, 0x00000006u, 0x00003a48u, 0x00003a46u, 0x00000485u, 0x0003003eu, 0x00003a1cu, 0x00003a48u, 0x000500c5u, 0x00000006u, 0x00003a4bu, 0x00003a3eu, 0x00000f34u, 0x00080041u, 0x00000277u, 0x00003a4cu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003a4bu, 0x0004003du, 0x00000229u, 0x00003a4du, 0x00003a4cu, 0x00040071u, 0x00000006u, 0x00003a4eu, 0x00003a4du, 0x0004007cu, 0x00000008u, 0x00003a4fu, 0x00003a4eu, 0x0003003eu, 0x00003a1du, 0x00003a4fu, 0x00080041u, 0x00000270u, 0x00003a52u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003a48u, 0x0004003du, 0x0000022bu, 0x00003a53u, 0x00003a52u, 0x00040071u, 0x00000006u, 0x00003a54u, 0x00003a53u, 0x0004007cu, 0x00000008u, 0x00003a55u, 0x00003a54u, 0x0003003eu, 0x00003a1eu, 0x00003a55u, 0x000500c3u, 0x00000008u, 0x00003a57u, 0x00003a55u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003a58u, 0x00003a57u, 0x0000038bu, 0x0003003eu, 0x00003a1fu, 0x00003a58u, 0x000500c3u, 0x00000008u, 0x00003a5au, 0x00003a55u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003a5bu, 0x00003a5au, 0x0000038bu, 0x0003003eu, 0x00003a20u, 0x00003a5bu, 0x00050082u, 0x00000008u, 0x00003a5du, 0x00003a58u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003a5fu, 0x00003a5bu, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003a62u, 0x00003a5du, 0x00003a5fu, 0x00003a4fu, 0x00003a4fu, 0x0003003eu, 0x00003a21u, 0x00003a62u, 0x0003003eu, 0x00002c4fu, 0x00003a62u, 0x000300f7u, 0x00002f18u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002f19u, 0x00002f18u, 0x000200f8u, 0x00002f19u, 0x00050050u, 0x0000005fu, 0x00002f1cu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002f1du, 0x00002f1cu, 0x0003003eu, 0x00006b53u, 0x00002c04u, 0x0003003eu, 0x00006b54u, 0x00002c07u, 0x0003003eu, 0x00002cd6u, 0x000020f8u, 0x0003003eu, 0x00002cd7u, 0x00002f1du, 0x0003003eu, 0x00002cd8u, 0x00002f0eu, 0x00050041u, 0x00000007u, 0x00003a71u, 0x00002cd7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003a72u, 0x00003a71u, 0x00050084u, 0x00000006u, 0x00003a73u, 0x00002c07u, 0x00003a72u, 0x00050080u, 0x00000006u, 0x00003a74u, 0x00002c04u, 0x00003a73u, 0x0003003eu, 0x00003a63u, 0x00003a74u, 0x00050041u, 0x00000007u, 0x00003a76u, 0x00002cd7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003a77u, 0x00003a76u, 0x00050080u, 0x00000006u, 0x00003a78u, 0x00003a74u, 0x00003a77u, 0x0003003eu, 0x00003a64u, 0x00003a78u, 0x000500c7u, 0x00000006u, 0x00003a7au, 0x00003a78u, 0x00000f0bu, 0x0003003eu, 0x00003a64u, 0x00003a7au, 0x00050084u, 0x00000006u, 0x00003a7du, 0x00002f0eu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003a7eu, 0x00003a74u, 0x00003a7du, 0x0003003eu, 0x00003a65u, 0x00003a7eu, 0x000500c7u, 0x00000006u, 0x00003a80u, 0x00003a7eu, 0x00000f0bu, 0x0003003eu, 0x00003a65u, 0x00003a80u, 0x0003003eu, 0x00003a66u, 0x00003a7au, 0x0004003du, 0x00000006u, 0x00003a83u, 0x00003a71u, 0x000500c7u, 0x00000006u, 0x00003a84u, 0x00003a83u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a85u, 0x00003a84u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003a87u, 0x00003a7au, 0x00003a85u, 0x0003003eu, 0x00003a66u, 0x00003a87u, 0x000500c6u, 0x00000006u, 0x00003a89u, 0x00003a87u, 0x0000048bu, 0x0003003eu, 0x00003a66u, 0x00003a89u, 0x000500c2u, 0x00000006u, 0x00003a8bu, 0x00003a80u, 0x00000212u, 0x0003003eu, 0x00003a67u, 0x00003a8bu, 0x0004003du, 0x00000006u, 0x00003a8du, 0x00003a71u, 0x000500c7u, 0x00000006u, 0x00003a8eu, 0x00003a8du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003a8fu, 0x00003a8eu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003a91u, 0x00003a8bu, 0x00003a8fu, 0x0003003eu, 0x00003a67u, 0x00003a91u, 0x000500c6u, 0x00000006u, 0x00003a93u, 0x00003a91u, 0x00000485u, 0x0003003eu, 0x00003a67u, 0x00003a93u, 0x000500c5u, 0x00000006u, 0x00003a96u, 0x00003a89u, 0x00000f34u, 0x00080041u, 0x00000277u, 0x00003a97u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003a96u, 0x0004003du, 0x00000229u, 0x00003a98u, 0x00003a97u, 0x00040071u, 0x00000006u, 0x00003a99u, 0x00003a98u, 0x0004007cu, 0x00000008u, 0x00003a9au, 0x00003a99u, 0x0003003eu, 0x00003a68u, 0x00003a9au, 0x00080041u, 0x00000270u, 0x00003a9du, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003a93u, 0x0004003du, 0x0000022bu, 0x00003a9eu, 0x00003a9du, 0x00040071u, 0x00000006u, 0x00003a9fu, 0x00003a9eu, 0x0004007cu, 0x00000008u, 0x00003aa0u, 0x00003a9fu, 0x0003003eu, 0x00003a69u, 0x00003aa0u, 0x000500c3u, 0x00000008u, 0x00003aa2u, 0x00003aa0u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003aa3u, 0x00003aa2u, 0x0000038bu, 0x0003003eu, 0x00003a6au, 0x00003aa3u, 0x000500c3u, 0x00000008u, 0x00003aa5u, 0x00003aa0u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003aa6u, 0x00003aa5u, 0x0000038bu, 0x0003003eu, 0x00003a6bu, 0x00003aa6u, 0x00050082u, 0x00000008u, 0x00003aa8u, 0x00003aa3u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003aaau, 0x00003aa6u, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003aadu, 0x00003aa8u, 0x00003aaau, 0x00003a9au, 0x00003a9au, 0x0003003eu, 0x00003a6cu, 0x00003aadu, 0x0003003eu, 0x00002c57u, 0x00003aadu, 0x00050050u, 0x0000005fu, 0x00002f24u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f25u, 0x00002f24u, 0x0003003eu, 0x00006b57u, 0x00002c04u, 0x0003003eu, 0x00006b58u, 0x00002c07u, 0x0003003eu, 0x00002cdau, 0x000020f8u, 0x0003003eu, 0x00002cdbu, 0x00002f25u, 0x0003003eu, 0x00002cdcu, 0x00002f07u, 0x00050041u, 0x00000007u, 0x00003abcu, 0x00002cdbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003abdu, 0x00003abcu, 0x00050084u, 0x00000006u, 0x00003abeu, 0x00002c07u, 0x00003abdu, 0x00050080u, 0x00000006u, 0x00003abfu, 0x00002c04u, 0x00003abeu, 0x0003003eu, 0x00003aaeu, 0x00003abfu, 0x00050041u, 0x00000007u, 0x00003ac1u, 0x00002cdbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003ac2u, 0x00003ac1u, 0x00050080u, 0x00000006u, 0x00003ac3u, 0x00003abfu, 0x00003ac2u, 0x0003003eu, 0x00003aafu, 0x00003ac3u, 0x000500c7u, 0x00000006u, 0x00003ac5u, 0x00003ac3u, 0x00000f0bu, 0x0003003eu, 0x00003aafu, 0x00003ac5u, 0x00050080u, 0x00000006u, 0x00003ac9u, 0x00003abfu, 0x00003a32u, 0x0003003eu, 0x00003ab0u, 0x00003ac9u, 0x000500c7u, 0x00000006u, 0x00003acbu, 0x00003ac9u, 0x00000f0bu, 0x0003003eu, 0x00003ab0u, 0x00003acbu, 0x0003003eu, 0x00003ab1u, 0x00003ac5u, 0x0004003du, 0x00000006u, 0x00003aceu, 0x00003abcu, 0x000500c7u, 0x00000006u, 0x00003acfu, 0x00003aceu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003ad0u, 0x00003acfu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003ad2u, 0x00003ac5u, 0x00003ad0u, 0x0003003eu, 0x00003ab1u, 0x00003ad2u, 0x000500c6u, 0x00000006u, 0x00003ad4u, 0x00003ad2u, 0x0000048bu, 0x0003003eu, 0x00003ab1u, 0x00003ad4u, 0x000500c2u, 0x00000006u, 0x00003ad6u, 0x00003acbu, 0x00000212u, 0x0003003eu, 0x00003ab2u, 0x00003ad6u, 0x0004003du, 0x00000006u, 0x00003ad8u, 0x00003abcu, 0x000500c7u, 0x00000006u, 0x00003ad9u, 0x00003ad8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003adau, 0x00003ad9u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003adcu, 0x00003ad6u, 0x00003adau, 0x0003003eu, 0x00003ab2u, 0x00003adcu, 0x000500c6u, 0x00000006u, 0x00003adeu, 0x00003adcu, 0x00000485u, 0x0003003eu, 0x00003ab2u, 0x00003adeu, 0x000500c5u, 0x00000006u, 0x00003ae1u, 0x00003ad4u, 0x00000f34u, 0x00080041u, 0x00000277u, 0x00003ae2u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003ae1u, 0x0004003du, 0x00000229u, 0x00003ae3u, 0x00003ae2u, 0x00040071u, 0x00000006u, 0x00003ae4u, 0x00003ae3u, 0x0004007cu, 0x00000008u, 0x00003ae5u, 0x00003ae4u, 0x0003003eu, 0x00003ab3u, 0x00003ae5u, 0x00080041u, 0x00000270u, 0x00003ae8u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003adeu, 0x0004003du, 0x0000022bu, 0x00003ae9u, 0x00003ae8u, 0x00040071u, 0x00000006u, 0x00003aeau, 0x00003ae9u, 0x0004007cu, 0x00000008u, 0x00003aebu, 0x00003aeau, 0x0003003eu, 0x00003ab4u, 0x00003aebu, 0x000500c3u, 0x00000008u, 0x00003aedu, 0x00003aebu, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003aeeu, 0x00003aedu, 0x0000038bu, 0x0003003eu, 0x00003ab5u, 0x00003aeeu, 0x000500c3u, 0x00000008u, 0x00003af0u, 0x00003aebu, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003af1u, 0x00003af0u, 0x0000038bu, 0x0003003eu, 0x00003ab6u, 0x00003af1u, 0x00050082u, 0x00000008u, 0x00003af3u, 0x00003aeeu, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003af5u, 0x00003af1u, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003af8u, 0x00003af3u, 0x00003af5u, 0x00003ae5u, 0x00003ae5u, 0x0003003eu, 0x00003ab7u, 0x00003af8u, 0x0003003eu, 0x00002c5fu, 0x00003af8u, 0x00050050u, 0x0000005fu, 0x00002f2cu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f2du, 0x00002f2cu, 0x0003003eu, 0x00006b5bu, 0x00002c04u, 0x0003003eu, 0x00006b5cu, 0x00002c07u, 0x0003003eu, 0x00002cdeu, 0x000020f8u, 0x0003003eu, 0x00002cdfu, 0x00002f2du, 0x0003003eu, 0x00002ce0u, 0x00002f0eu, 0x00050041u, 0x00000007u, 0x00003b07u, 0x00002cdfu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003b08u, 0x00003b07u, 0x00050084u, 0x00000006u, 0x00003b09u, 0x00002c07u, 0x00003b08u, 0x00050080u, 0x00000006u, 0x00003b0au, 0x00002c04u, 0x00003b09u, 0x0003003eu, 0x00003af9u, 0x00003b0au, 0x00050041u, 0x00000007u, 0x00003b0cu, 0x00002cdfu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003b0du, 0x00003b0cu, 0x00050080u, 0x00000006u, 0x00003b0eu, 0x00003b0au, 0x00003b0du, 0x0003003eu, 0x00003afau, 0x00003b0eu, 0x000500c7u, 0x00000006u, 0x00003b10u, 0x00003b0eu, 0x00000f0bu, 0x0003003eu, 0x00003afau, 0x00003b10u, 0x00050080u, 0x00000006u, 0x00003b14u, 0x00003b0au, 0x00003a7du, 0x0003003eu, 0x00003afbu, 0x00003b14u, 0x000500c7u, 0x00000006u, 0x00003b16u, 0x00003b14u, 0x00000f0bu, 0x0003003eu, 0x00003afbu, 0x00003b16u, 0x0003003eu, 0x00003afcu, 0x00003b10u, 0x0004003du, 0x00000006u, 0x00003b19u, 0x00003b07u, 0x000500c7u, 0x00000006u, 0x00003b1au, 0x00003b19u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b1bu, 0x00003b1au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003b1du, 0x00003b10u, 0x00003b1bu, 0x0003003eu, 0x00003afcu, 0x00003b1du, 0x000500c6u, 0x00000006u, 0x00003b1fu, 0x00003b1du, 0x0000048bu, 0x0003003eu, 0x00003afcu, 0x00003b1fu, 0x000500c2u, 0x00000006u, 0x00003b21u, 0x00003b16u, 0x00000212u, 0x0003003eu, 0x00003afdu, 0x00003b21u, 0x0004003du, 0x00000006u, 0x00003b23u, 0x00003b07u, 0x000500c7u, 0x00000006u, 0x00003b24u, 0x00003b23u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003b25u, 0x00003b24u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003b27u, 0x00003b21u, 0x00003b25u, 0x0003003eu, 0x00003afdu, 0x00003b27u, 0x000500c6u, 0x00000006u, 0x00003b29u, 0x00003b27u, 0x00000485u, 0x0003003eu, 0x00003afdu, 0x00003b29u, 0x000500c5u, 0x00000006u, 0x00003b2cu, 0x00003b1fu, 0x00000f34u, 0x00080041u, 0x00000277u, 0x00003b2du, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003b2cu, 0x0004003du, 0x00000229u, 0x00003b2eu, 0x00003b2du, 0x00040071u, 0x00000006u, 0x00003b2fu, 0x00003b2eu, 0x0004007cu, 0x00000008u, 0x00003b30u, 0x00003b2fu, 0x0003003eu, 0x00003afeu, 0x00003b30u, 0x00080041u, 0x00000270u, 0x00003b33u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003b29u, 0x0004003du, 0x0000022bu, 0x00003b34u, 0x00003b33u, 0x00040071u, 0x00000006u, 0x00003b35u, 0x00003b34u, 0x0004007cu, 0x00000008u, 0x00003b36u, 0x00003b35u, 0x0003003eu, 0x00003affu, 0x00003b36u, 0x000500c3u, 0x00000008u, 0x00003b38u, 0x00003b36u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00003b39u, 0x00003b38u, 0x0000038bu, 0x0003003eu, 0x00003b00u, 0x00003b39u, 0x000500c3u, 0x00000008u, 0x00003b3bu, 0x00003b36u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00003b3cu, 0x00003b3bu, 0x0000038bu, 0x0003003eu, 0x00003b01u, 0x00003b3cu, 0x00050082u, 0x00000008u, 0x00003b3eu, 0x00003b39u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00003b40u, 0x00003b3cu, 0x00000623u, 0x00070050u, 0x00000009u, 0x00003b43u, 0x00003b3eu, 0x00003b40u, 0x00003b30u, 0x00003b30u, 0x0003003eu, 0x00003b02u, 0x00003b43u, 0x0003003eu, 0x00002c67u, 0x00003b43u, 0x000200f9u, 0x00002f18u, 0x000200f8u, 0x00002f18u, 0x000700f5u, 0x00000009u, 0x00008462u, 0x00008418u, 0x00002e7au, 0x00003b43u, 0x00002f19u, 0x000700f5u, 0x00000009u, 0x000083e5u, 0x0000839eu, 0x00002e7au, 0x00003af8u, 0x00002f19u, 0x000700f5u, 0x00000009u, 0x000082edu, 0x000082a2u, 0x00002e7au, 0x00003aadu, 0x00002f19u, 0x000200f9u, 0x00002e78u, 0x000200f8u, 0x00002e79u, 0x000300f7u, 0x00002e80u, 0x00000000u, 0x000b00fbu, 0x00002c11u, 0x00002e80u, 0x00000000u, 0x00002e81u, 0x00000001u, 0x00002e82u, 0x00000002u, 0x00002e83u, 0x00000003u, 0x00002e84u, 0x000200f8u, 0x00002e84u, 0x0004007cu, 0x000000a2u, 0x00002ee6u, 0x00007f18u, 0x0003003eu, 0x00006b3fu, 0x00002c04u, 0x0003003eu, 0x00006b40u, 0x00002c07u, 0x0003003eu, 0x00002cc4u, 0x000020f8u, 0x0003003eu, 0x00002cc5u, 0x00002ee6u, 0x00050041u, 0x00000007u, 0x00003949u, 0x00002cc5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000394au, 0x00003949u, 0x00050084u, 0x00000006u, 0x0000394bu, 0x00002c07u, 0x0000394au, 0x00050080u, 0x00000006u, 0x0000394cu, 0x00002c04u, 0x0000394bu, 0x0003003eu, 0x00003940u, 0x0000394cu, 0x00050041u, 0x00000007u, 0x0000394du, 0x00002cc5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000394eu, 0x0000394du, 0x00050084u, 0x00000006u, 0x0000394fu, 0x0000394eu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003951u, 0x0000394cu, 0x0000394fu, 0x0003003eu, 0x00003940u, 0x00003951u, 0x000500c7u, 0x00000006u, 0x00003953u, 0x00003951u, 0x00000f0bu, 0x0003003eu, 0x00003940u, 0x00003953u, 0x000500c2u, 0x00000006u, 0x00003955u, 0x00003953u, 0x00000212u, 0x0003003eu, 0x00003941u, 0x00003955u, 0x0004003du, 0x00000006u, 0x00003957u, 0x00003949u, 0x000500c7u, 0x00000006u, 0x00003958u, 0x00003957u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003959u, 0x00003958u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000395bu, 0x00003955u, 0x00003959u, 0x0003003eu, 0x00003941u, 0x0000395bu, 0x000500c6u, 0x00000006u, 0x0000395du, 0x0000395bu, 0x00000485u, 0x0003003eu, 0x00003941u, 0x0000395du, 0x00080041u, 0x00000270u, 0x00003960u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000395du, 0x0004003du, 0x0000022bu, 0x00003961u, 0x00003960u, 0x00040071u, 0x00000006u, 0x00003962u, 0x00003961u, 0x0003003eu, 0x00003942u, 0x00003962u, 0x000500c5u, 0x00000006u, 0x00003965u, 0x0000395du, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x00003966u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003965u, 0x0004003du, 0x0000022bu, 0x00003967u, 0x00003966u, 0x00040071u, 0x00000006u, 0x00003968u, 0x00003967u, 0x0003003eu, 0x00003943u, 0x00003968u, 0x000500c2u, 0x00000006u, 0x0000396au, 0x00003962u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000396bu, 0x0000396au, 0x000500c7u, 0x00000006u, 0x0000396du, 0x00003962u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000396eu, 0x0000396du, 0x000500c2u, 0x00000006u, 0x00003970u, 0x00003968u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003971u, 0x00003970u, 0x000500c7u, 0x00000006u, 0x00003973u, 0x00003968u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003974u, 0x00003973u, 0x00070050u, 0x00000009u, 0x00003975u, 0x0000396bu, 0x0000396eu, 0x00003971u, 0x00003974u, 0x0003003eu, 0x00003944u, 0x00003975u, 0x0003003eu, 0x00002c4fu, 0x00003975u, 0x000300f7u, 0x00002eebu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002eecu, 0x00002eebu, 0x000200f8u, 0x00002eecu, 0x00050050u, 0x0000005fu, 0x00002eefu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002ef0u, 0x00002eefu, 0x0003003eu, 0x00006b43u, 0x00002c04u, 0x0003003eu, 0x00006b44u, 0x00002c07u, 0x0003003eu, 0x00002cc7u, 0x000020f8u, 0x0003003eu, 0x00002cc8u, 0x00002ef0u, 0x00050041u, 0x00000007u, 0x0000397fu, 0x00002cc8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003980u, 0x0000397fu, 0x00050084u, 0x00000006u, 0x00003981u, 0x00002c07u, 0x00003980u, 0x00050080u, 0x00000006u, 0x00003982u, 0x00002c04u, 0x00003981u, 0x0003003eu, 0x00003976u, 0x00003982u, 0x00050041u, 0x00000007u, 0x00003983u, 0x00002cc8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003984u, 0x00003983u, 0x00050084u, 0x00000006u, 0x00003985u, 0x00003984u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003987u, 0x00003982u, 0x00003985u, 0x0003003eu, 0x00003976u, 0x00003987u, 0x000500c7u, 0x00000006u, 0x00003989u, 0x00003987u, 0x00000f0bu, 0x0003003eu, 0x00003976u, 0x00003989u, 0x000500c2u, 0x00000006u, 0x0000398bu, 0x00003989u, 0x00000212u, 0x0003003eu, 0x00003977u, 0x0000398bu, 0x0004003du, 0x00000006u, 0x0000398du, 0x0000397fu, 0x000500c7u, 0x00000006u, 0x0000398eu, 0x0000398du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000398fu, 0x0000398eu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003991u, 0x0000398bu, 0x0000398fu, 0x0003003eu, 0x00003977u, 0x00003991u, 0x000500c6u, 0x00000006u, 0x00003993u, 0x00003991u, 0x00000485u, 0x0003003eu, 0x00003977u, 0x00003993u, 0x00080041u, 0x00000270u, 0x00003996u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003993u, 0x0004003du, 0x0000022bu, 0x00003997u, 0x00003996u, 0x00040071u, 0x00000006u, 0x00003998u, 0x00003997u, 0x0003003eu, 0x00003978u, 0x00003998u, 0x000500c5u, 0x00000006u, 0x0000399bu, 0x00003993u, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x0000399cu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000399bu, 0x0004003du, 0x0000022bu, 0x0000399du, 0x0000399cu, 0x00040071u, 0x00000006u, 0x0000399eu, 0x0000399du, 0x0003003eu, 0x00003979u, 0x0000399eu, 0x000500c2u, 0x00000006u, 0x000039a0u, 0x00003998u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039a1u, 0x000039a0u, 0x000500c7u, 0x00000006u, 0x000039a3u, 0x00003998u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000039a4u, 0x000039a3u, 0x000500c2u, 0x00000006u, 0x000039a6u, 0x0000399eu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039a7u, 0x000039a6u, 0x000500c7u, 0x00000006u, 0x000039a9u, 0x0000399eu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000039aau, 0x000039a9u, 0x00070050u, 0x00000009u, 0x000039abu, 0x000039a1u, 0x000039a4u, 0x000039a7u, 0x000039aau, 0x0003003eu, 0x0000397au, 0x000039abu, 0x0003003eu, 0x00002c57u, 0x000039abu, 0x00050050u, 0x0000005fu, 0x00002ef6u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002ef7u, 0x00002ef6u, 0x0003003eu, 0x00006b47u, 0x00002c04u, 0x0003003eu, 0x00006b48u, 0x00002c07u, 0x0003003eu, 0x00002ccau, 0x000020f8u, 0x0003003eu, 0x00002ccbu, 0x00002ef7u, 0x00050041u, 0x00000007u, 0x000039b5u, 0x00002ccbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000039b6u, 0x000039b5u, 0x00050084u, 0x00000006u, 0x000039b7u, 0x00002c07u, 0x000039b6u, 0x00050080u, 0x00000006u, 0x000039b8u, 0x00002c04u, 0x000039b7u, 0x0003003eu, 0x000039acu, 0x000039b8u, 0x00050041u, 0x00000007u, 0x000039b9u, 0x00002ccbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000039bau, 0x000039b9u, 0x00050084u, 0x00000006u, 0x000039bbu, 0x000039bau, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000039bdu, 0x000039b8u, 0x000039bbu, 0x0003003eu, 0x000039acu, 0x000039bdu, 0x000500c7u, 0x00000006u, 0x000039bfu, 0x000039bdu, 0x00000f0bu, 0x0003003eu, 0x000039acu, 0x000039bfu, 0x000500c2u, 0x00000006u, 0x000039c1u, 0x000039bfu, 0x00000212u, 0x0003003eu, 0x000039adu, 0x000039c1u, 0x0004003du, 0x00000006u, 0x000039c3u, 0x000039b5u, 0x000500c7u, 0x00000006u, 0x000039c4u, 0x000039c3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000039c5u, 0x000039c4u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000039c7u, 0x000039c1u, 0x000039c5u, 0x0003003eu, 0x000039adu, 0x000039c7u, 0x000500c6u, 0x00000006u, 0x000039c9u, 0x000039c7u, 0x00000485u, 0x0003003eu, 0x000039adu, 0x000039c9u, 0x00080041u, 0x00000270u, 0x000039ccu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000039c9u, 0x0004003du, 0x0000022bu, 0x000039cdu, 0x000039ccu, 0x00040071u, 0x00000006u, 0x000039ceu, 0x000039cdu, 0x0003003eu, 0x000039aeu, 0x000039ceu, 0x000500c5u, 0x00000006u, 0x000039d1u, 0x000039c9u, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x000039d2u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000039d1u, 0x0004003du, 0x0000022bu, 0x000039d3u, 0x000039d2u, 0x00040071u, 0x00000006u, 0x000039d4u, 0x000039d3u, 0x0003003eu, 0x000039afu, 0x000039d4u, 0x000500c2u, 0x00000006u, 0x000039d6u, 0x000039ceu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039d7u, 0x000039d6u, 0x000500c7u, 0x00000006u, 0x000039d9u, 0x000039ceu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000039dau, 0x000039d9u, 0x000500c2u, 0x00000006u, 0x000039dcu, 0x000039d4u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000039ddu, 0x000039dcu, 0x000500c7u, 0x00000006u, 0x000039dfu, 0x000039d4u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000039e0u, 0x000039dfu, 0x00070050u, 0x00000009u, 0x000039e1u, 0x000039d7u, 0x000039dau, 0x000039ddu, 0x000039e0u, 0x0003003eu, 0x000039b0u, 0x000039e1u, 0x0003003eu, 0x00002c5fu, 0x000039e1u, 0x000200f9u, 0x00002eebu, 0x000200f8u, 0x00002eebu, 0x000700f5u, 0x00000009u, 0x000083e4u, 0x0000839eu, 0x00002e84u, 0x000039e1u, 0x00002eecu, 0x000700f5u, 0x00000009u, 0x000082ecu, 0x000082a2u, 0x00002e84u, 0x000039abu, 0x00002eecu, 0x000300f7u, 0x00002efcu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002efdu, 0x00002efcu, 0x000200f8u, 0x00002efdu, 0x00050050u, 0x0000005fu, 0x00002f00u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002f01u, 0x00002f00u, 0x0003003eu, 0x00006b4bu, 0x00002c04u, 0x0003003eu, 0x00006b4cu, 0x00002c07u, 0x0003003eu, 0x00002ccdu, 0x000020f8u, 0x0003003eu, 0x00002cceu, 0x00002f01u, 0x00050041u, 0x00000007u, 0x000039ebu, 0x00002cceu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000039ecu, 0x000039ebu, 0x00050084u, 0x00000006u, 0x000039edu, 0x00002c07u, 0x000039ecu, 0x00050080u, 0x00000006u, 0x000039eeu, 0x00002c04u, 0x000039edu, 0x0003003eu, 0x000039e2u, 0x000039eeu, 0x00050041u, 0x00000007u, 0x000039efu, 0x00002cceu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000039f0u, 0x000039efu, 0x00050084u, 0x00000006u, 0x000039f1u, 0x000039f0u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000039f3u, 0x000039eeu, 0x000039f1u, 0x0003003eu, 0x000039e2u, 0x000039f3u, 0x000500c7u, 0x00000006u, 0x000039f5u, 0x000039f3u, 0x00000f0bu, 0x0003003eu, 0x000039e2u, 0x000039f5u, 0x000500c2u, 0x00000006u, 0x000039f7u, 0x000039f5u, 0x00000212u, 0x0003003eu, 0x000039e3u, 0x000039f7u, 0x0004003du, 0x00000006u, 0x000039f9u, 0x000039ebu, 0x000500c7u, 0x00000006u, 0x000039fau, 0x000039f9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000039fbu, 0x000039fau, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000039fdu, 0x000039f7u, 0x000039fbu, 0x0003003eu, 0x000039e3u, 0x000039fdu, 0x000500c6u, 0x00000006u, 0x000039ffu, 0x000039fdu, 0x00000485u, 0x0003003eu, 0x000039e3u, 0x000039ffu, 0x00080041u, 0x00000270u, 0x00003a02u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000039ffu, 0x0004003du, 0x0000022bu, 0x00003a03u, 0x00003a02u, 0x00040071u, 0x00000006u, 0x00003a04u, 0x00003a03u, 0x0003003eu, 0x000039e4u, 0x00003a04u, 0x000500c5u, 0x00000006u, 0x00003a07u, 0x000039ffu, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x00003a08u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003a07u, 0x0004003du, 0x0000022bu, 0x00003a09u, 0x00003a08u, 0x00040071u, 0x00000006u, 0x00003a0au, 0x00003a09u, 0x0003003eu, 0x000039e5u, 0x00003a0au, 0x000500c2u, 0x00000006u, 0x00003a0cu, 0x00003a04u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003a0du, 0x00003a0cu, 0x000500c7u, 0x00000006u, 0x00003a0fu, 0x00003a04u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003a10u, 0x00003a0fu, 0x000500c2u, 0x00000006u, 0x00003a12u, 0x00003a0au, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00003a13u, 0x00003a12u, 0x000500c7u, 0x00000006u, 0x00003a15u, 0x00003a0au, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00003a16u, 0x00003a15u, 0x00070050u, 0x00000009u, 0x00003a17u, 0x00003a0du, 0x00003a10u, 0x00003a13u, 0x00003a16u, 0x0003003eu, 0x000039e6u, 0x00003a17u, 0x0003003eu, 0x00002c67u, 0x00003a17u, 0x000200f9u, 0x00002efcu, 0x000200f8u, 0x00002efcu, 0x000700f5u, 0x00000009u, 0x00008460u, 0x00008418u, 0x00002eebu, 0x00003a17u, 0x00002efdu, 0x000200f9u, 0x00002e80u, 0x000200f8u, 0x00002e83u, 0x0004007cu, 0x000000a2u, 0x00002ec6u, 0x00007f18u, 0x0003003eu, 0x00006b2fu, 0x00002c04u, 0x0003003eu, 0x00006b30u, 0x00002c07u, 0x0003003eu, 0x00002cb8u, 0x000020f8u, 0x0003003eu, 0x00002cb9u, 0x00002ec6u, 0x00050041u, 0x00000007u, 0x0000384du, 0x00002cb9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000384eu, 0x0000384du, 0x00050084u, 0x00000006u, 0x0000384fu, 0x00002c07u, 0x0000384eu, 0x00050080u, 0x00000006u, 0x00003850u, 0x00002c04u, 0x0000384fu, 0x0003003eu, 0x00003844u, 0x00003850u, 0x00050041u, 0x00000007u, 0x00003851u, 0x00002cb9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003852u, 0x00003851u, 0x00050084u, 0x00000006u, 0x00003853u, 0x00003852u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003855u, 0x00003850u, 0x00003853u, 0x0003003eu, 0x00003844u, 0x00003855u, 0x000500c7u, 0x00000006u, 0x00003857u, 0x00003855u, 0x00000e59u, 0x0003003eu, 0x00003844u, 0x00003857u, 0x000500c2u, 0x00000006u, 0x00003859u, 0x00003857u, 0x00000212u, 0x0003003eu, 0x00003845u, 0x00003859u, 0x0004003du, 0x00000006u, 0x0000385bu, 0x0000384du, 0x000500c7u, 0x00000006u, 0x0000385cu, 0x0000385bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000385du, 0x0000385cu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000385fu, 0x00003859u, 0x0000385du, 0x0003003eu, 0x00003845u, 0x0000385fu, 0x000500c6u, 0x00000006u, 0x00003861u, 0x0000385fu, 0x00000485u, 0x0003003eu, 0x00003845u, 0x00003861u, 0x00080041u, 0x00000270u, 0x00003864u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003861u, 0x0004003du, 0x0000022bu, 0x00003865u, 0x00003864u, 0x00040071u, 0x00000006u, 0x00003866u, 0x00003865u, 0x0003003eu, 0x00003846u, 0x00003866u, 0x0003003eu, 0x00003847u, 0x00003866u, 0x00060050u, 0x00000353u, 0x0000386du, 0x00003866u, 0x00003866u, 0x00003866u, 0x000500c2u, 0x00000353u, 0x0000386eu, 0x0000386du, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00003870u, 0x0000386eu, 0x0000eee9u, 0x0003003eu, 0x00003869u, 0x00003870u, 0x000500c4u, 0x00000353u, 0x00003873u, 0x00003870u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00003876u, 0x00003870u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003877u, 0x00003873u, 0x00003876u, 0x0003003eu, 0x00003869u, 0x00003877u, 0x000500c7u, 0x00000006u, 0x00003879u, 0x00003866u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000387au, 0x00003879u, 0x000006c2u, 0x0003003eu, 0x0000386au, 0x0000387au, 0x0004007cu, 0x0000003cu, 0x0000387cu, 0x00003877u, 0x0004007cu, 0x00000008u, 0x0000387eu, 0x0000387au, 0x00050051u, 0x00000008u, 0x0000387fu, 0x0000387cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003880u, 0x0000387cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003881u, 0x0000387cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003882u, 0x0000387fu, 0x00003880u, 0x00003881u, 0x0000387eu, 0x0003003eu, 0x0000386bu, 0x00003882u, 0x0003003eu, 0x00003848u, 0x00003882u, 0x0003003eu, 0x00002c4fu, 0x00003882u, 0x000300f7u, 0x00002ecbu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002eccu, 0x00002ecbu, 0x000200f8u, 0x00002eccu, 0x00050050u, 0x0000005fu, 0x00002ecfu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002ed0u, 0x00002ecfu, 0x0003003eu, 0x00006b33u, 0x00002c04u, 0x0003003eu, 0x00006b34u, 0x00002c07u, 0x0003003eu, 0x00002cbbu, 0x000020f8u, 0x0003003eu, 0x00002cbcu, 0x00002ed0u, 0x00050041u, 0x00000007u, 0x0000388cu, 0x00002cbcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000388du, 0x0000388cu, 0x00050084u, 0x00000006u, 0x0000388eu, 0x00002c07u, 0x0000388du, 0x00050080u, 0x00000006u, 0x0000388fu, 0x00002c04u, 0x0000388eu, 0x0003003eu, 0x00003883u, 0x0000388fu, 0x00050041u, 0x00000007u, 0x00003890u, 0x00002cbcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003891u, 0x00003890u, 0x00050084u, 0x00000006u, 0x00003892u, 0x00003891u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003894u, 0x0000388fu, 0x00003892u, 0x0003003eu, 0x00003883u, 0x00003894u, 0x000500c7u, 0x00000006u, 0x00003896u, 0x00003894u, 0x00000e59u, 0x0003003eu, 0x00003883u, 0x00003896u, 0x000500c2u, 0x00000006u, 0x00003898u, 0x00003896u, 0x00000212u, 0x0003003eu, 0x00003884u, 0x00003898u, 0x0004003du, 0x00000006u, 0x0000389au, 0x0000388cu, 0x000500c7u, 0x00000006u, 0x0000389bu, 0x0000389au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000389cu, 0x0000389bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000389eu, 0x00003898u, 0x0000389cu, 0x0003003eu, 0x00003884u, 0x0000389eu, 0x000500c6u, 0x00000006u, 0x000038a0u, 0x0000389eu, 0x00000485u, 0x0003003eu, 0x00003884u, 0x000038a0u, 0x00080041u, 0x00000270u, 0x000038a3u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000038a0u, 0x0004003du, 0x0000022bu, 0x000038a4u, 0x000038a3u, 0x00040071u, 0x00000006u, 0x000038a5u, 0x000038a4u, 0x0003003eu, 0x00003885u, 0x000038a5u, 0x0003003eu, 0x00003886u, 0x000038a5u, 0x00060050u, 0x00000353u, 0x000038acu, 0x000038a5u, 0x000038a5u, 0x000038a5u, 0x000500c2u, 0x00000353u, 0x000038adu, 0x000038acu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000038afu, 0x000038adu, 0x0000eee9u, 0x0003003eu, 0x000038a8u, 0x000038afu, 0x000500c4u, 0x00000353u, 0x000038b2u, 0x000038afu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000038b5u, 0x000038afu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000038b6u, 0x000038b2u, 0x000038b5u, 0x0003003eu, 0x000038a8u, 0x000038b6u, 0x000500c7u, 0x00000006u, 0x000038b8u, 0x000038a5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000038b9u, 0x000038b8u, 0x000006c2u, 0x0003003eu, 0x000038a9u, 0x000038b9u, 0x0004007cu, 0x0000003cu, 0x000038bbu, 0x000038b6u, 0x0004007cu, 0x00000008u, 0x000038bdu, 0x000038b9u, 0x00050051u, 0x00000008u, 0x000038beu, 0x000038bbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000038bfu, 0x000038bbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000038c0u, 0x000038bbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000038c1u, 0x000038beu, 0x000038bfu, 0x000038c0u, 0x000038bdu, 0x0003003eu, 0x000038aau, 0x000038c1u, 0x0003003eu, 0x00003887u, 0x000038c1u, 0x0003003eu, 0x00002c57u, 0x000038c1u, 0x00050050u, 0x0000005fu, 0x00002ed6u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002ed7u, 0x00002ed6u, 0x0003003eu, 0x00006b37u, 0x00002c04u, 0x0003003eu, 0x00006b38u, 0x00002c07u, 0x0003003eu, 0x00002cbeu, 0x000020f8u, 0x0003003eu, 0x00002cbfu, 0x00002ed7u, 0x00050041u, 0x00000007u, 0x000038cbu, 0x00002cbfu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000038ccu, 0x000038cbu, 0x00050084u, 0x00000006u, 0x000038cdu, 0x00002c07u, 0x000038ccu, 0x00050080u, 0x00000006u, 0x000038ceu, 0x00002c04u, 0x000038cdu, 0x0003003eu, 0x000038c2u, 0x000038ceu, 0x00050041u, 0x00000007u, 0x000038cfu, 0x00002cbfu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000038d0u, 0x000038cfu, 0x00050084u, 0x00000006u, 0x000038d1u, 0x000038d0u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000038d3u, 0x000038ceu, 0x000038d1u, 0x0003003eu, 0x000038c2u, 0x000038d3u, 0x000500c7u, 0x00000006u, 0x000038d5u, 0x000038d3u, 0x00000e59u, 0x0003003eu, 0x000038c2u, 0x000038d5u, 0x000500c2u, 0x00000006u, 0x000038d7u, 0x000038d5u, 0x00000212u, 0x0003003eu, 0x000038c3u, 0x000038d7u, 0x0004003du, 0x00000006u, 0x000038d9u, 0x000038cbu, 0x000500c7u, 0x00000006u, 0x000038dau, 0x000038d9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000038dbu, 0x000038dau, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000038ddu, 0x000038d7u, 0x000038dbu, 0x0003003eu, 0x000038c3u, 0x000038ddu, 0x000500c6u, 0x00000006u, 0x000038dfu, 0x000038ddu, 0x00000485u, 0x0003003eu, 0x000038c3u, 0x000038dfu, 0x00080041u, 0x00000270u, 0x000038e2u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000038dfu, 0x0004003du, 0x0000022bu, 0x000038e3u, 0x000038e2u, 0x00040071u, 0x00000006u, 0x000038e4u, 0x000038e3u, 0x0003003eu, 0x000038c4u, 0x000038e4u, 0x0003003eu, 0x000038c5u, 0x000038e4u, 0x00060050u, 0x00000353u, 0x000038ebu, 0x000038e4u, 0x000038e4u, 0x000038e4u, 0x000500c2u, 0x00000353u, 0x000038ecu, 0x000038ebu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000038eeu, 0x000038ecu, 0x0000eee9u, 0x0003003eu, 0x000038e7u, 0x000038eeu, 0x000500c4u, 0x00000353u, 0x000038f1u, 0x000038eeu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000038f4u, 0x000038eeu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000038f5u, 0x000038f1u, 0x000038f4u, 0x0003003eu, 0x000038e7u, 0x000038f5u, 0x000500c7u, 0x00000006u, 0x000038f7u, 0x000038e4u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000038f8u, 0x000038f7u, 0x000006c2u, 0x0003003eu, 0x000038e8u, 0x000038f8u, 0x0004007cu, 0x0000003cu, 0x000038fau, 0x000038f5u, 0x0004007cu, 0x00000008u, 0x000038fcu, 0x000038f8u, 0x00050051u, 0x00000008u, 0x000038fdu, 0x000038fau, 0x00000000u, 0x00050051u, 0x00000008u, 0x000038feu, 0x000038fau, 0x00000001u, 0x00050051u, 0x00000008u, 0x000038ffu, 0x000038fau, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003900u, 0x000038fdu, 0x000038feu, 0x000038ffu, 0x000038fcu, 0x0003003eu, 0x000038e9u, 0x00003900u, 0x0003003eu, 0x000038c6u, 0x00003900u, 0x0003003eu, 0x00002c5fu, 0x00003900u, 0x000200f9u, 0x00002ecbu, 0x000200f8u, 0x00002ecbu, 0x000700f5u, 0x00000009u, 0x000083e2u, 0x0000839eu, 0x00002e83u, 0x00003900u, 0x00002eccu, 0x000700f5u, 0x00000009u, 0x000082eau, 0x000082a2u, 0x00002e83u, 0x000038c1u, 0x00002eccu, 0x000300f7u, 0x00002edcu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002eddu, 0x00002edcu, 0x000200f8u, 0x00002eddu, 0x00050050u, 0x0000005fu, 0x00002ee0u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002ee1u, 0x00002ee0u, 0x0003003eu, 0x00006b3bu, 0x00002c04u, 0x0003003eu, 0x00006b3cu, 0x00002c07u, 0x0003003eu, 0x00002cc1u, 0x000020f8u, 0x0003003eu, 0x00002cc2u, 0x00002ee1u, 0x00050041u, 0x00000007u, 0x0000390au, 0x00002cc2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000390bu, 0x0000390au, 0x00050084u, 0x00000006u, 0x0000390cu, 0x00002c07u, 0x0000390bu, 0x00050080u, 0x00000006u, 0x0000390du, 0x00002c04u, 0x0000390cu, 0x0003003eu, 0x00003901u, 0x0000390du, 0x00050041u, 0x00000007u, 0x0000390eu, 0x00002cc2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000390fu, 0x0000390eu, 0x00050084u, 0x00000006u, 0x00003910u, 0x0000390fu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003912u, 0x0000390du, 0x00003910u, 0x0003003eu, 0x00003901u, 0x00003912u, 0x000500c7u, 0x00000006u, 0x00003914u, 0x00003912u, 0x00000e59u, 0x0003003eu, 0x00003901u, 0x00003914u, 0x000500c2u, 0x00000006u, 0x00003916u, 0x00003914u, 0x00000212u, 0x0003003eu, 0x00003902u, 0x00003916u, 0x0004003du, 0x00000006u, 0x00003918u, 0x0000390au, 0x000500c7u, 0x00000006u, 0x00003919u, 0x00003918u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000391au, 0x00003919u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000391cu, 0x00003916u, 0x0000391au, 0x0003003eu, 0x00003902u, 0x0000391cu, 0x000500c6u, 0x00000006u, 0x0000391eu, 0x0000391cu, 0x00000485u, 0x0003003eu, 0x00003902u, 0x0000391eu, 0x00080041u, 0x00000270u, 0x00003921u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000391eu, 0x0004003du, 0x0000022bu, 0x00003922u, 0x00003921u, 0x00040071u, 0x00000006u, 0x00003923u, 0x00003922u, 0x0003003eu, 0x00003903u, 0x00003923u, 0x0003003eu, 0x00003904u, 0x00003923u, 0x00060050u, 0x00000353u, 0x0000392au, 0x00003923u, 0x00003923u, 0x00003923u, 0x000500c2u, 0x00000353u, 0x0000392bu, 0x0000392au, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x0000392du, 0x0000392bu, 0x0000eee9u, 0x0003003eu, 0x00003926u, 0x0000392du, 0x000500c4u, 0x00000353u, 0x00003930u, 0x0000392du, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00003933u, 0x0000392du, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003934u, 0x00003930u, 0x00003933u, 0x0003003eu, 0x00003926u, 0x00003934u, 0x000500c7u, 0x00000006u, 0x00003936u, 0x00003923u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003937u, 0x00003936u, 0x000006c2u, 0x0003003eu, 0x00003927u, 0x00003937u, 0x0004007cu, 0x0000003cu, 0x00003939u, 0x00003934u, 0x0004007cu, 0x00000008u, 0x0000393bu, 0x00003937u, 0x00050051u, 0x00000008u, 0x0000393cu, 0x00003939u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000393du, 0x00003939u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000393eu, 0x00003939u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000393fu, 0x0000393cu, 0x0000393du, 0x0000393eu, 0x0000393bu, 0x0003003eu, 0x00003928u, 0x0000393fu, 0x0003003eu, 0x00003905u, 0x0000393fu, 0x0003003eu, 0x00002c67u, 0x0000393fu, 0x000200f9u, 0x00002edcu, 0x000200f8u, 0x00002edcu, 0x000700f5u, 0x00000009u, 0x0000845eu, 0x00008418u, 0x00002ecbu, 0x0000393fu, 0x00002eddu, 0x000200f9u, 0x00002e80u, 0x000200f8u, 0x00002e82u, 0x0004007cu, 0x000000a2u, 0x00002ea6u, 0x00007f18u, 0x0003003eu, 0x00006b1fu, 0x00002c04u, 0x0003003eu, 0x00006b20u, 0x00002c07u, 0x0003003eu, 0x00002cacu, 0x000020f8u, 0x0003003eu, 0x00002cadu, 0x00002ea6u, 0x00050041u, 0x00000007u, 0x000037c0u, 0x00002cadu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000037c1u, 0x000037c0u, 0x00050084u, 0x00000006u, 0x000037c2u, 0x00002c07u, 0x000037c1u, 0x00050080u, 0x00000006u, 0x000037c3u, 0x00002c04u, 0x000037c2u, 0x0003003eu, 0x000037b8u, 0x000037c3u, 0x00050041u, 0x00000007u, 0x000037c4u, 0x00002cadu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000037c5u, 0x000037c4u, 0x00050080u, 0x00000006u, 0x000037c7u, 0x000037c3u, 0x000037c5u, 0x0003003eu, 0x000037b8u, 0x000037c7u, 0x000500c7u, 0x00000006u, 0x000037c9u, 0x000037c7u, 0x00000e59u, 0x0003003eu, 0x000037b8u, 0x000037c9u, 0x0003003eu, 0x000037b9u, 0x000037c9u, 0x0004003du, 0x00000006u, 0x000037ccu, 0x000037c0u, 0x000500c7u, 0x00000006u, 0x000037cdu, 0x000037ccu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000037ceu, 0x000037cdu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000037d0u, 0x000037c9u, 0x000037ceu, 0x0003003eu, 0x000037b9u, 0x000037d0u, 0x000500c6u, 0x00000006u, 0x000037d2u, 0x000037d0u, 0x0000048bu, 0x0003003eu, 0x000037b9u, 0x000037d2u, 0x00080041u, 0x00000277u, 0x000037d5u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000037d2u, 0x0004003du, 0x00000229u, 0x000037d6u, 0x000037d5u, 0x00040071u, 0x00000006u, 0x000037d7u, 0x000037d6u, 0x0003003eu, 0x000037bau, 0x000037d7u, 0x0004007cu, 0x00000008u, 0x000037d9u, 0x000037d7u, 0x00070050u, 0x00000009u, 0x000037dau, 0x000037d9u, 0x000037d9u, 0x000037d9u, 0x000037d9u, 0x0003003eu, 0x000037bbu, 0x000037dau, 0x0003003eu, 0x00002c4fu, 0x000037dau, 0x000300f7u, 0x00002eabu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002eacu, 0x00002eabu, 0x000200f8u, 0x00002eacu, 0x00050050u, 0x0000005fu, 0x00002eafu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002eb0u, 0x00002eafu, 0x0003003eu, 0x00006b23u, 0x00002c04u, 0x0003003eu, 0x00006b24u, 0x00002c07u, 0x0003003eu, 0x00002cafu, 0x000020f8u, 0x0003003eu, 0x00002cb0u, 0x00002eb0u, 0x00050041u, 0x00000007u, 0x000037e3u, 0x00002cb0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000037e4u, 0x000037e3u, 0x00050084u, 0x00000006u, 0x000037e5u, 0x00002c07u, 0x000037e4u, 0x00050080u, 0x00000006u, 0x000037e6u, 0x00002c04u, 0x000037e5u, 0x0003003eu, 0x000037dbu, 0x000037e6u, 0x00050041u, 0x00000007u, 0x000037e7u, 0x00002cb0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000037e8u, 0x000037e7u, 0x00050080u, 0x00000006u, 0x000037eau, 0x000037e6u, 0x000037e8u, 0x0003003eu, 0x000037dbu, 0x000037eau, 0x000500c7u, 0x00000006u, 0x000037ecu, 0x000037eau, 0x00000e59u, 0x0003003eu, 0x000037dbu, 0x000037ecu, 0x0003003eu, 0x000037dcu, 0x000037ecu, 0x0004003du, 0x00000006u, 0x000037efu, 0x000037e3u, 0x000500c7u, 0x00000006u, 0x000037f0u, 0x000037efu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000037f1u, 0x000037f0u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000037f3u, 0x000037ecu, 0x000037f1u, 0x0003003eu, 0x000037dcu, 0x000037f3u, 0x000500c6u, 0x00000006u, 0x000037f5u, 0x000037f3u, 0x0000048bu, 0x0003003eu, 0x000037dcu, 0x000037f5u, 0x00080041u, 0x00000277u, 0x000037f8u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000037f5u, 0x0004003du, 0x00000229u, 0x000037f9u, 0x000037f8u, 0x00040071u, 0x00000006u, 0x000037fau, 0x000037f9u, 0x0003003eu, 0x000037ddu, 0x000037fau, 0x0004007cu, 0x00000008u, 0x000037fcu, 0x000037fau, 0x00070050u, 0x00000009u, 0x000037fdu, 0x000037fcu, 0x000037fcu, 0x000037fcu, 0x000037fcu, 0x0003003eu, 0x000037deu, 0x000037fdu, 0x0003003eu, 0x00002c57u, 0x000037fdu, 0x00050050u, 0x0000005fu, 0x00002eb6u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002eb7u, 0x00002eb6u, 0x0003003eu, 0x00006b27u, 0x00002c04u, 0x0003003eu, 0x00006b28u, 0x00002c07u, 0x0003003eu, 0x00002cb2u, 0x000020f8u, 0x0003003eu, 0x00002cb3u, 0x00002eb7u, 0x00050041u, 0x00000007u, 0x00003806u, 0x00002cb3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003807u, 0x00003806u, 0x00050084u, 0x00000006u, 0x00003808u, 0x00002c07u, 0x00003807u, 0x00050080u, 0x00000006u, 0x00003809u, 0x00002c04u, 0x00003808u, 0x0003003eu, 0x000037feu, 0x00003809u, 0x00050041u, 0x00000007u, 0x0000380au, 0x00002cb3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000380bu, 0x0000380au, 0x00050080u, 0x00000006u, 0x0000380du, 0x00003809u, 0x0000380bu, 0x0003003eu, 0x000037feu, 0x0000380du, 0x000500c7u, 0x00000006u, 0x0000380fu, 0x0000380du, 0x00000e59u, 0x0003003eu, 0x000037feu, 0x0000380fu, 0x0003003eu, 0x000037ffu, 0x0000380fu, 0x0004003du, 0x00000006u, 0x00003812u, 0x00003806u, 0x000500c7u, 0x00000006u, 0x00003813u, 0x00003812u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003814u, 0x00003813u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003816u, 0x0000380fu, 0x00003814u, 0x0003003eu, 0x000037ffu, 0x00003816u, 0x000500c6u, 0x00000006u, 0x00003818u, 0x00003816u, 0x0000048bu, 0x0003003eu, 0x000037ffu, 0x00003818u, 0x00080041u, 0x00000277u, 0x0000381bu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003818u, 0x0004003du, 0x00000229u, 0x0000381cu, 0x0000381bu, 0x00040071u, 0x00000006u, 0x0000381du, 0x0000381cu, 0x0003003eu, 0x00003800u, 0x0000381du, 0x0004007cu, 0x00000008u, 0x0000381fu, 0x0000381du, 0x00070050u, 0x00000009u, 0x00003820u, 0x0000381fu, 0x0000381fu, 0x0000381fu, 0x0000381fu, 0x0003003eu, 0x00003801u, 0x00003820u, 0x0003003eu, 0x00002c5fu, 0x00003820u, 0x000200f9u, 0x00002eabu, 0x000200f8u, 0x00002eabu, 0x000700f5u, 0x00000009u, 0x000083e0u, 0x0000839eu, 0x00002e82u, 0x00003820u, 0x00002eacu, 0x000700f5u, 0x00000009u, 0x000082e8u, 0x000082a2u, 0x00002e82u, 0x000037fdu, 0x00002eacu, 0x000300f7u, 0x00002ebcu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002ebdu, 0x00002ebcu, 0x000200f8u, 0x00002ebdu, 0x00050050u, 0x0000005fu, 0x00002ec0u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002ec1u, 0x00002ec0u, 0x0003003eu, 0x00006b2bu, 0x00002c04u, 0x0003003eu, 0x00006b2cu, 0x00002c07u, 0x0003003eu, 0x00002cb5u, 0x000020f8u, 0x0003003eu, 0x00002cb6u, 0x00002ec1u, 0x00050041u, 0x00000007u, 0x00003829u, 0x00002cb6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000382au, 0x00003829u, 0x00050084u, 0x00000006u, 0x0000382bu, 0x00002c07u, 0x0000382au, 0x00050080u, 0x00000006u, 0x0000382cu, 0x00002c04u, 0x0000382bu, 0x0003003eu, 0x00003821u, 0x0000382cu, 0x00050041u, 0x00000007u, 0x0000382du, 0x00002cb6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000382eu, 0x0000382du, 0x00050080u, 0x00000006u, 0x00003830u, 0x0000382cu, 0x0000382eu, 0x0003003eu, 0x00003821u, 0x00003830u, 0x000500c7u, 0x00000006u, 0x00003832u, 0x00003830u, 0x00000e59u, 0x0003003eu, 0x00003821u, 0x00003832u, 0x0003003eu, 0x00003822u, 0x00003832u, 0x0004003du, 0x00000006u, 0x00003835u, 0x00003829u, 0x000500c7u, 0x00000006u, 0x00003836u, 0x00003835u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003837u, 0x00003836u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003839u, 0x00003832u, 0x00003837u, 0x0003003eu, 0x00003822u, 0x00003839u, 0x000500c6u, 0x00000006u, 0x0000383bu, 0x00003839u, 0x0000048bu, 0x0003003eu, 0x00003822u, 0x0000383bu, 0x00080041u, 0x00000277u, 0x0000383eu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000383bu, 0x0004003du, 0x00000229u, 0x0000383fu, 0x0000383eu, 0x00040071u, 0x00000006u, 0x00003840u, 0x0000383fu, 0x0003003eu, 0x00003823u, 0x00003840u, 0x0004007cu, 0x00000008u, 0x00003842u, 0x00003840u, 0x00070050u, 0x00000009u, 0x00003843u, 0x00003842u, 0x00003842u, 0x00003842u, 0x00003842u, 0x0003003eu, 0x00003824u, 0x00003843u, 0x0003003eu, 0x00002c67u, 0x00003843u, 0x000200f9u, 0x00002ebcu, 0x000200f8u, 0x00002ebcu, 0x000700f5u, 0x00000009u, 0x0000845cu, 0x00008418u, 0x00002eabu, 0x00003843u, 0x00002ebdu, 0x000200f9u, 0x00002e80u, 0x000200f8u, 0x00002e81u, 0x0004007cu, 0x000000a2u, 0x00002e86u, 0x00007f18u, 0x0003003eu, 0x00006b0fu, 0x00002c04u, 0x0003003eu, 0x00006b10u, 0x00002c07u, 0x0003003eu, 0x00002ca0u, 0x000020f8u, 0x0003003eu, 0x00002ca1u, 0x00002e86u, 0x00050041u, 0x00000007u, 0x000036f9u, 0x00002ca1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000036fau, 0x000036f9u, 0x00050084u, 0x00000006u, 0x000036fbu, 0x00002c07u, 0x000036fau, 0x00050080u, 0x00000006u, 0x000036fcu, 0x00002c04u, 0x000036fbu, 0x0003003eu, 0x000036f0u, 0x000036fcu, 0x00050041u, 0x00000007u, 0x000036fdu, 0x00002ca1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000036feu, 0x000036fdu, 0x000500c2u, 0x00000006u, 0x000036ffu, 0x000036feu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003701u, 0x000036fcu, 0x000036ffu, 0x0003003eu, 0x000036f0u, 0x00003701u, 0x000500c7u, 0x00000006u, 0x00003703u, 0x00003701u, 0x00000e59u, 0x0003003eu, 0x000036f0u, 0x00003703u, 0x0004003du, 0x00000006u, 0x00003705u, 0x000036fdu, 0x000400c8u, 0x00000006u, 0x00003706u, 0x00003705u, 0x000500c7u, 0x00000006u, 0x00003707u, 0x00003706u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003708u, 0x00003707u, 0x00000701u, 0x0003003eu, 0x000036f1u, 0x00003708u, 0x0003003eu, 0x000036f2u, 0x00003703u, 0x0004003du, 0x00000006u, 0x0000370bu, 0x000036f9u, 0x000500c7u, 0x00000006u, 0x0000370cu, 0x0000370bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000370du, 0x0000370cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000370fu, 0x00003703u, 0x0000370du, 0x0003003eu, 0x000036f2u, 0x0000370fu, 0x000500c6u, 0x00000006u, 0x00003711u, 0x0000370fu, 0x0000048bu, 0x0003003eu, 0x000036f2u, 0x00003711u, 0x00080041u, 0x00000277u, 0x00003714u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003711u, 0x0004003du, 0x00000229u, 0x00003715u, 0x00003714u, 0x00040071u, 0x00000006u, 0x00003716u, 0x00003715u, 0x0003003eu, 0x000036f3u, 0x00003716u, 0x000500c2u, 0x00000006u, 0x00003719u, 0x00003716u, 0x00003708u, 0x000500c7u, 0x00000006u, 0x0000371au, 0x00003719u, 0x00000e7cu, 0x0003003eu, 0x000036f3u, 0x0000371au, 0x000500c4u, 0x00000006u, 0x0000371cu, 0x0000371au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000371eu, 0x0000371au, 0x0000371cu, 0x0003003eu, 0x000036f3u, 0x0000371eu, 0x0004007cu, 0x00000008u, 0x00003720u, 0x0000371eu, 0x00070050u, 0x00000009u, 0x00003721u, 0x00003720u, 0x00003720u, 0x00003720u, 0x00003720u, 0x0003003eu, 0x000036f4u, 0x00003721u, 0x0003003eu, 0x00002c4fu, 0x00003721u, 0x000300f7u, 0x00002e8bu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002e8cu, 0x00002e8bu, 0x000200f8u, 0x00002e8cu, 0x00050050u, 0x0000005fu, 0x00002e8fu, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002e90u, 0x00002e8fu, 0x0003003eu, 0x00006b13u, 0x00002c04u, 0x0003003eu, 0x00006b14u, 0x00002c07u, 0x0003003eu, 0x00002ca3u, 0x000020f8u, 0x0003003eu, 0x00002ca4u, 0x00002e90u, 0x00050041u, 0x00000007u, 0x0000372bu, 0x00002ca4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000372cu, 0x0000372bu, 0x00050084u, 0x00000006u, 0x0000372du, 0x00002c07u, 0x0000372cu, 0x00050080u, 0x00000006u, 0x0000372eu, 0x00002c04u, 0x0000372du, 0x0003003eu, 0x00003722u, 0x0000372eu, 0x00050041u, 0x00000007u, 0x0000372fu, 0x00002ca4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003730u, 0x0000372fu, 0x000500c2u, 0x00000006u, 0x00003731u, 0x00003730u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003733u, 0x0000372eu, 0x00003731u, 0x0003003eu, 0x00003722u, 0x00003733u, 0x000500c7u, 0x00000006u, 0x00003735u, 0x00003733u, 0x00000e59u, 0x0003003eu, 0x00003722u, 0x00003735u, 0x0004003du, 0x00000006u, 0x00003737u, 0x0000372fu, 0x000400c8u, 0x00000006u, 0x00003738u, 0x00003737u, 0x000500c7u, 0x00000006u, 0x00003739u, 0x00003738u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000373au, 0x00003739u, 0x00000701u, 0x0003003eu, 0x00003723u, 0x0000373au, 0x0003003eu, 0x00003724u, 0x00003735u, 0x0004003du, 0x00000006u, 0x0000373du, 0x0000372bu, 0x000500c7u, 0x00000006u, 0x0000373eu, 0x0000373du, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000373fu, 0x0000373eu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003741u, 0x00003735u, 0x0000373fu, 0x0003003eu, 0x00003724u, 0x00003741u, 0x000500c6u, 0x00000006u, 0x00003743u, 0x00003741u, 0x0000048bu, 0x0003003eu, 0x00003724u, 0x00003743u, 0x00080041u, 0x00000277u, 0x00003746u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003743u, 0x0004003du, 0x00000229u, 0x00003747u, 0x00003746u, 0x00040071u, 0x00000006u, 0x00003748u, 0x00003747u, 0x0003003eu, 0x00003725u, 0x00003748u, 0x000500c2u, 0x00000006u, 0x0000374bu, 0x00003748u, 0x0000373au, 0x000500c7u, 0x00000006u, 0x0000374cu, 0x0000374bu, 0x00000e7cu, 0x0003003eu, 0x00003725u, 0x0000374cu, 0x000500c4u, 0x00000006u, 0x0000374eu, 0x0000374cu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003750u, 0x0000374cu, 0x0000374eu, 0x0003003eu, 0x00003725u, 0x00003750u, 0x0004007cu, 0x00000008u, 0x00003752u, 0x00003750u, 0x00070050u, 0x00000009u, 0x00003753u, 0x00003752u, 0x00003752u, 0x00003752u, 0x00003752u, 0x0003003eu, 0x00003726u, 0x00003753u, 0x0003003eu, 0x00002c57u, 0x00003753u, 0x00050050u, 0x0000005fu, 0x00002e96u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e97u, 0x00002e96u, 0x0003003eu, 0x00006b17u, 0x00002c04u, 0x0003003eu, 0x00006b18u, 0x00002c07u, 0x0003003eu, 0x00002ca6u, 0x000020f8u, 0x0003003eu, 0x00002ca7u, 0x00002e97u, 0x00050041u, 0x00000007u, 0x0000375du, 0x00002ca7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000375eu, 0x0000375du, 0x00050084u, 0x00000006u, 0x0000375fu, 0x00002c07u, 0x0000375eu, 0x00050080u, 0x00000006u, 0x00003760u, 0x00002c04u, 0x0000375fu, 0x0003003eu, 0x00003754u, 0x00003760u, 0x00050041u, 0x00000007u, 0x00003761u, 0x00002ca7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003762u, 0x00003761u, 0x000500c2u, 0x00000006u, 0x00003763u, 0x00003762u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003765u, 0x00003760u, 0x00003763u, 0x0003003eu, 0x00003754u, 0x00003765u, 0x000500c7u, 0x00000006u, 0x00003767u, 0x00003765u, 0x00000e59u, 0x0003003eu, 0x00003754u, 0x00003767u, 0x0004003du, 0x00000006u, 0x00003769u, 0x00003761u, 0x000400c8u, 0x00000006u, 0x0000376au, 0x00003769u, 0x000500c7u, 0x00000006u, 0x0000376bu, 0x0000376au, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000376cu, 0x0000376bu, 0x00000701u, 0x0003003eu, 0x00003755u, 0x0000376cu, 0x0003003eu, 0x00003756u, 0x00003767u, 0x0004003du, 0x00000006u, 0x0000376fu, 0x0000375du, 0x000500c7u, 0x00000006u, 0x00003770u, 0x0000376fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003771u, 0x00003770u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003773u, 0x00003767u, 0x00003771u, 0x0003003eu, 0x00003756u, 0x00003773u, 0x000500c6u, 0x00000006u, 0x00003775u, 0x00003773u, 0x0000048bu, 0x0003003eu, 0x00003756u, 0x00003775u, 0x00080041u, 0x00000277u, 0x00003778u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003775u, 0x0004003du, 0x00000229u, 0x00003779u, 0x00003778u, 0x00040071u, 0x00000006u, 0x0000377au, 0x00003779u, 0x0003003eu, 0x00003757u, 0x0000377au, 0x000500c2u, 0x00000006u, 0x0000377du, 0x0000377au, 0x0000376cu, 0x000500c7u, 0x00000006u, 0x0000377eu, 0x0000377du, 0x00000e7cu, 0x0003003eu, 0x00003757u, 0x0000377eu, 0x000500c4u, 0x00000006u, 0x00003780u, 0x0000377eu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00003782u, 0x0000377eu, 0x00003780u, 0x0003003eu, 0x00003757u, 0x00003782u, 0x0004007cu, 0x00000008u, 0x00003784u, 0x00003782u, 0x00070050u, 0x00000009u, 0x00003785u, 0x00003784u, 0x00003784u, 0x00003784u, 0x00003784u, 0x0003003eu, 0x00003758u, 0x00003785u, 0x0003003eu, 0x00002c5fu, 0x00003785u, 0x000200f9u, 0x00002e8bu, 0x000200f8u, 0x00002e8bu, 0x000700f5u, 0x00000009u, 0x000083deu, 0x0000839eu, 0x00002e81u, 0x00003785u, 0x00002e8cu, 0x000700f5u, 0x00000009u, 0x000082e6u, 0x000082a2u, 0x00002e81u, 0x00003753u, 0x00002e8cu, 0x000300f7u, 0x00002e9cu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002e9du, 0x00002e9cu, 0x000200f8u, 0x00002e9du, 0x00050050u, 0x0000005fu, 0x00002ea0u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002ea1u, 0x00002ea0u, 0x0003003eu, 0x00006b1bu, 0x00002c04u, 0x0003003eu, 0x00006b1cu, 0x00002c07u, 0x0003003eu, 0x00002ca9u, 0x000020f8u, 0x0003003eu, 0x00002caau, 0x00002ea1u, 0x00050041u, 0x00000007u, 0x0000378fu, 0x00002caau, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003790u, 0x0000378fu, 0x00050084u, 0x00000006u, 0x00003791u, 0x00002c07u, 0x00003790u, 0x00050080u, 0x00000006u, 0x00003792u, 0x00002c04u, 0x00003791u, 0x0003003eu, 0x00003786u, 0x00003792u, 0x00050041u, 0x00000007u, 0x00003793u, 0x00002caau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003794u, 0x00003793u, 0x000500c2u, 0x00000006u, 0x00003795u, 0x00003794u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003797u, 0x00003792u, 0x00003795u, 0x0003003eu, 0x00003786u, 0x00003797u, 0x000500c7u, 0x00000006u, 0x00003799u, 0x00003797u, 0x00000e59u, 0x0003003eu, 0x00003786u, 0x00003799u, 0x0004003du, 0x00000006u, 0x0000379bu, 0x00003793u, 0x000400c8u, 0x00000006u, 0x0000379cu, 0x0000379bu, 0x000500c7u, 0x00000006u, 0x0000379du, 0x0000379cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000379eu, 0x0000379du, 0x00000701u, 0x0003003eu, 0x00003787u, 0x0000379eu, 0x0003003eu, 0x00003788u, 0x00003799u, 0x0004003du, 0x00000006u, 0x000037a1u, 0x0000378fu, 0x000500c7u, 0x00000006u, 0x000037a2u, 0x000037a1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000037a3u, 0x000037a2u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000037a5u, 0x00003799u, 0x000037a3u, 0x0003003eu, 0x00003788u, 0x000037a5u, 0x000500c6u, 0x00000006u, 0x000037a7u, 0x000037a5u, 0x0000048bu, 0x0003003eu, 0x00003788u, 0x000037a7u, 0x00080041u, 0x00000277u, 0x000037aau, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000037a7u, 0x0004003du, 0x00000229u, 0x000037abu, 0x000037aau, 0x00040071u, 0x00000006u, 0x000037acu, 0x000037abu, 0x0003003eu, 0x00003789u, 0x000037acu, 0x000500c2u, 0x00000006u, 0x000037afu, 0x000037acu, 0x0000379eu, 0x000500c7u, 0x00000006u, 0x000037b0u, 0x000037afu, 0x00000e7cu, 0x0003003eu, 0x00003789u, 0x000037b0u, 0x000500c4u, 0x00000006u, 0x000037b2u, 0x000037b0u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000037b4u, 0x000037b0u, 0x000037b2u, 0x0003003eu, 0x00003789u, 0x000037b4u, 0x0004007cu, 0x00000008u, 0x000037b6u, 0x000037b4u, 0x00070050u, 0x00000009u, 0x000037b7u, 0x000037b6u, 0x000037b6u, 0x000037b6u, 0x000037b6u, 0x0003003eu, 0x0000378au, 0x000037b7u, 0x0003003eu, 0x00002c67u, 0x000037b7u, 0x000200f9u, 0x00002e9cu, 0x000200f8u, 0x00002e9cu, 0x000700f5u, 0x00000009u, 0x0000845au, 0x00008418u, 0x00002e8bu, 0x000037b7u, 0x00002e9du, 0x000200f9u, 0x00002e80u, 0x000200f8u, 0x00002e80u, 0x000d00f5u, 0x00000009u, 0x00008459u, 0x00008418u, 0x00002e79u, 0x0000845au, 0x00002e9cu, 0x0000845cu, 0x00002ebcu, 0x0000845eu, 0x00002edcu, 0x00008460u, 0x00002efcu, 0x000d00f5u, 0x00000009u, 0x000083dcu, 0x0000839eu, 0x00002e79u, 0x000083deu, 0x00002e9cu, 0x000083e0u, 0x00002ebcu, 0x000083e2u, 0x00002edcu, 0x000083e4u, 0x00002efcu, 0x000d00f5u, 0x00000009u, 0x00008361u, 0x00008321u, 0x00002e79u, 0x00003721u, 0x00002e9cu, 0x000037dau, 0x00002ebcu, 0x00003882u, 0x00002edcu, 0x00003975u, 0x00002efcu, 0x000d00f5u, 0x00000009u, 0x000082e4u, 0x000082a2u, 0x00002e79u, 0x000082e6u, 0x00002e9cu, 0x000082e8u, 0x00002ebcu, 0x000082eau, 0x00002edcu, 0x000082ecu, 0x00002efcu, 0x000200f9u, 0x00002e78u, 0x000200f8u, 0x00002e78u, 0x000f00f5u, 0x00000009u, 0x00008458u, 0x00008418u, 0x00002dd9u, 0x00008459u, 0x00002e80u, 0x00008462u, 0x00002f18u, 0x00008463u, 0x00002f34u, 0x0000846au, 0x00002fa6u, 0x00008473u, 0x0000302du, 0x000f00f5u, 0x00000009u, 0x000083dbu, 0x0000839eu, 0x00002dd9u, 0x000083dcu, 0x00002e80u, 0x000083e5u, 0x00002f18u, 0x000083e6u, 0x00002f34u, 0x000083edu, 0x00002fa6u, 0x000083f6u, 0x0000302du, 0x000f00f5u, 0x00000009u, 0x00008360u, 0x00008321u, 0x00002dd9u, 0x00008361u, 0x00002e80u, 0x00003a62u, 0x00002f18u, 0x0000836bu, 0x00002f34u, 0x00008372u, 0x00002fa6u, 0x0000837bu, 0x0000302du, 0x000f00f5u, 0x00000009u, 0x000082e3u, 0x000082a2u, 0x00002dd9u, 0x000082e4u, 0x00002e80u, 0x000082edu, 0x00002f18u, 0x000082eeu, 0x00002f34u, 0x000082f5u, 0x00002fa6u, 0x000082feu, 0x0000302du, 0x000200f9u, 0x00002dd7u, 0x000200f8u, 0x00002dd8u, 0x000300f7u, 0x00002ddcu, 0x00000000u, 0x000b00fbu, 0x00002c0cu, 0x00002ddcu, 0x00000000u, 0x00002dddu, 0x00000002u, 0x00002dddu, 0x00000003u, 0x00002dddu, 0x00000004u, 0x00002dddu, 0x000200f8u, 0x00002dddu, 0x0003003eu, 0x00002c4du, 0x00002dcbu, 0x000600a9u, 0x00000008u, 0x00002de1u, 0x00002dcbu, 0x00000215u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00002de2u, 0x00002de1u, 0x0003003eu, 0x00002c4eu, 0x00002de2u, 0x000300f7u, 0x00002de5u, 0x00000000u, 0x000700fbu, 0x00002c11u, 0x00002de6u, 0x00000000u, 0x00002de7u, 0x00000001u, 0x00002de8u, 0x000200f8u, 0x00002de8u, 0x0004007cu, 0x000000a2u, 0x00002e4cu, 0x00007f18u, 0x000600a9u, 0x00000008u, 0x00002e4eu, 0x00002dcbu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00002e4fu, 0x00002e4eu, 0x0003003eu, 0x00006aefu, 0x00002c04u, 0x0003003eu, 0x00006af0u, 0x00002c07u, 0x0003003eu, 0x00002c70u, 0x000020f8u, 0x0003003eu, 0x00002c71u, 0x00002e4cu, 0x0003003eu, 0x00002c72u, 0x00002e4fu, 0x0003003eu, 0x00002c73u, 0x00002de2u, 0x0003003eu, 0x00002c74u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x0000356cu, 0x00002c71u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000356du, 0x0000356cu, 0x00050084u, 0x00000006u, 0x0000356eu, 0x00002c07u, 0x0000356du, 0x00050080u, 0x00000006u, 0x0000356fu, 0x00002c04u, 0x0000356eu, 0x0003003eu, 0x00003560u, 0x0000356fu, 0x00050041u, 0x00000007u, 0x00003570u, 0x00002c71u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003571u, 0x00003570u, 0x00050080u, 0x00000006u, 0x00003573u, 0x0000356fu, 0x00003571u, 0x0003003eu, 0x00003560u, 0x00003573u, 0x000500c7u, 0x00000006u, 0x00003575u, 0x00003573u, 0x00000f0bu, 0x0003003eu, 0x00003560u, 0x00003575u, 0x0003003eu, 0x00003561u, 0x00003575u, 0x0004003du, 0x00000006u, 0x00003578u, 0x0000356cu, 0x000500c7u, 0x00000006u, 0x00003579u, 0x00003578u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000357au, 0x00003579u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000357cu, 0x00003575u, 0x0000357au, 0x0003003eu, 0x00003561u, 0x0000357cu, 0x000500c6u, 0x00000006u, 0x0000357eu, 0x0000357cu, 0x0000048bu, 0x0003003eu, 0x00003561u, 0x0000357eu, 0x00080041u, 0x00000277u, 0x00003581u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000357eu, 0x0004003du, 0x00000229u, 0x00003582u, 0x00003581u, 0x00040071u, 0x00000006u, 0x00003583u, 0x00003582u, 0x0003003eu, 0x00003562u, 0x00003583u, 0x000500c4u, 0x00000006u, 0x00003585u, 0x00003583u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00003587u, 0x00003585u, 0x00002e4fu, 0x0003003eu, 0x00003563u, 0x00003587u, 0x000500c6u, 0x00000006u, 0x0000358au, 0x00003587u, 0x00002de2u, 0x0003003eu, 0x00003563u, 0x0000358au, 0x000500c5u, 0x00000006u, 0x0000358du, 0x00000f3cu, 0x0000358au, 0x00080041u, 0x00000270u, 0x0000358eu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000358du, 0x0004003du, 0x0000022bu, 0x0000358fu, 0x0000358eu, 0x00040071u, 0x00000006u, 0x00003590u, 0x0000358fu, 0x0003003eu, 0x00003562u, 0x00003590u, 0x000300f7u, 0x00003592u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00003593u, 0x00003594u, 0x000200f8u, 0x00003594u, 0x0003003eu, 0x00003566u, 0x00003590u, 0x00060050u, 0x00000353u, 0x000035aeu, 0x00003590u, 0x00003590u, 0x00003590u, 0x000500c2u, 0x00000353u, 0x000035afu, 0x000035aeu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000035b1u, 0x000035afu, 0x0000eee9u, 0x0003003eu, 0x000035aau, 0x000035b1u, 0x000500c4u, 0x00000353u, 0x000035b4u, 0x000035b1u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000035b7u, 0x000035b1u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000035b8u, 0x000035b4u, 0x000035b7u, 0x0003003eu, 0x000035aau, 0x000035b8u, 0x000500c7u, 0x00000006u, 0x000035bau, 0x00003590u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000035bbu, 0x000035bau, 0x000006c2u, 0x0003003eu, 0x000035abu, 0x000035bbu, 0x0004007cu, 0x0000003cu, 0x000035bdu, 0x000035b8u, 0x0004007cu, 0x00000008u, 0x000035bfu, 0x000035bbu, 0x00050051u, 0x00000008u, 0x000035c0u, 0x000035bdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000035c1u, 0x000035bdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000035c2u, 0x000035bdu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000035c3u, 0x000035c0u, 0x000035c1u, 0x000035c2u, 0x000035bfu, 0x0003003eu, 0x000035acu, 0x000035c3u, 0x0003003eu, 0x00003564u, 0x000035c3u, 0x000200f9u, 0x00003592u, 0x000200f8u, 0x00003593u, 0x0003003eu, 0x00003565u, 0x00003590u, 0x000500c2u, 0x00000006u, 0x0000359eu, 0x00003590u, 0x0000025eu, 0x0003003eu, 0x0000359au, 0x0000359eu, 0x000500c7u, 0x00000006u, 0x000035a0u, 0x00003590u, 0x000006c2u, 0x0003003eu, 0x0000359bu, 0x000035a0u, 0x0004007cu, 0x00000008u, 0x000035a2u, 0x0000359eu, 0x0004007cu, 0x00000008u, 0x000035a8u, 0x000035a0u, 0x00070050u, 0x00000009u, 0x000035a9u, 0x000035a2u, 0x000035a2u, 0x000035a2u, 0x000035a8u, 0x0003003eu, 0x0000359cu, 0x000035a9u, 0x0003003eu, 0x00003564u, 0x000035a9u, 0x000200f9u, 0x00003592u, 0x000200f8u, 0x00003592u, 0x000700f5u, 0x00000009u, 0x000080a1u, 0x000035a9u, 0x00003593u, 0x000035c3u, 0x00003594u, 0x0003003eu, 0x00003567u, 0x000080a1u, 0x0003003eu, 0x00002c4fu, 0x000080a1u, 0x000300f7u, 0x00002e56u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002e57u, 0x00002e56u, 0x000200f8u, 0x00002e57u, 0x00050050u, 0x0000005fu, 0x00002e5au, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002e5bu, 0x00002e5au, 0x0003003eu, 0x00006af3u, 0x00002c04u, 0x0003003eu, 0x00006af4u, 0x00002c07u, 0x0003003eu, 0x00002c76u, 0x000020f8u, 0x0003003eu, 0x00002c77u, 0x00002e5bu, 0x0003003eu, 0x00002c78u, 0x00000485u, 0x0003003eu, 0x00002c79u, 0x00002de2u, 0x0003003eu, 0x00002c7au, 0x0000210cu, 0x00050041u, 0x00000007u, 0x000035d0u, 0x00002c77u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000035d1u, 0x000035d0u, 0x00050084u, 0x00000006u, 0x000035d2u, 0x00002c07u, 0x000035d1u, 0x00050080u, 0x00000006u, 0x000035d3u, 0x00002c04u, 0x000035d2u, 0x0003003eu, 0x000035c4u, 0x000035d3u, 0x00050041u, 0x00000007u, 0x000035d4u, 0x00002c77u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000035d5u, 0x000035d4u, 0x00050080u, 0x00000006u, 0x000035d7u, 0x000035d3u, 0x000035d5u, 0x0003003eu, 0x000035c4u, 0x000035d7u, 0x000500c7u, 0x00000006u, 0x000035d9u, 0x000035d7u, 0x00000f0bu, 0x0003003eu, 0x000035c4u, 0x000035d9u, 0x0003003eu, 0x000035c5u, 0x000035d9u, 0x0004003du, 0x00000006u, 0x000035dcu, 0x000035d0u, 0x000500c7u, 0x00000006u, 0x000035ddu, 0x000035dcu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000035deu, 0x000035ddu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000035e0u, 0x000035d9u, 0x000035deu, 0x0003003eu, 0x000035c5u, 0x000035e0u, 0x000500c6u, 0x00000006u, 0x000035e2u, 0x000035e0u, 0x0000048bu, 0x0003003eu, 0x000035c5u, 0x000035e2u, 0x00080041u, 0x00000277u, 0x000035e5u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000035e2u, 0x0004003du, 0x00000229u, 0x000035e6u, 0x000035e5u, 0x00040071u, 0x00000006u, 0x000035e7u, 0x000035e6u, 0x0003003eu, 0x000035c6u, 0x000035e7u, 0x000500c4u, 0x00000006u, 0x000035e9u, 0x000035e7u, 0x00000215u, 0x00050080u, 0x00000006u, 0x000035ebu, 0x000035e9u, 0x00000485u, 0x0003003eu, 0x000035c7u, 0x000035ebu, 0x000500c6u, 0x00000006u, 0x000035eeu, 0x000035ebu, 0x00002de2u, 0x0003003eu, 0x000035c7u, 0x000035eeu, 0x000500c5u, 0x00000006u, 0x000035f1u, 0x00000f3cu, 0x000035eeu, 0x00080041u, 0x00000270u, 0x000035f2u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000035f1u, 0x0004003du, 0x0000022bu, 0x000035f3u, 0x000035f2u, 0x00040071u, 0x00000006u, 0x000035f4u, 0x000035f3u, 0x0003003eu, 0x000035c6u, 0x000035f4u, 0x000300f7u, 0x000035f6u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x000035f7u, 0x000035f8u, 0x000200f8u, 0x000035f8u, 0x0003003eu, 0x000035cau, 0x000035f4u, 0x00060050u, 0x00000353u, 0x00003612u, 0x000035f4u, 0x000035f4u, 0x000035f4u, 0x000500c2u, 0x00000353u, 0x00003613u, 0x00003612u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00003615u, 0x00003613u, 0x0000eee9u, 0x0003003eu, 0x0000360eu, 0x00003615u, 0x000500c4u, 0x00000353u, 0x00003618u, 0x00003615u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x0000361bu, 0x00003615u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x0000361cu, 0x00003618u, 0x0000361bu, 0x0003003eu, 0x0000360eu, 0x0000361cu, 0x000500c7u, 0x00000006u, 0x0000361eu, 0x000035f4u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000361fu, 0x0000361eu, 0x000006c2u, 0x0003003eu, 0x0000360fu, 0x0000361fu, 0x0004007cu, 0x0000003cu, 0x00003621u, 0x0000361cu, 0x0004007cu, 0x00000008u, 0x00003623u, 0x0000361fu, 0x00050051u, 0x00000008u, 0x00003624u, 0x00003621u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003625u, 0x00003621u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003626u, 0x00003621u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003627u, 0x00003624u, 0x00003625u, 0x00003626u, 0x00003623u, 0x0003003eu, 0x00003610u, 0x00003627u, 0x0003003eu, 0x000035c8u, 0x00003627u, 0x000200f9u, 0x000035f6u, 0x000200f8u, 0x000035f7u, 0x0003003eu, 0x000035c9u, 0x000035f4u, 0x000500c2u, 0x00000006u, 0x00003602u, 0x000035f4u, 0x0000025eu, 0x0003003eu, 0x000035feu, 0x00003602u, 0x000500c7u, 0x00000006u, 0x00003604u, 0x000035f4u, 0x000006c2u, 0x0003003eu, 0x000035ffu, 0x00003604u, 0x0004007cu, 0x00000008u, 0x00003606u, 0x00003602u, 0x0004007cu, 0x00000008u, 0x0000360cu, 0x00003604u, 0x00070050u, 0x00000009u, 0x0000360du, 0x00003606u, 0x00003606u, 0x00003606u, 0x0000360cu, 0x0003003eu, 0x00003600u, 0x0000360du, 0x0003003eu, 0x000035c8u, 0x0000360du, 0x000200f9u, 0x000035f6u, 0x000200f8u, 0x000035f6u, 0x000700f5u, 0x00000009u, 0x000080b9u, 0x0000360du, 0x000035f7u, 0x00003627u, 0x000035f8u, 0x0003003eu, 0x000035cbu, 0x000080b9u, 0x0003003eu, 0x00002c57u, 0x000080b9u, 0x00050050u, 0x0000005fu, 0x00002e63u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e64u, 0x00002e63u, 0x0003003eu, 0x00006af7u, 0x00002c04u, 0x0003003eu, 0x00006af8u, 0x00002c07u, 0x0003003eu, 0x00002c7cu, 0x000020f8u, 0x0003003eu, 0x00002c7du, 0x00002e64u, 0x0003003eu, 0x00002c7eu, 0x000003c4u, 0x0003003eu, 0x00002c7fu, 0x00002de2u, 0x0003003eu, 0x00002c80u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00003634u, 0x00002c7du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003635u, 0x00003634u, 0x00050084u, 0x00000006u, 0x00003636u, 0x00002c07u, 0x00003635u, 0x00050080u, 0x00000006u, 0x00003637u, 0x00002c04u, 0x00003636u, 0x0003003eu, 0x00003628u, 0x00003637u, 0x00050041u, 0x00000007u, 0x00003638u, 0x00002c7du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003639u, 0x00003638u, 0x00050080u, 0x00000006u, 0x0000363bu, 0x00003637u, 0x00003639u, 0x0003003eu, 0x00003628u, 0x0000363bu, 0x000500c7u, 0x00000006u, 0x0000363du, 0x0000363bu, 0x00000f0bu, 0x0003003eu, 0x00003628u, 0x0000363du, 0x0003003eu, 0x00003629u, 0x0000363du, 0x0004003du, 0x00000006u, 0x00003640u, 0x00003634u, 0x000500c7u, 0x00000006u, 0x00003641u, 0x00003640u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003642u, 0x00003641u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003644u, 0x0000363du, 0x00003642u, 0x0003003eu, 0x00003629u, 0x00003644u, 0x000500c6u, 0x00000006u, 0x00003646u, 0x00003644u, 0x0000048bu, 0x0003003eu, 0x00003629u, 0x00003646u, 0x00080041u, 0x00000277u, 0x00003649u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003646u, 0x0004003du, 0x00000229u, 0x0000364au, 0x00003649u, 0x00040071u, 0x00000006u, 0x0000364bu, 0x0000364au, 0x0003003eu, 0x0000362au, 0x0000364bu, 0x000500c4u, 0x00000006u, 0x0000364du, 0x0000364bu, 0x00000215u, 0x00050080u, 0x00000006u, 0x0000364fu, 0x0000364du, 0x000003c4u, 0x0003003eu, 0x0000362bu, 0x0000364fu, 0x000500c6u, 0x00000006u, 0x00003652u, 0x0000364fu, 0x00002de2u, 0x0003003eu, 0x0000362bu, 0x00003652u, 0x000500c5u, 0x00000006u, 0x00003655u, 0x00000f3cu, 0x00003652u, 0x00080041u, 0x00000270u, 0x00003656u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003655u, 0x0004003du, 0x0000022bu, 0x00003657u, 0x00003656u, 0x00040071u, 0x00000006u, 0x00003658u, 0x00003657u, 0x0003003eu, 0x0000362au, 0x00003658u, 0x000300f7u, 0x0000365au, 0x00000000u, 0x000400fau, 0x0000210cu, 0x0000365bu, 0x0000365cu, 0x000200f8u, 0x0000365cu, 0x0003003eu, 0x0000362eu, 0x00003658u, 0x00060050u, 0x00000353u, 0x00003676u, 0x00003658u, 0x00003658u, 0x00003658u, 0x000500c2u, 0x00000353u, 0x00003677u, 0x00003676u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00003679u, 0x00003677u, 0x0000eee9u, 0x0003003eu, 0x00003672u, 0x00003679u, 0x000500c4u, 0x00000353u, 0x0000367cu, 0x00003679u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x0000367fu, 0x00003679u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003680u, 0x0000367cu, 0x0000367fu, 0x0003003eu, 0x00003672u, 0x00003680u, 0x000500c7u, 0x00000006u, 0x00003682u, 0x00003658u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003683u, 0x00003682u, 0x000006c2u, 0x0003003eu, 0x00003673u, 0x00003683u, 0x0004007cu, 0x0000003cu, 0x00003685u, 0x00003680u, 0x0004007cu, 0x00000008u, 0x00003687u, 0x00003683u, 0x00050051u, 0x00000008u, 0x00003688u, 0x00003685u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003689u, 0x00003685u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000368au, 0x00003685u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000368bu, 0x00003688u, 0x00003689u, 0x0000368au, 0x00003687u, 0x0003003eu, 0x00003674u, 0x0000368bu, 0x0003003eu, 0x0000362cu, 0x0000368bu, 0x000200f9u, 0x0000365au, 0x000200f8u, 0x0000365bu, 0x0003003eu, 0x0000362du, 0x00003658u, 0x000500c2u, 0x00000006u, 0x00003666u, 0x00003658u, 0x0000025eu, 0x0003003eu, 0x00003662u, 0x00003666u, 0x000500c7u, 0x00000006u, 0x00003668u, 0x00003658u, 0x000006c2u, 0x0003003eu, 0x00003663u, 0x00003668u, 0x0004007cu, 0x00000008u, 0x0000366au, 0x00003666u, 0x0004007cu, 0x00000008u, 0x00003670u, 0x00003668u, 0x00070050u, 0x00000009u, 0x00003671u, 0x0000366au, 0x0000366au, 0x0000366au, 0x00003670u, 0x0003003eu, 0x00003664u, 0x00003671u, 0x0003003eu, 0x0000362cu, 0x00003671u, 0x000200f9u, 0x0000365au, 0x000200f8u, 0x0000365au, 0x000700f5u, 0x00000009u, 0x000080d1u, 0x00003671u, 0x0000365bu, 0x0000368bu, 0x0000365cu, 0x0003003eu, 0x0000362fu, 0x000080d1u, 0x0003003eu, 0x00002c5fu, 0x000080d1u, 0x000200f9u, 0x00002e56u, 0x000200f8u, 0x00002e56u, 0x000700f5u, 0x00000009u, 0x000083d8u, 0x0000839eu, 0x00003592u, 0x000080d1u, 0x0000365au, 0x000700f5u, 0x00000009u, 0x000082dfu, 0x000082a2u, 0x00003592u, 0x000080b9u, 0x0000365au, 0x000300f7u, 0x00002e6bu, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002e6cu, 0x00002e6bu, 0x000200f8u, 0x00002e6cu, 0x00050050u, 0x0000005fu, 0x00002e6fu, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e70u, 0x00002e6fu, 0x0003003eu, 0x00006afbu, 0x00002c04u, 0x0003003eu, 0x00006afcu, 0x00002c07u, 0x0003003eu, 0x00002c82u, 0x000020f8u, 0x0003003eu, 0x00002c83u, 0x00002e70u, 0x0003003eu, 0x00002c84u, 0x0000048bu, 0x0003003eu, 0x00002c85u, 0x00002de2u, 0x0003003eu, 0x00002c86u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00003698u, 0x00002c83u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003699u, 0x00003698u, 0x00050084u, 0x00000006u, 0x0000369au, 0x00002c07u, 0x00003699u, 0x00050080u, 0x00000006u, 0x0000369bu, 0x00002c04u, 0x0000369au, 0x0003003eu, 0x0000368cu, 0x0000369bu, 0x00050041u, 0x00000007u, 0x0000369cu, 0x00002c83u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000369du, 0x0000369cu, 0x00050080u, 0x00000006u, 0x0000369fu, 0x0000369bu, 0x0000369du, 0x0003003eu, 0x0000368cu, 0x0000369fu, 0x000500c7u, 0x00000006u, 0x000036a1u, 0x0000369fu, 0x00000f0bu, 0x0003003eu, 0x0000368cu, 0x000036a1u, 0x0003003eu, 0x0000368du, 0x000036a1u, 0x0004003du, 0x00000006u, 0x000036a4u, 0x00003698u, 0x000500c7u, 0x00000006u, 0x000036a5u, 0x000036a4u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000036a6u, 0x000036a5u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000036a8u, 0x000036a1u, 0x000036a6u, 0x0003003eu, 0x0000368du, 0x000036a8u, 0x000500c6u, 0x00000006u, 0x000036aau, 0x000036a8u, 0x0000048bu, 0x0003003eu, 0x0000368du, 0x000036aau, 0x00080041u, 0x00000277u, 0x000036adu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000036aau, 0x0004003du, 0x00000229u, 0x000036aeu, 0x000036adu, 0x00040071u, 0x00000006u, 0x000036afu, 0x000036aeu, 0x0003003eu, 0x0000368eu, 0x000036afu, 0x000500c4u, 0x00000006u, 0x000036b1u, 0x000036afu, 0x00000215u, 0x00050080u, 0x00000006u, 0x000036b3u, 0x000036b1u, 0x0000048bu, 0x0003003eu, 0x0000368fu, 0x000036b3u, 0x000500c6u, 0x00000006u, 0x000036b6u, 0x000036b3u, 0x00002de2u, 0x0003003eu, 0x0000368fu, 0x000036b6u, 0x000500c5u, 0x00000006u, 0x000036b9u, 0x00000f3cu, 0x000036b6u, 0x00080041u, 0x00000270u, 0x000036bau, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000036b9u, 0x0004003du, 0x0000022bu, 0x000036bbu, 0x000036bau, 0x00040071u, 0x00000006u, 0x000036bcu, 0x000036bbu, 0x0003003eu, 0x0000368eu, 0x000036bcu, 0x000300f7u, 0x000036beu, 0x00000000u, 0x000400fau, 0x0000210cu, 0x000036bfu, 0x000036c0u, 0x000200f8u, 0x000036c0u, 0x0003003eu, 0x00003692u, 0x000036bcu, 0x00060050u, 0x00000353u, 0x000036dau, 0x000036bcu, 0x000036bcu, 0x000036bcu, 0x000500c2u, 0x00000353u, 0x000036dbu, 0x000036dau, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000036ddu, 0x000036dbu, 0x0000eee9u, 0x0003003eu, 0x000036d6u, 0x000036ddu, 0x000500c4u, 0x00000353u, 0x000036e0u, 0x000036ddu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000036e3u, 0x000036ddu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000036e4u, 0x000036e0u, 0x000036e3u, 0x0003003eu, 0x000036d6u, 0x000036e4u, 0x000500c7u, 0x00000006u, 0x000036e6u, 0x000036bcu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000036e7u, 0x000036e6u, 0x000006c2u, 0x0003003eu, 0x000036d7u, 0x000036e7u, 0x0004007cu, 0x0000003cu, 0x000036e9u, 0x000036e4u, 0x0004007cu, 0x00000008u, 0x000036ebu, 0x000036e7u, 0x00050051u, 0x00000008u, 0x000036ecu, 0x000036e9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000036edu, 0x000036e9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000036eeu, 0x000036e9u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000036efu, 0x000036ecu, 0x000036edu, 0x000036eeu, 0x000036ebu, 0x0003003eu, 0x000036d8u, 0x000036efu, 0x0003003eu, 0x00003690u, 0x000036efu, 0x000200f9u, 0x000036beu, 0x000200f8u, 0x000036bfu, 0x0003003eu, 0x00003691u, 0x000036bcu, 0x000500c2u, 0x00000006u, 0x000036cau, 0x000036bcu, 0x0000025eu, 0x0003003eu, 0x000036c6u, 0x000036cau, 0x000500c7u, 0x00000006u, 0x000036ccu, 0x000036bcu, 0x000006c2u, 0x0003003eu, 0x000036c7u, 0x000036ccu, 0x0004007cu, 0x00000008u, 0x000036ceu, 0x000036cau, 0x0004007cu, 0x00000008u, 0x000036d4u, 0x000036ccu, 0x00070050u, 0x00000009u, 0x000036d5u, 0x000036ceu, 0x000036ceu, 0x000036ceu, 0x000036d4u, 0x0003003eu, 0x000036c8u, 0x000036d5u, 0x0003003eu, 0x00003690u, 0x000036d5u, 0x000200f9u, 0x000036beu, 0x000200f8u, 0x000036beu, 0x000700f5u, 0x00000009u, 0x000080feu, 0x000036d5u, 0x000036bfu, 0x000036efu, 0x000036c0u, 0x0003003eu, 0x00003693u, 0x000080feu, 0x0003003eu, 0x00002c67u, 0x000080feu, 0x000200f9u, 0x00002e6bu, 0x000200f8u, 0x00002e6bu, 0x000700f5u, 0x00000009u, 0x00008453u, 0x00008418u, 0x00002e56u, 0x000080feu, 0x000036beu, 0x000200f9u, 0x00002de5u, 0x000200f8u, 0x00002de7u, 0x0004007cu, 0x000000a2u, 0x00002e15u, 0x00007f18u, 0x0004007cu, 0x00000006u, 0x00002e18u, 0x00002c16u, 0x000600a9u, 0x00000008u, 0x00002e1au, 0x00002dcbu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00002e1bu, 0x00002e1au, 0x0003003eu, 0x00006adfu, 0x00002c04u, 0x0003003eu, 0x00006ae0u, 0x00002c07u, 0x0003003eu, 0x00002c51u, 0x000020f8u, 0x0003003eu, 0x00002c52u, 0x00002e15u, 0x0003003eu, 0x00002c53u, 0x00002e18u, 0x0003003eu, 0x00002c54u, 0x00002e1bu, 0x0003003eu, 0x00002c55u, 0x00002de2u, 0x0003003eu, 0x00002c56u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x000033a1u, 0x00002c52u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000033a2u, 0x000033a1u, 0x00050084u, 0x00000006u, 0x000033a3u, 0x00002c07u, 0x000033a2u, 0x00050080u, 0x00000006u, 0x000033a4u, 0x00002c04u, 0x000033a3u, 0x0003003eu, 0x00003394u, 0x000033a4u, 0x00050041u, 0x00000007u, 0x000033a5u, 0x00002c52u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000033a6u, 0x000033a5u, 0x000500c2u, 0x00000006u, 0x000033a7u, 0x000033a6u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000033a9u, 0x000033a4u, 0x000033a7u, 0x0003003eu, 0x00003394u, 0x000033a9u, 0x000500c7u, 0x00000006u, 0x000033abu, 0x000033a9u, 0x00000f0bu, 0x0003003eu, 0x00003394u, 0x000033abu, 0x0004003du, 0x00000006u, 0x000033adu, 0x000033a5u, 0x000400c8u, 0x00000006u, 0x000033aeu, 0x000033adu, 0x000500c7u, 0x00000006u, 0x000033afu, 0x000033aeu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000033b0u, 0x000033afu, 0x00000701u, 0x0003003eu, 0x00003395u, 0x000033b0u, 0x0003003eu, 0x00003396u, 0x000033abu, 0x0004003du, 0x00000006u, 0x000033b3u, 0x000033a1u, 0x000500c7u, 0x00000006u, 0x000033b4u, 0x000033b3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000033b5u, 0x000033b4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000033b7u, 0x000033abu, 0x000033b5u, 0x0003003eu, 0x00003396u, 0x000033b7u, 0x000500c6u, 0x00000006u, 0x000033b9u, 0x000033b7u, 0x0000048bu, 0x0003003eu, 0x00003396u, 0x000033b9u, 0x00080041u, 0x00000277u, 0x000033bcu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000033b9u, 0x0004003du, 0x00000229u, 0x000033bdu, 0x000033bcu, 0x00040071u, 0x00000006u, 0x000033beu, 0x000033bdu, 0x0003003eu, 0x00003397u, 0x000033beu, 0x000500c2u, 0x00000006u, 0x000033c1u, 0x000033beu, 0x000033b0u, 0x000500c7u, 0x00000006u, 0x000033c2u, 0x000033c1u, 0x00000e7cu, 0x0003003eu, 0x00003397u, 0x000033c2u, 0x000500c4u, 0x00000006u, 0x000033c4u, 0x00002e18u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000033c6u, 0x000033c2u, 0x000033c4u, 0x0003003eu, 0x00003397u, 0x000033c6u, 0x000500c4u, 0x00000006u, 0x000033c8u, 0x000033c6u, 0x00000215u, 0x00050080u, 0x00000006u, 0x000033cau, 0x000033c8u, 0x00002e1bu, 0x0003003eu, 0x00003398u, 0x000033cau, 0x000500c6u, 0x00000006u, 0x000033cdu, 0x000033cau, 0x00002de2u, 0x0003003eu, 0x00003398u, 0x000033cdu, 0x000500c5u, 0x00000006u, 0x000033d0u, 0x00000f3cu, 0x000033cdu, 0x00080041u, 0x00000270u, 0x000033d1u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000033d0u, 0x0004003du, 0x0000022bu, 0x000033d2u, 0x000033d1u, 0x00040071u, 0x00000006u, 0x000033d3u, 0x000033d2u, 0x0003003eu, 0x00003397u, 0x000033d3u, 0x000300f7u, 0x000033d5u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x000033d6u, 0x000033d7u, 0x000200f8u, 0x000033d7u, 0x0003003eu, 0x0000339bu, 0x000033d3u, 0x00060050u, 0x00000353u, 0x000033f1u, 0x000033d3u, 0x000033d3u, 0x000033d3u, 0x000500c2u, 0x00000353u, 0x000033f2u, 0x000033f1u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000033f4u, 0x000033f2u, 0x0000eee9u, 0x0003003eu, 0x000033edu, 0x000033f4u, 0x000500c4u, 0x00000353u, 0x000033f7u, 0x000033f4u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000033fau, 0x000033f4u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000033fbu, 0x000033f7u, 0x000033fau, 0x0003003eu, 0x000033edu, 0x000033fbu, 0x000500c7u, 0x00000006u, 0x000033fdu, 0x000033d3u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000033feu, 0x000033fdu, 0x000006c2u, 0x0003003eu, 0x000033eeu, 0x000033feu, 0x0004007cu, 0x0000003cu, 0x00003400u, 0x000033fbu, 0x0004007cu, 0x00000008u, 0x00003402u, 0x000033feu, 0x00050051u, 0x00000008u, 0x00003403u, 0x00003400u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003404u, 0x00003400u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003405u, 0x00003400u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003406u, 0x00003403u, 0x00003404u, 0x00003405u, 0x00003402u, 0x0003003eu, 0x000033efu, 0x00003406u, 0x0003003eu, 0x00003399u, 0x00003406u, 0x000200f9u, 0x000033d5u, 0x000200f8u, 0x000033d6u, 0x0003003eu, 0x0000339au, 0x000033d3u, 0x000500c2u, 0x00000006u, 0x000033e1u, 0x000033d3u, 0x0000025eu, 0x0003003eu, 0x000033ddu, 0x000033e1u, 0x000500c7u, 0x00000006u, 0x000033e3u, 0x000033d3u, 0x000006c2u, 0x0003003eu, 0x000033deu, 0x000033e3u, 0x0004007cu, 0x00000008u, 0x000033e5u, 0x000033e1u, 0x0004007cu, 0x00000008u, 0x000033ebu, 0x000033e3u, 0x00070050u, 0x00000009u, 0x000033ecu, 0x000033e5u, 0x000033e5u, 0x000033e5u, 0x000033ebu, 0x0003003eu, 0x000033dfu, 0x000033ecu, 0x0003003eu, 0x00003399u, 0x000033ecu, 0x000200f9u, 0x000033d5u, 0x000200f8u, 0x000033d5u, 0x000700f5u, 0x00000009u, 0x000080ffu, 0x000033ecu, 0x000033d6u, 0x00003406u, 0x000033d7u, 0x0003003eu, 0x0000339cu, 0x000080ffu, 0x0003003eu, 0x00002c4fu, 0x000080ffu, 0x000300f7u, 0x00002e22u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002e23u, 0x00002e22u, 0x000200f8u, 0x00002e23u, 0x00050050u, 0x0000005fu, 0x00002e26u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002e27u, 0x00002e26u, 0x0003003eu, 0x00006ae3u, 0x00002c04u, 0x0003003eu, 0x00006ae4u, 0x00002c07u, 0x0003003eu, 0x00002c59u, 0x000020f8u, 0x0003003eu, 0x00002c5au, 0x00002e27u, 0x0003003eu, 0x00002c5bu, 0x00002e18u, 0x0003003eu, 0x00002c5cu, 0x00000485u, 0x0003003eu, 0x00002c5du, 0x00002de2u, 0x0003003eu, 0x00002c5eu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00003414u, 0x00002c5au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003415u, 0x00003414u, 0x00050084u, 0x00000006u, 0x00003416u, 0x00002c07u, 0x00003415u, 0x00050080u, 0x00000006u, 0x00003417u, 0x00002c04u, 0x00003416u, 0x0003003eu, 0x00003407u, 0x00003417u, 0x00050041u, 0x00000007u, 0x00003418u, 0x00002c5au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003419u, 0x00003418u, 0x000500c2u, 0x00000006u, 0x0000341au, 0x00003419u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000341cu, 0x00003417u, 0x0000341au, 0x0003003eu, 0x00003407u, 0x0000341cu, 0x000500c7u, 0x00000006u, 0x0000341eu, 0x0000341cu, 0x00000f0bu, 0x0003003eu, 0x00003407u, 0x0000341eu, 0x0004003du, 0x00000006u, 0x00003420u, 0x00003418u, 0x000400c8u, 0x00000006u, 0x00003421u, 0x00003420u, 0x000500c7u, 0x00000006u, 0x00003422u, 0x00003421u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003423u, 0x00003422u, 0x00000701u, 0x0003003eu, 0x00003408u, 0x00003423u, 0x0003003eu, 0x00003409u, 0x0000341eu, 0x0004003du, 0x00000006u, 0x00003426u, 0x00003414u, 0x000500c7u, 0x00000006u, 0x00003427u, 0x00003426u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003428u, 0x00003427u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000342au, 0x0000341eu, 0x00003428u, 0x0003003eu, 0x00003409u, 0x0000342au, 0x000500c6u, 0x00000006u, 0x0000342cu, 0x0000342au, 0x0000048bu, 0x0003003eu, 0x00003409u, 0x0000342cu, 0x00080041u, 0x00000277u, 0x0000342fu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000342cu, 0x0004003du, 0x00000229u, 0x00003430u, 0x0000342fu, 0x00040071u, 0x00000006u, 0x00003431u, 0x00003430u, 0x0003003eu, 0x0000340au, 0x00003431u, 0x000500c2u, 0x00000006u, 0x00003434u, 0x00003431u, 0x00003423u, 0x000500c7u, 0x00000006u, 0x00003435u, 0x00003434u, 0x00000e7cu, 0x0003003eu, 0x0000340au, 0x00003435u, 0x000500c5u, 0x00000006u, 0x00003439u, 0x00003435u, 0x000033c4u, 0x0003003eu, 0x0000340au, 0x00003439u, 0x000500c4u, 0x00000006u, 0x0000343bu, 0x00003439u, 0x00000215u, 0x00050080u, 0x00000006u, 0x0000343du, 0x0000343bu, 0x00000485u, 0x0003003eu, 0x0000340bu, 0x0000343du, 0x000500c6u, 0x00000006u, 0x00003440u, 0x0000343du, 0x00002de2u, 0x0003003eu, 0x0000340bu, 0x00003440u, 0x000500c5u, 0x00000006u, 0x00003443u, 0x00000f3cu, 0x00003440u, 0x00080041u, 0x00000270u, 0x00003444u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003443u, 0x0004003du, 0x0000022bu, 0x00003445u, 0x00003444u, 0x00040071u, 0x00000006u, 0x00003446u, 0x00003445u, 0x0003003eu, 0x0000340au, 0x00003446u, 0x000300f7u, 0x00003448u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00003449u, 0x0000344au, 0x000200f8u, 0x0000344au, 0x0003003eu, 0x0000340eu, 0x00003446u, 0x00060050u, 0x00000353u, 0x00003464u, 0x00003446u, 0x00003446u, 0x00003446u, 0x000500c2u, 0x00000353u, 0x00003465u, 0x00003464u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00003467u, 0x00003465u, 0x0000eee9u, 0x0003003eu, 0x00003460u, 0x00003467u, 0x000500c4u, 0x00000353u, 0x0000346au, 0x00003467u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x0000346du, 0x00003467u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x0000346eu, 0x0000346au, 0x0000346du, 0x0003003eu, 0x00003460u, 0x0000346eu, 0x000500c7u, 0x00000006u, 0x00003470u, 0x00003446u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003471u, 0x00003470u, 0x000006c2u, 0x0003003eu, 0x00003461u, 0x00003471u, 0x0004007cu, 0x0000003cu, 0x00003473u, 0x0000346eu, 0x0004007cu, 0x00000008u, 0x00003475u, 0x00003471u, 0x00050051u, 0x00000008u, 0x00003476u, 0x00003473u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003477u, 0x00003473u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003478u, 0x00003473u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003479u, 0x00003476u, 0x00003477u, 0x00003478u, 0x00003475u, 0x0003003eu, 0x00003462u, 0x00003479u, 0x0003003eu, 0x0000340cu, 0x00003479u, 0x000200f9u, 0x00003448u, 0x000200f8u, 0x00003449u, 0x0003003eu, 0x0000340du, 0x00003446u, 0x000500c2u, 0x00000006u, 0x00003454u, 0x00003446u, 0x0000025eu, 0x0003003eu, 0x00003450u, 0x00003454u, 0x000500c7u, 0x00000006u, 0x00003456u, 0x00003446u, 0x000006c2u, 0x0003003eu, 0x00003451u, 0x00003456u, 0x0004007cu, 0x00000008u, 0x00003458u, 0x00003454u, 0x0004007cu, 0x00000008u, 0x0000345eu, 0x00003456u, 0x00070050u, 0x00000009u, 0x0000345fu, 0x00003458u, 0x00003458u, 0x00003458u, 0x0000345eu, 0x0003003eu, 0x00003452u, 0x0000345fu, 0x0003003eu, 0x0000340cu, 0x0000345fu, 0x000200f9u, 0x00003448u, 0x000200f8u, 0x00003448u, 0x000700f5u, 0x00000009u, 0x00008114u, 0x0000345fu, 0x00003449u, 0x00003479u, 0x0000344au, 0x0003003eu, 0x0000340fu, 0x00008114u, 0x0003003eu, 0x00002c57u, 0x00008114u, 0x00050050u, 0x0000005fu, 0x00002e32u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e33u, 0x00002e32u, 0x0003003eu, 0x00006ae7u, 0x00002c04u, 0x0003003eu, 0x00006ae8u, 0x00002c07u, 0x0003003eu, 0x00002c61u, 0x000020f8u, 0x0003003eu, 0x00002c62u, 0x00002e33u, 0x0003003eu, 0x00002c63u, 0x00002e18u, 0x0003003eu, 0x00002c64u, 0x000003c4u, 0x0003003eu, 0x00002c65u, 0x00002de2u, 0x0003003eu, 0x00002c66u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00003487u, 0x00002c62u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003488u, 0x00003487u, 0x00050084u, 0x00000006u, 0x00003489u, 0x00002c07u, 0x00003488u, 0x00050080u, 0x00000006u, 0x0000348au, 0x00002c04u, 0x00003489u, 0x0003003eu, 0x0000347au, 0x0000348au, 0x00050041u, 0x00000007u, 0x0000348bu, 0x00002c62u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000348cu, 0x0000348bu, 0x000500c2u, 0x00000006u, 0x0000348du, 0x0000348cu, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000348fu, 0x0000348au, 0x0000348du, 0x0003003eu, 0x0000347au, 0x0000348fu, 0x000500c7u, 0x00000006u, 0x00003491u, 0x0000348fu, 0x00000f0bu, 0x0003003eu, 0x0000347au, 0x00003491u, 0x0004003du, 0x00000006u, 0x00003493u, 0x0000348bu, 0x000400c8u, 0x00000006u, 0x00003494u, 0x00003493u, 0x000500c7u, 0x00000006u, 0x00003495u, 0x00003494u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003496u, 0x00003495u, 0x00000701u, 0x0003003eu, 0x0000347bu, 0x00003496u, 0x0003003eu, 0x0000347cu, 0x00003491u, 0x0004003du, 0x00000006u, 0x00003499u, 0x00003487u, 0x000500c7u, 0x00000006u, 0x0000349au, 0x00003499u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000349bu, 0x0000349au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000349du, 0x00003491u, 0x0000349bu, 0x0003003eu, 0x0000347cu, 0x0000349du, 0x000500c6u, 0x00000006u, 0x0000349fu, 0x0000349du, 0x0000048bu, 0x0003003eu, 0x0000347cu, 0x0000349fu, 0x00080041u, 0x00000277u, 0x000034a2u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000349fu, 0x0004003du, 0x00000229u, 0x000034a3u, 0x000034a2u, 0x00040071u, 0x00000006u, 0x000034a4u, 0x000034a3u, 0x0003003eu, 0x0000347du, 0x000034a4u, 0x000500c2u, 0x00000006u, 0x000034a7u, 0x000034a4u, 0x00003496u, 0x000500c7u, 0x00000006u, 0x000034a8u, 0x000034a7u, 0x00000e7cu, 0x0003003eu, 0x0000347du, 0x000034a8u, 0x000500c5u, 0x00000006u, 0x000034acu, 0x000034a8u, 0x000033c4u, 0x0003003eu, 0x0000347du, 0x000034acu, 0x000500c4u, 0x00000006u, 0x000034aeu, 0x000034acu, 0x00000215u, 0x00050080u, 0x00000006u, 0x000034b0u, 0x000034aeu, 0x000003c4u, 0x0003003eu, 0x0000347eu, 0x000034b0u, 0x000500c6u, 0x00000006u, 0x000034b3u, 0x000034b0u, 0x00002de2u, 0x0003003eu, 0x0000347eu, 0x000034b3u, 0x000500c5u, 0x00000006u, 0x000034b6u, 0x00000f3cu, 0x000034b3u, 0x00080041u, 0x00000270u, 0x000034b7u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000034b6u, 0x0004003du, 0x0000022bu, 0x000034b8u, 0x000034b7u, 0x00040071u, 0x00000006u, 0x000034b9u, 0x000034b8u, 0x0003003eu, 0x0000347du, 0x000034b9u, 0x000300f7u, 0x000034bbu, 0x00000000u, 0x000400fau, 0x0000210cu, 0x000034bcu, 0x000034bdu, 0x000200f8u, 0x000034bdu, 0x0003003eu, 0x00003481u, 0x000034b9u, 0x00060050u, 0x00000353u, 0x000034d7u, 0x000034b9u, 0x000034b9u, 0x000034b9u, 0x000500c2u, 0x00000353u, 0x000034d8u, 0x000034d7u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000034dau, 0x000034d8u, 0x0000eee9u, 0x0003003eu, 0x000034d3u, 0x000034dau, 0x000500c4u, 0x00000353u, 0x000034ddu, 0x000034dau, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000034e0u, 0x000034dau, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000034e1u, 0x000034ddu, 0x000034e0u, 0x0003003eu, 0x000034d3u, 0x000034e1u, 0x000500c7u, 0x00000006u, 0x000034e3u, 0x000034b9u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000034e4u, 0x000034e3u, 0x000006c2u, 0x0003003eu, 0x000034d4u, 0x000034e4u, 0x0004007cu, 0x0000003cu, 0x000034e6u, 0x000034e1u, 0x0004007cu, 0x00000008u, 0x000034e8u, 0x000034e4u, 0x00050051u, 0x00000008u, 0x000034e9u, 0x000034e6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000034eau, 0x000034e6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000034ebu, 0x000034e6u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000034ecu, 0x000034e9u, 0x000034eau, 0x000034ebu, 0x000034e8u, 0x0003003eu, 0x000034d5u, 0x000034ecu, 0x0003003eu, 0x0000347fu, 0x000034ecu, 0x000200f9u, 0x000034bbu, 0x000200f8u, 0x000034bcu, 0x0003003eu, 0x00003480u, 0x000034b9u, 0x000500c2u, 0x00000006u, 0x000034c7u, 0x000034b9u, 0x0000025eu, 0x0003003eu, 0x000034c3u, 0x000034c7u, 0x000500c7u, 0x00000006u, 0x000034c9u, 0x000034b9u, 0x000006c2u, 0x0003003eu, 0x000034c4u, 0x000034c9u, 0x0004007cu, 0x00000008u, 0x000034cbu, 0x000034c7u, 0x0004007cu, 0x00000008u, 0x000034d1u, 0x000034c9u, 0x00070050u, 0x00000009u, 0x000034d2u, 0x000034cbu, 0x000034cbu, 0x000034cbu, 0x000034d1u, 0x0003003eu, 0x000034c5u, 0x000034d2u, 0x0003003eu, 0x0000347fu, 0x000034d2u, 0x000200f9u, 0x000034bbu, 0x000200f8u, 0x000034bbu, 0x000700f5u, 0x00000009u, 0x0000812au, 0x000034d2u, 0x000034bcu, 0x000034ecu, 0x000034bdu, 0x0003003eu, 0x00003482u, 0x0000812au, 0x0003003eu, 0x00002c5fu, 0x0000812au, 0x000200f9u, 0x00002e22u, 0x000200f8u, 0x00002e22u, 0x000700f5u, 0x00000009u, 0x000083d4u, 0x0000839eu, 0x000033d5u, 0x0000812au, 0x000034bbu, 0x000700f5u, 0x00000009u, 0x000082dau, 0x000082a2u, 0x000033d5u, 0x00008114u, 0x000034bbu, 0x000300f7u, 0x00002e3du, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002e3eu, 0x00002e3du, 0x000200f8u, 0x00002e3eu, 0x00050050u, 0x0000005fu, 0x00002e41u, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e42u, 0x00002e41u, 0x0003003eu, 0x00006aebu, 0x00002c04u, 0x0003003eu, 0x00006aecu, 0x00002c07u, 0x0003003eu, 0x00002c69u, 0x000020f8u, 0x0003003eu, 0x00002c6au, 0x00002e42u, 0x0003003eu, 0x00002c6bu, 0x00002e18u, 0x0003003eu, 0x00002c6cu, 0x0000048bu, 0x0003003eu, 0x00002c6du, 0x00002de2u, 0x0003003eu, 0x00002c6eu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x000034fau, 0x00002c6au, 0x00000485u, 0x0004003du, 0x00000006u, 0x000034fbu, 0x000034fau, 0x00050084u, 0x00000006u, 0x000034fcu, 0x00002c07u, 0x000034fbu, 0x00050080u, 0x00000006u, 0x000034fdu, 0x00002c04u, 0x000034fcu, 0x0003003eu, 0x000034edu, 0x000034fdu, 0x00050041u, 0x00000007u, 0x000034feu, 0x00002c6au, 0x00000374u, 0x0004003du, 0x00000006u, 0x000034ffu, 0x000034feu, 0x000500c2u, 0x00000006u, 0x00003500u, 0x000034ffu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00003502u, 0x000034fdu, 0x00003500u, 0x0003003eu, 0x000034edu, 0x00003502u, 0x000500c7u, 0x00000006u, 0x00003504u, 0x00003502u, 0x00000f0bu, 0x0003003eu, 0x000034edu, 0x00003504u, 0x0004003du, 0x00000006u, 0x00003506u, 0x000034feu, 0x000400c8u, 0x00000006u, 0x00003507u, 0x00003506u, 0x000500c7u, 0x00000006u, 0x00003508u, 0x00003507u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003509u, 0x00003508u, 0x00000701u, 0x0003003eu, 0x000034eeu, 0x00003509u, 0x0003003eu, 0x000034efu, 0x00003504u, 0x0004003du, 0x00000006u, 0x0000350cu, 0x000034fau, 0x000500c7u, 0x00000006u, 0x0000350du, 0x0000350cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000350eu, 0x0000350du, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00003510u, 0x00003504u, 0x0000350eu, 0x0003003eu, 0x000034efu, 0x00003510u, 0x000500c6u, 0x00000006u, 0x00003512u, 0x00003510u, 0x0000048bu, 0x0003003eu, 0x000034efu, 0x00003512u, 0x00080041u, 0x00000277u, 0x00003515u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003512u, 0x0004003du, 0x00000229u, 0x00003516u, 0x00003515u, 0x00040071u, 0x00000006u, 0x00003517u, 0x00003516u, 0x0003003eu, 0x000034f0u, 0x00003517u, 0x000500c2u, 0x00000006u, 0x0000351au, 0x00003517u, 0x00003509u, 0x000500c7u, 0x00000006u, 0x0000351bu, 0x0000351au, 0x00000e7cu, 0x0003003eu, 0x000034f0u, 0x0000351bu, 0x000500c5u, 0x00000006u, 0x0000351fu, 0x0000351bu, 0x000033c4u, 0x0003003eu, 0x000034f0u, 0x0000351fu, 0x000500c4u, 0x00000006u, 0x00003521u, 0x0000351fu, 0x00000215u, 0x00050080u, 0x00000006u, 0x00003523u, 0x00003521u, 0x0000048bu, 0x0003003eu, 0x000034f1u, 0x00003523u, 0x000500c6u, 0x00000006u, 0x00003526u, 0x00003523u, 0x00002de2u, 0x0003003eu, 0x000034f1u, 0x00003526u, 0x000500c5u, 0x00000006u, 0x00003529u, 0x00000f3cu, 0x00003526u, 0x00080041u, 0x00000270u, 0x0000352au, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003529u, 0x0004003du, 0x0000022bu, 0x0000352bu, 0x0000352au, 0x00040071u, 0x00000006u, 0x0000352cu, 0x0000352bu, 0x0003003eu, 0x000034f0u, 0x0000352cu, 0x000300f7u, 0x0000352eu, 0x00000000u, 0x000400fau, 0x0000210cu, 0x0000352fu, 0x00003530u, 0x000200f8u, 0x00003530u, 0x0003003eu, 0x000034f4u, 0x0000352cu, 0x00060050u, 0x00000353u, 0x0000354au, 0x0000352cu, 0x0000352cu, 0x0000352cu, 0x000500c2u, 0x00000353u, 0x0000354bu, 0x0000354au, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x0000354du, 0x0000354bu, 0x0000eee9u, 0x0003003eu, 0x00003546u, 0x0000354du, 0x000500c4u, 0x00000353u, 0x00003550u, 0x0000354du, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00003553u, 0x0000354du, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003554u, 0x00003550u, 0x00003553u, 0x0003003eu, 0x00003546u, 0x00003554u, 0x000500c7u, 0x00000006u, 0x00003556u, 0x0000352cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003557u, 0x00003556u, 0x000006c2u, 0x0003003eu, 0x00003547u, 0x00003557u, 0x0004007cu, 0x0000003cu, 0x00003559u, 0x00003554u, 0x0004007cu, 0x00000008u, 0x0000355bu, 0x00003557u, 0x00050051u, 0x00000008u, 0x0000355cu, 0x00003559u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000355du, 0x00003559u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000355eu, 0x00003559u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000355fu, 0x0000355cu, 0x0000355du, 0x0000355eu, 0x0000355bu, 0x0003003eu, 0x00003548u, 0x0000355fu, 0x0003003eu, 0x000034f2u, 0x0000355fu, 0x000200f9u, 0x0000352eu, 0x000200f8u, 0x0000352fu, 0x0003003eu, 0x000034f3u, 0x0000352cu, 0x000500c2u, 0x00000006u, 0x0000353au, 0x0000352cu, 0x0000025eu, 0x0003003eu, 0x00003536u, 0x0000353au, 0x000500c7u, 0x00000006u, 0x0000353cu, 0x0000352cu, 0x000006c2u, 0x0003003eu, 0x00003537u, 0x0000353cu, 0x0004007cu, 0x00000008u, 0x0000353eu, 0x0000353au, 0x0004007cu, 0x00000008u, 0x00003544u, 0x0000353cu, 0x00070050u, 0x00000009u, 0x00003545u, 0x0000353eu, 0x0000353eu, 0x0000353eu, 0x00003544u, 0x0003003eu, 0x00003538u, 0x00003545u, 0x0003003eu, 0x000034f2u, 0x00003545u, 0x000200f9u, 0x0000352eu, 0x000200f8u, 0x0000352eu, 0x000700f5u, 0x00000009u, 0x00008156u, 0x00003545u, 0x0000352fu, 0x0000355fu, 0x00003530u, 0x0003003eu, 0x000034f5u, 0x00008156u, 0x0003003eu, 0x00002c67u, 0x00008156u, 0x000200f9u, 0x00002e3du, 0x000200f8u, 0x00002e3du, 0x000700f5u, 0x00000009u, 0x0000844eu, 0x00008418u, 0x00002e22u, 0x00008156u, 0x0000352eu, 0x000200f9u, 0x00002de5u, 0x000200f8u, 0x00002de6u, 0x0004007cu, 0x000000a2u, 0x00002deau, 0x00007f18u, 0x000600a9u, 0x00000008u, 0x00002decu, 0x00002dcbu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00002dedu, 0x00002decu, 0x0003003eu, 0x00006affu, 0x00002c04u, 0x0003003eu, 0x00006b00u, 0x00002c07u, 0x0003003eu, 0x00002c88u, 0x000020f8u, 0x0003003eu, 0x00002c89u, 0x00002deau, 0x0003003eu, 0x00002c8au, 0x00002dedu, 0x0003003eu, 0x00002c8bu, 0x00002de2u, 0x0003003eu, 0x00002c8cu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00003204u, 0x00002c89u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00003205u, 0x00003204u, 0x00050084u, 0x00000006u, 0x00003206u, 0x00002c07u, 0x00003205u, 0x00050080u, 0x00000006u, 0x00003207u, 0x00002c04u, 0x00003206u, 0x0003003eu, 0x000031f8u, 0x00003207u, 0x00050041u, 0x00000007u, 0x00003208u, 0x00002c89u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003209u, 0x00003208u, 0x00050084u, 0x00000006u, 0x0000320au, 0x00003209u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000320cu, 0x00003207u, 0x0000320au, 0x0003003eu, 0x000031f8u, 0x0000320cu, 0x000500c7u, 0x00000006u, 0x0000320eu, 0x0000320cu, 0x00000f0bu, 0x0003003eu, 0x000031f8u, 0x0000320eu, 0x000500c2u, 0x00000006u, 0x00003210u, 0x0000320eu, 0x00000212u, 0x0003003eu, 0x000031f9u, 0x00003210u, 0x0004003du, 0x00000006u, 0x00003212u, 0x00003204u, 0x000500c7u, 0x00000006u, 0x00003213u, 0x00003212u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003214u, 0x00003213u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00003216u, 0x00003210u, 0x00003214u, 0x0003003eu, 0x000031f9u, 0x00003216u, 0x000500c6u, 0x00000006u, 0x00003218u, 0x00003216u, 0x00000485u, 0x0003003eu, 0x000031f9u, 0x00003218u, 0x00080041u, 0x00000270u, 0x0000321bu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003218u, 0x0004003du, 0x0000022bu, 0x0000321cu, 0x0000321bu, 0x00040071u, 0x00000006u, 0x0000321du, 0x0000321cu, 0x0003003eu, 0x000031fau, 0x0000321du, 0x000500c2u, 0x00000006u, 0x0000321fu, 0x0000321du, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00003220u, 0x0000321fu, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00003222u, 0x00003220u, 0x00002dedu, 0x0003003eu, 0x000031fbu, 0x00003222u, 0x000500c6u, 0x00000006u, 0x00003225u, 0x00003222u, 0x00002de2u, 0x0003003eu, 0x000031fbu, 0x00003225u, 0x000500c5u, 0x00000006u, 0x00003228u, 0x00000f3cu, 0x00003225u, 0x00080041u, 0x00000270u, 0x00003229u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00003228u, 0x0004003du, 0x0000022bu, 0x0000322au, 0x00003229u, 0x00040071u, 0x00000006u, 0x0000322bu, 0x0000322au, 0x0003003eu, 0x000031fau, 0x0000322bu, 0x000300f7u, 0x0000322du, 0x00000000u, 0x000400fau, 0x0000210cu, 0x0000322eu, 0x0000322fu, 0x000200f8u, 0x0000322fu, 0x0003003eu, 0x000031feu, 0x0000322bu, 0x00060050u, 0x00000353u, 0x00003249u, 0x0000322bu, 0x0000322bu, 0x0000322bu, 0x000500c2u, 0x00000353u, 0x0000324au, 0x00003249u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x0000324cu, 0x0000324au, 0x0000eee9u, 0x0003003eu, 0x00003245u, 0x0000324cu, 0x000500c4u, 0x00000353u, 0x0000324fu, 0x0000324cu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00003252u, 0x0000324cu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003253u, 0x0000324fu, 0x00003252u, 0x0003003eu, 0x00003245u, 0x00003253u, 0x000500c7u, 0x00000006u, 0x00003255u, 0x0000322bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003256u, 0x00003255u, 0x000006c2u, 0x0003003eu, 0x00003246u, 0x00003256u, 0x0004007cu, 0x0000003cu, 0x00003258u, 0x00003253u, 0x0004007cu, 0x00000008u, 0x0000325au, 0x00003256u, 0x00050051u, 0x00000008u, 0x0000325bu, 0x00003258u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000325cu, 0x00003258u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000325du, 0x00003258u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000325eu, 0x0000325bu, 0x0000325cu, 0x0000325du, 0x0000325au, 0x0003003eu, 0x00003247u, 0x0000325eu, 0x0003003eu, 0x000031fcu, 0x0000325eu, 0x000200f9u, 0x0000322du, 0x000200f8u, 0x0000322eu, 0x0003003eu, 0x000031fdu, 0x0000322bu, 0x000500c2u, 0x00000006u, 0x00003239u, 0x0000322bu, 0x0000025eu, 0x0003003eu, 0x00003235u, 0x00003239u, 0x000500c7u, 0x00000006u, 0x0000323bu, 0x0000322bu, 0x000006c2u, 0x0003003eu, 0x00003236u, 0x0000323bu, 0x0004007cu, 0x00000008u, 0x0000323du, 0x00003239u, 0x0004007cu, 0x00000008u, 0x00003243u, 0x0000323bu, 0x00070050u, 0x00000009u, 0x00003244u, 0x0000323du, 0x0000323du, 0x0000323du, 0x00003243u, 0x0003003eu, 0x00003237u, 0x00003244u, 0x0003003eu, 0x000031fcu, 0x00003244u, 0x000200f9u, 0x0000322du, 0x000200f8u, 0x0000322du, 0x000700f5u, 0x00000009u, 0x00008157u, 0x00003244u, 0x0000322eu, 0x0000325eu, 0x0000322fu, 0x0003003eu, 0x000031ffu, 0x00008157u, 0x0003003eu, 0x00002c4fu, 0x00008157u, 0x000300f7u, 0x00002df4u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00002df5u, 0x00002df4u, 0x000200f8u, 0x00002df5u, 0x00050050u, 0x0000005fu, 0x00002df8u, 0x00007ecdu, 0x00002db8u, 0x0004007cu, 0x000000a2u, 0x00002df9u, 0x00002df8u, 0x0003003eu, 0x00006b03u, 0x00002c04u, 0x0003003eu, 0x00006b04u, 0x00002c07u, 0x0003003eu, 0x00002c8eu, 0x000020f8u, 0x0003003eu, 0x00002c8fu, 0x00002df9u, 0x0003003eu, 0x00002c90u, 0x00000485u, 0x0003003eu, 0x00002c91u, 0x00002de2u, 0x0003003eu, 0x00002c92u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x0000326bu, 0x00002c8fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000326cu, 0x0000326bu, 0x00050084u, 0x00000006u, 0x0000326du, 0x00002c07u, 0x0000326cu, 0x00050080u, 0x00000006u, 0x0000326eu, 0x00002c04u, 0x0000326du, 0x0003003eu, 0x0000325fu, 0x0000326eu, 0x00050041u, 0x00000007u, 0x0000326fu, 0x00002c8fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00003270u, 0x0000326fu, 0x00050084u, 0x00000006u, 0x00003271u, 0x00003270u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003273u, 0x0000326eu, 0x00003271u, 0x0003003eu, 0x0000325fu, 0x00003273u, 0x000500c7u, 0x00000006u, 0x00003275u, 0x00003273u, 0x00000f0bu, 0x0003003eu, 0x0000325fu, 0x00003275u, 0x000500c2u, 0x00000006u, 0x00003277u, 0x00003275u, 0x00000212u, 0x0003003eu, 0x00003260u, 0x00003277u, 0x0004003du, 0x00000006u, 0x00003279u, 0x0000326bu, 0x000500c7u, 0x00000006u, 0x0000327au, 0x00003279u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000327bu, 0x0000327au, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000327du, 0x00003277u, 0x0000327bu, 0x0003003eu, 0x00003260u, 0x0000327du, 0x000500c6u, 0x00000006u, 0x0000327fu, 0x0000327du, 0x00000485u, 0x0003003eu, 0x00003260u, 0x0000327fu, 0x00080041u, 0x00000270u, 0x00003282u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000327fu, 0x0004003du, 0x0000022bu, 0x00003283u, 0x00003282u, 0x00040071u, 0x00000006u, 0x00003284u, 0x00003283u, 0x0003003eu, 0x00003261u, 0x00003284u, 0x000500c2u, 0x00000006u, 0x00003286u, 0x00003284u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00003287u, 0x00003286u, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00003289u, 0x00003287u, 0x00000485u, 0x0003003eu, 0x00003262u, 0x00003289u, 0x000500c6u, 0x00000006u, 0x0000328cu, 0x00003289u, 0x00002de2u, 0x0003003eu, 0x00003262u, 0x0000328cu, 0x000500c5u, 0x00000006u, 0x0000328fu, 0x00000f3cu, 0x0000328cu, 0x00080041u, 0x00000270u, 0x00003290u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000328fu, 0x0004003du, 0x0000022bu, 0x00003291u, 0x00003290u, 0x00040071u, 0x00000006u, 0x00003292u, 0x00003291u, 0x0003003eu, 0x00003261u, 0x00003292u, 0x000300f7u, 0x00003294u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00003295u, 0x00003296u, 0x000200f8u, 0x00003296u, 0x0003003eu, 0x00003265u, 0x00003292u, 0x00060050u, 0x00000353u, 0x000032b0u, 0x00003292u, 0x00003292u, 0x00003292u, 0x000500c2u, 0x00000353u, 0x000032b1u, 0x000032b0u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000032b3u, 0x000032b1u, 0x0000eee9u, 0x0003003eu, 0x000032acu, 0x000032b3u, 0x000500c4u, 0x00000353u, 0x000032b6u, 0x000032b3u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000032b9u, 0x000032b3u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000032bau, 0x000032b6u, 0x000032b9u, 0x0003003eu, 0x000032acu, 0x000032bau, 0x000500c7u, 0x00000006u, 0x000032bcu, 0x00003292u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000032bdu, 0x000032bcu, 0x000006c2u, 0x0003003eu, 0x000032adu, 0x000032bdu, 0x0004007cu, 0x0000003cu, 0x000032bfu, 0x000032bau, 0x0004007cu, 0x00000008u, 0x000032c1u, 0x000032bdu, 0x00050051u, 0x00000008u, 0x000032c2u, 0x000032bfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000032c3u, 0x000032bfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000032c4u, 0x000032bfu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000032c5u, 0x000032c2u, 0x000032c3u, 0x000032c4u, 0x000032c1u, 0x0003003eu, 0x000032aeu, 0x000032c5u, 0x0003003eu, 0x00003263u, 0x000032c5u, 0x000200f9u, 0x00003294u, 0x000200f8u, 0x00003295u, 0x0003003eu, 0x00003264u, 0x00003292u, 0x000500c2u, 0x00000006u, 0x000032a0u, 0x00003292u, 0x0000025eu, 0x0003003eu, 0x0000329cu, 0x000032a0u, 0x000500c7u, 0x00000006u, 0x000032a2u, 0x00003292u, 0x000006c2u, 0x0003003eu, 0x0000329du, 0x000032a2u, 0x0004007cu, 0x00000008u, 0x000032a4u, 0x000032a0u, 0x0004007cu, 0x00000008u, 0x000032aau, 0x000032a2u, 0x00070050u, 0x00000009u, 0x000032abu, 0x000032a4u, 0x000032a4u, 0x000032a4u, 0x000032aau, 0x0003003eu, 0x0000329eu, 0x000032abu, 0x0003003eu, 0x00003263u, 0x000032abu, 0x000200f9u, 0x00003294u, 0x000200f8u, 0x00003294u, 0x000700f5u, 0x00000009u, 0x0000816cu, 0x000032abu, 0x00003295u, 0x000032c5u, 0x00003296u, 0x0003003eu, 0x00003266u, 0x0000816cu, 0x0003003eu, 0x00002c57u, 0x0000816cu, 0x00050050u, 0x0000005fu, 0x00002e01u, 0x00007e8fu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e02u, 0x00002e01u, 0x0003003eu, 0x00006b07u, 0x00002c04u, 0x0003003eu, 0x00006b08u, 0x00002c07u, 0x0003003eu, 0x00002c94u, 0x000020f8u, 0x0003003eu, 0x00002c95u, 0x00002e02u, 0x0003003eu, 0x00002c96u, 0x000003c4u, 0x0003003eu, 0x00002c97u, 0x00002de2u, 0x0003003eu, 0x00002c98u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x000032d2u, 0x00002c95u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000032d3u, 0x000032d2u, 0x00050084u, 0x00000006u, 0x000032d4u, 0x00002c07u, 0x000032d3u, 0x00050080u, 0x00000006u, 0x000032d5u, 0x00002c04u, 0x000032d4u, 0x0003003eu, 0x000032c6u, 0x000032d5u, 0x00050041u, 0x00000007u, 0x000032d6u, 0x00002c95u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000032d7u, 0x000032d6u, 0x00050084u, 0x00000006u, 0x000032d8u, 0x000032d7u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000032dau, 0x000032d5u, 0x000032d8u, 0x0003003eu, 0x000032c6u, 0x000032dau, 0x000500c7u, 0x00000006u, 0x000032dcu, 0x000032dau, 0x00000f0bu, 0x0003003eu, 0x000032c6u, 0x000032dcu, 0x000500c2u, 0x00000006u, 0x000032deu, 0x000032dcu, 0x00000212u, 0x0003003eu, 0x000032c7u, 0x000032deu, 0x0004003du, 0x00000006u, 0x000032e0u, 0x000032d2u, 0x000500c7u, 0x00000006u, 0x000032e1u, 0x000032e0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000032e2u, 0x000032e1u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000032e4u, 0x000032deu, 0x000032e2u, 0x0003003eu, 0x000032c7u, 0x000032e4u, 0x000500c6u, 0x00000006u, 0x000032e6u, 0x000032e4u, 0x00000485u, 0x0003003eu, 0x000032c7u, 0x000032e6u, 0x00080041u, 0x00000270u, 0x000032e9u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000032e6u, 0x0004003du, 0x0000022bu, 0x000032eau, 0x000032e9u, 0x00040071u, 0x00000006u, 0x000032ebu, 0x000032eau, 0x0003003eu, 0x000032c8u, 0x000032ebu, 0x000500c2u, 0x00000006u, 0x000032edu, 0x000032ebu, 0x00000221u, 0x000500c7u, 0x00000006u, 0x000032eeu, 0x000032edu, 0x00000fdau, 0x00050080u, 0x00000006u, 0x000032f0u, 0x000032eeu, 0x000003c4u, 0x0003003eu, 0x000032c9u, 0x000032f0u, 0x000500c6u, 0x00000006u, 0x000032f3u, 0x000032f0u, 0x00002de2u, 0x0003003eu, 0x000032c9u, 0x000032f3u, 0x000500c5u, 0x00000006u, 0x000032f6u, 0x00000f3cu, 0x000032f3u, 0x00080041u, 0x00000270u, 0x000032f7u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000032f6u, 0x0004003du, 0x0000022bu, 0x000032f8u, 0x000032f7u, 0x00040071u, 0x00000006u, 0x000032f9u, 0x000032f8u, 0x0003003eu, 0x000032c8u, 0x000032f9u, 0x000300f7u, 0x000032fbu, 0x00000000u, 0x000400fau, 0x0000210cu, 0x000032fcu, 0x000032fdu, 0x000200f8u, 0x000032fdu, 0x0003003eu, 0x000032ccu, 0x000032f9u, 0x00060050u, 0x00000353u, 0x00003317u, 0x000032f9u, 0x000032f9u, 0x000032f9u, 0x000500c2u, 0x00000353u, 0x00003318u, 0x00003317u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x0000331au, 0x00003318u, 0x0000eee9u, 0x0003003eu, 0x00003313u, 0x0000331au, 0x000500c4u, 0x00000353u, 0x0000331du, 0x0000331au, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00003320u, 0x0000331au, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003321u, 0x0000331du, 0x00003320u, 0x0003003eu, 0x00003313u, 0x00003321u, 0x000500c7u, 0x00000006u, 0x00003323u, 0x000032f9u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00003324u, 0x00003323u, 0x000006c2u, 0x0003003eu, 0x00003314u, 0x00003324u, 0x0004007cu, 0x0000003cu, 0x00003326u, 0x00003321u, 0x0004007cu, 0x00000008u, 0x00003328u, 0x00003324u, 0x00050051u, 0x00000008u, 0x00003329u, 0x00003326u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000332au, 0x00003326u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000332bu, 0x00003326u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000332cu, 0x00003329u, 0x0000332au, 0x0000332bu, 0x00003328u, 0x0003003eu, 0x00003315u, 0x0000332cu, 0x0003003eu, 0x000032cau, 0x0000332cu, 0x000200f9u, 0x000032fbu, 0x000200f8u, 0x000032fcu, 0x0003003eu, 0x000032cbu, 0x000032f9u, 0x000500c2u, 0x00000006u, 0x00003307u, 0x000032f9u, 0x0000025eu, 0x0003003eu, 0x00003303u, 0x00003307u, 0x000500c7u, 0x00000006u, 0x00003309u, 0x000032f9u, 0x000006c2u, 0x0003003eu, 0x00003304u, 0x00003309u, 0x0004007cu, 0x00000008u, 0x0000330bu, 0x00003307u, 0x0004007cu, 0x00000008u, 0x00003311u, 0x00003309u, 0x00070050u, 0x00000009u, 0x00003312u, 0x0000330bu, 0x0000330bu, 0x0000330bu, 0x00003311u, 0x0003003eu, 0x00003305u, 0x00003312u, 0x0003003eu, 0x000032cau, 0x00003312u, 0x000200f9u, 0x000032fbu, 0x000200f8u, 0x000032fbu, 0x000700f5u, 0x00000009u, 0x00008182u, 0x00003312u, 0x000032fcu, 0x0000332cu, 0x000032fdu, 0x0003003eu, 0x000032cdu, 0x00008182u, 0x0003003eu, 0x00002c5fu, 0x00008182u, 0x000200f9u, 0x00002df4u, 0x000200f8u, 0x00002df4u, 0x000700f5u, 0x00000009u, 0x000083cfu, 0x0000839eu, 0x0000322du, 0x00008182u, 0x000032fbu, 0x000700f5u, 0x00000009u, 0x000082d4u, 0x000082a2u, 0x0000322du, 0x0000816cu, 0x000032fbu, 0x000300f7u, 0x00002e09u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x00002e0au, 0x00002e09u, 0x000200f8u, 0x00002e0au, 0x00050050u, 0x0000005fu, 0x00002e0du, 0x00007ecdu, 0x00002dbau, 0x0004007cu, 0x000000a2u, 0x00002e0eu, 0x00002e0du, 0x0003003eu, 0x00006b0bu, 0x00002c04u, 0x0003003eu, 0x00006b0cu, 0x00002c07u, 0x0003003eu, 0x00002c9au, 0x000020f8u, 0x0003003eu, 0x00002c9bu, 0x00002e0eu, 0x0003003eu, 0x00002c9cu, 0x0000048bu, 0x0003003eu, 0x00002c9du, 0x00002de2u, 0x0003003eu, 0x00002c9eu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00003339u, 0x00002c9bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000333au, 0x00003339u, 0x00050084u, 0x00000006u, 0x0000333bu, 0x00002c07u, 0x0000333au, 0x00050080u, 0x00000006u, 0x0000333cu, 0x00002c04u, 0x0000333bu, 0x0003003eu, 0x0000332du, 0x0000333cu, 0x00050041u, 0x00000007u, 0x0000333du, 0x00002c9bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000333eu, 0x0000333du, 0x00050084u, 0x00000006u, 0x0000333fu, 0x0000333eu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00003341u, 0x0000333cu, 0x0000333fu, 0x0003003eu, 0x0000332du, 0x00003341u, 0x000500c7u, 0x00000006u, 0x00003343u, 0x00003341u, 0x00000f0bu, 0x0003003eu, 0x0000332du, 0x00003343u, 0x000500c2u, 0x00000006u, 0x00003345u, 0x00003343u, 0x00000212u, 0x0003003eu, 0x0000332eu, 0x00003345u, 0x0004003du, 0x00000006u, 0x00003347u, 0x00003339u, 0x000500c7u, 0x00000006u, 0x00003348u, 0x00003347u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00003349u, 0x00003348u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000334bu, 0x00003345u, 0x00003349u, 0x0003003eu, 0x0000332eu, 0x0000334bu, 0x000500c6u, 0x00000006u, 0x0000334du, 0x0000334bu, 0x00000485u, 0x0003003eu, 0x0000332eu, 0x0000334du, 0x00080041u, 0x00000270u, 0x00003350u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000334du, 0x0004003du, 0x0000022bu, 0x00003351u, 0x00003350u, 0x00040071u, 0x00000006u, 0x00003352u, 0x00003351u, 0x0003003eu, 0x0000332fu, 0x00003352u, 0x000500c2u, 0x00000006u, 0x00003354u, 0x00003352u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00003355u, 0x00003354u, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00003357u, 0x00003355u, 0x0000048bu, 0x0003003eu, 0x00003330u, 0x00003357u, 0x000500c6u, 0x00000006u, 0x0000335au, 0x00003357u, 0x00002de2u, 0x0003003eu, 0x00003330u, 0x0000335au, 0x000500c5u, 0x00000006u, 0x0000335du, 0x00000f3cu, 0x0000335au, 0x00080041u, 0x00000270u, 0x0000335eu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000335du, 0x0004003du, 0x0000022bu, 0x0000335fu, 0x0000335eu, 0x00040071u, 0x00000006u, 0x00003360u, 0x0000335fu, 0x0003003eu, 0x0000332fu, 0x00003360u, 0x000300f7u, 0x00003362u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00003363u, 0x00003364u, 0x000200f8u, 0x00003364u, 0x0003003eu, 0x00003333u, 0x00003360u, 0x00060050u, 0x00000353u, 0x0000337eu, 0x00003360u, 0x00003360u, 0x00003360u, 0x000500c2u, 0x00000353u, 0x0000337fu, 0x0000337eu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00003381u, 0x0000337fu, 0x0000eee9u, 0x0003003eu, 0x0000337au, 0x00003381u, 0x000500c4u, 0x00000353u, 0x00003384u, 0x00003381u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00003387u, 0x00003381u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00003388u, 0x00003384u, 0x00003387u, 0x0003003eu, 0x0000337au, 0x00003388u, 0x000500c7u, 0x00000006u, 0x0000338au, 0x00003360u, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000338bu, 0x0000338au, 0x000006c2u, 0x0003003eu, 0x0000337bu, 0x0000338bu, 0x0004007cu, 0x0000003cu, 0x0000338du, 0x00003388u, 0x0004007cu, 0x00000008u, 0x0000338fu, 0x0000338bu, 0x00050051u, 0x00000008u, 0x00003390u, 0x0000338du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003391u, 0x0000338du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003392u, 0x0000338du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003393u, 0x00003390u, 0x00003391u, 0x00003392u, 0x0000338fu, 0x0003003eu, 0x0000337cu, 0x00003393u, 0x0003003eu, 0x00003331u, 0x00003393u, 0x000200f9u, 0x00003362u, 0x000200f8u, 0x00003363u, 0x0003003eu, 0x00003332u, 0x00003360u, 0x000500c2u, 0x00000006u, 0x0000336eu, 0x00003360u, 0x0000025eu, 0x0003003eu, 0x0000336au, 0x0000336eu, 0x000500c7u, 0x00000006u, 0x00003370u, 0x00003360u, 0x000006c2u, 0x0003003eu, 0x0000336bu, 0x00003370u, 0x0004007cu, 0x00000008u, 0x00003372u, 0x0000336eu, 0x0004007cu, 0x00000008u, 0x00003378u, 0x00003370u, 0x00070050u, 0x00000009u, 0x00003379u, 0x00003372u, 0x00003372u, 0x00003372u, 0x00003378u, 0x0003003eu, 0x0000336cu, 0x00003379u, 0x0003003eu, 0x00003331u, 0x00003379u, 0x000200f9u, 0x00003362u, 0x000200f8u, 0x00003362u, 0x000700f5u, 0x00000009u, 0x000081aeu, 0x00003379u, 0x00003363u, 0x00003393u, 0x00003364u, 0x0003003eu, 0x00003334u, 0x000081aeu, 0x0003003eu, 0x00002c67u, 0x000081aeu, 0x000200f9u, 0x00002e09u, 0x000200f8u, 0x00002e09u, 0x000700f5u, 0x00000009u, 0x00008448u, 0x00008418u, 0x00002df4u, 0x000081aeu, 0x00003362u, 0x000200f9u, 0x00002de5u, 0x000200f8u, 0x00002de5u, 0x000900f5u, 0x00000009u, 0x00008447u, 0x00008448u, 0x00002e09u, 0x0000844eu, 0x00002e3du, 0x00008453u, 0x00002e6bu, 0x000900f5u, 0x00000009u, 0x000083cdu, 0x000083cfu, 0x00002e09u, 0x000083d4u, 0x00002e3du, 0x000083d8u, 0x00002e6bu, 0x000900f5u, 0x00000009u, 0x00008350u, 0x00008157u, 0x00002e09u, 0x000080ffu, 0x00002e3du, 0x000080a1u, 0x00002e6bu, 0x000900f5u, 0x00000009u, 0x000082d2u, 0x000082d4u, 0x00002e09u, 0x000082dau, 0x00002e3du, 0x000082dfu, 0x00002e6bu, 0x000200f9u, 0x00002ddcu, 0x000200f8u, 0x00002ddcu, 0x000700f5u, 0x00000009u, 0x000083feu, 0x00008418u, 0x00002dd8u, 0x00008447u, 0x00002de5u, 0x000700f5u, 0x00000009u, 0x00008384u, 0x0000839eu, 0x00002dd8u, 0x000083cdu, 0x00002de5u, 0x000700f5u, 0x00000009u, 0x00008307u, 0x00008321u, 0x00002dd8u, 0x00008350u, 0x00002de5u, 0x000700f5u, 0x00000009u, 0x00008288u, 0x000082a2u, 0x00002dd8u, 0x000082d2u, 0x00002de5u, 0x000200f9u, 0x00002dd7u, 0x000200f8u, 0x00002dd7u, 0x000700f5u, 0x00000009u, 0x000083fdu, 0x000083feu, 0x00002ddcu, 0x00008458u, 0x00002e78u, 0x000700f5u, 0x00000009u, 0x00008383u, 0x00008384u, 0x00002ddcu, 0x000083dbu, 0x00002e78u, 0x000700f5u, 0x00000009u, 0x00008306u, 0x00008307u, 0x00002ddcu, 0x00008360u, 0x00002e78u, 0x000700f5u, 0x00000009u, 0x00008287u, 0x00008288u, 0x00002ddcu, 0x000082e3u, 0x00002e78u, 0x000300f7u, 0x000030c6u, 0x00000000u, 0x000400fau, 0x00002dc9u, 0x000030c7u, 0x000030c8u, 0x000200f8u, 0x000030c8u, 0x000300f7u, 0x000030f4u, 0x00000000u, 0x000400fau, 0x00002dc3u, 0x000030f5u, 0x000030f6u, 0x000200f8u, 0x000030f6u, 0x000300f7u, 0x00003104u, 0x00000000u, 0x000400fau, 0x00002dcbu, 0x00003105u, 0x00003106u, 0x000200f8u, 0x00003106u, 0x0004003du, 0x0000005fu, 0x0000310bu, 0x00002c3bu, 0x0003003eu, 0x00002d70u, 0x0000310bu, 0x000200f9u, 0x00003104u, 0x000200f8u, 0x00003105u, 0x0004003du, 0x0000005fu, 0x00003107u, 0x00002c3bu, 0x0007004fu, 0x0000005fu, 0x00003108u, 0x00003107u, 0x00003107u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x0000310au, 0x0000eeeeu, 0x00003108u, 0x0003003eu, 0x00002d70u, 0x0000310au, 0x000200f9u, 0x00003104u, 0x000200f8u, 0x00003104u, 0x000700f5u, 0x0000005fu, 0x00008285u, 0x0000310au, 0x00003105u, 0x0000310bu, 0x00003106u, 0x00050051u, 0x00000008u, 0x0000310du, 0x00008285u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000310eu, 0x00008285u, 0x00000001u, 0x0003003eu, 0x00002d6fu, 0x00008285u, 0x00050082u, 0x00000009u, 0x00003112u, 0x00008287u, 0x00008306u, 0x00050041u, 0x0000003eu, 0x00003113u, 0x00002d6fu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00003114u, 0x00003113u, 0x00070050u, 0x00000009u, 0x00003115u, 0x00003114u, 0x00003114u, 0x00003114u, 0x00003114u, 0x00050084u, 0x00000009u, 0x00003116u, 0x00003112u, 0x00003115u, 0x0003003eu, 0x00002d61u, 0x00003116u, 0x00050082u, 0x00000009u, 0x00003119u, 0x00008383u, 0x00008306u, 0x00050041u, 0x0000003eu, 0x0000311au, 0x00002d6fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000311bu, 0x0000311au, 0x00070050u, 0x00000009u, 0x0000311cu, 0x0000311bu, 0x0000311bu, 0x0000311bu, 0x0000311bu, 0x00050084u, 0x00000009u, 0x0000311du, 0x00003119u, 0x0000311cu, 0x00050080u, 0x00000009u, 0x0000311fu, 0x00003116u, 0x0000311du, 0x0003003eu, 0x00002d61u, 0x0000311fu, 0x00050080u, 0x00000009u, 0x00003122u, 0x0000311fu, 0x0000eeefu, 0x0003003eu, 0x00002d61u, 0x00003122u, 0x000500c3u, 0x00000009u, 0x00003125u, 0x00003122u, 0x0000eef0u, 0x0003003eu, 0x00002d61u, 0x00003125u, 0x00050080u, 0x00000009u, 0x00003128u, 0x00003125u, 0x00008306u, 0x0003003eu, 0x00002d61u, 0x00003128u, 0x000200f9u, 0x000030f4u, 0x000200f8u, 0x000030f5u, 0x00050080u, 0x00000009u, 0x000030f9u, 0x00008306u, 0x00008383u, 0x00050080u, 0x00000009u, 0x000030fbu, 0x000030f9u, 0x00008287u, 0x00050080u, 0x00000009u, 0x000030fdu, 0x000030fbu, 0x000083fdu, 0x00050080u, 0x00000009u, 0x000030ffu, 0x000030fdu, 0x0000eeecu, 0x000500c3u, 0x00000009u, 0x00003101u, 0x000030ffu, 0x0000eeecu, 0x0003003eu, 0x00002d61u, 0x00003101u, 0x000200f9u, 0x000030f4u, 0x000200f8u, 0x000030f4u, 0x000700f5u, 0x00000009u, 0x0000853cu, 0x00003101u, 0x000030f5u, 0x00003128u, 0x00003104u, 0x000200f9u, 0x000030c6u, 0x000200f8u, 0x000030c7u, 0x000300f7u, 0x000030cau, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000030cbu, 0x000030ccu, 0x000200f8u, 0x000030ccu, 0x0003003eu, 0x00002d61u, 0x00008306u, 0x000200f9u, 0x000030cau, 0x000200f8u, 0x000030cbu, 0x000500c7u, 0x00000008u, 0x000030ceu, 0x00007e8fu, 0x00000212u, 0x000500c4u, 0x00000008u, 0x000030cfu, 0x000030ceu, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000030d1u, 0x00002d99u, 0x000500c3u, 0x00000008u, 0x000030d2u, 0x000030d1u, 0x00000212u, 0x000500c5u, 0x00000008u, 0x000030d3u, 0x000030cfu, 0x000030d2u, 0x0003003eu, 0x00002d62u, 0x000030d3u, 0x0004003du, 0x00000008u, 0x000030d6u, 0x00002d9bu, 0x00050050u, 0x0000005fu, 0x000030d7u, 0x000030d3u, 0x000030d6u, 0x0007004fu, 0x0000005fu, 0x000030d9u, 0x00008306u, 0x00008306u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d64u, 0x000030d9u, 0x0007004fu, 0x0000005fu, 0x000030dbu, 0x00008287u, 0x00008287u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d65u, 0x000030dbu, 0x0007004fu, 0x0000005fu, 0x000030ddu, 0x00008383u, 0x00008383u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d66u, 0x000030ddu, 0x0007004fu, 0x0000005fu, 0x000030dfu, 0x000083fdu, 0x000083fdu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002d67u, 0x000030dfu, 0x0003003eu, 0x00002d68u, 0x000030d7u, 0x00050041u, 0x0000003eu, 0x0000429eu, 0x00002d68u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000429fu, 0x0000429eu, 0x00050041u, 0x0000003eu, 0x000042a0u, 0x00002d68u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042a1u, 0x000042a0u, 0x00050080u, 0x00000008u, 0x000042a2u, 0x0000429fu, 0x000042a1u, 0x0003003eu, 0x00004298u, 0x000042a2u, 0x000500afu, 0x0000005du, 0x000042a4u, 0x000042a2u, 0x0000037du, 0x00050050u, 0x00000879u, 0x000042a7u, 0x000042a4u, 0x000042a4u, 0x000600a9u, 0x0000005fu, 0x000042a8u, 0x000042a7u, 0x000030dfu, 0x000030d9u, 0x0003003eu, 0x00004299u, 0x000042a8u, 0x000300f7u, 0x000042abu, 0x00000000u, 0x000400fau, 0x000042a4u, 0x000042acu, 0x000042adu, 0x000200f8u, 0x000042adu, 0x0004003du, 0x0000005fu, 0x000042b2u, 0x00002d68u, 0x0003003eu, 0x0000429bu, 0x000042b2u, 0x000200f9u, 0x000042abu, 0x000200f8u, 0x000042acu, 0x0004003du, 0x0000005fu, 0x000042aeu, 0x00002d68u, 0x0007004fu, 0x0000005fu, 0x000042afu, 0x000042aeu, 0x000042aeu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000042b1u, 0x0000eeeeu, 0x000042afu, 0x0003003eu, 0x0000429bu, 0x000042b1u, 0x000200f9u, 0x000042abu, 0x000200f8u, 0x000042abu, 0x000700f5u, 0x0000005fu, 0x000084dfu, 0x000042b1u, 0x000042acu, 0x000042b2u, 0x000042adu, 0x00050051u, 0x00000008u, 0x000042b4u, 0x000084dfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000042b5u, 0x000084dfu, 0x00000001u, 0x0003003eu, 0x0000429au, 0x000084dfu, 0x00050082u, 0x0000005fu, 0x000042b9u, 0x000030dbu, 0x000042a8u, 0x00050041u, 0x0000003eu, 0x000042bau, 0x0000429au, 0x00000374u, 0x0004003du, 0x00000008u, 0x000042bbu, 0x000042bau, 0x00050050u, 0x0000005fu, 0x000042bcu, 0x000042bbu, 0x000042bbu, 0x00050084u, 0x0000005fu, 0x000042bdu, 0x000042b9u, 0x000042bcu, 0x0003003eu, 0x0000429cu, 0x000042bdu, 0x00050082u, 0x0000005fu, 0x000042c0u, 0x000030ddu, 0x000042a8u, 0x00050041u, 0x0000003eu, 0x000042c1u, 0x0000429au, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042c2u, 0x000042c1u, 0x00050050u, 0x0000005fu, 0x000042c3u, 0x000042c2u, 0x000042c2u, 0x00050084u, 0x0000005fu, 0x000042c4u, 0x000042c0u, 0x000042c3u, 0x00050080u, 0x0000005fu, 0x000042c6u, 0x000042bdu, 0x000042c4u, 0x0003003eu, 0x0000429cu, 0x000042c6u, 0x00050080u, 0x0000005fu, 0x000042c9u, 0x000042c6u, 0x0000136fu, 0x0003003eu, 0x0000429cu, 0x000042c9u, 0x000500c3u, 0x0000005fu, 0x000042ccu, 0x000042c9u, 0x0000eee5u, 0x0003003eu, 0x0000429cu, 0x000042ccu, 0x00050080u, 0x0000005fu, 0x000042cfu, 0x000042ccu, 0x000042a8u, 0x0003003eu, 0x0000429cu, 0x000042cfu, 0x0003003eu, 0x0000429du, 0x000042cfu, 0x0003003eu, 0x00002d63u, 0x000042cfu, 0x0007004fu, 0x0000005fu, 0x000030e2u, 0x00008306u, 0x00008306u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d6au, 0x000030e2u, 0x0007004fu, 0x0000005fu, 0x000030e4u, 0x00008287u, 0x00008287u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d6bu, 0x000030e4u, 0x0007004fu, 0x0000005fu, 0x000030e6u, 0x00008383u, 0x00008383u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d6cu, 0x000030e6u, 0x0007004fu, 0x0000005fu, 0x000030e8u, 0x000083fdu, 0x000083fdu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002d6du, 0x000030e8u, 0x0004003du, 0x0000005fu, 0x000030e9u, 0x00002c3bu, 0x0003003eu, 0x00002d6eu, 0x000030e9u, 0x00050041u, 0x0000003eu, 0x000042d7u, 0x00002d6eu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000042d8u, 0x000042d7u, 0x00050041u, 0x0000003eu, 0x000042d9u, 0x00002d6eu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042dau, 0x000042d9u, 0x00050080u, 0x00000008u, 0x000042dbu, 0x000042d8u, 0x000042dau, 0x0003003eu, 0x000042d1u, 0x000042dbu, 0x000500afu, 0x0000005du, 0x000042ddu, 0x000042dbu, 0x0000037du, 0x00050050u, 0x00000879u, 0x000042e0u, 0x000042ddu, 0x000042ddu, 0x000600a9u, 0x0000005fu, 0x000042e1u, 0x000042e0u, 0x000030e8u, 0x000030e2u, 0x0003003eu, 0x000042d2u, 0x000042e1u, 0x000300f7u, 0x000042e4u, 0x00000000u, 0x000400fau, 0x000042ddu, 0x000042e5u, 0x000042e6u, 0x000200f8u, 0x000042e6u, 0x0004003du, 0x0000005fu, 0x000042ebu, 0x00002d6eu, 0x0003003eu, 0x000042d4u, 0x000042ebu, 0x000200f9u, 0x000042e4u, 0x000200f8u, 0x000042e5u, 0x0004003du, 0x0000005fu, 0x000042e7u, 0x00002d6eu, 0x0007004fu, 0x0000005fu, 0x000042e8u, 0x000042e7u, 0x000042e7u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000042eau, 0x0000eeeeu, 0x000042e8u, 0x0003003eu, 0x000042d4u, 0x000042eau, 0x000200f9u, 0x000042e4u, 0x000200f8u, 0x000042e4u, 0x000700f5u, 0x0000005fu, 0x000084e7u, 0x000042eau, 0x000042e5u, 0x000042ebu, 0x000042e6u, 0x00050051u, 0x00000008u, 0x000042edu, 0x000084e7u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000042eeu, 0x000084e7u, 0x00000001u, 0x0003003eu, 0x000042d3u, 0x000084e7u, 0x00050082u, 0x0000005fu, 0x000042f2u, 0x000030e4u, 0x000042e1u, 0x00050041u, 0x0000003eu, 0x000042f3u, 0x000042d3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000042f4u, 0x000042f3u, 0x00050050u, 0x0000005fu, 0x000042f5u, 0x000042f4u, 0x000042f4u, 0x00050084u, 0x0000005fu, 0x000042f6u, 0x000042f2u, 0x000042f5u, 0x0003003eu, 0x000042d5u, 0x000042f6u, 0x00050082u, 0x0000005fu, 0x000042f9u, 0x000030e6u, 0x000042e1u, 0x00050041u, 0x0000003eu, 0x000042fau, 0x000042d3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000042fbu, 0x000042fau, 0x00050050u, 0x0000005fu, 0x000042fcu, 0x000042fbu, 0x000042fbu, 0x00050084u, 0x0000005fu, 0x000042fdu, 0x000042f9u, 0x000042fcu, 0x00050080u, 0x0000005fu, 0x000042ffu, 0x000042f6u, 0x000042fdu, 0x0003003eu, 0x000042d5u, 0x000042ffu, 0x00050080u, 0x0000005fu, 0x00004302u, 0x000042ffu, 0x0000136fu, 0x0003003eu, 0x000042d5u, 0x00004302u, 0x000500c3u, 0x0000005fu, 0x00004305u, 0x00004302u, 0x0000eee5u, 0x0003003eu, 0x000042d5u, 0x00004305u, 0x00050080u, 0x0000005fu, 0x00004308u, 0x00004305u, 0x000042e1u, 0x0003003eu, 0x000042d5u, 0x00004308u, 0x0003003eu, 0x000042d6u, 0x00004308u, 0x0003003eu, 0x00002d69u, 0x00004308u, 0x00050051u, 0x00000008u, 0x000030edu, 0x000042cfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000030eeu, 0x000042cfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000030efu, 0x00004308u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000030f0u, 0x00004308u, 0x00000001u, 0x00070050u, 0x00000009u, 0x000030f1u, 0x000030edu, 0x000030eeu, 0x000030efu, 0x000030f0u, 0x0003003eu, 0x00002d61u, 0x000030f1u, 0x000200f9u, 0x000030cau, 0x000200f8u, 0x000030cau, 0x000700f5u, 0x00000009u, 0x0000853bu, 0x000030f1u, 0x000042e4u, 0x00008306u, 0x000030ccu, 0x000200f9u, 0x000030c6u, 0x000200f8u, 0x000030c6u, 0x000700f5u, 0x00000009u, 0x0000853au, 0x0000853bu, 0x000030cau, 0x0000853cu, 0x000030f4u, 0x0003003eu, 0x00002d71u, 0x0000853au, 0x0003003eu, 0x00002067u, 0x0000853au, 0x000400a8u, 0x0000005du, 0x00002220u, 0x0000210fu, 0x000400a8u, 0x0000005du, 0x00002222u, 0x0000214bu, 0x000500a7u, 0x0000005du, 0x00002223u, 0x00002220u, 0x00002222u, 0x000300f7u, 0x00002224u, 0x00000000u, 0x000400fau, 0x00002223u, 0x00002225u, 0x00002224u, 0x000200f8u, 0x00002225u, 0x0003003eu, 0x00002071u, 0x0000853au, 0x0003003eu, 0x00002072u, 0x000028ccu, 0x00050051u, 0x00000008u, 0x00004311u, 0x0000853au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004312u, 0x0000853au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004313u, 0x0000853au, 0x00000002u, 0x00050051u, 0x00000008u, 0x00004314u, 0x0000853au, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004316u, 0x0000853au, 0x00000203u, 0x00000264u, 0x0003003eu, 0x0000430au, 0x00004316u, 0x00050041u, 0x0000003eu, 0x00004317u, 0x0000430au, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004318u, 0x00004317u, 0x00050041u, 0x0000003eu, 0x00004319u, 0x00002072u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000431au, 0x00004319u, 0x00050041u, 0x0000003eu, 0x0000431bu, 0x0000430au, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000431cu, 0x0000431bu, 0x00050084u, 0x00000008u, 0x0000431du, 0x0000431au, 0x0000431cu, 0x00050080u, 0x00000008u, 0x0000431eu, 0x0000431du, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000431fu, 0x0000431eu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00004320u, 0x00004318u, 0x0000431fu, 0x0003003eu, 0x0000430bu, 0x00004320u, 0x0004003du, 0x00000008u, 0x00004322u, 0x00004317u, 0x00050041u, 0x0000003eu, 0x00004323u, 0x00002072u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004324u, 0x00004323u, 0x00050041u, 0x0000003eu, 0x00004325u, 0x0000430au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004326u, 0x00004325u, 0x00050084u, 0x00000008u, 0x00004327u, 0x00004324u, 0x00004326u, 0x00050041u, 0x0000003eu, 0x00004328u, 0x00002072u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004329u, 0x00004328u, 0x0004003du, 0x00000008u, 0x0000432bu, 0x0000431bu, 0x00050084u, 0x00000008u, 0x0000432cu, 0x00004329u, 0x0000432bu, 0x00050080u, 0x00000008u, 0x0000432du, 0x00004327u, 0x0000432cu, 0x00050080u, 0x00000008u, 0x0000432eu, 0x0000432du, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000432fu, 0x0000432eu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00004330u, 0x00004322u, 0x0000432fu, 0x0003003eu, 0x0000430cu, 0x00004330u, 0x0004003du, 0x00000008u, 0x00004332u, 0x00004317u, 0x00050041u, 0x0000003eu, 0x00004333u, 0x00002072u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00004334u, 0x00004333u, 0x0004003du, 0x00000008u, 0x00004336u, 0x00004325u, 0x00050084u, 0x00000008u, 0x00004337u, 0x00004334u, 0x00004336u, 0x00050080u, 0x00000008u, 0x00004338u, 0x00004337u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00004339u, 0x00004338u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x0000433au, 0x00004332u, 0x00004339u, 0x0003003eu, 0x0000430du, 0x0000433au, 0x0004003du, 0x00000008u, 0x0000433cu, 0x00004317u, 0x0003003eu, 0x0000430eu, 0x0000433cu, 0x00070050u, 0x00000009u, 0x00004341u, 0x00004320u, 0x00004330u, 0x0000433au, 0x0000433cu, 0x0003003eu, 0x0000430fu, 0x00004341u, 0x0003003eu, 0x00002067u, 0x00004341u, 0x000200f9u, 0x00002224u, 0x000200f8u, 0x00002224u, 0x000700f5u, 0x00000009u, 0x00009408u, 0x0000853au, 0x000030c6u, 0x00004341u, 0x00002225u, 0x000200f9u, 0x0000220eu, 0x000200f8u, 0x0000220eu, 0x000700f5u, 0x00000009u, 0x0000df9eu, 0x00008418u, 0x000021fcu, 0x000083fdu, 0x00002224u, 0x000700f5u, 0x00000009u, 0x0000de94u, 0x0000839eu, 0x000021fcu, 0x00008383u, 0x00002224u, 0x000700f5u, 0x00000009u, 0x0000dd8au, 0x00008321u, 0x000021fcu, 0x00008306u, 0x00002224u, 0x000700f5u, 0x00000009u, 0x0000dc80u, 0x000082a2u, 0x000021fcu, 0x00008287u, 0x00002224u, 0x000700f5u, 0x00000009u, 0x000093d0u, 0x000093ddu, 0x000021fcu, 0x00009408u, 0x00002224u, 0x000300f7u, 0x0000222bu, 0x00000000u, 0x000400fau, 0x00002142u, 0x0000222cu, 0x0000222bu, 0x000200f8u, 0x0000222cu, 0x00050080u, 0x00000008u, 0x00002235u, 0x000020e2u, 0x00000212u, 0x00050080u, 0x00000008u, 0x00002236u, 0x000020ddu, 0x00002235u, 0x00070041u, 0x00000270u, 0x00002237u, 0x00000314u, 0x00000203u, 0x00002236u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x00002238u, 0x00002237u, 0x00040071u, 0x00000006u, 0x00002239u, 0x00002238u, 0x000500abu, 0x0000005du, 0x0000223au, 0x00002239u, 0x00000374u, 0x0003003eu, 0x00002073u, 0x0000223au, 0x000500afu, 0x0000005du, 0x0000223du, 0x0000235au, 0x0000025eu, 0x0003003eu, 0x00002074u, 0x0000223du, 0x000300f7u, 0x00002240u, 0x00000000u, 0x000400fau, 0x0000215fu, 0x00002241u, 0x00002242u, 0x000200f8u, 0x00002242u, 0x0003003eu, 0x00002076u, 0x00002353u, 0x000200f9u, 0x00002240u, 0x000200f8u, 0x00002241u, 0x0003003eu, 0x00002076u, 0x00002356u, 0x000200f9u, 0x00002240u, 0x000200f8u, 0x00002240u, 0x000600a9u, 0x00000008u, 0x0000ef08u, 0x0000215fu, 0x00002356u, 0x00002353u, 0x000500aau, 0x0000005du, 0x00002248u, 0x00007a63u, 0x0000ef08u, 0x0003003eu, 0x00002075u, 0x00002248u, 0x000500a7u, 0x0000005du, 0x0000224bu, 0x00002248u, 0x0000223du, 0x000500a7u, 0x0000005du, 0x0000224du, 0x0000224bu, 0x0000223au, 0x000300f7u, 0x0000224eu, 0x00000000u, 0x000400fau, 0x0000224du, 0x0000224fu, 0x00002250u, 0x000200f8u, 0x00002250u, 0x00050084u, 0x00000008u, 0x0000226cu, 0x000021cau, 0x00000880u, 0x00050080u, 0x00000008u, 0x0000226du, 0x000021c8u, 0x0000226cu, 0x0003003eu, 0x0000207cu, 0x00002343u, 0x0003003eu, 0x0000207du, 0x00002370u, 0x0003003eu, 0x0000207eu, 0x0000226du, 0x0003003eu, 0x0000207fu, 0x00002118u, 0x0008004fu, 0x0000003cu, 0x000043d3u, 0x00002343u, 0x00002343u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x0000003cu, 0x000043d5u, 0x00002370u, 0x00002370u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x000043d7u, 0x000043d5u, 0x0000eedeu, 0x000500c3u, 0x0000003cu, 0x000043d9u, 0x000043d7u, 0x00002941u, 0x00060050u, 0x0000003cu, 0x000043dbu, 0x0000226du, 0x0000226du, 0x0000226du, 0x00050084u, 0x0000003cu, 0x000043dcu, 0x000043d9u, 0x000043dbu, 0x00050080u, 0x0000003cu, 0x000043ddu, 0x000043d3u, 0x000043dcu, 0x0003003eu, 0x000043cbu, 0x000043ddu, 0x000500c3u, 0x0000003cu, 0x000043e0u, 0x000043ddu, 0x0000eedfu, 0x0003003eu, 0x000043cbu, 0x000043e0u, 0x000300f7u, 0x000043e2u, 0x00000000u, 0x000400fau, 0x00002118u, 0x000043e3u, 0x000043e4u, 0x000200f8u, 0x000043e4u, 0x0003003eu, 0x000043d0u, 0x000043e0u, 0x0007004fu, 0x0000005fu, 0x00004474u, 0x000043e0u, 0x000043e0u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004472u, 0x00004474u, 0x0003003eu, 0x000043ccu, 0x00004474u, 0x000200f9u, 0x000043e2u, 0x000200f8u, 0x000043e3u, 0x0003003eu, 0x000043ceu, 0x000043e0u, 0x0003003eu, 0x000043cfu, 0x00008da8u, 0x00050041u, 0x0000003eu, 0x000043f6u, 0x000043ceu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000043f7u, 0x000043f6u, 0x0003003eu, 0x000043ecu, 0x000043f7u, 0x000500b3u, 0x0000005du, 0x000043f9u, 0x000043f7u, 0x00000203u, 0x0003003eu, 0x000043edu, 0x000043f9u, 0x000500c7u, 0x00000008u, 0x000043fbu, 0x000043f7u, 0x00000c0bu, 0x0003003eu, 0x000043ecu, 0x000043fbu, 0x0003003eu, 0x000043efu, 0x000043fbu, 0x0006000cu, 0x00000008u, 0x00004457u, 0x00000001u, 0x0000004au, 0x000043fbu, 0x00050082u, 0x00000008u, 0x00004458u, 0x00000283u, 0x00004457u, 0x0007000cu, 0x00000008u, 0x00004459u, 0x00000001u, 0x00000027u, 0x00004458u, 0x00000283u, 0x0003003eu, 0x0000444fu, 0x00004459u, 0x000500c4u, 0x00000008u, 0x0000445cu, 0x000043fbu, 0x00004459u, 0x000500c7u, 0x00000008u, 0x0000445du, 0x0000445cu, 0x00000b25u, 0x0003003eu, 0x00004450u, 0x0000445du, 0x000500c7u, 0x00000008u, 0x0000445fu, 0x0000445du, 0x0000038bu, 0x0003003eu, 0x00004451u, 0x0000445fu, 0x000500c3u, 0x00000008u, 0x00004461u, 0x0000445du, 0x0000025eu, 0x0003003eu, 0x00004453u, 0x00000be9u, 0x00050041u, 0x00000060u, 0x00004462u, 0x00004453u, 0x00004461u, 0x0004003du, 0x0000005fu, 0x00004463u, 0x00004462u, 0x00050051u, 0x00000008u, 0x00004464u, 0x00004463u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004465u, 0x00004463u, 0x00000001u, 0x0003003eu, 0x00004452u, 0x00004463u, 0x00050041u, 0x0000003eu, 0x00004467u, 0x00004452u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004468u, 0x00004467u, 0x00050084u, 0x00000008u, 0x0000446au, 0x00004468u, 0x0000445fu, 0x000500c3u, 0x00000008u, 0x0000446bu, 0x0000446au, 0x0000026au, 0x00050041u, 0x0000003eu, 0x0000446cu, 0x00004452u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000446du, 0x0000446cu, 0x00050080u, 0x00000008u, 0x0000446eu, 0x0000446bu, 0x0000446du, 0x0003003eu, 0x00004454u, 0x0000446eu, 0x00050050u, 0x0000005fu, 0x00004471u, 0x0000446eu, 0x00004459u, 0x0003003eu, 0x00004455u, 0x00004471u, 0x0003003eu, 0x000043eeu, 0x00004471u, 0x00050041u, 0x0000003eu, 0x000043feu, 0x000043eeu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000043ffu, 0x000043feu, 0x0003003eu, 0x000043f0u, 0x000043ffu, 0x0004003du, 0x0000003cu, 0x00004400u, 0x000043ceu, 0x0007004fu, 0x0000005fu, 0x00004401u, 0x00004400u, 0x00004400u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00004402u, 0x000043eeu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004403u, 0x00004402u, 0x00050050u, 0x0000005fu, 0x00004404u, 0x00004403u, 0x00004403u, 0x00050084u, 0x0000005fu, 0x00004405u, 0x00004401u, 0x00004404u, 0x0003003eu, 0x000043f1u, 0x00004405u, 0x000500c3u, 0x00000008u, 0x00004407u, 0x00000c1eu, 0x000043ffu, 0x0004007eu, 0x00000008u, 0x00004408u, 0x00004407u, 0x000500c7u, 0x00000008u, 0x00004409u, 0x00000c1du, 0x00004408u, 0x0003003eu, 0x000043f2u, 0x00004409u, 0x0004003du, 0x0000005fu, 0x0000440au, 0x000043f1u, 0x00050050u, 0x0000005fu, 0x0000440cu, 0x00004409u, 0x00004409u, 0x000500c7u, 0x0000005fu, 0x0000440du, 0x0000440au, 0x0000440cu, 0x0003003eu, 0x000043f3u, 0x0000440du, 0x000500abu, 0x0000005du, 0x0000440fu, 0x000043ffu, 0x00000283u, 0x000300f7u, 0x00004410u, 0x00000000u, 0x000400fau, 0x0000440fu, 0x00004411u, 0x00004412u, 0x000200f8u, 0x00004412u, 0x0004003du, 0x0000005fu, 0x00004418u, 0x000043f1u, 0x000500c4u, 0x0000005fu, 0x0000441au, 0x00004418u, 0x0000eee3u, 0x0003003eu, 0x000043f4u, 0x0000441au, 0x000200f9u, 0x00004410u, 0x000200f8u, 0x00004411u, 0x0004003du, 0x0000005fu, 0x00004413u, 0x000043f1u, 0x00050082u, 0x00000008u, 0x00004415u, 0x0000027du, 0x000043ffu, 0x00050050u, 0x0000005fu, 0x00004416u, 0x00004415u, 0x00004415u, 0x000500c3u, 0x0000005fu, 0x00004417u, 0x00004413u, 0x00004416u, 0x0003003eu, 0x000043f1u, 0x00004417u, 0x0003003eu, 0x000043f4u, 0x00004417u, 0x000200f9u, 0x00004410u, 0x000200f8u, 0x00004410u, 0x0004003du, 0x0000005fu, 0x0000441bu, 0x000043f3u, 0x000500abu, 0x00000879u, 0x0000441cu, 0x0000441bu, 0x00000c37u, 0x0004009au, 0x0000005du, 0x0000441du, 0x0000441cu, 0x000300f7u, 0x0000441eu, 0x00000000u, 0x000400fau, 0x0000441du, 0x0000441fu, 0x0000441eu, 0x000200f8u, 0x0000441fu, 0x00050041u, 0x0000003eu, 0x00004420u, 0x000043f3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004421u, 0x00004420u, 0x000500abu, 0x0000005du, 0x00004423u, 0x00004421u, 0x00004409u, 0x000300f7u, 0x00004424u, 0x00000000u, 0x000400fau, 0x00004423u, 0x00004425u, 0x00004424u, 0x000200f8u, 0x00004425u, 0x0004003du, 0x00000008u, 0x00004427u, 0x00004420u, 0x000500abu, 0x0000005du, 0x00004428u, 0x00004427u, 0x00000203u, 0x000200f9u, 0x00004424u, 0x000200f8u, 0x00004424u, 0x000700f5u, 0x0000005du, 0x00004429u, 0x00004423u, 0x0000441fu, 0x00004428u, 0x00004425u, 0x000300f7u, 0x0000442au, 0x00000000u, 0x000400fau, 0x00004429u, 0x0000442bu, 0x0000442au, 0x000200f8u, 0x0000442bu, 0x00050041u, 0x0000003eu, 0x0000442cu, 0x000043f1u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000442du, 0x0000442cu, 0x000500c7u, 0x00000008u, 0x0000442eu, 0x0000442du, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x0000442fu, 0x0000442eu, 0x00000203u, 0x000300f7u, 0x00004430u, 0x00000000u, 0x000400fau, 0x0000442fu, 0x00004431u, 0x00004432u, 0x000200f8u, 0x00004432u, 0x00050041u, 0x0000003eu, 0x00004434u, 0x000043f4u, 0x00000374u, 0x0003003eu, 0x00004434u, 0x00000c50u, 0x000200f9u, 0x00004430u, 0x000200f8u, 0x00004431u, 0x00050041u, 0x0000003eu, 0x00004433u, 0x000043f4u, 0x00000374u, 0x0003003eu, 0x00004433u, 0x00000c0bu, 0x000200f9u, 0x00004430u, 0x000200f8u, 0x00004430u, 0x0003003eu, 0x000043cfu, 0x0000055eu, 0x000200f9u, 0x0000442au, 0x000200f8u, 0x0000442au, 0x000600a9u, 0x0000005du, 0x0000ef09u, 0x00004429u, 0x0000055eu, 0x00008da8u, 0x00050041u, 0x0000003eu, 0x00004435u, 0x000043f3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004436u, 0x00004435u, 0x000500abu, 0x0000005du, 0x00004438u, 0x00004436u, 0x00004409u, 0x000300f7u, 0x00004439u, 0x00000000u, 0x000400fau, 0x00004438u, 0x0000443au, 0x00004439u, 0x000200f8u, 0x0000443au, 0x0004003du, 0x00000008u, 0x0000443cu, 0x00004435u, 0x000500abu, 0x0000005du, 0x0000443du, 0x0000443cu, 0x00000203u, 0x000200f9u, 0x00004439u, 0x000200f8u, 0x00004439u, 0x000700f5u, 0x0000005du, 0x0000443eu, 0x00004438u, 0x0000442au, 0x0000443du, 0x0000443au, 0x000300f7u, 0x0000443fu, 0x00000000u, 0x000400fau, 0x0000443eu, 0x00004440u, 0x0000443fu, 0x000200f8u, 0x00004440u, 0x00050041u, 0x0000003eu, 0x00004441u, 0x000043f1u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004442u, 0x00004441u, 0x000500c7u, 0x00000008u, 0x00004443u, 0x00004442u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00004444u, 0x00004443u, 0x00000203u, 0x000300f7u, 0x00004445u, 0x00000000u, 0x000400fau, 0x00004444u, 0x00004446u, 0x00004447u, 0x000200f8u, 0x00004447u, 0x00050041u, 0x0000003eu, 0x00004449u, 0x000043f4u, 0x00000485u, 0x0003003eu, 0x00004449u, 0x00000c50u, 0x000200f9u, 0x00004445u, 0x000200f8u, 0x00004446u, 0x00050041u, 0x0000003eu, 0x00004448u, 0x000043f4u, 0x00000485u, 0x0003003eu, 0x00004448u, 0x00000c0bu, 0x000200f9u, 0x00004445u, 0x000200f8u, 0x00004445u, 0x0003003eu, 0x000043cfu, 0x0000055eu, 0x000200f9u, 0x0000443fu, 0x000200f8u, 0x0000443fu, 0x000600a9u, 0x0000005du, 0x0000ef0au, 0x0000443eu, 0x0000055eu, 0x0000ef09u, 0x000200f9u, 0x0000441eu, 0x000200f8u, 0x0000441eu, 0x000700f5u, 0x0000005du, 0x00008e33u, 0x00008da8u, 0x00004410u, 0x0000ef0au, 0x0000443fu, 0x000300f7u, 0x0000444bu, 0x00000000u, 0x000400fau, 0x000043f9u, 0x0000444cu, 0x0000444bu, 0x000200f8u, 0x0000444cu, 0x0003003eu, 0x000043f4u, 0x00000c6au, 0x0003003eu, 0x000043cfu, 0x0000055eu, 0x000200f9u, 0x0000444bu, 0x000200f8u, 0x0000444bu, 0x000600a9u, 0x0000005du, 0x0000ef0bu, 0x000043f9u, 0x0000055eu, 0x00008e33u, 0x0004003du, 0x0000005fu, 0x0000444du, 0x000043f4u, 0x0008000cu, 0x0000005fu, 0x0000444eu, 0x00000001u, 0x0000002du, 0x0000444du, 0x00000c6du, 0x00000c6eu, 0x0003003eu, 0x000043f5u, 0x0000444eu, 0x0003003eu, 0x000043cdu, 0x0000ef0bu, 0x0003003eu, 0x000043ccu, 0x0000444eu, 0x000200f9u, 0x000043e2u, 0x000200f8u, 0x000043e2u, 0x000700f5u, 0x0000005du, 0x0000e0b5u, 0x0000ef0bu, 0x0000444bu, 0x00008da8u, 0x000043e4u, 0x000700f5u, 0x0000005fu, 0x00008e39u, 0x0000444eu, 0x0000444bu, 0x00004474u, 0x000043e4u, 0x0003003eu, 0x000043d1u, 0x00008e39u, 0x0003003eu, 0x00002042u, 0x00008e39u, 0x000200f9u, 0x0000224eu, 0x000200f8u, 0x0000224fu, 0x00070041u, 0x00000316u, 0x0000225bu, 0x00000314u, 0x00000203u, 0x00002236u, 0x00000212u, 0x0004003du, 0x00000009u, 0x0000225cu, 0x0000225bu, 0x0008004fu, 0x0000003cu, 0x0000225du, 0x0000225cu, 0x0000225cu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x0000003cu, 0x0000225fu, 0x0000225du, 0x0000eedfu, 0x0003003eu, 0x00002077u, 0x0000225fu, 0x000300f7u, 0x00002261u, 0x00000000u, 0x000400fau, 0x00002118u, 0x00002262u, 0x00002263u, 0x000200f8u, 0x00002263u, 0x0003003eu, 0x0000207bu, 0x0000225fu, 0x0007004fu, 0x0000005fu, 0x000043cau, 0x0000225fu, 0x0000225fu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000043c8u, 0x000043cau, 0x0003003eu, 0x00002042u, 0x000043cau, 0x000200f9u, 0x00002261u, 0x000200f8u, 0x00002262u, 0x0003003eu, 0x00002079u, 0x0000225fu, 0x0003003eu, 0x0000207au, 0x00008e4bu, 0x00050041u, 0x0000003eu, 0x0000434cu, 0x00002079u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000434du, 0x0000434cu, 0x0003003eu, 0x00004342u, 0x0000434du, 0x000500b3u, 0x0000005du, 0x0000434fu, 0x0000434du, 0x00000203u, 0x0003003eu, 0x00004343u, 0x0000434fu, 0x000500c7u, 0x00000008u, 0x00004351u, 0x0000434du, 0x00000c0bu, 0x0003003eu, 0x00004342u, 0x00004351u, 0x0003003eu, 0x00004345u, 0x00004351u, 0x0006000cu, 0x00000008u, 0x000043adu, 0x00000001u, 0x0000004au, 0x00004351u, 0x00050082u, 0x00000008u, 0x000043aeu, 0x00000283u, 0x000043adu, 0x0007000cu, 0x00000008u, 0x000043afu, 0x00000001u, 0x00000027u, 0x000043aeu, 0x00000283u, 0x0003003eu, 0x000043a5u, 0x000043afu, 0x000500c4u, 0x00000008u, 0x000043b2u, 0x00004351u, 0x000043afu, 0x000500c7u, 0x00000008u, 0x000043b3u, 0x000043b2u, 0x00000b25u, 0x0003003eu, 0x000043a6u, 0x000043b3u, 0x000500c7u, 0x00000008u, 0x000043b5u, 0x000043b3u, 0x0000038bu, 0x0003003eu, 0x000043a7u, 0x000043b5u, 0x000500c3u, 0x00000008u, 0x000043b7u, 0x000043b3u, 0x0000025eu, 0x0003003eu, 0x000043a9u, 0x00000be9u, 0x00050041u, 0x00000060u, 0x000043b8u, 0x000043a9u, 0x000043b7u, 0x0004003du, 0x0000005fu, 0x000043b9u, 0x000043b8u, 0x00050051u, 0x00000008u, 0x000043bau, 0x000043b9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000043bbu, 0x000043b9u, 0x00000001u, 0x0003003eu, 0x000043a8u, 0x000043b9u, 0x00050041u, 0x0000003eu, 0x000043bdu, 0x000043a8u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000043beu, 0x000043bdu, 0x00050084u, 0x00000008u, 0x000043c0u, 0x000043beu, 0x000043b5u, 0x000500c3u, 0x00000008u, 0x000043c1u, 0x000043c0u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x000043c2u, 0x000043a8u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000043c3u, 0x000043c2u, 0x00050080u, 0x00000008u, 0x000043c4u, 0x000043c1u, 0x000043c3u, 0x0003003eu, 0x000043aau, 0x000043c4u, 0x00050050u, 0x0000005fu, 0x000043c7u, 0x000043c4u, 0x000043afu, 0x0003003eu, 0x000043abu, 0x000043c7u, 0x0003003eu, 0x00004344u, 0x000043c7u, 0x00050041u, 0x0000003eu, 0x00004354u, 0x00004344u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004355u, 0x00004354u, 0x0003003eu, 0x00004346u, 0x00004355u, 0x0004003du, 0x0000003cu, 0x00004356u, 0x00002079u, 0x0007004fu, 0x0000005fu, 0x00004357u, 0x00004356u, 0x00004356u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00004358u, 0x00004344u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004359u, 0x00004358u, 0x00050050u, 0x0000005fu, 0x0000435au, 0x00004359u, 0x00004359u, 0x00050084u, 0x0000005fu, 0x0000435bu, 0x00004357u, 0x0000435au, 0x0003003eu, 0x00004347u, 0x0000435bu, 0x000500c3u, 0x00000008u, 0x0000435du, 0x00000c1eu, 0x00004355u, 0x0004007eu, 0x00000008u, 0x0000435eu, 0x0000435du, 0x000500c7u, 0x00000008u, 0x0000435fu, 0x00000c1du, 0x0000435eu, 0x0003003eu, 0x00004348u, 0x0000435fu, 0x0004003du, 0x0000005fu, 0x00004360u, 0x00004347u, 0x00050050u, 0x0000005fu, 0x00004362u, 0x0000435fu, 0x0000435fu, 0x000500c7u, 0x0000005fu, 0x00004363u, 0x00004360u, 0x00004362u, 0x0003003eu, 0x00004349u, 0x00004363u, 0x000500abu, 0x0000005du, 0x00004365u, 0x00004355u, 0x00000283u, 0x000300f7u, 0x00004366u, 0x00000000u, 0x000400fau, 0x00004365u, 0x00004367u, 0x00004368u, 0x000200f8u, 0x00004368u, 0x0004003du, 0x0000005fu, 0x0000436eu, 0x00004347u, 0x000500c4u, 0x0000005fu, 0x00004370u, 0x0000436eu, 0x0000eee3u, 0x0003003eu, 0x0000434au, 0x00004370u, 0x000200f9u, 0x00004366u, 0x000200f8u, 0x00004367u, 0x0004003du, 0x0000005fu, 0x00004369u, 0x00004347u, 0x00050082u, 0x00000008u, 0x0000436bu, 0x0000027du, 0x00004355u, 0x00050050u, 0x0000005fu, 0x0000436cu, 0x0000436bu, 0x0000436bu, 0x000500c3u, 0x0000005fu, 0x0000436du, 0x00004369u, 0x0000436cu, 0x0003003eu, 0x00004347u, 0x0000436du, 0x0003003eu, 0x0000434au, 0x0000436du, 0x000200f9u, 0x00004366u, 0x000200f8u, 0x00004366u, 0x0004003du, 0x0000005fu, 0x00004371u, 0x00004349u, 0x000500abu, 0x00000879u, 0x00004372u, 0x00004371u, 0x00000c37u, 0x0004009au, 0x0000005du, 0x00004373u, 0x00004372u, 0x000300f7u, 0x00004374u, 0x00000000u, 0x000400fau, 0x00004373u, 0x00004375u, 0x00004374u, 0x000200f8u, 0x00004375u, 0x00050041u, 0x0000003eu, 0x00004376u, 0x00004349u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004377u, 0x00004376u, 0x000500abu, 0x0000005du, 0x00004379u, 0x00004377u, 0x0000435fu, 0x000300f7u, 0x0000437au, 0x00000000u, 0x000400fau, 0x00004379u, 0x0000437bu, 0x0000437au, 0x000200f8u, 0x0000437bu, 0x0004003du, 0x00000008u, 0x0000437du, 0x00004376u, 0x000500abu, 0x0000005du, 0x0000437eu, 0x0000437du, 0x00000203u, 0x000200f9u, 0x0000437au, 0x000200f8u, 0x0000437au, 0x000700f5u, 0x0000005du, 0x0000437fu, 0x00004379u, 0x00004375u, 0x0000437eu, 0x0000437bu, 0x000300f7u, 0x00004380u, 0x00000000u, 0x000400fau, 0x0000437fu, 0x00004381u, 0x00004380u, 0x000200f8u, 0x00004381u, 0x00050041u, 0x0000003eu, 0x00004382u, 0x00004347u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004383u, 0x00004382u, 0x000500c7u, 0x00000008u, 0x00004384u, 0x00004383u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00004385u, 0x00004384u, 0x00000203u, 0x000300f7u, 0x00004386u, 0x00000000u, 0x000400fau, 0x00004385u, 0x00004387u, 0x00004388u, 0x000200f8u, 0x00004388u, 0x00050041u, 0x0000003eu, 0x0000438au, 0x0000434au, 0x00000374u, 0x0003003eu, 0x0000438au, 0x00000c50u, 0x000200f9u, 0x00004386u, 0x000200f8u, 0x00004387u, 0x00050041u, 0x0000003eu, 0x00004389u, 0x0000434au, 0x00000374u, 0x0003003eu, 0x00004389u, 0x00000c0bu, 0x000200f9u, 0x00004386u, 0x000200f8u, 0x00004386u, 0x0003003eu, 0x0000207au, 0x0000055eu, 0x000200f9u, 0x00004380u, 0x000200f8u, 0x00004380u, 0x000600a9u, 0x0000005du, 0x0000ef0cu, 0x0000437fu, 0x0000055eu, 0x00008e4bu, 0x00050041u, 0x0000003eu, 0x0000438bu, 0x00004349u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000438cu, 0x0000438bu, 0x000500abu, 0x0000005du, 0x0000438eu, 0x0000438cu, 0x0000435fu, 0x000300f7u, 0x0000438fu, 0x00000000u, 0x000400fau, 0x0000438eu, 0x00004390u, 0x0000438fu, 0x000200f8u, 0x00004390u, 0x0004003du, 0x00000008u, 0x00004392u, 0x0000438bu, 0x000500abu, 0x0000005du, 0x00004393u, 0x00004392u, 0x00000203u, 0x000200f9u, 0x0000438fu, 0x000200f8u, 0x0000438fu, 0x000700f5u, 0x0000005du, 0x00004394u, 0x0000438eu, 0x00004380u, 0x00004393u, 0x00004390u, 0x000300f7u, 0x00004395u, 0x00000000u, 0x000400fau, 0x00004394u, 0x00004396u, 0x00004395u, 0x000200f8u, 0x00004396u, 0x00050041u, 0x0000003eu, 0x00004397u, 0x00004347u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004398u, 0x00004397u, 0x000500c7u, 0x00000008u, 0x00004399u, 0x00004398u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x0000439au, 0x00004399u, 0x00000203u, 0x000300f7u, 0x0000439bu, 0x00000000u, 0x000400fau, 0x0000439au, 0x0000439cu, 0x0000439du, 0x000200f8u, 0x0000439du, 0x00050041u, 0x0000003eu, 0x0000439fu, 0x0000434au, 0x00000485u, 0x0003003eu, 0x0000439fu, 0x00000c50u, 0x000200f9u, 0x0000439bu, 0x000200f8u, 0x0000439cu, 0x00050041u, 0x0000003eu, 0x0000439eu, 0x0000434au, 0x00000485u, 0x0003003eu, 0x0000439eu, 0x00000c0bu, 0x000200f9u, 0x0000439bu, 0x000200f8u, 0x0000439bu, 0x0003003eu, 0x0000207au, 0x0000055eu, 0x000200f9u, 0x00004395u, 0x000200f8u, 0x00004395u, 0x000600a9u, 0x0000005du, 0x0000ef0du, 0x00004394u, 0x0000055eu, 0x0000ef0cu, 0x000200f9u, 0x00004374u, 0x000200f8u, 0x00004374u, 0x000700f5u, 0x0000005du, 0x00008ed5u, 0x00008e4bu, 0x00004366u, 0x0000ef0du, 0x00004395u, 0x000300f7u, 0x000043a1u, 0x00000000u, 0x000400fau, 0x0000434fu, 0x000043a2u, 0x000043a1u, 0x000200f8u, 0x000043a2u, 0x0003003eu, 0x0000434au, 0x00000c6au, 0x0003003eu, 0x0000207au, 0x0000055eu, 0x000200f9u, 0x000043a1u, 0x000200f8u, 0x000043a1u, 0x000600a9u, 0x0000005du, 0x0000ef0eu, 0x0000434fu, 0x0000055eu, 0x00008ed5u, 0x0004003du, 0x0000005fu, 0x000043a3u, 0x0000434au, 0x0008000cu, 0x0000005fu, 0x000043a4u, 0x00000001u, 0x0000002du, 0x000043a3u, 0x00000c6du, 0x00000c6eu, 0x0003003eu, 0x0000434bu, 0x000043a4u, 0x0003003eu, 0x00002078u, 0x0000ef0eu, 0x0003003eu, 0x00002042u, 0x000043a4u, 0x000200f9u, 0x00002261u, 0x000200f8u, 0x00002261u, 0x000700f5u, 0x0000005du, 0x0000e1a4u, 0x0000ef0eu, 0x000043a1u, 0x00008e4bu, 0x00002263u, 0x000700f5u, 0x0000005fu, 0x00009277u, 0x000043a4u, 0x000043a1u, 0x000043cau, 0x00002263u, 0x000200f9u, 0x0000224eu, 0x000200f8u, 0x0000224eu, 0x000700f5u, 0x0000005du, 0x0000e1a3u, 0x0000e1a4u, 0x00002261u, 0x00008e4bu, 0x000043e2u, 0x000700f5u, 0x0000005du, 0x0000e0aau, 0x00008da8u, 0x00002261u, 0x0000e0b5u, 0x000043e2u, 0x000700f5u, 0x0000005fu, 0x00009276u, 0x00009277u, 0x00002261u, 0x00008e39u, 0x000043e2u, 0x0003003eu, 0x00002054u, 0x00007d22u, 0x0003003eu, 0x00002012u, 0x0000055eu, 0x000200f9u, 0x0000222bu, 0x000200f8u, 0x0000222bu, 0x000700f5u, 0x0000005du, 0x0000e1a2u, 0x00008e4bu, 0x0000220eu, 0x0000e1a3u, 0x0000224eu, 0x000700f5u, 0x0000005du, 0x0000e0a9u, 0x00008da8u, 0x0000220eu, 0x0000e0aau, 0x0000224eu, 0x000700f5u, 0x0000005fu, 0x00009222u, 0x00007b5au, 0x0000220eu, 0x00009276u, 0x0000224eu, 0x000600a9u, 0x00000006u, 0x0000ef0fu, 0x00002142u, 0x00007d22u, 0x00009165u, 0x000600a9u, 0x0000005du, 0x0000ef10u, 0x00002142u, 0x0000055eu, 0x0000213fu, 0x000300f7u, 0x00002276u, 0x00000000u, 0x000400fau, 0x0000ef10u, 0x00002277u, 0x00002276u, 0x000200f8u, 0x00002277u, 0x000400a8u, 0x0000005du, 0x0000227au, 0x0000214eu, 0x000500a7u, 0x0000005du, 0x0000227bu, 0x00002148u, 0x0000227au, 0x000300f7u, 0x0000227cu, 0x00000000u, 0x000400fau, 0x0000227bu, 0x0000227du, 0x0000227eu, 0x000200f8u, 0x0000227eu, 0x00080041u, 0x00000277u, 0x00002285u, 0x00000a19u, 0x00000203u, 0x00001ed5u, 0x00000215u, 0x0000ef0fu, 0x0004003du, 0x00000229u, 0x00002286u, 0x00002285u, 0x00040071u, 0x00000006u, 0x00002287u, 0x00002286u, 0x0003003eu, 0x00002083u, 0x00002287u, 0x0003003eu, 0x00002085u, 0x00002287u, 0x00070041u, 0x0000026bu, 0x000044afu, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000203u, 0x0004003du, 0x00000006u, 0x000044b0u, 0x000044afu, 0x00070041u, 0x0000026bu, 0x000044b2u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000212u, 0x0004003du, 0x00000006u, 0x000044b3u, 0x000044b2u, 0x00070041u, 0x0000026bu, 0x000044b5u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000215u, 0x0004003du, 0x00000006u, 0x000044b6u, 0x000044b5u, 0x00070041u, 0x0000026bu, 0x000044b8u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000218u, 0x0004003du, 0x00000006u, 0x000044b9u, 0x000044b8u, 0x00070041u, 0x0000026bu, 0x000044bbu, 0x000002d1u, 0x00000203u, 0x00002287u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000044bcu, 0x000044bbu, 0x00070041u, 0x0000026bu, 0x000044beu, 0x000002d1u, 0x00000203u, 0x00002287u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000044bfu, 0x000044beu, 0x00070041u, 0x00000277u, 0x000044c1u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000221u, 0x0004003du, 0x00000229u, 0x000044c2u, 0x000044c1u, 0x00040071u, 0x00000006u, 0x000044c3u, 0x000044c2u, 0x0004007cu, 0x00000008u, 0x000044c4u, 0x000044c3u, 0x00070041u, 0x00000277u, 0x000044c6u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000224u, 0x0004003du, 0x00000229u, 0x000044c7u, 0x000044c6u, 0x00040071u, 0x00000006u, 0x000044c8u, 0x000044c7u, 0x0004007cu, 0x00000008u, 0x000044c9u, 0x000044c8u, 0x00070041u, 0x00000277u, 0x000044cbu, 0x000002d1u, 0x00000203u, 0x00002287u, 0x0000025eu, 0x0004003du, 0x00000229u, 0x000044ccu, 0x000044cbu, 0x00040071u, 0x00000006u, 0x000044cdu, 0x000044ccu, 0x0004007cu, 0x00000008u, 0x000044ceu, 0x000044cdu, 0x00070041u, 0x00000277u, 0x000044d0u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000044d1u, 0x000044d0u, 0x00040071u, 0x00000006u, 0x000044d2u, 0x000044d1u, 0x0004007cu, 0x00000008u, 0x000044d3u, 0x000044d2u, 0x00070041u, 0x00000277u, 0x000044d5u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000044d6u, 0x000044d5u, 0x00040071u, 0x00000006u, 0x000044d7u, 0x000044d6u, 0x0004007cu, 0x00000008u, 0x000044d8u, 0x000044d7u, 0x00070041u, 0x00000277u, 0x000044dau, 0x000002d1u, 0x00000203u, 0x00002287u, 0x0000026fu, 0x0004003du, 0x00000229u, 0x000044dbu, 0x000044dau, 0x00040071u, 0x00000006u, 0x000044dcu, 0x000044dbu, 0x0004007cu, 0x00000008u, 0x000044ddu, 0x000044dcu, 0x00070041u, 0x00000277u, 0x000044dfu, 0x000002d1u, 0x00000203u, 0x00002287u, 0x00000276u, 0x0004003du, 0x00000229u, 0x000044e0u, 0x000044dfu, 0x00040071u, 0x00000006u, 0x000044e1u, 0x000044e0u, 0x0004007cu, 0x00000008u, 0x000044e2u, 0x000044e1u, 0x00070041u, 0x00000277u, 0x000044e4u, 0x000002d1u, 0x00000203u, 0x00002287u, 0x0000027du, 0x0004003du, 0x00000229u, 0x000044e5u, 0x000044e4u, 0x00040071u, 0x00000006u, 0x000044e6u, 0x000044e5u, 0x0004007cu, 0x00000008u, 0x000044e7u, 0x000044e6u, 0x00110050u, 0x0000001eu, 0x000044e8u, 0x000044b0u, 0x000044b3u, 0x000044b6u, 0x000044b9u, 0x000044bcu, 0x000044bfu, 0x000044c4u, 0x000044c9u, 0x000044ceu, 0x000044d3u, 0x000044d8u, 0x000044ddu, 0x000044e2u, 0x000044e7u, 0x0003003eu, 0x00006aa4u, 0x000044b0u, 0x0003003eu, 0x00006aa5u, 0x000044b3u, 0x0003003eu, 0x00006aa6u, 0x000044b6u, 0x0003003eu, 0x00006aa7u, 0x000044b9u, 0x0003003eu, 0x00006aa8u, 0x000044bcu, 0x0003003eu, 0x00006aa9u, 0x000044bfu, 0x0003003eu, 0x00006aaau, 0x000044c4u, 0x0003003eu, 0x00006aabu, 0x000044c9u, 0x0003003eu, 0x00006aacu, 0x000044ceu, 0x0003003eu, 0x00006aadu, 0x000044d3u, 0x0003003eu, 0x00006aaeu, 0x000044d8u, 0x0003003eu, 0x00006aafu, 0x000044ddu, 0x0003003eu, 0x00006ab0u, 0x000044e2u, 0x0003003eu, 0x00006ab1u, 0x000044e7u, 0x0003003eu, 0x000072dbu, 0x000044b0u, 0x0003003eu, 0x000072dcu, 0x000044b3u, 0x0003003eu, 0x000072ddu, 0x000044b6u, 0x0003003eu, 0x000072deu, 0x000044b9u, 0x0003003eu, 0x000072dfu, 0x000044bcu, 0x0003003eu, 0x000072e0u, 0x000044bfu, 0x0003003eu, 0x000072e1u, 0x000044c4u, 0x0003003eu, 0x000072e2u, 0x000044c9u, 0x0003003eu, 0x000072e3u, 0x000044ceu, 0x0003003eu, 0x000072e4u, 0x000044d3u, 0x0003003eu, 0x000072e5u, 0x000044d8u, 0x0003003eu, 0x000072e6u, 0x000044ddu, 0x0003003eu, 0x000072e7u, 0x000044e2u, 0x0003003eu, 0x000072e8u, 0x000044e7u, 0x0003003eu, 0x00007306u, 0x000044b0u, 0x0003003eu, 0x00007307u, 0x000044b3u, 0x0003003eu, 0x00007308u, 0x000044b6u, 0x0003003eu, 0x00007309u, 0x000044b9u, 0x0003003eu, 0x0000730au, 0x000044bcu, 0x0003003eu, 0x0000730bu, 0x000044bfu, 0x0003003eu, 0x0000730cu, 0x000044c4u, 0x0003003eu, 0x0000730du, 0x000044c9u, 0x0003003eu, 0x0000730eu, 0x000044ceu, 0x0003003eu, 0x0000730fu, 0x000044d3u, 0x0003003eu, 0x00007310u, 0x000044d8u, 0x0003003eu, 0x00007311u, 0x000044ddu, 0x0003003eu, 0x00007312u, 0x000044e2u, 0x0003003eu, 0x00007313u, 0x000044e7u, 0x0003003eu, 0x00002087u, 0x000020f8u, 0x0003003eu, 0x00002088u, 0x00009222u, 0x0003003eu, 0x00002089u, 0x00002109u, 0x0003003eu, 0x0000208au, 0x0000210cu, 0x0003003eu, 0x0000208bu, 0x0000210fu, 0x0003003eu, 0x0000208cu, 0x00002139u, 0x0003003eu, 0x0000208du, 0x00002148u, 0x0003003eu, 0x0000208eu, 0x000093d0u, 0x000500c7u, 0x00000008u, 0x0000462cu, 0x000044e7u, 0x00000212u, 0x000500abu, 0x0000005du, 0x0000462du, 0x0000462cu, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00004630u, 0x000044b0u, 0x0004007cu, 0x00000008u, 0x00004633u, 0x000044b3u, 0x0003003eu, 0x000044e9u, 0x0000462du, 0x00050041u, 0x0000003eu, 0x00004636u, 0x00002088u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004637u, 0x00004636u, 0x0003003eu, 0x000044eau, 0x00004637u, 0x0003003eu, 0x000044ebu, 0x00004630u, 0x0003003eu, 0x000044ecu, 0x00004633u, 0x0003003eu, 0x000044edu, 0x000044d8u, 0x0008000cu, 0x00000008u, 0x000049e5u, 0x00000001u, 0x0000002du, 0x00004637u, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x000044eau, 0x000049e5u, 0x000500b1u, 0x0000005du, 0x000049e7u, 0x000044d8u, 0x0000026fu, 0x000300f7u, 0x000049e8u, 0x00000000u, 0x000400fau, 0x000049e7u, 0x000049e9u, 0x000049eau, 0x000200f8u, 0x000049eau, 0x00050082u, 0x00000008u, 0x000049efu, 0x0000037du, 0x000044d8u, 0x000500c4u, 0x00000008u, 0x000049f1u, 0x000049e5u, 0x000049efu, 0x0003003eu, 0x000044eau, 0x000049f1u, 0x000500c3u, 0x00000008u, 0x000049f3u, 0x000049f1u, 0x00000559u, 0x0003003eu, 0x000044eau, 0x000049f3u, 0x000200f9u, 0x000049e8u, 0x000200f8u, 0x000049e9u, 0x000500c3u, 0x00000008u, 0x000049edu, 0x000049e5u, 0x000044d8u, 0x0003003eu, 0x000044eau, 0x000049edu, 0x000200f9u, 0x000049e8u, 0x000200f8u, 0x000049e8u, 0x000700f5u, 0x00000008u, 0x00009421u, 0x000049edu, 0x000049e9u, 0x000049f3u, 0x000049eau, 0x000300f7u, 0x000049f5u, 0x00000000u, 0x000400fau, 0x0000462du, 0x000049f6u, 0x000049f7u, 0x000200f8u, 0x000049f7u, 0x000500c4u, 0x00000008u, 0x00004a0du, 0x00004630u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a0fu, 0x00009421u, 0x00004a0du, 0x0003003eu, 0x000044eau, 0x00004a0fu, 0x000200f9u, 0x000049f5u, 0x000200f8u, 0x000049f6u, 0x000500c3u, 0x00000008u, 0x000049f9u, 0x00009421u, 0x00000218u, 0x000500afu, 0x0000005du, 0x000049fbu, 0x000049f9u, 0x00004633u, 0x0003003eu, 0x000049e2u, 0x000049fbu, 0x000300f7u, 0x000049fdu, 0x00000000u, 0x000400fau, 0x000049fbu, 0x000049feu, 0x000049ffu, 0x000200f8u, 0x000049ffu, 0x000500c4u, 0x00000008u, 0x00004a09u, 0x00004630u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a0au, 0x00009421u, 0x00004a09u, 0x0007000cu, 0x00000008u, 0x00004a0bu, 0x00000001u, 0x0000002au, 0x00004a0au, 0x00000203u, 0x0003003eu, 0x000044eau, 0x00004a0bu, 0x000200f9u, 0x000049fdu, 0x000200f8u, 0x000049feu, 0x000500c3u, 0x00000008u, 0x00004a01u, 0x00004633u, 0x00000215u, 0x000500c3u, 0x00000008u, 0x00004a03u, 0x00004630u, 0x00000215u, 0x00050082u, 0x00000008u, 0x00004a04u, 0x00004a01u, 0x00004a03u, 0x000500c7u, 0x00000008u, 0x00004a05u, 0x00004a04u, 0x00001140u, 0x000500c4u, 0x00000008u, 0x00004a06u, 0x00004a05u, 0x0000021eu, 0x0003003eu, 0x000044eau, 0x00004a06u, 0x000200f9u, 0x000049fdu, 0x000200f8u, 0x000049fdu, 0x000700f5u, 0x00000008u, 0x00009424u, 0x00004a06u, 0x000049feu, 0x00004a0bu, 0x000049ffu, 0x000200f9u, 0x000049f5u, 0x000200f8u, 0x000049f5u, 0x000700f5u, 0x00000008u, 0x00009423u, 0x00009424u, 0x000049fdu, 0x00004a0fu, 0x000049f7u, 0x0003003eu, 0x000049e3u, 0x00009423u, 0x0003003eu, 0x00004636u, 0x00009423u, 0x000500c7u, 0x00000008u, 0x0000463cu, 0x000044e7u, 0x0000021bu, 0x000500abu, 0x0000005du, 0x0000463du, 0x0000463cu, 0x00000203u, 0x0004007cu, 0x00000008u, 0x00004640u, 0x000044b6u, 0x0004007cu, 0x00000008u, 0x00004643u, 0x000044b9u, 0x0003003eu, 0x000044eeu, 0x0000463du, 0x00050041u, 0x0000003eu, 0x00004646u, 0x00002088u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004647u, 0x00004646u, 0x0003003eu, 0x000044efu, 0x00004647u, 0x0003003eu, 0x000044f0u, 0x00004640u, 0x0003003eu, 0x000044f1u, 0x00004643u, 0x0003003eu, 0x000044f2u, 0x000044e2u, 0x0008000cu, 0x00000008u, 0x00004a14u, 0x00000001u, 0x0000002du, 0x00004647u, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x000044efu, 0x00004a14u, 0x000500b1u, 0x0000005du, 0x00004a16u, 0x000044e2u, 0x0000026fu, 0x000300f7u, 0x00004a17u, 0x00000000u, 0x000400fau, 0x00004a16u, 0x00004a18u, 0x00004a19u, 0x000200f8u, 0x00004a19u, 0x00050082u, 0x00000008u, 0x00004a1eu, 0x0000037du, 0x000044e2u, 0x000500c4u, 0x00000008u, 0x00004a20u, 0x00004a14u, 0x00004a1eu, 0x0003003eu, 0x000044efu, 0x00004a20u, 0x000500c3u, 0x00000008u, 0x00004a22u, 0x00004a20u, 0x00000559u, 0x0003003eu, 0x000044efu, 0x00004a22u, 0x000200f9u, 0x00004a17u, 0x000200f8u, 0x00004a18u, 0x000500c3u, 0x00000008u, 0x00004a1cu, 0x00004a14u, 0x000044e2u, 0x0003003eu, 0x000044efu, 0x00004a1cu, 0x000200f9u, 0x00004a17u, 0x000200f8u, 0x00004a17u, 0x000700f5u, 0x00000008u, 0x00009433u, 0x00004a1cu, 0x00004a18u, 0x00004a22u, 0x00004a19u, 0x000300f7u, 0x00004a24u, 0x00000000u, 0x000400fau, 0x0000463du, 0x00004a25u, 0x00004a26u, 0x000200f8u, 0x00004a26u, 0x000500c4u, 0x00000008u, 0x00004a3cu, 0x00004640u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a3eu, 0x00009433u, 0x00004a3cu, 0x0003003eu, 0x000044efu, 0x00004a3eu, 0x000200f9u, 0x00004a24u, 0x000200f8u, 0x00004a25u, 0x000500c3u, 0x00000008u, 0x00004a28u, 0x00009433u, 0x00000218u, 0x000500afu, 0x0000005du, 0x00004a2au, 0x00004a28u, 0x00004643u, 0x0003003eu, 0x00004a11u, 0x00004a2au, 0x000300f7u, 0x00004a2cu, 0x00000000u, 0x000400fau, 0x00004a2au, 0x00004a2du, 0x00004a2eu, 0x000200f8u, 0x00004a2eu, 0x000500c4u, 0x00000008u, 0x00004a38u, 0x00004640u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00004a39u, 0x00009433u, 0x00004a38u, 0x0007000cu, 0x00000008u, 0x00004a3au, 0x00000001u, 0x0000002au, 0x00004a39u, 0x00000203u, 0x0003003eu, 0x000044efu, 0x00004a3au, 0x000200f9u, 0x00004a2cu, 0x000200f8u, 0x00004a2du, 0x000500c3u, 0x00000008u, 0x00004a30u, 0x00004643u, 0x00000215u, 0x000500c3u, 0x00000008u, 0x00004a32u, 0x00004640u, 0x00000215u, 0x00050082u, 0x00000008u, 0x00004a33u, 0x00004a30u, 0x00004a32u, 0x000500c7u, 0x00000008u, 0x00004a34u, 0x00004a33u, 0x00001140u, 0x000500c4u, 0x00000008u, 0x00004a35u, 0x00004a34u, 0x0000021eu, 0x0003003eu, 0x000044efu, 0x00004a35u, 0x000200f9u, 0x00004a2cu, 0x000200f8u, 0x00004a2cu, 0x000700f5u, 0x00000008u, 0x00009436u, 0x00004a35u, 0x00004a2du, 0x00004a3au, 0x00004a2eu, 0x000200f9u, 0x00004a24u, 0x000200f8u, 0x00004a24u, 0x000700f5u, 0x00000008u, 0x00009435u, 0x00009436u, 0x00004a2cu, 0x00004a3eu, 0x00004a26u, 0x0003003eu, 0x00004a12u, 0x00009435u, 0x0003003eu, 0x00004646u, 0x00009435u, 0x000300f7u, 0x0000464bu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x0000464cu, 0x0000464du, 0x000200f8u, 0x0000464du, 0x0003003eu, 0x000044f3u, 0x00000c37u, 0x000200f9u, 0x0000464bu, 0x000200f8u, 0x0000464cu, 0x0004003du, 0x0000005fu, 0x0000464eu, 0x00002088u, 0x000500c7u, 0x0000005fu, 0x00004650u, 0x0000464eu, 0x0000eee6u, 0x0003003eu, 0x000044f3u, 0x00004650u, 0x000200f9u, 0x0000464bu, 0x000200f8u, 0x0000464bu, 0x00050041u, 0x0000003eu, 0x00004651u, 0x000044f3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004652u, 0x00004651u, 0x00050041u, 0x0000003eu, 0x00004653u, 0x000044f3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004654u, 0x00004653u, 0x00050080u, 0x00000008u, 0x00004655u, 0x00004652u, 0x00004654u, 0x0003003eu, 0x000044f4u, 0x00004655u, 0x0004003du, 0x0000005fu, 0x00004656u, 0x00002088u, 0x000500c3u, 0x0000005fu, 0x00004658u, 0x00004656u, 0x0000eee5u, 0x0003003eu, 0x00002088u, 0x00004658u, 0x0003003eu, 0x00006974u, 0x000044d3u, 0x0003003eu, 0x00006975u, 0x000044e7u, 0x0004003du, 0x00000008u, 0x0000465bu, 0x00004636u, 0x0003003eu, 0x000044f7u, 0x0000465bu, 0x000500abu, 0x0000005du, 0x00004a44u, 0x000044d3u, 0x00000203u, 0x000300f7u, 0x00004a45u, 0x00000000u, 0x000400fau, 0x00004a44u, 0x00004a46u, 0x00004a45u, 0x000200f8u, 0x00004a46u, 0x000500c4u, 0x00000008u, 0x00004a49u, 0x00000212u, 0x000044d3u, 0x0003003eu, 0x00004a40u, 0x00004a49u, 0x000500c7u, 0x00000008u, 0x00004a4cu, 0x000044e7u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00004a4du, 0x00004a4cu, 0x00000203u, 0x000300f7u, 0x00004a4eu, 0x00000000u, 0x000400fau, 0x00004a4du, 0x00004a4fu, 0x00004a4eu, 0x000200f8u, 0x00004a4fu, 0x000500c7u, 0x00000008u, 0x00004a52u, 0x0000465bu, 0x00004a49u, 0x00050082u, 0x00000008u, 0x00004a53u, 0x00004a52u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a54u, 0x00000001u, 0x0000002au, 0x00004a53u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a56u, 0x0000465bu, 0x00004a54u, 0x0003003eu, 0x000044f7u, 0x00004a56u, 0x000200f9u, 0x00004a4eu, 0x000200f8u, 0x00004a4eu, 0x000700f5u, 0x00000008u, 0x00009494u, 0x0000465bu, 0x00004a46u, 0x00004a56u, 0x00004a4fu, 0x00050082u, 0x00000008u, 0x00004a58u, 0x00004a49u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004a5au, 0x00009494u, 0x00004a58u, 0x0003003eu, 0x000044f7u, 0x00004a5au, 0x000200f9u, 0x00004a45u, 0x000200f8u, 0x00004a45u, 0x000700f5u, 0x00000008u, 0x00009495u, 0x0000465bu, 0x0000464bu, 0x00004a5au, 0x00004a4eu, 0x0003003eu, 0x00004a41u, 0x00009495u, 0x0003003eu, 0x000044f5u, 0x00009495u, 0x0003003eu, 0x00006978u, 0x000044ddu, 0x0003003eu, 0x00006979u, 0x000044e7u, 0x0004003du, 0x00000008u, 0x0000465fu, 0x00004646u, 0x0003003eu, 0x000044fau, 0x0000465fu, 0x000500abu, 0x0000005du, 0x00004a60u, 0x000044ddu, 0x00000203u, 0x000300f7u, 0x00004a61u, 0x00000000u, 0x000400fau, 0x00004a60u, 0x00004a62u, 0x00004a61u, 0x000200f8u, 0x00004a62u, 0x000500c4u, 0x00000008u, 0x00004a65u, 0x00000212u, 0x000044ddu, 0x0003003eu, 0x00004a5cu, 0x00004a65u, 0x000500c7u, 0x00000008u, 0x00004a68u, 0x000044e7u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00004a69u, 0x00004a68u, 0x00000203u, 0x000300f7u, 0x00004a6au, 0x00000000u, 0x000400fau, 0x00004a69u, 0x00004a6bu, 0x00004a6au, 0x000200f8u, 0x00004a6bu, 0x000500c7u, 0x00000008u, 0x00004a6eu, 0x0000465fu, 0x00004a65u, 0x00050082u, 0x00000008u, 0x00004a6fu, 0x00004a6eu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a70u, 0x00000001u, 0x0000002au, 0x00004a6fu, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a72u, 0x0000465fu, 0x00004a70u, 0x0003003eu, 0x000044fau, 0x00004a72u, 0x000200f9u, 0x00004a6au, 0x000200f8u, 0x00004a6au, 0x000700f5u, 0x00000008u, 0x000094b3u, 0x0000465fu, 0x00004a62u, 0x00004a72u, 0x00004a6bu, 0x00050082u, 0x00000008u, 0x00004a74u, 0x00004a65u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004a76u, 0x000094b3u, 0x00004a74u, 0x0003003eu, 0x000044fau, 0x00004a76u, 0x000200f9u, 0x00004a61u, 0x000200f8u, 0x00004a61u, 0x000700f5u, 0x00000008u, 0x000094b4u, 0x0000465fu, 0x00004a45u, 0x00004a76u, 0x00004a6au, 0x0003003eu, 0x00004a5du, 0x000094b4u, 0x0003003eu, 0x000044f8u, 0x000094b4u, 0x0004003du, 0x00000008u, 0x00004662u, 0x00004636u, 0x00050080u, 0x00000008u, 0x00004663u, 0x00004662u, 0x00000212u, 0x0003003eu, 0x0000697cu, 0x000044d3u, 0x0003003eu, 0x0000697du, 0x000044e7u, 0x0003003eu, 0x000044fdu, 0x00004663u, 0x000300f7u, 0x00004a7du, 0x00000000u, 0x000400fau, 0x00004a44u, 0x00004a7eu, 0x00004a7du, 0x000200f8u, 0x00004a7eu, 0x000500c4u, 0x00000008u, 0x00004a81u, 0x00000212u, 0x000044d3u, 0x0003003eu, 0x00004a78u, 0x00004a81u, 0x000500c7u, 0x00000008u, 0x00004a84u, 0x000044e7u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00004a85u, 0x00004a84u, 0x00000203u, 0x000300f7u, 0x00004a86u, 0x00000000u, 0x000400fau, 0x00004a85u, 0x00004a87u, 0x00004a86u, 0x000200f8u, 0x00004a87u, 0x000500c7u, 0x00000008u, 0x00004a8au, 0x00004663u, 0x00004a81u, 0x00050082u, 0x00000008u, 0x00004a8bu, 0x00004a8au, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004a8cu, 0x00000001u, 0x0000002au, 0x00004a8bu, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004a8eu, 0x00004663u, 0x00004a8cu, 0x0003003eu, 0x000044fdu, 0x00004a8eu, 0x000200f9u, 0x00004a86u, 0x000200f8u, 0x00004a86u, 0x000700f5u, 0x00000008u, 0x000094d2u, 0x00004663u, 0x00004a7eu, 0x00004a8eu, 0x00004a87u, 0x00050082u, 0x00000008u, 0x00004a90u, 0x00004a81u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004a92u, 0x000094d2u, 0x00004a90u, 0x0003003eu, 0x000044fdu, 0x00004a92u, 0x000200f9u, 0x00004a7du, 0x000200f8u, 0x00004a7du, 0x000700f5u, 0x00000008u, 0x000094d3u, 0x00004663u, 0x00004a61u, 0x00004a92u, 0x00004a86u, 0x0003003eu, 0x00004a79u, 0x000094d3u, 0x0003003eu, 0x000044fbu, 0x000094d3u, 0x0004003du, 0x00000008u, 0x00004667u, 0x00004646u, 0x00050080u, 0x00000008u, 0x00004668u, 0x00004667u, 0x00000212u, 0x0003003eu, 0x00006980u, 0x000044ddu, 0x0003003eu, 0x00006981u, 0x000044e7u, 0x0003003eu, 0x00004500u, 0x00004668u, 0x000300f7u, 0x00004a99u, 0x00000000u, 0x000400fau, 0x00004a60u, 0x00004a9au, 0x00004a99u, 0x000200f8u, 0x00004a9au, 0x000500c4u, 0x00000008u, 0x00004a9du, 0x00000212u, 0x000044ddu, 0x0003003eu, 0x00004a94u, 0x00004a9du, 0x000500c7u, 0x00000008u, 0x00004aa0u, 0x000044e7u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00004aa1u, 0x00004aa0u, 0x00000203u, 0x000300f7u, 0x00004aa2u, 0x00000000u, 0x000400fau, 0x00004aa1u, 0x00004aa3u, 0x00004aa2u, 0x000200f8u, 0x00004aa3u, 0x000500c7u, 0x00000008u, 0x00004aa6u, 0x00004668u, 0x00004a9du, 0x00050082u, 0x00000008u, 0x00004aa7u, 0x00004aa6u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00004aa8u, 0x00000001u, 0x0000002au, 0x00004aa7u, 0x00000203u, 0x000500c6u, 0x00000008u, 0x00004aaau, 0x00004668u, 0x00004aa8u, 0x0003003eu, 0x00004500u, 0x00004aaau, 0x000200f9u, 0x00004aa2u, 0x000200f8u, 0x00004aa2u, 0x000700f5u, 0x00000008u, 0x000094f1u, 0x00004668u, 0x00004a9au, 0x00004aaau, 0x00004aa3u, 0x00050082u, 0x00000008u, 0x00004aacu, 0x00004a9du, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00004aaeu, 0x000094f1u, 0x00004aacu, 0x0003003eu, 0x00004500u, 0x00004aaeu, 0x000200f9u, 0x00004a99u, 0x000200f8u, 0x00004a99u, 0x000700f5u, 0x00000008u, 0x000094f2u, 0x00004668u, 0x00004a7du, 0x00004aaeu, 0x00004aa2u, 0x0003003eu, 0x00004a95u, 0x000094f2u, 0x0003003eu, 0x000044feu, 0x000094f2u, 0x00050082u, 0x00000008u, 0x0000466du, 0x000094f2u, 0x000094b4u, 0x0007000cu, 0x00000008u, 0x0000466eu, 0x00000001u, 0x0000002au, 0x0000466du, 0x00001365u, 0x0003003eu, 0x00004501u, 0x0000466eu, 0x000500c7u, 0x00000008u, 0x00004670u, 0x000094b4u, 0x0000038bu, 0x00050080u, 0x00000008u, 0x00004672u, 0x00004670u, 0x0000466eu, 0x0003003eu, 0x000044feu, 0x00004672u, 0x0003003eu, 0x000044f8u, 0x00004670u, 0x0004003du, 0x0000005fu, 0x00004676u, 0x000044f3u, 0x000500aau, 0x00000879u, 0x00004677u, 0x00004676u, 0x0000136fu, 0x00050051u, 0x0000005du, 0x00004678u, 0x00004677u, 0x00000000u, 0x00050051u, 0x0000005du, 0x00004679u, 0x00004677u, 0x00000001u, 0x00060050u, 0x000003a1u, 0x0000467au, 0x00002139u, 0x00004678u, 0x00004679u, 0x0004009bu, 0x0000005du, 0x0000467bu, 0x0000467au, 0x0003003eu, 0x0000208cu, 0x0000467bu, 0x000300f7u, 0x0000467du, 0x00000000u, 0x000400fau, 0x0000467bu, 0x0000467eu, 0x0000467du, 0x000200f8u, 0x0000467eu, 0x0003003eu, 0x000044f4u, 0x00000203u, 0x000200f9u, 0x0000467du, 0x000200f8u, 0x0000467du, 0x000600a9u, 0x00000008u, 0x0000ef11u, 0x0000467bu, 0x00000203u, 0x00004655u, 0x000500aau, 0x0000005du, 0x00004681u, 0x000044c4u, 0x00000212u, 0x0003003eu, 0x00004502u, 0x00004681u, 0x000500afu, 0x0000005du, 0x00004683u, 0x0000ef11u, 0x0000037du, 0x000300f7u, 0x00004684u, 0x00000000u, 0x000400fau, 0x00004683u, 0x00004685u, 0x00004686u, 0x000200f8u, 0x00004686u, 0x00050050u, 0x0000005fu, 0x0000468cu, 0x00009495u, 0x00004670u, 0x0003003eu, 0x00004504u, 0x0000468cu, 0x000200f9u, 0x00004684u, 0x000200f8u, 0x00004685u, 0x00050050u, 0x0000005fu, 0x00004689u, 0x000094d3u, 0x00004672u, 0x0003003eu, 0x00004504u, 0x00004689u, 0x000200f9u, 0x00004684u, 0x000200f8u, 0x00004684u, 0x000700f5u, 0x0000005fu, 0x0000951eu, 0x00004689u, 0x00004685u, 0x0000468cu, 0x00004686u, 0x0003003eu, 0x00004503u, 0x0000951eu, 0x000300f7u, 0x0000468fu, 0x00000000u, 0x000400fau, 0x00002109u, 0x00004690u, 0x00004691u, 0x000200f8u, 0x00004691u, 0x000300f7u, 0x00004730u, 0x00000000u, 0x000d00fbu, 0x000044c4u, 0x00004730u, 0x00000000u, 0x00004731u, 0x00000001u, 0x00004732u, 0x00000002u, 0x00004733u, 0x00000003u, 0x00004734u, 0x00000004u, 0x00004735u, 0x000200f8u, 0x00004735u, 0x000300f7u, 0x000048e5u, 0x00000000u, 0x000700fbu, 0x000044c9u, 0x000048e6u, 0x00000000u, 0x000048e7u, 0x00000001u, 0x000048e8u, 0x000200f8u, 0x000048e8u, 0x0004007cu, 0x000000a2u, 0x0000492au, 0x0000951eu, 0x0003003eu, 0x00006a84u, 0x000044bcu, 0x0003003eu, 0x00006a85u, 0x000044bfu, 0x0003003eu, 0x000045feu, 0x000020f8u, 0x0003003eu, 0x000045ffu, 0x0000492au, 0x00050041u, 0x00000007u, 0x00005accu, 0x000045ffu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005acdu, 0x00005accu, 0x00050084u, 0x00000006u, 0x00005aceu, 0x000044bfu, 0x00005acdu, 0x00050080u, 0x00000006u, 0x00005acfu, 0x000044bcu, 0x00005aceu, 0x0003003eu, 0x00005ac4u, 0x00005acfu, 0x00050041u, 0x00000007u, 0x00005ad0u, 0x000045ffu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005ad1u, 0x00005ad0u, 0x00050080u, 0x00000006u, 0x00005ad3u, 0x00005acfu, 0x00005ad1u, 0x0003003eu, 0x00005ac4u, 0x00005ad3u, 0x000500c7u, 0x00000006u, 0x00005ad5u, 0x00005ad3u, 0x00000e59u, 0x0003003eu, 0x00005ac4u, 0x00005ad5u, 0x0003003eu, 0x00005ac5u, 0x00005ad5u, 0x0004003du, 0x00000006u, 0x00005ad8u, 0x00005accu, 0x000500c7u, 0x00000006u, 0x00005ad9u, 0x00005ad8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005adau, 0x00005ad9u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005adcu, 0x00005ad5u, 0x00005adau, 0x0003003eu, 0x00005ac5u, 0x00005adcu, 0x000500c6u, 0x00000006u, 0x00005adeu, 0x00005adcu, 0x0000048bu, 0x0003003eu, 0x00005ac5u, 0x00005adeu, 0x00080041u, 0x00000277u, 0x00005ae1u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005adeu, 0x0004003du, 0x00000229u, 0x00005ae2u, 0x00005ae1u, 0x00040071u, 0x00000006u, 0x00005ae3u, 0x00005ae2u, 0x0003003eu, 0x00005ac6u, 0x00005ae3u, 0x0004007cu, 0x00000008u, 0x00005ae5u, 0x00005ae3u, 0x00070050u, 0x00000009u, 0x00005ae6u, 0x00005ae5u, 0x00005ae5u, 0x00005ae5u, 0x00005ae5u, 0x0003003eu, 0x00005ac7u, 0x00005ae6u, 0x0003003eu, 0x00004507u, 0x00005ae6u, 0x000300f7u, 0x0000492fu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004930u, 0x0000492fu, 0x000200f8u, 0x00004930u, 0x00050050u, 0x0000005fu, 0x00004933u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004934u, 0x00004933u, 0x0003003eu, 0x00006a88u, 0x000044bcu, 0x0003003eu, 0x00006a89u, 0x000044bfu, 0x0003003eu, 0x00004601u, 0x000020f8u, 0x0003003eu, 0x00004602u, 0x00004934u, 0x00050041u, 0x00000007u, 0x00005aefu, 0x00004602u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005af0u, 0x00005aefu, 0x00050084u, 0x00000006u, 0x00005af1u, 0x000044bfu, 0x00005af0u, 0x00050080u, 0x00000006u, 0x00005af2u, 0x000044bcu, 0x00005af1u, 0x0003003eu, 0x00005ae7u, 0x00005af2u, 0x00050041u, 0x00000007u, 0x00005af3u, 0x00004602u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005af4u, 0x00005af3u, 0x00050080u, 0x00000006u, 0x00005af6u, 0x00005af2u, 0x00005af4u, 0x0003003eu, 0x00005ae7u, 0x00005af6u, 0x000500c7u, 0x00000006u, 0x00005af8u, 0x00005af6u, 0x00000e59u, 0x0003003eu, 0x00005ae7u, 0x00005af8u, 0x0003003eu, 0x00005ae8u, 0x00005af8u, 0x0004003du, 0x00000006u, 0x00005afbu, 0x00005aefu, 0x000500c7u, 0x00000006u, 0x00005afcu, 0x00005afbu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005afdu, 0x00005afcu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005affu, 0x00005af8u, 0x00005afdu, 0x0003003eu, 0x00005ae8u, 0x00005affu, 0x000500c6u, 0x00000006u, 0x00005b01u, 0x00005affu, 0x0000048bu, 0x0003003eu, 0x00005ae8u, 0x00005b01u, 0x00080041u, 0x00000277u, 0x00005b04u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005b01u, 0x0004003du, 0x00000229u, 0x00005b05u, 0x00005b04u, 0x00040071u, 0x00000006u, 0x00005b06u, 0x00005b05u, 0x0003003eu, 0x00005ae9u, 0x00005b06u, 0x0004007cu, 0x00000008u, 0x00005b08u, 0x00005b06u, 0x00070050u, 0x00000009u, 0x00005b09u, 0x00005b08u, 0x00005b08u, 0x00005b08u, 0x00005b08u, 0x0003003eu, 0x00005aeau, 0x00005b09u, 0x0003003eu, 0x0000450fu, 0x00005b09u, 0x00050050u, 0x0000005fu, 0x0000493au, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000493bu, 0x0000493au, 0x0003003eu, 0x00006a8cu, 0x000044bcu, 0x0003003eu, 0x00006a8du, 0x000044bfu, 0x0003003eu, 0x00004604u, 0x000020f8u, 0x0003003eu, 0x00004605u, 0x0000493bu, 0x00050041u, 0x00000007u, 0x00005b12u, 0x00004605u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005b13u, 0x00005b12u, 0x00050084u, 0x00000006u, 0x00005b14u, 0x000044bfu, 0x00005b13u, 0x00050080u, 0x00000006u, 0x00005b15u, 0x000044bcu, 0x00005b14u, 0x0003003eu, 0x00005b0au, 0x00005b15u, 0x00050041u, 0x00000007u, 0x00005b16u, 0x00004605u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005b17u, 0x00005b16u, 0x00050080u, 0x00000006u, 0x00005b19u, 0x00005b15u, 0x00005b17u, 0x0003003eu, 0x00005b0au, 0x00005b19u, 0x000500c7u, 0x00000006u, 0x00005b1bu, 0x00005b19u, 0x00000e59u, 0x0003003eu, 0x00005b0au, 0x00005b1bu, 0x0003003eu, 0x00005b0bu, 0x00005b1bu, 0x0004003du, 0x00000006u, 0x00005b1eu, 0x00005b12u, 0x000500c7u, 0x00000006u, 0x00005b1fu, 0x00005b1eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005b20u, 0x00005b1fu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005b22u, 0x00005b1bu, 0x00005b20u, 0x0003003eu, 0x00005b0bu, 0x00005b22u, 0x000500c6u, 0x00000006u, 0x00005b24u, 0x00005b22u, 0x0000048bu, 0x0003003eu, 0x00005b0bu, 0x00005b24u, 0x00080041u, 0x00000277u, 0x00005b27u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005b24u, 0x0004003du, 0x00000229u, 0x00005b28u, 0x00005b27u, 0x00040071u, 0x00000006u, 0x00005b29u, 0x00005b28u, 0x0003003eu, 0x00005b0cu, 0x00005b29u, 0x0004007cu, 0x00000008u, 0x00005b2bu, 0x00005b29u, 0x00070050u, 0x00000009u, 0x00005b2cu, 0x00005b2bu, 0x00005b2bu, 0x00005b2bu, 0x00005b2bu, 0x0003003eu, 0x00005b0du, 0x00005b2cu, 0x0003003eu, 0x00004517u, 0x00005b2cu, 0x000200f9u, 0x0000492fu, 0x000200f8u, 0x0000492fu, 0x000700f5u, 0x00000009u, 0x00009b3fu, 0x00009a79u, 0x000048e8u, 0x00005b2cu, 0x00004930u, 0x000700f5u, 0x00000009u, 0x00009973u, 0x000098aau, 0x000048e8u, 0x00005b09u, 0x00004930u, 0x000300f7u, 0x00004940u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004941u, 0x00004940u, 0x000200f8u, 0x00004941u, 0x00050050u, 0x0000005fu, 0x00004944u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004945u, 0x00004944u, 0x0003003eu, 0x00006a90u, 0x000044bcu, 0x0003003eu, 0x00006a91u, 0x000044bfu, 0x0003003eu, 0x00004607u, 0x000020f8u, 0x0003003eu, 0x00004608u, 0x00004945u, 0x00050041u, 0x00000007u, 0x00005b35u, 0x00004608u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005b36u, 0x00005b35u, 0x00050084u, 0x00000006u, 0x00005b37u, 0x000044bfu, 0x00005b36u, 0x00050080u, 0x00000006u, 0x00005b38u, 0x000044bcu, 0x00005b37u, 0x0003003eu, 0x00005b2du, 0x00005b38u, 0x00050041u, 0x00000007u, 0x00005b39u, 0x00004608u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005b3au, 0x00005b39u, 0x00050080u, 0x00000006u, 0x00005b3cu, 0x00005b38u, 0x00005b3au, 0x0003003eu, 0x00005b2du, 0x00005b3cu, 0x000500c7u, 0x00000006u, 0x00005b3eu, 0x00005b3cu, 0x00000e59u, 0x0003003eu, 0x00005b2du, 0x00005b3eu, 0x0003003eu, 0x00005b2eu, 0x00005b3eu, 0x0004003du, 0x00000006u, 0x00005b41u, 0x00005b35u, 0x000500c7u, 0x00000006u, 0x00005b42u, 0x00005b41u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005b43u, 0x00005b42u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005b45u, 0x00005b3eu, 0x00005b43u, 0x0003003eu, 0x00005b2eu, 0x00005b45u, 0x000500c6u, 0x00000006u, 0x00005b47u, 0x00005b45u, 0x0000048bu, 0x0003003eu, 0x00005b2eu, 0x00005b47u, 0x00080041u, 0x00000277u, 0x00005b4au, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005b47u, 0x0004003du, 0x00000229u, 0x00005b4bu, 0x00005b4au, 0x00040071u, 0x00000006u, 0x00005b4cu, 0x00005b4bu, 0x0003003eu, 0x00005b2fu, 0x00005b4cu, 0x0004007cu, 0x00000008u, 0x00005b4eu, 0x00005b4cu, 0x00070050u, 0x00000009u, 0x00005b4fu, 0x00005b4eu, 0x00005b4eu, 0x00005b4eu, 0x00005b4eu, 0x0003003eu, 0x00005b30u, 0x00005b4fu, 0x0003003eu, 0x0000451fu, 0x00005b4fu, 0x000200f9u, 0x00004940u, 0x000200f8u, 0x00004940u, 0x000700f5u, 0x00000009u, 0x00009c25u, 0x00009b5du, 0x0000492fu, 0x00005b4fu, 0x00004941u, 0x000200f9u, 0x000048e5u, 0x000200f8u, 0x000048e7u, 0x0004007cu, 0x000000a2u, 0x0000490au, 0x0000951eu, 0x0003003eu, 0x00006a74u, 0x000044bcu, 0x0003003eu, 0x00006a75u, 0x000044bfu, 0x0003003eu, 0x000045f2u, 0x000020f8u, 0x0003003eu, 0x000045f3u, 0x0000490au, 0x00050041u, 0x00000007u, 0x00005a05u, 0x000045f3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a06u, 0x00005a05u, 0x00050084u, 0x00000006u, 0x00005a07u, 0x000044bfu, 0x00005a06u, 0x00050080u, 0x00000006u, 0x00005a08u, 0x000044bcu, 0x00005a07u, 0x0003003eu, 0x000059fcu, 0x00005a08u, 0x00050041u, 0x00000007u, 0x00005a09u, 0x000045f3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005a0au, 0x00005a09u, 0x000500c2u, 0x00000006u, 0x00005a0bu, 0x00005a0au, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005a0du, 0x00005a08u, 0x00005a0bu, 0x0003003eu, 0x000059fcu, 0x00005a0du, 0x000500c7u, 0x00000006u, 0x00005a0fu, 0x00005a0du, 0x00000e59u, 0x0003003eu, 0x000059fcu, 0x00005a0fu, 0x0004003du, 0x00000006u, 0x00005a11u, 0x00005a09u, 0x000400c8u, 0x00000006u, 0x00005a12u, 0x00005a11u, 0x000500c7u, 0x00000006u, 0x00005a13u, 0x00005a12u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a14u, 0x00005a13u, 0x00000701u, 0x0003003eu, 0x000059fdu, 0x00005a14u, 0x0003003eu, 0x000059feu, 0x00005a0fu, 0x0004003du, 0x00000006u, 0x00005a17u, 0x00005a05u, 0x000500c7u, 0x00000006u, 0x00005a18u, 0x00005a17u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005a19u, 0x00005a18u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005a1bu, 0x00005a0fu, 0x00005a19u, 0x0003003eu, 0x000059feu, 0x00005a1bu, 0x000500c6u, 0x00000006u, 0x00005a1du, 0x00005a1bu, 0x0000048bu, 0x0003003eu, 0x000059feu, 0x00005a1du, 0x00080041u, 0x00000277u, 0x00005a20u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005a1du, 0x0004003du, 0x00000229u, 0x00005a21u, 0x00005a20u, 0x00040071u, 0x00000006u, 0x00005a22u, 0x00005a21u, 0x0003003eu, 0x000059ffu, 0x00005a22u, 0x000500c2u, 0x00000006u, 0x00005a25u, 0x00005a22u, 0x00005a14u, 0x000500c7u, 0x00000006u, 0x00005a26u, 0x00005a25u, 0x00000e7cu, 0x0003003eu, 0x000059ffu, 0x00005a26u, 0x000500c4u, 0x00000006u, 0x00005a28u, 0x00005a26u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005a2au, 0x00005a26u, 0x00005a28u, 0x0003003eu, 0x000059ffu, 0x00005a2au, 0x0004007cu, 0x00000008u, 0x00005a2cu, 0x00005a2au, 0x00070050u, 0x00000009u, 0x00005a2du, 0x00005a2cu, 0x00005a2cu, 0x00005a2cu, 0x00005a2cu, 0x0003003eu, 0x00005a00u, 0x00005a2du, 0x0003003eu, 0x00004507u, 0x00005a2du, 0x000300f7u, 0x0000490fu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004910u, 0x0000490fu, 0x000200f8u, 0x00004910u, 0x00050050u, 0x0000005fu, 0x00004913u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004914u, 0x00004913u, 0x0003003eu, 0x00006a78u, 0x000044bcu, 0x0003003eu, 0x00006a79u, 0x000044bfu, 0x0003003eu, 0x000045f5u, 0x000020f8u, 0x0003003eu, 0x000045f6u, 0x00004914u, 0x00050041u, 0x00000007u, 0x00005a37u, 0x000045f6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a38u, 0x00005a37u, 0x00050084u, 0x00000006u, 0x00005a39u, 0x000044bfu, 0x00005a38u, 0x00050080u, 0x00000006u, 0x00005a3au, 0x000044bcu, 0x00005a39u, 0x0003003eu, 0x00005a2eu, 0x00005a3au, 0x00050041u, 0x00000007u, 0x00005a3bu, 0x000045f6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005a3cu, 0x00005a3bu, 0x000500c2u, 0x00000006u, 0x00005a3du, 0x00005a3cu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005a3fu, 0x00005a3au, 0x00005a3du, 0x0003003eu, 0x00005a2eu, 0x00005a3fu, 0x000500c7u, 0x00000006u, 0x00005a41u, 0x00005a3fu, 0x00000e59u, 0x0003003eu, 0x00005a2eu, 0x00005a41u, 0x0004003du, 0x00000006u, 0x00005a43u, 0x00005a3bu, 0x000400c8u, 0x00000006u, 0x00005a44u, 0x00005a43u, 0x000500c7u, 0x00000006u, 0x00005a45u, 0x00005a44u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a46u, 0x00005a45u, 0x00000701u, 0x0003003eu, 0x00005a2fu, 0x00005a46u, 0x0003003eu, 0x00005a30u, 0x00005a41u, 0x0004003du, 0x00000006u, 0x00005a49u, 0x00005a37u, 0x000500c7u, 0x00000006u, 0x00005a4au, 0x00005a49u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005a4bu, 0x00005a4au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005a4du, 0x00005a41u, 0x00005a4bu, 0x0003003eu, 0x00005a30u, 0x00005a4du, 0x000500c6u, 0x00000006u, 0x00005a4fu, 0x00005a4du, 0x0000048bu, 0x0003003eu, 0x00005a30u, 0x00005a4fu, 0x00080041u, 0x00000277u, 0x00005a52u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005a4fu, 0x0004003du, 0x00000229u, 0x00005a53u, 0x00005a52u, 0x00040071u, 0x00000006u, 0x00005a54u, 0x00005a53u, 0x0003003eu, 0x00005a31u, 0x00005a54u, 0x000500c2u, 0x00000006u, 0x00005a57u, 0x00005a54u, 0x00005a46u, 0x000500c7u, 0x00000006u, 0x00005a58u, 0x00005a57u, 0x00000e7cu, 0x0003003eu, 0x00005a31u, 0x00005a58u, 0x000500c4u, 0x00000006u, 0x00005a5au, 0x00005a58u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005a5cu, 0x00005a58u, 0x00005a5au, 0x0003003eu, 0x00005a31u, 0x00005a5cu, 0x0004007cu, 0x00000008u, 0x00005a5eu, 0x00005a5cu, 0x00070050u, 0x00000009u, 0x00005a5fu, 0x00005a5eu, 0x00005a5eu, 0x00005a5eu, 0x00005a5eu, 0x0003003eu, 0x00005a32u, 0x00005a5fu, 0x0003003eu, 0x0000450fu, 0x00005a5fu, 0x00050050u, 0x0000005fu, 0x0000491au, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000491bu, 0x0000491au, 0x0003003eu, 0x00006a7cu, 0x000044bcu, 0x0003003eu, 0x00006a7du, 0x000044bfu, 0x0003003eu, 0x000045f8u, 0x000020f8u, 0x0003003eu, 0x000045f9u, 0x0000491bu, 0x00050041u, 0x00000007u, 0x00005a69u, 0x000045f9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a6au, 0x00005a69u, 0x00050084u, 0x00000006u, 0x00005a6bu, 0x000044bfu, 0x00005a6au, 0x00050080u, 0x00000006u, 0x00005a6cu, 0x000044bcu, 0x00005a6bu, 0x0003003eu, 0x00005a60u, 0x00005a6cu, 0x00050041u, 0x00000007u, 0x00005a6du, 0x000045f9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005a6eu, 0x00005a6du, 0x000500c2u, 0x00000006u, 0x00005a6fu, 0x00005a6eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005a71u, 0x00005a6cu, 0x00005a6fu, 0x0003003eu, 0x00005a60u, 0x00005a71u, 0x000500c7u, 0x00000006u, 0x00005a73u, 0x00005a71u, 0x00000e59u, 0x0003003eu, 0x00005a60u, 0x00005a73u, 0x0004003du, 0x00000006u, 0x00005a75u, 0x00005a6du, 0x000400c8u, 0x00000006u, 0x00005a76u, 0x00005a75u, 0x000500c7u, 0x00000006u, 0x00005a77u, 0x00005a76u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005a78u, 0x00005a77u, 0x00000701u, 0x0003003eu, 0x00005a61u, 0x00005a78u, 0x0003003eu, 0x00005a62u, 0x00005a73u, 0x0004003du, 0x00000006u, 0x00005a7bu, 0x00005a69u, 0x000500c7u, 0x00000006u, 0x00005a7cu, 0x00005a7bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005a7du, 0x00005a7cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005a7fu, 0x00005a73u, 0x00005a7du, 0x0003003eu, 0x00005a62u, 0x00005a7fu, 0x000500c6u, 0x00000006u, 0x00005a81u, 0x00005a7fu, 0x0000048bu, 0x0003003eu, 0x00005a62u, 0x00005a81u, 0x00080041u, 0x00000277u, 0x00005a84u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005a81u, 0x0004003du, 0x00000229u, 0x00005a85u, 0x00005a84u, 0x00040071u, 0x00000006u, 0x00005a86u, 0x00005a85u, 0x0003003eu, 0x00005a63u, 0x00005a86u, 0x000500c2u, 0x00000006u, 0x00005a89u, 0x00005a86u, 0x00005a78u, 0x000500c7u, 0x00000006u, 0x00005a8au, 0x00005a89u, 0x00000e7cu, 0x0003003eu, 0x00005a63u, 0x00005a8au, 0x000500c4u, 0x00000006u, 0x00005a8cu, 0x00005a8au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005a8eu, 0x00005a8au, 0x00005a8cu, 0x0003003eu, 0x00005a63u, 0x00005a8eu, 0x0004007cu, 0x00000008u, 0x00005a90u, 0x00005a8eu, 0x00070050u, 0x00000009u, 0x00005a91u, 0x00005a90u, 0x00005a90u, 0x00005a90u, 0x00005a90u, 0x0003003eu, 0x00005a64u, 0x00005a91u, 0x0003003eu, 0x00004517u, 0x00005a91u, 0x000200f9u, 0x0000490fu, 0x000200f8u, 0x0000490fu, 0x000700f5u, 0x00000009u, 0x00009b3du, 0x00009a79u, 0x000048e7u, 0x00005a91u, 0x00004910u, 0x000700f5u, 0x00000009u, 0x00009971u, 0x000098aau, 0x000048e7u, 0x00005a5fu, 0x00004910u, 0x000300f7u, 0x00004920u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004921u, 0x00004920u, 0x000200f8u, 0x00004921u, 0x00050050u, 0x0000005fu, 0x00004924u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004925u, 0x00004924u, 0x0003003eu, 0x00006a80u, 0x000044bcu, 0x0003003eu, 0x00006a81u, 0x000044bfu, 0x0003003eu, 0x000045fbu, 0x000020f8u, 0x0003003eu, 0x000045fcu, 0x00004925u, 0x00050041u, 0x00000007u, 0x00005a9bu, 0x000045fcu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005a9cu, 0x00005a9bu, 0x00050084u, 0x00000006u, 0x00005a9du, 0x000044bfu, 0x00005a9cu, 0x00050080u, 0x00000006u, 0x00005a9eu, 0x000044bcu, 0x00005a9du, 0x0003003eu, 0x00005a92u, 0x00005a9eu, 0x00050041u, 0x00000007u, 0x00005a9fu, 0x000045fcu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005aa0u, 0x00005a9fu, 0x000500c2u, 0x00000006u, 0x00005aa1u, 0x00005aa0u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005aa3u, 0x00005a9eu, 0x00005aa1u, 0x0003003eu, 0x00005a92u, 0x00005aa3u, 0x000500c7u, 0x00000006u, 0x00005aa5u, 0x00005aa3u, 0x00000e59u, 0x0003003eu, 0x00005a92u, 0x00005aa5u, 0x0004003du, 0x00000006u, 0x00005aa7u, 0x00005a9fu, 0x000400c8u, 0x00000006u, 0x00005aa8u, 0x00005aa7u, 0x000500c7u, 0x00000006u, 0x00005aa9u, 0x00005aa8u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005aaau, 0x00005aa9u, 0x00000701u, 0x0003003eu, 0x00005a93u, 0x00005aaau, 0x0003003eu, 0x00005a94u, 0x00005aa5u, 0x0004003du, 0x00000006u, 0x00005aadu, 0x00005a9bu, 0x000500c7u, 0x00000006u, 0x00005aaeu, 0x00005aadu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005aafu, 0x00005aaeu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005ab1u, 0x00005aa5u, 0x00005aafu, 0x0003003eu, 0x00005a94u, 0x00005ab1u, 0x000500c6u, 0x00000006u, 0x00005ab3u, 0x00005ab1u, 0x0000048bu, 0x0003003eu, 0x00005a94u, 0x00005ab3u, 0x00080041u, 0x00000277u, 0x00005ab6u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005ab3u, 0x0004003du, 0x00000229u, 0x00005ab7u, 0x00005ab6u, 0x00040071u, 0x00000006u, 0x00005ab8u, 0x00005ab7u, 0x0003003eu, 0x00005a95u, 0x00005ab8u, 0x000500c2u, 0x00000006u, 0x00005abbu, 0x00005ab8u, 0x00005aaau, 0x000500c7u, 0x00000006u, 0x00005abcu, 0x00005abbu, 0x00000e7cu, 0x0003003eu, 0x00005a95u, 0x00005abcu, 0x000500c4u, 0x00000006u, 0x00005abeu, 0x00005abcu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005ac0u, 0x00005abcu, 0x00005abeu, 0x0003003eu, 0x00005a95u, 0x00005ac0u, 0x0004007cu, 0x00000008u, 0x00005ac2u, 0x00005ac0u, 0x00070050u, 0x00000009u, 0x00005ac3u, 0x00005ac2u, 0x00005ac2u, 0x00005ac2u, 0x00005ac2u, 0x0003003eu, 0x00005a96u, 0x00005ac3u, 0x0003003eu, 0x0000451fu, 0x00005ac3u, 0x000200f9u, 0x00004920u, 0x000200f8u, 0x00004920u, 0x000700f5u, 0x00000009u, 0x00009c23u, 0x00009b5du, 0x0000490fu, 0x00005ac3u, 0x00004921u, 0x000200f9u, 0x000048e5u, 0x000200f8u, 0x000048e6u, 0x0004007cu, 0x000000a2u, 0x000048eau, 0x0000951eu, 0x0003003eu, 0x00006a94u, 0x000044bcu, 0x0003003eu, 0x00006a95u, 0x000044bfu, 0x0003003eu, 0x0000460au, 0x000020f8u, 0x0003003eu, 0x0000460bu, 0x000048eau, 0x00050041u, 0x00000007u, 0x0000595cu, 0x0000460bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000595du, 0x0000595cu, 0x00050084u, 0x00000006u, 0x0000595eu, 0x000044bfu, 0x0000595du, 0x00050080u, 0x00000006u, 0x0000595fu, 0x000044bcu, 0x0000595eu, 0x0003003eu, 0x00005954u, 0x0000595fu, 0x00050041u, 0x00000007u, 0x00005960u, 0x0000460bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005961u, 0x00005960u, 0x00050084u, 0x00000006u, 0x00005962u, 0x00005961u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005964u, 0x0000595fu, 0x00005962u, 0x0003003eu, 0x00005954u, 0x00005964u, 0x000500c7u, 0x00000006u, 0x00005966u, 0x00005964u, 0x00000e59u, 0x0003003eu, 0x00005954u, 0x00005966u, 0x000500c2u, 0x00000006u, 0x00005968u, 0x00005966u, 0x00000212u, 0x0003003eu, 0x00005955u, 0x00005968u, 0x0004003du, 0x00000006u, 0x0000596au, 0x0000595cu, 0x000500c7u, 0x00000006u, 0x0000596bu, 0x0000596au, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000596cu, 0x0000596bu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000596eu, 0x00005968u, 0x0000596cu, 0x0003003eu, 0x00005955u, 0x0000596eu, 0x000500c6u, 0x00000006u, 0x00005970u, 0x0000596eu, 0x00000485u, 0x0003003eu, 0x00005955u, 0x00005970u, 0x00080041u, 0x00000270u, 0x00005973u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005970u, 0x0004003du, 0x0000022bu, 0x00005974u, 0x00005973u, 0x00040071u, 0x00000006u, 0x00005975u, 0x00005974u, 0x0003003eu, 0x00005956u, 0x00005975u, 0x000500c2u, 0x00000006u, 0x00005977u, 0x00005975u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005978u, 0x00005977u, 0x000500c7u, 0x00000006u, 0x0000597au, 0x00005975u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000597bu, 0x0000597au, 0x00050050u, 0x0000005fu, 0x0000597cu, 0x00005978u, 0x0000597bu, 0x0009004fu, 0x00000009u, 0x0000597du, 0x0000597cu, 0x0000597cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005957u, 0x0000597du, 0x0003003eu, 0x00004507u, 0x0000597du, 0x000300f7u, 0x000048efu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000048f0u, 0x000048efu, 0x000200f8u, 0x000048f0u, 0x00050050u, 0x0000005fu, 0x000048f3u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000048f4u, 0x000048f3u, 0x0003003eu, 0x00006a98u, 0x000044bcu, 0x0003003eu, 0x00006a99u, 0x000044bfu, 0x0003003eu, 0x0000460du, 0x000020f8u, 0x0003003eu, 0x0000460eu, 0x000048f4u, 0x00050041u, 0x00000007u, 0x00005986u, 0x0000460eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005987u, 0x00005986u, 0x00050084u, 0x00000006u, 0x00005988u, 0x000044bfu, 0x00005987u, 0x00050080u, 0x00000006u, 0x00005989u, 0x000044bcu, 0x00005988u, 0x0003003eu, 0x0000597eu, 0x00005989u, 0x00050041u, 0x00000007u, 0x0000598au, 0x0000460eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000598bu, 0x0000598au, 0x00050084u, 0x00000006u, 0x0000598cu, 0x0000598bu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000598eu, 0x00005989u, 0x0000598cu, 0x0003003eu, 0x0000597eu, 0x0000598eu, 0x000500c7u, 0x00000006u, 0x00005990u, 0x0000598eu, 0x00000e59u, 0x0003003eu, 0x0000597eu, 0x00005990u, 0x000500c2u, 0x00000006u, 0x00005992u, 0x00005990u, 0x00000212u, 0x0003003eu, 0x0000597fu, 0x00005992u, 0x0004003du, 0x00000006u, 0x00005994u, 0x00005986u, 0x000500c7u, 0x00000006u, 0x00005995u, 0x00005994u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005996u, 0x00005995u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005998u, 0x00005992u, 0x00005996u, 0x0003003eu, 0x0000597fu, 0x00005998u, 0x000500c6u, 0x00000006u, 0x0000599au, 0x00005998u, 0x00000485u, 0x0003003eu, 0x0000597fu, 0x0000599au, 0x00080041u, 0x00000270u, 0x0000599du, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000599au, 0x0004003du, 0x0000022bu, 0x0000599eu, 0x0000599du, 0x00040071u, 0x00000006u, 0x0000599fu, 0x0000599eu, 0x0003003eu, 0x00005980u, 0x0000599fu, 0x000500c2u, 0x00000006u, 0x000059a1u, 0x0000599fu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000059a2u, 0x000059a1u, 0x000500c7u, 0x00000006u, 0x000059a4u, 0x0000599fu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000059a5u, 0x000059a4u, 0x00050050u, 0x0000005fu, 0x000059a6u, 0x000059a2u, 0x000059a5u, 0x0009004fu, 0x00000009u, 0x000059a7u, 0x000059a6u, 0x000059a6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005981u, 0x000059a7u, 0x0003003eu, 0x0000450fu, 0x000059a7u, 0x00050050u, 0x0000005fu, 0x000048fau, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000048fbu, 0x000048fau, 0x0003003eu, 0x00006a9cu, 0x000044bcu, 0x0003003eu, 0x00006a9du, 0x000044bfu, 0x0003003eu, 0x00004610u, 0x000020f8u, 0x0003003eu, 0x00004611u, 0x000048fbu, 0x00050041u, 0x00000007u, 0x000059b0u, 0x00004611u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000059b1u, 0x000059b0u, 0x00050084u, 0x00000006u, 0x000059b2u, 0x000044bfu, 0x000059b1u, 0x00050080u, 0x00000006u, 0x000059b3u, 0x000044bcu, 0x000059b2u, 0x0003003eu, 0x000059a8u, 0x000059b3u, 0x00050041u, 0x00000007u, 0x000059b4u, 0x00004611u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000059b5u, 0x000059b4u, 0x00050084u, 0x00000006u, 0x000059b6u, 0x000059b5u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000059b8u, 0x000059b3u, 0x000059b6u, 0x0003003eu, 0x000059a8u, 0x000059b8u, 0x000500c7u, 0x00000006u, 0x000059bau, 0x000059b8u, 0x00000e59u, 0x0003003eu, 0x000059a8u, 0x000059bau, 0x000500c2u, 0x00000006u, 0x000059bcu, 0x000059bau, 0x00000212u, 0x0003003eu, 0x000059a9u, 0x000059bcu, 0x0004003du, 0x00000006u, 0x000059beu, 0x000059b0u, 0x000500c7u, 0x00000006u, 0x000059bfu, 0x000059beu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000059c0u, 0x000059bfu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000059c2u, 0x000059bcu, 0x000059c0u, 0x0003003eu, 0x000059a9u, 0x000059c2u, 0x000500c6u, 0x00000006u, 0x000059c4u, 0x000059c2u, 0x00000485u, 0x0003003eu, 0x000059a9u, 0x000059c4u, 0x00080041u, 0x00000270u, 0x000059c7u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000059c4u, 0x0004003du, 0x0000022bu, 0x000059c8u, 0x000059c7u, 0x00040071u, 0x00000006u, 0x000059c9u, 0x000059c8u, 0x0003003eu, 0x000059aau, 0x000059c9u, 0x000500c2u, 0x00000006u, 0x000059cbu, 0x000059c9u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000059ccu, 0x000059cbu, 0x000500c7u, 0x00000006u, 0x000059ceu, 0x000059c9u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000059cfu, 0x000059ceu, 0x00050050u, 0x0000005fu, 0x000059d0u, 0x000059ccu, 0x000059cfu, 0x0009004fu, 0x00000009u, 0x000059d1u, 0x000059d0u, 0x000059d0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000059abu, 0x000059d1u, 0x0003003eu, 0x00004517u, 0x000059d1u, 0x000200f9u, 0x000048efu, 0x000200f8u, 0x000048efu, 0x000700f5u, 0x00000009u, 0x00009b3bu, 0x00009a79u, 0x000048e6u, 0x000059d1u, 0x000048f0u, 0x000700f5u, 0x00000009u, 0x0000996fu, 0x000098aau, 0x000048e6u, 0x000059a7u, 0x000048f0u, 0x000300f7u, 0x00004900u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004901u, 0x00004900u, 0x000200f8u, 0x00004901u, 0x00050050u, 0x0000005fu, 0x00004904u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004905u, 0x00004904u, 0x0003003eu, 0x00006aa0u, 0x000044bcu, 0x0003003eu, 0x00006aa1u, 0x000044bfu, 0x0003003eu, 0x00004613u, 0x000020f8u, 0x0003003eu, 0x00004614u, 0x00004905u, 0x00050041u, 0x00000007u, 0x000059dau, 0x00004614u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000059dbu, 0x000059dau, 0x00050084u, 0x00000006u, 0x000059dcu, 0x000044bfu, 0x000059dbu, 0x00050080u, 0x00000006u, 0x000059ddu, 0x000044bcu, 0x000059dcu, 0x0003003eu, 0x000059d2u, 0x000059ddu, 0x00050041u, 0x00000007u, 0x000059deu, 0x00004614u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000059dfu, 0x000059deu, 0x00050084u, 0x00000006u, 0x000059e0u, 0x000059dfu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000059e2u, 0x000059ddu, 0x000059e0u, 0x0003003eu, 0x000059d2u, 0x000059e2u, 0x000500c7u, 0x00000006u, 0x000059e4u, 0x000059e2u, 0x00000e59u, 0x0003003eu, 0x000059d2u, 0x000059e4u, 0x000500c2u, 0x00000006u, 0x000059e6u, 0x000059e4u, 0x00000212u, 0x0003003eu, 0x000059d3u, 0x000059e6u, 0x0004003du, 0x00000006u, 0x000059e8u, 0x000059dau, 0x000500c7u, 0x00000006u, 0x000059e9u, 0x000059e8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000059eau, 0x000059e9u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000059ecu, 0x000059e6u, 0x000059eau, 0x0003003eu, 0x000059d3u, 0x000059ecu, 0x000500c6u, 0x00000006u, 0x000059eeu, 0x000059ecu, 0x00000485u, 0x0003003eu, 0x000059d3u, 0x000059eeu, 0x00080041u, 0x00000270u, 0x000059f1u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000059eeu, 0x0004003du, 0x0000022bu, 0x000059f2u, 0x000059f1u, 0x00040071u, 0x00000006u, 0x000059f3u, 0x000059f2u, 0x0003003eu, 0x000059d4u, 0x000059f3u, 0x000500c2u, 0x00000006u, 0x000059f5u, 0x000059f3u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000059f6u, 0x000059f5u, 0x000500c7u, 0x00000006u, 0x000059f8u, 0x000059f3u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000059f9u, 0x000059f8u, 0x00050050u, 0x0000005fu, 0x000059fau, 0x000059f6u, 0x000059f9u, 0x0009004fu, 0x00000009u, 0x000059fbu, 0x000059fau, 0x000059fau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000059d5u, 0x000059fbu, 0x0003003eu, 0x0000451fu, 0x000059fbu, 0x000200f9u, 0x00004900u, 0x000200f8u, 0x00004900u, 0x000700f5u, 0x00000009u, 0x00009c21u, 0x00009b5du, 0x000048efu, 0x000059fbu, 0x00004901u, 0x000200f9u, 0x000048e5u, 0x000200f8u, 0x000048e5u, 0x000900f5u, 0x00000009u, 0x00009c20u, 0x00009c21u, 0x00004900u, 0x00009c23u, 0x00004920u, 0x00009c25u, 0x00004940u, 0x000900f5u, 0x00000009u, 0x00009b39u, 0x00009b3bu, 0x00004900u, 0x00009b3du, 0x00004920u, 0x00009b3fu, 0x00004940u, 0x000900f5u, 0x00000009u, 0x00009a54u, 0x0000597du, 0x00004900u, 0x00005a2du, 0x00004920u, 0x00005ae6u, 0x00004940u, 0x000900f5u, 0x00000009u, 0x0000996du, 0x0000996fu, 0x00004900u, 0x00009971u, 0x00004920u, 0x00009973u, 0x00004940u, 0x000200f9u, 0x00004730u, 0x000200f8u, 0x00004734u, 0x000300f7u, 0x0000485eu, 0x00000000u, 0x000b00fbu, 0x000044c9u, 0x0000485eu, 0x00000000u, 0x0000485fu, 0x00000001u, 0x00004860u, 0x00000002u, 0x00004861u, 0x00000003u, 0x00004862u, 0x000200f8u, 0x00004862u, 0x0004007cu, 0x000000a2u, 0x000048c4u, 0x0000951eu, 0x0003003eu, 0x00006a64u, 0x000044bcu, 0x0003003eu, 0x00006a65u, 0x000044bfu, 0x0003003eu, 0x000045e6u, 0x000020f8u, 0x0003003eu, 0x000045e7u, 0x000048c4u, 0x00050041u, 0x00000007u, 0x000058b4u, 0x000045e7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000058b5u, 0x000058b4u, 0x00050084u, 0x00000006u, 0x000058b6u, 0x000044bfu, 0x000058b5u, 0x00050080u, 0x00000006u, 0x000058b7u, 0x000044bcu, 0x000058b6u, 0x0003003eu, 0x000058acu, 0x000058b7u, 0x00050041u, 0x00000007u, 0x000058b8u, 0x000045e7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000058b9u, 0x000058b8u, 0x00050084u, 0x00000006u, 0x000058bau, 0x000058b9u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000058bcu, 0x000058b7u, 0x000058bau, 0x0003003eu, 0x000058acu, 0x000058bcu, 0x000500c7u, 0x00000006u, 0x000058beu, 0x000058bcu, 0x00000e59u, 0x0003003eu, 0x000058acu, 0x000058beu, 0x000500c2u, 0x00000006u, 0x000058c0u, 0x000058beu, 0x00000212u, 0x0003003eu, 0x000058adu, 0x000058c0u, 0x0004003du, 0x00000006u, 0x000058c2u, 0x000058b4u, 0x000500c7u, 0x00000006u, 0x000058c3u, 0x000058c2u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000058c4u, 0x000058c3u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000058c6u, 0x000058c0u, 0x000058c4u, 0x0003003eu, 0x000058adu, 0x000058c6u, 0x000500c6u, 0x00000006u, 0x000058c8u, 0x000058c6u, 0x00000485u, 0x0003003eu, 0x000058adu, 0x000058c8u, 0x00080041u, 0x00000270u, 0x000058cbu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000058c8u, 0x0004003du, 0x0000022bu, 0x000058ccu, 0x000058cbu, 0x00040071u, 0x00000006u, 0x000058cdu, 0x000058ccu, 0x0003003eu, 0x000058aeu, 0x000058cdu, 0x000500c2u, 0x00000006u, 0x000058cfu, 0x000058cdu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000058d0u, 0x000058cfu, 0x000500c7u, 0x00000006u, 0x000058d2u, 0x000058cdu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000058d3u, 0x000058d2u, 0x00050050u, 0x0000005fu, 0x000058d4u, 0x000058d0u, 0x000058d3u, 0x0009004fu, 0x00000009u, 0x000058d5u, 0x000058d4u, 0x000058d4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000058afu, 0x000058d5u, 0x0003003eu, 0x00004507u, 0x000058d5u, 0x000300f7u, 0x000048c9u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000048cau, 0x000048c9u, 0x000200f8u, 0x000048cau, 0x00050050u, 0x0000005fu, 0x000048cdu, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000048ceu, 0x000048cdu, 0x0003003eu, 0x00006a68u, 0x000044bcu, 0x0003003eu, 0x00006a69u, 0x000044bfu, 0x0003003eu, 0x000045e9u, 0x000020f8u, 0x0003003eu, 0x000045eau, 0x000048ceu, 0x00050041u, 0x00000007u, 0x000058deu, 0x000045eau, 0x00000485u, 0x0004003du, 0x00000006u, 0x000058dfu, 0x000058deu, 0x00050084u, 0x00000006u, 0x000058e0u, 0x000044bfu, 0x000058dfu, 0x00050080u, 0x00000006u, 0x000058e1u, 0x000044bcu, 0x000058e0u, 0x0003003eu, 0x000058d6u, 0x000058e1u, 0x00050041u, 0x00000007u, 0x000058e2u, 0x000045eau, 0x00000374u, 0x0004003du, 0x00000006u, 0x000058e3u, 0x000058e2u, 0x00050084u, 0x00000006u, 0x000058e4u, 0x000058e3u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000058e6u, 0x000058e1u, 0x000058e4u, 0x0003003eu, 0x000058d6u, 0x000058e6u, 0x000500c7u, 0x00000006u, 0x000058e8u, 0x000058e6u, 0x00000e59u, 0x0003003eu, 0x000058d6u, 0x000058e8u, 0x000500c2u, 0x00000006u, 0x000058eau, 0x000058e8u, 0x00000212u, 0x0003003eu, 0x000058d7u, 0x000058eau, 0x0004003du, 0x00000006u, 0x000058ecu, 0x000058deu, 0x000500c7u, 0x00000006u, 0x000058edu, 0x000058ecu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000058eeu, 0x000058edu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000058f0u, 0x000058eau, 0x000058eeu, 0x0003003eu, 0x000058d7u, 0x000058f0u, 0x000500c6u, 0x00000006u, 0x000058f2u, 0x000058f0u, 0x00000485u, 0x0003003eu, 0x000058d7u, 0x000058f2u, 0x00080041u, 0x00000270u, 0x000058f5u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000058f2u, 0x0004003du, 0x0000022bu, 0x000058f6u, 0x000058f5u, 0x00040071u, 0x00000006u, 0x000058f7u, 0x000058f6u, 0x0003003eu, 0x000058d8u, 0x000058f7u, 0x000500c2u, 0x00000006u, 0x000058f9u, 0x000058f7u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000058fau, 0x000058f9u, 0x000500c7u, 0x00000006u, 0x000058fcu, 0x000058f7u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000058fdu, 0x000058fcu, 0x00050050u, 0x0000005fu, 0x000058feu, 0x000058fau, 0x000058fdu, 0x0009004fu, 0x00000009u, 0x000058ffu, 0x000058feu, 0x000058feu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000058d9u, 0x000058ffu, 0x0003003eu, 0x0000450fu, 0x000058ffu, 0x00050050u, 0x0000005fu, 0x000048d4u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000048d5u, 0x000048d4u, 0x0003003eu, 0x00006a6cu, 0x000044bcu, 0x0003003eu, 0x00006a6du, 0x000044bfu, 0x0003003eu, 0x000045ecu, 0x000020f8u, 0x0003003eu, 0x000045edu, 0x000048d5u, 0x00050041u, 0x00000007u, 0x00005908u, 0x000045edu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005909u, 0x00005908u, 0x00050084u, 0x00000006u, 0x0000590au, 0x000044bfu, 0x00005909u, 0x00050080u, 0x00000006u, 0x0000590bu, 0x000044bcu, 0x0000590au, 0x0003003eu, 0x00005900u, 0x0000590bu, 0x00050041u, 0x00000007u, 0x0000590cu, 0x000045edu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000590du, 0x0000590cu, 0x00050084u, 0x00000006u, 0x0000590eu, 0x0000590du, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005910u, 0x0000590bu, 0x0000590eu, 0x0003003eu, 0x00005900u, 0x00005910u, 0x000500c7u, 0x00000006u, 0x00005912u, 0x00005910u, 0x00000e59u, 0x0003003eu, 0x00005900u, 0x00005912u, 0x000500c2u, 0x00000006u, 0x00005914u, 0x00005912u, 0x00000212u, 0x0003003eu, 0x00005901u, 0x00005914u, 0x0004003du, 0x00000006u, 0x00005916u, 0x00005908u, 0x000500c7u, 0x00000006u, 0x00005917u, 0x00005916u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005918u, 0x00005917u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000591au, 0x00005914u, 0x00005918u, 0x0003003eu, 0x00005901u, 0x0000591au, 0x000500c6u, 0x00000006u, 0x0000591cu, 0x0000591au, 0x00000485u, 0x0003003eu, 0x00005901u, 0x0000591cu, 0x00080041u, 0x00000270u, 0x0000591fu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000591cu, 0x0004003du, 0x0000022bu, 0x00005920u, 0x0000591fu, 0x00040071u, 0x00000006u, 0x00005921u, 0x00005920u, 0x0003003eu, 0x00005902u, 0x00005921u, 0x000500c2u, 0x00000006u, 0x00005923u, 0x00005921u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005924u, 0x00005923u, 0x000500c7u, 0x00000006u, 0x00005926u, 0x00005921u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005927u, 0x00005926u, 0x00050050u, 0x0000005fu, 0x00005928u, 0x00005924u, 0x00005927u, 0x0009004fu, 0x00000009u, 0x00005929u, 0x00005928u, 0x00005928u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005903u, 0x00005929u, 0x0003003eu, 0x00004517u, 0x00005929u, 0x000200f9u, 0x000048c9u, 0x000200f8u, 0x000048c9u, 0x000700f5u, 0x00000009u, 0x00009b38u, 0x00009a79u, 0x00004862u, 0x00005929u, 0x000048cau, 0x000700f5u, 0x00000009u, 0x0000996cu, 0x000098aau, 0x00004862u, 0x000058ffu, 0x000048cau, 0x000300f7u, 0x000048dau, 0x00000000u, 0x000400fau, 0x0000467bu, 0x000048dbu, 0x000048dau, 0x000200f8u, 0x000048dbu, 0x00050050u, 0x0000005fu, 0x000048deu, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000048dfu, 0x000048deu, 0x0003003eu, 0x00006a70u, 0x000044bcu, 0x0003003eu, 0x00006a71u, 0x000044bfu, 0x0003003eu, 0x000045efu, 0x000020f8u, 0x0003003eu, 0x000045f0u, 0x000048dfu, 0x00050041u, 0x00000007u, 0x00005932u, 0x000045f0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005933u, 0x00005932u, 0x00050084u, 0x00000006u, 0x00005934u, 0x000044bfu, 0x00005933u, 0x00050080u, 0x00000006u, 0x00005935u, 0x000044bcu, 0x00005934u, 0x0003003eu, 0x0000592au, 0x00005935u, 0x00050041u, 0x00000007u, 0x00005936u, 0x000045f0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005937u, 0x00005936u, 0x00050084u, 0x00000006u, 0x00005938u, 0x00005937u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000593au, 0x00005935u, 0x00005938u, 0x0003003eu, 0x0000592au, 0x0000593au, 0x000500c7u, 0x00000006u, 0x0000593cu, 0x0000593au, 0x00000e59u, 0x0003003eu, 0x0000592au, 0x0000593cu, 0x000500c2u, 0x00000006u, 0x0000593eu, 0x0000593cu, 0x00000212u, 0x0003003eu, 0x0000592bu, 0x0000593eu, 0x0004003du, 0x00000006u, 0x00005940u, 0x00005932u, 0x000500c7u, 0x00000006u, 0x00005941u, 0x00005940u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005942u, 0x00005941u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005944u, 0x0000593eu, 0x00005942u, 0x0003003eu, 0x0000592bu, 0x00005944u, 0x000500c6u, 0x00000006u, 0x00005946u, 0x00005944u, 0x00000485u, 0x0003003eu, 0x0000592bu, 0x00005946u, 0x00080041u, 0x00000270u, 0x00005949u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005946u, 0x0004003du, 0x0000022bu, 0x0000594au, 0x00005949u, 0x00040071u, 0x00000006u, 0x0000594bu, 0x0000594au, 0x0003003eu, 0x0000592cu, 0x0000594bu, 0x000500c2u, 0x00000006u, 0x0000594du, 0x0000594bu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000594eu, 0x0000594du, 0x000500c7u, 0x00000006u, 0x00005950u, 0x0000594bu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005951u, 0x00005950u, 0x00050050u, 0x0000005fu, 0x00005952u, 0x0000594eu, 0x00005951u, 0x0009004fu, 0x00000009u, 0x00005953u, 0x00005952u, 0x00005952u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000592du, 0x00005953u, 0x0003003eu, 0x0000451fu, 0x00005953u, 0x000200f9u, 0x000048dau, 0x000200f8u, 0x000048dau, 0x000700f5u, 0x00000009u, 0x00009c1eu, 0x00009b5du, 0x000048c9u, 0x00005953u, 0x000048dbu, 0x000200f9u, 0x0000485eu, 0x000200f8u, 0x00004861u, 0x0004007cu, 0x000000a2u, 0x000048a4u, 0x0000951eu, 0x0003003eu, 0x00006a54u, 0x000044bcu, 0x0003003eu, 0x00006a55u, 0x000044bfu, 0x0003003eu, 0x000045dau, 0x000020f8u, 0x0003003eu, 0x000045dbu, 0x000048a4u, 0x00050041u, 0x00000007u, 0x000057e1u, 0x000045dbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000057e2u, 0x000057e1u, 0x00050084u, 0x00000006u, 0x000057e3u, 0x000044bfu, 0x000057e2u, 0x00050080u, 0x00000006u, 0x000057e4u, 0x000044bcu, 0x000057e3u, 0x0003003eu, 0x000057d8u, 0x000057e4u, 0x00050041u, 0x00000007u, 0x000057e5u, 0x000045dbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000057e6u, 0x000057e5u, 0x00050084u, 0x00000006u, 0x000057e7u, 0x000057e6u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000057e9u, 0x000057e4u, 0x000057e7u, 0x0003003eu, 0x000057d8u, 0x000057e9u, 0x000500c7u, 0x00000006u, 0x000057ebu, 0x000057e9u, 0x00000e59u, 0x0003003eu, 0x000057d8u, 0x000057ebu, 0x000500c2u, 0x00000006u, 0x000057edu, 0x000057ebu, 0x00000212u, 0x0003003eu, 0x000057d9u, 0x000057edu, 0x0004003du, 0x00000006u, 0x000057efu, 0x000057e1u, 0x000500c7u, 0x00000006u, 0x000057f0u, 0x000057efu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000057f1u, 0x000057f0u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000057f3u, 0x000057edu, 0x000057f1u, 0x0003003eu, 0x000057d9u, 0x000057f3u, 0x000500c6u, 0x00000006u, 0x000057f5u, 0x000057f3u, 0x00000485u, 0x0003003eu, 0x000057d9u, 0x000057f5u, 0x00080041u, 0x00000270u, 0x000057f8u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000057f5u, 0x0004003du, 0x0000022bu, 0x000057f9u, 0x000057f8u, 0x00040071u, 0x00000006u, 0x000057fau, 0x000057f9u, 0x0003003eu, 0x000057dau, 0x000057fau, 0x0003003eu, 0x000057dbu, 0x000057fau, 0x000500c2u, 0x00000006u, 0x00005801u, 0x000057fau, 0x0000025eu, 0x0003003eu, 0x000057fdu, 0x00005801u, 0x000500c7u, 0x00000006u, 0x00005803u, 0x000057fau, 0x000006c2u, 0x0003003eu, 0x000057feu, 0x00005803u, 0x0004007cu, 0x00000008u, 0x00005805u, 0x00005801u, 0x0004007cu, 0x00000008u, 0x0000580bu, 0x00005803u, 0x00070050u, 0x00000009u, 0x0000580cu, 0x00005805u, 0x00005805u, 0x00005805u, 0x0000580bu, 0x0003003eu, 0x000057ffu, 0x0000580cu, 0x0003003eu, 0x000057dcu, 0x0000580cu, 0x0003003eu, 0x00004507u, 0x0000580cu, 0x000300f7u, 0x000048a9u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000048aau, 0x000048a9u, 0x000200f8u, 0x000048aau, 0x00050050u, 0x0000005fu, 0x000048adu, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000048aeu, 0x000048adu, 0x0003003eu, 0x00006a58u, 0x000044bcu, 0x0003003eu, 0x00006a59u, 0x000044bfu, 0x0003003eu, 0x000045ddu, 0x000020f8u, 0x0003003eu, 0x000045deu, 0x000048aeu, 0x00050041u, 0x00000007u, 0x00005816u, 0x000045deu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005817u, 0x00005816u, 0x00050084u, 0x00000006u, 0x00005818u, 0x000044bfu, 0x00005817u, 0x00050080u, 0x00000006u, 0x00005819u, 0x000044bcu, 0x00005818u, 0x0003003eu, 0x0000580du, 0x00005819u, 0x00050041u, 0x00000007u, 0x0000581au, 0x000045deu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000581bu, 0x0000581au, 0x00050084u, 0x00000006u, 0x0000581cu, 0x0000581bu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000581eu, 0x00005819u, 0x0000581cu, 0x0003003eu, 0x0000580du, 0x0000581eu, 0x000500c7u, 0x00000006u, 0x00005820u, 0x0000581eu, 0x00000e59u, 0x0003003eu, 0x0000580du, 0x00005820u, 0x000500c2u, 0x00000006u, 0x00005822u, 0x00005820u, 0x00000212u, 0x0003003eu, 0x0000580eu, 0x00005822u, 0x0004003du, 0x00000006u, 0x00005824u, 0x00005816u, 0x000500c7u, 0x00000006u, 0x00005825u, 0x00005824u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005826u, 0x00005825u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005828u, 0x00005822u, 0x00005826u, 0x0003003eu, 0x0000580eu, 0x00005828u, 0x000500c6u, 0x00000006u, 0x0000582au, 0x00005828u, 0x00000485u, 0x0003003eu, 0x0000580eu, 0x0000582au, 0x00080041u, 0x00000270u, 0x0000582du, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000582au, 0x0004003du, 0x0000022bu, 0x0000582eu, 0x0000582du, 0x00040071u, 0x00000006u, 0x0000582fu, 0x0000582eu, 0x0003003eu, 0x0000580fu, 0x0000582fu, 0x0003003eu, 0x00005810u, 0x0000582fu, 0x000500c2u, 0x00000006u, 0x00005836u, 0x0000582fu, 0x0000025eu, 0x0003003eu, 0x00005832u, 0x00005836u, 0x000500c7u, 0x00000006u, 0x00005838u, 0x0000582fu, 0x000006c2u, 0x0003003eu, 0x00005833u, 0x00005838u, 0x0004007cu, 0x00000008u, 0x0000583au, 0x00005836u, 0x0004007cu, 0x00000008u, 0x00005840u, 0x00005838u, 0x00070050u, 0x00000009u, 0x00005841u, 0x0000583au, 0x0000583au, 0x0000583au, 0x00005840u, 0x0003003eu, 0x00005834u, 0x00005841u, 0x0003003eu, 0x00005811u, 0x00005841u, 0x0003003eu, 0x0000450fu, 0x00005841u, 0x00050050u, 0x0000005fu, 0x000048b4u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000048b5u, 0x000048b4u, 0x0003003eu, 0x00006a5cu, 0x000044bcu, 0x0003003eu, 0x00006a5du, 0x000044bfu, 0x0003003eu, 0x000045e0u, 0x000020f8u, 0x0003003eu, 0x000045e1u, 0x000048b5u, 0x00050041u, 0x00000007u, 0x0000584bu, 0x000045e1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000584cu, 0x0000584bu, 0x00050084u, 0x00000006u, 0x0000584du, 0x000044bfu, 0x0000584cu, 0x00050080u, 0x00000006u, 0x0000584eu, 0x000044bcu, 0x0000584du, 0x0003003eu, 0x00005842u, 0x0000584eu, 0x00050041u, 0x00000007u, 0x0000584fu, 0x000045e1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005850u, 0x0000584fu, 0x00050084u, 0x00000006u, 0x00005851u, 0x00005850u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005853u, 0x0000584eu, 0x00005851u, 0x0003003eu, 0x00005842u, 0x00005853u, 0x000500c7u, 0x00000006u, 0x00005855u, 0x00005853u, 0x00000e59u, 0x0003003eu, 0x00005842u, 0x00005855u, 0x000500c2u, 0x00000006u, 0x00005857u, 0x00005855u, 0x00000212u, 0x0003003eu, 0x00005843u, 0x00005857u, 0x0004003du, 0x00000006u, 0x00005859u, 0x0000584bu, 0x000500c7u, 0x00000006u, 0x0000585au, 0x00005859u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000585bu, 0x0000585au, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000585du, 0x00005857u, 0x0000585bu, 0x0003003eu, 0x00005843u, 0x0000585du, 0x000500c6u, 0x00000006u, 0x0000585fu, 0x0000585du, 0x00000485u, 0x0003003eu, 0x00005843u, 0x0000585fu, 0x00080041u, 0x00000270u, 0x00005862u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000585fu, 0x0004003du, 0x0000022bu, 0x00005863u, 0x00005862u, 0x00040071u, 0x00000006u, 0x00005864u, 0x00005863u, 0x0003003eu, 0x00005844u, 0x00005864u, 0x0003003eu, 0x00005845u, 0x00005864u, 0x000500c2u, 0x00000006u, 0x0000586bu, 0x00005864u, 0x0000025eu, 0x0003003eu, 0x00005867u, 0x0000586bu, 0x000500c7u, 0x00000006u, 0x0000586du, 0x00005864u, 0x000006c2u, 0x0003003eu, 0x00005868u, 0x0000586du, 0x0004007cu, 0x00000008u, 0x0000586fu, 0x0000586bu, 0x0004007cu, 0x00000008u, 0x00005875u, 0x0000586du, 0x00070050u, 0x00000009u, 0x00005876u, 0x0000586fu, 0x0000586fu, 0x0000586fu, 0x00005875u, 0x0003003eu, 0x00005869u, 0x00005876u, 0x0003003eu, 0x00005846u, 0x00005876u, 0x0003003eu, 0x00004517u, 0x00005876u, 0x000200f9u, 0x000048a9u, 0x000200f8u, 0x000048a9u, 0x000700f5u, 0x00000009u, 0x00009b36u, 0x00009a79u, 0x00004861u, 0x00005876u, 0x000048aau, 0x000700f5u, 0x00000009u, 0x0000996au, 0x000098aau, 0x00004861u, 0x00005841u, 0x000048aau, 0x000300f7u, 0x000048bau, 0x00000000u, 0x000400fau, 0x0000467bu, 0x000048bbu, 0x000048bau, 0x000200f8u, 0x000048bbu, 0x00050050u, 0x0000005fu, 0x000048beu, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000048bfu, 0x000048beu, 0x0003003eu, 0x00006a60u, 0x000044bcu, 0x0003003eu, 0x00006a61u, 0x000044bfu, 0x0003003eu, 0x000045e3u, 0x000020f8u, 0x0003003eu, 0x000045e4u, 0x000048bfu, 0x00050041u, 0x00000007u, 0x00005880u, 0x000045e4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005881u, 0x00005880u, 0x00050084u, 0x00000006u, 0x00005882u, 0x000044bfu, 0x00005881u, 0x00050080u, 0x00000006u, 0x00005883u, 0x000044bcu, 0x00005882u, 0x0003003eu, 0x00005877u, 0x00005883u, 0x00050041u, 0x00000007u, 0x00005884u, 0x000045e4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005885u, 0x00005884u, 0x00050084u, 0x00000006u, 0x00005886u, 0x00005885u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005888u, 0x00005883u, 0x00005886u, 0x0003003eu, 0x00005877u, 0x00005888u, 0x000500c7u, 0x00000006u, 0x0000588au, 0x00005888u, 0x00000e59u, 0x0003003eu, 0x00005877u, 0x0000588au, 0x000500c2u, 0x00000006u, 0x0000588cu, 0x0000588au, 0x00000212u, 0x0003003eu, 0x00005878u, 0x0000588cu, 0x0004003du, 0x00000006u, 0x0000588eu, 0x00005880u, 0x000500c7u, 0x00000006u, 0x0000588fu, 0x0000588eu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005890u, 0x0000588fu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005892u, 0x0000588cu, 0x00005890u, 0x0003003eu, 0x00005878u, 0x00005892u, 0x000500c6u, 0x00000006u, 0x00005894u, 0x00005892u, 0x00000485u, 0x0003003eu, 0x00005878u, 0x00005894u, 0x00080041u, 0x00000270u, 0x00005897u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005894u, 0x0004003du, 0x0000022bu, 0x00005898u, 0x00005897u, 0x00040071u, 0x00000006u, 0x00005899u, 0x00005898u, 0x0003003eu, 0x00005879u, 0x00005899u, 0x0003003eu, 0x0000587au, 0x00005899u, 0x000500c2u, 0x00000006u, 0x000058a0u, 0x00005899u, 0x0000025eu, 0x0003003eu, 0x0000589cu, 0x000058a0u, 0x000500c7u, 0x00000006u, 0x000058a2u, 0x00005899u, 0x000006c2u, 0x0003003eu, 0x0000589du, 0x000058a2u, 0x0004007cu, 0x00000008u, 0x000058a4u, 0x000058a0u, 0x0004007cu, 0x00000008u, 0x000058aau, 0x000058a2u, 0x00070050u, 0x00000009u, 0x000058abu, 0x000058a4u, 0x000058a4u, 0x000058a4u, 0x000058aau, 0x0003003eu, 0x0000589eu, 0x000058abu, 0x0003003eu, 0x0000587bu, 0x000058abu, 0x0003003eu, 0x0000451fu, 0x000058abu, 0x000200f9u, 0x000048bau, 0x000200f8u, 0x000048bau, 0x000700f5u, 0x00000009u, 0x00009c1cu, 0x00009b5du, 0x000048a9u, 0x000058abu, 0x000048bbu, 0x000200f9u, 0x0000485eu, 0x000200f8u, 0x00004860u, 0x0004007cu, 0x000000a2u, 0x00004884u, 0x0000951eu, 0x0003003eu, 0x00006a44u, 0x000044bcu, 0x0003003eu, 0x00006a45u, 0x000044bfu, 0x0003003eu, 0x000045ceu, 0x000020f8u, 0x0003003eu, 0x000045cfu, 0x00004884u, 0x00050041u, 0x00000007u, 0x00005706u, 0x000045cfu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005707u, 0x00005706u, 0x00050084u, 0x00000006u, 0x00005708u, 0x000044bfu, 0x00005707u, 0x00050080u, 0x00000006u, 0x00005709u, 0x000044bcu, 0x00005708u, 0x0003003eu, 0x000056fcu, 0x00005709u, 0x00050041u, 0x00000007u, 0x0000570au, 0x000045cfu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000570bu, 0x0000570au, 0x00050080u, 0x00000006u, 0x0000570du, 0x00005709u, 0x0000570bu, 0x0003003eu, 0x000056fcu, 0x0000570du, 0x000500c7u, 0x00000006u, 0x0000570fu, 0x0000570du, 0x00000e59u, 0x0003003eu, 0x000056fcu, 0x0000570fu, 0x0003003eu, 0x000056fdu, 0x0000570fu, 0x0004003du, 0x00000006u, 0x00005712u, 0x00005706u, 0x000500c7u, 0x00000006u, 0x00005713u, 0x00005712u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005714u, 0x00005713u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005716u, 0x0000570fu, 0x00005714u, 0x0003003eu, 0x000056fdu, 0x00005716u, 0x000500c6u, 0x00000006u, 0x00005718u, 0x00005716u, 0x0000048bu, 0x0003003eu, 0x000056fdu, 0x00005718u, 0x00080041u, 0x00000277u, 0x0000571bu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005718u, 0x0004003du, 0x00000229u, 0x0000571cu, 0x0000571bu, 0x00040071u, 0x00000006u, 0x0000571du, 0x0000571cu, 0x0003003eu, 0x000056feu, 0x0000571du, 0x000500c2u, 0x00000006u, 0x0000571fu, 0x0000571du, 0x0000021bu, 0x0003003eu, 0x000056ffu, 0x0000571fu, 0x000500c7u, 0x00000006u, 0x00005721u, 0x0000571du, 0x00000e7cu, 0x0003003eu, 0x00005700u, 0x00005721u, 0x000500c4u, 0x00000006u, 0x00005723u, 0x00005721u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005725u, 0x00005721u, 0x00005723u, 0x0003003eu, 0x00005700u, 0x00005725u, 0x000500c4u, 0x00000006u, 0x00005727u, 0x0000571fu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005729u, 0x0000571fu, 0x00005727u, 0x0003003eu, 0x000056ffu, 0x00005729u, 0x0004007cu, 0x00000008u, 0x0000572bu, 0x00005729u, 0x0004007cu, 0x00000008u, 0x00005731u, 0x00005725u, 0x00070050u, 0x00000009u, 0x00005732u, 0x0000572bu, 0x0000572bu, 0x0000572bu, 0x00005731u, 0x0003003eu, 0x00005701u, 0x00005732u, 0x0003003eu, 0x00004507u, 0x00005732u, 0x000300f7u, 0x00004889u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x0000488au, 0x00004889u, 0x000200f8u, 0x0000488au, 0x00050050u, 0x0000005fu, 0x0000488du, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x0000488eu, 0x0000488du, 0x0003003eu, 0x00006a48u, 0x000044bcu, 0x0003003eu, 0x00006a49u, 0x000044bfu, 0x0003003eu, 0x000045d1u, 0x000020f8u, 0x0003003eu, 0x000045d2u, 0x0000488eu, 0x00050041u, 0x00000007u, 0x0000573du, 0x000045d2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000573eu, 0x0000573du, 0x00050084u, 0x00000006u, 0x0000573fu, 0x000044bfu, 0x0000573eu, 0x00050080u, 0x00000006u, 0x00005740u, 0x000044bcu, 0x0000573fu, 0x0003003eu, 0x00005733u, 0x00005740u, 0x00050041u, 0x00000007u, 0x00005741u, 0x000045d2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005742u, 0x00005741u, 0x00050080u, 0x00000006u, 0x00005744u, 0x00005740u, 0x00005742u, 0x0003003eu, 0x00005733u, 0x00005744u, 0x000500c7u, 0x00000006u, 0x00005746u, 0x00005744u, 0x00000e59u, 0x0003003eu, 0x00005733u, 0x00005746u, 0x0003003eu, 0x00005734u, 0x00005746u, 0x0004003du, 0x00000006u, 0x00005749u, 0x0000573du, 0x000500c7u, 0x00000006u, 0x0000574au, 0x00005749u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000574bu, 0x0000574au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000574du, 0x00005746u, 0x0000574bu, 0x0003003eu, 0x00005734u, 0x0000574du, 0x000500c6u, 0x00000006u, 0x0000574fu, 0x0000574du, 0x0000048bu, 0x0003003eu, 0x00005734u, 0x0000574fu, 0x00080041u, 0x00000277u, 0x00005752u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000574fu, 0x0004003du, 0x00000229u, 0x00005753u, 0x00005752u, 0x00040071u, 0x00000006u, 0x00005754u, 0x00005753u, 0x0003003eu, 0x00005735u, 0x00005754u, 0x000500c2u, 0x00000006u, 0x00005756u, 0x00005754u, 0x0000021bu, 0x0003003eu, 0x00005736u, 0x00005756u, 0x000500c7u, 0x00000006u, 0x00005758u, 0x00005754u, 0x00000e7cu, 0x0003003eu, 0x00005737u, 0x00005758u, 0x000500c4u, 0x00000006u, 0x0000575au, 0x00005758u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000575cu, 0x00005758u, 0x0000575au, 0x0003003eu, 0x00005737u, 0x0000575cu, 0x000500c4u, 0x00000006u, 0x0000575eu, 0x00005756u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005760u, 0x00005756u, 0x0000575eu, 0x0003003eu, 0x00005736u, 0x00005760u, 0x0004007cu, 0x00000008u, 0x00005762u, 0x00005760u, 0x0004007cu, 0x00000008u, 0x00005768u, 0x0000575cu, 0x00070050u, 0x00000009u, 0x00005769u, 0x00005762u, 0x00005762u, 0x00005762u, 0x00005768u, 0x0003003eu, 0x00005738u, 0x00005769u, 0x0003003eu, 0x0000450fu, 0x00005769u, 0x00050050u, 0x0000005fu, 0x00004894u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004895u, 0x00004894u, 0x0003003eu, 0x00006a4cu, 0x000044bcu, 0x0003003eu, 0x00006a4du, 0x000044bfu, 0x0003003eu, 0x000045d4u, 0x000020f8u, 0x0003003eu, 0x000045d5u, 0x00004895u, 0x00050041u, 0x00000007u, 0x00005774u, 0x000045d5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005775u, 0x00005774u, 0x00050084u, 0x00000006u, 0x00005776u, 0x000044bfu, 0x00005775u, 0x00050080u, 0x00000006u, 0x00005777u, 0x000044bcu, 0x00005776u, 0x0003003eu, 0x0000576au, 0x00005777u, 0x00050041u, 0x00000007u, 0x00005778u, 0x000045d5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005779u, 0x00005778u, 0x00050080u, 0x00000006u, 0x0000577bu, 0x00005777u, 0x00005779u, 0x0003003eu, 0x0000576au, 0x0000577bu, 0x000500c7u, 0x00000006u, 0x0000577du, 0x0000577bu, 0x00000e59u, 0x0003003eu, 0x0000576au, 0x0000577du, 0x0003003eu, 0x0000576bu, 0x0000577du, 0x0004003du, 0x00000006u, 0x00005780u, 0x00005774u, 0x000500c7u, 0x00000006u, 0x00005781u, 0x00005780u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005782u, 0x00005781u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005784u, 0x0000577du, 0x00005782u, 0x0003003eu, 0x0000576bu, 0x00005784u, 0x000500c6u, 0x00000006u, 0x00005786u, 0x00005784u, 0x0000048bu, 0x0003003eu, 0x0000576bu, 0x00005786u, 0x00080041u, 0x00000277u, 0x00005789u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005786u, 0x0004003du, 0x00000229u, 0x0000578au, 0x00005789u, 0x00040071u, 0x00000006u, 0x0000578bu, 0x0000578au, 0x0003003eu, 0x0000576cu, 0x0000578bu, 0x000500c2u, 0x00000006u, 0x0000578du, 0x0000578bu, 0x0000021bu, 0x0003003eu, 0x0000576du, 0x0000578du, 0x000500c7u, 0x00000006u, 0x0000578fu, 0x0000578bu, 0x00000e7cu, 0x0003003eu, 0x0000576eu, 0x0000578fu, 0x000500c4u, 0x00000006u, 0x00005791u, 0x0000578fu, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005793u, 0x0000578fu, 0x00005791u, 0x0003003eu, 0x0000576eu, 0x00005793u, 0x000500c4u, 0x00000006u, 0x00005795u, 0x0000578du, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005797u, 0x0000578du, 0x00005795u, 0x0003003eu, 0x0000576du, 0x00005797u, 0x0004007cu, 0x00000008u, 0x00005799u, 0x00005797u, 0x0004007cu, 0x00000008u, 0x0000579fu, 0x00005793u, 0x00070050u, 0x00000009u, 0x000057a0u, 0x00005799u, 0x00005799u, 0x00005799u, 0x0000579fu, 0x0003003eu, 0x0000576fu, 0x000057a0u, 0x0003003eu, 0x00004517u, 0x000057a0u, 0x000200f9u, 0x00004889u, 0x000200f8u, 0x00004889u, 0x000700f5u, 0x00000009u, 0x00009b34u, 0x00009a79u, 0x00004860u, 0x000057a0u, 0x0000488au, 0x000700f5u, 0x00000009u, 0x00009968u, 0x000098aau, 0x00004860u, 0x00005769u, 0x0000488au, 0x000300f7u, 0x0000489au, 0x00000000u, 0x000400fau, 0x0000467bu, 0x0000489bu, 0x0000489au, 0x000200f8u, 0x0000489bu, 0x00050050u, 0x0000005fu, 0x0000489eu, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000489fu, 0x0000489eu, 0x0003003eu, 0x00006a50u, 0x000044bcu, 0x0003003eu, 0x00006a51u, 0x000044bfu, 0x0003003eu, 0x000045d7u, 0x000020f8u, 0x0003003eu, 0x000045d8u, 0x0000489fu, 0x00050041u, 0x00000007u, 0x000057abu, 0x000045d8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000057acu, 0x000057abu, 0x00050084u, 0x00000006u, 0x000057adu, 0x000044bfu, 0x000057acu, 0x00050080u, 0x00000006u, 0x000057aeu, 0x000044bcu, 0x000057adu, 0x0003003eu, 0x000057a1u, 0x000057aeu, 0x00050041u, 0x00000007u, 0x000057afu, 0x000045d8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000057b0u, 0x000057afu, 0x00050080u, 0x00000006u, 0x000057b2u, 0x000057aeu, 0x000057b0u, 0x0003003eu, 0x000057a1u, 0x000057b2u, 0x000500c7u, 0x00000006u, 0x000057b4u, 0x000057b2u, 0x00000e59u, 0x0003003eu, 0x000057a1u, 0x000057b4u, 0x0003003eu, 0x000057a2u, 0x000057b4u, 0x0004003du, 0x00000006u, 0x000057b7u, 0x000057abu, 0x000500c7u, 0x00000006u, 0x000057b8u, 0x000057b7u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000057b9u, 0x000057b8u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000057bbu, 0x000057b4u, 0x000057b9u, 0x0003003eu, 0x000057a2u, 0x000057bbu, 0x000500c6u, 0x00000006u, 0x000057bdu, 0x000057bbu, 0x0000048bu, 0x0003003eu, 0x000057a2u, 0x000057bdu, 0x00080041u, 0x00000277u, 0x000057c0u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000057bdu, 0x0004003du, 0x00000229u, 0x000057c1u, 0x000057c0u, 0x00040071u, 0x00000006u, 0x000057c2u, 0x000057c1u, 0x0003003eu, 0x000057a3u, 0x000057c2u, 0x000500c2u, 0x00000006u, 0x000057c4u, 0x000057c2u, 0x0000021bu, 0x0003003eu, 0x000057a4u, 0x000057c4u, 0x000500c7u, 0x00000006u, 0x000057c6u, 0x000057c2u, 0x00000e7cu, 0x0003003eu, 0x000057a5u, 0x000057c6u, 0x000500c4u, 0x00000006u, 0x000057c8u, 0x000057c6u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000057cau, 0x000057c6u, 0x000057c8u, 0x0003003eu, 0x000057a5u, 0x000057cau, 0x000500c4u, 0x00000006u, 0x000057ccu, 0x000057c4u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000057ceu, 0x000057c4u, 0x000057ccu, 0x0003003eu, 0x000057a4u, 0x000057ceu, 0x0004007cu, 0x00000008u, 0x000057d0u, 0x000057ceu, 0x0004007cu, 0x00000008u, 0x000057d6u, 0x000057cau, 0x00070050u, 0x00000009u, 0x000057d7u, 0x000057d0u, 0x000057d0u, 0x000057d0u, 0x000057d6u, 0x0003003eu, 0x000057a6u, 0x000057d7u, 0x0003003eu, 0x0000451fu, 0x000057d7u, 0x000200f9u, 0x0000489au, 0x000200f8u, 0x0000489au, 0x000700f5u, 0x00000009u, 0x00009c1au, 0x00009b5du, 0x00004889u, 0x000057d7u, 0x0000489bu, 0x000200f9u, 0x0000485eu, 0x000200f8u, 0x0000485fu, 0x0004007cu, 0x000000a2u, 0x00004864u, 0x0000951eu, 0x0003003eu, 0x00006a34u, 0x000044bcu, 0x0003003eu, 0x00006a35u, 0x000044bfu, 0x0003003eu, 0x000045c2u, 0x000020f8u, 0x0003003eu, 0x000045c3u, 0x00004864u, 0x00050041u, 0x00000007u, 0x00005602u, 0x000045c3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005603u, 0x00005602u, 0x00050084u, 0x00000006u, 0x00005604u, 0x000044bfu, 0x00005603u, 0x00050080u, 0x00000006u, 0x00005605u, 0x000044bcu, 0x00005604u, 0x0003003eu, 0x000055f8u, 0x00005605u, 0x00050041u, 0x00000007u, 0x00005606u, 0x000045c3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005607u, 0x00005606u, 0x000500c2u, 0x00000006u, 0x00005608u, 0x00005607u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000560au, 0x00005605u, 0x00005608u, 0x0003003eu, 0x000055f8u, 0x0000560au, 0x000500c7u, 0x00000006u, 0x0000560cu, 0x0000560au, 0x00000e59u, 0x0003003eu, 0x000055f8u, 0x0000560cu, 0x0004003du, 0x00000006u, 0x0000560eu, 0x00005606u, 0x000400c8u, 0x00000006u, 0x0000560fu, 0x0000560eu, 0x000500c7u, 0x00000006u, 0x00005610u, 0x0000560fu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005611u, 0x00005610u, 0x00000701u, 0x0003003eu, 0x000055f9u, 0x00005611u, 0x0003003eu, 0x000055fau, 0x0000560cu, 0x0004003du, 0x00000006u, 0x00005614u, 0x00005602u, 0x000500c7u, 0x00000006u, 0x00005615u, 0x00005614u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005616u, 0x00005615u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005618u, 0x0000560cu, 0x00005616u, 0x0003003eu, 0x000055fau, 0x00005618u, 0x000500c6u, 0x00000006u, 0x0000561au, 0x00005618u, 0x0000048bu, 0x0003003eu, 0x000055fau, 0x0000561au, 0x00080041u, 0x00000277u, 0x0000561du, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000561au, 0x0004003du, 0x00000229u, 0x0000561eu, 0x0000561du, 0x00040071u, 0x00000006u, 0x0000561fu, 0x0000561eu, 0x0003003eu, 0x000055fbu, 0x0000561fu, 0x000500c2u, 0x00000006u, 0x00005622u, 0x0000561fu, 0x00005611u, 0x000500c7u, 0x00000006u, 0x00005623u, 0x00005622u, 0x00000e7cu, 0x0003003eu, 0x000055fbu, 0x00005623u, 0x000500c7u, 0x00000006u, 0x00005625u, 0x00005623u, 0x00000eb3u, 0x0003003eu, 0x000055fcu, 0x00005625u, 0x000500c4u, 0x00000006u, 0x00005627u, 0x00005625u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00005629u, 0x00005625u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x0000562au, 0x00005627u, 0x00005629u, 0x000500c2u, 0x00000006u, 0x0000562cu, 0x00005625u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x0000562du, 0x0000562au, 0x0000562cu, 0x0003003eu, 0x000055fcu, 0x0000562du, 0x0004007cu, 0x00000008u, 0x0000562fu, 0x0000562du, 0x000500c7u, 0x00000006u, 0x00005635u, 0x00005623u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005636u, 0x00005635u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005637u, 0x00005636u, 0x00070050u, 0x00000009u, 0x00005638u, 0x0000562fu, 0x0000562fu, 0x0000562fu, 0x00005637u, 0x0003003eu, 0x000055fdu, 0x00005638u, 0x0003003eu, 0x00004507u, 0x00005638u, 0x000300f7u, 0x00004869u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x0000486au, 0x00004869u, 0x000200f8u, 0x0000486au, 0x00050050u, 0x0000005fu, 0x0000486du, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x0000486eu, 0x0000486du, 0x0003003eu, 0x00006a38u, 0x000044bcu, 0x0003003eu, 0x00006a39u, 0x000044bfu, 0x0003003eu, 0x000045c5u, 0x000020f8u, 0x0003003eu, 0x000045c6u, 0x0000486eu, 0x00050041u, 0x00000007u, 0x00005643u, 0x000045c6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005644u, 0x00005643u, 0x00050084u, 0x00000006u, 0x00005645u, 0x000044bfu, 0x00005644u, 0x00050080u, 0x00000006u, 0x00005646u, 0x000044bcu, 0x00005645u, 0x0003003eu, 0x00005639u, 0x00005646u, 0x00050041u, 0x00000007u, 0x00005647u, 0x000045c6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005648u, 0x00005647u, 0x000500c2u, 0x00000006u, 0x00005649u, 0x00005648u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000564bu, 0x00005646u, 0x00005649u, 0x0003003eu, 0x00005639u, 0x0000564bu, 0x000500c7u, 0x00000006u, 0x0000564du, 0x0000564bu, 0x00000e59u, 0x0003003eu, 0x00005639u, 0x0000564du, 0x0004003du, 0x00000006u, 0x0000564fu, 0x00005647u, 0x000400c8u, 0x00000006u, 0x00005650u, 0x0000564fu, 0x000500c7u, 0x00000006u, 0x00005651u, 0x00005650u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005652u, 0x00005651u, 0x00000701u, 0x0003003eu, 0x0000563au, 0x00005652u, 0x0003003eu, 0x0000563bu, 0x0000564du, 0x0004003du, 0x00000006u, 0x00005655u, 0x00005643u, 0x000500c7u, 0x00000006u, 0x00005656u, 0x00005655u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005657u, 0x00005656u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005659u, 0x0000564du, 0x00005657u, 0x0003003eu, 0x0000563bu, 0x00005659u, 0x000500c6u, 0x00000006u, 0x0000565bu, 0x00005659u, 0x0000048bu, 0x0003003eu, 0x0000563bu, 0x0000565bu, 0x00080041u, 0x00000277u, 0x0000565eu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000565bu, 0x0004003du, 0x00000229u, 0x0000565fu, 0x0000565eu, 0x00040071u, 0x00000006u, 0x00005660u, 0x0000565fu, 0x0003003eu, 0x0000563cu, 0x00005660u, 0x000500c2u, 0x00000006u, 0x00005663u, 0x00005660u, 0x00005652u, 0x000500c7u, 0x00000006u, 0x00005664u, 0x00005663u, 0x00000e7cu, 0x0003003eu, 0x0000563cu, 0x00005664u, 0x000500c7u, 0x00000006u, 0x00005666u, 0x00005664u, 0x00000eb3u, 0x0003003eu, 0x0000563du, 0x00005666u, 0x000500c4u, 0x00000006u, 0x00005668u, 0x00005666u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x0000566au, 0x00005666u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x0000566bu, 0x00005668u, 0x0000566au, 0x000500c2u, 0x00000006u, 0x0000566du, 0x00005666u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x0000566eu, 0x0000566bu, 0x0000566du, 0x0003003eu, 0x0000563du, 0x0000566eu, 0x0004007cu, 0x00000008u, 0x00005670u, 0x0000566eu, 0x000500c7u, 0x00000006u, 0x00005676u, 0x00005664u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005677u, 0x00005676u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005678u, 0x00005677u, 0x00070050u, 0x00000009u, 0x00005679u, 0x00005670u, 0x00005670u, 0x00005670u, 0x00005678u, 0x0003003eu, 0x0000563eu, 0x00005679u, 0x0003003eu, 0x0000450fu, 0x00005679u, 0x00050050u, 0x0000005fu, 0x00004874u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004875u, 0x00004874u, 0x0003003eu, 0x00006a3cu, 0x000044bcu, 0x0003003eu, 0x00006a3du, 0x000044bfu, 0x0003003eu, 0x000045c8u, 0x000020f8u, 0x0003003eu, 0x000045c9u, 0x00004875u, 0x00050041u, 0x00000007u, 0x00005684u, 0x000045c9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005685u, 0x00005684u, 0x00050084u, 0x00000006u, 0x00005686u, 0x000044bfu, 0x00005685u, 0x00050080u, 0x00000006u, 0x00005687u, 0x000044bcu, 0x00005686u, 0x0003003eu, 0x0000567au, 0x00005687u, 0x00050041u, 0x00000007u, 0x00005688u, 0x000045c9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005689u, 0x00005688u, 0x000500c2u, 0x00000006u, 0x0000568au, 0x00005689u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000568cu, 0x00005687u, 0x0000568au, 0x0003003eu, 0x0000567au, 0x0000568cu, 0x000500c7u, 0x00000006u, 0x0000568eu, 0x0000568cu, 0x00000e59u, 0x0003003eu, 0x0000567au, 0x0000568eu, 0x0004003du, 0x00000006u, 0x00005690u, 0x00005688u, 0x000400c8u, 0x00000006u, 0x00005691u, 0x00005690u, 0x000500c7u, 0x00000006u, 0x00005692u, 0x00005691u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005693u, 0x00005692u, 0x00000701u, 0x0003003eu, 0x0000567bu, 0x00005693u, 0x0003003eu, 0x0000567cu, 0x0000568eu, 0x0004003du, 0x00000006u, 0x00005696u, 0x00005684u, 0x000500c7u, 0x00000006u, 0x00005697u, 0x00005696u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005698u, 0x00005697u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000569au, 0x0000568eu, 0x00005698u, 0x0003003eu, 0x0000567cu, 0x0000569au, 0x000500c6u, 0x00000006u, 0x0000569cu, 0x0000569au, 0x0000048bu, 0x0003003eu, 0x0000567cu, 0x0000569cu, 0x00080041u, 0x00000277u, 0x0000569fu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000569cu, 0x0004003du, 0x00000229u, 0x000056a0u, 0x0000569fu, 0x00040071u, 0x00000006u, 0x000056a1u, 0x000056a0u, 0x0003003eu, 0x0000567du, 0x000056a1u, 0x000500c2u, 0x00000006u, 0x000056a4u, 0x000056a1u, 0x00005693u, 0x000500c7u, 0x00000006u, 0x000056a5u, 0x000056a4u, 0x00000e7cu, 0x0003003eu, 0x0000567du, 0x000056a5u, 0x000500c7u, 0x00000006u, 0x000056a7u, 0x000056a5u, 0x00000eb3u, 0x0003003eu, 0x0000567eu, 0x000056a7u, 0x000500c4u, 0x00000006u, 0x000056a9u, 0x000056a7u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x000056abu, 0x000056a7u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x000056acu, 0x000056a9u, 0x000056abu, 0x000500c2u, 0x00000006u, 0x000056aeu, 0x000056a7u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x000056afu, 0x000056acu, 0x000056aeu, 0x0003003eu, 0x0000567eu, 0x000056afu, 0x0004007cu, 0x00000008u, 0x000056b1u, 0x000056afu, 0x000500c7u, 0x00000006u, 0x000056b7u, 0x000056a5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000056b8u, 0x000056b7u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000056b9u, 0x000056b8u, 0x00070050u, 0x00000009u, 0x000056bau, 0x000056b1u, 0x000056b1u, 0x000056b1u, 0x000056b9u, 0x0003003eu, 0x0000567fu, 0x000056bau, 0x0003003eu, 0x00004517u, 0x000056bau, 0x000200f9u, 0x00004869u, 0x000200f8u, 0x00004869u, 0x000700f5u, 0x00000009u, 0x00009b32u, 0x00009a79u, 0x0000485fu, 0x000056bau, 0x0000486au, 0x000700f5u, 0x00000009u, 0x00009966u, 0x000098aau, 0x0000485fu, 0x00005679u, 0x0000486au, 0x000300f7u, 0x0000487au, 0x00000000u, 0x000400fau, 0x0000467bu, 0x0000487bu, 0x0000487au, 0x000200f8u, 0x0000487bu, 0x00050050u, 0x0000005fu, 0x0000487eu, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000487fu, 0x0000487eu, 0x0003003eu, 0x00006a40u, 0x000044bcu, 0x0003003eu, 0x00006a41u, 0x000044bfu, 0x0003003eu, 0x000045cbu, 0x000020f8u, 0x0003003eu, 0x000045ccu, 0x0000487fu, 0x00050041u, 0x00000007u, 0x000056c5u, 0x000045ccu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000056c6u, 0x000056c5u, 0x00050084u, 0x00000006u, 0x000056c7u, 0x000044bfu, 0x000056c6u, 0x00050080u, 0x00000006u, 0x000056c8u, 0x000044bcu, 0x000056c7u, 0x0003003eu, 0x000056bbu, 0x000056c8u, 0x00050041u, 0x00000007u, 0x000056c9u, 0x000045ccu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000056cau, 0x000056c9u, 0x000500c2u, 0x00000006u, 0x000056cbu, 0x000056cau, 0x00000212u, 0x00050080u, 0x00000006u, 0x000056cdu, 0x000056c8u, 0x000056cbu, 0x0003003eu, 0x000056bbu, 0x000056cdu, 0x000500c7u, 0x00000006u, 0x000056cfu, 0x000056cdu, 0x00000e59u, 0x0003003eu, 0x000056bbu, 0x000056cfu, 0x0004003du, 0x00000006u, 0x000056d1u, 0x000056c9u, 0x000400c8u, 0x00000006u, 0x000056d2u, 0x000056d1u, 0x000500c7u, 0x00000006u, 0x000056d3u, 0x000056d2u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000056d4u, 0x000056d3u, 0x00000701u, 0x0003003eu, 0x000056bcu, 0x000056d4u, 0x0003003eu, 0x000056bdu, 0x000056cfu, 0x0004003du, 0x00000006u, 0x000056d7u, 0x000056c5u, 0x000500c7u, 0x00000006u, 0x000056d8u, 0x000056d7u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000056d9u, 0x000056d8u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000056dbu, 0x000056cfu, 0x000056d9u, 0x0003003eu, 0x000056bdu, 0x000056dbu, 0x000500c6u, 0x00000006u, 0x000056ddu, 0x000056dbu, 0x0000048bu, 0x0003003eu, 0x000056bdu, 0x000056ddu, 0x00080041u, 0x00000277u, 0x000056e0u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000056ddu, 0x0004003du, 0x00000229u, 0x000056e1u, 0x000056e0u, 0x00040071u, 0x00000006u, 0x000056e2u, 0x000056e1u, 0x0003003eu, 0x000056beu, 0x000056e2u, 0x000500c2u, 0x00000006u, 0x000056e5u, 0x000056e2u, 0x000056d4u, 0x000500c7u, 0x00000006u, 0x000056e6u, 0x000056e5u, 0x00000e7cu, 0x0003003eu, 0x000056beu, 0x000056e6u, 0x000500c7u, 0x00000006u, 0x000056e8u, 0x000056e6u, 0x00000eb3u, 0x0003003eu, 0x000056bfu, 0x000056e8u, 0x000500c4u, 0x00000006u, 0x000056eau, 0x000056e8u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x000056ecu, 0x000056e8u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x000056edu, 0x000056eau, 0x000056ecu, 0x000500c2u, 0x00000006u, 0x000056efu, 0x000056e8u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x000056f0u, 0x000056edu, 0x000056efu, 0x0003003eu, 0x000056bfu, 0x000056f0u, 0x0004007cu, 0x00000008u, 0x000056f2u, 0x000056f0u, 0x000500c7u, 0x00000006u, 0x000056f8u, 0x000056e6u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000056f9u, 0x000056f8u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000056fau, 0x000056f9u, 0x00070050u, 0x00000009u, 0x000056fbu, 0x000056f2u, 0x000056f2u, 0x000056f2u, 0x000056fau, 0x0003003eu, 0x000056c0u, 0x000056fbu, 0x0003003eu, 0x0000451fu, 0x000056fbu, 0x000200f9u, 0x0000487au, 0x000200f8u, 0x0000487au, 0x000700f5u, 0x00000009u, 0x00009c18u, 0x00009b5du, 0x00004869u, 0x000056fbu, 0x0000487bu, 0x000200f9u, 0x0000485eu, 0x000200f8u, 0x0000485eu, 0x000d00f5u, 0x00000009u, 0x00009c17u, 0x00009b5du, 0x00004734u, 0x00009c18u, 0x0000487au, 0x00009c1au, 0x0000489au, 0x00009c1cu, 0x000048bau, 0x00009c1eu, 0x000048dau, 0x000d00f5u, 0x00000009u, 0x00009b30u, 0x00009a79u, 0x00004734u, 0x00009b32u, 0x0000487au, 0x00009b34u, 0x0000489au, 0x00009b36u, 0x000048bau, 0x00009b38u, 0x000048dau, 0x000d00f5u, 0x00000009u, 0x00009a4bu, 0x00009992u, 0x00004734u, 0x00005638u, 0x0000487au, 0x00005732u, 0x0000489au, 0x0000580cu, 0x000048bau, 0x000058d5u, 0x000048dau, 0x000d00f5u, 0x00000009u, 0x00009964u, 0x000098aau, 0x00004734u, 0x00009966u, 0x0000487au, 0x00009968u, 0x0000489au, 0x0000996au, 0x000048bau, 0x0000996cu, 0x000048dau, 0x000200f9u, 0x00004730u, 0x000200f8u, 0x00004733u, 0x000300f7u, 0x000047ecu, 0x00000000u, 0x000700fbu, 0x000044c9u, 0x000047edu, 0x00000000u, 0x000047eeu, 0x00000001u, 0x000047efu, 0x000200f8u, 0x000047efu, 0x0004007cu, 0x000000a2u, 0x0000483du, 0x0000951eu, 0x0003003eu, 0x00006a14u, 0x000044bcu, 0x0003003eu, 0x00006a15u, 0x000044bfu, 0x0003003eu, 0x000045aau, 0x000020f8u, 0x0003003eu, 0x000045abu, 0x0000483du, 0x00050041u, 0x00000007u, 0x00005574u, 0x000045abu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005575u, 0x00005574u, 0x00050084u, 0x00000006u, 0x00005576u, 0x000044bfu, 0x00005575u, 0x00050080u, 0x00000006u, 0x00005577u, 0x000044bcu, 0x00005576u, 0x0003003eu, 0x0000556cu, 0x00005577u, 0x00050041u, 0x00000007u, 0x00005578u, 0x000045abu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005579u, 0x00005578u, 0x00050080u, 0x00000006u, 0x0000557bu, 0x00005577u, 0x00005579u, 0x0003003eu, 0x0000556cu, 0x0000557bu, 0x000500c7u, 0x00000006u, 0x0000557du, 0x0000557bu, 0x00000e59u, 0x0003003eu, 0x0000556cu, 0x0000557du, 0x0003003eu, 0x0000556du, 0x0000557du, 0x0004003du, 0x00000006u, 0x00005580u, 0x00005574u, 0x000500c7u, 0x00000006u, 0x00005581u, 0x00005580u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005582u, 0x00005581u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005584u, 0x0000557du, 0x00005582u, 0x0003003eu, 0x0000556du, 0x00005584u, 0x000500c6u, 0x00000006u, 0x00005586u, 0x00005584u, 0x0000048bu, 0x0003003eu, 0x0000556du, 0x00005586u, 0x00080041u, 0x00000277u, 0x00005589u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005586u, 0x0004003du, 0x00000229u, 0x0000558au, 0x00005589u, 0x00040071u, 0x00000006u, 0x0000558bu, 0x0000558au, 0x0003003eu, 0x0000556eu, 0x0000558bu, 0x0004007cu, 0x00000008u, 0x0000558du, 0x0000558bu, 0x00070050u, 0x00000009u, 0x0000558eu, 0x0000558du, 0x0000558du, 0x0000558du, 0x0000558du, 0x0003003eu, 0x0000556fu, 0x0000558eu, 0x0003003eu, 0x00004507u, 0x0000558eu, 0x000300f7u, 0x00004842u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004843u, 0x00004842u, 0x000200f8u, 0x00004843u, 0x00050050u, 0x0000005fu, 0x00004846u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004847u, 0x00004846u, 0x0003003eu, 0x00006a18u, 0x000044bcu, 0x0003003eu, 0x00006a19u, 0x000044bfu, 0x0003003eu, 0x000045adu, 0x000020f8u, 0x0003003eu, 0x000045aeu, 0x00004847u, 0x00050041u, 0x00000007u, 0x00005597u, 0x000045aeu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005598u, 0x00005597u, 0x00050084u, 0x00000006u, 0x00005599u, 0x000044bfu, 0x00005598u, 0x00050080u, 0x00000006u, 0x0000559au, 0x000044bcu, 0x00005599u, 0x0003003eu, 0x0000558fu, 0x0000559au, 0x00050041u, 0x00000007u, 0x0000559bu, 0x000045aeu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000559cu, 0x0000559bu, 0x00050080u, 0x00000006u, 0x0000559eu, 0x0000559au, 0x0000559cu, 0x0003003eu, 0x0000558fu, 0x0000559eu, 0x000500c7u, 0x00000006u, 0x000055a0u, 0x0000559eu, 0x00000e59u, 0x0003003eu, 0x0000558fu, 0x000055a0u, 0x0003003eu, 0x00005590u, 0x000055a0u, 0x0004003du, 0x00000006u, 0x000055a3u, 0x00005597u, 0x000500c7u, 0x00000006u, 0x000055a4u, 0x000055a3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000055a5u, 0x000055a4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000055a7u, 0x000055a0u, 0x000055a5u, 0x0003003eu, 0x00005590u, 0x000055a7u, 0x000500c6u, 0x00000006u, 0x000055a9u, 0x000055a7u, 0x0000048bu, 0x0003003eu, 0x00005590u, 0x000055a9u, 0x00080041u, 0x00000277u, 0x000055acu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000055a9u, 0x0004003du, 0x00000229u, 0x000055adu, 0x000055acu, 0x00040071u, 0x00000006u, 0x000055aeu, 0x000055adu, 0x0003003eu, 0x00005591u, 0x000055aeu, 0x0004007cu, 0x00000008u, 0x000055b0u, 0x000055aeu, 0x00070050u, 0x00000009u, 0x000055b1u, 0x000055b0u, 0x000055b0u, 0x000055b0u, 0x000055b0u, 0x0003003eu, 0x00005592u, 0x000055b1u, 0x0003003eu, 0x0000450fu, 0x000055b1u, 0x00050050u, 0x0000005fu, 0x0000484du, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000484eu, 0x0000484du, 0x0003003eu, 0x00006a1cu, 0x000044bcu, 0x0003003eu, 0x00006a1du, 0x000044bfu, 0x0003003eu, 0x000045b0u, 0x000020f8u, 0x0003003eu, 0x000045b1u, 0x0000484eu, 0x00050041u, 0x00000007u, 0x000055bau, 0x000045b1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000055bbu, 0x000055bau, 0x00050084u, 0x00000006u, 0x000055bcu, 0x000044bfu, 0x000055bbu, 0x00050080u, 0x00000006u, 0x000055bdu, 0x000044bcu, 0x000055bcu, 0x0003003eu, 0x000055b2u, 0x000055bdu, 0x00050041u, 0x00000007u, 0x000055beu, 0x000045b1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000055bfu, 0x000055beu, 0x00050080u, 0x00000006u, 0x000055c1u, 0x000055bdu, 0x000055bfu, 0x0003003eu, 0x000055b2u, 0x000055c1u, 0x000500c7u, 0x00000006u, 0x000055c3u, 0x000055c1u, 0x00000e59u, 0x0003003eu, 0x000055b2u, 0x000055c3u, 0x0003003eu, 0x000055b3u, 0x000055c3u, 0x0004003du, 0x00000006u, 0x000055c6u, 0x000055bau, 0x000500c7u, 0x00000006u, 0x000055c7u, 0x000055c6u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000055c8u, 0x000055c7u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000055cau, 0x000055c3u, 0x000055c8u, 0x0003003eu, 0x000055b3u, 0x000055cau, 0x000500c6u, 0x00000006u, 0x000055ccu, 0x000055cau, 0x0000048bu, 0x0003003eu, 0x000055b3u, 0x000055ccu, 0x00080041u, 0x00000277u, 0x000055cfu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000055ccu, 0x0004003du, 0x00000229u, 0x000055d0u, 0x000055cfu, 0x00040071u, 0x00000006u, 0x000055d1u, 0x000055d0u, 0x0003003eu, 0x000055b4u, 0x000055d1u, 0x0004007cu, 0x00000008u, 0x000055d3u, 0x000055d1u, 0x00070050u, 0x00000009u, 0x000055d4u, 0x000055d3u, 0x000055d3u, 0x000055d3u, 0x000055d3u, 0x0003003eu, 0x000055b5u, 0x000055d4u, 0x0003003eu, 0x00004517u, 0x000055d4u, 0x000200f9u, 0x00004842u, 0x000200f8u, 0x00004842u, 0x000700f5u, 0x00000009u, 0x00009b2fu, 0x00009a79u, 0x000047efu, 0x000055d4u, 0x00004843u, 0x000700f5u, 0x00000009u, 0x00009963u, 0x000098aau, 0x000047efu, 0x000055b1u, 0x00004843u, 0x000300f7u, 0x00004853u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004854u, 0x00004853u, 0x000200f8u, 0x00004854u, 0x00050050u, 0x0000005fu, 0x00004857u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004858u, 0x00004857u, 0x0003003eu, 0x00006a20u, 0x000044bcu, 0x0003003eu, 0x00006a21u, 0x000044bfu, 0x0003003eu, 0x000045b3u, 0x000020f8u, 0x0003003eu, 0x000045b4u, 0x00004858u, 0x00050041u, 0x00000007u, 0x000055ddu, 0x000045b4u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000055deu, 0x000055ddu, 0x00050084u, 0x00000006u, 0x000055dfu, 0x000044bfu, 0x000055deu, 0x00050080u, 0x00000006u, 0x000055e0u, 0x000044bcu, 0x000055dfu, 0x0003003eu, 0x000055d5u, 0x000055e0u, 0x00050041u, 0x00000007u, 0x000055e1u, 0x000045b4u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000055e2u, 0x000055e1u, 0x00050080u, 0x00000006u, 0x000055e4u, 0x000055e0u, 0x000055e2u, 0x0003003eu, 0x000055d5u, 0x000055e4u, 0x000500c7u, 0x00000006u, 0x000055e6u, 0x000055e4u, 0x00000e59u, 0x0003003eu, 0x000055d5u, 0x000055e6u, 0x0003003eu, 0x000055d6u, 0x000055e6u, 0x0004003du, 0x00000006u, 0x000055e9u, 0x000055ddu, 0x000500c7u, 0x00000006u, 0x000055eau, 0x000055e9u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000055ebu, 0x000055eau, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000055edu, 0x000055e6u, 0x000055ebu, 0x0003003eu, 0x000055d6u, 0x000055edu, 0x000500c6u, 0x00000006u, 0x000055efu, 0x000055edu, 0x0000048bu, 0x0003003eu, 0x000055d6u, 0x000055efu, 0x00080041u, 0x00000277u, 0x000055f2u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000055efu, 0x0004003du, 0x00000229u, 0x000055f3u, 0x000055f2u, 0x00040071u, 0x00000006u, 0x000055f4u, 0x000055f3u, 0x0003003eu, 0x000055d7u, 0x000055f4u, 0x0004007cu, 0x00000008u, 0x000055f6u, 0x000055f4u, 0x00070050u, 0x00000009u, 0x000055f7u, 0x000055f6u, 0x000055f6u, 0x000055f6u, 0x000055f6u, 0x0003003eu, 0x000055d8u, 0x000055f7u, 0x0003003eu, 0x0000451fu, 0x000055f7u, 0x000200f9u, 0x00004853u, 0x000200f8u, 0x00004853u, 0x000700f5u, 0x00000009u, 0x00009c15u, 0x00009b5du, 0x00004842u, 0x000055f7u, 0x00004854u, 0x000200f9u, 0x000047ecu, 0x000200f8u, 0x000047eeu, 0x0004007cu, 0x000000a2u, 0x00004811u, 0x0000951eu, 0x0004007cu, 0x00000006u, 0x00004814u, 0x000044ceu, 0x0003003eu, 0x00006a04u, 0x000044bcu, 0x0003003eu, 0x00006a05u, 0x000044bfu, 0x0003003eu, 0x0000459au, 0x000020f8u, 0x0003003eu, 0x0000459bu, 0x00004811u, 0x0003003eu, 0x0000459cu, 0x00004814u, 0x00050041u, 0x00000007u, 0x000054adu, 0x0000459bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000054aeu, 0x000054adu, 0x00050084u, 0x00000006u, 0x000054afu, 0x000044bfu, 0x000054aeu, 0x00050080u, 0x00000006u, 0x000054b0u, 0x000044bcu, 0x000054afu, 0x0003003eu, 0x000054a4u, 0x000054b0u, 0x00050041u, 0x00000007u, 0x000054b1u, 0x0000459bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000054b2u, 0x000054b1u, 0x000500c2u, 0x00000006u, 0x000054b3u, 0x000054b2u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000054b5u, 0x000054b0u, 0x000054b3u, 0x0003003eu, 0x000054a4u, 0x000054b5u, 0x000500c7u, 0x00000006u, 0x000054b7u, 0x000054b5u, 0x00000e59u, 0x0003003eu, 0x000054a4u, 0x000054b7u, 0x0004003du, 0x00000006u, 0x000054b9u, 0x000054b1u, 0x000400c8u, 0x00000006u, 0x000054bau, 0x000054b9u, 0x000500c7u, 0x00000006u, 0x000054bbu, 0x000054bau, 0x00000485u, 0x00050084u, 0x00000006u, 0x000054bcu, 0x000054bbu, 0x00000701u, 0x0003003eu, 0x000054a5u, 0x000054bcu, 0x0003003eu, 0x000054a6u, 0x000054b7u, 0x0004003du, 0x00000006u, 0x000054bfu, 0x000054adu, 0x000500c7u, 0x00000006u, 0x000054c0u, 0x000054bfu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000054c1u, 0x000054c0u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000054c3u, 0x000054b7u, 0x000054c1u, 0x0003003eu, 0x000054a6u, 0x000054c3u, 0x000500c6u, 0x00000006u, 0x000054c5u, 0x000054c3u, 0x0000048bu, 0x0003003eu, 0x000054a6u, 0x000054c5u, 0x00080041u, 0x00000277u, 0x000054c8u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000054c5u, 0x0004003du, 0x00000229u, 0x000054c9u, 0x000054c8u, 0x00040071u, 0x00000006u, 0x000054cau, 0x000054c9u, 0x0003003eu, 0x000054a7u, 0x000054cau, 0x000500c2u, 0x00000006u, 0x000054cdu, 0x000054cau, 0x000054bcu, 0x000500c7u, 0x00000006u, 0x000054ceu, 0x000054cdu, 0x00000e7cu, 0x0003003eu, 0x000054a7u, 0x000054ceu, 0x000500c4u, 0x00000006u, 0x000054d0u, 0x00004814u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x000054d2u, 0x000054ceu, 0x000054d0u, 0x0003003eu, 0x000054a7u, 0x000054d2u, 0x0004007cu, 0x00000008u, 0x000054d4u, 0x000054d2u, 0x00070050u, 0x00000009u, 0x000054d5u, 0x000054d4u, 0x000054d4u, 0x000054d4u, 0x000054d4u, 0x0003003eu, 0x000054a8u, 0x000054d5u, 0x0003003eu, 0x00004507u, 0x000054d5u, 0x000300f7u, 0x00004819u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x0000481au, 0x00004819u, 0x000200f8u, 0x0000481au, 0x00050050u, 0x0000005fu, 0x0000481du, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x0000481eu, 0x0000481du, 0x0003003eu, 0x00006a08u, 0x000044bcu, 0x0003003eu, 0x00006a09u, 0x000044bfu, 0x0003003eu, 0x0000459eu, 0x000020f8u, 0x0003003eu, 0x0000459fu, 0x0000481eu, 0x0003003eu, 0x000045a0u, 0x00004814u, 0x00050041u, 0x00000007u, 0x000054dfu, 0x0000459fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000054e0u, 0x000054dfu, 0x00050084u, 0x00000006u, 0x000054e1u, 0x000044bfu, 0x000054e0u, 0x00050080u, 0x00000006u, 0x000054e2u, 0x000044bcu, 0x000054e1u, 0x0003003eu, 0x000054d6u, 0x000054e2u, 0x00050041u, 0x00000007u, 0x000054e3u, 0x0000459fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000054e4u, 0x000054e3u, 0x000500c2u, 0x00000006u, 0x000054e5u, 0x000054e4u, 0x00000212u, 0x00050080u, 0x00000006u, 0x000054e7u, 0x000054e2u, 0x000054e5u, 0x0003003eu, 0x000054d6u, 0x000054e7u, 0x000500c7u, 0x00000006u, 0x000054e9u, 0x000054e7u, 0x00000e59u, 0x0003003eu, 0x000054d6u, 0x000054e9u, 0x0004003du, 0x00000006u, 0x000054ebu, 0x000054e3u, 0x000400c8u, 0x00000006u, 0x000054ecu, 0x000054ebu, 0x000500c7u, 0x00000006u, 0x000054edu, 0x000054ecu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000054eeu, 0x000054edu, 0x00000701u, 0x0003003eu, 0x000054d7u, 0x000054eeu, 0x0003003eu, 0x000054d8u, 0x000054e9u, 0x0004003du, 0x00000006u, 0x000054f1u, 0x000054dfu, 0x000500c7u, 0x00000006u, 0x000054f2u, 0x000054f1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000054f3u, 0x000054f2u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000054f5u, 0x000054e9u, 0x000054f3u, 0x0003003eu, 0x000054d8u, 0x000054f5u, 0x000500c6u, 0x00000006u, 0x000054f7u, 0x000054f5u, 0x0000048bu, 0x0003003eu, 0x000054d8u, 0x000054f7u, 0x00080041u, 0x00000277u, 0x000054fau, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000054f7u, 0x0004003du, 0x00000229u, 0x000054fbu, 0x000054fau, 0x00040071u, 0x00000006u, 0x000054fcu, 0x000054fbu, 0x0003003eu, 0x000054d9u, 0x000054fcu, 0x000500c2u, 0x00000006u, 0x000054ffu, 0x000054fcu, 0x000054eeu, 0x000500c7u, 0x00000006u, 0x00005500u, 0x000054ffu, 0x00000e7cu, 0x0003003eu, 0x000054d9u, 0x00005500u, 0x000500c5u, 0x00000006u, 0x00005504u, 0x00005500u, 0x000054d0u, 0x0003003eu, 0x000054d9u, 0x00005504u, 0x0004007cu, 0x00000008u, 0x00005506u, 0x00005504u, 0x00070050u, 0x00000009u, 0x00005507u, 0x00005506u, 0x00005506u, 0x00005506u, 0x00005506u, 0x0003003eu, 0x000054dau, 0x00005507u, 0x0003003eu, 0x0000450fu, 0x00005507u, 0x00050050u, 0x0000005fu, 0x00004827u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004828u, 0x00004827u, 0x0003003eu, 0x00006a0cu, 0x000044bcu, 0x0003003eu, 0x00006a0du, 0x000044bfu, 0x0003003eu, 0x000045a2u, 0x000020f8u, 0x0003003eu, 0x000045a3u, 0x00004828u, 0x0003003eu, 0x000045a4u, 0x00004814u, 0x00050041u, 0x00000007u, 0x00005511u, 0x000045a3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005512u, 0x00005511u, 0x00050084u, 0x00000006u, 0x00005513u, 0x000044bfu, 0x00005512u, 0x00050080u, 0x00000006u, 0x00005514u, 0x000044bcu, 0x00005513u, 0x0003003eu, 0x00005508u, 0x00005514u, 0x00050041u, 0x00000007u, 0x00005515u, 0x000045a3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005516u, 0x00005515u, 0x000500c2u, 0x00000006u, 0x00005517u, 0x00005516u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00005519u, 0x00005514u, 0x00005517u, 0x0003003eu, 0x00005508u, 0x00005519u, 0x000500c7u, 0x00000006u, 0x0000551bu, 0x00005519u, 0x00000e59u, 0x0003003eu, 0x00005508u, 0x0000551bu, 0x0004003du, 0x00000006u, 0x0000551du, 0x00005515u, 0x000400c8u, 0x00000006u, 0x0000551eu, 0x0000551du, 0x000500c7u, 0x00000006u, 0x0000551fu, 0x0000551eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005520u, 0x0000551fu, 0x00000701u, 0x0003003eu, 0x00005509u, 0x00005520u, 0x0003003eu, 0x0000550au, 0x0000551bu, 0x0004003du, 0x00000006u, 0x00005523u, 0x00005511u, 0x000500c7u, 0x00000006u, 0x00005524u, 0x00005523u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005525u, 0x00005524u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005527u, 0x0000551bu, 0x00005525u, 0x0003003eu, 0x0000550au, 0x00005527u, 0x000500c6u, 0x00000006u, 0x00005529u, 0x00005527u, 0x0000048bu, 0x0003003eu, 0x0000550au, 0x00005529u, 0x00080041u, 0x00000277u, 0x0000552cu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005529u, 0x0004003du, 0x00000229u, 0x0000552du, 0x0000552cu, 0x00040071u, 0x00000006u, 0x0000552eu, 0x0000552du, 0x0003003eu, 0x0000550bu, 0x0000552eu, 0x000500c2u, 0x00000006u, 0x00005531u, 0x0000552eu, 0x00005520u, 0x000500c7u, 0x00000006u, 0x00005532u, 0x00005531u, 0x00000e7cu, 0x0003003eu, 0x0000550bu, 0x00005532u, 0x000500c5u, 0x00000006u, 0x00005536u, 0x00005532u, 0x000054d0u, 0x0003003eu, 0x0000550bu, 0x00005536u, 0x0004007cu, 0x00000008u, 0x00005538u, 0x00005536u, 0x00070050u, 0x00000009u, 0x00005539u, 0x00005538u, 0x00005538u, 0x00005538u, 0x00005538u, 0x0003003eu, 0x0000550cu, 0x00005539u, 0x0003003eu, 0x00004517u, 0x00005539u, 0x000200f9u, 0x00004819u, 0x000200f8u, 0x00004819u, 0x000700f5u, 0x00000009u, 0x00009b2du, 0x00009a79u, 0x000047eeu, 0x00005539u, 0x0000481au, 0x000700f5u, 0x00000009u, 0x00009961u, 0x000098aau, 0x000047eeu, 0x00005507u, 0x0000481au, 0x000300f7u, 0x00004830u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004831u, 0x00004830u, 0x000200f8u, 0x00004831u, 0x00050050u, 0x0000005fu, 0x00004834u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004835u, 0x00004834u, 0x0003003eu, 0x00006a10u, 0x000044bcu, 0x0003003eu, 0x00006a11u, 0x000044bfu, 0x0003003eu, 0x000045a6u, 0x000020f8u, 0x0003003eu, 0x000045a7u, 0x00004835u, 0x0003003eu, 0x000045a8u, 0x00004814u, 0x00050041u, 0x00000007u, 0x00005543u, 0x000045a7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005544u, 0x00005543u, 0x00050084u, 0x00000006u, 0x00005545u, 0x000044bfu, 0x00005544u, 0x00050080u, 0x00000006u, 0x00005546u, 0x000044bcu, 0x00005545u, 0x0003003eu, 0x0000553au, 0x00005546u, 0x00050041u, 0x00000007u, 0x00005547u, 0x000045a7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005548u, 0x00005547u, 0x000500c2u, 0x00000006u, 0x00005549u, 0x00005548u, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000554bu, 0x00005546u, 0x00005549u, 0x0003003eu, 0x0000553au, 0x0000554bu, 0x000500c7u, 0x00000006u, 0x0000554du, 0x0000554bu, 0x00000e59u, 0x0003003eu, 0x0000553au, 0x0000554du, 0x0004003du, 0x00000006u, 0x0000554fu, 0x00005547u, 0x000400c8u, 0x00000006u, 0x00005550u, 0x0000554fu, 0x000500c7u, 0x00000006u, 0x00005551u, 0x00005550u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005552u, 0x00005551u, 0x00000701u, 0x0003003eu, 0x0000553bu, 0x00005552u, 0x0003003eu, 0x0000553cu, 0x0000554du, 0x0004003du, 0x00000006u, 0x00005555u, 0x00005543u, 0x000500c7u, 0x00000006u, 0x00005556u, 0x00005555u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005557u, 0x00005556u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005559u, 0x0000554du, 0x00005557u, 0x0003003eu, 0x0000553cu, 0x00005559u, 0x000500c6u, 0x00000006u, 0x0000555bu, 0x00005559u, 0x0000048bu, 0x0003003eu, 0x0000553cu, 0x0000555bu, 0x00080041u, 0x00000277u, 0x0000555eu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000555bu, 0x0004003du, 0x00000229u, 0x0000555fu, 0x0000555eu, 0x00040071u, 0x00000006u, 0x00005560u, 0x0000555fu, 0x0003003eu, 0x0000553du, 0x00005560u, 0x000500c2u, 0x00000006u, 0x00005563u, 0x00005560u, 0x00005552u, 0x000500c7u, 0x00000006u, 0x00005564u, 0x00005563u, 0x00000e7cu, 0x0003003eu, 0x0000553du, 0x00005564u, 0x000500c5u, 0x00000006u, 0x00005568u, 0x00005564u, 0x000054d0u, 0x0003003eu, 0x0000553du, 0x00005568u, 0x0004007cu, 0x00000008u, 0x0000556au, 0x00005568u, 0x00070050u, 0x00000009u, 0x0000556bu, 0x0000556au, 0x0000556au, 0x0000556au, 0x0000556au, 0x0003003eu, 0x0000553eu, 0x0000556bu, 0x0003003eu, 0x0000451fu, 0x0000556bu, 0x000200f9u, 0x00004830u, 0x000200f8u, 0x00004830u, 0x000700f5u, 0x00000009u, 0x00009c13u, 0x00009b5du, 0x00004819u, 0x0000556bu, 0x00004831u, 0x000200f9u, 0x000047ecu, 0x000200f8u, 0x000047edu, 0x0004007cu, 0x000000a2u, 0x000047f1u, 0x0000951eu, 0x0003003eu, 0x00006a24u, 0x000044bcu, 0x0003003eu, 0x00006a25u, 0x000044bfu, 0x0003003eu, 0x000045b6u, 0x000020f8u, 0x0003003eu, 0x000045b7u, 0x000047f1u, 0x00050041u, 0x00000007u, 0x00005404u, 0x000045b7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005405u, 0x00005404u, 0x00050084u, 0x00000006u, 0x00005406u, 0x000044bfu, 0x00005405u, 0x00050080u, 0x00000006u, 0x00005407u, 0x000044bcu, 0x00005406u, 0x0003003eu, 0x000053fcu, 0x00005407u, 0x00050041u, 0x00000007u, 0x00005408u, 0x000045b7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005409u, 0x00005408u, 0x00050084u, 0x00000006u, 0x0000540au, 0x00005409u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000540cu, 0x00005407u, 0x0000540au, 0x0003003eu, 0x000053fcu, 0x0000540cu, 0x000500c7u, 0x00000006u, 0x0000540eu, 0x0000540cu, 0x00000e59u, 0x0003003eu, 0x000053fcu, 0x0000540eu, 0x000500c2u, 0x00000006u, 0x00005410u, 0x0000540eu, 0x00000212u, 0x0003003eu, 0x000053fdu, 0x00005410u, 0x0004003du, 0x00000006u, 0x00005412u, 0x00005404u, 0x000500c7u, 0x00000006u, 0x00005413u, 0x00005412u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005414u, 0x00005413u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005416u, 0x00005410u, 0x00005414u, 0x0003003eu, 0x000053fdu, 0x00005416u, 0x000500c6u, 0x00000006u, 0x00005418u, 0x00005416u, 0x00000485u, 0x0003003eu, 0x000053fdu, 0x00005418u, 0x00080041u, 0x00000270u, 0x0000541bu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005418u, 0x0004003du, 0x0000022bu, 0x0000541cu, 0x0000541bu, 0x00040071u, 0x00000006u, 0x0000541du, 0x0000541cu, 0x0003003eu, 0x000053feu, 0x0000541du, 0x000500c2u, 0x00000006u, 0x0000541fu, 0x0000541du, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005420u, 0x0000541fu, 0x000500c7u, 0x00000006u, 0x00005422u, 0x0000541du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005423u, 0x00005422u, 0x00050050u, 0x0000005fu, 0x00005424u, 0x00005420u, 0x00005423u, 0x0009004fu, 0x00000009u, 0x00005425u, 0x00005424u, 0x00005424u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000053ffu, 0x00005425u, 0x0003003eu, 0x00004507u, 0x00005425u, 0x000300f7u, 0x000047f6u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000047f7u, 0x000047f6u, 0x000200f8u, 0x000047f7u, 0x00050050u, 0x0000005fu, 0x000047fau, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000047fbu, 0x000047fau, 0x0003003eu, 0x00006a28u, 0x000044bcu, 0x0003003eu, 0x00006a29u, 0x000044bfu, 0x0003003eu, 0x000045b9u, 0x000020f8u, 0x0003003eu, 0x000045bau, 0x000047fbu, 0x00050041u, 0x00000007u, 0x0000542eu, 0x000045bau, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000542fu, 0x0000542eu, 0x00050084u, 0x00000006u, 0x00005430u, 0x000044bfu, 0x0000542fu, 0x00050080u, 0x00000006u, 0x00005431u, 0x000044bcu, 0x00005430u, 0x0003003eu, 0x00005426u, 0x00005431u, 0x00050041u, 0x00000007u, 0x00005432u, 0x000045bau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005433u, 0x00005432u, 0x00050084u, 0x00000006u, 0x00005434u, 0x00005433u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005436u, 0x00005431u, 0x00005434u, 0x0003003eu, 0x00005426u, 0x00005436u, 0x000500c7u, 0x00000006u, 0x00005438u, 0x00005436u, 0x00000e59u, 0x0003003eu, 0x00005426u, 0x00005438u, 0x000500c2u, 0x00000006u, 0x0000543au, 0x00005438u, 0x00000212u, 0x0003003eu, 0x00005427u, 0x0000543au, 0x0004003du, 0x00000006u, 0x0000543cu, 0x0000542eu, 0x000500c7u, 0x00000006u, 0x0000543du, 0x0000543cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000543eu, 0x0000543du, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005440u, 0x0000543au, 0x0000543eu, 0x0003003eu, 0x00005427u, 0x00005440u, 0x000500c6u, 0x00000006u, 0x00005442u, 0x00005440u, 0x00000485u, 0x0003003eu, 0x00005427u, 0x00005442u, 0x00080041u, 0x00000270u, 0x00005445u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005442u, 0x0004003du, 0x0000022bu, 0x00005446u, 0x00005445u, 0x00040071u, 0x00000006u, 0x00005447u, 0x00005446u, 0x0003003eu, 0x00005428u, 0x00005447u, 0x000500c2u, 0x00000006u, 0x00005449u, 0x00005447u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000544au, 0x00005449u, 0x000500c7u, 0x00000006u, 0x0000544cu, 0x00005447u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000544du, 0x0000544cu, 0x00050050u, 0x0000005fu, 0x0000544eu, 0x0000544au, 0x0000544du, 0x0009004fu, 0x00000009u, 0x0000544fu, 0x0000544eu, 0x0000544eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005429u, 0x0000544fu, 0x0003003eu, 0x0000450fu, 0x0000544fu, 0x00050050u, 0x0000005fu, 0x00004801u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004802u, 0x00004801u, 0x0003003eu, 0x00006a2cu, 0x000044bcu, 0x0003003eu, 0x00006a2du, 0x000044bfu, 0x0003003eu, 0x000045bcu, 0x000020f8u, 0x0003003eu, 0x000045bdu, 0x00004802u, 0x00050041u, 0x00000007u, 0x00005458u, 0x000045bdu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005459u, 0x00005458u, 0x00050084u, 0x00000006u, 0x0000545au, 0x000044bfu, 0x00005459u, 0x00050080u, 0x00000006u, 0x0000545bu, 0x000044bcu, 0x0000545au, 0x0003003eu, 0x00005450u, 0x0000545bu, 0x00050041u, 0x00000007u, 0x0000545cu, 0x000045bdu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000545du, 0x0000545cu, 0x00050084u, 0x00000006u, 0x0000545eu, 0x0000545du, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005460u, 0x0000545bu, 0x0000545eu, 0x0003003eu, 0x00005450u, 0x00005460u, 0x000500c7u, 0x00000006u, 0x00005462u, 0x00005460u, 0x00000e59u, 0x0003003eu, 0x00005450u, 0x00005462u, 0x000500c2u, 0x00000006u, 0x00005464u, 0x00005462u, 0x00000212u, 0x0003003eu, 0x00005451u, 0x00005464u, 0x0004003du, 0x00000006u, 0x00005466u, 0x00005458u, 0x000500c7u, 0x00000006u, 0x00005467u, 0x00005466u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005468u, 0x00005467u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000546au, 0x00005464u, 0x00005468u, 0x0003003eu, 0x00005451u, 0x0000546au, 0x000500c6u, 0x00000006u, 0x0000546cu, 0x0000546au, 0x00000485u, 0x0003003eu, 0x00005451u, 0x0000546cu, 0x00080041u, 0x00000270u, 0x0000546fu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000546cu, 0x0004003du, 0x0000022bu, 0x00005470u, 0x0000546fu, 0x00040071u, 0x00000006u, 0x00005471u, 0x00005470u, 0x0003003eu, 0x00005452u, 0x00005471u, 0x000500c2u, 0x00000006u, 0x00005473u, 0x00005471u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005474u, 0x00005473u, 0x000500c7u, 0x00000006u, 0x00005476u, 0x00005471u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005477u, 0x00005476u, 0x00050050u, 0x0000005fu, 0x00005478u, 0x00005474u, 0x00005477u, 0x0009004fu, 0x00000009u, 0x00005479u, 0x00005478u, 0x00005478u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005453u, 0x00005479u, 0x0003003eu, 0x00004517u, 0x00005479u, 0x000200f9u, 0x000047f6u, 0x000200f8u, 0x000047f6u, 0x000700f5u, 0x00000009u, 0x00009b2bu, 0x00009a79u, 0x000047edu, 0x00005479u, 0x000047f7u, 0x000700f5u, 0x00000009u, 0x0000995fu, 0x000098aau, 0x000047edu, 0x0000544fu, 0x000047f7u, 0x000300f7u, 0x00004807u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004808u, 0x00004807u, 0x000200f8u, 0x00004808u, 0x00050050u, 0x0000005fu, 0x0000480bu, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000480cu, 0x0000480bu, 0x0003003eu, 0x00006a30u, 0x000044bcu, 0x0003003eu, 0x00006a31u, 0x000044bfu, 0x0003003eu, 0x000045bfu, 0x000020f8u, 0x0003003eu, 0x000045c0u, 0x0000480cu, 0x00050041u, 0x00000007u, 0x00005482u, 0x000045c0u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005483u, 0x00005482u, 0x00050084u, 0x00000006u, 0x00005484u, 0x000044bfu, 0x00005483u, 0x00050080u, 0x00000006u, 0x00005485u, 0x000044bcu, 0x00005484u, 0x0003003eu, 0x0000547au, 0x00005485u, 0x00050041u, 0x00000007u, 0x00005486u, 0x000045c0u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005487u, 0x00005486u, 0x00050084u, 0x00000006u, 0x00005488u, 0x00005487u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000548au, 0x00005485u, 0x00005488u, 0x0003003eu, 0x0000547au, 0x0000548au, 0x000500c7u, 0x00000006u, 0x0000548cu, 0x0000548au, 0x00000e59u, 0x0003003eu, 0x0000547au, 0x0000548cu, 0x000500c2u, 0x00000006u, 0x0000548eu, 0x0000548cu, 0x00000212u, 0x0003003eu, 0x0000547bu, 0x0000548eu, 0x0004003du, 0x00000006u, 0x00005490u, 0x00005482u, 0x000500c7u, 0x00000006u, 0x00005491u, 0x00005490u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005492u, 0x00005491u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005494u, 0x0000548eu, 0x00005492u, 0x0003003eu, 0x0000547bu, 0x00005494u, 0x000500c6u, 0x00000006u, 0x00005496u, 0x00005494u, 0x00000485u, 0x0003003eu, 0x0000547bu, 0x00005496u, 0x00080041u, 0x00000270u, 0x00005499u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005496u, 0x0004003du, 0x0000022bu, 0x0000549au, 0x00005499u, 0x00040071u, 0x00000006u, 0x0000549bu, 0x0000549au, 0x0003003eu, 0x0000547cu, 0x0000549bu, 0x000500c2u, 0x00000006u, 0x0000549du, 0x0000549bu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000549eu, 0x0000549du, 0x000500c7u, 0x00000006u, 0x000054a0u, 0x0000549bu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000054a1u, 0x000054a0u, 0x00050050u, 0x0000005fu, 0x000054a2u, 0x0000549eu, 0x000054a1u, 0x0009004fu, 0x00000009u, 0x000054a3u, 0x000054a2u, 0x000054a2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000547du, 0x000054a3u, 0x0003003eu, 0x0000451fu, 0x000054a3u, 0x000200f9u, 0x00004807u, 0x000200f8u, 0x00004807u, 0x000700f5u, 0x00000009u, 0x00009c11u, 0x00009b5du, 0x000047f6u, 0x000054a3u, 0x00004808u, 0x000200f9u, 0x000047ecu, 0x000200f8u, 0x000047ecu, 0x000900f5u, 0x00000009u, 0x00009c10u, 0x00009c11u, 0x00004807u, 0x00009c13u, 0x00004830u, 0x00009c15u, 0x00004853u, 0x000900f5u, 0x00000009u, 0x00009b29u, 0x00009b2bu, 0x00004807u, 0x00009b2du, 0x00004830u, 0x00009b2fu, 0x00004853u, 0x000900f5u, 0x00000009u, 0x00009a44u, 0x00005425u, 0x00004807u, 0x000054d5u, 0x00004830u, 0x0000558eu, 0x00004853u, 0x000900f5u, 0x00000009u, 0x0000995du, 0x0000995fu, 0x00004807u, 0x00009961u, 0x00004830u, 0x00009963u, 0x00004853u, 0x000200f9u, 0x00004730u, 0x000200f8u, 0x00004732u, 0x000500c3u, 0x00000008u, 0x000047beu, 0x00009495u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x000047bfu, 0x000047beu, 0x0003003eu, 0x00004587u, 0x000047bfu, 0x00050082u, 0x00000008u, 0x000047c3u, 0x000094d3u, 0x00009495u, 0x00050080u, 0x00000008u, 0x000047c4u, 0x000094d3u, 0x000047c3u, 0x000500c3u, 0x00000008u, 0x000047c5u, 0x000047c4u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x000047c6u, 0x000047c5u, 0x0003003eu, 0x00004588u, 0x000047c6u, 0x00050050u, 0x0000005fu, 0x000047c9u, 0x00009495u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000047cau, 0x000047c9u, 0x0003003eu, 0x000069f4u, 0x000044bcu, 0x0003003eu, 0x000069f5u, 0x000044bfu, 0x0003003eu, 0x0000458au, 0x000020f8u, 0x0003003eu, 0x0000458bu, 0x000047cau, 0x0003003eu, 0x0000458cu, 0x000047bfu, 0x00050041u, 0x00000007u, 0x000052deu, 0x0000458bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000052dfu, 0x000052deu, 0x00050084u, 0x00000006u, 0x000052e0u, 0x000044bfu, 0x000052dfu, 0x00050080u, 0x00000006u, 0x000052e1u, 0x000044bcu, 0x000052e0u, 0x0003003eu, 0x000052d0u, 0x000052e1u, 0x00050041u, 0x00000007u, 0x000052e3u, 0x0000458bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000052e4u, 0x000052e3u, 0x00050080u, 0x00000006u, 0x000052e5u, 0x000052e1u, 0x000052e4u, 0x0003003eu, 0x000052d1u, 0x000052e5u, 0x000500c7u, 0x00000006u, 0x000052e7u, 0x000052e5u, 0x00000f0bu, 0x0003003eu, 0x000052d1u, 0x000052e7u, 0x00050084u, 0x00000006u, 0x000052eau, 0x000047bfu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000052ebu, 0x000052e1u, 0x000052eau, 0x0003003eu, 0x000052d2u, 0x000052ebu, 0x000500c7u, 0x00000006u, 0x000052edu, 0x000052ebu, 0x00000f0bu, 0x0003003eu, 0x000052d2u, 0x000052edu, 0x0003003eu, 0x000052d3u, 0x000052e7u, 0x0004003du, 0x00000006u, 0x000052f0u, 0x000052deu, 0x000500c7u, 0x00000006u, 0x000052f1u, 0x000052f0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000052f2u, 0x000052f1u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000052f4u, 0x000052e7u, 0x000052f2u, 0x0003003eu, 0x000052d3u, 0x000052f4u, 0x000500c6u, 0x00000006u, 0x000052f6u, 0x000052f4u, 0x0000048bu, 0x0003003eu, 0x000052d3u, 0x000052f6u, 0x000500c2u, 0x00000006u, 0x000052f8u, 0x000052edu, 0x00000212u, 0x0003003eu, 0x000052d4u, 0x000052f8u, 0x0004003du, 0x00000006u, 0x000052fau, 0x000052deu, 0x000500c7u, 0x00000006u, 0x000052fbu, 0x000052fau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000052fcu, 0x000052fbu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000052feu, 0x000052f8u, 0x000052fcu, 0x0003003eu, 0x000052d4u, 0x000052feu, 0x000500c6u, 0x00000006u, 0x00005300u, 0x000052feu, 0x00000485u, 0x0003003eu, 0x000052d4u, 0x00005300u, 0x000500c5u, 0x00000006u, 0x00005303u, 0x000052f6u, 0x00000f34u, 0x00080041u, 0x00000277u, 0x00005304u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005303u, 0x0004003du, 0x00000229u, 0x00005305u, 0x00005304u, 0x00040071u, 0x00000006u, 0x00005306u, 0x00005305u, 0x0004007cu, 0x00000008u, 0x00005307u, 0x00005306u, 0x0003003eu, 0x000052d5u, 0x00005307u, 0x00080041u, 0x00000270u, 0x0000530au, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005300u, 0x0004003du, 0x0000022bu, 0x0000530bu, 0x0000530au, 0x00040071u, 0x00000006u, 0x0000530cu, 0x0000530bu, 0x0004007cu, 0x00000008u, 0x0000530du, 0x0000530cu, 0x0003003eu, 0x000052d6u, 0x0000530du, 0x000500c3u, 0x00000008u, 0x0000530fu, 0x0000530du, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x00005310u, 0x0000530fu, 0x0000038bu, 0x0003003eu, 0x000052d7u, 0x00005310u, 0x000500c3u, 0x00000008u, 0x00005312u, 0x0000530du, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00005313u, 0x00005312u, 0x0000038bu, 0x0003003eu, 0x000052d8u, 0x00005313u, 0x00050082u, 0x00000008u, 0x00005315u, 0x00005310u, 0x00000623u, 0x00050082u, 0x00000008u, 0x00005317u, 0x00005313u, 0x00000623u, 0x00070050u, 0x00000009u, 0x0000531au, 0x00005315u, 0x00005317u, 0x00005307u, 0x00005307u, 0x0003003eu, 0x000052d9u, 0x0000531au, 0x0003003eu, 0x00004507u, 0x0000531au, 0x000300f7u, 0x000047d0u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000047d1u, 0x000047d0u, 0x000200f8u, 0x000047d1u, 0x00050050u, 0x0000005fu, 0x000047d4u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000047d5u, 0x000047d4u, 0x0003003eu, 0x000069f8u, 0x000044bcu, 0x0003003eu, 0x000069f9u, 0x000044bfu, 0x0003003eu, 0x0000458eu, 0x000020f8u, 0x0003003eu, 0x0000458fu, 0x000047d5u, 0x0003003eu, 0x00004590u, 0x000047c6u, 0x00050041u, 0x00000007u, 0x00005329u, 0x0000458fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000532au, 0x00005329u, 0x00050084u, 0x00000006u, 0x0000532bu, 0x000044bfu, 0x0000532au, 0x00050080u, 0x00000006u, 0x0000532cu, 0x000044bcu, 0x0000532bu, 0x0003003eu, 0x0000531bu, 0x0000532cu, 0x00050041u, 0x00000007u, 0x0000532eu, 0x0000458fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000532fu, 0x0000532eu, 0x00050080u, 0x00000006u, 0x00005330u, 0x0000532cu, 0x0000532fu, 0x0003003eu, 0x0000531cu, 0x00005330u, 0x000500c7u, 0x00000006u, 0x00005332u, 0x00005330u, 0x00000f0bu, 0x0003003eu, 0x0000531cu, 0x00005332u, 0x00050084u, 0x00000006u, 0x00005335u, 0x000047c6u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005336u, 0x0000532cu, 0x00005335u, 0x0003003eu, 0x0000531du, 0x00005336u, 0x000500c7u, 0x00000006u, 0x00005338u, 0x00005336u, 0x00000f0bu, 0x0003003eu, 0x0000531du, 0x00005338u, 0x0003003eu, 0x0000531eu, 0x00005332u, 0x0004003du, 0x00000006u, 0x0000533bu, 0x00005329u, 0x000500c7u, 0x00000006u, 0x0000533cu, 0x0000533bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000533du, 0x0000533cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000533fu, 0x00005332u, 0x0000533du, 0x0003003eu, 0x0000531eu, 0x0000533fu, 0x000500c6u, 0x00000006u, 0x00005341u, 0x0000533fu, 0x0000048bu, 0x0003003eu, 0x0000531eu, 0x00005341u, 0x000500c2u, 0x00000006u, 0x00005343u, 0x00005338u, 0x00000212u, 0x0003003eu, 0x0000531fu, 0x00005343u, 0x0004003du, 0x00000006u, 0x00005345u, 0x00005329u, 0x000500c7u, 0x00000006u, 0x00005346u, 0x00005345u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005347u, 0x00005346u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005349u, 0x00005343u, 0x00005347u, 0x0003003eu, 0x0000531fu, 0x00005349u, 0x000500c6u, 0x00000006u, 0x0000534bu, 0x00005349u, 0x00000485u, 0x0003003eu, 0x0000531fu, 0x0000534bu, 0x000500c5u, 0x00000006u, 0x0000534eu, 0x00005341u, 0x00000f34u, 0x00080041u, 0x00000277u, 0x0000534fu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000534eu, 0x0004003du, 0x00000229u, 0x00005350u, 0x0000534fu, 0x00040071u, 0x00000006u, 0x00005351u, 0x00005350u, 0x0004007cu, 0x00000008u, 0x00005352u, 0x00005351u, 0x0003003eu, 0x00005320u, 0x00005352u, 0x00080041u, 0x00000270u, 0x00005355u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000534bu, 0x0004003du, 0x0000022bu, 0x00005356u, 0x00005355u, 0x00040071u, 0x00000006u, 0x00005357u, 0x00005356u, 0x0004007cu, 0x00000008u, 0x00005358u, 0x00005357u, 0x0003003eu, 0x00005321u, 0x00005358u, 0x000500c3u, 0x00000008u, 0x0000535au, 0x00005358u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x0000535bu, 0x0000535au, 0x0000038bu, 0x0003003eu, 0x00005322u, 0x0000535bu, 0x000500c3u, 0x00000008u, 0x0000535du, 0x00005358u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x0000535eu, 0x0000535du, 0x0000038bu, 0x0003003eu, 0x00005323u, 0x0000535eu, 0x00050082u, 0x00000008u, 0x00005360u, 0x0000535bu, 0x00000623u, 0x00050082u, 0x00000008u, 0x00005362u, 0x0000535eu, 0x00000623u, 0x00070050u, 0x00000009u, 0x00005365u, 0x00005360u, 0x00005362u, 0x00005352u, 0x00005352u, 0x0003003eu, 0x00005324u, 0x00005365u, 0x0003003eu, 0x0000450fu, 0x00005365u, 0x00050050u, 0x0000005fu, 0x000047dcu, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000047ddu, 0x000047dcu, 0x0003003eu, 0x000069fcu, 0x000044bcu, 0x0003003eu, 0x000069fdu, 0x000044bfu, 0x0003003eu, 0x00004592u, 0x000020f8u, 0x0003003eu, 0x00004593u, 0x000047ddu, 0x0003003eu, 0x00004594u, 0x000047bfu, 0x00050041u, 0x00000007u, 0x00005374u, 0x00004593u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005375u, 0x00005374u, 0x00050084u, 0x00000006u, 0x00005376u, 0x000044bfu, 0x00005375u, 0x00050080u, 0x00000006u, 0x00005377u, 0x000044bcu, 0x00005376u, 0x0003003eu, 0x00005366u, 0x00005377u, 0x00050041u, 0x00000007u, 0x00005379u, 0x00004593u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000537au, 0x00005379u, 0x00050080u, 0x00000006u, 0x0000537bu, 0x00005377u, 0x0000537au, 0x0003003eu, 0x00005367u, 0x0000537bu, 0x000500c7u, 0x00000006u, 0x0000537du, 0x0000537bu, 0x00000f0bu, 0x0003003eu, 0x00005367u, 0x0000537du, 0x00050080u, 0x00000006u, 0x00005381u, 0x00005377u, 0x000052eau, 0x0003003eu, 0x00005368u, 0x00005381u, 0x000500c7u, 0x00000006u, 0x00005383u, 0x00005381u, 0x00000f0bu, 0x0003003eu, 0x00005368u, 0x00005383u, 0x0003003eu, 0x00005369u, 0x0000537du, 0x0004003du, 0x00000006u, 0x00005386u, 0x00005374u, 0x000500c7u, 0x00000006u, 0x00005387u, 0x00005386u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005388u, 0x00005387u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000538au, 0x0000537du, 0x00005388u, 0x0003003eu, 0x00005369u, 0x0000538au, 0x000500c6u, 0x00000006u, 0x0000538cu, 0x0000538au, 0x0000048bu, 0x0003003eu, 0x00005369u, 0x0000538cu, 0x000500c2u, 0x00000006u, 0x0000538eu, 0x00005383u, 0x00000212u, 0x0003003eu, 0x0000536au, 0x0000538eu, 0x0004003du, 0x00000006u, 0x00005390u, 0x00005374u, 0x000500c7u, 0x00000006u, 0x00005391u, 0x00005390u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005392u, 0x00005391u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005394u, 0x0000538eu, 0x00005392u, 0x0003003eu, 0x0000536au, 0x00005394u, 0x000500c6u, 0x00000006u, 0x00005396u, 0x00005394u, 0x00000485u, 0x0003003eu, 0x0000536au, 0x00005396u, 0x000500c5u, 0x00000006u, 0x00005399u, 0x0000538cu, 0x00000f34u, 0x00080041u, 0x00000277u, 0x0000539au, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005399u, 0x0004003du, 0x00000229u, 0x0000539bu, 0x0000539au, 0x00040071u, 0x00000006u, 0x0000539cu, 0x0000539bu, 0x0004007cu, 0x00000008u, 0x0000539du, 0x0000539cu, 0x0003003eu, 0x0000536bu, 0x0000539du, 0x00080041u, 0x00000270u, 0x000053a0u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005396u, 0x0004003du, 0x0000022bu, 0x000053a1u, 0x000053a0u, 0x00040071u, 0x00000006u, 0x000053a2u, 0x000053a1u, 0x0004007cu, 0x00000008u, 0x000053a3u, 0x000053a2u, 0x0003003eu, 0x0000536cu, 0x000053a3u, 0x000500c3u, 0x00000008u, 0x000053a5u, 0x000053a3u, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x000053a6u, 0x000053a5u, 0x0000038bu, 0x0003003eu, 0x0000536du, 0x000053a6u, 0x000500c3u, 0x00000008u, 0x000053a8u, 0x000053a3u, 0x00000203u, 0x000500c7u, 0x00000008u, 0x000053a9u, 0x000053a8u, 0x0000038bu, 0x0003003eu, 0x0000536eu, 0x000053a9u, 0x00050082u, 0x00000008u, 0x000053abu, 0x000053a6u, 0x00000623u, 0x00050082u, 0x00000008u, 0x000053adu, 0x000053a9u, 0x00000623u, 0x00070050u, 0x00000009u, 0x000053b0u, 0x000053abu, 0x000053adu, 0x0000539du, 0x0000539du, 0x0003003eu, 0x0000536fu, 0x000053b0u, 0x0003003eu, 0x00004517u, 0x000053b0u, 0x00050050u, 0x0000005fu, 0x000047e4u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000047e5u, 0x000047e4u, 0x0003003eu, 0x00006a00u, 0x000044bcu, 0x0003003eu, 0x00006a01u, 0x000044bfu, 0x0003003eu, 0x00004596u, 0x000020f8u, 0x0003003eu, 0x00004597u, 0x000047e5u, 0x0003003eu, 0x00004598u, 0x000047c6u, 0x00050041u, 0x00000007u, 0x000053bfu, 0x00004597u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000053c0u, 0x000053bfu, 0x00050084u, 0x00000006u, 0x000053c1u, 0x000044bfu, 0x000053c0u, 0x00050080u, 0x00000006u, 0x000053c2u, 0x000044bcu, 0x000053c1u, 0x0003003eu, 0x000053b1u, 0x000053c2u, 0x00050041u, 0x00000007u, 0x000053c4u, 0x00004597u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000053c5u, 0x000053c4u, 0x00050080u, 0x00000006u, 0x000053c6u, 0x000053c2u, 0x000053c5u, 0x0003003eu, 0x000053b2u, 0x000053c6u, 0x000500c7u, 0x00000006u, 0x000053c8u, 0x000053c6u, 0x00000f0bu, 0x0003003eu, 0x000053b2u, 0x000053c8u, 0x00050080u, 0x00000006u, 0x000053ccu, 0x000053c2u, 0x00005335u, 0x0003003eu, 0x000053b3u, 0x000053ccu, 0x000500c7u, 0x00000006u, 0x000053ceu, 0x000053ccu, 0x00000f0bu, 0x0003003eu, 0x000053b3u, 0x000053ceu, 0x0003003eu, 0x000053b4u, 0x000053c8u, 0x0004003du, 0x00000006u, 0x000053d1u, 0x000053bfu, 0x000500c7u, 0x00000006u, 0x000053d2u, 0x000053d1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000053d3u, 0x000053d2u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000053d5u, 0x000053c8u, 0x000053d3u, 0x0003003eu, 0x000053b4u, 0x000053d5u, 0x000500c6u, 0x00000006u, 0x000053d7u, 0x000053d5u, 0x0000048bu, 0x0003003eu, 0x000053b4u, 0x000053d7u, 0x000500c2u, 0x00000006u, 0x000053d9u, 0x000053ceu, 0x00000212u, 0x0003003eu, 0x000053b5u, 0x000053d9u, 0x0004003du, 0x00000006u, 0x000053dbu, 0x000053bfu, 0x000500c7u, 0x00000006u, 0x000053dcu, 0x000053dbu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000053ddu, 0x000053dcu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000053dfu, 0x000053d9u, 0x000053ddu, 0x0003003eu, 0x000053b5u, 0x000053dfu, 0x000500c6u, 0x00000006u, 0x000053e1u, 0x000053dfu, 0x00000485u, 0x0003003eu, 0x000053b5u, 0x000053e1u, 0x000500c5u, 0x00000006u, 0x000053e4u, 0x000053d7u, 0x00000f34u, 0x00080041u, 0x00000277u, 0x000053e5u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000053e4u, 0x0004003du, 0x00000229u, 0x000053e6u, 0x000053e5u, 0x00040071u, 0x00000006u, 0x000053e7u, 0x000053e6u, 0x0004007cu, 0x00000008u, 0x000053e8u, 0x000053e7u, 0x0003003eu, 0x000053b6u, 0x000053e8u, 0x00080041u, 0x00000270u, 0x000053ebu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000053e1u, 0x0004003du, 0x0000022bu, 0x000053ecu, 0x000053ebu, 0x00040071u, 0x00000006u, 0x000053edu, 0x000053ecu, 0x0004007cu, 0x00000008u, 0x000053eeu, 0x000053edu, 0x0003003eu, 0x000053b7u, 0x000053eeu, 0x000500c3u, 0x00000008u, 0x000053f0u, 0x000053eeu, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x000053f1u, 0x000053f0u, 0x0000038bu, 0x0003003eu, 0x000053b8u, 0x000053f1u, 0x000500c3u, 0x00000008u, 0x000053f3u, 0x000053eeu, 0x00000203u, 0x000500c7u, 0x00000008u, 0x000053f4u, 0x000053f3u, 0x0000038bu, 0x0003003eu, 0x000053b9u, 0x000053f4u, 0x00050082u, 0x00000008u, 0x000053f6u, 0x000053f1u, 0x00000623u, 0x00050082u, 0x00000008u, 0x000053f8u, 0x000053f4u, 0x00000623u, 0x00070050u, 0x00000009u, 0x000053fbu, 0x000053f6u, 0x000053f8u, 0x000053e8u, 0x000053e8u, 0x0003003eu, 0x000053bau, 0x000053fbu, 0x0003003eu, 0x0000451fu, 0x000053fbu, 0x000200f9u, 0x000047d0u, 0x000200f8u, 0x000047d0u, 0x000700f5u, 0x00000009u, 0x00009c0fu, 0x00009b5du, 0x00004732u, 0x000053fbu, 0x000047d1u, 0x000700f5u, 0x00000009u, 0x00009b28u, 0x00009a79u, 0x00004732u, 0x000053b0u, 0x000047d1u, 0x000700f5u, 0x00000009u, 0x0000995cu, 0x000098aau, 0x00004732u, 0x00005365u, 0x000047d1u, 0x000200f9u, 0x00004730u, 0x000200f8u, 0x00004731u, 0x000300f7u, 0x00004738u, 0x00000000u, 0x000b00fbu, 0x000044c9u, 0x00004738u, 0x00000000u, 0x00004739u, 0x00000001u, 0x0000473au, 0x00000002u, 0x0000473bu, 0x00000003u, 0x0000473cu, 0x000200f8u, 0x0000473cu, 0x0004007cu, 0x000000a2u, 0x0000479eu, 0x0000951eu, 0x0003003eu, 0x000069e4u, 0x000044bcu, 0x0003003eu, 0x000069e5u, 0x000044bfu, 0x0003003eu, 0x0000457cu, 0x000020f8u, 0x0003003eu, 0x0000457du, 0x0000479eu, 0x00050041u, 0x00000007u, 0x00005201u, 0x0000457du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005202u, 0x00005201u, 0x00050084u, 0x00000006u, 0x00005203u, 0x000044bfu, 0x00005202u, 0x00050080u, 0x00000006u, 0x00005204u, 0x000044bcu, 0x00005203u, 0x0003003eu, 0x000051f8u, 0x00005204u, 0x00050041u, 0x00000007u, 0x00005205u, 0x0000457du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005206u, 0x00005205u, 0x00050084u, 0x00000006u, 0x00005207u, 0x00005206u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005209u, 0x00005204u, 0x00005207u, 0x0003003eu, 0x000051f8u, 0x00005209u, 0x000500c7u, 0x00000006u, 0x0000520bu, 0x00005209u, 0x00000f0bu, 0x0003003eu, 0x000051f8u, 0x0000520bu, 0x000500c2u, 0x00000006u, 0x0000520du, 0x0000520bu, 0x00000212u, 0x0003003eu, 0x000051f9u, 0x0000520du, 0x0004003du, 0x00000006u, 0x0000520fu, 0x00005201u, 0x000500c7u, 0x00000006u, 0x00005210u, 0x0000520fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005211u, 0x00005210u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005213u, 0x0000520du, 0x00005211u, 0x0003003eu, 0x000051f9u, 0x00005213u, 0x000500c6u, 0x00000006u, 0x00005215u, 0x00005213u, 0x00000485u, 0x0003003eu, 0x000051f9u, 0x00005215u, 0x00080041u, 0x00000270u, 0x00005218u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005215u, 0x0004003du, 0x0000022bu, 0x00005219u, 0x00005218u, 0x00040071u, 0x00000006u, 0x0000521au, 0x00005219u, 0x0003003eu, 0x000051fau, 0x0000521au, 0x000500c5u, 0x00000006u, 0x0000521du, 0x00005215u, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x0000521eu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000521du, 0x0004003du, 0x0000022bu, 0x0000521fu, 0x0000521eu, 0x00040071u, 0x00000006u, 0x00005220u, 0x0000521fu, 0x0003003eu, 0x000051fbu, 0x00005220u, 0x000500c2u, 0x00000006u, 0x00005222u, 0x0000521au, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005223u, 0x00005222u, 0x000500c7u, 0x00000006u, 0x00005225u, 0x0000521au, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005226u, 0x00005225u, 0x000500c2u, 0x00000006u, 0x00005228u, 0x00005220u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005229u, 0x00005228u, 0x000500c7u, 0x00000006u, 0x0000522bu, 0x00005220u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000522cu, 0x0000522bu, 0x00070050u, 0x00000009u, 0x0000522du, 0x00005223u, 0x00005226u, 0x00005229u, 0x0000522cu, 0x0003003eu, 0x000051fcu, 0x0000522du, 0x0003003eu, 0x00004507u, 0x0000522du, 0x000300f7u, 0x000047a3u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000047a4u, 0x000047a3u, 0x000200f8u, 0x000047a4u, 0x00050050u, 0x0000005fu, 0x000047a7u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000047a8u, 0x000047a7u, 0x0003003eu, 0x000069e8u, 0x000044bcu, 0x0003003eu, 0x000069e9u, 0x000044bfu, 0x0003003eu, 0x0000457fu, 0x000020f8u, 0x0003003eu, 0x00004580u, 0x000047a8u, 0x00050041u, 0x00000007u, 0x00005237u, 0x00004580u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005238u, 0x00005237u, 0x00050084u, 0x00000006u, 0x00005239u, 0x000044bfu, 0x00005238u, 0x00050080u, 0x00000006u, 0x0000523au, 0x000044bcu, 0x00005239u, 0x0003003eu, 0x0000522eu, 0x0000523au, 0x00050041u, 0x00000007u, 0x0000523bu, 0x00004580u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000523cu, 0x0000523bu, 0x00050084u, 0x00000006u, 0x0000523du, 0x0000523cu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000523fu, 0x0000523au, 0x0000523du, 0x0003003eu, 0x0000522eu, 0x0000523fu, 0x000500c7u, 0x00000006u, 0x00005241u, 0x0000523fu, 0x00000f0bu, 0x0003003eu, 0x0000522eu, 0x00005241u, 0x000500c2u, 0x00000006u, 0x00005243u, 0x00005241u, 0x00000212u, 0x0003003eu, 0x0000522fu, 0x00005243u, 0x0004003du, 0x00000006u, 0x00005245u, 0x00005237u, 0x000500c7u, 0x00000006u, 0x00005246u, 0x00005245u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005247u, 0x00005246u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005249u, 0x00005243u, 0x00005247u, 0x0003003eu, 0x0000522fu, 0x00005249u, 0x000500c6u, 0x00000006u, 0x0000524bu, 0x00005249u, 0x00000485u, 0x0003003eu, 0x0000522fu, 0x0000524bu, 0x00080041u, 0x00000270u, 0x0000524eu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000524bu, 0x0004003du, 0x0000022bu, 0x0000524fu, 0x0000524eu, 0x00040071u, 0x00000006u, 0x00005250u, 0x0000524fu, 0x0003003eu, 0x00005230u, 0x00005250u, 0x000500c5u, 0x00000006u, 0x00005253u, 0x0000524bu, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x00005254u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005253u, 0x0004003du, 0x0000022bu, 0x00005255u, 0x00005254u, 0x00040071u, 0x00000006u, 0x00005256u, 0x00005255u, 0x0003003eu, 0x00005231u, 0x00005256u, 0x000500c2u, 0x00000006u, 0x00005258u, 0x00005250u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005259u, 0x00005258u, 0x000500c7u, 0x00000006u, 0x0000525bu, 0x00005250u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000525cu, 0x0000525bu, 0x000500c2u, 0x00000006u, 0x0000525eu, 0x00005256u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000525fu, 0x0000525eu, 0x000500c7u, 0x00000006u, 0x00005261u, 0x00005256u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005262u, 0x00005261u, 0x00070050u, 0x00000009u, 0x00005263u, 0x00005259u, 0x0000525cu, 0x0000525fu, 0x00005262u, 0x0003003eu, 0x00005232u, 0x00005263u, 0x0003003eu, 0x0000450fu, 0x00005263u, 0x00050050u, 0x0000005fu, 0x000047aeu, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000047afu, 0x000047aeu, 0x0003003eu, 0x000069ecu, 0x000044bcu, 0x0003003eu, 0x000069edu, 0x000044bfu, 0x0003003eu, 0x00004582u, 0x000020f8u, 0x0003003eu, 0x00004583u, 0x000047afu, 0x00050041u, 0x00000007u, 0x0000526du, 0x00004583u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000526eu, 0x0000526du, 0x00050084u, 0x00000006u, 0x0000526fu, 0x000044bfu, 0x0000526eu, 0x00050080u, 0x00000006u, 0x00005270u, 0x000044bcu, 0x0000526fu, 0x0003003eu, 0x00005264u, 0x00005270u, 0x00050041u, 0x00000007u, 0x00005271u, 0x00004583u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005272u, 0x00005271u, 0x00050084u, 0x00000006u, 0x00005273u, 0x00005272u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00005275u, 0x00005270u, 0x00005273u, 0x0003003eu, 0x00005264u, 0x00005275u, 0x000500c7u, 0x00000006u, 0x00005277u, 0x00005275u, 0x00000f0bu, 0x0003003eu, 0x00005264u, 0x00005277u, 0x000500c2u, 0x00000006u, 0x00005279u, 0x00005277u, 0x00000212u, 0x0003003eu, 0x00005265u, 0x00005279u, 0x0004003du, 0x00000006u, 0x0000527bu, 0x0000526du, 0x000500c7u, 0x00000006u, 0x0000527cu, 0x0000527bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000527du, 0x0000527cu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000527fu, 0x00005279u, 0x0000527du, 0x0003003eu, 0x00005265u, 0x0000527fu, 0x000500c6u, 0x00000006u, 0x00005281u, 0x0000527fu, 0x00000485u, 0x0003003eu, 0x00005265u, 0x00005281u, 0x00080041u, 0x00000270u, 0x00005284u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005281u, 0x0004003du, 0x0000022bu, 0x00005285u, 0x00005284u, 0x00040071u, 0x00000006u, 0x00005286u, 0x00005285u, 0x0003003eu, 0x00005266u, 0x00005286u, 0x000500c5u, 0x00000006u, 0x00005289u, 0x00005281u, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x0000528au, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005289u, 0x0004003du, 0x0000022bu, 0x0000528bu, 0x0000528au, 0x00040071u, 0x00000006u, 0x0000528cu, 0x0000528bu, 0x0003003eu, 0x00005267u, 0x0000528cu, 0x000500c2u, 0x00000006u, 0x0000528eu, 0x00005286u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x0000528fu, 0x0000528eu, 0x000500c7u, 0x00000006u, 0x00005291u, 0x00005286u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005292u, 0x00005291u, 0x000500c2u, 0x00000006u, 0x00005294u, 0x0000528cu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00005295u, 0x00005294u, 0x000500c7u, 0x00000006u, 0x00005297u, 0x0000528cu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00005298u, 0x00005297u, 0x00070050u, 0x00000009u, 0x00005299u, 0x0000528fu, 0x00005292u, 0x00005295u, 0x00005298u, 0x0003003eu, 0x00005268u, 0x00005299u, 0x0003003eu, 0x00004517u, 0x00005299u, 0x000200f9u, 0x000047a3u, 0x000200f8u, 0x000047a3u, 0x000700f5u, 0x00000009u, 0x00009b27u, 0x00009a79u, 0x0000473cu, 0x00005299u, 0x000047a4u, 0x000700f5u, 0x00000009u, 0x0000995bu, 0x000098aau, 0x0000473cu, 0x00005263u, 0x000047a4u, 0x000300f7u, 0x000047b4u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x000047b5u, 0x000047b4u, 0x000200f8u, 0x000047b5u, 0x00050050u, 0x0000005fu, 0x000047b8u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000047b9u, 0x000047b8u, 0x0003003eu, 0x000069f0u, 0x000044bcu, 0x0003003eu, 0x000069f1u, 0x000044bfu, 0x0003003eu, 0x00004585u, 0x000020f8u, 0x0003003eu, 0x00004586u, 0x000047b9u, 0x00050041u, 0x00000007u, 0x000052a3u, 0x00004586u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000052a4u, 0x000052a3u, 0x00050084u, 0x00000006u, 0x000052a5u, 0x000044bfu, 0x000052a4u, 0x00050080u, 0x00000006u, 0x000052a6u, 0x000044bcu, 0x000052a5u, 0x0003003eu, 0x0000529au, 0x000052a6u, 0x00050041u, 0x00000007u, 0x000052a7u, 0x00004586u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000052a8u, 0x000052a7u, 0x00050084u, 0x00000006u, 0x000052a9u, 0x000052a8u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000052abu, 0x000052a6u, 0x000052a9u, 0x0003003eu, 0x0000529au, 0x000052abu, 0x000500c7u, 0x00000006u, 0x000052adu, 0x000052abu, 0x00000f0bu, 0x0003003eu, 0x0000529au, 0x000052adu, 0x000500c2u, 0x00000006u, 0x000052afu, 0x000052adu, 0x00000212u, 0x0003003eu, 0x0000529bu, 0x000052afu, 0x0004003du, 0x00000006u, 0x000052b1u, 0x000052a3u, 0x000500c7u, 0x00000006u, 0x000052b2u, 0x000052b1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000052b3u, 0x000052b2u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000052b5u, 0x000052afu, 0x000052b3u, 0x0003003eu, 0x0000529bu, 0x000052b5u, 0x000500c6u, 0x00000006u, 0x000052b7u, 0x000052b5u, 0x00000485u, 0x0003003eu, 0x0000529bu, 0x000052b7u, 0x00080041u, 0x00000270u, 0x000052bau, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000052b7u, 0x0004003du, 0x0000022bu, 0x000052bbu, 0x000052bau, 0x00040071u, 0x00000006u, 0x000052bcu, 0x000052bbu, 0x0003003eu, 0x0000529cu, 0x000052bcu, 0x000500c5u, 0x00000006u, 0x000052bfu, 0x000052b7u, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x000052c0u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000052bfu, 0x0004003du, 0x0000022bu, 0x000052c1u, 0x000052c0u, 0x00040071u, 0x00000006u, 0x000052c2u, 0x000052c1u, 0x0003003eu, 0x0000529du, 0x000052c2u, 0x000500c2u, 0x00000006u, 0x000052c4u, 0x000052bcu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000052c5u, 0x000052c4u, 0x000500c7u, 0x00000006u, 0x000052c7u, 0x000052bcu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000052c8u, 0x000052c7u, 0x000500c2u, 0x00000006u, 0x000052cau, 0x000052c2u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x000052cbu, 0x000052cau, 0x000500c7u, 0x00000006u, 0x000052cdu, 0x000052c2u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000052ceu, 0x000052cdu, 0x00070050u, 0x00000009u, 0x000052cfu, 0x000052c5u, 0x000052c8u, 0x000052cbu, 0x000052ceu, 0x0003003eu, 0x0000529eu, 0x000052cfu, 0x0003003eu, 0x0000451fu, 0x000052cfu, 0x000200f9u, 0x000047b4u, 0x000200f8u, 0x000047b4u, 0x000700f5u, 0x00000009u, 0x00009c0du, 0x00009b5du, 0x000047a3u, 0x000052cfu, 0x000047b5u, 0x000200f9u, 0x00004738u, 0x000200f8u, 0x0000473bu, 0x0004007cu, 0x000000a2u, 0x0000477eu, 0x0000951eu, 0x0003003eu, 0x000069d4u, 0x000044bcu, 0x0003003eu, 0x000069d5u, 0x000044bfu, 0x0003003eu, 0x00004570u, 0x000020f8u, 0x0003003eu, 0x00004571u, 0x0000477eu, 0x00050041u, 0x00000007u, 0x00005105u, 0x00004571u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005106u, 0x00005105u, 0x00050084u, 0x00000006u, 0x00005107u, 0x000044bfu, 0x00005106u, 0x00050080u, 0x00000006u, 0x00005108u, 0x000044bcu, 0x00005107u, 0x0003003eu, 0x000050fcu, 0x00005108u, 0x00050041u, 0x00000007u, 0x00005109u, 0x00004571u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000510au, 0x00005109u, 0x00050084u, 0x00000006u, 0x0000510bu, 0x0000510au, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000510du, 0x00005108u, 0x0000510bu, 0x0003003eu, 0x000050fcu, 0x0000510du, 0x000500c7u, 0x00000006u, 0x0000510fu, 0x0000510du, 0x00000e59u, 0x0003003eu, 0x000050fcu, 0x0000510fu, 0x000500c2u, 0x00000006u, 0x00005111u, 0x0000510fu, 0x00000212u, 0x0003003eu, 0x000050fdu, 0x00005111u, 0x0004003du, 0x00000006u, 0x00005113u, 0x00005105u, 0x000500c7u, 0x00000006u, 0x00005114u, 0x00005113u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005115u, 0x00005114u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005117u, 0x00005111u, 0x00005115u, 0x0003003eu, 0x000050fdu, 0x00005117u, 0x000500c6u, 0x00000006u, 0x00005119u, 0x00005117u, 0x00000485u, 0x0003003eu, 0x000050fdu, 0x00005119u, 0x00080041u, 0x00000270u, 0x0000511cu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005119u, 0x0004003du, 0x0000022bu, 0x0000511du, 0x0000511cu, 0x00040071u, 0x00000006u, 0x0000511eu, 0x0000511du, 0x0003003eu, 0x000050feu, 0x0000511eu, 0x0003003eu, 0x000050ffu, 0x0000511eu, 0x00060050u, 0x00000353u, 0x00005125u, 0x0000511eu, 0x0000511eu, 0x0000511eu, 0x000500c2u, 0x00000353u, 0x00005126u, 0x00005125u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00005128u, 0x00005126u, 0x0000eee9u, 0x0003003eu, 0x00005121u, 0x00005128u, 0x000500c4u, 0x00000353u, 0x0000512bu, 0x00005128u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x0000512eu, 0x00005128u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x0000512fu, 0x0000512bu, 0x0000512eu, 0x0003003eu, 0x00005121u, 0x0000512fu, 0x000500c7u, 0x00000006u, 0x00005131u, 0x0000511eu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005132u, 0x00005131u, 0x000006c2u, 0x0003003eu, 0x00005122u, 0x00005132u, 0x0004007cu, 0x0000003cu, 0x00005134u, 0x0000512fu, 0x0004007cu, 0x00000008u, 0x00005136u, 0x00005132u, 0x00050051u, 0x00000008u, 0x00005137u, 0x00005134u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005138u, 0x00005134u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005139u, 0x00005134u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000513au, 0x00005137u, 0x00005138u, 0x00005139u, 0x00005136u, 0x0003003eu, 0x00005123u, 0x0000513au, 0x0003003eu, 0x00005100u, 0x0000513au, 0x0003003eu, 0x00004507u, 0x0000513au, 0x000300f7u, 0x00004783u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004784u, 0x00004783u, 0x000200f8u, 0x00004784u, 0x00050050u, 0x0000005fu, 0x00004787u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004788u, 0x00004787u, 0x0003003eu, 0x000069d8u, 0x000044bcu, 0x0003003eu, 0x000069d9u, 0x000044bfu, 0x0003003eu, 0x00004573u, 0x000020f8u, 0x0003003eu, 0x00004574u, 0x00004788u, 0x00050041u, 0x00000007u, 0x00005144u, 0x00004574u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005145u, 0x00005144u, 0x00050084u, 0x00000006u, 0x00005146u, 0x000044bfu, 0x00005145u, 0x00050080u, 0x00000006u, 0x00005147u, 0x000044bcu, 0x00005146u, 0x0003003eu, 0x0000513bu, 0x00005147u, 0x00050041u, 0x00000007u, 0x00005148u, 0x00004574u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005149u, 0x00005148u, 0x00050084u, 0x00000006u, 0x0000514au, 0x00005149u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000514cu, 0x00005147u, 0x0000514au, 0x0003003eu, 0x0000513bu, 0x0000514cu, 0x000500c7u, 0x00000006u, 0x0000514eu, 0x0000514cu, 0x00000e59u, 0x0003003eu, 0x0000513bu, 0x0000514eu, 0x000500c2u, 0x00000006u, 0x00005150u, 0x0000514eu, 0x00000212u, 0x0003003eu, 0x0000513cu, 0x00005150u, 0x0004003du, 0x00000006u, 0x00005152u, 0x00005144u, 0x000500c7u, 0x00000006u, 0x00005153u, 0x00005152u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005154u, 0x00005153u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005156u, 0x00005150u, 0x00005154u, 0x0003003eu, 0x0000513cu, 0x00005156u, 0x000500c6u, 0x00000006u, 0x00005158u, 0x00005156u, 0x00000485u, 0x0003003eu, 0x0000513cu, 0x00005158u, 0x00080041u, 0x00000270u, 0x0000515bu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005158u, 0x0004003du, 0x0000022bu, 0x0000515cu, 0x0000515bu, 0x00040071u, 0x00000006u, 0x0000515du, 0x0000515cu, 0x0003003eu, 0x0000513du, 0x0000515du, 0x0003003eu, 0x0000513eu, 0x0000515du, 0x00060050u, 0x00000353u, 0x00005164u, 0x0000515du, 0x0000515du, 0x0000515du, 0x000500c2u, 0x00000353u, 0x00005165u, 0x00005164u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00005167u, 0x00005165u, 0x0000eee9u, 0x0003003eu, 0x00005160u, 0x00005167u, 0x000500c4u, 0x00000353u, 0x0000516au, 0x00005167u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x0000516du, 0x00005167u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x0000516eu, 0x0000516au, 0x0000516du, 0x0003003eu, 0x00005160u, 0x0000516eu, 0x000500c7u, 0x00000006u, 0x00005170u, 0x0000515du, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005171u, 0x00005170u, 0x000006c2u, 0x0003003eu, 0x00005161u, 0x00005171u, 0x0004007cu, 0x0000003cu, 0x00005173u, 0x0000516eu, 0x0004007cu, 0x00000008u, 0x00005175u, 0x00005171u, 0x00050051u, 0x00000008u, 0x00005176u, 0x00005173u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005177u, 0x00005173u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005178u, 0x00005173u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005179u, 0x00005176u, 0x00005177u, 0x00005178u, 0x00005175u, 0x0003003eu, 0x00005162u, 0x00005179u, 0x0003003eu, 0x0000513fu, 0x00005179u, 0x0003003eu, 0x0000450fu, 0x00005179u, 0x00050050u, 0x0000005fu, 0x0000478eu, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000478fu, 0x0000478eu, 0x0003003eu, 0x000069dcu, 0x000044bcu, 0x0003003eu, 0x000069ddu, 0x000044bfu, 0x0003003eu, 0x00004576u, 0x000020f8u, 0x0003003eu, 0x00004577u, 0x0000478fu, 0x00050041u, 0x00000007u, 0x00005183u, 0x00004577u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005184u, 0x00005183u, 0x00050084u, 0x00000006u, 0x00005185u, 0x000044bfu, 0x00005184u, 0x00050080u, 0x00000006u, 0x00005186u, 0x000044bcu, 0x00005185u, 0x0003003eu, 0x0000517au, 0x00005186u, 0x00050041u, 0x00000007u, 0x00005187u, 0x00004577u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00005188u, 0x00005187u, 0x00050084u, 0x00000006u, 0x00005189u, 0x00005188u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x0000518bu, 0x00005186u, 0x00005189u, 0x0003003eu, 0x0000517au, 0x0000518bu, 0x000500c7u, 0x00000006u, 0x0000518du, 0x0000518bu, 0x00000e59u, 0x0003003eu, 0x0000517au, 0x0000518du, 0x000500c2u, 0x00000006u, 0x0000518fu, 0x0000518du, 0x00000212u, 0x0003003eu, 0x0000517bu, 0x0000518fu, 0x0004003du, 0x00000006u, 0x00005191u, 0x00005183u, 0x000500c7u, 0x00000006u, 0x00005192u, 0x00005191u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005193u, 0x00005192u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00005195u, 0x0000518fu, 0x00005193u, 0x0003003eu, 0x0000517bu, 0x00005195u, 0x000500c6u, 0x00000006u, 0x00005197u, 0x00005195u, 0x00000485u, 0x0003003eu, 0x0000517bu, 0x00005197u, 0x00080041u, 0x00000270u, 0x0000519au, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00005197u, 0x0004003du, 0x0000022bu, 0x0000519bu, 0x0000519au, 0x00040071u, 0x00000006u, 0x0000519cu, 0x0000519bu, 0x0003003eu, 0x0000517cu, 0x0000519cu, 0x0003003eu, 0x0000517du, 0x0000519cu, 0x00060050u, 0x00000353u, 0x000051a3u, 0x0000519cu, 0x0000519cu, 0x0000519cu, 0x000500c2u, 0x00000353u, 0x000051a4u, 0x000051a3u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000051a6u, 0x000051a4u, 0x0000eee9u, 0x0003003eu, 0x0000519fu, 0x000051a6u, 0x000500c4u, 0x00000353u, 0x000051a9u, 0x000051a6u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000051acu, 0x000051a6u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000051adu, 0x000051a9u, 0x000051acu, 0x0003003eu, 0x0000519fu, 0x000051adu, 0x000500c7u, 0x00000006u, 0x000051afu, 0x0000519cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000051b0u, 0x000051afu, 0x000006c2u, 0x0003003eu, 0x000051a0u, 0x000051b0u, 0x0004007cu, 0x0000003cu, 0x000051b2u, 0x000051adu, 0x0004007cu, 0x00000008u, 0x000051b4u, 0x000051b0u, 0x00050051u, 0x00000008u, 0x000051b5u, 0x000051b2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000051b6u, 0x000051b2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000051b7u, 0x000051b2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000051b8u, 0x000051b5u, 0x000051b6u, 0x000051b7u, 0x000051b4u, 0x0003003eu, 0x000051a1u, 0x000051b8u, 0x0003003eu, 0x0000517eu, 0x000051b8u, 0x0003003eu, 0x00004517u, 0x000051b8u, 0x000200f9u, 0x00004783u, 0x000200f8u, 0x00004783u, 0x000700f5u, 0x00000009u, 0x00009b25u, 0x00009a79u, 0x0000473bu, 0x000051b8u, 0x00004784u, 0x000700f5u, 0x00000009u, 0x00009959u, 0x000098aau, 0x0000473bu, 0x00005179u, 0x00004784u, 0x000300f7u, 0x00004794u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004795u, 0x00004794u, 0x000200f8u, 0x00004795u, 0x00050050u, 0x0000005fu, 0x00004798u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004799u, 0x00004798u, 0x0003003eu, 0x000069e0u, 0x000044bcu, 0x0003003eu, 0x000069e1u, 0x000044bfu, 0x0003003eu, 0x00004579u, 0x000020f8u, 0x0003003eu, 0x0000457au, 0x00004799u, 0x00050041u, 0x00000007u, 0x000051c2u, 0x0000457au, 0x00000485u, 0x0004003du, 0x00000006u, 0x000051c3u, 0x000051c2u, 0x00050084u, 0x00000006u, 0x000051c4u, 0x000044bfu, 0x000051c3u, 0x00050080u, 0x00000006u, 0x000051c5u, 0x000044bcu, 0x000051c4u, 0x0003003eu, 0x000051b9u, 0x000051c5u, 0x00050041u, 0x00000007u, 0x000051c6u, 0x0000457au, 0x00000374u, 0x0004003du, 0x00000006u, 0x000051c7u, 0x000051c6u, 0x00050084u, 0x00000006u, 0x000051c8u, 0x000051c7u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000051cau, 0x000051c5u, 0x000051c8u, 0x0003003eu, 0x000051b9u, 0x000051cau, 0x000500c7u, 0x00000006u, 0x000051ccu, 0x000051cau, 0x00000e59u, 0x0003003eu, 0x000051b9u, 0x000051ccu, 0x000500c2u, 0x00000006u, 0x000051ceu, 0x000051ccu, 0x00000212u, 0x0003003eu, 0x000051bau, 0x000051ceu, 0x0004003du, 0x00000006u, 0x000051d0u, 0x000051c2u, 0x000500c7u, 0x00000006u, 0x000051d1u, 0x000051d0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000051d2u, 0x000051d1u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000051d4u, 0x000051ceu, 0x000051d2u, 0x0003003eu, 0x000051bau, 0x000051d4u, 0x000500c6u, 0x00000006u, 0x000051d6u, 0x000051d4u, 0x00000485u, 0x0003003eu, 0x000051bau, 0x000051d6u, 0x00080041u, 0x00000270u, 0x000051d9u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000051d6u, 0x0004003du, 0x0000022bu, 0x000051dau, 0x000051d9u, 0x00040071u, 0x00000006u, 0x000051dbu, 0x000051dau, 0x0003003eu, 0x000051bbu, 0x000051dbu, 0x0003003eu, 0x000051bcu, 0x000051dbu, 0x00060050u, 0x00000353u, 0x000051e2u, 0x000051dbu, 0x000051dbu, 0x000051dbu, 0x000500c2u, 0x00000353u, 0x000051e3u, 0x000051e2u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x000051e5u, 0x000051e3u, 0x0000eee9u, 0x0003003eu, 0x000051deu, 0x000051e5u, 0x000500c4u, 0x00000353u, 0x000051e8u, 0x000051e5u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x000051ebu, 0x000051e5u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x000051ecu, 0x000051e8u, 0x000051ebu, 0x0003003eu, 0x000051deu, 0x000051ecu, 0x000500c7u, 0x00000006u, 0x000051eeu, 0x000051dbu, 0x00000485u, 0x00050084u, 0x00000006u, 0x000051efu, 0x000051eeu, 0x000006c2u, 0x0003003eu, 0x000051dfu, 0x000051efu, 0x0004007cu, 0x0000003cu, 0x000051f1u, 0x000051ecu, 0x0004007cu, 0x00000008u, 0x000051f3u, 0x000051efu, 0x00050051u, 0x00000008u, 0x000051f4u, 0x000051f1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000051f5u, 0x000051f1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000051f6u, 0x000051f1u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000051f7u, 0x000051f4u, 0x000051f5u, 0x000051f6u, 0x000051f3u, 0x0003003eu, 0x000051e0u, 0x000051f7u, 0x0003003eu, 0x000051bdu, 0x000051f7u, 0x0003003eu, 0x0000451fu, 0x000051f7u, 0x000200f9u, 0x00004794u, 0x000200f8u, 0x00004794u, 0x000700f5u, 0x00000009u, 0x00009c0bu, 0x00009b5du, 0x00004783u, 0x000051f7u, 0x00004795u, 0x000200f9u, 0x00004738u, 0x000200f8u, 0x0000473au, 0x0004007cu, 0x000000a2u, 0x0000475eu, 0x0000951eu, 0x0003003eu, 0x000069c4u, 0x000044bcu, 0x0003003eu, 0x000069c5u, 0x000044bfu, 0x0003003eu, 0x00004564u, 0x000020f8u, 0x0003003eu, 0x00004565u, 0x0000475eu, 0x00050041u, 0x00000007u, 0x00005078u, 0x00004565u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005079u, 0x00005078u, 0x00050084u, 0x00000006u, 0x0000507au, 0x000044bfu, 0x00005079u, 0x00050080u, 0x00000006u, 0x0000507bu, 0x000044bcu, 0x0000507au, 0x0003003eu, 0x00005070u, 0x0000507bu, 0x00050041u, 0x00000007u, 0x0000507cu, 0x00004565u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000507du, 0x0000507cu, 0x00050080u, 0x00000006u, 0x0000507fu, 0x0000507bu, 0x0000507du, 0x0003003eu, 0x00005070u, 0x0000507fu, 0x000500c7u, 0x00000006u, 0x00005081u, 0x0000507fu, 0x00000e59u, 0x0003003eu, 0x00005070u, 0x00005081u, 0x0003003eu, 0x00005071u, 0x00005081u, 0x0004003du, 0x00000006u, 0x00005084u, 0x00005078u, 0x000500c7u, 0x00000006u, 0x00005085u, 0x00005084u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005086u, 0x00005085u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00005088u, 0x00005081u, 0x00005086u, 0x0003003eu, 0x00005071u, 0x00005088u, 0x000500c6u, 0x00000006u, 0x0000508au, 0x00005088u, 0x0000048bu, 0x0003003eu, 0x00005071u, 0x0000508au, 0x00080041u, 0x00000277u, 0x0000508du, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000508au, 0x0004003du, 0x00000229u, 0x0000508eu, 0x0000508du, 0x00040071u, 0x00000006u, 0x0000508fu, 0x0000508eu, 0x0003003eu, 0x00005072u, 0x0000508fu, 0x0004007cu, 0x00000008u, 0x00005091u, 0x0000508fu, 0x00070050u, 0x00000009u, 0x00005092u, 0x00005091u, 0x00005091u, 0x00005091u, 0x00005091u, 0x0003003eu, 0x00005073u, 0x00005092u, 0x0003003eu, 0x00004507u, 0x00005092u, 0x000300f7u, 0x00004763u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004764u, 0x00004763u, 0x000200f8u, 0x00004764u, 0x00050050u, 0x0000005fu, 0x00004767u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004768u, 0x00004767u, 0x0003003eu, 0x000069c8u, 0x000044bcu, 0x0003003eu, 0x000069c9u, 0x000044bfu, 0x0003003eu, 0x00004567u, 0x000020f8u, 0x0003003eu, 0x00004568u, 0x00004768u, 0x00050041u, 0x00000007u, 0x0000509bu, 0x00004568u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000509cu, 0x0000509bu, 0x00050084u, 0x00000006u, 0x0000509du, 0x000044bfu, 0x0000509cu, 0x00050080u, 0x00000006u, 0x0000509eu, 0x000044bcu, 0x0000509du, 0x0003003eu, 0x00005093u, 0x0000509eu, 0x00050041u, 0x00000007u, 0x0000509fu, 0x00004568u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000050a0u, 0x0000509fu, 0x00050080u, 0x00000006u, 0x000050a2u, 0x0000509eu, 0x000050a0u, 0x0003003eu, 0x00005093u, 0x000050a2u, 0x000500c7u, 0x00000006u, 0x000050a4u, 0x000050a2u, 0x00000e59u, 0x0003003eu, 0x00005093u, 0x000050a4u, 0x0003003eu, 0x00005094u, 0x000050a4u, 0x0004003du, 0x00000006u, 0x000050a7u, 0x0000509bu, 0x000500c7u, 0x00000006u, 0x000050a8u, 0x000050a7u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000050a9u, 0x000050a8u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000050abu, 0x000050a4u, 0x000050a9u, 0x0003003eu, 0x00005094u, 0x000050abu, 0x000500c6u, 0x00000006u, 0x000050adu, 0x000050abu, 0x0000048bu, 0x0003003eu, 0x00005094u, 0x000050adu, 0x00080041u, 0x00000277u, 0x000050b0u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000050adu, 0x0004003du, 0x00000229u, 0x000050b1u, 0x000050b0u, 0x00040071u, 0x00000006u, 0x000050b2u, 0x000050b1u, 0x0003003eu, 0x00005095u, 0x000050b2u, 0x0004007cu, 0x00000008u, 0x000050b4u, 0x000050b2u, 0x00070050u, 0x00000009u, 0x000050b5u, 0x000050b4u, 0x000050b4u, 0x000050b4u, 0x000050b4u, 0x0003003eu, 0x00005096u, 0x000050b5u, 0x0003003eu, 0x0000450fu, 0x000050b5u, 0x00050050u, 0x0000005fu, 0x0000476eu, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000476fu, 0x0000476eu, 0x0003003eu, 0x000069ccu, 0x000044bcu, 0x0003003eu, 0x000069cdu, 0x000044bfu, 0x0003003eu, 0x0000456au, 0x000020f8u, 0x0003003eu, 0x0000456bu, 0x0000476fu, 0x00050041u, 0x00000007u, 0x000050beu, 0x0000456bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000050bfu, 0x000050beu, 0x00050084u, 0x00000006u, 0x000050c0u, 0x000044bfu, 0x000050bfu, 0x00050080u, 0x00000006u, 0x000050c1u, 0x000044bcu, 0x000050c0u, 0x0003003eu, 0x000050b6u, 0x000050c1u, 0x00050041u, 0x00000007u, 0x000050c2u, 0x0000456bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000050c3u, 0x000050c2u, 0x00050080u, 0x00000006u, 0x000050c5u, 0x000050c1u, 0x000050c3u, 0x0003003eu, 0x000050b6u, 0x000050c5u, 0x000500c7u, 0x00000006u, 0x000050c7u, 0x000050c5u, 0x00000e59u, 0x0003003eu, 0x000050b6u, 0x000050c7u, 0x0003003eu, 0x000050b7u, 0x000050c7u, 0x0004003du, 0x00000006u, 0x000050cau, 0x000050beu, 0x000500c7u, 0x00000006u, 0x000050cbu, 0x000050cau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000050ccu, 0x000050cbu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000050ceu, 0x000050c7u, 0x000050ccu, 0x0003003eu, 0x000050b7u, 0x000050ceu, 0x000500c6u, 0x00000006u, 0x000050d0u, 0x000050ceu, 0x0000048bu, 0x0003003eu, 0x000050b7u, 0x000050d0u, 0x00080041u, 0x00000277u, 0x000050d3u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000050d0u, 0x0004003du, 0x00000229u, 0x000050d4u, 0x000050d3u, 0x00040071u, 0x00000006u, 0x000050d5u, 0x000050d4u, 0x0003003eu, 0x000050b8u, 0x000050d5u, 0x0004007cu, 0x00000008u, 0x000050d7u, 0x000050d5u, 0x00070050u, 0x00000009u, 0x000050d8u, 0x000050d7u, 0x000050d7u, 0x000050d7u, 0x000050d7u, 0x0003003eu, 0x000050b9u, 0x000050d8u, 0x0003003eu, 0x00004517u, 0x000050d8u, 0x000200f9u, 0x00004763u, 0x000200f8u, 0x00004763u, 0x000700f5u, 0x00000009u, 0x00009b23u, 0x00009a79u, 0x0000473au, 0x000050d8u, 0x00004764u, 0x000700f5u, 0x00000009u, 0x00009957u, 0x000098aau, 0x0000473au, 0x000050b5u, 0x00004764u, 0x000300f7u, 0x00004774u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004775u, 0x00004774u, 0x000200f8u, 0x00004775u, 0x00050050u, 0x0000005fu, 0x00004778u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004779u, 0x00004778u, 0x0003003eu, 0x000069d0u, 0x000044bcu, 0x0003003eu, 0x000069d1u, 0x000044bfu, 0x0003003eu, 0x0000456du, 0x000020f8u, 0x0003003eu, 0x0000456eu, 0x00004779u, 0x00050041u, 0x00000007u, 0x000050e1u, 0x0000456eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000050e2u, 0x000050e1u, 0x00050084u, 0x00000006u, 0x000050e3u, 0x000044bfu, 0x000050e2u, 0x00050080u, 0x00000006u, 0x000050e4u, 0x000044bcu, 0x000050e3u, 0x0003003eu, 0x000050d9u, 0x000050e4u, 0x00050041u, 0x00000007u, 0x000050e5u, 0x0000456eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000050e6u, 0x000050e5u, 0x00050080u, 0x00000006u, 0x000050e8u, 0x000050e4u, 0x000050e6u, 0x0003003eu, 0x000050d9u, 0x000050e8u, 0x000500c7u, 0x00000006u, 0x000050eau, 0x000050e8u, 0x00000e59u, 0x0003003eu, 0x000050d9u, 0x000050eau, 0x0003003eu, 0x000050dau, 0x000050eau, 0x0004003du, 0x00000006u, 0x000050edu, 0x000050e1u, 0x000500c7u, 0x00000006u, 0x000050eeu, 0x000050edu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000050efu, 0x000050eeu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x000050f1u, 0x000050eau, 0x000050efu, 0x0003003eu, 0x000050dau, 0x000050f1u, 0x000500c6u, 0x00000006u, 0x000050f3u, 0x000050f1u, 0x0000048bu, 0x0003003eu, 0x000050dau, 0x000050f3u, 0x00080041u, 0x00000277u, 0x000050f6u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x000050f3u, 0x0004003du, 0x00000229u, 0x000050f7u, 0x000050f6u, 0x00040071u, 0x00000006u, 0x000050f8u, 0x000050f7u, 0x0003003eu, 0x000050dbu, 0x000050f8u, 0x0004007cu, 0x00000008u, 0x000050fau, 0x000050f8u, 0x00070050u, 0x00000009u, 0x000050fbu, 0x000050fau, 0x000050fau, 0x000050fau, 0x000050fau, 0x0003003eu, 0x000050dcu, 0x000050fbu, 0x0003003eu, 0x0000451fu, 0x000050fbu, 0x000200f9u, 0x00004774u, 0x000200f8u, 0x00004774u, 0x000700f5u, 0x00000009u, 0x00009c09u, 0x00009b5du, 0x00004763u, 0x000050fbu, 0x00004775u, 0x000200f9u, 0x00004738u, 0x000200f8u, 0x00004739u, 0x0004007cu, 0x000000a2u, 0x0000473eu, 0x0000951eu, 0x0003003eu, 0x000069b4u, 0x000044bcu, 0x0003003eu, 0x000069b5u, 0x000044bfu, 0x0003003eu, 0x00004558u, 0x000020f8u, 0x0003003eu, 0x00004559u, 0x0000473eu, 0x00050041u, 0x00000007u, 0x00004fb1u, 0x00004559u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004fb2u, 0x00004fb1u, 0x00050084u, 0x00000006u, 0x00004fb3u, 0x000044bfu, 0x00004fb2u, 0x00050080u, 0x00000006u, 0x00004fb4u, 0x000044bcu, 0x00004fb3u, 0x0003003eu, 0x00004fa8u, 0x00004fb4u, 0x00050041u, 0x00000007u, 0x00004fb5u, 0x00004559u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004fb6u, 0x00004fb5u, 0x000500c2u, 0x00000006u, 0x00004fb7u, 0x00004fb6u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004fb9u, 0x00004fb4u, 0x00004fb7u, 0x0003003eu, 0x00004fa8u, 0x00004fb9u, 0x000500c7u, 0x00000006u, 0x00004fbbu, 0x00004fb9u, 0x00000e59u, 0x0003003eu, 0x00004fa8u, 0x00004fbbu, 0x0004003du, 0x00000006u, 0x00004fbdu, 0x00004fb5u, 0x000400c8u, 0x00000006u, 0x00004fbeu, 0x00004fbdu, 0x000500c7u, 0x00000006u, 0x00004fbfu, 0x00004fbeu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004fc0u, 0x00004fbfu, 0x00000701u, 0x0003003eu, 0x00004fa9u, 0x00004fc0u, 0x0003003eu, 0x00004faau, 0x00004fbbu, 0x0004003du, 0x00000006u, 0x00004fc3u, 0x00004fb1u, 0x000500c7u, 0x00000006u, 0x00004fc4u, 0x00004fc3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004fc5u, 0x00004fc4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004fc7u, 0x00004fbbu, 0x00004fc5u, 0x0003003eu, 0x00004faau, 0x00004fc7u, 0x000500c6u, 0x00000006u, 0x00004fc9u, 0x00004fc7u, 0x0000048bu, 0x0003003eu, 0x00004faau, 0x00004fc9u, 0x00080041u, 0x00000277u, 0x00004fccu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004fc9u, 0x0004003du, 0x00000229u, 0x00004fcdu, 0x00004fccu, 0x00040071u, 0x00000006u, 0x00004fceu, 0x00004fcdu, 0x0003003eu, 0x00004fabu, 0x00004fceu, 0x000500c2u, 0x00000006u, 0x00004fd1u, 0x00004fceu, 0x00004fc0u, 0x000500c7u, 0x00000006u, 0x00004fd2u, 0x00004fd1u, 0x00000e7cu, 0x0003003eu, 0x00004fabu, 0x00004fd2u, 0x000500c4u, 0x00000006u, 0x00004fd4u, 0x00004fd2u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004fd6u, 0x00004fd2u, 0x00004fd4u, 0x0003003eu, 0x00004fabu, 0x00004fd6u, 0x0004007cu, 0x00000008u, 0x00004fd8u, 0x00004fd6u, 0x00070050u, 0x00000009u, 0x00004fd9u, 0x00004fd8u, 0x00004fd8u, 0x00004fd8u, 0x00004fd8u, 0x0003003eu, 0x00004facu, 0x00004fd9u, 0x0003003eu, 0x00004507u, 0x00004fd9u, 0x000300f7u, 0x00004743u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004744u, 0x00004743u, 0x000200f8u, 0x00004744u, 0x00050050u, 0x0000005fu, 0x00004747u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004748u, 0x00004747u, 0x0003003eu, 0x000069b8u, 0x000044bcu, 0x0003003eu, 0x000069b9u, 0x000044bfu, 0x0003003eu, 0x0000455bu, 0x000020f8u, 0x0003003eu, 0x0000455cu, 0x00004748u, 0x00050041u, 0x00000007u, 0x00004fe3u, 0x0000455cu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004fe4u, 0x00004fe3u, 0x00050084u, 0x00000006u, 0x00004fe5u, 0x000044bfu, 0x00004fe4u, 0x00050080u, 0x00000006u, 0x00004fe6u, 0x000044bcu, 0x00004fe5u, 0x0003003eu, 0x00004fdau, 0x00004fe6u, 0x00050041u, 0x00000007u, 0x00004fe7u, 0x0000455cu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004fe8u, 0x00004fe7u, 0x000500c2u, 0x00000006u, 0x00004fe9u, 0x00004fe8u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004febu, 0x00004fe6u, 0x00004fe9u, 0x0003003eu, 0x00004fdau, 0x00004febu, 0x000500c7u, 0x00000006u, 0x00004fedu, 0x00004febu, 0x00000e59u, 0x0003003eu, 0x00004fdau, 0x00004fedu, 0x0004003du, 0x00000006u, 0x00004fefu, 0x00004fe7u, 0x000400c8u, 0x00000006u, 0x00004ff0u, 0x00004fefu, 0x000500c7u, 0x00000006u, 0x00004ff1u, 0x00004ff0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004ff2u, 0x00004ff1u, 0x00000701u, 0x0003003eu, 0x00004fdbu, 0x00004ff2u, 0x0003003eu, 0x00004fdcu, 0x00004fedu, 0x0004003du, 0x00000006u, 0x00004ff5u, 0x00004fe3u, 0x000500c7u, 0x00000006u, 0x00004ff6u, 0x00004ff5u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004ff7u, 0x00004ff6u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004ff9u, 0x00004fedu, 0x00004ff7u, 0x0003003eu, 0x00004fdcu, 0x00004ff9u, 0x000500c6u, 0x00000006u, 0x00004ffbu, 0x00004ff9u, 0x0000048bu, 0x0003003eu, 0x00004fdcu, 0x00004ffbu, 0x00080041u, 0x00000277u, 0x00004ffeu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004ffbu, 0x0004003du, 0x00000229u, 0x00004fffu, 0x00004ffeu, 0x00040071u, 0x00000006u, 0x00005000u, 0x00004fffu, 0x0003003eu, 0x00004fddu, 0x00005000u, 0x000500c2u, 0x00000006u, 0x00005003u, 0x00005000u, 0x00004ff2u, 0x000500c7u, 0x00000006u, 0x00005004u, 0x00005003u, 0x00000e7cu, 0x0003003eu, 0x00004fddu, 0x00005004u, 0x000500c4u, 0x00000006u, 0x00005006u, 0x00005004u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00005008u, 0x00005004u, 0x00005006u, 0x0003003eu, 0x00004fddu, 0x00005008u, 0x0004007cu, 0x00000008u, 0x0000500au, 0x00005008u, 0x00070050u, 0x00000009u, 0x0000500bu, 0x0000500au, 0x0000500au, 0x0000500au, 0x0000500au, 0x0003003eu, 0x00004fdeu, 0x0000500bu, 0x0003003eu, 0x0000450fu, 0x0000500bu, 0x00050050u, 0x0000005fu, 0x0000474eu, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000474fu, 0x0000474eu, 0x0003003eu, 0x000069bcu, 0x000044bcu, 0x0003003eu, 0x000069bdu, 0x000044bfu, 0x0003003eu, 0x0000455eu, 0x000020f8u, 0x0003003eu, 0x0000455fu, 0x0000474fu, 0x00050041u, 0x00000007u, 0x00005015u, 0x0000455fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005016u, 0x00005015u, 0x00050084u, 0x00000006u, 0x00005017u, 0x000044bfu, 0x00005016u, 0x00050080u, 0x00000006u, 0x00005018u, 0x000044bcu, 0x00005017u, 0x0003003eu, 0x0000500cu, 0x00005018u, 0x00050041u, 0x00000007u, 0x00005019u, 0x0000455fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000501au, 0x00005019u, 0x000500c2u, 0x00000006u, 0x0000501bu, 0x0000501au, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000501du, 0x00005018u, 0x0000501bu, 0x0003003eu, 0x0000500cu, 0x0000501du, 0x000500c7u, 0x00000006u, 0x0000501fu, 0x0000501du, 0x00000e59u, 0x0003003eu, 0x0000500cu, 0x0000501fu, 0x0004003du, 0x00000006u, 0x00005021u, 0x00005019u, 0x000400c8u, 0x00000006u, 0x00005022u, 0x00005021u, 0x000500c7u, 0x00000006u, 0x00005023u, 0x00005022u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005024u, 0x00005023u, 0x00000701u, 0x0003003eu, 0x0000500du, 0x00005024u, 0x0003003eu, 0x0000500eu, 0x0000501fu, 0x0004003du, 0x00000006u, 0x00005027u, 0x00005015u, 0x000500c7u, 0x00000006u, 0x00005028u, 0x00005027u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00005029u, 0x00005028u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000502bu, 0x0000501fu, 0x00005029u, 0x0003003eu, 0x0000500eu, 0x0000502bu, 0x000500c6u, 0x00000006u, 0x0000502du, 0x0000502bu, 0x0000048bu, 0x0003003eu, 0x0000500eu, 0x0000502du, 0x00080041u, 0x00000277u, 0x00005030u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000502du, 0x0004003du, 0x00000229u, 0x00005031u, 0x00005030u, 0x00040071u, 0x00000006u, 0x00005032u, 0x00005031u, 0x0003003eu, 0x0000500fu, 0x00005032u, 0x000500c2u, 0x00000006u, 0x00005035u, 0x00005032u, 0x00005024u, 0x000500c7u, 0x00000006u, 0x00005036u, 0x00005035u, 0x00000e7cu, 0x0003003eu, 0x0000500fu, 0x00005036u, 0x000500c4u, 0x00000006u, 0x00005038u, 0x00005036u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000503au, 0x00005036u, 0x00005038u, 0x0003003eu, 0x0000500fu, 0x0000503au, 0x0004007cu, 0x00000008u, 0x0000503cu, 0x0000503au, 0x00070050u, 0x00000009u, 0x0000503du, 0x0000503cu, 0x0000503cu, 0x0000503cu, 0x0000503cu, 0x0003003eu, 0x00005010u, 0x0000503du, 0x0003003eu, 0x00004517u, 0x0000503du, 0x000200f9u, 0x00004743u, 0x000200f8u, 0x00004743u, 0x000700f5u, 0x00000009u, 0x00009b21u, 0x00009a79u, 0x00004739u, 0x0000503du, 0x00004744u, 0x000700f5u, 0x00000009u, 0x00009955u, 0x000098aau, 0x00004739u, 0x0000500bu, 0x00004744u, 0x000300f7u, 0x00004754u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004755u, 0x00004754u, 0x000200f8u, 0x00004755u, 0x00050050u, 0x0000005fu, 0x00004758u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004759u, 0x00004758u, 0x0003003eu, 0x000069c0u, 0x000044bcu, 0x0003003eu, 0x000069c1u, 0x000044bfu, 0x0003003eu, 0x00004561u, 0x000020f8u, 0x0003003eu, 0x00004562u, 0x00004759u, 0x00050041u, 0x00000007u, 0x00005047u, 0x00004562u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00005048u, 0x00005047u, 0x00050084u, 0x00000006u, 0x00005049u, 0x000044bfu, 0x00005048u, 0x00050080u, 0x00000006u, 0x0000504au, 0x000044bcu, 0x00005049u, 0x0003003eu, 0x0000503eu, 0x0000504au, 0x00050041u, 0x00000007u, 0x0000504bu, 0x00004562u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000504cu, 0x0000504bu, 0x000500c2u, 0x00000006u, 0x0000504du, 0x0000504cu, 0x00000212u, 0x00050080u, 0x00000006u, 0x0000504fu, 0x0000504au, 0x0000504du, 0x0003003eu, 0x0000503eu, 0x0000504fu, 0x000500c7u, 0x00000006u, 0x00005051u, 0x0000504fu, 0x00000e59u, 0x0003003eu, 0x0000503eu, 0x00005051u, 0x0004003du, 0x00000006u, 0x00005053u, 0x0000504bu, 0x000400c8u, 0x00000006u, 0x00005054u, 0x00005053u, 0x000500c7u, 0x00000006u, 0x00005055u, 0x00005054u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00005056u, 0x00005055u, 0x00000701u, 0x0003003eu, 0x0000503fu, 0x00005056u, 0x0003003eu, 0x00005040u, 0x00005051u, 0x0004003du, 0x00000006u, 0x00005059u, 0x00005047u, 0x000500c7u, 0x00000006u, 0x0000505au, 0x00005059u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000505bu, 0x0000505au, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000505du, 0x00005051u, 0x0000505bu, 0x0003003eu, 0x00005040u, 0x0000505du, 0x000500c6u, 0x00000006u, 0x0000505fu, 0x0000505du, 0x0000048bu, 0x0003003eu, 0x00005040u, 0x0000505fu, 0x00080041u, 0x00000277u, 0x00005062u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x0000505fu, 0x0004003du, 0x00000229u, 0x00005063u, 0x00005062u, 0x00040071u, 0x00000006u, 0x00005064u, 0x00005063u, 0x0003003eu, 0x00005041u, 0x00005064u, 0x000500c2u, 0x00000006u, 0x00005067u, 0x00005064u, 0x00005056u, 0x000500c7u, 0x00000006u, 0x00005068u, 0x00005067u, 0x00000e7cu, 0x0003003eu, 0x00005041u, 0x00005068u, 0x000500c4u, 0x00000006u, 0x0000506au, 0x00005068u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x0000506cu, 0x00005068u, 0x0000506au, 0x0003003eu, 0x00005041u, 0x0000506cu, 0x0004007cu, 0x00000008u, 0x0000506eu, 0x0000506cu, 0x00070050u, 0x00000009u, 0x0000506fu, 0x0000506eu, 0x0000506eu, 0x0000506eu, 0x0000506eu, 0x0003003eu, 0x00005042u, 0x0000506fu, 0x0003003eu, 0x0000451fu, 0x0000506fu, 0x000200f9u, 0x00004754u, 0x000200f8u, 0x00004754u, 0x000700f5u, 0x00000009u, 0x00009c07u, 0x00009b5du, 0x00004743u, 0x0000506fu, 0x00004755u, 0x000200f9u, 0x00004738u, 0x000200f8u, 0x00004738u, 0x000d00f5u, 0x00000009u, 0x00009c06u, 0x00009b5du, 0x00004731u, 0x00009c07u, 0x00004754u, 0x00009c09u, 0x00004774u, 0x00009c0bu, 0x00004794u, 0x00009c0du, 0x000047b4u, 0x000d00f5u, 0x00000009u, 0x00009b1fu, 0x00009a79u, 0x00004731u, 0x00009b21u, 0x00004754u, 0x00009b23u, 0x00004774u, 0x00009b25u, 0x00004794u, 0x00009b27u, 0x000047b4u, 0x000d00f5u, 0x00000009u, 0x00009a3au, 0x00009992u, 0x00004731u, 0x00004fd9u, 0x00004754u, 0x00005092u, 0x00004774u, 0x0000513au, 0x00004794u, 0x0000522du, 0x000047b4u, 0x000d00f5u, 0x00000009u, 0x00009953u, 0x000098aau, 0x00004731u, 0x00009955u, 0x00004754u, 0x00009957u, 0x00004774u, 0x00009959u, 0x00004794u, 0x0000995bu, 0x000047b4u, 0x000200f9u, 0x00004730u, 0x000200f8u, 0x00004730u, 0x000f00f5u, 0x00000009u, 0x00009c05u, 0x00009b5du, 0x00004691u, 0x00009c06u, 0x00004738u, 0x00009c0fu, 0x000047d0u, 0x00009c10u, 0x000047ecu, 0x00009c17u, 0x0000485eu, 0x00009c20u, 0x000048e5u, 0x000f00f5u, 0x00000009u, 0x00009b1eu, 0x00009a79u, 0x00004691u, 0x00009b1fu, 0x00004738u, 0x00009b28u, 0x000047d0u, 0x00009b29u, 0x000047ecu, 0x00009b30u, 0x0000485eu, 0x00009b39u, 0x000048e5u, 0x000f00f5u, 0x00000009u, 0x00009a39u, 0x00009992u, 0x00004691u, 0x00009a3au, 0x00004738u, 0x0000531au, 0x000047d0u, 0x00009a44u, 0x000047ecu, 0x00009a4bu, 0x0000485eu, 0x00009a54u, 0x000048e5u, 0x000f00f5u, 0x00000009u, 0x00009952u, 0x000098aau, 0x00004691u, 0x00009953u, 0x00004738u, 0x0000995cu, 0x000047d0u, 0x0000995du, 0x000047ecu, 0x00009964u, 0x0000485eu, 0x0000996du, 0x000048e5u, 0x000200f9u, 0x0000468fu, 0x000200f8u, 0x00004690u, 0x000300f7u, 0x00004694u, 0x00000000u, 0x000b00fbu, 0x000044c4u, 0x00004694u, 0x00000000u, 0x00004695u, 0x00000002u, 0x00004695u, 0x00000003u, 0x00004695u, 0x00000004u, 0x00004695u, 0x000200f8u, 0x00004695u, 0x0003003eu, 0x00004505u, 0x00004683u, 0x000600a9u, 0x00000008u, 0x00004699u, 0x00004683u, 0x00000215u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x0000469au, 0x00004699u, 0x0003003eu, 0x00004506u, 0x0000469au, 0x000300f7u, 0x0000469du, 0x00000000u, 0x000700fbu, 0x000044c9u, 0x0000469eu, 0x00000000u, 0x0000469fu, 0x00000001u, 0x000046a0u, 0x000200f8u, 0x000046a0u, 0x0004007cu, 0x000000a2u, 0x00004704u, 0x0000951eu, 0x000600a9u, 0x00000008u, 0x00004706u, 0x00004683u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x00004707u, 0x00004706u, 0x0003003eu, 0x00006994u, 0x000044bcu, 0x0003003eu, 0x00006995u, 0x000044bfu, 0x0003003eu, 0x00004528u, 0x000020f8u, 0x0003003eu, 0x00004529u, 0x00004704u, 0x0003003eu, 0x0000452au, 0x00004707u, 0x0003003eu, 0x0000452bu, 0x0000469au, 0x0003003eu, 0x0000452cu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004e24u, 0x00004529u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004e25u, 0x00004e24u, 0x00050084u, 0x00000006u, 0x00004e26u, 0x000044bfu, 0x00004e25u, 0x00050080u, 0x00000006u, 0x00004e27u, 0x000044bcu, 0x00004e26u, 0x0003003eu, 0x00004e18u, 0x00004e27u, 0x00050041u, 0x00000007u, 0x00004e28u, 0x00004529u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004e29u, 0x00004e28u, 0x00050080u, 0x00000006u, 0x00004e2bu, 0x00004e27u, 0x00004e29u, 0x0003003eu, 0x00004e18u, 0x00004e2bu, 0x000500c7u, 0x00000006u, 0x00004e2du, 0x00004e2bu, 0x00000f0bu, 0x0003003eu, 0x00004e18u, 0x00004e2du, 0x0003003eu, 0x00004e19u, 0x00004e2du, 0x0004003du, 0x00000006u, 0x00004e30u, 0x00004e24u, 0x000500c7u, 0x00000006u, 0x00004e31u, 0x00004e30u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004e32u, 0x00004e31u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004e34u, 0x00004e2du, 0x00004e32u, 0x0003003eu, 0x00004e19u, 0x00004e34u, 0x000500c6u, 0x00000006u, 0x00004e36u, 0x00004e34u, 0x0000048bu, 0x0003003eu, 0x00004e19u, 0x00004e36u, 0x00080041u, 0x00000277u, 0x00004e39u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004e36u, 0x0004003du, 0x00000229u, 0x00004e3au, 0x00004e39u, 0x00040071u, 0x00000006u, 0x00004e3bu, 0x00004e3au, 0x0003003eu, 0x00004e1au, 0x00004e3bu, 0x000500c4u, 0x00000006u, 0x00004e3du, 0x00004e3bu, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004e3fu, 0x00004e3du, 0x00004707u, 0x0003003eu, 0x00004e1bu, 0x00004e3fu, 0x000500c6u, 0x00000006u, 0x00004e42u, 0x00004e3fu, 0x0000469au, 0x0003003eu, 0x00004e1bu, 0x00004e42u, 0x000500c5u, 0x00000006u, 0x00004e45u, 0x00000f3cu, 0x00004e42u, 0x00080041u, 0x00000270u, 0x00004e46u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004e45u, 0x0004003du, 0x0000022bu, 0x00004e47u, 0x00004e46u, 0x00040071u, 0x00000006u, 0x00004e48u, 0x00004e47u, 0x0003003eu, 0x00004e1au, 0x00004e48u, 0x000300f7u, 0x00004e4au, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004e4bu, 0x00004e4cu, 0x000200f8u, 0x00004e4cu, 0x0003003eu, 0x00004e1eu, 0x00004e48u, 0x00060050u, 0x00000353u, 0x00004e66u, 0x00004e48u, 0x00004e48u, 0x00004e48u, 0x000500c2u, 0x00000353u, 0x00004e67u, 0x00004e66u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004e69u, 0x00004e67u, 0x0000eee9u, 0x0003003eu, 0x00004e62u, 0x00004e69u, 0x000500c4u, 0x00000353u, 0x00004e6cu, 0x00004e69u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004e6fu, 0x00004e69u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004e70u, 0x00004e6cu, 0x00004e6fu, 0x0003003eu, 0x00004e62u, 0x00004e70u, 0x000500c7u, 0x00000006u, 0x00004e72u, 0x00004e48u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004e73u, 0x00004e72u, 0x000006c2u, 0x0003003eu, 0x00004e63u, 0x00004e73u, 0x0004007cu, 0x0000003cu, 0x00004e75u, 0x00004e70u, 0x0004007cu, 0x00000008u, 0x00004e77u, 0x00004e73u, 0x00050051u, 0x00000008u, 0x00004e78u, 0x00004e75u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004e79u, 0x00004e75u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004e7au, 0x00004e75u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004e7bu, 0x00004e78u, 0x00004e79u, 0x00004e7au, 0x00004e77u, 0x0003003eu, 0x00004e64u, 0x00004e7bu, 0x0003003eu, 0x00004e1cu, 0x00004e7bu, 0x000200f9u, 0x00004e4au, 0x000200f8u, 0x00004e4bu, 0x0003003eu, 0x00004e1du, 0x00004e48u, 0x000500c2u, 0x00000006u, 0x00004e56u, 0x00004e48u, 0x0000025eu, 0x0003003eu, 0x00004e52u, 0x00004e56u, 0x000500c7u, 0x00000006u, 0x00004e58u, 0x00004e48u, 0x000006c2u, 0x0003003eu, 0x00004e53u, 0x00004e58u, 0x0004007cu, 0x00000008u, 0x00004e5au, 0x00004e56u, 0x0004007cu, 0x00000008u, 0x00004e60u, 0x00004e58u, 0x00070050u, 0x00000009u, 0x00004e61u, 0x00004e5au, 0x00004e5au, 0x00004e5au, 0x00004e60u, 0x0003003eu, 0x00004e54u, 0x00004e61u, 0x0003003eu, 0x00004e1cu, 0x00004e61u, 0x000200f9u, 0x00004e4au, 0x000200f8u, 0x00004e4au, 0x000700f5u, 0x00000009u, 0x000096a7u, 0x00004e61u, 0x00004e4bu, 0x00004e7bu, 0x00004e4cu, 0x0003003eu, 0x00004e1fu, 0x000096a7u, 0x0003003eu, 0x00004507u, 0x000096a7u, 0x000300f7u, 0x0000470eu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x0000470fu, 0x0000470eu, 0x000200f8u, 0x0000470fu, 0x00050050u, 0x0000005fu, 0x00004712u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x00004713u, 0x00004712u, 0x0003003eu, 0x00006998u, 0x000044bcu, 0x0003003eu, 0x00006999u, 0x000044bfu, 0x0003003eu, 0x0000452eu, 0x000020f8u, 0x0003003eu, 0x0000452fu, 0x00004713u, 0x0003003eu, 0x00004530u, 0x00000485u, 0x0003003eu, 0x00004531u, 0x0000469au, 0x0003003eu, 0x00004532u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004e88u, 0x0000452fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004e89u, 0x00004e88u, 0x00050084u, 0x00000006u, 0x00004e8au, 0x000044bfu, 0x00004e89u, 0x00050080u, 0x00000006u, 0x00004e8bu, 0x000044bcu, 0x00004e8au, 0x0003003eu, 0x00004e7cu, 0x00004e8bu, 0x00050041u, 0x00000007u, 0x00004e8cu, 0x0000452fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004e8du, 0x00004e8cu, 0x00050080u, 0x00000006u, 0x00004e8fu, 0x00004e8bu, 0x00004e8du, 0x0003003eu, 0x00004e7cu, 0x00004e8fu, 0x000500c7u, 0x00000006u, 0x00004e91u, 0x00004e8fu, 0x00000f0bu, 0x0003003eu, 0x00004e7cu, 0x00004e91u, 0x0003003eu, 0x00004e7du, 0x00004e91u, 0x0004003du, 0x00000006u, 0x00004e94u, 0x00004e88u, 0x000500c7u, 0x00000006u, 0x00004e95u, 0x00004e94u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004e96u, 0x00004e95u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004e98u, 0x00004e91u, 0x00004e96u, 0x0003003eu, 0x00004e7du, 0x00004e98u, 0x000500c6u, 0x00000006u, 0x00004e9au, 0x00004e98u, 0x0000048bu, 0x0003003eu, 0x00004e7du, 0x00004e9au, 0x00080041u, 0x00000277u, 0x00004e9du, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004e9au, 0x0004003du, 0x00000229u, 0x00004e9eu, 0x00004e9du, 0x00040071u, 0x00000006u, 0x00004e9fu, 0x00004e9eu, 0x0003003eu, 0x00004e7eu, 0x00004e9fu, 0x000500c4u, 0x00000006u, 0x00004ea1u, 0x00004e9fu, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004ea3u, 0x00004ea1u, 0x00000485u, 0x0003003eu, 0x00004e7fu, 0x00004ea3u, 0x000500c6u, 0x00000006u, 0x00004ea6u, 0x00004ea3u, 0x0000469au, 0x0003003eu, 0x00004e7fu, 0x00004ea6u, 0x000500c5u, 0x00000006u, 0x00004ea9u, 0x00000f3cu, 0x00004ea6u, 0x00080041u, 0x00000270u, 0x00004eaau, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004ea9u, 0x0004003du, 0x0000022bu, 0x00004eabu, 0x00004eaau, 0x00040071u, 0x00000006u, 0x00004eacu, 0x00004eabu, 0x0003003eu, 0x00004e7eu, 0x00004eacu, 0x000300f7u, 0x00004eaeu, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004eafu, 0x00004eb0u, 0x000200f8u, 0x00004eb0u, 0x0003003eu, 0x00004e82u, 0x00004eacu, 0x00060050u, 0x00000353u, 0x00004ecau, 0x00004eacu, 0x00004eacu, 0x00004eacu, 0x000500c2u, 0x00000353u, 0x00004ecbu, 0x00004ecau, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004ecdu, 0x00004ecbu, 0x0000eee9u, 0x0003003eu, 0x00004ec6u, 0x00004ecdu, 0x000500c4u, 0x00000353u, 0x00004ed0u, 0x00004ecdu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004ed3u, 0x00004ecdu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004ed4u, 0x00004ed0u, 0x00004ed3u, 0x0003003eu, 0x00004ec6u, 0x00004ed4u, 0x000500c7u, 0x00000006u, 0x00004ed6u, 0x00004eacu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004ed7u, 0x00004ed6u, 0x000006c2u, 0x0003003eu, 0x00004ec7u, 0x00004ed7u, 0x0004007cu, 0x0000003cu, 0x00004ed9u, 0x00004ed4u, 0x0004007cu, 0x00000008u, 0x00004edbu, 0x00004ed7u, 0x00050051u, 0x00000008u, 0x00004edcu, 0x00004ed9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004eddu, 0x00004ed9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004edeu, 0x00004ed9u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004edfu, 0x00004edcu, 0x00004eddu, 0x00004edeu, 0x00004edbu, 0x0003003eu, 0x00004ec8u, 0x00004edfu, 0x0003003eu, 0x00004e80u, 0x00004edfu, 0x000200f9u, 0x00004eaeu, 0x000200f8u, 0x00004eafu, 0x0003003eu, 0x00004e81u, 0x00004eacu, 0x000500c2u, 0x00000006u, 0x00004ebau, 0x00004eacu, 0x0000025eu, 0x0003003eu, 0x00004eb6u, 0x00004ebau, 0x000500c7u, 0x00000006u, 0x00004ebcu, 0x00004eacu, 0x000006c2u, 0x0003003eu, 0x00004eb7u, 0x00004ebcu, 0x0004007cu, 0x00000008u, 0x00004ebeu, 0x00004ebau, 0x0004007cu, 0x00000008u, 0x00004ec4u, 0x00004ebcu, 0x00070050u, 0x00000009u, 0x00004ec5u, 0x00004ebeu, 0x00004ebeu, 0x00004ebeu, 0x00004ec4u, 0x0003003eu, 0x00004eb8u, 0x00004ec5u, 0x0003003eu, 0x00004e80u, 0x00004ec5u, 0x000200f9u, 0x00004eaeu, 0x000200f8u, 0x00004eaeu, 0x000700f5u, 0x00000009u, 0x000096bfu, 0x00004ec5u, 0x00004eafu, 0x00004edfu, 0x00004eb0u, 0x0003003eu, 0x00004e83u, 0x000096bfu, 0x0003003eu, 0x0000450fu, 0x000096bfu, 0x00050050u, 0x0000005fu, 0x0000471bu, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x0000471cu, 0x0000471bu, 0x0003003eu, 0x0000699cu, 0x000044bcu, 0x0003003eu, 0x0000699du, 0x000044bfu, 0x0003003eu, 0x00004534u, 0x000020f8u, 0x0003003eu, 0x00004535u, 0x0000471cu, 0x0003003eu, 0x00004536u, 0x000003c4u, 0x0003003eu, 0x00004537u, 0x0000469au, 0x0003003eu, 0x00004538u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004eecu, 0x00004535u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004eedu, 0x00004eecu, 0x00050084u, 0x00000006u, 0x00004eeeu, 0x000044bfu, 0x00004eedu, 0x00050080u, 0x00000006u, 0x00004eefu, 0x000044bcu, 0x00004eeeu, 0x0003003eu, 0x00004ee0u, 0x00004eefu, 0x00050041u, 0x00000007u, 0x00004ef0u, 0x00004535u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004ef1u, 0x00004ef0u, 0x00050080u, 0x00000006u, 0x00004ef3u, 0x00004eefu, 0x00004ef1u, 0x0003003eu, 0x00004ee0u, 0x00004ef3u, 0x000500c7u, 0x00000006u, 0x00004ef5u, 0x00004ef3u, 0x00000f0bu, 0x0003003eu, 0x00004ee0u, 0x00004ef5u, 0x0003003eu, 0x00004ee1u, 0x00004ef5u, 0x0004003du, 0x00000006u, 0x00004ef8u, 0x00004eecu, 0x000500c7u, 0x00000006u, 0x00004ef9u, 0x00004ef8u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004efau, 0x00004ef9u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004efcu, 0x00004ef5u, 0x00004efau, 0x0003003eu, 0x00004ee1u, 0x00004efcu, 0x000500c6u, 0x00000006u, 0x00004efeu, 0x00004efcu, 0x0000048bu, 0x0003003eu, 0x00004ee1u, 0x00004efeu, 0x00080041u, 0x00000277u, 0x00004f01u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004efeu, 0x0004003du, 0x00000229u, 0x00004f02u, 0x00004f01u, 0x00040071u, 0x00000006u, 0x00004f03u, 0x00004f02u, 0x0003003eu, 0x00004ee2u, 0x00004f03u, 0x000500c4u, 0x00000006u, 0x00004f05u, 0x00004f03u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004f07u, 0x00004f05u, 0x000003c4u, 0x0003003eu, 0x00004ee3u, 0x00004f07u, 0x000500c6u, 0x00000006u, 0x00004f0au, 0x00004f07u, 0x0000469au, 0x0003003eu, 0x00004ee3u, 0x00004f0au, 0x000500c5u, 0x00000006u, 0x00004f0du, 0x00000f3cu, 0x00004f0au, 0x00080041u, 0x00000270u, 0x00004f0eu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004f0du, 0x0004003du, 0x0000022bu, 0x00004f0fu, 0x00004f0eu, 0x00040071u, 0x00000006u, 0x00004f10u, 0x00004f0fu, 0x0003003eu, 0x00004ee2u, 0x00004f10u, 0x000300f7u, 0x00004f12u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004f13u, 0x00004f14u, 0x000200f8u, 0x00004f14u, 0x0003003eu, 0x00004ee6u, 0x00004f10u, 0x00060050u, 0x00000353u, 0x00004f2eu, 0x00004f10u, 0x00004f10u, 0x00004f10u, 0x000500c2u, 0x00000353u, 0x00004f2fu, 0x00004f2eu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004f31u, 0x00004f2fu, 0x0000eee9u, 0x0003003eu, 0x00004f2au, 0x00004f31u, 0x000500c4u, 0x00000353u, 0x00004f34u, 0x00004f31u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004f37u, 0x00004f31u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004f38u, 0x00004f34u, 0x00004f37u, 0x0003003eu, 0x00004f2au, 0x00004f38u, 0x000500c7u, 0x00000006u, 0x00004f3au, 0x00004f10u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004f3bu, 0x00004f3au, 0x000006c2u, 0x0003003eu, 0x00004f2bu, 0x00004f3bu, 0x0004007cu, 0x0000003cu, 0x00004f3du, 0x00004f38u, 0x0004007cu, 0x00000008u, 0x00004f3fu, 0x00004f3bu, 0x00050051u, 0x00000008u, 0x00004f40u, 0x00004f3du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004f41u, 0x00004f3du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004f42u, 0x00004f3du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004f43u, 0x00004f40u, 0x00004f41u, 0x00004f42u, 0x00004f3fu, 0x0003003eu, 0x00004f2cu, 0x00004f43u, 0x0003003eu, 0x00004ee4u, 0x00004f43u, 0x000200f9u, 0x00004f12u, 0x000200f8u, 0x00004f13u, 0x0003003eu, 0x00004ee5u, 0x00004f10u, 0x000500c2u, 0x00000006u, 0x00004f1eu, 0x00004f10u, 0x0000025eu, 0x0003003eu, 0x00004f1au, 0x00004f1eu, 0x000500c7u, 0x00000006u, 0x00004f20u, 0x00004f10u, 0x000006c2u, 0x0003003eu, 0x00004f1bu, 0x00004f20u, 0x0004007cu, 0x00000008u, 0x00004f22u, 0x00004f1eu, 0x0004007cu, 0x00000008u, 0x00004f28u, 0x00004f20u, 0x00070050u, 0x00000009u, 0x00004f29u, 0x00004f22u, 0x00004f22u, 0x00004f22u, 0x00004f28u, 0x0003003eu, 0x00004f1cu, 0x00004f29u, 0x0003003eu, 0x00004ee4u, 0x00004f29u, 0x000200f9u, 0x00004f12u, 0x000200f8u, 0x00004f12u, 0x000700f5u, 0x00000009u, 0x000096d7u, 0x00004f29u, 0x00004f13u, 0x00004f43u, 0x00004f14u, 0x0003003eu, 0x00004ee7u, 0x000096d7u, 0x0003003eu, 0x00004517u, 0x000096d7u, 0x000200f9u, 0x0000470eu, 0x000200f8u, 0x0000470eu, 0x000700f5u, 0x00000009u, 0x00009b1bu, 0x00009a79u, 0x00004e4au, 0x000096d7u, 0x00004f12u, 0x000700f5u, 0x00000009u, 0x0000994eu, 0x000098aau, 0x00004e4au, 0x000096bfu, 0x00004f12u, 0x000300f7u, 0x00004723u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x00004724u, 0x00004723u, 0x000200f8u, 0x00004724u, 0x00050050u, 0x0000005fu, 0x00004727u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x00004728u, 0x00004727u, 0x0003003eu, 0x000069a0u, 0x000044bcu, 0x0003003eu, 0x000069a1u, 0x000044bfu, 0x0003003eu, 0x0000453au, 0x000020f8u, 0x0003003eu, 0x0000453bu, 0x00004728u, 0x0003003eu, 0x0000453cu, 0x0000048bu, 0x0003003eu, 0x0000453du, 0x0000469au, 0x0003003eu, 0x0000453eu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004f50u, 0x0000453bu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004f51u, 0x00004f50u, 0x00050084u, 0x00000006u, 0x00004f52u, 0x000044bfu, 0x00004f51u, 0x00050080u, 0x00000006u, 0x00004f53u, 0x000044bcu, 0x00004f52u, 0x0003003eu, 0x00004f44u, 0x00004f53u, 0x00050041u, 0x00000007u, 0x00004f54u, 0x0000453bu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004f55u, 0x00004f54u, 0x00050080u, 0x00000006u, 0x00004f57u, 0x00004f53u, 0x00004f55u, 0x0003003eu, 0x00004f44u, 0x00004f57u, 0x000500c7u, 0x00000006u, 0x00004f59u, 0x00004f57u, 0x00000f0bu, 0x0003003eu, 0x00004f44u, 0x00004f59u, 0x0003003eu, 0x00004f45u, 0x00004f59u, 0x0004003du, 0x00000006u, 0x00004f5cu, 0x00004f50u, 0x000500c7u, 0x00000006u, 0x00004f5du, 0x00004f5cu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004f5eu, 0x00004f5du, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004f60u, 0x00004f59u, 0x00004f5eu, 0x0003003eu, 0x00004f45u, 0x00004f60u, 0x000500c6u, 0x00000006u, 0x00004f62u, 0x00004f60u, 0x0000048bu, 0x0003003eu, 0x00004f45u, 0x00004f62u, 0x00080041u, 0x00000277u, 0x00004f65u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004f62u, 0x0004003du, 0x00000229u, 0x00004f66u, 0x00004f65u, 0x00040071u, 0x00000006u, 0x00004f67u, 0x00004f66u, 0x0003003eu, 0x00004f46u, 0x00004f67u, 0x000500c4u, 0x00000006u, 0x00004f69u, 0x00004f67u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004f6bu, 0x00004f69u, 0x0000048bu, 0x0003003eu, 0x00004f47u, 0x00004f6bu, 0x000500c6u, 0x00000006u, 0x00004f6eu, 0x00004f6bu, 0x0000469au, 0x0003003eu, 0x00004f47u, 0x00004f6eu, 0x000500c5u, 0x00000006u, 0x00004f71u, 0x00000f3cu, 0x00004f6eu, 0x00080041u, 0x00000270u, 0x00004f72u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004f71u, 0x0004003du, 0x0000022bu, 0x00004f73u, 0x00004f72u, 0x00040071u, 0x00000006u, 0x00004f74u, 0x00004f73u, 0x0003003eu, 0x00004f46u, 0x00004f74u, 0x000300f7u, 0x00004f76u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004f77u, 0x00004f78u, 0x000200f8u, 0x00004f78u, 0x0003003eu, 0x00004f4au, 0x00004f74u, 0x00060050u, 0x00000353u, 0x00004f92u, 0x00004f74u, 0x00004f74u, 0x00004f74u, 0x000500c2u, 0x00000353u, 0x00004f93u, 0x00004f92u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004f95u, 0x00004f93u, 0x0000eee9u, 0x0003003eu, 0x00004f8eu, 0x00004f95u, 0x000500c4u, 0x00000353u, 0x00004f98u, 0x00004f95u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004f9bu, 0x00004f95u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004f9cu, 0x00004f98u, 0x00004f9bu, 0x0003003eu, 0x00004f8eu, 0x00004f9cu, 0x000500c7u, 0x00000006u, 0x00004f9eu, 0x00004f74u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004f9fu, 0x00004f9eu, 0x000006c2u, 0x0003003eu, 0x00004f8fu, 0x00004f9fu, 0x0004007cu, 0x0000003cu, 0x00004fa1u, 0x00004f9cu, 0x0004007cu, 0x00000008u, 0x00004fa3u, 0x00004f9fu, 0x00050051u, 0x00000008u, 0x00004fa4u, 0x00004fa1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004fa5u, 0x00004fa1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004fa6u, 0x00004fa1u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004fa7u, 0x00004fa4u, 0x00004fa5u, 0x00004fa6u, 0x00004fa3u, 0x0003003eu, 0x00004f90u, 0x00004fa7u, 0x0003003eu, 0x00004f48u, 0x00004fa7u, 0x000200f9u, 0x00004f76u, 0x000200f8u, 0x00004f77u, 0x0003003eu, 0x00004f49u, 0x00004f74u, 0x000500c2u, 0x00000006u, 0x00004f82u, 0x00004f74u, 0x0000025eu, 0x0003003eu, 0x00004f7eu, 0x00004f82u, 0x000500c7u, 0x00000006u, 0x00004f84u, 0x00004f74u, 0x000006c2u, 0x0003003eu, 0x00004f7fu, 0x00004f84u, 0x0004007cu, 0x00000008u, 0x00004f86u, 0x00004f82u, 0x0004007cu, 0x00000008u, 0x00004f8cu, 0x00004f84u, 0x00070050u, 0x00000009u, 0x00004f8du, 0x00004f86u, 0x00004f86u, 0x00004f86u, 0x00004f8cu, 0x0003003eu, 0x00004f80u, 0x00004f8du, 0x0003003eu, 0x00004f48u, 0x00004f8du, 0x000200f9u, 0x00004f76u, 0x000200f8u, 0x00004f76u, 0x000700f5u, 0x00000009u, 0x00009704u, 0x00004f8du, 0x00004f77u, 0x00004fa7u, 0x00004f78u, 0x0003003eu, 0x00004f4bu, 0x00009704u, 0x0003003eu, 0x0000451fu, 0x00009704u, 0x000200f9u, 0x00004723u, 0x000200f8u, 0x00004723u, 0x000700f5u, 0x00000009u, 0x00009c00u, 0x00009b5du, 0x0000470eu, 0x00009704u, 0x00004f76u, 0x000200f9u, 0x0000469du, 0x000200f8u, 0x0000469fu, 0x0004007cu, 0x000000a2u, 0x000046cdu, 0x0000951eu, 0x0004007cu, 0x00000006u, 0x000046d0u, 0x000044ceu, 0x000600a9u, 0x00000008u, 0x000046d2u, 0x00004683u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000046d3u, 0x000046d2u, 0x0003003eu, 0x00006984u, 0x000044bcu, 0x0003003eu, 0x00006985u, 0x000044bfu, 0x0003003eu, 0x00004509u, 0x000020f8u, 0x0003003eu, 0x0000450au, 0x000046cdu, 0x0003003eu, 0x0000450bu, 0x000046d0u, 0x0003003eu, 0x0000450cu, 0x000046d3u, 0x0003003eu, 0x0000450du, 0x0000469au, 0x0003003eu, 0x0000450eu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004c59u, 0x0000450au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004c5au, 0x00004c59u, 0x00050084u, 0x00000006u, 0x00004c5bu, 0x000044bfu, 0x00004c5au, 0x00050080u, 0x00000006u, 0x00004c5cu, 0x000044bcu, 0x00004c5bu, 0x0003003eu, 0x00004c4cu, 0x00004c5cu, 0x00050041u, 0x00000007u, 0x00004c5du, 0x0000450au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004c5eu, 0x00004c5du, 0x000500c2u, 0x00000006u, 0x00004c5fu, 0x00004c5eu, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004c61u, 0x00004c5cu, 0x00004c5fu, 0x0003003eu, 0x00004c4cu, 0x00004c61u, 0x000500c7u, 0x00000006u, 0x00004c63u, 0x00004c61u, 0x00000f0bu, 0x0003003eu, 0x00004c4cu, 0x00004c63u, 0x0004003du, 0x00000006u, 0x00004c65u, 0x00004c5du, 0x000400c8u, 0x00000006u, 0x00004c66u, 0x00004c65u, 0x000500c7u, 0x00000006u, 0x00004c67u, 0x00004c66u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004c68u, 0x00004c67u, 0x00000701u, 0x0003003eu, 0x00004c4du, 0x00004c68u, 0x0003003eu, 0x00004c4eu, 0x00004c63u, 0x0004003du, 0x00000006u, 0x00004c6bu, 0x00004c59u, 0x000500c7u, 0x00000006u, 0x00004c6cu, 0x00004c6bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004c6du, 0x00004c6cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004c6fu, 0x00004c63u, 0x00004c6du, 0x0003003eu, 0x00004c4eu, 0x00004c6fu, 0x000500c6u, 0x00000006u, 0x00004c71u, 0x00004c6fu, 0x0000048bu, 0x0003003eu, 0x00004c4eu, 0x00004c71u, 0x00080041u, 0x00000277u, 0x00004c74u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004c71u, 0x0004003du, 0x00000229u, 0x00004c75u, 0x00004c74u, 0x00040071u, 0x00000006u, 0x00004c76u, 0x00004c75u, 0x0003003eu, 0x00004c4fu, 0x00004c76u, 0x000500c2u, 0x00000006u, 0x00004c79u, 0x00004c76u, 0x00004c68u, 0x000500c7u, 0x00000006u, 0x00004c7au, 0x00004c79u, 0x00000e7cu, 0x0003003eu, 0x00004c4fu, 0x00004c7au, 0x000500c4u, 0x00000006u, 0x00004c7cu, 0x000046d0u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00004c7eu, 0x00004c7au, 0x00004c7cu, 0x0003003eu, 0x00004c4fu, 0x00004c7eu, 0x000500c4u, 0x00000006u, 0x00004c80u, 0x00004c7eu, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004c82u, 0x00004c80u, 0x000046d3u, 0x0003003eu, 0x00004c50u, 0x00004c82u, 0x000500c6u, 0x00000006u, 0x00004c85u, 0x00004c82u, 0x0000469au, 0x0003003eu, 0x00004c50u, 0x00004c85u, 0x000500c5u, 0x00000006u, 0x00004c88u, 0x00000f3cu, 0x00004c85u, 0x00080041u, 0x00000270u, 0x00004c89u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004c88u, 0x0004003du, 0x0000022bu, 0x00004c8au, 0x00004c89u, 0x00040071u, 0x00000006u, 0x00004c8bu, 0x00004c8au, 0x0003003eu, 0x00004c4fu, 0x00004c8bu, 0x000300f7u, 0x00004c8du, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004c8eu, 0x00004c8fu, 0x000200f8u, 0x00004c8fu, 0x0003003eu, 0x00004c53u, 0x00004c8bu, 0x00060050u, 0x00000353u, 0x00004ca9u, 0x00004c8bu, 0x00004c8bu, 0x00004c8bu, 0x000500c2u, 0x00000353u, 0x00004caau, 0x00004ca9u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004cacu, 0x00004caau, 0x0000eee9u, 0x0003003eu, 0x00004ca5u, 0x00004cacu, 0x000500c4u, 0x00000353u, 0x00004cafu, 0x00004cacu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004cb2u, 0x00004cacu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004cb3u, 0x00004cafu, 0x00004cb2u, 0x0003003eu, 0x00004ca5u, 0x00004cb3u, 0x000500c7u, 0x00000006u, 0x00004cb5u, 0x00004c8bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004cb6u, 0x00004cb5u, 0x000006c2u, 0x0003003eu, 0x00004ca6u, 0x00004cb6u, 0x0004007cu, 0x0000003cu, 0x00004cb8u, 0x00004cb3u, 0x0004007cu, 0x00000008u, 0x00004cbau, 0x00004cb6u, 0x00050051u, 0x00000008u, 0x00004cbbu, 0x00004cb8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004cbcu, 0x00004cb8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004cbdu, 0x00004cb8u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004cbeu, 0x00004cbbu, 0x00004cbcu, 0x00004cbdu, 0x00004cbau, 0x0003003eu, 0x00004ca7u, 0x00004cbeu, 0x0003003eu, 0x00004c51u, 0x00004cbeu, 0x000200f9u, 0x00004c8du, 0x000200f8u, 0x00004c8eu, 0x0003003eu, 0x00004c52u, 0x00004c8bu, 0x000500c2u, 0x00000006u, 0x00004c99u, 0x00004c8bu, 0x0000025eu, 0x0003003eu, 0x00004c95u, 0x00004c99u, 0x000500c7u, 0x00000006u, 0x00004c9bu, 0x00004c8bu, 0x000006c2u, 0x0003003eu, 0x00004c96u, 0x00004c9bu, 0x0004007cu, 0x00000008u, 0x00004c9du, 0x00004c99u, 0x0004007cu, 0x00000008u, 0x00004ca3u, 0x00004c9bu, 0x00070050u, 0x00000009u, 0x00004ca4u, 0x00004c9du, 0x00004c9du, 0x00004c9du, 0x00004ca3u, 0x0003003eu, 0x00004c97u, 0x00004ca4u, 0x0003003eu, 0x00004c51u, 0x00004ca4u, 0x000200f9u, 0x00004c8du, 0x000200f8u, 0x00004c8du, 0x000700f5u, 0x00000009u, 0x00009705u, 0x00004ca4u, 0x00004c8eu, 0x00004cbeu, 0x00004c8fu, 0x0003003eu, 0x00004c54u, 0x00009705u, 0x0003003eu, 0x00004507u, 0x00009705u, 0x000300f7u, 0x000046dau, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000046dbu, 0x000046dau, 0x000200f8u, 0x000046dbu, 0x00050050u, 0x0000005fu, 0x000046deu, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000046dfu, 0x000046deu, 0x0003003eu, 0x00006988u, 0x000044bcu, 0x0003003eu, 0x00006989u, 0x000044bfu, 0x0003003eu, 0x00004511u, 0x000020f8u, 0x0003003eu, 0x00004512u, 0x000046dfu, 0x0003003eu, 0x00004513u, 0x000046d0u, 0x0003003eu, 0x00004514u, 0x00000485u, 0x0003003eu, 0x00004515u, 0x0000469au, 0x0003003eu, 0x00004516u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004cccu, 0x00004512u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004ccdu, 0x00004cccu, 0x00050084u, 0x00000006u, 0x00004cceu, 0x000044bfu, 0x00004ccdu, 0x00050080u, 0x00000006u, 0x00004ccfu, 0x000044bcu, 0x00004cceu, 0x0003003eu, 0x00004cbfu, 0x00004ccfu, 0x00050041u, 0x00000007u, 0x00004cd0u, 0x00004512u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004cd1u, 0x00004cd0u, 0x000500c2u, 0x00000006u, 0x00004cd2u, 0x00004cd1u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004cd4u, 0x00004ccfu, 0x00004cd2u, 0x0003003eu, 0x00004cbfu, 0x00004cd4u, 0x000500c7u, 0x00000006u, 0x00004cd6u, 0x00004cd4u, 0x00000f0bu, 0x0003003eu, 0x00004cbfu, 0x00004cd6u, 0x0004003du, 0x00000006u, 0x00004cd8u, 0x00004cd0u, 0x000400c8u, 0x00000006u, 0x00004cd9u, 0x00004cd8u, 0x000500c7u, 0x00000006u, 0x00004cdau, 0x00004cd9u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004cdbu, 0x00004cdau, 0x00000701u, 0x0003003eu, 0x00004cc0u, 0x00004cdbu, 0x0003003eu, 0x00004cc1u, 0x00004cd6u, 0x0004003du, 0x00000006u, 0x00004cdeu, 0x00004cccu, 0x000500c7u, 0x00000006u, 0x00004cdfu, 0x00004cdeu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004ce0u, 0x00004cdfu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004ce2u, 0x00004cd6u, 0x00004ce0u, 0x0003003eu, 0x00004cc1u, 0x00004ce2u, 0x000500c6u, 0x00000006u, 0x00004ce4u, 0x00004ce2u, 0x0000048bu, 0x0003003eu, 0x00004cc1u, 0x00004ce4u, 0x00080041u, 0x00000277u, 0x00004ce7u, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004ce4u, 0x0004003du, 0x00000229u, 0x00004ce8u, 0x00004ce7u, 0x00040071u, 0x00000006u, 0x00004ce9u, 0x00004ce8u, 0x0003003eu, 0x00004cc2u, 0x00004ce9u, 0x000500c2u, 0x00000006u, 0x00004cecu, 0x00004ce9u, 0x00004cdbu, 0x000500c7u, 0x00000006u, 0x00004cedu, 0x00004cecu, 0x00000e7cu, 0x0003003eu, 0x00004cc2u, 0x00004cedu, 0x000500c5u, 0x00000006u, 0x00004cf1u, 0x00004cedu, 0x00004c7cu, 0x0003003eu, 0x00004cc2u, 0x00004cf1u, 0x000500c4u, 0x00000006u, 0x00004cf3u, 0x00004cf1u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004cf5u, 0x00004cf3u, 0x00000485u, 0x0003003eu, 0x00004cc3u, 0x00004cf5u, 0x000500c6u, 0x00000006u, 0x00004cf8u, 0x00004cf5u, 0x0000469au, 0x0003003eu, 0x00004cc3u, 0x00004cf8u, 0x000500c5u, 0x00000006u, 0x00004cfbu, 0x00000f3cu, 0x00004cf8u, 0x00080041u, 0x00000270u, 0x00004cfcu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004cfbu, 0x0004003du, 0x0000022bu, 0x00004cfdu, 0x00004cfcu, 0x00040071u, 0x00000006u, 0x00004cfeu, 0x00004cfdu, 0x0003003eu, 0x00004cc2u, 0x00004cfeu, 0x000300f7u, 0x00004d00u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004d01u, 0x00004d02u, 0x000200f8u, 0x00004d02u, 0x0003003eu, 0x00004cc6u, 0x00004cfeu, 0x00060050u, 0x00000353u, 0x00004d1cu, 0x00004cfeu, 0x00004cfeu, 0x00004cfeu, 0x000500c2u, 0x00000353u, 0x00004d1du, 0x00004d1cu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004d1fu, 0x00004d1du, 0x0000eee9u, 0x0003003eu, 0x00004d18u, 0x00004d1fu, 0x000500c4u, 0x00000353u, 0x00004d22u, 0x00004d1fu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004d25u, 0x00004d1fu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004d26u, 0x00004d22u, 0x00004d25u, 0x0003003eu, 0x00004d18u, 0x00004d26u, 0x000500c7u, 0x00000006u, 0x00004d28u, 0x00004cfeu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004d29u, 0x00004d28u, 0x000006c2u, 0x0003003eu, 0x00004d19u, 0x00004d29u, 0x0004007cu, 0x0000003cu, 0x00004d2bu, 0x00004d26u, 0x0004007cu, 0x00000008u, 0x00004d2du, 0x00004d29u, 0x00050051u, 0x00000008u, 0x00004d2eu, 0x00004d2bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004d2fu, 0x00004d2bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004d30u, 0x00004d2bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004d31u, 0x00004d2eu, 0x00004d2fu, 0x00004d30u, 0x00004d2du, 0x0003003eu, 0x00004d1au, 0x00004d31u, 0x0003003eu, 0x00004cc4u, 0x00004d31u, 0x000200f9u, 0x00004d00u, 0x000200f8u, 0x00004d01u, 0x0003003eu, 0x00004cc5u, 0x00004cfeu, 0x000500c2u, 0x00000006u, 0x00004d0cu, 0x00004cfeu, 0x0000025eu, 0x0003003eu, 0x00004d08u, 0x00004d0cu, 0x000500c7u, 0x00000006u, 0x00004d0eu, 0x00004cfeu, 0x000006c2u, 0x0003003eu, 0x00004d09u, 0x00004d0eu, 0x0004007cu, 0x00000008u, 0x00004d10u, 0x00004d0cu, 0x0004007cu, 0x00000008u, 0x00004d16u, 0x00004d0eu, 0x00070050u, 0x00000009u, 0x00004d17u, 0x00004d10u, 0x00004d10u, 0x00004d10u, 0x00004d16u, 0x0003003eu, 0x00004d0au, 0x00004d17u, 0x0003003eu, 0x00004cc4u, 0x00004d17u, 0x000200f9u, 0x00004d00u, 0x000200f8u, 0x00004d00u, 0x000700f5u, 0x00000009u, 0x0000971au, 0x00004d17u, 0x00004d01u, 0x00004d31u, 0x00004d02u, 0x0003003eu, 0x00004cc7u, 0x0000971au, 0x0003003eu, 0x0000450fu, 0x0000971au, 0x00050050u, 0x0000005fu, 0x000046eau, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000046ebu, 0x000046eau, 0x0003003eu, 0x0000698cu, 0x000044bcu, 0x0003003eu, 0x0000698du, 0x000044bfu, 0x0003003eu, 0x00004519u, 0x000020f8u, 0x0003003eu, 0x0000451au, 0x000046ebu, 0x0003003eu, 0x0000451bu, 0x000046d0u, 0x0003003eu, 0x0000451cu, 0x000003c4u, 0x0003003eu, 0x0000451du, 0x0000469au, 0x0003003eu, 0x0000451eu, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004d3fu, 0x0000451au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004d40u, 0x00004d3fu, 0x00050084u, 0x00000006u, 0x00004d41u, 0x000044bfu, 0x00004d40u, 0x00050080u, 0x00000006u, 0x00004d42u, 0x000044bcu, 0x00004d41u, 0x0003003eu, 0x00004d32u, 0x00004d42u, 0x00050041u, 0x00000007u, 0x00004d43u, 0x0000451au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004d44u, 0x00004d43u, 0x000500c2u, 0x00000006u, 0x00004d45u, 0x00004d44u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004d47u, 0x00004d42u, 0x00004d45u, 0x0003003eu, 0x00004d32u, 0x00004d47u, 0x000500c7u, 0x00000006u, 0x00004d49u, 0x00004d47u, 0x00000f0bu, 0x0003003eu, 0x00004d32u, 0x00004d49u, 0x0004003du, 0x00000006u, 0x00004d4bu, 0x00004d43u, 0x000400c8u, 0x00000006u, 0x00004d4cu, 0x00004d4bu, 0x000500c7u, 0x00000006u, 0x00004d4du, 0x00004d4cu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004d4eu, 0x00004d4du, 0x00000701u, 0x0003003eu, 0x00004d33u, 0x00004d4eu, 0x0003003eu, 0x00004d34u, 0x00004d49u, 0x0004003du, 0x00000006u, 0x00004d51u, 0x00004d3fu, 0x000500c7u, 0x00000006u, 0x00004d52u, 0x00004d51u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004d53u, 0x00004d52u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004d55u, 0x00004d49u, 0x00004d53u, 0x0003003eu, 0x00004d34u, 0x00004d55u, 0x000500c6u, 0x00000006u, 0x00004d57u, 0x00004d55u, 0x0000048bu, 0x0003003eu, 0x00004d34u, 0x00004d57u, 0x00080041u, 0x00000277u, 0x00004d5au, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004d57u, 0x0004003du, 0x00000229u, 0x00004d5bu, 0x00004d5au, 0x00040071u, 0x00000006u, 0x00004d5cu, 0x00004d5bu, 0x0003003eu, 0x00004d35u, 0x00004d5cu, 0x000500c2u, 0x00000006u, 0x00004d5fu, 0x00004d5cu, 0x00004d4eu, 0x000500c7u, 0x00000006u, 0x00004d60u, 0x00004d5fu, 0x00000e7cu, 0x0003003eu, 0x00004d35u, 0x00004d60u, 0x000500c5u, 0x00000006u, 0x00004d64u, 0x00004d60u, 0x00004c7cu, 0x0003003eu, 0x00004d35u, 0x00004d64u, 0x000500c4u, 0x00000006u, 0x00004d66u, 0x00004d64u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004d68u, 0x00004d66u, 0x000003c4u, 0x0003003eu, 0x00004d36u, 0x00004d68u, 0x000500c6u, 0x00000006u, 0x00004d6bu, 0x00004d68u, 0x0000469au, 0x0003003eu, 0x00004d36u, 0x00004d6bu, 0x000500c5u, 0x00000006u, 0x00004d6eu, 0x00000f3cu, 0x00004d6bu, 0x00080041u, 0x00000270u, 0x00004d6fu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004d6eu, 0x0004003du, 0x0000022bu, 0x00004d70u, 0x00004d6fu, 0x00040071u, 0x00000006u, 0x00004d71u, 0x00004d70u, 0x0003003eu, 0x00004d35u, 0x00004d71u, 0x000300f7u, 0x00004d73u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004d74u, 0x00004d75u, 0x000200f8u, 0x00004d75u, 0x0003003eu, 0x00004d39u, 0x00004d71u, 0x00060050u, 0x00000353u, 0x00004d8fu, 0x00004d71u, 0x00004d71u, 0x00004d71u, 0x000500c2u, 0x00000353u, 0x00004d90u, 0x00004d8fu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004d92u, 0x00004d90u, 0x0000eee9u, 0x0003003eu, 0x00004d8bu, 0x00004d92u, 0x000500c4u, 0x00000353u, 0x00004d95u, 0x00004d92u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004d98u, 0x00004d92u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004d99u, 0x00004d95u, 0x00004d98u, 0x0003003eu, 0x00004d8bu, 0x00004d99u, 0x000500c7u, 0x00000006u, 0x00004d9bu, 0x00004d71u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004d9cu, 0x00004d9bu, 0x000006c2u, 0x0003003eu, 0x00004d8cu, 0x00004d9cu, 0x0004007cu, 0x0000003cu, 0x00004d9eu, 0x00004d99u, 0x0004007cu, 0x00000008u, 0x00004da0u, 0x00004d9cu, 0x00050051u, 0x00000008u, 0x00004da1u, 0x00004d9eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004da2u, 0x00004d9eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004da3u, 0x00004d9eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004da4u, 0x00004da1u, 0x00004da2u, 0x00004da3u, 0x00004da0u, 0x0003003eu, 0x00004d8du, 0x00004da4u, 0x0003003eu, 0x00004d37u, 0x00004da4u, 0x000200f9u, 0x00004d73u, 0x000200f8u, 0x00004d74u, 0x0003003eu, 0x00004d38u, 0x00004d71u, 0x000500c2u, 0x00000006u, 0x00004d7fu, 0x00004d71u, 0x0000025eu, 0x0003003eu, 0x00004d7bu, 0x00004d7fu, 0x000500c7u, 0x00000006u, 0x00004d81u, 0x00004d71u, 0x000006c2u, 0x0003003eu, 0x00004d7cu, 0x00004d81u, 0x0004007cu, 0x00000008u, 0x00004d83u, 0x00004d7fu, 0x0004007cu, 0x00000008u, 0x00004d89u, 0x00004d81u, 0x00070050u, 0x00000009u, 0x00004d8au, 0x00004d83u, 0x00004d83u, 0x00004d83u, 0x00004d89u, 0x0003003eu, 0x00004d7du, 0x00004d8au, 0x0003003eu, 0x00004d37u, 0x00004d8au, 0x000200f9u, 0x00004d73u, 0x000200f8u, 0x00004d73u, 0x000700f5u, 0x00000009u, 0x00009730u, 0x00004d8au, 0x00004d74u, 0x00004da4u, 0x00004d75u, 0x0003003eu, 0x00004d3au, 0x00009730u, 0x0003003eu, 0x00004517u, 0x00009730u, 0x000200f9u, 0x000046dau, 0x000200f8u, 0x000046dau, 0x000700f5u, 0x00000009u, 0x00009b17u, 0x00009a79u, 0x00004c8du, 0x00009730u, 0x00004d73u, 0x000700f5u, 0x00000009u, 0x00009949u, 0x000098aau, 0x00004c8du, 0x0000971au, 0x00004d73u, 0x000300f7u, 0x000046f5u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x000046f6u, 0x000046f5u, 0x000200f8u, 0x000046f6u, 0x00050050u, 0x0000005fu, 0x000046f9u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000046fau, 0x000046f9u, 0x0003003eu, 0x00006990u, 0x000044bcu, 0x0003003eu, 0x00006991u, 0x000044bfu, 0x0003003eu, 0x00004521u, 0x000020f8u, 0x0003003eu, 0x00004522u, 0x000046fau, 0x0003003eu, 0x00004523u, 0x000046d0u, 0x0003003eu, 0x00004524u, 0x0000048bu, 0x0003003eu, 0x00004525u, 0x0000469au, 0x0003003eu, 0x00004526u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004db2u, 0x00004522u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004db3u, 0x00004db2u, 0x00050084u, 0x00000006u, 0x00004db4u, 0x000044bfu, 0x00004db3u, 0x00050080u, 0x00000006u, 0x00004db5u, 0x000044bcu, 0x00004db4u, 0x0003003eu, 0x00004da5u, 0x00004db5u, 0x00050041u, 0x00000007u, 0x00004db6u, 0x00004522u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004db7u, 0x00004db6u, 0x000500c2u, 0x00000006u, 0x00004db8u, 0x00004db7u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00004dbau, 0x00004db5u, 0x00004db8u, 0x0003003eu, 0x00004da5u, 0x00004dbau, 0x000500c7u, 0x00000006u, 0x00004dbcu, 0x00004dbau, 0x00000f0bu, 0x0003003eu, 0x00004da5u, 0x00004dbcu, 0x0004003du, 0x00000006u, 0x00004dbeu, 0x00004db6u, 0x000400c8u, 0x00000006u, 0x00004dbfu, 0x00004dbeu, 0x000500c7u, 0x00000006u, 0x00004dc0u, 0x00004dbfu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004dc1u, 0x00004dc0u, 0x00000701u, 0x0003003eu, 0x00004da6u, 0x00004dc1u, 0x0003003eu, 0x00004da7u, 0x00004dbcu, 0x0004003du, 0x00000006u, 0x00004dc4u, 0x00004db2u, 0x000500c7u, 0x00000006u, 0x00004dc5u, 0x00004dc4u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004dc6u, 0x00004dc5u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00004dc8u, 0x00004dbcu, 0x00004dc6u, 0x0003003eu, 0x00004da7u, 0x00004dc8u, 0x000500c6u, 0x00000006u, 0x00004dcau, 0x00004dc8u, 0x0000048bu, 0x0003003eu, 0x00004da7u, 0x00004dcau, 0x00080041u, 0x00000277u, 0x00004dcdu, 0x00000e73u, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004dcau, 0x0004003du, 0x00000229u, 0x00004dceu, 0x00004dcdu, 0x00040071u, 0x00000006u, 0x00004dcfu, 0x00004dceu, 0x0003003eu, 0x00004da8u, 0x00004dcfu, 0x000500c2u, 0x00000006u, 0x00004dd2u, 0x00004dcfu, 0x00004dc1u, 0x000500c7u, 0x00000006u, 0x00004dd3u, 0x00004dd2u, 0x00000e7cu, 0x0003003eu, 0x00004da8u, 0x00004dd3u, 0x000500c5u, 0x00000006u, 0x00004dd7u, 0x00004dd3u, 0x00004c7cu, 0x0003003eu, 0x00004da8u, 0x00004dd7u, 0x000500c4u, 0x00000006u, 0x00004dd9u, 0x00004dd7u, 0x00000215u, 0x00050080u, 0x00000006u, 0x00004ddbu, 0x00004dd9u, 0x0000048bu, 0x0003003eu, 0x00004da9u, 0x00004ddbu, 0x000500c6u, 0x00000006u, 0x00004ddeu, 0x00004ddbu, 0x0000469au, 0x0003003eu, 0x00004da9u, 0x00004ddeu, 0x000500c5u, 0x00000006u, 0x00004de1u, 0x00000f3cu, 0x00004ddeu, 0x00080041u, 0x00000270u, 0x00004de2u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004de1u, 0x0004003du, 0x0000022bu, 0x00004de3u, 0x00004de2u, 0x00040071u, 0x00000006u, 0x00004de4u, 0x00004de3u, 0x0003003eu, 0x00004da8u, 0x00004de4u, 0x000300f7u, 0x00004de6u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004de7u, 0x00004de8u, 0x000200f8u, 0x00004de8u, 0x0003003eu, 0x00004dacu, 0x00004de4u, 0x00060050u, 0x00000353u, 0x00004e02u, 0x00004de4u, 0x00004de4u, 0x00004de4u, 0x000500c2u, 0x00000353u, 0x00004e03u, 0x00004e02u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004e05u, 0x00004e03u, 0x0000eee9u, 0x0003003eu, 0x00004dfeu, 0x00004e05u, 0x000500c4u, 0x00000353u, 0x00004e08u, 0x00004e05u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004e0bu, 0x00004e05u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004e0cu, 0x00004e08u, 0x00004e0bu, 0x0003003eu, 0x00004dfeu, 0x00004e0cu, 0x000500c7u, 0x00000006u, 0x00004e0eu, 0x00004de4u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004e0fu, 0x00004e0eu, 0x000006c2u, 0x0003003eu, 0x00004dffu, 0x00004e0fu, 0x0004007cu, 0x0000003cu, 0x00004e11u, 0x00004e0cu, 0x0004007cu, 0x00000008u, 0x00004e13u, 0x00004e0fu, 0x00050051u, 0x00000008u, 0x00004e14u, 0x00004e11u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004e15u, 0x00004e11u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004e16u, 0x00004e11u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004e17u, 0x00004e14u, 0x00004e15u, 0x00004e16u, 0x00004e13u, 0x0003003eu, 0x00004e00u, 0x00004e17u, 0x0003003eu, 0x00004daau, 0x00004e17u, 0x000200f9u, 0x00004de6u, 0x000200f8u, 0x00004de7u, 0x0003003eu, 0x00004dabu, 0x00004de4u, 0x000500c2u, 0x00000006u, 0x00004df2u, 0x00004de4u, 0x0000025eu, 0x0003003eu, 0x00004deeu, 0x00004df2u, 0x000500c7u, 0x00000006u, 0x00004df4u, 0x00004de4u, 0x000006c2u, 0x0003003eu, 0x00004defu, 0x00004df4u, 0x0004007cu, 0x00000008u, 0x00004df6u, 0x00004df2u, 0x0004007cu, 0x00000008u, 0x00004dfcu, 0x00004df4u, 0x00070050u, 0x00000009u, 0x00004dfdu, 0x00004df6u, 0x00004df6u, 0x00004df6u, 0x00004dfcu, 0x0003003eu, 0x00004df0u, 0x00004dfdu, 0x0003003eu, 0x00004daau, 0x00004dfdu, 0x000200f9u, 0x00004de6u, 0x000200f8u, 0x00004de6u, 0x000700f5u, 0x00000009u, 0x0000975cu, 0x00004dfdu, 0x00004de7u, 0x00004e17u, 0x00004de8u, 0x0003003eu, 0x00004dadu, 0x0000975cu, 0x0003003eu, 0x0000451fu, 0x0000975cu, 0x000200f9u, 0x000046f5u, 0x000200f8u, 0x000046f5u, 0x000700f5u, 0x00000009u, 0x00009bfbu, 0x00009b5du, 0x000046dau, 0x0000975cu, 0x00004de6u, 0x000200f9u, 0x0000469du, 0x000200f8u, 0x0000469eu, 0x0004007cu, 0x000000a2u, 0x000046a2u, 0x0000951eu, 0x000600a9u, 0x00000008u, 0x000046a4u, 0x00004683u, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000046a5u, 0x000046a4u, 0x0003003eu, 0x000069a4u, 0x000044bcu, 0x0003003eu, 0x000069a5u, 0x000044bfu, 0x0003003eu, 0x00004540u, 0x000020f8u, 0x0003003eu, 0x00004541u, 0x000046a2u, 0x0003003eu, 0x00004542u, 0x000046a5u, 0x0003003eu, 0x00004543u, 0x0000469au, 0x0003003eu, 0x00004544u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004abcu, 0x00004541u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004abdu, 0x00004abcu, 0x00050084u, 0x00000006u, 0x00004abeu, 0x000044bfu, 0x00004abdu, 0x00050080u, 0x00000006u, 0x00004abfu, 0x000044bcu, 0x00004abeu, 0x0003003eu, 0x00004ab0u, 0x00004abfu, 0x00050041u, 0x00000007u, 0x00004ac0u, 0x00004541u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004ac1u, 0x00004ac0u, 0x00050084u, 0x00000006u, 0x00004ac2u, 0x00004ac1u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004ac4u, 0x00004abfu, 0x00004ac2u, 0x0003003eu, 0x00004ab0u, 0x00004ac4u, 0x000500c7u, 0x00000006u, 0x00004ac6u, 0x00004ac4u, 0x00000f0bu, 0x0003003eu, 0x00004ab0u, 0x00004ac6u, 0x000500c2u, 0x00000006u, 0x00004ac8u, 0x00004ac6u, 0x00000212u, 0x0003003eu, 0x00004ab1u, 0x00004ac8u, 0x0004003du, 0x00000006u, 0x00004acau, 0x00004abcu, 0x000500c7u, 0x00000006u, 0x00004acbu, 0x00004acau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004accu, 0x00004acbu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004aceu, 0x00004ac8u, 0x00004accu, 0x0003003eu, 0x00004ab1u, 0x00004aceu, 0x000500c6u, 0x00000006u, 0x00004ad0u, 0x00004aceu, 0x00000485u, 0x0003003eu, 0x00004ab1u, 0x00004ad0u, 0x00080041u, 0x00000270u, 0x00004ad3u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004ad0u, 0x0004003du, 0x0000022bu, 0x00004ad4u, 0x00004ad3u, 0x00040071u, 0x00000006u, 0x00004ad5u, 0x00004ad4u, 0x0003003eu, 0x00004ab2u, 0x00004ad5u, 0x000500c2u, 0x00000006u, 0x00004ad7u, 0x00004ad5u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004ad8u, 0x00004ad7u, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00004adau, 0x00004ad8u, 0x000046a5u, 0x0003003eu, 0x00004ab3u, 0x00004adau, 0x000500c6u, 0x00000006u, 0x00004addu, 0x00004adau, 0x0000469au, 0x0003003eu, 0x00004ab3u, 0x00004addu, 0x000500c5u, 0x00000006u, 0x00004ae0u, 0x00000f3cu, 0x00004addu, 0x00080041u, 0x00000270u, 0x00004ae1u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004ae0u, 0x0004003du, 0x0000022bu, 0x00004ae2u, 0x00004ae1u, 0x00040071u, 0x00000006u, 0x00004ae3u, 0x00004ae2u, 0x0003003eu, 0x00004ab2u, 0x00004ae3u, 0x000300f7u, 0x00004ae5u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004ae6u, 0x00004ae7u, 0x000200f8u, 0x00004ae7u, 0x0003003eu, 0x00004ab6u, 0x00004ae3u, 0x00060050u, 0x00000353u, 0x00004b01u, 0x00004ae3u, 0x00004ae3u, 0x00004ae3u, 0x000500c2u, 0x00000353u, 0x00004b02u, 0x00004b01u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004b04u, 0x00004b02u, 0x0000eee9u, 0x0003003eu, 0x00004afdu, 0x00004b04u, 0x000500c4u, 0x00000353u, 0x00004b07u, 0x00004b04u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004b0au, 0x00004b04u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004b0bu, 0x00004b07u, 0x00004b0au, 0x0003003eu, 0x00004afdu, 0x00004b0bu, 0x000500c7u, 0x00000006u, 0x00004b0du, 0x00004ae3u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004b0eu, 0x00004b0du, 0x000006c2u, 0x0003003eu, 0x00004afeu, 0x00004b0eu, 0x0004007cu, 0x0000003cu, 0x00004b10u, 0x00004b0bu, 0x0004007cu, 0x00000008u, 0x00004b12u, 0x00004b0eu, 0x00050051u, 0x00000008u, 0x00004b13u, 0x00004b10u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004b14u, 0x00004b10u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004b15u, 0x00004b10u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004b16u, 0x00004b13u, 0x00004b14u, 0x00004b15u, 0x00004b12u, 0x0003003eu, 0x00004affu, 0x00004b16u, 0x0003003eu, 0x00004ab4u, 0x00004b16u, 0x000200f9u, 0x00004ae5u, 0x000200f8u, 0x00004ae6u, 0x0003003eu, 0x00004ab5u, 0x00004ae3u, 0x000500c2u, 0x00000006u, 0x00004af1u, 0x00004ae3u, 0x0000025eu, 0x0003003eu, 0x00004aedu, 0x00004af1u, 0x000500c7u, 0x00000006u, 0x00004af3u, 0x00004ae3u, 0x000006c2u, 0x0003003eu, 0x00004aeeu, 0x00004af3u, 0x0004007cu, 0x00000008u, 0x00004af5u, 0x00004af1u, 0x0004007cu, 0x00000008u, 0x00004afbu, 0x00004af3u, 0x00070050u, 0x00000009u, 0x00004afcu, 0x00004af5u, 0x00004af5u, 0x00004af5u, 0x00004afbu, 0x0003003eu, 0x00004aefu, 0x00004afcu, 0x0003003eu, 0x00004ab4u, 0x00004afcu, 0x000200f9u, 0x00004ae5u, 0x000200f8u, 0x00004ae5u, 0x000700f5u, 0x00000009u, 0x0000975du, 0x00004afcu, 0x00004ae6u, 0x00004b16u, 0x00004ae7u, 0x0003003eu, 0x00004ab7u, 0x0000975du, 0x0003003eu, 0x00004507u, 0x0000975du, 0x000300f7u, 0x000046acu, 0x00000000u, 0x000400fau, 0x0000210fu, 0x000046adu, 0x000046acu, 0x000200f8u, 0x000046adu, 0x00050050u, 0x0000005fu, 0x000046b0u, 0x000094d3u, 0x00004670u, 0x0004007cu, 0x000000a2u, 0x000046b1u, 0x000046b0u, 0x0003003eu, 0x000069a8u, 0x000044bcu, 0x0003003eu, 0x000069a9u, 0x000044bfu, 0x0003003eu, 0x00004546u, 0x000020f8u, 0x0003003eu, 0x00004547u, 0x000046b1u, 0x0003003eu, 0x00004548u, 0x00000485u, 0x0003003eu, 0x00004549u, 0x0000469au, 0x0003003eu, 0x0000454au, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004b23u, 0x00004547u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004b24u, 0x00004b23u, 0x00050084u, 0x00000006u, 0x00004b25u, 0x000044bfu, 0x00004b24u, 0x00050080u, 0x00000006u, 0x00004b26u, 0x000044bcu, 0x00004b25u, 0x0003003eu, 0x00004b17u, 0x00004b26u, 0x00050041u, 0x00000007u, 0x00004b27u, 0x00004547u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004b28u, 0x00004b27u, 0x00050084u, 0x00000006u, 0x00004b29u, 0x00004b28u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004b2bu, 0x00004b26u, 0x00004b29u, 0x0003003eu, 0x00004b17u, 0x00004b2bu, 0x000500c7u, 0x00000006u, 0x00004b2du, 0x00004b2bu, 0x00000f0bu, 0x0003003eu, 0x00004b17u, 0x00004b2du, 0x000500c2u, 0x00000006u, 0x00004b2fu, 0x00004b2du, 0x00000212u, 0x0003003eu, 0x00004b18u, 0x00004b2fu, 0x0004003du, 0x00000006u, 0x00004b31u, 0x00004b23u, 0x000500c7u, 0x00000006u, 0x00004b32u, 0x00004b31u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004b33u, 0x00004b32u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004b35u, 0x00004b2fu, 0x00004b33u, 0x0003003eu, 0x00004b18u, 0x00004b35u, 0x000500c6u, 0x00000006u, 0x00004b37u, 0x00004b35u, 0x00000485u, 0x0003003eu, 0x00004b18u, 0x00004b37u, 0x00080041u, 0x00000270u, 0x00004b3au, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004b37u, 0x0004003du, 0x0000022bu, 0x00004b3bu, 0x00004b3au, 0x00040071u, 0x00000006u, 0x00004b3cu, 0x00004b3bu, 0x0003003eu, 0x00004b19u, 0x00004b3cu, 0x000500c2u, 0x00000006u, 0x00004b3eu, 0x00004b3cu, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004b3fu, 0x00004b3eu, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00004b41u, 0x00004b3fu, 0x00000485u, 0x0003003eu, 0x00004b1au, 0x00004b41u, 0x000500c6u, 0x00000006u, 0x00004b44u, 0x00004b41u, 0x0000469au, 0x0003003eu, 0x00004b1au, 0x00004b44u, 0x000500c5u, 0x00000006u, 0x00004b47u, 0x00000f3cu, 0x00004b44u, 0x00080041u, 0x00000270u, 0x00004b48u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004b47u, 0x0004003du, 0x0000022bu, 0x00004b49u, 0x00004b48u, 0x00040071u, 0x00000006u, 0x00004b4au, 0x00004b49u, 0x0003003eu, 0x00004b19u, 0x00004b4au, 0x000300f7u, 0x00004b4cu, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004b4du, 0x00004b4eu, 0x000200f8u, 0x00004b4eu, 0x0003003eu, 0x00004b1du, 0x00004b4au, 0x00060050u, 0x00000353u, 0x00004b68u, 0x00004b4au, 0x00004b4au, 0x00004b4au, 0x000500c2u, 0x00000353u, 0x00004b69u, 0x00004b68u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004b6bu, 0x00004b69u, 0x0000eee9u, 0x0003003eu, 0x00004b64u, 0x00004b6bu, 0x000500c4u, 0x00000353u, 0x00004b6eu, 0x00004b6bu, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004b71u, 0x00004b6bu, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004b72u, 0x00004b6eu, 0x00004b71u, 0x0003003eu, 0x00004b64u, 0x00004b72u, 0x000500c7u, 0x00000006u, 0x00004b74u, 0x00004b4au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004b75u, 0x00004b74u, 0x000006c2u, 0x0003003eu, 0x00004b65u, 0x00004b75u, 0x0004007cu, 0x0000003cu, 0x00004b77u, 0x00004b72u, 0x0004007cu, 0x00000008u, 0x00004b79u, 0x00004b75u, 0x00050051u, 0x00000008u, 0x00004b7au, 0x00004b77u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004b7bu, 0x00004b77u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004b7cu, 0x00004b77u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004b7du, 0x00004b7au, 0x00004b7bu, 0x00004b7cu, 0x00004b79u, 0x0003003eu, 0x00004b66u, 0x00004b7du, 0x0003003eu, 0x00004b1bu, 0x00004b7du, 0x000200f9u, 0x00004b4cu, 0x000200f8u, 0x00004b4du, 0x0003003eu, 0x00004b1cu, 0x00004b4au, 0x000500c2u, 0x00000006u, 0x00004b58u, 0x00004b4au, 0x0000025eu, 0x0003003eu, 0x00004b54u, 0x00004b58u, 0x000500c7u, 0x00000006u, 0x00004b5au, 0x00004b4au, 0x000006c2u, 0x0003003eu, 0x00004b55u, 0x00004b5au, 0x0004007cu, 0x00000008u, 0x00004b5cu, 0x00004b58u, 0x0004007cu, 0x00000008u, 0x00004b62u, 0x00004b5au, 0x00070050u, 0x00000009u, 0x00004b63u, 0x00004b5cu, 0x00004b5cu, 0x00004b5cu, 0x00004b62u, 0x0003003eu, 0x00004b56u, 0x00004b63u, 0x0003003eu, 0x00004b1bu, 0x00004b63u, 0x000200f9u, 0x00004b4cu, 0x000200f8u, 0x00004b4cu, 0x000700f5u, 0x00000009u, 0x00009772u, 0x00004b63u, 0x00004b4du, 0x00004b7du, 0x00004b4eu, 0x0003003eu, 0x00004b1eu, 0x00009772u, 0x0003003eu, 0x0000450fu, 0x00009772u, 0x00050050u, 0x0000005fu, 0x000046b9u, 0x00009495u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000046bau, 0x000046b9u, 0x0003003eu, 0x000069acu, 0x000044bcu, 0x0003003eu, 0x000069adu, 0x000044bfu, 0x0003003eu, 0x0000454cu, 0x000020f8u, 0x0003003eu, 0x0000454du, 0x000046bau, 0x0003003eu, 0x0000454eu, 0x000003c4u, 0x0003003eu, 0x0000454fu, 0x0000469au, 0x0003003eu, 0x00004550u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004b8au, 0x0000454du, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004b8bu, 0x00004b8au, 0x00050084u, 0x00000006u, 0x00004b8cu, 0x000044bfu, 0x00004b8bu, 0x00050080u, 0x00000006u, 0x00004b8du, 0x000044bcu, 0x00004b8cu, 0x0003003eu, 0x00004b7eu, 0x00004b8du, 0x00050041u, 0x00000007u, 0x00004b8eu, 0x0000454du, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004b8fu, 0x00004b8eu, 0x00050084u, 0x00000006u, 0x00004b90u, 0x00004b8fu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004b92u, 0x00004b8du, 0x00004b90u, 0x0003003eu, 0x00004b7eu, 0x00004b92u, 0x000500c7u, 0x00000006u, 0x00004b94u, 0x00004b92u, 0x00000f0bu, 0x0003003eu, 0x00004b7eu, 0x00004b94u, 0x000500c2u, 0x00000006u, 0x00004b96u, 0x00004b94u, 0x00000212u, 0x0003003eu, 0x00004b7fu, 0x00004b96u, 0x0004003du, 0x00000006u, 0x00004b98u, 0x00004b8au, 0x000500c7u, 0x00000006u, 0x00004b99u, 0x00004b98u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004b9au, 0x00004b99u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004b9cu, 0x00004b96u, 0x00004b9au, 0x0003003eu, 0x00004b7fu, 0x00004b9cu, 0x000500c6u, 0x00000006u, 0x00004b9eu, 0x00004b9cu, 0x00000485u, 0x0003003eu, 0x00004b7fu, 0x00004b9eu, 0x00080041u, 0x00000270u, 0x00004ba1u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004b9eu, 0x0004003du, 0x0000022bu, 0x00004ba2u, 0x00004ba1u, 0x00040071u, 0x00000006u, 0x00004ba3u, 0x00004ba2u, 0x0003003eu, 0x00004b80u, 0x00004ba3u, 0x000500c2u, 0x00000006u, 0x00004ba5u, 0x00004ba3u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004ba6u, 0x00004ba5u, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00004ba8u, 0x00004ba6u, 0x000003c4u, 0x0003003eu, 0x00004b81u, 0x00004ba8u, 0x000500c6u, 0x00000006u, 0x00004babu, 0x00004ba8u, 0x0000469au, 0x0003003eu, 0x00004b81u, 0x00004babu, 0x000500c5u, 0x00000006u, 0x00004baeu, 0x00000f3cu, 0x00004babu, 0x00080041u, 0x00000270u, 0x00004bafu, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004baeu, 0x0004003du, 0x0000022bu, 0x00004bb0u, 0x00004bafu, 0x00040071u, 0x00000006u, 0x00004bb1u, 0x00004bb0u, 0x0003003eu, 0x00004b80u, 0x00004bb1u, 0x000300f7u, 0x00004bb3u, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004bb4u, 0x00004bb5u, 0x000200f8u, 0x00004bb5u, 0x0003003eu, 0x00004b84u, 0x00004bb1u, 0x00060050u, 0x00000353u, 0x00004bcfu, 0x00004bb1u, 0x00004bb1u, 0x00004bb1u, 0x000500c2u, 0x00000353u, 0x00004bd0u, 0x00004bcfu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004bd2u, 0x00004bd0u, 0x0000eee9u, 0x0003003eu, 0x00004bcbu, 0x00004bd2u, 0x000500c4u, 0x00000353u, 0x00004bd5u, 0x00004bd2u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004bd8u, 0x00004bd2u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004bd9u, 0x00004bd5u, 0x00004bd8u, 0x0003003eu, 0x00004bcbu, 0x00004bd9u, 0x000500c7u, 0x00000006u, 0x00004bdbu, 0x00004bb1u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004bdcu, 0x00004bdbu, 0x000006c2u, 0x0003003eu, 0x00004bccu, 0x00004bdcu, 0x0004007cu, 0x0000003cu, 0x00004bdeu, 0x00004bd9u, 0x0004007cu, 0x00000008u, 0x00004be0u, 0x00004bdcu, 0x00050051u, 0x00000008u, 0x00004be1u, 0x00004bdeu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004be2u, 0x00004bdeu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004be3u, 0x00004bdeu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004be4u, 0x00004be1u, 0x00004be2u, 0x00004be3u, 0x00004be0u, 0x0003003eu, 0x00004bcdu, 0x00004be4u, 0x0003003eu, 0x00004b82u, 0x00004be4u, 0x000200f9u, 0x00004bb3u, 0x000200f8u, 0x00004bb4u, 0x0003003eu, 0x00004b83u, 0x00004bb1u, 0x000500c2u, 0x00000006u, 0x00004bbfu, 0x00004bb1u, 0x0000025eu, 0x0003003eu, 0x00004bbbu, 0x00004bbfu, 0x000500c7u, 0x00000006u, 0x00004bc1u, 0x00004bb1u, 0x000006c2u, 0x0003003eu, 0x00004bbcu, 0x00004bc1u, 0x0004007cu, 0x00000008u, 0x00004bc3u, 0x00004bbfu, 0x0004007cu, 0x00000008u, 0x00004bc9u, 0x00004bc1u, 0x00070050u, 0x00000009u, 0x00004bcau, 0x00004bc3u, 0x00004bc3u, 0x00004bc3u, 0x00004bc9u, 0x0003003eu, 0x00004bbdu, 0x00004bcau, 0x0003003eu, 0x00004b82u, 0x00004bcau, 0x000200f9u, 0x00004bb3u, 0x000200f8u, 0x00004bb3u, 0x000700f5u, 0x00000009u, 0x00009788u, 0x00004bcau, 0x00004bb4u, 0x00004be4u, 0x00004bb5u, 0x0003003eu, 0x00004b85u, 0x00009788u, 0x0003003eu, 0x00004517u, 0x00009788u, 0x000200f9u, 0x000046acu, 0x000200f8u, 0x000046acu, 0x000700f5u, 0x00000009u, 0x00009b12u, 0x00009a79u, 0x00004ae5u, 0x00009788u, 0x00004bb3u, 0x000700f5u, 0x00000009u, 0x00009943u, 0x000098aau, 0x00004ae5u, 0x00009772u, 0x00004bb3u, 0x000300f7u, 0x000046c1u, 0x00000000u, 0x000400fau, 0x0000467bu, 0x000046c2u, 0x000046c1u, 0x000200f8u, 0x000046c2u, 0x00050050u, 0x0000005fu, 0x000046c5u, 0x000094d3u, 0x00004672u, 0x0004007cu, 0x000000a2u, 0x000046c6u, 0x000046c5u, 0x0003003eu, 0x000069b0u, 0x000044bcu, 0x0003003eu, 0x000069b1u, 0x000044bfu, 0x0003003eu, 0x00004552u, 0x000020f8u, 0x0003003eu, 0x00004553u, 0x000046c6u, 0x0003003eu, 0x00004554u, 0x0000048bu, 0x0003003eu, 0x00004555u, 0x0000469au, 0x0003003eu, 0x00004556u, 0x0000210cu, 0x00050041u, 0x00000007u, 0x00004bf1u, 0x00004553u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00004bf2u, 0x00004bf1u, 0x00050084u, 0x00000006u, 0x00004bf3u, 0x000044bfu, 0x00004bf2u, 0x00050080u, 0x00000006u, 0x00004bf4u, 0x000044bcu, 0x00004bf3u, 0x0003003eu, 0x00004be5u, 0x00004bf4u, 0x00050041u, 0x00000007u, 0x00004bf5u, 0x00004553u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00004bf6u, 0x00004bf5u, 0x00050084u, 0x00000006u, 0x00004bf7u, 0x00004bf6u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00004bf9u, 0x00004bf4u, 0x00004bf7u, 0x0003003eu, 0x00004be5u, 0x00004bf9u, 0x000500c7u, 0x00000006u, 0x00004bfbu, 0x00004bf9u, 0x00000f0bu, 0x0003003eu, 0x00004be5u, 0x00004bfbu, 0x000500c2u, 0x00000006u, 0x00004bfdu, 0x00004bfbu, 0x00000212u, 0x0003003eu, 0x00004be6u, 0x00004bfdu, 0x0004003du, 0x00000006u, 0x00004bffu, 0x00004bf1u, 0x000500c7u, 0x00000006u, 0x00004c00u, 0x00004bffu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00004c01u, 0x00004c00u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00004c03u, 0x00004bfdu, 0x00004c01u, 0x0003003eu, 0x00004be6u, 0x00004c03u, 0x000500c6u, 0x00000006u, 0x00004c05u, 0x00004c03u, 0x00000485u, 0x0003003eu, 0x00004be6u, 0x00004c05u, 0x00080041u, 0x00000270u, 0x00004c08u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004c05u, 0x0004003du, 0x0000022bu, 0x00004c09u, 0x00004c08u, 0x00040071u, 0x00000006u, 0x00004c0au, 0x00004c09u, 0x0003003eu, 0x00004be7u, 0x00004c0au, 0x000500c2u, 0x00000006u, 0x00004c0cu, 0x00004c0au, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00004c0du, 0x00004c0cu, 0x00000fdau, 0x00050080u, 0x00000006u, 0x00004c0fu, 0x00004c0du, 0x0000048bu, 0x0003003eu, 0x00004be8u, 0x00004c0fu, 0x000500c6u, 0x00000006u, 0x00004c12u, 0x00004c0fu, 0x0000469au, 0x0003003eu, 0x00004be8u, 0x00004c12u, 0x000500c5u, 0x00000006u, 0x00004c15u, 0x00000f3cu, 0x00004c12u, 0x00080041u, 0x00000270u, 0x00004c16u, 0x00000f3au, 0x00000203u, 0x000020f8u, 0x00000203u, 0x00004c15u, 0x0004003du, 0x0000022bu, 0x00004c17u, 0x00004c16u, 0x00040071u, 0x00000006u, 0x00004c18u, 0x00004c17u, 0x0003003eu, 0x00004be7u, 0x00004c18u, 0x000300f7u, 0x00004c1au, 0x00000000u, 0x000400fau, 0x0000210cu, 0x00004c1bu, 0x00004c1cu, 0x000200f8u, 0x00004c1cu, 0x0003003eu, 0x00004bebu, 0x00004c18u, 0x00060050u, 0x00000353u, 0x00004c36u, 0x00004c18u, 0x00004c18u, 0x00004c18u, 0x000500c2u, 0x00000353u, 0x00004c37u, 0x00004c36u, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00004c39u, 0x00004c37u, 0x0000eee9u, 0x0003003eu, 0x00004c32u, 0x00004c39u, 0x000500c4u, 0x00000353u, 0x00004c3cu, 0x00004c39u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00004c3fu, 0x00004c39u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00004c40u, 0x00004c3cu, 0x00004c3fu, 0x0003003eu, 0x00004c32u, 0x00004c40u, 0x000500c7u, 0x00000006u, 0x00004c42u, 0x00004c18u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00004c43u, 0x00004c42u, 0x000006c2u, 0x0003003eu, 0x00004c33u, 0x00004c43u, 0x0004007cu, 0x0000003cu, 0x00004c45u, 0x00004c40u, 0x0004007cu, 0x00000008u, 0x00004c47u, 0x00004c43u, 0x00050051u, 0x00000008u, 0x00004c48u, 0x00004c45u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004c49u, 0x00004c45u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004c4au, 0x00004c45u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004c4bu, 0x00004c48u, 0x00004c49u, 0x00004c4au, 0x00004c47u, 0x0003003eu, 0x00004c34u, 0x00004c4bu, 0x0003003eu, 0x00004be9u, 0x00004c4bu, 0x000200f9u, 0x00004c1au, 0x000200f8u, 0x00004c1bu, 0x0003003eu, 0x00004beau, 0x00004c18u, 0x000500c2u, 0x00000006u, 0x00004c26u, 0x00004c18u, 0x0000025eu, 0x0003003eu, 0x00004c22u, 0x00004c26u, 0x000500c7u, 0x00000006u, 0x00004c28u, 0x00004c18u, 0x000006c2u, 0x0003003eu, 0x00004c23u, 0x00004c28u, 0x0004007cu, 0x00000008u, 0x00004c2au, 0x00004c26u, 0x0004007cu, 0x00000008u, 0x00004c30u, 0x00004c28u, 0x00070050u, 0x00000009u, 0x00004c31u, 0x00004c2au, 0x00004c2au, 0x00004c2au, 0x00004c30u, 0x0003003eu, 0x00004c24u, 0x00004c31u, 0x0003003eu, 0x00004be9u, 0x00004c31u, 0x000200f9u, 0x00004c1au, 0x000200f8u, 0x00004c1au, 0x000700f5u, 0x00000009u, 0x000097b4u, 0x00004c31u, 0x00004c1bu, 0x00004c4bu, 0x00004c1cu, 0x0003003eu, 0x00004becu, 0x000097b4u, 0x0003003eu, 0x0000451fu, 0x000097b4u, 0x000200f9u, 0x000046c1u, 0x000200f8u, 0x000046c1u, 0x000700f5u, 0x00000009u, 0x00009bf5u, 0x00009b5du, 0x000046acu, 0x000097b4u, 0x00004c1au, 0x000200f9u, 0x0000469du, 0x000200f8u, 0x0000469du, 0x000900f5u, 0x00000009u, 0x00009bf4u, 0x00009bf5u, 0x000046c1u, 0x00009bfbu, 0x000046f5u, 0x00009c00u, 0x00004723u, 0x000900f5u, 0x00000009u, 0x00009b10u, 0x00009b12u, 0x000046c1u, 0x00009b17u, 0x000046f5u, 0x00009b1bu, 0x00004723u, 0x000900f5u, 0x00000009u, 0x00009a29u, 0x0000975du, 0x000046c1u, 0x00009705u, 0x000046f5u, 0x000096a7u, 0x00004723u, 0x000900f5u, 0x00000009u, 0x00009941u, 0x00009943u, 0x000046c1u, 0x00009949u, 0x000046f5u, 0x0000994eu, 0x00004723u, 0x000200f9u, 0x00004694u, 0x000200f8u, 0x00004694u, 0x000700f5u, 0x00000009u, 0x00009b41u, 0x00009b5du, 0x00004690u, 0x00009bf4u, 0x0000469du, 0x000700f5u, 0x00000009u, 0x00009a5du, 0x00009a79u, 0x00004690u, 0x00009b10u, 0x0000469du, 0x000700f5u, 0x00000009u, 0x00009976u, 0x00009992u, 0x00004690u, 0x00009a29u, 0x0000469du, 0x000700f5u, 0x00000009u, 0x0000988eu, 0x000098aau, 0x00004690u, 0x00009941u, 0x0000469du, 0x000200f9u, 0x0000468fu, 0x000200f8u, 0x0000468fu, 0x000700f5u, 0x00000009u, 0x00009b40u, 0x00009b41u, 0x00004694u, 0x00009c05u, 0x00004730u, 0x000700f5u, 0x00000009u, 0x00009a5cu, 0x00009a5du, 0x00004694u, 0x00009b1eu, 0x00004730u, 0x000700f5u, 0x00000009u, 0x00009975u, 0x00009976u, 0x00004694u, 0x00009a39u, 0x00004730u, 0x000700f5u, 0x00000009u, 0x0000988du, 0x0000988eu, 0x00004694u, 0x00009952u, 0x00004730u, 0x000300f7u, 0x0000494au, 0x00000000u, 0x000400fau, 0x00002148u, 0x0000494bu, 0x0000494cu, 0x000200f8u, 0x0000494cu, 0x000300f7u, 0x0000497eu, 0x00000000u, 0x000400fau, 0x00004681u, 0x0000497fu, 0x00004980u, 0x000200f8u, 0x00004980u, 0x000300f7u, 0x000049acu, 0x00000000u, 0x000400fau, 0x0000467bu, 0x000049adu, 0x000049aeu, 0x000200f8u, 0x000049aeu, 0x000300f7u, 0x000049bcu, 0x00000000u, 0x000400fau, 0x00004683u, 0x000049bdu, 0x000049beu, 0x000200f8u, 0x000049beu, 0x0004003du, 0x0000005fu, 0x000049c3u, 0x000044f3u, 0x0003003eu, 0x00004628u, 0x000049c3u, 0x000200f9u, 0x000049bcu, 0x000200f8u, 0x000049bdu, 0x0004003du, 0x0000005fu, 0x000049bfu, 0x000044f3u, 0x0007004fu, 0x0000005fu, 0x000049c0u, 0x000049bfu, 0x000049bfu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000049c2u, 0x0000eeeeu, 0x000049c0u, 0x0003003eu, 0x00004628u, 0x000049c2u, 0x000200f9u, 0x000049bcu, 0x000200f8u, 0x000049bcu, 0x000700f5u, 0x0000005fu, 0x0000988bu, 0x000049c2u, 0x000049bdu, 0x000049c3u, 0x000049beu, 0x00050051u, 0x00000008u, 0x000049c5u, 0x0000988bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000049c6u, 0x0000988bu, 0x00000001u, 0x0003003eu, 0x00004627u, 0x0000988bu, 0x00050082u, 0x00000009u, 0x000049cau, 0x0000988du, 0x00009975u, 0x00050041u, 0x0000003eu, 0x000049cbu, 0x00004627u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000049ccu, 0x000049cbu, 0x00070050u, 0x00000009u, 0x000049cdu, 0x000049ccu, 0x000049ccu, 0x000049ccu, 0x000049ccu, 0x00050084u, 0x00000009u, 0x000049ceu, 0x000049cau, 0x000049cdu, 0x0003003eu, 0x00004619u, 0x000049ceu, 0x00050082u, 0x00000009u, 0x000049d1u, 0x00009a5cu, 0x00009975u, 0x00050041u, 0x0000003eu, 0x000049d2u, 0x00004627u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000049d3u, 0x000049d2u, 0x00070050u, 0x00000009u, 0x000049d4u, 0x000049d3u, 0x000049d3u, 0x000049d3u, 0x000049d3u, 0x00050084u, 0x00000009u, 0x000049d5u, 0x000049d1u, 0x000049d4u, 0x00050080u, 0x00000009u, 0x000049d7u, 0x000049ceu, 0x000049d5u, 0x0003003eu, 0x00004619u, 0x000049d7u, 0x00050080u, 0x00000009u, 0x000049dau, 0x000049d7u, 0x0000eeefu, 0x0003003eu, 0x00004619u, 0x000049dau, 0x000500c3u, 0x00000009u, 0x000049ddu, 0x000049dau, 0x0000eef0u, 0x0003003eu, 0x00004619u, 0x000049ddu, 0x00050080u, 0x00000009u, 0x000049e0u, 0x000049ddu, 0x00009975u, 0x0003003eu, 0x00004619u, 0x000049e0u, 0x000200f9u, 0x000049acu, 0x000200f8u, 0x000049adu, 0x00050080u, 0x00000009u, 0x000049b1u, 0x00009975u, 0x00009a5cu, 0x00050080u, 0x00000009u, 0x000049b3u, 0x000049b1u, 0x0000988du, 0x00050080u, 0x00000009u, 0x000049b5u, 0x000049b3u, 0x00009b40u, 0x00050080u, 0x00000009u, 0x000049b7u, 0x000049b5u, 0x0000eeecu, 0x000500c3u, 0x00000009u, 0x000049b9u, 0x000049b7u, 0x0000eeecu, 0x0003003eu, 0x00004619u, 0x000049b9u, 0x000200f9u, 0x000049acu, 0x000200f8u, 0x000049acu, 0x000700f5u, 0x00000009u, 0x00009ce9u, 0x000049b9u, 0x000049adu, 0x000049e0u, 0x000049bcu, 0x000200f9u, 0x0000497eu, 0x000200f8u, 0x0000497fu, 0x000300f7u, 0x00004982u, 0x00000000u, 0x000400fau, 0x0000210fu, 0x00004983u, 0x00004984u, 0x000200f8u, 0x00004984u, 0x0003003eu, 0x00004619u, 0x00009975u, 0x000200f9u, 0x00004982u, 0x000200f8u, 0x00004983u, 0x000500c7u, 0x00000008u, 0x00004986u, 0x00009495u, 0x00000212u, 0x000500c4u, 0x00000008u, 0x00004987u, 0x00004986u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x00004989u, 0x00004651u, 0x000500c3u, 0x00000008u, 0x0000498au, 0x00004989u, 0x00000212u, 0x000500c5u, 0x00000008u, 0x0000498bu, 0x00004987u, 0x0000498au, 0x0003003eu, 0x0000461au, 0x0000498bu, 0x0004003du, 0x00000008u, 0x0000498eu, 0x00004653u, 0x00050050u, 0x0000005fu, 0x0000498fu, 0x0000498bu, 0x0000498eu, 0x0007004fu, 0x0000005fu, 0x00004991u, 0x00009975u, 0x00009975u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000461cu, 0x00004991u, 0x0007004fu, 0x0000005fu, 0x00004993u, 0x0000988du, 0x0000988du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000461du, 0x00004993u, 0x0007004fu, 0x0000005fu, 0x00004995u, 0x00009a5cu, 0x00009a5cu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000461eu, 0x00004995u, 0x0007004fu, 0x0000005fu, 0x00004997u, 0x00009b40u, 0x00009b40u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000461fu, 0x00004997u, 0x0003003eu, 0x00004620u, 0x0000498fu, 0x00050041u, 0x0000003eu, 0x00005b56u, 0x00004620u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b57u, 0x00005b56u, 0x00050041u, 0x0000003eu, 0x00005b58u, 0x00004620u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005b59u, 0x00005b58u, 0x00050080u, 0x00000008u, 0x00005b5au, 0x00005b57u, 0x00005b59u, 0x0003003eu, 0x00005b50u, 0x00005b5au, 0x000500afu, 0x0000005du, 0x00005b5cu, 0x00005b5au, 0x0000037du, 0x00050050u, 0x00000879u, 0x00005b5fu, 0x00005b5cu, 0x00005b5cu, 0x000600a9u, 0x0000005fu, 0x00005b60u, 0x00005b5fu, 0x00004997u, 0x00004991u, 0x0003003eu, 0x00005b51u, 0x00005b60u, 0x000300f7u, 0x00005b63u, 0x00000000u, 0x000400fau, 0x00005b5cu, 0x00005b64u, 0x00005b65u, 0x000200f8u, 0x00005b65u, 0x0004003du, 0x0000005fu, 0x00005b6au, 0x00004620u, 0x0003003eu, 0x00005b53u, 0x00005b6au, 0x000200f9u, 0x00005b63u, 0x000200f8u, 0x00005b64u, 0x0004003du, 0x0000005fu, 0x00005b66u, 0x00004620u, 0x0007004fu, 0x0000005fu, 0x00005b67u, 0x00005b66u, 0x00005b66u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x00005b69u, 0x0000eeeeu, 0x00005b67u, 0x0003003eu, 0x00005b53u, 0x00005b69u, 0x000200f9u, 0x00005b63u, 0x000200f8u, 0x00005b63u, 0x000700f5u, 0x0000005fu, 0x00009c8cu, 0x00005b69u, 0x00005b64u, 0x00005b6au, 0x00005b65u, 0x00050051u, 0x00000008u, 0x00005b6cu, 0x00009c8cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005b6du, 0x00009c8cu, 0x00000001u, 0x0003003eu, 0x00005b52u, 0x00009c8cu, 0x00050082u, 0x0000005fu, 0x00005b71u, 0x00004993u, 0x00005b60u, 0x00050041u, 0x0000003eu, 0x00005b72u, 0x00005b52u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b73u, 0x00005b72u, 0x00050050u, 0x0000005fu, 0x00005b74u, 0x00005b73u, 0x00005b73u, 0x00050084u, 0x0000005fu, 0x00005b75u, 0x00005b71u, 0x00005b74u, 0x0003003eu, 0x00005b54u, 0x00005b75u, 0x00050082u, 0x0000005fu, 0x00005b78u, 0x00004995u, 0x00005b60u, 0x00050041u, 0x0000003eu, 0x00005b79u, 0x00005b52u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005b7au, 0x00005b79u, 0x00050050u, 0x0000005fu, 0x00005b7bu, 0x00005b7au, 0x00005b7au, 0x00050084u, 0x0000005fu, 0x00005b7cu, 0x00005b78u, 0x00005b7bu, 0x00050080u, 0x0000005fu, 0x00005b7eu, 0x00005b75u, 0x00005b7cu, 0x0003003eu, 0x00005b54u, 0x00005b7eu, 0x00050080u, 0x0000005fu, 0x00005b81u, 0x00005b7eu, 0x0000136fu, 0x0003003eu, 0x00005b54u, 0x00005b81u, 0x000500c3u, 0x0000005fu, 0x00005b84u, 0x00005b81u, 0x0000eee5u, 0x0003003eu, 0x00005b54u, 0x00005b84u, 0x00050080u, 0x0000005fu, 0x00005b87u, 0x00005b84u, 0x00005b60u, 0x0003003eu, 0x00005b54u, 0x00005b87u, 0x0003003eu, 0x00005b55u, 0x00005b87u, 0x0003003eu, 0x0000461bu, 0x00005b87u, 0x0007004fu, 0x0000005fu, 0x0000499au, 0x00009975u, 0x00009975u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004622u, 0x0000499au, 0x0007004fu, 0x0000005fu, 0x0000499cu, 0x0000988du, 0x0000988du, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004623u, 0x0000499cu, 0x0007004fu, 0x0000005fu, 0x0000499eu, 0x00009a5cu, 0x00009a5cu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004624u, 0x0000499eu, 0x0007004fu, 0x0000005fu, 0x000049a0u, 0x00009b40u, 0x00009b40u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004625u, 0x000049a0u, 0x0004003du, 0x0000005fu, 0x000049a1u, 0x000044f3u, 0x0003003eu, 0x00004626u, 0x000049a1u, 0x00050041u, 0x0000003eu, 0x00005b8fu, 0x00004626u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005b90u, 0x00005b8fu, 0x00050041u, 0x0000003eu, 0x00005b91u, 0x00004626u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005b92u, 0x00005b91u, 0x00050080u, 0x00000008u, 0x00005b93u, 0x00005b90u, 0x00005b92u, 0x0003003eu, 0x00005b89u, 0x00005b93u, 0x000500afu, 0x0000005du, 0x00005b95u, 0x00005b93u, 0x0000037du, 0x00050050u, 0x00000879u, 0x00005b98u, 0x00005b95u, 0x00005b95u, 0x000600a9u, 0x0000005fu, 0x00005b99u, 0x00005b98u, 0x000049a0u, 0x0000499au, 0x0003003eu, 0x00005b8au, 0x00005b99u, 0x000300f7u, 0x00005b9cu, 0x00000000u, 0x000400fau, 0x00005b95u, 0x00005b9du, 0x00005b9eu, 0x000200f8u, 0x00005b9eu, 0x0004003du, 0x0000005fu, 0x00005ba3u, 0x00004626u, 0x0003003eu, 0x00005b8cu, 0x00005ba3u, 0x000200f9u, 0x00005b9cu, 0x000200f8u, 0x00005b9du, 0x0004003du, 0x0000005fu, 0x00005b9fu, 0x00004626u, 0x0007004fu, 0x0000005fu, 0x00005ba0u, 0x00005b9fu, 0x00005b9fu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x00005ba2u, 0x0000eeeeu, 0x00005ba0u, 0x0003003eu, 0x00005b8cu, 0x00005ba2u, 0x000200f9u, 0x00005b9cu, 0x000200f8u, 0x00005b9cu, 0x000700f5u, 0x0000005fu, 0x00009c94u, 0x00005ba2u, 0x00005b9du, 0x00005ba3u, 0x00005b9eu, 0x00050051u, 0x00000008u, 0x00005ba5u, 0x00009c94u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005ba6u, 0x00009c94u, 0x00000001u, 0x0003003eu, 0x00005b8bu, 0x00009c94u, 0x00050082u, 0x0000005fu, 0x00005baau, 0x0000499cu, 0x00005b99u, 0x00050041u, 0x0000003eu, 0x00005babu, 0x00005b8bu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005bacu, 0x00005babu, 0x00050050u, 0x0000005fu, 0x00005badu, 0x00005bacu, 0x00005bacu, 0x00050084u, 0x0000005fu, 0x00005baeu, 0x00005baau, 0x00005badu, 0x0003003eu, 0x00005b8du, 0x00005baeu, 0x00050082u, 0x0000005fu, 0x00005bb1u, 0x0000499eu, 0x00005b99u, 0x00050041u, 0x0000003eu, 0x00005bb2u, 0x00005b8bu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005bb3u, 0x00005bb2u, 0x00050050u, 0x0000005fu, 0x00005bb4u, 0x00005bb3u, 0x00005bb3u, 0x00050084u, 0x0000005fu, 0x00005bb5u, 0x00005bb1u, 0x00005bb4u, 0x00050080u, 0x0000005fu, 0x00005bb7u, 0x00005baeu, 0x00005bb5u, 0x0003003eu, 0x00005b8du, 0x00005bb7u, 0x00050080u, 0x0000005fu, 0x00005bbau, 0x00005bb7u, 0x0000136fu, 0x0003003eu, 0x00005b8du, 0x00005bbau, 0x000500c3u, 0x0000005fu, 0x00005bbdu, 0x00005bbau, 0x0000eee5u, 0x0003003eu, 0x00005b8du, 0x00005bbdu, 0x00050080u, 0x0000005fu, 0x00005bc0u, 0x00005bbdu, 0x00005b99u, 0x0003003eu, 0x00005b8du, 0x00005bc0u, 0x0003003eu, 0x00005b8eu, 0x00005bc0u, 0x0003003eu, 0x00004621u, 0x00005bc0u, 0x00050051u, 0x00000008u, 0x000049a5u, 0x00005b87u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000049a6u, 0x00005b87u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000049a7u, 0x00005bc0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000049a8u, 0x00005bc0u, 0x00000001u, 0x00070050u, 0x00000009u, 0x000049a9u, 0x000049a5u, 0x000049a6u, 0x000049a7u, 0x000049a8u, 0x0003003eu, 0x00004619u, 0x000049a9u, 0x000200f9u, 0x00004982u, 0x000200f8u, 0x00004982u, 0x000700f5u, 0x00000009u, 0x00009ce8u, 0x000049a9u, 0x00005b9cu, 0x00009975u, 0x00004984u, 0x000200f9u, 0x0000497eu, 0x000200f8u, 0x0000497eu, 0x000700f5u, 0x00000009u, 0x00009ce7u, 0x00009ce8u, 0x00004982u, 0x00009ce9u, 0x000049acu, 0x000200f9u, 0x0000494au, 0x000200f8u, 0x0000494bu, 0x00050051u, 0x00000008u, 0x0000494eu, 0x000093d0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000494fu, 0x000093d0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004950u, 0x000093d0u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00004951u, 0x000093d0u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004953u, 0x000093d0u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00004615u, 0x00004953u, 0x000300f7u, 0x00004956u, 0x00000000u, 0x000400fau, 0x00004683u, 0x00004957u, 0x00004958u, 0x000200f8u, 0x00004958u, 0x0004003du, 0x00000009u, 0x0000495bu, 0x00004615u, 0x0007004fu, 0x0000005fu, 0x0000495cu, 0x0000495bu, 0x0000495bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004617u, 0x0000495cu, 0x000200f9u, 0x00004956u, 0x000200f8u, 0x00004957u, 0x0004003du, 0x00000009u, 0x00004959u, 0x00004615u, 0x0007004fu, 0x0000005fu, 0x0000495au, 0x00004959u, 0x00004959u, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00004617u, 0x0000495au, 0x000200f9u, 0x00004956u, 0x000200f8u, 0x00004956u, 0x000700f5u, 0x0000005fu, 0x00009ce2u, 0x0000495au, 0x00004957u, 0x0000495cu, 0x00004958u, 0x0003003eu, 0x00004616u, 0x00009ce2u, 0x00050041u, 0x0000003eu, 0x0000495eu, 0x00004616u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000495fu, 0x0000495eu, 0x00050082u, 0x00000009u, 0x00004962u, 0x0000988du, 0x00009975u, 0x00070050u, 0x00000009u, 0x00004963u, 0x0000495fu, 0x0000495fu, 0x0000495fu, 0x0000495fu, 0x00050084u, 0x00000009u, 0x00004964u, 0x00004963u, 0x00004962u, 0x00050041u, 0x0000003eu, 0x00004965u, 0x00004616u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004966u, 0x00004965u, 0x00050082u, 0x00000009u, 0x00004969u, 0x00009a5cu, 0x00009975u, 0x00070050u, 0x00000009u, 0x0000496au, 0x00004966u, 0x00004966u, 0x00004966u, 0x00004966u, 0x00050084u, 0x00000009u, 0x0000496bu, 0x0000496au, 0x00004969u, 0x00050080u, 0x00000009u, 0x0000496cu, 0x00004964u, 0x0000496bu, 0x00050080u, 0x00000009u, 0x0000496eu, 0x0000496cu, 0x0000eee2u, 0x0003003eu, 0x00004618u, 0x0000496eu, 0x000500c3u, 0x00000009u, 0x00004971u, 0x0000496eu, 0x0000eeedu, 0x0003003eu, 0x00004618u, 0x00004971u, 0x00050041u, 0x0000003eu, 0x00004972u, 0x00004615u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004973u, 0x00004972u, 0x00070050u, 0x00000009u, 0x00004975u, 0x00004973u, 0x00004973u, 0x00004973u, 0x00004973u, 0x00050080u, 0x00000009u, 0x00004976u, 0x00004971u, 0x00004975u, 0x0003003eu, 0x00004618u, 0x00004976u, 0x00050051u, 0x00000008u, 0x00004978u, 0x00004976u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004979u, 0x00004976u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000497au, 0x00004976u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000497bu, 0x00004976u, 0x00000003u, 0x0003003eu, 0x00004619u, 0x00004976u, 0x000200f9u, 0x0000494au, 0x000200f8u, 0x0000494au, 0x000700f5u, 0x00000009u, 0x00009ce6u, 0x00004976u, 0x00004956u, 0x00009ce7u, 0x0000497eu, 0x0003003eu, 0x00004629u, 0x00009ce6u, 0x0003003eu, 0x00002080u, 0x00009ce6u, 0x000400a8u, 0x0000005du, 0x00002295u, 0x0000210fu, 0x000400a8u, 0x0000005du, 0x00002297u, 0x00002109u, 0x000500a7u, 0x0000005du, 0x00002298u, 0x00002295u, 0x00002297u, 0x000500a7u, 0x0000005du, 0x0000229bu, 0x00002298u, 0x0000227au, 0x000300f7u, 0x0000229cu, 0x00000000u, 0x000400fau, 0x0000229bu, 0x0000229du, 0x0000229cu, 0x000200f8u, 0x0000229du, 0x0003003eu, 0x0000208fu, 0x00009ce6u, 0x0003003eu, 0x00002090u, 0x000028ccu, 0x00050051u, 0x00000008u, 0x00005bc9u, 0x00009ce6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005bcau, 0x00009ce6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005bcbu, 0x00009ce6u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005bccu, 0x00009ce6u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00005bceu, 0x00009ce6u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005bc2u, 0x00005bceu, 0x00050041u, 0x0000003eu, 0x00005bcfu, 0x00005bc2u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005bd0u, 0x00005bcfu, 0x00050041u, 0x0000003eu, 0x00005bd1u, 0x00002090u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005bd2u, 0x00005bd1u, 0x00050041u, 0x0000003eu, 0x00005bd3u, 0x00005bc2u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005bd4u, 0x00005bd3u, 0x00050084u, 0x00000008u, 0x00005bd5u, 0x00005bd2u, 0x00005bd4u, 0x00050080u, 0x00000008u, 0x00005bd6u, 0x00005bd5u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00005bd7u, 0x00005bd6u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005bd8u, 0x00005bd0u, 0x00005bd7u, 0x0003003eu, 0x00005bc3u, 0x00005bd8u, 0x0004003du, 0x00000008u, 0x00005bdau, 0x00005bcfu, 0x00050041u, 0x0000003eu, 0x00005bdbu, 0x00002090u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005bdcu, 0x00005bdbu, 0x00050041u, 0x0000003eu, 0x00005bddu, 0x00005bc2u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005bdeu, 0x00005bddu, 0x00050084u, 0x00000008u, 0x00005bdfu, 0x00005bdcu, 0x00005bdeu, 0x00050041u, 0x0000003eu, 0x00005be0u, 0x00002090u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005be1u, 0x00005be0u, 0x0004003du, 0x00000008u, 0x00005be3u, 0x00005bd3u, 0x00050084u, 0x00000008u, 0x00005be4u, 0x00005be1u, 0x00005be3u, 0x00050080u, 0x00000008u, 0x00005be5u, 0x00005bdfu, 0x00005be4u, 0x00050080u, 0x00000008u, 0x00005be6u, 0x00005be5u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00005be7u, 0x00005be6u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005be8u, 0x00005bdau, 0x00005be7u, 0x0003003eu, 0x00005bc4u, 0x00005be8u, 0x0004003du, 0x00000008u, 0x00005beau, 0x00005bcfu, 0x00050041u, 0x0000003eu, 0x00005bebu, 0x00002090u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005becu, 0x00005bebu, 0x0004003du, 0x00000008u, 0x00005beeu, 0x00005bddu, 0x00050084u, 0x00000008u, 0x00005befu, 0x00005becu, 0x00005beeu, 0x00050080u, 0x00000008u, 0x00005bf0u, 0x00005befu, 0x00000623u, 0x000500c3u, 0x00000008u, 0x00005bf1u, 0x00005bf0u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005bf2u, 0x00005beau, 0x00005bf1u, 0x0003003eu, 0x00005bc5u, 0x00005bf2u, 0x0004003du, 0x00000008u, 0x00005bf4u, 0x00005bcfu, 0x0003003eu, 0x00005bc6u, 0x00005bf4u, 0x00070050u, 0x00000009u, 0x00005bf9u, 0x00005bd8u, 0x00005be8u, 0x00005bf2u, 0x00005bf4u, 0x0003003eu, 0x00005bc7u, 0x00005bf9u, 0x0003003eu, 0x00002080u, 0x00005bf9u, 0x000200f9u, 0x0000229cu, 0x000200f8u, 0x0000229cu, 0x000700f5u, 0x00000009u, 0x0000a6bfu, 0x00009ce6u, 0x0000494au, 0x00005bf9u, 0x0000229du, 0x000200f9u, 0x0000227cu, 0x000200f8u, 0x0000227du, 0x0003003eu, 0x00002081u, 0x000093d0u, 0x0003003eu, 0x00002082u, 0x000028ccu, 0x00050051u, 0x00000008u, 0x0000447cu, 0x000093d0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000447du, 0x000093d0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000447eu, 0x000093d0u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000447fu, 0x000093d0u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004481u, 0x000093d0u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00004475u, 0x00004481u, 0x00050041u, 0x0000003eu, 0x00004482u, 0x00004475u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004483u, 0x00004482u, 0x00050041u, 0x0000003eu, 0x00004484u, 0x00002082u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004485u, 0x00004484u, 0x00050041u, 0x0000003eu, 0x00004486u, 0x00004475u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00004487u, 0x00004486u, 0x00050084u, 0x00000008u, 0x00004488u, 0x00004485u, 0x00004487u, 0x00050080u, 0x00000008u, 0x00004489u, 0x00004488u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000448au, 0x00004489u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x0000448bu, 0x00004483u, 0x0000448au, 0x0003003eu, 0x00004476u, 0x0000448bu, 0x0004003du, 0x00000008u, 0x0000448du, 0x00004482u, 0x00050041u, 0x0000003eu, 0x0000448eu, 0x00002082u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000448fu, 0x0000448eu, 0x00050041u, 0x0000003eu, 0x00004490u, 0x00004475u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00004491u, 0x00004490u, 0x00050084u, 0x00000008u, 0x00004492u, 0x0000448fu, 0x00004491u, 0x00050041u, 0x0000003eu, 0x00004493u, 0x00002082u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00004494u, 0x00004493u, 0x0004003du, 0x00000008u, 0x00004496u, 0x00004486u, 0x00050084u, 0x00000008u, 0x00004497u, 0x00004494u, 0x00004496u, 0x00050080u, 0x00000008u, 0x00004498u, 0x00004492u, 0x00004497u, 0x00050080u, 0x00000008u, 0x00004499u, 0x00004498u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x0000449au, 0x00004499u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x0000449bu, 0x0000448du, 0x0000449au, 0x0003003eu, 0x00004477u, 0x0000449bu, 0x0004003du, 0x00000008u, 0x0000449du, 0x00004482u, 0x00050041u, 0x0000003eu, 0x0000449eu, 0x00002082u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000449fu, 0x0000449eu, 0x0004003du, 0x00000008u, 0x000044a1u, 0x00004490u, 0x00050084u, 0x00000008u, 0x000044a2u, 0x0000449fu, 0x000044a1u, 0x00050080u, 0x00000008u, 0x000044a3u, 0x000044a2u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000044a4u, 0x000044a3u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000044a5u, 0x0000449du, 0x000044a4u, 0x0003003eu, 0x00004478u, 0x000044a5u, 0x0004003du, 0x00000008u, 0x000044a7u, 0x00004482u, 0x0003003eu, 0x00004479u, 0x000044a7u, 0x00070050u, 0x00000009u, 0x000044acu, 0x0000448bu, 0x0000449bu, 0x000044a5u, 0x000044a7u, 0x0003003eu, 0x0000447au, 0x000044acu, 0x0003003eu, 0x00002080u, 0x000044acu, 0x000200f9u, 0x0000227cu, 0x000200f8u, 0x0000227cu, 0x000700f5u, 0x00000009u, 0x0000e50du, 0x00009b5du, 0x0000227du, 0x00009b40u, 0x0000229cu, 0x000700f5u, 0x00000009u, 0x0000e46du, 0x00009a79u, 0x0000227du, 0x00009a5cu, 0x0000229cu, 0x000700f5u, 0x00000009u, 0x0000e3cdu, 0x00009992u, 0x0000227du, 0x00009975u, 0x0000229cu, 0x000700f5u, 0x00000009u, 0x0000e32du, 0x000098aau, 0x0000227du, 0x0000988du, 0x0000229cu, 0x000700f5u, 0x00000009u, 0x0000a6beu, 0x000044acu, 0x0000227du, 0x0000a6bfu, 0x0000229cu, 0x000200f9u, 0x00002276u, 0x000200f8u, 0x00002276u, 0x000700f5u, 0x00000009u, 0x0000e50cu, 0x00009b5du, 0x0000222bu, 0x0000e50du, 0x0000227cu, 0x000700f5u, 0x00000009u, 0x0000e46cu, 0x00009a79u, 0x0000222bu, 0x0000e46du, 0x0000227cu, 0x000700f5u, 0x00000009u, 0x0000e3ccu, 0x00009992u, 0x0000222bu, 0x0000e3cdu, 0x0000227cu, 0x000700f5u, 0x00000009u, 0x0000e32cu, 0x000098aau, 0x0000222bu, 0x0000e32du, 0x0000227cu, 0x000700f5u, 0x00000009u, 0x0000a61cu, 0x0000a62bu, 0x0000222bu, 0x0000a6beu, 0x0000227cu, 0x000600a9u, 0x00000008u, 0x000022a4u, 0x0000212au, 0x00000212u, 0x00000203u, 0x000500c3u, 0x00000008u, 0x000022a5u, 0x00007a5cu, 0x000022a4u, 0x000500c3u, 0x00000008u, 0x000022a7u, 0x00002391u, 0x00000215u, 0x000500c7u, 0x00000008u, 0x000022a9u, 0x00002391u, 0x00000218u, 0x0003003eu, 0x00002093u, 0x00007a63u, 0x0003003eu, 0x00002094u, 0x000022a5u, 0x0003003eu, 0x00002095u, 0x000022a7u, 0x0003003eu, 0x00002096u, 0x000022a9u, 0x000500b1u, 0x0000005du, 0x00005bfeu, 0x000022a7u, 0x00000215u, 0x000300f7u, 0x00005bffu, 0x00000000u, 0x000400fau, 0x00005bfeu, 0x00005c00u, 0x00005c01u, 0x000200f8u, 0x00005c01u, 0x000500aau, 0x0000005du, 0x00005c0du, 0x000022a7u, 0x00000215u, 0x000300f7u, 0x00005c0eu, 0x00000000u, 0x000400fau, 0x00005c0du, 0x00005c0fu, 0x00005c10u, 0x000200f8u, 0x00005c10u, 0x0003003eu, 0x00002097u, 0x00000203u, 0x000200f9u, 0x00005c0eu, 0x000200f8u, 0x00005c0fu, 0x0004003du, 0x00000008u, 0x00005c37u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005c38u, 0x00005c37u, 0x00000386u, 0x0003003eu, 0x00005c36u, 0x00005c38u, 0x0003003eu, 0x00002097u, 0x00005c38u, 0x000200f9u, 0x00005c0eu, 0x000200f8u, 0x00005c0eu, 0x000700f5u, 0x00000008u, 0x0000a0fbu, 0x00005c38u, 0x00005c0fu, 0x00000203u, 0x00005c10u, 0x000200f9u, 0x00005bffu, 0x000200f8u, 0x00005c00u, 0x000500c7u, 0x00000008u, 0x00005c04u, 0x000022a5u, 0x00000218u, 0x00050084u, 0x00000008u, 0x00005c05u, 0x00005c04u, 0x0000021bu, 0x000500c7u, 0x00000008u, 0x00005c07u, 0x00007a63u, 0x00000218u, 0x00050080u, 0x00000008u, 0x00005c08u, 0x00005c05u, 0x00005c07u, 0x0003003eu, 0x00005bfau, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x00005c09u, 0x00005bfau, 0x000022a7u, 0x00005c08u, 0x0004003du, 0x00000008u, 0x00005c0au, 0x00005c09u, 0x00050084u, 0x00000008u, 0x00005c0bu, 0x00005c0au, 0x000003d4u, 0x0003003eu, 0x00002097u, 0x00005c0bu, 0x000200f9u, 0x00005bffu, 0x000200f8u, 0x00005bffu, 0x000700f5u, 0x00000008u, 0x0000a0fau, 0x00005c0bu, 0x00005c00u, 0x0000a0fbu, 0x00005c0eu, 0x000500aau, 0x0000005du, 0x00005c13u, 0x000022a9u, 0x00000218u, 0x000300f7u, 0x00005c14u, 0x00000000u, 0x000400fau, 0x00005c13u, 0x00005c15u, 0x00005c16u, 0x000200f8u, 0x00005c16u, 0x000500aau, 0x0000005du, 0x00005c18u, 0x000022a9u, 0x00000215u, 0x000300f7u, 0x00005c19u, 0x00000000u, 0x000400fau, 0x00005c18u, 0x00005c1au, 0x00005c1bu, 0x000200f8u, 0x00005c1bu, 0x000500afu, 0x0000005du, 0x00005c1eu, 0x000022a7u, 0x00000215u, 0x000300f7u, 0x00005c1fu, 0x00000000u, 0x000400fau, 0x00005c1eu, 0x00005c20u, 0x00005c21u, 0x000200f8u, 0x00005c21u, 0x000500c7u, 0x00000008u, 0x00005c2du, 0x0000a0fau, 0x00000224u, 0x0003003eu, 0x00005bfbu, 0x00005c2du, 0x000200f9u, 0x00005c1fu, 0x000200f8u, 0x00005c20u, 0x000500c7u, 0x00000008u, 0x00005c23u, 0x000022a7u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00005c25u, 0x000022a5u, 0x00000218u, 0x00050084u, 0x00000008u, 0x00005c26u, 0x00005c25u, 0x0000021bu, 0x000500c7u, 0x00000008u, 0x00005c28u, 0x00007a63u, 0x00000218u, 0x00050080u, 0x00000008u, 0x00005c29u, 0x00005c26u, 0x00005c28u, 0x0003003eu, 0x00005bfcu, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x00005c2au, 0x00005bfcu, 0x00005c23u, 0x00005c29u, 0x0004003du, 0x00000008u, 0x00005c2bu, 0x00005c2au, 0x0003003eu, 0x00005bfbu, 0x00005c2bu, 0x000200f9u, 0x00005c1fu, 0x000200f8u, 0x00005c1fu, 0x000700f5u, 0x00000008u, 0x0000a100u, 0x00005c2bu, 0x00005c20u, 0x00005c2du, 0x00005c21u, 0x0003003eu, 0x00002098u, 0x0000a100u, 0x000500aau, 0x0000005du, 0x00005c30u, 0x000022a9u, 0x00000212u, 0x000300f7u, 0x00005c31u, 0x00000000u, 0x000400fau, 0x00005c30u, 0x00005c32u, 0x00005c31u, 0x000200f8u, 0x00005c32u, 0x000400c8u, 0x00000008u, 0x00005c34u, 0x0000a100u, 0x000500c7u, 0x00000008u, 0x00005c35u, 0x00005c34u, 0x00000224u, 0x0003003eu, 0x00002098u, 0x00005c35u, 0x000200f9u, 0x00005c31u, 0x000200f8u, 0x00005c31u, 0x000700f5u, 0x00000008u, 0x0000a108u, 0x0000a100u, 0x00005c1fu, 0x00005c35u, 0x00005c32u, 0x000200f9u, 0x00005c19u, 0x000200f8u, 0x00005c1au, 0x0004003du, 0x00000008u, 0x00005c3au, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005c3bu, 0x00005c3au, 0x00000224u, 0x0003003eu, 0x00005c39u, 0x00005c3bu, 0x0003003eu, 0x00002098u, 0x00005c3bu, 0x000200f9u, 0x00005c19u, 0x000200f8u, 0x00005c19u, 0x000700f5u, 0x00000008u, 0x0000a107u, 0x00005c3bu, 0x00005c1au, 0x0000a108u, 0x00005c31u, 0x000200f9u, 0x00005c14u, 0x000200f8u, 0x00005c15u, 0x0003003eu, 0x00002098u, 0x00000203u, 0x000200f9u, 0x00005c14u, 0x000200f8u, 0x00005c14u, 0x000700f5u, 0x00000008u, 0x0000a106u, 0x00000203u, 0x00005c15u, 0x0000a107u, 0x00005c19u, 0x0003003eu, 0x00002091u, 0x0000a0fau, 0x0003003eu, 0x00002092u, 0x0000a106u, 0x000300f7u, 0x000022afu, 0x00000000u, 0x000400fau, 0x00002127u, 0x000022b0u, 0x000022b1u, 0x000200f8u, 0x000022b1u, 0x0004003du, 0x00000009u, 0x000022f4u, 0x0000203au, 0x0004003du, 0x00000008u, 0x00005f55u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005f56u, 0x00005f55u, 0x00000224u, 0x000500c4u, 0x00000008u, 0x00005f57u, 0x00005f56u, 0x00000221u, 0x000500c5u, 0x00000008u, 0x00005f58u, 0x00005f57u, 0x0000037du, 0x0003003eu, 0x00005f54u, 0x00005f58u, 0x000d0050u, 0x000001cdu, 0x000022f9u, 0x0000289du, 0x000028a2u, 0x000028a7u, 0x000028acu, 0x000022f4u, 0x00000611u, 0x000093d0u, 0x0000a61cu, 0x0000a6c9u, 0x00005f58u, 0x0003003eu, 0x00007840u, 0x0000289du, 0x0003003eu, 0x00007841u, 0x000028a2u, 0x0003003eu, 0x00007842u, 0x000028a7u, 0x0003003eu, 0x00007843u, 0x000028acu, 0x0003003eu, 0x00007844u, 0x000022f4u, 0x0003003eu, 0x00007845u, 0x00000611u, 0x0003003eu, 0x00007846u, 0x000093d0u, 0x0003003eu, 0x00007847u, 0x0000a61cu, 0x0003003eu, 0x00007848u, 0x0000a6c9u, 0x0003003eu, 0x00007849u, 0x00005f58u, 0x0003003eu, 0x0000785fu, 0x0000289du, 0x0003003eu, 0x00007860u, 0x000028a2u, 0x0003003eu, 0x00007861u, 0x000028a7u, 0x0003003eu, 0x00007862u, 0x000028acu, 0x0003003eu, 0x00007863u, 0x000022f4u, 0x0003003eu, 0x00007864u, 0x00000611u, 0x0003003eu, 0x00007865u, 0x000093d0u, 0x0003003eu, 0x00007866u, 0x0000a61cu, 0x0003003eu, 0x00007867u, 0x0000a6c9u, 0x0003003eu, 0x00007868u, 0x00005f58u, 0x0003003eu, 0x000020afu, 0x00002386u, 0x0003003eu, 0x000020b0u, 0x0000238bu, 0x0003003eu, 0x000020b1u, 0x0000a106u, 0x0003003eu, 0x000020b2u, 0x000021b8u, 0x0003003eu, 0x000020b3u, 0x00002112u, 0x0003003eu, 0x000020b4u, 0x00002115u, 0x0003003eu, 0x000068abu, 0x0000289du, 0x0003003eu, 0x000068acu, 0x000022f4u, 0x0003003eu, 0x000068adu, 0x00000611u, 0x0003003eu, 0x000068aeu, 0x000093d0u, 0x0003003eu, 0x000068afu, 0x0000a61cu, 0x0003003eu, 0x000068b0u, 0x00005f58u, 0x00050041u, 0x0000003eu, 0x00005f73u, 0x000020afu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005f74u, 0x00005f73u, 0x0003003eu, 0x00005f5bu, 0x00005f74u, 0x00050041u, 0x0000003eu, 0x00005f75u, 0x000020b0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005f76u, 0x00005f75u, 0x0003003eu, 0x00005f5cu, 0x00005f76u, 0x000300f7u, 0x00005fb5u, 0x00000000u, 0x000f00fbu, 0x00005f74u, 0x00005fb6u, 0x00000000u, 0x00005fb7u, 0x00000001u, 0x00005fb8u, 0x00000002u, 0x00005fb9u, 0x00000004u, 0x00005fbau, 0x00000007u, 0x00005fbbu, 0x00000006u, 0x00005fbcu, 0x000200f8u, 0x00005fbcu, 0x0003003eu, 0x00005fb1u, 0x00001935u, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fbbu, 0x00060050u, 0x0000003cu, 0x00005fceu, 0x00005f58u, 0x00005f58u, 0x00005f58u, 0x0003003eu, 0x00005fb1u, 0x00005fceu, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fbau, 0x0004003du, 0x00000009u, 0x00005fcau, 0x000068acu, 0x0008004fu, 0x0000003cu, 0x00005fcbu, 0x00005fcau, 0x00005fcau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fb1u, 0x00005fcbu, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fb9u, 0x0004003du, 0x00000009u, 0x00005fc7u, 0x000068afu, 0x0008004fu, 0x0000003cu, 0x00005fc8u, 0x00005fc7u, 0x00005fc7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fb1u, 0x00005fc8u, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fb8u, 0x0004003du, 0x00000009u, 0x00005fc4u, 0x000068aeu, 0x0008004fu, 0x0000003cu, 0x00005fc5u, 0x00005fc4u, 0x00005fc4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fb1u, 0x00005fc5u, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fb7u, 0x0004003du, 0x00000009u, 0x00005fc1u, 0x000068adu, 0x0008004fu, 0x0000003cu, 0x00005fc2u, 0x00005fc1u, 0x00005fc1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fb1u, 0x00005fc2u, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fb6u, 0x0004003du, 0x00000009u, 0x00005fbeu, 0x000068abu, 0x0008004fu, 0x0000003cu, 0x00005fbfu, 0x00005fbeu, 0x00005fbeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fb1u, 0x00005fbfu, 0x000200f9u, 0x00005fb5u, 0x000200f8u, 0x00005fb5u, 0x001100f5u, 0x0000003cu, 0x0000ac76u, 0x00005fbfu, 0x00005fb6u, 0x00005fc2u, 0x00005fb7u, 0x00005fc5u, 0x00005fb8u, 0x00005fc8u, 0x00005fb9u, 0x00005fcbu, 0x00005fbau, 0x00005fceu, 0x00005fbbu, 0x00001935u, 0x00005fbcu, 0x000300f7u, 0x00005fd0u, 0x00000000u, 0x000d00fbu, 0x00005f76u, 0x00005fd1u, 0x00000000u, 0x00005fd2u, 0x00000001u, 0x00005fd3u, 0x00000002u, 0x00005fd4u, 0x00000004u, 0x00005fd5u, 0x00000006u, 0x00005fd6u, 0x000200f8u, 0x00005fd6u, 0x0003003eu, 0x00005fb2u, 0x00001934u, 0x000200f9u, 0x00005fd0u, 0x000200f8u, 0x00005fd5u, 0x00050041u, 0x0000003eu, 0x000068bbu, 0x000068acu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fe0u, 0x000068bbu, 0x0003003eu, 0x00005fb2u, 0x00005fe0u, 0x000200f9u, 0x00005fd0u, 0x000200f8u, 0x00005fd4u, 0x00050041u, 0x0000003eu, 0x000068bau, 0x000068afu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fdeu, 0x000068bau, 0x0003003eu, 0x00005fb2u, 0x00005fdeu, 0x000200f9u, 0x00005fd0u, 0x000200f8u, 0x00005fd3u, 0x00050041u, 0x0000003eu, 0x000068b9u, 0x000068aeu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fdcu, 0x000068b9u, 0x0003003eu, 0x00005fb2u, 0x00005fdcu, 0x000200f9u, 0x00005fd0u, 0x000200f8u, 0x00005fd2u, 0x00050041u, 0x0000003eu, 0x000068b8u, 0x000068adu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fdau, 0x000068b8u, 0x0003003eu, 0x00005fb2u, 0x00005fdau, 0x000200f9u, 0x00005fd0u, 0x000200f8u, 0x00005fd1u, 0x00050041u, 0x0000003eu, 0x000068b7u, 0x000068abu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005fd8u, 0x000068b7u, 0x0003003eu, 0x00005fb2u, 0x00005fd8u, 0x000200f9u, 0x00005fd0u, 0x000200f8u, 0x00005fd0u, 0x000f00f5u, 0x00000008u, 0x0000ac77u, 0x00005fd8u, 0x00005fd1u, 0x00005fdau, 0x00005fd2u, 0x00005fdcu, 0x00005fd3u, 0x00005fdeu, 0x00005fd4u, 0x00005fe0u, 0x00005fd5u, 0x00001934u, 0x00005fd6u, 0x00050051u, 0x00000008u, 0x00005fe3u, 0x0000ac76u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005fe4u, 0x0000ac76u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005fe5u, 0x0000ac76u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005fe6u, 0x00005fe3u, 0x00005fe4u, 0x00005fe5u, 0x0000ac77u, 0x0003003eu, 0x00005fb3u, 0x00005fe6u, 0x0003003eu, 0x00005f59u, 0x00005fe6u, 0x0003003eu, 0x000068bcu, 0x000028a2u, 0x0003003eu, 0x000068bdu, 0x000022f4u, 0x0003003eu, 0x000068beu, 0x00000611u, 0x0003003eu, 0x000068bfu, 0x000093d0u, 0x0003003eu, 0x000068c0u, 0x0000a61cu, 0x00050041u, 0x0000003eu, 0x00005f79u, 0x000020afu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005f7au, 0x00005f79u, 0x0003003eu, 0x00005f5fu, 0x00005f7au, 0x00050041u, 0x0000003eu, 0x00005f7bu, 0x000020b0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005f7cu, 0x00005f7bu, 0x0003003eu, 0x00005f60u, 0x00005f7cu, 0x000300f7u, 0x00005febu, 0x00000000u, 0x000d00fbu, 0x00005f7au, 0x00005fecu, 0x00000000u, 0x00005fedu, 0x00000001u, 0x00005feeu, 0x00000002u, 0x00005fefu, 0x00000004u, 0x00005ff0u, 0x00000007u, 0x00005ff1u, 0x000200f8u, 0x00005ff1u, 0x00050041u, 0x0000003eu, 0x000068c6u, 0x000068bcu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00006002u, 0x000068c6u, 0x000500c4u, 0x00000008u, 0x00006003u, 0x00006002u, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x000068c7u, 0x000068bcu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006005u, 0x000068c7u, 0x000500c5u, 0x00000008u, 0x00006006u, 0x00006003u, 0x00006005u, 0x00060050u, 0x0000003cu, 0x00006007u, 0x00006006u, 0x00006006u, 0x00006006u, 0x0003003eu, 0x00005fe7u, 0x00006007u, 0x000200f9u, 0x00005febu, 0x000200f8u, 0x00005ff0u, 0x0004003du, 0x00000009u, 0x00005fffu, 0x000068bdu, 0x0008004fu, 0x0000003cu, 0x00006000u, 0x00005fffu, 0x00005fffu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fe7u, 0x00006000u, 0x000200f9u, 0x00005febu, 0x000200f8u, 0x00005fefu, 0x0004003du, 0x00000009u, 0x00005ffcu, 0x000068c0u, 0x0008004fu, 0x0000003cu, 0x00005ffdu, 0x00005ffcu, 0x00005ffcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fe7u, 0x00005ffdu, 0x000200f9u, 0x00005febu, 0x000200f8u, 0x00005feeu, 0x0004003du, 0x00000009u, 0x00005ff9u, 0x000068bfu, 0x0008004fu, 0x0000003cu, 0x00005ffau, 0x00005ff9u, 0x00005ff9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fe7u, 0x00005ffau, 0x000200f9u, 0x00005febu, 0x000200f8u, 0x00005fedu, 0x0004003du, 0x00000009u, 0x00005ff6u, 0x000068beu, 0x0008004fu, 0x0000003cu, 0x00005ff7u, 0x00005ff6u, 0x00005ff6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fe7u, 0x00005ff7u, 0x000200f9u, 0x00005febu, 0x000200f8u, 0x00005fecu, 0x0004003du, 0x00000009u, 0x00005ff3u, 0x000068bcu, 0x0008004fu, 0x0000003cu, 0x00005ff4u, 0x00005ff3u, 0x00005ff3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005fe7u, 0x00005ff4u, 0x000200f9u, 0x00005febu, 0x000200f8u, 0x00005febu, 0x000f00f5u, 0x0000003cu, 0x0000ac8eu, 0x00005ff4u, 0x00005fecu, 0x00005ff7u, 0x00005fedu, 0x00005ffau, 0x00005feeu, 0x00005ffdu, 0x00005fefu, 0x00006000u, 0x00005ff0u, 0x00006007u, 0x00005ff1u, 0x000300f7u, 0x00006009u, 0x00000000u, 0x000d00fbu, 0x00005f7cu, 0x0000600au, 0x00000000u, 0x0000600bu, 0x00000001u, 0x0000600cu, 0x00000002u, 0x0000600du, 0x00000004u, 0x0000600eu, 0x00000006u, 0x0000600fu, 0x000200f8u, 0x0000600fu, 0x0003003eu, 0x00005fe8u, 0x00001934u, 0x000200f9u, 0x00006009u, 0x000200f8u, 0x0000600eu, 0x00050041u, 0x0000003eu, 0x000068ccu, 0x000068bdu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006019u, 0x000068ccu, 0x0003003eu, 0x00005fe8u, 0x00006019u, 0x000200f9u, 0x00006009u, 0x000200f8u, 0x0000600du, 0x00050041u, 0x0000003eu, 0x000068cbu, 0x000068c0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006017u, 0x000068cbu, 0x0003003eu, 0x00005fe8u, 0x00006017u, 0x000200f9u, 0x00006009u, 0x000200f8u, 0x0000600cu, 0x00050041u, 0x0000003eu, 0x000068cau, 0x000068bfu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006015u, 0x000068cau, 0x0003003eu, 0x00005fe8u, 0x00006015u, 0x000200f9u, 0x00006009u, 0x000200f8u, 0x0000600bu, 0x00050041u, 0x0000003eu, 0x000068c9u, 0x000068beu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006013u, 0x000068c9u, 0x0003003eu, 0x00005fe8u, 0x00006013u, 0x000200f9u, 0x00006009u, 0x000200f8u, 0x0000600au, 0x00050041u, 0x0000003eu, 0x000068c8u, 0x000068bcu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006011u, 0x000068c8u, 0x0003003eu, 0x00005fe8u, 0x00006011u, 0x000200f9u, 0x00006009u, 0x000200f8u, 0x00006009u, 0x000f00f5u, 0x00000008u, 0x0000ac8fu, 0x00006011u, 0x0000600au, 0x00006013u, 0x0000600bu, 0x00006015u, 0x0000600cu, 0x00006017u, 0x0000600du, 0x00006019u, 0x0000600eu, 0x00001934u, 0x0000600fu, 0x00050051u, 0x00000008u, 0x0000601cu, 0x0000ac8eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000601du, 0x0000ac8eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000601eu, 0x0000ac8eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000601fu, 0x0000601cu, 0x0000601du, 0x0000601eu, 0x0000ac8fu, 0x0003003eu, 0x00005fe9u, 0x0000601fu, 0x0003003eu, 0x00005f5du, 0x0000601fu, 0x0003003eu, 0x000068cdu, 0x000028a7u, 0x0003003eu, 0x000068ceu, 0x000022f4u, 0x0003003eu, 0x000068cfu, 0x00000611u, 0x0003003eu, 0x000068d0u, 0x000093d0u, 0x0003003eu, 0x000068d1u, 0x0000a61cu, 0x0003003eu, 0x000068d2u, 0x0000a6c9u, 0x00050041u, 0x0000003eu, 0x00005f7fu, 0x000020afu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005f80u, 0x00005f7fu, 0x0003003eu, 0x00005f63u, 0x00005f80u, 0x00050041u, 0x0000003eu, 0x00005f81u, 0x000020b0u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005f82u, 0x00005f81u, 0x0003003eu, 0x00005f64u, 0x00005f82u, 0x000300f7u, 0x00006024u, 0x00000000u, 0x001700fbu, 0x00005f80u, 0x00006025u, 0x00000000u, 0x00006026u, 0x00000007u, 0x00006027u, 0x00000001u, 0x00006028u, 0x00000002u, 0x00006029u, 0x00000004u, 0x0000602au, 0x00000008u, 0x0000602bu, 0x00000009u, 0x0000602cu, 0x0000000bu, 0x0000602du, 0x0000000du, 0x0000602eu, 0x0000000fu, 0x0000602fu, 0x000200f8u, 0x0000602fu, 0x00050041u, 0x0000003eu, 0x000068d9u, 0x000068cdu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000604fu, 0x000068d9u, 0x000500c4u, 0x00000008u, 0x00006050u, 0x0000604fu, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x000068dau, 0x000068cdu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006052u, 0x000068dau, 0x000500c5u, 0x00000008u, 0x00006053u, 0x00006050u, 0x00006052u, 0x00060050u, 0x0000003cu, 0x00006054u, 0x00006053u, 0x00006053u, 0x00006053u, 0x0003003eu, 0x00006020u, 0x00006054u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x0000602eu, 0x00060050u, 0x0000003cu, 0x0000604du, 0x0000a6c9u, 0x0000a6c9u, 0x0000a6c9u, 0x0003003eu, 0x00006020u, 0x0000604du, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x0000602du, 0x0004003du, 0x00000009u, 0x00006049u, 0x000068ceu, 0x0008004fu, 0x0000003cu, 0x0000604au, 0x00006049u, 0x00006049u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00006020u, 0x0000604au, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x0000602cu, 0x0004003du, 0x00000009u, 0x00006046u, 0x000068d1u, 0x0008004fu, 0x0000003cu, 0x00006047u, 0x00006046u, 0x00006046u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00006020u, 0x00006047u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x0000602bu, 0x0004003du, 0x00000009u, 0x00006043u, 0x000068d0u, 0x0008004fu, 0x0000003cu, 0x00006044u, 0x00006043u, 0x00006043u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00006020u, 0x00006044u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x0000602au, 0x0004003du, 0x00000009u, 0x00006040u, 0x000068ceu, 0x0008004fu, 0x0000003cu, 0x00006041u, 0x00006040u, 0x00006040u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006020u, 0x00006041u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x00006029u, 0x0004003du, 0x00000009u, 0x0000603du, 0x000068d1u, 0x0008004fu, 0x0000003cu, 0x0000603eu, 0x0000603du, 0x0000603du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006020u, 0x0000603eu, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x00006028u, 0x0004003du, 0x00000009u, 0x0000603au, 0x000068d0u, 0x0008004fu, 0x0000003cu, 0x0000603bu, 0x0000603au, 0x0000603au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006020u, 0x0000603bu, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x00006027u, 0x0003003eu, 0x00006020u, 0x00000941u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x00006026u, 0x0003003eu, 0x00006020u, 0x00000941u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x00006025u, 0x0004003du, 0x00000009u, 0x00006031u, 0x000068cdu, 0x0008004fu, 0x0000003cu, 0x00006032u, 0x00006031u, 0x00006031u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006020u, 0x00006032u, 0x000200f9u, 0x00006024u, 0x000200f8u, 0x00006024u, 0x001900f5u, 0x0000003cu, 0x0000aca7u, 0x00006032u, 0x00006025u, 0x00000941u, 0x00006026u, 0x00000941u, 0x00006027u, 0x0000603bu, 0x00006028u, 0x0000603eu, 0x00006029u, 0x00006041u, 0x0000602au, 0x00006044u, 0x0000602bu, 0x00006047u, 0x0000602cu, 0x0000604au, 0x0000602du, 0x0000604du, 0x0000602eu, 0x00006054u, 0x0000602fu, 0x000300f7u, 0x00006056u, 0x00000000u, 0x000b00fbu, 0x00005f82u, 0x00006057u, 0x00000000u, 0x00006058u, 0x00000001u, 0x00006059u, 0x00000002u, 0x0000605au, 0x00000004u, 0x0000605bu, 0x000200f8u, 0x0000605bu, 0x00050041u, 0x0000003eu, 0x000068deu, 0x000068ceu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006065u, 0x000068deu, 0x0003003eu, 0x00006021u, 0x00006065u, 0x000200f9u, 0x00006056u, 0x000200f8u, 0x0000605au, 0x00050041u, 0x0000003eu, 0x000068ddu, 0x000068d1u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006063u, 0x000068ddu, 0x0003003eu, 0x00006021u, 0x00006063u, 0x000200f9u, 0x00006056u, 0x000200f8u, 0x00006059u, 0x00050041u, 0x0000003eu, 0x000068dcu, 0x000068d0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006061u, 0x000068dcu, 0x0003003eu, 0x00006021u, 0x00006061u, 0x000200f9u, 0x00006056u, 0x000200f8u, 0x00006058u, 0x0003003eu, 0x00006021u, 0x0000a6c9u, 0x000200f9u, 0x00006056u, 0x000200f8u, 0x00006057u, 0x00050041u, 0x0000003eu, 0x000068dbu, 0x000068cdu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000605du, 0x000068dbu, 0x0003003eu, 0x00006021u, 0x0000605du, 0x000200f9u, 0x00006056u, 0x000200f8u, 0x00006056u, 0x000d00f5u, 0x00000008u, 0x0000aca8u, 0x0000605du, 0x00006057u, 0x0000a6c9u, 0x00006058u, 0x00006061u, 0x00006059u, 0x00006063u, 0x0000605au, 0x00006065u, 0x0000605bu, 0x00050051u, 0x00000008u, 0x00006068u, 0x0000aca7u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006069u, 0x0000aca7u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000606au, 0x0000aca7u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000606bu, 0x00006068u, 0x00006069u, 0x0000606au, 0x0000aca8u, 0x0003003eu, 0x00006022u, 0x0000606bu, 0x0003003eu, 0x00005f61u, 0x0000606bu, 0x0003003eu, 0x000068dfu, 0x000028acu, 0x0003003eu, 0x000068e0u, 0x000022f4u, 0x0003003eu, 0x000068e1u, 0x00000611u, 0x0003003eu, 0x000068e2u, 0x000093d0u, 0x0003003eu, 0x000068e3u, 0x0000a61cu, 0x00050041u, 0x0000003eu, 0x00005f85u, 0x000020afu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f86u, 0x00005f85u, 0x0003003eu, 0x00005f67u, 0x00005f86u, 0x00050041u, 0x0000003eu, 0x00005f87u, 0x000020b0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f88u, 0x00005f87u, 0x0003003eu, 0x00005f68u, 0x00005f88u, 0x000300f7u, 0x00006070u, 0x00000000u, 0x000d00fbu, 0x00005f86u, 0x00006071u, 0x00000000u, 0x00006072u, 0x00000001u, 0x00006073u, 0x00000002u, 0x00006074u, 0x00000004u, 0x00006075u, 0x00000006u, 0x00006076u, 0x000200f8u, 0x00006076u, 0x0003003eu, 0x0000606cu, 0x00001935u, 0x000200f9u, 0x00006070u, 0x000200f8u, 0x00006075u, 0x0004003du, 0x00000009u, 0x00006084u, 0x000068e0u, 0x0008004fu, 0x0000003cu, 0x00006085u, 0x00006084u, 0x00006084u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000606cu, 0x00006085u, 0x000200f9u, 0x00006070u, 0x000200f8u, 0x00006074u, 0x0004003du, 0x00000009u, 0x00006081u, 0x000068e3u, 0x0008004fu, 0x0000003cu, 0x00006082u, 0x00006081u, 0x00006081u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000606cu, 0x00006082u, 0x000200f9u, 0x00006070u, 0x000200f8u, 0x00006073u, 0x0004003du, 0x00000009u, 0x0000607eu, 0x000068e2u, 0x0008004fu, 0x0000003cu, 0x0000607fu, 0x0000607eu, 0x0000607eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000606cu, 0x0000607fu, 0x000200f9u, 0x00006070u, 0x000200f8u, 0x00006072u, 0x0004003du, 0x00000009u, 0x0000607bu, 0x000068e1u, 0x0008004fu, 0x0000003cu, 0x0000607cu, 0x0000607bu, 0x0000607bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000606cu, 0x0000607cu, 0x000200f9u, 0x00006070u, 0x000200f8u, 0x00006071u, 0x0004003du, 0x00000009u, 0x00006078u, 0x000068dfu, 0x0008004fu, 0x0000003cu, 0x00006079u, 0x00006078u, 0x00006078u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000606cu, 0x00006079u, 0x000200f9u, 0x00006070u, 0x000200f8u, 0x00006070u, 0x000f00f5u, 0x0000003cu, 0x0000acbfu, 0x00006079u, 0x00006071u, 0x0000607cu, 0x00006072u, 0x0000607fu, 0x00006073u, 0x00006082u, 0x00006074u, 0x00006085u, 0x00006075u, 0x00001935u, 0x00006076u, 0x000300f7u, 0x00006087u, 0x00000000u, 0x000d00fbu, 0x00005f88u, 0x00006088u, 0x00000000u, 0x00006089u, 0x00000001u, 0x0000608au, 0x00000002u, 0x0000608bu, 0x00000004u, 0x0000608cu, 0x00000006u, 0x0000608du, 0x000200f8u, 0x0000608du, 0x0003003eu, 0x0000606du, 0x00001934u, 0x000200f9u, 0x00006087u, 0x000200f8u, 0x0000608cu, 0x00050041u, 0x0000003eu, 0x000068edu, 0x000068e0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006097u, 0x000068edu, 0x0003003eu, 0x0000606du, 0x00006097u, 0x000200f9u, 0x00006087u, 0x000200f8u, 0x0000608bu, 0x00050041u, 0x0000003eu, 0x000068ecu, 0x000068e3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006095u, 0x000068ecu, 0x0003003eu, 0x0000606du, 0x00006095u, 0x000200f9u, 0x00006087u, 0x000200f8u, 0x0000608au, 0x00050041u, 0x0000003eu, 0x000068ebu, 0x000068e2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006093u, 0x000068ebu, 0x0003003eu, 0x0000606du, 0x00006093u, 0x000200f9u, 0x00006087u, 0x000200f8u, 0x00006089u, 0x00050041u, 0x0000003eu, 0x000068eau, 0x000068e1u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006091u, 0x000068eau, 0x0003003eu, 0x0000606du, 0x00006091u, 0x000200f9u, 0x00006087u, 0x000200f8u, 0x00006088u, 0x00050041u, 0x0000003eu, 0x000068e9u, 0x000068dfu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000608fu, 0x000068e9u, 0x0003003eu, 0x0000606du, 0x0000608fu, 0x000200f9u, 0x00006087u, 0x000200f8u, 0x00006087u, 0x000f00f5u, 0x00000008u, 0x0000acc0u, 0x0000608fu, 0x00006088u, 0x00006091u, 0x00006089u, 0x00006093u, 0x0000608au, 0x00006095u, 0x0000608bu, 0x00006097u, 0x0000608cu, 0x00001934u, 0x0000608du, 0x00050051u, 0x00000008u, 0x0000609au, 0x0000acbfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000609bu, 0x0000acbfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000609cu, 0x0000acbfu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000609du, 0x0000609au, 0x0000609bu, 0x0000609cu, 0x0000acc0u, 0x0003003eu, 0x0000606eu, 0x0000609du, 0x0003003eu, 0x00005f65u, 0x0000609du, 0x0003003eu, 0x00005f6au, 0x00005fe6u, 0x0003003eu, 0x00005f6bu, 0x0000601fu, 0x0003003eu, 0x00005f6cu, 0x0000606bu, 0x0003003eu, 0x00005f6du, 0x0000609du, 0x000600cau, 0x00000009u, 0x000060a4u, 0x0000606bu, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005f6cu, 0x000060a4u, 0x0003003eu, 0x0000609eu, 0x00005fe6u, 0x00050082u, 0x00000009u, 0x000060c5u, 0x00005fe6u, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x000060c6u, 0x000060c5u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000060c8u, 0x000060c6u, 0x0000eee2u, 0x0003003eu, 0x000060c2u, 0x000060c8u, 0x0003003eu, 0x00005f6au, 0x000060c8u, 0x0003003eu, 0x0000609fu, 0x0000601fu, 0x00050082u, 0x00000009u, 0x000060ccu, 0x0000601fu, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x000060cdu, 0x000060ccu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000060cfu, 0x000060cdu, 0x0000eee2u, 0x0003003eu, 0x000060c9u, 0x000060cfu, 0x0003003eu, 0x00005f6bu, 0x000060cfu, 0x0003003eu, 0x000060a0u, 0x0000609du, 0x00050082u, 0x00000009u, 0x000060d3u, 0x0000609du, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x000060d4u, 0x000060d3u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000060d6u, 0x000060d4u, 0x0000eee2u, 0x0003003eu, 0x000060d0u, 0x000060d6u, 0x0003003eu, 0x00005f6du, 0x000060d6u, 0x00050082u, 0x00000009u, 0x000060adu, 0x000060c8u, 0x000060cfu, 0x00050084u, 0x00000009u, 0x000060afu, 0x000060adu, 0x000060a4u, 0x0003003eu, 0x000060a1u, 0x000060afu, 0x00050080u, 0x00000009u, 0x000060b2u, 0x000060afu, 0x0000eee2u, 0x0003003eu, 0x000060a1u, 0x000060b2u, 0x000500c3u, 0x00000009u, 0x000060b5u, 0x000060b2u, 0x0000eeedu, 0x00050051u, 0x00000008u, 0x000060b6u, 0x000060b5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000060b7u, 0x000060b5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000060b8u, 0x000060b5u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000060b9u, 0x000060b5u, 0x00000003u, 0x00050051u, 0x00000008u, 0x000060bcu, 0x000060d6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000060bdu, 0x000060d6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000060beu, 0x000060d6u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000060bfu, 0x000060d6u, 0x00000003u, 0x00050080u, 0x00000009u, 0x000060c1u, 0x000060b5u, 0x000060d6u, 0x0003003eu, 0x000060a2u, 0x000060c1u, 0x0003003eu, 0x00005f69u, 0x000060c1u, 0x0004003du, 0x00000009u, 0x00005f8fu, 0x00005f69u, 0x0003003eu, 0x00005f6eu, 0x00005f8fu, 0x00050082u, 0x00000009u, 0x000060dau, 0x00005f8fu, 0x0000eee2u, 0x0003003eu, 0x00005f6eu, 0x000060dau, 0x000600cau, 0x00000009u, 0x000060dcu, 0x000060dau, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005f6eu, 0x000060dcu, 0x00050080u, 0x00000009u, 0x000060dfu, 0x000060dcu, 0x0000eee2u, 0x0003003eu, 0x00005f6eu, 0x000060dfu, 0x0008000cu, 0x00000009u, 0x000060e1u, 0x00000001u, 0x0000002du, 0x000060dfu, 0x00000611u, 0x00000af5u, 0x00050051u, 0x00000008u, 0x000060e2u, 0x000060e1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000060e3u, 0x000060e1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000060e4u, 0x000060e1u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000060e5u, 0x000060e1u, 0x00000003u, 0x0003003eu, 0x000060d7u, 0x000060e1u, 0x0003003eu, 0x00005f69u, 0x000060e1u, 0x00050041u, 0x0000003eu, 0x00005f91u, 0x00005f69u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f92u, 0x00005f91u, 0x0004003du, 0x00000008u, 0x00005f94u, 0x00005f91u, 0x00050080u, 0x00000008u, 0x00005f95u, 0x00005f94u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00005f96u, 0x00005f95u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005f97u, 0x00005f92u, 0x00005f96u, 0x0003003eu, 0x00005f6fu, 0x00005f97u, 0x000300f7u, 0x00005f99u, 0x00000000u, 0x000400fau, 0x00002112u, 0x00005f9au, 0x00005f9bu, 0x000200f8u, 0x00005f9bu, 0x000500c4u, 0x00000008u, 0x00005fa4u, 0x000021b8u, 0x0000021eu, 0x0003003eu, 0x00005f70u, 0x00005fa4u, 0x000200f9u, 0x00005f99u, 0x000200f8u, 0x00005f9au, 0x00050084u, 0x00000008u, 0x00005f9eu, 0x00005f97u, 0x000021b8u, 0x00050080u, 0x00000008u, 0x00005f9fu, 0x00005f9eu, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00005fa0u, 0x00005f9fu, 0x00000218u, 0x0003003eu, 0x00005f70u, 0x00005fa0u, 0x000500c3u, 0x00000008u, 0x00005fa2u, 0x00005fa0u, 0x0000021eu, 0x0003003eu, 0x000020b2u, 0x00005fa2u, 0x000200f9u, 0x00005f99u, 0x000200f8u, 0x00005f99u, 0x000700f5u, 0x00000008u, 0x0000acf3u, 0x00005fa2u, 0x00005f9au, 0x000021b8u, 0x00005f9bu, 0x000700f5u, 0x00000008u, 0x0000acf0u, 0x00005fa0u, 0x00005f9au, 0x00005fa4u, 0x00005f9bu, 0x000300f7u, 0x00005fa6u, 0x00000000u, 0x000400fau, 0x00002115u, 0x00005fa7u, 0x00005fa8u, 0x000200f8u, 0x00005fa8u, 0x00050080u, 0x00000008u, 0x00005facu, 0x00005f97u, 0x0000a106u, 0x0003003eu, 0x00005f6fu, 0x00005facu, 0x000200f9u, 0x00005fa6u, 0x000200f8u, 0x00005fa7u, 0x0003003eu, 0x00005f6fu, 0x0000acf0u, 0x000200f9u, 0x00005fa6u, 0x000200f8u, 0x00005fa6u, 0x000700f5u, 0x00000008u, 0x0000acf1u, 0x0000acf0u, 0x00005fa7u, 0x00005facu, 0x00005fa8u, 0x0008000cu, 0x00000008u, 0x00005faeu, 0x00000001u, 0x0000002du, 0x0000acf1u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00005f91u, 0x00005faeu, 0x0004003du, 0x00000009u, 0x00005fb0u, 0x00005f69u, 0x0003003eu, 0x00005f71u, 0x00005fb0u, 0x0003003eu, 0x00002035u, 0x0000acf3u, 0x00050051u, 0x00000008u, 0x00002303u, 0x00005fb0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002304u, 0x00005fb0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002305u, 0x00005fb0u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00002306u, 0x00005fb0u, 0x00000003u, 0x0003003eu, 0x000020a5u, 0x00005fb0u, 0x00050041u, 0x0000003eu, 0x00002308u, 0x000020a5u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00002309u, 0x00002308u, 0x0003003eu, 0x0000209au, 0x00002309u, 0x000200f9u, 0x000022afu, 0x000200f8u, 0x000022b0u, 0x0004003du, 0x00000009u, 0x000022bau, 0x0000203au, 0x0004003du, 0x00000008u, 0x00005c3du, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00005c3eu, 0x00005c3du, 0x00000224u, 0x000500c4u, 0x00000008u, 0x00005c3fu, 0x00005c3eu, 0x00000221u, 0x000500c5u, 0x00000008u, 0x00005c40u, 0x00005c3fu, 0x0000037du, 0x0003003eu, 0x00005c3cu, 0x00005c40u, 0x000d0050u, 0x000001cdu, 0x000022bfu, 0x00002889u, 0x0000288eu, 0x00002893u, 0x00002898u, 0x000022bau, 0x00000611u, 0x000093d0u, 0x0000a61cu, 0x0000a6c9u, 0x00005c40u, 0x0003003eu, 0x00007796u, 0x00002889u, 0x0003003eu, 0x00007797u, 0x0000288eu, 0x0003003eu, 0x00007798u, 0x00002893u, 0x0003003eu, 0x00007799u, 0x00002898u, 0x0003003eu, 0x0000779au, 0x000022bau, 0x0003003eu, 0x0000779bu, 0x00000611u, 0x0003003eu, 0x0000779cu, 0x000093d0u, 0x0003003eu, 0x0000779du, 0x0000a61cu, 0x0003003eu, 0x0000779eu, 0x0000a6c9u, 0x0003003eu, 0x0000779fu, 0x00005c40u, 0x0003003eu, 0x000077c0u, 0x00002889u, 0x0003003eu, 0x000077c1u, 0x0000288eu, 0x0003003eu, 0x000077c2u, 0x00002893u, 0x0003003eu, 0x000077c3u, 0x00002898u, 0x0003003eu, 0x000077c4u, 0x000022bau, 0x0003003eu, 0x000077c5u, 0x00000611u, 0x0003003eu, 0x000077c6u, 0x000093d0u, 0x0003003eu, 0x000077c7u, 0x0000a61cu, 0x0003003eu, 0x000077c8u, 0x0000a6c9u, 0x0003003eu, 0x000077c9u, 0x00005c40u, 0x0003003eu, 0x0000209cu, 0x0000237cu, 0x0003003eu, 0x0000209du, 0x00002381u, 0x0003003eu, 0x0000209eu, 0x0000a106u, 0x0003003eu, 0x0000209fu, 0x000021b8u, 0x0003003eu, 0x000020a0u, 0x00002112u, 0x0003003eu, 0x000020a1u, 0x00002115u, 0x0003003eu, 0x000020a2u, 0x00002133u, 0x0003003eu, 0x00006931u, 0x00002889u, 0x0003003eu, 0x00006932u, 0x000022bau, 0x0003003eu, 0x00006933u, 0x00000611u, 0x0003003eu, 0x00006934u, 0x000093d0u, 0x0003003eu, 0x00006935u, 0x0000a61cu, 0x0003003eu, 0x00006936u, 0x00005c40u, 0x00050041u, 0x0000003eu, 0x00005c5cu, 0x0000209cu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005c5du, 0x00005c5cu, 0x0003003eu, 0x00005c43u, 0x00005c5du, 0x00050041u, 0x0000003eu, 0x00005c5eu, 0x0000209du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005c5fu, 0x00005c5eu, 0x0003003eu, 0x00005c44u, 0x00005c5fu, 0x000300f7u, 0x00005c9eu, 0x00000000u, 0x000f00fbu, 0x00005c5du, 0x00005c9fu, 0x00000000u, 0x00005ca0u, 0x00000001u, 0x00005ca1u, 0x00000002u, 0x00005ca2u, 0x00000004u, 0x00005ca3u, 0x00000007u, 0x00005ca4u, 0x00000006u, 0x00005ca5u, 0x000200f8u, 0x00005ca5u, 0x0003003eu, 0x00005c9au, 0x00001935u, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005ca4u, 0x00060050u, 0x0000003cu, 0x00005cb7u, 0x00005c40u, 0x00005c40u, 0x00005c40u, 0x0003003eu, 0x00005c9au, 0x00005cb7u, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005ca3u, 0x0004003du, 0x00000009u, 0x00005cb3u, 0x00006932u, 0x0008004fu, 0x0000003cu, 0x00005cb4u, 0x00005cb3u, 0x00005cb3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c9au, 0x00005cb4u, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005ca2u, 0x0004003du, 0x00000009u, 0x00005cb0u, 0x00006935u, 0x0008004fu, 0x0000003cu, 0x00005cb1u, 0x00005cb0u, 0x00005cb0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c9au, 0x00005cb1u, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005ca1u, 0x0004003du, 0x00000009u, 0x00005cadu, 0x00006934u, 0x0008004fu, 0x0000003cu, 0x00005caeu, 0x00005cadu, 0x00005cadu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c9au, 0x00005caeu, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005ca0u, 0x0004003du, 0x00000009u, 0x00005caau, 0x00006933u, 0x0008004fu, 0x0000003cu, 0x00005cabu, 0x00005caau, 0x00005caau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c9au, 0x00005cabu, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005c9fu, 0x0004003du, 0x00000009u, 0x00005ca7u, 0x00006931u, 0x0008004fu, 0x0000003cu, 0x00005ca8u, 0x00005ca7u, 0x00005ca7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005c9au, 0x00005ca8u, 0x000200f9u, 0x00005c9eu, 0x000200f8u, 0x00005c9eu, 0x001100f5u, 0x0000003cu, 0x0000b393u, 0x00005ca8u, 0x00005c9fu, 0x00005cabu, 0x00005ca0u, 0x00005caeu, 0x00005ca1u, 0x00005cb1u, 0x00005ca2u, 0x00005cb4u, 0x00005ca3u, 0x00005cb7u, 0x00005ca4u, 0x00001935u, 0x00005ca5u, 0x000300f7u, 0x00005cb9u, 0x00000000u, 0x000d00fbu, 0x00005c5fu, 0x00005cbau, 0x00000000u, 0x00005cbbu, 0x00000001u, 0x00005cbcu, 0x00000002u, 0x00005cbdu, 0x00000004u, 0x00005cbeu, 0x00000006u, 0x00005cbfu, 0x000200f8u, 0x00005cbfu, 0x0003003eu, 0x00005c9bu, 0x00001934u, 0x000200f9u, 0x00005cb9u, 0x000200f8u, 0x00005cbeu, 0x00050041u, 0x0000003eu, 0x00006941u, 0x00006932u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cc9u, 0x00006941u, 0x0003003eu, 0x00005c9bu, 0x00005cc9u, 0x000200f9u, 0x00005cb9u, 0x000200f8u, 0x00005cbdu, 0x00050041u, 0x0000003eu, 0x00006940u, 0x00006935u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cc7u, 0x00006940u, 0x0003003eu, 0x00005c9bu, 0x00005cc7u, 0x000200f9u, 0x00005cb9u, 0x000200f8u, 0x00005cbcu, 0x00050041u, 0x0000003eu, 0x0000693fu, 0x00006934u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cc5u, 0x0000693fu, 0x0003003eu, 0x00005c9bu, 0x00005cc5u, 0x000200f9u, 0x00005cb9u, 0x000200f8u, 0x00005cbbu, 0x00050041u, 0x0000003eu, 0x0000693eu, 0x00006933u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cc3u, 0x0000693eu, 0x0003003eu, 0x00005c9bu, 0x00005cc3u, 0x000200f9u, 0x00005cb9u, 0x000200f8u, 0x00005cbau, 0x00050041u, 0x0000003eu, 0x0000693du, 0x00006931u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cc1u, 0x0000693du, 0x0003003eu, 0x00005c9bu, 0x00005cc1u, 0x000200f9u, 0x00005cb9u, 0x000200f8u, 0x00005cb9u, 0x000f00f5u, 0x00000008u, 0x0000b394u, 0x00005cc1u, 0x00005cbau, 0x00005cc3u, 0x00005cbbu, 0x00005cc5u, 0x00005cbcu, 0x00005cc7u, 0x00005cbdu, 0x00005cc9u, 0x00005cbeu, 0x00001934u, 0x00005cbfu, 0x00050051u, 0x00000008u, 0x00005cccu, 0x0000b393u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005ccdu, 0x0000b393u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005cceu, 0x0000b393u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005ccfu, 0x00005cccu, 0x00005ccdu, 0x00005cceu, 0x0000b394u, 0x0003003eu, 0x00005c9cu, 0x00005ccfu, 0x0003003eu, 0x00005c41u, 0x00005ccfu, 0x0003003eu, 0x00006942u, 0x0000288eu, 0x0003003eu, 0x00006943u, 0x000022bau, 0x0003003eu, 0x00006944u, 0x00000611u, 0x0003003eu, 0x00006945u, 0x000093d0u, 0x0003003eu, 0x00006946u, 0x0000a61cu, 0x00050041u, 0x0000003eu, 0x00005c62u, 0x0000209cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005c63u, 0x00005c62u, 0x0003003eu, 0x00005c47u, 0x00005c63u, 0x00050041u, 0x0000003eu, 0x00005c64u, 0x0000209du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005c65u, 0x00005c64u, 0x0003003eu, 0x00005c48u, 0x00005c65u, 0x000300f7u, 0x00005cd4u, 0x00000000u, 0x000d00fbu, 0x00005c63u, 0x00005cd5u, 0x00000000u, 0x00005cd6u, 0x00000001u, 0x00005cd7u, 0x00000002u, 0x00005cd8u, 0x00000004u, 0x00005cd9u, 0x00000007u, 0x00005cdau, 0x000200f8u, 0x00005cdau, 0x00050041u, 0x0000003eu, 0x0000694cu, 0x00006942u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005cebu, 0x0000694cu, 0x000500c4u, 0x00000008u, 0x00005cecu, 0x00005cebu, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x0000694du, 0x00006942u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005ceeu, 0x0000694du, 0x000500c5u, 0x00000008u, 0x00005cefu, 0x00005cecu, 0x00005ceeu, 0x00060050u, 0x0000003cu, 0x00005cf0u, 0x00005cefu, 0x00005cefu, 0x00005cefu, 0x0003003eu, 0x00005cd0u, 0x00005cf0u, 0x000200f9u, 0x00005cd4u, 0x000200f8u, 0x00005cd9u, 0x0004003du, 0x00000009u, 0x00005ce8u, 0x00006943u, 0x0008004fu, 0x0000003cu, 0x00005ce9u, 0x00005ce8u, 0x00005ce8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cd0u, 0x00005ce9u, 0x000200f9u, 0x00005cd4u, 0x000200f8u, 0x00005cd8u, 0x0004003du, 0x00000009u, 0x00005ce5u, 0x00006946u, 0x0008004fu, 0x0000003cu, 0x00005ce6u, 0x00005ce5u, 0x00005ce5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cd0u, 0x00005ce6u, 0x000200f9u, 0x00005cd4u, 0x000200f8u, 0x00005cd7u, 0x0004003du, 0x00000009u, 0x00005ce2u, 0x00006945u, 0x0008004fu, 0x0000003cu, 0x00005ce3u, 0x00005ce2u, 0x00005ce2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cd0u, 0x00005ce3u, 0x000200f9u, 0x00005cd4u, 0x000200f8u, 0x00005cd6u, 0x0004003du, 0x00000009u, 0x00005cdfu, 0x00006944u, 0x0008004fu, 0x0000003cu, 0x00005ce0u, 0x00005cdfu, 0x00005cdfu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cd0u, 0x00005ce0u, 0x000200f9u, 0x00005cd4u, 0x000200f8u, 0x00005cd5u, 0x0004003du, 0x00000009u, 0x00005cdcu, 0x00006942u, 0x0008004fu, 0x0000003cu, 0x00005cddu, 0x00005cdcu, 0x00005cdcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005cd0u, 0x00005cddu, 0x000200f9u, 0x00005cd4u, 0x000200f8u, 0x00005cd4u, 0x000f00f5u, 0x0000003cu, 0x0000b3abu, 0x00005cddu, 0x00005cd5u, 0x00005ce0u, 0x00005cd6u, 0x00005ce3u, 0x00005cd7u, 0x00005ce6u, 0x00005cd8u, 0x00005ce9u, 0x00005cd9u, 0x00005cf0u, 0x00005cdau, 0x000300f7u, 0x00005cf2u, 0x00000000u, 0x000d00fbu, 0x00005c65u, 0x00005cf3u, 0x00000000u, 0x00005cf4u, 0x00000001u, 0x00005cf5u, 0x00000002u, 0x00005cf6u, 0x00000004u, 0x00005cf7u, 0x00000006u, 0x00005cf8u, 0x000200f8u, 0x00005cf8u, 0x0003003eu, 0x00005cd1u, 0x00001934u, 0x000200f9u, 0x00005cf2u, 0x000200f8u, 0x00005cf7u, 0x00050041u, 0x0000003eu, 0x00006952u, 0x00006943u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d02u, 0x00006952u, 0x0003003eu, 0x00005cd1u, 0x00005d02u, 0x000200f9u, 0x00005cf2u, 0x000200f8u, 0x00005cf6u, 0x00050041u, 0x0000003eu, 0x00006951u, 0x00006946u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d00u, 0x00006951u, 0x0003003eu, 0x00005cd1u, 0x00005d00u, 0x000200f9u, 0x00005cf2u, 0x000200f8u, 0x00005cf5u, 0x00050041u, 0x0000003eu, 0x00006950u, 0x00006945u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cfeu, 0x00006950u, 0x0003003eu, 0x00005cd1u, 0x00005cfeu, 0x000200f9u, 0x00005cf2u, 0x000200f8u, 0x00005cf4u, 0x00050041u, 0x0000003eu, 0x0000694fu, 0x00006944u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cfcu, 0x0000694fu, 0x0003003eu, 0x00005cd1u, 0x00005cfcu, 0x000200f9u, 0x00005cf2u, 0x000200f8u, 0x00005cf3u, 0x00050041u, 0x0000003eu, 0x0000694eu, 0x00006942u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005cfau, 0x0000694eu, 0x0003003eu, 0x00005cd1u, 0x00005cfau, 0x000200f9u, 0x00005cf2u, 0x000200f8u, 0x00005cf2u, 0x000f00f5u, 0x00000008u, 0x0000b3acu, 0x00005cfau, 0x00005cf3u, 0x00005cfcu, 0x00005cf4u, 0x00005cfeu, 0x00005cf5u, 0x00005d00u, 0x00005cf6u, 0x00005d02u, 0x00005cf7u, 0x00001934u, 0x00005cf8u, 0x00050051u, 0x00000008u, 0x00005d05u, 0x0000b3abu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d06u, 0x0000b3abu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d07u, 0x0000b3abu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005d08u, 0x00005d05u, 0x00005d06u, 0x00005d07u, 0x0000b3acu, 0x0003003eu, 0x00005cd2u, 0x00005d08u, 0x0003003eu, 0x00005c45u, 0x00005d08u, 0x0003003eu, 0x00006953u, 0x00002893u, 0x0003003eu, 0x00006954u, 0x000022bau, 0x0003003eu, 0x00006955u, 0x00000611u, 0x0003003eu, 0x00006956u, 0x000093d0u, 0x0003003eu, 0x00006957u, 0x0000a61cu, 0x0003003eu, 0x00006958u, 0x0000a6c9u, 0x00050041u, 0x0000003eu, 0x00005c68u, 0x0000209cu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005c69u, 0x00005c68u, 0x0003003eu, 0x00005c4bu, 0x00005c69u, 0x00050041u, 0x0000003eu, 0x00005c6au, 0x0000209du, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005c6bu, 0x00005c6au, 0x0003003eu, 0x00005c4cu, 0x00005c6bu, 0x000300f7u, 0x00005d0du, 0x00000000u, 0x001700fbu, 0x00005c69u, 0x00005d0eu, 0x00000000u, 0x00005d0fu, 0x00000007u, 0x00005d10u, 0x00000001u, 0x00005d11u, 0x00000002u, 0x00005d12u, 0x00000004u, 0x00005d13u, 0x00000008u, 0x00005d14u, 0x00000009u, 0x00005d15u, 0x0000000bu, 0x00005d16u, 0x0000000du, 0x00005d17u, 0x0000000fu, 0x00005d18u, 0x000200f8u, 0x00005d18u, 0x00050041u, 0x0000003eu, 0x0000695fu, 0x00006953u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005d38u, 0x0000695fu, 0x000500c4u, 0x00000008u, 0x00005d39u, 0x00005d38u, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x00006960u, 0x00006953u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005d3bu, 0x00006960u, 0x000500c5u, 0x00000008u, 0x00005d3cu, 0x00005d39u, 0x00005d3bu, 0x00060050u, 0x0000003cu, 0x00005d3du, 0x00005d3cu, 0x00005d3cu, 0x00005d3cu, 0x0003003eu, 0x00005d09u, 0x00005d3du, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d17u, 0x00060050u, 0x0000003cu, 0x00005d36u, 0x0000a6c9u, 0x0000a6c9u, 0x0000a6c9u, 0x0003003eu, 0x00005d09u, 0x00005d36u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d16u, 0x0004003du, 0x00000009u, 0x00005d32u, 0x00006954u, 0x0008004fu, 0x0000003cu, 0x00005d33u, 0x00005d32u, 0x00005d32u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005d09u, 0x00005d33u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d15u, 0x0004003du, 0x00000009u, 0x00005d2fu, 0x00006957u, 0x0008004fu, 0x0000003cu, 0x00005d30u, 0x00005d2fu, 0x00005d2fu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005d09u, 0x00005d30u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d14u, 0x0004003du, 0x00000009u, 0x00005d2cu, 0x00006956u, 0x0008004fu, 0x0000003cu, 0x00005d2du, 0x00005d2cu, 0x00005d2cu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005d09u, 0x00005d2du, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d13u, 0x0004003du, 0x00000009u, 0x00005d29u, 0x00006954u, 0x0008004fu, 0x0000003cu, 0x00005d2au, 0x00005d29u, 0x00005d29u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d09u, 0x00005d2au, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d12u, 0x0004003du, 0x00000009u, 0x00005d26u, 0x00006957u, 0x0008004fu, 0x0000003cu, 0x00005d27u, 0x00005d26u, 0x00005d26u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d09u, 0x00005d27u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d11u, 0x0004003du, 0x00000009u, 0x00005d23u, 0x00006956u, 0x0008004fu, 0x0000003cu, 0x00005d24u, 0x00005d23u, 0x00005d23u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d09u, 0x00005d24u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d10u, 0x0003003eu, 0x00005d09u, 0x00000941u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d0fu, 0x0003003eu, 0x00005d09u, 0x00000941u, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d0eu, 0x0004003du, 0x00000009u, 0x00005d1au, 0x00006953u, 0x0008004fu, 0x0000003cu, 0x00005d1bu, 0x00005d1au, 0x00005d1au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d09u, 0x00005d1bu, 0x000200f9u, 0x00005d0du, 0x000200f8u, 0x00005d0du, 0x001900f5u, 0x0000003cu, 0x0000b3c4u, 0x00005d1bu, 0x00005d0eu, 0x00000941u, 0x00005d0fu, 0x00000941u, 0x00005d10u, 0x00005d24u, 0x00005d11u, 0x00005d27u, 0x00005d12u, 0x00005d2au, 0x00005d13u, 0x00005d2du, 0x00005d14u, 0x00005d30u, 0x00005d15u, 0x00005d33u, 0x00005d16u, 0x00005d36u, 0x00005d17u, 0x00005d3du, 0x00005d18u, 0x000300f7u, 0x00005d3fu, 0x00000000u, 0x000b00fbu, 0x00005c6bu, 0x00005d40u, 0x00000000u, 0x00005d41u, 0x00000001u, 0x00005d42u, 0x00000002u, 0x00005d43u, 0x00000004u, 0x00005d44u, 0x000200f8u, 0x00005d44u, 0x00050041u, 0x0000003eu, 0x00006964u, 0x00006954u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d4eu, 0x00006964u, 0x0003003eu, 0x00005d0au, 0x00005d4eu, 0x000200f9u, 0x00005d3fu, 0x000200f8u, 0x00005d43u, 0x00050041u, 0x0000003eu, 0x00006963u, 0x00006957u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d4cu, 0x00006963u, 0x0003003eu, 0x00005d0au, 0x00005d4cu, 0x000200f9u, 0x00005d3fu, 0x000200f8u, 0x00005d42u, 0x00050041u, 0x0000003eu, 0x00006962u, 0x00006956u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d4au, 0x00006962u, 0x0003003eu, 0x00005d0au, 0x00005d4au, 0x000200f9u, 0x00005d3fu, 0x000200f8u, 0x00005d41u, 0x0003003eu, 0x00005d0au, 0x0000a6c9u, 0x000200f9u, 0x00005d3fu, 0x000200f8u, 0x00005d40u, 0x00050041u, 0x0000003eu, 0x00006961u, 0x00006953u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d46u, 0x00006961u, 0x0003003eu, 0x00005d0au, 0x00005d46u, 0x000200f9u, 0x00005d3fu, 0x000200f8u, 0x00005d3fu, 0x000d00f5u, 0x00000008u, 0x0000b3c5u, 0x00005d46u, 0x00005d40u, 0x0000a6c9u, 0x00005d41u, 0x00005d4au, 0x00005d42u, 0x00005d4cu, 0x00005d43u, 0x00005d4eu, 0x00005d44u, 0x00050051u, 0x00000008u, 0x00005d51u, 0x0000b3c4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d52u, 0x0000b3c4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d53u, 0x0000b3c4u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005d54u, 0x00005d51u, 0x00005d52u, 0x00005d53u, 0x0000b3c5u, 0x0003003eu, 0x00005d0bu, 0x00005d54u, 0x0003003eu, 0x00005c49u, 0x00005d54u, 0x0003003eu, 0x00006965u, 0x00002898u, 0x0003003eu, 0x00006966u, 0x000022bau, 0x0003003eu, 0x00006967u, 0x00000611u, 0x0003003eu, 0x00006968u, 0x000093d0u, 0x0003003eu, 0x00006969u, 0x0000a61cu, 0x00050041u, 0x0000003eu, 0x00005c6eu, 0x0000209cu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005c6fu, 0x00005c6eu, 0x0003003eu, 0x00005c4fu, 0x00005c6fu, 0x00050041u, 0x0000003eu, 0x00005c70u, 0x0000209du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005c71u, 0x00005c70u, 0x0003003eu, 0x00005c50u, 0x00005c71u, 0x000300f7u, 0x00005d59u, 0x00000000u, 0x000d00fbu, 0x00005c6fu, 0x00005d5au, 0x00000000u, 0x00005d5bu, 0x00000001u, 0x00005d5cu, 0x00000002u, 0x00005d5du, 0x00000004u, 0x00005d5eu, 0x00000006u, 0x00005d5fu, 0x000200f8u, 0x00005d5fu, 0x0003003eu, 0x00005d55u, 0x00001935u, 0x000200f9u, 0x00005d59u, 0x000200f8u, 0x00005d5eu, 0x0004003du, 0x00000009u, 0x00005d6du, 0x00006966u, 0x0008004fu, 0x0000003cu, 0x00005d6eu, 0x00005d6du, 0x00005d6du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d55u, 0x00005d6eu, 0x000200f9u, 0x00005d59u, 0x000200f8u, 0x00005d5du, 0x0004003du, 0x00000009u, 0x00005d6au, 0x00006969u, 0x0008004fu, 0x0000003cu, 0x00005d6bu, 0x00005d6au, 0x00005d6au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d55u, 0x00005d6bu, 0x000200f9u, 0x00005d59u, 0x000200f8u, 0x00005d5cu, 0x0004003du, 0x00000009u, 0x00005d67u, 0x00006968u, 0x0008004fu, 0x0000003cu, 0x00005d68u, 0x00005d67u, 0x00005d67u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d55u, 0x00005d68u, 0x000200f9u, 0x00005d59u, 0x000200f8u, 0x00005d5bu, 0x0004003du, 0x00000009u, 0x00005d64u, 0x00006967u, 0x0008004fu, 0x0000003cu, 0x00005d65u, 0x00005d64u, 0x00005d64u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d55u, 0x00005d65u, 0x000200f9u, 0x00005d59u, 0x000200f8u, 0x00005d5au, 0x0004003du, 0x00000009u, 0x00005d61u, 0x00006965u, 0x0008004fu, 0x0000003cu, 0x00005d62u, 0x00005d61u, 0x00005d61u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005d55u, 0x00005d62u, 0x000200f9u, 0x00005d59u, 0x000200f8u, 0x00005d59u, 0x000f00f5u, 0x0000003cu, 0x0000b3dcu, 0x00005d62u, 0x00005d5au, 0x00005d65u, 0x00005d5bu, 0x00005d68u, 0x00005d5cu, 0x00005d6bu, 0x00005d5du, 0x00005d6eu, 0x00005d5eu, 0x00001935u, 0x00005d5fu, 0x000300f7u, 0x00005d70u, 0x00000000u, 0x000d00fbu, 0x00005c71u, 0x00005d71u, 0x00000000u, 0x00005d72u, 0x00000001u, 0x00005d73u, 0x00000002u, 0x00005d74u, 0x00000004u, 0x00005d75u, 0x00000006u, 0x00005d76u, 0x000200f8u, 0x00005d76u, 0x0003003eu, 0x00005d56u, 0x00001934u, 0x000200f9u, 0x00005d70u, 0x000200f8u, 0x00005d75u, 0x00050041u, 0x0000003eu, 0x00006973u, 0x00006966u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d80u, 0x00006973u, 0x0003003eu, 0x00005d56u, 0x00005d80u, 0x000200f9u, 0x00005d70u, 0x000200f8u, 0x00005d74u, 0x00050041u, 0x0000003eu, 0x00006972u, 0x00006969u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d7eu, 0x00006972u, 0x0003003eu, 0x00005d56u, 0x00005d7eu, 0x000200f9u, 0x00005d70u, 0x000200f8u, 0x00005d73u, 0x00050041u, 0x0000003eu, 0x00006971u, 0x00006968u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d7cu, 0x00006971u, 0x0003003eu, 0x00005d56u, 0x00005d7cu, 0x000200f9u, 0x00005d70u, 0x000200f8u, 0x00005d72u, 0x00050041u, 0x0000003eu, 0x00006970u, 0x00006967u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d7au, 0x00006970u, 0x0003003eu, 0x00005d56u, 0x00005d7au, 0x000200f9u, 0x00005d70u, 0x000200f8u, 0x00005d71u, 0x00050041u, 0x0000003eu, 0x0000696fu, 0x00006965u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005d78u, 0x0000696fu, 0x0003003eu, 0x00005d56u, 0x00005d78u, 0x000200f9u, 0x00005d70u, 0x000200f8u, 0x00005d70u, 0x000f00f5u, 0x00000008u, 0x0000b3ddu, 0x00005d78u, 0x00005d71u, 0x00005d7au, 0x00005d72u, 0x00005d7cu, 0x00005d73u, 0x00005d7eu, 0x00005d74u, 0x00005d80u, 0x00005d75u, 0x00001934u, 0x00005d76u, 0x00050051u, 0x00000008u, 0x00005d83u, 0x0000b3dcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005d84u, 0x0000b3dcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005d85u, 0x0000b3dcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005d86u, 0x00005d83u, 0x00005d84u, 0x00005d85u, 0x0000b3ddu, 0x0003003eu, 0x00005d57u, 0x00005d86u, 0x0003003eu, 0x00005c4du, 0x00005d86u, 0x0003003eu, 0x00005c52u, 0x00005ccfu, 0x0003003eu, 0x00005c53u, 0x00005d08u, 0x0003003eu, 0x00005c54u, 0x00005d54u, 0x0003003eu, 0x00005c55u, 0x00005d86u, 0x000600cau, 0x00000009u, 0x00005d8du, 0x00005d54u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005c54u, 0x00005d8du, 0x0003003eu, 0x00005d87u, 0x00005ccfu, 0x00050082u, 0x00000009u, 0x00005daeu, 0x00005ccfu, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x00005dafu, 0x00005daeu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005db1u, 0x00005dafu, 0x0000eee2u, 0x0003003eu, 0x00005dabu, 0x00005db1u, 0x0003003eu, 0x00005c52u, 0x00005db1u, 0x0003003eu, 0x00005d88u, 0x00005d08u, 0x00050082u, 0x00000009u, 0x00005db5u, 0x00005d08u, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x00005db6u, 0x00005db5u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005db8u, 0x00005db6u, 0x0000eee2u, 0x0003003eu, 0x00005db2u, 0x00005db8u, 0x0003003eu, 0x00005c53u, 0x00005db8u, 0x0003003eu, 0x00005d89u, 0x00005d86u, 0x00050082u, 0x00000009u, 0x00005dbcu, 0x00005d86u, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x00005dbdu, 0x00005dbcu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005dbfu, 0x00005dbdu, 0x0000eee2u, 0x0003003eu, 0x00005db9u, 0x00005dbfu, 0x0003003eu, 0x00005c55u, 0x00005dbfu, 0x00050082u, 0x00000009u, 0x00005d96u, 0x00005db1u, 0x00005db8u, 0x00050084u, 0x00000009u, 0x00005d98u, 0x00005d96u, 0x00005d8du, 0x0003003eu, 0x00005d8au, 0x00005d98u, 0x00050080u, 0x00000009u, 0x00005d9bu, 0x00005d98u, 0x0000eee2u, 0x0003003eu, 0x00005d8au, 0x00005d9bu, 0x000500c3u, 0x00000009u, 0x00005d9eu, 0x00005d9bu, 0x0000eeedu, 0x00050051u, 0x00000008u, 0x00005d9fu, 0x00005d9eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005da0u, 0x00005d9eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005da1u, 0x00005d9eu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005da2u, 0x00005d9eu, 0x00000003u, 0x00050051u, 0x00000008u, 0x00005da5u, 0x00005dbfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005da6u, 0x00005dbfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005da7u, 0x00005dbfu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005da8u, 0x00005dbfu, 0x00000003u, 0x00050080u, 0x00000009u, 0x00005daau, 0x00005d9eu, 0x00005dbfu, 0x0003003eu, 0x00005d8bu, 0x00005daau, 0x0003003eu, 0x00005c51u, 0x00005daau, 0x000300f7u, 0x00005c79u, 0x00000000u, 0x000400fau, 0x00002133u, 0x00005c7au, 0x00005c7bu, 0x000200f8u, 0x00005c7bu, 0x0003003eu, 0x000020a3u, 0x00000203u, 0x000200f9u, 0x00005c79u, 0x000200f8u, 0x00005c7au, 0x00050041u, 0x0000003eu, 0x00005c7cu, 0x00005c51u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005c7du, 0x00005c7cu, 0x0003003eu, 0x00005c57u, 0x00005c7du, 0x00050082u, 0x00000008u, 0x00005dc2u, 0x00005c7du, 0x00000623u, 0x000600cau, 0x00000008u, 0x00005dc3u, 0x00005dc2u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000008u, 0x00005dc4u, 0x00005dc3u, 0x00000623u, 0x0008000cu, 0x00000008u, 0x00005dc5u, 0x00000001u, 0x0000002du, 0x00005dc4u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00005dc0u, 0x00005dc5u, 0x0003003eu, 0x00005c56u, 0x00005dc5u, 0x00050080u, 0x00000008u, 0x00005c81u, 0x00005dc5u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00005c82u, 0x00005c81u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005c83u, 0x00005dc5u, 0x00005c82u, 0x0003003eu, 0x00005c58u, 0x00005c83u, 0x000300f7u, 0x00005c85u, 0x00000000u, 0x000400fau, 0x00002115u, 0x00005c86u, 0x00005c87u, 0x000200f8u, 0x00005c87u, 0x00050080u, 0x00000008u, 0x00005c96u, 0x00005c83u, 0x0000a106u, 0x0003003eu, 0x00005c58u, 0x00005c96u, 0x000200f9u, 0x00005c85u, 0x000200f8u, 0x00005c86u, 0x000300f7u, 0x00005c89u, 0x00000000u, 0x000400fau, 0x00002112u, 0x00005c8au, 0x00005c8bu, 0x000200f8u, 0x00005c8bu, 0x000500c4u, 0x00000008u, 0x00005c92u, 0x000021b8u, 0x0000021eu, 0x0003003eu, 0x00005c59u, 0x00005c92u, 0x000200f9u, 0x00005c89u, 0x000200f8u, 0x00005c8au, 0x00050084u, 0x00000008u, 0x00005c8eu, 0x00005c83u, 0x000021b8u, 0x00050080u, 0x00000008u, 0x00005c8fu, 0x00005c8eu, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00005c90u, 0x00005c8fu, 0x00000218u, 0x0003003eu, 0x00005c59u, 0x00005c90u, 0x000200f9u, 0x00005c89u, 0x000200f8u, 0x00005c89u, 0x000700f5u, 0x00000008u, 0x0000b412u, 0x00005c90u, 0x00005c8au, 0x00005c92u, 0x00005c8bu, 0x0003003eu, 0x00005c58u, 0x0000b412u, 0x000200f9u, 0x00005c85u, 0x000200f8u, 0x00005c85u, 0x000700f5u, 0x00000008u, 0x0000b413u, 0x0000b412u, 0x00005c89u, 0x00005c96u, 0x00005c87u, 0x0008000cu, 0x00000008u, 0x00005c98u, 0x00000001u, 0x0000002du, 0x0000b413u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x000020a3u, 0x00005c98u, 0x000200f9u, 0x00005c79u, 0x000200f8u, 0x00005c79u, 0x000700f5u, 0x00000008u, 0x0000b414u, 0x00005c98u, 0x00005c85u, 0x00000203u, 0x00005c7bu, 0x0004003du, 0x00000009u, 0x00005c99u, 0x00005c51u, 0x0003003eu, 0x00005c5au, 0x00005c99u, 0x0003003eu, 0x0000209au, 0x0000b414u, 0x0003003eu, 0x0000779bu, 0x00005c99u, 0x0003003eu, 0x00007796u, 0x0000289du, 0x0003003eu, 0x00007797u, 0x000028a2u, 0x0003003eu, 0x00007798u, 0x000028a7u, 0x0003003eu, 0x00007799u, 0x000028acu, 0x0003003eu, 0x000020a4u, 0x000093d0u, 0x0003003eu, 0x0000779cu, 0x0000a61cu, 0x0003003eu, 0x0000779du, 0x000093d0u, 0x000d0050u, 0x000001cdu, 0x000077bfu, 0x0000289du, 0x000028a2u, 0x000028a7u, 0x000028acu, 0x000022bau, 0x00005c99u, 0x0000a61cu, 0x000093d0u, 0x0000a6c9u, 0x00005c40u, 0x0003003eu, 0x00007800u, 0x0000289du, 0x0003003eu, 0x00007801u, 0x000028a2u, 0x0003003eu, 0x00007802u, 0x000028a7u, 0x0003003eu, 0x00007803u, 0x000028acu, 0x0003003eu, 0x00007804u, 0x000022bau, 0x0003003eu, 0x00007805u, 0x00005c99u, 0x0003003eu, 0x00007806u, 0x0000a61cu, 0x0003003eu, 0x00007807u, 0x000093d0u, 0x0003003eu, 0x00007808u, 0x0000a6c9u, 0x0003003eu, 0x00007809u, 0x00005c40u, 0x0003003eu, 0x000020a7u, 0x00002386u, 0x0003003eu, 0x000020a8u, 0x0000238bu, 0x0003003eu, 0x000020a9u, 0x0000a106u, 0x0003003eu, 0x000020aau, 0x000021b8u, 0x0003003eu, 0x000020abu, 0x00002112u, 0x0003003eu, 0x000020acu, 0x00002115u, 0x0003003eu, 0x000068eeu, 0x0000289du, 0x0003003eu, 0x000068efu, 0x000022bau, 0x0003003eu, 0x000068f0u, 0x00005c99u, 0x0003003eu, 0x000068f1u, 0x0000a61cu, 0x0003003eu, 0x000068f2u, 0x000093d0u, 0x0003003eu, 0x000068f3u, 0x00005c40u, 0x00050041u, 0x0000003eu, 0x00005de0u, 0x000020a7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005de1u, 0x00005de0u, 0x0003003eu, 0x00005dc8u, 0x00005de1u, 0x00050041u, 0x0000003eu, 0x00005de2u, 0x000020a8u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00005de3u, 0x00005de2u, 0x0003003eu, 0x00005dc9u, 0x00005de3u, 0x000300f7u, 0x00005e22u, 0x00000000u, 0x000f00fbu, 0x00005de1u, 0x00005e23u, 0x00000000u, 0x00005e24u, 0x00000001u, 0x00005e25u, 0x00000002u, 0x00005e26u, 0x00000004u, 0x00005e27u, 0x00000007u, 0x00005e28u, 0x00000006u, 0x00005e29u, 0x000200f8u, 0x00005e29u, 0x0003003eu, 0x00005e1eu, 0x00001935u, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e28u, 0x00060050u, 0x0000003cu, 0x00005e3bu, 0x00005c40u, 0x00005c40u, 0x00005c40u, 0x0003003eu, 0x00005e1eu, 0x00005e3bu, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e27u, 0x0004003du, 0x00000009u, 0x00005e37u, 0x000068efu, 0x0008004fu, 0x0000003cu, 0x00005e38u, 0x00005e37u, 0x00005e37u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e1eu, 0x00005e38u, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e26u, 0x0004003du, 0x00000009u, 0x00005e34u, 0x000068f2u, 0x0008004fu, 0x0000003cu, 0x00005e35u, 0x00005e34u, 0x00005e34u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e1eu, 0x00005e35u, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e25u, 0x0004003du, 0x00000009u, 0x00005e31u, 0x000068f1u, 0x0008004fu, 0x0000003cu, 0x00005e32u, 0x00005e31u, 0x00005e31u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e1eu, 0x00005e32u, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e24u, 0x0004003du, 0x00000009u, 0x00005e2eu, 0x000068f0u, 0x0008004fu, 0x0000003cu, 0x00005e2fu, 0x00005e2eu, 0x00005e2eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e1eu, 0x00005e2fu, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e23u, 0x0004003du, 0x00000009u, 0x00005e2bu, 0x000068eeu, 0x0008004fu, 0x0000003cu, 0x00005e2cu, 0x00005e2bu, 0x00005e2bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e1eu, 0x00005e2cu, 0x000200f9u, 0x00005e22u, 0x000200f8u, 0x00005e22u, 0x001100f5u, 0x0000003cu, 0x0000b4bcu, 0x00005e2cu, 0x00005e23u, 0x00005e2fu, 0x00005e24u, 0x00005e32u, 0x00005e25u, 0x00005e35u, 0x00005e26u, 0x00005e38u, 0x00005e27u, 0x00005e3bu, 0x00005e28u, 0x00001935u, 0x00005e29u, 0x000300f7u, 0x00005e3du, 0x00000000u, 0x000d00fbu, 0x00005de3u, 0x00005e3eu, 0x00000000u, 0x00005e3fu, 0x00000001u, 0x00005e40u, 0x00000002u, 0x00005e41u, 0x00000004u, 0x00005e42u, 0x00000006u, 0x00005e43u, 0x000200f8u, 0x00005e43u, 0x0003003eu, 0x00005e1fu, 0x00001934u, 0x000200f9u, 0x00005e3du, 0x000200f8u, 0x00005e42u, 0x00050041u, 0x0000003eu, 0x000068feu, 0x000068efu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e4du, 0x000068feu, 0x0003003eu, 0x00005e1fu, 0x00005e4du, 0x000200f9u, 0x00005e3du, 0x000200f8u, 0x00005e41u, 0x00050041u, 0x0000003eu, 0x000068fdu, 0x000068f2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e4bu, 0x000068fdu, 0x0003003eu, 0x00005e1fu, 0x00005e4bu, 0x000200f9u, 0x00005e3du, 0x000200f8u, 0x00005e40u, 0x00050041u, 0x0000003eu, 0x000068fcu, 0x000068f1u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e49u, 0x000068fcu, 0x0003003eu, 0x00005e1fu, 0x00005e49u, 0x000200f9u, 0x00005e3du, 0x000200f8u, 0x00005e3fu, 0x00050041u, 0x0000003eu, 0x000068fbu, 0x000068f0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e47u, 0x000068fbu, 0x0003003eu, 0x00005e1fu, 0x00005e47u, 0x000200f9u, 0x00005e3du, 0x000200f8u, 0x00005e3eu, 0x00050041u, 0x0000003eu, 0x000068fau, 0x000068eeu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e45u, 0x000068fau, 0x0003003eu, 0x00005e1fu, 0x00005e45u, 0x000200f9u, 0x00005e3du, 0x000200f8u, 0x00005e3du, 0x000f00f5u, 0x00000008u, 0x0000b4bdu, 0x00005e45u, 0x00005e3eu, 0x00005e47u, 0x00005e3fu, 0x00005e49u, 0x00005e40u, 0x00005e4bu, 0x00005e41u, 0x00005e4du, 0x00005e42u, 0x00001934u, 0x00005e43u, 0x00050051u, 0x00000008u, 0x00005e50u, 0x0000b4bcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005e51u, 0x0000b4bcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005e52u, 0x0000b4bcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005e53u, 0x00005e50u, 0x00005e51u, 0x00005e52u, 0x0000b4bdu, 0x0003003eu, 0x00005e20u, 0x00005e53u, 0x0003003eu, 0x00005dc6u, 0x00005e53u, 0x0003003eu, 0x000068ffu, 0x000028a2u, 0x0003003eu, 0x00006900u, 0x000022bau, 0x0003003eu, 0x00006901u, 0x00005c99u, 0x0003003eu, 0x00006902u, 0x0000a61cu, 0x0003003eu, 0x00006903u, 0x000093d0u, 0x00050041u, 0x0000003eu, 0x00005de6u, 0x000020a7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005de7u, 0x00005de6u, 0x0003003eu, 0x00005dccu, 0x00005de7u, 0x00050041u, 0x0000003eu, 0x00005de8u, 0x000020a8u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005de9u, 0x00005de8u, 0x0003003eu, 0x00005dcdu, 0x00005de9u, 0x000300f7u, 0x00005e58u, 0x00000000u, 0x000d00fbu, 0x00005de7u, 0x00005e59u, 0x00000000u, 0x00005e5au, 0x00000001u, 0x00005e5bu, 0x00000002u, 0x00005e5cu, 0x00000004u, 0x00005e5du, 0x00000007u, 0x00005e5eu, 0x000200f8u, 0x00005e5eu, 0x00050041u, 0x0000003eu, 0x00006909u, 0x000068ffu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005e6fu, 0x00006909u, 0x000500c4u, 0x00000008u, 0x00005e70u, 0x00005e6fu, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x0000690au, 0x000068ffu, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005e72u, 0x0000690au, 0x000500c5u, 0x00000008u, 0x00005e73u, 0x00005e70u, 0x00005e72u, 0x00060050u, 0x0000003cu, 0x00005e74u, 0x00005e73u, 0x00005e73u, 0x00005e73u, 0x0003003eu, 0x00005e54u, 0x00005e74u, 0x000200f9u, 0x00005e58u, 0x000200f8u, 0x00005e5du, 0x0004003du, 0x00000009u, 0x00005e6cu, 0x00006900u, 0x0008004fu, 0x0000003cu, 0x00005e6du, 0x00005e6cu, 0x00005e6cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e54u, 0x00005e6du, 0x000200f9u, 0x00005e58u, 0x000200f8u, 0x00005e5cu, 0x0004003du, 0x00000009u, 0x00005e69u, 0x00006903u, 0x0008004fu, 0x0000003cu, 0x00005e6au, 0x00005e69u, 0x00005e69u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e54u, 0x00005e6au, 0x000200f9u, 0x00005e58u, 0x000200f8u, 0x00005e5bu, 0x0004003du, 0x00000009u, 0x00005e66u, 0x00006902u, 0x0008004fu, 0x0000003cu, 0x00005e67u, 0x00005e66u, 0x00005e66u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e54u, 0x00005e67u, 0x000200f9u, 0x00005e58u, 0x000200f8u, 0x00005e5au, 0x0004003du, 0x00000009u, 0x00005e63u, 0x00006901u, 0x0008004fu, 0x0000003cu, 0x00005e64u, 0x00005e63u, 0x00005e63u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e54u, 0x00005e64u, 0x000200f9u, 0x00005e58u, 0x000200f8u, 0x00005e59u, 0x0004003du, 0x00000009u, 0x00005e60u, 0x000068ffu, 0x0008004fu, 0x0000003cu, 0x00005e61u, 0x00005e60u, 0x00005e60u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e54u, 0x00005e61u, 0x000200f9u, 0x00005e58u, 0x000200f8u, 0x00005e58u, 0x000f00f5u, 0x0000003cu, 0x0000b4d4u, 0x00005e61u, 0x00005e59u, 0x00005e64u, 0x00005e5au, 0x00005e67u, 0x00005e5bu, 0x00005e6au, 0x00005e5cu, 0x00005e6du, 0x00005e5du, 0x00005e74u, 0x00005e5eu, 0x000300f7u, 0x00005e76u, 0x00000000u, 0x000d00fbu, 0x00005de9u, 0x00005e77u, 0x00000000u, 0x00005e78u, 0x00000001u, 0x00005e79u, 0x00000002u, 0x00005e7au, 0x00000004u, 0x00005e7bu, 0x00000006u, 0x00005e7cu, 0x000200f8u, 0x00005e7cu, 0x0003003eu, 0x00005e55u, 0x00001934u, 0x000200f9u, 0x00005e76u, 0x000200f8u, 0x00005e7bu, 0x00050041u, 0x0000003eu, 0x0000690fu, 0x00006900u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e86u, 0x0000690fu, 0x0003003eu, 0x00005e55u, 0x00005e86u, 0x000200f9u, 0x00005e76u, 0x000200f8u, 0x00005e7au, 0x00050041u, 0x0000003eu, 0x0000690eu, 0x00006903u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e84u, 0x0000690eu, 0x0003003eu, 0x00005e55u, 0x00005e84u, 0x000200f9u, 0x00005e76u, 0x000200f8u, 0x00005e79u, 0x00050041u, 0x0000003eu, 0x0000690du, 0x00006902u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e82u, 0x0000690du, 0x0003003eu, 0x00005e55u, 0x00005e82u, 0x000200f9u, 0x00005e76u, 0x000200f8u, 0x00005e78u, 0x00050041u, 0x0000003eu, 0x0000690cu, 0x00006901u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e80u, 0x0000690cu, 0x0003003eu, 0x00005e55u, 0x00005e80u, 0x000200f9u, 0x00005e76u, 0x000200f8u, 0x00005e77u, 0x00050041u, 0x0000003eu, 0x0000690bu, 0x000068ffu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005e7eu, 0x0000690bu, 0x0003003eu, 0x00005e55u, 0x00005e7eu, 0x000200f9u, 0x00005e76u, 0x000200f8u, 0x00005e76u, 0x000f00f5u, 0x00000008u, 0x0000b4d5u, 0x00005e7eu, 0x00005e77u, 0x00005e80u, 0x00005e78u, 0x00005e82u, 0x00005e79u, 0x00005e84u, 0x00005e7au, 0x00005e86u, 0x00005e7bu, 0x00001934u, 0x00005e7cu, 0x00050051u, 0x00000008u, 0x00005e89u, 0x0000b4d4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005e8au, 0x0000b4d4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005e8bu, 0x0000b4d4u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005e8cu, 0x00005e89u, 0x00005e8au, 0x00005e8bu, 0x0000b4d5u, 0x0003003eu, 0x00005e56u, 0x00005e8cu, 0x0003003eu, 0x00005dcau, 0x00005e8cu, 0x0003003eu, 0x00006910u, 0x000028a7u, 0x0003003eu, 0x00006911u, 0x000022bau, 0x0003003eu, 0x00006912u, 0x00005c99u, 0x0003003eu, 0x00006913u, 0x0000a61cu, 0x0003003eu, 0x00006914u, 0x000093d0u, 0x0003003eu, 0x00006915u, 0x0000a6c9u, 0x00050041u, 0x0000003eu, 0x00005decu, 0x000020a7u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005dedu, 0x00005decu, 0x0003003eu, 0x00005dd0u, 0x00005dedu, 0x00050041u, 0x0000003eu, 0x00005deeu, 0x000020a8u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005defu, 0x00005deeu, 0x0003003eu, 0x00005dd1u, 0x00005defu, 0x000300f7u, 0x00005e91u, 0x00000000u, 0x001700fbu, 0x00005dedu, 0x00005e92u, 0x00000000u, 0x00005e93u, 0x00000007u, 0x00005e94u, 0x00000001u, 0x00005e95u, 0x00000002u, 0x00005e96u, 0x00000004u, 0x00005e97u, 0x00000008u, 0x00005e98u, 0x00000009u, 0x00005e99u, 0x0000000bu, 0x00005e9au, 0x0000000du, 0x00005e9bu, 0x0000000fu, 0x00005e9cu, 0x000200f8u, 0x00005e9cu, 0x00050041u, 0x0000003eu, 0x0000691cu, 0x00006910u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00005ebcu, 0x0000691cu, 0x000500c4u, 0x00000008u, 0x00005ebdu, 0x00005ebcu, 0x0000025eu, 0x00050041u, 0x0000003eu, 0x0000691du, 0x00006910u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00005ebfu, 0x0000691du, 0x000500c5u, 0x00000008u, 0x00005ec0u, 0x00005ebdu, 0x00005ebfu, 0x00060050u, 0x0000003cu, 0x00005ec1u, 0x00005ec0u, 0x00005ec0u, 0x00005ec0u, 0x0003003eu, 0x00005e8du, 0x00005ec1u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e9bu, 0x00060050u, 0x0000003cu, 0x00005ebau, 0x0000a6c9u, 0x0000a6c9u, 0x0000a6c9u, 0x0003003eu, 0x00005e8du, 0x00005ebau, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e9au, 0x0004003du, 0x00000009u, 0x00005eb6u, 0x00006911u, 0x0008004fu, 0x0000003cu, 0x00005eb7u, 0x00005eb6u, 0x00005eb6u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e8du, 0x00005eb7u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e99u, 0x0004003du, 0x00000009u, 0x00005eb3u, 0x00006914u, 0x0008004fu, 0x0000003cu, 0x00005eb4u, 0x00005eb3u, 0x00005eb3u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e8du, 0x00005eb4u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e98u, 0x0004003du, 0x00000009u, 0x00005eb0u, 0x00006913u, 0x0008004fu, 0x0000003cu, 0x00005eb1u, 0x00005eb0u, 0x00005eb0u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e8du, 0x00005eb1u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e97u, 0x0004003du, 0x00000009u, 0x00005eadu, 0x00006911u, 0x0008004fu, 0x0000003cu, 0x00005eaeu, 0x00005eadu, 0x00005eadu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e8du, 0x00005eaeu, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e96u, 0x0004003du, 0x00000009u, 0x00005eaau, 0x00006914u, 0x0008004fu, 0x0000003cu, 0x00005eabu, 0x00005eaau, 0x00005eaau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e8du, 0x00005eabu, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e95u, 0x0004003du, 0x00000009u, 0x00005ea7u, 0x00006913u, 0x0008004fu, 0x0000003cu, 0x00005ea8u, 0x00005ea7u, 0x00005ea7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e8du, 0x00005ea8u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e94u, 0x0008004fu, 0x0000003cu, 0x00005ea5u, 0x00005c99u, 0x00005c99u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005e8du, 0x00005ea5u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e93u, 0x0008004fu, 0x0000003cu, 0x00005ea2u, 0x00005c99u, 0x00005c99u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e8du, 0x00005ea2u, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e92u, 0x0004003du, 0x00000009u, 0x00005e9eu, 0x00006910u, 0x0008004fu, 0x0000003cu, 0x00005e9fu, 0x00005e9eu, 0x00005e9eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005e8du, 0x00005e9fu, 0x000200f9u, 0x00005e91u, 0x000200f8u, 0x00005e91u, 0x001900f5u, 0x0000003cu, 0x0000b4edu, 0x00005e9fu, 0x00005e92u, 0x00005ea2u, 0x00005e93u, 0x00005ea5u, 0x00005e94u, 0x00005ea8u, 0x00005e95u, 0x00005eabu, 0x00005e96u, 0x00005eaeu, 0x00005e97u, 0x00005eb1u, 0x00005e98u, 0x00005eb4u, 0x00005e99u, 0x00005eb7u, 0x00005e9au, 0x00005ebau, 0x00005e9bu, 0x00005ec1u, 0x00005e9cu, 0x000300f7u, 0x00005ec3u, 0x00000000u, 0x000b00fbu, 0x00005defu, 0x00005ec4u, 0x00000000u, 0x00005ec5u, 0x00000001u, 0x00005ec6u, 0x00000002u, 0x00005ec7u, 0x00000004u, 0x00005ec8u, 0x000200f8u, 0x00005ec8u, 0x00050041u, 0x0000003eu, 0x00006921u, 0x00006911u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ed2u, 0x00006921u, 0x0003003eu, 0x00005e8eu, 0x00005ed2u, 0x000200f9u, 0x00005ec3u, 0x000200f8u, 0x00005ec7u, 0x00050041u, 0x0000003eu, 0x00006920u, 0x00006914u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ed0u, 0x00006920u, 0x0003003eu, 0x00005e8eu, 0x00005ed0u, 0x000200f9u, 0x00005ec3u, 0x000200f8u, 0x00005ec6u, 0x00050041u, 0x0000003eu, 0x0000691fu, 0x00006913u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005eceu, 0x0000691fu, 0x0003003eu, 0x00005e8eu, 0x00005eceu, 0x000200f9u, 0x00005ec3u, 0x000200f8u, 0x00005ec5u, 0x0003003eu, 0x00005e8eu, 0x0000a6c9u, 0x000200f9u, 0x00005ec3u, 0x000200f8u, 0x00005ec4u, 0x00050041u, 0x0000003eu, 0x0000691eu, 0x00006910u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005ecau, 0x0000691eu, 0x0003003eu, 0x00005e8eu, 0x00005ecau, 0x000200f9u, 0x00005ec3u, 0x000200f8u, 0x00005ec3u, 0x000d00f5u, 0x00000008u, 0x0000b4eeu, 0x00005ecau, 0x00005ec4u, 0x0000a6c9u, 0x00005ec5u, 0x00005eceu, 0x00005ec6u, 0x00005ed0u, 0x00005ec7u, 0x00005ed2u, 0x00005ec8u, 0x00050051u, 0x00000008u, 0x00005ed5u, 0x0000b4edu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005ed6u, 0x0000b4edu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005ed7u, 0x0000b4edu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005ed8u, 0x00005ed5u, 0x00005ed6u, 0x00005ed7u, 0x0000b4eeu, 0x0003003eu, 0x00005e8fu, 0x00005ed8u, 0x0003003eu, 0x00005dceu, 0x00005ed8u, 0x0003003eu, 0x00006922u, 0x000028acu, 0x0003003eu, 0x00006923u, 0x000022bau, 0x0003003eu, 0x00006924u, 0x00005c99u, 0x0003003eu, 0x00006925u, 0x0000a61cu, 0x0003003eu, 0x00006926u, 0x000093d0u, 0x00050041u, 0x0000003eu, 0x00005df2u, 0x000020a7u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005df3u, 0x00005df2u, 0x0003003eu, 0x00005dd4u, 0x00005df3u, 0x00050041u, 0x0000003eu, 0x00005df4u, 0x000020a8u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005df5u, 0x00005df4u, 0x0003003eu, 0x00005dd5u, 0x00005df5u, 0x000300f7u, 0x00005eddu, 0x00000000u, 0x000d00fbu, 0x00005df3u, 0x00005edeu, 0x00000000u, 0x00005edfu, 0x00000001u, 0x00005ee0u, 0x00000002u, 0x00005ee1u, 0x00000004u, 0x00005ee2u, 0x00000006u, 0x00005ee3u, 0x000200f8u, 0x00005ee3u, 0x0003003eu, 0x00005ed9u, 0x00001935u, 0x000200f9u, 0x00005eddu, 0x000200f8u, 0x00005ee2u, 0x0004003du, 0x00000009u, 0x00005ef1u, 0x00006923u, 0x0008004fu, 0x0000003cu, 0x00005ef2u, 0x00005ef1u, 0x00005ef1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ed9u, 0x00005ef2u, 0x000200f9u, 0x00005eddu, 0x000200f8u, 0x00005ee1u, 0x0004003du, 0x00000009u, 0x00005eeeu, 0x00006926u, 0x0008004fu, 0x0000003cu, 0x00005eefu, 0x00005eeeu, 0x00005eeeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ed9u, 0x00005eefu, 0x000200f9u, 0x00005eddu, 0x000200f8u, 0x00005ee0u, 0x0004003du, 0x00000009u, 0x00005eebu, 0x00006925u, 0x0008004fu, 0x0000003cu, 0x00005eecu, 0x00005eebu, 0x00005eebu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ed9u, 0x00005eecu, 0x000200f9u, 0x00005eddu, 0x000200f8u, 0x00005edfu, 0x0004003du, 0x00000009u, 0x00005ee8u, 0x00006924u, 0x0008004fu, 0x0000003cu, 0x00005ee9u, 0x00005ee8u, 0x00005ee8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ed9u, 0x00005ee9u, 0x000200f9u, 0x00005eddu, 0x000200f8u, 0x00005edeu, 0x0004003du, 0x00000009u, 0x00005ee5u, 0x00006922u, 0x0008004fu, 0x0000003cu, 0x00005ee6u, 0x00005ee5u, 0x00005ee5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005ed9u, 0x00005ee6u, 0x000200f9u, 0x00005eddu, 0x000200f8u, 0x00005eddu, 0x000f00f5u, 0x0000003cu, 0x0000b505u, 0x00005ee6u, 0x00005edeu, 0x00005ee9u, 0x00005edfu, 0x00005eecu, 0x00005ee0u, 0x00005eefu, 0x00005ee1u, 0x00005ef2u, 0x00005ee2u, 0x00001935u, 0x00005ee3u, 0x000300f7u, 0x00005ef4u, 0x00000000u, 0x000d00fbu, 0x00005df5u, 0x00005ef5u, 0x00000000u, 0x00005ef6u, 0x00000001u, 0x00005ef7u, 0x00000002u, 0x00005ef8u, 0x00000004u, 0x00005ef9u, 0x00000006u, 0x00005efau, 0x000200f8u, 0x00005efau, 0x0003003eu, 0x00005edau, 0x00001934u, 0x000200f9u, 0x00005ef4u, 0x000200f8u, 0x00005ef9u, 0x00050041u, 0x0000003eu, 0x00006930u, 0x00006923u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f04u, 0x00006930u, 0x0003003eu, 0x00005edau, 0x00005f04u, 0x000200f9u, 0x00005ef4u, 0x000200f8u, 0x00005ef8u, 0x00050041u, 0x0000003eu, 0x0000692fu, 0x00006926u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f02u, 0x0000692fu, 0x0003003eu, 0x00005edau, 0x00005f02u, 0x000200f9u, 0x00005ef4u, 0x000200f8u, 0x00005ef7u, 0x00050041u, 0x0000003eu, 0x0000692eu, 0x00006925u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005f00u, 0x0000692eu, 0x0003003eu, 0x00005edau, 0x00005f00u, 0x000200f9u, 0x00005ef4u, 0x000200f8u, 0x00005ef6u, 0x00050041u, 0x0000003eu, 0x0000692du, 0x00006924u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005efeu, 0x0000692du, 0x0003003eu, 0x00005edau, 0x00005efeu, 0x000200f9u, 0x00005ef4u, 0x000200f8u, 0x00005ef5u, 0x00050041u, 0x0000003eu, 0x0000692cu, 0x00006922u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005efcu, 0x0000692cu, 0x0003003eu, 0x00005edau, 0x00005efcu, 0x000200f9u, 0x00005ef4u, 0x000200f8u, 0x00005ef4u, 0x000f00f5u, 0x00000008u, 0x0000b506u, 0x00005efcu, 0x00005ef5u, 0x00005efeu, 0x00005ef6u, 0x00005f00u, 0x00005ef7u, 0x00005f02u, 0x00005ef8u, 0x00005f04u, 0x00005ef9u, 0x00001934u, 0x00005efau, 0x00050051u, 0x00000008u, 0x00005f07u, 0x0000b505u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f08u, 0x0000b505u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f09u, 0x0000b505u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005f0au, 0x00005f07u, 0x00005f08u, 0x00005f09u, 0x0000b506u, 0x0003003eu, 0x00005edbu, 0x00005f0au, 0x0003003eu, 0x00005dd2u, 0x00005f0au, 0x0003003eu, 0x00005dd7u, 0x00005e53u, 0x0003003eu, 0x00005dd8u, 0x00005e8cu, 0x0003003eu, 0x00005dd9u, 0x00005ed8u, 0x0003003eu, 0x00005ddau, 0x00005f0au, 0x000600cau, 0x00000009u, 0x00005f11u, 0x00005ed8u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005dd9u, 0x00005f11u, 0x0003003eu, 0x00005f0bu, 0x00005e53u, 0x00050082u, 0x00000009u, 0x00005f32u, 0x00005e53u, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x00005f33u, 0x00005f32u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005f35u, 0x00005f33u, 0x0000eee2u, 0x0003003eu, 0x00005f2fu, 0x00005f35u, 0x0003003eu, 0x00005dd7u, 0x00005f35u, 0x0003003eu, 0x00005f0cu, 0x00005e8cu, 0x00050082u, 0x00000009u, 0x00005f39u, 0x00005e8cu, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x00005f3au, 0x00005f39u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005f3cu, 0x00005f3au, 0x0000eee2u, 0x0003003eu, 0x00005f36u, 0x00005f3cu, 0x0003003eu, 0x00005dd8u, 0x00005f3cu, 0x0003003eu, 0x00005f0du, 0x00005f0au, 0x00050082u, 0x00000009u, 0x00005f40u, 0x00005f0au, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x00005f41u, 0x00005f40u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x00005f43u, 0x00005f41u, 0x0000eee2u, 0x0003003eu, 0x00005f3du, 0x00005f43u, 0x0003003eu, 0x00005ddau, 0x00005f43u, 0x00050082u, 0x00000009u, 0x00005f1au, 0x00005f35u, 0x00005f3cu, 0x00050084u, 0x00000009u, 0x00005f1cu, 0x00005f1au, 0x00005f11u, 0x0003003eu, 0x00005f0eu, 0x00005f1cu, 0x00050080u, 0x00000009u, 0x00005f1fu, 0x00005f1cu, 0x0000eee2u, 0x0003003eu, 0x00005f0eu, 0x00005f1fu, 0x000500c3u, 0x00000009u, 0x00005f22u, 0x00005f1fu, 0x0000eeedu, 0x00050051u, 0x00000008u, 0x00005f23u, 0x00005f22u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f24u, 0x00005f22u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f25u, 0x00005f22u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005f26u, 0x00005f22u, 0x00000003u, 0x00050051u, 0x00000008u, 0x00005f29u, 0x00005f43u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f2au, 0x00005f43u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f2bu, 0x00005f43u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005f2cu, 0x00005f43u, 0x00000003u, 0x00050080u, 0x00000009u, 0x00005f2eu, 0x00005f22u, 0x00005f43u, 0x0003003eu, 0x00005f0fu, 0x00005f2eu, 0x0003003eu, 0x00005dd6u, 0x00005f2eu, 0x0004003du, 0x00000009u, 0x00005dfcu, 0x00005dd6u, 0x0003003eu, 0x00005ddbu, 0x00005dfcu, 0x00050082u, 0x00000009u, 0x00005f47u, 0x00005dfcu, 0x0000eee2u, 0x0003003eu, 0x00005ddbu, 0x00005f47u, 0x000600cau, 0x00000009u, 0x00005f49u, 0x00005f47u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00005ddbu, 0x00005f49u, 0x00050080u, 0x00000009u, 0x00005f4cu, 0x00005f49u, 0x0000eee2u, 0x0003003eu, 0x00005ddbu, 0x00005f4cu, 0x0008000cu, 0x00000009u, 0x00005f4eu, 0x00000001u, 0x0000002du, 0x00005f4cu, 0x00000611u, 0x00000af5u, 0x00050051u, 0x00000008u, 0x00005f4fu, 0x00005f4eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f50u, 0x00005f4eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f51u, 0x00005f4eu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005f52u, 0x00005f4eu, 0x00000003u, 0x0003003eu, 0x00005f44u, 0x00005f4eu, 0x0003003eu, 0x00005dd6u, 0x00005f4eu, 0x00050041u, 0x0000003eu, 0x00005dfeu, 0x00005dd6u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00005dffu, 0x00005dfeu, 0x0004003du, 0x00000008u, 0x00005e01u, 0x00005dfeu, 0x00050080u, 0x00000008u, 0x00005e02u, 0x00005e01u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00005e03u, 0x00005e02u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00005e04u, 0x00005dffu, 0x00005e03u, 0x0003003eu, 0x00005ddcu, 0x00005e04u, 0x000300f7u, 0x00005e06u, 0x00000000u, 0x000400fau, 0x00002112u, 0x00005e07u, 0x00005e08u, 0x000200f8u, 0x00005e08u, 0x000500c4u, 0x00000008u, 0x00005e11u, 0x000021b8u, 0x0000021eu, 0x0003003eu, 0x00005dddu, 0x00005e11u, 0x000200f9u, 0x00005e06u, 0x000200f8u, 0x00005e07u, 0x00050084u, 0x00000008u, 0x00005e0bu, 0x00005e04u, 0x000021b8u, 0x00050080u, 0x00000008u, 0x00005e0cu, 0x00005e0bu, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00005e0du, 0x00005e0cu, 0x00000218u, 0x0003003eu, 0x00005dddu, 0x00005e0du, 0x000500c3u, 0x00000008u, 0x00005e0fu, 0x00005e0du, 0x0000021eu, 0x0003003eu, 0x000020aau, 0x00005e0fu, 0x000200f9u, 0x00005e06u, 0x000200f8u, 0x00005e06u, 0x000700f5u, 0x00000008u, 0x0000b539u, 0x00005e0fu, 0x00005e07u, 0x000021b8u, 0x00005e08u, 0x000700f5u, 0x00000008u, 0x0000b536u, 0x00005e0du, 0x00005e07u, 0x00005e11u, 0x00005e08u, 0x000300f7u, 0x00005e13u, 0x00000000u, 0x000400fau, 0x00002115u, 0x00005e14u, 0x00005e15u, 0x000200f8u, 0x00005e15u, 0x00050080u, 0x00000008u, 0x00005e19u, 0x00005e04u, 0x0000a106u, 0x0003003eu, 0x00005ddcu, 0x00005e19u, 0x000200f9u, 0x00005e13u, 0x000200f8u, 0x00005e14u, 0x0003003eu, 0x00005ddcu, 0x0000b536u, 0x000200f9u, 0x00005e13u, 0x000200f8u, 0x00005e13u, 0x000700f5u, 0x00000008u, 0x0000b537u, 0x0000b536u, 0x00005e14u, 0x00005e19u, 0x00005e15u, 0x0008000cu, 0x00000008u, 0x00005e1bu, 0x00000001u, 0x0000002du, 0x0000b537u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00005dfeu, 0x00005e1bu, 0x0004003du, 0x00000009u, 0x00005e1du, 0x00005dd6u, 0x0003003eu, 0x00005ddeu, 0x00005e1du, 0x0003003eu, 0x00002035u, 0x0000b539u, 0x00050051u, 0x00000008u, 0x000022e7u, 0x00005e1du, 0x00000000u, 0x00050051u, 0x00000008u, 0x000022e8u, 0x00005e1du, 0x00000001u, 0x00050051u, 0x00000008u, 0x000022e9u, 0x00005e1du, 0x00000002u, 0x00050051u, 0x00000008u, 0x000022eau, 0x00005e1du, 0x00000003u, 0x0003003eu, 0x000020a5u, 0x00005e1du, 0x000200f9u, 0x000022afu, 0x000200f8u, 0x000022afu, 0x000700f5u, 0x00000008u, 0x0000b781u, 0x0000b414u, 0x00005e13u, 0x00002309u, 0x00005fa6u, 0x000700f5u, 0x00000008u, 0x0000b64cu, 0x0000b539u, 0x00005e13u, 0x0000acf3u, 0x00005fa6u, 0x000500aau, 0x0000005du, 0x0000230cu, 0x0000b64cu, 0x00000203u, 0x000500a7u, 0x0000005du, 0x0000230du, 0x00002124u, 0x0000230cu, 0x000300f7u, 0x0000230eu, 0x00000000u, 0x000400fau, 0x0000230du, 0x0000230fu, 0x0000230eu, 0x000200f8u, 0x0000230fu, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x0000230eu, 0x000300f7u, 0x00002311u, 0x00000000u, 0x000400fau, 0x00002133u, 0x00002312u, 0x00002311u, 0x000200f8u, 0x00002312u, 0x000300f7u, 0x00002314u, 0x00000000u, 0x000400fau, 0x00002136u, 0x00002315u, 0x00002316u, 0x000200f8u, 0x00002316u, 0x00050041u, 0x0000003eu, 0x00006e1fu, 0x00006e11u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00002319u, 0x00006e1fu, 0x0003003eu, 0x000020b5u, 0x00002319u, 0x000200f9u, 0x00002314u, 0x000200f8u, 0x00002315u, 0x0004003du, 0x00000008u, 0x000060e8u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x000060e9u, 0x000060e8u, 0x0000038bu, 0x0003003eu, 0x000060e7u, 0x000060e9u, 0x0003003eu, 0x000020b5u, 0x000060e9u, 0x000200f9u, 0x00002314u, 0x000200f8u, 0x00002314u, 0x000700f5u, 0x00000008u, 0x0000b78cu, 0x000060e9u, 0x00002315u, 0x00002319u, 0x00002316u, 0x000500b1u, 0x0000005du, 0x0000231cu, 0x0000b781u, 0x0000b78cu, 0x000300f7u, 0x0000231du, 0x00000000u, 0x000400fau, 0x0000231cu, 0x0000231eu, 0x0000231du, 0x000200f8u, 0x0000231eu, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x00000543u, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x0000231du, 0x000200f9u, 0x00002311u, 0x000200f8u, 0x00002311u, 0x0004003du, 0x00000009u, 0x0000231fu, 0x000020a5u, 0x0003003eu, 0x000078acu, 0x0000231fu, 0x000500c4u, 0x00000008u, 0x00002322u, 0x00002b67u, 0x00000264u, 0x000500c5u, 0x00000008u, 0x00002324u, 0x00002322u, 0x0000a0fau, 0x0003003eu, 0x000078adu, 0x00002324u, 0x0003003eu, 0x000078aeu, 0x0000b64cu, 0x00050041u, 0x0000003eu, 0x00002328u, 0x0000203au, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00002329u, 0x00002328u, 0x00050080u, 0x00000008u, 0x0000232bu, 0x00002329u, 0x0000a106u, 0x0007000cu, 0x00000008u, 0x0000232cu, 0x00000001u, 0x00000027u, 0x0000232bu, 0x0000038bu, 0x0003003eu, 0x000078afu, 0x0000232cu, 0x0003003eu, 0x00001febu, 0x0000055eu, 0x0003003eu, 0x00001fecu, 0x0000055eu, 0x000200f9u, 0x000020b7u, 0x000200f8u, 0x000020b7u, 0x001900f5u, 0x0000005du, 0x0000e68au, 0x0000b8d1u, 0x000020cbu, 0x0000b8d1u, 0x000020eau, 0x0000b8d1u, 0x00002172u, 0x0000e690u, 0x0000219du, 0x0000e690u, 0x0000219cu, 0x0000b8d1u, 0x000021a6u, 0x0000b8d1u, 0x000021b6u, 0x0000b8d1u, 0x000021c2u, 0x0000b8d1u, 0x0000230fu, 0x0000b8d1u, 0x0000231eu, 0x0000b8d1u, 0x00002311u, 0x001900f5u, 0x00000008u, 0x0000e5f8u, 0x0000a6d5u, 0x000020cbu, 0x0000a6d5u, 0x000020eau, 0x0000a6d5u, 0x00002172u, 0x0000a6d5u, 0x0000219du, 0x0000a6d5u, 0x0000219cu, 0x0000a6d5u, 0x000021a6u, 0x0000a6d5u, 0x000021b6u, 0x0000a6d5u, 0x000021c2u, 0x0000a6c9u, 0x0000230fu, 0x0000a6c9u, 0x0000231eu, 0x0000a6c9u, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000e566u, 0x0000a62bu, 0x000020cbu, 0x0000a62bu, 0x000020eau, 0x0000a62bu, 0x00002172u, 0x0000a62bu, 0x0000219du, 0x0000a62bu, 0x0000219cu, 0x0000a62bu, 0x000021a6u, 0x0000a62bu, 0x000021b6u, 0x0000a62bu, 0x000021c2u, 0x0000a61cu, 0x0000230fu, 0x0000a61cu, 0x0000231eu, 0x0000a61cu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000e4c4u, 0x00009b5du, 0x000020cbu, 0x00009b5du, 0x000020eau, 0x00009b5du, 0x00002172u, 0x00009b5du, 0x0000219du, 0x00009b5du, 0x0000219cu, 0x00009b5du, 0x000021a6u, 0x00009b5du, 0x000021b6u, 0x00009b5du, 0x000021c2u, 0x0000e50cu, 0x0000230fu, 0x0000e50cu, 0x0000231eu, 0x0000e50cu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000e424u, 0x00009a79u, 0x000020cbu, 0x00009a79u, 0x000020eau, 0x00009a79u, 0x00002172u, 0x00009a79u, 0x0000219du, 0x00009a79u, 0x0000219cu, 0x00009a79u, 0x000021a6u, 0x00009a79u, 0x000021b6u, 0x00009a79u, 0x000021c2u, 0x0000e46cu, 0x0000230fu, 0x0000e46cu, 0x0000231eu, 0x0000e46cu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000e384u, 0x00009992u, 0x000020cbu, 0x00009992u, 0x000020eau, 0x00009992u, 0x00002172u, 0x00009992u, 0x0000219du, 0x00009992u, 0x0000219cu, 0x00009992u, 0x000021a6u, 0x00009992u, 0x000021b6u, 0x00009992u, 0x000021c2u, 0x0000e3ccu, 0x0000230fu, 0x0000e3ccu, 0x0000231eu, 0x0000e3ccu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000e2e4u, 0x000098aau, 0x000020cbu, 0x000098aau, 0x000020eau, 0x000098aau, 0x00002172u, 0x000098aau, 0x0000219du, 0x000098aau, 0x0000219cu, 0x000098aau, 0x000021a6u, 0x000098aau, 0x000021b6u, 0x000098aau, 0x000021c2u, 0x0000e32cu, 0x0000230fu, 0x0000e32cu, 0x0000231eu, 0x0000e32cu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000e252u, 0x000093ddu, 0x000020cbu, 0x000093ddu, 0x000020eau, 0x000093ddu, 0x00002172u, 0x000093ddu, 0x0000219du, 0x000093ddu, 0x0000219cu, 0x000093ddu, 0x000021a6u, 0x000093ddu, 0x000021b6u, 0x000093ddu, 0x000021c2u, 0x000093d0u, 0x0000230fu, 0x000093d0u, 0x0000231eu, 0x000093d0u, 0x00002311u, 0x001900f5u, 0x0000005du, 0x0000e159u, 0x00008e4bu, 0x000020cbu, 0x00008e4bu, 0x000020eau, 0x00008e4bu, 0x00002172u, 0x00008e4bu, 0x0000219du, 0x00008e4bu, 0x0000219cu, 0x00008e4bu, 0x000021a6u, 0x00008e4bu, 0x000021b6u, 0x00008e4bu, 0x000021c2u, 0x0000e1a2u, 0x0000230fu, 0x0000e1a2u, 0x0000231eu, 0x0000e1a2u, 0x00002311u, 0x001900f5u, 0x0000005du, 0x0000e060u, 0x00008da8u, 0x000020cbu, 0x00008da8u, 0x000020eau, 0x00008da8u, 0x00002172u, 0x00008da8u, 0x0000219du, 0x00008da8u, 0x0000219cu, 0x00008da8u, 0x000021a6u, 0x00008da8u, 0x000021b6u, 0x00008da8u, 0x000021c2u, 0x0000e0a9u, 0x0000230fu, 0x0000e0a9u, 0x0000231eu, 0x0000e0a9u, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000df54u, 0x00008418u, 0x000020cbu, 0x00008418u, 0x000020eau, 0x00008418u, 0x00002172u, 0x00008418u, 0x0000219du, 0x00008418u, 0x0000219cu, 0x00008418u, 0x000021a6u, 0x00008418u, 0x000021b6u, 0x00008418u, 0x000021c2u, 0x0000df9eu, 0x0000230fu, 0x0000df9eu, 0x0000231eu, 0x0000df9eu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000de4au, 0x0000839eu, 0x000020cbu, 0x0000839eu, 0x000020eau, 0x0000839eu, 0x00002172u, 0x0000839eu, 0x0000219du, 0x0000839eu, 0x0000219cu, 0x0000839eu, 0x000021a6u, 0x0000839eu, 0x000021b6u, 0x0000839eu, 0x000021c2u, 0x0000de94u, 0x0000230fu, 0x0000de94u, 0x0000231eu, 0x0000de94u, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000dd40u, 0x00008321u, 0x000020cbu, 0x00008321u, 0x000020eau, 0x00008321u, 0x00002172u, 0x00008321u, 0x0000219du, 0x00008321u, 0x0000219cu, 0x00008321u, 0x000021a6u, 0x00008321u, 0x000021b6u, 0x00008321u, 0x000021c2u, 0x0000dd8au, 0x0000230fu, 0x0000dd8au, 0x0000231eu, 0x0000dd8au, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000dc36u, 0x000082a2u, 0x000020cbu, 0x000082a2u, 0x000020eau, 0x000082a2u, 0x00002172u, 0x000082a2u, 0x0000219du, 0x000082a2u, 0x0000219cu, 0x000082a2u, 0x000021a6u, 0x000082a2u, 0x000021b6u, 0x000082a2u, 0x000021c2u, 0x0000dc80u, 0x0000230fu, 0x0000dc80u, 0x0000231eu, 0x0000dc80u, 0x00002311u, 0x001900f5u, 0x0000005fu, 0x0000dad5u, 0x00007b9eu, 0x000020cbu, 0x00007b9eu, 0x000020eau, 0x00007b9eu, 0x00002172u, 0x00007b9eu, 0x0000219du, 0x00007b9eu, 0x0000219cu, 0x00007b9eu, 0x000021a6u, 0x00007b9eu, 0x000021b6u, 0x00007b9eu, 0x000021c2u, 0x00007b93u, 0x0000230fu, 0x00007b93u, 0x0000231eu, 0x00007b93u, 0x00002311u, 0x001900f5u, 0x0000005fu, 0x0000d974u, 0x00007b7au, 0x000020cbu, 0x00007b7au, 0x000020eau, 0x00007b7au, 0x00002172u, 0x00007b7au, 0x0000219du, 0x00007b7au, 0x0000219cu, 0x00007b7au, 0x000021a6u, 0x00007b7au, 0x000021b6u, 0x00007b7au, 0x000021c2u, 0x00007b6fu, 0x0000230fu, 0x00007b6fu, 0x0000231eu, 0x00007b6fu, 0x00002311u, 0x001900f5u, 0x0000003cu, 0x0000d807u, 0x00007ab3u, 0x000020cbu, 0x00007ab3u, 0x000020eau, 0x00007ab3u, 0x00002172u, 0x00007ab3u, 0x0000219du, 0x00007ab3u, 0x0000219cu, 0x00007ab3u, 0x000021a6u, 0x00007ab3u, 0x000021b6u, 0x00007ab3u, 0x000021c2u, 0x00007aadu, 0x0000230fu, 0x00007aadu, 0x0000231eu, 0x00007aadu, 0x00002311u, 0x001900f5u, 0x0000003cu, 0x0000d691u, 0x00007aa4u, 0x000020cbu, 0x00007aa4u, 0x000020eau, 0x00007aa4u, 0x00002172u, 0x00007aa4u, 0x0000219du, 0x00007aa4u, 0x0000219cu, 0x00007aa4u, 0x000021a6u, 0x00007aa4u, 0x000021b6u, 0x00007aa4u, 0x000021c2u, 0x00007a9eu, 0x0000230fu, 0x00007a9eu, 0x0000231eu, 0x00007a9eu, 0x00002311u, 0x001900f5u, 0x00000009u, 0x0000bdf7u, 0x0000bdf9u, 0x000020cbu, 0x0000bdf9u, 0x000020eau, 0x0000bdf9u, 0x00002172u, 0x0000bdf9u, 0x0000219du, 0x0000bdf9u, 0x0000219cu, 0x0000bdf9u, 0x000021a6u, 0x0000bdf9u, 0x000021b6u, 0x0000bdf9u, 0x000021c2u, 0x0000bdf9u, 0x0000230fu, 0x0000bdf9u, 0x0000231eu, 0x0000231fu, 0x00002311u, 0x001900f5u, 0x00000008u, 0x0000bcd6u, 0x0000bcd8u, 0x000020cbu, 0x0000bcd8u, 0x000020eau, 0x0000bcd8u, 0x00002172u, 0x0000ba39u, 0x0000219du, 0x0000ba39u, 0x0000219cu, 0x0000bcd8u, 0x000021a6u, 0x0000bcd8u, 0x000021b6u, 0x0000bcd8u, 0x000021c2u, 0x0000bcd8u, 0x0000230fu, 0x0000bcd8u, 0x0000231eu, 0x00002324u, 0x00002311u, 0x001900f5u, 0x00000008u, 0x0000bbb5u, 0x0000bbb7u, 0x000020cbu, 0x0000bbb7u, 0x000020eau, 0x0000bbb7u, 0x00002172u, 0x0000037du, 0x0000219du, 0x0000037du, 0x0000219cu, 0x00000622u, 0x000021a6u, 0x0000bbb7u, 0x000021b6u, 0x0000bbb7u, 0x000021c2u, 0x0000bbb7u, 0x0000230fu, 0x0000bbb7u, 0x0000231eu, 0x0000b64cu, 0x00002311u, 0x001900f5u, 0x00000008u, 0x0000ba69u, 0x0000ba6bu, 0x000020cbu, 0x0000ba6bu, 0x000020eau, 0x0000ba6bu, 0x00002172u, 0x0000ba6bu, 0x0000219du, 0x0000ba6bu, 0x0000219cu, 0x0000ba6bu, 0x000021a6u, 0x0000ba6bu, 0x000021b6u, 0x0000ba6bu, 0x000021c2u, 0x0000ba6bu, 0x0000230fu, 0x0000ba6bu, 0x0000231eu, 0x0000232cu, 0x00002311u, 0x001900f5u, 0x0000005du, 0x0000ba68u, 0x00000543u, 0x000020cbu, 0x00000543u, 0x000020eau, 0x00000543u, 0x00002172u, 0x00000543u, 0x0000219du, 0x0000055eu, 0x0000219cu, 0x000021acu, 0x000021a6u, 0x00000543u, 0x000021b6u, 0x00000543u, 0x000021c2u, 0x00000543u, 0x0000230fu, 0x00000543u, 0x0000231eu, 0x0000055eu, 0x00002311u, 0x0003003eu, 0x000020b6u, 0x0000ba68u, 0x00070050u, 0x000000c8u, 0x000078b4u, 0x0000bdf7u, 0x0000bcd6u, 0x0000bbb5u, 0x0000ba69u, 0x0003003eu, 0x0000789fu, 0x0000bdf7u, 0x0003003eu, 0x000078a0u, 0x0000bcd6u, 0x0003003eu, 0x000078a1u, 0x0000bbb5u, 0x0003003eu, 0x000078a2u, 0x0000ba69u, 0x000300f7u, 0x00001ee1u, 0x00000000u, 0x000400fau, 0x0000ba68u, 0x00001ee0u, 0x00001ee1u, 0x000200f8u, 0x00001ee0u, 0x000500c7u, 0x00000008u, 0x00001ee4u, 0x0000bbb5u, 0x00000622u, 0x000500abu, 0x0000005du, 0x00001ee5u, 0x00001ee4u, 0x00000203u, 0x000300f7u, 0x00001ee7u, 0x00000000u, 0x000400fau, 0x00001ee5u, 0x00001ee6u, 0x00001eedu, 0x000200f8u, 0x00001eedu, 0x000500c7u, 0x00000008u, 0x00001ef0u, 0x0000bbb5u, 0x0000037du, 0x000500abu, 0x0000005du, 0x00001ef1u, 0x00001ef0u, 0x00000203u, 0x000300f7u, 0x00001ef3u, 0x00000000u, 0x000400fau, 0x00001ef1u, 0x00001ef2u, 0x00001efbu, 0x000200f8u, 0x00001efbu, 0x0003003eu, 0x00001efcu, 0x00001e65u, 0x0003003eu, 0x00001efeu, 0x00001e69u, 0x0003003eu, 0x00001f00u, 0x00001ed5u, 0x0003003eu, 0x000078b5u, 0x0000bdf7u, 0x0003003eu, 0x000078b6u, 0x0000bcd6u, 0x0003003eu, 0x000078b7u, 0x0000bbb5u, 0x0003003eu, 0x000078b8u, 0x0000ba69u, 0x000500c3u, 0x00000008u, 0x00006264u, 0x0000bcd6u, 0x00000264u, 0x0003003eu, 0x0000621fu, 0x00006264u, 0x000500c7u, 0x00000008u, 0x00006267u, 0x0000bcd6u, 0x00000386u, 0x0003003eu, 0x00006220u, 0x00006267u, 0x0003003eu, 0x00006221u, 0x0000bbb5u, 0x0003003eu, 0x00006222u, 0x0000bdf7u, 0x0003003eu, 0x00006223u, 0x0000ba69u, 0x00080041u, 0x00000277u, 0x0000626fu, 0x00000a19u, 0x00000203u, 0x00001ed5u, 0x00000203u, 0x00000485u, 0x0004003du, 0x00000229u, 0x00006270u, 0x0000626fu, 0x00040071u, 0x00000006u, 0x00006271u, 0x00006270u, 0x0003003eu, 0x00006224u, 0x00006271u, 0x0003003eu, 0x00006226u, 0x00001ed5u, 0x00070041u, 0x00000234u, 0x000062ffu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00006300u, 0x000062ffu, 0x00040071u, 0x00000237u, 0x00006301u, 0x00006300u, 0x0004007cu, 0x00000009u, 0x00006302u, 0x00006301u, 0x00070041u, 0x00000234u, 0x00006304u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000212u, 0x0004003du, 0x0000022au, 0x00006305u, 0x00006304u, 0x00040071u, 0x00000237u, 0x00006306u, 0x00006305u, 0x0004007cu, 0x00000009u, 0x00006307u, 0x00006306u, 0x00070041u, 0x00000234u, 0x00006309u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000215u, 0x0004003du, 0x0000022au, 0x0000630au, 0x00006309u, 0x00040071u, 0x00000237u, 0x0000630bu, 0x0000630au, 0x0004007cu, 0x00000009u, 0x0000630cu, 0x0000630bu, 0x00070041u, 0x00000234u, 0x0000630eu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000218u, 0x0004003du, 0x0000022au, 0x0000630fu, 0x0000630eu, 0x00040071u, 0x00000237u, 0x00006310u, 0x0000630fu, 0x0004007cu, 0x00000009u, 0x00006311u, 0x00006310u, 0x00070041u, 0x00000234u, 0x00006313u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000021bu, 0x0004003du, 0x0000022au, 0x00006314u, 0x00006313u, 0x00040071u, 0x00000237u, 0x00006315u, 0x00006314u, 0x0004007cu, 0x00000009u, 0x00006316u, 0x00006315u, 0x00070041u, 0x00000234u, 0x00006318u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000021eu, 0x0004003du, 0x0000022au, 0x00006319u, 0x00006318u, 0x00040071u, 0x00000237u, 0x0000631au, 0x00006319u, 0x0004007cu, 0x00000009u, 0x0000631bu, 0x0000631au, 0x00070041u, 0x00000234u, 0x0000631du, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000221u, 0x0004003du, 0x0000022au, 0x0000631eu, 0x0000631du, 0x00040071u, 0x00000237u, 0x0000631fu, 0x0000631eu, 0x0004007cu, 0x00000009u, 0x00006320u, 0x0000631fu, 0x00070041u, 0x00000234u, 0x00006322u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000224u, 0x0004003du, 0x0000022au, 0x00006323u, 0x00006322u, 0x00040071u, 0x00000237u, 0x00006324u, 0x00006323u, 0x0004007cu, 0x00000009u, 0x00006325u, 0x00006324u, 0x00070041u, 0x00000234u, 0x00006327u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000025eu, 0x0004003du, 0x0000022au, 0x00006328u, 0x00006327u, 0x00040071u, 0x00000237u, 0x00006329u, 0x00006328u, 0x0004007cu, 0x00000009u, 0x0000632au, 0x00006329u, 0x00070041u, 0x00000234u, 0x0000632cu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000264u, 0x0004003du, 0x0000022au, 0x0000632du, 0x0000632cu, 0x00040071u, 0x00000237u, 0x0000632eu, 0x0000632du, 0x0004007cu, 0x00000009u, 0x0000632fu, 0x0000632eu, 0x00070041u, 0x0000026bu, 0x00006331u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000026au, 0x0004003du, 0x00000006u, 0x00006332u, 0x00006331u, 0x00070041u, 0x00000270u, 0x00006334u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000026fu, 0x0004003du, 0x0000022bu, 0x00006335u, 0x00006334u, 0x00040071u, 0x00000006u, 0x00006336u, 0x00006335u, 0x0004007cu, 0x00000008u, 0x00006337u, 0x00006336u, 0x00070041u, 0x00000277u, 0x00006339u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000276u, 0x0004003du, 0x00000229u, 0x0000633au, 0x00006339u, 0x00040071u, 0x00000006u, 0x0000633bu, 0x0000633au, 0x0004007cu, 0x00000008u, 0x0000633cu, 0x0000633bu, 0x00070041u, 0x00000277u, 0x0000633eu, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000027du, 0x0004003du, 0x00000229u, 0x0000633fu, 0x0000633eu, 0x00040071u, 0x00000006u, 0x00006340u, 0x0000633fu, 0x0004007cu, 0x00000008u, 0x00006341u, 0x00006340u, 0x00070041u, 0x00000284u, 0x00006343u, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x00000283u, 0x0004003du, 0x0000022du, 0x00006344u, 0x00006343u, 0x00040072u, 0x00000009u, 0x00006345u, 0x00006344u, 0x00120050u, 0x0000000fu, 0x00006346u, 0x00006302u, 0x00006307u, 0x0000630cu, 0x00006311u, 0x00006316u, 0x0000631bu, 0x00006320u, 0x00006325u, 0x0000632au, 0x0000632fu, 0x00006332u, 0x00006337u, 0x0000633cu, 0x00006341u, 0x00006345u, 0x0003003eu, 0x00006836u, 0x00006302u, 0x0003003eu, 0x00006837u, 0x00006307u, 0x0003003eu, 0x00006838u, 0x0000630cu, 0x0003003eu, 0x00006839u, 0x00006311u, 0x0003003eu, 0x0000683au, 0x00006316u, 0x0003003eu, 0x0000683bu, 0x0000631bu, 0x0003003eu, 0x0000683cu, 0x00006320u, 0x0003003eu, 0x0000683du, 0x00006325u, 0x0003003eu, 0x0000683eu, 0x0000632au, 0x0003003eu, 0x0000683fu, 0x0000632fu, 0x0003003eu, 0x00006840u, 0x00006332u, 0x0003003eu, 0x00006841u, 0x00006337u, 0x0003003eu, 0x00006842u, 0x0000633cu, 0x0003003eu, 0x00006843u, 0x00006341u, 0x0003003eu, 0x00006844u, 0x00006345u, 0x0003003eu, 0x00006865u, 0x0000632au, 0x0003003eu, 0x00006866u, 0x0000632fu, 0x0003003eu, 0x00006868u, 0x00006337u, 0x0003003eu, 0x00006869u, 0x0000633cu, 0x0003003eu, 0x00006228u, 0x00006271u, 0x00070041u, 0x00000234u, 0x00006349u, 0x000002b2u, 0x00000203u, 0x00006271u, 0x00000203u, 0x0004003du, 0x0000022au, 0x0000634au, 0x00006349u, 0x00040071u, 0x00000237u, 0x0000634bu, 0x0000634au, 0x0004007cu, 0x00000009u, 0x0000634cu, 0x0000634bu, 0x00070041u, 0x00000234u, 0x0000634eu, 0x000002b2u, 0x00000203u, 0x00006271u, 0x00000212u, 0x0004003du, 0x0000022au, 0x0000634fu, 0x0000634eu, 0x00040071u, 0x00000237u, 0x00006350u, 0x0000634fu, 0x0004007cu, 0x00000009u, 0x00006351u, 0x00006350u, 0x00070041u, 0x0000026bu, 0x00006353u, 0x000002b2u, 0x00000203u, 0x00006271u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00006354u, 0x00006353u, 0x00070041u, 0x00000277u, 0x00006356u, 0x000002b2u, 0x00000203u, 0x00006271u, 0x00000218u, 0x0004003du, 0x00000229u, 0x00006357u, 0x00006356u, 0x00040071u, 0x00000006u, 0x00006358u, 0x00006357u, 0x0004007cu, 0x00000008u, 0x00006359u, 0x00006358u, 0x00070041u, 0x00000277u, 0x0000635bu, 0x000002b2u, 0x00000203u, 0x00006271u, 0x0000021bu, 0x0004003du, 0x00000229u, 0x0000635cu, 0x0000635bu, 0x00040071u, 0x00000006u, 0x0000635du, 0x0000635cu, 0x0004007cu, 0x00000008u, 0x0000635eu, 0x0000635du, 0x000a0050u, 0x00000019u, 0x0000635fu, 0x0000634cu, 0x00006351u, 0x00006354u, 0x00006359u, 0x0000635eu, 0x00000203u, 0x00000203u, 0x0003003eu, 0x00006820u, 0x0000634cu, 0x0003003eu, 0x00006821u, 0x00006351u, 0x0003003eu, 0x00006822u, 0x00006354u, 0x0003003eu, 0x00006823u, 0x00006359u, 0x0003003eu, 0x00006824u, 0x0000635eu, 0x0003003eu, 0x00006825u, 0x00000203u, 0x0003003eu, 0x00006826u, 0x00000203u, 0x0003003eu, 0x0000686fu, 0x0000634cu, 0x0003003eu, 0x00006870u, 0x00006351u, 0x0003003eu, 0x00006871u, 0x00006354u, 0x0003003eu, 0x00006872u, 0x00006359u, 0x0003003eu, 0x00006873u, 0x0000635eu, 0x000500c7u, 0x00000006u, 0x00006278u, 0x00006354u, 0x0000035bu, 0x000500abu, 0x0000005du, 0x00006279u, 0x00006278u, 0x00000374u, 0x0003003eu, 0x00006229u, 0x00006279u, 0x000500c7u, 0x00000006u, 0x0000627cu, 0x00006354u, 0x00000485u, 0x000500abu, 0x0000005du, 0x0000627du, 0x0000627cu, 0x00000374u, 0x0003003eu, 0x0000622au, 0x0000627du, 0x000500c7u, 0x00000006u, 0x00006280u, 0x00006354u, 0x000003c4u, 0x000500abu, 0x0000005du, 0x00006281u, 0x00006280u, 0x00000374u, 0x0003003eu, 0x0000622bu, 0x00006281u, 0x000500c7u, 0x00000006u, 0x00006284u, 0x00006354u, 0x00000377u, 0x000500abu, 0x0000005du, 0x00006285u, 0x00006284u, 0x00000374u, 0x0003003eu, 0x0000622cu, 0x00006285u, 0x000500c7u, 0x00000006u, 0x00006288u, 0x00006354u, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x00006289u, 0x00006288u, 0x00000374u, 0x0003003eu, 0x0000622du, 0x00006289u, 0x000500c7u, 0x00000006u, 0x0000628cu, 0x00006354u, 0x00000a45u, 0x000500abu, 0x0000005du, 0x0000628du, 0x0000628cu, 0x00000374u, 0x0003003eu, 0x0000622eu, 0x0000628du, 0x000500c7u, 0x00000006u, 0x00006290u, 0x00006354u, 0x00000a4bu, 0x000500abu, 0x0000005du, 0x00006291u, 0x00006290u, 0x00000374u, 0x0003003eu, 0x0000622fu, 0x00006291u, 0x000500c7u, 0x00000006u, 0x00006294u, 0x00006354u, 0x00000a51u, 0x000500abu, 0x0000005du, 0x00006295u, 0x00006294u, 0x00000374u, 0x0003003eu, 0x00006230u, 0x00006295u, 0x0003003eu, 0x00006232u, 0x00006285u, 0x000300f7u, 0x00006365u, 0x00000000u, 0x000400fau, 0x00006285u, 0x00006366u, 0x00006367u, 0x000200f8u, 0x00006367u, 0x0003003eu, 0x00006361u, 0x00000936u, 0x000200f9u, 0x00006365u, 0x000200f8u, 0x00006366u, 0x00050041u, 0x00000201u, 0x00006368u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006369u, 0x00006368u, 0x000500c7u, 0x00000008u, 0x0000636au, 0x00006369u, 0x00000936u, 0x0003003eu, 0x00006361u, 0x0000636au, 0x000200f9u, 0x00006365u, 0x000200f8u, 0x00006365u, 0x000700f5u, 0x00000008u, 0x0000c31bu, 0x0000636au, 0x00006366u, 0x00000936u, 0x00006367u, 0x0003003eu, 0x00006360u, 0x0000c31bu, 0x000300f7u, 0x0000636cu, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x0000636cu, 0x00000000u, 0x0000636du, 0x00000001u, 0x0000636eu, 0x00000002u, 0x0000636fu, 0x00000003u, 0x00006370u, 0x00000004u, 0x00006371u, 0x000200f8u, 0x00006371u, 0x0004003du, 0x00000009u, 0x0000637au, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x0000637bu, 0x0000637au, 0x0000637au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006362u, 0x0000637bu, 0x000200f9u, 0x0000636cu, 0x000200f8u, 0x00006370u, 0x0004003du, 0x00000009u, 0x00006378u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00006379u, 0x00006378u, 0x00006378u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00006362u, 0x00006379u, 0x000200f9u, 0x0000636cu, 0x000200f8u, 0x0000636fu, 0x0004003du, 0x00000009u, 0x00006374u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00006375u, 0x00006374u, 0x00006374u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000003cu, 0x00006377u, 0x00006375u, 0x0000eef1u, 0x0003003eu, 0x00006362u, 0x00006377u, 0x000200f9u, 0x0000636cu, 0x000200f8u, 0x0000636eu, 0x0004003du, 0x00000009u, 0x00006372u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00006373u, 0x00006372u, 0x00006372u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00006362u, 0x00006373u, 0x0003003eu, 0x00006360u, 0x00000936u, 0x000200f9u, 0x0000636cu, 0x000200f8u, 0x0000636du, 0x0003003eu, 0x00006362u, 0x00000941u, 0x0003003eu, 0x00006360u, 0x00000936u, 0x000200f9u, 0x0000636cu, 0x000200f8u, 0x0000636cu, 0x000f00f5u, 0x00000008u, 0x0000c46bu, 0x0000c31bu, 0x00006365u, 0x00000936u, 0x0000636du, 0x00000936u, 0x0000636eu, 0x0000c31bu, 0x0000636fu, 0x0000c31bu, 0x00006370u, 0x0000c31bu, 0x00006371u, 0x000f00f5u, 0x0000003cu, 0x0000c31cu, 0x0000c320u, 0x00006365u, 0x00000941u, 0x0000636du, 0x00006373u, 0x0000636eu, 0x00006377u, 0x0000636fu, 0x00006379u, 0x00006370u, 0x0000637bu, 0x00006371u, 0x00050051u, 0x00000008u, 0x0000637eu, 0x0000c31cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000637fu, 0x0000c31cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006380u, 0x0000c31cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006381u, 0x0000637eu, 0x0000637fu, 0x00006380u, 0x0000c46bu, 0x0003003eu, 0x00006363u, 0x00006381u, 0x0003003eu, 0x00006231u, 0x00006381u, 0x00050041u, 0x0000003eu, 0x00006298u, 0x00006231u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006299u, 0x00006298u, 0x000500c3u, 0x00000008u, 0x0000629au, 0x00006299u, 0x0000021eu, 0x0003003eu, 0x00006233u, 0x0000629au, 0x0003003eu, 0x00006238u, 0x00006264u, 0x0003003eu, 0x00006239u, 0x00006337u, 0x0003003eu, 0x0000623au, 0x0000633cu, 0x0004003du, 0x00000008u, 0x000062a0u, 0x00000705u, 0x0003003eu, 0x0000623bu, 0x000062a0u, 0x0004003du, 0x00000008u, 0x000062a1u, 0x000006e7u, 0x0003003eu, 0x0000623cu, 0x000062a1u, 0x0003003eu, 0x0000623du, 0x0000bbb5u, 0x0003003eu, 0x0000623eu, 0x0000629au, 0x0003003eu, 0x0000623fu, 0x0000627du, 0x0003003eu, 0x00006240u, 0x0000635eu, 0x0003003eu, 0x00006241u, 0x00006279u, 0x0003003eu, 0x00006242u, 0x00006291u, 0x00050080u, 0x00000008u, 0x000063ccu, 0x0000bbb5u, 0x0000629au, 0x000500afu, 0x0000005du, 0x000063cdu, 0x000063ccu, 0x0000025eu, 0x000300f7u, 0x00006397u, 0x00000000u, 0x000400fau, 0x0000627du, 0x00006398u, 0x00006399u, 0x000200f8u, 0x00006399u, 0x00050041u, 0x0000003eu, 0x00006423u, 0x00006245u, 0x00000374u, 0x0003003eu, 0x00006423u, 0x00000203u, 0x00050082u, 0x00000008u, 0x00006425u, 0x00000540u, 0x0000633cu, 0x0007000cu, 0x00000008u, 0x00006426u, 0x00000001u, 0x00000027u, 0x00006425u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x00006427u, 0x00006245u, 0x00000485u, 0x0003003eu, 0x00006427u, 0x00006426u, 0x0003003eu, 0x00006394u, 0x000063cdu, 0x000400a8u, 0x0000005du, 0x0000642du, 0x00006279u, 0x000300f7u, 0x0000642eu, 0x00000000u, 0x000400fau, 0x0000642du, 0x0000642fu, 0x0000642eu, 0x000200f8u, 0x0000642fu, 0x000400a8u, 0x0000005du, 0x00006431u, 0x000063cdu, 0x000500a7u, 0x0000005du, 0x00006433u, 0x00006431u, 0x00006291u, 0x000200f9u, 0x0000642eu, 0x000200f8u, 0x0000642eu, 0x000700f5u, 0x0000005du, 0x00006434u, 0x00006279u, 0x00006399u, 0x00006433u, 0x0000642fu, 0x0003003eu, 0x00006243u, 0x00006434u, 0x0003003eu, 0x00006244u, 0x000063cdu, 0x0003003eu, 0x0000638du, 0x0000055eu, 0x000200f9u, 0x00006397u, 0x000200f8u, 0x00006398u, 0x0003003eu, 0x00006383u, 0x000062a0u, 0x0003003eu, 0x00006437u, 0x000062a0u, 0x000500c3u, 0x00000008u, 0x0000643fu, 0x000062a0u, 0x0000026fu, 0x0003003eu, 0x00006438u, 0x0000643fu, 0x000500c7u, 0x00000008u, 0x00006441u, 0x000062a0u, 0x0000040au, 0x0003003eu, 0x00006439u, 0x00006441u, 0x00050082u, 0x00000008u, 0x00006443u, 0x00000221u, 0x0000643fu, 0x0007000cu, 0x00000008u, 0x00006444u, 0x00000001u, 0x0000002au, 0x00006443u, 0x00000203u, 0x0003003eu, 0x0000643au, 0x00006444u, 0x000500c3u, 0x00000008u, 0x00006446u, 0x00000411u, 0x0000643fu, 0x00050082u, 0x00000008u, 0x00006447u, 0x00000411u, 0x00006446u, 0x0003003eu, 0x0000643bu, 0x00006447u, 0x000500c4u, 0x00000008u, 0x0000644au, 0x00006441u, 0x00006444u, 0x00050080u, 0x00000008u, 0x0000644cu, 0x0000644au, 0x00006447u, 0x0003003eu, 0x0000643cu, 0x0000644cu, 0x0003003eu, 0x00006382u, 0x0000644cu, 0x0003003eu, 0x00006385u, 0x000062a1u, 0x000500c4u, 0x00000008u, 0x0000644fu, 0x00000212u, 0x000062a1u, 0x0003003eu, 0x0000644du, 0x0000644fu, 0x0003003eu, 0x00006384u, 0x0000644fu, 0x000500c7u, 0x00000008u, 0x000063a0u, 0x0000643fu, 0x00000540u, 0x0003003eu, 0x00006386u, 0x000063a0u, 0x0003003eu, 0x00006387u, 0x00000543u, 0x00050082u, 0x00000008u, 0x000063a3u, 0x0000633cu, 0x000062a1u, 0x0008000cu, 0x00000008u, 0x000063a4u, 0x00000001u, 0x0000002du, 0x000063a3u, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x000063a5u, 0x00006245u, 0x00000374u, 0x0003003eu, 0x000063a5u, 0x000063a4u, 0x00050082u, 0x00000008u, 0x000063a8u, 0x000062a1u, 0x0000633cu, 0x0008000cu, 0x00000008u, 0x000063a9u, 0x00000001u, 0x0000002du, 0x000063a8u, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x000063aau, 0x00006245u, 0x00000485u, 0x0003003eu, 0x000063aau, 0x000063a9u, 0x000500b1u, 0x0000005du, 0x000063acu, 0x000063a0u, 0x00000218u, 0x000300f7u, 0x000063adu, 0x00000000u, 0x000400fau, 0x000063acu, 0x000063aeu, 0x000063adu, 0x000200f8u, 0x000063aeu, 0x000500abu, 0x0000005du, 0x000063b0u, 0x0000644fu, 0x00000553u, 0x000300f7u, 0x000063b1u, 0x00000000u, 0x000400fau, 0x000063b0u, 0x000063b2u, 0x000063b3u, 0x000200f8u, 0x000063b3u, 0x0003003eu, 0x00006387u, 0x0000055eu, 0x0003003eu, 0x00006384u, 0x0000055fu, 0x000200f9u, 0x000063b1u, 0x000200f8u, 0x000063b2u, 0x000500c4u, 0x00000008u, 0x000063b5u, 0x0000644fu, 0x00000212u, 0x000500c3u, 0x00000008u, 0x000063b7u, 0x00000559u, 0x000063a0u, 0x0007000cu, 0x00000008u, 0x000063b8u, 0x00000001u, 0x0000002au, 0x000063b5u, 0x000063b7u, 0x0003003eu, 0x00006384u, 0x000063b8u, 0x000200f9u, 0x000063b1u, 0x000200f8u, 0x000063b1u, 0x000700f5u, 0x00000008u, 0x0000c480u, 0x000063b8u, 0x000063b2u, 0x0000055fu, 0x000063b3u, 0x000600a9u, 0x0000005du, 0x0000ef12u, 0x000063b0u, 0x00000543u, 0x0000055eu, 0x000200f9u, 0x000063adu, 0x000200f8u, 0x000063adu, 0x000700f5u, 0x0000005du, 0x0000c483u, 0x00000543u, 0x00006398u, 0x0000ef12u, 0x000063b1u, 0x000700f5u, 0x00000008u, 0x0000c47fu, 0x0000644fu, 0x00006398u, 0x0000c480u, 0x000063b1u, 0x000500c5u, 0x00000008u, 0x000063bbu, 0x00006337u, 0x0000c47fu, 0x0003003eu, 0x00006389u, 0x000063bbu, 0x000500abu, 0x0000005du, 0x00006452u, 0x000063bbu, 0x00000203u, 0x000300f7u, 0x00006453u, 0x00000000u, 0x000400fau, 0x00006452u, 0x00006454u, 0x00006453u, 0x000200f8u, 0x00006454u, 0x0006000cu, 0x00000008u, 0x00006456u, 0x00000001u, 0x0000004au, 0x000063bbu, 0x000500c4u, 0x00000008u, 0x00006457u, 0x00000212u, 0x00006456u, 0x0003003eu, 0x00006389u, 0x00006457u, 0x000200f9u, 0x00006453u, 0x000200f8u, 0x00006453u, 0x000700f5u, 0x00000008u, 0x0000c481u, 0x000063bbu, 0x000063adu, 0x00006457u, 0x00006454u, 0x0003003eu, 0x00006450u, 0x0000c481u, 0x0003003eu, 0x00006388u, 0x0000c481u, 0x0003003eu, 0x0000638au, 0x0000c481u, 0x000500c4u, 0x00000008u, 0x000063bfu, 0x0000c481u, 0x00000218u, 0x0003003eu, 0x00006388u, 0x000063bfu, 0x000400a8u, 0x0000005du, 0x000063c1u, 0x0000c483u, 0x000300f7u, 0x000063c2u, 0x00000000u, 0x000400fau, 0x000063c1u, 0x000063c3u, 0x000063c2u, 0x000200f8u, 0x000063c3u, 0x00050080u, 0x00000008u, 0x000063c6u, 0x00006264u, 0x000063bfu, 0x000500afu, 0x0000005du, 0x000063c8u, 0x000063c6u, 0x0000644cu, 0x000200f9u, 0x000063c2u, 0x000200f8u, 0x000063c2u, 0x000700f5u, 0x0000005du, 0x000063c9u, 0x0000c483u, 0x00006453u, 0x000063c8u, 0x000063c3u, 0x0003003eu, 0x0000638bu, 0x000063c9u, 0x0003003eu, 0x0000638cu, 0x000063cdu, 0x000400a8u, 0x0000005du, 0x000063cfu, 0x00006279u, 0x000300f7u, 0x000063d0u, 0x00000000u, 0x000400fau, 0x000063cfu, 0x000063d1u, 0x000063d0u, 0x000200f8u, 0x000063d1u, 0x000400a8u, 0x0000005du, 0x000063d3u, 0x000063cdu, 0x000500a7u, 0x0000005du, 0x000063d5u, 0x000063d3u, 0x00006291u, 0x000500a7u, 0x0000005du, 0x000063d7u, 0x000063d5u, 0x000063c9u, 0x000200f9u, 0x000063d0u, 0x000200f8u, 0x000063d0u, 0x000700f5u, 0x0000005du, 0x000063d8u, 0x00006279u, 0x000063c2u, 0x000063d7u, 0x000063d1u, 0x0003003eu, 0x00006243u, 0x000063d8u, 0x0003003eu, 0x00006244u, 0x000063cdu, 0x0003003eu, 0x0000638du, 0x00000543u, 0x000500aau, 0x0000005du, 0x000063dbu, 0x0000644cu, 0x0000041du, 0x0003003eu, 0x0000638eu, 0x000063dbu, 0x000500b1u, 0x0000005du, 0x000063deu, 0x00006264u, 0x0000644cu, 0x0003003eu, 0x0000638fu, 0x000063deu, 0x00050082u, 0x00000008u, 0x000063e1u, 0x00006264u, 0x000063bfu, 0x0003003eu, 0x00006390u, 0x000063e1u, 0x000500b3u, 0x0000005du, 0x000063e5u, 0x000063e1u, 0x0000644cu, 0x000500a6u, 0x0000005du, 0x000063e6u, 0x0000c483u, 0x000063e5u, 0x0003003eu, 0x00006391u, 0x000063e6u, 0x000300f7u, 0x000063e8u, 0x00000000u, 0x000b00fbu, 0x0000635eu, 0x000063e8u, 0x00000000u, 0x000063e9u, 0x00000001u, 0x000063eau, 0x00000002u, 0x000063ebu, 0x00000003u, 0x000063ecu, 0x000200f8u, 0x000063ecu, 0x000500a7u, 0x0000005du, 0x0000641fu, 0x000063c9u, 0x000063e6u, 0x000400a8u, 0x0000005du, 0x00006421u, 0x000063dbu, 0x000500a7u, 0x0000005du, 0x00006422u, 0x0000641fu, 0x00006421u, 0x0003003eu, 0x0000638du, 0x00006422u, 0x000200f9u, 0x000063e8u, 0x000200f8u, 0x000063ebu, 0x000500a6u, 0x0000005du, 0x0000641cu, 0x000063deu, 0x000063dbu, 0x0003003eu, 0x0000638du, 0x0000641cu, 0x000200f9u, 0x000063e8u, 0x000200f8u, 0x000063eau, 0x000400a8u, 0x0000005du, 0x000063f7u, 0x000063deu, 0x000400a8u, 0x0000005du, 0x000063f9u, 0x000063c9u, 0x000500a6u, 0x0000005du, 0x000063fau, 0x000063f7u, 0x000063f9u, 0x000400a8u, 0x0000005du, 0x000063fcu, 0x000063cdu, 0x000500a6u, 0x0000005du, 0x000063fdu, 0x000063fau, 0x000063fcu, 0x000300f7u, 0x000063feu, 0x00000000u, 0x000400fau, 0x000063fdu, 0x000063ffu, 0x00006400u, 0x000200f8u, 0x00006400u, 0x000500c7u, 0x00000008u, 0x0000640bu, 0x0000c481u, 0x0000055fu, 0x0003003eu, 0x00006392u, 0x0000640bu, 0x0006000cu, 0x00000008u, 0x0000645bu, 0x00000001u, 0x0000004au, 0x0000640bu, 0x0007000cu, 0x00000008u, 0x0000645cu, 0x00000001u, 0x0000002au, 0x0000645bu, 0x00000203u, 0x0003003eu, 0x00006459u, 0x0000645cu, 0x0003003eu, 0x0000638au, 0x0000645cu, 0x000500c3u, 0x00000008u, 0x0000640fu, 0x0000644cu, 0x0000645cu, 0x000500c3u, 0x00000008u, 0x00006412u, 0x00006264u, 0x0000645cu, 0x00050082u, 0x00000008u, 0x00006413u, 0x0000640fu, 0x00006412u, 0x000500c7u, 0x00000008u, 0x00006414u, 0x00006413u, 0x00000540u, 0x0003003eu, 0x00006393u, 0x00006414u, 0x00050084u, 0x00000008u, 0x00006417u, 0x00006414u, 0x0000bbb5u, 0x000500c3u, 0x00000008u, 0x00006418u, 0x00006417u, 0x00000218u, 0x0007000cu, 0x00000008u, 0x00006419u, 0x00000001u, 0x00000027u, 0x00006418u, 0x0000025eu, 0x0003003eu, 0x0000623du, 0x00006419u, 0x0003003eu, 0x0000638du, 0x0000055eu, 0x000200f9u, 0x000063feu, 0x000200f8u, 0x000063ffu, 0x000400a8u, 0x0000005du, 0x00006402u, 0x000063dbu, 0x000300f7u, 0x00006403u, 0x00000000u, 0x000400fau, 0x00006402u, 0x00006404u, 0x00006403u, 0x000200f8u, 0x00006404u, 0x000600a9u, 0x0000005du, 0x00006408u, 0x000063cdu, 0x000063deu, 0x000063e6u, 0x000200f9u, 0x00006403u, 0x000200f8u, 0x00006403u, 0x000700f5u, 0x0000005du, 0x00006409u, 0x000063dbu, 0x000063ffu, 0x00006408u, 0x00006404u, 0x0003003eu, 0x0000638du, 0x00006409u, 0x000200f9u, 0x000063feu, 0x000200f8u, 0x000063feu, 0x000700f5u, 0x00000008u, 0x0000c4b3u, 0x0000bbb5u, 0x00006403u, 0x00006419u, 0x00006400u, 0x000700f5u, 0x0000005du, 0x0000c4afu, 0x00006409u, 0x00006403u, 0x0000055eu, 0x00006400u, 0x000200f9u, 0x000063e8u, 0x000200f8u, 0x000063e9u, 0x000400a8u, 0x0000005du, 0x000063eeu, 0x000063dbu, 0x000300f7u, 0x000063efu, 0x00000000u, 0x000400fau, 0x000063eeu, 0x000063f0u, 0x000063efu, 0x000200f8u, 0x000063f0u, 0x000600a9u, 0x0000005du, 0x000063f4u, 0x000063cdu, 0x000063deu, 0x000063e6u, 0x000200f9u, 0x000063efu, 0x000200f8u, 0x000063efu, 0x000700f5u, 0x0000005du, 0x000063f5u, 0x000063dbu, 0x000063e9u, 0x000063f4u, 0x000063f0u, 0x0003003eu, 0x0000638du, 0x000063f5u, 0x000200f9u, 0x000063e8u, 0x000200f8u, 0x000063e8u, 0x000d00f5u, 0x00000008u, 0x0000c4b1u, 0x0000bbb5u, 0x000063d0u, 0x0000bbb5u, 0x000063efu, 0x0000c4b3u, 0x000063feu, 0x0000bbb5u, 0x000063ebu, 0x0000bbb5u, 0x000063ecu, 0x000d00f5u, 0x0000005du, 0x0000c4aeu, 0x00000543u, 0x000063d0u, 0x000063f5u, 0x000063efu, 0x0000c4afu, 0x000063feu, 0x0000641cu, 0x000063ebu, 0x00006422u, 0x000063ecu, 0x000200f9u, 0x00006397u, 0x000200f8u, 0x00006397u, 0x000700f5u, 0x0000005du, 0x0000c4b6u, 0x000063d8u, 0x000063e8u, 0x00006434u, 0x0000642eu, 0x000700f5u, 0x00000008u, 0x0000c4b0u, 0x0000c4b1u, 0x000063e8u, 0x0000bbb5u, 0x0000642eu, 0x000700f5u, 0x0000005du, 0x0000c4adu, 0x0000c4aeu, 0x000063e8u, 0x0000055eu, 0x0000642eu, 0x0003003eu, 0x00006395u, 0x0000c4adu, 0x0003003eu, 0x00006221u, 0x0000c4b0u, 0x0003003eu, 0x00006235u, 0x0000c4b6u, 0x0003003eu, 0x00006236u, 0x000063cdu, 0x0004003du, 0x0000005fu, 0x000062adu, 0x00006245u, 0x0003003eu, 0x00006237u, 0x000062adu, 0x0003003eu, 0x00006234u, 0x0000c4adu, 0x000300f7u, 0x000062afu, 0x00000000u, 0x000400fau, 0x0000c4adu, 0x000062b0u, 0x000062afu, 0x000200f8u, 0x000062b0u, 0x000400a8u, 0x0000005du, 0x000062b2u, 0x00006291u, 0x000500abu, 0x0000005du, 0x000062b4u, 0x0000c4b0u, 0x00000203u, 0x000500a6u, 0x0000005du, 0x000062b5u, 0x000062b2u, 0x000062b4u, 0x000200f9u, 0x000062afu, 0x000200f8u, 0x000062afu, 0x000700f5u, 0x0000005du, 0x000062b6u, 0x0000c4adu, 0x00006397u, 0x000062b5u, 0x000062b0u, 0x000300f7u, 0x000062b7u, 0x00000000u, 0x000400fau, 0x000062b6u, 0x000062b8u, 0x000062b7u, 0x000200f8u, 0x000062b8u, 0x0004003du, 0x00000009u, 0x000062bau, 0x00006231u, 0x00080050u, 0x0000005au, 0x000062c0u, 0x0000bdf7u, 0x000062bau, 0x0000632au, 0x0000632fu, 0x0000ba69u, 0x0003003eu, 0x00006879u, 0x0000bdf7u, 0x0003003eu, 0x0000687au, 0x000062bau, 0x0003003eu, 0x0000687bu, 0x0000632au, 0x0003003eu, 0x0000687cu, 0x0000632fu, 0x0003003eu, 0x0000687du, 0x0000ba69u, 0x0003003eu, 0x00006247u, 0x0000634cu, 0x000300f7u, 0x000062c4u, 0x00000000u, 0x000400fau, 0x0000628du, 0x000062c5u, 0x000062c4u, 0x000200f8u, 0x000062c5u, 0x0003003eu, 0x0000688fu, 0x0000bdf7u, 0x0003003eu, 0x00006890u, 0x000062bau, 0x0003003eu, 0x00006891u, 0x0000632au, 0x0003003eu, 0x00006892u, 0x0000632fu, 0x0003003eu, 0x00006893u, 0x0000ba69u, 0x0003003eu, 0x00006249u, 0x0000634cu, 0x0003003eu, 0x0000624au, 0x00006279u, 0x0003003eu, 0x0000624bu, 0x0000c4b6u, 0x0003003eu, 0x0000624cu, 0x00006289u, 0x0003003eu, 0x0000624du, 0x000063cdu, 0x0003003eu, 0x0000624eu, 0x000062adu, 0x0003003eu, 0x0000624fu, 0x00000543u, 0x0003003eu, 0x0000645du, 0x00000543u, 0x00050041u, 0x0000003eu, 0x00006468u, 0x00006249u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006469u, 0x00006468u, 0x000300f7u, 0x0000646au, 0x00000000u, 0x000b00fbu, 0x00006469u, 0x0000646au, 0x00000000u, 0x0000646bu, 0x00000001u, 0x0000646cu, 0x00000002u, 0x0000646du, 0x00000003u, 0x0000646eu, 0x000200f8u, 0x0000646eu, 0x0004003du, 0x00000009u, 0x00006479u, 0x00006891u, 0x0008004fu, 0x0000003cu, 0x0000647au, 0x00006479u, 0x00006479u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000645fu, 0x0000647au, 0x000200f9u, 0x0000646au, 0x000200f8u, 0x0000646du, 0x0008004fu, 0x0000003cu, 0x00006477u, 0x0000632fu, 0x0000632fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000645fu, 0x00006477u, 0x000200f9u, 0x0000646au, 0x000200f8u, 0x0000646cu, 0x0004003du, 0x00000009u, 0x00006473u, 0x00006890u, 0x0008004fu, 0x0000003cu, 0x00006474u, 0x00006473u, 0x00006473u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000645fu, 0x00006474u, 0x000200f9u, 0x0000646au, 0x000200f8u, 0x0000646bu, 0x0004003du, 0x00000009u, 0x00006470u, 0x0000688fu, 0x0008004fu, 0x0000003cu, 0x00006471u, 0x00006470u, 0x00006470u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000645fu, 0x00006471u, 0x000200f9u, 0x0000646au, 0x000200f8u, 0x0000646au, 0x000d00f5u, 0x0000003cu, 0x0000c81cu, 0x0000c828u, 0x000062c5u, 0x00006471u, 0x0000646bu, 0x00006474u, 0x0000646cu, 0x00006477u, 0x0000646du, 0x0000647au, 0x0000646eu, 0x00050041u, 0x0000003eu, 0x00006485u, 0x00006249u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006486u, 0x00006485u, 0x000300f7u, 0x00006487u, 0x00000000u, 0x000b00fbu, 0x00006486u, 0x00006487u, 0x00000000u, 0x00006488u, 0x00000001u, 0x00006489u, 0x00000002u, 0x0000648au, 0x00000003u, 0x0000648bu, 0x000200f8u, 0x0000648bu, 0x0004003du, 0x00000009u, 0x00006496u, 0x00006891u, 0x0008004fu, 0x0000003cu, 0x00006497u, 0x00006496u, 0x00006496u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006460u, 0x00006497u, 0x000200f9u, 0x00006487u, 0x000200f8u, 0x0000648au, 0x0008004fu, 0x0000003cu, 0x00006494u, 0x0000632fu, 0x0000632fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006460u, 0x00006494u, 0x000200f9u, 0x00006487u, 0x000200f8u, 0x00006489u, 0x0004003du, 0x00000009u, 0x00006490u, 0x00006890u, 0x0008004fu, 0x0000003cu, 0x00006491u, 0x00006490u, 0x00006490u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006460u, 0x00006491u, 0x000200f9u, 0x00006487u, 0x000200f8u, 0x00006488u, 0x0004003du, 0x00000009u, 0x0000648du, 0x0000688fu, 0x0008004fu, 0x0000003cu, 0x0000648eu, 0x0000648du, 0x0000648du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006460u, 0x0000648eu, 0x000200f9u, 0x00006487u, 0x000200f8u, 0x00006487u, 0x00050041u, 0x0000003eu, 0x000064b3u, 0x00006249u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000064b4u, 0x000064b3u, 0x000300f7u, 0x000064b5u, 0x00000000u, 0x000b00fbu, 0x000064b4u, 0x000064b5u, 0x00000000u, 0x000064b6u, 0x00000001u, 0x000064b7u, 0x00000002u, 0x000064b8u, 0x00000003u, 0x000064b9u, 0x000200f8u, 0x000064b9u, 0x0003003eu, 0x00006461u, 0x00000203u, 0x000200f9u, 0x000064b5u, 0x000200f8u, 0x000064b8u, 0x0003003eu, 0x00006461u, 0x0000ba69u, 0x000200f9u, 0x000064b5u, 0x000200f8u, 0x000064b7u, 0x00050041u, 0x0000003eu, 0x0000689bu, 0x00006891u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064bdu, 0x0000689bu, 0x0003003eu, 0x00006461u, 0x000064bdu, 0x000200f9u, 0x000064b5u, 0x000200f8u, 0x000064b6u, 0x00050041u, 0x0000003eu, 0x0000689au, 0x0000688fu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064bbu, 0x0000689au, 0x0003003eu, 0x00006461u, 0x000064bbu, 0x000200f9u, 0x000064b5u, 0x000200f8u, 0x000064b5u, 0x000d00f5u, 0x00000008u, 0x0000c54du, 0x0000c55du, 0x00006487u, 0x000064bbu, 0x000064b6u, 0x000064bdu, 0x000064b7u, 0x0000ba69u, 0x000064b8u, 0x00000203u, 0x000064b9u, 0x00050041u, 0x0000003eu, 0x000064c0u, 0x00006249u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064c1u, 0x000064c0u, 0x000300f7u, 0x000064c2u, 0x00000000u, 0x000b00fbu, 0x000064c1u, 0x000064c2u, 0x00000000u, 0x000064c3u, 0x00000001u, 0x000064c4u, 0x00000002u, 0x000064c5u, 0x00000003u, 0x000064c6u, 0x000200f8u, 0x000064c6u, 0x0003003eu, 0x00006462u, 0x00000203u, 0x000200f9u, 0x000064c2u, 0x000200f8u, 0x000064c5u, 0x0003003eu, 0x00006462u, 0x0000038bu, 0x000200f9u, 0x000064c2u, 0x000200f8u, 0x000064c4u, 0x00050041u, 0x0000003eu, 0x0000689cu, 0x00006890u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000064cbu, 0x0000689cu, 0x0003003eu, 0x00006462u, 0x000064cbu, 0x000200f9u, 0x000064c2u, 0x000200f8u, 0x000064c3u, 0x000400c8u, 0x00000008u, 0x000064c8u, 0x0000c54du, 0x000500c7u, 0x00000008u, 0x000064c9u, 0x000064c8u, 0x0000038bu, 0x0003003eu, 0x00006462u, 0x000064c9u, 0x000200f9u, 0x000064c2u, 0x000200f8u, 0x000064c2u, 0x000d00f5u, 0x00000008u, 0x0000c6b1u, 0x0000c6c2u, 0x000064b5u, 0x000064c9u, 0x000064c3u, 0x000064cbu, 0x000064c4u, 0x0000038bu, 0x000064c5u, 0x00000203u, 0x000064c6u, 0x000500c3u, 0x00000008u, 0x000064cdu, 0x0000c54du, 0x00000218u, 0x0003003eu, 0x00006461u, 0x000064cdu, 0x000500c3u, 0x00000008u, 0x000064cfu, 0x0000c6b1u, 0x00000218u, 0x0003003eu, 0x00006462u, 0x000064cfu, 0x0004003du, 0x00000008u, 0x000064d1u, 0x000064c0u, 0x000500aau, 0x0000005du, 0x000064d2u, 0x000064d1u, 0x00000212u, 0x000300f7u, 0x000064d3u, 0x00000000u, 0x000400fau, 0x000064d2u, 0x000064d4u, 0x000064d3u, 0x000200f8u, 0x000064d4u, 0x00050041u, 0x0000003eu, 0x000064d6u, 0x0000624eu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000064d7u, 0x000064d6u, 0x000500c3u, 0x00000008u, 0x000064d8u, 0x000064cdu, 0x000064d7u, 0x000500c7u, 0x00000008u, 0x000064d9u, 0x000064d8u, 0x000004cdu, 0x0003003eu, 0x00006461u, 0x000064d9u, 0x00050041u, 0x0000003eu, 0x000064dbu, 0x0000624eu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000064dcu, 0x000064dbu, 0x000500c3u, 0x00000008u, 0x000064ddu, 0x000064cfu, 0x000064dcu, 0x000500c5u, 0x00000008u, 0x000064deu, 0x000064ddu, 0x00000218u, 0x0003003eu, 0x00006462u, 0x000064deu, 0x000200f9u, 0x000064d3u, 0x000200f8u, 0x000064d3u, 0x000700f5u, 0x00000008u, 0x0000c97bu, 0x000064cfu, 0x000064c2u, 0x000064deu, 0x000064d4u, 0x000700f5u, 0x00000008u, 0x0000c815u, 0x000064cdu, 0x000064c2u, 0x000064d9u, 0x000064d4u, 0x0004003du, 0x0000003cu, 0x000064dfu, 0x00006460u, 0x00050051u, 0x00000008u, 0x000064e0u, 0x000064dfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000064e1u, 0x000064dfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000064e2u, 0x000064dfu, 0x00000002u, 0x00060050u, 0x0000003cu, 0x000064e5u, 0x0000c815u, 0x0000c815u, 0x0000c815u, 0x00050084u, 0x0000003cu, 0x000064e6u, 0x000064dfu, 0x000064e5u, 0x00050051u, 0x00000008u, 0x000064e8u, 0x0000c81cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000064e9u, 0x0000c81cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000064eau, 0x0000c81cu, 0x00000002u, 0x00050080u, 0x00000008u, 0x000064edu, 0x0000c97bu, 0x00000212u, 0x00060050u, 0x0000003cu, 0x000064eeu, 0x000064edu, 0x000064edu, 0x000064edu, 0x00050084u, 0x0000003cu, 0x000064efu, 0x0000c81cu, 0x000064eeu, 0x00050080u, 0x0000003cu, 0x000064f0u, 0x000064e6u, 0x000064efu, 0x0003003eu, 0x00006463u, 0x000064f0u, 0x0004003du, 0x0000003cu, 0x000064f8u, 0x00006463u, 0x000500c3u, 0x0000003cu, 0x000064fau, 0x000064f8u, 0x0000eef5u, 0x00050051u, 0x00000008u, 0x000064fbu, 0x000064fau, 0x00000000u, 0x00050051u, 0x00000008u, 0x000064fcu, 0x000064fau, 0x00000001u, 0x00050051u, 0x00000008u, 0x000064fdu, 0x000064fau, 0x00000002u, 0x0003003eu, 0x00006460u, 0x000064fau, 0x0004003du, 0x0000003cu, 0x00006529u, 0x00006460u, 0x000500c7u, 0x0000003cu, 0x0000652bu, 0x00006529u, 0x0000039du, 0x0003003eu, 0x0000645du, 0x0000055eu, 0x0003003eu, 0x0000645eu, 0x0000652bu, 0x0003003eu, 0x00006465u, 0x0000652bu, 0x0009004fu, 0x00000009u, 0x000062d0u, 0x0000bdf7u, 0x0000652bu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00006879u, 0x000062d0u, 0x0003003eu, 0x00006247u, 0x00006351u, 0x000200f9u, 0x000062c4u, 0x000200f8u, 0x000062c4u, 0x000700f5u, 0x0000003cu, 0x0000e9a7u, 0x0000c828u, 0x000062b8u, 0x0000c81cu, 0x000064d3u, 0x000700f5u, 0x00000008u, 0x0000e97fu, 0x0000c6c2u, 0x000062b8u, 0x0000c97bu, 0x000064d3u, 0x000700f5u, 0x00000008u, 0x0000e957u, 0x0000c55du, 0x000062b8u, 0x0000c815u, 0x000064d3u, 0x000700f5u, 0x00000009u, 0x0000c9e8u, 0x0000bdf7u, 0x000062b8u, 0x000062d0u, 0x000064d3u, 0x00070050u, 0x000005f9u, 0x0000ef13u, 0x0000628du, 0x0000628du, 0x0000628du, 0x0000628du, 0x000600a9u, 0x00000009u, 0x0000ef14u, 0x0000ef13u, 0x00006351u, 0x0000634cu, 0x00080050u, 0x0000005au, 0x0000688eu, 0x0000c9e8u, 0x000062bau, 0x0000632au, 0x0000632fu, 0x0000ba69u, 0x0003003eu, 0x0000689du, 0x0000c9e8u, 0x0003003eu, 0x0000689eu, 0x000062bau, 0x0003003eu, 0x0000689fu, 0x0000632au, 0x0003003eu, 0x000068a0u, 0x0000632fu, 0x0003003eu, 0x000068a1u, 0x0000ba69u, 0x0003003eu, 0x00006252u, 0x0000ef14u, 0x0003003eu, 0x00006253u, 0x00006279u, 0x0003003eu, 0x00006254u, 0x0000c4b6u, 0x0003003eu, 0x00006255u, 0x00006289u, 0x0003003eu, 0x00006256u, 0x000063cdu, 0x0003003eu, 0x00006257u, 0x000062adu, 0x0003003eu, 0x00006258u, 0x0000055eu, 0x0003003eu, 0x0000652du, 0x00000543u, 0x000300f7u, 0x00006536u, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00006537u, 0x000200f8u, 0x00006537u, 0x00050041u, 0x0000003eu, 0x00006538u, 0x00006252u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006539u, 0x00006538u, 0x000300f7u, 0x0000653au, 0x00000000u, 0x000b00fbu, 0x00006539u, 0x0000653au, 0x00000000u, 0x0000653bu, 0x00000001u, 0x0000653cu, 0x00000002u, 0x0000653du, 0x00000003u, 0x0000653eu, 0x000200f8u, 0x0000653eu, 0x0004003du, 0x00000009u, 0x00006549u, 0x0000689fu, 0x0008004fu, 0x0000003cu, 0x0000654au, 0x00006549u, 0x00006549u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000652fu, 0x0000654au, 0x000200f9u, 0x0000653au, 0x000200f8u, 0x0000653du, 0x0008004fu, 0x0000003cu, 0x00006547u, 0x0000632fu, 0x0000632fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000652fu, 0x00006547u, 0x000200f9u, 0x0000653au, 0x000200f8u, 0x0000653cu, 0x0004003du, 0x00000009u, 0x00006543u, 0x0000689eu, 0x0008004fu, 0x0000003cu, 0x00006544u, 0x00006543u, 0x00006543u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000652fu, 0x00006544u, 0x000200f9u, 0x0000653au, 0x000200f8u, 0x0000653bu, 0x0004003du, 0x00000009u, 0x00006540u, 0x0000689du, 0x0008004fu, 0x0000003cu, 0x00006541u, 0x00006540u, 0x00006540u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000652fu, 0x00006541u, 0x000200f9u, 0x0000653au, 0x000200f8u, 0x0000653au, 0x000d00f5u, 0x0000003cu, 0x0000cd25u, 0x0000cd32u, 0x00006537u, 0x00006541u, 0x0000653bu, 0x00006544u, 0x0000653cu, 0x00006547u, 0x0000653du, 0x0000654au, 0x0000653eu, 0x000400a8u, 0x0000005du, 0x00006550u, 0x000063cdu, 0x000500a7u, 0x0000005du, 0x00006551u, 0x00006289u, 0x00006550u, 0x000300f7u, 0x00006552u, 0x00000000u, 0x000400fau, 0x00006551u, 0x00006553u, 0x00006552u, 0x000200f8u, 0x00006553u, 0x0003003eu, 0x0000652du, 0x0000055eu, 0x0003003eu, 0x0000652eu, 0x0000cd25u, 0x000200f9u, 0x00006536u, 0x000200f8u, 0x00006552u, 0x00050041u, 0x0000003eu, 0x00006555u, 0x00006252u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006556u, 0x00006555u, 0x000300f7u, 0x00006557u, 0x00000000u, 0x000b00fbu, 0x00006556u, 0x00006557u, 0x00000000u, 0x00006558u, 0x00000001u, 0x00006559u, 0x00000002u, 0x0000655au, 0x00000003u, 0x0000655bu, 0x000200f8u, 0x0000655bu, 0x0004003du, 0x00000009u, 0x00006566u, 0x0000689fu, 0x0008004fu, 0x0000003cu, 0x00006567u, 0x00006566u, 0x00006566u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006530u, 0x00006567u, 0x000200f9u, 0x00006557u, 0x000200f8u, 0x0000655au, 0x0008004fu, 0x0000003cu, 0x00006564u, 0x0000632fu, 0x0000632fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006530u, 0x00006564u, 0x000200f9u, 0x00006557u, 0x000200f8u, 0x00006559u, 0x0004003du, 0x00000009u, 0x00006560u, 0x0000689eu, 0x0008004fu, 0x0000003cu, 0x00006561u, 0x00006560u, 0x00006560u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006530u, 0x00006561u, 0x000200f9u, 0x00006557u, 0x000200f8u, 0x00006558u, 0x0004003du, 0x00000009u, 0x0000655du, 0x0000689du, 0x0008004fu, 0x0000003cu, 0x0000655eu, 0x0000655du, 0x0000655du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006530u, 0x0000655eu, 0x000200f9u, 0x00006557u, 0x000200f8u, 0x00006557u, 0x000400a8u, 0x0000005du, 0x0000656cu, 0x0000c4b6u, 0x000400a8u, 0x0000005du, 0x0000656du, 0x0000656cu, 0x000300f7u, 0x0000656eu, 0x00000000u, 0x000400fau, 0x0000656du, 0x0000656fu, 0x0000656eu, 0x000200f8u, 0x0000656fu, 0x00050041u, 0x0000003eu, 0x00006570u, 0x00006252u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00006571u, 0x00006570u, 0x000500aau, 0x0000005du, 0x00006572u, 0x00006571u, 0x00000203u, 0x000300f7u, 0x00006573u, 0x00000000u, 0x000400fau, 0x00006572u, 0x00006574u, 0x00006573u, 0x000200f8u, 0x00006574u, 0x00050041u, 0x0000003eu, 0x00006575u, 0x00006252u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006576u, 0x00006575u, 0x000500aau, 0x0000005du, 0x00006577u, 0x00006576u, 0x00000203u, 0x000200f9u, 0x00006573u, 0x000200f8u, 0x00006573u, 0x000700f5u, 0x0000005du, 0x00006578u, 0x00006572u, 0x0000656fu, 0x00006577u, 0x00006574u, 0x000300f7u, 0x00006579u, 0x00000000u, 0x000400fau, 0x00006578u, 0x0000657au, 0x00006579u, 0x000200f8u, 0x0000657au, 0x00050041u, 0x0000003eu, 0x000068a7u, 0x0000689du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000657cu, 0x000068a7u, 0x000500aau, 0x0000005du, 0x0000657du, 0x0000657cu, 0x0000038bu, 0x000200f9u, 0x00006579u, 0x000200f8u, 0x00006579u, 0x000700f5u, 0x0000005du, 0x0000657eu, 0x00006578u, 0x00006573u, 0x0000657du, 0x0000657au, 0x000200f9u, 0x0000656eu, 0x000200f8u, 0x0000656eu, 0x000700f5u, 0x0000005du, 0x0000657fu, 0x0000656cu, 0x00006557u, 0x0000657eu, 0x00006579u, 0x000300f7u, 0x00006580u, 0x00000000u, 0x000400fau, 0x0000657fu, 0x00006581u, 0x00006580u, 0x000200f8u, 0x00006581u, 0x0004003du, 0x0000003cu, 0x00006582u, 0x00006530u, 0x0003003eu, 0x0000652du, 0x0000055eu, 0x0003003eu, 0x0000652eu, 0x00006582u, 0x000200f9u, 0x00006536u, 0x000200f8u, 0x00006580u, 0x00050041u, 0x0000003eu, 0x00006583u, 0x00006252u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00006584u, 0x00006583u, 0x000300f7u, 0x00006585u, 0x00000000u, 0x000b00fbu, 0x00006584u, 0x00006585u, 0x00000000u, 0x00006586u, 0x00000001u, 0x00006587u, 0x00000002u, 0x00006588u, 0x00000003u, 0x00006589u, 0x000200f8u, 0x00006589u, 0x0003003eu, 0x00006531u, 0x00000203u, 0x000200f9u, 0x00006585u, 0x000200f8u, 0x00006588u, 0x0003003eu, 0x00006531u, 0x0000ba69u, 0x000200f9u, 0x00006585u, 0x000200f8u, 0x00006587u, 0x00050041u, 0x0000003eu, 0x000068a9u, 0x0000689fu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000658du, 0x000068a9u, 0x0003003eu, 0x00006531u, 0x0000658du, 0x000200f9u, 0x00006585u, 0x000200f8u, 0x00006586u, 0x00050041u, 0x0000003eu, 0x000068a8u, 0x0000689du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000658bu, 0x000068a8u, 0x0003003eu, 0x00006531u, 0x0000658bu, 0x000200f9u, 0x00006585u, 0x000200f8u, 0x00006585u, 0x000d00f5u, 0x00000008u, 0x0000ca3cu, 0x0000ca4du, 0x00006580u, 0x0000658bu, 0x00006586u, 0x0000658du, 0x00006587u, 0x0000ba69u, 0x00006588u, 0x00000203u, 0x00006589u, 0x00050041u, 0x0000003eu, 0x00006590u, 0x00006252u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00006591u, 0x00006590u, 0x000300f7u, 0x00006592u, 0x00000000u, 0x000b00fbu, 0x00006591u, 0x00006592u, 0x00000000u, 0x00006593u, 0x00000001u, 0x00006594u, 0x00000002u, 0x00006595u, 0x00000003u, 0x00006596u, 0x000200f8u, 0x00006596u, 0x0003003eu, 0x00006532u, 0x00000203u, 0x000200f9u, 0x00006592u, 0x000200f8u, 0x00006595u, 0x0003003eu, 0x00006532u, 0x0000038bu, 0x000200f9u, 0x00006592u, 0x000200f8u, 0x00006594u, 0x00050041u, 0x0000003eu, 0x000068aau, 0x0000689eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000659bu, 0x000068aau, 0x0003003eu, 0x00006532u, 0x0000659bu, 0x000200f9u, 0x00006592u, 0x000200f8u, 0x00006593u, 0x000400c8u, 0x00000008u, 0x00006598u, 0x0000ca3cu, 0x000500c7u, 0x00000008u, 0x00006599u, 0x00006598u, 0x0000038bu, 0x0003003eu, 0x00006532u, 0x00006599u, 0x000200f9u, 0x00006592u, 0x000200f8u, 0x00006592u, 0x000d00f5u, 0x00000008u, 0x0000cbadu, 0x0000cbbfu, 0x00006585u, 0x00006599u, 0x00006593u, 0x0000659bu, 0x00006594u, 0x0000038bu, 0x00006595u, 0x00000203u, 0x00006596u, 0x000500c3u, 0x00000008u, 0x0000659du, 0x0000ca3cu, 0x00000218u, 0x0003003eu, 0x00006531u, 0x0000659du, 0x000500c3u, 0x00000008u, 0x0000659fu, 0x0000cbadu, 0x00000218u, 0x0003003eu, 0x00006532u, 0x0000659fu, 0x0004003du, 0x00000008u, 0x000065a1u, 0x00006590u, 0x000500aau, 0x0000005du, 0x000065a2u, 0x000065a1u, 0x00000212u, 0x000300f7u, 0x000065a3u, 0x00000000u, 0x000400fau, 0x000065a2u, 0x000065a4u, 0x000065a3u, 0x000200f8u, 0x000065a4u, 0x00050041u, 0x0000003eu, 0x000065a6u, 0x00006257u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000065a7u, 0x000065a6u, 0x000500c3u, 0x00000008u, 0x000065a8u, 0x0000659du, 0x000065a7u, 0x000500c7u, 0x00000008u, 0x000065a9u, 0x000065a8u, 0x000004cdu, 0x0003003eu, 0x00006531u, 0x000065a9u, 0x00050041u, 0x0000003eu, 0x000065abu, 0x00006257u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000065acu, 0x000065abu, 0x000500c3u, 0x00000008u, 0x000065adu, 0x0000659fu, 0x000065acu, 0x000500c5u, 0x00000008u, 0x000065aeu, 0x000065adu, 0x00000218u, 0x0003003eu, 0x00006532u, 0x000065aeu, 0x000200f9u, 0x000065a3u, 0x000200f8u, 0x000065a3u, 0x000700f5u, 0x00000008u, 0x0000ce91u, 0x0000659fu, 0x00006592u, 0x000065aeu, 0x000065a4u, 0x000700f5u, 0x00000008u, 0x0000cd1eu, 0x0000659du, 0x00006592u, 0x000065a9u, 0x000065a4u, 0x0004003du, 0x0000003cu, 0x000065afu, 0x00006530u, 0x00050051u, 0x00000008u, 0x000065b0u, 0x000065afu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000065b1u, 0x000065afu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000065b2u, 0x000065afu, 0x00000002u, 0x00060050u, 0x0000003cu, 0x000065b5u, 0x0000cd1eu, 0x0000cd1eu, 0x0000cd1eu, 0x00050084u, 0x0000003cu, 0x000065b6u, 0x000065afu, 0x000065b5u, 0x00050051u, 0x00000008u, 0x000065b8u, 0x0000cd25u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000065b9u, 0x0000cd25u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000065bau, 0x0000cd25u, 0x00000002u, 0x00050080u, 0x00000008u, 0x000065bdu, 0x0000ce91u, 0x00000212u, 0x00060050u, 0x0000003cu, 0x000065beu, 0x000065bdu, 0x000065bdu, 0x000065bdu, 0x00050084u, 0x0000003cu, 0x000065bfu, 0x0000cd25u, 0x000065beu, 0x00050080u, 0x0000003cu, 0x000065c0u, 0x000065b6u, 0x000065bfu, 0x0003003eu, 0x00006533u, 0x000065c0u, 0x000500a6u, 0x0000005du, 0x000065c4u, 0x00000543u, 0x00006279u, 0x000300f7u, 0x000065c5u, 0x00000000u, 0x000400fau, 0x000065c4u, 0x000065c6u, 0x000065c7u, 0x000200f8u, 0x000065c7u, 0x000500c3u, 0x00000008u, 0x000065d0u, 0x0000cd1eu, 0x00000215u, 0x000500c3u, 0x00000008u, 0x000065d2u, 0x0000ce91u, 0x00000215u, 0x00050080u, 0x00000008u, 0x000065d3u, 0x000065d0u, 0x000065d2u, 0x00050080u, 0x00000008u, 0x000065d4u, 0x000065d3u, 0x00000212u, 0x0003003eu, 0x00006534u, 0x000065d4u, 0x0004003du, 0x0000003cu, 0x000065d5u, 0x00006533u, 0x000500c3u, 0x0000003cu, 0x000065d7u, 0x000065d5u, 0x0000eef6u, 0x0003003eu, 0x00006533u, 0x000065d7u, 0x0004003du, 0x0000003cu, 0x000065d8u, 0x00006533u, 0x000500c7u, 0x0000003cu, 0x000065dau, 0x000065d8u, 0x0000eef7u, 0x0003003eu, 0x00006533u, 0x000065dau, 0x0004003du, 0x00000502u, 0x000065dbu, 0x00000504u, 0x000500c4u, 0x00000008u, 0x000065ddu, 0x000065d4u, 0x0000026fu, 0x00050041u, 0x0000003eu, 0x000065deu, 0x00006533u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000065dfu, 0x000065deu, 0x000500c5u, 0x00000008u, 0x000065e0u, 0x000065ddu, 0x000065dfu, 0x0005005fu, 0x00000237u, 0x000065e1u, 0x000065dbu, 0x000065e0u, 0x00050051u, 0x00000006u, 0x000065e2u, 0x000065e1u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x000065e3u, 0x000065e2u, 0x00050041u, 0x0000003eu, 0x000065e4u, 0x00006530u, 0x00000374u, 0x0003003eu, 0x000065e4u, 0x000065e3u, 0x00050041u, 0x0000003eu, 0x000065e8u, 0x00006533u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000065e9u, 0x000065e8u, 0x000500c5u, 0x00000008u, 0x000065eau, 0x000065ddu, 0x000065e9u, 0x0005005fu, 0x00000237u, 0x000065ebu, 0x000065dbu, 0x000065eau, 0x00050051u, 0x00000006u, 0x000065ecu, 0x000065ebu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x000065edu, 0x000065ecu, 0x00050041u, 0x0000003eu, 0x000065eeu, 0x00006530u, 0x00000485u, 0x0003003eu, 0x000065eeu, 0x000065edu, 0x00050041u, 0x0000003eu, 0x000065f2u, 0x00006533u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000065f3u, 0x000065f2u, 0x000500c5u, 0x00000008u, 0x000065f4u, 0x000065ddu, 0x000065f3u, 0x0005005fu, 0x00000237u, 0x000065f5u, 0x000065dbu, 0x000065f4u, 0x00050051u, 0x00000006u, 0x000065f6u, 0x000065f5u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x000065f7u, 0x000065f6u, 0x00050041u, 0x0000003eu, 0x000065f8u, 0x00006530u, 0x000003c4u, 0x0003003eu, 0x000065f8u, 0x000065f7u, 0x000200f9u, 0x000065c5u, 0x000200f8u, 0x000065c6u, 0x0004003du, 0x0000003cu, 0x000065c8u, 0x00006533u, 0x000500c3u, 0x0000003cu, 0x000065cau, 0x000065c8u, 0x0000eef5u, 0x00050051u, 0x00000008u, 0x000065cbu, 0x000065cau, 0x00000000u, 0x00050051u, 0x00000008u, 0x000065ccu, 0x000065cau, 0x00000001u, 0x00050051u, 0x00000008u, 0x000065cdu, 0x000065cau, 0x00000002u, 0x0003003eu, 0x00006530u, 0x000065cau, 0x000200f9u, 0x000065c5u, 0x000200f8u, 0x000065c5u, 0x0004003du, 0x0000003cu, 0x000065f9u, 0x00006530u, 0x000500c7u, 0x0000003cu, 0x000065fbu, 0x000065f9u, 0x0000039du, 0x0003003eu, 0x0000652du, 0x0000055eu, 0x0003003eu, 0x0000652eu, 0x000065fbu, 0x000200f9u, 0x00006536u, 0x000200f8u, 0x00006536u, 0x000900f5u, 0x00000008u, 0x0000e9e8u, 0x0000cbbfu, 0x00006553u, 0x0000cbbfu, 0x00006581u, 0x0000ce91u, 0x000065c5u, 0x000900f5u, 0x00000008u, 0x0000e9cdu, 0x0000ca4du, 0x00006553u, 0x0000ca4du, 0x00006581u, 0x0000cd1eu, 0x000065c5u, 0x000900f5u, 0x0000003cu, 0x0000cea3u, 0x0000cd25u, 0x00006553u, 0x00006582u, 0x00006581u, 0x000065fbu, 0x000065c5u, 0x0003003eu, 0x00006535u, 0x0000cea3u, 0x0003003eu, 0x00006250u, 0x0000cea3u, 0x000300f7u, 0x000062dcu, 0x00000000u, 0x000400fau, 0x00006295u, 0x000062ddu, 0x000062dcu, 0x000200f8u, 0x000062ddu, 0x0003003eu, 0x00006259u, 0x0000cea3u, 0x0003003eu, 0x0000625au, 0x00006267u, 0x00060050u, 0x0000003cu, 0x00006603u, 0x00006267u, 0x00006267u, 0x00006267u, 0x000500c3u, 0x0000003cu, 0x00006604u, 0x00006603u, 0x00000392u, 0x000500c7u, 0x0000003cu, 0x00006606u, 0x00006604u, 0x0000eef2u, 0x0003003eu, 0x000065fdu, 0x00006606u, 0x000500c7u, 0x0000003cu, 0x00006609u, 0x0000cea3u, 0x0000eef1u, 0x00050080u, 0x0000003cu, 0x0000660bu, 0x00006609u, 0x0000eef3u, 0x000500adu, 0x000003a1u, 0x0000660du, 0x0000cea3u, 0x000003a0u, 0x000600a9u, 0x0000003cu, 0x0000660eu, 0x0000660du, 0x0000039du, 0x0000660bu, 0x0003003eu, 0x000065feu, 0x0000660eu, 0x000500c7u, 0x0000003cu, 0x00006612u, 0x0000cea3u, 0x0000eef2u, 0x00050082u, 0x0000003cu, 0x00006613u, 0x00006606u, 0x00006612u, 0x000500c3u, 0x0000003cu, 0x00006615u, 0x00006613u, 0x0000eef4u, 0x0003003eu, 0x000065ffu, 0x00006615u, 0x00050082u, 0x0000003cu, 0x00006618u, 0x0000660eu, 0x0000cea3u, 0x0003003eu, 0x00006600u, 0x00006618u, 0x000500c7u, 0x0000003cu, 0x0000661cu, 0x00006618u, 0x00006615u, 0x00050080u, 0x0000003cu, 0x0000661du, 0x0000cea3u, 0x0000661cu, 0x0003003eu, 0x000065feu, 0x0000661du, 0x000500c7u, 0x0000003cu, 0x00006620u, 0x0000661du, 0x0000039du, 0x00050051u, 0x00000008u, 0x00006621u, 0x00006620u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006622u, 0x00006620u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006623u, 0x00006620u, 0x00000002u, 0x0003003eu, 0x00006601u, 0x00006620u, 0x0003003eu, 0x00006250u, 0x00006620u, 0x000200f9u, 0x000062dcu, 0x000200f8u, 0x000062dcu, 0x000700f5u, 0x0000003cu, 0x0000cf6bu, 0x0000cea3u, 0x00006536u, 0x00006620u, 0x000062ddu, 0x0003003eu, 0x0000625cu, 0x0000c4b0u, 0x0003003eu, 0x0000625du, 0x0000629au, 0x0003003eu, 0x0000625eu, 0x0000c4b6u, 0x0003003eu, 0x0000625fu, 0x00006359u, 0x0003003eu, 0x00006625u, 0x00000203u, 0x000300f7u, 0x00006628u, 0x00000000u, 0x000b00fbu, 0x00006359u, 0x00006628u, 0x00000000u, 0x00006629u, 0x00000001u, 0x0000662au, 0x00000002u, 0x0000662bu, 0x00000003u, 0x0000662cu, 0x000200f8u, 0x0000662cu, 0x0003003eu, 0x00006625u, 0x0000629au, 0x000200f9u, 0x00006628u, 0x000200f8u, 0x0000662bu, 0x0003003eu, 0x00006625u, 0x00000224u, 0x000200f9u, 0x00006628u, 0x000200f8u, 0x0000662au, 0x00050080u, 0x00000008u, 0x0000663au, 0x0000c4b0u, 0x0000629au, 0x000500c7u, 0x00000008u, 0x0000663bu, 0x0000663au, 0x00000224u, 0x0003003eu, 0x00006625u, 0x0000663bu, 0x000200f9u, 0x00006628u, 0x000200f8u, 0x00006629u, 0x000300f7u, 0x0000662eu, 0x00000000u, 0x000400fau, 0x0000c4b6u, 0x0000662fu, 0x00006630u, 0x000200f8u, 0x00006630u, 0x00050082u, 0x00000008u, 0x00006636u, 0x0000c4b0u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00006637u, 0x00006636u, 0x00000224u, 0x0003003eu, 0x00006625u, 0x00006637u, 0x000200f9u, 0x0000662eu, 0x000200f8u, 0x0000662fu, 0x00050080u, 0x00000008u, 0x00006633u, 0x0000629au, 0x0000c4b0u, 0x0007000cu, 0x00000008u, 0x00006634u, 0x00000001u, 0x00000027u, 0x00000224u, 0x00006633u, 0x0003003eu, 0x00006625u, 0x00006634u, 0x000200f9u, 0x0000662eu, 0x000200f8u, 0x0000662eu, 0x000700f5u, 0x00000008u, 0x0000cf69u, 0x00006634u, 0x0000662fu, 0x00006637u, 0x00006630u, 0x000200f9u, 0x00006628u, 0x000200f8u, 0x00006628u, 0x000d00f5u, 0x00000008u, 0x0000cf68u, 0x00000203u, 0x000062dcu, 0x0000cf69u, 0x0000662eu, 0x0000663bu, 0x0000662au, 0x00000224u, 0x0000662bu, 0x0000629au, 0x0000662cu, 0x0003003eu, 0x00006626u, 0x0000cf68u, 0x0003003eu, 0x0000625bu, 0x0000cf68u, 0x000500c4u, 0x00000008u, 0x000062e9u, 0x0000cf68u, 0x0000021eu, 0x00050051u, 0x00000008u, 0x000062eau, 0x0000cf6bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000062ebu, 0x0000cf6bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000062ecu, 0x0000cf6bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000062edu, 0x000062eau, 0x000062ebu, 0x000062ecu, 0x000062e9u, 0x0003003eu, 0x00006260u, 0x000062edu, 0x000300f7u, 0x0000663eu, 0x00000000u, 0x000400fau, 0x0000095au, 0x0000663fu, 0x00006640u, 0x000200f8u, 0x00006640u, 0x0003003eu, 0x00000671u, 0x000062edu, 0x000200f9u, 0x0000663eu, 0x000200f8u, 0x0000663fu, 0x0008004fu, 0x0000003cu, 0x00006642u, 0x000062edu, 0x000062edu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00006643u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00006644u, 0x00006643u, 0x000062edu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00006644u, 0x000200f9u, 0x0000663eu, 0x000200f8u, 0x0000663eu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000300f7u, 0x000062f0u, 0x00000000u, 0x000400fau, 0x00006281u, 0x000062f1u, 0x000062f2u, 0x000200f8u, 0x000062f2u, 0x000300f7u, 0x000062fau, 0x00000000u, 0x000400fau, 0x00000850u, 0x000062fbu, 0x000062fau, 0x000200f8u, 0x000062fbu, 0x000300f7u, 0x0000668au, 0x00000000u, 0x000700fbu, 0x00000657u, 0x0000668au, 0x00000002u, 0x0000668bu, 0x00000003u, 0x0000668cu, 0x000200f8u, 0x0000668cu, 0x0004003du, 0x00000009u, 0x000066a9u, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x000066aau, 0x000066a9u, 0x000066a9u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x000066abu, 0x000066aau, 0x0003003eu, 0x00006687u, 0x000066abu, 0x00050041u, 0x00000007u, 0x000066acu, 0x00006687u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000066adu, 0x000066acu, 0x000500c4u, 0x00000006u, 0x000066aeu, 0x000066adu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x000066afu, 0x00006687u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000066b0u, 0x000066afu, 0x000500c5u, 0x00000006u, 0x000066b1u, 0x000066aeu, 0x000066b0u, 0x0003003eu, 0x00006688u, 0x000066b1u, 0x000500c7u, 0x00000006u, 0x000066b3u, 0x000066b1u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000066b4u, 0x000066b3u, 0x0000048bu, 0x0003003eu, 0x00006689u, 0x000066b4u, 0x000500c2u, 0x00000006u, 0x000066b6u, 0x000066b1u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000066b7u, 0x000066b6u, 0x0003003eu, 0x00000705u, 0x000066b7u, 0x000500c7u, 0x00000006u, 0x000066b9u, 0x000066b1u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x000066bau, 0x000066b9u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000066bcu, 0x000066bau, 0x000066b4u, 0x0004007cu, 0x00000008u, 0x000066bdu, 0x000066bcu, 0x0003003eu, 0x000006e7u, 0x000066bdu, 0x000200f9u, 0x0000668au, 0x000200f8u, 0x0000668bu, 0x00050041u, 0x00000201u, 0x0000668du, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000668eu, 0x0000668du, 0x000500c3u, 0x00000008u, 0x0000668fu, 0x0000668eu, 0x00000218u, 0x00050041u, 0x00000201u, 0x00006690u, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006691u, 0x00006690u, 0x000500c7u, 0x00000008u, 0x00006692u, 0x00006691u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00006693u, 0x0000668fu, 0x00006692u, 0x0003003eu, 0x000006e7u, 0x00006693u, 0x00050041u, 0x00000201u, 0x00006694u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006695u, 0x00006694u, 0x0004007cu, 0x00000006u, 0x00006696u, 0x00006695u, 0x000500c7u, 0x00000006u, 0x00006697u, 0x00006696u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x00006698u, 0x00006697u, 0x000006f4u, 0x0003003eu, 0x00006686u, 0x00006698u, 0x00050041u, 0x00000201u, 0x00006699u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000669au, 0x00006699u, 0x0004007cu, 0x00000006u, 0x0000669bu, 0x0000669au, 0x000500c7u, 0x00000006u, 0x0000669cu, 0x0000669bu, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x0000669du, 0x0000669cu, 0x00000485u, 0x000500c5u, 0x00000006u, 0x0000669fu, 0x00006698u, 0x0000669du, 0x0003003eu, 0x00006686u, 0x0000669fu, 0x0004003du, 0x00000008u, 0x000066a1u, 0x00006690u, 0x0004007cu, 0x00000006u, 0x000066a2u, 0x000066a1u, 0x000500c7u, 0x00000006u, 0x000066a3u, 0x000066a2u, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x000066a4u, 0x000066a3u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x000066a6u, 0x0000669fu, 0x000066a4u, 0x0003003eu, 0x00006686u, 0x000066a6u, 0x0004007cu, 0x00000008u, 0x000066a8u, 0x000066a6u, 0x0003003eu, 0x00000705u, 0x000066a8u, 0x000200f9u, 0x0000668au, 0x000200f8u, 0x0000668au, 0x000200f9u, 0x000062fau, 0x000200f8u, 0x000062fau, 0x000200f9u, 0x000062f0u, 0x000200f8u, 0x000062f1u, 0x0003003eu, 0x00006261u, 0x00006264u, 0x00050082u, 0x00000008u, 0x0000664cu, 0x0000041du, 0x00006264u, 0x0007000cu, 0x00000008u, 0x0000664du, 0x00000001u, 0x0000002au, 0x0000664cu, 0x00000212u, 0x0003003eu, 0x00006646u, 0x0000664du, 0x0006000cu, 0x00000008u, 0x0000664fu, 0x00000001u, 0x0000004au, 0x0000664du, 0x00050082u, 0x00000008u, 0x00006650u, 0x00000422u, 0x0000664fu, 0x0003003eu, 0x00006647u, 0x00006650u, 0x0008000cu, 0x00000008u, 0x00006652u, 0x00000001u, 0x0000002du, 0x00006650u, 0x00000203u, 0x00000224u, 0x0003003eu, 0x00006647u, 0x00006652u, 0x00050082u, 0x00000008u, 0x00006654u, 0x00000221u, 0x00006652u, 0x0007000cu, 0x00000008u, 0x00006655u, 0x00000001u, 0x0000002au, 0x00006654u, 0x00000203u, 0x0003003eu, 0x00006648u, 0x00006655u, 0x000500c3u, 0x00000008u, 0x00006658u, 0x00006264u, 0x00006655u, 0x000500c7u, 0x00000008u, 0x00006659u, 0x00006658u, 0x0000040au, 0x0003003eu, 0x00006649u, 0x00006659u, 0x000500c4u, 0x00000008u, 0x0000665bu, 0x00006652u, 0x0000026fu, 0x00050080u, 0x00000008u, 0x0000665du, 0x0000665bu, 0x00006659u, 0x0003003eu, 0x0000664au, 0x0000665du, 0x0003003eu, 0x00000705u, 0x0000665du, 0x0003003eu, 0x000006e7u, 0x0000633cu, 0x0003003eu, 0x00000854u, 0x0000055eu, 0x000300f7u, 0x000062f7u, 0x00000000u, 0x000400fau, 0x00000850u, 0x000062f8u, 0x000062f7u, 0x000200f8u, 0x000062f8u, 0x0004003du, 0x00000008u, 0x0000665fu, 0x00000705u, 0x0004007cu, 0x00000006u, 0x00006660u, 0x0000665fu, 0x000500c4u, 0x00000006u, 0x00006661u, 0x00006660u, 0x00000701u, 0x0004003du, 0x00000008u, 0x00006662u, 0x000006e7u, 0x0004007cu, 0x00000006u, 0x00006663u, 0x00006662u, 0x000500c5u, 0x00000006u, 0x00006664u, 0x00006661u, 0x00006663u, 0x0003003eu, 0x0000665eu, 0x00006664u, 0x000300f7u, 0x00006665u, 0x00000000u, 0x000700fbu, 0x00000657u, 0x00006665u, 0x00000002u, 0x00006666u, 0x00000003u, 0x00006667u, 0x000200f8u, 0x00006667u, 0x000500c2u, 0x00000006u, 0x0000667du, 0x00006664u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x0000667eu, 0x0000667du, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000667fu, 0x0000667eu, 0x00050041u, 0x00000201u, 0x00006680u, 0x00000671u, 0x00000374u, 0x0003003eu, 0x00006680u, 0x0000667fu, 0x000500c2u, 0x00000006u, 0x00006682u, 0x00006664u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x00006683u, 0x00006682u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00006684u, 0x00006683u, 0x00050041u, 0x00000201u, 0x00006685u, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x00006685u, 0x00006684u, 0x000200f9u, 0x00006665u, 0x000200f8u, 0x00006666u, 0x000500c2u, 0x00000006u, 0x00006669u, 0x00006664u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x0000666au, 0x00006669u, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x0000666bu, 0x0000666au, 0x00050041u, 0x00000201u, 0x0000666cu, 0x00000671u, 0x00000374u, 0x0003003eu, 0x0000666cu, 0x0000666bu, 0x000500c2u, 0x00000006u, 0x0000666eu, 0x00006664u, 0x00000734u, 0x000500c7u, 0x00000006u, 0x0000666fu, 0x0000666eu, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00006670u, 0x0000666fu, 0x00050041u, 0x00000201u, 0x00006671u, 0x00000671u, 0x00000485u, 0x0003003eu, 0x00006671u, 0x00006670u, 0x000500c2u, 0x00000006u, 0x00006673u, 0x00006664u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x00006674u, 0x00006673u, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00006675u, 0x00006674u, 0x00050041u, 0x00000201u, 0x00006676u, 0x00000671u, 0x000003c4u, 0x0003003eu, 0x00006676u, 0x00006675u, 0x000500c7u, 0x00000006u, 0x00006678u, 0x00006664u, 0x0000073fu, 0x000500c4u, 0x00000006u, 0x00006679u, 0x00006678u, 0x00000734u, 0x0004007cu, 0x00000008u, 0x0000667au, 0x00006679u, 0x00050041u, 0x00000201u, 0x0000667bu, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x0000667bu, 0x0000667au, 0x000200f9u, 0x00006665u, 0x000200f8u, 0x00006665u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000062f7u, 0x000200f8u, 0x000062f7u, 0x000200f9u, 0x000062f0u, 0x000200f8u, 0x000062f0u, 0x000200f9u, 0x000062b7u, 0x000200f8u, 0x000062b7u, 0x000700f5u, 0x0000003cu, 0x0000e9fdu, 0x0000cd32u, 0x000062afu, 0x0000cd25u, 0x000062f0u, 0x000700f5u, 0x00000008u, 0x0000e9e2u, 0x0000cbbfu, 0x000062afu, 0x0000e9e8u, 0x000062f0u, 0x000700f5u, 0x00000008u, 0x0000e9c7u, 0x0000ca4du, 0x000062afu, 0x0000e9cdu, 0x000062f0u, 0x000700f5u, 0x0000003cu, 0x0000e99fu, 0x0000c828u, 0x000062afu, 0x0000e9a7u, 0x000062f0u, 0x000700f5u, 0x00000008u, 0x0000e977u, 0x0000c6c2u, 0x000062afu, 0x0000e97fu, 0x000062f0u, 0x000700f5u, 0x00000008u, 0x0000e94fu, 0x0000c55du, 0x000062afu, 0x0000e957u, 0x000062f0u, 0x000200f9u, 0x00001ef3u, 0x000200f8u, 0x00001ef2u, 0x0004007cu, 0x00000006u, 0x00001ef6u, 0x0000bcd6u, 0x0003003eu, 0x00001ef7u, 0x00001ef6u, 0x0003003eu, 0x00001ef8u, 0x00001ed5u, 0x000300f7u, 0x000061b4u, 0x00000000u, 0x000900fbu, 0x00000657u, 0x000061b4u, 0x00000000u, 0x000061b5u, 0x00000001u, 0x000061b6u, 0x00000002u, 0x000061b7u, 0x000200f8u, 0x000061b7u, 0x000500c2u, 0x00000006u, 0x000061bfu, 0x00001ef6u, 0x0000025eu, 0x000500c7u, 0x00000006u, 0x000061c0u, 0x000061bfu, 0x0000069bu, 0x0003003eu, 0x000061afu, 0x000061c0u, 0x000500c2u, 0x00000006u, 0x000061c2u, 0x00001ef6u, 0x00000218u, 0x000500c7u, 0x00000006u, 0x000061c3u, 0x000061c2u, 0x0000069bu, 0x0003003eu, 0x000061b0u, 0x000061c3u, 0x000500c4u, 0x00000006u, 0x000061c5u, 0x00001ef6u, 0x00000215u, 0x000500c7u, 0x00000006u, 0x000061c6u, 0x000061c5u, 0x0000069bu, 0x0003003eu, 0x000061b1u, 0x000061c6u, 0x000500c7u, 0x00000006u, 0x000061c8u, 0x00001ef6u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000061c9u, 0x000061c8u, 0x0000097fu, 0x0003003eu, 0x000061b2u, 0x000061c9u, 0x0004007cu, 0x00000008u, 0x000061cbu, 0x000061c0u, 0x0004007cu, 0x00000008u, 0x000061cdu, 0x000061c3u, 0x0004007cu, 0x00000008u, 0x000061cfu, 0x000061c6u, 0x0004007cu, 0x00000008u, 0x000061d1u, 0x000061c9u, 0x00070050u, 0x00000009u, 0x000061d2u, 0x000061cbu, 0x000061cdu, 0x000061cfu, 0x000061d1u, 0x0003003eu, 0x000061b3u, 0x000061d2u, 0x000300f7u, 0x000061dfu, 0x00000000u, 0x000400fau, 0x0000095au, 0x000061e0u, 0x000061e1u, 0x000200f8u, 0x000061e1u, 0x0003003eu, 0x00000671u, 0x000061d2u, 0x000200f9u, 0x000061dfu, 0x000200f8u, 0x000061e0u, 0x0008004fu, 0x0000003cu, 0x000061e3u, 0x000061d2u, 0x000061d2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x000061e4u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x000061e5u, 0x000061e4u, 0x000061d2u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x000061e5u, 0x000200f9u, 0x000061dfu, 0x000200f8u, 0x000061dfu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000061b4u, 0x000200f8u, 0x000061b6u, 0x000500c7u, 0x00000006u, 0x000061b9u, 0x00001ef6u, 0x000006c2u, 0x0003003eu, 0x00001ef7u, 0x000061b9u, 0x0004007cu, 0x00000008u, 0x000061bbu, 0x000061b9u, 0x00070050u, 0x00000009u, 0x000061bcu, 0x000061bbu, 0x000061bbu, 0x000061bbu, 0x000061bbu, 0x0003003eu, 0x000061aeu, 0x000061bcu, 0x000300f7u, 0x000061d7u, 0x00000000u, 0x000400fau, 0x0000095au, 0x000061d8u, 0x000061d9u, 0x000200f8u, 0x000061d9u, 0x0003003eu, 0x00000671u, 0x000061bcu, 0x000200f9u, 0x000061d7u, 0x000200f8u, 0x000061d8u, 0x0008004fu, 0x0000003cu, 0x000061dbu, 0x000061bcu, 0x000061bcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x000061dcu, 0x00000671u, 0x0009004fu, 0x00000009u, 0x000061ddu, 0x000061dcu, 0x000061bcu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x000061ddu, 0x000200f9u, 0x000061d7u, 0x000200f8u, 0x000061d7u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000061b4u, 0x000200f8u, 0x000061b5u, 0x0003003eu, 0x00000671u, 0x00000611u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000061b4u, 0x000200f8u, 0x000061b4u, 0x000300f7u, 0x000061d4u, 0x00000000u, 0x000400fau, 0x00000850u, 0x000061d5u, 0x000061d4u, 0x000200f8u, 0x000061d5u, 0x000300f7u, 0x000061ebu, 0x00000000u, 0x000700fbu, 0x00000657u, 0x000061ebu, 0x00000002u, 0x000061ecu, 0x00000003u, 0x000061edu, 0x000200f8u, 0x000061edu, 0x0004003du, 0x00000009u, 0x0000620au, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000620bu, 0x0000620au, 0x0000620au, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000620cu, 0x0000620bu, 0x0003003eu, 0x000061e8u, 0x0000620cu, 0x00050041u, 0x00000007u, 0x0000620du, 0x000061e8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000620eu, 0x0000620du, 0x000500c4u, 0x00000006u, 0x0000620fu, 0x0000620eu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00006210u, 0x000061e8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006211u, 0x00006210u, 0x000500c5u, 0x00000006u, 0x00006212u, 0x0000620fu, 0x00006211u, 0x0003003eu, 0x000061e9u, 0x00006212u, 0x000500c7u, 0x00000006u, 0x00006214u, 0x00006212u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006215u, 0x00006214u, 0x0000048bu, 0x0003003eu, 0x000061eau, 0x00006215u, 0x000500c2u, 0x00000006u, 0x00006217u, 0x00006212u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x00006218u, 0x00006217u, 0x0003003eu, 0x00000705u, 0x00006218u, 0x000500c7u, 0x00000006u, 0x0000621au, 0x00006212u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x0000621bu, 0x0000621au, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x0000621du, 0x0000621bu, 0x00006215u, 0x0004007cu, 0x00000008u, 0x0000621eu, 0x0000621du, 0x0003003eu, 0x000006e7u, 0x0000621eu, 0x000200f9u, 0x000061ebu, 0x000200f8u, 0x000061ecu, 0x00050041u, 0x00000201u, 0x000061eeu, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000061efu, 0x000061eeu, 0x000500c3u, 0x00000008u, 0x000061f0u, 0x000061efu, 0x00000218u, 0x00050041u, 0x00000201u, 0x000061f1u, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000061f2u, 0x000061f1u, 0x000500c7u, 0x00000008u, 0x000061f3u, 0x000061f2u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x000061f4u, 0x000061f0u, 0x000061f3u, 0x0003003eu, 0x000006e7u, 0x000061f4u, 0x00050041u, 0x00000201u, 0x000061f5u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000061f6u, 0x000061f5u, 0x0004007cu, 0x00000006u, 0x000061f7u, 0x000061f6u, 0x000500c7u, 0x00000006u, 0x000061f8u, 0x000061f7u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000061f9u, 0x000061f8u, 0x000006f4u, 0x0003003eu, 0x000061e7u, 0x000061f9u, 0x00050041u, 0x00000201u, 0x000061fau, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000061fbu, 0x000061fau, 0x0004007cu, 0x00000006u, 0x000061fcu, 0x000061fbu, 0x000500c7u, 0x00000006u, 0x000061fdu, 0x000061fcu, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000061feu, 0x000061fdu, 0x00000485u, 0x000500c5u, 0x00000006u, 0x00006200u, 0x000061f9u, 0x000061feu, 0x0003003eu, 0x000061e7u, 0x00006200u, 0x0004003du, 0x00000008u, 0x00006202u, 0x000061f1u, 0x0004007cu, 0x00000006u, 0x00006203u, 0x00006202u, 0x000500c7u, 0x00000006u, 0x00006204u, 0x00006203u, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x00006205u, 0x00006204u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x00006207u, 0x00006200u, 0x00006205u, 0x0003003eu, 0x000061e7u, 0x00006207u, 0x0004007cu, 0x00000008u, 0x00006209u, 0x00006207u, 0x0003003eu, 0x00000705u, 0x00006209u, 0x000200f9u, 0x000061ebu, 0x000200f8u, 0x000061ebu, 0x000200f9u, 0x000061d4u, 0x000200f8u, 0x000061d4u, 0x000200f9u, 0x00001ef3u, 0x000200f8u, 0x00001ef3u, 0x000700f5u, 0x0000003cu, 0x0000e9f7u, 0x0000cd32u, 0x000061d4u, 0x0000e9fdu, 0x000062b7u, 0x000700f5u, 0x00000008u, 0x0000e9dcu, 0x0000cbbfu, 0x000061d4u, 0x0000e9e2u, 0x000062b7u, 0x000700f5u, 0x00000008u, 0x0000e9c1u, 0x0000ca4du, 0x000061d4u, 0x0000e9c7u, 0x000062b7u, 0x000700f5u, 0x0000003cu, 0x0000e999u, 0x0000c828u, 0x000061d4u, 0x0000e99fu, 0x000062b7u, 0x000700f5u, 0x00000008u, 0x0000e971u, 0x0000c6c2u, 0x000061d4u, 0x0000e977u, 0x000062b7u, 0x000700f5u, 0x00000008u, 0x0000e949u, 0x0000c55du, 0x000061d4u, 0x0000e94fu, 0x000062b7u, 0x000700f5u, 0x0000003cu, 0x0000e90bu, 0x0000c320u, 0x000061d4u, 0x0000c31cu, 0x000062b7u, 0x000200f9u, 0x00001ee7u, 0x000200f8u, 0x00001ee6u, 0x00070041u, 0x0000026bu, 0x00001eeau, 0x00000232u, 0x00000203u, 0x00001ed5u, 0x0000026au, 0x0004003du, 0x00000006u, 0x00001eebu, 0x00001eeau, 0x0003003eu, 0x00001ee9u, 0x00001eebu, 0x000300f7u, 0x000060f8u, 0x00000000u, 0x000b00fbu, 0x00000657u, 0x000060f8u, 0x00000004u, 0x000060f9u, 0x00000002u, 0x000060fau, 0x00000003u, 0x000060fbu, 0x00000001u, 0x000060fcu, 0x000200f8u, 0x000060fcu, 0x0004003du, 0x00000006u, 0x00006147u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x00006148u, 0x00006147u, 0x0000048bu, 0x000500c6u, 0x00000006u, 0x00006149u, 0x00006148u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x0000614au, 0x00006149u, 0x0000035bu, 0x000500c2u, 0x00000006u, 0x0000614cu, 0x00001eebu, 0x0000614au, 0x0003003eu, 0x00001ee9u, 0x0000614cu, 0x000500c7u, 0x00000006u, 0x0000614eu, 0x0000614cu, 0x000006c2u, 0x0003003eu, 0x00001ee9u, 0x0000614eu, 0x0004007cu, 0x00000008u, 0x00006150u, 0x0000614eu, 0x00070050u, 0x00000009u, 0x00006151u, 0x00006150u, 0x00006150u, 0x00006150u, 0x00006150u, 0x0003003eu, 0x000060f7u, 0x00006151u, 0x000300f7u, 0x0000616eu, 0x00000000u, 0x000400fau, 0x0000095au, 0x0000616fu, 0x00006170u, 0x000200f8u, 0x00006170u, 0x0003003eu, 0x00000671u, 0x00006151u, 0x000200f9u, 0x0000616eu, 0x000200f8u, 0x0000616fu, 0x0008004fu, 0x0000003cu, 0x00006172u, 0x00006151u, 0x00006151u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00006173u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00006174u, 0x00006173u, 0x00006151u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00006174u, 0x000200f9u, 0x0000616eu, 0x000200f8u, 0x0000616eu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060f8u, 0x000200f8u, 0x000060fbu, 0x0004003du, 0x00000006u, 0x0000612fu, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x00006130u, 0x0000612fu, 0x00000485u, 0x000500c6u, 0x00000006u, 0x00006131u, 0x00006130u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006132u, 0x00006131u, 0x00000377u, 0x000500c2u, 0x00000006u, 0x00006134u, 0x00001eebu, 0x00006132u, 0x0003003eu, 0x00001ee9u, 0x00006134u, 0x000500c7u, 0x00000006u, 0x00006136u, 0x00006134u, 0x000007eeu, 0x0003003eu, 0x00001ee9u, 0x00006136u, 0x000500c2u, 0x00000006u, 0x00006138u, 0x00006136u, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x00006139u, 0x00006138u, 0x000006c2u, 0x0003003eu, 0x000060f4u, 0x00006139u, 0x000500c2u, 0x00000006u, 0x0000613bu, 0x00006136u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x0000613cu, 0x0000613bu, 0x000006c2u, 0x0003003eu, 0x000060f5u, 0x0000613cu, 0x0004007cu, 0x00000008u, 0x0000613eu, 0x00006139u, 0x0004007cu, 0x00000008u, 0x00006144u, 0x0000613cu, 0x00070050u, 0x00000009u, 0x00006145u, 0x0000613eu, 0x0000613eu, 0x0000613eu, 0x00006144u, 0x0003003eu, 0x000060f6u, 0x00006145u, 0x000300f7u, 0x00006166u, 0x00000000u, 0x000400fau, 0x0000095au, 0x00006167u, 0x00006168u, 0x000200f8u, 0x00006168u, 0x0003003eu, 0x00000671u, 0x00006145u, 0x000200f9u, 0x00006166u, 0x000200f8u, 0x00006167u, 0x0008004fu, 0x0000003cu, 0x0000616au, 0x00006145u, 0x00006145u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x0000616bu, 0x00000671u, 0x0009004fu, 0x00000009u, 0x0000616cu, 0x0000616bu, 0x00006145u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x0000616cu, 0x000200f9u, 0x00006166u, 0x000200f8u, 0x00006166u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060f8u, 0x000200f8u, 0x000060fau, 0x0004003du, 0x00000006u, 0x00006113u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x00006114u, 0x00006113u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x00006115u, 0x00006114u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006116u, 0x00006115u, 0x00000377u, 0x000500c2u, 0x00000006u, 0x00006118u, 0x00001eebu, 0x00006116u, 0x0003003eu, 0x00001ee9u, 0x00006118u, 0x000500c2u, 0x00000006u, 0x0000611au, 0x00006118u, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x0000611bu, 0x0000611au, 0x0000069bu, 0x0003003eu, 0x000060efu, 0x0000611bu, 0x000500c2u, 0x00000006u, 0x0000611du, 0x00006118u, 0x0000048bu, 0x000500c7u, 0x00000006u, 0x0000611eu, 0x0000611du, 0x0000069bu, 0x0003003eu, 0x000060f0u, 0x0000611eu, 0x000500c4u, 0x00000006u, 0x00006120u, 0x00006118u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x00006121u, 0x00006120u, 0x0000069bu, 0x0003003eu, 0x000060f1u, 0x00006121u, 0x000500c7u, 0x00000006u, 0x00006123u, 0x00006118u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00006124u, 0x00006123u, 0x0000097fu, 0x0003003eu, 0x000060f2u, 0x00006124u, 0x0004007cu, 0x00000008u, 0x00006126u, 0x0000611bu, 0x0004007cu, 0x00000008u, 0x00006128u, 0x0000611eu, 0x0004007cu, 0x00000008u, 0x0000612au, 0x00006121u, 0x0004007cu, 0x00000008u, 0x0000612cu, 0x00006124u, 0x00070050u, 0x00000009u, 0x0000612du, 0x00006126u, 0x00006128u, 0x0000612au, 0x0000612cu, 0x0003003eu, 0x000060f3u, 0x0000612du, 0x000300f7u, 0x0000615eu, 0x00000000u, 0x000400fau, 0x0000095au, 0x0000615fu, 0x00006160u, 0x000200f8u, 0x00006160u, 0x0003003eu, 0x00000671u, 0x0000612du, 0x000200f9u, 0x0000615eu, 0x000200f8u, 0x0000615fu, 0x0008004fu, 0x0000003cu, 0x00006162u, 0x0000612du, 0x0000612du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00006163u, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00006164u, 0x00006163u, 0x0000612du, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00006164u, 0x000200f9u, 0x0000615eu, 0x000200f8u, 0x0000615eu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060f8u, 0x000200f8u, 0x000060f9u, 0x000500c2u, 0x00000006u, 0x000060feu, 0x00001eebu, 0x000006dcu, 0x000500c7u, 0x00000006u, 0x000060ffu, 0x000060feu, 0x000006c2u, 0x0003003eu, 0x000060eau, 0x000060ffu, 0x000500c2u, 0x00000006u, 0x00006101u, 0x00001eebu, 0x00000377u, 0x000500c7u, 0x00000006u, 0x00006102u, 0x00006101u, 0x000006c2u, 0x0003003eu, 0x000060ebu, 0x00006102u, 0x000500c2u, 0x00000006u, 0x00006104u, 0x00001eebu, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x00006105u, 0x00006104u, 0x000006c2u, 0x0003003eu, 0x000060ecu, 0x00006105u, 0x000500c2u, 0x00000006u, 0x00006107u, 0x00001eebu, 0x00000374u, 0x000500c7u, 0x00000006u, 0x00006108u, 0x00006107u, 0x000006c2u, 0x0003003eu, 0x000060edu, 0x00006108u, 0x0004007cu, 0x00000008u, 0x0000610au, 0x000060ffu, 0x0004007cu, 0x00000008u, 0x0000610cu, 0x00006102u, 0x0004007cu, 0x00000008u, 0x0000610eu, 0x00006105u, 0x0004007cu, 0x00000008u, 0x00006110u, 0x00006108u, 0x00070050u, 0x00000009u, 0x00006111u, 0x0000610au, 0x0000610cu, 0x0000610eu, 0x00006110u, 0x0003003eu, 0x000060eeu, 0x00006111u, 0x000300f7u, 0x00006156u, 0x00000000u, 0x000400fau, 0x0000095au, 0x00006157u, 0x00006158u, 0x000200f8u, 0x00006158u, 0x0003003eu, 0x00000671u, 0x00006111u, 0x000200f9u, 0x00006156u, 0x000200f8u, 0x00006157u, 0x0008004fu, 0x0000003cu, 0x0000615au, 0x00006111u, 0x00006111u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x0000615bu, 0x00000671u, 0x0009004fu, 0x00000009u, 0x0000615cu, 0x0000615bu, 0x00006111u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x0000615cu, 0x000200f9u, 0x00006156u, 0x000200f8u, 0x00006156u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x000060f8u, 0x000200f8u, 0x000060f8u, 0x000300f7u, 0x00006153u, 0x00000000u, 0x000400fau, 0x00000850u, 0x00006154u, 0x00006153u, 0x000200f8u, 0x00006154u, 0x000300f7u, 0x0000617au, 0x00000000u, 0x000700fbu, 0x00000657u, 0x0000617au, 0x00000002u, 0x0000617bu, 0x00000003u, 0x0000617cu, 0x000200f8u, 0x0000617cu, 0x0004003du, 0x00000009u, 0x00006199u, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000619au, 0x00006199u, 0x00006199u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000619bu, 0x0000619au, 0x0003003eu, 0x00006177u, 0x0000619bu, 0x00050041u, 0x00000007u, 0x0000619cu, 0x00006177u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000619du, 0x0000619cu, 0x000500c4u, 0x00000006u, 0x0000619eu, 0x0000619du, 0x0000035bu, 0x00050041u, 0x00000007u, 0x0000619fu, 0x00006177u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000061a0u, 0x0000619fu, 0x000500c5u, 0x00000006u, 0x000061a1u, 0x0000619eu, 0x000061a0u, 0x0003003eu, 0x00006178u, 0x000061a1u, 0x000500c7u, 0x00000006u, 0x000061a3u, 0x000061a1u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000061a4u, 0x000061a3u, 0x0000048bu, 0x0003003eu, 0x00006179u, 0x000061a4u, 0x000500c2u, 0x00000006u, 0x000061a6u, 0x000061a1u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000061a7u, 0x000061a6u, 0x0003003eu, 0x00000705u, 0x000061a7u, 0x000500c7u, 0x00000006u, 0x000061a9u, 0x000061a1u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x000061aau, 0x000061a9u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000061acu, 0x000061aau, 0x000061a4u, 0x0004007cu, 0x00000008u, 0x000061adu, 0x000061acu, 0x0003003eu, 0x000006e7u, 0x000061adu, 0x000200f9u, 0x0000617au, 0x000200f8u, 0x0000617bu, 0x00050041u, 0x00000201u, 0x0000617du, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000617eu, 0x0000617du, 0x000500c3u, 0x00000008u, 0x0000617fu, 0x0000617eu, 0x00000218u, 0x00050041u, 0x00000201u, 0x00006180u, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00006181u, 0x00006180u, 0x000500c7u, 0x00000008u, 0x00006182u, 0x00006181u, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00006183u, 0x0000617fu, 0x00006182u, 0x0003003eu, 0x000006e7u, 0x00006183u, 0x00050041u, 0x00000201u, 0x00006184u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006185u, 0x00006184u, 0x0004007cu, 0x00000006u, 0x00006186u, 0x00006185u, 0x000500c7u, 0x00000006u, 0x00006187u, 0x00006186u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x00006188u, 0x00006187u, 0x000006f4u, 0x0003003eu, 0x00006176u, 0x00006188u, 0x00050041u, 0x00000201u, 0x00006189u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000618au, 0x00006189u, 0x0004007cu, 0x00000006u, 0x0000618bu, 0x0000618au, 0x000500c7u, 0x00000006u, 0x0000618cu, 0x0000618bu, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x0000618du, 0x0000618cu, 0x00000485u, 0x000500c5u, 0x00000006u, 0x0000618fu, 0x00006188u, 0x0000618du, 0x0003003eu, 0x00006176u, 0x0000618fu, 0x0004003du, 0x00000008u, 0x00006191u, 0x00006180u, 0x0004007cu, 0x00000006u, 0x00006192u, 0x00006191u, 0x000500c7u, 0x00000006u, 0x00006193u, 0x00006192u, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x00006194u, 0x00006193u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x00006196u, 0x0000618fu, 0x00006194u, 0x0003003eu, 0x00006176u, 0x00006196u, 0x0004007cu, 0x00000008u, 0x00006198u, 0x00006196u, 0x0003003eu, 0x00000705u, 0x00006198u, 0x000200f9u, 0x0000617au, 0x000200f8u, 0x0000617au, 0x000200f9u, 0x00006153u, 0x000200f8u, 0x00006153u, 0x000200f9u, 0x00001ee7u, 0x000200f8u, 0x00001ee7u, 0x000700f5u, 0x0000003cu, 0x0000e9efu, 0x0000cd32u, 0x00006153u, 0x0000e9f7u, 0x00001ef3u, 0x000700f5u, 0x00000008u, 0x0000e9d4u, 0x0000cbbfu, 0x00006153u, 0x0000e9dcu, 0x00001ef3u, 0x000700f5u, 0x00000008u, 0x0000e9b9u, 0x0000ca4du, 0x00006153u, 0x0000e9c1u, 0x00001ef3u, 0x000700f5u, 0x0000003cu, 0x0000e991u, 0x0000c828u, 0x00006153u, 0x0000e999u, 0x00001ef3u, 0x000700f5u, 0x00000008u, 0x0000e969u, 0x0000c6c2u, 0x00006153u, 0x0000e971u, 0x00001ef3u, 0x000700f5u, 0x00000008u, 0x0000e941u, 0x0000c55du, 0x00006153u, 0x0000e949u, 0x00001ef3u, 0x000700f5u, 0x0000003cu, 0x0000e903u, 0x0000c320u, 0x00006153u, 0x0000e90bu, 0x00001ef3u, 0x000200f9u, 0x00001ee1u, 0x000200f8u, 0x00001ee1u, 0x000700f5u, 0x0000003cu, 0x0000e9eeu, 0x0000cd32u, 0x000020b7u, 0x0000e9efu, 0x00001ee7u, 0x000700f5u, 0x00000008u, 0x0000e9d3u, 0x0000cbbfu, 0x000020b7u, 0x0000e9d4u, 0x00001ee7u, 0x000700f5u, 0x00000008u, 0x0000e9b8u, 0x0000ca4du, 0x000020b7u, 0x0000e9b9u, 0x00001ee7u, 0x000700f5u, 0x0000003cu, 0x0000e990u, 0x0000c828u, 0x000020b7u, 0x0000e991u, 0x00001ee7u, 0x000700f5u, 0x00000008u, 0x0000e968u, 0x0000c6c2u, 0x000020b7u, 0x0000e969u, 0x00001ee7u, 0x000700f5u, 0x00000008u, 0x0000e940u, 0x0000c55du, 0x000020b7u, 0x0000e941u, 0x00001ee7u, 0x000700f5u, 0x0000003cu, 0x0000e902u, 0x0000c320u, 0x000020b7u, 0x0000e903u, 0x00001ee7u, 0x000200f9u, 0x00001ec3u, 0x000200f8u, 0x00001ec3u, 0x000200f9u, 0x00001ec0u, 0x000200f8u, 0x00001ec2u, 0x000200f9u, 0x00001ea9u, 0x000200f8u, 0x00001ea9u, 0x000200f9u, 0x00001ea6u, 0x000200f8u, 0x00001ea8u, 0x0003003eu, 0x00001f05u, 0x00001e98u, 0x0003003eu, 0x00001f08u, 0x00001e9bu, 0x0003003eu, 0x00001f0bu, 0x00001e9eu, 0x0003003eu, 0x00001f0eu, 0x00001ea1u, 0x0003003eu, 0x00001f11u, 0x00001ea4u, 0x0004003du, 0x000000a2u, 0x000066c8u, 0x00001f05u, 0x000500b0u, 0x00000879u, 0x000066ccu, 0x000066c8u, 0x00001f3eu, 0x0004009bu, 0x0000005du, 0x000066cdu, 0x000066ccu, 0x000300f7u, 0x000066ceu, 0x00000000u, 0x000400fau, 0x000066cdu, 0x000066cfu, 0x000066ceu, 0x000200f8u, 0x000066cfu, 0x000500c2u, 0x00000006u, 0x000066d1u, 0x00001e9bu, 0x0000078du, 0x0003003eu, 0x000066beu, 0x000066d1u, 0x0004003du, 0x000000a2u, 0x000066d2u, 0x00001f05u, 0x00050050u, 0x000000a2u, 0x000066d3u, 0x000008fbu, 0x000008fbu, 0x000500c7u, 0x000000a2u, 0x000066d4u, 0x000066d2u, 0x000066d3u, 0x0003003eu, 0x000066bfu, 0x000066d4u, 0x0004003du, 0x000000a2u, 0x000066d5u, 0x00001f05u, 0x00050050u, 0x0000005fu, 0x000066d6u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x000066d7u, 0x000066d5u, 0x000066d6u, 0x0003003eu, 0x00001f05u, 0x000066d7u, 0x00050041u, 0x00000007u, 0x000066d8u, 0x000066bfu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000066d9u, 0x000066d8u, 0x00050084u, 0x00000006u, 0x000066dau, 0x000066d9u, 0x00000904u, 0x00050041u, 0x00000007u, 0x000066dbu, 0x000066bfu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000066dcu, 0x000066dbu, 0x00050080u, 0x00000006u, 0x000066ddu, 0x000066dau, 0x000066dcu, 0x0003003eu, 0x000066c0u, 0x000066ddu, 0x00050041u, 0x00000007u, 0x000066e0u, 0x00001f05u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000066e1u, 0x000066e0u, 0x00050084u, 0x00000006u, 0x000066e2u, 0x000066d1u, 0x000066e1u, 0x00050080u, 0x00000006u, 0x000066e3u, 0x00001ea1u, 0x000066e2u, 0x00050041u, 0x00000007u, 0x000066e4u, 0x00001f05u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000066e5u, 0x000066e4u, 0x00050080u, 0x00000006u, 0x000066e6u, 0x000066e3u, 0x000066e5u, 0x0003003eu, 0x000066c1u, 0x000066e6u, 0x0003003eu, 0x000066c2u, 0x000066e6u, 0x0003003eu, 0x000066c3u, 0x000066ddu, 0x0004003du, 0x0000005du, 0x00006702u, 0x00000752u, 0x000300f7u, 0x00006703u, 0x00000000u, 0x000400fau, 0x00006702u, 0x00006704u, 0x00006703u, 0x000200f8u, 0x00006704u, 0x000300f7u, 0x00006705u, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x00006705u, 0x00000000u, 0x00006706u, 0x00000001u, 0x00006707u, 0x00000002u, 0x00006708u, 0x00000003u, 0x00006709u, 0x00000004u, 0x0000670au, 0x000200f8u, 0x0000670au, 0x000500c7u, 0x00000006u, 0x0000679au, 0x000066e6u, 0x000006cau, 0x0003003eu, 0x000066c2u, 0x0000679au, 0x00050084u, 0x00000006u, 0x0000679cu, 0x000066ddu, 0x0000081cu, 0x00050080u, 0x00000006u, 0x0000679eu, 0x0000679au, 0x0000679cu, 0x0003003eu, 0x000066c2u, 0x0000679eu, 0x0004003du, 0x00000009u, 0x0000679fu, 0x00000671u, 0x0004007cu, 0x00000237u, 0x000067a0u, 0x0000679fu, 0x0003003eu, 0x00006700u, 0x000067a0u, 0x00050041u, 0x00000007u, 0x000067a1u, 0x00006700u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000067a2u, 0x000067a1u, 0x000500c4u, 0x00000006u, 0x000067a3u, 0x000067a2u, 0x000006dcu, 0x00050041u, 0x00000007u, 0x000067a4u, 0x00006700u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000067a5u, 0x000067a4u, 0x000500c4u, 0x00000006u, 0x000067a6u, 0x000067a5u, 0x00000377u, 0x000500c5u, 0x00000006u, 0x000067a7u, 0x000067a3u, 0x000067a6u, 0x00050041u, 0x00000007u, 0x000067a8u, 0x00006700u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000067a9u, 0x000067a8u, 0x000500c4u, 0x00000006u, 0x000067aau, 0x000067a9u, 0x0000035bu, 0x000500c5u, 0x00000006u, 0x000067abu, 0x000067a7u, 0x000067aau, 0x00050041u, 0x00000007u, 0x000067acu, 0x00006700u, 0x0000048bu, 0x0004003du, 0x00000006u, 0x000067adu, 0x000067acu, 0x000500c4u, 0x00000006u, 0x000067aeu, 0x000067adu, 0x00000374u, 0x000500c5u, 0x00000006u, 0x000067afu, 0x000067abu, 0x000067aeu, 0x0003003eu, 0x00006701u, 0x000067afu, 0x00060041u, 0x0000026bu, 0x000067b2u, 0x000006d6u, 0x00000203u, 0x0000679eu, 0x0003003eu, 0x000067b2u, 0x000067afu, 0x00050084u, 0x00000006u, 0x000067b4u, 0x000003c4u, 0x0000679eu, 0x00050041u, 0x00000201u, 0x000067b5u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000067b6u, 0x000067b5u, 0x000500c7u, 0x00000008u, 0x000067b7u, 0x000067b6u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000067b8u, 0x000067b7u, 0x00000218u, 0x00040071u, 0x00000229u, 0x000067b9u, 0x000067b8u, 0x00060041u, 0x00000277u, 0x000067bau, 0x00000678u, 0x00000203u, 0x000067b4u, 0x0003003eu, 0x000067bau, 0x000067b9u, 0x00050080u, 0x00000006u, 0x000067bdu, 0x000067b4u, 0x00000485u, 0x00050041u, 0x00000201u, 0x000067beu, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000067bfu, 0x000067beu, 0x000500c7u, 0x00000008u, 0x000067c0u, 0x000067bfu, 0x00000212u, 0x00050084u, 0x00000008u, 0x000067c1u, 0x000067c0u, 0x00000218u, 0x00040071u, 0x00000229u, 0x000067c2u, 0x000067c1u, 0x00060041u, 0x00000277u, 0x000067c3u, 0x00000678u, 0x00000203u, 0x000067bdu, 0x0003003eu, 0x000067c3u, 0x000067c2u, 0x000300f7u, 0x000067c4u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000067c5u, 0x000067c4u, 0x000200f8u, 0x000067c5u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x000067c7u, 0x0000679eu, 0x0000084au, 0x00060041u, 0x0000026bu, 0x000067c8u, 0x000006d6u, 0x00000203u, 0x000067c7u, 0x0003003eu, 0x000067c8u, 0x0000084cu, 0x000200f9u, 0x000067c4u, 0x000200f8u, 0x000067c4u, 0x000200f9u, 0x00006705u, 0x000200f8u, 0x00006709u, 0x000500c7u, 0x00000006u, 0x00006778u, 0x000066e6u, 0x00000681u, 0x0003003eu, 0x000066c2u, 0x00006778u, 0x00050084u, 0x00000006u, 0x0000677au, 0x000066ddu, 0x000007f5u, 0x00050080u, 0x00000006u, 0x0000677cu, 0x00006778u, 0x0000677au, 0x0003003eu, 0x000066c2u, 0x0000677cu, 0x0004003du, 0x00000009u, 0x0000677du, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000677eu, 0x0000677du, 0x0000677du, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000677fu, 0x0000677eu, 0x0003003eu, 0x000066feu, 0x0000677fu, 0x00050041u, 0x00000007u, 0x00006780u, 0x000066feu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00006781u, 0x00006780u, 0x000500c4u, 0x00000006u, 0x00006782u, 0x00006781u, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00006783u, 0x000066feu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006784u, 0x00006783u, 0x000500c5u, 0x00000006u, 0x00006785u, 0x00006782u, 0x00006784u, 0x0003003eu, 0x000066ffu, 0x00006785u, 0x000500c6u, 0x00000006u, 0x00006787u, 0x0000677cu, 0x00000485u, 0x00040071u, 0x0000022bu, 0x00006789u, 0x00006785u, 0x00060041u, 0x00000270u, 0x0000678au, 0x0000068du, 0x00000203u, 0x00006787u, 0x0003003eu, 0x0000678au, 0x00006789u, 0x0004003du, 0x00000006u, 0x0000678du, 0x00006783u, 0x000500c7u, 0x00000006u, 0x0000678eu, 0x0000678du, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000678fu, 0x0000678eu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x00006790u, 0x0000678fu, 0x00060041u, 0x00000277u, 0x00006791u, 0x00000678u, 0x00000203u, 0x0000677cu, 0x0003003eu, 0x00006791u, 0x00006790u, 0x000300f7u, 0x00006792u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006793u, 0x00006792u, 0x000200f8u, 0x00006793u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006796u, 0x00006787u, 0x00000814u, 0x00040071u, 0x0000022bu, 0x00006797u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00006798u, 0x0000068du, 0x00000203u, 0x00006796u, 0x0003003eu, 0x00006798u, 0x00006797u, 0x000200f9u, 0x00006792u, 0x000200f8u, 0x00006792u, 0x000200f9u, 0x00006705u, 0x000200f8u, 0x00006708u, 0x000500c7u, 0x00000006u, 0x00006748u, 0x000066e6u, 0x00000681u, 0x0003003eu, 0x000066c2u, 0x00006748u, 0x00050084u, 0x00000006u, 0x0000674au, 0x000066ddu, 0x000007bdu, 0x00050080u, 0x00000006u, 0x0000674cu, 0x00006748u, 0x0000674au, 0x0003003eu, 0x000066c2u, 0x0000674cu, 0x0004003du, 0x00000009u, 0x0000674du, 0x00000671u, 0x0004007cu, 0x00000237u, 0x0000674eu, 0x0000674du, 0x0003003eu, 0x000066fbu, 0x0000674eu, 0x0004003du, 0x00000237u, 0x0000674fu, 0x000066fbu, 0x0008004fu, 0x00000353u, 0x00006750u, 0x0000674fu, 0x0000674fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000353u, 0x00006752u, 0x00006750u, 0x0000eedau, 0x0004003du, 0x00000237u, 0x00006753u, 0x000066fbu, 0x0009004fu, 0x00000237u, 0x00006754u, 0x00006753u, 0x00006752u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000066fbu, 0x00006754u, 0x00050041u, 0x00000007u, 0x00006755u, 0x000066fbu, 0x0000048bu, 0x0004003du, 0x00000006u, 0x00006756u, 0x00006755u, 0x000500c2u, 0x00000006u, 0x00006757u, 0x00006756u, 0x00000734u, 0x0003003eu, 0x000066fcu, 0x00006757u, 0x00050041u, 0x00000007u, 0x00006758u, 0x000066fbu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00006759u, 0x00006758u, 0x000500c4u, 0x00000006u, 0x0000675au, 0x00006759u, 0x0000035bu, 0x00050041u, 0x00000007u, 0x0000675bu, 0x000066fbu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000675cu, 0x0000675bu, 0x000500c4u, 0x00000006u, 0x0000675du, 0x0000675cu, 0x0000048bu, 0x000500c5u, 0x00000006u, 0x0000675eu, 0x0000675au, 0x0000675du, 0x00050041u, 0x00000007u, 0x0000675fu, 0x000066fbu, 0x000003c4u, 0x0004003du, 0x00000006u, 0x00006760u, 0x0000675fu, 0x000500c2u, 0x00000006u, 0x00006761u, 0x00006760u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x00006762u, 0x0000675eu, 0x00006761u, 0x000500c2u, 0x00000006u, 0x00006764u, 0x00006757u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x00006765u, 0x00006762u, 0x00006764u, 0x0003003eu, 0x000066fdu, 0x00006765u, 0x000500c6u, 0x00000006u, 0x00006767u, 0x0000674cu, 0x00000485u, 0x00040071u, 0x0000022bu, 0x00006769u, 0x00006765u, 0x00060041u, 0x00000270u, 0x0000676au, 0x0000068du, 0x00000203u, 0x00006767u, 0x0003003eu, 0x0000676au, 0x00006769u, 0x000500c7u, 0x00000006u, 0x0000676du, 0x00006757u, 0x0000048bu, 0x00040071u, 0x00000229u, 0x0000676eu, 0x0000676du, 0x00060041u, 0x00000277u, 0x0000676fu, 0x00000678u, 0x00000203u, 0x0000674cu, 0x0003003eu, 0x0000676fu, 0x0000676eu, 0x000300f7u, 0x00006770u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006771u, 0x00006770u, 0x000200f8u, 0x00006771u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006774u, 0x00006767u, 0x000007ecu, 0x00040071u, 0x0000022bu, 0x00006775u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00006776u, 0x0000068du, 0x00000203u, 0x00006774u, 0x0003003eu, 0x00006776u, 0x00006775u, 0x000200f9u, 0x00006770u, 0x000200f8u, 0x00006770u, 0x000200f9u, 0x00006705u, 0x000200f8u, 0x00006707u, 0x000500c7u, 0x00000006u, 0x00006728u, 0x000066e6u, 0x0000065eu, 0x0003003eu, 0x000066c2u, 0x00006728u, 0x00050084u, 0x00000006u, 0x0000672au, 0x000066ddu, 0x0000065du, 0x00050080u, 0x00000006u, 0x0000672cu, 0x00006728u, 0x0000672au, 0x0003003eu, 0x000066c2u, 0x0000672cu, 0x000500c6u, 0x00000006u, 0x0000672eu, 0x0000672cu, 0x0000048bu, 0x00050041u, 0x00000201u, 0x0000672fu, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00006730u, 0x0000672fu, 0x00040071u, 0x00000229u, 0x00006731u, 0x00006730u, 0x00060041u, 0x00000277u, 0x00006732u, 0x00000669u, 0x00000203u, 0x0000672eu, 0x0003003eu, 0x00006732u, 0x00006731u, 0x000500c7u, 0x00000006u, 0x00006734u, 0x0000672cu, 0x00000485u, 0x000500abu, 0x0000005du, 0x00006735u, 0x00006734u, 0x00000374u, 0x000300f7u, 0x00006736u, 0x00000000u, 0x000400fau, 0x00006735u, 0x00006737u, 0x00006736u, 0x000200f8u, 0x00006737u, 0x000500c2u, 0x00000006u, 0x00006739u, 0x0000672cu, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000673bu, 0x0000672fu, 0x000500c7u, 0x00000008u, 0x0000673cu, 0x0000673bu, 0x00000212u, 0x00050084u, 0x00000008u, 0x0000673du, 0x0000673cu, 0x00000218u, 0x00040071u, 0x00000229u, 0x0000673eu, 0x0000673du, 0x00060041u, 0x00000277u, 0x0000673fu, 0x00000678u, 0x00000203u, 0x00006739u, 0x0003003eu, 0x0000673fu, 0x0000673eu, 0x000200f9u, 0x00006736u, 0x000200f8u, 0x00006736u, 0x000300f7u, 0x00006740u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006741u, 0x00006740u, 0x000200f8u, 0x00006741u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006744u, 0x0000672eu, 0x0000065du, 0x00040071u, 0x00000229u, 0x00006745u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x00006746u, 0x00000669u, 0x00000203u, 0x00006744u, 0x0003003eu, 0x00006746u, 0x00006745u, 0x000200f9u, 0x00006740u, 0x000200f8u, 0x00006740u, 0x000200f9u, 0x00006705u, 0x000200f8u, 0x00006706u, 0x000500c7u, 0x00000006u, 0x0000670cu, 0x000066e6u, 0x0000065eu, 0x0003003eu, 0x000066c2u, 0x0000670cu, 0x00050084u, 0x00000006u, 0x0000670eu, 0x000066ddu, 0x0000065du, 0x00050080u, 0x00000006u, 0x00006710u, 0x0000670cu, 0x0000670eu, 0x0003003eu, 0x000066c2u, 0x00006710u, 0x000500c6u, 0x00000006u, 0x00006712u, 0x00006710u, 0x0000048bu, 0x00040071u, 0x00000229u, 0x00006713u, 0x00000374u, 0x00060041u, 0x00000277u, 0x00006714u, 0x00000669u, 0x00000203u, 0x00006712u, 0x0003003eu, 0x00006714u, 0x00006713u, 0x000500c7u, 0x00000006u, 0x00006716u, 0x00006710u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00006717u, 0x00006716u, 0x00000374u, 0x000300f7u, 0x00006718u, 0x00000000u, 0x000400fau, 0x00006717u, 0x00006719u, 0x00006718u, 0x000200f8u, 0x00006719u, 0x000500c2u, 0x00000006u, 0x0000671bu, 0x00006710u, 0x00000485u, 0x00050041u, 0x00000201u, 0x0000671cu, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000671du, 0x0000671cu, 0x00040071u, 0x00000229u, 0x0000671eu, 0x0000671du, 0x00060041u, 0x00000277u, 0x0000671fu, 0x00000678u, 0x00000203u, 0x0000671bu, 0x0003003eu, 0x0000671fu, 0x0000671eu, 0x000200f9u, 0x00006718u, 0x000200f8u, 0x00006718u, 0x000300f7u, 0x00006720u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00006721u, 0x00006720u, 0x000200f8u, 0x00006721u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x00006724u, 0x00006712u, 0x0000065du, 0x00040071u, 0x00000229u, 0x00006725u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x00006726u, 0x00000669u, 0x00000203u, 0x00006724u, 0x0003003eu, 0x00006726u, 0x00006725u, 0x000200f9u, 0x00006720u, 0x000200f8u, 0x00006720u, 0x000200f9u, 0x00006705u, 0x000200f8u, 0x00006705u, 0x000200f9u, 0x00006703u, 0x000200f8u, 0x00006703u, 0x0004003du, 0x00000006u, 0x000066edu, 0x000066e0u, 0x00050084u, 0x00000006u, 0x000066eeu, 0x000066d1u, 0x000066edu, 0x00050080u, 0x00000006u, 0x000066efu, 0x00001ea4u, 0x000066eeu, 0x0004003du, 0x00000006u, 0x000066f1u, 0x000066e4u, 0x00050080u, 0x00000006u, 0x000066f2u, 0x000066efu, 0x000066f1u, 0x0003003eu, 0x000066c1u, 0x000066f2u, 0x0003003eu, 0x000066c4u, 0x000066f2u, 0x0003003eu, 0x000066c5u, 0x000066ddu, 0x000300f7u, 0x000067c9u, 0x00000000u, 0x000400fau, 0x00000851u, 0x000067cau, 0x000067c9u, 0x000200f8u, 0x000067cau, 0x0004003du, 0x0000005du, 0x000067cbu, 0x00000854u, 0x000300f7u, 0x000067ccu, 0x00000000u, 0x000400fau, 0x000067cbu, 0x000067cdu, 0x000067ccu, 0x000200f8u, 0x000067cdu, 0x000500c7u, 0x00000006u, 0x000067cfu, 0x000066f2u, 0x00000681u, 0x0003003eu, 0x000066c4u, 0x000067cfu, 0x00050084u, 0x00000006u, 0x000067d1u, 0x000066ddu, 0x0000085bu, 0x00050080u, 0x00000006u, 0x000067d3u, 0x000067cfu, 0x000067d1u, 0x0003003eu, 0x000066c4u, 0x000067d3u, 0x000500c6u, 0x00000006u, 0x000067d5u, 0x000067d3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000067d6u, 0x00000705u, 0x000500c4u, 0x00000008u, 0x000067d7u, 0x000067d6u, 0x00000215u, 0x0004003du, 0x00000008u, 0x000067d8u, 0x000006e7u, 0x000500c3u, 0x00000008u, 0x000067d9u, 0x000067d8u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x000067dau, 0x000067d7u, 0x000067d9u, 0x00040071u, 0x0000022bu, 0x000067dbu, 0x000067dau, 0x00060041u, 0x00000270u, 0x000067dcu, 0x0000068du, 0x00000203u, 0x000067d5u, 0x0003003eu, 0x000067dcu, 0x000067dbu, 0x0004003du, 0x00000008u, 0x000067deu, 0x000006e7u, 0x000500c7u, 0x00000008u, 0x000067dfu, 0x000067deu, 0x00000218u, 0x00040071u, 0x00000229u, 0x000067e0u, 0x000067dfu, 0x00060041u, 0x00000277u, 0x000067e1u, 0x00000678u, 0x00000203u, 0x000067d3u, 0x0003003eu, 0x000067e1u, 0x000067e0u, 0x000300f7u, 0x000067e2u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000067e3u, 0x000067e2u, 0x000200f8u, 0x000067e3u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x00050080u, 0x00000006u, 0x000067e6u, 0x000067d5u, 0x00000871u, 0x00040071u, 0x0000022bu, 0x000067e7u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x000067e8u, 0x0000068du, 0x00000203u, 0x000067e6u, 0x0003003eu, 0x000067e8u, 0x000067e7u, 0x000200f9u, 0x000067e2u, 0x000200f8u, 0x000067e2u, 0x000200f9u, 0x000067ccu, 0x000200f8u, 0x000067ccu, 0x000200f9u, 0x000067c9u, 0x000200f8u, 0x000067c9u, 0x000300f7u, 0x000066f6u, 0x00000000u, 0x000400fau, 0x00000927u, 0x000066f7u, 0x000066f6u, 0x000200f8u, 0x000066f7u, 0x0004003du, 0x000000a2u, 0x000066f8u, 0x00001f05u, 0x0003003eu, 0x000066c6u, 0x000066f8u, 0x0003003eu, 0x000066c7u, 0x000066d1u, 0x00050041u, 0x00000007u, 0x000067eeu, 0x000066c6u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000067efu, 0x000067eeu, 0x000500c2u, 0x00000006u, 0x000067f0u, 0x000067efu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000067f2u, 0x000066d1u, 0x0000048bu, 0x000500c2u, 0x00000006u, 0x000067f3u, 0x000067f2u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000067f4u, 0x000067f0u, 0x000067f3u, 0x00050041u, 0x00000007u, 0x000067f5u, 0x000066c6u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000067f6u, 0x000067f5u, 0x000500c2u, 0x00000006u, 0x000067f7u, 0x000067f6u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000067f8u, 0x000067f4u, 0x000067f7u, 0x0003003eu, 0x000067e9u, 0x000067f8u, 0x0004003du, 0x000000a2u, 0x000067f9u, 0x000066c6u, 0x000500c7u, 0x000000a2u, 0x000067fbu, 0x000067f9u, 0x0000eedbu, 0x0003003eu, 0x000067eau, 0x000067fbu, 0x0004003du, 0x0000005du, 0x000067fcu, 0x00000752u, 0x000600a9u, 0x00000006u, 0x000067fdu, 0x000067fcu, 0x00000485u, 0x00000374u, 0x0004003du, 0x0000005du, 0x000067feu, 0x00000854u, 0x000600a9u, 0x00000006u, 0x000067ffu, 0x000067feu, 0x00000485u, 0x00000374u, 0x00050084u, 0x00000006u, 0x00006800u, 0x000003c4u, 0x000067ffu, 0x00050080u, 0x00000006u, 0x00006801u, 0x000067fdu, 0x00006800u, 0x0003003eu, 0x000067ebu, 0x00006801u, 0x00050041u, 0x00000007u, 0x00006802u, 0x000067eau, 0x00000374u, 0x0004003du, 0x00000006u, 0x00006803u, 0x00006802u, 0x00050041u, 0x00000007u, 0x00006804u, 0x000067eau, 0x00000485u, 0x0004003du, 0x00000006u, 0x00006805u, 0x00006804u, 0x00050084u, 0x00000006u, 0x00006806u, 0x00006805u, 0x00000701u, 0x00050080u, 0x00000006u, 0x00006807u, 0x00006803u, 0x00006806u, 0x00050084u, 0x00000006u, 0x00006808u, 0x000003c4u, 0x00006807u, 0x000500c4u, 0x00000006u, 0x0000680au, 0x00006801u, 0x00006808u, 0x0003003eu, 0x000067ebu, 0x0000680au, 0x0003003eu, 0x000067ecu, 0x0000055eu, 0x000200f9u, 0x0000680bu, 0x000200f8u, 0x0000680bu, 0x000700f5u, 0x0000005du, 0x00007a45u, 0x0000055eu, 0x000066f7u, 0x0000ef15u, 0x0000680du, 0x000400f6u, 0x0000680cu, 0x0000680du, 0x00000000u, 0x000200f9u, 0x0000680eu, 0x000200f8u, 0x0000680eu, 0x00050152u, 0x00000006u, 0x00006810u, 0x0000048bu, 0x000067f8u, 0x000500aau, 0x0000005du, 0x00006812u, 0x00006810u, 0x000067f8u, 0x000300f7u, 0x00006813u, 0x00000000u, 0x000400fau, 0x00006812u, 0x00006814u, 0x00006813u, 0x000200f8u, 0x00006814u, 0x00060168u, 0x00000006u, 0x00006816u, 0x0000048bu, 0x00000000u, 0x0000680au, 0x0003003eu, 0x000067edu, 0x00006816u, 0x0004014du, 0x0000005du, 0x00006817u, 0x0000048bu, 0x000300f7u, 0x00006818u, 0x00000000u, 0x000400fau, 0x00006817u, 0x00006819u, 0x00006818u, 0x000200f8u, 0x00006819u, 0x00050080u, 0x00000006u, 0x0000681bu, 0x000008e6u, 0x000067f8u, 0x00060041u, 0x0000026bu, 0x0000681cu, 0x000006d6u, 0x00000203u, 0x0000681bu, 0x000700f1u, 0x00000006u, 0x0000681eu, 0x0000681cu, 0x00000485u, 0x00000374u, 0x00006816u, 0x000200f9u, 0x00006818u, 0x000200f8u, 0x00006818u, 0x0003003eu, 0x000067ecu, 0x00000543u, 0x000200f9u, 0x00006813u, 0x000200f8u, 0x00006813u, 0x000600a9u, 0x0000005du, 0x0000ef15u, 0x00006812u, 0x00000543u, 0x00007a45u, 0x000200f9u, 0x0000680du, 0x000200f8u, 0x0000680du, 0x000400fau, 0x0000ef15u, 0x0000680bu, 0x0000680cu, 0x000200f8u, 0x0000680cu, 0x000200f9u, 0x000066f6u, 0x000200f8u, 0x000066f6u, 0x000200f9u, 0x000066ceu, 0x000200f8u, 0x000066ceu, 0x0003003eu, 0x00001f29u, 0x0000055eu, 0x000200f9u, 0x00001f27u, 0x000200f8u, 0x00001f27u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x0000005cu, 0x000078c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078c3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078c2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078c1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078c0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078bfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078beu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078bdu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000209u, 0x0000000cu, 0x00060041u, 0x0000020au, 0x0000020bu, 0x00000208u, 0x00000203u, 0x00000209u, 0x0004003du, 0x00000204u, 0x0000020cu, 0x0000020bu, 0x00050051u, 0x00000009u, 0x0000020fu, 0x0000020cu, 0x00000000u, 0x0003003eu, 0x000078bdu, 0x0000020fu, 0x00050051u, 0x00000009u, 0x00000211u, 0x0000020cu, 0x00000001u, 0x0003003eu, 0x000078beu, 0x00000211u, 0x00050051u, 0x00000009u, 0x00000214u, 0x0000020cu, 0x00000002u, 0x0003003eu, 0x000078bfu, 0x00000214u, 0x00050051u, 0x00000009u, 0x00000217u, 0x0000020cu, 0x00000003u, 0x0003003eu, 0x000078c0u, 0x00000217u, 0x00050051u, 0x00000009u, 0x0000021au, 0x0000020cu, 0x00000004u, 0x0003003eu, 0x000078c1u, 0x0000021au, 0x00050051u, 0x00000009u, 0x0000021du, 0x0000020cu, 0x00000005u, 0x0003003eu, 0x000078c2u, 0x0000021du, 0x00050051u, 0x00000009u, 0x00000220u, 0x0000020cu, 0x00000006u, 0x0003003eu, 0x000078c3u, 0x00000220u, 0x00050051u, 0x00000009u, 0x00000223u, 0x0000020cu, 0x00000007u, 0x0003003eu, 0x000078c4u, 0x00000223u, 0x000b0050u, 0x0000000au, 0x000078cdu, 0x0000020fu, 0x00000211u, 0x00000214u, 0x00000217u, 0x0000021au, 0x0000021du, 0x00000220u, 0x00000223u, 0x000200feu, 0x000078cdu, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000012u, 0x00000000u, 0x00000010u, 0x00030037u, 0x00000007u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003du, 0x00000006u, 0x00000233u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000235u, 0x00000232u, 0x00000203u, 0x00000233u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00000236u, 0x00000235u, 0x00040071u, 0x00000237u, 0x00000238u, 0x00000236u, 0x0004007cu, 0x00000009u, 0x00000239u, 0x00000238u, 0x0004003du, 0x00000006u, 0x0000023au, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000023bu, 0x00000232u, 0x00000203u, 0x0000023au, 0x00000212u, 0x0004003du, 0x0000022au, 0x0000023cu, 0x0000023bu, 0x00040071u, 0x00000237u, 0x0000023du, 0x0000023cu, 0x0004007cu, 0x00000009u, 0x0000023eu, 0x0000023du, 0x0004003du, 0x00000006u, 0x0000023fu, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000240u, 0x00000232u, 0x00000203u, 0x0000023fu, 0x00000215u, 0x0004003du, 0x0000022au, 0x00000241u, 0x00000240u, 0x00040071u, 0x00000237u, 0x00000242u, 0x00000241u, 0x0004007cu, 0x00000009u, 0x00000243u, 0x00000242u, 0x0004003du, 0x00000006u, 0x00000244u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000245u, 0x00000232u, 0x00000203u, 0x00000244u, 0x00000218u, 0x0004003du, 0x0000022au, 0x00000246u, 0x00000245u, 0x00040071u, 0x00000237u, 0x00000247u, 0x00000246u, 0x0004007cu, 0x00000009u, 0x00000248u, 0x00000247u, 0x0004003du, 0x00000006u, 0x00000249u, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000024au, 0x00000232u, 0x00000203u, 0x00000249u, 0x0000021bu, 0x0004003du, 0x0000022au, 0x0000024bu, 0x0000024au, 0x00040071u, 0x00000237u, 0x0000024cu, 0x0000024bu, 0x0004007cu, 0x00000009u, 0x0000024du, 0x0000024cu, 0x0004003du, 0x00000006u, 0x0000024eu, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000024fu, 0x00000232u, 0x00000203u, 0x0000024eu, 0x0000021eu, 0x0004003du, 0x0000022au, 0x00000250u, 0x0000024fu, 0x00040071u, 0x00000237u, 0x00000251u, 0x00000250u, 0x0004007cu, 0x00000009u, 0x00000252u, 0x00000251u, 0x0004003du, 0x00000006u, 0x00000253u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000254u, 0x00000232u, 0x00000203u, 0x00000253u, 0x00000221u, 0x0004003du, 0x0000022au, 0x00000255u, 0x00000254u, 0x00040071u, 0x00000237u, 0x00000256u, 0x00000255u, 0x0004007cu, 0x00000009u, 0x00000257u, 0x00000256u, 0x0004003du, 0x00000006u, 0x00000258u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000259u, 0x00000232u, 0x00000203u, 0x00000258u, 0x00000224u, 0x0004003du, 0x0000022au, 0x0000025au, 0x00000259u, 0x00040071u, 0x00000237u, 0x0000025bu, 0x0000025au, 0x0004007cu, 0x00000009u, 0x0000025cu, 0x0000025bu, 0x0004003du, 0x00000006u, 0x0000025du, 0x00000011u, 0x00070041u, 0x00000234u, 0x0000025fu, 0x00000232u, 0x00000203u, 0x0000025du, 0x0000025eu, 0x0004003du, 0x0000022au, 0x00000260u, 0x0000025fu, 0x00040071u, 0x00000237u, 0x00000261u, 0x00000260u, 0x0004007cu, 0x00000009u, 0x00000262u, 0x00000261u, 0x0004003du, 0x00000006u, 0x00000263u, 0x00000011u, 0x00070041u, 0x00000234u, 0x00000265u, 0x00000232u, 0x00000203u, 0x00000263u, 0x00000264u, 0x0004003du, 0x0000022au, 0x00000266u, 0x00000265u, 0x00040071u, 0x00000237u, 0x00000267u, 0x00000266u, 0x0004007cu, 0x00000009u, 0x00000268u, 0x00000267u, 0x0004003du, 0x00000006u, 0x00000269u, 0x00000011u, 0x00070041u, 0x0000026bu, 0x0000026cu, 0x00000232u, 0x00000203u, 0x00000269u, 0x0000026au, 0x0004003du, 0x00000006u, 0x0000026du, 0x0000026cu, 0x0004003du, 0x00000006u, 0x0000026eu, 0x00000011u, 0x00070041u, 0x00000270u, 0x00000271u, 0x00000232u, 0x00000203u, 0x0000026eu, 0x0000026fu, 0x0004003du, 0x0000022bu, 0x00000272u, 0x00000271u, 0x00040071u, 0x00000006u, 0x00000273u, 0x00000272u, 0x0004007cu, 0x00000008u, 0x00000274u, 0x00000273u, 0x0004003du, 0x00000006u, 0x00000275u, 0x00000011u, 0x00070041u, 0x00000277u, 0x00000278u, 0x00000232u, 0x00000203u, 0x00000275u, 0x00000276u, 0x0004003du, 0x00000229u, 0x00000279u, 0x00000278u, 0x00040071u, 0x00000006u, 0x0000027au, 0x00000279u, 0x0004007cu, 0x00000008u, 0x0000027bu, 0x0000027au, 0x0004003du, 0x00000006u, 0x0000027cu, 0x00000011u, 0x00070041u, 0x00000277u, 0x0000027eu, 0x00000232u, 0x00000203u, 0x0000027cu, 0x0000027du, 0x0004003du, 0x00000229u, 0x0000027fu, 0x0000027eu, 0x00040071u, 0x00000006u, 0x00000280u, 0x0000027fu, 0x0004007cu, 0x00000008u, 0x00000281u, 0x00000280u, 0x0004003du, 0x00000006u, 0x00000282u, 0x00000011u, 0x00070041u, 0x00000284u, 0x00000285u, 0x00000232u, 0x00000203u, 0x00000282u, 0x00000283u, 0x0004003du, 0x0000022du, 0x00000286u, 0x00000285u, 0x00040072u, 0x00000009u, 0x00000287u, 0x00000286u, 0x00120050u, 0x0000000fu, 0x00000288u, 0x00000239u, 0x0000023eu, 0x00000243u, 0x00000248u, 0x0000024du, 0x00000252u, 0x00000257u, 0x0000025cu, 0x00000262u, 0x00000268u, 0x0000026du, 0x00000274u, 0x0000027bu, 0x00000281u, 0x00000287u, 0x000200feu, 0x00000288u, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003du, 0x00000006u, 0x00000290u, 0x00000016u, 0x00070041u, 0x00000234u, 0x00000291u, 0x0000028fu, 0x00000203u, 0x00000290u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00000292u, 0x00000291u, 0x00040071u, 0x00000237u, 0x00000293u, 0x00000292u, 0x0004007cu, 0x00000009u, 0x00000294u, 0x00000293u, 0x0004003du, 0x00000006u, 0x00000295u, 0x00000016u, 0x00070041u, 0x00000234u, 0x00000296u, 0x0000028fu, 0x00000203u, 0x00000295u, 0x00000212u, 0x0004003du, 0x0000022au, 0x00000297u, 0x00000296u, 0x00040071u, 0x00000237u, 0x00000298u, 0x00000297u, 0x0004007cu, 0x00000009u, 0x00000299u, 0x00000298u, 0x0004003du, 0x00000006u, 0x0000029au, 0x00000016u, 0x00070041u, 0x00000234u, 0x0000029bu, 0x0000028fu, 0x00000203u, 0x0000029au, 0x00000215u, 0x0004003du, 0x0000022au, 0x0000029cu, 0x0000029bu, 0x00040071u, 0x00000237u, 0x0000029du, 0x0000029cu, 0x0004007cu, 0x00000009u, 0x0000029eu, 0x0000029du, 0x0004003du, 0x00000006u, 0x0000029fu, 0x00000016u, 0x00070041u, 0x00000234u, 0x000002a0u, 0x0000028fu, 0x00000203u, 0x0000029fu, 0x00000218u, 0x0004003du, 0x0000022au, 0x000002a1u, 0x000002a0u, 0x00040071u, 0x00000237u, 0x000002a2u, 0x000002a1u, 0x0004007cu, 0x00000009u, 0x000002a3u, 0x000002a2u, 0x0004003du, 0x00000006u, 0x000002a4u, 0x00000016u, 0x00070041u, 0x0000026bu, 0x000002a5u, 0x0000028fu, 0x00000203u, 0x000002a4u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000002a6u, 0x000002a5u, 0x0004003du, 0x00000006u, 0x000002a7u, 0x00000016u, 0x00070041u, 0x000002a8u, 0x000002a9u, 0x0000028fu, 0x00000203u, 0x000002a7u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x000002aau, 0x000002a9u, 0x000b0050u, 0x00000014u, 0x000002abu, 0x00000294u, 0x00000299u, 0x0000029eu, 0x000002a3u, 0x000002a6u, 0x000002aau, 0x00000203u, 0x00000203u, 0x000200feu, 0x000002abu, 0x00010038u, 0x00050036u, 0x00000019u, 0x0000001cu, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000007u, 0x0000001bu, 0x000200f8u, 0x0000001du, 0x0004003du, 0x00000006u, 0x000002b3u, 0x0000001bu, 0x00070041u, 0x00000234u, 0x000002b4u, 0x000002b2u, 0x00000203u, 0x000002b3u, 0x00000203u, 0x0004003du, 0x0000022au, 0x000002b5u, 0x000002b4u, 0x00040071u, 0x00000237u, 0x000002b6u, 0x000002b5u, 0x0004007cu, 0x00000009u, 0x000002b7u, 0x000002b6u, 0x0004003du, 0x00000006u, 0x000002b8u, 0x0000001bu, 0x00070041u, 0x00000234u, 0x000002b9u, 0x000002b2u, 0x00000203u, 0x000002b8u, 0x00000212u, 0x0004003du, 0x0000022au, 0x000002bau, 0x000002b9u, 0x00040071u, 0x00000237u, 0x000002bbu, 0x000002bau, 0x0004007cu, 0x00000009u, 0x000002bcu, 0x000002bbu, 0x0004003du, 0x00000006u, 0x000002bdu, 0x0000001bu, 0x00070041u, 0x0000026bu, 0x000002beu, 0x000002b2u, 0x00000203u, 0x000002bdu, 0x00000215u, 0x0004003du, 0x00000006u, 0x000002bfu, 0x000002beu, 0x0004003du, 0x00000006u, 0x000002c0u, 0x0000001bu, 0x00070041u, 0x00000277u, 0x000002c1u, 0x000002b2u, 0x00000203u, 0x000002c0u, 0x00000218u, 0x0004003du, 0x00000229u, 0x000002c2u, 0x000002c1u, 0x00040071u, 0x00000006u, 0x000002c3u, 0x000002c2u, 0x0004007cu, 0x00000008u, 0x000002c4u, 0x000002c3u, 0x0004003du, 0x00000006u, 0x000002c5u, 0x0000001bu, 0x00070041u, 0x00000277u, 0x000002c6u, 0x000002b2u, 0x00000203u, 0x000002c5u, 0x0000021bu, 0x0004003du, 0x00000229u, 0x000002c7u, 0x000002c6u, 0x00040071u, 0x00000006u, 0x000002c8u, 0x000002c7u, 0x0004007cu, 0x00000008u, 0x000002c9u, 0x000002c8u, 0x000a0050u, 0x00000019u, 0x000002cau, 0x000002b7u, 0x000002bcu, 0x000002bfu, 0x000002c4u, 0x000002c9u, 0x00000203u, 0x00000203u, 0x000200feu, 0x000002cau, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000021u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003du, 0x00000006u, 0x000002d2u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002d3u, 0x000002d1u, 0x00000203u, 0x000002d2u, 0x00000203u, 0x0004003du, 0x00000006u, 0x000002d4u, 0x000002d3u, 0x0004003du, 0x00000006u, 0x000002d5u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002d6u, 0x000002d1u, 0x00000203u, 0x000002d5u, 0x00000212u, 0x0004003du, 0x00000006u, 0x000002d7u, 0x000002d6u, 0x0004003du, 0x00000006u, 0x000002d8u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002d9u, 0x000002d1u, 0x00000203u, 0x000002d8u, 0x00000215u, 0x0004003du, 0x00000006u, 0x000002dau, 0x000002d9u, 0x0004003du, 0x00000006u, 0x000002dbu, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002dcu, 0x000002d1u, 0x00000203u, 0x000002dbu, 0x00000218u, 0x0004003du, 0x00000006u, 0x000002ddu, 0x000002dcu, 0x0004003du, 0x00000006u, 0x000002deu, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002dfu, 0x000002d1u, 0x00000203u, 0x000002deu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000002e0u, 0x000002dfu, 0x0004003du, 0x00000006u, 0x000002e1u, 0x00000020u, 0x00070041u, 0x0000026bu, 0x000002e2u, 0x000002d1u, 0x00000203u, 0x000002e1u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000002e3u, 0x000002e2u, 0x0004003du, 0x00000006u, 0x000002e4u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002e5u, 0x000002d1u, 0x00000203u, 0x000002e4u, 0x00000221u, 0x0004003du, 0x00000229u, 0x000002e6u, 0x000002e5u, 0x00040071u, 0x00000006u, 0x000002e7u, 0x000002e6u, 0x0004007cu, 0x00000008u, 0x000002e8u, 0x000002e7u, 0x0004003du, 0x00000006u, 0x000002e9u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002eau, 0x000002d1u, 0x00000203u, 0x000002e9u, 0x00000224u, 0x0004003du, 0x00000229u, 0x000002ebu, 0x000002eau, 0x00040071u, 0x00000006u, 0x000002ecu, 0x000002ebu, 0x0004007cu, 0x00000008u, 0x000002edu, 0x000002ecu, 0x0004003du, 0x00000006u, 0x000002eeu, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002efu, 0x000002d1u, 0x00000203u, 0x000002eeu, 0x0000025eu, 0x0004003du, 0x00000229u, 0x000002f0u, 0x000002efu, 0x00040071u, 0x00000006u, 0x000002f1u, 0x000002f0u, 0x0004007cu, 0x00000008u, 0x000002f2u, 0x000002f1u, 0x0004003du, 0x00000006u, 0x000002f3u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002f4u, 0x000002d1u, 0x00000203u, 0x000002f3u, 0x00000264u, 0x0004003du, 0x00000229u, 0x000002f5u, 0x000002f4u, 0x00040071u, 0x00000006u, 0x000002f6u, 0x000002f5u, 0x0004007cu, 0x00000008u, 0x000002f7u, 0x000002f6u, 0x0004003du, 0x00000006u, 0x000002f8u, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002f9u, 0x000002d1u, 0x00000203u, 0x000002f8u, 0x0000026au, 0x0004003du, 0x00000229u, 0x000002fau, 0x000002f9u, 0x00040071u, 0x00000006u, 0x000002fbu, 0x000002fau, 0x0004007cu, 0x00000008u, 0x000002fcu, 0x000002fbu, 0x0004003du, 0x00000006u, 0x000002fdu, 0x00000020u, 0x00070041u, 0x00000277u, 0x000002feu, 0x000002d1u, 0x00000203u, 0x000002fdu, 0x0000026fu, 0x0004003du, 0x00000229u, 0x000002ffu, 0x000002feu, 0x00040071u, 0x00000006u, 0x00000300u, 0x000002ffu, 0x0004007cu, 0x00000008u, 0x00000301u, 0x00000300u, 0x0004003du, 0x00000006u, 0x00000302u, 0x00000020u, 0x00070041u, 0x00000277u, 0x00000303u, 0x000002d1u, 0x00000203u, 0x00000302u, 0x00000276u, 0x0004003du, 0x00000229u, 0x00000304u, 0x00000303u, 0x00040071u, 0x00000006u, 0x00000305u, 0x00000304u, 0x0004007cu, 0x00000008u, 0x00000306u, 0x00000305u, 0x0004003du, 0x00000006u, 0x00000307u, 0x00000020u, 0x00070041u, 0x00000277u, 0x00000308u, 0x000002d1u, 0x00000203u, 0x00000307u, 0x0000027du, 0x0004003du, 0x00000229u, 0x00000309u, 0x00000308u, 0x00040071u, 0x00000006u, 0x0000030au, 0x00000309u, 0x0004007cu, 0x00000008u, 0x0000030bu, 0x0000030au, 0x00110050u, 0x0000001eu, 0x0000030cu, 0x000002d4u, 0x000002d7u, 0x000002dau, 0x000002ddu, 0x000002e0u, 0x000002e3u, 0x000002e8u, 0x000002edu, 0x000002f2u, 0x000002f7u, 0x000002fcu, 0x00000301u, 0x00000306u, 0x0000030bu, 0x000200feu, 0x0000030cu, 0x00010038u, 0x00050036u, 0x00000023u, 0x00000026u, 0x00000000u, 0x00000024u, 0x00030037u, 0x00000007u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000315u, 0x00000025u, 0x00070041u, 0x00000316u, 0x00000317u, 0x00000314u, 0x00000203u, 0x00000315u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00000318u, 0x00000317u, 0x0004003du, 0x00000006u, 0x00000319u, 0x00000025u, 0x00070041u, 0x00000316u, 0x0000031au, 0x00000314u, 0x00000203u, 0x00000319u, 0x00000212u, 0x0004003du, 0x00000009u, 0x0000031bu, 0x0000031au, 0x0004003du, 0x00000006u, 0x0000031cu, 0x00000025u, 0x00070041u, 0x0000031du, 0x0000031eu, 0x00000314u, 0x00000203u, 0x0000031cu, 0x00000215u, 0x0004003du, 0x0000030fu, 0x0000031fu, 0x0000031eu, 0x00040071u, 0x00000237u, 0x00000320u, 0x0000031fu, 0x0004007cu, 0x00000009u, 0x00000321u, 0x00000320u, 0x0004003du, 0x00000006u, 0x00000322u, 0x00000025u, 0x00070041u, 0x0000031du, 0x00000323u, 0x00000314u, 0x00000203u, 0x00000322u, 0x00000218u, 0x0004003du, 0x0000030fu, 0x00000324u, 0x00000323u, 0x00040071u, 0x00000237u, 0x00000325u, 0x00000324u, 0x0004007cu, 0x00000009u, 0x00000326u, 0x00000325u, 0x0004003du, 0x00000006u, 0x00000327u, 0x00000025u, 0x00070041u, 0x000002a8u, 0x00000328u, 0x00000314u, 0x00000203u, 0x00000327u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x00000329u, 0x00000328u, 0x0004003du, 0x00000006u, 0x0000032au, 0x00000025u, 0x00070041u, 0x000002a8u, 0x0000032bu, 0x00000314u, 0x00000203u, 0x0000032au, 0x0000021eu, 0x0004003du, 0x00000008u, 0x0000032cu, 0x0000032bu, 0x0004003du, 0x00000006u, 0x0000032du, 0x00000025u, 0x00070041u, 0x000002a8u, 0x0000032eu, 0x00000314u, 0x00000203u, 0x0000032du, 0x00000221u, 0x0004003du, 0x00000008u, 0x0000032fu, 0x0000032eu, 0x0004003du, 0x00000006u, 0x00000330u, 0x00000025u, 0x00070041u, 0x00000331u, 0x00000332u, 0x00000314u, 0x00000203u, 0x00000330u, 0x00000224u, 0x0004003du, 0x0000022cu, 0x00000333u, 0x00000332u, 0x00040072u, 0x00000008u, 0x00000334u, 0x00000333u, 0x0004003du, 0x00000006u, 0x00000335u, 0x00000025u, 0x00070041u, 0x00000270u, 0x00000336u, 0x00000314u, 0x00000203u, 0x00000335u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x00000337u, 0x00000336u, 0x00040071u, 0x00000006u, 0x00000338u, 0x00000337u, 0x0004007cu, 0x00000008u, 0x00000339u, 0x00000338u, 0x000c0050u, 0x00000023u, 0x0000033au, 0x00000318u, 0x0000031bu, 0x00000321u, 0x00000326u, 0x00000329u, 0x0000032cu, 0x0000032fu, 0x00000334u, 0x00000339u, 0x000200feu, 0x0000033au, 0x00010038u, 0x00050036u, 0x00000028u, 0x0000002bu, 0x00000000u, 0x00000029u, 0x00030037u, 0x00000007u, 0x0000002au, 0x000200f8u, 0x0000002cu, 0x0004003bu, 0x0000003eu, 0x000078d1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078d0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078cfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078ceu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000342u, 0x0000002au, 0x00060041u, 0x00000343u, 0x00000344u, 0x00000341u, 0x00000203u, 0x00000342u, 0x0004003du, 0x0000033du, 0x00000345u, 0x00000344u, 0x00050051u, 0x00000008u, 0x00000348u, 0x00000345u, 0x00000000u, 0x0003003eu, 0x000078ceu, 0x00000348u, 0x00050051u, 0x00000008u, 0x0000034au, 0x00000345u, 0x00000001u, 0x0003003eu, 0x000078cfu, 0x0000034au, 0x00050051u, 0x00000008u, 0x0000034cu, 0x00000345u, 0x00000002u, 0x0003003eu, 0x000078d0u, 0x0000034cu, 0x00050051u, 0x00000008u, 0x0000034eu, 0x00000345u, 0x00000003u, 0x0003003eu, 0x000078d1u, 0x0000034eu, 0x00070050u, 0x00000028u, 0x000078d6u, 0x00000348u, 0x0000034au, 0x0000034cu, 0x0000034eu, 0x000200feu, 0x000078d6u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000031u, 0x00000000u, 0x0000002du, 0x00030037u, 0x00000007u, 0x0000002eu, 0x00030037u, 0x00000007u, 0x0000002fu, 0x00030037u, 0x00000007u, 0x00000030u, 0x000200f8u, 0x00000032u, 0x0004003bu, 0x00000354u, 0x00000355u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000356u, 0x0000002eu, 0x0004003du, 0x00000006u, 0x00000357u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x00000358u, 0x00000030u, 0x00060050u, 0x00000353u, 0x00000359u, 0x00000356u, 0x00000357u, 0x00000358u, 0x0003003eu, 0x00000355u, 0x00000359u, 0x0004003du, 0x00000353u, 0x0000035au, 0x00000355u, 0x000500c2u, 0x00000353u, 0x0000035du, 0x0000035au, 0x0000eedcu, 0x0004003du, 0x00000353u, 0x0000035eu, 0x00000355u, 0x0008004fu, 0x00000353u, 0x0000035fu, 0x0000035eu, 0x0000035eu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00000360u, 0x0000035du, 0x0000035fu, 0x00050084u, 0x00000353u, 0x00000363u, 0x00000360u, 0x0000eeddu, 0x0003003eu, 0x00000355u, 0x00000363u, 0x0004003du, 0x00000353u, 0x00000364u, 0x00000355u, 0x000500c2u, 0x00000353u, 0x00000366u, 0x00000364u, 0x0000eedcu, 0x0004003du, 0x00000353u, 0x00000367u, 0x00000355u, 0x0008004fu, 0x00000353u, 0x00000368u, 0x00000367u, 0x00000367u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00000369u, 0x00000366u, 0x00000368u, 0x00050084u, 0x00000353u, 0x0000036bu, 0x00000369u, 0x0000eeddu, 0x0003003eu, 0x00000355u, 0x0000036bu, 0x0004003du, 0x00000353u, 0x0000036cu, 0x00000355u, 0x000500c2u, 0x00000353u, 0x0000036eu, 0x0000036cu, 0x0000eedcu, 0x0004003du, 0x00000353u, 0x0000036fu, 0x00000355u, 0x0008004fu, 0x00000353u, 0x00000370u, 0x0000036fu, 0x0000036fu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x00000353u, 0x00000371u, 0x0000036eu, 0x00000370u, 0x00050084u, 0x00000353u, 0x00000373u, 0x00000371u, 0x0000eeddu, 0x0003003eu, 0x00000355u, 0x00000373u, 0x00050041u, 0x00000007u, 0x00000375u, 0x00000355u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000376u, 0x00000375u, 0x000500c2u, 0x00000006u, 0x00000378u, 0x00000376u, 0x00000377u, 0x0004007cu, 0x00000008u, 0x00000379u, 0x00000378u, 0x0003003eu, 0x00000202u, 0x00000379u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000034u, 0x00000000u, 0x00000033u, 0x000200f8u, 0x00000035u, 0x0004003du, 0x00000008u, 0x0000037au, 0x00000202u, 0x000500c7u, 0x00000008u, 0x0000037bu, 0x0000037au, 0x00000224u, 0x000500c4u, 0x00000008u, 0x0000037cu, 0x0000037bu, 0x00000221u, 0x000500c5u, 0x00000008u, 0x0000037eu, 0x0000037cu, 0x0000037du, 0x000200feu, 0x0000037eu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000036u, 0x00000000u, 0x00000033u, 0x000200f8u, 0x00000037u, 0x0004003du, 0x00000008u, 0x00000381u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00000382u, 0x00000381u, 0x00000224u, 0x000200feu, 0x00000382u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000038u, 0x00000000u, 0x00000033u, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000008u, 0x00000385u, 0x00000202u, 0x000500c7u, 0x00000008u, 0x00000387u, 0x00000385u, 0x00000386u, 0x000200feu, 0x00000387u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003au, 0x00000000u, 0x00000033u, 0x000200f8u, 0x0000003bu, 0x0004003du, 0x00000008u, 0x0000038au, 0x00000202u, 0x000500c7u, 0x00000008u, 0x0000038cu, 0x0000038au, 0x0000038bu, 0x000200feu, 0x0000038cu, 0x00010038u, 0x00050036u, 0x0000003cu, 0x00000042u, 0x00000000u, 0x0000003fu, 0x00030037u, 0x0000003du, 0x00000040u, 0x00030037u, 0x0000003eu, 0x00000041u, 0x000200f8u, 0x00000043u, 0x0004003bu, 0x0000003du, 0x0000038fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000396u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000003a4u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000003adu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000390u, 0x00000041u, 0x00060050u, 0x0000003cu, 0x00000391u, 0x00000390u, 0x00000390u, 0x00000390u, 0x000500c3u, 0x0000003cu, 0x00000393u, 0x00000391u, 0x00000392u, 0x000500c7u, 0x0000003cu, 0x00000395u, 0x00000393u, 0x0000eef2u, 0x0003003eu, 0x0000038fu, 0x00000395u, 0x0004003du, 0x0000003cu, 0x00000397u, 0x00000040u, 0x000500c7u, 0x0000003cu, 0x0000039au, 0x00000397u, 0x0000eef1u, 0x00050080u, 0x0000003cu, 0x0000039cu, 0x0000039au, 0x0000eef3u, 0x0004003du, 0x0000003cu, 0x0000039eu, 0x00000040u, 0x000500adu, 0x000003a1u, 0x000003a2u, 0x0000039eu, 0x000003a0u, 0x000600a9u, 0x0000003cu, 0x000003a3u, 0x000003a2u, 0x0000039du, 0x0000039cu, 0x0003003eu, 0x00000396u, 0x000003a3u, 0x0004003du, 0x0000003cu, 0x000003a6u, 0x00000040u, 0x000500c7u, 0x0000003cu, 0x000003a8u, 0x000003a6u, 0x0000eef2u, 0x00050082u, 0x0000003cu, 0x000003a9u, 0x00000395u, 0x000003a8u, 0x000500c3u, 0x0000003cu, 0x000003acu, 0x000003a9u, 0x0000eef4u, 0x0003003eu, 0x000003a4u, 0x000003acu, 0x0004003du, 0x0000003cu, 0x000003afu, 0x00000040u, 0x00050082u, 0x0000003cu, 0x000003b0u, 0x000003a3u, 0x000003afu, 0x0003003eu, 0x000003adu, 0x000003b0u, 0x0004003du, 0x0000003cu, 0x000003b1u, 0x00000040u, 0x000500c7u, 0x0000003cu, 0x000003b4u, 0x000003b0u, 0x000003acu, 0x00050080u, 0x0000003cu, 0x000003b5u, 0x000003b1u, 0x000003b4u, 0x0003003eu, 0x00000396u, 0x000003b5u, 0x000500c7u, 0x0000003cu, 0x000003b8u, 0x000003b5u, 0x0000039du, 0x00050051u, 0x00000008u, 0x000003b9u, 0x000003b8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003bau, 0x000003b8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003bbu, 0x000003b8u, 0x00000002u, 0x000200feu, 0x000003b8u, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000004bu, 0x00000000u, 0x00000044u, 0x00030037u, 0x0000003eu, 0x00000045u, 0x00030037u, 0x0000003eu, 0x00000046u, 0x00030037u, 0x0000003eu, 0x00000047u, 0x00030037u, 0x0000003eu, 0x00000048u, 0x00030037u, 0x0000003eu, 0x00000049u, 0x00030037u, 0x0000003eu, 0x0000004au, 0x000200f8u, 0x0000004cu, 0x0004003bu, 0x000003d0u, 0x000003d1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000003eau, 0x00000007u, 0x0004003bu, 0x000003d0u, 0x000003f5u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000003bfu, 0x00000047u, 0x000500b1u, 0x0000005du, 0x000003c0u, 0x000003bfu, 0x00000215u, 0x000300f7u, 0x000003c2u, 0x00000000u, 0x000400fau, 0x000003c0u, 0x000003c1u, 0x000003d6u, 0x000200f8u, 0x000003c1u, 0x0004003du, 0x00000008u, 0x000003c9u, 0x00000047u, 0x0004003du, 0x00000008u, 0x000003cau, 0x00000046u, 0x000500c7u, 0x00000008u, 0x000003cbu, 0x000003cau, 0x00000218u, 0x00050084u, 0x00000008u, 0x000003ccu, 0x000003cbu, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000003cdu, 0x00000045u, 0x000500c7u, 0x00000008u, 0x000003ceu, 0x000003cdu, 0x00000218u, 0x00050080u, 0x00000008u, 0x000003cfu, 0x000003ccu, 0x000003ceu, 0x0003003eu, 0x000003d1u, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x000003d2u, 0x000003d1u, 0x000003c9u, 0x000003cfu, 0x0004003du, 0x00000008u, 0x000003d3u, 0x000003d2u, 0x00050084u, 0x00000008u, 0x000003d5u, 0x000003d3u, 0x000003d4u, 0x0003003eu, 0x00000049u, 0x000003d5u, 0x000200f9u, 0x000003c2u, 0x000200f8u, 0x000003d6u, 0x0004003du, 0x00000008u, 0x000003d7u, 0x00000047u, 0x000500aau, 0x0000005du, 0x000003d8u, 0x000003d7u, 0x00000215u, 0x000300f7u, 0x000003dau, 0x00000000u, 0x000400fau, 0x000003d8u, 0x000003d9u, 0x000003dcu, 0x000200f8u, 0x000003d9u, 0x00040039u, 0x00000008u, 0x000003dbu, 0x00000038u, 0x0003003eu, 0x00000049u, 0x000003dbu, 0x000200f9u, 0x000003dau, 0x000200f8u, 0x000003dcu, 0x0003003eu, 0x00000049u, 0x00000203u, 0x000200f9u, 0x000003dau, 0x000200f8u, 0x000003dau, 0x000200f9u, 0x000003c2u, 0x000200f8u, 0x000003c2u, 0x0004003du, 0x00000008u, 0x000003ddu, 0x00000048u, 0x000500aau, 0x0000005du, 0x000003deu, 0x000003ddu, 0x00000218u, 0x000300f7u, 0x000003e0u, 0x00000000u, 0x000400fau, 0x000003deu, 0x000003dfu, 0x000003e1u, 0x000200f8u, 0x000003dfu, 0x0003003eu, 0x0000004au, 0x00000203u, 0x000200f9u, 0x000003e0u, 0x000200f8u, 0x000003e1u, 0x0004003du, 0x00000008u, 0x000003e2u, 0x00000048u, 0x000500aau, 0x0000005du, 0x000003e3u, 0x000003e2u, 0x00000215u, 0x000300f7u, 0x000003e5u, 0x00000000u, 0x000400fau, 0x000003e3u, 0x000003e4u, 0x000003e7u, 0x000200f8u, 0x000003e4u, 0x00040039u, 0x00000008u, 0x000003e6u, 0x00000036u, 0x0003003eu, 0x0000004au, 0x000003e6u, 0x000200f9u, 0x000003e5u, 0x000200f8u, 0x000003e7u, 0x0004003du, 0x00000008u, 0x000003e8u, 0x00000047u, 0x000500afu, 0x0000005du, 0x000003e9u, 0x000003e8u, 0x00000215u, 0x000300f7u, 0x000003ecu, 0x00000000u, 0x000400fau, 0x000003e9u, 0x000003ebu, 0x000003f8u, 0x000200f8u, 0x000003ebu, 0x0004003du, 0x00000008u, 0x000003edu, 0x00000047u, 0x000500c7u, 0x00000008u, 0x000003eeu, 0x000003edu, 0x00000212u, 0x0004003du, 0x00000008u, 0x000003efu, 0x00000046u, 0x000500c7u, 0x00000008u, 0x000003f0u, 0x000003efu, 0x00000218u, 0x00050084u, 0x00000008u, 0x000003f1u, 0x000003f0u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000003f2u, 0x00000045u, 0x000500c7u, 0x00000008u, 0x000003f3u, 0x000003f2u, 0x00000218u, 0x00050080u, 0x00000008u, 0x000003f4u, 0x000003f1u, 0x000003f3u, 0x0003003eu, 0x000003f5u, 0x000003c8u, 0x00060041u, 0x0000003eu, 0x000003f6u, 0x000003f5u, 0x000003eeu, 0x000003f4u, 0x0004003du, 0x00000008u, 0x000003f7u, 0x000003f6u, 0x0003003eu, 0x000003eau, 0x000003f7u, 0x000200f9u, 0x000003ecu, 0x000200f8u, 0x000003f8u, 0x0004003du, 0x00000008u, 0x000003f9u, 0x00000049u, 0x000500c7u, 0x00000008u, 0x000003fau, 0x000003f9u, 0x00000224u, 0x0003003eu, 0x000003eau, 0x000003fau, 0x000200f9u, 0x000003ecu, 0x000200f8u, 0x000003ecu, 0x000700f5u, 0x00000008u, 0x0000ea09u, 0x000003f7u, 0x000003ebu, 0x000003fau, 0x000003f8u, 0x0003003eu, 0x0000004au, 0x0000ea09u, 0x0004003du, 0x00000008u, 0x000003fcu, 0x00000048u, 0x000500aau, 0x0000005du, 0x000003fdu, 0x000003fcu, 0x00000212u, 0x000300f7u, 0x000003ffu, 0x00000000u, 0x000400fau, 0x000003fdu, 0x000003feu, 0x000003ffu, 0x000200f8u, 0x000003feu, 0x0004003du, 0x00000008u, 0x00000400u, 0x0000004au, 0x000400c8u, 0x00000008u, 0x00000401u, 0x00000400u, 0x000500c7u, 0x00000008u, 0x00000402u, 0x00000401u, 0x00000224u, 0x0003003eu, 0x0000004au, 0x00000402u, 0x000200f9u, 0x000003ffu, 0x000200f8u, 0x000003ffu, 0x000200f9u, 0x000003e5u, 0x000200f8u, 0x000003e5u, 0x000200f9u, 0x000003e0u, 0x000200f8u, 0x000003e0u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000004fu, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x0000004eu, 0x000200f8u, 0x00000050u, 0x0004003bu, 0x0000003eu, 0x00000403u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000405u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000408u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000040cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000410u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000404u, 0x0000004eu, 0x0003003eu, 0x00000403u, 0x00000404u, 0x000500c3u, 0x00000008u, 0x00000407u, 0x00000404u, 0x0000026fu, 0x0003003eu, 0x00000405u, 0x00000407u, 0x000500c7u, 0x00000008u, 0x0000040bu, 0x00000404u, 0x0000040au, 0x0003003eu, 0x00000408u, 0x0000040bu, 0x00050082u, 0x00000008u, 0x0000040eu, 0x00000221u, 0x00000407u, 0x0007000cu, 0x00000008u, 0x0000040fu, 0x00000001u, 0x0000002au, 0x0000040eu, 0x00000203u, 0x0003003eu, 0x0000040cu, 0x0000040fu, 0x000500c3u, 0x00000008u, 0x00000413u, 0x00000411u, 0x00000407u, 0x00050082u, 0x00000008u, 0x00000414u, 0x00000411u, 0x00000413u, 0x0003003eu, 0x00000410u, 0x00000414u, 0x000500c4u, 0x00000008u, 0x00000417u, 0x0000040bu, 0x0000040fu, 0x00050080u, 0x00000008u, 0x00000419u, 0x00000417u, 0x00000414u, 0x000200feu, 0x00000419u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000052u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x00000051u, 0x000200f8u, 0x00000053u, 0x0004003bu, 0x0000003eu, 0x0000041cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000421u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000428u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000042cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000041eu, 0x00000051u, 0x00050082u, 0x00000008u, 0x0000041fu, 0x0000041du, 0x0000041eu, 0x0007000cu, 0x00000008u, 0x00000420u, 0x00000001u, 0x0000002au, 0x0000041fu, 0x00000212u, 0x0003003eu, 0x0000041cu, 0x00000420u, 0x0006000cu, 0x00000008u, 0x00000424u, 0x00000001u, 0x0000004au, 0x00000420u, 0x00050082u, 0x00000008u, 0x00000425u, 0x00000422u, 0x00000424u, 0x0003003eu, 0x00000421u, 0x00000425u, 0x0008000cu, 0x00000008u, 0x00000427u, 0x00000001u, 0x0000002du, 0x00000425u, 0x00000203u, 0x00000224u, 0x0003003eu, 0x00000421u, 0x00000427u, 0x00050082u, 0x00000008u, 0x0000042au, 0x00000221u, 0x00000427u, 0x0007000cu, 0x00000008u, 0x0000042bu, 0x00000001u, 0x0000002au, 0x0000042au, 0x00000203u, 0x0003003eu, 0x00000428u, 0x0000042bu, 0x0004003du, 0x00000008u, 0x0000042du, 0x00000051u, 0x000500c3u, 0x00000008u, 0x0000042fu, 0x0000042du, 0x0000042bu, 0x000500c7u, 0x00000008u, 0x00000430u, 0x0000042fu, 0x0000040au, 0x0003003eu, 0x0000042cu, 0x00000430u, 0x000500c4u, 0x00000008u, 0x00000432u, 0x00000427u, 0x0000026fu, 0x00050080u, 0x00000008u, 0x00000434u, 0x00000432u, 0x00000430u, 0x000200feu, 0x00000434u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000055u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x00000054u, 0x000200f8u, 0x00000056u, 0x0004003du, 0x00000008u, 0x00000437u, 0x00000054u, 0x000500c4u, 0x00000008u, 0x00000438u, 0x00000212u, 0x00000437u, 0x000200feu, 0x00000438u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000058u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x00000057u, 0x000200f8u, 0x00000059u, 0x0004003du, 0x00000008u, 0x0000043bu, 0x00000057u, 0x0006000cu, 0x00000008u, 0x0000043cu, 0x00000001u, 0x0000004au, 0x0000043bu, 0x0007000cu, 0x00000008u, 0x0000043du, 0x00000001u, 0x0000002au, 0x0000043cu, 0x00000203u, 0x000200feu, 0x0000043du, 0x00010038u, 0x00050036u, 0x0000003cu, 0x0000006au, 0x00000000u, 0x00000061u, 0x00030037u, 0x0000005bu, 0x00000062u, 0x00030037u, 0x0000005cu, 0x00000063u, 0x00030037u, 0x0000005eu, 0x00000064u, 0x00030037u, 0x0000005eu, 0x00000065u, 0x00030037u, 0x0000005eu, 0x00000066u, 0x00030037u, 0x0000005eu, 0x00000067u, 0x00030037u, 0x00000060u, 0x00000068u, 0x00030037u, 0x0000005eu, 0x00000069u, 0x000200f8u, 0x0000006bu, 0x0005003bu, 0x0000005eu, 0x00001f33u, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000003du, 0x00001f30u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000447u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x0000046bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000004a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000004b5u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000004f5u, 0x00000007u, 0x000300f7u, 0x00001f2fu, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00001f32u, 0x000200f8u, 0x00001f32u, 0x00050041u, 0x0000003eu, 0x00000440u, 0x00000063u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000441u, 0x00000440u, 0x000300f7u, 0x00000446u, 0x00000000u, 0x000b00fbu, 0x00000441u, 0x00000446u, 0x00000000u, 0x00000442u, 0x00000001u, 0x00000443u, 0x00000002u, 0x00000444u, 0x00000003u, 0x00000445u, 0x000200f8u, 0x00000442u, 0x00050041u, 0x0000005cu, 0x00000448u, 0x00000062u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00000449u, 0x00000448u, 0x0008004fu, 0x0000003cu, 0x0000044au, 0x00000449u, 0x00000449u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x0000044au, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000443u, 0x00050041u, 0x0000005cu, 0x0000044cu, 0x00000062u, 0x00000212u, 0x0004003du, 0x00000009u, 0x0000044du, 0x0000044cu, 0x0008004fu, 0x0000003cu, 0x0000044eu, 0x0000044du, 0x0000044du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x0000044eu, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000444u, 0x00050041u, 0x0000005cu, 0x00000450u, 0x00000062u, 0x00000218u, 0x0004003du, 0x00000009u, 0x00000451u, 0x00000450u, 0x0008004fu, 0x0000003cu, 0x00000452u, 0x00000451u, 0x00000451u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x00000452u, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000445u, 0x00050041u, 0x0000005cu, 0x00000454u, 0x00000062u, 0x00000215u, 0x0004003du, 0x00000009u, 0x00000455u, 0x00000454u, 0x0008004fu, 0x0000003cu, 0x00000456u, 0x00000455u, 0x00000455u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000447u, 0x00000456u, 0x000200f9u, 0x00000446u, 0x000200f8u, 0x00000446u, 0x000d00f5u, 0x0000003cu, 0x0000ea24u, 0x0000ea25u, 0x00001f32u, 0x0000044au, 0x00000442u, 0x0000044eu, 0x00000443u, 0x00000452u, 0x00000444u, 0x00000456u, 0x00000445u, 0x0004003du, 0x0000005du, 0x00000459u, 0x00000069u, 0x000300f7u, 0x0000045bu, 0x00000000u, 0x000400fau, 0x00000459u, 0x0000045au, 0x0000045bu, 0x000200f8u, 0x0000045au, 0x0004003du, 0x0000005du, 0x0000045cu, 0x00000066u, 0x0004003du, 0x0000005du, 0x0000045du, 0x00000067u, 0x000400a8u, 0x0000005du, 0x0000045eu, 0x0000045du, 0x000500a7u, 0x0000005du, 0x0000045fu, 0x0000045cu, 0x0000045eu, 0x000300f7u, 0x00000461u, 0x00000000u, 0x000400fau, 0x0000045fu, 0x00000460u, 0x00000461u, 0x000200f8u, 0x00000460u, 0x0003003eu, 0x00001f33u, 0x0000055eu, 0x0003003eu, 0x00001f30u, 0x0000ea24u, 0x000200f9u, 0x00001f2fu, 0x000200f8u, 0x00000461u, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045bu, 0x00050041u, 0x0000003eu, 0x00000464u, 0x00000063u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000465u, 0x00000464u, 0x000300f7u, 0x0000046au, 0x00000000u, 0x000b00fbu, 0x00000465u, 0x0000046au, 0x00000000u, 0x00000466u, 0x00000001u, 0x00000467u, 0x00000002u, 0x00000468u, 0x00000003u, 0x00000469u, 0x000200f8u, 0x00000466u, 0x00050041u, 0x0000005cu, 0x0000046cu, 0x00000062u, 0x00000203u, 0x0004003du, 0x00000009u, 0x0000046du, 0x0000046cu, 0x0008004fu, 0x0000003cu, 0x0000046eu, 0x0000046du, 0x0000046du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x0000046eu, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x00000467u, 0x00050041u, 0x0000005cu, 0x00000470u, 0x00000062u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00000471u, 0x00000470u, 0x0008004fu, 0x0000003cu, 0x00000472u, 0x00000471u, 0x00000471u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x00000472u, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x00000468u, 0x00050041u, 0x0000005cu, 0x00000474u, 0x00000062u, 0x00000218u, 0x0004003du, 0x00000009u, 0x00000475u, 0x00000474u, 0x0008004fu, 0x0000003cu, 0x00000476u, 0x00000475u, 0x00000475u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x00000476u, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x00000469u, 0x00050041u, 0x0000005cu, 0x00000478u, 0x00000062u, 0x00000215u, 0x0004003du, 0x00000009u, 0x00000479u, 0x00000478u, 0x0008004fu, 0x0000003cu, 0x0000047au, 0x00000479u, 0x00000479u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x0000047au, 0x000200f9u, 0x0000046au, 0x000200f8u, 0x0000046au, 0x0004003du, 0x0000005du, 0x0000047du, 0x00000069u, 0x000300f7u, 0x0000047fu, 0x00000000u, 0x000400fau, 0x0000047du, 0x0000047eu, 0x0000047fu, 0x000200f8u, 0x0000047eu, 0x0004003du, 0x0000005du, 0x00000480u, 0x00000065u, 0x000400a8u, 0x0000005du, 0x00000481u, 0x00000480u, 0x000400a8u, 0x0000005du, 0x00000482u, 0x00000481u, 0x000300f7u, 0x00000484u, 0x00000000u, 0x000400fau, 0x00000482u, 0x00000483u, 0x00000484u, 0x000200f8u, 0x00000483u, 0x00050041u, 0x0000003eu, 0x00000486u, 0x00000063u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000487u, 0x00000486u, 0x000500aau, 0x0000005du, 0x00000488u, 0x00000487u, 0x00000203u, 0x000300f7u, 0x0000048au, 0x00000000u, 0x000400fau, 0x00000488u, 0x00000489u, 0x0000048au, 0x000200f8u, 0x00000489u, 0x00050041u, 0x0000003eu, 0x0000048cu, 0x00000063u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000048du, 0x0000048cu, 0x000500aau, 0x0000005du, 0x0000048eu, 0x0000048du, 0x00000203u, 0x000200f9u, 0x0000048au, 0x000200f8u, 0x0000048au, 0x000700f5u, 0x0000005du, 0x0000048fu, 0x00000488u, 0x00000483u, 0x0000048eu, 0x00000489u, 0x000300f7u, 0x00000491u, 0x00000000u, 0x000400fau, 0x0000048fu, 0x00000490u, 0x00000491u, 0x000200f8u, 0x00000490u, 0x00060041u, 0x0000003eu, 0x00000492u, 0x00000062u, 0x00000203u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000493u, 0x00000492u, 0x000500aau, 0x0000005du, 0x00000494u, 0x00000493u, 0x0000038bu, 0x000200f9u, 0x00000491u, 0x000200f8u, 0x00000491u, 0x000700f5u, 0x0000005du, 0x00000495u, 0x0000048fu, 0x0000048au, 0x00000494u, 0x00000490u, 0x000200f9u, 0x00000484u, 0x000200f8u, 0x00000484u, 0x000700f5u, 0x0000005du, 0x00000496u, 0x00000481u, 0x0000047eu, 0x00000495u, 0x00000491u, 0x000300f7u, 0x00000498u, 0x00000000u, 0x000400fau, 0x00000496u, 0x00000497u, 0x00000498u, 0x000200f8u, 0x00000497u, 0x0004003du, 0x0000003cu, 0x00000499u, 0x0000046bu, 0x0003003eu, 0x00001f33u, 0x0000055eu, 0x0003003eu, 0x00001f30u, 0x00000499u, 0x000200f9u, 0x00001f2fu, 0x000200f8u, 0x00000498u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047fu, 0x00050041u, 0x0000003eu, 0x0000049bu, 0x00000063u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000049cu, 0x0000049bu, 0x000300f7u, 0x000004a1u, 0x00000000u, 0x000b00fbu, 0x0000049cu, 0x000004a1u, 0x00000000u, 0x0000049du, 0x00000001u, 0x0000049eu, 0x00000002u, 0x0000049fu, 0x00000003u, 0x000004a0u, 0x000200f8u, 0x0000049du, 0x00060041u, 0x0000003eu, 0x000004a3u, 0x00000062u, 0x00000203u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004a4u, 0x000004a3u, 0x0003003eu, 0x000004a2u, 0x000004a4u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x0000049eu, 0x00060041u, 0x0000003eu, 0x000004a6u, 0x00000062u, 0x00000215u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004a7u, 0x000004a6u, 0x0003003eu, 0x000004a2u, 0x000004a7u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x0000049fu, 0x00050041u, 0x0000003eu, 0x000004a9u, 0x00000062u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000004aau, 0x000004a9u, 0x0003003eu, 0x000004a2u, 0x000004aau, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x000004a0u, 0x0003003eu, 0x000004a2u, 0x00000203u, 0x000200f9u, 0x000004a1u, 0x000200f8u, 0x000004a1u, 0x000d00f5u, 0x00000008u, 0x0000ea0au, 0x0000ea0fu, 0x0000047fu, 0x000004a4u, 0x0000049du, 0x000004a7u, 0x0000049eu, 0x000004aau, 0x0000049fu, 0x00000203u, 0x000004a0u, 0x00050041u, 0x0000003eu, 0x000004aeu, 0x00000063u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004afu, 0x000004aeu, 0x000300f7u, 0x000004b4u, 0x00000000u, 0x000b00fbu, 0x000004afu, 0x000004b4u, 0x00000000u, 0x000004b0u, 0x00000001u, 0x000004b1u, 0x00000002u, 0x000004b2u, 0x00000003u, 0x000004b3u, 0x000200f8u, 0x000004b0u, 0x000400c8u, 0x00000008u, 0x000004b7u, 0x0000ea0au, 0x000500c7u, 0x00000008u, 0x000004b8u, 0x000004b7u, 0x0000038bu, 0x0003003eu, 0x000004b5u, 0x000004b8u, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b1u, 0x00060041u, 0x0000003eu, 0x000004bau, 0x00000062u, 0x00000212u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000004bbu, 0x000004bau, 0x0003003eu, 0x000004b5u, 0x000004bbu, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b2u, 0x0003003eu, 0x000004b5u, 0x0000038bu, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b3u, 0x0003003eu, 0x000004b5u, 0x00000203u, 0x000200f9u, 0x000004b4u, 0x000200f8u, 0x000004b4u, 0x000d00f5u, 0x00000008u, 0x0000ea14u, 0x0000ea0fu, 0x000004a1u, 0x000004b8u, 0x000004b0u, 0x000004bbu, 0x000004b1u, 0x0000038bu, 0x000004b2u, 0x00000203u, 0x000004b3u, 0x000500c3u, 0x00000008u, 0x000004c1u, 0x0000ea0au, 0x00000218u, 0x0003003eu, 0x000004a2u, 0x000004c1u, 0x000500c3u, 0x00000008u, 0x000004c3u, 0x0000ea14u, 0x00000218u, 0x0003003eu, 0x000004b5u, 0x000004c3u, 0x0004003du, 0x00000008u, 0x000004c5u, 0x000004aeu, 0x000500aau, 0x0000005du, 0x000004c6u, 0x000004c5u, 0x00000212u, 0x000300f7u, 0x000004c8u, 0x00000000u, 0x000400fau, 0x000004c6u, 0x000004c7u, 0x000004c8u, 0x000200f8u, 0x000004c7u, 0x00050041u, 0x0000003eu, 0x000004cau, 0x00000068u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000004cbu, 0x000004cau, 0x000500c3u, 0x00000008u, 0x000004ccu, 0x000004c1u, 0x000004cbu, 0x000500c7u, 0x00000008u, 0x000004ceu, 0x000004ccu, 0x000004cdu, 0x0003003eu, 0x000004a2u, 0x000004ceu, 0x00050041u, 0x0000003eu, 0x000004d0u, 0x00000068u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000004d1u, 0x000004d0u, 0x000500c3u, 0x00000008u, 0x000004d2u, 0x000004c3u, 0x000004d1u, 0x000500c5u, 0x00000008u, 0x000004d3u, 0x000004d2u, 0x00000218u, 0x0003003eu, 0x000004b5u, 0x000004d3u, 0x000200f9u, 0x000004c8u, 0x000200f8u, 0x000004c8u, 0x000700f5u, 0x00000008u, 0x0000ea29u, 0x000004c3u, 0x000004b4u, 0x000004d3u, 0x000004c7u, 0x000700f5u, 0x00000008u, 0x0000ea1du, 0x000004c1u, 0x000004b4u, 0x000004ceu, 0x000004c7u, 0x0004003du, 0x0000003cu, 0x000004d5u, 0x0000046bu, 0x00050051u, 0x00000008u, 0x000004d6u, 0x000004d5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004d7u, 0x000004d5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004d8u, 0x000004d5u, 0x00000002u, 0x00060050u, 0x0000003cu, 0x000004dbu, 0x0000ea1du, 0x0000ea1du, 0x0000ea1du, 0x00050084u, 0x0000003cu, 0x000004dcu, 0x000004d5u, 0x000004dbu, 0x00050051u, 0x00000008u, 0x000004deu, 0x0000ea24u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004dfu, 0x0000ea24u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004e0u, 0x0000ea24u, 0x00000002u, 0x00050080u, 0x00000008u, 0x000004e3u, 0x0000ea29u, 0x00000212u, 0x00060050u, 0x0000003cu, 0x000004e4u, 0x000004e3u, 0x000004e3u, 0x000004e3u, 0x00050084u, 0x0000003cu, 0x000004e5u, 0x0000ea24u, 0x000004e4u, 0x00050080u, 0x0000003cu, 0x000004e6u, 0x000004dcu, 0x000004e5u, 0x0003003eu, 0x000004d4u, 0x000004e6u, 0x0004003du, 0x0000005du, 0x000004e7u, 0x00000069u, 0x000400a8u, 0x0000005du, 0x000004e8u, 0x000004e7u, 0x0004003du, 0x0000005du, 0x000004e9u, 0x00000064u, 0x000500a6u, 0x0000005du, 0x000004eau, 0x000004e8u, 0x000004e9u, 0x000300f7u, 0x000004ecu, 0x00000000u, 0x000400fau, 0x000004eau, 0x000004ebu, 0x000004f4u, 0x000200f8u, 0x000004ebu, 0x0004003du, 0x0000003cu, 0x000004edu, 0x000004d4u, 0x000500c3u, 0x0000003cu, 0x000004efu, 0x000004edu, 0x0000eef5u, 0x00050051u, 0x00000008u, 0x000004f0u, 0x000004efu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004f1u, 0x000004efu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004f2u, 0x000004efu, 0x00000002u, 0x0003003eu, 0x0000046bu, 0x000004efu, 0x000200f9u, 0x000004ecu, 0x000200f8u, 0x000004f4u, 0x000500c3u, 0x00000008u, 0x000004f7u, 0x0000ea1du, 0x00000215u, 0x000500c3u, 0x00000008u, 0x000004f9u, 0x0000ea29u, 0x00000215u, 0x00050080u, 0x00000008u, 0x000004fau, 0x000004f7u, 0x000004f9u, 0x00050080u, 0x00000008u, 0x000004fbu, 0x000004fau, 0x00000212u, 0x0003003eu, 0x000004f5u, 0x000004fbu, 0x0004003du, 0x0000003cu, 0x000004fcu, 0x000004d4u, 0x000500c3u, 0x0000003cu, 0x000004feu, 0x000004fcu, 0x0000eef6u, 0x0003003eu, 0x000004d4u, 0x000004feu, 0x0004003du, 0x0000003cu, 0x000004ffu, 0x000004d4u, 0x000500c7u, 0x0000003cu, 0x00000501u, 0x000004ffu, 0x0000eef7u, 0x0003003eu, 0x000004d4u, 0x00000501u, 0x0004003du, 0x00000502u, 0x00000505u, 0x00000504u, 0x000500c4u, 0x00000008u, 0x00000507u, 0x000004fbu, 0x0000026fu, 0x00050041u, 0x0000003eu, 0x00000508u, 0x000004d4u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000509u, 0x00000508u, 0x000500c5u, 0x00000008u, 0x0000050au, 0x00000507u, 0x00000509u, 0x0005005fu, 0x00000237u, 0x0000050bu, 0x00000505u, 0x0000050au, 0x00050051u, 0x00000006u, 0x0000050cu, 0x0000050bu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x0000050du, 0x0000050cu, 0x00050041u, 0x0000003eu, 0x0000050eu, 0x0000046bu, 0x00000374u, 0x0003003eu, 0x0000050eu, 0x0000050du, 0x00050041u, 0x0000003eu, 0x00000512u, 0x000004d4u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000513u, 0x00000512u, 0x000500c5u, 0x00000008u, 0x00000514u, 0x00000507u, 0x00000513u, 0x0005005fu, 0x00000237u, 0x00000515u, 0x00000505u, 0x00000514u, 0x00050051u, 0x00000006u, 0x00000516u, 0x00000515u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000517u, 0x00000516u, 0x00050041u, 0x0000003eu, 0x00000518u, 0x0000046bu, 0x00000485u, 0x0003003eu, 0x00000518u, 0x00000517u, 0x00050041u, 0x0000003eu, 0x0000051cu, 0x000004d4u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000051du, 0x0000051cu, 0x000500c5u, 0x00000008u, 0x0000051eu, 0x00000507u, 0x0000051du, 0x0005005fu, 0x00000237u, 0x0000051fu, 0x00000505u, 0x0000051eu, 0x00050051u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000521u, 0x00000520u, 0x00050041u, 0x0000003eu, 0x00000522u, 0x0000046bu, 0x000003c4u, 0x0003003eu, 0x00000522u, 0x00000521u, 0x000200f9u, 0x000004ecu, 0x000200f8u, 0x000004ecu, 0x0004003du, 0x0000003cu, 0x00000523u, 0x0000046bu, 0x000500c7u, 0x0000003cu, 0x00000525u, 0x00000523u, 0x0000039du, 0x0003003eu, 0x00001f33u, 0x0000055eu, 0x0003003eu, 0x00001f30u, 0x00000525u, 0x000200f9u, 0x00001f2fu, 0x000200f8u, 0x00001f2fu, 0x000900f5u, 0x0000003cu, 0x0000ea2au, 0x0000ea24u, 0x00000460u, 0x00000499u, 0x00000497u, 0x00000525u, 0x000004ecu, 0x000200feu, 0x0000ea2au, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000006du, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x0000006cu, 0x000200f8u, 0x0000006eu, 0x0004003du, 0x00000008u, 0x00000528u, 0x0000006cu, 0x000500abu, 0x0000005du, 0x00000529u, 0x00000528u, 0x00000203u, 0x000300f7u, 0x0000052bu, 0x00000000u, 0x000400fau, 0x00000529u, 0x0000052au, 0x0000052bu, 0x000200f8u, 0x0000052au, 0x0004003du, 0x00000008u, 0x0000052cu, 0x0000006cu, 0x0006000cu, 0x00000008u, 0x0000052du, 0x00000001u, 0x0000004au, 0x0000052cu, 0x000500c4u, 0x00000008u, 0x0000052eu, 0x00000212u, 0x0000052du, 0x0003003eu, 0x0000006cu, 0x0000052eu, 0x000200f9u, 0x0000052bu, 0x000200f8u, 0x0000052bu, 0x0004003du, 0x00000008u, 0x0000052fu, 0x0000006cu, 0x000200feu, 0x0000052fu, 0x00010038u, 0x00050036u, 0x0000005du, 0x0000007eu, 0x00000000u, 0x0000006fu, 0x00030037u, 0x0000003eu, 0x00000070u, 0x00030037u, 0x0000003eu, 0x00000071u, 0x00030037u, 0x0000003eu, 0x00000072u, 0x00030037u, 0x0000003eu, 0x00000073u, 0x00030037u, 0x0000003eu, 0x00000074u, 0x00030037u, 0x0000003eu, 0x00000075u, 0x00030037u, 0x0000003eu, 0x00000076u, 0x00030037u, 0x0000005eu, 0x00000077u, 0x00030037u, 0x0000003eu, 0x00000078u, 0x00030037u, 0x0000005eu, 0x00000079u, 0x00030037u, 0x0000005eu, 0x0000007au, 0x00030037u, 0x0000005eu, 0x0000007bu, 0x00030037u, 0x0000005eu, 0x0000007cu, 0x00030037u, 0x00000060u, 0x0000007du, 0x000200f8u, 0x0000007fu, 0x0004003bu, 0x0000003eu, 0x00000535u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000536u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000539u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000053au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000053du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000542u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000560u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000564u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000566u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000056au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000575u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000586u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000587u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000058au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000058eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000592u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000005beu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000005e1u, 0x00000007u, 0x0004003du, 0x0000005du, 0x00000532u, 0x00000077u, 0x000300f7u, 0x00000534u, 0x00000000u, 0x000400fau, 0x00000532u, 0x00000533u, 0x000005dbu, 0x000200f8u, 0x00000533u, 0x0004003du, 0x00000008u, 0x00000537u, 0x00000073u, 0x0003003eu, 0x00000536u, 0x00000537u, 0x00050039u, 0x00000008u, 0x00000538u, 0x0000004fu, 0x00000536u, 0x0003003eu, 0x00000535u, 0x00000538u, 0x0004003du, 0x00000008u, 0x0000053bu, 0x00000074u, 0x0003003eu, 0x0000053au, 0x0000053bu, 0x00050039u, 0x00000008u, 0x0000053cu, 0x00000055u, 0x0000053au, 0x0003003eu, 0x00000539u, 0x0000053cu, 0x0004003du, 0x00000008u, 0x0000053eu, 0x00000073u, 0x000500c3u, 0x00000008u, 0x0000053fu, 0x0000053eu, 0x0000026fu, 0x000500c7u, 0x00000008u, 0x00000541u, 0x0000053fu, 0x00000540u, 0x0003003eu, 0x0000053du, 0x00000541u, 0x0003003eu, 0x00000542u, 0x00000543u, 0x0004003du, 0x00000008u, 0x00000544u, 0x00000072u, 0x0004003du, 0x00000008u, 0x00000545u, 0x00000074u, 0x00050082u, 0x00000008u, 0x00000546u, 0x00000544u, 0x00000545u, 0x0008000cu, 0x00000008u, 0x00000547u, 0x00000001u, 0x0000002du, 0x00000546u, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x00000548u, 0x0000007du, 0x00000374u, 0x0003003eu, 0x00000548u, 0x00000547u, 0x0004003du, 0x00000008u, 0x00000549u, 0x00000074u, 0x0004003du, 0x00000008u, 0x0000054au, 0x00000072u, 0x00050082u, 0x00000008u, 0x0000054bu, 0x00000549u, 0x0000054au, 0x0008000cu, 0x00000008u, 0x0000054cu, 0x00000001u, 0x0000002du, 0x0000054bu, 0x00000203u, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x0000054du, 0x0000007du, 0x00000485u, 0x0003003eu, 0x0000054du, 0x0000054cu, 0x000500b1u, 0x0000005du, 0x0000054fu, 0x00000541u, 0x00000218u, 0x000300f7u, 0x00000551u, 0x00000000u, 0x000400fau, 0x0000054fu, 0x00000550u, 0x00000551u, 0x000200f8u, 0x00000550u, 0x000500abu, 0x0000005du, 0x00000554u, 0x0000053cu, 0x00000553u, 0x000300f7u, 0x00000556u, 0x00000000u, 0x000400fau, 0x00000554u, 0x00000555u, 0x0000055du, 0x000200f8u, 0x00000555u, 0x000500c4u, 0x00000008u, 0x00000558u, 0x0000053cu, 0x00000212u, 0x000500c3u, 0x00000008u, 0x0000055bu, 0x00000559u, 0x00000541u, 0x0007000cu, 0x00000008u, 0x0000055cu, 0x00000001u, 0x0000002au, 0x00000558u, 0x0000055bu, 0x0003003eu, 0x00000539u, 0x0000055cu, 0x000200f9u, 0x00000556u, 0x000200f8u, 0x0000055du, 0x0003003eu, 0x00000542u, 0x0000055eu, 0x0003003eu, 0x00000539u, 0x0000055fu, 0x000200f9u, 0x00000556u, 0x000200f8u, 0x00000556u, 0x000700f5u, 0x00000008u, 0x0000ea2du, 0x0000055cu, 0x00000555u, 0x0000055fu, 0x0000055du, 0x000600a9u, 0x0000005du, 0x0000ef16u, 0x00000554u, 0x00000543u, 0x0000055eu, 0x000200f9u, 0x00000551u, 0x000200f8u, 0x00000551u, 0x000700f5u, 0x0000005du, 0x0000ea2eu, 0x00000543u, 0x00000533u, 0x0000ef16u, 0x00000556u, 0x000700f5u, 0x00000008u, 0x0000ea2cu, 0x0000053cu, 0x00000533u, 0x0000ea2du, 0x00000556u, 0x0004003du, 0x00000008u, 0x00000561u, 0x00000071u, 0x000500c5u, 0x00000008u, 0x00000563u, 0x00000561u, 0x0000ea2cu, 0x0003003eu, 0x00000564u, 0x00000563u, 0x00050039u, 0x00000008u, 0x00000565u, 0x0000006du, 0x00000564u, 0x0003003eu, 0x00000560u, 0x00000565u, 0x0003003eu, 0x00000566u, 0x00000565u, 0x000500c4u, 0x00000008u, 0x00000569u, 0x00000565u, 0x00000218u, 0x0003003eu, 0x00000560u, 0x00000569u, 0x000400a8u, 0x0000005du, 0x0000056cu, 0x0000ea2eu, 0x000300f7u, 0x0000056eu, 0x00000000u, 0x000400fau, 0x0000056cu, 0x0000056du, 0x0000056eu, 0x000200f8u, 0x0000056du, 0x0004003du, 0x00000008u, 0x0000056fu, 0x00000070u, 0x00050080u, 0x00000008u, 0x00000571u, 0x0000056fu, 0x00000569u, 0x000500afu, 0x0000005du, 0x00000573u, 0x00000571u, 0x00000538u, 0x000200f9u, 0x0000056eu, 0x000200f8u, 0x0000056eu, 0x000700f5u, 0x0000005du, 0x00000574u, 0x0000ea2eu, 0x00000551u, 0x00000573u, 0x0000056du, 0x0003003eu, 0x0000056au, 0x00000574u, 0x0004003du, 0x00000008u, 0x00000576u, 0x00000075u, 0x0004003du, 0x00000008u, 0x00000577u, 0x00000076u, 0x00050080u, 0x00000008u, 0x00000578u, 0x00000576u, 0x00000577u, 0x000500afu, 0x0000005du, 0x00000579u, 0x00000578u, 0x0000025eu, 0x0003003eu, 0x00000575u, 0x00000579u, 0x0004003du, 0x0000005du, 0x0000057au, 0x00000079u, 0x000400a8u, 0x0000005du, 0x0000057bu, 0x0000057au, 0x000300f7u, 0x0000057du, 0x00000000u, 0x000400fau, 0x0000057bu, 0x0000057cu, 0x0000057du, 0x000200f8u, 0x0000057cu, 0x000400a8u, 0x0000005du, 0x0000057fu, 0x00000579u, 0x0004003du, 0x0000005du, 0x00000580u, 0x0000007au, 0x000500a7u, 0x0000005du, 0x00000581u, 0x0000057fu, 0x00000580u, 0x000500a7u, 0x0000005du, 0x00000583u, 0x00000581u, 0x00000574u, 0x000200f9u, 0x0000057du, 0x000200f8u, 0x0000057du, 0x000700f5u, 0x0000005du, 0x00000584u, 0x0000057au, 0x0000056eu, 0x00000583u, 0x0000057cu, 0x0003003eu, 0x0000007bu, 0x00000584u, 0x0003003eu, 0x0000007cu, 0x00000579u, 0x0003003eu, 0x00000586u, 0x00000543u, 0x000500aau, 0x0000005du, 0x00000589u, 0x00000538u, 0x0000041du, 0x0003003eu, 0x00000587u, 0x00000589u, 0x0004003du, 0x00000008u, 0x0000058bu, 0x00000070u, 0x000500b1u, 0x0000005du, 0x0000058du, 0x0000058bu, 0x00000538u, 0x0003003eu, 0x0000058au, 0x0000058du, 0x0004003du, 0x00000008u, 0x0000058fu, 0x00000070u, 0x00050082u, 0x00000008u, 0x00000591u, 0x0000058fu, 0x00000569u, 0x0003003eu, 0x0000058eu, 0x00000591u, 0x000500b3u, 0x0000005du, 0x00000596u, 0x00000591u, 0x00000538u, 0x000500a6u, 0x0000005du, 0x00000597u, 0x0000ea2eu, 0x00000596u, 0x0003003eu, 0x00000592u, 0x00000597u, 0x0004003du, 0x00000008u, 0x00000598u, 0x00000078u, 0x000300f7u, 0x0000059du, 0x00000000u, 0x000b00fbu, 0x00000598u, 0x0000059du, 0x00000000u, 0x00000599u, 0x00000001u, 0x0000059au, 0x00000002u, 0x0000059bu, 0x00000003u, 0x0000059cu, 0x000200f8u, 0x00000599u, 0x000400a8u, 0x0000005du, 0x0000059fu, 0x00000589u, 0x000300f7u, 0x000005a1u, 0x00000000u, 0x000400fau, 0x0000059fu, 0x000005a0u, 0x000005a1u, 0x000200f8u, 0x000005a0u, 0x000600a9u, 0x0000005du, 0x000005a5u, 0x00000579u, 0x0000058du, 0x00000597u, 0x000200f9u, 0x000005a1u, 0x000200f8u, 0x000005a1u, 0x000700f5u, 0x0000005du, 0x000005a6u, 0x00000589u, 0x00000599u, 0x000005a5u, 0x000005a0u, 0x0003003eu, 0x00000586u, 0x000005a6u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059au, 0x000400a8u, 0x0000005du, 0x000005a9u, 0x0000058du, 0x000400a8u, 0x0000005du, 0x000005abu, 0x00000574u, 0x000500a6u, 0x0000005du, 0x000005acu, 0x000005a9u, 0x000005abu, 0x000400a8u, 0x0000005du, 0x000005aeu, 0x00000579u, 0x000500a6u, 0x0000005du, 0x000005afu, 0x000005acu, 0x000005aeu, 0x000300f7u, 0x000005b1u, 0x00000000u, 0x000400fau, 0x000005afu, 0x000005b0u, 0x000005bbu, 0x000200f8u, 0x000005b0u, 0x000400a8u, 0x0000005du, 0x000005b3u, 0x00000589u, 0x000300f7u, 0x000005b5u, 0x00000000u, 0x000400fau, 0x000005b3u, 0x000005b4u, 0x000005b5u, 0x000200f8u, 0x000005b4u, 0x000600a9u, 0x0000005du, 0x000005b9u, 0x00000579u, 0x0000058du, 0x00000597u, 0x000200f9u, 0x000005b5u, 0x000200f8u, 0x000005b5u, 0x000700f5u, 0x0000005du, 0x000005bau, 0x00000589u, 0x000005b0u, 0x000005b9u, 0x000005b4u, 0x0003003eu, 0x00000586u, 0x000005bau, 0x000200f9u, 0x000005b1u, 0x000200f8u, 0x000005bbu, 0x000500c7u, 0x00000008u, 0x000005bdu, 0x00000565u, 0x0000055fu, 0x0003003eu, 0x000005beu, 0x000005bdu, 0x00050039u, 0x00000008u, 0x000005bfu, 0x00000058u, 0x000005beu, 0x0003003eu, 0x00000566u, 0x000005bfu, 0x000500c3u, 0x00000008u, 0x000005c3u, 0x00000538u, 0x000005bfu, 0x0004003du, 0x00000008u, 0x000005c4u, 0x00000070u, 0x000500c3u, 0x00000008u, 0x000005c6u, 0x000005c4u, 0x000005bfu, 0x00050082u, 0x00000008u, 0x000005c7u, 0x000005c3u, 0x000005c6u, 0x000500c7u, 0x00000008u, 0x000005c8u, 0x000005c7u, 0x00000540u, 0x0003003eu, 0x000005c0u, 0x000005c8u, 0x0004003du, 0x00000008u, 0x000005cau, 0x00000075u, 0x00050084u, 0x00000008u, 0x000005cbu, 0x000005c8u, 0x000005cau, 0x000500c3u, 0x00000008u, 0x000005ccu, 0x000005cbu, 0x00000218u, 0x0007000cu, 0x00000008u, 0x000005cdu, 0x00000001u, 0x00000027u, 0x000005ccu, 0x0000025eu, 0x0003003eu, 0x00000075u, 0x000005cdu, 0x0003003eu, 0x00000586u, 0x0000055eu, 0x000200f9u, 0x000005b1u, 0x000200f8u, 0x000005b1u, 0x000700f5u, 0x0000005du, 0x0000ea3eu, 0x000005bau, 0x000005b5u, 0x0000055eu, 0x000005bbu, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059bu, 0x000500a6u, 0x0000005du, 0x000005d1u, 0x0000058du, 0x00000589u, 0x0003003eu, 0x00000586u, 0x000005d1u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059cu, 0x000500a7u, 0x0000005du, 0x000005d5u, 0x00000574u, 0x00000597u, 0x000400a8u, 0x0000005du, 0x000005d7u, 0x00000589u, 0x000500a7u, 0x0000005du, 0x000005d8u, 0x000005d5u, 0x000005d7u, 0x0003003eu, 0x00000586u, 0x000005d8u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059du, 0x000d00f5u, 0x0000005du, 0x0000ea3du, 0x00000543u, 0x0000057du, 0x000005a6u, 0x000005a1u, 0x0000ea3eu, 0x000005b1u, 0x000005d1u, 0x0000059bu, 0x000005d8u, 0x0000059cu, 0x000200f9u, 0x00000534u, 0x000200f8u, 0x000005dbu, 0x00050041u, 0x0000003eu, 0x000005dcu, 0x0000007du, 0x00000374u, 0x0003003eu, 0x000005dcu, 0x00000203u, 0x0004003du, 0x00000008u, 0x000005ddu, 0x00000072u, 0x00050082u, 0x00000008u, 0x000005deu, 0x00000540u, 0x000005ddu, 0x0007000cu, 0x00000008u, 0x000005dfu, 0x00000001u, 0x00000027u, 0x000005deu, 0x0000021bu, 0x00050041u, 0x0000003eu, 0x000005e0u, 0x0000007du, 0x00000485u, 0x0003003eu, 0x000005e0u, 0x000005dfu, 0x0004003du, 0x00000008u, 0x000005e2u, 0x00000075u, 0x0004003du, 0x00000008u, 0x000005e3u, 0x00000076u, 0x00050080u, 0x00000008u, 0x000005e4u, 0x000005e2u, 0x000005e3u, 0x000500afu, 0x0000005du, 0x000005e5u, 0x000005e4u, 0x0000025eu, 0x0003003eu, 0x000005e1u, 0x000005e5u, 0x0004003du, 0x0000005du, 0x000005e6u, 0x00000079u, 0x000400a8u, 0x0000005du, 0x000005e7u, 0x000005e6u, 0x000300f7u, 0x000005e9u, 0x00000000u, 0x000400fau, 0x000005e7u, 0x000005e8u, 0x000005e9u, 0x000200f8u, 0x000005e8u, 0x000400a8u, 0x0000005du, 0x000005ebu, 0x000005e5u, 0x0004003du, 0x0000005du, 0x000005ecu, 0x0000007au, 0x000500a7u, 0x0000005du, 0x000005edu, 0x000005ebu, 0x000005ecu, 0x000200f9u, 0x000005e9u, 0x000200f8u, 0x000005e9u, 0x000700f5u, 0x0000005du, 0x000005eeu, 0x000005e6u, 0x000005dbu, 0x000005edu, 0x000005e8u, 0x0003003eu, 0x0000007bu, 0x000005eeu, 0x0003003eu, 0x0000007cu, 0x000005e5u, 0x0003003eu, 0x00000586u, 0x0000055eu, 0x000200f9u, 0x00000534u, 0x000200f8u, 0x00000534u, 0x000700f5u, 0x0000005du, 0x0000ea3cu, 0x0000ea3du, 0x0000059du, 0x0000055eu, 0x000005e9u, 0x000200feu, 0x0000ea3cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000084u, 0x00000000u, 0x00000080u, 0x00030037u, 0x0000005cu, 0x00000081u, 0x00030037u, 0x0000005cu, 0x00000082u, 0x00030037u, 0x0000003eu, 0x00000083u, 0x000200f8u, 0x00000085u, 0x0004003bu, 0x0000005cu, 0x000005f3u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x000005fbu, 0x00000007u, 0x0004003bu, 0x000005fau, 0x00000600u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x00000605u, 0x00000007u, 0x0004003bu, 0x000005fau, 0x0000060au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000060fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000617u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000061du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000627u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000005f5u, 0x00000083u, 0x000500c4u, 0x00000008u, 0x000005f6u, 0x000005f5u, 0x00000218u, 0x00070050u, 0x00000009u, 0x000005f7u, 0x000005f6u, 0x000005f6u, 0x000005f6u, 0x000005f6u, 0x00050080u, 0x00000009u, 0x000005f8u, 0x000005f4u, 0x000005f7u, 0x0003003eu, 0x000005f3u, 0x000005f8u, 0x0004003du, 0x00000009u, 0x000005fdu, 0x00000081u, 0x0009004fu, 0x00000009u, 0x000005feu, 0x000005fdu, 0x000005fdu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b1u, 0x000005f9u, 0x000005ffu, 0x000005f8u, 0x000005feu, 0x0003003eu, 0x000005fbu, 0x000005ffu, 0x0004003du, 0x00000009u, 0x00000602u, 0x00000081u, 0x0009004fu, 0x00000009u, 0x00000603u, 0x00000602u, 0x00000602u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b1u, 0x000005f9u, 0x00000604u, 0x000005f8u, 0x00000603u, 0x0003003eu, 0x00000600u, 0x00000604u, 0x0004003du, 0x00000009u, 0x00000607u, 0x00000082u, 0x0009004fu, 0x00000009u, 0x00000608u, 0x00000607u, 0x00000607u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500afu, 0x000005f9u, 0x00000609u, 0x000005f8u, 0x00000608u, 0x0003003eu, 0x00000605u, 0x00000609u, 0x0004003du, 0x00000009u, 0x0000060cu, 0x00000082u, 0x0009004fu, 0x00000009u, 0x0000060du, 0x0000060cu, 0x0000060cu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500afu, 0x000005f9u, 0x0000060eu, 0x000005f8u, 0x0000060du, 0x0003003eu, 0x0000060au, 0x0000060eu, 0x000600a9u, 0x00000009u, 0x00000613u, 0x000005ffu, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x00000615u, 0x00000609u, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x00000616u, 0x00000613u, 0x00000615u, 0x0003003eu, 0x0000060fu, 0x00000616u, 0x000600a9u, 0x00000009u, 0x00000619u, 0x00000604u, 0x00000612u, 0x00000611u, 0x000600a9u, 0x00000009u, 0x0000061bu, 0x0000060eu, 0x00000612u, 0x00000611u, 0x000500c5u, 0x00000009u, 0x0000061cu, 0x00000619u, 0x0000061bu, 0x0003003eu, 0x00000617u, 0x0000061cu, 0x00050084u, 0x00000009u, 0x00000620u, 0x00000616u, 0x0000061fu, 0x00050084u, 0x00000009u, 0x00000625u, 0x0000061cu, 0x00000624u, 0x00050080u, 0x00000009u, 0x00000626u, 0x00000620u, 0x00000625u, 0x0003003eu, 0x0000061du, 0x00000626u, 0x00050041u, 0x0000003eu, 0x00000628u, 0x0000061du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000629u, 0x00000628u, 0x00050041u, 0x0000003eu, 0x0000062au, 0x0000061du, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000062bu, 0x0000062au, 0x000500c5u, 0x00000008u, 0x0000062cu, 0x00000629u, 0x0000062bu, 0x00050041u, 0x0000003eu, 0x0000062du, 0x0000061du, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000062eu, 0x0000062du, 0x00050041u, 0x0000003eu, 0x0000062fu, 0x0000061du, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000630u, 0x0000062fu, 0x000500c5u, 0x00000008u, 0x00000631u, 0x0000062eu, 0x00000630u, 0x000500c5u, 0x00000008u, 0x00000632u, 0x0000062cu, 0x00000631u, 0x0003003eu, 0x00000627u, 0x00000632u, 0x000400c8u, 0x00000008u, 0x00000634u, 0x00000632u, 0x000500c7u, 0x00000008u, 0x00000635u, 0x00000634u, 0x0000038bu, 0x000200feu, 0x00000635u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000008bu, 0x00000000u, 0x00000086u, 0x00030037u, 0x0000003eu, 0x00000087u, 0x00030037u, 0x0000003eu, 0x00000088u, 0x00030037u, 0x0000005eu, 0x00000089u, 0x00030037u, 0x0000003eu, 0x0000008au, 0x000200f8u, 0x0000008cu, 0x0004003bu, 0x0000003eu, 0x00000638u, 0x00000007u, 0x0003003eu, 0x00000638u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000639u, 0x0000008au, 0x000300f7u, 0x0000063eu, 0x00000000u, 0x000b00fbu, 0x00000639u, 0x0000063eu, 0x00000000u, 0x0000063au, 0x00000001u, 0x0000063bu, 0x00000002u, 0x0000063cu, 0x00000003u, 0x0000063du, 0x000200f8u, 0x0000063au, 0x0004003du, 0x0000005du, 0x0000063fu, 0x00000089u, 0x000300f7u, 0x00000641u, 0x00000000u, 0x000400fau, 0x0000063fu, 0x00000640u, 0x00000646u, 0x000200f8u, 0x00000640u, 0x0004003du, 0x00000008u, 0x00000642u, 0x00000088u, 0x0004003du, 0x00000008u, 0x00000643u, 0x00000087u, 0x00050080u, 0x00000008u, 0x00000644u, 0x00000642u, 0x00000643u, 0x0007000cu, 0x00000008u, 0x00000645u, 0x00000001u, 0x00000027u, 0x00000224u, 0x00000644u, 0x0003003eu, 0x00000638u, 0x00000645u, 0x000200f9u, 0x00000641u, 0x000200f8u, 0x00000646u, 0x0004003du, 0x00000008u, 0x00000647u, 0x00000087u, 0x00050082u, 0x00000008u, 0x00000648u, 0x00000647u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00000649u, 0x00000648u, 0x00000224u, 0x0003003eu, 0x00000638u, 0x00000649u, 0x000200f9u, 0x00000641u, 0x000200f8u, 0x00000641u, 0x000700f5u, 0x00000008u, 0x0000ea40u, 0x00000645u, 0x00000640u, 0x00000649u, 0x00000646u, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063bu, 0x0004003du, 0x00000008u, 0x0000064bu, 0x00000087u, 0x0004003du, 0x00000008u, 0x0000064cu, 0x00000088u, 0x00050080u, 0x00000008u, 0x0000064du, 0x0000064bu, 0x0000064cu, 0x000500c7u, 0x00000008u, 0x0000064eu, 0x0000064du, 0x00000224u, 0x0003003eu, 0x00000638u, 0x0000064eu, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063cu, 0x0003003eu, 0x00000638u, 0x00000224u, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063du, 0x0004003du, 0x00000008u, 0x00000651u, 0x00000088u, 0x0003003eu, 0x00000638u, 0x00000651u, 0x000200f9u, 0x0000063eu, 0x000200f8u, 0x0000063eu, 0x000d00f5u, 0x00000008u, 0x0000ea3fu, 0x00000203u, 0x0000008cu, 0x0000ea40u, 0x00000641u, 0x0000064eu, 0x0000063bu, 0x00000224u, 0x0000063cu, 0x00000651u, 0x0000063du, 0x000200feu, 0x0000ea3fu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000090u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000008eu, 0x00030037u, 0x00000007u, 0x0000008fu, 0x000200f8u, 0x00000091u, 0x0004003bu, 0x0000003eu, 0x00000665u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000354u, 0x00000693u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d2u, 0x00000007u, 0x000300f7u, 0x0000065cu, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x0000065cu, 0x00000000u, 0x00000658u, 0x00000001u, 0x00000658u, 0x00000002u, 0x00000659u, 0x00000003u, 0x0000065au, 0x00000004u, 0x0000065bu, 0x000200f8u, 0x00000658u, 0x0004003du, 0x00000006u, 0x0000065fu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x00000660u, 0x0000065fu, 0x0000065eu, 0x0003003eu, 0x0000008eu, 0x00000660u, 0x0004003du, 0x00000006u, 0x00000661u, 0x0000008fu, 0x00050084u, 0x00000006u, 0x00000662u, 0x00000661u, 0x0000065du, 0x0004003du, 0x00000006u, 0x00000663u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x00000664u, 0x00000663u, 0x00000662u, 0x0003003eu, 0x0000008eu, 0x00000664u, 0x0004003du, 0x00000006u, 0x0000066au, 0x0000008eu, 0x000500c6u, 0x00000006u, 0x0000066bu, 0x0000066au, 0x0000048bu, 0x00060041u, 0x00000277u, 0x0000066cu, 0x00000669u, 0x00000203u, 0x0000066bu, 0x0004003du, 0x00000229u, 0x0000066du, 0x0000066cu, 0x00040071u, 0x00000006u, 0x0000066eu, 0x0000066du, 0x0004007cu, 0x00000008u, 0x0000066fu, 0x0000066eu, 0x0003003eu, 0x00000665u, 0x0000066fu, 0x0004003du, 0x00000006u, 0x00000679u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x0000067au, 0x00000679u, 0x00000212u, 0x00060041u, 0x00000277u, 0x0000067bu, 0x00000678u, 0x00000203u, 0x0000067au, 0x0004003du, 0x00000229u, 0x0000067cu, 0x0000067bu, 0x00040071u, 0x00000006u, 0x0000067du, 0x0000067cu, 0x0004007cu, 0x00000008u, 0x0000067eu, 0x0000067du, 0x00070050u, 0x00000009u, 0x0000067fu, 0x0000066fu, 0x0000066fu, 0x0000066fu, 0x0000067eu, 0x0003003eu, 0x00000671u, 0x0000067fu, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x00000659u, 0x0004003du, 0x00000006u, 0x00000682u, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x00000683u, 0x00000682u, 0x00000681u, 0x0003003eu, 0x0000008eu, 0x00000683u, 0x0004003du, 0x00000006u, 0x00000684u, 0x0000008fu, 0x00050084u, 0x00000006u, 0x00000686u, 0x00000684u, 0x00000685u, 0x0004003du, 0x00000006u, 0x00000687u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x00000688u, 0x00000687u, 0x00000686u, 0x0003003eu, 0x0000008eu, 0x00000688u, 0x0004003du, 0x00000006u, 0x0000068eu, 0x0000008eu, 0x000500c6u, 0x00000006u, 0x0000068fu, 0x0000068eu, 0x00000485u, 0x00060041u, 0x00000270u, 0x00000690u, 0x0000068du, 0x00000203u, 0x0000068fu, 0x0004003du, 0x0000022bu, 0x00000691u, 0x00000690u, 0x00040071u, 0x00000006u, 0x00000692u, 0x00000691u, 0x0003003eu, 0x00000689u, 0x00000692u, 0x000500c2u, 0x00000006u, 0x00000695u, 0x00000692u, 0x0000035bu, 0x000500c2u, 0x00000006u, 0x00000697u, 0x00000692u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x00000699u, 0x00000692u, 0x000003c4u, 0x00060050u, 0x00000353u, 0x0000069au, 0x00000695u, 0x00000697u, 0x00000699u, 0x000500c7u, 0x00000353u, 0x0000069du, 0x0000069au, 0x0000eedau, 0x0003003eu, 0x00000693u, 0x0000069du, 0x0004007cu, 0x0000003cu, 0x0000069fu, 0x0000069du, 0x0004003du, 0x00000006u, 0x000006a0u, 0x0000008eu, 0x00060041u, 0x00000277u, 0x000006a1u, 0x00000678u, 0x00000203u, 0x000006a0u, 0x0004003du, 0x00000229u, 0x000006a2u, 0x000006a1u, 0x00040071u, 0x00000006u, 0x000006a3u, 0x000006a2u, 0x0004007cu, 0x00000008u, 0x000006a4u, 0x000006a3u, 0x000500c4u, 0x00000008u, 0x000006a5u, 0x000006a4u, 0x0000021eu, 0x000500c7u, 0x00000006u, 0x000006a7u, 0x00000692u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000006a8u, 0x000006a7u, 0x00000224u, 0x0004007cu, 0x00000008u, 0x000006a9u, 0x000006a8u, 0x000500c5u, 0x00000008u, 0x000006aau, 0x000006a5u, 0x000006a9u, 0x00050051u, 0x00000008u, 0x000006abu, 0x0000069fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000006acu, 0x0000069fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000006adu, 0x0000069fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000006aeu, 0x000006abu, 0x000006acu, 0x000006adu, 0x000006aau, 0x0003003eu, 0x00000671u, 0x000006aeu, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065au, 0x0004003du, 0x00000006u, 0x000006b0u, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006b1u, 0x000006b0u, 0x00000681u, 0x0003003eu, 0x0000008eu, 0x000006b1u, 0x0004003du, 0x00000006u, 0x000006b2u, 0x0000008fu, 0x00050084u, 0x00000006u, 0x000006b4u, 0x000006b2u, 0x000006b3u, 0x0004003du, 0x00000006u, 0x000006b5u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x000006b6u, 0x000006b5u, 0x000006b4u, 0x0003003eu, 0x0000008eu, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006b8u, 0x0000008eu, 0x000500c6u, 0x00000006u, 0x000006b9u, 0x000006b8u, 0x00000485u, 0x00060041u, 0x00000270u, 0x000006bau, 0x0000068du, 0x00000203u, 0x000006b9u, 0x0004003du, 0x0000022bu, 0x000006bbu, 0x000006bau, 0x00040071u, 0x00000006u, 0x000006bcu, 0x000006bbu, 0x0003003eu, 0x000006b7u, 0x000006bcu, 0x000500c2u, 0x00000006u, 0x000006beu, 0x000006bcu, 0x0000035bu, 0x0004007cu, 0x00000008u, 0x000006bfu, 0x000006beu, 0x00060050u, 0x0000003cu, 0x000006c0u, 0x000006bfu, 0x000006bfu, 0x000006bfu, 0x000500c7u, 0x00000006u, 0x000006c3u, 0x000006bcu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000006c4u, 0x000006c3u, 0x00070050u, 0x00000009u, 0x000006c8u, 0x000006bfu, 0x000006bfu, 0x000006bfu, 0x000006c4u, 0x0003003eu, 0x00000671u, 0x000006c8u, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065bu, 0x0004003du, 0x00000006u, 0x000006cbu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006ccu, 0x000006cbu, 0x000006cau, 0x0003003eu, 0x0000008eu, 0x000006ccu, 0x0004003du, 0x00000006u, 0x000006cdu, 0x0000008fu, 0x00050084u, 0x00000006u, 0x000006cfu, 0x000006cdu, 0x000006ceu, 0x0004003du, 0x00000006u, 0x000006d0u, 0x0000008eu, 0x00050080u, 0x00000006u, 0x000006d1u, 0x000006d0u, 0x000006cfu, 0x0003003eu, 0x0000008eu, 0x000006d1u, 0x0004003du, 0x00000006u, 0x000006d7u, 0x0000008eu, 0x00060041u, 0x0000026bu, 0x000006d8u, 0x000006d6u, 0x00000203u, 0x000006d7u, 0x0004003du, 0x00000006u, 0x000006d9u, 0x000006d8u, 0x0003003eu, 0x000006d2u, 0x000006d9u, 0x00070050u, 0x00000237u, 0x000006dbu, 0x000006d9u, 0x000006d9u, 0x000006d9u, 0x000006d9u, 0x000500c2u, 0x00000237u, 0x000006deu, 0x000006dbu, 0x000006ddu, 0x000500c7u, 0x00000237u, 0x000006e0u, 0x000006deu, 0x000006dfu, 0x0004007cu, 0x00000009u, 0x000006e1u, 0x000006e0u, 0x0003003eu, 0x00000671u, 0x000006e1u, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000092u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000093u, 0x0004003bu, 0x00000007u, 0x000006efu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00000709u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000714u, 0x00000007u, 0x000300f7u, 0x000006e6u, 0x00000000u, 0x000700fbu, 0x00000657u, 0x000006e6u, 0x00000002u, 0x000006e4u, 0x00000003u, 0x000006e5u, 0x000200f8u, 0x000006e4u, 0x00050041u, 0x00000201u, 0x000006e8u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000006e9u, 0x000006e8u, 0x000500c3u, 0x00000008u, 0x000006eau, 0x000006e9u, 0x00000218u, 0x00050041u, 0x00000201u, 0x000006ebu, 0x00000671u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000006ecu, 0x000006ebu, 0x000500c7u, 0x00000008u, 0x000006edu, 0x000006ecu, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x000006eeu, 0x000006eau, 0x000006edu, 0x0003003eu, 0x000006e7u, 0x000006eeu, 0x00050041u, 0x00000201u, 0x000006f0u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000006f1u, 0x000006f0u, 0x0004007cu, 0x00000006u, 0x000006f2u, 0x000006f1u, 0x000500c7u, 0x00000006u, 0x000006f3u, 0x000006f2u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000006f5u, 0x000006f3u, 0x000006f4u, 0x0003003eu, 0x000006efu, 0x000006f5u, 0x00050041u, 0x00000201u, 0x000006f6u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000006f7u, 0x000006f6u, 0x0004007cu, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x000500c7u, 0x00000006u, 0x000006f9u, 0x000006f8u, 0x0000069bu, 0x000500c4u, 0x00000006u, 0x000006fau, 0x000006f9u, 0x00000485u, 0x000500c5u, 0x00000006u, 0x000006fcu, 0x000006f5u, 0x000006fau, 0x0003003eu, 0x000006efu, 0x000006fcu, 0x0004003du, 0x00000008u, 0x000006feu, 0x000006ebu, 0x0004007cu, 0x00000006u, 0x000006ffu, 0x000006feu, 0x000500c7u, 0x00000006u, 0x00000700u, 0x000006ffu, 0x0000069bu, 0x000500c2u, 0x00000006u, 0x00000702u, 0x00000700u, 0x00000701u, 0x000500c5u, 0x00000006u, 0x00000704u, 0x000006fcu, 0x00000702u, 0x0003003eu, 0x000006efu, 0x00000704u, 0x0004007cu, 0x00000008u, 0x00000707u, 0x00000704u, 0x0003003eu, 0x00000705u, 0x00000707u, 0x000200f9u, 0x000006e6u, 0x000200f8u, 0x000006e5u, 0x0004003du, 0x00000009u, 0x0000070au, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x0000070bu, 0x0000070au, 0x0000070au, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x0000070cu, 0x0000070bu, 0x0003003eu, 0x00000709u, 0x0000070cu, 0x00050041u, 0x00000007u, 0x0000070eu, 0x00000709u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000070fu, 0x0000070eu, 0x000500c4u, 0x00000006u, 0x00000710u, 0x0000070fu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00000711u, 0x00000709u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000712u, 0x00000711u, 0x000500c5u, 0x00000006u, 0x00000713u, 0x00000710u, 0x00000712u, 0x0003003eu, 0x0000070du, 0x00000713u, 0x000500c7u, 0x00000006u, 0x00000716u, 0x00000713u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000717u, 0x00000716u, 0x0000048bu, 0x0003003eu, 0x00000714u, 0x00000717u, 0x000500c2u, 0x00000006u, 0x00000719u, 0x00000713u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x0000071au, 0x00000719u, 0x0003003eu, 0x00000705u, 0x0000071au, 0x000500c7u, 0x00000006u, 0x0000071cu, 0x00000713u, 0x0000048bu, 0x000500c4u, 0x00000006u, 0x0000071du, 0x0000071cu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x0000071fu, 0x0000071du, 0x00000717u, 0x0004007cu, 0x00000008u, 0x00000720u, 0x0000071fu, 0x0003003eu, 0x000006e7u, 0x00000720u, 0x000200f9u, 0x000006e6u, 0x000200f8u, 0x000006e6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000094u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000095u, 0x0004003bu, 0x00000007u, 0x00000723u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000724u, 0x00000705u, 0x0004007cu, 0x00000006u, 0x00000725u, 0x00000724u, 0x000500c4u, 0x00000006u, 0x00000726u, 0x00000725u, 0x00000701u, 0x0004003du, 0x00000008u, 0x00000727u, 0x000006e7u, 0x0004007cu, 0x00000006u, 0x00000728u, 0x00000727u, 0x000500c5u, 0x00000006u, 0x00000729u, 0x00000726u, 0x00000728u, 0x0003003eu, 0x00000723u, 0x00000729u, 0x000300f7u, 0x0000072cu, 0x00000000u, 0x000700fbu, 0x00000657u, 0x0000072cu, 0x00000002u, 0x0000072au, 0x00000003u, 0x0000072bu, 0x000200f8u, 0x0000072au, 0x000500c2u, 0x00000006u, 0x0000072fu, 0x00000729u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x00000730u, 0x0000072fu, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00000731u, 0x00000730u, 0x00050041u, 0x00000201u, 0x00000732u, 0x00000671u, 0x00000374u, 0x0003003eu, 0x00000732u, 0x00000731u, 0x000500c2u, 0x00000006u, 0x00000735u, 0x00000729u, 0x00000734u, 0x000500c7u, 0x00000006u, 0x00000736u, 0x00000735u, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x00000737u, 0x00000736u, 0x00050041u, 0x00000201u, 0x00000738u, 0x00000671u, 0x00000485u, 0x0003003eu, 0x00000738u, 0x00000737u, 0x000500c2u, 0x00000006u, 0x0000073au, 0x00000729u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x0000073bu, 0x0000073au, 0x0000069bu, 0x0004007cu, 0x00000008u, 0x0000073cu, 0x0000073bu, 0x00050041u, 0x00000201u, 0x0000073du, 0x00000671u, 0x000003c4u, 0x0003003eu, 0x0000073du, 0x0000073cu, 0x000500c7u, 0x00000006u, 0x00000740u, 0x00000729u, 0x0000073fu, 0x000500c4u, 0x00000006u, 0x00000741u, 0x00000740u, 0x00000734u, 0x0004007cu, 0x00000008u, 0x00000742u, 0x00000741u, 0x00050041u, 0x00000201u, 0x00000743u, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x00000743u, 0x00000742u, 0x000200f9u, 0x0000072cu, 0x000200f8u, 0x0000072bu, 0x000500c2u, 0x00000006u, 0x00000746u, 0x00000729u, 0x0000072eu, 0x000500c7u, 0x00000006u, 0x00000747u, 0x00000746u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00000748u, 0x00000747u, 0x00050041u, 0x00000201u, 0x00000749u, 0x00000671u, 0x00000374u, 0x0003003eu, 0x00000749u, 0x00000748u, 0x000500c2u, 0x00000006u, 0x0000074bu, 0x00000729u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x0000074cu, 0x0000074bu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000074du, 0x0000074cu, 0x00050041u, 0x00000201u, 0x0000074eu, 0x00000671u, 0x0000048bu, 0x0003003eu, 0x0000074eu, 0x0000074du, 0x000200f9u, 0x0000072cu, 0x000200f8u, 0x0000072cu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000098u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x00000096u, 0x00030037u, 0x00000007u, 0x00000097u, 0x000200f8u, 0x00000099u, 0x0004003bu, 0x0000003eu, 0x0000075au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000753u, 0x00000096u, 0x000500c7u, 0x00000006u, 0x00000754u, 0x00000753u, 0x00000681u, 0x0003003eu, 0x00000096u, 0x00000754u, 0x0004003du, 0x00000006u, 0x00000755u, 0x00000097u, 0x00050084u, 0x00000006u, 0x00000757u, 0x00000755u, 0x00000756u, 0x0004003du, 0x00000006u, 0x00000758u, 0x00000096u, 0x00050080u, 0x00000006u, 0x00000759u, 0x00000758u, 0x00000757u, 0x0003003eu, 0x00000096u, 0x00000759u, 0x0004003du, 0x00000006u, 0x0000075bu, 0x00000096u, 0x000500c6u, 0x00000006u, 0x0000075cu, 0x0000075bu, 0x00000485u, 0x00060041u, 0x00000270u, 0x0000075du, 0x0000068du, 0x00000203u, 0x0000075cu, 0x0004003du, 0x0000022bu, 0x0000075eu, 0x0000075du, 0x00040071u, 0x00000006u, 0x0000075fu, 0x0000075eu, 0x0004007cu, 0x00000008u, 0x00000760u, 0x0000075fu, 0x0003003eu, 0x0000075au, 0x00000760u, 0x000500c3u, 0x00000008u, 0x00000762u, 0x00000760u, 0x00000215u, 0x0003003eu, 0x00000705u, 0x00000762u, 0x0004003du, 0x00000006u, 0x00000763u, 0x00000096u, 0x00060041u, 0x00000277u, 0x00000764u, 0x00000678u, 0x00000203u, 0x00000763u, 0x0004003du, 0x00000229u, 0x00000765u, 0x00000764u, 0x00040071u, 0x00000006u, 0x00000766u, 0x00000765u, 0x0004007cu, 0x00000008u, 0x00000767u, 0x00000766u, 0x000500c7u, 0x00000008u, 0x00000769u, 0x00000760u, 0x00000218u, 0x000500c4u, 0x00000008u, 0x0000076au, 0x00000769u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x0000076bu, 0x00000767u, 0x0000076au, 0x0003003eu, 0x000006e7u, 0x0000076bu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000009cu, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000009au, 0x00030037u, 0x00000007u, 0x0000009bu, 0x000200f8u, 0x0000009du, 0x0004003bu, 0x000007c1u, 0x000007c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000007f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007fdu, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00000820u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000823u, 0x00000007u, 0x0004003du, 0x0000005du, 0x0000076cu, 0x00000752u, 0x000300f7u, 0x0000076eu, 0x00000000u, 0x000400fau, 0x0000076cu, 0x0000076du, 0x0000076eu, 0x000200f8u, 0x0000076du, 0x000300f7u, 0x00000774u, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x00000774u, 0x00000000u, 0x0000076fu, 0x00000001u, 0x00000770u, 0x00000002u, 0x00000771u, 0x00000003u, 0x00000772u, 0x00000004u, 0x00000773u, 0x000200f8u, 0x0000076fu, 0x0004003du, 0x00000006u, 0x00000775u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x00000776u, 0x00000775u, 0x0000065eu, 0x0003003eu, 0x0000009au, 0x00000776u, 0x0004003du, 0x00000006u, 0x00000777u, 0x0000009bu, 0x00050084u, 0x00000006u, 0x00000778u, 0x00000777u, 0x0000065du, 0x0004003du, 0x00000006u, 0x00000779u, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000077au, 0x00000779u, 0x00000778u, 0x0003003eu, 0x0000009au, 0x0000077au, 0x0004003du, 0x00000006u, 0x0000077bu, 0x0000009au, 0x000500c6u, 0x00000006u, 0x0000077cu, 0x0000077bu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x0000077du, 0x00000374u, 0x00060041u, 0x00000277u, 0x0000077eu, 0x00000669u, 0x00000203u, 0x0000077cu, 0x0003003eu, 0x0000077eu, 0x0000077du, 0x0004003du, 0x00000006u, 0x0000077fu, 0x0000009au, 0x000500c7u, 0x00000006u, 0x00000780u, 0x0000077fu, 0x00000485u, 0x000500abu, 0x0000005du, 0x00000781u, 0x00000780u, 0x00000374u, 0x000300f7u, 0x00000783u, 0x00000000u, 0x000400fau, 0x00000781u, 0x00000782u, 0x00000783u, 0x000200f8u, 0x00000782u, 0x0004003du, 0x00000006u, 0x00000784u, 0x0000009au, 0x000500c2u, 0x00000006u, 0x00000785u, 0x00000784u, 0x00000485u, 0x00050041u, 0x00000201u, 0x00000786u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000787u, 0x00000786u, 0x00040071u, 0x00000229u, 0x00000788u, 0x00000787u, 0x00060041u, 0x00000277u, 0x00000789u, 0x00000678u, 0x00000203u, 0x00000785u, 0x0003003eu, 0x00000789u, 0x00000788u, 0x000200f9u, 0x00000783u, 0x000200f8u, 0x00000783u, 0x000300f7u, 0x00000791u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00000790u, 0x00000791u, 0x000200f8u, 0x00000790u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x00000793u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x00000794u, 0x00000793u, 0x0000048bu, 0x00050080u, 0x00000006u, 0x00000795u, 0x00000794u, 0x0000065du, 0x00040071u, 0x00000229u, 0x00000796u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x00000797u, 0x00000669u, 0x00000203u, 0x00000795u, 0x0003003eu, 0x00000797u, 0x00000796u, 0x000200f9u, 0x00000791u, 0x000200f8u, 0x00000791u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000770u, 0x0004003du, 0x00000006u, 0x00000799u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x0000079au, 0x00000799u, 0x0000065eu, 0x0003003eu, 0x0000009au, 0x0000079au, 0x0004003du, 0x00000006u, 0x0000079bu, 0x0000009bu, 0x00050084u, 0x00000006u, 0x0000079cu, 0x0000079bu, 0x0000065du, 0x0004003du, 0x00000006u, 0x0000079du, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000079eu, 0x0000079du, 0x0000079cu, 0x0003003eu, 0x0000009au, 0x0000079eu, 0x0004003du, 0x00000006u, 0x0000079fu, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007a0u, 0x0000079fu, 0x0000048bu, 0x00050041u, 0x00000201u, 0x000007a1u, 0x00000671u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000007a2u, 0x000007a1u, 0x00040071u, 0x00000229u, 0x000007a3u, 0x000007a2u, 0x00060041u, 0x00000277u, 0x000007a4u, 0x00000669u, 0x00000203u, 0x000007a0u, 0x0003003eu, 0x000007a4u, 0x000007a3u, 0x0004003du, 0x00000006u, 0x000007a5u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007a6u, 0x000007a5u, 0x00000485u, 0x000500abu, 0x0000005du, 0x000007a7u, 0x000007a6u, 0x00000374u, 0x000300f7u, 0x000007a9u, 0x00000000u, 0x000400fau, 0x000007a7u, 0x000007a8u, 0x000007a9u, 0x000200f8u, 0x000007a8u, 0x0004003du, 0x00000006u, 0x000007aau, 0x0000009au, 0x000500c2u, 0x00000006u, 0x000007abu, 0x000007aau, 0x00000485u, 0x0004003du, 0x00000008u, 0x000007adu, 0x000007a1u, 0x000500c7u, 0x00000008u, 0x000007aeu, 0x000007adu, 0x00000212u, 0x00050084u, 0x00000008u, 0x000007afu, 0x000007aeu, 0x00000218u, 0x00040071u, 0x00000229u, 0x000007b0u, 0x000007afu, 0x00060041u, 0x00000277u, 0x000007b1u, 0x00000678u, 0x00000203u, 0x000007abu, 0x0003003eu, 0x000007b1u, 0x000007b0u, 0x000200f9u, 0x000007a9u, 0x000200f8u, 0x000007a9u, 0x000300f7u, 0x000007b3u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000007b2u, 0x000007b3u, 0x000200f8u, 0x000007b2u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x000007b4u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007b5u, 0x000007b4u, 0x0000048bu, 0x00050080u, 0x00000006u, 0x000007b6u, 0x000007b5u, 0x0000065du, 0x00040071u, 0x00000229u, 0x000007b7u, 0x000006c2u, 0x00060041u, 0x00000277u, 0x000007b8u, 0x00000669u, 0x00000203u, 0x000007b6u, 0x0003003eu, 0x000007b8u, 0x000007b7u, 0x000200f9u, 0x000007b3u, 0x000200f8u, 0x000007b3u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000771u, 0x0004003du, 0x00000006u, 0x000007bau, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007bbu, 0x000007bau, 0x00000681u, 0x0003003eu, 0x0000009au, 0x000007bbu, 0x0004003du, 0x00000006u, 0x000007bcu, 0x0000009bu, 0x00050084u, 0x00000006u, 0x000007beu, 0x000007bcu, 0x000007bdu, 0x0004003du, 0x00000006u, 0x000007bfu, 0x0000009au, 0x00050080u, 0x00000006u, 0x000007c0u, 0x000007bfu, 0x000007beu, 0x0003003eu, 0x0000009au, 0x000007c0u, 0x0004003du, 0x00000009u, 0x000007c3u, 0x00000671u, 0x0004007cu, 0x00000237u, 0x000007c4u, 0x000007c3u, 0x0003003eu, 0x000007c2u, 0x000007c4u, 0x0004003du, 0x00000237u, 0x000007c5u, 0x000007c2u, 0x0008004fu, 0x00000353u, 0x000007c6u, 0x000007c5u, 0x000007c5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000353u, 0x000007c8u, 0x000007c6u, 0x0000eedau, 0x0004003du, 0x00000237u, 0x000007c9u, 0x000007c2u, 0x0009004fu, 0x00000237u, 0x000007cau, 0x000007c9u, 0x000007c8u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000007c2u, 0x000007cau, 0x00050041u, 0x00000007u, 0x000007ccu, 0x000007c2u, 0x0000048bu, 0x0004003du, 0x00000006u, 0x000007cdu, 0x000007ccu, 0x000500c2u, 0x00000006u, 0x000007ceu, 0x000007cdu, 0x00000734u, 0x0003003eu, 0x000007cbu, 0x000007ceu, 0x00050041u, 0x00000007u, 0x000007d0u, 0x000007c2u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000007d1u, 0x000007d0u, 0x000500c4u, 0x00000006u, 0x000007d2u, 0x000007d1u, 0x0000035bu, 0x00050041u, 0x00000007u, 0x000007d3u, 0x000007c2u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000007d4u, 0x000007d3u, 0x000500c4u, 0x00000006u, 0x000007d5u, 0x000007d4u, 0x0000048bu, 0x000500c5u, 0x00000006u, 0x000007d6u, 0x000007d2u, 0x000007d5u, 0x00050041u, 0x00000007u, 0x000007d7u, 0x000007c2u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000007d8u, 0x000007d7u, 0x000500c2u, 0x00000006u, 0x000007d9u, 0x000007d8u, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000007dau, 0x000007d6u, 0x000007d9u, 0x000500c2u, 0x00000006u, 0x000007dcu, 0x000007ceu, 0x000003c4u, 0x000500c5u, 0x00000006u, 0x000007ddu, 0x000007dau, 0x000007dcu, 0x0003003eu, 0x000007cfu, 0x000007ddu, 0x0004003du, 0x00000006u, 0x000007deu, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007dfu, 0x000007deu, 0x00000485u, 0x00040071u, 0x0000022bu, 0x000007e1u, 0x000007ddu, 0x00060041u, 0x00000270u, 0x000007e2u, 0x0000068du, 0x00000203u, 0x000007dfu, 0x0003003eu, 0x000007e2u, 0x000007e1u, 0x0004003du, 0x00000006u, 0x000007e3u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007e5u, 0x000007ceu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x000007e6u, 0x000007e5u, 0x00060041u, 0x00000277u, 0x000007e7u, 0x00000678u, 0x00000203u, 0x000007e3u, 0x0003003eu, 0x000007e7u, 0x000007e6u, 0x000300f7u, 0x000007e9u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x000007e8u, 0x000007e9u, 0x000200f8u, 0x000007e8u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x000007eau, 0x0000009au, 0x000500c6u, 0x00000006u, 0x000007ebu, 0x000007eau, 0x00000485u, 0x00050080u, 0x00000006u, 0x000007edu, 0x000007ebu, 0x000007ecu, 0x00040071u, 0x0000022bu, 0x000007efu, 0x000007eeu, 0x00060041u, 0x00000270u, 0x000007f0u, 0x0000068du, 0x00000203u, 0x000007edu, 0x0003003eu, 0x000007f0u, 0x000007efu, 0x000200f9u, 0x000007e9u, 0x000200f8u, 0x000007e9u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000772u, 0x0004003du, 0x00000006u, 0x000007f2u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x000007f3u, 0x000007f2u, 0x00000681u, 0x0003003eu, 0x0000009au, 0x000007f3u, 0x0004003du, 0x00000006u, 0x000007f4u, 0x0000009bu, 0x00050084u, 0x00000006u, 0x000007f6u, 0x000007f4u, 0x000007f5u, 0x0004003du, 0x00000006u, 0x000007f7u, 0x0000009au, 0x00050080u, 0x00000006u, 0x000007f8u, 0x000007f7u, 0x000007f6u, 0x0003003eu, 0x0000009au, 0x000007f8u, 0x0004003du, 0x00000009u, 0x000007fau, 0x00000671u, 0x0007004fu, 0x0000005fu, 0x000007fbu, 0x000007fau, 0x000007fau, 0x00000000u, 0x00000003u, 0x0004007cu, 0x000000a2u, 0x000007fcu, 0x000007fbu, 0x0003003eu, 0x000007f9u, 0x000007fcu, 0x00050041u, 0x00000007u, 0x000007feu, 0x000007f9u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000007ffu, 0x000007feu, 0x000500c4u, 0x00000006u, 0x00000800u, 0x000007ffu, 0x0000035bu, 0x00050041u, 0x00000007u, 0x00000801u, 0x000007f9u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000802u, 0x00000801u, 0x000500c5u, 0x00000006u, 0x00000803u, 0x00000800u, 0x00000802u, 0x0003003eu, 0x000007fdu, 0x00000803u, 0x0004003du, 0x00000006u, 0x00000804u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x00000805u, 0x00000804u, 0x00000485u, 0x00040071u, 0x0000022bu, 0x00000807u, 0x00000803u, 0x00060041u, 0x00000270u, 0x00000808u, 0x0000068du, 0x00000203u, 0x00000805u, 0x0003003eu, 0x00000808u, 0x00000807u, 0x0004003du, 0x00000006u, 0x00000809u, 0x0000009au, 0x0004003du, 0x00000006u, 0x0000080bu, 0x00000801u, 0x000500c7u, 0x00000006u, 0x0000080cu, 0x0000080bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000080du, 0x0000080cu, 0x0000048bu, 0x00040071u, 0x00000229u, 0x0000080eu, 0x0000080du, 0x00060041u, 0x00000277u, 0x0000080fu, 0x00000678u, 0x00000203u, 0x00000809u, 0x0003003eu, 0x0000080fu, 0x0000080eu, 0x000300f7u, 0x00000811u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00000810u, 0x00000811u, 0x000200f8u, 0x00000810u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x00000812u, 0x0000009au, 0x000500c6u, 0x00000006u, 0x00000813u, 0x00000812u, 0x00000485u, 0x00050080u, 0x00000006u, 0x00000815u, 0x00000813u, 0x00000814u, 0x00040071u, 0x0000022bu, 0x00000816u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00000817u, 0x0000068du, 0x00000203u, 0x00000815u, 0x0003003eu, 0x00000817u, 0x00000816u, 0x000200f9u, 0x00000811u, 0x000200f8u, 0x00000811u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000773u, 0x0004003du, 0x00000006u, 0x00000819u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x0000081au, 0x00000819u, 0x000006cau, 0x0003003eu, 0x0000009au, 0x0000081au, 0x0004003du, 0x00000006u, 0x0000081bu, 0x0000009bu, 0x00050084u, 0x00000006u, 0x0000081du, 0x0000081bu, 0x0000081cu, 0x0004003du, 0x00000006u, 0x0000081eu, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000081fu, 0x0000081eu, 0x0000081du, 0x0003003eu, 0x0000009au, 0x0000081fu, 0x0004003du, 0x00000009u, 0x00000821u, 0x00000671u, 0x0004007cu, 0x00000237u, 0x00000822u, 0x00000821u, 0x0003003eu, 0x00000820u, 0x00000822u, 0x00050041u, 0x00000007u, 0x00000824u, 0x00000820u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000825u, 0x00000824u, 0x000500c4u, 0x00000006u, 0x00000826u, 0x00000825u, 0x000006dcu, 0x00050041u, 0x00000007u, 0x00000827u, 0x00000820u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000828u, 0x00000827u, 0x000500c4u, 0x00000006u, 0x00000829u, 0x00000828u, 0x00000377u, 0x000500c5u, 0x00000006u, 0x0000082au, 0x00000826u, 0x00000829u, 0x00050041u, 0x00000007u, 0x0000082bu, 0x00000820u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x0000082cu, 0x0000082bu, 0x000500c4u, 0x00000006u, 0x0000082du, 0x0000082cu, 0x0000035bu, 0x000500c5u, 0x00000006u, 0x0000082eu, 0x0000082au, 0x0000082du, 0x00050041u, 0x00000007u, 0x0000082fu, 0x00000820u, 0x0000048bu, 0x0004003du, 0x00000006u, 0x00000830u, 0x0000082fu, 0x000500c4u, 0x00000006u, 0x00000831u, 0x00000830u, 0x00000374u, 0x000500c5u, 0x00000006u, 0x00000832u, 0x0000082eu, 0x00000831u, 0x0003003eu, 0x00000823u, 0x00000832u, 0x0004003du, 0x00000006u, 0x00000833u, 0x0000009au, 0x00060041u, 0x0000026bu, 0x00000835u, 0x000006d6u, 0x00000203u, 0x00000833u, 0x0003003eu, 0x00000835u, 0x00000832u, 0x0004003du, 0x00000006u, 0x00000836u, 0x0000009au, 0x00050084u, 0x00000006u, 0x00000837u, 0x000003c4u, 0x00000836u, 0x00050041u, 0x00000201u, 0x00000838u, 0x00000671u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000839u, 0x00000838u, 0x000500c7u, 0x00000008u, 0x0000083au, 0x00000839u, 0x00000212u, 0x00050084u, 0x00000008u, 0x0000083bu, 0x0000083au, 0x00000218u, 0x00040071u, 0x00000229u, 0x0000083cu, 0x0000083bu, 0x00060041u, 0x00000277u, 0x0000083du, 0x00000678u, 0x00000203u, 0x00000837u, 0x0003003eu, 0x0000083du, 0x0000083cu, 0x0004003du, 0x00000006u, 0x0000083eu, 0x0000009au, 0x00050084u, 0x00000006u, 0x0000083fu, 0x000003c4u, 0x0000083eu, 0x00050080u, 0x00000006u, 0x00000840u, 0x0000083fu, 0x00000485u, 0x00050041u, 0x00000201u, 0x00000841u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000842u, 0x00000841u, 0x000500c7u, 0x00000008u, 0x00000843u, 0x00000842u, 0x00000212u, 0x00050084u, 0x00000008u, 0x00000844u, 0x00000843u, 0x00000218u, 0x00040071u, 0x00000229u, 0x00000845u, 0x00000844u, 0x00060041u, 0x00000277u, 0x00000846u, 0x00000678u, 0x00000203u, 0x00000840u, 0x0003003eu, 0x00000846u, 0x00000845u, 0x000300f7u, 0x00000848u, 0x00000000u, 0x000400fau, 0x0000078fu, 0x00000847u, 0x00000848u, 0x000200f8u, 0x00000847u, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x00000849u, 0x0000009au, 0x00050080u, 0x00000006u, 0x0000084bu, 0x00000849u, 0x0000084au, 0x00060041u, 0x0000026bu, 0x0000084du, 0x000006d6u, 0x00000203u, 0x0000084bu, 0x0003003eu, 0x0000084du, 0x0000084cu, 0x000200f9u, 0x00000848u, 0x000200f8u, 0x00000848u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000774u, 0x000200f9u, 0x0000076eu, 0x000200f8u, 0x0000076eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a0u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000009eu, 0x00030037u, 0x00000007u, 0x0000009fu, 0x000200f8u, 0x000000a1u, 0x000300f7u, 0x00000853u, 0x00000000u, 0x000400fau, 0x00000851u, 0x00000852u, 0x00000853u, 0x000200f8u, 0x00000852u, 0x0004003du, 0x0000005du, 0x00000855u, 0x00000854u, 0x000300f7u, 0x00000857u, 0x00000000u, 0x000400fau, 0x00000855u, 0x00000856u, 0x00000857u, 0x000200f8u, 0x00000856u, 0x0004003du, 0x00000006u, 0x00000858u, 0x0000009eu, 0x000500c7u, 0x00000006u, 0x00000859u, 0x00000858u, 0x00000681u, 0x0003003eu, 0x0000009eu, 0x00000859u, 0x0004003du, 0x00000006u, 0x0000085au, 0x0000009fu, 0x00050084u, 0x00000006u, 0x0000085cu, 0x0000085au, 0x0000085bu, 0x0004003du, 0x00000006u, 0x0000085du, 0x0000009eu, 0x00050080u, 0x00000006u, 0x0000085eu, 0x0000085du, 0x0000085cu, 0x0003003eu, 0x0000009eu, 0x0000085eu, 0x0004003du, 0x00000006u, 0x0000085fu, 0x0000009eu, 0x000500c6u, 0x00000006u, 0x00000860u, 0x0000085fu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000861u, 0x00000705u, 0x000500c4u, 0x00000008u, 0x00000862u, 0x00000861u, 0x00000215u, 0x0004003du, 0x00000008u, 0x00000863u, 0x000006e7u, 0x000500c3u, 0x00000008u, 0x00000864u, 0x00000863u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x00000865u, 0x00000862u, 0x00000864u, 0x00040071u, 0x0000022bu, 0x00000866u, 0x00000865u, 0x00060041u, 0x00000270u, 0x00000867u, 0x0000068du, 0x00000203u, 0x00000860u, 0x0003003eu, 0x00000867u, 0x00000866u, 0x0004003du, 0x00000006u, 0x00000868u, 0x0000009eu, 0x0004003du, 0x00000008u, 0x00000869u, 0x000006e7u, 0x000500c7u, 0x00000008u, 0x0000086au, 0x00000869u, 0x00000218u, 0x00040071u, 0x00000229u, 0x0000086bu, 0x0000086au, 0x00060041u, 0x00000277u, 0x0000086cu, 0x00000678u, 0x00000203u, 0x00000868u, 0x0003003eu, 0x0000086cu, 0x0000086bu, 0x000300f7u, 0x0000086eu, 0x00000000u, 0x000400fau, 0x0000078fu, 0x0000086du, 0x0000086eu, 0x000200f8u, 0x0000086du, 0x000300e1u, 0x00000485u, 0x00000792u, 0x0004003du, 0x00000006u, 0x0000086fu, 0x0000009eu, 0x000500c6u, 0x00000006u, 0x00000870u, 0x0000086fu, 0x00000485u, 0x00050080u, 0x00000006u, 0x00000872u, 0x00000870u, 0x00000871u, 0x00040071u, 0x0000022bu, 0x00000873u, 0x000007eeu, 0x00060041u, 0x00000270u, 0x00000874u, 0x0000068du, 0x00000203u, 0x00000872u, 0x0003003eu, 0x00000874u, 0x00000873u, 0x000200f9u, 0x0000086eu, 0x000200f8u, 0x0000086eu, 0x000200f9u, 0x00000857u, 0x000200f8u, 0x00000857u, 0x000200f9u, 0x00000853u, 0x000200f8u, 0x00000853u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000aau, 0x00000000u, 0x000000a4u, 0x00030037u, 0x000000a3u, 0x000000a5u, 0x00030037u, 0x00000007u, 0x000000a6u, 0x00030037u, 0x00000007u, 0x000000a7u, 0x00030037u, 0x00000007u, 0x000000a8u, 0x00030037u, 0x00000007u, 0x000000a9u, 0x000200f8u, 0x000000abu, 0x0004003bu, 0x000000a3u, 0x0000087eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000888u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000890u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000089eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008afu, 0x00000007u, 0x0003003eu, 0x00000752u, 0x00000543u, 0x0003003eu, 0x00000854u, 0x00000543u, 0x0004003du, 0x000000a2u, 0x00000875u, 0x000000a5u, 0x0004003du, 0x00000006u, 0x00000876u, 0x000000a6u, 0x0004003du, 0x00000006u, 0x00000877u, 0x000000a7u, 0x00050050u, 0x000000a2u, 0x00000878u, 0x00000876u, 0x00000877u, 0x000500b0u, 0x00000879u, 0x0000087au, 0x00000875u, 0x00000878u, 0x0004009bu, 0x0000005du, 0x0000087bu, 0x0000087au, 0x000300f7u, 0x0000087du, 0x00000000u, 0x000400fau, 0x0000087bu, 0x0000087cu, 0x0000087du, 0x000200f8u, 0x0000087cu, 0x0004003du, 0x000000a2u, 0x0000087fu, 0x000000a5u, 0x00050050u, 0x000000a2u, 0x00000883u, 0x00000882u, 0x00000882u, 0x000500c7u, 0x000000a2u, 0x00000884u, 0x0000087fu, 0x00000883u, 0x0003003eu, 0x0000087eu, 0x00000884u, 0x0004003du, 0x000000a2u, 0x00000885u, 0x000000a5u, 0x00050050u, 0x0000005fu, 0x00000886u, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x00000887u, 0x00000885u, 0x00000886u, 0x0003003eu, 0x000000a5u, 0x00000887u, 0x00050041u, 0x00000007u, 0x00000889u, 0x0000087eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000088au, 0x00000889u, 0x00050084u, 0x00000006u, 0x0000088cu, 0x0000088au, 0x0000088bu, 0x00050041u, 0x00000007u, 0x0000088du, 0x0000087eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000088eu, 0x0000088du, 0x00050080u, 0x00000006u, 0x0000088fu, 0x0000088cu, 0x0000088eu, 0x0003003eu, 0x00000888u, 0x0000088fu, 0x0004003du, 0x00000006u, 0x00000891u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000892u, 0x000000a6u, 0x000500c2u, 0x00000006u, 0x00000893u, 0x00000892u, 0x0000078du, 0x00050041u, 0x00000007u, 0x00000894u, 0x000000a5u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000895u, 0x00000894u, 0x00050084u, 0x00000006u, 0x00000896u, 0x00000893u, 0x00000895u, 0x00050080u, 0x00000006u, 0x00000897u, 0x00000891u, 0x00000896u, 0x00050041u, 0x00000007u, 0x00000898u, 0x000000a5u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000899u, 0x00000898u, 0x00050080u, 0x00000006u, 0x0000089au, 0x00000897u, 0x00000899u, 0x0003003eu, 0x00000890u, 0x0000089au, 0x0003003eu, 0x0000089cu, 0x0000089au, 0x0003003eu, 0x0000089eu, 0x0000089au, 0x0003003eu, 0x000008a0u, 0x0000088fu, 0x00060039u, 0x00000002u, 0x000008a2u, 0x00000090u, 0x0000089eu, 0x000008a0u, 0x0004003du, 0x00000006u, 0x000008a3u, 0x000000a9u, 0x0004003du, 0x00000006u, 0x000008a4u, 0x000000a6u, 0x000500c2u, 0x00000006u, 0x000008a5u, 0x000008a4u, 0x0000078du, 0x0004003du, 0x00000006u, 0x000008a7u, 0x00000894u, 0x00050084u, 0x00000006u, 0x000008a8u, 0x000008a5u, 0x000008a7u, 0x00050080u, 0x00000006u, 0x000008a9u, 0x000008a3u, 0x000008a8u, 0x0004003du, 0x00000006u, 0x000008abu, 0x00000898u, 0x00050080u, 0x00000006u, 0x000008acu, 0x000008a9u, 0x000008abu, 0x0003003eu, 0x00000890u, 0x000008acu, 0x0003003eu, 0x000008adu, 0x000008acu, 0x0003003eu, 0x000008afu, 0x0000088fu, 0x00060039u, 0x00000002u, 0x000008b1u, 0x00000098u, 0x000008adu, 0x000008afu, 0x000200f9u, 0x0000087du, 0x000200f8u, 0x0000087du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000afu, 0x00000000u, 0x000000acu, 0x00030037u, 0x000000a3u, 0x000000adu, 0x00030037u, 0x00000007u, 0x000000aeu, 0x000200f8u, 0x000000b0u, 0x0004003bu, 0x00000007u, 0x000008b2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000008beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000008d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008ddu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008b3u, 0x000000adu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000008b4u, 0x000008b3u, 0x000500c2u, 0x00000006u, 0x000008b5u, 0x000008b4u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000008b6u, 0x000000aeu, 0x00050080u, 0x00000006u, 0x000008b7u, 0x000008b6u, 0x0000048bu, 0x000500c2u, 0x00000006u, 0x000008b8u, 0x000008b7u, 0x000003c4u, 0x00050084u, 0x00000006u, 0x000008b9u, 0x000008b5u, 0x000008b8u, 0x00050041u, 0x00000007u, 0x000008bau, 0x000000adu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000008bbu, 0x000008bau, 0x000500c2u, 0x00000006u, 0x000008bcu, 0x000008bbu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000008bdu, 0x000008b9u, 0x000008bcu, 0x0003003eu, 0x000008b2u, 0x000008bdu, 0x0004003du, 0x000000a2u, 0x000008bfu, 0x000000adu, 0x000500c7u, 0x000000a2u, 0x000008c1u, 0x000008bfu, 0x0000eedbu, 0x0003003eu, 0x000008beu, 0x000008c1u, 0x0004003du, 0x0000005du, 0x000008c3u, 0x00000752u, 0x000600a9u, 0x00000006u, 0x000008c4u, 0x000008c3u, 0x00000485u, 0x00000374u, 0x0004003du, 0x0000005du, 0x000008c5u, 0x00000854u, 0x000600a9u, 0x00000006u, 0x000008c6u, 0x000008c5u, 0x00000485u, 0x00000374u, 0x00050084u, 0x00000006u, 0x000008c7u, 0x000003c4u, 0x000008c6u, 0x00050080u, 0x00000006u, 0x000008c8u, 0x000008c4u, 0x000008c7u, 0x0003003eu, 0x000008c2u, 0x000008c8u, 0x00050041u, 0x00000007u, 0x000008c9u, 0x000008beu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000008cau, 0x000008c9u, 0x00050041u, 0x00000007u, 0x000008cbu, 0x000008beu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000008ccu, 0x000008cbu, 0x00050084u, 0x00000006u, 0x000008cdu, 0x000008ccu, 0x00000701u, 0x00050080u, 0x00000006u, 0x000008ceu, 0x000008cau, 0x000008cdu, 0x00050084u, 0x00000006u, 0x000008cfu, 0x000003c4u, 0x000008ceu, 0x000500c4u, 0x00000006u, 0x000008d1u, 0x000008c8u, 0x000008cfu, 0x0003003eu, 0x000008c2u, 0x000008d1u, 0x0003003eu, 0x000008d2u, 0x0000055eu, 0x000200f9u, 0x000008d3u, 0x000200f8u, 0x000008d3u, 0x000700f5u, 0x0000005du, 0x0000ea44u, 0x0000055eu, 0x000000b0u, 0x0000ef17u, 0x000008d6u, 0x000400f6u, 0x000008d5u, 0x000008d6u, 0x00000000u, 0x000200f9u, 0x000008d4u, 0x000200f8u, 0x000008d4u, 0x00050152u, 0x00000006u, 0x000008d8u, 0x0000048bu, 0x000008bdu, 0x000500aau, 0x0000005du, 0x000008dau, 0x000008d8u, 0x000008bdu, 0x000300f7u, 0x000008dcu, 0x00000000u, 0x000400fau, 0x000008dau, 0x000008dbu, 0x000008dcu, 0x000200f8u, 0x000008dbu, 0x00060168u, 0x00000006u, 0x000008dfu, 0x0000048bu, 0x00000000u, 0x000008d1u, 0x0003003eu, 0x000008ddu, 0x000008dfu, 0x0004014du, 0x0000005du, 0x000008e0u, 0x0000048bu, 0x000300f7u, 0x000008e2u, 0x00000000u, 0x000400fau, 0x000008e0u, 0x000008e1u, 0x000008e2u, 0x000200f8u, 0x000008e1u, 0x00050080u, 0x00000006u, 0x000008e8u, 0x000008e6u, 0x000008bdu, 0x00060041u, 0x0000026bu, 0x000008e9u, 0x000006d6u, 0x00000203u, 0x000008e8u, 0x000700f1u, 0x00000006u, 0x000008ebu, 0x000008e9u, 0x00000485u, 0x00000374u, 0x000008dfu, 0x000200f9u, 0x000008e2u, 0x000200f8u, 0x000008e2u, 0x0003003eu, 0x000008d2u, 0x00000543u, 0x000200f9u, 0x000008dcu, 0x000200f8u, 0x000008dcu, 0x000600a9u, 0x0000005du, 0x0000ef17u, 0x000008dau, 0x00000543u, 0x0000ea44u, 0x000200f9u, 0x000008d6u, 0x000200f8u, 0x000008d6u, 0x000400fau, 0x0000ef17u, 0x000008d3u, 0x000008d5u, 0x000200f8u, 0x000008d5u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000b6u, 0x00000000u, 0x000000a4u, 0x00030037u, 0x000000a3u, 0x000000b1u, 0x00030037u, 0x00000007u, 0x000000b2u, 0x00030037u, 0x00000007u, 0x000000b3u, 0x00030037u, 0x00000007u, 0x000000b4u, 0x00030037u, 0x00000007u, 0x000000b5u, 0x000200f8u, 0x000000b7u, 0x0004003bu, 0x00000007u, 0x000008f5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000008f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000901u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000909u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000913u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000915u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000921u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000923u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000092au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000092cu, 0x00000007u, 0x0004003du, 0x000000a2u, 0x000008edu, 0x000000b1u, 0x0004003du, 0x00000006u, 0x000008eeu, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000008efu, 0x000000b3u, 0x00050050u, 0x000000a2u, 0x000008f0u, 0x000008eeu, 0x000008efu, 0x000500b0u, 0x00000879u, 0x000008f1u, 0x000008edu, 0x000008f0u, 0x0004009bu, 0x0000005du, 0x000008f2u, 0x000008f1u, 0x000300f7u, 0x000008f4u, 0x00000000u, 0x000400fau, 0x000008f2u, 0x000008f3u, 0x000008f4u, 0x000200f8u, 0x000008f3u, 0x0004003du, 0x00000006u, 0x000008f6u, 0x000000b2u, 0x000500c2u, 0x00000006u, 0x000008f7u, 0x000008f6u, 0x0000078du, 0x0003003eu, 0x000008f5u, 0x000008f7u, 0x0004003du, 0x000000a2u, 0x000008f9u, 0x000000b1u, 0x00050050u, 0x000000a2u, 0x000008fcu, 0x000008fbu, 0x000008fbu, 0x000500c7u, 0x000000a2u, 0x000008fdu, 0x000008f9u, 0x000008fcu, 0x0003003eu, 0x000008f8u, 0x000008fdu, 0x0004003du, 0x000000a2u, 0x000008feu, 0x000000b1u, 0x00050050u, 0x0000005fu, 0x000008ffu, 0x0000078du, 0x0000078du, 0x000500c2u, 0x000000a2u, 0x00000900u, 0x000008feu, 0x000008ffu, 0x0003003eu, 0x000000b1u, 0x00000900u, 0x00050041u, 0x00000007u, 0x00000902u, 0x000008f8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000903u, 0x00000902u, 0x00050084u, 0x00000006u, 0x00000905u, 0x00000903u, 0x00000904u, 0x00050041u, 0x00000007u, 0x00000906u, 0x000008f8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000907u, 0x00000906u, 0x00050080u, 0x00000006u, 0x00000908u, 0x00000905u, 0x00000907u, 0x0003003eu, 0x00000901u, 0x00000908u, 0x0004003du, 0x00000006u, 0x0000090au, 0x000000b4u, 0x00050041u, 0x00000007u, 0x0000090cu, 0x000000b1u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000090du, 0x0000090cu, 0x00050084u, 0x00000006u, 0x0000090eu, 0x000008f7u, 0x0000090du, 0x00050080u, 0x00000006u, 0x0000090fu, 0x0000090au, 0x0000090eu, 0x00050041u, 0x00000007u, 0x00000910u, 0x000000b1u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000911u, 0x00000910u, 0x00050080u, 0x00000006u, 0x00000912u, 0x0000090fu, 0x00000911u, 0x0003003eu, 0x00000909u, 0x00000912u, 0x0003003eu, 0x00000913u, 0x00000912u, 0x0003003eu, 0x00000915u, 0x00000908u, 0x00060039u, 0x00000002u, 0x00000917u, 0x0000009cu, 0x00000913u, 0x00000915u, 0x0004003du, 0x00000006u, 0x00000918u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x0000091bu, 0x0000090cu, 0x00050084u, 0x00000006u, 0x0000091cu, 0x000008f7u, 0x0000091bu, 0x00050080u, 0x00000006u, 0x0000091du, 0x00000918u, 0x0000091cu, 0x0004003du, 0x00000006u, 0x0000091fu, 0x00000910u, 0x00050080u, 0x00000006u, 0x00000920u, 0x0000091du, 0x0000091fu, 0x0003003eu, 0x00000909u, 0x00000920u, 0x0003003eu, 0x00000921u, 0x00000920u, 0x0003003eu, 0x00000923u, 0x00000908u, 0x00060039u, 0x00000002u, 0x00000925u, 0x000000a0u, 0x00000921u, 0x00000923u, 0x000300f7u, 0x00000929u, 0x00000000u, 0x000400fau, 0x00000927u, 0x00000928u, 0x00000929u, 0x000200f8u, 0x00000928u, 0x0004003du, 0x000000a2u, 0x0000092bu, 0x000000b1u, 0x0003003eu, 0x0000092au, 0x0000092bu, 0x0003003eu, 0x0000092cu, 0x000008f7u, 0x00060039u, 0x00000002u, 0x0000092eu, 0x000000afu, 0x0000092au, 0x0000092cu, 0x000200f9u, 0x00000929u, 0x000200f8u, 0x00000929u, 0x000200f9u, 0x000008f4u, 0x000200f8u, 0x000008f4u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000bau, 0x00000000u, 0x000000b8u, 0x00030037u, 0x0000005eu, 0x000000b9u, 0x000200f8u, 0x000000bbu, 0x0004003bu, 0x0000003eu, 0x0000092fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000931u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000940u, 0x00000007u, 0x0004003du, 0x0000005du, 0x00000930u, 0x000000b9u, 0x000300f7u, 0x00000933u, 0x00000000u, 0x000400fau, 0x00000930u, 0x00000932u, 0x00000938u, 0x000200f8u, 0x00000932u, 0x00050041u, 0x00000201u, 0x00000934u, 0x00000671u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000935u, 0x00000934u, 0x000500c7u, 0x00000008u, 0x00000937u, 0x00000935u, 0x00000936u, 0x0003003eu, 0x00000931u, 0x00000937u, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x00000938u, 0x0003003eu, 0x00000931u, 0x00000936u, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x00000933u, 0x000700f5u, 0x00000008u, 0x0000ea49u, 0x00000937u, 0x00000932u, 0x00000936u, 0x00000938u, 0x0003003eu, 0x0000092fu, 0x0000ea49u, 0x000300f7u, 0x0000093fu, 0x00000000u, 0x000d00fbu, 0x00000657u, 0x0000093fu, 0x00000000u, 0x0000093au, 0x00000001u, 0x0000093bu, 0x00000002u, 0x0000093cu, 0x00000003u, 0x0000093du, 0x00000004u, 0x0000093eu, 0x000200f8u, 0x0000093au, 0x0003003eu, 0x00000940u, 0x00000941u, 0x0003003eu, 0x0000092fu, 0x00000936u, 0x000200f9u, 0x0000093fu, 0x000200f8u, 0x0000093bu, 0x0004003du, 0x00000009u, 0x00000943u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00000944u, 0x00000943u, 0x00000943u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000940u, 0x00000944u, 0x0003003eu, 0x0000092fu, 0x00000936u, 0x000200f9u, 0x0000093fu, 0x000200f8u, 0x0000093cu, 0x0004003du, 0x00000009u, 0x00000946u, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x00000947u, 0x00000946u, 0x00000946u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000003cu, 0x00000949u, 0x00000947u, 0x0000eef1u, 0x0003003eu, 0x00000940u, 0x00000949u, 0x000200f9u, 0x0000093fu, 0x000200f8u, 0x0000093du, 0x0004003du, 0x00000009u, 0x0000094bu, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x0000094cu, 0x0000094bu, 0x0000094bu, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000940u, 0x0000094cu, 0x000200f9u, 0x0000093fu, 0x000200f8u, 0x0000093eu, 0x0004003du, 0x00000009u, 0x0000094eu, 0x00000671u, 0x0008004fu, 0x0000003cu, 0x0000094fu, 0x0000094eu, 0x0000094eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000940u, 0x0000094fu, 0x000200f9u, 0x0000093fu, 0x000200f8u, 0x0000093fu, 0x000f00f5u, 0x00000008u, 0x0000ea4du, 0x0000ea49u, 0x00000933u, 0x00000936u, 0x0000093au, 0x00000936u, 0x0000093bu, 0x0000ea49u, 0x0000093cu, 0x0000ea49u, 0x0000093du, 0x0000ea49u, 0x0000093eu, 0x000f00f5u, 0x0000003cu, 0x0000ea4au, 0x0000ea4cu, 0x00000933u, 0x00000941u, 0x0000093au, 0x00000944u, 0x0000093bu, 0x00000949u, 0x0000093cu, 0x0000094cu, 0x0000093du, 0x0000094fu, 0x0000093eu, 0x00050051u, 0x00000008u, 0x00000954u, 0x0000ea4au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000955u, 0x0000ea4au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000956u, 0x0000ea4au, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000957u, 0x00000954u, 0x00000955u, 0x00000956u, 0x0000ea4du, 0x000200feu, 0x00000957u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000beu, 0x00000000u, 0x000000bcu, 0x00030037u, 0x0000005cu, 0x000000bdu, 0x000200f8u, 0x000000bfu, 0x000300f7u, 0x0000095cu, 0x00000000u, 0x000400fau, 0x0000095au, 0x0000095bu, 0x00000961u, 0x000200f8u, 0x0000095bu, 0x0004003du, 0x00000009u, 0x0000095du, 0x000000bdu, 0x0008004fu, 0x0000003cu, 0x0000095eu, 0x0000095du, 0x0000095du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x0000095fu, 0x00000671u, 0x0009004fu, 0x00000009u, 0x00000960u, 0x0000095fu, 0x0000095du, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000671u, 0x00000960u, 0x000200f9u, 0x0000095cu, 0x000200f8u, 0x00000961u, 0x0004003du, 0x00000009u, 0x00000962u, 0x000000bdu, 0x0003003eu, 0x00000671u, 0x00000962u, 0x000200f9u, 0x0000095cu, 0x000200f8u, 0x0000095cu, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000c2u, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x000000c0u, 0x00030037u, 0x00000007u, 0x000000c1u, 0x000200f8u, 0x000000c3u, 0x0004003bu, 0x0000005cu, 0x0000096du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000970u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000974u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000978u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000097cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000098au, 0x00000007u, 0x000300f7u, 0x00000966u, 0x00000000u, 0x000900fbu, 0x00000657u, 0x00000966u, 0x00000000u, 0x00000963u, 0x00000001u, 0x00000964u, 0x00000002u, 0x00000965u, 0x000200f8u, 0x00000963u, 0x0003003eu, 0x00000671u, 0x00000611u, 0x0003003eu, 0x00000752u, 0x0000055eu, 0x000200f9u, 0x00000966u, 0x000200f8u, 0x00000964u, 0x0004003du, 0x00000006u, 0x00000968u, 0x000000c0u, 0x000500c7u, 0x00000006u, 0x00000969u, 0x00000968u, 0x000006c2u, 0x0003003eu, 0x000000c0u, 0x00000969u, 0x0004003du, 0x00000006u, 0x0000096au, 0x000000c0u, 0x0004007cu, 0x00000008u, 0x0000096bu, 0x0000096au, 0x00070050u, 0x00000009u, 0x0000096cu, 0x0000096bu, 0x0000096bu, 0x0000096bu, 0x0000096bu, 0x0003003eu, 0x0000096du, 0x0000096cu, 0x00050039u, 0x00000002u, 0x0000096eu, 0x000000beu, 0x0000096du, 0x000200f9u, 0x00000966u, 0x000200f8u, 0x00000965u, 0x0004003du, 0x00000006u, 0x00000971u, 0x000000c0u, 0x000500c2u, 0x00000006u, 0x00000972u, 0x00000971u, 0x0000025eu, 0x000500c7u, 0x00000006u, 0x00000973u, 0x00000972u, 0x0000069bu, 0x0003003eu, 0x00000970u, 0x00000973u, 0x0004003du, 0x00000006u, 0x00000975u, 0x000000c0u, 0x000500c2u, 0x00000006u, 0x00000976u, 0x00000975u, 0x00000218u, 0x000500c7u, 0x00000006u, 0x00000977u, 0x00000976u, 0x0000069bu, 0x0003003eu, 0x00000974u, 0x00000977u, 0x0004003du, 0x00000006u, 0x00000979u, 0x000000c0u, 0x000500c4u, 0x00000006u, 0x0000097au, 0x00000979u, 0x00000215u, 0x000500c7u, 0x00000006u, 0x0000097bu, 0x0000097au, 0x0000069bu, 0x0003003eu, 0x00000978u, 0x0000097bu, 0x0004003du, 0x00000006u, 0x0000097du, 0x000000c0u, 0x000500c7u, 0x00000006u, 0x0000097eu, 0x0000097du, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000980u, 0x0000097eu, 0x0000097fu, 0x0003003eu, 0x0000097cu, 0x00000980u, 0x0004007cu, 0x00000008u, 0x00000982u, 0x00000973u, 0x0004007cu, 0x00000008u, 0x00000984u, 0x00000977u, 0x0004007cu, 0x00000008u, 0x00000986u, 0x0000097bu, 0x0004007cu, 0x00000008u, 0x00000988u, 0x00000980u, 0x00070050u, 0x00000009u, 0x00000989u, 0x00000982u, 0x00000984u, 0x00000986u, 0x00000988u, 0x0003003eu, 0x0000098au, 0x00000989u, 0x00050039u, 0x00000002u, 0x0000098bu, 0x000000beu, 0x0000098au, 0x000200f9u, 0x00000966u, 0x000200f8u, 0x00000966u, 0x000300f7u, 0x0000098fu, 0x00000000u, 0x000400fau, 0x00000850u, 0x0000098eu, 0x0000098fu, 0x000200f8u, 0x0000098eu, 0x00040039u, 0x00000002u, 0x00000990u, 0x00000092u, 0x000200f9u, 0x0000098fu, 0x000200f8u, 0x0000098fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000c6u, 0x00000000u, 0x000000c4u, 0x00030037u, 0x00000007u, 0x000000c5u, 0x000200f8u, 0x000000c7u, 0x0004003bu, 0x00000007u, 0x00000996u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000099au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000099eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009a2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009c4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009e0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009edu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000009fbu, 0x00000007u, 0x000300f7u, 0x00000995u, 0x00000000u, 0x000b00fbu, 0x00000657u, 0x00000995u, 0x00000004u, 0x00000991u, 0x00000002u, 0x00000992u, 0x00000003u, 0x00000993u, 0x00000001u, 0x00000994u, 0x000200f8u, 0x00000991u, 0x0004003du, 0x00000006u, 0x00000997u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x00000998u, 0x00000997u, 0x000006dcu, 0x000500c7u, 0x00000006u, 0x00000999u, 0x00000998u, 0x000006c2u, 0x0003003eu, 0x00000996u, 0x00000999u, 0x0004003du, 0x00000006u, 0x0000099bu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x0000099cu, 0x0000099bu, 0x00000377u, 0x000500c7u, 0x00000006u, 0x0000099du, 0x0000099cu, 0x000006c2u, 0x0003003eu, 0x0000099au, 0x0000099du, 0x0004003du, 0x00000006u, 0x0000099fu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009a0u, 0x0000099fu, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x000009a1u, 0x000009a0u, 0x000006c2u, 0x0003003eu, 0x0000099eu, 0x000009a1u, 0x0004003du, 0x00000006u, 0x000009a3u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009a4u, 0x000009a3u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x000009a5u, 0x000009a4u, 0x000006c2u, 0x0003003eu, 0x000009a2u, 0x000009a5u, 0x0004007cu, 0x00000008u, 0x000009a7u, 0x00000999u, 0x0004007cu, 0x00000008u, 0x000009a9u, 0x0000099du, 0x0004007cu, 0x00000008u, 0x000009abu, 0x000009a1u, 0x0004007cu, 0x00000008u, 0x000009adu, 0x000009a5u, 0x00070050u, 0x00000009u, 0x000009aeu, 0x000009a7u, 0x000009a9u, 0x000009abu, 0x000009adu, 0x0003003eu, 0x000009afu, 0x000009aeu, 0x00050039u, 0x00000002u, 0x000009b0u, 0x000000beu, 0x000009afu, 0x000200f9u, 0x00000995u, 0x000200f8u, 0x00000992u, 0x0004003du, 0x00000006u, 0x000009b2u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x000009b3u, 0x000009b2u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x000009b4u, 0x000009b3u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000009b5u, 0x000009b4u, 0x00000377u, 0x0004003du, 0x00000006u, 0x000009b6u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009b7u, 0x000009b6u, 0x000009b5u, 0x0003003eu, 0x000000c5u, 0x000009b7u, 0x0004003du, 0x00000006u, 0x000009b9u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009bau, 0x000009b9u, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x000009bbu, 0x000009bau, 0x0000069bu, 0x0003003eu, 0x000009b8u, 0x000009bbu, 0x0004003du, 0x00000006u, 0x000009bdu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009beu, 0x000009bdu, 0x0000048bu, 0x000500c7u, 0x00000006u, 0x000009bfu, 0x000009beu, 0x0000069bu, 0x0003003eu, 0x000009bcu, 0x000009bfu, 0x0004003du, 0x00000006u, 0x000009c1u, 0x000000c5u, 0x000500c4u, 0x00000006u, 0x000009c2u, 0x000009c1u, 0x000003c4u, 0x000500c7u, 0x00000006u, 0x000009c3u, 0x000009c2u, 0x0000069bu, 0x0003003eu, 0x000009c0u, 0x000009c3u, 0x0004003du, 0x00000006u, 0x000009c5u, 0x000000c5u, 0x000500c7u, 0x00000006u, 0x000009c6u, 0x000009c5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000009c7u, 0x000009c6u, 0x0000097fu, 0x0003003eu, 0x000009c4u, 0x000009c7u, 0x0004007cu, 0x00000008u, 0x000009c9u, 0x000009bbu, 0x0004007cu, 0x00000008u, 0x000009cbu, 0x000009bfu, 0x0004007cu, 0x00000008u, 0x000009cdu, 0x000009c3u, 0x0004007cu, 0x00000008u, 0x000009cfu, 0x000009c7u, 0x00070050u, 0x00000009u, 0x000009d0u, 0x000009c9u, 0x000009cbu, 0x000009cdu, 0x000009cfu, 0x0003003eu, 0x000009d1u, 0x000009d0u, 0x00050039u, 0x00000002u, 0x000009d2u, 0x000000beu, 0x000009d1u, 0x000200f9u, 0x00000995u, 0x000200f8u, 0x00000993u, 0x0004003du, 0x00000006u, 0x000009d4u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x000009d5u, 0x000009d4u, 0x00000485u, 0x000500c6u, 0x00000006u, 0x000009d6u, 0x000009d5u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000009d7u, 0x000009d6u, 0x00000377u, 0x0004003du, 0x00000006u, 0x000009d8u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009d9u, 0x000009d8u, 0x000009d7u, 0x0003003eu, 0x000000c5u, 0x000009d9u, 0x0004003du, 0x00000006u, 0x000009dau, 0x000000c5u, 0x000500c7u, 0x00000006u, 0x000009dbu, 0x000009dau, 0x000007eeu, 0x0003003eu, 0x000000c5u, 0x000009dbu, 0x0004003du, 0x00000006u, 0x000009ddu, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009deu, 0x000009ddu, 0x0000035bu, 0x000500c7u, 0x00000006u, 0x000009dfu, 0x000009deu, 0x000006c2u, 0x0003003eu, 0x000009dcu, 0x000009dfu, 0x0004003du, 0x00000006u, 0x000009e1u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009e2u, 0x000009e1u, 0x00000374u, 0x000500c7u, 0x00000006u, 0x000009e3u, 0x000009e2u, 0x000006c2u, 0x0003003eu, 0x000009e0u, 0x000009e3u, 0x0004007cu, 0x00000008u, 0x000009e5u, 0x000009dfu, 0x0004007cu, 0x00000008u, 0x000009ebu, 0x000009e3u, 0x00070050u, 0x00000009u, 0x000009ecu, 0x000009e5u, 0x000009e5u, 0x000009e5u, 0x000009ebu, 0x0003003eu, 0x000009edu, 0x000009ecu, 0x00050039u, 0x00000002u, 0x000009eeu, 0x000000beu, 0x000009edu, 0x000200f9u, 0x00000995u, 0x000200f8u, 0x00000994u, 0x0004003du, 0x00000006u, 0x000009f0u, 0x0000089cu, 0x000500c7u, 0x00000006u, 0x000009f1u, 0x000009f0u, 0x0000048bu, 0x000500c6u, 0x00000006u, 0x000009f2u, 0x000009f1u, 0x0000048bu, 0x00050084u, 0x00000006u, 0x000009f3u, 0x000009f2u, 0x0000035bu, 0x0004003du, 0x00000006u, 0x000009f4u, 0x000000c5u, 0x000500c2u, 0x00000006u, 0x000009f5u, 0x000009f4u, 0x000009f3u, 0x0003003eu, 0x000000c5u, 0x000009f5u, 0x0004003du, 0x00000006u, 0x000009f6u, 0x000000c5u, 0x000500c7u, 0x00000006u, 0x000009f7u, 0x000009f6u, 0x000006c2u, 0x0003003eu, 0x000000c5u, 0x000009f7u, 0x0004003du, 0x00000006u, 0x000009f8u, 0x000000c5u, 0x0004007cu, 0x00000008u, 0x000009f9u, 0x000009f8u, 0x00070050u, 0x00000009u, 0x000009fau, 0x000009f9u, 0x000009f9u, 0x000009f9u, 0x000009f9u, 0x0003003eu, 0x000009fbu, 0x000009fau, 0x00050039u, 0x00000002u, 0x000009fcu, 0x000000beu, 0x000009fbu, 0x000200f9u, 0x00000995u, 0x000200f8u, 0x00000995u, 0x000300f7u, 0x00000a00u, 0x00000000u, 0x000400fau, 0x00000850u, 0x000009ffu, 0x00000a00u, 0x000200f8u, 0x000009ffu, 0x00040039u, 0x00000002u, 0x00000a01u, 0x00000092u, 0x000200f9u, 0x00000a00u, 0x000200f8u, 0x00000a00u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000cfu, 0x00000000u, 0x000000cau, 0x00030037u, 0x0000003eu, 0x000000cbu, 0x00030037u, 0x0000003eu, 0x000000ccu, 0x00030037u, 0x00000007u, 0x000000cdu, 0x00030037u, 0x000000c9u, 0x000000ceu, 0x000200f8u, 0x000000d0u, 0x0004003bu, 0x0000003eu, 0x000078edu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078ecu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078ebu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078eau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078e9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078e3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000078e1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078e0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078dfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078dau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078d9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078d8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000078d7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a02u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a06u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a0au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a0du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a25u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a28u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a2du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a32u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a37u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a3cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a42u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a48u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a4eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a54u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a55u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a58u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a5cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a5du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a5eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000a5fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a60u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a62u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a65u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a68u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a6au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a6cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a6eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a70u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000a72u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a75u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a77u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a79u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a7au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000a7bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a95u, 0x00000007u, 0x0004003bu, 0x0000005bu, 0x00000a9bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000a9du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000a9fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aa1u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aa3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aa5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000aa7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aa9u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000ab0u, 0x00000007u, 0x0004003bu, 0x0000005bu, 0x00000ab1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000ab3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ab5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ab7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000ab9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000abbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000abdu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000abfu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000ac4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ac6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ac9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000acau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000accu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000aceu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ad0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000adbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ae0u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000a03u, 0x000000ceu, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000a04u, 0x00000a03u, 0x000500c3u, 0x00000008u, 0x00000a05u, 0x00000a04u, 0x00000264u, 0x0003003eu, 0x00000a02u, 0x00000a05u, 0x0004003du, 0x00000008u, 0x00000a08u, 0x00000a03u, 0x000500c7u, 0x00000008u, 0x00000a09u, 0x00000a08u, 0x00000386u, 0x0003003eu, 0x00000a06u, 0x00000a09u, 0x00050041u, 0x0000003eu, 0x00000a0bu, 0x000000ceu, 0x00000215u, 0x0004003du, 0x00000008u, 0x00000a0cu, 0x00000a0bu, 0x0003003eu, 0x00000a0au, 0x00000a0cu, 0x00050041u, 0x0000005cu, 0x00000a0eu, 0x000000ceu, 0x00000203u, 0x0004003du, 0x00000009u, 0x00000a0fu, 0x00000a0eu, 0x0003003eu, 0x00000a0du, 0x00000a0fu, 0x00050041u, 0x0000003eu, 0x00000a11u, 0x000000ceu, 0x00000218u, 0x0004003du, 0x00000008u, 0x00000a12u, 0x00000a11u, 0x0003003eu, 0x00000a10u, 0x00000a12u, 0x0004003du, 0x00000006u, 0x00000a1au, 0x000000cdu, 0x00080041u, 0x00000277u, 0x00000a1bu, 0x00000a19u, 0x00000203u, 0x00000a1au, 0x00000203u, 0x00000485u, 0x0004003du, 0x00000229u, 0x00000a1cu, 0x00000a1bu, 0x00040071u, 0x00000006u, 0x00000a1du, 0x00000a1cu, 0x0003003eu, 0x00000a13u, 0x00000a1du, 0x0004003du, 0x00000006u, 0x00000a21u, 0x000000cdu, 0x0003003eu, 0x00000a20u, 0x00000a21u, 0x00050039u, 0x0000000fu, 0x00000a22u, 0x00000012u, 0x00000a20u, 0x00050051u, 0x00000009u, 0x000078dbu, 0x00000a22u, 0x00000008u, 0x0003003eu, 0x000078d7u, 0x000078dbu, 0x00050051u, 0x00000009u, 0x000078dcu, 0x00000a22u, 0x00000009u, 0x0003003eu, 0x000078d8u, 0x000078dcu, 0x00050051u, 0x00000008u, 0x000078ddu, 0x00000a22u, 0x0000000bu, 0x0003003eu, 0x000078d9u, 0x000078ddu, 0x00050051u, 0x00000008u, 0x000078deu, 0x00000a22u, 0x0000000cu, 0x0003003eu, 0x000078dau, 0x000078deu, 0x0003003eu, 0x00000a25u, 0x00000a1du, 0x00050039u, 0x00000019u, 0x00000a27u, 0x0000001cu, 0x00000a25u, 0x00050051u, 0x00000009u, 0x000078e4u, 0x00000a27u, 0x00000000u, 0x0003003eu, 0x000078dfu, 0x000078e4u, 0x00050051u, 0x00000009u, 0x000078e5u, 0x00000a27u, 0x00000001u, 0x0003003eu, 0x000078e0u, 0x000078e5u, 0x00050051u, 0x00000006u, 0x000078e6u, 0x00000a27u, 0x00000002u, 0x0003003eu, 0x000078e1u, 0x000078e6u, 0x00050051u, 0x00000008u, 0x000078e7u, 0x00000a27u, 0x00000003u, 0x0003003eu, 0x000078e2u, 0x000078e7u, 0x00050051u, 0x00000008u, 0x000078e8u, 0x00000a27u, 0x00000004u, 0x0003003eu, 0x000078e3u, 0x000078e8u, 0x000500c7u, 0x00000006u, 0x00000a2bu, 0x000078e6u, 0x0000035bu, 0x000500abu, 0x0000005du, 0x00000a2cu, 0x00000a2bu, 0x00000374u, 0x0003003eu, 0x00000a28u, 0x00000a2cu, 0x000500c7u, 0x00000006u, 0x00000a30u, 0x000078e6u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00000a31u, 0x00000a30u, 0x00000374u, 0x0003003eu, 0x00000a2du, 0x00000a31u, 0x000500c7u, 0x00000006u, 0x00000a35u, 0x000078e6u, 0x000003c4u, 0x000500abu, 0x0000005du, 0x00000a36u, 0x00000a35u, 0x00000374u, 0x0003003eu, 0x00000a32u, 0x00000a36u, 0x000500c7u, 0x00000006u, 0x00000a3au, 0x000078e6u, 0x00000377u, 0x000500abu, 0x0000005du, 0x00000a3bu, 0x00000a3au, 0x00000374u, 0x0003003eu, 0x00000a37u, 0x00000a3bu, 0x000500c7u, 0x00000006u, 0x00000a40u, 0x000078e6u, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x00000a41u, 0x00000a40u, 0x00000374u, 0x0003003eu, 0x00000a3cu, 0x00000a41u, 0x000500c7u, 0x00000006u, 0x00000a46u, 0x000078e6u, 0x00000a45u, 0x000500abu, 0x0000005du, 0x00000a47u, 0x00000a46u, 0x00000374u, 0x0003003eu, 0x00000a42u, 0x00000a47u, 0x000500c7u, 0x00000006u, 0x00000a4cu, 0x000078e6u, 0x00000a4bu, 0x000500abu, 0x0000005du, 0x00000a4du, 0x00000a4cu, 0x00000374u, 0x0003003eu, 0x00000a48u, 0x00000a4du, 0x000500c7u, 0x00000006u, 0x00000a52u, 0x000078e6u, 0x00000a51u, 0x000500abu, 0x0000005du, 0x00000a53u, 0x00000a52u, 0x00000374u, 0x0003003eu, 0x00000a4eu, 0x00000a53u, 0x0003003eu, 0x00000a55u, 0x00000a3bu, 0x00050039u, 0x00000009u, 0x00000a57u, 0x000000bau, 0x00000a55u, 0x0003003eu, 0x00000a54u, 0x00000a57u, 0x00050041u, 0x0000003eu, 0x00000a59u, 0x00000a54u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00000a5au, 0x00000a59u, 0x000500c3u, 0x00000008u, 0x00000a5bu, 0x00000a5au, 0x0000021eu, 0x0003003eu, 0x00000a58u, 0x00000a5bu, 0x0003003eu, 0x00000a60u, 0x00000a05u, 0x0003003eu, 0x00000a62u, 0x000078ddu, 0x0003003eu, 0x00000a65u, 0x000078deu, 0x0004003du, 0x00000008u, 0x00000a69u, 0x00000705u, 0x0003003eu, 0x00000a68u, 0x00000a69u, 0x0004003du, 0x00000008u, 0x00000a6bu, 0x000006e7u, 0x0003003eu, 0x00000a6au, 0x00000a6bu, 0x0003003eu, 0x00000a6cu, 0x00000a0cu, 0x0003003eu, 0x00000a6eu, 0x00000a5bu, 0x0003003eu, 0x00000a70u, 0x00000a31u, 0x0003003eu, 0x00000a72u, 0x000078e8u, 0x0003003eu, 0x00000a75u, 0x00000a2cu, 0x0003003eu, 0x00000a77u, 0x00000a4du, 0x00120039u, 0x0000005du, 0x00000a7cu, 0x0000007eu, 0x00000a60u, 0x00000a62u, 0x00000a65u, 0x00000a68u, 0x00000a6au, 0x00000a6cu, 0x00000a6eu, 0x00000a70u, 0x00000a72u, 0x00000a75u, 0x00000a77u, 0x00000a79u, 0x00000a7au, 0x00000a7bu, 0x0004003du, 0x00000008u, 0x00000a7du, 0x00000a6cu, 0x0003003eu, 0x00000a0au, 0x00000a7du, 0x0004003du, 0x0000005du, 0x00000a7eu, 0x00000a79u, 0x0003003eu, 0x00000a5du, 0x00000a7eu, 0x0004003du, 0x0000005du, 0x00000a7fu, 0x00000a7au, 0x0003003eu, 0x00000a5eu, 0x00000a7fu, 0x0004003du, 0x0000005fu, 0x00000a80u, 0x00000a7bu, 0x0003003eu, 0x00000a5fu, 0x00000a80u, 0x0003003eu, 0x00000a5cu, 0x00000a7cu, 0x000300f7u, 0x00000a83u, 0x00000000u, 0x000400fau, 0x00000a7cu, 0x00000a82u, 0x00000a83u, 0x000200f8u, 0x00000a82u, 0x000400a8u, 0x0000005du, 0x00000a85u, 0x00000a4du, 0x000500abu, 0x0000005du, 0x00000a87u, 0x00000a7du, 0x00000203u, 0x000500a6u, 0x0000005du, 0x00000a88u, 0x00000a85u, 0x00000a87u, 0x000200f9u, 0x00000a83u, 0x000200f8u, 0x00000a83u, 0x000700f5u, 0x0000005du, 0x00000a89u, 0x00000a7cu, 0x000000d0u, 0x00000a88u, 0x00000a82u, 0x000300f7u, 0x00000a8bu, 0x00000000u, 0x000400fau, 0x00000a89u, 0x00000a8au, 0x00000a8bu, 0x000200f8u, 0x00000a8au, 0x0004003du, 0x00000009u, 0x00000a8eu, 0x00000a54u, 0x00080050u, 0x0000005au, 0x00000a94u, 0x00000a0fu, 0x00000a8eu, 0x000078dbu, 0x000078dcu, 0x00000a12u, 0x0003003eu, 0x000078e9u, 0x00000a0fu, 0x0003003eu, 0x000078eau, 0x00000a8eu, 0x0003003eu, 0x000078ebu, 0x000078dbu, 0x0003003eu, 0x000078ecu, 0x000078dcu, 0x0003003eu, 0x000078edu, 0x00000a12u, 0x0003003eu, 0x00000a95u, 0x000078e4u, 0x000300f7u, 0x00000a9au, 0x00000000u, 0x000400fau, 0x00000a47u, 0x00000a99u, 0x00000a9au, 0x000200f8u, 0x00000a99u, 0x0003003eu, 0x00000a9bu, 0x00000a94u, 0x0003003eu, 0x00000a9du, 0x000078e4u, 0x0003003eu, 0x00000a9fu, 0x00000a2cu, 0x0003003eu, 0x00000aa1u, 0x00000a7eu, 0x0003003eu, 0x00000aa3u, 0x00000a41u, 0x0003003eu, 0x00000aa5u, 0x00000a7fu, 0x0003003eu, 0x00000aa7u, 0x00000a80u, 0x0003003eu, 0x00000aa9u, 0x00000543u, 0x000c0039u, 0x0000003cu, 0x00000aaau, 0x0000006au, 0x00000a9bu, 0x00000a9du, 0x00000a9fu, 0x00000aa1u, 0x00000aa3u, 0x00000aa5u, 0x00000aa7u, 0x00000aa9u, 0x0009004fu, 0x00000009u, 0x00000aadu, 0x00000a0fu, 0x00000aaau, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000078e9u, 0x00000aadu, 0x0003003eu, 0x00000a95u, 0x000078e5u, 0x000200f9u, 0x00000a9au, 0x000200f8u, 0x00000a9au, 0x000700f5u, 0x00000009u, 0x0000ea5eu, 0x00000a0fu, 0x00000a8au, 0x00000aadu, 0x00000a99u, 0x00070050u, 0x000005f9u, 0x0000ef18u, 0x00000a47u, 0x00000a47u, 0x00000a47u, 0x00000a47u, 0x000600a9u, 0x00000009u, 0x0000ef19u, 0x0000ef18u, 0x000078e5u, 0x000078e4u, 0x00080050u, 0x0000005au, 0x000078feu, 0x0000ea5eu, 0x00000a8eu, 0x000078dbu, 0x000078dcu, 0x00000a12u, 0x0003003eu, 0x00000ab1u, 0x000078feu, 0x0003003eu, 0x00000ab3u, 0x0000ef19u, 0x0003003eu, 0x00000ab5u, 0x00000a2cu, 0x0003003eu, 0x00000ab7u, 0x00000a7eu, 0x0003003eu, 0x00000ab9u, 0x00000a41u, 0x0003003eu, 0x00000abbu, 0x00000a7fu, 0x0003003eu, 0x00000abdu, 0x00000a80u, 0x0003003eu, 0x00000abfu, 0x0000055eu, 0x000c0039u, 0x0000003cu, 0x00000ac0u, 0x0000006au, 0x00000ab1u, 0x00000ab3u, 0x00000ab5u, 0x00000ab7u, 0x00000ab9u, 0x00000abbu, 0x00000abdu, 0x00000abfu, 0x0003003eu, 0x00000ab0u, 0x00000ac0u, 0x000300f7u, 0x00000ac3u, 0x00000000u, 0x000400fau, 0x00000a53u, 0x00000ac2u, 0x00000ac3u, 0x000200f8u, 0x00000ac2u, 0x0003003eu, 0x00000ac4u, 0x00000ac0u, 0x0003003eu, 0x00000ac6u, 0x00000a09u, 0x00060039u, 0x0000003cu, 0x00000ac8u, 0x00000042u, 0x00000ac4u, 0x00000ac6u, 0x0003003eu, 0x00000ab0u, 0x00000ac8u, 0x000200f9u, 0x00000ac3u, 0x000200f8u, 0x00000ac3u, 0x000700f5u, 0x0000003cu, 0x0000ea73u, 0x00000ac0u, 0x00000a9au, 0x00000ac8u, 0x00000ac2u, 0x0003003eu, 0x00000acau, 0x00000a7du, 0x0003003eu, 0x00000accu, 0x00000a5bu, 0x0003003eu, 0x00000aceu, 0x00000a7eu, 0x0003003eu, 0x00000ad0u, 0x000078e7u, 0x00080039u, 0x00000008u, 0x00000ad3u, 0x0000008bu, 0x00000acau, 0x00000accu, 0x00000aceu, 0x00000ad0u, 0x0003003eu, 0x00000ac9u, 0x00000ad3u, 0x000500c4u, 0x00000008u, 0x00000ad6u, 0x00000ad3u, 0x0000021eu, 0x00050051u, 0x00000008u, 0x00000ad7u, 0x0000ea73u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ad8u, 0x0000ea73u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ad9u, 0x0000ea73u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000adau, 0x00000ad7u, 0x00000ad8u, 0x00000ad9u, 0x00000ad6u, 0x0003003eu, 0x00000adbu, 0x00000adau, 0x00050039u, 0x00000002u, 0x00000adcu, 0x000000beu, 0x00000adbu, 0x000300f7u, 0x00000adfu, 0x00000000u, 0x000400fau, 0x00000a36u, 0x00000adeu, 0x00000ae8u, 0x000200f8u, 0x00000adeu, 0x0003003eu, 0x00000ae0u, 0x00000a05u, 0x00050039u, 0x00000008u, 0x00000ae2u, 0x00000052u, 0x00000ae0u, 0x0003003eu, 0x00000705u, 0x00000ae2u, 0x0003003eu, 0x000006e7u, 0x000078deu, 0x0003003eu, 0x00000854u, 0x0000055eu, 0x000300f7u, 0x00000ae6u, 0x00000000u, 0x000400fau, 0x00000850u, 0x00000ae5u, 0x00000ae6u, 0x000200f8u, 0x00000ae5u, 0x00040039u, 0x00000002u, 0x00000ae7u, 0x00000094u, 0x000200f9u, 0x00000ae6u, 0x000200f8u, 0x00000ae6u, 0x000200f9u, 0x00000adfu, 0x000200f8u, 0x00000ae8u, 0x000300f7u, 0x00000aeau, 0x00000000u, 0x000400fau, 0x00000850u, 0x00000ae9u, 0x00000aeau, 0x000200f8u, 0x00000ae9u, 0x00040039u, 0x00000002u, 0x00000aebu, 0x00000092u, 0x000200f9u, 0x00000aeau, 0x000200f8u, 0x00000aeau, 0x000200f9u, 0x00000adfu, 0x000200f8u, 0x00000adfu, 0x000200f9u, 0x00000a8bu, 0x000200f8u, 0x00000a8bu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000d3u, 0x00000000u, 0x000000d1u, 0x00030037u, 0x0000005cu, 0x000000d2u, 0x000200f8u, 0x000000d4u, 0x0004003du, 0x00000009u, 0x00000aecu, 0x000000d2u, 0x00050082u, 0x00000009u, 0x00000aeeu, 0x00000aecu, 0x0000eee2u, 0x0003003eu, 0x000000d2u, 0x00000aeeu, 0x0004003du, 0x00000009u, 0x00000aefu, 0x000000d2u, 0x000600cau, 0x00000009u, 0x00000af0u, 0x00000aefu, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000000d2u, 0x00000af0u, 0x0004003du, 0x00000009u, 0x00000af1u, 0x000000d2u, 0x00050080u, 0x00000009u, 0x00000af3u, 0x00000af1u, 0x0000eee2u, 0x0003003eu, 0x000000d2u, 0x00000af3u, 0x0004003du, 0x00000009u, 0x00000af4u, 0x000000d2u, 0x0008000cu, 0x00000009u, 0x00000af6u, 0x00000001u, 0x0000002du, 0x00000af4u, 0x00000611u, 0x00000af5u, 0x00050051u, 0x00000008u, 0x00000af7u, 0x00000af6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000af8u, 0x00000af6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000af9u, 0x00000af6u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000afau, 0x00000af6u, 0x00000003u, 0x000200feu, 0x00000af6u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000d6u, 0x00000000u, 0x000000d1u, 0x00030037u, 0x0000005cu, 0x000000d5u, 0x000200f8u, 0x000000d7u, 0x0004003bu, 0x0000005cu, 0x00000afeu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000affu, 0x000000d5u, 0x0003003eu, 0x00000afeu, 0x00000affu, 0x00050039u, 0x00000009u, 0x00000b00u, 0x000000d3u, 0x00000afeu, 0x00050051u, 0x00000008u, 0x00000b01u, 0x00000b00u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000b02u, 0x00000b00u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000b03u, 0x00000b00u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000b04u, 0x00000b00u, 0x00000003u, 0x000200feu, 0x00000b00u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000d9u, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x000000d8u, 0x000200f8u, 0x000000dau, 0x0004003du, 0x00000008u, 0x00000b08u, 0x000000d8u, 0x00050082u, 0x00000008u, 0x00000b09u, 0x00000b08u, 0x00000623u, 0x000600cau, 0x00000008u, 0x00000b0au, 0x00000b09u, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000008u, 0x00000b0bu, 0x00000b0au, 0x00000623u, 0x0008000cu, 0x00000008u, 0x00000b0cu, 0x00000001u, 0x0000002du, 0x00000b0bu, 0x00000203u, 0x0000038bu, 0x000200feu, 0x00000b0cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000dcu, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000003eu, 0x000000dbu, 0x000200f8u, 0x000000ddu, 0x0004003du, 0x00000008u, 0x00000b10u, 0x000000dbu, 0x00050082u, 0x00000008u, 0x00000b11u, 0x00000b10u, 0x00000b0fu, 0x0003003eu, 0x000000dbu, 0x00000b11u, 0x0004003du, 0x00000008u, 0x00000b12u, 0x000000dbu, 0x000500c4u, 0x00000008u, 0x00000b13u, 0x00000b12u, 0x0000027du, 0x0003003eu, 0x000000dbu, 0x00000b13u, 0x0004003du, 0x00000008u, 0x00000b14u, 0x000000dbu, 0x000500c3u, 0x00000008u, 0x00000b15u, 0x00000b14u, 0x0000027du, 0x0003003eu, 0x000000dbu, 0x00000b15u, 0x0004003du, 0x00000008u, 0x00000b16u, 0x000000dbu, 0x00050080u, 0x00000008u, 0x00000b17u, 0x00000b16u, 0x00000b0fu, 0x0003003eu, 0x000000dbu, 0x00000b17u, 0x0004003du, 0x00000008u, 0x00000b18u, 0x000000dbu, 0x0008000cu, 0x00000008u, 0x00000b19u, 0x00000001u, 0x0000002du, 0x00000b18u, 0x00000203u, 0x0000041du, 0x000200feu, 0x00000b19u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000000e0u, 0x00000000u, 0x000000deu, 0x00030037u, 0x0000003eu, 0x000000dfu, 0x000200f8u, 0x000000e1u, 0x0004003bu, 0x0000003eu, 0x00000b1cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000b21u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000b27u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000b2au, 0x00000007u, 0x0004003bu, 0x00000becu, 0x00000bedu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000bf3u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000b1du, 0x000000dfu, 0x0006000cu, 0x00000008u, 0x00000b1eu, 0x00000001u, 0x0000004au, 0x00000b1du, 0x00050082u, 0x00000008u, 0x00000b1fu, 0x00000283u, 0x00000b1eu, 0x0007000cu, 0x00000008u, 0x00000b20u, 0x00000001u, 0x00000027u, 0x00000b1fu, 0x00000283u, 0x0003003eu, 0x00000b1cu, 0x00000b20u, 0x0004003du, 0x00000008u, 0x00000b22u, 0x000000dfu, 0x000500c4u, 0x00000008u, 0x00000b24u, 0x00000b22u, 0x00000b20u, 0x000500c7u, 0x00000008u, 0x00000b26u, 0x00000b24u, 0x00000b25u, 0x0003003eu, 0x00000b21u, 0x00000b26u, 0x000500c7u, 0x00000008u, 0x00000b29u, 0x00000b26u, 0x0000038bu, 0x0003003eu, 0x00000b27u, 0x00000b29u, 0x000500c3u, 0x00000008u, 0x00000bebu, 0x00000b26u, 0x0000025eu, 0x0003003eu, 0x00000bedu, 0x00000be9u, 0x00050041u, 0x00000060u, 0x00000beeu, 0x00000bedu, 0x00000bebu, 0x0004003du, 0x0000005fu, 0x00000befu, 0x00000beeu, 0x00050051u, 0x00000008u, 0x00000bf0u, 0x00000befu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000bf1u, 0x00000befu, 0x00000001u, 0x0003003eu, 0x00000b2au, 0x00000befu, 0x00050041u, 0x0000003eu, 0x00000bf4u, 0x00000b2au, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000bf5u, 0x00000bf4u, 0x00050084u, 0x00000008u, 0x00000bf7u, 0x00000bf5u, 0x00000b29u, 0x000500c3u, 0x00000008u, 0x00000bf8u, 0x00000bf7u, 0x0000026au, 0x00050041u, 0x0000003eu, 0x00000bf9u, 0x00000b2au, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000bfau, 0x00000bf9u, 0x00050080u, 0x00000008u, 0x00000bfbu, 0x00000bf8u, 0x00000bfau, 0x0003003eu, 0x00000bf3u, 0x00000bfbu, 0x00050050u, 0x0000005fu, 0x00000bfeu, 0x00000bfbu, 0x00000b20u, 0x000200feu, 0x00000bfeu, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000000e4u, 0x00000000u, 0x000000e2u, 0x00030037u, 0x0000003du, 0x000000e3u, 0x000200f8u, 0x000000e5u, 0x0004003du, 0x0000003cu, 0x00000c01u, 0x000000e3u, 0x0007004fu, 0x0000005fu, 0x00000c02u, 0x00000c01u, 0x00000c01u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000c02u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000000e9u, 0x00000000u, 0x000000e6u, 0x00030037u, 0x0000003du, 0x000000e7u, 0x00030037u, 0x0000005eu, 0x000000e8u, 0x000200f8u, 0x000000eau, 0x0004003bu, 0x0000003eu, 0x00000c05u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000c08u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c0eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c0fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c12u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c15u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c1cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c23u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000c2cu, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000c06u, 0x000000e7u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000c07u, 0x00000c06u, 0x0003003eu, 0x00000c05u, 0x00000c07u, 0x000500b3u, 0x0000005du, 0x00000c0au, 0x00000c07u, 0x00000203u, 0x0003003eu, 0x00000c08u, 0x00000c0au, 0x000500c7u, 0x00000008u, 0x00000c0du, 0x00000c07u, 0x00000c0bu, 0x0003003eu, 0x00000c05u, 0x00000c0du, 0x0003003eu, 0x00000c0fu, 0x00000c0du, 0x00050039u, 0x0000005fu, 0x00000c11u, 0x000000e0u, 0x00000c0fu, 0x0003003eu, 0x00000c0eu, 0x00000c11u, 0x00050041u, 0x0000003eu, 0x00000c13u, 0x00000c0eu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000c14u, 0x00000c13u, 0x0003003eu, 0x00000c12u, 0x00000c14u, 0x0004003du, 0x0000003cu, 0x00000c16u, 0x000000e7u, 0x0007004fu, 0x0000005fu, 0x00000c17u, 0x00000c16u, 0x00000c16u, 0x00000000u, 0x00000001u, 0x00050041u, 0x0000003eu, 0x00000c18u, 0x00000c0eu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000c19u, 0x00000c18u, 0x00050050u, 0x0000005fu, 0x00000c1au, 0x00000c19u, 0x00000c19u, 0x00050084u, 0x0000005fu, 0x00000c1bu, 0x00000c17u, 0x00000c1au, 0x0003003eu, 0x00000c15u, 0x00000c1bu, 0x000500c3u, 0x00000008u, 0x00000c20u, 0x00000c1eu, 0x00000c14u, 0x0004007eu, 0x00000008u, 0x00000c21u, 0x00000c20u, 0x000500c7u, 0x00000008u, 0x00000c22u, 0x00000c1du, 0x00000c21u, 0x0003003eu, 0x00000c1cu, 0x00000c22u, 0x0004003du, 0x0000005fu, 0x00000c24u, 0x00000c15u, 0x00050050u, 0x0000005fu, 0x00000c26u, 0x00000c22u, 0x00000c22u, 0x000500c7u, 0x0000005fu, 0x00000c27u, 0x00000c24u, 0x00000c26u, 0x0003003eu, 0x00000c23u, 0x00000c27u, 0x000500abu, 0x0000005du, 0x00000c29u, 0x00000c14u, 0x00000283u, 0x000300f7u, 0x00000c2bu, 0x00000000u, 0x000400fau, 0x00000c29u, 0x00000c2au, 0x00000c32u, 0x000200f8u, 0x00000c2au, 0x0004003du, 0x0000005fu, 0x00000c2du, 0x00000c15u, 0x00050082u, 0x00000008u, 0x00000c2fu, 0x0000027du, 0x00000c14u, 0x00050050u, 0x0000005fu, 0x00000c30u, 0x00000c2fu, 0x00000c2fu, 0x000500c3u, 0x0000005fu, 0x00000c31u, 0x00000c2du, 0x00000c30u, 0x0003003eu, 0x00000c15u, 0x00000c31u, 0x0003003eu, 0x00000c2cu, 0x00000c31u, 0x000200f9u, 0x00000c2bu, 0x000200f8u, 0x00000c32u, 0x0004003du, 0x0000005fu, 0x00000c33u, 0x00000c15u, 0x000500c4u, 0x0000005fu, 0x00000c35u, 0x00000c33u, 0x0000eee3u, 0x0003003eu, 0x00000c2cu, 0x00000c35u, 0x000200f9u, 0x00000c2bu, 0x000200f8u, 0x00000c2bu, 0x0004003du, 0x0000005fu, 0x00000c36u, 0x00000c23u, 0x000500abu, 0x00000879u, 0x00000c38u, 0x00000c36u, 0x00000c37u, 0x0004009au, 0x0000005du, 0x00000c39u, 0x00000c38u, 0x000300f7u, 0x00000c3bu, 0x00000000u, 0x000400fau, 0x00000c39u, 0x00000c3au, 0x00000c3bu, 0x000200f8u, 0x00000c3au, 0x00050041u, 0x0000003eu, 0x00000c3cu, 0x00000c23u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000c3du, 0x00000c3cu, 0x000500abu, 0x0000005du, 0x00000c3fu, 0x00000c3du, 0x00000c22u, 0x000300f7u, 0x00000c41u, 0x00000000u, 0x000400fau, 0x00000c3fu, 0x00000c40u, 0x00000c41u, 0x000200f8u, 0x00000c40u, 0x0004003du, 0x00000008u, 0x00000c43u, 0x00000c3cu, 0x000500abu, 0x0000005du, 0x00000c44u, 0x00000c43u, 0x00000203u, 0x000200f9u, 0x00000c41u, 0x000200f8u, 0x00000c41u, 0x000700f5u, 0x0000005du, 0x00000c45u, 0x00000c3fu, 0x00000c3au, 0x00000c44u, 0x00000c40u, 0x000300f7u, 0x00000c47u, 0x00000000u, 0x000400fau, 0x00000c45u, 0x00000c46u, 0x00000c47u, 0x000200f8u, 0x00000c46u, 0x00050041u, 0x0000003eu, 0x00000c48u, 0x00000c15u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00000c49u, 0x00000c48u, 0x000500c7u, 0x00000008u, 0x00000c4au, 0x00000c49u, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00000c4bu, 0x00000c4au, 0x00000203u, 0x000300f7u, 0x00000c4du, 0x00000000u, 0x000400fau, 0x00000c4bu, 0x00000c4cu, 0x00000c4fu, 0x000200f8u, 0x00000c4cu, 0x00050041u, 0x0000003eu, 0x00000c4eu, 0x00000c2cu, 0x00000374u, 0x0003003eu, 0x00000c4eu, 0x00000c0bu, 0x000200f9u, 0x00000c4du, 0x000200f8u, 0x00000c4fu, 0x00050041u, 0x0000003eu, 0x00000c51u, 0x00000c2cu, 0x00000374u, 0x0003003eu, 0x00000c51u, 0x00000c50u, 0x000200f9u, 0x00000c4du, 0x000200f8u, 0x00000c4du, 0x0003003eu, 0x000000e8u, 0x0000055eu, 0x000200f9u, 0x00000c47u, 0x000200f8u, 0x00000c47u, 0x00050041u, 0x0000003eu, 0x00000c52u, 0x00000c23u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000c53u, 0x00000c52u, 0x000500abu, 0x0000005du, 0x00000c55u, 0x00000c53u, 0x00000c22u, 0x000300f7u, 0x00000c57u, 0x00000000u, 0x000400fau, 0x00000c55u, 0x00000c56u, 0x00000c57u, 0x000200f8u, 0x00000c56u, 0x0004003du, 0x00000008u, 0x00000c59u, 0x00000c52u, 0x000500abu, 0x0000005du, 0x00000c5au, 0x00000c59u, 0x00000203u, 0x000200f9u, 0x00000c57u, 0x000200f8u, 0x00000c57u, 0x000700f5u, 0x0000005du, 0x00000c5bu, 0x00000c55u, 0x00000c47u, 0x00000c5au, 0x00000c56u, 0x000300f7u, 0x00000c5du, 0x00000000u, 0x000400fau, 0x00000c5bu, 0x00000c5cu, 0x00000c5du, 0x000200f8u, 0x00000c5cu, 0x00050041u, 0x0000003eu, 0x00000c5eu, 0x00000c15u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00000c5fu, 0x00000c5eu, 0x000500c7u, 0x00000008u, 0x00000c60u, 0x00000c5fu, 0x00000c1eu, 0x000500aau, 0x0000005du, 0x00000c61u, 0x00000c60u, 0x00000203u, 0x000300f7u, 0x00000c63u, 0x00000000u, 0x000400fau, 0x00000c61u, 0x00000c62u, 0x00000c65u, 0x000200f8u, 0x00000c62u, 0x00050041u, 0x0000003eu, 0x00000c64u, 0x00000c2cu, 0x00000485u, 0x0003003eu, 0x00000c64u, 0x00000c0bu, 0x000200f9u, 0x00000c63u, 0x000200f8u, 0x00000c65u, 0x00050041u, 0x0000003eu, 0x00000c66u, 0x00000c2cu, 0x00000485u, 0x0003003eu, 0x00000c66u, 0x00000c50u, 0x000200f9u, 0x00000c63u, 0x000200f8u, 0x00000c63u, 0x0003003eu, 0x000000e8u, 0x0000055eu, 0x000200f9u, 0x00000c5du, 0x000200f8u, 0x00000c5du, 0x000200f9u, 0x00000c3bu, 0x000200f8u, 0x00000c3bu, 0x000300f7u, 0x00000c69u, 0x00000000u, 0x000400fau, 0x00000c0au, 0x00000c68u, 0x00000c69u, 0x000200f8u, 0x00000c68u, 0x0003003eu, 0x00000c2cu, 0x00000c6au, 0x0003003eu, 0x000000e8u, 0x0000055eu, 0x000200f9u, 0x00000c69u, 0x000200f8u, 0x00000c69u, 0x0004003du, 0x0000005fu, 0x00000c6bu, 0x00000c2cu, 0x0008000cu, 0x0000005fu, 0x00000c6fu, 0x00000001u, 0x0000002du, 0x00000c6bu, 0x00000c6du, 0x00000c6eu, 0x000200feu, 0x00000c6fu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000f1u, 0x00000000u, 0x000000ebu, 0x00030037u, 0x0000005cu, 0x000000ecu, 0x00030037u, 0x0000005cu, 0x000000edu, 0x00030037u, 0x0000005cu, 0x000000eeu, 0x00030037u, 0x0000003eu, 0x000000efu, 0x00030037u, 0x0000003eu, 0x000000f0u, 0x000200f8u, 0x000000f2u, 0x0004003bu, 0x0000005cu, 0x00000c7du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c86u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c89u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000c8cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000cb4u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000c72u, 0x000000edu, 0x000500c7u, 0x00000009u, 0x00000c75u, 0x00000c72u, 0x0000eee0u, 0x00070050u, 0x00000009u, 0x00000c76u, 0x0000078du, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x00000009u, 0x00000c77u, 0x00000c75u, 0x00000c76u, 0x0004003du, 0x00000008u, 0x00000c78u, 0x000000efu, 0x00070050u, 0x00000009u, 0x00000c79u, 0x00000c78u, 0x00000c78u, 0x00000c78u, 0x00000c78u, 0x00050084u, 0x00000009u, 0x00000c7au, 0x00000c77u, 0x00000c79u, 0x0004003du, 0x00000009u, 0x00000c7bu, 0x000000ecu, 0x00050080u, 0x00000009u, 0x00000c7cu, 0x00000c7bu, 0x00000c7au, 0x0003003eu, 0x000000ecu, 0x00000c7cu, 0x0004003du, 0x00000009u, 0x00000c7eu, 0x000000ecu, 0x000500c3u, 0x00000009u, 0x00000c80u, 0x00000c7eu, 0x0000eee1u, 0x00050051u, 0x00000008u, 0x00000c81u, 0x00000c80u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c82u, 0x00000c80u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c83u, 0x00000c80u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000c84u, 0x00000c80u, 0x00000003u, 0x0003003eu, 0x00000c7du, 0x00000c80u, 0x0004003du, 0x00000008u, 0x00000c87u, 0x000000f0u, 0x0006000cu, 0x00000008u, 0x00000c88u, 0x00000001u, 0x00000049u, 0x00000c87u, 0x0003003eu, 0x00000c86u, 0x00000c88u, 0x000500c3u, 0x00000008u, 0x00000c8bu, 0x00000c88u, 0x00000212u, 0x0003003eu, 0x00000c89u, 0x00000c8bu, 0x000500c7u, 0x00000008u, 0x00000c8eu, 0x00000c88u, 0x00000212u, 0x000500c4u, 0x00000008u, 0x00000c8fu, 0x00000c8eu, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00000c91u, 0x00000c8bu, 0x00000212u, 0x00050080u, 0x00000008u, 0x00000c92u, 0x00000c8fu, 0x00000c91u, 0x0003003eu, 0x00000c8cu, 0x00000c92u, 0x00070050u, 0x00000009u, 0x00000c95u, 0x00000c93u, 0x00000c93u, 0x00000c93u, 0x00000c93u, 0x000500c4u, 0x00000009u, 0x00000c96u, 0x00000c80u, 0x00000c95u, 0x0003003eu, 0x00000c7du, 0x00000c96u, 0x0004003du, 0x00000009u, 0x00000c98u, 0x000000edu, 0x000500c3u, 0x00000009u, 0x00000c9au, 0x00000c98u, 0x0000eee1u, 0x00050051u, 0x00000008u, 0x00000c9bu, 0x00000c9au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c9cu, 0x00000c9au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c9du, 0x00000c9au, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000c9eu, 0x00000c9au, 0x00000003u, 0x00070050u, 0x00000009u, 0x00000ca0u, 0x00000c92u, 0x00000c92u, 0x00000c92u, 0x00000c92u, 0x00050084u, 0x00000009u, 0x00000ca1u, 0x00000ca0u, 0x00000c9au, 0x0004003du, 0x00000009u, 0x00000ca3u, 0x000000eeu, 0x000500c3u, 0x00000009u, 0x00000ca5u, 0x00000ca3u, 0x0000eee1u, 0x00050051u, 0x00000008u, 0x00000ca6u, 0x00000ca5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ca7u, 0x00000ca5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ca8u, 0x00000ca5u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000ca9u, 0x00000ca5u, 0x00000003u, 0x00070050u, 0x00000009u, 0x00000cabu, 0x00000c8bu, 0x00000c8bu, 0x00000c8bu, 0x00000c8bu, 0x00050084u, 0x00000009u, 0x00000cacu, 0x00000cabu, 0x00000ca5u, 0x00050080u, 0x00000009u, 0x00000cadu, 0x00000ca1u, 0x00000cacu, 0x00050080u, 0x00000009u, 0x00000cafu, 0x00000c96u, 0x00000cadu, 0x0003003eu, 0x00000c7du, 0x00000cafu, 0x00070050u, 0x00000009u, 0x00000cb2u, 0x00000cb0u, 0x00000cb0u, 0x00000cb0u, 0x00000cb0u, 0x000500c3u, 0x00000009u, 0x00000cb3u, 0x00000cafu, 0x00000cb2u, 0x0003003eu, 0x00000c7du, 0x00000cb3u, 0x0003003eu, 0x00000cb4u, 0x00000cb3u, 0x00050039u, 0x00000009u, 0x00000cb6u, 0x000000d6u, 0x00000cb4u, 0x000200feu, 0x00000cb6u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000fcu, 0x00000000u, 0x000000f4u, 0x00030037u, 0x000000f3u, 0x000000f5u, 0x00030037u, 0x0000005cu, 0x000000f6u, 0x00030037u, 0x0000003eu, 0x000000f7u, 0x00030037u, 0x0000005eu, 0x000000f8u, 0x00030037u, 0x0000005eu, 0x000000f9u, 0x00030037u, 0x00000060u, 0x000000fau, 0x00030037u, 0x0000003eu, 0x000000fbu, 0x000200f8u, 0x000000fdu, 0x0004003bu, 0x0000003eu, 0x00000cb9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000cbbu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000ccau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000cd7u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000ce0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000cf2u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000cf3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000cf4u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000cfcu, 0x00000007u, 0x0004003du, 0x0000005du, 0x00000cbau, 0x000000f9u, 0x000300f7u, 0x00000cbdu, 0x00000000u, 0x000400fau, 0x00000cbau, 0x00000cbcu, 0x00000cc2u, 0x000200f8u, 0x00000cbcu, 0x0004003du, 0x00000008u, 0x00000cbeu, 0x000000f7u, 0x00050041u, 0x0000003eu, 0x00000cbfu, 0x000000f5u, 0x0000021eu, 0x0004003du, 0x00000008u, 0x00000cc0u, 0x00000cbfu, 0x00050082u, 0x00000008u, 0x00000cc1u, 0x00000cbeu, 0x00000cc0u, 0x0003003eu, 0x00000cbbu, 0x00000cc1u, 0x000200f9u, 0x00000cbdu, 0x000200f8u, 0x00000cc2u, 0x00050041u, 0x0000003eu, 0x00000cc3u, 0x000000f5u, 0x00000221u, 0x0004003du, 0x00000008u, 0x00000cc4u, 0x00000cc3u, 0x0004003du, 0x00000008u, 0x00000cc5u, 0x000000f7u, 0x00050082u, 0x00000008u, 0x00000cc6u, 0x00000cc4u, 0x00000cc5u, 0x0003003eu, 0x00000cbbu, 0x00000cc6u, 0x000200f9u, 0x00000cbdu, 0x000200f8u, 0x00000cbdu, 0x000700f5u, 0x00000008u, 0x0000ea89u, 0x00000cc1u, 0x00000cbcu, 0x00000cc6u, 0x00000cc2u, 0x0003003eu, 0x00000cb9u, 0x0000ea89u, 0x000500c3u, 0x00000008u, 0x00000cc9u, 0x0000ea89u, 0x0000078du, 0x0003003eu, 0x00000cb9u, 0x00000cc9u, 0x00060041u, 0x00000cd0u, 0x00000cd1u, 0x00000ccfu, 0x00000203u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000cd2u, 0x00000cd1u, 0x000500c7u, 0x00000008u, 0x00000cd3u, 0x00000cc9u, 0x00000cd2u, 0x0003003eu, 0x00000ccau, 0x00000cd3u, 0x00050082u, 0x00000008u, 0x00000cd6u, 0x00000cc9u, 0x00000cd3u, 0x0003003eu, 0x000000fbu, 0x00000cd6u, 0x00060041u, 0x00000cd0u, 0x00000cd9u, 0x00000ccfu, 0x00000203u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000cdau, 0x00000cd9u, 0x000500c3u, 0x00000008u, 0x00000cdbu, 0x00000cc9u, 0x00000cdau, 0x0004003du, 0x0000005du, 0x00000cdcu, 0x000000f9u, 0x000600a9u, 0x00000008u, 0x00000cdeu, 0x00000cdcu, 0x00000212u, 0x00000cddu, 0x00050084u, 0x00000008u, 0x00000cdfu, 0x00000cdbu, 0x00000cdeu, 0x0003003eu, 0x00000cd7u, 0x00000cdfu, 0x00050041u, 0x0000005cu, 0x00000ce1u, 0x000000f5u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00000ce2u, 0x00000ce1u, 0x0008004fu, 0x0000003cu, 0x00000ce3u, 0x00000ce2u, 0x00000ce2u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000ce4u, 0x000000f6u, 0x0008004fu, 0x0000003cu, 0x00000ce5u, 0x00000ce4u, 0x00000ce4u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000ce7u, 0x00000ce5u, 0x0000eedeu, 0x00060050u, 0x0000003cu, 0x00000ce9u, 0x00000cdfu, 0x00000cdfu, 0x00000cdfu, 0x00050084u, 0x0000003cu, 0x00000ceau, 0x00000ce7u, 0x00000ce9u, 0x00050080u, 0x0000003cu, 0x00000cebu, 0x00000ce3u, 0x00000ceau, 0x0003003eu, 0x00000ce0u, 0x00000cebu, 0x0004003du, 0x0000005du, 0x00000cecu, 0x000000f8u, 0x000300f7u, 0x00000ceeu, 0x00000000u, 0x000400fau, 0x00000cecu, 0x00000cedu, 0x00000cf8u, 0x000200f8u, 0x00000cedu, 0x000500c3u, 0x0000003cu, 0x00000cf1u, 0x00000cebu, 0x0000eedfu, 0x0003003eu, 0x00000cf3u, 0x00000cf1u, 0x00060039u, 0x0000005fu, 0x00000cf6u, 0x000000e9u, 0x00000cf3u, 0x00000cf4u, 0x0004003du, 0x0000005du, 0x00000cf7u, 0x00000cf4u, 0x0003003eu, 0x00000cf2u, 0x00000cf7u, 0x0003003eu, 0x000000fau, 0x00000cf6u, 0x000200f9u, 0x00000ceeu, 0x000200f8u, 0x00000cf8u, 0x000500c3u, 0x0000003cu, 0x00000cfbu, 0x00000cebu, 0x0000eedfu, 0x0003003eu, 0x00000cfcu, 0x00000cfbu, 0x00050039u, 0x0000005fu, 0x00000cfdu, 0x000000e4u, 0x00000cfcu, 0x0003003eu, 0x000000fau, 0x00000cfdu, 0x000200f9u, 0x00000ceeu, 0x000200f8u, 0x00000ceeu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000005fu, 0x00000103u, 0x00000000u, 0x000000feu, 0x00030037u, 0x0000005cu, 0x000000ffu, 0x00030037u, 0x0000005cu, 0x00000100u, 0x00030037u, 0x0000003eu, 0x00000101u, 0x00030037u, 0x0000005eu, 0x00000102u, 0x000200f8u, 0x00000104u, 0x0004003bu, 0x0000003du, 0x00000cfeu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00000d11u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d12u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d13u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d15u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d1au, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000cffu, 0x000000ffu, 0x0008004fu, 0x0000003cu, 0x00000d00u, 0x00000cffu, 0x00000cffu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000d01u, 0x00000100u, 0x0008004fu, 0x0000003cu, 0x00000d02u, 0x00000d01u, 0x00000d01u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d04u, 0x00000d02u, 0x0000eedeu, 0x00060050u, 0x0000003cu, 0x00000d05u, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x0000003cu, 0x00000d06u, 0x00000d04u, 0x00000d05u, 0x0004003du, 0x00000008u, 0x00000d07u, 0x00000101u, 0x00060050u, 0x0000003cu, 0x00000d08u, 0x00000d07u, 0x00000d07u, 0x00000d07u, 0x00050084u, 0x0000003cu, 0x00000d09u, 0x00000d06u, 0x00000d08u, 0x00050080u, 0x0000003cu, 0x00000d0au, 0x00000d00u, 0x00000d09u, 0x0003003eu, 0x00000cfeu, 0x00000d0au, 0x000500c3u, 0x0000003cu, 0x00000d0du, 0x00000d0au, 0x0000eedfu, 0x0003003eu, 0x00000cfeu, 0x00000d0du, 0x0004003du, 0x0000005du, 0x00000d0eu, 0x00000102u, 0x000300f7u, 0x00000d10u, 0x00000000u, 0x000400fau, 0x00000d0eu, 0x00000d0fu, 0x00000d19u, 0x000200f8u, 0x00000d0fu, 0x0003003eu, 0x00000d13u, 0x00000d0du, 0x00060039u, 0x0000005fu, 0x00000d17u, 0x000000e9u, 0x00000d13u, 0x00000d15u, 0x0004003du, 0x0000005du, 0x00000d18u, 0x00000d15u, 0x0003003eu, 0x00000d12u, 0x00000d18u, 0x0003003eu, 0x00000d11u, 0x00000d17u, 0x000200f9u, 0x00000d10u, 0x000200f8u, 0x00000d19u, 0x0003003eu, 0x00000d1au, 0x00000d0du, 0x00050039u, 0x0000005fu, 0x00000d1cu, 0x000000e4u, 0x00000d1au, 0x0003003eu, 0x00000d11u, 0x00000d1cu, 0x000200f9u, 0x00000d10u, 0x000200f8u, 0x00000d10u, 0x000700f5u, 0x0000005fu, 0x0000ea8du, 0x00000d17u, 0x00000d0fu, 0x00000d1cu, 0x00000d19u, 0x000200feu, 0x0000ea8du, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000113u, 0x00000000u, 0x00000105u, 0x00030037u, 0x0000005cu, 0x00000106u, 0x00030037u, 0x0000005cu, 0x00000107u, 0x00030037u, 0x0000005cu, 0x00000108u, 0x00030037u, 0x0000003eu, 0x00000109u, 0x00030037u, 0x0000003eu, 0x0000010au, 0x00030037u, 0x0000005eu, 0x0000010bu, 0x00030037u, 0x0000005eu, 0x0000010cu, 0x00030037u, 0x0000003eu, 0x0000010du, 0x00030037u, 0x00000060u, 0x0000010eu, 0x00030037u, 0x00000060u, 0x0000010fu, 0x00030037u, 0x00000060u, 0x00000110u, 0x00030037u, 0x0000003eu, 0x00000111u, 0x00030037u, 0x0000005eu, 0x00000112u, 0x000200f8u, 0x00000114u, 0x0004003bu, 0x0000003du, 0x00000d20u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d30u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d3fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d5bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d5cu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d66u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d67u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d6eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000d6fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d77u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d7fu, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00000d84u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d96u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d99u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d9cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000d9fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000db9u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000d21u, 0x00000106u, 0x0008004fu, 0x0000003cu, 0x00000d22u, 0x00000d21u, 0x00000d21u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000d23u, 0x00000107u, 0x0008004fu, 0x0000003cu, 0x00000d24u, 0x00000d23u, 0x00000d23u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d26u, 0x00000d24u, 0x0000eedeu, 0x00060050u, 0x0000003cu, 0x00000d27u, 0x0000078du, 0x0000078du, 0x0000078du, 0x000500c3u, 0x0000003cu, 0x00000d28u, 0x00000d26u, 0x00000d27u, 0x0004003du, 0x00000008u, 0x00000d29u, 0x00000109u, 0x00060050u, 0x0000003cu, 0x00000d2au, 0x00000d29u, 0x00000d29u, 0x00000d29u, 0x00050084u, 0x0000003cu, 0x00000d2bu, 0x00000d28u, 0x00000d2au, 0x00050080u, 0x0000003cu, 0x00000d2cu, 0x00000d22u, 0x00000d2bu, 0x0003003eu, 0x00000d20u, 0x00000d2cu, 0x0004003du, 0x0000005du, 0x00000d2du, 0x0000010cu, 0x000300f7u, 0x00000d2fu, 0x00000000u, 0x000400fau, 0x00000d2du, 0x00000d2eu, 0x00000d2fu, 0x000200f8u, 0x00000d2eu, 0x0004003du, 0x00000008u, 0x00000d32u, 0x0000010du, 0x0004003du, 0x00000009u, 0x00000d33u, 0x00000107u, 0x0008004fu, 0x0000003cu, 0x00000d34u, 0x00000d33u, 0x00000d33u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d36u, 0x00000d34u, 0x0000eedeu, 0x000500c3u, 0x0000003cu, 0x00000d38u, 0x00000d36u, 0x00000d27u, 0x00060050u, 0x0000003cu, 0x00000d39u, 0x00000d32u, 0x00000d32u, 0x00000d32u, 0x00050084u, 0x0000003cu, 0x00000d3au, 0x00000d39u, 0x00000d38u, 0x00050080u, 0x0000003cu, 0x00000d3bu, 0x00000d2cu, 0x00000d3au, 0x0003003eu, 0x00000d30u, 0x00000d3bu, 0x000300f7u, 0x00000d3eu, 0x00000000u, 0x000400fau, 0x00000d3cu, 0x00000d3du, 0x00000d4cu, 0x000200f8u, 0x00000d3du, 0x0004003du, 0x00000008u, 0x00000d41u, 0x0000010du, 0x0006000cu, 0x00000008u, 0x00000d42u, 0x00000001u, 0x00000005u, 0x00000d41u, 0x0004003du, 0x00000009u, 0x00000d43u, 0x00000108u, 0x0008004fu, 0x0000003cu, 0x00000d44u, 0x00000d43u, 0x00000d43u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d46u, 0x00000d44u, 0x0000eee4u, 0x000500c3u, 0x0000003cu, 0x00000d48u, 0x00000d46u, 0x00000d27u, 0x00060050u, 0x0000003cu, 0x00000d49u, 0x00000d42u, 0x00000d42u, 0x00000d42u, 0x00050084u, 0x0000003cu, 0x00000d4au, 0x00000d49u, 0x00000d48u, 0x00050080u, 0x0000003cu, 0x00000d4bu, 0x00000d2cu, 0x00000d4au, 0x0003003eu, 0x00000d3fu, 0x00000d4bu, 0x000200f9u, 0x00000d3eu, 0x000200f8u, 0x00000d4cu, 0x0004003du, 0x00000009u, 0x00000d4eu, 0x00000108u, 0x0008004fu, 0x0000003cu, 0x00000d4fu, 0x00000d4eu, 0x00000d4eu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000003cu, 0x00000d51u, 0x00000d4fu, 0x0000eee4u, 0x000500c3u, 0x0000003cu, 0x00000d53u, 0x00000d51u, 0x00000d27u, 0x00050080u, 0x0000003cu, 0x00000d54u, 0x00000d2cu, 0x00000d53u, 0x0003003eu, 0x00000d3fu, 0x00000d54u, 0x000200f9u, 0x00000d3eu, 0x000200f8u, 0x00000d3eu, 0x000700f5u, 0x0000003cu, 0x0000ea94u, 0x00000d4bu, 0x00000d3du, 0x00000d54u, 0x00000d4cu, 0x000200f9u, 0x00000d2fu, 0x000200f8u, 0x00000d2fu, 0x000700f5u, 0x0000003cu, 0x0000ea93u, 0x0000ea91u, 0x00000114u, 0x0000ea94u, 0x00000d3eu, 0x000700f5u, 0x0000003cu, 0x0000ea90u, 0x0000ea91u, 0x00000114u, 0x00000d3bu, 0x00000d3eu, 0x0004003du, 0x0000005du, 0x00000d55u, 0x0000010bu, 0x000300f7u, 0x00000d57u, 0x00000000u, 0x000400fau, 0x00000d55u, 0x00000d56u, 0x00000d73u, 0x000200f8u, 0x00000d56u, 0x000500c3u, 0x0000003cu, 0x00000d5au, 0x00000d2cu, 0x0000eedfu, 0x0003003eu, 0x00000d5bu, 0x00000d5au, 0x0004003du, 0x0000005du, 0x00000d5du, 0x00000112u, 0x0003003eu, 0x00000d5cu, 0x00000d5du, 0x00060039u, 0x0000005fu, 0x00000d5eu, 0x000000e9u, 0x00000d5bu, 0x00000d5cu, 0x0004003du, 0x0000005du, 0x00000d5fu, 0x00000d5cu, 0x0003003eu, 0x00000112u, 0x00000d5fu, 0x0003003eu, 0x0000010eu, 0x00000d5eu, 0x0004003du, 0x0000005du, 0x00000d60u, 0x0000010cu, 0x000300f7u, 0x00000d62u, 0x00000000u, 0x000400fau, 0x00000d60u, 0x00000d61u, 0x00000d62u, 0x000200f8u, 0x00000d61u, 0x000500c3u, 0x0000003cu, 0x00000d65u, 0x0000ea90u, 0x0000eedfu, 0x0003003eu, 0x00000d66u, 0x00000d65u, 0x0004003du, 0x0000005du, 0x00000d68u, 0x00000112u, 0x0003003eu, 0x00000d67u, 0x00000d68u, 0x00060039u, 0x0000005fu, 0x00000d69u, 0x000000e9u, 0x00000d66u, 0x00000d67u, 0x0004003du, 0x0000005du, 0x00000d6au, 0x00000d67u, 0x0003003eu, 0x00000112u, 0x00000d6au, 0x0003003eu, 0x0000010fu, 0x00000d69u, 0x000500c3u, 0x0000003cu, 0x00000d6du, 0x0000ea93u, 0x0000eedfu, 0x0003003eu, 0x00000d6eu, 0x00000d6du, 0x0004003du, 0x0000005du, 0x00000d70u, 0x00000112u, 0x0003003eu, 0x00000d6fu, 0x00000d70u, 0x00060039u, 0x0000005fu, 0x00000d71u, 0x000000e9u, 0x00000d6eu, 0x00000d6fu, 0x0004003du, 0x0000005du, 0x00000d72u, 0x00000d6fu, 0x0003003eu, 0x00000112u, 0x00000d72u, 0x0003003eu, 0x00000110u, 0x00000d71u, 0x000200f9u, 0x00000d62u, 0x000200f8u, 0x00000d62u, 0x000200f9u, 0x00000d57u, 0x000200f8u, 0x00000d73u, 0x000500c3u, 0x0000003cu, 0x00000d76u, 0x00000d2cu, 0x0000eedfu, 0x0003003eu, 0x00000d77u, 0x00000d76u, 0x00050039u, 0x0000005fu, 0x00000d78u, 0x000000e4u, 0x00000d77u, 0x0003003eu, 0x0000010eu, 0x00000d78u, 0x0004003du, 0x0000005du, 0x00000d79u, 0x0000010cu, 0x000300f7u, 0x00000d7bu, 0x00000000u, 0x000400fau, 0x00000d79u, 0x00000d7au, 0x00000d7bu, 0x000200f8u, 0x00000d7au, 0x000500c3u, 0x0000003cu, 0x00000d7eu, 0x0000ea90u, 0x0000eedfu, 0x0003003eu, 0x00000d7fu, 0x00000d7eu, 0x00050039u, 0x0000005fu, 0x00000d80u, 0x000000e4u, 0x00000d7fu, 0x0003003eu, 0x0000010fu, 0x00000d80u, 0x000500c3u, 0x0000003cu, 0x00000d83u, 0x0000ea93u, 0x0000eedfu, 0x0003003eu, 0x00000d84u, 0x00000d83u, 0x00050039u, 0x0000005fu, 0x00000d85u, 0x000000e4u, 0x00000d84u, 0x0003003eu, 0x00000110u, 0x00000d85u, 0x000200f9u, 0x00000d7bu, 0x000200f8u, 0x00000d7bu, 0x000200f9u, 0x00000d57u, 0x000200f8u, 0x00000d57u, 0x00050041u, 0x0000003eu, 0x00000d86u, 0x00000106u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000d87u, 0x00000d86u, 0x00050041u, 0x0000003eu, 0x00000d88u, 0x00000107u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000d89u, 0x00000d88u, 0x0004003du, 0x00000008u, 0x00000d8au, 0x00000109u, 0x000500c3u, 0x00000008u, 0x00000d8bu, 0x00000d8au, 0x0000078du, 0x00050084u, 0x00000008u, 0x00000d8cu, 0x00000d89u, 0x00000d8bu, 0x00050080u, 0x00000008u, 0x00000d8du, 0x00000d87u, 0x00000d8cu, 0x0004003du, 0x00000008u, 0x00000d8fu, 0x00000d88u, 0x000500c3u, 0x00000008u, 0x00000d90u, 0x00000d8fu, 0x0000078du, 0x0004003du, 0x00000008u, 0x00000d91u, 0x00000109u, 0x000500c7u, 0x00000008u, 0x00000d93u, 0x00000d91u, 0x00000d92u, 0x00050084u, 0x00000008u, 0x00000d94u, 0x00000d90u, 0x00000d93u, 0x00050080u, 0x00000008u, 0x00000d95u, 0x00000d8du, 0x00000d94u, 0x0003003eu, 0x00000111u, 0x00000d95u, 0x0004003du, 0x00000008u, 0x00000d97u, 0x00000111u, 0x000500c3u, 0x00000008u, 0x00000d98u, 0x00000d97u, 0x0000026au, 0x0003003eu, 0x00000d96u, 0x00000d98u, 0x0004003du, 0x00000008u, 0x00000d9au, 0x0000010au, 0x0006000cu, 0x00000008u, 0x00000d9bu, 0x00000001u, 0x00000049u, 0x00000d9au, 0x0003003eu, 0x00000d99u, 0x00000d9bu, 0x000500c3u, 0x00000008u, 0x00000d9eu, 0x00000d9bu, 0x00000212u, 0x0003003eu, 0x00000d9cu, 0x00000d9eu, 0x000500c7u, 0x00000008u, 0x00000da1u, 0x00000d9bu, 0x00000212u, 0x000500c4u, 0x00000008u, 0x00000da2u, 0x00000da1u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00000da4u, 0x00000d9eu, 0x00000212u, 0x00050080u, 0x00000008u, 0x00000da5u, 0x00000da2u, 0x00000da4u, 0x0003003eu, 0x00000d9fu, 0x00000da5u, 0x000500c4u, 0x00000008u, 0x00000da8u, 0x00000d98u, 0x00000da6u, 0x0003003eu, 0x00000d96u, 0x00000da8u, 0x0004003du, 0x00000008u, 0x00000dabu, 0x00000d88u, 0x000500c3u, 0x00000008u, 0x00000dacu, 0x00000dabu, 0x0000026au, 0x00050084u, 0x00000008u, 0x00000dadu, 0x00000da5u, 0x00000dacu, 0x00050041u, 0x0000003eu, 0x00000dafu, 0x00000108u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00000db0u, 0x00000dafu, 0x000500c3u, 0x00000008u, 0x00000db1u, 0x00000db0u, 0x0000026au, 0x00050084u, 0x00000008u, 0x00000db2u, 0x00000d9eu, 0x00000db1u, 0x00050080u, 0x00000008u, 0x00000db3u, 0x00000dadu, 0x00000db2u, 0x00050080u, 0x00000008u, 0x00000db5u, 0x00000da8u, 0x00000db3u, 0x0003003eu, 0x00000d96u, 0x00000db5u, 0x000500c3u, 0x00000008u, 0x00000db8u, 0x00000db5u, 0x00000db6u, 0x0003003eu, 0x00000d96u, 0x00000db8u, 0x0003003eu, 0x00000db9u, 0x00000db8u, 0x00050039u, 0x00000008u, 0x00000dbbu, 0x000000dcu, 0x00000db9u, 0x0003003eu, 0x00000111u, 0x00000dbbu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000119u, 0x00000000u, 0x00000116u, 0x00030037u, 0x00000115u, 0x00000117u, 0x00030037u, 0x0000003eu, 0x00000118u, 0x000200f8u, 0x0000011au, 0x0004003bu, 0x0000003eu, 0x00000dc1u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000dbcu, 0x00000117u, 0x00000264u, 0x0004003du, 0x00000008u, 0x00000dbdu, 0x00000dbcu, 0x000500abu, 0x0000005du, 0x00000dbeu, 0x00000dbdu, 0x00000203u, 0x000300f7u, 0x00000dc0u, 0x00000000u, 0x000400fau, 0x00000dbeu, 0x00000dbfu, 0x00000dc0u, 0x000200f8u, 0x00000dbfu, 0x0004003du, 0x00000008u, 0x00000dc3u, 0x00000dbcu, 0x000500c4u, 0x00000008u, 0x00000dc4u, 0x00000212u, 0x00000dc3u, 0x0003003eu, 0x00000dc1u, 0x00000dc4u, 0x00050041u, 0x0000003eu, 0x00000dc5u, 0x00000117u, 0x0000027du, 0x0004003du, 0x00000008u, 0x00000dc6u, 0x00000dc5u, 0x000500c7u, 0x00000008u, 0x00000dc7u, 0x00000dc6u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00000dc8u, 0x00000dc7u, 0x00000203u, 0x000300f7u, 0x00000dcau, 0x00000000u, 0x000400fau, 0x00000dc8u, 0x00000dc9u, 0x00000dcau, 0x000200f8u, 0x00000dc9u, 0x0004003du, 0x00000008u, 0x00000dcbu, 0x00000118u, 0x000500c7u, 0x00000008u, 0x00000dcdu, 0x00000dcbu, 0x00000dc4u, 0x00050082u, 0x00000008u, 0x00000dceu, 0x00000dcdu, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00000dcfu, 0x00000001u, 0x0000002au, 0x00000dceu, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000dd0u, 0x00000118u, 0x000500c6u, 0x00000008u, 0x00000dd1u, 0x00000dd0u, 0x00000dcfu, 0x0003003eu, 0x00000118u, 0x00000dd1u, 0x000200f9u, 0x00000dcau, 0x000200f8u, 0x00000dcau, 0x00050082u, 0x00000008u, 0x00000dd3u, 0x00000dc4u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000dd4u, 0x00000118u, 0x000500c7u, 0x00000008u, 0x00000dd5u, 0x00000dd4u, 0x00000dd3u, 0x0003003eu, 0x00000118u, 0x00000dd5u, 0x000200f9u, 0x00000dc0u, 0x000200f8u, 0x00000dc0u, 0x0004003du, 0x00000008u, 0x00000dd6u, 0x00000118u, 0x000200feu, 0x00000dd6u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x0000011eu, 0x00000000u, 0x0000011bu, 0x00030037u, 0x00000115u, 0x0000011cu, 0x00030037u, 0x0000003eu, 0x0000011du, 0x000200f8u, 0x0000011fu, 0x0004003bu, 0x00000060u, 0x00000dd9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00000de3u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000ddau, 0x0000011du, 0x00050050u, 0x0000005fu, 0x00000ddcu, 0x00000ddau, 0x00000ddau, 0x00050080u, 0x0000005fu, 0x00000dddu, 0x00000ddcu, 0x00000ddbu, 0x0003003eu, 0x00000dd9u, 0x00000dddu, 0x00050041u, 0x0000003eu, 0x00000ddeu, 0x0000011cu, 0x00000264u, 0x0004003du, 0x00000008u, 0x00000ddfu, 0x00000ddeu, 0x000500abu, 0x0000005du, 0x00000de0u, 0x00000ddfu, 0x00000203u, 0x000300f7u, 0x00000de2u, 0x00000000u, 0x000400fau, 0x00000de0u, 0x00000de1u, 0x00000de2u, 0x000200f8u, 0x00000de1u, 0x0004003du, 0x00000008u, 0x00000de5u, 0x00000ddeu, 0x000500c4u, 0x00000008u, 0x00000de6u, 0x00000212u, 0x00000de5u, 0x0003003eu, 0x00000de3u, 0x00000de6u, 0x00050041u, 0x0000003eu, 0x00000de7u, 0x0000011cu, 0x0000027du, 0x0004003du, 0x00000008u, 0x00000de8u, 0x00000de7u, 0x000500c7u, 0x00000008u, 0x00000de9u, 0x00000de8u, 0x00000215u, 0x000500abu, 0x0000005du, 0x00000deau, 0x00000de9u, 0x00000203u, 0x000300f7u, 0x00000decu, 0x00000000u, 0x000400fau, 0x00000deau, 0x00000debu, 0x00000decu, 0x000200f8u, 0x00000debu, 0x00050050u, 0x0000005fu, 0x00000defu, 0x00000de6u, 0x00000de6u, 0x000500c7u, 0x0000005fu, 0x00000df0u, 0x00000dddu, 0x00000defu, 0x00050082u, 0x0000005fu, 0x00000df2u, 0x00000df0u, 0x0000eee3u, 0x0007000cu, 0x0000005fu, 0x00000df4u, 0x00000001u, 0x0000002au, 0x00000df2u, 0x00000c37u, 0x000500c6u, 0x0000005fu, 0x00000df6u, 0x00000dddu, 0x00000df4u, 0x0003003eu, 0x00000dd9u, 0x00000df6u, 0x000200f9u, 0x00000decu, 0x000200f8u, 0x00000decu, 0x000700f5u, 0x0000005fu, 0x0000ea97u, 0x00000dddu, 0x00000de1u, 0x00000df6u, 0x00000debu, 0x00050082u, 0x00000008u, 0x00000df8u, 0x00000de6u, 0x00000212u, 0x00050050u, 0x0000005fu, 0x00000dfau, 0x00000df8u, 0x00000df8u, 0x000500c7u, 0x0000005fu, 0x00000dfbu, 0x0000ea97u, 0x00000dfau, 0x0003003eu, 0x00000dd9u, 0x00000dfbu, 0x000200f9u, 0x00000de2u, 0x000200f8u, 0x00000de2u, 0x000700f5u, 0x0000005fu, 0x0000ea98u, 0x00000dddu, 0x0000011fu, 0x00000dfbu, 0x00000decu, 0x000200feu, 0x0000ea98u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000122u, 0x00000000u, 0x00000116u, 0x00030037u, 0x00000115u, 0x00000120u, 0x00030037u, 0x0000003eu, 0x00000121u, 0x000200f8u, 0x00000123u, 0x0004003bu, 0x0000003eu, 0x00000e04u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00000dffu, 0x00000120u, 0x0000026fu, 0x0004003du, 0x00000008u, 0x00000e00u, 0x00000dffu, 0x000500abu, 0x0000005du, 0x00000e01u, 0x00000e00u, 0x00000203u, 0x000300f7u, 0x00000e03u, 0x00000000u, 0x000400fau, 0x00000e01u, 0x00000e02u, 0x00000e03u, 0x000200f8u, 0x00000e02u, 0x0004003du, 0x00000008u, 0x00000e06u, 0x00000dffu, 0x000500c4u, 0x00000008u, 0x00000e07u, 0x00000212u, 0x00000e06u, 0x0003003eu, 0x00000e04u, 0x00000e07u, 0x00050041u, 0x0000003eu, 0x00000e08u, 0x00000120u, 0x0000027du, 0x0004003du, 0x00000008u, 0x00000e09u, 0x00000e08u, 0x000500c7u, 0x00000008u, 0x00000e0au, 0x00000e09u, 0x0000025eu, 0x000500abu, 0x0000005du, 0x00000e0bu, 0x00000e0au, 0x00000203u, 0x000300f7u, 0x00000e0du, 0x00000000u, 0x000400fau, 0x00000e0bu, 0x00000e0cu, 0x00000e0du, 0x000200f8u, 0x00000e0cu, 0x0004003du, 0x00000008u, 0x00000e0eu, 0x00000121u, 0x000500c7u, 0x00000008u, 0x00000e10u, 0x00000e0eu, 0x00000e07u, 0x00050082u, 0x00000008u, 0x00000e11u, 0x00000e10u, 0x00000212u, 0x0007000cu, 0x00000008u, 0x00000e12u, 0x00000001u, 0x0000002au, 0x00000e11u, 0x00000203u, 0x0004003du, 0x00000008u, 0x00000e13u, 0x00000121u, 0x000500c6u, 0x00000008u, 0x00000e14u, 0x00000e13u, 0x00000e12u, 0x0003003eu, 0x00000121u, 0x00000e14u, 0x000200f9u, 0x00000e0du, 0x000200f8u, 0x00000e0du, 0x00050082u, 0x00000008u, 0x00000e16u, 0x00000e07u, 0x00000212u, 0x0004003du, 0x00000008u, 0x00000e17u, 0x00000121u, 0x000500c7u, 0x00000008u, 0x00000e18u, 0x00000e17u, 0x00000e16u, 0x0003003eu, 0x00000121u, 0x00000e18u, 0x000200f9u, 0x00000e03u, 0x000200f8u, 0x00000e03u, 0x0004003du, 0x00000008u, 0x00000e19u, 0x00000121u, 0x000200feu, 0x00000e19u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000126u, 0x00000000u, 0x00000124u, 0x00030037u, 0x00000007u, 0x00000125u, 0x000200f8u, 0x00000127u, 0x0004003bu, 0x00000354u, 0x00000e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e2cu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e1du, 0x00000125u, 0x00060050u, 0x00000353u, 0x00000e1eu, 0x00000e1du, 0x00000e1du, 0x00000e1du, 0x000500c2u, 0x00000353u, 0x00000e21u, 0x00000e1eu, 0x00000e20u, 0x000500c7u, 0x00000353u, 0x00000e24u, 0x00000e21u, 0x0000eee9u, 0x0003003eu, 0x00000e1cu, 0x00000e24u, 0x000500c4u, 0x00000353u, 0x00000e27u, 0x00000e24u, 0x0000eeeau, 0x000500c2u, 0x00000353u, 0x00000e2au, 0x00000e24u, 0x0000eeebu, 0x000500c5u, 0x00000353u, 0x00000e2bu, 0x00000e27u, 0x00000e2au, 0x0003003eu, 0x00000e1cu, 0x00000e2bu, 0x0004003du, 0x00000006u, 0x00000e2du, 0x00000125u, 0x000500c7u, 0x00000006u, 0x00000e2eu, 0x00000e2du, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000e2fu, 0x00000e2eu, 0x000006c2u, 0x0003003eu, 0x00000e2cu, 0x00000e2fu, 0x0004007cu, 0x0000003cu, 0x00000e31u, 0x00000e2bu, 0x0004007cu, 0x00000008u, 0x00000e33u, 0x00000e2fu, 0x00050051u, 0x00000008u, 0x00000e34u, 0x00000e31u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000e35u, 0x00000e31u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000e36u, 0x00000e31u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000e37u, 0x00000e34u, 0x00000e35u, 0x00000e36u, 0x00000e33u, 0x000200feu, 0x00000e37u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000129u, 0x00000000u, 0x00000124u, 0x00030037u, 0x00000007u, 0x00000128u, 0x000200f8u, 0x0000012au, 0x0004003bu, 0x00000007u, 0x00000e3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e3du, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e3bu, 0x00000128u, 0x000500c2u, 0x00000006u, 0x00000e3cu, 0x00000e3bu, 0x0000025eu, 0x0003003eu, 0x00000e3au, 0x00000e3cu, 0x0004003du, 0x00000006u, 0x00000e3eu, 0x00000128u, 0x000500c7u, 0x00000006u, 0x00000e3fu, 0x00000e3eu, 0x000006c2u, 0x0003003eu, 0x00000e3du, 0x00000e3fu, 0x0004007cu, 0x00000008u, 0x00000e41u, 0x00000e3cu, 0x0004007cu, 0x00000008u, 0x00000e47u, 0x00000e3fu, 0x00070050u, 0x00000009u, 0x00000e48u, 0x00000e41u, 0x00000e41u, 0x00000e41u, 0x00000e47u, 0x000200feu, 0x00000e48u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000012fu, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x0000012cu, 0x00030037u, 0x00000007u, 0x0000012du, 0x00030037u, 0x000000a3u, 0x0000012eu, 0x000200f8u, 0x00000130u, 0x0004003bu, 0x00000007u, 0x00000e4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e6cu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e4cu, 0x0000012cu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000e4du, 0x00000e4cu, 0x00050041u, 0x00000007u, 0x00000e4eu, 0x0000012cu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000e4fu, 0x00000e4eu, 0x00050041u, 0x00000007u, 0x00000e50u, 0x0000012eu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000e51u, 0x00000e50u, 0x00050084u, 0x00000006u, 0x00000e52u, 0x00000e4fu, 0x00000e51u, 0x00050080u, 0x00000006u, 0x00000e53u, 0x00000e4du, 0x00000e52u, 0x0003003eu, 0x00000e4bu, 0x00000e53u, 0x00050041u, 0x00000007u, 0x00000e54u, 0x0000012eu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000e55u, 0x00000e54u, 0x000500c2u, 0x00000006u, 0x00000e56u, 0x00000e55u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000e58u, 0x00000e53u, 0x00000e56u, 0x0003003eu, 0x00000e4bu, 0x00000e58u, 0x000500c7u, 0x00000006u, 0x00000e5bu, 0x00000e58u, 0x00000e59u, 0x0003003eu, 0x00000e4bu, 0x00000e5bu, 0x0004003du, 0x00000006u, 0x00000e5eu, 0x00000e54u, 0x000400c8u, 0x00000006u, 0x00000e5fu, 0x00000e5eu, 0x000500c7u, 0x00000006u, 0x00000e60u, 0x00000e5fu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000e61u, 0x00000e60u, 0x00000701u, 0x0003003eu, 0x00000e5cu, 0x00000e61u, 0x0003003eu, 0x00000e62u, 0x00000e5bu, 0x0004003du, 0x00000006u, 0x00000e65u, 0x00000e50u, 0x000500c7u, 0x00000006u, 0x00000e66u, 0x00000e65u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000e67u, 0x00000e66u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000e69u, 0x00000e5bu, 0x00000e67u, 0x0003003eu, 0x00000e62u, 0x00000e69u, 0x000500c6u, 0x00000006u, 0x00000e6bu, 0x00000e69u, 0x0000048bu, 0x0003003eu, 0x00000e62u, 0x00000e6bu, 0x0004003du, 0x00000006u, 0x00000e74u, 0x0000012du, 0x00080041u, 0x00000277u, 0x00000e76u, 0x00000e73u, 0x00000203u, 0x00000e74u, 0x00000203u, 0x00000e6bu, 0x0004003du, 0x00000229u, 0x00000e77u, 0x00000e76u, 0x00040071u, 0x00000006u, 0x00000e78u, 0x00000e77u, 0x0003003eu, 0x00000e6cu, 0x00000e78u, 0x000500c2u, 0x00000006u, 0x00000e7bu, 0x00000e78u, 0x00000e61u, 0x000500c7u, 0x00000006u, 0x00000e7du, 0x00000e7bu, 0x00000e7cu, 0x0003003eu, 0x00000e6cu, 0x00000e7du, 0x000500c4u, 0x00000006u, 0x00000e7fu, 0x00000e7du, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00000e81u, 0x00000e7du, 0x00000e7fu, 0x0003003eu, 0x00000e6cu, 0x00000e81u, 0x0004007cu, 0x00000008u, 0x00000e83u, 0x00000e81u, 0x00070050u, 0x00000009u, 0x00000e84u, 0x00000e83u, 0x00000e83u, 0x00000e83u, 0x00000e83u, 0x000200feu, 0x00000e84u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000134u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000131u, 0x00030037u, 0x00000007u, 0x00000132u, 0x00030037u, 0x000000a3u, 0x00000133u, 0x000200f8u, 0x00000135u, 0x0004003bu, 0x00000007u, 0x00000e87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ea7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eb1u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e88u, 0x00000131u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000e89u, 0x00000e88u, 0x00050041u, 0x00000007u, 0x00000e8au, 0x00000131u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000e8bu, 0x00000e8au, 0x00050041u, 0x00000007u, 0x00000e8cu, 0x00000133u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000e8du, 0x00000e8cu, 0x00050084u, 0x00000006u, 0x00000e8eu, 0x00000e8bu, 0x00000e8du, 0x00050080u, 0x00000006u, 0x00000e8fu, 0x00000e89u, 0x00000e8eu, 0x0003003eu, 0x00000e87u, 0x00000e8fu, 0x00050041u, 0x00000007u, 0x00000e90u, 0x00000133u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000e91u, 0x00000e90u, 0x000500c2u, 0x00000006u, 0x00000e92u, 0x00000e91u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000e94u, 0x00000e8fu, 0x00000e92u, 0x0003003eu, 0x00000e87u, 0x00000e94u, 0x000500c7u, 0x00000006u, 0x00000e96u, 0x00000e94u, 0x00000e59u, 0x0003003eu, 0x00000e87u, 0x00000e96u, 0x0004003du, 0x00000006u, 0x00000e99u, 0x00000e90u, 0x000400c8u, 0x00000006u, 0x00000e9au, 0x00000e99u, 0x000500c7u, 0x00000006u, 0x00000e9bu, 0x00000e9au, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000e9cu, 0x00000e9bu, 0x00000701u, 0x0003003eu, 0x00000e97u, 0x00000e9cu, 0x0003003eu, 0x00000e9du, 0x00000e96u, 0x0004003du, 0x00000006u, 0x00000ea0u, 0x00000e8cu, 0x000500c7u, 0x00000006u, 0x00000ea1u, 0x00000ea0u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000ea2u, 0x00000ea1u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000ea4u, 0x00000e96u, 0x00000ea2u, 0x0003003eu, 0x00000e9du, 0x00000ea4u, 0x000500c6u, 0x00000006u, 0x00000ea6u, 0x00000ea4u, 0x0000048bu, 0x0003003eu, 0x00000e9du, 0x00000ea6u, 0x0004003du, 0x00000006u, 0x00000ea8u, 0x00000132u, 0x00080041u, 0x00000277u, 0x00000eaau, 0x00000e73u, 0x00000203u, 0x00000ea8u, 0x00000203u, 0x00000ea6u, 0x0004003du, 0x00000229u, 0x00000eabu, 0x00000eaau, 0x00040071u, 0x00000006u, 0x00000eacu, 0x00000eabu, 0x0003003eu, 0x00000ea7u, 0x00000eacu, 0x000500c2u, 0x00000006u, 0x00000eafu, 0x00000eacu, 0x00000e9cu, 0x000500c7u, 0x00000006u, 0x00000eb0u, 0x00000eafu, 0x00000e7cu, 0x0003003eu, 0x00000ea7u, 0x00000eb0u, 0x000500c7u, 0x00000006u, 0x00000eb4u, 0x00000eb0u, 0x00000eb3u, 0x0003003eu, 0x00000eb1u, 0x00000eb4u, 0x000500c4u, 0x00000006u, 0x00000eb6u, 0x00000eb4u, 0x0000021bu, 0x000500c4u, 0x00000006u, 0x00000eb8u, 0x00000eb4u, 0x00000212u, 0x000500c5u, 0x00000006u, 0x00000eb9u, 0x00000eb6u, 0x00000eb8u, 0x000500c2u, 0x00000006u, 0x00000ebbu, 0x00000eb4u, 0x00000215u, 0x000500c5u, 0x00000006u, 0x00000ebcu, 0x00000eb9u, 0x00000ebbu, 0x0003003eu, 0x00000eb1u, 0x00000ebcu, 0x0004007cu, 0x00000008u, 0x00000ebeu, 0x00000ebcu, 0x000500c7u, 0x00000006u, 0x00000ec4u, 0x00000eb0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000ec5u, 0x00000ec4u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00000ec6u, 0x00000ec5u, 0x00070050u, 0x00000009u, 0x00000ec7u, 0x00000ebeu, 0x00000ebeu, 0x00000ebeu, 0x00000ec6u, 0x000200feu, 0x00000ec7u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000013bu, 0x00000000u, 0x00000136u, 0x00030037u, 0x00000115u, 0x00000137u, 0x00030037u, 0x00000007u, 0x00000138u, 0x00030037u, 0x000000a3u, 0x00000139u, 0x00030037u, 0x00000007u, 0x0000013au, 0x000200f8u, 0x0000013cu, 0x0004003bu, 0x00000007u, 0x00000ecau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000edau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ee0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eeau, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000ecbu, 0x00000137u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000eccu, 0x00000ecbu, 0x00050041u, 0x00000007u, 0x00000ecdu, 0x00000137u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000eceu, 0x00000ecdu, 0x00050041u, 0x00000007u, 0x00000ecfu, 0x00000139u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000ed0u, 0x00000ecfu, 0x00050084u, 0x00000006u, 0x00000ed1u, 0x00000eceu, 0x00000ed0u, 0x00050080u, 0x00000006u, 0x00000ed2u, 0x00000eccu, 0x00000ed1u, 0x0003003eu, 0x00000ecau, 0x00000ed2u, 0x00050041u, 0x00000007u, 0x00000ed3u, 0x00000139u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000ed4u, 0x00000ed3u, 0x000500c2u, 0x00000006u, 0x00000ed5u, 0x00000ed4u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000ed7u, 0x00000ed2u, 0x00000ed5u, 0x0003003eu, 0x00000ecau, 0x00000ed7u, 0x000500c7u, 0x00000006u, 0x00000ed9u, 0x00000ed7u, 0x00000e59u, 0x0003003eu, 0x00000ecau, 0x00000ed9u, 0x0004003du, 0x00000006u, 0x00000edcu, 0x00000ed3u, 0x000400c8u, 0x00000006u, 0x00000eddu, 0x00000edcu, 0x000500c7u, 0x00000006u, 0x00000edeu, 0x00000eddu, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000edfu, 0x00000edeu, 0x00000701u, 0x0003003eu, 0x00000edau, 0x00000edfu, 0x0003003eu, 0x00000ee0u, 0x00000ed9u, 0x0004003du, 0x00000006u, 0x00000ee3u, 0x00000ecfu, 0x000500c7u, 0x00000006u, 0x00000ee4u, 0x00000ee3u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000ee5u, 0x00000ee4u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000ee7u, 0x00000ed9u, 0x00000ee5u, 0x0003003eu, 0x00000ee0u, 0x00000ee7u, 0x000500c6u, 0x00000006u, 0x00000ee9u, 0x00000ee7u, 0x0000048bu, 0x0003003eu, 0x00000ee0u, 0x00000ee9u, 0x0004003du, 0x00000006u, 0x00000eebu, 0x00000138u, 0x00080041u, 0x00000277u, 0x00000eedu, 0x00000e73u, 0x00000203u, 0x00000eebu, 0x00000203u, 0x00000ee9u, 0x0004003du, 0x00000229u, 0x00000eeeu, 0x00000eedu, 0x00040071u, 0x00000006u, 0x00000eefu, 0x00000eeeu, 0x0003003eu, 0x00000eeau, 0x00000eefu, 0x000500c2u, 0x00000006u, 0x00000ef2u, 0x00000eefu, 0x00000edfu, 0x000500c7u, 0x00000006u, 0x00000ef3u, 0x00000ef2u, 0x00000e7cu, 0x0003003eu, 0x00000eeau, 0x00000ef3u, 0x0004003du, 0x00000006u, 0x00000ef4u, 0x0000013au, 0x000500c4u, 0x00000006u, 0x00000ef5u, 0x00000ef4u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00000ef7u, 0x00000ef3u, 0x00000ef5u, 0x0003003eu, 0x00000eeau, 0x00000ef7u, 0x0004007cu, 0x00000008u, 0x00000ef9u, 0x00000ef7u, 0x00070050u, 0x00000009u, 0x00000efau, 0x00000ef9u, 0x00000ef9u, 0x00000ef9u, 0x00000ef9u, 0x000200feu, 0x00000efau, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000145u, 0x00000000u, 0x0000013du, 0x00030037u, 0x00000115u, 0x0000013eu, 0x00030037u, 0x00000007u, 0x0000013fu, 0x00030037u, 0x000000a3u, 0x00000140u, 0x00030037u, 0x00000007u, 0x00000141u, 0x00030037u, 0x00000007u, 0x00000142u, 0x00030037u, 0x00000007u, 0x00000143u, 0x00030037u, 0x0000005eu, 0x00000144u, 0x000200f8u, 0x00000146u, 0x0004003bu, 0x00000007u, 0x00000efdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f2cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000f43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f4au, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000efeu, 0x0000013eu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000effu, 0x00000efeu, 0x00050041u, 0x00000007u, 0x00000f00u, 0x0000013eu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000f01u, 0x00000f00u, 0x00050041u, 0x00000007u, 0x00000f02u, 0x00000140u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000f03u, 0x00000f02u, 0x00050084u, 0x00000006u, 0x00000f04u, 0x00000f01u, 0x00000f03u, 0x00050080u, 0x00000006u, 0x00000f05u, 0x00000effu, 0x00000f04u, 0x0003003eu, 0x00000efdu, 0x00000f05u, 0x00050041u, 0x00000007u, 0x00000f06u, 0x00000140u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000f07u, 0x00000f06u, 0x000500c2u, 0x00000006u, 0x00000f08u, 0x00000f07u, 0x00000212u, 0x00050080u, 0x00000006u, 0x00000f0au, 0x00000f05u, 0x00000f08u, 0x0003003eu, 0x00000efdu, 0x00000f0au, 0x000500c7u, 0x00000006u, 0x00000f0du, 0x00000f0au, 0x00000f0bu, 0x0003003eu, 0x00000efdu, 0x00000f0du, 0x0004003du, 0x00000006u, 0x00000f10u, 0x00000f06u, 0x000400c8u, 0x00000006u, 0x00000f11u, 0x00000f10u, 0x000500c7u, 0x00000006u, 0x00000f12u, 0x00000f11u, 0x00000485u, 0x00050084u, 0x00000006u, 0x00000f13u, 0x00000f12u, 0x00000701u, 0x0003003eu, 0x00000f0eu, 0x00000f13u, 0x0003003eu, 0x00000f14u, 0x00000f0du, 0x0004003du, 0x00000006u, 0x00000f17u, 0x00000f02u, 0x000500c7u, 0x00000006u, 0x00000f18u, 0x00000f17u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000f19u, 0x00000f18u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000f1bu, 0x00000f0du, 0x00000f19u, 0x0003003eu, 0x00000f14u, 0x00000f1bu, 0x000500c6u, 0x00000006u, 0x00000f1du, 0x00000f1bu, 0x0000048bu, 0x0003003eu, 0x00000f14u, 0x00000f1du, 0x0004003du, 0x00000006u, 0x00000f1fu, 0x0000013fu, 0x00080041u, 0x00000277u, 0x00000f21u, 0x00000e73u, 0x00000203u, 0x00000f1fu, 0x00000203u, 0x00000f1du, 0x0004003du, 0x00000229u, 0x00000f22u, 0x00000f21u, 0x00040071u, 0x00000006u, 0x00000f23u, 0x00000f22u, 0x0003003eu, 0x00000f1eu, 0x00000f23u, 0x000500c2u, 0x00000006u, 0x00000f26u, 0x00000f23u, 0x00000f13u, 0x000500c7u, 0x00000006u, 0x00000f27u, 0x00000f26u, 0x00000e7cu, 0x0003003eu, 0x00000f1eu, 0x00000f27u, 0x0004003du, 0x00000006u, 0x00000f28u, 0x00000141u, 0x000500c4u, 0x00000006u, 0x00000f29u, 0x00000f28u, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00000f2bu, 0x00000f27u, 0x00000f29u, 0x0003003eu, 0x00000f1eu, 0x00000f2bu, 0x000500c4u, 0x00000006u, 0x00000f2eu, 0x00000f2bu, 0x00000215u, 0x0004003du, 0x00000006u, 0x00000f2fu, 0x00000142u, 0x00050080u, 0x00000006u, 0x00000f30u, 0x00000f2eu, 0x00000f2fu, 0x0003003eu, 0x00000f2cu, 0x00000f30u, 0x0004003du, 0x00000006u, 0x00000f31u, 0x00000143u, 0x000500c6u, 0x00000006u, 0x00000f33u, 0x00000f30u, 0x00000f31u, 0x0003003eu, 0x00000f2cu, 0x00000f33u, 0x0004003du, 0x00000006u, 0x00000f3bu, 0x0000013fu, 0x000500c5u, 0x00000006u, 0x00000f3eu, 0x00000f3cu, 0x00000f33u, 0x00080041u, 0x00000270u, 0x00000f3fu, 0x00000f3au, 0x00000203u, 0x00000f3bu, 0x00000203u, 0x00000f3eu, 0x0004003du, 0x0000022bu, 0x00000f40u, 0x00000f3fu, 0x00040071u, 0x00000006u, 0x00000f41u, 0x00000f40u, 0x0003003eu, 0x00000f1eu, 0x00000f41u, 0x0004003du, 0x0000005du, 0x00000f42u, 0x00000144u, 0x000300f7u, 0x00000f45u, 0x00000000u, 0x000400fau, 0x00000f42u, 0x00000f44u, 0x00000f49u, 0x000200f8u, 0x00000f44u, 0x0003003eu, 0x00000f46u, 0x00000f41u, 0x00050039u, 0x00000009u, 0x00000f48u, 0x00000129u, 0x00000f46u, 0x0003003eu, 0x00000f43u, 0x00000f48u, 0x000200f9u, 0x00000f45u, 0x000200f8u, 0x00000f49u, 0x0003003eu, 0x00000f4au, 0x00000f41u, 0x00050039u, 0x00000009u, 0x00000f4cu, 0x00000126u, 0x00000f4au, 0x0003003eu, 0x00000f43u, 0x00000f4cu, 0x000200f9u, 0x00000f45u, 0x000200f8u, 0x00000f45u, 0x000700f5u, 0x00000009u, 0x0000ea9au, 0x00000f48u, 0x00000f44u, 0x00000f4cu, 0x00000f49u, 0x000200feu, 0x0000ea9au, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000014eu, 0x00000000u, 0x00000147u, 0x00030037u, 0x00000115u, 0x00000148u, 0x00030037u, 0x00000007u, 0x00000149u, 0x00030037u, 0x000000a3u, 0x0000014au, 0x00030037u, 0x00000007u, 0x0000014bu, 0x00030037u, 0x00000007u, 0x0000014cu, 0x00030037u, 0x0000005eu, 0x0000014du, 0x000200f8u, 0x0000014fu, 0x0004003bu, 0x00000007u, 0x00000f50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f6fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000f7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f85u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f51u, 0x00000148u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000f52u, 0x00000f51u, 0x00050041u, 0x00000007u, 0x00000f53u, 0x00000148u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000f54u, 0x00000f53u, 0x00050041u, 0x00000007u, 0x00000f55u, 0x0000014au, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000f56u, 0x00000f55u, 0x00050084u, 0x00000006u, 0x00000f57u, 0x00000f54u, 0x00000f56u, 0x00050080u, 0x00000006u, 0x00000f58u, 0x00000f52u, 0x00000f57u, 0x0003003eu, 0x00000f50u, 0x00000f58u, 0x00050041u, 0x00000007u, 0x00000f59u, 0x0000014au, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000f5au, 0x00000f59u, 0x00050080u, 0x00000006u, 0x00000f5cu, 0x00000f58u, 0x00000f5au, 0x0003003eu, 0x00000f50u, 0x00000f5cu, 0x000500c7u, 0x00000006u, 0x00000f5eu, 0x00000f5cu, 0x00000f0bu, 0x0003003eu, 0x00000f50u, 0x00000f5eu, 0x0003003eu, 0x00000f5fu, 0x00000f5eu, 0x0004003du, 0x00000006u, 0x00000f62u, 0x00000f55u, 0x000500c7u, 0x00000006u, 0x00000f63u, 0x00000f62u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000f64u, 0x00000f63u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x00000f66u, 0x00000f5eu, 0x00000f64u, 0x0003003eu, 0x00000f5fu, 0x00000f66u, 0x000500c6u, 0x00000006u, 0x00000f68u, 0x00000f66u, 0x0000048bu, 0x0003003eu, 0x00000f5fu, 0x00000f68u, 0x0004003du, 0x00000006u, 0x00000f6au, 0x00000149u, 0x00080041u, 0x00000277u, 0x00000f6cu, 0x00000e73u, 0x00000203u, 0x00000f6au, 0x00000203u, 0x00000f68u, 0x0004003du, 0x00000229u, 0x00000f6du, 0x00000f6cu, 0x00040071u, 0x00000006u, 0x00000f6eu, 0x00000f6du, 0x0003003eu, 0x00000f69u, 0x00000f6eu, 0x000500c4u, 0x00000006u, 0x00000f71u, 0x00000f6eu, 0x00000215u, 0x0004003du, 0x00000006u, 0x00000f72u, 0x0000014bu, 0x00050080u, 0x00000006u, 0x00000f73u, 0x00000f71u, 0x00000f72u, 0x0003003eu, 0x00000f6fu, 0x00000f73u, 0x0004003du, 0x00000006u, 0x00000f74u, 0x0000014cu, 0x000500c6u, 0x00000006u, 0x00000f76u, 0x00000f73u, 0x00000f74u, 0x0003003eu, 0x00000f6fu, 0x00000f76u, 0x0004003du, 0x00000006u, 0x00000f77u, 0x00000149u, 0x000500c5u, 0x00000006u, 0x00000f79u, 0x00000f3cu, 0x00000f76u, 0x00080041u, 0x00000270u, 0x00000f7au, 0x00000f3au, 0x00000203u, 0x00000f77u, 0x00000203u, 0x00000f79u, 0x0004003du, 0x0000022bu, 0x00000f7bu, 0x00000f7au, 0x00040071u, 0x00000006u, 0x00000f7cu, 0x00000f7bu, 0x0003003eu, 0x00000f69u, 0x00000f7cu, 0x0004003du, 0x0000005du, 0x00000f7du, 0x0000014du, 0x000300f7u, 0x00000f80u, 0x00000000u, 0x000400fau, 0x00000f7du, 0x00000f7fu, 0x00000f84u, 0x000200f8u, 0x00000f7fu, 0x0003003eu, 0x00000f81u, 0x00000f7cu, 0x00050039u, 0x00000009u, 0x00000f83u, 0x00000129u, 0x00000f81u, 0x0003003eu, 0x00000f7eu, 0x00000f83u, 0x000200f9u, 0x00000f80u, 0x000200f8u, 0x00000f84u, 0x0003003eu, 0x00000f85u, 0x00000f7cu, 0x00050039u, 0x00000009u, 0x00000f87u, 0x00000126u, 0x00000f85u, 0x0003003eu, 0x00000f7eu, 0x00000f87u, 0x000200f9u, 0x00000f80u, 0x000200f8u, 0x00000f80u, 0x000700f5u, 0x00000009u, 0x0000ea9bu, 0x00000f83u, 0x00000f7fu, 0x00000f87u, 0x00000f84u, 0x000200feu, 0x0000ea9bu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000153u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000150u, 0x00030037u, 0x00000007u, 0x00000151u, 0x00030037u, 0x000000a3u, 0x00000152u, 0x000200f8u, 0x00000154u, 0x0004003bu, 0x00000007u, 0x00000f8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa6u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f8cu, 0x00000150u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000f8du, 0x00000f8cu, 0x00050041u, 0x00000007u, 0x00000f8eu, 0x00000150u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000f8fu, 0x00000f8eu, 0x00050041u, 0x00000007u, 0x00000f90u, 0x00000152u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000f91u, 0x00000f90u, 0x00050084u, 0x00000006u, 0x00000f92u, 0x00000f8fu, 0x00000f91u, 0x00050080u, 0x00000006u, 0x00000f93u, 0x00000f8du, 0x00000f92u, 0x0003003eu, 0x00000f8bu, 0x00000f93u, 0x00050041u, 0x00000007u, 0x00000f94u, 0x00000152u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000f95u, 0x00000f94u, 0x00050084u, 0x00000006u, 0x00000f96u, 0x00000f95u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00000f98u, 0x00000f93u, 0x00000f96u, 0x0003003eu, 0x00000f8bu, 0x00000f98u, 0x000500c7u, 0x00000006u, 0x00000f9au, 0x00000f98u, 0x00000e59u, 0x0003003eu, 0x00000f8bu, 0x00000f9au, 0x000500c2u, 0x00000006u, 0x00000f9du, 0x00000f9au, 0x00000212u, 0x0003003eu, 0x00000f9bu, 0x00000f9du, 0x0004003du, 0x00000006u, 0x00000f9fu, 0x00000f90u, 0x000500c7u, 0x00000006u, 0x00000fa0u, 0x00000f9fu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000fa1u, 0x00000fa0u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00000fa3u, 0x00000f9du, 0x00000fa1u, 0x0003003eu, 0x00000f9bu, 0x00000fa3u, 0x000500c6u, 0x00000006u, 0x00000fa5u, 0x00000fa3u, 0x00000485u, 0x0003003eu, 0x00000f9bu, 0x00000fa5u, 0x0004003du, 0x00000006u, 0x00000fa7u, 0x00000151u, 0x00080041u, 0x00000270u, 0x00000fa9u, 0x00000f3au, 0x00000203u, 0x00000fa7u, 0x00000203u, 0x00000fa5u, 0x0004003du, 0x0000022bu, 0x00000faau, 0x00000fa9u, 0x00040071u, 0x00000006u, 0x00000fabu, 0x00000faau, 0x0003003eu, 0x00000fa6u, 0x00000fabu, 0x000500c2u, 0x00000006u, 0x00000fadu, 0x00000fabu, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00000faeu, 0x00000fadu, 0x000500c7u, 0x00000006u, 0x00000fb0u, 0x00000fabu, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00000fb1u, 0x00000fb0u, 0x00050050u, 0x0000005fu, 0x00000fb2u, 0x00000faeu, 0x00000fb1u, 0x0009004fu, 0x00000009u, 0x00000fb3u, 0x00000fb2u, 0x00000fb2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000fb3u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000015bu, 0x00000000u, 0x00000147u, 0x00030037u, 0x00000115u, 0x00000155u, 0x00030037u, 0x00000007u, 0x00000156u, 0x00030037u, 0x000000a3u, 0x00000157u, 0x00030037u, 0x00000007u, 0x00000158u, 0x00030037u, 0x00000007u, 0x00000159u, 0x00030037u, 0x0000005eu, 0x0000015au, 0x000200f8u, 0x0000015cu, 0x0004003bu, 0x00000007u, 0x00000fb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00000fe8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000febu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fefu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000fb7u, 0x00000155u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000fb8u, 0x00000fb7u, 0x00050041u, 0x00000007u, 0x00000fb9u, 0x00000155u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000fbau, 0x00000fb9u, 0x00050041u, 0x00000007u, 0x00000fbbu, 0x00000157u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000fbcu, 0x00000fbbu, 0x00050084u, 0x00000006u, 0x00000fbdu, 0x00000fbau, 0x00000fbcu, 0x00050080u, 0x00000006u, 0x00000fbeu, 0x00000fb8u, 0x00000fbdu, 0x0003003eu, 0x00000fb6u, 0x00000fbeu, 0x00050041u, 0x00000007u, 0x00000fbfu, 0x00000157u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000fc0u, 0x00000fbfu, 0x00050084u, 0x00000006u, 0x00000fc1u, 0x00000fc0u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00000fc3u, 0x00000fbeu, 0x00000fc1u, 0x0003003eu, 0x00000fb6u, 0x00000fc3u, 0x000500c7u, 0x00000006u, 0x00000fc5u, 0x00000fc3u, 0x00000f0bu, 0x0003003eu, 0x00000fb6u, 0x00000fc5u, 0x000500c2u, 0x00000006u, 0x00000fc8u, 0x00000fc5u, 0x00000212u, 0x0003003eu, 0x00000fc6u, 0x00000fc8u, 0x0004003du, 0x00000006u, 0x00000fcau, 0x00000fbbu, 0x000500c7u, 0x00000006u, 0x00000fcbu, 0x00000fcau, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00000fccu, 0x00000fcbu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00000fceu, 0x00000fc8u, 0x00000fccu, 0x0003003eu, 0x00000fc6u, 0x00000fceu, 0x000500c6u, 0x00000006u, 0x00000fd0u, 0x00000fceu, 0x00000485u, 0x0003003eu, 0x00000fc6u, 0x00000fd0u, 0x0004003du, 0x00000006u, 0x00000fd2u, 0x00000156u, 0x00080041u, 0x00000270u, 0x00000fd4u, 0x00000f3au, 0x00000203u, 0x00000fd2u, 0x00000203u, 0x00000fd0u, 0x0004003du, 0x0000022bu, 0x00000fd5u, 0x00000fd4u, 0x00040071u, 0x00000006u, 0x00000fd6u, 0x00000fd5u, 0x0003003eu, 0x00000fd1u, 0x00000fd6u, 0x000500c2u, 0x00000006u, 0x00000fd9u, 0x00000fd6u, 0x00000221u, 0x000500c7u, 0x00000006u, 0x00000fdbu, 0x00000fd9u, 0x00000fdau, 0x0004003du, 0x00000006u, 0x00000fdcu, 0x00000158u, 0x00050080u, 0x00000006u, 0x00000fddu, 0x00000fdbu, 0x00000fdcu, 0x0003003eu, 0x00000fd7u, 0x00000fddu, 0x0004003du, 0x00000006u, 0x00000fdeu, 0x00000159u, 0x000500c6u, 0x00000006u, 0x00000fe0u, 0x00000fddu, 0x00000fdeu, 0x0003003eu, 0x00000fd7u, 0x00000fe0u, 0x0004003du, 0x00000006u, 0x00000fe1u, 0x00000156u, 0x000500c5u, 0x00000006u, 0x00000fe3u, 0x00000f3cu, 0x00000fe0u, 0x00080041u, 0x00000270u, 0x00000fe4u, 0x00000f3au, 0x00000203u, 0x00000fe1u, 0x00000203u, 0x00000fe3u, 0x0004003du, 0x0000022bu, 0x00000fe5u, 0x00000fe4u, 0x00040071u, 0x00000006u, 0x00000fe6u, 0x00000fe5u, 0x0003003eu, 0x00000fd1u, 0x00000fe6u, 0x0004003du, 0x0000005du, 0x00000fe7u, 0x0000015au, 0x000300f7u, 0x00000feau, 0x00000000u, 0x000400fau, 0x00000fe7u, 0x00000fe9u, 0x00000feeu, 0x000200f8u, 0x00000fe9u, 0x0003003eu, 0x00000febu, 0x00000fe6u, 0x00050039u, 0x00000009u, 0x00000fedu, 0x00000129u, 0x00000febu, 0x0003003eu, 0x00000fe8u, 0x00000fedu, 0x000200f9u, 0x00000feau, 0x000200f8u, 0x00000feeu, 0x0003003eu, 0x00000fefu, 0x00000fe6u, 0x00050039u, 0x00000009u, 0x00000ff1u, 0x00000126u, 0x00000fefu, 0x0003003eu, 0x00000fe8u, 0x00000ff1u, 0x000200f9u, 0x00000feau, 0x000200f8u, 0x00000feau, 0x000700f5u, 0x00000009u, 0x0000ea9cu, 0x00000fedu, 0x00000fe9u, 0x00000ff1u, 0x00000feeu, 0x000200feu, 0x0000ea9cu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000160u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x0000015du, 0x00030037u, 0x00000007u, 0x0000015eu, 0x00030037u, 0x000000a3u, 0x0000015fu, 0x000200f8u, 0x00000161u, 0x0004003bu, 0x00000007u, 0x00000ff5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001004u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100eu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000ff6u, 0x0000015du, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00000ff7u, 0x00000ff6u, 0x00050041u, 0x00000007u, 0x00000ff8u, 0x0000015du, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00000ff9u, 0x00000ff8u, 0x00050041u, 0x00000007u, 0x00000ffau, 0x0000015fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x00000ffbu, 0x00000ffau, 0x00050084u, 0x00000006u, 0x00000ffcu, 0x00000ff9u, 0x00000ffbu, 0x00050080u, 0x00000006u, 0x00000ffdu, 0x00000ff7u, 0x00000ffcu, 0x0003003eu, 0x00000ff5u, 0x00000ffdu, 0x00050041u, 0x00000007u, 0x00000ffeu, 0x0000015fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x00000fffu, 0x00000ffeu, 0x00050080u, 0x00000006u, 0x00001001u, 0x00000ffdu, 0x00000fffu, 0x0003003eu, 0x00000ff5u, 0x00001001u, 0x000500c7u, 0x00000006u, 0x00001003u, 0x00001001u, 0x00000e59u, 0x0003003eu, 0x00000ff5u, 0x00001003u, 0x0003003eu, 0x00001004u, 0x00001003u, 0x0004003du, 0x00000006u, 0x00001007u, 0x00000ffau, 0x000500c7u, 0x00000006u, 0x00001008u, 0x00001007u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00001009u, 0x00001008u, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000100bu, 0x00001003u, 0x00001009u, 0x0003003eu, 0x00001004u, 0x0000100bu, 0x000500c6u, 0x00000006u, 0x0000100du, 0x0000100bu, 0x0000048bu, 0x0003003eu, 0x00001004u, 0x0000100du, 0x0004003du, 0x00000006u, 0x0000100fu, 0x0000015eu, 0x00080041u, 0x00000277u, 0x00001011u, 0x00000e73u, 0x00000203u, 0x0000100fu, 0x00000203u, 0x0000100du, 0x0004003du, 0x00000229u, 0x00001012u, 0x00001011u, 0x00040071u, 0x00000006u, 0x00001013u, 0x00001012u, 0x0003003eu, 0x0000100eu, 0x00001013u, 0x0004007cu, 0x00000008u, 0x00001015u, 0x00001013u, 0x00070050u, 0x00000009u, 0x00001016u, 0x00001015u, 0x00001015u, 0x00001015u, 0x00001015u, 0x000200feu, 0x00001016u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000165u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000162u, 0x00030037u, 0x00000007u, 0x00000163u, 0x00030037u, 0x000000a3u, 0x00000164u, 0x000200f8u, 0x00000166u, 0x0004003bu, 0x00000007u, 0x00001019u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001028u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001032u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001038u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000103bu, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000101au, 0x00000162u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000101bu, 0x0000101au, 0x00050041u, 0x00000007u, 0x0000101cu, 0x00000162u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000101du, 0x0000101cu, 0x00050041u, 0x00000007u, 0x0000101eu, 0x00000164u, 0x00000485u, 0x0004003du, 0x00000006u, 0x0000101fu, 0x0000101eu, 0x00050084u, 0x00000006u, 0x00001020u, 0x0000101du, 0x0000101fu, 0x00050080u, 0x00000006u, 0x00001021u, 0x0000101bu, 0x00001020u, 0x0003003eu, 0x00001019u, 0x00001021u, 0x00050041u, 0x00000007u, 0x00001022u, 0x00000164u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001023u, 0x00001022u, 0x00050080u, 0x00000006u, 0x00001025u, 0x00001021u, 0x00001023u, 0x0003003eu, 0x00001019u, 0x00001025u, 0x000500c7u, 0x00000006u, 0x00001027u, 0x00001025u, 0x00000e59u, 0x0003003eu, 0x00001019u, 0x00001027u, 0x0003003eu, 0x00001028u, 0x00001027u, 0x0004003du, 0x00000006u, 0x0000102bu, 0x0000101eu, 0x000500c7u, 0x00000006u, 0x0000102cu, 0x0000102bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000102du, 0x0000102cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000102fu, 0x00001027u, 0x0000102du, 0x0003003eu, 0x00001028u, 0x0000102fu, 0x000500c6u, 0x00000006u, 0x00001031u, 0x0000102fu, 0x0000048bu, 0x0003003eu, 0x00001028u, 0x00001031u, 0x0004003du, 0x00000006u, 0x00001033u, 0x00000163u, 0x00080041u, 0x00000277u, 0x00001035u, 0x00000e73u, 0x00000203u, 0x00001033u, 0x00000203u, 0x00001031u, 0x0004003du, 0x00000229u, 0x00001036u, 0x00001035u, 0x00040071u, 0x00000006u, 0x00001037u, 0x00001036u, 0x0003003eu, 0x00001032u, 0x00001037u, 0x000500c2u, 0x00000006u, 0x0000103au, 0x00001037u, 0x0000021bu, 0x0003003eu, 0x00001038u, 0x0000103au, 0x000500c7u, 0x00000006u, 0x0000103du, 0x00001037u, 0x00000e7cu, 0x0003003eu, 0x0000103bu, 0x0000103du, 0x000500c4u, 0x00000006u, 0x0000103fu, 0x0000103du, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00001041u, 0x0000103du, 0x0000103fu, 0x0003003eu, 0x0000103bu, 0x00001041u, 0x000500c4u, 0x00000006u, 0x00001043u, 0x0000103au, 0x0000021bu, 0x000500c5u, 0x00000006u, 0x00001045u, 0x0000103au, 0x00001043u, 0x0003003eu, 0x00001038u, 0x00001045u, 0x0004007cu, 0x00000008u, 0x00001047u, 0x00001045u, 0x0004007cu, 0x00000008u, 0x0000104du, 0x00001041u, 0x00070050u, 0x00000009u, 0x0000104eu, 0x00001047u, 0x00001047u, 0x00001047u, 0x0000104du, 0x000200feu, 0x0000104eu, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000016bu, 0x00000000u, 0x00000136u, 0x00030037u, 0x00000115u, 0x00000167u, 0x00030037u, 0x00000007u, 0x00000168u, 0x00030037u, 0x000000a3u, 0x00000169u, 0x00030037u, 0x00000007u, 0x0000016au, 0x000200f8u, 0x0000016cu, 0x0004003bu, 0x00000007u, 0x00001051u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000105au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001061u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001068u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001072u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000107du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001085u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000108cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001090u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001052u, 0x00000167u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001053u, 0x00001052u, 0x00050041u, 0x00000007u, 0x00001054u, 0x00000167u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00001055u, 0x00001054u, 0x00050041u, 0x00000007u, 0x00001056u, 0x00000169u, 0x00000485u, 0x0004003du, 0x00000006u, 0x00001057u, 0x00001056u, 0x00050084u, 0x00000006u, 0x00001058u, 0x00001055u, 0x00001057u, 0x00050080u, 0x00000006u, 0x00001059u, 0x00001053u, 0x00001058u, 0x0003003eu, 0x00001051u, 0x00001059u, 0x00050041u, 0x00000007u, 0x0000105cu, 0x00000169u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000105du, 0x0000105cu, 0x00050080u, 0x00000006u, 0x0000105eu, 0x00001059u, 0x0000105du, 0x0003003eu, 0x0000105au, 0x0000105eu, 0x000500c7u, 0x00000006u, 0x00001060u, 0x0000105eu, 0x00000f0bu, 0x0003003eu, 0x0000105au, 0x00001060u, 0x0004003du, 0x00000006u, 0x00001063u, 0x0000016au, 0x00050084u, 0x00000006u, 0x00001064u, 0x00001063u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x00001065u, 0x00001059u, 0x00001064u, 0x0003003eu, 0x00001061u, 0x00001065u, 0x000500c7u, 0x00000006u, 0x00001067u, 0x00001065u, 0x00000f0bu, 0x0003003eu, 0x00001061u, 0x00001067u, 0x0003003eu, 0x00001068u, 0x00001060u, 0x0004003du, 0x00000006u, 0x0000106bu, 0x00001056u, 0x000500c7u, 0x00000006u, 0x0000106cu, 0x0000106bu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x0000106du, 0x0000106cu, 0x00000215u, 0x000500c6u, 0x00000006u, 0x0000106fu, 0x00001060u, 0x0000106du, 0x0003003eu, 0x00001068u, 0x0000106fu, 0x000500c6u, 0x00000006u, 0x00001071u, 0x0000106fu, 0x0000048bu, 0x0003003eu, 0x00001068u, 0x00001071u, 0x000500c2u, 0x00000006u, 0x00001074u, 0x00001067u, 0x00000212u, 0x0003003eu, 0x00001072u, 0x00001074u, 0x0004003du, 0x00000006u, 0x00001076u, 0x00001056u, 0x000500c7u, 0x00000006u, 0x00001077u, 0x00001076u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x00001078u, 0x00001077u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x0000107au, 0x00001074u, 0x00001078u, 0x0003003eu, 0x00001072u, 0x0000107au, 0x000500c6u, 0x00000006u, 0x0000107cu, 0x0000107au, 0x00000485u, 0x0003003eu, 0x00001072u, 0x0000107cu, 0x0004003du, 0x00000006u, 0x0000107eu, 0x00000168u, 0x000500c5u, 0x00000006u, 0x00001080u, 0x00001071u, 0x00000f34u, 0x00080041u, 0x00000277u, 0x00001081u, 0x00000e73u, 0x00000203u, 0x0000107eu, 0x00000203u, 0x00001080u, 0x0004003du, 0x00000229u, 0x00001082u, 0x00001081u, 0x00040071u, 0x00000006u, 0x00001083u, 0x00001082u, 0x0004007cu, 0x00000008u, 0x00001084u, 0x00001083u, 0x0003003eu, 0x0000107du, 0x00001084u, 0x0004003du, 0x00000006u, 0x00001086u, 0x00000168u, 0x00080041u, 0x00000270u, 0x00001088u, 0x00000f3au, 0x00000203u, 0x00001086u, 0x00000203u, 0x0000107cu, 0x0004003du, 0x0000022bu, 0x00001089u, 0x00001088u, 0x00040071u, 0x00000006u, 0x0000108au, 0x00001089u, 0x0004007cu, 0x00000008u, 0x0000108bu, 0x0000108au, 0x0003003eu, 0x00001085u, 0x0000108bu, 0x000500c3u, 0x00000008u, 0x0000108eu, 0x0000108bu, 0x0000025eu, 0x000500c7u, 0x00000008u, 0x0000108fu, 0x0000108eu, 0x0000038bu, 0x0003003eu, 0x0000108cu, 0x0000108fu, 0x000500c3u, 0x00000008u, 0x00001092u, 0x0000108bu, 0x00000203u, 0x000500c7u, 0x00000008u, 0x00001093u, 0x00001092u, 0x0000038bu, 0x0003003eu, 0x00001090u, 0x00001093u, 0x00050082u, 0x00000008u, 0x00001095u, 0x0000108fu, 0x00000623u, 0x00050082u, 0x00000008u, 0x00001097u, 0x00001093u, 0x00000623u, 0x00070050u, 0x00000009u, 0x0000109au, 0x00001095u, 0x00001097u, 0x00001084u, 0x00001084u, 0x000200feu, 0x0000109au, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000170u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x0000016du, 0x00030037u, 0x00000007u, 0x0000016eu, 0x00030037u, 0x000000a3u, 0x0000016fu, 0x000200f8u, 0x00000171u, 0x0004003bu, 0x00000007u, 0x0000109du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010beu, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000109eu, 0x0000016du, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000109fu, 0x0000109eu, 0x00050041u, 0x00000007u, 0x000010a0u, 0x0000016du, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000010a1u, 0x000010a0u, 0x00050041u, 0x00000007u, 0x000010a2u, 0x0000016fu, 0x00000485u, 0x0004003du, 0x00000006u, 0x000010a3u, 0x000010a2u, 0x00050084u, 0x00000006u, 0x000010a4u, 0x000010a1u, 0x000010a3u, 0x00050080u, 0x00000006u, 0x000010a5u, 0x0000109fu, 0x000010a4u, 0x0003003eu, 0x0000109du, 0x000010a5u, 0x00050041u, 0x00000007u, 0x000010a6u, 0x0000016fu, 0x00000374u, 0x0004003du, 0x00000006u, 0x000010a7u, 0x000010a6u, 0x00050084u, 0x00000006u, 0x000010a8u, 0x000010a7u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000010aau, 0x000010a5u, 0x000010a8u, 0x0003003eu, 0x0000109du, 0x000010aau, 0x000500c7u, 0x00000006u, 0x000010acu, 0x000010aau, 0x00000e59u, 0x0003003eu, 0x0000109du, 0x000010acu, 0x000500c2u, 0x00000006u, 0x000010afu, 0x000010acu, 0x00000212u, 0x0003003eu, 0x000010adu, 0x000010afu, 0x0004003du, 0x00000006u, 0x000010b1u, 0x000010a2u, 0x000500c7u, 0x00000006u, 0x000010b2u, 0x000010b1u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000010b3u, 0x000010b2u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000010b5u, 0x000010afu, 0x000010b3u, 0x0003003eu, 0x000010adu, 0x000010b5u, 0x000500c6u, 0x00000006u, 0x000010b7u, 0x000010b5u, 0x00000485u, 0x0003003eu, 0x000010adu, 0x000010b7u, 0x0004003du, 0x00000006u, 0x000010b9u, 0x0000016eu, 0x00080041u, 0x00000270u, 0x000010bbu, 0x00000f3au, 0x00000203u, 0x000010b9u, 0x00000203u, 0x000010b7u, 0x0004003du, 0x0000022bu, 0x000010bcu, 0x000010bbu, 0x00040071u, 0x00000006u, 0x000010bdu, 0x000010bcu, 0x0003003eu, 0x000010b8u, 0x000010bdu, 0x0003003eu, 0x000010beu, 0x000010bdu, 0x00050039u, 0x00000009u, 0x000010c0u, 0x00000126u, 0x000010beu, 0x000200feu, 0x000010c0u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000175u, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000172u, 0x00030037u, 0x00000007u, 0x00000173u, 0x00030037u, 0x000000a3u, 0x00000174u, 0x000200f8u, 0x00000176u, 0x0004003bu, 0x00000007u, 0x000010c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010e4u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010c4u, 0x00000172u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000010c5u, 0x000010c4u, 0x00050041u, 0x00000007u, 0x000010c6u, 0x00000172u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000010c7u, 0x000010c6u, 0x00050041u, 0x00000007u, 0x000010c8u, 0x00000174u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000010c9u, 0x000010c8u, 0x00050084u, 0x00000006u, 0x000010cau, 0x000010c7u, 0x000010c9u, 0x00050080u, 0x00000006u, 0x000010cbu, 0x000010c5u, 0x000010cau, 0x0003003eu, 0x000010c3u, 0x000010cbu, 0x00050041u, 0x00000007u, 0x000010ccu, 0x00000174u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000010cdu, 0x000010ccu, 0x00050084u, 0x00000006u, 0x000010ceu, 0x000010cdu, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000010d0u, 0x000010cbu, 0x000010ceu, 0x0003003eu, 0x000010c3u, 0x000010d0u, 0x000500c7u, 0x00000006u, 0x000010d2u, 0x000010d0u, 0x00000e59u, 0x0003003eu, 0x000010c3u, 0x000010d2u, 0x000500c2u, 0x00000006u, 0x000010d5u, 0x000010d2u, 0x00000212u, 0x0003003eu, 0x000010d3u, 0x000010d5u, 0x0004003du, 0x00000006u, 0x000010d7u, 0x000010c8u, 0x000500c7u, 0x00000006u, 0x000010d8u, 0x000010d7u, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000010d9u, 0x000010d8u, 0x00000212u, 0x000500c6u, 0x00000006u, 0x000010dbu, 0x000010d5u, 0x000010d9u, 0x0003003eu, 0x000010d3u, 0x000010dbu, 0x000500c6u, 0x00000006u, 0x000010ddu, 0x000010dbu, 0x00000485u, 0x0003003eu, 0x000010d3u, 0x000010ddu, 0x0004003du, 0x00000006u, 0x000010dfu, 0x00000173u, 0x00080041u, 0x00000270u, 0x000010e1u, 0x00000f3au, 0x00000203u, 0x000010dfu, 0x00000203u, 0x000010ddu, 0x0004003du, 0x0000022bu, 0x000010e2u, 0x000010e1u, 0x00040071u, 0x00000006u, 0x000010e3u, 0x000010e2u, 0x0003003eu, 0x000010deu, 0x000010e3u, 0x0003003eu, 0x000010e4u, 0x000010e3u, 0x00050039u, 0x00000009u, 0x000010e6u, 0x00000129u, 0x000010e4u, 0x000200feu, 0x000010e6u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000017au, 0x00000000u, 0x0000012bu, 0x00030037u, 0x00000115u, 0x00000177u, 0x00030037u, 0x00000007u, 0x00000178u, 0x00030037u, 0x000000a3u, 0x00000179u, 0x000200f8u, 0x0000017bu, 0x0004003bu, 0x00000007u, 0x000010e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001104u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000110au, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010eau, 0x00000177u, 0x0000021bu, 0x0004003du, 0x00000006u, 0x000010ebu, 0x000010eau, 0x00050041u, 0x00000007u, 0x000010ecu, 0x00000177u, 0x0000021eu, 0x0004003du, 0x00000006u, 0x000010edu, 0x000010ecu, 0x00050041u, 0x00000007u, 0x000010eeu, 0x00000179u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000010efu, 0x000010eeu, 0x00050084u, 0x00000006u, 0x000010f0u, 0x000010edu, 0x000010efu, 0x00050080u, 0x00000006u, 0x000010f1u, 0x000010ebu, 0x000010f0u, 0x0003003eu, 0x000010e9u, 0x000010f1u, 0x00050041u, 0x00000007u, 0x000010f2u, 0x00000179u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000010f3u, 0x000010f2u, 0x00050084u, 0x00000006u, 0x000010f4u, 0x000010f3u, 0x000003c4u, 0x00050080u, 0x00000006u, 0x000010f6u, 0x000010f1u, 0x000010f4u, 0x0003003eu, 0x000010e9u, 0x000010f6u, 0x000500c7u, 0x00000006u, 0x000010f8u, 0x000010f6u, 0x00000f0bu, 0x0003003eu, 0x000010e9u, 0x000010f8u, 0x000500c2u, 0x00000006u, 0x000010fbu, 0x000010f8u, 0x00000212u, 0x0003003eu, 0x000010f9u, 0x000010fbu, 0x0004003du, 0x00000006u, 0x000010fdu, 0x000010eeu, 0x000500c7u, 0x00000006u, 0x000010feu, 0x000010fdu, 0x00000485u, 0x000500c4u, 0x00000006u, 0x000010ffu, 0x000010feu, 0x00000212u, 0x000500c6u, 0x00000006u, 0x00001101u, 0x000010fbu, 0x000010ffu, 0x0003003eu, 0x000010f9u, 0x00001101u, 0x000500c6u, 0x00000006u, 0x00001103u, 0x00001101u, 0x00000485u, 0x0003003eu, 0x000010f9u, 0x00001103u, 0x0004003du, 0x00000006u, 0x00001105u, 0x00000178u, 0x00080041u, 0x00000270u, 0x00001107u, 0x00000f3au, 0x00000203u, 0x00001105u, 0x00000203u, 0x00001103u, 0x0004003du, 0x0000022bu, 0x00001108u, 0x00001107u, 0x00040071u, 0x00000006u, 0x00001109u, 0x00001108u, 0x0003003eu, 0x00001104u, 0x00001109u, 0x0004003du, 0x00000006u, 0x0000110bu, 0x00000178u, 0x000500c5u, 0x00000006u, 0x0000110du, 0x00001103u, 0x00000f3cu, 0x00080041u, 0x00000270u, 0x0000110eu, 0x00000f3au, 0x00000203u, 0x0000110bu, 0x00000203u, 0x0000110du, 0x0004003du, 0x0000022bu, 0x0000110fu, 0x0000110eu, 0x00040071u, 0x00000006u, 0x00001110u, 0x0000110fu, 0x0003003eu, 0x0000110au, 0x00001110u, 0x000500c2u, 0x00000006u, 0x00001112u, 0x00001109u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00001113u, 0x00001112u, 0x000500c7u, 0x00000006u, 0x00001115u, 0x00001109u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x00001116u, 0x00001115u, 0x000500c2u, 0x00000006u, 0x00001118u, 0x00001110u, 0x0000025eu, 0x0004007cu, 0x00000008u, 0x00001119u, 0x00001118u, 0x000500c7u, 0x00000006u, 0x0000111bu, 0x00001110u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x0000111cu, 0x0000111bu, 0x00070050u, 0x00000009u, 0x0000111du, 0x00001113u, 0x00001116u, 0x00001119u, 0x0000111cu, 0x000200feu, 0x0000111du, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000182u, 0x00000000u, 0x0000017cu, 0x00030037u, 0x0000005eu, 0x0000017du, 0x00030037u, 0x0000003eu, 0x0000017eu, 0x00030037u, 0x0000003eu, 0x0000017fu, 0x00030037u, 0x0000003eu, 0x00000180u, 0x00030037u, 0x0000003eu, 0x00000181u, 0x000200f8u, 0x00000183u, 0x0004003bu, 0x0000005eu, 0x00001133u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001120u, 0x0000017eu, 0x0008000cu, 0x00000008u, 0x00001121u, 0x00000001u, 0x0000002du, 0x00001120u, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x0000017eu, 0x00001121u, 0x0004003du, 0x00000008u, 0x00001122u, 0x00000181u, 0x000500b1u, 0x0000005du, 0x00001123u, 0x00001122u, 0x0000026fu, 0x000300f7u, 0x00001125u, 0x00000000u, 0x000400fau, 0x00001123u, 0x00001124u, 0x00001129u, 0x000200f8u, 0x00001124u, 0x0004003du, 0x00000008u, 0x00001126u, 0x00000181u, 0x0004003du, 0x00000008u, 0x00001127u, 0x0000017eu, 0x000500c3u, 0x00000008u, 0x00001128u, 0x00001127u, 0x00001126u, 0x0003003eu, 0x0000017eu, 0x00001128u, 0x000200f9u, 0x00001125u, 0x000200f8u, 0x00001129u, 0x0004003du, 0x00000008u, 0x0000112au, 0x00000181u, 0x00050082u, 0x00000008u, 0x0000112bu, 0x0000037du, 0x0000112au, 0x0004003du, 0x00000008u, 0x0000112cu, 0x0000017eu, 0x000500c4u, 0x00000008u, 0x0000112du, 0x0000112cu, 0x0000112bu, 0x0003003eu, 0x0000017eu, 0x0000112du, 0x0004003du, 0x00000008u, 0x0000112eu, 0x0000017eu, 0x000500c3u, 0x00000008u, 0x0000112fu, 0x0000112eu, 0x00000559u, 0x0003003eu, 0x0000017eu, 0x0000112fu, 0x000200f9u, 0x00001125u, 0x000200f8u, 0x00001125u, 0x0004003du, 0x0000005du, 0x00001130u, 0x0000017du, 0x000300f7u, 0x00001132u, 0x00000000u, 0x000400fau, 0x00001130u, 0x00001131u, 0x00001149u, 0x000200f8u, 0x00001131u, 0x0004003du, 0x00000008u, 0x00001134u, 0x0000017eu, 0x000500c3u, 0x00000008u, 0x00001135u, 0x00001134u, 0x00000218u, 0x0004003du, 0x00000008u, 0x00001136u, 0x00000180u, 0x000500afu, 0x0000005du, 0x00001137u, 0x00001135u, 0x00001136u, 0x0003003eu, 0x00001133u, 0x00001137u, 0x000300f7u, 0x0000113au, 0x00000000u, 0x000400fau, 0x00001137u, 0x00001139u, 0x00001143u, 0x000200f8u, 0x00001139u, 0x0004003du, 0x00000008u, 0x0000113bu, 0x00000180u, 0x000500c3u, 0x00000008u, 0x0000113cu, 0x0000113bu, 0x00000215u, 0x0004003du, 0x00000008u, 0x0000113du, 0x0000017fu, 0x000500c3u, 0x00000008u, 0x0000113eu, 0x0000113du, 0x00000215u, 0x00050082u, 0x00000008u, 0x0000113fu, 0x0000113cu, 0x0000113eu, 0x000500c7u, 0x00000008u, 0x00001141u, 0x0000113fu, 0x00001140u, 0x000500c4u, 0x00000008u, 0x00001142u, 0x00001141u, 0x0000021eu, 0x0003003eu, 0x0000017eu, 0x00001142u, 0x000200f9u, 0x0000113au, 0x000200f8u, 0x00001143u, 0x0004003du, 0x00000008u, 0x00001144u, 0x0000017eu, 0x0004003du, 0x00000008u, 0x00001145u, 0x0000017fu, 0x000500c4u, 0x00000008u, 0x00001146u, 0x00001145u, 0x00000218u, 0x00050082u, 0x00000008u, 0x00001147u, 0x00001144u, 0x00001146u, 0x0007000cu, 0x00000008u, 0x00001148u, 0x00000001u, 0x0000002au, 0x00001147u, 0x00000203u, 0x0003003eu, 0x0000017eu, 0x00001148u, 0x000200f9u, 0x0000113au, 0x000200f8u, 0x0000113au, 0x000200f9u, 0x00001132u, 0x000200f8u, 0x00001149u, 0x0004003du, 0x00000008u, 0x0000114au, 0x0000017fu, 0x000500c4u, 0x00000008u, 0x0000114bu, 0x0000114au, 0x00000218u, 0x0004003du, 0x00000008u, 0x0000114cu, 0x0000017eu, 0x00050082u, 0x00000008u, 0x0000114du, 0x0000114cu, 0x0000114bu, 0x0003003eu, 0x0000017eu, 0x0000114du, 0x000200f9u, 0x00001132u, 0x000200f8u, 0x00001132u, 0x0004003du, 0x00000008u, 0x0000114eu, 0x0000017eu, 0x000200feu, 0x0000114eu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000188u, 0x00000000u, 0x00000184u, 0x00030037u, 0x0000003eu, 0x00000185u, 0x00030037u, 0x0000003eu, 0x00000186u, 0x00030037u, 0x0000003eu, 0x00000187u, 0x000200f8u, 0x00000189u, 0x0004003du, 0x00000008u, 0x00001151u, 0x00000185u, 0x0008000cu, 0x00000008u, 0x00001152u, 0x00000001u, 0x0000002du, 0x00001151u, 0x00000c50u, 0x00000c0bu, 0x0003003eu, 0x00000185u, 0x00001152u, 0x0004003du, 0x00000008u, 0x00001153u, 0x00000187u, 0x000500b1u, 0x0000005du, 0x00001154u, 0x00001153u, 0x0000026fu, 0x000300f7u, 0x00001156u, 0x00000000u, 0x000400fau, 0x00001154u, 0x00001155u, 0x0000115au, 0x000200f8u, 0x00001155u, 0x0004003du, 0x00000008u, 0x00001157u, 0x00000187u, 0x0004003du, 0x00000008u, 0x00001158u, 0x00000185u, 0x000500c3u, 0x00000008u, 0x00001159u, 0x00001158u, 0x00001157u, 0x0003003eu, 0x00000185u, 0x00001159u, 0x000200f9u, 0x00001156u, 0x000200f8u, 0x0000115au, 0x0004003du, 0x00000008u, 0x0000115bu, 0x00000187u, 0x00050082u, 0x00000008u, 0x0000115cu, 0x0000037du, 0x0000115bu, 0x0004003du, 0x00000008u, 0x0000115du, 0x00000185u, 0x000500c4u, 0x00000008u, 0x0000115eu, 0x0000115du, 0x0000115cu, 0x0003003eu, 0x00000185u, 0x0000115eu, 0x0004003du, 0x00000008u, 0x0000115fu, 0x00000185u, 0x000500c3u, 0x00000008u, 0x00001160u, 0x0000115fu, 0x00000559u, 0x0003003eu, 0x00000185u, 0x00001160u, 0x000200f9u, 0x00001156u, 0x000200f8u, 0x00001156u, 0x0004003du, 0x00000008u, 0x00001161u, 0x00000186u, 0x000500c4u, 0x00000008u, 0x00001162u, 0x00001161u, 0x00000218u, 0x0004003du, 0x00000008u, 0x00001163u, 0x00000185u, 0x00050082u, 0x00000008u, 0x00001164u, 0x00001163u, 0x00001162u, 0x0003003eu, 0x00000185u, 0x00001164u, 0x0004003du, 0x00000008u, 0x00001165u, 0x00000185u, 0x000200feu, 0x00001165u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000191u, 0x00000000u, 0x0000018au, 0x00030037u, 0x00000115u, 0x0000018bu, 0x00030037u, 0x00000007u, 0x0000018cu, 0x00030037u, 0x00000060u, 0x0000018du, 0x00030037u, 0x0000003eu, 0x0000018eu, 0x00030037u, 0x0000005eu, 0x0000018fu, 0x00030037u, 0x0000005eu, 0x00000190u, 0x000200f8u, 0x00000192u, 0x0004003bu, 0x0000005eu, 0x00001168u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000116bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001176u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000117au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000117eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000118cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000118du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000118fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001193u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001194u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001196u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000119au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000011a3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000011b7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000011c0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000011c9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000120cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001217u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001218u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000121au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000121eu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000121fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001221u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001225u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000122eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000123du, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001169u, 0x0000018eu, 0x000500b1u, 0x0000005du, 0x0000116au, 0x00001169u, 0x00000215u, 0x0003003eu, 0x00001168u, 0x0000116au, 0x000300f7u, 0x0000116eu, 0x00000000u, 0x000400fau, 0x0000116au, 0x0000116du, 0x0000116eu, 0x000200f8u, 0x0000116du, 0x00050041u, 0x0000003eu, 0x0000116fu, 0x0000018bu, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001170u, 0x0000116fu, 0x000500abu, 0x0000005du, 0x00001171u, 0x00001170u, 0x00000215u, 0x000200f9u, 0x0000116eu, 0x000200f8u, 0x0000116eu, 0x000700f5u, 0x0000005du, 0x00001172u, 0x0000116au, 0x00000192u, 0x00001171u, 0x0000116du, 0x0004003du, 0x0000005du, 0x00001173u, 0x0000018fu, 0x000400a8u, 0x0000005du, 0x00001174u, 0x00001173u, 0x000500a7u, 0x0000005du, 0x00001175u, 0x00001172u, 0x00001174u, 0x0003003eu, 0x0000116bu, 0x00001175u, 0x00050041u, 0x0000003eu, 0x00001177u, 0x0000018bu, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001178u, 0x00001177u, 0x0007000cu, 0x00000008u, 0x00001179u, 0x00000001u, 0x00000027u, 0x00001178u, 0x00000215u, 0x0003003eu, 0x00001176u, 0x00001179u, 0x0004003du, 0x00000008u, 0x0000117cu, 0x00001177u, 0x000500aau, 0x0000005du, 0x0000117du, 0x0000117cu, 0x00000218u, 0x0003003eu, 0x0000117au, 0x0000117du, 0x0004003du, 0x0000005du, 0x00001180u, 0x0000018fu, 0x000500a6u, 0x0000005du, 0x00001181u, 0x0000117du, 0x00001180u, 0x000600a9u, 0x00000008u, 0x00001182u, 0x00001181u, 0x00001140u, 0x0000040au, 0x0003003eu, 0x0000117eu, 0x00001182u, 0x000300f7u, 0x00001185u, 0x00000000u, 0x000400fau, 0x00001175u, 0x00001184u, 0x00001211u, 0x000200f8u, 0x00001184u, 0x0004003du, 0x00000008u, 0x00001186u, 0x0000018eu, 0x00050084u, 0x00000008u, 0x00001187u, 0x00000215u, 0x00001186u, 0x00050041u, 0x0000003eu, 0x00001188u, 0x0000018du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001189u, 0x00001188u, 0x00050080u, 0x00000008u, 0x0000118au, 0x00001189u, 0x00001187u, 0x0003003eu, 0x00001188u, 0x0000118au, 0x0004003du, 0x0000001eu, 0x0000118eu, 0x0000018bu, 0x0003003eu, 0x0000118du, 0x0000118eu, 0x0004003du, 0x00000008u, 0x00001191u, 0x00001188u, 0x0003003eu, 0x0000118fu, 0x00001191u, 0x00060039u, 0x0000005fu, 0x00001192u, 0x0000011eu, 0x0000118du, 0x0000118fu, 0x0003003eu, 0x0000118cu, 0x00001192u, 0x0004003du, 0x0000001eu, 0x00001195u, 0x0000018bu, 0x0003003eu, 0x00001194u, 0x00001195u, 0x00050041u, 0x0000003eu, 0x00001197u, 0x0000018du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001198u, 0x00001197u, 0x0003003eu, 0x00001196u, 0x00001198u, 0x00060039u, 0x00000008u, 0x00001199u, 0x00000122u, 0x00001194u, 0x00001196u, 0x0003003eu, 0x00001193u, 0x00001199u, 0x00050041u, 0x00000007u, 0x0000119bu, 0x0000018bu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x0000119cu, 0x0000119bu, 0x00050041u, 0x00000007u, 0x0000119du, 0x0000018bu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x0000119eu, 0x0000119du, 0x0004007cu, 0x00000006u, 0x000011a0u, 0x00001199u, 0x00050084u, 0x00000006u, 0x000011a1u, 0x0000119eu, 0x000011a0u, 0x00050080u, 0x00000006u, 0x000011a2u, 0x0000119cu, 0x000011a1u, 0x0003003eu, 0x0000119au, 0x000011a2u, 0x00050084u, 0x00000006u, 0x000011a5u, 0x000011a2u, 0x000003c4u, 0x00050050u, 0x0000005fu, 0x000011a8u, 0x00001179u, 0x00001179u, 0x000500c4u, 0x0000005fu, 0x000011a9u, 0x00001192u, 0x000011a8u, 0x0004007cu, 0x000000a2u, 0x000011aau, 0x000011a9u, 0x00050050u, 0x000000a2u, 0x000011abu, 0x000011a5u, 0x000011a5u, 0x00050080u, 0x000000a2u, 0x000011acu, 0x000011abu, 0x000011aau, 0x000500c7u, 0x000000a2u, 0x000011afu, 0x000011acu, 0x0000eee7u, 0x0003003eu, 0x000011a3u, 0x000011afu, 0x000500c7u, 0x00000006u, 0x000011b2u, 0x000011a0u, 0x00000485u, 0x00050084u, 0x00000006u, 0x000011b3u, 0x000011b2u, 0x0000035bu, 0x0004003du, 0x000000a2u, 0x000011b4u, 0x000011a3u, 0x00050050u, 0x000000a2u, 0x000011b5u, 0x000011b3u, 0x000011b3u, 0x000500c6u, 0x000000a2u, 0x000011b6u, 0x000011b4u, 0x000011b5u, 0x0003003eu, 0x000011a3u, 0x000011b6u, 0x0004003du, 0x000000a2u, 0x000011b8u, 0x000011a3u, 0x000500c2u, 0x000000a2u, 0x000011bau, 0x000011b8u, 0x0000eee8u, 0x0003003eu, 0x000011b7u, 0x000011bau, 0x0004007cu, 0x00000006u, 0x000011bcu, 0x00001182u, 0x0004003du, 0x000000a2u, 0x000011bdu, 0x000011b7u, 0x00050050u, 0x000000a2u, 0x000011beu, 0x000011bcu, 0x000011bcu, 0x000500c7u, 0x000000a2u, 0x000011bfu, 0x000011bdu, 0x000011beu, 0x0003003eu, 0x000011b7u, 0x000011bfu, 0x0004003du, 0x00000006u, 0x000011c1u, 0x0000018cu, 0x00050041u, 0x00000007u, 0x000011c2u, 0x000011b7u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000011c3u, 0x000011c2u, 0x000500c6u, 0x00000006u, 0x000011c4u, 0x000011c3u, 0x00000485u, 0x00080041u, 0x00000270u, 0x000011c5u, 0x00000f3au, 0x00000203u, 0x000011c1u, 0x00000203u, 0x000011c4u, 0x0004003du, 0x0000022bu, 0x000011c6u, 0x000011c5u, 0x00040071u, 0x00000006u, 0x000011c7u, 0x000011c6u, 0x0004007cu, 0x00000008u, 0x000011c8u, 0x000011c7u, 0x0003003eu, 0x000011c0u, 0x000011c8u, 0x0004003du, 0x00000006u, 0x000011cau, 0x0000018cu, 0x00050041u, 0x00000007u, 0x000011cbu, 0x000011b7u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000011ccu, 0x000011cbu, 0x000500c6u, 0x00000006u, 0x000011cdu, 0x000011ccu, 0x00000485u, 0x00080041u, 0x00000270u, 0x000011ceu, 0x00000f3au, 0x00000203u, 0x000011cau, 0x00000203u, 0x000011cdu, 0x0004003du, 0x0000022bu, 0x000011cfu, 0x000011ceu, 0x00040071u, 0x00000006u, 0x000011d0u, 0x000011cfu, 0x0004007cu, 0x00000008u, 0x000011d1u, 0x000011d0u, 0x0003003eu, 0x000011c9u, 0x000011d1u, 0x0004003du, 0x00000008u, 0x000011d3u, 0x00001177u, 0x000500aau, 0x0000005du, 0x000011d4u, 0x000011d3u, 0x00000212u, 0x000300f7u, 0x000011d6u, 0x00000000u, 0x000400fau, 0x000011d4u, 0x000011d5u, 0x000011ebu, 0x000200f8u, 0x000011d5u, 0x00050041u, 0x00000007u, 0x000011d7u, 0x000011a3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000011d8u, 0x000011d7u, 0x000500c7u, 0x00000006u, 0x000011d9u, 0x000011d8u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000011dau, 0x000011d9u, 0x00050084u, 0x00000008u, 0x000011dbu, 0x0000021bu, 0x000011dau, 0x00050082u, 0x00000008u, 0x000011dcu, 0x0000025eu, 0x000011dbu, 0x000500c3u, 0x00000008u, 0x000011deu, 0x000011c8u, 0x000011dcu, 0x0003003eu, 0x000011c0u, 0x000011deu, 0x00050041u, 0x00000007u, 0x000011dfu, 0x000011a3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000011e0u, 0x000011dfu, 0x000500c7u, 0x00000006u, 0x000011e1u, 0x000011e0u, 0x000003c4u, 0x0004007cu, 0x00000008u, 0x000011e2u, 0x000011e1u, 0x00050084u, 0x00000008u, 0x000011e3u, 0x0000021bu, 0x000011e2u, 0x00050082u, 0x00000008u, 0x000011e4u, 0x0000025eu, 0x000011e3u, 0x000500c3u, 0x00000008u, 0x000011e6u, 0x000011d1u, 0x000011e4u, 0x0003003eu, 0x000011c9u, 0x000011e6u, 0x000500c7u, 0x00000008u, 0x000011e8u, 0x000011deu, 0x0000038bu, 0x0003003eu, 0x000011c0u, 0x000011e8u, 0x000500c7u, 0x00000008u, 0x000011eau, 0x000011e6u, 0x0000038bu, 0x0003003eu, 0x000011c9u, 0x000011eau, 0x000200f9u, 0x000011d6u, 0x000200f8u, 0x000011ebu, 0x0004003du, 0x00000008u, 0x000011edu, 0x00001177u, 0x000500aau, 0x0000005du, 0x000011eeu, 0x000011edu, 0x00000203u, 0x000300f7u, 0x000011f0u, 0x00000000u, 0x000400fau, 0x000011eeu, 0x000011efu, 0x00001207u, 0x000200f8u, 0x000011efu, 0x00050041u, 0x00000007u, 0x000011f1u, 0x000011a3u, 0x00000374u, 0x0004003du, 0x00000006u, 0x000011f2u, 0x000011f1u, 0x000500c7u, 0x00000006u, 0x000011f3u, 0x000011f2u, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000011f4u, 0x000011f3u, 0x00050084u, 0x00000008u, 0x000011f5u, 0x0000021bu, 0x000011f4u, 0x00050082u, 0x00000008u, 0x000011f6u, 0x00000276u, 0x000011f5u, 0x000500c3u, 0x00000008u, 0x000011f8u, 0x000011c8u, 0x000011f6u, 0x0003003eu, 0x000011c0u, 0x000011f8u, 0x00050041u, 0x00000007u, 0x000011f9u, 0x000011a3u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000011fau, 0x000011f9u, 0x000500c7u, 0x00000006u, 0x000011fbu, 0x000011fau, 0x0000048bu, 0x0004007cu, 0x00000008u, 0x000011fcu, 0x000011fbu, 0x00050084u, 0x00000008u, 0x000011fdu, 0x0000021bu, 0x000011fcu, 0x00050082u, 0x00000008u, 0x000011feu, 0x00000276u, 0x000011fdu, 0x000500c3u, 0x00000008u, 0x00001200u, 0x000011d1u, 0x000011feu, 0x0003003eu, 0x000011c9u, 0x00001200u, 0x000500c7u, 0x00000008u, 0x00001202u, 0x000011f8u, 0x00000540u, 0x00050084u, 0x00000008u, 0x00001203u, 0x00001202u, 0x00000422u, 0x0003003eu, 0x000011c0u, 0x00001203u, 0x000500c7u, 0x00000008u, 0x00001205u, 0x00001200u, 0x00000540u, 0x00050084u, 0x00000008u, 0x00001206u, 0x00001205u, 0x00000422u, 0x0003003eu, 0x000011c9u, 0x00001206u, 0x000200f9u, 0x000011f0u, 0x000200f8u, 0x00001207u, 0x000500c3u, 0x00000008u, 0x00001209u, 0x000011c8u, 0x0000025eu, 0x0003003eu, 0x000011c0u, 0x00001209u, 0x000500c3u, 0x00000008u, 0x0000120bu, 0x000011d1u, 0x0000025eu, 0x0003003eu, 0x000011c9u, 0x0000120bu, 0x000200f9u, 0x000011f0u, 0x000200f8u, 0x000011f0u, 0x000700f5u, 0x00000008u, 0x0000eaa1u, 0x00001206u, 0x000011efu, 0x0000120bu, 0x00001207u, 0x000700f5u, 0x00000008u, 0x0000ea9fu, 0x00001203u, 0x000011efu, 0x00001209u, 0x00001207u, 0x000200f9u, 0x000011d6u, 0x000200f8u, 0x000011d6u, 0x000700f5u, 0x00000008u, 0x0000eaa0u, 0x000011eau, 0x000011d5u, 0x0000eaa1u, 0x000011f0u, 0x000700f5u, 0x00000008u, 0x0000ea9eu, 0x000011e8u, 0x000011d5u, 0x0000ea9fu, 0x000011f0u, 0x000500c4u, 0x00000008u, 0x0000120eu, 0x0000ea9eu, 0x0000025eu, 0x000500c5u, 0x00000008u, 0x00001210u, 0x0000120eu, 0x0000eaa0u, 0x0003003eu, 0x0000120cu, 0x00001210u, 0x000200f9u, 0x00001185u, 0x000200f8u, 0x00001211u, 0x0004003du, 0x00000008u, 0x00001212u, 0x0000018eu, 0x00050041u, 0x0000003eu, 0x00001213u, 0x0000018du, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001214u, 0x00001213u, 0x00050080u, 0x00000008u, 0x00001215u, 0x00001214u, 0x00001212u, 0x0003003eu, 0x00001213u, 0x00001215u, 0x0004003du, 0x0000001eu, 0x00001219u, 0x0000018bu, 0x0003003eu, 0x00001218u, 0x00001219u, 0x0004003du, 0x00000008u, 0x0000121cu, 0x00001213u, 0x0003003eu, 0x0000121au, 0x0000121cu, 0x00060039u, 0x00000008u, 0x0000121du, 0x00000119u, 0x00001218u, 0x0000121au, 0x0003003eu, 0x00001217u, 0x0000121du, 0x0004003du, 0x0000001eu, 0x00001220u, 0x0000018bu, 0x0003003eu, 0x0000121fu, 0x00001220u, 0x00050041u, 0x0000003eu, 0x00001222u, 0x0000018du, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001223u, 0x00001222u, 0x0003003eu, 0x00001221u, 0x00001223u, 0x00060039u, 0x00000008u, 0x00001224u, 0x00000122u, 0x0000121fu, 0x00001221u, 0x0003003eu, 0x0000121eu, 0x00001224u, 0x00050041u, 0x00000007u, 0x00001226u, 0x0000018bu, 0x0000021bu, 0x0004003du, 0x00000006u, 0x00001227u, 0x00001226u, 0x00050041u, 0x00000007u, 0x00001228u, 0x0000018bu, 0x0000021eu, 0x0004003du, 0x00000006u, 0x00001229u, 0x00001228u, 0x0004007cu, 0x00000006u, 0x0000122bu, 0x00001224u, 0x00050084u, 0x00000006u, 0x0000122cu, 0x00001229u, 0x0000122bu, 0x00050080u, 0x00000006u, 0x0000122du, 0x00001227u, 0x0000122cu, 0x0003003eu, 0x00001225u, 0x0000122du, 0x00050084u, 0x00000006u, 0x00001230u, 0x0000122du, 0x000003c4u, 0x000500c4u, 0x00000008u, 0x00001233u, 0x0000121du, 0x00001179u, 0x0004007cu, 0x00000006u, 0x00001234u, 0x00001233u, 0x00050080u, 0x00000006u, 0x00001235u, 0x00001230u, 0x00001234u, 0x000500c7u, 0x00000006u, 0x00001236u, 0x00001235u, 0x000011adu, 0x0003003eu, 0x0000122eu, 0x00001236u, 0x000500c7u, 0x00000006u, 0x00001239u, 0x0000122bu, 0x00000485u, 0x00050084u, 0x00000006u, 0x0000123au, 0x00001239u, 0x0000035bu, 0x000500c6u, 0x00000006u, 0x0000123cu, 0x00001236u, 0x0000123au, 0x0003003eu, 0x0000122eu, 0x0000123cu, 0x000500c2u, 0x00000006u, 0x0000123fu, 0x0000123cu, 0x000003c4u, 0x0003003eu, 0x0000123du, 0x0000123fu, 0x0004007cu, 0x00000006u, 0x00001241u, 0x00001182u, 0x000500c7u, 0x00000006u, 0x00001243u, 0x0000123fu, 0x00001241u, 0x0003003eu, 0x0000123du, 0x00001243u, 0x0004003du, 0x00000006u, 0x00001244u, 0x0000018cu, 0x000500c6u, 0x00000006u, 0x00001246u, 0x00001243u, 0x00000485u, 0x00080041u, 0x00000270u, 0x00001247u, 0x00000f3au, 0x00000203u, 0x00001244u, 0x00000203u, 0x00001246u, 0x0004003du, 0x0000022bu, 0x00001248u, 0x00001247u, 0x00040071u, 0x00000006u, 0x00001249u, 0x00001248u, 0x0004007cu, 0x00000008u, 0x0000124au, 0x00001249u, 0x0003003eu, 0x0000120cu, 0x0000124au, 0x0004003du, 0x0000005du, 0x0000124bu, 0x0000018fu, 0x000300f7u, 0x0000124du, 0x00000000u, 0x000400fau, 0x0000124bu, 0x0000124cu, 0x0000124du, 0x000200f8u, 0x0000124cu, 0x0004003du, 0x00000008u, 0x0000124fu, 0x00001177u, 0x000500aau, 0x0000005du, 0x00001250u, 0x0000124fu, 0x00000203u, 0x000300f7u, 0x00001252u, 0x00000000u, 0x000400fau, 0x00001250u, 0x00001251u, 0x00001266u, 0x000200f8u, 0x00001251u, 0x000500c7u, 0x00000006u, 0x00001255u, 0x0000123cu, 0x0000048bu, 0x00050084u, 0x00000006u, 0x00001256u, 0x00000701u, 0x00001255u, 0x00050082u, 0x00000006u, 0x00001257u, 0x00001253u, 0x00001256u, 0x000500c3u, 0x00000008u, 0x00001259u, 0x0000124au, 0x00001257u, 0x0003003eu, 0x0000120cu, 0x00001259u, 0x000500c7u, 0x00000008u, 0x0000125bu, 0x00001259u, 0x00000540u, 0x0003003eu, 0x0000120cu, 0x0000125bu, 0x00050041u, 0x0000003eu, 0x0000125cu, 0x0000018bu, 0x0000025eu, 0x0004003du, 0x00000008u, 0x0000125du, 0x0000125cu, 0x000500c4u, 0x00000008u, 0x0000125eu, 0x0000125du, 0x0000021bu, 0x000500c5u, 0x00000008u, 0x00001260u, 0x0000125bu, 0x0000125eu, 0x0003003eu, 0x0000120cu, 0x00001260u, 0x000500c4u, 0x00000008u, 0x00001262u, 0x00001260u, 0x00000215u, 0x0003003eu, 0x0000120cu, 0x00001262u, 0x0004003du, 0x00000008u, 0x00001263u, 0x0000018eu, 0x00050080u, 0x00000008u, 0x00001265u, 0x00001262u, 0x00001263u, 0x0003003eu, 0x0000120cu, 0x00001265u, 0x000200f9u, 0x00001252u, 0x000200f8u, 0x00001266u, 0x000500c7u, 0x00000006u, 0x00001268u, 0x0000123cu, 0x000003c4u, 0x00050084u, 0x00000006u, 0x00001269u, 0x00000701u, 0x00001268u, 0x00050082u, 0x00000006u, 0x0000126au, 0x0000035bu, 0x00001269u, 0x000500c3u, 0x00000008u, 0x0000126cu, 0x0000124au, 0x0000126au, 0x0003003eu, 0x0000120cu, 0x0000126cu, 0x000500c7u, 0x00000008u, 0x0000126eu, 0x0000126cu, 0x0000038bu, 0x0003003eu, 0x0000120cu, 0x0000126eu, 0x000500c4u, 0x00000008u, 0x00001270u, 0x0000126eu, 0x00000215u, 0x0003003eu, 0x0000120cu, 0x00001270u, 0x0004003du, 0x00000008u, 0x00001271u, 0x0000018eu, 0x00050080u, 0x00000008u, 0x00001273u, 0x00001270u, 0x00001271u, 0x0003003eu, 0x0000120cu, 0x00001273u, 0x000200f9u, 0x00001252u, 0x000200f8u, 0x00001252u, 0x000700f5u, 0x00000008u, 0x0000ea9du, 0x00001265u, 0x00001251u, 0x00001273u, 0x00001266u, 0x0004003du, 0x00000006u, 0x00001274u, 0x0000018cu, 0x000500c5u, 0x00000008u, 0x00001277u, 0x0000ea9du, 0x00001276u, 0x000500c6u, 0x00000008u, 0x00001278u, 0x00001277u, 0x00000212u, 0x00080041u, 0x00000270u, 0x00001279u, 0x00000f3au, 0x00000203u, 0x00001274u, 0x00000203u, 0x00001278u, 0x0004003du, 0x0000022bu, 0x0000127au, 0x00001279u, 0x00040071u, 0x00000006u, 0x0000127bu, 0x0000127au, 0x0004007cu, 0x00000008u, 0x0000127cu, 0x0000127bu, 0x0003003eu, 0x0000120cu, 0x0000127cu, 0x000200f9u, 0x0000124du, 0x000200f8u, 0x0000124du, 0x000700f5u, 0x00000008u, 0x0000eaa3u, 0x0000124au, 0x00001211u, 0x0000127cu, 0x00001252u, 0x000200f9u, 0x00001185u, 0x000200f8u, 0x00001185u, 0x000700f5u, 0x00000008u, 0x0000eaa2u, 0x00001210u, 0x000011d6u, 0x0000eaa3u, 0x0000124du, 0x000200feu, 0x0000eaa2u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000199u, 0x00000000u, 0x0000018au, 0x00030037u, 0x00000115u, 0x00000193u, 0x00030037u, 0x00000007u, 0x00000194u, 0x00030037u, 0x00000060u, 0x00000195u, 0x00030037u, 0x0000003eu, 0x00000196u, 0x00030037u, 0x0000005eu, 0x00000197u, 0x00030037u, 0x0000005eu, 0x00000198u, 0x000200f8u, 0x0000019au, 0x0004003bu, 0x0000003eu, 0x00001285u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001288u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001289u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001291u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001294u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001295u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000012a0u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000012a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000012abu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012adu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000012afu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012b0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012b2u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000012beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000012c0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012c2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000012c4u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012c6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000012c8u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001280u, 0x00000193u, 0x00000203u, 0x0004003du, 0x00000006u, 0x00001281u, 0x00001280u, 0x0004007cu, 0x00000008u, 0x00001282u, 0x00001281u, 0x00050041u, 0x0000003eu, 0x00001283u, 0x00000193u, 0x0000026au, 0x0004003du, 0x00000008u, 0x00001284u, 0x00001283u, 0x00050041u, 0x0000003eu, 0x00001286u, 0x00000195u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001287u, 0x00001286u, 0x0003003eu, 0x00001285u, 0x00001287u, 0x0003003eu, 0x00001288u, 0x00001282u, 0x0003003eu, 0x00001289u, 0x00001284u, 0x00070039u, 0x00000008u, 0x0000128au, 0x00000188u, 0x00001285u, 0x00001288u, 0x00001289u, 0x0003003eu, 0x00001286u, 0x0000128au, 0x00050041u, 0x00000007u, 0x0000128cu, 0x00000193u, 0x00000215u, 0x0004003du, 0x00000006u, 0x0000128du, 0x0000128cu, 0x0004007cu, 0x00000008u, 0x0000128eu, 0x0000128du, 0x00050041u, 0x0000003eu, 0x0000128fu, 0x00000193u, 0x00000276u, 0x0004003du, 0x00000008u, 0x00001290u, 0x0000128fu, 0x00050041u, 0x0000003eu, 0x00001292u, 0x00000195u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001293u, 0x00001292u, 0x0003003eu, 0x00001291u, 0x00001293u, 0x0003003eu, 0x00001294u, 0x0000128eu, 0x0003003eu, 0x00001295u, 0x00001290u, 0x00070039u, 0x00000008u, 0x00001296u, 0x00000188u, 0x00001291u, 0x00001294u, 0x00001295u, 0x0003003eu, 0x00001292u, 0x00001296u, 0x0004003du, 0x0000005fu, 0x00001298u, 0x00000195u, 0x000500c3u, 0x0000005fu, 0x0000129au, 0x00001298u, 0x0000eee5u, 0x0003003eu, 0x00000195u, 0x0000129au, 0x00060041u, 0x00000cd0u, 0x0000129bu, 0x00000ccfu, 0x00000203u, 0x00000215u, 0x0004003du, 0x00000008u, 0x0000129cu, 0x0000129bu, 0x000500aau, 0x0000005du, 0x0000129du, 0x0000129cu, 0x00000203u, 0x000300f7u, 0x0000129fu, 0x00000000u, 0x000400fau, 0x0000129du, 0x0000129eu, 0x000012a1u, 0x000200f8u, 0x0000129eu, 0x0003003eu, 0x000012a0u, 0x00000203u, 0x000200f9u, 0x0000129fu, 0x000200f8u, 0x000012a1u, 0x000500aau, 0x0000005du, 0x000012a4u, 0x0000129cu, 0x00000212u, 0x000300f7u, 0x000012a6u, 0x00000000u, 0x000400fau, 0x000012a4u, 0x000012a5u, 0x000012bdu, 0x000200f8u, 0x000012a5u, 0x0004003du, 0x00000008u, 0x000012a7u, 0x00000196u, 0x000500c3u, 0x00000008u, 0x000012a8u, 0x000012a7u, 0x00000212u, 0x0004003du, 0x0000001eu, 0x000012aau, 0x00000193u, 0x0003003eu, 0x000012a9u, 0x000012aau, 0x0004003du, 0x00000006u, 0x000012acu, 0x00000194u, 0x0003003eu, 0x000012abu, 0x000012acu, 0x0004003du, 0x0000005fu, 0x000012aeu, 0x00000195u, 0x0003003eu, 0x000012adu, 0x000012aeu, 0x0003003eu, 0x000012afu, 0x000012a8u, 0x0004003du, 0x0000005du, 0x000012b1u, 0x00000197u, 0x0003003eu, 0x000012b0u, 0x000012b1u, 0x0004003du, 0x0000005du, 0x000012b3u, 0x00000198u, 0x0003003eu, 0x000012b2u, 0x000012b3u, 0x000a0039u, 0x00000008u, 0x000012b4u, 0x00000191u, 0x000012a9u, 0x000012abu, 0x000012adu, 0x000012afu, 0x000012b0u, 0x000012b2u, 0x0003003eu, 0x000012a0u, 0x000012b4u, 0x0004003du, 0x00000008u, 0x000012b5u, 0x00000196u, 0x000500c7u, 0x00000008u, 0x000012b6u, 0x000012b5u, 0x00000212u, 0x00050084u, 0x00000008u, 0x000012b7u, 0x0000025eu, 0x000012b6u, 0x00050082u, 0x00000008u, 0x000012b8u, 0x0000025eu, 0x000012b7u, 0x000500c3u, 0x00000008u, 0x000012bau, 0x000012b4u, 0x000012b8u, 0x0003003eu, 0x000012a0u, 0x000012bau, 0x000500c7u, 0x00000008u, 0x000012bcu, 0x000012bau, 0x0000038bu, 0x0003003eu, 0x000012a0u, 0x000012bcu, 0x000200f9u, 0x000012a6u, 0x000200f8u, 0x000012bdu, 0x0004003du, 0x0000001eu, 0x000012bfu, 0x00000193u, 0x0003003eu, 0x000012beu, 0x000012bfu, 0x0004003du, 0x00000006u, 0x000012c1u, 0x00000194u, 0x0003003eu, 0x000012c0u, 0x000012c1u, 0x0004003du, 0x0000005fu, 0x000012c3u, 0x00000195u, 0x0003003eu, 0x000012c2u, 0x000012c3u, 0x0004003du, 0x00000008u, 0x000012c5u, 0x00000196u, 0x0003003eu, 0x000012c4u, 0x000012c5u, 0x0004003du, 0x0000005du, 0x000012c7u, 0x00000197u, 0x0003003eu, 0x000012c6u, 0x000012c7u, 0x0004003du, 0x0000005du, 0x000012c9u, 0x00000198u, 0x0003003eu, 0x000012c8u, 0x000012c9u, 0x000a0039u, 0x00000008u, 0x000012cau, 0x00000191u, 0x000012beu, 0x000012c0u, 0x000012c2u, 0x000012c4u, 0x000012c6u, 0x000012c8u, 0x0003003eu, 0x000012a0u, 0x000012cau, 0x000200f9u, 0x000012a6u, 0x000200f8u, 0x000012a6u, 0x000700f5u, 0x00000008u, 0x0000eaa5u, 0x000012bcu, 0x000012a5u, 0x000012cau, 0x000012bdu, 0x000200f9u, 0x0000129fu, 0x000200f8u, 0x0000129fu, 0x000700f5u, 0x00000008u, 0x0000eaa4u, 0x00000203u, 0x0000129eu, 0x0000eaa5u, 0x000012a6u, 0x000200feu, 0x0000eaa4u, 0x00010038u, 0x00050036u, 0x0000005fu, 0x000001a1u, 0x00000000u, 0x0000019bu, 0x00030037u, 0x00000060u, 0x0000019cu, 0x00030037u, 0x00000060u, 0x0000019du, 0x00030037u, 0x00000060u, 0x0000019eu, 0x00030037u, 0x00000060u, 0x0000019fu, 0x00030037u, 0x00000060u, 0x000001a0u, 0x000200f8u, 0x000001a2u, 0x0004003bu, 0x0000003eu, 0x000012ceu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012d4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012dbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012deu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000012ebu, 0x00000007u, 0x00050041u, 0x0000003eu, 0x000012cfu, 0x000001a0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000012d0u, 0x000012cfu, 0x00050041u, 0x0000003eu, 0x000012d1u, 0x000001a0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000012d2u, 0x000012d1u, 0x00050080u, 0x00000008u, 0x000012d3u, 0x000012d0u, 0x000012d2u, 0x0003003eu, 0x000012ceu, 0x000012d3u, 0x000500afu, 0x0000005du, 0x000012d6u, 0x000012d3u, 0x0000037du, 0x0004003du, 0x0000005fu, 0x000012d7u, 0x0000019fu, 0x0004003du, 0x0000005fu, 0x000012d8u, 0x0000019cu, 0x00050050u, 0x00000879u, 0x000012d9u, 0x000012d6u, 0x000012d6u, 0x000600a9u, 0x0000005fu, 0x000012dau, 0x000012d9u, 0x000012d7u, 0x000012d8u, 0x0003003eu, 0x000012d4u, 0x000012dau, 0x000300f7u, 0x000012e0u, 0x00000000u, 0x000400fau, 0x000012d6u, 0x000012dfu, 0x000012e5u, 0x000200f8u, 0x000012dfu, 0x0004003du, 0x0000005fu, 0x000012e1u, 0x000001a0u, 0x0007004fu, 0x0000005fu, 0x000012e2u, 0x000012e1u, 0x000012e1u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000012e4u, 0x0000eeeeu, 0x000012e2u, 0x0003003eu, 0x000012deu, 0x000012e4u, 0x000200f9u, 0x000012e0u, 0x000200f8u, 0x000012e5u, 0x0004003du, 0x0000005fu, 0x000012e6u, 0x000001a0u, 0x0003003eu, 0x000012deu, 0x000012e6u, 0x000200f9u, 0x000012e0u, 0x000200f8u, 0x000012e0u, 0x000700f5u, 0x0000005fu, 0x0000eaa6u, 0x000012e4u, 0x000012dfu, 0x000012e6u, 0x000012e5u, 0x00050051u, 0x00000008u, 0x000012e8u, 0x0000eaa6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000012e9u, 0x0000eaa6u, 0x00000001u, 0x0003003eu, 0x000012dbu, 0x0000eaa6u, 0x0004003du, 0x0000005fu, 0x000012ecu, 0x0000019du, 0x00050082u, 0x0000005fu, 0x000012eeu, 0x000012ecu, 0x000012dau, 0x00050041u, 0x0000003eu, 0x000012efu, 0x000012dbu, 0x00000374u, 0x0004003du, 0x00000008u, 0x000012f0u, 0x000012efu, 0x00050050u, 0x0000005fu, 0x000012f1u, 0x000012f0u, 0x000012f0u, 0x00050084u, 0x0000005fu, 0x000012f2u, 0x000012eeu, 0x000012f1u, 0x0003003eu, 0x000012ebu, 0x000012f2u, 0x0004003du, 0x0000005fu, 0x000012f3u, 0x0000019eu, 0x00050082u, 0x0000005fu, 0x000012f5u, 0x000012f3u, 0x000012dau, 0x00050041u, 0x0000003eu, 0x000012f6u, 0x000012dbu, 0x00000485u, 0x0004003du, 0x00000008u, 0x000012f7u, 0x000012f6u, 0x00050050u, 0x0000005fu, 0x000012f8u, 0x000012f7u, 0x000012f7u, 0x00050084u, 0x0000005fu, 0x000012f9u, 0x000012f5u, 0x000012f8u, 0x00050080u, 0x0000005fu, 0x000012fbu, 0x000012f2u, 0x000012f9u, 0x0003003eu, 0x000012ebu, 0x000012fbu, 0x00050080u, 0x0000005fu, 0x000012feu, 0x000012fbu, 0x0000136fu, 0x0003003eu, 0x000012ebu, 0x000012feu, 0x000500c3u, 0x0000005fu, 0x00001301u, 0x000012feu, 0x0000eee5u, 0x0003003eu, 0x000012ebu, 0x00001301u, 0x00050080u, 0x0000005fu, 0x00001304u, 0x00001301u, 0x000012dau, 0x0003003eu, 0x000012ebu, 0x00001304u, 0x000200feu, 0x00001304u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001adu, 0x00000000u, 0x000001a3u, 0x00030037u, 0x00000115u, 0x000001a4u, 0x00030037u, 0x00000007u, 0x000001a5u, 0x00030037u, 0x00000060u, 0x000001a6u, 0x00030037u, 0x0000005eu, 0x000001a7u, 0x00030037u, 0x0000005eu, 0x000001a8u, 0x00030037u, 0x0000005eu, 0x000001a9u, 0x00030037u, 0x0000005eu, 0x000001aau, 0x00030037u, 0x0000005eu, 0x000001abu, 0x00030037u, 0x0000005cu, 0x000001acu, 0x000200f8u, 0x000001aeu, 0x0004003bu, 0x0000005eu, 0x00001314u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001315u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001318u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001319u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000131au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001329u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000132au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000132du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000132eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000132fu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001335u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000133au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001343u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001344u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001346u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000134au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000134bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000134du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001351u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001355u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001357u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001359u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000135du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000135fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001361u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001378u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000137cu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000137fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001391u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001394u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000139eu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013a9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013aeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013b0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000013b6u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013c0u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013c5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013c7u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000013cau, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013d4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013d9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013dbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000013e1u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013ebu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000013f2u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000013fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013fdu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000013ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001400u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001401u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001403u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000140du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000140fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001411u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001412u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001413u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001415u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000141cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000141eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001420u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001421u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001422u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001424u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000142eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001430u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001432u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001433u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001434u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001436u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000143fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001441u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001445u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001447u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001453u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001455u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001456u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001457u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001459u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001460u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001462u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001464u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001465u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001466u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001468u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001472u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001474u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001476u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001477u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001478u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000147au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001493u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001495u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001497u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014a2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014a4u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014acu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014aeu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014b9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014bbu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014c2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014c4u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014cfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014d1u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014d9u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014dbu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014e6u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014e8u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014efu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014f1u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000014fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014fcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000014feu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001504u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001506u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001508u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001511u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001513u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001515u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000151au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000151cu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000151eu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001527u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001529u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000152bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001531u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001533u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001535u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000153eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001540u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001542u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001547u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000154bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001557u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001559u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000155bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000155cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001566u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001568u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000156au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000156bu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001572u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001574u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001576u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001577u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000157eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001580u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001582u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001583u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001592u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001594u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001596u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001597u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a8u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b3u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b6u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c4u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c7u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015ceu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015d0u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015dbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015ddu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015e5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015e7u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015f2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015f4u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000015f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015fbu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000015fdu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001606u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001608u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000160au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001610u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001612u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001614u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000161du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000161fu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001621u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000162fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001631u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001633u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000163cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000163eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001640u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001646u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001648u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000164au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001653u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001655u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001657u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000165cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000165eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001660u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001669u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000166bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000166du, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001673u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001675u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001677u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001680u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001682u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001684u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001689u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000168bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000168du, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001696u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001698u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000169au, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016a2u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016a4u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016afu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016b1u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016b8u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016bau, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016c5u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016c7u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016cfu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016d1u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016dcu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016deu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016edu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016efu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x000016f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016fau, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x000016fcu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001702u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001704u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001706u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000170fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001711u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001713u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001718u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000171au, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000171cu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001725u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001727u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001729u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000172fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001731u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001733u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000173cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000173eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001740u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001745u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001747u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001749u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001752u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001754u, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001756u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x0000175cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000175eu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x00001760u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001769u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000176bu, 0x00000007u, 0x0004003bu, 0x000000a3u, 0x0000176du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001776u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000177eu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001781u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000178au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000017a4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000017b2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017bau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017bfu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c2u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c5u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017c8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017cbu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017cdu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017ceu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017d1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017d4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017d7u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017dau, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017f6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x000017f9u, 0x00000007u, 0x00050041u, 0x0000003eu, 0x00001308u, 0x000001a4u, 0x0000027du, 0x0004003du, 0x00000008u, 0x00001309u, 0x00001308u, 0x000500c7u, 0x00000008u, 0x0000130au, 0x00001309u, 0x00000212u, 0x000500abu, 0x0000005du, 0x0000130bu, 0x0000130au, 0x00000203u, 0x00050041u, 0x00000007u, 0x0000130cu, 0x000001a4u, 0x00000203u, 0x0004003du, 0x00000006u, 0x0000130du, 0x0000130cu, 0x0004007cu, 0x00000008u, 0x0000130eu, 0x0000130du, 0x00050041u, 0x00000007u, 0x0000130fu, 0x000001a4u, 0x00000212u, 0x0004003du, 0x00000006u, 0x00001310u, 0x0000130fu, 0x0004007cu, 0x00000008u, 0x00001311u, 0x00001310u, 0x00050041u, 0x0000003eu, 0x00001312u, 0x000001a4u, 0x0000026au, 0x0004003du, 0x00000008u, 0x00001313u, 0x00001312u, 0x0003003eu, 0x00001314u, 0x0000130bu, 0x00050041u, 0x0000003eu, 0x00001316u, 0x000001a6u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001317u, 0x00001316u, 0x0003003eu, 0x00001315u, 0x00001317u, 0x0003003eu, 0x00001318u, 0x0000130eu, 0x0003003eu, 0x00001319u, 0x00001311u, 0x0003003eu, 0x0000131au, 0x00001313u, 0x00090039u, 0x00000008u, 0x0000131bu, 0x00000182u, 0x00001314u, 0x00001315u, 0x00001318u, 0x00001319u, 0x0000131au, 0x0003003eu, 0x00001316u, 0x0000131bu, 0x0004003du, 0x00000008u, 0x0000131eu, 0x00001308u, 0x000500c7u, 0x00000008u, 0x0000131fu, 0x0000131eu, 0x0000021bu, 0x000500abu, 0x0000005du, 0x00001320u, 0x0000131fu, 0x00000203u, 0x00050041u, 0x00000007u, 0x00001321u, 0x000001a4u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00001322u, 0x00001321u, 0x0004007cu, 0x00000008u, 0x00001323u, 0x00001322u, 0x00050041u, 0x00000007u, 0x00001324u, 0x000001a4u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00001325u, 0x00001324u, 0x0004007cu, 0x00000008u, 0x00001326u, 0x00001325u, 0x00050041u, 0x0000003eu, 0x00001327u, 0x000001a4u, 0x00000276u, 0x0004003du, 0x00000008u, 0x00001328u, 0x00001327u, 0x0003003eu, 0x00001329u, 0x00001320u, 0x00050041u, 0x0000003eu, 0x0000132bu, 0x000001a6u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000132cu, 0x0000132bu, 0x0003003eu, 0x0000132au, 0x0000132cu, 0x0003003eu, 0x0000132du, 0x00001323u, 0x0003003eu, 0x0000132eu, 0x00001326u, 0x0003003eu, 0x0000132fu, 0x00001328u, 0x00090039u, 0x00000008u, 0x00001330u, 0x00000182u, 0x00001329u, 0x0000132au, 0x0000132du, 0x0000132eu, 0x0000132fu, 0x0003003eu, 0x0000132bu, 0x00001330u, 0x0004003du, 0x0000005du, 0x00001332u, 0x000001a9u, 0x000300f7u, 0x00001334u, 0x00000000u, 0x000400fau, 0x00001332u, 0x00001333u, 0x00001339u, 0x000200f8u, 0x00001333u, 0x0004003du, 0x0000005fu, 0x00001336u, 0x000001a6u, 0x000500c7u, 0x0000005fu, 0x00001338u, 0x00001336u, 0x0000eee6u, 0x0003003eu, 0x00001335u, 0x00001338u, 0x000200f9u, 0x00001334u, 0x000200f8u, 0x00001339u, 0x0003003eu, 0x00001335u, 0x00000c37u, 0x000200f9u, 0x00001334u, 0x000200f8u, 0x00001334u, 0x00050041u, 0x0000003eu, 0x0000133bu, 0x00001335u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000133cu, 0x0000133bu, 0x00050041u, 0x0000003eu, 0x0000133du, 0x00001335u, 0x00000485u, 0x0004003du, 0x00000008u, 0x0000133eu, 0x0000133du, 0x00050080u, 0x00000008u, 0x0000133fu, 0x0000133cu, 0x0000133eu, 0x0003003eu, 0x0000133au, 0x0000133fu, 0x0004003du, 0x0000005fu, 0x00001340u, 0x000001a6u, 0x000500c3u, 0x0000005fu, 0x00001342u, 0x00001340u, 0x0000eee5u, 0x0003003eu, 0x000001a6u, 0x00001342u, 0x0004003du, 0x0000001eu, 0x00001345u, 0x000001a4u, 0x0003003eu, 0x00001344u, 0x00001345u, 0x0004003du, 0x00000008u, 0x00001348u, 0x00001316u, 0x0003003eu, 0x00001346u, 0x00001348u, 0x00060039u, 0x00000008u, 0x00001349u, 0x00000119u, 0x00001344u, 0x00001346u, 0x0003003eu, 0x00001343u, 0x00001349u, 0x0004003du, 0x0000001eu, 0x0000134cu, 0x000001a4u, 0x0003003eu, 0x0000134bu, 0x0000134cu, 0x0004003du, 0x00000008u, 0x0000134fu, 0x0000132bu, 0x0003003eu, 0x0000134du, 0x0000134fu, 0x00060039u, 0x00000008u, 0x00001350u, 0x00000122u, 0x0000134bu, 0x0000134du, 0x0003003eu, 0x0000134au, 0x00001350u, 0x0004003du, 0x00000008u, 0x00001353u, 0x00001316u, 0x00050080u, 0x00000008u, 0x00001354u, 0x00001353u, 0x00000212u, 0x0004003du, 0x0000001eu, 0x00001356u, 0x000001a4u, 0x0003003eu, 0x00001355u, 0x00001356u, 0x0003003eu, 0x00001357u, 0x00001354u, 0x00060039u, 0x00000008u, 0x00001358u, 0x00000119u, 0x00001355u, 0x00001357u, 0x0003003eu, 0x00001351u, 0x00001358u, 0x0004003du, 0x00000008u, 0x0000135bu, 0x0000132bu, 0x00050080u, 0x00000008u, 0x0000135cu, 0x0000135bu, 0x00000212u, 0x0004003du, 0x0000001eu, 0x0000135eu, 0x000001a4u, 0x0003003eu, 0x0000135du, 0x0000135eu, 0x0003003eu, 0x0000135fu, 0x0000135cu, 0x00060039u, 0x00000008u, 0x00001360u, 0x00000122u, 0x0000135du, 0x0000135fu, 0x0003003eu, 0x00001359u, 0x00001360u, 0x00050082u, 0x00000008u, 0x00001364u, 0x00001360u, 0x00001350u, 0x0007000cu, 0x00000008u, 0x00001366u, 0x00000001u, 0x0000002au, 0x00001364u, 0x00001365u, 0x0003003eu, 0x00001361u, 0x00001366u, 0x000500c7u, 0x00000008u, 0x00001368u, 0x00001350u, 0x0000038bu, 0x00050080u, 0x00000008u, 0x0000136au, 0x00001368u, 0x00001366u, 0x0003003eu, 0x00001359u, 0x0000136au, 0x0003003eu, 0x0000134au, 0x00001368u, 0x0004003du, 0x0000005du, 0x0000136du, 0x000001aau, 0x0004003du, 0x0000005fu, 0x0000136eu, 0x00001335u, 0x000500aau, 0x00000879u, 0x00001370u, 0x0000136eu, 0x0000136fu, 0x00050051u, 0x0000005du, 0x00001371u, 0x00001370u, 0x00000000u, 0x00050051u, 0x0000005du, 0x00001372u, 0x00001370u, 0x00000001u, 0x00060050u, 0x000003a1u, 0x00001373u, 0x0000136du, 0x00001371u, 0x00001372u, 0x0004009bu, 0x0000005du, 0x00001374u, 0x00001373u, 0x0003003eu, 0x000001aau, 0x00001374u, 0x0004003du, 0x0000005du, 0x00001375u, 0x000001aau, 0x000300f7u, 0x00001377u, 0x00000000u, 0x000400fau, 0x00001375u, 0x00001376u, 0x00001377u, 0x000200f8u, 0x00001376u, 0x0003003eu, 0x0000133au, 0x00000203u, 0x000200f9u, 0x00001377u, 0x000200f8u, 0x00001377u, 0x000600a9u, 0x00000008u, 0x0000ef1au, 0x00001375u, 0x00000203u, 0x0000133fu, 0x00050041u, 0x0000003eu, 0x00001379u, 0x000001a4u, 0x00000221u, 0x0004003du, 0x00000008u, 0x0000137au, 0x00001379u, 0x000500aau, 0x0000005du, 0x0000137bu, 0x0000137au, 0x00000212u, 0x0003003eu, 0x00001378u, 0x0000137bu, 0x000500afu, 0x0000005du, 0x0000137eu, 0x0000ef1au, 0x0000037du, 0x000300f7u, 0x00001381u, 0x00000000u, 0x000400fau, 0x0000137eu, 0x00001380u, 0x00001385u, 0x000200f8u, 0x00001380u, 0x00050050u, 0x0000005fu, 0x00001384u, 0x00001358u, 0x0000136au, 0x0003003eu, 0x0000137fu, 0x00001384u, 0x000200f9u, 0x00001381u, 0x000200f8u, 0x00001385u, 0x00050050u, 0x0000005fu, 0x00001388u, 0x00001349u, 0x00001368u, 0x0003003eu, 0x0000137fu, 0x00001388u, 0x000200f9u, 0x00001381u, 0x000200f8u, 0x00001381u, 0x000700f5u, 0x0000005fu, 0x0000eaadu, 0x00001384u, 0x00001380u, 0x00001388u, 0x00001385u, 0x0003003eu, 0x0000137cu, 0x0000eaadu, 0x0004003du, 0x0000005du, 0x0000138au, 0x000001a7u, 0x000300f7u, 0x0000138cu, 0x00000000u, 0x000400fau, 0x0000138au, 0x0000138bu, 0x00001481u, 0x000200f8u, 0x0000138bu, 0x0004003du, 0x00000008u, 0x0000138eu, 0x00001379u, 0x000300f7u, 0x00001390u, 0x00000000u, 0x000b00fbu, 0x0000138eu, 0x00001390u, 0x00000000u, 0x0000138fu, 0x00000002u, 0x0000138fu, 0x00000003u, 0x0000138fu, 0x00000004u, 0x0000138fu, 0x000200f8u, 0x0000138fu, 0x0003003eu, 0x00001391u, 0x0000137eu, 0x000600a9u, 0x00000008u, 0x00001396u, 0x0000137eu, 0x00000215u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00001397u, 0x00001396u, 0x0003003eu, 0x00001394u, 0x00001397u, 0x00050041u, 0x0000003eu, 0x00001398u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001399u, 0x00001398u, 0x000300f7u, 0x0000139du, 0x00000000u, 0x000700fbu, 0x00001399u, 0x0000139cu, 0x00000000u, 0x0000139au, 0x00000001u, 0x0000139bu, 0x000200f8u, 0x0000139cu, 0x0004007cu, 0x000000a2u, 0x0000143bu, 0x0000eaadu, 0x000600a9u, 0x00000008u, 0x0000143du, 0x0000137eu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x0000143eu, 0x0000143du, 0x0004003du, 0x0000001eu, 0x00001440u, 0x000001a4u, 0x0003003eu, 0x0000143fu, 0x00001440u, 0x0004003du, 0x00000006u, 0x00001442u, 0x000001a5u, 0x0003003eu, 0x00001441u, 0x00001442u, 0x0003003eu, 0x00001443u, 0x0000143bu, 0x0003003eu, 0x00001444u, 0x0000143eu, 0x0003003eu, 0x00001445u, 0x00001397u, 0x0004003du, 0x0000005du, 0x00001448u, 0x000001a8u, 0x0003003eu, 0x00001447u, 0x00001448u, 0x000a0039u, 0x00000009u, 0x00001449u, 0x0000015bu, 0x0000143fu, 0x00001441u, 0x00001443u, 0x00001444u, 0x00001445u, 0x00001447u, 0x0003003eu, 0x0000139eu, 0x00001449u, 0x0004003du, 0x0000005du, 0x0000144au, 0x000001a9u, 0x000300f7u, 0x0000144cu, 0x00000000u, 0x000400fau, 0x0000144au, 0x0000144bu, 0x0000144cu, 0x000200f8u, 0x0000144bu, 0x00050050u, 0x0000005fu, 0x0000144fu, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001450u, 0x0000144fu, 0x0004003du, 0x0000001eu, 0x00001452u, 0x000001a4u, 0x0003003eu, 0x00001451u, 0x00001452u, 0x0004003du, 0x00000006u, 0x00001454u, 0x000001a5u, 0x0003003eu, 0x00001453u, 0x00001454u, 0x0003003eu, 0x00001455u, 0x00001450u, 0x0003003eu, 0x00001456u, 0x00000485u, 0x0003003eu, 0x00001457u, 0x00001397u, 0x0004003du, 0x0000005du, 0x0000145au, 0x000001a8u, 0x0003003eu, 0x00001459u, 0x0000145au, 0x000a0039u, 0x00000009u, 0x0000145bu, 0x0000015bu, 0x00001451u, 0x00001453u, 0x00001455u, 0x00001456u, 0x00001457u, 0x00001459u, 0x0003003eu, 0x000013b6u, 0x0000145bu, 0x00050050u, 0x0000005fu, 0x0000145eu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000145fu, 0x0000145eu, 0x0004003du, 0x0000001eu, 0x00001461u, 0x000001a4u, 0x0003003eu, 0x00001460u, 0x00001461u, 0x0004003du, 0x00000006u, 0x00001463u, 0x000001a5u, 0x0003003eu, 0x00001462u, 0x00001463u, 0x0003003eu, 0x00001464u, 0x0000145fu, 0x0003003eu, 0x00001465u, 0x000003c4u, 0x0003003eu, 0x00001466u, 0x00001397u, 0x0004003du, 0x0000005du, 0x00001469u, 0x000001a8u, 0x0003003eu, 0x00001468u, 0x00001469u, 0x000a0039u, 0x00000009u, 0x0000146au, 0x0000015bu, 0x00001460u, 0x00001462u, 0x00001464u, 0x00001465u, 0x00001466u, 0x00001468u, 0x0003003eu, 0x000013cau, 0x0000146au, 0x000200f9u, 0x0000144cu, 0x000200f8u, 0x0000144cu, 0x000700f5u, 0x00000009u, 0x0000eb9fu, 0x0000eb3du, 0x0000139cu, 0x0000146au, 0x0000144bu, 0x000700f5u, 0x00000009u, 0x0000eb40u, 0x0000eb3du, 0x0000139cu, 0x0000145bu, 0x0000144bu, 0x0004003du, 0x0000005du, 0x0000146bu, 0x000001aau, 0x000300f7u, 0x0000146du, 0x00000000u, 0x000400fau, 0x0000146bu, 0x0000146cu, 0x0000146du, 0x000200f8u, 0x0000146cu, 0x00050050u, 0x0000005fu, 0x00001470u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001471u, 0x00001470u, 0x0004003du, 0x0000001eu, 0x00001473u, 0x000001a4u, 0x0003003eu, 0x00001472u, 0x00001473u, 0x0004003du, 0x00000006u, 0x00001475u, 0x000001a5u, 0x0003003eu, 0x00001474u, 0x00001475u, 0x0003003eu, 0x00001476u, 0x00001471u, 0x0003003eu, 0x00001477u, 0x0000048bu, 0x0003003eu, 0x00001478u, 0x00001397u, 0x0004003du, 0x0000005du, 0x0000147bu, 0x000001a8u, 0x0003003eu, 0x0000147au, 0x0000147bu, 0x000a0039u, 0x00000009u, 0x0000147cu, 0x0000015bu, 0x00001472u, 0x00001474u, 0x00001476u, 0x00001477u, 0x00001478u, 0x0000147au, 0x0003003eu, 0x000013e1u, 0x0000147cu, 0x000200f9u, 0x0000146du, 0x000200f8u, 0x0000146du, 0x000700f5u, 0x00000009u, 0x0000ebcdu, 0x0000eb3du, 0x0000144cu, 0x0000147cu, 0x0000146cu, 0x000200f9u, 0x0000139du, 0x000200f8u, 0x0000139au, 0x0004007cu, 0x000000a2u, 0x000013a0u, 0x0000eaadu, 0x00050041u, 0x0000003eu, 0x000013a1u, 0x000001a4u, 0x0000025eu, 0x0004003du, 0x00000008u, 0x000013a2u, 0x000013a1u, 0x0004007cu, 0x00000006u, 0x000013a3u, 0x000013a2u, 0x000600a9u, 0x00000008u, 0x000013a5u, 0x0000137eu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000013a6u, 0x000013a5u, 0x0004003du, 0x0000001eu, 0x000013a8u, 0x000001a4u, 0x0003003eu, 0x000013a7u, 0x000013a8u, 0x0004003du, 0x00000006u, 0x000013aau, 0x000001a5u, 0x0003003eu, 0x000013a9u, 0x000013aau, 0x0003003eu, 0x000013abu, 0x000013a0u, 0x0003003eu, 0x000013acu, 0x000013a3u, 0x0003003eu, 0x000013adu, 0x000013a6u, 0x0003003eu, 0x000013aeu, 0x00001397u, 0x0004003du, 0x0000005du, 0x000013b1u, 0x000001a8u, 0x0003003eu, 0x000013b0u, 0x000013b1u, 0x000b0039u, 0x00000009u, 0x000013b2u, 0x00000145u, 0x000013a7u, 0x000013a9u, 0x000013abu, 0x000013acu, 0x000013adu, 0x000013aeu, 0x000013b0u, 0x0003003eu, 0x0000139eu, 0x000013b2u, 0x0004003du, 0x0000005du, 0x000013b3u, 0x000001a9u, 0x000300f7u, 0x000013b5u, 0x00000000u, 0x000400fau, 0x000013b3u, 0x000013b4u, 0x000013b5u, 0x000200f8u, 0x000013b4u, 0x00050050u, 0x0000005fu, 0x000013b9u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x000013bau, 0x000013b9u, 0x0004003du, 0x00000008u, 0x000013bcu, 0x000013a1u, 0x0004007cu, 0x00000006u, 0x000013bdu, 0x000013bcu, 0x0004003du, 0x0000001eu, 0x000013bfu, 0x000001a4u, 0x0003003eu, 0x000013beu, 0x000013bfu, 0x0004003du, 0x00000006u, 0x000013c1u, 0x000001a5u, 0x0003003eu, 0x000013c0u, 0x000013c1u, 0x0003003eu, 0x000013c2u, 0x000013bau, 0x0003003eu, 0x000013c3u, 0x000013bdu, 0x0003003eu, 0x000013c4u, 0x00000485u, 0x0003003eu, 0x000013c5u, 0x00001397u, 0x0004003du, 0x0000005du, 0x000013c8u, 0x000001a8u, 0x0003003eu, 0x000013c7u, 0x000013c8u, 0x000b0039u, 0x00000009u, 0x000013c9u, 0x00000145u, 0x000013beu, 0x000013c0u, 0x000013c2u, 0x000013c3u, 0x000013c4u, 0x000013c5u, 0x000013c7u, 0x0003003eu, 0x000013b6u, 0x000013c9u, 0x00050050u, 0x0000005fu, 0x000013cdu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000013ceu, 0x000013cdu, 0x0004003du, 0x00000008u, 0x000013d0u, 0x000013a1u, 0x0004007cu, 0x00000006u, 0x000013d1u, 0x000013d0u, 0x0004003du, 0x0000001eu, 0x000013d3u, 0x000001a4u, 0x0003003eu, 0x000013d2u, 0x000013d3u, 0x0004003du, 0x00000006u, 0x000013d5u, 0x000001a5u, 0x0003003eu, 0x000013d4u, 0x000013d5u, 0x0003003eu, 0x000013d6u, 0x000013ceu, 0x0003003eu, 0x000013d7u, 0x000013d1u, 0x0003003eu, 0x000013d8u, 0x000003c4u, 0x0003003eu, 0x000013d9u, 0x00001397u, 0x0004003du, 0x0000005du, 0x000013dcu, 0x000001a8u, 0x0003003eu, 0x000013dbu, 0x000013dcu, 0x000b0039u, 0x00000009u, 0x000013ddu, 0x00000145u, 0x000013d2u, 0x000013d4u, 0x000013d6u, 0x000013d7u, 0x000013d8u, 0x000013d9u, 0x000013dbu, 0x0003003eu, 0x000013cau, 0x000013ddu, 0x000200f9u, 0x000013b5u, 0x000200f8u, 0x000013b5u, 0x000700f5u, 0x00000009u, 0x0000eba2u, 0x0000eb3du, 0x0000139au, 0x000013ddu, 0x000013b4u, 0x000700f5u, 0x00000009u, 0x0000eb43u, 0x0000eb3du, 0x0000139au, 0x000013c9u, 0x000013b4u, 0x0004003du, 0x0000005du, 0x000013deu, 0x000001aau, 0x000300f7u, 0x000013e0u, 0x00000000u, 0x000400fau, 0x000013deu, 0x000013dfu, 0x000013e0u, 0x000200f8u, 0x000013dfu, 0x00050050u, 0x0000005fu, 0x000013e4u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000013e5u, 0x000013e4u, 0x0004003du, 0x00000008u, 0x000013e7u, 0x000013a1u, 0x0004007cu, 0x00000006u, 0x000013e8u, 0x000013e7u, 0x0004003du, 0x0000001eu, 0x000013eau, 0x000001a4u, 0x0003003eu, 0x000013e9u, 0x000013eau, 0x0004003du, 0x00000006u, 0x000013ecu, 0x000001a5u, 0x0003003eu, 0x000013ebu, 0x000013ecu, 0x0003003eu, 0x000013edu, 0x000013e5u, 0x0003003eu, 0x000013eeu, 0x000013e8u, 0x0003003eu, 0x000013efu, 0x0000048bu, 0x0003003eu, 0x000013f0u, 0x00001397u, 0x0004003du, 0x0000005du, 0x000013f3u, 0x000001a8u, 0x0003003eu, 0x000013f2u, 0x000013f3u, 0x000b0039u, 0x00000009u, 0x000013f4u, 0x00000145u, 0x000013e9u, 0x000013ebu, 0x000013edu, 0x000013eeu, 0x000013efu, 0x000013f0u, 0x000013f2u, 0x0003003eu, 0x000013e1u, 0x000013f4u, 0x000200f9u, 0x000013e0u, 0x000200f8u, 0x000013e0u, 0x000700f5u, 0x00000009u, 0x0000ebd0u, 0x0000eb3du, 0x000013b5u, 0x000013f4u, 0x000013dfu, 0x000200f9u, 0x0000139du, 0x000200f8u, 0x0000139bu, 0x0004007cu, 0x000000a2u, 0x000013f7u, 0x0000eaadu, 0x000600a9u, 0x00000008u, 0x000013f9u, 0x0000137eu, 0x00000218u, 0x00000203u, 0x0004007cu, 0x00000006u, 0x000013fau, 0x000013f9u, 0x0004003du, 0x0000001eu, 0x000013fcu, 0x000001a4u, 0x0003003eu, 0x000013fbu, 0x000013fcu, 0x0004003du, 0x00000006u, 0x000013feu, 0x000001a5u, 0x0003003eu, 0x000013fdu, 0x000013feu, 0x0003003eu, 0x000013ffu, 0x000013f7u, 0x0003003eu, 0x00001400u, 0x000013fau, 0x0003003eu, 0x00001401u, 0x00001397u, 0x0004003du, 0x0000005du, 0x00001404u, 0x000001a8u, 0x0003003eu, 0x00001403u, 0x00001404u, 0x000a0039u, 0x00000009u, 0x00001405u, 0x0000014eu, 0x000013fbu, 0x000013fdu, 0x000013ffu, 0x00001400u, 0x00001401u, 0x00001403u, 0x0003003eu, 0x0000139eu, 0x00001405u, 0x0004003du, 0x0000005du, 0x00001406u, 0x000001a9u, 0x000300f7u, 0x00001408u, 0x00000000u, 0x000400fau, 0x00001406u, 0x00001407u, 0x00001408u, 0x000200f8u, 0x00001407u, 0x00050050u, 0x0000005fu, 0x0000140bu, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x0000140cu, 0x0000140bu, 0x0004003du, 0x0000001eu, 0x0000140eu, 0x000001a4u, 0x0003003eu, 0x0000140du, 0x0000140eu, 0x0004003du, 0x00000006u, 0x00001410u, 0x000001a5u, 0x0003003eu, 0x0000140fu, 0x00001410u, 0x0003003eu, 0x00001411u, 0x0000140cu, 0x0003003eu, 0x00001412u, 0x00000485u, 0x0003003eu, 0x00001413u, 0x00001397u, 0x0004003du, 0x0000005du, 0x00001416u, 0x000001a8u, 0x0003003eu, 0x00001415u, 0x00001416u, 0x000a0039u, 0x00000009u, 0x00001417u, 0x0000014eu, 0x0000140du, 0x0000140fu, 0x00001411u, 0x00001412u, 0x00001413u, 0x00001415u, 0x0003003eu, 0x000013b6u, 0x00001417u, 0x00050050u, 0x0000005fu, 0x0000141au, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000141bu, 0x0000141au, 0x0004003du, 0x0000001eu, 0x0000141du, 0x000001a4u, 0x0003003eu, 0x0000141cu, 0x0000141du, 0x0004003du, 0x00000006u, 0x0000141fu, 0x000001a5u, 0x0003003eu, 0x0000141eu, 0x0000141fu, 0x0003003eu, 0x00001420u, 0x0000141bu, 0x0003003eu, 0x00001421u, 0x000003c4u, 0x0003003eu, 0x00001422u, 0x00001397u, 0x0004003du, 0x0000005du, 0x00001425u, 0x000001a8u, 0x0003003eu, 0x00001424u, 0x00001425u, 0x000a0039u, 0x00000009u, 0x00001426u, 0x0000014eu, 0x0000141cu, 0x0000141eu, 0x00001420u, 0x00001421u, 0x00001422u, 0x00001424u, 0x0003003eu, 0x000013cau, 0x00001426u, 0x000200f9u, 0x00001408u, 0x000200f8u, 0x00001408u, 0x000700f5u, 0x00000009u, 0x0000eba4u, 0x0000eb3du, 0x0000139bu, 0x00001426u, 0x00001407u, 0x000700f5u, 0x00000009u, 0x0000eb45u, 0x0000eb3du, 0x0000139bu, 0x00001417u, 0x00001407u, 0x0004003du, 0x0000005du, 0x00001427u, 0x000001aau, 0x000300f7u, 0x00001429u, 0x00000000u, 0x000400fau, 0x00001427u, 0x00001428u, 0x00001429u, 0x000200f8u, 0x00001428u, 0x00050050u, 0x0000005fu, 0x0000142cu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000142du, 0x0000142cu, 0x0004003du, 0x0000001eu, 0x0000142fu, 0x000001a4u, 0x0003003eu, 0x0000142eu, 0x0000142fu, 0x0004003du, 0x00000006u, 0x00001431u, 0x000001a5u, 0x0003003eu, 0x00001430u, 0x00001431u, 0x0003003eu, 0x00001432u, 0x0000142du, 0x0003003eu, 0x00001433u, 0x0000048bu, 0x0003003eu, 0x00001434u, 0x00001397u, 0x0004003du, 0x0000005du, 0x00001437u, 0x000001a8u, 0x0003003eu, 0x00001436u, 0x00001437u, 0x000a0039u, 0x00000009u, 0x00001438u, 0x0000014eu, 0x0000142eu, 0x00001430u, 0x00001432u, 0x00001433u, 0x00001434u, 0x00001436u, 0x0003003eu, 0x000013e1u, 0x00001438u, 0x000200f9u, 0x00001429u, 0x000200f8u, 0x00001429u, 0x000700f5u, 0x00000009u, 0x0000ebd2u, 0x0000eb3du, 0x00001408u, 0x00001438u, 0x00001428u, 0x000200f9u, 0x0000139du, 0x000200f8u, 0x0000139du, 0x000900f5u, 0x00000009u, 0x0000ebccu, 0x0000ebcdu, 0x0000146du, 0x0000ebd0u, 0x000013e0u, 0x0000ebd2u, 0x00001429u, 0x000900f5u, 0x00000009u, 0x0000eb9du, 0x0000eb9fu, 0x0000146du, 0x0000eba2u, 0x000013e0u, 0x0000eba4u, 0x00001429u, 0x000900f5u, 0x00000009u, 0x0000eb6eu, 0x00001449u, 0x0000146du, 0x000013b2u, 0x000013e0u, 0x00001405u, 0x00001429u, 0x000900f5u, 0x00000009u, 0x0000eb3eu, 0x0000eb40u, 0x0000146du, 0x0000eb43u, 0x000013e0u, 0x0000eb45u, 0x00001429u, 0x000200f9u, 0x00001390u, 0x000200f8u, 0x00001390u, 0x000700f5u, 0x00000009u, 0x0000ebc8u, 0x0000eb3du, 0x0000138bu, 0x0000ebccu, 0x0000139du, 0x000700f5u, 0x00000009u, 0x0000eb99u, 0x0000eb3du, 0x0000138bu, 0x0000eb9du, 0x0000139du, 0x000700f5u, 0x00000009u, 0x0000eb6au, 0x0000eb3du, 0x0000138bu, 0x0000eb6eu, 0x0000139du, 0x000700f5u, 0x00000009u, 0x0000eb39u, 0x0000eb3du, 0x0000138bu, 0x0000eb3eu, 0x0000139du, 0x000200f9u, 0x0000138cu, 0x000200f8u, 0x00001481u, 0x0004003du, 0x00000008u, 0x00001483u, 0x00001379u, 0x000300f7u, 0x00001489u, 0x00000000u, 0x000d00fbu, 0x00001483u, 0x00001489u, 0x00000000u, 0x00001484u, 0x00000001u, 0x00001485u, 0x00000002u, 0x00001486u, 0x00000003u, 0x00001487u, 0x00000004u, 0x00001488u, 0x000200f8u, 0x00001484u, 0x00050041u, 0x0000003eu, 0x0000148au, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x0000148bu, 0x0000148au, 0x000300f7u, 0x00001490u, 0x00000000u, 0x000b00fbu, 0x0000148bu, 0x00001490u, 0x00000000u, 0x0000148cu, 0x00000001u, 0x0000148du, 0x00000002u, 0x0000148eu, 0x00000003u, 0x0000148fu, 0x000200f8u, 0x0000148cu, 0x0004007cu, 0x000000a2u, 0x00001492u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x00001494u, 0x000001a4u, 0x0003003eu, 0x00001493u, 0x00001494u, 0x0004003du, 0x00000006u, 0x00001496u, 0x000001a5u, 0x0003003eu, 0x00001495u, 0x00001496u, 0x0003003eu, 0x00001497u, 0x00001492u, 0x00070039u, 0x00000009u, 0x00001498u, 0x0000012fu, 0x00001493u, 0x00001495u, 0x00001497u, 0x0003003eu, 0x0000139eu, 0x00001498u, 0x0004003du, 0x0000005du, 0x00001499u, 0x000001a9u, 0x000300f7u, 0x0000149bu, 0x00000000u, 0x000400fau, 0x00001499u, 0x0000149au, 0x0000149bu, 0x000200f8u, 0x0000149au, 0x00050050u, 0x0000005fu, 0x0000149eu, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x0000149fu, 0x0000149eu, 0x0004003du, 0x0000001eu, 0x000014a1u, 0x000001a4u, 0x0003003eu, 0x000014a0u, 0x000014a1u, 0x0004003du, 0x00000006u, 0x000014a3u, 0x000001a5u, 0x0003003eu, 0x000014a2u, 0x000014a3u, 0x0003003eu, 0x000014a4u, 0x0000149fu, 0x00070039u, 0x00000009u, 0x000014a5u, 0x0000012fu, 0x000014a0u, 0x000014a2u, 0x000014a4u, 0x0003003eu, 0x000013b6u, 0x000014a5u, 0x00050050u, 0x0000005fu, 0x000014a8u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000014a9u, 0x000014a8u, 0x0004003du, 0x0000001eu, 0x000014abu, 0x000001a4u, 0x0003003eu, 0x000014aau, 0x000014abu, 0x0004003du, 0x00000006u, 0x000014adu, 0x000001a5u, 0x0003003eu, 0x000014acu, 0x000014adu, 0x0003003eu, 0x000014aeu, 0x000014a9u, 0x00070039u, 0x00000009u, 0x000014afu, 0x0000012fu, 0x000014aau, 0x000014acu, 0x000014aeu, 0x0003003eu, 0x000013cau, 0x000014afu, 0x000200f9u, 0x0000149bu, 0x000200f8u, 0x0000149bu, 0x000700f5u, 0x00000009u, 0x0000eba8u, 0x0000eb3du, 0x0000148cu, 0x000014afu, 0x0000149au, 0x000700f5u, 0x00000009u, 0x0000eb49u, 0x0000eb3du, 0x0000148cu, 0x000014a5u, 0x0000149au, 0x0004003du, 0x0000005du, 0x000014b0u, 0x000001aau, 0x000300f7u, 0x000014b2u, 0x00000000u, 0x000400fau, 0x000014b0u, 0x000014b1u, 0x000014b2u, 0x000200f8u, 0x000014b1u, 0x00050050u, 0x0000005fu, 0x000014b5u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000014b6u, 0x000014b5u, 0x0004003du, 0x0000001eu, 0x000014b8u, 0x000001a4u, 0x0003003eu, 0x000014b7u, 0x000014b8u, 0x0004003du, 0x00000006u, 0x000014bau, 0x000001a5u, 0x0003003eu, 0x000014b9u, 0x000014bau, 0x0003003eu, 0x000014bbu, 0x000014b6u, 0x00070039u, 0x00000009u, 0x000014bcu, 0x0000012fu, 0x000014b7u, 0x000014b9u, 0x000014bbu, 0x0003003eu, 0x000013e1u, 0x000014bcu, 0x000200f9u, 0x000014b2u, 0x000200f8u, 0x000014b2u, 0x000700f5u, 0x00000009u, 0x0000ebd6u, 0x0000eb3du, 0x0000149bu, 0x000014bcu, 0x000014b1u, 0x000200f9u, 0x00001490u, 0x000200f8u, 0x0000148du, 0x0004007cu, 0x000000a2u, 0x000014bfu, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x000014c1u, 0x000001a4u, 0x0003003eu, 0x000014c0u, 0x000014c1u, 0x0004003du, 0x00000006u, 0x000014c3u, 0x000001a5u, 0x0003003eu, 0x000014c2u, 0x000014c3u, 0x0003003eu, 0x000014c4u, 0x000014bfu, 0x00070039u, 0x00000009u, 0x000014c5u, 0x00000160u, 0x000014c0u, 0x000014c2u, 0x000014c4u, 0x0003003eu, 0x0000139eu, 0x000014c5u, 0x0004003du, 0x0000005du, 0x000014c6u, 0x000001a9u, 0x000300f7u, 0x000014c8u, 0x00000000u, 0x000400fau, 0x000014c6u, 0x000014c7u, 0x000014c8u, 0x000200f8u, 0x000014c7u, 0x00050050u, 0x0000005fu, 0x000014cbu, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x000014ccu, 0x000014cbu, 0x0004003du, 0x0000001eu, 0x000014ceu, 0x000001a4u, 0x0003003eu, 0x000014cdu, 0x000014ceu, 0x0004003du, 0x00000006u, 0x000014d0u, 0x000001a5u, 0x0003003eu, 0x000014cfu, 0x000014d0u, 0x0003003eu, 0x000014d1u, 0x000014ccu, 0x00070039u, 0x00000009u, 0x000014d2u, 0x00000160u, 0x000014cdu, 0x000014cfu, 0x000014d1u, 0x0003003eu, 0x000013b6u, 0x000014d2u, 0x00050050u, 0x0000005fu, 0x000014d5u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000014d6u, 0x000014d5u, 0x0004003du, 0x0000001eu, 0x000014d8u, 0x000001a4u, 0x0003003eu, 0x000014d7u, 0x000014d8u, 0x0004003du, 0x00000006u, 0x000014dau, 0x000001a5u, 0x0003003eu, 0x000014d9u, 0x000014dau, 0x0003003eu, 0x000014dbu, 0x000014d6u, 0x00070039u, 0x00000009u, 0x000014dcu, 0x00000160u, 0x000014d7u, 0x000014d9u, 0x000014dbu, 0x0003003eu, 0x000013cau, 0x000014dcu, 0x000200f9u, 0x000014c8u, 0x000200f8u, 0x000014c8u, 0x000700f5u, 0x00000009u, 0x0000ebaau, 0x0000eb3du, 0x0000148du, 0x000014dcu, 0x000014c7u, 0x000700f5u, 0x00000009u, 0x0000eb4bu, 0x0000eb3du, 0x0000148du, 0x000014d2u, 0x000014c7u, 0x0004003du, 0x0000005du, 0x000014ddu, 0x000001aau, 0x000300f7u, 0x000014dfu, 0x00000000u, 0x000400fau, 0x000014ddu, 0x000014deu, 0x000014dfu, 0x000200f8u, 0x000014deu, 0x00050050u, 0x0000005fu, 0x000014e2u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000014e3u, 0x000014e2u, 0x0004003du, 0x0000001eu, 0x000014e5u, 0x000001a4u, 0x0003003eu, 0x000014e4u, 0x000014e5u, 0x0004003du, 0x00000006u, 0x000014e7u, 0x000001a5u, 0x0003003eu, 0x000014e6u, 0x000014e7u, 0x0003003eu, 0x000014e8u, 0x000014e3u, 0x00070039u, 0x00000009u, 0x000014e9u, 0x00000160u, 0x000014e4u, 0x000014e6u, 0x000014e8u, 0x0003003eu, 0x000013e1u, 0x000014e9u, 0x000200f9u, 0x000014dfu, 0x000200f8u, 0x000014dfu, 0x000700f5u, 0x00000009u, 0x0000ebd8u, 0x0000eb3du, 0x000014c8u, 0x000014e9u, 0x000014deu, 0x000200f9u, 0x00001490u, 0x000200f8u, 0x0000148eu, 0x0004007cu, 0x000000a2u, 0x000014ecu, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x000014eeu, 0x000001a4u, 0x0003003eu, 0x000014edu, 0x000014eeu, 0x0004003du, 0x00000006u, 0x000014f0u, 0x000001a5u, 0x0003003eu, 0x000014efu, 0x000014f0u, 0x0003003eu, 0x000014f1u, 0x000014ecu, 0x00070039u, 0x00000009u, 0x000014f2u, 0x00000170u, 0x000014edu, 0x000014efu, 0x000014f1u, 0x0003003eu, 0x0000139eu, 0x000014f2u, 0x0004003du, 0x0000005du, 0x000014f3u, 0x000001a9u, 0x000300f7u, 0x000014f5u, 0x00000000u, 0x000400fau, 0x000014f3u, 0x000014f4u, 0x000014f5u, 0x000200f8u, 0x000014f4u, 0x00050050u, 0x0000005fu, 0x000014f8u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x000014f9u, 0x000014f8u, 0x0004003du, 0x0000001eu, 0x000014fbu, 0x000001a4u, 0x0003003eu, 0x000014fau, 0x000014fbu, 0x0004003du, 0x00000006u, 0x000014fdu, 0x000001a5u, 0x0003003eu, 0x000014fcu, 0x000014fdu, 0x0003003eu, 0x000014feu, 0x000014f9u, 0x00070039u, 0x00000009u, 0x000014ffu, 0x00000170u, 0x000014fau, 0x000014fcu, 0x000014feu, 0x0003003eu, 0x000013b6u, 0x000014ffu, 0x00050050u, 0x0000005fu, 0x00001502u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001503u, 0x00001502u, 0x0004003du, 0x0000001eu, 0x00001505u, 0x000001a4u, 0x0003003eu, 0x00001504u, 0x00001505u, 0x0004003du, 0x00000006u, 0x00001507u, 0x000001a5u, 0x0003003eu, 0x00001506u, 0x00001507u, 0x0003003eu, 0x00001508u, 0x00001503u, 0x00070039u, 0x00000009u, 0x00001509u, 0x00000170u, 0x00001504u, 0x00001506u, 0x00001508u, 0x0003003eu, 0x000013cau, 0x00001509u, 0x000200f9u, 0x000014f5u, 0x000200f8u, 0x000014f5u, 0x000700f5u, 0x00000009u, 0x0000ebacu, 0x0000eb3du, 0x0000148eu, 0x00001509u, 0x000014f4u, 0x000700f5u, 0x00000009u, 0x0000eb4du, 0x0000eb3du, 0x0000148eu, 0x000014ffu, 0x000014f4u, 0x0004003du, 0x0000005du, 0x0000150au, 0x000001aau, 0x000300f7u, 0x0000150cu, 0x00000000u, 0x000400fau, 0x0000150au, 0x0000150bu, 0x0000150cu, 0x000200f8u, 0x0000150bu, 0x00050050u, 0x0000005fu, 0x0000150fu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001510u, 0x0000150fu, 0x0004003du, 0x0000001eu, 0x00001512u, 0x000001a4u, 0x0003003eu, 0x00001511u, 0x00001512u, 0x0004003du, 0x00000006u, 0x00001514u, 0x000001a5u, 0x0003003eu, 0x00001513u, 0x00001514u, 0x0003003eu, 0x00001515u, 0x00001510u, 0x00070039u, 0x00000009u, 0x00001516u, 0x00000170u, 0x00001511u, 0x00001513u, 0x00001515u, 0x0003003eu, 0x000013e1u, 0x00001516u, 0x000200f9u, 0x0000150cu, 0x000200f8u, 0x0000150cu, 0x000700f5u, 0x00000009u, 0x0000ebdau, 0x0000eb3du, 0x000014f5u, 0x00001516u, 0x0000150bu, 0x000200f9u, 0x00001490u, 0x000200f8u, 0x0000148fu, 0x0004007cu, 0x000000a2u, 0x00001519u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x0000151bu, 0x000001a4u, 0x0003003eu, 0x0000151au, 0x0000151bu, 0x0004003du, 0x00000006u, 0x0000151du, 0x000001a5u, 0x0003003eu, 0x0000151cu, 0x0000151du, 0x0003003eu, 0x0000151eu, 0x00001519u, 0x00070039u, 0x00000009u, 0x0000151fu, 0x0000017au, 0x0000151au, 0x0000151cu, 0x0000151eu, 0x0003003eu, 0x0000139eu, 0x0000151fu, 0x0004003du, 0x0000005du, 0x00001520u, 0x000001a9u, 0x000300f7u, 0x00001522u, 0x00000000u, 0x000400fau, 0x00001520u, 0x00001521u, 0x00001522u, 0x000200f8u, 0x00001521u, 0x00050050u, 0x0000005fu, 0x00001525u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001526u, 0x00001525u, 0x0004003du, 0x0000001eu, 0x00001528u, 0x000001a4u, 0x0003003eu, 0x00001527u, 0x00001528u, 0x0004003du, 0x00000006u, 0x0000152au, 0x000001a5u, 0x0003003eu, 0x00001529u, 0x0000152au, 0x0003003eu, 0x0000152bu, 0x00001526u, 0x00070039u, 0x00000009u, 0x0000152cu, 0x0000017au, 0x00001527u, 0x00001529u, 0x0000152bu, 0x0003003eu, 0x000013b6u, 0x0000152cu, 0x00050050u, 0x0000005fu, 0x0000152fu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001530u, 0x0000152fu, 0x0004003du, 0x0000001eu, 0x00001532u, 0x000001a4u, 0x0003003eu, 0x00001531u, 0x00001532u, 0x0004003du, 0x00000006u, 0x00001534u, 0x000001a5u, 0x0003003eu, 0x00001533u, 0x00001534u, 0x0003003eu, 0x00001535u, 0x00001530u, 0x00070039u, 0x00000009u, 0x00001536u, 0x0000017au, 0x00001531u, 0x00001533u, 0x00001535u, 0x0003003eu, 0x000013cau, 0x00001536u, 0x000200f9u, 0x00001522u, 0x000200f8u, 0x00001522u, 0x000700f5u, 0x00000009u, 0x0000ebaeu, 0x0000eb3du, 0x0000148fu, 0x00001536u, 0x00001521u, 0x000700f5u, 0x00000009u, 0x0000eb4fu, 0x0000eb3du, 0x0000148fu, 0x0000152cu, 0x00001521u, 0x0004003du, 0x0000005du, 0x00001537u, 0x000001aau, 0x000300f7u, 0x00001539u, 0x00000000u, 0x000400fau, 0x00001537u, 0x00001538u, 0x00001539u, 0x000200f8u, 0x00001538u, 0x00050050u, 0x0000005fu, 0x0000153cu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000153du, 0x0000153cu, 0x0004003du, 0x0000001eu, 0x0000153fu, 0x000001a4u, 0x0003003eu, 0x0000153eu, 0x0000153fu, 0x0004003du, 0x00000006u, 0x00001541u, 0x000001a5u, 0x0003003eu, 0x00001540u, 0x00001541u, 0x0003003eu, 0x00001542u, 0x0000153du, 0x00070039u, 0x00000009u, 0x00001543u, 0x0000017au, 0x0000153eu, 0x00001540u, 0x00001542u, 0x0003003eu, 0x000013e1u, 0x00001543u, 0x000200f9u, 0x00001539u, 0x000200f8u, 0x00001539u, 0x000700f5u, 0x00000009u, 0x0000ebdcu, 0x0000eb3du, 0x00001522u, 0x00001543u, 0x00001538u, 0x000200f9u, 0x00001490u, 0x000200f8u, 0x00001490u, 0x000d00f5u, 0x00000009u, 0x0000ebd5u, 0x0000eb3du, 0x00001484u, 0x0000ebd6u, 0x000014b2u, 0x0000ebd8u, 0x000014dfu, 0x0000ebdau, 0x0000150cu, 0x0000ebdcu, 0x00001539u, 0x000d00f5u, 0x00000009u, 0x0000eba6u, 0x0000eb3du, 0x00001484u, 0x0000eba8u, 0x000014b2u, 0x0000ebaau, 0x000014dfu, 0x0000ebacu, 0x0000150cu, 0x0000ebaeu, 0x00001539u, 0x000d00f5u, 0x00000009u, 0x0000eb76u, 0x0000eb3du, 0x00001484u, 0x00001498u, 0x000014b2u, 0x000014c5u, 0x000014dfu, 0x000014f2u, 0x0000150cu, 0x0000151fu, 0x00001539u, 0x000d00f5u, 0x00000009u, 0x0000eb47u, 0x0000eb3du, 0x00001484u, 0x0000eb49u, 0x000014b2u, 0x0000eb4bu, 0x000014dfu, 0x0000eb4du, 0x0000150cu, 0x0000eb4fu, 0x00001539u, 0x000200f9u, 0x00001489u, 0x000200f8u, 0x00001485u, 0x000500c3u, 0x00000008u, 0x00001549u, 0x00001349u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x0000154au, 0x00001549u, 0x0003003eu, 0x00001547u, 0x0000154au, 0x00050082u, 0x00000008u, 0x0000154fu, 0x00001358u, 0x00001349u, 0x00050080u, 0x00000008u, 0x00001550u, 0x00001358u, 0x0000154fu, 0x000500c3u, 0x00000008u, 0x00001551u, 0x00001550u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00001552u, 0x00001551u, 0x0003003eu, 0x0000154bu, 0x00001552u, 0x00050050u, 0x0000005fu, 0x00001555u, 0x00001349u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001556u, 0x00001555u, 0x0004003du, 0x0000001eu, 0x00001558u, 0x000001a4u, 0x0003003eu, 0x00001557u, 0x00001558u, 0x0004003du, 0x00000006u, 0x0000155au, 0x000001a5u, 0x0003003eu, 0x00001559u, 0x0000155au, 0x0003003eu, 0x0000155bu, 0x00001556u, 0x0003003eu, 0x0000155cu, 0x0000154au, 0x00080039u, 0x00000009u, 0x0000155eu, 0x0000016bu, 0x00001557u, 0x00001559u, 0x0000155bu, 0x0000155cu, 0x0003003eu, 0x0000139eu, 0x0000155eu, 0x0004003du, 0x0000005du, 0x0000155fu, 0x000001a9u, 0x000300f7u, 0x00001561u, 0x00000000u, 0x000400fau, 0x0000155fu, 0x00001560u, 0x00001561u, 0x000200f8u, 0x00001560u, 0x00050050u, 0x0000005fu, 0x00001564u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001565u, 0x00001564u, 0x0004003du, 0x0000001eu, 0x00001567u, 0x000001a4u, 0x0003003eu, 0x00001566u, 0x00001567u, 0x0004003du, 0x00000006u, 0x00001569u, 0x000001a5u, 0x0003003eu, 0x00001568u, 0x00001569u, 0x0003003eu, 0x0000156au, 0x00001565u, 0x0003003eu, 0x0000156bu, 0x00001552u, 0x00080039u, 0x00000009u, 0x0000156du, 0x0000016bu, 0x00001566u, 0x00001568u, 0x0000156au, 0x0000156bu, 0x0003003eu, 0x000013b6u, 0x0000156du, 0x00050050u, 0x0000005fu, 0x00001570u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001571u, 0x00001570u, 0x0004003du, 0x0000001eu, 0x00001573u, 0x000001a4u, 0x0003003eu, 0x00001572u, 0x00001573u, 0x0004003du, 0x00000006u, 0x00001575u, 0x000001a5u, 0x0003003eu, 0x00001574u, 0x00001575u, 0x0003003eu, 0x00001576u, 0x00001571u, 0x0003003eu, 0x00001577u, 0x0000154au, 0x00080039u, 0x00000009u, 0x00001579u, 0x0000016bu, 0x00001572u, 0x00001574u, 0x00001576u, 0x00001577u, 0x0003003eu, 0x000013cau, 0x00001579u, 0x00050050u, 0x0000005fu, 0x0000157cu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000157du, 0x0000157cu, 0x0004003du, 0x0000001eu, 0x0000157fu, 0x000001a4u, 0x0003003eu, 0x0000157eu, 0x0000157fu, 0x0004003du, 0x00000006u, 0x00001581u, 0x000001a5u, 0x0003003eu, 0x00001580u, 0x00001581u, 0x0003003eu, 0x00001582u, 0x0000157du, 0x0003003eu, 0x00001583u, 0x00001552u, 0x00080039u, 0x00000009u, 0x00001585u, 0x0000016bu, 0x0000157eu, 0x00001580u, 0x00001582u, 0x00001583u, 0x0003003eu, 0x000013e1u, 0x00001585u, 0x000200f9u, 0x00001561u, 0x000200f8u, 0x00001561u, 0x000700f5u, 0x00000009u, 0x0000ebdeu, 0x0000eb3du, 0x00001485u, 0x00001585u, 0x00001560u, 0x000700f5u, 0x00000009u, 0x0000ebafu, 0x0000eb3du, 0x00001485u, 0x00001579u, 0x00001560u, 0x000700f5u, 0x00000009u, 0x0000eb50u, 0x0000eb3du, 0x00001485u, 0x0000156du, 0x00001560u, 0x000200f9u, 0x00001489u, 0x000200f8u, 0x00001486u, 0x00050041u, 0x0000003eu, 0x00001587u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001588u, 0x00001587u, 0x000300f7u, 0x0000158cu, 0x00000000u, 0x000700fbu, 0x00001588u, 0x0000158bu, 0x00000000u, 0x00001589u, 0x00000001u, 0x0000158au, 0x000200f8u, 0x0000158bu, 0x0004007cu, 0x000000a2u, 0x000015f8u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x000015fau, 0x000001a4u, 0x0003003eu, 0x000015f9u, 0x000015fau, 0x0004003du, 0x00000006u, 0x000015fcu, 0x000001a5u, 0x0003003eu, 0x000015fbu, 0x000015fcu, 0x0003003eu, 0x000015fdu, 0x000015f8u, 0x00070039u, 0x00000009u, 0x000015feu, 0x00000153u, 0x000015f9u, 0x000015fbu, 0x000015fdu, 0x0003003eu, 0x0000139eu, 0x000015feu, 0x0004003du, 0x0000005du, 0x000015ffu, 0x000001a9u, 0x000300f7u, 0x00001601u, 0x00000000u, 0x000400fau, 0x000015ffu, 0x00001600u, 0x00001601u, 0x000200f8u, 0x00001600u, 0x00050050u, 0x0000005fu, 0x00001604u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001605u, 0x00001604u, 0x0004003du, 0x0000001eu, 0x00001607u, 0x000001a4u, 0x0003003eu, 0x00001606u, 0x00001607u, 0x0004003du, 0x00000006u, 0x00001609u, 0x000001a5u, 0x0003003eu, 0x00001608u, 0x00001609u, 0x0003003eu, 0x0000160au, 0x00001605u, 0x00070039u, 0x00000009u, 0x0000160bu, 0x00000153u, 0x00001606u, 0x00001608u, 0x0000160au, 0x0003003eu, 0x000013b6u, 0x0000160bu, 0x00050050u, 0x0000005fu, 0x0000160eu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000160fu, 0x0000160eu, 0x0004003du, 0x0000001eu, 0x00001611u, 0x000001a4u, 0x0003003eu, 0x00001610u, 0x00001611u, 0x0004003du, 0x00000006u, 0x00001613u, 0x000001a5u, 0x0003003eu, 0x00001612u, 0x00001613u, 0x0003003eu, 0x00001614u, 0x0000160fu, 0x00070039u, 0x00000009u, 0x00001615u, 0x00000153u, 0x00001610u, 0x00001612u, 0x00001614u, 0x0003003eu, 0x000013cau, 0x00001615u, 0x000200f9u, 0x00001601u, 0x000200f8u, 0x00001601u, 0x000700f5u, 0x00000009u, 0x0000ebb2u, 0x0000eb3du, 0x0000158bu, 0x00001615u, 0x00001600u, 0x000700f5u, 0x00000009u, 0x0000eb53u, 0x0000eb3du, 0x0000158bu, 0x0000160bu, 0x00001600u, 0x0004003du, 0x0000005du, 0x00001616u, 0x000001aau, 0x000300f7u, 0x00001618u, 0x00000000u, 0x000400fau, 0x00001616u, 0x00001617u, 0x00001618u, 0x000200f8u, 0x00001617u, 0x00050050u, 0x0000005fu, 0x0000161bu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000161cu, 0x0000161bu, 0x0004003du, 0x0000001eu, 0x0000161eu, 0x000001a4u, 0x0003003eu, 0x0000161du, 0x0000161eu, 0x0004003du, 0x00000006u, 0x00001620u, 0x000001a5u, 0x0003003eu, 0x0000161fu, 0x00001620u, 0x0003003eu, 0x00001621u, 0x0000161cu, 0x00070039u, 0x00000009u, 0x00001622u, 0x00000153u, 0x0000161du, 0x0000161fu, 0x00001621u, 0x0003003eu, 0x000013e1u, 0x00001622u, 0x000200f9u, 0x00001618u, 0x000200f8u, 0x00001618u, 0x000700f5u, 0x00000009u, 0x0000ebe0u, 0x0000eb3du, 0x00001601u, 0x00001622u, 0x00001617u, 0x000200f9u, 0x0000158cu, 0x000200f8u, 0x00001589u, 0x0004007cu, 0x000000a2u, 0x0000158eu, 0x0000eaadu, 0x00050041u, 0x0000003eu, 0x0000158fu, 0x000001a4u, 0x0000025eu, 0x0004003du, 0x00000008u, 0x00001590u, 0x0000158fu, 0x0004007cu, 0x00000006u, 0x00001591u, 0x00001590u, 0x0004003du, 0x0000001eu, 0x00001593u, 0x000001a4u, 0x0003003eu, 0x00001592u, 0x00001593u, 0x0004003du, 0x00000006u, 0x00001595u, 0x000001a5u, 0x0003003eu, 0x00001594u, 0x00001595u, 0x0003003eu, 0x00001596u, 0x0000158eu, 0x0003003eu, 0x00001597u, 0x00001591u, 0x00080039u, 0x00000009u, 0x00001598u, 0x0000013bu, 0x00001592u, 0x00001594u, 0x00001596u, 0x00001597u, 0x0003003eu, 0x0000139eu, 0x00001598u, 0x0004003du, 0x0000005du, 0x00001599u, 0x000001a9u, 0x000300f7u, 0x0000159bu, 0x00000000u, 0x000400fau, 0x00001599u, 0x0000159au, 0x0000159bu, 0x000200f8u, 0x0000159au, 0x00050050u, 0x0000005fu, 0x0000159eu, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x0000159fu, 0x0000159eu, 0x0004003du, 0x00000008u, 0x000015a1u, 0x0000158fu, 0x0004007cu, 0x00000006u, 0x000015a2u, 0x000015a1u, 0x0004003du, 0x0000001eu, 0x000015a4u, 0x000001a4u, 0x0003003eu, 0x000015a3u, 0x000015a4u, 0x0004003du, 0x00000006u, 0x000015a6u, 0x000001a5u, 0x0003003eu, 0x000015a5u, 0x000015a6u, 0x0003003eu, 0x000015a7u, 0x0000159fu, 0x0003003eu, 0x000015a8u, 0x000015a2u, 0x00080039u, 0x00000009u, 0x000015a9u, 0x0000013bu, 0x000015a3u, 0x000015a5u, 0x000015a7u, 0x000015a8u, 0x0003003eu, 0x000013b6u, 0x000015a9u, 0x00050050u, 0x0000005fu, 0x000015acu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000015adu, 0x000015acu, 0x0004003du, 0x00000008u, 0x000015afu, 0x0000158fu, 0x0004007cu, 0x00000006u, 0x000015b0u, 0x000015afu, 0x0004003du, 0x0000001eu, 0x000015b2u, 0x000001a4u, 0x0003003eu, 0x000015b1u, 0x000015b2u, 0x0004003du, 0x00000006u, 0x000015b4u, 0x000001a5u, 0x0003003eu, 0x000015b3u, 0x000015b4u, 0x0003003eu, 0x000015b5u, 0x000015adu, 0x0003003eu, 0x000015b6u, 0x000015b0u, 0x00080039u, 0x00000009u, 0x000015b7u, 0x0000013bu, 0x000015b1u, 0x000015b3u, 0x000015b5u, 0x000015b6u, 0x0003003eu, 0x000013cau, 0x000015b7u, 0x000200f9u, 0x0000159bu, 0x000200f8u, 0x0000159bu, 0x000700f5u, 0x00000009u, 0x0000ebb4u, 0x0000eb3du, 0x00001589u, 0x000015b7u, 0x0000159au, 0x000700f5u, 0x00000009u, 0x0000eb55u, 0x0000eb3du, 0x00001589u, 0x000015a9u, 0x0000159au, 0x0004003du, 0x0000005du, 0x000015b8u, 0x000001aau, 0x000300f7u, 0x000015bau, 0x00000000u, 0x000400fau, 0x000015b8u, 0x000015b9u, 0x000015bau, 0x000200f8u, 0x000015b9u, 0x00050050u, 0x0000005fu, 0x000015bdu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000015beu, 0x000015bdu, 0x0004003du, 0x00000008u, 0x000015c0u, 0x0000158fu, 0x0004007cu, 0x00000006u, 0x000015c1u, 0x000015c0u, 0x0004003du, 0x0000001eu, 0x000015c3u, 0x000001a4u, 0x0003003eu, 0x000015c2u, 0x000015c3u, 0x0004003du, 0x00000006u, 0x000015c5u, 0x000001a5u, 0x0003003eu, 0x000015c4u, 0x000015c5u, 0x0003003eu, 0x000015c6u, 0x000015beu, 0x0003003eu, 0x000015c7u, 0x000015c1u, 0x00080039u, 0x00000009u, 0x000015c8u, 0x0000013bu, 0x000015c2u, 0x000015c4u, 0x000015c6u, 0x000015c7u, 0x0003003eu, 0x000013e1u, 0x000015c8u, 0x000200f9u, 0x000015bau, 0x000200f8u, 0x000015bau, 0x000700f5u, 0x00000009u, 0x0000ebe2u, 0x0000eb3du, 0x0000159bu, 0x000015c8u, 0x000015b9u, 0x000200f9u, 0x0000158cu, 0x000200f8u, 0x0000158au, 0x0004007cu, 0x000000a2u, 0x000015cbu, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x000015cdu, 0x000001a4u, 0x0003003eu, 0x000015ccu, 0x000015cdu, 0x0004003du, 0x00000006u, 0x000015cfu, 0x000001a5u, 0x0003003eu, 0x000015ceu, 0x000015cfu, 0x0003003eu, 0x000015d0u, 0x000015cbu, 0x00070039u, 0x00000009u, 0x000015d1u, 0x00000160u, 0x000015ccu, 0x000015ceu, 0x000015d0u, 0x0003003eu, 0x0000139eu, 0x000015d1u, 0x0004003du, 0x0000005du, 0x000015d2u, 0x000001a9u, 0x000300f7u, 0x000015d4u, 0x00000000u, 0x000400fau, 0x000015d2u, 0x000015d3u, 0x000015d4u, 0x000200f8u, 0x000015d3u, 0x00050050u, 0x0000005fu, 0x000015d7u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x000015d8u, 0x000015d7u, 0x0004003du, 0x0000001eu, 0x000015dau, 0x000001a4u, 0x0003003eu, 0x000015d9u, 0x000015dau, 0x0004003du, 0x00000006u, 0x000015dcu, 0x000001a5u, 0x0003003eu, 0x000015dbu, 0x000015dcu, 0x0003003eu, 0x000015ddu, 0x000015d8u, 0x00070039u, 0x00000009u, 0x000015deu, 0x00000160u, 0x000015d9u, 0x000015dbu, 0x000015ddu, 0x0003003eu, 0x000013b6u, 0x000015deu, 0x00050050u, 0x0000005fu, 0x000015e1u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000015e2u, 0x000015e1u, 0x0004003du, 0x0000001eu, 0x000015e4u, 0x000001a4u, 0x0003003eu, 0x000015e3u, 0x000015e4u, 0x0004003du, 0x00000006u, 0x000015e6u, 0x000001a5u, 0x0003003eu, 0x000015e5u, 0x000015e6u, 0x0003003eu, 0x000015e7u, 0x000015e2u, 0x00070039u, 0x00000009u, 0x000015e8u, 0x00000160u, 0x000015e3u, 0x000015e5u, 0x000015e7u, 0x0003003eu, 0x000013cau, 0x000015e8u, 0x000200f9u, 0x000015d4u, 0x000200f8u, 0x000015d4u, 0x000700f5u, 0x00000009u, 0x0000ebb6u, 0x0000eb3du, 0x0000158au, 0x000015e8u, 0x000015d3u, 0x000700f5u, 0x00000009u, 0x0000eb57u, 0x0000eb3du, 0x0000158au, 0x000015deu, 0x000015d3u, 0x0004003du, 0x0000005du, 0x000015e9u, 0x000001aau, 0x000300f7u, 0x000015ebu, 0x00000000u, 0x000400fau, 0x000015e9u, 0x000015eau, 0x000015ebu, 0x000200f8u, 0x000015eau, 0x00050050u, 0x0000005fu, 0x000015eeu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000015efu, 0x000015eeu, 0x0004003du, 0x0000001eu, 0x000015f1u, 0x000001a4u, 0x0003003eu, 0x000015f0u, 0x000015f1u, 0x0004003du, 0x00000006u, 0x000015f3u, 0x000001a5u, 0x0003003eu, 0x000015f2u, 0x000015f3u, 0x0003003eu, 0x000015f4u, 0x000015efu, 0x00070039u, 0x00000009u, 0x000015f5u, 0x00000160u, 0x000015f0u, 0x000015f2u, 0x000015f4u, 0x0003003eu, 0x000013e1u, 0x000015f5u, 0x000200f9u, 0x000015ebu, 0x000200f8u, 0x000015ebu, 0x000700f5u, 0x00000009u, 0x0000ebe4u, 0x0000eb3du, 0x000015d4u, 0x000015f5u, 0x000015eau, 0x000200f9u, 0x0000158cu, 0x000200f8u, 0x0000158cu, 0x000900f5u, 0x00000009u, 0x0000ebdfu, 0x0000ebe0u, 0x00001618u, 0x0000ebe2u, 0x000015bau, 0x0000ebe4u, 0x000015ebu, 0x000900f5u, 0x00000009u, 0x0000ebb0u, 0x0000ebb2u, 0x00001618u, 0x0000ebb4u, 0x000015bau, 0x0000ebb6u, 0x000015ebu, 0x000900f5u, 0x00000009u, 0x0000eb80u, 0x000015feu, 0x00001618u, 0x00001598u, 0x000015bau, 0x000015d1u, 0x000015ebu, 0x000900f5u, 0x00000009u, 0x0000eb51u, 0x0000eb53u, 0x00001618u, 0x0000eb55u, 0x000015bau, 0x0000eb57u, 0x000015ebu, 0x000200f9u, 0x00001489u, 0x000200f8u, 0x00001487u, 0x00050041u, 0x0000003eu, 0x00001626u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x00001627u, 0x00001626u, 0x000300f7u, 0x0000162cu, 0x00000000u, 0x000b00fbu, 0x00001627u, 0x0000162cu, 0x00000000u, 0x00001628u, 0x00000001u, 0x00001629u, 0x00000002u, 0x0000162au, 0x00000003u, 0x0000162bu, 0x000200f8u, 0x00001628u, 0x0004007cu, 0x000000a2u, 0x0000162eu, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x00001630u, 0x000001a4u, 0x0003003eu, 0x0000162fu, 0x00001630u, 0x0004003du, 0x00000006u, 0x00001632u, 0x000001a5u, 0x0003003eu, 0x00001631u, 0x00001632u, 0x0003003eu, 0x00001633u, 0x0000162eu, 0x00070039u, 0x00000009u, 0x00001634u, 0x00000134u, 0x0000162fu, 0x00001631u, 0x00001633u, 0x0003003eu, 0x0000139eu, 0x00001634u, 0x0004003du, 0x0000005du, 0x00001635u, 0x000001a9u, 0x000300f7u, 0x00001637u, 0x00000000u, 0x000400fau, 0x00001635u, 0x00001636u, 0x00001637u, 0x000200f8u, 0x00001636u, 0x00050050u, 0x0000005fu, 0x0000163au, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x0000163bu, 0x0000163au, 0x0004003du, 0x0000001eu, 0x0000163du, 0x000001a4u, 0x0003003eu, 0x0000163cu, 0x0000163du, 0x0004003du, 0x00000006u, 0x0000163fu, 0x000001a5u, 0x0003003eu, 0x0000163eu, 0x0000163fu, 0x0003003eu, 0x00001640u, 0x0000163bu, 0x00070039u, 0x00000009u, 0x00001641u, 0x00000134u, 0x0000163cu, 0x0000163eu, 0x00001640u, 0x0003003eu, 0x000013b6u, 0x00001641u, 0x00050050u, 0x0000005fu, 0x00001644u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001645u, 0x00001644u, 0x0004003du, 0x0000001eu, 0x00001647u, 0x000001a4u, 0x0003003eu, 0x00001646u, 0x00001647u, 0x0004003du, 0x00000006u, 0x00001649u, 0x000001a5u, 0x0003003eu, 0x00001648u, 0x00001649u, 0x0003003eu, 0x0000164au, 0x00001645u, 0x00070039u, 0x00000009u, 0x0000164bu, 0x00000134u, 0x00001646u, 0x00001648u, 0x0000164au, 0x0003003eu, 0x000013cau, 0x0000164bu, 0x000200f9u, 0x00001637u, 0x000200f8u, 0x00001637u, 0x000700f5u, 0x00000009u, 0x0000ebb9u, 0x0000eb3du, 0x00001628u, 0x0000164bu, 0x00001636u, 0x000700f5u, 0x00000009u, 0x0000eb5au, 0x0000eb3du, 0x00001628u, 0x00001641u, 0x00001636u, 0x0004003du, 0x0000005du, 0x0000164cu, 0x000001aau, 0x000300f7u, 0x0000164eu, 0x00000000u, 0x000400fau, 0x0000164cu, 0x0000164du, 0x0000164eu, 0x000200f8u, 0x0000164du, 0x00050050u, 0x0000005fu, 0x00001651u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001652u, 0x00001651u, 0x0004003du, 0x0000001eu, 0x00001654u, 0x000001a4u, 0x0003003eu, 0x00001653u, 0x00001654u, 0x0004003du, 0x00000006u, 0x00001656u, 0x000001a5u, 0x0003003eu, 0x00001655u, 0x00001656u, 0x0003003eu, 0x00001657u, 0x00001652u, 0x00070039u, 0x00000009u, 0x00001658u, 0x00000134u, 0x00001653u, 0x00001655u, 0x00001657u, 0x0003003eu, 0x000013e1u, 0x00001658u, 0x000200f9u, 0x0000164eu, 0x000200f8u, 0x0000164eu, 0x000700f5u, 0x00000009u, 0x0000ebe7u, 0x0000eb3du, 0x00001637u, 0x00001658u, 0x0000164du, 0x000200f9u, 0x0000162cu, 0x000200f8u, 0x00001629u, 0x0004007cu, 0x000000a2u, 0x0000165bu, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x0000165du, 0x000001a4u, 0x0003003eu, 0x0000165cu, 0x0000165du, 0x0004003du, 0x00000006u, 0x0000165fu, 0x000001a5u, 0x0003003eu, 0x0000165eu, 0x0000165fu, 0x0003003eu, 0x00001660u, 0x0000165bu, 0x00070039u, 0x00000009u, 0x00001661u, 0x00000165u, 0x0000165cu, 0x0000165eu, 0x00001660u, 0x0003003eu, 0x0000139eu, 0x00001661u, 0x0004003du, 0x0000005du, 0x00001662u, 0x000001a9u, 0x000300f7u, 0x00001664u, 0x00000000u, 0x000400fau, 0x00001662u, 0x00001663u, 0x00001664u, 0x000200f8u, 0x00001663u, 0x00050050u, 0x0000005fu, 0x00001667u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001668u, 0x00001667u, 0x0004003du, 0x0000001eu, 0x0000166au, 0x000001a4u, 0x0003003eu, 0x00001669u, 0x0000166au, 0x0004003du, 0x00000006u, 0x0000166cu, 0x000001a5u, 0x0003003eu, 0x0000166bu, 0x0000166cu, 0x0003003eu, 0x0000166du, 0x00001668u, 0x00070039u, 0x00000009u, 0x0000166eu, 0x00000165u, 0x00001669u, 0x0000166bu, 0x0000166du, 0x0003003eu, 0x000013b6u, 0x0000166eu, 0x00050050u, 0x0000005fu, 0x00001671u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001672u, 0x00001671u, 0x0004003du, 0x0000001eu, 0x00001674u, 0x000001a4u, 0x0003003eu, 0x00001673u, 0x00001674u, 0x0004003du, 0x00000006u, 0x00001676u, 0x000001a5u, 0x0003003eu, 0x00001675u, 0x00001676u, 0x0003003eu, 0x00001677u, 0x00001672u, 0x00070039u, 0x00000009u, 0x00001678u, 0x00000165u, 0x00001673u, 0x00001675u, 0x00001677u, 0x0003003eu, 0x000013cau, 0x00001678u, 0x000200f9u, 0x00001664u, 0x000200f8u, 0x00001664u, 0x000700f5u, 0x00000009u, 0x0000ebbbu, 0x0000eb3du, 0x00001629u, 0x00001678u, 0x00001663u, 0x000700f5u, 0x00000009u, 0x0000eb5cu, 0x0000eb3du, 0x00001629u, 0x0000166eu, 0x00001663u, 0x0004003du, 0x0000005du, 0x00001679u, 0x000001aau, 0x000300f7u, 0x0000167bu, 0x00000000u, 0x000400fau, 0x00001679u, 0x0000167au, 0x0000167bu, 0x000200f8u, 0x0000167au, 0x00050050u, 0x0000005fu, 0x0000167eu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000167fu, 0x0000167eu, 0x0004003du, 0x0000001eu, 0x00001681u, 0x000001a4u, 0x0003003eu, 0x00001680u, 0x00001681u, 0x0004003du, 0x00000006u, 0x00001683u, 0x000001a5u, 0x0003003eu, 0x00001682u, 0x00001683u, 0x0003003eu, 0x00001684u, 0x0000167fu, 0x00070039u, 0x00000009u, 0x00001685u, 0x00000165u, 0x00001680u, 0x00001682u, 0x00001684u, 0x0003003eu, 0x000013e1u, 0x00001685u, 0x000200f9u, 0x0000167bu, 0x000200f8u, 0x0000167bu, 0x000700f5u, 0x00000009u, 0x0000ebe9u, 0x0000eb3du, 0x00001664u, 0x00001685u, 0x0000167au, 0x000200f9u, 0x0000162cu, 0x000200f8u, 0x0000162au, 0x0004007cu, 0x000000a2u, 0x00001688u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x0000168au, 0x000001a4u, 0x0003003eu, 0x00001689u, 0x0000168au, 0x0004003du, 0x00000006u, 0x0000168cu, 0x000001a5u, 0x0003003eu, 0x0000168bu, 0x0000168cu, 0x0003003eu, 0x0000168du, 0x00001688u, 0x00070039u, 0x00000009u, 0x0000168eu, 0x00000175u, 0x00001689u, 0x0000168bu, 0x0000168du, 0x0003003eu, 0x0000139eu, 0x0000168eu, 0x0004003du, 0x0000005du, 0x0000168fu, 0x000001a9u, 0x000300f7u, 0x00001691u, 0x00000000u, 0x000400fau, 0x0000168fu, 0x00001690u, 0x00001691u, 0x000200f8u, 0x00001690u, 0x00050050u, 0x0000005fu, 0x00001694u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001695u, 0x00001694u, 0x0004003du, 0x0000001eu, 0x00001697u, 0x000001a4u, 0x0003003eu, 0x00001696u, 0x00001697u, 0x0004003du, 0x00000006u, 0x00001699u, 0x000001a5u, 0x0003003eu, 0x00001698u, 0x00001699u, 0x0003003eu, 0x0000169au, 0x00001695u, 0x00070039u, 0x00000009u, 0x0000169bu, 0x00000175u, 0x00001696u, 0x00001698u, 0x0000169au, 0x0003003eu, 0x000013b6u, 0x0000169bu, 0x00050050u, 0x0000005fu, 0x0000169eu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000169fu, 0x0000169eu, 0x0004003du, 0x0000001eu, 0x000016a1u, 0x000001a4u, 0x0003003eu, 0x000016a0u, 0x000016a1u, 0x0004003du, 0x00000006u, 0x000016a3u, 0x000001a5u, 0x0003003eu, 0x000016a2u, 0x000016a3u, 0x0003003eu, 0x000016a4u, 0x0000169fu, 0x00070039u, 0x00000009u, 0x000016a5u, 0x00000175u, 0x000016a0u, 0x000016a2u, 0x000016a4u, 0x0003003eu, 0x000013cau, 0x000016a5u, 0x000200f9u, 0x00001691u, 0x000200f8u, 0x00001691u, 0x000700f5u, 0x00000009u, 0x0000ebbdu, 0x0000eb3du, 0x0000162au, 0x000016a5u, 0x00001690u, 0x000700f5u, 0x00000009u, 0x0000eb5eu, 0x0000eb3du, 0x0000162au, 0x0000169bu, 0x00001690u, 0x0004003du, 0x0000005du, 0x000016a6u, 0x000001aau, 0x000300f7u, 0x000016a8u, 0x00000000u, 0x000400fau, 0x000016a6u, 0x000016a7u, 0x000016a8u, 0x000200f8u, 0x000016a7u, 0x00050050u, 0x0000005fu, 0x000016abu, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000016acu, 0x000016abu, 0x0004003du, 0x0000001eu, 0x000016aeu, 0x000001a4u, 0x0003003eu, 0x000016adu, 0x000016aeu, 0x0004003du, 0x00000006u, 0x000016b0u, 0x000001a5u, 0x0003003eu, 0x000016afu, 0x000016b0u, 0x0003003eu, 0x000016b1u, 0x000016acu, 0x00070039u, 0x00000009u, 0x000016b2u, 0x00000175u, 0x000016adu, 0x000016afu, 0x000016b1u, 0x0003003eu, 0x000013e1u, 0x000016b2u, 0x000200f9u, 0x000016a8u, 0x000200f8u, 0x000016a8u, 0x000700f5u, 0x00000009u, 0x0000ebebu, 0x0000eb3du, 0x00001691u, 0x000016b2u, 0x000016a7u, 0x000200f9u, 0x0000162cu, 0x000200f8u, 0x0000162bu, 0x0004007cu, 0x000000a2u, 0x000016b5u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x000016b7u, 0x000001a4u, 0x0003003eu, 0x000016b6u, 0x000016b7u, 0x0004003du, 0x00000006u, 0x000016b9u, 0x000001a5u, 0x0003003eu, 0x000016b8u, 0x000016b9u, 0x0003003eu, 0x000016bau, 0x000016b5u, 0x00070039u, 0x00000009u, 0x000016bbu, 0x00000153u, 0x000016b6u, 0x000016b8u, 0x000016bau, 0x0003003eu, 0x0000139eu, 0x000016bbu, 0x0004003du, 0x0000005du, 0x000016bcu, 0x000001a9u, 0x000300f7u, 0x000016beu, 0x00000000u, 0x000400fau, 0x000016bcu, 0x000016bdu, 0x000016beu, 0x000200f8u, 0x000016bdu, 0x00050050u, 0x0000005fu, 0x000016c1u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x000016c2u, 0x000016c1u, 0x0004003du, 0x0000001eu, 0x000016c4u, 0x000001a4u, 0x0003003eu, 0x000016c3u, 0x000016c4u, 0x0004003du, 0x00000006u, 0x000016c6u, 0x000001a5u, 0x0003003eu, 0x000016c5u, 0x000016c6u, 0x0003003eu, 0x000016c7u, 0x000016c2u, 0x00070039u, 0x00000009u, 0x000016c8u, 0x00000153u, 0x000016c3u, 0x000016c5u, 0x000016c7u, 0x0003003eu, 0x000013b6u, 0x000016c8u, 0x00050050u, 0x0000005fu, 0x000016cbu, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000016ccu, 0x000016cbu, 0x0004003du, 0x0000001eu, 0x000016ceu, 0x000001a4u, 0x0003003eu, 0x000016cdu, 0x000016ceu, 0x0004003du, 0x00000006u, 0x000016d0u, 0x000001a5u, 0x0003003eu, 0x000016cfu, 0x000016d0u, 0x0003003eu, 0x000016d1u, 0x000016ccu, 0x00070039u, 0x00000009u, 0x000016d2u, 0x00000153u, 0x000016cdu, 0x000016cfu, 0x000016d1u, 0x0003003eu, 0x000013cau, 0x000016d2u, 0x000200f9u, 0x000016beu, 0x000200f8u, 0x000016beu, 0x000700f5u, 0x00000009u, 0x0000ebbfu, 0x0000eb3du, 0x0000162bu, 0x000016d2u, 0x000016bdu, 0x000700f5u, 0x00000009u, 0x0000eb60u, 0x0000eb3du, 0x0000162bu, 0x000016c8u, 0x000016bdu, 0x0004003du, 0x0000005du, 0x000016d3u, 0x000001aau, 0x000300f7u, 0x000016d5u, 0x00000000u, 0x000400fau, 0x000016d3u, 0x000016d4u, 0x000016d5u, 0x000200f8u, 0x000016d4u, 0x00050050u, 0x0000005fu, 0x000016d8u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x000016d9u, 0x000016d8u, 0x0004003du, 0x0000001eu, 0x000016dbu, 0x000001a4u, 0x0003003eu, 0x000016dau, 0x000016dbu, 0x0004003du, 0x00000006u, 0x000016ddu, 0x000001a5u, 0x0003003eu, 0x000016dcu, 0x000016ddu, 0x0003003eu, 0x000016deu, 0x000016d9u, 0x00070039u, 0x00000009u, 0x000016dfu, 0x00000153u, 0x000016dau, 0x000016dcu, 0x000016deu, 0x0003003eu, 0x000013e1u, 0x000016dfu, 0x000200f9u, 0x000016d5u, 0x000200f8u, 0x000016d5u, 0x000700f5u, 0x00000009u, 0x0000ebedu, 0x0000eb3du, 0x000016beu, 0x000016dfu, 0x000016d4u, 0x000200f9u, 0x0000162cu, 0x000200f8u, 0x0000162cu, 0x000d00f5u, 0x00000009u, 0x0000ebe6u, 0x0000eb3du, 0x00001487u, 0x0000ebe7u, 0x0000164eu, 0x0000ebe9u, 0x0000167bu, 0x0000ebebu, 0x000016a8u, 0x0000ebedu, 0x000016d5u, 0x000d00f5u, 0x00000009u, 0x0000ebb7u, 0x0000eb3du, 0x00001487u, 0x0000ebb9u, 0x0000164eu, 0x0000ebbbu, 0x0000167bu, 0x0000ebbdu, 0x000016a8u, 0x0000ebbfu, 0x000016d5u, 0x000d00f5u, 0x00000009u, 0x0000eb87u, 0x0000eb3du, 0x00001487u, 0x00001634u, 0x0000164eu, 0x00001661u, 0x0000167bu, 0x0000168eu, 0x000016a8u, 0x000016bbu, 0x000016d5u, 0x000d00f5u, 0x00000009u, 0x0000eb58u, 0x0000eb3du, 0x00001487u, 0x0000eb5au, 0x0000164eu, 0x0000eb5cu, 0x0000167bu, 0x0000eb5eu, 0x000016a8u, 0x0000eb60u, 0x000016d5u, 0x000200f9u, 0x00001489u, 0x000200f8u, 0x00001488u, 0x00050041u, 0x0000003eu, 0x000016e3u, 0x000001a4u, 0x00000224u, 0x0004003du, 0x00000008u, 0x000016e4u, 0x000016e3u, 0x000300f7u, 0x000016e8u, 0x00000000u, 0x000700fbu, 0x000016e4u, 0x000016e7u, 0x00000000u, 0x000016e5u, 0x00000001u, 0x000016e6u, 0x000200f8u, 0x000016e7u, 0x0004007cu, 0x000000a2u, 0x00001744u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x00001746u, 0x000001a4u, 0x0003003eu, 0x00001745u, 0x00001746u, 0x0004003du, 0x00000006u, 0x00001748u, 0x000001a5u, 0x0003003eu, 0x00001747u, 0x00001748u, 0x0003003eu, 0x00001749u, 0x00001744u, 0x00070039u, 0x00000009u, 0x0000174au, 0x00000153u, 0x00001745u, 0x00001747u, 0x00001749u, 0x0003003eu, 0x0000139eu, 0x0000174au, 0x0004003du, 0x0000005du, 0x0000174bu, 0x000001a9u, 0x000300f7u, 0x0000174du, 0x00000000u, 0x000400fau, 0x0000174bu, 0x0000174cu, 0x0000174du, 0x000200f8u, 0x0000174cu, 0x00050050u, 0x0000005fu, 0x00001750u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001751u, 0x00001750u, 0x0004003du, 0x0000001eu, 0x00001753u, 0x000001a4u, 0x0003003eu, 0x00001752u, 0x00001753u, 0x0004003du, 0x00000006u, 0x00001755u, 0x000001a5u, 0x0003003eu, 0x00001754u, 0x00001755u, 0x0003003eu, 0x00001756u, 0x00001751u, 0x00070039u, 0x00000009u, 0x00001757u, 0x00000153u, 0x00001752u, 0x00001754u, 0x00001756u, 0x0003003eu, 0x000013b6u, 0x00001757u, 0x00050050u, 0x0000005fu, 0x0000175au, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000175bu, 0x0000175au, 0x0004003du, 0x0000001eu, 0x0000175du, 0x000001a4u, 0x0003003eu, 0x0000175cu, 0x0000175du, 0x0004003du, 0x00000006u, 0x0000175fu, 0x000001a5u, 0x0003003eu, 0x0000175eu, 0x0000175fu, 0x0003003eu, 0x00001760u, 0x0000175bu, 0x00070039u, 0x00000009u, 0x00001761u, 0x00000153u, 0x0000175cu, 0x0000175eu, 0x00001760u, 0x0003003eu, 0x000013cau, 0x00001761u, 0x000200f9u, 0x0000174du, 0x000200f8u, 0x0000174du, 0x000700f5u, 0x00000009u, 0x0000ebc2u, 0x0000eb3du, 0x000016e7u, 0x00001761u, 0x0000174cu, 0x000700f5u, 0x00000009u, 0x0000eb63u, 0x0000eb3du, 0x000016e7u, 0x00001757u, 0x0000174cu, 0x0004003du, 0x0000005du, 0x00001762u, 0x000001aau, 0x000300f7u, 0x00001764u, 0x00000000u, 0x000400fau, 0x00001762u, 0x00001763u, 0x00001764u, 0x000200f8u, 0x00001763u, 0x00050050u, 0x0000005fu, 0x00001767u, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001768u, 0x00001767u, 0x0004003du, 0x0000001eu, 0x0000176au, 0x000001a4u, 0x0003003eu, 0x00001769u, 0x0000176au, 0x0004003du, 0x00000006u, 0x0000176cu, 0x000001a5u, 0x0003003eu, 0x0000176bu, 0x0000176cu, 0x0003003eu, 0x0000176du, 0x00001768u, 0x00070039u, 0x00000009u, 0x0000176eu, 0x00000153u, 0x00001769u, 0x0000176bu, 0x0000176du, 0x0003003eu, 0x000013e1u, 0x0000176eu, 0x000200f9u, 0x00001764u, 0x000200f8u, 0x00001764u, 0x000700f5u, 0x00000009u, 0x0000ebf0u, 0x0000eb3du, 0x0000174du, 0x0000176eu, 0x00001763u, 0x000200f9u, 0x000016e8u, 0x000200f8u, 0x000016e5u, 0x0004007cu, 0x000000a2u, 0x000016eau, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x000016ecu, 0x000001a4u, 0x0003003eu, 0x000016ebu, 0x000016ecu, 0x0004003du, 0x00000006u, 0x000016eeu, 0x000001a5u, 0x0003003eu, 0x000016edu, 0x000016eeu, 0x0003003eu, 0x000016efu, 0x000016eau, 0x00070039u, 0x00000009u, 0x000016f0u, 0x0000012fu, 0x000016ebu, 0x000016edu, 0x000016efu, 0x0003003eu, 0x0000139eu, 0x000016f0u, 0x0004003du, 0x0000005du, 0x000016f1u, 0x000001a9u, 0x000300f7u, 0x000016f3u, 0x00000000u, 0x000400fau, 0x000016f1u, 0x000016f2u, 0x000016f3u, 0x000200f8u, 0x000016f2u, 0x00050050u, 0x0000005fu, 0x000016f6u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x000016f7u, 0x000016f6u, 0x0004003du, 0x0000001eu, 0x000016f9u, 0x000001a4u, 0x0003003eu, 0x000016f8u, 0x000016f9u, 0x0004003du, 0x00000006u, 0x000016fbu, 0x000001a5u, 0x0003003eu, 0x000016fau, 0x000016fbu, 0x0003003eu, 0x000016fcu, 0x000016f7u, 0x00070039u, 0x00000009u, 0x000016fdu, 0x0000012fu, 0x000016f8u, 0x000016fau, 0x000016fcu, 0x0003003eu, 0x000013b6u, 0x000016fdu, 0x00050050u, 0x0000005fu, 0x00001700u, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x00001701u, 0x00001700u, 0x0004003du, 0x0000001eu, 0x00001703u, 0x000001a4u, 0x0003003eu, 0x00001702u, 0x00001703u, 0x0004003du, 0x00000006u, 0x00001705u, 0x000001a5u, 0x0003003eu, 0x00001704u, 0x00001705u, 0x0003003eu, 0x00001706u, 0x00001701u, 0x00070039u, 0x00000009u, 0x00001707u, 0x0000012fu, 0x00001702u, 0x00001704u, 0x00001706u, 0x0003003eu, 0x000013cau, 0x00001707u, 0x000200f9u, 0x000016f3u, 0x000200f8u, 0x000016f3u, 0x000700f5u, 0x00000009u, 0x0000ebc4u, 0x0000eb3du, 0x000016e5u, 0x00001707u, 0x000016f2u, 0x000700f5u, 0x00000009u, 0x0000eb65u, 0x0000eb3du, 0x000016e5u, 0x000016fdu, 0x000016f2u, 0x0004003du, 0x0000005du, 0x00001708u, 0x000001aau, 0x000300f7u, 0x0000170au, 0x00000000u, 0x000400fau, 0x00001708u, 0x00001709u, 0x0000170au, 0x000200f8u, 0x00001709u, 0x00050050u, 0x0000005fu, 0x0000170du, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000170eu, 0x0000170du, 0x0004003du, 0x0000001eu, 0x00001710u, 0x000001a4u, 0x0003003eu, 0x0000170fu, 0x00001710u, 0x0004003du, 0x00000006u, 0x00001712u, 0x000001a5u, 0x0003003eu, 0x00001711u, 0x00001712u, 0x0003003eu, 0x00001713u, 0x0000170eu, 0x00070039u, 0x00000009u, 0x00001714u, 0x0000012fu, 0x0000170fu, 0x00001711u, 0x00001713u, 0x0003003eu, 0x000013e1u, 0x00001714u, 0x000200f9u, 0x0000170au, 0x000200f8u, 0x0000170au, 0x000700f5u, 0x00000009u, 0x0000ebf2u, 0x0000eb3du, 0x000016f3u, 0x00001714u, 0x00001709u, 0x000200f9u, 0x000016e8u, 0x000200f8u, 0x000016e6u, 0x0004007cu, 0x000000a2u, 0x00001717u, 0x0000eaadu, 0x0004003du, 0x0000001eu, 0x00001719u, 0x000001a4u, 0x0003003eu, 0x00001718u, 0x00001719u, 0x0004003du, 0x00000006u, 0x0000171bu, 0x000001a5u, 0x0003003eu, 0x0000171au, 0x0000171bu, 0x0003003eu, 0x0000171cu, 0x00001717u, 0x00070039u, 0x00000009u, 0x0000171du, 0x00000160u, 0x00001718u, 0x0000171au, 0x0000171cu, 0x0003003eu, 0x0000139eu, 0x0000171du, 0x0004003du, 0x0000005du, 0x0000171eu, 0x000001a9u, 0x000300f7u, 0x00001720u, 0x00000000u, 0x000400fau, 0x0000171eu, 0x0000171fu, 0x00001720u, 0x000200f8u, 0x0000171fu, 0x00050050u, 0x0000005fu, 0x00001723u, 0x00001358u, 0x00001368u, 0x0004007cu, 0x000000a2u, 0x00001724u, 0x00001723u, 0x0004003du, 0x0000001eu, 0x00001726u, 0x000001a4u, 0x0003003eu, 0x00001725u, 0x00001726u, 0x0004003du, 0x00000006u, 0x00001728u, 0x000001a5u, 0x0003003eu, 0x00001727u, 0x00001728u, 0x0003003eu, 0x00001729u, 0x00001724u, 0x00070039u, 0x00000009u, 0x0000172au, 0x00000160u, 0x00001725u, 0x00001727u, 0x00001729u, 0x0003003eu, 0x000013b6u, 0x0000172au, 0x00050050u, 0x0000005fu, 0x0000172du, 0x00001349u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000172eu, 0x0000172du, 0x0004003du, 0x0000001eu, 0x00001730u, 0x000001a4u, 0x0003003eu, 0x0000172fu, 0x00001730u, 0x0004003du, 0x00000006u, 0x00001732u, 0x000001a5u, 0x0003003eu, 0x00001731u, 0x00001732u, 0x0003003eu, 0x00001733u, 0x0000172eu, 0x00070039u, 0x00000009u, 0x00001734u, 0x00000160u, 0x0000172fu, 0x00001731u, 0x00001733u, 0x0003003eu, 0x000013cau, 0x00001734u, 0x000200f9u, 0x00001720u, 0x000200f8u, 0x00001720u, 0x000700f5u, 0x00000009u, 0x0000ebc6u, 0x0000eb3du, 0x000016e6u, 0x00001734u, 0x0000171fu, 0x000700f5u, 0x00000009u, 0x0000eb67u, 0x0000eb3du, 0x000016e6u, 0x0000172au, 0x0000171fu, 0x0004003du, 0x0000005du, 0x00001735u, 0x000001aau, 0x000300f7u, 0x00001737u, 0x00000000u, 0x000400fau, 0x00001735u, 0x00001736u, 0x00001737u, 0x000200f8u, 0x00001736u, 0x00050050u, 0x0000005fu, 0x0000173au, 0x00001358u, 0x0000136au, 0x0004007cu, 0x000000a2u, 0x0000173bu, 0x0000173au, 0x0004003du, 0x0000001eu, 0x0000173du, 0x000001a4u, 0x0003003eu, 0x0000173cu, 0x0000173du, 0x0004003du, 0x00000006u, 0x0000173fu, 0x000001a5u, 0x0003003eu, 0x0000173eu, 0x0000173fu, 0x0003003eu, 0x00001740u, 0x0000173bu, 0x00070039u, 0x00000009u, 0x00001741u, 0x00000160u, 0x0000173cu, 0x0000173eu, 0x00001740u, 0x0003003eu, 0x000013e1u, 0x00001741u, 0x000200f9u, 0x00001737u, 0x000200f8u, 0x00001737u, 0x000700f5u, 0x00000009u, 0x0000ebf4u, 0x0000eb3du, 0x00001720u, 0x00001741u, 0x00001736u, 0x000200f9u, 0x000016e8u, 0x000200f8u, 0x000016e8u, 0x000900f5u, 0x00000009u, 0x0000ebefu, 0x0000ebf0u, 0x00001764u, 0x0000ebf2u, 0x0000170au, 0x0000ebf4u, 0x00001737u, 0x000900f5u, 0x00000009u, 0x0000ebc0u, 0x0000ebc2u, 0x00001764u, 0x0000ebc4u, 0x0000170au, 0x0000ebc6u, 0x00001737u, 0x000900f5u, 0x00000009u, 0x0000eb90u, 0x0000174au, 0x00001764u, 0x000016f0u, 0x0000170au, 0x0000171du, 0x00001737u, 0x000900f5u, 0x00000009u, 0x0000eb61u, 0x0000eb63u, 0x00001764u, 0x0000eb65u, 0x0000170au, 0x0000eb67u, 0x00001737u, 0x000200f9u, 0x00001489u, 0x000200f8u, 0x00001489u, 0x000f00f5u, 0x00000009u, 0x0000ebd4u, 0x0000eb3du, 0x00001481u, 0x0000ebd5u, 0x00001490u, 0x0000ebdeu, 0x00001561u, 0x0000ebdfu, 0x0000158cu, 0x0000ebe6u, 0x0000162cu, 0x0000ebefu, 0x000016e8u, 0x000f00f5u, 0x00000009u, 0x0000eba5u, 0x0000eb3du, 0x00001481u, 0x0000eba6u, 0x00001490u, 0x0000ebafu, 0x00001561u, 0x0000ebb0u, 0x0000158cu, 0x0000ebb7u, 0x0000162cu, 0x0000ebc0u, 0x000016e8u, 0x000f00f5u, 0x00000009u, 0x0000eb75u, 0x0000eb3du, 0x00001481u, 0x0000eb76u, 0x00001490u, 0x0000155eu, 0x00001561u, 0x0000eb80u, 0x0000158cu, 0x0000eb87u, 0x0000162cu, 0x0000eb90u, 0x000016e8u, 0x000f00f5u, 0x00000009u, 0x0000eb46u, 0x0000eb3du, 0x00001481u, 0x0000eb47u, 0x00001490u, 0x0000eb50u, 0x00001561u, 0x0000eb51u, 0x0000158cu, 0x0000eb58u, 0x0000162cu, 0x0000eb61u, 0x000016e8u, 0x000200f9u, 0x0000138cu, 0x000200f8u, 0x0000138cu, 0x000700f5u, 0x00000009u, 0x0000ebc7u, 0x0000ebc8u, 0x00001390u, 0x0000ebd4u, 0x00001489u, 0x000700f5u, 0x00000009u, 0x0000eb98u, 0x0000eb99u, 0x00001390u, 0x0000eba5u, 0x00001489u, 0x000700f5u, 0x00000009u, 0x0000eb69u, 0x0000eb6au, 0x00001390u, 0x0000eb75u, 0x00001489u, 0x000700f5u, 0x00000009u, 0x0000eb38u, 0x0000eb39u, 0x00001390u, 0x0000eb46u, 0x00001489u, 0x0004003du, 0x0000005du, 0x00001773u, 0x000001abu, 0x000300f7u, 0x00001775u, 0x00000000u, 0x000400fau, 0x00001773u, 0x00001774u, 0x000017abu, 0x000200f8u, 0x00001774u, 0x0004003du, 0x00000009u, 0x00001777u, 0x000001acu, 0x00050051u, 0x00000008u, 0x00001778u, 0x00001777u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001779u, 0x00001777u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000177au, 0x00001777u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000177bu, 0x00001777u, 0x00000003u, 0x000600cau, 0x00000009u, 0x0000177du, 0x00001777u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x00001776u, 0x0000177du, 0x000300f7u, 0x00001783u, 0x00000000u, 0x000400fau, 0x0000137eu, 0x00001782u, 0x00001786u, 0x000200f8u, 0x00001782u, 0x0004003du, 0x00000009u, 0x00001784u, 0x00001776u, 0x0007004fu, 0x0000005fu, 0x00001785u, 0x00001784u, 0x00001784u, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00001781u, 0x00001785u, 0x000200f9u, 0x00001783u, 0x000200f8u, 0x00001786u, 0x0004003du, 0x00000009u, 0x00001787u, 0x00001776u, 0x0007004fu, 0x0000005fu, 0x00001788u, 0x00001787u, 0x00001787u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001781u, 0x00001788u, 0x000200f9u, 0x00001783u, 0x000200f8u, 0x00001783u, 0x000700f5u, 0x0000005fu, 0x0000ec21u, 0x00001785u, 0x00001782u, 0x00001788u, 0x00001786u, 0x0003003eu, 0x0000177eu, 0x0000ec21u, 0x00050041u, 0x0000003eu, 0x0000178bu, 0x0000177eu, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000178cu, 0x0000178bu, 0x00050082u, 0x00000009u, 0x0000178fu, 0x0000eb38u, 0x0000eb69u, 0x00070050u, 0x00000009u, 0x00001790u, 0x0000178cu, 0x0000178cu, 0x0000178cu, 0x0000178cu, 0x00050084u, 0x00000009u, 0x00001791u, 0x00001790u, 0x0000178fu, 0x00050041u, 0x0000003eu, 0x00001792u, 0x0000177eu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001793u, 0x00001792u, 0x00050082u, 0x00000009u, 0x00001796u, 0x0000eb98u, 0x0000eb69u, 0x00070050u, 0x00000009u, 0x00001797u, 0x00001793u, 0x00001793u, 0x00001793u, 0x00001793u, 0x00050084u, 0x00000009u, 0x00001798u, 0x00001797u, 0x00001796u, 0x00050080u, 0x00000009u, 0x00001799u, 0x00001791u, 0x00001798u, 0x00050080u, 0x00000009u, 0x0000179bu, 0x00001799u, 0x0000eee2u, 0x0003003eu, 0x0000178au, 0x0000179bu, 0x000500c3u, 0x00000009u, 0x0000179eu, 0x0000179bu, 0x0000eeedu, 0x0003003eu, 0x0000178au, 0x0000179eu, 0x00050041u, 0x0000003eu, 0x0000179fu, 0x00001776u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000017a0u, 0x0000179fu, 0x00070050u, 0x00000009u, 0x000017a2u, 0x000017a0u, 0x000017a0u, 0x000017a0u, 0x000017a0u, 0x00050080u, 0x00000009u, 0x000017a3u, 0x0000179eu, 0x000017a2u, 0x0003003eu, 0x0000178au, 0x000017a3u, 0x00050051u, 0x00000008u, 0x000017a6u, 0x000017a3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000017a7u, 0x000017a3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000017a8u, 0x000017a3u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000017a9u, 0x000017a3u, 0x00000003u, 0x0003003eu, 0x000017a4u, 0x000017a3u, 0x000200f9u, 0x00001775u, 0x000200f8u, 0x000017abu, 0x000300f7u, 0x000017aeu, 0x00000000u, 0x000400fau, 0x0000137bu, 0x000017adu, 0x000017e6u, 0x000200f8u, 0x000017adu, 0x0004003du, 0x0000005du, 0x000017afu, 0x000001a9u, 0x000300f7u, 0x000017b1u, 0x00000000u, 0x000400fau, 0x000017afu, 0x000017b0u, 0x000017e4u, 0x000200f8u, 0x000017b0u, 0x000500c7u, 0x00000008u, 0x000017b4u, 0x00001349u, 0x00000212u, 0x000500c4u, 0x00000008u, 0x000017b5u, 0x000017b4u, 0x0000021bu, 0x0004003du, 0x00000008u, 0x000017b7u, 0x0000133bu, 0x000500c3u, 0x00000008u, 0x000017b8u, 0x000017b7u, 0x00000212u, 0x000500c5u, 0x00000008u, 0x000017b9u, 0x000017b5u, 0x000017b8u, 0x0003003eu, 0x000017b2u, 0x000017b9u, 0x0004003du, 0x00000008u, 0x000017bdu, 0x0000133du, 0x00050050u, 0x0000005fu, 0x000017beu, 0x000017b9u, 0x000017bdu, 0x0007004fu, 0x0000005fu, 0x000017c1u, 0x0000eb69u, 0x0000eb69u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017bfu, 0x000017c1u, 0x0007004fu, 0x0000005fu, 0x000017c4u, 0x0000eb38u, 0x0000eb38u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017c2u, 0x000017c4u, 0x0007004fu, 0x0000005fu, 0x000017c7u, 0x0000eb98u, 0x0000eb98u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017c5u, 0x000017c7u, 0x0007004fu, 0x0000005fu, 0x000017cau, 0x0000ebc7u, 0x0000ebc7u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017c8u, 0x000017cau, 0x0003003eu, 0x000017cbu, 0x000017beu, 0x00090039u, 0x0000005fu, 0x000017ccu, 0x000001a1u, 0x000017bfu, 0x000017c2u, 0x000017c5u, 0x000017c8u, 0x000017cbu, 0x0003003eu, 0x000017bau, 0x000017ccu, 0x0007004fu, 0x0000005fu, 0x000017d0u, 0x0000eb69u, 0x0000eb69u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017ceu, 0x000017d0u, 0x0007004fu, 0x0000005fu, 0x000017d3u, 0x0000eb38u, 0x0000eb38u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017d1u, 0x000017d3u, 0x0007004fu, 0x0000005fu, 0x000017d6u, 0x0000eb98u, 0x0000eb98u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017d4u, 0x000017d6u, 0x0007004fu, 0x0000005fu, 0x000017d9u, 0x0000ebc7u, 0x0000ebc7u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x000017d7u, 0x000017d9u, 0x0004003du, 0x0000005fu, 0x000017dbu, 0x00001335u, 0x0003003eu, 0x000017dau, 0x000017dbu, 0x00090039u, 0x0000005fu, 0x000017dcu, 0x000001a1u, 0x000017ceu, 0x000017d1u, 0x000017d4u, 0x000017d7u, 0x000017dau, 0x0003003eu, 0x000017cdu, 0x000017dcu, 0x00050051u, 0x00000008u, 0x000017dfu, 0x000017ccu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000017e0u, 0x000017ccu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000017e1u, 0x000017dcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000017e2u, 0x000017dcu, 0x00000001u, 0x00070050u, 0x00000009u, 0x000017e3u, 0x000017dfu, 0x000017e0u, 0x000017e1u, 0x000017e2u, 0x0003003eu, 0x000017a4u, 0x000017e3u, 0x000200f9u, 0x000017b1u, 0x000200f8u, 0x000017e4u, 0x0003003eu, 0x000017a4u, 0x0000eb69u, 0x000200f9u, 0x000017b1u, 0x000200f8u, 0x000017b1u, 0x000700f5u, 0x00000009u, 0x0000ec27u, 0x000017e3u, 0x000017b0u, 0x0000eb69u, 0x000017e4u, 0x000200f9u, 0x000017aeu, 0x000200f8u, 0x000017e6u, 0x0004003du, 0x0000005du, 0x000017e7u, 0x000001aau, 0x000300f7u, 0x000017e9u, 0x00000000u, 0x000400fau, 0x000017e7u, 0x000017e8u, 0x000017f5u, 0x000200f8u, 0x000017e8u, 0x00050080u, 0x00000009u, 0x000017ecu, 0x0000eb69u, 0x0000eb98u, 0x00050080u, 0x00000009u, 0x000017eeu, 0x000017ecu, 0x0000eb38u, 0x00050080u, 0x00000009u, 0x000017f0u, 0x000017eeu, 0x0000ebc7u, 0x00050080u, 0x00000009u, 0x000017f2u, 0x000017f0u, 0x0000eeecu, 0x000500c3u, 0x00000009u, 0x000017f4u, 0x000017f2u, 0x0000eeecu, 0x0003003eu, 0x000017a4u, 0x000017f4u, 0x000200f9u, 0x000017e9u, 0x000200f8u, 0x000017f5u, 0x000300f7u, 0x000017fbu, 0x00000000u, 0x000400fau, 0x0000137eu, 0x000017fau, 0x00001800u, 0x000200f8u, 0x000017fau, 0x0004003du, 0x0000005fu, 0x000017fcu, 0x00001335u, 0x0007004fu, 0x0000005fu, 0x000017fdu, 0x000017fcu, 0x000017fcu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000005fu, 0x000017ffu, 0x0000eeeeu, 0x000017fdu, 0x0003003eu, 0x000017f9u, 0x000017ffu, 0x000200f9u, 0x000017fbu, 0x000200f8u, 0x00001800u, 0x0004003du, 0x0000005fu, 0x00001801u, 0x00001335u, 0x0003003eu, 0x000017f9u, 0x00001801u, 0x000200f9u, 0x000017fbu, 0x000200f8u, 0x000017fbu, 0x000700f5u, 0x0000005fu, 0x0000eb36u, 0x000017ffu, 0x000017fau, 0x00001801u, 0x00001800u, 0x00050051u, 0x00000008u, 0x00001803u, 0x0000eb36u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001804u, 0x0000eb36u, 0x00000001u, 0x0003003eu, 0x000017f6u, 0x0000eb36u, 0x00050082u, 0x00000009u, 0x00001808u, 0x0000eb38u, 0x0000eb69u, 0x00050041u, 0x0000003eu, 0x00001809u, 0x000017f6u, 0x00000374u, 0x0004003du, 0x00000008u, 0x0000180au, 0x00001809u, 0x00070050u, 0x00000009u, 0x0000180bu, 0x0000180au, 0x0000180au, 0x0000180au, 0x0000180au, 0x00050084u, 0x00000009u, 0x0000180cu, 0x00001808u, 0x0000180bu, 0x0003003eu, 0x000017a4u, 0x0000180cu, 0x00050082u, 0x00000009u, 0x0000180fu, 0x0000eb98u, 0x0000eb69u, 0x00050041u, 0x0000003eu, 0x00001810u, 0x000017f6u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001811u, 0x00001810u, 0x00070050u, 0x00000009u, 0x00001812u, 0x00001811u, 0x00001811u, 0x00001811u, 0x00001811u, 0x00050084u, 0x00000009u, 0x00001813u, 0x0000180fu, 0x00001812u, 0x00050080u, 0x00000009u, 0x00001815u, 0x0000180cu, 0x00001813u, 0x0003003eu, 0x000017a4u, 0x00001815u, 0x00050080u, 0x00000009u, 0x00001818u, 0x00001815u, 0x0000eeefu, 0x0003003eu, 0x000017a4u, 0x00001818u, 0x000500c3u, 0x00000009u, 0x0000181bu, 0x00001818u, 0x0000eef0u, 0x0003003eu, 0x000017a4u, 0x0000181bu, 0x00050080u, 0x00000009u, 0x0000181eu, 0x0000181bu, 0x0000eb69u, 0x0003003eu, 0x000017a4u, 0x0000181eu, 0x000200f9u, 0x000017e9u, 0x000200f8u, 0x000017e9u, 0x000700f5u, 0x00000009u, 0x0000ec28u, 0x000017f4u, 0x000017e8u, 0x0000181eu, 0x000017fbu, 0x000200f9u, 0x000017aeu, 0x000200f8u, 0x000017aeu, 0x000700f5u, 0x00000009u, 0x0000ec26u, 0x0000ec27u, 0x000017b1u, 0x0000ec28u, 0x000017e9u, 0x000200f9u, 0x00001775u, 0x000200f8u, 0x00001775u, 0x000700f5u, 0x00000009u, 0x0000ec25u, 0x000017a3u, 0x00001783u, 0x0000ec26u, 0x000017aeu, 0x000200feu, 0x0000ec25u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000001bcu, 0x00000000u, 0x000001afu, 0x00030037u, 0x00000007u, 0x000001b0u, 0x00030037u, 0x00000007u, 0x000001b1u, 0x00030037u, 0x0000003eu, 0x000001b2u, 0x00030037u, 0x00000007u, 0x000001b3u, 0x00030037u, 0x0000003eu, 0x000001b4u, 0x00030037u, 0x00000060u, 0x000001b5u, 0x00030037u, 0x00000060u, 0x000001b6u, 0x00030037u, 0x00000060u, 0x000001b7u, 0x00030037u, 0x0000005eu, 0x000001b8u, 0x00030037u, 0x0000005eu, 0x000001b9u, 0x00030037u, 0x0000005eu, 0x000001bau, 0x00030037u, 0x0000005eu, 0x000001bbu, 0x000200f8u, 0x000001bdu, 0x0004003bu, 0x0000005eu, 0x00001822u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001823u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001824u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001829u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001832u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x0000183bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000183fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001864u, 0x00000007u, 0x0003003eu, 0x00001822u, 0x00000543u, 0x0003003eu, 0x00001823u, 0x00000543u, 0x0003003eu, 0x00001824u, 0x00000374u, 0x0004003du, 0x0000005du, 0x00001825u, 0x000001b8u, 0x000300f7u, 0x00001827u, 0x00000000u, 0x000400fau, 0x00001825u, 0x00001826u, 0x00001828u, 0x000200f8u, 0x00001826u, 0x0003003eu, 0x00001823u, 0x0000055eu, 0x0003003eu, 0x000001b2u, 0x0000038bu, 0x000200f9u, 0x00001827u, 0x000200f8u, 0x00001828u, 0x0004003du, 0x0000005fu, 0x0000182au, 0x000001b6u, 0x0004003du, 0x0000005fu, 0x0000182bu, 0x000001b5u, 0x00050082u, 0x0000005fu, 0x0000182cu, 0x0000182au, 0x0000182bu, 0x0003003eu, 0x00001829u, 0x0000182cu, 0x000500c3u, 0x0000005fu, 0x0000182fu, 0x0000182cu, 0x0000eee6u, 0x000500c6u, 0x0000005fu, 0x00001831u, 0x0000182cu, 0x0000182fu, 0x0003003eu, 0x00001829u, 0x00001831u, 0x0004003du, 0x0000005fu, 0x00001833u, 0x000001b7u, 0x0004003du, 0x0000005fu, 0x00001834u, 0x000001b5u, 0x00050082u, 0x0000005fu, 0x00001835u, 0x00001833u, 0x00001834u, 0x0003003eu, 0x00001832u, 0x00001835u, 0x000500c3u, 0x0000005fu, 0x00001838u, 0x00001835u, 0x0000eee6u, 0x000500c6u, 0x0000005fu, 0x0000183au, 0x00001835u, 0x00001838u, 0x0003003eu, 0x00001832u, 0x0000183au, 0x0007000cu, 0x0000005fu, 0x0000183eu, 0x00000001u, 0x0000002au, 0x00001831u, 0x0000183au, 0x0003003eu, 0x0000183bu, 0x0000183eu, 0x00050041u, 0x0000003eu, 0x00001840u, 0x0000183bu, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001841u, 0x00001840u, 0x00050041u, 0x0000003eu, 0x00001842u, 0x0000183bu, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001843u, 0x00001842u, 0x0007000cu, 0x00000008u, 0x00001844u, 0x00000001u, 0x0000002au, 0x00001841u, 0x00001843u, 0x0003003eu, 0x0000183fu, 0x00001844u, 0x000500afu, 0x0000005du, 0x00001846u, 0x00001844u, 0x00000b2cu, 0x000300f7u, 0x00001848u, 0x00000000u, 0x000400fau, 0x00001846u, 0x00001847u, 0x0000184au, 0x000200f8u, 0x00001847u, 0x0003003eu, 0x00001823u, 0x0000055eu, 0x0003003eu, 0x000001b2u, 0x0000038bu, 0x0004003du, 0x00000006u, 0x00001849u, 0x000001b3u, 0x0003003eu, 0x00001824u, 0x00001849u, 0x000200f9u, 0x00001848u, 0x000200f8u, 0x0000184au, 0x000500b1u, 0x0000005du, 0x0000184cu, 0x00001844u, 0x0000037du, 0x000300f7u, 0x0000184eu, 0x00000000u, 0x000400fau, 0x0000184cu, 0x0000184du, 0x00001863u, 0x000200f8u, 0x0000184du, 0x0004003du, 0x00000006u, 0x0000184fu, 0x000001b3u, 0x000500aau, 0x0000005du, 0x00001850u, 0x0000184fu, 0x00000374u, 0x0003003eu, 0x00001823u, 0x00001850u, 0x0003003eu, 0x00001822u, 0x0000055eu, 0x0004003du, 0x0000005du, 0x00001851u, 0x000001bau, 0x000400a8u, 0x0000005du, 0x00001852u, 0x00001851u, 0x0004003du, 0x0000005du, 0x00001853u, 0x000001bbu, 0x000400a8u, 0x0000005du, 0x00001854u, 0x00001853u, 0x000500a7u, 0x0000005du, 0x00001855u, 0x00001852u, 0x00001854u, 0x000300f7u, 0x00001857u, 0x00000000u, 0x000400fau, 0x00001855u, 0x00001856u, 0x0000185au, 0x000200f8u, 0x00001856u, 0x000600a9u, 0x00000008u, 0x00001859u, 0x00001850u, 0x0000038bu, 0x00000203u, 0x0003003eu, 0x000001b2u, 0x00001859u, 0x000200f9u, 0x00001857u, 0x000200f8u, 0x0000185au, 0x0004003du, 0x00000008u, 0x0000185bu, 0x000001b4u, 0x0007000cu, 0x00000008u, 0x0000185du, 0x00000001u, 0x0000002au, 0x0000185bu, 0x00001844u, 0x000500c4u, 0x00000008u, 0x0000185eu, 0x0000185du, 0x00000218u, 0x0004003du, 0x0000005du, 0x0000185fu, 0x000001bau, 0x000600a9u, 0x00000008u, 0x00001861u, 0x0000185fu, 0x00001860u, 0x00000203u, 0x00050080u, 0x00000008u, 0x00001862u, 0x0000185eu, 0x00001861u, 0x0003003eu, 0x000001b2u, 0x00001862u, 0x000200f9u, 0x00001857u, 0x000200f8u, 0x00001857u, 0x000200f9u, 0x0000184eu, 0x000200f8u, 0x00001863u, 0x000500c3u, 0x00000008u, 0x00001866u, 0x00001844u, 0x0000021eu, 0x0006000cu, 0x00000008u, 0x00001867u, 0x00000001u, 0x0000004au, 0x00001866u, 0x0007000cu, 0x00000008u, 0x00001868u, 0x00000001u, 0x0000002au, 0x00001867u, 0x00000203u, 0x0003003eu, 0x00001864u, 0x00001868u, 0x0004007cu, 0x00000006u, 0x0000186au, 0x00001868u, 0x0004003du, 0x00000006u, 0x0000186bu, 0x000001b3u, 0x000500aeu, 0x0000005du, 0x0000186cu, 0x0000186au, 0x0000186bu, 0x0003003eu, 0x00001823u, 0x0000186cu, 0x0004003du, 0x0000005du, 0x0000186eu, 0x000001bau, 0x000400a8u, 0x0000005du, 0x0000186fu, 0x0000186eu, 0x000500a7u, 0x0000005du, 0x00001870u, 0x0000186cu, 0x0000186fu, 0x0004003du, 0x0000005du, 0x00001871u, 0x000001bbu, 0x000400a8u, 0x0000005du, 0x00001872u, 0x00001871u, 0x000500a7u, 0x0000005du, 0x00001873u, 0x00001870u, 0x00001872u, 0x000300f7u, 0x00001875u, 0x00000000u, 0x000400fau, 0x00001873u, 0x00001874u, 0x00001876u, 0x000200f8u, 0x00001874u, 0x0003003eu, 0x000001b2u, 0x0000038bu, 0x000200f9u, 0x00001875u, 0x000200f8u, 0x00001876u, 0x000500c4u, 0x00000008u, 0x00001878u, 0x00001844u, 0x00000218u, 0x000500c3u, 0x00000008u, 0x0000187au, 0x00001878u, 0x00001868u, 0x000500c7u, 0x00000008u, 0x0000187bu, 0x0000187au, 0x0000038bu, 0x0003003eu, 0x000001b2u, 0x0000187bu, 0x0003003eu, 0x00001824u, 0x0000186au, 0x000200f9u, 0x00001875u, 0x000200f8u, 0x00001875u, 0x000600a9u, 0x00000006u, 0x0000ef1bu, 0x00001873u, 0x00000374u, 0x0000186au, 0x000200f9u, 0x0000184eu, 0x000200f8u, 0x0000184eu, 0x000700f5u, 0x00000006u, 0x0000ec31u, 0x00000374u, 0x00001857u, 0x0000ef1bu, 0x00001875u, 0x000700f5u, 0x0000005du, 0x0000ec2bu, 0x00001850u, 0x00001857u, 0x0000186cu, 0x00001875u, 0x000600a9u, 0x0000005du, 0x0000ef1cu, 0x0000184cu, 0x0000055eu, 0x00000543u, 0x000200f9u, 0x00001848u, 0x000200f8u, 0x00001848u, 0x000700f5u, 0x0000005du, 0x0000ec37u, 0x00000543u, 0x00001847u, 0x0000ef1cu, 0x0000184eu, 0x000700f5u, 0x00000006u, 0x0000ec30u, 0x00001849u, 0x00001847u, 0x0000ec31u, 0x0000184eu, 0x000700f5u, 0x0000005du, 0x0000ec2au, 0x0000055eu, 0x00001847u, 0x0000ec2bu, 0x0000184eu, 0x000200f9u, 0x00001827u, 0x000200f8u, 0x00001827u, 0x000700f5u, 0x0000005du, 0x0000ec36u, 0x00000543u, 0x00001826u, 0x0000ec37u, 0x00001848u, 0x000700f5u, 0x00000006u, 0x0000ec2fu, 0x00000374u, 0x00001826u, 0x0000ec30u, 0x00001848u, 0x000700f5u, 0x0000005du, 0x0000ec29u, 0x0000055eu, 0x00001826u, 0x0000ec2au, 0x00001848u, 0x0004003du, 0x0000005du, 0x0000187eu, 0x000001b9u, 0x000300f7u, 0x00001880u, 0x00000000u, 0x000400fau, 0x0000187eu, 0x0000187fu, 0x00001880u, 0x000200f8u, 0x0000187fu, 0x000300f7u, 0x00001883u, 0x00000000u, 0x000400fau, 0x0000ec29u, 0x00001882u, 0x00001883u, 0x000200f8u, 0x00001882u, 0x0004003du, 0x00000006u, 0x00001884u, 0x000001b3u, 0x0003003eu, 0x00001824u, 0x00001884u, 0x000200f9u, 0x00001883u, 0x000200f8u, 0x00001883u, 0x000700f5u, 0x00000006u, 0x0000ec2eu, 0x0000ec2fu, 0x0000187fu, 0x00001884u, 0x00001882u, 0x0004003du, 0x0000005du, 0x00001885u, 0x000001bbu, 0x000400a8u, 0x0000005du, 0x00001886u, 0x00001885u, 0x000300f7u, 0x00001888u, 0x00000000u, 0x000400fau, 0x00001886u, 0x00001887u, 0x0000189du, 0x000200f8u, 0x00001887u, 0x0004003du, 0x00000006u, 0x00001889u, 0x000001b0u, 0x00050080u, 0x00000006u, 0x0000188bu, 0x00001889u, 0x0000ec2eu, 0x000500c7u, 0x00000006u, 0x0000188cu, 0x0000188bu, 0x0000073fu, 0x0003003eu, 0x000001b0u, 0x0000188cu, 0x000400a8u, 0x0000005du, 0x0000188eu, 0x0000ec29u, 0x000300f7u, 0x00001890u, 0x00000000u, 0x000400fau, 0x0000188eu, 0x0000188fu, 0x00001890u, 0x000200f8u, 0x0000188fu, 0x0004003du, 0x0000005du, 0x00001891u, 0x000001bau, 0x000400a8u, 0x0000005du, 0x00001892u, 0x00001891u, 0x000500a7u, 0x0000005du, 0x00001894u, 0x00001892u, 0x0000ec36u, 0x000200f9u, 0x00001890u, 0x000200f8u, 0x00001890u, 0x000700f5u, 0x0000005du, 0x00001895u, 0x0000ec29u, 0x00001887u, 0x00001894u, 0x0000188fu, 0x000300f7u, 0x00001897u, 0x00000000u, 0x000400fau, 0x00001895u, 0x00001896u, 0x00001899u, 0x000200f8u, 0x00001896u, 0x0004003du, 0x00000006u, 0x00001898u, 0x000001b0u, 0x0003003eu, 0x000001b1u, 0x00001898u, 0x000200f9u, 0x00001897u, 0x000200f8u, 0x00001899u, 0x0004003du, 0x00000006u, 0x0000189au, 0x000001b0u, 0x00050080u, 0x00000006u, 0x0000189bu, 0x0000189au, 0x00000485u, 0x000500c7u, 0x00000006u, 0x0000189cu, 0x0000189bu, 0x0000073fu, 0x0003003eu, 0x000001b1u, 0x0000189cu, 0x000200f9u, 0x00001897u, 0x000200f8u, 0x00001897u, 0x000200f9u, 0x00001888u, 0x000200f8u, 0x0000189du, 0x0004003du, 0x00000006u, 0x0000189eu, 0x000001b0u, 0x00050080u, 0x00000006u, 0x000018a0u, 0x0000189eu, 0x0000ec2eu, 0x000500a6u, 0x0000005du, 0x000018a3u, 0x0000ec29u, 0x0000ec36u, 0x000600a9u, 0x00000008u, 0x000018a4u, 0x000018a3u, 0x00000212u, 0x00000215u, 0x0004007cu, 0x00000006u, 0x000018a5u, 0x000018a4u, 0x00050080u, 0x00000006u, 0x000018a6u, 0x000018a0u, 0x000018a5u, 0x000500c7u, 0x00000006u, 0x000018a7u, 0x000018a6u, 0x0000073fu, 0x0003003eu, 0x000001b1u, 0x000018a7u, 0x0004003du, 0x00000006u, 0x000018a8u, 0x000001b0u, 0x00050080u, 0x00000006u, 0x000018aau, 0x000018a8u, 0x0000ec2eu, 0x000600a9u, 0x00000008u, 0x000018acu, 0x0000ec36u, 0x00000203u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x000018adu, 0x000018acu, 0x00050080u, 0x00000006u, 0x000018aeu, 0x000018aau, 0x000018adu, 0x000500c7u, 0x00000006u, 0x000018afu, 0x000018aeu, 0x0000073fu, 0x0003003eu, 0x000001b0u, 0x000018afu, 0x000200f9u, 0x00001888u, 0x000200f8u, 0x00001888u, 0x000200f9u, 0x00001880u, 0x000200f8u, 0x00001880u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001c1u, 0x00000000u, 0x000001beu, 0x00030037u, 0x0000005cu, 0x000001bfu, 0x00030037u, 0x0000005cu, 0x000001c0u, 0x000200f8u, 0x000001c2u, 0x0004003bu, 0x0000005cu, 0x000018b0u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018b8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018c3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018d4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000018dfu, 0x00000007u, 0x0004003du, 0x00000009u, 0x000018b1u, 0x000001bfu, 0x00050051u, 0x00000008u, 0x000018b2u, 0x000018b1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000018b3u, 0x000018b1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000018b4u, 0x000018b1u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000018b5u, 0x000018b1u, 0x00000003u, 0x000600cau, 0x00000009u, 0x000018b7u, 0x000018b1u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000018b0u, 0x000018b7u, 0x00050041u, 0x0000003eu, 0x000018b9u, 0x000018b0u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000018bau, 0x000018b9u, 0x00050041u, 0x0000003eu, 0x000018bbu, 0x000001c0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000018bcu, 0x000018bbu, 0x00050041u, 0x0000003eu, 0x000018bdu, 0x000018b0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000018beu, 0x000018bdu, 0x00050084u, 0x00000008u, 0x000018bfu, 0x000018bcu, 0x000018beu, 0x00050080u, 0x00000008u, 0x000018c0u, 0x000018bfu, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000018c1u, 0x000018c0u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000018c2u, 0x000018bau, 0x000018c1u, 0x0003003eu, 0x000018b8u, 0x000018c2u, 0x0004003du, 0x00000008u, 0x000018c5u, 0x000018b9u, 0x00050041u, 0x0000003eu, 0x000018c6u, 0x000001c0u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000018c7u, 0x000018c6u, 0x00050041u, 0x0000003eu, 0x000018c8u, 0x000018b0u, 0x00000374u, 0x0004003du, 0x00000008u, 0x000018c9u, 0x000018c8u, 0x00050084u, 0x00000008u, 0x000018cau, 0x000018c7u, 0x000018c9u, 0x00050041u, 0x0000003eu, 0x000018cbu, 0x000001c0u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000018ccu, 0x000018cbu, 0x0004003du, 0x00000008u, 0x000018ceu, 0x000018bdu, 0x00050084u, 0x00000008u, 0x000018cfu, 0x000018ccu, 0x000018ceu, 0x00050080u, 0x00000008u, 0x000018d0u, 0x000018cau, 0x000018cfu, 0x00050080u, 0x00000008u, 0x000018d1u, 0x000018d0u, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000018d2u, 0x000018d1u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000018d3u, 0x000018c5u, 0x000018d2u, 0x0003003eu, 0x000018c3u, 0x000018d3u, 0x0004003du, 0x00000008u, 0x000018d6u, 0x000018b9u, 0x00050041u, 0x0000003eu, 0x000018d7u, 0x000001c0u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000018d8u, 0x000018d7u, 0x0004003du, 0x00000008u, 0x000018dau, 0x000018c8u, 0x00050084u, 0x00000008u, 0x000018dbu, 0x000018d8u, 0x000018dau, 0x00050080u, 0x00000008u, 0x000018dcu, 0x000018dbu, 0x00000623u, 0x000500c3u, 0x00000008u, 0x000018ddu, 0x000018dcu, 0x0000025eu, 0x00050080u, 0x00000008u, 0x000018deu, 0x000018d6u, 0x000018ddu, 0x0003003eu, 0x000018d4u, 0x000018deu, 0x0004003du, 0x00000008u, 0x000018e1u, 0x000018b9u, 0x0003003eu, 0x000018dfu, 0x000018e1u, 0x00070050u, 0x00000009u, 0x000018e6u, 0x000018c2u, 0x000018d3u, 0x000018deu, 0x000018e1u, 0x000200feu, 0x000018e6u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001c4u, 0x00000000u, 0x000000d1u, 0x00030037u, 0x0000005cu, 0x000001c3u, 0x000200f8u, 0x000001c5u, 0x0004003du, 0x00000009u, 0x000018e9u, 0x000001c3u, 0x00050082u, 0x00000009u, 0x000018ebu, 0x000018e9u, 0x0000eee2u, 0x000600cau, 0x00000009u, 0x000018ecu, 0x000018ebu, 0x00000203u, 0x00000264u, 0x00050080u, 0x00000009u, 0x000018eeu, 0x000018ecu, 0x0000eee2u, 0x000200feu, 0x000018eeu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001cbu, 0x00000000u, 0x000001c6u, 0x00030037u, 0x0000005cu, 0x000001c7u, 0x00030037u, 0x0000005cu, 0x000001c8u, 0x00030037u, 0x0000005cu, 0x000001c9u, 0x00030037u, 0x0000005cu, 0x000001cau, 0x000200f8u, 0x000001ccu, 0x0004003bu, 0x0000005cu, 0x000018f3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000018f6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000018f9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000018fcu, 0x00000007u, 0x0004003du, 0x00000009u, 0x000018f1u, 0x000001c9u, 0x000600cau, 0x00000009u, 0x000018f2u, 0x000018f1u, 0x00000203u, 0x00000264u, 0x0003003eu, 0x000001c9u, 0x000018f2u, 0x0004003du, 0x00000009u, 0x000018f4u, 0x000001c7u, 0x0003003eu, 0x000018f3u, 0x000018f4u, 0x00050039u, 0x00000009u, 0x000018f5u, 0x000001c4u, 0x000018f3u, 0x0003003eu, 0x000001c7u, 0x000018f5u, 0x0004003du, 0x00000009u, 0x000018f7u, 0x000001c8u, 0x0003003eu, 0x000018f6u, 0x000018f7u, 0x00050039u, 0x00000009u, 0x000018f8u, 0x000001c4u, 0x000018f6u, 0x0003003eu, 0x000001c8u, 0x000018f8u, 0x0004003du, 0x00000009u, 0x000018fau, 0x000001cau, 0x0003003eu, 0x000018f9u, 0x000018fau, 0x00050039u, 0x00000009u, 0x000018fbu, 0x000001c4u, 0x000018f9u, 0x0003003eu, 0x000001cau, 0x000018fbu, 0x0004003du, 0x00000009u, 0x000018fdu, 0x000001c7u, 0x0004003du, 0x00000009u, 0x000018feu, 0x000001c8u, 0x00050082u, 0x00000009u, 0x000018ffu, 0x000018fdu, 0x000018feu, 0x0004003du, 0x00000009u, 0x00001900u, 0x000001c9u, 0x00050084u, 0x00000009u, 0x00001901u, 0x000018ffu, 0x00001900u, 0x0003003eu, 0x000018fcu, 0x00001901u, 0x00050080u, 0x00000009u, 0x00001904u, 0x00001901u, 0x0000eee2u, 0x0003003eu, 0x000018fcu, 0x00001904u, 0x000500c3u, 0x00000009u, 0x00001907u, 0x00001904u, 0x0000eeedu, 0x00050051u, 0x00000008u, 0x00001908u, 0x00001907u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001909u, 0x00001907u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000190au, 0x00001907u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000190bu, 0x00001907u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000190du, 0x000001cau, 0x00050051u, 0x00000008u, 0x0000190eu, 0x0000190du, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000190fu, 0x0000190du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001910u, 0x0000190du, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001911u, 0x0000190du, 0x00000003u, 0x00050080u, 0x00000009u, 0x00001913u, 0x00001907u, 0x0000190du, 0x000200feu, 0x00001913u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001d3u, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001d0u, 0x00030037u, 0x0000003eu, 0x000001d1u, 0x00030037u, 0x0000003eu, 0x000001d2u, 0x000200f8u, 0x000001d4u, 0x0004003bu, 0x0000003du, 0x0000191fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001944u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001916u, 0x000001d1u, 0x000300f7u, 0x0000191eu, 0x00000000u, 0x000f00fbu, 0x00001916u, 0x0000191du, 0x00000000u, 0x00001917u, 0x00000001u, 0x00001918u, 0x00000002u, 0x00001919u, 0x00000004u, 0x0000191au, 0x00000007u, 0x0000191bu, 0x00000006u, 0x0000191cu, 0x000200f8u, 0x0000191du, 0x00050041u, 0x0000005cu, 0x00001937u, 0x000001d0u, 0x00000203u, 0x0004003du, 0x00000009u, 0x00001938u, 0x00001937u, 0x0008004fu, 0x0000003cu, 0x00001939u, 0x00001938u, 0x00001938u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000191fu, 0x00001939u, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x00001917u, 0x00050041u, 0x0000005cu, 0x00001920u, 0x000001d0u, 0x0000021eu, 0x0004003du, 0x00000009u, 0x00001921u, 0x00001920u, 0x0008004fu, 0x0000003cu, 0x00001922u, 0x00001921u, 0x00001921u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000191fu, 0x00001922u, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x00001918u, 0x00050041u, 0x0000005cu, 0x00001924u, 0x000001d0u, 0x00000221u, 0x0004003du, 0x00000009u, 0x00001925u, 0x00001924u, 0x0008004fu, 0x0000003cu, 0x00001926u, 0x00001925u, 0x00001925u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000191fu, 0x00001926u, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x00001919u, 0x00050041u, 0x0000005cu, 0x00001928u, 0x000001d0u, 0x00000224u, 0x0004003du, 0x00000009u, 0x00001929u, 0x00001928u, 0x0008004fu, 0x0000003cu, 0x0000192au, 0x00001929u, 0x00001929u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000191fu, 0x0000192au, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x0000191au, 0x00050041u, 0x0000005cu, 0x0000192cu, 0x000001d0u, 0x0000021bu, 0x0004003du, 0x00000009u, 0x0000192du, 0x0000192cu, 0x0008004fu, 0x0000003cu, 0x0000192eu, 0x0000192du, 0x0000192du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000191fu, 0x0000192eu, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x0000191bu, 0x00050041u, 0x0000003eu, 0x00001930u, 0x000001d0u, 0x00000264u, 0x0004003du, 0x00000008u, 0x00001931u, 0x00001930u, 0x00060050u, 0x0000003cu, 0x00001932u, 0x00001931u, 0x00001931u, 0x00001931u, 0x0003003eu, 0x0000191fu, 0x00001932u, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x0000191cu, 0x0003003eu, 0x0000191fu, 0x00001935u, 0x000200f9u, 0x0000191eu, 0x000200f8u, 0x0000191eu, 0x001100f5u, 0x0000003cu, 0x0000ec3cu, 0x00001939u, 0x0000191du, 0x00001922u, 0x00001917u, 0x00001926u, 0x00001918u, 0x0000192au, 0x00001919u, 0x0000192eu, 0x0000191au, 0x00001932u, 0x0000191bu, 0x00001935u, 0x0000191cu, 0x0004003du, 0x00000008u, 0x0000193cu, 0x000001d2u, 0x000300f7u, 0x00001943u, 0x00000000u, 0x000d00fbu, 0x0000193cu, 0x00001942u, 0x00000000u, 0x0000193du, 0x00000001u, 0x0000193eu, 0x00000002u, 0x0000193fu, 0x00000004u, 0x00001940u, 0x00000006u, 0x00001941u, 0x000200f8u, 0x00001942u, 0x00060041u, 0x0000003eu, 0x00001952u, 0x000001d0u, 0x00000203u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001953u, 0x00001952u, 0x0003003eu, 0x00001944u, 0x00001953u, 0x000200f9u, 0x00001943u, 0x000200f8u, 0x0000193du, 0x00060041u, 0x0000003eu, 0x00001945u, 0x000001d0u, 0x0000021eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001946u, 0x00001945u, 0x0003003eu, 0x00001944u, 0x00001946u, 0x000200f9u, 0x00001943u, 0x000200f8u, 0x0000193eu, 0x00060041u, 0x0000003eu, 0x00001948u, 0x000001d0u, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001949u, 0x00001948u, 0x0003003eu, 0x00001944u, 0x00001949u, 0x000200f9u, 0x00001943u, 0x000200f8u, 0x0000193fu, 0x00060041u, 0x0000003eu, 0x0000194bu, 0x000001d0u, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000194cu, 0x0000194bu, 0x0003003eu, 0x00001944u, 0x0000194cu, 0x000200f9u, 0x00001943u, 0x000200f8u, 0x00001940u, 0x00060041u, 0x0000003eu, 0x0000194eu, 0x000001d0u, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000194fu, 0x0000194eu, 0x0003003eu, 0x00001944u, 0x0000194fu, 0x000200f9u, 0x00001943u, 0x000200f8u, 0x00001941u, 0x0003003eu, 0x00001944u, 0x00001934u, 0x000200f9u, 0x00001943u, 0x000200f8u, 0x00001943u, 0x000f00f5u, 0x00000008u, 0x0000ec3du, 0x00001953u, 0x00001942u, 0x00001946u, 0x0000193du, 0x00001949u, 0x0000193eu, 0x0000194cu, 0x0000193fu, 0x0000194fu, 0x00001940u, 0x00001934u, 0x00001941u, 0x00050051u, 0x00000008u, 0x00001958u, 0x0000ec3cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001959u, 0x0000ec3cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000195au, 0x0000ec3cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000195bu, 0x00001958u, 0x00001959u, 0x0000195au, 0x0000ec3du, 0x000200feu, 0x0000195bu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001d8u, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001d5u, 0x00030037u, 0x0000003eu, 0x000001d6u, 0x00030037u, 0x0000003eu, 0x000001d7u, 0x000200f8u, 0x000001d9u, 0x0004003bu, 0x0000003du, 0x00001966u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000198cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000195eu, 0x000001d6u, 0x000300f7u, 0x00001965u, 0x00000000u, 0x000d00fbu, 0x0000195eu, 0x00001964u, 0x00000000u, 0x0000195fu, 0x00000001u, 0x00001960u, 0x00000002u, 0x00001961u, 0x00000004u, 0x00001962u, 0x00000007u, 0x00001963u, 0x000200f8u, 0x00001964u, 0x00050041u, 0x0000005cu, 0x0000197fu, 0x000001d5u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00001980u, 0x0000197fu, 0x0008004fu, 0x0000003cu, 0x00001981u, 0x00001980u, 0x00001980u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001966u, 0x00001981u, 0x000200f9u, 0x00001965u, 0x000200f8u, 0x0000195fu, 0x00050041u, 0x0000005cu, 0x00001967u, 0x000001d5u, 0x0000021eu, 0x0004003du, 0x00000009u, 0x00001968u, 0x00001967u, 0x0008004fu, 0x0000003cu, 0x00001969u, 0x00001968u, 0x00001968u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001966u, 0x00001969u, 0x000200f9u, 0x00001965u, 0x000200f8u, 0x00001960u, 0x00050041u, 0x0000005cu, 0x0000196bu, 0x000001d5u, 0x00000221u, 0x0004003du, 0x00000009u, 0x0000196cu, 0x0000196bu, 0x0008004fu, 0x0000003cu, 0x0000196du, 0x0000196cu, 0x0000196cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001966u, 0x0000196du, 0x000200f9u, 0x00001965u, 0x000200f8u, 0x00001961u, 0x00050041u, 0x0000005cu, 0x0000196fu, 0x000001d5u, 0x00000224u, 0x0004003du, 0x00000009u, 0x00001970u, 0x0000196fu, 0x0008004fu, 0x0000003cu, 0x00001971u, 0x00001970u, 0x00001970u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001966u, 0x00001971u, 0x000200f9u, 0x00001965u, 0x000200f8u, 0x00001962u, 0x00050041u, 0x0000005cu, 0x00001973u, 0x000001d5u, 0x0000021bu, 0x0004003du, 0x00000009u, 0x00001974u, 0x00001973u, 0x0008004fu, 0x0000003cu, 0x00001975u, 0x00001974u, 0x00001974u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001966u, 0x00001975u, 0x000200f9u, 0x00001965u, 0x000200f8u, 0x00001963u, 0x00060041u, 0x0000003eu, 0x00001977u, 0x000001d5u, 0x00000212u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001978u, 0x00001977u, 0x000500c4u, 0x00000008u, 0x00001979u, 0x00001978u, 0x0000025eu, 0x00060041u, 0x0000003eu, 0x0000197au, 0x000001d5u, 0x00000212u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x0000197bu, 0x0000197au, 0x000500c5u, 0x00000008u, 0x0000197cu, 0x00001979u, 0x0000197bu, 0x00060050u, 0x0000003cu, 0x0000197du, 0x0000197cu, 0x0000197cu, 0x0000197cu, 0x0003003eu, 0x00001966u, 0x0000197du, 0x000200f9u, 0x00001965u, 0x000200f8u, 0x00001965u, 0x000f00f5u, 0x0000003cu, 0x0000ec3fu, 0x00001981u, 0x00001964u, 0x00001969u, 0x0000195fu, 0x0000196du, 0x00001960u, 0x00001971u, 0x00001961u, 0x00001975u, 0x00001962u, 0x0000197du, 0x00001963u, 0x0004003du, 0x00000008u, 0x00001984u, 0x000001d7u, 0x000300f7u, 0x0000198bu, 0x00000000u, 0x000d00fbu, 0x00001984u, 0x0000198au, 0x00000000u, 0x00001985u, 0x00000001u, 0x00001986u, 0x00000002u, 0x00001987u, 0x00000004u, 0x00001988u, 0x00000006u, 0x00001989u, 0x000200f8u, 0x0000198au, 0x00060041u, 0x0000003eu, 0x0000199au, 0x000001d5u, 0x00000212u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000199bu, 0x0000199au, 0x0003003eu, 0x0000198cu, 0x0000199bu, 0x000200f9u, 0x0000198bu, 0x000200f8u, 0x00001985u, 0x00060041u, 0x0000003eu, 0x0000198du, 0x000001d5u, 0x0000021eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x0000198eu, 0x0000198du, 0x0003003eu, 0x0000198cu, 0x0000198eu, 0x000200f9u, 0x0000198bu, 0x000200f8u, 0x00001986u, 0x00060041u, 0x0000003eu, 0x00001990u, 0x000001d5u, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001991u, 0x00001990u, 0x0003003eu, 0x0000198cu, 0x00001991u, 0x000200f9u, 0x0000198bu, 0x000200f8u, 0x00001987u, 0x00060041u, 0x0000003eu, 0x00001993u, 0x000001d5u, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001994u, 0x00001993u, 0x0003003eu, 0x0000198cu, 0x00001994u, 0x000200f9u, 0x0000198bu, 0x000200f8u, 0x00001988u, 0x00060041u, 0x0000003eu, 0x00001996u, 0x000001d5u, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001997u, 0x00001996u, 0x0003003eu, 0x0000198cu, 0x00001997u, 0x000200f9u, 0x0000198bu, 0x000200f8u, 0x00001989u, 0x0003003eu, 0x0000198cu, 0x00001934u, 0x000200f9u, 0x0000198bu, 0x000200f8u, 0x0000198bu, 0x000f00f5u, 0x00000008u, 0x0000ec40u, 0x0000199bu, 0x0000198au, 0x0000198eu, 0x00001985u, 0x00001991u, 0x00001986u, 0x00001994u, 0x00001987u, 0x00001997u, 0x00001988u, 0x00001934u, 0x00001989u, 0x00050051u, 0x00000008u, 0x000019a0u, 0x0000ec3fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000019a1u, 0x0000ec3fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000019a2u, 0x0000ec3fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000019a3u, 0x000019a0u, 0x000019a1u, 0x000019a2u, 0x0000ec40u, 0x000200feu, 0x000019a3u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001ddu, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001dau, 0x00030037u, 0x0000003eu, 0x000001dbu, 0x00030037u, 0x0000003eu, 0x000001dcu, 0x000200f8u, 0x000001deu, 0x0004003bu, 0x0000003du, 0x000019b3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000019ecu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000019a6u, 0x000001dbu, 0x000300f7u, 0x000019b2u, 0x00000000u, 0x001700fbu, 0x000019a6u, 0x000019b1u, 0x00000000u, 0x000019a7u, 0x00000007u, 0x000019a8u, 0x00000001u, 0x000019a9u, 0x00000002u, 0x000019aau, 0x00000004u, 0x000019abu, 0x00000008u, 0x000019acu, 0x00000009u, 0x000019adu, 0x0000000bu, 0x000019aeu, 0x0000000du, 0x000019afu, 0x0000000fu, 0x000019b0u, 0x000200f8u, 0x000019b1u, 0x00050041u, 0x0000005cu, 0x000019e0u, 0x000001dau, 0x00000215u, 0x0004003du, 0x00000009u, 0x000019e1u, 0x000019e0u, 0x0008004fu, 0x0000003cu, 0x000019e2u, 0x000019e1u, 0x000019e1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019b3u, 0x000019e2u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019a7u, 0x00050041u, 0x0000005cu, 0x000019b4u, 0x000001dau, 0x0000021eu, 0x0004003du, 0x00000009u, 0x000019b5u, 0x000019b4u, 0x0008004fu, 0x0000003cu, 0x000019b6u, 0x000019b5u, 0x000019b5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019b3u, 0x000019b6u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019a8u, 0x00050041u, 0x0000005cu, 0x000019b8u, 0x000001dau, 0x0000021eu, 0x0004003du, 0x00000009u, 0x000019b9u, 0x000019b8u, 0x0008004fu, 0x0000003cu, 0x000019bau, 0x000019b9u, 0x000019b9u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019b3u, 0x000019bau, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019a9u, 0x00050041u, 0x0000005cu, 0x000019bcu, 0x000001dau, 0x00000221u, 0x0004003du, 0x00000009u, 0x000019bdu, 0x000019bcu, 0x0008004fu, 0x0000003cu, 0x000019beu, 0x000019bdu, 0x000019bdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019b3u, 0x000019beu, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019aau, 0x00050041u, 0x0000005cu, 0x000019c0u, 0x000001dau, 0x00000224u, 0x0004003du, 0x00000009u, 0x000019c1u, 0x000019c0u, 0x0008004fu, 0x0000003cu, 0x000019c2u, 0x000019c1u, 0x000019c1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019b3u, 0x000019c2u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019abu, 0x00050041u, 0x0000005cu, 0x000019c4u, 0x000001dau, 0x0000021bu, 0x0004003du, 0x00000009u, 0x000019c5u, 0x000019c4u, 0x0008004fu, 0x0000003cu, 0x000019c6u, 0x000019c5u, 0x000019c5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000019b3u, 0x000019c6u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019acu, 0x00050041u, 0x0000005cu, 0x000019c8u, 0x000001dau, 0x00000221u, 0x0004003du, 0x00000009u, 0x000019c9u, 0x000019c8u, 0x0008004fu, 0x0000003cu, 0x000019cau, 0x000019c9u, 0x000019c9u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019b3u, 0x000019cau, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019adu, 0x00050041u, 0x0000005cu, 0x000019ccu, 0x000001dau, 0x00000224u, 0x0004003du, 0x00000009u, 0x000019cdu, 0x000019ccu, 0x0008004fu, 0x0000003cu, 0x000019ceu, 0x000019cdu, 0x000019cdu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019b3u, 0x000019ceu, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019aeu, 0x00050041u, 0x0000005cu, 0x000019d0u, 0x000001dau, 0x0000021bu, 0x0004003du, 0x00000009u, 0x000019d1u, 0x000019d0u, 0x0008004fu, 0x0000003cu, 0x000019d2u, 0x000019d1u, 0x000019d1u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000019b3u, 0x000019d2u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019afu, 0x00050041u, 0x0000003eu, 0x000019d4u, 0x000001dau, 0x0000025eu, 0x0004003du, 0x00000008u, 0x000019d5u, 0x000019d4u, 0x00060050u, 0x0000003cu, 0x000019d6u, 0x000019d5u, 0x000019d5u, 0x000019d5u, 0x0003003eu, 0x000019b3u, 0x000019d6u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019b0u, 0x00060041u, 0x0000003eu, 0x000019d8u, 0x000001dau, 0x00000215u, 0x00000485u, 0x0004003du, 0x00000008u, 0x000019d9u, 0x000019d8u, 0x000500c4u, 0x00000008u, 0x000019dau, 0x000019d9u, 0x0000025eu, 0x00060041u, 0x0000003eu, 0x000019dbu, 0x000001dau, 0x00000215u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x000019dcu, 0x000019dbu, 0x000500c5u, 0x00000008u, 0x000019ddu, 0x000019dau, 0x000019dcu, 0x00060050u, 0x0000003cu, 0x000019deu, 0x000019ddu, 0x000019ddu, 0x000019ddu, 0x0003003eu, 0x000019b3u, 0x000019deu, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019b2u, 0x001900f5u, 0x0000003cu, 0x0000ec42u, 0x000019e2u, 0x000019b1u, 0x000019b6u, 0x000019a7u, 0x000019bau, 0x000019a8u, 0x000019beu, 0x000019a9u, 0x000019c2u, 0x000019aau, 0x000019c6u, 0x000019abu, 0x000019cau, 0x000019acu, 0x000019ceu, 0x000019adu, 0x000019d2u, 0x000019aeu, 0x000019d6u, 0x000019afu, 0x000019deu, 0x000019b0u, 0x0004003du, 0x00000008u, 0x000019e5u, 0x000001dcu, 0x000300f7u, 0x000019ebu, 0x00000000u, 0x000b00fbu, 0x000019e5u, 0x000019eau, 0x00000000u, 0x000019e6u, 0x00000001u, 0x000019e7u, 0x00000002u, 0x000019e8u, 0x00000004u, 0x000019e9u, 0x000200f8u, 0x000019eau, 0x00060041u, 0x0000003eu, 0x000019f9u, 0x000001dau, 0x00000215u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019fau, 0x000019f9u, 0x0003003eu, 0x000019ecu, 0x000019fau, 0x000200f9u, 0x000019ebu, 0x000200f8u, 0x000019e6u, 0x00050041u, 0x0000003eu, 0x000019edu, 0x000001dau, 0x0000025eu, 0x0004003du, 0x00000008u, 0x000019eeu, 0x000019edu, 0x0003003eu, 0x000019ecu, 0x000019eeu, 0x000200f9u, 0x000019ebu, 0x000200f8u, 0x000019e7u, 0x00060041u, 0x0000003eu, 0x000019f0u, 0x000001dau, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019f1u, 0x000019f0u, 0x0003003eu, 0x000019ecu, 0x000019f1u, 0x000200f9u, 0x000019ebu, 0x000200f8u, 0x000019e8u, 0x00060041u, 0x0000003eu, 0x000019f3u, 0x000001dau, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019f4u, 0x000019f3u, 0x0003003eu, 0x000019ecu, 0x000019f4u, 0x000200f9u, 0x000019ebu, 0x000200f8u, 0x000019e9u, 0x00060041u, 0x0000003eu, 0x000019f6u, 0x000001dau, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x000019f7u, 0x000019f6u, 0x0003003eu, 0x000019ecu, 0x000019f7u, 0x000200f9u, 0x000019ebu, 0x000200f8u, 0x000019ebu, 0x000d00f5u, 0x00000008u, 0x0000ec43u, 0x000019fau, 0x000019eau, 0x000019eeu, 0x000019e6u, 0x000019f1u, 0x000019e7u, 0x000019f4u, 0x000019e8u, 0x000019f7u, 0x000019e9u, 0x00050051u, 0x00000008u, 0x000019ffu, 0x0000ec42u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a00u, 0x0000ec42u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a01u, 0x0000ec42u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a02u, 0x000019ffu, 0x00001a00u, 0x00001a01u, 0x0000ec43u, 0x000200feu, 0x00001a02u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001e2u, 0x00000000u, 0x000001cfu, 0x00030037u, 0x000001ceu, 0x000001dfu, 0x00030037u, 0x0000003eu, 0x000001e0u, 0x00030037u, 0x0000003eu, 0x000001e1u, 0x000200f8u, 0x000001e3u, 0x0004003bu, 0x0000003du, 0x00001a0du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a2cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001a05u, 0x000001e0u, 0x000300f7u, 0x00001a0cu, 0x00000000u, 0x000d00fbu, 0x00001a05u, 0x00001a0bu, 0x00000000u, 0x00001a06u, 0x00000001u, 0x00001a07u, 0x00000002u, 0x00001a08u, 0x00000004u, 0x00001a09u, 0x00000006u, 0x00001a0au, 0x000200f8u, 0x00001a0bu, 0x00050041u, 0x0000005cu, 0x00001a1fu, 0x000001dfu, 0x00000218u, 0x0004003du, 0x00000009u, 0x00001a20u, 0x00001a1fu, 0x0008004fu, 0x0000003cu, 0x00001a21u, 0x00001a20u, 0x00001a20u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001a0du, 0x00001a21u, 0x000200f9u, 0x00001a0cu, 0x000200f8u, 0x00001a06u, 0x00050041u, 0x0000005cu, 0x00001a0eu, 0x000001dfu, 0x0000021eu, 0x0004003du, 0x00000009u, 0x00001a0fu, 0x00001a0eu, 0x0008004fu, 0x0000003cu, 0x00001a10u, 0x00001a0fu, 0x00001a0fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001a0du, 0x00001a10u, 0x000200f9u, 0x00001a0cu, 0x000200f8u, 0x00001a07u, 0x00050041u, 0x0000005cu, 0x00001a12u, 0x000001dfu, 0x00000221u, 0x0004003du, 0x00000009u, 0x00001a13u, 0x00001a12u, 0x0008004fu, 0x0000003cu, 0x00001a14u, 0x00001a13u, 0x00001a13u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001a0du, 0x00001a14u, 0x000200f9u, 0x00001a0cu, 0x000200f8u, 0x00001a08u, 0x00050041u, 0x0000005cu, 0x00001a16u, 0x000001dfu, 0x00000224u, 0x0004003du, 0x00000009u, 0x00001a17u, 0x00001a16u, 0x0008004fu, 0x0000003cu, 0x00001a18u, 0x00001a17u, 0x00001a17u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001a0du, 0x00001a18u, 0x000200f9u, 0x00001a0cu, 0x000200f8u, 0x00001a09u, 0x00050041u, 0x0000005cu, 0x00001a1au, 0x000001dfu, 0x0000021bu, 0x0004003du, 0x00000009u, 0x00001a1bu, 0x00001a1au, 0x0008004fu, 0x0000003cu, 0x00001a1cu, 0x00001a1bu, 0x00001a1bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001a0du, 0x00001a1cu, 0x000200f9u, 0x00001a0cu, 0x000200f8u, 0x00001a0au, 0x0003003eu, 0x00001a0du, 0x00001935u, 0x000200f9u, 0x00001a0cu, 0x000200f8u, 0x00001a0cu, 0x000f00f5u, 0x0000003cu, 0x0000ec45u, 0x00001a21u, 0x00001a0bu, 0x00001a10u, 0x00001a06u, 0x00001a14u, 0x00001a07u, 0x00001a18u, 0x00001a08u, 0x00001a1cu, 0x00001a09u, 0x00001935u, 0x00001a0au, 0x0004003du, 0x00000008u, 0x00001a24u, 0x000001e1u, 0x000300f7u, 0x00001a2bu, 0x00000000u, 0x000d00fbu, 0x00001a24u, 0x00001a2au, 0x00000000u, 0x00001a25u, 0x00000001u, 0x00001a26u, 0x00000002u, 0x00001a27u, 0x00000004u, 0x00001a28u, 0x00000006u, 0x00001a29u, 0x000200f8u, 0x00001a2au, 0x00060041u, 0x0000003eu, 0x00001a3au, 0x000001dfu, 0x00000218u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a3bu, 0x00001a3au, 0x0003003eu, 0x00001a2cu, 0x00001a3bu, 0x000200f9u, 0x00001a2bu, 0x000200f8u, 0x00001a25u, 0x00060041u, 0x0000003eu, 0x00001a2du, 0x000001dfu, 0x0000021eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a2eu, 0x00001a2du, 0x0003003eu, 0x00001a2cu, 0x00001a2eu, 0x000200f9u, 0x00001a2bu, 0x000200f8u, 0x00001a26u, 0x00060041u, 0x0000003eu, 0x00001a30u, 0x000001dfu, 0x00000221u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a31u, 0x00001a30u, 0x0003003eu, 0x00001a2cu, 0x00001a31u, 0x000200f9u, 0x00001a2bu, 0x000200f8u, 0x00001a27u, 0x00060041u, 0x0000003eu, 0x00001a33u, 0x000001dfu, 0x00000224u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a34u, 0x00001a33u, 0x0003003eu, 0x00001a2cu, 0x00001a34u, 0x000200f9u, 0x00001a2bu, 0x000200f8u, 0x00001a28u, 0x00060041u, 0x0000003eu, 0x00001a36u, 0x000001dfu, 0x0000021bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a37u, 0x00001a36u, 0x0003003eu, 0x00001a2cu, 0x00001a37u, 0x000200f9u, 0x00001a2bu, 0x000200f8u, 0x00001a29u, 0x0003003eu, 0x00001a2cu, 0x00001934u, 0x000200f9u, 0x00001a2bu, 0x000200f8u, 0x00001a2bu, 0x000f00f5u, 0x00000008u, 0x0000ec46u, 0x00001a3bu, 0x00001a2au, 0x00001a2eu, 0x00001a25u, 0x00001a31u, 0x00001a26u, 0x00001a34u, 0x00001a27u, 0x00001a37u, 0x00001a28u, 0x00001934u, 0x00001a29u, 0x00050051u, 0x00000008u, 0x00001a40u, 0x0000ec45u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a41u, 0x0000ec45u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a42u, 0x0000ec45u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a43u, 0x00001a40u, 0x00001a41u, 0x00001a42u, 0x0000ec46u, 0x000200feu, 0x00001a43u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001eeu, 0x00000000u, 0x000001e4u, 0x00030037u, 0x000001ceu, 0x000001e5u, 0x00030037u, 0x0000005cu, 0x000001e6u, 0x00030037u, 0x0000005cu, 0x000001e7u, 0x00030037u, 0x0000003eu, 0x000001e8u, 0x00030037u, 0x0000003eu, 0x000001e9u, 0x00030037u, 0x0000005eu, 0x000001eau, 0x00030037u, 0x0000005eu, 0x000001ebu, 0x00030037u, 0x0000005eu, 0x000001ecu, 0x00030037u, 0x0000003eu, 0x000001edu, 0x000200f8u, 0x000001efu, 0x0004003bu, 0x0000005cu, 0x00001a46u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a47u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a49u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a4cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a50u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a51u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a53u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a56u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a5au, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a5bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a5du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a60u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a64u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001a65u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a67u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a6au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a6eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a6fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a71u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a73u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001a75u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a7bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a7cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a80u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001a8cu, 0x00000007u, 0x0004003du, 0x000001cdu, 0x00001a48u, 0x000001e5u, 0x0003003eu, 0x00001a47u, 0x00001a48u, 0x00050041u, 0x0000003eu, 0x00001a4au, 0x000001e6u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001a4bu, 0x00001a4au, 0x0003003eu, 0x00001a49u, 0x00001a4bu, 0x00050041u, 0x0000003eu, 0x00001a4du, 0x000001e7u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001a4eu, 0x00001a4du, 0x0003003eu, 0x00001a4cu, 0x00001a4eu, 0x00070039u, 0x00000009u, 0x00001a4fu, 0x000001d3u, 0x00001a47u, 0x00001a49u, 0x00001a4cu, 0x0003003eu, 0x00001a46u, 0x00001a4fu, 0x0004003du, 0x000001cdu, 0x00001a52u, 0x000001e5u, 0x0003003eu, 0x00001a51u, 0x00001a52u, 0x00050041u, 0x0000003eu, 0x00001a54u, 0x000001e6u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001a55u, 0x00001a54u, 0x0003003eu, 0x00001a53u, 0x00001a55u, 0x00050041u, 0x0000003eu, 0x00001a57u, 0x000001e7u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001a58u, 0x00001a57u, 0x0003003eu, 0x00001a56u, 0x00001a58u, 0x00070039u, 0x00000009u, 0x00001a59u, 0x000001d8u, 0x00001a51u, 0x00001a53u, 0x00001a56u, 0x0003003eu, 0x00001a50u, 0x00001a59u, 0x0004003du, 0x000001cdu, 0x00001a5cu, 0x000001e5u, 0x0003003eu, 0x00001a5bu, 0x00001a5cu, 0x00050041u, 0x0000003eu, 0x00001a5eu, 0x000001e6u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001a5fu, 0x00001a5eu, 0x0003003eu, 0x00001a5du, 0x00001a5fu, 0x00050041u, 0x0000003eu, 0x00001a61u, 0x000001e7u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001a62u, 0x00001a61u, 0x0003003eu, 0x00001a60u, 0x00001a62u, 0x00070039u, 0x00000009u, 0x00001a63u, 0x000001ddu, 0x00001a5bu, 0x00001a5du, 0x00001a60u, 0x0003003eu, 0x00001a5au, 0x00001a63u, 0x0004003du, 0x000001cdu, 0x00001a66u, 0x000001e5u, 0x0003003eu, 0x00001a65u, 0x00001a66u, 0x00050041u, 0x0000003eu, 0x00001a68u, 0x000001e6u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a69u, 0x00001a68u, 0x0003003eu, 0x00001a67u, 0x00001a69u, 0x00050041u, 0x0000003eu, 0x00001a6bu, 0x000001e7u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a6cu, 0x00001a6bu, 0x0003003eu, 0x00001a6au, 0x00001a6cu, 0x00070039u, 0x00000009u, 0x00001a6du, 0x000001e2u, 0x00001a65u, 0x00001a67u, 0x00001a6au, 0x0003003eu, 0x00001a64u, 0x00001a6du, 0x0003003eu, 0x00001a6fu, 0x00001a4fu, 0x0003003eu, 0x00001a71u, 0x00001a59u, 0x0003003eu, 0x00001a73u, 0x00001a63u, 0x0003003eu, 0x00001a75u, 0x00001a6du, 0x00080039u, 0x00000009u, 0x00001a77u, 0x000001cbu, 0x00001a6fu, 0x00001a71u, 0x00001a73u, 0x00001a75u, 0x0003003eu, 0x00001a6eu, 0x00001a77u, 0x0004003du, 0x0000005du, 0x00001a78u, 0x000001ecu, 0x000300f7u, 0x00001a7au, 0x00000000u, 0x000400fau, 0x00001a78u, 0x00001a79u, 0x00001a9cu, 0x000200f8u, 0x00001a79u, 0x00050041u, 0x0000003eu, 0x00001a7du, 0x00001a6eu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001a7eu, 0x00001a7du, 0x0003003eu, 0x00001a7cu, 0x00001a7eu, 0x00050039u, 0x00000008u, 0x00001a7fu, 0x000000d9u, 0x00001a7cu, 0x0003003eu, 0x00001a7bu, 0x00001a7fu, 0x00050080u, 0x00000008u, 0x00001a83u, 0x00001a7fu, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00001a84u, 0x00001a83u, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00001a85u, 0x00001a7fu, 0x00001a84u, 0x0003003eu, 0x00001a80u, 0x00001a85u, 0x0004003du, 0x0000005du, 0x00001a86u, 0x000001ebu, 0x000300f7u, 0x00001a88u, 0x00000000u, 0x000400fau, 0x00001a86u, 0x00001a87u, 0x00001a96u, 0x000200f8u, 0x00001a87u, 0x0004003du, 0x0000005du, 0x00001a89u, 0x000001eau, 0x000300f7u, 0x00001a8bu, 0x00000000u, 0x000400fau, 0x00001a89u, 0x00001a8au, 0x00001a92u, 0x000200f8u, 0x00001a8au, 0x0004003du, 0x00000008u, 0x00001a8eu, 0x000001e9u, 0x00050084u, 0x00000008u, 0x00001a8fu, 0x00001a85u, 0x00001a8eu, 0x00050080u, 0x00000008u, 0x00001a90u, 0x00001a8fu, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00001a91u, 0x00001a90u, 0x00000218u, 0x0003003eu, 0x00001a8cu, 0x00001a91u, 0x000200f9u, 0x00001a8bu, 0x000200f8u, 0x00001a92u, 0x0004003du, 0x00000008u, 0x00001a93u, 0x000001e9u, 0x000500c4u, 0x00000008u, 0x00001a94u, 0x00001a93u, 0x0000021eu, 0x0003003eu, 0x00001a8cu, 0x00001a94u, 0x000200f9u, 0x00001a8bu, 0x000200f8u, 0x00001a8bu, 0x000700f5u, 0x00000008u, 0x0000ec47u, 0x00001a91u, 0x00001a8au, 0x00001a94u, 0x00001a92u, 0x0003003eu, 0x00001a80u, 0x0000ec47u, 0x000200f9u, 0x00001a88u, 0x000200f8u, 0x00001a96u, 0x0004003du, 0x00000008u, 0x00001a97u, 0x000001e8u, 0x00050080u, 0x00000008u, 0x00001a99u, 0x00001a85u, 0x00001a97u, 0x0003003eu, 0x00001a80u, 0x00001a99u, 0x000200f9u, 0x00001a88u, 0x000200f8u, 0x00001a88u, 0x000700f5u, 0x00000008u, 0x0000ec48u, 0x0000ec47u, 0x00001a8bu, 0x00001a99u, 0x00001a96u, 0x0008000cu, 0x00000008u, 0x00001a9bu, 0x00000001u, 0x0000002du, 0x0000ec48u, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x000001edu, 0x00001a9bu, 0x000200f9u, 0x00001a7au, 0x000200f8u, 0x00001a9cu, 0x0003003eu, 0x000001edu, 0x00000203u, 0x000200f9u, 0x00001a7au, 0x000200f8u, 0x00001a7au, 0x0004003du, 0x00000009u, 0x00001a9du, 0x00001a6eu, 0x000200feu, 0x00001a9du, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001f8u, 0x00000000u, 0x000001f0u, 0x00030037u, 0x000001ceu, 0x000001f1u, 0x00030037u, 0x0000005cu, 0x000001f2u, 0x00030037u, 0x0000005cu, 0x000001f3u, 0x00030037u, 0x0000003eu, 0x000001f4u, 0x00030037u, 0x0000003eu, 0x000001f5u, 0x00030037u, 0x0000005eu, 0x000001f6u, 0x00030037u, 0x0000005eu, 0x000001f7u, 0x000200f8u, 0x000001f9u, 0x0004003bu, 0x0000005cu, 0x00001aa0u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001aa1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001aa3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001aa6u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001aaau, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001aabu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001aadu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ab0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ab4u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001ab5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ab7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001abau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001abeu, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001abfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ac1u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ac4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ac8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ac9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001acbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001acdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001acfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ad2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ad5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ae0u, 0x00000007u, 0x0004003du, 0x000001cdu, 0x00001aa2u, 0x000001f1u, 0x0003003eu, 0x00001aa1u, 0x00001aa2u, 0x00050041u, 0x0000003eu, 0x00001aa4u, 0x000001f2u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001aa5u, 0x00001aa4u, 0x0003003eu, 0x00001aa3u, 0x00001aa5u, 0x00050041u, 0x0000003eu, 0x00001aa7u, 0x000001f3u, 0x00000374u, 0x0004003du, 0x00000008u, 0x00001aa8u, 0x00001aa7u, 0x0003003eu, 0x00001aa6u, 0x00001aa8u, 0x00070039u, 0x00000009u, 0x00001aa9u, 0x000001d3u, 0x00001aa1u, 0x00001aa3u, 0x00001aa6u, 0x0003003eu, 0x00001aa0u, 0x00001aa9u, 0x0004003du, 0x000001cdu, 0x00001aacu, 0x000001f1u, 0x0003003eu, 0x00001aabu, 0x00001aacu, 0x00050041u, 0x0000003eu, 0x00001aaeu, 0x000001f2u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001aafu, 0x00001aaeu, 0x0003003eu, 0x00001aadu, 0x00001aafu, 0x00050041u, 0x0000003eu, 0x00001ab1u, 0x000001f3u, 0x00000485u, 0x0004003du, 0x00000008u, 0x00001ab2u, 0x00001ab1u, 0x0003003eu, 0x00001ab0u, 0x00001ab2u, 0x00070039u, 0x00000009u, 0x00001ab3u, 0x000001d8u, 0x00001aabu, 0x00001aadu, 0x00001ab0u, 0x0003003eu, 0x00001aaau, 0x00001ab3u, 0x0004003du, 0x000001cdu, 0x00001ab6u, 0x000001f1u, 0x0003003eu, 0x00001ab5u, 0x00001ab6u, 0x00050041u, 0x0000003eu, 0x00001ab8u, 0x000001f2u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001ab9u, 0x00001ab8u, 0x0003003eu, 0x00001ab7u, 0x00001ab9u, 0x00050041u, 0x0000003eu, 0x00001abbu, 0x000001f3u, 0x000003c4u, 0x0004003du, 0x00000008u, 0x00001abcu, 0x00001abbu, 0x0003003eu, 0x00001abau, 0x00001abcu, 0x00070039u, 0x00000009u, 0x00001abdu, 0x000001ddu, 0x00001ab5u, 0x00001ab7u, 0x00001abau, 0x0003003eu, 0x00001ab4u, 0x00001abdu, 0x0004003du, 0x000001cdu, 0x00001ac0u, 0x000001f1u, 0x0003003eu, 0x00001abfu, 0x00001ac0u, 0x00050041u, 0x0000003eu, 0x00001ac2u, 0x000001f2u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001ac3u, 0x00001ac2u, 0x0003003eu, 0x00001ac1u, 0x00001ac3u, 0x00050041u, 0x0000003eu, 0x00001ac5u, 0x000001f3u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001ac6u, 0x00001ac5u, 0x0003003eu, 0x00001ac4u, 0x00001ac6u, 0x00070039u, 0x00000009u, 0x00001ac7u, 0x000001e2u, 0x00001abfu, 0x00001ac1u, 0x00001ac4u, 0x0003003eu, 0x00001abeu, 0x00001ac7u, 0x0003003eu, 0x00001ac9u, 0x00001aa9u, 0x0003003eu, 0x00001acbu, 0x00001ab3u, 0x0003003eu, 0x00001acdu, 0x00001abdu, 0x0003003eu, 0x00001acfu, 0x00001ac7u, 0x00080039u, 0x00000009u, 0x00001ad1u, 0x000001cbu, 0x00001ac9u, 0x00001acbu, 0x00001acdu, 0x00001acfu, 0x0003003eu, 0x00001ac8u, 0x00001ad1u, 0x0004003du, 0x00000009u, 0x00001ad3u, 0x00001ac8u, 0x0003003eu, 0x00001ad2u, 0x00001ad3u, 0x00050039u, 0x00000009u, 0x00001ad4u, 0x000000d3u, 0x00001ad2u, 0x0003003eu, 0x00001ac8u, 0x00001ad4u, 0x00050041u, 0x0000003eu, 0x00001ad6u, 0x00001ac8u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001ad7u, 0x00001ad6u, 0x0004003du, 0x00000008u, 0x00001ad9u, 0x00001ad6u, 0x00050080u, 0x00000008u, 0x00001adau, 0x00001ad9u, 0x00000212u, 0x000500c3u, 0x00000008u, 0x00001adbu, 0x00001adau, 0x0000025eu, 0x00050080u, 0x00000008u, 0x00001adcu, 0x00001ad7u, 0x00001adbu, 0x0003003eu, 0x00001ad5u, 0x00001adcu, 0x0004003du, 0x0000005du, 0x00001addu, 0x000001f6u, 0x000300f7u, 0x00001adfu, 0x00000000u, 0x000400fau, 0x00001addu, 0x00001adeu, 0x00001ae8u, 0x000200f8u, 0x00001adeu, 0x0004003du, 0x00000008u, 0x00001ae2u, 0x000001f5u, 0x00050084u, 0x00000008u, 0x00001ae3u, 0x00001adcu, 0x00001ae2u, 0x00050080u, 0x00000008u, 0x00001ae4u, 0x00001ae3u, 0x0000021bu, 0x000500c3u, 0x00000008u, 0x00001ae5u, 0x00001ae4u, 0x00000218u, 0x0003003eu, 0x00001ae0u, 0x00001ae5u, 0x000500c3u, 0x00000008u, 0x00001ae7u, 0x00001ae5u, 0x0000021eu, 0x0003003eu, 0x000001f5u, 0x00001ae7u, 0x000200f9u, 0x00001adfu, 0x000200f8u, 0x00001ae8u, 0x0004003du, 0x00000008u, 0x00001ae9u, 0x000001f5u, 0x000500c4u, 0x00000008u, 0x00001aeau, 0x00001ae9u, 0x0000021eu, 0x0003003eu, 0x00001ae0u, 0x00001aeau, 0x000200f9u, 0x00001adfu, 0x000200f8u, 0x00001adfu, 0x000700f5u, 0x00000008u, 0x0000ec4au, 0x00001ae5u, 0x00001adeu, 0x00001aeau, 0x00001ae8u, 0x0004003du, 0x0000005du, 0x00001aebu, 0x000001f7u, 0x000300f7u, 0x00001aedu, 0x00000000u, 0x000400fau, 0x00001aebu, 0x00001aecu, 0x00001aefu, 0x000200f8u, 0x00001aecu, 0x0003003eu, 0x00001ad5u, 0x0000ec4au, 0x000200f9u, 0x00001aedu, 0x000200f8u, 0x00001aefu, 0x0004003du, 0x00000008u, 0x00001af0u, 0x000001f4u, 0x00050080u, 0x00000008u, 0x00001af2u, 0x00001adcu, 0x00001af0u, 0x0003003eu, 0x00001ad5u, 0x00001af2u, 0x000200f9u, 0x00001aedu, 0x000200f8u, 0x00001aedu, 0x000700f5u, 0x00000008u, 0x0000ec4bu, 0x0000ec4au, 0x00001aecu, 0x00001af2u, 0x00001aefu, 0x0008000cu, 0x00000008u, 0x00001af4u, 0x00000001u, 0x0000002du, 0x0000ec4bu, 0x00000203u, 0x0000038bu, 0x0003003eu, 0x00001ad6u, 0x00001af4u, 0x0004003du, 0x00000009u, 0x00001af6u, 0x00001ac8u, 0x000200feu, 0x00001af6u, 0x00010038u, 0x00050036u, 0x0000005du, 0x000001ffu, 0x00000000u, 0x000001fau, 0x00030037u, 0x0000003eu, 0x000001fbu, 0x00030037u, 0x0000003eu, 0x000001fcu, 0x00030037u, 0x00000007u, 0x000001fdu, 0x00030037u, 0x000000c9u, 0x000001feu, 0x000200f8u, 0x00000200u, 0x0004003bu, 0x0000003eu, 0x00007a00u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079ffu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079feu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079fdu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079fcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079fbu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079fau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079f9u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079f8u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079f7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079d6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079d5u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079d4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079d3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079d2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079d1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079d0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079cfu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079ceu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x000079cdu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079afu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079aeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079adu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079acu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079abu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079aau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079a9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000079a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000079a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000079a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000079a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000079a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000079a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000079a2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007984u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007983u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007982u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007981u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007980u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000797fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000797eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000797du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000797cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000797bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000797au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007979u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007978u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007977u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000796au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007969u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007968u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007967u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007966u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007965u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007964u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007963u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007962u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007961u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007960u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007942u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007941u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007940u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000793fu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000793eu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000793du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000793cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000793bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000793au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007939u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007938u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007937u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007936u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007935u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000792eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000792du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000792cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000792bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x0000792au, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007929u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007924u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007923u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007922u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007921u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000790du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000790cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000790bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x0000790au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007909u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007908u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007907u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007906u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00007905u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007901u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00007900u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x000078ffu, 0x00000007u, 0x0005003bu, 0x0000005eu, 0x00001f2eu, 0x00000007u, 0x00000543u, 0x0004003bu, 0x0000005eu, 0x00001f2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001afau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b43u, 0x00000007u, 0x0004003bu, 0x000007c1u, 0x00001b46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001b56u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001b59u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b5cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b5fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b62u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001b65u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b68u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b6cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b70u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b75u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b79u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b7du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b81u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b86u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b8au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b8eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b92u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b96u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b9au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001b9eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ba3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ba8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001badu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bb2u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bb7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bbcu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bc1u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bc6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bcbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001bd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001be4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001be5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001be6u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001be8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001befu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c00u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c01u, 0x00000007u, 0x0004003bu, 0x000000f3u, 0x00001c02u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c04u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c07u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c09u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c0bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c0du, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c1cu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c1fu, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001c20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c22u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c24u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c26u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c28u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c2au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c52u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c53u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c56u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c59u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c70u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c73u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c78u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c7bu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c7cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c7fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c82u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c85u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c87u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c8au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c8bu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c99u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c9au, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001c9bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001c9cu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001c9du, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ca0u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001ca3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ca6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001ca8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001caau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cacu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001caeu, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cb0u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cb1u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cb2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cb3u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cc3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cc6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ccdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ccfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cd2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001cd4u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cd6u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cd8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cdau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cdcu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cdeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ce0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ce2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cf2u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001cf5u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001cf6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cf8u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001cfau, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cfcu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001cfeu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d00u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d02u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d04u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d05u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d0eu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d10u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d17u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d26u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d2au, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001d2du, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00001d3eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d51u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00001d52u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d54u, 0x00000007u, 0x0004003bu, 0x0000003du, 0x00001d59u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d61u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d64u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001d67u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d68u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d75u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d76u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d84u, 0x00000007u, 0x0004003bu, 0x00000115u, 0x00001d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d89u, 0x00000007u, 0x0004003bu, 0x00000060u, 0x00001d8bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d8du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d8fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d91u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d93u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001d95u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001d97u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001da4u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001da6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db2u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db3u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db4u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db6u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db8u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001db9u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dbau, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dd0u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001dd1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001dd3u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001dd5u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dd7u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001dd9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ddbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001dddu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001ddfu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001de1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001df1u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001df9u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001dfau, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001dfcu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001dfeu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e00u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e02u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001e04u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001e06u, 0x00000007u, 0x0004003bu, 0x000001ceu, 0x00001e1fu, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001e21u, 0x00000007u, 0x0004003bu, 0x0000005cu, 0x00001e23u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e25u, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e27u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001e29u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001e2bu, 0x00000007u, 0x0004003bu, 0x0000003eu, 0x00001e43u, 0x00000007u, 0x000300f7u, 0x00001f2au, 0x00000000u, 0x000300fbu, 0x00000374u, 0x00001f2du, 0x000200f8u, 0x00001f2du, 0x0004003du, 0x00000006u, 0x00001afbu, 0x000001fdu, 0x0003003eu, 0x00001afau, 0x00001afbu, 0x00050039u, 0x00000028u, 0x00001afcu, 0x0000002bu, 0x00001afau, 0x00050051u, 0x00000008u, 0x00007902u, 0x00001afcu, 0x00000000u, 0x0003003eu, 0x000078ffu, 0x00007902u, 0x00050051u, 0x00000008u, 0x00007903u, 0x00001afcu, 0x00000001u, 0x0003003eu, 0x00007900u, 0x00007903u, 0x00050051u, 0x00000008u, 0x00007904u, 0x00001afcu, 0x00000002u, 0x0003003eu, 0x00007901u, 0x00007904u, 0x0004003du, 0x00000008u, 0x00001afdu, 0x000001fcu, 0x00050084u, 0x00000008u, 0x00001b00u, 0x00000880u, 0x00007903u, 0x000500b1u, 0x0000005du, 0x00001b01u, 0x00001afdu, 0x00001b00u, 0x000400a8u, 0x0000005du, 0x00001b02u, 0x00001b01u, 0x000300f7u, 0x00001b04u, 0x00000000u, 0x000400fau, 0x00001b02u, 0x00001b03u, 0x00001b04u, 0x000200f8u, 0x00001b03u, 0x0004003du, 0x00000008u, 0x00001b05u, 0x000001fcu, 0x00050084u, 0x00000008u, 0x00001b08u, 0x00007904u, 0x00000880u, 0x00050080u, 0x00000008u, 0x00001b0au, 0x00001b08u, 0x00001b09u, 0x000500adu, 0x0000005du, 0x00001b0bu, 0x00001b05u, 0x00001b0au, 0x000200f9u, 0x00001b04u, 0x000200f8u, 0x00001b04u, 0x000700f5u, 0x0000005du, 0x00001b0cu, 0x00001b01u, 0x00001f2du, 0x00001b0bu, 0x00001b03u, 0x000300f7u, 0x00001b0eu, 0x00000000u, 0x000400fau, 0x00001b0cu, 0x00001b0du, 0x00001b0eu, 0x000200f8u, 0x00001b0du, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001b0eu, 0x0004003du, 0x00000006u, 0x00001b16u, 0x000001fdu, 0x00070041u, 0x00000277u, 0x00001b17u, 0x00001b15u, 0x00000203u, 0x00001b16u, 0x00000264u, 0x0004003du, 0x00000229u, 0x00001b18u, 0x00001b17u, 0x00040071u, 0x00000006u, 0x00001b19u, 0x00001b18u, 0x0003003eu, 0x00001b10u, 0x00001b19u, 0x000300f7u, 0x00001b1cu, 0x00000000u, 0x000400fau, 0x00001b1au, 0x00001b1bu, 0x00001b1cu, 0x000200f8u, 0x00001b1bu, 0x000500c7u, 0x00000006u, 0x00001b1eu, 0x00001b19u, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x00001b1fu, 0x00001b1eu, 0x00000374u, 0x000300f7u, 0x00001b21u, 0x00000000u, 0x000400fau, 0x00001b1fu, 0x00001b20u, 0x00001b21u, 0x000200f8u, 0x00001b20u, 0x0004003du, 0x00000008u, 0x00001b24u, 0x000001fbu, 0x000500c7u, 0x00000008u, 0x00001b25u, 0x00001b24u, 0x00001b23u, 0x0003003eu, 0x000001fbu, 0x00001b25u, 0x0004003du, 0x00000008u, 0x00001b28u, 0x000001fcu, 0x000500c7u, 0x00000008u, 0x00001b29u, 0x00001b28u, 0x00001b27u, 0x0003003eu, 0x000001fcu, 0x00001b29u, 0x000200f9u, 0x00001b21u, 0x000200f8u, 0x00001b21u, 0x000200f9u, 0x00001b1cu, 0x000200f8u, 0x00001b1cu, 0x00050084u, 0x00000008u, 0x00001b2du, 0x00000880u, 0x00007902u, 0x0004003du, 0x00000008u, 0x00001b2eu, 0x000001fcu, 0x00050082u, 0x00000008u, 0x00001b32u, 0x00001b2eu, 0x00001b00u, 0x00050080u, 0x00000008u, 0x00001b33u, 0x00001b2du, 0x00001b32u, 0x0004007cu, 0x00000006u, 0x00001b34u, 0x00001b33u, 0x0003003eu, 0x00001b35u, 0x00001b34u, 0x00050039u, 0x00000023u, 0x00001b36u, 0x00000026u, 0x00001b35u, 0x00050051u, 0x00000009u, 0x0000790eu, 0x00001b36u, 0x00000000u, 0x0003003eu, 0x00007905u, 0x0000790eu, 0x00050051u, 0x00000009u, 0x0000790fu, 0x00001b36u, 0x00000001u, 0x0003003eu, 0x00007906u, 0x0000790fu, 0x00050051u, 0x00000009u, 0x00007910u, 0x00001b36u, 0x00000002u, 0x0003003eu, 0x00007907u, 0x00007910u, 0x00050051u, 0x00000009u, 0x00007911u, 0x00001b36u, 0x00000003u, 0x0003003eu, 0x00007908u, 0x00007911u, 0x00050051u, 0x00000008u, 0x00007912u, 0x00001b36u, 0x00000004u, 0x0003003eu, 0x00007909u, 0x00007912u, 0x00050051u, 0x00000008u, 0x00007913u, 0x00001b36u, 0x00000005u, 0x0003003eu, 0x0000790au, 0x00007913u, 0x00050051u, 0x00000008u, 0x00007914u, 0x00001b36u, 0x00000006u, 0x0003003eu, 0x0000790bu, 0x00007914u, 0x00050051u, 0x00000008u, 0x00007915u, 0x00001b36u, 0x00000007u, 0x0003003eu, 0x0000790cu, 0x00007915u, 0x00050051u, 0x00000008u, 0x00007916u, 0x00001b36u, 0x00000008u, 0x0003003eu, 0x0000790du, 0x00007916u, 0x000500aau, 0x0000005du, 0x00001b39u, 0x00007916u, 0x00000203u, 0x000300f7u, 0x00001b3bu, 0x00000000u, 0x000400fau, 0x00001b39u, 0x00001b3au, 0x00001b3bu, 0x000200f8u, 0x00001b3au, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001b3bu, 0x0004003du, 0x00000006u, 0x00001b3eu, 0x000001fdu, 0x00070041u, 0x00000277u, 0x00001b3fu, 0x00001b15u, 0x00000203u, 0x00001b3eu, 0x0000026au, 0x0004003du, 0x00000229u, 0x00001b40u, 0x00001b3fu, 0x00040071u, 0x00000006u, 0x00001b41u, 0x00001b40u, 0x0003003eu, 0x00001b3du, 0x00001b41u, 0x0004003du, 0x00000006u, 0x00001b44u, 0x000001fdu, 0x0003003eu, 0x00001b43u, 0x00001b44u, 0x00050039u, 0x0000000au, 0x00001b45u, 0x0000000du, 0x00001b43u, 0x00050051u, 0x00000009u, 0x00007925u, 0x00001b45u, 0x00000001u, 0x0003003eu, 0x00007921u, 0x00007925u, 0x00050051u, 0x00000009u, 0x00007926u, 0x00001b45u, 0x00000003u, 0x0003003eu, 0x00007922u, 0x00007926u, 0x00050051u, 0x00000009u, 0x00007927u, 0x00001b45u, 0x00000005u, 0x0003003eu, 0x00007923u, 0x00007927u, 0x00050051u, 0x00000009u, 0x00007928u, 0x00001b45u, 0x00000007u, 0x0003003eu, 0x00007924u, 0x00007928u, 0x0004003du, 0x00000006u, 0x00001b47u, 0x000001fdu, 0x00070041u, 0x00000234u, 0x00001b48u, 0x00000a19u, 0x00000203u, 0x00001b47u, 0x00000203u, 0x0004003du, 0x0000022au, 0x00001b49u, 0x00001b48u, 0x00040071u, 0x00000237u, 0x00001b4au, 0x00001b49u, 0x0003003eu, 0x00001b46u, 0x00001b4au, 0x00050041u, 0x00000007u, 0x00001b4cu, 0x00001b46u, 0x00000374u, 0x0004003du, 0x00000006u, 0x00001b4du, 0x00001b4cu, 0x0003003eu, 0x00001b4bu, 0x00001b4du, 0x00050041u, 0x00000007u, 0x00001b4fu, 0x00001b46u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x00001b50u, 0x00001b4fu, 0x0003003eu, 0x00001b4eu, 0x00001b50u, 0x0003003eu, 0x00001b53u, 0x00001b4du, 0x00050039u, 0x00000014u, 0x00001b55u, 0x00000017u, 0x00001b53u, 0x00050051u, 0x00000009u, 0x0000792fu, 0x00001b55u, 0x00000000u, 0x0003003eu, 0x00007929u, 0x0000792fu, 0x00050051u, 0x00000009u, 0x00007930u, 0x00001b55u, 0x00000001u, 0x0003003eu, 0x0000792au, 0x00007930u, 0x00050051u, 0x00000009u, 0x00007931u, 0x00001b55u, 0x00000002u, 0x0003003eu, 0x0000792bu, 0x00007931u, 0x00050051u, 0x00000009u, 0x00007932u, 0x00001b55u, 0x00000003u, 0x0003003eu, 0x0000792cu, 0x00007932u, 0x00050051u, 0x00000006u, 0x00007933u, 0x00001b55u, 0x00000004u, 0x0003003eu, 0x0000792du, 0x00007933u, 0x00050051u, 0x00000008u, 0x00007934u, 0x00001b55u, 0x00000005u, 0x0003003eu, 0x0000792eu, 0x00007934u, 0x0003003eu, 0x00001b56u, 0x00007933u, 0x0003003eu, 0x00001b59u, 0x00007934u, 0x0003003eu, 0x00001b5cu, 0x0000792fu, 0x0003003eu, 0x00001b5fu, 0x00007930u, 0x0003003eu, 0x00001b62u, 0x00007931u, 0x0003003eu, 0x00001b65u, 0x00007932u, 0x000500c7u, 0x00000006u, 0x00001b6au, 0x00007933u, 0x00000377u, 0x000500abu, 0x0000005du, 0x00001b6bu, 0x00001b6au, 0x00000374u, 0x0003003eu, 0x00001b68u, 0x00001b6bu, 0x000500c7u, 0x00000006u, 0x00001b6eu, 0x00007933u, 0x00000a3fu, 0x000500abu, 0x0000005du, 0x00001b6fu, 0x00001b6eu, 0x00000374u, 0x0003003eu, 0x00001b6cu, 0x00001b6fu, 0x000500c7u, 0x00000006u, 0x00001b73u, 0x00007933u, 0x00001b72u, 0x000500abu, 0x0000005du, 0x00001b74u, 0x00001b73u, 0x00000374u, 0x0003003eu, 0x00001b70u, 0x00001b74u, 0x000500c7u, 0x00000006u, 0x00001b77u, 0x00007933u, 0x00000a45u, 0x000500abu, 0x0000005du, 0x00001b78u, 0x00001b77u, 0x00000374u, 0x0003003eu, 0x00001b75u, 0x00001b78u, 0x000500c7u, 0x00000006u, 0x00001b7bu, 0x00007933u, 0x00000a4bu, 0x000500abu, 0x0000005du, 0x00001b7cu, 0x00001b7bu, 0x00000374u, 0x0003003eu, 0x00001b79u, 0x00001b7cu, 0x000500c7u, 0x00000006u, 0x00001b7fu, 0x00007933u, 0x0000035bu, 0x000500abu, 0x0000005du, 0x00001b80u, 0x00001b7fu, 0x00000374u, 0x0003003eu, 0x00001b7du, 0x00001b80u, 0x000500c7u, 0x00000006u, 0x00001b84u, 0x00007933u, 0x00001b83u, 0x000500abu, 0x0000005du, 0x00001b85u, 0x00001b84u, 0x00000374u, 0x0003003eu, 0x00001b81u, 0x00001b85u, 0x000500c7u, 0x00000006u, 0x00001b88u, 0x00007933u, 0x00000f3cu, 0x000500abu, 0x0000005du, 0x00001b89u, 0x00001b88u, 0x00000374u, 0x0003003eu, 0x00001b86u, 0x00001b89u, 0x000500c7u, 0x00000006u, 0x00001b8cu, 0x00007933u, 0x00000f34u, 0x000500abu, 0x0000005du, 0x00001b8du, 0x00001b8cu, 0x00000374u, 0x0003003eu, 0x00001b8au, 0x00001b8du, 0x000500c7u, 0x00000006u, 0x00001b90u, 0x00007933u, 0x00000701u, 0x000500abu, 0x0000005du, 0x00001b91u, 0x00001b90u, 0x00000374u, 0x0003003eu, 0x00001b8eu, 0x00001b91u, 0x000500c7u, 0x00000006u, 0x00001b94u, 0x00007933u, 0x00000a51u, 0x000500abu, 0x0000005du, 0x00001b95u, 0x00001b94u, 0x00000374u, 0x0003003eu, 0x00001b92u, 0x00001b95u, 0x000500c7u, 0x00000006u, 0x00001b98u, 0x00007933u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00001b99u, 0x00001b98u, 0x00000374u, 0x0003003eu, 0x00001b96u, 0x00001b99u, 0x000500c7u, 0x00000006u, 0x00001b9cu, 0x00007933u, 0x00000e6du, 0x000500abu, 0x0000005du, 0x00001b9du, 0x00001b9cu, 0x00000374u, 0x0003003eu, 0x00001b9au, 0x00001b9du, 0x000500c7u, 0x00000006u, 0x00001ba1u, 0x00007933u, 0x00001ba0u, 0x000500abu, 0x0000005du, 0x00001ba2u, 0x00001ba1u, 0x00000374u, 0x0003003eu, 0x00001b9eu, 0x00001ba2u, 0x000500c7u, 0x00000006u, 0x00001ba6u, 0x00007933u, 0x00001ba5u, 0x000500abu, 0x0000005du, 0x00001ba7u, 0x00001ba6u, 0x00000374u, 0x0003003eu, 0x00001ba3u, 0x00001ba7u, 0x000500c7u, 0x00000006u, 0x00001babu, 0x00007933u, 0x00001baau, 0x000500abu, 0x0000005du, 0x00001bacu, 0x00001babu, 0x00000374u, 0x0003003eu, 0x00001ba8u, 0x00001bacu, 0x000500c7u, 0x00000006u, 0x00001bb0u, 0x00007933u, 0x00001bafu, 0x000500abu, 0x0000005du, 0x00001bb1u, 0x00001bb0u, 0x00000374u, 0x0003003eu, 0x00001badu, 0x00001bb1u, 0x000500c7u, 0x00000006u, 0x00001bb5u, 0x00007933u, 0x00001bb4u, 0x000500abu, 0x0000005du, 0x00001bb6u, 0x00001bb5u, 0x00000374u, 0x0003003eu, 0x00001bb2u, 0x00001bb6u, 0x000500c7u, 0x00000006u, 0x00001bbau, 0x00007933u, 0x00001bb9u, 0x000500abu, 0x0000005du, 0x00001bbbu, 0x00001bbau, 0x00000374u, 0x0003003eu, 0x00001bb7u, 0x00001bbbu, 0x000500c7u, 0x00000006u, 0x00001bbfu, 0x00007933u, 0x00001bbeu, 0x000500abu, 0x0000005du, 0x00001bc0u, 0x00001bbfu, 0x00000374u, 0x0003003eu, 0x00001bbcu, 0x00001bc0u, 0x000500c7u, 0x00000006u, 0x00001bc4u, 0x00007933u, 0x00001bc3u, 0x000500abu, 0x0000005du, 0x00001bc5u, 0x00001bc4u, 0x00000374u, 0x0003003eu, 0x00001bc1u, 0x00001bc5u, 0x000500c7u, 0x00000006u, 0x00001bc9u, 0x00007933u, 0x00001bc8u, 0x000500abu, 0x0000005du, 0x00001bcau, 0x00001bc9u, 0x00000374u, 0x0003003eu, 0x00001bc6u, 0x00001bcau, 0x000500c7u, 0x00000006u, 0x00001bceu, 0x00007933u, 0x00001bcdu, 0x000500abu, 0x0000005du, 0x00001bcfu, 0x00001bceu, 0x00000374u, 0x0003003eu, 0x00001bcbu, 0x00001bcfu, 0x000500c7u, 0x00000006u, 0x00001bd3u, 0x00007933u, 0x00001bd2u, 0x000500abu, 0x0000005du, 0x00001bd4u, 0x00001bd3u, 0x00000374u, 0x0003003eu, 0x00001bd0u, 0x00001bd4u, 0x000500c7u, 0x00000006u, 0x00001bd7u, 0x00007933u, 0x00001bd6u, 0x000500abu, 0x0000005du, 0x00001bd8u, 0x00001bd7u, 0x00000374u, 0x000300f7u, 0x00001bdau, 0x00000000u, 0x000400fau, 0x00001bd8u, 0x00001bd9u, 0x00001bdau, 0x000200f8u, 0x00001bd9u, 0x0004003du, 0x00000008u, 0x00001bdbu, 0x000001fbu, 0x0004007cu, 0x00000006u, 0x00001bdcu, 0x00001bdbu, 0x0004003du, 0x00000008u, 0x00001bddu, 0x000001fcu, 0x0004007cu, 0x00000006u, 0x00001bdeu, 0x00001bddu, 0x0004003du, 0x00000006u, 0x00001bdfu, 0x000001fdu, 0x00060041u, 0x00001be0u, 0x00001be1u, 0x00000ccfu, 0x00000203u, 0x00000218u, 0x0004003du, 0x00000006u, 0x00001be2u, 0x00001be1u, 0x00050080u, 0x00000006u, 0x00001be3u, 0x00001bdfu, 0x00001be2u, 0x0003003eu, 0x00001be4u, 0x00001bdcu, 0x0003003eu, 0x00001be5u, 0x00001bdeu, 0x0003003eu, 0x00001be6u, 0x00001be3u, 0x00070039u, 0x00000002u, 0x00001be7u, 0x00000031u, 0x00001be4u, 0x00001be5u, 0x00001be6u, 0x000200f9u, 0x00001bdau, 0x000200f8u, 0x00001bdau, 0x000500c7u, 0x00000006u, 0x00001beau, 0x00001b19u, 0x00000485u, 0x000500abu, 0x0000005du, 0x00001bebu, 0x00001beau, 0x00000374u, 0x0003003eu, 0x00001be8u, 0x00001bebu, 0x000300f7u, 0x00001beeu, 0x00000000u, 0x000400fau, 0x00001ba2u, 0x00001bedu, 0x00001c41u, 0x000200f8u, 0x00001bedu, 0x0004003du, 0x00000008u, 0x00001bf0u, 0x000001fbu, 0x000500afu, 0x0000005du, 0x00001bf3u, 0x00001bf0u, 0x00007913u, 0x000300f7u, 0x00001bf5u, 0x00000000u, 0x000400fau, 0x00001bf3u, 0x00001bf4u, 0x00001bf5u, 0x000200f8u, 0x00001bf4u, 0x0004003du, 0x00000008u, 0x00001bf6u, 0x000001fbu, 0x000500b3u, 0x0000005du, 0x00001bf9u, 0x00001bf6u, 0x00007914u, 0x000200f9u, 0x00001bf5u, 0x000200f8u, 0x00001bf5u, 0x000700f5u, 0x0000005du, 0x00001bfau, 0x00001bf3u, 0x00001bedu, 0x00001bf9u, 0x00001bf4u, 0x0003003eu, 0x00001befu, 0x00001bfau, 0x000400a8u, 0x0000005du, 0x00001bfcu, 0x00001bfau, 0x000300f7u, 0x00001bfeu, 0x00000000u, 0x000400fau, 0x00001bfcu, 0x00001bfdu, 0x00001bfeu, 0x000200f8u, 0x00001bfdu, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001bfeu, 0x0003003eu, 0x00001c02u, 0x00001b36u, 0x0003003eu, 0x00001c04u, 0x00007927u, 0x0004003du, 0x00000008u, 0x00001c08u, 0x000001fbu, 0x0003003eu, 0x00001c07u, 0x00001c08u, 0x0003003eu, 0x00001c09u, 0x00001b80u, 0x0003003eu, 0x00001c0bu, 0x00001bebu, 0x000b0039u, 0x00000002u, 0x00001c0fu, 0x000000fcu, 0x00001c02u, 0x00001c04u, 0x00001c07u, 0x00001c09u, 0x00001c0bu, 0x00001c0du, 0x00001c0eu, 0x0004003du, 0x0000005fu, 0x00001c10u, 0x00001c0du, 0x0003003eu, 0x00001c00u, 0x00001c10u, 0x0004003du, 0x00000008u, 0x00001c11u, 0x00001c0eu, 0x0003003eu, 0x00001c01u, 0x00001c11u, 0x000500c7u, 0x00000006u, 0x00001c14u, 0x00001b41u, 0x0000073fu, 0x0003003eu, 0x00001c12u, 0x00001c14u, 0x0004003du, 0x00000006u, 0x00001c16u, 0x000001fdu, 0x00080041u, 0x00000277u, 0x00001c18u, 0x00000a19u, 0x00000203u, 0x00001c16u, 0x00000215u, 0x00001c14u, 0x0004003du, 0x00000229u, 0x00001c19u, 0x00001c18u, 0x00040071u, 0x00000006u, 0x00001c1au, 0x00001c19u, 0x0003003eu, 0x00001c15u, 0x00001c1au, 0x0003003eu, 0x00001c1cu, 0x00001c1au, 0x00050039u, 0x0000001eu, 0x00001c1eu, 0x00000021u, 0x00001c1cu, 0x00050051u, 0x00000006u, 0x00007943u, 0x00001c1eu, 0x00000000u, 0x0003003eu, 0x00007935u, 0x00007943u, 0x00050051u, 0x00000006u, 0x00007944u, 0x00001c1eu, 0x00000001u, 0x0003003eu, 0x00007936u, 0x00007944u, 0x00050051u, 0x00000006u, 0x00007945u, 0x00001c1eu, 0x00000002u, 0x0003003eu, 0x00007937u, 0x00007945u, 0x00050051u, 0x00000006u, 0x00007946u, 0x00001c1eu, 0x00000003u, 0x0003003eu, 0x00007938u, 0x00007946u, 0x00050051u, 0x00000006u, 0x00007947u, 0x00001c1eu, 0x00000004u, 0x0003003eu, 0x00007939u, 0x00007947u, 0x00050051u, 0x00000006u, 0x00007948u, 0x00001c1eu, 0x00000005u, 0x0003003eu, 0x0000793au, 0x00007948u, 0x00050051u, 0x00000008u, 0x00007949u, 0x00001c1eu, 0x00000006u, 0x0003003eu, 0x0000793bu, 0x00007949u, 0x00050051u, 0x00000008u, 0x0000794au, 0x00001c1eu, 0x00000007u, 0x0003003eu, 0x0000793cu, 0x0000794au, 0x00050051u, 0x00000008u, 0x0000794bu, 0x00001c1eu, 0x00000008u, 0x0003003eu, 0x0000793du, 0x0000794bu, 0x00050051u, 0x00000008u, 0x0000794cu, 0x00001c1eu, 0x00000009u, 0x0003003eu, 0x0000793eu, 0x0000794cu, 0x00050051u, 0x00000008u, 0x0000794du, 0x00001c1eu, 0x0000000au, 0x0003003eu, 0x0000793fu, 0x0000794du, 0x00050051u, 0x00000008u, 0x0000794eu, 0x00001c1eu, 0x0000000bu, 0x0003003eu, 0x00007940u, 0x0000794eu, 0x00050051u, 0x00000008u, 0x0000794fu, 0x00001c1eu, 0x0000000cu, 0x0003003eu, 0x00007941u, 0x0000794fu, 0x00050051u, 0x00000008u, 0x00007950u, 0x00001c1eu, 0x0000000du, 0x0003003eu, 0x00007942u, 0x00007950u, 0x0003003eu, 0x00001c20u, 0x00001c1eu, 0x0003003eu, 0x00001c22u, 0x00001b50u, 0x0003003eu, 0x00001c24u, 0x00001c10u, 0x0003003eu, 0x00001c26u, 0x00001c11u, 0x0003003eu, 0x00001c28u, 0x00001b6bu, 0x0003003eu, 0x00001c2au, 0x00001b6fu, 0x000a0039u, 0x00000008u, 0x00001c2cu, 0x00000199u, 0x00001c20u, 0x00001c22u, 0x00001c24u, 0x00001c26u, 0x00001c28u, 0x00001c2au, 0x0003003eu, 0x00001c1fu, 0x00001c2cu, 0x00050041u, 0x0000003eu, 0x00001c2eu, 0x000001feu, 0x00000212u, 0x0003003eu, 0x00001c2eu, 0x00001c2cu, 0x00050041u, 0x0000003eu, 0x00001c2fu, 0x000001feu, 0x00000215u, 0x0003003eu, 0x00001c2fu, 0x0000037du, 0x000300f7u, 0x00001c32u, 0x00000000u, 0x000400fau, 0x00001ba7u, 0x00001c31u, 0x00001c32u, 0x000200f8u, 0x00001c31u, 0x00060041u, 0x00000cd0u, 0x00001c33u, 0x00000ccfu, 0x00000203u, 0x00000215u, 0x0004003du, 0x00000008u, 0x00001c34u, 0x00001c33u, 0x000500aau, 0x0000005du, 0x00001c35u, 0x00001c34u, 0x00000215u, 0x000200f9u, 0x00001c32u, 0x000200f8u, 0x00001c32u, 0x000700f5u, 0x0000005du, 0x00001c36u, 0x00001ba7u, 0x00001bfeu, 0x00001c35u, 0x00001c31u, 0x000300f7u, 0x00001c38u, 0x00000000u, 0x000400fau, 0x00001c36u, 0x00001c37u, 0x00001c38u, 0x000200f8u, 0x00001c37u, 0x000500c7u, 0x00000008u, 0x00001c3au, 0x00001c2cu, 0x00000212u, 0x000500aau, 0x0000005du, 0x00001c3bu, 0x00001c3au, 0x00000203u, 0x000200f9u, 0x00001c38u, 0x000200f8u, 0x00001c38u, 0x000700f5u, 0x0000005du, 0x00001c3cu, 0x00001c36u, 0x00001c32u, 0x00001c3bu, 0x00001c37u, 0x000300f7u, 0x00001c3eu, 0x00000000u, 0x000400fau, 0x00001c3cu, 0x00001c3du, 0x00001c3eu, 0x000200f8u, 0x00001c3du, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001c3eu, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x0000055eu, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001c41u, 0x000300f7u, 0x00001c44u, 0x00000000u, 0x000400fau, 0x00001b9du, 0x00001c43u, 0x00001c44u, 0x000200f8u, 0x00001c43u, 0x00050041u, 0x0000003eu, 0x00001c45u, 0x000001feu, 0x00000215u, 0x0003003eu, 0x00001c45u, 0x00000622u, 0x0004003du, 0x00000008u, 0x00001c46u, 0x000001fbu, 0x000500afu, 0x0000005du, 0x00001c49u, 0x00001c46u, 0x00007913u, 0x000300f7u, 0x00001c4bu, 0x00000000u, 0x000400fau, 0x00001c49u, 0x00001c4au, 0x00001c4bu, 0x000200f8u, 0x00001c4au, 0x0004003du, 0x00000008u, 0x00001c4cu, 0x000001fbu, 0x000500b3u, 0x0000005du, 0x00001c4fu, 0x00001c4cu, 0x00007914u, 0x000200f9u, 0x00001c4bu, 0x000200f8u, 0x00001c4bu, 0x000700f5u, 0x0000005du, 0x00001c50u, 0x00001c49u, 0x00001c43u, 0x00001c4fu, 0x00001c4au, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00001c50u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001c44u, 0x000200f9u, 0x00001beeu, 0x000200f8u, 0x00001beeu, 0x0003003eu, 0x00001c53u, 0x00007910u, 0x0003003eu, 0x00001c56u, 0x00007911u, 0x0004003du, 0x00000008u, 0x00001c5au, 0x000001fbu, 0x0003003eu, 0x00001c59u, 0x00001c5au, 0x00070039u, 0x00000008u, 0x00001c5bu, 0x00000084u, 0x00001c53u, 0x00001c56u, 0x00001c59u, 0x0003003eu, 0x00001c52u, 0x00001c5bu, 0x000500aau, 0x0000005du, 0x00001c5du, 0x00001c5bu, 0x00000203u, 0x000300f7u, 0x00001c5fu, 0x00000000u, 0x000400fau, 0x00001c5du, 0x00001c5eu, 0x00001c5fu, 0x000200f8u, 0x00001c5eu, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001c5fu, 0x000400cdu, 0x00000008u, 0x00001c63u, 0x00001c5bu, 0x0003003eu, 0x00001c61u, 0x00001c63u, 0x000400a8u, 0x0000005du, 0x00001c65u, 0x00001b91u, 0x000300f7u, 0x00001c67u, 0x00000000u, 0x000400fau, 0x00001c65u, 0x00001c66u, 0x00001c67u, 0x000200f8u, 0x00001c66u, 0x000500c7u, 0x00000008u, 0x00001c69u, 0x00001c5bu, 0x00000212u, 0x000500aau, 0x0000005du, 0x00001c6au, 0x00001c69u, 0x00000203u, 0x000200f9u, 0x00001c67u, 0x000200f8u, 0x00001c67u, 0x000700f5u, 0x0000005du, 0x00001c6bu, 0x00001c65u, 0x00001c5fu, 0x00001c6au, 0x00001c66u, 0x000300f7u, 0x00001c6du, 0x00000000u, 0x000400fau, 0x00001c6bu, 0x00001c6cu, 0x00001c6du, 0x000200f8u, 0x00001c6cu, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001c6du, 0x0004003du, 0x00000006u, 0x00001c71u, 0x000001fdu, 0x0003003eu, 0x00001c70u, 0x00001c71u, 0x00050039u, 0x0000000fu, 0x00001c72u, 0x00000012u, 0x00001c70u, 0x00050051u, 0x00000009u, 0x0000796bu, 0x00001c72u, 0x00000000u, 0x0003003eu, 0x00007960u, 0x0000796bu, 0x00050051u, 0x00000009u, 0x0000796cu, 0x00001c72u, 0x00000001u, 0x0003003eu, 0x00007961u, 0x0000796cu, 0x00050051u, 0x00000009u, 0x0000796du, 0x00001c72u, 0x00000002u, 0x0003003eu, 0x00007962u, 0x0000796du, 0x00050051u, 0x00000009u, 0x0000796eu, 0x00001c72u, 0x00000003u, 0x0003003eu, 0x00007963u, 0x0000796eu, 0x00050051u, 0x00000009u, 0x0000796fu, 0x00001c72u, 0x00000004u, 0x0003003eu, 0x00007964u, 0x0000796fu, 0x00050051u, 0x00000009u, 0x00007970u, 0x00001c72u, 0x00000005u, 0x0003003eu, 0x00007965u, 0x00007970u, 0x00050051u, 0x00000009u, 0x00007971u, 0x00001c72u, 0x00000006u, 0x0003003eu, 0x00007966u, 0x00007971u, 0x00050051u, 0x00000009u, 0x00007972u, 0x00001c72u, 0x00000007u, 0x0003003eu, 0x00007967u, 0x00007972u, 0x00050051u, 0x00000009u, 0x00007973u, 0x00001c72u, 0x00000009u, 0x0003003eu, 0x00007968u, 0x00007973u, 0x00050051u, 0x00000008u, 0x00007974u, 0x00001c72u, 0x0000000du, 0x0003003eu, 0x00007969u, 0x00007974u, 0x00050051u, 0x00000009u, 0x00007975u, 0x00001c72u, 0x0000000eu, 0x0003003eu, 0x0000796au, 0x00007975u, 0x0004003du, 0x00000008u, 0x00001c74u, 0x000001fbu, 0x00050082u, 0x00000008u, 0x00001c77u, 0x00001c74u, 0x00007912u, 0x0003003eu, 0x00001c73u, 0x00001c77u, 0x000600a9u, 0x00000008u, 0x00001c7au, 0x00001bebu, 0x00000212u, 0x00000cddu, 0x0003003eu, 0x00001c78u, 0x00001c7au, 0x0003003eu, 0x00001c7cu, 0x0000790eu, 0x0003003eu, 0x00001c7fu, 0x00007925u, 0x0003003eu, 0x00001c82u, 0x00007926u, 0x0003003eu, 0x00001c85u, 0x00001c77u, 0x0003003eu, 0x00001c87u, 0x00001c5bu, 0x00090039u, 0x00000009u, 0x00001c89u, 0x000000f1u, 0x00001c7cu, 0x00001c7fu, 0x00001c82u, 0x00001c85u, 0x00001c87u, 0x0003003eu, 0x00001c7bu, 0x00001c89u, 0x0003003eu, 0x00001c8au, 0x00000543u, 0x0003003eu, 0x00001c8bu, 0x00001c7au, 0x000500a7u, 0x0000005du, 0x00001c8fu, 0x00001c8du, 0x00001bc5u, 0x000300f7u, 0x00001c91u, 0x00000000u, 0x000400fau, 0x00001c8fu, 0x00001c90u, 0x00001c91u, 0x000200f8u, 0x00001c90u, 0x000500c7u, 0x00000006u, 0x00001c93u, 0x00001b19u, 0x00000a45u, 0x000500abu, 0x0000005du, 0x00001c94u, 0x00001c93u, 0x00000374u, 0x000300f7u, 0x00001c96u, 0x00000000u, 0x000400fau, 0x00001c94u, 0x00001c95u, 0x00001c96u, 0x000200f8u, 0x00001c95u, 0x00050084u, 0x00000008u, 0x00001c98u, 0x00001c7au, 0x00000880u, 0x0003003eu, 0x00001c8bu, 0x00001c98u, 0x000200f9u, 0x00001c96u, 0x000200f8u, 0x00001c96u, 0x000700f5u, 0x00000008u, 0x0000ec7eu, 0x00001c7au, 0x00001c90u, 0x00001c98u, 0x00001c95u, 0x000200f9u, 0x00001c91u, 0x000200f8u, 0x00001c91u, 0x000700f5u, 0x00000008u, 0x0000ec7du, 0x00001c7au, 0x00001c6du, 0x0000ec7eu, 0x00001c96u, 0x0003003eu, 0x00001c9du, 0x0000790fu, 0x0003003eu, 0x00001ca0u, 0x00007927u, 0x0003003eu, 0x00001ca3u, 0x00007928u, 0x0003003eu, 0x00001ca6u, 0x00001c77u, 0x0003003eu, 0x00001ca8u, 0x00001c5bu, 0x0003003eu, 0x00001caau, 0x00001b80u, 0x0003003eu, 0x00001cacu, 0x00001bc5u, 0x0003003eu, 0x00001caeu, 0x0000ec7du, 0x0003003eu, 0x00001cb4u, 0x00000543u, 0x00110039u, 0x00000002u, 0x00001cb6u, 0x00000113u, 0x00001c9du, 0x00001ca0u, 0x00001ca3u, 0x00001ca6u, 0x00001ca8u, 0x00001caau, 0x00001cacu, 0x00001caeu, 0x00001cb0u, 0x00001cb1u, 0x00001cb2u, 0x00001cb3u, 0x00001cb4u, 0x0004003du, 0x0000005fu, 0x00001cb7u, 0x00001cb0u, 0x0003003eu, 0x00001c99u, 0x00001cb7u, 0x0004003du, 0x0000005fu, 0x00001cb8u, 0x00001cb1u, 0x0003003eu, 0x00001c9au, 0x00001cb8u, 0x0004003du, 0x0000005fu, 0x00001cb9u, 0x00001cb2u, 0x0003003eu, 0x00001c9bu, 0x00001cb9u, 0x0004003du, 0x00000008u, 0x00001cbau, 0x00001cb3u, 0x0003003eu, 0x00001c9cu, 0x00001cbau, 0x0004003du, 0x0000005du, 0x00001cbbu, 0x00001cb4u, 0x0003003eu, 0x00001c8au, 0x00001cbbu, 0x000500c7u, 0x00000006u, 0x00001cbeu, 0x00001b41u, 0x0000073fu, 0x0003003eu, 0x00001cbcu, 0x00001cbeu, 0x00050080u, 0x00000006u, 0x00001cc1u, 0x00001cbeu, 0x00000485u, 0x000500c7u, 0x00000006u, 0x00001cc2u, 0x00001cc1u, 0x0000073fu, 0x0003003eu, 0x00001cbfu, 0x00001cc2u, 0x000500c2u, 0x00000006u, 0x00001cc5u, 0x00001b41u, 0x0000048bu, 0x0003003eu, 0x00001cc3u, 0x00001cc5u, 0x0003003eu, 0x00001cc6u, 0x00007974u, 0x000300f7u, 0x00001ccbu, 0x00000000u, 0x000400fau, 0x00001bc5u, 0x00001ccau, 0x00001ccbu, 0x000200f8u, 0x00001ccau, 0x0003003eu, 0x00001ccdu, 0x00001cbeu, 0x0003003eu, 0x00001ccfu, 0x00001cc2u, 0x0003003eu, 0x00001cd2u, 0x00001cc5u, 0x0003003eu, 0x00001cd4u, 0x00007974u, 0x0003003eu, 0x00001cd6u, 0x00001cb7u, 0x0003003eu, 0x00001cd8u, 0x00001cb8u, 0x0003003eu, 0x00001cdau, 0x00001cb9u, 0x0003003eu, 0x00001cdcu, 0x00001cbbu, 0x0003003eu, 0x00001cdeu, 0x00001b85u, 0x0003003eu, 0x00001ce0u, 0x00001b89u, 0x0003003eu, 0x00001ce2u, 0x00001b8du, 0x00100039u, 0x00000002u, 0x00001ce4u, 0x000001bcu, 0x00001ccdu, 0x00001ccfu, 0x00001cd1u, 0x00001cd2u, 0x00001cd4u, 0x00001cd6u, 0x00001cd8u, 0x00001cdau, 0x00001cdcu, 0x00001cdeu, 0x00001ce0u, 0x00001ce2u, 0x0004003du, 0x00000006u, 0x00001ce5u, 0x00001ccdu, 0x0003003eu, 0x00001cbcu, 0x00001ce5u, 0x0004003du, 0x00000006u, 0x00001ce6u, 0x00001ccfu, 0x0003003eu, 0x00001cbfu, 0x00001ce6u, 0x0004003du, 0x00000008u, 0x00001ce7u, 0x00001cd1u, 0x0003003eu, 0x00001cccu, 0x00001ce7u, 0x000200f9u, 0x00001ccbu, 0x000200f8u, 0x00001ccbu, 0x000700f5u, 0x00000008u, 0x0000ede1u, 0x0000ede7u, 0x00001c91u, 0x00001ce7u, 0x00001ccau, 0x000700f5u, 0x00000006u, 0x0000ed36u, 0x00001cc2u, 0x00001c91u, 0x00001ce6u, 0x00001ccau, 0x000700f5u, 0x00000006u, 0x0000ec98u, 0x00001cbeu, 0x00001c91u, 0x00001ce5u, 0x00001ccau, 0x000300f7u, 0x00001ceau, 0x00000000u, 0x000400fau, 0x00001bb6u, 0x00001ce9u, 0x00001ceau, 0x000200f8u, 0x00001ce9u, 0x0004003du, 0x00000006u, 0x00001cecu, 0x000001fdu, 0x00080041u, 0x00000277u, 0x00001ceeu, 0x00000a19u, 0x00000203u, 0x00001cecu, 0x00000215u, 0x0000ec98u, 0x0004003du, 0x00000229u, 0x00001cefu, 0x00001ceeu, 0x00040071u, 0x00000006u, 0x00001cf0u, 0x00001cefu, 0x0003003eu, 0x00001cebu, 0x00001cf0u, 0x0003003eu, 0x00001cf2u, 0x00001cf0u, 0x00050039u, 0x0000001eu, 0x00001cf4u, 0x00000021u, 0x00001cf2u, 0x00050051u, 0x00000006u, 0x00007985u, 0x00001cf4u, 0x00000000u, 0x0003003eu, 0x00007977u, 0x00007985u, 0x00050051u, 0x00000006u, 0x00007986u, 0x00001cf4u, 0x00000001u, 0x0003003eu, 0x00007978u, 0x00007986u, 0x00050051u, 0x00000006u, 0x00007987u, 0x00001cf4u, 0x00000002u, 0x0003003eu, 0x00007979u, 0x00007987u, 0x00050051u, 0x00000006u, 0x00007988u, 0x00001cf4u, 0x00000003u, 0x0003003eu, 0x0000797au, 0x00007988u, 0x00050051u, 0x00000006u, 0x00007989u, 0x00001cf4u, 0x00000004u, 0x0003003eu, 0x0000797bu, 0x00007989u, 0x00050051u, 0x00000006u, 0x0000798au, 0x00001cf4u, 0x00000005u, 0x0003003eu, 0x0000797cu, 0x0000798au, 0x00050051u, 0x00000008u, 0x0000798bu, 0x00001cf4u, 0x00000006u, 0x0003003eu, 0x0000797du, 0x0000798bu, 0x00050051u, 0x00000008u, 0x0000798cu, 0x00001cf4u, 0x00000007u, 0x0003003eu, 0x0000797eu, 0x0000798cu, 0x00050051u, 0x00000008u, 0x0000798du, 0x00001cf4u, 0x00000008u, 0x0003003eu, 0x0000797fu, 0x0000798du, 0x00050051u, 0x00000008u, 0x0000798eu, 0x00001cf4u, 0x00000009u, 0x0003003eu, 0x00007980u, 0x0000798eu, 0x00050051u, 0x00000008u, 0x0000798fu, 0x00001cf4u, 0x0000000au, 0x0003003eu, 0x00007981u, 0x0000798fu, 0x00050051u, 0x00000008u, 0x00007990u, 0x00001cf4u, 0x0000000bu, 0x0003003eu, 0x00007982u, 0x00007990u, 0x00050051u, 0x00000008u, 0x00007991u, 0x00001cf4u, 0x0000000cu, 0x0003003eu, 0x00007983u, 0x00007991u, 0x00050051u, 0x00000008u, 0x00007992u, 0x00001cf4u, 0x0000000du, 0x0003003eu, 0x00007984u, 0x00007992u, 0x0003003eu, 0x00001cf6u, 0x00001cf4u, 0x0003003eu, 0x00001cf8u, 0x00001b50u, 0x0003003eu, 0x00001cfau, 0x00001cb7u, 0x0003003eu, 0x00001cfcu, 0x00001b6bu, 0x0003003eu, 0x00001cfeu, 0x00001b6fu, 0x0003003eu, 0x00001d00u, 0x00001b74u, 0x0003003eu, 0x00001d02u, 0x00001bb1u, 0x0003003eu, 0x00001d04u, 0x00000543u, 0x0003003eu, 0x00001d05u, 0x00000611u, 0x000d0039u, 0x00000009u, 0x00001d06u, 0x000001adu, 0x00001cf6u, 0x00001cf8u, 0x00001cfau, 0x00001cfcu, 0x00001cfeu, 0x00001d00u, 0x00001d02u, 0x00001d04u, 0x00001d05u, 0x0003003eu, 0x00001cf5u, 0x00001d06u, 0x000400a8u, 0x0000005du, 0x00001d08u, 0x00001b74u, 0x000400a8u, 0x0000005du, 0x00001d0au, 0x00001bcfu, 0x000500a7u, 0x0000005du, 0x00001d0bu, 0x00001d08u, 0x00001d0au, 0x000300f7u, 0x00001d0du, 0x00000000u, 0x000400fau, 0x00001d0bu, 0x00001d0cu, 0x00001d0du, 0x000200f8u, 0x00001d0cu, 0x0003003eu, 0x00001d0eu, 0x00001d06u, 0x0003003eu, 0x00001d10u, 0x00007975u, 0x00060039u, 0x00000009u, 0x00001d13u, 0x000001c1u, 0x00001d0eu, 0x00001d10u, 0x0003003eu, 0x00001cf5u, 0x00001d13u, 0x000200f9u, 0x00001d0du, 0x000200f8u, 0x00001d0du, 0x000700f5u, 0x00000009u, 0x0000ed66u, 0x00001d06u, 0x00001ce9u, 0x00001d13u, 0x00001d0cu, 0x000200f9u, 0x00001ceau, 0x000200f8u, 0x00001ceau, 0x000700f5u, 0x00000009u, 0x0000ed5cu, 0x0000ed63u, 0x00001ccbu, 0x0000ed66u, 0x00001d0du, 0x000300f7u, 0x00001d16u, 0x00000000u, 0x000400fau, 0x00001bc0u, 0x00001d15u, 0x00001d16u, 0x000200f8u, 0x00001d15u, 0x0004003du, 0x00000008u, 0x00001d1bu, 0x000001fcu, 0x00050082u, 0x00000008u, 0x00001d1fu, 0x00001d1bu, 0x00001b00u, 0x00050080u, 0x00000008u, 0x00001d20u, 0x00001d1fu, 0x00000212u, 0x00050080u, 0x00000008u, 0x00001d21u, 0x00001b2du, 0x00001d20u, 0x00070041u, 0x00000270u, 0x00001d22u, 0x00000314u, 0x00000203u, 0x00001d21u, 0x0000025eu, 0x0004003du, 0x0000022bu, 0x00001d23u, 0x00001d22u, 0x00040071u, 0x00000006u, 0x00001d24u, 0x00001d23u, 0x000500abu, 0x0000005du, 0x00001d25u, 0x00001d24u, 0x00000374u, 0x0003003eu, 0x00001d17u, 0x00001d25u, 0x000500afu, 0x0000005du, 0x00001d29u, 0x00007915u, 0x0000025eu, 0x0003003eu, 0x00001d26u, 0x00001d29u, 0x0004003du, 0x00000008u, 0x00001d2bu, 0x000001fbu, 0x000300f7u, 0x00001d2fu, 0x00000000u, 0x000400fau, 0x00001bebu, 0x00001d2eu, 0x00001d32u, 0x000200f8u, 0x00001d2eu, 0x0003003eu, 0x00001d2du, 0x00007914u, 0x000200f9u, 0x00001d2fu, 0x000200f8u, 0x00001d32u, 0x0003003eu, 0x00001d2du, 0x00007913u, 0x000200f9u, 0x00001d2fu, 0x000200f8u, 0x00001d2fu, 0x000600a9u, 0x00000008u, 0x0000ef1du, 0x00001bebu, 0x00007914u, 0x00007913u, 0x000500aau, 0x0000005du, 0x00001d36u, 0x00001d2bu, 0x0000ef1du, 0x0003003eu, 0x00001d2au, 0x00001d36u, 0x000500a7u, 0x0000005du, 0x00001d39u, 0x00001d36u, 0x00001d29u, 0x000500a7u, 0x0000005du, 0x00001d3bu, 0x00001d39u, 0x00001d25u, 0x000300f7u, 0x00001d3du, 0x00000000u, 0x000400fau, 0x00001d3bu, 0x00001d3cu, 0x00001d5cu, 0x000200f8u, 0x00001d3cu, 0x0004003du, 0x00000008u, 0x00001d42u, 0x000001fcu, 0x00050082u, 0x00000008u, 0x00001d46u, 0x00001d42u, 0x00001b00u, 0x00050080u, 0x00000008u, 0x00001d47u, 0x00001d46u, 0x00000212u, 0x00050080u, 0x00000008u, 0x00001d48u, 0x00001b2du, 0x00001d47u, 0x00070041u, 0x00000316u, 0x00001d49u, 0x00000314u, 0x00000203u, 0x00001d48u, 0x00000212u, 0x0004003du, 0x00000009u, 0x00001d4au, 0x00001d49u, 0x0008004fu, 0x0000003cu, 0x00001d4bu, 0x00001d4au, 0x00001d4au, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x0000003cu, 0x00001d4du, 0x00001d4bu, 0x0000eedfu, 0x0003003eu, 0x00001d3eu, 0x00001d4du, 0x000300f7u, 0x00001d50u, 0x00000000u, 0x000400fau, 0x00001b80u, 0x00001d4fu, 0x00001d58u, 0x000200f8u, 0x00001d4fu, 0x0003003eu, 0x00001d52u, 0x00001d4du, 0x00060039u, 0x0000005fu, 0x00001d56u, 0x000000e9u, 0x00001d52u, 0x00001d54u, 0x0004003du, 0x0000005du, 0x00001d57u, 0x00001d54u, 0x0003003eu, 0x00001d51u, 0x00001d57u, 0x0003003eu, 0x00001c99u, 0x00001d56u, 0x000200f9u, 0x00001d50u, 0x000200f8u, 0x00001d58u, 0x0003003eu, 0x00001d59u, 0x00001d4du, 0x00050039u, 0x0000005fu, 0x00001d5bu, 0x000000e4u, 0x00001d59u, 0x0003003eu, 0x00001c99u, 0x00001d5bu, 0x000200f9u, 0x00001d50u, 0x000200f8u, 0x00001d50u, 0x000700f5u, 0x0000005fu, 0x0000ed42u, 0x00001d56u, 0x00001d4fu, 0x00001d5bu, 0x00001d58u, 0x000200f9u, 0x00001d3du, 0x000200f8u, 0x00001d5cu, 0x00050084u, 0x00000008u, 0x00001d5fu, 0x00001c7au, 0x00000880u, 0x00050080u, 0x00000008u, 0x00001d60u, 0x00001c77u, 0x00001d5fu, 0x0003003eu, 0x00001d61u, 0x0000790fu, 0x0003003eu, 0x00001d64u, 0x00007927u, 0x0003003eu, 0x00001d67u, 0x00001d60u, 0x0003003eu, 0x00001d68u, 0x00001b80u, 0x00080039u, 0x0000005fu, 0x00001d6au, 0x00000103u, 0x00001d61u, 0x00001d64u, 0x00001d67u, 0x00001d68u, 0x0003003eu, 0x00001c99u, 0x00001d6au, 0x000200f9u, 0x00001d3du, 0x000200f8u, 0x00001d3du, 0x000700f5u, 0x0000005fu, 0x0000ed41u, 0x0000ed42u, 0x00001d50u, 0x00001d6au, 0x00001d5cu, 0x0003003eu, 0x00001cbfu, 0x0000ec98u, 0x0003003eu, 0x00001bb7u, 0x0000055eu, 0x000200f9u, 0x00001d16u, 0x000200f8u, 0x00001d16u, 0x000700f5u, 0x0000005fu, 0x0000ed3eu, 0x00001cb7u, 0x00001ceau, 0x0000ed41u, 0x00001d3du, 0x000600a9u, 0x00000006u, 0x0000ef1eu, 0x00001bc0u, 0x0000ec98u, 0x0000ed36u, 0x000600a9u, 0x0000005du, 0x0000ef1fu, 0x00001bc0u, 0x0000055eu, 0x00001bbbu, 0x000300f7u, 0x00001d6eu, 0x00000000u, 0x000400fau, 0x0000ef1fu, 0x00001d6du, 0x00001d6eu, 0x000200f8u, 0x00001d6du, 0x000400a8u, 0x0000005du, 0x00001d71u, 0x00001bd4u, 0x000500a7u, 0x0000005du, 0x00001d72u, 0x00001bcau, 0x00001d71u, 0x000300f7u, 0x00001d74u, 0x00000000u, 0x000400fau, 0x00001d72u, 0x00001d73u, 0x00001d7cu, 0x000200f8u, 0x00001d73u, 0x0003003eu, 0x00001d76u, 0x0000ed5cu, 0x0003003eu, 0x00001d78u, 0x00007975u, 0x00060039u, 0x00000009u, 0x00001d7bu, 0x000001c1u, 0x00001d76u, 0x00001d78u, 0x0003003eu, 0x00001d75u, 0x00001d7bu, 0x000200f9u, 0x00001d74u, 0x000200f8u, 0x00001d7cu, 0x0004003du, 0x00000006u, 0x00001d7eu, 0x000001fdu, 0x00080041u, 0x00000277u, 0x00001d80u, 0x00000a19u, 0x00000203u, 0x00001d7eu, 0x00000215u, 0x0000ef1eu, 0x0004003du, 0x00000229u, 0x00001d81u, 0x00001d80u, 0x00040071u, 0x00000006u, 0x00001d82u, 0x00001d81u, 0x0003003eu, 0x00001d7du, 0x00001d82u, 0x0003003eu, 0x00001d84u, 0x00001d82u, 0x00050039u, 0x0000001eu, 0x00001d86u, 0x00000021u, 0x00001d84u, 0x00050051u, 0x00000006u, 0x000079b0u, 0x00001d86u, 0x00000000u, 0x0003003eu, 0x000079a2u, 0x000079b0u, 0x00050051u, 0x00000006u, 0x000079b1u, 0x00001d86u, 0x00000001u, 0x0003003eu, 0x000079a3u, 0x000079b1u, 0x00050051u, 0x00000006u, 0x000079b2u, 0x00001d86u, 0x00000002u, 0x0003003eu, 0x000079a4u, 0x000079b2u, 0x00050051u, 0x00000006u, 0x000079b3u, 0x00001d86u, 0x00000003u, 0x0003003eu, 0x000079a5u, 0x000079b3u, 0x00050051u, 0x00000006u, 0x000079b4u, 0x00001d86u, 0x00000004u, 0x0003003eu, 0x000079a6u, 0x000079b4u, 0x00050051u, 0x00000006u, 0x000079b5u, 0x00001d86u, 0x00000005u, 0x0003003eu, 0x000079a7u, 0x000079b5u, 0x00050051u, 0x00000008u, 0x000079b6u, 0x00001d86u, 0x00000006u, 0x0003003eu, 0x000079a8u, 0x000079b6u, 0x00050051u, 0x00000008u, 0x000079b7u, 0x00001d86u, 0x00000007u, 0x0003003eu, 0x000079a9u, 0x000079b7u, 0x00050051u, 0x00000008u, 0x000079b8u, 0x00001d86u, 0x00000008u, 0x0003003eu, 0x000079aau, 0x000079b8u, 0x00050051u, 0x00000008u, 0x000079b9u, 0x00001d86u, 0x00000009u, 0x0003003eu, 0x000079abu, 0x000079b9u, 0x00050051u, 0x00000008u, 0x000079bau, 0x00001d86u, 0x0000000au, 0x0003003eu, 0x000079acu, 0x000079bau, 0x00050051u, 0x00000008u, 0x000079bbu, 0x00001d86u, 0x0000000bu, 0x0003003eu, 0x000079adu, 0x000079bbu, 0x00050051u, 0x00000008u, 0x000079bcu, 0x00001d86u, 0x0000000cu, 0x0003003eu, 0x000079aeu, 0x000079bcu, 0x00050051u, 0x00000008u, 0x000079bdu, 0x00001d86u, 0x0000000du, 0x0003003eu, 0x000079afu, 0x000079bdu, 0x0003003eu, 0x00001d87u, 0x00001d86u, 0x0003003eu, 0x00001d89u, 0x00001b50u, 0x0003003eu, 0x00001d8bu, 0x0000ed3eu, 0x0003003eu, 0x00001d8du, 0x00001b6bu, 0x0003003eu, 0x00001d8fu, 0x00001b6fu, 0x0003003eu, 0x00001d91u, 0x00001b74u, 0x0003003eu, 0x00001d93u, 0x00001bb1u, 0x0003003eu, 0x00001d95u, 0x00001bcau, 0x0003003eu, 0x00001d97u, 0x0000ed5cu, 0x000d0039u, 0x00000009u, 0x00001d99u, 0x000001adu, 0x00001d87u, 0x00001d89u, 0x00001d8bu, 0x00001d8du, 0x00001d8fu, 0x00001d91u, 0x00001d93u, 0x00001d95u, 0x00001d97u, 0x0003003eu, 0x00001d75u, 0x00001d99u, 0x000400a8u, 0x0000005du, 0x00001d9bu, 0x00001b74u, 0x000400a8u, 0x0000005du, 0x00001d9du, 0x00001b6bu, 0x000500a7u, 0x0000005du, 0x00001d9eu, 0x00001d9bu, 0x00001d9du, 0x000500a7u, 0x0000005du, 0x00001da1u, 0x00001d9eu, 0x00001d71u, 0x000300f7u, 0x00001da3u, 0x00000000u, 0x000400fau, 0x00001da1u, 0x00001da2u, 0x00001da3u, 0x000200f8u, 0x00001da2u, 0x0003003eu, 0x00001da4u, 0x00001d99u, 0x0003003eu, 0x00001da6u, 0x00007975u, 0x00060039u, 0x00000009u, 0x00001da9u, 0x000001c1u, 0x00001da4u, 0x00001da6u, 0x0003003eu, 0x00001d75u, 0x00001da9u, 0x000200f9u, 0x00001da3u, 0x000200f8u, 0x00001da3u, 0x000700f5u, 0x00000009u, 0x0000edddu, 0x00001d99u, 0x00001d7cu, 0x00001da9u, 0x00001da2u, 0x000200f9u, 0x00001d74u, 0x000200f8u, 0x00001d74u, 0x000700f5u, 0x00000009u, 0x0000eddcu, 0x00001d7bu, 0x00001d73u, 0x0000edddu, 0x00001da3u, 0x000200f9u, 0x00001d6eu, 0x000200f8u, 0x00001d6eu, 0x000700f5u, 0x00000009u, 0x0000edcdu, 0x0000ed63u, 0x00001d16u, 0x0000eddcu, 0x00001d74u, 0x0004003du, 0x00000008u, 0x00001daau, 0x000001fcu, 0x000600a9u, 0x00000008u, 0x00001dacu, 0x00001b99u, 0x00000212u, 0x00000203u, 0x000500c3u, 0x00000008u, 0x00001dadu, 0x00001daau, 0x00001dacu, 0x000500c3u, 0x00000008u, 0x00001dafu, 0x00007934u, 0x00000215u, 0x000500c7u, 0x00000008u, 0x00001db1u, 0x00007934u, 0x00000218u, 0x0004003du, 0x00000008u, 0x00001db5u, 0x000001fbu, 0x0003003eu, 0x00001db4u, 0x00001db5u, 0x0003003eu, 0x00001db6u, 0x00001dadu, 0x0003003eu, 0x00001db7u, 0x00001dafu, 0x0003003eu, 0x00001db8u, 0x00001db1u, 0x000a0039u, 0x00000002u, 0x00001dbbu, 0x0000004bu, 0x00001db4u, 0x00001db6u, 0x00001db7u, 0x00001db8u, 0x00001db9u, 0x00001dbau, 0x0004003du, 0x00000008u, 0x00001dbcu, 0x00001db9u, 0x0003003eu, 0x00001db2u, 0x00001dbcu, 0x0004003du, 0x00000008u, 0x00001dbdu, 0x00001dbau, 0x0003003eu, 0x00001db3u, 0x00001dbdu, 0x000300f7u, 0x00001dc0u, 0x00000000u, 0x000400fau, 0x00001b95u, 0x00001dbfu, 0x00001e0fu, 0x000200f8u, 0x00001dbfu, 0x0004003du, 0x00000009u, 0x00001dcau, 0x00001c7bu, 0x00040039u, 0x00000008u, 0x00001dceu, 0x00000034u, 0x000d0050u, 0x000001cdu, 0x00001dcfu, 0x0000796bu, 0x0000796cu, 0x0000796du, 0x0000796eu, 0x00001dcau, 0x00000611u, 0x0000ed5cu, 0x0000edcdu, 0x0000ede1u, 0x00001dceu, 0x0003003eu, 0x000079cdu, 0x0000796bu, 0x0003003eu, 0x000079ceu, 0x0000796cu, 0x0003003eu, 0x000079cfu, 0x0000796du, 0x0003003eu, 0x000079d0u, 0x0000796eu, 0x0003003eu, 0x000079d1u, 0x00001dcau, 0x0003003eu, 0x000079d2u, 0x00000611u, 0x0003003eu, 0x000079d3u, 0x0000ed5cu, 0x0003003eu, 0x000079d4u, 0x0000edcdu, 0x0003003eu, 0x000079d5u, 0x0000ede1u, 0x0003003eu, 0x000079d6u, 0x00001dceu, 0x0003003eu, 0x00001dd1u, 0x00001dcfu, 0x0003003eu, 0x00001dd3u, 0x0000792fu, 0x0003003eu, 0x00001dd5u, 0x00007930u, 0x0003003eu, 0x00001dd7u, 0x00001dbdu, 0x0003003eu, 0x00001dd9u, 0x00001c63u, 0x0003003eu, 0x00001ddbu, 0x00001b78u, 0x0003003eu, 0x00001dddu, 0x00001b7cu, 0x0003003eu, 0x00001ddfu, 0x00001ba7u, 0x000d0039u, 0x00000009u, 0x00001de2u, 0x000001eeu, 0x00001dd1u, 0x00001dd3u, 0x00001dd5u, 0x00001dd7u, 0x00001dd9u, 0x00001ddbu, 0x00001dddu, 0x00001ddfu, 0x00001de1u, 0x0004003du, 0x00000008u, 0x00001de3u, 0x00001de1u, 0x0003003eu, 0x00001dd0u, 0x00001de3u, 0x0003003eu, 0x000079d2u, 0x00001de2u, 0x0003003eu, 0x000079cdu, 0x0000796fu, 0x0003003eu, 0x000079ceu, 0x00007970u, 0x0003003eu, 0x000079cfu, 0x00007971u, 0x0003003eu, 0x000079d0u, 0x00007972u, 0x0003003eu, 0x00001df1u, 0x0000ed5cu, 0x0003003eu, 0x000079d3u, 0x0000edcdu, 0x0003003eu, 0x000079d4u, 0x0000ed5cu, 0x000d0050u, 0x000001cdu, 0x000079f6u, 0x0000796fu, 0x00007970u, 0x00007971u, 0x00007972u, 0x00001dcau, 0x00001de2u, 0x0000edcdu, 0x0000ed5cu, 0x0000ede1u, 0x00001dceu, 0x0003003eu, 0x00001dfau, 0x000079f6u, 0x0003003eu, 0x00001dfcu, 0x00007931u, 0x0003003eu, 0x00001dfeu, 0x00007932u, 0x0003003eu, 0x00001e00u, 0x00001dbdu, 0x0003003eu, 0x00001e02u, 0x00001c63u, 0x0003003eu, 0x00001e04u, 0x00001b78u, 0x0003003eu, 0x00001e06u, 0x00001b7cu, 0x000b0039u, 0x00000009u, 0x00001e08u, 0x000001f8u, 0x00001dfau, 0x00001dfcu, 0x00001dfeu, 0x00001e00u, 0x00001e02u, 0x00001e04u, 0x00001e06u, 0x0004003du, 0x00000008u, 0x00001e09u, 0x00001e02u, 0x0003003eu, 0x00001c61u, 0x00001e09u, 0x00050051u, 0x00000008u, 0x00001e0au, 0x00001e08u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001e0bu, 0x00001e08u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001e0cu, 0x00001e08u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001e0du, 0x00001e08u, 0x00000003u, 0x0003003eu, 0x00001df9u, 0x00001e08u, 0x000200f9u, 0x00001dc0u, 0x000200f8u, 0x00001e0fu, 0x0004003du, 0x00000009u, 0x00001e19u, 0x00001c7bu, 0x00040039u, 0x00000008u, 0x00001e1du, 0x00000034u, 0x000d0050u, 0x000001cdu, 0x00001e1eu, 0x0000796fu, 0x00007970u, 0x00007971u, 0x00007972u, 0x00001e19u, 0x00000611u, 0x0000ed5cu, 0x0000edcdu, 0x0000ede1u, 0x00001e1du, 0x0003003eu, 0x000079f7u, 0x0000796fu, 0x0003003eu, 0x000079f8u, 0x00007970u, 0x0003003eu, 0x000079f9u, 0x00007971u, 0x0003003eu, 0x000079fau, 0x00007972u, 0x0003003eu, 0x000079fbu, 0x00001e19u, 0x0003003eu, 0x000079fcu, 0x00000611u, 0x0003003eu, 0x000079fdu, 0x0000ed5cu, 0x0003003eu, 0x000079feu, 0x0000edcdu, 0x0003003eu, 0x000079ffu, 0x0000ede1u, 0x0003003eu, 0x00007a00u, 0x00001e1du, 0x0003003eu, 0x00001e1fu, 0x00001e1eu, 0x0003003eu, 0x00001e21u, 0x00007931u, 0x0003003eu, 0x00001e23u, 0x00007932u, 0x0003003eu, 0x00001e25u, 0x00001dbdu, 0x0003003eu, 0x00001e27u, 0x00001c63u, 0x0003003eu, 0x00001e29u, 0x00001b78u, 0x0003003eu, 0x00001e2bu, 0x00001b7cu, 0x000b0039u, 0x00000009u, 0x00001e2du, 0x000001f8u, 0x00001e1fu, 0x00001e21u, 0x00001e23u, 0x00001e25u, 0x00001e27u, 0x00001e29u, 0x00001e2bu, 0x0004003du, 0x00000008u, 0x00001e2eu, 0x00001e27u, 0x0003003eu, 0x00001c61u, 0x00001e2eu, 0x00050051u, 0x00000008u, 0x00001e2fu, 0x00001e2du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001e30u, 0x00001e2du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001e31u, 0x00001e2du, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001e32u, 0x00001e2du, 0x00000003u, 0x0003003eu, 0x00001df9u, 0x00001e2du, 0x00050041u, 0x0000003eu, 0x00001e34u, 0x00001df9u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001e35u, 0x00001e34u, 0x0003003eu, 0x00001dd0u, 0x00001e35u, 0x000200f9u, 0x00001dc0u, 0x000200f8u, 0x00001dc0u, 0x000700f5u, 0x00000008u, 0x0000eeafu, 0x00001de3u, 0x00001dbfu, 0x00001e35u, 0x00001e0fu, 0x000700f5u, 0x00000008u, 0x0000ee9du, 0x00001e09u, 0x00001dbfu, 0x00001e2eu, 0x00001e0fu, 0x000500aau, 0x0000005du, 0x00001e38u, 0x0000ee9du, 0x00000203u, 0x000500a7u, 0x0000005du, 0x00001e39u, 0x00001b91u, 0x00001e38u, 0x000300f7u, 0x00001e3bu, 0x00000000u, 0x000400fau, 0x00001e39u, 0x00001e3au, 0x00001e3bu, 0x000200f8u, 0x00001e3au, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001e3bu, 0x000300f7u, 0x00001e3fu, 0x00000000u, 0x000400fau, 0x00001ba7u, 0x00001e3eu, 0x00001e3fu, 0x000200f8u, 0x00001e3eu, 0x000300f7u, 0x00001e42u, 0x00000000u, 0x000400fau, 0x00001bacu, 0x00001e41u, 0x00001e45u, 0x000200f8u, 0x00001e41u, 0x00040039u, 0x00000008u, 0x00001e44u, 0x0000003au, 0x0003003eu, 0x00001e43u, 0x00001e44u, 0x000200f9u, 0x00001e42u, 0x000200f8u, 0x00001e45u, 0x00050041u, 0x0000003eu, 0x00007976u, 0x00007968u, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001e47u, 0x00007976u, 0x0003003eu, 0x00001e43u, 0x00001e47u, 0x000200f9u, 0x00001e42u, 0x000200f8u, 0x00001e42u, 0x000700f5u, 0x00000008u, 0x0000eeb0u, 0x00001e44u, 0x00001e41u, 0x00001e47u, 0x00001e45u, 0x000500b1u, 0x0000005du, 0x00001e4au, 0x0000eeafu, 0x0000eeb0u, 0x000300f7u, 0x00001e4cu, 0x00000000u, 0x000400fau, 0x00001e4au, 0x00001e4bu, 0x00001e4cu, 0x000200f8u, 0x00001e4bu, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x00000543u, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001e4cu, 0x000200f9u, 0x00001e3fu, 0x000200f8u, 0x00001e3fu, 0x0004003du, 0x00000009u, 0x00001e4eu, 0x00001df9u, 0x00050041u, 0x0000005cu, 0x00001e4fu, 0x000001feu, 0x00000203u, 0x0003003eu, 0x00001e4fu, 0x00001e4eu, 0x000500c4u, 0x00000008u, 0x00001e51u, 0x00001cbau, 0x00000264u, 0x000500c5u, 0x00000008u, 0x00001e53u, 0x00001e51u, 0x00001dbcu, 0x00050041u, 0x0000003eu, 0x00001e54u, 0x000001feu, 0x00000212u, 0x0003003eu, 0x00001e54u, 0x00001e53u, 0x00050041u, 0x0000003eu, 0x00001e56u, 0x000001feu, 0x00000215u, 0x0003003eu, 0x00001e56u, 0x0000ee9du, 0x00050041u, 0x0000003eu, 0x00001e57u, 0x00001c7bu, 0x0000048bu, 0x0004003du, 0x00000008u, 0x00001e58u, 0x00001e57u, 0x00050080u, 0x00000008u, 0x00001e5au, 0x00001e58u, 0x00001dbdu, 0x0007000cu, 0x00000008u, 0x00001e5bu, 0x00000001u, 0x00000027u, 0x00001e5au, 0x0000038bu, 0x00050041u, 0x0000003eu, 0x00001e5cu, 0x000001feu, 0x00000218u, 0x0003003eu, 0x00001e5cu, 0x00001e5bu, 0x0003003eu, 0x00001f2eu, 0x0000055eu, 0x0003003eu, 0x00001f2bu, 0x0000055eu, 0x000200f9u, 0x00001f2au, 0x000200f8u, 0x00001f2au, 0x001900f5u, 0x0000005du, 0x0000eed9u, 0x00000543u, 0x00001b0du, 0x00000543u, 0x00001b3au, 0x00000543u, 0x00001bfdu, 0x00000543u, 0x00001c3du, 0x0000055eu, 0x00001c3eu, 0x00001c50u, 0x00001c4bu, 0x00000543u, 0x00001c5eu, 0x00000543u, 0x00001c6cu, 0x00000543u, 0x00001e3au, 0x00000543u, 0x00001e4bu, 0x0000055eu, 0x00001e3fu, 0x000200feu, 0x0000eed9u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000f3b6u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00001f1fu, 0x00001f29u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x0000021bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000021bu, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000021bu, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000021bu, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000021bu, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000021bu, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x0000021bu, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x0000021bu, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x0000021cu, 0x00000006u, 0x00000080u, 0x00040048u, 0x0000021du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000021du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000021du, 0x00000002u, 0x00040047u, 0x0000021fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000021fu, 0x00000021u, 0x00000001u, 0x00050048u, 0x00000241u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000241u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000241u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000241u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000241u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000241u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000241u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000241u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000241u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000241u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000241u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000241u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000241u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x00000241u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x00000241u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x00000242u, 0x00000006u, 0x00000038u, 0x00040048u, 0x00000243u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000243u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000243u, 0x00000002u, 0x00040047u, 0x00000245u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000245u, 0x00000021u, 0x00000002u, 0x00050048u, 0x00000274u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000274u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000274u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000274u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000274u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000274u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000274u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000274u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000275u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000276u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000276u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000276u, 0x00000002u, 0x00040047u, 0x00000278u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000278u, 0x00000021u, 0x00000004u, 0x00050048u, 0x00000292u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000292u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000292u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000292u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000292u, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x00000292u, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000292u, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x00000293u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000294u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000294u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000294u, 0x00000002u, 0x00040047u, 0x00000296u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000296u, 0x00000021u, 0x00000005u, 0x00050048u, 0x000002aeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002aeu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002aeu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002aeu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000002aeu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000002aeu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000002aeu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000002aeu, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x000002aeu, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x000002aeu, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x000002aeu, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000002aeu, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x000002aeu, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x000002aeu, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x000002afu, 0x00000006u, 0x00000020u, 0x00040048u, 0x000002b0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b0u, 0x00000002u, 0x00040047u, 0x000002b2u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002b2u, 0x00000021u, 0x00000007u, 0x00050048u, 0x000002d7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002d7u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000002d7u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000002d7u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x000002d7u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x000002d7u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x000002d7u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x000002d7u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x000002d7u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x000002d8u, 0x00000006u, 0x00000040u, 0x00040048u, 0x000002d9u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002d9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002d9u, 0x00000002u, 0x00040047u, 0x000002dbu, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002dbu, 0x00000021u, 0x00000008u, 0x00050048u, 0x000002f6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002f6u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002f6u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002f6u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x000002f7u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002f8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002f8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002f8u, 0x00000002u, 0x00040047u, 0x000002fau, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002fau, 0x00000021u, 0x00000009u, 0x00040047u, 0x000004efu, 0x00000022u, 0x00000001u, 0x00040047u, 0x000004efu, 0x00000021u, 0x0000000au, 0x00040047u, 0x0000065cu, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000662u, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000066bu, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000066cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000066cu, 0x00000002u, 0x00040047u, 0x0000066eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000066eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000679u, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000067au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000067au, 0x00000002u, 0x00040047u, 0x0000067cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000067cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000068cu, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000068du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000068du, 0x00000002u, 0x00040047u, 0x0000068fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000068fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x000006d4u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000006d5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000006d5u, 0x00000002u, 0x00040047u, 0x000006d7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000006d7u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000788u, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000852u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000a0du, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000a0eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000a0eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000a0eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000a0fu, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000a10u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a10u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a10u, 0x00000002u, 0x00040047u, 0x00000a12u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000a12u, 0x00000021u, 0x00000006u, 0x00050048u, 0x00000cc6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000cc6u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000cc6u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000cc6u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000cc7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000cc7u, 0x00000002u, 0x00040047u, 0x00000cc9u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000cc9u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000e7au, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000e7bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000e7cu, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000e7du, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000e7du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000e7du, 0x00000002u, 0x00040047u, 0x00000e7fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000e7fu, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000f47u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000f48u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000f49u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000f4au, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000f4au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000f4au, 0x00000002u, 0x00040047u, 0x00000f4cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000f4cu, 0x00000021u, 0x00000002u, 0x00050048u, 0x00001bc7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001bc7u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001bc7u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001bc7u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001bc7u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00001bc7u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00001bc7u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00001bc7u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00001bc7u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00001bc7u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00001bc7u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00001bc8u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00001bc9u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001bc9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001bc9u, 0x00000002u, 0x00040047u, 0x00001bcbu, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001bcbu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00001f1fu, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00001f29u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00001f32u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00001f33u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00001f34u, 0x00000001u, 0x00000004u, 0x00040047u, 0x00001f35u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00001f3du, 0x00000001u, 0x00000005u, 0x00040047u, 0x00001f41u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001f42u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001f42u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001f42u, 0x00000002u, 0x00040047u, 0x00001f44u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001f44u, 0x00000021u, 0x0000000cu, 0x00050048u, 0x00001f48u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001f48u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001f48u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001f48u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001f48u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x00001f48u, 0x00000002u, 0x00040047u, 0x00001f75u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001f76u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001f76u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001f76u, 0x00000002u, 0x00040047u, 0x00001f78u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001f78u, 0x00000021u, 0x0000000bu, 0x00040047u, 0x00001fe6u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001fe7u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001fe7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001fe7u, 0x00000002u, 0x00040047u, 0x00001fe9u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001fe9u, 0x00000021u, 0x00000003u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x00040015u, 0x0000000fu, 0x00000008u, 0x00000000u, 0x00040017u, 0x00000010u, 0x0000000fu, 0x00000004u, 0x00040015u, 0x00000011u, 0x00000010u, 0x00000000u, 0x00040015u, 0x00000012u, 0x00000010u, 0x00000001u, 0x00040017u, 0x00000013u, 0x00000012u, 0x00000004u, 0x0011001eu, 0x00000014u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000011u, 0x0000000fu, 0x0000000fu, 0x00000013u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x000a001eu, 0x00000019u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001au, 0x00000019u, 0x00000007u, 0x0009001eu, 0x0000001eu, 0x00000010u, 0x00000010u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x00040021u, 0x0000001fu, 0x0000001eu, 0x00000007u, 0x0010001eu, 0x00000023u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x00040021u, 0x00000024u, 0x00000023u, 0x00000007u, 0x00040017u, 0x00000028u, 0x00000011u, 0x00000004u, 0x000b001eu, 0x00000029u, 0x00000009u, 0x00000009u, 0x00000028u, 0x00000028u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000011u, 0x00040021u, 0x0000002au, 0x00000029u, 0x00000007u, 0x0006001eu, 0x0000002eu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000002fu, 0x0000002eu, 0x00000007u, 0x00060021u, 0x00000033u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030021u, 0x00000039u, 0x00000012u, 0x00030021u, 0x0000003cu, 0x00000008u, 0x00030021u, 0x00000041u, 0x0000000fu, 0x00040017u, 0x00000044u, 0x00000008u, 0x00000003u, 0x00040020u, 0x00000045u, 0x00000007u, 0x00000044u, 0x00040020u, 0x00000046u, 0x00000007u, 0x00000008u, 0x00040017u, 0x00000047u, 0x0000000fu, 0x00000003u, 0x00050021u, 0x00000048u, 0x00000047u, 0x00000045u, 0x00000046u, 0x00090021u, 0x0000004du, 0x00000002u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00040020u, 0x00000056u, 0x00000007u, 0x00000011u, 0x00040021u, 0x00000057u, 0x00000008u, 0x00000056u, 0x00040021u, 0x0000005bu, 0x00000011u, 0x00000046u, 0x00040021u, 0x0000005fu, 0x00000008u, 0x00000046u, 0x0007001eu, 0x00000066u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x0000000fu, 0x00040020u, 0x00000067u, 0x00000007u, 0x00000066u, 0x00040020u, 0x00000068u, 0x00000007u, 0x00000010u, 0x00020014u, 0x00000069u, 0x00040020u, 0x0000006au, 0x00000007u, 0x00000069u, 0x00040017u, 0x0000006bu, 0x0000000fu, 0x00000002u, 0x00040020u, 0x0000006cu, 0x00000007u, 0x0000006bu, 0x000b0021u, 0x0000006du, 0x00000047u, 0x00000067u, 0x00000068u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006cu, 0x0000006au, 0x00040020u, 0x0000007bu, 0x00000007u, 0x0000000fu, 0x00110021u, 0x0000007cu, 0x00000069u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000056u, 0x0000007bu, 0x00000046u, 0x00000046u, 0x0000006au, 0x00000046u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006cu, 0x00040020u, 0x0000008du, 0x00000007u, 0x00000028u, 0x00060021u, 0x0000008eu, 0x0000000fu, 0x0000008du, 0x0000008du, 0x00000046u, 0x00070021u, 0x00000094u, 0x00000008u, 0x00000046u, 0x00000046u, 0x0000006au, 0x00000046u, 0x00050021u, 0x0000009bu, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x000000b0u, 0x00000006u, 0x00000002u, 0x00040020u, 0x000000b1u, 0x00000007u, 0x000000b0u, 0x00080021u, 0x000000b2u, 0x00000002u, 0x000000b1u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x000000bau, 0x00000002u, 0x000000b1u, 0x00000007u, 0x00040021u, 0x000000c6u, 0x00000010u, 0x0000006au, 0x00040021u, 0x000000cau, 0x00000002u, 0x00000068u, 0x00040021u, 0x000000d2u, 0x00000002u, 0x00000007u, 0x0006001eu, 0x000000d6u, 0x00000010u, 0x00000008u, 0x0000000fu, 0x0000000fu, 0x00040020u, 0x000000d7u, 0x00000007u, 0x000000d6u, 0x00070021u, 0x000000d8u, 0x00000002u, 0x00000046u, 0x00000046u, 0x00000007u, 0x000000d7u, 0x00040020u, 0x000000dfu, 0x00000007u, 0x00000009u, 0x00040021u, 0x000000e0u, 0x00000013u, 0x000000dfu, 0x00040020u, 0x000000e4u, 0x00000007u, 0x00000013u, 0x00040021u, 0x000000e5u, 0x00000010u, 0x000000e4u, 0x00040017u, 0x000000efu, 0x00000008u, 0x00000002u, 0x00040021u, 0x000000f0u, 0x000000efu, 0x00000046u, 0x00040021u, 0x000000f4u, 0x000000efu, 0x00000045u, 0x00050021u, 0x000000f8u, 0x000000efu, 0x00000045u, 0x0000006au, 0x00080021u, 0x000000fdu, 0x00000010u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x00000046u, 0x00000046u, 0x00040020u, 0x00000105u, 0x00000007u, 0x00000029u, 0x00040020u, 0x00000106u, 0x00000007u, 0x000000efu, 0x000a0021u, 0x00000107u, 0x00000002u, 0x00000105u, 0x000000dfu, 0x00000046u, 0x0000006au, 0x0000006au, 0x00000106u, 0x00000046u, 0x00070021u, 0x00000111u, 0x000000efu, 0x000000dfu, 0x000000dfu, 0x00000046u, 0x0000006au, 0x00100021u, 0x00000118u, 0x00000002u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x00000046u, 0x00000046u, 0x0000006au, 0x0000006au, 0x00000046u, 0x00000106u, 0x00000106u, 0x00000106u, 0x00000046u, 0x0000006au, 0x00040020u, 0x00000128u, 0x00000007u, 0x00000023u, 0x00050021u, 0x00000129u, 0x00000008u, 0x00000128u, 0x00000046u, 0x00050021u, 0x0000012eu, 0x000000efu, 0x00000128u, 0x00000046u, 0x00040021u, 0x00000137u, 0x00000013u, 0x00000007u, 0x00060021u, 0x0000013eu, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00070021u, 0x00000149u, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00000007u, 0x000a0021u, 0x00000150u, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00000007u, 0x00000007u, 0x00000007u, 0x0000006au, 0x00090021u, 0x0000015au, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00000007u, 0x00000007u, 0x0000006au, 0x00080021u, 0x0000018fu, 0x00000008u, 0x0000006au, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00060021u, 0x00000197u, 0x00000008u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00090021u, 0x0000019du, 0x00000008u, 0x00000128u, 0x00000007u, 0x00000106u, 0x00000046u, 0x0000006au, 0x0000006au, 0x00040017u, 0x000001aeu, 0x00000012u, 0x00000002u, 0x00040020u, 0x000001afu, 0x00000007u, 0x000001aeu, 0x00080021u, 0x000001b0u, 0x000001aeu, 0x000001afu, 0x000001afu, 0x000001afu, 0x000001afu, 0x00000106u, 0x000c0021u, 0x000001b8u, 0x00000013u, 0x00000128u, 0x00000007u, 0x00000106u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x000000e4u, 0x00040020u, 0x000001c4u, 0x00000007u, 0x00000012u, 0x000f0021u, 0x000001c5u, 0x00000002u, 0x00000007u, 0x00000007u, 0x000001c4u, 0x00000007u, 0x00000046u, 0x00000106u, 0x00000106u, 0x00000106u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x00050021u, 0x000001d4u, 0x00000013u, 0x000000e4u, 0x000000e4u, 0x00040021u, 0x000001d9u, 0x00000009u, 0x000000dfu, 0x00070021u, 0x000001ddu, 0x00000013u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000c001eu, 0x000001e4u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000013u, 0x00000013u, 0x00000013u, 0x00000012u, 0x00000012u, 0x00040020u, 0x000001e5u, 0x00000007u, 0x000001e4u, 0x00060021u, 0x000001e6u, 0x00000009u, 0x000001e5u, 0x00000046u, 0x00000046u, 0x000c0021u, 0x000001fbu, 0x00000013u, 0x000001e5u, 0x00000068u, 0x00000068u, 0x00000046u, 0x00000046u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000007bu, 0x000a0021u, 0x00000207u, 0x00000013u, 0x000001e5u, 0x00000068u, 0x00000068u, 0x00000046u, 0x00000046u, 0x0000006au, 0x0000006au, 0x00070021u, 0x00000211u, 0x00000069u, 0x00000046u, 0x00000046u, 0x00000007u, 0x000000d7u, 0x00040020u, 0x00000218u, 0x00000006u, 0x00000011u, 0x0004003bu, 0x00000218u, 0x00000219u, 0x00000006u, 0x0004002bu, 0x00000011u, 0x0000021au, 0x00000000u, 0x000a001eu, 0x0000021bu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x0000021cu, 0x0000021bu, 0x0003001eu, 0x0000021du, 0x0000021cu, 0x00040020u, 0x0000021eu, 0x0000000cu, 0x0000021du, 0x0004003bu, 0x0000021eu, 0x0000021fu, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00000220u, 0x00000000u, 0x00040020u, 0x00000222u, 0x0000000cu, 0x0000021bu, 0x00040020u, 0x00000225u, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x0000022au, 0x00000001u, 0x0004002bu, 0x00000008u, 0x0000022du, 0x00000002u, 0x0004002bu, 0x00000008u, 0x00000230u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000233u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000236u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x00000239u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000023cu, 0x00000007u, 0x0011001eu, 0x00000241u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000011u, 0x0000000fu, 0x0000000fu, 0x00000013u, 0x0003001du, 0x00000242u, 0x00000241u, 0x0003001eu, 0x00000243u, 0x00000242u, 0x00040020u, 0x00000244u, 0x0000000cu, 0x00000243u, 0x0004003bu, 0x00000244u, 0x00000245u, 0x0000000cu, 0x00040020u, 0x00000247u, 0x0000000cu, 0x00000241u, 0x00040020u, 0x0000024au, 0x00000007u, 0x00000014u, 0x0004002bu, 0x00000008u, 0x0000025du, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000260u, 0x00000009u, 0x0004002bu, 0x00000008u, 0x00000263u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x00000266u, 0x0000000bu, 0x0004002bu, 0x00000008u, 0x00000269u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x0000026cu, 0x0000000du, 0x0004002bu, 0x00000008u, 0x0000026fu, 0x0000000eu, 0x000a001eu, 0x00000274u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000275u, 0x00000274u, 0x0003001eu, 0x00000276u, 0x00000275u, 0x00040020u, 0x00000277u, 0x0000000cu, 0x00000276u, 0x0004003bu, 0x00000277u, 0x00000278u, 0x0000000cu, 0x00040020u, 0x0000027au, 0x0000000cu, 0x00000274u, 0x00040020u, 0x0000027du, 0x00000007u, 0x00000019u, 0x0009001eu, 0x00000292u, 0x00000010u, 0x00000010u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x00000293u, 0x00000292u, 0x0003001eu, 0x00000294u, 0x00000293u, 0x00040020u, 0x00000295u, 0x0000000cu, 0x00000294u, 0x0004003bu, 0x00000295u, 0x00000296u, 0x0000000cu, 0x00040020u, 0x00000298u, 0x0000000cu, 0x00000292u, 0x00040020u, 0x0000029bu, 0x00000007u, 0x0000001eu, 0x0010001eu, 0x000002aeu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x000002afu, 0x000002aeu, 0x0003001eu, 0x000002b0u, 0x000002afu, 0x00040020u, 0x000002b1u, 0x0000000cu, 0x000002b0u, 0x0004003bu, 0x000002b1u, 0x000002b2u, 0x0000000cu, 0x00040020u, 0x000002b4u, 0x0000000cu, 0x000002aeu, 0x000b001eu, 0x000002d7u, 0x00000009u, 0x00000009u, 0x00000028u, 0x00000028u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000011u, 0x0003001du, 0x000002d8u, 0x000002d7u, 0x0003001eu, 0x000002d9u, 0x000002d8u, 0x00040020u, 0x000002dau, 0x0000000cu, 0x000002d9u, 0x0004003bu, 0x000002dau, 0x000002dbu, 0x0000000cu, 0x00040020u, 0x000002ddu, 0x0000000cu, 0x000002d7u, 0x0006001eu, 0x000002f6u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x000002f7u, 0x000002f6u, 0x0003001eu, 0x000002f8u, 0x000002f7u, 0x00040020u, 0x000002f9u, 0x0000000cu, 0x000002f8u, 0x0004003bu, 0x000002f9u, 0x000002fau, 0x0000000cu, 0x00040020u, 0x000002fcu, 0x0000000cu, 0x000002f6u, 0x00040020u, 0x000002ffu, 0x00000007u, 0x0000002eu, 0x00040017u, 0x0000030cu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000030du, 0x00000007u, 0x0000030cu, 0x0004002bu, 0x00000006u, 0x00000314u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x0000031au, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x0000032du, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000330u, 0x00000010u, 0x0004002bu, 0x00000011u, 0x00000334u, 0x00000007u, 0x0004002bu, 0x00000011u, 0x00000336u, 0x00000006u, 0x0004002bu, 0x00000011u, 0x00000338u, 0x00000020u, 0x0004002bu, 0x00000011u, 0x00000344u, 0x000001ffu, 0x0004002bu, 0x00000011u, 0x0000034bu, 0x000000ffu, 0x0006002cu, 0x00000044u, 0x00000353u, 0x00000220u, 0x00000230u, 0x00000239u, 0x0004002bu, 0x00000008u, 0x00000359u, 0x000000f8u, 0x0004002bu, 0x00000008u, 0x0000035eu, 0x000000ffu, 0x0006002cu, 0x00000044u, 0x0000035fu, 0x0000035eu, 0x0000035eu, 0x0000035eu, 0x0004002bu, 0x00000008u, 0x00000361u, 0x000000f7u, 0x0006002cu, 0x00000044u, 0x00000362u, 0x00000361u, 0x00000361u, 0x00000361u, 0x00040017u, 0x00000363u, 0x00000069u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x0000036cu, 0x0000001fu, 0x00040015u, 0x0000037bu, 0x00000008u, 0x00000001u, 0x00040017u, 0x0000037cu, 0x0000037bu, 0x00000003u, 0x0004001cu, 0x00000385u, 0x0000000fu, 0x00000330u, 0x0004002bu, 0x00000006u, 0x00000386u, 0x00000002u, 0x0004001cu, 0x00000387u, 0x00000385u, 0x00000386u, 0x0004002bu, 0x0000000fu, 0x00000388u, 0x00000000u, 0x0004002bu, 0x0000000fu, 0x00000389u, 0x00000006u, 0x0004002bu, 0x0000000fu, 0x0000038au, 0x00000001u, 0x0004002bu, 0x0000000fu, 0x0000038bu, 0x00000007u, 0x0004002bu, 0x0000000fu, 0x0000038cu, 0x00000004u, 0x0004002bu, 0x0000000fu, 0x0000038du, 0x00000002u, 0x0004002bu, 0x0000000fu, 0x0000038eu, 0x00000005u, 0x0004002bu, 0x0000000fu, 0x0000038fu, 0x00000003u, 0x0013002cu, 0x00000385u, 0x00000390u, 0x00000388u, 0x00000389u, 0x0000038au, 0x0000038bu, 0x0000038cu, 0x0000038du, 0x0000038eu, 0x0000038fu, 0x0000038fu, 0x0000038eu, 0x0000038du, 0x0000038cu, 0x0000038bu, 0x0000038au, 0x00000389u, 0x00000388u, 0x0013002cu, 0x00000385u, 0x00000391u, 0x00000388u, 0x0000038cu, 0x0000038au, 0x0000038eu, 0x0000038cu, 0x00000388u, 0x0000038eu, 0x0000038au, 0x0000038fu, 0x0000038bu, 0x0000038du, 0x00000389u, 0x0000038bu, 0x0000038fu, 0x00000389u, 0x0000038du, 0x0005002cu, 0x00000387u, 0x00000392u, 0x00000390u, 0x00000391u, 0x00040020u, 0x0000039au, 0x00000007u, 0x00000387u, 0x0004002bu, 0x00000008u, 0x000003a0u, 0x00000049u, 0x0004002bu, 0x00000008u, 0x000003dau, 0x000007ffu, 0x0004002bu, 0x00000008u, 0x000003e1u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x000003edu, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x000003f2u, 0x00000011u, 0x00040020u, 0x0000041bu, 0x00000007u, 0x00000047u, 0x0004002bu, 0x00000006u, 0x0000045cu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000464u, 0x00000003u, 0x0004002bu, 0x0000000fu, 0x0000046fu, 0x000000ffu, 0x0004002bu, 0x0000000fu, 0x000004afu, 0x0000003cu, 0x00040017u, 0x000004b6u, 0x00000012u, 0x00000003u, 0x00040020u, 0x000004b7u, 0x00000007u, 0x000004b6u, 0x00040017u, 0x000004bau, 0x00000011u, 0x00000003u, 0x0004002bu, 0x00000012u, 0x000004c8u, 0x00000001u, 0x0004002bu, 0x00000012u, 0x000004d4u, 0x00000005u, 0x0004002bu, 0x00000012u, 0x000004e5u, 0x00000002u, 0x0004002bu, 0x00000012u, 0x000004e9u, 0x000007ffu, 0x00090019u, 0x000004edu, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x000004eeu, 0x00000000u, 0x000004edu, 0x0004003bu, 0x000004eeu, 0x000004efu, 0x00000000u, 0x00040017u, 0x000004f7u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000533u, 0x0000000fu, 0x0003002au, 0x00000069u, 0x00000536u, 0x0004002bu, 0x00000008u, 0x0000054eu, 0x00008000u, 0x0004002bu, 0x00000008u, 0x00000554u, 0x00000010u, 0x00030029u, 0x00000069u, 0x00000559u, 0x0004002bu, 0x00000008u, 0x0000055au, 0x0000ffffu, 0x0004002bu, 0x00000011u, 0x000005f1u, 0x00000004u, 0x0004002bu, 0x00000011u, 0x000005f2u, 0x00000002u, 0x0007002cu, 0x00000028u, 0x000005f3u, 0x0000021au, 0x000005f1u, 0x000005f2u, 0x00000336u, 0x0004002bu, 0x00000011u, 0x000005f7u, 0x00000003u, 0x00040017u, 0x000005fbu, 0x00000069u, 0x00000004u, 0x00040020u, 0x000005fcu, 0x00000007u, 0x000005fbu, 0x0007002cu, 0x00000010u, 0x00000613u, 0x00000388u, 0x00000388u, 0x00000388u, 0x00000388u, 0x0007002cu, 0x00000010u, 0x00000614u, 0x0000038au, 0x0000038au, 0x0000038au, 0x0000038au, 0x0004002bu, 0x0000000fu, 0x00000621u, 0x00000008u, 0x0007002cu, 0x00000010u, 0x00000622u, 0x0000038au, 0x0000038du, 0x0000038cu, 0x00000621u, 0x0004002bu, 0x0000000fu, 0x00000625u, 0x00000010u, 0x0004002bu, 0x0000000fu, 0x00000626u, 0x00000020u, 0x0004002bu, 0x0000000fu, 0x00000627u, 0x00000040u, 0x0004002bu, 0x0000000fu, 0x00000628u, 0x00000080u, 0x0007002cu, 0x00000010u, 0x00000629u, 0x00000625u, 0x00000626u, 0x00000627u, 0x00000628u, 0x00040032u, 0x00000008u, 0x0000065cu, 0x00000000u, 0x00040032u, 0x00000006u, 0x00000662u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000663u, 0x00000082u, 0x00000662u, 0x0000045cu, 0x0003001du, 0x0000066bu, 0x0000000fu, 0x0003001eu, 0x0000066cu, 0x0000066bu, 0x00040020u, 0x0000066du, 0x0000000cu, 0x0000066cu, 0x0004003bu, 0x0000066du, 0x0000066eu, 0x0000000cu, 0x00040020u, 0x00000671u, 0x0000000cu, 0x0000000fu, 0x00040020u, 0x00000674u, 0x00000006u, 0x00000010u, 0x0004003bu, 0x00000674u, 0x00000675u, 0x00000006u, 0x0003001du, 0x00000679u, 0x0000000fu, 0x0003001eu, 0x0000067au, 0x00000679u, 0x00040020u, 0x0000067bu, 0x0000000cu, 0x0000067au, 0x0004003bu, 0x0000067bu, 0x0000067cu, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000683u, 0x000000c2u, 0x00000663u, 0x0000045cu, 0x00060034u, 0x00000006u, 0x00000687u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x0003001du, 0x0000068cu, 0x00000011u, 0x0003001eu, 0x0000068du, 0x0000068cu, 0x00040020u, 0x0000068eu, 0x0000000cu, 0x0000068du, 0x0004003bu, 0x0000068eu, 0x0000068fu, 0x0000000cu, 0x00040020u, 0x00000692u, 0x0000000cu, 0x00000011u, 0x0004002bu, 0x00000006u, 0x0000069eu, 0x000000f8u, 0x00060034u, 0x00000006u, 0x000006b4u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x0004002bu, 0x00000006u, 0x000006c3u, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000006cbu, 0x000000c2u, 0x00000663u, 0x00000386u, 0x00060034u, 0x00000006u, 0x000006cfu, 0x000000c2u, 0x00000662u, 0x0000022du, 0x0003001du, 0x000006d4u, 0x00000006u, 0x0003001eu, 0x000006d5u, 0x000006d4u, 0x00040020u, 0x000006d6u, 0x0000000cu, 0x000006d5u, 0x0004003bu, 0x000006d6u, 0x000006d7u, 0x0000000cu, 0x00040020u, 0x000006d9u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000006deu, 0x00000018u, 0x0007002cu, 0x000004f7u, 0x000006dfu, 0x000006deu, 0x00000330u, 0x00000314u, 0x0000032du, 0x0007002cu, 0x000004f7u, 0x000006e1u, 0x000006c3u, 0x000006c3u, 0x000006c3u, 0x000006c3u, 0x00040020u, 0x000006e9u, 0x00000006u, 0x0000000fu, 0x0004003bu, 0x000006e9u, 0x000006eau, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000006f7u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000704u, 0x00000004u, 0x0004003bu, 0x00000218u, 0x00000708u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000731u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000737u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000742u, 0x00000007u, 0x00040020u, 0x00000754u, 0x00000006u, 0x00000069u, 0x0004003bu, 0x00000754u, 0x00000755u, 0x00000006u, 0x00060034u, 0x00000006u, 0x00000759u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00040032u, 0x00000008u, 0x00000788u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00000789u, 0x000000c7u, 0x00000788u, 0x0000022au, 0x00060034u, 0x00000069u, 0x0000078au, 0x000000abu, 0x00000789u, 0x00000220u, 0x00060034u, 0x00000008u, 0x0000078bu, 0x000000c3u, 0x00000788u, 0x0000022au, 0x00060034u, 0x00000069u, 0x0000078cu, 0x000000aau, 0x0000078bu, 0x00000220u, 0x00060034u, 0x00000069u, 0x0000078du, 0x000000a7u, 0x0000078au, 0x0000078cu, 0x0004002bu, 0x00000006u, 0x00000790u, 0x00000048u, 0x00060034u, 0x00000006u, 0x000007bbu, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00040020u, 0x000007bfu, 0x00000007u, 0x000004f7u, 0x00060034u, 0x00000006u, 0x000007eau, 0x000000c2u, 0x00000662u, 0x0000045cu, 0x0004002bu, 0x00000011u, 0x000007ecu, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x000007f2u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00060034u, 0x00000006u, 0x00000811u, 0x000000c2u, 0x00000662u, 0x0000045cu, 0x00060034u, 0x00000006u, 0x00000818u, 0x000000c2u, 0x00000662u, 0x0000022du, 0x00060034u, 0x00000006u, 0x0000084cu, 0x000000c2u, 0x00000662u, 0x00000386u, 0x0004002bu, 0x00000006u, 0x0000084eu, 0xffffffffu, 0x00030031u, 0x00000069u, 0x00000852u, 0x00050034u, 0x00000069u, 0x00000853u, 0x000000a8u, 0x00000852u, 0x0004003bu, 0x00000754u, 0x00000856u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000085du, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00060034u, 0x00000006u, 0x00000874u, 0x000000c2u, 0x00000662u, 0x0000045cu, 0x00040017u, 0x0000087bu, 0x00000069u, 0x00000002u, 0x00060034u, 0x00000008u, 0x00000882u, 0x000000c4u, 0x0000022au, 0x0000078bu, 0x00060034u, 0x00000008u, 0x00000883u, 0x00000082u, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000006u, 0x00000884u, 0x00000080u, 0x00000883u, 0x0000032du, 0x00060034u, 0x00000006u, 0x0000088du, 0x00000080u, 0x00000882u, 0x0000032du, 0x00040020u, 0x0000089du, 0x00000006u, 0x00000006u, 0x0004003bu, 0x0000089du, 0x0000089eu, 0x00000006u, 0x00060034u, 0x00000008u, 0x000008d8u, 0x00000084u, 0x00000882u, 0x00000882u, 0x00060034u, 0x00000006u, 0x000008d9u, 0x00000080u, 0x000008d8u, 0x0000032du, 0x00060034u, 0x00000006u, 0x000008dau, 0x000000c2u, 0x00000662u, 0x0000022du, 0x00060034u, 0x00000006u, 0x000008dbu, 0x00000084u, 0x000008d9u, 0x000008dau, 0x00060034u, 0x00000008u, 0x000008eeu, 0x00000082u, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000006u, 0x000008efu, 0x00000080u, 0x000008eeu, 0x0000032du, 0x00060034u, 0x00000006u, 0x000008f8u, 0x00000080u, 0x00000882u, 0x0000032du, 0x00060034u, 0x00000069u, 0x0000091au, 0x000000abu, 0x0000078bu, 0x00000220u, 0x00060034u, 0x00000069u, 0x0000091bu, 0x000000a7u, 0x0000078au, 0x0000091au, 0x0004002bu, 0x0000000fu, 0x0000092au, 0x000000e0u, 0x0006002cu, 0x00000047u, 0x00000935u, 0x00000388u, 0x00000388u, 0x00000388u, 0x0004002bu, 0x0000000fu, 0x0000093cu, 0x000000f8u, 0x00060034u, 0x00000069u, 0x0000094fu, 0x000000aau, 0x0000065cu, 0x00000220u, 0x0004002bu, 0x00000006u, 0x00000974u, 0x000000e0u, 0x0004002bu, 0x00000006u, 0x000009cfu, 0x0000ffffu, 0x0004002bu, 0x00000008u, 0x000009ffu, 0x000001ffu, 0x0004001cu, 0x00000a0du, 0x0000000fu, 0x00000314u, 0x0005001eu, 0x00000a0eu, 0x00000010u, 0x00000010u, 0x00000a0du, 0x0003001du, 0x00000a0fu, 0x00000a0eu, 0x0003001eu, 0x00000a10u, 0x00000a0fu, 0x00040020u, 0x00000a11u, 0x0000000cu, 0x00000a10u, 0x0004003bu, 0x00000a11u, 0x00000a12u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000a36u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x00000a3cu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000a42u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000a48u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x00000af3u, 0x00000080u, 0x0007002cu, 0x00000009u, 0x00000afdu, 0x00000220u, 0x00000220u, 0x00000220u, 0x00000220u, 0x0007002cu, 0x00000009u, 0x00000afeu, 0x0000035eu, 0x0000035eu, 0x0000035eu, 0x0000035eu, 0x00040017u, 0x00000b07u, 0x0000037bu, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000b13u, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000b29u, 0x00003fffu, 0x0004001cu, 0x00000b2fu, 0x000001aeu, 0x00000a3cu, 0x0004002bu, 0x00000012u, 0x00000b30u, 0x00004000u, 0x0004002bu, 0x00000012u, 0x00000b31u, 0xfffffc10u, 0x0005002cu, 0x000001aeu, 0x00000b32u, 0x00000b30u, 0x00000b31u, 0x0004002bu, 0x00000012u, 0x00000b33u, 0x00003f04u, 0x0004002bu, 0x00000012u, 0x00000b34u, 0xfffffc30u, 0x0005002cu, 0x000001aeu, 0x00000b35u, 0x00000b33u, 0x00000b34u, 0x0004002bu, 0x00000012u, 0x00000b36u, 0x00003e10u, 0x0004002bu, 0x00000012u, 0x00000b37u, 0xfffffc48u, 0x0005002cu, 0x000001aeu, 0x00000b38u, 0x00000b36u, 0x00000b37u, 0x0004002bu, 0x00000012u, 0x00000b39u, 0x00003d22u, 0x0004002bu, 0x00000012u, 0x00000b3au, 0xfffffc68u, 0x0005002cu, 0x000001aeu, 0x00000b3bu, 0x00000b39u, 0x00000b3au, 0x0004002bu, 0x00000012u, 0x00000b3cu, 0x00003c3cu, 0x0004002bu, 0x00000012u, 0x00000b3du, 0xfffffc84u, 0x0005002cu, 0x000001aeu, 0x00000b3eu, 0x00000b3cu, 0x00000b3du, 0x0004002bu, 0x00000012u, 0x00000b3fu, 0x00003b5du, 0x0004002bu, 0x00000012u, 0x00000b40u, 0xfffffc98u, 0x0005002cu, 0x000001aeu, 0x00000b41u, 0x00000b3fu, 0x00000b40u, 0x0004002bu, 0x00000012u, 0x00000b42u, 0x00003a83u, 0x0004002bu, 0x00000012u, 0x00000b43u, 0xfffffcb8u, 0x0005002cu, 0x000001aeu, 0x00000b44u, 0x00000b42u, 0x00000b43u, 0x0004002bu, 0x00000012u, 0x00000b45u, 0x000039b1u, 0x0004002bu, 0x00000012u, 0x00000b46u, 0xfffffcccu, 0x0005002cu, 0x000001aeu, 0x00000b47u, 0x00000b45u, 0x00000b46u, 0x0004002bu, 0x00000012u, 0x00000b48u, 0x000038e4u, 0x0004002bu, 0x00000012u, 0x00000b49u, 0xfffffce0u, 0x0005002cu, 0x000001aeu, 0x00000b4au, 0x00000b48u, 0x00000b49u, 0x0004002bu, 0x00000012u, 0x00000b4bu, 0x0000381cu, 0x0004002bu, 0x00000012u, 0x00000b4cu, 0xfffffcf8u, 0x0005002cu, 0x000001aeu, 0x00000b4du, 0x00000b4bu, 0x00000b4cu, 0x0004002bu, 0x00000012u, 0x00000b4eu, 0x0000375au, 0x0004002bu, 0x00000012u, 0x00000b4fu, 0xfffffd0cu, 0x0005002cu, 0x000001aeu, 0x00000b50u, 0x00000b4eu, 0x00000b4fu, 0x0004002bu, 0x00000012u, 0x00000b51u, 0x0000369du, 0x0004002bu, 0x00000012u, 0x00000b52u, 0xfffffd20u, 0x0005002cu, 0x000001aeu, 0x00000b53u, 0x00000b51u, 0x00000b52u, 0x0004002bu, 0x00000012u, 0x00000b54u, 0x000035e5u, 0x0004002bu, 0x00000012u, 0x00000b55u, 0xfffffd34u, 0x0005002cu, 0x000001aeu, 0x00000b56u, 0x00000b54u, 0x00000b55u, 0x0004002bu, 0x00000012u, 0x00000b57u, 0x00003532u, 0x0004002bu, 0x00000012u, 0x00000b58u, 0xfffffd44u, 0x0005002cu, 0x000001aeu, 0x00000b59u, 0x00000b57u, 0x00000b58u, 0x0004002bu, 0x00000012u, 0x00000b5au, 0x00003483u, 0x0004002bu, 0x00000012u, 0x00000b5bu, 0xfffffd58u, 0x0005002cu, 0x000001aeu, 0x00000b5cu, 0x00000b5au, 0x00000b5bu, 0x0004002bu, 0x00000012u, 0x00000b5du, 0x000033d9u, 0x0004002bu, 0x00000012u, 0x00000b5eu, 0xfffffd68u, 0x0005002cu, 0x000001aeu, 0x00000b5fu, 0x00000b5du, 0x00000b5eu, 0x0004002bu, 0x00000012u, 0x00000b60u, 0x00003333u, 0x0004002bu, 0x00000012u, 0x00000b61u, 0xfffffd78u, 0x0005002cu, 0x000001aeu, 0x00000b62u, 0x00000b60u, 0x00000b61u, 0x0004002bu, 0x00000012u, 0x00000b63u, 0x00003291u, 0x0004002bu, 0x00000012u, 0x00000b64u, 0xfffffd8cu, 0x0005002cu, 0x000001aeu, 0x00000b65u, 0x00000b63u, 0x00000b64u, 0x0004002bu, 0x00000012u, 0x00000b66u, 0x000031f4u, 0x0004002bu, 0x00000012u, 0x00000b67u, 0xfffffd94u, 0x0005002cu, 0x000001aeu, 0x00000b68u, 0x00000b66u, 0x00000b67u, 0x0004002bu, 0x00000012u, 0x00000b69u, 0x00003159u, 0x0004002bu, 0x00000012u, 0x00000b6au, 0xfffffda8u, 0x0005002cu, 0x000001aeu, 0x00000b6bu, 0x00000b69u, 0x00000b6au, 0x0004002bu, 0x00000012u, 0x00000b6cu, 0x000030c3u, 0x0004002bu, 0x00000012u, 0x00000b6du, 0xfffffdb4u, 0x0005002cu, 0x000001aeu, 0x00000b6eu, 0x00000b6cu, 0x00000b6du, 0x0004002bu, 0x00000012u, 0x00000b6fu, 0x00003030u, 0x0004002bu, 0x00000012u, 0x00000b70u, 0xfffffdc4u, 0x0005002cu, 0x000001aeu, 0x00000b71u, 0x00000b6fu, 0x00000b70u, 0x0004002bu, 0x00000012u, 0x00000b72u, 0x00002fa1u, 0x0004002bu, 0x00000012u, 0x00000b73u, 0xfffffdd0u, 0x0005002cu, 0x000001aeu, 0x00000b74u, 0x00000b72u, 0x00000b73u, 0x0004002bu, 0x00000012u, 0x00000b75u, 0x00002f15u, 0x0004002bu, 0x00000012u, 0x00000b76u, 0xfffffddcu, 0x0005002cu, 0x000001aeu, 0x00000b77u, 0x00000b75u, 0x00000b76u, 0x0004002bu, 0x00000012u, 0x00000b78u, 0x00002e8cu, 0x0004002bu, 0x00000012u, 0x00000b79u, 0xfffffde8u, 0x0005002cu, 0x000001aeu, 0x00000b7au, 0x00000b78u, 0x00000b79u, 0x0004002bu, 0x00000012u, 0x00000b7bu, 0x00002e06u, 0x0004002bu, 0x00000012u, 0x00000b7cu, 0xfffffdf4u, 0x0005002cu, 0x000001aeu, 0x00000b7du, 0x00000b7bu, 0x00000b7cu, 0x0004002bu, 0x00000012u, 0x00000b7eu, 0x00002d83u, 0x0004002bu, 0x00000012u, 0x00000b7fu, 0xfffffe00u, 0x0005002cu, 0x000001aeu, 0x00000b80u, 0x00000b7eu, 0x00000b7fu, 0x0004002bu, 0x00000012u, 0x00000b81u, 0x00002d03u, 0x0004002bu, 0x00000012u, 0x00000b82u, 0xfffffe0cu, 0x0005002cu, 0x000001aeu, 0x00000b83u, 0x00000b81u, 0x00000b82u, 0x0004002bu, 0x00000012u, 0x00000b84u, 0x00002c86u, 0x0004002bu, 0x00000012u, 0x00000b85u, 0xfffffe14u, 0x0005002cu, 0x000001aeu, 0x00000b86u, 0x00000b84u, 0x00000b85u, 0x0004002bu, 0x00000012u, 0x00000b87u, 0x00002c0bu, 0x0004002bu, 0x00000012u, 0x00000b88u, 0xfffffe20u, 0x0005002cu, 0x000001aeu, 0x00000b89u, 0x00000b87u, 0x00000b88u, 0x0004002bu, 0x00000012u, 0x00000b8au, 0x00002b93u, 0x0004002bu, 0x00000012u, 0x00000b8bu, 0xfffffe2cu, 0x0005002cu, 0x000001aeu, 0x00000b8cu, 0x00000b8au, 0x00000b8bu, 0x0004002bu, 0x00000012u, 0x00000b8du, 0x00002b1eu, 0x0004002bu, 0x00000012u, 0x00000b8eu, 0xfffffe34u, 0x0005002cu, 0x000001aeu, 0x00000b8fu, 0x00000b8du, 0x00000b8eu, 0x0004002bu, 0x00000012u, 0x00000b90u, 0x00002aabu, 0x0004002bu, 0x00000012u, 0x00000b91u, 0xfffffe3cu, 0x0005002cu, 0x000001aeu, 0x00000b92u, 0x00000b90u, 0x00000b91u, 0x0004002bu, 0x00000012u, 0x00000b93u, 0x00002a3au, 0x0004002bu, 0x00000012u, 0x00000b94u, 0xfffffe48u, 0x0005002cu, 0x000001aeu, 0x00000b95u, 0x00000b93u, 0x00000b94u, 0x0004002bu, 0x00000012u, 0x00000b96u, 0x000029ccu, 0x0004002bu, 0x00000012u, 0x00000b97u, 0xfffffe50u, 0x0005002cu, 0x000001aeu, 0x00000b98u, 0x00000b96u, 0x00000b97u, 0x0004002bu, 0x00000012u, 0x00000b99u, 0x00002960u, 0x0004002bu, 0x00000012u, 0x00000b9au, 0xfffffe58u, 0x0005002cu, 0x000001aeu, 0x00000b9bu, 0x00000b99u, 0x00000b9au, 0x0004002bu, 0x00000012u, 0x00000b9cu, 0x000028f6u, 0x0004002bu, 0x00000012u, 0x00000b9du, 0xfffffe60u, 0x0005002cu, 0x000001aeu, 0x00000b9eu, 0x00000b9cu, 0x00000b9du, 0x0004002bu, 0x00000012u, 0x00000b9fu, 0x0000288eu, 0x0004002bu, 0x00000012u, 0x00000ba0u, 0xfffffe68u, 0x0005002cu, 0x000001aeu, 0x00000ba1u, 0x00000b9fu, 0x00000ba0u, 0x0004002bu, 0x00000012u, 0x00000ba2u, 0x00002828u, 0x0004002bu, 0x00000012u, 0x00000ba3u, 0xfffffe70u, 0x0005002cu, 0x000001aeu, 0x00000ba4u, 0x00000ba2u, 0x00000ba3u, 0x0004002bu, 0x00000012u, 0x00000ba5u, 0x000027c4u, 0x0004002bu, 0x00000012u, 0x00000ba6u, 0xfffffe78u, 0x0005002cu, 0x000001aeu, 0x00000ba7u, 0x00000ba5u, 0x00000ba6u, 0x0004002bu, 0x00000012u, 0x00000ba8u, 0x00002762u, 0x0004002bu, 0x00000012u, 0x00000ba9u, 0xfffffe80u, 0x0005002cu, 0x000001aeu, 0x00000baau, 0x00000ba8u, 0x00000ba9u, 0x0004002bu, 0x00000012u, 0x00000babu, 0x00002702u, 0x0004002bu, 0x00000012u, 0x00000bacu, 0xfffffe88u, 0x0005002cu, 0x000001aeu, 0x00000badu, 0x00000babu, 0x00000bacu, 0x0004002bu, 0x00000012u, 0x00000baeu, 0x000026a4u, 0x0004002bu, 0x00000012u, 0x00000bafu, 0xfffffe90u, 0x0005002cu, 0x000001aeu, 0x00000bb0u, 0x00000baeu, 0x00000bafu, 0x0004002bu, 0x00000012u, 0x00000bb1u, 0x00002648u, 0x0004002bu, 0x00000012u, 0x00000bb2u, 0xfffffe94u, 0x0005002cu, 0x000001aeu, 0x00000bb3u, 0x00000bb1u, 0x00000bb2u, 0x0004002bu, 0x00000012u, 0x00000bb4u, 0x000025edu, 0x0004002bu, 0x00000012u, 0x00000bb5u, 0xfffffe9cu, 0x0005002cu, 0x000001aeu, 0x00000bb6u, 0x00000bb4u, 0x00000bb5u, 0x0004002bu, 0x00000012u, 0x00000bb7u, 0x00002594u, 0x0004002bu, 0x00000012u, 0x00000bb8u, 0xfffffea4u, 0x0005002cu, 0x000001aeu, 0x00000bb9u, 0x00000bb7u, 0x00000bb8u, 0x0004002bu, 0x00000012u, 0x00000bbau, 0x0000253du, 0x0004002bu, 0x00000012u, 0x00000bbbu, 0xfffffea8u, 0x0005002cu, 0x000001aeu, 0x00000bbcu, 0x00000bbau, 0x00000bbbu, 0x0004002bu, 0x00000012u, 0x00000bbdu, 0x000024e7u, 0x0004002bu, 0x00000012u, 0x00000bbeu, 0xfffffeacu, 0x0005002cu, 0x000001aeu, 0x00000bbfu, 0x00000bbdu, 0x00000bbeu, 0x0004002bu, 0x00000012u, 0x00000bc0u, 0x00002492u, 0x0004002bu, 0x00000012u, 0x00000bc1u, 0xfffffeb4u, 0x0005002cu, 0x000001aeu, 0x00000bc2u, 0x00000bc0u, 0x00000bc1u, 0x0004002bu, 0x00000012u, 0x00000bc3u, 0x0000243fu, 0x0004002bu, 0x00000012u, 0x00000bc4u, 0xfffffebcu, 0x0005002cu, 0x000001aeu, 0x00000bc5u, 0x00000bc3u, 0x00000bc4u, 0x0004002bu, 0x00000012u, 0x00000bc6u, 0x000023eeu, 0x0004002bu, 0x00000012u, 0x00000bc7u, 0xfffffec0u, 0x0005002cu, 0x000001aeu, 0x00000bc8u, 0x00000bc6u, 0x00000bc7u, 0x0004002bu, 0x00000012u, 0x00000bc9u, 0x0000239eu, 0x0004002bu, 0x00000012u, 0x00000bcau, 0xfffffec4u, 0x0005002cu, 0x000001aeu, 0x00000bcbu, 0x00000bc9u, 0x00000bcau, 0x0004002bu, 0x00000012u, 0x00000bccu, 0x0000234fu, 0x0004002bu, 0x00000012u, 0x00000bcdu, 0xfffffeccu, 0x0005002cu, 0x000001aeu, 0x00000bceu, 0x00000bccu, 0x00000bcdu, 0x0004002bu, 0x00000012u, 0x00000bcfu, 0x00002302u, 0x0004002bu, 0x00000012u, 0x00000bd0u, 0xfffffed0u, 0x0005002cu, 0x000001aeu, 0x00000bd1u, 0x00000bcfu, 0x00000bd0u, 0x0004002bu, 0x00000012u, 0x00000bd2u, 0x000022b6u, 0x0004002bu, 0x00000012u, 0x00000bd3u, 0xfffffed8u, 0x0005002cu, 0x000001aeu, 0x00000bd4u, 0x00000bd2u, 0x00000bd3u, 0x0004002bu, 0x00000012u, 0x00000bd5u, 0x0000226cu, 0x0005002cu, 0x000001aeu, 0x00000bd6u, 0x00000bd5u, 0x00000bd3u, 0x0004002bu, 0x00000012u, 0x00000bd7u, 0x00002222u, 0x0004002bu, 0x00000012u, 0x00000bd8u, 0xfffffee0u, 0x0005002cu, 0x000001aeu, 0x00000bd9u, 0x00000bd7u, 0x00000bd8u, 0x0004002bu, 0x00000012u, 0x00000bdau, 0x000021dau, 0x0004002bu, 0x00000012u, 0x00000bdbu, 0xfffffee4u, 0x0005002cu, 0x000001aeu, 0x00000bdcu, 0x00000bdau, 0x00000bdbu, 0x0004002bu, 0x00000012u, 0x00000bddu, 0x00002193u, 0x0004002bu, 0x00000012u, 0x00000bdeu, 0xfffffee8u, 0x0005002cu, 0x000001aeu, 0x00000bdfu, 0x00000bddu, 0x00000bdeu, 0x0004002bu, 0x00000012u, 0x00000be0u, 0x0000214du, 0x0004002bu, 0x00000012u, 0x00000be1u, 0xfffffeecu, 0x0005002cu, 0x000001aeu, 0x00000be2u, 0x00000be0u, 0x00000be1u, 0x0004002bu, 0x00000012u, 0x00000be3u, 0x00002108u, 0x0004002bu, 0x00000012u, 0x00000be4u, 0xfffffef4u, 0x0005002cu, 0x000001aeu, 0x00000be5u, 0x00000be3u, 0x00000be4u, 0x0004002bu, 0x00000012u, 0x00000be6u, 0x000020c5u, 0x0005002cu, 0x000001aeu, 0x00000be7u, 0x00000be6u, 0x00000be4u, 0x0004002bu, 0x00000012u, 0x00000be8u, 0x00002082u, 0x0004002bu, 0x00000012u, 0x00000be9u, 0xfffffefcu, 0x0005002cu, 0x000001aeu, 0x00000beau, 0x00000be8u, 0x00000be9u, 0x0004002bu, 0x00000012u, 0x00000bebu, 0x00002041u, 0x0005002cu, 0x000001aeu, 0x00000becu, 0x00000bebu, 0x00000be9u, 0x0043002cu, 0x00000b2fu, 0x00000bedu, 0x00000b32u, 0x00000b35u, 0x00000b38u, 0x00000b3bu, 0x00000b3eu, 0x00000b41u, 0x00000b44u, 0x00000b47u, 0x00000b4au, 0x00000b4du, 0x00000b50u, 0x00000b53u, 0x00000b56u, 0x00000b59u, 0x00000b5cu, 0x00000b5fu, 0x00000b62u, 0x00000b65u, 0x00000b68u, 0x00000b6bu, 0x00000b6eu, 0x00000b71u, 0x00000b74u, 0x00000b77u, 0x00000b7au, 0x00000b7du, 0x00000b80u, 0x00000b83u, 0x00000b86u, 0x00000b89u, 0x00000b8cu, 0x00000b8fu, 0x00000b92u, 0x00000b95u, 0x00000b98u, 0x00000b9bu, 0x00000b9eu, 0x00000ba1u, 0x00000ba4u, 0x00000ba7u, 0x00000baau, 0x00000badu, 0x00000bb0u, 0x00000bb3u, 0x00000bb6u, 0x00000bb9u, 0x00000bbcu, 0x00000bbfu, 0x00000bc2u, 0x00000bc5u, 0x00000bc8u, 0x00000bcbu, 0x00000bceu, 0x00000bd1u, 0x00000bd4u, 0x00000bd6u, 0x00000bd9u, 0x00000bdcu, 0x00000bdfu, 0x00000be2u, 0x00000be5u, 0x00000be7u, 0x00000beau, 0x00000becu, 0x00040020u, 0x00000bf0u, 0x00000007u, 0x00000b2fu, 0x0004002bu, 0x00000008u, 0x00000c0du, 0x00007fffu, 0x0004002bu, 0x00000008u, 0x00000c1fu, 0x3fffffffu, 0x0004002bu, 0x00000008u, 0x00000c20u, 0x20000000u, 0x0005002cu, 0x000000efu, 0x00000c39u, 0x00000220u, 0x00000220u, 0x0004002bu, 0x00000008u, 0x00000c52u, 0xffff8000u, 0x0005002cu, 0x000000efu, 0x00000c6cu, 0x00000c0du, 0x00000c0du, 0x0004002bu, 0x00000008u, 0x00000c6eu, 0xffff0000u, 0x0005002cu, 0x000000efu, 0x00000c6fu, 0x00000c6eu, 0x00000c6eu, 0x0005002cu, 0x000000efu, 0x00000c70u, 0x0000055au, 0x0000055au, 0x0004002bu, 0x00000008u, 0x00000c75u, 0xffffffe0u, 0x00060034u, 0x00000008u, 0x00000c93u, 0x00000080u, 0x0000022du, 0x0000078bu, 0x00050034u, 0x00000012u, 0x00000c94u, 0x00000072u, 0x00000c93u, 0x00060034u, 0x00000008u, 0x00000ca9u, 0x00000080u, 0x00000233u, 0x0000078bu, 0x00050034u, 0x00000012u, 0x00000caau, 0x00000072u, 0x00000ca9u, 0x0006001eu, 0x00000cc6u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x00000cc7u, 0x00000cc6u, 0x00040020u, 0x00000cc8u, 0x00000002u, 0x00000cc7u, 0x0004003bu, 0x00000cc8u, 0x00000cc9u, 0x00000002u, 0x00040020u, 0x00000ccau, 0x00000002u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000cd7u, 0xffffffffu, 0x00060034u, 0x00000069u, 0x00000d36u, 0x000000adu, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000008u, 0x00000d8cu, 0x00000082u, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000008u, 0x00000da0u, 0x00000080u, 0x0000022du, 0x0000078bu, 0x00060034u, 0x00000008u, 0x00000db0u, 0x00000080u, 0x00000236u, 0x0000078bu, 0x0005002cu, 0x000000efu, 0x00000dd9u, 0x00000220u, 0x0000022au, 0x0004002bu, 0x00000006u, 0x00000e25u, 0x0000000bu, 0x0006002cu, 0x0000030cu, 0x00000e26u, 0x00000e25u, 0x000006f7u, 0x0000045cu, 0x0004002bu, 0x00000006u, 0x00000e28u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000e65u, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x00000e79u, 0x00001000u, 0x0004001cu, 0x00000e7au, 0x0000000fu, 0x00000e79u, 0x0003001eu, 0x00000e7bu, 0x00000e7au, 0x0003001du, 0x00000e7cu, 0x00000e7bu, 0x0003001eu, 0x00000e7du, 0x00000e7cu, 0x00040020u, 0x00000e7eu, 0x0000000cu, 0x00000e7du, 0x0004003bu, 0x00000e7eu, 0x00000e7fu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000e88u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000ec0u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000f1du, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000f46u, 0x00000800u, 0x0004001cu, 0x00000f47u, 0x00000011u, 0x00000f46u, 0x0003001eu, 0x00000f48u, 0x00000f47u, 0x0003001du, 0x00000f49u, 0x00000f48u, 0x0003001eu, 0x00000f4au, 0x00000f49u, 0x00040020u, 0x00000f4bu, 0x0000000cu, 0x00000f4au, 0x0004003bu, 0x00000f4bu, 0x00000f4cu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000f4eu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000feeu, 0xfffffffcu, 0x0004002bu, 0x00000011u, 0x000010a3u, 0x00000008u, 0x0004002bu, 0x00000012u, 0x000010afu, 0x00000080u, 0x0004002bu, 0x00000008u, 0x0000114fu, 0x00000020u, 0x0004002bu, 0x00000008u, 0x00001166u, 0x000003ffu, 0x0004002bu, 0x00000006u, 0x000011d9u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00001285u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x000012aau, 0x00000400u, 0x0004002bu, 0x00000012u, 0x00001332u, 0x00000010u, 0x0004002bu, 0x00000008u, 0x000013a4u, 0xffffff01u, 0x0005002cu, 0x000000efu, 0x000013aeu, 0x00000554u, 0x00000554u, 0x0004002bu, 0x00000012u, 0x0000186fu, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x0000188eu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x000018aau, 0xffffff00u, 0x0004002bu, 0x00000008u, 0x00001982u, 0x00000100u, 0x0006002cu, 0x00000044u, 0x00001983u, 0x00001982u, 0x00001982u, 0x00001982u, 0x00060034u, 0x00000008u, 0x00001bbfu, 0x00000082u, 0x00000882u, 0x0000022au, 0x000d001eu, 0x00001bc7u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000012u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x00001bc8u, 0x00001bc7u, 0x0003001eu, 0x00001bc9u, 0x00001bc8u, 0x00040020u, 0x00001bcau, 0x0000000cu, 0x00001bc9u, 0x0004003bu, 0x00001bcau, 0x00001bcbu, 0x0000000cu, 0x00060034u, 0x00000069u, 0x00001bd0u, 0x000000adu, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000008u, 0x00001bd8u, 0x00000082u, 0x00000882u, 0x0000022au, 0x00050034u, 0x00000008u, 0x00001bd9u, 0x000000c8u, 0x00001bd8u, 0x00060034u, 0x00000008u, 0x00001bdcu, 0x00000082u, 0x00000882u, 0x0000022au, 0x00050034u, 0x00000008u, 0x00001bddu, 0x000000c8u, 0x00001bdcu, 0x00040020u, 0x00001bfeu, 0x0000000cu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x00001c28u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00001c39u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00001c56u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00001c5bu, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00001c60u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00001c65u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00001c6au, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00001c6fu, 0x00080000u, 0x0004002bu, 0x00000006u, 0x00001c74u, 0x00200000u, 0x0004002bu, 0x00000006u, 0x00001c79u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x00001c7eu, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00001c83u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x00001c88u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x00001c8cu, 0x10000000u, 0x00040020u, 0x00001c96u, 0x00000002u, 0x00000006u, 0x00060034u, 0x00000069u, 0x00001d45u, 0x000000adu, 0x00000882u, 0x0000022au, 0x0004002bu, 0x00000012u, 0x00001db0u, 0x00000000u, 0x0007002cu, 0x00000013u, 0x00001db1u, 0x00001db0u, 0x00001db0u, 0x00001db0u, 0x00001db0u, 0x00040020u, 0x00001e06u, 0x0000000cu, 0x00000009u, 0x00040020u, 0x00001f1eu, 0x00000001u, 0x0000030cu, 0x0004003bu, 0x00001f1eu, 0x00001f1fu, 0x00000001u, 0x00040020u, 0x00001f20u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00001f1eu, 0x00001f29u, 0x00000001u, 0x00040032u, 0x00000008u, 0x00001f32u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00001f33u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00001f34u, 0x00000001u, 0x00060033u, 0x0000030cu, 0x00001f35u, 0x00001f33u, 0x00001f34u, 0x0000045cu, 0x00060034u, 0x00000006u, 0x00001f36u, 0x00000051u, 0x00001f35u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00001f37u, 0x00000080u, 0x00001f36u, 0x0000032du, 0x00060034u, 0x00000008u, 0x00001f38u, 0x00000087u, 0x00001f32u, 0x00001f37u, 0x00040032u, 0x00000008u, 0x00001f3du, 0x00000100u, 0x00060034u, 0x00000008u, 0x00001f3eu, 0x00000087u, 0x00001f3du, 0x0000114fu, 0x0003001du, 0x00001f41u, 0x00000006u, 0x0003001eu, 0x00001f42u, 0x00001f41u, 0x00040020u, 0x00001f43u, 0x0000000cu, 0x00001f42u, 0x0004003bu, 0x00001f43u, 0x00001f44u, 0x0000000cu, 0x0007001eu, 0x00001f48u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00001f49u, 0x00000009u, 0x00001f48u, 0x0004003bu, 0x00001f49u, 0x00001f4au, 0x00000009u, 0x00040020u, 0x00001f4bu, 0x00000009u, 0x00000006u, 0x0003001du, 0x00001f75u, 0x00000006u, 0x0003001eu, 0x00001f76u, 0x00001f75u, 0x00040020u, 0x00001f77u, 0x0000000cu, 0x00001f76u, 0x0004003bu, 0x00001f77u, 0x00001f78u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00001fa4u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x00001fd8u, 0x00000200u, 0x0004002bu, 0x00000008u, 0x00001fd9u, 0x00000800u, 0x0004002bu, 0x00000008u, 0x00001fdau, 0x00001000u, 0x0004002bu, 0x00000008u, 0x00001fdbu, 0x00002000u, 0x0004002bu, 0x00000008u, 0x00001fdcu, 0x00010000u, 0x0004002bu, 0x00000008u, 0x00001fddu, 0x00080000u, 0x0004002bu, 0x00000008u, 0x00001fdeu, 0x00100000u, 0x0004002bu, 0x00000008u, 0x00001fdfu, 0x00200000u, 0x0004002bu, 0x00000008u, 0x00001fe0u, 0x00400000u, 0x0004002bu, 0x00000008u, 0x00001fe1u, 0x00800000u, 0x0004002bu, 0x00000008u, 0x00001fe2u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x00001fe3u, 0x0000001au, 0x0004002bu, 0x00000008u, 0x00001fe4u, 0x10000000u, 0x0004002bu, 0x00000008u, 0x00001fe5u, 0x40000000u, 0x0003001du, 0x00001fe6u, 0x00000009u, 0x0003001eu, 0x00001fe7u, 0x00001fe6u, 0x00040020u, 0x00001fe8u, 0x0000000cu, 0x00001fe7u, 0x0004003bu, 0x00001fe8u, 0x00001fe9u, 0x0000000cu, 0x0003002eu, 0x00000010u, 0x00006bf4u, 0x0003002eu, 0x00000006u, 0x00006bf7u, 0x0003002eu, 0x0000000fu, 0x00006bfau, 0x0003002eu, 0x00000013u, 0x00006bfbu, 0x0003002eu, 0x00000012u, 0x00006c41u, 0x0003002eu, 0x00000008u, 0x000071a3u, 0x0003002eu, 0x00000009u, 0x000071c3u, 0x0003002eu, 0x00000028u, 0x000071d9u, 0x0003002eu, 0x00000011u, 0x000071dcu, 0x00030001u, 0x00000044u, 0x00007f42u, 0x00030001u, 0x000000efu, 0x00008018u, 0x00030001u, 0x00000013u, 0x00008740u, 0x00030001u, 0x00000069u, 0x00009246u, 0x00030001u, 0x00000012u, 0x0000ab73u, 0x00030001u, 0x0000000fu, 0x0000bf09u, 0x00030001u, 0x00000008u, 0x0000c177u, 0x00030001u, 0x00000010u, 0x0000c299u, 0x00030001u, 0x00000047u, 0x0000c7c1u, 0x00030001u, 0x0000000fu, 0x0000eeaau, 0x00030001u, 0x00000047u, 0x0000eec0u, 0x00030001u, 0x00000047u, 0x0000eedfu, 0x00030001u, 0x00000069u, 0x0000ef1eu, 0x00030001u, 0x00000069u, 0x0000ef1fu, 0x00030001u, 0x00000044u, 0x0000ef24u, 0x00030001u, 0x00000013u, 0x0000efd0u, 0x00030001u, 0x00000069u, 0x0000f1a0u, 0x00030001u, 0x00000013u, 0x0000f1f6u, 0x00030001u, 0x00000012u, 0x0000f27au, 0x0006002cu, 0x0000030cu, 0x0000f36du, 0x0000069eu, 0x0000069eu, 0x0000069eu, 0x0005002cu, 0x000000b0u, 0x0000f36eu, 0x00000464u, 0x00000464u, 0x0006002cu, 0x0000030cu, 0x0000f36fu, 0x00000314u, 0x00000314u, 0x00000314u, 0x0006002cu, 0x0000030cu, 0x0000f370u, 0x0000031au, 0x0000031au, 0x0000031au, 0x0006002cu, 0x00000044u, 0x0000f371u, 0x00000c75u, 0x00000c75u, 0x00000c75u, 0x0006002cu, 0x00000044u, 0x0000f372u, 0x00000554u, 0x00000554u, 0x00000554u, 0x0007002cu, 0x00000009u, 0x0000f373u, 0x00000c75u, 0x00000c75u, 0x00000c75u, 0x00000c75u, 0x0007002cu, 0x00000009u, 0x0000f374u, 0x0000026fu, 0x0000026fu, 0x0000026fu, 0x0000026fu, 0x0007002cu, 0x00000009u, 0x0000f375u, 0x00000af3u, 0x00000af3u, 0x00000af3u, 0x00000af3u, 0x0005002cu, 0x000000efu, 0x0000f376u, 0x0000022au, 0x0000022au, 0x0006002cu, 0x00000044u, 0x0000f377u, 0x00000c52u, 0x00000c52u, 0x00000c52u, 0x0005002cu, 0x000000efu, 0x0000f378u, 0x00000236u, 0x00000236u, 0x0005002cu, 0x000000efu, 0x0000f379u, 0x0000036cu, 0x0000036cu, 0x0005002cu, 0x000000b0u, 0x0000f37au, 0x000011d9u, 0x000011d9u, 0x0005002cu, 0x000000b0u, 0x0000f37bu, 0x00000386u, 0x00000386u, 0x0006002cu, 0x0000030cu, 0x0000f37cu, 0x00000e28u, 0x00000e28u, 0x00000e28u, 0x0006002cu, 0x0000030cu, 0x0000f37du, 0x00000464u, 0x00000464u, 0x00000464u, 0x0006002cu, 0x0000030cu, 0x0000f37eu, 0x00000386u, 0x00000386u, 0x00000386u, 0x0007002cu, 0x00000013u, 0x0000f37fu, 0x000004e5u, 0x000004e5u, 0x000004e5u, 0x000004e5u, 0x0007002cu, 0x00000009u, 0x0000f380u, 0x0000025du, 0x0000025du, 0x0000025du, 0x0000025du, 0x0005002cu, 0x000000efu, 0x0000f381u, 0x0000114fu, 0x0000114fu, 0x0005002cu, 0x000001aeu, 0x0000f382u, 0x00001332u, 0x00001332u, 0x0005002cu, 0x000001aeu, 0x0000f383u, 0x000004d4u, 0x000004d4u, 0x0007002cu, 0x00000013u, 0x0000f384u, 0x00001332u, 0x00001332u, 0x00001332u, 0x00001332u, 0x0007002cu, 0x00000013u, 0x0000f385u, 0x000004d4u, 0x000004d4u, 0x000004d4u, 0x000004d4u, 0x0006002cu, 0x00000047u, 0x0000f386u, 0x0000093cu, 0x0000093cu, 0x0000093cu, 0x0006002cu, 0x00000044u, 0x0000f387u, 0x0000023cu, 0x0000023cu, 0x0000023cu, 0x0006002cu, 0x00000044u, 0x0000f388u, 0x00000359u, 0x00000359u, 0x00000359u, 0x0006002cu, 0x00000044u, 0x0000f389u, 0x0000025du, 0x0000025du, 0x0000025du, 0x0006002cu, 0x00000044u, 0x0000f38au, 0x0000036cu, 0x0000036cu, 0x0000036cu, 0x0006002cu, 0x000004b6u, 0x0000f38bu, 0x000004d4u, 0x000004d4u, 0x000004d4u, 0x0006002cu, 0x00000047u, 0x0000f38cu, 0x0000046fu, 0x0000046fu, 0x0000046fu, 0x0006002cu, 0x000004b6u, 0x0000f38du, 0x000004e5u, 0x000004e5u, 0x000004e5u, 0x0006002cu, 0x000004b6u, 0x0000f38eu, 0x000004e9u, 0x000004e9u, 0x000004e9u, 0x0006002cu, 0x000004b6u, 0x0000f38fu, 0x00001db0u, 0x00001db0u, 0x00001db0u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000007bu, 0x00007ce8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ce7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007ce6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007ce5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cdfu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cdeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007cddu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cdcu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cd2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cd1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007cd0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007ccfu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c98u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c97u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c96u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c95u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c94u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c93u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c92u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c91u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c90u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c8fu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c79u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c78u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c77u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c76u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c75u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c74u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c73u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c72u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c71u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c70u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c39u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c38u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c37u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c36u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c35u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c34u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c33u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c32u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c31u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c30u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007bf9u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007bf8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007bf7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007bf6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007bf5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bf4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bf3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bf2u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bf1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bf0u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007bcfu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007bceu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007bcdu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007bccu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007bcbu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bcau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bc9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bc8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bc7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007bc6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007743u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007742u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007741u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007740u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000773fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000773eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000773du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000773cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000773bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000773au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007739u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007738u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007737u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007736u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007718u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007717u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007716u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007715u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007714u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007713u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007712u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007711u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000770fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000770eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000770du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000770cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000770bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007288u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007287u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007286u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007285u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007284u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007283u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007282u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007281u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007280u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000727fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000727eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000727du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000727cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000727bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000725du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000725cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000725bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000725au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007259u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007258u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007257u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007256u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007255u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007254u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007253u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007252u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007251u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007250u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007243u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007242u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007241u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007240u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000723fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000723eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000723du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000723cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000723bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000723au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007239u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007215u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007214u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007213u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007212u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007211u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007210u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000720fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000720eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000720du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000720cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000720bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071edu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071ecu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071ebu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071eau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071e9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071e8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071e7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000071e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071e0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071dbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071dau, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071d8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071d0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071cfu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071ceu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071cdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071ccu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071c7u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071c6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071c5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071c4u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000071afu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x000071aeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071adu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071acu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071abu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000071aau, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000071a9u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071a8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071a7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007196u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007195u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007194u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007193u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000718du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000718cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000718bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000718au, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007176u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007175u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007174u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007173u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007172u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007171u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007170u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000716fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000716eu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007163u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007162u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007161u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007160u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000715fu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x0000715eu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x0000715du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000715cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000715bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007149u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007148u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007147u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007146u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007145u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007144u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007143u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007142u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007138u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007137u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007136u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007135u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007134u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007133u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007132u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007131u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000711fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000711eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000711du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000711cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000711bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000711au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007119u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007118u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000710eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000710du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000710cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000710bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000710au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007109u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007108u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007107u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070dcu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070ccu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070cbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070cau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070c9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070c8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070c7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070c6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070bfu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007097u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007096u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007095u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007094u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007093u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007092u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007091u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007069u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007068u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007067u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007066u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007065u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007064u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007063u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007060u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000705fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000705cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000705bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007058u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007057u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007054u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007053u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007050u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000704fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000704cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000704bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007048u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007047u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007044u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007043u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007023u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007022u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007021u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007020u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000701fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007019u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007018u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007017u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007016u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007015u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007004u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007003u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007002u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007001u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007000u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006fffu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ffeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ffdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ffcu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ffbu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ffau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ff9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ff8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ff7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ff6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fbbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fbau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fb9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fb8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fb7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fb6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fb5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006faeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006effu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006efeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006efbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006efau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ecfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ecbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ecau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ea7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ea6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ea3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ea2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e8eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e8bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e8au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e87u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e86u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e83u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e82u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e7fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e7eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e60u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e53u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e43u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e42u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e41u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e40u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e3fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e3eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e3du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006defu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006deeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006debu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006deau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006daeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006daau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d16u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d13u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d12u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d0fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d0eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d0bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d0au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d07u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d06u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cfbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cfau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cf9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cf8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cf7u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006ceau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ce9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ce8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ce7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ce6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ce5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cd8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cd7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cd6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cd5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cd4u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006cc8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cc7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cc6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cc5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cc4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cc3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cb8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cb7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cb6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cb5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cb4u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006ca7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ca6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ca5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ca4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ca3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ca2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c95u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c94u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c93u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c92u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c91u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006c85u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c84u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c83u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c82u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c81u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c80u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c75u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c74u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c73u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c72u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c71u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006c64u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c63u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c62u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c61u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c60u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c5fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c52u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c51u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c50u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c4fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c4eu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006c42u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c40u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c3fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c3eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c3du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c3cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c32u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c31u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c30u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c2fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c2eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c24u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c23u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c22u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c21u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c20u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c0eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c0du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c0cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c0bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c0au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c04u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c02u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c01u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c00u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bf9u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00006bf8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bf6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bf5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006bd4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bd3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bd2u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00006bd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bd0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bcfu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bceu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bcdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bccu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bcbu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bcau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006bb5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bb4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bb3u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00006bb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bb1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bb0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bafu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006baeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006badu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bacu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006babu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006baau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ba9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ba8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ba7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b97u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b96u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b95u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b93u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006b92u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006b91u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b88u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b87u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b86u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006b85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b84u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006b83u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006b82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b59u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006b5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b5bu, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x00006a69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6du, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x00006a6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a33u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000069f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069ccu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069b2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069b3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069b4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069b5u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000069b6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006991u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006992u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000696bu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000696cu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000696du, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000696eu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000696fu, 0x00000007u, 0x0005003bu, 0x0000006au, 0x00006888u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000041bu, 0x00006889u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000688au, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000688bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000688cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000688du, 0x00000007u, 0x0004003bu, 0x000004b7u, 0x0000688eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000688fu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00006890u, 0x00000007u, 0x0005003bu, 0x0000006au, 0x000067a5u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000041bu, 0x000067a6u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000067a7u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000067a8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000067a9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000067aau, 0x00000007u, 0x0004003bu, 0x000004b7u, 0x000067abu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000067acu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000067adu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000067a1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006798u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006795u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000677du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000677eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000677fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006780u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006781u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006782u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066bau, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000066bbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066bcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066bdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066beu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066bfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066c0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066c1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066c2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066c3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066c4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066c5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066c6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066c7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066c8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066cau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066cbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066ccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066cdu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006698u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006699u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000669au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000669bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006570u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006571u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006572u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006573u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006574u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006575u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006577u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006579u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000657au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000657bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000657cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000657du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000657eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000657fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006580u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006581u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006582u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006583u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006584u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006585u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006586u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006587u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00006588u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006589u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000658au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000658bu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000658cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000658du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000658eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000658fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006590u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006591u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006592u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006593u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006594u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006595u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00006596u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006598u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000659au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000659bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000659cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000659du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000659eu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000659fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a0u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000065a1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000065a3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a7u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000065a8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a9u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000065aau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065abu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065acu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065adu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065aeu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065afu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065b0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000065b1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006538u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006539u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000653au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000653bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000064ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006500u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006501u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006502u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006503u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006504u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000064c7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000064c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000064c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000064cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000643bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000643cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000643du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000643eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000643fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006440u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006441u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006442u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006443u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006445u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006446u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006447u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006448u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006437u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000642bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006424u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000641du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006416u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000063fau, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000063fbu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000063fcu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000063fdu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000063feu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000063bau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000063bbu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000063bcu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006356u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006357u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006358u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000630bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000630cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000630du, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000062c6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000062c7u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000062c8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000625au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000625cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000625du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000625eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006260u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006261u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006262u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006264u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006265u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006266u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006268u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006269u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000626au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000626bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000626cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000626du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000626eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000626fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006270u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006271u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006272u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006254u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006248u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006241u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000623au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006233u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006217u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006218u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006219u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000621au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000621bu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000061d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000061d8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000061d9u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006173u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006174u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006175u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006128u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006129u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000612au, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000060e3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000060e4u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000060e5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006077u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006079u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000607au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000607bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000607du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000607eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000607fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006081u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006082u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006083u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006085u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006086u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006087u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006088u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006089u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000608au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000608bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000608cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000608du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000608eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000608fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006071u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000606au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006063u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000605cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006040u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006041u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006042u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006043u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006044u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006000u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006001u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006002u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00005f9cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005f9du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005f9eu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00005f51u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005f52u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005f53u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00005f0cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005f0du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005f0eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ea0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ea2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ea3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ea4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ea6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ea7u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ea8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eaau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eabu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eacu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eaeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eafu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005eb0u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eb1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eb2u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eb3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eb4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005eb9u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00005e9au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e95u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e90u, 0x00000007u, 0x0004003bu, 0x0000039au, 0x00005e50u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e51u, 0x00000007u, 0x0004003bu, 0x0000039au, 0x00005e52u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005e14u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e15u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e16u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e17u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e18u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005e19u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005dddu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005ddeu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005ddfu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00005de0u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005de1u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005de2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005da6u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005da7u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005da8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00005da9u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005daau, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005dabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d84u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d60u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d18u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ce3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ce4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ce5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ce6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ce7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cb3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005cb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c80u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c20u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005bf5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005bc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b9cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b70u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b44u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b18u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aecu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005aedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ad8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ab5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a9eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a7bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a65u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a42u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a09u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059cfu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000059d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005990u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005991u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005992u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005993u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005994u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005995u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005955u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005956u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005957u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005958u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005959u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000595au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000591eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000591fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058d9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000058dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005890u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005891u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005892u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005893u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005894u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005895u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000584bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000584cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000584du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000584eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000584fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005850u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005806u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005807u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005808u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005809u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000580au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000580bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057e4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000057e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057c0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000057c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000579au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000579bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000579cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000579du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005776u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005777u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005778u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005779u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005743u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005744u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005745u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005746u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005747u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005711u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005712u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005713u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005714u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056e0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000056e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056adu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000056aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000567fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005680u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005681u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005652u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005653u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005654u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005655u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005626u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005627u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005628u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005629u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055fcu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000055fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055adu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000055aeu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000055afu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000055b0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000055b1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000055b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005558u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005559u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000555au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000555bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000555cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000555du, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000555eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000555fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00005560u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005561u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005507u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005508u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005509u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000550au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000550bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000550cu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000550du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000550eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000550fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005510u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054bau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000054bbu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000054bcu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000054bdu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000054beu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000054bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005480u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005442u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005445u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005446u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005408u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005409u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000540au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000540bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000540cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053d1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000053d2u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000053b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053b3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000053b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000538du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000538eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000538fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005390u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005391u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00005371u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005372u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005373u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000534cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000534du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000534eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000534fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005350u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00005330u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005331u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005332u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000530fu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000052efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052f0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000052f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052cdu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000052ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052a8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000052a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005282u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005283u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005284u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005285u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000525eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000525fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005260u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005261u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000523au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000523bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000523cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000523du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005207u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005208u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005209u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000520au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000520bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051d7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000051d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000051a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000516eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000516fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005170u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005171u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005172u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00005152u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005153u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005154u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000513eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000513fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005140u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005104u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005105u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005106u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005107u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005108u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005109u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000510au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000510bu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000050e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050e9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050d5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000509eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050a0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050a1u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000507eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000507fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005080u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000506au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000506bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000506cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005030u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005031u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005032u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005033u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005034u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005035u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005036u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005037u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00005014u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005015u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005016u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005000u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005001u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005002u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fccu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004fcdu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fabu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004facu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f97u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f51u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f54u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f55u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004f31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f32u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f1eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ed8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ed9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004edau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004edbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004edcu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004eb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ebau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ea6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e62u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e63u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004e3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e40u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e2cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004de7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004de9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004deau, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004dc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dc7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004dc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004db2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004db3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d78u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d7bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d7cu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004d59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d5au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d46u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d0bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d0eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d0fu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004cecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cedu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ceeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cd9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004cdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c9eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ca0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ca1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ca2u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004c7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c80u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c6cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c31u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c34u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c35u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004c0eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004c0fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004beeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004befu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bceu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bcfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004baeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bafu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004b7fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004b80u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004b50u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004b51u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004647u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004648u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004649u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000464au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000464bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000464cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000464du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000464eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000464fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004650u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004651u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004652u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004653u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004655u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004656u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004658u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004659u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004660u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004661u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004662u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004663u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004664u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004665u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004667u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004668u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004669u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000466au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000466bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000466cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000466du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000466fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004670u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004671u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004672u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004673u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004674u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004675u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004677u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004678u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004679u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000467au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000467bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000467cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000467du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000467fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004680u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004681u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004682u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004683u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004684u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004686u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004687u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004688u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004689u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000468au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000468du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004690u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004692u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004693u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004694u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004695u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004696u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004698u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004699u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000469au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000469bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000469cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000469eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000469fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046aau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046adu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046bcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046bfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046cbu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046ceu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046dau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046ddu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046ecu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046fcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004700u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004701u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004702u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004704u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004705u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004706u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004708u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004709u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000470cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000470fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004711u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004712u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004714u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004715u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004717u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004718u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000471au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000471bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000471du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000471eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004720u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004721u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004723u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004724u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004726u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004727u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004729u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000472au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000472cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000472du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000472fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004730u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004732u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004733u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004735u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004736u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004738u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004739u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000473bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000473cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000473eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000473fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004741u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004742u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004744u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004745u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004747u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004748u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000474bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000474eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004750u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004751u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004753u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004754u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004756u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004757u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004759u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000475au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000475cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000475du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000475fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004760u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004762u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004763u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004765u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004766u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004768u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004769u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000476cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000476fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004771u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004772u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00004773u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004774u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004775u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00004776u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004777u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004778u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004779u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000477au, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000477bu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000477cu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000477du, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000477eu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000477fu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004780u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004781u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004782u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004783u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004784u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004785u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004786u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004787u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000045e9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045eau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045ebu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045ecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045edu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000045eeu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000045e6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045c5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045c6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045c7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000045c8u, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x000045c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045cau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000045cbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004562u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004563u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004564u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004565u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004566u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004567u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004568u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004569u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000456au, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000456bu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00004541u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004542u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004543u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00004544u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004545u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00004546u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004547u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000453eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000451du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000451eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000451fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004520u, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x00004521u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004522u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004523u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044bau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000044bbu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044bcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044bdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044beu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044bfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044c0u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044c1u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044c2u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044c3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000447eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000447fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004480u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004481u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004482u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004483u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004447u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004448u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004449u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000444au, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000444bu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000444cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004410u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004411u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004412u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004413u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004414u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004415u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043eeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000043efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043cau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000043cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000043a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004380u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004381u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004382u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004383u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000434du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000434eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000434fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004350u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004351u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000431au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000431bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000431cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000431du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000431eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042eau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000042ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042b7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000042b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004288u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004289u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000428au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000428bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000425cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000425du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000425eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000425fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004230u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004231u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004232u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004233u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004204u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004205u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004206u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004207u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041dau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000041dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041aeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000041afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004180u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004181u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004182u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004183u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004154u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004155u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004156u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004157u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004140u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004141u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004142u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000411eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000411fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004107u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004108u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004109u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040e5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040cfu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040acu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004095u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004096u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004097u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004070u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004071u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004072u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004073u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004074u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004035u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004036u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004037u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004038u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004039u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000403au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ffau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ffbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ffcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ffdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ffeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003fffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fc3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003fc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f88u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003f89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f43u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003f44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003effu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003ebau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e74u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e4eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e2au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e06u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003de3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003daeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003db1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d7du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003d7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d4au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003d4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d17u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ce9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ceau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003cebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cbeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003cbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c92u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003c93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c66u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003c67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c17u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003c18u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003c19u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003c1au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003c1bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003c1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bc6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003bc7u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003bc8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003bc9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003bcau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003bcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b75u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b76u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003b77u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b78u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b79u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003b7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b24u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b25u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003b26u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b27u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b28u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003b29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003aeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003aafu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003ab0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a75u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a3bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a3cu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003a1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a1du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039fau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000039fbu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000039dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039dcu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000039ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000039bau, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000399au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000399cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003975u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003976u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003977u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003978u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003979u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003959u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000395au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000395bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003934u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003935u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003936u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003937u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003938u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003910u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003911u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003912u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003913u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038eeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000038efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038cau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000038cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000038a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003871u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003872u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003873u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003874u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003875u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000383eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000383fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003840u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003841u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003842u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000380bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000380cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000380du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000380eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000380fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037dbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000037dcu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000037bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037bdu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000037beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037a9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000037aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000376eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000376fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003770u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003771u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003772u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003773u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003774u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003775u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003752u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003753u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003754u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000373eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000373fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003740u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003704u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003705u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003706u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003707u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003708u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003709u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000370au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000370bu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000036e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000369au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000369bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000369cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000369du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000369eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000369fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036a1u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000367eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000367fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003680u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000366au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000366bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000366cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003630u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003631u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003632u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003633u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003634u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003635u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003636u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003637u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003614u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003615u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003616u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003601u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003602u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035bbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000035bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035beu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000035bfu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000359bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000359cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000359du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003587u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003588u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003589u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000353eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000353fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003540u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003541u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003542u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003543u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003544u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003545u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003546u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003522u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003523u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003524u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000350eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000350fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003510u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034ccu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034cdu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000034a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034aau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003495u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003496u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003497u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000344cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000344du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000344eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000344fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003450u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003453u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003454u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003430u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003431u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003432u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000341cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000341du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000341eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033e6u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000033c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033c4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033b0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003372u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003373u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003374u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003375u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003376u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003377u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003378u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003379u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003356u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003357u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003358u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003342u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003343u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003344u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003305u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003306u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003307u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003308u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003309u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000330au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000330bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000330cu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000032e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032eau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000032ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000032d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003298u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003299u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000329cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000329eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000329fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003278u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003279u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003258u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003259u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003238u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003239u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003218u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003219u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000031e9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000031eau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000031bau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000031bbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cb1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cb6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cb9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cbau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002cbbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cbcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cbdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cbfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002ccau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ccbu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002cccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002ccdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cceu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002ccfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cd6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002cd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cd9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cddu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cdeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002cdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ce2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002ce6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002ce7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ceau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cedu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002ceeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cf1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cf4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cf7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cfdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cffu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d02u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d05u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d08u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d11u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d14u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d17u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d20u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d23u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d26u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d29u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d32u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d35u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d38u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d41u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d44u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d47u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d52u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d56u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d62u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d66u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d72u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d75u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d78u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d7bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d7eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d81u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d84u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d87u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d8au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d8du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d90u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d93u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d96u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d99u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d9cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d9fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002da2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002da5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002da8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dabu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002daeu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002db2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002db5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002db8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dbau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dbdu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dccu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dcfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dd2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dd5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dd8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ddbu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ddcu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002dddu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ddeu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ddfu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002de0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002de1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002de2u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002de3u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002de4u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002de5u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002de6u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002de7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002de8u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002de9u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002deau, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002debu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002decu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002dedu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002deeu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002defu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002df0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002df1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002bffu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002c00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c01u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002c02u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002c03u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002c04u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002c05u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002c06u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bf4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bf1u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002beeu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bebu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bcau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bcbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bccu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bcdu, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x00002bceu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bcfu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bd0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b67u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002b68u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b69u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b6au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b6bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b6cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b6du, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b6eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b6fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b70u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b46u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b47u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b48u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b49u, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x00002b4au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b4bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b4cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ae3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002ae4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ae5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ae6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ae7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ae8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ae9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002aeau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002aebu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002aecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ac2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ac3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ac4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ac5u, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x00002ac6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ac7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ac8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a5fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002a60u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a61u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a62u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a63u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a64u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a65u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a66u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a67u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a68u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029c7u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029c8u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029c9u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029cau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000029cbu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029ccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000029cdu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029ceu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000029cfu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d0u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d1u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029d3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029d4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029d5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029d6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029d7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000029bbu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000029b4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000029b5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000297bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000297cu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x0000297du, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x0000297eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000297fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002980u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x0000291au, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000291bu, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000291cu, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000291du, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000291eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000291fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002920u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002921u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00002922u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00002923u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028fbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028dau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028dbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028bau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028bbu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002892u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002893u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002894u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002770u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002771u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002772u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002773u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002774u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002775u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002777u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002778u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000277au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000277bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000277cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000277du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000277eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000277fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002780u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002781u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002783u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002784u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002786u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002787u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002788u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002789u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000278au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002750u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002751u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002730u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002731u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002710u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002711u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000026e8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000026e9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000026eau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000025c6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000025c7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025c8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000025c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025cau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000025cbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025cdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025ceu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025d1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000025d2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000025d3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025dau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025dfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025b0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000259au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002549u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000254au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000254bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000254cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000254du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000254eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000254fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002551u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002552u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002553u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002554u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002555u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002557u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002558u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002559u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000255au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000255bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000255cu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002524u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002503u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002504u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002505u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002506u, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x00002507u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002508u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002509u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024a0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000024a1u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024a2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024a3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024a4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024a5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024a6u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024a7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024a8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024a9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002461u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002462u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002463u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002464u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002465u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002466u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002467u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002468u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002469u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00002440u, 0x00000007u, 0x0005003bu, 0x0000006au, 0x000020a5u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000006au, 0x000020a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020aeu, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x000020afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020b5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020b6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020b7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020b8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020b9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020bau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020bbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020bcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020bdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020beu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020bfu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ceu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cfu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020d4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d6u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020d8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000020dau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020dbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020dcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ddu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020deu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e6u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020e7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020e8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020e9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020eau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020ebu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000020ecu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000020edu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020eeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020f4u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000020f5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000020f6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000020f7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020fbu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020fcu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020fdu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020feu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020ffu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002100u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002101u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002102u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002103u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002104u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002105u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002106u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002107u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002108u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002109u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000210au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000210bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000210cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000210du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000210eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000210fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002110u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00002111u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002112u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002113u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00002114u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002115u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002116u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002117u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002118u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002119u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000211au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000211bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000211cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000211du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000211eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002120u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002121u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002123u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002124u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002125u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002126u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002127u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002128u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002129u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000212au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000212bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000212cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000212du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000212eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000212fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002130u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002131u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002132u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002133u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002134u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002135u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002136u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002137u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002138u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002139u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000213au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000213bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000213cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000213du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000213fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002141u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002142u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002143u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002144u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002145u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002146u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002147u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002148u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002149u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000214au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000214bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000214cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000214du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000214eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000214fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002150u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002151u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002152u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00002154u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002156u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002157u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002158u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002159u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000215au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000215bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000215cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000215du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000215eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000215fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002161u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002162u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002163u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002164u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002165u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002166u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002169u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000216au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000216bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000216cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000216du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000216eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000216fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002170u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00002090u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000202du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000202eu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000202fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002030u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002031u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001ff7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ff9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ffau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ffbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ffcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ffdu, 0x00000007u, 0x0005003bu, 0x0000006au, 0x00001fecu, 0x00000007u, 0x00000536u, 0x0004003bu, 0x00000046u, 0x00001f1du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f24u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001f28u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f2du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f40u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001f54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f60u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f74u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f8eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f95u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fbbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001fbfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001fc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fc3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001fc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fd4u, 0x00000007u, 0x000300f7u, 0x00001feau, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00001febu, 0x000200f8u, 0x00001febu, 0x0003003eu, 0x00000219u, 0x0000021au, 0x00050041u, 0x00001f20u, 0x00001f21u, 0x00001f1fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001f22u, 0x00001f21u, 0x0004007cu, 0x00000008u, 0x00001f23u, 0x00001f22u, 0x0003003eu, 0x00001f1du, 0x00001f23u, 0x00050041u, 0x00001f20u, 0x00001f25u, 0x00001f1fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001f26u, 0x00001f25u, 0x0004007cu, 0x00000008u, 0x00001f27u, 0x00001f26u, 0x0003003eu, 0x00001f24u, 0x00001f27u, 0x0004003du, 0x0000030cu, 0x00001f2au, 0x00001f29u, 0x0007004fu, 0x000000b0u, 0x00001f2bu, 0x00001f2au, 0x00001f2au, 0x00000000u, 0x00000001u, 0x0004007cu, 0x000000efu, 0x00001f2cu, 0x00001f2bu, 0x0003003eu, 0x00001f28u, 0x00001f2cu, 0x00050041u, 0x00000046u, 0x00001f2eu, 0x00001f28u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001f2fu, 0x00001f2eu, 0x00050041u, 0x00000046u, 0x00001f30u, 0x00001f28u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001f31u, 0x00001f30u, 0x00050084u, 0x00000008u, 0x00001f39u, 0x00001f31u, 0x00001f38u, 0x00050080u, 0x00000008u, 0x00001f3au, 0x00001f2fu, 0x00001f39u, 0x0003003eu, 0x00001f2du, 0x00001f3au, 0x00050084u, 0x00000008u, 0x00001f3fu, 0x00001f3au, 0x00001f3eu, 0x0003003eu, 0x00001f3bu, 0x00001f3fu, 0x00060041u, 0x000006d9u, 0x00001f46u, 0x00001f44u, 0x00000220u, 0x00001f3au, 0x0004003du, 0x00000006u, 0x00001f47u, 0x00001f46u, 0x00050041u, 0x00001f4bu, 0x00001f4cu, 0x00001f4au, 0x00000233u, 0x0004003du, 0x00000006u, 0x00001f4du, 0x00001f4cu, 0x000500c7u, 0x00000006u, 0x00001f4eu, 0x00001f47u, 0x00001f4du, 0x0003003eu, 0x00001f40u, 0x00001f4eu, 0x000500aau, 0x00000069u, 0x00001f50u, 0x00001f4eu, 0x0000032du, 0x000300f7u, 0x00001f52u, 0x00000000u, 0x000400fau, 0x00001f50u, 0x00001f51u, 0x00001f52u, 0x000200f8u, 0x00001f51u, 0x0003003eu, 0x00001fecu, 0x00000559u, 0x000200f9u, 0x00001feau, 0x000200f8u, 0x00001f52u, 0x0004003du, 0x0000030cu, 0x00001f55u, 0x00001f1fu, 0x0007004fu, 0x000000b0u, 0x00001f56u, 0x00001f55u, 0x00001f55u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001f54u, 0x00001f56u, 0x00050041u, 0x00001f4bu, 0x00001f58u, 0x00001f4au, 0x0000022du, 0x0004003du, 0x00000006u, 0x00001f59u, 0x00001f58u, 0x0003003eu, 0x00001f57u, 0x00001f59u, 0x00050041u, 0x00001f4bu, 0x00001f5bu, 0x00001f4au, 0x00000230u, 0x0004003du, 0x00000006u, 0x00001f5cu, 0x00001f5bu, 0x0003003eu, 0x00001f5au, 0x00001f5cu, 0x00050041u, 0x00001f4bu, 0x00001f5eu, 0x00001f4au, 0x00000220u, 0x0004003du, 0x00000006u, 0x00001f5fu, 0x00001f5eu, 0x0003003eu, 0x00001f5du, 0x00001f5fu, 0x00050041u, 0x00001f4bu, 0x00001f61u, 0x00001f4au, 0x0000022au, 0x0004003du, 0x00000006u, 0x00001f62u, 0x00001f61u, 0x0003003eu, 0x00001f60u, 0x00001f62u, 0x0003003eu, 0x00000755u, 0x00000536u, 0x0003003eu, 0x00000856u, 0x00000536u, 0x0004003du, 0x000000b0u, 0x00001ffeu, 0x00001f54u, 0x00050050u, 0x000000b0u, 0x00002001u, 0x00001f59u, 0x00001f5cu, 0x000500b0u, 0x0000087bu, 0x00002002u, 0x00001ffeu, 0x00002001u, 0x0004009bu, 0x00000069u, 0x00002003u, 0x00002002u, 0x000300f7u, 0x00002004u, 0x00000000u, 0x000400fau, 0x00002003u, 0x00002005u, 0x00002004u, 0x000200f8u, 0x00002005u, 0x0004003du, 0x000000b0u, 0x00002006u, 0x00001f54u, 0x00050050u, 0x000000b0u, 0x00002007u, 0x00000884u, 0x00000884u, 0x000500c7u, 0x000000b0u, 0x00002008u, 0x00002006u, 0x00002007u, 0x0003003eu, 0x00001ff7u, 0x00002008u, 0x0004003du, 0x000000b0u, 0x00002009u, 0x00001f54u, 0x00050050u, 0x000000efu, 0x0000200au, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x0000200bu, 0x00002009u, 0x0000200au, 0x0003003eu, 0x00001f54u, 0x0000200bu, 0x00050041u, 0x00000007u, 0x0000200cu, 0x00001ff7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000200du, 0x0000200cu, 0x00050084u, 0x00000006u, 0x0000200eu, 0x0000200du, 0x0000088du, 0x00050041u, 0x00000007u, 0x0000200fu, 0x00001ff7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002010u, 0x0000200fu, 0x00050080u, 0x00000006u, 0x00002011u, 0x0000200eu, 0x00002010u, 0x0003003eu, 0x00001ff8u, 0x00002011u, 0x000500c2u, 0x00000006u, 0x00002014u, 0x00001f59u, 0x0000078bu, 0x00050041u, 0x00000007u, 0x00002015u, 0x00001f54u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002016u, 0x00002015u, 0x00050084u, 0x00000006u, 0x00002017u, 0x00002014u, 0x00002016u, 0x00050080u, 0x00000006u, 0x00002018u, 0x00001f5fu, 0x00002017u, 0x00050041u, 0x00000007u, 0x00002019u, 0x00001f54u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000201au, 0x00002019u, 0x00050080u, 0x00000006u, 0x0000201bu, 0x00002018u, 0x0000201au, 0x0003003eu, 0x00001ff9u, 0x0000201bu, 0x0003003eu, 0x0000089eu, 0x0000201bu, 0x0003003eu, 0x00001ffau, 0x0000201bu, 0x0003003eu, 0x00001ffbu, 0x00002011u, 0x000300f7u, 0x00002032u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00002032u, 0x00000000u, 0x00002033u, 0x00000001u, 0x00002033u, 0x00000002u, 0x00002034u, 0x00000003u, 0x00002035u, 0x00000004u, 0x00002036u, 0x000200f8u, 0x00002036u, 0x000500c7u, 0x00000006u, 0x00002083u, 0x0000201bu, 0x000006cbu, 0x0003003eu, 0x00001ffau, 0x00002083u, 0x00050084u, 0x00000006u, 0x00002085u, 0x00002011u, 0x000006cfu, 0x00050080u, 0x00000006u, 0x00002087u, 0x00002083u, 0x00002085u, 0x0003003eu, 0x00001ffau, 0x00002087u, 0x00060041u, 0x000006d9u, 0x00002089u, 0x000006d7u, 0x00000220u, 0x00002087u, 0x0004003du, 0x00000006u, 0x0000208au, 0x00002089u, 0x0003003eu, 0x00002031u, 0x0000208au, 0x00070050u, 0x000004f7u, 0x0000208cu, 0x0000208au, 0x0000208au, 0x0000208au, 0x0000208au, 0x000500c2u, 0x000004f7u, 0x0000208du, 0x0000208cu, 0x000006dfu, 0x000500c7u, 0x000004f7u, 0x0000208eu, 0x0000208du, 0x000006e1u, 0x00040071u, 0x00000010u, 0x0000208fu, 0x0000208eu, 0x0003003eu, 0x00000675u, 0x0000208fu, 0x000200f9u, 0x00002032u, 0x000200f8u, 0x00002035u, 0x000500c7u, 0x00000006u, 0x0000206du, 0x0000201bu, 0x00000683u, 0x0003003eu, 0x00001ffau, 0x0000206du, 0x00050084u, 0x00000006u, 0x0000206fu, 0x00002011u, 0x000006b4u, 0x00050080u, 0x00000006u, 0x00002071u, 0x0000206du, 0x0000206fu, 0x0003003eu, 0x00001ffau, 0x00002071u, 0x000500c6u, 0x00000006u, 0x00002073u, 0x00002071u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00002074u, 0x0000068fu, 0x00000220u, 0x00002073u, 0x0004003du, 0x00000011u, 0x00002075u, 0x00002074u, 0x00040071u, 0x00000006u, 0x00002076u, 0x00002075u, 0x0003003eu, 0x00002030u, 0x00002076u, 0x000500c2u, 0x00000006u, 0x00002078u, 0x00002076u, 0x00000314u, 0x00040071u, 0x0000000fu, 0x00002079u, 0x00002078u, 0x00060050u, 0x00000047u, 0x0000207au, 0x00002079u, 0x00002079u, 0x00002079u, 0x000500c7u, 0x00000006u, 0x0000207cu, 0x00002076u, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x0000207du, 0x0000207cu, 0x00070050u, 0x00000010u, 0x00002081u, 0x00002079u, 0x00002079u, 0x00002079u, 0x0000207du, 0x0003003eu, 0x00000675u, 0x00002081u, 0x000200f9u, 0x00002032u, 0x000200f8u, 0x00002034u, 0x000500c7u, 0x00000006u, 0x0000204au, 0x0000201bu, 0x00000683u, 0x0003003eu, 0x00001ffau, 0x0000204au, 0x00050084u, 0x00000006u, 0x0000204cu, 0x00002011u, 0x00000687u, 0x00050080u, 0x00000006u, 0x0000204eu, 0x0000204au, 0x0000204cu, 0x0003003eu, 0x00001ffau, 0x0000204eu, 0x000500c6u, 0x00000006u, 0x00002050u, 0x0000204eu, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00002051u, 0x0000068fu, 0x00000220u, 0x00002050u, 0x0004003du, 0x00000011u, 0x00002052u, 0x00002051u, 0x00040071u, 0x00000006u, 0x00002053u, 0x00002052u, 0x0003003eu, 0x0000202eu, 0x00002053u, 0x000500c2u, 0x00000006u, 0x00002055u, 0x00002053u, 0x00000314u, 0x000500c2u, 0x00000006u, 0x00002057u, 0x00002053u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00002059u, 0x00002053u, 0x00000386u, 0x00060050u, 0x0000030cu, 0x0000205au, 0x00002055u, 0x00002057u, 0x00002059u, 0x000500c7u, 0x0000030cu, 0x0000205cu, 0x0000205au, 0x0000f36du, 0x0003003eu, 0x0000202fu, 0x0000205cu, 0x00040071u, 0x00000047u, 0x0000205eu, 0x0000205cu, 0x00060041u, 0x00000671u, 0x00002060u, 0x0000067cu, 0x00000220u, 0x0000204eu, 0x0004003du, 0x0000000fu, 0x00002061u, 0x00002060u, 0x000500c4u, 0x0000000fu, 0x00002062u, 0x00002061u, 0x0000038eu, 0x000500c7u, 0x00000006u, 0x00002064u, 0x00002053u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00002065u, 0x00002064u, 0x0000023cu, 0x00040071u, 0x0000000fu, 0x00002066u, 0x00002065u, 0x000500c5u, 0x0000000fu, 0x00002067u, 0x00002062u, 0x00002066u, 0x00050051u, 0x0000000fu, 0x00002068u, 0x0000205eu, 0x00000000u, 0x00050051u, 0x0000000fu, 0x00002069u, 0x0000205eu, 0x00000001u, 0x00050051u, 0x0000000fu, 0x0000206au, 0x0000205eu, 0x00000002u, 0x00070050u, 0x00000010u, 0x0000206bu, 0x00002068u, 0x00002069u, 0x0000206au, 0x00002067u, 0x0003003eu, 0x00000675u, 0x0000206bu, 0x000200f9u, 0x00002032u, 0x000200f8u, 0x00002033u, 0x000500c7u, 0x00000006u, 0x00002038u, 0x0000201bu, 0x00000663u, 0x0003003eu, 0x00001ffau, 0x00002038u, 0x00050084u, 0x00000006u, 0x0000203au, 0x00002011u, 0x00000662u, 0x00050080u, 0x00000006u, 0x0000203cu, 0x00002038u, 0x0000203au, 0x0003003eu, 0x00001ffau, 0x0000203cu, 0x000500c6u, 0x00000006u, 0x0000203eu, 0x0000203cu, 0x00000464u, 0x00060041u, 0x00000671u, 0x0000203fu, 0x0000066eu, 0x00000220u, 0x0000203eu, 0x0004003du, 0x0000000fu, 0x00002040u, 0x0000203fu, 0x0003003eu, 0x0000202du, 0x00002040u, 0x000500c2u, 0x00000006u, 0x00002045u, 0x0000203cu, 0x0000022au, 0x00060041u, 0x00000671u, 0x00002046u, 0x0000067cu, 0x00000220u, 0x00002045u, 0x0004003du, 0x0000000fu, 0x00002047u, 0x00002046u, 0x00070050u, 0x00000010u, 0x00002048u, 0x00002040u, 0x00002040u, 0x00002040u, 0x00002047u, 0x0003003eu, 0x00000675u, 0x00002048u, 0x000200f9u, 0x00002032u, 0x000200f8u, 0x00002032u, 0x0004003du, 0x00000006u, 0x00002024u, 0x00002015u, 0x00050084u, 0x00000006u, 0x00002025u, 0x00002014u, 0x00002024u, 0x00050080u, 0x00000006u, 0x00002026u, 0x00001f62u, 0x00002025u, 0x0004003du, 0x00000006u, 0x00002028u, 0x00002019u, 0x00050080u, 0x00000006u, 0x00002029u, 0x00002026u, 0x00002028u, 0x0003003eu, 0x00001ff9u, 0x00002029u, 0x0003003eu, 0x00001ffcu, 0x00002029u, 0x0003003eu, 0x00001ffdu, 0x00002011u, 0x000500c7u, 0x00000006u, 0x00002092u, 0x00002029u, 0x00000683u, 0x0003003eu, 0x00001ffcu, 0x00002092u, 0x00050084u, 0x00000006u, 0x00002094u, 0x00002011u, 0x00000759u, 0x00050080u, 0x00000006u, 0x00002096u, 0x00002092u, 0x00002094u, 0x0003003eu, 0x00001ffcu, 0x00002096u, 0x000500c6u, 0x00000006u, 0x00002098u, 0x00002096u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00002099u, 0x0000068fu, 0x00000220u, 0x00002098u, 0x0004003du, 0x00000011u, 0x0000209au, 0x00002099u, 0x0003003eu, 0x00002090u, 0x0000209au, 0x000500c2u, 0x00000011u, 0x0000209cu, 0x0000209au, 0x000005f2u, 0x0003003eu, 0x00000708u, 0x0000209cu, 0x00060041u, 0x00000671u, 0x0000209eu, 0x0000067cu, 0x00000220u, 0x00002096u, 0x0004003du, 0x0000000fu, 0x0000209fu, 0x0000209eu, 0x000500c7u, 0x00000011u, 0x000020a1u, 0x0000209au, 0x000005f7u, 0x000500c4u, 0x00000011u, 0x000020a2u, 0x000020a1u, 0x000005f2u, 0x00040071u, 0x0000000fu, 0x000020a3u, 0x000020a2u, 0x000500c5u, 0x0000000fu, 0x000020a4u, 0x0000209fu, 0x000020a3u, 0x0003003eu, 0x000006eau, 0x000020a4u, 0x000200f9u, 0x00002004u, 0x000200f8u, 0x00002004u, 0x000200f9u, 0x00001f64u, 0x000200f8u, 0x00001f64u, 0x000700f5u, 0x00000006u, 0x00007ebdu, 0x00001f4eu, 0x00002004u, 0x00001f73u, 0x00001f67u, 0x000700f5u, 0x00000047u, 0x0000d1d2u, 0x0000c7c1u, 0x00002004u, 0x0000d1d1u, 0x00001f67u, 0x000700f5u, 0x0000000fu, 0x0000d05fu, 0x0000bf09u, 0x00002004u, 0x0000d05eu, 0x00001f67u, 0x000700f5u, 0x0000000fu, 0x0000ceedu, 0x0000bf09u, 0x00002004u, 0x0000ceecu, 0x00001f67u, 0x000700f5u, 0x00000047u, 0x0000ccc8u, 0x0000c7c1u, 0x00002004u, 0x0000ccc7u, 0x00001f67u, 0x000700f5u, 0x0000000fu, 0x0000cb62u, 0x0000bf09u, 0x00002004u, 0x0000cb61u, 0x00001f67u, 0x000700f5u, 0x0000000fu, 0x0000c9fdu, 0x0000bf09u, 0x00002004u, 0x0000c9fcu, 0x00001f67u, 0x000700f5u, 0x00000047u, 0x0000c7bfu, 0x0000c7c1u, 0x00002004u, 0x0000c7beu, 0x00001f67u, 0x000700f5u, 0x00000010u, 0x0000c297u, 0x0000c299u, 0x00002004u, 0x0000c296u, 0x00001f67u, 0x000700f5u, 0x00000008u, 0x0000c175u, 0x0000c177u, 0x00002004u, 0x0000c174u, 0x00001f67u, 0x000700f5u, 0x0000000fu, 0x0000c054u, 0x0000bf09u, 0x00002004u, 0x0000c053u, 0x00001f67u, 0x000700f5u, 0x0000000fu, 0x0000bf07u, 0x0000bf09u, 0x00002004u, 0x0000bf06u, 0x00001f67u, 0x000700f5u, 0x00000069u, 0x0000bd6du, 0x00009246u, 0x00002004u, 0x0000bd6cu, 0x00001f67u, 0x000700f5u, 0x00000012u, 0x0000ab71u, 0x0000ab73u, 0x00002004u, 0x0000ab70u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x0000aac7u, 0x00008740u, 0x00002004u, 0x0000aac6u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x00009ff9u, 0x00008740u, 0x00002004u, 0x00009ff8u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x00009f15u, 0x00008740u, 0x00002004u, 0x00009f14u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x00009e2eu, 0x00008740u, 0x00002004u, 0x00009e2du, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x00009d46u, 0x00008740u, 0x00002004u, 0x00009d45u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x00009879u, 0x00008740u, 0x00002004u, 0x00009878u, 0x00001f67u, 0x000700f5u, 0x00000069u, 0x000092e7u, 0x00009246u, 0x00002004u, 0x000092e6u, 0x00001f67u, 0x000700f5u, 0x00000069u, 0x00009244u, 0x00009246u, 0x00002004u, 0x00009243u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x000088b4u, 0x00008740u, 0x00002004u, 0x000088b3u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x0000883au, 0x00008740u, 0x00002004u, 0x00008839u, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x000087bdu, 0x00008740u, 0x00002004u, 0x000087bcu, 0x00001f67u, 0x000700f5u, 0x00000013u, 0x0000873eu, 0x00008740u, 0x00002004u, 0x0000873du, 0x00001f67u, 0x000700f5u, 0x000000efu, 0x0000803au, 0x00008018u, 0x00002004u, 0x00008039u, 0x00001f67u, 0x000700f5u, 0x000000efu, 0x00008016u, 0x00008018u, 0x00002004u, 0x00008015u, 0x00001f67u, 0x000700f5u, 0x00000044u, 0x00007f4fu, 0x00007f42u, 0x00002004u, 0x00007f4eu, 0x00001f67u, 0x000700f5u, 0x00000044u, 0x00007f40u, 0x00007f42u, 0x00002004u, 0x00007f3fu, 0x00001f67u, 0x000500abu, 0x00000069u, 0x00001f6au, 0x00007ebdu, 0x0000032du, 0x000400f6u, 0x00001f66u, 0x00001f67u, 0x00000000u, 0x000400fau, 0x00001f6au, 0x00001f65u, 0x00001f66u, 0x000200f8u, 0x00001f65u, 0x0006000cu, 0x00000008u, 0x00001f6du, 0x00000001u, 0x00000049u, 0x00007ebdu, 0x0003003eu, 0x00001f6bu, 0x00001f6du, 0x000500c4u, 0x00000008u, 0x00001f6fu, 0x0000022au, 0x00001f6du, 0x0004007cu, 0x00000006u, 0x00001f70u, 0x00001f6fu, 0x000400c8u, 0x00000006u, 0x00001f71u, 0x00001f70u, 0x000500c7u, 0x00000006u, 0x00001f73u, 0x00007ebdu, 0x00001f71u, 0x0003003eu, 0x00001f40u, 0x00001f73u, 0x00050080u, 0x00000008u, 0x00001f7bu, 0x00001f3fu, 0x00001f6du, 0x00060041u, 0x000006d9u, 0x00001f7cu, 0x00001f78u, 0x00000220u, 0x00001f7bu, 0x0004003du, 0x00000006u, 0x00001f7du, 0x00001f7cu, 0x0003003eu, 0x00001f74u, 0x00001f7du, 0x000200f9u, 0x00001f7eu, 0x000200f8u, 0x00001f7eu, 0x000700f5u, 0x00000047u, 0x0000d1d1u, 0x0000d1d2u, 0x00001f65u, 0x0000ee89u, 0x00001f81u, 0x000700f5u, 0x0000000fu, 0x0000d05eu, 0x0000d05fu, 0x00001f65u, 0x0000ee6eu, 0x00001f81u, 0x000700f5u, 0x0000000fu, 0x0000ceecu, 0x0000ceedu, 0x00001f65u, 0x0000ee53u, 0x00001f81u, 0x000700f5u, 0x00000047u, 0x0000ccc7u, 0x0000ccc8u, 0x00001f65u, 0x0000ee2bu, 0x00001f81u, 0x000700f5u, 0x0000000fu, 0x0000cb61u, 0x0000cb62u, 0x00001f65u, 0x0000ee03u, 0x00001f81u, 0x000700f5u, 0x0000000fu, 0x0000c9fcu, 0x0000c9fdu, 0x00001f65u, 0x0000eddbu, 0x00001f81u, 0x000700f5u, 0x00000047u, 0x0000c7beu, 0x0000c7bfu, 0x00001f65u, 0x0000ed9du, 0x00001f81u, 0x000700f5u, 0x00000010u, 0x0000c296u, 0x0000c297u, 0x00001f65u, 0x0000c294u, 0x00001f81u, 0x000700f5u, 0x00000008u, 0x0000c174u, 0x0000c175u, 0x00001f65u, 0x0000c172u, 0x00001f81u, 0x000700f5u, 0x0000000fu, 0x0000c053u, 0x0000c054u, 0x00001f65u, 0x0000c051u, 0x00001f81u, 0x000700f5u, 0x0000000fu, 0x0000bf06u, 0x0000bf07u, 0x00001f65u, 0x0000bf04u, 0x00001f81u, 0x000700f5u, 0x00000069u, 0x0000bd6cu, 0x0000bd6du, 0x00001f65u, 0x0000eb25u, 0x00001f81u, 0x000700f5u, 0x00000012u, 0x0000ab70u, 0x0000ab71u, 0x00001f65u, 0x0000ea93u, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x0000aac6u, 0x0000aac7u, 0x00001f65u, 0x0000ea01u, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x00009ff8u, 0x00009ff9u, 0x00001f65u, 0x0000e95fu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x00009f14u, 0x00009f15u, 0x00001f65u, 0x0000e8bfu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x00009e2du, 0x00009e2eu, 0x00001f65u, 0x0000e81fu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x00009d45u, 0x00009d46u, 0x00001f65u, 0x0000e77fu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x00009878u, 0x00009879u, 0x00001f65u, 0x0000e6edu, 0x00001f81u, 0x000700f5u, 0x00000069u, 0x000092e6u, 0x000092e7u, 0x00001f65u, 0x0000e5f4u, 0x00001f81u, 0x000700f5u, 0x00000069u, 0x00009243u, 0x00009244u, 0x00001f65u, 0x0000e4fbu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x000088b3u, 0x000088b4u, 0x00001f65u, 0x0000e3efu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x00008839u, 0x0000883au, 0x00001f65u, 0x0000e2e5u, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x000087bcu, 0x000087bdu, 0x00001f65u, 0x0000e1dbu, 0x00001f81u, 0x000700f5u, 0x00000013u, 0x0000873du, 0x0000873eu, 0x00001f65u, 0x0000e0d1u, 0x00001f81u, 0x000700f5u, 0x000000efu, 0x00008039u, 0x0000803au, 0x00001f65u, 0x0000df70u, 0x00001f81u, 0x000700f5u, 0x000000efu, 0x00008015u, 0x00008016u, 0x00001f65u, 0x0000de0fu, 0x00001f81u, 0x000700f5u, 0x00000044u, 0x00007f4eu, 0x00007f4fu, 0x00001f65u, 0x0000dca2u, 0x00001f81u, 0x000700f5u, 0x00000044u, 0x00007f3fu, 0x00007f40u, 0x00001f65u, 0x0000db2cu, 0x00001f81u, 0x000700f5u, 0x00000006u, 0x00007ee5u, 0x00001f7du, 0x00001f65u, 0x00001f8du, 0x00001f81u, 0x000500abu, 0x00000069u, 0x00001f84u, 0x00007ee5u, 0x0000032du, 0x000400f6u, 0x00001f80u, 0x00001f81u, 0x00000000u, 0x000400fau, 0x00001f84u, 0x00001f7fu, 0x00001f80u, 0x000200f8u, 0x00001f7fu, 0x0006000cu, 0x00000008u, 0x00001f87u, 0x00000001u, 0x00000049u, 0x00007ee5u, 0x0003003eu, 0x00001f85u, 0x00001f87u, 0x000500c4u, 0x00000008u, 0x00001f89u, 0x0000022au, 0x00001f87u, 0x0004007cu, 0x00000006u, 0x00001f8au, 0x00001f89u, 0x000400c8u, 0x00000006u, 0x00001f8bu, 0x00001f8au, 0x000500c7u, 0x00000006u, 0x00001f8du, 0x00007ee5u, 0x00001f8bu, 0x0003003eu, 0x00001f74u, 0x00001f8du, 0x00050084u, 0x00000008u, 0x00001f91u, 0x0000114fu, 0x00001f6du, 0x00050080u, 0x00000008u, 0x00001f92u, 0x00001f87u, 0x00001f91u, 0x0004007cu, 0x00000006u, 0x00001f93u, 0x00001f92u, 0x0003003eu, 0x00001f8eu, 0x00001f93u, 0x0003003eu, 0x00001f95u, 0x00001f23u, 0x0003003eu, 0x00001f97u, 0x00001f27u, 0x0003003eu, 0x00001f99u, 0x00001f93u, 0x0003003eu, 0x000020a5u, 0x00000536u, 0x000300f7u, 0x00002171u, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00002172u, 0x000200f8u, 0x00002172u, 0x0003003eu, 0x000020a8u, 0x00001f93u, 0x00060041u, 0x000002fcu, 0x000023f1u, 0x000002fau, 0x00000220u, 0x00001f93u, 0x0004003du, 0x000002f6u, 0x000023f2u, 0x000023f1u, 0x00050051u, 0x00000008u, 0x000023f3u, 0x000023f2u, 0x00000000u, 0x0003003eu, 0x0000718au, 0x000023f3u, 0x00050051u, 0x00000008u, 0x000023f5u, 0x000023f2u, 0x00000001u, 0x0003003eu, 0x0000718bu, 0x000023f5u, 0x00050051u, 0x00000008u, 0x000023f7u, 0x000023f2u, 0x00000002u, 0x0003003eu, 0x0000718cu, 0x000023f7u, 0x00050051u, 0x00000008u, 0x000023f9u, 0x000023f2u, 0x00000003u, 0x0003003eu, 0x0000718du, 0x000023f9u, 0x00070050u, 0x0000002eu, 0x00007192u, 0x000023f3u, 0x000023f5u, 0x000023f7u, 0x000023f9u, 0x0003003eu, 0x00007193u, 0x000023f3u, 0x0003003eu, 0x00007194u, 0x000023f5u, 0x0003003eu, 0x00007195u, 0x000023f7u, 0x0003003eu, 0x00007196u, 0x000023f9u, 0x0003003eu, 0x000071a0u, 0x000023f3u, 0x0003003eu, 0x000071a1u, 0x000023f5u, 0x0003003eu, 0x000071a2u, 0x000023f7u, 0x00050084u, 0x00000008u, 0x00002178u, 0x00000882u, 0x000023f5u, 0x000500b1u, 0x00000069u, 0x00002179u, 0x00001f27u, 0x00002178u, 0x000400a8u, 0x00000069u, 0x0000217au, 0x00002179u, 0x000300f7u, 0x0000217bu, 0x00000000u, 0x000400fau, 0x0000217au, 0x0000217cu, 0x0000217bu, 0x000200f8u, 0x0000217cu, 0x00050084u, 0x00000008u, 0x00002180u, 0x000023f7u, 0x00000882u, 0x00050080u, 0x00000008u, 0x00002181u, 0x00002180u, 0x00001bbfu, 0x000500adu, 0x00000069u, 0x00002182u, 0x00001f27u, 0x00002181u, 0x000200f9u, 0x0000217bu, 0x000200f8u, 0x0000217bu, 0x000700f5u, 0x00000069u, 0x00002183u, 0x00002179u, 0x00002172u, 0x00002182u, 0x0000217cu, 0x000300f7u, 0x00002184u, 0x00000000u, 0x000400fau, 0x00002183u, 0x00002185u, 0x00002184u, 0x000200f8u, 0x00002185u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x00002184u, 0x00070041u, 0x00000671u, 0x00002187u, 0x00001bcbu, 0x00000220u, 0x00001f93u, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00002188u, 0x00002187u, 0x00040071u, 0x00000006u, 0x00002189u, 0x00002188u, 0x0003003eu, 0x000020a9u, 0x00002189u, 0x000300f7u, 0x0000218au, 0x00000000u, 0x000400fau, 0x00001bd0u, 0x0000218bu, 0x0000218au, 0x000200f8u, 0x0000218bu, 0x000500c7u, 0x00000006u, 0x0000218du, 0x00002189u, 0x00000a36u, 0x000500abu, 0x00000069u, 0x0000218eu, 0x0000218du, 0x0000032du, 0x000300f7u, 0x0000218fu, 0x00000000u, 0x000400fau, 0x0000218eu, 0x00002190u, 0x0000218fu, 0x000200f8u, 0x00002190u, 0x000500c7u, 0x00000008u, 0x00002192u, 0x00001f23u, 0x00001bd9u, 0x0003003eu, 0x00001f95u, 0x00002192u, 0x000500c7u, 0x00000008u, 0x00002194u, 0x00001f27u, 0x00001bddu, 0x0003003eu, 0x00001f97u, 0x00002194u, 0x000200f9u, 0x0000218fu, 0x000200f8u, 0x0000218fu, 0x000700f5u, 0x00000008u, 0x00007effu, 0x00001f23u, 0x0000218bu, 0x00002192u, 0x00002190u, 0x000700f5u, 0x00000008u, 0x00007ef8u, 0x00001f27u, 0x0000218bu, 0x00002194u, 0x00002190u, 0x000200f9u, 0x0000218au, 0x000200f8u, 0x0000218au, 0x000700f5u, 0x00000008u, 0x00007efeu, 0x00001f23u, 0x00002184u, 0x00007effu, 0x0000218fu, 0x000700f5u, 0x00000008u, 0x00007ef7u, 0x00001f27u, 0x00002184u, 0x00007ef8u, 0x0000218fu, 0x00050084u, 0x00000008u, 0x00002197u, 0x00000882u, 0x000023f3u, 0x00050082u, 0x00000008u, 0x0000219cu, 0x00007ef7u, 0x00002178u, 0x00050080u, 0x00000008u, 0x0000219du, 0x00002197u, 0x0000219cu, 0x0004007cu, 0x00000006u, 0x0000219eu, 0x0000219du, 0x0003003eu, 0x000020abu, 0x0000219eu, 0x00060041u, 0x000002ddu, 0x000023ffu, 0x000002dbu, 0x00000220u, 0x0000219eu, 0x0004003du, 0x000002d7u, 0x00002400u, 0x000023ffu, 0x00050051u, 0x00000009u, 0x00002401u, 0x00002400u, 0x00000000u, 0x0003003eu, 0x0000715bu, 0x00002401u, 0x00050051u, 0x00000009u, 0x00002403u, 0x00002400u, 0x00000001u, 0x0003003eu, 0x0000715cu, 0x00002403u, 0x00050051u, 0x00000028u, 0x00002405u, 0x00002400u, 0x00000002u, 0x0003003eu, 0x0000715du, 0x00002405u, 0x00050051u, 0x00000028u, 0x00002407u, 0x00002400u, 0x00000003u, 0x0003003eu, 0x0000715eu, 0x00002407u, 0x00050051u, 0x00000008u, 0x00002409u, 0x00002400u, 0x00000004u, 0x0003003eu, 0x0000715fu, 0x00002409u, 0x00050051u, 0x00000008u, 0x0000240bu, 0x00002400u, 0x00000005u, 0x0003003eu, 0x00007160u, 0x0000240bu, 0x00050051u, 0x00000008u, 0x0000240du, 0x00002400u, 0x00000006u, 0x0003003eu, 0x00007161u, 0x0000240du, 0x00050051u, 0x00000012u, 0x0000240fu, 0x00002400u, 0x00000007u, 0x0003003eu, 0x00007162u, 0x0000240fu, 0x00050051u, 0x00000011u, 0x00002411u, 0x00002400u, 0x00000008u, 0x0003003eu, 0x00007163u, 0x00002411u, 0x000c0050u, 0x00000029u, 0x0000716du, 0x00002401u, 0x00002403u, 0x00002405u, 0x00002407u, 0x00002409u, 0x0000240bu, 0x0000240du, 0x0000240fu, 0x00002411u, 0x0003003eu, 0x0000716eu, 0x00002401u, 0x0003003eu, 0x0000716fu, 0x00002403u, 0x0003003eu, 0x00007170u, 0x00002405u, 0x0003003eu, 0x00007171u, 0x00002407u, 0x0003003eu, 0x00007172u, 0x00002409u, 0x0003003eu, 0x00007173u, 0x0000240bu, 0x0003003eu, 0x00007174u, 0x0000240du, 0x0003003eu, 0x00007175u, 0x0000240fu, 0x0003003eu, 0x00007176u, 0x00002411u, 0x0003003eu, 0x000071a7u, 0x00002401u, 0x0003003eu, 0x000071a8u, 0x00002403u, 0x0003003eu, 0x000071a9u, 0x00002405u, 0x0003003eu, 0x000071aau, 0x00002407u, 0x0003003eu, 0x000071abu, 0x00002409u, 0x0003003eu, 0x000071acu, 0x0000240bu, 0x0003003eu, 0x000071adu, 0x0000240du, 0x0003003eu, 0x000071aeu, 0x0000240fu, 0x0003003eu, 0x000071afu, 0x00002411u, 0x000500aau, 0x00000069u, 0x000021a2u, 0x00002411u, 0x0000021au, 0x000300f7u, 0x000021a3u, 0x00000000u, 0x000400fau, 0x000021a2u, 0x000021a4u, 0x000021a3u, 0x000200f8u, 0x000021a4u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x000021a3u, 0x00070041u, 0x00000671u, 0x000021a6u, 0x00001bcbu, 0x00000220u, 0x00001f93u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x000021a7u, 0x000021a6u, 0x00040071u, 0x00000006u, 0x000021a8u, 0x000021a7u, 0x0003003eu, 0x000020acu, 0x000021a8u, 0x0003003eu, 0x000020aeu, 0x00001f93u, 0x00060041u, 0x00000222u, 0x00002417u, 0x0000021fu, 0x00000220u, 0x00001f93u, 0x0004003du, 0x0000021bu, 0x00002418u, 0x00002417u, 0x00050051u, 0x00000009u, 0x00002419u, 0x00002418u, 0x00000000u, 0x0003003eu, 0x00007131u, 0x00002419u, 0x00050051u, 0x00000009u, 0x0000241bu, 0x00002418u, 0x00000001u, 0x0003003eu, 0x00007132u, 0x0000241bu, 0x00050051u, 0x00000009u, 0x0000241du, 0x00002418u, 0x00000002u, 0x0003003eu, 0x00007133u, 0x0000241du, 0x00050051u, 0x00000009u, 0x0000241fu, 0x00002418u, 0x00000003u, 0x0003003eu, 0x00007134u, 0x0000241fu, 0x00050051u, 0x00000009u, 0x00002421u, 0x00002418u, 0x00000004u, 0x0003003eu, 0x00007135u, 0x00002421u, 0x00050051u, 0x00000009u, 0x00002423u, 0x00002418u, 0x00000005u, 0x0003003eu, 0x00007136u, 0x00002423u, 0x00050051u, 0x00000009u, 0x00002425u, 0x00002418u, 0x00000006u, 0x0003003eu, 0x00007137u, 0x00002425u, 0x00050051u, 0x00000009u, 0x00002427u, 0x00002418u, 0x00000007u, 0x0003003eu, 0x00007138u, 0x00002427u, 0x000b0050u, 0x0000000au, 0x00007141u, 0x00002419u, 0x0000241bu, 0x0000241du, 0x0000241fu, 0x00002421u, 0x00002423u, 0x00002425u, 0x00002427u, 0x0003003eu, 0x00007142u, 0x00002419u, 0x0003003eu, 0x00007143u, 0x0000241bu, 0x0003003eu, 0x00007144u, 0x0000241du, 0x0003003eu, 0x00007145u, 0x0000241fu, 0x0003003eu, 0x00007146u, 0x00002421u, 0x0003003eu, 0x00007147u, 0x00002423u, 0x0003003eu, 0x00007148u, 0x00002425u, 0x0003003eu, 0x00007149u, 0x00002427u, 0x0003003eu, 0x000071c4u, 0x0000241bu, 0x0003003eu, 0x000071c5u, 0x0000241fu, 0x0003003eu, 0x000071c6u, 0x00002423u, 0x0003003eu, 0x000071c7u, 0x00002427u, 0x00070041u, 0x00001bfeu, 0x000021acu, 0x00000a12u, 0x00000220u, 0x00001f93u, 0x00000220u, 0x0004003du, 0x00000010u, 0x000021adu, 0x000021acu, 0x00040071u, 0x000004f7u, 0x000021aeu, 0x000021adu, 0x0003003eu, 0x000020afu, 0x000021aeu, 0x00050041u, 0x00000007u, 0x000021afu, 0x000020afu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000021b0u, 0x000021afu, 0x0003003eu, 0x000020b0u, 0x000021b0u, 0x00050041u, 0x00000007u, 0x000021b1u, 0x000020afu, 0x00000386u, 0x0004003du, 0x00000006u, 0x000021b2u, 0x000021b1u, 0x0003003eu, 0x000020b1u, 0x000021b2u, 0x0003003eu, 0x000020b3u, 0x000021b0u, 0x00060041u, 0x0000027au, 0x0000242du, 0x00000278u, 0x00000220u, 0x000021b0u, 0x0004003du, 0x00000274u, 0x0000242eu, 0x0000242du, 0x00050051u, 0x00000010u, 0x0000242fu, 0x0000242eu, 0x00000000u, 0x0003003eu, 0x00007107u, 0x0000242fu, 0x00050051u, 0x00000010u, 0x00002431u, 0x0000242eu, 0x00000001u, 0x0003003eu, 0x00007108u, 0x00002431u, 0x00050051u, 0x00000010u, 0x00002433u, 0x0000242eu, 0x00000002u, 0x0003003eu, 0x00007109u, 0x00002433u, 0x00050051u, 0x00000010u, 0x00002435u, 0x0000242eu, 0x00000003u, 0x0003003eu, 0x0000710au, 0x00002435u, 0x00050051u, 0x00000006u, 0x00002437u, 0x0000242eu, 0x00000004u, 0x0003003eu, 0x0000710bu, 0x00002437u, 0x00050051u, 0x00000008u, 0x00002439u, 0x0000242eu, 0x00000005u, 0x0003003eu, 0x0000710cu, 0x00002439u, 0x00050051u, 0x00000008u, 0x0000243bu, 0x0000242eu, 0x00000006u, 0x0003003eu, 0x0000710du, 0x0000243bu, 0x00050051u, 0x00000008u, 0x0000243du, 0x0000242eu, 0x00000007u, 0x0003003eu, 0x0000710eu, 0x0000243du, 0x000b0050u, 0x00000019u, 0x00007117u, 0x0000242fu, 0x00002431u, 0x00002433u, 0x00002435u, 0x00002437u, 0x00002439u, 0x0000243bu, 0x0000243du, 0x0003003eu, 0x00007118u, 0x0000242fu, 0x0003003eu, 0x00007119u, 0x00002431u, 0x0003003eu, 0x0000711au, 0x00002433u, 0x0003003eu, 0x0000711bu, 0x00002435u, 0x0003003eu, 0x0000711cu, 0x00002437u, 0x0003003eu, 0x0000711du, 0x00002439u, 0x0003003eu, 0x0000711eu, 0x0000243bu, 0x0003003eu, 0x0000711fu, 0x0000243du, 0x0003003eu, 0x000071ccu, 0x0000242fu, 0x0003003eu, 0x000071cdu, 0x00002431u, 0x0003003eu, 0x000071ceu, 0x00002433u, 0x0003003eu, 0x000071cfu, 0x00002435u, 0x0003003eu, 0x000071d0u, 0x00002437u, 0x0003003eu, 0x000071d1u, 0x00002439u, 0x0003003eu, 0x000020b4u, 0x00002437u, 0x0003003eu, 0x000020b5u, 0x00002439u, 0x0003003eu, 0x000020b6u, 0x0000242fu, 0x0003003eu, 0x000020b7u, 0x00002431u, 0x0003003eu, 0x000020b8u, 0x00002433u, 0x0003003eu, 0x000020b9u, 0x00002435u, 0x000500c7u, 0x00000006u, 0x000021c2u, 0x00002437u, 0x00000330u, 0x000500abu, 0x00000069u, 0x000021c3u, 0x000021c2u, 0x0000032du, 0x0003003eu, 0x000020bau, 0x000021c3u, 0x000500c7u, 0x00000006u, 0x000021c5u, 0x00002437u, 0x00000a36u, 0x000500abu, 0x00000069u, 0x000021c6u, 0x000021c5u, 0x0000032du, 0x0003003eu, 0x000020bbu, 0x000021c6u, 0x000500c7u, 0x00000006u, 0x000021c8u, 0x00002437u, 0x00001c28u, 0x000500abu, 0x00000069u, 0x000021c9u, 0x000021c8u, 0x0000032du, 0x0003003eu, 0x000020bcu, 0x000021c9u, 0x000500c7u, 0x00000006u, 0x000021cbu, 0x00002437u, 0x00000a3cu, 0x000500abu, 0x00000069u, 0x000021ccu, 0x000021cbu, 0x0000032du, 0x0003003eu, 0x000020bdu, 0x000021ccu, 0x000500c7u, 0x00000006u, 0x000021ceu, 0x00002437u, 0x00000a42u, 0x000500abu, 0x00000069u, 0x000021cfu, 0x000021ceu, 0x0000032du, 0x0003003eu, 0x000020beu, 0x000021cfu, 0x000500c7u, 0x00000006u, 0x000021d1u, 0x00002437u, 0x00000314u, 0x000500abu, 0x00000069u, 0x000021d2u, 0x000021d1u, 0x0000032du, 0x0003003eu, 0x000020bfu, 0x000021d2u, 0x000500c7u, 0x00000006u, 0x000021d4u, 0x00002437u, 0x00001c39u, 0x000500abu, 0x00000069u, 0x000021d5u, 0x000021d4u, 0x0000032du, 0x0003003eu, 0x000020c0u, 0x000021d5u, 0x000500c7u, 0x00000006u, 0x000021d7u, 0x00002437u, 0x00000f4eu, 0x000500abu, 0x00000069u, 0x000021d8u, 0x000021d7u, 0x0000032du, 0x0003003eu, 0x000020c1u, 0x000021d8u, 0x000500c7u, 0x00000006u, 0x000021dau, 0x00002437u, 0x00000f46u, 0x000500abu, 0x00000069u, 0x000021dbu, 0x000021dau, 0x0000032du, 0x0003003eu, 0x000020c2u, 0x000021dbu, 0x000500c7u, 0x00000006u, 0x000021ddu, 0x00002437u, 0x00000704u, 0x000500abu, 0x00000069u, 0x000021deu, 0x000021ddu, 0x0000032du, 0x0003003eu, 0x000020c3u, 0x000021deu, 0x000500c7u, 0x00000006u, 0x000021e0u, 0x00002437u, 0x00000a48u, 0x000500abu, 0x00000069u, 0x000021e1u, 0x000021e0u, 0x0000032du, 0x0003003eu, 0x000020c4u, 0x000021e1u, 0x000500c7u, 0x00000006u, 0x000021e3u, 0x00002437u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x000021e4u, 0x000021e3u, 0x0000032du, 0x0003003eu, 0x000020c5u, 0x000021e4u, 0x000500c7u, 0x00000006u, 0x000021e6u, 0x00002437u, 0x00000e79u, 0x000500abu, 0x00000069u, 0x000021e7u, 0x000021e6u, 0x0000032du, 0x0003003eu, 0x000020c6u, 0x000021e7u, 0x000500c7u, 0x00000006u, 0x000021e9u, 0x00002437u, 0x00001c56u, 0x000500abu, 0x00000069u, 0x000021eau, 0x000021e9u, 0x0000032du, 0x0003003eu, 0x000020c7u, 0x000021eau, 0x000500c7u, 0x00000006u, 0x000021ecu, 0x00002437u, 0x00001c5bu, 0x000500abu, 0x00000069u, 0x000021edu, 0x000021ecu, 0x0000032du, 0x0003003eu, 0x000020c8u, 0x000021edu, 0x000500c7u, 0x00000006u, 0x000021efu, 0x00002437u, 0x00001c60u, 0x000500abu, 0x00000069u, 0x000021f0u, 0x000021efu, 0x0000032du, 0x0003003eu, 0x000020c9u, 0x000021f0u, 0x000500c7u, 0x00000006u, 0x000021f2u, 0x00002437u, 0x00001c65u, 0x000500abu, 0x00000069u, 0x000021f3u, 0x000021f2u, 0x0000032du, 0x0003003eu, 0x000020cau, 0x000021f3u, 0x000500c7u, 0x00000006u, 0x000021f5u, 0x00002437u, 0x00001c6au, 0x000500abu, 0x00000069u, 0x000021f6u, 0x000021f5u, 0x0000032du, 0x0003003eu, 0x000020cbu, 0x000021f6u, 0x000500c7u, 0x00000006u, 0x000021f8u, 0x00002437u, 0x00001c6fu, 0x000500abu, 0x00000069u, 0x000021f9u, 0x000021f8u, 0x0000032du, 0x0003003eu, 0x000020ccu, 0x000021f9u, 0x000500c7u, 0x00000006u, 0x000021fbu, 0x00002437u, 0x00001c74u, 0x000500abu, 0x00000069u, 0x000021fcu, 0x000021fbu, 0x0000032du, 0x0003003eu, 0x000020cdu, 0x000021fcu, 0x000500c7u, 0x00000006u, 0x000021feu, 0x00002437u, 0x00001c79u, 0x000500abu, 0x00000069u, 0x000021ffu, 0x000021feu, 0x0000032du, 0x0003003eu, 0x000020ceu, 0x000021ffu, 0x000500c7u, 0x00000006u, 0x00002201u, 0x00002437u, 0x00001c7eu, 0x000500abu, 0x00000069u, 0x00002202u, 0x00002201u, 0x0000032du, 0x0003003eu, 0x000020cfu, 0x00002202u, 0x000500c7u, 0x00000006u, 0x00002204u, 0x00002437u, 0x00001c83u, 0x000500abu, 0x00000069u, 0x00002205u, 0x00002204u, 0x0000032du, 0x0003003eu, 0x000020d0u, 0x00002205u, 0x000500c7u, 0x00000006u, 0x00002207u, 0x00002437u, 0x00001c88u, 0x000500abu, 0x00000069u, 0x00002208u, 0x00002207u, 0x0000032du, 0x0003003eu, 0x000020d1u, 0x00002208u, 0x000500c7u, 0x00000006u, 0x0000220au, 0x00002437u, 0x00001c8cu, 0x000500abu, 0x00000069u, 0x0000220bu, 0x0000220au, 0x0000032du, 0x000300f7u, 0x0000220cu, 0x00000000u, 0x000400fau, 0x0000220bu, 0x0000220du, 0x0000220cu, 0x000200f8u, 0x0000220du, 0x0004007cu, 0x00000006u, 0x0000220fu, 0x00007efeu, 0x0004007cu, 0x00000006u, 0x00002211u, 0x00007ef7u, 0x00060041u, 0x00001c96u, 0x00002213u, 0x00000cc9u, 0x00000220u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00002214u, 0x00002213u, 0x00050080u, 0x00000006u, 0x00002215u, 0x00001f93u, 0x00002214u, 0x0003003eu, 0x000020d2u, 0x0000220fu, 0x0003003eu, 0x000020d3u, 0x00002211u, 0x0003003eu, 0x000020d4u, 0x00002215u, 0x00060050u, 0x0000030cu, 0x00002444u, 0x0000220fu, 0x00002211u, 0x00002215u, 0x0003003eu, 0x00002440u, 0x00002444u, 0x0004003du, 0x0000030cu, 0x00002445u, 0x00002440u, 0x000500c2u, 0x0000030cu, 0x00002447u, 0x00002445u, 0x0000f36fu, 0x0004003du, 0x0000030cu, 0x00002448u, 0x00002440u, 0x0008004fu, 0x0000030cu, 0x00002449u, 0x00002448u, 0x00002448u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x0000244au, 0x00002447u, 0x00002449u, 0x00050084u, 0x0000030cu, 0x0000244cu, 0x0000244au, 0x0000f370u, 0x0003003eu, 0x00002440u, 0x0000244cu, 0x0004003du, 0x0000030cu, 0x0000244du, 0x00002440u, 0x000500c2u, 0x0000030cu, 0x0000244fu, 0x0000244du, 0x0000f36fu, 0x0004003du, 0x0000030cu, 0x00002450u, 0x00002440u, 0x0008004fu, 0x0000030cu, 0x00002451u, 0x00002450u, 0x00002450u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00002452u, 0x0000244fu, 0x00002451u, 0x00050084u, 0x0000030cu, 0x00002454u, 0x00002452u, 0x0000f370u, 0x0003003eu, 0x00002440u, 0x00002454u, 0x0004003du, 0x0000030cu, 0x00002455u, 0x00002440u, 0x000500c2u, 0x0000030cu, 0x00002457u, 0x00002455u, 0x0000f36fu, 0x0004003du, 0x0000030cu, 0x00002458u, 0x00002440u, 0x0008004fu, 0x0000030cu, 0x00002459u, 0x00002458u, 0x00002458u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x0000245au, 0x00002457u, 0x00002459u, 0x00050084u, 0x0000030cu, 0x0000245cu, 0x0000245au, 0x0000f370u, 0x0003003eu, 0x00002440u, 0x0000245cu, 0x00050041u, 0x00000007u, 0x0000245du, 0x00002440u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000245eu, 0x0000245du, 0x000500c2u, 0x00000006u, 0x0000245fu, 0x0000245eu, 0x00000330u, 0x00040071u, 0x00000011u, 0x00002460u, 0x0000245fu, 0x0003003eu, 0x00000219u, 0x00002460u, 0x000200f9u, 0x0000220cu, 0x000200f8u, 0x0000220cu, 0x000500c7u, 0x00000006u, 0x00002218u, 0x00002189u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00002219u, 0x00002218u, 0x0000032du, 0x0003003eu, 0x000020d5u, 0x00002219u, 0x000300f7u, 0x0000221bu, 0x00000000u, 0x000400fau, 0x000021eau, 0x0000221cu, 0x0000221du, 0x000200f8u, 0x0000221du, 0x000300f7u, 0x00002259u, 0x00000000u, 0x000400fau, 0x000021e7u, 0x0000225au, 0x00002259u, 0x000200f8u, 0x0000225au, 0x0003003eu, 0x00007cdeu, 0x00000627u, 0x000500afu, 0x00000069u, 0x0000225fu, 0x00007efeu, 0x0000240bu, 0x000300f7u, 0x00002260u, 0x00000000u, 0x000400fau, 0x0000225fu, 0x00002261u, 0x00002260u, 0x000200f8u, 0x00002261u, 0x000500b3u, 0x00000069u, 0x00002265u, 0x00007efeu, 0x0000240du, 0x000200f9u, 0x00002260u, 0x000200f8u, 0x00002260u, 0x000700f5u, 0x00000069u, 0x00002266u, 0x0000225fu, 0x0000225au, 0x00002265u, 0x00002261u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00002266u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x00002259u, 0x000200f9u, 0x0000221bu, 0x000200f8u, 0x0000221cu, 0x000500afu, 0x00000069u, 0x00002221u, 0x00007efeu, 0x0000240bu, 0x000300f7u, 0x00002222u, 0x00000000u, 0x000400fau, 0x00002221u, 0x00002223u, 0x00002222u, 0x000200f8u, 0x00002223u, 0x000500b3u, 0x00000069u, 0x00002227u, 0x00007efeu, 0x0000240du, 0x000200f9u, 0x00002222u, 0x000200f8u, 0x00002222u, 0x000700f5u, 0x00000069u, 0x00002228u, 0x00002221u, 0x0000221cu, 0x00002227u, 0x00002223u, 0x0003003eu, 0x000020d6u, 0x00002228u, 0x000400a8u, 0x00000069u, 0x0000222au, 0x00002228u, 0x000300f7u, 0x0000222bu, 0x00000000u, 0x000400fau, 0x0000222au, 0x0000222cu, 0x0000222bu, 0x000200f8u, 0x0000222cu, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x0000222bu, 0x0003003eu, 0x000071d8u, 0x00002403u, 0x0003003eu, 0x000071dau, 0x0000240bu, 0x0003003eu, 0x000071dbu, 0x0000240du, 0x0003003eu, 0x000020dau, 0x00002423u, 0x0003003eu, 0x000020dbu, 0x00007efeu, 0x0003003eu, 0x000020dcu, 0x000021d2u, 0x0003003eu, 0x000020ddu, 0x00002219u, 0x000300f7u, 0x0000246bu, 0x00000000u, 0x000400fau, 0x00002219u, 0x0000246cu, 0x0000246du, 0x000200f8u, 0x0000246du, 0x00050082u, 0x00000008u, 0x00002475u, 0x0000240du, 0x00007efeu, 0x0003003eu, 0x00002462u, 0x00002475u, 0x000200f9u, 0x0000246bu, 0x000200f8u, 0x0000246cu, 0x00050082u, 0x00000008u, 0x00002471u, 0x00007efeu, 0x0000240bu, 0x0003003eu, 0x00002462u, 0x00002471u, 0x000200f9u, 0x0000246bu, 0x000200f8u, 0x0000246bu, 0x000700f5u, 0x00000008u, 0x0000bd62u, 0x00002471u, 0x0000246cu, 0x00002475u, 0x0000246du, 0x0003003eu, 0x00002461u, 0x0000bd62u, 0x000500c3u, 0x00000008u, 0x00002478u, 0x0000bd62u, 0x0000078bu, 0x0003003eu, 0x00002461u, 0x00002478u, 0x00060041u, 0x00000ccau, 0x0000247au, 0x00000cc9u, 0x00000220u, 0x0000022au, 0x0004003du, 0x00000008u, 0x0000247bu, 0x0000247au, 0x000500c7u, 0x00000008u, 0x0000247cu, 0x00002478u, 0x0000247bu, 0x0003003eu, 0x00002463u, 0x0000247cu, 0x00050082u, 0x00000008u, 0x0000247fu, 0x00002478u, 0x0000247cu, 0x0003003eu, 0x000020dfu, 0x0000247fu, 0x00060041u, 0x00000ccau, 0x00002481u, 0x00000cc9u, 0x00000220u, 0x00000220u, 0x0004003du, 0x00000008u, 0x00002482u, 0x00002481u, 0x000500c3u, 0x00000008u, 0x00002483u, 0x00002478u, 0x00002482u, 0x000600a9u, 0x00000008u, 0x00002485u, 0x00002219u, 0x0000022au, 0x00000cd7u, 0x00050084u, 0x00000008u, 0x00002486u, 0x00002483u, 0x00002485u, 0x0003003eu, 0x00002464u, 0x00002486u, 0x0008004fu, 0x00000044u, 0x00002489u, 0x00002403u, 0x00002403u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x00000044u, 0x0000248bu, 0x00002423u, 0x00002423u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x0000248du, 0x0000248bu, 0x0000f371u, 0x00060050u, 0x00000044u, 0x0000248fu, 0x00002486u, 0x00002486u, 0x00002486u, 0x00050084u, 0x00000044u, 0x00002490u, 0x0000248du, 0x0000248fu, 0x00050080u, 0x00000044u, 0x00002491u, 0x00002489u, 0x00002490u, 0x0003003eu, 0x00002465u, 0x00002491u, 0x000300f7u, 0x00002493u, 0x00000000u, 0x000400fau, 0x000021d2u, 0x00002494u, 0x00002495u, 0x000200f8u, 0x00002495u, 0x000500c3u, 0x00000044u, 0x0000249eu, 0x00002491u, 0x0000f372u, 0x0003003eu, 0x00002469u, 0x0000249eu, 0x0007004fu, 0x000000efu, 0x00002526u, 0x0000249eu, 0x0000249eu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002524u, 0x00002526u, 0x0003003eu, 0x000020deu, 0x00002526u, 0x000200f9u, 0x00002493u, 0x000200f8u, 0x00002494u, 0x000500c3u, 0x00000044u, 0x00002498u, 0x00002491u, 0x0000f372u, 0x0003003eu, 0x00002467u, 0x00002498u, 0x0003003eu, 0x00002468u, 0x0000bd6cu, 0x00050041u, 0x00000046u, 0x000024aau, 0x00002467u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000024abu, 0x000024aau, 0x0003003eu, 0x000024a0u, 0x000024abu, 0x000500b3u, 0x00000069u, 0x000024adu, 0x000024abu, 0x00000220u, 0x0003003eu, 0x000024a1u, 0x000024adu, 0x000500c7u, 0x00000008u, 0x000024afu, 0x000024abu, 0x00000c0du, 0x0003003eu, 0x000024a0u, 0x000024afu, 0x0003003eu, 0x000024a3u, 0x000024afu, 0x0006000cu, 0x00000008u, 0x0000250bu, 0x00000001u, 0x0000004au, 0x000024afu, 0x00050082u, 0x00000008u, 0x0000250cu, 0x0000026fu, 0x0000250bu, 0x0007000cu, 0x00000008u, 0x0000250du, 0x00000001u, 0x00000027u, 0x0000250cu, 0x0000026fu, 0x0003003eu, 0x00002503u, 0x0000250du, 0x000500c4u, 0x00000008u, 0x00002510u, 0x000024afu, 0x0000250du, 0x000500c7u, 0x00000008u, 0x00002511u, 0x00002510u, 0x00000b29u, 0x0003003eu, 0x00002504u, 0x00002511u, 0x000500c7u, 0x00000008u, 0x00002513u, 0x00002511u, 0x0000035eu, 0x0003003eu, 0x00002505u, 0x00002513u, 0x000500c3u, 0x00000008u, 0x00002515u, 0x00002511u, 0x0000025du, 0x0003003eu, 0x00002507u, 0x00000bedu, 0x00050041u, 0x000001afu, 0x00002516u, 0x00002507u, 0x00002515u, 0x0004003du, 0x000001aeu, 0x00002517u, 0x00002516u, 0x00040072u, 0x000000efu, 0x00002518u, 0x00002517u, 0x0003003eu, 0x00002506u, 0x00002518u, 0x00050041u, 0x00000046u, 0x00002519u, 0x00002506u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000251au, 0x00002519u, 0x00050084u, 0x00000008u, 0x0000251cu, 0x0000251au, 0x00002513u, 0x000500c3u, 0x00000008u, 0x0000251du, 0x0000251cu, 0x00000263u, 0x00050041u, 0x00000046u, 0x0000251eu, 0x00002506u, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000251fu, 0x0000251eu, 0x00050080u, 0x00000008u, 0x00002520u, 0x0000251du, 0x0000251fu, 0x0003003eu, 0x00002508u, 0x00002520u, 0x00050050u, 0x000000efu, 0x00002523u, 0x00002520u, 0x0000250du, 0x0003003eu, 0x00002509u, 0x00002523u, 0x0003003eu, 0x000024a2u, 0x00002523u, 0x00050041u, 0x00000046u, 0x000024b2u, 0x000024a2u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000024b3u, 0x000024b2u, 0x0003003eu, 0x000024a4u, 0x000024b3u, 0x0004003du, 0x00000044u, 0x000024b4u, 0x00002467u, 0x0007004fu, 0x000000efu, 0x000024b5u, 0x000024b4u, 0x000024b4u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x000024b6u, 0x000024a2u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000024b7u, 0x000024b6u, 0x00050050u, 0x000000efu, 0x000024b8u, 0x000024b7u, 0x000024b7u, 0x00050084u, 0x000000efu, 0x000024b9u, 0x000024b5u, 0x000024b8u, 0x0003003eu, 0x000024a5u, 0x000024b9u, 0x000500c3u, 0x00000008u, 0x000024bbu, 0x00000c20u, 0x000024b3u, 0x0004007eu, 0x00000008u, 0x000024bcu, 0x000024bbu, 0x000500c7u, 0x00000008u, 0x000024bdu, 0x00000c1fu, 0x000024bcu, 0x0003003eu, 0x000024a6u, 0x000024bdu, 0x0004003du, 0x000000efu, 0x000024beu, 0x000024a5u, 0x00050050u, 0x000000efu, 0x000024c0u, 0x000024bdu, 0x000024bdu, 0x000500c7u, 0x000000efu, 0x000024c1u, 0x000024beu, 0x000024c0u, 0x0003003eu, 0x000024a7u, 0x000024c1u, 0x000500abu, 0x00000069u, 0x000024c3u, 0x000024b3u, 0x0000026fu, 0x000300f7u, 0x000024c4u, 0x00000000u, 0x000400fau, 0x000024c3u, 0x000024c5u, 0x000024c6u, 0x000200f8u, 0x000024c6u, 0x0004003du, 0x000000efu, 0x000024ccu, 0x000024a5u, 0x000500c4u, 0x000000efu, 0x000024ceu, 0x000024ccu, 0x0000f376u, 0x0003003eu, 0x000024a8u, 0x000024ceu, 0x000200f9u, 0x000024c4u, 0x000200f8u, 0x000024c5u, 0x0004003du, 0x000000efu, 0x000024c7u, 0x000024a5u, 0x00050082u, 0x00000008u, 0x000024c9u, 0x0000026cu, 0x000024b3u, 0x00050050u, 0x000000efu, 0x000024cau, 0x000024c9u, 0x000024c9u, 0x000500c3u, 0x000000efu, 0x000024cbu, 0x000024c7u, 0x000024cau, 0x0003003eu, 0x000024a5u, 0x000024cbu, 0x0003003eu, 0x000024a8u, 0x000024cbu, 0x000200f9u, 0x000024c4u, 0x000200f8u, 0x000024c4u, 0x0004003du, 0x000000efu, 0x000024cfu, 0x000024a7u, 0x000500abu, 0x0000087bu, 0x000024d0u, 0x000024cfu, 0x00000c39u, 0x0004009au, 0x00000069u, 0x000024d1u, 0x000024d0u, 0x000300f7u, 0x000024d2u, 0x00000000u, 0x000400fau, 0x000024d1u, 0x000024d3u, 0x000024d2u, 0x000200f8u, 0x000024d3u, 0x00050041u, 0x00000046u, 0x000024d4u, 0x000024a7u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000024d5u, 0x000024d4u, 0x000500abu, 0x00000069u, 0x000024d7u, 0x000024d5u, 0x000024bdu, 0x000300f7u, 0x000024d8u, 0x00000000u, 0x000400fau, 0x000024d7u, 0x000024d9u, 0x000024d8u, 0x000200f8u, 0x000024d9u, 0x0004003du, 0x00000008u, 0x000024dbu, 0x000024d4u, 0x000500abu, 0x00000069u, 0x000024dcu, 0x000024dbu, 0x00000220u, 0x000200f9u, 0x000024d8u, 0x000200f8u, 0x000024d8u, 0x000700f5u, 0x00000069u, 0x000024ddu, 0x000024d7u, 0x000024d3u, 0x000024dcu, 0x000024d9u, 0x000300f7u, 0x000024deu, 0x00000000u, 0x000400fau, 0x000024ddu, 0x000024dfu, 0x000024deu, 0x000200f8u, 0x000024dfu, 0x00050041u, 0x00000046u, 0x000024e0u, 0x000024a5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000024e1u, 0x000024e0u, 0x000500c7u, 0x00000008u, 0x000024e2u, 0x000024e1u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x000024e3u, 0x000024e2u, 0x00000220u, 0x000300f7u, 0x000024e4u, 0x00000000u, 0x000400fau, 0x000024e3u, 0x000024e5u, 0x000024e6u, 0x000200f8u, 0x000024e6u, 0x00050041u, 0x00000046u, 0x000024e8u, 0x000024a8u, 0x0000032du, 0x0003003eu, 0x000024e8u, 0x00000c52u, 0x000200f9u, 0x000024e4u, 0x000200f8u, 0x000024e5u, 0x00050041u, 0x00000046u, 0x000024e7u, 0x000024a8u, 0x0000032du, 0x0003003eu, 0x000024e7u, 0x00000c0du, 0x000200f9u, 0x000024e4u, 0x000200f8u, 0x000024e4u, 0x0003003eu, 0x00002468u, 0x00000559u, 0x000200f9u, 0x000024deu, 0x000200f8u, 0x000024deu, 0x000600a9u, 0x00000069u, 0x0000f390u, 0x000024ddu, 0x00000559u, 0x0000bd6cu, 0x00050041u, 0x00000046u, 0x000024e9u, 0x000024a7u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000024eau, 0x000024e9u, 0x000500abu, 0x00000069u, 0x000024ecu, 0x000024eau, 0x000024bdu, 0x000300f7u, 0x000024edu, 0x00000000u, 0x000400fau, 0x000024ecu, 0x000024eeu, 0x000024edu, 0x000200f8u, 0x000024eeu, 0x0004003du, 0x00000008u, 0x000024f0u, 0x000024e9u, 0x000500abu, 0x00000069u, 0x000024f1u, 0x000024f0u, 0x00000220u, 0x000200f9u, 0x000024edu, 0x000200f8u, 0x000024edu, 0x000700f5u, 0x00000069u, 0x000024f2u, 0x000024ecu, 0x000024deu, 0x000024f1u, 0x000024eeu, 0x000300f7u, 0x000024f3u, 0x00000000u, 0x000400fau, 0x000024f2u, 0x000024f4u, 0x000024f3u, 0x000200f8u, 0x000024f4u, 0x00050041u, 0x00000046u, 0x000024f5u, 0x000024a5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000024f6u, 0x000024f5u, 0x000500c7u, 0x00000008u, 0x000024f7u, 0x000024f6u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x000024f8u, 0x000024f7u, 0x00000220u, 0x000300f7u, 0x000024f9u, 0x00000000u, 0x000400fau, 0x000024f8u, 0x000024fau, 0x000024fbu, 0x000200f8u, 0x000024fbu, 0x00050041u, 0x00000046u, 0x000024fdu, 0x000024a8u, 0x0000045cu, 0x0003003eu, 0x000024fdu, 0x00000c52u, 0x000200f9u, 0x000024f9u, 0x000200f8u, 0x000024fau, 0x00050041u, 0x00000046u, 0x000024fcu, 0x000024a8u, 0x0000045cu, 0x0003003eu, 0x000024fcu, 0x00000c0du, 0x000200f9u, 0x000024f9u, 0x000200f8u, 0x000024f9u, 0x0003003eu, 0x00002468u, 0x00000559u, 0x000200f9u, 0x000024f3u, 0x000200f8u, 0x000024f3u, 0x000600a9u, 0x00000069u, 0x0000f391u, 0x000024f2u, 0x00000559u, 0x0000f390u, 0x000200f9u, 0x000024d2u, 0x000200f8u, 0x000024d2u, 0x000700f5u, 0x00000069u, 0x0000bd7fu, 0x0000bd6cu, 0x000024c4u, 0x0000f391u, 0x000024f3u, 0x000300f7u, 0x000024ffu, 0x00000000u, 0x000400fau, 0x000024adu, 0x00002500u, 0x000024ffu, 0x000200f8u, 0x00002500u, 0x0003003eu, 0x000024a8u, 0x00000c6cu, 0x0003003eu, 0x00002468u, 0x00000559u, 0x000200f9u, 0x000024ffu, 0x000200f8u, 0x000024ffu, 0x000600a9u, 0x00000069u, 0x0000f392u, 0x000024adu, 0x00000559u, 0x0000bd7fu, 0x0004003du, 0x000000efu, 0x00002501u, 0x000024a8u, 0x0008000cu, 0x000000efu, 0x00002502u, 0x00000001u, 0x0000002du, 0x00002501u, 0x00000c6fu, 0x00000c70u, 0x0003003eu, 0x000024a9u, 0x00002502u, 0x0003003eu, 0x00002466u, 0x0000f392u, 0x0003003eu, 0x000020deu, 0x00002502u, 0x000200f9u, 0x00002493u, 0x000200f8u, 0x00002493u, 0x000700f5u, 0x00000069u, 0x0000eb2bu, 0x0000f392u, 0x000024ffu, 0x0000bd6cu, 0x00002495u, 0x000700f5u, 0x000000efu, 0x0000bd85u, 0x00002502u, 0x000024ffu, 0x00002526u, 0x00002495u, 0x0003003eu, 0x000020d7u, 0x0000bd85u, 0x0003003eu, 0x000020d8u, 0x0000247fu, 0x000500c7u, 0x00000006u, 0x00002237u, 0x000021a8u, 0x00000742u, 0x0003003eu, 0x000020e0u, 0x00002237u, 0x00080041u, 0x00000671u, 0x0000223au, 0x00000a12u, 0x00000220u, 0x00001f93u, 0x0000022du, 0x00002237u, 0x0004003du, 0x0000000fu, 0x0000223bu, 0x0000223au, 0x00040071u, 0x00000006u, 0x0000223cu, 0x0000223bu, 0x0003003eu, 0x000020e1u, 0x0000223cu, 0x0003003eu, 0x000020e3u, 0x0000223cu, 0x00060041u, 0x000002b4u, 0x0000252au, 0x000002b2u, 0x00000220u, 0x0000223cu, 0x0004003du, 0x000002aeu, 0x0000252bu, 0x0000252au, 0x00050051u, 0x00000006u, 0x0000252cu, 0x0000252bu, 0x00000000u, 0x0003003eu, 0x000070bfu, 0x0000252cu, 0x00050051u, 0x00000006u, 0x0000252eu, 0x0000252bu, 0x00000001u, 0x0003003eu, 0x000070c0u, 0x0000252eu, 0x00050051u, 0x00000006u, 0x00002530u, 0x0000252bu, 0x00000002u, 0x0003003eu, 0x000070c1u, 0x00002530u, 0x00050051u, 0x00000006u, 0x00002532u, 0x0000252bu, 0x00000003u, 0x0003003eu, 0x000070c2u, 0x00002532u, 0x00050051u, 0x00000006u, 0x00002534u, 0x0000252bu, 0x00000004u, 0x0003003eu, 0x000070c3u, 0x00002534u, 0x00050051u, 0x00000006u, 0x00002536u, 0x0000252bu, 0x00000005u, 0x0003003eu, 0x000070c4u, 0x00002536u, 0x00050051u, 0x0000000fu, 0x00002538u, 0x0000252bu, 0x00000006u, 0x0003003eu, 0x000070c5u, 0x00002538u, 0x00050051u, 0x0000000fu, 0x0000253au, 0x0000252bu, 0x00000007u, 0x0003003eu, 0x000070c6u, 0x0000253au, 0x00050051u, 0x0000000fu, 0x0000253cu, 0x0000252bu, 0x00000008u, 0x0003003eu, 0x000070c7u, 0x0000253cu, 0x00050051u, 0x0000000fu, 0x0000253eu, 0x0000252bu, 0x00000009u, 0x0003003eu, 0x000070c8u, 0x0000253eu, 0x00050051u, 0x0000000fu, 0x00002540u, 0x0000252bu, 0x0000000au, 0x0003003eu, 0x000070c9u, 0x00002540u, 0x00050051u, 0x0000000fu, 0x00002542u, 0x0000252bu, 0x0000000bu, 0x0003003eu, 0x000070cau, 0x00002542u, 0x00050051u, 0x0000000fu, 0x00002544u, 0x0000252bu, 0x0000000cu, 0x0003003eu, 0x000070cbu, 0x00002544u, 0x00050051u, 0x0000000fu, 0x00002546u, 0x0000252bu, 0x0000000du, 0x0003003eu, 0x000070ccu, 0x00002546u, 0x00110050u, 0x00000023u, 0x000070dbu, 0x0000252cu, 0x0000252eu, 0x00002530u, 0x00002532u, 0x00002534u, 0x00002536u, 0x00002538u, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00002540u, 0x00002542u, 0x00002544u, 0x00002546u, 0x0003003eu, 0x000070dcu, 0x0000252cu, 0x0003003eu, 0x000070ddu, 0x0000252eu, 0x0003003eu, 0x000070deu, 0x00002530u, 0x0003003eu, 0x000070dfu, 0x00002532u, 0x0003003eu, 0x000070e0u, 0x00002534u, 0x0003003eu, 0x000070e1u, 0x00002536u, 0x0003003eu, 0x000070e2u, 0x00002538u, 0x0003003eu, 0x000070e3u, 0x0000253au, 0x0003003eu, 0x000070e4u, 0x0000253cu, 0x0003003eu, 0x000070e5u, 0x0000253eu, 0x0003003eu, 0x000070e6u, 0x00002540u, 0x0003003eu, 0x000070e7u, 0x00002542u, 0x0003003eu, 0x000070e8u, 0x00002544u, 0x0003003eu, 0x000070e9u, 0x00002546u, 0x0003003eu, 0x000071e0u, 0x0000252cu, 0x0003003eu, 0x000071e1u, 0x0000252eu, 0x0003003eu, 0x000071e2u, 0x00002530u, 0x0003003eu, 0x000071e3u, 0x00002532u, 0x0003003eu, 0x000071e4u, 0x00002534u, 0x0003003eu, 0x000071e5u, 0x00002536u, 0x0003003eu, 0x000071e6u, 0x00002538u, 0x0003003eu, 0x000071e7u, 0x0000253au, 0x0003003eu, 0x000071e8u, 0x0000253cu, 0x0003003eu, 0x000071e9u, 0x0000253eu, 0x0003003eu, 0x000071eau, 0x00002540u, 0x0003003eu, 0x000071ebu, 0x00002542u, 0x0003003eu, 0x000071ecu, 0x00002544u, 0x0003003eu, 0x000071edu, 0x00002546u, 0x0003003eu, 0x0000720bu, 0x0000252cu, 0x0003003eu, 0x0000720cu, 0x00002530u, 0x0003003eu, 0x0000720du, 0x00002534u, 0x0003003eu, 0x0000720eu, 0x00002536u, 0x0003003eu, 0x0000720fu, 0x0000253au, 0x0003003eu, 0x00007210u, 0x0000253cu, 0x0003003eu, 0x00007211u, 0x0000253eu, 0x0003003eu, 0x00007212u, 0x00002540u, 0x0003003eu, 0x00007213u, 0x00002542u, 0x0003003eu, 0x00007214u, 0x00002544u, 0x0003003eu, 0x00007215u, 0x00002546u, 0x0003003eu, 0x000020e6u, 0x000021b2u, 0x0003003eu, 0x000020e7u, 0x0000bd85u, 0x0003003eu, 0x000020e8u, 0x0000247fu, 0x0003003eu, 0x000020e9u, 0x000021c3u, 0x0003003eu, 0x000020eau, 0x000021c6u, 0x0004007cu, 0x00000008u, 0x0000255fu, 0x0000252cu, 0x00040071u, 0x00000006u, 0x00002562u, 0x00002540u, 0x0004007cu, 0x00000008u, 0x00002563u, 0x00002562u, 0x00050041u, 0x00000046u, 0x00002564u, 0x000020e7u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002565u, 0x00002564u, 0x0003003eu, 0x00002549u, 0x00002565u, 0x0003003eu, 0x0000254au, 0x0000255fu, 0x0003003eu, 0x0000254bu, 0x00002563u, 0x0008000cu, 0x00000008u, 0x0000259cu, 0x00000001u, 0x0000002du, 0x00002565u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x00002549u, 0x0000259cu, 0x000500b1u, 0x00000069u, 0x0000259eu, 0x00002563u, 0x00000266u, 0x000300f7u, 0x0000259fu, 0x00000000u, 0x000400fau, 0x0000259eu, 0x000025a0u, 0x000025a1u, 0x000200f8u, 0x000025a1u, 0x00050082u, 0x00000008u, 0x000025a6u, 0x0000114fu, 0x00002563u, 0x000500c4u, 0x00000008u, 0x000025a8u, 0x0000259cu, 0x000025a6u, 0x0003003eu, 0x00002549u, 0x000025a8u, 0x000500c3u, 0x00000008u, 0x000025aau, 0x000025a8u, 0x00000554u, 0x0003003eu, 0x00002549u, 0x000025aau, 0x000200f9u, 0x0000259fu, 0x000200f8u, 0x000025a0u, 0x000500c3u, 0x00000008u, 0x000025a4u, 0x0000259cu, 0x00002563u, 0x0003003eu, 0x00002549u, 0x000025a4u, 0x000200f9u, 0x0000259fu, 0x000200f8u, 0x0000259fu, 0x000700f5u, 0x00000008u, 0x0000bdcdu, 0x000025a4u, 0x000025a0u, 0x000025aau, 0x000025a1u, 0x000500c4u, 0x00000008u, 0x000025acu, 0x0000255fu, 0x00000230u, 0x00050082u, 0x00000008u, 0x000025aeu, 0x0000bdcdu, 0x000025acu, 0x0003003eu, 0x00002549u, 0x000025aeu, 0x0003003eu, 0x0000259au, 0x000025aeu, 0x0003003eu, 0x00002564u, 0x000025aeu, 0x0004007cu, 0x00000008u, 0x0000256au, 0x00002530u, 0x00040071u, 0x00000006u, 0x0000256du, 0x00002544u, 0x0004007cu, 0x00000008u, 0x0000256eu, 0x0000256du, 0x00050041u, 0x00000046u, 0x0000256fu, 0x000020e7u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002570u, 0x0000256fu, 0x0003003eu, 0x0000254cu, 0x00002570u, 0x0003003eu, 0x0000254du, 0x0000256au, 0x0003003eu, 0x0000254eu, 0x0000256eu, 0x0008000cu, 0x00000008u, 0x000025b2u, 0x00000001u, 0x0000002du, 0x00002570u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x0000254cu, 0x000025b2u, 0x000500b1u, 0x00000069u, 0x000025b4u, 0x0000256eu, 0x00000266u, 0x000300f7u, 0x000025b5u, 0x00000000u, 0x000400fau, 0x000025b4u, 0x000025b6u, 0x000025b7u, 0x000200f8u, 0x000025b7u, 0x00050082u, 0x00000008u, 0x000025bcu, 0x0000114fu, 0x0000256eu, 0x000500c4u, 0x00000008u, 0x000025beu, 0x000025b2u, 0x000025bcu, 0x0003003eu, 0x0000254cu, 0x000025beu, 0x000500c3u, 0x00000008u, 0x000025c0u, 0x000025beu, 0x00000554u, 0x0003003eu, 0x0000254cu, 0x000025c0u, 0x000200f9u, 0x000025b5u, 0x000200f8u, 0x000025b6u, 0x000500c3u, 0x00000008u, 0x000025bau, 0x000025b2u, 0x0000256eu, 0x0003003eu, 0x0000254cu, 0x000025bau, 0x000200f9u, 0x000025b5u, 0x000200f8u, 0x000025b5u, 0x000700f5u, 0x00000008u, 0x0000bdd1u, 0x000025bau, 0x000025b6u, 0x000025c0u, 0x000025b7u, 0x000500c4u, 0x00000008u, 0x000025c2u, 0x0000256au, 0x00000230u, 0x00050082u, 0x00000008u, 0x000025c4u, 0x0000bdd1u, 0x000025c2u, 0x0003003eu, 0x0000254cu, 0x000025c4u, 0x0003003eu, 0x000025b0u, 0x000025c4u, 0x0003003eu, 0x0000256fu, 0x000025c4u, 0x0004003du, 0x000000efu, 0x00002573u, 0x000020e7u, 0x000500c3u, 0x000000efu, 0x00002575u, 0x00002573u, 0x0000f378u, 0x0003003eu, 0x000020e7u, 0x00002575u, 0x00060041u, 0x00000ccau, 0x00002576u, 0x00000cc9u, 0x00000220u, 0x0000022du, 0x0004003du, 0x00000008u, 0x00002577u, 0x00002576u, 0x000500aau, 0x00000069u, 0x00002578u, 0x00002577u, 0x00000220u, 0x000300f7u, 0x00002579u, 0x00000000u, 0x000400fau, 0x00002578u, 0x0000257au, 0x0000257bu, 0x000200f8u, 0x0000257bu, 0x000500aau, 0x00000069u, 0x0000257eu, 0x00002577u, 0x0000022au, 0x000300f7u, 0x0000257fu, 0x00000000u, 0x000400fau, 0x0000257eu, 0x00002580u, 0x00002581u, 0x000200f8u, 0x00002581u, 0x00110050u, 0x00000023u, 0x00007238u, 0x0000252cu, 0x00006bf7u, 0x00002530u, 0x00006bf7u, 0x00002534u, 0x00002536u, 0x00006bfau, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00002540u, 0x00002542u, 0x00002544u, 0x00002546u, 0x0003003eu, 0x00007091u, 0x00002534u, 0x0003003eu, 0x00007092u, 0x00002536u, 0x0003003eu, 0x00007093u, 0x0000253au, 0x0003003eu, 0x00007094u, 0x0000253cu, 0x0003003eu, 0x00007095u, 0x0000253eu, 0x0003003eu, 0x00007096u, 0x00002542u, 0x0003003eu, 0x00007097u, 0x00002546u, 0x0003003eu, 0x00002557u, 0x000021b2u, 0x0004003du, 0x000000efu, 0x00002594u, 0x000020e7u, 0x0003003eu, 0x00002558u, 0x00002594u, 0x0003003eu, 0x00002559u, 0x0000247fu, 0x0003003eu, 0x0000255au, 0x000021c3u, 0x0003003eu, 0x0000255bu, 0x000021c6u, 0x000500b1u, 0x00000069u, 0x0000278cu, 0x0000247fu, 0x0000022du, 0x0003003eu, 0x00002770u, 0x0000278cu, 0x000300f7u, 0x0000278eu, 0x00000000u, 0x000400fau, 0x0000278cu, 0x0000278fu, 0x0000278eu, 0x000200f8u, 0x0000278fu, 0x00040071u, 0x00000006u, 0x00002792u, 0x0000253au, 0x0004007cu, 0x00000008u, 0x00002793u, 0x00002792u, 0x000500abu, 0x00000069u, 0x00002794u, 0x00002793u, 0x0000022du, 0x000200f9u, 0x0000278eu, 0x000200f8u, 0x0000278eu, 0x000700f5u, 0x00000069u, 0x00002795u, 0x0000278cu, 0x00002581u, 0x00002794u, 0x0000278fu, 0x000400a8u, 0x00000069u, 0x00002797u, 0x000021c3u, 0x000500a7u, 0x00000069u, 0x00002798u, 0x00002795u, 0x00002797u, 0x0003003eu, 0x00002771u, 0x00002798u, 0x00040071u, 0x00000006u, 0x0000279bu, 0x0000253au, 0x0004007cu, 0x00000008u, 0x0000279cu, 0x0000279bu, 0x0007000cu, 0x00000008u, 0x0000279du, 0x00000001u, 0x00000027u, 0x0000279cu, 0x0000022du, 0x0003003eu, 0x00002772u, 0x0000279du, 0x000500aau, 0x00000069u, 0x000027a2u, 0x0000279cu, 0x00000230u, 0x0003003eu, 0x00002773u, 0x000027a2u, 0x000500a6u, 0x00000069u, 0x000027a5u, 0x000027a2u, 0x000021c3u, 0x000600a9u, 0x00000008u, 0x000027a6u, 0x000027a5u, 0x00001166u, 0x000003dau, 0x0003003eu, 0x00002774u, 0x000027a6u, 0x000300f7u, 0x000027a8u, 0x00000000u, 0x000400fau, 0x00002798u, 0x000027a9u, 0x000027aau, 0x000200f8u, 0x000027aau, 0x00050041u, 0x00000046u, 0x0000282eu, 0x00002558u, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000282fu, 0x0000282eu, 0x00050080u, 0x00000008u, 0x00002830u, 0x0000282fu, 0x0000247fu, 0x0003003eu, 0x0000282eu, 0x00002830u, 0x00110050u, 0x00000023u, 0x000070b6u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00002534u, 0x00002536u, 0x00006bfau, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00006bfau, 0x00002542u, 0x00006bfau, 0x00002546u, 0x0003003eu, 0x0000704bu, 0x0000253eu, 0x0003003eu, 0x0000704cu, 0x00002546u, 0x0004003du, 0x00000008u, 0x00002834u, 0x0000282eu, 0x0003003eu, 0x00002783u, 0x00002834u, 0x00040071u, 0x00000006u, 0x000028deu, 0x0000253eu, 0x0004007cu, 0x00000008u, 0x000028dfu, 0x000028deu, 0x000500abu, 0x00000069u, 0x000028e0u, 0x000028dfu, 0x00000220u, 0x000300f7u, 0x000028e1u, 0x00000000u, 0x000400fau, 0x000028e0u, 0x000028e2u, 0x000028e1u, 0x000200f8u, 0x000028e2u, 0x000500c4u, 0x00000008u, 0x000028e5u, 0x0000022au, 0x0000253eu, 0x0003003eu, 0x000028dau, 0x000028e5u, 0x00040071u, 0x00000006u, 0x000028e8u, 0x00002546u, 0x0004007cu, 0x00000008u, 0x000028e9u, 0x000028e8u, 0x000500c7u, 0x00000008u, 0x000028eau, 0x000028e9u, 0x0000022du, 0x000500abu, 0x00000069u, 0x000028ebu, 0x000028eau, 0x00000220u, 0x000300f7u, 0x000028ecu, 0x00000000u, 0x000400fau, 0x000028ebu, 0x000028edu, 0x000028ecu, 0x000200f8u, 0x000028edu, 0x000500c7u, 0x00000008u, 0x000028f0u, 0x00002834u, 0x000028e5u, 0x00050082u, 0x00000008u, 0x000028f1u, 0x000028f0u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x000028f2u, 0x00000001u, 0x0000002au, 0x000028f1u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x000028f4u, 0x00002834u, 0x000028f2u, 0x0003003eu, 0x00002783u, 0x000028f4u, 0x000200f9u, 0x000028ecu, 0x000200f8u, 0x000028ecu, 0x000700f5u, 0x00000008u, 0x0000bdf8u, 0x00002834u, 0x000028e2u, 0x000028f4u, 0x000028edu, 0x00050082u, 0x00000008u, 0x000028f6u, 0x000028e5u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x000028f8u, 0x0000bdf8u, 0x000028f6u, 0x0003003eu, 0x00002783u, 0x000028f8u, 0x000200f9u, 0x000028e1u, 0x000200f8u, 0x000028e1u, 0x000700f5u, 0x00000008u, 0x0000bdf9u, 0x00002834u, 0x000027aau, 0x000028f8u, 0x000028ecu, 0x0003003eu, 0x000028dbu, 0x0000bdf9u, 0x0003003eu, 0x00002781u, 0x0000bdf9u, 0x0003003eu, 0x0000704fu, 0x00002542u, 0x0003003eu, 0x00007050u, 0x00002546u, 0x00050041u, 0x00000046u, 0x00002837u, 0x00002558u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002838u, 0x00002837u, 0x0003003eu, 0x00002786u, 0x00002838u, 0x00040071u, 0x00000006u, 0x000028feu, 0x00002542u, 0x0004007cu, 0x00000008u, 0x000028ffu, 0x000028feu, 0x000500abu, 0x00000069u, 0x00002900u, 0x000028ffu, 0x00000220u, 0x000300f7u, 0x00002901u, 0x00000000u, 0x000400fau, 0x00002900u, 0x00002902u, 0x00002901u, 0x000200f8u, 0x00002902u, 0x000500c4u, 0x00000008u, 0x00002905u, 0x0000022au, 0x00002542u, 0x0003003eu, 0x000028fau, 0x00002905u, 0x00040071u, 0x00000006u, 0x00002908u, 0x00002546u, 0x0004007cu, 0x00000008u, 0x00002909u, 0x00002908u, 0x000500c7u, 0x00000008u, 0x0000290au, 0x00002909u, 0x0000025du, 0x000500abu, 0x00000069u, 0x0000290bu, 0x0000290au, 0x00000220u, 0x000300f7u, 0x0000290cu, 0x00000000u, 0x000400fau, 0x0000290bu, 0x0000290du, 0x0000290cu, 0x000200f8u, 0x0000290du, 0x000500c7u, 0x00000008u, 0x00002910u, 0x00002838u, 0x00002905u, 0x00050082u, 0x00000008u, 0x00002911u, 0x00002910u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002912u, 0x00000001u, 0x0000002au, 0x00002911u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00002914u, 0x00002838u, 0x00002912u, 0x0003003eu, 0x00002786u, 0x00002914u, 0x000200f9u, 0x0000290cu, 0x000200f8u, 0x0000290cu, 0x000700f5u, 0x00000008u, 0x0000be09u, 0x00002838u, 0x00002902u, 0x00002914u, 0x0000290du, 0x00050082u, 0x00000008u, 0x00002916u, 0x00002905u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00002918u, 0x0000be09u, 0x00002916u, 0x0003003eu, 0x00002786u, 0x00002918u, 0x000200f9u, 0x00002901u, 0x000200f8u, 0x00002901u, 0x000700f5u, 0x00000008u, 0x0000be0au, 0x00002838u, 0x000028e1u, 0x00002918u, 0x0000290cu, 0x0003003eu, 0x000028fbu, 0x0000be0au, 0x0003003eu, 0x00002784u, 0x0000be0au, 0x0004007cu, 0x00000006u, 0x0000283fu, 0x0000be0au, 0x00050084u, 0x00000006u, 0x00002840u, 0x00002536u, 0x0000283fu, 0x00050080u, 0x00000006u, 0x00002841u, 0x00002534u, 0x00002840u, 0x0003003eu, 0x00002787u, 0x00002841u, 0x00050084u, 0x00000006u, 0x00002843u, 0x00002841u, 0x00000386u, 0x000500c4u, 0x00000008u, 0x00002846u, 0x0000bdf9u, 0x0000279du, 0x0004007cu, 0x00000006u, 0x00002847u, 0x00002846u, 0x00050080u, 0x00000006u, 0x00002848u, 0x00002843u, 0x00002847u, 0x000500c7u, 0x00000006u, 0x00002849u, 0x00002848u, 0x000011d9u, 0x0003003eu, 0x00002788u, 0x00002849u, 0x000500c7u, 0x00000006u, 0x0000284cu, 0x0000283fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000284du, 0x0000284cu, 0x00000314u, 0x000500c6u, 0x00000006u, 0x0000284fu, 0x00002849u, 0x0000284du, 0x0003003eu, 0x00002788u, 0x0000284fu, 0x000500c2u, 0x00000006u, 0x00002851u, 0x0000284fu, 0x00000386u, 0x0003003eu, 0x00002789u, 0x00002851u, 0x0004007cu, 0x00000006u, 0x00002853u, 0x000027a6u, 0x000500c7u, 0x00000006u, 0x00002855u, 0x00002851u, 0x00002853u, 0x0003003eu, 0x00002789u, 0x00002855u, 0x000500c6u, 0x00000006u, 0x00002858u, 0x00002855u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00002859u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00002858u, 0x0004003du, 0x00000011u, 0x0000285au, 0x00002859u, 0x00040071u, 0x00000006u, 0x0000285bu, 0x0000285au, 0x0004007cu, 0x00000008u, 0x0000285cu, 0x0000285bu, 0x0003003eu, 0x00002780u, 0x0000285cu, 0x000300f7u, 0x0000285eu, 0x00000000u, 0x000400fau, 0x000021c3u, 0x0000285fu, 0x0000285eu, 0x000200f8u, 0x0000285fu, 0x000500aau, 0x00000069u, 0x00002864u, 0x0000279cu, 0x00000220u, 0x000300f7u, 0x00002865u, 0x00000000u, 0x000400fau, 0x00002864u, 0x00002866u, 0x00002867u, 0x000200f8u, 0x00002867u, 0x000500c7u, 0x00000006u, 0x0000287du, 0x0000284fu, 0x00000386u, 0x00050084u, 0x00000006u, 0x0000287eu, 0x00000704u, 0x0000287du, 0x00050082u, 0x00000006u, 0x0000287fu, 0x00000314u, 0x0000287eu, 0x000500c3u, 0x00000008u, 0x00002881u, 0x0000285cu, 0x0000287fu, 0x0003003eu, 0x00002780u, 0x00002881u, 0x000500c7u, 0x00000008u, 0x00002883u, 0x00002881u, 0x0000035eu, 0x0003003eu, 0x00002780u, 0x00002883u, 0x000500c4u, 0x00000008u, 0x00002885u, 0x00002883u, 0x0000022du, 0x0003003eu, 0x00002780u, 0x00002885u, 0x00050080u, 0x00000008u, 0x00002888u, 0x00002885u, 0x0000247fu, 0x0003003eu, 0x00002780u, 0x00002888u, 0x000200f9u, 0x00002865u, 0x000200f8u, 0x00002866u, 0x000500c7u, 0x00000006u, 0x00002869u, 0x0000284fu, 0x00000464u, 0x00050084u, 0x00000006u, 0x0000286au, 0x00000704u, 0x00002869u, 0x00050082u, 0x00000006u, 0x0000286bu, 0x00001285u, 0x0000286au, 0x000500c3u, 0x00000008u, 0x0000286du, 0x0000285cu, 0x0000286bu, 0x0003003eu, 0x00002780u, 0x0000286du, 0x000500c7u, 0x00000008u, 0x0000286fu, 0x0000286du, 0x00000533u, 0x0003003eu, 0x00002780u, 0x0000286fu, 0x000500c4u, 0x0000000fu, 0x00002872u, 0x0000253cu, 0x00000233u, 0x00040071u, 0x00000006u, 0x00002873u, 0x00002872u, 0x0004007cu, 0x00000008u, 0x00002874u, 0x00002873u, 0x000500c5u, 0x00000008u, 0x00002876u, 0x0000286fu, 0x00002874u, 0x0003003eu, 0x00002780u, 0x00002876u, 0x000500c4u, 0x00000008u, 0x00002878u, 0x00002876u, 0x0000022du, 0x0003003eu, 0x00002780u, 0x00002878u, 0x00050080u, 0x00000008u, 0x0000287bu, 0x00002878u, 0x0000247fu, 0x0003003eu, 0x00002780u, 0x0000287bu, 0x000200f9u, 0x00002865u, 0x000200f8u, 0x00002865u, 0x000700f5u, 0x00000008u, 0x0000be2bu, 0x0000287bu, 0x00002866u, 0x00002888u, 0x00002867u, 0x000500c5u, 0x00000008u, 0x0000288bu, 0x0000be2bu, 0x000012aau, 0x000500c6u, 0x00000008u, 0x0000288cu, 0x0000288bu, 0x0000022au, 0x00080041u, 0x00000692u, 0x0000288du, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000288cu, 0x0004003du, 0x00000011u, 0x0000288eu, 0x0000288du, 0x00040071u, 0x00000006u, 0x0000288fu, 0x0000288eu, 0x0004007cu, 0x00000008u, 0x00002890u, 0x0000288fu, 0x0003003eu, 0x00002780u, 0x00002890u, 0x000200f9u, 0x0000285eu, 0x000200f8u, 0x0000285eu, 0x000700f5u, 0x00000008u, 0x0000be59u, 0x0000285cu, 0x00002901u, 0x00002890u, 0x00002865u, 0x000200f9u, 0x000027a8u, 0x000200f8u, 0x000027a9u, 0x00050084u, 0x00000008u, 0x000027acu, 0x0000022du, 0x0000247fu, 0x00050041u, 0x00000046u, 0x000027adu, 0x00002558u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000027aeu, 0x000027adu, 0x00050080u, 0x00000008u, 0x000027afu, 0x000027aeu, 0x000027acu, 0x0003003eu, 0x000027adu, 0x000027afu, 0x00110050u, 0x00000023u, 0x000070a6u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00002534u, 0x00002536u, 0x00006bfau, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00006bfau, 0x00002542u, 0x00006bfau, 0x00002546u, 0x0003003eu, 0x00007043u, 0x0000253eu, 0x0003003eu, 0x00007044u, 0x00002546u, 0x0004003du, 0x00000008u, 0x000027b3u, 0x000027adu, 0x0003003eu, 0x00002777u, 0x000027b3u, 0x00050050u, 0x000000efu, 0x00002896u, 0x000027b3u, 0x000027b3u, 0x00050080u, 0x000000efu, 0x00002897u, 0x00002896u, 0x00000dd9u, 0x0003003eu, 0x00002892u, 0x00002897u, 0x00040071u, 0x00000006u, 0x0000289au, 0x0000253eu, 0x0004007cu, 0x00000008u, 0x0000289bu, 0x0000289au, 0x000500abu, 0x00000069u, 0x0000289cu, 0x0000289bu, 0x00000220u, 0x000300f7u, 0x0000289du, 0x00000000u, 0x000400fau, 0x0000289cu, 0x0000289eu, 0x0000289du, 0x000200f8u, 0x0000289eu, 0x000500c4u, 0x00000008u, 0x000028a1u, 0x0000022au, 0x0000253eu, 0x0003003eu, 0x00002893u, 0x000028a1u, 0x00040071u, 0x00000006u, 0x000028a4u, 0x00002546u, 0x0004007cu, 0x00000008u, 0x000028a5u, 0x000028a4u, 0x000500c7u, 0x00000008u, 0x000028a6u, 0x000028a5u, 0x0000022du, 0x000500abu, 0x00000069u, 0x000028a7u, 0x000028a6u, 0x00000220u, 0x000300f7u, 0x000028a8u, 0x00000000u, 0x000400fau, 0x000028a7u, 0x000028a9u, 0x000028a8u, 0x000200f8u, 0x000028a9u, 0x00050050u, 0x000000efu, 0x000028acu, 0x000028a1u, 0x000028a1u, 0x000500c7u, 0x000000efu, 0x000028adu, 0x00002897u, 0x000028acu, 0x00050082u, 0x000000efu, 0x000028afu, 0x000028adu, 0x0000f376u, 0x0007000cu, 0x000000efu, 0x000028b1u, 0x00000001u, 0x0000002au, 0x000028afu, 0x00000c39u, 0x000500c6u, 0x000000efu, 0x000028b3u, 0x00002897u, 0x000028b1u, 0x0003003eu, 0x00002892u, 0x000028b3u, 0x000200f9u, 0x000028a8u, 0x000200f8u, 0x000028a8u, 0x000700f5u, 0x000000efu, 0x0000be2du, 0x00002897u, 0x0000289eu, 0x000028b3u, 0x000028a9u, 0x00050082u, 0x00000008u, 0x000028b5u, 0x000028a1u, 0x0000022au, 0x00050050u, 0x000000efu, 0x000028b7u, 0x000028b5u, 0x000028b5u, 0x000500c7u, 0x000000efu, 0x000028b8u, 0x0000be2du, 0x000028b7u, 0x0003003eu, 0x00002892u, 0x000028b8u, 0x000200f9u, 0x0000289du, 0x000200f8u, 0x0000289du, 0x000700f5u, 0x000000efu, 0x0000be2eu, 0x00002897u, 0x000027a9u, 0x000028b8u, 0x000028a8u, 0x0003003eu, 0x00002894u, 0x0000be2eu, 0x0003003eu, 0x00002775u, 0x0000be2eu, 0x0003003eu, 0x00007047u, 0x00002542u, 0x0003003eu, 0x00007048u, 0x00002546u, 0x00050041u, 0x00000046u, 0x000027b6u, 0x00002558u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000027b7u, 0x000027b6u, 0x0003003eu, 0x0000277au, 0x000027b7u, 0x00040071u, 0x00000006u, 0x000028beu, 0x00002542u, 0x0004007cu, 0x00000008u, 0x000028bfu, 0x000028beu, 0x000500abu, 0x00000069u, 0x000028c0u, 0x000028bfu, 0x00000220u, 0x000300f7u, 0x000028c1u, 0x00000000u, 0x000400fau, 0x000028c0u, 0x000028c2u, 0x000028c1u, 0x000200f8u, 0x000028c2u, 0x000500c4u, 0x00000008u, 0x000028c5u, 0x0000022au, 0x00002542u, 0x0003003eu, 0x000028bau, 0x000028c5u, 0x00040071u, 0x00000006u, 0x000028c8u, 0x00002546u, 0x0004007cu, 0x00000008u, 0x000028c9u, 0x000028c8u, 0x000500c7u, 0x00000008u, 0x000028cau, 0x000028c9u, 0x0000025du, 0x000500abu, 0x00000069u, 0x000028cbu, 0x000028cau, 0x00000220u, 0x000300f7u, 0x000028ccu, 0x00000000u, 0x000400fau, 0x000028cbu, 0x000028cdu, 0x000028ccu, 0x000200f8u, 0x000028cdu, 0x000500c7u, 0x00000008u, 0x000028d0u, 0x000027b7u, 0x000028c5u, 0x00050082u, 0x00000008u, 0x000028d1u, 0x000028d0u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x000028d2u, 0x00000001u, 0x0000002au, 0x000028d1u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x000028d4u, 0x000027b7u, 0x000028d2u, 0x0003003eu, 0x0000277au, 0x000028d4u, 0x000200f9u, 0x000028ccu, 0x000200f8u, 0x000028ccu, 0x000700f5u, 0x00000008u, 0x0000be3eu, 0x000027b7u, 0x000028c2u, 0x000028d4u, 0x000028cdu, 0x00050082u, 0x00000008u, 0x000028d6u, 0x000028c5u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x000028d8u, 0x0000be3eu, 0x000028d6u, 0x0003003eu, 0x0000277au, 0x000028d8u, 0x000200f9u, 0x000028c1u, 0x000200f8u, 0x000028c1u, 0x000700f5u, 0x00000008u, 0x0000be3fu, 0x000027b7u, 0x0000289du, 0x000028d8u, 0x000028ccu, 0x0003003eu, 0x000028bbu, 0x0000be3fu, 0x0003003eu, 0x00002778u, 0x0000be3fu, 0x0004007cu, 0x00000006u, 0x000027beu, 0x0000be3fu, 0x00050084u, 0x00000006u, 0x000027bfu, 0x00002536u, 0x000027beu, 0x00050080u, 0x00000006u, 0x000027c0u, 0x00002534u, 0x000027bfu, 0x0003003eu, 0x0000277bu, 0x000027c0u, 0x00050084u, 0x00000006u, 0x000027c2u, 0x000027c0u, 0x00000386u, 0x00050050u, 0x000000efu, 0x000027c5u, 0x0000279du, 0x0000279du, 0x000500c4u, 0x000000efu, 0x000027c6u, 0x0000be2eu, 0x000027c5u, 0x0004007cu, 0x000000b0u, 0x000027c7u, 0x000027c6u, 0x00050050u, 0x000000b0u, 0x000027c8u, 0x000027c2u, 0x000027c2u, 0x00050080u, 0x000000b0u, 0x000027c9u, 0x000027c8u, 0x000027c7u, 0x000500c7u, 0x000000b0u, 0x000027cbu, 0x000027c9u, 0x0000f37au, 0x0003003eu, 0x0000277cu, 0x000027cbu, 0x000500c7u, 0x00000006u, 0x000027ceu, 0x000027beu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000027cfu, 0x000027ceu, 0x00000314u, 0x0004003du, 0x000000b0u, 0x000027d0u, 0x0000277cu, 0x00050050u, 0x000000b0u, 0x000027d1u, 0x000027cfu, 0x000027cfu, 0x000500c6u, 0x000000b0u, 0x000027d2u, 0x000027d0u, 0x000027d1u, 0x0003003eu, 0x0000277cu, 0x000027d2u, 0x0004003du, 0x000000b0u, 0x000027d3u, 0x0000277cu, 0x000500c2u, 0x000000b0u, 0x000027d5u, 0x000027d3u, 0x0000f37bu, 0x0003003eu, 0x0000277du, 0x000027d5u, 0x0004007cu, 0x00000006u, 0x000027d7u, 0x000027a6u, 0x0004003du, 0x000000b0u, 0x000027d8u, 0x0000277du, 0x00050050u, 0x000000b0u, 0x000027d9u, 0x000027d7u, 0x000027d7u, 0x000500c7u, 0x000000b0u, 0x000027dau, 0x000027d8u, 0x000027d9u, 0x0003003eu, 0x0000277du, 0x000027dau, 0x00050041u, 0x00000007u, 0x000027dcu, 0x0000277du, 0x0000032du, 0x0004003du, 0x00000006u, 0x000027ddu, 0x000027dcu, 0x000500c6u, 0x00000006u, 0x000027deu, 0x000027ddu, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000027dfu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000027deu, 0x0004003du, 0x00000011u, 0x000027e0u, 0x000027dfu, 0x00040071u, 0x00000006u, 0x000027e1u, 0x000027e0u, 0x0004007cu, 0x00000008u, 0x000027e2u, 0x000027e1u, 0x0003003eu, 0x0000277eu, 0x000027e2u, 0x00050041u, 0x00000007u, 0x000027e4u, 0x0000277du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000027e5u, 0x000027e4u, 0x000500c6u, 0x00000006u, 0x000027e6u, 0x000027e5u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000027e7u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000027e6u, 0x0004003du, 0x00000011u, 0x000027e8u, 0x000027e7u, 0x00040071u, 0x00000006u, 0x000027e9u, 0x000027e8u, 0x0004007cu, 0x00000008u, 0x000027eau, 0x000027e9u, 0x0003003eu, 0x0000277fu, 0x000027eau, 0x000500aau, 0x00000069u, 0x000027efu, 0x0000279cu, 0x0000022au, 0x000300f7u, 0x000027f0u, 0x00000000u, 0x000400fau, 0x000027efu, 0x000027f1u, 0x000027f2u, 0x000200f8u, 0x000027f2u, 0x000500aau, 0x00000069u, 0x0000280bu, 0x0000279cu, 0x00000220u, 0x000300f7u, 0x0000280cu, 0x00000000u, 0x000400fau, 0x0000280bu, 0x0000280du, 0x0000280eu, 0x000200f8u, 0x0000280eu, 0x000500c3u, 0x00000008u, 0x00002826u, 0x000027e2u, 0x0000025du, 0x0003003eu, 0x0000277eu, 0x00002826u, 0x000500c3u, 0x00000008u, 0x00002828u, 0x000027eau, 0x0000025du, 0x0003003eu, 0x0000277fu, 0x00002828u, 0x000200f9u, 0x0000280cu, 0x000200f8u, 0x0000280du, 0x00050041u, 0x00000007u, 0x0000280fu, 0x0000277cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002810u, 0x0000280fu, 0x000500c7u, 0x00000006u, 0x00002811u, 0x00002810u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00002812u, 0x00002811u, 0x00050084u, 0x00000008u, 0x00002813u, 0x00000233u, 0x00002812u, 0x00050082u, 0x00000008u, 0x00002814u, 0x00000269u, 0x00002813u, 0x000500c3u, 0x00000008u, 0x00002816u, 0x000027e2u, 0x00002814u, 0x0003003eu, 0x0000277eu, 0x00002816u, 0x00050041u, 0x00000007u, 0x00002817u, 0x0000277cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002818u, 0x00002817u, 0x000500c7u, 0x00000006u, 0x00002819u, 0x00002818u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x0000281au, 0x00002819u, 0x00050084u, 0x00000008u, 0x0000281bu, 0x00000233u, 0x0000281au, 0x00050082u, 0x00000008u, 0x0000281cu, 0x00000269u, 0x0000281bu, 0x000500c3u, 0x00000008u, 0x0000281eu, 0x000027eau, 0x0000281cu, 0x0003003eu, 0x0000277fu, 0x0000281eu, 0x000500c7u, 0x00000008u, 0x00002820u, 0x00002816u, 0x00000533u, 0x00050084u, 0x00000008u, 0x00002821u, 0x00002820u, 0x000003f2u, 0x0003003eu, 0x0000277eu, 0x00002821u, 0x000500c7u, 0x00000008u, 0x00002823u, 0x0000281eu, 0x00000533u, 0x00050084u, 0x00000008u, 0x00002824u, 0x00002823u, 0x000003f2u, 0x0003003eu, 0x0000277fu, 0x00002824u, 0x000200f9u, 0x0000280cu, 0x000200f8u, 0x0000280cu, 0x000700f5u, 0x00000008u, 0x0000be57u, 0x00002824u, 0x0000280du, 0x00002828u, 0x0000280eu, 0x000700f5u, 0x00000008u, 0x0000be55u, 0x00002821u, 0x0000280du, 0x00002826u, 0x0000280eu, 0x000200f9u, 0x000027f0u, 0x000200f8u, 0x000027f1u, 0x00050041u, 0x00000007u, 0x000027f3u, 0x0000277cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000027f4u, 0x000027f3u, 0x000500c7u, 0x00000006u, 0x000027f5u, 0x000027f4u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x000027f6u, 0x000027f5u, 0x00050084u, 0x00000008u, 0x000027f7u, 0x00000233u, 0x000027f6u, 0x00050082u, 0x00000008u, 0x000027f8u, 0x0000025du, 0x000027f7u, 0x000500c3u, 0x00000008u, 0x000027fau, 0x000027e2u, 0x000027f8u, 0x0003003eu, 0x0000277eu, 0x000027fau, 0x00050041u, 0x00000007u, 0x000027fbu, 0x0000277cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000027fcu, 0x000027fbu, 0x000500c7u, 0x00000006u, 0x000027fdu, 0x000027fcu, 0x00000386u, 0x0004007cu, 0x00000008u, 0x000027feu, 0x000027fdu, 0x00050084u, 0x00000008u, 0x000027ffu, 0x00000233u, 0x000027feu, 0x00050082u, 0x00000008u, 0x00002800u, 0x0000025du, 0x000027ffu, 0x000500c3u, 0x00000008u, 0x00002802u, 0x000027eau, 0x00002800u, 0x0003003eu, 0x0000277fu, 0x00002802u, 0x000500c7u, 0x00000008u, 0x00002804u, 0x000027fau, 0x0000035eu, 0x0003003eu, 0x0000277eu, 0x00002804u, 0x000500c7u, 0x00000008u, 0x00002806u, 0x00002802u, 0x0000035eu, 0x0003003eu, 0x0000277fu, 0x00002806u, 0x000200f9u, 0x000027f0u, 0x000200f8u, 0x000027f0u, 0x000700f5u, 0x00000008u, 0x0000be56u, 0x00002806u, 0x000027f1u, 0x0000be57u, 0x0000280cu, 0x000700f5u, 0x00000008u, 0x0000be54u, 0x00002804u, 0x000027f1u, 0x0000be55u, 0x0000280cu, 0x000500c4u, 0x00000008u, 0x0000282au, 0x0000be54u, 0x0000025du, 0x000500c5u, 0x00000008u, 0x0000282cu, 0x0000282au, 0x0000be56u, 0x0003003eu, 0x00002780u, 0x0000282cu, 0x000200f9u, 0x000027a8u, 0x000200f8u, 0x000027a8u, 0x000700f5u, 0x00000008u, 0x0000be58u, 0x0000282cu, 0x000027f0u, 0x0000be59u, 0x0000285eu, 0x0003003eu, 0x0000278au, 0x0000be58u, 0x0003003eu, 0x0000254fu, 0x0000be58u, 0x000200f9u, 0x0000257fu, 0x000200f8u, 0x00002580u, 0x000500c3u, 0x00000008u, 0x00002583u, 0x0000247fu, 0x0000022au, 0x00110050u, 0x00000023u, 0x0000722cu, 0x0000252cu, 0x00006bf7u, 0x00002530u, 0x00006bf7u, 0x00002534u, 0x00002536u, 0x00006bfau, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00002540u, 0x00002542u, 0x00002544u, 0x00002546u, 0x0003003eu, 0x00007063u, 0x00002534u, 0x0003003eu, 0x00007064u, 0x00002536u, 0x0003003eu, 0x00007065u, 0x0000253au, 0x0003003eu, 0x00007066u, 0x0000253cu, 0x0003003eu, 0x00007067u, 0x0000253eu, 0x0003003eu, 0x00007068u, 0x00002542u, 0x0003003eu, 0x00007069u, 0x00002546u, 0x0003003eu, 0x00002551u, 0x000021b2u, 0x0004003du, 0x000000efu, 0x00002586u, 0x000020e7u, 0x0003003eu, 0x00002552u, 0x00002586u, 0x0003003eu, 0x00002553u, 0x00002583u, 0x0003003eu, 0x00002554u, 0x000021c3u, 0x0003003eu, 0x00002555u, 0x000021c6u, 0x000500b1u, 0x00000069u, 0x000025e2u, 0x00002583u, 0x0000022du, 0x0003003eu, 0x000025c6u, 0x000025e2u, 0x000300f7u, 0x000025e4u, 0x00000000u, 0x000400fau, 0x000025e2u, 0x000025e5u, 0x000025e4u, 0x000200f8u, 0x000025e5u, 0x00040071u, 0x00000006u, 0x000025e8u, 0x0000253au, 0x0004007cu, 0x00000008u, 0x000025e9u, 0x000025e8u, 0x000500abu, 0x00000069u, 0x000025eau, 0x000025e9u, 0x0000022du, 0x000200f9u, 0x000025e4u, 0x000200f8u, 0x000025e4u, 0x000700f5u, 0x00000069u, 0x000025ebu, 0x000025e2u, 0x00002580u, 0x000025eau, 0x000025e5u, 0x000400a8u, 0x00000069u, 0x000025edu, 0x000021c3u, 0x000500a7u, 0x00000069u, 0x000025eeu, 0x000025ebu, 0x000025edu, 0x0003003eu, 0x000025c7u, 0x000025eeu, 0x00040071u, 0x00000006u, 0x000025f1u, 0x0000253au, 0x0004007cu, 0x00000008u, 0x000025f2u, 0x000025f1u, 0x0007000cu, 0x00000008u, 0x000025f3u, 0x00000001u, 0x00000027u, 0x000025f2u, 0x0000022du, 0x0003003eu, 0x000025c8u, 0x000025f3u, 0x000500aau, 0x00000069u, 0x000025f8u, 0x000025f2u, 0x00000230u, 0x0003003eu, 0x000025c9u, 0x000025f8u, 0x000500a6u, 0x00000069u, 0x000025fbu, 0x000025f8u, 0x000021c3u, 0x000600a9u, 0x00000008u, 0x000025fcu, 0x000025fbu, 0x00001166u, 0x000003dau, 0x0003003eu, 0x000025cau, 0x000025fcu, 0x000300f7u, 0x000025feu, 0x00000000u, 0x000400fau, 0x000025eeu, 0x000025ffu, 0x00002600u, 0x000200f8u, 0x00002600u, 0x00050041u, 0x00000046u, 0x00002684u, 0x00002552u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002685u, 0x00002684u, 0x00050080u, 0x00000008u, 0x00002686u, 0x00002685u, 0x00002583u, 0x0003003eu, 0x00002684u, 0x00002686u, 0x00110050u, 0x00000023u, 0x00007088u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00002534u, 0x00002536u, 0x00006bfau, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00006bfau, 0x00002542u, 0x00006bfau, 0x00002546u, 0x0003003eu, 0x0000705bu, 0x0000253eu, 0x0003003eu, 0x0000705cu, 0x00002546u, 0x0004003du, 0x00000008u, 0x0000268au, 0x00002684u, 0x0003003eu, 0x000025d9u, 0x0000268au, 0x00040071u, 0x00000006u, 0x00002734u, 0x0000253eu, 0x0004007cu, 0x00000008u, 0x00002735u, 0x00002734u, 0x000500abu, 0x00000069u, 0x00002736u, 0x00002735u, 0x00000220u, 0x000300f7u, 0x00002737u, 0x00000000u, 0x000400fau, 0x00002736u, 0x00002738u, 0x00002737u, 0x000200f8u, 0x00002738u, 0x000500c4u, 0x00000008u, 0x0000273bu, 0x0000022au, 0x0000253eu, 0x0003003eu, 0x00002730u, 0x0000273bu, 0x00040071u, 0x00000006u, 0x0000273eu, 0x00002546u, 0x0004007cu, 0x00000008u, 0x0000273fu, 0x0000273eu, 0x000500c7u, 0x00000008u, 0x00002740u, 0x0000273fu, 0x0000022du, 0x000500abu, 0x00000069u, 0x00002741u, 0x00002740u, 0x00000220u, 0x000300f7u, 0x00002742u, 0x00000000u, 0x000400fau, 0x00002741u, 0x00002743u, 0x00002742u, 0x000200f8u, 0x00002743u, 0x000500c7u, 0x00000008u, 0x00002746u, 0x0000268au, 0x0000273bu, 0x00050082u, 0x00000008u, 0x00002747u, 0x00002746u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002748u, 0x00000001u, 0x0000002au, 0x00002747u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x0000274au, 0x0000268au, 0x00002748u, 0x0003003eu, 0x000025d9u, 0x0000274au, 0x000200f9u, 0x00002742u, 0x000200f8u, 0x00002742u, 0x000700f5u, 0x00000008u, 0x0000be64u, 0x0000268au, 0x00002738u, 0x0000274au, 0x00002743u, 0x00050082u, 0x00000008u, 0x0000274cu, 0x0000273bu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000274eu, 0x0000be64u, 0x0000274cu, 0x0003003eu, 0x000025d9u, 0x0000274eu, 0x000200f9u, 0x00002737u, 0x000200f8u, 0x00002737u, 0x000700f5u, 0x00000008u, 0x0000be65u, 0x0000268au, 0x00002600u, 0x0000274eu, 0x00002742u, 0x0003003eu, 0x00002731u, 0x0000be65u, 0x0003003eu, 0x000025d7u, 0x0000be65u, 0x0003003eu, 0x0000705fu, 0x00002542u, 0x0003003eu, 0x00007060u, 0x00002546u, 0x00050041u, 0x00000046u, 0x0000268du, 0x00002552u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000268eu, 0x0000268du, 0x0003003eu, 0x000025dcu, 0x0000268eu, 0x00040071u, 0x00000006u, 0x00002754u, 0x00002542u, 0x0004007cu, 0x00000008u, 0x00002755u, 0x00002754u, 0x000500abu, 0x00000069u, 0x00002756u, 0x00002755u, 0x00000220u, 0x000300f7u, 0x00002757u, 0x00000000u, 0x000400fau, 0x00002756u, 0x00002758u, 0x00002757u, 0x000200f8u, 0x00002758u, 0x000500c4u, 0x00000008u, 0x0000275bu, 0x0000022au, 0x00002542u, 0x0003003eu, 0x00002750u, 0x0000275bu, 0x00040071u, 0x00000006u, 0x0000275eu, 0x00002546u, 0x0004007cu, 0x00000008u, 0x0000275fu, 0x0000275eu, 0x000500c7u, 0x00000008u, 0x00002760u, 0x0000275fu, 0x0000025du, 0x000500abu, 0x00000069u, 0x00002761u, 0x00002760u, 0x00000220u, 0x000300f7u, 0x00002762u, 0x00000000u, 0x000400fau, 0x00002761u, 0x00002763u, 0x00002762u, 0x000200f8u, 0x00002763u, 0x000500c7u, 0x00000008u, 0x00002766u, 0x0000268eu, 0x0000275bu, 0x00050082u, 0x00000008u, 0x00002767u, 0x00002766u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002768u, 0x00000001u, 0x0000002au, 0x00002767u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x0000276au, 0x0000268eu, 0x00002768u, 0x0003003eu, 0x000025dcu, 0x0000276au, 0x000200f9u, 0x00002762u, 0x000200f8u, 0x00002762u, 0x000700f5u, 0x00000008u, 0x0000be75u, 0x0000268eu, 0x00002758u, 0x0000276au, 0x00002763u, 0x00050082u, 0x00000008u, 0x0000276cu, 0x0000275bu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000276eu, 0x0000be75u, 0x0000276cu, 0x0003003eu, 0x000025dcu, 0x0000276eu, 0x000200f9u, 0x00002757u, 0x000200f8u, 0x00002757u, 0x000700f5u, 0x00000008u, 0x0000be76u, 0x0000268eu, 0x00002737u, 0x0000276eu, 0x00002762u, 0x0003003eu, 0x00002751u, 0x0000be76u, 0x0003003eu, 0x000025dau, 0x0000be76u, 0x0004007cu, 0x00000006u, 0x00002695u, 0x0000be76u, 0x00050084u, 0x00000006u, 0x00002696u, 0x00002536u, 0x00002695u, 0x00050080u, 0x00000006u, 0x00002697u, 0x00002534u, 0x00002696u, 0x0003003eu, 0x000025ddu, 0x00002697u, 0x00050084u, 0x00000006u, 0x00002699u, 0x00002697u, 0x00000386u, 0x000500c4u, 0x00000008u, 0x0000269cu, 0x0000be65u, 0x000025f3u, 0x0004007cu, 0x00000006u, 0x0000269du, 0x0000269cu, 0x00050080u, 0x00000006u, 0x0000269eu, 0x00002699u, 0x0000269du, 0x000500c7u, 0x00000006u, 0x0000269fu, 0x0000269eu, 0x000011d9u, 0x0003003eu, 0x000025deu, 0x0000269fu, 0x000500c7u, 0x00000006u, 0x000026a2u, 0x00002695u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000026a3u, 0x000026a2u, 0x00000314u, 0x000500c6u, 0x00000006u, 0x000026a5u, 0x0000269fu, 0x000026a3u, 0x0003003eu, 0x000025deu, 0x000026a5u, 0x000500c2u, 0x00000006u, 0x000026a7u, 0x000026a5u, 0x00000386u, 0x0003003eu, 0x000025dfu, 0x000026a7u, 0x0004007cu, 0x00000006u, 0x000026a9u, 0x000025fcu, 0x000500c7u, 0x00000006u, 0x000026abu, 0x000026a7u, 0x000026a9u, 0x0003003eu, 0x000025dfu, 0x000026abu, 0x000500c6u, 0x00000006u, 0x000026aeu, 0x000026abu, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000026afu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000026aeu, 0x0004003du, 0x00000011u, 0x000026b0u, 0x000026afu, 0x00040071u, 0x00000006u, 0x000026b1u, 0x000026b0u, 0x0004007cu, 0x00000008u, 0x000026b2u, 0x000026b1u, 0x0003003eu, 0x000025d6u, 0x000026b2u, 0x000300f7u, 0x000026b4u, 0x00000000u, 0x000400fau, 0x000021c3u, 0x000026b5u, 0x000026b4u, 0x000200f8u, 0x000026b5u, 0x000500aau, 0x00000069u, 0x000026bau, 0x000025f2u, 0x00000220u, 0x000300f7u, 0x000026bbu, 0x00000000u, 0x000400fau, 0x000026bau, 0x000026bcu, 0x000026bdu, 0x000200f8u, 0x000026bdu, 0x000500c7u, 0x00000006u, 0x000026d3u, 0x000026a5u, 0x00000386u, 0x00050084u, 0x00000006u, 0x000026d4u, 0x00000704u, 0x000026d3u, 0x00050082u, 0x00000006u, 0x000026d5u, 0x00000314u, 0x000026d4u, 0x000500c3u, 0x00000008u, 0x000026d7u, 0x000026b2u, 0x000026d5u, 0x0003003eu, 0x000025d6u, 0x000026d7u, 0x000500c7u, 0x00000008u, 0x000026d9u, 0x000026d7u, 0x0000035eu, 0x0003003eu, 0x000025d6u, 0x000026d9u, 0x000500c4u, 0x00000008u, 0x000026dbu, 0x000026d9u, 0x0000022du, 0x0003003eu, 0x000025d6u, 0x000026dbu, 0x00050080u, 0x00000008u, 0x000026deu, 0x000026dbu, 0x00002583u, 0x0003003eu, 0x000025d6u, 0x000026deu, 0x000200f9u, 0x000026bbu, 0x000200f8u, 0x000026bcu, 0x000500c7u, 0x00000006u, 0x000026bfu, 0x000026a5u, 0x00000464u, 0x00050084u, 0x00000006u, 0x000026c0u, 0x00000704u, 0x000026bfu, 0x00050082u, 0x00000006u, 0x000026c1u, 0x00001285u, 0x000026c0u, 0x000500c3u, 0x00000008u, 0x000026c3u, 0x000026b2u, 0x000026c1u, 0x0003003eu, 0x000025d6u, 0x000026c3u, 0x000500c7u, 0x00000008u, 0x000026c5u, 0x000026c3u, 0x00000533u, 0x0003003eu, 0x000025d6u, 0x000026c5u, 0x000500c4u, 0x0000000fu, 0x000026c8u, 0x0000253cu, 0x00000233u, 0x00040071u, 0x00000006u, 0x000026c9u, 0x000026c8u, 0x0004007cu, 0x00000008u, 0x000026cau, 0x000026c9u, 0x000500c5u, 0x00000008u, 0x000026ccu, 0x000026c5u, 0x000026cau, 0x0003003eu, 0x000025d6u, 0x000026ccu, 0x000500c4u, 0x00000008u, 0x000026ceu, 0x000026ccu, 0x0000022du, 0x0003003eu, 0x000025d6u, 0x000026ceu, 0x00050080u, 0x00000008u, 0x000026d1u, 0x000026ceu, 0x00002583u, 0x0003003eu, 0x000025d6u, 0x000026d1u, 0x000200f9u, 0x000026bbu, 0x000200f8u, 0x000026bbu, 0x000700f5u, 0x00000008u, 0x0000be97u, 0x000026d1u, 0x000026bcu, 0x000026deu, 0x000026bdu, 0x000500c5u, 0x00000008u, 0x000026e1u, 0x0000be97u, 0x000012aau, 0x000500c6u, 0x00000008u, 0x000026e2u, 0x000026e1u, 0x0000022au, 0x00080041u, 0x00000692u, 0x000026e3u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000026e2u, 0x0004003du, 0x00000011u, 0x000026e4u, 0x000026e3u, 0x00040071u, 0x00000006u, 0x000026e5u, 0x000026e4u, 0x0004007cu, 0x00000008u, 0x000026e6u, 0x000026e5u, 0x0003003eu, 0x000025d6u, 0x000026e6u, 0x000200f9u, 0x000026b4u, 0x000200f8u, 0x000026b4u, 0x000700f5u, 0x00000008u, 0x0000bec5u, 0x000026b2u, 0x00002757u, 0x000026e6u, 0x000026bbu, 0x000200f9u, 0x000025feu, 0x000200f8u, 0x000025ffu, 0x00050084u, 0x00000008u, 0x00002602u, 0x0000022du, 0x00002583u, 0x00050041u, 0x00000046u, 0x00002603u, 0x00002552u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002604u, 0x00002603u, 0x00050080u, 0x00000008u, 0x00002605u, 0x00002604u, 0x00002602u, 0x0003003eu, 0x00002603u, 0x00002605u, 0x00110050u, 0x00000023u, 0x00007078u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00006bf7u, 0x00002534u, 0x00002536u, 0x00006bfau, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00006bfau, 0x00002542u, 0x00006bfau, 0x00002546u, 0x0003003eu, 0x00007053u, 0x0000253eu, 0x0003003eu, 0x00007054u, 0x00002546u, 0x0004003du, 0x00000008u, 0x00002609u, 0x00002603u, 0x0003003eu, 0x000025cdu, 0x00002609u, 0x00050050u, 0x000000efu, 0x000026ecu, 0x00002609u, 0x00002609u, 0x00050080u, 0x000000efu, 0x000026edu, 0x000026ecu, 0x00000dd9u, 0x0003003eu, 0x000026e8u, 0x000026edu, 0x00040071u, 0x00000006u, 0x000026f0u, 0x0000253eu, 0x0004007cu, 0x00000008u, 0x000026f1u, 0x000026f0u, 0x000500abu, 0x00000069u, 0x000026f2u, 0x000026f1u, 0x00000220u, 0x000300f7u, 0x000026f3u, 0x00000000u, 0x000400fau, 0x000026f2u, 0x000026f4u, 0x000026f3u, 0x000200f8u, 0x000026f4u, 0x000500c4u, 0x00000008u, 0x000026f7u, 0x0000022au, 0x0000253eu, 0x0003003eu, 0x000026e9u, 0x000026f7u, 0x00040071u, 0x00000006u, 0x000026fau, 0x00002546u, 0x0004007cu, 0x00000008u, 0x000026fbu, 0x000026fau, 0x000500c7u, 0x00000008u, 0x000026fcu, 0x000026fbu, 0x0000022du, 0x000500abu, 0x00000069u, 0x000026fdu, 0x000026fcu, 0x00000220u, 0x000300f7u, 0x000026feu, 0x00000000u, 0x000400fau, 0x000026fdu, 0x000026ffu, 0x000026feu, 0x000200f8u, 0x000026ffu, 0x00050050u, 0x000000efu, 0x00002702u, 0x000026f7u, 0x000026f7u, 0x000500c7u, 0x000000efu, 0x00002703u, 0x000026edu, 0x00002702u, 0x00050082u, 0x000000efu, 0x00002705u, 0x00002703u, 0x0000f376u, 0x0007000cu, 0x000000efu, 0x00002707u, 0x00000001u, 0x0000002au, 0x00002705u, 0x00000c39u, 0x000500c6u, 0x000000efu, 0x00002709u, 0x000026edu, 0x00002707u, 0x0003003eu, 0x000026e8u, 0x00002709u, 0x000200f9u, 0x000026feu, 0x000200f8u, 0x000026feu, 0x000700f5u, 0x000000efu, 0x0000be99u, 0x000026edu, 0x000026f4u, 0x00002709u, 0x000026ffu, 0x00050082u, 0x00000008u, 0x0000270bu, 0x000026f7u, 0x0000022au, 0x00050050u, 0x000000efu, 0x0000270du, 0x0000270bu, 0x0000270bu, 0x000500c7u, 0x000000efu, 0x0000270eu, 0x0000be99u, 0x0000270du, 0x0003003eu, 0x000026e8u, 0x0000270eu, 0x000200f9u, 0x000026f3u, 0x000200f8u, 0x000026f3u, 0x000700f5u, 0x000000efu, 0x0000be9au, 0x000026edu, 0x000025ffu, 0x0000270eu, 0x000026feu, 0x0003003eu, 0x000026eau, 0x0000be9au, 0x0003003eu, 0x000025cbu, 0x0000be9au, 0x0003003eu, 0x00007057u, 0x00002542u, 0x0003003eu, 0x00007058u, 0x00002546u, 0x00050041u, 0x00000046u, 0x0000260cu, 0x00002552u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000260du, 0x0000260cu, 0x0003003eu, 0x000025d0u, 0x0000260du, 0x00040071u, 0x00000006u, 0x00002714u, 0x00002542u, 0x0004007cu, 0x00000008u, 0x00002715u, 0x00002714u, 0x000500abu, 0x00000069u, 0x00002716u, 0x00002715u, 0x00000220u, 0x000300f7u, 0x00002717u, 0x00000000u, 0x000400fau, 0x00002716u, 0x00002718u, 0x00002717u, 0x000200f8u, 0x00002718u, 0x000500c4u, 0x00000008u, 0x0000271bu, 0x0000022au, 0x00002542u, 0x0003003eu, 0x00002710u, 0x0000271bu, 0x00040071u, 0x00000006u, 0x0000271eu, 0x00002546u, 0x0004007cu, 0x00000008u, 0x0000271fu, 0x0000271eu, 0x000500c7u, 0x00000008u, 0x00002720u, 0x0000271fu, 0x0000025du, 0x000500abu, 0x00000069u, 0x00002721u, 0x00002720u, 0x00000220u, 0x000300f7u, 0x00002722u, 0x00000000u, 0x000400fau, 0x00002721u, 0x00002723u, 0x00002722u, 0x000200f8u, 0x00002723u, 0x000500c7u, 0x00000008u, 0x00002726u, 0x0000260du, 0x0000271bu, 0x00050082u, 0x00000008u, 0x00002727u, 0x00002726u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002728u, 0x00000001u, 0x0000002au, 0x00002727u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x0000272au, 0x0000260du, 0x00002728u, 0x0003003eu, 0x000025d0u, 0x0000272au, 0x000200f9u, 0x00002722u, 0x000200f8u, 0x00002722u, 0x000700f5u, 0x00000008u, 0x0000beaau, 0x0000260du, 0x00002718u, 0x0000272au, 0x00002723u, 0x00050082u, 0x00000008u, 0x0000272cu, 0x0000271bu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000272eu, 0x0000beaau, 0x0000272cu, 0x0003003eu, 0x000025d0u, 0x0000272eu, 0x000200f9u, 0x00002717u, 0x000200f8u, 0x00002717u, 0x000700f5u, 0x00000008u, 0x0000beabu, 0x0000260du, 0x000026f3u, 0x0000272eu, 0x00002722u, 0x0003003eu, 0x00002711u, 0x0000beabu, 0x0003003eu, 0x000025ceu, 0x0000beabu, 0x0004007cu, 0x00000006u, 0x00002614u, 0x0000beabu, 0x00050084u, 0x00000006u, 0x00002615u, 0x00002536u, 0x00002614u, 0x00050080u, 0x00000006u, 0x00002616u, 0x00002534u, 0x00002615u, 0x0003003eu, 0x000025d1u, 0x00002616u, 0x00050084u, 0x00000006u, 0x00002618u, 0x00002616u, 0x00000386u, 0x00050050u, 0x000000efu, 0x0000261bu, 0x000025f3u, 0x000025f3u, 0x000500c4u, 0x000000efu, 0x0000261cu, 0x0000be9au, 0x0000261bu, 0x0004007cu, 0x000000b0u, 0x0000261du, 0x0000261cu, 0x00050050u, 0x000000b0u, 0x0000261eu, 0x00002618u, 0x00002618u, 0x00050080u, 0x000000b0u, 0x0000261fu, 0x0000261eu, 0x0000261du, 0x000500c7u, 0x000000b0u, 0x00002621u, 0x0000261fu, 0x0000f37au, 0x0003003eu, 0x000025d2u, 0x00002621u, 0x000500c7u, 0x00000006u, 0x00002624u, 0x00002614u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00002625u, 0x00002624u, 0x00000314u, 0x0004003du, 0x000000b0u, 0x00002626u, 0x000025d2u, 0x00050050u, 0x000000b0u, 0x00002627u, 0x00002625u, 0x00002625u, 0x000500c6u, 0x000000b0u, 0x00002628u, 0x00002626u, 0x00002627u, 0x0003003eu, 0x000025d2u, 0x00002628u, 0x0004003du, 0x000000b0u, 0x00002629u, 0x000025d2u, 0x000500c2u, 0x000000b0u, 0x0000262bu, 0x00002629u, 0x0000f37bu, 0x0003003eu, 0x000025d3u, 0x0000262bu, 0x0004007cu, 0x00000006u, 0x0000262du, 0x000025fcu, 0x0004003du, 0x000000b0u, 0x0000262eu, 0x000025d3u, 0x00050050u, 0x000000b0u, 0x0000262fu, 0x0000262du, 0x0000262du, 0x000500c7u, 0x000000b0u, 0x00002630u, 0x0000262eu, 0x0000262fu, 0x0003003eu, 0x000025d3u, 0x00002630u, 0x00050041u, 0x00000007u, 0x00002632u, 0x000025d3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002633u, 0x00002632u, 0x000500c6u, 0x00000006u, 0x00002634u, 0x00002633u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00002635u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00002634u, 0x0004003du, 0x00000011u, 0x00002636u, 0x00002635u, 0x00040071u, 0x00000006u, 0x00002637u, 0x00002636u, 0x0004007cu, 0x00000008u, 0x00002638u, 0x00002637u, 0x0003003eu, 0x000025d4u, 0x00002638u, 0x00050041u, 0x00000007u, 0x0000263au, 0x000025d3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000263bu, 0x0000263au, 0x000500c6u, 0x00000006u, 0x0000263cu, 0x0000263bu, 0x0000045cu, 0x00080041u, 0x00000692u, 0x0000263du, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000263cu, 0x0004003du, 0x00000011u, 0x0000263eu, 0x0000263du, 0x00040071u, 0x00000006u, 0x0000263fu, 0x0000263eu, 0x0004007cu, 0x00000008u, 0x00002640u, 0x0000263fu, 0x0003003eu, 0x000025d5u, 0x00002640u, 0x000500aau, 0x00000069u, 0x00002645u, 0x000025f2u, 0x0000022au, 0x000300f7u, 0x00002646u, 0x00000000u, 0x000400fau, 0x00002645u, 0x00002647u, 0x00002648u, 0x000200f8u, 0x00002648u, 0x000500aau, 0x00000069u, 0x00002661u, 0x000025f2u, 0x00000220u, 0x000300f7u, 0x00002662u, 0x00000000u, 0x000400fau, 0x00002661u, 0x00002663u, 0x00002664u, 0x000200f8u, 0x00002664u, 0x000500c3u, 0x00000008u, 0x0000267cu, 0x00002638u, 0x0000025du, 0x0003003eu, 0x000025d4u, 0x0000267cu, 0x000500c3u, 0x00000008u, 0x0000267eu, 0x00002640u, 0x0000025du, 0x0003003eu, 0x000025d5u, 0x0000267eu, 0x000200f9u, 0x00002662u, 0x000200f8u, 0x00002663u, 0x00050041u, 0x00000007u, 0x00002665u, 0x000025d2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002666u, 0x00002665u, 0x000500c7u, 0x00000006u, 0x00002667u, 0x00002666u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00002668u, 0x00002667u, 0x00050084u, 0x00000008u, 0x00002669u, 0x00000233u, 0x00002668u, 0x00050082u, 0x00000008u, 0x0000266au, 0x00000269u, 0x00002669u, 0x000500c3u, 0x00000008u, 0x0000266cu, 0x00002638u, 0x0000266au, 0x0003003eu, 0x000025d4u, 0x0000266cu, 0x00050041u, 0x00000007u, 0x0000266du, 0x000025d2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000266eu, 0x0000266du, 0x000500c7u, 0x00000006u, 0x0000266fu, 0x0000266eu, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00002670u, 0x0000266fu, 0x00050084u, 0x00000008u, 0x00002671u, 0x00000233u, 0x00002670u, 0x00050082u, 0x00000008u, 0x00002672u, 0x00000269u, 0x00002671u, 0x000500c3u, 0x00000008u, 0x00002674u, 0x00002640u, 0x00002672u, 0x0003003eu, 0x000025d5u, 0x00002674u, 0x000500c7u, 0x00000008u, 0x00002676u, 0x0000266cu, 0x00000533u, 0x00050084u, 0x00000008u, 0x00002677u, 0x00002676u, 0x000003f2u, 0x0003003eu, 0x000025d4u, 0x00002677u, 0x000500c7u, 0x00000008u, 0x00002679u, 0x00002674u, 0x00000533u, 0x00050084u, 0x00000008u, 0x0000267au, 0x00002679u, 0x000003f2u, 0x0003003eu, 0x000025d5u, 0x0000267au, 0x000200f9u, 0x00002662u, 0x000200f8u, 0x00002662u, 0x000700f5u, 0x00000008u, 0x0000bec3u, 0x0000267au, 0x00002663u, 0x0000267eu, 0x00002664u, 0x000700f5u, 0x00000008u, 0x0000bec1u, 0x00002677u, 0x00002663u, 0x0000267cu, 0x00002664u, 0x000200f9u, 0x00002646u, 0x000200f8u, 0x00002647u, 0x00050041u, 0x00000007u, 0x00002649u, 0x000025d2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000264au, 0x00002649u, 0x000500c7u, 0x00000006u, 0x0000264bu, 0x0000264au, 0x00000386u, 0x0004007cu, 0x00000008u, 0x0000264cu, 0x0000264bu, 0x00050084u, 0x00000008u, 0x0000264du, 0x00000233u, 0x0000264cu, 0x00050082u, 0x00000008u, 0x0000264eu, 0x0000025du, 0x0000264du, 0x000500c3u, 0x00000008u, 0x00002650u, 0x00002638u, 0x0000264eu, 0x0003003eu, 0x000025d4u, 0x00002650u, 0x00050041u, 0x00000007u, 0x00002651u, 0x000025d2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002652u, 0x00002651u, 0x000500c7u, 0x00000006u, 0x00002653u, 0x00002652u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x00002654u, 0x00002653u, 0x00050084u, 0x00000008u, 0x00002655u, 0x00000233u, 0x00002654u, 0x00050082u, 0x00000008u, 0x00002656u, 0x0000025du, 0x00002655u, 0x000500c3u, 0x00000008u, 0x00002658u, 0x00002640u, 0x00002656u, 0x0003003eu, 0x000025d5u, 0x00002658u, 0x000500c7u, 0x00000008u, 0x0000265au, 0x00002650u, 0x0000035eu, 0x0003003eu, 0x000025d4u, 0x0000265au, 0x000500c7u, 0x00000008u, 0x0000265cu, 0x00002658u, 0x0000035eu, 0x0003003eu, 0x000025d5u, 0x0000265cu, 0x000200f9u, 0x00002646u, 0x000200f8u, 0x00002646u, 0x000700f5u, 0x00000008u, 0x0000bec2u, 0x0000265cu, 0x00002647u, 0x0000bec3u, 0x00002662u, 0x000700f5u, 0x00000008u, 0x0000bec0u, 0x0000265au, 0x00002647u, 0x0000bec1u, 0x00002662u, 0x000500c4u, 0x00000008u, 0x00002680u, 0x0000bec0u, 0x0000025du, 0x000500c5u, 0x00000008u, 0x00002682u, 0x00002680u, 0x0000bec2u, 0x0003003eu, 0x000025d6u, 0x00002682u, 0x000200f9u, 0x000025feu, 0x000200f8u, 0x000025feu, 0x000700f5u, 0x00000008u, 0x0000bec4u, 0x00002682u, 0x00002646u, 0x0000bec5u, 0x000026b4u, 0x0003003eu, 0x000025e0u, 0x0000bec4u, 0x0003003eu, 0x0000254fu, 0x0000bec4u, 0x000500c7u, 0x00000008u, 0x0000258bu, 0x0000247fu, 0x0000022au, 0x00050084u, 0x00000008u, 0x0000258cu, 0x0000025du, 0x0000258bu, 0x00050082u, 0x00000008u, 0x0000258du, 0x0000025du, 0x0000258cu, 0x000500c3u, 0x00000008u, 0x0000258fu, 0x0000bec4u, 0x0000258du, 0x0003003eu, 0x0000254fu, 0x0000258fu, 0x000500c7u, 0x00000008u, 0x00002591u, 0x0000258fu, 0x0000035eu, 0x0003003eu, 0x0000254fu, 0x00002591u, 0x000200f9u, 0x0000257fu, 0x000200f8u, 0x0000257fu, 0x000700f5u, 0x00000008u, 0x0000bed5u, 0x00002591u, 0x000025feu, 0x0000be58u, 0x000027a8u, 0x000200f9u, 0x00002579u, 0x000200f8u, 0x0000257au, 0x0003003eu, 0x0000254fu, 0x00000220u, 0x000200f9u, 0x00002579u, 0x000200f8u, 0x00002579u, 0x000700f5u, 0x00000008u, 0x0000bed4u, 0x00000220u, 0x0000257au, 0x0000bed5u, 0x0000257fu, 0x0003003eu, 0x0000255cu, 0x0000bed4u, 0x0003003eu, 0x000020e4u, 0x0000bed4u, 0x0003003eu, 0x00007cddu, 0x0000bed4u, 0x0003003eu, 0x00007cdeu, 0x00000626u, 0x000300f7u, 0x0000224au, 0x00000000u, 0x000400fau, 0x000021edu, 0x0000224bu, 0x0000224au, 0x000200f8u, 0x0000224bu, 0x000500aau, 0x00000069u, 0x0000224eu, 0x00002577u, 0x0000022du, 0x000200f9u, 0x0000224au, 0x000200f8u, 0x0000224au, 0x000700f5u, 0x00000069u, 0x0000224fu, 0x000021edu, 0x00002579u, 0x0000224eu, 0x0000224bu, 0x000300f7u, 0x00002250u, 0x00000000u, 0x000400fau, 0x0000224fu, 0x00002251u, 0x00002250u, 0x000200f8u, 0x00002251u, 0x000500c7u, 0x00000008u, 0x00002253u, 0x0000bed4u, 0x0000022au, 0x000500aau, 0x00000069u, 0x00002254u, 0x00002253u, 0x00000220u, 0x000200f9u, 0x00002250u, 0x000200f8u, 0x00002250u, 0x000700f5u, 0x00000069u, 0x00002255u, 0x0000224fu, 0x0000224au, 0x00002254u, 0x00002251u, 0x000300f7u, 0x00002256u, 0x00000000u, 0x000400fau, 0x00002255u, 0x00002257u, 0x00002256u, 0x000200f8u, 0x00002257u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x00002256u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000559u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x0000221bu, 0x0003003eu, 0x000020ecu, 0x00002405u, 0x0003003eu, 0x000020edu, 0x00002407u, 0x0003003eu, 0x000020eeu, 0x00007efeu, 0x00040072u, 0x00000012u, 0x00002925u, 0x00007efeu, 0x0004007cu, 0x00000011u, 0x00002926u, 0x00002925u, 0x000500c4u, 0x00000011u, 0x00002927u, 0x00002926u, 0x000005f7u, 0x00070050u, 0x00000028u, 0x00002928u, 0x00002927u, 0x00002927u, 0x00002927u, 0x00002927u, 0x00050080u, 0x00000028u, 0x00002929u, 0x000005f3u, 0x00002928u, 0x0003003eu, 0x0000291au, 0x00002929u, 0x0009004fu, 0x00000028u, 0x0000292cu, 0x00002405u, 0x00002405u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b0u, 0x000005fbu, 0x0000292du, 0x00002929u, 0x0000292cu, 0x0003003eu, 0x0000291bu, 0x0000292du, 0x0009004fu, 0x00000028u, 0x00002930u, 0x00002405u, 0x00002405u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b0u, 0x000005fbu, 0x00002931u, 0x00002929u, 0x00002930u, 0x0003003eu, 0x0000291cu, 0x00002931u, 0x0009004fu, 0x00000028u, 0x00002934u, 0x00002407u, 0x00002407u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500aeu, 0x000005fbu, 0x00002935u, 0x00002929u, 0x00002934u, 0x0003003eu, 0x0000291du, 0x00002935u, 0x0009004fu, 0x00000028u, 0x00002938u, 0x00002407u, 0x00002407u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500aeu, 0x000005fbu, 0x00002939u, 0x00002929u, 0x00002938u, 0x0003003eu, 0x0000291eu, 0x00002939u, 0x000600a9u, 0x00000010u, 0x0000293bu, 0x0000292du, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x0000293du, 0x00002935u, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x0000293eu, 0x0000293bu, 0x0000293du, 0x0003003eu, 0x0000291fu, 0x0000293eu, 0x000600a9u, 0x00000010u, 0x00002940u, 0x00002931u, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x00002942u, 0x00002939u, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x00002943u, 0x00002940u, 0x00002942u, 0x0003003eu, 0x00002920u, 0x00002943u, 0x00050084u, 0x00000010u, 0x00002945u, 0x0000293eu, 0x00000622u, 0x00050084u, 0x00000010u, 0x00002947u, 0x00002943u, 0x00000629u, 0x00050080u, 0x00000010u, 0x00002948u, 0x00002945u, 0x00002947u, 0x0003003eu, 0x00002921u, 0x00002948u, 0x00050041u, 0x0000007bu, 0x00002949u, 0x00002921u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000294au, 0x00002949u, 0x00050041u, 0x0000007bu, 0x0000294bu, 0x00002921u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000294cu, 0x0000294bu, 0x000500c5u, 0x0000000fu, 0x0000294du, 0x0000294au, 0x0000294cu, 0x00050041u, 0x0000007bu, 0x0000294eu, 0x00002921u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x0000294fu, 0x0000294eu, 0x00050041u, 0x0000007bu, 0x00002950u, 0x00002921u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00002951u, 0x00002950u, 0x000500c5u, 0x0000000fu, 0x00002952u, 0x0000294fu, 0x00002951u, 0x000500c5u, 0x0000000fu, 0x00002953u, 0x0000294du, 0x00002952u, 0x0003003eu, 0x00002922u, 0x00002953u, 0x000400c8u, 0x0000000fu, 0x00002955u, 0x00002953u, 0x000500c7u, 0x0000000fu, 0x00002956u, 0x00002955u, 0x0000046fu, 0x0003003eu, 0x00002923u, 0x00002956u, 0x00040071u, 0x00000006u, 0x0000226du, 0x00002956u, 0x0004007cu, 0x00000008u, 0x0000226eu, 0x0000226du, 0x0003003eu, 0x000020ebu, 0x0000226eu, 0x000500aau, 0x00000069u, 0x00002270u, 0x0000226eu, 0x00000220u, 0x000300f7u, 0x00002271u, 0x00000000u, 0x000400fau, 0x00002270u, 0x00002272u, 0x00002271u, 0x000200f8u, 0x00002272u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x00002271u, 0x000400cdu, 0x00000008u, 0x00002274u, 0x0000226eu, 0x0003003eu, 0x000020efu, 0x00002274u, 0x000400a8u, 0x00000069u, 0x00002276u, 0x000021deu, 0x000300f7u, 0x00002277u, 0x00000000u, 0x000400fau, 0x00002276u, 0x00002278u, 0x00002277u, 0x000200f8u, 0x00002278u, 0x000500c7u, 0x00000008u, 0x0000227au, 0x0000226eu, 0x0000022au, 0x000500aau, 0x00000069u, 0x0000227bu, 0x0000227au, 0x00000220u, 0x000200f9u, 0x00002277u, 0x000200f8u, 0x00002277u, 0x000700f5u, 0x00000069u, 0x0000227cu, 0x00002276u, 0x00002271u, 0x0000227bu, 0x00002278u, 0x000300f7u, 0x0000227du, 0x00000000u, 0x000400fau, 0x0000227cu, 0x0000227eu, 0x0000227du, 0x000200f8u, 0x0000227eu, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x0000227du, 0x0003003eu, 0x000020f1u, 0x00001f93u, 0x00060041u, 0x00000247u, 0x0000295au, 0x00000245u, 0x00000220u, 0x00001f93u, 0x0004003du, 0x00000241u, 0x0000295bu, 0x0000295au, 0x00050051u, 0x00000010u, 0x0000295cu, 0x0000295bu, 0x00000000u, 0x0003003eu, 0x00006ff6u, 0x0000295cu, 0x00050051u, 0x00000010u, 0x0000295eu, 0x0000295bu, 0x00000001u, 0x0003003eu, 0x00006ff7u, 0x0000295eu, 0x00050051u, 0x00000010u, 0x00002960u, 0x0000295bu, 0x00000002u, 0x0003003eu, 0x00006ff8u, 0x00002960u, 0x00050051u, 0x00000010u, 0x00002962u, 0x0000295bu, 0x00000003u, 0x0003003eu, 0x00006ff9u, 0x00002962u, 0x00050051u, 0x00000010u, 0x00002964u, 0x0000295bu, 0x00000004u, 0x0003003eu, 0x00006ffau, 0x00002964u, 0x00050051u, 0x00000010u, 0x00002966u, 0x0000295bu, 0x00000005u, 0x0003003eu, 0x00006ffbu, 0x00002966u, 0x00050051u, 0x00000010u, 0x00002968u, 0x0000295bu, 0x00000006u, 0x0003003eu, 0x00006ffcu, 0x00002968u, 0x00050051u, 0x00000010u, 0x0000296au, 0x0000295bu, 0x00000007u, 0x0003003eu, 0x00006ffdu, 0x0000296au, 0x00050051u, 0x00000010u, 0x0000296cu, 0x0000295bu, 0x00000008u, 0x0003003eu, 0x00006ffeu, 0x0000296cu, 0x00050051u, 0x00000010u, 0x0000296eu, 0x0000295bu, 0x00000009u, 0x0003003eu, 0x00006fffu, 0x0000296eu, 0x00050051u, 0x00000006u, 0x00002970u, 0x0000295bu, 0x0000000au, 0x0003003eu, 0x00007000u, 0x00002970u, 0x00050051u, 0x00000011u, 0x00002972u, 0x0000295bu, 0x0000000bu, 0x0003003eu, 0x00007001u, 0x00002972u, 0x00050051u, 0x0000000fu, 0x00002974u, 0x0000295bu, 0x0000000cu, 0x0003003eu, 0x00007002u, 0x00002974u, 0x00050051u, 0x0000000fu, 0x00002976u, 0x0000295bu, 0x0000000du, 0x0003003eu, 0x00007003u, 0x00002976u, 0x00050051u, 0x00000013u, 0x00002978u, 0x0000295bu, 0x0000000eu, 0x0003003eu, 0x00007004u, 0x00002978u, 0x00120050u, 0x00000014u, 0x00007014u, 0x0000295cu, 0x0000295eu, 0x00002960u, 0x00002962u, 0x00002964u, 0x00002966u, 0x00002968u, 0x0000296au, 0x0000296cu, 0x0000296eu, 0x00002970u, 0x00002972u, 0x00002974u, 0x00002976u, 0x00002978u, 0x0003003eu, 0x00007015u, 0x0000295cu, 0x0003003eu, 0x00007016u, 0x0000295eu, 0x0003003eu, 0x00007017u, 0x00002960u, 0x0003003eu, 0x00007018u, 0x00002962u, 0x0003003eu, 0x00007019u, 0x00002964u, 0x0003003eu, 0x0000701au, 0x00002966u, 0x0003003eu, 0x0000701bu, 0x00002968u, 0x0003003eu, 0x0000701cu, 0x0000296au, 0x0003003eu, 0x0000701du, 0x0000296cu, 0x0003003eu, 0x0000701eu, 0x0000296eu, 0x0003003eu, 0x0000701fu, 0x00002970u, 0x0003003eu, 0x00007020u, 0x00002972u, 0x0003003eu, 0x00007021u, 0x00002974u, 0x0003003eu, 0x00007022u, 0x00002976u, 0x0003003eu, 0x00007023u, 0x00002978u, 0x0003003eu, 0x00007239u, 0x0000295cu, 0x0003003eu, 0x0000723au, 0x0000295eu, 0x0003003eu, 0x0000723bu, 0x00002960u, 0x0003003eu, 0x0000723cu, 0x00002962u, 0x0003003eu, 0x0000723du, 0x00002964u, 0x0003003eu, 0x0000723eu, 0x00002966u, 0x0003003eu, 0x0000723fu, 0x00002968u, 0x0003003eu, 0x00007240u, 0x0000296au, 0x0003003eu, 0x00007241u, 0x0000296eu, 0x0003003eu, 0x00007242u, 0x00002976u, 0x0003003eu, 0x00007243u, 0x00002978u, 0x00050082u, 0x00000008u, 0x00002284u, 0x00007efeu, 0x00002409u, 0x0003003eu, 0x000020f2u, 0x00002284u, 0x000600a9u, 0x00000008u, 0x00002286u, 0x00002219u, 0x0000022au, 0x00000cd7u, 0x0003003eu, 0x000020f3u, 0x00002286u, 0x0003003eu, 0x000020f5u, 0x00002401u, 0x0003003eu, 0x000020f6u, 0x0000241bu, 0x0003003eu, 0x000020f7u, 0x0000241fu, 0x0003003eu, 0x000020f8u, 0x00002284u, 0x0003003eu, 0x000020f9u, 0x0000226eu, 0x000500c7u, 0x00000009u, 0x00002983u, 0x0000241bu, 0x0000f373u, 0x00070050u, 0x00000009u, 0x00002984u, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000009u, 0x00002985u, 0x00002983u, 0x00002984u, 0x00070050u, 0x00000009u, 0x00002987u, 0x00002284u, 0x00002284u, 0x00002284u, 0x00002284u, 0x00050084u, 0x00000009u, 0x00002988u, 0x00002985u, 0x00002987u, 0x00050080u, 0x00000009u, 0x0000298au, 0x00002401u, 0x00002988u, 0x0003003eu, 0x000020f5u, 0x0000298au, 0x000500c3u, 0x00000009u, 0x0000298du, 0x0000298au, 0x0000f374u, 0x00040072u, 0x00000013u, 0x0000298eu, 0x0000298du, 0x0003003eu, 0x0000297bu, 0x0000298eu, 0x0006000cu, 0x00000008u, 0x00002990u, 0x00000001u, 0x00000049u, 0x0000226eu, 0x0003003eu, 0x0000297cu, 0x00002990u, 0x000500c3u, 0x00000008u, 0x00002992u, 0x00002990u, 0x0000022au, 0x00040072u, 0x00000012u, 0x00002993u, 0x00002992u, 0x0003003eu, 0x0000297du, 0x00002993u, 0x000500c7u, 0x00000008u, 0x00002995u, 0x00002990u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00002996u, 0x00002995u, 0x0000022au, 0x00040072u, 0x00000012u, 0x00002997u, 0x00002996u, 0x000500c7u, 0x00000012u, 0x00002999u, 0x00002993u, 0x000004c8u, 0x00050080u, 0x00000012u, 0x0000299au, 0x00002997u, 0x00002999u, 0x0003003eu, 0x0000297eu, 0x0000299au, 0x00070050u, 0x00000013u, 0x0000299cu, 0x00000c94u, 0x00000c94u, 0x00000c94u, 0x00000c94u, 0x000500c4u, 0x00000013u, 0x0000299du, 0x0000298eu, 0x0000299cu, 0x0003003eu, 0x0000297bu, 0x0000299du, 0x000500c3u, 0x00000009u, 0x000029a1u, 0x0000241bu, 0x0000f374u, 0x00040072u, 0x00000013u, 0x000029a2u, 0x000029a1u, 0x00070050u, 0x00000013u, 0x000029a3u, 0x0000299au, 0x0000299au, 0x0000299au, 0x0000299au, 0x00050084u, 0x00000013u, 0x000029a4u, 0x000029a3u, 0x000029a2u, 0x000500c3u, 0x00000009u, 0x000029a8u, 0x0000241fu, 0x0000f374u, 0x00040072u, 0x00000013u, 0x000029a9u, 0x000029a8u, 0x00070050u, 0x00000013u, 0x000029aau, 0x00002993u, 0x00002993u, 0x00002993u, 0x00002993u, 0x00050084u, 0x00000013u, 0x000029abu, 0x000029aau, 0x000029a9u, 0x00050080u, 0x00000013u, 0x000029acu, 0x000029a4u, 0x000029abu, 0x00050080u, 0x00000013u, 0x000029aeu, 0x0000299du, 0x000029acu, 0x0003003eu, 0x0000297bu, 0x000029aeu, 0x00070050u, 0x00000013u, 0x000029b0u, 0x00000caau, 0x00000caau, 0x00000caau, 0x00000caau, 0x000500c3u, 0x00000013u, 0x000029b1u, 0x000029aeu, 0x000029b0u, 0x0003003eu, 0x0000297bu, 0x000029b1u, 0x0003003eu, 0x0000297fu, 0x000029b1u, 0x00040072u, 0x00000009u, 0x000029b7u, 0x000029b1u, 0x0003003eu, 0x000029b4u, 0x000029b7u, 0x00050082u, 0x00000009u, 0x000029beu, 0x000029b7u, 0x0000f375u, 0x0003003eu, 0x000029b4u, 0x000029beu, 0x000600cau, 0x00000009u, 0x000029c0u, 0x000029beu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000029b4u, 0x000029c0u, 0x00050080u, 0x00000009u, 0x000029c3u, 0x000029c0u, 0x0000f375u, 0x0003003eu, 0x000029b4u, 0x000029c3u, 0x0008000cu, 0x00000009u, 0x000029c5u, 0x00000001u, 0x0000002du, 0x000029c3u, 0x00000afdu, 0x00000afeu, 0x00040072u, 0x00000013u, 0x000029c6u, 0x000029c5u, 0x0003003eu, 0x000029bbu, 0x000029c6u, 0x00040072u, 0x00000b07u, 0x000029b9u, 0x000029c6u, 0x0004007cu, 0x00000010u, 0x000029bau, 0x000029b9u, 0x0003003eu, 0x000029b5u, 0x000029bau, 0x0003003eu, 0x00002980u, 0x000029bau, 0x0003003eu, 0x000020f4u, 0x000029bau, 0x0003003eu, 0x000020fau, 0x00000536u, 0x0003003eu, 0x000020fbu, 0x00002286u, 0x000500a7u, 0x00000069u, 0x00002292u, 0x00001d45u, 0x000021ffu, 0x000300f7u, 0x00002293u, 0x00000000u, 0x000400fau, 0x00002292u, 0x00002294u, 0x00002293u, 0x000200f8u, 0x00002294u, 0x000500c7u, 0x00000006u, 0x00002296u, 0x00002189u, 0x00000a3cu, 0x000500abu, 0x00000069u, 0x00002297u, 0x00002296u, 0x0000032du, 0x000300f7u, 0x00002298u, 0x00000000u, 0x000400fau, 0x00002297u, 0x00002299u, 0x00002298u, 0x000200f8u, 0x00002299u, 0x00050084u, 0x00000008u, 0x0000229bu, 0x00002286u, 0x00000882u, 0x0003003eu, 0x000020fbu, 0x0000229bu, 0x000200f9u, 0x00002298u, 0x000200f8u, 0x00002298u, 0x000700f5u, 0x00000008u, 0x00007f30u, 0x00002286u, 0x00002294u, 0x0000229bu, 0x00002299u, 0x000200f9u, 0x00002293u, 0x000200f8u, 0x00002293u, 0x000700f5u, 0x00000008u, 0x00007f2fu, 0x00002286u, 0x0000227du, 0x00007f30u, 0x00002298u, 0x0003003eu, 0x00002100u, 0x00002403u, 0x0003003eu, 0x00002101u, 0x00002423u, 0x0003003eu, 0x00002102u, 0x00002427u, 0x0003003eu, 0x00002103u, 0x00002284u, 0x0003003eu, 0x00002104u, 0x0000226eu, 0x0003003eu, 0x00002105u, 0x000021d2u, 0x0003003eu, 0x00002106u, 0x000021ffu, 0x0003003eu, 0x00002107u, 0x00007f2fu, 0x0003003eu, 0x0000210cu, 0x00000536u, 0x0004003du, 0x00000009u, 0x000029d8u, 0x00002100u, 0x0008004fu, 0x00000044u, 0x000029d9u, 0x000029d8u, 0x000029d8u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x000029dau, 0x00002101u, 0x0008004fu, 0x00000044u, 0x000029dbu, 0x000029dau, 0x000029dau, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x000029ddu, 0x000029dbu, 0x0000f371u, 0x00060050u, 0x00000044u, 0x000029deu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000044u, 0x000029dfu, 0x000029ddu, 0x000029deu, 0x00060050u, 0x00000044u, 0x000029e1u, 0x00002284u, 0x00002284u, 0x00002284u, 0x00050084u, 0x00000044u, 0x000029e2u, 0x000029dfu, 0x000029e1u, 0x00050080u, 0x00000044u, 0x000029e3u, 0x000029d9u, 0x000029e2u, 0x0003003eu, 0x000029c7u, 0x000029e3u, 0x000300f7u, 0x000029e5u, 0x00000000u, 0x000400fau, 0x000021ffu, 0x000029e6u, 0x000029e5u, 0x000200f8u, 0x000029e6u, 0x0004003du, 0x00000009u, 0x000029e9u, 0x00002101u, 0x0008004fu, 0x00000044u, 0x000029eau, 0x000029e9u, 0x000029e9u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x000029ecu, 0x000029eau, 0x0000f371u, 0x000500c3u, 0x00000044u, 0x000029eeu, 0x000029ecu, 0x000029deu, 0x00060050u, 0x00000044u, 0x000029efu, 0x00007f2fu, 0x00007f2fu, 0x00007f2fu, 0x00050084u, 0x00000044u, 0x000029f0u, 0x000029efu, 0x000029eeu, 0x00050080u, 0x00000044u, 0x000029f1u, 0x000029e3u, 0x000029f0u, 0x0003003eu, 0x000029c8u, 0x000029f1u, 0x000300f7u, 0x000029f2u, 0x00000000u, 0x000400fau, 0x00000d36u, 0x000029f3u, 0x000029f4u, 0x000200f8u, 0x000029f4u, 0x0004003du, 0x00000009u, 0x00002a02u, 0x00002102u, 0x0008004fu, 0x00000044u, 0x00002a03u, 0x00002a02u, 0x00002a02u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00002a05u, 0x00002a03u, 0x0000f377u, 0x000500c3u, 0x00000044u, 0x00002a07u, 0x00002a05u, 0x000029deu, 0x00050080u, 0x00000044u, 0x00002a08u, 0x000029e3u, 0x00002a07u, 0x0003003eu, 0x000029c9u, 0x00002a08u, 0x000200f9u, 0x000029f2u, 0x000200f8u, 0x000029f3u, 0x0006000cu, 0x00000008u, 0x000029f7u, 0x00000001u, 0x00000005u, 0x00007f2fu, 0x0004003du, 0x00000009u, 0x000029f8u, 0x00002102u, 0x0008004fu, 0x00000044u, 0x000029f9u, 0x000029f8u, 0x000029f8u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x000029fbu, 0x000029f9u, 0x0000f377u, 0x000500c3u, 0x00000044u, 0x000029fdu, 0x000029fbu, 0x000029deu, 0x00060050u, 0x00000044u, 0x000029feu, 0x000029f7u, 0x000029f7u, 0x000029f7u, 0x00050084u, 0x00000044u, 0x000029ffu, 0x000029feu, 0x000029fdu, 0x00050080u, 0x00000044u, 0x00002a00u, 0x000029e3u, 0x000029ffu, 0x0003003eu, 0x000029c9u, 0x00002a00u, 0x000200f9u, 0x000029f2u, 0x000200f8u, 0x000029f2u, 0x000700f5u, 0x00000044u, 0x00007f55u, 0x00002a00u, 0x000029f3u, 0x00002a08u, 0x000029f4u, 0x000200f9u, 0x000029e5u, 0x000200f8u, 0x000029e5u, 0x000700f5u, 0x00000044u, 0x00007f48u, 0x00007f4eu, 0x00002293u, 0x00007f55u, 0x000029f2u, 0x000700f5u, 0x00000044u, 0x00007f39u, 0x00007f3fu, 0x00002293u, 0x000029f1u, 0x000029f2u, 0x000300f7u, 0x00002a0au, 0x00000000u, 0x000400fau, 0x000021d2u, 0x00002a0bu, 0x00002a0cu, 0x000200f8u, 0x00002a0cu, 0x000500c3u, 0x00000044u, 0x00002a24u, 0x000029e3u, 0x0000f372u, 0x0003003eu, 0x000029d0u, 0x00002a24u, 0x0007004fu, 0x000000efu, 0x00002bedu, 0x00002a24u, 0x00002a24u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002bebu, 0x00002bedu, 0x0003003eu, 0x00002108u, 0x00002bedu, 0x000300f7u, 0x00002a27u, 0x00000000u, 0x000400fau, 0x000021ffu, 0x00002a28u, 0x00002a27u, 0x000200f8u, 0x00002a28u, 0x000500c3u, 0x00000044u, 0x00002a2bu, 0x00007f39u, 0x0000f372u, 0x0003003eu, 0x000029d1u, 0x00002a2bu, 0x0007004fu, 0x000000efu, 0x00002bf0u, 0x00002a2bu, 0x00002a2bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002beeu, 0x00002bf0u, 0x0003003eu, 0x00002109u, 0x00002bf0u, 0x000500c3u, 0x00000044u, 0x00002a2fu, 0x00007f48u, 0x0000f372u, 0x0003003eu, 0x000029d2u, 0x00002a2fu, 0x0007004fu, 0x000000efu, 0x00002bf3u, 0x00002a2fu, 0x00002a2fu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002bf1u, 0x00002bf3u, 0x0003003eu, 0x0000210au, 0x00002bf3u, 0x000200f9u, 0x00002a27u, 0x000200f8u, 0x00002a27u, 0x000700f5u, 0x000000efu, 0x00008047u, 0x00008039u, 0x00002a0cu, 0x00002bf3u, 0x00002a28u, 0x000700f5u, 0x000000efu, 0x0000802du, 0x00008015u, 0x00002a0cu, 0x00002bf0u, 0x00002a28u, 0x000200f9u, 0x00002a0au, 0x000200f8u, 0x00002a0bu, 0x000500c3u, 0x00000044u, 0x00002a0fu, 0x000029e3u, 0x0000f372u, 0x0003003eu, 0x000029cau, 0x00002a0fu, 0x0003003eu, 0x000029cbu, 0x00000536u, 0x00050041u, 0x00000046u, 0x00002a69u, 0x000029cau, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a6au, 0x00002a69u, 0x0003003eu, 0x00002a5fu, 0x00002a6au, 0x000500b3u, 0x00000069u, 0x00002a6cu, 0x00002a6au, 0x00000220u, 0x0003003eu, 0x00002a60u, 0x00002a6cu, 0x000500c7u, 0x00000008u, 0x00002a6eu, 0x00002a6au, 0x00000c0du, 0x0003003eu, 0x00002a5fu, 0x00002a6eu, 0x0003003eu, 0x00002a62u, 0x00002a6eu, 0x0006000cu, 0x00000008u, 0x00002acau, 0x00000001u, 0x0000004au, 0x00002a6eu, 0x00050082u, 0x00000008u, 0x00002acbu, 0x0000026fu, 0x00002acau, 0x0007000cu, 0x00000008u, 0x00002accu, 0x00000001u, 0x00000027u, 0x00002acbu, 0x0000026fu, 0x0003003eu, 0x00002ac2u, 0x00002accu, 0x000500c4u, 0x00000008u, 0x00002acfu, 0x00002a6eu, 0x00002accu, 0x000500c7u, 0x00000008u, 0x00002ad0u, 0x00002acfu, 0x00000b29u, 0x0003003eu, 0x00002ac3u, 0x00002ad0u, 0x000500c7u, 0x00000008u, 0x00002ad2u, 0x00002ad0u, 0x0000035eu, 0x0003003eu, 0x00002ac4u, 0x00002ad2u, 0x000500c3u, 0x00000008u, 0x00002ad4u, 0x00002ad0u, 0x0000025du, 0x0003003eu, 0x00002ac6u, 0x00000bedu, 0x00050041u, 0x000001afu, 0x00002ad5u, 0x00002ac6u, 0x00002ad4u, 0x0004003du, 0x000001aeu, 0x00002ad6u, 0x00002ad5u, 0x00040072u, 0x000000efu, 0x00002ad7u, 0x00002ad6u, 0x0003003eu, 0x00002ac5u, 0x00002ad7u, 0x00050041u, 0x00000046u, 0x00002ad8u, 0x00002ac5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002ad9u, 0x00002ad8u, 0x00050084u, 0x00000008u, 0x00002adbu, 0x00002ad9u, 0x00002ad2u, 0x000500c3u, 0x00000008u, 0x00002adcu, 0x00002adbu, 0x00000263u, 0x00050041u, 0x00000046u, 0x00002addu, 0x00002ac5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002adeu, 0x00002addu, 0x00050080u, 0x00000008u, 0x00002adfu, 0x00002adcu, 0x00002adeu, 0x0003003eu, 0x00002ac7u, 0x00002adfu, 0x00050050u, 0x000000efu, 0x00002ae2u, 0x00002adfu, 0x00002accu, 0x0003003eu, 0x00002ac8u, 0x00002ae2u, 0x0003003eu, 0x00002a61u, 0x00002ae2u, 0x00050041u, 0x00000046u, 0x00002a71u, 0x00002a61u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002a72u, 0x00002a71u, 0x0003003eu, 0x00002a63u, 0x00002a72u, 0x0004003du, 0x00000044u, 0x00002a73u, 0x000029cau, 0x0007004fu, 0x000000efu, 0x00002a74u, 0x00002a73u, 0x00002a73u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00002a75u, 0x00002a61u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002a76u, 0x00002a75u, 0x00050050u, 0x000000efu, 0x00002a77u, 0x00002a76u, 0x00002a76u, 0x00050084u, 0x000000efu, 0x00002a78u, 0x00002a74u, 0x00002a77u, 0x0003003eu, 0x00002a64u, 0x00002a78u, 0x000500c3u, 0x00000008u, 0x00002a7au, 0x00000c20u, 0x00002a72u, 0x0004007eu, 0x00000008u, 0x00002a7bu, 0x00002a7au, 0x000500c7u, 0x00000008u, 0x00002a7cu, 0x00000c1fu, 0x00002a7bu, 0x0003003eu, 0x00002a65u, 0x00002a7cu, 0x0004003du, 0x000000efu, 0x00002a7du, 0x00002a64u, 0x00050050u, 0x000000efu, 0x00002a7fu, 0x00002a7cu, 0x00002a7cu, 0x000500c7u, 0x000000efu, 0x00002a80u, 0x00002a7du, 0x00002a7fu, 0x0003003eu, 0x00002a66u, 0x00002a80u, 0x000500abu, 0x00000069u, 0x00002a82u, 0x00002a72u, 0x0000026fu, 0x000300f7u, 0x00002a83u, 0x00000000u, 0x000400fau, 0x00002a82u, 0x00002a84u, 0x00002a85u, 0x000200f8u, 0x00002a85u, 0x0004003du, 0x000000efu, 0x00002a8bu, 0x00002a64u, 0x000500c4u, 0x000000efu, 0x00002a8du, 0x00002a8bu, 0x0000f376u, 0x0003003eu, 0x00002a67u, 0x00002a8du, 0x000200f9u, 0x00002a83u, 0x000200f8u, 0x00002a84u, 0x0004003du, 0x000000efu, 0x00002a86u, 0x00002a64u, 0x00050082u, 0x00000008u, 0x00002a88u, 0x0000026cu, 0x00002a72u, 0x00050050u, 0x000000efu, 0x00002a89u, 0x00002a88u, 0x00002a88u, 0x000500c3u, 0x000000efu, 0x00002a8au, 0x00002a86u, 0x00002a89u, 0x0003003eu, 0x00002a64u, 0x00002a8au, 0x0003003eu, 0x00002a67u, 0x00002a8au, 0x000200f9u, 0x00002a83u, 0x000200f8u, 0x00002a83u, 0x0004003du, 0x000000efu, 0x00002a8eu, 0x00002a66u, 0x000500abu, 0x0000087bu, 0x00002a8fu, 0x00002a8eu, 0x00000c39u, 0x0004009au, 0x00000069u, 0x00002a90u, 0x00002a8fu, 0x000300f7u, 0x00002a91u, 0x00000000u, 0x000400fau, 0x00002a90u, 0x00002a92u, 0x00002a91u, 0x000200f8u, 0x00002a92u, 0x00050041u, 0x00000046u, 0x00002a93u, 0x00002a66u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002a94u, 0x00002a93u, 0x000500abu, 0x00000069u, 0x00002a96u, 0x00002a94u, 0x00002a7cu, 0x000300f7u, 0x00002a97u, 0x00000000u, 0x000400fau, 0x00002a96u, 0x00002a98u, 0x00002a97u, 0x000200f8u, 0x00002a98u, 0x0004003du, 0x00000008u, 0x00002a9au, 0x00002a93u, 0x000500abu, 0x00000069u, 0x00002a9bu, 0x00002a9au, 0x00000220u, 0x000200f9u, 0x00002a97u, 0x000200f8u, 0x00002a97u, 0x000700f5u, 0x00000069u, 0x00002a9cu, 0x00002a96u, 0x00002a92u, 0x00002a9bu, 0x00002a98u, 0x000300f7u, 0x00002a9du, 0x00000000u, 0x000400fau, 0x00002a9cu, 0x00002a9eu, 0x00002a9du, 0x000200f8u, 0x00002a9eu, 0x00050041u, 0x00000046u, 0x00002a9fu, 0x00002a64u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002aa0u, 0x00002a9fu, 0x000500c7u, 0x00000008u, 0x00002aa1u, 0x00002aa0u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00002aa2u, 0x00002aa1u, 0x00000220u, 0x000300f7u, 0x00002aa3u, 0x00000000u, 0x000400fau, 0x00002aa2u, 0x00002aa4u, 0x00002aa5u, 0x000200f8u, 0x00002aa5u, 0x00050041u, 0x00000046u, 0x00002aa7u, 0x00002a67u, 0x0000032du, 0x0003003eu, 0x00002aa7u, 0x00000c52u, 0x000200f9u, 0x00002aa3u, 0x000200f8u, 0x00002aa4u, 0x00050041u, 0x00000046u, 0x00002aa6u, 0x00002a67u, 0x0000032du, 0x0003003eu, 0x00002aa6u, 0x00000c0du, 0x000200f9u, 0x00002aa3u, 0x000200f8u, 0x00002aa3u, 0x0003003eu, 0x000029cbu, 0x00000559u, 0x000200f9u, 0x00002a9du, 0x000200f8u, 0x00002a9du, 0x000600a9u, 0x00000069u, 0x0000f393u, 0x00002a9cu, 0x00000559u, 0x00000536u, 0x00050041u, 0x00000046u, 0x00002aa8u, 0x00002a66u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002aa9u, 0x00002aa8u, 0x000500abu, 0x00000069u, 0x00002aabu, 0x00002aa9u, 0x00002a7cu, 0x000300f7u, 0x00002aacu, 0x00000000u, 0x000400fau, 0x00002aabu, 0x00002aadu, 0x00002aacu, 0x000200f8u, 0x00002aadu, 0x0004003du, 0x00000008u, 0x00002aafu, 0x00002aa8u, 0x000500abu, 0x00000069u, 0x00002ab0u, 0x00002aafu, 0x00000220u, 0x000200f9u, 0x00002aacu, 0x000200f8u, 0x00002aacu, 0x000700f5u, 0x00000069u, 0x00002ab1u, 0x00002aabu, 0x00002a9du, 0x00002ab0u, 0x00002aadu, 0x000300f7u, 0x00002ab2u, 0x00000000u, 0x000400fau, 0x00002ab1u, 0x00002ab3u, 0x00002ab2u, 0x000200f8u, 0x00002ab3u, 0x00050041u, 0x00000046u, 0x00002ab4u, 0x00002a64u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002ab5u, 0x00002ab4u, 0x000500c7u, 0x00000008u, 0x00002ab6u, 0x00002ab5u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00002ab7u, 0x00002ab6u, 0x00000220u, 0x000300f7u, 0x00002ab8u, 0x00000000u, 0x000400fau, 0x00002ab7u, 0x00002ab9u, 0x00002abau, 0x000200f8u, 0x00002abau, 0x00050041u, 0x00000046u, 0x00002abcu, 0x00002a67u, 0x0000045cu, 0x0003003eu, 0x00002abcu, 0x00000c52u, 0x000200f9u, 0x00002ab8u, 0x000200f8u, 0x00002ab9u, 0x00050041u, 0x00000046u, 0x00002abbu, 0x00002a67u, 0x0000045cu, 0x0003003eu, 0x00002abbu, 0x00000c0du, 0x000200f9u, 0x00002ab8u, 0x000200f8u, 0x00002ab8u, 0x0003003eu, 0x000029cbu, 0x00000559u, 0x000200f9u, 0x00002ab2u, 0x000200f8u, 0x00002ab2u, 0x000600a9u, 0x00000069u, 0x0000f394u, 0x00002ab1u, 0x00000559u, 0x0000f393u, 0x000200f9u, 0x00002a91u, 0x000200f8u, 0x00002a91u, 0x000700f5u, 0x00000069u, 0x00007f65u, 0x00000536u, 0x00002a83u, 0x0000f394u, 0x00002ab2u, 0x000300f7u, 0x00002abeu, 0x00000000u, 0x000400fau, 0x00002a6cu, 0x00002abfu, 0x00002abeu, 0x000200f8u, 0x00002abfu, 0x0003003eu, 0x00002a67u, 0x00000c6cu, 0x0003003eu, 0x000029cbu, 0x00000559u, 0x000200f9u, 0x00002abeu, 0x000200f8u, 0x00002abeu, 0x000600a9u, 0x00000069u, 0x0000f395u, 0x00002a6cu, 0x00000559u, 0x00007f65u, 0x0004003du, 0x000000efu, 0x00002ac0u, 0x00002a67u, 0x0008000cu, 0x000000efu, 0x00002ac1u, 0x00000001u, 0x0000002du, 0x00002ac0u, 0x00000c6fu, 0x00000c70u, 0x0003003eu, 0x00002a68u, 0x00002ac1u, 0x0003003eu, 0x0000210cu, 0x0000f395u, 0x0003003eu, 0x00002108u, 0x00002ac1u, 0x000300f7u, 0x00002a14u, 0x00000000u, 0x000400fau, 0x000021ffu, 0x00002a15u, 0x00002a14u, 0x000200f8u, 0x00002a15u, 0x000500c3u, 0x00000044u, 0x00002a18u, 0x00007f39u, 0x0000f372u, 0x0003003eu, 0x000029ccu, 0x00002a18u, 0x0003003eu, 0x000029cdu, 0x0000f395u, 0x00050041u, 0x00000046u, 0x00002aedu, 0x000029ccu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002aeeu, 0x00002aedu, 0x0003003eu, 0x00002ae3u, 0x00002aeeu, 0x000500b3u, 0x00000069u, 0x00002af0u, 0x00002aeeu, 0x00000220u, 0x0003003eu, 0x00002ae4u, 0x00002af0u, 0x000500c7u, 0x00000008u, 0x00002af2u, 0x00002aeeu, 0x00000c0du, 0x0003003eu, 0x00002ae3u, 0x00002af2u, 0x0003003eu, 0x00002ae6u, 0x00002af2u, 0x0006000cu, 0x00000008u, 0x00002b4eu, 0x00000001u, 0x0000004au, 0x00002af2u, 0x00050082u, 0x00000008u, 0x00002b4fu, 0x0000026fu, 0x00002b4eu, 0x0007000cu, 0x00000008u, 0x00002b50u, 0x00000001u, 0x00000027u, 0x00002b4fu, 0x0000026fu, 0x0003003eu, 0x00002b46u, 0x00002b50u, 0x000500c4u, 0x00000008u, 0x00002b53u, 0x00002af2u, 0x00002b50u, 0x000500c7u, 0x00000008u, 0x00002b54u, 0x00002b53u, 0x00000b29u, 0x0003003eu, 0x00002b47u, 0x00002b54u, 0x000500c7u, 0x00000008u, 0x00002b56u, 0x00002b54u, 0x0000035eu, 0x0003003eu, 0x00002b48u, 0x00002b56u, 0x000500c3u, 0x00000008u, 0x00002b58u, 0x00002b54u, 0x0000025du, 0x0003003eu, 0x00002b4au, 0x00000bedu, 0x00050041u, 0x000001afu, 0x00002b59u, 0x00002b4au, 0x00002b58u, 0x0004003du, 0x000001aeu, 0x00002b5au, 0x00002b59u, 0x00040072u, 0x000000efu, 0x00002b5bu, 0x00002b5au, 0x0003003eu, 0x00002b49u, 0x00002b5bu, 0x00050041u, 0x00000046u, 0x00002b5cu, 0x00002b49u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b5du, 0x00002b5cu, 0x00050084u, 0x00000008u, 0x00002b5fu, 0x00002b5du, 0x00002b56u, 0x000500c3u, 0x00000008u, 0x00002b60u, 0x00002b5fu, 0x00000263u, 0x00050041u, 0x00000046u, 0x00002b61u, 0x00002b49u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b62u, 0x00002b61u, 0x00050080u, 0x00000008u, 0x00002b63u, 0x00002b60u, 0x00002b62u, 0x0003003eu, 0x00002b4bu, 0x00002b63u, 0x00050050u, 0x000000efu, 0x00002b66u, 0x00002b63u, 0x00002b50u, 0x0003003eu, 0x00002b4cu, 0x00002b66u, 0x0003003eu, 0x00002ae5u, 0x00002b66u, 0x00050041u, 0x00000046u, 0x00002af5u, 0x00002ae5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002af6u, 0x00002af5u, 0x0003003eu, 0x00002ae7u, 0x00002af6u, 0x0004003du, 0x00000044u, 0x00002af7u, 0x000029ccu, 0x0007004fu, 0x000000efu, 0x00002af8u, 0x00002af7u, 0x00002af7u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00002af9u, 0x00002ae5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002afau, 0x00002af9u, 0x00050050u, 0x000000efu, 0x00002afbu, 0x00002afau, 0x00002afau, 0x00050084u, 0x000000efu, 0x00002afcu, 0x00002af8u, 0x00002afbu, 0x0003003eu, 0x00002ae8u, 0x00002afcu, 0x000500c3u, 0x00000008u, 0x00002afeu, 0x00000c20u, 0x00002af6u, 0x0004007eu, 0x00000008u, 0x00002affu, 0x00002afeu, 0x000500c7u, 0x00000008u, 0x00002b00u, 0x00000c1fu, 0x00002affu, 0x0003003eu, 0x00002ae9u, 0x00002b00u, 0x0004003du, 0x000000efu, 0x00002b01u, 0x00002ae8u, 0x00050050u, 0x000000efu, 0x00002b03u, 0x00002b00u, 0x00002b00u, 0x000500c7u, 0x000000efu, 0x00002b04u, 0x00002b01u, 0x00002b03u, 0x0003003eu, 0x00002aeau, 0x00002b04u, 0x000500abu, 0x00000069u, 0x00002b06u, 0x00002af6u, 0x0000026fu, 0x000300f7u, 0x00002b07u, 0x00000000u, 0x000400fau, 0x00002b06u, 0x00002b08u, 0x00002b09u, 0x000200f8u, 0x00002b09u, 0x0004003du, 0x000000efu, 0x00002b0fu, 0x00002ae8u, 0x000500c4u, 0x000000efu, 0x00002b11u, 0x00002b0fu, 0x0000f376u, 0x0003003eu, 0x00002aebu, 0x00002b11u, 0x000200f9u, 0x00002b07u, 0x000200f8u, 0x00002b08u, 0x0004003du, 0x000000efu, 0x00002b0au, 0x00002ae8u, 0x00050082u, 0x00000008u, 0x00002b0cu, 0x0000026cu, 0x00002af6u, 0x00050050u, 0x000000efu, 0x00002b0du, 0x00002b0cu, 0x00002b0cu, 0x000500c3u, 0x000000efu, 0x00002b0eu, 0x00002b0au, 0x00002b0du, 0x0003003eu, 0x00002ae8u, 0x00002b0eu, 0x0003003eu, 0x00002aebu, 0x00002b0eu, 0x000200f9u, 0x00002b07u, 0x000200f8u, 0x00002b07u, 0x0004003du, 0x000000efu, 0x00002b12u, 0x00002aeau, 0x000500abu, 0x0000087bu, 0x00002b13u, 0x00002b12u, 0x00000c39u, 0x0004009au, 0x00000069u, 0x00002b14u, 0x00002b13u, 0x000300f7u, 0x00002b15u, 0x00000000u, 0x000400fau, 0x00002b14u, 0x00002b16u, 0x00002b15u, 0x000200f8u, 0x00002b16u, 0x00050041u, 0x00000046u, 0x00002b17u, 0x00002aeau, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b18u, 0x00002b17u, 0x000500abu, 0x00000069u, 0x00002b1au, 0x00002b18u, 0x00002b00u, 0x000300f7u, 0x00002b1bu, 0x00000000u, 0x000400fau, 0x00002b1au, 0x00002b1cu, 0x00002b1bu, 0x000200f8u, 0x00002b1cu, 0x0004003du, 0x00000008u, 0x00002b1eu, 0x00002b17u, 0x000500abu, 0x00000069u, 0x00002b1fu, 0x00002b1eu, 0x00000220u, 0x000200f9u, 0x00002b1bu, 0x000200f8u, 0x00002b1bu, 0x000700f5u, 0x00000069u, 0x00002b20u, 0x00002b1au, 0x00002b16u, 0x00002b1fu, 0x00002b1cu, 0x000300f7u, 0x00002b21u, 0x00000000u, 0x000400fau, 0x00002b20u, 0x00002b22u, 0x00002b21u, 0x000200f8u, 0x00002b22u, 0x00050041u, 0x00000046u, 0x00002b23u, 0x00002ae8u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b24u, 0x00002b23u, 0x000500c7u, 0x00000008u, 0x00002b25u, 0x00002b24u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00002b26u, 0x00002b25u, 0x00000220u, 0x000300f7u, 0x00002b27u, 0x00000000u, 0x000400fau, 0x00002b26u, 0x00002b28u, 0x00002b29u, 0x000200f8u, 0x00002b29u, 0x00050041u, 0x00000046u, 0x00002b2bu, 0x00002aebu, 0x0000032du, 0x0003003eu, 0x00002b2bu, 0x00000c52u, 0x000200f9u, 0x00002b27u, 0x000200f8u, 0x00002b28u, 0x00050041u, 0x00000046u, 0x00002b2au, 0x00002aebu, 0x0000032du, 0x0003003eu, 0x00002b2au, 0x00000c0du, 0x000200f9u, 0x00002b27u, 0x000200f8u, 0x00002b27u, 0x0003003eu, 0x000029cdu, 0x00000559u, 0x000200f9u, 0x00002b21u, 0x000200f8u, 0x00002b21u, 0x000600a9u, 0x00000069u, 0x0000f396u, 0x00002b20u, 0x00000559u, 0x0000f395u, 0x00050041u, 0x00000046u, 0x00002b2cu, 0x00002aeau, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b2du, 0x00002b2cu, 0x000500abu, 0x00000069u, 0x00002b2fu, 0x00002b2du, 0x00002b00u, 0x000300f7u, 0x00002b30u, 0x00000000u, 0x000400fau, 0x00002b2fu, 0x00002b31u, 0x00002b30u, 0x000200f8u, 0x00002b31u, 0x0004003du, 0x00000008u, 0x00002b33u, 0x00002b2cu, 0x000500abu, 0x00000069u, 0x00002b34u, 0x00002b33u, 0x00000220u, 0x000200f9u, 0x00002b30u, 0x000200f8u, 0x00002b30u, 0x000700f5u, 0x00000069u, 0x00002b35u, 0x00002b2fu, 0x00002b21u, 0x00002b34u, 0x00002b31u, 0x000300f7u, 0x00002b36u, 0x00000000u, 0x000400fau, 0x00002b35u, 0x00002b37u, 0x00002b36u, 0x000200f8u, 0x00002b37u, 0x00050041u, 0x00000046u, 0x00002b38u, 0x00002ae8u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b39u, 0x00002b38u, 0x000500c7u, 0x00000008u, 0x00002b3au, 0x00002b39u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00002b3bu, 0x00002b3au, 0x00000220u, 0x000300f7u, 0x00002b3cu, 0x00000000u, 0x000400fau, 0x00002b3bu, 0x00002b3du, 0x00002b3eu, 0x000200f8u, 0x00002b3eu, 0x00050041u, 0x00000046u, 0x00002b40u, 0x00002aebu, 0x0000045cu, 0x0003003eu, 0x00002b40u, 0x00000c52u, 0x000200f9u, 0x00002b3cu, 0x000200f8u, 0x00002b3du, 0x00050041u, 0x00000046u, 0x00002b3fu, 0x00002aebu, 0x0000045cu, 0x0003003eu, 0x00002b3fu, 0x00000c0du, 0x000200f9u, 0x00002b3cu, 0x000200f8u, 0x00002b3cu, 0x0003003eu, 0x000029cdu, 0x00000559u, 0x000200f9u, 0x00002b36u, 0x000200f8u, 0x00002b36u, 0x000600a9u, 0x00000069u, 0x0000f397u, 0x00002b35u, 0x00000559u, 0x0000f396u, 0x000200f9u, 0x00002b15u, 0x000200f8u, 0x00002b15u, 0x000700f5u, 0x00000069u, 0x00007f8au, 0x0000f395u, 0x00002b07u, 0x0000f397u, 0x00002b36u, 0x000300f7u, 0x00002b42u, 0x00000000u, 0x000400fau, 0x00002af0u, 0x00002b43u, 0x00002b42u, 0x000200f8u, 0x00002b43u, 0x0003003eu, 0x00002aebu, 0x00000c6cu, 0x0003003eu, 0x000029cdu, 0x00000559u, 0x000200f9u, 0x00002b42u, 0x000200f8u, 0x00002b42u, 0x000600a9u, 0x00000069u, 0x0000f398u, 0x00002af0u, 0x00000559u, 0x00007f8au, 0x0004003du, 0x000000efu, 0x00002b44u, 0x00002aebu, 0x0008000cu, 0x000000efu, 0x00002b45u, 0x00000001u, 0x0000002du, 0x00002b44u, 0x00000c6fu, 0x00000c70u, 0x0003003eu, 0x00002aecu, 0x00002b45u, 0x0003003eu, 0x0000210cu, 0x0000f398u, 0x0003003eu, 0x00002109u, 0x00002b45u, 0x000500c3u, 0x00000044u, 0x00002a1eu, 0x00007f48u, 0x0000f372u, 0x0003003eu, 0x000029ceu, 0x00002a1eu, 0x0003003eu, 0x000029cfu, 0x0000f398u, 0x00050041u, 0x00000046u, 0x00002b71u, 0x000029ceu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002b72u, 0x00002b71u, 0x0003003eu, 0x00002b67u, 0x00002b72u, 0x000500b3u, 0x00000069u, 0x00002b74u, 0x00002b72u, 0x00000220u, 0x0003003eu, 0x00002b68u, 0x00002b74u, 0x000500c7u, 0x00000008u, 0x00002b76u, 0x00002b72u, 0x00000c0du, 0x0003003eu, 0x00002b67u, 0x00002b76u, 0x0003003eu, 0x00002b6au, 0x00002b76u, 0x0006000cu, 0x00000008u, 0x00002bd2u, 0x00000001u, 0x0000004au, 0x00002b76u, 0x00050082u, 0x00000008u, 0x00002bd3u, 0x0000026fu, 0x00002bd2u, 0x0007000cu, 0x00000008u, 0x00002bd4u, 0x00000001u, 0x00000027u, 0x00002bd3u, 0x0000026fu, 0x0003003eu, 0x00002bcau, 0x00002bd4u, 0x000500c4u, 0x00000008u, 0x00002bd7u, 0x00002b76u, 0x00002bd4u, 0x000500c7u, 0x00000008u, 0x00002bd8u, 0x00002bd7u, 0x00000b29u, 0x0003003eu, 0x00002bcbu, 0x00002bd8u, 0x000500c7u, 0x00000008u, 0x00002bdau, 0x00002bd8u, 0x0000035eu, 0x0003003eu, 0x00002bccu, 0x00002bdau, 0x000500c3u, 0x00000008u, 0x00002bdcu, 0x00002bd8u, 0x0000025du, 0x0003003eu, 0x00002bceu, 0x00000bedu, 0x00050041u, 0x000001afu, 0x00002bddu, 0x00002bceu, 0x00002bdcu, 0x0004003du, 0x000001aeu, 0x00002bdeu, 0x00002bddu, 0x00040072u, 0x000000efu, 0x00002bdfu, 0x00002bdeu, 0x0003003eu, 0x00002bcdu, 0x00002bdfu, 0x00050041u, 0x00000046u, 0x00002be0u, 0x00002bcdu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002be1u, 0x00002be0u, 0x00050084u, 0x00000008u, 0x00002be3u, 0x00002be1u, 0x00002bdau, 0x000500c3u, 0x00000008u, 0x00002be4u, 0x00002be3u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00002be5u, 0x00002bcdu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002be6u, 0x00002be5u, 0x00050080u, 0x00000008u, 0x00002be7u, 0x00002be4u, 0x00002be6u, 0x0003003eu, 0x00002bcfu, 0x00002be7u, 0x00050050u, 0x000000efu, 0x00002beau, 0x00002be7u, 0x00002bd4u, 0x0003003eu, 0x00002bd0u, 0x00002beau, 0x0003003eu, 0x00002b69u, 0x00002beau, 0x00050041u, 0x00000046u, 0x00002b79u, 0x00002b69u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b7au, 0x00002b79u, 0x0003003eu, 0x00002b6bu, 0x00002b7au, 0x0004003du, 0x00000044u, 0x00002b7bu, 0x000029ceu, 0x0007004fu, 0x000000efu, 0x00002b7cu, 0x00002b7bu, 0x00002b7bu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00002b7du, 0x00002b69u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b7eu, 0x00002b7du, 0x00050050u, 0x000000efu, 0x00002b7fu, 0x00002b7eu, 0x00002b7eu, 0x00050084u, 0x000000efu, 0x00002b80u, 0x00002b7cu, 0x00002b7fu, 0x0003003eu, 0x00002b6cu, 0x00002b80u, 0x000500c3u, 0x00000008u, 0x00002b82u, 0x00000c20u, 0x00002b7au, 0x0004007eu, 0x00000008u, 0x00002b83u, 0x00002b82u, 0x000500c7u, 0x00000008u, 0x00002b84u, 0x00000c1fu, 0x00002b83u, 0x0003003eu, 0x00002b6du, 0x00002b84u, 0x0004003du, 0x000000efu, 0x00002b85u, 0x00002b6cu, 0x00050050u, 0x000000efu, 0x00002b87u, 0x00002b84u, 0x00002b84u, 0x000500c7u, 0x000000efu, 0x00002b88u, 0x00002b85u, 0x00002b87u, 0x0003003eu, 0x00002b6eu, 0x00002b88u, 0x000500abu, 0x00000069u, 0x00002b8au, 0x00002b7au, 0x0000026fu, 0x000300f7u, 0x00002b8bu, 0x00000000u, 0x000400fau, 0x00002b8au, 0x00002b8cu, 0x00002b8du, 0x000200f8u, 0x00002b8du, 0x0004003du, 0x000000efu, 0x00002b93u, 0x00002b6cu, 0x000500c4u, 0x000000efu, 0x00002b95u, 0x00002b93u, 0x0000f376u, 0x0003003eu, 0x00002b6fu, 0x00002b95u, 0x000200f9u, 0x00002b8bu, 0x000200f8u, 0x00002b8cu, 0x0004003du, 0x000000efu, 0x00002b8eu, 0x00002b6cu, 0x00050082u, 0x00000008u, 0x00002b90u, 0x0000026cu, 0x00002b7au, 0x00050050u, 0x000000efu, 0x00002b91u, 0x00002b90u, 0x00002b90u, 0x000500c3u, 0x000000efu, 0x00002b92u, 0x00002b8eu, 0x00002b91u, 0x0003003eu, 0x00002b6cu, 0x00002b92u, 0x0003003eu, 0x00002b6fu, 0x00002b92u, 0x000200f9u, 0x00002b8bu, 0x000200f8u, 0x00002b8bu, 0x0004003du, 0x000000efu, 0x00002b96u, 0x00002b6eu, 0x000500abu, 0x0000087bu, 0x00002b97u, 0x00002b96u, 0x00000c39u, 0x0004009au, 0x00000069u, 0x00002b98u, 0x00002b97u, 0x000300f7u, 0x00002b99u, 0x00000000u, 0x000400fau, 0x00002b98u, 0x00002b9au, 0x00002b99u, 0x000200f8u, 0x00002b9au, 0x00050041u, 0x00000046u, 0x00002b9bu, 0x00002b6eu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b9cu, 0x00002b9bu, 0x000500abu, 0x00000069u, 0x00002b9eu, 0x00002b9cu, 0x00002b84u, 0x000300f7u, 0x00002b9fu, 0x00000000u, 0x000400fau, 0x00002b9eu, 0x00002ba0u, 0x00002b9fu, 0x000200f8u, 0x00002ba0u, 0x0004003du, 0x00000008u, 0x00002ba2u, 0x00002b9bu, 0x000500abu, 0x00000069u, 0x00002ba3u, 0x00002ba2u, 0x00000220u, 0x000200f9u, 0x00002b9fu, 0x000200f8u, 0x00002b9fu, 0x000700f5u, 0x00000069u, 0x00002ba4u, 0x00002b9eu, 0x00002b9au, 0x00002ba3u, 0x00002ba0u, 0x000300f7u, 0x00002ba5u, 0x00000000u, 0x000400fau, 0x00002ba4u, 0x00002ba6u, 0x00002ba5u, 0x000200f8u, 0x00002ba6u, 0x00050041u, 0x00000046u, 0x00002ba7u, 0x00002b6cu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002ba8u, 0x00002ba7u, 0x000500c7u, 0x00000008u, 0x00002ba9u, 0x00002ba8u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00002baau, 0x00002ba9u, 0x00000220u, 0x000300f7u, 0x00002babu, 0x00000000u, 0x000400fau, 0x00002baau, 0x00002bacu, 0x00002badu, 0x000200f8u, 0x00002badu, 0x00050041u, 0x00000046u, 0x00002bafu, 0x00002b6fu, 0x0000032du, 0x0003003eu, 0x00002bafu, 0x00000c52u, 0x000200f9u, 0x00002babu, 0x000200f8u, 0x00002bacu, 0x00050041u, 0x00000046u, 0x00002baeu, 0x00002b6fu, 0x0000032du, 0x0003003eu, 0x00002baeu, 0x00000c0du, 0x000200f9u, 0x00002babu, 0x000200f8u, 0x00002babu, 0x0003003eu, 0x000029cfu, 0x00000559u, 0x000200f9u, 0x00002ba5u, 0x000200f8u, 0x00002ba5u, 0x000600a9u, 0x00000069u, 0x0000f399u, 0x00002ba4u, 0x00000559u, 0x0000f398u, 0x00050041u, 0x00000046u, 0x00002bb0u, 0x00002b6eu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002bb1u, 0x00002bb0u, 0x000500abu, 0x00000069u, 0x00002bb3u, 0x00002bb1u, 0x00002b84u, 0x000300f7u, 0x00002bb4u, 0x00000000u, 0x000400fau, 0x00002bb3u, 0x00002bb5u, 0x00002bb4u, 0x000200f8u, 0x00002bb5u, 0x0004003du, 0x00000008u, 0x00002bb7u, 0x00002bb0u, 0x000500abu, 0x00000069u, 0x00002bb8u, 0x00002bb7u, 0x00000220u, 0x000200f9u, 0x00002bb4u, 0x000200f8u, 0x00002bb4u, 0x000700f5u, 0x00000069u, 0x00002bb9u, 0x00002bb3u, 0x00002ba5u, 0x00002bb8u, 0x00002bb5u, 0x000300f7u, 0x00002bbau, 0x00000000u, 0x000400fau, 0x00002bb9u, 0x00002bbbu, 0x00002bbau, 0x000200f8u, 0x00002bbbu, 0x00050041u, 0x00000046u, 0x00002bbcu, 0x00002b6cu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002bbdu, 0x00002bbcu, 0x000500c7u, 0x00000008u, 0x00002bbeu, 0x00002bbdu, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00002bbfu, 0x00002bbeu, 0x00000220u, 0x000300f7u, 0x00002bc0u, 0x00000000u, 0x000400fau, 0x00002bbfu, 0x00002bc1u, 0x00002bc2u, 0x000200f8u, 0x00002bc2u, 0x00050041u, 0x00000046u, 0x00002bc4u, 0x00002b6fu, 0x0000045cu, 0x0003003eu, 0x00002bc4u, 0x00000c52u, 0x000200f9u, 0x00002bc0u, 0x000200f8u, 0x00002bc1u, 0x00050041u, 0x00000046u, 0x00002bc3u, 0x00002b6fu, 0x0000045cu, 0x0003003eu, 0x00002bc3u, 0x00000c0du, 0x000200f9u, 0x00002bc0u, 0x000200f8u, 0x00002bc0u, 0x0003003eu, 0x000029cfu, 0x00000559u, 0x000200f9u, 0x00002bbau, 0x000200f8u, 0x00002bbau, 0x000600a9u, 0x00000069u, 0x0000f39au, 0x00002bb9u, 0x00000559u, 0x0000f399u, 0x000200f9u, 0x00002b99u, 0x000200f8u, 0x00002b99u, 0x000700f5u, 0x00000069u, 0x00007fafu, 0x0000f398u, 0x00002b8bu, 0x0000f39au, 0x00002bbau, 0x000300f7u, 0x00002bc6u, 0x00000000u, 0x000400fau, 0x00002b74u, 0x00002bc7u, 0x00002bc6u, 0x000200f8u, 0x00002bc7u, 0x0003003eu, 0x00002b6fu, 0x00000c6cu, 0x0003003eu, 0x000029cfu, 0x00000559u, 0x000200f9u, 0x00002bc6u, 0x000200f8u, 0x00002bc6u, 0x000600a9u, 0x00000069u, 0x0000f39bu, 0x00002b74u, 0x00000559u, 0x00007fafu, 0x0004003du, 0x000000efu, 0x00002bc8u, 0x00002b6fu, 0x0008000cu, 0x000000efu, 0x00002bc9u, 0x00000001u, 0x0000002du, 0x00002bc8u, 0x00000c6fu, 0x00000c70u, 0x0003003eu, 0x00002b70u, 0x00002bc9u, 0x0003003eu, 0x0000210cu, 0x0000f39bu, 0x0003003eu, 0x0000210au, 0x00002bc9u, 0x000200f9u, 0x00002a14u, 0x000200f8u, 0x00002a14u, 0x000700f5u, 0x00000069u, 0x00008049u, 0x0000f395u, 0x00002abeu, 0x0000f39bu, 0x00002bc6u, 0x000700f5u, 0x000000efu, 0x0000802fu, 0x00008039u, 0x00002abeu, 0x00002bc9u, 0x00002bc6u, 0x000700f5u, 0x000000efu, 0x0000800bu, 0x00008015u, 0x00002abeu, 0x00002b45u, 0x00002bc6u, 0x000200f9u, 0x00002a0au, 0x000200f8u, 0x00002a0au, 0x000700f5u, 0x00000069u, 0x00008048u, 0x00008049u, 0x00002a14u, 0x00000536u, 0x00002a27u, 0x000700f5u, 0x000000efu, 0x0000802eu, 0x0000802fu, 0x00002a14u, 0x00008047u, 0x00002a27u, 0x000700f5u, 0x000000efu, 0x0000800au, 0x0000800bu, 0x00002a14u, 0x0000802du, 0x00002a27u, 0x000700f5u, 0x000000efu, 0x00007ff5u, 0x00002ac1u, 0x00002a14u, 0x00002bedu, 0x00002a27u, 0x00050041u, 0x00000046u, 0x00002a31u, 0x00002100u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a32u, 0x00002a31u, 0x00050041u, 0x00000046u, 0x00002a33u, 0x00002101u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a34u, 0x00002a33u, 0x000500c3u, 0x00000008u, 0x00002a36u, 0x00002284u, 0x0000078bu, 0x00050084u, 0x00000008u, 0x00002a37u, 0x00002a34u, 0x00002a36u, 0x00050080u, 0x00000008u, 0x00002a38u, 0x00002a32u, 0x00002a37u, 0x0004003du, 0x00000008u, 0x00002a3au, 0x00002a33u, 0x000500c3u, 0x00000008u, 0x00002a3bu, 0x00002a3au, 0x0000078bu, 0x000500c7u, 0x00000008u, 0x00002a3du, 0x00002284u, 0x00000d8cu, 0x00050084u, 0x00000008u, 0x00002a3eu, 0x00002a3bu, 0x00002a3du, 0x00050080u, 0x00000008u, 0x00002a3fu, 0x00002a38u, 0x00002a3eu, 0x0003003eu, 0x0000210bu, 0x00002a3fu, 0x000500c3u, 0x00000008u, 0x00002a41u, 0x00002a3fu, 0x00000263u, 0x0003003eu, 0x000029d3u, 0x00002a41u, 0x0003003eu, 0x000029d4u, 0x00002990u, 0x0003003eu, 0x000029d5u, 0x00002992u, 0x000500c7u, 0x00000008u, 0x00002a4au, 0x00002992u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00002a4bu, 0x00002996u, 0x00002a4au, 0x0003003eu, 0x000029d6u, 0x00002a4bu, 0x000500c4u, 0x00000008u, 0x00002a4du, 0x00002a41u, 0x00000da0u, 0x0003003eu, 0x000029d3u, 0x00002a4du, 0x0004003du, 0x00000008u, 0x00002a50u, 0x00002a33u, 0x000500c3u, 0x00000008u, 0x00002a51u, 0x00002a50u, 0x00000263u, 0x00050084u, 0x00000008u, 0x00002a52u, 0x00002a4bu, 0x00002a51u, 0x00050041u, 0x00000046u, 0x00002a54u, 0x00002102u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a55u, 0x00002a54u, 0x000500c3u, 0x00000008u, 0x00002a56u, 0x00002a55u, 0x00000263u, 0x00050084u, 0x00000008u, 0x00002a57u, 0x00002992u, 0x00002a56u, 0x00050080u, 0x00000008u, 0x00002a58u, 0x00002a52u, 0x00002a57u, 0x00050080u, 0x00000008u, 0x00002a5au, 0x00002a4du, 0x00002a58u, 0x0003003eu, 0x000029d3u, 0x00002a5au, 0x000500c3u, 0x00000008u, 0x00002a5cu, 0x00002a5au, 0x00000db0u, 0x0003003eu, 0x000029d3u, 0x00002a5cu, 0x0003003eu, 0x000029d7u, 0x00002a5cu, 0x00050082u, 0x00000008u, 0x00002bf6u, 0x00002a5cu, 0x00000b13u, 0x0003003eu, 0x000029d7u, 0x00002bf6u, 0x000500c4u, 0x00000008u, 0x00002bf8u, 0x00002bf6u, 0x0000026cu, 0x0003003eu, 0x000029d7u, 0x00002bf8u, 0x000500c3u, 0x00000008u, 0x00002bfau, 0x00002bf8u, 0x0000026cu, 0x0003003eu, 0x000029d7u, 0x00002bfau, 0x00050080u, 0x00000008u, 0x00002bfcu, 0x00002bfau, 0x00000b13u, 0x0003003eu, 0x000029d7u, 0x00002bfcu, 0x0008000cu, 0x00000008u, 0x00002bfeu, 0x00000001u, 0x0000002du, 0x00002bfcu, 0x00000220u, 0x000003edu, 0x0003003eu, 0x00002bf4u, 0x00002bfeu, 0x0003003eu, 0x0000210bu, 0x00002bfeu, 0x0003003eu, 0x000020fcu, 0x00007ff5u, 0x0003003eu, 0x000020fdu, 0x0000800au, 0x0003003eu, 0x000020feu, 0x0000802eu, 0x0003003eu, 0x000020ffu, 0x00002bfeu, 0x0003003eu, 0x000020fau, 0x00008048u, 0x000500c7u, 0x00000006u, 0x000022afu, 0x000021a8u, 0x00000742u, 0x0003003eu, 0x0000210du, 0x000022afu, 0x00050080u, 0x00000006u, 0x000022b1u, 0x000022afu, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x000022b2u, 0x000022b1u, 0x00000742u, 0x0003003eu, 0x0000210eu, 0x000022b2u, 0x000500c2u, 0x00000006u, 0x000022b4u, 0x000021a8u, 0x00000464u, 0x0003003eu, 0x0000210fu, 0x000022b4u, 0x00040071u, 0x00000006u, 0x000022b7u, 0x00002976u, 0x0004007cu, 0x00000008u, 0x000022b8u, 0x000022b7u, 0x0003003eu, 0x00002110u, 0x000022b8u, 0x000300f7u, 0x000022bau, 0x00000000u, 0x000400fau, 0x000021ffu, 0x000022bbu, 0x000022bau, 0x000200f8u, 0x000022bbu, 0x0003003eu, 0x00002112u, 0x000022afu, 0x0003003eu, 0x00002113u, 0x000022b2u, 0x0003003eu, 0x00002115u, 0x000022b4u, 0x0003003eu, 0x00002116u, 0x000022b8u, 0x0003003eu, 0x00002117u, 0x00007ff5u, 0x0003003eu, 0x00002118u, 0x0000800au, 0x0003003eu, 0x00002119u, 0x0000802eu, 0x0003003eu, 0x0000211au, 0x00008048u, 0x0003003eu, 0x0000211bu, 0x000021d5u, 0x0003003eu, 0x0000211cu, 0x000021d8u, 0x0003003eu, 0x0000211du, 0x000021dbu, 0x0003003eu, 0x00002bffu, 0x00000536u, 0x0003003eu, 0x00002c00u, 0x00000536u, 0x0003003eu, 0x00002c01u, 0x0000032du, 0x000300f7u, 0x00002c08u, 0x00000000u, 0x000400fau, 0x00008048u, 0x00002c09u, 0x00002c0au, 0x000200f8u, 0x00002c0au, 0x00050082u, 0x000000efu, 0x00002c0du, 0x0000800au, 0x00007ff5u, 0x0003003eu, 0x00002c02u, 0x00002c0du, 0x000500c3u, 0x000000efu, 0x00002c10u, 0x00002c0du, 0x0000f379u, 0x000500c6u, 0x000000efu, 0x00002c12u, 0x00002c0du, 0x00002c10u, 0x0003003eu, 0x00002c02u, 0x00002c12u, 0x00050082u, 0x000000efu, 0x00002c15u, 0x0000802eu, 0x00007ff5u, 0x0003003eu, 0x00002c03u, 0x00002c15u, 0x000500c3u, 0x000000efu, 0x00002c18u, 0x00002c15u, 0x0000f379u, 0x000500c6u, 0x000000efu, 0x00002c1au, 0x00002c15u, 0x00002c18u, 0x0003003eu, 0x00002c03u, 0x00002c1au, 0x0007000cu, 0x000000efu, 0x00002c1du, 0x00000001u, 0x0000002au, 0x00002c12u, 0x00002c1au, 0x0003003eu, 0x00002c04u, 0x00002c1du, 0x00050041u, 0x00000046u, 0x00002c1eu, 0x00002c04u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002c1fu, 0x00002c1eu, 0x00050041u, 0x00000046u, 0x00002c20u, 0x00002c04u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002c21u, 0x00002c20u, 0x0007000cu, 0x00000008u, 0x00002c22u, 0x00000001u, 0x0000002au, 0x00002c1fu, 0x00002c21u, 0x0003003eu, 0x00002c05u, 0x00002c22u, 0x000500afu, 0x00000069u, 0x00002c24u, 0x00002c22u, 0x0000188eu, 0x000300f7u, 0x00002c25u, 0x00000000u, 0x000400fau, 0x00002c24u, 0x00002c26u, 0x00002c27u, 0x000200f8u, 0x00002c27u, 0x000500b1u, 0x00000069u, 0x00002c2au, 0x00002c22u, 0x0000114fu, 0x000300f7u, 0x00002c2bu, 0x00000000u, 0x000400fau, 0x00002c2au, 0x00002c2cu, 0x00002c2du, 0x000200f8u, 0x00002c2du, 0x000500c3u, 0x00000008u, 0x00002c44u, 0x00002c22u, 0x00000236u, 0x0006000cu, 0x00000008u, 0x00002c45u, 0x00000001u, 0x0000004au, 0x00002c44u, 0x0007000cu, 0x00000008u, 0x00002c46u, 0x00000001u, 0x0000002au, 0x00002c45u, 0x00000220u, 0x0003003eu, 0x00002c06u, 0x00002c46u, 0x0004007cu, 0x00000006u, 0x00002c48u, 0x00002c46u, 0x000500aeu, 0x00000069u, 0x00002c4au, 0x00002c48u, 0x000022b4u, 0x0003003eu, 0x00002c00u, 0x00002c4au, 0x000400a8u, 0x00000069u, 0x00002c4du, 0x000021d8u, 0x000500a7u, 0x00000069u, 0x00002c4eu, 0x00002c4au, 0x00002c4du, 0x000400a8u, 0x00000069u, 0x00002c50u, 0x000021dbu, 0x000500a7u, 0x00000069u, 0x00002c51u, 0x00002c4eu, 0x00002c50u, 0x000300f7u, 0x00002c52u, 0x00000000u, 0x000400fau, 0x00002c51u, 0x00002c53u, 0x00002c54u, 0x000200f8u, 0x00002c54u, 0x000500c4u, 0x00000008u, 0x00002c56u, 0x00002c22u, 0x00000230u, 0x000500c3u, 0x00000008u, 0x00002c58u, 0x00002c56u, 0x00002c46u, 0x000500c7u, 0x00000008u, 0x00002c59u, 0x00002c58u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x00002c5au, 0x00002c59u, 0x0003003eu, 0x00002114u, 0x00002c5au, 0x0003003eu, 0x00002c01u, 0x00002c48u, 0x000200f9u, 0x00002c52u, 0x000200f8u, 0x00002c53u, 0x0003003eu, 0x00002114u, 0x0000186fu, 0x000200f9u, 0x00002c52u, 0x000200f8u, 0x00002c52u, 0x000700f5u, 0x00000012u, 0x0000815cu, 0x0000186fu, 0x00002c53u, 0x00002c5au, 0x00002c54u, 0x000600a9u, 0x00000006u, 0x0000f39cu, 0x00002c51u, 0x0000032du, 0x00002c48u, 0x000200f9u, 0x00002c2bu, 0x000200f8u, 0x00002c2cu, 0x000500aau, 0x00000069u, 0x00002c2fu, 0x000022b4u, 0x0000032du, 0x0003003eu, 0x00002c00u, 0x00002c2fu, 0x0003003eu, 0x00002bffu, 0x00000559u, 0x000400a8u, 0x00000069u, 0x00002c31u, 0x000021d8u, 0x000400a8u, 0x00000069u, 0x00002c33u, 0x000021dbu, 0x000500a7u, 0x00000069u, 0x00002c34u, 0x00002c31u, 0x00002c33u, 0x000300f7u, 0x00002c35u, 0x00000000u, 0x000400fau, 0x00002c34u, 0x00002c36u, 0x00002c37u, 0x000200f8u, 0x00002c37u, 0x0007000cu, 0x00000008u, 0x00002c3du, 0x00000001u, 0x0000002au, 0x000022b8u, 0x00002c22u, 0x000500c4u, 0x00000008u, 0x00002c3eu, 0x00002c3du, 0x00000230u, 0x000600a9u, 0x00000008u, 0x00002c40u, 0x000021d8u, 0x000018aau, 0x00000220u, 0x00050080u, 0x00000008u, 0x00002c41u, 0x00002c3eu, 0x00002c40u, 0x00040072u, 0x00000012u, 0x00002c42u, 0x00002c41u, 0x0003003eu, 0x00002114u, 0x00002c42u, 0x000200f9u, 0x00002c35u, 0x000200f8u, 0x00002c36u, 0x000600a9u, 0x00000008u, 0x00002c39u, 0x00002c2fu, 0x0000035eu, 0x00000220u, 0x00040072u, 0x00000012u, 0x00002c3au, 0x00002c39u, 0x0003003eu, 0x00002114u, 0x00002c3au, 0x000200f9u, 0x00002c35u, 0x000200f8u, 0x00002c35u, 0x000700f5u, 0x00000012u, 0x0000815bu, 0x00002c3au, 0x00002c36u, 0x00002c42u, 0x00002c37u, 0x000200f9u, 0x00002c2bu, 0x000200f8u, 0x00002c2bu, 0x000700f5u, 0x00000012u, 0x0000815au, 0x0000815bu, 0x00002c35u, 0x0000815cu, 0x00002c52u, 0x000700f5u, 0x00000006u, 0x0000813bu, 0x0000032du, 0x00002c35u, 0x0000f39cu, 0x00002c52u, 0x000700f5u, 0x00000069u, 0x00008124u, 0x00002c2fu, 0x00002c35u, 0x00002c4au, 0x00002c52u, 0x000600a9u, 0x00000069u, 0x0000f39du, 0x00002c2au, 0x00000559u, 0x00000536u, 0x000200f9u, 0x00002c25u, 0x000200f8u, 0x00002c26u, 0x0003003eu, 0x00002c00u, 0x00000559u, 0x0003003eu, 0x00002114u, 0x0000186fu, 0x0003003eu, 0x00002c01u, 0x000022b4u, 0x000200f9u, 0x00002c25u, 0x000200f8u, 0x00002c25u, 0x000700f5u, 0x00000012u, 0x00008159u, 0x0000186fu, 0x00002c26u, 0x0000815au, 0x00002c2bu, 0x000700f5u, 0x00000069u, 0x00008141u, 0x00000536u, 0x00002c26u, 0x0000f39du, 0x00002c2bu, 0x000700f5u, 0x00000006u, 0x0000813au, 0x000022b4u, 0x00002c26u, 0x0000813bu, 0x00002c2bu, 0x000700f5u, 0x00000069u, 0x00008123u, 0x00000559u, 0x00002c26u, 0x00008124u, 0x00002c2bu, 0x000200f9u, 0x00002c08u, 0x000200f8u, 0x00002c09u, 0x0003003eu, 0x00002c00u, 0x00000559u, 0x0003003eu, 0x00002114u, 0x0000186fu, 0x000200f9u, 0x00002c08u, 0x000200f8u, 0x00002c08u, 0x000700f5u, 0x00000012u, 0x00008158u, 0x0000186fu, 0x00002c09u, 0x00008159u, 0x00002c25u, 0x000700f5u, 0x00000069u, 0x00008140u, 0x00000536u, 0x00002c09u, 0x00008141u, 0x00002c25u, 0x000700f5u, 0x00000006u, 0x00008139u, 0x0000032du, 0x00002c09u, 0x0000813au, 0x00002c25u, 0x000700f5u, 0x00000069u, 0x00008122u, 0x00000559u, 0x00002c09u, 0x00008123u, 0x00002c25u, 0x000300f7u, 0x00002c5eu, 0x00000000u, 0x000400fau, 0x000021d5u, 0x00002c5fu, 0x00002c5eu, 0x000200f8u, 0x00002c5fu, 0x000300f7u, 0x00002c61u, 0x00000000u, 0x000400fau, 0x00008122u, 0x00002c62u, 0x00002c61u, 0x000200f8u, 0x00002c62u, 0x0003003eu, 0x00002c01u, 0x000022b4u, 0x000200f9u, 0x00002c61u, 0x000200f8u, 0x00002c61u, 0x000600a9u, 0x00000006u, 0x0000f39eu, 0x00008122u, 0x000022b4u, 0x00008139u, 0x000400a8u, 0x00000069u, 0x00002c65u, 0x000021dbu, 0x000300f7u, 0x00002c66u, 0x00000000u, 0x000400fau, 0x00002c65u, 0x00002c67u, 0x00002c68u, 0x000200f8u, 0x00002c68u, 0x00050080u, 0x00000006u, 0x00002c7fu, 0x000022afu, 0x0000f39eu, 0x000500a6u, 0x00000069u, 0x00002c82u, 0x00008122u, 0x00008140u, 0x000600a9u, 0x00000008u, 0x00002c83u, 0x00002c82u, 0x0000022au, 0x0000022du, 0x0004007cu, 0x00000006u, 0x00002c84u, 0x00002c83u, 0x00050080u, 0x00000006u, 0x00002c85u, 0x00002c7fu, 0x00002c84u, 0x000500c7u, 0x00000006u, 0x00002c86u, 0x00002c85u, 0x00000742u, 0x0003003eu, 0x00002113u, 0x00002c86u, 0x000600a9u, 0x00000008u, 0x00002c8bu, 0x00008140u, 0x00000220u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002c8cu, 0x00002c8bu, 0x00050080u, 0x00000006u, 0x00002c8du, 0x00002c7fu, 0x00002c8cu, 0x000500c7u, 0x00000006u, 0x00002c8eu, 0x00002c8du, 0x00000742u, 0x0003003eu, 0x00002112u, 0x00002c8eu, 0x000200f9u, 0x00002c66u, 0x000200f8u, 0x00002c67u, 0x00050080u, 0x00000006u, 0x00002c6bu, 0x000022afu, 0x0000f39eu, 0x000500c7u, 0x00000006u, 0x00002c6cu, 0x00002c6bu, 0x00000742u, 0x0003003eu, 0x00002112u, 0x00002c6cu, 0x000400a8u, 0x00000069u, 0x00002c6eu, 0x00008122u, 0x000300f7u, 0x00002c6fu, 0x00000000u, 0x000400fau, 0x00002c6eu, 0x00002c70u, 0x00002c6fu, 0x000200f8u, 0x00002c70u, 0x000400a8u, 0x00000069u, 0x00002c72u, 0x000021d8u, 0x000500a7u, 0x00000069u, 0x00002c74u, 0x00002c72u, 0x00008140u, 0x000200f9u, 0x00002c6fu, 0x000200f8u, 0x00002c6fu, 0x000700f5u, 0x00000069u, 0x00002c75u, 0x00008122u, 0x00002c67u, 0x00002c74u, 0x00002c70u, 0x000300f7u, 0x00002c76u, 0x00000000u, 0x000400fau, 0x00002c75u, 0x00002c77u, 0x00002c78u, 0x000200f8u, 0x00002c78u, 0x00050080u, 0x00000006u, 0x00002c7bu, 0x00002c6cu, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x00002c7cu, 0x00002c7bu, 0x00000742u, 0x0003003eu, 0x00002113u, 0x00002c7cu, 0x000200f9u, 0x00002c76u, 0x000200f8u, 0x00002c77u, 0x0003003eu, 0x00002113u, 0x00002c6cu, 0x000200f9u, 0x00002c76u, 0x000200f8u, 0x00002c76u, 0x000700f5u, 0x00000006u, 0x00008156u, 0x00002c6cu, 0x00002c77u, 0x00002c7cu, 0x00002c78u, 0x000200f9u, 0x00002c66u, 0x000200f8u, 0x00002c66u, 0x000700f5u, 0x00000006u, 0x00008155u, 0x00008156u, 0x00002c76u, 0x00002c86u, 0x00002c68u, 0x000700f5u, 0x00000006u, 0x0000814du, 0x00002c6cu, 0x00002c76u, 0x00002c8eu, 0x00002c68u, 0x000200f9u, 0x00002c5eu, 0x000200f8u, 0x00002c5eu, 0x000700f5u, 0x00000006u, 0x0000814fu, 0x000022b2u, 0x00002c08u, 0x00008155u, 0x00002c66u, 0x000700f5u, 0x00000006u, 0x0000814cu, 0x000022afu, 0x00002c08u, 0x0000814du, 0x00002c66u, 0x0003003eu, 0x0000210du, 0x0000814cu, 0x0003003eu, 0x0000210eu, 0x0000814fu, 0x0003003eu, 0x00002111u, 0x00008158u, 0x000200f9u, 0x000022bau, 0x000200f8u, 0x000022bau, 0x000700f5u, 0x00000012u, 0x0000ab64u, 0x0000ab70u, 0x00002a0au, 0x00008158u, 0x00002c5eu, 0x000700f5u, 0x00000006u, 0x00009600u, 0x000022b2u, 0x00002a0au, 0x0000814fu, 0x00002c5eu, 0x000700f5u, 0x00000006u, 0x000081bdu, 0x000022afu, 0x00002a0au, 0x0000814cu, 0x00002c5eu, 0x000300f7u, 0x000022ccu, 0x00000000u, 0x000400fau, 0x000021f6u, 0x000022cdu, 0x000022ccu, 0x000200f8u, 0x000022cdu, 0x00080041u, 0x00000671u, 0x000022d0u, 0x00000a12u, 0x00000220u, 0x00001f93u, 0x0000022du, 0x000081bdu, 0x0004003du, 0x0000000fu, 0x000022d1u, 0x000022d0u, 0x00040071u, 0x00000006u, 0x000022d2u, 0x000022d1u, 0x0003003eu, 0x0000211eu, 0x000022d2u, 0x0003003eu, 0x00002120u, 0x000022d2u, 0x00060041u, 0x000002b4u, 0x00002c92u, 0x000002b2u, 0x00000220u, 0x000022d2u, 0x0004003du, 0x000002aeu, 0x00002c93u, 0x00002c92u, 0x00050051u, 0x00000006u, 0x00002c94u, 0x00002c93u, 0x00000000u, 0x0003003eu, 0x00006faeu, 0x00002c94u, 0x00050051u, 0x00000006u, 0x00002c96u, 0x00002c93u, 0x00000001u, 0x0003003eu, 0x00006fafu, 0x00002c96u, 0x00050051u, 0x00000006u, 0x00002c98u, 0x00002c93u, 0x00000002u, 0x0003003eu, 0x00006fb0u, 0x00002c98u, 0x00050051u, 0x00000006u, 0x00002c9au, 0x00002c93u, 0x00000003u, 0x0003003eu, 0x00006fb1u, 0x00002c9au, 0x00050051u, 0x00000006u, 0x00002c9cu, 0x00002c93u, 0x00000004u, 0x0003003eu, 0x00006fb2u, 0x00002c9cu, 0x00050051u, 0x00000006u, 0x00002c9eu, 0x00002c93u, 0x00000005u, 0x0003003eu, 0x00006fb3u, 0x00002c9eu, 0x00050051u, 0x0000000fu, 0x00002ca0u, 0x00002c93u, 0x00000006u, 0x0003003eu, 0x00006fb4u, 0x00002ca0u, 0x00050051u, 0x0000000fu, 0x00002ca2u, 0x00002c93u, 0x00000007u, 0x0003003eu, 0x00006fb5u, 0x00002ca2u, 0x00050051u, 0x0000000fu, 0x00002ca4u, 0x00002c93u, 0x00000008u, 0x0003003eu, 0x00006fb6u, 0x00002ca4u, 0x00050051u, 0x0000000fu, 0x00002ca6u, 0x00002c93u, 0x00000009u, 0x0003003eu, 0x00006fb7u, 0x00002ca6u, 0x00050051u, 0x0000000fu, 0x00002ca8u, 0x00002c93u, 0x0000000au, 0x0003003eu, 0x00006fb8u, 0x00002ca8u, 0x00050051u, 0x0000000fu, 0x00002caau, 0x00002c93u, 0x0000000bu, 0x0003003eu, 0x00006fb9u, 0x00002caau, 0x00050051u, 0x0000000fu, 0x00002cacu, 0x00002c93u, 0x0000000cu, 0x0003003eu, 0x00006fbau, 0x00002cacu, 0x00050051u, 0x0000000fu, 0x00002caeu, 0x00002c93u, 0x0000000du, 0x0003003eu, 0x00006fbbu, 0x00002caeu, 0x00110050u, 0x00000023u, 0x00006fcau, 0x00002c94u, 0x00002c96u, 0x00002c98u, 0x00002c9au, 0x00002c9cu, 0x00002c9eu, 0x00002ca0u, 0x00002ca2u, 0x00002ca4u, 0x00002ca6u, 0x00002ca8u, 0x00002caau, 0x00002cacu, 0x00002caeu, 0x0003003eu, 0x00006fcbu, 0x00002c94u, 0x0003003eu, 0x00006fccu, 0x00002c96u, 0x0003003eu, 0x00006fcdu, 0x00002c98u, 0x0003003eu, 0x00006fceu, 0x00002c9au, 0x0003003eu, 0x00006fcfu, 0x00002c9cu, 0x0003003eu, 0x00006fd0u, 0x00002c9eu, 0x0003003eu, 0x00006fd1u, 0x00002ca0u, 0x0003003eu, 0x00006fd2u, 0x00002ca2u, 0x0003003eu, 0x00006fd3u, 0x00002ca4u, 0x0003003eu, 0x00006fd4u, 0x00002ca6u, 0x0003003eu, 0x00006fd5u, 0x00002ca8u, 0x0003003eu, 0x00006fd6u, 0x00002caau, 0x0003003eu, 0x00006fd7u, 0x00002cacu, 0x0003003eu, 0x00006fd8u, 0x00002caeu, 0x0003003eu, 0x00007250u, 0x00002c94u, 0x0003003eu, 0x00007251u, 0x00002c96u, 0x0003003eu, 0x00007252u, 0x00002c98u, 0x0003003eu, 0x00007253u, 0x00002c9au, 0x0003003eu, 0x00007254u, 0x00002c9cu, 0x0003003eu, 0x00007255u, 0x00002c9eu, 0x0003003eu, 0x00007256u, 0x00002ca0u, 0x0003003eu, 0x00007257u, 0x00002ca2u, 0x0003003eu, 0x00007258u, 0x00002ca4u, 0x0003003eu, 0x00007259u, 0x00002ca6u, 0x0003003eu, 0x0000725au, 0x00002ca8u, 0x0003003eu, 0x0000725bu, 0x00002caau, 0x0003003eu, 0x0000725cu, 0x00002cacu, 0x0003003eu, 0x0000725du, 0x00002caeu, 0x0003003eu, 0x0000727bu, 0x00002c94u, 0x0003003eu, 0x0000727cu, 0x00002c96u, 0x0003003eu, 0x0000727du, 0x00002c98u, 0x0003003eu, 0x0000727eu, 0x00002c9au, 0x0003003eu, 0x0000727fu, 0x00002c9cu, 0x0003003eu, 0x00007280u, 0x00002c9eu, 0x0003003eu, 0x00007281u, 0x00002ca0u, 0x0003003eu, 0x00007282u, 0x00002ca2u, 0x0003003eu, 0x00007283u, 0x00002ca4u, 0x0003003eu, 0x00007284u, 0x00002ca6u, 0x0003003eu, 0x00007285u, 0x00002ca8u, 0x0003003eu, 0x00007286u, 0x00002caau, 0x0003003eu, 0x00007287u, 0x00002cacu, 0x0003003eu, 0x00007288u, 0x00002caeu, 0x0003003eu, 0x00002123u, 0x000021b2u, 0x0003003eu, 0x00002124u, 0x00007ff5u, 0x0003003eu, 0x00002125u, 0x000021c3u, 0x0003003eu, 0x00002126u, 0x000021c6u, 0x0003003eu, 0x00002127u, 0x000021c9u, 0x0003003eu, 0x00002128u, 0x000021f3u, 0x0003003eu, 0x00002129u, 0x00000536u, 0x0003003eu, 0x0000212au, 0x00001db1u, 0x00040071u, 0x00000006u, 0x00002df4u, 0x00002caeu, 0x0004007cu, 0x00000008u, 0x00002df5u, 0x00002df4u, 0x000500c7u, 0x00000008u, 0x00002df6u, 0x00002df5u, 0x0000022au, 0x000500abu, 0x00000069u, 0x00002df7u, 0x00002df6u, 0x00000220u, 0x0004007cu, 0x00000008u, 0x00002dfau, 0x00002c94u, 0x0004007cu, 0x00000008u, 0x00002dfdu, 0x00002c96u, 0x00040071u, 0x00000006u, 0x00002e00u, 0x00002ca8u, 0x0004007cu, 0x00000008u, 0x00002e01u, 0x00002e00u, 0x0003003eu, 0x00002cb1u, 0x00002df7u, 0x00050041u, 0x00000046u, 0x00002e02u, 0x00002124u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002e03u, 0x00002e02u, 0x0003003eu, 0x00002cb2u, 0x00002e03u, 0x0003003eu, 0x00002cb3u, 0x00002dfau, 0x0003003eu, 0x00002cb4u, 0x00002dfdu, 0x0003003eu, 0x00002cb5u, 0x00002e01u, 0x0008000cu, 0x00000008u, 0x000031bdu, 0x00000001u, 0x0000002du, 0x00002e03u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x00002cb2u, 0x000031bdu, 0x000500b1u, 0x00000069u, 0x000031bfu, 0x00002e01u, 0x00000266u, 0x000300f7u, 0x000031c0u, 0x00000000u, 0x000400fau, 0x000031bfu, 0x000031c1u, 0x000031c2u, 0x000200f8u, 0x000031c2u, 0x00050082u, 0x00000008u, 0x000031c7u, 0x0000114fu, 0x00002e01u, 0x000500c4u, 0x00000008u, 0x000031c9u, 0x000031bdu, 0x000031c7u, 0x0003003eu, 0x00002cb2u, 0x000031c9u, 0x000500c3u, 0x00000008u, 0x000031cbu, 0x000031c9u, 0x00000554u, 0x0003003eu, 0x00002cb2u, 0x000031cbu, 0x000200f9u, 0x000031c0u, 0x000200f8u, 0x000031c1u, 0x000500c3u, 0x00000008u, 0x000031c5u, 0x000031bdu, 0x00002e01u, 0x0003003eu, 0x00002cb2u, 0x000031c5u, 0x000200f9u, 0x000031c0u, 0x000200f8u, 0x000031c0u, 0x000700f5u, 0x00000008u, 0x000082b6u, 0x000031c5u, 0x000031c1u, 0x000031cbu, 0x000031c2u, 0x000300f7u, 0x000031cdu, 0x00000000u, 0x000400fau, 0x00002df7u, 0x000031ceu, 0x000031cfu, 0x000200f8u, 0x000031cfu, 0x000500c4u, 0x00000008u, 0x000031e5u, 0x00002dfau, 0x00000230u, 0x00050082u, 0x00000008u, 0x000031e7u, 0x000082b6u, 0x000031e5u, 0x0003003eu, 0x00002cb2u, 0x000031e7u, 0x000200f9u, 0x000031cdu, 0x000200f8u, 0x000031ceu, 0x000500c3u, 0x00000008u, 0x000031d1u, 0x000082b6u, 0x00000230u, 0x000500afu, 0x00000069u, 0x000031d3u, 0x000031d1u, 0x00002dfdu, 0x0003003eu, 0x000031bau, 0x000031d3u, 0x000300f7u, 0x000031d5u, 0x00000000u, 0x000400fau, 0x000031d3u, 0x000031d6u, 0x000031d7u, 0x000200f8u, 0x000031d7u, 0x000500c4u, 0x00000008u, 0x000031e1u, 0x00002dfau, 0x00000230u, 0x00050082u, 0x00000008u, 0x000031e2u, 0x000082b6u, 0x000031e1u, 0x0007000cu, 0x00000008u, 0x000031e3u, 0x00000001u, 0x0000002au, 0x000031e2u, 0x00000220u, 0x0003003eu, 0x00002cb2u, 0x000031e3u, 0x000200f9u, 0x000031d5u, 0x000200f8u, 0x000031d6u, 0x000500c3u, 0x00000008u, 0x000031d9u, 0x00002dfdu, 0x0000022du, 0x000500c3u, 0x00000008u, 0x000031dbu, 0x00002dfau, 0x0000022du, 0x00050082u, 0x00000008u, 0x000031dcu, 0x000031d9u, 0x000031dbu, 0x000500c7u, 0x00000008u, 0x000031ddu, 0x000031dcu, 0x00001166u, 0x000500c4u, 0x00000008u, 0x000031deu, 0x000031ddu, 0x00000236u, 0x0003003eu, 0x00002cb2u, 0x000031deu, 0x000200f9u, 0x000031d5u, 0x000200f8u, 0x000031d5u, 0x000700f5u, 0x00000008u, 0x000082b9u, 0x000031deu, 0x000031d6u, 0x000031e3u, 0x000031d7u, 0x000200f9u, 0x000031cdu, 0x000200f8u, 0x000031cdu, 0x000700f5u, 0x00000008u, 0x000082b8u, 0x000082b9u, 0x000031d5u, 0x000031e7u, 0x000031cfu, 0x0003003eu, 0x000031bbu, 0x000082b8u, 0x0003003eu, 0x00002e02u, 0x000082b8u, 0x000500c7u, 0x00000008u, 0x00002e0au, 0x00002df5u, 0x00000233u, 0x000500abu, 0x00000069u, 0x00002e0bu, 0x00002e0au, 0x00000220u, 0x0004007cu, 0x00000008u, 0x00002e0eu, 0x00002c98u, 0x0004007cu, 0x00000008u, 0x00002e11u, 0x00002c9au, 0x00040071u, 0x00000006u, 0x00002e14u, 0x00002cacu, 0x0004007cu, 0x00000008u, 0x00002e15u, 0x00002e14u, 0x0003003eu, 0x00002cb6u, 0x00002e0bu, 0x00050041u, 0x00000046u, 0x00002e16u, 0x00002124u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002e17u, 0x00002e16u, 0x0003003eu, 0x00002cb7u, 0x00002e17u, 0x0003003eu, 0x00002cb8u, 0x00002e0eu, 0x0003003eu, 0x00002cb9u, 0x00002e11u, 0x0003003eu, 0x00002cbau, 0x00002e15u, 0x0008000cu, 0x00000008u, 0x000031ecu, 0x00000001u, 0x0000002du, 0x00002e17u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x00002cb7u, 0x000031ecu, 0x000500b1u, 0x00000069u, 0x000031eeu, 0x00002e15u, 0x00000266u, 0x000300f7u, 0x000031efu, 0x00000000u, 0x000400fau, 0x000031eeu, 0x000031f0u, 0x000031f1u, 0x000200f8u, 0x000031f1u, 0x00050082u, 0x00000008u, 0x000031f6u, 0x0000114fu, 0x00002e15u, 0x000500c4u, 0x00000008u, 0x000031f8u, 0x000031ecu, 0x000031f6u, 0x0003003eu, 0x00002cb7u, 0x000031f8u, 0x000500c3u, 0x00000008u, 0x000031fau, 0x000031f8u, 0x00000554u, 0x0003003eu, 0x00002cb7u, 0x000031fau, 0x000200f9u, 0x000031efu, 0x000200f8u, 0x000031f0u, 0x000500c3u, 0x00000008u, 0x000031f4u, 0x000031ecu, 0x00002e15u, 0x0003003eu, 0x00002cb7u, 0x000031f4u, 0x000200f9u, 0x000031efu, 0x000200f8u, 0x000031efu, 0x000700f5u, 0x00000008u, 0x000082c8u, 0x000031f4u, 0x000031f0u, 0x000031fau, 0x000031f1u, 0x000300f7u, 0x000031fcu, 0x00000000u, 0x000400fau, 0x00002e0bu, 0x000031fdu, 0x000031feu, 0x000200f8u, 0x000031feu, 0x000500c4u, 0x00000008u, 0x00003214u, 0x00002e0eu, 0x00000230u, 0x00050082u, 0x00000008u, 0x00003216u, 0x000082c8u, 0x00003214u, 0x0003003eu, 0x00002cb7u, 0x00003216u, 0x000200f9u, 0x000031fcu, 0x000200f8u, 0x000031fdu, 0x000500c3u, 0x00000008u, 0x00003200u, 0x000082c8u, 0x00000230u, 0x000500afu, 0x00000069u, 0x00003202u, 0x00003200u, 0x00002e11u, 0x0003003eu, 0x000031e9u, 0x00003202u, 0x000300f7u, 0x00003204u, 0x00000000u, 0x000400fau, 0x00003202u, 0x00003205u, 0x00003206u, 0x000200f8u, 0x00003206u, 0x000500c4u, 0x00000008u, 0x00003210u, 0x00002e0eu, 0x00000230u, 0x00050082u, 0x00000008u, 0x00003211u, 0x000082c8u, 0x00003210u, 0x0007000cu, 0x00000008u, 0x00003212u, 0x00000001u, 0x0000002au, 0x00003211u, 0x00000220u, 0x0003003eu, 0x00002cb7u, 0x00003212u, 0x000200f9u, 0x00003204u, 0x000200f8u, 0x00003205u, 0x000500c3u, 0x00000008u, 0x00003208u, 0x00002e11u, 0x0000022du, 0x000500c3u, 0x00000008u, 0x0000320au, 0x00002e0eu, 0x0000022du, 0x00050082u, 0x00000008u, 0x0000320bu, 0x00003208u, 0x0000320au, 0x000500c7u, 0x00000008u, 0x0000320cu, 0x0000320bu, 0x00001166u, 0x000500c4u, 0x00000008u, 0x0000320du, 0x0000320cu, 0x00000236u, 0x0003003eu, 0x00002cb7u, 0x0000320du, 0x000200f9u, 0x00003204u, 0x000200f8u, 0x00003204u, 0x000700f5u, 0x00000008u, 0x000082cbu, 0x0000320du, 0x00003205u, 0x00003212u, 0x00003206u, 0x000200f9u, 0x000031fcu, 0x000200f8u, 0x000031fcu, 0x000700f5u, 0x00000008u, 0x000082cau, 0x000082cbu, 0x00003204u, 0x00003216u, 0x000031feu, 0x0003003eu, 0x000031eau, 0x000082cau, 0x0003003eu, 0x00002e16u, 0x000082cau, 0x000300f7u, 0x00002e1bu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002e1cu, 0x00002e1du, 0x000200f8u, 0x00002e1du, 0x0003003eu, 0x00002cbbu, 0x00000c39u, 0x000200f9u, 0x00002e1bu, 0x000200f8u, 0x00002e1cu, 0x0004003du, 0x000000efu, 0x00002e1eu, 0x00002124u, 0x000500c7u, 0x000000efu, 0x00002e20u, 0x00002e1eu, 0x0000f379u, 0x0003003eu, 0x00002cbbu, 0x00002e20u, 0x000200f9u, 0x00002e1bu, 0x000200f8u, 0x00002e1bu, 0x00050041u, 0x00000046u, 0x00002e21u, 0x00002cbbu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002e22u, 0x00002e21u, 0x00050041u, 0x00000046u, 0x00002e23u, 0x00002cbbu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002e24u, 0x00002e23u, 0x00050080u, 0x00000008u, 0x00002e25u, 0x00002e22u, 0x00002e24u, 0x0003003eu, 0x00002cbcu, 0x00002e25u, 0x0004003du, 0x000000efu, 0x00002e26u, 0x00002124u, 0x000500c3u, 0x000000efu, 0x00002e28u, 0x00002e26u, 0x0000f378u, 0x0003003eu, 0x00002124u, 0x00002e28u, 0x0003003eu, 0x00006e7eu, 0x00002ca6u, 0x0003003eu, 0x00006e7fu, 0x00002caeu, 0x0004003du, 0x00000008u, 0x00002e2bu, 0x00002e02u, 0x0003003eu, 0x00002cbfu, 0x00002e2bu, 0x00040071u, 0x00000006u, 0x0000321cu, 0x00002ca6u, 0x0004007cu, 0x00000008u, 0x0000321du, 0x0000321cu, 0x000500abu, 0x00000069u, 0x0000321eu, 0x0000321du, 0x00000220u, 0x000300f7u, 0x0000321fu, 0x00000000u, 0x000400fau, 0x0000321eu, 0x00003220u, 0x0000321fu, 0x000200f8u, 0x00003220u, 0x000500c4u, 0x00000008u, 0x00003223u, 0x0000022au, 0x00002ca6u, 0x0003003eu, 0x00003218u, 0x00003223u, 0x000500c7u, 0x00000008u, 0x00003228u, 0x00002df5u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00003229u, 0x00003228u, 0x00000220u, 0x000300f7u, 0x0000322au, 0x00000000u, 0x000400fau, 0x00003229u, 0x0000322bu, 0x0000322au, 0x000200f8u, 0x0000322bu, 0x000500c7u, 0x00000008u, 0x0000322eu, 0x00002e2bu, 0x00003223u, 0x00050082u, 0x00000008u, 0x0000322fu, 0x0000322eu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00003230u, 0x00000001u, 0x0000002au, 0x0000322fu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003232u, 0x00002e2bu, 0x00003230u, 0x0003003eu, 0x00002cbfu, 0x00003232u, 0x000200f9u, 0x0000322au, 0x000200f8u, 0x0000322au, 0x000700f5u, 0x00000008u, 0x00008329u, 0x00002e2bu, 0x00003220u, 0x00003232u, 0x0000322bu, 0x00050082u, 0x00000008u, 0x00003234u, 0x00003223u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003236u, 0x00008329u, 0x00003234u, 0x0003003eu, 0x00002cbfu, 0x00003236u, 0x000200f9u, 0x0000321fu, 0x000200f8u, 0x0000321fu, 0x000700f5u, 0x00000008u, 0x0000832au, 0x00002e2bu, 0x00002e1bu, 0x00003236u, 0x0000322au, 0x0003003eu, 0x00003219u, 0x0000832au, 0x0003003eu, 0x00002cbdu, 0x0000832au, 0x0003003eu, 0x00006e82u, 0x00002caau, 0x0003003eu, 0x00006e83u, 0x00002caeu, 0x0004003du, 0x00000008u, 0x00002e2fu, 0x00002e16u, 0x0003003eu, 0x00002cc2u, 0x00002e2fu, 0x00040071u, 0x00000006u, 0x0000323cu, 0x00002caau, 0x0004007cu, 0x00000008u, 0x0000323du, 0x0000323cu, 0x000500abu, 0x00000069u, 0x0000323eu, 0x0000323du, 0x00000220u, 0x000300f7u, 0x0000323fu, 0x00000000u, 0x000400fau, 0x0000323eu, 0x00003240u, 0x0000323fu, 0x000200f8u, 0x00003240u, 0x000500c4u, 0x00000008u, 0x00003243u, 0x0000022au, 0x00002caau, 0x0003003eu, 0x00003238u, 0x00003243u, 0x000500c7u, 0x00000008u, 0x00003248u, 0x00002df5u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00003249u, 0x00003248u, 0x00000220u, 0x000300f7u, 0x0000324au, 0x00000000u, 0x000400fau, 0x00003249u, 0x0000324bu, 0x0000324au, 0x000200f8u, 0x0000324bu, 0x000500c7u, 0x00000008u, 0x0000324eu, 0x00002e2fu, 0x00003243u, 0x00050082u, 0x00000008u, 0x0000324fu, 0x0000324eu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00003250u, 0x00000001u, 0x0000002au, 0x0000324fu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003252u, 0x00002e2fu, 0x00003250u, 0x0003003eu, 0x00002cc2u, 0x00003252u, 0x000200f9u, 0x0000324au, 0x000200f8u, 0x0000324au, 0x000700f5u, 0x00000008u, 0x00008348u, 0x00002e2fu, 0x00003240u, 0x00003252u, 0x0000324bu, 0x00050082u, 0x00000008u, 0x00003254u, 0x00003243u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003256u, 0x00008348u, 0x00003254u, 0x0003003eu, 0x00002cc2u, 0x00003256u, 0x000200f9u, 0x0000323fu, 0x000200f8u, 0x0000323fu, 0x000700f5u, 0x00000008u, 0x00008349u, 0x00002e2fu, 0x0000321fu, 0x00003256u, 0x0000324au, 0x0003003eu, 0x00003239u, 0x00008349u, 0x0003003eu, 0x00002cc0u, 0x00008349u, 0x0004003du, 0x00000008u, 0x00002e32u, 0x00002e02u, 0x00050080u, 0x00000008u, 0x00002e33u, 0x00002e32u, 0x0000022au, 0x0003003eu, 0x00006e86u, 0x00002ca6u, 0x0003003eu, 0x00006e87u, 0x00002caeu, 0x0003003eu, 0x00002cc5u, 0x00002e33u, 0x000300f7u, 0x0000325fu, 0x00000000u, 0x000400fau, 0x0000321eu, 0x00003260u, 0x0000325fu, 0x000200f8u, 0x00003260u, 0x000500c4u, 0x00000008u, 0x00003263u, 0x0000022au, 0x00002ca6u, 0x0003003eu, 0x00003258u, 0x00003263u, 0x000500c7u, 0x00000008u, 0x00003268u, 0x00002df5u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00003269u, 0x00003268u, 0x00000220u, 0x000300f7u, 0x0000326au, 0x00000000u, 0x000400fau, 0x00003269u, 0x0000326bu, 0x0000326au, 0x000200f8u, 0x0000326bu, 0x000500c7u, 0x00000008u, 0x0000326eu, 0x00002e33u, 0x00003263u, 0x00050082u, 0x00000008u, 0x0000326fu, 0x0000326eu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00003270u, 0x00000001u, 0x0000002au, 0x0000326fu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003272u, 0x00002e33u, 0x00003270u, 0x0003003eu, 0x00002cc5u, 0x00003272u, 0x000200f9u, 0x0000326au, 0x000200f8u, 0x0000326au, 0x000700f5u, 0x00000008u, 0x00008367u, 0x00002e33u, 0x00003260u, 0x00003272u, 0x0000326bu, 0x00050082u, 0x00000008u, 0x00003274u, 0x00003263u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003276u, 0x00008367u, 0x00003274u, 0x0003003eu, 0x00002cc5u, 0x00003276u, 0x000200f9u, 0x0000325fu, 0x000200f8u, 0x0000325fu, 0x000700f5u, 0x00000008u, 0x00008368u, 0x00002e33u, 0x0000323fu, 0x00003276u, 0x0000326au, 0x0003003eu, 0x00003259u, 0x00008368u, 0x0003003eu, 0x00002cc3u, 0x00008368u, 0x0004003du, 0x00000008u, 0x00002e37u, 0x00002e16u, 0x00050080u, 0x00000008u, 0x00002e38u, 0x00002e37u, 0x0000022au, 0x0003003eu, 0x00006e8au, 0x00002caau, 0x0003003eu, 0x00006e8bu, 0x00002caeu, 0x0003003eu, 0x00002cc8u, 0x00002e38u, 0x000300f7u, 0x0000327fu, 0x00000000u, 0x000400fau, 0x0000323eu, 0x00003280u, 0x0000327fu, 0x000200f8u, 0x00003280u, 0x000500c4u, 0x00000008u, 0x00003283u, 0x0000022au, 0x00002caau, 0x0003003eu, 0x00003278u, 0x00003283u, 0x000500c7u, 0x00000008u, 0x00003288u, 0x00002df5u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00003289u, 0x00003288u, 0x00000220u, 0x000300f7u, 0x0000328au, 0x00000000u, 0x000400fau, 0x00003289u, 0x0000328bu, 0x0000328au, 0x000200f8u, 0x0000328bu, 0x000500c7u, 0x00000008u, 0x0000328eu, 0x00002e38u, 0x00003283u, 0x00050082u, 0x00000008u, 0x0000328fu, 0x0000328eu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00003290u, 0x00000001u, 0x0000002au, 0x0000328fu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003292u, 0x00002e38u, 0x00003290u, 0x0003003eu, 0x00002cc8u, 0x00003292u, 0x000200f9u, 0x0000328au, 0x000200f8u, 0x0000328au, 0x000700f5u, 0x00000008u, 0x00008386u, 0x00002e38u, 0x00003280u, 0x00003292u, 0x0000328bu, 0x00050082u, 0x00000008u, 0x00003294u, 0x00003283u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003296u, 0x00008386u, 0x00003294u, 0x0003003eu, 0x00002cc8u, 0x00003296u, 0x000200f9u, 0x0000327fu, 0x000200f8u, 0x0000327fu, 0x000700f5u, 0x00000008u, 0x00008387u, 0x00002e38u, 0x0000325fu, 0x00003296u, 0x0000328au, 0x0003003eu, 0x00003279u, 0x00008387u, 0x0003003eu, 0x00002cc6u, 0x00008387u, 0x00050082u, 0x00000008u, 0x00002e3du, 0x00008387u, 0x00008349u, 0x0007000cu, 0x00000008u, 0x00002e3eu, 0x00000001u, 0x0000002au, 0x00002e3du, 0x000013a4u, 0x0003003eu, 0x00002cc9u, 0x00002e3eu, 0x000500c7u, 0x00000008u, 0x00002e40u, 0x00008349u, 0x0000035eu, 0x00050080u, 0x00000008u, 0x00002e42u, 0x00002e40u, 0x00002e3eu, 0x0003003eu, 0x00002cc6u, 0x00002e42u, 0x0003003eu, 0x00002cc0u, 0x00002e40u, 0x0004003du, 0x000000efu, 0x00002e46u, 0x00002cbbu, 0x000500aau, 0x0000087bu, 0x00002e47u, 0x00002e46u, 0x000013aeu, 0x00050051u, 0x00000069u, 0x00002e48u, 0x00002e47u, 0x00000000u, 0x00050051u, 0x00000069u, 0x00002e49u, 0x00002e47u, 0x00000001u, 0x00060050u, 0x00000363u, 0x00002e4au, 0x000021f3u, 0x00002e48u, 0x00002e49u, 0x0004009bu, 0x00000069u, 0x00002e4bu, 0x00002e4au, 0x0003003eu, 0x00002128u, 0x00002e4bu, 0x000300f7u, 0x00002e4du, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002e4eu, 0x00002e4du, 0x000200f8u, 0x00002e4eu, 0x0003003eu, 0x00002cbcu, 0x00000220u, 0x000200f9u, 0x00002e4du, 0x000200f8u, 0x00002e4du, 0x000600a9u, 0x00000008u, 0x0000f39fu, 0x00002e4bu, 0x00000220u, 0x00002e25u, 0x00040071u, 0x00000006u, 0x00002e51u, 0x00002ca0u, 0x0004007cu, 0x00000008u, 0x00002e52u, 0x00002e51u, 0x000500aau, 0x00000069u, 0x00002e53u, 0x00002e52u, 0x0000022au, 0x0003003eu, 0x00002ccau, 0x00002e53u, 0x000500afu, 0x00000069u, 0x00002e55u, 0x0000f39fu, 0x0000114fu, 0x000300f7u, 0x00002e56u, 0x00000000u, 0x000400fau, 0x00002e55u, 0x00002e57u, 0x00002e58u, 0x000200f8u, 0x00002e58u, 0x00050050u, 0x000000efu, 0x00002e5eu, 0x0000832au, 0x00002e40u, 0x0003003eu, 0x00002cccu, 0x00002e5eu, 0x000200f9u, 0x00002e56u, 0x000200f8u, 0x00002e57u, 0x00050050u, 0x000000efu, 0x00002e5bu, 0x00008368u, 0x00002e42u, 0x0003003eu, 0x00002cccu, 0x00002e5bu, 0x000200f9u, 0x00002e56u, 0x000200f8u, 0x00002e56u, 0x000700f5u, 0x000000efu, 0x000083b3u, 0x00002e5bu, 0x00002e57u, 0x00002e5eu, 0x00002e58u, 0x0003003eu, 0x00002ccbu, 0x000083b3u, 0x000300f7u, 0x00002e61u, 0x00000000u, 0x000400fau, 0x000021c3u, 0x00002e62u, 0x00002e63u, 0x000200f8u, 0x00002e63u, 0x000300f7u, 0x00002f08u, 0x00000000u, 0x000d00fbu, 0x00002e52u, 0x00002f08u, 0x00000000u, 0x00002f09u, 0x00000001u, 0x00002f0au, 0x00000002u, 0x00002f0bu, 0x00000003u, 0x00002f0cu, 0x00000004u, 0x00002f0du, 0x000200f8u, 0x00002f0du, 0x00040071u, 0x00000006u, 0x000030c3u, 0x00002ca2u, 0x0004007cu, 0x00000008u, 0x000030c4u, 0x000030c3u, 0x000300f7u, 0x000030c5u, 0x00000000u, 0x000700fbu, 0x000030c4u, 0x000030c6u, 0x00000000u, 0x000030c7u, 0x00000001u, 0x000030c8u, 0x000200f8u, 0x000030c8u, 0x0004007cu, 0x000000b0u, 0x0000310au, 0x000083b3u, 0x0003003eu, 0x00006f8eu, 0x00002c9cu, 0x0003003eu, 0x00006f8fu, 0x00002c9eu, 0x0003003eu, 0x00002dc6u, 0x000021b2u, 0x0003003eu, 0x00002dc7u, 0x0000310au, 0x00050041u, 0x00000007u, 0x00004388u, 0x00002dc7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004389u, 0x00004388u, 0x00050084u, 0x00000006u, 0x0000438au, 0x00002c9eu, 0x00004389u, 0x00050080u, 0x00000006u, 0x0000438bu, 0x00002c9cu, 0x0000438au, 0x0003003eu, 0x00004380u, 0x0000438bu, 0x00050041u, 0x00000007u, 0x0000438cu, 0x00002dc7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000438du, 0x0000438cu, 0x00050080u, 0x00000006u, 0x0000438fu, 0x0000438bu, 0x0000438du, 0x0003003eu, 0x00004380u, 0x0000438fu, 0x000500c7u, 0x00000006u, 0x00004391u, 0x0000438fu, 0x00000e65u, 0x0003003eu, 0x00004380u, 0x00004391u, 0x0003003eu, 0x00004381u, 0x00004391u, 0x0004003du, 0x00000006u, 0x00004394u, 0x00004388u, 0x000500c7u, 0x00000006u, 0x00004395u, 0x00004394u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004396u, 0x00004395u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004398u, 0x00004391u, 0x00004396u, 0x0003003eu, 0x00004381u, 0x00004398u, 0x000500c6u, 0x00000006u, 0x0000439au, 0x00004398u, 0x00000464u, 0x0003003eu, 0x00004381u, 0x0000439au, 0x00080041u, 0x00000671u, 0x0000439du, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000439au, 0x0004003du, 0x0000000fu, 0x0000439eu, 0x0000439du, 0x00040071u, 0x00000006u, 0x0000439fu, 0x0000439eu, 0x0003003eu, 0x00004382u, 0x0000439fu, 0x00040071u, 0x00000011u, 0x000043a1u, 0x0000439fu, 0x0004007cu, 0x00000012u, 0x000043a2u, 0x000043a1u, 0x00070050u, 0x00000013u, 0x000043a3u, 0x000043a2u, 0x000043a2u, 0x000043a2u, 0x000043a2u, 0x0003003eu, 0x00004383u, 0x000043a3u, 0x0003003eu, 0x00002ccfu, 0x000043a3u, 0x000300f7u, 0x0000310fu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00003110u, 0x0000310fu, 0x000200f8u, 0x00003110u, 0x00050050u, 0x000000efu, 0x00003113u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00003114u, 0x00003113u, 0x0003003eu, 0x00006f92u, 0x00002c9cu, 0x0003003eu, 0x00006f93u, 0x00002c9eu, 0x0003003eu, 0x00002dc9u, 0x000021b2u, 0x0003003eu, 0x00002dcau, 0x00003114u, 0x00050041u, 0x00000007u, 0x000043acu, 0x00002dcau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000043adu, 0x000043acu, 0x00050084u, 0x00000006u, 0x000043aeu, 0x00002c9eu, 0x000043adu, 0x00050080u, 0x00000006u, 0x000043afu, 0x00002c9cu, 0x000043aeu, 0x0003003eu, 0x000043a4u, 0x000043afu, 0x00050041u, 0x00000007u, 0x000043b0u, 0x00002dcau, 0x0000032du, 0x0004003du, 0x00000006u, 0x000043b1u, 0x000043b0u, 0x00050080u, 0x00000006u, 0x000043b3u, 0x000043afu, 0x000043b1u, 0x0003003eu, 0x000043a4u, 0x000043b3u, 0x000500c7u, 0x00000006u, 0x000043b5u, 0x000043b3u, 0x00000e65u, 0x0003003eu, 0x000043a4u, 0x000043b5u, 0x0003003eu, 0x000043a5u, 0x000043b5u, 0x0004003du, 0x00000006u, 0x000043b8u, 0x000043acu, 0x000500c7u, 0x00000006u, 0x000043b9u, 0x000043b8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000043bau, 0x000043b9u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000043bcu, 0x000043b5u, 0x000043bau, 0x0003003eu, 0x000043a5u, 0x000043bcu, 0x000500c6u, 0x00000006u, 0x000043beu, 0x000043bcu, 0x00000464u, 0x0003003eu, 0x000043a5u, 0x000043beu, 0x00080041u, 0x00000671u, 0x000043c1u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000043beu, 0x0004003du, 0x0000000fu, 0x000043c2u, 0x000043c1u, 0x00040071u, 0x00000006u, 0x000043c3u, 0x000043c2u, 0x0003003eu, 0x000043a6u, 0x000043c3u, 0x00040071u, 0x00000011u, 0x000043c5u, 0x000043c3u, 0x0004007cu, 0x00000012u, 0x000043c6u, 0x000043c5u, 0x00070050u, 0x00000013u, 0x000043c7u, 0x000043c6u, 0x000043c6u, 0x000043c6u, 0x000043c6u, 0x0003003eu, 0x000043a7u, 0x000043c7u, 0x0003003eu, 0x00002cd7u, 0x000043c7u, 0x00050050u, 0x000000efu, 0x0000311au, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x0000311bu, 0x0000311au, 0x0003003eu, 0x00006f96u, 0x00002c9cu, 0x0003003eu, 0x00006f97u, 0x00002c9eu, 0x0003003eu, 0x00002dccu, 0x000021b2u, 0x0003003eu, 0x00002dcdu, 0x0000311bu, 0x00050041u, 0x00000007u, 0x000043d0u, 0x00002dcdu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000043d1u, 0x000043d0u, 0x00050084u, 0x00000006u, 0x000043d2u, 0x00002c9eu, 0x000043d1u, 0x00050080u, 0x00000006u, 0x000043d3u, 0x00002c9cu, 0x000043d2u, 0x0003003eu, 0x000043c8u, 0x000043d3u, 0x00050041u, 0x00000007u, 0x000043d4u, 0x00002dcdu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000043d5u, 0x000043d4u, 0x00050080u, 0x00000006u, 0x000043d7u, 0x000043d3u, 0x000043d5u, 0x0003003eu, 0x000043c8u, 0x000043d7u, 0x000500c7u, 0x00000006u, 0x000043d9u, 0x000043d7u, 0x00000e65u, 0x0003003eu, 0x000043c8u, 0x000043d9u, 0x0003003eu, 0x000043c9u, 0x000043d9u, 0x0004003du, 0x00000006u, 0x000043dcu, 0x000043d0u, 0x000500c7u, 0x00000006u, 0x000043ddu, 0x000043dcu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000043deu, 0x000043ddu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000043e0u, 0x000043d9u, 0x000043deu, 0x0003003eu, 0x000043c9u, 0x000043e0u, 0x000500c6u, 0x00000006u, 0x000043e2u, 0x000043e0u, 0x00000464u, 0x0003003eu, 0x000043c9u, 0x000043e2u, 0x00080041u, 0x00000671u, 0x000043e5u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000043e2u, 0x0004003du, 0x0000000fu, 0x000043e6u, 0x000043e5u, 0x00040071u, 0x00000006u, 0x000043e7u, 0x000043e6u, 0x0003003eu, 0x000043cau, 0x000043e7u, 0x00040071u, 0x00000011u, 0x000043e9u, 0x000043e7u, 0x0004007cu, 0x00000012u, 0x000043eau, 0x000043e9u, 0x00070050u, 0x00000013u, 0x000043ebu, 0x000043eau, 0x000043eau, 0x000043eau, 0x000043eau, 0x0003003eu, 0x000043cbu, 0x000043ebu, 0x0003003eu, 0x00002cdfu, 0x000043ebu, 0x000200f9u, 0x0000310fu, 0x000200f8u, 0x0000310fu, 0x000700f5u, 0x00000013u, 0x00008897u, 0x00008839u, 0x000030c8u, 0x000043ebu, 0x00003110u, 0x000700f5u, 0x00000013u, 0x0000879fu, 0x0000873du, 0x000030c8u, 0x000043c7u, 0x00003110u, 0x000300f7u, 0x00003120u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003121u, 0x00003120u, 0x000200f8u, 0x00003121u, 0x00050050u, 0x000000efu, 0x00003124u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003125u, 0x00003124u, 0x0003003eu, 0x00006f9au, 0x00002c9cu, 0x0003003eu, 0x00006f9bu, 0x00002c9eu, 0x0003003eu, 0x00002dcfu, 0x000021b2u, 0x0003003eu, 0x00002dd0u, 0x00003125u, 0x00050041u, 0x00000007u, 0x000043f4u, 0x00002dd0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000043f5u, 0x000043f4u, 0x00050084u, 0x00000006u, 0x000043f6u, 0x00002c9eu, 0x000043f5u, 0x00050080u, 0x00000006u, 0x000043f7u, 0x00002c9cu, 0x000043f6u, 0x0003003eu, 0x000043ecu, 0x000043f7u, 0x00050041u, 0x00000007u, 0x000043f8u, 0x00002dd0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000043f9u, 0x000043f8u, 0x00050080u, 0x00000006u, 0x000043fbu, 0x000043f7u, 0x000043f9u, 0x0003003eu, 0x000043ecu, 0x000043fbu, 0x000500c7u, 0x00000006u, 0x000043fdu, 0x000043fbu, 0x00000e65u, 0x0003003eu, 0x000043ecu, 0x000043fdu, 0x0003003eu, 0x000043edu, 0x000043fdu, 0x0004003du, 0x00000006u, 0x00004400u, 0x000043f4u, 0x000500c7u, 0x00000006u, 0x00004401u, 0x00004400u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004402u, 0x00004401u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004404u, 0x000043fdu, 0x00004402u, 0x0003003eu, 0x000043edu, 0x00004404u, 0x000500c6u, 0x00000006u, 0x00004406u, 0x00004404u, 0x00000464u, 0x0003003eu, 0x000043edu, 0x00004406u, 0x00080041u, 0x00000671u, 0x00004409u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004406u, 0x0004003du, 0x0000000fu, 0x0000440au, 0x00004409u, 0x00040071u, 0x00000006u, 0x0000440bu, 0x0000440au, 0x0003003eu, 0x000043eeu, 0x0000440bu, 0x00040071u, 0x00000011u, 0x0000440du, 0x0000440bu, 0x0004007cu, 0x00000012u, 0x0000440eu, 0x0000440du, 0x00070050u, 0x00000013u, 0x0000440fu, 0x0000440eu, 0x0000440eu, 0x0000440eu, 0x0000440eu, 0x0003003eu, 0x000043efu, 0x0000440fu, 0x0003003eu, 0x00002ce7u, 0x0000440fu, 0x000200f9u, 0x00003120u, 0x000200f8u, 0x00003120u, 0x000700f5u, 0x00000013u, 0x00008913u, 0x000088b3u, 0x0000310fu, 0x0000440fu, 0x00003121u, 0x000200f9u, 0x000030c5u, 0x000200f8u, 0x000030c7u, 0x0004007cu, 0x000000b0u, 0x000030eau, 0x000083b3u, 0x0003003eu, 0x00006f7eu, 0x00002c9cu, 0x0003003eu, 0x00006f7fu, 0x00002c9eu, 0x0003003eu, 0x00002dbau, 0x000021b2u, 0x0003003eu, 0x00002dbbu, 0x000030eau, 0x00050041u, 0x00000007u, 0x000042bdu, 0x00002dbbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000042beu, 0x000042bdu, 0x00050084u, 0x00000006u, 0x000042bfu, 0x00002c9eu, 0x000042beu, 0x00050080u, 0x00000006u, 0x000042c0u, 0x00002c9cu, 0x000042bfu, 0x0003003eu, 0x000042b4u, 0x000042c0u, 0x00050041u, 0x00000007u, 0x000042c1u, 0x00002dbbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000042c2u, 0x000042c1u, 0x000500c2u, 0x00000006u, 0x000042c3u, 0x000042c2u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000042c5u, 0x000042c0u, 0x000042c3u, 0x0003003eu, 0x000042b4u, 0x000042c5u, 0x000500c7u, 0x00000006u, 0x000042c7u, 0x000042c5u, 0x00000e65u, 0x0003003eu, 0x000042b4u, 0x000042c7u, 0x0004003du, 0x00000006u, 0x000042c9u, 0x000042c1u, 0x000400c8u, 0x00000006u, 0x000042cau, 0x000042c9u, 0x000500c7u, 0x00000006u, 0x000042cbu, 0x000042cau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000042ccu, 0x000042cbu, 0x00000704u, 0x0003003eu, 0x000042b5u, 0x000042ccu, 0x0003003eu, 0x000042b6u, 0x000042c7u, 0x0004003du, 0x00000006u, 0x000042cfu, 0x000042bdu, 0x000500c7u, 0x00000006u, 0x000042d0u, 0x000042cfu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000042d1u, 0x000042d0u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000042d3u, 0x000042c7u, 0x000042d1u, 0x0003003eu, 0x000042b6u, 0x000042d3u, 0x000500c6u, 0x00000006u, 0x000042d5u, 0x000042d3u, 0x00000464u, 0x0003003eu, 0x000042b6u, 0x000042d5u, 0x00080041u, 0x00000671u, 0x000042d8u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000042d5u, 0x0004003du, 0x0000000fu, 0x000042d9u, 0x000042d8u, 0x00040071u, 0x00000006u, 0x000042dau, 0x000042d9u, 0x0003003eu, 0x000042b7u, 0x000042dau, 0x000500c2u, 0x00000006u, 0x000042ddu, 0x000042dau, 0x000042ccu, 0x000500c7u, 0x00000006u, 0x000042deu, 0x000042ddu, 0x00000e88u, 0x0003003eu, 0x000042b7u, 0x000042deu, 0x000500c4u, 0x00000006u, 0x000042e0u, 0x000042deu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000042e2u, 0x000042deu, 0x000042e0u, 0x0003003eu, 0x000042b7u, 0x000042e2u, 0x00040071u, 0x00000011u, 0x000042e4u, 0x000042e2u, 0x0004007cu, 0x00000012u, 0x000042e5u, 0x000042e4u, 0x00070050u, 0x00000013u, 0x000042e6u, 0x000042e5u, 0x000042e5u, 0x000042e5u, 0x000042e5u, 0x0003003eu, 0x000042b8u, 0x000042e6u, 0x0003003eu, 0x00002ccfu, 0x000042e6u, 0x000300f7u, 0x000030efu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000030f0u, 0x000030efu, 0x000200f8u, 0x000030f0u, 0x00050050u, 0x000000efu, 0x000030f3u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x000030f4u, 0x000030f3u, 0x0003003eu, 0x00006f82u, 0x00002c9cu, 0x0003003eu, 0x00006f83u, 0x00002c9eu, 0x0003003eu, 0x00002dbdu, 0x000021b2u, 0x0003003eu, 0x00002dbeu, 0x000030f4u, 0x00050041u, 0x00000007u, 0x000042f0u, 0x00002dbeu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000042f1u, 0x000042f0u, 0x00050084u, 0x00000006u, 0x000042f2u, 0x00002c9eu, 0x000042f1u, 0x00050080u, 0x00000006u, 0x000042f3u, 0x00002c9cu, 0x000042f2u, 0x0003003eu, 0x000042e7u, 0x000042f3u, 0x00050041u, 0x00000007u, 0x000042f4u, 0x00002dbeu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000042f5u, 0x000042f4u, 0x000500c2u, 0x00000006u, 0x000042f6u, 0x000042f5u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000042f8u, 0x000042f3u, 0x000042f6u, 0x0003003eu, 0x000042e7u, 0x000042f8u, 0x000500c7u, 0x00000006u, 0x000042fau, 0x000042f8u, 0x00000e65u, 0x0003003eu, 0x000042e7u, 0x000042fau, 0x0004003du, 0x00000006u, 0x000042fcu, 0x000042f4u, 0x000400c8u, 0x00000006u, 0x000042fdu, 0x000042fcu, 0x000500c7u, 0x00000006u, 0x000042feu, 0x000042fdu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000042ffu, 0x000042feu, 0x00000704u, 0x0003003eu, 0x000042e8u, 0x000042ffu, 0x0003003eu, 0x000042e9u, 0x000042fau, 0x0004003du, 0x00000006u, 0x00004302u, 0x000042f0u, 0x000500c7u, 0x00000006u, 0x00004303u, 0x00004302u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004304u, 0x00004303u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004306u, 0x000042fau, 0x00004304u, 0x0003003eu, 0x000042e9u, 0x00004306u, 0x000500c6u, 0x00000006u, 0x00004308u, 0x00004306u, 0x00000464u, 0x0003003eu, 0x000042e9u, 0x00004308u, 0x00080041u, 0x00000671u, 0x0000430bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004308u, 0x0004003du, 0x0000000fu, 0x0000430cu, 0x0000430bu, 0x00040071u, 0x00000006u, 0x0000430du, 0x0000430cu, 0x0003003eu, 0x000042eau, 0x0000430du, 0x000500c2u, 0x00000006u, 0x00004310u, 0x0000430du, 0x000042ffu, 0x000500c7u, 0x00000006u, 0x00004311u, 0x00004310u, 0x00000e88u, 0x0003003eu, 0x000042eau, 0x00004311u, 0x000500c4u, 0x00000006u, 0x00004313u, 0x00004311u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004315u, 0x00004311u, 0x00004313u, 0x0003003eu, 0x000042eau, 0x00004315u, 0x00040071u, 0x00000011u, 0x00004317u, 0x00004315u, 0x0004007cu, 0x00000012u, 0x00004318u, 0x00004317u, 0x00070050u, 0x00000013u, 0x00004319u, 0x00004318u, 0x00004318u, 0x00004318u, 0x00004318u, 0x0003003eu, 0x000042ebu, 0x00004319u, 0x0003003eu, 0x00002cd7u, 0x00004319u, 0x00050050u, 0x000000efu, 0x000030fau, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x000030fbu, 0x000030fau, 0x0003003eu, 0x00006f86u, 0x00002c9cu, 0x0003003eu, 0x00006f87u, 0x00002c9eu, 0x0003003eu, 0x00002dc0u, 0x000021b2u, 0x0003003eu, 0x00002dc1u, 0x000030fbu, 0x00050041u, 0x00000007u, 0x00004323u, 0x00002dc1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004324u, 0x00004323u, 0x00050084u, 0x00000006u, 0x00004325u, 0x00002c9eu, 0x00004324u, 0x00050080u, 0x00000006u, 0x00004326u, 0x00002c9cu, 0x00004325u, 0x0003003eu, 0x0000431au, 0x00004326u, 0x00050041u, 0x00000007u, 0x00004327u, 0x00002dc1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004328u, 0x00004327u, 0x000500c2u, 0x00000006u, 0x00004329u, 0x00004328u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000432bu, 0x00004326u, 0x00004329u, 0x0003003eu, 0x0000431au, 0x0000432bu, 0x000500c7u, 0x00000006u, 0x0000432du, 0x0000432bu, 0x00000e65u, 0x0003003eu, 0x0000431au, 0x0000432du, 0x0004003du, 0x00000006u, 0x0000432fu, 0x00004327u, 0x000400c8u, 0x00000006u, 0x00004330u, 0x0000432fu, 0x000500c7u, 0x00000006u, 0x00004331u, 0x00004330u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004332u, 0x00004331u, 0x00000704u, 0x0003003eu, 0x0000431bu, 0x00004332u, 0x0003003eu, 0x0000431cu, 0x0000432du, 0x0004003du, 0x00000006u, 0x00004335u, 0x00004323u, 0x000500c7u, 0x00000006u, 0x00004336u, 0x00004335u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004337u, 0x00004336u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004339u, 0x0000432du, 0x00004337u, 0x0003003eu, 0x0000431cu, 0x00004339u, 0x000500c6u, 0x00000006u, 0x0000433bu, 0x00004339u, 0x00000464u, 0x0003003eu, 0x0000431cu, 0x0000433bu, 0x00080041u, 0x00000671u, 0x0000433eu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000433bu, 0x0004003du, 0x0000000fu, 0x0000433fu, 0x0000433eu, 0x00040071u, 0x00000006u, 0x00004340u, 0x0000433fu, 0x0003003eu, 0x0000431du, 0x00004340u, 0x000500c2u, 0x00000006u, 0x00004343u, 0x00004340u, 0x00004332u, 0x000500c7u, 0x00000006u, 0x00004344u, 0x00004343u, 0x00000e88u, 0x0003003eu, 0x0000431du, 0x00004344u, 0x000500c4u, 0x00000006u, 0x00004346u, 0x00004344u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004348u, 0x00004344u, 0x00004346u, 0x0003003eu, 0x0000431du, 0x00004348u, 0x00040071u, 0x00000011u, 0x0000434au, 0x00004348u, 0x0004007cu, 0x00000012u, 0x0000434bu, 0x0000434au, 0x00070050u, 0x00000013u, 0x0000434cu, 0x0000434bu, 0x0000434bu, 0x0000434bu, 0x0000434bu, 0x0003003eu, 0x0000431eu, 0x0000434cu, 0x0003003eu, 0x00002cdfu, 0x0000434cu, 0x000200f9u, 0x000030efu, 0x000200f8u, 0x000030efu, 0x000700f5u, 0x00000013u, 0x00008895u, 0x00008839u, 0x000030c7u, 0x0000434cu, 0x000030f0u, 0x000700f5u, 0x00000013u, 0x0000879du, 0x0000873du, 0x000030c7u, 0x00004319u, 0x000030f0u, 0x000300f7u, 0x00003100u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003101u, 0x00003100u, 0x000200f8u, 0x00003101u, 0x00050050u, 0x000000efu, 0x00003104u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003105u, 0x00003104u, 0x0003003eu, 0x00006f8au, 0x00002c9cu, 0x0003003eu, 0x00006f8bu, 0x00002c9eu, 0x0003003eu, 0x00002dc3u, 0x000021b2u, 0x0003003eu, 0x00002dc4u, 0x00003105u, 0x00050041u, 0x00000007u, 0x00004356u, 0x00002dc4u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004357u, 0x00004356u, 0x00050084u, 0x00000006u, 0x00004358u, 0x00002c9eu, 0x00004357u, 0x00050080u, 0x00000006u, 0x00004359u, 0x00002c9cu, 0x00004358u, 0x0003003eu, 0x0000434du, 0x00004359u, 0x00050041u, 0x00000007u, 0x0000435au, 0x00002dc4u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000435bu, 0x0000435au, 0x000500c2u, 0x00000006u, 0x0000435cu, 0x0000435bu, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000435eu, 0x00004359u, 0x0000435cu, 0x0003003eu, 0x0000434du, 0x0000435eu, 0x000500c7u, 0x00000006u, 0x00004360u, 0x0000435eu, 0x00000e65u, 0x0003003eu, 0x0000434du, 0x00004360u, 0x0004003du, 0x00000006u, 0x00004362u, 0x0000435au, 0x000400c8u, 0x00000006u, 0x00004363u, 0x00004362u, 0x000500c7u, 0x00000006u, 0x00004364u, 0x00004363u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004365u, 0x00004364u, 0x00000704u, 0x0003003eu, 0x0000434eu, 0x00004365u, 0x0003003eu, 0x0000434fu, 0x00004360u, 0x0004003du, 0x00000006u, 0x00004368u, 0x00004356u, 0x000500c7u, 0x00000006u, 0x00004369u, 0x00004368u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000436au, 0x00004369u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000436cu, 0x00004360u, 0x0000436au, 0x0003003eu, 0x0000434fu, 0x0000436cu, 0x000500c6u, 0x00000006u, 0x0000436eu, 0x0000436cu, 0x00000464u, 0x0003003eu, 0x0000434fu, 0x0000436eu, 0x00080041u, 0x00000671u, 0x00004371u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000436eu, 0x0004003du, 0x0000000fu, 0x00004372u, 0x00004371u, 0x00040071u, 0x00000006u, 0x00004373u, 0x00004372u, 0x0003003eu, 0x00004350u, 0x00004373u, 0x000500c2u, 0x00000006u, 0x00004376u, 0x00004373u, 0x00004365u, 0x000500c7u, 0x00000006u, 0x00004377u, 0x00004376u, 0x00000e88u, 0x0003003eu, 0x00004350u, 0x00004377u, 0x000500c4u, 0x00000006u, 0x00004379u, 0x00004377u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000437bu, 0x00004377u, 0x00004379u, 0x0003003eu, 0x00004350u, 0x0000437bu, 0x00040071u, 0x00000011u, 0x0000437du, 0x0000437bu, 0x0004007cu, 0x00000012u, 0x0000437eu, 0x0000437du, 0x00070050u, 0x00000013u, 0x0000437fu, 0x0000437eu, 0x0000437eu, 0x0000437eu, 0x0000437eu, 0x0003003eu, 0x00004351u, 0x0000437fu, 0x0003003eu, 0x00002ce7u, 0x0000437fu, 0x000200f9u, 0x00003100u, 0x000200f8u, 0x00003100u, 0x000700f5u, 0x00000013u, 0x00008911u, 0x000088b3u, 0x000030efu, 0x0000437fu, 0x00003101u, 0x000200f9u, 0x000030c5u, 0x000200f8u, 0x000030c6u, 0x0004007cu, 0x000000b0u, 0x000030cau, 0x000083b3u, 0x0003003eu, 0x00006f9eu, 0x00002c9cu, 0x0003003eu, 0x00006f9fu, 0x00002c9eu, 0x0003003eu, 0x00002dd2u, 0x000021b2u, 0x0003003eu, 0x00002dd3u, 0x000030cau, 0x00050041u, 0x00000007u, 0x0000420cu, 0x00002dd3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000420du, 0x0000420cu, 0x00050084u, 0x00000006u, 0x0000420eu, 0x00002c9eu, 0x0000420du, 0x00050080u, 0x00000006u, 0x0000420fu, 0x00002c9cu, 0x0000420eu, 0x0003003eu, 0x00004204u, 0x0000420fu, 0x00050041u, 0x00000007u, 0x00004210u, 0x00002dd3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004211u, 0x00004210u, 0x00050084u, 0x00000006u, 0x00004212u, 0x00004211u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004214u, 0x0000420fu, 0x00004212u, 0x0003003eu, 0x00004204u, 0x00004214u, 0x000500c7u, 0x00000006u, 0x00004216u, 0x00004214u, 0x00000e65u, 0x0003003eu, 0x00004204u, 0x00004216u, 0x000500c2u, 0x00000006u, 0x00004218u, 0x00004216u, 0x0000022au, 0x0003003eu, 0x00004205u, 0x00004218u, 0x0004003du, 0x00000006u, 0x0000421au, 0x0000420cu, 0x000500c7u, 0x00000006u, 0x0000421bu, 0x0000421au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000421cu, 0x0000421bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000421eu, 0x00004218u, 0x0000421cu, 0x0003003eu, 0x00004205u, 0x0000421eu, 0x000500c6u, 0x00000006u, 0x00004220u, 0x0000421eu, 0x0000045cu, 0x0003003eu, 0x00004205u, 0x00004220u, 0x00080041u, 0x00000692u, 0x00004223u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004220u, 0x0004003du, 0x00000011u, 0x00004224u, 0x00004223u, 0x00040071u, 0x00000006u, 0x00004225u, 0x00004224u, 0x0003003eu, 0x00004206u, 0x00004225u, 0x000500c2u, 0x00000006u, 0x00004227u, 0x00004225u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004228u, 0x00004227u, 0x0004007cu, 0x00000012u, 0x00004229u, 0x00004228u, 0x000500c7u, 0x00000006u, 0x0000422bu, 0x00004225u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000422cu, 0x0000422bu, 0x0004007cu, 0x00000012u, 0x0000422du, 0x0000422cu, 0x00050050u, 0x000001aeu, 0x0000422eu, 0x00004229u, 0x0000422du, 0x0009004fu, 0x00000013u, 0x0000422fu, 0x0000422eu, 0x0000422eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004207u, 0x0000422fu, 0x0003003eu, 0x00002ccfu, 0x0000422fu, 0x000300f7u, 0x000030cfu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000030d0u, 0x000030cfu, 0x000200f8u, 0x000030d0u, 0x00050050u, 0x000000efu, 0x000030d3u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x000030d4u, 0x000030d3u, 0x0003003eu, 0x00006fa2u, 0x00002c9cu, 0x0003003eu, 0x00006fa3u, 0x00002c9eu, 0x0003003eu, 0x00002dd5u, 0x000021b2u, 0x0003003eu, 0x00002dd6u, 0x000030d4u, 0x00050041u, 0x00000007u, 0x00004238u, 0x00002dd6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004239u, 0x00004238u, 0x00050084u, 0x00000006u, 0x0000423au, 0x00002c9eu, 0x00004239u, 0x00050080u, 0x00000006u, 0x0000423bu, 0x00002c9cu, 0x0000423au, 0x0003003eu, 0x00004230u, 0x0000423bu, 0x00050041u, 0x00000007u, 0x0000423cu, 0x00002dd6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000423du, 0x0000423cu, 0x00050084u, 0x00000006u, 0x0000423eu, 0x0000423du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004240u, 0x0000423bu, 0x0000423eu, 0x0003003eu, 0x00004230u, 0x00004240u, 0x000500c7u, 0x00000006u, 0x00004242u, 0x00004240u, 0x00000e65u, 0x0003003eu, 0x00004230u, 0x00004242u, 0x000500c2u, 0x00000006u, 0x00004244u, 0x00004242u, 0x0000022au, 0x0003003eu, 0x00004231u, 0x00004244u, 0x0004003du, 0x00000006u, 0x00004246u, 0x00004238u, 0x000500c7u, 0x00000006u, 0x00004247u, 0x00004246u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004248u, 0x00004247u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000424au, 0x00004244u, 0x00004248u, 0x0003003eu, 0x00004231u, 0x0000424au, 0x000500c6u, 0x00000006u, 0x0000424cu, 0x0000424au, 0x0000045cu, 0x0003003eu, 0x00004231u, 0x0000424cu, 0x00080041u, 0x00000692u, 0x0000424fu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000424cu, 0x0004003du, 0x00000011u, 0x00004250u, 0x0000424fu, 0x00040071u, 0x00000006u, 0x00004251u, 0x00004250u, 0x0003003eu, 0x00004232u, 0x00004251u, 0x000500c2u, 0x00000006u, 0x00004253u, 0x00004251u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004254u, 0x00004253u, 0x0004007cu, 0x00000012u, 0x00004255u, 0x00004254u, 0x000500c7u, 0x00000006u, 0x00004257u, 0x00004251u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00004258u, 0x00004257u, 0x0004007cu, 0x00000012u, 0x00004259u, 0x00004258u, 0x00050050u, 0x000001aeu, 0x0000425au, 0x00004255u, 0x00004259u, 0x0009004fu, 0x00000013u, 0x0000425bu, 0x0000425au, 0x0000425au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004233u, 0x0000425bu, 0x0003003eu, 0x00002cd7u, 0x0000425bu, 0x00050050u, 0x000000efu, 0x000030dau, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x000030dbu, 0x000030dau, 0x0003003eu, 0x00006fa6u, 0x00002c9cu, 0x0003003eu, 0x00006fa7u, 0x00002c9eu, 0x0003003eu, 0x00002dd8u, 0x000021b2u, 0x0003003eu, 0x00002dd9u, 0x000030dbu, 0x00050041u, 0x00000007u, 0x00004264u, 0x00002dd9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004265u, 0x00004264u, 0x00050084u, 0x00000006u, 0x00004266u, 0x00002c9eu, 0x00004265u, 0x00050080u, 0x00000006u, 0x00004267u, 0x00002c9cu, 0x00004266u, 0x0003003eu, 0x0000425cu, 0x00004267u, 0x00050041u, 0x00000007u, 0x00004268u, 0x00002dd9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004269u, 0x00004268u, 0x00050084u, 0x00000006u, 0x0000426au, 0x00004269u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000426cu, 0x00004267u, 0x0000426au, 0x0003003eu, 0x0000425cu, 0x0000426cu, 0x000500c7u, 0x00000006u, 0x0000426eu, 0x0000426cu, 0x00000e65u, 0x0003003eu, 0x0000425cu, 0x0000426eu, 0x000500c2u, 0x00000006u, 0x00004270u, 0x0000426eu, 0x0000022au, 0x0003003eu, 0x0000425du, 0x00004270u, 0x0004003du, 0x00000006u, 0x00004272u, 0x00004264u, 0x000500c7u, 0x00000006u, 0x00004273u, 0x00004272u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004274u, 0x00004273u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004276u, 0x00004270u, 0x00004274u, 0x0003003eu, 0x0000425du, 0x00004276u, 0x000500c6u, 0x00000006u, 0x00004278u, 0x00004276u, 0x0000045cu, 0x0003003eu, 0x0000425du, 0x00004278u, 0x00080041u, 0x00000692u, 0x0000427bu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004278u, 0x0004003du, 0x00000011u, 0x0000427cu, 0x0000427bu, 0x00040071u, 0x00000006u, 0x0000427du, 0x0000427cu, 0x0003003eu, 0x0000425eu, 0x0000427du, 0x000500c2u, 0x00000006u, 0x0000427fu, 0x0000427du, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004280u, 0x0000427fu, 0x0004007cu, 0x00000012u, 0x00004281u, 0x00004280u, 0x000500c7u, 0x00000006u, 0x00004283u, 0x0000427du, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00004284u, 0x00004283u, 0x0004007cu, 0x00000012u, 0x00004285u, 0x00004284u, 0x00050050u, 0x000001aeu, 0x00004286u, 0x00004281u, 0x00004285u, 0x0009004fu, 0x00000013u, 0x00004287u, 0x00004286u, 0x00004286u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000425fu, 0x00004287u, 0x0003003eu, 0x00002cdfu, 0x00004287u, 0x000200f9u, 0x000030cfu, 0x000200f8u, 0x000030cfu, 0x000700f5u, 0x00000013u, 0x00008893u, 0x00008839u, 0x000030c6u, 0x00004287u, 0x000030d0u, 0x000700f5u, 0x00000013u, 0x0000879bu, 0x0000873du, 0x000030c6u, 0x0000425bu, 0x000030d0u, 0x000300f7u, 0x000030e0u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x000030e1u, 0x000030e0u, 0x000200f8u, 0x000030e1u, 0x00050050u, 0x000000efu, 0x000030e4u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x000030e5u, 0x000030e4u, 0x0003003eu, 0x00006faau, 0x00002c9cu, 0x0003003eu, 0x00006fabu, 0x00002c9eu, 0x0003003eu, 0x00002ddbu, 0x000021b2u, 0x0003003eu, 0x00002ddcu, 0x000030e5u, 0x00050041u, 0x00000007u, 0x00004290u, 0x00002ddcu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004291u, 0x00004290u, 0x00050084u, 0x00000006u, 0x00004292u, 0x00002c9eu, 0x00004291u, 0x00050080u, 0x00000006u, 0x00004293u, 0x00002c9cu, 0x00004292u, 0x0003003eu, 0x00004288u, 0x00004293u, 0x00050041u, 0x00000007u, 0x00004294u, 0x00002ddcu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004295u, 0x00004294u, 0x00050084u, 0x00000006u, 0x00004296u, 0x00004295u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004298u, 0x00004293u, 0x00004296u, 0x0003003eu, 0x00004288u, 0x00004298u, 0x000500c7u, 0x00000006u, 0x0000429au, 0x00004298u, 0x00000e65u, 0x0003003eu, 0x00004288u, 0x0000429au, 0x000500c2u, 0x00000006u, 0x0000429cu, 0x0000429au, 0x0000022au, 0x0003003eu, 0x00004289u, 0x0000429cu, 0x0004003du, 0x00000006u, 0x0000429eu, 0x00004290u, 0x000500c7u, 0x00000006u, 0x0000429fu, 0x0000429eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000042a0u, 0x0000429fu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000042a2u, 0x0000429cu, 0x000042a0u, 0x0003003eu, 0x00004289u, 0x000042a2u, 0x000500c6u, 0x00000006u, 0x000042a4u, 0x000042a2u, 0x0000045cu, 0x0003003eu, 0x00004289u, 0x000042a4u, 0x00080041u, 0x00000692u, 0x000042a7u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000042a4u, 0x0004003du, 0x00000011u, 0x000042a8u, 0x000042a7u, 0x00040071u, 0x00000006u, 0x000042a9u, 0x000042a8u, 0x0003003eu, 0x0000428au, 0x000042a9u, 0x000500c2u, 0x00000006u, 0x000042abu, 0x000042a9u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000042acu, 0x000042abu, 0x0004007cu, 0x00000012u, 0x000042adu, 0x000042acu, 0x000500c7u, 0x00000006u, 0x000042afu, 0x000042a9u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000042b0u, 0x000042afu, 0x0004007cu, 0x00000012u, 0x000042b1u, 0x000042b0u, 0x00050050u, 0x000001aeu, 0x000042b2u, 0x000042adu, 0x000042b1u, 0x0009004fu, 0x00000013u, 0x000042b3u, 0x000042b2u, 0x000042b2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000428bu, 0x000042b3u, 0x0003003eu, 0x00002ce7u, 0x000042b3u, 0x000200f9u, 0x000030e0u, 0x000200f8u, 0x000030e0u, 0x000700f5u, 0x00000013u, 0x0000890fu, 0x000088b3u, 0x000030cfu, 0x000042b3u, 0x000030e1u, 0x000200f9u, 0x000030c5u, 0x000200f8u, 0x000030c5u, 0x000900f5u, 0x00000013u, 0x0000890eu, 0x0000890fu, 0x000030e0u, 0x00008911u, 0x00003100u, 0x00008913u, 0x00003120u, 0x000900f5u, 0x00000013u, 0x00008891u, 0x00008893u, 0x000030e0u, 0x00008895u, 0x00003100u, 0x00008897u, 0x00003120u, 0x000900f5u, 0x00000013u, 0x00008816u, 0x0000422fu, 0x000030e0u, 0x000042e6u, 0x00003100u, 0x000043a3u, 0x00003120u, 0x000900f5u, 0x00000013u, 0x00008799u, 0x0000879bu, 0x000030e0u, 0x0000879du, 0x00003100u, 0x0000879fu, 0x00003120u, 0x000200f9u, 0x00002f08u, 0x000200f8u, 0x00002f0cu, 0x00040071u, 0x00000006u, 0x0000303au, 0x00002ca2u, 0x0004007cu, 0x00000008u, 0x0000303bu, 0x0000303au, 0x000300f7u, 0x0000303cu, 0x00000000u, 0x000b00fbu, 0x0000303bu, 0x0000303cu, 0x00000000u, 0x0000303du, 0x00000001u, 0x0000303eu, 0x00000002u, 0x0000303fu, 0x00000003u, 0x00003040u, 0x000200f8u, 0x00003040u, 0x0004007cu, 0x000000b0u, 0x000030a2u, 0x000083b3u, 0x0003003eu, 0x00006f6eu, 0x00002c9cu, 0x0003003eu, 0x00006f6fu, 0x00002c9eu, 0x0003003eu, 0x00002daeu, 0x000021b2u, 0x0003003eu, 0x00002dafu, 0x000030a2u, 0x00050041u, 0x00000007u, 0x0000415cu, 0x00002dafu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000415du, 0x0000415cu, 0x00050084u, 0x00000006u, 0x0000415eu, 0x00002c9eu, 0x0000415du, 0x00050080u, 0x00000006u, 0x0000415fu, 0x00002c9cu, 0x0000415eu, 0x0003003eu, 0x00004154u, 0x0000415fu, 0x00050041u, 0x00000007u, 0x00004160u, 0x00002dafu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004161u, 0x00004160u, 0x00050084u, 0x00000006u, 0x00004162u, 0x00004161u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004164u, 0x0000415fu, 0x00004162u, 0x0003003eu, 0x00004154u, 0x00004164u, 0x000500c7u, 0x00000006u, 0x00004166u, 0x00004164u, 0x00000e65u, 0x0003003eu, 0x00004154u, 0x00004166u, 0x000500c2u, 0x00000006u, 0x00004168u, 0x00004166u, 0x0000022au, 0x0003003eu, 0x00004155u, 0x00004168u, 0x0004003du, 0x00000006u, 0x0000416au, 0x0000415cu, 0x000500c7u, 0x00000006u, 0x0000416bu, 0x0000416au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000416cu, 0x0000416bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000416eu, 0x00004168u, 0x0000416cu, 0x0003003eu, 0x00004155u, 0x0000416eu, 0x000500c6u, 0x00000006u, 0x00004170u, 0x0000416eu, 0x0000045cu, 0x0003003eu, 0x00004155u, 0x00004170u, 0x00080041u, 0x00000692u, 0x00004173u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004170u, 0x0004003du, 0x00000011u, 0x00004174u, 0x00004173u, 0x00040071u, 0x00000006u, 0x00004175u, 0x00004174u, 0x0003003eu, 0x00004156u, 0x00004175u, 0x000500c2u, 0x00000006u, 0x00004177u, 0x00004175u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004178u, 0x00004177u, 0x0004007cu, 0x00000012u, 0x00004179u, 0x00004178u, 0x000500c7u, 0x00000006u, 0x0000417bu, 0x00004175u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000417cu, 0x0000417bu, 0x0004007cu, 0x00000012u, 0x0000417du, 0x0000417cu, 0x00050050u, 0x000001aeu, 0x0000417eu, 0x00004179u, 0x0000417du, 0x0009004fu, 0x00000013u, 0x0000417fu, 0x0000417eu, 0x0000417eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004157u, 0x0000417fu, 0x0003003eu, 0x00002ccfu, 0x0000417fu, 0x000300f7u, 0x000030a7u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000030a8u, 0x000030a7u, 0x000200f8u, 0x000030a8u, 0x00050050u, 0x000000efu, 0x000030abu, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x000030acu, 0x000030abu, 0x0003003eu, 0x00006f72u, 0x00002c9cu, 0x0003003eu, 0x00006f73u, 0x00002c9eu, 0x0003003eu, 0x00002db1u, 0x000021b2u, 0x0003003eu, 0x00002db2u, 0x000030acu, 0x00050041u, 0x00000007u, 0x00004188u, 0x00002db2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004189u, 0x00004188u, 0x00050084u, 0x00000006u, 0x0000418au, 0x00002c9eu, 0x00004189u, 0x00050080u, 0x00000006u, 0x0000418bu, 0x00002c9cu, 0x0000418au, 0x0003003eu, 0x00004180u, 0x0000418bu, 0x00050041u, 0x00000007u, 0x0000418cu, 0x00002db2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000418du, 0x0000418cu, 0x00050084u, 0x00000006u, 0x0000418eu, 0x0000418du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004190u, 0x0000418bu, 0x0000418eu, 0x0003003eu, 0x00004180u, 0x00004190u, 0x000500c7u, 0x00000006u, 0x00004192u, 0x00004190u, 0x00000e65u, 0x0003003eu, 0x00004180u, 0x00004192u, 0x000500c2u, 0x00000006u, 0x00004194u, 0x00004192u, 0x0000022au, 0x0003003eu, 0x00004181u, 0x00004194u, 0x0004003du, 0x00000006u, 0x00004196u, 0x00004188u, 0x000500c7u, 0x00000006u, 0x00004197u, 0x00004196u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004198u, 0x00004197u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000419au, 0x00004194u, 0x00004198u, 0x0003003eu, 0x00004181u, 0x0000419au, 0x000500c6u, 0x00000006u, 0x0000419cu, 0x0000419au, 0x0000045cu, 0x0003003eu, 0x00004181u, 0x0000419cu, 0x00080041u, 0x00000692u, 0x0000419fu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000419cu, 0x0004003du, 0x00000011u, 0x000041a0u, 0x0000419fu, 0x00040071u, 0x00000006u, 0x000041a1u, 0x000041a0u, 0x0003003eu, 0x00004182u, 0x000041a1u, 0x000500c2u, 0x00000006u, 0x000041a3u, 0x000041a1u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000041a4u, 0x000041a3u, 0x0004007cu, 0x00000012u, 0x000041a5u, 0x000041a4u, 0x000500c7u, 0x00000006u, 0x000041a7u, 0x000041a1u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000041a8u, 0x000041a7u, 0x0004007cu, 0x00000012u, 0x000041a9u, 0x000041a8u, 0x00050050u, 0x000001aeu, 0x000041aau, 0x000041a5u, 0x000041a9u, 0x0009004fu, 0x00000013u, 0x000041abu, 0x000041aau, 0x000041aau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004183u, 0x000041abu, 0x0003003eu, 0x00002cd7u, 0x000041abu, 0x00050050u, 0x000000efu, 0x000030b2u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x000030b3u, 0x000030b2u, 0x0003003eu, 0x00006f76u, 0x00002c9cu, 0x0003003eu, 0x00006f77u, 0x00002c9eu, 0x0003003eu, 0x00002db4u, 0x000021b2u, 0x0003003eu, 0x00002db5u, 0x000030b3u, 0x00050041u, 0x00000007u, 0x000041b4u, 0x00002db5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000041b5u, 0x000041b4u, 0x00050084u, 0x00000006u, 0x000041b6u, 0x00002c9eu, 0x000041b5u, 0x00050080u, 0x00000006u, 0x000041b7u, 0x00002c9cu, 0x000041b6u, 0x0003003eu, 0x000041acu, 0x000041b7u, 0x00050041u, 0x00000007u, 0x000041b8u, 0x00002db5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000041b9u, 0x000041b8u, 0x00050084u, 0x00000006u, 0x000041bau, 0x000041b9u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000041bcu, 0x000041b7u, 0x000041bau, 0x0003003eu, 0x000041acu, 0x000041bcu, 0x000500c7u, 0x00000006u, 0x000041beu, 0x000041bcu, 0x00000e65u, 0x0003003eu, 0x000041acu, 0x000041beu, 0x000500c2u, 0x00000006u, 0x000041c0u, 0x000041beu, 0x0000022au, 0x0003003eu, 0x000041adu, 0x000041c0u, 0x0004003du, 0x00000006u, 0x000041c2u, 0x000041b4u, 0x000500c7u, 0x00000006u, 0x000041c3u, 0x000041c2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000041c4u, 0x000041c3u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000041c6u, 0x000041c0u, 0x000041c4u, 0x0003003eu, 0x000041adu, 0x000041c6u, 0x000500c6u, 0x00000006u, 0x000041c8u, 0x000041c6u, 0x0000045cu, 0x0003003eu, 0x000041adu, 0x000041c8u, 0x00080041u, 0x00000692u, 0x000041cbu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000041c8u, 0x0004003du, 0x00000011u, 0x000041ccu, 0x000041cbu, 0x00040071u, 0x00000006u, 0x000041cdu, 0x000041ccu, 0x0003003eu, 0x000041aeu, 0x000041cdu, 0x000500c2u, 0x00000006u, 0x000041cfu, 0x000041cdu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000041d0u, 0x000041cfu, 0x0004007cu, 0x00000012u, 0x000041d1u, 0x000041d0u, 0x000500c7u, 0x00000006u, 0x000041d3u, 0x000041cdu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000041d4u, 0x000041d3u, 0x0004007cu, 0x00000012u, 0x000041d5u, 0x000041d4u, 0x00050050u, 0x000001aeu, 0x000041d6u, 0x000041d1u, 0x000041d5u, 0x0009004fu, 0x00000013u, 0x000041d7u, 0x000041d6u, 0x000041d6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000041afu, 0x000041d7u, 0x0003003eu, 0x00002cdfu, 0x000041d7u, 0x000200f9u, 0x000030a7u, 0x000200f8u, 0x000030a7u, 0x000700f5u, 0x00000013u, 0x00008890u, 0x00008839u, 0x00003040u, 0x000041d7u, 0x000030a8u, 0x000700f5u, 0x00000013u, 0x00008798u, 0x0000873du, 0x00003040u, 0x000041abu, 0x000030a8u, 0x000300f7u, 0x000030b8u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x000030b9u, 0x000030b8u, 0x000200f8u, 0x000030b9u, 0x00050050u, 0x000000efu, 0x000030bcu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x000030bdu, 0x000030bcu, 0x0003003eu, 0x00006f7au, 0x00002c9cu, 0x0003003eu, 0x00006f7bu, 0x00002c9eu, 0x0003003eu, 0x00002db7u, 0x000021b2u, 0x0003003eu, 0x00002db8u, 0x000030bdu, 0x00050041u, 0x00000007u, 0x000041e0u, 0x00002db8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000041e1u, 0x000041e0u, 0x00050084u, 0x00000006u, 0x000041e2u, 0x00002c9eu, 0x000041e1u, 0x00050080u, 0x00000006u, 0x000041e3u, 0x00002c9cu, 0x000041e2u, 0x0003003eu, 0x000041d8u, 0x000041e3u, 0x00050041u, 0x00000007u, 0x000041e4u, 0x00002db8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000041e5u, 0x000041e4u, 0x00050084u, 0x00000006u, 0x000041e6u, 0x000041e5u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000041e8u, 0x000041e3u, 0x000041e6u, 0x0003003eu, 0x000041d8u, 0x000041e8u, 0x000500c7u, 0x00000006u, 0x000041eau, 0x000041e8u, 0x00000e65u, 0x0003003eu, 0x000041d8u, 0x000041eau, 0x000500c2u, 0x00000006u, 0x000041ecu, 0x000041eau, 0x0000022au, 0x0003003eu, 0x000041d9u, 0x000041ecu, 0x0004003du, 0x00000006u, 0x000041eeu, 0x000041e0u, 0x000500c7u, 0x00000006u, 0x000041efu, 0x000041eeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000041f0u, 0x000041efu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000041f2u, 0x000041ecu, 0x000041f0u, 0x0003003eu, 0x000041d9u, 0x000041f2u, 0x000500c6u, 0x00000006u, 0x000041f4u, 0x000041f2u, 0x0000045cu, 0x0003003eu, 0x000041d9u, 0x000041f4u, 0x00080041u, 0x00000692u, 0x000041f7u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000041f4u, 0x0004003du, 0x00000011u, 0x000041f8u, 0x000041f7u, 0x00040071u, 0x00000006u, 0x000041f9u, 0x000041f8u, 0x0003003eu, 0x000041dau, 0x000041f9u, 0x000500c2u, 0x00000006u, 0x000041fbu, 0x000041f9u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000041fcu, 0x000041fbu, 0x0004007cu, 0x00000012u, 0x000041fdu, 0x000041fcu, 0x000500c7u, 0x00000006u, 0x000041ffu, 0x000041f9u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00004200u, 0x000041ffu, 0x0004007cu, 0x00000012u, 0x00004201u, 0x00004200u, 0x00050050u, 0x000001aeu, 0x00004202u, 0x000041fdu, 0x00004201u, 0x0009004fu, 0x00000013u, 0x00004203u, 0x00004202u, 0x00004202u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000041dbu, 0x00004203u, 0x0003003eu, 0x00002ce7u, 0x00004203u, 0x000200f9u, 0x000030b8u, 0x000200f8u, 0x000030b8u, 0x000700f5u, 0x00000013u, 0x0000890cu, 0x000088b3u, 0x000030a7u, 0x00004203u, 0x000030b9u, 0x000200f9u, 0x0000303cu, 0x000200f8u, 0x0000303fu, 0x0004007cu, 0x000000b0u, 0x00003082u, 0x000083b3u, 0x0003003eu, 0x00006f5eu, 0x00002c9cu, 0x0003003eu, 0x00006f5fu, 0x00002c9eu, 0x0003003eu, 0x00002da2u, 0x000021b2u, 0x0003003eu, 0x00002da3u, 0x00003082u, 0x00050041u, 0x00000007u, 0x00004079u, 0x00002da3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000407au, 0x00004079u, 0x00050084u, 0x00000006u, 0x0000407bu, 0x00002c9eu, 0x0000407au, 0x00050080u, 0x00000006u, 0x0000407cu, 0x00002c9cu, 0x0000407bu, 0x0003003eu, 0x00004070u, 0x0000407cu, 0x00050041u, 0x00000007u, 0x0000407du, 0x00002da3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000407eu, 0x0000407du, 0x00050084u, 0x00000006u, 0x0000407fu, 0x0000407eu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004081u, 0x0000407cu, 0x0000407fu, 0x0003003eu, 0x00004070u, 0x00004081u, 0x000500c7u, 0x00000006u, 0x00004083u, 0x00004081u, 0x00000e65u, 0x0003003eu, 0x00004070u, 0x00004083u, 0x000500c2u, 0x00000006u, 0x00004085u, 0x00004083u, 0x0000022au, 0x0003003eu, 0x00004071u, 0x00004085u, 0x0004003du, 0x00000006u, 0x00004087u, 0x00004079u, 0x000500c7u, 0x00000006u, 0x00004088u, 0x00004087u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004089u, 0x00004088u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000408bu, 0x00004085u, 0x00004089u, 0x0003003eu, 0x00004071u, 0x0000408bu, 0x000500c6u, 0x00000006u, 0x0000408du, 0x0000408bu, 0x0000045cu, 0x0003003eu, 0x00004071u, 0x0000408du, 0x00080041u, 0x00000692u, 0x00004090u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000408du, 0x0004003du, 0x00000011u, 0x00004091u, 0x00004090u, 0x00040071u, 0x00000006u, 0x00004092u, 0x00004091u, 0x0003003eu, 0x00004072u, 0x00004092u, 0x0003003eu, 0x00004073u, 0x00004092u, 0x000500c2u, 0x00000006u, 0x00004099u, 0x00004092u, 0x0000025du, 0x0003003eu, 0x00004095u, 0x00004099u, 0x000500c7u, 0x00000006u, 0x0000409bu, 0x00004092u, 0x000006c3u, 0x0003003eu, 0x00004096u, 0x0000409bu, 0x00040071u, 0x00000011u, 0x0000409du, 0x00004099u, 0x0004007cu, 0x00000012u, 0x0000409eu, 0x0000409du, 0x00040071u, 0x00000011u, 0x000040a6u, 0x0000409bu, 0x0004007cu, 0x00000012u, 0x000040a7u, 0x000040a6u, 0x00070050u, 0x00000013u, 0x000040a8u, 0x0000409eu, 0x0000409eu, 0x0000409eu, 0x000040a7u, 0x0003003eu, 0x00004097u, 0x000040a8u, 0x0003003eu, 0x00004074u, 0x000040a8u, 0x0003003eu, 0x00002ccfu, 0x000040a8u, 0x000300f7u, 0x00003087u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00003088u, 0x00003087u, 0x000200f8u, 0x00003088u, 0x00050050u, 0x000000efu, 0x0000308bu, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x0000308cu, 0x0000308bu, 0x0003003eu, 0x00006f62u, 0x00002c9cu, 0x0003003eu, 0x00006f63u, 0x00002c9eu, 0x0003003eu, 0x00002da5u, 0x000021b2u, 0x0003003eu, 0x00002da6u, 0x0000308cu, 0x00050041u, 0x00000007u, 0x000040b2u, 0x00002da6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000040b3u, 0x000040b2u, 0x00050084u, 0x00000006u, 0x000040b4u, 0x00002c9eu, 0x000040b3u, 0x00050080u, 0x00000006u, 0x000040b5u, 0x00002c9cu, 0x000040b4u, 0x0003003eu, 0x000040a9u, 0x000040b5u, 0x00050041u, 0x00000007u, 0x000040b6u, 0x00002da6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000040b7u, 0x000040b6u, 0x00050084u, 0x00000006u, 0x000040b8u, 0x000040b7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000040bau, 0x000040b5u, 0x000040b8u, 0x0003003eu, 0x000040a9u, 0x000040bau, 0x000500c7u, 0x00000006u, 0x000040bcu, 0x000040bau, 0x00000e65u, 0x0003003eu, 0x000040a9u, 0x000040bcu, 0x000500c2u, 0x00000006u, 0x000040beu, 0x000040bcu, 0x0000022au, 0x0003003eu, 0x000040aau, 0x000040beu, 0x0004003du, 0x00000006u, 0x000040c0u, 0x000040b2u, 0x000500c7u, 0x00000006u, 0x000040c1u, 0x000040c0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000040c2u, 0x000040c1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000040c4u, 0x000040beu, 0x000040c2u, 0x0003003eu, 0x000040aau, 0x000040c4u, 0x000500c6u, 0x00000006u, 0x000040c6u, 0x000040c4u, 0x0000045cu, 0x0003003eu, 0x000040aau, 0x000040c6u, 0x00080041u, 0x00000692u, 0x000040c9u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000040c6u, 0x0004003du, 0x00000011u, 0x000040cau, 0x000040c9u, 0x00040071u, 0x00000006u, 0x000040cbu, 0x000040cau, 0x0003003eu, 0x000040abu, 0x000040cbu, 0x0003003eu, 0x000040acu, 0x000040cbu, 0x000500c2u, 0x00000006u, 0x000040d2u, 0x000040cbu, 0x0000025du, 0x0003003eu, 0x000040ceu, 0x000040d2u, 0x000500c7u, 0x00000006u, 0x000040d4u, 0x000040cbu, 0x000006c3u, 0x0003003eu, 0x000040cfu, 0x000040d4u, 0x00040071u, 0x00000011u, 0x000040d6u, 0x000040d2u, 0x0004007cu, 0x00000012u, 0x000040d7u, 0x000040d6u, 0x00040071u, 0x00000011u, 0x000040dfu, 0x000040d4u, 0x0004007cu, 0x00000012u, 0x000040e0u, 0x000040dfu, 0x00070050u, 0x00000013u, 0x000040e1u, 0x000040d7u, 0x000040d7u, 0x000040d7u, 0x000040e0u, 0x0003003eu, 0x000040d0u, 0x000040e1u, 0x0003003eu, 0x000040adu, 0x000040e1u, 0x0003003eu, 0x00002cd7u, 0x000040e1u, 0x00050050u, 0x000000efu, 0x00003092u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003093u, 0x00003092u, 0x0003003eu, 0x00006f66u, 0x00002c9cu, 0x0003003eu, 0x00006f67u, 0x00002c9eu, 0x0003003eu, 0x00002da8u, 0x000021b2u, 0x0003003eu, 0x00002da9u, 0x00003093u, 0x00050041u, 0x00000007u, 0x000040ebu, 0x00002da9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000040ecu, 0x000040ebu, 0x00050084u, 0x00000006u, 0x000040edu, 0x00002c9eu, 0x000040ecu, 0x00050080u, 0x00000006u, 0x000040eeu, 0x00002c9cu, 0x000040edu, 0x0003003eu, 0x000040e2u, 0x000040eeu, 0x00050041u, 0x00000007u, 0x000040efu, 0x00002da9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000040f0u, 0x000040efu, 0x00050084u, 0x00000006u, 0x000040f1u, 0x000040f0u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000040f3u, 0x000040eeu, 0x000040f1u, 0x0003003eu, 0x000040e2u, 0x000040f3u, 0x000500c7u, 0x00000006u, 0x000040f5u, 0x000040f3u, 0x00000e65u, 0x0003003eu, 0x000040e2u, 0x000040f5u, 0x000500c2u, 0x00000006u, 0x000040f7u, 0x000040f5u, 0x0000022au, 0x0003003eu, 0x000040e3u, 0x000040f7u, 0x0004003du, 0x00000006u, 0x000040f9u, 0x000040ebu, 0x000500c7u, 0x00000006u, 0x000040fau, 0x000040f9u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000040fbu, 0x000040fau, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000040fdu, 0x000040f7u, 0x000040fbu, 0x0003003eu, 0x000040e3u, 0x000040fdu, 0x000500c6u, 0x00000006u, 0x000040ffu, 0x000040fdu, 0x0000045cu, 0x0003003eu, 0x000040e3u, 0x000040ffu, 0x00080041u, 0x00000692u, 0x00004102u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000040ffu, 0x0004003du, 0x00000011u, 0x00004103u, 0x00004102u, 0x00040071u, 0x00000006u, 0x00004104u, 0x00004103u, 0x0003003eu, 0x000040e4u, 0x00004104u, 0x0003003eu, 0x000040e5u, 0x00004104u, 0x000500c2u, 0x00000006u, 0x0000410bu, 0x00004104u, 0x0000025du, 0x0003003eu, 0x00004107u, 0x0000410bu, 0x000500c7u, 0x00000006u, 0x0000410du, 0x00004104u, 0x000006c3u, 0x0003003eu, 0x00004108u, 0x0000410du, 0x00040071u, 0x00000011u, 0x0000410fu, 0x0000410bu, 0x0004007cu, 0x00000012u, 0x00004110u, 0x0000410fu, 0x00040071u, 0x00000011u, 0x00004118u, 0x0000410du, 0x0004007cu, 0x00000012u, 0x00004119u, 0x00004118u, 0x00070050u, 0x00000013u, 0x0000411au, 0x00004110u, 0x00004110u, 0x00004110u, 0x00004119u, 0x0003003eu, 0x00004109u, 0x0000411au, 0x0003003eu, 0x000040e6u, 0x0000411au, 0x0003003eu, 0x00002cdfu, 0x0000411au, 0x000200f9u, 0x00003087u, 0x000200f8u, 0x00003087u, 0x000700f5u, 0x00000013u, 0x0000888eu, 0x00008839u, 0x0000303fu, 0x0000411au, 0x00003088u, 0x000700f5u, 0x00000013u, 0x00008796u, 0x0000873du, 0x0000303fu, 0x000040e1u, 0x00003088u, 0x000300f7u, 0x00003098u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003099u, 0x00003098u, 0x000200f8u, 0x00003099u, 0x00050050u, 0x000000efu, 0x0000309cu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x0000309du, 0x0000309cu, 0x0003003eu, 0x00006f6au, 0x00002c9cu, 0x0003003eu, 0x00006f6bu, 0x00002c9eu, 0x0003003eu, 0x00002dabu, 0x000021b2u, 0x0003003eu, 0x00002dacu, 0x0000309du, 0x00050041u, 0x00000007u, 0x00004124u, 0x00002dacu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004125u, 0x00004124u, 0x00050084u, 0x00000006u, 0x00004126u, 0x00002c9eu, 0x00004125u, 0x00050080u, 0x00000006u, 0x00004127u, 0x00002c9cu, 0x00004126u, 0x0003003eu, 0x0000411bu, 0x00004127u, 0x00050041u, 0x00000007u, 0x00004128u, 0x00002dacu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004129u, 0x00004128u, 0x00050084u, 0x00000006u, 0x0000412au, 0x00004129u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000412cu, 0x00004127u, 0x0000412au, 0x0003003eu, 0x0000411bu, 0x0000412cu, 0x000500c7u, 0x00000006u, 0x0000412eu, 0x0000412cu, 0x00000e65u, 0x0003003eu, 0x0000411bu, 0x0000412eu, 0x000500c2u, 0x00000006u, 0x00004130u, 0x0000412eu, 0x0000022au, 0x0003003eu, 0x0000411cu, 0x00004130u, 0x0004003du, 0x00000006u, 0x00004132u, 0x00004124u, 0x000500c7u, 0x00000006u, 0x00004133u, 0x00004132u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004134u, 0x00004133u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004136u, 0x00004130u, 0x00004134u, 0x0003003eu, 0x0000411cu, 0x00004136u, 0x000500c6u, 0x00000006u, 0x00004138u, 0x00004136u, 0x0000045cu, 0x0003003eu, 0x0000411cu, 0x00004138u, 0x00080041u, 0x00000692u, 0x0000413bu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004138u, 0x0004003du, 0x00000011u, 0x0000413cu, 0x0000413bu, 0x00040071u, 0x00000006u, 0x0000413du, 0x0000413cu, 0x0003003eu, 0x0000411du, 0x0000413du, 0x0003003eu, 0x0000411eu, 0x0000413du, 0x000500c2u, 0x00000006u, 0x00004144u, 0x0000413du, 0x0000025du, 0x0003003eu, 0x00004140u, 0x00004144u, 0x000500c7u, 0x00000006u, 0x00004146u, 0x0000413du, 0x000006c3u, 0x0003003eu, 0x00004141u, 0x00004146u, 0x00040071u, 0x00000011u, 0x00004148u, 0x00004144u, 0x0004007cu, 0x00000012u, 0x00004149u, 0x00004148u, 0x00040071u, 0x00000011u, 0x00004151u, 0x00004146u, 0x0004007cu, 0x00000012u, 0x00004152u, 0x00004151u, 0x00070050u, 0x00000013u, 0x00004153u, 0x00004149u, 0x00004149u, 0x00004149u, 0x00004152u, 0x0003003eu, 0x00004142u, 0x00004153u, 0x0003003eu, 0x0000411fu, 0x00004153u, 0x0003003eu, 0x00002ce7u, 0x00004153u, 0x000200f9u, 0x00003098u, 0x000200f8u, 0x00003098u, 0x000700f5u, 0x00000013u, 0x0000890au, 0x000088b3u, 0x00003087u, 0x00004153u, 0x00003099u, 0x000200f9u, 0x0000303cu, 0x000200f8u, 0x0000303eu, 0x0004007cu, 0x000000b0u, 0x00003062u, 0x000083b3u, 0x0003003eu, 0x00006f4eu, 0x00002c9cu, 0x0003003eu, 0x00006f4fu, 0x00002c9eu, 0x0003003eu, 0x00002d96u, 0x000021b2u, 0x0003003eu, 0x00002d97u, 0x00003062u, 0x00050041u, 0x00000007u, 0x00003f8eu, 0x00002d97u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003f8fu, 0x00003f8eu, 0x00050084u, 0x00000006u, 0x00003f90u, 0x00002c9eu, 0x00003f8fu, 0x00050080u, 0x00000006u, 0x00003f91u, 0x00002c9cu, 0x00003f90u, 0x0003003eu, 0x00003f84u, 0x00003f91u, 0x00050041u, 0x00000007u, 0x00003f92u, 0x00002d97u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003f93u, 0x00003f92u, 0x00050080u, 0x00000006u, 0x00003f95u, 0x00003f91u, 0x00003f93u, 0x0003003eu, 0x00003f84u, 0x00003f95u, 0x000500c7u, 0x00000006u, 0x00003f97u, 0x00003f95u, 0x00000e65u, 0x0003003eu, 0x00003f84u, 0x00003f97u, 0x0003003eu, 0x00003f85u, 0x00003f97u, 0x0004003du, 0x00000006u, 0x00003f9au, 0x00003f8eu, 0x000500c7u, 0x00000006u, 0x00003f9bu, 0x00003f9au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003f9cu, 0x00003f9bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003f9eu, 0x00003f97u, 0x00003f9cu, 0x0003003eu, 0x00003f85u, 0x00003f9eu, 0x000500c6u, 0x00000006u, 0x00003fa0u, 0x00003f9eu, 0x00000464u, 0x0003003eu, 0x00003f85u, 0x00003fa0u, 0x00080041u, 0x00000671u, 0x00003fa3u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003fa0u, 0x0004003du, 0x0000000fu, 0x00003fa4u, 0x00003fa3u, 0x00040071u, 0x00000006u, 0x00003fa5u, 0x00003fa4u, 0x0003003eu, 0x00003f86u, 0x00003fa5u, 0x000500c2u, 0x00000006u, 0x00003fa7u, 0x00003fa5u, 0x00000233u, 0x0003003eu, 0x00003f87u, 0x00003fa7u, 0x000500c7u, 0x00000006u, 0x00003fa9u, 0x00003fa5u, 0x00000e88u, 0x0003003eu, 0x00003f88u, 0x00003fa9u, 0x000500c4u, 0x00000006u, 0x00003fabu, 0x00003fa9u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003fadu, 0x00003fa9u, 0x00003fabu, 0x0003003eu, 0x00003f88u, 0x00003fadu, 0x000500c4u, 0x00000006u, 0x00003fafu, 0x00003fa7u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003fb1u, 0x00003fa7u, 0x00003fafu, 0x0003003eu, 0x00003f87u, 0x00003fb1u, 0x00040071u, 0x00000011u, 0x00003fb3u, 0x00003fb1u, 0x0004007cu, 0x00000012u, 0x00003fb4u, 0x00003fb3u, 0x00040071u, 0x00000011u, 0x00003fbcu, 0x00003fadu, 0x0004007cu, 0x00000012u, 0x00003fbdu, 0x00003fbcu, 0x00070050u, 0x00000013u, 0x00003fbeu, 0x00003fb4u, 0x00003fb4u, 0x00003fb4u, 0x00003fbdu, 0x0003003eu, 0x00003f89u, 0x00003fbeu, 0x0003003eu, 0x00002ccfu, 0x00003fbeu, 0x000300f7u, 0x00003067u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00003068u, 0x00003067u, 0x000200f8u, 0x00003068u, 0x00050050u, 0x000000efu, 0x0000306bu, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x0000306cu, 0x0000306bu, 0x0003003eu, 0x00006f52u, 0x00002c9cu, 0x0003003eu, 0x00006f53u, 0x00002c9eu, 0x0003003eu, 0x00002d99u, 0x000021b2u, 0x0003003eu, 0x00002d9au, 0x0000306cu, 0x00050041u, 0x00000007u, 0x00003fc9u, 0x00002d9au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003fcau, 0x00003fc9u, 0x00050084u, 0x00000006u, 0x00003fcbu, 0x00002c9eu, 0x00003fcau, 0x00050080u, 0x00000006u, 0x00003fccu, 0x00002c9cu, 0x00003fcbu, 0x0003003eu, 0x00003fbfu, 0x00003fccu, 0x00050041u, 0x00000007u, 0x00003fcdu, 0x00002d9au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003fceu, 0x00003fcdu, 0x00050080u, 0x00000006u, 0x00003fd0u, 0x00003fccu, 0x00003fceu, 0x0003003eu, 0x00003fbfu, 0x00003fd0u, 0x000500c7u, 0x00000006u, 0x00003fd2u, 0x00003fd0u, 0x00000e65u, 0x0003003eu, 0x00003fbfu, 0x00003fd2u, 0x0003003eu, 0x00003fc0u, 0x00003fd2u, 0x0004003du, 0x00000006u, 0x00003fd5u, 0x00003fc9u, 0x000500c7u, 0x00000006u, 0x00003fd6u, 0x00003fd5u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003fd7u, 0x00003fd6u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003fd9u, 0x00003fd2u, 0x00003fd7u, 0x0003003eu, 0x00003fc0u, 0x00003fd9u, 0x000500c6u, 0x00000006u, 0x00003fdbu, 0x00003fd9u, 0x00000464u, 0x0003003eu, 0x00003fc0u, 0x00003fdbu, 0x00080041u, 0x00000671u, 0x00003fdeu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003fdbu, 0x0004003du, 0x0000000fu, 0x00003fdfu, 0x00003fdeu, 0x00040071u, 0x00000006u, 0x00003fe0u, 0x00003fdfu, 0x0003003eu, 0x00003fc1u, 0x00003fe0u, 0x000500c2u, 0x00000006u, 0x00003fe2u, 0x00003fe0u, 0x00000233u, 0x0003003eu, 0x00003fc2u, 0x00003fe2u, 0x000500c7u, 0x00000006u, 0x00003fe4u, 0x00003fe0u, 0x00000e88u, 0x0003003eu, 0x00003fc3u, 0x00003fe4u, 0x000500c4u, 0x00000006u, 0x00003fe6u, 0x00003fe4u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003fe8u, 0x00003fe4u, 0x00003fe6u, 0x0003003eu, 0x00003fc3u, 0x00003fe8u, 0x000500c4u, 0x00000006u, 0x00003feau, 0x00003fe2u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003fecu, 0x00003fe2u, 0x00003feau, 0x0003003eu, 0x00003fc2u, 0x00003fecu, 0x00040071u, 0x00000011u, 0x00003feeu, 0x00003fecu, 0x0004007cu, 0x00000012u, 0x00003fefu, 0x00003feeu, 0x00040071u, 0x00000011u, 0x00003ff7u, 0x00003fe8u, 0x0004007cu, 0x00000012u, 0x00003ff8u, 0x00003ff7u, 0x00070050u, 0x00000013u, 0x00003ff9u, 0x00003fefu, 0x00003fefu, 0x00003fefu, 0x00003ff8u, 0x0003003eu, 0x00003fc4u, 0x00003ff9u, 0x0003003eu, 0x00002cd7u, 0x00003ff9u, 0x00050050u, 0x000000efu, 0x00003072u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003073u, 0x00003072u, 0x0003003eu, 0x00006f56u, 0x00002c9cu, 0x0003003eu, 0x00006f57u, 0x00002c9eu, 0x0003003eu, 0x00002d9cu, 0x000021b2u, 0x0003003eu, 0x00002d9du, 0x00003073u, 0x00050041u, 0x00000007u, 0x00004004u, 0x00002d9du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004005u, 0x00004004u, 0x00050084u, 0x00000006u, 0x00004006u, 0x00002c9eu, 0x00004005u, 0x00050080u, 0x00000006u, 0x00004007u, 0x00002c9cu, 0x00004006u, 0x0003003eu, 0x00003ffau, 0x00004007u, 0x00050041u, 0x00000007u, 0x00004008u, 0x00002d9du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004009u, 0x00004008u, 0x00050080u, 0x00000006u, 0x0000400bu, 0x00004007u, 0x00004009u, 0x0003003eu, 0x00003ffau, 0x0000400bu, 0x000500c7u, 0x00000006u, 0x0000400du, 0x0000400bu, 0x00000e65u, 0x0003003eu, 0x00003ffau, 0x0000400du, 0x0003003eu, 0x00003ffbu, 0x0000400du, 0x0004003du, 0x00000006u, 0x00004010u, 0x00004004u, 0x000500c7u, 0x00000006u, 0x00004011u, 0x00004010u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004012u, 0x00004011u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004014u, 0x0000400du, 0x00004012u, 0x0003003eu, 0x00003ffbu, 0x00004014u, 0x000500c6u, 0x00000006u, 0x00004016u, 0x00004014u, 0x00000464u, 0x0003003eu, 0x00003ffbu, 0x00004016u, 0x00080041u, 0x00000671u, 0x00004019u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004016u, 0x0004003du, 0x0000000fu, 0x0000401au, 0x00004019u, 0x00040071u, 0x00000006u, 0x0000401bu, 0x0000401au, 0x0003003eu, 0x00003ffcu, 0x0000401bu, 0x000500c2u, 0x00000006u, 0x0000401du, 0x0000401bu, 0x00000233u, 0x0003003eu, 0x00003ffdu, 0x0000401du, 0x000500c7u, 0x00000006u, 0x0000401fu, 0x0000401bu, 0x00000e88u, 0x0003003eu, 0x00003ffeu, 0x0000401fu, 0x000500c4u, 0x00000006u, 0x00004021u, 0x0000401fu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004023u, 0x0000401fu, 0x00004021u, 0x0003003eu, 0x00003ffeu, 0x00004023u, 0x000500c4u, 0x00000006u, 0x00004025u, 0x0000401du, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004027u, 0x0000401du, 0x00004025u, 0x0003003eu, 0x00003ffdu, 0x00004027u, 0x00040071u, 0x00000011u, 0x00004029u, 0x00004027u, 0x0004007cu, 0x00000012u, 0x0000402au, 0x00004029u, 0x00040071u, 0x00000011u, 0x00004032u, 0x00004023u, 0x0004007cu, 0x00000012u, 0x00004033u, 0x00004032u, 0x00070050u, 0x00000013u, 0x00004034u, 0x0000402au, 0x0000402au, 0x0000402au, 0x00004033u, 0x0003003eu, 0x00003fffu, 0x00004034u, 0x0003003eu, 0x00002cdfu, 0x00004034u, 0x000200f9u, 0x00003067u, 0x000200f8u, 0x00003067u, 0x000700f5u, 0x00000013u, 0x0000888cu, 0x00008839u, 0x0000303eu, 0x00004034u, 0x00003068u, 0x000700f5u, 0x00000013u, 0x00008794u, 0x0000873du, 0x0000303eu, 0x00003ff9u, 0x00003068u, 0x000300f7u, 0x00003078u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003079u, 0x00003078u, 0x000200f8u, 0x00003079u, 0x00050050u, 0x000000efu, 0x0000307cu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x0000307du, 0x0000307cu, 0x0003003eu, 0x00006f5au, 0x00002c9cu, 0x0003003eu, 0x00006f5bu, 0x00002c9eu, 0x0003003eu, 0x00002d9fu, 0x000021b2u, 0x0003003eu, 0x00002da0u, 0x0000307du, 0x00050041u, 0x00000007u, 0x0000403fu, 0x00002da0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004040u, 0x0000403fu, 0x00050084u, 0x00000006u, 0x00004041u, 0x00002c9eu, 0x00004040u, 0x00050080u, 0x00000006u, 0x00004042u, 0x00002c9cu, 0x00004041u, 0x0003003eu, 0x00004035u, 0x00004042u, 0x00050041u, 0x00000007u, 0x00004043u, 0x00002da0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004044u, 0x00004043u, 0x00050080u, 0x00000006u, 0x00004046u, 0x00004042u, 0x00004044u, 0x0003003eu, 0x00004035u, 0x00004046u, 0x000500c7u, 0x00000006u, 0x00004048u, 0x00004046u, 0x00000e65u, 0x0003003eu, 0x00004035u, 0x00004048u, 0x0003003eu, 0x00004036u, 0x00004048u, 0x0004003du, 0x00000006u, 0x0000404bu, 0x0000403fu, 0x000500c7u, 0x00000006u, 0x0000404cu, 0x0000404bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000404du, 0x0000404cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000404fu, 0x00004048u, 0x0000404du, 0x0003003eu, 0x00004036u, 0x0000404fu, 0x000500c6u, 0x00000006u, 0x00004051u, 0x0000404fu, 0x00000464u, 0x0003003eu, 0x00004036u, 0x00004051u, 0x00080041u, 0x00000671u, 0x00004054u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004051u, 0x0004003du, 0x0000000fu, 0x00004055u, 0x00004054u, 0x00040071u, 0x00000006u, 0x00004056u, 0x00004055u, 0x0003003eu, 0x00004037u, 0x00004056u, 0x000500c2u, 0x00000006u, 0x00004058u, 0x00004056u, 0x00000233u, 0x0003003eu, 0x00004038u, 0x00004058u, 0x000500c7u, 0x00000006u, 0x0000405au, 0x00004056u, 0x00000e88u, 0x0003003eu, 0x00004039u, 0x0000405au, 0x000500c4u, 0x00000006u, 0x0000405cu, 0x0000405au, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000405eu, 0x0000405au, 0x0000405cu, 0x0003003eu, 0x00004039u, 0x0000405eu, 0x000500c4u, 0x00000006u, 0x00004060u, 0x00004058u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004062u, 0x00004058u, 0x00004060u, 0x0003003eu, 0x00004038u, 0x00004062u, 0x00040071u, 0x00000011u, 0x00004064u, 0x00004062u, 0x0004007cu, 0x00000012u, 0x00004065u, 0x00004064u, 0x00040071u, 0x00000011u, 0x0000406du, 0x0000405eu, 0x0004007cu, 0x00000012u, 0x0000406eu, 0x0000406du, 0x00070050u, 0x00000013u, 0x0000406fu, 0x00004065u, 0x00004065u, 0x00004065u, 0x0000406eu, 0x0003003eu, 0x0000403au, 0x0000406fu, 0x0003003eu, 0x00002ce7u, 0x0000406fu, 0x000200f9u, 0x00003078u, 0x000200f8u, 0x00003078u, 0x000700f5u, 0x00000013u, 0x00008908u, 0x000088b3u, 0x00003067u, 0x0000406fu, 0x00003079u, 0x000200f9u, 0x0000303cu, 0x000200f8u, 0x0000303du, 0x0004007cu, 0x000000b0u, 0x00003042u, 0x000083b3u, 0x0003003eu, 0x00006f3eu, 0x00002c9cu, 0x0003003eu, 0x00006f3fu, 0x00002c9eu, 0x0003003eu, 0x00002d8au, 0x000021b2u, 0x0003003eu, 0x00002d8bu, 0x00003042u, 0x00050041u, 0x00000007u, 0x00003e7au, 0x00002d8bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e7bu, 0x00003e7au, 0x00050084u, 0x00000006u, 0x00003e7cu, 0x00002c9eu, 0x00003e7bu, 0x00050080u, 0x00000006u, 0x00003e7du, 0x00002c9cu, 0x00003e7cu, 0x0003003eu, 0x00003e70u, 0x00003e7du, 0x00050041u, 0x00000007u, 0x00003e7eu, 0x00002d8bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e7fu, 0x00003e7eu, 0x000500c2u, 0x00000006u, 0x00003e80u, 0x00003e7fu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003e82u, 0x00003e7du, 0x00003e80u, 0x0003003eu, 0x00003e70u, 0x00003e82u, 0x000500c7u, 0x00000006u, 0x00003e84u, 0x00003e82u, 0x00000e65u, 0x0003003eu, 0x00003e70u, 0x00003e84u, 0x0004003du, 0x00000006u, 0x00003e86u, 0x00003e7eu, 0x000400c8u, 0x00000006u, 0x00003e87u, 0x00003e86u, 0x000500c7u, 0x00000006u, 0x00003e88u, 0x00003e87u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003e89u, 0x00003e88u, 0x00000704u, 0x0003003eu, 0x00003e71u, 0x00003e89u, 0x0003003eu, 0x00003e72u, 0x00003e84u, 0x0004003du, 0x00000006u, 0x00003e8cu, 0x00003e7au, 0x000500c7u, 0x00000006u, 0x00003e8du, 0x00003e8cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e8eu, 0x00003e8du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e90u, 0x00003e84u, 0x00003e8eu, 0x0003003eu, 0x00003e72u, 0x00003e90u, 0x000500c6u, 0x00000006u, 0x00003e92u, 0x00003e90u, 0x00000464u, 0x0003003eu, 0x00003e72u, 0x00003e92u, 0x00080041u, 0x00000671u, 0x00003e95u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003e92u, 0x0004003du, 0x0000000fu, 0x00003e96u, 0x00003e95u, 0x00040071u, 0x00000006u, 0x00003e97u, 0x00003e96u, 0x0003003eu, 0x00003e73u, 0x00003e97u, 0x000500c2u, 0x00000006u, 0x00003e9au, 0x00003e97u, 0x00003e89u, 0x000500c7u, 0x00000006u, 0x00003e9bu, 0x00003e9au, 0x00000e88u, 0x0003003eu, 0x00003e73u, 0x00003e9bu, 0x000500c7u, 0x00000006u, 0x00003e9du, 0x00003e9bu, 0x00000ec0u, 0x0003003eu, 0x00003e74u, 0x00003e9du, 0x000500c4u, 0x00000006u, 0x00003e9fu, 0x00003e9du, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003ea1u, 0x00003e9du, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003ea2u, 0x00003e9fu, 0x00003ea1u, 0x000500c2u, 0x00000006u, 0x00003ea4u, 0x00003e9du, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003ea5u, 0x00003ea2u, 0x00003ea4u, 0x0003003eu, 0x00003e74u, 0x00003ea5u, 0x00040071u, 0x00000011u, 0x00003ea7u, 0x00003ea5u, 0x0004007cu, 0x00000012u, 0x00003ea8u, 0x00003ea7u, 0x000500c7u, 0x00000006u, 0x00003eb0u, 0x00003e9bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003eb1u, 0x00003eb0u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003eb2u, 0x00003eb1u, 0x0004007cu, 0x00000012u, 0x00003eb3u, 0x00003eb2u, 0x00070050u, 0x00000013u, 0x00003eb4u, 0x00003ea8u, 0x00003ea8u, 0x00003ea8u, 0x00003eb3u, 0x0003003eu, 0x00003e75u, 0x00003eb4u, 0x0003003eu, 0x00002ccfu, 0x00003eb4u, 0x000300f7u, 0x00003047u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00003048u, 0x00003047u, 0x000200f8u, 0x00003048u, 0x00050050u, 0x000000efu, 0x0000304bu, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x0000304cu, 0x0000304bu, 0x0003003eu, 0x00006f42u, 0x00002c9cu, 0x0003003eu, 0x00006f43u, 0x00002c9eu, 0x0003003eu, 0x00002d8du, 0x000021b2u, 0x0003003eu, 0x00002d8eu, 0x0000304cu, 0x00050041u, 0x00000007u, 0x00003ebfu, 0x00002d8eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003ec0u, 0x00003ebfu, 0x00050084u, 0x00000006u, 0x00003ec1u, 0x00002c9eu, 0x00003ec0u, 0x00050080u, 0x00000006u, 0x00003ec2u, 0x00002c9cu, 0x00003ec1u, 0x0003003eu, 0x00003eb5u, 0x00003ec2u, 0x00050041u, 0x00000007u, 0x00003ec3u, 0x00002d8eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003ec4u, 0x00003ec3u, 0x000500c2u, 0x00000006u, 0x00003ec5u, 0x00003ec4u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003ec7u, 0x00003ec2u, 0x00003ec5u, 0x0003003eu, 0x00003eb5u, 0x00003ec7u, 0x000500c7u, 0x00000006u, 0x00003ec9u, 0x00003ec7u, 0x00000e65u, 0x0003003eu, 0x00003eb5u, 0x00003ec9u, 0x0004003du, 0x00000006u, 0x00003ecbu, 0x00003ec3u, 0x000400c8u, 0x00000006u, 0x00003eccu, 0x00003ecbu, 0x000500c7u, 0x00000006u, 0x00003ecdu, 0x00003eccu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003eceu, 0x00003ecdu, 0x00000704u, 0x0003003eu, 0x00003eb6u, 0x00003eceu, 0x0003003eu, 0x00003eb7u, 0x00003ec9u, 0x0004003du, 0x00000006u, 0x00003ed1u, 0x00003ebfu, 0x000500c7u, 0x00000006u, 0x00003ed2u, 0x00003ed1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ed3u, 0x00003ed2u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003ed5u, 0x00003ec9u, 0x00003ed3u, 0x0003003eu, 0x00003eb7u, 0x00003ed5u, 0x000500c6u, 0x00000006u, 0x00003ed7u, 0x00003ed5u, 0x00000464u, 0x0003003eu, 0x00003eb7u, 0x00003ed7u, 0x00080041u, 0x00000671u, 0x00003edau, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003ed7u, 0x0004003du, 0x0000000fu, 0x00003edbu, 0x00003edau, 0x00040071u, 0x00000006u, 0x00003edcu, 0x00003edbu, 0x0003003eu, 0x00003eb8u, 0x00003edcu, 0x000500c2u, 0x00000006u, 0x00003edfu, 0x00003edcu, 0x00003eceu, 0x000500c7u, 0x00000006u, 0x00003ee0u, 0x00003edfu, 0x00000e88u, 0x0003003eu, 0x00003eb8u, 0x00003ee0u, 0x000500c7u, 0x00000006u, 0x00003ee2u, 0x00003ee0u, 0x00000ec0u, 0x0003003eu, 0x00003eb9u, 0x00003ee2u, 0x000500c4u, 0x00000006u, 0x00003ee4u, 0x00003ee2u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003ee6u, 0x00003ee2u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003ee7u, 0x00003ee4u, 0x00003ee6u, 0x000500c2u, 0x00000006u, 0x00003ee9u, 0x00003ee2u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003eeau, 0x00003ee7u, 0x00003ee9u, 0x0003003eu, 0x00003eb9u, 0x00003eeau, 0x00040071u, 0x00000011u, 0x00003eecu, 0x00003eeau, 0x0004007cu, 0x00000012u, 0x00003eedu, 0x00003eecu, 0x000500c7u, 0x00000006u, 0x00003ef5u, 0x00003ee0u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003ef6u, 0x00003ef5u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003ef7u, 0x00003ef6u, 0x0004007cu, 0x00000012u, 0x00003ef8u, 0x00003ef7u, 0x00070050u, 0x00000013u, 0x00003ef9u, 0x00003eedu, 0x00003eedu, 0x00003eedu, 0x00003ef8u, 0x0003003eu, 0x00003ebau, 0x00003ef9u, 0x0003003eu, 0x00002cd7u, 0x00003ef9u, 0x00050050u, 0x000000efu, 0x00003052u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003053u, 0x00003052u, 0x0003003eu, 0x00006f46u, 0x00002c9cu, 0x0003003eu, 0x00006f47u, 0x00002c9eu, 0x0003003eu, 0x00002d90u, 0x000021b2u, 0x0003003eu, 0x00002d91u, 0x00003053u, 0x00050041u, 0x00000007u, 0x00003f04u, 0x00002d91u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003f05u, 0x00003f04u, 0x00050084u, 0x00000006u, 0x00003f06u, 0x00002c9eu, 0x00003f05u, 0x00050080u, 0x00000006u, 0x00003f07u, 0x00002c9cu, 0x00003f06u, 0x0003003eu, 0x00003efau, 0x00003f07u, 0x00050041u, 0x00000007u, 0x00003f08u, 0x00002d91u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003f09u, 0x00003f08u, 0x000500c2u, 0x00000006u, 0x00003f0au, 0x00003f09u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003f0cu, 0x00003f07u, 0x00003f0au, 0x0003003eu, 0x00003efau, 0x00003f0cu, 0x000500c7u, 0x00000006u, 0x00003f0eu, 0x00003f0cu, 0x00000e65u, 0x0003003eu, 0x00003efau, 0x00003f0eu, 0x0004003du, 0x00000006u, 0x00003f10u, 0x00003f08u, 0x000400c8u, 0x00000006u, 0x00003f11u, 0x00003f10u, 0x000500c7u, 0x00000006u, 0x00003f12u, 0x00003f11u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f13u, 0x00003f12u, 0x00000704u, 0x0003003eu, 0x00003efbu, 0x00003f13u, 0x0003003eu, 0x00003efcu, 0x00003f0eu, 0x0004003du, 0x00000006u, 0x00003f16u, 0x00003f04u, 0x000500c7u, 0x00000006u, 0x00003f17u, 0x00003f16u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003f18u, 0x00003f17u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003f1au, 0x00003f0eu, 0x00003f18u, 0x0003003eu, 0x00003efcu, 0x00003f1au, 0x000500c6u, 0x00000006u, 0x00003f1cu, 0x00003f1au, 0x00000464u, 0x0003003eu, 0x00003efcu, 0x00003f1cu, 0x00080041u, 0x00000671u, 0x00003f1fu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003f1cu, 0x0004003du, 0x0000000fu, 0x00003f20u, 0x00003f1fu, 0x00040071u, 0x00000006u, 0x00003f21u, 0x00003f20u, 0x0003003eu, 0x00003efdu, 0x00003f21u, 0x000500c2u, 0x00000006u, 0x00003f24u, 0x00003f21u, 0x00003f13u, 0x000500c7u, 0x00000006u, 0x00003f25u, 0x00003f24u, 0x00000e88u, 0x0003003eu, 0x00003efdu, 0x00003f25u, 0x000500c7u, 0x00000006u, 0x00003f27u, 0x00003f25u, 0x00000ec0u, 0x0003003eu, 0x00003efeu, 0x00003f27u, 0x000500c4u, 0x00000006u, 0x00003f29u, 0x00003f27u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003f2bu, 0x00003f27u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003f2cu, 0x00003f29u, 0x00003f2bu, 0x000500c2u, 0x00000006u, 0x00003f2eu, 0x00003f27u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003f2fu, 0x00003f2cu, 0x00003f2eu, 0x0003003eu, 0x00003efeu, 0x00003f2fu, 0x00040071u, 0x00000011u, 0x00003f31u, 0x00003f2fu, 0x0004007cu, 0x00000012u, 0x00003f32u, 0x00003f31u, 0x000500c7u, 0x00000006u, 0x00003f3au, 0x00003f25u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f3bu, 0x00003f3au, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003f3cu, 0x00003f3bu, 0x0004007cu, 0x00000012u, 0x00003f3du, 0x00003f3cu, 0x00070050u, 0x00000013u, 0x00003f3eu, 0x00003f32u, 0x00003f32u, 0x00003f32u, 0x00003f3du, 0x0003003eu, 0x00003effu, 0x00003f3eu, 0x0003003eu, 0x00002cdfu, 0x00003f3eu, 0x000200f9u, 0x00003047u, 0x000200f8u, 0x00003047u, 0x000700f5u, 0x00000013u, 0x0000888au, 0x00008839u, 0x0000303du, 0x00003f3eu, 0x00003048u, 0x000700f5u, 0x00000013u, 0x00008792u, 0x0000873du, 0x0000303du, 0x00003ef9u, 0x00003048u, 0x000300f7u, 0x00003058u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003059u, 0x00003058u, 0x000200f8u, 0x00003059u, 0x00050050u, 0x000000efu, 0x0000305cu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x0000305du, 0x0000305cu, 0x0003003eu, 0x00006f4au, 0x00002c9cu, 0x0003003eu, 0x00006f4bu, 0x00002c9eu, 0x0003003eu, 0x00002d93u, 0x000021b2u, 0x0003003eu, 0x00002d94u, 0x0000305du, 0x00050041u, 0x00000007u, 0x00003f49u, 0x00002d94u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003f4au, 0x00003f49u, 0x00050084u, 0x00000006u, 0x00003f4bu, 0x00002c9eu, 0x00003f4au, 0x00050080u, 0x00000006u, 0x00003f4cu, 0x00002c9cu, 0x00003f4bu, 0x0003003eu, 0x00003f3fu, 0x00003f4cu, 0x00050041u, 0x00000007u, 0x00003f4du, 0x00002d94u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003f4eu, 0x00003f4du, 0x000500c2u, 0x00000006u, 0x00003f4fu, 0x00003f4eu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003f51u, 0x00003f4cu, 0x00003f4fu, 0x0003003eu, 0x00003f3fu, 0x00003f51u, 0x000500c7u, 0x00000006u, 0x00003f53u, 0x00003f51u, 0x00000e65u, 0x0003003eu, 0x00003f3fu, 0x00003f53u, 0x0004003du, 0x00000006u, 0x00003f55u, 0x00003f4du, 0x000400c8u, 0x00000006u, 0x00003f56u, 0x00003f55u, 0x000500c7u, 0x00000006u, 0x00003f57u, 0x00003f56u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f58u, 0x00003f57u, 0x00000704u, 0x0003003eu, 0x00003f40u, 0x00003f58u, 0x0003003eu, 0x00003f41u, 0x00003f53u, 0x0004003du, 0x00000006u, 0x00003f5bu, 0x00003f49u, 0x000500c7u, 0x00000006u, 0x00003f5cu, 0x00003f5bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003f5du, 0x00003f5cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003f5fu, 0x00003f53u, 0x00003f5du, 0x0003003eu, 0x00003f41u, 0x00003f5fu, 0x000500c6u, 0x00000006u, 0x00003f61u, 0x00003f5fu, 0x00000464u, 0x0003003eu, 0x00003f41u, 0x00003f61u, 0x00080041u, 0x00000671u, 0x00003f64u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003f61u, 0x0004003du, 0x0000000fu, 0x00003f65u, 0x00003f64u, 0x00040071u, 0x00000006u, 0x00003f66u, 0x00003f65u, 0x0003003eu, 0x00003f42u, 0x00003f66u, 0x000500c2u, 0x00000006u, 0x00003f69u, 0x00003f66u, 0x00003f58u, 0x000500c7u, 0x00000006u, 0x00003f6au, 0x00003f69u, 0x00000e88u, 0x0003003eu, 0x00003f42u, 0x00003f6au, 0x000500c7u, 0x00000006u, 0x00003f6cu, 0x00003f6au, 0x00000ec0u, 0x0003003eu, 0x00003f43u, 0x00003f6cu, 0x000500c4u, 0x00000006u, 0x00003f6eu, 0x00003f6cu, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003f70u, 0x00003f6cu, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003f71u, 0x00003f6eu, 0x00003f70u, 0x000500c2u, 0x00000006u, 0x00003f73u, 0x00003f6cu, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003f74u, 0x00003f71u, 0x00003f73u, 0x0003003eu, 0x00003f43u, 0x00003f74u, 0x00040071u, 0x00000011u, 0x00003f76u, 0x00003f74u, 0x0004007cu, 0x00000012u, 0x00003f77u, 0x00003f76u, 0x000500c7u, 0x00000006u, 0x00003f7fu, 0x00003f6au, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f80u, 0x00003f7fu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003f81u, 0x00003f80u, 0x0004007cu, 0x00000012u, 0x00003f82u, 0x00003f81u, 0x00070050u, 0x00000013u, 0x00003f83u, 0x00003f77u, 0x00003f77u, 0x00003f77u, 0x00003f82u, 0x0003003eu, 0x00003f44u, 0x00003f83u, 0x0003003eu, 0x00002ce7u, 0x00003f83u, 0x000200f9u, 0x00003058u, 0x000200f8u, 0x00003058u, 0x000700f5u, 0x00000013u, 0x00008906u, 0x000088b3u, 0x00003047u, 0x00003f83u, 0x00003059u, 0x000200f9u, 0x0000303cu, 0x000200f8u, 0x0000303cu, 0x000d00f5u, 0x00000013u, 0x00008905u, 0x000088b3u, 0x00002f0cu, 0x00008906u, 0x00003058u, 0x00008908u, 0x00003078u, 0x0000890au, 0x00003098u, 0x0000890cu, 0x000030b8u, 0x000d00f5u, 0x00000013u, 0x00008888u, 0x00008839u, 0x00002f0cu, 0x0000888au, 0x00003058u, 0x0000888cu, 0x00003078u, 0x0000888eu, 0x00003098u, 0x00008890u, 0x000030b8u, 0x000d00f5u, 0x00000013u, 0x0000880du, 0x000087bcu, 0x00002f0cu, 0x00003eb4u, 0x00003058u, 0x00003fbeu, 0x00003078u, 0x000040a8u, 0x00003098u, 0x0000417fu, 0x000030b8u, 0x000d00f5u, 0x00000013u, 0x00008790u, 0x0000873du, 0x00002f0cu, 0x00008792u, 0x00003058u, 0x00008794u, 0x00003078u, 0x00008796u, 0x00003098u, 0x00008798u, 0x000030b8u, 0x000200f9u, 0x00002f08u, 0x000200f8u, 0x00002f0bu, 0x00040071u, 0x00000006u, 0x00002fc6u, 0x00002ca2u, 0x0004007cu, 0x00000008u, 0x00002fc7u, 0x00002fc6u, 0x000300f7u, 0x00002fc8u, 0x00000000u, 0x000700fbu, 0x00002fc7u, 0x00002fc9u, 0x00000000u, 0x00002fcau, 0x00000001u, 0x00002fcbu, 0x000200f8u, 0x00002fcbu, 0x0004007cu, 0x000000b0u, 0x00003019u, 0x000083b3u, 0x0003003eu, 0x00006f1eu, 0x00002c9cu, 0x0003003eu, 0x00006f1fu, 0x00002c9eu, 0x0003003eu, 0x00002d72u, 0x000021b2u, 0x0003003eu, 0x00002d73u, 0x00003019u, 0x00050041u, 0x00000007u, 0x00003de8u, 0x00002d73u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003de9u, 0x00003de8u, 0x00050084u, 0x00000006u, 0x00003deau, 0x00002c9eu, 0x00003de9u, 0x00050080u, 0x00000006u, 0x00003debu, 0x00002c9cu, 0x00003deau, 0x0003003eu, 0x00003de0u, 0x00003debu, 0x00050041u, 0x00000007u, 0x00003decu, 0x00002d73u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003dedu, 0x00003decu, 0x00050080u, 0x00000006u, 0x00003defu, 0x00003debu, 0x00003dedu, 0x0003003eu, 0x00003de0u, 0x00003defu, 0x000500c7u, 0x00000006u, 0x00003df1u, 0x00003defu, 0x00000e65u, 0x0003003eu, 0x00003de0u, 0x00003df1u, 0x0003003eu, 0x00003de1u, 0x00003df1u, 0x0004003du, 0x00000006u, 0x00003df4u, 0x00003de8u, 0x000500c7u, 0x00000006u, 0x00003df5u, 0x00003df4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003df6u, 0x00003df5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003df8u, 0x00003df1u, 0x00003df6u, 0x0003003eu, 0x00003de1u, 0x00003df8u, 0x000500c6u, 0x00000006u, 0x00003dfau, 0x00003df8u, 0x00000464u, 0x0003003eu, 0x00003de1u, 0x00003dfau, 0x00080041u, 0x00000671u, 0x00003dfdu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003dfau, 0x0004003du, 0x0000000fu, 0x00003dfeu, 0x00003dfdu, 0x00040071u, 0x00000006u, 0x00003dffu, 0x00003dfeu, 0x0003003eu, 0x00003de2u, 0x00003dffu, 0x00040071u, 0x00000011u, 0x00003e01u, 0x00003dffu, 0x0004007cu, 0x00000012u, 0x00003e02u, 0x00003e01u, 0x00070050u, 0x00000013u, 0x00003e03u, 0x00003e02u, 0x00003e02u, 0x00003e02u, 0x00003e02u, 0x0003003eu, 0x00003de3u, 0x00003e03u, 0x0003003eu, 0x00002ccfu, 0x00003e03u, 0x000300f7u, 0x0000301eu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x0000301fu, 0x0000301eu, 0x000200f8u, 0x0000301fu, 0x00050050u, 0x000000efu, 0x00003022u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00003023u, 0x00003022u, 0x0003003eu, 0x00006f22u, 0x00002c9cu, 0x0003003eu, 0x00006f23u, 0x00002c9eu, 0x0003003eu, 0x00002d75u, 0x000021b2u, 0x0003003eu, 0x00002d76u, 0x00003023u, 0x00050041u, 0x00000007u, 0x00003e0cu, 0x00002d76u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e0du, 0x00003e0cu, 0x00050084u, 0x00000006u, 0x00003e0eu, 0x00002c9eu, 0x00003e0du, 0x00050080u, 0x00000006u, 0x00003e0fu, 0x00002c9cu, 0x00003e0eu, 0x0003003eu, 0x00003e04u, 0x00003e0fu, 0x00050041u, 0x00000007u, 0x00003e10u, 0x00002d76u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e11u, 0x00003e10u, 0x00050080u, 0x00000006u, 0x00003e13u, 0x00003e0fu, 0x00003e11u, 0x0003003eu, 0x00003e04u, 0x00003e13u, 0x000500c7u, 0x00000006u, 0x00003e15u, 0x00003e13u, 0x00000e65u, 0x0003003eu, 0x00003e04u, 0x00003e15u, 0x0003003eu, 0x00003e05u, 0x00003e15u, 0x0004003du, 0x00000006u, 0x00003e18u, 0x00003e0cu, 0x000500c7u, 0x00000006u, 0x00003e19u, 0x00003e18u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e1au, 0x00003e19u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e1cu, 0x00003e15u, 0x00003e1au, 0x0003003eu, 0x00003e05u, 0x00003e1cu, 0x000500c6u, 0x00000006u, 0x00003e1eu, 0x00003e1cu, 0x00000464u, 0x0003003eu, 0x00003e05u, 0x00003e1eu, 0x00080041u, 0x00000671u, 0x00003e21u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003e1eu, 0x0004003du, 0x0000000fu, 0x00003e22u, 0x00003e21u, 0x00040071u, 0x00000006u, 0x00003e23u, 0x00003e22u, 0x0003003eu, 0x00003e06u, 0x00003e23u, 0x00040071u, 0x00000011u, 0x00003e25u, 0x00003e23u, 0x0004007cu, 0x00000012u, 0x00003e26u, 0x00003e25u, 0x00070050u, 0x00000013u, 0x00003e27u, 0x00003e26u, 0x00003e26u, 0x00003e26u, 0x00003e26u, 0x0003003eu, 0x00003e07u, 0x00003e27u, 0x0003003eu, 0x00002cd7u, 0x00003e27u, 0x00050050u, 0x000000efu, 0x00003029u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x0000302au, 0x00003029u, 0x0003003eu, 0x00006f26u, 0x00002c9cu, 0x0003003eu, 0x00006f27u, 0x00002c9eu, 0x0003003eu, 0x00002d78u, 0x000021b2u, 0x0003003eu, 0x00002d79u, 0x0000302au, 0x00050041u, 0x00000007u, 0x00003e30u, 0x00002d79u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e31u, 0x00003e30u, 0x00050084u, 0x00000006u, 0x00003e32u, 0x00002c9eu, 0x00003e31u, 0x00050080u, 0x00000006u, 0x00003e33u, 0x00002c9cu, 0x00003e32u, 0x0003003eu, 0x00003e28u, 0x00003e33u, 0x00050041u, 0x00000007u, 0x00003e34u, 0x00002d79u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e35u, 0x00003e34u, 0x00050080u, 0x00000006u, 0x00003e37u, 0x00003e33u, 0x00003e35u, 0x0003003eu, 0x00003e28u, 0x00003e37u, 0x000500c7u, 0x00000006u, 0x00003e39u, 0x00003e37u, 0x00000e65u, 0x0003003eu, 0x00003e28u, 0x00003e39u, 0x0003003eu, 0x00003e29u, 0x00003e39u, 0x0004003du, 0x00000006u, 0x00003e3cu, 0x00003e30u, 0x000500c7u, 0x00000006u, 0x00003e3du, 0x00003e3cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e3eu, 0x00003e3du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e40u, 0x00003e39u, 0x00003e3eu, 0x0003003eu, 0x00003e29u, 0x00003e40u, 0x000500c6u, 0x00000006u, 0x00003e42u, 0x00003e40u, 0x00000464u, 0x0003003eu, 0x00003e29u, 0x00003e42u, 0x00080041u, 0x00000671u, 0x00003e45u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003e42u, 0x0004003du, 0x0000000fu, 0x00003e46u, 0x00003e45u, 0x00040071u, 0x00000006u, 0x00003e47u, 0x00003e46u, 0x0003003eu, 0x00003e2au, 0x00003e47u, 0x00040071u, 0x00000011u, 0x00003e49u, 0x00003e47u, 0x0004007cu, 0x00000012u, 0x00003e4au, 0x00003e49u, 0x00070050u, 0x00000013u, 0x00003e4bu, 0x00003e4au, 0x00003e4au, 0x00003e4au, 0x00003e4au, 0x0003003eu, 0x00003e2bu, 0x00003e4bu, 0x0003003eu, 0x00002cdfu, 0x00003e4bu, 0x000200f9u, 0x0000301eu, 0x000200f8u, 0x0000301eu, 0x000700f5u, 0x00000013u, 0x00008887u, 0x00008839u, 0x00002fcbu, 0x00003e4bu, 0x0000301fu, 0x000700f5u, 0x00000013u, 0x0000878fu, 0x0000873du, 0x00002fcbu, 0x00003e27u, 0x0000301fu, 0x000300f7u, 0x0000302fu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003030u, 0x0000302fu, 0x000200f8u, 0x00003030u, 0x00050050u, 0x000000efu, 0x00003033u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003034u, 0x00003033u, 0x0003003eu, 0x00006f2au, 0x00002c9cu, 0x0003003eu, 0x00006f2bu, 0x00002c9eu, 0x0003003eu, 0x00002d7bu, 0x000021b2u, 0x0003003eu, 0x00002d7cu, 0x00003034u, 0x00050041u, 0x00000007u, 0x00003e54u, 0x00002d7cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e55u, 0x00003e54u, 0x00050084u, 0x00000006u, 0x00003e56u, 0x00002c9eu, 0x00003e55u, 0x00050080u, 0x00000006u, 0x00003e57u, 0x00002c9cu, 0x00003e56u, 0x0003003eu, 0x00003e4cu, 0x00003e57u, 0x00050041u, 0x00000007u, 0x00003e58u, 0x00002d7cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e59u, 0x00003e58u, 0x00050080u, 0x00000006u, 0x00003e5bu, 0x00003e57u, 0x00003e59u, 0x0003003eu, 0x00003e4cu, 0x00003e5bu, 0x000500c7u, 0x00000006u, 0x00003e5du, 0x00003e5bu, 0x00000e65u, 0x0003003eu, 0x00003e4cu, 0x00003e5du, 0x0003003eu, 0x00003e4du, 0x00003e5du, 0x0004003du, 0x00000006u, 0x00003e60u, 0x00003e54u, 0x000500c7u, 0x00000006u, 0x00003e61u, 0x00003e60u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e62u, 0x00003e61u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e64u, 0x00003e5du, 0x00003e62u, 0x0003003eu, 0x00003e4du, 0x00003e64u, 0x000500c6u, 0x00000006u, 0x00003e66u, 0x00003e64u, 0x00000464u, 0x0003003eu, 0x00003e4du, 0x00003e66u, 0x00080041u, 0x00000671u, 0x00003e69u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003e66u, 0x0004003du, 0x0000000fu, 0x00003e6au, 0x00003e69u, 0x00040071u, 0x00000006u, 0x00003e6bu, 0x00003e6au, 0x0003003eu, 0x00003e4eu, 0x00003e6bu, 0x00040071u, 0x00000011u, 0x00003e6du, 0x00003e6bu, 0x0004007cu, 0x00000012u, 0x00003e6eu, 0x00003e6du, 0x00070050u, 0x00000013u, 0x00003e6fu, 0x00003e6eu, 0x00003e6eu, 0x00003e6eu, 0x00003e6eu, 0x0003003eu, 0x00003e4fu, 0x00003e6fu, 0x0003003eu, 0x00002ce7u, 0x00003e6fu, 0x000200f9u, 0x0000302fu, 0x000200f8u, 0x0000302fu, 0x000700f5u, 0x00000013u, 0x00008903u, 0x000088b3u, 0x0000301eu, 0x00003e6fu, 0x00003030u, 0x000200f9u, 0x00002fc8u, 0x000200f8u, 0x00002fcau, 0x0004007cu, 0x000000b0u, 0x00002fedu, 0x000083b3u, 0x00040071u, 0x00000006u, 0x00002ff0u, 0x00002ca4u, 0x0003003eu, 0x00006f0eu, 0x00002c9cu, 0x0003003eu, 0x00006f0fu, 0x00002c9eu, 0x0003003eu, 0x00002d62u, 0x000021b2u, 0x0003003eu, 0x00002d63u, 0x00002fedu, 0x0003003eu, 0x00002d64u, 0x00002ff0u, 0x00050041u, 0x00000007u, 0x00003d1du, 0x00002d63u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003d1eu, 0x00003d1du, 0x00050084u, 0x00000006u, 0x00003d1fu, 0x00002c9eu, 0x00003d1eu, 0x00050080u, 0x00000006u, 0x00003d20u, 0x00002c9cu, 0x00003d1fu, 0x0003003eu, 0x00003d14u, 0x00003d20u, 0x00050041u, 0x00000007u, 0x00003d21u, 0x00002d63u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d22u, 0x00003d21u, 0x000500c2u, 0x00000006u, 0x00003d23u, 0x00003d22u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003d25u, 0x00003d20u, 0x00003d23u, 0x0003003eu, 0x00003d14u, 0x00003d25u, 0x000500c7u, 0x00000006u, 0x00003d27u, 0x00003d25u, 0x00000e65u, 0x0003003eu, 0x00003d14u, 0x00003d27u, 0x0004003du, 0x00000006u, 0x00003d29u, 0x00003d21u, 0x000400c8u, 0x00000006u, 0x00003d2au, 0x00003d29u, 0x000500c7u, 0x00000006u, 0x00003d2bu, 0x00003d2au, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003d2cu, 0x00003d2bu, 0x00000704u, 0x0003003eu, 0x00003d15u, 0x00003d2cu, 0x0003003eu, 0x00003d16u, 0x00003d27u, 0x0004003du, 0x00000006u, 0x00003d2fu, 0x00003d1du, 0x000500c7u, 0x00000006u, 0x00003d30u, 0x00003d2fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d31u, 0x00003d30u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003d33u, 0x00003d27u, 0x00003d31u, 0x0003003eu, 0x00003d16u, 0x00003d33u, 0x000500c6u, 0x00000006u, 0x00003d35u, 0x00003d33u, 0x00000464u, 0x0003003eu, 0x00003d16u, 0x00003d35u, 0x00080041u, 0x00000671u, 0x00003d38u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003d35u, 0x0004003du, 0x0000000fu, 0x00003d39u, 0x00003d38u, 0x00040071u, 0x00000006u, 0x00003d3au, 0x00003d39u, 0x0003003eu, 0x00003d17u, 0x00003d3au, 0x000500c2u, 0x00000006u, 0x00003d3du, 0x00003d3au, 0x00003d2cu, 0x000500c7u, 0x00000006u, 0x00003d3eu, 0x00003d3du, 0x00000e88u, 0x0003003eu, 0x00003d17u, 0x00003d3eu, 0x000500c4u, 0x00000006u, 0x00003d40u, 0x00002ff0u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003d42u, 0x00003d3eu, 0x00003d40u, 0x0003003eu, 0x00003d17u, 0x00003d42u, 0x00040071u, 0x00000011u, 0x00003d44u, 0x00003d42u, 0x0004007cu, 0x00000012u, 0x00003d45u, 0x00003d44u, 0x00070050u, 0x00000013u, 0x00003d46u, 0x00003d45u, 0x00003d45u, 0x00003d45u, 0x00003d45u, 0x0003003eu, 0x00003d18u, 0x00003d46u, 0x0003003eu, 0x00002ccfu, 0x00003d46u, 0x000300f7u, 0x00002ff5u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002ff6u, 0x00002ff5u, 0x000200f8u, 0x00002ff6u, 0x00050050u, 0x000000efu, 0x00002ff9u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002ffau, 0x00002ff9u, 0x0003003eu, 0x00006f12u, 0x00002c9cu, 0x0003003eu, 0x00006f13u, 0x00002c9eu, 0x0003003eu, 0x00002d66u, 0x000021b2u, 0x0003003eu, 0x00002d67u, 0x00002ffau, 0x0003003eu, 0x00002d68u, 0x00002ff0u, 0x00050041u, 0x00000007u, 0x00003d50u, 0x00002d67u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003d51u, 0x00003d50u, 0x00050084u, 0x00000006u, 0x00003d52u, 0x00002c9eu, 0x00003d51u, 0x00050080u, 0x00000006u, 0x00003d53u, 0x00002c9cu, 0x00003d52u, 0x0003003eu, 0x00003d47u, 0x00003d53u, 0x00050041u, 0x00000007u, 0x00003d54u, 0x00002d67u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d55u, 0x00003d54u, 0x000500c2u, 0x00000006u, 0x00003d56u, 0x00003d55u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003d58u, 0x00003d53u, 0x00003d56u, 0x0003003eu, 0x00003d47u, 0x00003d58u, 0x000500c7u, 0x00000006u, 0x00003d5au, 0x00003d58u, 0x00000e65u, 0x0003003eu, 0x00003d47u, 0x00003d5au, 0x0004003du, 0x00000006u, 0x00003d5cu, 0x00003d54u, 0x000400c8u, 0x00000006u, 0x00003d5du, 0x00003d5cu, 0x000500c7u, 0x00000006u, 0x00003d5eu, 0x00003d5du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003d5fu, 0x00003d5eu, 0x00000704u, 0x0003003eu, 0x00003d48u, 0x00003d5fu, 0x0003003eu, 0x00003d49u, 0x00003d5au, 0x0004003du, 0x00000006u, 0x00003d62u, 0x00003d50u, 0x000500c7u, 0x00000006u, 0x00003d63u, 0x00003d62u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d64u, 0x00003d63u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003d66u, 0x00003d5au, 0x00003d64u, 0x0003003eu, 0x00003d49u, 0x00003d66u, 0x000500c6u, 0x00000006u, 0x00003d68u, 0x00003d66u, 0x00000464u, 0x0003003eu, 0x00003d49u, 0x00003d68u, 0x00080041u, 0x00000671u, 0x00003d6bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003d68u, 0x0004003du, 0x0000000fu, 0x00003d6cu, 0x00003d6bu, 0x00040071u, 0x00000006u, 0x00003d6du, 0x00003d6cu, 0x0003003eu, 0x00003d4au, 0x00003d6du, 0x000500c2u, 0x00000006u, 0x00003d70u, 0x00003d6du, 0x00003d5fu, 0x000500c7u, 0x00000006u, 0x00003d71u, 0x00003d70u, 0x00000e88u, 0x0003003eu, 0x00003d4au, 0x00003d71u, 0x000500c5u, 0x00000006u, 0x00003d75u, 0x00003d71u, 0x00003d40u, 0x0003003eu, 0x00003d4au, 0x00003d75u, 0x00040071u, 0x00000011u, 0x00003d77u, 0x00003d75u, 0x0004007cu, 0x00000012u, 0x00003d78u, 0x00003d77u, 0x00070050u, 0x00000013u, 0x00003d79u, 0x00003d78u, 0x00003d78u, 0x00003d78u, 0x00003d78u, 0x0003003eu, 0x00003d4bu, 0x00003d79u, 0x0003003eu, 0x00002cd7u, 0x00003d79u, 0x00050050u, 0x000000efu, 0x00003003u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003004u, 0x00003003u, 0x0003003eu, 0x00006f16u, 0x00002c9cu, 0x0003003eu, 0x00006f17u, 0x00002c9eu, 0x0003003eu, 0x00002d6au, 0x000021b2u, 0x0003003eu, 0x00002d6bu, 0x00003004u, 0x0003003eu, 0x00002d6cu, 0x00002ff0u, 0x00050041u, 0x00000007u, 0x00003d83u, 0x00002d6bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003d84u, 0x00003d83u, 0x00050084u, 0x00000006u, 0x00003d85u, 0x00002c9eu, 0x00003d84u, 0x00050080u, 0x00000006u, 0x00003d86u, 0x00002c9cu, 0x00003d85u, 0x0003003eu, 0x00003d7au, 0x00003d86u, 0x00050041u, 0x00000007u, 0x00003d87u, 0x00002d6bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d88u, 0x00003d87u, 0x000500c2u, 0x00000006u, 0x00003d89u, 0x00003d88u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003d8bu, 0x00003d86u, 0x00003d89u, 0x0003003eu, 0x00003d7au, 0x00003d8bu, 0x000500c7u, 0x00000006u, 0x00003d8du, 0x00003d8bu, 0x00000e65u, 0x0003003eu, 0x00003d7au, 0x00003d8du, 0x0004003du, 0x00000006u, 0x00003d8fu, 0x00003d87u, 0x000400c8u, 0x00000006u, 0x00003d90u, 0x00003d8fu, 0x000500c7u, 0x00000006u, 0x00003d91u, 0x00003d90u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003d92u, 0x00003d91u, 0x00000704u, 0x0003003eu, 0x00003d7bu, 0x00003d92u, 0x0003003eu, 0x00003d7cu, 0x00003d8du, 0x0004003du, 0x00000006u, 0x00003d95u, 0x00003d83u, 0x000500c7u, 0x00000006u, 0x00003d96u, 0x00003d95u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d97u, 0x00003d96u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003d99u, 0x00003d8du, 0x00003d97u, 0x0003003eu, 0x00003d7cu, 0x00003d99u, 0x000500c6u, 0x00000006u, 0x00003d9bu, 0x00003d99u, 0x00000464u, 0x0003003eu, 0x00003d7cu, 0x00003d9bu, 0x00080041u, 0x00000671u, 0x00003d9eu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003d9bu, 0x0004003du, 0x0000000fu, 0x00003d9fu, 0x00003d9eu, 0x00040071u, 0x00000006u, 0x00003da0u, 0x00003d9fu, 0x0003003eu, 0x00003d7du, 0x00003da0u, 0x000500c2u, 0x00000006u, 0x00003da3u, 0x00003da0u, 0x00003d92u, 0x000500c7u, 0x00000006u, 0x00003da4u, 0x00003da3u, 0x00000e88u, 0x0003003eu, 0x00003d7du, 0x00003da4u, 0x000500c5u, 0x00000006u, 0x00003da8u, 0x00003da4u, 0x00003d40u, 0x0003003eu, 0x00003d7du, 0x00003da8u, 0x00040071u, 0x00000011u, 0x00003daau, 0x00003da8u, 0x0004007cu, 0x00000012u, 0x00003dabu, 0x00003daau, 0x00070050u, 0x00000013u, 0x00003dacu, 0x00003dabu, 0x00003dabu, 0x00003dabu, 0x00003dabu, 0x0003003eu, 0x00003d7eu, 0x00003dacu, 0x0003003eu, 0x00002cdfu, 0x00003dacu, 0x000200f9u, 0x00002ff5u, 0x000200f8u, 0x00002ff5u, 0x000700f5u, 0x00000013u, 0x00008885u, 0x00008839u, 0x00002fcau, 0x00003dacu, 0x00002ff6u, 0x000700f5u, 0x00000013u, 0x0000878du, 0x0000873du, 0x00002fcau, 0x00003d79u, 0x00002ff6u, 0x000300f7u, 0x0000300cu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x0000300du, 0x0000300cu, 0x000200f8u, 0x0000300du, 0x00050050u, 0x000000efu, 0x00003010u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00003011u, 0x00003010u, 0x0003003eu, 0x00006f1au, 0x00002c9cu, 0x0003003eu, 0x00006f1bu, 0x00002c9eu, 0x0003003eu, 0x00002d6eu, 0x000021b2u, 0x0003003eu, 0x00002d6fu, 0x00003011u, 0x0003003eu, 0x00002d70u, 0x00002ff0u, 0x00050041u, 0x00000007u, 0x00003db6u, 0x00002d6fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003db7u, 0x00003db6u, 0x00050084u, 0x00000006u, 0x00003db8u, 0x00002c9eu, 0x00003db7u, 0x00050080u, 0x00000006u, 0x00003db9u, 0x00002c9cu, 0x00003db8u, 0x0003003eu, 0x00003dadu, 0x00003db9u, 0x00050041u, 0x00000007u, 0x00003dbau, 0x00002d6fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003dbbu, 0x00003dbau, 0x000500c2u, 0x00000006u, 0x00003dbcu, 0x00003dbbu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003dbeu, 0x00003db9u, 0x00003dbcu, 0x0003003eu, 0x00003dadu, 0x00003dbeu, 0x000500c7u, 0x00000006u, 0x00003dc0u, 0x00003dbeu, 0x00000e65u, 0x0003003eu, 0x00003dadu, 0x00003dc0u, 0x0004003du, 0x00000006u, 0x00003dc2u, 0x00003dbau, 0x000400c8u, 0x00000006u, 0x00003dc3u, 0x00003dc2u, 0x000500c7u, 0x00000006u, 0x00003dc4u, 0x00003dc3u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003dc5u, 0x00003dc4u, 0x00000704u, 0x0003003eu, 0x00003daeu, 0x00003dc5u, 0x0003003eu, 0x00003dafu, 0x00003dc0u, 0x0004003du, 0x00000006u, 0x00003dc8u, 0x00003db6u, 0x000500c7u, 0x00000006u, 0x00003dc9u, 0x00003dc8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003dcau, 0x00003dc9u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003dccu, 0x00003dc0u, 0x00003dcau, 0x0003003eu, 0x00003dafu, 0x00003dccu, 0x000500c6u, 0x00000006u, 0x00003dceu, 0x00003dccu, 0x00000464u, 0x0003003eu, 0x00003dafu, 0x00003dceu, 0x00080041u, 0x00000671u, 0x00003dd1u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003dceu, 0x0004003du, 0x0000000fu, 0x00003dd2u, 0x00003dd1u, 0x00040071u, 0x00000006u, 0x00003dd3u, 0x00003dd2u, 0x0003003eu, 0x00003db0u, 0x00003dd3u, 0x000500c2u, 0x00000006u, 0x00003dd6u, 0x00003dd3u, 0x00003dc5u, 0x000500c7u, 0x00000006u, 0x00003dd7u, 0x00003dd6u, 0x00000e88u, 0x0003003eu, 0x00003db0u, 0x00003dd7u, 0x000500c5u, 0x00000006u, 0x00003ddbu, 0x00003dd7u, 0x00003d40u, 0x0003003eu, 0x00003db0u, 0x00003ddbu, 0x00040071u, 0x00000011u, 0x00003dddu, 0x00003ddbu, 0x0004007cu, 0x00000012u, 0x00003ddeu, 0x00003dddu, 0x00070050u, 0x00000013u, 0x00003ddfu, 0x00003ddeu, 0x00003ddeu, 0x00003ddeu, 0x00003ddeu, 0x0003003eu, 0x00003db1u, 0x00003ddfu, 0x0003003eu, 0x00002ce7u, 0x00003ddfu, 0x000200f9u, 0x0000300cu, 0x000200f8u, 0x0000300cu, 0x000700f5u, 0x00000013u, 0x00008901u, 0x000088b3u, 0x00002ff5u, 0x00003ddfu, 0x0000300du, 0x000200f9u, 0x00002fc8u, 0x000200f8u, 0x00002fc9u, 0x0004007cu, 0x000000b0u, 0x00002fcdu, 0x000083b3u, 0x0003003eu, 0x00006f2eu, 0x00002c9cu, 0x0003003eu, 0x00006f2fu, 0x00002c9eu, 0x0003003eu, 0x00002d7eu, 0x000021b2u, 0x0003003eu, 0x00002d7fu, 0x00002fcdu, 0x00050041u, 0x00000007u, 0x00003c6cu, 0x00002d7fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003c6du, 0x00003c6cu, 0x00050084u, 0x00000006u, 0x00003c6eu, 0x00002c9eu, 0x00003c6du, 0x00050080u, 0x00000006u, 0x00003c6fu, 0x00002c9cu, 0x00003c6eu, 0x0003003eu, 0x00003c64u, 0x00003c6fu, 0x00050041u, 0x00000007u, 0x00003c70u, 0x00002d7fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003c71u, 0x00003c70u, 0x00050084u, 0x00000006u, 0x00003c72u, 0x00003c71u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003c74u, 0x00003c6fu, 0x00003c72u, 0x0003003eu, 0x00003c64u, 0x00003c74u, 0x000500c7u, 0x00000006u, 0x00003c76u, 0x00003c74u, 0x00000e65u, 0x0003003eu, 0x00003c64u, 0x00003c76u, 0x000500c2u, 0x00000006u, 0x00003c78u, 0x00003c76u, 0x0000022au, 0x0003003eu, 0x00003c65u, 0x00003c78u, 0x0004003du, 0x00000006u, 0x00003c7au, 0x00003c6cu, 0x000500c7u, 0x00000006u, 0x00003c7bu, 0x00003c7au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003c7cu, 0x00003c7bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003c7eu, 0x00003c78u, 0x00003c7cu, 0x0003003eu, 0x00003c65u, 0x00003c7eu, 0x000500c6u, 0x00000006u, 0x00003c80u, 0x00003c7eu, 0x0000045cu, 0x0003003eu, 0x00003c65u, 0x00003c80u, 0x00080041u, 0x00000692u, 0x00003c83u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003c80u, 0x0004003du, 0x00000011u, 0x00003c84u, 0x00003c83u, 0x00040071u, 0x00000006u, 0x00003c85u, 0x00003c84u, 0x0003003eu, 0x00003c66u, 0x00003c85u, 0x000500c2u, 0x00000006u, 0x00003c87u, 0x00003c85u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003c88u, 0x00003c87u, 0x0004007cu, 0x00000012u, 0x00003c89u, 0x00003c88u, 0x000500c7u, 0x00000006u, 0x00003c8bu, 0x00003c85u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003c8cu, 0x00003c8bu, 0x0004007cu, 0x00000012u, 0x00003c8du, 0x00003c8cu, 0x00050050u, 0x000001aeu, 0x00003c8eu, 0x00003c89u, 0x00003c8du, 0x0009004fu, 0x00000013u, 0x00003c8fu, 0x00003c8eu, 0x00003c8eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003c67u, 0x00003c8fu, 0x0003003eu, 0x00002ccfu, 0x00003c8fu, 0x000300f7u, 0x00002fd2u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002fd3u, 0x00002fd2u, 0x000200f8u, 0x00002fd3u, 0x00050050u, 0x000000efu, 0x00002fd6u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002fd7u, 0x00002fd6u, 0x0003003eu, 0x00006f32u, 0x00002c9cu, 0x0003003eu, 0x00006f33u, 0x00002c9eu, 0x0003003eu, 0x00002d81u, 0x000021b2u, 0x0003003eu, 0x00002d82u, 0x00002fd7u, 0x00050041u, 0x00000007u, 0x00003c98u, 0x00002d82u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003c99u, 0x00003c98u, 0x00050084u, 0x00000006u, 0x00003c9au, 0x00002c9eu, 0x00003c99u, 0x00050080u, 0x00000006u, 0x00003c9bu, 0x00002c9cu, 0x00003c9au, 0x0003003eu, 0x00003c90u, 0x00003c9bu, 0x00050041u, 0x00000007u, 0x00003c9cu, 0x00002d82u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003c9du, 0x00003c9cu, 0x00050084u, 0x00000006u, 0x00003c9eu, 0x00003c9du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003ca0u, 0x00003c9bu, 0x00003c9eu, 0x0003003eu, 0x00003c90u, 0x00003ca0u, 0x000500c7u, 0x00000006u, 0x00003ca2u, 0x00003ca0u, 0x00000e65u, 0x0003003eu, 0x00003c90u, 0x00003ca2u, 0x000500c2u, 0x00000006u, 0x00003ca4u, 0x00003ca2u, 0x0000022au, 0x0003003eu, 0x00003c91u, 0x00003ca4u, 0x0004003du, 0x00000006u, 0x00003ca6u, 0x00003c98u, 0x000500c7u, 0x00000006u, 0x00003ca7u, 0x00003ca6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ca8u, 0x00003ca7u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003caau, 0x00003ca4u, 0x00003ca8u, 0x0003003eu, 0x00003c91u, 0x00003caau, 0x000500c6u, 0x00000006u, 0x00003cacu, 0x00003caau, 0x0000045cu, 0x0003003eu, 0x00003c91u, 0x00003cacu, 0x00080041u, 0x00000692u, 0x00003cafu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003cacu, 0x0004003du, 0x00000011u, 0x00003cb0u, 0x00003cafu, 0x00040071u, 0x00000006u, 0x00003cb1u, 0x00003cb0u, 0x0003003eu, 0x00003c92u, 0x00003cb1u, 0x000500c2u, 0x00000006u, 0x00003cb3u, 0x00003cb1u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003cb4u, 0x00003cb3u, 0x0004007cu, 0x00000012u, 0x00003cb5u, 0x00003cb4u, 0x000500c7u, 0x00000006u, 0x00003cb7u, 0x00003cb1u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003cb8u, 0x00003cb7u, 0x0004007cu, 0x00000012u, 0x00003cb9u, 0x00003cb8u, 0x00050050u, 0x000001aeu, 0x00003cbau, 0x00003cb5u, 0x00003cb9u, 0x0009004fu, 0x00000013u, 0x00003cbbu, 0x00003cbau, 0x00003cbau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003c93u, 0x00003cbbu, 0x0003003eu, 0x00002cd7u, 0x00003cbbu, 0x00050050u, 0x000000efu, 0x00002fddu, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002fdeu, 0x00002fddu, 0x0003003eu, 0x00006f36u, 0x00002c9cu, 0x0003003eu, 0x00006f37u, 0x00002c9eu, 0x0003003eu, 0x00002d84u, 0x000021b2u, 0x0003003eu, 0x00002d85u, 0x00002fdeu, 0x00050041u, 0x00000007u, 0x00003cc4u, 0x00002d85u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003cc5u, 0x00003cc4u, 0x00050084u, 0x00000006u, 0x00003cc6u, 0x00002c9eu, 0x00003cc5u, 0x00050080u, 0x00000006u, 0x00003cc7u, 0x00002c9cu, 0x00003cc6u, 0x0003003eu, 0x00003cbcu, 0x00003cc7u, 0x00050041u, 0x00000007u, 0x00003cc8u, 0x00002d85u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003cc9u, 0x00003cc8u, 0x00050084u, 0x00000006u, 0x00003ccau, 0x00003cc9u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003cccu, 0x00003cc7u, 0x00003ccau, 0x0003003eu, 0x00003cbcu, 0x00003cccu, 0x000500c7u, 0x00000006u, 0x00003cceu, 0x00003cccu, 0x00000e65u, 0x0003003eu, 0x00003cbcu, 0x00003cceu, 0x000500c2u, 0x00000006u, 0x00003cd0u, 0x00003cceu, 0x0000022au, 0x0003003eu, 0x00003cbdu, 0x00003cd0u, 0x0004003du, 0x00000006u, 0x00003cd2u, 0x00003cc4u, 0x000500c7u, 0x00000006u, 0x00003cd3u, 0x00003cd2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003cd4u, 0x00003cd3u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003cd6u, 0x00003cd0u, 0x00003cd4u, 0x0003003eu, 0x00003cbdu, 0x00003cd6u, 0x000500c6u, 0x00000006u, 0x00003cd8u, 0x00003cd6u, 0x0000045cu, 0x0003003eu, 0x00003cbdu, 0x00003cd8u, 0x00080041u, 0x00000692u, 0x00003cdbu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003cd8u, 0x0004003du, 0x00000011u, 0x00003cdcu, 0x00003cdbu, 0x00040071u, 0x00000006u, 0x00003cddu, 0x00003cdcu, 0x0003003eu, 0x00003cbeu, 0x00003cddu, 0x000500c2u, 0x00000006u, 0x00003cdfu, 0x00003cddu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003ce0u, 0x00003cdfu, 0x0004007cu, 0x00000012u, 0x00003ce1u, 0x00003ce0u, 0x000500c7u, 0x00000006u, 0x00003ce3u, 0x00003cddu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003ce4u, 0x00003ce3u, 0x0004007cu, 0x00000012u, 0x00003ce5u, 0x00003ce4u, 0x00050050u, 0x000001aeu, 0x00003ce6u, 0x00003ce1u, 0x00003ce5u, 0x0009004fu, 0x00000013u, 0x00003ce7u, 0x00003ce6u, 0x00003ce6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003cbfu, 0x00003ce7u, 0x0003003eu, 0x00002cdfu, 0x00003ce7u, 0x000200f9u, 0x00002fd2u, 0x000200f8u, 0x00002fd2u, 0x000700f5u, 0x00000013u, 0x00008883u, 0x00008839u, 0x00002fc9u, 0x00003ce7u, 0x00002fd3u, 0x000700f5u, 0x00000013u, 0x0000878bu, 0x0000873du, 0x00002fc9u, 0x00003cbbu, 0x00002fd3u, 0x000300f7u, 0x00002fe3u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002fe4u, 0x00002fe3u, 0x000200f8u, 0x00002fe4u, 0x00050050u, 0x000000efu, 0x00002fe7u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002fe8u, 0x00002fe7u, 0x0003003eu, 0x00006f3au, 0x00002c9cu, 0x0003003eu, 0x00006f3bu, 0x00002c9eu, 0x0003003eu, 0x00002d87u, 0x000021b2u, 0x0003003eu, 0x00002d88u, 0x00002fe8u, 0x00050041u, 0x00000007u, 0x00003cf0u, 0x00002d88u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003cf1u, 0x00003cf0u, 0x00050084u, 0x00000006u, 0x00003cf2u, 0x00002c9eu, 0x00003cf1u, 0x00050080u, 0x00000006u, 0x00003cf3u, 0x00002c9cu, 0x00003cf2u, 0x0003003eu, 0x00003ce8u, 0x00003cf3u, 0x00050041u, 0x00000007u, 0x00003cf4u, 0x00002d88u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003cf5u, 0x00003cf4u, 0x00050084u, 0x00000006u, 0x00003cf6u, 0x00003cf5u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003cf8u, 0x00003cf3u, 0x00003cf6u, 0x0003003eu, 0x00003ce8u, 0x00003cf8u, 0x000500c7u, 0x00000006u, 0x00003cfau, 0x00003cf8u, 0x00000e65u, 0x0003003eu, 0x00003ce8u, 0x00003cfau, 0x000500c2u, 0x00000006u, 0x00003cfcu, 0x00003cfau, 0x0000022au, 0x0003003eu, 0x00003ce9u, 0x00003cfcu, 0x0004003du, 0x00000006u, 0x00003cfeu, 0x00003cf0u, 0x000500c7u, 0x00000006u, 0x00003cffu, 0x00003cfeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d00u, 0x00003cffu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003d02u, 0x00003cfcu, 0x00003d00u, 0x0003003eu, 0x00003ce9u, 0x00003d02u, 0x000500c6u, 0x00000006u, 0x00003d04u, 0x00003d02u, 0x0000045cu, 0x0003003eu, 0x00003ce9u, 0x00003d04u, 0x00080041u, 0x00000692u, 0x00003d07u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003d04u, 0x0004003du, 0x00000011u, 0x00003d08u, 0x00003d07u, 0x00040071u, 0x00000006u, 0x00003d09u, 0x00003d08u, 0x0003003eu, 0x00003ceau, 0x00003d09u, 0x000500c2u, 0x00000006u, 0x00003d0bu, 0x00003d09u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003d0cu, 0x00003d0bu, 0x0004007cu, 0x00000012u, 0x00003d0du, 0x00003d0cu, 0x000500c7u, 0x00000006u, 0x00003d0fu, 0x00003d09u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003d10u, 0x00003d0fu, 0x0004007cu, 0x00000012u, 0x00003d11u, 0x00003d10u, 0x00050050u, 0x000001aeu, 0x00003d12u, 0x00003d0du, 0x00003d11u, 0x0009004fu, 0x00000013u, 0x00003d13u, 0x00003d12u, 0x00003d12u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003cebu, 0x00003d13u, 0x0003003eu, 0x00002ce7u, 0x00003d13u, 0x000200f9u, 0x00002fe3u, 0x000200f8u, 0x00002fe3u, 0x000700f5u, 0x00000013u, 0x000088ffu, 0x000088b3u, 0x00002fd2u, 0x00003d13u, 0x00002fe4u, 0x000200f9u, 0x00002fc8u, 0x000200f8u, 0x00002fc8u, 0x000900f5u, 0x00000013u, 0x000088feu, 0x000088ffu, 0x00002fe3u, 0x00008901u, 0x0000300cu, 0x00008903u, 0x0000302fu, 0x000900f5u, 0x00000013u, 0x00008881u, 0x00008883u, 0x00002fe3u, 0x00008885u, 0x0000300cu, 0x00008887u, 0x0000302fu, 0x000900f5u, 0x00000013u, 0x00008806u, 0x00003c8fu, 0x00002fe3u, 0x00003d46u, 0x0000300cu, 0x00003e03u, 0x0000302fu, 0x000900f5u, 0x00000013u, 0x00008789u, 0x0000878bu, 0x00002fe3u, 0x0000878du, 0x0000300cu, 0x0000878fu, 0x0000302fu, 0x000200f9u, 0x00002f08u, 0x000200f8u, 0x00002f0au, 0x000500c3u, 0x00000008u, 0x00002f98u, 0x0000832au, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002f99u, 0x00002f98u, 0x0003003eu, 0x00002d4fu, 0x00002f99u, 0x00050082u, 0x00000008u, 0x00002f9du, 0x00008368u, 0x0000832au, 0x00050080u, 0x00000008u, 0x00002f9eu, 0x00008368u, 0x00002f9du, 0x000500c3u, 0x00000008u, 0x00002f9fu, 0x00002f9eu, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002fa0u, 0x00002f9fu, 0x0003003eu, 0x00002d50u, 0x00002fa0u, 0x00050050u, 0x000000efu, 0x00002fa3u, 0x0000832au, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002fa4u, 0x00002fa3u, 0x0003003eu, 0x00006efeu, 0x00002c9cu, 0x0003003eu, 0x00006effu, 0x00002c9eu, 0x0003003eu, 0x00002d52u, 0x000021b2u, 0x0003003eu, 0x00002d53u, 0x00002fa4u, 0x0003003eu, 0x00002d54u, 0x00002f99u, 0x00050041u, 0x00000007u, 0x00003b2eu, 0x00002d53u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003b2fu, 0x00003b2eu, 0x00050084u, 0x00000006u, 0x00003b30u, 0x00002c9eu, 0x00003b2fu, 0x00050080u, 0x00000006u, 0x00003b31u, 0x00002c9cu, 0x00003b30u, 0x0003003eu, 0x00003b20u, 0x00003b31u, 0x00050041u, 0x00000007u, 0x00003b33u, 0x00002d53u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003b34u, 0x00003b33u, 0x00050080u, 0x00000006u, 0x00003b35u, 0x00003b31u, 0x00003b34u, 0x0003003eu, 0x00003b21u, 0x00003b35u, 0x000500c7u, 0x00000006u, 0x00003b37u, 0x00003b35u, 0x00000f1du, 0x0003003eu, 0x00003b21u, 0x00003b37u, 0x00050084u, 0x00000006u, 0x00003b3au, 0x00002f99u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003b3bu, 0x00003b31u, 0x00003b3au, 0x0003003eu, 0x00003b22u, 0x00003b3bu, 0x000500c7u, 0x00000006u, 0x00003b3du, 0x00003b3bu, 0x00000f1du, 0x0003003eu, 0x00003b22u, 0x00003b3du, 0x0003003eu, 0x00003b23u, 0x00003b37u, 0x0004003du, 0x00000006u, 0x00003b40u, 0x00003b2eu, 0x000500c7u, 0x00000006u, 0x00003b41u, 0x00003b40u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b42u, 0x00003b41u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003b44u, 0x00003b37u, 0x00003b42u, 0x0003003eu, 0x00003b23u, 0x00003b44u, 0x000500c6u, 0x00000006u, 0x00003b46u, 0x00003b44u, 0x00000464u, 0x0003003eu, 0x00003b23u, 0x00003b46u, 0x000500c2u, 0x00000006u, 0x00003b48u, 0x00003b3du, 0x0000022au, 0x0003003eu, 0x00003b24u, 0x00003b48u, 0x0004003du, 0x00000006u, 0x00003b4au, 0x00003b2eu, 0x000500c7u, 0x00000006u, 0x00003b4bu, 0x00003b4au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b4cu, 0x00003b4bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003b4eu, 0x00003b48u, 0x00003b4cu, 0x0003003eu, 0x00003b24u, 0x00003b4eu, 0x000500c6u, 0x00000006u, 0x00003b50u, 0x00003b4eu, 0x0000045cu, 0x0003003eu, 0x00003b24u, 0x00003b50u, 0x000500c5u, 0x00000006u, 0x00003b53u, 0x00003b46u, 0x00000f46u, 0x00080041u, 0x00000671u, 0x00003b54u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003b53u, 0x0004003du, 0x0000000fu, 0x00003b55u, 0x00003b54u, 0x0003003eu, 0x00003b25u, 0x00003b55u, 0x00080041u, 0x00000692u, 0x00003b58u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003b50u, 0x0004003du, 0x00000011u, 0x00003b59u, 0x00003b58u, 0x0003003eu, 0x00003b26u, 0x00003b59u, 0x000500c2u, 0x00000011u, 0x00003b5bu, 0x00003b59u, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x00003b5cu, 0x00003b5bu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003b5du, 0x00003b5cu, 0x0003003eu, 0x00003b27u, 0x00003b5du, 0x000500c2u, 0x00000011u, 0x00003b5fu, 0x00003b59u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003b60u, 0x00003b5fu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003b61u, 0x00003b60u, 0x0003003eu, 0x00003b28u, 0x00003b61u, 0x00040071u, 0x00000011u, 0x00003b63u, 0x00003b5du, 0x0004007cu, 0x00000012u, 0x00003b64u, 0x00003b63u, 0x00050082u, 0x00000012u, 0x00003b65u, 0x00003b64u, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003b67u, 0x00003b61u, 0x0004007cu, 0x00000012u, 0x00003b68u, 0x00003b67u, 0x00050082u, 0x00000012u, 0x00003b69u, 0x00003b68u, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003b6bu, 0x00003b55u, 0x0004007cu, 0x00000012u, 0x00003b6cu, 0x00003b6bu, 0x00070050u, 0x00000013u, 0x00003b70u, 0x00003b65u, 0x00003b69u, 0x00003b6cu, 0x00003b6cu, 0x0003003eu, 0x00003b29u, 0x00003b70u, 0x0003003eu, 0x00002ccfu, 0x00003b70u, 0x000300f7u, 0x00002faau, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002fabu, 0x00002faau, 0x000200f8u, 0x00002fabu, 0x00050050u, 0x000000efu, 0x00002faeu, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002fafu, 0x00002faeu, 0x0003003eu, 0x00006f02u, 0x00002c9cu, 0x0003003eu, 0x00006f03u, 0x00002c9eu, 0x0003003eu, 0x00002d56u, 0x000021b2u, 0x0003003eu, 0x00002d57u, 0x00002fafu, 0x0003003eu, 0x00002d58u, 0x00002fa0u, 0x00050041u, 0x00000007u, 0x00003b7fu, 0x00002d57u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003b80u, 0x00003b7fu, 0x00050084u, 0x00000006u, 0x00003b81u, 0x00002c9eu, 0x00003b80u, 0x00050080u, 0x00000006u, 0x00003b82u, 0x00002c9cu, 0x00003b81u, 0x0003003eu, 0x00003b71u, 0x00003b82u, 0x00050041u, 0x00000007u, 0x00003b84u, 0x00002d57u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003b85u, 0x00003b84u, 0x00050080u, 0x00000006u, 0x00003b86u, 0x00003b82u, 0x00003b85u, 0x0003003eu, 0x00003b72u, 0x00003b86u, 0x000500c7u, 0x00000006u, 0x00003b88u, 0x00003b86u, 0x00000f1du, 0x0003003eu, 0x00003b72u, 0x00003b88u, 0x00050084u, 0x00000006u, 0x00003b8bu, 0x00002fa0u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003b8cu, 0x00003b82u, 0x00003b8bu, 0x0003003eu, 0x00003b73u, 0x00003b8cu, 0x000500c7u, 0x00000006u, 0x00003b8eu, 0x00003b8cu, 0x00000f1du, 0x0003003eu, 0x00003b73u, 0x00003b8eu, 0x0003003eu, 0x00003b74u, 0x00003b88u, 0x0004003du, 0x00000006u, 0x00003b91u, 0x00003b7fu, 0x000500c7u, 0x00000006u, 0x00003b92u, 0x00003b91u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b93u, 0x00003b92u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003b95u, 0x00003b88u, 0x00003b93u, 0x0003003eu, 0x00003b74u, 0x00003b95u, 0x000500c6u, 0x00000006u, 0x00003b97u, 0x00003b95u, 0x00000464u, 0x0003003eu, 0x00003b74u, 0x00003b97u, 0x000500c2u, 0x00000006u, 0x00003b99u, 0x00003b8eu, 0x0000022au, 0x0003003eu, 0x00003b75u, 0x00003b99u, 0x0004003du, 0x00000006u, 0x00003b9bu, 0x00003b7fu, 0x000500c7u, 0x00000006u, 0x00003b9cu, 0x00003b9bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b9du, 0x00003b9cu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003b9fu, 0x00003b99u, 0x00003b9du, 0x0003003eu, 0x00003b75u, 0x00003b9fu, 0x000500c6u, 0x00000006u, 0x00003ba1u, 0x00003b9fu, 0x0000045cu, 0x0003003eu, 0x00003b75u, 0x00003ba1u, 0x000500c5u, 0x00000006u, 0x00003ba4u, 0x00003b97u, 0x00000f46u, 0x00080041u, 0x00000671u, 0x00003ba5u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003ba4u, 0x0004003du, 0x0000000fu, 0x00003ba6u, 0x00003ba5u, 0x0003003eu, 0x00003b76u, 0x00003ba6u, 0x00080041u, 0x00000692u, 0x00003ba9u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003ba1u, 0x0004003du, 0x00000011u, 0x00003baau, 0x00003ba9u, 0x0003003eu, 0x00003b77u, 0x00003baau, 0x000500c2u, 0x00000011u, 0x00003bacu, 0x00003baau, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x00003badu, 0x00003bacu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003baeu, 0x00003badu, 0x0003003eu, 0x00003b78u, 0x00003baeu, 0x000500c2u, 0x00000011u, 0x00003bb0u, 0x00003baau, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003bb1u, 0x00003bb0u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003bb2u, 0x00003bb1u, 0x0003003eu, 0x00003b79u, 0x00003bb2u, 0x00040071u, 0x00000011u, 0x00003bb4u, 0x00003baeu, 0x0004007cu, 0x00000012u, 0x00003bb5u, 0x00003bb4u, 0x00050082u, 0x00000012u, 0x00003bb6u, 0x00003bb5u, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003bb8u, 0x00003bb2u, 0x0004007cu, 0x00000012u, 0x00003bb9u, 0x00003bb8u, 0x00050082u, 0x00000012u, 0x00003bbau, 0x00003bb9u, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003bbcu, 0x00003ba6u, 0x0004007cu, 0x00000012u, 0x00003bbdu, 0x00003bbcu, 0x00070050u, 0x00000013u, 0x00003bc1u, 0x00003bb6u, 0x00003bbau, 0x00003bbdu, 0x00003bbdu, 0x0003003eu, 0x00003b7au, 0x00003bc1u, 0x0003003eu, 0x00002cd7u, 0x00003bc1u, 0x00050050u, 0x000000efu, 0x00002fb6u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002fb7u, 0x00002fb6u, 0x0003003eu, 0x00006f06u, 0x00002c9cu, 0x0003003eu, 0x00006f07u, 0x00002c9eu, 0x0003003eu, 0x00002d5au, 0x000021b2u, 0x0003003eu, 0x00002d5bu, 0x00002fb7u, 0x0003003eu, 0x00002d5cu, 0x00002f99u, 0x00050041u, 0x00000007u, 0x00003bd0u, 0x00002d5bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003bd1u, 0x00003bd0u, 0x00050084u, 0x00000006u, 0x00003bd2u, 0x00002c9eu, 0x00003bd1u, 0x00050080u, 0x00000006u, 0x00003bd3u, 0x00002c9cu, 0x00003bd2u, 0x0003003eu, 0x00003bc2u, 0x00003bd3u, 0x00050041u, 0x00000007u, 0x00003bd5u, 0x00002d5bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003bd6u, 0x00003bd5u, 0x00050080u, 0x00000006u, 0x00003bd7u, 0x00003bd3u, 0x00003bd6u, 0x0003003eu, 0x00003bc3u, 0x00003bd7u, 0x000500c7u, 0x00000006u, 0x00003bd9u, 0x00003bd7u, 0x00000f1du, 0x0003003eu, 0x00003bc3u, 0x00003bd9u, 0x00050080u, 0x00000006u, 0x00003bddu, 0x00003bd3u, 0x00003b3au, 0x0003003eu, 0x00003bc4u, 0x00003bddu, 0x000500c7u, 0x00000006u, 0x00003bdfu, 0x00003bddu, 0x00000f1du, 0x0003003eu, 0x00003bc4u, 0x00003bdfu, 0x0003003eu, 0x00003bc5u, 0x00003bd9u, 0x0004003du, 0x00000006u, 0x00003be2u, 0x00003bd0u, 0x000500c7u, 0x00000006u, 0x00003be3u, 0x00003be2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003be4u, 0x00003be3u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003be6u, 0x00003bd9u, 0x00003be4u, 0x0003003eu, 0x00003bc5u, 0x00003be6u, 0x000500c6u, 0x00000006u, 0x00003be8u, 0x00003be6u, 0x00000464u, 0x0003003eu, 0x00003bc5u, 0x00003be8u, 0x000500c2u, 0x00000006u, 0x00003beau, 0x00003bdfu, 0x0000022au, 0x0003003eu, 0x00003bc6u, 0x00003beau, 0x0004003du, 0x00000006u, 0x00003becu, 0x00003bd0u, 0x000500c7u, 0x00000006u, 0x00003bedu, 0x00003becu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003beeu, 0x00003bedu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003bf0u, 0x00003beau, 0x00003beeu, 0x0003003eu, 0x00003bc6u, 0x00003bf0u, 0x000500c6u, 0x00000006u, 0x00003bf2u, 0x00003bf0u, 0x0000045cu, 0x0003003eu, 0x00003bc6u, 0x00003bf2u, 0x000500c5u, 0x00000006u, 0x00003bf5u, 0x00003be8u, 0x00000f46u, 0x00080041u, 0x00000671u, 0x00003bf6u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003bf5u, 0x0004003du, 0x0000000fu, 0x00003bf7u, 0x00003bf6u, 0x0003003eu, 0x00003bc7u, 0x00003bf7u, 0x00080041u, 0x00000692u, 0x00003bfau, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003bf2u, 0x0004003du, 0x00000011u, 0x00003bfbu, 0x00003bfau, 0x0003003eu, 0x00003bc8u, 0x00003bfbu, 0x000500c2u, 0x00000011u, 0x00003bfdu, 0x00003bfbu, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x00003bfeu, 0x00003bfdu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003bffu, 0x00003bfeu, 0x0003003eu, 0x00003bc9u, 0x00003bffu, 0x000500c2u, 0x00000011u, 0x00003c01u, 0x00003bfbu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003c02u, 0x00003c01u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c03u, 0x00003c02u, 0x0003003eu, 0x00003bcau, 0x00003c03u, 0x00040071u, 0x00000011u, 0x00003c05u, 0x00003bffu, 0x0004007cu, 0x00000012u, 0x00003c06u, 0x00003c05u, 0x00050082u, 0x00000012u, 0x00003c07u, 0x00003c06u, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003c09u, 0x00003c03u, 0x0004007cu, 0x00000012u, 0x00003c0au, 0x00003c09u, 0x00050082u, 0x00000012u, 0x00003c0bu, 0x00003c0au, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003c0du, 0x00003bf7u, 0x0004007cu, 0x00000012u, 0x00003c0eu, 0x00003c0du, 0x00070050u, 0x00000013u, 0x00003c12u, 0x00003c07u, 0x00003c0bu, 0x00003c0eu, 0x00003c0eu, 0x0003003eu, 0x00003bcbu, 0x00003c12u, 0x0003003eu, 0x00002cdfu, 0x00003c12u, 0x00050050u, 0x000000efu, 0x00002fbeu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002fbfu, 0x00002fbeu, 0x0003003eu, 0x00006f0au, 0x00002c9cu, 0x0003003eu, 0x00006f0bu, 0x00002c9eu, 0x0003003eu, 0x00002d5eu, 0x000021b2u, 0x0003003eu, 0x00002d5fu, 0x00002fbfu, 0x0003003eu, 0x00002d60u, 0x00002fa0u, 0x00050041u, 0x00000007u, 0x00003c21u, 0x00002d5fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003c22u, 0x00003c21u, 0x00050084u, 0x00000006u, 0x00003c23u, 0x00002c9eu, 0x00003c22u, 0x00050080u, 0x00000006u, 0x00003c24u, 0x00002c9cu, 0x00003c23u, 0x0003003eu, 0x00003c13u, 0x00003c24u, 0x00050041u, 0x00000007u, 0x00003c26u, 0x00002d5fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003c27u, 0x00003c26u, 0x00050080u, 0x00000006u, 0x00003c28u, 0x00003c24u, 0x00003c27u, 0x0003003eu, 0x00003c14u, 0x00003c28u, 0x000500c7u, 0x00000006u, 0x00003c2au, 0x00003c28u, 0x00000f1du, 0x0003003eu, 0x00003c14u, 0x00003c2au, 0x00050080u, 0x00000006u, 0x00003c2eu, 0x00003c24u, 0x00003b8bu, 0x0003003eu, 0x00003c15u, 0x00003c2eu, 0x000500c7u, 0x00000006u, 0x00003c30u, 0x00003c2eu, 0x00000f1du, 0x0003003eu, 0x00003c15u, 0x00003c30u, 0x0003003eu, 0x00003c16u, 0x00003c2au, 0x0004003du, 0x00000006u, 0x00003c33u, 0x00003c21u, 0x000500c7u, 0x00000006u, 0x00003c34u, 0x00003c33u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003c35u, 0x00003c34u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003c37u, 0x00003c2au, 0x00003c35u, 0x0003003eu, 0x00003c16u, 0x00003c37u, 0x000500c6u, 0x00000006u, 0x00003c39u, 0x00003c37u, 0x00000464u, 0x0003003eu, 0x00003c16u, 0x00003c39u, 0x000500c2u, 0x00000006u, 0x00003c3bu, 0x00003c30u, 0x0000022au, 0x0003003eu, 0x00003c17u, 0x00003c3bu, 0x0004003du, 0x00000006u, 0x00003c3du, 0x00003c21u, 0x000500c7u, 0x00000006u, 0x00003c3eu, 0x00003c3du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003c3fu, 0x00003c3eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003c41u, 0x00003c3bu, 0x00003c3fu, 0x0003003eu, 0x00003c17u, 0x00003c41u, 0x000500c6u, 0x00000006u, 0x00003c43u, 0x00003c41u, 0x0000045cu, 0x0003003eu, 0x00003c17u, 0x00003c43u, 0x000500c5u, 0x00000006u, 0x00003c46u, 0x00003c39u, 0x00000f46u, 0x00080041u, 0x00000671u, 0x00003c47u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003c46u, 0x0004003du, 0x0000000fu, 0x00003c48u, 0x00003c47u, 0x0003003eu, 0x00003c18u, 0x00003c48u, 0x00080041u, 0x00000692u, 0x00003c4bu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003c43u, 0x0004003du, 0x00000011u, 0x00003c4cu, 0x00003c4bu, 0x0003003eu, 0x00003c19u, 0x00003c4cu, 0x000500c2u, 0x00000011u, 0x00003c4eu, 0x00003c4cu, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x00003c4fu, 0x00003c4eu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c50u, 0x00003c4fu, 0x0003003eu, 0x00003c1au, 0x00003c50u, 0x000500c2u, 0x00000011u, 0x00003c52u, 0x00003c4cu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003c53u, 0x00003c52u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c54u, 0x00003c53u, 0x0003003eu, 0x00003c1bu, 0x00003c54u, 0x00040071u, 0x00000011u, 0x00003c56u, 0x00003c50u, 0x0004007cu, 0x00000012u, 0x00003c57u, 0x00003c56u, 0x00050082u, 0x00000012u, 0x00003c58u, 0x00003c57u, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003c5au, 0x00003c54u, 0x0004007cu, 0x00000012u, 0x00003c5bu, 0x00003c5au, 0x00050082u, 0x00000012u, 0x00003c5cu, 0x00003c5bu, 0x000010afu, 0x00040071u, 0x00000011u, 0x00003c5eu, 0x00003c48u, 0x0004007cu, 0x00000012u, 0x00003c5fu, 0x00003c5eu, 0x00070050u, 0x00000013u, 0x00003c63u, 0x00003c58u, 0x00003c5cu, 0x00003c5fu, 0x00003c5fu, 0x0003003eu, 0x00003c1cu, 0x00003c63u, 0x0003003eu, 0x00002ce7u, 0x00003c63u, 0x000200f9u, 0x00002faau, 0x000200f8u, 0x00002faau, 0x000700f5u, 0x00000013u, 0x000088fdu, 0x000088b3u, 0x00002f0au, 0x00003c63u, 0x00002fabu, 0x000700f5u, 0x00000013u, 0x00008880u, 0x00008839u, 0x00002f0au, 0x00003c12u, 0x00002fabu, 0x000700f5u, 0x00000013u, 0x00008788u, 0x0000873du, 0x00002f0au, 0x00003bc1u, 0x00002fabu, 0x000200f9u, 0x00002f08u, 0x000200f8u, 0x00002f09u, 0x00040071u, 0x00000006u, 0x00002f10u, 0x00002ca2u, 0x0004007cu, 0x00000008u, 0x00002f11u, 0x00002f10u, 0x000300f7u, 0x00002f12u, 0x00000000u, 0x000b00fbu, 0x00002f11u, 0x00002f12u, 0x00000000u, 0x00002f13u, 0x00000001u, 0x00002f14u, 0x00000002u, 0x00002f15u, 0x00000003u, 0x00002f16u, 0x000200f8u, 0x00002f16u, 0x0004007cu, 0x000000b0u, 0x00002f78u, 0x000083b3u, 0x0003003eu, 0x00006eeeu, 0x00002c9cu, 0x0003003eu, 0x00006eefu, 0x00002c9eu, 0x0003003eu, 0x00002d44u, 0x000021b2u, 0x0003003eu, 0x00002d45u, 0x00002f78u, 0x00050041u, 0x00000007u, 0x00003a41u, 0x00002d45u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003a42u, 0x00003a41u, 0x00050084u, 0x00000006u, 0x00003a43u, 0x00002c9eu, 0x00003a42u, 0x00050080u, 0x00000006u, 0x00003a44u, 0x00002c9cu, 0x00003a43u, 0x0003003eu, 0x00003a38u, 0x00003a44u, 0x00050041u, 0x00000007u, 0x00003a45u, 0x00002d45u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003a46u, 0x00003a45u, 0x00050084u, 0x00000006u, 0x00003a47u, 0x00003a46u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003a49u, 0x00003a44u, 0x00003a47u, 0x0003003eu, 0x00003a38u, 0x00003a49u, 0x000500c7u, 0x00000006u, 0x00003a4bu, 0x00003a49u, 0x00000f1du, 0x0003003eu, 0x00003a38u, 0x00003a4bu, 0x000500c2u, 0x00000006u, 0x00003a4du, 0x00003a4bu, 0x0000022au, 0x0003003eu, 0x00003a39u, 0x00003a4du, 0x0004003du, 0x00000006u, 0x00003a4fu, 0x00003a41u, 0x000500c7u, 0x00000006u, 0x00003a50u, 0x00003a4fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003a51u, 0x00003a50u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003a53u, 0x00003a4du, 0x00003a51u, 0x0003003eu, 0x00003a39u, 0x00003a53u, 0x000500c6u, 0x00000006u, 0x00003a55u, 0x00003a53u, 0x0000045cu, 0x0003003eu, 0x00003a39u, 0x00003a55u, 0x00080041u, 0x00000692u, 0x00003a58u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003a55u, 0x0004003du, 0x00000011u, 0x00003a59u, 0x00003a58u, 0x00040071u, 0x00000006u, 0x00003a5au, 0x00003a59u, 0x0003003eu, 0x00003a3au, 0x00003a5au, 0x000500c5u, 0x00000006u, 0x00003a5du, 0x00003a55u, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x00003a5eu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003a5du, 0x0004003du, 0x00000011u, 0x00003a5fu, 0x00003a5eu, 0x00040071u, 0x00000006u, 0x00003a60u, 0x00003a5fu, 0x0003003eu, 0x00003a3bu, 0x00003a60u, 0x000500c2u, 0x00000006u, 0x00003a62u, 0x00003a5au, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003a63u, 0x00003a62u, 0x0004007cu, 0x00000012u, 0x00003a64u, 0x00003a63u, 0x000500c7u, 0x00000006u, 0x00003a66u, 0x00003a5au, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003a67u, 0x00003a66u, 0x0004007cu, 0x00000012u, 0x00003a68u, 0x00003a67u, 0x000500c2u, 0x00000006u, 0x00003a6au, 0x00003a60u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003a6bu, 0x00003a6au, 0x0004007cu, 0x00000012u, 0x00003a6cu, 0x00003a6bu, 0x000500c7u, 0x00000006u, 0x00003a6eu, 0x00003a60u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003a6fu, 0x00003a6eu, 0x0004007cu, 0x00000012u, 0x00003a70u, 0x00003a6fu, 0x00070050u, 0x00000013u, 0x00003a71u, 0x00003a64u, 0x00003a68u, 0x00003a6cu, 0x00003a70u, 0x0003003eu, 0x00003a3cu, 0x00003a71u, 0x0003003eu, 0x00002ccfu, 0x00003a71u, 0x000300f7u, 0x00002f7du, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002f7eu, 0x00002f7du, 0x000200f8u, 0x00002f7eu, 0x00050050u, 0x000000efu, 0x00002f81u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002f82u, 0x00002f81u, 0x0003003eu, 0x00006ef2u, 0x00002c9cu, 0x0003003eu, 0x00006ef3u, 0x00002c9eu, 0x0003003eu, 0x00002d47u, 0x000021b2u, 0x0003003eu, 0x00002d48u, 0x00002f82u, 0x00050041u, 0x00000007u, 0x00003a7bu, 0x00002d48u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003a7cu, 0x00003a7bu, 0x00050084u, 0x00000006u, 0x00003a7du, 0x00002c9eu, 0x00003a7cu, 0x00050080u, 0x00000006u, 0x00003a7eu, 0x00002c9cu, 0x00003a7du, 0x0003003eu, 0x00003a72u, 0x00003a7eu, 0x00050041u, 0x00000007u, 0x00003a7fu, 0x00002d48u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003a80u, 0x00003a7fu, 0x00050084u, 0x00000006u, 0x00003a81u, 0x00003a80u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003a83u, 0x00003a7eu, 0x00003a81u, 0x0003003eu, 0x00003a72u, 0x00003a83u, 0x000500c7u, 0x00000006u, 0x00003a85u, 0x00003a83u, 0x00000f1du, 0x0003003eu, 0x00003a72u, 0x00003a85u, 0x000500c2u, 0x00000006u, 0x00003a87u, 0x00003a85u, 0x0000022au, 0x0003003eu, 0x00003a73u, 0x00003a87u, 0x0004003du, 0x00000006u, 0x00003a89u, 0x00003a7bu, 0x000500c7u, 0x00000006u, 0x00003a8au, 0x00003a89u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003a8bu, 0x00003a8au, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003a8du, 0x00003a87u, 0x00003a8bu, 0x0003003eu, 0x00003a73u, 0x00003a8du, 0x000500c6u, 0x00000006u, 0x00003a8fu, 0x00003a8du, 0x0000045cu, 0x0003003eu, 0x00003a73u, 0x00003a8fu, 0x00080041u, 0x00000692u, 0x00003a92u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003a8fu, 0x0004003du, 0x00000011u, 0x00003a93u, 0x00003a92u, 0x00040071u, 0x00000006u, 0x00003a94u, 0x00003a93u, 0x0003003eu, 0x00003a74u, 0x00003a94u, 0x000500c5u, 0x00000006u, 0x00003a97u, 0x00003a8fu, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x00003a98u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003a97u, 0x0004003du, 0x00000011u, 0x00003a99u, 0x00003a98u, 0x00040071u, 0x00000006u, 0x00003a9au, 0x00003a99u, 0x0003003eu, 0x00003a75u, 0x00003a9au, 0x000500c2u, 0x00000006u, 0x00003a9cu, 0x00003a94u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003a9du, 0x00003a9cu, 0x0004007cu, 0x00000012u, 0x00003a9eu, 0x00003a9du, 0x000500c7u, 0x00000006u, 0x00003aa0u, 0x00003a94u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003aa1u, 0x00003aa0u, 0x0004007cu, 0x00000012u, 0x00003aa2u, 0x00003aa1u, 0x000500c2u, 0x00000006u, 0x00003aa4u, 0x00003a9au, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003aa5u, 0x00003aa4u, 0x0004007cu, 0x00000012u, 0x00003aa6u, 0x00003aa5u, 0x000500c7u, 0x00000006u, 0x00003aa8u, 0x00003a9au, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003aa9u, 0x00003aa8u, 0x0004007cu, 0x00000012u, 0x00003aaau, 0x00003aa9u, 0x00070050u, 0x00000013u, 0x00003aabu, 0x00003a9eu, 0x00003aa2u, 0x00003aa6u, 0x00003aaau, 0x0003003eu, 0x00003a76u, 0x00003aabu, 0x0003003eu, 0x00002cd7u, 0x00003aabu, 0x00050050u, 0x000000efu, 0x00002f88u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f89u, 0x00002f88u, 0x0003003eu, 0x00006ef6u, 0x00002c9cu, 0x0003003eu, 0x00006ef7u, 0x00002c9eu, 0x0003003eu, 0x00002d4au, 0x000021b2u, 0x0003003eu, 0x00002d4bu, 0x00002f89u, 0x00050041u, 0x00000007u, 0x00003ab5u, 0x00002d4bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003ab6u, 0x00003ab5u, 0x00050084u, 0x00000006u, 0x00003ab7u, 0x00002c9eu, 0x00003ab6u, 0x00050080u, 0x00000006u, 0x00003ab8u, 0x00002c9cu, 0x00003ab7u, 0x0003003eu, 0x00003aacu, 0x00003ab8u, 0x00050041u, 0x00000007u, 0x00003ab9u, 0x00002d4bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003abau, 0x00003ab9u, 0x00050084u, 0x00000006u, 0x00003abbu, 0x00003abau, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003abdu, 0x00003ab8u, 0x00003abbu, 0x0003003eu, 0x00003aacu, 0x00003abdu, 0x000500c7u, 0x00000006u, 0x00003abfu, 0x00003abdu, 0x00000f1du, 0x0003003eu, 0x00003aacu, 0x00003abfu, 0x000500c2u, 0x00000006u, 0x00003ac1u, 0x00003abfu, 0x0000022au, 0x0003003eu, 0x00003aadu, 0x00003ac1u, 0x0004003du, 0x00000006u, 0x00003ac3u, 0x00003ab5u, 0x000500c7u, 0x00000006u, 0x00003ac4u, 0x00003ac3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ac5u, 0x00003ac4u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003ac7u, 0x00003ac1u, 0x00003ac5u, 0x0003003eu, 0x00003aadu, 0x00003ac7u, 0x000500c6u, 0x00000006u, 0x00003ac9u, 0x00003ac7u, 0x0000045cu, 0x0003003eu, 0x00003aadu, 0x00003ac9u, 0x00080041u, 0x00000692u, 0x00003accu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003ac9u, 0x0004003du, 0x00000011u, 0x00003acdu, 0x00003accu, 0x00040071u, 0x00000006u, 0x00003aceu, 0x00003acdu, 0x0003003eu, 0x00003aaeu, 0x00003aceu, 0x000500c5u, 0x00000006u, 0x00003ad1u, 0x00003ac9u, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x00003ad2u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003ad1u, 0x0004003du, 0x00000011u, 0x00003ad3u, 0x00003ad2u, 0x00040071u, 0x00000006u, 0x00003ad4u, 0x00003ad3u, 0x0003003eu, 0x00003aafu, 0x00003ad4u, 0x000500c2u, 0x00000006u, 0x00003ad6u, 0x00003aceu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003ad7u, 0x00003ad6u, 0x0004007cu, 0x00000012u, 0x00003ad8u, 0x00003ad7u, 0x000500c7u, 0x00000006u, 0x00003adau, 0x00003aceu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003adbu, 0x00003adau, 0x0004007cu, 0x00000012u, 0x00003adcu, 0x00003adbu, 0x000500c2u, 0x00000006u, 0x00003adeu, 0x00003ad4u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003adfu, 0x00003adeu, 0x0004007cu, 0x00000012u, 0x00003ae0u, 0x00003adfu, 0x000500c7u, 0x00000006u, 0x00003ae2u, 0x00003ad4u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003ae3u, 0x00003ae2u, 0x0004007cu, 0x00000012u, 0x00003ae4u, 0x00003ae3u, 0x00070050u, 0x00000013u, 0x00003ae5u, 0x00003ad8u, 0x00003adcu, 0x00003ae0u, 0x00003ae4u, 0x0003003eu, 0x00003ab0u, 0x00003ae5u, 0x0003003eu, 0x00002cdfu, 0x00003ae5u, 0x000200f9u, 0x00002f7du, 0x000200f8u, 0x00002f7du, 0x000700f5u, 0x00000013u, 0x0000887fu, 0x00008839u, 0x00002f16u, 0x00003ae5u, 0x00002f7eu, 0x000700f5u, 0x00000013u, 0x00008787u, 0x0000873du, 0x00002f16u, 0x00003aabu, 0x00002f7eu, 0x000300f7u, 0x00002f8eu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002f8fu, 0x00002f8eu, 0x000200f8u, 0x00002f8fu, 0x00050050u, 0x000000efu, 0x00002f92u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f93u, 0x00002f92u, 0x0003003eu, 0x00006efau, 0x00002c9cu, 0x0003003eu, 0x00006efbu, 0x00002c9eu, 0x0003003eu, 0x00002d4du, 0x000021b2u, 0x0003003eu, 0x00002d4eu, 0x00002f93u, 0x00050041u, 0x00000007u, 0x00003aefu, 0x00002d4eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003af0u, 0x00003aefu, 0x00050084u, 0x00000006u, 0x00003af1u, 0x00002c9eu, 0x00003af0u, 0x00050080u, 0x00000006u, 0x00003af2u, 0x00002c9cu, 0x00003af1u, 0x0003003eu, 0x00003ae6u, 0x00003af2u, 0x00050041u, 0x00000007u, 0x00003af3u, 0x00002d4eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003af4u, 0x00003af3u, 0x00050084u, 0x00000006u, 0x00003af5u, 0x00003af4u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003af7u, 0x00003af2u, 0x00003af5u, 0x0003003eu, 0x00003ae6u, 0x00003af7u, 0x000500c7u, 0x00000006u, 0x00003af9u, 0x00003af7u, 0x00000f1du, 0x0003003eu, 0x00003ae6u, 0x00003af9u, 0x000500c2u, 0x00000006u, 0x00003afbu, 0x00003af9u, 0x0000022au, 0x0003003eu, 0x00003ae7u, 0x00003afbu, 0x0004003du, 0x00000006u, 0x00003afdu, 0x00003aefu, 0x000500c7u, 0x00000006u, 0x00003afeu, 0x00003afdu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003affu, 0x00003afeu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003b01u, 0x00003afbu, 0x00003affu, 0x0003003eu, 0x00003ae7u, 0x00003b01u, 0x000500c6u, 0x00000006u, 0x00003b03u, 0x00003b01u, 0x0000045cu, 0x0003003eu, 0x00003ae7u, 0x00003b03u, 0x00080041u, 0x00000692u, 0x00003b06u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003b03u, 0x0004003du, 0x00000011u, 0x00003b07u, 0x00003b06u, 0x00040071u, 0x00000006u, 0x00003b08u, 0x00003b07u, 0x0003003eu, 0x00003ae8u, 0x00003b08u, 0x000500c5u, 0x00000006u, 0x00003b0bu, 0x00003b03u, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x00003b0cu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003b0bu, 0x0004003du, 0x00000011u, 0x00003b0du, 0x00003b0cu, 0x00040071u, 0x00000006u, 0x00003b0eu, 0x00003b0du, 0x0003003eu, 0x00003ae9u, 0x00003b0eu, 0x000500c2u, 0x00000006u, 0x00003b10u, 0x00003b08u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003b11u, 0x00003b10u, 0x0004007cu, 0x00000012u, 0x00003b12u, 0x00003b11u, 0x000500c7u, 0x00000006u, 0x00003b14u, 0x00003b08u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003b15u, 0x00003b14u, 0x0004007cu, 0x00000012u, 0x00003b16u, 0x00003b15u, 0x000500c2u, 0x00000006u, 0x00003b18u, 0x00003b0eu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003b19u, 0x00003b18u, 0x0004007cu, 0x00000012u, 0x00003b1au, 0x00003b19u, 0x000500c7u, 0x00000006u, 0x00003b1cu, 0x00003b0eu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003b1du, 0x00003b1cu, 0x0004007cu, 0x00000012u, 0x00003b1eu, 0x00003b1du, 0x00070050u, 0x00000013u, 0x00003b1fu, 0x00003b12u, 0x00003b16u, 0x00003b1au, 0x00003b1eu, 0x0003003eu, 0x00003aeau, 0x00003b1fu, 0x0003003eu, 0x00002ce7u, 0x00003b1fu, 0x000200f9u, 0x00002f8eu, 0x000200f8u, 0x00002f8eu, 0x000700f5u, 0x00000013u, 0x000088fbu, 0x000088b3u, 0x00002f7du, 0x00003b1fu, 0x00002f8fu, 0x000200f9u, 0x00002f12u, 0x000200f8u, 0x00002f15u, 0x0004007cu, 0x000000b0u, 0x00002f58u, 0x000083b3u, 0x0003003eu, 0x00006edeu, 0x00002c9cu, 0x0003003eu, 0x00006edfu, 0x00002c9eu, 0x0003003eu, 0x00002d38u, 0x000021b2u, 0x0003003eu, 0x00002d39u, 0x00002f58u, 0x00050041u, 0x00000007u, 0x0000393du, 0x00002d39u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000393eu, 0x0000393du, 0x00050084u, 0x00000006u, 0x0000393fu, 0x00002c9eu, 0x0000393eu, 0x00050080u, 0x00000006u, 0x00003940u, 0x00002c9cu, 0x0000393fu, 0x0003003eu, 0x00003934u, 0x00003940u, 0x00050041u, 0x00000007u, 0x00003941u, 0x00002d39u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003942u, 0x00003941u, 0x00050084u, 0x00000006u, 0x00003943u, 0x00003942u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003945u, 0x00003940u, 0x00003943u, 0x0003003eu, 0x00003934u, 0x00003945u, 0x000500c7u, 0x00000006u, 0x00003947u, 0x00003945u, 0x00000e65u, 0x0003003eu, 0x00003934u, 0x00003947u, 0x000500c2u, 0x00000006u, 0x00003949u, 0x00003947u, 0x0000022au, 0x0003003eu, 0x00003935u, 0x00003949u, 0x0004003du, 0x00000006u, 0x0000394bu, 0x0000393du, 0x000500c7u, 0x00000006u, 0x0000394cu, 0x0000394bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000394du, 0x0000394cu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000394fu, 0x00003949u, 0x0000394du, 0x0003003eu, 0x00003935u, 0x0000394fu, 0x000500c6u, 0x00000006u, 0x00003951u, 0x0000394fu, 0x0000045cu, 0x0003003eu, 0x00003935u, 0x00003951u, 0x00080041u, 0x00000692u, 0x00003954u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003951u, 0x0004003du, 0x00000011u, 0x00003955u, 0x00003954u, 0x00040071u, 0x00000006u, 0x00003956u, 0x00003955u, 0x0003003eu, 0x00003936u, 0x00003956u, 0x0003003eu, 0x00003937u, 0x00003956u, 0x00060050u, 0x0000030cu, 0x0000395du, 0x00003956u, 0x00003956u, 0x00003956u, 0x000500c2u, 0x0000030cu, 0x0000395eu, 0x0000395du, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00003960u, 0x0000395eu, 0x0000f37cu, 0x0003003eu, 0x00003959u, 0x00003960u, 0x000500c4u, 0x0000030cu, 0x00003963u, 0x00003960u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00003966u, 0x00003960u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00003967u, 0x00003963u, 0x00003966u, 0x0003003eu, 0x00003959u, 0x00003967u, 0x000500c7u, 0x00000006u, 0x00003969u, 0x00003956u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000396au, 0x00003969u, 0x000006c3u, 0x0003003eu, 0x0000395au, 0x0000396au, 0x00040071u, 0x000004bau, 0x0000396cu, 0x00003967u, 0x0004007cu, 0x000004b6u, 0x0000396du, 0x0000396cu, 0x00040071u, 0x00000011u, 0x0000396fu, 0x0000396au, 0x0004007cu, 0x00000012u, 0x00003970u, 0x0000396fu, 0x00050051u, 0x00000012u, 0x00003971u, 0x0000396du, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003972u, 0x0000396du, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003973u, 0x0000396du, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003974u, 0x00003971u, 0x00003972u, 0x00003973u, 0x00003970u, 0x0003003eu, 0x0000395bu, 0x00003974u, 0x0003003eu, 0x00003938u, 0x00003974u, 0x0003003eu, 0x00002ccfu, 0x00003974u, 0x000300f7u, 0x00002f5du, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002f5eu, 0x00002f5du, 0x000200f8u, 0x00002f5eu, 0x00050050u, 0x000000efu, 0x00002f61u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002f62u, 0x00002f61u, 0x0003003eu, 0x00006ee2u, 0x00002c9cu, 0x0003003eu, 0x00006ee3u, 0x00002c9eu, 0x0003003eu, 0x00002d3bu, 0x000021b2u, 0x0003003eu, 0x00002d3cu, 0x00002f62u, 0x00050041u, 0x00000007u, 0x0000397eu, 0x00002d3cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000397fu, 0x0000397eu, 0x00050084u, 0x00000006u, 0x00003980u, 0x00002c9eu, 0x0000397fu, 0x00050080u, 0x00000006u, 0x00003981u, 0x00002c9cu, 0x00003980u, 0x0003003eu, 0x00003975u, 0x00003981u, 0x00050041u, 0x00000007u, 0x00003982u, 0x00002d3cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003983u, 0x00003982u, 0x00050084u, 0x00000006u, 0x00003984u, 0x00003983u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003986u, 0x00003981u, 0x00003984u, 0x0003003eu, 0x00003975u, 0x00003986u, 0x000500c7u, 0x00000006u, 0x00003988u, 0x00003986u, 0x00000e65u, 0x0003003eu, 0x00003975u, 0x00003988u, 0x000500c2u, 0x00000006u, 0x0000398au, 0x00003988u, 0x0000022au, 0x0003003eu, 0x00003976u, 0x0000398au, 0x0004003du, 0x00000006u, 0x0000398cu, 0x0000397eu, 0x000500c7u, 0x00000006u, 0x0000398du, 0x0000398cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000398eu, 0x0000398du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003990u, 0x0000398au, 0x0000398eu, 0x0003003eu, 0x00003976u, 0x00003990u, 0x000500c6u, 0x00000006u, 0x00003992u, 0x00003990u, 0x0000045cu, 0x0003003eu, 0x00003976u, 0x00003992u, 0x00080041u, 0x00000692u, 0x00003995u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003992u, 0x0004003du, 0x00000011u, 0x00003996u, 0x00003995u, 0x00040071u, 0x00000006u, 0x00003997u, 0x00003996u, 0x0003003eu, 0x00003977u, 0x00003997u, 0x0003003eu, 0x00003978u, 0x00003997u, 0x00060050u, 0x0000030cu, 0x0000399eu, 0x00003997u, 0x00003997u, 0x00003997u, 0x000500c2u, 0x0000030cu, 0x0000399fu, 0x0000399eu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000039a1u, 0x0000399fu, 0x0000f37cu, 0x0003003eu, 0x0000399au, 0x000039a1u, 0x000500c4u, 0x0000030cu, 0x000039a4u, 0x000039a1u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000039a7u, 0x000039a1u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000039a8u, 0x000039a4u, 0x000039a7u, 0x0003003eu, 0x0000399au, 0x000039a8u, 0x000500c7u, 0x00000006u, 0x000039aau, 0x00003997u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000039abu, 0x000039aau, 0x000006c3u, 0x0003003eu, 0x0000399bu, 0x000039abu, 0x00040071u, 0x000004bau, 0x000039adu, 0x000039a8u, 0x0004007cu, 0x000004b6u, 0x000039aeu, 0x000039adu, 0x00040071u, 0x00000011u, 0x000039b0u, 0x000039abu, 0x0004007cu, 0x00000012u, 0x000039b1u, 0x000039b0u, 0x00050051u, 0x00000012u, 0x000039b2u, 0x000039aeu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000039b3u, 0x000039aeu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000039b4u, 0x000039aeu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000039b5u, 0x000039b2u, 0x000039b3u, 0x000039b4u, 0x000039b1u, 0x0003003eu, 0x0000399cu, 0x000039b5u, 0x0003003eu, 0x00003979u, 0x000039b5u, 0x0003003eu, 0x00002cd7u, 0x000039b5u, 0x00050050u, 0x000000efu, 0x00002f68u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f69u, 0x00002f68u, 0x0003003eu, 0x00006ee6u, 0x00002c9cu, 0x0003003eu, 0x00006ee7u, 0x00002c9eu, 0x0003003eu, 0x00002d3eu, 0x000021b2u, 0x0003003eu, 0x00002d3fu, 0x00002f69u, 0x00050041u, 0x00000007u, 0x000039bfu, 0x00002d3fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000039c0u, 0x000039bfu, 0x00050084u, 0x00000006u, 0x000039c1u, 0x00002c9eu, 0x000039c0u, 0x00050080u, 0x00000006u, 0x000039c2u, 0x00002c9cu, 0x000039c1u, 0x0003003eu, 0x000039b6u, 0x000039c2u, 0x00050041u, 0x00000007u, 0x000039c3u, 0x00002d3fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000039c4u, 0x000039c3u, 0x00050084u, 0x00000006u, 0x000039c5u, 0x000039c4u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000039c7u, 0x000039c2u, 0x000039c5u, 0x0003003eu, 0x000039b6u, 0x000039c7u, 0x000500c7u, 0x00000006u, 0x000039c9u, 0x000039c7u, 0x00000e65u, 0x0003003eu, 0x000039b6u, 0x000039c9u, 0x000500c2u, 0x00000006u, 0x000039cbu, 0x000039c9u, 0x0000022au, 0x0003003eu, 0x000039b7u, 0x000039cbu, 0x0004003du, 0x00000006u, 0x000039cdu, 0x000039bfu, 0x000500c7u, 0x00000006u, 0x000039ceu, 0x000039cdu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000039cfu, 0x000039ceu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000039d1u, 0x000039cbu, 0x000039cfu, 0x0003003eu, 0x000039b7u, 0x000039d1u, 0x000500c6u, 0x00000006u, 0x000039d3u, 0x000039d1u, 0x0000045cu, 0x0003003eu, 0x000039b7u, 0x000039d3u, 0x00080041u, 0x00000692u, 0x000039d6u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000039d3u, 0x0004003du, 0x00000011u, 0x000039d7u, 0x000039d6u, 0x00040071u, 0x00000006u, 0x000039d8u, 0x000039d7u, 0x0003003eu, 0x000039b8u, 0x000039d8u, 0x0003003eu, 0x000039b9u, 0x000039d8u, 0x00060050u, 0x0000030cu, 0x000039dfu, 0x000039d8u, 0x000039d8u, 0x000039d8u, 0x000500c2u, 0x0000030cu, 0x000039e0u, 0x000039dfu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000039e2u, 0x000039e0u, 0x0000f37cu, 0x0003003eu, 0x000039dbu, 0x000039e2u, 0x000500c4u, 0x0000030cu, 0x000039e5u, 0x000039e2u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000039e8u, 0x000039e2u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000039e9u, 0x000039e5u, 0x000039e8u, 0x0003003eu, 0x000039dbu, 0x000039e9u, 0x000500c7u, 0x00000006u, 0x000039ebu, 0x000039d8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000039ecu, 0x000039ebu, 0x000006c3u, 0x0003003eu, 0x000039dcu, 0x000039ecu, 0x00040071u, 0x000004bau, 0x000039eeu, 0x000039e9u, 0x0004007cu, 0x000004b6u, 0x000039efu, 0x000039eeu, 0x00040071u, 0x00000011u, 0x000039f1u, 0x000039ecu, 0x0004007cu, 0x00000012u, 0x000039f2u, 0x000039f1u, 0x00050051u, 0x00000012u, 0x000039f3u, 0x000039efu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000039f4u, 0x000039efu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000039f5u, 0x000039efu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000039f6u, 0x000039f3u, 0x000039f4u, 0x000039f5u, 0x000039f2u, 0x0003003eu, 0x000039ddu, 0x000039f6u, 0x0003003eu, 0x000039bau, 0x000039f6u, 0x0003003eu, 0x00002cdfu, 0x000039f6u, 0x000200f9u, 0x00002f5du, 0x000200f8u, 0x00002f5du, 0x000700f5u, 0x00000013u, 0x0000887du, 0x00008839u, 0x00002f15u, 0x000039f6u, 0x00002f5eu, 0x000700f5u, 0x00000013u, 0x00008785u, 0x0000873du, 0x00002f15u, 0x000039b5u, 0x00002f5eu, 0x000300f7u, 0x00002f6eu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002f6fu, 0x00002f6eu, 0x000200f8u, 0x00002f6fu, 0x00050050u, 0x000000efu, 0x00002f72u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f73u, 0x00002f72u, 0x0003003eu, 0x00006eeau, 0x00002c9cu, 0x0003003eu, 0x00006eebu, 0x00002c9eu, 0x0003003eu, 0x00002d41u, 0x000021b2u, 0x0003003eu, 0x00002d42u, 0x00002f73u, 0x00050041u, 0x00000007u, 0x00003a00u, 0x00002d42u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003a01u, 0x00003a00u, 0x00050084u, 0x00000006u, 0x00003a02u, 0x00002c9eu, 0x00003a01u, 0x00050080u, 0x00000006u, 0x00003a03u, 0x00002c9cu, 0x00003a02u, 0x0003003eu, 0x000039f7u, 0x00003a03u, 0x00050041u, 0x00000007u, 0x00003a04u, 0x00002d42u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003a05u, 0x00003a04u, 0x00050084u, 0x00000006u, 0x00003a06u, 0x00003a05u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003a08u, 0x00003a03u, 0x00003a06u, 0x0003003eu, 0x000039f7u, 0x00003a08u, 0x000500c7u, 0x00000006u, 0x00003a0au, 0x00003a08u, 0x00000e65u, 0x0003003eu, 0x000039f7u, 0x00003a0au, 0x000500c2u, 0x00000006u, 0x00003a0cu, 0x00003a0au, 0x0000022au, 0x0003003eu, 0x000039f8u, 0x00003a0cu, 0x0004003du, 0x00000006u, 0x00003a0eu, 0x00003a00u, 0x000500c7u, 0x00000006u, 0x00003a0fu, 0x00003a0eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003a10u, 0x00003a0fu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003a12u, 0x00003a0cu, 0x00003a10u, 0x0003003eu, 0x000039f8u, 0x00003a12u, 0x000500c6u, 0x00000006u, 0x00003a14u, 0x00003a12u, 0x0000045cu, 0x0003003eu, 0x000039f8u, 0x00003a14u, 0x00080041u, 0x00000692u, 0x00003a17u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003a14u, 0x0004003du, 0x00000011u, 0x00003a18u, 0x00003a17u, 0x00040071u, 0x00000006u, 0x00003a19u, 0x00003a18u, 0x0003003eu, 0x000039f9u, 0x00003a19u, 0x0003003eu, 0x000039fau, 0x00003a19u, 0x00060050u, 0x0000030cu, 0x00003a20u, 0x00003a19u, 0x00003a19u, 0x00003a19u, 0x000500c2u, 0x0000030cu, 0x00003a21u, 0x00003a20u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00003a23u, 0x00003a21u, 0x0000f37cu, 0x0003003eu, 0x00003a1cu, 0x00003a23u, 0x000500c4u, 0x0000030cu, 0x00003a26u, 0x00003a23u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00003a29u, 0x00003a23u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00003a2au, 0x00003a26u, 0x00003a29u, 0x0003003eu, 0x00003a1cu, 0x00003a2au, 0x000500c7u, 0x00000006u, 0x00003a2cu, 0x00003a19u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003a2du, 0x00003a2cu, 0x000006c3u, 0x0003003eu, 0x00003a1du, 0x00003a2du, 0x00040071u, 0x000004bau, 0x00003a2fu, 0x00003a2au, 0x0004007cu, 0x000004b6u, 0x00003a30u, 0x00003a2fu, 0x00040071u, 0x00000011u, 0x00003a32u, 0x00003a2du, 0x0004007cu, 0x00000012u, 0x00003a33u, 0x00003a32u, 0x00050051u, 0x00000012u, 0x00003a34u, 0x00003a30u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003a35u, 0x00003a30u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003a36u, 0x00003a30u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003a37u, 0x00003a34u, 0x00003a35u, 0x00003a36u, 0x00003a33u, 0x0003003eu, 0x00003a1eu, 0x00003a37u, 0x0003003eu, 0x000039fbu, 0x00003a37u, 0x0003003eu, 0x00002ce7u, 0x00003a37u, 0x000200f9u, 0x00002f6eu, 0x000200f8u, 0x00002f6eu, 0x000700f5u, 0x00000013u, 0x000088f9u, 0x000088b3u, 0x00002f5du, 0x00003a37u, 0x00002f6fu, 0x000200f9u, 0x00002f12u, 0x000200f8u, 0x00002f14u, 0x0004007cu, 0x000000b0u, 0x00002f38u, 0x000083b3u, 0x0003003eu, 0x00006eceu, 0x00002c9cu, 0x0003003eu, 0x00006ecfu, 0x00002c9eu, 0x0003003eu, 0x00002d2cu, 0x000021b2u, 0x0003003eu, 0x00002d2du, 0x00002f38u, 0x00050041u, 0x00000007u, 0x000038acu, 0x00002d2du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000038adu, 0x000038acu, 0x00050084u, 0x00000006u, 0x000038aeu, 0x00002c9eu, 0x000038adu, 0x00050080u, 0x00000006u, 0x000038afu, 0x00002c9cu, 0x000038aeu, 0x0003003eu, 0x000038a4u, 0x000038afu, 0x00050041u, 0x00000007u, 0x000038b0u, 0x00002d2du, 0x0000032du, 0x0004003du, 0x00000006u, 0x000038b1u, 0x000038b0u, 0x00050080u, 0x00000006u, 0x000038b3u, 0x000038afu, 0x000038b1u, 0x0003003eu, 0x000038a4u, 0x000038b3u, 0x000500c7u, 0x00000006u, 0x000038b5u, 0x000038b3u, 0x00000e65u, 0x0003003eu, 0x000038a4u, 0x000038b5u, 0x0003003eu, 0x000038a5u, 0x000038b5u, 0x0004003du, 0x00000006u, 0x000038b8u, 0x000038acu, 0x000500c7u, 0x00000006u, 0x000038b9u, 0x000038b8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000038bau, 0x000038b9u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000038bcu, 0x000038b5u, 0x000038bau, 0x0003003eu, 0x000038a5u, 0x000038bcu, 0x000500c6u, 0x00000006u, 0x000038beu, 0x000038bcu, 0x00000464u, 0x0003003eu, 0x000038a5u, 0x000038beu, 0x00080041u, 0x00000671u, 0x000038c1u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000038beu, 0x0004003du, 0x0000000fu, 0x000038c2u, 0x000038c1u, 0x00040071u, 0x00000006u, 0x000038c3u, 0x000038c2u, 0x0003003eu, 0x000038a6u, 0x000038c3u, 0x00040071u, 0x00000011u, 0x000038c5u, 0x000038c3u, 0x0004007cu, 0x00000012u, 0x000038c6u, 0x000038c5u, 0x00070050u, 0x00000013u, 0x000038c7u, 0x000038c6u, 0x000038c6u, 0x000038c6u, 0x000038c6u, 0x0003003eu, 0x000038a7u, 0x000038c7u, 0x0003003eu, 0x00002ccfu, 0x000038c7u, 0x000300f7u, 0x00002f3du, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002f3eu, 0x00002f3du, 0x000200f8u, 0x00002f3eu, 0x00050050u, 0x000000efu, 0x00002f41u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002f42u, 0x00002f41u, 0x0003003eu, 0x00006ed2u, 0x00002c9cu, 0x0003003eu, 0x00006ed3u, 0x00002c9eu, 0x0003003eu, 0x00002d2fu, 0x000021b2u, 0x0003003eu, 0x00002d30u, 0x00002f42u, 0x00050041u, 0x00000007u, 0x000038d0u, 0x00002d30u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000038d1u, 0x000038d0u, 0x00050084u, 0x00000006u, 0x000038d2u, 0x00002c9eu, 0x000038d1u, 0x00050080u, 0x00000006u, 0x000038d3u, 0x00002c9cu, 0x000038d2u, 0x0003003eu, 0x000038c8u, 0x000038d3u, 0x00050041u, 0x00000007u, 0x000038d4u, 0x00002d30u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000038d5u, 0x000038d4u, 0x00050080u, 0x00000006u, 0x000038d7u, 0x000038d3u, 0x000038d5u, 0x0003003eu, 0x000038c8u, 0x000038d7u, 0x000500c7u, 0x00000006u, 0x000038d9u, 0x000038d7u, 0x00000e65u, 0x0003003eu, 0x000038c8u, 0x000038d9u, 0x0003003eu, 0x000038c9u, 0x000038d9u, 0x0004003du, 0x00000006u, 0x000038dcu, 0x000038d0u, 0x000500c7u, 0x00000006u, 0x000038ddu, 0x000038dcu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000038deu, 0x000038ddu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000038e0u, 0x000038d9u, 0x000038deu, 0x0003003eu, 0x000038c9u, 0x000038e0u, 0x000500c6u, 0x00000006u, 0x000038e2u, 0x000038e0u, 0x00000464u, 0x0003003eu, 0x000038c9u, 0x000038e2u, 0x00080041u, 0x00000671u, 0x000038e5u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000038e2u, 0x0004003du, 0x0000000fu, 0x000038e6u, 0x000038e5u, 0x00040071u, 0x00000006u, 0x000038e7u, 0x000038e6u, 0x0003003eu, 0x000038cau, 0x000038e7u, 0x00040071u, 0x00000011u, 0x000038e9u, 0x000038e7u, 0x0004007cu, 0x00000012u, 0x000038eau, 0x000038e9u, 0x00070050u, 0x00000013u, 0x000038ebu, 0x000038eau, 0x000038eau, 0x000038eau, 0x000038eau, 0x0003003eu, 0x000038cbu, 0x000038ebu, 0x0003003eu, 0x00002cd7u, 0x000038ebu, 0x00050050u, 0x000000efu, 0x00002f48u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f49u, 0x00002f48u, 0x0003003eu, 0x00006ed6u, 0x00002c9cu, 0x0003003eu, 0x00006ed7u, 0x00002c9eu, 0x0003003eu, 0x00002d32u, 0x000021b2u, 0x0003003eu, 0x00002d33u, 0x00002f49u, 0x00050041u, 0x00000007u, 0x000038f4u, 0x00002d33u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000038f5u, 0x000038f4u, 0x00050084u, 0x00000006u, 0x000038f6u, 0x00002c9eu, 0x000038f5u, 0x00050080u, 0x00000006u, 0x000038f7u, 0x00002c9cu, 0x000038f6u, 0x0003003eu, 0x000038ecu, 0x000038f7u, 0x00050041u, 0x00000007u, 0x000038f8u, 0x00002d33u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000038f9u, 0x000038f8u, 0x00050080u, 0x00000006u, 0x000038fbu, 0x000038f7u, 0x000038f9u, 0x0003003eu, 0x000038ecu, 0x000038fbu, 0x000500c7u, 0x00000006u, 0x000038fdu, 0x000038fbu, 0x00000e65u, 0x0003003eu, 0x000038ecu, 0x000038fdu, 0x0003003eu, 0x000038edu, 0x000038fdu, 0x0004003du, 0x00000006u, 0x00003900u, 0x000038f4u, 0x000500c7u, 0x00000006u, 0x00003901u, 0x00003900u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003902u, 0x00003901u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003904u, 0x000038fdu, 0x00003902u, 0x0003003eu, 0x000038edu, 0x00003904u, 0x000500c6u, 0x00000006u, 0x00003906u, 0x00003904u, 0x00000464u, 0x0003003eu, 0x000038edu, 0x00003906u, 0x00080041u, 0x00000671u, 0x00003909u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003906u, 0x0004003du, 0x0000000fu, 0x0000390au, 0x00003909u, 0x00040071u, 0x00000006u, 0x0000390bu, 0x0000390au, 0x0003003eu, 0x000038eeu, 0x0000390bu, 0x00040071u, 0x00000011u, 0x0000390du, 0x0000390bu, 0x0004007cu, 0x00000012u, 0x0000390eu, 0x0000390du, 0x00070050u, 0x00000013u, 0x0000390fu, 0x0000390eu, 0x0000390eu, 0x0000390eu, 0x0000390eu, 0x0003003eu, 0x000038efu, 0x0000390fu, 0x0003003eu, 0x00002cdfu, 0x0000390fu, 0x000200f9u, 0x00002f3du, 0x000200f8u, 0x00002f3du, 0x000700f5u, 0x00000013u, 0x0000887bu, 0x00008839u, 0x00002f14u, 0x0000390fu, 0x00002f3eu, 0x000700f5u, 0x00000013u, 0x00008783u, 0x0000873du, 0x00002f14u, 0x000038ebu, 0x00002f3eu, 0x000300f7u, 0x00002f4eu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002f4fu, 0x00002f4eu, 0x000200f8u, 0x00002f4fu, 0x00050050u, 0x000000efu, 0x00002f52u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f53u, 0x00002f52u, 0x0003003eu, 0x00006edau, 0x00002c9cu, 0x0003003eu, 0x00006edbu, 0x00002c9eu, 0x0003003eu, 0x00002d35u, 0x000021b2u, 0x0003003eu, 0x00002d36u, 0x00002f53u, 0x00050041u, 0x00000007u, 0x00003918u, 0x00002d36u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003919u, 0x00003918u, 0x00050084u, 0x00000006u, 0x0000391au, 0x00002c9eu, 0x00003919u, 0x00050080u, 0x00000006u, 0x0000391bu, 0x00002c9cu, 0x0000391au, 0x0003003eu, 0x00003910u, 0x0000391bu, 0x00050041u, 0x00000007u, 0x0000391cu, 0x00002d36u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000391du, 0x0000391cu, 0x00050080u, 0x00000006u, 0x0000391fu, 0x0000391bu, 0x0000391du, 0x0003003eu, 0x00003910u, 0x0000391fu, 0x000500c7u, 0x00000006u, 0x00003921u, 0x0000391fu, 0x00000e65u, 0x0003003eu, 0x00003910u, 0x00003921u, 0x0003003eu, 0x00003911u, 0x00003921u, 0x0004003du, 0x00000006u, 0x00003924u, 0x00003918u, 0x000500c7u, 0x00000006u, 0x00003925u, 0x00003924u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003926u, 0x00003925u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003928u, 0x00003921u, 0x00003926u, 0x0003003eu, 0x00003911u, 0x00003928u, 0x000500c6u, 0x00000006u, 0x0000392au, 0x00003928u, 0x00000464u, 0x0003003eu, 0x00003911u, 0x0000392au, 0x00080041u, 0x00000671u, 0x0000392du, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000392au, 0x0004003du, 0x0000000fu, 0x0000392eu, 0x0000392du, 0x00040071u, 0x00000006u, 0x0000392fu, 0x0000392eu, 0x0003003eu, 0x00003912u, 0x0000392fu, 0x00040071u, 0x00000011u, 0x00003931u, 0x0000392fu, 0x0004007cu, 0x00000012u, 0x00003932u, 0x00003931u, 0x00070050u, 0x00000013u, 0x00003933u, 0x00003932u, 0x00003932u, 0x00003932u, 0x00003932u, 0x0003003eu, 0x00003913u, 0x00003933u, 0x0003003eu, 0x00002ce7u, 0x00003933u, 0x000200f9u, 0x00002f4eu, 0x000200f8u, 0x00002f4eu, 0x000700f5u, 0x00000013u, 0x000088f7u, 0x000088b3u, 0x00002f3du, 0x00003933u, 0x00002f4fu, 0x000200f9u, 0x00002f12u, 0x000200f8u, 0x00002f13u, 0x0004007cu, 0x000000b0u, 0x00002f18u, 0x000083b3u, 0x0003003eu, 0x00006ebeu, 0x00002c9cu, 0x0003003eu, 0x00006ebfu, 0x00002c9eu, 0x0003003eu, 0x00002d20u, 0x000021b2u, 0x0003003eu, 0x00002d21u, 0x00002f18u, 0x00050041u, 0x00000007u, 0x000037e1u, 0x00002d21u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000037e2u, 0x000037e1u, 0x00050084u, 0x00000006u, 0x000037e3u, 0x00002c9eu, 0x000037e2u, 0x00050080u, 0x00000006u, 0x000037e4u, 0x00002c9cu, 0x000037e3u, 0x0003003eu, 0x000037d8u, 0x000037e4u, 0x00050041u, 0x00000007u, 0x000037e5u, 0x00002d21u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000037e6u, 0x000037e5u, 0x000500c2u, 0x00000006u, 0x000037e7u, 0x000037e6u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000037e9u, 0x000037e4u, 0x000037e7u, 0x0003003eu, 0x000037d8u, 0x000037e9u, 0x000500c7u, 0x00000006u, 0x000037ebu, 0x000037e9u, 0x00000e65u, 0x0003003eu, 0x000037d8u, 0x000037ebu, 0x0004003du, 0x00000006u, 0x000037edu, 0x000037e5u, 0x000400c8u, 0x00000006u, 0x000037eeu, 0x000037edu, 0x000500c7u, 0x00000006u, 0x000037efu, 0x000037eeu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000037f0u, 0x000037efu, 0x00000704u, 0x0003003eu, 0x000037d9u, 0x000037f0u, 0x0003003eu, 0x000037dau, 0x000037ebu, 0x0004003du, 0x00000006u, 0x000037f3u, 0x000037e1u, 0x000500c7u, 0x00000006u, 0x000037f4u, 0x000037f3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000037f5u, 0x000037f4u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000037f7u, 0x000037ebu, 0x000037f5u, 0x0003003eu, 0x000037dau, 0x000037f7u, 0x000500c6u, 0x00000006u, 0x000037f9u, 0x000037f7u, 0x00000464u, 0x0003003eu, 0x000037dau, 0x000037f9u, 0x00080041u, 0x00000671u, 0x000037fcu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000037f9u, 0x0004003du, 0x0000000fu, 0x000037fdu, 0x000037fcu, 0x00040071u, 0x00000006u, 0x000037feu, 0x000037fdu, 0x0003003eu, 0x000037dbu, 0x000037feu, 0x000500c2u, 0x00000006u, 0x00003801u, 0x000037feu, 0x000037f0u, 0x000500c7u, 0x00000006u, 0x00003802u, 0x00003801u, 0x00000e88u, 0x0003003eu, 0x000037dbu, 0x00003802u, 0x000500c4u, 0x00000006u, 0x00003804u, 0x00003802u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003806u, 0x00003802u, 0x00003804u, 0x0003003eu, 0x000037dbu, 0x00003806u, 0x00040071u, 0x00000011u, 0x00003808u, 0x00003806u, 0x0004007cu, 0x00000012u, 0x00003809u, 0x00003808u, 0x00070050u, 0x00000013u, 0x0000380au, 0x00003809u, 0x00003809u, 0x00003809u, 0x00003809u, 0x0003003eu, 0x000037dcu, 0x0000380au, 0x0003003eu, 0x00002ccfu, 0x0000380au, 0x000300f7u, 0x00002f1du, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002f1eu, 0x00002f1du, 0x000200f8u, 0x00002f1eu, 0x00050050u, 0x000000efu, 0x00002f21u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002f22u, 0x00002f21u, 0x0003003eu, 0x00006ec2u, 0x00002c9cu, 0x0003003eu, 0x00006ec3u, 0x00002c9eu, 0x0003003eu, 0x00002d23u, 0x000021b2u, 0x0003003eu, 0x00002d24u, 0x00002f22u, 0x00050041u, 0x00000007u, 0x00003814u, 0x00002d24u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003815u, 0x00003814u, 0x00050084u, 0x00000006u, 0x00003816u, 0x00002c9eu, 0x00003815u, 0x00050080u, 0x00000006u, 0x00003817u, 0x00002c9cu, 0x00003816u, 0x0003003eu, 0x0000380bu, 0x00003817u, 0x00050041u, 0x00000007u, 0x00003818u, 0x00002d24u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003819u, 0x00003818u, 0x000500c2u, 0x00000006u, 0x0000381au, 0x00003819u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000381cu, 0x00003817u, 0x0000381au, 0x0003003eu, 0x0000380bu, 0x0000381cu, 0x000500c7u, 0x00000006u, 0x0000381eu, 0x0000381cu, 0x00000e65u, 0x0003003eu, 0x0000380bu, 0x0000381eu, 0x0004003du, 0x00000006u, 0x00003820u, 0x00003818u, 0x000400c8u, 0x00000006u, 0x00003821u, 0x00003820u, 0x000500c7u, 0x00000006u, 0x00003822u, 0x00003821u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003823u, 0x00003822u, 0x00000704u, 0x0003003eu, 0x0000380cu, 0x00003823u, 0x0003003eu, 0x0000380du, 0x0000381eu, 0x0004003du, 0x00000006u, 0x00003826u, 0x00003814u, 0x000500c7u, 0x00000006u, 0x00003827u, 0x00003826u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003828u, 0x00003827u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000382au, 0x0000381eu, 0x00003828u, 0x0003003eu, 0x0000380du, 0x0000382au, 0x000500c6u, 0x00000006u, 0x0000382cu, 0x0000382au, 0x00000464u, 0x0003003eu, 0x0000380du, 0x0000382cu, 0x00080041u, 0x00000671u, 0x0000382fu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000382cu, 0x0004003du, 0x0000000fu, 0x00003830u, 0x0000382fu, 0x00040071u, 0x00000006u, 0x00003831u, 0x00003830u, 0x0003003eu, 0x0000380eu, 0x00003831u, 0x000500c2u, 0x00000006u, 0x00003834u, 0x00003831u, 0x00003823u, 0x000500c7u, 0x00000006u, 0x00003835u, 0x00003834u, 0x00000e88u, 0x0003003eu, 0x0000380eu, 0x00003835u, 0x000500c4u, 0x00000006u, 0x00003837u, 0x00003835u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003839u, 0x00003835u, 0x00003837u, 0x0003003eu, 0x0000380eu, 0x00003839u, 0x00040071u, 0x00000011u, 0x0000383bu, 0x00003839u, 0x0004007cu, 0x00000012u, 0x0000383cu, 0x0000383bu, 0x00070050u, 0x00000013u, 0x0000383du, 0x0000383cu, 0x0000383cu, 0x0000383cu, 0x0000383cu, 0x0003003eu, 0x0000380fu, 0x0000383du, 0x0003003eu, 0x00002cd7u, 0x0000383du, 0x00050050u, 0x000000efu, 0x00002f28u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f29u, 0x00002f28u, 0x0003003eu, 0x00006ec6u, 0x00002c9cu, 0x0003003eu, 0x00006ec7u, 0x00002c9eu, 0x0003003eu, 0x00002d26u, 0x000021b2u, 0x0003003eu, 0x00002d27u, 0x00002f29u, 0x00050041u, 0x00000007u, 0x00003847u, 0x00002d27u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003848u, 0x00003847u, 0x00050084u, 0x00000006u, 0x00003849u, 0x00002c9eu, 0x00003848u, 0x00050080u, 0x00000006u, 0x0000384au, 0x00002c9cu, 0x00003849u, 0x0003003eu, 0x0000383eu, 0x0000384au, 0x00050041u, 0x00000007u, 0x0000384bu, 0x00002d27u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000384cu, 0x0000384bu, 0x000500c2u, 0x00000006u, 0x0000384du, 0x0000384cu, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000384fu, 0x0000384au, 0x0000384du, 0x0003003eu, 0x0000383eu, 0x0000384fu, 0x000500c7u, 0x00000006u, 0x00003851u, 0x0000384fu, 0x00000e65u, 0x0003003eu, 0x0000383eu, 0x00003851u, 0x0004003du, 0x00000006u, 0x00003853u, 0x0000384bu, 0x000400c8u, 0x00000006u, 0x00003854u, 0x00003853u, 0x000500c7u, 0x00000006u, 0x00003855u, 0x00003854u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003856u, 0x00003855u, 0x00000704u, 0x0003003eu, 0x0000383fu, 0x00003856u, 0x0003003eu, 0x00003840u, 0x00003851u, 0x0004003du, 0x00000006u, 0x00003859u, 0x00003847u, 0x000500c7u, 0x00000006u, 0x0000385au, 0x00003859u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000385bu, 0x0000385au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000385du, 0x00003851u, 0x0000385bu, 0x0003003eu, 0x00003840u, 0x0000385du, 0x000500c6u, 0x00000006u, 0x0000385fu, 0x0000385du, 0x00000464u, 0x0003003eu, 0x00003840u, 0x0000385fu, 0x00080041u, 0x00000671u, 0x00003862u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000385fu, 0x0004003du, 0x0000000fu, 0x00003863u, 0x00003862u, 0x00040071u, 0x00000006u, 0x00003864u, 0x00003863u, 0x0003003eu, 0x00003841u, 0x00003864u, 0x000500c2u, 0x00000006u, 0x00003867u, 0x00003864u, 0x00003856u, 0x000500c7u, 0x00000006u, 0x00003868u, 0x00003867u, 0x00000e88u, 0x0003003eu, 0x00003841u, 0x00003868u, 0x000500c4u, 0x00000006u, 0x0000386au, 0x00003868u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000386cu, 0x00003868u, 0x0000386au, 0x0003003eu, 0x00003841u, 0x0000386cu, 0x00040071u, 0x00000011u, 0x0000386eu, 0x0000386cu, 0x0004007cu, 0x00000012u, 0x0000386fu, 0x0000386eu, 0x00070050u, 0x00000013u, 0x00003870u, 0x0000386fu, 0x0000386fu, 0x0000386fu, 0x0000386fu, 0x0003003eu, 0x00003842u, 0x00003870u, 0x0003003eu, 0x00002cdfu, 0x00003870u, 0x000200f9u, 0x00002f1du, 0x000200f8u, 0x00002f1du, 0x000700f5u, 0x00000013u, 0x00008879u, 0x00008839u, 0x00002f13u, 0x00003870u, 0x00002f1eu, 0x000700f5u, 0x00000013u, 0x00008781u, 0x0000873du, 0x00002f13u, 0x0000383du, 0x00002f1eu, 0x000300f7u, 0x00002f2eu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002f2fu, 0x00002f2eu, 0x000200f8u, 0x00002f2fu, 0x00050050u, 0x000000efu, 0x00002f32u, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002f33u, 0x00002f32u, 0x0003003eu, 0x00006ecau, 0x00002c9cu, 0x0003003eu, 0x00006ecbu, 0x00002c9eu, 0x0003003eu, 0x00002d29u, 0x000021b2u, 0x0003003eu, 0x00002d2au, 0x00002f33u, 0x00050041u, 0x00000007u, 0x0000387au, 0x00002d2au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000387bu, 0x0000387au, 0x00050084u, 0x00000006u, 0x0000387cu, 0x00002c9eu, 0x0000387bu, 0x00050080u, 0x00000006u, 0x0000387du, 0x00002c9cu, 0x0000387cu, 0x0003003eu, 0x00003871u, 0x0000387du, 0x00050041u, 0x00000007u, 0x0000387eu, 0x00002d2au, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000387fu, 0x0000387eu, 0x000500c2u, 0x00000006u, 0x00003880u, 0x0000387fu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003882u, 0x0000387du, 0x00003880u, 0x0003003eu, 0x00003871u, 0x00003882u, 0x000500c7u, 0x00000006u, 0x00003884u, 0x00003882u, 0x00000e65u, 0x0003003eu, 0x00003871u, 0x00003884u, 0x0004003du, 0x00000006u, 0x00003886u, 0x0000387eu, 0x000400c8u, 0x00000006u, 0x00003887u, 0x00003886u, 0x000500c7u, 0x00000006u, 0x00003888u, 0x00003887u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003889u, 0x00003888u, 0x00000704u, 0x0003003eu, 0x00003872u, 0x00003889u, 0x0003003eu, 0x00003873u, 0x00003884u, 0x0004003du, 0x00000006u, 0x0000388cu, 0x0000387au, 0x000500c7u, 0x00000006u, 0x0000388du, 0x0000388cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000388eu, 0x0000388du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003890u, 0x00003884u, 0x0000388eu, 0x0003003eu, 0x00003873u, 0x00003890u, 0x000500c6u, 0x00000006u, 0x00003892u, 0x00003890u, 0x00000464u, 0x0003003eu, 0x00003873u, 0x00003892u, 0x00080041u, 0x00000671u, 0x00003895u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003892u, 0x0004003du, 0x0000000fu, 0x00003896u, 0x00003895u, 0x00040071u, 0x00000006u, 0x00003897u, 0x00003896u, 0x0003003eu, 0x00003874u, 0x00003897u, 0x000500c2u, 0x00000006u, 0x0000389au, 0x00003897u, 0x00003889u, 0x000500c7u, 0x00000006u, 0x0000389bu, 0x0000389au, 0x00000e88u, 0x0003003eu, 0x00003874u, 0x0000389bu, 0x000500c4u, 0x00000006u, 0x0000389du, 0x0000389bu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000389fu, 0x0000389bu, 0x0000389du, 0x0003003eu, 0x00003874u, 0x0000389fu, 0x00040071u, 0x00000011u, 0x000038a1u, 0x0000389fu, 0x0004007cu, 0x00000012u, 0x000038a2u, 0x000038a1u, 0x00070050u, 0x00000013u, 0x000038a3u, 0x000038a2u, 0x000038a2u, 0x000038a2u, 0x000038a2u, 0x0003003eu, 0x00003875u, 0x000038a3u, 0x0003003eu, 0x00002ce7u, 0x000038a3u, 0x000200f9u, 0x00002f2eu, 0x000200f8u, 0x00002f2eu, 0x000700f5u, 0x00000013u, 0x000088f5u, 0x000088b3u, 0x00002f1du, 0x000038a3u, 0x00002f2fu, 0x000200f9u, 0x00002f12u, 0x000200f8u, 0x00002f12u, 0x000d00f5u, 0x00000013u, 0x000088f4u, 0x000088b3u, 0x00002f09u, 0x000088f5u, 0x00002f2eu, 0x000088f7u, 0x00002f4eu, 0x000088f9u, 0x00002f6eu, 0x000088fbu, 0x00002f8eu, 0x000d00f5u, 0x00000013u, 0x00008877u, 0x00008839u, 0x00002f09u, 0x00008879u, 0x00002f2eu, 0x0000887bu, 0x00002f4eu, 0x0000887du, 0x00002f6eu, 0x0000887fu, 0x00002f8eu, 0x000d00f5u, 0x00000013u, 0x000087fcu, 0x000087bcu, 0x00002f09u, 0x0000380au, 0x00002f2eu, 0x000038c7u, 0x00002f4eu, 0x00003974u, 0x00002f6eu, 0x00003a71u, 0x00002f8eu, 0x000d00f5u, 0x00000013u, 0x0000877fu, 0x0000873du, 0x00002f09u, 0x00008781u, 0x00002f2eu, 0x00008783u, 0x00002f4eu, 0x00008785u, 0x00002f6eu, 0x00008787u, 0x00002f8eu, 0x000200f9u, 0x00002f08u, 0x000200f8u, 0x00002f08u, 0x000f00f5u, 0x00000013u, 0x000088f3u, 0x000088b3u, 0x00002e63u, 0x000088f4u, 0x00002f12u, 0x000088fdu, 0x00002faau, 0x000088feu, 0x00002fc8u, 0x00008905u, 0x0000303cu, 0x0000890eu, 0x000030c5u, 0x000f00f5u, 0x00000013u, 0x00008876u, 0x00008839u, 0x00002e63u, 0x00008877u, 0x00002f12u, 0x00008880u, 0x00002faau, 0x00008881u, 0x00002fc8u, 0x00008888u, 0x0000303cu, 0x00008891u, 0x000030c5u, 0x000f00f5u, 0x00000013u, 0x000087fbu, 0x000087bcu, 0x00002e63u, 0x000087fcu, 0x00002f12u, 0x00003b70u, 0x00002faau, 0x00008806u, 0x00002fc8u, 0x0000880du, 0x0000303cu, 0x00008816u, 0x000030c5u, 0x000f00f5u, 0x00000013u, 0x0000877eu, 0x0000873du, 0x00002e63u, 0x0000877fu, 0x00002f12u, 0x00008788u, 0x00002faau, 0x00008789u, 0x00002fc8u, 0x00008790u, 0x0000303cu, 0x00008799u, 0x000030c5u, 0x000200f9u, 0x00002e61u, 0x000200f8u, 0x00002e62u, 0x000300f7u, 0x00002e68u, 0x00000000u, 0x000b00fbu, 0x00002e52u, 0x00002e68u, 0x00000000u, 0x00002e69u, 0x00000002u, 0x00002e69u, 0x00000003u, 0x00002e69u, 0x00000004u, 0x00002e69u, 0x000200f8u, 0x00002e69u, 0x0003003eu, 0x00002ccdu, 0x00002e55u, 0x000600a9u, 0x00000008u, 0x00002e6du, 0x00002e55u, 0x0000022du, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002e6eu, 0x00002e6du, 0x0003003eu, 0x00002cceu, 0x00002e6eu, 0x00040071u, 0x00000006u, 0x00002e71u, 0x00002ca2u, 0x0004007cu, 0x00000008u, 0x00002e72u, 0x00002e71u, 0x000300f7u, 0x00002e73u, 0x00000000u, 0x000700fbu, 0x00002e72u, 0x00002e74u, 0x00000000u, 0x00002e75u, 0x00000001u, 0x00002e76u, 0x000200f8u, 0x00002e76u, 0x0004007cu, 0x000000b0u, 0x00002edau, 0x000083b3u, 0x000600a9u, 0x00000008u, 0x00002edcu, 0x00002e55u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00002eddu, 0x00002edcu, 0x0003003eu, 0x00006e9eu, 0x00002c9cu, 0x0003003eu, 0x00006e9fu, 0x00002c9eu, 0x0003003eu, 0x00002cf0u, 0x000021b2u, 0x0003003eu, 0x00002cf1u, 0x00002edau, 0x0003003eu, 0x00002cf2u, 0x00002eddu, 0x0003003eu, 0x00002cf3u, 0x00002e6eu, 0x0003003eu, 0x00002cf4u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x0000363cu, 0x00002cf1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000363du, 0x0000363cu, 0x00050084u, 0x00000006u, 0x0000363eu, 0x00002c9eu, 0x0000363du, 0x00050080u, 0x00000006u, 0x0000363fu, 0x00002c9cu, 0x0000363eu, 0x0003003eu, 0x00003630u, 0x0000363fu, 0x00050041u, 0x00000007u, 0x00003640u, 0x00002cf1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003641u, 0x00003640u, 0x00050080u, 0x00000006u, 0x00003643u, 0x0000363fu, 0x00003641u, 0x0003003eu, 0x00003630u, 0x00003643u, 0x000500c7u, 0x00000006u, 0x00003645u, 0x00003643u, 0x00000f1du, 0x0003003eu, 0x00003630u, 0x00003645u, 0x0003003eu, 0x00003631u, 0x00003645u, 0x0004003du, 0x00000006u, 0x00003648u, 0x0000363cu, 0x000500c7u, 0x00000006u, 0x00003649u, 0x00003648u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000364au, 0x00003649u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000364cu, 0x00003645u, 0x0000364au, 0x0003003eu, 0x00003631u, 0x0000364cu, 0x000500c6u, 0x00000006u, 0x0000364eu, 0x0000364cu, 0x00000464u, 0x0003003eu, 0x00003631u, 0x0000364eu, 0x00080041u, 0x00000671u, 0x00003651u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000364eu, 0x0004003du, 0x0000000fu, 0x00003652u, 0x00003651u, 0x00040071u, 0x00000006u, 0x00003653u, 0x00003652u, 0x0003003eu, 0x00003632u, 0x00003653u, 0x000500c4u, 0x00000006u, 0x00003655u, 0x00003653u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003657u, 0x00003655u, 0x00002eddu, 0x0003003eu, 0x00003633u, 0x00003657u, 0x000500c6u, 0x00000006u, 0x0000365au, 0x00003657u, 0x00002e6eu, 0x0003003eu, 0x00003633u, 0x0000365au, 0x000500c5u, 0x00000006u, 0x0000365du, 0x00000f4eu, 0x0000365au, 0x00080041u, 0x00000692u, 0x0000365eu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000365du, 0x0004003du, 0x00000011u, 0x0000365fu, 0x0000365eu, 0x00040071u, 0x00000006u, 0x00003660u, 0x0000365fu, 0x0003003eu, 0x00003632u, 0x00003660u, 0x000300f7u, 0x00003662u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00003663u, 0x00003664u, 0x000200f8u, 0x00003664u, 0x0003003eu, 0x00003636u, 0x00003660u, 0x00060050u, 0x0000030cu, 0x00003682u, 0x00003660u, 0x00003660u, 0x00003660u, 0x000500c2u, 0x0000030cu, 0x00003683u, 0x00003682u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00003685u, 0x00003683u, 0x0000f37cu, 0x0003003eu, 0x0000367eu, 0x00003685u, 0x000500c4u, 0x0000030cu, 0x00003688u, 0x00003685u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000368bu, 0x00003685u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x0000368cu, 0x00003688u, 0x0000368bu, 0x0003003eu, 0x0000367eu, 0x0000368cu, 0x000500c7u, 0x00000006u, 0x0000368eu, 0x00003660u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000368fu, 0x0000368eu, 0x000006c3u, 0x0003003eu, 0x0000367fu, 0x0000368fu, 0x00040071u, 0x000004bau, 0x00003691u, 0x0000368cu, 0x0004007cu, 0x000004b6u, 0x00003692u, 0x00003691u, 0x00040071u, 0x00000011u, 0x00003694u, 0x0000368fu, 0x0004007cu, 0x00000012u, 0x00003695u, 0x00003694u, 0x00050051u, 0x00000012u, 0x00003696u, 0x00003692u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003697u, 0x00003692u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003698u, 0x00003692u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003699u, 0x00003696u, 0x00003697u, 0x00003698u, 0x00003695u, 0x0003003eu, 0x00003680u, 0x00003699u, 0x0003003eu, 0x00003634u, 0x00003699u, 0x000200f9u, 0x00003662u, 0x000200f8u, 0x00003663u, 0x0003003eu, 0x00003635u, 0x00003660u, 0x000500c2u, 0x00000006u, 0x0000366eu, 0x00003660u, 0x0000025du, 0x0003003eu, 0x0000366au, 0x0000366eu, 0x000500c7u, 0x00000006u, 0x00003670u, 0x00003660u, 0x000006c3u, 0x0003003eu, 0x0000366bu, 0x00003670u, 0x00040071u, 0x00000011u, 0x00003672u, 0x0000366eu, 0x0004007cu, 0x00000012u, 0x00003673u, 0x00003672u, 0x00040071u, 0x00000011u, 0x0000367bu, 0x00003670u, 0x0004007cu, 0x00000012u, 0x0000367cu, 0x0000367bu, 0x00070050u, 0x00000013u, 0x0000367du, 0x00003673u, 0x00003673u, 0x00003673u, 0x0000367cu, 0x0003003eu, 0x0000366cu, 0x0000367du, 0x0003003eu, 0x00003634u, 0x0000367du, 0x000200f9u, 0x00003662u, 0x000200f8u, 0x00003662u, 0x000700f5u, 0x00000013u, 0x0000853cu, 0x0000367du, 0x00003663u, 0x00003699u, 0x00003664u, 0x0003003eu, 0x00003637u, 0x0000853cu, 0x0003003eu, 0x00002ccfu, 0x0000853cu, 0x000300f7u, 0x00002ee4u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002ee5u, 0x00002ee4u, 0x000200f8u, 0x00002ee5u, 0x00050050u, 0x000000efu, 0x00002ee8u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002ee9u, 0x00002ee8u, 0x0003003eu, 0x00006ea2u, 0x00002c9cu, 0x0003003eu, 0x00006ea3u, 0x00002c9eu, 0x0003003eu, 0x00002cf6u, 0x000021b2u, 0x0003003eu, 0x00002cf7u, 0x00002ee9u, 0x0003003eu, 0x00002cf8u, 0x0000045cu, 0x0003003eu, 0x00002cf9u, 0x00002e6eu, 0x0003003eu, 0x00002cfau, 0x000021c6u, 0x00050041u, 0x00000007u, 0x000036a6u, 0x00002cf7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000036a7u, 0x000036a6u, 0x00050084u, 0x00000006u, 0x000036a8u, 0x00002c9eu, 0x000036a7u, 0x00050080u, 0x00000006u, 0x000036a9u, 0x00002c9cu, 0x000036a8u, 0x0003003eu, 0x0000369au, 0x000036a9u, 0x00050041u, 0x00000007u, 0x000036aau, 0x00002cf7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000036abu, 0x000036aau, 0x00050080u, 0x00000006u, 0x000036adu, 0x000036a9u, 0x000036abu, 0x0003003eu, 0x0000369au, 0x000036adu, 0x000500c7u, 0x00000006u, 0x000036afu, 0x000036adu, 0x00000f1du, 0x0003003eu, 0x0000369au, 0x000036afu, 0x0003003eu, 0x0000369bu, 0x000036afu, 0x0004003du, 0x00000006u, 0x000036b2u, 0x000036a6u, 0x000500c7u, 0x00000006u, 0x000036b3u, 0x000036b2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000036b4u, 0x000036b3u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000036b6u, 0x000036afu, 0x000036b4u, 0x0003003eu, 0x0000369bu, 0x000036b6u, 0x000500c6u, 0x00000006u, 0x000036b8u, 0x000036b6u, 0x00000464u, 0x0003003eu, 0x0000369bu, 0x000036b8u, 0x00080041u, 0x00000671u, 0x000036bbu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000036b8u, 0x0004003du, 0x0000000fu, 0x000036bcu, 0x000036bbu, 0x00040071u, 0x00000006u, 0x000036bdu, 0x000036bcu, 0x0003003eu, 0x0000369cu, 0x000036bdu, 0x000500c4u, 0x00000006u, 0x000036bfu, 0x000036bdu, 0x0000022du, 0x00050080u, 0x00000006u, 0x000036c1u, 0x000036bfu, 0x0000045cu, 0x0003003eu, 0x0000369du, 0x000036c1u, 0x000500c6u, 0x00000006u, 0x000036c4u, 0x000036c1u, 0x00002e6eu, 0x0003003eu, 0x0000369du, 0x000036c4u, 0x000500c5u, 0x00000006u, 0x000036c7u, 0x00000f4eu, 0x000036c4u, 0x00080041u, 0x00000692u, 0x000036c8u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000036c7u, 0x0004003du, 0x00000011u, 0x000036c9u, 0x000036c8u, 0x00040071u, 0x00000006u, 0x000036cau, 0x000036c9u, 0x0003003eu, 0x0000369cu, 0x000036cau, 0x000300f7u, 0x000036ccu, 0x00000000u, 0x000400fau, 0x000021c6u, 0x000036cdu, 0x000036ceu, 0x000200f8u, 0x000036ceu, 0x0003003eu, 0x000036a0u, 0x000036cau, 0x00060050u, 0x0000030cu, 0x000036ecu, 0x000036cau, 0x000036cau, 0x000036cau, 0x000500c2u, 0x0000030cu, 0x000036edu, 0x000036ecu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000036efu, 0x000036edu, 0x0000f37cu, 0x0003003eu, 0x000036e8u, 0x000036efu, 0x000500c4u, 0x0000030cu, 0x000036f2u, 0x000036efu, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000036f5u, 0x000036efu, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000036f6u, 0x000036f2u, 0x000036f5u, 0x0003003eu, 0x000036e8u, 0x000036f6u, 0x000500c7u, 0x00000006u, 0x000036f8u, 0x000036cau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000036f9u, 0x000036f8u, 0x000006c3u, 0x0003003eu, 0x000036e9u, 0x000036f9u, 0x00040071u, 0x000004bau, 0x000036fbu, 0x000036f6u, 0x0004007cu, 0x000004b6u, 0x000036fcu, 0x000036fbu, 0x00040071u, 0x00000011u, 0x000036feu, 0x000036f9u, 0x0004007cu, 0x00000012u, 0x000036ffu, 0x000036feu, 0x00050051u, 0x00000012u, 0x00003700u, 0x000036fcu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003701u, 0x000036fcu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003702u, 0x000036fcu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003703u, 0x00003700u, 0x00003701u, 0x00003702u, 0x000036ffu, 0x0003003eu, 0x000036eau, 0x00003703u, 0x0003003eu, 0x0000369eu, 0x00003703u, 0x000200f9u, 0x000036ccu, 0x000200f8u, 0x000036cdu, 0x0003003eu, 0x0000369fu, 0x000036cau, 0x000500c2u, 0x00000006u, 0x000036d8u, 0x000036cau, 0x0000025du, 0x0003003eu, 0x000036d4u, 0x000036d8u, 0x000500c7u, 0x00000006u, 0x000036dau, 0x000036cau, 0x000006c3u, 0x0003003eu, 0x000036d5u, 0x000036dau, 0x00040071u, 0x00000011u, 0x000036dcu, 0x000036d8u, 0x0004007cu, 0x00000012u, 0x000036ddu, 0x000036dcu, 0x00040071u, 0x00000011u, 0x000036e5u, 0x000036dau, 0x0004007cu, 0x00000012u, 0x000036e6u, 0x000036e5u, 0x00070050u, 0x00000013u, 0x000036e7u, 0x000036ddu, 0x000036ddu, 0x000036ddu, 0x000036e6u, 0x0003003eu, 0x000036d6u, 0x000036e7u, 0x0003003eu, 0x0000369eu, 0x000036e7u, 0x000200f9u, 0x000036ccu, 0x000200f8u, 0x000036ccu, 0x000700f5u, 0x00000013u, 0x00008554u, 0x000036e7u, 0x000036cdu, 0x00003703u, 0x000036ceu, 0x0003003eu, 0x000036a1u, 0x00008554u, 0x0003003eu, 0x00002cd7u, 0x00008554u, 0x00050050u, 0x000000efu, 0x00002ef1u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002ef2u, 0x00002ef1u, 0x0003003eu, 0x00006ea6u, 0x00002c9cu, 0x0003003eu, 0x00006ea7u, 0x00002c9eu, 0x0003003eu, 0x00002cfcu, 0x000021b2u, 0x0003003eu, 0x00002cfdu, 0x00002ef2u, 0x0003003eu, 0x00002cfeu, 0x00000386u, 0x0003003eu, 0x00002cffu, 0x00002e6eu, 0x0003003eu, 0x00002d00u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00003710u, 0x00002cfdu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003711u, 0x00003710u, 0x00050084u, 0x00000006u, 0x00003712u, 0x00002c9eu, 0x00003711u, 0x00050080u, 0x00000006u, 0x00003713u, 0x00002c9cu, 0x00003712u, 0x0003003eu, 0x00003704u, 0x00003713u, 0x00050041u, 0x00000007u, 0x00003714u, 0x00002cfdu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003715u, 0x00003714u, 0x00050080u, 0x00000006u, 0x00003717u, 0x00003713u, 0x00003715u, 0x0003003eu, 0x00003704u, 0x00003717u, 0x000500c7u, 0x00000006u, 0x00003719u, 0x00003717u, 0x00000f1du, 0x0003003eu, 0x00003704u, 0x00003719u, 0x0003003eu, 0x00003705u, 0x00003719u, 0x0004003du, 0x00000006u, 0x0000371cu, 0x00003710u, 0x000500c7u, 0x00000006u, 0x0000371du, 0x0000371cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000371eu, 0x0000371du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003720u, 0x00003719u, 0x0000371eu, 0x0003003eu, 0x00003705u, 0x00003720u, 0x000500c6u, 0x00000006u, 0x00003722u, 0x00003720u, 0x00000464u, 0x0003003eu, 0x00003705u, 0x00003722u, 0x00080041u, 0x00000671u, 0x00003725u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003722u, 0x0004003du, 0x0000000fu, 0x00003726u, 0x00003725u, 0x00040071u, 0x00000006u, 0x00003727u, 0x00003726u, 0x0003003eu, 0x00003706u, 0x00003727u, 0x000500c4u, 0x00000006u, 0x00003729u, 0x00003727u, 0x0000022du, 0x00050080u, 0x00000006u, 0x0000372bu, 0x00003729u, 0x00000386u, 0x0003003eu, 0x00003707u, 0x0000372bu, 0x000500c6u, 0x00000006u, 0x0000372eu, 0x0000372bu, 0x00002e6eu, 0x0003003eu, 0x00003707u, 0x0000372eu, 0x000500c5u, 0x00000006u, 0x00003731u, 0x00000f4eu, 0x0000372eu, 0x00080041u, 0x00000692u, 0x00003732u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003731u, 0x0004003du, 0x00000011u, 0x00003733u, 0x00003732u, 0x00040071u, 0x00000006u, 0x00003734u, 0x00003733u, 0x0003003eu, 0x00003706u, 0x00003734u, 0x000300f7u, 0x00003736u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00003737u, 0x00003738u, 0x000200f8u, 0x00003738u, 0x0003003eu, 0x0000370au, 0x00003734u, 0x00060050u, 0x0000030cu, 0x00003756u, 0x00003734u, 0x00003734u, 0x00003734u, 0x000500c2u, 0x0000030cu, 0x00003757u, 0x00003756u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00003759u, 0x00003757u, 0x0000f37cu, 0x0003003eu, 0x00003752u, 0x00003759u, 0x000500c4u, 0x0000030cu, 0x0000375cu, 0x00003759u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000375fu, 0x00003759u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00003760u, 0x0000375cu, 0x0000375fu, 0x0003003eu, 0x00003752u, 0x00003760u, 0x000500c7u, 0x00000006u, 0x00003762u, 0x00003734u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003763u, 0x00003762u, 0x000006c3u, 0x0003003eu, 0x00003753u, 0x00003763u, 0x00040071u, 0x000004bau, 0x00003765u, 0x00003760u, 0x0004007cu, 0x000004b6u, 0x00003766u, 0x00003765u, 0x00040071u, 0x00000011u, 0x00003768u, 0x00003763u, 0x0004007cu, 0x00000012u, 0x00003769u, 0x00003768u, 0x00050051u, 0x00000012u, 0x0000376au, 0x00003766u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000376bu, 0x00003766u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000376cu, 0x00003766u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000376du, 0x0000376au, 0x0000376bu, 0x0000376cu, 0x00003769u, 0x0003003eu, 0x00003754u, 0x0000376du, 0x0003003eu, 0x00003708u, 0x0000376du, 0x000200f9u, 0x00003736u, 0x000200f8u, 0x00003737u, 0x0003003eu, 0x00003709u, 0x00003734u, 0x000500c2u, 0x00000006u, 0x00003742u, 0x00003734u, 0x0000025du, 0x0003003eu, 0x0000373eu, 0x00003742u, 0x000500c7u, 0x00000006u, 0x00003744u, 0x00003734u, 0x000006c3u, 0x0003003eu, 0x0000373fu, 0x00003744u, 0x00040071u, 0x00000011u, 0x00003746u, 0x00003742u, 0x0004007cu, 0x00000012u, 0x00003747u, 0x00003746u, 0x00040071u, 0x00000011u, 0x0000374fu, 0x00003744u, 0x0004007cu, 0x00000012u, 0x00003750u, 0x0000374fu, 0x00070050u, 0x00000013u, 0x00003751u, 0x00003747u, 0x00003747u, 0x00003747u, 0x00003750u, 0x0003003eu, 0x00003740u, 0x00003751u, 0x0003003eu, 0x00003708u, 0x00003751u, 0x000200f9u, 0x00003736u, 0x000200f8u, 0x00003736u, 0x000700f5u, 0x00000013u, 0x0000856cu, 0x00003751u, 0x00003737u, 0x0000376du, 0x00003738u, 0x0003003eu, 0x0000370bu, 0x0000856cu, 0x0003003eu, 0x00002cdfu, 0x0000856cu, 0x000200f9u, 0x00002ee4u, 0x000200f8u, 0x00002ee4u, 0x000700f5u, 0x00000013u, 0x00008873u, 0x00008839u, 0x00003662u, 0x0000856cu, 0x00003736u, 0x000700f5u, 0x00000013u, 0x0000877au, 0x0000873du, 0x00003662u, 0x00008554u, 0x00003736u, 0x000300f7u, 0x00002ef9u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002efau, 0x00002ef9u, 0x000200f8u, 0x00002efau, 0x00050050u, 0x000000efu, 0x00002efdu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002efeu, 0x00002efdu, 0x0003003eu, 0x00006eaau, 0x00002c9cu, 0x0003003eu, 0x00006eabu, 0x00002c9eu, 0x0003003eu, 0x00002d02u, 0x000021b2u, 0x0003003eu, 0x00002d03u, 0x00002efeu, 0x0003003eu, 0x00002d04u, 0x00000464u, 0x0003003eu, 0x00002d05u, 0x00002e6eu, 0x0003003eu, 0x00002d06u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x0000377au, 0x00002d03u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000377bu, 0x0000377au, 0x00050084u, 0x00000006u, 0x0000377cu, 0x00002c9eu, 0x0000377bu, 0x00050080u, 0x00000006u, 0x0000377du, 0x00002c9cu, 0x0000377cu, 0x0003003eu, 0x0000376eu, 0x0000377du, 0x00050041u, 0x00000007u, 0x0000377eu, 0x00002d03u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000377fu, 0x0000377eu, 0x00050080u, 0x00000006u, 0x00003781u, 0x0000377du, 0x0000377fu, 0x0003003eu, 0x0000376eu, 0x00003781u, 0x000500c7u, 0x00000006u, 0x00003783u, 0x00003781u, 0x00000f1du, 0x0003003eu, 0x0000376eu, 0x00003783u, 0x0003003eu, 0x0000376fu, 0x00003783u, 0x0004003du, 0x00000006u, 0x00003786u, 0x0000377au, 0x000500c7u, 0x00000006u, 0x00003787u, 0x00003786u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003788u, 0x00003787u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000378au, 0x00003783u, 0x00003788u, 0x0003003eu, 0x0000376fu, 0x0000378au, 0x000500c6u, 0x00000006u, 0x0000378cu, 0x0000378au, 0x00000464u, 0x0003003eu, 0x0000376fu, 0x0000378cu, 0x00080041u, 0x00000671u, 0x0000378fu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000378cu, 0x0004003du, 0x0000000fu, 0x00003790u, 0x0000378fu, 0x00040071u, 0x00000006u, 0x00003791u, 0x00003790u, 0x0003003eu, 0x00003770u, 0x00003791u, 0x000500c4u, 0x00000006u, 0x00003793u, 0x00003791u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003795u, 0x00003793u, 0x00000464u, 0x0003003eu, 0x00003771u, 0x00003795u, 0x000500c6u, 0x00000006u, 0x00003798u, 0x00003795u, 0x00002e6eu, 0x0003003eu, 0x00003771u, 0x00003798u, 0x000500c5u, 0x00000006u, 0x0000379bu, 0x00000f4eu, 0x00003798u, 0x00080041u, 0x00000692u, 0x0000379cu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000379bu, 0x0004003du, 0x00000011u, 0x0000379du, 0x0000379cu, 0x00040071u, 0x00000006u, 0x0000379eu, 0x0000379du, 0x0003003eu, 0x00003770u, 0x0000379eu, 0x000300f7u, 0x000037a0u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x000037a1u, 0x000037a2u, 0x000200f8u, 0x000037a2u, 0x0003003eu, 0x00003774u, 0x0000379eu, 0x00060050u, 0x0000030cu, 0x000037c0u, 0x0000379eu, 0x0000379eu, 0x0000379eu, 0x000500c2u, 0x0000030cu, 0x000037c1u, 0x000037c0u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000037c3u, 0x000037c1u, 0x0000f37cu, 0x0003003eu, 0x000037bcu, 0x000037c3u, 0x000500c4u, 0x0000030cu, 0x000037c6u, 0x000037c3u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000037c9u, 0x000037c3u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000037cau, 0x000037c6u, 0x000037c9u, 0x0003003eu, 0x000037bcu, 0x000037cau, 0x000500c7u, 0x00000006u, 0x000037ccu, 0x0000379eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000037cdu, 0x000037ccu, 0x000006c3u, 0x0003003eu, 0x000037bdu, 0x000037cdu, 0x00040071u, 0x000004bau, 0x000037cfu, 0x000037cau, 0x0004007cu, 0x000004b6u, 0x000037d0u, 0x000037cfu, 0x00040071u, 0x00000011u, 0x000037d2u, 0x000037cdu, 0x0004007cu, 0x00000012u, 0x000037d3u, 0x000037d2u, 0x00050051u, 0x00000012u, 0x000037d4u, 0x000037d0u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000037d5u, 0x000037d0u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000037d6u, 0x000037d0u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000037d7u, 0x000037d4u, 0x000037d5u, 0x000037d6u, 0x000037d3u, 0x0003003eu, 0x000037beu, 0x000037d7u, 0x0003003eu, 0x00003772u, 0x000037d7u, 0x000200f9u, 0x000037a0u, 0x000200f8u, 0x000037a1u, 0x0003003eu, 0x00003773u, 0x0000379eu, 0x000500c2u, 0x00000006u, 0x000037acu, 0x0000379eu, 0x0000025du, 0x0003003eu, 0x000037a8u, 0x000037acu, 0x000500c7u, 0x00000006u, 0x000037aeu, 0x0000379eu, 0x000006c3u, 0x0003003eu, 0x000037a9u, 0x000037aeu, 0x00040071u, 0x00000011u, 0x000037b0u, 0x000037acu, 0x0004007cu, 0x00000012u, 0x000037b1u, 0x000037b0u, 0x00040071u, 0x00000011u, 0x000037b9u, 0x000037aeu, 0x0004007cu, 0x00000012u, 0x000037bau, 0x000037b9u, 0x00070050u, 0x00000013u, 0x000037bbu, 0x000037b1u, 0x000037b1u, 0x000037b1u, 0x000037bau, 0x0003003eu, 0x000037aau, 0x000037bbu, 0x0003003eu, 0x00003772u, 0x000037bbu, 0x000200f9u, 0x000037a0u, 0x000200f8u, 0x000037a0u, 0x000700f5u, 0x00000013u, 0x00008599u, 0x000037bbu, 0x000037a1u, 0x000037d7u, 0x000037a2u, 0x0003003eu, 0x00003775u, 0x00008599u, 0x0003003eu, 0x00002ce7u, 0x00008599u, 0x000200f9u, 0x00002ef9u, 0x000200f8u, 0x00002ef9u, 0x000700f5u, 0x00000013u, 0x000088eeu, 0x000088b3u, 0x00002ee4u, 0x00008599u, 0x000037a0u, 0x000200f9u, 0x00002e73u, 0x000200f8u, 0x00002e75u, 0x0004007cu, 0x000000b0u, 0x00002ea3u, 0x000083b3u, 0x00040071u, 0x00000006u, 0x00002ea6u, 0x00002ca4u, 0x000600a9u, 0x00000008u, 0x00002ea8u, 0x00002e55u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00002ea9u, 0x00002ea8u, 0x0003003eu, 0x00006e8eu, 0x00002c9cu, 0x0003003eu, 0x00006e8fu, 0x00002c9eu, 0x0003003eu, 0x00002cd1u, 0x000021b2u, 0x0003003eu, 0x00002cd2u, 0x00002ea3u, 0x0003003eu, 0x00002cd3u, 0x00002ea6u, 0x0003003eu, 0x00002cd4u, 0x00002ea9u, 0x0003003eu, 0x00002cd5u, 0x00002e6eu, 0x0003003eu, 0x00002cd6u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00003459u, 0x00002cd2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000345au, 0x00003459u, 0x00050084u, 0x00000006u, 0x0000345bu, 0x00002c9eu, 0x0000345au, 0x00050080u, 0x00000006u, 0x0000345cu, 0x00002c9cu, 0x0000345bu, 0x0003003eu, 0x0000344cu, 0x0000345cu, 0x00050041u, 0x00000007u, 0x0000345du, 0x00002cd2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000345eu, 0x0000345du, 0x000500c2u, 0x00000006u, 0x0000345fu, 0x0000345eu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003461u, 0x0000345cu, 0x0000345fu, 0x0003003eu, 0x0000344cu, 0x00003461u, 0x000500c7u, 0x00000006u, 0x00003463u, 0x00003461u, 0x00000f1du, 0x0003003eu, 0x0000344cu, 0x00003463u, 0x0004003du, 0x00000006u, 0x00003465u, 0x0000345du, 0x000400c8u, 0x00000006u, 0x00003466u, 0x00003465u, 0x000500c7u, 0x00000006u, 0x00003467u, 0x00003466u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003468u, 0x00003467u, 0x00000704u, 0x0003003eu, 0x0000344du, 0x00003468u, 0x0003003eu, 0x0000344eu, 0x00003463u, 0x0004003du, 0x00000006u, 0x0000346bu, 0x00003459u, 0x000500c7u, 0x00000006u, 0x0000346cu, 0x0000346bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000346du, 0x0000346cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000346fu, 0x00003463u, 0x0000346du, 0x0003003eu, 0x0000344eu, 0x0000346fu, 0x000500c6u, 0x00000006u, 0x00003471u, 0x0000346fu, 0x00000464u, 0x0003003eu, 0x0000344eu, 0x00003471u, 0x00080041u, 0x00000671u, 0x00003474u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003471u, 0x0004003du, 0x0000000fu, 0x00003475u, 0x00003474u, 0x00040071u, 0x00000006u, 0x00003476u, 0x00003475u, 0x0003003eu, 0x0000344fu, 0x00003476u, 0x000500c2u, 0x00000006u, 0x00003479u, 0x00003476u, 0x00003468u, 0x000500c7u, 0x00000006u, 0x0000347au, 0x00003479u, 0x00000e88u, 0x0003003eu, 0x0000344fu, 0x0000347au, 0x000500c4u, 0x00000006u, 0x0000347cu, 0x00002ea6u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000347eu, 0x0000347au, 0x0000347cu, 0x0003003eu, 0x0000344fu, 0x0000347eu, 0x000500c4u, 0x00000006u, 0x00003480u, 0x0000347eu, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003482u, 0x00003480u, 0x00002ea9u, 0x0003003eu, 0x00003450u, 0x00003482u, 0x000500c6u, 0x00000006u, 0x00003485u, 0x00003482u, 0x00002e6eu, 0x0003003eu, 0x00003450u, 0x00003485u, 0x000500c5u, 0x00000006u, 0x00003488u, 0x00000f4eu, 0x00003485u, 0x00080041u, 0x00000692u, 0x00003489u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003488u, 0x0004003du, 0x00000011u, 0x0000348au, 0x00003489u, 0x00040071u, 0x00000006u, 0x0000348bu, 0x0000348au, 0x0003003eu, 0x0000344fu, 0x0000348bu, 0x000300f7u, 0x0000348du, 0x00000000u, 0x000400fau, 0x000021c6u, 0x0000348eu, 0x0000348fu, 0x000200f8u, 0x0000348fu, 0x0003003eu, 0x00003453u, 0x0000348bu, 0x00060050u, 0x0000030cu, 0x000034adu, 0x0000348bu, 0x0000348bu, 0x0000348bu, 0x000500c2u, 0x0000030cu, 0x000034aeu, 0x000034adu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000034b0u, 0x000034aeu, 0x0000f37cu, 0x0003003eu, 0x000034a9u, 0x000034b0u, 0x000500c4u, 0x0000030cu, 0x000034b3u, 0x000034b0u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000034b6u, 0x000034b0u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000034b7u, 0x000034b3u, 0x000034b6u, 0x0003003eu, 0x000034a9u, 0x000034b7u, 0x000500c7u, 0x00000006u, 0x000034b9u, 0x0000348bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000034bau, 0x000034b9u, 0x000006c3u, 0x0003003eu, 0x000034aau, 0x000034bau, 0x00040071u, 0x000004bau, 0x000034bcu, 0x000034b7u, 0x0004007cu, 0x000004b6u, 0x000034bdu, 0x000034bcu, 0x00040071u, 0x00000011u, 0x000034bfu, 0x000034bau, 0x0004007cu, 0x00000012u, 0x000034c0u, 0x000034bfu, 0x00050051u, 0x00000012u, 0x000034c1u, 0x000034bdu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000034c2u, 0x000034bdu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000034c3u, 0x000034bdu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000034c4u, 0x000034c1u, 0x000034c2u, 0x000034c3u, 0x000034c0u, 0x0003003eu, 0x000034abu, 0x000034c4u, 0x0003003eu, 0x00003451u, 0x000034c4u, 0x000200f9u, 0x0000348du, 0x000200f8u, 0x0000348eu, 0x0003003eu, 0x00003452u, 0x0000348bu, 0x000500c2u, 0x00000006u, 0x00003499u, 0x0000348bu, 0x0000025du, 0x0003003eu, 0x00003495u, 0x00003499u, 0x000500c7u, 0x00000006u, 0x0000349bu, 0x0000348bu, 0x000006c3u, 0x0003003eu, 0x00003496u, 0x0000349bu, 0x00040071u, 0x00000011u, 0x0000349du, 0x00003499u, 0x0004007cu, 0x00000012u, 0x0000349eu, 0x0000349du, 0x00040071u, 0x00000011u, 0x000034a6u, 0x0000349bu, 0x0004007cu, 0x00000012u, 0x000034a7u, 0x000034a6u, 0x00070050u, 0x00000013u, 0x000034a8u, 0x0000349eu, 0x0000349eu, 0x0000349eu, 0x000034a7u, 0x0003003eu, 0x00003497u, 0x000034a8u, 0x0003003eu, 0x00003451u, 0x000034a8u, 0x000200f9u, 0x0000348du, 0x000200f8u, 0x0000348du, 0x000700f5u, 0x00000013u, 0x0000859au, 0x000034a8u, 0x0000348eu, 0x000034c4u, 0x0000348fu, 0x0003003eu, 0x00003454u, 0x0000859au, 0x0003003eu, 0x00002ccfu, 0x0000859au, 0x000300f7u, 0x00002eb0u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002eb1u, 0x00002eb0u, 0x000200f8u, 0x00002eb1u, 0x00050050u, 0x000000efu, 0x00002eb4u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002eb5u, 0x00002eb4u, 0x0003003eu, 0x00006e92u, 0x00002c9cu, 0x0003003eu, 0x00006e93u, 0x00002c9eu, 0x0003003eu, 0x00002cd9u, 0x000021b2u, 0x0003003eu, 0x00002cdau, 0x00002eb5u, 0x0003003eu, 0x00002cdbu, 0x00002ea6u, 0x0003003eu, 0x00002cdcu, 0x0000045cu, 0x0003003eu, 0x00002cddu, 0x00002e6eu, 0x0003003eu, 0x00002cdeu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x000034d2u, 0x00002cdau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000034d3u, 0x000034d2u, 0x00050084u, 0x00000006u, 0x000034d4u, 0x00002c9eu, 0x000034d3u, 0x00050080u, 0x00000006u, 0x000034d5u, 0x00002c9cu, 0x000034d4u, 0x0003003eu, 0x000034c5u, 0x000034d5u, 0x00050041u, 0x00000007u, 0x000034d6u, 0x00002cdau, 0x0000032du, 0x0004003du, 0x00000006u, 0x000034d7u, 0x000034d6u, 0x000500c2u, 0x00000006u, 0x000034d8u, 0x000034d7u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000034dau, 0x000034d5u, 0x000034d8u, 0x0003003eu, 0x000034c5u, 0x000034dau, 0x000500c7u, 0x00000006u, 0x000034dcu, 0x000034dau, 0x00000f1du, 0x0003003eu, 0x000034c5u, 0x000034dcu, 0x0004003du, 0x00000006u, 0x000034deu, 0x000034d6u, 0x000400c8u, 0x00000006u, 0x000034dfu, 0x000034deu, 0x000500c7u, 0x00000006u, 0x000034e0u, 0x000034dfu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000034e1u, 0x000034e0u, 0x00000704u, 0x0003003eu, 0x000034c6u, 0x000034e1u, 0x0003003eu, 0x000034c7u, 0x000034dcu, 0x0004003du, 0x00000006u, 0x000034e4u, 0x000034d2u, 0x000500c7u, 0x00000006u, 0x000034e5u, 0x000034e4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000034e6u, 0x000034e5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000034e8u, 0x000034dcu, 0x000034e6u, 0x0003003eu, 0x000034c7u, 0x000034e8u, 0x000500c6u, 0x00000006u, 0x000034eau, 0x000034e8u, 0x00000464u, 0x0003003eu, 0x000034c7u, 0x000034eau, 0x00080041u, 0x00000671u, 0x000034edu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000034eau, 0x0004003du, 0x0000000fu, 0x000034eeu, 0x000034edu, 0x00040071u, 0x00000006u, 0x000034efu, 0x000034eeu, 0x0003003eu, 0x000034c8u, 0x000034efu, 0x000500c2u, 0x00000006u, 0x000034f2u, 0x000034efu, 0x000034e1u, 0x000500c7u, 0x00000006u, 0x000034f3u, 0x000034f2u, 0x00000e88u, 0x0003003eu, 0x000034c8u, 0x000034f3u, 0x000500c5u, 0x00000006u, 0x000034f7u, 0x000034f3u, 0x0000347cu, 0x0003003eu, 0x000034c8u, 0x000034f7u, 0x000500c4u, 0x00000006u, 0x000034f9u, 0x000034f7u, 0x0000022du, 0x00050080u, 0x00000006u, 0x000034fbu, 0x000034f9u, 0x0000045cu, 0x0003003eu, 0x000034c9u, 0x000034fbu, 0x000500c6u, 0x00000006u, 0x000034feu, 0x000034fbu, 0x00002e6eu, 0x0003003eu, 0x000034c9u, 0x000034feu, 0x000500c5u, 0x00000006u, 0x00003501u, 0x00000f4eu, 0x000034feu, 0x00080041u, 0x00000692u, 0x00003502u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003501u, 0x0004003du, 0x00000011u, 0x00003503u, 0x00003502u, 0x00040071u, 0x00000006u, 0x00003504u, 0x00003503u, 0x0003003eu, 0x000034c8u, 0x00003504u, 0x000300f7u, 0x00003506u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00003507u, 0x00003508u, 0x000200f8u, 0x00003508u, 0x0003003eu, 0x000034ccu, 0x00003504u, 0x00060050u, 0x0000030cu, 0x00003526u, 0x00003504u, 0x00003504u, 0x00003504u, 0x000500c2u, 0x0000030cu, 0x00003527u, 0x00003526u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00003529u, 0x00003527u, 0x0000f37cu, 0x0003003eu, 0x00003522u, 0x00003529u, 0x000500c4u, 0x0000030cu, 0x0000352cu, 0x00003529u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000352fu, 0x00003529u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00003530u, 0x0000352cu, 0x0000352fu, 0x0003003eu, 0x00003522u, 0x00003530u, 0x000500c7u, 0x00000006u, 0x00003532u, 0x00003504u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003533u, 0x00003532u, 0x000006c3u, 0x0003003eu, 0x00003523u, 0x00003533u, 0x00040071u, 0x000004bau, 0x00003535u, 0x00003530u, 0x0004007cu, 0x000004b6u, 0x00003536u, 0x00003535u, 0x00040071u, 0x00000011u, 0x00003538u, 0x00003533u, 0x0004007cu, 0x00000012u, 0x00003539u, 0x00003538u, 0x00050051u, 0x00000012u, 0x0000353au, 0x00003536u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000353bu, 0x00003536u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000353cu, 0x00003536u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000353du, 0x0000353au, 0x0000353bu, 0x0000353cu, 0x00003539u, 0x0003003eu, 0x00003524u, 0x0000353du, 0x0003003eu, 0x000034cau, 0x0000353du, 0x000200f9u, 0x00003506u, 0x000200f8u, 0x00003507u, 0x0003003eu, 0x000034cbu, 0x00003504u, 0x000500c2u, 0x00000006u, 0x00003512u, 0x00003504u, 0x0000025du, 0x0003003eu, 0x0000350eu, 0x00003512u, 0x000500c7u, 0x00000006u, 0x00003514u, 0x00003504u, 0x000006c3u, 0x0003003eu, 0x0000350fu, 0x00003514u, 0x00040071u, 0x00000011u, 0x00003516u, 0x00003512u, 0x0004007cu, 0x00000012u, 0x00003517u, 0x00003516u, 0x00040071u, 0x00000011u, 0x0000351fu, 0x00003514u, 0x0004007cu, 0x00000012u, 0x00003520u, 0x0000351fu, 0x00070050u, 0x00000013u, 0x00003521u, 0x00003517u, 0x00003517u, 0x00003517u, 0x00003520u, 0x0003003eu, 0x00003510u, 0x00003521u, 0x0003003eu, 0x000034cau, 0x00003521u, 0x000200f9u, 0x00003506u, 0x000200f8u, 0x00003506u, 0x000700f5u, 0x00000013u, 0x000085afu, 0x00003521u, 0x00003507u, 0x0000353du, 0x00003508u, 0x0003003eu, 0x000034cdu, 0x000085afu, 0x0003003eu, 0x00002cd7u, 0x000085afu, 0x00050050u, 0x000000efu, 0x00002ec0u, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002ec1u, 0x00002ec0u, 0x0003003eu, 0x00006e96u, 0x00002c9cu, 0x0003003eu, 0x00006e97u, 0x00002c9eu, 0x0003003eu, 0x00002ce1u, 0x000021b2u, 0x0003003eu, 0x00002ce2u, 0x00002ec1u, 0x0003003eu, 0x00002ce3u, 0x00002ea6u, 0x0003003eu, 0x00002ce4u, 0x00000386u, 0x0003003eu, 0x00002ce5u, 0x00002e6eu, 0x0003003eu, 0x00002ce6u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x0000354bu, 0x00002ce2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000354cu, 0x0000354bu, 0x00050084u, 0x00000006u, 0x0000354du, 0x00002c9eu, 0x0000354cu, 0x00050080u, 0x00000006u, 0x0000354eu, 0x00002c9cu, 0x0000354du, 0x0003003eu, 0x0000353eu, 0x0000354eu, 0x00050041u, 0x00000007u, 0x0000354fu, 0x00002ce2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003550u, 0x0000354fu, 0x000500c2u, 0x00000006u, 0x00003551u, 0x00003550u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003553u, 0x0000354eu, 0x00003551u, 0x0003003eu, 0x0000353eu, 0x00003553u, 0x000500c7u, 0x00000006u, 0x00003555u, 0x00003553u, 0x00000f1du, 0x0003003eu, 0x0000353eu, 0x00003555u, 0x0004003du, 0x00000006u, 0x00003557u, 0x0000354fu, 0x000400c8u, 0x00000006u, 0x00003558u, 0x00003557u, 0x000500c7u, 0x00000006u, 0x00003559u, 0x00003558u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000355au, 0x00003559u, 0x00000704u, 0x0003003eu, 0x0000353fu, 0x0000355au, 0x0003003eu, 0x00003540u, 0x00003555u, 0x0004003du, 0x00000006u, 0x0000355du, 0x0000354bu, 0x000500c7u, 0x00000006u, 0x0000355eu, 0x0000355du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000355fu, 0x0000355eu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003561u, 0x00003555u, 0x0000355fu, 0x0003003eu, 0x00003540u, 0x00003561u, 0x000500c6u, 0x00000006u, 0x00003563u, 0x00003561u, 0x00000464u, 0x0003003eu, 0x00003540u, 0x00003563u, 0x00080041u, 0x00000671u, 0x00003566u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003563u, 0x0004003du, 0x0000000fu, 0x00003567u, 0x00003566u, 0x00040071u, 0x00000006u, 0x00003568u, 0x00003567u, 0x0003003eu, 0x00003541u, 0x00003568u, 0x000500c2u, 0x00000006u, 0x0000356bu, 0x00003568u, 0x0000355au, 0x000500c7u, 0x00000006u, 0x0000356cu, 0x0000356bu, 0x00000e88u, 0x0003003eu, 0x00003541u, 0x0000356cu, 0x000500c5u, 0x00000006u, 0x00003570u, 0x0000356cu, 0x0000347cu, 0x0003003eu, 0x00003541u, 0x00003570u, 0x000500c4u, 0x00000006u, 0x00003572u, 0x00003570u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003574u, 0x00003572u, 0x00000386u, 0x0003003eu, 0x00003542u, 0x00003574u, 0x000500c6u, 0x00000006u, 0x00003577u, 0x00003574u, 0x00002e6eu, 0x0003003eu, 0x00003542u, 0x00003577u, 0x000500c5u, 0x00000006u, 0x0000357au, 0x00000f4eu, 0x00003577u, 0x00080041u, 0x00000692u, 0x0000357bu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000357au, 0x0004003du, 0x00000011u, 0x0000357cu, 0x0000357bu, 0x00040071u, 0x00000006u, 0x0000357du, 0x0000357cu, 0x0003003eu, 0x00003541u, 0x0000357du, 0x000300f7u, 0x0000357fu, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00003580u, 0x00003581u, 0x000200f8u, 0x00003581u, 0x0003003eu, 0x00003545u, 0x0000357du, 0x00060050u, 0x0000030cu, 0x0000359fu, 0x0000357du, 0x0000357du, 0x0000357du, 0x000500c2u, 0x0000030cu, 0x000035a0u, 0x0000359fu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000035a2u, 0x000035a0u, 0x0000f37cu, 0x0003003eu, 0x0000359bu, 0x000035a2u, 0x000500c4u, 0x0000030cu, 0x000035a5u, 0x000035a2u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000035a8u, 0x000035a2u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000035a9u, 0x000035a5u, 0x000035a8u, 0x0003003eu, 0x0000359bu, 0x000035a9u, 0x000500c7u, 0x00000006u, 0x000035abu, 0x0000357du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000035acu, 0x000035abu, 0x000006c3u, 0x0003003eu, 0x0000359cu, 0x000035acu, 0x00040071u, 0x000004bau, 0x000035aeu, 0x000035a9u, 0x0004007cu, 0x000004b6u, 0x000035afu, 0x000035aeu, 0x00040071u, 0x00000011u, 0x000035b1u, 0x000035acu, 0x0004007cu, 0x00000012u, 0x000035b2u, 0x000035b1u, 0x00050051u, 0x00000012u, 0x000035b3u, 0x000035afu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000035b4u, 0x000035afu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000035b5u, 0x000035afu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000035b6u, 0x000035b3u, 0x000035b4u, 0x000035b5u, 0x000035b2u, 0x0003003eu, 0x0000359du, 0x000035b6u, 0x0003003eu, 0x00003543u, 0x000035b6u, 0x000200f9u, 0x0000357fu, 0x000200f8u, 0x00003580u, 0x0003003eu, 0x00003544u, 0x0000357du, 0x000500c2u, 0x00000006u, 0x0000358bu, 0x0000357du, 0x0000025du, 0x0003003eu, 0x00003587u, 0x0000358bu, 0x000500c7u, 0x00000006u, 0x0000358du, 0x0000357du, 0x000006c3u, 0x0003003eu, 0x00003588u, 0x0000358du, 0x00040071u, 0x00000011u, 0x0000358fu, 0x0000358bu, 0x0004007cu, 0x00000012u, 0x00003590u, 0x0000358fu, 0x00040071u, 0x00000011u, 0x00003598u, 0x0000358du, 0x0004007cu, 0x00000012u, 0x00003599u, 0x00003598u, 0x00070050u, 0x00000013u, 0x0000359au, 0x00003590u, 0x00003590u, 0x00003590u, 0x00003599u, 0x0003003eu, 0x00003589u, 0x0000359au, 0x0003003eu, 0x00003543u, 0x0000359au, 0x000200f9u, 0x0000357fu, 0x000200f8u, 0x0000357fu, 0x000700f5u, 0x00000013u, 0x000085c5u, 0x0000359au, 0x00003580u, 0x000035b6u, 0x00003581u, 0x0003003eu, 0x00003546u, 0x000085c5u, 0x0003003eu, 0x00002cdfu, 0x000085c5u, 0x000200f9u, 0x00002eb0u, 0x000200f8u, 0x00002eb0u, 0x000700f5u, 0x00000013u, 0x0000886fu, 0x00008839u, 0x0000348du, 0x000085c5u, 0x0000357fu, 0x000700f5u, 0x00000013u, 0x00008775u, 0x0000873du, 0x0000348du, 0x000085afu, 0x0000357fu, 0x000300f7u, 0x00002ecbu, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002eccu, 0x00002ecbu, 0x000200f8u, 0x00002eccu, 0x00050050u, 0x000000efu, 0x00002ecfu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002ed0u, 0x00002ecfu, 0x0003003eu, 0x00006e9au, 0x00002c9cu, 0x0003003eu, 0x00006e9bu, 0x00002c9eu, 0x0003003eu, 0x00002ce9u, 0x000021b2u, 0x0003003eu, 0x00002ceau, 0x00002ed0u, 0x0003003eu, 0x00002cebu, 0x00002ea6u, 0x0003003eu, 0x00002cecu, 0x00000464u, 0x0003003eu, 0x00002cedu, 0x00002e6eu, 0x0003003eu, 0x00002ceeu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x000035c4u, 0x00002ceau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000035c5u, 0x000035c4u, 0x00050084u, 0x00000006u, 0x000035c6u, 0x00002c9eu, 0x000035c5u, 0x00050080u, 0x00000006u, 0x000035c7u, 0x00002c9cu, 0x000035c6u, 0x0003003eu, 0x000035b7u, 0x000035c7u, 0x00050041u, 0x00000007u, 0x000035c8u, 0x00002ceau, 0x0000032du, 0x0004003du, 0x00000006u, 0x000035c9u, 0x000035c8u, 0x000500c2u, 0x00000006u, 0x000035cau, 0x000035c9u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000035ccu, 0x000035c7u, 0x000035cau, 0x0003003eu, 0x000035b7u, 0x000035ccu, 0x000500c7u, 0x00000006u, 0x000035ceu, 0x000035ccu, 0x00000f1du, 0x0003003eu, 0x000035b7u, 0x000035ceu, 0x0004003du, 0x00000006u, 0x000035d0u, 0x000035c8u, 0x000400c8u, 0x00000006u, 0x000035d1u, 0x000035d0u, 0x000500c7u, 0x00000006u, 0x000035d2u, 0x000035d1u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000035d3u, 0x000035d2u, 0x00000704u, 0x0003003eu, 0x000035b8u, 0x000035d3u, 0x0003003eu, 0x000035b9u, 0x000035ceu, 0x0004003du, 0x00000006u, 0x000035d6u, 0x000035c4u, 0x000500c7u, 0x00000006u, 0x000035d7u, 0x000035d6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000035d8u, 0x000035d7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000035dau, 0x000035ceu, 0x000035d8u, 0x0003003eu, 0x000035b9u, 0x000035dau, 0x000500c6u, 0x00000006u, 0x000035dcu, 0x000035dau, 0x00000464u, 0x0003003eu, 0x000035b9u, 0x000035dcu, 0x00080041u, 0x00000671u, 0x000035dfu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000035dcu, 0x0004003du, 0x0000000fu, 0x000035e0u, 0x000035dfu, 0x00040071u, 0x00000006u, 0x000035e1u, 0x000035e0u, 0x0003003eu, 0x000035bau, 0x000035e1u, 0x000500c2u, 0x00000006u, 0x000035e4u, 0x000035e1u, 0x000035d3u, 0x000500c7u, 0x00000006u, 0x000035e5u, 0x000035e4u, 0x00000e88u, 0x0003003eu, 0x000035bau, 0x000035e5u, 0x000500c5u, 0x00000006u, 0x000035e9u, 0x000035e5u, 0x0000347cu, 0x0003003eu, 0x000035bau, 0x000035e9u, 0x000500c4u, 0x00000006u, 0x000035ebu, 0x000035e9u, 0x0000022du, 0x00050080u, 0x00000006u, 0x000035edu, 0x000035ebu, 0x00000464u, 0x0003003eu, 0x000035bbu, 0x000035edu, 0x000500c6u, 0x00000006u, 0x000035f0u, 0x000035edu, 0x00002e6eu, 0x0003003eu, 0x000035bbu, 0x000035f0u, 0x000500c5u, 0x00000006u, 0x000035f3u, 0x00000f4eu, 0x000035f0u, 0x00080041u, 0x00000692u, 0x000035f4u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000035f3u, 0x0004003du, 0x00000011u, 0x000035f5u, 0x000035f4u, 0x00040071u, 0x00000006u, 0x000035f6u, 0x000035f5u, 0x0003003eu, 0x000035bau, 0x000035f6u, 0x000300f7u, 0x000035f8u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x000035f9u, 0x000035fau, 0x000200f8u, 0x000035fau, 0x0003003eu, 0x000035beu, 0x000035f6u, 0x00060050u, 0x0000030cu, 0x00003618u, 0x000035f6u, 0x000035f6u, 0x000035f6u, 0x000500c2u, 0x0000030cu, 0x00003619u, 0x00003618u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x0000361bu, 0x00003619u, 0x0000f37cu, 0x0003003eu, 0x00003614u, 0x0000361bu, 0x000500c4u, 0x0000030cu, 0x0000361eu, 0x0000361bu, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00003621u, 0x0000361bu, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00003622u, 0x0000361eu, 0x00003621u, 0x0003003eu, 0x00003614u, 0x00003622u, 0x000500c7u, 0x00000006u, 0x00003624u, 0x000035f6u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003625u, 0x00003624u, 0x000006c3u, 0x0003003eu, 0x00003615u, 0x00003625u, 0x00040071u, 0x000004bau, 0x00003627u, 0x00003622u, 0x0004007cu, 0x000004b6u, 0x00003628u, 0x00003627u, 0x00040071u, 0x00000011u, 0x0000362au, 0x00003625u, 0x0004007cu, 0x00000012u, 0x0000362bu, 0x0000362au, 0x00050051u, 0x00000012u, 0x0000362cu, 0x00003628u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000362du, 0x00003628u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000362eu, 0x00003628u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000362fu, 0x0000362cu, 0x0000362du, 0x0000362eu, 0x0000362bu, 0x0003003eu, 0x00003616u, 0x0000362fu, 0x0003003eu, 0x000035bcu, 0x0000362fu, 0x000200f9u, 0x000035f8u, 0x000200f8u, 0x000035f9u, 0x0003003eu, 0x000035bdu, 0x000035f6u, 0x000500c2u, 0x00000006u, 0x00003604u, 0x000035f6u, 0x0000025du, 0x0003003eu, 0x00003600u, 0x00003604u, 0x000500c7u, 0x00000006u, 0x00003606u, 0x000035f6u, 0x000006c3u, 0x0003003eu, 0x00003601u, 0x00003606u, 0x00040071u, 0x00000011u, 0x00003608u, 0x00003604u, 0x0004007cu, 0x00000012u, 0x00003609u, 0x00003608u, 0x00040071u, 0x00000011u, 0x00003611u, 0x00003606u, 0x0004007cu, 0x00000012u, 0x00003612u, 0x00003611u, 0x00070050u, 0x00000013u, 0x00003613u, 0x00003609u, 0x00003609u, 0x00003609u, 0x00003612u, 0x0003003eu, 0x00003602u, 0x00003613u, 0x0003003eu, 0x000035bcu, 0x00003613u, 0x000200f9u, 0x000035f8u, 0x000200f8u, 0x000035f8u, 0x000700f5u, 0x00000013u, 0x000085f1u, 0x00003613u, 0x000035f9u, 0x0000362fu, 0x000035fau, 0x0003003eu, 0x000035bfu, 0x000085f1u, 0x0003003eu, 0x00002ce7u, 0x000085f1u, 0x000200f9u, 0x00002ecbu, 0x000200f8u, 0x00002ecbu, 0x000700f5u, 0x00000013u, 0x000088e9u, 0x000088b3u, 0x00002eb0u, 0x000085f1u, 0x000035f8u, 0x000200f9u, 0x00002e73u, 0x000200f8u, 0x00002e74u, 0x0004007cu, 0x000000b0u, 0x00002e78u, 0x000083b3u, 0x000600a9u, 0x00000008u, 0x00002e7au, 0x00002e55u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00002e7bu, 0x00002e7au, 0x0003003eu, 0x00006eaeu, 0x00002c9cu, 0x0003003eu, 0x00006eafu, 0x00002c9eu, 0x0003003eu, 0x00002d08u, 0x000021b2u, 0x0003003eu, 0x00002d09u, 0x00002e78u, 0x0003003eu, 0x00002d0au, 0x00002e7bu, 0x0003003eu, 0x00002d0bu, 0x00002e6eu, 0x0003003eu, 0x00002d0cu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x000032a4u, 0x00002d09u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000032a5u, 0x000032a4u, 0x00050084u, 0x00000006u, 0x000032a6u, 0x00002c9eu, 0x000032a5u, 0x00050080u, 0x00000006u, 0x000032a7u, 0x00002c9cu, 0x000032a6u, 0x0003003eu, 0x00003298u, 0x000032a7u, 0x00050041u, 0x00000007u, 0x000032a8u, 0x00002d09u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000032a9u, 0x000032a8u, 0x00050084u, 0x00000006u, 0x000032aau, 0x000032a9u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000032acu, 0x000032a7u, 0x000032aau, 0x0003003eu, 0x00003298u, 0x000032acu, 0x000500c7u, 0x00000006u, 0x000032aeu, 0x000032acu, 0x00000f1du, 0x0003003eu, 0x00003298u, 0x000032aeu, 0x000500c2u, 0x00000006u, 0x000032b0u, 0x000032aeu, 0x0000022au, 0x0003003eu, 0x00003299u, 0x000032b0u, 0x0004003du, 0x00000006u, 0x000032b2u, 0x000032a4u, 0x000500c7u, 0x00000006u, 0x000032b3u, 0x000032b2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000032b4u, 0x000032b3u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000032b6u, 0x000032b0u, 0x000032b4u, 0x0003003eu, 0x00003299u, 0x000032b6u, 0x000500c6u, 0x00000006u, 0x000032b8u, 0x000032b6u, 0x0000045cu, 0x0003003eu, 0x00003299u, 0x000032b8u, 0x00080041u, 0x00000692u, 0x000032bbu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000032b8u, 0x0004003du, 0x00000011u, 0x000032bcu, 0x000032bbu, 0x00040071u, 0x00000006u, 0x000032bdu, 0x000032bcu, 0x0003003eu, 0x0000329au, 0x000032bdu, 0x000500c2u, 0x00000006u, 0x000032bfu, 0x000032bdu, 0x00000239u, 0x000500c7u, 0x00000006u, 0x000032c0u, 0x000032bfu, 0x00000feeu, 0x00050080u, 0x00000006u, 0x000032c2u, 0x000032c0u, 0x00002e7bu, 0x0003003eu, 0x0000329bu, 0x000032c2u, 0x000500c6u, 0x00000006u, 0x000032c5u, 0x000032c2u, 0x00002e6eu, 0x0003003eu, 0x0000329bu, 0x000032c5u, 0x000500c5u, 0x00000006u, 0x000032c8u, 0x00000f4eu, 0x000032c5u, 0x00080041u, 0x00000692u, 0x000032c9u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000032c8u, 0x0004003du, 0x00000011u, 0x000032cau, 0x000032c9u, 0x00040071u, 0x00000006u, 0x000032cbu, 0x000032cau, 0x0003003eu, 0x0000329au, 0x000032cbu, 0x000300f7u, 0x000032cdu, 0x00000000u, 0x000400fau, 0x000021c6u, 0x000032ceu, 0x000032cfu, 0x000200f8u, 0x000032cfu, 0x0003003eu, 0x0000329eu, 0x000032cbu, 0x00060050u, 0x0000030cu, 0x000032edu, 0x000032cbu, 0x000032cbu, 0x000032cbu, 0x000500c2u, 0x0000030cu, 0x000032eeu, 0x000032edu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000032f0u, 0x000032eeu, 0x0000f37cu, 0x0003003eu, 0x000032e9u, 0x000032f0u, 0x000500c4u, 0x0000030cu, 0x000032f3u, 0x000032f0u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000032f6u, 0x000032f0u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000032f7u, 0x000032f3u, 0x000032f6u, 0x0003003eu, 0x000032e9u, 0x000032f7u, 0x000500c7u, 0x00000006u, 0x000032f9u, 0x000032cbu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000032fau, 0x000032f9u, 0x000006c3u, 0x0003003eu, 0x000032eau, 0x000032fau, 0x00040071u, 0x000004bau, 0x000032fcu, 0x000032f7u, 0x0004007cu, 0x000004b6u, 0x000032fdu, 0x000032fcu, 0x00040071u, 0x00000011u, 0x000032ffu, 0x000032fau, 0x0004007cu, 0x00000012u, 0x00003300u, 0x000032ffu, 0x00050051u, 0x00000012u, 0x00003301u, 0x000032fdu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003302u, 0x000032fdu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003303u, 0x000032fdu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003304u, 0x00003301u, 0x00003302u, 0x00003303u, 0x00003300u, 0x0003003eu, 0x000032ebu, 0x00003304u, 0x0003003eu, 0x0000329cu, 0x00003304u, 0x000200f9u, 0x000032cdu, 0x000200f8u, 0x000032ceu, 0x0003003eu, 0x0000329du, 0x000032cbu, 0x000500c2u, 0x00000006u, 0x000032d9u, 0x000032cbu, 0x0000025du, 0x0003003eu, 0x000032d5u, 0x000032d9u, 0x000500c7u, 0x00000006u, 0x000032dbu, 0x000032cbu, 0x000006c3u, 0x0003003eu, 0x000032d6u, 0x000032dbu, 0x00040071u, 0x00000011u, 0x000032ddu, 0x000032d9u, 0x0004007cu, 0x00000012u, 0x000032deu, 0x000032ddu, 0x00040071u, 0x00000011u, 0x000032e6u, 0x000032dbu, 0x0004007cu, 0x00000012u, 0x000032e7u, 0x000032e6u, 0x00070050u, 0x00000013u, 0x000032e8u, 0x000032deu, 0x000032deu, 0x000032deu, 0x000032e7u, 0x0003003eu, 0x000032d7u, 0x000032e8u, 0x0003003eu, 0x0000329cu, 0x000032e8u, 0x000200f9u, 0x000032cdu, 0x000200f8u, 0x000032cdu, 0x000700f5u, 0x00000013u, 0x000085f2u, 0x000032e8u, 0x000032ceu, 0x00003304u, 0x000032cfu, 0x0003003eu, 0x0000329fu, 0x000085f2u, 0x0003003eu, 0x00002ccfu, 0x000085f2u, 0x000300f7u, 0x00002e82u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00002e83u, 0x00002e82u, 0x000200f8u, 0x00002e83u, 0x00050050u, 0x000000efu, 0x00002e86u, 0x00008368u, 0x00002e40u, 0x0004007cu, 0x000000b0u, 0x00002e87u, 0x00002e86u, 0x0003003eu, 0x00006eb2u, 0x00002c9cu, 0x0003003eu, 0x00006eb3u, 0x00002c9eu, 0x0003003eu, 0x00002d0eu, 0x000021b2u, 0x0003003eu, 0x00002d0fu, 0x00002e87u, 0x0003003eu, 0x00002d10u, 0x0000045cu, 0x0003003eu, 0x00002d11u, 0x00002e6eu, 0x0003003eu, 0x00002d12u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00003311u, 0x00002d0fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003312u, 0x00003311u, 0x00050084u, 0x00000006u, 0x00003313u, 0x00002c9eu, 0x00003312u, 0x00050080u, 0x00000006u, 0x00003314u, 0x00002c9cu, 0x00003313u, 0x0003003eu, 0x00003305u, 0x00003314u, 0x00050041u, 0x00000007u, 0x00003315u, 0x00002d0fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003316u, 0x00003315u, 0x00050084u, 0x00000006u, 0x00003317u, 0x00003316u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003319u, 0x00003314u, 0x00003317u, 0x0003003eu, 0x00003305u, 0x00003319u, 0x000500c7u, 0x00000006u, 0x0000331bu, 0x00003319u, 0x00000f1du, 0x0003003eu, 0x00003305u, 0x0000331bu, 0x000500c2u, 0x00000006u, 0x0000331du, 0x0000331bu, 0x0000022au, 0x0003003eu, 0x00003306u, 0x0000331du, 0x0004003du, 0x00000006u, 0x0000331fu, 0x00003311u, 0x000500c7u, 0x00000006u, 0x00003320u, 0x0000331fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003321u, 0x00003320u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003323u, 0x0000331du, 0x00003321u, 0x0003003eu, 0x00003306u, 0x00003323u, 0x000500c6u, 0x00000006u, 0x00003325u, 0x00003323u, 0x0000045cu, 0x0003003eu, 0x00003306u, 0x00003325u, 0x00080041u, 0x00000692u, 0x00003328u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003325u, 0x0004003du, 0x00000011u, 0x00003329u, 0x00003328u, 0x00040071u, 0x00000006u, 0x0000332au, 0x00003329u, 0x0003003eu, 0x00003307u, 0x0000332au, 0x000500c2u, 0x00000006u, 0x0000332cu, 0x0000332au, 0x00000239u, 0x000500c7u, 0x00000006u, 0x0000332du, 0x0000332cu, 0x00000feeu, 0x00050080u, 0x00000006u, 0x0000332fu, 0x0000332du, 0x0000045cu, 0x0003003eu, 0x00003308u, 0x0000332fu, 0x000500c6u, 0x00000006u, 0x00003332u, 0x0000332fu, 0x00002e6eu, 0x0003003eu, 0x00003308u, 0x00003332u, 0x000500c5u, 0x00000006u, 0x00003335u, 0x00000f4eu, 0x00003332u, 0x00080041u, 0x00000692u, 0x00003336u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003335u, 0x0004003du, 0x00000011u, 0x00003337u, 0x00003336u, 0x00040071u, 0x00000006u, 0x00003338u, 0x00003337u, 0x0003003eu, 0x00003307u, 0x00003338u, 0x000300f7u, 0x0000333au, 0x00000000u, 0x000400fau, 0x000021c6u, 0x0000333bu, 0x0000333cu, 0x000200f8u, 0x0000333cu, 0x0003003eu, 0x0000330bu, 0x00003338u, 0x00060050u, 0x0000030cu, 0x0000335au, 0x00003338u, 0x00003338u, 0x00003338u, 0x000500c2u, 0x0000030cu, 0x0000335bu, 0x0000335au, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x0000335du, 0x0000335bu, 0x0000f37cu, 0x0003003eu, 0x00003356u, 0x0000335du, 0x000500c4u, 0x0000030cu, 0x00003360u, 0x0000335du, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00003363u, 0x0000335du, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00003364u, 0x00003360u, 0x00003363u, 0x0003003eu, 0x00003356u, 0x00003364u, 0x000500c7u, 0x00000006u, 0x00003366u, 0x00003338u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003367u, 0x00003366u, 0x000006c3u, 0x0003003eu, 0x00003357u, 0x00003367u, 0x00040071u, 0x000004bau, 0x00003369u, 0x00003364u, 0x0004007cu, 0x000004b6u, 0x0000336au, 0x00003369u, 0x00040071u, 0x00000011u, 0x0000336cu, 0x00003367u, 0x0004007cu, 0x00000012u, 0x0000336du, 0x0000336cu, 0x00050051u, 0x00000012u, 0x0000336eu, 0x0000336au, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000336fu, 0x0000336au, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003370u, 0x0000336au, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003371u, 0x0000336eu, 0x0000336fu, 0x00003370u, 0x0000336du, 0x0003003eu, 0x00003358u, 0x00003371u, 0x0003003eu, 0x00003309u, 0x00003371u, 0x000200f9u, 0x0000333au, 0x000200f8u, 0x0000333bu, 0x0003003eu, 0x0000330au, 0x00003338u, 0x000500c2u, 0x00000006u, 0x00003346u, 0x00003338u, 0x0000025du, 0x0003003eu, 0x00003342u, 0x00003346u, 0x000500c7u, 0x00000006u, 0x00003348u, 0x00003338u, 0x000006c3u, 0x0003003eu, 0x00003343u, 0x00003348u, 0x00040071u, 0x00000011u, 0x0000334au, 0x00003346u, 0x0004007cu, 0x00000012u, 0x0000334bu, 0x0000334au, 0x00040071u, 0x00000011u, 0x00003353u, 0x00003348u, 0x0004007cu, 0x00000012u, 0x00003354u, 0x00003353u, 0x00070050u, 0x00000013u, 0x00003355u, 0x0000334bu, 0x0000334bu, 0x0000334bu, 0x00003354u, 0x0003003eu, 0x00003344u, 0x00003355u, 0x0003003eu, 0x00003309u, 0x00003355u, 0x000200f9u, 0x0000333au, 0x000200f8u, 0x0000333au, 0x000700f5u, 0x00000013u, 0x00008607u, 0x00003355u, 0x0000333bu, 0x00003371u, 0x0000333cu, 0x0003003eu, 0x0000330cu, 0x00008607u, 0x0003003eu, 0x00002cd7u, 0x00008607u, 0x00050050u, 0x000000efu, 0x00002e8fu, 0x0000832au, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002e90u, 0x00002e8fu, 0x0003003eu, 0x00006eb6u, 0x00002c9cu, 0x0003003eu, 0x00006eb7u, 0x00002c9eu, 0x0003003eu, 0x00002d14u, 0x000021b2u, 0x0003003eu, 0x00002d15u, 0x00002e90u, 0x0003003eu, 0x00002d16u, 0x00000386u, 0x0003003eu, 0x00002d17u, 0x00002e6eu, 0x0003003eu, 0x00002d18u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x0000337eu, 0x00002d15u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000337fu, 0x0000337eu, 0x00050084u, 0x00000006u, 0x00003380u, 0x00002c9eu, 0x0000337fu, 0x00050080u, 0x00000006u, 0x00003381u, 0x00002c9cu, 0x00003380u, 0x0003003eu, 0x00003372u, 0x00003381u, 0x00050041u, 0x00000007u, 0x00003382u, 0x00002d15u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003383u, 0x00003382u, 0x00050084u, 0x00000006u, 0x00003384u, 0x00003383u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003386u, 0x00003381u, 0x00003384u, 0x0003003eu, 0x00003372u, 0x00003386u, 0x000500c7u, 0x00000006u, 0x00003388u, 0x00003386u, 0x00000f1du, 0x0003003eu, 0x00003372u, 0x00003388u, 0x000500c2u, 0x00000006u, 0x0000338au, 0x00003388u, 0x0000022au, 0x0003003eu, 0x00003373u, 0x0000338au, 0x0004003du, 0x00000006u, 0x0000338cu, 0x0000337eu, 0x000500c7u, 0x00000006u, 0x0000338du, 0x0000338cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000338eu, 0x0000338du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003390u, 0x0000338au, 0x0000338eu, 0x0003003eu, 0x00003373u, 0x00003390u, 0x000500c6u, 0x00000006u, 0x00003392u, 0x00003390u, 0x0000045cu, 0x0003003eu, 0x00003373u, 0x00003392u, 0x00080041u, 0x00000692u, 0x00003395u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00003392u, 0x0004003du, 0x00000011u, 0x00003396u, 0x00003395u, 0x00040071u, 0x00000006u, 0x00003397u, 0x00003396u, 0x0003003eu, 0x00003374u, 0x00003397u, 0x000500c2u, 0x00000006u, 0x00003399u, 0x00003397u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x0000339au, 0x00003399u, 0x00000feeu, 0x00050080u, 0x00000006u, 0x0000339cu, 0x0000339au, 0x00000386u, 0x0003003eu, 0x00003375u, 0x0000339cu, 0x000500c6u, 0x00000006u, 0x0000339fu, 0x0000339cu, 0x00002e6eu, 0x0003003eu, 0x00003375u, 0x0000339fu, 0x000500c5u, 0x00000006u, 0x000033a2u, 0x00000f4eu, 0x0000339fu, 0x00080041u, 0x00000692u, 0x000033a3u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000033a2u, 0x0004003du, 0x00000011u, 0x000033a4u, 0x000033a3u, 0x00040071u, 0x00000006u, 0x000033a5u, 0x000033a4u, 0x0003003eu, 0x00003374u, 0x000033a5u, 0x000300f7u, 0x000033a7u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x000033a8u, 0x000033a9u, 0x000200f8u, 0x000033a9u, 0x0003003eu, 0x00003378u, 0x000033a5u, 0x00060050u, 0x0000030cu, 0x000033c7u, 0x000033a5u, 0x000033a5u, 0x000033a5u, 0x000500c2u, 0x0000030cu, 0x000033c8u, 0x000033c7u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000033cau, 0x000033c8u, 0x0000f37cu, 0x0003003eu, 0x000033c3u, 0x000033cau, 0x000500c4u, 0x0000030cu, 0x000033cdu, 0x000033cau, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000033d0u, 0x000033cau, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000033d1u, 0x000033cdu, 0x000033d0u, 0x0003003eu, 0x000033c3u, 0x000033d1u, 0x000500c7u, 0x00000006u, 0x000033d3u, 0x000033a5u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000033d4u, 0x000033d3u, 0x000006c3u, 0x0003003eu, 0x000033c4u, 0x000033d4u, 0x00040071u, 0x000004bau, 0x000033d6u, 0x000033d1u, 0x0004007cu, 0x000004b6u, 0x000033d7u, 0x000033d6u, 0x00040071u, 0x00000011u, 0x000033d9u, 0x000033d4u, 0x0004007cu, 0x00000012u, 0x000033dau, 0x000033d9u, 0x00050051u, 0x00000012u, 0x000033dbu, 0x000033d7u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000033dcu, 0x000033d7u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000033ddu, 0x000033d7u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000033deu, 0x000033dbu, 0x000033dcu, 0x000033ddu, 0x000033dau, 0x0003003eu, 0x000033c5u, 0x000033deu, 0x0003003eu, 0x00003376u, 0x000033deu, 0x000200f9u, 0x000033a7u, 0x000200f8u, 0x000033a8u, 0x0003003eu, 0x00003377u, 0x000033a5u, 0x000500c2u, 0x00000006u, 0x000033b3u, 0x000033a5u, 0x0000025du, 0x0003003eu, 0x000033afu, 0x000033b3u, 0x000500c7u, 0x00000006u, 0x000033b5u, 0x000033a5u, 0x000006c3u, 0x0003003eu, 0x000033b0u, 0x000033b5u, 0x00040071u, 0x00000011u, 0x000033b7u, 0x000033b3u, 0x0004007cu, 0x00000012u, 0x000033b8u, 0x000033b7u, 0x00040071u, 0x00000011u, 0x000033c0u, 0x000033b5u, 0x0004007cu, 0x00000012u, 0x000033c1u, 0x000033c0u, 0x00070050u, 0x00000013u, 0x000033c2u, 0x000033b8u, 0x000033b8u, 0x000033b8u, 0x000033c1u, 0x0003003eu, 0x000033b1u, 0x000033c2u, 0x0003003eu, 0x00003376u, 0x000033c2u, 0x000200f9u, 0x000033a7u, 0x000200f8u, 0x000033a7u, 0x000700f5u, 0x00000013u, 0x0000861du, 0x000033c2u, 0x000033a8u, 0x000033deu, 0x000033a9u, 0x0003003eu, 0x00003379u, 0x0000861du, 0x0003003eu, 0x00002cdfu, 0x0000861du, 0x000200f9u, 0x00002e82u, 0x000200f8u, 0x00002e82u, 0x000700f5u, 0x00000013u, 0x0000886au, 0x00008839u, 0x000032cdu, 0x0000861du, 0x000033a7u, 0x000700f5u, 0x00000013u, 0x0000876fu, 0x0000873du, 0x000032cdu, 0x00008607u, 0x000033a7u, 0x000300f7u, 0x00002e97u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00002e98u, 0x00002e97u, 0x000200f8u, 0x00002e98u, 0x00050050u, 0x000000efu, 0x00002e9bu, 0x00008368u, 0x00002e42u, 0x0004007cu, 0x000000b0u, 0x00002e9cu, 0x00002e9bu, 0x0003003eu, 0x00006ebau, 0x00002c9cu, 0x0003003eu, 0x00006ebbu, 0x00002c9eu, 0x0003003eu, 0x00002d1au, 0x000021b2u, 0x0003003eu, 0x00002d1bu, 0x00002e9cu, 0x0003003eu, 0x00002d1cu, 0x00000464u, 0x0003003eu, 0x00002d1du, 0x00002e6eu, 0x0003003eu, 0x00002d1eu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x000033ebu, 0x00002d1bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000033ecu, 0x000033ebu, 0x00050084u, 0x00000006u, 0x000033edu, 0x00002c9eu, 0x000033ecu, 0x00050080u, 0x00000006u, 0x000033eeu, 0x00002c9cu, 0x000033edu, 0x0003003eu, 0x000033dfu, 0x000033eeu, 0x00050041u, 0x00000007u, 0x000033efu, 0x00002d1bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000033f0u, 0x000033efu, 0x00050084u, 0x00000006u, 0x000033f1u, 0x000033f0u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000033f3u, 0x000033eeu, 0x000033f1u, 0x0003003eu, 0x000033dfu, 0x000033f3u, 0x000500c7u, 0x00000006u, 0x000033f5u, 0x000033f3u, 0x00000f1du, 0x0003003eu, 0x000033dfu, 0x000033f5u, 0x000500c2u, 0x00000006u, 0x000033f7u, 0x000033f5u, 0x0000022au, 0x0003003eu, 0x000033e0u, 0x000033f7u, 0x0004003du, 0x00000006u, 0x000033f9u, 0x000033ebu, 0x000500c7u, 0x00000006u, 0x000033fau, 0x000033f9u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000033fbu, 0x000033fau, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000033fdu, 0x000033f7u, 0x000033fbu, 0x0003003eu, 0x000033e0u, 0x000033fdu, 0x000500c6u, 0x00000006u, 0x000033ffu, 0x000033fdu, 0x0000045cu, 0x0003003eu, 0x000033e0u, 0x000033ffu, 0x00080041u, 0x00000692u, 0x00003402u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000033ffu, 0x0004003du, 0x00000011u, 0x00003403u, 0x00003402u, 0x00040071u, 0x00000006u, 0x00003404u, 0x00003403u, 0x0003003eu, 0x000033e1u, 0x00003404u, 0x000500c2u, 0x00000006u, 0x00003406u, 0x00003404u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00003407u, 0x00003406u, 0x00000feeu, 0x00050080u, 0x00000006u, 0x00003409u, 0x00003407u, 0x00000464u, 0x0003003eu, 0x000033e2u, 0x00003409u, 0x000500c6u, 0x00000006u, 0x0000340cu, 0x00003409u, 0x00002e6eu, 0x0003003eu, 0x000033e2u, 0x0000340cu, 0x000500c5u, 0x00000006u, 0x0000340fu, 0x00000f4eu, 0x0000340cu, 0x00080041u, 0x00000692u, 0x00003410u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000340fu, 0x0004003du, 0x00000011u, 0x00003411u, 0x00003410u, 0x00040071u, 0x00000006u, 0x00003412u, 0x00003411u, 0x0003003eu, 0x000033e1u, 0x00003412u, 0x000300f7u, 0x00003414u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00003415u, 0x00003416u, 0x000200f8u, 0x00003416u, 0x0003003eu, 0x000033e5u, 0x00003412u, 0x00060050u, 0x0000030cu, 0x00003434u, 0x00003412u, 0x00003412u, 0x00003412u, 0x000500c2u, 0x0000030cu, 0x00003435u, 0x00003434u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00003437u, 0x00003435u, 0x0000f37cu, 0x0003003eu, 0x00003430u, 0x00003437u, 0x000500c4u, 0x0000030cu, 0x0000343au, 0x00003437u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000343du, 0x00003437u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x0000343eu, 0x0000343au, 0x0000343du, 0x0003003eu, 0x00003430u, 0x0000343eu, 0x000500c7u, 0x00000006u, 0x00003440u, 0x00003412u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003441u, 0x00003440u, 0x000006c3u, 0x0003003eu, 0x00003431u, 0x00003441u, 0x00040071u, 0x000004bau, 0x00003443u, 0x0000343eu, 0x0004007cu, 0x000004b6u, 0x00003444u, 0x00003443u, 0x00040071u, 0x00000011u, 0x00003446u, 0x00003441u, 0x0004007cu, 0x00000012u, 0x00003447u, 0x00003446u, 0x00050051u, 0x00000012u, 0x00003448u, 0x00003444u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003449u, 0x00003444u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000344au, 0x00003444u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000344bu, 0x00003448u, 0x00003449u, 0x0000344au, 0x00003447u, 0x0003003eu, 0x00003432u, 0x0000344bu, 0x0003003eu, 0x000033e3u, 0x0000344bu, 0x000200f9u, 0x00003414u, 0x000200f8u, 0x00003415u, 0x0003003eu, 0x000033e4u, 0x00003412u, 0x000500c2u, 0x00000006u, 0x00003420u, 0x00003412u, 0x0000025du, 0x0003003eu, 0x0000341cu, 0x00003420u, 0x000500c7u, 0x00000006u, 0x00003422u, 0x00003412u, 0x000006c3u, 0x0003003eu, 0x0000341du, 0x00003422u, 0x00040071u, 0x00000011u, 0x00003424u, 0x00003420u, 0x0004007cu, 0x00000012u, 0x00003425u, 0x00003424u, 0x00040071u, 0x00000011u, 0x0000342du, 0x00003422u, 0x0004007cu, 0x00000012u, 0x0000342eu, 0x0000342du, 0x00070050u, 0x00000013u, 0x0000342fu, 0x00003425u, 0x00003425u, 0x00003425u, 0x0000342eu, 0x0003003eu, 0x0000341eu, 0x0000342fu, 0x0003003eu, 0x000033e3u, 0x0000342fu, 0x000200f9u, 0x00003414u, 0x000200f8u, 0x00003414u, 0x000700f5u, 0x00000013u, 0x00008649u, 0x0000342fu, 0x00003415u, 0x0000344bu, 0x00003416u, 0x0003003eu, 0x000033e6u, 0x00008649u, 0x0003003eu, 0x00002ce7u, 0x00008649u, 0x000200f9u, 0x00002e97u, 0x000200f8u, 0x00002e97u, 0x000700f5u, 0x00000013u, 0x000088e3u, 0x000088b3u, 0x00002e82u, 0x00008649u, 0x00003414u, 0x000200f9u, 0x00002e73u, 0x000200f8u, 0x00002e73u, 0x000900f5u, 0x00000013u, 0x000088e2u, 0x000088e3u, 0x00002e97u, 0x000088e9u, 0x00002ecbu, 0x000088eeu, 0x00002ef9u, 0x000900f5u, 0x00000013u, 0x00008868u, 0x0000886au, 0x00002e97u, 0x0000886fu, 0x00002ecbu, 0x00008873u, 0x00002ef9u, 0x000900f5u, 0x00000013u, 0x000087ebu, 0x000085f2u, 0x00002e97u, 0x0000859au, 0x00002ecbu, 0x0000853cu, 0x00002ef9u, 0x000900f5u, 0x00000013u, 0x0000876du, 0x0000876fu, 0x00002e97u, 0x00008775u, 0x00002ecbu, 0x0000877au, 0x00002ef9u, 0x000200f9u, 0x00002e68u, 0x000200f8u, 0x00002e68u, 0x000700f5u, 0x00000013u, 0x00008899u, 0x000088b3u, 0x00002e62u, 0x000088e2u, 0x00002e73u, 0x000700f5u, 0x00000013u, 0x0000881fu, 0x00008839u, 0x00002e62u, 0x00008868u, 0x00002e73u, 0x000700f5u, 0x00000013u, 0x000087a2u, 0x000087bcu, 0x00002e62u, 0x000087ebu, 0x00002e73u, 0x000700f5u, 0x00000013u, 0x00008723u, 0x0000873du, 0x00002e62u, 0x0000876du, 0x00002e73u, 0x000200f9u, 0x00002e61u, 0x000200f8u, 0x00002e61u, 0x000700f5u, 0x00000013u, 0x00008898u, 0x00008899u, 0x00002e68u, 0x000088f3u, 0x00002f08u, 0x000700f5u, 0x00000013u, 0x0000881eu, 0x0000881fu, 0x00002e68u, 0x00008876u, 0x00002f08u, 0x000700f5u, 0x00000013u, 0x000087a1u, 0x000087a2u, 0x00002e68u, 0x000087fbu, 0x00002f08u, 0x000700f5u, 0x00000013u, 0x00008722u, 0x00008723u, 0x00002e68u, 0x0000877eu, 0x00002f08u, 0x000300f7u, 0x00003158u, 0x00000000u, 0x000400fau, 0x00002e53u, 0x00003159u, 0x0000315au, 0x000200f8u, 0x0000315au, 0x000300f7u, 0x00003186u, 0x00000000u, 0x000400fau, 0x00002e4bu, 0x00003187u, 0x00003188u, 0x000200f8u, 0x00003188u, 0x000300f7u, 0x00003196u, 0x00000000u, 0x000400fau, 0x00002e55u, 0x00003197u, 0x00003198u, 0x000200f8u, 0x00003198u, 0x0004003du, 0x000000efu, 0x0000319du, 0x00002cbbu, 0x0003003eu, 0x00002df0u, 0x0000319du, 0x000200f9u, 0x00003196u, 0x000200f8u, 0x00003197u, 0x0004003du, 0x000000efu, 0x00003199u, 0x00002cbbu, 0x0007004fu, 0x000000efu, 0x0000319au, 0x00003199u, 0x00003199u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x0000319cu, 0x0000f381u, 0x0000319au, 0x0003003eu, 0x00002df0u, 0x0000319cu, 0x000200f9u, 0x00003196u, 0x000200f8u, 0x00003196u, 0x000700f5u, 0x000000efu, 0x00008720u, 0x0000319cu, 0x00003197u, 0x0000319du, 0x00003198u, 0x00040072u, 0x000001aeu, 0x0000319fu, 0x00008720u, 0x0003003eu, 0x00002defu, 0x0000319fu, 0x00050082u, 0x00000013u, 0x000031a2u, 0x00008722u, 0x000087a1u, 0x00050041u, 0x000001c4u, 0x000031a3u, 0x00002defu, 0x0000032du, 0x0004003du, 0x00000012u, 0x000031a4u, 0x000031a3u, 0x00070050u, 0x00000013u, 0x000031a5u, 0x000031a4u, 0x000031a4u, 0x000031a4u, 0x000031a4u, 0x00050084u, 0x00000013u, 0x000031a6u, 0x000031a2u, 0x000031a5u, 0x0003003eu, 0x00002de1u, 0x000031a6u, 0x00050082u, 0x00000013u, 0x000031a9u, 0x0000881eu, 0x000087a1u, 0x00050041u, 0x000001c4u, 0x000031aau, 0x00002defu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x000031abu, 0x000031aau, 0x00070050u, 0x00000013u, 0x000031acu, 0x000031abu, 0x000031abu, 0x000031abu, 0x000031abu, 0x00050084u, 0x00000013u, 0x000031adu, 0x000031a9u, 0x000031acu, 0x00050080u, 0x00000013u, 0x000031afu, 0x000031a6u, 0x000031adu, 0x0003003eu, 0x00002de1u, 0x000031afu, 0x00050080u, 0x00000013u, 0x000031b2u, 0x000031afu, 0x0000f384u, 0x0003003eu, 0x00002de1u, 0x000031b2u, 0x000500c3u, 0x00000013u, 0x000031b5u, 0x000031b2u, 0x0000f385u, 0x0003003eu, 0x00002de1u, 0x000031b5u, 0x00050080u, 0x00000013u, 0x000031b8u, 0x000031b5u, 0x000087a1u, 0x0003003eu, 0x00002de1u, 0x000031b8u, 0x000200f9u, 0x00003186u, 0x000200f8u, 0x00003187u, 0x00050080u, 0x00000013u, 0x0000318bu, 0x000087a1u, 0x0000881eu, 0x00050080u, 0x00000013u, 0x0000318du, 0x0000318bu, 0x00008722u, 0x00050080u, 0x00000013u, 0x0000318fu, 0x0000318du, 0x00008898u, 0x00050080u, 0x00000013u, 0x00003191u, 0x0000318fu, 0x0000f37fu, 0x000500c3u, 0x00000013u, 0x00003193u, 0x00003191u, 0x0000f37fu, 0x0003003eu, 0x00002de1u, 0x00003193u, 0x000200f9u, 0x00003186u, 0x000200f8u, 0x00003186u, 0x000700f5u, 0x00000013u, 0x000089d7u, 0x00003193u, 0x00003187u, 0x000031b8u, 0x00003196u, 0x000200f9u, 0x00003158u, 0x000200f8u, 0x00003159u, 0x000300f7u, 0x0000315cu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x0000315du, 0x0000315eu, 0x000200f8u, 0x0000315eu, 0x0003003eu, 0x00002de1u, 0x000087a1u, 0x000200f9u, 0x0000315cu, 0x000200f8u, 0x0000315du, 0x000500c7u, 0x00000008u, 0x00003160u, 0x0000832au, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00003161u, 0x00003160u, 0x00000233u, 0x0004003du, 0x00000008u, 0x00003163u, 0x00002e21u, 0x000500c3u, 0x00000008u, 0x00003164u, 0x00003163u, 0x0000022au, 0x000500c5u, 0x00000008u, 0x00003165u, 0x00003161u, 0x00003164u, 0x0003003eu, 0x00002de2u, 0x00003165u, 0x0004003du, 0x00000008u, 0x00003168u, 0x00002e23u, 0x00050050u, 0x000000efu, 0x00003169u, 0x00003165u, 0x00003168u, 0x0007004fu, 0x000001aeu, 0x0000316bu, 0x000087a1u, 0x000087a1u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002de4u, 0x0000316bu, 0x0007004fu, 0x000001aeu, 0x0000316du, 0x00008722u, 0x00008722u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002de5u, 0x0000316du, 0x0007004fu, 0x000001aeu, 0x0000316fu, 0x0000881eu, 0x0000881eu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002de6u, 0x0000316fu, 0x0007004fu, 0x000001aeu, 0x00003171u, 0x00008898u, 0x00008898u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002de7u, 0x00003171u, 0x0003003eu, 0x00002de8u, 0x00003169u, 0x00050041u, 0x00000046u, 0x00004416u, 0x00002de8u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004417u, 0x00004416u, 0x00050041u, 0x00000046u, 0x00004418u, 0x00002de8u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004419u, 0x00004418u, 0x00050080u, 0x00000008u, 0x0000441au, 0x00004417u, 0x00004419u, 0x0003003eu, 0x00004410u, 0x0000441au, 0x000500afu, 0x00000069u, 0x0000441cu, 0x0000441au, 0x0000114fu, 0x00050050u, 0x0000087bu, 0x0000441fu, 0x0000441cu, 0x0000441cu, 0x000600a9u, 0x000001aeu, 0x00004420u, 0x0000441fu, 0x00003171u, 0x0000316bu, 0x0003003eu, 0x00004411u, 0x00004420u, 0x000300f7u, 0x00004423u, 0x00000000u, 0x000400fau, 0x0000441cu, 0x00004424u, 0x00004425u, 0x000200f8u, 0x00004425u, 0x0004003du, 0x000000efu, 0x0000442au, 0x00002de8u, 0x0003003eu, 0x00004413u, 0x0000442au, 0x000200f9u, 0x00004423u, 0x000200f8u, 0x00004424u, 0x0004003du, 0x000000efu, 0x00004426u, 0x00002de8u, 0x0007004fu, 0x000000efu, 0x00004427u, 0x00004426u, 0x00004426u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00004429u, 0x0000f381u, 0x00004427u, 0x0003003eu, 0x00004413u, 0x00004429u, 0x000200f9u, 0x00004423u, 0x000200f8u, 0x00004423u, 0x000700f5u, 0x000000efu, 0x0000897au, 0x00004429u, 0x00004424u, 0x0000442au, 0x00004425u, 0x00040072u, 0x000001aeu, 0x0000442cu, 0x0000897au, 0x0003003eu, 0x00004412u, 0x0000442cu, 0x00050082u, 0x000001aeu, 0x0000442fu, 0x0000316du, 0x00004420u, 0x00050041u, 0x000001c4u, 0x00004430u, 0x00004412u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004431u, 0x00004430u, 0x00050050u, 0x000001aeu, 0x00004432u, 0x00004431u, 0x00004431u, 0x00050084u, 0x000001aeu, 0x00004433u, 0x0000442fu, 0x00004432u, 0x0003003eu, 0x00004414u, 0x00004433u, 0x00050082u, 0x000001aeu, 0x00004436u, 0x0000316fu, 0x00004420u, 0x00050041u, 0x000001c4u, 0x00004437u, 0x00004412u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00004438u, 0x00004437u, 0x00050050u, 0x000001aeu, 0x00004439u, 0x00004438u, 0x00004438u, 0x00050084u, 0x000001aeu, 0x0000443au, 0x00004436u, 0x00004439u, 0x00050080u, 0x000001aeu, 0x0000443cu, 0x00004433u, 0x0000443au, 0x0003003eu, 0x00004414u, 0x0000443cu, 0x00050080u, 0x000001aeu, 0x0000443fu, 0x0000443cu, 0x0000f382u, 0x0003003eu, 0x00004414u, 0x0000443fu, 0x000500c3u, 0x000001aeu, 0x00004442u, 0x0000443fu, 0x0000f383u, 0x0003003eu, 0x00004414u, 0x00004442u, 0x00050080u, 0x000001aeu, 0x00004445u, 0x00004442u, 0x00004420u, 0x0003003eu, 0x00004414u, 0x00004445u, 0x0003003eu, 0x00004415u, 0x00004445u, 0x0003003eu, 0x00002de3u, 0x00004445u, 0x0007004fu, 0x000001aeu, 0x00003174u, 0x000087a1u, 0x000087a1u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002deau, 0x00003174u, 0x0007004fu, 0x000001aeu, 0x00003176u, 0x00008722u, 0x00008722u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002debu, 0x00003176u, 0x0007004fu, 0x000001aeu, 0x00003178u, 0x0000881eu, 0x0000881eu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002decu, 0x00003178u, 0x0007004fu, 0x000001aeu, 0x0000317au, 0x00008898u, 0x00008898u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002dedu, 0x0000317au, 0x0004003du, 0x000000efu, 0x0000317bu, 0x00002cbbu, 0x0003003eu, 0x00002deeu, 0x0000317bu, 0x00050041u, 0x00000046u, 0x0000444du, 0x00002deeu, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000444eu, 0x0000444du, 0x00050041u, 0x00000046u, 0x0000444fu, 0x00002deeu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004450u, 0x0000444fu, 0x00050080u, 0x00000008u, 0x00004451u, 0x0000444eu, 0x00004450u, 0x0003003eu, 0x00004447u, 0x00004451u, 0x000500afu, 0x00000069u, 0x00004453u, 0x00004451u, 0x0000114fu, 0x00050050u, 0x0000087bu, 0x00004456u, 0x00004453u, 0x00004453u, 0x000600a9u, 0x000001aeu, 0x00004457u, 0x00004456u, 0x0000317au, 0x00003174u, 0x0003003eu, 0x00004448u, 0x00004457u, 0x000300f7u, 0x0000445au, 0x00000000u, 0x000400fau, 0x00004453u, 0x0000445bu, 0x0000445cu, 0x000200f8u, 0x0000445cu, 0x0004003du, 0x000000efu, 0x00004461u, 0x00002deeu, 0x0003003eu, 0x0000444au, 0x00004461u, 0x000200f9u, 0x0000445au, 0x000200f8u, 0x0000445bu, 0x0004003du, 0x000000efu, 0x0000445du, 0x00002deeu, 0x0007004fu, 0x000000efu, 0x0000445eu, 0x0000445du, 0x0000445du, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00004460u, 0x0000f381u, 0x0000445eu, 0x0003003eu, 0x0000444au, 0x00004460u, 0x000200f9u, 0x0000445au, 0x000200f8u, 0x0000445au, 0x000700f5u, 0x000000efu, 0x00008982u, 0x00004460u, 0x0000445bu, 0x00004461u, 0x0000445cu, 0x00040072u, 0x000001aeu, 0x00004463u, 0x00008982u, 0x0003003eu, 0x00004449u, 0x00004463u, 0x00050082u, 0x000001aeu, 0x00004466u, 0x00003176u, 0x00004457u, 0x00050041u, 0x000001c4u, 0x00004467u, 0x00004449u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004468u, 0x00004467u, 0x00050050u, 0x000001aeu, 0x00004469u, 0x00004468u, 0x00004468u, 0x00050084u, 0x000001aeu, 0x0000446au, 0x00004466u, 0x00004469u, 0x0003003eu, 0x0000444bu, 0x0000446au, 0x00050082u, 0x000001aeu, 0x0000446du, 0x00003178u, 0x00004457u, 0x00050041u, 0x000001c4u, 0x0000446eu, 0x00004449u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x0000446fu, 0x0000446eu, 0x00050050u, 0x000001aeu, 0x00004470u, 0x0000446fu, 0x0000446fu, 0x00050084u, 0x000001aeu, 0x00004471u, 0x0000446du, 0x00004470u, 0x00050080u, 0x000001aeu, 0x00004473u, 0x0000446au, 0x00004471u, 0x0003003eu, 0x0000444bu, 0x00004473u, 0x00050080u, 0x000001aeu, 0x00004476u, 0x00004473u, 0x0000f382u, 0x0003003eu, 0x0000444bu, 0x00004476u, 0x000500c3u, 0x000001aeu, 0x00004479u, 0x00004476u, 0x0000f383u, 0x0003003eu, 0x0000444bu, 0x00004479u, 0x00050080u, 0x000001aeu, 0x0000447cu, 0x00004479u, 0x00004457u, 0x0003003eu, 0x0000444bu, 0x0000447cu, 0x0003003eu, 0x0000444cu, 0x0000447cu, 0x0003003eu, 0x00002de9u, 0x0000447cu, 0x00050051u, 0x00000012u, 0x0000317fu, 0x00004445u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003180u, 0x00004445u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003181u, 0x0000447cu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003182u, 0x0000447cu, 0x00000001u, 0x00070050u, 0x00000013u, 0x00003183u, 0x0000317fu, 0x00003180u, 0x00003181u, 0x00003182u, 0x0003003eu, 0x00002de1u, 0x00003183u, 0x000200f9u, 0x0000315cu, 0x000200f8u, 0x0000315cu, 0x000700f5u, 0x00000013u, 0x000089d6u, 0x00003183u, 0x0000445au, 0x000087a1u, 0x0000315eu, 0x000200f9u, 0x00003158u, 0x000200f8u, 0x00003158u, 0x000700f5u, 0x00000013u, 0x000089d5u, 0x000089d6u, 0x0000315cu, 0x000089d7u, 0x00003186u, 0x0003003eu, 0x00002df1u, 0x000089d5u, 0x0003003eu, 0x00002121u, 0x000089d5u, 0x000400a8u, 0x00000069u, 0x000022deu, 0x000021c9u, 0x000400a8u, 0x00000069u, 0x000022e0u, 0x00002205u, 0x000500a7u, 0x00000069u, 0x000022e1u, 0x000022deu, 0x000022e0u, 0x000300f7u, 0x000022e2u, 0x00000000u, 0x000400fau, 0x000022e1u, 0x000022e3u, 0x000022e2u, 0x000200f8u, 0x000022e3u, 0x0003003eu, 0x0000212bu, 0x000089d5u, 0x0003003eu, 0x0000212cu, 0x00002978u, 0x00040072u, 0x00000009u, 0x00004485u, 0x000089d5u, 0x000600cau, 0x00000009u, 0x00004486u, 0x00004485u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000447eu, 0x00004486u, 0x00050041u, 0x00000046u, 0x00004487u, 0x0000447eu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00004488u, 0x00004487u, 0x00050041u, 0x000001c4u, 0x00004489u, 0x0000212cu, 0x0000032du, 0x0004003du, 0x00000012u, 0x0000448au, 0x00004489u, 0x00040072u, 0x00000008u, 0x0000448bu, 0x0000448au, 0x00050041u, 0x00000046u, 0x0000448cu, 0x0000447eu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000448du, 0x0000448cu, 0x00050084u, 0x00000008u, 0x0000448eu, 0x0000448bu, 0x0000448du, 0x00050080u, 0x00000008u, 0x0000448fu, 0x0000448eu, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x00004490u, 0x0000448fu, 0x0000025du, 0x00050080u, 0x00000008u, 0x00004491u, 0x00004488u, 0x00004490u, 0x0003003eu, 0x0000447fu, 0x00004491u, 0x0004003du, 0x00000008u, 0x00004493u, 0x00004487u, 0x00050041u, 0x000001c4u, 0x00004494u, 0x0000212cu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00004495u, 0x00004494u, 0x00040072u, 0x00000008u, 0x00004496u, 0x00004495u, 0x00050041u, 0x00000046u, 0x00004497u, 0x0000447eu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004498u, 0x00004497u, 0x00050084u, 0x00000008u, 0x00004499u, 0x00004496u, 0x00004498u, 0x00050041u, 0x000001c4u, 0x0000449au, 0x0000212cu, 0x00000386u, 0x0004003du, 0x00000012u, 0x0000449bu, 0x0000449au, 0x00040072u, 0x00000008u, 0x0000449cu, 0x0000449bu, 0x0004003du, 0x00000008u, 0x0000449eu, 0x0000448cu, 0x00050084u, 0x00000008u, 0x0000449fu, 0x0000449cu, 0x0000449eu, 0x00050080u, 0x00000008u, 0x000044a0u, 0x00004499u, 0x0000449fu, 0x00050080u, 0x00000008u, 0x000044a1u, 0x000044a0u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x000044a2u, 0x000044a1u, 0x0000025du, 0x00050080u, 0x00000008u, 0x000044a3u, 0x00004493u, 0x000044a2u, 0x0003003eu, 0x00004480u, 0x000044a3u, 0x0004003du, 0x00000008u, 0x000044a5u, 0x00004487u, 0x00050041u, 0x000001c4u, 0x000044a6u, 0x0000212cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000044a7u, 0x000044a6u, 0x00040072u, 0x00000008u, 0x000044a8u, 0x000044a7u, 0x0004003du, 0x00000008u, 0x000044aau, 0x00004497u, 0x00050084u, 0x00000008u, 0x000044abu, 0x000044a8u, 0x000044aau, 0x00050080u, 0x00000008u, 0x000044acu, 0x000044abu, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x000044adu, 0x000044acu, 0x0000025du, 0x00050080u, 0x00000008u, 0x000044aeu, 0x000044a5u, 0x000044adu, 0x0003003eu, 0x00004481u, 0x000044aeu, 0x0004003du, 0x00000008u, 0x000044b0u, 0x00004487u, 0x0003003eu, 0x00004482u, 0x000044b0u, 0x00040072u, 0x00000012u, 0x000044b2u, 0x00004491u, 0x00040072u, 0x00000012u, 0x000044b4u, 0x000044a3u, 0x00040072u, 0x00000012u, 0x000044b6u, 0x000044aeu, 0x00040072u, 0x00000012u, 0x000044b8u, 0x000044b0u, 0x00070050u, 0x00000013u, 0x000044b9u, 0x000044b2u, 0x000044b4u, 0x000044b6u, 0x000044b8u, 0x0003003eu, 0x00004483u, 0x000044b9u, 0x0003003eu, 0x00002121u, 0x000044b9u, 0x000200f9u, 0x000022e2u, 0x000200f8u, 0x000022e2u, 0x000700f5u, 0x00000013u, 0x000098a3u, 0x000089d5u, 0x00003158u, 0x000044b9u, 0x000022e3u, 0x000200f9u, 0x000022ccu, 0x000200f8u, 0x000022ccu, 0x000700f5u, 0x00000013u, 0x0000e439u, 0x000088b3u, 0x000022bau, 0x00008898u, 0x000022e2u, 0x000700f5u, 0x00000013u, 0x0000e32fu, 0x00008839u, 0x000022bau, 0x0000881eu, 0x000022e2u, 0x000700f5u, 0x00000013u, 0x0000e225u, 0x000087bcu, 0x000022bau, 0x000087a1u, 0x000022e2u, 0x000700f5u, 0x00000013u, 0x0000e11bu, 0x0000873du, 0x000022bau, 0x00008722u, 0x000022e2u, 0x000700f5u, 0x00000013u, 0x0000986bu, 0x00009878u, 0x000022bau, 0x000098a3u, 0x000022e2u, 0x000300f7u, 0x000022e9u, 0x00000000u, 0x000400fau, 0x000021fcu, 0x000022eau, 0x000022e9u, 0x000200f8u, 0x000022eau, 0x00050080u, 0x00000008u, 0x000022f3u, 0x0000219cu, 0x0000022au, 0x00050080u, 0x00000008u, 0x000022f4u, 0x00002197u, 0x000022f3u, 0x00070041u, 0x00000692u, 0x000022f5u, 0x000002dbu, 0x00000220u, 0x000022f4u, 0x0000025du, 0x0004003du, 0x00000011u, 0x000022f6u, 0x000022f5u, 0x00040071u, 0x00000006u, 0x000022f7u, 0x000022f6u, 0x000500abu, 0x00000069u, 0x000022f8u, 0x000022f7u, 0x0000032du, 0x0003003eu, 0x0000212du, 0x000022f8u, 0x00040072u, 0x00000008u, 0x000022fbu, 0x0000240fu, 0x000500afu, 0x00000069u, 0x000022fcu, 0x000022fbu, 0x0000025du, 0x0003003eu, 0x0000212eu, 0x000022fcu, 0x000300f7u, 0x000022ffu, 0x00000000u, 0x000400fau, 0x00002219u, 0x00002300u, 0x00002301u, 0x000200f8u, 0x00002301u, 0x0003003eu, 0x00002130u, 0x0000240bu, 0x000200f9u, 0x000022ffu, 0x000200f8u, 0x00002300u, 0x0003003eu, 0x00002130u, 0x0000240du, 0x000200f9u, 0x000022ffu, 0x000200f8u, 0x000022ffu, 0x000600a9u, 0x00000008u, 0x0000f3a0u, 0x00002219u, 0x0000240du, 0x0000240bu, 0x000500aau, 0x00000069u, 0x00002307u, 0x00007efeu, 0x0000f3a0u, 0x0003003eu, 0x0000212fu, 0x00002307u, 0x000500a7u, 0x00000069u, 0x0000230au, 0x00002307u, 0x000022fcu, 0x000500a7u, 0x00000069u, 0x0000230cu, 0x0000230au, 0x000022f8u, 0x000300f7u, 0x0000230du, 0x00000000u, 0x000400fau, 0x0000230cu, 0x0000230eu, 0x0000230fu, 0x000200f8u, 0x0000230fu, 0x00050084u, 0x00000008u, 0x0000232bu, 0x00002286u, 0x00000882u, 0x00050080u, 0x00000008u, 0x0000232cu, 0x00002284u, 0x0000232bu, 0x0003003eu, 0x00002136u, 0x00002403u, 0x0003003eu, 0x00002137u, 0x00002423u, 0x0003003eu, 0x00002138u, 0x0000232cu, 0x0003003eu, 0x00002139u, 0x000021d2u, 0x0008004fu, 0x00000044u, 0x00004549u, 0x00002403u, 0x00002403u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x00000044u, 0x0000454bu, 0x00002423u, 0x00002423u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x0000454du, 0x0000454bu, 0x0000f371u, 0x000500c3u, 0x00000044u, 0x0000454fu, 0x0000454du, 0x000029deu, 0x00060050u, 0x00000044u, 0x00004551u, 0x0000232cu, 0x0000232cu, 0x0000232cu, 0x00050084u, 0x00000044u, 0x00004552u, 0x0000454fu, 0x00004551u, 0x00050080u, 0x00000044u, 0x00004553u, 0x00004549u, 0x00004552u, 0x0003003eu, 0x00004541u, 0x00004553u, 0x000500c3u, 0x00000044u, 0x00004556u, 0x00004553u, 0x0000f372u, 0x0003003eu, 0x00004541u, 0x00004556u, 0x000300f7u, 0x00004558u, 0x00000000u, 0x000400fau, 0x000021d2u, 0x00004559u, 0x0000455au, 0x000200f8u, 0x0000455au, 0x0003003eu, 0x00004546u, 0x00004556u, 0x0007004fu, 0x000000efu, 0x000045e8u, 0x00004556u, 0x00004556u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000045e6u, 0x000045e8u, 0x0003003eu, 0x00004542u, 0x000045e8u, 0x000200f9u, 0x00004558u, 0x000200f8u, 0x00004559u, 0x0003003eu, 0x00004544u, 0x00004556u, 0x0003003eu, 0x00004545u, 0x00009243u, 0x00050041u, 0x00000046u, 0x0000456cu, 0x00004544u, 0x00000386u, 0x0004003du, 0x00000008u, 0x0000456du, 0x0000456cu, 0x0003003eu, 0x00004562u, 0x0000456du, 0x000500b3u, 0x00000069u, 0x0000456fu, 0x0000456du, 0x00000220u, 0x0003003eu, 0x00004563u, 0x0000456fu, 0x000500c7u, 0x00000008u, 0x00004571u, 0x0000456du, 0x00000c0du, 0x0003003eu, 0x00004562u, 0x00004571u, 0x0003003eu, 0x00004565u, 0x00004571u, 0x0006000cu, 0x00000008u, 0x000045cdu, 0x00000001u, 0x0000004au, 0x00004571u, 0x00050082u, 0x00000008u, 0x000045ceu, 0x0000026fu, 0x000045cdu, 0x0007000cu, 0x00000008u, 0x000045cfu, 0x00000001u, 0x00000027u, 0x000045ceu, 0x0000026fu, 0x0003003eu, 0x000045c5u, 0x000045cfu, 0x000500c4u, 0x00000008u, 0x000045d2u, 0x00004571u, 0x000045cfu, 0x000500c7u, 0x00000008u, 0x000045d3u, 0x000045d2u, 0x00000b29u, 0x0003003eu, 0x000045c6u, 0x000045d3u, 0x000500c7u, 0x00000008u, 0x000045d5u, 0x000045d3u, 0x0000035eu, 0x0003003eu, 0x000045c7u, 0x000045d5u, 0x000500c3u, 0x00000008u, 0x000045d7u, 0x000045d3u, 0x0000025du, 0x0003003eu, 0x000045c9u, 0x00000bedu, 0x00050041u, 0x000001afu, 0x000045d8u, 0x000045c9u, 0x000045d7u, 0x0004003du, 0x000001aeu, 0x000045d9u, 0x000045d8u, 0x00040072u, 0x000000efu, 0x000045dau, 0x000045d9u, 0x0003003eu, 0x000045c8u, 0x000045dau, 0x00050041u, 0x00000046u, 0x000045dbu, 0x000045c8u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045dcu, 0x000045dbu, 0x00050084u, 0x00000008u, 0x000045deu, 0x000045dcu, 0x000045d5u, 0x000500c3u, 0x00000008u, 0x000045dfu, 0x000045deu, 0x00000263u, 0x00050041u, 0x00000046u, 0x000045e0u, 0x000045c8u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000045e1u, 0x000045e0u, 0x00050080u, 0x00000008u, 0x000045e2u, 0x000045dfu, 0x000045e1u, 0x0003003eu, 0x000045cau, 0x000045e2u, 0x00050050u, 0x000000efu, 0x000045e5u, 0x000045e2u, 0x000045cfu, 0x0003003eu, 0x000045cbu, 0x000045e5u, 0x0003003eu, 0x00004564u, 0x000045e5u, 0x00050041u, 0x00000046u, 0x00004574u, 0x00004564u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004575u, 0x00004574u, 0x0003003eu, 0x00004566u, 0x00004575u, 0x0004003du, 0x00000044u, 0x00004576u, 0x00004544u, 0x0007004fu, 0x000000efu, 0x00004577u, 0x00004576u, 0x00004576u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00004578u, 0x00004564u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004579u, 0x00004578u, 0x00050050u, 0x000000efu, 0x0000457au, 0x00004579u, 0x00004579u, 0x00050084u, 0x000000efu, 0x0000457bu, 0x00004577u, 0x0000457au, 0x0003003eu, 0x00004567u, 0x0000457bu, 0x000500c3u, 0x00000008u, 0x0000457du, 0x00000c20u, 0x00004575u, 0x0004007eu, 0x00000008u, 0x0000457eu, 0x0000457du, 0x000500c7u, 0x00000008u, 0x0000457fu, 0x00000c1fu, 0x0000457eu, 0x0003003eu, 0x00004568u, 0x0000457fu, 0x0004003du, 0x000000efu, 0x00004580u, 0x00004567u, 0x00050050u, 0x000000efu, 0x00004582u, 0x0000457fu, 0x0000457fu, 0x000500c7u, 0x000000efu, 0x00004583u, 0x00004580u, 0x00004582u, 0x0003003eu, 0x00004569u, 0x00004583u, 0x000500abu, 0x00000069u, 0x00004585u, 0x00004575u, 0x0000026fu, 0x000300f7u, 0x00004586u, 0x00000000u, 0x000400fau, 0x00004585u, 0x00004587u, 0x00004588u, 0x000200f8u, 0x00004588u, 0x0004003du, 0x000000efu, 0x0000458eu, 0x00004567u, 0x000500c4u, 0x000000efu, 0x00004590u, 0x0000458eu, 0x0000f376u, 0x0003003eu, 0x0000456au, 0x00004590u, 0x000200f9u, 0x00004586u, 0x000200f8u, 0x00004587u, 0x0004003du, 0x000000efu, 0x00004589u, 0x00004567u, 0x00050082u, 0x00000008u, 0x0000458bu, 0x0000026cu, 0x00004575u, 0x00050050u, 0x000000efu, 0x0000458cu, 0x0000458bu, 0x0000458bu, 0x000500c3u, 0x000000efu, 0x0000458du, 0x00004589u, 0x0000458cu, 0x0003003eu, 0x00004567u, 0x0000458du, 0x0003003eu, 0x0000456au, 0x0000458du, 0x000200f9u, 0x00004586u, 0x000200f8u, 0x00004586u, 0x0004003du, 0x000000efu, 0x00004591u, 0x00004569u, 0x000500abu, 0x0000087bu, 0x00004592u, 0x00004591u, 0x00000c39u, 0x0004009au, 0x00000069u, 0x00004593u, 0x00004592u, 0x000300f7u, 0x00004594u, 0x00000000u, 0x000400fau, 0x00004593u, 0x00004595u, 0x00004594u, 0x000200f8u, 0x00004595u, 0x00050041u, 0x00000046u, 0x00004596u, 0x00004569u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004597u, 0x00004596u, 0x000500abu, 0x00000069u, 0x00004599u, 0x00004597u, 0x0000457fu, 0x000300f7u, 0x0000459au, 0x00000000u, 0x000400fau, 0x00004599u, 0x0000459bu, 0x0000459au, 0x000200f8u, 0x0000459bu, 0x0004003du, 0x00000008u, 0x0000459du, 0x00004596u, 0x000500abu, 0x00000069u, 0x0000459eu, 0x0000459du, 0x00000220u, 0x000200f9u, 0x0000459au, 0x000200f8u, 0x0000459au, 0x000700f5u, 0x00000069u, 0x0000459fu, 0x00004599u, 0x00004595u, 0x0000459eu, 0x0000459bu, 0x000300f7u, 0x000045a0u, 0x00000000u, 0x000400fau, 0x0000459fu, 0x000045a1u, 0x000045a0u, 0x000200f8u, 0x000045a1u, 0x00050041u, 0x00000046u, 0x000045a2u, 0x00004567u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000045a3u, 0x000045a2u, 0x000500c7u, 0x00000008u, 0x000045a4u, 0x000045a3u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x000045a5u, 0x000045a4u, 0x00000220u, 0x000300f7u, 0x000045a6u, 0x00000000u, 0x000400fau, 0x000045a5u, 0x000045a7u, 0x000045a8u, 0x000200f8u, 0x000045a8u, 0x00050041u, 0x00000046u, 0x000045aau, 0x0000456au, 0x0000032du, 0x0003003eu, 0x000045aau, 0x00000c52u, 0x000200f9u, 0x000045a6u, 0x000200f8u, 0x000045a7u, 0x00050041u, 0x00000046u, 0x000045a9u, 0x0000456au, 0x0000032du, 0x0003003eu, 0x000045a9u, 0x00000c0du, 0x000200f9u, 0x000045a6u, 0x000200f8u, 0x000045a6u, 0x0003003eu, 0x00004545u, 0x00000559u, 0x000200f9u, 0x000045a0u, 0x000200f8u, 0x000045a0u, 0x000600a9u, 0x00000069u, 0x0000f3a1u, 0x0000459fu, 0x00000559u, 0x00009243u, 0x00050041u, 0x00000046u, 0x000045abu, 0x00004569u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045acu, 0x000045abu, 0x000500abu, 0x00000069u, 0x000045aeu, 0x000045acu, 0x0000457fu, 0x000300f7u, 0x000045afu, 0x00000000u, 0x000400fau, 0x000045aeu, 0x000045b0u, 0x000045afu, 0x000200f8u, 0x000045b0u, 0x0004003du, 0x00000008u, 0x000045b2u, 0x000045abu, 0x000500abu, 0x00000069u, 0x000045b3u, 0x000045b2u, 0x00000220u, 0x000200f9u, 0x000045afu, 0x000200f8u, 0x000045afu, 0x000700f5u, 0x00000069u, 0x000045b4u, 0x000045aeu, 0x000045a0u, 0x000045b3u, 0x000045b0u, 0x000300f7u, 0x000045b5u, 0x00000000u, 0x000400fau, 0x000045b4u, 0x000045b6u, 0x000045b5u, 0x000200f8u, 0x000045b6u, 0x00050041u, 0x00000046u, 0x000045b7u, 0x00004567u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045b8u, 0x000045b7u, 0x000500c7u, 0x00000008u, 0x000045b9u, 0x000045b8u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x000045bau, 0x000045b9u, 0x00000220u, 0x000300f7u, 0x000045bbu, 0x00000000u, 0x000400fau, 0x000045bau, 0x000045bcu, 0x000045bdu, 0x000200f8u, 0x000045bdu, 0x00050041u, 0x00000046u, 0x000045bfu, 0x0000456au, 0x0000045cu, 0x0003003eu, 0x000045bfu, 0x00000c52u, 0x000200f9u, 0x000045bbu, 0x000200f8u, 0x000045bcu, 0x00050041u, 0x00000046u, 0x000045beu, 0x0000456au, 0x0000045cu, 0x0003003eu, 0x000045beu, 0x00000c0du, 0x000200f9u, 0x000045bbu, 0x000200f8u, 0x000045bbu, 0x0003003eu, 0x00004545u, 0x00000559u, 0x000200f9u, 0x000045b5u, 0x000200f8u, 0x000045b5u, 0x000600a9u, 0x00000069u, 0x0000f3a2u, 0x000045b4u, 0x00000559u, 0x0000f3a1u, 0x000200f9u, 0x00004594u, 0x000200f8u, 0x00004594u, 0x000700f5u, 0x00000069u, 0x000092ceu, 0x00009243u, 0x00004586u, 0x0000f3a2u, 0x000045b5u, 0x000300f7u, 0x000045c1u, 0x00000000u, 0x000400fau, 0x0000456fu, 0x000045c2u, 0x000045c1u, 0x000200f8u, 0x000045c2u, 0x0003003eu, 0x0000456au, 0x00000c6cu, 0x0003003eu, 0x00004545u, 0x00000559u, 0x000200f9u, 0x000045c1u, 0x000200f8u, 0x000045c1u, 0x000600a9u, 0x00000069u, 0x0000f3a3u, 0x0000456fu, 0x00000559u, 0x000092ceu, 0x0004003du, 0x000000efu, 0x000045c3u, 0x0000456au, 0x0008000cu, 0x000000efu, 0x000045c4u, 0x00000001u, 0x0000002du, 0x000045c3u, 0x00000c6fu, 0x00000c70u, 0x0003003eu, 0x0000456bu, 0x000045c4u, 0x0003003eu, 0x00004543u, 0x0000f3a3u, 0x0003003eu, 0x00004542u, 0x000045c4u, 0x000200f9u, 0x00004558u, 0x000200f8u, 0x00004558u, 0x000700f5u, 0x00000069u, 0x0000e550u, 0x0000f3a3u, 0x000045c1u, 0x00009243u, 0x0000455au, 0x000700f5u, 0x000000efu, 0x000092d4u, 0x000045c4u, 0x000045c1u, 0x000045e8u, 0x0000455au, 0x0003003eu, 0x00004547u, 0x000092d4u, 0x0003003eu, 0x000020fcu, 0x000092d4u, 0x000200f9u, 0x0000230du, 0x000200f8u, 0x0000230eu, 0x00070041u, 0x00001e06u, 0x0000231au, 0x000002dbu, 0x00000220u, 0x000022f4u, 0x0000022au, 0x0004003du, 0x00000009u, 0x0000231bu, 0x0000231au, 0x0008004fu, 0x00000044u, 0x0000231cu, 0x0000231bu, 0x0000231bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x00000044u, 0x0000231eu, 0x0000231cu, 0x0000f372u, 0x0003003eu, 0x00002131u, 0x0000231eu, 0x000300f7u, 0x00002320u, 0x00000000u, 0x000400fau, 0x000021d2u, 0x00002321u, 0x00002322u, 0x000200f8u, 0x00002322u, 0x0003003eu, 0x00002135u, 0x0000231eu, 0x0007004fu, 0x000000efu, 0x00004540u, 0x0000231eu, 0x0000231eu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000453eu, 0x00004540u, 0x0003003eu, 0x000020fcu, 0x00004540u, 0x000200f9u, 0x00002320u, 0x000200f8u, 0x00002321u, 0x0003003eu, 0x00002133u, 0x0000231eu, 0x0003003eu, 0x00002134u, 0x000092e6u, 0x00050041u, 0x00000046u, 0x000044c4u, 0x00002133u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000044c5u, 0x000044c4u, 0x0003003eu, 0x000044bau, 0x000044c5u, 0x000500b3u, 0x00000069u, 0x000044c7u, 0x000044c5u, 0x00000220u, 0x0003003eu, 0x000044bbu, 0x000044c7u, 0x000500c7u, 0x00000008u, 0x000044c9u, 0x000044c5u, 0x00000c0du, 0x0003003eu, 0x000044bau, 0x000044c9u, 0x0003003eu, 0x000044bdu, 0x000044c9u, 0x0006000cu, 0x00000008u, 0x00004525u, 0x00000001u, 0x0000004au, 0x000044c9u, 0x00050082u, 0x00000008u, 0x00004526u, 0x0000026fu, 0x00004525u, 0x0007000cu, 0x00000008u, 0x00004527u, 0x00000001u, 0x00000027u, 0x00004526u, 0x0000026fu, 0x0003003eu, 0x0000451du, 0x00004527u, 0x000500c4u, 0x00000008u, 0x0000452au, 0x000044c9u, 0x00004527u, 0x000500c7u, 0x00000008u, 0x0000452bu, 0x0000452au, 0x00000b29u, 0x0003003eu, 0x0000451eu, 0x0000452bu, 0x000500c7u, 0x00000008u, 0x0000452du, 0x0000452bu, 0x0000035eu, 0x0003003eu, 0x0000451fu, 0x0000452du, 0x000500c3u, 0x00000008u, 0x0000452fu, 0x0000452bu, 0x0000025du, 0x0003003eu, 0x00004521u, 0x00000bedu, 0x00050041u, 0x000001afu, 0x00004530u, 0x00004521u, 0x0000452fu, 0x0004003du, 0x000001aeu, 0x00004531u, 0x00004530u, 0x00040072u, 0x000000efu, 0x00004532u, 0x00004531u, 0x0003003eu, 0x00004520u, 0x00004532u, 0x00050041u, 0x00000046u, 0x00004533u, 0x00004520u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004534u, 0x00004533u, 0x00050084u, 0x00000008u, 0x00004536u, 0x00004534u, 0x0000452du, 0x000500c3u, 0x00000008u, 0x00004537u, 0x00004536u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00004538u, 0x00004520u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004539u, 0x00004538u, 0x00050080u, 0x00000008u, 0x0000453au, 0x00004537u, 0x00004539u, 0x0003003eu, 0x00004522u, 0x0000453au, 0x00050050u, 0x000000efu, 0x0000453du, 0x0000453au, 0x00004527u, 0x0003003eu, 0x00004523u, 0x0000453du, 0x0003003eu, 0x000044bcu, 0x0000453du, 0x00050041u, 0x00000046u, 0x000044ccu, 0x000044bcu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000044cdu, 0x000044ccu, 0x0003003eu, 0x000044beu, 0x000044cdu, 0x0004003du, 0x00000044u, 0x000044ceu, 0x00002133u, 0x0007004fu, 0x000000efu, 0x000044cfu, 0x000044ceu, 0x000044ceu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x000044d0u, 0x000044bcu, 0x0000032du, 0x0004003du, 0x00000008u, 0x000044d1u, 0x000044d0u, 0x00050050u, 0x000000efu, 0x000044d2u, 0x000044d1u, 0x000044d1u, 0x00050084u, 0x000000efu, 0x000044d3u, 0x000044cfu, 0x000044d2u, 0x0003003eu, 0x000044bfu, 0x000044d3u, 0x000500c3u, 0x00000008u, 0x000044d5u, 0x00000c20u, 0x000044cdu, 0x0004007eu, 0x00000008u, 0x000044d6u, 0x000044d5u, 0x000500c7u, 0x00000008u, 0x000044d7u, 0x00000c1fu, 0x000044d6u, 0x0003003eu, 0x000044c0u, 0x000044d7u, 0x0004003du, 0x000000efu, 0x000044d8u, 0x000044bfu, 0x00050050u, 0x000000efu, 0x000044dau, 0x000044d7u, 0x000044d7u, 0x000500c7u, 0x000000efu, 0x000044dbu, 0x000044d8u, 0x000044dau, 0x0003003eu, 0x000044c1u, 0x000044dbu, 0x000500abu, 0x00000069u, 0x000044ddu, 0x000044cdu, 0x0000026fu, 0x000300f7u, 0x000044deu, 0x00000000u, 0x000400fau, 0x000044ddu, 0x000044dfu, 0x000044e0u, 0x000200f8u, 0x000044e0u, 0x0004003du, 0x000000efu, 0x000044e6u, 0x000044bfu, 0x000500c4u, 0x000000efu, 0x000044e8u, 0x000044e6u, 0x0000f376u, 0x0003003eu, 0x000044c2u, 0x000044e8u, 0x000200f9u, 0x000044deu, 0x000200f8u, 0x000044dfu, 0x0004003du, 0x000000efu, 0x000044e1u, 0x000044bfu, 0x00050082u, 0x00000008u, 0x000044e3u, 0x0000026cu, 0x000044cdu, 0x00050050u, 0x000000efu, 0x000044e4u, 0x000044e3u, 0x000044e3u, 0x000500c3u, 0x000000efu, 0x000044e5u, 0x000044e1u, 0x000044e4u, 0x0003003eu, 0x000044bfu, 0x000044e5u, 0x0003003eu, 0x000044c2u, 0x000044e5u, 0x000200f9u, 0x000044deu, 0x000200f8u, 0x000044deu, 0x0004003du, 0x000000efu, 0x000044e9u, 0x000044c1u, 0x000500abu, 0x0000087bu, 0x000044eau, 0x000044e9u, 0x00000c39u, 0x0004009au, 0x00000069u, 0x000044ebu, 0x000044eau, 0x000300f7u, 0x000044ecu, 0x00000000u, 0x000400fau, 0x000044ebu, 0x000044edu, 0x000044ecu, 0x000200f8u, 0x000044edu, 0x00050041u, 0x00000046u, 0x000044eeu, 0x000044c1u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000044efu, 0x000044eeu, 0x000500abu, 0x00000069u, 0x000044f1u, 0x000044efu, 0x000044d7u, 0x000300f7u, 0x000044f2u, 0x00000000u, 0x000400fau, 0x000044f1u, 0x000044f3u, 0x000044f2u, 0x000200f8u, 0x000044f3u, 0x0004003du, 0x00000008u, 0x000044f5u, 0x000044eeu, 0x000500abu, 0x00000069u, 0x000044f6u, 0x000044f5u, 0x00000220u, 0x000200f9u, 0x000044f2u, 0x000200f8u, 0x000044f2u, 0x000700f5u, 0x00000069u, 0x000044f7u, 0x000044f1u, 0x000044edu, 0x000044f6u, 0x000044f3u, 0x000300f7u, 0x000044f8u, 0x00000000u, 0x000400fau, 0x000044f7u, 0x000044f9u, 0x000044f8u, 0x000200f8u, 0x000044f9u, 0x00050041u, 0x00000046u, 0x000044fau, 0x000044bfu, 0x0000032du, 0x0004003du, 0x00000008u, 0x000044fbu, 0x000044fau, 0x000500c7u, 0x00000008u, 0x000044fcu, 0x000044fbu, 0x00000c20u, 0x000500aau, 0x00000069u, 0x000044fdu, 0x000044fcu, 0x00000220u, 0x000300f7u, 0x000044feu, 0x00000000u, 0x000400fau, 0x000044fdu, 0x000044ffu, 0x00004500u, 0x000200f8u, 0x00004500u, 0x00050041u, 0x00000046u, 0x00004502u, 0x000044c2u, 0x0000032du, 0x0003003eu, 0x00004502u, 0x00000c52u, 0x000200f9u, 0x000044feu, 0x000200f8u, 0x000044ffu, 0x00050041u, 0x00000046u, 0x00004501u, 0x000044c2u, 0x0000032du, 0x0003003eu, 0x00004501u, 0x00000c0du, 0x000200f9u, 0x000044feu, 0x000200f8u, 0x000044feu, 0x0003003eu, 0x00002134u, 0x00000559u, 0x000200f9u, 0x000044f8u, 0x000200f8u, 0x000044f8u, 0x000600a9u, 0x00000069u, 0x0000f3a4u, 0x000044f7u, 0x00000559u, 0x000092e6u, 0x00050041u, 0x00000046u, 0x00004503u, 0x000044c1u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004504u, 0x00004503u, 0x000500abu, 0x00000069u, 0x00004506u, 0x00004504u, 0x000044d7u, 0x000300f7u, 0x00004507u, 0x00000000u, 0x000400fau, 0x00004506u, 0x00004508u, 0x00004507u, 0x000200f8u, 0x00004508u, 0x0004003du, 0x00000008u, 0x0000450au, 0x00004503u, 0x000500abu, 0x00000069u, 0x0000450bu, 0x0000450au, 0x00000220u, 0x000200f9u, 0x00004507u, 0x000200f8u, 0x00004507u, 0x000700f5u, 0x00000069u, 0x0000450cu, 0x00004506u, 0x000044f8u, 0x0000450bu, 0x00004508u, 0x000300f7u, 0x0000450du, 0x00000000u, 0x000400fau, 0x0000450cu, 0x0000450eu, 0x0000450du, 0x000200f8u, 0x0000450eu, 0x00050041u, 0x00000046u, 0x0000450fu, 0x000044bfu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004510u, 0x0000450fu, 0x000500c7u, 0x00000008u, 0x00004511u, 0x00004510u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00004512u, 0x00004511u, 0x00000220u, 0x000300f7u, 0x00004513u, 0x00000000u, 0x000400fau, 0x00004512u, 0x00004514u, 0x00004515u, 0x000200f8u, 0x00004515u, 0x00050041u, 0x00000046u, 0x00004517u, 0x000044c2u, 0x0000045cu, 0x0003003eu, 0x00004517u, 0x00000c52u, 0x000200f9u, 0x00004513u, 0x000200f8u, 0x00004514u, 0x00050041u, 0x00000046u, 0x00004516u, 0x000044c2u, 0x0000045cu, 0x0003003eu, 0x00004516u, 0x00000c0du, 0x000200f9u, 0x00004513u, 0x000200f8u, 0x00004513u, 0x0003003eu, 0x00002134u, 0x00000559u, 0x000200f9u, 0x0000450du, 0x000200f8u, 0x0000450du, 0x000600a9u, 0x00000069u, 0x0000f3a5u, 0x0000450cu, 0x00000559u, 0x0000f3a4u, 0x000200f9u, 0x000044ecu, 0x000200f8u, 0x000044ecu, 0x000700f5u, 0x00000069u, 0x00009370u, 0x000092e6u, 0x000044deu, 0x0000f3a5u, 0x0000450du, 0x000300f7u, 0x00004519u, 0x00000000u, 0x000400fau, 0x000044c7u, 0x0000451au, 0x00004519u, 0x000200f8u, 0x0000451au, 0x0003003eu, 0x000044c2u, 0x00000c6cu, 0x0003003eu, 0x00002134u, 0x00000559u, 0x000200f9u, 0x00004519u, 0x000200f8u, 0x00004519u, 0x000600a9u, 0x00000069u, 0x0000f3a6u, 0x000044c7u, 0x00000559u, 0x00009370u, 0x0004003du, 0x000000efu, 0x0000451bu, 0x000044c2u, 0x0008000cu, 0x000000efu, 0x0000451cu, 0x00000001u, 0x0000002du, 0x0000451bu, 0x00000c6fu, 0x00000c70u, 0x0003003eu, 0x000044c3u, 0x0000451cu, 0x0003003eu, 0x00002132u, 0x0000f3a6u, 0x0003003eu, 0x000020fcu, 0x0000451cu, 0x000200f9u, 0x00002320u, 0x000200f8u, 0x00002320u, 0x000700f5u, 0x00000069u, 0x0000e63fu, 0x0000f3a6u, 0x00004519u, 0x000092e6u, 0x00002322u, 0x000700f5u, 0x000000efu, 0x00009712u, 0x0000451cu, 0x00004519u, 0x00004540u, 0x00002322u, 0x000200f9u, 0x0000230du, 0x000200f8u, 0x0000230du, 0x000700f5u, 0x00000069u, 0x0000e63eu, 0x0000e63fu, 0x00002320u, 0x000092e6u, 0x00004558u, 0x000700f5u, 0x00000069u, 0x0000e545u, 0x00009243u, 0x00002320u, 0x0000e550u, 0x00004558u, 0x000700f5u, 0x000000efu, 0x00009711u, 0x00009712u, 0x00002320u, 0x000092d4u, 0x00004558u, 0x0003003eu, 0x0000210eu, 0x000081bdu, 0x0003003eu, 0x000020ccu, 0x00000559u, 0x000200f9u, 0x000022e9u, 0x000200f8u, 0x000022e9u, 0x000700f5u, 0x00000069u, 0x0000e63du, 0x000092e6u, 0x000022ccu, 0x0000e63eu, 0x0000230du, 0x000700f5u, 0x00000069u, 0x0000e544u, 0x00009243u, 0x000022ccu, 0x0000e545u, 0x0000230du, 0x000700f5u, 0x000000efu, 0x000096bdu, 0x00007ff5u, 0x000022ccu, 0x00009711u, 0x0000230du, 0x000600a9u, 0x00000006u, 0x0000f3a7u, 0x000021fcu, 0x000081bdu, 0x00009600u, 0x000600a9u, 0x00000069u, 0x0000f3a8u, 0x000021fcu, 0x00000559u, 0x000021f9u, 0x000300f7u, 0x00002335u, 0x00000000u, 0x000400fau, 0x0000f3a8u, 0x00002336u, 0x00002335u, 0x000200f8u, 0x00002336u, 0x000400a8u, 0x00000069u, 0x00002339u, 0x00002208u, 0x000500a7u, 0x00000069u, 0x0000233au, 0x00002202u, 0x00002339u, 0x000300f7u, 0x0000233bu, 0x00000000u, 0x000400fau, 0x0000233au, 0x0000233cu, 0x0000233du, 0x000200f8u, 0x0000233du, 0x00080041u, 0x00000671u, 0x00002344u, 0x00000a12u, 0x00000220u, 0x00001f93u, 0x0000022du, 0x0000f3a7u, 0x0004003du, 0x0000000fu, 0x00002345u, 0x00002344u, 0x00040071u, 0x00000006u, 0x00002346u, 0x00002345u, 0x0003003eu, 0x0000213du, 0x00002346u, 0x0003003eu, 0x0000213fu, 0x00002346u, 0x00060041u, 0x000002b4u, 0x00004628u, 0x000002b2u, 0x00000220u, 0x00002346u, 0x0004003du, 0x000002aeu, 0x00004629u, 0x00004628u, 0x00050051u, 0x00000006u, 0x0000462au, 0x00004629u, 0x00000000u, 0x0003003eu, 0x00006e36u, 0x0000462au, 0x00050051u, 0x00000006u, 0x0000462cu, 0x00004629u, 0x00000001u, 0x0003003eu, 0x00006e37u, 0x0000462cu, 0x00050051u, 0x00000006u, 0x0000462eu, 0x00004629u, 0x00000002u, 0x0003003eu, 0x00006e38u, 0x0000462eu, 0x00050051u, 0x00000006u, 0x00004630u, 0x00004629u, 0x00000003u, 0x0003003eu, 0x00006e39u, 0x00004630u, 0x00050051u, 0x00000006u, 0x00004632u, 0x00004629u, 0x00000004u, 0x0003003eu, 0x00006e3au, 0x00004632u, 0x00050051u, 0x00000006u, 0x00004634u, 0x00004629u, 0x00000005u, 0x0003003eu, 0x00006e3bu, 0x00004634u, 0x00050051u, 0x0000000fu, 0x00004636u, 0x00004629u, 0x00000006u, 0x0003003eu, 0x00006e3cu, 0x00004636u, 0x00050051u, 0x0000000fu, 0x00004638u, 0x00004629u, 0x00000007u, 0x0003003eu, 0x00006e3du, 0x00004638u, 0x00050051u, 0x0000000fu, 0x0000463au, 0x00004629u, 0x00000008u, 0x0003003eu, 0x00006e3eu, 0x0000463au, 0x00050051u, 0x0000000fu, 0x0000463cu, 0x00004629u, 0x00000009u, 0x0003003eu, 0x00006e3fu, 0x0000463cu, 0x00050051u, 0x0000000fu, 0x0000463eu, 0x00004629u, 0x0000000au, 0x0003003eu, 0x00006e40u, 0x0000463eu, 0x00050051u, 0x0000000fu, 0x00004640u, 0x00004629u, 0x0000000bu, 0x0003003eu, 0x00006e41u, 0x00004640u, 0x00050051u, 0x0000000fu, 0x00004642u, 0x00004629u, 0x0000000cu, 0x0003003eu, 0x00006e42u, 0x00004642u, 0x00050051u, 0x0000000fu, 0x00004644u, 0x00004629u, 0x0000000du, 0x0003003eu, 0x00006e43u, 0x00004644u, 0x00110050u, 0x00000023u, 0x00006e52u, 0x0000462au, 0x0000462cu, 0x0000462eu, 0x00004630u, 0x00004632u, 0x00004634u, 0x00004636u, 0x00004638u, 0x0000463au, 0x0000463cu, 0x0000463eu, 0x00004640u, 0x00004642u, 0x00004644u, 0x0003003eu, 0x00006e53u, 0x0000462au, 0x0003003eu, 0x00006e54u, 0x0000462cu, 0x0003003eu, 0x00006e55u, 0x0000462eu, 0x0003003eu, 0x00006e56u, 0x00004630u, 0x0003003eu, 0x00006e57u, 0x00004632u, 0x0003003eu, 0x00006e58u, 0x00004634u, 0x0003003eu, 0x00006e59u, 0x00004636u, 0x0003003eu, 0x00006e5au, 0x00004638u, 0x0003003eu, 0x00006e5bu, 0x0000463au, 0x0003003eu, 0x00006e5cu, 0x0000463cu, 0x0003003eu, 0x00006e5du, 0x0000463eu, 0x0003003eu, 0x00006e5eu, 0x00004640u, 0x0003003eu, 0x00006e5fu, 0x00004642u, 0x0003003eu, 0x00006e60u, 0x00004644u, 0x0003003eu, 0x0000770bu, 0x0000462au, 0x0003003eu, 0x0000770cu, 0x0000462cu, 0x0003003eu, 0x0000770du, 0x0000462eu, 0x0003003eu, 0x0000770eu, 0x00004630u, 0x0003003eu, 0x0000770fu, 0x00004632u, 0x0003003eu, 0x00007710u, 0x00004634u, 0x0003003eu, 0x00007711u, 0x00004636u, 0x0003003eu, 0x00007712u, 0x00004638u, 0x0003003eu, 0x00007713u, 0x0000463au, 0x0003003eu, 0x00007714u, 0x0000463cu, 0x0003003eu, 0x00007715u, 0x0000463eu, 0x0003003eu, 0x00007716u, 0x00004640u, 0x0003003eu, 0x00007717u, 0x00004642u, 0x0003003eu, 0x00007718u, 0x00004644u, 0x0003003eu, 0x00007736u, 0x0000462au, 0x0003003eu, 0x00007737u, 0x0000462cu, 0x0003003eu, 0x00007738u, 0x0000462eu, 0x0003003eu, 0x00007739u, 0x00004630u, 0x0003003eu, 0x0000773au, 0x00004632u, 0x0003003eu, 0x0000773bu, 0x00004634u, 0x0003003eu, 0x0000773cu, 0x00004636u, 0x0003003eu, 0x0000773du, 0x00004638u, 0x0003003eu, 0x0000773eu, 0x0000463au, 0x0003003eu, 0x0000773fu, 0x0000463cu, 0x0003003eu, 0x00007740u, 0x0000463eu, 0x0003003eu, 0x00007741u, 0x00004640u, 0x0003003eu, 0x00007742u, 0x00004642u, 0x0003003eu, 0x00007743u, 0x00004644u, 0x0003003eu, 0x00002141u, 0x000021b2u, 0x0003003eu, 0x00002142u, 0x000096bdu, 0x0003003eu, 0x00002143u, 0x000021c3u, 0x0003003eu, 0x00002144u, 0x000021c6u, 0x0003003eu, 0x00002145u, 0x000021c9u, 0x0003003eu, 0x00002146u, 0x000021f3u, 0x0003003eu, 0x00002147u, 0x00002202u, 0x0003003eu, 0x00002148u, 0x0000986bu, 0x00040071u, 0x00000006u, 0x0000478au, 0x00004644u, 0x0004007cu, 0x00000008u, 0x0000478bu, 0x0000478au, 0x000500c7u, 0x00000008u, 0x0000478cu, 0x0000478bu, 0x0000022au, 0x000500abu, 0x00000069u, 0x0000478du, 0x0000478cu, 0x00000220u, 0x0004007cu, 0x00000008u, 0x00004790u, 0x0000462au, 0x0004007cu, 0x00000008u, 0x00004793u, 0x0000462cu, 0x00040071u, 0x00000006u, 0x00004796u, 0x0000463eu, 0x0004007cu, 0x00000008u, 0x00004797u, 0x00004796u, 0x0003003eu, 0x00004647u, 0x0000478du, 0x00050041u, 0x00000046u, 0x00004798u, 0x00002142u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004799u, 0x00004798u, 0x0003003eu, 0x00004648u, 0x00004799u, 0x0003003eu, 0x00004649u, 0x00004790u, 0x0003003eu, 0x0000464au, 0x00004793u, 0x0003003eu, 0x0000464bu, 0x00004797u, 0x0008000cu, 0x00000008u, 0x00004b53u, 0x00000001u, 0x0000002du, 0x00004799u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x00004648u, 0x00004b53u, 0x000500b1u, 0x00000069u, 0x00004b55u, 0x00004797u, 0x00000266u, 0x000300f7u, 0x00004b56u, 0x00000000u, 0x000400fau, 0x00004b55u, 0x00004b57u, 0x00004b58u, 0x000200f8u, 0x00004b58u, 0x00050082u, 0x00000008u, 0x00004b5du, 0x0000114fu, 0x00004797u, 0x000500c4u, 0x00000008u, 0x00004b5fu, 0x00004b53u, 0x00004b5du, 0x0003003eu, 0x00004648u, 0x00004b5fu, 0x000500c3u, 0x00000008u, 0x00004b61u, 0x00004b5fu, 0x00000554u, 0x0003003eu, 0x00004648u, 0x00004b61u, 0x000200f9u, 0x00004b56u, 0x000200f8u, 0x00004b57u, 0x000500c3u, 0x00000008u, 0x00004b5bu, 0x00004b53u, 0x00004797u, 0x0003003eu, 0x00004648u, 0x00004b5bu, 0x000200f9u, 0x00004b56u, 0x000200f8u, 0x00004b56u, 0x000700f5u, 0x00000008u, 0x000098bcu, 0x00004b5bu, 0x00004b57u, 0x00004b61u, 0x00004b58u, 0x000300f7u, 0x00004b63u, 0x00000000u, 0x000400fau, 0x0000478du, 0x00004b64u, 0x00004b65u, 0x000200f8u, 0x00004b65u, 0x000500c4u, 0x00000008u, 0x00004b7bu, 0x00004790u, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004b7du, 0x000098bcu, 0x00004b7bu, 0x0003003eu, 0x00004648u, 0x00004b7du, 0x000200f9u, 0x00004b63u, 0x000200f8u, 0x00004b64u, 0x000500c3u, 0x00000008u, 0x00004b67u, 0x000098bcu, 0x00000230u, 0x000500afu, 0x00000069u, 0x00004b69u, 0x00004b67u, 0x00004793u, 0x0003003eu, 0x00004b50u, 0x00004b69u, 0x000300f7u, 0x00004b6bu, 0x00000000u, 0x000400fau, 0x00004b69u, 0x00004b6cu, 0x00004b6du, 0x000200f8u, 0x00004b6du, 0x000500c4u, 0x00000008u, 0x00004b77u, 0x00004790u, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004b78u, 0x000098bcu, 0x00004b77u, 0x0007000cu, 0x00000008u, 0x00004b79u, 0x00000001u, 0x0000002au, 0x00004b78u, 0x00000220u, 0x0003003eu, 0x00004648u, 0x00004b79u, 0x000200f9u, 0x00004b6bu, 0x000200f8u, 0x00004b6cu, 0x000500c3u, 0x00000008u, 0x00004b6fu, 0x00004793u, 0x0000022du, 0x000500c3u, 0x00000008u, 0x00004b71u, 0x00004790u, 0x0000022du, 0x00050082u, 0x00000008u, 0x00004b72u, 0x00004b6fu, 0x00004b71u, 0x000500c7u, 0x00000008u, 0x00004b73u, 0x00004b72u, 0x00001166u, 0x000500c4u, 0x00000008u, 0x00004b74u, 0x00004b73u, 0x00000236u, 0x0003003eu, 0x00004648u, 0x00004b74u, 0x000200f9u, 0x00004b6bu, 0x000200f8u, 0x00004b6bu, 0x000700f5u, 0x00000008u, 0x000098bfu, 0x00004b74u, 0x00004b6cu, 0x00004b79u, 0x00004b6du, 0x000200f9u, 0x00004b63u, 0x000200f8u, 0x00004b63u, 0x000700f5u, 0x00000008u, 0x000098beu, 0x000098bfu, 0x00004b6bu, 0x00004b7du, 0x00004b65u, 0x0003003eu, 0x00004b51u, 0x000098beu, 0x0003003eu, 0x00004798u, 0x000098beu, 0x000500c7u, 0x00000008u, 0x000047a0u, 0x0000478bu, 0x00000233u, 0x000500abu, 0x00000069u, 0x000047a1u, 0x000047a0u, 0x00000220u, 0x0004007cu, 0x00000008u, 0x000047a4u, 0x0000462eu, 0x0004007cu, 0x00000008u, 0x000047a7u, 0x00004630u, 0x00040071u, 0x00000006u, 0x000047aau, 0x00004642u, 0x0004007cu, 0x00000008u, 0x000047abu, 0x000047aau, 0x0003003eu, 0x0000464cu, 0x000047a1u, 0x00050041u, 0x00000046u, 0x000047acu, 0x00002142u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000047adu, 0x000047acu, 0x0003003eu, 0x0000464du, 0x000047adu, 0x0003003eu, 0x0000464eu, 0x000047a4u, 0x0003003eu, 0x0000464fu, 0x000047a7u, 0x0003003eu, 0x00004650u, 0x000047abu, 0x0008000cu, 0x00000008u, 0x00004b82u, 0x00000001u, 0x0000002du, 0x000047adu, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x0000464du, 0x00004b82u, 0x000500b1u, 0x00000069u, 0x00004b84u, 0x000047abu, 0x00000266u, 0x000300f7u, 0x00004b85u, 0x00000000u, 0x000400fau, 0x00004b84u, 0x00004b86u, 0x00004b87u, 0x000200f8u, 0x00004b87u, 0x00050082u, 0x00000008u, 0x00004b8cu, 0x0000114fu, 0x000047abu, 0x000500c4u, 0x00000008u, 0x00004b8eu, 0x00004b82u, 0x00004b8cu, 0x0003003eu, 0x0000464du, 0x00004b8eu, 0x000500c3u, 0x00000008u, 0x00004b90u, 0x00004b8eu, 0x00000554u, 0x0003003eu, 0x0000464du, 0x00004b90u, 0x000200f9u, 0x00004b85u, 0x000200f8u, 0x00004b86u, 0x000500c3u, 0x00000008u, 0x00004b8au, 0x00004b82u, 0x000047abu, 0x0003003eu, 0x0000464du, 0x00004b8au, 0x000200f9u, 0x00004b85u, 0x000200f8u, 0x00004b85u, 0x000700f5u, 0x00000008u, 0x000098ceu, 0x00004b8au, 0x00004b86u, 0x00004b90u, 0x00004b87u, 0x000300f7u, 0x00004b92u, 0x00000000u, 0x000400fau, 0x000047a1u, 0x00004b93u, 0x00004b94u, 0x000200f8u, 0x00004b94u, 0x000500c4u, 0x00000008u, 0x00004baau, 0x000047a4u, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004bacu, 0x000098ceu, 0x00004baau, 0x0003003eu, 0x0000464du, 0x00004bacu, 0x000200f9u, 0x00004b92u, 0x000200f8u, 0x00004b93u, 0x000500c3u, 0x00000008u, 0x00004b96u, 0x000098ceu, 0x00000230u, 0x000500afu, 0x00000069u, 0x00004b98u, 0x00004b96u, 0x000047a7u, 0x0003003eu, 0x00004b7fu, 0x00004b98u, 0x000300f7u, 0x00004b9au, 0x00000000u, 0x000400fau, 0x00004b98u, 0x00004b9bu, 0x00004b9cu, 0x000200f8u, 0x00004b9cu, 0x000500c4u, 0x00000008u, 0x00004ba6u, 0x000047a4u, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004ba7u, 0x000098ceu, 0x00004ba6u, 0x0007000cu, 0x00000008u, 0x00004ba8u, 0x00000001u, 0x0000002au, 0x00004ba7u, 0x00000220u, 0x0003003eu, 0x0000464du, 0x00004ba8u, 0x000200f9u, 0x00004b9au, 0x000200f8u, 0x00004b9bu, 0x000500c3u, 0x00000008u, 0x00004b9eu, 0x000047a7u, 0x0000022du, 0x000500c3u, 0x00000008u, 0x00004ba0u, 0x000047a4u, 0x0000022du, 0x00050082u, 0x00000008u, 0x00004ba1u, 0x00004b9eu, 0x00004ba0u, 0x000500c7u, 0x00000008u, 0x00004ba2u, 0x00004ba1u, 0x00001166u, 0x000500c4u, 0x00000008u, 0x00004ba3u, 0x00004ba2u, 0x00000236u, 0x0003003eu, 0x0000464du, 0x00004ba3u, 0x000200f9u, 0x00004b9au, 0x000200f8u, 0x00004b9au, 0x000700f5u, 0x00000008u, 0x000098d1u, 0x00004ba3u, 0x00004b9bu, 0x00004ba8u, 0x00004b9cu, 0x000200f9u, 0x00004b92u, 0x000200f8u, 0x00004b92u, 0x000700f5u, 0x00000008u, 0x000098d0u, 0x000098d1u, 0x00004b9au, 0x00004bacu, 0x00004b94u, 0x0003003eu, 0x00004b80u, 0x000098d0u, 0x0003003eu, 0x000047acu, 0x000098d0u, 0x000300f7u, 0x000047b1u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000047b2u, 0x000047b3u, 0x000200f8u, 0x000047b3u, 0x0003003eu, 0x00004651u, 0x00000c39u, 0x000200f9u, 0x000047b1u, 0x000200f8u, 0x000047b2u, 0x0004003du, 0x000000efu, 0x000047b4u, 0x00002142u, 0x000500c7u, 0x000000efu, 0x000047b6u, 0x000047b4u, 0x0000f379u, 0x0003003eu, 0x00004651u, 0x000047b6u, 0x000200f9u, 0x000047b1u, 0x000200f8u, 0x000047b1u, 0x00050041u, 0x00000046u, 0x000047b7u, 0x00004651u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000047b8u, 0x000047b7u, 0x00050041u, 0x00000046u, 0x000047b9u, 0x00004651u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000047bau, 0x000047b9u, 0x00050080u, 0x00000008u, 0x000047bbu, 0x000047b8u, 0x000047bau, 0x0003003eu, 0x00004652u, 0x000047bbu, 0x0004003du, 0x000000efu, 0x000047bcu, 0x00002142u, 0x000500c3u, 0x000000efu, 0x000047beu, 0x000047bcu, 0x0000f378u, 0x0003003eu, 0x00002142u, 0x000047beu, 0x0003003eu, 0x00006d06u, 0x0000463cu, 0x0003003eu, 0x00006d07u, 0x00004644u, 0x0004003du, 0x00000008u, 0x000047c1u, 0x00004798u, 0x0003003eu, 0x00004655u, 0x000047c1u, 0x00040071u, 0x00000006u, 0x00004bb2u, 0x0000463cu, 0x0004007cu, 0x00000008u, 0x00004bb3u, 0x00004bb2u, 0x000500abu, 0x00000069u, 0x00004bb4u, 0x00004bb3u, 0x00000220u, 0x000300f7u, 0x00004bb5u, 0x00000000u, 0x000400fau, 0x00004bb4u, 0x00004bb6u, 0x00004bb5u, 0x000200f8u, 0x00004bb6u, 0x000500c4u, 0x00000008u, 0x00004bb9u, 0x0000022au, 0x0000463cu, 0x0003003eu, 0x00004baeu, 0x00004bb9u, 0x000500c7u, 0x00000008u, 0x00004bbeu, 0x0000478bu, 0x0000022du, 0x000500abu, 0x00000069u, 0x00004bbfu, 0x00004bbeu, 0x00000220u, 0x000300f7u, 0x00004bc0u, 0x00000000u, 0x000400fau, 0x00004bbfu, 0x00004bc1u, 0x00004bc0u, 0x000200f8u, 0x00004bc1u, 0x000500c7u, 0x00000008u, 0x00004bc4u, 0x000047c1u, 0x00004bb9u, 0x00050082u, 0x00000008u, 0x00004bc5u, 0x00004bc4u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004bc6u, 0x00000001u, 0x0000002au, 0x00004bc5u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004bc8u, 0x000047c1u, 0x00004bc6u, 0x0003003eu, 0x00004655u, 0x00004bc8u, 0x000200f9u, 0x00004bc0u, 0x000200f8u, 0x00004bc0u, 0x000700f5u, 0x00000008u, 0x0000992fu, 0x000047c1u, 0x00004bb6u, 0x00004bc8u, 0x00004bc1u, 0x00050082u, 0x00000008u, 0x00004bcau, 0x00004bb9u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004bccu, 0x0000992fu, 0x00004bcau, 0x0003003eu, 0x00004655u, 0x00004bccu, 0x000200f9u, 0x00004bb5u, 0x000200f8u, 0x00004bb5u, 0x000700f5u, 0x00000008u, 0x00009930u, 0x000047c1u, 0x000047b1u, 0x00004bccu, 0x00004bc0u, 0x0003003eu, 0x00004bafu, 0x00009930u, 0x0003003eu, 0x00004653u, 0x00009930u, 0x0003003eu, 0x00006d0au, 0x00004640u, 0x0003003eu, 0x00006d0bu, 0x00004644u, 0x0004003du, 0x00000008u, 0x000047c5u, 0x000047acu, 0x0003003eu, 0x00004658u, 0x000047c5u, 0x00040071u, 0x00000006u, 0x00004bd2u, 0x00004640u, 0x0004007cu, 0x00000008u, 0x00004bd3u, 0x00004bd2u, 0x000500abu, 0x00000069u, 0x00004bd4u, 0x00004bd3u, 0x00000220u, 0x000300f7u, 0x00004bd5u, 0x00000000u, 0x000400fau, 0x00004bd4u, 0x00004bd6u, 0x00004bd5u, 0x000200f8u, 0x00004bd6u, 0x000500c4u, 0x00000008u, 0x00004bd9u, 0x0000022au, 0x00004640u, 0x0003003eu, 0x00004bceu, 0x00004bd9u, 0x000500c7u, 0x00000008u, 0x00004bdeu, 0x0000478bu, 0x0000025du, 0x000500abu, 0x00000069u, 0x00004bdfu, 0x00004bdeu, 0x00000220u, 0x000300f7u, 0x00004be0u, 0x00000000u, 0x000400fau, 0x00004bdfu, 0x00004be1u, 0x00004be0u, 0x000200f8u, 0x00004be1u, 0x000500c7u, 0x00000008u, 0x00004be4u, 0x000047c5u, 0x00004bd9u, 0x00050082u, 0x00000008u, 0x00004be5u, 0x00004be4u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004be6u, 0x00000001u, 0x0000002au, 0x00004be5u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004be8u, 0x000047c5u, 0x00004be6u, 0x0003003eu, 0x00004658u, 0x00004be8u, 0x000200f9u, 0x00004be0u, 0x000200f8u, 0x00004be0u, 0x000700f5u, 0x00000008u, 0x0000994eu, 0x000047c5u, 0x00004bd6u, 0x00004be8u, 0x00004be1u, 0x00050082u, 0x00000008u, 0x00004beau, 0x00004bd9u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004becu, 0x0000994eu, 0x00004beau, 0x0003003eu, 0x00004658u, 0x00004becu, 0x000200f9u, 0x00004bd5u, 0x000200f8u, 0x00004bd5u, 0x000700f5u, 0x00000008u, 0x0000994fu, 0x000047c5u, 0x00004bb5u, 0x00004becu, 0x00004be0u, 0x0003003eu, 0x00004bcfu, 0x0000994fu, 0x0003003eu, 0x00004656u, 0x0000994fu, 0x0004003du, 0x00000008u, 0x000047c8u, 0x00004798u, 0x00050080u, 0x00000008u, 0x000047c9u, 0x000047c8u, 0x0000022au, 0x0003003eu, 0x00006d0eu, 0x0000463cu, 0x0003003eu, 0x00006d0fu, 0x00004644u, 0x0003003eu, 0x0000465bu, 0x000047c9u, 0x000300f7u, 0x00004bf5u, 0x00000000u, 0x000400fau, 0x00004bb4u, 0x00004bf6u, 0x00004bf5u, 0x000200f8u, 0x00004bf6u, 0x000500c4u, 0x00000008u, 0x00004bf9u, 0x0000022au, 0x0000463cu, 0x0003003eu, 0x00004beeu, 0x00004bf9u, 0x000500c7u, 0x00000008u, 0x00004bfeu, 0x0000478bu, 0x0000022du, 0x000500abu, 0x00000069u, 0x00004bffu, 0x00004bfeu, 0x00000220u, 0x000300f7u, 0x00004c00u, 0x00000000u, 0x000400fau, 0x00004bffu, 0x00004c01u, 0x00004c00u, 0x000200f8u, 0x00004c01u, 0x000500c7u, 0x00000008u, 0x00004c04u, 0x000047c9u, 0x00004bf9u, 0x00050082u, 0x00000008u, 0x00004c05u, 0x00004c04u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004c06u, 0x00000001u, 0x0000002au, 0x00004c05u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004c08u, 0x000047c9u, 0x00004c06u, 0x0003003eu, 0x0000465bu, 0x00004c08u, 0x000200f9u, 0x00004c00u, 0x000200f8u, 0x00004c00u, 0x000700f5u, 0x00000008u, 0x0000996du, 0x000047c9u, 0x00004bf6u, 0x00004c08u, 0x00004c01u, 0x00050082u, 0x00000008u, 0x00004c0au, 0x00004bf9u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004c0cu, 0x0000996du, 0x00004c0au, 0x0003003eu, 0x0000465bu, 0x00004c0cu, 0x000200f9u, 0x00004bf5u, 0x000200f8u, 0x00004bf5u, 0x000700f5u, 0x00000008u, 0x0000996eu, 0x000047c9u, 0x00004bd5u, 0x00004c0cu, 0x00004c00u, 0x0003003eu, 0x00004befu, 0x0000996eu, 0x0003003eu, 0x00004659u, 0x0000996eu, 0x0004003du, 0x00000008u, 0x000047cdu, 0x000047acu, 0x00050080u, 0x00000008u, 0x000047ceu, 0x000047cdu, 0x0000022au, 0x0003003eu, 0x00006d12u, 0x00004640u, 0x0003003eu, 0x00006d13u, 0x00004644u, 0x0003003eu, 0x0000465eu, 0x000047ceu, 0x000300f7u, 0x00004c15u, 0x00000000u, 0x000400fau, 0x00004bd4u, 0x00004c16u, 0x00004c15u, 0x000200f8u, 0x00004c16u, 0x000500c4u, 0x00000008u, 0x00004c19u, 0x0000022au, 0x00004640u, 0x0003003eu, 0x00004c0eu, 0x00004c19u, 0x000500c7u, 0x00000008u, 0x00004c1eu, 0x0000478bu, 0x0000025du, 0x000500abu, 0x00000069u, 0x00004c1fu, 0x00004c1eu, 0x00000220u, 0x000300f7u, 0x00004c20u, 0x00000000u, 0x000400fau, 0x00004c1fu, 0x00004c21u, 0x00004c20u, 0x000200f8u, 0x00004c21u, 0x000500c7u, 0x00000008u, 0x00004c24u, 0x000047ceu, 0x00004c19u, 0x00050082u, 0x00000008u, 0x00004c25u, 0x00004c24u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004c26u, 0x00000001u, 0x0000002au, 0x00004c25u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004c28u, 0x000047ceu, 0x00004c26u, 0x0003003eu, 0x0000465eu, 0x00004c28u, 0x000200f9u, 0x00004c20u, 0x000200f8u, 0x00004c20u, 0x000700f5u, 0x00000008u, 0x0000998cu, 0x000047ceu, 0x00004c16u, 0x00004c28u, 0x00004c21u, 0x00050082u, 0x00000008u, 0x00004c2au, 0x00004c19u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004c2cu, 0x0000998cu, 0x00004c2au, 0x0003003eu, 0x0000465eu, 0x00004c2cu, 0x000200f9u, 0x00004c15u, 0x000200f8u, 0x00004c15u, 0x000700f5u, 0x00000008u, 0x0000998du, 0x000047ceu, 0x00004bf5u, 0x00004c2cu, 0x00004c20u, 0x0003003eu, 0x00004c0fu, 0x0000998du, 0x0003003eu, 0x0000465cu, 0x0000998du, 0x00050082u, 0x00000008u, 0x000047d3u, 0x0000998du, 0x0000994fu, 0x0007000cu, 0x00000008u, 0x000047d4u, 0x00000001u, 0x0000002au, 0x000047d3u, 0x000013a4u, 0x0003003eu, 0x0000465fu, 0x000047d4u, 0x000500c7u, 0x00000008u, 0x000047d6u, 0x0000994fu, 0x0000035eu, 0x00050080u, 0x00000008u, 0x000047d8u, 0x000047d6u, 0x000047d4u, 0x0003003eu, 0x0000465cu, 0x000047d8u, 0x0003003eu, 0x00004656u, 0x000047d6u, 0x0004003du, 0x000000efu, 0x000047dcu, 0x00004651u, 0x000500aau, 0x0000087bu, 0x000047ddu, 0x000047dcu, 0x000013aeu, 0x00050051u, 0x00000069u, 0x000047deu, 0x000047ddu, 0x00000000u, 0x00050051u, 0x00000069u, 0x000047dfu, 0x000047ddu, 0x00000001u, 0x00060050u, 0x00000363u, 0x000047e0u, 0x000021f3u, 0x000047deu, 0x000047dfu, 0x0004009bu, 0x00000069u, 0x000047e1u, 0x000047e0u, 0x0003003eu, 0x00002146u, 0x000047e1u, 0x000300f7u, 0x000047e3u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x000047e4u, 0x000047e3u, 0x000200f8u, 0x000047e4u, 0x0003003eu, 0x00004652u, 0x00000220u, 0x000200f9u, 0x000047e3u, 0x000200f8u, 0x000047e3u, 0x000600a9u, 0x00000008u, 0x0000f3a9u, 0x000047e1u, 0x00000220u, 0x000047bbu, 0x00040071u, 0x00000006u, 0x000047e7u, 0x00004636u, 0x0004007cu, 0x00000008u, 0x000047e8u, 0x000047e7u, 0x000500aau, 0x00000069u, 0x000047e9u, 0x000047e8u, 0x0000022au, 0x0003003eu, 0x00004660u, 0x000047e9u, 0x000500afu, 0x00000069u, 0x000047ebu, 0x0000f3a9u, 0x0000114fu, 0x000300f7u, 0x000047ecu, 0x00000000u, 0x000400fau, 0x000047ebu, 0x000047edu, 0x000047eeu, 0x000200f8u, 0x000047eeu, 0x00050050u, 0x000000efu, 0x000047f4u, 0x00009930u, 0x000047d6u, 0x0003003eu, 0x00004662u, 0x000047f4u, 0x000200f9u, 0x000047ecu, 0x000200f8u, 0x000047edu, 0x00050050u, 0x000000efu, 0x000047f1u, 0x0000996eu, 0x000047d8u, 0x0003003eu, 0x00004662u, 0x000047f1u, 0x000200f9u, 0x000047ecu, 0x000200f8u, 0x000047ecu, 0x000700f5u, 0x000000efu, 0x000099b9u, 0x000047f1u, 0x000047edu, 0x000047f4u, 0x000047eeu, 0x0003003eu, 0x00004661u, 0x000099b9u, 0x000300f7u, 0x000047f7u, 0x00000000u, 0x000400fau, 0x000021c3u, 0x000047f8u, 0x000047f9u, 0x000200f8u, 0x000047f9u, 0x000300f7u, 0x0000489eu, 0x00000000u, 0x000d00fbu, 0x000047e8u, 0x0000489eu, 0x00000000u, 0x0000489fu, 0x00000001u, 0x000048a0u, 0x00000002u, 0x000048a1u, 0x00000003u, 0x000048a2u, 0x00000004u, 0x000048a3u, 0x000200f8u, 0x000048a3u, 0x00040071u, 0x00000006u, 0x00004a59u, 0x00004638u, 0x0004007cu, 0x00000008u, 0x00004a5au, 0x00004a59u, 0x000300f7u, 0x00004a5bu, 0x00000000u, 0x000700fbu, 0x00004a5au, 0x00004a5cu, 0x00000000u, 0x00004a5du, 0x00000001u, 0x00004a5eu, 0x000200f8u, 0x00004a5eu, 0x0004007cu, 0x000000b0u, 0x00004aa0u, 0x000099b9u, 0x0003003eu, 0x00006e16u, 0x00004632u, 0x0003003eu, 0x00006e17u, 0x00004634u, 0x0003003eu, 0x0000475cu, 0x000021b2u, 0x0003003eu, 0x0000475du, 0x00004aa0u, 0x00050041u, 0x00000007u, 0x00005d1eu, 0x0000475du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d1fu, 0x00005d1eu, 0x00050084u, 0x00000006u, 0x00005d20u, 0x00004634u, 0x00005d1fu, 0x00050080u, 0x00000006u, 0x00005d21u, 0x00004632u, 0x00005d20u, 0x0003003eu, 0x00005d16u, 0x00005d21u, 0x00050041u, 0x00000007u, 0x00005d22u, 0x0000475du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d23u, 0x00005d22u, 0x00050080u, 0x00000006u, 0x00005d25u, 0x00005d21u, 0x00005d23u, 0x0003003eu, 0x00005d16u, 0x00005d25u, 0x000500c7u, 0x00000006u, 0x00005d27u, 0x00005d25u, 0x00000e65u, 0x0003003eu, 0x00005d16u, 0x00005d27u, 0x0003003eu, 0x00005d17u, 0x00005d27u, 0x0004003du, 0x00000006u, 0x00005d2au, 0x00005d1eu, 0x000500c7u, 0x00000006u, 0x00005d2bu, 0x00005d2au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d2cu, 0x00005d2bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d2eu, 0x00005d27u, 0x00005d2cu, 0x0003003eu, 0x00005d17u, 0x00005d2eu, 0x000500c6u, 0x00000006u, 0x00005d30u, 0x00005d2eu, 0x00000464u, 0x0003003eu, 0x00005d17u, 0x00005d30u, 0x00080041u, 0x00000671u, 0x00005d33u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005d30u, 0x0004003du, 0x0000000fu, 0x00005d34u, 0x00005d33u, 0x00040071u, 0x00000006u, 0x00005d35u, 0x00005d34u, 0x0003003eu, 0x00005d18u, 0x00005d35u, 0x00040071u, 0x00000011u, 0x00005d37u, 0x00005d35u, 0x0004007cu, 0x00000012u, 0x00005d38u, 0x00005d37u, 0x00070050u, 0x00000013u, 0x00005d39u, 0x00005d38u, 0x00005d38u, 0x00005d38u, 0x00005d38u, 0x0003003eu, 0x00005d19u, 0x00005d39u, 0x0003003eu, 0x00004665u, 0x00005d39u, 0x000300f7u, 0x00004aa5u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004aa6u, 0x00004aa5u, 0x000200f8u, 0x00004aa6u, 0x00050050u, 0x000000efu, 0x00004aa9u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004aaau, 0x00004aa9u, 0x0003003eu, 0x00006e1au, 0x00004632u, 0x0003003eu, 0x00006e1bu, 0x00004634u, 0x0003003eu, 0x0000475fu, 0x000021b2u, 0x0003003eu, 0x00004760u, 0x00004aaau, 0x00050041u, 0x00000007u, 0x00005d42u, 0x00004760u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d43u, 0x00005d42u, 0x00050084u, 0x00000006u, 0x00005d44u, 0x00004634u, 0x00005d43u, 0x00050080u, 0x00000006u, 0x00005d45u, 0x00004632u, 0x00005d44u, 0x0003003eu, 0x00005d3au, 0x00005d45u, 0x00050041u, 0x00000007u, 0x00005d46u, 0x00004760u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d47u, 0x00005d46u, 0x00050080u, 0x00000006u, 0x00005d49u, 0x00005d45u, 0x00005d47u, 0x0003003eu, 0x00005d3au, 0x00005d49u, 0x000500c7u, 0x00000006u, 0x00005d4bu, 0x00005d49u, 0x00000e65u, 0x0003003eu, 0x00005d3au, 0x00005d4bu, 0x0003003eu, 0x00005d3bu, 0x00005d4bu, 0x0004003du, 0x00000006u, 0x00005d4eu, 0x00005d42u, 0x000500c7u, 0x00000006u, 0x00005d4fu, 0x00005d4eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d50u, 0x00005d4fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d52u, 0x00005d4bu, 0x00005d50u, 0x0003003eu, 0x00005d3bu, 0x00005d52u, 0x000500c6u, 0x00000006u, 0x00005d54u, 0x00005d52u, 0x00000464u, 0x0003003eu, 0x00005d3bu, 0x00005d54u, 0x00080041u, 0x00000671u, 0x00005d57u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005d54u, 0x0004003du, 0x0000000fu, 0x00005d58u, 0x00005d57u, 0x00040071u, 0x00000006u, 0x00005d59u, 0x00005d58u, 0x0003003eu, 0x00005d3cu, 0x00005d59u, 0x00040071u, 0x00000011u, 0x00005d5bu, 0x00005d59u, 0x0004007cu, 0x00000012u, 0x00005d5cu, 0x00005d5bu, 0x00070050u, 0x00000013u, 0x00005d5du, 0x00005d5cu, 0x00005d5cu, 0x00005d5cu, 0x00005d5cu, 0x0003003eu, 0x00005d3du, 0x00005d5du, 0x0003003eu, 0x0000466du, 0x00005d5du, 0x00050050u, 0x000000efu, 0x00004ab0u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004ab1u, 0x00004ab0u, 0x0003003eu, 0x00006e1eu, 0x00004632u, 0x0003003eu, 0x00006e1fu, 0x00004634u, 0x0003003eu, 0x00004762u, 0x000021b2u, 0x0003003eu, 0x00004763u, 0x00004ab1u, 0x00050041u, 0x00000007u, 0x00005d66u, 0x00004763u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d67u, 0x00005d66u, 0x00050084u, 0x00000006u, 0x00005d68u, 0x00004634u, 0x00005d67u, 0x00050080u, 0x00000006u, 0x00005d69u, 0x00004632u, 0x00005d68u, 0x0003003eu, 0x00005d5eu, 0x00005d69u, 0x00050041u, 0x00000007u, 0x00005d6au, 0x00004763u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d6bu, 0x00005d6au, 0x00050080u, 0x00000006u, 0x00005d6du, 0x00005d69u, 0x00005d6bu, 0x0003003eu, 0x00005d5eu, 0x00005d6du, 0x000500c7u, 0x00000006u, 0x00005d6fu, 0x00005d6du, 0x00000e65u, 0x0003003eu, 0x00005d5eu, 0x00005d6fu, 0x0003003eu, 0x00005d5fu, 0x00005d6fu, 0x0004003du, 0x00000006u, 0x00005d72u, 0x00005d66u, 0x000500c7u, 0x00000006u, 0x00005d73u, 0x00005d72u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d74u, 0x00005d73u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d76u, 0x00005d6fu, 0x00005d74u, 0x0003003eu, 0x00005d5fu, 0x00005d76u, 0x000500c6u, 0x00000006u, 0x00005d78u, 0x00005d76u, 0x00000464u, 0x0003003eu, 0x00005d5fu, 0x00005d78u, 0x00080041u, 0x00000671u, 0x00005d7bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005d78u, 0x0004003du, 0x0000000fu, 0x00005d7cu, 0x00005d7bu, 0x00040071u, 0x00000006u, 0x00005d7du, 0x00005d7cu, 0x0003003eu, 0x00005d60u, 0x00005d7du, 0x00040071u, 0x00000011u, 0x00005d7fu, 0x00005d7du, 0x0004007cu, 0x00000012u, 0x00005d80u, 0x00005d7fu, 0x00070050u, 0x00000013u, 0x00005d81u, 0x00005d80u, 0x00005d80u, 0x00005d80u, 0x00005d80u, 0x0003003eu, 0x00005d61u, 0x00005d81u, 0x0003003eu, 0x00004675u, 0x00005d81u, 0x000200f9u, 0x00004aa5u, 0x000200f8u, 0x00004aa5u, 0x000700f5u, 0x00000013u, 0x00009fdau, 0x00009f14u, 0x00004a5eu, 0x00005d81u, 0x00004aa6u, 0x000700f5u, 0x00000013u, 0x00009e0eu, 0x00009d45u, 0x00004a5eu, 0x00005d5du, 0x00004aa6u, 0x000300f7u, 0x00004ab6u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004ab7u, 0x00004ab6u, 0x000200f8u, 0x00004ab7u, 0x00050050u, 0x000000efu, 0x00004abau, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004abbu, 0x00004abau, 0x0003003eu, 0x00006e22u, 0x00004632u, 0x0003003eu, 0x00006e23u, 0x00004634u, 0x0003003eu, 0x00004765u, 0x000021b2u, 0x0003003eu, 0x00004766u, 0x00004abbu, 0x00050041u, 0x00000007u, 0x00005d8au, 0x00004766u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d8bu, 0x00005d8au, 0x00050084u, 0x00000006u, 0x00005d8cu, 0x00004634u, 0x00005d8bu, 0x00050080u, 0x00000006u, 0x00005d8du, 0x00004632u, 0x00005d8cu, 0x0003003eu, 0x00005d82u, 0x00005d8du, 0x00050041u, 0x00000007u, 0x00005d8eu, 0x00004766u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d8fu, 0x00005d8eu, 0x00050080u, 0x00000006u, 0x00005d91u, 0x00005d8du, 0x00005d8fu, 0x0003003eu, 0x00005d82u, 0x00005d91u, 0x000500c7u, 0x00000006u, 0x00005d93u, 0x00005d91u, 0x00000e65u, 0x0003003eu, 0x00005d82u, 0x00005d93u, 0x0003003eu, 0x00005d83u, 0x00005d93u, 0x0004003du, 0x00000006u, 0x00005d96u, 0x00005d8au, 0x000500c7u, 0x00000006u, 0x00005d97u, 0x00005d96u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d98u, 0x00005d97u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d9au, 0x00005d93u, 0x00005d98u, 0x0003003eu, 0x00005d83u, 0x00005d9au, 0x000500c6u, 0x00000006u, 0x00005d9cu, 0x00005d9au, 0x00000464u, 0x0003003eu, 0x00005d83u, 0x00005d9cu, 0x00080041u, 0x00000671u, 0x00005d9fu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005d9cu, 0x0004003du, 0x0000000fu, 0x00005da0u, 0x00005d9fu, 0x00040071u, 0x00000006u, 0x00005da1u, 0x00005da0u, 0x0003003eu, 0x00005d84u, 0x00005da1u, 0x00040071u, 0x00000011u, 0x00005da3u, 0x00005da1u, 0x0004007cu, 0x00000012u, 0x00005da4u, 0x00005da3u, 0x00070050u, 0x00000013u, 0x00005da5u, 0x00005da4u, 0x00005da4u, 0x00005da4u, 0x00005da4u, 0x0003003eu, 0x00005d85u, 0x00005da5u, 0x0003003eu, 0x0000467du, 0x00005da5u, 0x000200f9u, 0x00004ab6u, 0x000200f8u, 0x00004ab6u, 0x000700f5u, 0x00000013u, 0x0000a0c0u, 0x00009ff8u, 0x00004aa5u, 0x00005da5u, 0x00004ab7u, 0x000200f9u, 0x00004a5bu, 0x000200f8u, 0x00004a5du, 0x0004007cu, 0x000000b0u, 0x00004a80u, 0x000099b9u, 0x0003003eu, 0x00006e06u, 0x00004632u, 0x0003003eu, 0x00006e07u, 0x00004634u, 0x0003003eu, 0x00004750u, 0x000021b2u, 0x0003003eu, 0x00004751u, 0x00004a80u, 0x00050041u, 0x00000007u, 0x00005c53u, 0x00004751u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c54u, 0x00005c53u, 0x00050084u, 0x00000006u, 0x00005c55u, 0x00004634u, 0x00005c54u, 0x00050080u, 0x00000006u, 0x00005c56u, 0x00004632u, 0x00005c55u, 0x0003003eu, 0x00005c4au, 0x00005c56u, 0x00050041u, 0x00000007u, 0x00005c57u, 0x00004751u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c58u, 0x00005c57u, 0x000500c2u, 0x00000006u, 0x00005c59u, 0x00005c58u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005c5bu, 0x00005c56u, 0x00005c59u, 0x0003003eu, 0x00005c4au, 0x00005c5bu, 0x000500c7u, 0x00000006u, 0x00005c5du, 0x00005c5bu, 0x00000e65u, 0x0003003eu, 0x00005c4au, 0x00005c5du, 0x0004003du, 0x00000006u, 0x00005c5fu, 0x00005c57u, 0x000400c8u, 0x00000006u, 0x00005c60u, 0x00005c5fu, 0x000500c7u, 0x00000006u, 0x00005c61u, 0x00005c60u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005c62u, 0x00005c61u, 0x00000704u, 0x0003003eu, 0x00005c4bu, 0x00005c62u, 0x0003003eu, 0x00005c4cu, 0x00005c5du, 0x0004003du, 0x00000006u, 0x00005c65u, 0x00005c53u, 0x000500c7u, 0x00000006u, 0x00005c66u, 0x00005c65u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c67u, 0x00005c66u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005c69u, 0x00005c5du, 0x00005c67u, 0x0003003eu, 0x00005c4cu, 0x00005c69u, 0x000500c6u, 0x00000006u, 0x00005c6bu, 0x00005c69u, 0x00000464u, 0x0003003eu, 0x00005c4cu, 0x00005c6bu, 0x00080041u, 0x00000671u, 0x00005c6eu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005c6bu, 0x0004003du, 0x0000000fu, 0x00005c6fu, 0x00005c6eu, 0x00040071u, 0x00000006u, 0x00005c70u, 0x00005c6fu, 0x0003003eu, 0x00005c4du, 0x00005c70u, 0x000500c2u, 0x00000006u, 0x00005c73u, 0x00005c70u, 0x00005c62u, 0x000500c7u, 0x00000006u, 0x00005c74u, 0x00005c73u, 0x00000e88u, 0x0003003eu, 0x00005c4du, 0x00005c74u, 0x000500c4u, 0x00000006u, 0x00005c76u, 0x00005c74u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005c78u, 0x00005c74u, 0x00005c76u, 0x0003003eu, 0x00005c4du, 0x00005c78u, 0x00040071u, 0x00000011u, 0x00005c7au, 0x00005c78u, 0x0004007cu, 0x00000012u, 0x00005c7bu, 0x00005c7au, 0x00070050u, 0x00000013u, 0x00005c7cu, 0x00005c7bu, 0x00005c7bu, 0x00005c7bu, 0x00005c7bu, 0x0003003eu, 0x00005c4eu, 0x00005c7cu, 0x0003003eu, 0x00004665u, 0x00005c7cu, 0x000300f7u, 0x00004a85u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004a86u, 0x00004a85u, 0x000200f8u, 0x00004a86u, 0x00050050u, 0x000000efu, 0x00004a89u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004a8au, 0x00004a89u, 0x0003003eu, 0x00006e0au, 0x00004632u, 0x0003003eu, 0x00006e0bu, 0x00004634u, 0x0003003eu, 0x00004753u, 0x000021b2u, 0x0003003eu, 0x00004754u, 0x00004a8au, 0x00050041u, 0x00000007u, 0x00005c86u, 0x00004754u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c87u, 0x00005c86u, 0x00050084u, 0x00000006u, 0x00005c88u, 0x00004634u, 0x00005c87u, 0x00050080u, 0x00000006u, 0x00005c89u, 0x00004632u, 0x00005c88u, 0x0003003eu, 0x00005c7du, 0x00005c89u, 0x00050041u, 0x00000007u, 0x00005c8au, 0x00004754u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c8bu, 0x00005c8au, 0x000500c2u, 0x00000006u, 0x00005c8cu, 0x00005c8bu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005c8eu, 0x00005c89u, 0x00005c8cu, 0x0003003eu, 0x00005c7du, 0x00005c8eu, 0x000500c7u, 0x00000006u, 0x00005c90u, 0x00005c8eu, 0x00000e65u, 0x0003003eu, 0x00005c7du, 0x00005c90u, 0x0004003du, 0x00000006u, 0x00005c92u, 0x00005c8au, 0x000400c8u, 0x00000006u, 0x00005c93u, 0x00005c92u, 0x000500c7u, 0x00000006u, 0x00005c94u, 0x00005c93u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005c95u, 0x00005c94u, 0x00000704u, 0x0003003eu, 0x00005c7eu, 0x00005c95u, 0x0003003eu, 0x00005c7fu, 0x00005c90u, 0x0004003du, 0x00000006u, 0x00005c98u, 0x00005c86u, 0x000500c7u, 0x00000006u, 0x00005c99u, 0x00005c98u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c9au, 0x00005c99u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005c9cu, 0x00005c90u, 0x00005c9au, 0x0003003eu, 0x00005c7fu, 0x00005c9cu, 0x000500c6u, 0x00000006u, 0x00005c9eu, 0x00005c9cu, 0x00000464u, 0x0003003eu, 0x00005c7fu, 0x00005c9eu, 0x00080041u, 0x00000671u, 0x00005ca1u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005c9eu, 0x0004003du, 0x0000000fu, 0x00005ca2u, 0x00005ca1u, 0x00040071u, 0x00000006u, 0x00005ca3u, 0x00005ca2u, 0x0003003eu, 0x00005c80u, 0x00005ca3u, 0x000500c2u, 0x00000006u, 0x00005ca6u, 0x00005ca3u, 0x00005c95u, 0x000500c7u, 0x00000006u, 0x00005ca7u, 0x00005ca6u, 0x00000e88u, 0x0003003eu, 0x00005c80u, 0x00005ca7u, 0x000500c4u, 0x00000006u, 0x00005ca9u, 0x00005ca7u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005cabu, 0x00005ca7u, 0x00005ca9u, 0x0003003eu, 0x00005c80u, 0x00005cabu, 0x00040071u, 0x00000011u, 0x00005cadu, 0x00005cabu, 0x0004007cu, 0x00000012u, 0x00005caeu, 0x00005cadu, 0x00070050u, 0x00000013u, 0x00005cafu, 0x00005caeu, 0x00005caeu, 0x00005caeu, 0x00005caeu, 0x0003003eu, 0x00005c81u, 0x00005cafu, 0x0003003eu, 0x0000466du, 0x00005cafu, 0x00050050u, 0x000000efu, 0x00004a90u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a91u, 0x00004a90u, 0x0003003eu, 0x00006e0eu, 0x00004632u, 0x0003003eu, 0x00006e0fu, 0x00004634u, 0x0003003eu, 0x00004756u, 0x000021b2u, 0x0003003eu, 0x00004757u, 0x00004a91u, 0x00050041u, 0x00000007u, 0x00005cb9u, 0x00004757u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005cbau, 0x00005cb9u, 0x00050084u, 0x00000006u, 0x00005cbbu, 0x00004634u, 0x00005cbau, 0x00050080u, 0x00000006u, 0x00005cbcu, 0x00004632u, 0x00005cbbu, 0x0003003eu, 0x00005cb0u, 0x00005cbcu, 0x00050041u, 0x00000007u, 0x00005cbdu, 0x00004757u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005cbeu, 0x00005cbdu, 0x000500c2u, 0x00000006u, 0x00005cbfu, 0x00005cbeu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005cc1u, 0x00005cbcu, 0x00005cbfu, 0x0003003eu, 0x00005cb0u, 0x00005cc1u, 0x000500c7u, 0x00000006u, 0x00005cc3u, 0x00005cc1u, 0x00000e65u, 0x0003003eu, 0x00005cb0u, 0x00005cc3u, 0x0004003du, 0x00000006u, 0x00005cc5u, 0x00005cbdu, 0x000400c8u, 0x00000006u, 0x00005cc6u, 0x00005cc5u, 0x000500c7u, 0x00000006u, 0x00005cc7u, 0x00005cc6u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005cc8u, 0x00005cc7u, 0x00000704u, 0x0003003eu, 0x00005cb1u, 0x00005cc8u, 0x0003003eu, 0x00005cb2u, 0x00005cc3u, 0x0004003du, 0x00000006u, 0x00005ccbu, 0x00005cb9u, 0x000500c7u, 0x00000006u, 0x00005cccu, 0x00005ccbu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005ccdu, 0x00005cccu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005ccfu, 0x00005cc3u, 0x00005ccdu, 0x0003003eu, 0x00005cb2u, 0x00005ccfu, 0x000500c6u, 0x00000006u, 0x00005cd1u, 0x00005ccfu, 0x00000464u, 0x0003003eu, 0x00005cb2u, 0x00005cd1u, 0x00080041u, 0x00000671u, 0x00005cd4u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005cd1u, 0x0004003du, 0x0000000fu, 0x00005cd5u, 0x00005cd4u, 0x00040071u, 0x00000006u, 0x00005cd6u, 0x00005cd5u, 0x0003003eu, 0x00005cb3u, 0x00005cd6u, 0x000500c2u, 0x00000006u, 0x00005cd9u, 0x00005cd6u, 0x00005cc8u, 0x000500c7u, 0x00000006u, 0x00005cdau, 0x00005cd9u, 0x00000e88u, 0x0003003eu, 0x00005cb3u, 0x00005cdau, 0x000500c4u, 0x00000006u, 0x00005cdcu, 0x00005cdau, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005cdeu, 0x00005cdau, 0x00005cdcu, 0x0003003eu, 0x00005cb3u, 0x00005cdeu, 0x00040071u, 0x00000011u, 0x00005ce0u, 0x00005cdeu, 0x0004007cu, 0x00000012u, 0x00005ce1u, 0x00005ce0u, 0x00070050u, 0x00000013u, 0x00005ce2u, 0x00005ce1u, 0x00005ce1u, 0x00005ce1u, 0x00005ce1u, 0x0003003eu, 0x00005cb4u, 0x00005ce2u, 0x0003003eu, 0x00004675u, 0x00005ce2u, 0x000200f9u, 0x00004a85u, 0x000200f8u, 0x00004a85u, 0x000700f5u, 0x00000013u, 0x00009fd8u, 0x00009f14u, 0x00004a5du, 0x00005ce2u, 0x00004a86u, 0x000700f5u, 0x00000013u, 0x00009e0cu, 0x00009d45u, 0x00004a5du, 0x00005cafu, 0x00004a86u, 0x000300f7u, 0x00004a96u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004a97u, 0x00004a96u, 0x000200f8u, 0x00004a97u, 0x00050050u, 0x000000efu, 0x00004a9au, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a9bu, 0x00004a9au, 0x0003003eu, 0x00006e12u, 0x00004632u, 0x0003003eu, 0x00006e13u, 0x00004634u, 0x0003003eu, 0x00004759u, 0x000021b2u, 0x0003003eu, 0x0000475au, 0x00004a9bu, 0x00050041u, 0x00000007u, 0x00005cecu, 0x0000475au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005cedu, 0x00005cecu, 0x00050084u, 0x00000006u, 0x00005ceeu, 0x00004634u, 0x00005cedu, 0x00050080u, 0x00000006u, 0x00005cefu, 0x00004632u, 0x00005ceeu, 0x0003003eu, 0x00005ce3u, 0x00005cefu, 0x00050041u, 0x00000007u, 0x00005cf0u, 0x0000475au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005cf1u, 0x00005cf0u, 0x000500c2u, 0x00000006u, 0x00005cf2u, 0x00005cf1u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005cf4u, 0x00005cefu, 0x00005cf2u, 0x0003003eu, 0x00005ce3u, 0x00005cf4u, 0x000500c7u, 0x00000006u, 0x00005cf6u, 0x00005cf4u, 0x00000e65u, 0x0003003eu, 0x00005ce3u, 0x00005cf6u, 0x0004003du, 0x00000006u, 0x00005cf8u, 0x00005cf0u, 0x000400c8u, 0x00000006u, 0x00005cf9u, 0x00005cf8u, 0x000500c7u, 0x00000006u, 0x00005cfau, 0x00005cf9u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005cfbu, 0x00005cfau, 0x00000704u, 0x0003003eu, 0x00005ce4u, 0x00005cfbu, 0x0003003eu, 0x00005ce5u, 0x00005cf6u, 0x0004003du, 0x00000006u, 0x00005cfeu, 0x00005cecu, 0x000500c7u, 0x00000006u, 0x00005cffu, 0x00005cfeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d00u, 0x00005cffu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d02u, 0x00005cf6u, 0x00005d00u, 0x0003003eu, 0x00005ce5u, 0x00005d02u, 0x000500c6u, 0x00000006u, 0x00005d04u, 0x00005d02u, 0x00000464u, 0x0003003eu, 0x00005ce5u, 0x00005d04u, 0x00080041u, 0x00000671u, 0x00005d07u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005d04u, 0x0004003du, 0x0000000fu, 0x00005d08u, 0x00005d07u, 0x00040071u, 0x00000006u, 0x00005d09u, 0x00005d08u, 0x0003003eu, 0x00005ce6u, 0x00005d09u, 0x000500c2u, 0x00000006u, 0x00005d0cu, 0x00005d09u, 0x00005cfbu, 0x000500c7u, 0x00000006u, 0x00005d0du, 0x00005d0cu, 0x00000e88u, 0x0003003eu, 0x00005ce6u, 0x00005d0du, 0x000500c4u, 0x00000006u, 0x00005d0fu, 0x00005d0du, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005d11u, 0x00005d0du, 0x00005d0fu, 0x0003003eu, 0x00005ce6u, 0x00005d11u, 0x00040071u, 0x00000011u, 0x00005d13u, 0x00005d11u, 0x0004007cu, 0x00000012u, 0x00005d14u, 0x00005d13u, 0x00070050u, 0x00000013u, 0x00005d15u, 0x00005d14u, 0x00005d14u, 0x00005d14u, 0x00005d14u, 0x0003003eu, 0x00005ce7u, 0x00005d15u, 0x0003003eu, 0x0000467du, 0x00005d15u, 0x000200f9u, 0x00004a96u, 0x000200f8u, 0x00004a96u, 0x000700f5u, 0x00000013u, 0x0000a0beu, 0x00009ff8u, 0x00004a85u, 0x00005d15u, 0x00004a97u, 0x000200f9u, 0x00004a5bu, 0x000200f8u, 0x00004a5cu, 0x0004007cu, 0x000000b0u, 0x00004a60u, 0x000099b9u, 0x0003003eu, 0x00006e26u, 0x00004632u, 0x0003003eu, 0x00006e27u, 0x00004634u, 0x0003003eu, 0x00004768u, 0x000021b2u, 0x0003003eu, 0x00004769u, 0x00004a60u, 0x00050041u, 0x00000007u, 0x00005ba2u, 0x00004769u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005ba3u, 0x00005ba2u, 0x00050084u, 0x00000006u, 0x00005ba4u, 0x00004634u, 0x00005ba3u, 0x00050080u, 0x00000006u, 0x00005ba5u, 0x00004632u, 0x00005ba4u, 0x0003003eu, 0x00005b9au, 0x00005ba5u, 0x00050041u, 0x00000007u, 0x00005ba6u, 0x00004769u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005ba7u, 0x00005ba6u, 0x00050084u, 0x00000006u, 0x00005ba8u, 0x00005ba7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005baau, 0x00005ba5u, 0x00005ba8u, 0x0003003eu, 0x00005b9au, 0x00005baau, 0x000500c7u, 0x00000006u, 0x00005bacu, 0x00005baau, 0x00000e65u, 0x0003003eu, 0x00005b9au, 0x00005bacu, 0x000500c2u, 0x00000006u, 0x00005baeu, 0x00005bacu, 0x0000022au, 0x0003003eu, 0x00005b9bu, 0x00005baeu, 0x0004003du, 0x00000006u, 0x00005bb0u, 0x00005ba2u, 0x000500c7u, 0x00000006u, 0x00005bb1u, 0x00005bb0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005bb2u, 0x00005bb1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005bb4u, 0x00005baeu, 0x00005bb2u, 0x0003003eu, 0x00005b9bu, 0x00005bb4u, 0x000500c6u, 0x00000006u, 0x00005bb6u, 0x00005bb4u, 0x0000045cu, 0x0003003eu, 0x00005b9bu, 0x00005bb6u, 0x00080041u, 0x00000692u, 0x00005bb9u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005bb6u, 0x0004003du, 0x00000011u, 0x00005bbau, 0x00005bb9u, 0x00040071u, 0x00000006u, 0x00005bbbu, 0x00005bbau, 0x0003003eu, 0x00005b9cu, 0x00005bbbu, 0x000500c2u, 0x00000006u, 0x00005bbdu, 0x00005bbbu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005bbeu, 0x00005bbdu, 0x0004007cu, 0x00000012u, 0x00005bbfu, 0x00005bbeu, 0x000500c7u, 0x00000006u, 0x00005bc1u, 0x00005bbbu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005bc2u, 0x00005bc1u, 0x0004007cu, 0x00000012u, 0x00005bc3u, 0x00005bc2u, 0x00050050u, 0x000001aeu, 0x00005bc4u, 0x00005bbfu, 0x00005bc3u, 0x0009004fu, 0x00000013u, 0x00005bc5u, 0x00005bc4u, 0x00005bc4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b9du, 0x00005bc5u, 0x0003003eu, 0x00004665u, 0x00005bc5u, 0x000300f7u, 0x00004a65u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004a66u, 0x00004a65u, 0x000200f8u, 0x00004a66u, 0x00050050u, 0x000000efu, 0x00004a69u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004a6au, 0x00004a69u, 0x0003003eu, 0x00006e2au, 0x00004632u, 0x0003003eu, 0x00006e2bu, 0x00004634u, 0x0003003eu, 0x0000476bu, 0x000021b2u, 0x0003003eu, 0x0000476cu, 0x00004a6au, 0x00050041u, 0x00000007u, 0x00005bceu, 0x0000476cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005bcfu, 0x00005bceu, 0x00050084u, 0x00000006u, 0x00005bd0u, 0x00004634u, 0x00005bcfu, 0x00050080u, 0x00000006u, 0x00005bd1u, 0x00004632u, 0x00005bd0u, 0x0003003eu, 0x00005bc6u, 0x00005bd1u, 0x00050041u, 0x00000007u, 0x00005bd2u, 0x0000476cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005bd3u, 0x00005bd2u, 0x00050084u, 0x00000006u, 0x00005bd4u, 0x00005bd3u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005bd6u, 0x00005bd1u, 0x00005bd4u, 0x0003003eu, 0x00005bc6u, 0x00005bd6u, 0x000500c7u, 0x00000006u, 0x00005bd8u, 0x00005bd6u, 0x00000e65u, 0x0003003eu, 0x00005bc6u, 0x00005bd8u, 0x000500c2u, 0x00000006u, 0x00005bdau, 0x00005bd8u, 0x0000022au, 0x0003003eu, 0x00005bc7u, 0x00005bdau, 0x0004003du, 0x00000006u, 0x00005bdcu, 0x00005bceu, 0x000500c7u, 0x00000006u, 0x00005bddu, 0x00005bdcu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005bdeu, 0x00005bddu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005be0u, 0x00005bdau, 0x00005bdeu, 0x0003003eu, 0x00005bc7u, 0x00005be0u, 0x000500c6u, 0x00000006u, 0x00005be2u, 0x00005be0u, 0x0000045cu, 0x0003003eu, 0x00005bc7u, 0x00005be2u, 0x00080041u, 0x00000692u, 0x00005be5u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005be2u, 0x0004003du, 0x00000011u, 0x00005be6u, 0x00005be5u, 0x00040071u, 0x00000006u, 0x00005be7u, 0x00005be6u, 0x0003003eu, 0x00005bc8u, 0x00005be7u, 0x000500c2u, 0x00000006u, 0x00005be9u, 0x00005be7u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005beau, 0x00005be9u, 0x0004007cu, 0x00000012u, 0x00005bebu, 0x00005beau, 0x000500c7u, 0x00000006u, 0x00005bedu, 0x00005be7u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005beeu, 0x00005bedu, 0x0004007cu, 0x00000012u, 0x00005befu, 0x00005beeu, 0x00050050u, 0x000001aeu, 0x00005bf0u, 0x00005bebu, 0x00005befu, 0x0009004fu, 0x00000013u, 0x00005bf1u, 0x00005bf0u, 0x00005bf0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005bc9u, 0x00005bf1u, 0x0003003eu, 0x0000466du, 0x00005bf1u, 0x00050050u, 0x000000efu, 0x00004a70u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a71u, 0x00004a70u, 0x0003003eu, 0x00006e2eu, 0x00004632u, 0x0003003eu, 0x00006e2fu, 0x00004634u, 0x0003003eu, 0x0000476eu, 0x000021b2u, 0x0003003eu, 0x0000476fu, 0x00004a71u, 0x00050041u, 0x00000007u, 0x00005bfau, 0x0000476fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005bfbu, 0x00005bfau, 0x00050084u, 0x00000006u, 0x00005bfcu, 0x00004634u, 0x00005bfbu, 0x00050080u, 0x00000006u, 0x00005bfdu, 0x00004632u, 0x00005bfcu, 0x0003003eu, 0x00005bf2u, 0x00005bfdu, 0x00050041u, 0x00000007u, 0x00005bfeu, 0x0000476fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005bffu, 0x00005bfeu, 0x00050084u, 0x00000006u, 0x00005c00u, 0x00005bffu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005c02u, 0x00005bfdu, 0x00005c00u, 0x0003003eu, 0x00005bf2u, 0x00005c02u, 0x000500c7u, 0x00000006u, 0x00005c04u, 0x00005c02u, 0x00000e65u, 0x0003003eu, 0x00005bf2u, 0x00005c04u, 0x000500c2u, 0x00000006u, 0x00005c06u, 0x00005c04u, 0x0000022au, 0x0003003eu, 0x00005bf3u, 0x00005c06u, 0x0004003du, 0x00000006u, 0x00005c08u, 0x00005bfau, 0x000500c7u, 0x00000006u, 0x00005c09u, 0x00005c08u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c0au, 0x00005c09u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005c0cu, 0x00005c06u, 0x00005c0au, 0x0003003eu, 0x00005bf3u, 0x00005c0cu, 0x000500c6u, 0x00000006u, 0x00005c0eu, 0x00005c0cu, 0x0000045cu, 0x0003003eu, 0x00005bf3u, 0x00005c0eu, 0x00080041u, 0x00000692u, 0x00005c11u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005c0eu, 0x0004003du, 0x00000011u, 0x00005c12u, 0x00005c11u, 0x00040071u, 0x00000006u, 0x00005c13u, 0x00005c12u, 0x0003003eu, 0x00005bf4u, 0x00005c13u, 0x000500c2u, 0x00000006u, 0x00005c15u, 0x00005c13u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005c16u, 0x00005c15u, 0x0004007cu, 0x00000012u, 0x00005c17u, 0x00005c16u, 0x000500c7u, 0x00000006u, 0x00005c19u, 0x00005c13u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005c1au, 0x00005c19u, 0x0004007cu, 0x00000012u, 0x00005c1bu, 0x00005c1au, 0x00050050u, 0x000001aeu, 0x00005c1cu, 0x00005c17u, 0x00005c1bu, 0x0009004fu, 0x00000013u, 0x00005c1du, 0x00005c1cu, 0x00005c1cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005bf5u, 0x00005c1du, 0x0003003eu, 0x00004675u, 0x00005c1du, 0x000200f9u, 0x00004a65u, 0x000200f8u, 0x00004a65u, 0x000700f5u, 0x00000013u, 0x00009fd6u, 0x00009f14u, 0x00004a5cu, 0x00005c1du, 0x00004a66u, 0x000700f5u, 0x00000013u, 0x00009e0au, 0x00009d45u, 0x00004a5cu, 0x00005bf1u, 0x00004a66u, 0x000300f7u, 0x00004a76u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004a77u, 0x00004a76u, 0x000200f8u, 0x00004a77u, 0x00050050u, 0x000000efu, 0x00004a7au, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a7bu, 0x00004a7au, 0x0003003eu, 0x00006e32u, 0x00004632u, 0x0003003eu, 0x00006e33u, 0x00004634u, 0x0003003eu, 0x00004771u, 0x000021b2u, 0x0003003eu, 0x00004772u, 0x00004a7bu, 0x00050041u, 0x00000007u, 0x00005c26u, 0x00004772u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c27u, 0x00005c26u, 0x00050084u, 0x00000006u, 0x00005c28u, 0x00004634u, 0x00005c27u, 0x00050080u, 0x00000006u, 0x00005c29u, 0x00004632u, 0x00005c28u, 0x0003003eu, 0x00005c1eu, 0x00005c29u, 0x00050041u, 0x00000007u, 0x00005c2au, 0x00004772u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c2bu, 0x00005c2au, 0x00050084u, 0x00000006u, 0x00005c2cu, 0x00005c2bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005c2eu, 0x00005c29u, 0x00005c2cu, 0x0003003eu, 0x00005c1eu, 0x00005c2eu, 0x000500c7u, 0x00000006u, 0x00005c30u, 0x00005c2eu, 0x00000e65u, 0x0003003eu, 0x00005c1eu, 0x00005c30u, 0x000500c2u, 0x00000006u, 0x00005c32u, 0x00005c30u, 0x0000022au, 0x0003003eu, 0x00005c1fu, 0x00005c32u, 0x0004003du, 0x00000006u, 0x00005c34u, 0x00005c26u, 0x000500c7u, 0x00000006u, 0x00005c35u, 0x00005c34u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c36u, 0x00005c35u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005c38u, 0x00005c32u, 0x00005c36u, 0x0003003eu, 0x00005c1fu, 0x00005c38u, 0x000500c6u, 0x00000006u, 0x00005c3au, 0x00005c38u, 0x0000045cu, 0x0003003eu, 0x00005c1fu, 0x00005c3au, 0x00080041u, 0x00000692u, 0x00005c3du, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005c3au, 0x0004003du, 0x00000011u, 0x00005c3eu, 0x00005c3du, 0x00040071u, 0x00000006u, 0x00005c3fu, 0x00005c3eu, 0x0003003eu, 0x00005c20u, 0x00005c3fu, 0x000500c2u, 0x00000006u, 0x00005c41u, 0x00005c3fu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005c42u, 0x00005c41u, 0x0004007cu, 0x00000012u, 0x00005c43u, 0x00005c42u, 0x000500c7u, 0x00000006u, 0x00005c45u, 0x00005c3fu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005c46u, 0x00005c45u, 0x0004007cu, 0x00000012u, 0x00005c47u, 0x00005c46u, 0x00050050u, 0x000001aeu, 0x00005c48u, 0x00005c43u, 0x00005c47u, 0x0009004fu, 0x00000013u, 0x00005c49u, 0x00005c48u, 0x00005c48u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005c21u, 0x00005c49u, 0x0003003eu, 0x0000467du, 0x00005c49u, 0x000200f9u, 0x00004a76u, 0x000200f8u, 0x00004a76u, 0x000700f5u, 0x00000013u, 0x0000a0bcu, 0x00009ff8u, 0x00004a65u, 0x00005c49u, 0x00004a77u, 0x000200f9u, 0x00004a5bu, 0x000200f8u, 0x00004a5bu, 0x000900f5u, 0x00000013u, 0x0000a0bbu, 0x0000a0bcu, 0x00004a76u, 0x0000a0beu, 0x00004a96u, 0x0000a0c0u, 0x00004ab6u, 0x000900f5u, 0x00000013u, 0x00009fd4u, 0x00009fd6u, 0x00004a76u, 0x00009fd8u, 0x00004a96u, 0x00009fdau, 0x00004ab6u, 0x000900f5u, 0x00000013u, 0x00009eefu, 0x00005bc5u, 0x00004a76u, 0x00005c7cu, 0x00004a96u, 0x00005d39u, 0x00004ab6u, 0x000900f5u, 0x00000013u, 0x00009e08u, 0x00009e0au, 0x00004a76u, 0x00009e0cu, 0x00004a96u, 0x00009e0eu, 0x00004ab6u, 0x000200f9u, 0x0000489eu, 0x000200f8u, 0x000048a2u, 0x00040071u, 0x00000006u, 0x000049d0u, 0x00004638u, 0x0004007cu, 0x00000008u, 0x000049d1u, 0x000049d0u, 0x000300f7u, 0x000049d2u, 0x00000000u, 0x000b00fbu, 0x000049d1u, 0x000049d2u, 0x00000000u, 0x000049d3u, 0x00000001u, 0x000049d4u, 0x00000002u, 0x000049d5u, 0x00000003u, 0x000049d6u, 0x000200f8u, 0x000049d6u, 0x0004007cu, 0x000000b0u, 0x00004a38u, 0x000099b9u, 0x0003003eu, 0x00006df6u, 0x00004632u, 0x0003003eu, 0x00006df7u, 0x00004634u, 0x0003003eu, 0x00004744u, 0x000021b2u, 0x0003003eu, 0x00004745u, 0x00004a38u, 0x00050041u, 0x00000007u, 0x00005af2u, 0x00004745u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005af3u, 0x00005af2u, 0x00050084u, 0x00000006u, 0x00005af4u, 0x00004634u, 0x00005af3u, 0x00050080u, 0x00000006u, 0x00005af5u, 0x00004632u, 0x00005af4u, 0x0003003eu, 0x00005aeau, 0x00005af5u, 0x00050041u, 0x00000007u, 0x00005af6u, 0x00004745u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005af7u, 0x00005af6u, 0x00050084u, 0x00000006u, 0x00005af8u, 0x00005af7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005afau, 0x00005af5u, 0x00005af8u, 0x0003003eu, 0x00005aeau, 0x00005afau, 0x000500c7u, 0x00000006u, 0x00005afcu, 0x00005afau, 0x00000e65u, 0x0003003eu, 0x00005aeau, 0x00005afcu, 0x000500c2u, 0x00000006u, 0x00005afeu, 0x00005afcu, 0x0000022au, 0x0003003eu, 0x00005aebu, 0x00005afeu, 0x0004003du, 0x00000006u, 0x00005b00u, 0x00005af2u, 0x000500c7u, 0x00000006u, 0x00005b01u, 0x00005b00u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b02u, 0x00005b01u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b04u, 0x00005afeu, 0x00005b02u, 0x0003003eu, 0x00005aebu, 0x00005b04u, 0x000500c6u, 0x00000006u, 0x00005b06u, 0x00005b04u, 0x0000045cu, 0x0003003eu, 0x00005aebu, 0x00005b06u, 0x00080041u, 0x00000692u, 0x00005b09u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005b06u, 0x0004003du, 0x00000011u, 0x00005b0au, 0x00005b09u, 0x00040071u, 0x00000006u, 0x00005b0bu, 0x00005b0au, 0x0003003eu, 0x00005aecu, 0x00005b0bu, 0x000500c2u, 0x00000006u, 0x00005b0du, 0x00005b0bu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b0eu, 0x00005b0du, 0x0004007cu, 0x00000012u, 0x00005b0fu, 0x00005b0eu, 0x000500c7u, 0x00000006u, 0x00005b11u, 0x00005b0bu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b12u, 0x00005b11u, 0x0004007cu, 0x00000012u, 0x00005b13u, 0x00005b12u, 0x00050050u, 0x000001aeu, 0x00005b14u, 0x00005b0fu, 0x00005b13u, 0x0009004fu, 0x00000013u, 0x00005b15u, 0x00005b14u, 0x00005b14u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005aedu, 0x00005b15u, 0x0003003eu, 0x00004665u, 0x00005b15u, 0x000300f7u, 0x00004a3du, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004a3eu, 0x00004a3du, 0x000200f8u, 0x00004a3eu, 0x00050050u, 0x000000efu, 0x00004a41u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004a42u, 0x00004a41u, 0x0003003eu, 0x00006dfau, 0x00004632u, 0x0003003eu, 0x00006dfbu, 0x00004634u, 0x0003003eu, 0x00004747u, 0x000021b2u, 0x0003003eu, 0x00004748u, 0x00004a42u, 0x00050041u, 0x00000007u, 0x00005b1eu, 0x00004748u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b1fu, 0x00005b1eu, 0x00050084u, 0x00000006u, 0x00005b20u, 0x00004634u, 0x00005b1fu, 0x00050080u, 0x00000006u, 0x00005b21u, 0x00004632u, 0x00005b20u, 0x0003003eu, 0x00005b16u, 0x00005b21u, 0x00050041u, 0x00000007u, 0x00005b22u, 0x00004748u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b23u, 0x00005b22u, 0x00050084u, 0x00000006u, 0x00005b24u, 0x00005b23u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b26u, 0x00005b21u, 0x00005b24u, 0x0003003eu, 0x00005b16u, 0x00005b26u, 0x000500c7u, 0x00000006u, 0x00005b28u, 0x00005b26u, 0x00000e65u, 0x0003003eu, 0x00005b16u, 0x00005b28u, 0x000500c2u, 0x00000006u, 0x00005b2au, 0x00005b28u, 0x0000022au, 0x0003003eu, 0x00005b17u, 0x00005b2au, 0x0004003du, 0x00000006u, 0x00005b2cu, 0x00005b1eu, 0x000500c7u, 0x00000006u, 0x00005b2du, 0x00005b2cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b2eu, 0x00005b2du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b30u, 0x00005b2au, 0x00005b2eu, 0x0003003eu, 0x00005b17u, 0x00005b30u, 0x000500c6u, 0x00000006u, 0x00005b32u, 0x00005b30u, 0x0000045cu, 0x0003003eu, 0x00005b17u, 0x00005b32u, 0x00080041u, 0x00000692u, 0x00005b35u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005b32u, 0x0004003du, 0x00000011u, 0x00005b36u, 0x00005b35u, 0x00040071u, 0x00000006u, 0x00005b37u, 0x00005b36u, 0x0003003eu, 0x00005b18u, 0x00005b37u, 0x000500c2u, 0x00000006u, 0x00005b39u, 0x00005b37u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b3au, 0x00005b39u, 0x0004007cu, 0x00000012u, 0x00005b3bu, 0x00005b3au, 0x000500c7u, 0x00000006u, 0x00005b3du, 0x00005b37u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b3eu, 0x00005b3du, 0x0004007cu, 0x00000012u, 0x00005b3fu, 0x00005b3eu, 0x00050050u, 0x000001aeu, 0x00005b40u, 0x00005b3bu, 0x00005b3fu, 0x0009004fu, 0x00000013u, 0x00005b41u, 0x00005b40u, 0x00005b40u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b19u, 0x00005b41u, 0x0003003eu, 0x0000466du, 0x00005b41u, 0x00050050u, 0x000000efu, 0x00004a48u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a49u, 0x00004a48u, 0x0003003eu, 0x00006dfeu, 0x00004632u, 0x0003003eu, 0x00006dffu, 0x00004634u, 0x0003003eu, 0x0000474au, 0x000021b2u, 0x0003003eu, 0x0000474bu, 0x00004a49u, 0x00050041u, 0x00000007u, 0x00005b4au, 0x0000474bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b4bu, 0x00005b4au, 0x00050084u, 0x00000006u, 0x00005b4cu, 0x00004634u, 0x00005b4bu, 0x00050080u, 0x00000006u, 0x00005b4du, 0x00004632u, 0x00005b4cu, 0x0003003eu, 0x00005b42u, 0x00005b4du, 0x00050041u, 0x00000007u, 0x00005b4eu, 0x0000474bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b4fu, 0x00005b4eu, 0x00050084u, 0x00000006u, 0x00005b50u, 0x00005b4fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b52u, 0x00005b4du, 0x00005b50u, 0x0003003eu, 0x00005b42u, 0x00005b52u, 0x000500c7u, 0x00000006u, 0x00005b54u, 0x00005b52u, 0x00000e65u, 0x0003003eu, 0x00005b42u, 0x00005b54u, 0x000500c2u, 0x00000006u, 0x00005b56u, 0x00005b54u, 0x0000022au, 0x0003003eu, 0x00005b43u, 0x00005b56u, 0x0004003du, 0x00000006u, 0x00005b58u, 0x00005b4au, 0x000500c7u, 0x00000006u, 0x00005b59u, 0x00005b58u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b5au, 0x00005b59u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b5cu, 0x00005b56u, 0x00005b5au, 0x0003003eu, 0x00005b43u, 0x00005b5cu, 0x000500c6u, 0x00000006u, 0x00005b5eu, 0x00005b5cu, 0x0000045cu, 0x0003003eu, 0x00005b43u, 0x00005b5eu, 0x00080041u, 0x00000692u, 0x00005b61u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005b5eu, 0x0004003du, 0x00000011u, 0x00005b62u, 0x00005b61u, 0x00040071u, 0x00000006u, 0x00005b63u, 0x00005b62u, 0x0003003eu, 0x00005b44u, 0x00005b63u, 0x000500c2u, 0x00000006u, 0x00005b65u, 0x00005b63u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b66u, 0x00005b65u, 0x0004007cu, 0x00000012u, 0x00005b67u, 0x00005b66u, 0x000500c7u, 0x00000006u, 0x00005b69u, 0x00005b63u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b6au, 0x00005b69u, 0x0004007cu, 0x00000012u, 0x00005b6bu, 0x00005b6au, 0x00050050u, 0x000001aeu, 0x00005b6cu, 0x00005b67u, 0x00005b6bu, 0x0009004fu, 0x00000013u, 0x00005b6du, 0x00005b6cu, 0x00005b6cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b45u, 0x00005b6du, 0x0003003eu, 0x00004675u, 0x00005b6du, 0x000200f9u, 0x00004a3du, 0x000200f8u, 0x00004a3du, 0x000700f5u, 0x00000013u, 0x00009fd3u, 0x00009f14u, 0x000049d6u, 0x00005b6du, 0x00004a3eu, 0x000700f5u, 0x00000013u, 0x00009e07u, 0x00009d45u, 0x000049d6u, 0x00005b41u, 0x00004a3eu, 0x000300f7u, 0x00004a4eu, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004a4fu, 0x00004a4eu, 0x000200f8u, 0x00004a4fu, 0x00050050u, 0x000000efu, 0x00004a52u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a53u, 0x00004a52u, 0x0003003eu, 0x00006e02u, 0x00004632u, 0x0003003eu, 0x00006e03u, 0x00004634u, 0x0003003eu, 0x0000474du, 0x000021b2u, 0x0003003eu, 0x0000474eu, 0x00004a53u, 0x00050041u, 0x00000007u, 0x00005b76u, 0x0000474eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b77u, 0x00005b76u, 0x00050084u, 0x00000006u, 0x00005b78u, 0x00004634u, 0x00005b77u, 0x00050080u, 0x00000006u, 0x00005b79u, 0x00004632u, 0x00005b78u, 0x0003003eu, 0x00005b6eu, 0x00005b79u, 0x00050041u, 0x00000007u, 0x00005b7au, 0x0000474eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b7bu, 0x00005b7au, 0x00050084u, 0x00000006u, 0x00005b7cu, 0x00005b7bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b7eu, 0x00005b79u, 0x00005b7cu, 0x0003003eu, 0x00005b6eu, 0x00005b7eu, 0x000500c7u, 0x00000006u, 0x00005b80u, 0x00005b7eu, 0x00000e65u, 0x0003003eu, 0x00005b6eu, 0x00005b80u, 0x000500c2u, 0x00000006u, 0x00005b82u, 0x00005b80u, 0x0000022au, 0x0003003eu, 0x00005b6fu, 0x00005b82u, 0x0004003du, 0x00000006u, 0x00005b84u, 0x00005b76u, 0x000500c7u, 0x00000006u, 0x00005b85u, 0x00005b84u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b86u, 0x00005b85u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b88u, 0x00005b82u, 0x00005b86u, 0x0003003eu, 0x00005b6fu, 0x00005b88u, 0x000500c6u, 0x00000006u, 0x00005b8au, 0x00005b88u, 0x0000045cu, 0x0003003eu, 0x00005b6fu, 0x00005b8au, 0x00080041u, 0x00000692u, 0x00005b8du, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005b8au, 0x0004003du, 0x00000011u, 0x00005b8eu, 0x00005b8du, 0x00040071u, 0x00000006u, 0x00005b8fu, 0x00005b8eu, 0x0003003eu, 0x00005b70u, 0x00005b8fu, 0x000500c2u, 0x00000006u, 0x00005b91u, 0x00005b8fu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b92u, 0x00005b91u, 0x0004007cu, 0x00000012u, 0x00005b93u, 0x00005b92u, 0x000500c7u, 0x00000006u, 0x00005b95u, 0x00005b8fu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b96u, 0x00005b95u, 0x0004007cu, 0x00000012u, 0x00005b97u, 0x00005b96u, 0x00050050u, 0x000001aeu, 0x00005b98u, 0x00005b93u, 0x00005b97u, 0x0009004fu, 0x00000013u, 0x00005b99u, 0x00005b98u, 0x00005b98u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b71u, 0x00005b99u, 0x0003003eu, 0x0000467du, 0x00005b99u, 0x000200f9u, 0x00004a4eu, 0x000200f8u, 0x00004a4eu, 0x000700f5u, 0x00000013u, 0x0000a0b9u, 0x00009ff8u, 0x00004a3du, 0x00005b99u, 0x00004a4fu, 0x000200f9u, 0x000049d2u, 0x000200f8u, 0x000049d5u, 0x0004007cu, 0x000000b0u, 0x00004a18u, 0x000099b9u, 0x0003003eu, 0x00006de6u, 0x00004632u, 0x0003003eu, 0x00006de7u, 0x00004634u, 0x0003003eu, 0x00004738u, 0x000021b2u, 0x0003003eu, 0x00004739u, 0x00004a18u, 0x00050041u, 0x00000007u, 0x00005a0fu, 0x00004739u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005a10u, 0x00005a0fu, 0x00050084u, 0x00000006u, 0x00005a11u, 0x00004634u, 0x00005a10u, 0x00050080u, 0x00000006u, 0x00005a12u, 0x00004632u, 0x00005a11u, 0x0003003eu, 0x00005a06u, 0x00005a12u, 0x00050041u, 0x00000007u, 0x00005a13u, 0x00004739u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005a14u, 0x00005a13u, 0x00050084u, 0x00000006u, 0x00005a15u, 0x00005a14u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005a17u, 0x00005a12u, 0x00005a15u, 0x0003003eu, 0x00005a06u, 0x00005a17u, 0x000500c7u, 0x00000006u, 0x00005a19u, 0x00005a17u, 0x00000e65u, 0x0003003eu, 0x00005a06u, 0x00005a19u, 0x000500c2u, 0x00000006u, 0x00005a1bu, 0x00005a19u, 0x0000022au, 0x0003003eu, 0x00005a07u, 0x00005a1bu, 0x0004003du, 0x00000006u, 0x00005a1du, 0x00005a0fu, 0x000500c7u, 0x00000006u, 0x00005a1eu, 0x00005a1du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005a1fu, 0x00005a1eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005a21u, 0x00005a1bu, 0x00005a1fu, 0x0003003eu, 0x00005a07u, 0x00005a21u, 0x000500c6u, 0x00000006u, 0x00005a23u, 0x00005a21u, 0x0000045cu, 0x0003003eu, 0x00005a07u, 0x00005a23u, 0x00080041u, 0x00000692u, 0x00005a26u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005a23u, 0x0004003du, 0x00000011u, 0x00005a27u, 0x00005a26u, 0x00040071u, 0x00000006u, 0x00005a28u, 0x00005a27u, 0x0003003eu, 0x00005a08u, 0x00005a28u, 0x0003003eu, 0x00005a09u, 0x00005a28u, 0x000500c2u, 0x00000006u, 0x00005a2fu, 0x00005a28u, 0x0000025du, 0x0003003eu, 0x00005a2bu, 0x00005a2fu, 0x000500c7u, 0x00000006u, 0x00005a31u, 0x00005a28u, 0x000006c3u, 0x0003003eu, 0x00005a2cu, 0x00005a31u, 0x00040071u, 0x00000011u, 0x00005a33u, 0x00005a2fu, 0x0004007cu, 0x00000012u, 0x00005a34u, 0x00005a33u, 0x00040071u, 0x00000011u, 0x00005a3cu, 0x00005a31u, 0x0004007cu, 0x00000012u, 0x00005a3du, 0x00005a3cu, 0x00070050u, 0x00000013u, 0x00005a3eu, 0x00005a34u, 0x00005a34u, 0x00005a34u, 0x00005a3du, 0x0003003eu, 0x00005a2du, 0x00005a3eu, 0x0003003eu, 0x00005a0au, 0x00005a3eu, 0x0003003eu, 0x00004665u, 0x00005a3eu, 0x000300f7u, 0x00004a1du, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004a1eu, 0x00004a1du, 0x000200f8u, 0x00004a1eu, 0x00050050u, 0x000000efu, 0x00004a21u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004a22u, 0x00004a21u, 0x0003003eu, 0x00006deau, 0x00004632u, 0x0003003eu, 0x00006debu, 0x00004634u, 0x0003003eu, 0x0000473bu, 0x000021b2u, 0x0003003eu, 0x0000473cu, 0x00004a22u, 0x00050041u, 0x00000007u, 0x00005a48u, 0x0000473cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005a49u, 0x00005a48u, 0x00050084u, 0x00000006u, 0x00005a4au, 0x00004634u, 0x00005a49u, 0x00050080u, 0x00000006u, 0x00005a4bu, 0x00004632u, 0x00005a4au, 0x0003003eu, 0x00005a3fu, 0x00005a4bu, 0x00050041u, 0x00000007u, 0x00005a4cu, 0x0000473cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005a4du, 0x00005a4cu, 0x00050084u, 0x00000006u, 0x00005a4eu, 0x00005a4du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005a50u, 0x00005a4bu, 0x00005a4eu, 0x0003003eu, 0x00005a3fu, 0x00005a50u, 0x000500c7u, 0x00000006u, 0x00005a52u, 0x00005a50u, 0x00000e65u, 0x0003003eu, 0x00005a3fu, 0x00005a52u, 0x000500c2u, 0x00000006u, 0x00005a54u, 0x00005a52u, 0x0000022au, 0x0003003eu, 0x00005a40u, 0x00005a54u, 0x0004003du, 0x00000006u, 0x00005a56u, 0x00005a48u, 0x000500c7u, 0x00000006u, 0x00005a57u, 0x00005a56u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005a58u, 0x00005a57u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005a5au, 0x00005a54u, 0x00005a58u, 0x0003003eu, 0x00005a40u, 0x00005a5au, 0x000500c6u, 0x00000006u, 0x00005a5cu, 0x00005a5au, 0x0000045cu, 0x0003003eu, 0x00005a40u, 0x00005a5cu, 0x00080041u, 0x00000692u, 0x00005a5fu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005a5cu, 0x0004003du, 0x00000011u, 0x00005a60u, 0x00005a5fu, 0x00040071u, 0x00000006u, 0x00005a61u, 0x00005a60u, 0x0003003eu, 0x00005a41u, 0x00005a61u, 0x0003003eu, 0x00005a42u, 0x00005a61u, 0x000500c2u, 0x00000006u, 0x00005a68u, 0x00005a61u, 0x0000025du, 0x0003003eu, 0x00005a64u, 0x00005a68u, 0x000500c7u, 0x00000006u, 0x00005a6au, 0x00005a61u, 0x000006c3u, 0x0003003eu, 0x00005a65u, 0x00005a6au, 0x00040071u, 0x00000011u, 0x00005a6cu, 0x00005a68u, 0x0004007cu, 0x00000012u, 0x00005a6du, 0x00005a6cu, 0x00040071u, 0x00000011u, 0x00005a75u, 0x00005a6au, 0x0004007cu, 0x00000012u, 0x00005a76u, 0x00005a75u, 0x00070050u, 0x00000013u, 0x00005a77u, 0x00005a6du, 0x00005a6du, 0x00005a6du, 0x00005a76u, 0x0003003eu, 0x00005a66u, 0x00005a77u, 0x0003003eu, 0x00005a43u, 0x00005a77u, 0x0003003eu, 0x0000466du, 0x00005a77u, 0x00050050u, 0x000000efu, 0x00004a28u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a29u, 0x00004a28u, 0x0003003eu, 0x00006deeu, 0x00004632u, 0x0003003eu, 0x00006defu, 0x00004634u, 0x0003003eu, 0x0000473eu, 0x000021b2u, 0x0003003eu, 0x0000473fu, 0x00004a29u, 0x00050041u, 0x00000007u, 0x00005a81u, 0x0000473fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005a82u, 0x00005a81u, 0x00050084u, 0x00000006u, 0x00005a83u, 0x00004634u, 0x00005a82u, 0x00050080u, 0x00000006u, 0x00005a84u, 0x00004632u, 0x00005a83u, 0x0003003eu, 0x00005a78u, 0x00005a84u, 0x00050041u, 0x00000007u, 0x00005a85u, 0x0000473fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005a86u, 0x00005a85u, 0x00050084u, 0x00000006u, 0x00005a87u, 0x00005a86u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005a89u, 0x00005a84u, 0x00005a87u, 0x0003003eu, 0x00005a78u, 0x00005a89u, 0x000500c7u, 0x00000006u, 0x00005a8bu, 0x00005a89u, 0x00000e65u, 0x0003003eu, 0x00005a78u, 0x00005a8bu, 0x000500c2u, 0x00000006u, 0x00005a8du, 0x00005a8bu, 0x0000022au, 0x0003003eu, 0x00005a79u, 0x00005a8du, 0x0004003du, 0x00000006u, 0x00005a8fu, 0x00005a81u, 0x000500c7u, 0x00000006u, 0x00005a90u, 0x00005a8fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005a91u, 0x00005a90u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005a93u, 0x00005a8du, 0x00005a91u, 0x0003003eu, 0x00005a79u, 0x00005a93u, 0x000500c6u, 0x00000006u, 0x00005a95u, 0x00005a93u, 0x0000045cu, 0x0003003eu, 0x00005a79u, 0x00005a95u, 0x00080041u, 0x00000692u, 0x00005a98u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005a95u, 0x0004003du, 0x00000011u, 0x00005a99u, 0x00005a98u, 0x00040071u, 0x00000006u, 0x00005a9au, 0x00005a99u, 0x0003003eu, 0x00005a7au, 0x00005a9au, 0x0003003eu, 0x00005a7bu, 0x00005a9au, 0x000500c2u, 0x00000006u, 0x00005aa1u, 0x00005a9au, 0x0000025du, 0x0003003eu, 0x00005a9du, 0x00005aa1u, 0x000500c7u, 0x00000006u, 0x00005aa3u, 0x00005a9au, 0x000006c3u, 0x0003003eu, 0x00005a9eu, 0x00005aa3u, 0x00040071u, 0x00000011u, 0x00005aa5u, 0x00005aa1u, 0x0004007cu, 0x00000012u, 0x00005aa6u, 0x00005aa5u, 0x00040071u, 0x00000011u, 0x00005aaeu, 0x00005aa3u, 0x0004007cu, 0x00000012u, 0x00005aafu, 0x00005aaeu, 0x00070050u, 0x00000013u, 0x00005ab0u, 0x00005aa6u, 0x00005aa6u, 0x00005aa6u, 0x00005aafu, 0x0003003eu, 0x00005a9fu, 0x00005ab0u, 0x0003003eu, 0x00005a7cu, 0x00005ab0u, 0x0003003eu, 0x00004675u, 0x00005ab0u, 0x000200f9u, 0x00004a1du, 0x000200f8u, 0x00004a1du, 0x000700f5u, 0x00000013u, 0x00009fd1u, 0x00009f14u, 0x000049d5u, 0x00005ab0u, 0x00004a1eu, 0x000700f5u, 0x00000013u, 0x00009e05u, 0x00009d45u, 0x000049d5u, 0x00005a77u, 0x00004a1eu, 0x000300f7u, 0x00004a2eu, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004a2fu, 0x00004a2eu, 0x000200f8u, 0x00004a2fu, 0x00050050u, 0x000000efu, 0x00004a32u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a33u, 0x00004a32u, 0x0003003eu, 0x00006df2u, 0x00004632u, 0x0003003eu, 0x00006df3u, 0x00004634u, 0x0003003eu, 0x00004741u, 0x000021b2u, 0x0003003eu, 0x00004742u, 0x00004a33u, 0x00050041u, 0x00000007u, 0x00005abau, 0x00004742u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005abbu, 0x00005abau, 0x00050084u, 0x00000006u, 0x00005abcu, 0x00004634u, 0x00005abbu, 0x00050080u, 0x00000006u, 0x00005abdu, 0x00004632u, 0x00005abcu, 0x0003003eu, 0x00005ab1u, 0x00005abdu, 0x00050041u, 0x00000007u, 0x00005abeu, 0x00004742u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005abfu, 0x00005abeu, 0x00050084u, 0x00000006u, 0x00005ac0u, 0x00005abfu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005ac2u, 0x00005abdu, 0x00005ac0u, 0x0003003eu, 0x00005ab1u, 0x00005ac2u, 0x000500c7u, 0x00000006u, 0x00005ac4u, 0x00005ac2u, 0x00000e65u, 0x0003003eu, 0x00005ab1u, 0x00005ac4u, 0x000500c2u, 0x00000006u, 0x00005ac6u, 0x00005ac4u, 0x0000022au, 0x0003003eu, 0x00005ab2u, 0x00005ac6u, 0x0004003du, 0x00000006u, 0x00005ac8u, 0x00005abau, 0x000500c7u, 0x00000006u, 0x00005ac9u, 0x00005ac8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005acau, 0x00005ac9u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005accu, 0x00005ac6u, 0x00005acau, 0x0003003eu, 0x00005ab2u, 0x00005accu, 0x000500c6u, 0x00000006u, 0x00005aceu, 0x00005accu, 0x0000045cu, 0x0003003eu, 0x00005ab2u, 0x00005aceu, 0x00080041u, 0x00000692u, 0x00005ad1u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005aceu, 0x0004003du, 0x00000011u, 0x00005ad2u, 0x00005ad1u, 0x00040071u, 0x00000006u, 0x00005ad3u, 0x00005ad2u, 0x0003003eu, 0x00005ab3u, 0x00005ad3u, 0x0003003eu, 0x00005ab4u, 0x00005ad3u, 0x000500c2u, 0x00000006u, 0x00005adau, 0x00005ad3u, 0x0000025du, 0x0003003eu, 0x00005ad6u, 0x00005adau, 0x000500c7u, 0x00000006u, 0x00005adcu, 0x00005ad3u, 0x000006c3u, 0x0003003eu, 0x00005ad7u, 0x00005adcu, 0x00040071u, 0x00000011u, 0x00005adeu, 0x00005adau, 0x0004007cu, 0x00000012u, 0x00005adfu, 0x00005adeu, 0x00040071u, 0x00000011u, 0x00005ae7u, 0x00005adcu, 0x0004007cu, 0x00000012u, 0x00005ae8u, 0x00005ae7u, 0x00070050u, 0x00000013u, 0x00005ae9u, 0x00005adfu, 0x00005adfu, 0x00005adfu, 0x00005ae8u, 0x0003003eu, 0x00005ad8u, 0x00005ae9u, 0x0003003eu, 0x00005ab5u, 0x00005ae9u, 0x0003003eu, 0x0000467du, 0x00005ae9u, 0x000200f9u, 0x00004a2eu, 0x000200f8u, 0x00004a2eu, 0x000700f5u, 0x00000013u, 0x0000a0b7u, 0x00009ff8u, 0x00004a1du, 0x00005ae9u, 0x00004a2fu, 0x000200f9u, 0x000049d2u, 0x000200f8u, 0x000049d4u, 0x0004007cu, 0x000000b0u, 0x000049f8u, 0x000099b9u, 0x0003003eu, 0x00006dd6u, 0x00004632u, 0x0003003eu, 0x00006dd7u, 0x00004634u, 0x0003003eu, 0x0000472cu, 0x000021b2u, 0x0003003eu, 0x0000472du, 0x000049f8u, 0x00050041u, 0x00000007u, 0x00005924u, 0x0000472du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005925u, 0x00005924u, 0x00050084u, 0x00000006u, 0x00005926u, 0x00004634u, 0x00005925u, 0x00050080u, 0x00000006u, 0x00005927u, 0x00004632u, 0x00005926u, 0x0003003eu, 0x0000591au, 0x00005927u, 0x00050041u, 0x00000007u, 0x00005928u, 0x0000472du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005929u, 0x00005928u, 0x00050080u, 0x00000006u, 0x0000592bu, 0x00005927u, 0x00005929u, 0x0003003eu, 0x0000591au, 0x0000592bu, 0x000500c7u, 0x00000006u, 0x0000592du, 0x0000592bu, 0x00000e65u, 0x0003003eu, 0x0000591au, 0x0000592du, 0x0003003eu, 0x0000591bu, 0x0000592du, 0x0004003du, 0x00000006u, 0x00005930u, 0x00005924u, 0x000500c7u, 0x00000006u, 0x00005931u, 0x00005930u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005932u, 0x00005931u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005934u, 0x0000592du, 0x00005932u, 0x0003003eu, 0x0000591bu, 0x00005934u, 0x000500c6u, 0x00000006u, 0x00005936u, 0x00005934u, 0x00000464u, 0x0003003eu, 0x0000591bu, 0x00005936u, 0x00080041u, 0x00000671u, 0x00005939u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005936u, 0x0004003du, 0x0000000fu, 0x0000593au, 0x00005939u, 0x00040071u, 0x00000006u, 0x0000593bu, 0x0000593au, 0x0003003eu, 0x0000591cu, 0x0000593bu, 0x000500c2u, 0x00000006u, 0x0000593du, 0x0000593bu, 0x00000233u, 0x0003003eu, 0x0000591du, 0x0000593du, 0x000500c7u, 0x00000006u, 0x0000593fu, 0x0000593bu, 0x00000e88u, 0x0003003eu, 0x0000591eu, 0x0000593fu, 0x000500c4u, 0x00000006u, 0x00005941u, 0x0000593fu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005943u, 0x0000593fu, 0x00005941u, 0x0003003eu, 0x0000591eu, 0x00005943u, 0x000500c4u, 0x00000006u, 0x00005945u, 0x0000593du, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005947u, 0x0000593du, 0x00005945u, 0x0003003eu, 0x0000591du, 0x00005947u, 0x00040071u, 0x00000011u, 0x00005949u, 0x00005947u, 0x0004007cu, 0x00000012u, 0x0000594au, 0x00005949u, 0x00040071u, 0x00000011u, 0x00005952u, 0x00005943u, 0x0004007cu, 0x00000012u, 0x00005953u, 0x00005952u, 0x00070050u, 0x00000013u, 0x00005954u, 0x0000594au, 0x0000594au, 0x0000594au, 0x00005953u, 0x0003003eu, 0x0000591fu, 0x00005954u, 0x0003003eu, 0x00004665u, 0x00005954u, 0x000300f7u, 0x000049fdu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000049feu, 0x000049fdu, 0x000200f8u, 0x000049feu, 0x00050050u, 0x000000efu, 0x00004a01u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004a02u, 0x00004a01u, 0x0003003eu, 0x00006ddau, 0x00004632u, 0x0003003eu, 0x00006ddbu, 0x00004634u, 0x0003003eu, 0x0000472fu, 0x000021b2u, 0x0003003eu, 0x00004730u, 0x00004a02u, 0x00050041u, 0x00000007u, 0x0000595fu, 0x00004730u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005960u, 0x0000595fu, 0x00050084u, 0x00000006u, 0x00005961u, 0x00004634u, 0x00005960u, 0x00050080u, 0x00000006u, 0x00005962u, 0x00004632u, 0x00005961u, 0x0003003eu, 0x00005955u, 0x00005962u, 0x00050041u, 0x00000007u, 0x00005963u, 0x00004730u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005964u, 0x00005963u, 0x00050080u, 0x00000006u, 0x00005966u, 0x00005962u, 0x00005964u, 0x0003003eu, 0x00005955u, 0x00005966u, 0x000500c7u, 0x00000006u, 0x00005968u, 0x00005966u, 0x00000e65u, 0x0003003eu, 0x00005955u, 0x00005968u, 0x0003003eu, 0x00005956u, 0x00005968u, 0x0004003du, 0x00000006u, 0x0000596bu, 0x0000595fu, 0x000500c7u, 0x00000006u, 0x0000596cu, 0x0000596bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000596du, 0x0000596cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000596fu, 0x00005968u, 0x0000596du, 0x0003003eu, 0x00005956u, 0x0000596fu, 0x000500c6u, 0x00000006u, 0x00005971u, 0x0000596fu, 0x00000464u, 0x0003003eu, 0x00005956u, 0x00005971u, 0x00080041u, 0x00000671u, 0x00005974u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005971u, 0x0004003du, 0x0000000fu, 0x00005975u, 0x00005974u, 0x00040071u, 0x00000006u, 0x00005976u, 0x00005975u, 0x0003003eu, 0x00005957u, 0x00005976u, 0x000500c2u, 0x00000006u, 0x00005978u, 0x00005976u, 0x00000233u, 0x0003003eu, 0x00005958u, 0x00005978u, 0x000500c7u, 0x00000006u, 0x0000597au, 0x00005976u, 0x00000e88u, 0x0003003eu, 0x00005959u, 0x0000597au, 0x000500c4u, 0x00000006u, 0x0000597cu, 0x0000597au, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000597eu, 0x0000597au, 0x0000597cu, 0x0003003eu, 0x00005959u, 0x0000597eu, 0x000500c4u, 0x00000006u, 0x00005980u, 0x00005978u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005982u, 0x00005978u, 0x00005980u, 0x0003003eu, 0x00005958u, 0x00005982u, 0x00040071u, 0x00000011u, 0x00005984u, 0x00005982u, 0x0004007cu, 0x00000012u, 0x00005985u, 0x00005984u, 0x00040071u, 0x00000011u, 0x0000598du, 0x0000597eu, 0x0004007cu, 0x00000012u, 0x0000598eu, 0x0000598du, 0x00070050u, 0x00000013u, 0x0000598fu, 0x00005985u, 0x00005985u, 0x00005985u, 0x0000598eu, 0x0003003eu, 0x0000595au, 0x0000598fu, 0x0003003eu, 0x0000466du, 0x0000598fu, 0x00050050u, 0x000000efu, 0x00004a08u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a09u, 0x00004a08u, 0x0003003eu, 0x00006ddeu, 0x00004632u, 0x0003003eu, 0x00006ddfu, 0x00004634u, 0x0003003eu, 0x00004732u, 0x000021b2u, 0x0003003eu, 0x00004733u, 0x00004a09u, 0x00050041u, 0x00000007u, 0x0000599au, 0x00004733u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000599bu, 0x0000599au, 0x00050084u, 0x00000006u, 0x0000599cu, 0x00004634u, 0x0000599bu, 0x00050080u, 0x00000006u, 0x0000599du, 0x00004632u, 0x0000599cu, 0x0003003eu, 0x00005990u, 0x0000599du, 0x00050041u, 0x00000007u, 0x0000599eu, 0x00004733u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000599fu, 0x0000599eu, 0x00050080u, 0x00000006u, 0x000059a1u, 0x0000599du, 0x0000599fu, 0x0003003eu, 0x00005990u, 0x000059a1u, 0x000500c7u, 0x00000006u, 0x000059a3u, 0x000059a1u, 0x00000e65u, 0x0003003eu, 0x00005990u, 0x000059a3u, 0x0003003eu, 0x00005991u, 0x000059a3u, 0x0004003du, 0x00000006u, 0x000059a6u, 0x0000599au, 0x000500c7u, 0x00000006u, 0x000059a7u, 0x000059a6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000059a8u, 0x000059a7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000059aau, 0x000059a3u, 0x000059a8u, 0x0003003eu, 0x00005991u, 0x000059aau, 0x000500c6u, 0x00000006u, 0x000059acu, 0x000059aau, 0x00000464u, 0x0003003eu, 0x00005991u, 0x000059acu, 0x00080041u, 0x00000671u, 0x000059afu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000059acu, 0x0004003du, 0x0000000fu, 0x000059b0u, 0x000059afu, 0x00040071u, 0x00000006u, 0x000059b1u, 0x000059b0u, 0x0003003eu, 0x00005992u, 0x000059b1u, 0x000500c2u, 0x00000006u, 0x000059b3u, 0x000059b1u, 0x00000233u, 0x0003003eu, 0x00005993u, 0x000059b3u, 0x000500c7u, 0x00000006u, 0x000059b5u, 0x000059b1u, 0x00000e88u, 0x0003003eu, 0x00005994u, 0x000059b5u, 0x000500c4u, 0x00000006u, 0x000059b7u, 0x000059b5u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000059b9u, 0x000059b5u, 0x000059b7u, 0x0003003eu, 0x00005994u, 0x000059b9u, 0x000500c4u, 0x00000006u, 0x000059bbu, 0x000059b3u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000059bdu, 0x000059b3u, 0x000059bbu, 0x0003003eu, 0x00005993u, 0x000059bdu, 0x00040071u, 0x00000011u, 0x000059bfu, 0x000059bdu, 0x0004007cu, 0x00000012u, 0x000059c0u, 0x000059bfu, 0x00040071u, 0x00000011u, 0x000059c8u, 0x000059b9u, 0x0004007cu, 0x00000012u, 0x000059c9u, 0x000059c8u, 0x00070050u, 0x00000013u, 0x000059cau, 0x000059c0u, 0x000059c0u, 0x000059c0u, 0x000059c9u, 0x0003003eu, 0x00005995u, 0x000059cau, 0x0003003eu, 0x00004675u, 0x000059cau, 0x000200f9u, 0x000049fdu, 0x000200f8u, 0x000049fdu, 0x000700f5u, 0x00000013u, 0x00009fcfu, 0x00009f14u, 0x000049d4u, 0x000059cau, 0x000049feu, 0x000700f5u, 0x00000013u, 0x00009e03u, 0x00009d45u, 0x000049d4u, 0x0000598fu, 0x000049feu, 0x000300f7u, 0x00004a0eu, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004a0fu, 0x00004a0eu, 0x000200f8u, 0x00004a0fu, 0x00050050u, 0x000000efu, 0x00004a12u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004a13u, 0x00004a12u, 0x0003003eu, 0x00006de2u, 0x00004632u, 0x0003003eu, 0x00006de3u, 0x00004634u, 0x0003003eu, 0x00004735u, 0x000021b2u, 0x0003003eu, 0x00004736u, 0x00004a13u, 0x00050041u, 0x00000007u, 0x000059d5u, 0x00004736u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000059d6u, 0x000059d5u, 0x00050084u, 0x00000006u, 0x000059d7u, 0x00004634u, 0x000059d6u, 0x00050080u, 0x00000006u, 0x000059d8u, 0x00004632u, 0x000059d7u, 0x0003003eu, 0x000059cbu, 0x000059d8u, 0x00050041u, 0x00000007u, 0x000059d9u, 0x00004736u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000059dau, 0x000059d9u, 0x00050080u, 0x00000006u, 0x000059dcu, 0x000059d8u, 0x000059dau, 0x0003003eu, 0x000059cbu, 0x000059dcu, 0x000500c7u, 0x00000006u, 0x000059deu, 0x000059dcu, 0x00000e65u, 0x0003003eu, 0x000059cbu, 0x000059deu, 0x0003003eu, 0x000059ccu, 0x000059deu, 0x0004003du, 0x00000006u, 0x000059e1u, 0x000059d5u, 0x000500c7u, 0x00000006u, 0x000059e2u, 0x000059e1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000059e3u, 0x000059e2u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000059e5u, 0x000059deu, 0x000059e3u, 0x0003003eu, 0x000059ccu, 0x000059e5u, 0x000500c6u, 0x00000006u, 0x000059e7u, 0x000059e5u, 0x00000464u, 0x0003003eu, 0x000059ccu, 0x000059e7u, 0x00080041u, 0x00000671u, 0x000059eau, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000059e7u, 0x0004003du, 0x0000000fu, 0x000059ebu, 0x000059eau, 0x00040071u, 0x00000006u, 0x000059ecu, 0x000059ebu, 0x0003003eu, 0x000059cdu, 0x000059ecu, 0x000500c2u, 0x00000006u, 0x000059eeu, 0x000059ecu, 0x00000233u, 0x0003003eu, 0x000059ceu, 0x000059eeu, 0x000500c7u, 0x00000006u, 0x000059f0u, 0x000059ecu, 0x00000e88u, 0x0003003eu, 0x000059cfu, 0x000059f0u, 0x000500c4u, 0x00000006u, 0x000059f2u, 0x000059f0u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000059f4u, 0x000059f0u, 0x000059f2u, 0x0003003eu, 0x000059cfu, 0x000059f4u, 0x000500c4u, 0x00000006u, 0x000059f6u, 0x000059eeu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000059f8u, 0x000059eeu, 0x000059f6u, 0x0003003eu, 0x000059ceu, 0x000059f8u, 0x00040071u, 0x00000011u, 0x000059fau, 0x000059f8u, 0x0004007cu, 0x00000012u, 0x000059fbu, 0x000059fau, 0x00040071u, 0x00000011u, 0x00005a03u, 0x000059f4u, 0x0004007cu, 0x00000012u, 0x00005a04u, 0x00005a03u, 0x00070050u, 0x00000013u, 0x00005a05u, 0x000059fbu, 0x000059fbu, 0x000059fbu, 0x00005a04u, 0x0003003eu, 0x000059d0u, 0x00005a05u, 0x0003003eu, 0x0000467du, 0x00005a05u, 0x000200f9u, 0x00004a0eu, 0x000200f8u, 0x00004a0eu, 0x000700f5u, 0x00000013u, 0x0000a0b5u, 0x00009ff8u, 0x000049fdu, 0x00005a05u, 0x00004a0fu, 0x000200f9u, 0x000049d2u, 0x000200f8u, 0x000049d3u, 0x0004007cu, 0x000000b0u, 0x000049d8u, 0x000099b9u, 0x0003003eu, 0x00006dc6u, 0x00004632u, 0x0003003eu, 0x00006dc7u, 0x00004634u, 0x0003003eu, 0x00004720u, 0x000021b2u, 0x0003003eu, 0x00004721u, 0x000049d8u, 0x00050041u, 0x00000007u, 0x00005810u, 0x00004721u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005811u, 0x00005810u, 0x00050084u, 0x00000006u, 0x00005812u, 0x00004634u, 0x00005811u, 0x00050080u, 0x00000006u, 0x00005813u, 0x00004632u, 0x00005812u, 0x0003003eu, 0x00005806u, 0x00005813u, 0x00050041u, 0x00000007u, 0x00005814u, 0x00004721u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005815u, 0x00005814u, 0x000500c2u, 0x00000006u, 0x00005816u, 0x00005815u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005818u, 0x00005813u, 0x00005816u, 0x0003003eu, 0x00005806u, 0x00005818u, 0x000500c7u, 0x00000006u, 0x0000581au, 0x00005818u, 0x00000e65u, 0x0003003eu, 0x00005806u, 0x0000581au, 0x0004003du, 0x00000006u, 0x0000581cu, 0x00005814u, 0x000400c8u, 0x00000006u, 0x0000581du, 0x0000581cu, 0x000500c7u, 0x00000006u, 0x0000581eu, 0x0000581du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000581fu, 0x0000581eu, 0x00000704u, 0x0003003eu, 0x00005807u, 0x0000581fu, 0x0003003eu, 0x00005808u, 0x0000581au, 0x0004003du, 0x00000006u, 0x00005822u, 0x00005810u, 0x000500c7u, 0x00000006u, 0x00005823u, 0x00005822u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005824u, 0x00005823u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005826u, 0x0000581au, 0x00005824u, 0x0003003eu, 0x00005808u, 0x00005826u, 0x000500c6u, 0x00000006u, 0x00005828u, 0x00005826u, 0x00000464u, 0x0003003eu, 0x00005808u, 0x00005828u, 0x00080041u, 0x00000671u, 0x0000582bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005828u, 0x0004003du, 0x0000000fu, 0x0000582cu, 0x0000582bu, 0x00040071u, 0x00000006u, 0x0000582du, 0x0000582cu, 0x0003003eu, 0x00005809u, 0x0000582du, 0x000500c2u, 0x00000006u, 0x00005830u, 0x0000582du, 0x0000581fu, 0x000500c7u, 0x00000006u, 0x00005831u, 0x00005830u, 0x00000e88u, 0x0003003eu, 0x00005809u, 0x00005831u, 0x000500c7u, 0x00000006u, 0x00005833u, 0x00005831u, 0x00000ec0u, 0x0003003eu, 0x0000580au, 0x00005833u, 0x000500c4u, 0x00000006u, 0x00005835u, 0x00005833u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00005837u, 0x00005833u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00005838u, 0x00005835u, 0x00005837u, 0x000500c2u, 0x00000006u, 0x0000583au, 0x00005833u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x0000583bu, 0x00005838u, 0x0000583au, 0x0003003eu, 0x0000580au, 0x0000583bu, 0x00040071u, 0x00000011u, 0x0000583du, 0x0000583bu, 0x0004007cu, 0x00000012u, 0x0000583eu, 0x0000583du, 0x000500c7u, 0x00000006u, 0x00005846u, 0x00005831u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005847u, 0x00005846u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005848u, 0x00005847u, 0x0004007cu, 0x00000012u, 0x00005849u, 0x00005848u, 0x00070050u, 0x00000013u, 0x0000584au, 0x0000583eu, 0x0000583eu, 0x0000583eu, 0x00005849u, 0x0003003eu, 0x0000580bu, 0x0000584au, 0x0003003eu, 0x00004665u, 0x0000584au, 0x000300f7u, 0x000049ddu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000049deu, 0x000049ddu, 0x000200f8u, 0x000049deu, 0x00050050u, 0x000000efu, 0x000049e1u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x000049e2u, 0x000049e1u, 0x0003003eu, 0x00006dcau, 0x00004632u, 0x0003003eu, 0x00006dcbu, 0x00004634u, 0x0003003eu, 0x00004723u, 0x000021b2u, 0x0003003eu, 0x00004724u, 0x000049e2u, 0x00050041u, 0x00000007u, 0x00005855u, 0x00004724u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005856u, 0x00005855u, 0x00050084u, 0x00000006u, 0x00005857u, 0x00004634u, 0x00005856u, 0x00050080u, 0x00000006u, 0x00005858u, 0x00004632u, 0x00005857u, 0x0003003eu, 0x0000584bu, 0x00005858u, 0x00050041u, 0x00000007u, 0x00005859u, 0x00004724u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000585au, 0x00005859u, 0x000500c2u, 0x00000006u, 0x0000585bu, 0x0000585au, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000585du, 0x00005858u, 0x0000585bu, 0x0003003eu, 0x0000584bu, 0x0000585du, 0x000500c7u, 0x00000006u, 0x0000585fu, 0x0000585du, 0x00000e65u, 0x0003003eu, 0x0000584bu, 0x0000585fu, 0x0004003du, 0x00000006u, 0x00005861u, 0x00005859u, 0x000400c8u, 0x00000006u, 0x00005862u, 0x00005861u, 0x000500c7u, 0x00000006u, 0x00005863u, 0x00005862u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005864u, 0x00005863u, 0x00000704u, 0x0003003eu, 0x0000584cu, 0x00005864u, 0x0003003eu, 0x0000584du, 0x0000585fu, 0x0004003du, 0x00000006u, 0x00005867u, 0x00005855u, 0x000500c7u, 0x00000006u, 0x00005868u, 0x00005867u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005869u, 0x00005868u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000586bu, 0x0000585fu, 0x00005869u, 0x0003003eu, 0x0000584du, 0x0000586bu, 0x000500c6u, 0x00000006u, 0x0000586du, 0x0000586bu, 0x00000464u, 0x0003003eu, 0x0000584du, 0x0000586du, 0x00080041u, 0x00000671u, 0x00005870u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000586du, 0x0004003du, 0x0000000fu, 0x00005871u, 0x00005870u, 0x00040071u, 0x00000006u, 0x00005872u, 0x00005871u, 0x0003003eu, 0x0000584eu, 0x00005872u, 0x000500c2u, 0x00000006u, 0x00005875u, 0x00005872u, 0x00005864u, 0x000500c7u, 0x00000006u, 0x00005876u, 0x00005875u, 0x00000e88u, 0x0003003eu, 0x0000584eu, 0x00005876u, 0x000500c7u, 0x00000006u, 0x00005878u, 0x00005876u, 0x00000ec0u, 0x0003003eu, 0x0000584fu, 0x00005878u, 0x000500c4u, 0x00000006u, 0x0000587au, 0x00005878u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x0000587cu, 0x00005878u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x0000587du, 0x0000587au, 0x0000587cu, 0x000500c2u, 0x00000006u, 0x0000587fu, 0x00005878u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00005880u, 0x0000587du, 0x0000587fu, 0x0003003eu, 0x0000584fu, 0x00005880u, 0x00040071u, 0x00000011u, 0x00005882u, 0x00005880u, 0x0004007cu, 0x00000012u, 0x00005883u, 0x00005882u, 0x000500c7u, 0x00000006u, 0x0000588bu, 0x00005876u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000588cu, 0x0000588bu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000588du, 0x0000588cu, 0x0004007cu, 0x00000012u, 0x0000588eu, 0x0000588du, 0x00070050u, 0x00000013u, 0x0000588fu, 0x00005883u, 0x00005883u, 0x00005883u, 0x0000588eu, 0x0003003eu, 0x00005850u, 0x0000588fu, 0x0003003eu, 0x0000466du, 0x0000588fu, 0x00050050u, 0x000000efu, 0x000049e8u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000049e9u, 0x000049e8u, 0x0003003eu, 0x00006dceu, 0x00004632u, 0x0003003eu, 0x00006dcfu, 0x00004634u, 0x0003003eu, 0x00004726u, 0x000021b2u, 0x0003003eu, 0x00004727u, 0x000049e9u, 0x00050041u, 0x00000007u, 0x0000589au, 0x00004727u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000589bu, 0x0000589au, 0x00050084u, 0x00000006u, 0x0000589cu, 0x00004634u, 0x0000589bu, 0x00050080u, 0x00000006u, 0x0000589du, 0x00004632u, 0x0000589cu, 0x0003003eu, 0x00005890u, 0x0000589du, 0x00050041u, 0x00000007u, 0x0000589eu, 0x00004727u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000589fu, 0x0000589eu, 0x000500c2u, 0x00000006u, 0x000058a0u, 0x0000589fu, 0x0000022au, 0x00050080u, 0x00000006u, 0x000058a2u, 0x0000589du, 0x000058a0u, 0x0003003eu, 0x00005890u, 0x000058a2u, 0x000500c7u, 0x00000006u, 0x000058a4u, 0x000058a2u, 0x00000e65u, 0x0003003eu, 0x00005890u, 0x000058a4u, 0x0004003du, 0x00000006u, 0x000058a6u, 0x0000589eu, 0x000400c8u, 0x00000006u, 0x000058a7u, 0x000058a6u, 0x000500c7u, 0x00000006u, 0x000058a8u, 0x000058a7u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000058a9u, 0x000058a8u, 0x00000704u, 0x0003003eu, 0x00005891u, 0x000058a9u, 0x0003003eu, 0x00005892u, 0x000058a4u, 0x0004003du, 0x00000006u, 0x000058acu, 0x0000589au, 0x000500c7u, 0x00000006u, 0x000058adu, 0x000058acu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000058aeu, 0x000058adu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000058b0u, 0x000058a4u, 0x000058aeu, 0x0003003eu, 0x00005892u, 0x000058b0u, 0x000500c6u, 0x00000006u, 0x000058b2u, 0x000058b0u, 0x00000464u, 0x0003003eu, 0x00005892u, 0x000058b2u, 0x00080041u, 0x00000671u, 0x000058b5u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000058b2u, 0x0004003du, 0x0000000fu, 0x000058b6u, 0x000058b5u, 0x00040071u, 0x00000006u, 0x000058b7u, 0x000058b6u, 0x0003003eu, 0x00005893u, 0x000058b7u, 0x000500c2u, 0x00000006u, 0x000058bau, 0x000058b7u, 0x000058a9u, 0x000500c7u, 0x00000006u, 0x000058bbu, 0x000058bau, 0x00000e88u, 0x0003003eu, 0x00005893u, 0x000058bbu, 0x000500c7u, 0x00000006u, 0x000058bdu, 0x000058bbu, 0x00000ec0u, 0x0003003eu, 0x00005894u, 0x000058bdu, 0x000500c4u, 0x00000006u, 0x000058bfu, 0x000058bdu, 0x00000233u, 0x000500c4u, 0x00000006u, 0x000058c1u, 0x000058bdu, 0x0000022au, 0x000500c5u, 0x00000006u, 0x000058c2u, 0x000058bfu, 0x000058c1u, 0x000500c2u, 0x00000006u, 0x000058c4u, 0x000058bdu, 0x0000022du, 0x000500c5u, 0x00000006u, 0x000058c5u, 0x000058c2u, 0x000058c4u, 0x0003003eu, 0x00005894u, 0x000058c5u, 0x00040071u, 0x00000011u, 0x000058c7u, 0x000058c5u, 0x0004007cu, 0x00000012u, 0x000058c8u, 0x000058c7u, 0x000500c7u, 0x00000006u, 0x000058d0u, 0x000058bbu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000058d1u, 0x000058d0u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000058d2u, 0x000058d1u, 0x0004007cu, 0x00000012u, 0x000058d3u, 0x000058d2u, 0x00070050u, 0x00000013u, 0x000058d4u, 0x000058c8u, 0x000058c8u, 0x000058c8u, 0x000058d3u, 0x0003003eu, 0x00005895u, 0x000058d4u, 0x0003003eu, 0x00004675u, 0x000058d4u, 0x000200f9u, 0x000049ddu, 0x000200f8u, 0x000049ddu, 0x000700f5u, 0x00000013u, 0x00009fcdu, 0x00009f14u, 0x000049d3u, 0x000058d4u, 0x000049deu, 0x000700f5u, 0x00000013u, 0x00009e01u, 0x00009d45u, 0x000049d3u, 0x0000588fu, 0x000049deu, 0x000300f7u, 0x000049eeu, 0x00000000u, 0x000400fau, 0x000047e1u, 0x000049efu, 0x000049eeu, 0x000200f8u, 0x000049efu, 0x00050050u, 0x000000efu, 0x000049f2u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000049f3u, 0x000049f2u, 0x0003003eu, 0x00006dd2u, 0x00004632u, 0x0003003eu, 0x00006dd3u, 0x00004634u, 0x0003003eu, 0x00004729u, 0x000021b2u, 0x0003003eu, 0x0000472au, 0x000049f3u, 0x00050041u, 0x00000007u, 0x000058dfu, 0x0000472au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000058e0u, 0x000058dfu, 0x00050084u, 0x00000006u, 0x000058e1u, 0x00004634u, 0x000058e0u, 0x00050080u, 0x00000006u, 0x000058e2u, 0x00004632u, 0x000058e1u, 0x0003003eu, 0x000058d5u, 0x000058e2u, 0x00050041u, 0x00000007u, 0x000058e3u, 0x0000472au, 0x0000032du, 0x0004003du, 0x00000006u, 0x000058e4u, 0x000058e3u, 0x000500c2u, 0x00000006u, 0x000058e5u, 0x000058e4u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000058e7u, 0x000058e2u, 0x000058e5u, 0x0003003eu, 0x000058d5u, 0x000058e7u, 0x000500c7u, 0x00000006u, 0x000058e9u, 0x000058e7u, 0x00000e65u, 0x0003003eu, 0x000058d5u, 0x000058e9u, 0x0004003du, 0x00000006u, 0x000058ebu, 0x000058e3u, 0x000400c8u, 0x00000006u, 0x000058ecu, 0x000058ebu, 0x000500c7u, 0x00000006u, 0x000058edu, 0x000058ecu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000058eeu, 0x000058edu, 0x00000704u, 0x0003003eu, 0x000058d6u, 0x000058eeu, 0x0003003eu, 0x000058d7u, 0x000058e9u, 0x0004003du, 0x00000006u, 0x000058f1u, 0x000058dfu, 0x000500c7u, 0x00000006u, 0x000058f2u, 0x000058f1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000058f3u, 0x000058f2u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000058f5u, 0x000058e9u, 0x000058f3u, 0x0003003eu, 0x000058d7u, 0x000058f5u, 0x000500c6u, 0x00000006u, 0x000058f7u, 0x000058f5u, 0x00000464u, 0x0003003eu, 0x000058d7u, 0x000058f7u, 0x00080041u, 0x00000671u, 0x000058fau, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000058f7u, 0x0004003du, 0x0000000fu, 0x000058fbu, 0x000058fau, 0x00040071u, 0x00000006u, 0x000058fcu, 0x000058fbu, 0x0003003eu, 0x000058d8u, 0x000058fcu, 0x000500c2u, 0x00000006u, 0x000058ffu, 0x000058fcu, 0x000058eeu, 0x000500c7u, 0x00000006u, 0x00005900u, 0x000058ffu, 0x00000e88u, 0x0003003eu, 0x000058d8u, 0x00005900u, 0x000500c7u, 0x00000006u, 0x00005902u, 0x00005900u, 0x00000ec0u, 0x0003003eu, 0x000058d9u, 0x00005902u, 0x000500c4u, 0x00000006u, 0x00005904u, 0x00005902u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00005906u, 0x00005902u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00005907u, 0x00005904u, 0x00005906u, 0x000500c2u, 0x00000006u, 0x00005909u, 0x00005902u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x0000590au, 0x00005907u, 0x00005909u, 0x0003003eu, 0x000058d9u, 0x0000590au, 0x00040071u, 0x00000011u, 0x0000590cu, 0x0000590au, 0x0004007cu, 0x00000012u, 0x0000590du, 0x0000590cu, 0x000500c7u, 0x00000006u, 0x00005915u, 0x00005900u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005916u, 0x00005915u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005917u, 0x00005916u, 0x0004007cu, 0x00000012u, 0x00005918u, 0x00005917u, 0x00070050u, 0x00000013u, 0x00005919u, 0x0000590du, 0x0000590du, 0x0000590du, 0x00005918u, 0x0003003eu, 0x000058dau, 0x00005919u, 0x0003003eu, 0x0000467du, 0x00005919u, 0x000200f9u, 0x000049eeu, 0x000200f8u, 0x000049eeu, 0x000700f5u, 0x00000013u, 0x0000a0b3u, 0x00009ff8u, 0x000049ddu, 0x00005919u, 0x000049efu, 0x000200f9u, 0x000049d2u, 0x000200f8u, 0x000049d2u, 0x000d00f5u, 0x00000013u, 0x0000a0b2u, 0x00009ff8u, 0x000048a2u, 0x0000a0b3u, 0x000049eeu, 0x0000a0b5u, 0x00004a0eu, 0x0000a0b7u, 0x00004a2eu, 0x0000a0b9u, 0x00004a4eu, 0x000d00f5u, 0x00000013u, 0x00009fcbu, 0x00009f14u, 0x000048a2u, 0x00009fcdu, 0x000049eeu, 0x00009fcfu, 0x00004a0eu, 0x00009fd1u, 0x00004a2eu, 0x00009fd3u, 0x00004a4eu, 0x000d00f5u, 0x00000013u, 0x00009ee6u, 0x00009e2du, 0x000048a2u, 0x0000584au, 0x000049eeu, 0x00005954u, 0x00004a0eu, 0x00005a3eu, 0x00004a2eu, 0x00005b15u, 0x00004a4eu, 0x000d00f5u, 0x00000013u, 0x00009dffu, 0x00009d45u, 0x000048a2u, 0x00009e01u, 0x000049eeu, 0x00009e03u, 0x00004a0eu, 0x00009e05u, 0x00004a2eu, 0x00009e07u, 0x00004a4eu, 0x000200f9u, 0x0000489eu, 0x000200f8u, 0x000048a1u, 0x00040071u, 0x00000006u, 0x0000495cu, 0x00004638u, 0x0004007cu, 0x00000008u, 0x0000495du, 0x0000495cu, 0x000300f7u, 0x0000495eu, 0x00000000u, 0x000700fbu, 0x0000495du, 0x0000495fu, 0x00000000u, 0x00004960u, 0x00000001u, 0x00004961u, 0x000200f8u, 0x00004961u, 0x0004007cu, 0x000000b0u, 0x000049afu, 0x000099b9u, 0x0003003eu, 0x00006da6u, 0x00004632u, 0x0003003eu, 0x00006da7u, 0x00004634u, 0x0003003eu, 0x00004708u, 0x000021b2u, 0x0003003eu, 0x00004709u, 0x000049afu, 0x00050041u, 0x00000007u, 0x0000577eu, 0x00004709u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000577fu, 0x0000577eu, 0x00050084u, 0x00000006u, 0x00005780u, 0x00004634u, 0x0000577fu, 0x00050080u, 0x00000006u, 0x00005781u, 0x00004632u, 0x00005780u, 0x0003003eu, 0x00005776u, 0x00005781u, 0x00050041u, 0x00000007u, 0x00005782u, 0x00004709u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005783u, 0x00005782u, 0x00050080u, 0x00000006u, 0x00005785u, 0x00005781u, 0x00005783u, 0x0003003eu, 0x00005776u, 0x00005785u, 0x000500c7u, 0x00000006u, 0x00005787u, 0x00005785u, 0x00000e65u, 0x0003003eu, 0x00005776u, 0x00005787u, 0x0003003eu, 0x00005777u, 0x00005787u, 0x0004003du, 0x00000006u, 0x0000578au, 0x0000577eu, 0x000500c7u, 0x00000006u, 0x0000578bu, 0x0000578au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000578cu, 0x0000578bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000578eu, 0x00005787u, 0x0000578cu, 0x0003003eu, 0x00005777u, 0x0000578eu, 0x000500c6u, 0x00000006u, 0x00005790u, 0x0000578eu, 0x00000464u, 0x0003003eu, 0x00005777u, 0x00005790u, 0x00080041u, 0x00000671u, 0x00005793u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005790u, 0x0004003du, 0x0000000fu, 0x00005794u, 0x00005793u, 0x00040071u, 0x00000006u, 0x00005795u, 0x00005794u, 0x0003003eu, 0x00005778u, 0x00005795u, 0x00040071u, 0x00000011u, 0x00005797u, 0x00005795u, 0x0004007cu, 0x00000012u, 0x00005798u, 0x00005797u, 0x00070050u, 0x00000013u, 0x00005799u, 0x00005798u, 0x00005798u, 0x00005798u, 0x00005798u, 0x0003003eu, 0x00005779u, 0x00005799u, 0x0003003eu, 0x00004665u, 0x00005799u, 0x000300f7u, 0x000049b4u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000049b5u, 0x000049b4u, 0x000200f8u, 0x000049b5u, 0x00050050u, 0x000000efu, 0x000049b8u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x000049b9u, 0x000049b8u, 0x0003003eu, 0x00006daau, 0x00004632u, 0x0003003eu, 0x00006dabu, 0x00004634u, 0x0003003eu, 0x0000470bu, 0x000021b2u, 0x0003003eu, 0x0000470cu, 0x000049b9u, 0x00050041u, 0x00000007u, 0x000057a2u, 0x0000470cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000057a3u, 0x000057a2u, 0x00050084u, 0x00000006u, 0x000057a4u, 0x00004634u, 0x000057a3u, 0x00050080u, 0x00000006u, 0x000057a5u, 0x00004632u, 0x000057a4u, 0x0003003eu, 0x0000579au, 0x000057a5u, 0x00050041u, 0x00000007u, 0x000057a6u, 0x0000470cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000057a7u, 0x000057a6u, 0x00050080u, 0x00000006u, 0x000057a9u, 0x000057a5u, 0x000057a7u, 0x0003003eu, 0x0000579au, 0x000057a9u, 0x000500c7u, 0x00000006u, 0x000057abu, 0x000057a9u, 0x00000e65u, 0x0003003eu, 0x0000579au, 0x000057abu, 0x0003003eu, 0x0000579bu, 0x000057abu, 0x0004003du, 0x00000006u, 0x000057aeu, 0x000057a2u, 0x000500c7u, 0x00000006u, 0x000057afu, 0x000057aeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000057b0u, 0x000057afu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000057b2u, 0x000057abu, 0x000057b0u, 0x0003003eu, 0x0000579bu, 0x000057b2u, 0x000500c6u, 0x00000006u, 0x000057b4u, 0x000057b2u, 0x00000464u, 0x0003003eu, 0x0000579bu, 0x000057b4u, 0x00080041u, 0x00000671u, 0x000057b7u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000057b4u, 0x0004003du, 0x0000000fu, 0x000057b8u, 0x000057b7u, 0x00040071u, 0x00000006u, 0x000057b9u, 0x000057b8u, 0x0003003eu, 0x0000579cu, 0x000057b9u, 0x00040071u, 0x00000011u, 0x000057bbu, 0x000057b9u, 0x0004007cu, 0x00000012u, 0x000057bcu, 0x000057bbu, 0x00070050u, 0x00000013u, 0x000057bdu, 0x000057bcu, 0x000057bcu, 0x000057bcu, 0x000057bcu, 0x0003003eu, 0x0000579du, 0x000057bdu, 0x0003003eu, 0x0000466du, 0x000057bdu, 0x00050050u, 0x000000efu, 0x000049bfu, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000049c0u, 0x000049bfu, 0x0003003eu, 0x00006daeu, 0x00004632u, 0x0003003eu, 0x00006dafu, 0x00004634u, 0x0003003eu, 0x0000470eu, 0x000021b2u, 0x0003003eu, 0x0000470fu, 0x000049c0u, 0x00050041u, 0x00000007u, 0x000057c6u, 0x0000470fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000057c7u, 0x000057c6u, 0x00050084u, 0x00000006u, 0x000057c8u, 0x00004634u, 0x000057c7u, 0x00050080u, 0x00000006u, 0x000057c9u, 0x00004632u, 0x000057c8u, 0x0003003eu, 0x000057beu, 0x000057c9u, 0x00050041u, 0x00000007u, 0x000057cau, 0x0000470fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000057cbu, 0x000057cau, 0x00050080u, 0x00000006u, 0x000057cdu, 0x000057c9u, 0x000057cbu, 0x0003003eu, 0x000057beu, 0x000057cdu, 0x000500c7u, 0x00000006u, 0x000057cfu, 0x000057cdu, 0x00000e65u, 0x0003003eu, 0x000057beu, 0x000057cfu, 0x0003003eu, 0x000057bfu, 0x000057cfu, 0x0004003du, 0x00000006u, 0x000057d2u, 0x000057c6u, 0x000500c7u, 0x00000006u, 0x000057d3u, 0x000057d2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000057d4u, 0x000057d3u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000057d6u, 0x000057cfu, 0x000057d4u, 0x0003003eu, 0x000057bfu, 0x000057d6u, 0x000500c6u, 0x00000006u, 0x000057d8u, 0x000057d6u, 0x00000464u, 0x0003003eu, 0x000057bfu, 0x000057d8u, 0x00080041u, 0x00000671u, 0x000057dbu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000057d8u, 0x0004003du, 0x0000000fu, 0x000057dcu, 0x000057dbu, 0x00040071u, 0x00000006u, 0x000057ddu, 0x000057dcu, 0x0003003eu, 0x000057c0u, 0x000057ddu, 0x00040071u, 0x00000011u, 0x000057dfu, 0x000057ddu, 0x0004007cu, 0x00000012u, 0x000057e0u, 0x000057dfu, 0x00070050u, 0x00000013u, 0x000057e1u, 0x000057e0u, 0x000057e0u, 0x000057e0u, 0x000057e0u, 0x0003003eu, 0x000057c1u, 0x000057e1u, 0x0003003eu, 0x00004675u, 0x000057e1u, 0x000200f9u, 0x000049b4u, 0x000200f8u, 0x000049b4u, 0x000700f5u, 0x00000013u, 0x00009fcau, 0x00009f14u, 0x00004961u, 0x000057e1u, 0x000049b5u, 0x000700f5u, 0x00000013u, 0x00009dfeu, 0x00009d45u, 0x00004961u, 0x000057bdu, 0x000049b5u, 0x000300f7u, 0x000049c5u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x000049c6u, 0x000049c5u, 0x000200f8u, 0x000049c6u, 0x00050050u, 0x000000efu, 0x000049c9u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000049cau, 0x000049c9u, 0x0003003eu, 0x00006db2u, 0x00004632u, 0x0003003eu, 0x00006db3u, 0x00004634u, 0x0003003eu, 0x00004711u, 0x000021b2u, 0x0003003eu, 0x00004712u, 0x000049cau, 0x00050041u, 0x00000007u, 0x000057eau, 0x00004712u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000057ebu, 0x000057eau, 0x00050084u, 0x00000006u, 0x000057ecu, 0x00004634u, 0x000057ebu, 0x00050080u, 0x00000006u, 0x000057edu, 0x00004632u, 0x000057ecu, 0x0003003eu, 0x000057e2u, 0x000057edu, 0x00050041u, 0x00000007u, 0x000057eeu, 0x00004712u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000057efu, 0x000057eeu, 0x00050080u, 0x00000006u, 0x000057f1u, 0x000057edu, 0x000057efu, 0x0003003eu, 0x000057e2u, 0x000057f1u, 0x000500c7u, 0x00000006u, 0x000057f3u, 0x000057f1u, 0x00000e65u, 0x0003003eu, 0x000057e2u, 0x000057f3u, 0x0003003eu, 0x000057e3u, 0x000057f3u, 0x0004003du, 0x00000006u, 0x000057f6u, 0x000057eau, 0x000500c7u, 0x00000006u, 0x000057f7u, 0x000057f6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000057f8u, 0x000057f7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000057fau, 0x000057f3u, 0x000057f8u, 0x0003003eu, 0x000057e3u, 0x000057fau, 0x000500c6u, 0x00000006u, 0x000057fcu, 0x000057fau, 0x00000464u, 0x0003003eu, 0x000057e3u, 0x000057fcu, 0x00080041u, 0x00000671u, 0x000057ffu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000057fcu, 0x0004003du, 0x0000000fu, 0x00005800u, 0x000057ffu, 0x00040071u, 0x00000006u, 0x00005801u, 0x00005800u, 0x0003003eu, 0x000057e4u, 0x00005801u, 0x00040071u, 0x00000011u, 0x00005803u, 0x00005801u, 0x0004007cu, 0x00000012u, 0x00005804u, 0x00005803u, 0x00070050u, 0x00000013u, 0x00005805u, 0x00005804u, 0x00005804u, 0x00005804u, 0x00005804u, 0x0003003eu, 0x000057e5u, 0x00005805u, 0x0003003eu, 0x0000467du, 0x00005805u, 0x000200f9u, 0x000049c5u, 0x000200f8u, 0x000049c5u, 0x000700f5u, 0x00000013u, 0x0000a0b0u, 0x00009ff8u, 0x000049b4u, 0x00005805u, 0x000049c6u, 0x000200f9u, 0x0000495eu, 0x000200f8u, 0x00004960u, 0x0004007cu, 0x000000b0u, 0x00004983u, 0x000099b9u, 0x00040071u, 0x00000006u, 0x00004986u, 0x0000463au, 0x0003003eu, 0x00006d96u, 0x00004632u, 0x0003003eu, 0x00006d97u, 0x00004634u, 0x0003003eu, 0x000046f8u, 0x000021b2u, 0x0003003eu, 0x000046f9u, 0x00004983u, 0x0003003eu, 0x000046fau, 0x00004986u, 0x00050041u, 0x00000007u, 0x000056b3u, 0x000046f9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000056b4u, 0x000056b3u, 0x00050084u, 0x00000006u, 0x000056b5u, 0x00004634u, 0x000056b4u, 0x00050080u, 0x00000006u, 0x000056b6u, 0x00004632u, 0x000056b5u, 0x0003003eu, 0x000056aau, 0x000056b6u, 0x00050041u, 0x00000007u, 0x000056b7u, 0x000046f9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000056b8u, 0x000056b7u, 0x000500c2u, 0x00000006u, 0x000056b9u, 0x000056b8u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000056bbu, 0x000056b6u, 0x000056b9u, 0x0003003eu, 0x000056aau, 0x000056bbu, 0x000500c7u, 0x00000006u, 0x000056bdu, 0x000056bbu, 0x00000e65u, 0x0003003eu, 0x000056aau, 0x000056bdu, 0x0004003du, 0x00000006u, 0x000056bfu, 0x000056b7u, 0x000400c8u, 0x00000006u, 0x000056c0u, 0x000056bfu, 0x000500c7u, 0x00000006u, 0x000056c1u, 0x000056c0u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000056c2u, 0x000056c1u, 0x00000704u, 0x0003003eu, 0x000056abu, 0x000056c2u, 0x0003003eu, 0x000056acu, 0x000056bdu, 0x0004003du, 0x00000006u, 0x000056c5u, 0x000056b3u, 0x000500c7u, 0x00000006u, 0x000056c6u, 0x000056c5u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000056c7u, 0x000056c6u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000056c9u, 0x000056bdu, 0x000056c7u, 0x0003003eu, 0x000056acu, 0x000056c9u, 0x000500c6u, 0x00000006u, 0x000056cbu, 0x000056c9u, 0x00000464u, 0x0003003eu, 0x000056acu, 0x000056cbu, 0x00080041u, 0x00000671u, 0x000056ceu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000056cbu, 0x0004003du, 0x0000000fu, 0x000056cfu, 0x000056ceu, 0x00040071u, 0x00000006u, 0x000056d0u, 0x000056cfu, 0x0003003eu, 0x000056adu, 0x000056d0u, 0x000500c2u, 0x00000006u, 0x000056d3u, 0x000056d0u, 0x000056c2u, 0x000500c7u, 0x00000006u, 0x000056d4u, 0x000056d3u, 0x00000e88u, 0x0003003eu, 0x000056adu, 0x000056d4u, 0x000500c4u, 0x00000006u, 0x000056d6u, 0x00004986u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000056d8u, 0x000056d4u, 0x000056d6u, 0x0003003eu, 0x000056adu, 0x000056d8u, 0x00040071u, 0x00000011u, 0x000056dau, 0x000056d8u, 0x0004007cu, 0x00000012u, 0x000056dbu, 0x000056dau, 0x00070050u, 0x00000013u, 0x000056dcu, 0x000056dbu, 0x000056dbu, 0x000056dbu, 0x000056dbu, 0x0003003eu, 0x000056aeu, 0x000056dcu, 0x0003003eu, 0x00004665u, 0x000056dcu, 0x000300f7u, 0x0000498bu, 0x00000000u, 0x000400fau, 0x000021c9u, 0x0000498cu, 0x0000498bu, 0x000200f8u, 0x0000498cu, 0x00050050u, 0x000000efu, 0x0000498fu, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004990u, 0x0000498fu, 0x0003003eu, 0x00006d9au, 0x00004632u, 0x0003003eu, 0x00006d9bu, 0x00004634u, 0x0003003eu, 0x000046fcu, 0x000021b2u, 0x0003003eu, 0x000046fdu, 0x00004990u, 0x0003003eu, 0x000046feu, 0x00004986u, 0x00050041u, 0x00000007u, 0x000056e6u, 0x000046fdu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000056e7u, 0x000056e6u, 0x00050084u, 0x00000006u, 0x000056e8u, 0x00004634u, 0x000056e7u, 0x00050080u, 0x00000006u, 0x000056e9u, 0x00004632u, 0x000056e8u, 0x0003003eu, 0x000056ddu, 0x000056e9u, 0x00050041u, 0x00000007u, 0x000056eau, 0x000046fdu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000056ebu, 0x000056eau, 0x000500c2u, 0x00000006u, 0x000056ecu, 0x000056ebu, 0x0000022au, 0x00050080u, 0x00000006u, 0x000056eeu, 0x000056e9u, 0x000056ecu, 0x0003003eu, 0x000056ddu, 0x000056eeu, 0x000500c7u, 0x00000006u, 0x000056f0u, 0x000056eeu, 0x00000e65u, 0x0003003eu, 0x000056ddu, 0x000056f0u, 0x0004003du, 0x00000006u, 0x000056f2u, 0x000056eau, 0x000400c8u, 0x00000006u, 0x000056f3u, 0x000056f2u, 0x000500c7u, 0x00000006u, 0x000056f4u, 0x000056f3u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000056f5u, 0x000056f4u, 0x00000704u, 0x0003003eu, 0x000056deu, 0x000056f5u, 0x0003003eu, 0x000056dfu, 0x000056f0u, 0x0004003du, 0x00000006u, 0x000056f8u, 0x000056e6u, 0x000500c7u, 0x00000006u, 0x000056f9u, 0x000056f8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000056fau, 0x000056f9u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000056fcu, 0x000056f0u, 0x000056fau, 0x0003003eu, 0x000056dfu, 0x000056fcu, 0x000500c6u, 0x00000006u, 0x000056feu, 0x000056fcu, 0x00000464u, 0x0003003eu, 0x000056dfu, 0x000056feu, 0x00080041u, 0x00000671u, 0x00005701u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000056feu, 0x0004003du, 0x0000000fu, 0x00005702u, 0x00005701u, 0x00040071u, 0x00000006u, 0x00005703u, 0x00005702u, 0x0003003eu, 0x000056e0u, 0x00005703u, 0x000500c2u, 0x00000006u, 0x00005706u, 0x00005703u, 0x000056f5u, 0x000500c7u, 0x00000006u, 0x00005707u, 0x00005706u, 0x00000e88u, 0x0003003eu, 0x000056e0u, 0x00005707u, 0x000500c5u, 0x00000006u, 0x0000570bu, 0x00005707u, 0x000056d6u, 0x0003003eu, 0x000056e0u, 0x0000570bu, 0x00040071u, 0x00000011u, 0x0000570du, 0x0000570bu, 0x0004007cu, 0x00000012u, 0x0000570eu, 0x0000570du, 0x00070050u, 0x00000013u, 0x0000570fu, 0x0000570eu, 0x0000570eu, 0x0000570eu, 0x0000570eu, 0x0003003eu, 0x000056e1u, 0x0000570fu, 0x0003003eu, 0x0000466du, 0x0000570fu, 0x00050050u, 0x000000efu, 0x00004999u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x0000499au, 0x00004999u, 0x0003003eu, 0x00006d9eu, 0x00004632u, 0x0003003eu, 0x00006d9fu, 0x00004634u, 0x0003003eu, 0x00004700u, 0x000021b2u, 0x0003003eu, 0x00004701u, 0x0000499au, 0x0003003eu, 0x00004702u, 0x00004986u, 0x00050041u, 0x00000007u, 0x00005719u, 0x00004701u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000571au, 0x00005719u, 0x00050084u, 0x00000006u, 0x0000571bu, 0x00004634u, 0x0000571au, 0x00050080u, 0x00000006u, 0x0000571cu, 0x00004632u, 0x0000571bu, 0x0003003eu, 0x00005710u, 0x0000571cu, 0x00050041u, 0x00000007u, 0x0000571du, 0x00004701u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000571eu, 0x0000571du, 0x000500c2u, 0x00000006u, 0x0000571fu, 0x0000571eu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005721u, 0x0000571cu, 0x0000571fu, 0x0003003eu, 0x00005710u, 0x00005721u, 0x000500c7u, 0x00000006u, 0x00005723u, 0x00005721u, 0x00000e65u, 0x0003003eu, 0x00005710u, 0x00005723u, 0x0004003du, 0x00000006u, 0x00005725u, 0x0000571du, 0x000400c8u, 0x00000006u, 0x00005726u, 0x00005725u, 0x000500c7u, 0x00000006u, 0x00005727u, 0x00005726u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005728u, 0x00005727u, 0x00000704u, 0x0003003eu, 0x00005711u, 0x00005728u, 0x0003003eu, 0x00005712u, 0x00005723u, 0x0004003du, 0x00000006u, 0x0000572bu, 0x00005719u, 0x000500c7u, 0x00000006u, 0x0000572cu, 0x0000572bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000572du, 0x0000572cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000572fu, 0x00005723u, 0x0000572du, 0x0003003eu, 0x00005712u, 0x0000572fu, 0x000500c6u, 0x00000006u, 0x00005731u, 0x0000572fu, 0x00000464u, 0x0003003eu, 0x00005712u, 0x00005731u, 0x00080041u, 0x00000671u, 0x00005734u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005731u, 0x0004003du, 0x0000000fu, 0x00005735u, 0x00005734u, 0x00040071u, 0x00000006u, 0x00005736u, 0x00005735u, 0x0003003eu, 0x00005713u, 0x00005736u, 0x000500c2u, 0x00000006u, 0x00005739u, 0x00005736u, 0x00005728u, 0x000500c7u, 0x00000006u, 0x0000573au, 0x00005739u, 0x00000e88u, 0x0003003eu, 0x00005713u, 0x0000573au, 0x000500c5u, 0x00000006u, 0x0000573eu, 0x0000573au, 0x000056d6u, 0x0003003eu, 0x00005713u, 0x0000573eu, 0x00040071u, 0x00000011u, 0x00005740u, 0x0000573eu, 0x0004007cu, 0x00000012u, 0x00005741u, 0x00005740u, 0x00070050u, 0x00000013u, 0x00005742u, 0x00005741u, 0x00005741u, 0x00005741u, 0x00005741u, 0x0003003eu, 0x00005714u, 0x00005742u, 0x0003003eu, 0x00004675u, 0x00005742u, 0x000200f9u, 0x0000498bu, 0x000200f8u, 0x0000498bu, 0x000700f5u, 0x00000013u, 0x00009fc8u, 0x00009f14u, 0x00004960u, 0x00005742u, 0x0000498cu, 0x000700f5u, 0x00000013u, 0x00009dfcu, 0x00009d45u, 0x00004960u, 0x0000570fu, 0x0000498cu, 0x000300f7u, 0x000049a2u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x000049a3u, 0x000049a2u, 0x000200f8u, 0x000049a3u, 0x00050050u, 0x000000efu, 0x000049a6u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000049a7u, 0x000049a6u, 0x0003003eu, 0x00006da2u, 0x00004632u, 0x0003003eu, 0x00006da3u, 0x00004634u, 0x0003003eu, 0x00004704u, 0x000021b2u, 0x0003003eu, 0x00004705u, 0x000049a7u, 0x0003003eu, 0x00004706u, 0x00004986u, 0x00050041u, 0x00000007u, 0x0000574cu, 0x00004705u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000574du, 0x0000574cu, 0x00050084u, 0x00000006u, 0x0000574eu, 0x00004634u, 0x0000574du, 0x00050080u, 0x00000006u, 0x0000574fu, 0x00004632u, 0x0000574eu, 0x0003003eu, 0x00005743u, 0x0000574fu, 0x00050041u, 0x00000007u, 0x00005750u, 0x00004705u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005751u, 0x00005750u, 0x000500c2u, 0x00000006u, 0x00005752u, 0x00005751u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005754u, 0x0000574fu, 0x00005752u, 0x0003003eu, 0x00005743u, 0x00005754u, 0x000500c7u, 0x00000006u, 0x00005756u, 0x00005754u, 0x00000e65u, 0x0003003eu, 0x00005743u, 0x00005756u, 0x0004003du, 0x00000006u, 0x00005758u, 0x00005750u, 0x000400c8u, 0x00000006u, 0x00005759u, 0x00005758u, 0x000500c7u, 0x00000006u, 0x0000575au, 0x00005759u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000575bu, 0x0000575au, 0x00000704u, 0x0003003eu, 0x00005744u, 0x0000575bu, 0x0003003eu, 0x00005745u, 0x00005756u, 0x0004003du, 0x00000006u, 0x0000575eu, 0x0000574cu, 0x000500c7u, 0x00000006u, 0x0000575fu, 0x0000575eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005760u, 0x0000575fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005762u, 0x00005756u, 0x00005760u, 0x0003003eu, 0x00005745u, 0x00005762u, 0x000500c6u, 0x00000006u, 0x00005764u, 0x00005762u, 0x00000464u, 0x0003003eu, 0x00005745u, 0x00005764u, 0x00080041u, 0x00000671u, 0x00005767u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005764u, 0x0004003du, 0x0000000fu, 0x00005768u, 0x00005767u, 0x00040071u, 0x00000006u, 0x00005769u, 0x00005768u, 0x0003003eu, 0x00005746u, 0x00005769u, 0x000500c2u, 0x00000006u, 0x0000576cu, 0x00005769u, 0x0000575bu, 0x000500c7u, 0x00000006u, 0x0000576du, 0x0000576cu, 0x00000e88u, 0x0003003eu, 0x00005746u, 0x0000576du, 0x000500c5u, 0x00000006u, 0x00005771u, 0x0000576du, 0x000056d6u, 0x0003003eu, 0x00005746u, 0x00005771u, 0x00040071u, 0x00000011u, 0x00005773u, 0x00005771u, 0x0004007cu, 0x00000012u, 0x00005774u, 0x00005773u, 0x00070050u, 0x00000013u, 0x00005775u, 0x00005774u, 0x00005774u, 0x00005774u, 0x00005774u, 0x0003003eu, 0x00005747u, 0x00005775u, 0x0003003eu, 0x0000467du, 0x00005775u, 0x000200f9u, 0x000049a2u, 0x000200f8u, 0x000049a2u, 0x000700f5u, 0x00000013u, 0x0000a0aeu, 0x00009ff8u, 0x0000498bu, 0x00005775u, 0x000049a3u, 0x000200f9u, 0x0000495eu, 0x000200f8u, 0x0000495fu, 0x0004007cu, 0x000000b0u, 0x00004963u, 0x000099b9u, 0x0003003eu, 0x00006db6u, 0x00004632u, 0x0003003eu, 0x00006db7u, 0x00004634u, 0x0003003eu, 0x00004714u, 0x000021b2u, 0x0003003eu, 0x00004715u, 0x00004963u, 0x00050041u, 0x00000007u, 0x00005602u, 0x00004715u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005603u, 0x00005602u, 0x00050084u, 0x00000006u, 0x00005604u, 0x00004634u, 0x00005603u, 0x00050080u, 0x00000006u, 0x00005605u, 0x00004632u, 0x00005604u, 0x0003003eu, 0x000055fau, 0x00005605u, 0x00050041u, 0x00000007u, 0x00005606u, 0x00004715u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005607u, 0x00005606u, 0x00050084u, 0x00000006u, 0x00005608u, 0x00005607u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000560au, 0x00005605u, 0x00005608u, 0x0003003eu, 0x000055fau, 0x0000560au, 0x000500c7u, 0x00000006u, 0x0000560cu, 0x0000560au, 0x00000e65u, 0x0003003eu, 0x000055fau, 0x0000560cu, 0x000500c2u, 0x00000006u, 0x0000560eu, 0x0000560cu, 0x0000022au, 0x0003003eu, 0x000055fbu, 0x0000560eu, 0x0004003du, 0x00000006u, 0x00005610u, 0x00005602u, 0x000500c7u, 0x00000006u, 0x00005611u, 0x00005610u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005612u, 0x00005611u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005614u, 0x0000560eu, 0x00005612u, 0x0003003eu, 0x000055fbu, 0x00005614u, 0x000500c6u, 0x00000006u, 0x00005616u, 0x00005614u, 0x0000045cu, 0x0003003eu, 0x000055fbu, 0x00005616u, 0x00080041u, 0x00000692u, 0x00005619u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005616u, 0x0004003du, 0x00000011u, 0x0000561au, 0x00005619u, 0x00040071u, 0x00000006u, 0x0000561bu, 0x0000561au, 0x0003003eu, 0x000055fcu, 0x0000561bu, 0x000500c2u, 0x00000006u, 0x0000561du, 0x0000561bu, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000561eu, 0x0000561du, 0x0004007cu, 0x00000012u, 0x0000561fu, 0x0000561eu, 0x000500c7u, 0x00000006u, 0x00005621u, 0x0000561bu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005622u, 0x00005621u, 0x0004007cu, 0x00000012u, 0x00005623u, 0x00005622u, 0x00050050u, 0x000001aeu, 0x00005624u, 0x0000561fu, 0x00005623u, 0x0009004fu, 0x00000013u, 0x00005625u, 0x00005624u, 0x00005624u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000055fdu, 0x00005625u, 0x0003003eu, 0x00004665u, 0x00005625u, 0x000300f7u, 0x00004968u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004969u, 0x00004968u, 0x000200f8u, 0x00004969u, 0x00050050u, 0x000000efu, 0x0000496cu, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x0000496du, 0x0000496cu, 0x0003003eu, 0x00006dbau, 0x00004632u, 0x0003003eu, 0x00006dbbu, 0x00004634u, 0x0003003eu, 0x00004717u, 0x000021b2u, 0x0003003eu, 0x00004718u, 0x0000496du, 0x00050041u, 0x00000007u, 0x0000562eu, 0x00004718u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000562fu, 0x0000562eu, 0x00050084u, 0x00000006u, 0x00005630u, 0x00004634u, 0x0000562fu, 0x00050080u, 0x00000006u, 0x00005631u, 0x00004632u, 0x00005630u, 0x0003003eu, 0x00005626u, 0x00005631u, 0x00050041u, 0x00000007u, 0x00005632u, 0x00004718u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005633u, 0x00005632u, 0x00050084u, 0x00000006u, 0x00005634u, 0x00005633u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005636u, 0x00005631u, 0x00005634u, 0x0003003eu, 0x00005626u, 0x00005636u, 0x000500c7u, 0x00000006u, 0x00005638u, 0x00005636u, 0x00000e65u, 0x0003003eu, 0x00005626u, 0x00005638u, 0x000500c2u, 0x00000006u, 0x0000563au, 0x00005638u, 0x0000022au, 0x0003003eu, 0x00005627u, 0x0000563au, 0x0004003du, 0x00000006u, 0x0000563cu, 0x0000562eu, 0x000500c7u, 0x00000006u, 0x0000563du, 0x0000563cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000563eu, 0x0000563du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005640u, 0x0000563au, 0x0000563eu, 0x0003003eu, 0x00005627u, 0x00005640u, 0x000500c6u, 0x00000006u, 0x00005642u, 0x00005640u, 0x0000045cu, 0x0003003eu, 0x00005627u, 0x00005642u, 0x00080041u, 0x00000692u, 0x00005645u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005642u, 0x0004003du, 0x00000011u, 0x00005646u, 0x00005645u, 0x00040071u, 0x00000006u, 0x00005647u, 0x00005646u, 0x0003003eu, 0x00005628u, 0x00005647u, 0x000500c2u, 0x00000006u, 0x00005649u, 0x00005647u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000564au, 0x00005649u, 0x0004007cu, 0x00000012u, 0x0000564bu, 0x0000564au, 0x000500c7u, 0x00000006u, 0x0000564du, 0x00005647u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000564eu, 0x0000564du, 0x0004007cu, 0x00000012u, 0x0000564fu, 0x0000564eu, 0x00050050u, 0x000001aeu, 0x00005650u, 0x0000564bu, 0x0000564fu, 0x0009004fu, 0x00000013u, 0x00005651u, 0x00005650u, 0x00005650u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005629u, 0x00005651u, 0x0003003eu, 0x0000466du, 0x00005651u, 0x00050050u, 0x000000efu, 0x00004973u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004974u, 0x00004973u, 0x0003003eu, 0x00006dbeu, 0x00004632u, 0x0003003eu, 0x00006dbfu, 0x00004634u, 0x0003003eu, 0x0000471au, 0x000021b2u, 0x0003003eu, 0x0000471bu, 0x00004974u, 0x00050041u, 0x00000007u, 0x0000565au, 0x0000471bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000565bu, 0x0000565au, 0x00050084u, 0x00000006u, 0x0000565cu, 0x00004634u, 0x0000565bu, 0x00050080u, 0x00000006u, 0x0000565du, 0x00004632u, 0x0000565cu, 0x0003003eu, 0x00005652u, 0x0000565du, 0x00050041u, 0x00000007u, 0x0000565eu, 0x0000471bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000565fu, 0x0000565eu, 0x00050084u, 0x00000006u, 0x00005660u, 0x0000565fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005662u, 0x0000565du, 0x00005660u, 0x0003003eu, 0x00005652u, 0x00005662u, 0x000500c7u, 0x00000006u, 0x00005664u, 0x00005662u, 0x00000e65u, 0x0003003eu, 0x00005652u, 0x00005664u, 0x000500c2u, 0x00000006u, 0x00005666u, 0x00005664u, 0x0000022au, 0x0003003eu, 0x00005653u, 0x00005666u, 0x0004003du, 0x00000006u, 0x00005668u, 0x0000565au, 0x000500c7u, 0x00000006u, 0x00005669u, 0x00005668u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000566au, 0x00005669u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000566cu, 0x00005666u, 0x0000566au, 0x0003003eu, 0x00005653u, 0x0000566cu, 0x000500c6u, 0x00000006u, 0x0000566eu, 0x0000566cu, 0x0000045cu, 0x0003003eu, 0x00005653u, 0x0000566eu, 0x00080041u, 0x00000692u, 0x00005671u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000566eu, 0x0004003du, 0x00000011u, 0x00005672u, 0x00005671u, 0x00040071u, 0x00000006u, 0x00005673u, 0x00005672u, 0x0003003eu, 0x00005654u, 0x00005673u, 0x000500c2u, 0x00000006u, 0x00005675u, 0x00005673u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005676u, 0x00005675u, 0x0004007cu, 0x00000012u, 0x00005677u, 0x00005676u, 0x000500c7u, 0x00000006u, 0x00005679u, 0x00005673u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000567au, 0x00005679u, 0x0004007cu, 0x00000012u, 0x0000567bu, 0x0000567au, 0x00050050u, 0x000001aeu, 0x0000567cu, 0x00005677u, 0x0000567bu, 0x0009004fu, 0x00000013u, 0x0000567du, 0x0000567cu, 0x0000567cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005655u, 0x0000567du, 0x0003003eu, 0x00004675u, 0x0000567du, 0x000200f9u, 0x00004968u, 0x000200f8u, 0x00004968u, 0x000700f5u, 0x00000013u, 0x00009fc6u, 0x00009f14u, 0x0000495fu, 0x0000567du, 0x00004969u, 0x000700f5u, 0x00000013u, 0x00009dfau, 0x00009d45u, 0x0000495fu, 0x00005651u, 0x00004969u, 0x000300f7u, 0x00004979u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x0000497au, 0x00004979u, 0x000200f8u, 0x0000497au, 0x00050050u, 0x000000efu, 0x0000497du, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x0000497eu, 0x0000497du, 0x0003003eu, 0x00006dc2u, 0x00004632u, 0x0003003eu, 0x00006dc3u, 0x00004634u, 0x0003003eu, 0x0000471du, 0x000021b2u, 0x0003003eu, 0x0000471eu, 0x0000497eu, 0x00050041u, 0x00000007u, 0x00005686u, 0x0000471eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005687u, 0x00005686u, 0x00050084u, 0x00000006u, 0x00005688u, 0x00004634u, 0x00005687u, 0x00050080u, 0x00000006u, 0x00005689u, 0x00004632u, 0x00005688u, 0x0003003eu, 0x0000567eu, 0x00005689u, 0x00050041u, 0x00000007u, 0x0000568au, 0x0000471eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000568bu, 0x0000568au, 0x00050084u, 0x00000006u, 0x0000568cu, 0x0000568bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000568eu, 0x00005689u, 0x0000568cu, 0x0003003eu, 0x0000567eu, 0x0000568eu, 0x000500c7u, 0x00000006u, 0x00005690u, 0x0000568eu, 0x00000e65u, 0x0003003eu, 0x0000567eu, 0x00005690u, 0x000500c2u, 0x00000006u, 0x00005692u, 0x00005690u, 0x0000022au, 0x0003003eu, 0x0000567fu, 0x00005692u, 0x0004003du, 0x00000006u, 0x00005694u, 0x00005686u, 0x000500c7u, 0x00000006u, 0x00005695u, 0x00005694u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005696u, 0x00005695u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005698u, 0x00005692u, 0x00005696u, 0x0003003eu, 0x0000567fu, 0x00005698u, 0x000500c6u, 0x00000006u, 0x0000569au, 0x00005698u, 0x0000045cu, 0x0003003eu, 0x0000567fu, 0x0000569au, 0x00080041u, 0x00000692u, 0x0000569du, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000569au, 0x0004003du, 0x00000011u, 0x0000569eu, 0x0000569du, 0x00040071u, 0x00000006u, 0x0000569fu, 0x0000569eu, 0x0003003eu, 0x00005680u, 0x0000569fu, 0x000500c2u, 0x00000006u, 0x000056a1u, 0x0000569fu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000056a2u, 0x000056a1u, 0x0004007cu, 0x00000012u, 0x000056a3u, 0x000056a2u, 0x000500c7u, 0x00000006u, 0x000056a5u, 0x0000569fu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000056a6u, 0x000056a5u, 0x0004007cu, 0x00000012u, 0x000056a7u, 0x000056a6u, 0x00050050u, 0x000001aeu, 0x000056a8u, 0x000056a3u, 0x000056a7u, 0x0009004fu, 0x00000013u, 0x000056a9u, 0x000056a8u, 0x000056a8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005681u, 0x000056a9u, 0x0003003eu, 0x0000467du, 0x000056a9u, 0x000200f9u, 0x00004979u, 0x000200f8u, 0x00004979u, 0x000700f5u, 0x00000013u, 0x0000a0acu, 0x00009ff8u, 0x00004968u, 0x000056a9u, 0x0000497au, 0x000200f9u, 0x0000495eu, 0x000200f8u, 0x0000495eu, 0x000900f5u, 0x00000013u, 0x0000a0abu, 0x0000a0acu, 0x00004979u, 0x0000a0aeu, 0x000049a2u, 0x0000a0b0u, 0x000049c5u, 0x000900f5u, 0x00000013u, 0x00009fc4u, 0x00009fc6u, 0x00004979u, 0x00009fc8u, 0x000049a2u, 0x00009fcau, 0x000049c5u, 0x000900f5u, 0x00000013u, 0x00009edfu, 0x00005625u, 0x00004979u, 0x000056dcu, 0x000049a2u, 0x00005799u, 0x000049c5u, 0x000900f5u, 0x00000013u, 0x00009df8u, 0x00009dfau, 0x00004979u, 0x00009dfcu, 0x000049a2u, 0x00009dfeu, 0x000049c5u, 0x000200f9u, 0x0000489eu, 0x000200f8u, 0x000048a0u, 0x000500c3u, 0x00000008u, 0x0000492eu, 0x00009930u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x0000492fu, 0x0000492eu, 0x0003003eu, 0x000046e5u, 0x0000492fu, 0x00050082u, 0x00000008u, 0x00004933u, 0x0000996eu, 0x00009930u, 0x00050080u, 0x00000008u, 0x00004934u, 0x0000996eu, 0x00004933u, 0x000500c3u, 0x00000008u, 0x00004935u, 0x00004934u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00004936u, 0x00004935u, 0x0003003eu, 0x000046e6u, 0x00004936u, 0x00050050u, 0x000000efu, 0x00004939u, 0x00009930u, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x0000493au, 0x00004939u, 0x0003003eu, 0x00006d86u, 0x00004632u, 0x0003003eu, 0x00006d87u, 0x00004634u, 0x0003003eu, 0x000046e8u, 0x000021b2u, 0x0003003eu, 0x000046e9u, 0x0000493au, 0x0003003eu, 0x000046eau, 0x0000492fu, 0x00050041u, 0x00000007u, 0x000054c4u, 0x000046e9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000054c5u, 0x000054c4u, 0x00050084u, 0x00000006u, 0x000054c6u, 0x00004634u, 0x000054c5u, 0x00050080u, 0x00000006u, 0x000054c7u, 0x00004632u, 0x000054c6u, 0x0003003eu, 0x000054b6u, 0x000054c7u, 0x00050041u, 0x00000007u, 0x000054c9u, 0x000046e9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000054cau, 0x000054c9u, 0x00050080u, 0x00000006u, 0x000054cbu, 0x000054c7u, 0x000054cau, 0x0003003eu, 0x000054b7u, 0x000054cbu, 0x000500c7u, 0x00000006u, 0x000054cdu, 0x000054cbu, 0x00000f1du, 0x0003003eu, 0x000054b7u, 0x000054cdu, 0x00050084u, 0x00000006u, 0x000054d0u, 0x0000492fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x000054d1u, 0x000054c7u, 0x000054d0u, 0x0003003eu, 0x000054b8u, 0x000054d1u, 0x000500c7u, 0x00000006u, 0x000054d3u, 0x000054d1u, 0x00000f1du, 0x0003003eu, 0x000054b8u, 0x000054d3u, 0x0003003eu, 0x000054b9u, 0x000054cdu, 0x0004003du, 0x00000006u, 0x000054d6u, 0x000054c4u, 0x000500c7u, 0x00000006u, 0x000054d7u, 0x000054d6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000054d8u, 0x000054d7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000054dau, 0x000054cdu, 0x000054d8u, 0x0003003eu, 0x000054b9u, 0x000054dau, 0x000500c6u, 0x00000006u, 0x000054dcu, 0x000054dau, 0x00000464u, 0x0003003eu, 0x000054b9u, 0x000054dcu, 0x000500c2u, 0x00000006u, 0x000054deu, 0x000054d3u, 0x0000022au, 0x0003003eu, 0x000054bau, 0x000054deu, 0x0004003du, 0x00000006u, 0x000054e0u, 0x000054c4u, 0x000500c7u, 0x00000006u, 0x000054e1u, 0x000054e0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000054e2u, 0x000054e1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000054e4u, 0x000054deu, 0x000054e2u, 0x0003003eu, 0x000054bau, 0x000054e4u, 0x000500c6u, 0x00000006u, 0x000054e6u, 0x000054e4u, 0x0000045cu, 0x0003003eu, 0x000054bau, 0x000054e6u, 0x000500c5u, 0x00000006u, 0x000054e9u, 0x000054dcu, 0x00000f46u, 0x00080041u, 0x00000671u, 0x000054eau, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000054e9u, 0x0004003du, 0x0000000fu, 0x000054ebu, 0x000054eau, 0x0003003eu, 0x000054bbu, 0x000054ebu, 0x00080041u, 0x00000692u, 0x000054eeu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000054e6u, 0x0004003du, 0x00000011u, 0x000054efu, 0x000054eeu, 0x0003003eu, 0x000054bcu, 0x000054efu, 0x000500c2u, 0x00000011u, 0x000054f1u, 0x000054efu, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x000054f2u, 0x000054f1u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000054f3u, 0x000054f2u, 0x0003003eu, 0x000054bdu, 0x000054f3u, 0x000500c2u, 0x00000011u, 0x000054f5u, 0x000054efu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x000054f6u, 0x000054f5u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000054f7u, 0x000054f6u, 0x0003003eu, 0x000054beu, 0x000054f7u, 0x00040071u, 0x00000011u, 0x000054f9u, 0x000054f3u, 0x0004007cu, 0x00000012u, 0x000054fau, 0x000054f9u, 0x00050082u, 0x00000012u, 0x000054fbu, 0x000054fau, 0x000010afu, 0x00040071u, 0x00000011u, 0x000054fdu, 0x000054f7u, 0x0004007cu, 0x00000012u, 0x000054feu, 0x000054fdu, 0x00050082u, 0x00000012u, 0x000054ffu, 0x000054feu, 0x000010afu, 0x00040071u, 0x00000011u, 0x00005501u, 0x000054ebu, 0x0004007cu, 0x00000012u, 0x00005502u, 0x00005501u, 0x00070050u, 0x00000013u, 0x00005506u, 0x000054fbu, 0x000054ffu, 0x00005502u, 0x00005502u, 0x0003003eu, 0x000054bfu, 0x00005506u, 0x0003003eu, 0x00004665u, 0x00005506u, 0x000300f7u, 0x00004940u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004941u, 0x00004940u, 0x000200f8u, 0x00004941u, 0x00050050u, 0x000000efu, 0x00004944u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004945u, 0x00004944u, 0x0003003eu, 0x00006d8au, 0x00004632u, 0x0003003eu, 0x00006d8bu, 0x00004634u, 0x0003003eu, 0x000046ecu, 0x000021b2u, 0x0003003eu, 0x000046edu, 0x00004945u, 0x0003003eu, 0x000046eeu, 0x00004936u, 0x00050041u, 0x00000007u, 0x00005515u, 0x000046edu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005516u, 0x00005515u, 0x00050084u, 0x00000006u, 0x00005517u, 0x00004634u, 0x00005516u, 0x00050080u, 0x00000006u, 0x00005518u, 0x00004632u, 0x00005517u, 0x0003003eu, 0x00005507u, 0x00005518u, 0x00050041u, 0x00000007u, 0x0000551au, 0x000046edu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000551bu, 0x0000551au, 0x00050080u, 0x00000006u, 0x0000551cu, 0x00005518u, 0x0000551bu, 0x0003003eu, 0x00005508u, 0x0000551cu, 0x000500c7u, 0x00000006u, 0x0000551eu, 0x0000551cu, 0x00000f1du, 0x0003003eu, 0x00005508u, 0x0000551eu, 0x00050084u, 0x00000006u, 0x00005521u, 0x00004936u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005522u, 0x00005518u, 0x00005521u, 0x0003003eu, 0x00005509u, 0x00005522u, 0x000500c7u, 0x00000006u, 0x00005524u, 0x00005522u, 0x00000f1du, 0x0003003eu, 0x00005509u, 0x00005524u, 0x0003003eu, 0x0000550au, 0x0000551eu, 0x0004003du, 0x00000006u, 0x00005527u, 0x00005515u, 0x000500c7u, 0x00000006u, 0x00005528u, 0x00005527u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005529u, 0x00005528u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000552bu, 0x0000551eu, 0x00005529u, 0x0003003eu, 0x0000550au, 0x0000552bu, 0x000500c6u, 0x00000006u, 0x0000552du, 0x0000552bu, 0x00000464u, 0x0003003eu, 0x0000550au, 0x0000552du, 0x000500c2u, 0x00000006u, 0x0000552fu, 0x00005524u, 0x0000022au, 0x0003003eu, 0x0000550bu, 0x0000552fu, 0x0004003du, 0x00000006u, 0x00005531u, 0x00005515u, 0x000500c7u, 0x00000006u, 0x00005532u, 0x00005531u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005533u, 0x00005532u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005535u, 0x0000552fu, 0x00005533u, 0x0003003eu, 0x0000550bu, 0x00005535u, 0x000500c6u, 0x00000006u, 0x00005537u, 0x00005535u, 0x0000045cu, 0x0003003eu, 0x0000550bu, 0x00005537u, 0x000500c5u, 0x00000006u, 0x0000553au, 0x0000552du, 0x00000f46u, 0x00080041u, 0x00000671u, 0x0000553bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000553au, 0x0004003du, 0x0000000fu, 0x0000553cu, 0x0000553bu, 0x0003003eu, 0x0000550cu, 0x0000553cu, 0x00080041u, 0x00000692u, 0x0000553fu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005537u, 0x0004003du, 0x00000011u, 0x00005540u, 0x0000553fu, 0x0003003eu, 0x0000550du, 0x00005540u, 0x000500c2u, 0x00000011u, 0x00005542u, 0x00005540u, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x00005543u, 0x00005542u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005544u, 0x00005543u, 0x0003003eu, 0x0000550eu, 0x00005544u, 0x000500c2u, 0x00000011u, 0x00005546u, 0x00005540u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00005547u, 0x00005546u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005548u, 0x00005547u, 0x0003003eu, 0x0000550fu, 0x00005548u, 0x00040071u, 0x00000011u, 0x0000554au, 0x00005544u, 0x0004007cu, 0x00000012u, 0x0000554bu, 0x0000554au, 0x00050082u, 0x00000012u, 0x0000554cu, 0x0000554bu, 0x000010afu, 0x00040071u, 0x00000011u, 0x0000554eu, 0x00005548u, 0x0004007cu, 0x00000012u, 0x0000554fu, 0x0000554eu, 0x00050082u, 0x00000012u, 0x00005550u, 0x0000554fu, 0x000010afu, 0x00040071u, 0x00000011u, 0x00005552u, 0x0000553cu, 0x0004007cu, 0x00000012u, 0x00005553u, 0x00005552u, 0x00070050u, 0x00000013u, 0x00005557u, 0x0000554cu, 0x00005550u, 0x00005553u, 0x00005553u, 0x0003003eu, 0x00005510u, 0x00005557u, 0x0003003eu, 0x0000466du, 0x00005557u, 0x00050050u, 0x000000efu, 0x0000494cu, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x0000494du, 0x0000494cu, 0x0003003eu, 0x00006d8eu, 0x00004632u, 0x0003003eu, 0x00006d8fu, 0x00004634u, 0x0003003eu, 0x000046f0u, 0x000021b2u, 0x0003003eu, 0x000046f1u, 0x0000494du, 0x0003003eu, 0x000046f2u, 0x0000492fu, 0x00050041u, 0x00000007u, 0x00005566u, 0x000046f1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005567u, 0x00005566u, 0x00050084u, 0x00000006u, 0x00005568u, 0x00004634u, 0x00005567u, 0x00050080u, 0x00000006u, 0x00005569u, 0x00004632u, 0x00005568u, 0x0003003eu, 0x00005558u, 0x00005569u, 0x00050041u, 0x00000007u, 0x0000556bu, 0x000046f1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000556cu, 0x0000556bu, 0x00050080u, 0x00000006u, 0x0000556du, 0x00005569u, 0x0000556cu, 0x0003003eu, 0x00005559u, 0x0000556du, 0x000500c7u, 0x00000006u, 0x0000556fu, 0x0000556du, 0x00000f1du, 0x0003003eu, 0x00005559u, 0x0000556fu, 0x00050080u, 0x00000006u, 0x00005573u, 0x00005569u, 0x000054d0u, 0x0003003eu, 0x0000555au, 0x00005573u, 0x000500c7u, 0x00000006u, 0x00005575u, 0x00005573u, 0x00000f1du, 0x0003003eu, 0x0000555au, 0x00005575u, 0x0003003eu, 0x0000555bu, 0x0000556fu, 0x0004003du, 0x00000006u, 0x00005578u, 0x00005566u, 0x000500c7u, 0x00000006u, 0x00005579u, 0x00005578u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000557au, 0x00005579u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000557cu, 0x0000556fu, 0x0000557au, 0x0003003eu, 0x0000555bu, 0x0000557cu, 0x000500c6u, 0x00000006u, 0x0000557eu, 0x0000557cu, 0x00000464u, 0x0003003eu, 0x0000555bu, 0x0000557eu, 0x000500c2u, 0x00000006u, 0x00005580u, 0x00005575u, 0x0000022au, 0x0003003eu, 0x0000555cu, 0x00005580u, 0x0004003du, 0x00000006u, 0x00005582u, 0x00005566u, 0x000500c7u, 0x00000006u, 0x00005583u, 0x00005582u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005584u, 0x00005583u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005586u, 0x00005580u, 0x00005584u, 0x0003003eu, 0x0000555cu, 0x00005586u, 0x000500c6u, 0x00000006u, 0x00005588u, 0x00005586u, 0x0000045cu, 0x0003003eu, 0x0000555cu, 0x00005588u, 0x000500c5u, 0x00000006u, 0x0000558bu, 0x0000557eu, 0x00000f46u, 0x00080041u, 0x00000671u, 0x0000558cu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000558bu, 0x0004003du, 0x0000000fu, 0x0000558du, 0x0000558cu, 0x0003003eu, 0x0000555du, 0x0000558du, 0x00080041u, 0x00000692u, 0x00005590u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005588u, 0x0004003du, 0x00000011u, 0x00005591u, 0x00005590u, 0x0003003eu, 0x0000555eu, 0x00005591u, 0x000500c2u, 0x00000011u, 0x00005593u, 0x00005591u, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x00005594u, 0x00005593u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005595u, 0x00005594u, 0x0003003eu, 0x0000555fu, 0x00005595u, 0x000500c2u, 0x00000011u, 0x00005597u, 0x00005591u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00005598u, 0x00005597u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005599u, 0x00005598u, 0x0003003eu, 0x00005560u, 0x00005599u, 0x00040071u, 0x00000011u, 0x0000559bu, 0x00005595u, 0x0004007cu, 0x00000012u, 0x0000559cu, 0x0000559bu, 0x00050082u, 0x00000012u, 0x0000559du, 0x0000559cu, 0x000010afu, 0x00040071u, 0x00000011u, 0x0000559fu, 0x00005599u, 0x0004007cu, 0x00000012u, 0x000055a0u, 0x0000559fu, 0x00050082u, 0x00000012u, 0x000055a1u, 0x000055a0u, 0x000010afu, 0x00040071u, 0x00000011u, 0x000055a3u, 0x0000558du, 0x0004007cu, 0x00000012u, 0x000055a4u, 0x000055a3u, 0x00070050u, 0x00000013u, 0x000055a8u, 0x0000559du, 0x000055a1u, 0x000055a4u, 0x000055a4u, 0x0003003eu, 0x00005561u, 0x000055a8u, 0x0003003eu, 0x00004675u, 0x000055a8u, 0x00050050u, 0x000000efu, 0x00004954u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004955u, 0x00004954u, 0x0003003eu, 0x00006d92u, 0x00004632u, 0x0003003eu, 0x00006d93u, 0x00004634u, 0x0003003eu, 0x000046f4u, 0x000021b2u, 0x0003003eu, 0x000046f5u, 0x00004955u, 0x0003003eu, 0x000046f6u, 0x00004936u, 0x00050041u, 0x00000007u, 0x000055b7u, 0x000046f5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000055b8u, 0x000055b7u, 0x00050084u, 0x00000006u, 0x000055b9u, 0x00004634u, 0x000055b8u, 0x00050080u, 0x00000006u, 0x000055bau, 0x00004632u, 0x000055b9u, 0x0003003eu, 0x000055a9u, 0x000055bau, 0x00050041u, 0x00000007u, 0x000055bcu, 0x000046f5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000055bdu, 0x000055bcu, 0x00050080u, 0x00000006u, 0x000055beu, 0x000055bau, 0x000055bdu, 0x0003003eu, 0x000055aau, 0x000055beu, 0x000500c7u, 0x00000006u, 0x000055c0u, 0x000055beu, 0x00000f1du, 0x0003003eu, 0x000055aau, 0x000055c0u, 0x00050080u, 0x00000006u, 0x000055c4u, 0x000055bau, 0x00005521u, 0x0003003eu, 0x000055abu, 0x000055c4u, 0x000500c7u, 0x00000006u, 0x000055c6u, 0x000055c4u, 0x00000f1du, 0x0003003eu, 0x000055abu, 0x000055c6u, 0x0003003eu, 0x000055acu, 0x000055c0u, 0x0004003du, 0x00000006u, 0x000055c9u, 0x000055b7u, 0x000500c7u, 0x00000006u, 0x000055cau, 0x000055c9u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000055cbu, 0x000055cau, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000055cdu, 0x000055c0u, 0x000055cbu, 0x0003003eu, 0x000055acu, 0x000055cdu, 0x000500c6u, 0x00000006u, 0x000055cfu, 0x000055cdu, 0x00000464u, 0x0003003eu, 0x000055acu, 0x000055cfu, 0x000500c2u, 0x00000006u, 0x000055d1u, 0x000055c6u, 0x0000022au, 0x0003003eu, 0x000055adu, 0x000055d1u, 0x0004003du, 0x00000006u, 0x000055d3u, 0x000055b7u, 0x000500c7u, 0x00000006u, 0x000055d4u, 0x000055d3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000055d5u, 0x000055d4u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000055d7u, 0x000055d1u, 0x000055d5u, 0x0003003eu, 0x000055adu, 0x000055d7u, 0x000500c6u, 0x00000006u, 0x000055d9u, 0x000055d7u, 0x0000045cu, 0x0003003eu, 0x000055adu, 0x000055d9u, 0x000500c5u, 0x00000006u, 0x000055dcu, 0x000055cfu, 0x00000f46u, 0x00080041u, 0x00000671u, 0x000055ddu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000055dcu, 0x0004003du, 0x0000000fu, 0x000055deu, 0x000055ddu, 0x0003003eu, 0x000055aeu, 0x000055deu, 0x00080041u, 0x00000692u, 0x000055e1u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000055d9u, 0x0004003du, 0x00000011u, 0x000055e2u, 0x000055e1u, 0x0003003eu, 0x000055afu, 0x000055e2u, 0x000500c2u, 0x00000011u, 0x000055e4u, 0x000055e2u, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x000055e5u, 0x000055e4u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000055e6u, 0x000055e5u, 0x0003003eu, 0x000055b0u, 0x000055e6u, 0x000500c2u, 0x00000011u, 0x000055e8u, 0x000055e2u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x000055e9u, 0x000055e8u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000055eau, 0x000055e9u, 0x0003003eu, 0x000055b1u, 0x000055eau, 0x00040071u, 0x00000011u, 0x000055ecu, 0x000055e6u, 0x0004007cu, 0x00000012u, 0x000055edu, 0x000055ecu, 0x00050082u, 0x00000012u, 0x000055eeu, 0x000055edu, 0x000010afu, 0x00040071u, 0x00000011u, 0x000055f0u, 0x000055eau, 0x0004007cu, 0x00000012u, 0x000055f1u, 0x000055f0u, 0x00050082u, 0x00000012u, 0x000055f2u, 0x000055f1u, 0x000010afu, 0x00040071u, 0x00000011u, 0x000055f4u, 0x000055deu, 0x0004007cu, 0x00000012u, 0x000055f5u, 0x000055f4u, 0x00070050u, 0x00000013u, 0x000055f9u, 0x000055eeu, 0x000055f2u, 0x000055f5u, 0x000055f5u, 0x0003003eu, 0x000055b2u, 0x000055f9u, 0x0003003eu, 0x0000467du, 0x000055f9u, 0x000200f9u, 0x00004940u, 0x000200f8u, 0x00004940u, 0x000700f5u, 0x00000013u, 0x0000a0aau, 0x00009ff8u, 0x000048a0u, 0x000055f9u, 0x00004941u, 0x000700f5u, 0x00000013u, 0x00009fc3u, 0x00009f14u, 0x000048a0u, 0x000055a8u, 0x00004941u, 0x000700f5u, 0x00000013u, 0x00009df7u, 0x00009d45u, 0x000048a0u, 0x00005557u, 0x00004941u, 0x000200f9u, 0x0000489eu, 0x000200f8u, 0x0000489fu, 0x00040071u, 0x00000006u, 0x000048a6u, 0x00004638u, 0x0004007cu, 0x00000008u, 0x000048a7u, 0x000048a6u, 0x000300f7u, 0x000048a8u, 0x00000000u, 0x000b00fbu, 0x000048a7u, 0x000048a8u, 0x00000000u, 0x000048a9u, 0x00000001u, 0x000048aau, 0x00000002u, 0x000048abu, 0x00000003u, 0x000048acu, 0x000200f8u, 0x000048acu, 0x0004007cu, 0x000000b0u, 0x0000490eu, 0x000099b9u, 0x0003003eu, 0x00006d76u, 0x00004632u, 0x0003003eu, 0x00006d77u, 0x00004634u, 0x0003003eu, 0x000046dau, 0x000021b2u, 0x0003003eu, 0x000046dbu, 0x0000490eu, 0x00050041u, 0x00000007u, 0x000053d7u, 0x000046dbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000053d8u, 0x000053d7u, 0x00050084u, 0x00000006u, 0x000053d9u, 0x00004634u, 0x000053d8u, 0x00050080u, 0x00000006u, 0x000053dau, 0x00004632u, 0x000053d9u, 0x0003003eu, 0x000053ceu, 0x000053dau, 0x00050041u, 0x00000007u, 0x000053dbu, 0x000046dbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000053dcu, 0x000053dbu, 0x00050084u, 0x00000006u, 0x000053ddu, 0x000053dcu, 0x00000386u, 0x00050080u, 0x00000006u, 0x000053dfu, 0x000053dau, 0x000053ddu, 0x0003003eu, 0x000053ceu, 0x000053dfu, 0x000500c7u, 0x00000006u, 0x000053e1u, 0x000053dfu, 0x00000f1du, 0x0003003eu, 0x000053ceu, 0x000053e1u, 0x000500c2u, 0x00000006u, 0x000053e3u, 0x000053e1u, 0x0000022au, 0x0003003eu, 0x000053cfu, 0x000053e3u, 0x0004003du, 0x00000006u, 0x000053e5u, 0x000053d7u, 0x000500c7u, 0x00000006u, 0x000053e6u, 0x000053e5u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000053e7u, 0x000053e6u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000053e9u, 0x000053e3u, 0x000053e7u, 0x0003003eu, 0x000053cfu, 0x000053e9u, 0x000500c6u, 0x00000006u, 0x000053ebu, 0x000053e9u, 0x0000045cu, 0x0003003eu, 0x000053cfu, 0x000053ebu, 0x00080041u, 0x00000692u, 0x000053eeu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000053ebu, 0x0004003du, 0x00000011u, 0x000053efu, 0x000053eeu, 0x00040071u, 0x00000006u, 0x000053f0u, 0x000053efu, 0x0003003eu, 0x000053d0u, 0x000053f0u, 0x000500c5u, 0x00000006u, 0x000053f3u, 0x000053ebu, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x000053f4u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000053f3u, 0x0004003du, 0x00000011u, 0x000053f5u, 0x000053f4u, 0x00040071u, 0x00000006u, 0x000053f6u, 0x000053f5u, 0x0003003eu, 0x000053d1u, 0x000053f6u, 0x000500c2u, 0x00000006u, 0x000053f8u, 0x000053f0u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000053f9u, 0x000053f8u, 0x0004007cu, 0x00000012u, 0x000053fau, 0x000053f9u, 0x000500c7u, 0x00000006u, 0x000053fcu, 0x000053f0u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000053fdu, 0x000053fcu, 0x0004007cu, 0x00000012u, 0x000053feu, 0x000053fdu, 0x000500c2u, 0x00000006u, 0x00005400u, 0x000053f6u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005401u, 0x00005400u, 0x0004007cu, 0x00000012u, 0x00005402u, 0x00005401u, 0x000500c7u, 0x00000006u, 0x00005404u, 0x000053f6u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005405u, 0x00005404u, 0x0004007cu, 0x00000012u, 0x00005406u, 0x00005405u, 0x00070050u, 0x00000013u, 0x00005407u, 0x000053fau, 0x000053feu, 0x00005402u, 0x00005406u, 0x0003003eu, 0x000053d2u, 0x00005407u, 0x0003003eu, 0x00004665u, 0x00005407u, 0x000300f7u, 0x00004913u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004914u, 0x00004913u, 0x000200f8u, 0x00004914u, 0x00050050u, 0x000000efu, 0x00004917u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x00004918u, 0x00004917u, 0x0003003eu, 0x00006d7au, 0x00004632u, 0x0003003eu, 0x00006d7bu, 0x00004634u, 0x0003003eu, 0x000046ddu, 0x000021b2u, 0x0003003eu, 0x000046deu, 0x00004918u, 0x00050041u, 0x00000007u, 0x00005411u, 0x000046deu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005412u, 0x00005411u, 0x00050084u, 0x00000006u, 0x00005413u, 0x00004634u, 0x00005412u, 0x00050080u, 0x00000006u, 0x00005414u, 0x00004632u, 0x00005413u, 0x0003003eu, 0x00005408u, 0x00005414u, 0x00050041u, 0x00000007u, 0x00005415u, 0x000046deu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005416u, 0x00005415u, 0x00050084u, 0x00000006u, 0x00005417u, 0x00005416u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005419u, 0x00005414u, 0x00005417u, 0x0003003eu, 0x00005408u, 0x00005419u, 0x000500c7u, 0x00000006u, 0x0000541bu, 0x00005419u, 0x00000f1du, 0x0003003eu, 0x00005408u, 0x0000541bu, 0x000500c2u, 0x00000006u, 0x0000541du, 0x0000541bu, 0x0000022au, 0x0003003eu, 0x00005409u, 0x0000541du, 0x0004003du, 0x00000006u, 0x0000541fu, 0x00005411u, 0x000500c7u, 0x00000006u, 0x00005420u, 0x0000541fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005421u, 0x00005420u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005423u, 0x0000541du, 0x00005421u, 0x0003003eu, 0x00005409u, 0x00005423u, 0x000500c6u, 0x00000006u, 0x00005425u, 0x00005423u, 0x0000045cu, 0x0003003eu, 0x00005409u, 0x00005425u, 0x00080041u, 0x00000692u, 0x00005428u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005425u, 0x0004003du, 0x00000011u, 0x00005429u, 0x00005428u, 0x00040071u, 0x00000006u, 0x0000542au, 0x00005429u, 0x0003003eu, 0x0000540au, 0x0000542au, 0x000500c5u, 0x00000006u, 0x0000542du, 0x00005425u, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x0000542eu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000542du, 0x0004003du, 0x00000011u, 0x0000542fu, 0x0000542eu, 0x00040071u, 0x00000006u, 0x00005430u, 0x0000542fu, 0x0003003eu, 0x0000540bu, 0x00005430u, 0x000500c2u, 0x00000006u, 0x00005432u, 0x0000542au, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005433u, 0x00005432u, 0x0004007cu, 0x00000012u, 0x00005434u, 0x00005433u, 0x000500c7u, 0x00000006u, 0x00005436u, 0x0000542au, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005437u, 0x00005436u, 0x0004007cu, 0x00000012u, 0x00005438u, 0x00005437u, 0x000500c2u, 0x00000006u, 0x0000543au, 0x00005430u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000543bu, 0x0000543au, 0x0004007cu, 0x00000012u, 0x0000543cu, 0x0000543bu, 0x000500c7u, 0x00000006u, 0x0000543eu, 0x00005430u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000543fu, 0x0000543eu, 0x0004007cu, 0x00000012u, 0x00005440u, 0x0000543fu, 0x00070050u, 0x00000013u, 0x00005441u, 0x00005434u, 0x00005438u, 0x0000543cu, 0x00005440u, 0x0003003eu, 0x0000540cu, 0x00005441u, 0x0003003eu, 0x0000466du, 0x00005441u, 0x00050050u, 0x000000efu, 0x0000491eu, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x0000491fu, 0x0000491eu, 0x0003003eu, 0x00006d7eu, 0x00004632u, 0x0003003eu, 0x00006d7fu, 0x00004634u, 0x0003003eu, 0x000046e0u, 0x000021b2u, 0x0003003eu, 0x000046e1u, 0x0000491fu, 0x00050041u, 0x00000007u, 0x0000544bu, 0x000046e1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000544cu, 0x0000544bu, 0x00050084u, 0x00000006u, 0x0000544du, 0x00004634u, 0x0000544cu, 0x00050080u, 0x00000006u, 0x0000544eu, 0x00004632u, 0x0000544du, 0x0003003eu, 0x00005442u, 0x0000544eu, 0x00050041u, 0x00000007u, 0x0000544fu, 0x000046e1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005450u, 0x0000544fu, 0x00050084u, 0x00000006u, 0x00005451u, 0x00005450u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005453u, 0x0000544eu, 0x00005451u, 0x0003003eu, 0x00005442u, 0x00005453u, 0x000500c7u, 0x00000006u, 0x00005455u, 0x00005453u, 0x00000f1du, 0x0003003eu, 0x00005442u, 0x00005455u, 0x000500c2u, 0x00000006u, 0x00005457u, 0x00005455u, 0x0000022au, 0x0003003eu, 0x00005443u, 0x00005457u, 0x0004003du, 0x00000006u, 0x00005459u, 0x0000544bu, 0x000500c7u, 0x00000006u, 0x0000545au, 0x00005459u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000545bu, 0x0000545au, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000545du, 0x00005457u, 0x0000545bu, 0x0003003eu, 0x00005443u, 0x0000545du, 0x000500c6u, 0x00000006u, 0x0000545fu, 0x0000545du, 0x0000045cu, 0x0003003eu, 0x00005443u, 0x0000545fu, 0x00080041u, 0x00000692u, 0x00005462u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000545fu, 0x0004003du, 0x00000011u, 0x00005463u, 0x00005462u, 0x00040071u, 0x00000006u, 0x00005464u, 0x00005463u, 0x0003003eu, 0x00005444u, 0x00005464u, 0x000500c5u, 0x00000006u, 0x00005467u, 0x0000545fu, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x00005468u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005467u, 0x0004003du, 0x00000011u, 0x00005469u, 0x00005468u, 0x00040071u, 0x00000006u, 0x0000546au, 0x00005469u, 0x0003003eu, 0x00005445u, 0x0000546au, 0x000500c2u, 0x00000006u, 0x0000546cu, 0x00005464u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000546du, 0x0000546cu, 0x0004007cu, 0x00000012u, 0x0000546eu, 0x0000546du, 0x000500c7u, 0x00000006u, 0x00005470u, 0x00005464u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005471u, 0x00005470u, 0x0004007cu, 0x00000012u, 0x00005472u, 0x00005471u, 0x000500c2u, 0x00000006u, 0x00005474u, 0x0000546au, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005475u, 0x00005474u, 0x0004007cu, 0x00000012u, 0x00005476u, 0x00005475u, 0x000500c7u, 0x00000006u, 0x00005478u, 0x0000546au, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005479u, 0x00005478u, 0x0004007cu, 0x00000012u, 0x0000547au, 0x00005479u, 0x00070050u, 0x00000013u, 0x0000547bu, 0x0000546eu, 0x00005472u, 0x00005476u, 0x0000547au, 0x0003003eu, 0x00005446u, 0x0000547bu, 0x0003003eu, 0x00004675u, 0x0000547bu, 0x000200f9u, 0x00004913u, 0x000200f8u, 0x00004913u, 0x000700f5u, 0x00000013u, 0x00009fc2u, 0x00009f14u, 0x000048acu, 0x0000547bu, 0x00004914u, 0x000700f5u, 0x00000013u, 0x00009df6u, 0x00009d45u, 0x000048acu, 0x00005441u, 0x00004914u, 0x000300f7u, 0x00004924u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004925u, 0x00004924u, 0x000200f8u, 0x00004925u, 0x00050050u, 0x000000efu, 0x00004928u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004929u, 0x00004928u, 0x0003003eu, 0x00006d82u, 0x00004632u, 0x0003003eu, 0x00006d83u, 0x00004634u, 0x0003003eu, 0x000046e3u, 0x000021b2u, 0x0003003eu, 0x000046e4u, 0x00004929u, 0x00050041u, 0x00000007u, 0x00005485u, 0x000046e4u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005486u, 0x00005485u, 0x00050084u, 0x00000006u, 0x00005487u, 0x00004634u, 0x00005486u, 0x00050080u, 0x00000006u, 0x00005488u, 0x00004632u, 0x00005487u, 0x0003003eu, 0x0000547cu, 0x00005488u, 0x00050041u, 0x00000007u, 0x00005489u, 0x000046e4u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000548au, 0x00005489u, 0x00050084u, 0x00000006u, 0x0000548bu, 0x0000548au, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000548du, 0x00005488u, 0x0000548bu, 0x0003003eu, 0x0000547cu, 0x0000548du, 0x000500c7u, 0x00000006u, 0x0000548fu, 0x0000548du, 0x00000f1du, 0x0003003eu, 0x0000547cu, 0x0000548fu, 0x000500c2u, 0x00000006u, 0x00005491u, 0x0000548fu, 0x0000022au, 0x0003003eu, 0x0000547du, 0x00005491u, 0x0004003du, 0x00000006u, 0x00005493u, 0x00005485u, 0x000500c7u, 0x00000006u, 0x00005494u, 0x00005493u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005495u, 0x00005494u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005497u, 0x00005491u, 0x00005495u, 0x0003003eu, 0x0000547du, 0x00005497u, 0x000500c6u, 0x00000006u, 0x00005499u, 0x00005497u, 0x0000045cu, 0x0003003eu, 0x0000547du, 0x00005499u, 0x00080041u, 0x00000692u, 0x0000549cu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005499u, 0x0004003du, 0x00000011u, 0x0000549du, 0x0000549cu, 0x00040071u, 0x00000006u, 0x0000549eu, 0x0000549du, 0x0003003eu, 0x0000547eu, 0x0000549eu, 0x000500c5u, 0x00000006u, 0x000054a1u, 0x00005499u, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x000054a2u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000054a1u, 0x0004003du, 0x00000011u, 0x000054a3u, 0x000054a2u, 0x00040071u, 0x00000006u, 0x000054a4u, 0x000054a3u, 0x0003003eu, 0x0000547fu, 0x000054a4u, 0x000500c2u, 0x00000006u, 0x000054a6u, 0x0000549eu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000054a7u, 0x000054a6u, 0x0004007cu, 0x00000012u, 0x000054a8u, 0x000054a7u, 0x000500c7u, 0x00000006u, 0x000054aau, 0x0000549eu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000054abu, 0x000054aau, 0x0004007cu, 0x00000012u, 0x000054acu, 0x000054abu, 0x000500c2u, 0x00000006u, 0x000054aeu, 0x000054a4u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000054afu, 0x000054aeu, 0x0004007cu, 0x00000012u, 0x000054b0u, 0x000054afu, 0x000500c7u, 0x00000006u, 0x000054b2u, 0x000054a4u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000054b3u, 0x000054b2u, 0x0004007cu, 0x00000012u, 0x000054b4u, 0x000054b3u, 0x00070050u, 0x00000013u, 0x000054b5u, 0x000054a8u, 0x000054acu, 0x000054b0u, 0x000054b4u, 0x0003003eu, 0x00005480u, 0x000054b5u, 0x0003003eu, 0x0000467du, 0x000054b5u, 0x000200f9u, 0x00004924u, 0x000200f8u, 0x00004924u, 0x000700f5u, 0x00000013u, 0x0000a0a8u, 0x00009ff8u, 0x00004913u, 0x000054b5u, 0x00004925u, 0x000200f9u, 0x000048a8u, 0x000200f8u, 0x000048abu, 0x0004007cu, 0x000000b0u, 0x000048eeu, 0x000099b9u, 0x0003003eu, 0x00006d66u, 0x00004632u, 0x0003003eu, 0x00006d67u, 0x00004634u, 0x0003003eu, 0x000046ceu, 0x000021b2u, 0x0003003eu, 0x000046cfu, 0x000048eeu, 0x00050041u, 0x00000007u, 0x000052d3u, 0x000046cfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000052d4u, 0x000052d3u, 0x00050084u, 0x00000006u, 0x000052d5u, 0x00004634u, 0x000052d4u, 0x00050080u, 0x00000006u, 0x000052d6u, 0x00004632u, 0x000052d5u, 0x0003003eu, 0x000052cau, 0x000052d6u, 0x00050041u, 0x00000007u, 0x000052d7u, 0x000046cfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000052d8u, 0x000052d7u, 0x00050084u, 0x00000006u, 0x000052d9u, 0x000052d8u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000052dbu, 0x000052d6u, 0x000052d9u, 0x0003003eu, 0x000052cau, 0x000052dbu, 0x000500c7u, 0x00000006u, 0x000052ddu, 0x000052dbu, 0x00000e65u, 0x0003003eu, 0x000052cau, 0x000052ddu, 0x000500c2u, 0x00000006u, 0x000052dfu, 0x000052ddu, 0x0000022au, 0x0003003eu, 0x000052cbu, 0x000052dfu, 0x0004003du, 0x00000006u, 0x000052e1u, 0x000052d3u, 0x000500c7u, 0x00000006u, 0x000052e2u, 0x000052e1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000052e3u, 0x000052e2u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000052e5u, 0x000052dfu, 0x000052e3u, 0x0003003eu, 0x000052cbu, 0x000052e5u, 0x000500c6u, 0x00000006u, 0x000052e7u, 0x000052e5u, 0x0000045cu, 0x0003003eu, 0x000052cbu, 0x000052e7u, 0x00080041u, 0x00000692u, 0x000052eau, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000052e7u, 0x0004003du, 0x00000011u, 0x000052ebu, 0x000052eau, 0x00040071u, 0x00000006u, 0x000052ecu, 0x000052ebu, 0x0003003eu, 0x000052ccu, 0x000052ecu, 0x0003003eu, 0x000052cdu, 0x000052ecu, 0x00060050u, 0x0000030cu, 0x000052f3u, 0x000052ecu, 0x000052ecu, 0x000052ecu, 0x000500c2u, 0x0000030cu, 0x000052f4u, 0x000052f3u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000052f6u, 0x000052f4u, 0x0000f37cu, 0x0003003eu, 0x000052efu, 0x000052f6u, 0x000500c4u, 0x0000030cu, 0x000052f9u, 0x000052f6u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000052fcu, 0x000052f6u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000052fdu, 0x000052f9u, 0x000052fcu, 0x0003003eu, 0x000052efu, 0x000052fdu, 0x000500c7u, 0x00000006u, 0x000052ffu, 0x000052ecu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005300u, 0x000052ffu, 0x000006c3u, 0x0003003eu, 0x000052f0u, 0x00005300u, 0x00040071u, 0x000004bau, 0x00005302u, 0x000052fdu, 0x0004007cu, 0x000004b6u, 0x00005303u, 0x00005302u, 0x00040071u, 0x00000011u, 0x00005305u, 0x00005300u, 0x0004007cu, 0x00000012u, 0x00005306u, 0x00005305u, 0x00050051u, 0x00000012u, 0x00005307u, 0x00005303u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005308u, 0x00005303u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005309u, 0x00005303u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000530au, 0x00005307u, 0x00005308u, 0x00005309u, 0x00005306u, 0x0003003eu, 0x000052f1u, 0x0000530au, 0x0003003eu, 0x000052ceu, 0x0000530au, 0x0003003eu, 0x00004665u, 0x0000530au, 0x000300f7u, 0x000048f3u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000048f4u, 0x000048f3u, 0x000200f8u, 0x000048f4u, 0x00050050u, 0x000000efu, 0x000048f7u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x000048f8u, 0x000048f7u, 0x0003003eu, 0x00006d6au, 0x00004632u, 0x0003003eu, 0x00006d6bu, 0x00004634u, 0x0003003eu, 0x000046d1u, 0x000021b2u, 0x0003003eu, 0x000046d2u, 0x000048f8u, 0x00050041u, 0x00000007u, 0x00005314u, 0x000046d2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005315u, 0x00005314u, 0x00050084u, 0x00000006u, 0x00005316u, 0x00004634u, 0x00005315u, 0x00050080u, 0x00000006u, 0x00005317u, 0x00004632u, 0x00005316u, 0x0003003eu, 0x0000530bu, 0x00005317u, 0x00050041u, 0x00000007u, 0x00005318u, 0x000046d2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005319u, 0x00005318u, 0x00050084u, 0x00000006u, 0x0000531au, 0x00005319u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000531cu, 0x00005317u, 0x0000531au, 0x0003003eu, 0x0000530bu, 0x0000531cu, 0x000500c7u, 0x00000006u, 0x0000531eu, 0x0000531cu, 0x00000e65u, 0x0003003eu, 0x0000530bu, 0x0000531eu, 0x000500c2u, 0x00000006u, 0x00005320u, 0x0000531eu, 0x0000022au, 0x0003003eu, 0x0000530cu, 0x00005320u, 0x0004003du, 0x00000006u, 0x00005322u, 0x00005314u, 0x000500c7u, 0x00000006u, 0x00005323u, 0x00005322u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005324u, 0x00005323u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005326u, 0x00005320u, 0x00005324u, 0x0003003eu, 0x0000530cu, 0x00005326u, 0x000500c6u, 0x00000006u, 0x00005328u, 0x00005326u, 0x0000045cu, 0x0003003eu, 0x0000530cu, 0x00005328u, 0x00080041u, 0x00000692u, 0x0000532bu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005328u, 0x0004003du, 0x00000011u, 0x0000532cu, 0x0000532bu, 0x00040071u, 0x00000006u, 0x0000532du, 0x0000532cu, 0x0003003eu, 0x0000530du, 0x0000532du, 0x0003003eu, 0x0000530eu, 0x0000532du, 0x00060050u, 0x0000030cu, 0x00005334u, 0x0000532du, 0x0000532du, 0x0000532du, 0x000500c2u, 0x0000030cu, 0x00005335u, 0x00005334u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00005337u, 0x00005335u, 0x0000f37cu, 0x0003003eu, 0x00005330u, 0x00005337u, 0x000500c4u, 0x0000030cu, 0x0000533au, 0x00005337u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000533du, 0x00005337u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x0000533eu, 0x0000533au, 0x0000533du, 0x0003003eu, 0x00005330u, 0x0000533eu, 0x000500c7u, 0x00000006u, 0x00005340u, 0x0000532du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005341u, 0x00005340u, 0x000006c3u, 0x0003003eu, 0x00005331u, 0x00005341u, 0x00040071u, 0x000004bau, 0x00005343u, 0x0000533eu, 0x0004007cu, 0x000004b6u, 0x00005344u, 0x00005343u, 0x00040071u, 0x00000011u, 0x00005346u, 0x00005341u, 0x0004007cu, 0x00000012u, 0x00005347u, 0x00005346u, 0x00050051u, 0x00000012u, 0x00005348u, 0x00005344u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005349u, 0x00005344u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000534au, 0x00005344u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000534bu, 0x00005348u, 0x00005349u, 0x0000534au, 0x00005347u, 0x0003003eu, 0x00005332u, 0x0000534bu, 0x0003003eu, 0x0000530fu, 0x0000534bu, 0x0003003eu, 0x0000466du, 0x0000534bu, 0x00050050u, 0x000000efu, 0x000048feu, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000048ffu, 0x000048feu, 0x0003003eu, 0x00006d6eu, 0x00004632u, 0x0003003eu, 0x00006d6fu, 0x00004634u, 0x0003003eu, 0x000046d4u, 0x000021b2u, 0x0003003eu, 0x000046d5u, 0x000048ffu, 0x00050041u, 0x00000007u, 0x00005355u, 0x000046d5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005356u, 0x00005355u, 0x00050084u, 0x00000006u, 0x00005357u, 0x00004634u, 0x00005356u, 0x00050080u, 0x00000006u, 0x00005358u, 0x00004632u, 0x00005357u, 0x0003003eu, 0x0000534cu, 0x00005358u, 0x00050041u, 0x00000007u, 0x00005359u, 0x000046d5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000535au, 0x00005359u, 0x00050084u, 0x00000006u, 0x0000535bu, 0x0000535au, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000535du, 0x00005358u, 0x0000535bu, 0x0003003eu, 0x0000534cu, 0x0000535du, 0x000500c7u, 0x00000006u, 0x0000535fu, 0x0000535du, 0x00000e65u, 0x0003003eu, 0x0000534cu, 0x0000535fu, 0x000500c2u, 0x00000006u, 0x00005361u, 0x0000535fu, 0x0000022au, 0x0003003eu, 0x0000534du, 0x00005361u, 0x0004003du, 0x00000006u, 0x00005363u, 0x00005355u, 0x000500c7u, 0x00000006u, 0x00005364u, 0x00005363u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005365u, 0x00005364u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005367u, 0x00005361u, 0x00005365u, 0x0003003eu, 0x0000534du, 0x00005367u, 0x000500c6u, 0x00000006u, 0x00005369u, 0x00005367u, 0x0000045cu, 0x0003003eu, 0x0000534du, 0x00005369u, 0x00080041u, 0x00000692u, 0x0000536cu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005369u, 0x0004003du, 0x00000011u, 0x0000536du, 0x0000536cu, 0x00040071u, 0x00000006u, 0x0000536eu, 0x0000536du, 0x0003003eu, 0x0000534eu, 0x0000536eu, 0x0003003eu, 0x0000534fu, 0x0000536eu, 0x00060050u, 0x0000030cu, 0x00005375u, 0x0000536eu, 0x0000536eu, 0x0000536eu, 0x000500c2u, 0x0000030cu, 0x00005376u, 0x00005375u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00005378u, 0x00005376u, 0x0000f37cu, 0x0003003eu, 0x00005371u, 0x00005378u, 0x000500c4u, 0x0000030cu, 0x0000537bu, 0x00005378u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000537eu, 0x00005378u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x0000537fu, 0x0000537bu, 0x0000537eu, 0x0003003eu, 0x00005371u, 0x0000537fu, 0x000500c7u, 0x00000006u, 0x00005381u, 0x0000536eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005382u, 0x00005381u, 0x000006c3u, 0x0003003eu, 0x00005372u, 0x00005382u, 0x00040071u, 0x000004bau, 0x00005384u, 0x0000537fu, 0x0004007cu, 0x000004b6u, 0x00005385u, 0x00005384u, 0x00040071u, 0x00000011u, 0x00005387u, 0x00005382u, 0x0004007cu, 0x00000012u, 0x00005388u, 0x00005387u, 0x00050051u, 0x00000012u, 0x00005389u, 0x00005385u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000538au, 0x00005385u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000538bu, 0x00005385u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000538cu, 0x00005389u, 0x0000538au, 0x0000538bu, 0x00005388u, 0x0003003eu, 0x00005373u, 0x0000538cu, 0x0003003eu, 0x00005350u, 0x0000538cu, 0x0003003eu, 0x00004675u, 0x0000538cu, 0x000200f9u, 0x000048f3u, 0x000200f8u, 0x000048f3u, 0x000700f5u, 0x00000013u, 0x00009fc0u, 0x00009f14u, 0x000048abu, 0x0000538cu, 0x000048f4u, 0x000700f5u, 0x00000013u, 0x00009df4u, 0x00009d45u, 0x000048abu, 0x0000534bu, 0x000048f4u, 0x000300f7u, 0x00004904u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004905u, 0x00004904u, 0x000200f8u, 0x00004905u, 0x00050050u, 0x000000efu, 0x00004908u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004909u, 0x00004908u, 0x0003003eu, 0x00006d72u, 0x00004632u, 0x0003003eu, 0x00006d73u, 0x00004634u, 0x0003003eu, 0x000046d7u, 0x000021b2u, 0x0003003eu, 0x000046d8u, 0x00004909u, 0x00050041u, 0x00000007u, 0x00005396u, 0x000046d8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005397u, 0x00005396u, 0x00050084u, 0x00000006u, 0x00005398u, 0x00004634u, 0x00005397u, 0x00050080u, 0x00000006u, 0x00005399u, 0x00004632u, 0x00005398u, 0x0003003eu, 0x0000538du, 0x00005399u, 0x00050041u, 0x00000007u, 0x0000539au, 0x000046d8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000539bu, 0x0000539au, 0x00050084u, 0x00000006u, 0x0000539cu, 0x0000539bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000539eu, 0x00005399u, 0x0000539cu, 0x0003003eu, 0x0000538du, 0x0000539eu, 0x000500c7u, 0x00000006u, 0x000053a0u, 0x0000539eu, 0x00000e65u, 0x0003003eu, 0x0000538du, 0x000053a0u, 0x000500c2u, 0x00000006u, 0x000053a2u, 0x000053a0u, 0x0000022au, 0x0003003eu, 0x0000538eu, 0x000053a2u, 0x0004003du, 0x00000006u, 0x000053a4u, 0x00005396u, 0x000500c7u, 0x00000006u, 0x000053a5u, 0x000053a4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000053a6u, 0x000053a5u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000053a8u, 0x000053a2u, 0x000053a6u, 0x0003003eu, 0x0000538eu, 0x000053a8u, 0x000500c6u, 0x00000006u, 0x000053aau, 0x000053a8u, 0x0000045cu, 0x0003003eu, 0x0000538eu, 0x000053aau, 0x00080041u, 0x00000692u, 0x000053adu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000053aau, 0x0004003du, 0x00000011u, 0x000053aeu, 0x000053adu, 0x00040071u, 0x00000006u, 0x000053afu, 0x000053aeu, 0x0003003eu, 0x0000538fu, 0x000053afu, 0x0003003eu, 0x00005390u, 0x000053afu, 0x00060050u, 0x0000030cu, 0x000053b6u, 0x000053afu, 0x000053afu, 0x000053afu, 0x000500c2u, 0x0000030cu, 0x000053b7u, 0x000053b6u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000053b9u, 0x000053b7u, 0x0000f37cu, 0x0003003eu, 0x000053b2u, 0x000053b9u, 0x000500c4u, 0x0000030cu, 0x000053bcu, 0x000053b9u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000053bfu, 0x000053b9u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000053c0u, 0x000053bcu, 0x000053bfu, 0x0003003eu, 0x000053b2u, 0x000053c0u, 0x000500c7u, 0x00000006u, 0x000053c2u, 0x000053afu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000053c3u, 0x000053c2u, 0x000006c3u, 0x0003003eu, 0x000053b3u, 0x000053c3u, 0x00040071u, 0x000004bau, 0x000053c5u, 0x000053c0u, 0x0004007cu, 0x000004b6u, 0x000053c6u, 0x000053c5u, 0x00040071u, 0x00000011u, 0x000053c8u, 0x000053c3u, 0x0004007cu, 0x00000012u, 0x000053c9u, 0x000053c8u, 0x00050051u, 0x00000012u, 0x000053cau, 0x000053c6u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000053cbu, 0x000053c6u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000053ccu, 0x000053c6u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000053cdu, 0x000053cau, 0x000053cbu, 0x000053ccu, 0x000053c9u, 0x0003003eu, 0x000053b4u, 0x000053cdu, 0x0003003eu, 0x00005391u, 0x000053cdu, 0x0003003eu, 0x0000467du, 0x000053cdu, 0x000200f9u, 0x00004904u, 0x000200f8u, 0x00004904u, 0x000700f5u, 0x00000013u, 0x0000a0a6u, 0x00009ff8u, 0x000048f3u, 0x000053cdu, 0x00004905u, 0x000200f9u, 0x000048a8u, 0x000200f8u, 0x000048aau, 0x0004007cu, 0x000000b0u, 0x000048ceu, 0x000099b9u, 0x0003003eu, 0x00006d56u, 0x00004632u, 0x0003003eu, 0x00006d57u, 0x00004634u, 0x0003003eu, 0x000046c2u, 0x000021b2u, 0x0003003eu, 0x000046c3u, 0x000048ceu, 0x00050041u, 0x00000007u, 0x00005242u, 0x000046c3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005243u, 0x00005242u, 0x00050084u, 0x00000006u, 0x00005244u, 0x00004634u, 0x00005243u, 0x00050080u, 0x00000006u, 0x00005245u, 0x00004632u, 0x00005244u, 0x0003003eu, 0x0000523au, 0x00005245u, 0x00050041u, 0x00000007u, 0x00005246u, 0x000046c3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005247u, 0x00005246u, 0x00050080u, 0x00000006u, 0x00005249u, 0x00005245u, 0x00005247u, 0x0003003eu, 0x0000523au, 0x00005249u, 0x000500c7u, 0x00000006u, 0x0000524bu, 0x00005249u, 0x00000e65u, 0x0003003eu, 0x0000523au, 0x0000524bu, 0x0003003eu, 0x0000523bu, 0x0000524bu, 0x0004003du, 0x00000006u, 0x0000524eu, 0x00005242u, 0x000500c7u, 0x00000006u, 0x0000524fu, 0x0000524eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005250u, 0x0000524fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005252u, 0x0000524bu, 0x00005250u, 0x0003003eu, 0x0000523bu, 0x00005252u, 0x000500c6u, 0x00000006u, 0x00005254u, 0x00005252u, 0x00000464u, 0x0003003eu, 0x0000523bu, 0x00005254u, 0x00080041u, 0x00000671u, 0x00005257u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005254u, 0x0004003du, 0x0000000fu, 0x00005258u, 0x00005257u, 0x00040071u, 0x00000006u, 0x00005259u, 0x00005258u, 0x0003003eu, 0x0000523cu, 0x00005259u, 0x00040071u, 0x00000011u, 0x0000525bu, 0x00005259u, 0x0004007cu, 0x00000012u, 0x0000525cu, 0x0000525bu, 0x00070050u, 0x00000013u, 0x0000525du, 0x0000525cu, 0x0000525cu, 0x0000525cu, 0x0000525cu, 0x0003003eu, 0x0000523du, 0x0000525du, 0x0003003eu, 0x00004665u, 0x0000525du, 0x000300f7u, 0x000048d3u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000048d4u, 0x000048d3u, 0x000200f8u, 0x000048d4u, 0x00050050u, 0x000000efu, 0x000048d7u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x000048d8u, 0x000048d7u, 0x0003003eu, 0x00006d5au, 0x00004632u, 0x0003003eu, 0x00006d5bu, 0x00004634u, 0x0003003eu, 0x000046c5u, 0x000021b2u, 0x0003003eu, 0x000046c6u, 0x000048d8u, 0x00050041u, 0x00000007u, 0x00005266u, 0x000046c6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005267u, 0x00005266u, 0x00050084u, 0x00000006u, 0x00005268u, 0x00004634u, 0x00005267u, 0x00050080u, 0x00000006u, 0x00005269u, 0x00004632u, 0x00005268u, 0x0003003eu, 0x0000525eu, 0x00005269u, 0x00050041u, 0x00000007u, 0x0000526au, 0x000046c6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000526bu, 0x0000526au, 0x00050080u, 0x00000006u, 0x0000526du, 0x00005269u, 0x0000526bu, 0x0003003eu, 0x0000525eu, 0x0000526du, 0x000500c7u, 0x00000006u, 0x0000526fu, 0x0000526du, 0x00000e65u, 0x0003003eu, 0x0000525eu, 0x0000526fu, 0x0003003eu, 0x0000525fu, 0x0000526fu, 0x0004003du, 0x00000006u, 0x00005272u, 0x00005266u, 0x000500c7u, 0x00000006u, 0x00005273u, 0x00005272u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005274u, 0x00005273u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005276u, 0x0000526fu, 0x00005274u, 0x0003003eu, 0x0000525fu, 0x00005276u, 0x000500c6u, 0x00000006u, 0x00005278u, 0x00005276u, 0x00000464u, 0x0003003eu, 0x0000525fu, 0x00005278u, 0x00080041u, 0x00000671u, 0x0000527bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005278u, 0x0004003du, 0x0000000fu, 0x0000527cu, 0x0000527bu, 0x00040071u, 0x00000006u, 0x0000527du, 0x0000527cu, 0x0003003eu, 0x00005260u, 0x0000527du, 0x00040071u, 0x00000011u, 0x0000527fu, 0x0000527du, 0x0004007cu, 0x00000012u, 0x00005280u, 0x0000527fu, 0x00070050u, 0x00000013u, 0x00005281u, 0x00005280u, 0x00005280u, 0x00005280u, 0x00005280u, 0x0003003eu, 0x00005261u, 0x00005281u, 0x0003003eu, 0x0000466du, 0x00005281u, 0x00050050u, 0x000000efu, 0x000048deu, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000048dfu, 0x000048deu, 0x0003003eu, 0x00006d5eu, 0x00004632u, 0x0003003eu, 0x00006d5fu, 0x00004634u, 0x0003003eu, 0x000046c8u, 0x000021b2u, 0x0003003eu, 0x000046c9u, 0x000048dfu, 0x00050041u, 0x00000007u, 0x0000528au, 0x000046c9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000528bu, 0x0000528au, 0x00050084u, 0x00000006u, 0x0000528cu, 0x00004634u, 0x0000528bu, 0x00050080u, 0x00000006u, 0x0000528du, 0x00004632u, 0x0000528cu, 0x0003003eu, 0x00005282u, 0x0000528du, 0x00050041u, 0x00000007u, 0x0000528eu, 0x000046c9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000528fu, 0x0000528eu, 0x00050080u, 0x00000006u, 0x00005291u, 0x0000528du, 0x0000528fu, 0x0003003eu, 0x00005282u, 0x00005291u, 0x000500c7u, 0x00000006u, 0x00005293u, 0x00005291u, 0x00000e65u, 0x0003003eu, 0x00005282u, 0x00005293u, 0x0003003eu, 0x00005283u, 0x00005293u, 0x0004003du, 0x00000006u, 0x00005296u, 0x0000528au, 0x000500c7u, 0x00000006u, 0x00005297u, 0x00005296u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005298u, 0x00005297u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000529au, 0x00005293u, 0x00005298u, 0x0003003eu, 0x00005283u, 0x0000529au, 0x000500c6u, 0x00000006u, 0x0000529cu, 0x0000529au, 0x00000464u, 0x0003003eu, 0x00005283u, 0x0000529cu, 0x00080041u, 0x00000671u, 0x0000529fu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000529cu, 0x0004003du, 0x0000000fu, 0x000052a0u, 0x0000529fu, 0x00040071u, 0x00000006u, 0x000052a1u, 0x000052a0u, 0x0003003eu, 0x00005284u, 0x000052a1u, 0x00040071u, 0x00000011u, 0x000052a3u, 0x000052a1u, 0x0004007cu, 0x00000012u, 0x000052a4u, 0x000052a3u, 0x00070050u, 0x00000013u, 0x000052a5u, 0x000052a4u, 0x000052a4u, 0x000052a4u, 0x000052a4u, 0x0003003eu, 0x00005285u, 0x000052a5u, 0x0003003eu, 0x00004675u, 0x000052a5u, 0x000200f9u, 0x000048d3u, 0x000200f8u, 0x000048d3u, 0x000700f5u, 0x00000013u, 0x00009fbeu, 0x00009f14u, 0x000048aau, 0x000052a5u, 0x000048d4u, 0x000700f5u, 0x00000013u, 0x00009df2u, 0x00009d45u, 0x000048aau, 0x00005281u, 0x000048d4u, 0x000300f7u, 0x000048e4u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x000048e5u, 0x000048e4u, 0x000200f8u, 0x000048e5u, 0x00050050u, 0x000000efu, 0x000048e8u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000048e9u, 0x000048e8u, 0x0003003eu, 0x00006d62u, 0x00004632u, 0x0003003eu, 0x00006d63u, 0x00004634u, 0x0003003eu, 0x000046cbu, 0x000021b2u, 0x0003003eu, 0x000046ccu, 0x000048e9u, 0x00050041u, 0x00000007u, 0x000052aeu, 0x000046ccu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000052afu, 0x000052aeu, 0x00050084u, 0x00000006u, 0x000052b0u, 0x00004634u, 0x000052afu, 0x00050080u, 0x00000006u, 0x000052b1u, 0x00004632u, 0x000052b0u, 0x0003003eu, 0x000052a6u, 0x000052b1u, 0x00050041u, 0x00000007u, 0x000052b2u, 0x000046ccu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000052b3u, 0x000052b2u, 0x00050080u, 0x00000006u, 0x000052b5u, 0x000052b1u, 0x000052b3u, 0x0003003eu, 0x000052a6u, 0x000052b5u, 0x000500c7u, 0x00000006u, 0x000052b7u, 0x000052b5u, 0x00000e65u, 0x0003003eu, 0x000052a6u, 0x000052b7u, 0x0003003eu, 0x000052a7u, 0x000052b7u, 0x0004003du, 0x00000006u, 0x000052bau, 0x000052aeu, 0x000500c7u, 0x00000006u, 0x000052bbu, 0x000052bau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000052bcu, 0x000052bbu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000052beu, 0x000052b7u, 0x000052bcu, 0x0003003eu, 0x000052a7u, 0x000052beu, 0x000500c6u, 0x00000006u, 0x000052c0u, 0x000052beu, 0x00000464u, 0x0003003eu, 0x000052a7u, 0x000052c0u, 0x00080041u, 0x00000671u, 0x000052c3u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000052c0u, 0x0004003du, 0x0000000fu, 0x000052c4u, 0x000052c3u, 0x00040071u, 0x00000006u, 0x000052c5u, 0x000052c4u, 0x0003003eu, 0x000052a8u, 0x000052c5u, 0x00040071u, 0x00000011u, 0x000052c7u, 0x000052c5u, 0x0004007cu, 0x00000012u, 0x000052c8u, 0x000052c7u, 0x00070050u, 0x00000013u, 0x000052c9u, 0x000052c8u, 0x000052c8u, 0x000052c8u, 0x000052c8u, 0x0003003eu, 0x000052a9u, 0x000052c9u, 0x0003003eu, 0x0000467du, 0x000052c9u, 0x000200f9u, 0x000048e4u, 0x000200f8u, 0x000048e4u, 0x000700f5u, 0x00000013u, 0x0000a0a4u, 0x00009ff8u, 0x000048d3u, 0x000052c9u, 0x000048e5u, 0x000200f9u, 0x000048a8u, 0x000200f8u, 0x000048a9u, 0x0004007cu, 0x000000b0u, 0x000048aeu, 0x000099b9u, 0x0003003eu, 0x00006d46u, 0x00004632u, 0x0003003eu, 0x00006d47u, 0x00004634u, 0x0003003eu, 0x000046b6u, 0x000021b2u, 0x0003003eu, 0x000046b7u, 0x000048aeu, 0x00050041u, 0x00000007u, 0x00005177u, 0x000046b7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005178u, 0x00005177u, 0x00050084u, 0x00000006u, 0x00005179u, 0x00004634u, 0x00005178u, 0x00050080u, 0x00000006u, 0x0000517au, 0x00004632u, 0x00005179u, 0x0003003eu, 0x0000516eu, 0x0000517au, 0x00050041u, 0x00000007u, 0x0000517bu, 0x000046b7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000517cu, 0x0000517bu, 0x000500c2u, 0x00000006u, 0x0000517du, 0x0000517cu, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000517fu, 0x0000517au, 0x0000517du, 0x0003003eu, 0x0000516eu, 0x0000517fu, 0x000500c7u, 0x00000006u, 0x00005181u, 0x0000517fu, 0x00000e65u, 0x0003003eu, 0x0000516eu, 0x00005181u, 0x0004003du, 0x00000006u, 0x00005183u, 0x0000517bu, 0x000400c8u, 0x00000006u, 0x00005184u, 0x00005183u, 0x000500c7u, 0x00000006u, 0x00005185u, 0x00005184u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005186u, 0x00005185u, 0x00000704u, 0x0003003eu, 0x0000516fu, 0x00005186u, 0x0003003eu, 0x00005170u, 0x00005181u, 0x0004003du, 0x00000006u, 0x00005189u, 0x00005177u, 0x000500c7u, 0x00000006u, 0x0000518au, 0x00005189u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000518bu, 0x0000518au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000518du, 0x00005181u, 0x0000518bu, 0x0003003eu, 0x00005170u, 0x0000518du, 0x000500c6u, 0x00000006u, 0x0000518fu, 0x0000518du, 0x00000464u, 0x0003003eu, 0x00005170u, 0x0000518fu, 0x00080041u, 0x00000671u, 0x00005192u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000518fu, 0x0004003du, 0x0000000fu, 0x00005193u, 0x00005192u, 0x00040071u, 0x00000006u, 0x00005194u, 0x00005193u, 0x0003003eu, 0x00005171u, 0x00005194u, 0x000500c2u, 0x00000006u, 0x00005197u, 0x00005194u, 0x00005186u, 0x000500c7u, 0x00000006u, 0x00005198u, 0x00005197u, 0x00000e88u, 0x0003003eu, 0x00005171u, 0x00005198u, 0x000500c4u, 0x00000006u, 0x0000519au, 0x00005198u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000519cu, 0x00005198u, 0x0000519au, 0x0003003eu, 0x00005171u, 0x0000519cu, 0x00040071u, 0x00000011u, 0x0000519eu, 0x0000519cu, 0x0004007cu, 0x00000012u, 0x0000519fu, 0x0000519eu, 0x00070050u, 0x00000013u, 0x000051a0u, 0x0000519fu, 0x0000519fu, 0x0000519fu, 0x0000519fu, 0x0003003eu, 0x00005172u, 0x000051a0u, 0x0003003eu, 0x00004665u, 0x000051a0u, 0x000300f7u, 0x000048b3u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x000048b4u, 0x000048b3u, 0x000200f8u, 0x000048b4u, 0x00050050u, 0x000000efu, 0x000048b7u, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x000048b8u, 0x000048b7u, 0x0003003eu, 0x00006d4au, 0x00004632u, 0x0003003eu, 0x00006d4bu, 0x00004634u, 0x0003003eu, 0x000046b9u, 0x000021b2u, 0x0003003eu, 0x000046bau, 0x000048b8u, 0x00050041u, 0x00000007u, 0x000051aau, 0x000046bau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000051abu, 0x000051aau, 0x00050084u, 0x00000006u, 0x000051acu, 0x00004634u, 0x000051abu, 0x00050080u, 0x00000006u, 0x000051adu, 0x00004632u, 0x000051acu, 0x0003003eu, 0x000051a1u, 0x000051adu, 0x00050041u, 0x00000007u, 0x000051aeu, 0x000046bau, 0x0000032du, 0x0004003du, 0x00000006u, 0x000051afu, 0x000051aeu, 0x000500c2u, 0x00000006u, 0x000051b0u, 0x000051afu, 0x0000022au, 0x00050080u, 0x00000006u, 0x000051b2u, 0x000051adu, 0x000051b0u, 0x0003003eu, 0x000051a1u, 0x000051b2u, 0x000500c7u, 0x00000006u, 0x000051b4u, 0x000051b2u, 0x00000e65u, 0x0003003eu, 0x000051a1u, 0x000051b4u, 0x0004003du, 0x00000006u, 0x000051b6u, 0x000051aeu, 0x000400c8u, 0x00000006u, 0x000051b7u, 0x000051b6u, 0x000500c7u, 0x00000006u, 0x000051b8u, 0x000051b7u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000051b9u, 0x000051b8u, 0x00000704u, 0x0003003eu, 0x000051a2u, 0x000051b9u, 0x0003003eu, 0x000051a3u, 0x000051b4u, 0x0004003du, 0x00000006u, 0x000051bcu, 0x000051aau, 0x000500c7u, 0x00000006u, 0x000051bdu, 0x000051bcu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000051beu, 0x000051bdu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000051c0u, 0x000051b4u, 0x000051beu, 0x0003003eu, 0x000051a3u, 0x000051c0u, 0x000500c6u, 0x00000006u, 0x000051c2u, 0x000051c0u, 0x00000464u, 0x0003003eu, 0x000051a3u, 0x000051c2u, 0x00080041u, 0x00000671u, 0x000051c5u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000051c2u, 0x0004003du, 0x0000000fu, 0x000051c6u, 0x000051c5u, 0x00040071u, 0x00000006u, 0x000051c7u, 0x000051c6u, 0x0003003eu, 0x000051a4u, 0x000051c7u, 0x000500c2u, 0x00000006u, 0x000051cau, 0x000051c7u, 0x000051b9u, 0x000500c7u, 0x00000006u, 0x000051cbu, 0x000051cau, 0x00000e88u, 0x0003003eu, 0x000051a4u, 0x000051cbu, 0x000500c4u, 0x00000006u, 0x000051cdu, 0x000051cbu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000051cfu, 0x000051cbu, 0x000051cdu, 0x0003003eu, 0x000051a4u, 0x000051cfu, 0x00040071u, 0x00000011u, 0x000051d1u, 0x000051cfu, 0x0004007cu, 0x00000012u, 0x000051d2u, 0x000051d1u, 0x00070050u, 0x00000013u, 0x000051d3u, 0x000051d2u, 0x000051d2u, 0x000051d2u, 0x000051d2u, 0x0003003eu, 0x000051a5u, 0x000051d3u, 0x0003003eu, 0x0000466du, 0x000051d3u, 0x00050050u, 0x000000efu, 0x000048beu, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000048bfu, 0x000048beu, 0x0003003eu, 0x00006d4eu, 0x00004632u, 0x0003003eu, 0x00006d4fu, 0x00004634u, 0x0003003eu, 0x000046bcu, 0x000021b2u, 0x0003003eu, 0x000046bdu, 0x000048bfu, 0x00050041u, 0x00000007u, 0x000051ddu, 0x000046bdu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000051deu, 0x000051ddu, 0x00050084u, 0x00000006u, 0x000051dfu, 0x00004634u, 0x000051deu, 0x00050080u, 0x00000006u, 0x000051e0u, 0x00004632u, 0x000051dfu, 0x0003003eu, 0x000051d4u, 0x000051e0u, 0x00050041u, 0x00000007u, 0x000051e1u, 0x000046bdu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000051e2u, 0x000051e1u, 0x000500c2u, 0x00000006u, 0x000051e3u, 0x000051e2u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000051e5u, 0x000051e0u, 0x000051e3u, 0x0003003eu, 0x000051d4u, 0x000051e5u, 0x000500c7u, 0x00000006u, 0x000051e7u, 0x000051e5u, 0x00000e65u, 0x0003003eu, 0x000051d4u, 0x000051e7u, 0x0004003du, 0x00000006u, 0x000051e9u, 0x000051e1u, 0x000400c8u, 0x00000006u, 0x000051eau, 0x000051e9u, 0x000500c7u, 0x00000006u, 0x000051ebu, 0x000051eau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000051ecu, 0x000051ebu, 0x00000704u, 0x0003003eu, 0x000051d5u, 0x000051ecu, 0x0003003eu, 0x000051d6u, 0x000051e7u, 0x0004003du, 0x00000006u, 0x000051efu, 0x000051ddu, 0x000500c7u, 0x00000006u, 0x000051f0u, 0x000051efu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000051f1u, 0x000051f0u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000051f3u, 0x000051e7u, 0x000051f1u, 0x0003003eu, 0x000051d6u, 0x000051f3u, 0x000500c6u, 0x00000006u, 0x000051f5u, 0x000051f3u, 0x00000464u, 0x0003003eu, 0x000051d6u, 0x000051f5u, 0x00080041u, 0x00000671u, 0x000051f8u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000051f5u, 0x0004003du, 0x0000000fu, 0x000051f9u, 0x000051f8u, 0x00040071u, 0x00000006u, 0x000051fau, 0x000051f9u, 0x0003003eu, 0x000051d7u, 0x000051fau, 0x000500c2u, 0x00000006u, 0x000051fdu, 0x000051fau, 0x000051ecu, 0x000500c7u, 0x00000006u, 0x000051feu, 0x000051fdu, 0x00000e88u, 0x0003003eu, 0x000051d7u, 0x000051feu, 0x000500c4u, 0x00000006u, 0x00005200u, 0x000051feu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005202u, 0x000051feu, 0x00005200u, 0x0003003eu, 0x000051d7u, 0x00005202u, 0x00040071u, 0x00000011u, 0x00005204u, 0x00005202u, 0x0004007cu, 0x00000012u, 0x00005205u, 0x00005204u, 0x00070050u, 0x00000013u, 0x00005206u, 0x00005205u, 0x00005205u, 0x00005205u, 0x00005205u, 0x0003003eu, 0x000051d8u, 0x00005206u, 0x0003003eu, 0x00004675u, 0x00005206u, 0x000200f9u, 0x000048b3u, 0x000200f8u, 0x000048b3u, 0x000700f5u, 0x00000013u, 0x00009fbcu, 0x00009f14u, 0x000048a9u, 0x00005206u, 0x000048b4u, 0x000700f5u, 0x00000013u, 0x00009df0u, 0x00009d45u, 0x000048a9u, 0x000051d3u, 0x000048b4u, 0x000300f7u, 0x000048c4u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x000048c5u, 0x000048c4u, 0x000200f8u, 0x000048c5u, 0x00050050u, 0x000000efu, 0x000048c8u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x000048c9u, 0x000048c8u, 0x0003003eu, 0x00006d52u, 0x00004632u, 0x0003003eu, 0x00006d53u, 0x00004634u, 0x0003003eu, 0x000046bfu, 0x000021b2u, 0x0003003eu, 0x000046c0u, 0x000048c9u, 0x00050041u, 0x00000007u, 0x00005210u, 0x000046c0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005211u, 0x00005210u, 0x00050084u, 0x00000006u, 0x00005212u, 0x00004634u, 0x00005211u, 0x00050080u, 0x00000006u, 0x00005213u, 0x00004632u, 0x00005212u, 0x0003003eu, 0x00005207u, 0x00005213u, 0x00050041u, 0x00000007u, 0x00005214u, 0x000046c0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005215u, 0x00005214u, 0x000500c2u, 0x00000006u, 0x00005216u, 0x00005215u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005218u, 0x00005213u, 0x00005216u, 0x0003003eu, 0x00005207u, 0x00005218u, 0x000500c7u, 0x00000006u, 0x0000521au, 0x00005218u, 0x00000e65u, 0x0003003eu, 0x00005207u, 0x0000521au, 0x0004003du, 0x00000006u, 0x0000521cu, 0x00005214u, 0x000400c8u, 0x00000006u, 0x0000521du, 0x0000521cu, 0x000500c7u, 0x00000006u, 0x0000521eu, 0x0000521du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000521fu, 0x0000521eu, 0x00000704u, 0x0003003eu, 0x00005208u, 0x0000521fu, 0x0003003eu, 0x00005209u, 0x0000521au, 0x0004003du, 0x00000006u, 0x00005222u, 0x00005210u, 0x000500c7u, 0x00000006u, 0x00005223u, 0x00005222u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005224u, 0x00005223u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005226u, 0x0000521au, 0x00005224u, 0x0003003eu, 0x00005209u, 0x00005226u, 0x000500c6u, 0x00000006u, 0x00005228u, 0x00005226u, 0x00000464u, 0x0003003eu, 0x00005209u, 0x00005228u, 0x00080041u, 0x00000671u, 0x0000522bu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005228u, 0x0004003du, 0x0000000fu, 0x0000522cu, 0x0000522bu, 0x00040071u, 0x00000006u, 0x0000522du, 0x0000522cu, 0x0003003eu, 0x0000520au, 0x0000522du, 0x000500c2u, 0x00000006u, 0x00005230u, 0x0000522du, 0x0000521fu, 0x000500c7u, 0x00000006u, 0x00005231u, 0x00005230u, 0x00000e88u, 0x0003003eu, 0x0000520au, 0x00005231u, 0x000500c4u, 0x00000006u, 0x00005233u, 0x00005231u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005235u, 0x00005231u, 0x00005233u, 0x0003003eu, 0x0000520au, 0x00005235u, 0x00040071u, 0x00000011u, 0x00005237u, 0x00005235u, 0x0004007cu, 0x00000012u, 0x00005238u, 0x00005237u, 0x00070050u, 0x00000013u, 0x00005239u, 0x00005238u, 0x00005238u, 0x00005238u, 0x00005238u, 0x0003003eu, 0x0000520bu, 0x00005239u, 0x0003003eu, 0x0000467du, 0x00005239u, 0x000200f9u, 0x000048c4u, 0x000200f8u, 0x000048c4u, 0x000700f5u, 0x00000013u, 0x0000a0a2u, 0x00009ff8u, 0x000048b3u, 0x00005239u, 0x000048c5u, 0x000200f9u, 0x000048a8u, 0x000200f8u, 0x000048a8u, 0x000d00f5u, 0x00000013u, 0x0000a0a1u, 0x00009ff8u, 0x0000489fu, 0x0000a0a2u, 0x000048c4u, 0x0000a0a4u, 0x000048e4u, 0x0000a0a6u, 0x00004904u, 0x0000a0a8u, 0x00004924u, 0x000d00f5u, 0x00000013u, 0x00009fbau, 0x00009f14u, 0x0000489fu, 0x00009fbcu, 0x000048c4u, 0x00009fbeu, 0x000048e4u, 0x00009fc0u, 0x00004904u, 0x00009fc2u, 0x00004924u, 0x000d00f5u, 0x00000013u, 0x00009ed5u, 0x00009e2du, 0x0000489fu, 0x000051a0u, 0x000048c4u, 0x0000525du, 0x000048e4u, 0x0000530au, 0x00004904u, 0x00005407u, 0x00004924u, 0x000d00f5u, 0x00000013u, 0x00009deeu, 0x00009d45u, 0x0000489fu, 0x00009df0u, 0x000048c4u, 0x00009df2u, 0x000048e4u, 0x00009df4u, 0x00004904u, 0x00009df6u, 0x00004924u, 0x000200f9u, 0x0000489eu, 0x000200f8u, 0x0000489eu, 0x000f00f5u, 0x00000013u, 0x0000a0a0u, 0x00009ff8u, 0x000047f9u, 0x0000a0a1u, 0x000048a8u, 0x0000a0aau, 0x00004940u, 0x0000a0abu, 0x0000495eu, 0x0000a0b2u, 0x000049d2u, 0x0000a0bbu, 0x00004a5bu, 0x000f00f5u, 0x00000013u, 0x00009fb9u, 0x00009f14u, 0x000047f9u, 0x00009fbau, 0x000048a8u, 0x00009fc3u, 0x00004940u, 0x00009fc4u, 0x0000495eu, 0x00009fcbu, 0x000049d2u, 0x00009fd4u, 0x00004a5bu, 0x000f00f5u, 0x00000013u, 0x00009ed4u, 0x00009e2du, 0x000047f9u, 0x00009ed5u, 0x000048a8u, 0x00005506u, 0x00004940u, 0x00009edfu, 0x0000495eu, 0x00009ee6u, 0x000049d2u, 0x00009eefu, 0x00004a5bu, 0x000f00f5u, 0x00000013u, 0x00009dedu, 0x00009d45u, 0x000047f9u, 0x00009deeu, 0x000048a8u, 0x00009df7u, 0x00004940u, 0x00009df8u, 0x0000495eu, 0x00009dffu, 0x000049d2u, 0x00009e08u, 0x00004a5bu, 0x000200f9u, 0x000047f7u, 0x000200f8u, 0x000047f8u, 0x000300f7u, 0x000047feu, 0x00000000u, 0x000b00fbu, 0x000047e8u, 0x000047feu, 0x00000000u, 0x000047ffu, 0x00000002u, 0x000047ffu, 0x00000003u, 0x000047ffu, 0x00000004u, 0x000047ffu, 0x000200f8u, 0x000047ffu, 0x0003003eu, 0x00004663u, 0x000047ebu, 0x000600a9u, 0x00000008u, 0x00004803u, 0x000047ebu, 0x0000022du, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00004804u, 0x00004803u, 0x0003003eu, 0x00004664u, 0x00004804u, 0x00040071u, 0x00000006u, 0x00004807u, 0x00004638u, 0x0004007cu, 0x00000008u, 0x00004808u, 0x00004807u, 0x000300f7u, 0x00004809u, 0x00000000u, 0x000700fbu, 0x00004808u, 0x0000480au, 0x00000000u, 0x0000480bu, 0x00000001u, 0x0000480cu, 0x000200f8u, 0x0000480cu, 0x0004007cu, 0x000000b0u, 0x00004870u, 0x000099b9u, 0x000600a9u, 0x00000008u, 0x00004872u, 0x000047ebu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00004873u, 0x00004872u, 0x0003003eu, 0x00006d26u, 0x00004632u, 0x0003003eu, 0x00006d27u, 0x00004634u, 0x0003003eu, 0x00004686u, 0x000021b2u, 0x0003003eu, 0x00004687u, 0x00004870u, 0x0003003eu, 0x00004688u, 0x00004873u, 0x0003003eu, 0x00004689u, 0x00004804u, 0x0003003eu, 0x0000468au, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004fd2u, 0x00004687u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004fd3u, 0x00004fd2u, 0x00050084u, 0x00000006u, 0x00004fd4u, 0x00004634u, 0x00004fd3u, 0x00050080u, 0x00000006u, 0x00004fd5u, 0x00004632u, 0x00004fd4u, 0x0003003eu, 0x00004fc6u, 0x00004fd5u, 0x00050041u, 0x00000007u, 0x00004fd6u, 0x00004687u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004fd7u, 0x00004fd6u, 0x00050080u, 0x00000006u, 0x00004fd9u, 0x00004fd5u, 0x00004fd7u, 0x0003003eu, 0x00004fc6u, 0x00004fd9u, 0x000500c7u, 0x00000006u, 0x00004fdbu, 0x00004fd9u, 0x00000f1du, 0x0003003eu, 0x00004fc6u, 0x00004fdbu, 0x0003003eu, 0x00004fc7u, 0x00004fdbu, 0x0004003du, 0x00000006u, 0x00004fdeu, 0x00004fd2u, 0x000500c7u, 0x00000006u, 0x00004fdfu, 0x00004fdeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004fe0u, 0x00004fdfu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004fe2u, 0x00004fdbu, 0x00004fe0u, 0x0003003eu, 0x00004fc7u, 0x00004fe2u, 0x000500c6u, 0x00000006u, 0x00004fe4u, 0x00004fe2u, 0x00000464u, 0x0003003eu, 0x00004fc7u, 0x00004fe4u, 0x00080041u, 0x00000671u, 0x00004fe7u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004fe4u, 0x0004003du, 0x0000000fu, 0x00004fe8u, 0x00004fe7u, 0x00040071u, 0x00000006u, 0x00004fe9u, 0x00004fe8u, 0x0003003eu, 0x00004fc8u, 0x00004fe9u, 0x000500c4u, 0x00000006u, 0x00004febu, 0x00004fe9u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004fedu, 0x00004febu, 0x00004873u, 0x0003003eu, 0x00004fc9u, 0x00004fedu, 0x000500c6u, 0x00000006u, 0x00004ff0u, 0x00004fedu, 0x00004804u, 0x0003003eu, 0x00004fc9u, 0x00004ff0u, 0x000500c5u, 0x00000006u, 0x00004ff3u, 0x00000f4eu, 0x00004ff0u, 0x00080041u, 0x00000692u, 0x00004ff4u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004ff3u, 0x0004003du, 0x00000011u, 0x00004ff5u, 0x00004ff4u, 0x00040071u, 0x00000006u, 0x00004ff6u, 0x00004ff5u, 0x0003003eu, 0x00004fc8u, 0x00004ff6u, 0x000300f7u, 0x00004ff8u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004ff9u, 0x00004ffau, 0x000200f8u, 0x00004ffau, 0x0003003eu, 0x00004fccu, 0x00004ff6u, 0x00060050u, 0x0000030cu, 0x00005018u, 0x00004ff6u, 0x00004ff6u, 0x00004ff6u, 0x000500c2u, 0x0000030cu, 0x00005019u, 0x00005018u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x0000501bu, 0x00005019u, 0x0000f37cu, 0x0003003eu, 0x00005014u, 0x0000501bu, 0x000500c4u, 0x0000030cu, 0x0000501eu, 0x0000501bu, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00005021u, 0x0000501bu, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00005022u, 0x0000501eu, 0x00005021u, 0x0003003eu, 0x00005014u, 0x00005022u, 0x000500c7u, 0x00000006u, 0x00005024u, 0x00004ff6u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005025u, 0x00005024u, 0x000006c3u, 0x0003003eu, 0x00005015u, 0x00005025u, 0x00040071u, 0x000004bau, 0x00005027u, 0x00005022u, 0x0004007cu, 0x000004b6u, 0x00005028u, 0x00005027u, 0x00040071u, 0x00000011u, 0x0000502au, 0x00005025u, 0x0004007cu, 0x00000012u, 0x0000502bu, 0x0000502au, 0x00050051u, 0x00000012u, 0x0000502cu, 0x00005028u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000502du, 0x00005028u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000502eu, 0x00005028u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000502fu, 0x0000502cu, 0x0000502du, 0x0000502eu, 0x0000502bu, 0x0003003eu, 0x00005016u, 0x0000502fu, 0x0003003eu, 0x00004fcau, 0x0000502fu, 0x000200f9u, 0x00004ff8u, 0x000200f8u, 0x00004ff9u, 0x0003003eu, 0x00004fcbu, 0x00004ff6u, 0x000500c2u, 0x00000006u, 0x00005004u, 0x00004ff6u, 0x0000025du, 0x0003003eu, 0x00005000u, 0x00005004u, 0x000500c7u, 0x00000006u, 0x00005006u, 0x00004ff6u, 0x000006c3u, 0x0003003eu, 0x00005001u, 0x00005006u, 0x00040071u, 0x00000011u, 0x00005008u, 0x00005004u, 0x0004007cu, 0x00000012u, 0x00005009u, 0x00005008u, 0x00040071u, 0x00000011u, 0x00005011u, 0x00005006u, 0x0004007cu, 0x00000012u, 0x00005012u, 0x00005011u, 0x00070050u, 0x00000013u, 0x00005013u, 0x00005009u, 0x00005009u, 0x00005009u, 0x00005012u, 0x0003003eu, 0x00005002u, 0x00005013u, 0x0003003eu, 0x00004fcau, 0x00005013u, 0x000200f9u, 0x00004ff8u, 0x000200f8u, 0x00004ff8u, 0x000700f5u, 0x00000013u, 0x00009b42u, 0x00005013u, 0x00004ff9u, 0x0000502fu, 0x00004ffau, 0x0003003eu, 0x00004fcdu, 0x00009b42u, 0x0003003eu, 0x00004665u, 0x00009b42u, 0x000300f7u, 0x0000487au, 0x00000000u, 0x000400fau, 0x000021c9u, 0x0000487bu, 0x0000487au, 0x000200f8u, 0x0000487bu, 0x00050050u, 0x000000efu, 0x0000487eu, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x0000487fu, 0x0000487eu, 0x0003003eu, 0x00006d2au, 0x00004632u, 0x0003003eu, 0x00006d2bu, 0x00004634u, 0x0003003eu, 0x0000468cu, 0x000021b2u, 0x0003003eu, 0x0000468du, 0x0000487fu, 0x0003003eu, 0x0000468eu, 0x0000045cu, 0x0003003eu, 0x0000468fu, 0x00004804u, 0x0003003eu, 0x00004690u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x0000503cu, 0x0000468du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000503du, 0x0000503cu, 0x00050084u, 0x00000006u, 0x0000503eu, 0x00004634u, 0x0000503du, 0x00050080u, 0x00000006u, 0x0000503fu, 0x00004632u, 0x0000503eu, 0x0003003eu, 0x00005030u, 0x0000503fu, 0x00050041u, 0x00000007u, 0x00005040u, 0x0000468du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005041u, 0x00005040u, 0x00050080u, 0x00000006u, 0x00005043u, 0x0000503fu, 0x00005041u, 0x0003003eu, 0x00005030u, 0x00005043u, 0x000500c7u, 0x00000006u, 0x00005045u, 0x00005043u, 0x00000f1du, 0x0003003eu, 0x00005030u, 0x00005045u, 0x0003003eu, 0x00005031u, 0x00005045u, 0x0004003du, 0x00000006u, 0x00005048u, 0x0000503cu, 0x000500c7u, 0x00000006u, 0x00005049u, 0x00005048u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000504au, 0x00005049u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000504cu, 0x00005045u, 0x0000504au, 0x0003003eu, 0x00005031u, 0x0000504cu, 0x000500c6u, 0x00000006u, 0x0000504eu, 0x0000504cu, 0x00000464u, 0x0003003eu, 0x00005031u, 0x0000504eu, 0x00080041u, 0x00000671u, 0x00005051u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000504eu, 0x0004003du, 0x0000000fu, 0x00005052u, 0x00005051u, 0x00040071u, 0x00000006u, 0x00005053u, 0x00005052u, 0x0003003eu, 0x00005032u, 0x00005053u, 0x000500c4u, 0x00000006u, 0x00005055u, 0x00005053u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00005057u, 0x00005055u, 0x0000045cu, 0x0003003eu, 0x00005033u, 0x00005057u, 0x000500c6u, 0x00000006u, 0x0000505au, 0x00005057u, 0x00004804u, 0x0003003eu, 0x00005033u, 0x0000505au, 0x000500c5u, 0x00000006u, 0x0000505du, 0x00000f4eu, 0x0000505au, 0x00080041u, 0x00000692u, 0x0000505eu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x0000505du, 0x0004003du, 0x00000011u, 0x0000505fu, 0x0000505eu, 0x00040071u, 0x00000006u, 0x00005060u, 0x0000505fu, 0x0003003eu, 0x00005032u, 0x00005060u, 0x000300f7u, 0x00005062u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00005063u, 0x00005064u, 0x000200f8u, 0x00005064u, 0x0003003eu, 0x00005036u, 0x00005060u, 0x00060050u, 0x0000030cu, 0x00005082u, 0x00005060u, 0x00005060u, 0x00005060u, 0x000500c2u, 0x0000030cu, 0x00005083u, 0x00005082u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00005085u, 0x00005083u, 0x0000f37cu, 0x0003003eu, 0x0000507eu, 0x00005085u, 0x000500c4u, 0x0000030cu, 0x00005088u, 0x00005085u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000508bu, 0x00005085u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x0000508cu, 0x00005088u, 0x0000508bu, 0x0003003eu, 0x0000507eu, 0x0000508cu, 0x000500c7u, 0x00000006u, 0x0000508eu, 0x00005060u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000508fu, 0x0000508eu, 0x000006c3u, 0x0003003eu, 0x0000507fu, 0x0000508fu, 0x00040071u, 0x000004bau, 0x00005091u, 0x0000508cu, 0x0004007cu, 0x000004b6u, 0x00005092u, 0x00005091u, 0x00040071u, 0x00000011u, 0x00005094u, 0x0000508fu, 0x0004007cu, 0x00000012u, 0x00005095u, 0x00005094u, 0x00050051u, 0x00000012u, 0x00005096u, 0x00005092u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005097u, 0x00005092u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005098u, 0x00005092u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00005099u, 0x00005096u, 0x00005097u, 0x00005098u, 0x00005095u, 0x0003003eu, 0x00005080u, 0x00005099u, 0x0003003eu, 0x00005034u, 0x00005099u, 0x000200f9u, 0x00005062u, 0x000200f8u, 0x00005063u, 0x0003003eu, 0x00005035u, 0x00005060u, 0x000500c2u, 0x00000006u, 0x0000506eu, 0x00005060u, 0x0000025du, 0x0003003eu, 0x0000506au, 0x0000506eu, 0x000500c7u, 0x00000006u, 0x00005070u, 0x00005060u, 0x000006c3u, 0x0003003eu, 0x0000506bu, 0x00005070u, 0x00040071u, 0x00000011u, 0x00005072u, 0x0000506eu, 0x0004007cu, 0x00000012u, 0x00005073u, 0x00005072u, 0x00040071u, 0x00000011u, 0x0000507bu, 0x00005070u, 0x0004007cu, 0x00000012u, 0x0000507cu, 0x0000507bu, 0x00070050u, 0x00000013u, 0x0000507du, 0x00005073u, 0x00005073u, 0x00005073u, 0x0000507cu, 0x0003003eu, 0x0000506cu, 0x0000507du, 0x0003003eu, 0x00005034u, 0x0000507du, 0x000200f9u, 0x00005062u, 0x000200f8u, 0x00005062u, 0x000700f5u, 0x00000013u, 0x00009b5au, 0x0000507du, 0x00005063u, 0x00005099u, 0x00005064u, 0x0003003eu, 0x00005037u, 0x00009b5au, 0x0003003eu, 0x0000466du, 0x00009b5au, 0x00050050u, 0x000000efu, 0x00004887u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004888u, 0x00004887u, 0x0003003eu, 0x00006d2eu, 0x00004632u, 0x0003003eu, 0x00006d2fu, 0x00004634u, 0x0003003eu, 0x00004692u, 0x000021b2u, 0x0003003eu, 0x00004693u, 0x00004888u, 0x0003003eu, 0x00004694u, 0x00000386u, 0x0003003eu, 0x00004695u, 0x00004804u, 0x0003003eu, 0x00004696u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x000050a6u, 0x00004693u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000050a7u, 0x000050a6u, 0x00050084u, 0x00000006u, 0x000050a8u, 0x00004634u, 0x000050a7u, 0x00050080u, 0x00000006u, 0x000050a9u, 0x00004632u, 0x000050a8u, 0x0003003eu, 0x0000509au, 0x000050a9u, 0x00050041u, 0x00000007u, 0x000050aau, 0x00004693u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000050abu, 0x000050aau, 0x00050080u, 0x00000006u, 0x000050adu, 0x000050a9u, 0x000050abu, 0x0003003eu, 0x0000509au, 0x000050adu, 0x000500c7u, 0x00000006u, 0x000050afu, 0x000050adu, 0x00000f1du, 0x0003003eu, 0x0000509au, 0x000050afu, 0x0003003eu, 0x0000509bu, 0x000050afu, 0x0004003du, 0x00000006u, 0x000050b2u, 0x000050a6u, 0x000500c7u, 0x00000006u, 0x000050b3u, 0x000050b2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000050b4u, 0x000050b3u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000050b6u, 0x000050afu, 0x000050b4u, 0x0003003eu, 0x0000509bu, 0x000050b6u, 0x000500c6u, 0x00000006u, 0x000050b8u, 0x000050b6u, 0x00000464u, 0x0003003eu, 0x0000509bu, 0x000050b8u, 0x00080041u, 0x00000671u, 0x000050bbu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000050b8u, 0x0004003du, 0x0000000fu, 0x000050bcu, 0x000050bbu, 0x00040071u, 0x00000006u, 0x000050bdu, 0x000050bcu, 0x0003003eu, 0x0000509cu, 0x000050bdu, 0x000500c4u, 0x00000006u, 0x000050bfu, 0x000050bdu, 0x0000022du, 0x00050080u, 0x00000006u, 0x000050c1u, 0x000050bfu, 0x00000386u, 0x0003003eu, 0x0000509du, 0x000050c1u, 0x000500c6u, 0x00000006u, 0x000050c4u, 0x000050c1u, 0x00004804u, 0x0003003eu, 0x0000509du, 0x000050c4u, 0x000500c5u, 0x00000006u, 0x000050c7u, 0x00000f4eu, 0x000050c4u, 0x00080041u, 0x00000692u, 0x000050c8u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x000050c7u, 0x0004003du, 0x00000011u, 0x000050c9u, 0x000050c8u, 0x00040071u, 0x00000006u, 0x000050cau, 0x000050c9u, 0x0003003eu, 0x0000509cu, 0x000050cau, 0x000300f7u, 0x000050ccu, 0x00000000u, 0x000400fau, 0x000021c6u, 0x000050cdu, 0x000050ceu, 0x000200f8u, 0x000050ceu, 0x0003003eu, 0x000050a0u, 0x000050cau, 0x00060050u, 0x0000030cu, 0x000050ecu, 0x000050cau, 0x000050cau, 0x000050cau, 0x000500c2u, 0x0000030cu, 0x000050edu, 0x000050ecu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x000050efu, 0x000050edu, 0x0000f37cu, 0x0003003eu, 0x000050e8u, 0x000050efu, 0x000500c4u, 0x0000030cu, 0x000050f2u, 0x000050efu, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x000050f5u, 0x000050efu, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x000050f6u, 0x000050f2u, 0x000050f5u, 0x0003003eu, 0x000050e8u, 0x000050f6u, 0x000500c7u, 0x00000006u, 0x000050f8u, 0x000050cau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000050f9u, 0x000050f8u, 0x000006c3u, 0x0003003eu, 0x000050e9u, 0x000050f9u, 0x00040071u, 0x000004bau, 0x000050fbu, 0x000050f6u, 0x0004007cu, 0x000004b6u, 0x000050fcu, 0x000050fbu, 0x00040071u, 0x00000011u, 0x000050feu, 0x000050f9u, 0x0004007cu, 0x00000012u, 0x000050ffu, 0x000050feu, 0x00050051u, 0x00000012u, 0x00005100u, 0x000050fcu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005101u, 0x000050fcu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005102u, 0x000050fcu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00005103u, 0x00005100u, 0x00005101u, 0x00005102u, 0x000050ffu, 0x0003003eu, 0x000050eau, 0x00005103u, 0x0003003eu, 0x0000509eu, 0x00005103u, 0x000200f9u, 0x000050ccu, 0x000200f8u, 0x000050cdu, 0x0003003eu, 0x0000509fu, 0x000050cau, 0x000500c2u, 0x00000006u, 0x000050d8u, 0x000050cau, 0x0000025du, 0x0003003eu, 0x000050d4u, 0x000050d8u, 0x000500c7u, 0x00000006u, 0x000050dau, 0x000050cau, 0x000006c3u, 0x0003003eu, 0x000050d5u, 0x000050dau, 0x00040071u, 0x00000011u, 0x000050dcu, 0x000050d8u, 0x0004007cu, 0x00000012u, 0x000050ddu, 0x000050dcu, 0x00040071u, 0x00000011u, 0x000050e5u, 0x000050dau, 0x0004007cu, 0x00000012u, 0x000050e6u, 0x000050e5u, 0x00070050u, 0x00000013u, 0x000050e7u, 0x000050ddu, 0x000050ddu, 0x000050ddu, 0x000050e6u, 0x0003003eu, 0x000050d6u, 0x000050e7u, 0x0003003eu, 0x0000509eu, 0x000050e7u, 0x000200f9u, 0x000050ccu, 0x000200f8u, 0x000050ccu, 0x000700f5u, 0x00000013u, 0x00009b72u, 0x000050e7u, 0x000050cdu, 0x00005103u, 0x000050ceu, 0x0003003eu, 0x000050a1u, 0x00009b72u, 0x0003003eu, 0x00004675u, 0x00009b72u, 0x000200f9u, 0x0000487au, 0x000200f8u, 0x0000487au, 0x000700f5u, 0x00000013u, 0x00009fb6u, 0x00009f14u, 0x00004ff8u, 0x00009b72u, 0x000050ccu, 0x000700f5u, 0x00000013u, 0x00009de9u, 0x00009d45u, 0x00004ff8u, 0x00009b5au, 0x000050ccu, 0x000300f7u, 0x0000488fu, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004890u, 0x0000488fu, 0x000200f8u, 0x00004890u, 0x00050050u, 0x000000efu, 0x00004893u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004894u, 0x00004893u, 0x0003003eu, 0x00006d32u, 0x00004632u, 0x0003003eu, 0x00006d33u, 0x00004634u, 0x0003003eu, 0x00004698u, 0x000021b2u, 0x0003003eu, 0x00004699u, 0x00004894u, 0x0003003eu, 0x0000469au, 0x00000464u, 0x0003003eu, 0x0000469bu, 0x00004804u, 0x0003003eu, 0x0000469cu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00005110u, 0x00004699u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005111u, 0x00005110u, 0x00050084u, 0x00000006u, 0x00005112u, 0x00004634u, 0x00005111u, 0x00050080u, 0x00000006u, 0x00005113u, 0x00004632u, 0x00005112u, 0x0003003eu, 0x00005104u, 0x00005113u, 0x00050041u, 0x00000007u, 0x00005114u, 0x00004699u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005115u, 0x00005114u, 0x00050080u, 0x00000006u, 0x00005117u, 0x00005113u, 0x00005115u, 0x0003003eu, 0x00005104u, 0x00005117u, 0x000500c7u, 0x00000006u, 0x00005119u, 0x00005117u, 0x00000f1du, 0x0003003eu, 0x00005104u, 0x00005119u, 0x0003003eu, 0x00005105u, 0x00005119u, 0x0004003du, 0x00000006u, 0x0000511cu, 0x00005110u, 0x000500c7u, 0x00000006u, 0x0000511du, 0x0000511cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000511eu, 0x0000511du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005120u, 0x00005119u, 0x0000511eu, 0x0003003eu, 0x00005105u, 0x00005120u, 0x000500c6u, 0x00000006u, 0x00005122u, 0x00005120u, 0x00000464u, 0x0003003eu, 0x00005105u, 0x00005122u, 0x00080041u, 0x00000671u, 0x00005125u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005122u, 0x0004003du, 0x0000000fu, 0x00005126u, 0x00005125u, 0x00040071u, 0x00000006u, 0x00005127u, 0x00005126u, 0x0003003eu, 0x00005106u, 0x00005127u, 0x000500c4u, 0x00000006u, 0x00005129u, 0x00005127u, 0x0000022du, 0x00050080u, 0x00000006u, 0x0000512bu, 0x00005129u, 0x00000464u, 0x0003003eu, 0x00005107u, 0x0000512bu, 0x000500c6u, 0x00000006u, 0x0000512eu, 0x0000512bu, 0x00004804u, 0x0003003eu, 0x00005107u, 0x0000512eu, 0x000500c5u, 0x00000006u, 0x00005131u, 0x00000f4eu, 0x0000512eu, 0x00080041u, 0x00000692u, 0x00005132u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00005131u, 0x0004003du, 0x00000011u, 0x00005133u, 0x00005132u, 0x00040071u, 0x00000006u, 0x00005134u, 0x00005133u, 0x0003003eu, 0x00005106u, 0x00005134u, 0x000300f7u, 0x00005136u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00005137u, 0x00005138u, 0x000200f8u, 0x00005138u, 0x0003003eu, 0x0000510au, 0x00005134u, 0x00060050u, 0x0000030cu, 0x00005156u, 0x00005134u, 0x00005134u, 0x00005134u, 0x000500c2u, 0x0000030cu, 0x00005157u, 0x00005156u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00005159u, 0x00005157u, 0x0000f37cu, 0x0003003eu, 0x00005152u, 0x00005159u, 0x000500c4u, 0x0000030cu, 0x0000515cu, 0x00005159u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x0000515fu, 0x00005159u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00005160u, 0x0000515cu, 0x0000515fu, 0x0003003eu, 0x00005152u, 0x00005160u, 0x000500c7u, 0x00000006u, 0x00005162u, 0x00005134u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005163u, 0x00005162u, 0x000006c3u, 0x0003003eu, 0x00005153u, 0x00005163u, 0x00040071u, 0x000004bau, 0x00005165u, 0x00005160u, 0x0004007cu, 0x000004b6u, 0x00005166u, 0x00005165u, 0x00040071u, 0x00000011u, 0x00005168u, 0x00005163u, 0x0004007cu, 0x00000012u, 0x00005169u, 0x00005168u, 0x00050051u, 0x00000012u, 0x0000516au, 0x00005166u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000516bu, 0x00005166u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000516cu, 0x00005166u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000516du, 0x0000516au, 0x0000516bu, 0x0000516cu, 0x00005169u, 0x0003003eu, 0x00005154u, 0x0000516du, 0x0003003eu, 0x00005108u, 0x0000516du, 0x000200f9u, 0x00005136u, 0x000200f8u, 0x00005137u, 0x0003003eu, 0x00005109u, 0x00005134u, 0x000500c2u, 0x00000006u, 0x00005142u, 0x00005134u, 0x0000025du, 0x0003003eu, 0x0000513eu, 0x00005142u, 0x000500c7u, 0x00000006u, 0x00005144u, 0x00005134u, 0x000006c3u, 0x0003003eu, 0x0000513fu, 0x00005144u, 0x00040071u, 0x00000011u, 0x00005146u, 0x00005142u, 0x0004007cu, 0x00000012u, 0x00005147u, 0x00005146u, 0x00040071u, 0x00000011u, 0x0000514fu, 0x00005144u, 0x0004007cu, 0x00000012u, 0x00005150u, 0x0000514fu, 0x00070050u, 0x00000013u, 0x00005151u, 0x00005147u, 0x00005147u, 0x00005147u, 0x00005150u, 0x0003003eu, 0x00005140u, 0x00005151u, 0x0003003eu, 0x00005108u, 0x00005151u, 0x000200f9u, 0x00005136u, 0x000200f8u, 0x00005136u, 0x000700f5u, 0x00000013u, 0x00009b9fu, 0x00005151u, 0x00005137u, 0x0000516du, 0x00005138u, 0x0003003eu, 0x0000510bu, 0x00009b9fu, 0x0003003eu, 0x0000467du, 0x00009b9fu, 0x000200f9u, 0x0000488fu, 0x000200f8u, 0x0000488fu, 0x000700f5u, 0x00000013u, 0x0000a09bu, 0x00009ff8u, 0x0000487au, 0x00009b9fu, 0x00005136u, 0x000200f9u, 0x00004809u, 0x000200f8u, 0x0000480bu, 0x0004007cu, 0x000000b0u, 0x00004839u, 0x000099b9u, 0x00040071u, 0x00000006u, 0x0000483cu, 0x0000463au, 0x000600a9u, 0x00000008u, 0x0000483eu, 0x000047ebu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x0000483fu, 0x0000483eu, 0x0003003eu, 0x00006d16u, 0x00004632u, 0x0003003eu, 0x00006d17u, 0x00004634u, 0x0003003eu, 0x00004667u, 0x000021b2u, 0x0003003eu, 0x00004668u, 0x00004839u, 0x0003003eu, 0x00004669u, 0x0000483cu, 0x0003003eu, 0x0000466au, 0x0000483fu, 0x0003003eu, 0x0000466bu, 0x00004804u, 0x0003003eu, 0x0000466cu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004defu, 0x00004668u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004df0u, 0x00004defu, 0x00050084u, 0x00000006u, 0x00004df1u, 0x00004634u, 0x00004df0u, 0x00050080u, 0x00000006u, 0x00004df2u, 0x00004632u, 0x00004df1u, 0x0003003eu, 0x00004de2u, 0x00004df2u, 0x00050041u, 0x00000007u, 0x00004df3u, 0x00004668u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004df4u, 0x00004df3u, 0x000500c2u, 0x00000006u, 0x00004df5u, 0x00004df4u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004df7u, 0x00004df2u, 0x00004df5u, 0x0003003eu, 0x00004de2u, 0x00004df7u, 0x000500c7u, 0x00000006u, 0x00004df9u, 0x00004df7u, 0x00000f1du, 0x0003003eu, 0x00004de2u, 0x00004df9u, 0x0004003du, 0x00000006u, 0x00004dfbu, 0x00004df3u, 0x000400c8u, 0x00000006u, 0x00004dfcu, 0x00004dfbu, 0x000500c7u, 0x00000006u, 0x00004dfdu, 0x00004dfcu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004dfeu, 0x00004dfdu, 0x00000704u, 0x0003003eu, 0x00004de3u, 0x00004dfeu, 0x0003003eu, 0x00004de4u, 0x00004df9u, 0x0004003du, 0x00000006u, 0x00004e01u, 0x00004defu, 0x000500c7u, 0x00000006u, 0x00004e02u, 0x00004e01u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004e03u, 0x00004e02u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004e05u, 0x00004df9u, 0x00004e03u, 0x0003003eu, 0x00004de4u, 0x00004e05u, 0x000500c6u, 0x00000006u, 0x00004e07u, 0x00004e05u, 0x00000464u, 0x0003003eu, 0x00004de4u, 0x00004e07u, 0x00080041u, 0x00000671u, 0x00004e0au, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004e07u, 0x0004003du, 0x0000000fu, 0x00004e0bu, 0x00004e0au, 0x00040071u, 0x00000006u, 0x00004e0cu, 0x00004e0bu, 0x0003003eu, 0x00004de5u, 0x00004e0cu, 0x000500c2u, 0x00000006u, 0x00004e0fu, 0x00004e0cu, 0x00004dfeu, 0x000500c7u, 0x00000006u, 0x00004e10u, 0x00004e0fu, 0x00000e88u, 0x0003003eu, 0x00004de5u, 0x00004e10u, 0x000500c4u, 0x00000006u, 0x00004e12u, 0x0000483cu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004e14u, 0x00004e10u, 0x00004e12u, 0x0003003eu, 0x00004de5u, 0x00004e14u, 0x000500c4u, 0x00000006u, 0x00004e16u, 0x00004e14u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004e18u, 0x00004e16u, 0x0000483fu, 0x0003003eu, 0x00004de6u, 0x00004e18u, 0x000500c6u, 0x00000006u, 0x00004e1bu, 0x00004e18u, 0x00004804u, 0x0003003eu, 0x00004de6u, 0x00004e1bu, 0x000500c5u, 0x00000006u, 0x00004e1eu, 0x00000f4eu, 0x00004e1bu, 0x00080041u, 0x00000692u, 0x00004e1fu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004e1eu, 0x0004003du, 0x00000011u, 0x00004e20u, 0x00004e1fu, 0x00040071u, 0x00000006u, 0x00004e21u, 0x00004e20u, 0x0003003eu, 0x00004de5u, 0x00004e21u, 0x000300f7u, 0x00004e23u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004e24u, 0x00004e25u, 0x000200f8u, 0x00004e25u, 0x0003003eu, 0x00004de9u, 0x00004e21u, 0x00060050u, 0x0000030cu, 0x00004e43u, 0x00004e21u, 0x00004e21u, 0x00004e21u, 0x000500c2u, 0x0000030cu, 0x00004e44u, 0x00004e43u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004e46u, 0x00004e44u, 0x0000f37cu, 0x0003003eu, 0x00004e3fu, 0x00004e46u, 0x000500c4u, 0x0000030cu, 0x00004e49u, 0x00004e46u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004e4cu, 0x00004e46u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004e4du, 0x00004e49u, 0x00004e4cu, 0x0003003eu, 0x00004e3fu, 0x00004e4du, 0x000500c7u, 0x00000006u, 0x00004e4fu, 0x00004e21u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004e50u, 0x00004e4fu, 0x000006c3u, 0x0003003eu, 0x00004e40u, 0x00004e50u, 0x00040071u, 0x000004bau, 0x00004e52u, 0x00004e4du, 0x0004007cu, 0x000004b6u, 0x00004e53u, 0x00004e52u, 0x00040071u, 0x00000011u, 0x00004e55u, 0x00004e50u, 0x0004007cu, 0x00000012u, 0x00004e56u, 0x00004e55u, 0x00050051u, 0x00000012u, 0x00004e57u, 0x00004e53u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004e58u, 0x00004e53u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004e59u, 0x00004e53u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004e5au, 0x00004e57u, 0x00004e58u, 0x00004e59u, 0x00004e56u, 0x0003003eu, 0x00004e41u, 0x00004e5au, 0x0003003eu, 0x00004de7u, 0x00004e5au, 0x000200f9u, 0x00004e23u, 0x000200f8u, 0x00004e24u, 0x0003003eu, 0x00004de8u, 0x00004e21u, 0x000500c2u, 0x00000006u, 0x00004e2fu, 0x00004e21u, 0x0000025du, 0x0003003eu, 0x00004e2bu, 0x00004e2fu, 0x000500c7u, 0x00000006u, 0x00004e31u, 0x00004e21u, 0x000006c3u, 0x0003003eu, 0x00004e2cu, 0x00004e31u, 0x00040071u, 0x00000011u, 0x00004e33u, 0x00004e2fu, 0x0004007cu, 0x00000012u, 0x00004e34u, 0x00004e33u, 0x00040071u, 0x00000011u, 0x00004e3cu, 0x00004e31u, 0x0004007cu, 0x00000012u, 0x00004e3du, 0x00004e3cu, 0x00070050u, 0x00000013u, 0x00004e3eu, 0x00004e34u, 0x00004e34u, 0x00004e34u, 0x00004e3du, 0x0003003eu, 0x00004e2du, 0x00004e3eu, 0x0003003eu, 0x00004de7u, 0x00004e3eu, 0x000200f9u, 0x00004e23u, 0x000200f8u, 0x00004e23u, 0x000700f5u, 0x00000013u, 0x00009ba0u, 0x00004e3eu, 0x00004e24u, 0x00004e5au, 0x00004e25u, 0x0003003eu, 0x00004deau, 0x00009ba0u, 0x0003003eu, 0x00004665u, 0x00009ba0u, 0x000300f7u, 0x00004846u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004847u, 0x00004846u, 0x000200f8u, 0x00004847u, 0x00050050u, 0x000000efu, 0x0000484au, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x0000484bu, 0x0000484au, 0x0003003eu, 0x00006d1au, 0x00004632u, 0x0003003eu, 0x00006d1bu, 0x00004634u, 0x0003003eu, 0x0000466fu, 0x000021b2u, 0x0003003eu, 0x00004670u, 0x0000484bu, 0x0003003eu, 0x00004671u, 0x0000483cu, 0x0003003eu, 0x00004672u, 0x0000045cu, 0x0003003eu, 0x00004673u, 0x00004804u, 0x0003003eu, 0x00004674u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004e68u, 0x00004670u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004e69u, 0x00004e68u, 0x00050084u, 0x00000006u, 0x00004e6au, 0x00004634u, 0x00004e69u, 0x00050080u, 0x00000006u, 0x00004e6bu, 0x00004632u, 0x00004e6au, 0x0003003eu, 0x00004e5bu, 0x00004e6bu, 0x00050041u, 0x00000007u, 0x00004e6cu, 0x00004670u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004e6du, 0x00004e6cu, 0x000500c2u, 0x00000006u, 0x00004e6eu, 0x00004e6du, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004e70u, 0x00004e6bu, 0x00004e6eu, 0x0003003eu, 0x00004e5bu, 0x00004e70u, 0x000500c7u, 0x00000006u, 0x00004e72u, 0x00004e70u, 0x00000f1du, 0x0003003eu, 0x00004e5bu, 0x00004e72u, 0x0004003du, 0x00000006u, 0x00004e74u, 0x00004e6cu, 0x000400c8u, 0x00000006u, 0x00004e75u, 0x00004e74u, 0x000500c7u, 0x00000006u, 0x00004e76u, 0x00004e75u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004e77u, 0x00004e76u, 0x00000704u, 0x0003003eu, 0x00004e5cu, 0x00004e77u, 0x0003003eu, 0x00004e5du, 0x00004e72u, 0x0004003du, 0x00000006u, 0x00004e7au, 0x00004e68u, 0x000500c7u, 0x00000006u, 0x00004e7bu, 0x00004e7au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004e7cu, 0x00004e7bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004e7eu, 0x00004e72u, 0x00004e7cu, 0x0003003eu, 0x00004e5du, 0x00004e7eu, 0x000500c6u, 0x00000006u, 0x00004e80u, 0x00004e7eu, 0x00000464u, 0x0003003eu, 0x00004e5du, 0x00004e80u, 0x00080041u, 0x00000671u, 0x00004e83u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004e80u, 0x0004003du, 0x0000000fu, 0x00004e84u, 0x00004e83u, 0x00040071u, 0x00000006u, 0x00004e85u, 0x00004e84u, 0x0003003eu, 0x00004e5eu, 0x00004e85u, 0x000500c2u, 0x00000006u, 0x00004e88u, 0x00004e85u, 0x00004e77u, 0x000500c7u, 0x00000006u, 0x00004e89u, 0x00004e88u, 0x00000e88u, 0x0003003eu, 0x00004e5eu, 0x00004e89u, 0x000500c5u, 0x00000006u, 0x00004e8du, 0x00004e89u, 0x00004e12u, 0x0003003eu, 0x00004e5eu, 0x00004e8du, 0x000500c4u, 0x00000006u, 0x00004e8fu, 0x00004e8du, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004e91u, 0x00004e8fu, 0x0000045cu, 0x0003003eu, 0x00004e5fu, 0x00004e91u, 0x000500c6u, 0x00000006u, 0x00004e94u, 0x00004e91u, 0x00004804u, 0x0003003eu, 0x00004e5fu, 0x00004e94u, 0x000500c5u, 0x00000006u, 0x00004e97u, 0x00000f4eu, 0x00004e94u, 0x00080041u, 0x00000692u, 0x00004e98u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004e97u, 0x0004003du, 0x00000011u, 0x00004e99u, 0x00004e98u, 0x00040071u, 0x00000006u, 0x00004e9au, 0x00004e99u, 0x0003003eu, 0x00004e5eu, 0x00004e9au, 0x000300f7u, 0x00004e9cu, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004e9du, 0x00004e9eu, 0x000200f8u, 0x00004e9eu, 0x0003003eu, 0x00004e62u, 0x00004e9au, 0x00060050u, 0x0000030cu, 0x00004ebcu, 0x00004e9au, 0x00004e9au, 0x00004e9au, 0x000500c2u, 0x0000030cu, 0x00004ebdu, 0x00004ebcu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004ebfu, 0x00004ebdu, 0x0000f37cu, 0x0003003eu, 0x00004eb8u, 0x00004ebfu, 0x000500c4u, 0x0000030cu, 0x00004ec2u, 0x00004ebfu, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004ec5u, 0x00004ebfu, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004ec6u, 0x00004ec2u, 0x00004ec5u, 0x0003003eu, 0x00004eb8u, 0x00004ec6u, 0x000500c7u, 0x00000006u, 0x00004ec8u, 0x00004e9au, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004ec9u, 0x00004ec8u, 0x000006c3u, 0x0003003eu, 0x00004eb9u, 0x00004ec9u, 0x00040071u, 0x000004bau, 0x00004ecbu, 0x00004ec6u, 0x0004007cu, 0x000004b6u, 0x00004eccu, 0x00004ecbu, 0x00040071u, 0x00000011u, 0x00004eceu, 0x00004ec9u, 0x0004007cu, 0x00000012u, 0x00004ecfu, 0x00004eceu, 0x00050051u, 0x00000012u, 0x00004ed0u, 0x00004eccu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004ed1u, 0x00004eccu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004ed2u, 0x00004eccu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004ed3u, 0x00004ed0u, 0x00004ed1u, 0x00004ed2u, 0x00004ecfu, 0x0003003eu, 0x00004ebau, 0x00004ed3u, 0x0003003eu, 0x00004e60u, 0x00004ed3u, 0x000200f9u, 0x00004e9cu, 0x000200f8u, 0x00004e9du, 0x0003003eu, 0x00004e61u, 0x00004e9au, 0x000500c2u, 0x00000006u, 0x00004ea8u, 0x00004e9au, 0x0000025du, 0x0003003eu, 0x00004ea4u, 0x00004ea8u, 0x000500c7u, 0x00000006u, 0x00004eaau, 0x00004e9au, 0x000006c3u, 0x0003003eu, 0x00004ea5u, 0x00004eaau, 0x00040071u, 0x00000011u, 0x00004eacu, 0x00004ea8u, 0x0004007cu, 0x00000012u, 0x00004eadu, 0x00004eacu, 0x00040071u, 0x00000011u, 0x00004eb5u, 0x00004eaau, 0x0004007cu, 0x00000012u, 0x00004eb6u, 0x00004eb5u, 0x00070050u, 0x00000013u, 0x00004eb7u, 0x00004eadu, 0x00004eadu, 0x00004eadu, 0x00004eb6u, 0x0003003eu, 0x00004ea6u, 0x00004eb7u, 0x0003003eu, 0x00004e60u, 0x00004eb7u, 0x000200f9u, 0x00004e9cu, 0x000200f8u, 0x00004e9cu, 0x000700f5u, 0x00000013u, 0x00009bb5u, 0x00004eb7u, 0x00004e9du, 0x00004ed3u, 0x00004e9eu, 0x0003003eu, 0x00004e63u, 0x00009bb5u, 0x0003003eu, 0x0000466du, 0x00009bb5u, 0x00050050u, 0x000000efu, 0x00004856u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004857u, 0x00004856u, 0x0003003eu, 0x00006d1eu, 0x00004632u, 0x0003003eu, 0x00006d1fu, 0x00004634u, 0x0003003eu, 0x00004677u, 0x000021b2u, 0x0003003eu, 0x00004678u, 0x00004857u, 0x0003003eu, 0x00004679u, 0x0000483cu, 0x0003003eu, 0x0000467au, 0x00000386u, 0x0003003eu, 0x0000467bu, 0x00004804u, 0x0003003eu, 0x0000467cu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004ee1u, 0x00004678u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004ee2u, 0x00004ee1u, 0x00050084u, 0x00000006u, 0x00004ee3u, 0x00004634u, 0x00004ee2u, 0x00050080u, 0x00000006u, 0x00004ee4u, 0x00004632u, 0x00004ee3u, 0x0003003eu, 0x00004ed4u, 0x00004ee4u, 0x00050041u, 0x00000007u, 0x00004ee5u, 0x00004678u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004ee6u, 0x00004ee5u, 0x000500c2u, 0x00000006u, 0x00004ee7u, 0x00004ee6u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004ee9u, 0x00004ee4u, 0x00004ee7u, 0x0003003eu, 0x00004ed4u, 0x00004ee9u, 0x000500c7u, 0x00000006u, 0x00004eebu, 0x00004ee9u, 0x00000f1du, 0x0003003eu, 0x00004ed4u, 0x00004eebu, 0x0004003du, 0x00000006u, 0x00004eedu, 0x00004ee5u, 0x000400c8u, 0x00000006u, 0x00004eeeu, 0x00004eedu, 0x000500c7u, 0x00000006u, 0x00004eefu, 0x00004eeeu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004ef0u, 0x00004eefu, 0x00000704u, 0x0003003eu, 0x00004ed5u, 0x00004ef0u, 0x0003003eu, 0x00004ed6u, 0x00004eebu, 0x0004003du, 0x00000006u, 0x00004ef3u, 0x00004ee1u, 0x000500c7u, 0x00000006u, 0x00004ef4u, 0x00004ef3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004ef5u, 0x00004ef4u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004ef7u, 0x00004eebu, 0x00004ef5u, 0x0003003eu, 0x00004ed6u, 0x00004ef7u, 0x000500c6u, 0x00000006u, 0x00004ef9u, 0x00004ef7u, 0x00000464u, 0x0003003eu, 0x00004ed6u, 0x00004ef9u, 0x00080041u, 0x00000671u, 0x00004efcu, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004ef9u, 0x0004003du, 0x0000000fu, 0x00004efdu, 0x00004efcu, 0x00040071u, 0x00000006u, 0x00004efeu, 0x00004efdu, 0x0003003eu, 0x00004ed7u, 0x00004efeu, 0x000500c2u, 0x00000006u, 0x00004f01u, 0x00004efeu, 0x00004ef0u, 0x000500c7u, 0x00000006u, 0x00004f02u, 0x00004f01u, 0x00000e88u, 0x0003003eu, 0x00004ed7u, 0x00004f02u, 0x000500c5u, 0x00000006u, 0x00004f06u, 0x00004f02u, 0x00004e12u, 0x0003003eu, 0x00004ed7u, 0x00004f06u, 0x000500c4u, 0x00000006u, 0x00004f08u, 0x00004f06u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004f0au, 0x00004f08u, 0x00000386u, 0x0003003eu, 0x00004ed8u, 0x00004f0au, 0x000500c6u, 0x00000006u, 0x00004f0du, 0x00004f0au, 0x00004804u, 0x0003003eu, 0x00004ed8u, 0x00004f0du, 0x000500c5u, 0x00000006u, 0x00004f10u, 0x00000f4eu, 0x00004f0du, 0x00080041u, 0x00000692u, 0x00004f11u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004f10u, 0x0004003du, 0x00000011u, 0x00004f12u, 0x00004f11u, 0x00040071u, 0x00000006u, 0x00004f13u, 0x00004f12u, 0x0003003eu, 0x00004ed7u, 0x00004f13u, 0x000300f7u, 0x00004f15u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004f16u, 0x00004f17u, 0x000200f8u, 0x00004f17u, 0x0003003eu, 0x00004edbu, 0x00004f13u, 0x00060050u, 0x0000030cu, 0x00004f35u, 0x00004f13u, 0x00004f13u, 0x00004f13u, 0x000500c2u, 0x0000030cu, 0x00004f36u, 0x00004f35u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004f38u, 0x00004f36u, 0x0000f37cu, 0x0003003eu, 0x00004f31u, 0x00004f38u, 0x000500c4u, 0x0000030cu, 0x00004f3bu, 0x00004f38u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004f3eu, 0x00004f38u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004f3fu, 0x00004f3bu, 0x00004f3eu, 0x0003003eu, 0x00004f31u, 0x00004f3fu, 0x000500c7u, 0x00000006u, 0x00004f41u, 0x00004f13u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004f42u, 0x00004f41u, 0x000006c3u, 0x0003003eu, 0x00004f32u, 0x00004f42u, 0x00040071u, 0x000004bau, 0x00004f44u, 0x00004f3fu, 0x0004007cu, 0x000004b6u, 0x00004f45u, 0x00004f44u, 0x00040071u, 0x00000011u, 0x00004f47u, 0x00004f42u, 0x0004007cu, 0x00000012u, 0x00004f48u, 0x00004f47u, 0x00050051u, 0x00000012u, 0x00004f49u, 0x00004f45u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004f4au, 0x00004f45u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004f4bu, 0x00004f45u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004f4cu, 0x00004f49u, 0x00004f4au, 0x00004f4bu, 0x00004f48u, 0x0003003eu, 0x00004f33u, 0x00004f4cu, 0x0003003eu, 0x00004ed9u, 0x00004f4cu, 0x000200f9u, 0x00004f15u, 0x000200f8u, 0x00004f16u, 0x0003003eu, 0x00004edau, 0x00004f13u, 0x000500c2u, 0x00000006u, 0x00004f21u, 0x00004f13u, 0x0000025du, 0x0003003eu, 0x00004f1du, 0x00004f21u, 0x000500c7u, 0x00000006u, 0x00004f23u, 0x00004f13u, 0x000006c3u, 0x0003003eu, 0x00004f1eu, 0x00004f23u, 0x00040071u, 0x00000011u, 0x00004f25u, 0x00004f21u, 0x0004007cu, 0x00000012u, 0x00004f26u, 0x00004f25u, 0x00040071u, 0x00000011u, 0x00004f2eu, 0x00004f23u, 0x0004007cu, 0x00000012u, 0x00004f2fu, 0x00004f2eu, 0x00070050u, 0x00000013u, 0x00004f30u, 0x00004f26u, 0x00004f26u, 0x00004f26u, 0x00004f2fu, 0x0003003eu, 0x00004f1fu, 0x00004f30u, 0x0003003eu, 0x00004ed9u, 0x00004f30u, 0x000200f9u, 0x00004f15u, 0x000200f8u, 0x00004f15u, 0x000700f5u, 0x00000013u, 0x00009bcbu, 0x00004f30u, 0x00004f16u, 0x00004f4cu, 0x00004f17u, 0x0003003eu, 0x00004edcu, 0x00009bcbu, 0x0003003eu, 0x00004675u, 0x00009bcbu, 0x000200f9u, 0x00004846u, 0x000200f8u, 0x00004846u, 0x000700f5u, 0x00000013u, 0x00009fb2u, 0x00009f14u, 0x00004e23u, 0x00009bcbu, 0x00004f15u, 0x000700f5u, 0x00000013u, 0x00009de4u, 0x00009d45u, 0x00004e23u, 0x00009bb5u, 0x00004f15u, 0x000300f7u, 0x00004861u, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004862u, 0x00004861u, 0x000200f8u, 0x00004862u, 0x00050050u, 0x000000efu, 0x00004865u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004866u, 0x00004865u, 0x0003003eu, 0x00006d22u, 0x00004632u, 0x0003003eu, 0x00006d23u, 0x00004634u, 0x0003003eu, 0x0000467fu, 0x000021b2u, 0x0003003eu, 0x00004680u, 0x00004866u, 0x0003003eu, 0x00004681u, 0x0000483cu, 0x0003003eu, 0x00004682u, 0x00000464u, 0x0003003eu, 0x00004683u, 0x00004804u, 0x0003003eu, 0x00004684u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004f5au, 0x00004680u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004f5bu, 0x00004f5au, 0x00050084u, 0x00000006u, 0x00004f5cu, 0x00004634u, 0x00004f5bu, 0x00050080u, 0x00000006u, 0x00004f5du, 0x00004632u, 0x00004f5cu, 0x0003003eu, 0x00004f4du, 0x00004f5du, 0x00050041u, 0x00000007u, 0x00004f5eu, 0x00004680u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004f5fu, 0x00004f5eu, 0x000500c2u, 0x00000006u, 0x00004f60u, 0x00004f5fu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004f62u, 0x00004f5du, 0x00004f60u, 0x0003003eu, 0x00004f4du, 0x00004f62u, 0x000500c7u, 0x00000006u, 0x00004f64u, 0x00004f62u, 0x00000f1du, 0x0003003eu, 0x00004f4du, 0x00004f64u, 0x0004003du, 0x00000006u, 0x00004f66u, 0x00004f5eu, 0x000400c8u, 0x00000006u, 0x00004f67u, 0x00004f66u, 0x000500c7u, 0x00000006u, 0x00004f68u, 0x00004f67u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004f69u, 0x00004f68u, 0x00000704u, 0x0003003eu, 0x00004f4eu, 0x00004f69u, 0x0003003eu, 0x00004f4fu, 0x00004f64u, 0x0004003du, 0x00000006u, 0x00004f6cu, 0x00004f5au, 0x000500c7u, 0x00000006u, 0x00004f6du, 0x00004f6cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004f6eu, 0x00004f6du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004f70u, 0x00004f64u, 0x00004f6eu, 0x0003003eu, 0x00004f4fu, 0x00004f70u, 0x000500c6u, 0x00000006u, 0x00004f72u, 0x00004f70u, 0x00000464u, 0x0003003eu, 0x00004f4fu, 0x00004f72u, 0x00080041u, 0x00000671u, 0x00004f75u, 0x00000e7fu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004f72u, 0x0004003du, 0x0000000fu, 0x00004f76u, 0x00004f75u, 0x00040071u, 0x00000006u, 0x00004f77u, 0x00004f76u, 0x0003003eu, 0x00004f50u, 0x00004f77u, 0x000500c2u, 0x00000006u, 0x00004f7au, 0x00004f77u, 0x00004f69u, 0x000500c7u, 0x00000006u, 0x00004f7bu, 0x00004f7au, 0x00000e88u, 0x0003003eu, 0x00004f50u, 0x00004f7bu, 0x000500c5u, 0x00000006u, 0x00004f7fu, 0x00004f7bu, 0x00004e12u, 0x0003003eu, 0x00004f50u, 0x00004f7fu, 0x000500c4u, 0x00000006u, 0x00004f81u, 0x00004f7fu, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004f83u, 0x00004f81u, 0x00000464u, 0x0003003eu, 0x00004f51u, 0x00004f83u, 0x000500c6u, 0x00000006u, 0x00004f86u, 0x00004f83u, 0x00004804u, 0x0003003eu, 0x00004f51u, 0x00004f86u, 0x000500c5u, 0x00000006u, 0x00004f89u, 0x00000f4eu, 0x00004f86u, 0x00080041u, 0x00000692u, 0x00004f8au, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004f89u, 0x0004003du, 0x00000011u, 0x00004f8bu, 0x00004f8au, 0x00040071u, 0x00000006u, 0x00004f8cu, 0x00004f8bu, 0x0003003eu, 0x00004f50u, 0x00004f8cu, 0x000300f7u, 0x00004f8eu, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004f8fu, 0x00004f90u, 0x000200f8u, 0x00004f90u, 0x0003003eu, 0x00004f54u, 0x00004f8cu, 0x00060050u, 0x0000030cu, 0x00004faeu, 0x00004f8cu, 0x00004f8cu, 0x00004f8cu, 0x000500c2u, 0x0000030cu, 0x00004fafu, 0x00004faeu, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004fb1u, 0x00004fafu, 0x0000f37cu, 0x0003003eu, 0x00004faau, 0x00004fb1u, 0x000500c4u, 0x0000030cu, 0x00004fb4u, 0x00004fb1u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004fb7u, 0x00004fb1u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004fb8u, 0x00004fb4u, 0x00004fb7u, 0x0003003eu, 0x00004faau, 0x00004fb8u, 0x000500c7u, 0x00000006u, 0x00004fbau, 0x00004f8cu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004fbbu, 0x00004fbau, 0x000006c3u, 0x0003003eu, 0x00004fabu, 0x00004fbbu, 0x00040071u, 0x000004bau, 0x00004fbdu, 0x00004fb8u, 0x0004007cu, 0x000004b6u, 0x00004fbeu, 0x00004fbdu, 0x00040071u, 0x00000011u, 0x00004fc0u, 0x00004fbbu, 0x0004007cu, 0x00000012u, 0x00004fc1u, 0x00004fc0u, 0x00050051u, 0x00000012u, 0x00004fc2u, 0x00004fbeu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004fc3u, 0x00004fbeu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004fc4u, 0x00004fbeu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004fc5u, 0x00004fc2u, 0x00004fc3u, 0x00004fc4u, 0x00004fc1u, 0x0003003eu, 0x00004facu, 0x00004fc5u, 0x0003003eu, 0x00004f52u, 0x00004fc5u, 0x000200f9u, 0x00004f8eu, 0x000200f8u, 0x00004f8fu, 0x0003003eu, 0x00004f53u, 0x00004f8cu, 0x000500c2u, 0x00000006u, 0x00004f9au, 0x00004f8cu, 0x0000025du, 0x0003003eu, 0x00004f96u, 0x00004f9au, 0x000500c7u, 0x00000006u, 0x00004f9cu, 0x00004f8cu, 0x000006c3u, 0x0003003eu, 0x00004f97u, 0x00004f9cu, 0x00040071u, 0x00000011u, 0x00004f9eu, 0x00004f9au, 0x0004007cu, 0x00000012u, 0x00004f9fu, 0x00004f9eu, 0x00040071u, 0x00000011u, 0x00004fa7u, 0x00004f9cu, 0x0004007cu, 0x00000012u, 0x00004fa8u, 0x00004fa7u, 0x00070050u, 0x00000013u, 0x00004fa9u, 0x00004f9fu, 0x00004f9fu, 0x00004f9fu, 0x00004fa8u, 0x0003003eu, 0x00004f98u, 0x00004fa9u, 0x0003003eu, 0x00004f52u, 0x00004fa9u, 0x000200f9u, 0x00004f8eu, 0x000200f8u, 0x00004f8eu, 0x000700f5u, 0x00000013u, 0x00009bf7u, 0x00004fa9u, 0x00004f8fu, 0x00004fc5u, 0x00004f90u, 0x0003003eu, 0x00004f55u, 0x00009bf7u, 0x0003003eu, 0x0000467du, 0x00009bf7u, 0x000200f9u, 0x00004861u, 0x000200f8u, 0x00004861u, 0x000700f5u, 0x00000013u, 0x0000a096u, 0x00009ff8u, 0x00004846u, 0x00009bf7u, 0x00004f8eu, 0x000200f9u, 0x00004809u, 0x000200f8u, 0x0000480au, 0x0004007cu, 0x000000b0u, 0x0000480eu, 0x000099b9u, 0x000600a9u, 0x00000008u, 0x00004810u, 0x000047ebu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00004811u, 0x00004810u, 0x0003003eu, 0x00006d36u, 0x00004632u, 0x0003003eu, 0x00006d37u, 0x00004634u, 0x0003003eu, 0x0000469eu, 0x000021b2u, 0x0003003eu, 0x0000469fu, 0x0000480eu, 0x0003003eu, 0x000046a0u, 0x00004811u, 0x0003003eu, 0x000046a1u, 0x00004804u, 0x0003003eu, 0x000046a2u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004c3au, 0x0000469fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004c3bu, 0x00004c3au, 0x00050084u, 0x00000006u, 0x00004c3cu, 0x00004634u, 0x00004c3bu, 0x00050080u, 0x00000006u, 0x00004c3du, 0x00004632u, 0x00004c3cu, 0x0003003eu, 0x00004c2eu, 0x00004c3du, 0x00050041u, 0x00000007u, 0x00004c3eu, 0x0000469fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004c3fu, 0x00004c3eu, 0x00050084u, 0x00000006u, 0x00004c40u, 0x00004c3fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004c42u, 0x00004c3du, 0x00004c40u, 0x0003003eu, 0x00004c2eu, 0x00004c42u, 0x000500c7u, 0x00000006u, 0x00004c44u, 0x00004c42u, 0x00000f1du, 0x0003003eu, 0x00004c2eu, 0x00004c44u, 0x000500c2u, 0x00000006u, 0x00004c46u, 0x00004c44u, 0x0000022au, 0x0003003eu, 0x00004c2fu, 0x00004c46u, 0x0004003du, 0x00000006u, 0x00004c48u, 0x00004c3au, 0x000500c7u, 0x00000006u, 0x00004c49u, 0x00004c48u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004c4au, 0x00004c49u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004c4cu, 0x00004c46u, 0x00004c4au, 0x0003003eu, 0x00004c2fu, 0x00004c4cu, 0x000500c6u, 0x00000006u, 0x00004c4eu, 0x00004c4cu, 0x0000045cu, 0x0003003eu, 0x00004c2fu, 0x00004c4eu, 0x00080041u, 0x00000692u, 0x00004c51u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004c4eu, 0x0004003du, 0x00000011u, 0x00004c52u, 0x00004c51u, 0x00040071u, 0x00000006u, 0x00004c53u, 0x00004c52u, 0x0003003eu, 0x00004c30u, 0x00004c53u, 0x000500c2u, 0x00000006u, 0x00004c55u, 0x00004c53u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004c56u, 0x00004c55u, 0x00000feeu, 0x00050080u, 0x00000006u, 0x00004c58u, 0x00004c56u, 0x00004811u, 0x0003003eu, 0x00004c31u, 0x00004c58u, 0x000500c6u, 0x00000006u, 0x00004c5bu, 0x00004c58u, 0x00004804u, 0x0003003eu, 0x00004c31u, 0x00004c5bu, 0x000500c5u, 0x00000006u, 0x00004c5eu, 0x00000f4eu, 0x00004c5bu, 0x00080041u, 0x00000692u, 0x00004c5fu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004c5eu, 0x0004003du, 0x00000011u, 0x00004c60u, 0x00004c5fu, 0x00040071u, 0x00000006u, 0x00004c61u, 0x00004c60u, 0x0003003eu, 0x00004c30u, 0x00004c61u, 0x000300f7u, 0x00004c63u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004c64u, 0x00004c65u, 0x000200f8u, 0x00004c65u, 0x0003003eu, 0x00004c34u, 0x00004c61u, 0x00060050u, 0x0000030cu, 0x00004c83u, 0x00004c61u, 0x00004c61u, 0x00004c61u, 0x000500c2u, 0x0000030cu, 0x00004c84u, 0x00004c83u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004c86u, 0x00004c84u, 0x0000f37cu, 0x0003003eu, 0x00004c7fu, 0x00004c86u, 0x000500c4u, 0x0000030cu, 0x00004c89u, 0x00004c86u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004c8cu, 0x00004c86u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004c8du, 0x00004c89u, 0x00004c8cu, 0x0003003eu, 0x00004c7fu, 0x00004c8du, 0x000500c7u, 0x00000006u, 0x00004c8fu, 0x00004c61u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004c90u, 0x00004c8fu, 0x000006c3u, 0x0003003eu, 0x00004c80u, 0x00004c90u, 0x00040071u, 0x000004bau, 0x00004c92u, 0x00004c8du, 0x0004007cu, 0x000004b6u, 0x00004c93u, 0x00004c92u, 0x00040071u, 0x00000011u, 0x00004c95u, 0x00004c90u, 0x0004007cu, 0x00000012u, 0x00004c96u, 0x00004c95u, 0x00050051u, 0x00000012u, 0x00004c97u, 0x00004c93u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004c98u, 0x00004c93u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004c99u, 0x00004c93u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004c9au, 0x00004c97u, 0x00004c98u, 0x00004c99u, 0x00004c96u, 0x0003003eu, 0x00004c81u, 0x00004c9au, 0x0003003eu, 0x00004c32u, 0x00004c9au, 0x000200f9u, 0x00004c63u, 0x000200f8u, 0x00004c64u, 0x0003003eu, 0x00004c33u, 0x00004c61u, 0x000500c2u, 0x00000006u, 0x00004c6fu, 0x00004c61u, 0x0000025du, 0x0003003eu, 0x00004c6bu, 0x00004c6fu, 0x000500c7u, 0x00000006u, 0x00004c71u, 0x00004c61u, 0x000006c3u, 0x0003003eu, 0x00004c6cu, 0x00004c71u, 0x00040071u, 0x00000011u, 0x00004c73u, 0x00004c6fu, 0x0004007cu, 0x00000012u, 0x00004c74u, 0x00004c73u, 0x00040071u, 0x00000011u, 0x00004c7cu, 0x00004c71u, 0x0004007cu, 0x00000012u, 0x00004c7du, 0x00004c7cu, 0x00070050u, 0x00000013u, 0x00004c7eu, 0x00004c74u, 0x00004c74u, 0x00004c74u, 0x00004c7du, 0x0003003eu, 0x00004c6du, 0x00004c7eu, 0x0003003eu, 0x00004c32u, 0x00004c7eu, 0x000200f9u, 0x00004c63u, 0x000200f8u, 0x00004c63u, 0x000700f5u, 0x00000013u, 0x00009bf8u, 0x00004c7eu, 0x00004c64u, 0x00004c9au, 0x00004c65u, 0x0003003eu, 0x00004c35u, 0x00009bf8u, 0x0003003eu, 0x00004665u, 0x00009bf8u, 0x000300f7u, 0x00004818u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004819u, 0x00004818u, 0x000200f8u, 0x00004819u, 0x00050050u, 0x000000efu, 0x0000481cu, 0x0000996eu, 0x000047d6u, 0x0004007cu, 0x000000b0u, 0x0000481du, 0x0000481cu, 0x0003003eu, 0x00006d3au, 0x00004632u, 0x0003003eu, 0x00006d3bu, 0x00004634u, 0x0003003eu, 0x000046a4u, 0x000021b2u, 0x0003003eu, 0x000046a5u, 0x0000481du, 0x0003003eu, 0x000046a6u, 0x0000045cu, 0x0003003eu, 0x000046a7u, 0x00004804u, 0x0003003eu, 0x000046a8u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004ca7u, 0x000046a5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004ca8u, 0x00004ca7u, 0x00050084u, 0x00000006u, 0x00004ca9u, 0x00004634u, 0x00004ca8u, 0x00050080u, 0x00000006u, 0x00004caau, 0x00004632u, 0x00004ca9u, 0x0003003eu, 0x00004c9bu, 0x00004caau, 0x00050041u, 0x00000007u, 0x00004cabu, 0x000046a5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004cacu, 0x00004cabu, 0x00050084u, 0x00000006u, 0x00004cadu, 0x00004cacu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004cafu, 0x00004caau, 0x00004cadu, 0x0003003eu, 0x00004c9bu, 0x00004cafu, 0x000500c7u, 0x00000006u, 0x00004cb1u, 0x00004cafu, 0x00000f1du, 0x0003003eu, 0x00004c9bu, 0x00004cb1u, 0x000500c2u, 0x00000006u, 0x00004cb3u, 0x00004cb1u, 0x0000022au, 0x0003003eu, 0x00004c9cu, 0x00004cb3u, 0x0004003du, 0x00000006u, 0x00004cb5u, 0x00004ca7u, 0x000500c7u, 0x00000006u, 0x00004cb6u, 0x00004cb5u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004cb7u, 0x00004cb6u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004cb9u, 0x00004cb3u, 0x00004cb7u, 0x0003003eu, 0x00004c9cu, 0x00004cb9u, 0x000500c6u, 0x00000006u, 0x00004cbbu, 0x00004cb9u, 0x0000045cu, 0x0003003eu, 0x00004c9cu, 0x00004cbbu, 0x00080041u, 0x00000692u, 0x00004cbeu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004cbbu, 0x0004003du, 0x00000011u, 0x00004cbfu, 0x00004cbeu, 0x00040071u, 0x00000006u, 0x00004cc0u, 0x00004cbfu, 0x0003003eu, 0x00004c9du, 0x00004cc0u, 0x000500c2u, 0x00000006u, 0x00004cc2u, 0x00004cc0u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004cc3u, 0x00004cc2u, 0x00000feeu, 0x00050080u, 0x00000006u, 0x00004cc5u, 0x00004cc3u, 0x0000045cu, 0x0003003eu, 0x00004c9eu, 0x00004cc5u, 0x000500c6u, 0x00000006u, 0x00004cc8u, 0x00004cc5u, 0x00004804u, 0x0003003eu, 0x00004c9eu, 0x00004cc8u, 0x000500c5u, 0x00000006u, 0x00004ccbu, 0x00000f4eu, 0x00004cc8u, 0x00080041u, 0x00000692u, 0x00004cccu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004ccbu, 0x0004003du, 0x00000011u, 0x00004ccdu, 0x00004cccu, 0x00040071u, 0x00000006u, 0x00004cceu, 0x00004ccdu, 0x0003003eu, 0x00004c9du, 0x00004cceu, 0x000300f7u, 0x00004cd0u, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004cd1u, 0x00004cd2u, 0x000200f8u, 0x00004cd2u, 0x0003003eu, 0x00004ca1u, 0x00004cceu, 0x00060050u, 0x0000030cu, 0x00004cf0u, 0x00004cceu, 0x00004cceu, 0x00004cceu, 0x000500c2u, 0x0000030cu, 0x00004cf1u, 0x00004cf0u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004cf3u, 0x00004cf1u, 0x0000f37cu, 0x0003003eu, 0x00004cecu, 0x00004cf3u, 0x000500c4u, 0x0000030cu, 0x00004cf6u, 0x00004cf3u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004cf9u, 0x00004cf3u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004cfau, 0x00004cf6u, 0x00004cf9u, 0x0003003eu, 0x00004cecu, 0x00004cfau, 0x000500c7u, 0x00000006u, 0x00004cfcu, 0x00004cceu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004cfdu, 0x00004cfcu, 0x000006c3u, 0x0003003eu, 0x00004cedu, 0x00004cfdu, 0x00040071u, 0x000004bau, 0x00004cffu, 0x00004cfau, 0x0004007cu, 0x000004b6u, 0x00004d00u, 0x00004cffu, 0x00040071u, 0x00000011u, 0x00004d02u, 0x00004cfdu, 0x0004007cu, 0x00000012u, 0x00004d03u, 0x00004d02u, 0x00050051u, 0x00000012u, 0x00004d04u, 0x00004d00u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004d05u, 0x00004d00u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004d06u, 0x00004d00u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004d07u, 0x00004d04u, 0x00004d05u, 0x00004d06u, 0x00004d03u, 0x0003003eu, 0x00004ceeu, 0x00004d07u, 0x0003003eu, 0x00004c9fu, 0x00004d07u, 0x000200f9u, 0x00004cd0u, 0x000200f8u, 0x00004cd1u, 0x0003003eu, 0x00004ca0u, 0x00004cceu, 0x000500c2u, 0x00000006u, 0x00004cdcu, 0x00004cceu, 0x0000025du, 0x0003003eu, 0x00004cd8u, 0x00004cdcu, 0x000500c7u, 0x00000006u, 0x00004cdeu, 0x00004cceu, 0x000006c3u, 0x0003003eu, 0x00004cd9u, 0x00004cdeu, 0x00040071u, 0x00000011u, 0x00004ce0u, 0x00004cdcu, 0x0004007cu, 0x00000012u, 0x00004ce1u, 0x00004ce0u, 0x00040071u, 0x00000011u, 0x00004ce9u, 0x00004cdeu, 0x0004007cu, 0x00000012u, 0x00004ceau, 0x00004ce9u, 0x00070050u, 0x00000013u, 0x00004cebu, 0x00004ce1u, 0x00004ce1u, 0x00004ce1u, 0x00004ceau, 0x0003003eu, 0x00004cdau, 0x00004cebu, 0x0003003eu, 0x00004c9fu, 0x00004cebu, 0x000200f9u, 0x00004cd0u, 0x000200f8u, 0x00004cd0u, 0x000700f5u, 0x00000013u, 0x00009c0du, 0x00004cebu, 0x00004cd1u, 0x00004d07u, 0x00004cd2u, 0x0003003eu, 0x00004ca2u, 0x00009c0du, 0x0003003eu, 0x0000466du, 0x00009c0du, 0x00050050u, 0x000000efu, 0x00004825u, 0x00009930u, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004826u, 0x00004825u, 0x0003003eu, 0x00006d3eu, 0x00004632u, 0x0003003eu, 0x00006d3fu, 0x00004634u, 0x0003003eu, 0x000046aau, 0x000021b2u, 0x0003003eu, 0x000046abu, 0x00004826u, 0x0003003eu, 0x000046acu, 0x00000386u, 0x0003003eu, 0x000046adu, 0x00004804u, 0x0003003eu, 0x000046aeu, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004d14u, 0x000046abu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004d15u, 0x00004d14u, 0x00050084u, 0x00000006u, 0x00004d16u, 0x00004634u, 0x00004d15u, 0x00050080u, 0x00000006u, 0x00004d17u, 0x00004632u, 0x00004d16u, 0x0003003eu, 0x00004d08u, 0x00004d17u, 0x00050041u, 0x00000007u, 0x00004d18u, 0x000046abu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004d19u, 0x00004d18u, 0x00050084u, 0x00000006u, 0x00004d1au, 0x00004d19u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004d1cu, 0x00004d17u, 0x00004d1au, 0x0003003eu, 0x00004d08u, 0x00004d1cu, 0x000500c7u, 0x00000006u, 0x00004d1eu, 0x00004d1cu, 0x00000f1du, 0x0003003eu, 0x00004d08u, 0x00004d1eu, 0x000500c2u, 0x00000006u, 0x00004d20u, 0x00004d1eu, 0x0000022au, 0x0003003eu, 0x00004d09u, 0x00004d20u, 0x0004003du, 0x00000006u, 0x00004d22u, 0x00004d14u, 0x000500c7u, 0x00000006u, 0x00004d23u, 0x00004d22u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004d24u, 0x00004d23u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004d26u, 0x00004d20u, 0x00004d24u, 0x0003003eu, 0x00004d09u, 0x00004d26u, 0x000500c6u, 0x00000006u, 0x00004d28u, 0x00004d26u, 0x0000045cu, 0x0003003eu, 0x00004d09u, 0x00004d28u, 0x00080041u, 0x00000692u, 0x00004d2bu, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004d28u, 0x0004003du, 0x00000011u, 0x00004d2cu, 0x00004d2bu, 0x00040071u, 0x00000006u, 0x00004d2du, 0x00004d2cu, 0x0003003eu, 0x00004d0au, 0x00004d2du, 0x000500c2u, 0x00000006u, 0x00004d2fu, 0x00004d2du, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004d30u, 0x00004d2fu, 0x00000feeu, 0x00050080u, 0x00000006u, 0x00004d32u, 0x00004d30u, 0x00000386u, 0x0003003eu, 0x00004d0bu, 0x00004d32u, 0x000500c6u, 0x00000006u, 0x00004d35u, 0x00004d32u, 0x00004804u, 0x0003003eu, 0x00004d0bu, 0x00004d35u, 0x000500c5u, 0x00000006u, 0x00004d38u, 0x00000f4eu, 0x00004d35u, 0x00080041u, 0x00000692u, 0x00004d39u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004d38u, 0x0004003du, 0x00000011u, 0x00004d3au, 0x00004d39u, 0x00040071u, 0x00000006u, 0x00004d3bu, 0x00004d3au, 0x0003003eu, 0x00004d0au, 0x00004d3bu, 0x000300f7u, 0x00004d3du, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004d3eu, 0x00004d3fu, 0x000200f8u, 0x00004d3fu, 0x0003003eu, 0x00004d0eu, 0x00004d3bu, 0x00060050u, 0x0000030cu, 0x00004d5du, 0x00004d3bu, 0x00004d3bu, 0x00004d3bu, 0x000500c2u, 0x0000030cu, 0x00004d5eu, 0x00004d5du, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004d60u, 0x00004d5eu, 0x0000f37cu, 0x0003003eu, 0x00004d59u, 0x00004d60u, 0x000500c4u, 0x0000030cu, 0x00004d63u, 0x00004d60u, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004d66u, 0x00004d60u, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004d67u, 0x00004d63u, 0x00004d66u, 0x0003003eu, 0x00004d59u, 0x00004d67u, 0x000500c7u, 0x00000006u, 0x00004d69u, 0x00004d3bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004d6au, 0x00004d69u, 0x000006c3u, 0x0003003eu, 0x00004d5au, 0x00004d6au, 0x00040071u, 0x000004bau, 0x00004d6cu, 0x00004d67u, 0x0004007cu, 0x000004b6u, 0x00004d6du, 0x00004d6cu, 0x00040071u, 0x00000011u, 0x00004d6fu, 0x00004d6au, 0x0004007cu, 0x00000012u, 0x00004d70u, 0x00004d6fu, 0x00050051u, 0x00000012u, 0x00004d71u, 0x00004d6du, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004d72u, 0x00004d6du, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004d73u, 0x00004d6du, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004d74u, 0x00004d71u, 0x00004d72u, 0x00004d73u, 0x00004d70u, 0x0003003eu, 0x00004d5bu, 0x00004d74u, 0x0003003eu, 0x00004d0cu, 0x00004d74u, 0x000200f9u, 0x00004d3du, 0x000200f8u, 0x00004d3eu, 0x0003003eu, 0x00004d0du, 0x00004d3bu, 0x000500c2u, 0x00000006u, 0x00004d49u, 0x00004d3bu, 0x0000025du, 0x0003003eu, 0x00004d45u, 0x00004d49u, 0x000500c7u, 0x00000006u, 0x00004d4bu, 0x00004d3bu, 0x000006c3u, 0x0003003eu, 0x00004d46u, 0x00004d4bu, 0x00040071u, 0x00000011u, 0x00004d4du, 0x00004d49u, 0x0004007cu, 0x00000012u, 0x00004d4eu, 0x00004d4du, 0x00040071u, 0x00000011u, 0x00004d56u, 0x00004d4bu, 0x0004007cu, 0x00000012u, 0x00004d57u, 0x00004d56u, 0x00070050u, 0x00000013u, 0x00004d58u, 0x00004d4eu, 0x00004d4eu, 0x00004d4eu, 0x00004d57u, 0x0003003eu, 0x00004d47u, 0x00004d58u, 0x0003003eu, 0x00004d0cu, 0x00004d58u, 0x000200f9u, 0x00004d3du, 0x000200f8u, 0x00004d3du, 0x000700f5u, 0x00000013u, 0x00009c23u, 0x00004d58u, 0x00004d3eu, 0x00004d74u, 0x00004d3fu, 0x0003003eu, 0x00004d0fu, 0x00009c23u, 0x0003003eu, 0x00004675u, 0x00009c23u, 0x000200f9u, 0x00004818u, 0x000200f8u, 0x00004818u, 0x000700f5u, 0x00000013u, 0x00009fadu, 0x00009f14u, 0x00004c63u, 0x00009c23u, 0x00004d3du, 0x000700f5u, 0x00000013u, 0x00009ddeu, 0x00009d45u, 0x00004c63u, 0x00009c0du, 0x00004d3du, 0x000300f7u, 0x0000482du, 0x00000000u, 0x000400fau, 0x000047e1u, 0x0000482eu, 0x0000482du, 0x000200f8u, 0x0000482eu, 0x00050050u, 0x000000efu, 0x00004831u, 0x0000996eu, 0x000047d8u, 0x0004007cu, 0x000000b0u, 0x00004832u, 0x00004831u, 0x0003003eu, 0x00006d42u, 0x00004632u, 0x0003003eu, 0x00006d43u, 0x00004634u, 0x0003003eu, 0x000046b0u, 0x000021b2u, 0x0003003eu, 0x000046b1u, 0x00004832u, 0x0003003eu, 0x000046b2u, 0x00000464u, 0x0003003eu, 0x000046b3u, 0x00004804u, 0x0003003eu, 0x000046b4u, 0x000021c6u, 0x00050041u, 0x00000007u, 0x00004d81u, 0x000046b1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004d82u, 0x00004d81u, 0x00050084u, 0x00000006u, 0x00004d83u, 0x00004634u, 0x00004d82u, 0x00050080u, 0x00000006u, 0x00004d84u, 0x00004632u, 0x00004d83u, 0x0003003eu, 0x00004d75u, 0x00004d84u, 0x00050041u, 0x00000007u, 0x00004d85u, 0x000046b1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004d86u, 0x00004d85u, 0x00050084u, 0x00000006u, 0x00004d87u, 0x00004d86u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004d89u, 0x00004d84u, 0x00004d87u, 0x0003003eu, 0x00004d75u, 0x00004d89u, 0x000500c7u, 0x00000006u, 0x00004d8bu, 0x00004d89u, 0x00000f1du, 0x0003003eu, 0x00004d75u, 0x00004d8bu, 0x000500c2u, 0x00000006u, 0x00004d8du, 0x00004d8bu, 0x0000022au, 0x0003003eu, 0x00004d76u, 0x00004d8du, 0x0004003du, 0x00000006u, 0x00004d8fu, 0x00004d81u, 0x000500c7u, 0x00000006u, 0x00004d90u, 0x00004d8fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004d91u, 0x00004d90u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004d93u, 0x00004d8du, 0x00004d91u, 0x0003003eu, 0x00004d76u, 0x00004d93u, 0x000500c6u, 0x00000006u, 0x00004d95u, 0x00004d93u, 0x0000045cu, 0x0003003eu, 0x00004d76u, 0x00004d95u, 0x00080041u, 0x00000692u, 0x00004d98u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004d95u, 0x0004003du, 0x00000011u, 0x00004d99u, 0x00004d98u, 0x00040071u, 0x00000006u, 0x00004d9au, 0x00004d99u, 0x0003003eu, 0x00004d77u, 0x00004d9au, 0x000500c2u, 0x00000006u, 0x00004d9cu, 0x00004d9au, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004d9du, 0x00004d9cu, 0x00000feeu, 0x00050080u, 0x00000006u, 0x00004d9fu, 0x00004d9du, 0x00000464u, 0x0003003eu, 0x00004d78u, 0x00004d9fu, 0x000500c6u, 0x00000006u, 0x00004da2u, 0x00004d9fu, 0x00004804u, 0x0003003eu, 0x00004d78u, 0x00004da2u, 0x000500c5u, 0x00000006u, 0x00004da5u, 0x00000f4eu, 0x00004da2u, 0x00080041u, 0x00000692u, 0x00004da6u, 0x00000f4cu, 0x00000220u, 0x000021b2u, 0x00000220u, 0x00004da5u, 0x0004003du, 0x00000011u, 0x00004da7u, 0x00004da6u, 0x00040071u, 0x00000006u, 0x00004da8u, 0x00004da7u, 0x0003003eu, 0x00004d77u, 0x00004da8u, 0x000300f7u, 0x00004daau, 0x00000000u, 0x000400fau, 0x000021c6u, 0x00004dabu, 0x00004dacu, 0x000200f8u, 0x00004dacu, 0x0003003eu, 0x00004d7bu, 0x00004da8u, 0x00060050u, 0x0000030cu, 0x00004dcau, 0x00004da8u, 0x00004da8u, 0x00004da8u, 0x000500c2u, 0x0000030cu, 0x00004dcbu, 0x00004dcau, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00004dcdu, 0x00004dcbu, 0x0000f37cu, 0x0003003eu, 0x00004dc6u, 0x00004dcdu, 0x000500c4u, 0x0000030cu, 0x00004dd0u, 0x00004dcdu, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00004dd3u, 0x00004dcdu, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00004dd4u, 0x00004dd0u, 0x00004dd3u, 0x0003003eu, 0x00004dc6u, 0x00004dd4u, 0x000500c7u, 0x00000006u, 0x00004dd6u, 0x00004da8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004dd7u, 0x00004dd6u, 0x000006c3u, 0x0003003eu, 0x00004dc7u, 0x00004dd7u, 0x00040071u, 0x000004bau, 0x00004dd9u, 0x00004dd4u, 0x0004007cu, 0x000004b6u, 0x00004ddau, 0x00004dd9u, 0x00040071u, 0x00000011u, 0x00004ddcu, 0x00004dd7u, 0x0004007cu, 0x00000012u, 0x00004dddu, 0x00004ddcu, 0x00050051u, 0x00000012u, 0x00004ddeu, 0x00004ddau, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004ddfu, 0x00004ddau, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004de0u, 0x00004ddau, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004de1u, 0x00004ddeu, 0x00004ddfu, 0x00004de0u, 0x00004dddu, 0x0003003eu, 0x00004dc8u, 0x00004de1u, 0x0003003eu, 0x00004d79u, 0x00004de1u, 0x000200f9u, 0x00004daau, 0x000200f8u, 0x00004dabu, 0x0003003eu, 0x00004d7au, 0x00004da8u, 0x000500c2u, 0x00000006u, 0x00004db6u, 0x00004da8u, 0x0000025du, 0x0003003eu, 0x00004db2u, 0x00004db6u, 0x000500c7u, 0x00000006u, 0x00004db8u, 0x00004da8u, 0x000006c3u, 0x0003003eu, 0x00004db3u, 0x00004db8u, 0x00040071u, 0x00000011u, 0x00004dbau, 0x00004db6u, 0x0004007cu, 0x00000012u, 0x00004dbbu, 0x00004dbau, 0x00040071u, 0x00000011u, 0x00004dc3u, 0x00004db8u, 0x0004007cu, 0x00000012u, 0x00004dc4u, 0x00004dc3u, 0x00070050u, 0x00000013u, 0x00004dc5u, 0x00004dbbu, 0x00004dbbu, 0x00004dbbu, 0x00004dc4u, 0x0003003eu, 0x00004db4u, 0x00004dc5u, 0x0003003eu, 0x00004d79u, 0x00004dc5u, 0x000200f9u, 0x00004daau, 0x000200f8u, 0x00004daau, 0x000700f5u, 0x00000013u, 0x00009c4fu, 0x00004dc5u, 0x00004dabu, 0x00004de1u, 0x00004dacu, 0x0003003eu, 0x00004d7cu, 0x00009c4fu, 0x0003003eu, 0x0000467du, 0x00009c4fu, 0x000200f9u, 0x0000482du, 0x000200f8u, 0x0000482du, 0x000700f5u, 0x00000013u, 0x0000a090u, 0x00009ff8u, 0x00004818u, 0x00009c4fu, 0x00004daau, 0x000200f9u, 0x00004809u, 0x000200f8u, 0x00004809u, 0x000900f5u, 0x00000013u, 0x0000a08fu, 0x0000a090u, 0x0000482du, 0x0000a096u, 0x00004861u, 0x0000a09bu, 0x0000488fu, 0x000900f5u, 0x00000013u, 0x00009fabu, 0x00009fadu, 0x0000482du, 0x00009fb2u, 0x00004861u, 0x00009fb6u, 0x0000488fu, 0x000900f5u, 0x00000013u, 0x00009ec4u, 0x00009bf8u, 0x0000482du, 0x00009ba0u, 0x00004861u, 0x00009b42u, 0x0000488fu, 0x000900f5u, 0x00000013u, 0x00009ddcu, 0x00009ddeu, 0x0000482du, 0x00009de4u, 0x00004861u, 0x00009de9u, 0x0000488fu, 0x000200f9u, 0x000047feu, 0x000200f8u, 0x000047feu, 0x000700f5u, 0x00000013u, 0x00009fdcu, 0x00009ff8u, 0x000047f8u, 0x0000a08fu, 0x00004809u, 0x000700f5u, 0x00000013u, 0x00009ef8u, 0x00009f14u, 0x000047f8u, 0x00009fabu, 0x00004809u, 0x000700f5u, 0x00000013u, 0x00009e11u, 0x00009e2du, 0x000047f8u, 0x00009ec4u, 0x00004809u, 0x000700f5u, 0x00000013u, 0x00009d29u, 0x00009d45u, 0x000047f8u, 0x00009ddcu, 0x00004809u, 0x000200f9u, 0x000047f7u, 0x000200f8u, 0x000047f7u, 0x000700f5u, 0x00000013u, 0x00009fdbu, 0x00009fdcu, 0x000047feu, 0x0000a0a0u, 0x0000489eu, 0x000700f5u, 0x00000013u, 0x00009ef7u, 0x00009ef8u, 0x000047feu, 0x00009fb9u, 0x0000489eu, 0x000700f5u, 0x00000013u, 0x00009e10u, 0x00009e11u, 0x000047feu, 0x00009ed4u, 0x0000489eu, 0x000700f5u, 0x00000013u, 0x00009d28u, 0x00009d29u, 0x000047feu, 0x00009dedu, 0x0000489eu, 0x000300f7u, 0x00004ac0u, 0x00000000u, 0x000400fau, 0x00002202u, 0x00004ac1u, 0x00004ac2u, 0x000200f8u, 0x00004ac2u, 0x000300f7u, 0x00004aeeu, 0x00000000u, 0x000400fau, 0x000047e9u, 0x00004aefu, 0x00004af0u, 0x000200f8u, 0x00004af0u, 0x000300f7u, 0x00004b1cu, 0x00000000u, 0x000400fau, 0x000047e1u, 0x00004b1du, 0x00004b1eu, 0x000200f8u, 0x00004b1eu, 0x000300f7u, 0x00004b2cu, 0x00000000u, 0x000400fau, 0x000047ebu, 0x00004b2du, 0x00004b2eu, 0x000200f8u, 0x00004b2eu, 0x0004003du, 0x000000efu, 0x00004b33u, 0x00004651u, 0x0003003eu, 0x00004786u, 0x00004b33u, 0x000200f9u, 0x00004b2cu, 0x000200f8u, 0x00004b2du, 0x0004003du, 0x000000efu, 0x00004b2fu, 0x00004651u, 0x0007004fu, 0x000000efu, 0x00004b30u, 0x00004b2fu, 0x00004b2fu, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00004b32u, 0x0000f381u, 0x00004b30u, 0x0003003eu, 0x00004786u, 0x00004b32u, 0x000200f9u, 0x00004b2cu, 0x000200f8u, 0x00004b2cu, 0x000700f5u, 0x000000efu, 0x00009d26u, 0x00004b32u, 0x00004b2du, 0x00004b33u, 0x00004b2eu, 0x00040072u, 0x000001aeu, 0x00004b35u, 0x00009d26u, 0x0003003eu, 0x00004785u, 0x00004b35u, 0x00050082u, 0x00000013u, 0x00004b38u, 0x00009d28u, 0x00009e10u, 0x00050041u, 0x000001c4u, 0x00004b39u, 0x00004785u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004b3au, 0x00004b39u, 0x00070050u, 0x00000013u, 0x00004b3bu, 0x00004b3au, 0x00004b3au, 0x00004b3au, 0x00004b3au, 0x00050084u, 0x00000013u, 0x00004b3cu, 0x00004b38u, 0x00004b3bu, 0x0003003eu, 0x00004777u, 0x00004b3cu, 0x00050082u, 0x00000013u, 0x00004b3fu, 0x00009ef7u, 0x00009e10u, 0x00050041u, 0x000001c4u, 0x00004b40u, 0x00004785u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00004b41u, 0x00004b40u, 0x00070050u, 0x00000013u, 0x00004b42u, 0x00004b41u, 0x00004b41u, 0x00004b41u, 0x00004b41u, 0x00050084u, 0x00000013u, 0x00004b43u, 0x00004b3fu, 0x00004b42u, 0x00050080u, 0x00000013u, 0x00004b45u, 0x00004b3cu, 0x00004b43u, 0x0003003eu, 0x00004777u, 0x00004b45u, 0x00050080u, 0x00000013u, 0x00004b48u, 0x00004b45u, 0x0000f384u, 0x0003003eu, 0x00004777u, 0x00004b48u, 0x000500c3u, 0x00000013u, 0x00004b4bu, 0x00004b48u, 0x0000f385u, 0x0003003eu, 0x00004777u, 0x00004b4bu, 0x00050080u, 0x00000013u, 0x00004b4eu, 0x00004b4bu, 0x00009e10u, 0x0003003eu, 0x00004777u, 0x00004b4eu, 0x000200f9u, 0x00004b1cu, 0x000200f8u, 0x00004b1du, 0x00050080u, 0x00000013u, 0x00004b21u, 0x00009e10u, 0x00009ef7u, 0x00050080u, 0x00000013u, 0x00004b23u, 0x00004b21u, 0x00009d28u, 0x00050080u, 0x00000013u, 0x00004b25u, 0x00004b23u, 0x00009fdbu, 0x00050080u, 0x00000013u, 0x00004b27u, 0x00004b25u, 0x0000f37fu, 0x000500c3u, 0x00000013u, 0x00004b29u, 0x00004b27u, 0x0000f37fu, 0x0003003eu, 0x00004777u, 0x00004b29u, 0x000200f9u, 0x00004b1cu, 0x000200f8u, 0x00004b1cu, 0x000700f5u, 0x00000013u, 0x0000a184u, 0x00004b29u, 0x00004b1du, 0x00004b4eu, 0x00004b2cu, 0x000200f9u, 0x00004aeeu, 0x000200f8u, 0x00004aefu, 0x000300f7u, 0x00004af2u, 0x00000000u, 0x000400fau, 0x000021c9u, 0x00004af3u, 0x00004af4u, 0x000200f8u, 0x00004af4u, 0x0003003eu, 0x00004777u, 0x00009e10u, 0x000200f9u, 0x00004af2u, 0x000200f8u, 0x00004af3u, 0x000500c7u, 0x00000008u, 0x00004af6u, 0x00009930u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00004af7u, 0x00004af6u, 0x00000233u, 0x0004003du, 0x00000008u, 0x00004af9u, 0x000047b7u, 0x000500c3u, 0x00000008u, 0x00004afau, 0x00004af9u, 0x0000022au, 0x000500c5u, 0x00000008u, 0x00004afbu, 0x00004af7u, 0x00004afau, 0x0003003eu, 0x00004778u, 0x00004afbu, 0x0004003du, 0x00000008u, 0x00004afeu, 0x000047b9u, 0x00050050u, 0x000000efu, 0x00004affu, 0x00004afbu, 0x00004afeu, 0x0007004fu, 0x000001aeu, 0x00004b01u, 0x00009e10u, 0x00009e10u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000477au, 0x00004b01u, 0x0007004fu, 0x000001aeu, 0x00004b03u, 0x00009d28u, 0x00009d28u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000477bu, 0x00004b03u, 0x0007004fu, 0x000001aeu, 0x00004b05u, 0x00009ef7u, 0x00009ef7u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000477cu, 0x00004b05u, 0x0007004fu, 0x000001aeu, 0x00004b07u, 0x00009fdbu, 0x00009fdbu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000477du, 0x00004b07u, 0x0003003eu, 0x0000477eu, 0x00004affu, 0x00050041u, 0x00000046u, 0x00005dacu, 0x0000477eu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00005dadu, 0x00005dacu, 0x00050041u, 0x00000046u, 0x00005daeu, 0x0000477eu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00005dafu, 0x00005daeu, 0x00050080u, 0x00000008u, 0x00005db0u, 0x00005dadu, 0x00005dafu, 0x0003003eu, 0x00005da6u, 0x00005db0u, 0x000500afu, 0x00000069u, 0x00005db2u, 0x00005db0u, 0x0000114fu, 0x00050050u, 0x0000087bu, 0x00005db5u, 0x00005db2u, 0x00005db2u, 0x000600a9u, 0x000001aeu, 0x00005db6u, 0x00005db5u, 0x00004b07u, 0x00004b01u, 0x0003003eu, 0x00005da7u, 0x00005db6u, 0x000300f7u, 0x00005db9u, 0x00000000u, 0x000400fau, 0x00005db2u, 0x00005dbau, 0x00005dbbu, 0x000200f8u, 0x00005dbbu, 0x0004003du, 0x000000efu, 0x00005dc0u, 0x0000477eu, 0x0003003eu, 0x00005da9u, 0x00005dc0u, 0x000200f9u, 0x00005db9u, 0x000200f8u, 0x00005dbau, 0x0004003du, 0x000000efu, 0x00005dbcu, 0x0000477eu, 0x0007004fu, 0x000000efu, 0x00005dbdu, 0x00005dbcu, 0x00005dbcu, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00005dbfu, 0x0000f381u, 0x00005dbdu, 0x0003003eu, 0x00005da9u, 0x00005dbfu, 0x000200f9u, 0x00005db9u, 0x000200f8u, 0x00005db9u, 0x000700f5u, 0x000000efu, 0x0000a127u, 0x00005dbfu, 0x00005dbau, 0x00005dc0u, 0x00005dbbu, 0x00040072u, 0x000001aeu, 0x00005dc2u, 0x0000a127u, 0x0003003eu, 0x00005da8u, 0x00005dc2u, 0x00050082u, 0x000001aeu, 0x00005dc5u, 0x00004b03u, 0x00005db6u, 0x00050041u, 0x000001c4u, 0x00005dc6u, 0x00005da8u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00005dc7u, 0x00005dc6u, 0x00050050u, 0x000001aeu, 0x00005dc8u, 0x00005dc7u, 0x00005dc7u, 0x00050084u, 0x000001aeu, 0x00005dc9u, 0x00005dc5u, 0x00005dc8u, 0x0003003eu, 0x00005daau, 0x00005dc9u, 0x00050082u, 0x000001aeu, 0x00005dccu, 0x00004b05u, 0x00005db6u, 0x00050041u, 0x000001c4u, 0x00005dcdu, 0x00005da8u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00005dceu, 0x00005dcdu, 0x00050050u, 0x000001aeu, 0x00005dcfu, 0x00005dceu, 0x00005dceu, 0x00050084u, 0x000001aeu, 0x00005dd0u, 0x00005dccu, 0x00005dcfu, 0x00050080u, 0x000001aeu, 0x00005dd2u, 0x00005dc9u, 0x00005dd0u, 0x0003003eu, 0x00005daau, 0x00005dd2u, 0x00050080u, 0x000001aeu, 0x00005dd5u, 0x00005dd2u, 0x0000f382u, 0x0003003eu, 0x00005daau, 0x00005dd5u, 0x000500c3u, 0x000001aeu, 0x00005dd8u, 0x00005dd5u, 0x0000f383u, 0x0003003eu, 0x00005daau, 0x00005dd8u, 0x00050080u, 0x000001aeu, 0x00005ddbu, 0x00005dd8u, 0x00005db6u, 0x0003003eu, 0x00005daau, 0x00005ddbu, 0x0003003eu, 0x00005dabu, 0x00005ddbu, 0x0003003eu, 0x00004779u, 0x00005ddbu, 0x0007004fu, 0x000001aeu, 0x00004b0au, 0x00009e10u, 0x00009e10u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004780u, 0x00004b0au, 0x0007004fu, 0x000001aeu, 0x00004b0cu, 0x00009d28u, 0x00009d28u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004781u, 0x00004b0cu, 0x0007004fu, 0x000001aeu, 0x00004b0eu, 0x00009ef7u, 0x00009ef7u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004782u, 0x00004b0eu, 0x0007004fu, 0x000001aeu, 0x00004b10u, 0x00009fdbu, 0x00009fdbu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004783u, 0x00004b10u, 0x0004003du, 0x000000efu, 0x00004b11u, 0x00004651u, 0x0003003eu, 0x00004784u, 0x00004b11u, 0x00050041u, 0x00000046u, 0x00005de3u, 0x00004784u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00005de4u, 0x00005de3u, 0x00050041u, 0x00000046u, 0x00005de5u, 0x00004784u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00005de6u, 0x00005de5u, 0x00050080u, 0x00000008u, 0x00005de7u, 0x00005de4u, 0x00005de6u, 0x0003003eu, 0x00005dddu, 0x00005de7u, 0x000500afu, 0x00000069u, 0x00005de9u, 0x00005de7u, 0x0000114fu, 0x00050050u, 0x0000087bu, 0x00005decu, 0x00005de9u, 0x00005de9u, 0x000600a9u, 0x000001aeu, 0x00005dedu, 0x00005decu, 0x00004b10u, 0x00004b0au, 0x0003003eu, 0x00005ddeu, 0x00005dedu, 0x000300f7u, 0x00005df0u, 0x00000000u, 0x000400fau, 0x00005de9u, 0x00005df1u, 0x00005df2u, 0x000200f8u, 0x00005df2u, 0x0004003du, 0x000000efu, 0x00005df7u, 0x00004784u, 0x0003003eu, 0x00005de0u, 0x00005df7u, 0x000200f9u, 0x00005df0u, 0x000200f8u, 0x00005df1u, 0x0004003du, 0x000000efu, 0x00005df3u, 0x00004784u, 0x0007004fu, 0x000000efu, 0x00005df4u, 0x00005df3u, 0x00005df3u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00005df6u, 0x0000f381u, 0x00005df4u, 0x0003003eu, 0x00005de0u, 0x00005df6u, 0x000200f9u, 0x00005df0u, 0x000200f8u, 0x00005df0u, 0x000700f5u, 0x000000efu, 0x0000a12fu, 0x00005df6u, 0x00005df1u, 0x00005df7u, 0x00005df2u, 0x00040072u, 0x000001aeu, 0x00005df9u, 0x0000a12fu, 0x0003003eu, 0x00005ddfu, 0x00005df9u, 0x00050082u, 0x000001aeu, 0x00005dfcu, 0x00004b0cu, 0x00005dedu, 0x00050041u, 0x000001c4u, 0x00005dfdu, 0x00005ddfu, 0x0000032du, 0x0004003du, 0x00000012u, 0x00005dfeu, 0x00005dfdu, 0x00050050u, 0x000001aeu, 0x00005dffu, 0x00005dfeu, 0x00005dfeu, 0x00050084u, 0x000001aeu, 0x00005e00u, 0x00005dfcu, 0x00005dffu, 0x0003003eu, 0x00005de1u, 0x00005e00u, 0x00050082u, 0x000001aeu, 0x00005e03u, 0x00004b0eu, 0x00005dedu, 0x00050041u, 0x000001c4u, 0x00005e04u, 0x00005ddfu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00005e05u, 0x00005e04u, 0x00050050u, 0x000001aeu, 0x00005e06u, 0x00005e05u, 0x00005e05u, 0x00050084u, 0x000001aeu, 0x00005e07u, 0x00005e03u, 0x00005e06u, 0x00050080u, 0x000001aeu, 0x00005e09u, 0x00005e00u, 0x00005e07u, 0x0003003eu, 0x00005de1u, 0x00005e09u, 0x00050080u, 0x000001aeu, 0x00005e0cu, 0x00005e09u, 0x0000f382u, 0x0003003eu, 0x00005de1u, 0x00005e0cu, 0x000500c3u, 0x000001aeu, 0x00005e0fu, 0x00005e0cu, 0x0000f383u, 0x0003003eu, 0x00005de1u, 0x00005e0fu, 0x00050080u, 0x000001aeu, 0x00005e12u, 0x00005e0fu, 0x00005dedu, 0x0003003eu, 0x00005de1u, 0x00005e12u, 0x0003003eu, 0x00005de2u, 0x00005e12u, 0x0003003eu, 0x0000477fu, 0x00005e12u, 0x00050051u, 0x00000012u, 0x00004b15u, 0x00005ddbu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004b16u, 0x00005ddbu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004b17u, 0x00005e12u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004b18u, 0x00005e12u, 0x00000001u, 0x00070050u, 0x00000013u, 0x00004b19u, 0x00004b15u, 0x00004b16u, 0x00004b17u, 0x00004b18u, 0x0003003eu, 0x00004777u, 0x00004b19u, 0x000200f9u, 0x00004af2u, 0x000200f8u, 0x00004af2u, 0x000700f5u, 0x00000013u, 0x0000a183u, 0x00004b19u, 0x00005df0u, 0x00009e10u, 0x00004af4u, 0x000200f9u, 0x00004aeeu, 0x000200f8u, 0x00004aeeu, 0x000700f5u, 0x00000013u, 0x0000a182u, 0x0000a183u, 0x00004af2u, 0x0000a184u, 0x00004b1cu, 0x000200f9u, 0x00004ac0u, 0x000200f8u, 0x00004ac1u, 0x00040072u, 0x00000009u, 0x00004ac4u, 0x0000986bu, 0x000600cau, 0x00000009u, 0x00004ac5u, 0x00004ac4u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00004773u, 0x00004ac5u, 0x000300f7u, 0x00004ac8u, 0x00000000u, 0x000400fau, 0x000047ebu, 0x00004ac9u, 0x00004acau, 0x000200f8u, 0x00004acau, 0x0004003du, 0x00000009u, 0x00004acdu, 0x00004773u, 0x0007004fu, 0x000000efu, 0x00004aceu, 0x00004acdu, 0x00004acdu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004775u, 0x00004aceu, 0x000200f9u, 0x00004ac8u, 0x000200f8u, 0x00004ac9u, 0x0004003du, 0x00000009u, 0x00004acbu, 0x00004773u, 0x0007004fu, 0x000000efu, 0x00004accu, 0x00004acbu, 0x00004acbu, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00004775u, 0x00004accu, 0x000200f9u, 0x00004ac8u, 0x000200f8u, 0x00004ac8u, 0x000700f5u, 0x000000efu, 0x0000a17du, 0x00004accu, 0x00004ac9u, 0x00004aceu, 0x00004acau, 0x0003003eu, 0x00004774u, 0x0000a17du, 0x00050041u, 0x00000046u, 0x00004ad0u, 0x00004774u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004ad1u, 0x00004ad0u, 0x00050082u, 0x00000013u, 0x00004ad4u, 0x00009d28u, 0x00009e10u, 0x00040072u, 0x00000009u, 0x00004ad5u, 0x00004ad4u, 0x00070050u, 0x00000009u, 0x00004ad6u, 0x00004ad1u, 0x00004ad1u, 0x00004ad1u, 0x00004ad1u, 0x00050084u, 0x00000009u, 0x00004ad7u, 0x00004ad6u, 0x00004ad5u, 0x00050041u, 0x00000046u, 0x00004ad8u, 0x00004774u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004ad9u, 0x00004ad8u, 0x00050082u, 0x00000013u, 0x00004adcu, 0x00009ef7u, 0x00009e10u, 0x00040072u, 0x00000009u, 0x00004addu, 0x00004adcu, 0x00070050u, 0x00000009u, 0x00004adeu, 0x00004ad9u, 0x00004ad9u, 0x00004ad9u, 0x00004ad9u, 0x00050084u, 0x00000009u, 0x00004adfu, 0x00004adeu, 0x00004addu, 0x00050080u, 0x00000009u, 0x00004ae0u, 0x00004ad7u, 0x00004adfu, 0x00050080u, 0x00000009u, 0x00004ae2u, 0x00004ae0u, 0x0000f375u, 0x0003003eu, 0x00004776u, 0x00004ae2u, 0x000500c3u, 0x00000009u, 0x00004ae5u, 0x00004ae2u, 0x0000f380u, 0x0003003eu, 0x00004776u, 0x00004ae5u, 0x00050041u, 0x00000046u, 0x00004ae6u, 0x00004773u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00004ae7u, 0x00004ae6u, 0x00070050u, 0x00000009u, 0x00004ae9u, 0x00004ae7u, 0x00004ae7u, 0x00004ae7u, 0x00004ae7u, 0x00050080u, 0x00000009u, 0x00004aeau, 0x00004ae5u, 0x00004ae9u, 0x0003003eu, 0x00004776u, 0x00004aeau, 0x00040072u, 0x00000013u, 0x00004aecu, 0x00004aeau, 0x0003003eu, 0x00004777u, 0x00004aecu, 0x000200f9u, 0x00004ac0u, 0x000200f8u, 0x00004ac0u, 0x000700f5u, 0x00000013u, 0x0000a181u, 0x00004aecu, 0x00004ac8u, 0x0000a182u, 0x00004aeeu, 0x0003003eu, 0x00004787u, 0x0000a181u, 0x0003003eu, 0x0000213au, 0x0000a181u, 0x000400a8u, 0x00000069u, 0x00002354u, 0x000021c9u, 0x000400a8u, 0x00000069u, 0x00002356u, 0x000021c3u, 0x000500a7u, 0x00000069u, 0x00002357u, 0x00002354u, 0x00002356u, 0x000500a7u, 0x00000069u, 0x0000235au, 0x00002357u, 0x00002339u, 0x000300f7u, 0x0000235bu, 0x00000000u, 0x000400fau, 0x0000235au, 0x0000235cu, 0x0000235bu, 0x000200f8u, 0x0000235cu, 0x0003003eu, 0x00002149u, 0x0000a181u, 0x0003003eu, 0x0000214au, 0x00002978u, 0x00040072u, 0x00000009u, 0x00005e1bu, 0x0000a181u, 0x000600cau, 0x00000009u, 0x00005e1cu, 0x00005e1bu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00005e14u, 0x00005e1cu, 0x00050041u, 0x00000046u, 0x00005e1du, 0x00005e14u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00005e1eu, 0x00005e1du, 0x00050041u, 0x000001c4u, 0x00005e1fu, 0x0000214au, 0x0000032du, 0x0004003du, 0x00000012u, 0x00005e20u, 0x00005e1fu, 0x00040072u, 0x00000008u, 0x00005e21u, 0x00005e20u, 0x00050041u, 0x00000046u, 0x00005e22u, 0x00005e14u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00005e23u, 0x00005e22u, 0x00050084u, 0x00000008u, 0x00005e24u, 0x00005e21u, 0x00005e23u, 0x00050080u, 0x00000008u, 0x00005e25u, 0x00005e24u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x00005e26u, 0x00005e25u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005e27u, 0x00005e1eu, 0x00005e26u, 0x0003003eu, 0x00005e15u, 0x00005e27u, 0x0004003du, 0x00000008u, 0x00005e29u, 0x00005e1du, 0x00050041u, 0x000001c4u, 0x00005e2au, 0x0000214au, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00005e2bu, 0x00005e2au, 0x00040072u, 0x00000008u, 0x00005e2cu, 0x00005e2bu, 0x00050041u, 0x00000046u, 0x00005e2du, 0x00005e14u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00005e2eu, 0x00005e2du, 0x00050084u, 0x00000008u, 0x00005e2fu, 0x00005e2cu, 0x00005e2eu, 0x00050041u, 0x000001c4u, 0x00005e30u, 0x0000214au, 0x00000386u, 0x0004003du, 0x00000012u, 0x00005e31u, 0x00005e30u, 0x00040072u, 0x00000008u, 0x00005e32u, 0x00005e31u, 0x0004003du, 0x00000008u, 0x00005e34u, 0x00005e22u, 0x00050084u, 0x00000008u, 0x00005e35u, 0x00005e32u, 0x00005e34u, 0x00050080u, 0x00000008u, 0x00005e36u, 0x00005e2fu, 0x00005e35u, 0x00050080u, 0x00000008u, 0x00005e37u, 0x00005e36u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x00005e38u, 0x00005e37u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005e39u, 0x00005e29u, 0x00005e38u, 0x0003003eu, 0x00005e16u, 0x00005e39u, 0x0004003du, 0x00000008u, 0x00005e3bu, 0x00005e1du, 0x00050041u, 0x000001c4u, 0x00005e3cu, 0x0000214au, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005e3du, 0x00005e3cu, 0x00040072u, 0x00000008u, 0x00005e3eu, 0x00005e3du, 0x0004003du, 0x00000008u, 0x00005e40u, 0x00005e2du, 0x00050084u, 0x00000008u, 0x00005e41u, 0x00005e3eu, 0x00005e40u, 0x00050080u, 0x00000008u, 0x00005e42u, 0x00005e41u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x00005e43u, 0x00005e42u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005e44u, 0x00005e3bu, 0x00005e43u, 0x0003003eu, 0x00005e17u, 0x00005e44u, 0x0004003du, 0x00000008u, 0x00005e46u, 0x00005e1du, 0x0003003eu, 0x00005e18u, 0x00005e46u, 0x00040072u, 0x00000012u, 0x00005e48u, 0x00005e27u, 0x00040072u, 0x00000012u, 0x00005e4au, 0x00005e39u, 0x00040072u, 0x00000012u, 0x00005e4cu, 0x00005e44u, 0x00040072u, 0x00000012u, 0x00005e4eu, 0x00005e46u, 0x00070050u, 0x00000013u, 0x00005e4fu, 0x00005e48u, 0x00005e4au, 0x00005e4cu, 0x00005e4eu, 0x0003003eu, 0x00005e19u, 0x00005e4fu, 0x0003003eu, 0x0000213au, 0x00005e4fu, 0x000200f9u, 0x0000235bu, 0x000200f8u, 0x0000235bu, 0x000700f5u, 0x00000013u, 0x0000ab5au, 0x0000a181u, 0x00004ac0u, 0x00005e4fu, 0x0000235cu, 0x000200f9u, 0x0000233bu, 0x000200f8u, 0x0000233cu, 0x0003003eu, 0x0000213bu, 0x0000986bu, 0x0003003eu, 0x0000213cu, 0x00002978u, 0x00040072u, 0x00000009u, 0x000045f0u, 0x0000986bu, 0x000600cau, 0x00000009u, 0x000045f1u, 0x000045f0u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000045e9u, 0x000045f1u, 0x00050041u, 0x00000046u, 0x000045f2u, 0x000045e9u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000045f3u, 0x000045f2u, 0x00050041u, 0x000001c4u, 0x000045f4u, 0x0000213cu, 0x0000032du, 0x0004003du, 0x00000012u, 0x000045f5u, 0x000045f4u, 0x00040072u, 0x00000008u, 0x000045f6u, 0x000045f5u, 0x00050041u, 0x00000046u, 0x000045f7u, 0x000045e9u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045f8u, 0x000045f7u, 0x00050084u, 0x00000008u, 0x000045f9u, 0x000045f6u, 0x000045f8u, 0x00050080u, 0x00000008u, 0x000045fau, 0x000045f9u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x000045fbu, 0x000045fau, 0x0000025du, 0x00050080u, 0x00000008u, 0x000045fcu, 0x000045f3u, 0x000045fbu, 0x0003003eu, 0x000045eau, 0x000045fcu, 0x0004003du, 0x00000008u, 0x000045feu, 0x000045f2u, 0x00050041u, 0x000001c4u, 0x000045ffu, 0x0000213cu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00004600u, 0x000045ffu, 0x00040072u, 0x00000008u, 0x00004601u, 0x00004600u, 0x00050041u, 0x00000046u, 0x00004602u, 0x000045e9u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004603u, 0x00004602u, 0x00050084u, 0x00000008u, 0x00004604u, 0x00004601u, 0x00004603u, 0x00050041u, 0x000001c4u, 0x00004605u, 0x0000213cu, 0x00000386u, 0x0004003du, 0x00000012u, 0x00004606u, 0x00004605u, 0x00040072u, 0x00000008u, 0x00004607u, 0x00004606u, 0x0004003du, 0x00000008u, 0x00004609u, 0x000045f7u, 0x00050084u, 0x00000008u, 0x0000460au, 0x00004607u, 0x00004609u, 0x00050080u, 0x00000008u, 0x0000460bu, 0x00004604u, 0x0000460au, 0x00050080u, 0x00000008u, 0x0000460cu, 0x0000460bu, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x0000460du, 0x0000460cu, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000460eu, 0x000045feu, 0x0000460du, 0x0003003eu, 0x000045ebu, 0x0000460eu, 0x0004003du, 0x00000008u, 0x00004610u, 0x000045f2u, 0x00050041u, 0x000001c4u, 0x00004611u, 0x0000213cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00004612u, 0x00004611u, 0x00040072u, 0x00000008u, 0x00004613u, 0x00004612u, 0x0004003du, 0x00000008u, 0x00004615u, 0x00004602u, 0x00050084u, 0x00000008u, 0x00004616u, 0x00004613u, 0x00004615u, 0x00050080u, 0x00000008u, 0x00004617u, 0x00004616u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x00004618u, 0x00004617u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00004619u, 0x00004610u, 0x00004618u, 0x0003003eu, 0x000045ecu, 0x00004619u, 0x0004003du, 0x00000008u, 0x0000461bu, 0x000045f2u, 0x0003003eu, 0x000045edu, 0x0000461bu, 0x00040072u, 0x00000012u, 0x0000461du, 0x000045fcu, 0x00040072u, 0x00000012u, 0x0000461fu, 0x0000460eu, 0x00040072u, 0x00000012u, 0x00004621u, 0x00004619u, 0x00040072u, 0x00000012u, 0x00004623u, 0x0000461bu, 0x00070050u, 0x00000013u, 0x00004624u, 0x0000461du, 0x0000461fu, 0x00004621u, 0x00004623u, 0x0003003eu, 0x000045eeu, 0x00004624u, 0x0003003eu, 0x0000213au, 0x00004624u, 0x000200f9u, 0x0000233bu, 0x000200f8u, 0x0000233bu, 0x000700f5u, 0x00000013u, 0x0000e9a8u, 0x00009ff8u, 0x0000233cu, 0x00009fdbu, 0x0000235bu, 0x000700f5u, 0x00000013u, 0x0000e908u, 0x00009f14u, 0x0000233cu, 0x00009ef7u, 0x0000235bu, 0x000700f5u, 0x00000013u, 0x0000e868u, 0x00009e2du, 0x0000233cu, 0x00009e10u, 0x0000235bu, 0x000700f5u, 0x00000013u, 0x0000e7c8u, 0x00009d45u, 0x0000233cu, 0x00009d28u, 0x0000235bu, 0x000700f5u, 0x00000013u, 0x0000ab59u, 0x00004624u, 0x0000233cu, 0x0000ab5au, 0x0000235bu, 0x000200f9u, 0x00002335u, 0x000200f8u, 0x00002335u, 0x000700f5u, 0x00000013u, 0x0000e9a7u, 0x00009ff8u, 0x000022e9u, 0x0000e9a8u, 0x0000233bu, 0x000700f5u, 0x00000013u, 0x0000e907u, 0x00009f14u, 0x000022e9u, 0x0000e908u, 0x0000233bu, 0x000700f5u, 0x00000013u, 0x0000e867u, 0x00009e2du, 0x000022e9u, 0x0000e868u, 0x0000233bu, 0x000700f5u, 0x00000013u, 0x0000e7c7u, 0x00009d45u, 0x000022e9u, 0x0000e7c8u, 0x0000233bu, 0x000700f5u, 0x00000013u, 0x0000aab7u, 0x0000aac6u, 0x000022e9u, 0x0000ab59u, 0x0000233bu, 0x000600a9u, 0x00000008u, 0x00002363u, 0x000021e4u, 0x0000022au, 0x00000220u, 0x000500c3u, 0x00000008u, 0x00002364u, 0x00007ef7u, 0x00002363u, 0x000500c3u, 0x00000008u, 0x00002366u, 0x00002439u, 0x0000022du, 0x000500c7u, 0x00000008u, 0x00002368u, 0x00002439u, 0x00000230u, 0x0003003eu, 0x0000214du, 0x00007efeu, 0x0003003eu, 0x0000214eu, 0x00002364u, 0x0003003eu, 0x0000214fu, 0x00002366u, 0x0003003eu, 0x00002150u, 0x00002368u, 0x000500b1u, 0x00000069u, 0x00005e54u, 0x00002366u, 0x0000022du, 0x000300f7u, 0x00005e55u, 0x00000000u, 0x000400fau, 0x00005e54u, 0x00005e56u, 0x00005e57u, 0x000200f8u, 0x00005e57u, 0x000500aau, 0x00000069u, 0x00005e65u, 0x00002366u, 0x0000022du, 0x000300f7u, 0x00005e66u, 0x00000000u, 0x000400fau, 0x00005e65u, 0x00005e67u, 0x00005e68u, 0x000200f8u, 0x00005e68u, 0x0003003eu, 0x00002151u, 0x00000220u, 0x000200f9u, 0x00005e66u, 0x000200f8u, 0x00005e67u, 0x0004003du, 0x00000011u, 0x00005e91u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00005e92u, 0x00005e91u, 0x00000344u, 0x00040071u, 0x00000006u, 0x00005e93u, 0x00005e92u, 0x0004007cu, 0x00000008u, 0x00005e94u, 0x00005e93u, 0x0003003eu, 0x00005e90u, 0x00005e94u, 0x0003003eu, 0x00002151u, 0x00005e94u, 0x000200f9u, 0x00005e66u, 0x000200f8u, 0x00005e66u, 0x000700f5u, 0x00000008u, 0x0000a596u, 0x00005e94u, 0x00005e67u, 0x00000220u, 0x00005e68u, 0x000200f9u, 0x00005e55u, 0x000200f8u, 0x00005e56u, 0x000500c7u, 0x00000008u, 0x00005e5au, 0x00002364u, 0x00000230u, 0x00050084u, 0x00000008u, 0x00005e5bu, 0x00005e5au, 0x00000233u, 0x000500c7u, 0x00000008u, 0x00005e5du, 0x00007efeu, 0x00000230u, 0x00050080u, 0x00000008u, 0x00005e5eu, 0x00005e5bu, 0x00005e5du, 0x0003003eu, 0x00005e50u, 0x00000392u, 0x00060041u, 0x0000007bu, 0x00005e5fu, 0x00005e50u, 0x00002366u, 0x00005e5eu, 0x0004003du, 0x0000000fu, 0x00005e60u, 0x00005e5fu, 0x00040071u, 0x00000006u, 0x00005e61u, 0x00005e60u, 0x0004007cu, 0x00000008u, 0x00005e62u, 0x00005e61u, 0x00050084u, 0x00000008u, 0x00005e63u, 0x00005e62u, 0x000003a0u, 0x0003003eu, 0x00002151u, 0x00005e63u, 0x000200f9u, 0x00005e55u, 0x000200f8u, 0x00005e55u, 0x000700f5u, 0x00000008u, 0x0000a595u, 0x00005e63u, 0x00005e56u, 0x0000a596u, 0x00005e66u, 0x000500aau, 0x00000069u, 0x00005e6bu, 0x00002368u, 0x00000230u, 0x000300f7u, 0x00005e6cu, 0x00000000u, 0x000400fau, 0x00005e6bu, 0x00005e6du, 0x00005e6eu, 0x000200f8u, 0x00005e6eu, 0x000500aau, 0x00000069u, 0x00005e70u, 0x00002368u, 0x0000022du, 0x000300f7u, 0x00005e71u, 0x00000000u, 0x000400fau, 0x00005e70u, 0x00005e72u, 0x00005e73u, 0x000200f8u, 0x00005e73u, 0x000500afu, 0x00000069u, 0x00005e76u, 0x00002366u, 0x0000022du, 0x000300f7u, 0x00005e77u, 0x00000000u, 0x000400fau, 0x00005e76u, 0x00005e78u, 0x00005e79u, 0x000200f8u, 0x00005e79u, 0x000500c7u, 0x00000008u, 0x00005e87u, 0x0000a595u, 0x0000023cu, 0x0003003eu, 0x00005e51u, 0x00005e87u, 0x000200f9u, 0x00005e77u, 0x000200f8u, 0x00005e78u, 0x000500c7u, 0x00000008u, 0x00005e7bu, 0x00002366u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00005e7du, 0x00002364u, 0x00000230u, 0x00050084u, 0x00000008u, 0x00005e7eu, 0x00005e7du, 0x00000233u, 0x000500c7u, 0x00000008u, 0x00005e80u, 0x00007efeu, 0x00000230u, 0x00050080u, 0x00000008u, 0x00005e81u, 0x00005e7eu, 0x00005e80u, 0x0003003eu, 0x00005e52u, 0x00000392u, 0x00060041u, 0x0000007bu, 0x00005e82u, 0x00005e52u, 0x00005e7bu, 0x00005e81u, 0x0004003du, 0x0000000fu, 0x00005e83u, 0x00005e82u, 0x00040071u, 0x00000006u, 0x00005e84u, 0x00005e83u, 0x0004007cu, 0x00000008u, 0x00005e85u, 0x00005e84u, 0x0003003eu, 0x00005e51u, 0x00005e85u, 0x000200f9u, 0x00005e77u, 0x000200f8u, 0x00005e77u, 0x000700f5u, 0x00000008u, 0x0000a59bu, 0x00005e85u, 0x00005e78u, 0x00005e87u, 0x00005e79u, 0x0003003eu, 0x00002152u, 0x0000a59bu, 0x000500aau, 0x00000069u, 0x00005e8au, 0x00002368u, 0x0000022au, 0x000300f7u, 0x00005e8bu, 0x00000000u, 0x000400fau, 0x00005e8au, 0x00005e8cu, 0x00005e8bu, 0x000200f8u, 0x00005e8cu, 0x000400c8u, 0x00000008u, 0x00005e8eu, 0x0000a59bu, 0x000500c7u, 0x00000008u, 0x00005e8fu, 0x00005e8eu, 0x0000023cu, 0x0003003eu, 0x00002152u, 0x00005e8fu, 0x000200f9u, 0x00005e8bu, 0x000200f8u, 0x00005e8bu, 0x000700f5u, 0x00000008u, 0x0000a5a3u, 0x0000a59bu, 0x00005e77u, 0x00005e8fu, 0x00005e8cu, 0x000200f9u, 0x00005e71u, 0x000200f8u, 0x00005e72u, 0x0004003du, 0x00000011u, 0x00005e96u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00005e97u, 0x00005e96u, 0x00000334u, 0x00040071u, 0x00000006u, 0x00005e98u, 0x00005e97u, 0x0004007cu, 0x00000008u, 0x00005e99u, 0x00005e98u, 0x0003003eu, 0x00005e95u, 0x00005e99u, 0x0003003eu, 0x00002152u, 0x00005e99u, 0x000200f9u, 0x00005e71u, 0x000200f8u, 0x00005e71u, 0x000700f5u, 0x00000008u, 0x0000a5a2u, 0x00005e99u, 0x00005e72u, 0x0000a5a3u, 0x00005e8bu, 0x000200f9u, 0x00005e6cu, 0x000200f8u, 0x00005e6du, 0x0003003eu, 0x00002152u, 0x00000220u, 0x000200f9u, 0x00005e6cu, 0x000200f8u, 0x00005e6cu, 0x000700f5u, 0x00000008u, 0x0000a5a1u, 0x00000220u, 0x00005e6du, 0x0000a5a2u, 0x00005e71u, 0x0003003eu, 0x0000214bu, 0x0000a595u, 0x0003003eu, 0x0000214cu, 0x0000a5a1u, 0x000300f7u, 0x0000236eu, 0x00000000u, 0x000400fau, 0x000021e1u, 0x0000236fu, 0x00002370u, 0x000200f8u, 0x00002370u, 0x0004003du, 0x00000010u, 0x000023b0u, 0x000020f4u, 0x0004003du, 0x00000011u, 0x00006255u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00006256u, 0x00006255u, 0x00000334u, 0x000500c4u, 0x00000011u, 0x00006257u, 0x00006256u, 0x00000336u, 0x000500c5u, 0x00000011u, 0x00006258u, 0x00006257u, 0x00000338u, 0x0004007cu, 0x00000012u, 0x00006259u, 0x00006258u, 0x0003003eu, 0x00006254u, 0x00006259u, 0x000d0050u, 0x000001e4u, 0x000023b5u, 0x00002964u, 0x00002966u, 0x00002968u, 0x0000296au, 0x000023b0u, 0x00001db1u, 0x0000986bu, 0x0000aab7u, 0x0000ab64u, 0x00006259u, 0x0003003eu, 0x00007c70u, 0x00002964u, 0x0003003eu, 0x00007c71u, 0x00002966u, 0x0003003eu, 0x00007c72u, 0x00002968u, 0x0003003eu, 0x00007c73u, 0x0000296au, 0x0003003eu, 0x00007c74u, 0x000023b0u, 0x0003003eu, 0x00007c75u, 0x00001db1u, 0x0003003eu, 0x00007c76u, 0x0000986bu, 0x0003003eu, 0x00007c77u, 0x0000aab7u, 0x0003003eu, 0x00007c78u, 0x0000ab64u, 0x0003003eu, 0x00007c79u, 0x00006259u, 0x0003003eu, 0x00007c8fu, 0x00002964u, 0x0003003eu, 0x00007c90u, 0x00002966u, 0x0003003eu, 0x00007c91u, 0x00002968u, 0x0003003eu, 0x00007c92u, 0x0000296au, 0x0003003eu, 0x00007c93u, 0x000023b0u, 0x0003003eu, 0x00007c94u, 0x00001db1u, 0x0003003eu, 0x00007c95u, 0x0000986bu, 0x0003003eu, 0x00007c96u, 0x0000aab7u, 0x0003003eu, 0x00007c97u, 0x0000ab64u, 0x0003003eu, 0x00007c98u, 0x00006259u, 0x0003003eu, 0x00002169u, 0x00002433u, 0x0003003eu, 0x0000216au, 0x00002435u, 0x0003003eu, 0x0000216bu, 0x0000a5a1u, 0x0003003eu, 0x0000216cu, 0x00002274u, 0x0003003eu, 0x0000216du, 0x000021ccu, 0x0003003eu, 0x0000216eu, 0x000021cfu, 0x00050041u, 0x0000007bu, 0x00006273u, 0x00002169u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006274u, 0x00006273u, 0x00040071u, 0x00000006u, 0x00006275u, 0x00006274u, 0x0004007cu, 0x00000008u, 0x00006276u, 0x00006275u, 0x00050041u, 0x0000007bu, 0x00006277u, 0x0000216au, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006278u, 0x00006277u, 0x00040071u, 0x00000006u, 0x00006279u, 0x00006278u, 0x0004007cu, 0x00000008u, 0x0000627au, 0x00006279u, 0x0003003eu, 0x00006c3cu, 0x00002964u, 0x0003003eu, 0x00006c3du, 0x000023b0u, 0x0003003eu, 0x00006c3eu, 0x00001db1u, 0x0003003eu, 0x00006c3fu, 0x0000986bu, 0x0003003eu, 0x00006c40u, 0x0000aab7u, 0x0003003eu, 0x00006c42u, 0x00006259u, 0x0003003eu, 0x0000625cu, 0x00006276u, 0x0003003eu, 0x0000625du, 0x0000627au, 0x000300f7u, 0x000062cau, 0x00000000u, 0x000f00fbu, 0x00006276u, 0x000062cbu, 0x00000000u, 0x000062ccu, 0x00000001u, 0x000062cdu, 0x00000002u, 0x000062ceu, 0x00000004u, 0x000062cfu, 0x00000007u, 0x000062d0u, 0x00000006u, 0x000062d1u, 0x000200f8u, 0x000062d1u, 0x0003003eu, 0x000062c6u, 0x00001983u, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062d0u, 0x00040072u, 0x00000008u, 0x000062eau, 0x00006259u, 0x00060050u, 0x00000044u, 0x000062ebu, 0x000062eau, 0x000062eau, 0x000062eau, 0x0003003eu, 0x000062c6u, 0x000062ebu, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062cfu, 0x0004003du, 0x00000010u, 0x000062e4u, 0x00006c3du, 0x0008004fu, 0x00000047u, 0x000062e5u, 0x000062e4u, 0x000062e4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000062e6u, 0x000062e5u, 0x0004007cu, 0x00000044u, 0x000062e7u, 0x000062e6u, 0x0003003eu, 0x000062c6u, 0x000062e7u, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062ceu, 0x0004003du, 0x00000013u, 0x000062e0u, 0x00006c40u, 0x0008004fu, 0x000004b6u, 0x000062e1u, 0x000062e0u, 0x000062e0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000062e2u, 0x000062e1u, 0x0003003eu, 0x000062c6u, 0x000062e2u, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062cdu, 0x0004003du, 0x00000013u, 0x000062dcu, 0x00006c3fu, 0x0008004fu, 0x000004b6u, 0x000062ddu, 0x000062dcu, 0x000062dcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000062deu, 0x000062ddu, 0x0003003eu, 0x000062c6u, 0x000062deu, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062ccu, 0x0004003du, 0x00000013u, 0x000062d8u, 0x00006c3eu, 0x0008004fu, 0x000004b6u, 0x000062d9u, 0x000062d8u, 0x000062d8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000062dau, 0x000062d9u, 0x0003003eu, 0x000062c6u, 0x000062dau, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062cbu, 0x0004003du, 0x00000010u, 0x000062d3u, 0x00006c3cu, 0x0008004fu, 0x00000047u, 0x000062d4u, 0x000062d3u, 0x000062d3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000062d5u, 0x000062d4u, 0x0004007cu, 0x00000044u, 0x000062d6u, 0x000062d5u, 0x0003003eu, 0x000062c6u, 0x000062d6u, 0x000200f9u, 0x000062cau, 0x000200f8u, 0x000062cau, 0x001100f5u, 0x00000044u, 0x0000b111u, 0x000062d6u, 0x000062cbu, 0x000062dau, 0x000062ccu, 0x000062deu, 0x000062cdu, 0x000062e2u, 0x000062ceu, 0x000062e7u, 0x000062cfu, 0x000062ebu, 0x000062d0u, 0x00001983u, 0x000062d1u, 0x000300f7u, 0x000062edu, 0x00000000u, 0x000d00fbu, 0x0000627au, 0x000062eeu, 0x00000000u, 0x000062efu, 0x00000001u, 0x000062f0u, 0x00000002u, 0x000062f1u, 0x00000004u, 0x000062f2u, 0x00000006u, 0x000062f3u, 0x000200f8u, 0x000062f3u, 0x0003003eu, 0x000062c7u, 0x00001982u, 0x000200f9u, 0x000062edu, 0x000200f8u, 0x000062f2u, 0x00050041u, 0x0000007bu, 0x00006c4du, 0x00006c3du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006302u, 0x00006c4du, 0x00040071u, 0x00000006u, 0x00006303u, 0x00006302u, 0x0004007cu, 0x00000008u, 0x00006304u, 0x00006303u, 0x0003003eu, 0x000062c7u, 0x00006304u, 0x000200f9u, 0x000062edu, 0x000200f8u, 0x000062f1u, 0x00050041u, 0x000001c4u, 0x00006c4cu, 0x00006c40u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000062ffu, 0x00006c4cu, 0x00040072u, 0x00000008u, 0x00006300u, 0x000062ffu, 0x0003003eu, 0x000062c7u, 0x00006300u, 0x000200f9u, 0x000062edu, 0x000200f8u, 0x000062f0u, 0x00050041u, 0x000001c4u, 0x00006c4bu, 0x00006c3fu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000062fcu, 0x00006c4bu, 0x00040072u, 0x00000008u, 0x000062fdu, 0x000062fcu, 0x0003003eu, 0x000062c7u, 0x000062fdu, 0x000200f9u, 0x000062edu, 0x000200f8u, 0x000062efu, 0x00050041u, 0x000001c4u, 0x00006c4au, 0x00006c3eu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000062f9u, 0x00006c4au, 0x00040072u, 0x00000008u, 0x000062fau, 0x000062f9u, 0x0003003eu, 0x000062c7u, 0x000062fau, 0x000200f9u, 0x000062edu, 0x000200f8u, 0x000062eeu, 0x00050041u, 0x0000007bu, 0x00006c49u, 0x00006c3cu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000062f5u, 0x00006c49u, 0x00040071u, 0x00000006u, 0x000062f6u, 0x000062f5u, 0x0004007cu, 0x00000008u, 0x000062f7u, 0x000062f6u, 0x0003003eu, 0x000062c7u, 0x000062f7u, 0x000200f9u, 0x000062edu, 0x000200f8u, 0x000062edu, 0x000f00f5u, 0x00000008u, 0x0000b112u, 0x000062f7u, 0x000062eeu, 0x000062fau, 0x000062efu, 0x000062fdu, 0x000062f0u, 0x00006300u, 0x000062f1u, 0x00006304u, 0x000062f2u, 0x00001982u, 0x000062f3u, 0x00050051u, 0x00000008u, 0x00006307u, 0x0000b111u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006308u, 0x0000b111u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006309u, 0x0000b111u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000630au, 0x00006307u, 0x00006308u, 0x00006309u, 0x0000b112u, 0x0003003eu, 0x000062c8u, 0x0000630au, 0x0003003eu, 0x0000625au, 0x0000630au, 0x00050041u, 0x0000007bu, 0x0000627du, 0x00002169u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000627eu, 0x0000627du, 0x00040071u, 0x00000006u, 0x0000627fu, 0x0000627eu, 0x0004007cu, 0x00000008u, 0x00006280u, 0x0000627fu, 0x00050041u, 0x0000007bu, 0x00006281u, 0x0000216au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006282u, 0x00006281u, 0x00040071u, 0x00000006u, 0x00006283u, 0x00006282u, 0x0004007cu, 0x00000008u, 0x00006284u, 0x00006283u, 0x0003003eu, 0x00006c4eu, 0x00002966u, 0x0003003eu, 0x00006c4fu, 0x000023b0u, 0x0003003eu, 0x00006c50u, 0x00001db1u, 0x0003003eu, 0x00006c51u, 0x0000986bu, 0x0003003eu, 0x00006c52u, 0x0000aab7u, 0x0003003eu, 0x00006260u, 0x00006280u, 0x0003003eu, 0x00006261u, 0x00006284u, 0x000300f7u, 0x0000630fu, 0x00000000u, 0x000d00fbu, 0x00006280u, 0x00006310u, 0x00000000u, 0x00006311u, 0x00000001u, 0x00006312u, 0x00000002u, 0x00006313u, 0x00000004u, 0x00006314u, 0x00000007u, 0x00006315u, 0x000200f8u, 0x00006315u, 0x00050041u, 0x0000007bu, 0x00006c58u, 0x00006c4eu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000632du, 0x00006c58u, 0x00040071u, 0x00000006u, 0x0000632eu, 0x0000632du, 0x0004007cu, 0x00000008u, 0x0000632fu, 0x0000632eu, 0x000500c4u, 0x00000008u, 0x00006330u, 0x0000632fu, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006c59u, 0x00006c4eu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006332u, 0x00006c59u, 0x00040071u, 0x00000006u, 0x00006333u, 0x00006332u, 0x0004007cu, 0x00000008u, 0x00006334u, 0x00006333u, 0x000500c5u, 0x00000008u, 0x00006335u, 0x00006330u, 0x00006334u, 0x00060050u, 0x00000044u, 0x00006336u, 0x00006335u, 0x00006335u, 0x00006335u, 0x0003003eu, 0x0000630bu, 0x00006336u, 0x000200f9u, 0x0000630fu, 0x000200f8u, 0x00006314u, 0x0004003du, 0x00000010u, 0x00006328u, 0x00006c4fu, 0x0008004fu, 0x00000047u, 0x00006329u, 0x00006328u, 0x00006328u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000632au, 0x00006329u, 0x0004007cu, 0x00000044u, 0x0000632bu, 0x0000632au, 0x0003003eu, 0x0000630bu, 0x0000632bu, 0x000200f9u, 0x0000630fu, 0x000200f8u, 0x00006313u, 0x0004003du, 0x00000013u, 0x00006324u, 0x00006c52u, 0x0008004fu, 0x000004b6u, 0x00006325u, 0x00006324u, 0x00006324u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006326u, 0x00006325u, 0x0003003eu, 0x0000630bu, 0x00006326u, 0x000200f9u, 0x0000630fu, 0x000200f8u, 0x00006312u, 0x0004003du, 0x00000013u, 0x00006320u, 0x00006c51u, 0x0008004fu, 0x000004b6u, 0x00006321u, 0x00006320u, 0x00006320u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006322u, 0x00006321u, 0x0003003eu, 0x0000630bu, 0x00006322u, 0x000200f9u, 0x0000630fu, 0x000200f8u, 0x00006311u, 0x0004003du, 0x00000013u, 0x0000631cu, 0x00006c50u, 0x0008004fu, 0x000004b6u, 0x0000631du, 0x0000631cu, 0x0000631cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000631eu, 0x0000631du, 0x0003003eu, 0x0000630bu, 0x0000631eu, 0x000200f9u, 0x0000630fu, 0x000200f8u, 0x00006310u, 0x0004003du, 0x00000010u, 0x00006317u, 0x00006c4eu, 0x0008004fu, 0x00000047u, 0x00006318u, 0x00006317u, 0x00006317u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006319u, 0x00006318u, 0x0004007cu, 0x00000044u, 0x0000631au, 0x00006319u, 0x0003003eu, 0x0000630bu, 0x0000631au, 0x000200f9u, 0x0000630fu, 0x000200f8u, 0x0000630fu, 0x000f00f5u, 0x00000044u, 0x0000b129u, 0x0000631au, 0x00006310u, 0x0000631eu, 0x00006311u, 0x00006322u, 0x00006312u, 0x00006326u, 0x00006313u, 0x0000632bu, 0x00006314u, 0x00006336u, 0x00006315u, 0x000300f7u, 0x00006338u, 0x00000000u, 0x000d00fbu, 0x00006284u, 0x00006339u, 0x00000000u, 0x0000633au, 0x00000001u, 0x0000633bu, 0x00000002u, 0x0000633cu, 0x00000004u, 0x0000633du, 0x00000006u, 0x0000633eu, 0x000200f8u, 0x0000633eu, 0x0003003eu, 0x0000630cu, 0x00001982u, 0x000200f9u, 0x00006338u, 0x000200f8u, 0x0000633du, 0x00050041u, 0x0000007bu, 0x00006c5eu, 0x00006c4fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000634du, 0x00006c5eu, 0x00040071u, 0x00000006u, 0x0000634eu, 0x0000634du, 0x0004007cu, 0x00000008u, 0x0000634fu, 0x0000634eu, 0x0003003eu, 0x0000630cu, 0x0000634fu, 0x000200f9u, 0x00006338u, 0x000200f8u, 0x0000633cu, 0x00050041u, 0x000001c4u, 0x00006c5du, 0x00006c52u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000634au, 0x00006c5du, 0x00040072u, 0x00000008u, 0x0000634bu, 0x0000634au, 0x0003003eu, 0x0000630cu, 0x0000634bu, 0x000200f9u, 0x00006338u, 0x000200f8u, 0x0000633bu, 0x00050041u, 0x000001c4u, 0x00006c5cu, 0x00006c51u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006347u, 0x00006c5cu, 0x00040072u, 0x00000008u, 0x00006348u, 0x00006347u, 0x0003003eu, 0x0000630cu, 0x00006348u, 0x000200f9u, 0x00006338u, 0x000200f8u, 0x0000633au, 0x00050041u, 0x000001c4u, 0x00006c5bu, 0x00006c50u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006344u, 0x00006c5bu, 0x00040072u, 0x00000008u, 0x00006345u, 0x00006344u, 0x0003003eu, 0x0000630cu, 0x00006345u, 0x000200f9u, 0x00006338u, 0x000200f8u, 0x00006339u, 0x00050041u, 0x0000007bu, 0x00006c5au, 0x00006c4eu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006340u, 0x00006c5au, 0x00040071u, 0x00000006u, 0x00006341u, 0x00006340u, 0x0004007cu, 0x00000008u, 0x00006342u, 0x00006341u, 0x0003003eu, 0x0000630cu, 0x00006342u, 0x000200f9u, 0x00006338u, 0x000200f8u, 0x00006338u, 0x000f00f5u, 0x00000008u, 0x0000b12au, 0x00006342u, 0x00006339u, 0x00006345u, 0x0000633au, 0x00006348u, 0x0000633bu, 0x0000634bu, 0x0000633cu, 0x0000634fu, 0x0000633du, 0x00001982u, 0x0000633eu, 0x00050051u, 0x00000008u, 0x00006352u, 0x0000b129u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006353u, 0x0000b129u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006354u, 0x0000b129u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006355u, 0x00006352u, 0x00006353u, 0x00006354u, 0x0000b12au, 0x0003003eu, 0x0000630du, 0x00006355u, 0x0003003eu, 0x0000625eu, 0x00006355u, 0x00050041u, 0x0000007bu, 0x00006287u, 0x00002169u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006288u, 0x00006287u, 0x00040071u, 0x00000006u, 0x00006289u, 0x00006288u, 0x0004007cu, 0x00000008u, 0x0000628au, 0x00006289u, 0x00050041u, 0x0000007bu, 0x0000628bu, 0x0000216au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x0000628cu, 0x0000628bu, 0x00040071u, 0x00000006u, 0x0000628du, 0x0000628cu, 0x0004007cu, 0x00000008u, 0x0000628eu, 0x0000628du, 0x0003003eu, 0x00006c5fu, 0x00002968u, 0x0003003eu, 0x00006c60u, 0x000023b0u, 0x0003003eu, 0x00006c61u, 0x00001db1u, 0x0003003eu, 0x00006c62u, 0x0000986bu, 0x0003003eu, 0x00006c63u, 0x0000aab7u, 0x0003003eu, 0x00006c64u, 0x0000ab64u, 0x0003003eu, 0x00006264u, 0x0000628au, 0x0003003eu, 0x00006265u, 0x0000628eu, 0x000300f7u, 0x0000635au, 0x00000000u, 0x001700fbu, 0x0000628au, 0x0000635bu, 0x00000000u, 0x0000635cu, 0x00000007u, 0x0000635du, 0x00000001u, 0x0000635eu, 0x00000002u, 0x0000635fu, 0x00000004u, 0x00006360u, 0x00000008u, 0x00006361u, 0x00000009u, 0x00006362u, 0x0000000bu, 0x00006363u, 0x0000000du, 0x00006364u, 0x0000000fu, 0x00006365u, 0x000200f8u, 0x00006365u, 0x00050041u, 0x0000007bu, 0x00006c6bu, 0x00006c5fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006392u, 0x00006c6bu, 0x00040071u, 0x00000006u, 0x00006393u, 0x00006392u, 0x0004007cu, 0x00000008u, 0x00006394u, 0x00006393u, 0x000500c4u, 0x00000008u, 0x00006395u, 0x00006394u, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006c6cu, 0x00006c5fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006397u, 0x00006c6cu, 0x00040071u, 0x00000006u, 0x00006398u, 0x00006397u, 0x0004007cu, 0x00000008u, 0x00006399u, 0x00006398u, 0x000500c5u, 0x00000008u, 0x0000639au, 0x00006395u, 0x00006399u, 0x00060050u, 0x00000044u, 0x0000639bu, 0x0000639au, 0x0000639au, 0x0000639au, 0x0003003eu, 0x00006356u, 0x0000639bu, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x00006364u, 0x00040072u, 0x00000008u, 0x0000638fu, 0x0000ab64u, 0x00060050u, 0x00000044u, 0x00006390u, 0x0000638fu, 0x0000638fu, 0x0000638fu, 0x0003003eu, 0x00006356u, 0x00006390u, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x00006363u, 0x0004003du, 0x00000010u, 0x00006389u, 0x00006c60u, 0x0008004fu, 0x00000047u, 0x0000638au, 0x00006389u, 0x00006389u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x0000638bu, 0x0000638au, 0x0004007cu, 0x00000044u, 0x0000638cu, 0x0000638bu, 0x0003003eu, 0x00006356u, 0x0000638cu, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x00006362u, 0x0004003du, 0x00000013u, 0x00006385u, 0x00006c63u, 0x0008004fu, 0x000004b6u, 0x00006386u, 0x00006385u, 0x00006385u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00006387u, 0x00006386u, 0x0003003eu, 0x00006356u, 0x00006387u, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x00006361u, 0x0004003du, 0x00000013u, 0x00006381u, 0x00006c62u, 0x0008004fu, 0x000004b6u, 0x00006382u, 0x00006381u, 0x00006381u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00006383u, 0x00006382u, 0x0003003eu, 0x00006356u, 0x00006383u, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x00006360u, 0x0004003du, 0x00000010u, 0x0000637cu, 0x00006c60u, 0x0008004fu, 0x00000047u, 0x0000637du, 0x0000637cu, 0x0000637cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000637eu, 0x0000637du, 0x0004007cu, 0x00000044u, 0x0000637fu, 0x0000637eu, 0x0003003eu, 0x00006356u, 0x0000637fu, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x0000635fu, 0x0004003du, 0x00000013u, 0x00006378u, 0x00006c63u, 0x0008004fu, 0x000004b6u, 0x00006379u, 0x00006378u, 0x00006378u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000637au, 0x00006379u, 0x0003003eu, 0x00006356u, 0x0000637au, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x0000635eu, 0x0004003du, 0x00000013u, 0x00006374u, 0x00006c62u, 0x0008004fu, 0x000004b6u, 0x00006375u, 0x00006374u, 0x00006374u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006376u, 0x00006375u, 0x0003003eu, 0x00006356u, 0x00006376u, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x0000635du, 0x00040072u, 0x00000044u, 0x00006372u, 0x0000f38fu, 0x0003003eu, 0x00006356u, 0x00006372u, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x0000635cu, 0x00040072u, 0x00000044u, 0x0000636eu, 0x0000f38fu, 0x0003003eu, 0x00006356u, 0x0000636eu, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x0000635bu, 0x0004003du, 0x00000010u, 0x00006367u, 0x00006c5fu, 0x0008004fu, 0x00000047u, 0x00006368u, 0x00006367u, 0x00006367u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006369u, 0x00006368u, 0x0004007cu, 0x00000044u, 0x0000636au, 0x00006369u, 0x0003003eu, 0x00006356u, 0x0000636au, 0x000200f9u, 0x0000635au, 0x000200f8u, 0x0000635au, 0x001900f5u, 0x00000044u, 0x0000b142u, 0x0000636au, 0x0000635bu, 0x0000636eu, 0x0000635cu, 0x00006372u, 0x0000635du, 0x00006376u, 0x0000635eu, 0x0000637au, 0x0000635fu, 0x0000637fu, 0x00006360u, 0x00006383u, 0x00006361u, 0x00006387u, 0x00006362u, 0x0000638cu, 0x00006363u, 0x00006390u, 0x00006364u, 0x0000639bu, 0x00006365u, 0x000300f7u, 0x0000639du, 0x00000000u, 0x000b00fbu, 0x0000628eu, 0x0000639eu, 0x00000000u, 0x0000639fu, 0x00000001u, 0x000063a0u, 0x00000002u, 0x000063a1u, 0x00000004u, 0x000063a2u, 0x000200f8u, 0x000063a2u, 0x00050041u, 0x0000007bu, 0x00006c70u, 0x00006c60u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063b1u, 0x00006c70u, 0x00040071u, 0x00000006u, 0x000063b2u, 0x000063b1u, 0x0004007cu, 0x00000008u, 0x000063b3u, 0x000063b2u, 0x0003003eu, 0x00006357u, 0x000063b3u, 0x000200f9u, 0x0000639du, 0x000200f8u, 0x000063a1u, 0x00050041u, 0x000001c4u, 0x00006c6fu, 0x00006c63u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063aeu, 0x00006c6fu, 0x00040072u, 0x00000008u, 0x000063afu, 0x000063aeu, 0x0003003eu, 0x00006357u, 0x000063afu, 0x000200f9u, 0x0000639du, 0x000200f8u, 0x000063a0u, 0x00050041u, 0x000001c4u, 0x00006c6eu, 0x00006c62u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063abu, 0x00006c6eu, 0x00040072u, 0x00000008u, 0x000063acu, 0x000063abu, 0x0003003eu, 0x00006357u, 0x000063acu, 0x000200f9u, 0x0000639du, 0x000200f8u, 0x0000639fu, 0x00040072u, 0x00000008u, 0x000063a9u, 0x0000ab64u, 0x0003003eu, 0x00006357u, 0x000063a9u, 0x000200f9u, 0x0000639du, 0x000200f8u, 0x0000639eu, 0x00050041u, 0x0000007bu, 0x00006c6du, 0x00006c5fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063a4u, 0x00006c6du, 0x00040071u, 0x00000006u, 0x000063a5u, 0x000063a4u, 0x0004007cu, 0x00000008u, 0x000063a6u, 0x000063a5u, 0x0003003eu, 0x00006357u, 0x000063a6u, 0x000200f9u, 0x0000639du, 0x000200f8u, 0x0000639du, 0x000d00f5u, 0x00000008u, 0x0000b143u, 0x000063a6u, 0x0000639eu, 0x000063a9u, 0x0000639fu, 0x000063acu, 0x000063a0u, 0x000063afu, 0x000063a1u, 0x000063b3u, 0x000063a2u, 0x00050051u, 0x00000008u, 0x000063b6u, 0x0000b142u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000063b7u, 0x0000b142u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000063b8u, 0x0000b142u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000063b9u, 0x000063b6u, 0x000063b7u, 0x000063b8u, 0x0000b143u, 0x0003003eu, 0x00006358u, 0x000063b9u, 0x0003003eu, 0x00006262u, 0x000063b9u, 0x00050041u, 0x0000007bu, 0x00006291u, 0x00002169u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006292u, 0x00006291u, 0x00040071u, 0x00000006u, 0x00006293u, 0x00006292u, 0x0004007cu, 0x00000008u, 0x00006294u, 0x00006293u, 0x00050041u, 0x0000007bu, 0x00006295u, 0x0000216au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006296u, 0x00006295u, 0x00040071u, 0x00000006u, 0x00006297u, 0x00006296u, 0x0004007cu, 0x00000008u, 0x00006298u, 0x00006297u, 0x0003003eu, 0x00006c71u, 0x0000296au, 0x0003003eu, 0x00006c72u, 0x000023b0u, 0x0003003eu, 0x00006c73u, 0x00001db1u, 0x0003003eu, 0x00006c74u, 0x0000986bu, 0x0003003eu, 0x00006c75u, 0x0000aab7u, 0x0003003eu, 0x00006268u, 0x00006294u, 0x0003003eu, 0x00006269u, 0x00006298u, 0x000300f7u, 0x000063beu, 0x00000000u, 0x000d00fbu, 0x00006294u, 0x000063bfu, 0x00000000u, 0x000063c0u, 0x00000001u, 0x000063c1u, 0x00000002u, 0x000063c2u, 0x00000004u, 0x000063c3u, 0x00000006u, 0x000063c4u, 0x000200f8u, 0x000063c4u, 0x0003003eu, 0x000063bau, 0x00001983u, 0x000200f9u, 0x000063beu, 0x000200f8u, 0x000063c3u, 0x0004003du, 0x00000010u, 0x000063d7u, 0x00006c72u, 0x0008004fu, 0x00000047u, 0x000063d8u, 0x000063d7u, 0x000063d7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000063d9u, 0x000063d8u, 0x0004007cu, 0x00000044u, 0x000063dau, 0x000063d9u, 0x0003003eu, 0x000063bau, 0x000063dau, 0x000200f9u, 0x000063beu, 0x000200f8u, 0x000063c2u, 0x0004003du, 0x00000013u, 0x000063d3u, 0x00006c75u, 0x0008004fu, 0x000004b6u, 0x000063d4u, 0x000063d3u, 0x000063d3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000063d5u, 0x000063d4u, 0x0003003eu, 0x000063bau, 0x000063d5u, 0x000200f9u, 0x000063beu, 0x000200f8u, 0x000063c1u, 0x0004003du, 0x00000013u, 0x000063cfu, 0x00006c74u, 0x0008004fu, 0x000004b6u, 0x000063d0u, 0x000063cfu, 0x000063cfu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000063d1u, 0x000063d0u, 0x0003003eu, 0x000063bau, 0x000063d1u, 0x000200f9u, 0x000063beu, 0x000200f8u, 0x000063c0u, 0x0004003du, 0x00000013u, 0x000063cbu, 0x00006c73u, 0x0008004fu, 0x000004b6u, 0x000063ccu, 0x000063cbu, 0x000063cbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000063cdu, 0x000063ccu, 0x0003003eu, 0x000063bau, 0x000063cdu, 0x000200f9u, 0x000063beu, 0x000200f8u, 0x000063bfu, 0x0004003du, 0x00000010u, 0x000063c6u, 0x00006c71u, 0x0008004fu, 0x00000047u, 0x000063c7u, 0x000063c6u, 0x000063c6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000063c8u, 0x000063c7u, 0x0004007cu, 0x00000044u, 0x000063c9u, 0x000063c8u, 0x0003003eu, 0x000063bau, 0x000063c9u, 0x000200f9u, 0x000063beu, 0x000200f8u, 0x000063beu, 0x000f00f5u, 0x00000044u, 0x0000b15au, 0x000063c9u, 0x000063bfu, 0x000063cdu, 0x000063c0u, 0x000063d1u, 0x000063c1u, 0x000063d5u, 0x000063c2u, 0x000063dau, 0x000063c3u, 0x00001983u, 0x000063c4u, 0x000300f7u, 0x000063dcu, 0x00000000u, 0x000d00fbu, 0x00006298u, 0x000063ddu, 0x00000000u, 0x000063deu, 0x00000001u, 0x000063dfu, 0x00000002u, 0x000063e0u, 0x00000004u, 0x000063e1u, 0x00000006u, 0x000063e2u, 0x000200f8u, 0x000063e2u, 0x0003003eu, 0x000063bbu, 0x00001982u, 0x000200f9u, 0x000063dcu, 0x000200f8u, 0x000063e1u, 0x00050041u, 0x0000007bu, 0x00006c7fu, 0x00006c72u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063f1u, 0x00006c7fu, 0x00040071u, 0x00000006u, 0x000063f2u, 0x000063f1u, 0x0004007cu, 0x00000008u, 0x000063f3u, 0x000063f2u, 0x0003003eu, 0x000063bbu, 0x000063f3u, 0x000200f9u, 0x000063dcu, 0x000200f8u, 0x000063e0u, 0x00050041u, 0x000001c4u, 0x00006c7eu, 0x00006c75u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063eeu, 0x00006c7eu, 0x00040072u, 0x00000008u, 0x000063efu, 0x000063eeu, 0x0003003eu, 0x000063bbu, 0x000063efu, 0x000200f9u, 0x000063dcu, 0x000200f8u, 0x000063dfu, 0x00050041u, 0x000001c4u, 0x00006c7du, 0x00006c74u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063ebu, 0x00006c7du, 0x00040072u, 0x00000008u, 0x000063ecu, 0x000063ebu, 0x0003003eu, 0x000063bbu, 0x000063ecu, 0x000200f9u, 0x000063dcu, 0x000200f8u, 0x000063deu, 0x00050041u, 0x000001c4u, 0x00006c7cu, 0x00006c73u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063e8u, 0x00006c7cu, 0x00040072u, 0x00000008u, 0x000063e9u, 0x000063e8u, 0x0003003eu, 0x000063bbu, 0x000063e9u, 0x000200f9u, 0x000063dcu, 0x000200f8u, 0x000063ddu, 0x00050041u, 0x0000007bu, 0x00006c7bu, 0x00006c71u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063e4u, 0x00006c7bu, 0x00040071u, 0x00000006u, 0x000063e5u, 0x000063e4u, 0x0004007cu, 0x00000008u, 0x000063e6u, 0x000063e5u, 0x0003003eu, 0x000063bbu, 0x000063e6u, 0x000200f9u, 0x000063dcu, 0x000200f8u, 0x000063dcu, 0x000f00f5u, 0x00000008u, 0x0000b15bu, 0x000063e6u, 0x000063ddu, 0x000063e9u, 0x000063deu, 0x000063ecu, 0x000063dfu, 0x000063efu, 0x000063e0u, 0x000063f3u, 0x000063e1u, 0x00001982u, 0x000063e2u, 0x00050051u, 0x00000008u, 0x000063f6u, 0x0000b15au, 0x00000000u, 0x00050051u, 0x00000008u, 0x000063f7u, 0x0000b15au, 0x00000001u, 0x00050051u, 0x00000008u, 0x000063f8u, 0x0000b15au, 0x00000002u, 0x00070050u, 0x00000009u, 0x000063f9u, 0x000063f6u, 0x000063f7u, 0x000063f8u, 0x0000b15bu, 0x0003003eu, 0x000063bcu, 0x000063f9u, 0x0003003eu, 0x00006266u, 0x000063f9u, 0x0003003eu, 0x0000626bu, 0x0000630au, 0x0003003eu, 0x0000626cu, 0x00006355u, 0x0003003eu, 0x0000626du, 0x000063b9u, 0x0003003eu, 0x0000626eu, 0x000063f9u, 0x000600cau, 0x00000009u, 0x00006400u, 0x000063b9u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000626du, 0x00006400u, 0x0003003eu, 0x000063fau, 0x0000630au, 0x00050082u, 0x00000009u, 0x00006419u, 0x0000630au, 0x0000f375u, 0x000600cau, 0x00000009u, 0x0000641au, 0x00006419u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000641cu, 0x0000641au, 0x0000f375u, 0x0003003eu, 0x00006416u, 0x0000641cu, 0x0003003eu, 0x0000626bu, 0x0000641cu, 0x0003003eu, 0x000063fbu, 0x00006355u, 0x00050082u, 0x00000009u, 0x00006420u, 0x00006355u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x00006421u, 0x00006420u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006423u, 0x00006421u, 0x0000f375u, 0x0003003eu, 0x0000641du, 0x00006423u, 0x0003003eu, 0x0000626cu, 0x00006423u, 0x0003003eu, 0x000063fcu, 0x000063f9u, 0x00050082u, 0x00000009u, 0x00006427u, 0x000063f9u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x00006428u, 0x00006427u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000642au, 0x00006428u, 0x0000f375u, 0x0003003eu, 0x00006424u, 0x0000642au, 0x0003003eu, 0x0000626eu, 0x0000642au, 0x00050082u, 0x00000009u, 0x00006409u, 0x0000641cu, 0x00006423u, 0x00050084u, 0x00000009u, 0x0000640bu, 0x00006409u, 0x00006400u, 0x0003003eu, 0x000063fdu, 0x0000640bu, 0x00050080u, 0x00000009u, 0x0000640eu, 0x0000640bu, 0x0000f375u, 0x0003003eu, 0x000063fdu, 0x0000640eu, 0x000500c3u, 0x00000009u, 0x00006411u, 0x0000640eu, 0x0000f380u, 0x00040072u, 0x00000013u, 0x00006412u, 0x00006411u, 0x00040072u, 0x00000013u, 0x00006414u, 0x0000642au, 0x00050080u, 0x00000013u, 0x00006415u, 0x00006412u, 0x00006414u, 0x0003003eu, 0x000063feu, 0x00006415u, 0x0003003eu, 0x0000626au, 0x00006415u, 0x0004003du, 0x00000013u, 0x000062a0u, 0x0000626au, 0x00040072u, 0x00000009u, 0x000062a1u, 0x000062a0u, 0x0003003eu, 0x0000626fu, 0x000062a1u, 0x00050082u, 0x00000009u, 0x0000642eu, 0x000062a1u, 0x0000f375u, 0x0003003eu, 0x0000626fu, 0x0000642eu, 0x000600cau, 0x00000009u, 0x00006430u, 0x0000642eu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000626fu, 0x00006430u, 0x00050080u, 0x00000009u, 0x00006433u, 0x00006430u, 0x0000f375u, 0x0003003eu, 0x0000626fu, 0x00006433u, 0x0008000cu, 0x00000009u, 0x00006435u, 0x00000001u, 0x0000002du, 0x00006433u, 0x00000afdu, 0x00000afeu, 0x00040072u, 0x00000013u, 0x00006436u, 0x00006435u, 0x0003003eu, 0x0000642bu, 0x00006436u, 0x0003003eu, 0x0000626au, 0x00006436u, 0x00050041u, 0x000001c4u, 0x000062a3u, 0x0000626au, 0x00000464u, 0x0004003du, 0x00000012u, 0x000062a4u, 0x000062a3u, 0x00040072u, 0x00000008u, 0x000062a5u, 0x000062a4u, 0x0004003du, 0x00000012u, 0x000062a7u, 0x000062a3u, 0x00040072u, 0x00000008u, 0x000062a8u, 0x000062a7u, 0x00050080u, 0x00000008u, 0x000062a9u, 0x000062a8u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x000062aau, 0x000062a9u, 0x0000025du, 0x00050080u, 0x00000008u, 0x000062abu, 0x000062a5u, 0x000062aau, 0x0003003eu, 0x00006270u, 0x000062abu, 0x000300f7u, 0x000062adu, 0x00000000u, 0x000400fau, 0x000021ccu, 0x000062aeu, 0x000062afu, 0x000200f8u, 0x000062afu, 0x000500c4u, 0x00000008u, 0x000062b8u, 0x00002274u, 0x00000236u, 0x0003003eu, 0x00006271u, 0x000062b8u, 0x000200f9u, 0x000062adu, 0x000200f8u, 0x000062aeu, 0x00050084u, 0x00000008u, 0x000062b2u, 0x000062abu, 0x00002274u, 0x00050080u, 0x00000008u, 0x000062b3u, 0x000062b2u, 0x00000233u, 0x000500c3u, 0x00000008u, 0x000062b4u, 0x000062b3u, 0x00000230u, 0x0003003eu, 0x00006271u, 0x000062b4u, 0x000500c3u, 0x00000008u, 0x000062b6u, 0x000062b4u, 0x00000236u, 0x0003003eu, 0x0000216cu, 0x000062b6u, 0x000200f9u, 0x000062adu, 0x000200f8u, 0x000062adu, 0x000700f5u, 0x00000008u, 0x0000b18eu, 0x000062b6u, 0x000062aeu, 0x00002274u, 0x000062afu, 0x000700f5u, 0x00000008u, 0x0000b18bu, 0x000062b4u, 0x000062aeu, 0x000062b8u, 0x000062afu, 0x000300f7u, 0x000062bau, 0x00000000u, 0x000400fau, 0x000021cfu, 0x000062bbu, 0x000062bcu, 0x000200f8u, 0x000062bcu, 0x00050080u, 0x00000008u, 0x000062c0u, 0x000062abu, 0x0000a5a1u, 0x0003003eu, 0x00006270u, 0x000062c0u, 0x000200f9u, 0x000062bau, 0x000200f8u, 0x000062bbu, 0x0003003eu, 0x00006270u, 0x0000b18bu, 0x000200f9u, 0x000062bau, 0x000200f8u, 0x000062bau, 0x000700f5u, 0x00000008u, 0x0000b18cu, 0x0000b18bu, 0x000062bbu, 0x000062c0u, 0x000062bcu, 0x0008000cu, 0x00000008u, 0x000062c2u, 0x00000001u, 0x0000002du, 0x0000b18cu, 0x00000220u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x000062c3u, 0x000062c2u, 0x0003003eu, 0x000062a3u, 0x000062c3u, 0x0004003du, 0x00000013u, 0x000062c5u, 0x0000626au, 0x0003003eu, 0x00006272u, 0x000062c5u, 0x0003003eu, 0x000020efu, 0x0000b18eu, 0x00040072u, 0x00000b07u, 0x000023bfu, 0x000062c5u, 0x0004007cu, 0x00000010u, 0x000023c0u, 0x000023bfu, 0x0003003eu, 0x0000215fu, 0x000023c0u, 0x00050041u, 0x0000007bu, 0x000023c1u, 0x0000215fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000023c2u, 0x000023c1u, 0x0003003eu, 0x00002154u, 0x000023c2u, 0x000200f9u, 0x0000236eu, 0x000200f8u, 0x0000236fu, 0x0004003du, 0x00000010u, 0x00002379u, 0x000020f4u, 0x0004003du, 0x00000011u, 0x00005e9bu, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00005e9cu, 0x00005e9bu, 0x00000334u, 0x000500c4u, 0x00000011u, 0x00005e9du, 0x00005e9cu, 0x00000336u, 0x000500c5u, 0x00000011u, 0x00005e9eu, 0x00005e9du, 0x00000338u, 0x0004007cu, 0x00000012u, 0x00005e9fu, 0x00005e9eu, 0x0003003eu, 0x00005e9au, 0x00005e9fu, 0x000d0050u, 0x000001e4u, 0x0000237eu, 0x0000295cu, 0x0000295eu, 0x00002960u, 0x00002962u, 0x00002379u, 0x00001db1u, 0x0000986bu, 0x0000aab7u, 0x0000ab64u, 0x00005e9fu, 0x0003003eu, 0x00007bc6u, 0x0000295cu, 0x0003003eu, 0x00007bc7u, 0x0000295eu, 0x0003003eu, 0x00007bc8u, 0x00002960u, 0x0003003eu, 0x00007bc9u, 0x00002962u, 0x0003003eu, 0x00007bcau, 0x00002379u, 0x0003003eu, 0x00007bcbu, 0x00001db1u, 0x0003003eu, 0x00007bccu, 0x0000986bu, 0x0003003eu, 0x00007bcdu, 0x0000aab7u, 0x0003003eu, 0x00007bceu, 0x0000ab64u, 0x0003003eu, 0x00007bcfu, 0x00005e9fu, 0x0003003eu, 0x00007bf0u, 0x0000295cu, 0x0003003eu, 0x00007bf1u, 0x0000295eu, 0x0003003eu, 0x00007bf2u, 0x00002960u, 0x0003003eu, 0x00007bf3u, 0x00002962u, 0x0003003eu, 0x00007bf4u, 0x00002379u, 0x0003003eu, 0x00007bf5u, 0x00001db1u, 0x0003003eu, 0x00007bf6u, 0x0000986bu, 0x0003003eu, 0x00007bf7u, 0x0000aab7u, 0x0003003eu, 0x00007bf8u, 0x0000ab64u, 0x0003003eu, 0x00007bf9u, 0x00005e9fu, 0x0003003eu, 0x00002156u, 0x0000242fu, 0x0003003eu, 0x00002157u, 0x00002431u, 0x0003003eu, 0x00002158u, 0x0000a5a1u, 0x0003003eu, 0x00002159u, 0x00002274u, 0x0003003eu, 0x0000215au, 0x000021ccu, 0x0003003eu, 0x0000215bu, 0x000021cfu, 0x0003003eu, 0x0000215cu, 0x000021edu, 0x00050041u, 0x0000007bu, 0x00005ebau, 0x00002156u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00005ebbu, 0x00005ebau, 0x00040071u, 0x00000006u, 0x00005ebcu, 0x00005ebbu, 0x0004007cu, 0x00000008u, 0x00005ebdu, 0x00005ebcu, 0x00050041u, 0x0000007bu, 0x00005ebeu, 0x00002157u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00005ebfu, 0x00005ebeu, 0x00040071u, 0x00000006u, 0x00005ec0u, 0x00005ebfu, 0x0004007cu, 0x00000008u, 0x00005ec1u, 0x00005ec0u, 0x0003003eu, 0x00006cc3u, 0x0000295cu, 0x0003003eu, 0x00006cc4u, 0x00002379u, 0x0003003eu, 0x00006cc5u, 0x00001db1u, 0x0003003eu, 0x00006cc6u, 0x0000986bu, 0x0003003eu, 0x00006cc7u, 0x0000aab7u, 0x0003003eu, 0x00006cc8u, 0x00005e9fu, 0x0003003eu, 0x00005ea2u, 0x00005ebdu, 0x0003003eu, 0x00005ea3u, 0x00005ec1u, 0x000300f7u, 0x00005f10u, 0x00000000u, 0x000f00fbu, 0x00005ebdu, 0x00005f11u, 0x00000000u, 0x00005f12u, 0x00000001u, 0x00005f13u, 0x00000002u, 0x00005f14u, 0x00000004u, 0x00005f15u, 0x00000007u, 0x00005f16u, 0x00000006u, 0x00005f17u, 0x000200f8u, 0x00005f17u, 0x0003003eu, 0x00005f0cu, 0x00001983u, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f16u, 0x00040072u, 0x00000008u, 0x00005f30u, 0x00005e9fu, 0x00060050u, 0x00000044u, 0x00005f31u, 0x00005f30u, 0x00005f30u, 0x00005f30u, 0x0003003eu, 0x00005f0cu, 0x00005f31u, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f15u, 0x0004003du, 0x00000010u, 0x00005f2au, 0x00006cc4u, 0x0008004fu, 0x00000047u, 0x00005f2bu, 0x00005f2au, 0x00005f2au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f2cu, 0x00005f2bu, 0x0004007cu, 0x00000044u, 0x00005f2du, 0x00005f2cu, 0x0003003eu, 0x00005f0cu, 0x00005f2du, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f14u, 0x0004003du, 0x00000013u, 0x00005f26u, 0x00006cc7u, 0x0008004fu, 0x000004b6u, 0x00005f27u, 0x00005f26u, 0x00005f26u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f28u, 0x00005f27u, 0x0003003eu, 0x00005f0cu, 0x00005f28u, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f13u, 0x0004003du, 0x00000013u, 0x00005f22u, 0x00006cc6u, 0x0008004fu, 0x000004b6u, 0x00005f23u, 0x00005f22u, 0x00005f22u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f24u, 0x00005f23u, 0x0003003eu, 0x00005f0cu, 0x00005f24u, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f12u, 0x0004003du, 0x00000013u, 0x00005f1eu, 0x00006cc5u, 0x0008004fu, 0x000004b6u, 0x00005f1fu, 0x00005f1eu, 0x00005f1eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f20u, 0x00005f1fu, 0x0003003eu, 0x00005f0cu, 0x00005f20u, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f11u, 0x0004003du, 0x00000010u, 0x00005f19u, 0x00006cc3u, 0x0008004fu, 0x00000047u, 0x00005f1au, 0x00005f19u, 0x00005f19u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f1bu, 0x00005f1au, 0x0004007cu, 0x00000044u, 0x00005f1cu, 0x00005f1bu, 0x0003003eu, 0x00005f0cu, 0x00005f1cu, 0x000200f9u, 0x00005f10u, 0x000200f8u, 0x00005f10u, 0x001100f5u, 0x00000044u, 0x0000b82eu, 0x00005f1cu, 0x00005f11u, 0x00005f20u, 0x00005f12u, 0x00005f24u, 0x00005f13u, 0x00005f28u, 0x00005f14u, 0x00005f2du, 0x00005f15u, 0x00005f31u, 0x00005f16u, 0x00001983u, 0x00005f17u, 0x000300f7u, 0x00005f33u, 0x00000000u, 0x000d00fbu, 0x00005ec1u, 0x00005f34u, 0x00000000u, 0x00005f35u, 0x00000001u, 0x00005f36u, 0x00000002u, 0x00005f37u, 0x00000004u, 0x00005f38u, 0x00000006u, 0x00005f39u, 0x000200f8u, 0x00005f39u, 0x0003003eu, 0x00005f0du, 0x00001982u, 0x000200f9u, 0x00005f33u, 0x000200f8u, 0x00005f38u, 0x00050041u, 0x0000007bu, 0x00006cd3u, 0x00006cc4u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f48u, 0x00006cd3u, 0x00040071u, 0x00000006u, 0x00005f49u, 0x00005f48u, 0x0004007cu, 0x00000008u, 0x00005f4au, 0x00005f49u, 0x0003003eu, 0x00005f0du, 0x00005f4au, 0x000200f9u, 0x00005f33u, 0x000200f8u, 0x00005f37u, 0x00050041u, 0x000001c4u, 0x00006cd2u, 0x00006cc7u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f45u, 0x00006cd2u, 0x00040072u, 0x00000008u, 0x00005f46u, 0x00005f45u, 0x0003003eu, 0x00005f0du, 0x00005f46u, 0x000200f9u, 0x00005f33u, 0x000200f8u, 0x00005f36u, 0x00050041u, 0x000001c4u, 0x00006cd1u, 0x00006cc6u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f42u, 0x00006cd1u, 0x00040072u, 0x00000008u, 0x00005f43u, 0x00005f42u, 0x0003003eu, 0x00005f0du, 0x00005f43u, 0x000200f9u, 0x00005f33u, 0x000200f8u, 0x00005f35u, 0x00050041u, 0x000001c4u, 0x00006cd0u, 0x00006cc5u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f3fu, 0x00006cd0u, 0x00040072u, 0x00000008u, 0x00005f40u, 0x00005f3fu, 0x0003003eu, 0x00005f0du, 0x00005f40u, 0x000200f9u, 0x00005f33u, 0x000200f8u, 0x00005f34u, 0x00050041u, 0x0000007bu, 0x00006ccfu, 0x00006cc3u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f3bu, 0x00006ccfu, 0x00040071u, 0x00000006u, 0x00005f3cu, 0x00005f3bu, 0x0004007cu, 0x00000008u, 0x00005f3du, 0x00005f3cu, 0x0003003eu, 0x00005f0du, 0x00005f3du, 0x000200f9u, 0x00005f33u, 0x000200f8u, 0x00005f33u, 0x000f00f5u, 0x00000008u, 0x0000b82fu, 0x00005f3du, 0x00005f34u, 0x00005f40u, 0x00005f35u, 0x00005f43u, 0x00005f36u, 0x00005f46u, 0x00005f37u, 0x00005f4au, 0x00005f38u, 0x00001982u, 0x00005f39u, 0x00050051u, 0x00000008u, 0x00005f4du, 0x0000b82eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f4eu, 0x0000b82eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f4fu, 0x0000b82eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005f50u, 0x00005f4du, 0x00005f4eu, 0x00005f4fu, 0x0000b82fu, 0x0003003eu, 0x00005f0eu, 0x00005f50u, 0x0003003eu, 0x00005ea0u, 0x00005f50u, 0x00050041u, 0x0000007bu, 0x00005ec4u, 0x00002156u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005ec5u, 0x00005ec4u, 0x00040071u, 0x00000006u, 0x00005ec6u, 0x00005ec5u, 0x0004007cu, 0x00000008u, 0x00005ec7u, 0x00005ec6u, 0x00050041u, 0x0000007bu, 0x00005ec8u, 0x00002157u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005ec9u, 0x00005ec8u, 0x00040071u, 0x00000006u, 0x00005ecau, 0x00005ec9u, 0x0004007cu, 0x00000008u, 0x00005ecbu, 0x00005ecau, 0x0003003eu, 0x00006cd4u, 0x0000295eu, 0x0003003eu, 0x00006cd5u, 0x00002379u, 0x0003003eu, 0x00006cd6u, 0x00001db1u, 0x0003003eu, 0x00006cd7u, 0x0000986bu, 0x0003003eu, 0x00006cd8u, 0x0000aab7u, 0x0003003eu, 0x00005ea6u, 0x00005ec7u, 0x0003003eu, 0x00005ea7u, 0x00005ecbu, 0x000300f7u, 0x00005f55u, 0x00000000u, 0x000d00fbu, 0x00005ec7u, 0x00005f56u, 0x00000000u, 0x00005f57u, 0x00000001u, 0x00005f58u, 0x00000002u, 0x00005f59u, 0x00000004u, 0x00005f5au, 0x00000007u, 0x00005f5bu, 0x000200f8u, 0x00005f5bu, 0x00050041u, 0x0000007bu, 0x00006cdeu, 0x00006cd4u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005f73u, 0x00006cdeu, 0x00040071u, 0x00000006u, 0x00005f74u, 0x00005f73u, 0x0004007cu, 0x00000008u, 0x00005f75u, 0x00005f74u, 0x000500c4u, 0x00000008u, 0x00005f76u, 0x00005f75u, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006cdfu, 0x00006cd4u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005f78u, 0x00006cdfu, 0x00040071u, 0x00000006u, 0x00005f79u, 0x00005f78u, 0x0004007cu, 0x00000008u, 0x00005f7au, 0x00005f79u, 0x000500c5u, 0x00000008u, 0x00005f7bu, 0x00005f76u, 0x00005f7au, 0x00060050u, 0x00000044u, 0x00005f7cu, 0x00005f7bu, 0x00005f7bu, 0x00005f7bu, 0x0003003eu, 0x00005f51u, 0x00005f7cu, 0x000200f9u, 0x00005f55u, 0x000200f8u, 0x00005f5au, 0x0004003du, 0x00000010u, 0x00005f6eu, 0x00006cd5u, 0x0008004fu, 0x00000047u, 0x00005f6fu, 0x00005f6eu, 0x00005f6eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f70u, 0x00005f6fu, 0x0004007cu, 0x00000044u, 0x00005f71u, 0x00005f70u, 0x0003003eu, 0x00005f51u, 0x00005f71u, 0x000200f9u, 0x00005f55u, 0x000200f8u, 0x00005f59u, 0x0004003du, 0x00000013u, 0x00005f6au, 0x00006cd8u, 0x0008004fu, 0x000004b6u, 0x00005f6bu, 0x00005f6au, 0x00005f6au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f6cu, 0x00005f6bu, 0x0003003eu, 0x00005f51u, 0x00005f6cu, 0x000200f9u, 0x00005f55u, 0x000200f8u, 0x00005f58u, 0x0004003du, 0x00000013u, 0x00005f66u, 0x00006cd7u, 0x0008004fu, 0x000004b6u, 0x00005f67u, 0x00005f66u, 0x00005f66u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f68u, 0x00005f67u, 0x0003003eu, 0x00005f51u, 0x00005f68u, 0x000200f9u, 0x00005f55u, 0x000200f8u, 0x00005f57u, 0x0004003du, 0x00000013u, 0x00005f62u, 0x00006cd6u, 0x0008004fu, 0x000004b6u, 0x00005f63u, 0x00005f62u, 0x00005f62u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f64u, 0x00005f63u, 0x0003003eu, 0x00005f51u, 0x00005f64u, 0x000200f9u, 0x00005f55u, 0x000200f8u, 0x00005f56u, 0x0004003du, 0x00000010u, 0x00005f5du, 0x00006cd4u, 0x0008004fu, 0x00000047u, 0x00005f5eu, 0x00005f5du, 0x00005f5du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f5fu, 0x00005f5eu, 0x0004007cu, 0x00000044u, 0x00005f60u, 0x00005f5fu, 0x0003003eu, 0x00005f51u, 0x00005f60u, 0x000200f9u, 0x00005f55u, 0x000200f8u, 0x00005f55u, 0x000f00f5u, 0x00000044u, 0x0000b846u, 0x00005f60u, 0x00005f56u, 0x00005f64u, 0x00005f57u, 0x00005f68u, 0x00005f58u, 0x00005f6cu, 0x00005f59u, 0x00005f71u, 0x00005f5au, 0x00005f7cu, 0x00005f5bu, 0x000300f7u, 0x00005f7eu, 0x00000000u, 0x000d00fbu, 0x00005ecbu, 0x00005f7fu, 0x00000000u, 0x00005f80u, 0x00000001u, 0x00005f81u, 0x00000002u, 0x00005f82u, 0x00000004u, 0x00005f83u, 0x00000006u, 0x00005f84u, 0x000200f8u, 0x00005f84u, 0x0003003eu, 0x00005f52u, 0x00001982u, 0x000200f9u, 0x00005f7eu, 0x000200f8u, 0x00005f83u, 0x00050041u, 0x0000007bu, 0x00006ce4u, 0x00006cd5u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f93u, 0x00006ce4u, 0x00040071u, 0x00000006u, 0x00005f94u, 0x00005f93u, 0x0004007cu, 0x00000008u, 0x00005f95u, 0x00005f94u, 0x0003003eu, 0x00005f52u, 0x00005f95u, 0x000200f9u, 0x00005f7eu, 0x000200f8u, 0x00005f82u, 0x00050041u, 0x000001c4u, 0x00006ce3u, 0x00006cd8u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f90u, 0x00006ce3u, 0x00040072u, 0x00000008u, 0x00005f91u, 0x00005f90u, 0x0003003eu, 0x00005f52u, 0x00005f91u, 0x000200f9u, 0x00005f7eu, 0x000200f8u, 0x00005f81u, 0x00050041u, 0x000001c4u, 0x00006ce2u, 0x00006cd7u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f8du, 0x00006ce2u, 0x00040072u, 0x00000008u, 0x00005f8eu, 0x00005f8du, 0x0003003eu, 0x00005f52u, 0x00005f8eu, 0x000200f9u, 0x00005f7eu, 0x000200f8u, 0x00005f80u, 0x00050041u, 0x000001c4u, 0x00006ce1u, 0x00006cd6u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f8au, 0x00006ce1u, 0x00040072u, 0x00000008u, 0x00005f8bu, 0x00005f8au, 0x0003003eu, 0x00005f52u, 0x00005f8bu, 0x000200f9u, 0x00005f7eu, 0x000200f8u, 0x00005f7fu, 0x00050041u, 0x0000007bu, 0x00006ce0u, 0x00006cd4u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f86u, 0x00006ce0u, 0x00040071u, 0x00000006u, 0x00005f87u, 0x00005f86u, 0x0004007cu, 0x00000008u, 0x00005f88u, 0x00005f87u, 0x0003003eu, 0x00005f52u, 0x00005f88u, 0x000200f9u, 0x00005f7eu, 0x000200f8u, 0x00005f7eu, 0x000f00f5u, 0x00000008u, 0x0000b847u, 0x00005f88u, 0x00005f7fu, 0x00005f8bu, 0x00005f80u, 0x00005f8eu, 0x00005f81u, 0x00005f91u, 0x00005f82u, 0x00005f95u, 0x00005f83u, 0x00001982u, 0x00005f84u, 0x00050051u, 0x00000008u, 0x00005f98u, 0x0000b846u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f99u, 0x0000b846u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f9au, 0x0000b846u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005f9bu, 0x00005f98u, 0x00005f99u, 0x00005f9au, 0x0000b847u, 0x0003003eu, 0x00005f53u, 0x00005f9bu, 0x0003003eu, 0x00005ea4u, 0x00005f9bu, 0x00050041u, 0x0000007bu, 0x00005eceu, 0x00002156u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005ecfu, 0x00005eceu, 0x00040071u, 0x00000006u, 0x00005ed0u, 0x00005ecfu, 0x0004007cu, 0x00000008u, 0x00005ed1u, 0x00005ed0u, 0x00050041u, 0x0000007bu, 0x00005ed2u, 0x00002157u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005ed3u, 0x00005ed2u, 0x00040071u, 0x00000006u, 0x00005ed4u, 0x00005ed3u, 0x0004007cu, 0x00000008u, 0x00005ed5u, 0x00005ed4u, 0x0003003eu, 0x00006ce5u, 0x00002960u, 0x0003003eu, 0x00006ce6u, 0x00002379u, 0x0003003eu, 0x00006ce7u, 0x00001db1u, 0x0003003eu, 0x00006ce8u, 0x0000986bu, 0x0003003eu, 0x00006ce9u, 0x0000aab7u, 0x0003003eu, 0x00006ceau, 0x0000ab64u, 0x0003003eu, 0x00005eaau, 0x00005ed1u, 0x0003003eu, 0x00005eabu, 0x00005ed5u, 0x000300f7u, 0x00005fa0u, 0x00000000u, 0x001700fbu, 0x00005ed1u, 0x00005fa1u, 0x00000000u, 0x00005fa2u, 0x00000007u, 0x00005fa3u, 0x00000001u, 0x00005fa4u, 0x00000002u, 0x00005fa5u, 0x00000004u, 0x00005fa6u, 0x00000008u, 0x00005fa7u, 0x00000009u, 0x00005fa8u, 0x0000000bu, 0x00005fa9u, 0x0000000du, 0x00005faau, 0x0000000fu, 0x00005fabu, 0x000200f8u, 0x00005fabu, 0x00050041u, 0x0000007bu, 0x00006cf1u, 0x00006ce5u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005fd8u, 0x00006cf1u, 0x00040071u, 0x00000006u, 0x00005fd9u, 0x00005fd8u, 0x0004007cu, 0x00000008u, 0x00005fdau, 0x00005fd9u, 0x000500c4u, 0x00000008u, 0x00005fdbu, 0x00005fdau, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006cf2u, 0x00006ce5u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005fddu, 0x00006cf2u, 0x00040071u, 0x00000006u, 0x00005fdeu, 0x00005fddu, 0x0004007cu, 0x00000008u, 0x00005fdfu, 0x00005fdeu, 0x000500c5u, 0x00000008u, 0x00005fe0u, 0x00005fdbu, 0x00005fdfu, 0x00060050u, 0x00000044u, 0x00005fe1u, 0x00005fe0u, 0x00005fe0u, 0x00005fe0u, 0x0003003eu, 0x00005f9cu, 0x00005fe1u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005faau, 0x00040072u, 0x00000008u, 0x00005fd5u, 0x0000ab64u, 0x00060050u, 0x00000044u, 0x00005fd6u, 0x00005fd5u, 0x00005fd5u, 0x00005fd5u, 0x0003003eu, 0x00005f9cu, 0x00005fd6u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa9u, 0x0004003du, 0x00000010u, 0x00005fcfu, 0x00006ce6u, 0x0008004fu, 0x00000047u, 0x00005fd0u, 0x00005fcfu, 0x00005fcfu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x00005fd1u, 0x00005fd0u, 0x0004007cu, 0x00000044u, 0x00005fd2u, 0x00005fd1u, 0x0003003eu, 0x00005f9cu, 0x00005fd2u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa8u, 0x0004003du, 0x00000013u, 0x00005fcbu, 0x00006ce9u, 0x0008004fu, 0x000004b6u, 0x00005fccu, 0x00005fcbu, 0x00005fcbu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00005fcdu, 0x00005fccu, 0x0003003eu, 0x00005f9cu, 0x00005fcdu, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa7u, 0x0004003du, 0x00000013u, 0x00005fc7u, 0x00006ce8u, 0x0008004fu, 0x000004b6u, 0x00005fc8u, 0x00005fc7u, 0x00005fc7u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00005fc9u, 0x00005fc8u, 0x0003003eu, 0x00005f9cu, 0x00005fc9u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa6u, 0x0004003du, 0x00000010u, 0x00005fc2u, 0x00006ce6u, 0x0008004fu, 0x00000047u, 0x00005fc3u, 0x00005fc2u, 0x00005fc2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005fc4u, 0x00005fc3u, 0x0004007cu, 0x00000044u, 0x00005fc5u, 0x00005fc4u, 0x0003003eu, 0x00005f9cu, 0x00005fc5u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa5u, 0x0004003du, 0x00000013u, 0x00005fbeu, 0x00006ce9u, 0x0008004fu, 0x000004b6u, 0x00005fbfu, 0x00005fbeu, 0x00005fbeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005fc0u, 0x00005fbfu, 0x0003003eu, 0x00005f9cu, 0x00005fc0u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa4u, 0x0004003du, 0x00000013u, 0x00005fbau, 0x00006ce8u, 0x0008004fu, 0x000004b6u, 0x00005fbbu, 0x00005fbau, 0x00005fbau, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005fbcu, 0x00005fbbu, 0x0003003eu, 0x00005f9cu, 0x00005fbcu, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa3u, 0x00040072u, 0x00000044u, 0x00005fb8u, 0x0000f38fu, 0x0003003eu, 0x00005f9cu, 0x00005fb8u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa2u, 0x00040072u, 0x00000044u, 0x00005fb4u, 0x0000f38fu, 0x0003003eu, 0x00005f9cu, 0x00005fb4u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa1u, 0x0004003du, 0x00000010u, 0x00005fadu, 0x00006ce5u, 0x0008004fu, 0x00000047u, 0x00005faeu, 0x00005fadu, 0x00005fadu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005fafu, 0x00005faeu, 0x0004007cu, 0x00000044u, 0x00005fb0u, 0x00005fafu, 0x0003003eu, 0x00005f9cu, 0x00005fb0u, 0x000200f9u, 0x00005fa0u, 0x000200f8u, 0x00005fa0u, 0x001900f5u, 0x00000044u, 0x0000b85fu, 0x00005fb0u, 0x00005fa1u, 0x00005fb4u, 0x00005fa2u, 0x00005fb8u, 0x00005fa3u, 0x00005fbcu, 0x00005fa4u, 0x00005fc0u, 0x00005fa5u, 0x00005fc5u, 0x00005fa6u, 0x00005fc9u, 0x00005fa7u, 0x00005fcdu, 0x00005fa8u, 0x00005fd2u, 0x00005fa9u, 0x00005fd6u, 0x00005faau, 0x00005fe1u, 0x00005fabu, 0x000300f7u, 0x00005fe3u, 0x00000000u, 0x000b00fbu, 0x00005ed5u, 0x00005fe4u, 0x00000000u, 0x00005fe5u, 0x00000001u, 0x00005fe6u, 0x00000002u, 0x00005fe7u, 0x00000004u, 0x00005fe8u, 0x000200f8u, 0x00005fe8u, 0x00050041u, 0x0000007bu, 0x00006cf6u, 0x00006ce6u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005ff7u, 0x00006cf6u, 0x00040071u, 0x00000006u, 0x00005ff8u, 0x00005ff7u, 0x0004007cu, 0x00000008u, 0x00005ff9u, 0x00005ff8u, 0x0003003eu, 0x00005f9du, 0x00005ff9u, 0x000200f9u, 0x00005fe3u, 0x000200f8u, 0x00005fe7u, 0x00050041u, 0x000001c4u, 0x00006cf5u, 0x00006ce9u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005ff4u, 0x00006cf5u, 0x00040072u, 0x00000008u, 0x00005ff5u, 0x00005ff4u, 0x0003003eu, 0x00005f9du, 0x00005ff5u, 0x000200f9u, 0x00005fe3u, 0x000200f8u, 0x00005fe6u, 0x00050041u, 0x000001c4u, 0x00006cf4u, 0x00006ce8u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005ff1u, 0x00006cf4u, 0x00040072u, 0x00000008u, 0x00005ff2u, 0x00005ff1u, 0x0003003eu, 0x00005f9du, 0x00005ff2u, 0x000200f9u, 0x00005fe3u, 0x000200f8u, 0x00005fe5u, 0x00040072u, 0x00000008u, 0x00005fefu, 0x0000ab64u, 0x0003003eu, 0x00005f9du, 0x00005fefu, 0x000200f9u, 0x00005fe3u, 0x000200f8u, 0x00005fe4u, 0x00050041u, 0x0000007bu, 0x00006cf3u, 0x00006ce5u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005feau, 0x00006cf3u, 0x00040071u, 0x00000006u, 0x00005febu, 0x00005feau, 0x0004007cu, 0x00000008u, 0x00005fecu, 0x00005febu, 0x0003003eu, 0x00005f9du, 0x00005fecu, 0x000200f9u, 0x00005fe3u, 0x000200f8u, 0x00005fe3u, 0x000d00f5u, 0x00000008u, 0x0000b860u, 0x00005fecu, 0x00005fe4u, 0x00005fefu, 0x00005fe5u, 0x00005ff2u, 0x00005fe6u, 0x00005ff5u, 0x00005fe7u, 0x00005ff9u, 0x00005fe8u, 0x00050051u, 0x00000008u, 0x00005ffcu, 0x0000b85fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005ffdu, 0x0000b85fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005ffeu, 0x0000b85fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005fffu, 0x00005ffcu, 0x00005ffdu, 0x00005ffeu, 0x0000b860u, 0x0003003eu, 0x00005f9eu, 0x00005fffu, 0x0003003eu, 0x00005ea8u, 0x00005fffu, 0x00050041u, 0x0000007bu, 0x00005ed8u, 0x00002156u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005ed9u, 0x00005ed8u, 0x00040071u, 0x00000006u, 0x00005edau, 0x00005ed9u, 0x0004007cu, 0x00000008u, 0x00005edbu, 0x00005edau, 0x00050041u, 0x0000007bu, 0x00005edcu, 0x00002157u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005eddu, 0x00005edcu, 0x00040071u, 0x00000006u, 0x00005edeu, 0x00005eddu, 0x0004007cu, 0x00000008u, 0x00005edfu, 0x00005edeu, 0x0003003eu, 0x00006cf7u, 0x00002962u, 0x0003003eu, 0x00006cf8u, 0x00002379u, 0x0003003eu, 0x00006cf9u, 0x00001db1u, 0x0003003eu, 0x00006cfau, 0x0000986bu, 0x0003003eu, 0x00006cfbu, 0x0000aab7u, 0x0003003eu, 0x00005eaeu, 0x00005edbu, 0x0003003eu, 0x00005eafu, 0x00005edfu, 0x000300f7u, 0x00006004u, 0x00000000u, 0x000d00fbu, 0x00005edbu, 0x00006005u, 0x00000000u, 0x00006006u, 0x00000001u, 0x00006007u, 0x00000002u, 0x00006008u, 0x00000004u, 0x00006009u, 0x00000006u, 0x0000600au, 0x000200f8u, 0x0000600au, 0x0003003eu, 0x00006000u, 0x00001983u, 0x000200f9u, 0x00006004u, 0x000200f8u, 0x00006009u, 0x0004003du, 0x00000010u, 0x0000601du, 0x00006cf8u, 0x0008004fu, 0x00000047u, 0x0000601eu, 0x0000601du, 0x0000601du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000601fu, 0x0000601eu, 0x0004007cu, 0x00000044u, 0x00006020u, 0x0000601fu, 0x0003003eu, 0x00006000u, 0x00006020u, 0x000200f9u, 0x00006004u, 0x000200f8u, 0x00006008u, 0x0004003du, 0x00000013u, 0x00006019u, 0x00006cfbu, 0x0008004fu, 0x000004b6u, 0x0000601au, 0x00006019u, 0x00006019u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000601bu, 0x0000601au, 0x0003003eu, 0x00006000u, 0x0000601bu, 0x000200f9u, 0x00006004u, 0x000200f8u, 0x00006007u, 0x0004003du, 0x00000013u, 0x00006015u, 0x00006cfau, 0x0008004fu, 0x000004b6u, 0x00006016u, 0x00006015u, 0x00006015u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006017u, 0x00006016u, 0x0003003eu, 0x00006000u, 0x00006017u, 0x000200f9u, 0x00006004u, 0x000200f8u, 0x00006006u, 0x0004003du, 0x00000013u, 0x00006011u, 0x00006cf9u, 0x0008004fu, 0x000004b6u, 0x00006012u, 0x00006011u, 0x00006011u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006013u, 0x00006012u, 0x0003003eu, 0x00006000u, 0x00006013u, 0x000200f9u, 0x00006004u, 0x000200f8u, 0x00006005u, 0x0004003du, 0x00000010u, 0x0000600cu, 0x00006cf7u, 0x0008004fu, 0x00000047u, 0x0000600du, 0x0000600cu, 0x0000600cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000600eu, 0x0000600du, 0x0004007cu, 0x00000044u, 0x0000600fu, 0x0000600eu, 0x0003003eu, 0x00006000u, 0x0000600fu, 0x000200f9u, 0x00006004u, 0x000200f8u, 0x00006004u, 0x000f00f5u, 0x00000044u, 0x0000b877u, 0x0000600fu, 0x00006005u, 0x00006013u, 0x00006006u, 0x00006017u, 0x00006007u, 0x0000601bu, 0x00006008u, 0x00006020u, 0x00006009u, 0x00001983u, 0x0000600au, 0x000300f7u, 0x00006022u, 0x00000000u, 0x000d00fbu, 0x00005edfu, 0x00006023u, 0x00000000u, 0x00006024u, 0x00000001u, 0x00006025u, 0x00000002u, 0x00006026u, 0x00000004u, 0x00006027u, 0x00000006u, 0x00006028u, 0x000200f8u, 0x00006028u, 0x0003003eu, 0x00006001u, 0x00001982u, 0x000200f9u, 0x00006022u, 0x000200f8u, 0x00006027u, 0x00050041u, 0x0000007bu, 0x00006d05u, 0x00006cf8u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006037u, 0x00006d05u, 0x00040071u, 0x00000006u, 0x00006038u, 0x00006037u, 0x0004007cu, 0x00000008u, 0x00006039u, 0x00006038u, 0x0003003eu, 0x00006001u, 0x00006039u, 0x000200f9u, 0x00006022u, 0x000200f8u, 0x00006026u, 0x00050041u, 0x000001c4u, 0x00006d04u, 0x00006cfbu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006034u, 0x00006d04u, 0x00040072u, 0x00000008u, 0x00006035u, 0x00006034u, 0x0003003eu, 0x00006001u, 0x00006035u, 0x000200f9u, 0x00006022u, 0x000200f8u, 0x00006025u, 0x00050041u, 0x000001c4u, 0x00006d03u, 0x00006cfau, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006031u, 0x00006d03u, 0x00040072u, 0x00000008u, 0x00006032u, 0x00006031u, 0x0003003eu, 0x00006001u, 0x00006032u, 0x000200f9u, 0x00006022u, 0x000200f8u, 0x00006024u, 0x00050041u, 0x000001c4u, 0x00006d02u, 0x00006cf9u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000602eu, 0x00006d02u, 0x00040072u, 0x00000008u, 0x0000602fu, 0x0000602eu, 0x0003003eu, 0x00006001u, 0x0000602fu, 0x000200f9u, 0x00006022u, 0x000200f8u, 0x00006023u, 0x00050041u, 0x0000007bu, 0x00006d01u, 0x00006cf7u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000602au, 0x00006d01u, 0x00040071u, 0x00000006u, 0x0000602bu, 0x0000602au, 0x0004007cu, 0x00000008u, 0x0000602cu, 0x0000602bu, 0x0003003eu, 0x00006001u, 0x0000602cu, 0x000200f9u, 0x00006022u, 0x000200f8u, 0x00006022u, 0x000f00f5u, 0x00000008u, 0x0000b878u, 0x0000602cu, 0x00006023u, 0x0000602fu, 0x00006024u, 0x00006032u, 0x00006025u, 0x00006035u, 0x00006026u, 0x00006039u, 0x00006027u, 0x00001982u, 0x00006028u, 0x00050051u, 0x00000008u, 0x0000603cu, 0x0000b877u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000603du, 0x0000b877u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000603eu, 0x0000b877u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000603fu, 0x0000603cu, 0x0000603du, 0x0000603eu, 0x0000b878u, 0x0003003eu, 0x00006002u, 0x0000603fu, 0x0003003eu, 0x00005eacu, 0x0000603fu, 0x0003003eu, 0x00005eb1u, 0x00005f50u, 0x0003003eu, 0x00005eb2u, 0x00005f9bu, 0x0003003eu, 0x00005eb3u, 0x00005fffu, 0x0003003eu, 0x00005eb4u, 0x0000603fu, 0x000600cau, 0x00000009u, 0x00006046u, 0x00005fffu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00005eb3u, 0x00006046u, 0x0003003eu, 0x00006040u, 0x00005f50u, 0x00050082u, 0x00000009u, 0x0000605fu, 0x00005f50u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x00006060u, 0x0000605fu, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006062u, 0x00006060u, 0x0000f375u, 0x0003003eu, 0x0000605cu, 0x00006062u, 0x0003003eu, 0x00005eb1u, 0x00006062u, 0x0003003eu, 0x00006041u, 0x00005f9bu, 0x00050082u, 0x00000009u, 0x00006066u, 0x00005f9bu, 0x0000f375u, 0x000600cau, 0x00000009u, 0x00006067u, 0x00006066u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006069u, 0x00006067u, 0x0000f375u, 0x0003003eu, 0x00006063u, 0x00006069u, 0x0003003eu, 0x00005eb2u, 0x00006069u, 0x0003003eu, 0x00006042u, 0x0000603fu, 0x00050082u, 0x00000009u, 0x0000606du, 0x0000603fu, 0x0000f375u, 0x000600cau, 0x00000009u, 0x0000606eu, 0x0000606du, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006070u, 0x0000606eu, 0x0000f375u, 0x0003003eu, 0x0000606au, 0x00006070u, 0x0003003eu, 0x00005eb4u, 0x00006070u, 0x00050082u, 0x00000009u, 0x0000604fu, 0x00006062u, 0x00006069u, 0x00050084u, 0x00000009u, 0x00006051u, 0x0000604fu, 0x00006046u, 0x0003003eu, 0x00006043u, 0x00006051u, 0x00050080u, 0x00000009u, 0x00006054u, 0x00006051u, 0x0000f375u, 0x0003003eu, 0x00006043u, 0x00006054u, 0x000500c3u, 0x00000009u, 0x00006057u, 0x00006054u, 0x0000f380u, 0x00040072u, 0x00000013u, 0x00006058u, 0x00006057u, 0x00040072u, 0x00000013u, 0x0000605au, 0x00006070u, 0x00050080u, 0x00000013u, 0x0000605bu, 0x00006058u, 0x0000605au, 0x0003003eu, 0x00006044u, 0x0000605bu, 0x0003003eu, 0x00005eb0u, 0x0000605bu, 0x000300f7u, 0x00005ee8u, 0x00000000u, 0x000400fau, 0x000021edu, 0x00005ee9u, 0x00005eeau, 0x000200f8u, 0x00005eeau, 0x0003003eu, 0x0000215du, 0x00000388u, 0x000200f9u, 0x00005ee8u, 0x000200f8u, 0x00005ee9u, 0x00050041u, 0x000001c4u, 0x00005eebu, 0x00005eb0u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005eecu, 0x00005eebu, 0x00040072u, 0x00000008u, 0x00005eedu, 0x00005eecu, 0x0003003eu, 0x00005eb6u, 0x00005eedu, 0x00050082u, 0x00000008u, 0x00006073u, 0x00005eedu, 0x00000af3u, 0x000600cau, 0x00000008u, 0x00006074u, 0x00006073u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000008u, 0x00006075u, 0x00006074u, 0x00000af3u, 0x0008000cu, 0x00000008u, 0x00006076u, 0x00000001u, 0x0000002du, 0x00006075u, 0x00000220u, 0x0000035eu, 0x0003003eu, 0x00006071u, 0x00006076u, 0x0003003eu, 0x00005eb5u, 0x00006076u, 0x00050080u, 0x00000008u, 0x00005ef1u, 0x00006076u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00005ef2u, 0x00005ef1u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005ef3u, 0x00006076u, 0x00005ef2u, 0x0003003eu, 0x00005eb7u, 0x00005ef3u, 0x000300f7u, 0x00005ef5u, 0x00000000u, 0x000400fau, 0x000021cfu, 0x00005ef6u, 0x00005ef7u, 0x000200f8u, 0x00005ef7u, 0x00050080u, 0x00000008u, 0x00005f06u, 0x00005ef3u, 0x0000a5a1u, 0x0003003eu, 0x00005eb7u, 0x00005f06u, 0x000200f9u, 0x00005ef5u, 0x000200f8u, 0x00005ef6u, 0x000300f7u, 0x00005ef9u, 0x00000000u, 0x000400fau, 0x000021ccu, 0x00005efau, 0x00005efbu, 0x000200f8u, 0x00005efbu, 0x000500c4u, 0x00000008u, 0x00005f02u, 0x00002274u, 0x00000236u, 0x0003003eu, 0x00005eb8u, 0x00005f02u, 0x000200f9u, 0x00005ef9u, 0x000200f8u, 0x00005efau, 0x00050084u, 0x00000008u, 0x00005efeu, 0x00005ef3u, 0x00002274u, 0x00050080u, 0x00000008u, 0x00005effu, 0x00005efeu, 0x00000233u, 0x000500c3u, 0x00000008u, 0x00005f00u, 0x00005effu, 0x00000230u, 0x0003003eu, 0x00005eb8u, 0x00005f00u, 0x000200f9u, 0x00005ef9u, 0x000200f8u, 0x00005ef9u, 0x000700f5u, 0x00000008u, 0x0000b8adu, 0x00005f00u, 0x00005efau, 0x00005f02u, 0x00005efbu, 0x0003003eu, 0x00005eb7u, 0x0000b8adu, 0x000200f9u, 0x00005ef5u, 0x000200f8u, 0x00005ef5u, 0x000700f5u, 0x00000008u, 0x0000b8aeu, 0x0000b8adu, 0x00005ef9u, 0x00005f06u, 0x00005ef7u, 0x0008000cu, 0x00000008u, 0x00005f08u, 0x00000001u, 0x0000002du, 0x0000b8aeu, 0x00000220u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x00005f09u, 0x00005f08u, 0x0004007cu, 0x0000000fu, 0x00005f0au, 0x00005f09u, 0x0003003eu, 0x0000215du, 0x00005f0au, 0x000200f9u, 0x00005ee8u, 0x000200f8u, 0x00005ee8u, 0x000700f5u, 0x0000000fu, 0x0000b8afu, 0x00005f0au, 0x00005ef5u, 0x00000388u, 0x00005eeau, 0x0004003du, 0x00000013u, 0x00005f0bu, 0x00005eb0u, 0x0003003eu, 0x00005eb9u, 0x00005f0bu, 0x0003003eu, 0x00002154u, 0x0000b8afu, 0x0003003eu, 0x00007bcbu, 0x00005f0bu, 0x0003003eu, 0x00007bc6u, 0x00002964u, 0x0003003eu, 0x00007bc7u, 0x00002966u, 0x0003003eu, 0x00007bc8u, 0x00002968u, 0x0003003eu, 0x00007bc9u, 0x0000296au, 0x0003003eu, 0x0000215eu, 0x0000986bu, 0x0003003eu, 0x00007bccu, 0x0000aab7u, 0x0003003eu, 0x00007bcdu, 0x0000986bu, 0x000d0050u, 0x000001e4u, 0x00007befu, 0x00002964u, 0x00002966u, 0x00002968u, 0x0000296au, 0x00002379u, 0x00005f0bu, 0x0000aab7u, 0x0000986bu, 0x0000ab64u, 0x00005e9fu, 0x0003003eu, 0x00007c30u, 0x00002964u, 0x0003003eu, 0x00007c31u, 0x00002966u, 0x0003003eu, 0x00007c32u, 0x00002968u, 0x0003003eu, 0x00007c33u, 0x0000296au, 0x0003003eu, 0x00007c34u, 0x00002379u, 0x0003003eu, 0x00007c35u, 0x00005f0bu, 0x0003003eu, 0x00007c36u, 0x0000aab7u, 0x0003003eu, 0x00007c37u, 0x0000986bu, 0x0003003eu, 0x00007c38u, 0x0000ab64u, 0x0003003eu, 0x00007c39u, 0x00005e9fu, 0x0003003eu, 0x00002161u, 0x00002433u, 0x0003003eu, 0x00002162u, 0x00002435u, 0x0003003eu, 0x00002163u, 0x0000a5a1u, 0x0003003eu, 0x00002164u, 0x00002274u, 0x0003003eu, 0x00002165u, 0x000021ccu, 0x0003003eu, 0x00002166u, 0x000021cfu, 0x00050041u, 0x0000007bu, 0x00006090u, 0x00002161u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006091u, 0x00006090u, 0x00040071u, 0x00000006u, 0x00006092u, 0x00006091u, 0x0004007cu, 0x00000008u, 0x00006093u, 0x00006092u, 0x00050041u, 0x0000007bu, 0x00006094u, 0x00002162u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006095u, 0x00006094u, 0x00040071u, 0x00000006u, 0x00006096u, 0x00006095u, 0x0004007cu, 0x00000008u, 0x00006097u, 0x00006096u, 0x0003003eu, 0x00006c80u, 0x00002964u, 0x0003003eu, 0x00006c81u, 0x00002379u, 0x0003003eu, 0x00006c82u, 0x00005f0bu, 0x0003003eu, 0x00006c83u, 0x0000aab7u, 0x0003003eu, 0x00006c84u, 0x0000986bu, 0x0003003eu, 0x00006c85u, 0x00005e9fu, 0x0003003eu, 0x00006079u, 0x00006093u, 0x0003003eu, 0x0000607au, 0x00006097u, 0x000300f7u, 0x000060e7u, 0x00000000u, 0x000f00fbu, 0x00006093u, 0x000060e8u, 0x00000000u, 0x000060e9u, 0x00000001u, 0x000060eau, 0x00000002u, 0x000060ebu, 0x00000004u, 0x000060ecu, 0x00000007u, 0x000060edu, 0x00000006u, 0x000060eeu, 0x000200f8u, 0x000060eeu, 0x0003003eu, 0x000060e3u, 0x00001983u, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060edu, 0x00040072u, 0x00000008u, 0x00006107u, 0x00005e9fu, 0x00060050u, 0x00000044u, 0x00006108u, 0x00006107u, 0x00006107u, 0x00006107u, 0x0003003eu, 0x000060e3u, 0x00006108u, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060ecu, 0x0004003du, 0x00000010u, 0x00006101u, 0x00006c81u, 0x0008004fu, 0x00000047u, 0x00006102u, 0x00006101u, 0x00006101u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006103u, 0x00006102u, 0x0004007cu, 0x00000044u, 0x00006104u, 0x00006103u, 0x0003003eu, 0x000060e3u, 0x00006104u, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060ebu, 0x0004003du, 0x00000013u, 0x000060fdu, 0x00006c84u, 0x0008004fu, 0x000004b6u, 0x000060feu, 0x000060fdu, 0x000060fdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000060ffu, 0x000060feu, 0x0003003eu, 0x000060e3u, 0x000060ffu, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060eau, 0x0004003du, 0x00000013u, 0x000060f9u, 0x00006c83u, 0x0008004fu, 0x000004b6u, 0x000060fau, 0x000060f9u, 0x000060f9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000060fbu, 0x000060fau, 0x0003003eu, 0x000060e3u, 0x000060fbu, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060e9u, 0x0004003du, 0x00000013u, 0x000060f5u, 0x00006c82u, 0x0008004fu, 0x000004b6u, 0x000060f6u, 0x000060f5u, 0x000060f5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000060f7u, 0x000060f6u, 0x0003003eu, 0x000060e3u, 0x000060f7u, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060e8u, 0x0004003du, 0x00000010u, 0x000060f0u, 0x00006c80u, 0x0008004fu, 0x00000047u, 0x000060f1u, 0x000060f0u, 0x000060f0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000060f2u, 0x000060f1u, 0x0004007cu, 0x00000044u, 0x000060f3u, 0x000060f2u, 0x0003003eu, 0x000060e3u, 0x000060f3u, 0x000200f9u, 0x000060e7u, 0x000200f8u, 0x000060e7u, 0x001100f5u, 0x00000044u, 0x0000b957u, 0x000060f3u, 0x000060e8u, 0x000060f7u, 0x000060e9u, 0x000060fbu, 0x000060eau, 0x000060ffu, 0x000060ebu, 0x00006104u, 0x000060ecu, 0x00006108u, 0x000060edu, 0x00001983u, 0x000060eeu, 0x000300f7u, 0x0000610au, 0x00000000u, 0x000d00fbu, 0x00006097u, 0x0000610bu, 0x00000000u, 0x0000610cu, 0x00000001u, 0x0000610du, 0x00000002u, 0x0000610eu, 0x00000004u, 0x0000610fu, 0x00000006u, 0x00006110u, 0x000200f8u, 0x00006110u, 0x0003003eu, 0x000060e4u, 0x00001982u, 0x000200f9u, 0x0000610au, 0x000200f8u, 0x0000610fu, 0x00050041u, 0x0000007bu, 0x00006c90u, 0x00006c81u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000611fu, 0x00006c90u, 0x00040071u, 0x00000006u, 0x00006120u, 0x0000611fu, 0x0004007cu, 0x00000008u, 0x00006121u, 0x00006120u, 0x0003003eu, 0x000060e4u, 0x00006121u, 0x000200f9u, 0x0000610au, 0x000200f8u, 0x0000610eu, 0x00050041u, 0x000001c4u, 0x00006c8fu, 0x00006c84u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000611cu, 0x00006c8fu, 0x00040072u, 0x00000008u, 0x0000611du, 0x0000611cu, 0x0003003eu, 0x000060e4u, 0x0000611du, 0x000200f9u, 0x0000610au, 0x000200f8u, 0x0000610du, 0x00050041u, 0x000001c4u, 0x00006c8eu, 0x00006c83u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006119u, 0x00006c8eu, 0x00040072u, 0x00000008u, 0x0000611au, 0x00006119u, 0x0003003eu, 0x000060e4u, 0x0000611au, 0x000200f9u, 0x0000610au, 0x000200f8u, 0x0000610cu, 0x00050041u, 0x000001c4u, 0x00006c8du, 0x00006c82u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006116u, 0x00006c8du, 0x00040072u, 0x00000008u, 0x00006117u, 0x00006116u, 0x0003003eu, 0x000060e4u, 0x00006117u, 0x000200f9u, 0x0000610au, 0x000200f8u, 0x0000610bu, 0x00050041u, 0x0000007bu, 0x00006c8cu, 0x00006c80u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006112u, 0x00006c8cu, 0x00040071u, 0x00000006u, 0x00006113u, 0x00006112u, 0x0004007cu, 0x00000008u, 0x00006114u, 0x00006113u, 0x0003003eu, 0x000060e4u, 0x00006114u, 0x000200f9u, 0x0000610au, 0x000200f8u, 0x0000610au, 0x000f00f5u, 0x00000008u, 0x0000b958u, 0x00006114u, 0x0000610bu, 0x00006117u, 0x0000610cu, 0x0000611au, 0x0000610du, 0x0000611du, 0x0000610eu, 0x00006121u, 0x0000610fu, 0x00001982u, 0x00006110u, 0x00050051u, 0x00000008u, 0x00006124u, 0x0000b957u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006125u, 0x0000b957u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006126u, 0x0000b957u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006127u, 0x00006124u, 0x00006125u, 0x00006126u, 0x0000b958u, 0x0003003eu, 0x000060e5u, 0x00006127u, 0x0003003eu, 0x00006077u, 0x00006127u, 0x00050041u, 0x0000007bu, 0x0000609au, 0x00002161u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000609bu, 0x0000609au, 0x00040071u, 0x00000006u, 0x0000609cu, 0x0000609bu, 0x0004007cu, 0x00000008u, 0x0000609du, 0x0000609cu, 0x00050041u, 0x0000007bu, 0x0000609eu, 0x00002162u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000609fu, 0x0000609eu, 0x00040071u, 0x00000006u, 0x000060a0u, 0x0000609fu, 0x0004007cu, 0x00000008u, 0x000060a1u, 0x000060a0u, 0x0003003eu, 0x00006c91u, 0x00002966u, 0x0003003eu, 0x00006c92u, 0x00002379u, 0x0003003eu, 0x00006c93u, 0x00005f0bu, 0x0003003eu, 0x00006c94u, 0x0000aab7u, 0x0003003eu, 0x00006c95u, 0x0000986bu, 0x0003003eu, 0x0000607du, 0x0000609du, 0x0003003eu, 0x0000607eu, 0x000060a1u, 0x000300f7u, 0x0000612cu, 0x00000000u, 0x000d00fbu, 0x0000609du, 0x0000612du, 0x00000000u, 0x0000612eu, 0x00000001u, 0x0000612fu, 0x00000002u, 0x00006130u, 0x00000004u, 0x00006131u, 0x00000007u, 0x00006132u, 0x000200f8u, 0x00006132u, 0x00050041u, 0x0000007bu, 0x00006c9bu, 0x00006c91u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000614au, 0x00006c9bu, 0x00040071u, 0x00000006u, 0x0000614bu, 0x0000614au, 0x0004007cu, 0x00000008u, 0x0000614cu, 0x0000614bu, 0x000500c4u, 0x00000008u, 0x0000614du, 0x0000614cu, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006c9cu, 0x00006c91u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x0000614fu, 0x00006c9cu, 0x00040071u, 0x00000006u, 0x00006150u, 0x0000614fu, 0x0004007cu, 0x00000008u, 0x00006151u, 0x00006150u, 0x000500c5u, 0x00000008u, 0x00006152u, 0x0000614du, 0x00006151u, 0x00060050u, 0x00000044u, 0x00006153u, 0x00006152u, 0x00006152u, 0x00006152u, 0x0003003eu, 0x00006128u, 0x00006153u, 0x000200f9u, 0x0000612cu, 0x000200f8u, 0x00006131u, 0x0004003du, 0x00000010u, 0x00006145u, 0x00006c92u, 0x0008004fu, 0x00000047u, 0x00006146u, 0x00006145u, 0x00006145u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006147u, 0x00006146u, 0x0004007cu, 0x00000044u, 0x00006148u, 0x00006147u, 0x0003003eu, 0x00006128u, 0x00006148u, 0x000200f9u, 0x0000612cu, 0x000200f8u, 0x00006130u, 0x0004003du, 0x00000013u, 0x00006141u, 0x00006c95u, 0x0008004fu, 0x000004b6u, 0x00006142u, 0x00006141u, 0x00006141u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006143u, 0x00006142u, 0x0003003eu, 0x00006128u, 0x00006143u, 0x000200f9u, 0x0000612cu, 0x000200f8u, 0x0000612fu, 0x0004003du, 0x00000013u, 0x0000613du, 0x00006c94u, 0x0008004fu, 0x000004b6u, 0x0000613eu, 0x0000613du, 0x0000613du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000613fu, 0x0000613eu, 0x0003003eu, 0x00006128u, 0x0000613fu, 0x000200f9u, 0x0000612cu, 0x000200f8u, 0x0000612eu, 0x0004003du, 0x00000013u, 0x00006139u, 0x00006c93u, 0x0008004fu, 0x000004b6u, 0x0000613au, 0x00006139u, 0x00006139u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000613bu, 0x0000613au, 0x0003003eu, 0x00006128u, 0x0000613bu, 0x000200f9u, 0x0000612cu, 0x000200f8u, 0x0000612du, 0x0004003du, 0x00000010u, 0x00006134u, 0x00006c91u, 0x0008004fu, 0x00000047u, 0x00006135u, 0x00006134u, 0x00006134u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006136u, 0x00006135u, 0x0004007cu, 0x00000044u, 0x00006137u, 0x00006136u, 0x0003003eu, 0x00006128u, 0x00006137u, 0x000200f9u, 0x0000612cu, 0x000200f8u, 0x0000612cu, 0x000f00f5u, 0x00000044u, 0x0000b96fu, 0x00006137u, 0x0000612du, 0x0000613bu, 0x0000612eu, 0x0000613fu, 0x0000612fu, 0x00006143u, 0x00006130u, 0x00006148u, 0x00006131u, 0x00006153u, 0x00006132u, 0x000300f7u, 0x00006155u, 0x00000000u, 0x000d00fbu, 0x000060a1u, 0x00006156u, 0x00000000u, 0x00006157u, 0x00000001u, 0x00006158u, 0x00000002u, 0x00006159u, 0x00000004u, 0x0000615au, 0x00000006u, 0x0000615bu, 0x000200f8u, 0x0000615bu, 0x0003003eu, 0x00006129u, 0x00001982u, 0x000200f9u, 0x00006155u, 0x000200f8u, 0x0000615au, 0x00050041u, 0x0000007bu, 0x00006ca1u, 0x00006c92u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000616au, 0x00006ca1u, 0x00040071u, 0x00000006u, 0x0000616bu, 0x0000616au, 0x0004007cu, 0x00000008u, 0x0000616cu, 0x0000616bu, 0x0003003eu, 0x00006129u, 0x0000616cu, 0x000200f9u, 0x00006155u, 0x000200f8u, 0x00006159u, 0x00050041u, 0x000001c4u, 0x00006ca0u, 0x00006c95u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006167u, 0x00006ca0u, 0x00040072u, 0x00000008u, 0x00006168u, 0x00006167u, 0x0003003eu, 0x00006129u, 0x00006168u, 0x000200f9u, 0x00006155u, 0x000200f8u, 0x00006158u, 0x00050041u, 0x000001c4u, 0x00006c9fu, 0x00006c94u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006164u, 0x00006c9fu, 0x00040072u, 0x00000008u, 0x00006165u, 0x00006164u, 0x0003003eu, 0x00006129u, 0x00006165u, 0x000200f9u, 0x00006155u, 0x000200f8u, 0x00006157u, 0x00050041u, 0x000001c4u, 0x00006c9eu, 0x00006c93u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006161u, 0x00006c9eu, 0x00040072u, 0x00000008u, 0x00006162u, 0x00006161u, 0x0003003eu, 0x00006129u, 0x00006162u, 0x000200f9u, 0x00006155u, 0x000200f8u, 0x00006156u, 0x00050041u, 0x0000007bu, 0x00006c9du, 0x00006c91u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000615du, 0x00006c9du, 0x00040071u, 0x00000006u, 0x0000615eu, 0x0000615du, 0x0004007cu, 0x00000008u, 0x0000615fu, 0x0000615eu, 0x0003003eu, 0x00006129u, 0x0000615fu, 0x000200f9u, 0x00006155u, 0x000200f8u, 0x00006155u, 0x000f00f5u, 0x00000008u, 0x0000b970u, 0x0000615fu, 0x00006156u, 0x00006162u, 0x00006157u, 0x00006165u, 0x00006158u, 0x00006168u, 0x00006159u, 0x0000616cu, 0x0000615au, 0x00001982u, 0x0000615bu, 0x00050051u, 0x00000008u, 0x0000616fu, 0x0000b96fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006170u, 0x0000b96fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006171u, 0x0000b96fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006172u, 0x0000616fu, 0x00006170u, 0x00006171u, 0x0000b970u, 0x0003003eu, 0x0000612au, 0x00006172u, 0x0003003eu, 0x0000607bu, 0x00006172u, 0x00050041u, 0x0000007bu, 0x000060a4u, 0x00002161u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000060a5u, 0x000060a4u, 0x00040071u, 0x00000006u, 0x000060a6u, 0x000060a5u, 0x0004007cu, 0x00000008u, 0x000060a7u, 0x000060a6u, 0x00050041u, 0x0000007bu, 0x000060a8u, 0x00002162u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000060a9u, 0x000060a8u, 0x00040071u, 0x00000006u, 0x000060aau, 0x000060a9u, 0x0004007cu, 0x00000008u, 0x000060abu, 0x000060aau, 0x0003003eu, 0x00006ca2u, 0x00002968u, 0x0003003eu, 0x00006ca3u, 0x00002379u, 0x0003003eu, 0x00006ca4u, 0x00005f0bu, 0x0003003eu, 0x00006ca5u, 0x0000aab7u, 0x0003003eu, 0x00006ca6u, 0x0000986bu, 0x0003003eu, 0x00006ca7u, 0x0000ab64u, 0x0003003eu, 0x00006081u, 0x000060a7u, 0x0003003eu, 0x00006082u, 0x000060abu, 0x000300f7u, 0x00006177u, 0x00000000u, 0x001700fbu, 0x000060a7u, 0x00006178u, 0x00000000u, 0x00006179u, 0x00000007u, 0x0000617au, 0x00000001u, 0x0000617bu, 0x00000002u, 0x0000617cu, 0x00000004u, 0x0000617du, 0x00000008u, 0x0000617eu, 0x00000009u, 0x0000617fu, 0x0000000bu, 0x00006180u, 0x0000000du, 0x00006181u, 0x0000000fu, 0x00006182u, 0x000200f8u, 0x00006182u, 0x00050041u, 0x0000007bu, 0x00006caeu, 0x00006ca2u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000061afu, 0x00006caeu, 0x00040071u, 0x00000006u, 0x000061b0u, 0x000061afu, 0x0004007cu, 0x00000008u, 0x000061b1u, 0x000061b0u, 0x000500c4u, 0x00000008u, 0x000061b2u, 0x000061b1u, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006cafu, 0x00006ca2u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000061b4u, 0x00006cafu, 0x00040071u, 0x00000006u, 0x000061b5u, 0x000061b4u, 0x0004007cu, 0x00000008u, 0x000061b6u, 0x000061b5u, 0x000500c5u, 0x00000008u, 0x000061b7u, 0x000061b2u, 0x000061b6u, 0x00060050u, 0x00000044u, 0x000061b8u, 0x000061b7u, 0x000061b7u, 0x000061b7u, 0x0003003eu, 0x00006173u, 0x000061b8u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x00006181u, 0x00040072u, 0x00000008u, 0x000061acu, 0x0000ab64u, 0x00060050u, 0x00000044u, 0x000061adu, 0x000061acu, 0x000061acu, 0x000061acu, 0x0003003eu, 0x00006173u, 0x000061adu, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x00006180u, 0x0004003du, 0x00000010u, 0x000061a6u, 0x00006ca3u, 0x0008004fu, 0x00000047u, 0x000061a7u, 0x000061a6u, 0x000061a6u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x000061a8u, 0x000061a7u, 0x0004007cu, 0x00000044u, 0x000061a9u, 0x000061a8u, 0x0003003eu, 0x00006173u, 0x000061a9u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x0000617fu, 0x0004003du, 0x00000013u, 0x000061a2u, 0x00006ca6u, 0x0008004fu, 0x000004b6u, 0x000061a3u, 0x000061a2u, 0x000061a2u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x000061a4u, 0x000061a3u, 0x0003003eu, 0x00006173u, 0x000061a4u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x0000617eu, 0x0004003du, 0x00000013u, 0x0000619eu, 0x00006ca5u, 0x0008004fu, 0x000004b6u, 0x0000619fu, 0x0000619eu, 0x0000619eu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x000061a0u, 0x0000619fu, 0x0003003eu, 0x00006173u, 0x000061a0u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x0000617du, 0x0004003du, 0x00000010u, 0x00006199u, 0x00006ca3u, 0x0008004fu, 0x00000047u, 0x0000619au, 0x00006199u, 0x00006199u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000619bu, 0x0000619au, 0x0004007cu, 0x00000044u, 0x0000619cu, 0x0000619bu, 0x0003003eu, 0x00006173u, 0x0000619cu, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x0000617cu, 0x0004003du, 0x00000013u, 0x00006195u, 0x00006ca6u, 0x0008004fu, 0x000004b6u, 0x00006196u, 0x00006195u, 0x00006195u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006197u, 0x00006196u, 0x0003003eu, 0x00006173u, 0x00006197u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x0000617bu, 0x0004003du, 0x00000013u, 0x00006191u, 0x00006ca5u, 0x0008004fu, 0x000004b6u, 0x00006192u, 0x00006191u, 0x00006191u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006193u, 0x00006192u, 0x0003003eu, 0x00006173u, 0x00006193u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x0000617au, 0x0008004fu, 0x000004b6u, 0x0000618eu, 0x00005f0bu, 0x00005f0bu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x0000618fu, 0x0000618eu, 0x0003003eu, 0x00006173u, 0x0000618fu, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x00006179u, 0x0008004fu, 0x000004b6u, 0x0000618au, 0x00005f0bu, 0x00005f0bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000618bu, 0x0000618au, 0x0003003eu, 0x00006173u, 0x0000618bu, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x00006178u, 0x0004003du, 0x00000010u, 0x00006184u, 0x00006ca2u, 0x0008004fu, 0x00000047u, 0x00006185u, 0x00006184u, 0x00006184u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006186u, 0x00006185u, 0x0004007cu, 0x00000044u, 0x00006187u, 0x00006186u, 0x0003003eu, 0x00006173u, 0x00006187u, 0x000200f9u, 0x00006177u, 0x000200f8u, 0x00006177u, 0x001900f5u, 0x00000044u, 0x0000b988u, 0x00006187u, 0x00006178u, 0x0000618bu, 0x00006179u, 0x0000618fu, 0x0000617au, 0x00006193u, 0x0000617bu, 0x00006197u, 0x0000617cu, 0x0000619cu, 0x0000617du, 0x000061a0u, 0x0000617eu, 0x000061a4u, 0x0000617fu, 0x000061a9u, 0x00006180u, 0x000061adu, 0x00006181u, 0x000061b8u, 0x00006182u, 0x000300f7u, 0x000061bau, 0x00000000u, 0x000b00fbu, 0x000060abu, 0x000061bbu, 0x00000000u, 0x000061bcu, 0x00000001u, 0x000061bdu, 0x00000002u, 0x000061beu, 0x00000004u, 0x000061bfu, 0x000200f8u, 0x000061bfu, 0x00050041u, 0x0000007bu, 0x00006cb3u, 0x00006ca3u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000061ceu, 0x00006cb3u, 0x00040071u, 0x00000006u, 0x000061cfu, 0x000061ceu, 0x0004007cu, 0x00000008u, 0x000061d0u, 0x000061cfu, 0x0003003eu, 0x00006174u, 0x000061d0u, 0x000200f9u, 0x000061bau, 0x000200f8u, 0x000061beu, 0x00050041u, 0x000001c4u, 0x00006cb2u, 0x00006ca6u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000061cbu, 0x00006cb2u, 0x00040072u, 0x00000008u, 0x000061ccu, 0x000061cbu, 0x0003003eu, 0x00006174u, 0x000061ccu, 0x000200f9u, 0x000061bau, 0x000200f8u, 0x000061bdu, 0x00050041u, 0x000001c4u, 0x00006cb1u, 0x00006ca5u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000061c8u, 0x00006cb1u, 0x00040072u, 0x00000008u, 0x000061c9u, 0x000061c8u, 0x0003003eu, 0x00006174u, 0x000061c9u, 0x000200f9u, 0x000061bau, 0x000200f8u, 0x000061bcu, 0x00040072u, 0x00000008u, 0x000061c6u, 0x0000ab64u, 0x0003003eu, 0x00006174u, 0x000061c6u, 0x000200f9u, 0x000061bau, 0x000200f8u, 0x000061bbu, 0x00050041u, 0x0000007bu, 0x00006cb0u, 0x00006ca2u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000061c1u, 0x00006cb0u, 0x00040071u, 0x00000006u, 0x000061c2u, 0x000061c1u, 0x0004007cu, 0x00000008u, 0x000061c3u, 0x000061c2u, 0x0003003eu, 0x00006174u, 0x000061c3u, 0x000200f9u, 0x000061bau, 0x000200f8u, 0x000061bau, 0x000d00f5u, 0x00000008u, 0x0000b989u, 0x000061c3u, 0x000061bbu, 0x000061c6u, 0x000061bcu, 0x000061c9u, 0x000061bdu, 0x000061ccu, 0x000061beu, 0x000061d0u, 0x000061bfu, 0x00050051u, 0x00000008u, 0x000061d3u, 0x0000b988u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000061d4u, 0x0000b988u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000061d5u, 0x0000b988u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000061d6u, 0x000061d3u, 0x000061d4u, 0x000061d5u, 0x0000b989u, 0x0003003eu, 0x00006175u, 0x000061d6u, 0x0003003eu, 0x0000607fu, 0x000061d6u, 0x00050041u, 0x0000007bu, 0x000060aeu, 0x00002161u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000060afu, 0x000060aeu, 0x00040071u, 0x00000006u, 0x000060b0u, 0x000060afu, 0x0004007cu, 0x00000008u, 0x000060b1u, 0x000060b0u, 0x00050041u, 0x0000007bu, 0x000060b2u, 0x00002162u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000060b3u, 0x000060b2u, 0x00040071u, 0x00000006u, 0x000060b4u, 0x000060b3u, 0x0004007cu, 0x00000008u, 0x000060b5u, 0x000060b4u, 0x0003003eu, 0x00006cb4u, 0x0000296au, 0x0003003eu, 0x00006cb5u, 0x00002379u, 0x0003003eu, 0x00006cb6u, 0x00005f0bu, 0x0003003eu, 0x00006cb7u, 0x0000aab7u, 0x0003003eu, 0x00006cb8u, 0x0000986bu, 0x0003003eu, 0x00006085u, 0x000060b1u, 0x0003003eu, 0x00006086u, 0x000060b5u, 0x000300f7u, 0x000061dbu, 0x00000000u, 0x000d00fbu, 0x000060b1u, 0x000061dcu, 0x00000000u, 0x000061ddu, 0x00000001u, 0x000061deu, 0x00000002u, 0x000061dfu, 0x00000004u, 0x000061e0u, 0x00000006u, 0x000061e1u, 0x000200f8u, 0x000061e1u, 0x0003003eu, 0x000061d7u, 0x00001983u, 0x000200f9u, 0x000061dbu, 0x000200f8u, 0x000061e0u, 0x0004003du, 0x00000010u, 0x000061f4u, 0x00006cb5u, 0x0008004fu, 0x00000047u, 0x000061f5u, 0x000061f4u, 0x000061f4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000061f6u, 0x000061f5u, 0x0004007cu, 0x00000044u, 0x000061f7u, 0x000061f6u, 0x0003003eu, 0x000061d7u, 0x000061f7u, 0x000200f9u, 0x000061dbu, 0x000200f8u, 0x000061dfu, 0x0004003du, 0x00000013u, 0x000061f0u, 0x00006cb8u, 0x0008004fu, 0x000004b6u, 0x000061f1u, 0x000061f0u, 0x000061f0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061f2u, 0x000061f1u, 0x0003003eu, 0x000061d7u, 0x000061f2u, 0x000200f9u, 0x000061dbu, 0x000200f8u, 0x000061deu, 0x0004003du, 0x00000013u, 0x000061ecu, 0x00006cb7u, 0x0008004fu, 0x000004b6u, 0x000061edu, 0x000061ecu, 0x000061ecu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061eeu, 0x000061edu, 0x0003003eu, 0x000061d7u, 0x000061eeu, 0x000200f9u, 0x000061dbu, 0x000200f8u, 0x000061ddu, 0x0004003du, 0x00000013u, 0x000061e8u, 0x00006cb6u, 0x0008004fu, 0x000004b6u, 0x000061e9u, 0x000061e8u, 0x000061e8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061eau, 0x000061e9u, 0x0003003eu, 0x000061d7u, 0x000061eau, 0x000200f9u, 0x000061dbu, 0x000200f8u, 0x000061dcu, 0x0004003du, 0x00000010u, 0x000061e3u, 0x00006cb4u, 0x0008004fu, 0x00000047u, 0x000061e4u, 0x000061e3u, 0x000061e3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000061e5u, 0x000061e4u, 0x0004007cu, 0x00000044u, 0x000061e6u, 0x000061e5u, 0x0003003eu, 0x000061d7u, 0x000061e6u, 0x000200f9u, 0x000061dbu, 0x000200f8u, 0x000061dbu, 0x000f00f5u, 0x00000044u, 0x0000b9a0u, 0x000061e6u, 0x000061dcu, 0x000061eau, 0x000061ddu, 0x000061eeu, 0x000061deu, 0x000061f2u, 0x000061dfu, 0x000061f7u, 0x000061e0u, 0x00001983u, 0x000061e1u, 0x000300f7u, 0x000061f9u, 0x00000000u, 0x000d00fbu, 0x000060b5u, 0x000061fau, 0x00000000u, 0x000061fbu, 0x00000001u, 0x000061fcu, 0x00000002u, 0x000061fdu, 0x00000004u, 0x000061feu, 0x00000006u, 0x000061ffu, 0x000200f8u, 0x000061ffu, 0x0003003eu, 0x000061d8u, 0x00001982u, 0x000200f9u, 0x000061f9u, 0x000200f8u, 0x000061feu, 0x00050041u, 0x0000007bu, 0x00006cc2u, 0x00006cb5u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000620eu, 0x00006cc2u, 0x00040071u, 0x00000006u, 0x0000620fu, 0x0000620eu, 0x0004007cu, 0x00000008u, 0x00006210u, 0x0000620fu, 0x0003003eu, 0x000061d8u, 0x00006210u, 0x000200f9u, 0x000061f9u, 0x000200f8u, 0x000061fdu, 0x00050041u, 0x000001c4u, 0x00006cc1u, 0x00006cb8u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000620bu, 0x00006cc1u, 0x00040072u, 0x00000008u, 0x0000620cu, 0x0000620bu, 0x0003003eu, 0x000061d8u, 0x0000620cu, 0x000200f9u, 0x000061f9u, 0x000200f8u, 0x000061fcu, 0x00050041u, 0x000001c4u, 0x00006cc0u, 0x00006cb7u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006208u, 0x00006cc0u, 0x00040072u, 0x00000008u, 0x00006209u, 0x00006208u, 0x0003003eu, 0x000061d8u, 0x00006209u, 0x000200f9u, 0x000061f9u, 0x000200f8u, 0x000061fbu, 0x00050041u, 0x000001c4u, 0x00006cbfu, 0x00006cb6u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006205u, 0x00006cbfu, 0x00040072u, 0x00000008u, 0x00006206u, 0x00006205u, 0x0003003eu, 0x000061d8u, 0x00006206u, 0x000200f9u, 0x000061f9u, 0x000200f8u, 0x000061fau, 0x00050041u, 0x0000007bu, 0x00006cbeu, 0x00006cb4u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006201u, 0x00006cbeu, 0x00040071u, 0x00000006u, 0x00006202u, 0x00006201u, 0x0004007cu, 0x00000008u, 0x00006203u, 0x00006202u, 0x0003003eu, 0x000061d8u, 0x00006203u, 0x000200f9u, 0x000061f9u, 0x000200f8u, 0x000061f9u, 0x000f00f5u, 0x00000008u, 0x0000b9a1u, 0x00006203u, 0x000061fau, 0x00006206u, 0x000061fbu, 0x00006209u, 0x000061fcu, 0x0000620cu, 0x000061fdu, 0x00006210u, 0x000061feu, 0x00001982u, 0x000061ffu, 0x00050051u, 0x00000008u, 0x00006213u, 0x0000b9a0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006214u, 0x0000b9a0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006215u, 0x0000b9a0u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006216u, 0x00006213u, 0x00006214u, 0x00006215u, 0x0000b9a1u, 0x0003003eu, 0x000061d9u, 0x00006216u, 0x0003003eu, 0x00006083u, 0x00006216u, 0x0003003eu, 0x00006088u, 0x00006127u, 0x0003003eu, 0x00006089u, 0x00006172u, 0x0003003eu, 0x0000608au, 0x000061d6u, 0x0003003eu, 0x0000608bu, 0x00006216u, 0x000600cau, 0x00000009u, 0x0000621du, 0x000061d6u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000608au, 0x0000621du, 0x0003003eu, 0x00006217u, 0x00006127u, 0x00050082u, 0x00000009u, 0x00006236u, 0x00006127u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x00006237u, 0x00006236u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006239u, 0x00006237u, 0x0000f375u, 0x0003003eu, 0x00006233u, 0x00006239u, 0x0003003eu, 0x00006088u, 0x00006239u, 0x0003003eu, 0x00006218u, 0x00006172u, 0x00050082u, 0x00000009u, 0x0000623du, 0x00006172u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x0000623eu, 0x0000623du, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006240u, 0x0000623eu, 0x0000f375u, 0x0003003eu, 0x0000623au, 0x00006240u, 0x0003003eu, 0x00006089u, 0x00006240u, 0x0003003eu, 0x00006219u, 0x00006216u, 0x00050082u, 0x00000009u, 0x00006244u, 0x00006216u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x00006245u, 0x00006244u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006247u, 0x00006245u, 0x0000f375u, 0x0003003eu, 0x00006241u, 0x00006247u, 0x0003003eu, 0x0000608bu, 0x00006247u, 0x00050082u, 0x00000009u, 0x00006226u, 0x00006239u, 0x00006240u, 0x00050084u, 0x00000009u, 0x00006228u, 0x00006226u, 0x0000621du, 0x0003003eu, 0x0000621au, 0x00006228u, 0x00050080u, 0x00000009u, 0x0000622bu, 0x00006228u, 0x0000f375u, 0x0003003eu, 0x0000621au, 0x0000622bu, 0x000500c3u, 0x00000009u, 0x0000622eu, 0x0000622bu, 0x0000f380u, 0x00040072u, 0x00000013u, 0x0000622fu, 0x0000622eu, 0x00040072u, 0x00000013u, 0x00006231u, 0x00006247u, 0x00050080u, 0x00000013u, 0x00006232u, 0x0000622fu, 0x00006231u, 0x0003003eu, 0x0000621bu, 0x00006232u, 0x0003003eu, 0x00006087u, 0x00006232u, 0x0004003du, 0x00000013u, 0x000060bdu, 0x00006087u, 0x00040072u, 0x00000009u, 0x000060beu, 0x000060bdu, 0x0003003eu, 0x0000608cu, 0x000060beu, 0x00050082u, 0x00000009u, 0x0000624bu, 0x000060beu, 0x0000f375u, 0x0003003eu, 0x0000608cu, 0x0000624bu, 0x000600cau, 0x00000009u, 0x0000624du, 0x0000624bu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000608cu, 0x0000624du, 0x00050080u, 0x00000009u, 0x00006250u, 0x0000624du, 0x0000f375u, 0x0003003eu, 0x0000608cu, 0x00006250u, 0x0008000cu, 0x00000009u, 0x00006252u, 0x00000001u, 0x0000002du, 0x00006250u, 0x00000afdu, 0x00000afeu, 0x00040072u, 0x00000013u, 0x00006253u, 0x00006252u, 0x0003003eu, 0x00006248u, 0x00006253u, 0x0003003eu, 0x00006087u, 0x00006253u, 0x00050041u, 0x000001c4u, 0x000060c0u, 0x00006087u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000060c1u, 0x000060c0u, 0x00040072u, 0x00000008u, 0x000060c2u, 0x000060c1u, 0x0004003du, 0x00000012u, 0x000060c4u, 0x000060c0u, 0x00040072u, 0x00000008u, 0x000060c5u, 0x000060c4u, 0x00050080u, 0x00000008u, 0x000060c6u, 0x000060c5u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x000060c7u, 0x000060c6u, 0x0000025du, 0x00050080u, 0x00000008u, 0x000060c8u, 0x000060c2u, 0x000060c7u, 0x0003003eu, 0x0000608du, 0x000060c8u, 0x000300f7u, 0x000060cau, 0x00000000u, 0x000400fau, 0x000021ccu, 0x000060cbu, 0x000060ccu, 0x000200f8u, 0x000060ccu, 0x000500c4u, 0x00000008u, 0x000060d5u, 0x00002274u, 0x00000236u, 0x0003003eu, 0x0000608eu, 0x000060d5u, 0x000200f9u, 0x000060cau, 0x000200f8u, 0x000060cbu, 0x00050084u, 0x00000008u, 0x000060cfu, 0x000060c8u, 0x00002274u, 0x00050080u, 0x00000008u, 0x000060d0u, 0x000060cfu, 0x00000233u, 0x000500c3u, 0x00000008u, 0x000060d1u, 0x000060d0u, 0x00000230u, 0x0003003eu, 0x0000608eu, 0x000060d1u, 0x000500c3u, 0x00000008u, 0x000060d3u, 0x000060d1u, 0x00000236u, 0x0003003eu, 0x00002164u, 0x000060d3u, 0x000200f9u, 0x000060cau, 0x000200f8u, 0x000060cau, 0x000700f5u, 0x00000008u, 0x0000b9d4u, 0x000060d3u, 0x000060cbu, 0x00002274u, 0x000060ccu, 0x000700f5u, 0x00000008u, 0x0000b9d1u, 0x000060d1u, 0x000060cbu, 0x000060d5u, 0x000060ccu, 0x000300f7u, 0x000060d7u, 0x00000000u, 0x000400fau, 0x000021cfu, 0x000060d8u, 0x000060d9u, 0x000200f8u, 0x000060d9u, 0x00050080u, 0x00000008u, 0x000060ddu, 0x000060c8u, 0x0000a5a1u, 0x0003003eu, 0x0000608du, 0x000060ddu, 0x000200f9u, 0x000060d7u, 0x000200f8u, 0x000060d8u, 0x0003003eu, 0x0000608du, 0x0000b9d1u, 0x000200f9u, 0x000060d7u, 0x000200f8u, 0x000060d7u, 0x000700f5u, 0x00000008u, 0x0000b9d2u, 0x0000b9d1u, 0x000060d8u, 0x000060ddu, 0x000060d9u, 0x0008000cu, 0x00000008u, 0x000060dfu, 0x00000001u, 0x0000002du, 0x0000b9d2u, 0x00000220u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x000060e0u, 0x000060dfu, 0x0003003eu, 0x000060c0u, 0x000060e0u, 0x0004003du, 0x00000013u, 0x000060e2u, 0x00006087u, 0x0003003eu, 0x0000608fu, 0x000060e2u, 0x0003003eu, 0x000020efu, 0x0000b9d4u, 0x00040072u, 0x00000b07u, 0x000023a6u, 0x000060e2u, 0x0004007cu, 0x00000010u, 0x000023a7u, 0x000023a6u, 0x0003003eu, 0x0000215fu, 0x000023a7u, 0x000200f9u, 0x0000236eu, 0x000200f8u, 0x0000236eu, 0x000700f5u, 0x0000000fu, 0x0000bc1cu, 0x0000b8afu, 0x000060d7u, 0x000023c2u, 0x000062bau, 0x000700f5u, 0x00000008u, 0x0000bae7u, 0x0000b9d4u, 0x000060d7u, 0x0000b18eu, 0x000062bau, 0x000500aau, 0x00000069u, 0x000023c5u, 0x0000bae7u, 0x00000220u, 0x000500a7u, 0x00000069u, 0x000023c6u, 0x000021deu, 0x000023c5u, 0x000300f7u, 0x000023c7u, 0x00000000u, 0x000400fau, 0x000023c6u, 0x000023c8u, 0x000023c7u, 0x000200f8u, 0x000023c8u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x000023c7u, 0x000300f7u, 0x000023cau, 0x00000000u, 0x000400fau, 0x000021edu, 0x000023cbu, 0x000023cau, 0x000200f8u, 0x000023cbu, 0x000300f7u, 0x000023cdu, 0x00000000u, 0x000400fau, 0x000021f0u, 0x000023ceu, 0x000023cfu, 0x000200f8u, 0x000023cfu, 0x00050041u, 0x0000007bu, 0x0000724fu, 0x00007241u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000023d2u, 0x0000724fu, 0x0003003eu, 0x0000216fu, 0x000023d2u, 0x000200f9u, 0x000023cdu, 0x000200f8u, 0x000023ceu, 0x0004003du, 0x00000011u, 0x00006438u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00006439u, 0x00006438u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x0000643au, 0x00006439u, 0x0003003eu, 0x00006437u, 0x0000643au, 0x0003003eu, 0x0000216fu, 0x0000643au, 0x000200f9u, 0x000023cdu, 0x000200f8u, 0x000023cdu, 0x000700f5u, 0x0000000fu, 0x0000bc27u, 0x0000643au, 0x000023ceu, 0x000023d2u, 0x000023cfu, 0x000500b0u, 0x00000069u, 0x000023d5u, 0x0000bc1cu, 0x0000bc27u, 0x000300f7u, 0x000023d6u, 0x00000000u, 0x000400fau, 0x000023d5u, 0x000023d7u, 0x000023d6u, 0x000200f8u, 0x000023d7u, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000536u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x000023d6u, 0x000200f9u, 0x000023cau, 0x000200f8u, 0x000023cau, 0x0004003du, 0x00000010u, 0x000023d8u, 0x0000215fu, 0x0003003eu, 0x00007cdcu, 0x000023d8u, 0x000500c4u, 0x00000008u, 0x000023dbu, 0x00002bfeu, 0x00000260u, 0x000500c5u, 0x00000008u, 0x000023ddu, 0x000023dbu, 0x0000a595u, 0x0003003eu, 0x00007cddu, 0x000023ddu, 0x00040072u, 0x0000037bu, 0x000023e0u, 0x0000bae7u, 0x0004007cu, 0x0000000fu, 0x000023e1u, 0x000023e0u, 0x0003003eu, 0x00007cdeu, 0x000023e1u, 0x00050041u, 0x0000007bu, 0x000023e3u, 0x000020f4u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000023e4u, 0x000023e3u, 0x00040071u, 0x00000006u, 0x000023e5u, 0x000023e4u, 0x0004007cu, 0x00000008u, 0x000023e6u, 0x000023e5u, 0x00050080u, 0x00000008u, 0x000023e8u, 0x000023e6u, 0x0000a5a1u, 0x0007000cu, 0x00000008u, 0x000023e9u, 0x00000001u, 0x00000027u, 0x000023e8u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x000023eau, 0x000023e9u, 0x0004007cu, 0x0000000fu, 0x000023ebu, 0x000023eau, 0x0003003eu, 0x00007cdfu, 0x000023ebu, 0x0003003eu, 0x000020a5u, 0x00000559u, 0x0003003eu, 0x000020a6u, 0x00000559u, 0x000200f9u, 0x00002171u, 0x000200f8u, 0x00002171u, 0x001900f5u, 0x00000069u, 0x0000eb25u, 0x0000bd6cu, 0x00002185u, 0x0000bd6cu, 0x000021a4u, 0x0000bd6cu, 0x0000222cu, 0x0000eb2bu, 0x00002257u, 0x0000eb2bu, 0x00002256u, 0x0000bd6cu, 0x00002260u, 0x0000bd6cu, 0x00002272u, 0x0000bd6cu, 0x0000227eu, 0x0000bd6cu, 0x000023c8u, 0x0000bd6cu, 0x000023d7u, 0x0000bd6cu, 0x000023cau, 0x001900f5u, 0x00000012u, 0x0000ea93u, 0x0000ab70u, 0x00002185u, 0x0000ab70u, 0x000021a4u, 0x0000ab70u, 0x0000222cu, 0x0000ab70u, 0x00002257u, 0x0000ab70u, 0x00002256u, 0x0000ab70u, 0x00002260u, 0x0000ab70u, 0x00002272u, 0x0000ab70u, 0x0000227eu, 0x0000ab64u, 0x000023c8u, 0x0000ab64u, 0x000023d7u, 0x0000ab64u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000ea01u, 0x0000aac6u, 0x00002185u, 0x0000aac6u, 0x000021a4u, 0x0000aac6u, 0x0000222cu, 0x0000aac6u, 0x00002257u, 0x0000aac6u, 0x00002256u, 0x0000aac6u, 0x00002260u, 0x0000aac6u, 0x00002272u, 0x0000aac6u, 0x0000227eu, 0x0000aab7u, 0x000023c8u, 0x0000aab7u, 0x000023d7u, 0x0000aab7u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e95fu, 0x00009ff8u, 0x00002185u, 0x00009ff8u, 0x000021a4u, 0x00009ff8u, 0x0000222cu, 0x00009ff8u, 0x00002257u, 0x00009ff8u, 0x00002256u, 0x00009ff8u, 0x00002260u, 0x00009ff8u, 0x00002272u, 0x00009ff8u, 0x0000227eu, 0x0000e9a7u, 0x000023c8u, 0x0000e9a7u, 0x000023d7u, 0x0000e9a7u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e8bfu, 0x00009f14u, 0x00002185u, 0x00009f14u, 0x000021a4u, 0x00009f14u, 0x0000222cu, 0x00009f14u, 0x00002257u, 0x00009f14u, 0x00002256u, 0x00009f14u, 0x00002260u, 0x00009f14u, 0x00002272u, 0x00009f14u, 0x0000227eu, 0x0000e907u, 0x000023c8u, 0x0000e907u, 0x000023d7u, 0x0000e907u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e81fu, 0x00009e2du, 0x00002185u, 0x00009e2du, 0x000021a4u, 0x00009e2du, 0x0000222cu, 0x00009e2du, 0x00002257u, 0x00009e2du, 0x00002256u, 0x00009e2du, 0x00002260u, 0x00009e2du, 0x00002272u, 0x00009e2du, 0x0000227eu, 0x0000e867u, 0x000023c8u, 0x0000e867u, 0x000023d7u, 0x0000e867u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e77fu, 0x00009d45u, 0x00002185u, 0x00009d45u, 0x000021a4u, 0x00009d45u, 0x0000222cu, 0x00009d45u, 0x00002257u, 0x00009d45u, 0x00002256u, 0x00009d45u, 0x00002260u, 0x00009d45u, 0x00002272u, 0x00009d45u, 0x0000227eu, 0x0000e7c7u, 0x000023c8u, 0x0000e7c7u, 0x000023d7u, 0x0000e7c7u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e6edu, 0x00009878u, 0x00002185u, 0x00009878u, 0x000021a4u, 0x00009878u, 0x0000222cu, 0x00009878u, 0x00002257u, 0x00009878u, 0x00002256u, 0x00009878u, 0x00002260u, 0x00009878u, 0x00002272u, 0x00009878u, 0x0000227eu, 0x0000986bu, 0x000023c8u, 0x0000986bu, 0x000023d7u, 0x0000986bu, 0x000023cau, 0x001900f5u, 0x00000069u, 0x0000e5f4u, 0x000092e6u, 0x00002185u, 0x000092e6u, 0x000021a4u, 0x000092e6u, 0x0000222cu, 0x000092e6u, 0x00002257u, 0x000092e6u, 0x00002256u, 0x000092e6u, 0x00002260u, 0x000092e6u, 0x00002272u, 0x000092e6u, 0x0000227eu, 0x0000e63du, 0x000023c8u, 0x0000e63du, 0x000023d7u, 0x0000e63du, 0x000023cau, 0x001900f5u, 0x00000069u, 0x0000e4fbu, 0x00009243u, 0x00002185u, 0x00009243u, 0x000021a4u, 0x00009243u, 0x0000222cu, 0x00009243u, 0x00002257u, 0x00009243u, 0x00002256u, 0x00009243u, 0x00002260u, 0x00009243u, 0x00002272u, 0x00009243u, 0x0000227eu, 0x0000e544u, 0x000023c8u, 0x0000e544u, 0x000023d7u, 0x0000e544u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e3efu, 0x000088b3u, 0x00002185u, 0x000088b3u, 0x000021a4u, 0x000088b3u, 0x0000222cu, 0x000088b3u, 0x00002257u, 0x000088b3u, 0x00002256u, 0x000088b3u, 0x00002260u, 0x000088b3u, 0x00002272u, 0x000088b3u, 0x0000227eu, 0x0000e439u, 0x000023c8u, 0x0000e439u, 0x000023d7u, 0x0000e439u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e2e5u, 0x00008839u, 0x00002185u, 0x00008839u, 0x000021a4u, 0x00008839u, 0x0000222cu, 0x00008839u, 0x00002257u, 0x00008839u, 0x00002256u, 0x00008839u, 0x00002260u, 0x00008839u, 0x00002272u, 0x00008839u, 0x0000227eu, 0x0000e32fu, 0x000023c8u, 0x0000e32fu, 0x000023d7u, 0x0000e32fu, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e1dbu, 0x000087bcu, 0x00002185u, 0x000087bcu, 0x000021a4u, 0x000087bcu, 0x0000222cu, 0x000087bcu, 0x00002257u, 0x000087bcu, 0x00002256u, 0x000087bcu, 0x00002260u, 0x000087bcu, 0x00002272u, 0x000087bcu, 0x0000227eu, 0x0000e225u, 0x000023c8u, 0x0000e225u, 0x000023d7u, 0x0000e225u, 0x000023cau, 0x001900f5u, 0x00000013u, 0x0000e0d1u, 0x0000873du, 0x00002185u, 0x0000873du, 0x000021a4u, 0x0000873du, 0x0000222cu, 0x0000873du, 0x00002257u, 0x0000873du, 0x00002256u, 0x0000873du, 0x00002260u, 0x0000873du, 0x00002272u, 0x0000873du, 0x0000227eu, 0x0000e11bu, 0x000023c8u, 0x0000e11bu, 0x000023d7u, 0x0000e11bu, 0x000023cau, 0x001900f5u, 0x000000efu, 0x0000df70u, 0x00008039u, 0x00002185u, 0x00008039u, 0x000021a4u, 0x00008039u, 0x0000222cu, 0x00008039u, 0x00002257u, 0x00008039u, 0x00002256u, 0x00008039u, 0x00002260u, 0x00008039u, 0x00002272u, 0x00008039u, 0x0000227eu, 0x0000802eu, 0x000023c8u, 0x0000802eu, 0x000023d7u, 0x0000802eu, 0x000023cau, 0x001900f5u, 0x000000efu, 0x0000de0fu, 0x00008015u, 0x00002185u, 0x00008015u, 0x000021a4u, 0x00008015u, 0x0000222cu, 0x00008015u, 0x00002257u, 0x00008015u, 0x00002256u, 0x00008015u, 0x00002260u, 0x00008015u, 0x00002272u, 0x00008015u, 0x0000227eu, 0x0000800au, 0x000023c8u, 0x0000800au, 0x000023d7u, 0x0000800au, 0x000023cau, 0x001900f5u, 0x00000044u, 0x0000dca2u, 0x00007f4eu, 0x00002185u, 0x00007f4eu, 0x000021a4u, 0x00007f4eu, 0x0000222cu, 0x00007f4eu, 0x00002257u, 0x00007f4eu, 0x00002256u, 0x00007f4eu, 0x00002260u, 0x00007f4eu, 0x00002272u, 0x00007f4eu, 0x0000227eu, 0x00007f48u, 0x000023c8u, 0x00007f48u, 0x000023d7u, 0x00007f48u, 0x000023cau, 0x001900f5u, 0x00000044u, 0x0000db2cu, 0x00007f3fu, 0x00002185u, 0x00007f3fu, 0x000021a4u, 0x00007f3fu, 0x0000222cu, 0x00007f3fu, 0x00002257u, 0x00007f3fu, 0x00002256u, 0x00007f3fu, 0x00002260u, 0x00007f3fu, 0x00002272u, 0x00007f3fu, 0x0000227eu, 0x00007f39u, 0x000023c8u, 0x00007f39u, 0x000023d7u, 0x00007f39u, 0x000023cau, 0x001900f5u, 0x00000010u, 0x0000c294u, 0x0000c296u, 0x00002185u, 0x0000c296u, 0x000021a4u, 0x0000c296u, 0x0000222cu, 0x0000c296u, 0x00002257u, 0x0000c296u, 0x00002256u, 0x0000c296u, 0x00002260u, 0x0000c296u, 0x00002272u, 0x0000c296u, 0x0000227eu, 0x0000c296u, 0x000023c8u, 0x0000c296u, 0x000023d7u, 0x000023d8u, 0x000023cau, 0x001900f5u, 0x00000008u, 0x0000c172u, 0x0000c174u, 0x00002185u, 0x0000c174u, 0x000021a4u, 0x0000c174u, 0x0000222cu, 0x0000bed4u, 0x00002257u, 0x0000bed4u, 0x00002256u, 0x0000c174u, 0x00002260u, 0x0000c174u, 0x00002272u, 0x0000c174u, 0x0000227eu, 0x0000c174u, 0x000023c8u, 0x0000c174u, 0x000023d7u, 0x000023ddu, 0x000023cau, 0x001900f5u, 0x0000000fu, 0x0000c051u, 0x0000c053u, 0x00002185u, 0x0000c053u, 0x000021a4u, 0x0000c053u, 0x0000222cu, 0x00000626u, 0x00002257u, 0x00000626u, 0x00002256u, 0x00000627u, 0x00002260u, 0x0000c053u, 0x00002272u, 0x0000c053u, 0x0000227eu, 0x0000c053u, 0x000023c8u, 0x0000c053u, 0x000023d7u, 0x000023e1u, 0x000023cau, 0x001900f5u, 0x0000000fu, 0x0000bf04u, 0x0000bf06u, 0x00002185u, 0x0000bf06u, 0x000021a4u, 0x0000bf06u, 0x0000222cu, 0x0000bf06u, 0x00002257u, 0x0000bf06u, 0x00002256u, 0x0000bf06u, 0x00002260u, 0x0000bf06u, 0x00002272u, 0x0000bf06u, 0x0000227eu, 0x0000bf06u, 0x000023c8u, 0x0000bf06u, 0x000023d7u, 0x000023ebu, 0x000023cau, 0x001900f5u, 0x00000069u, 0x0000bf03u, 0x00000536u, 0x00002185u, 0x00000536u, 0x000021a4u, 0x00000536u, 0x0000222cu, 0x00000536u, 0x00002257u, 0x00000559u, 0x00002256u, 0x00002266u, 0x00002260u, 0x00000536u, 0x00002272u, 0x00000536u, 0x0000227eu, 0x00000536u, 0x000023c8u, 0x00000536u, 0x000023d7u, 0x00000559u, 0x000023cau, 0x0003003eu, 0x00002170u, 0x0000bf03u, 0x00070050u, 0x000000d6u, 0x00007ce4u, 0x0000c294u, 0x0000c172u, 0x0000c051u, 0x0000bf04u, 0x0003003eu, 0x00007ccfu, 0x0000c294u, 0x0003003eu, 0x00007cd0u, 0x0000c172u, 0x0003003eu, 0x00007cd1u, 0x0000c051u, 0x0003003eu, 0x00007cd2u, 0x0000bf04u, 0x000300f7u, 0x00001f9fu, 0x00000000u, 0x000400fau, 0x0000bf03u, 0x00001f9eu, 0x00001f9fu, 0x000200f8u, 0x00001f9eu, 0x00040071u, 0x00000006u, 0x00001fa2u, 0x0000c051u, 0x0004007cu, 0x00000008u, 0x00001fa3u, 0x00001fa2u, 0x000500c7u, 0x00000008u, 0x00001fa5u, 0x00001fa3u, 0x00001fa4u, 0x000500abu, 0x00000069u, 0x00001fa6u, 0x00001fa5u, 0x00000220u, 0x000300f7u, 0x00001fa8u, 0x00000000u, 0x000400fau, 0x00001fa6u, 0x00001fa7u, 0x00001faeu, 0x000200f8u, 0x00001faeu, 0x000500c7u, 0x00000008u, 0x00001fb3u, 0x00001fa3u, 0x0000114fu, 0x000500abu, 0x00000069u, 0x00001fb4u, 0x00001fb3u, 0x00000220u, 0x000300f7u, 0x00001fb6u, 0x00000000u, 0x000400fau, 0x00001fb4u, 0x00001fb5u, 0x00001fbeu, 0x000200f8u, 0x00001fbeu, 0x0003003eu, 0x00001fbfu, 0x00001f23u, 0x0003003eu, 0x00001fc1u, 0x00001f27u, 0x0003003eu, 0x00001fc3u, 0x00001f93u, 0x0003003eu, 0x00007ce5u, 0x0000c294u, 0x0003003eu, 0x00007ce6u, 0x0000c172u, 0x0003003eu, 0x00007ce7u, 0x0000c051u, 0x0003003eu, 0x00007ce8u, 0x0000bf04u, 0x000500c3u, 0x00000008u, 0x000065b5u, 0x0000c172u, 0x00000260u, 0x0003003eu, 0x00006570u, 0x000065b5u, 0x000500c7u, 0x00000008u, 0x000065b8u, 0x0000c172u, 0x000009ffu, 0x0003003eu, 0x00006571u, 0x000065b8u, 0x0003003eu, 0x00006572u, 0x00001fa3u, 0x0003003eu, 0x00006573u, 0x0000c294u, 0x0003003eu, 0x00006574u, 0x0000bf04u, 0x00080041u, 0x00000671u, 0x000065c2u, 0x00000a12u, 0x00000220u, 0x00001f93u, 0x00000220u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000065c3u, 0x000065c2u, 0x00040071u, 0x00000006u, 0x000065c4u, 0x000065c3u, 0x0003003eu, 0x00006575u, 0x000065c4u, 0x0003003eu, 0x00006577u, 0x00001f93u, 0x00060041u, 0x00000247u, 0x00006663u, 0x00000245u, 0x00000220u, 0x00001f93u, 0x0004003du, 0x00000241u, 0x00006664u, 0x00006663u, 0x00050051u, 0x00000010u, 0x00006665u, 0x00006664u, 0x00000000u, 0x0003003eu, 0x00006ba7u, 0x00006665u, 0x00050051u, 0x00000010u, 0x00006667u, 0x00006664u, 0x00000001u, 0x0003003eu, 0x00006ba8u, 0x00006667u, 0x00050051u, 0x00000010u, 0x00006669u, 0x00006664u, 0x00000002u, 0x0003003eu, 0x00006ba9u, 0x00006669u, 0x00050051u, 0x00000010u, 0x0000666bu, 0x00006664u, 0x00000003u, 0x0003003eu, 0x00006baau, 0x0000666bu, 0x00050051u, 0x00000010u, 0x0000666du, 0x00006664u, 0x00000004u, 0x0003003eu, 0x00006babu, 0x0000666du, 0x00050051u, 0x00000010u, 0x0000666fu, 0x00006664u, 0x00000005u, 0x0003003eu, 0x00006bacu, 0x0000666fu, 0x00050051u, 0x00000010u, 0x00006671u, 0x00006664u, 0x00000006u, 0x0003003eu, 0x00006badu, 0x00006671u, 0x00050051u, 0x00000010u, 0x00006673u, 0x00006664u, 0x00000007u, 0x0003003eu, 0x00006baeu, 0x00006673u, 0x00050051u, 0x00000010u, 0x00006675u, 0x00006664u, 0x00000008u, 0x0003003eu, 0x00006bafu, 0x00006675u, 0x00050051u, 0x00000010u, 0x00006677u, 0x00006664u, 0x00000009u, 0x0003003eu, 0x00006bb0u, 0x00006677u, 0x00050051u, 0x00000006u, 0x00006679u, 0x00006664u, 0x0000000au, 0x0003003eu, 0x00006bb1u, 0x00006679u, 0x00050051u, 0x00000011u, 0x0000667bu, 0x00006664u, 0x0000000bu, 0x0003003eu, 0x00006bb2u, 0x0000667bu, 0x00050051u, 0x0000000fu, 0x0000667du, 0x00006664u, 0x0000000cu, 0x0003003eu, 0x00006bb3u, 0x0000667du, 0x00050051u, 0x0000000fu, 0x0000667fu, 0x00006664u, 0x0000000du, 0x0003003eu, 0x00006bb4u, 0x0000667fu, 0x00050051u, 0x00000013u, 0x00006681u, 0x00006664u, 0x0000000eu, 0x0003003eu, 0x00006bb5u, 0x00006681u, 0x00120050u, 0x00000014u, 0x00006bc5u, 0x00006665u, 0x00006667u, 0x00006669u, 0x0000666bu, 0x0000666du, 0x0000666fu, 0x00006671u, 0x00006673u, 0x00006675u, 0x00006677u, 0x00006679u, 0x0000667bu, 0x0000667du, 0x0000667fu, 0x00006681u, 0x0003003eu, 0x00006bc6u, 0x00006665u, 0x0003003eu, 0x00006bc7u, 0x00006667u, 0x0003003eu, 0x00006bc8u, 0x00006669u, 0x0003003eu, 0x00006bc9u, 0x0000666bu, 0x0003003eu, 0x00006bcau, 0x0000666du, 0x0003003eu, 0x00006bcbu, 0x0000666fu, 0x0003003eu, 0x00006bccu, 0x00006671u, 0x0003003eu, 0x00006bcdu, 0x00006673u, 0x0003003eu, 0x00006bceu, 0x00006675u, 0x0003003eu, 0x00006bcfu, 0x00006677u, 0x0003003eu, 0x00006bd0u, 0x00006679u, 0x0003003eu, 0x00006bd1u, 0x0000667bu, 0x0003003eu, 0x00006bd2u, 0x0000667du, 0x0003003eu, 0x00006bd3u, 0x0000667fu, 0x0003003eu, 0x00006bd4u, 0x00006681u, 0x0003003eu, 0x00006bf5u, 0x00006675u, 0x0003003eu, 0x00006bf6u, 0x00006677u, 0x0003003eu, 0x00006bf8u, 0x0000667bu, 0x0003003eu, 0x00006bf9u, 0x0000667du, 0x0003003eu, 0x00006579u, 0x000065c4u, 0x00060041u, 0x00000298u, 0x00006687u, 0x00000296u, 0x00000220u, 0x000065c4u, 0x0004003du, 0x00000292u, 0x00006688u, 0x00006687u, 0x00050051u, 0x00000010u, 0x00006689u, 0x00006688u, 0x00000000u, 0x0003003eu, 0x00006b82u, 0x00006689u, 0x00050051u, 0x00000010u, 0x0000668bu, 0x00006688u, 0x00000001u, 0x0003003eu, 0x00006b83u, 0x0000668bu, 0x00050051u, 0x00000006u, 0x0000668du, 0x00006688u, 0x00000002u, 0x0003003eu, 0x00006b84u, 0x0000668du, 0x00050051u, 0x0000000fu, 0x0000668fu, 0x00006688u, 0x00000003u, 0x0003003eu, 0x00006b85u, 0x0000668fu, 0x00050051u, 0x0000000fu, 0x00006691u, 0x00006688u, 0x00000004u, 0x0003003eu, 0x00006b86u, 0x00006691u, 0x00050051u, 0x0000000fu, 0x00006693u, 0x00006688u, 0x00000005u, 0x0003003eu, 0x00006b87u, 0x00006693u, 0x00050051u, 0x0000000fu, 0x00006695u, 0x00006688u, 0x00000006u, 0x0003003eu, 0x00006b88u, 0x00006695u, 0x000a0050u, 0x0000001eu, 0x00006b90u, 0x00006689u, 0x0000668bu, 0x0000668du, 0x0000668fu, 0x00006691u, 0x00006693u, 0x00006695u, 0x0003003eu, 0x00006b91u, 0x00006689u, 0x0003003eu, 0x00006b92u, 0x0000668bu, 0x0003003eu, 0x00006b93u, 0x0000668du, 0x0003003eu, 0x00006b94u, 0x0000668fu, 0x0003003eu, 0x00006b95u, 0x00006691u, 0x0003003eu, 0x00006b96u, 0x00006693u, 0x0003003eu, 0x00006b97u, 0x00006695u, 0x0003003eu, 0x00006c00u, 0x00006689u, 0x0003003eu, 0x00006c01u, 0x0000668bu, 0x0003003eu, 0x00006c02u, 0x0000668du, 0x0003003eu, 0x00006c03u, 0x0000668fu, 0x0003003eu, 0x00006c04u, 0x00006691u, 0x000500c7u, 0x00000006u, 0x000065cbu, 0x0000668du, 0x00000314u, 0x000500abu, 0x00000069u, 0x000065ccu, 0x000065cbu, 0x0000032du, 0x0003003eu, 0x0000657au, 0x000065ccu, 0x000500c7u, 0x00000006u, 0x000065cfu, 0x0000668du, 0x0000045cu, 0x000500abu, 0x00000069u, 0x000065d0u, 0x000065cfu, 0x0000032du, 0x0003003eu, 0x0000657bu, 0x000065d0u, 0x000500c7u, 0x00000006u, 0x000065d3u, 0x0000668du, 0x00000386u, 0x000500abu, 0x00000069u, 0x000065d4u, 0x000065d3u, 0x0000032du, 0x0003003eu, 0x0000657cu, 0x000065d4u, 0x000500c7u, 0x00000006u, 0x000065d7u, 0x0000668du, 0x00000330u, 0x000500abu, 0x00000069u, 0x000065d8u, 0x000065d7u, 0x0000032du, 0x0003003eu, 0x0000657du, 0x000065d8u, 0x000500c7u, 0x00000006u, 0x000065dbu, 0x0000668du, 0x00000a36u, 0x000500abu, 0x00000069u, 0x000065dcu, 0x000065dbu, 0x0000032du, 0x0003003eu, 0x0000657eu, 0x000065dcu, 0x000500c7u, 0x00000006u, 0x000065dfu, 0x0000668du, 0x00000a3cu, 0x000500abu, 0x00000069u, 0x000065e0u, 0x000065dfu, 0x0000032du, 0x0003003eu, 0x0000657fu, 0x000065e0u, 0x000500c7u, 0x00000006u, 0x000065e3u, 0x0000668du, 0x00000a42u, 0x000500abu, 0x00000069u, 0x000065e4u, 0x000065e3u, 0x0000032du, 0x0003003eu, 0x00006580u, 0x000065e4u, 0x000500c7u, 0x00000006u, 0x000065e7u, 0x0000668du, 0x00000a48u, 0x000500abu, 0x00000069u, 0x000065e8u, 0x000065e7u, 0x0000032du, 0x0003003eu, 0x00006581u, 0x000065e8u, 0x0003003eu, 0x00006583u, 0x000065d8u, 0x000300f7u, 0x0000669du, 0x00000000u, 0x000400fau, 0x000065d8u, 0x0000669eu, 0x0000669fu, 0x000200f8u, 0x0000669fu, 0x0003003eu, 0x00006699u, 0x0000092au, 0x000200f9u, 0x0000669du, 0x000200f8u, 0x0000669eu, 0x00050041u, 0x000006e9u, 0x000066a0u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000066a1u, 0x000066a0u, 0x000500c7u, 0x0000000fu, 0x000066a2u, 0x000066a1u, 0x0000092au, 0x0003003eu, 0x00006699u, 0x000066a2u, 0x000200f9u, 0x0000669du, 0x000200f8u, 0x0000669du, 0x000700f5u, 0x0000000fu, 0x0000c7b9u, 0x000066a2u, 0x0000669eu, 0x0000092au, 0x0000669fu, 0x0003003eu, 0x00006698u, 0x0000c7b9u, 0x000300f7u, 0x000066a4u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x000066a4u, 0x00000000u, 0x000066a5u, 0x00000001u, 0x000066a6u, 0x00000002u, 0x000066a7u, 0x00000003u, 0x000066a8u, 0x00000004u, 0x000066a9u, 0x000200f8u, 0x000066a9u, 0x0004003du, 0x00000010u, 0x000066b2u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066b3u, 0x000066b2u, 0x000066b2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000669au, 0x000066b3u, 0x000200f9u, 0x000066a4u, 0x000200f8u, 0x000066a8u, 0x0004003du, 0x00000010u, 0x000066b0u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066b1u, 0x000066b0u, 0x000066b0u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x0000669au, 0x000066b1u, 0x000200f9u, 0x000066a4u, 0x000200f8u, 0x000066a7u, 0x0004003du, 0x00000010u, 0x000066acu, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066adu, 0x000066acu, 0x000066acu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000047u, 0x000066afu, 0x000066adu, 0x0000f386u, 0x0003003eu, 0x0000669au, 0x000066afu, 0x000200f9u, 0x000066a4u, 0x000200f8u, 0x000066a6u, 0x0004003du, 0x00000010u, 0x000066aau, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066abu, 0x000066aau, 0x000066aau, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x0000669au, 0x000066abu, 0x0003003eu, 0x00006698u, 0x0000092au, 0x000200f9u, 0x000066a4u, 0x000200f8u, 0x000066a5u, 0x0003003eu, 0x0000669au, 0x00000935u, 0x0003003eu, 0x00006698u, 0x0000092au, 0x000200f9u, 0x000066a4u, 0x000200f8u, 0x000066a4u, 0x000f00f5u, 0x0000000fu, 0x0000c90au, 0x0000c7b9u, 0x0000669du, 0x0000092au, 0x000066a5u, 0x0000092au, 0x000066a6u, 0x0000c7b9u, 0x000066a7u, 0x0000c7b9u, 0x000066a8u, 0x0000c7b9u, 0x000066a9u, 0x000f00f5u, 0x00000047u, 0x0000c7bau, 0x0000c7beu, 0x0000669du, 0x00000935u, 0x000066a5u, 0x000066abu, 0x000066a6u, 0x000066afu, 0x000066a7u, 0x000066b1u, 0x000066a8u, 0x000066b3u, 0x000066a9u, 0x00050051u, 0x0000000fu, 0x000066b6u, 0x0000c7bau, 0x00000000u, 0x00050051u, 0x0000000fu, 0x000066b7u, 0x0000c7bau, 0x00000001u, 0x00050051u, 0x0000000fu, 0x000066b8u, 0x0000c7bau, 0x00000002u, 0x00070050u, 0x00000010u, 0x000066b9u, 0x000066b6u, 0x000066b7u, 0x000066b8u, 0x0000c90au, 0x0003003eu, 0x0000669bu, 0x000066b9u, 0x0003003eu, 0x00006582u, 0x000066b9u, 0x00050041u, 0x0000007bu, 0x000065ebu, 0x00006582u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000065ecu, 0x000065ebu, 0x000500c2u, 0x0000000fu, 0x000065edu, 0x000065ecu, 0x0000038eu, 0x0003003eu, 0x00006584u, 0x000065edu, 0x00040071u, 0x00000006u, 0x000065f0u, 0x0000667bu, 0x0004007cu, 0x00000008u, 0x000065f1u, 0x000065f0u, 0x00040071u, 0x00000006u, 0x000065f4u, 0x0000667du, 0x0004007cu, 0x00000008u, 0x000065f5u, 0x000065f4u, 0x00040071u, 0x00000006u, 0x000065f7u, 0x000065edu, 0x0004007cu, 0x00000008u, 0x000065f8u, 0x000065f7u, 0x00040071u, 0x00000006u, 0x000065fbu, 0x00006691u, 0x0004007cu, 0x00000008u, 0x000065fcu, 0x000065fbu, 0x0003003eu, 0x00006589u, 0x000065b5u, 0x0003003eu, 0x0000658au, 0x000065f1u, 0x0003003eu, 0x0000658bu, 0x000065f5u, 0x0004003du, 0x00000011u, 0x000065feu, 0x00000708u, 0x0003003eu, 0x0000658cu, 0x000065feu, 0x0004003du, 0x0000000fu, 0x000065ffu, 0x000006eau, 0x0003003eu, 0x0000658du, 0x000065ffu, 0x0003003eu, 0x0000658eu, 0x00001fa3u, 0x0003003eu, 0x0000658fu, 0x000065f8u, 0x0003003eu, 0x00006590u, 0x000065d0u, 0x0003003eu, 0x00006591u, 0x000065fcu, 0x0003003eu, 0x00006592u, 0x000065ccu, 0x0003003eu, 0x00006593u, 0x000065e4u, 0x00050080u, 0x00000008u, 0x00006710u, 0x00001fa3u, 0x000065f8u, 0x000500afu, 0x00000069u, 0x00006711u, 0x00006710u, 0x0000025du, 0x000300f7u, 0x000066cfu, 0x00000000u, 0x000400fau, 0x000065d0u, 0x000066d0u, 0x000066d1u, 0x000200f8u, 0x000066d1u, 0x00050041u, 0x0000007bu, 0x00006767u, 0x00006596u, 0x0000032du, 0x0003003eu, 0x00006767u, 0x00000388u, 0x00050082u, 0x00000008u, 0x00006769u, 0x00000533u, 0x000065f5u, 0x0007000cu, 0x00000008u, 0x0000676au, 0x00000001u, 0x00000027u, 0x00006769u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x0000676bu, 0x0000676au, 0x0004007cu, 0x0000000fu, 0x0000676cu, 0x0000676bu, 0x00050041u, 0x0000007bu, 0x0000676du, 0x00006596u, 0x0000045cu, 0x0003003eu, 0x0000676du, 0x0000676cu, 0x0003003eu, 0x000066ccu, 0x00006711u, 0x000400a8u, 0x00000069u, 0x00006773u, 0x000065ccu, 0x000300f7u, 0x00006774u, 0x00000000u, 0x000400fau, 0x00006773u, 0x00006775u, 0x00006774u, 0x000200f8u, 0x00006775u, 0x000400a8u, 0x00000069u, 0x00006777u, 0x00006711u, 0x000500a7u, 0x00000069u, 0x00006779u, 0x00006777u, 0x000065e4u, 0x000200f9u, 0x00006774u, 0x000200f8u, 0x00006774u, 0x000700f5u, 0x00000069u, 0x0000677au, 0x000065ccu, 0x000066d1u, 0x00006779u, 0x00006775u, 0x0003003eu, 0x00006594u, 0x0000677au, 0x0003003eu, 0x00006595u, 0x00006711u, 0x0003003eu, 0x000066c5u, 0x00000559u, 0x000200f9u, 0x000066cfu, 0x000200f8u, 0x000066d0u, 0x0003003eu, 0x000066bbu, 0x000065feu, 0x00040071u, 0x00000006u, 0x00006784u, 0x000065feu, 0x0004007cu, 0x00000008u, 0x00006785u, 0x00006784u, 0x0003003eu, 0x0000677du, 0x00006785u, 0x000500c3u, 0x00000008u, 0x00006787u, 0x00006785u, 0x00000266u, 0x0003003eu, 0x0000677eu, 0x00006787u, 0x000500c7u, 0x00000008u, 0x00006789u, 0x00006785u, 0x000003dau, 0x0003003eu, 0x0000677fu, 0x00006789u, 0x00050082u, 0x00000008u, 0x0000678bu, 0x00000239u, 0x00006787u, 0x0007000cu, 0x00000008u, 0x0000678cu, 0x00000001u, 0x0000002au, 0x0000678bu, 0x00000220u, 0x0003003eu, 0x00006780u, 0x0000678cu, 0x000500c3u, 0x00000008u, 0x0000678eu, 0x000003e1u, 0x00006787u, 0x00050082u, 0x00000008u, 0x0000678fu, 0x000003e1u, 0x0000678eu, 0x0003003eu, 0x00006781u, 0x0000678fu, 0x000500c4u, 0x00000008u, 0x00006792u, 0x00006789u, 0x0000678cu, 0x00050080u, 0x00000008u, 0x00006794u, 0x00006792u, 0x0000678fu, 0x0003003eu, 0x00006782u, 0x00006794u, 0x0003003eu, 0x000066bau, 0x00006794u, 0x00040071u, 0x00000006u, 0x000066d5u, 0x000065ffu, 0x0004007cu, 0x00000008u, 0x000066d6u, 0x000066d5u, 0x0003003eu, 0x000066bdu, 0x000066d6u, 0x000500c4u, 0x00000008u, 0x00006797u, 0x0000022au, 0x000066d6u, 0x0003003eu, 0x00006795u, 0x00006797u, 0x0003003eu, 0x000066bcu, 0x00006797u, 0x000500c7u, 0x00000008u, 0x000066dcu, 0x00006787u, 0x00000533u, 0x0003003eu, 0x000066beu, 0x000066dcu, 0x0003003eu, 0x000066bfu, 0x00000536u, 0x00050082u, 0x00000008u, 0x000066e1u, 0x000065f5u, 0x000066d6u, 0x0008000cu, 0x00000008u, 0x000066e2u, 0x00000001u, 0x0000002du, 0x000066e1u, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x000066e3u, 0x000066e2u, 0x0004007cu, 0x0000000fu, 0x000066e4u, 0x000066e3u, 0x00050041u, 0x0000007bu, 0x000066e5u, 0x00006596u, 0x0000032du, 0x0003003eu, 0x000066e5u, 0x000066e4u, 0x00050082u, 0x00000008u, 0x000066eau, 0x000066d6u, 0x000065f5u, 0x0008000cu, 0x00000008u, 0x000066ebu, 0x00000001u, 0x0000002du, 0x000066eau, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x000066ecu, 0x000066ebu, 0x0004007cu, 0x0000000fu, 0x000066edu, 0x000066ecu, 0x00050041u, 0x0000007bu, 0x000066eeu, 0x00006596u, 0x0000045cu, 0x0003003eu, 0x000066eeu, 0x000066edu, 0x000500b1u, 0x00000069u, 0x000066f0u, 0x000066dcu, 0x00000230u, 0x000300f7u, 0x000066f1u, 0x00000000u, 0x000400fau, 0x000066f0u, 0x000066f2u, 0x000066f1u, 0x000200f8u, 0x000066f2u, 0x000500abu, 0x00000069u, 0x000066f4u, 0x00006797u, 0x0000054eu, 0x000300f7u, 0x000066f5u, 0x00000000u, 0x000400fau, 0x000066f4u, 0x000066f6u, 0x000066f7u, 0x000200f8u, 0x000066f7u, 0x0003003eu, 0x000066bfu, 0x00000559u, 0x0003003eu, 0x000066bcu, 0x0000055au, 0x000200f9u, 0x000066f5u, 0x000200f8u, 0x000066f6u, 0x000500c4u, 0x00000008u, 0x000066f9u, 0x00006797u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x000066fbu, 0x00000554u, 0x000066dcu, 0x0007000cu, 0x00000008u, 0x000066fcu, 0x00000001u, 0x0000002au, 0x000066f9u, 0x000066fbu, 0x0003003eu, 0x000066bcu, 0x000066fcu, 0x000200f9u, 0x000066f5u, 0x000200f8u, 0x000066f5u, 0x000700f5u, 0x00000008u, 0x0000c91fu, 0x000066fcu, 0x000066f6u, 0x0000055au, 0x000066f7u, 0x000600a9u, 0x00000069u, 0x0000f3aau, 0x000066f4u, 0x00000536u, 0x00000559u, 0x000200f9u, 0x000066f1u, 0x000200f8u, 0x000066f1u, 0x000700f5u, 0x00000069u, 0x0000c922u, 0x00000536u, 0x000066d0u, 0x0000f3aau, 0x000066f5u, 0x000700f5u, 0x00000008u, 0x0000c91eu, 0x00006797u, 0x000066d0u, 0x0000c91fu, 0x000066f5u, 0x000500c5u, 0x00000008u, 0x000066ffu, 0x000065f1u, 0x0000c91eu, 0x0003003eu, 0x000066c1u, 0x000066ffu, 0x000500abu, 0x00000069u, 0x0000679au, 0x000066ffu, 0x00000220u, 0x000300f7u, 0x0000679bu, 0x00000000u, 0x000400fau, 0x0000679au, 0x0000679cu, 0x0000679bu, 0x000200f8u, 0x0000679cu, 0x0006000cu, 0x00000008u, 0x0000679eu, 0x00000001u, 0x0000004au, 0x000066ffu, 0x000500c4u, 0x00000008u, 0x0000679fu, 0x0000022au, 0x0000679eu, 0x0003003eu, 0x000066c1u, 0x0000679fu, 0x000200f9u, 0x0000679bu, 0x000200f8u, 0x0000679bu, 0x000700f5u, 0x00000008u, 0x0000c920u, 0x000066ffu, 0x000066f1u, 0x0000679fu, 0x0000679cu, 0x0003003eu, 0x00006798u, 0x0000c920u, 0x0003003eu, 0x000066c0u, 0x0000c920u, 0x0003003eu, 0x000066c2u, 0x0000c920u, 0x000500c4u, 0x00000008u, 0x00006703u, 0x0000c920u, 0x00000230u, 0x0003003eu, 0x000066c0u, 0x00006703u, 0x000400a8u, 0x00000069u, 0x00006705u, 0x0000c922u, 0x000300f7u, 0x00006706u, 0x00000000u, 0x000400fau, 0x00006705u, 0x00006707u, 0x00006706u, 0x000200f8u, 0x00006707u, 0x00050080u, 0x00000008u, 0x0000670au, 0x000065b5u, 0x00006703u, 0x000500afu, 0x00000069u, 0x0000670cu, 0x0000670au, 0x00006794u, 0x000200f9u, 0x00006706u, 0x000200f8u, 0x00006706u, 0x000700f5u, 0x00000069u, 0x0000670du, 0x0000c922u, 0x0000679bu, 0x0000670cu, 0x00006707u, 0x0003003eu, 0x000066c3u, 0x0000670du, 0x0003003eu, 0x000066c4u, 0x00006711u, 0x000400a8u, 0x00000069u, 0x00006713u, 0x000065ccu, 0x000300f7u, 0x00006714u, 0x00000000u, 0x000400fau, 0x00006713u, 0x00006715u, 0x00006714u, 0x000200f8u, 0x00006715u, 0x000400a8u, 0x00000069u, 0x00006717u, 0x00006711u, 0x000500a7u, 0x00000069u, 0x00006719u, 0x00006717u, 0x000065e4u, 0x000500a7u, 0x00000069u, 0x0000671bu, 0x00006719u, 0x0000670du, 0x000200f9u, 0x00006714u, 0x000200f8u, 0x00006714u, 0x000700f5u, 0x00000069u, 0x0000671cu, 0x000065ccu, 0x00006706u, 0x0000671bu, 0x00006715u, 0x0003003eu, 0x00006594u, 0x0000671cu, 0x0003003eu, 0x00006595u, 0x00006711u, 0x0003003eu, 0x000066c5u, 0x00000536u, 0x000500aau, 0x00000069u, 0x0000671fu, 0x00006794u, 0x000003edu, 0x0003003eu, 0x000066c6u, 0x0000671fu, 0x000500b1u, 0x00000069u, 0x00006722u, 0x000065b5u, 0x00006794u, 0x0003003eu, 0x000066c7u, 0x00006722u, 0x00050082u, 0x00000008u, 0x00006725u, 0x000065b5u, 0x00006703u, 0x0003003eu, 0x000066c8u, 0x00006725u, 0x000500b3u, 0x00000069u, 0x00006729u, 0x00006725u, 0x00006794u, 0x000500a6u, 0x00000069u, 0x0000672au, 0x0000c922u, 0x00006729u, 0x0003003eu, 0x000066c9u, 0x0000672au, 0x000300f7u, 0x0000672cu, 0x00000000u, 0x000b00fbu, 0x000065fcu, 0x0000672cu, 0x00000000u, 0x0000672du, 0x00000001u, 0x0000672eu, 0x00000002u, 0x0000672fu, 0x00000003u, 0x00006730u, 0x000200f8u, 0x00006730u, 0x000500a7u, 0x00000069u, 0x00006763u, 0x0000670du, 0x0000672au, 0x000400a8u, 0x00000069u, 0x00006765u, 0x0000671fu, 0x000500a7u, 0x00000069u, 0x00006766u, 0x00006763u, 0x00006765u, 0x0003003eu, 0x000066c5u, 0x00006766u, 0x000200f9u, 0x0000672cu, 0x000200f8u, 0x0000672fu, 0x000500a6u, 0x00000069u, 0x00006760u, 0x00006722u, 0x0000671fu, 0x0003003eu, 0x000066c5u, 0x00006760u, 0x000200f9u, 0x0000672cu, 0x000200f8u, 0x0000672eu, 0x000400a8u, 0x00000069u, 0x0000673bu, 0x00006722u, 0x000400a8u, 0x00000069u, 0x0000673du, 0x0000670du, 0x000500a6u, 0x00000069u, 0x0000673eu, 0x0000673bu, 0x0000673du, 0x000400a8u, 0x00000069u, 0x00006740u, 0x00006711u, 0x000500a6u, 0x00000069u, 0x00006741u, 0x0000673eu, 0x00006740u, 0x000300f7u, 0x00006742u, 0x00000000u, 0x000400fau, 0x00006741u, 0x00006743u, 0x00006744u, 0x000200f8u, 0x00006744u, 0x000500c7u, 0x00000008u, 0x0000674fu, 0x0000c920u, 0x0000055au, 0x0003003eu, 0x000066cau, 0x0000674fu, 0x0006000cu, 0x00000008u, 0x000067a3u, 0x00000001u, 0x0000004au, 0x0000674fu, 0x0007000cu, 0x00000008u, 0x000067a4u, 0x00000001u, 0x0000002au, 0x000067a3u, 0x00000220u, 0x0003003eu, 0x000067a1u, 0x000067a4u, 0x0003003eu, 0x000066c2u, 0x000067a4u, 0x000500c3u, 0x00000008u, 0x00006753u, 0x00006794u, 0x000067a4u, 0x000500c3u, 0x00000008u, 0x00006756u, 0x000065b5u, 0x000067a4u, 0x00050082u, 0x00000008u, 0x00006757u, 0x00006753u, 0x00006756u, 0x000500c7u, 0x00000008u, 0x00006758u, 0x00006757u, 0x00000533u, 0x0003003eu, 0x000066cbu, 0x00006758u, 0x00050084u, 0x00000008u, 0x0000675bu, 0x00006758u, 0x00001fa3u, 0x000500c3u, 0x00000008u, 0x0000675cu, 0x0000675bu, 0x00000230u, 0x0007000cu, 0x00000008u, 0x0000675du, 0x00000001u, 0x00000027u, 0x0000675cu, 0x0000025du, 0x0003003eu, 0x0000658eu, 0x0000675du, 0x0003003eu, 0x000066c5u, 0x00000559u, 0x000200f9u, 0x00006742u, 0x000200f8u, 0x00006743u, 0x000400a8u, 0x00000069u, 0x00006746u, 0x0000671fu, 0x000300f7u, 0x00006747u, 0x00000000u, 0x000400fau, 0x00006746u, 0x00006748u, 0x00006747u, 0x000200f8u, 0x00006748u, 0x000600a9u, 0x00000069u, 0x0000674cu, 0x00006711u, 0x00006722u, 0x0000672au, 0x000200f9u, 0x00006747u, 0x000200f8u, 0x00006747u, 0x000700f5u, 0x00000069u, 0x0000674du, 0x0000671fu, 0x00006743u, 0x0000674cu, 0x00006748u, 0x0003003eu, 0x000066c5u, 0x0000674du, 0x000200f9u, 0x00006742u, 0x000200f8u, 0x00006742u, 0x000700f5u, 0x00000008u, 0x0000c952u, 0x00001fa3u, 0x00006747u, 0x0000675du, 0x00006744u, 0x000700f5u, 0x00000069u, 0x0000c94eu, 0x0000674du, 0x00006747u, 0x00000559u, 0x00006744u, 0x000200f9u, 0x0000672cu, 0x000200f8u, 0x0000672du, 0x000400a8u, 0x00000069u, 0x00006732u, 0x0000671fu, 0x000300f7u, 0x00006733u, 0x00000000u, 0x000400fau, 0x00006732u, 0x00006734u, 0x00006733u, 0x000200f8u, 0x00006734u, 0x000600a9u, 0x00000069u, 0x00006738u, 0x00006711u, 0x00006722u, 0x0000672au, 0x000200f9u, 0x00006733u, 0x000200f8u, 0x00006733u, 0x000700f5u, 0x00000069u, 0x00006739u, 0x0000671fu, 0x0000672du, 0x00006738u, 0x00006734u, 0x0003003eu, 0x000066c5u, 0x00006739u, 0x000200f9u, 0x0000672cu, 0x000200f8u, 0x0000672cu, 0x000d00f5u, 0x00000008u, 0x0000c950u, 0x00001fa3u, 0x00006714u, 0x00001fa3u, 0x00006733u, 0x0000c952u, 0x00006742u, 0x00001fa3u, 0x0000672fu, 0x00001fa3u, 0x00006730u, 0x000d00f5u, 0x00000069u, 0x0000c94du, 0x00000536u, 0x00006714u, 0x00006739u, 0x00006733u, 0x0000c94eu, 0x00006742u, 0x00006760u, 0x0000672fu, 0x00006766u, 0x00006730u, 0x000200f9u, 0x000066cfu, 0x000200f8u, 0x000066cfu, 0x000700f5u, 0x00000069u, 0x0000c955u, 0x0000671cu, 0x0000672cu, 0x0000677au, 0x00006774u, 0x000700f5u, 0x00000008u, 0x0000c94fu, 0x0000c950u, 0x0000672cu, 0x00001fa3u, 0x00006774u, 0x000700f5u, 0x00000069u, 0x0000c94cu, 0x0000c94du, 0x0000672cu, 0x00000559u, 0x00006774u, 0x0003003eu, 0x000066cdu, 0x0000c94cu, 0x0003003eu, 0x00006572u, 0x0000c94fu, 0x0003003eu, 0x00006586u, 0x0000c955u, 0x0003003eu, 0x00006587u, 0x00006711u, 0x0004003du, 0x0000006bu, 0x00006608u, 0x00006596u, 0x0003003eu, 0x00006588u, 0x00006608u, 0x0003003eu, 0x00006585u, 0x0000c94cu, 0x000300f7u, 0x0000660au, 0x00000000u, 0x000400fau, 0x0000c94cu, 0x0000660bu, 0x0000660au, 0x000200f8u, 0x0000660bu, 0x000400a8u, 0x00000069u, 0x0000660du, 0x000065e4u, 0x000500abu, 0x00000069u, 0x0000660fu, 0x0000c94fu, 0x00000220u, 0x000500a6u, 0x00000069u, 0x00006610u, 0x0000660du, 0x0000660fu, 0x000200f9u, 0x0000660au, 0x000200f8u, 0x0000660au, 0x000700f5u, 0x00000069u, 0x00006611u, 0x0000c94cu, 0x000066cfu, 0x00006610u, 0x0000660bu, 0x000300f7u, 0x00006612u, 0x00000000u, 0x000400fau, 0x00006611u, 0x00006613u, 0x00006612u, 0x000200f8u, 0x00006613u, 0x0004003du, 0x00000010u, 0x00006615u, 0x00006582u, 0x00080050u, 0x00000066u, 0x0000661bu, 0x0000c294u, 0x00006615u, 0x00006675u, 0x00006677u, 0x0000bf04u, 0x0003003eu, 0x00006c0au, 0x0000c294u, 0x0003003eu, 0x00006c0bu, 0x00006615u, 0x0003003eu, 0x00006c0cu, 0x00006675u, 0x0003003eu, 0x00006c0du, 0x00006677u, 0x0003003eu, 0x00006c0eu, 0x0000bf04u, 0x0003003eu, 0x00006598u, 0x00006689u, 0x000300f7u, 0x0000661fu, 0x00000000u, 0x000400fau, 0x000065e0u, 0x00006620u, 0x0000661fu, 0x000200f8u, 0x00006620u, 0x0003003eu, 0x00006c20u, 0x0000c294u, 0x0003003eu, 0x00006c21u, 0x00006615u, 0x0003003eu, 0x00006c22u, 0x00006675u, 0x0003003eu, 0x00006c23u, 0x00006677u, 0x0003003eu, 0x00006c24u, 0x0000bf04u, 0x0003003eu, 0x0000659au, 0x00006689u, 0x0003003eu, 0x0000659bu, 0x000065ccu, 0x0003003eu, 0x0000659cu, 0x0000c955u, 0x0003003eu, 0x0000659du, 0x000065dcu, 0x0003003eu, 0x0000659eu, 0x00006711u, 0x0003003eu, 0x0000659fu, 0x00006608u, 0x0003003eu, 0x000065a0u, 0x00000536u, 0x0003003eu, 0x000067a5u, 0x00000536u, 0x00050041u, 0x0000007bu, 0x000067b0u, 0x0000659au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000067b1u, 0x000067b0u, 0x00040071u, 0x00000006u, 0x000067b2u, 0x000067b1u, 0x0004007cu, 0x00000008u, 0x000067b3u, 0x000067b2u, 0x000300f7u, 0x000067b4u, 0x00000000u, 0x000b00fbu, 0x000067b3u, 0x000067b4u, 0x00000000u, 0x000067b5u, 0x00000001u, 0x000067b6u, 0x00000002u, 0x000067b7u, 0x00000003u, 0x000067b8u, 0x000200f8u, 0x000067b8u, 0x0004003du, 0x00000010u, 0x000067c3u, 0x00006c22u, 0x0008004fu, 0x00000047u, 0x000067c4u, 0x000067c3u, 0x000067c3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a7u, 0x000067c4u, 0x000200f9u, 0x000067b4u, 0x000200f8u, 0x000067b7u, 0x0008004fu, 0x00000047u, 0x000067c1u, 0x00006677u, 0x00006677u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a7u, 0x000067c1u, 0x000200f9u, 0x000067b4u, 0x000200f8u, 0x000067b6u, 0x0004003du, 0x00000010u, 0x000067bdu, 0x00006c21u, 0x0008004fu, 0x00000047u, 0x000067beu, 0x000067bdu, 0x000067bdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a7u, 0x000067beu, 0x000200f9u, 0x000067b4u, 0x000200f8u, 0x000067b5u, 0x0004003du, 0x00000010u, 0x000067bau, 0x00006c20u, 0x0008004fu, 0x00000047u, 0x000067bbu, 0x000067bau, 0x000067bau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a7u, 0x000067bbu, 0x000200f9u, 0x000067b4u, 0x000200f8u, 0x000067b4u, 0x000d00f5u, 0x00000047u, 0x0000ccbbu, 0x0000ccc7u, 0x00006620u, 0x000067bbu, 0x000067b5u, 0x000067beu, 0x000067b6u, 0x000067c1u, 0x000067b7u, 0x000067c4u, 0x000067b8u, 0x00050041u, 0x0000007bu, 0x000067cfu, 0x0000659au, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000067d0u, 0x000067cfu, 0x00040071u, 0x00000006u, 0x000067d1u, 0x000067d0u, 0x0004007cu, 0x00000008u, 0x000067d2u, 0x000067d1u, 0x000300f7u, 0x000067d3u, 0x00000000u, 0x000b00fbu, 0x000067d2u, 0x000067d3u, 0x00000000u, 0x000067d4u, 0x00000001u, 0x000067d5u, 0x00000002u, 0x000067d6u, 0x00000003u, 0x000067d7u, 0x000200f8u, 0x000067d7u, 0x0004003du, 0x00000010u, 0x000067e2u, 0x00006c22u, 0x0008004fu, 0x00000047u, 0x000067e3u, 0x000067e2u, 0x000067e2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a8u, 0x000067e3u, 0x000200f9u, 0x000067d3u, 0x000200f8u, 0x000067d6u, 0x0008004fu, 0x00000047u, 0x000067e0u, 0x00006677u, 0x00006677u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a8u, 0x000067e0u, 0x000200f9u, 0x000067d3u, 0x000200f8u, 0x000067d5u, 0x0004003du, 0x00000010u, 0x000067dcu, 0x00006c21u, 0x0008004fu, 0x00000047u, 0x000067ddu, 0x000067dcu, 0x000067dcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a8u, 0x000067ddu, 0x000200f9u, 0x000067d3u, 0x000200f8u, 0x000067d4u, 0x0004003du, 0x00000010u, 0x000067d9u, 0x00006c20u, 0x0008004fu, 0x00000047u, 0x000067dau, 0x000067d9u, 0x000067d9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067a8u, 0x000067dau, 0x000200f9u, 0x000067d3u, 0x000200f8u, 0x000067d3u, 0x00050041u, 0x0000007bu, 0x00006803u, 0x0000659au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006804u, 0x00006803u, 0x00040071u, 0x00000006u, 0x00006805u, 0x00006804u, 0x0004007cu, 0x00000008u, 0x00006806u, 0x00006805u, 0x000300f7u, 0x00006807u, 0x00000000u, 0x000b00fbu, 0x00006806u, 0x00006807u, 0x00000000u, 0x00006808u, 0x00000001u, 0x00006809u, 0x00000002u, 0x0000680au, 0x00000003u, 0x0000680bu, 0x000200f8u, 0x0000680bu, 0x0003003eu, 0x000067a9u, 0x00000388u, 0x000200f9u, 0x00006807u, 0x000200f8u, 0x0000680au, 0x0003003eu, 0x000067a9u, 0x0000bf04u, 0x000200f9u, 0x00006807u, 0x000200f8u, 0x00006809u, 0x00050041u, 0x0000007bu, 0x00006c2cu, 0x00006c22u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000680fu, 0x00006c2cu, 0x0003003eu, 0x000067a9u, 0x0000680fu, 0x000200f9u, 0x00006807u, 0x000200f8u, 0x00006808u, 0x00050041u, 0x0000007bu, 0x00006c2bu, 0x00006c20u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000680du, 0x00006c2bu, 0x0003003eu, 0x000067a9u, 0x0000680du, 0x000200f9u, 0x00006807u, 0x000200f8u, 0x00006807u, 0x000d00f5u, 0x0000000fu, 0x0000c9ecu, 0x0000c9fcu, 0x000067d3u, 0x0000680du, 0x00006808u, 0x0000680fu, 0x00006809u, 0x0000bf04u, 0x0000680au, 0x00000388u, 0x0000680bu, 0x00050041u, 0x0000007bu, 0x00006812u, 0x0000659au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006813u, 0x00006812u, 0x00040071u, 0x00000006u, 0x00006814u, 0x00006813u, 0x0004007cu, 0x00000008u, 0x00006815u, 0x00006814u, 0x000300f7u, 0x00006816u, 0x00000000u, 0x000b00fbu, 0x00006815u, 0x00006816u, 0x00000000u, 0x00006817u, 0x00000001u, 0x00006818u, 0x00000002u, 0x00006819u, 0x00000003u, 0x0000681au, 0x000200f8u, 0x0000681au, 0x0003003eu, 0x000067aau, 0x00000388u, 0x000200f9u, 0x00006816u, 0x000200f8u, 0x00006819u, 0x0003003eu, 0x000067aau, 0x0000046fu, 0x000200f9u, 0x00006816u, 0x000200f8u, 0x00006818u, 0x00050041u, 0x0000007bu, 0x00006c2du, 0x00006c21u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000681fu, 0x00006c2du, 0x0003003eu, 0x000067aau, 0x0000681fu, 0x000200f9u, 0x00006816u, 0x000200f8u, 0x00006817u, 0x000400c8u, 0x0000000fu, 0x0000681cu, 0x0000c9ecu, 0x000500c7u, 0x0000000fu, 0x0000681du, 0x0000681cu, 0x0000046fu, 0x0003003eu, 0x000067aau, 0x0000681du, 0x000200f9u, 0x00006816u, 0x000200f8u, 0x00006816u, 0x000d00f5u, 0x0000000fu, 0x0000cb50u, 0x0000cb61u, 0x00006807u, 0x0000681du, 0x00006817u, 0x0000681fu, 0x00006818u, 0x0000046fu, 0x00006819u, 0x00000388u, 0x0000681au, 0x000500c2u, 0x0000000fu, 0x00006821u, 0x0000c9ecu, 0x0000038fu, 0x0003003eu, 0x000067a9u, 0x00006821u, 0x000500c2u, 0x0000000fu, 0x00006823u, 0x0000cb50u, 0x0000038fu, 0x0003003eu, 0x000067aau, 0x00006823u, 0x0004003du, 0x0000000fu, 0x00006825u, 0x00006812u, 0x00040071u, 0x00000006u, 0x00006826u, 0x00006825u, 0x0004007cu, 0x00000008u, 0x00006827u, 0x00006826u, 0x000500aau, 0x00000069u, 0x00006828u, 0x00006827u, 0x0000022au, 0x000300f7u, 0x00006829u, 0x00000000u, 0x000400fau, 0x00006828u, 0x0000682au, 0x00006829u, 0x000200f8u, 0x0000682au, 0x00050041u, 0x0000007bu, 0x0000682cu, 0x0000659fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000682du, 0x0000682cu, 0x000500c2u, 0x0000000fu, 0x0000682eu, 0x00006821u, 0x0000682du, 0x000500c7u, 0x0000000fu, 0x0000682fu, 0x0000682eu, 0x000004afu, 0x0003003eu, 0x000067a9u, 0x0000682fu, 0x00050041u, 0x0000007bu, 0x00006831u, 0x0000659fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006832u, 0x00006831u, 0x000500c2u, 0x0000000fu, 0x00006833u, 0x00006823u, 0x00006832u, 0x000500c5u, 0x0000000fu, 0x00006834u, 0x00006833u, 0x0000038fu, 0x0003003eu, 0x000067aau, 0x00006834u, 0x000200f9u, 0x00006829u, 0x000200f8u, 0x00006829u, 0x000700f5u, 0x0000000fu, 0x0000ce1au, 0x00006823u, 0x00006816u, 0x00006834u, 0x0000682au, 0x000700f5u, 0x0000000fu, 0x0000ccb4u, 0x00006821u, 0x00006816u, 0x0000682fu, 0x0000682au, 0x0004003du, 0x00000047u, 0x00006835u, 0x000067a8u, 0x00040071u, 0x000004bau, 0x00006836u, 0x00006835u, 0x0004007cu, 0x000004b6u, 0x00006837u, 0x00006836u, 0x00040071u, 0x00000011u, 0x00006839u, 0x0000ccb4u, 0x0004007cu, 0x00000012u, 0x0000683au, 0x00006839u, 0x00060050u, 0x000004b6u, 0x0000683bu, 0x0000683au, 0x0000683au, 0x0000683au, 0x00050084u, 0x000004b6u, 0x0000683cu, 0x00006837u, 0x0000683bu, 0x00040071u, 0x000004bau, 0x0000683eu, 0x0000ccbbu, 0x0004007cu, 0x000004b6u, 0x0000683fu, 0x0000683eu, 0x00040071u, 0x00000011u, 0x00006841u, 0x0000ce1au, 0x0004007cu, 0x00000012u, 0x00006842u, 0x00006841u, 0x00050080u, 0x00000012u, 0x00006843u, 0x00006842u, 0x000004c8u, 0x00060050u, 0x000004b6u, 0x00006844u, 0x00006843u, 0x00006843u, 0x00006843u, 0x00050084u, 0x000004b6u, 0x00006845u, 0x0000683fu, 0x00006844u, 0x00050080u, 0x000004b6u, 0x00006846u, 0x0000683cu, 0x00006845u, 0x0003003eu, 0x000067abu, 0x00006846u, 0x0004003du, 0x000004b6u, 0x0000684eu, 0x000067abu, 0x000500c3u, 0x000004b6u, 0x00006850u, 0x0000684eu, 0x0000f38bu, 0x00040072u, 0x0000037cu, 0x00006851u, 0x00006850u, 0x0004007cu, 0x00000047u, 0x00006852u, 0x00006851u, 0x0003003eu, 0x000067a8u, 0x00006852u, 0x0004003du, 0x00000047u, 0x00006884u, 0x000067a8u, 0x000500c7u, 0x00000047u, 0x00006886u, 0x00006884u, 0x0000f38cu, 0x0003003eu, 0x000067a5u, 0x00000559u, 0x0003003eu, 0x000067a6u, 0x00006886u, 0x0003003eu, 0x000067adu, 0x00006886u, 0x0009004fu, 0x00000010u, 0x0000662bu, 0x0000c294u, 0x00006886u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00006c0au, 0x0000662bu, 0x0003003eu, 0x00006598u, 0x0000668bu, 0x000200f9u, 0x0000661fu, 0x000200f8u, 0x0000661fu, 0x000700f5u, 0x00000047u, 0x0000ee42u, 0x0000ccc7u, 0x00006613u, 0x0000ccbbu, 0x00006829u, 0x000700f5u, 0x0000000fu, 0x0000ee1au, 0x0000cb61u, 0x00006613u, 0x0000ce1au, 0x00006829u, 0x000700f5u, 0x0000000fu, 0x0000edf2u, 0x0000c9fcu, 0x00006613u, 0x0000ccb4u, 0x00006829u, 0x000700f5u, 0x00000010u, 0x0000ce87u, 0x0000c294u, 0x00006613u, 0x0000662bu, 0x00006829u, 0x00070050u, 0x000005fbu, 0x0000f3abu, 0x000065e0u, 0x000065e0u, 0x000065e0u, 0x000065e0u, 0x000600a9u, 0x00000010u, 0x0000f3acu, 0x0000f3abu, 0x0000668bu, 0x00006689u, 0x00080050u, 0x00000066u, 0x00006c1fu, 0x0000ce87u, 0x00006615u, 0x00006675u, 0x00006677u, 0x0000bf04u, 0x0003003eu, 0x00006c2eu, 0x0000ce87u, 0x0003003eu, 0x00006c2fu, 0x00006615u, 0x0003003eu, 0x00006c30u, 0x00006675u, 0x0003003eu, 0x00006c31u, 0x00006677u, 0x0003003eu, 0x00006c32u, 0x0000bf04u, 0x0003003eu, 0x000065a3u, 0x0000f3acu, 0x0003003eu, 0x000065a4u, 0x000065ccu, 0x0003003eu, 0x000065a5u, 0x0000c955u, 0x0003003eu, 0x000065a6u, 0x000065dcu, 0x0003003eu, 0x000065a7u, 0x00006711u, 0x0003003eu, 0x000065a8u, 0x00006608u, 0x0003003eu, 0x000065a9u, 0x00000559u, 0x0003003eu, 0x00006888u, 0x00000536u, 0x000300f7u, 0x00006891u, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00006892u, 0x000200f8u, 0x00006892u, 0x00050041u, 0x0000007bu, 0x00006893u, 0x000065a3u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006894u, 0x00006893u, 0x00040071u, 0x00000006u, 0x00006895u, 0x00006894u, 0x0004007cu, 0x00000008u, 0x00006896u, 0x00006895u, 0x000300f7u, 0x00006897u, 0x00000000u, 0x000b00fbu, 0x00006896u, 0x00006897u, 0x00000000u, 0x00006898u, 0x00000001u, 0x00006899u, 0x00000002u, 0x0000689au, 0x00000003u, 0x0000689bu, 0x000200f8u, 0x0000689bu, 0x0004003du, 0x00000010u, 0x000068a6u, 0x00006c30u, 0x0008004fu, 0x00000047u, 0x000068a7u, 0x000068a6u, 0x000068a6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688au, 0x000068a7u, 0x000200f9u, 0x00006897u, 0x000200f8u, 0x0000689au, 0x0008004fu, 0x00000047u, 0x000068a4u, 0x00006677u, 0x00006677u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688au, 0x000068a4u, 0x000200f9u, 0x00006897u, 0x000200f8u, 0x00006899u, 0x0004003du, 0x00000010u, 0x000068a0u, 0x00006c2fu, 0x0008004fu, 0x00000047u, 0x000068a1u, 0x000068a0u, 0x000068a0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688au, 0x000068a1u, 0x000200f9u, 0x00006897u, 0x000200f8u, 0x00006898u, 0x0004003du, 0x00000010u, 0x0000689du, 0x00006c2eu, 0x0008004fu, 0x00000047u, 0x0000689eu, 0x0000689du, 0x0000689du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688au, 0x0000689eu, 0x000200f9u, 0x00006897u, 0x000200f8u, 0x00006897u, 0x000d00f5u, 0x00000047u, 0x0000d1c4u, 0x0000d1d1u, 0x00006892u, 0x0000689eu, 0x00006898u, 0x000068a1u, 0x00006899u, 0x000068a4u, 0x0000689au, 0x000068a7u, 0x0000689bu, 0x000400a8u, 0x00000069u, 0x000068adu, 0x00006711u, 0x000500a7u, 0x00000069u, 0x000068aeu, 0x000065dcu, 0x000068adu, 0x000300f7u, 0x000068afu, 0x00000000u, 0x000400fau, 0x000068aeu, 0x000068b0u, 0x000068afu, 0x000200f8u, 0x000068b0u, 0x0003003eu, 0x00006888u, 0x00000559u, 0x0003003eu, 0x00006889u, 0x0000d1c4u, 0x000200f9u, 0x00006891u, 0x000200f8u, 0x000068afu, 0x00050041u, 0x0000007bu, 0x000068b2u, 0x000065a3u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000068b3u, 0x000068b2u, 0x00040071u, 0x00000006u, 0x000068b4u, 0x000068b3u, 0x0004007cu, 0x00000008u, 0x000068b5u, 0x000068b4u, 0x000300f7u, 0x000068b6u, 0x00000000u, 0x000b00fbu, 0x000068b5u, 0x000068b6u, 0x00000000u, 0x000068b7u, 0x00000001u, 0x000068b8u, 0x00000002u, 0x000068b9u, 0x00000003u, 0x000068bau, 0x000200f8u, 0x000068bau, 0x0004003du, 0x00000010u, 0x000068c5u, 0x00006c30u, 0x0008004fu, 0x00000047u, 0x000068c6u, 0x000068c5u, 0x000068c5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688bu, 0x000068c6u, 0x000200f9u, 0x000068b6u, 0x000200f8u, 0x000068b9u, 0x0008004fu, 0x00000047u, 0x000068c3u, 0x00006677u, 0x00006677u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688bu, 0x000068c3u, 0x000200f9u, 0x000068b6u, 0x000200f8u, 0x000068b8u, 0x0004003du, 0x00000010u, 0x000068bfu, 0x00006c2fu, 0x0008004fu, 0x00000047u, 0x000068c0u, 0x000068bfu, 0x000068bfu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688bu, 0x000068c0u, 0x000200f9u, 0x000068b6u, 0x000200f8u, 0x000068b7u, 0x0004003du, 0x00000010u, 0x000068bcu, 0x00006c2eu, 0x0008004fu, 0x00000047u, 0x000068bdu, 0x000068bcu, 0x000068bcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000688bu, 0x000068bdu, 0x000200f9u, 0x000068b6u, 0x000200f8u, 0x000068b6u, 0x000400a8u, 0x00000069u, 0x000068cbu, 0x0000c955u, 0x000400a8u, 0x00000069u, 0x000068ccu, 0x000068cbu, 0x000300f7u, 0x000068cdu, 0x00000000u, 0x000400fau, 0x000068ccu, 0x000068ceu, 0x000068cdu, 0x000200f8u, 0x000068ceu, 0x00050041u, 0x0000007bu, 0x000068cfu, 0x000065a3u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000068d0u, 0x000068cfu, 0x00040071u, 0x00000006u, 0x000068d1u, 0x000068d0u, 0x0004007cu, 0x00000008u, 0x000068d2u, 0x000068d1u, 0x000500aau, 0x00000069u, 0x000068d3u, 0x000068d2u, 0x00000220u, 0x000300f7u, 0x000068d4u, 0x00000000u, 0x000400fau, 0x000068d3u, 0x000068d5u, 0x000068d4u, 0x000200f8u, 0x000068d5u, 0x00050041u, 0x0000007bu, 0x000068d6u, 0x000065a3u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068d7u, 0x000068d6u, 0x00040071u, 0x00000006u, 0x000068d8u, 0x000068d7u, 0x0004007cu, 0x00000008u, 0x000068d9u, 0x000068d8u, 0x000500aau, 0x00000069u, 0x000068dau, 0x000068d9u, 0x00000220u, 0x000200f9u, 0x000068d4u, 0x000200f8u, 0x000068d4u, 0x000700f5u, 0x00000069u, 0x000068dbu, 0x000068d3u, 0x000068ceu, 0x000068dau, 0x000068d5u, 0x000300f7u, 0x000068dcu, 0x00000000u, 0x000400fau, 0x000068dbu, 0x000068ddu, 0x000068dcu, 0x000200f8u, 0x000068ddu, 0x00050041u, 0x0000007bu, 0x00006c38u, 0x00006c2eu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068dfu, 0x00006c38u, 0x000500aau, 0x00000069u, 0x000068e0u, 0x000068dfu, 0x0000046fu, 0x000200f9u, 0x000068dcu, 0x000200f8u, 0x000068dcu, 0x000700f5u, 0x00000069u, 0x000068e1u, 0x000068dbu, 0x000068d4u, 0x000068e0u, 0x000068ddu, 0x000200f9u, 0x000068cdu, 0x000200f8u, 0x000068cdu, 0x000700f5u, 0x00000069u, 0x000068e2u, 0x000068cbu, 0x000068b6u, 0x000068e1u, 0x000068dcu, 0x000300f7u, 0x000068e3u, 0x00000000u, 0x000400fau, 0x000068e2u, 0x000068e4u, 0x000068e3u, 0x000200f8u, 0x000068e4u, 0x0004003du, 0x00000047u, 0x000068e5u, 0x0000688bu, 0x0003003eu, 0x00006888u, 0x00000559u, 0x0003003eu, 0x00006889u, 0x000068e5u, 0x000200f9u, 0x00006891u, 0x000200f8u, 0x000068e3u, 0x00050041u, 0x0000007bu, 0x000068e6u, 0x000065a3u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000068e7u, 0x000068e6u, 0x00040071u, 0x00000006u, 0x000068e8u, 0x000068e7u, 0x0004007cu, 0x00000008u, 0x000068e9u, 0x000068e8u, 0x000300f7u, 0x000068eau, 0x00000000u, 0x000b00fbu, 0x000068e9u, 0x000068eau, 0x00000000u, 0x000068ebu, 0x00000001u, 0x000068ecu, 0x00000002u, 0x000068edu, 0x00000003u, 0x000068eeu, 0x000200f8u, 0x000068eeu, 0x0003003eu, 0x0000688cu, 0x00000388u, 0x000200f9u, 0x000068eau, 0x000200f8u, 0x000068edu, 0x0003003eu, 0x0000688cu, 0x0000bf04u, 0x000200f9u, 0x000068eau, 0x000200f8u, 0x000068ecu, 0x00050041u, 0x0000007bu, 0x00006c3au, 0x00006c30u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068f2u, 0x00006c3au, 0x0003003eu, 0x0000688cu, 0x000068f2u, 0x000200f9u, 0x000068eau, 0x000200f8u, 0x000068ebu, 0x00050041u, 0x0000007bu, 0x00006c39u, 0x00006c2eu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068f0u, 0x00006c39u, 0x0003003eu, 0x0000688cu, 0x000068f0u, 0x000200f9u, 0x000068eau, 0x000200f8u, 0x000068eau, 0x000d00f5u, 0x0000000fu, 0x0000cedbu, 0x0000ceecu, 0x000068e3u, 0x000068f0u, 0x000068ebu, 0x000068f2u, 0x000068ecu, 0x0000bf04u, 0x000068edu, 0x00000388u, 0x000068eeu, 0x00050041u, 0x0000007bu, 0x000068f5u, 0x000065a3u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068f6u, 0x000068f5u, 0x00040071u, 0x00000006u, 0x000068f7u, 0x000068f6u, 0x0004007cu, 0x00000008u, 0x000068f8u, 0x000068f7u, 0x000300f7u, 0x000068f9u, 0x00000000u, 0x000b00fbu, 0x000068f8u, 0x000068f9u, 0x00000000u, 0x000068fau, 0x00000001u, 0x000068fbu, 0x00000002u, 0x000068fcu, 0x00000003u, 0x000068fdu, 0x000200f8u, 0x000068fdu, 0x0003003eu, 0x0000688du, 0x00000388u, 0x000200f9u, 0x000068f9u, 0x000200f8u, 0x000068fcu, 0x0003003eu, 0x0000688du, 0x0000046fu, 0x000200f9u, 0x000068f9u, 0x000200f8u, 0x000068fbu, 0x00050041u, 0x0000007bu, 0x00006c3bu, 0x00006c2fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006902u, 0x00006c3bu, 0x0003003eu, 0x0000688du, 0x00006902u, 0x000200f9u, 0x000068f9u, 0x000200f8u, 0x000068fau, 0x000400c8u, 0x0000000fu, 0x000068ffu, 0x0000cedbu, 0x000500c7u, 0x0000000fu, 0x00006900u, 0x000068ffu, 0x0000046fu, 0x0003003eu, 0x0000688du, 0x00006900u, 0x000200f9u, 0x000068f9u, 0x000200f8u, 0x000068f9u, 0x000d00f5u, 0x0000000fu, 0x0000d04cu, 0x0000d05eu, 0x000068eau, 0x00006900u, 0x000068fau, 0x00006902u, 0x000068fbu, 0x0000046fu, 0x000068fcu, 0x00000388u, 0x000068fdu, 0x000500c2u, 0x0000000fu, 0x00006904u, 0x0000cedbu, 0x0000038fu, 0x0003003eu, 0x0000688cu, 0x00006904u, 0x000500c2u, 0x0000000fu, 0x00006906u, 0x0000d04cu, 0x0000038fu, 0x0003003eu, 0x0000688du, 0x00006906u, 0x0004003du, 0x0000000fu, 0x00006908u, 0x000068f5u, 0x00040071u, 0x00000006u, 0x00006909u, 0x00006908u, 0x0004007cu, 0x00000008u, 0x0000690au, 0x00006909u, 0x000500aau, 0x00000069u, 0x0000690bu, 0x0000690au, 0x0000022au, 0x000300f7u, 0x0000690cu, 0x00000000u, 0x000400fau, 0x0000690bu, 0x0000690du, 0x0000690cu, 0x000200f8u, 0x0000690du, 0x00050041u, 0x0000007bu, 0x0000690fu, 0x000065a8u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006910u, 0x0000690fu, 0x000500c2u, 0x0000000fu, 0x00006911u, 0x00006904u, 0x00006910u, 0x000500c7u, 0x0000000fu, 0x00006912u, 0x00006911u, 0x000004afu, 0x0003003eu, 0x0000688cu, 0x00006912u, 0x00050041u, 0x0000007bu, 0x00006914u, 0x000065a8u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006915u, 0x00006914u, 0x000500c2u, 0x0000000fu, 0x00006916u, 0x00006906u, 0x00006915u, 0x000500c5u, 0x0000000fu, 0x00006917u, 0x00006916u, 0x0000038fu, 0x0003003eu, 0x0000688du, 0x00006917u, 0x000200f9u, 0x0000690cu, 0x000200f8u, 0x0000690cu, 0x000700f5u, 0x0000000fu, 0x0000d330u, 0x00006906u, 0x000068f9u, 0x00006917u, 0x0000690du, 0x000700f5u, 0x0000000fu, 0x0000d1bdu, 0x00006904u, 0x000068f9u, 0x00006912u, 0x0000690du, 0x0004003du, 0x00000047u, 0x00006918u, 0x0000688bu, 0x00040071u, 0x000004bau, 0x00006919u, 0x00006918u, 0x0004007cu, 0x000004b6u, 0x0000691au, 0x00006919u, 0x00040071u, 0x00000011u, 0x0000691cu, 0x0000d1bdu, 0x0004007cu, 0x00000012u, 0x0000691du, 0x0000691cu, 0x00060050u, 0x000004b6u, 0x0000691eu, 0x0000691du, 0x0000691du, 0x0000691du, 0x00050084u, 0x000004b6u, 0x0000691fu, 0x0000691au, 0x0000691eu, 0x00040071u, 0x000004bau, 0x00006921u, 0x0000d1c4u, 0x0004007cu, 0x000004b6u, 0x00006922u, 0x00006921u, 0x00040071u, 0x00000011u, 0x00006924u, 0x0000d330u, 0x0004007cu, 0x00000012u, 0x00006925u, 0x00006924u, 0x00050080u, 0x00000012u, 0x00006926u, 0x00006925u, 0x000004c8u, 0x00060050u, 0x000004b6u, 0x00006927u, 0x00006926u, 0x00006926u, 0x00006926u, 0x00050084u, 0x000004b6u, 0x00006928u, 0x00006922u, 0x00006927u, 0x00050080u, 0x000004b6u, 0x00006929u, 0x0000691fu, 0x00006928u, 0x0003003eu, 0x0000688eu, 0x00006929u, 0x000500a6u, 0x00000069u, 0x0000692du, 0x00000536u, 0x000065ccu, 0x000300f7u, 0x0000692eu, 0x00000000u, 0x000400fau, 0x0000692du, 0x0000692fu, 0x00006930u, 0x000200f8u, 0x00006930u, 0x00040071u, 0x00000006u, 0x00006937u, 0x0000d1bdu, 0x0004007cu, 0x00000008u, 0x00006938u, 0x00006937u, 0x000500c3u, 0x00000008u, 0x00006939u, 0x00006938u, 0x0000022du, 0x00040071u, 0x00000006u, 0x0000693bu, 0x0000d330u, 0x0004007cu, 0x00000008u, 0x0000693cu, 0x0000693bu, 0x000500c3u, 0x00000008u, 0x0000693du, 0x0000693cu, 0x0000022du, 0x00050080u, 0x00000008u, 0x0000693eu, 0x00006939u, 0x0000693du, 0x00050080u, 0x00000008u, 0x0000693fu, 0x0000693eu, 0x0000022au, 0x0003003eu, 0x0000688fu, 0x0000693fu, 0x0004003du, 0x000004b6u, 0x00006940u, 0x0000688eu, 0x000500c3u, 0x000004b6u, 0x00006942u, 0x00006940u, 0x0000f38du, 0x0003003eu, 0x0000688eu, 0x00006942u, 0x0004003du, 0x000004b6u, 0x00006943u, 0x0000688eu, 0x000500c7u, 0x000004b6u, 0x00006945u, 0x00006943u, 0x0000f38eu, 0x0003003eu, 0x0000688eu, 0x00006945u, 0x0004003du, 0x000004edu, 0x00006946u, 0x000004efu, 0x000500c4u, 0x00000008u, 0x00006948u, 0x0000693fu, 0x00000266u, 0x00050041u, 0x000001c4u, 0x00006949u, 0x0000688eu, 0x0000032du, 0x0004003du, 0x00000012u, 0x0000694au, 0x00006949u, 0x00040072u, 0x00000008u, 0x0000694bu, 0x0000694au, 0x000500c5u, 0x00000008u, 0x0000694cu, 0x00006948u, 0x0000694bu, 0x0005005fu, 0x000004f7u, 0x0000694du, 0x00006946u, 0x0000694cu, 0x00050051u, 0x00000006u, 0x0000694eu, 0x0000694du, 0x00000000u, 0x00040071u, 0x0000000fu, 0x0000694fu, 0x0000694eu, 0x00050041u, 0x0000007bu, 0x00006950u, 0x0000688bu, 0x0000032du, 0x0003003eu, 0x00006950u, 0x0000694fu, 0x00050041u, 0x000001c4u, 0x00006954u, 0x0000688eu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00006955u, 0x00006954u, 0x00040072u, 0x00000008u, 0x00006956u, 0x00006955u, 0x000500c5u, 0x00000008u, 0x00006957u, 0x00006948u, 0x00006956u, 0x0005005fu, 0x000004f7u, 0x00006958u, 0x00006946u, 0x00006957u, 0x00050051u, 0x00000006u, 0x00006959u, 0x00006958u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x0000695au, 0x00006959u, 0x00050041u, 0x0000007bu, 0x0000695bu, 0x0000688bu, 0x0000045cu, 0x0003003eu, 0x0000695bu, 0x0000695au, 0x00050041u, 0x000001c4u, 0x0000695fu, 0x0000688eu, 0x00000386u, 0x0004003du, 0x00000012u, 0x00006960u, 0x0000695fu, 0x00040072u, 0x00000008u, 0x00006961u, 0x00006960u, 0x000500c5u, 0x00000008u, 0x00006962u, 0x00006948u, 0x00006961u, 0x0005005fu, 0x000004f7u, 0x00006963u, 0x00006946u, 0x00006962u, 0x00050051u, 0x00000006u, 0x00006964u, 0x00006963u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00006965u, 0x00006964u, 0x00050041u, 0x0000007bu, 0x00006966u, 0x0000688bu, 0x00000386u, 0x0003003eu, 0x00006966u, 0x00006965u, 0x000200f9u, 0x0000692eu, 0x000200f8u, 0x0000692fu, 0x0004003du, 0x000004b6u, 0x00006931u, 0x0000688eu, 0x000500c3u, 0x000004b6u, 0x00006933u, 0x00006931u, 0x0000f38bu, 0x00040072u, 0x0000037cu, 0x00006934u, 0x00006933u, 0x0004007cu, 0x00000047u, 0x00006935u, 0x00006934u, 0x0003003eu, 0x0000688bu, 0x00006935u, 0x000200f9u, 0x0000692eu, 0x000200f8u, 0x0000692eu, 0x0004003du, 0x00000047u, 0x00006967u, 0x0000688bu, 0x000500c7u, 0x00000047u, 0x00006969u, 0x00006967u, 0x0000f38cu, 0x0003003eu, 0x00006888u, 0x00000559u, 0x0003003eu, 0x00006889u, 0x00006969u, 0x000200f9u, 0x00006891u, 0x000200f8u, 0x00006891u, 0x000900f5u, 0x0000000fu, 0x0000ee83u, 0x0000d05eu, 0x000068b0u, 0x0000d05eu, 0x000068e4u, 0x0000d330u, 0x0000692eu, 0x000900f5u, 0x0000000fu, 0x0000ee68u, 0x0000ceecu, 0x000068b0u, 0x0000ceecu, 0x000068e4u, 0x0000d1bdu, 0x0000692eu, 0x000900f5u, 0x00000047u, 0x0000d342u, 0x0000d1c4u, 0x000068b0u, 0x000068e5u, 0x000068e4u, 0x00006969u, 0x0000692eu, 0x0003003eu, 0x00006890u, 0x0000d342u, 0x0003003eu, 0x000065a1u, 0x0000d342u, 0x000300f7u, 0x00006637u, 0x00000000u, 0x000400fau, 0x000065e8u, 0x00006638u, 0x00006637u, 0x000200f8u, 0x00006638u, 0x00040071u, 0x0000030cu, 0x0000663au, 0x0000d342u, 0x0004007cu, 0x00000044u, 0x0000663bu, 0x0000663au, 0x0003003eu, 0x000065aau, 0x0000663bu, 0x0003003eu, 0x000065abu, 0x000065b8u, 0x00060050u, 0x00000044u, 0x00006971u, 0x000065b8u, 0x000065b8u, 0x000065b8u, 0x000500c3u, 0x00000044u, 0x00006972u, 0x00006971u, 0x00000353u, 0x000500c7u, 0x00000044u, 0x00006974u, 0x00006972u, 0x0000f387u, 0x0003003eu, 0x0000696bu, 0x00006974u, 0x000500c7u, 0x00000044u, 0x00006977u, 0x0000663bu, 0x0000f388u, 0x00050080u, 0x00000044u, 0x00006979u, 0x00006977u, 0x0000f389u, 0x000500adu, 0x00000363u, 0x0000697bu, 0x0000663bu, 0x00000362u, 0x000600a9u, 0x00000044u, 0x0000697cu, 0x0000697bu, 0x0000035fu, 0x00006979u, 0x0003003eu, 0x0000696cu, 0x0000697cu, 0x000500c7u, 0x00000044u, 0x00006980u, 0x0000663bu, 0x0000f387u, 0x00050082u, 0x00000044u, 0x00006981u, 0x00006974u, 0x00006980u, 0x000500c3u, 0x00000044u, 0x00006983u, 0x00006981u, 0x0000f38au, 0x0003003eu, 0x0000696du, 0x00006983u, 0x00050082u, 0x00000044u, 0x00006986u, 0x0000697cu, 0x0000663bu, 0x0003003eu, 0x0000696eu, 0x00006986u, 0x000500c7u, 0x00000044u, 0x0000698au, 0x00006986u, 0x00006983u, 0x00050080u, 0x00000044u, 0x0000698bu, 0x0000663bu, 0x0000698au, 0x0003003eu, 0x0000696cu, 0x0000698bu, 0x000500c7u, 0x00000044u, 0x0000698eu, 0x0000698bu, 0x0000035fu, 0x00040072u, 0x0000037cu, 0x0000698fu, 0x0000698eu, 0x0004007cu, 0x00000047u, 0x00006990u, 0x0000698fu, 0x0003003eu, 0x0000696fu, 0x00006990u, 0x0003003eu, 0x000065a1u, 0x00006990u, 0x000200f9u, 0x00006637u, 0x000200f8u, 0x00006637u, 0x000700f5u, 0x00000047u, 0x0000d40au, 0x0000d342u, 0x00006891u, 0x00006990u, 0x00006638u, 0x00040071u, 0x00000006u, 0x00006643u, 0x0000668fu, 0x0004007cu, 0x00000008u, 0x00006644u, 0x00006643u, 0x0003003eu, 0x000065adu, 0x0000c94fu, 0x0003003eu, 0x000065aeu, 0x000065f8u, 0x0003003eu, 0x000065afu, 0x0000c955u, 0x0003003eu, 0x000065b0u, 0x00006644u, 0x0003003eu, 0x00006991u, 0x00000220u, 0x000300f7u, 0x00006994u, 0x00000000u, 0x000b00fbu, 0x00006644u, 0x00006994u, 0x00000000u, 0x00006995u, 0x00000001u, 0x00006996u, 0x00000002u, 0x00006997u, 0x00000003u, 0x00006998u, 0x000200f8u, 0x00006998u, 0x0003003eu, 0x00006991u, 0x000065f8u, 0x000200f9u, 0x00006994u, 0x000200f8u, 0x00006997u, 0x0003003eu, 0x00006991u, 0x0000023cu, 0x000200f9u, 0x00006994u, 0x000200f8u, 0x00006996u, 0x00050080u, 0x00000008u, 0x000069a6u, 0x0000c94fu, 0x000065f8u, 0x000500c7u, 0x00000008u, 0x000069a7u, 0x000069a6u, 0x0000023cu, 0x0003003eu, 0x00006991u, 0x000069a7u, 0x000200f9u, 0x00006994u, 0x000200f8u, 0x00006995u, 0x000300f7u, 0x0000699au, 0x00000000u, 0x000400fau, 0x0000c955u, 0x0000699bu, 0x0000699cu, 0x000200f8u, 0x0000699cu, 0x00050082u, 0x00000008u, 0x000069a2u, 0x0000c94fu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x000069a3u, 0x000069a2u, 0x0000023cu, 0x0003003eu, 0x00006991u, 0x000069a3u, 0x000200f9u, 0x0000699au, 0x000200f8u, 0x0000699bu, 0x00050080u, 0x00000008u, 0x0000699fu, 0x000065f8u, 0x0000c94fu, 0x0007000cu, 0x00000008u, 0x000069a0u, 0x00000001u, 0x00000027u, 0x0000023cu, 0x0000699fu, 0x0003003eu, 0x00006991u, 0x000069a0u, 0x000200f9u, 0x0000699au, 0x000200f8u, 0x0000699au, 0x000700f5u, 0x00000008u, 0x0000d408u, 0x000069a0u, 0x0000699bu, 0x000069a3u, 0x0000699cu, 0x000200f9u, 0x00006994u, 0x000200f8u, 0x00006994u, 0x000d00f5u, 0x00000008u, 0x0000d407u, 0x00000220u, 0x00006637u, 0x0000d408u, 0x0000699au, 0x000069a7u, 0x00006996u, 0x0000023cu, 0x00006997u, 0x000065f8u, 0x00006998u, 0x0003003eu, 0x00006992u, 0x0000d407u, 0x0003003eu, 0x000065acu, 0x0000d407u, 0x000500c4u, 0x00000008u, 0x0000664au, 0x0000d407u, 0x00000236u, 0x00040072u, 0x0000037bu, 0x0000664bu, 0x0000664au, 0x0004007cu, 0x0000000fu, 0x0000664cu, 0x0000664bu, 0x00050051u, 0x0000000fu, 0x0000664du, 0x0000d40au, 0x00000000u, 0x00050051u, 0x0000000fu, 0x0000664eu, 0x0000d40au, 0x00000001u, 0x00050051u, 0x0000000fu, 0x0000664fu, 0x0000d40au, 0x00000002u, 0x00070050u, 0x00000010u, 0x00006650u, 0x0000664du, 0x0000664eu, 0x0000664fu, 0x0000664cu, 0x0003003eu, 0x000065b1u, 0x00006650u, 0x000300f7u, 0x000069aau, 0x00000000u, 0x000400fau, 0x0000094fu, 0x000069abu, 0x000069acu, 0x000200f8u, 0x000069acu, 0x0003003eu, 0x00000675u, 0x00006650u, 0x000200f9u, 0x000069aau, 0x000200f8u, 0x000069abu, 0x0008004fu, 0x00000047u, 0x000069aeu, 0x00006650u, 0x00006650u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000069afu, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000069b0u, 0x000069afu, 0x00006650u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000069b0u, 0x000200f9u, 0x000069aau, 0x000200f8u, 0x000069aau, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000300f7u, 0x00006653u, 0x00000000u, 0x000400fau, 0x000065d4u, 0x00006654u, 0x00006655u, 0x000200f8u, 0x00006655u, 0x000300f7u, 0x0000665du, 0x00000000u, 0x000400fau, 0x00000852u, 0x0000665eu, 0x0000665du, 0x000200f8u, 0x0000665eu, 0x000300f7u, 0x000069f8u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000069f8u, 0x00000002u, 0x000069f9u, 0x00000003u, 0x000069fau, 0x000200f8u, 0x000069fau, 0x0004003du, 0x00000010u, 0x00006a17u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x00006a18u, 0x00006a17u, 0x00006a17u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x00006a19u, 0x00006a18u, 0x0003003eu, 0x000069f5u, 0x00006a19u, 0x00050041u, 0x00000007u, 0x00006a1au, 0x000069f5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006a1bu, 0x00006a1au, 0x000500c4u, 0x00000006u, 0x00006a1cu, 0x00006a1bu, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006a1du, 0x000069f5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006a1eu, 0x00006a1du, 0x000500c5u, 0x00000006u, 0x00006a1fu, 0x00006a1cu, 0x00006a1eu, 0x0003003eu, 0x000069f6u, 0x00006a1fu, 0x000500c7u, 0x00000006u, 0x00006a21u, 0x00006a1fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006a22u, 0x00006a21u, 0x00000464u, 0x0003003eu, 0x000069f7u, 0x00006a22u, 0x000500c2u, 0x00000006u, 0x00006a24u, 0x00006a1fu, 0x00000386u, 0x00040071u, 0x00000011u, 0x00006a25u, 0x00006a24u, 0x0003003eu, 0x00000708u, 0x00006a25u, 0x000500c7u, 0x00000006u, 0x00006a27u, 0x00006a1fu, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00006a28u, 0x00006a27u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00006a2au, 0x00006a28u, 0x00006a22u, 0x00040071u, 0x0000000fu, 0x00006a2bu, 0x00006a2au, 0x0003003eu, 0x000006eau, 0x00006a2bu, 0x000200f9u, 0x000069f8u, 0x000200f8u, 0x000069f9u, 0x00050041u, 0x000006e9u, 0x000069fbu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000069fcu, 0x000069fbu, 0x000500c2u, 0x0000000fu, 0x000069fdu, 0x000069fcu, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x000069feu, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000069ffu, 0x000069feu, 0x000500c7u, 0x0000000fu, 0x00006a00u, 0x000069ffu, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x00006a01u, 0x000069fdu, 0x00006a00u, 0x0003003eu, 0x000006eau, 0x00006a01u, 0x00050041u, 0x000006e9u, 0x00006a02u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006a03u, 0x00006a02u, 0x00040071u, 0x00000006u, 0x00006a04u, 0x00006a03u, 0x000500c7u, 0x00000006u, 0x00006a05u, 0x00006a04u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x00006a06u, 0x00006a05u, 0x000006f7u, 0x0003003eu, 0x000069f4u, 0x00006a06u, 0x00050041u, 0x000006e9u, 0x00006a07u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006a08u, 0x00006a07u, 0x00040071u, 0x00000006u, 0x00006a09u, 0x00006a08u, 0x000500c7u, 0x00000006u, 0x00006a0au, 0x00006a09u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x00006a0bu, 0x00006a0au, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x00006a0du, 0x00006a06u, 0x00006a0bu, 0x0003003eu, 0x000069f4u, 0x00006a0du, 0x0004003du, 0x0000000fu, 0x00006a0fu, 0x000069feu, 0x00040071u, 0x00000006u, 0x00006a10u, 0x00006a0fu, 0x000500c7u, 0x00000006u, 0x00006a11u, 0x00006a10u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x00006a12u, 0x00006a11u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x00006a14u, 0x00006a0du, 0x00006a12u, 0x0003003eu, 0x000069f4u, 0x00006a14u, 0x00040071u, 0x00000011u, 0x00006a16u, 0x00006a14u, 0x0003003eu, 0x00000708u, 0x00006a16u, 0x000200f9u, 0x000069f8u, 0x000200f8u, 0x000069f8u, 0x000200f9u, 0x0000665du, 0x000200f8u, 0x0000665du, 0x000200f9u, 0x00006653u, 0x000200f8u, 0x00006654u, 0x0003003eu, 0x000065b2u, 0x000065b5u, 0x00050082u, 0x00000008u, 0x000069b8u, 0x000003edu, 0x000065b5u, 0x0007000cu, 0x00000008u, 0x000069b9u, 0x00000001u, 0x0000002au, 0x000069b8u, 0x0000022au, 0x0003003eu, 0x000069b2u, 0x000069b9u, 0x0006000cu, 0x00000008u, 0x000069bbu, 0x00000001u, 0x0000004au, 0x000069b9u, 0x00050082u, 0x00000008u, 0x000069bcu, 0x000003f2u, 0x000069bbu, 0x0003003eu, 0x000069b3u, 0x000069bcu, 0x0008000cu, 0x00000008u, 0x000069beu, 0x00000001u, 0x0000002du, 0x000069bcu, 0x00000220u, 0x0000023cu, 0x0003003eu, 0x000069b3u, 0x000069beu, 0x00050082u, 0x00000008u, 0x000069c0u, 0x00000239u, 0x000069beu, 0x0007000cu, 0x00000008u, 0x000069c1u, 0x00000001u, 0x0000002au, 0x000069c0u, 0x00000220u, 0x0003003eu, 0x000069b4u, 0x000069c1u, 0x000500c3u, 0x00000008u, 0x000069c4u, 0x000065b5u, 0x000069c1u, 0x000500c7u, 0x00000008u, 0x000069c5u, 0x000069c4u, 0x000003dau, 0x0003003eu, 0x000069b5u, 0x000069c5u, 0x000500c4u, 0x00000008u, 0x000069c7u, 0x000069beu, 0x00000266u, 0x00050080u, 0x00000008u, 0x000069c9u, 0x000069c7u, 0x000069c5u, 0x00040072u, 0x00000012u, 0x000069cau, 0x000069c9u, 0x0004007cu, 0x00000011u, 0x000069cbu, 0x000069cau, 0x0003003eu, 0x000069b6u, 0x000069cbu, 0x0003003eu, 0x00000708u, 0x000069cbu, 0x0003003eu, 0x000006eau, 0x0000667du, 0x0003003eu, 0x00000856u, 0x00000559u, 0x000300f7u, 0x0000665au, 0x00000000u, 0x000400fau, 0x00000852u, 0x0000665bu, 0x0000665au, 0x000200f8u, 0x0000665bu, 0x0004003du, 0x00000011u, 0x000069cdu, 0x00000708u, 0x00040071u, 0x00000006u, 0x000069ceu, 0x000069cdu, 0x000500c4u, 0x00000006u, 0x000069cfu, 0x000069ceu, 0x00000704u, 0x0004003du, 0x0000000fu, 0x000069d0u, 0x000006eau, 0x00040071u, 0x00000006u, 0x000069d1u, 0x000069d0u, 0x000500c5u, 0x00000006u, 0x000069d2u, 0x000069cfu, 0x000069d1u, 0x0003003eu, 0x000069ccu, 0x000069d2u, 0x000300f7u, 0x000069d3u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000069d3u, 0x00000002u, 0x000069d4u, 0x00000003u, 0x000069d5u, 0x000200f8u, 0x000069d5u, 0x000500c2u, 0x00000006u, 0x000069ebu, 0x000069d2u, 0x00000731u, 0x000500c7u, 0x00000006u, 0x000069ecu, 0x000069ebu, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x000069edu, 0x000069ecu, 0x00050041u, 0x000006e9u, 0x000069eeu, 0x00000675u, 0x0000032du, 0x0003003eu, 0x000069eeu, 0x000069edu, 0x000500c2u, 0x00000006u, 0x000069f0u, 0x000069d2u, 0x00000386u, 0x000500c7u, 0x00000006u, 0x000069f1u, 0x000069f0u, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x000069f2u, 0x000069f1u, 0x00050041u, 0x000006e9u, 0x000069f3u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x000069f3u, 0x000069f2u, 0x000200f9u, 0x000069d3u, 0x000200f8u, 0x000069d4u, 0x000500c2u, 0x00000006u, 0x000069d7u, 0x000069d2u, 0x00000731u, 0x000500c7u, 0x00000006u, 0x000069d8u, 0x000069d7u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x000069d9u, 0x000069d8u, 0x00050041u, 0x000006e9u, 0x000069dau, 0x00000675u, 0x0000032du, 0x0003003eu, 0x000069dau, 0x000069d9u, 0x000500c2u, 0x00000006u, 0x000069dcu, 0x000069d2u, 0x00000737u, 0x000500c7u, 0x00000006u, 0x000069ddu, 0x000069dcu, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x000069deu, 0x000069ddu, 0x00050041u, 0x000006e9u, 0x000069dfu, 0x00000675u, 0x0000045cu, 0x0003003eu, 0x000069dfu, 0x000069deu, 0x000500c2u, 0x00000006u, 0x000069e1u, 0x000069d2u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x000069e2u, 0x000069e1u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x000069e3u, 0x000069e2u, 0x00050041u, 0x000006e9u, 0x000069e4u, 0x00000675u, 0x00000386u, 0x0003003eu, 0x000069e4u, 0x000069e3u, 0x000500c7u, 0x00000006u, 0x000069e6u, 0x000069d2u, 0x00000742u, 0x000500c4u, 0x00000006u, 0x000069e7u, 0x000069e6u, 0x00000737u, 0x00040071u, 0x0000000fu, 0x000069e8u, 0x000069e7u, 0x00050041u, 0x000006e9u, 0x000069e9u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x000069e9u, 0x000069e8u, 0x000200f9u, 0x000069d3u, 0x000200f8u, 0x000069d3u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x0000665au, 0x000200f8u, 0x0000665au, 0x000200f9u, 0x00006653u, 0x000200f8u, 0x00006653u, 0x000200f9u, 0x00006612u, 0x000200f8u, 0x00006612u, 0x000700f5u, 0x00000047u, 0x0000ee98u, 0x0000d1d1u, 0x0000660au, 0x0000d1c4u, 0x00006653u, 0x000700f5u, 0x0000000fu, 0x0000ee7du, 0x0000d05eu, 0x0000660au, 0x0000ee83u, 0x00006653u, 0x000700f5u, 0x0000000fu, 0x0000ee62u, 0x0000ceecu, 0x0000660au, 0x0000ee68u, 0x00006653u, 0x000700f5u, 0x00000047u, 0x0000ee3au, 0x0000ccc7u, 0x0000660au, 0x0000ee42u, 0x00006653u, 0x000700f5u, 0x0000000fu, 0x0000ee12u, 0x0000cb61u, 0x0000660au, 0x0000ee1au, 0x00006653u, 0x000700f5u, 0x0000000fu, 0x0000edeau, 0x0000c9fcu, 0x0000660au, 0x0000edf2u, 0x00006653u, 0x000200f9u, 0x00001fb6u, 0x000200f8u, 0x00001fb5u, 0x0004007cu, 0x00000006u, 0x00001fb9u, 0x0000c172u, 0x0003003eu, 0x00001fbau, 0x00001fb9u, 0x0003003eu, 0x00001fbbu, 0x00001f93u, 0x000300f7u, 0x00006505u, 0x00000000u, 0x000900fbu, 0x0000065cu, 0x00006505u, 0x00000000u, 0x00006506u, 0x00000001u, 0x00006507u, 0x00000002u, 0x00006508u, 0x000200f8u, 0x00006508u, 0x000500c2u, 0x00000006u, 0x00006510u, 0x00001fb9u, 0x0000025du, 0x000500c7u, 0x00000006u, 0x00006511u, 0x00006510u, 0x0000069eu, 0x0003003eu, 0x00006500u, 0x00006511u, 0x000500c2u, 0x00000006u, 0x00006513u, 0x00001fb9u, 0x00000230u, 0x000500c7u, 0x00000006u, 0x00006514u, 0x00006513u, 0x0000069eu, 0x0003003eu, 0x00006501u, 0x00006514u, 0x000500c4u, 0x00000006u, 0x00006516u, 0x00001fb9u, 0x0000022du, 0x000500c7u, 0x00000006u, 0x00006517u, 0x00006516u, 0x0000069eu, 0x0003003eu, 0x00006502u, 0x00006517u, 0x000500c7u, 0x00000006u, 0x00006519u, 0x00001fb9u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000651au, 0x00006519u, 0x00000974u, 0x0003003eu, 0x00006503u, 0x0000651au, 0x00040071u, 0x0000000fu, 0x0000651cu, 0x00006511u, 0x00040071u, 0x0000000fu, 0x0000651eu, 0x00006514u, 0x00040071u, 0x0000000fu, 0x00006520u, 0x00006517u, 0x00040071u, 0x0000000fu, 0x00006522u, 0x0000651au, 0x00070050u, 0x00000010u, 0x00006523u, 0x0000651cu, 0x0000651eu, 0x00006520u, 0x00006522u, 0x0003003eu, 0x00006504u, 0x00006523u, 0x000300f7u, 0x00006530u, 0x00000000u, 0x000400fau, 0x0000094fu, 0x00006531u, 0x00006532u, 0x000200f8u, 0x00006532u, 0x0003003eu, 0x00000675u, 0x00006523u, 0x000200f9u, 0x00006530u, 0x000200f8u, 0x00006531u, 0x0008004fu, 0x00000047u, 0x00006534u, 0x00006523u, 0x00006523u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x00006535u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x00006536u, 0x00006535u, 0x00006523u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x00006536u, 0x000200f9u, 0x00006530u, 0x000200f8u, 0x00006530u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006505u, 0x000200f8u, 0x00006507u, 0x000500c7u, 0x00000006u, 0x0000650au, 0x00001fb9u, 0x000006c3u, 0x0003003eu, 0x00001fbau, 0x0000650au, 0x00040071u, 0x0000000fu, 0x0000650cu, 0x0000650au, 0x00070050u, 0x00000010u, 0x0000650du, 0x0000650cu, 0x0000650cu, 0x0000650cu, 0x0000650cu, 0x0003003eu, 0x000064ffu, 0x0000650du, 0x000300f7u, 0x00006528u, 0x00000000u, 0x000400fau, 0x0000094fu, 0x00006529u, 0x0000652au, 0x000200f8u, 0x0000652au, 0x0003003eu, 0x00000675u, 0x0000650du, 0x000200f9u, 0x00006528u, 0x000200f8u, 0x00006529u, 0x0008004fu, 0x00000047u, 0x0000652cu, 0x0000650du, 0x0000650du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x0000652du, 0x00000675u, 0x0009004fu, 0x00000010u, 0x0000652eu, 0x0000652du, 0x0000650du, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x0000652eu, 0x000200f9u, 0x00006528u, 0x000200f8u, 0x00006528u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006505u, 0x000200f8u, 0x00006506u, 0x0003003eu, 0x00000675u, 0x00000613u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006505u, 0x000200f8u, 0x00006505u, 0x000300f7u, 0x00006525u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00006526u, 0x00006525u, 0x000200f8u, 0x00006526u, 0x000300f7u, 0x0000653cu, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x0000653cu, 0x00000002u, 0x0000653du, 0x00000003u, 0x0000653eu, 0x000200f8u, 0x0000653eu, 0x0004003du, 0x00000010u, 0x0000655bu, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x0000655cu, 0x0000655bu, 0x0000655bu, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x0000655du, 0x0000655cu, 0x0003003eu, 0x00006539u, 0x0000655du, 0x00050041u, 0x00000007u, 0x0000655eu, 0x00006539u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000655fu, 0x0000655eu, 0x000500c4u, 0x00000006u, 0x00006560u, 0x0000655fu, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006561u, 0x00006539u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006562u, 0x00006561u, 0x000500c5u, 0x00000006u, 0x00006563u, 0x00006560u, 0x00006562u, 0x0003003eu, 0x0000653au, 0x00006563u, 0x000500c7u, 0x00000006u, 0x00006565u, 0x00006563u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006566u, 0x00006565u, 0x00000464u, 0x0003003eu, 0x0000653bu, 0x00006566u, 0x000500c2u, 0x00000006u, 0x00006568u, 0x00006563u, 0x00000386u, 0x00040071u, 0x00000011u, 0x00006569u, 0x00006568u, 0x0003003eu, 0x00000708u, 0x00006569u, 0x000500c7u, 0x00000006u, 0x0000656bu, 0x00006563u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x0000656cu, 0x0000656bu, 0x00000386u, 0x000500c5u, 0x00000006u, 0x0000656eu, 0x0000656cu, 0x00006566u, 0x00040071u, 0x0000000fu, 0x0000656fu, 0x0000656eu, 0x0003003eu, 0x000006eau, 0x0000656fu, 0x000200f9u, 0x0000653cu, 0x000200f8u, 0x0000653du, 0x00050041u, 0x000006e9u, 0x0000653fu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006540u, 0x0000653fu, 0x000500c2u, 0x0000000fu, 0x00006541u, 0x00006540u, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x00006542u, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006543u, 0x00006542u, 0x000500c7u, 0x0000000fu, 0x00006544u, 0x00006543u, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x00006545u, 0x00006541u, 0x00006544u, 0x0003003eu, 0x000006eau, 0x00006545u, 0x00050041u, 0x000006e9u, 0x00006546u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006547u, 0x00006546u, 0x00040071u, 0x00000006u, 0x00006548u, 0x00006547u, 0x000500c7u, 0x00000006u, 0x00006549u, 0x00006548u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x0000654au, 0x00006549u, 0x000006f7u, 0x0003003eu, 0x00006538u, 0x0000654au, 0x00050041u, 0x000006e9u, 0x0000654bu, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000654cu, 0x0000654bu, 0x00040071u, 0x00000006u, 0x0000654du, 0x0000654cu, 0x000500c7u, 0x00000006u, 0x0000654eu, 0x0000654du, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x0000654fu, 0x0000654eu, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x00006551u, 0x0000654au, 0x0000654fu, 0x0003003eu, 0x00006538u, 0x00006551u, 0x0004003du, 0x0000000fu, 0x00006553u, 0x00006542u, 0x00040071u, 0x00000006u, 0x00006554u, 0x00006553u, 0x000500c7u, 0x00000006u, 0x00006555u, 0x00006554u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x00006556u, 0x00006555u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x00006558u, 0x00006551u, 0x00006556u, 0x0003003eu, 0x00006538u, 0x00006558u, 0x00040071u, 0x00000011u, 0x0000655au, 0x00006558u, 0x0003003eu, 0x00000708u, 0x0000655au, 0x000200f9u, 0x0000653cu, 0x000200f8u, 0x0000653cu, 0x000200f9u, 0x00006525u, 0x000200f8u, 0x00006525u, 0x000200f9u, 0x00001fb6u, 0x000200f8u, 0x00001fb6u, 0x000700f5u, 0x00000047u, 0x0000ee92u, 0x0000d1d1u, 0x00006525u, 0x0000ee98u, 0x00006612u, 0x000700f5u, 0x0000000fu, 0x0000ee77u, 0x0000d05eu, 0x00006525u, 0x0000ee7du, 0x00006612u, 0x000700f5u, 0x0000000fu, 0x0000ee5cu, 0x0000ceecu, 0x00006525u, 0x0000ee62u, 0x00006612u, 0x000700f5u, 0x00000047u, 0x0000ee34u, 0x0000ccc7u, 0x00006525u, 0x0000ee3au, 0x00006612u, 0x000700f5u, 0x0000000fu, 0x0000ee0cu, 0x0000cb61u, 0x00006525u, 0x0000ee12u, 0x00006612u, 0x000700f5u, 0x0000000fu, 0x0000ede4u, 0x0000c9fcu, 0x00006525u, 0x0000edeau, 0x00006612u, 0x000700f5u, 0x00000047u, 0x0000eda6u, 0x0000c7beu, 0x00006525u, 0x0000c7bau, 0x00006612u, 0x000200f9u, 0x00001fa8u, 0x000200f8u, 0x00001fa7u, 0x00070041u, 0x000006d9u, 0x00001fabu, 0x00000245u, 0x00000220u, 0x00001f93u, 0x00000263u, 0x0004003du, 0x00000006u, 0x00001facu, 0x00001fabu, 0x0003003eu, 0x00001faau, 0x00001facu, 0x000300f7u, 0x00006449u, 0x00000000u, 0x000b00fbu, 0x0000065cu, 0x00006449u, 0x00000004u, 0x0000644au, 0x00000002u, 0x0000644bu, 0x00000003u, 0x0000644cu, 0x00000001u, 0x0000644du, 0x000200f8u, 0x0000644du, 0x0004003du, 0x00000006u, 0x00006498u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x00006499u, 0x00006498u, 0x00000464u, 0x000500c6u, 0x00000006u, 0x0000649au, 0x00006499u, 0x00000464u, 0x00050084u, 0x00000006u, 0x0000649bu, 0x0000649au, 0x00000314u, 0x000500c2u, 0x00000006u, 0x0000649du, 0x00001facu, 0x0000649bu, 0x0003003eu, 0x00001faau, 0x0000649du, 0x000500c7u, 0x00000006u, 0x0000649fu, 0x0000649du, 0x000006c3u, 0x0003003eu, 0x00001faau, 0x0000649fu, 0x00040071u, 0x0000000fu, 0x000064a1u, 0x0000649fu, 0x00070050u, 0x00000010u, 0x000064a2u, 0x000064a1u, 0x000064a1u, 0x000064a1u, 0x000064a1u, 0x0003003eu, 0x00006448u, 0x000064a2u, 0x000300f7u, 0x000064bfu, 0x00000000u, 0x000400fau, 0x0000094fu, 0x000064c0u, 0x000064c1u, 0x000200f8u, 0x000064c1u, 0x0003003eu, 0x00000675u, 0x000064a2u, 0x000200f9u, 0x000064bfu, 0x000200f8u, 0x000064c0u, 0x0008004fu, 0x00000047u, 0x000064c3u, 0x000064a2u, 0x000064a2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064c4u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064c5u, 0x000064c4u, 0x000064a2u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064c5u, 0x000200f9u, 0x000064bfu, 0x000200f8u, 0x000064bfu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006449u, 0x000200f8u, 0x0000644cu, 0x0004003du, 0x00000006u, 0x00006480u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x00006481u, 0x00006480u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x00006482u, 0x00006481u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006483u, 0x00006482u, 0x00000330u, 0x000500c2u, 0x00000006u, 0x00006485u, 0x00001facu, 0x00006483u, 0x0003003eu, 0x00001faau, 0x00006485u, 0x000500c7u, 0x00000006u, 0x00006487u, 0x00006485u, 0x000009cfu, 0x0003003eu, 0x00001faau, 0x00006487u, 0x000500c2u, 0x00000006u, 0x00006489u, 0x00006487u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x0000648au, 0x00006489u, 0x000006c3u, 0x0003003eu, 0x00006445u, 0x0000648au, 0x000500c2u, 0x00000006u, 0x0000648cu, 0x00006487u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x0000648du, 0x0000648cu, 0x000006c3u, 0x0003003eu, 0x00006446u, 0x0000648du, 0x00040071u, 0x0000000fu, 0x0000648fu, 0x0000648au, 0x00040071u, 0x0000000fu, 0x00006495u, 0x0000648du, 0x00070050u, 0x00000010u, 0x00006496u, 0x0000648fu, 0x0000648fu, 0x0000648fu, 0x00006495u, 0x0003003eu, 0x00006447u, 0x00006496u, 0x000300f7u, 0x000064b7u, 0x00000000u, 0x000400fau, 0x0000094fu, 0x000064b8u, 0x000064b9u, 0x000200f8u, 0x000064b9u, 0x0003003eu, 0x00000675u, 0x00006496u, 0x000200f9u, 0x000064b7u, 0x000200f8u, 0x000064b8u, 0x0008004fu, 0x00000047u, 0x000064bbu, 0x00006496u, 0x00006496u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064bcu, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064bdu, 0x000064bcu, 0x00006496u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064bdu, 0x000200f9u, 0x000064b7u, 0x000200f8u, 0x000064b7u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006449u, 0x000200f8u, 0x0000644bu, 0x0004003du, 0x00000006u, 0x00006464u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x00006465u, 0x00006464u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x00006466u, 0x00006465u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006467u, 0x00006466u, 0x00000330u, 0x000500c2u, 0x00000006u, 0x00006469u, 0x00001facu, 0x00006467u, 0x0003003eu, 0x00001faau, 0x00006469u, 0x000500c2u, 0x00000006u, 0x0000646bu, 0x00006469u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x0000646cu, 0x0000646bu, 0x0000069eu, 0x0003003eu, 0x00006440u, 0x0000646cu, 0x000500c2u, 0x00000006u, 0x0000646eu, 0x00006469u, 0x00000464u, 0x000500c7u, 0x00000006u, 0x0000646fu, 0x0000646eu, 0x0000069eu, 0x0003003eu, 0x00006441u, 0x0000646fu, 0x000500c4u, 0x00000006u, 0x00006471u, 0x00006469u, 0x00000386u, 0x000500c7u, 0x00000006u, 0x00006472u, 0x00006471u, 0x0000069eu, 0x0003003eu, 0x00006442u, 0x00006472u, 0x000500c7u, 0x00000006u, 0x00006474u, 0x00006469u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006475u, 0x00006474u, 0x00000974u, 0x0003003eu, 0x00006443u, 0x00006475u, 0x00040071u, 0x0000000fu, 0x00006477u, 0x0000646cu, 0x00040071u, 0x0000000fu, 0x00006479u, 0x0000646fu, 0x00040071u, 0x0000000fu, 0x0000647bu, 0x00006472u, 0x00040071u, 0x0000000fu, 0x0000647du, 0x00006475u, 0x00070050u, 0x00000010u, 0x0000647eu, 0x00006477u, 0x00006479u, 0x0000647bu, 0x0000647du, 0x0003003eu, 0x00006444u, 0x0000647eu, 0x000300f7u, 0x000064afu, 0x00000000u, 0x000400fau, 0x0000094fu, 0x000064b0u, 0x000064b1u, 0x000200f8u, 0x000064b1u, 0x0003003eu, 0x00000675u, 0x0000647eu, 0x000200f9u, 0x000064afu, 0x000200f8u, 0x000064b0u, 0x0008004fu, 0x00000047u, 0x000064b3u, 0x0000647eu, 0x0000647eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064b4u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064b5u, 0x000064b4u, 0x0000647eu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064b5u, 0x000200f9u, 0x000064afu, 0x000200f8u, 0x000064afu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006449u, 0x000200f8u, 0x0000644au, 0x000500c2u, 0x00000006u, 0x0000644fu, 0x00001facu, 0x000006deu, 0x000500c7u, 0x00000006u, 0x00006450u, 0x0000644fu, 0x000006c3u, 0x0003003eu, 0x0000643bu, 0x00006450u, 0x000500c2u, 0x00000006u, 0x00006452u, 0x00001facu, 0x00000330u, 0x000500c7u, 0x00000006u, 0x00006453u, 0x00006452u, 0x000006c3u, 0x0003003eu, 0x0000643cu, 0x00006453u, 0x000500c2u, 0x00000006u, 0x00006455u, 0x00001facu, 0x00000314u, 0x000500c7u, 0x00000006u, 0x00006456u, 0x00006455u, 0x000006c3u, 0x0003003eu, 0x0000643du, 0x00006456u, 0x000500c2u, 0x00000006u, 0x00006458u, 0x00001facu, 0x0000032du, 0x000500c7u, 0x00000006u, 0x00006459u, 0x00006458u, 0x000006c3u, 0x0003003eu, 0x0000643eu, 0x00006459u, 0x00040071u, 0x0000000fu, 0x0000645bu, 0x00006450u, 0x00040071u, 0x0000000fu, 0x0000645du, 0x00006453u, 0x00040071u, 0x0000000fu, 0x0000645fu, 0x00006456u, 0x00040071u, 0x0000000fu, 0x00006461u, 0x00006459u, 0x00070050u, 0x00000010u, 0x00006462u, 0x0000645bu, 0x0000645du, 0x0000645fu, 0x00006461u, 0x0003003eu, 0x0000643fu, 0x00006462u, 0x000300f7u, 0x000064a7u, 0x00000000u, 0x000400fau, 0x0000094fu, 0x000064a8u, 0x000064a9u, 0x000200f8u, 0x000064a9u, 0x0003003eu, 0x00000675u, 0x00006462u, 0x000200f9u, 0x000064a7u, 0x000200f8u, 0x000064a8u, 0x0008004fu, 0x00000047u, 0x000064abu, 0x00006462u, 0x00006462u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064acu, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064adu, 0x000064acu, 0x00006462u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064adu, 0x000200f9u, 0x000064a7u, 0x000200f8u, 0x000064a7u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006449u, 0x000200f8u, 0x00006449u, 0x000300f7u, 0x000064a4u, 0x00000000u, 0x000400fau, 0x00000852u, 0x000064a5u, 0x000064a4u, 0x000200f8u, 0x000064a5u, 0x000300f7u, 0x000064cbu, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000064cbu, 0x00000002u, 0x000064ccu, 0x00000003u, 0x000064cdu, 0x000200f8u, 0x000064cdu, 0x0004003du, 0x00000010u, 0x000064eau, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x000064ebu, 0x000064eau, 0x000064eau, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x000064ecu, 0x000064ebu, 0x0003003eu, 0x000064c8u, 0x000064ecu, 0x00050041u, 0x00000007u, 0x000064edu, 0x000064c8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000064eeu, 0x000064edu, 0x000500c4u, 0x00000006u, 0x000064efu, 0x000064eeu, 0x00000314u, 0x00050041u, 0x00000007u, 0x000064f0u, 0x000064c8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000064f1u, 0x000064f0u, 0x000500c5u, 0x00000006u, 0x000064f2u, 0x000064efu, 0x000064f1u, 0x0003003eu, 0x000064c9u, 0x000064f2u, 0x000500c7u, 0x00000006u, 0x000064f4u, 0x000064f2u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000064f5u, 0x000064f4u, 0x00000464u, 0x0003003eu, 0x000064cau, 0x000064f5u, 0x000500c2u, 0x00000006u, 0x000064f7u, 0x000064f2u, 0x00000386u, 0x00040071u, 0x00000011u, 0x000064f8u, 0x000064f7u, 0x0003003eu, 0x00000708u, 0x000064f8u, 0x000500c7u, 0x00000006u, 0x000064fau, 0x000064f2u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x000064fbu, 0x000064fau, 0x00000386u, 0x000500c5u, 0x00000006u, 0x000064fdu, 0x000064fbu, 0x000064f5u, 0x00040071u, 0x0000000fu, 0x000064feu, 0x000064fdu, 0x0003003eu, 0x000006eau, 0x000064feu, 0x000200f9u, 0x000064cbu, 0x000200f8u, 0x000064ccu, 0x00050041u, 0x000006e9u, 0x000064ceu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000064cfu, 0x000064ceu, 0x000500c2u, 0x0000000fu, 0x000064d0u, 0x000064cfu, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x000064d1u, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000064d2u, 0x000064d1u, 0x000500c7u, 0x0000000fu, 0x000064d3u, 0x000064d2u, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x000064d4u, 0x000064d0u, 0x000064d3u, 0x0003003eu, 0x000006eau, 0x000064d4u, 0x00050041u, 0x000006e9u, 0x000064d5u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000064d6u, 0x000064d5u, 0x00040071u, 0x00000006u, 0x000064d7u, 0x000064d6u, 0x000500c7u, 0x00000006u, 0x000064d8u, 0x000064d7u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000064d9u, 0x000064d8u, 0x000006f7u, 0x0003003eu, 0x000064c7u, 0x000064d9u, 0x00050041u, 0x000006e9u, 0x000064dau, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000064dbu, 0x000064dau, 0x00040071u, 0x00000006u, 0x000064dcu, 0x000064dbu, 0x000500c7u, 0x00000006u, 0x000064ddu, 0x000064dcu, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000064deu, 0x000064ddu, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x000064e0u, 0x000064d9u, 0x000064deu, 0x0003003eu, 0x000064c7u, 0x000064e0u, 0x0004003du, 0x0000000fu, 0x000064e2u, 0x000064d1u, 0x00040071u, 0x00000006u, 0x000064e3u, 0x000064e2u, 0x000500c7u, 0x00000006u, 0x000064e4u, 0x000064e3u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x000064e5u, 0x000064e4u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x000064e7u, 0x000064e0u, 0x000064e5u, 0x0003003eu, 0x000064c7u, 0x000064e7u, 0x00040071u, 0x00000011u, 0x000064e9u, 0x000064e7u, 0x0003003eu, 0x00000708u, 0x000064e9u, 0x000200f9u, 0x000064cbu, 0x000200f8u, 0x000064cbu, 0x000200f9u, 0x000064a4u, 0x000200f8u, 0x000064a4u, 0x000200f9u, 0x00001fa8u, 0x000200f8u, 0x00001fa8u, 0x000700f5u, 0x00000047u, 0x0000ee8au, 0x0000d1d1u, 0x000064a4u, 0x0000ee92u, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000ee6fu, 0x0000d05eu, 0x000064a4u, 0x0000ee77u, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000ee54u, 0x0000ceecu, 0x000064a4u, 0x0000ee5cu, 0x00001fb6u, 0x000700f5u, 0x00000047u, 0x0000ee2cu, 0x0000ccc7u, 0x000064a4u, 0x0000ee34u, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000ee04u, 0x0000cb61u, 0x000064a4u, 0x0000ee0cu, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000eddcu, 0x0000c9fcu, 0x000064a4u, 0x0000ede4u, 0x00001fb6u, 0x000700f5u, 0x00000047u, 0x0000ed9eu, 0x0000c7beu, 0x000064a4u, 0x0000eda6u, 0x00001fb6u, 0x000200f9u, 0x00001f9fu, 0x000200f8u, 0x00001f9fu, 0x000700f5u, 0x00000047u, 0x0000ee89u, 0x0000d1d1u, 0x00002171u, 0x0000ee8au, 0x00001fa8u, 0x000700f5u, 0x0000000fu, 0x0000ee6eu, 0x0000d05eu, 0x00002171u, 0x0000ee6fu, 0x00001fa8u, 0x000700f5u, 0x0000000fu, 0x0000ee53u, 0x0000ceecu, 0x00002171u, 0x0000ee54u, 0x00001fa8u, 0x000700f5u, 0x00000047u, 0x0000ee2bu, 0x0000ccc7u, 0x00002171u, 0x0000ee2cu, 0x00001fa8u, 0x000700f5u, 0x0000000fu, 0x0000ee03u, 0x0000cb61u, 0x00002171u, 0x0000ee04u, 0x00001fa8u, 0x000700f5u, 0x0000000fu, 0x0000eddbu, 0x0000c9fcu, 0x00002171u, 0x0000eddcu, 0x00001fa8u, 0x000700f5u, 0x00000047u, 0x0000ed9du, 0x0000c7beu, 0x00002171u, 0x0000ed9eu, 0x00001fa8u, 0x000200f9u, 0x00001f81u, 0x000200f8u, 0x00001f81u, 0x000200f9u, 0x00001f7eu, 0x000200f8u, 0x00001f80u, 0x000200f9u, 0x00001f67u, 0x000200f8u, 0x00001f67u, 0x000200f9u, 0x00001f64u, 0x000200f8u, 0x00001f66u, 0x0003003eu, 0x00001fc8u, 0x00001f56u, 0x0003003eu, 0x00001fcbu, 0x00001f59u, 0x0003003eu, 0x00001fceu, 0x00001f5cu, 0x0003003eu, 0x00001fd1u, 0x00001f5fu, 0x0003003eu, 0x00001fd4u, 0x00001f62u, 0x0004003du, 0x000000b0u, 0x00006a36u, 0x00001fc8u, 0x000500b0u, 0x0000087bu, 0x00006a3au, 0x00006a36u, 0x00002001u, 0x0004009bu, 0x00000069u, 0x00006a3bu, 0x00006a3au, 0x000300f7u, 0x00006a3cu, 0x00000000u, 0x000400fau, 0x00006a3bu, 0x00006a3du, 0x00006a3cu, 0x000200f8u, 0x00006a3du, 0x000500c2u, 0x00000006u, 0x00006a3fu, 0x00001f59u, 0x0000078bu, 0x0003003eu, 0x00006a2cu, 0x00006a3fu, 0x0004003du, 0x000000b0u, 0x00006a40u, 0x00001fc8u, 0x00050050u, 0x000000b0u, 0x00006a41u, 0x000008efu, 0x000008efu, 0x000500c7u, 0x000000b0u, 0x00006a42u, 0x00006a40u, 0x00006a41u, 0x0003003eu, 0x00006a2du, 0x00006a42u, 0x0004003du, 0x000000b0u, 0x00006a43u, 0x00001fc8u, 0x00050050u, 0x000000efu, 0x00006a44u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x00006a45u, 0x00006a43u, 0x00006a44u, 0x0003003eu, 0x00001fc8u, 0x00006a45u, 0x00050041u, 0x00000007u, 0x00006a46u, 0x00006a2du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006a47u, 0x00006a46u, 0x00050084u, 0x00000006u, 0x00006a48u, 0x00006a47u, 0x000008f8u, 0x00050041u, 0x00000007u, 0x00006a49u, 0x00006a2du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006a4au, 0x00006a49u, 0x00050080u, 0x00000006u, 0x00006a4bu, 0x00006a48u, 0x00006a4au, 0x0003003eu, 0x00006a2eu, 0x00006a4bu, 0x00050041u, 0x00000007u, 0x00006a4eu, 0x00001fc8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006a4fu, 0x00006a4eu, 0x00050084u, 0x00000006u, 0x00006a50u, 0x00006a3fu, 0x00006a4fu, 0x00050080u, 0x00000006u, 0x00006a51u, 0x00001f5fu, 0x00006a50u, 0x00050041u, 0x00000007u, 0x00006a52u, 0x00001fc8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006a53u, 0x00006a52u, 0x00050080u, 0x00000006u, 0x00006a54u, 0x00006a51u, 0x00006a53u, 0x0003003eu, 0x00006a2fu, 0x00006a54u, 0x0003003eu, 0x00006a30u, 0x00006a54u, 0x0003003eu, 0x00006a31u, 0x00006a4bu, 0x0004003du, 0x00000069u, 0x00006a70u, 0x00000755u, 0x000300f7u, 0x00006a71u, 0x00000000u, 0x000400fau, 0x00006a70u, 0x00006a72u, 0x00006a71u, 0x000200f8u, 0x00006a72u, 0x000300f7u, 0x00006a73u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00006a73u, 0x00000000u, 0x00006a74u, 0x00000001u, 0x00006a75u, 0x00000002u, 0x00006a76u, 0x00000003u, 0x00006a77u, 0x00000004u, 0x00006a78u, 0x000200f8u, 0x00006a78u, 0x000500c7u, 0x00000006u, 0x00006b04u, 0x00006a54u, 0x000006cbu, 0x0003003eu, 0x00006a30u, 0x00006b04u, 0x00050084u, 0x00000006u, 0x00006b06u, 0x00006a4bu, 0x00000818u, 0x00050080u, 0x00000006u, 0x00006b08u, 0x00006b04u, 0x00006b06u, 0x0003003eu, 0x00006a30u, 0x00006b08u, 0x0004003du, 0x00000010u, 0x00006b09u, 0x00000675u, 0x00040071u, 0x000004f7u, 0x00006b0au, 0x00006b09u, 0x0003003eu, 0x00006a6eu, 0x00006b0au, 0x00050041u, 0x00000007u, 0x00006b0bu, 0x00006a6eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006b0cu, 0x00006b0bu, 0x000500c4u, 0x00000006u, 0x00006b0du, 0x00006b0cu, 0x000006deu, 0x00050041u, 0x00000007u, 0x00006b0eu, 0x00006a6eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006b0fu, 0x00006b0eu, 0x000500c4u, 0x00000006u, 0x00006b10u, 0x00006b0fu, 0x00000330u, 0x000500c5u, 0x00000006u, 0x00006b11u, 0x00006b0du, 0x00006b10u, 0x00050041u, 0x00000007u, 0x00006b12u, 0x00006a6eu, 0x00000386u, 0x0004003du, 0x00000006u, 0x00006b13u, 0x00006b12u, 0x000500c4u, 0x00000006u, 0x00006b14u, 0x00006b13u, 0x00000314u, 0x000500c5u, 0x00000006u, 0x00006b15u, 0x00006b11u, 0x00006b14u, 0x00050041u, 0x00000007u, 0x00006b16u, 0x00006a6eu, 0x00000464u, 0x0004003du, 0x00000006u, 0x00006b17u, 0x00006b16u, 0x000500c4u, 0x00000006u, 0x00006b18u, 0x00006b17u, 0x0000032du, 0x000500c5u, 0x00000006u, 0x00006b19u, 0x00006b15u, 0x00006b18u, 0x0003003eu, 0x00006a6fu, 0x00006b19u, 0x00060041u, 0x000006d9u, 0x00006b1cu, 0x000006d7u, 0x00000220u, 0x00006b08u, 0x0003003eu, 0x00006b1cu, 0x00006b19u, 0x00050084u, 0x00000006u, 0x00006b1eu, 0x00000386u, 0x00006b08u, 0x00050041u, 0x000006e9u, 0x00006b1fu, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006b20u, 0x00006b1fu, 0x00040071u, 0x00000006u, 0x00006b21u, 0x00006b20u, 0x0004007cu, 0x00000008u, 0x00006b22u, 0x00006b21u, 0x000500c7u, 0x00000008u, 0x00006b23u, 0x00006b22u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00006b24u, 0x00006b23u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00006b25u, 0x00006b24u, 0x0004007cu, 0x0000000fu, 0x00006b26u, 0x00006b25u, 0x00060041u, 0x00000671u, 0x00006b27u, 0x0000067cu, 0x00000220u, 0x00006b1eu, 0x0003003eu, 0x00006b27u, 0x00006b26u, 0x00050080u, 0x00000006u, 0x00006b2au, 0x00006b1eu, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00006b2bu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006b2cu, 0x00006b2bu, 0x00040071u, 0x00000006u, 0x00006b2du, 0x00006b2cu, 0x0004007cu, 0x00000008u, 0x00006b2eu, 0x00006b2du, 0x000500c7u, 0x00000008u, 0x00006b2fu, 0x00006b2eu, 0x0000022au, 0x00050084u, 0x00000008u, 0x00006b30u, 0x00006b2fu, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00006b31u, 0x00006b30u, 0x0004007cu, 0x0000000fu, 0x00006b32u, 0x00006b31u, 0x00060041u, 0x00000671u, 0x00006b33u, 0x0000067cu, 0x00000220u, 0x00006b2au, 0x0003003eu, 0x00006b33u, 0x00006b32u, 0x000300f7u, 0x00006b34u, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006b35u, 0x00006b34u, 0x000200f8u, 0x00006b35u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006b37u, 0x00006b08u, 0x0000084cu, 0x00060041u, 0x000006d9u, 0x00006b38u, 0x000006d7u, 0x00000220u, 0x00006b37u, 0x0003003eu, 0x00006b38u, 0x0000084eu, 0x000200f9u, 0x00006b34u, 0x000200f8u, 0x00006b34u, 0x000200f9u, 0x00006a73u, 0x000200f8u, 0x00006a77u, 0x000500c7u, 0x00000006u, 0x00006ae3u, 0x00006a54u, 0x00000683u, 0x0003003eu, 0x00006a30u, 0x00006ae3u, 0x00050084u, 0x00000006u, 0x00006ae5u, 0x00006a4bu, 0x000007f2u, 0x00050080u, 0x00000006u, 0x00006ae7u, 0x00006ae3u, 0x00006ae5u, 0x0003003eu, 0x00006a30u, 0x00006ae7u, 0x0004003du, 0x00000010u, 0x00006ae8u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x00006ae9u, 0x00006ae8u, 0x00006ae8u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x00006aeau, 0x00006ae9u, 0x0003003eu, 0x00006a6cu, 0x00006aeau, 0x00050041u, 0x00000007u, 0x00006aebu, 0x00006a6cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006aecu, 0x00006aebu, 0x000500c4u, 0x00000006u, 0x00006aedu, 0x00006aecu, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006aeeu, 0x00006a6cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006aefu, 0x00006aeeu, 0x000500c5u, 0x00000006u, 0x00006af0u, 0x00006aedu, 0x00006aefu, 0x0003003eu, 0x00006a6du, 0x00006af0u, 0x000500c6u, 0x00000006u, 0x00006af2u, 0x00006ae7u, 0x0000045cu, 0x00040071u, 0x00000011u, 0x00006af4u, 0x00006af0u, 0x00060041u, 0x00000692u, 0x00006af5u, 0x0000068fu, 0x00000220u, 0x00006af2u, 0x0003003eu, 0x00006af5u, 0x00006af4u, 0x0004003du, 0x00000006u, 0x00006af8u, 0x00006aeeu, 0x000500c7u, 0x00000006u, 0x00006af9u, 0x00006af8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006afau, 0x00006af9u, 0x00000464u, 0x00040071u, 0x0000000fu, 0x00006afbu, 0x00006afau, 0x00060041u, 0x00000671u, 0x00006afcu, 0x0000067cu, 0x00000220u, 0x00006ae7u, 0x0003003eu, 0x00006afcu, 0x00006afbu, 0x000300f7u, 0x00006afdu, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006afeu, 0x00006afdu, 0x000200f8u, 0x00006afeu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006b01u, 0x00006af2u, 0x00000811u, 0x00060041u, 0x00000692u, 0x00006b02u, 0x0000068fu, 0x00000220u, 0x00006b01u, 0x0003003eu, 0x00006b02u, 0x000007ecu, 0x000200f9u, 0x00006afdu, 0x000200f8u, 0x00006afdu, 0x000200f9u, 0x00006a73u, 0x000200f8u, 0x00006a76u, 0x000500c7u, 0x00000006u, 0x00006ab4u, 0x00006a54u, 0x00000683u, 0x0003003eu, 0x00006a30u, 0x00006ab4u, 0x00050084u, 0x00000006u, 0x00006ab6u, 0x00006a4bu, 0x000007bbu, 0x00050080u, 0x00000006u, 0x00006ab8u, 0x00006ab4u, 0x00006ab6u, 0x0003003eu, 0x00006a30u, 0x00006ab8u, 0x0004003du, 0x00000010u, 0x00006ab9u, 0x00000675u, 0x00040071u, 0x000004f7u, 0x00006abau, 0x00006ab9u, 0x0003003eu, 0x00006a69u, 0x00006abau, 0x0004003du, 0x000004f7u, 0x00006abbu, 0x00006a69u, 0x0008004fu, 0x0000030cu, 0x00006abcu, 0x00006abbu, 0x00006abbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000030cu, 0x00006abeu, 0x00006abcu, 0x0000f36du, 0x0004003du, 0x000004f7u, 0x00006abfu, 0x00006a69u, 0x0009004fu, 0x000004f7u, 0x00006ac0u, 0x00006abfu, 0x00006abeu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00006a69u, 0x00006ac0u, 0x00050041u, 0x00000007u, 0x00006ac1u, 0x00006a69u, 0x00000464u, 0x0004003du, 0x00000006u, 0x00006ac2u, 0x00006ac1u, 0x000500c2u, 0x00000006u, 0x00006ac3u, 0x00006ac2u, 0x00000737u, 0x0003003eu, 0x00006a6au, 0x00006ac3u, 0x00050041u, 0x00000007u, 0x00006ac4u, 0x00006a69u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006ac5u, 0x00006ac4u, 0x000500c4u, 0x00000006u, 0x00006ac6u, 0x00006ac5u, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006ac7u, 0x00006a69u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006ac8u, 0x00006ac7u, 0x000500c4u, 0x00000006u, 0x00006ac9u, 0x00006ac8u, 0x00000464u, 0x000500c5u, 0x00000006u, 0x00006acau, 0x00006ac6u, 0x00006ac9u, 0x00050041u, 0x00000007u, 0x00006acbu, 0x00006a69u, 0x00000386u, 0x0004003du, 0x00000006u, 0x00006accu, 0x00006acbu, 0x000500c2u, 0x00000006u, 0x00006acdu, 0x00006accu, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00006aceu, 0x00006acau, 0x00006acdu, 0x000500c2u, 0x00000006u, 0x00006ad0u, 0x00006ac3u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00006ad1u, 0x00006aceu, 0x00006ad0u, 0x0003003eu, 0x00006a6bu, 0x00006ad1u, 0x000500c6u, 0x00000006u, 0x00006ad3u, 0x00006ab8u, 0x0000045cu, 0x00040071u, 0x00000011u, 0x00006ad5u, 0x00006ad1u, 0x00060041u, 0x00000692u, 0x00006ad6u, 0x0000068fu, 0x00000220u, 0x00006ad3u, 0x0003003eu, 0x00006ad6u, 0x00006ad5u, 0x000500c7u, 0x00000006u, 0x00006ad9u, 0x00006ac3u, 0x00000464u, 0x00040071u, 0x0000000fu, 0x00006adau, 0x00006ad9u, 0x00060041u, 0x00000671u, 0x00006adbu, 0x0000067cu, 0x00000220u, 0x00006ab8u, 0x0003003eu, 0x00006adbu, 0x00006adau, 0x000300f7u, 0x00006adcu, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006addu, 0x00006adcu, 0x000200f8u, 0x00006addu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006ae0u, 0x00006ad3u, 0x000007eau, 0x00060041u, 0x00000692u, 0x00006ae1u, 0x0000068fu, 0x00000220u, 0x00006ae0u, 0x0003003eu, 0x00006ae1u, 0x000007ecu, 0x000200f9u, 0x00006adcu, 0x000200f8u, 0x00006adcu, 0x000200f9u, 0x00006a73u, 0x000200f8u, 0x00006a75u, 0x000500c7u, 0x00000006u, 0x00006a93u, 0x00006a54u, 0x00000663u, 0x0003003eu, 0x00006a30u, 0x00006a93u, 0x00050084u, 0x00000006u, 0x00006a95u, 0x00006a4bu, 0x00000662u, 0x00050080u, 0x00000006u, 0x00006a97u, 0x00006a93u, 0x00006a95u, 0x0003003eu, 0x00006a30u, 0x00006a97u, 0x000500c6u, 0x00000006u, 0x00006a99u, 0x00006a97u, 0x00000464u, 0x00050041u, 0x000006e9u, 0x00006a9au, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006a9bu, 0x00006a9au, 0x00060041u, 0x00000671u, 0x00006a9cu, 0x0000066eu, 0x00000220u, 0x00006a99u, 0x0003003eu, 0x00006a9cu, 0x00006a9bu, 0x000500c7u, 0x00000006u, 0x00006a9eu, 0x00006a97u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00006a9fu, 0x00006a9eu, 0x0000032du, 0x000300f7u, 0x00006aa0u, 0x00000000u, 0x000400fau, 0x00006a9fu, 0x00006aa1u, 0x00006aa0u, 0x000200f8u, 0x00006aa1u, 0x000500c2u, 0x00000006u, 0x00006aa3u, 0x00006a97u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006aa5u, 0x00006a9au, 0x00040071u, 0x00000006u, 0x00006aa6u, 0x00006aa5u, 0x0004007cu, 0x00000008u, 0x00006aa7u, 0x00006aa6u, 0x000500c7u, 0x00000008u, 0x00006aa8u, 0x00006aa7u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00006aa9u, 0x00006aa8u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00006aaau, 0x00006aa9u, 0x0004007cu, 0x0000000fu, 0x00006aabu, 0x00006aaau, 0x00060041u, 0x00000671u, 0x00006aacu, 0x0000067cu, 0x00000220u, 0x00006aa3u, 0x0003003eu, 0x00006aacu, 0x00006aabu, 0x000200f9u, 0x00006aa0u, 0x000200f8u, 0x00006aa0u, 0x000300f7u, 0x00006aadu, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006aaeu, 0x00006aadu, 0x000200f8u, 0x00006aaeu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006ab1u, 0x00006a99u, 0x00000662u, 0x00060041u, 0x00000671u, 0x00006ab2u, 0x0000066eu, 0x00000220u, 0x00006ab1u, 0x0003003eu, 0x00006ab2u, 0x0000046fu, 0x000200f9u, 0x00006aadu, 0x000200f8u, 0x00006aadu, 0x000200f9u, 0x00006a73u, 0x000200f8u, 0x00006a74u, 0x000500c7u, 0x00000006u, 0x00006a7au, 0x00006a54u, 0x00000663u, 0x0003003eu, 0x00006a30u, 0x00006a7au, 0x00050084u, 0x00000006u, 0x00006a7cu, 0x00006a4bu, 0x00000662u, 0x00050080u, 0x00000006u, 0x00006a7eu, 0x00006a7au, 0x00006a7cu, 0x0003003eu, 0x00006a30u, 0x00006a7eu, 0x000500c6u, 0x00000006u, 0x00006a80u, 0x00006a7eu, 0x00000464u, 0x00060041u, 0x00000671u, 0x00006a81u, 0x0000066eu, 0x00000220u, 0x00006a80u, 0x0003003eu, 0x00006a81u, 0x00000388u, 0x000500c7u, 0x00000006u, 0x00006a83u, 0x00006a7eu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00006a84u, 0x00006a83u, 0x0000032du, 0x000300f7u, 0x00006a85u, 0x00000000u, 0x000400fau, 0x00006a84u, 0x00006a86u, 0x00006a85u, 0x000200f8u, 0x00006a86u, 0x000500c2u, 0x00000006u, 0x00006a88u, 0x00006a7eu, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00006a89u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006a8au, 0x00006a89u, 0x00060041u, 0x00000671u, 0x00006a8bu, 0x0000067cu, 0x00000220u, 0x00006a88u, 0x0003003eu, 0x00006a8bu, 0x00006a8au, 0x000200f9u, 0x00006a85u, 0x000200f8u, 0x00006a85u, 0x000300f7u, 0x00006a8cu, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006a8du, 0x00006a8cu, 0x000200f8u, 0x00006a8du, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006a90u, 0x00006a80u, 0x00000662u, 0x00060041u, 0x00000671u, 0x00006a91u, 0x0000066eu, 0x00000220u, 0x00006a90u, 0x0003003eu, 0x00006a91u, 0x0000046fu, 0x000200f9u, 0x00006a8cu, 0x000200f8u, 0x00006a8cu, 0x000200f9u, 0x00006a73u, 0x000200f8u, 0x00006a73u, 0x000200f9u, 0x00006a71u, 0x000200f8u, 0x00006a71u, 0x0004003du, 0x00000006u, 0x00006a5bu, 0x00006a4eu, 0x00050084u, 0x00000006u, 0x00006a5cu, 0x00006a3fu, 0x00006a5bu, 0x00050080u, 0x00000006u, 0x00006a5du, 0x00001f62u, 0x00006a5cu, 0x0004003du, 0x00000006u, 0x00006a5fu, 0x00006a52u, 0x00050080u, 0x00000006u, 0x00006a60u, 0x00006a5du, 0x00006a5fu, 0x0003003eu, 0x00006a2fu, 0x00006a60u, 0x0003003eu, 0x00006a32u, 0x00006a60u, 0x0003003eu, 0x00006a33u, 0x00006a4bu, 0x000300f7u, 0x00006b39u, 0x00000000u, 0x000400fau, 0x00000853u, 0x00006b3au, 0x00006b39u, 0x000200f8u, 0x00006b3au, 0x0004003du, 0x00000069u, 0x00006b3bu, 0x00000856u, 0x000300f7u, 0x00006b3cu, 0x00000000u, 0x000400fau, 0x00006b3bu, 0x00006b3du, 0x00006b3cu, 0x000200f8u, 0x00006b3du, 0x000500c7u, 0x00000006u, 0x00006b3fu, 0x00006a60u, 0x00000683u, 0x0003003eu, 0x00006a32u, 0x00006b3fu, 0x00050084u, 0x00000006u, 0x00006b41u, 0x00006a4bu, 0x0000085du, 0x00050080u, 0x00000006u, 0x00006b43u, 0x00006b3fu, 0x00006b41u, 0x0003003eu, 0x00006a32u, 0x00006b43u, 0x000500c6u, 0x00000006u, 0x00006b45u, 0x00006b43u, 0x0000045cu, 0x0004003du, 0x00000011u, 0x00006b46u, 0x00000708u, 0x000500c4u, 0x00000011u, 0x00006b47u, 0x00006b46u, 0x000005f2u, 0x0004003du, 0x0000000fu, 0x00006b48u, 0x000006eau, 0x000500c2u, 0x0000000fu, 0x00006b49u, 0x00006b48u, 0x000005f2u, 0x00040071u, 0x00000011u, 0x00006b4au, 0x00006b49u, 0x000500c5u, 0x00000011u, 0x00006b4bu, 0x00006b47u, 0x00006b4au, 0x00060041u, 0x00000692u, 0x00006b4cu, 0x0000068fu, 0x00000220u, 0x00006b45u, 0x0003003eu, 0x00006b4cu, 0x00006b4bu, 0x0004003du, 0x0000000fu, 0x00006b4eu, 0x000006eau, 0x00040071u, 0x00000011u, 0x00006b4fu, 0x00006b4eu, 0x000500c7u, 0x00000011u, 0x00006b50u, 0x00006b4fu, 0x000005f7u, 0x00040071u, 0x0000000fu, 0x00006b51u, 0x00006b50u, 0x00060041u, 0x00000671u, 0x00006b52u, 0x0000067cu, 0x00000220u, 0x00006b43u, 0x0003003eu, 0x00006b52u, 0x00006b51u, 0x000300f7u, 0x00006b53u, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006b54u, 0x00006b53u, 0x000200f8u, 0x00006b54u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006b57u, 0x00006b45u, 0x00000874u, 0x00060041u, 0x00000692u, 0x00006b58u, 0x0000068fu, 0x00000220u, 0x00006b57u, 0x0003003eu, 0x00006b58u, 0x000007ecu, 0x000200f9u, 0x00006b53u, 0x000200f8u, 0x00006b53u, 0x000200f9u, 0x00006b3cu, 0x000200f8u, 0x00006b3cu, 0x000200f9u, 0x00006b39u, 0x000200f8u, 0x00006b39u, 0x000300f7u, 0x00006a64u, 0x00000000u, 0x000400fau, 0x0000091bu, 0x00006a65u, 0x00006a64u, 0x000200f8u, 0x00006a65u, 0x0004003du, 0x000000b0u, 0x00006a66u, 0x00001fc8u, 0x0003003eu, 0x00006a34u, 0x00006a66u, 0x0003003eu, 0x00006a35u, 0x00006a3fu, 0x00050041u, 0x00000007u, 0x00006b5cu, 0x00006a34u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006b5du, 0x00006b5cu, 0x000500c2u, 0x00000006u, 0x00006b5eu, 0x00006b5du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00006b60u, 0x00006a3fu, 0x00000464u, 0x000500c2u, 0x00000006u, 0x00006b61u, 0x00006b60u, 0x00000386u, 0x00050084u, 0x00000006u, 0x00006b62u, 0x00006b5eu, 0x00006b61u, 0x00050041u, 0x00000007u, 0x00006b63u, 0x00006a34u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006b64u, 0x00006b63u, 0x000500c2u, 0x00000006u, 0x00006b65u, 0x00006b64u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00006b66u, 0x00006b62u, 0x00006b65u, 0x0003003eu, 0x00006b59u, 0x00006b66u, 0x0004003du, 0x000000b0u, 0x00006b67u, 0x00006a34u, 0x000500c7u, 0x000000b0u, 0x00006b69u, 0x00006b67u, 0x0000f36eu, 0x0003003eu, 0x00006b5au, 0x00006b69u, 0x0004003du, 0x00000069u, 0x00006b6au, 0x00000755u, 0x000600a9u, 0x00000006u, 0x00006b6bu, 0x00006b6au, 0x0000045cu, 0x0000032du, 0x0004003du, 0x00000069u, 0x00006b6cu, 0x00000856u, 0x000600a9u, 0x00000006u, 0x00006b6du, 0x00006b6cu, 0x0000045cu, 0x0000032du, 0x00050084u, 0x00000006u, 0x00006b6eu, 0x00000386u, 0x00006b6du, 0x00050080u, 0x00000006u, 0x00006b6fu, 0x00006b6bu, 0x00006b6eu, 0x0003003eu, 0x00006b5bu, 0x00006b6fu, 0x00050041u, 0x00000007u, 0x00006b70u, 0x00006b5au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006b71u, 0x00006b70u, 0x00050041u, 0x00000007u, 0x00006b72u, 0x00006b5au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006b73u, 0x00006b72u, 0x00050084u, 0x00000006u, 0x00006b74u, 0x00006b73u, 0x00000704u, 0x00050080u, 0x00000006u, 0x00006b75u, 0x00006b71u, 0x00006b74u, 0x00050084u, 0x00000006u, 0x00006b76u, 0x00000386u, 0x00006b75u, 0x000500c4u, 0x00000006u, 0x00006b78u, 0x00006b6fu, 0x00006b76u, 0x0003003eu, 0x00006b5bu, 0x00006b78u, 0x000500abu, 0x00000069u, 0x00006b7au, 0x00006b78u, 0x0000032du, 0x000300f7u, 0x00006b7bu, 0x00000000u, 0x000400fau, 0x00006b7au, 0x00006b7cu, 0x00006b7bu, 0x000200f8u, 0x00006b7cu, 0x00050080u, 0x00000006u, 0x00006b7eu, 0x000008dbu, 0x00006b66u, 0x00060041u, 0x000006d9u, 0x00006b7fu, 0x000006d7u, 0x00000220u, 0x00006b7eu, 0x000700f1u, 0x00000006u, 0x00006b81u, 0x00006b7fu, 0x0000045cu, 0x0000032du, 0x00006b78u, 0x000200f9u, 0x00006b7bu, 0x000200f8u, 0x00006b7bu, 0x000200f9u, 0x00006a64u, 0x000200f8u, 0x00006a64u, 0x000200f9u, 0x00006a3cu, 0x000200f8u, 0x00006a3cu, 0x0003003eu, 0x00001fecu, 0x00000559u, 0x000200f9u, 0x00001feau, 0x000200f8u, 0x00001feau, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x000000dfu, 0x00007cf4u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007cf3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007cf2u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007cf1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007cf0u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007cefu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007ceeu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007cedu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000221u, 0x0000000cu, 0x00060041u, 0x00000222u, 0x00000223u, 0x0000021fu, 0x00000220u, 0x00000221u, 0x0004003du, 0x0000021bu, 0x00000224u, 0x00000223u, 0x00050051u, 0x00000009u, 0x00000227u, 0x00000224u, 0x00000000u, 0x0003003eu, 0x00007cedu, 0x00000227u, 0x00050051u, 0x00000009u, 0x00000229u, 0x00000224u, 0x00000001u, 0x0003003eu, 0x00007ceeu, 0x00000229u, 0x00050051u, 0x00000009u, 0x0000022cu, 0x00000224u, 0x00000002u, 0x0003003eu, 0x00007cefu, 0x0000022cu, 0x00050051u, 0x00000009u, 0x0000022fu, 0x00000224u, 0x00000003u, 0x0003003eu, 0x00007cf0u, 0x0000022fu, 0x00050051u, 0x00000009u, 0x00000232u, 0x00000224u, 0x00000004u, 0x0003003eu, 0x00007cf1u, 0x00000232u, 0x00050051u, 0x00000009u, 0x00000235u, 0x00000224u, 0x00000005u, 0x0003003eu, 0x00007cf2u, 0x00000235u, 0x00050051u, 0x00000009u, 0x00000238u, 0x00000224u, 0x00000006u, 0x0003003eu, 0x00007cf3u, 0x00000238u, 0x00050051u, 0x00000009u, 0x0000023bu, 0x00000224u, 0x00000007u, 0x0003003eu, 0x00007cf4u, 0x0000023bu, 0x000b0050u, 0x0000000au, 0x00007cfdu, 0x00000227u, 0x00000229u, 0x0000022cu, 0x0000022fu, 0x00000232u, 0x00000235u, 0x00000238u, 0x0000023bu, 0x000200feu, 0x00007cfdu, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003bu, 0x000000e4u, 0x00007d0cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d0bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d0au, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007d09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d08u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d07u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d06u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d05u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d04u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d03u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d02u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d01u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d00u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cffu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cfeu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000246u, 0x00000016u, 0x00060041u, 0x00000247u, 0x00000248u, 0x00000245u, 0x00000220u, 0x00000246u, 0x0004003du, 0x00000241u, 0x00000249u, 0x00000248u, 0x00050051u, 0x00000010u, 0x0000024cu, 0x00000249u, 0x00000000u, 0x0003003eu, 0x00007cfeu, 0x0000024cu, 0x00050051u, 0x00000010u, 0x0000024eu, 0x00000249u, 0x00000001u, 0x0003003eu, 0x00007cffu, 0x0000024eu, 0x00050051u, 0x00000010u, 0x00000250u, 0x00000249u, 0x00000002u, 0x0003003eu, 0x00007d00u, 0x00000250u, 0x00050051u, 0x00000010u, 0x00000252u, 0x00000249u, 0x00000003u, 0x0003003eu, 0x00007d01u, 0x00000252u, 0x00050051u, 0x00000010u, 0x00000254u, 0x00000249u, 0x00000004u, 0x0003003eu, 0x00007d02u, 0x00000254u, 0x00050051u, 0x00000010u, 0x00000256u, 0x00000249u, 0x00000005u, 0x0003003eu, 0x00007d03u, 0x00000256u, 0x00050051u, 0x00000010u, 0x00000258u, 0x00000249u, 0x00000006u, 0x0003003eu, 0x00007d04u, 0x00000258u, 0x00050051u, 0x00000010u, 0x0000025au, 0x00000249u, 0x00000007u, 0x0003003eu, 0x00007d05u, 0x0000025au, 0x00050051u, 0x00000010u, 0x0000025cu, 0x00000249u, 0x00000008u, 0x0003003eu, 0x00007d06u, 0x0000025cu, 0x00050051u, 0x00000010u, 0x0000025fu, 0x00000249u, 0x00000009u, 0x0003003eu, 0x00007d07u, 0x0000025fu, 0x00050051u, 0x00000006u, 0x00000262u, 0x00000249u, 0x0000000au, 0x0003003eu, 0x00007d08u, 0x00000262u, 0x00050051u, 0x00000011u, 0x00000265u, 0x00000249u, 0x0000000bu, 0x0003003eu, 0x00007d09u, 0x00000265u, 0x00050051u, 0x0000000fu, 0x00000268u, 0x00000249u, 0x0000000cu, 0x0003003eu, 0x00007d0au, 0x00000268u, 0x00050051u, 0x0000000fu, 0x0000026bu, 0x00000249u, 0x0000000du, 0x0003003eu, 0x00007d0bu, 0x0000026bu, 0x00050051u, 0x00000013u, 0x0000026eu, 0x00000249u, 0x0000000eu, 0x0003003eu, 0x00007d0cu, 0x0000026eu, 0x00120050u, 0x00000014u, 0x00007d1cu, 0x0000024cu, 0x0000024eu, 0x00000250u, 0x00000252u, 0x00000254u, 0x00000256u, 0x00000258u, 0x0000025au, 0x0000025cu, 0x0000025fu, 0x00000262u, 0x00000265u, 0x00000268u, 0x0000026bu, 0x0000026eu, 0x000200feu, 0x00007d1cu, 0x00010038u, 0x00050036u, 0x00000019u, 0x0000001cu, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000007u, 0x0000001bu, 0x000200f8u, 0x0000001du, 0x0004003bu, 0x00000046u, 0x00007d24u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d23u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d21u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d20u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1du, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000279u, 0x0000001bu, 0x00060041u, 0x0000027au, 0x0000027bu, 0x00000278u, 0x00000220u, 0x00000279u, 0x0004003du, 0x00000274u, 0x0000027cu, 0x0000027bu, 0x00050051u, 0x00000010u, 0x0000027fu, 0x0000027cu, 0x00000000u, 0x0003003eu, 0x00007d1du, 0x0000027fu, 0x00050051u, 0x00000010u, 0x00000281u, 0x0000027cu, 0x00000001u, 0x0003003eu, 0x00007d1eu, 0x00000281u, 0x00050051u, 0x00000010u, 0x00000283u, 0x0000027cu, 0x00000002u, 0x0003003eu, 0x00007d1fu, 0x00000283u, 0x00050051u, 0x00000010u, 0x00000285u, 0x0000027cu, 0x00000003u, 0x0003003eu, 0x00007d20u, 0x00000285u, 0x00050051u, 0x00000006u, 0x00000287u, 0x0000027cu, 0x00000004u, 0x0003003eu, 0x00007d21u, 0x00000287u, 0x00050051u, 0x00000008u, 0x00000289u, 0x0000027cu, 0x00000005u, 0x0003003eu, 0x00007d22u, 0x00000289u, 0x00050051u, 0x00000008u, 0x0000028bu, 0x0000027cu, 0x00000006u, 0x0003003eu, 0x00007d23u, 0x0000028bu, 0x00050051u, 0x00000008u, 0x0000028du, 0x0000027cu, 0x00000007u, 0x0003003eu, 0x00007d24u, 0x0000028du, 0x000b0050u, 0x00000019u, 0x00007d2du, 0x0000027fu, 0x00000281u, 0x00000283u, 0x00000285u, 0x00000287u, 0x00000289u, 0x0000028bu, 0x0000028du, 0x000200feu, 0x00007d2du, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000021u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003bu, 0x0000007bu, 0x00007d34u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d33u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d32u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d30u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d2fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d2eu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000297u, 0x00000020u, 0x00060041u, 0x00000298u, 0x00000299u, 0x00000296u, 0x00000220u, 0x00000297u, 0x0004003du, 0x00000292u, 0x0000029au, 0x00000299u, 0x00050051u, 0x00000010u, 0x0000029du, 0x0000029au, 0x00000000u, 0x0003003eu, 0x00007d2eu, 0x0000029du, 0x00050051u, 0x00000010u, 0x0000029fu, 0x0000029au, 0x00000001u, 0x0003003eu, 0x00007d2fu, 0x0000029fu, 0x00050051u, 0x00000006u, 0x000002a1u, 0x0000029au, 0x00000002u, 0x0003003eu, 0x00007d30u, 0x000002a1u, 0x00050051u, 0x0000000fu, 0x000002a3u, 0x0000029au, 0x00000003u, 0x0003003eu, 0x00007d31u, 0x000002a3u, 0x00050051u, 0x0000000fu, 0x000002a5u, 0x0000029au, 0x00000004u, 0x0003003eu, 0x00007d32u, 0x000002a5u, 0x00050051u, 0x0000000fu, 0x000002a7u, 0x0000029au, 0x00000005u, 0x0003003eu, 0x00007d33u, 0x000002a7u, 0x00050051u, 0x0000000fu, 0x000002a9u, 0x0000029au, 0x00000006u, 0x0003003eu, 0x00007d34u, 0x000002a9u, 0x000a0050u, 0x0000001eu, 0x00007d3cu, 0x0000029du, 0x0000029fu, 0x000002a1u, 0x000002a3u, 0x000002a5u, 0x000002a7u, 0x000002a9u, 0x000200feu, 0x00007d3cu, 0x00010038u, 0x00050036u, 0x00000023u, 0x00000026u, 0x00000000u, 0x00000024u, 0x00030037u, 0x00000007u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x0000007bu, 0x00007d4au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d49u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d48u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d47u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d46u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d45u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d44u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d3du, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002b3u, 0x00000025u, 0x00060041u, 0x000002b4u, 0x000002b5u, 0x000002b2u, 0x00000220u, 0x000002b3u, 0x0004003du, 0x000002aeu, 0x000002b6u, 0x000002b5u, 0x00050051u, 0x00000006u, 0x000002b8u, 0x000002b6u, 0x00000000u, 0x0003003eu, 0x00007d3du, 0x000002b8u, 0x00050051u, 0x00000006u, 0x000002bau, 0x000002b6u, 0x00000001u, 0x0003003eu, 0x00007d3eu, 0x000002bau, 0x00050051u, 0x00000006u, 0x000002bcu, 0x000002b6u, 0x00000002u, 0x0003003eu, 0x00007d3fu, 0x000002bcu, 0x00050051u, 0x00000006u, 0x000002beu, 0x000002b6u, 0x00000003u, 0x0003003eu, 0x00007d40u, 0x000002beu, 0x00050051u, 0x00000006u, 0x000002c0u, 0x000002b6u, 0x00000004u, 0x0003003eu, 0x00007d41u, 0x000002c0u, 0x00050051u, 0x00000006u, 0x000002c2u, 0x000002b6u, 0x00000005u, 0x0003003eu, 0x00007d42u, 0x000002c2u, 0x00050051u, 0x0000000fu, 0x000002c4u, 0x000002b6u, 0x00000006u, 0x0003003eu, 0x00007d43u, 0x000002c4u, 0x00050051u, 0x0000000fu, 0x000002c6u, 0x000002b6u, 0x00000007u, 0x0003003eu, 0x00007d44u, 0x000002c6u, 0x00050051u, 0x0000000fu, 0x000002c8u, 0x000002b6u, 0x00000008u, 0x0003003eu, 0x00007d45u, 0x000002c8u, 0x00050051u, 0x0000000fu, 0x000002cau, 0x000002b6u, 0x00000009u, 0x0003003eu, 0x00007d46u, 0x000002cau, 0x00050051u, 0x0000000fu, 0x000002ccu, 0x000002b6u, 0x0000000au, 0x0003003eu, 0x00007d47u, 0x000002ccu, 0x00050051u, 0x0000000fu, 0x000002ceu, 0x000002b6u, 0x0000000bu, 0x0003003eu, 0x00007d48u, 0x000002ceu, 0x00050051u, 0x0000000fu, 0x000002d0u, 0x000002b6u, 0x0000000cu, 0x0003003eu, 0x00007d49u, 0x000002d0u, 0x00050051u, 0x0000000fu, 0x000002d2u, 0x000002b6u, 0x0000000du, 0x0003003eu, 0x00007d4au, 0x000002d2u, 0x00110050u, 0x00000023u, 0x00007d59u, 0x000002b8u, 0x000002bau, 0x000002bcu, 0x000002beu, 0x000002c0u, 0x000002c2u, 0x000002c4u, 0x000002c6u, 0x000002c8u, 0x000002cau, 0x000002ccu, 0x000002ceu, 0x000002d0u, 0x000002d2u, 0x000200feu, 0x00007d59u, 0x00010038u, 0x00050036u, 0x00000029u, 0x0000002cu, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x0000002bu, 0x000200f8u, 0x0000002du, 0x0004003bu, 0x00000056u, 0x00007d62u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007d61u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d60u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d5fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d5eu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007d5du, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007d5cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d5bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d5au, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002dcu, 0x0000002bu, 0x00060041u, 0x000002ddu, 0x000002deu, 0x000002dbu, 0x00000220u, 0x000002dcu, 0x0004003du, 0x000002d7u, 0x000002dfu, 0x000002deu, 0x00050051u, 0x00000009u, 0x000002e1u, 0x000002dfu, 0x00000000u, 0x0003003eu, 0x00007d5au, 0x000002e1u, 0x00050051u, 0x00000009u, 0x000002e3u, 0x000002dfu, 0x00000001u, 0x0003003eu, 0x00007d5bu, 0x000002e3u, 0x00050051u, 0x00000028u, 0x000002e5u, 0x000002dfu, 0x00000002u, 0x0003003eu, 0x00007d5cu, 0x000002e5u, 0x00050051u, 0x00000028u, 0x000002e7u, 0x000002dfu, 0x00000003u, 0x0003003eu, 0x00007d5du, 0x000002e7u, 0x00050051u, 0x00000008u, 0x000002e9u, 0x000002dfu, 0x00000004u, 0x0003003eu, 0x00007d5eu, 0x000002e9u, 0x00050051u, 0x00000008u, 0x000002ebu, 0x000002dfu, 0x00000005u, 0x0003003eu, 0x00007d5fu, 0x000002ebu, 0x00050051u, 0x00000008u, 0x000002edu, 0x000002dfu, 0x00000006u, 0x0003003eu, 0x00007d60u, 0x000002edu, 0x00050051u, 0x00000012u, 0x000002efu, 0x000002dfu, 0x00000007u, 0x0003003eu, 0x00007d61u, 0x000002efu, 0x00050051u, 0x00000011u, 0x000002f1u, 0x000002dfu, 0x00000008u, 0x0003003eu, 0x00007d62u, 0x000002f1u, 0x000c0050u, 0x00000029u, 0x00007d6cu, 0x000002e1u, 0x000002e3u, 0x000002e5u, 0x000002e7u, 0x000002e9u, 0x000002ebu, 0x000002edu, 0x000002efu, 0x000002f1u, 0x000200feu, 0x00007d6cu, 0x00010038u, 0x00050036u, 0x0000002eu, 0x00000031u, 0x00000000u, 0x0000002fu, 0x00030037u, 0x00000007u, 0x00000030u, 0x000200f8u, 0x00000032u, 0x0004003bu, 0x00000046u, 0x00007d70u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d6fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d6eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d6du, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002fbu, 0x00000030u, 0x00060041u, 0x000002fcu, 0x000002fdu, 0x000002fau, 0x00000220u, 0x000002fbu, 0x0004003du, 0x000002f6u, 0x000002feu, 0x000002fdu, 0x00050051u, 0x00000008u, 0x00000301u, 0x000002feu, 0x00000000u, 0x0003003eu, 0x00007d6du, 0x00000301u, 0x00050051u, 0x00000008u, 0x00000303u, 0x000002feu, 0x00000001u, 0x0003003eu, 0x00007d6eu, 0x00000303u, 0x00050051u, 0x00000008u, 0x00000305u, 0x000002feu, 0x00000002u, 0x0003003eu, 0x00007d6fu, 0x00000305u, 0x00050051u, 0x00000008u, 0x00000307u, 0x000002feu, 0x00000003u, 0x0003003eu, 0x00007d70u, 0x00000307u, 0x00070050u, 0x0000002eu, 0x00007d75u, 0x00000301u, 0x00000303u, 0x00000305u, 0x00000307u, 0x000200feu, 0x00007d75u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000037u, 0x00000000u, 0x00000033u, 0x00030037u, 0x00000007u, 0x00000034u, 0x00030037u, 0x00000007u, 0x00000035u, 0x00030037u, 0x00000007u, 0x00000036u, 0x000200f8u, 0x00000038u, 0x0004003bu, 0x0000030du, 0x0000030eu, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000030fu, 0x00000034u, 0x0004003du, 0x00000006u, 0x00000310u, 0x00000035u, 0x0004003du, 0x00000006u, 0x00000311u, 0x00000036u, 0x00060050u, 0x0000030cu, 0x00000312u, 0x0000030fu, 0x00000310u, 0x00000311u, 0x0003003eu, 0x0000030eu, 0x00000312u, 0x0004003du, 0x0000030cu, 0x00000313u, 0x0000030eu, 0x000500c2u, 0x0000030cu, 0x00000316u, 0x00000313u, 0x0000f36fu, 0x0004003du, 0x0000030cu, 0x00000317u, 0x0000030eu, 0x0008004fu, 0x0000030cu, 0x00000318u, 0x00000317u, 0x00000317u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00000319u, 0x00000316u, 0x00000318u, 0x00050084u, 0x0000030cu, 0x0000031cu, 0x00000319u, 0x0000f370u, 0x0003003eu, 0x0000030eu, 0x0000031cu, 0x0004003du, 0x0000030cu, 0x0000031du, 0x0000030eu, 0x000500c2u, 0x0000030cu, 0x0000031fu, 0x0000031du, 0x0000f36fu, 0x0004003du, 0x0000030cu, 0x00000320u, 0x0000030eu, 0x0008004fu, 0x0000030cu, 0x00000321u, 0x00000320u, 0x00000320u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00000322u, 0x0000031fu, 0x00000321u, 0x00050084u, 0x0000030cu, 0x00000324u, 0x00000322u, 0x0000f370u, 0x0003003eu, 0x0000030eu, 0x00000324u, 0x0004003du, 0x0000030cu, 0x00000325u, 0x0000030eu, 0x000500c2u, 0x0000030cu, 0x00000327u, 0x00000325u, 0x0000f36fu, 0x0004003du, 0x0000030cu, 0x00000328u, 0x0000030eu, 0x0008004fu, 0x0000030cu, 0x00000329u, 0x00000328u, 0x00000328u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x0000032au, 0x00000327u, 0x00000329u, 0x00050084u, 0x0000030cu, 0x0000032cu, 0x0000032au, 0x0000f370u, 0x0003003eu, 0x0000030eu, 0x0000032cu, 0x00050041u, 0x00000007u, 0x0000032eu, 0x0000030eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000032fu, 0x0000032eu, 0x000500c2u, 0x00000006u, 0x00000331u, 0x0000032fu, 0x00000330u, 0x00040071u, 0x00000011u, 0x00000332u, 0x00000331u, 0x0003003eu, 0x00000219u, 0x00000332u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000012u, 0x0000003au, 0x00000000u, 0x00000039u, 0x000200f8u, 0x0000003bu, 0x0004003du, 0x00000011u, 0x00000333u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00000335u, 0x00000333u, 0x00000334u, 0x000500c4u, 0x00000011u, 0x00000337u, 0x00000335u, 0x00000336u, 0x000500c5u, 0x00000011u, 0x00000339u, 0x00000337u, 0x00000338u, 0x0004007cu, 0x00000012u, 0x0000033au, 0x00000339u, 0x000200feu, 0x0000033au, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003du, 0x00000000u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003du, 0x00000011u, 0x0000033du, 0x00000219u, 0x000500c7u, 0x00000011u, 0x0000033eu, 0x0000033du, 0x00000334u, 0x00040071u, 0x00000006u, 0x0000033fu, 0x0000033eu, 0x0004007cu, 0x00000008u, 0x00000340u, 0x0000033fu, 0x000200feu, 0x00000340u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003fu, 0x00000000u, 0x0000003cu, 0x000200f8u, 0x00000040u, 0x0004003du, 0x00000011u, 0x00000343u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00000345u, 0x00000343u, 0x00000344u, 0x00040071u, 0x00000006u, 0x00000346u, 0x00000345u, 0x0004007cu, 0x00000008u, 0x00000347u, 0x00000346u, 0x000200feu, 0x00000347u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000042u, 0x00000000u, 0x00000041u, 0x000200f8u, 0x00000043u, 0x0004003du, 0x00000011u, 0x0000034au, 0x00000219u, 0x000500c7u, 0x00000011u, 0x0000034cu, 0x0000034au, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x0000034du, 0x0000034cu, 0x000200feu, 0x0000034du, 0x00010038u, 0x00050036u, 0x00000047u, 0x0000004bu, 0x00000000u, 0x00000048u, 0x00030037u, 0x00000045u, 0x00000049u, 0x00030037u, 0x00000046u, 0x0000004au, 0x000200f8u, 0x0000004cu, 0x0004003bu, 0x00000045u, 0x00000350u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000357u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000366u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000036fu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000351u, 0x0000004au, 0x00060050u, 0x00000044u, 0x00000352u, 0x00000351u, 0x00000351u, 0x00000351u, 0x000500c3u, 0x00000044u, 0x00000354u, 0x00000352u, 0x00000353u, 0x000500c7u, 0x00000044u, 0x00000356u, 0x00000354u, 0x0000f387u, 0x0003003eu, 0x00000350u, 0x00000356u, 0x0004003du, 0x00000044u, 0x00000358u, 0x00000049u, 0x000500c7u, 0x00000044u, 0x0000035bu, 0x00000358u, 0x0000f388u, 0x00050080u, 0x00000044u, 0x0000035du, 0x0000035bu, 0x0000f389u, 0x0004003du, 0x00000044u, 0x00000360u, 0x00000049u, 0x000500adu, 0x00000363u, 0x00000364u, 0x00000360u, 0x00000362u, 0x000600a9u, 0x00000044u, 0x00000365u, 0x00000364u, 0x0000035fu, 0x0000035du, 0x0003003eu, 0x00000357u, 0x00000365u, 0x0004003du, 0x00000044u, 0x00000368u, 0x00000049u, 0x000500c7u, 0x00000044u, 0x0000036au, 0x00000368u, 0x0000f387u, 0x00050082u, 0x00000044u, 0x0000036bu, 0x00000356u, 0x0000036au, 0x000500c3u, 0x00000044u, 0x0000036eu, 0x0000036bu, 0x0000f38au, 0x0003003eu, 0x00000366u, 0x0000036eu, 0x0004003du, 0x00000044u, 0x00000371u, 0x00000049u, 0x00050082u, 0x00000044u, 0x00000372u, 0x00000365u, 0x00000371u, 0x0003003eu, 0x0000036fu, 0x00000372u, 0x0004003du, 0x00000044u, 0x00000373u, 0x00000049u, 0x000500c7u, 0x00000044u, 0x00000376u, 0x00000372u, 0x0000036eu, 0x00050080u, 0x00000044u, 0x00000377u, 0x00000373u, 0x00000376u, 0x0003003eu, 0x00000357u, 0x00000377u, 0x000500c7u, 0x00000044u, 0x0000037au, 0x00000377u, 0x0000035fu, 0x00040072u, 0x0000037cu, 0x0000037du, 0x0000037au, 0x0004007cu, 0x00000047u, 0x0000037eu, 0x0000037du, 0x000200feu, 0x0000037eu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000054u, 0x00000000u, 0x0000004du, 0x00030037u, 0x00000046u, 0x0000004eu, 0x00030037u, 0x00000046u, 0x0000004fu, 0x00030037u, 0x00000046u, 0x00000050u, 0x00030037u, 0x00000046u, 0x00000051u, 0x00030037u, 0x00000046u, 0x00000052u, 0x00030037u, 0x00000046u, 0x00000053u, 0x000200f8u, 0x00000055u, 0x0004003bu, 0x0000039au, 0x0000039bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003b6u, 0x00000007u, 0x0004003bu, 0x0000039au, 0x000003c1u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000381u, 0x00000050u, 0x000500b1u, 0x00000069u, 0x00000382u, 0x00000381u, 0x0000022du, 0x000300f7u, 0x00000384u, 0x00000000u, 0x000400fau, 0x00000382u, 0x00000383u, 0x000003a2u, 0x000200f8u, 0x00000383u, 0x0004003du, 0x00000008u, 0x00000393u, 0x00000050u, 0x0004003du, 0x00000008u, 0x00000394u, 0x0000004fu, 0x000500c7u, 0x00000008u, 0x00000395u, 0x00000394u, 0x00000230u, 0x00050084u, 0x00000008u, 0x00000396u, 0x00000395u, 0x00000233u, 0x0004003du, 0x00000008u, 0x00000397u, 0x0000004eu, 0x000500c7u, 0x00000008u, 0x00000398u, 0x00000397u, 0x00000230u, 0x00050080u, 0x00000008u, 0x00000399u, 0x00000396u, 0x00000398u, 0x0003003eu, 0x0000039bu, 0x00000392u, 0x00060041u, 0x0000007bu, 0x0000039cu, 0x0000039bu, 0x00000393u, 0x00000399u, 0x0004003du, 0x0000000fu, 0x0000039du, 0x0000039cu, 0x00040071u, 0x00000006u, 0x0000039eu, 0x0000039du, 0x0004007cu, 0x00000008u, 0x0000039fu, 0x0000039eu, 0x00050084u, 0x00000008u, 0x000003a1u, 0x0000039fu, 0x000003a0u, 0x0003003eu, 0x00000052u, 0x000003a1u, 0x000200f9u, 0x00000384u, 0x000200f8u, 0x000003a2u, 0x0004003du, 0x00000008u, 0x000003a3u, 0x00000050u, 0x000500aau, 0x00000069u, 0x000003a4u, 0x000003a3u, 0x0000022du, 0x000300f7u, 0x000003a6u, 0x00000000u, 0x000400fau, 0x000003a4u, 0x000003a5u, 0x000003a8u, 0x000200f8u, 0x000003a5u, 0x00040039u, 0x00000008u, 0x000003a7u, 0x0000003fu, 0x0003003eu, 0x00000052u, 0x000003a7u, 0x000200f9u, 0x000003a6u, 0x000200f8u, 0x000003a8u, 0x0003003eu, 0x00000052u, 0x00000220u, 0x000200f9u, 0x000003a6u, 0x000200f8u, 0x000003a6u, 0x000200f9u, 0x00000384u, 0x000200f8u, 0x00000384u, 0x0004003du, 0x00000008u, 0x000003a9u, 0x00000051u, 0x000500aau, 0x00000069u, 0x000003aau, 0x000003a9u, 0x00000230u, 0x000300f7u, 0x000003acu, 0x00000000u, 0x000400fau, 0x000003aau, 0x000003abu, 0x000003adu, 0x000200f8u, 0x000003abu, 0x0003003eu, 0x00000053u, 0x00000220u, 0x000200f9u, 0x000003acu, 0x000200f8u, 0x000003adu, 0x0004003du, 0x00000008u, 0x000003aeu, 0x00000051u, 0x000500aau, 0x00000069u, 0x000003afu, 0x000003aeu, 0x0000022du, 0x000300f7u, 0x000003b1u, 0x00000000u, 0x000400fau, 0x000003afu, 0x000003b0u, 0x000003b3u, 0x000200f8u, 0x000003b0u, 0x00040039u, 0x00000008u, 0x000003b2u, 0x0000003du, 0x0003003eu, 0x00000053u, 0x000003b2u, 0x000200f9u, 0x000003b1u, 0x000200f8u, 0x000003b3u, 0x0004003du, 0x00000008u, 0x000003b4u, 0x00000050u, 0x000500afu, 0x00000069u, 0x000003b5u, 0x000003b4u, 0x0000022du, 0x000300f7u, 0x000003b8u, 0x00000000u, 0x000400fau, 0x000003b5u, 0x000003b7u, 0x000003c6u, 0x000200f8u, 0x000003b7u, 0x0004003du, 0x00000008u, 0x000003b9u, 0x00000050u, 0x000500c7u, 0x00000008u, 0x000003bau, 0x000003b9u, 0x0000022au, 0x0004003du, 0x00000008u, 0x000003bbu, 0x0000004fu, 0x000500c7u, 0x00000008u, 0x000003bcu, 0x000003bbu, 0x00000230u, 0x00050084u, 0x00000008u, 0x000003bdu, 0x000003bcu, 0x00000233u, 0x0004003du, 0x00000008u, 0x000003beu, 0x0000004eu, 0x000500c7u, 0x00000008u, 0x000003bfu, 0x000003beu, 0x00000230u, 0x00050080u, 0x00000008u, 0x000003c0u, 0x000003bdu, 0x000003bfu, 0x0003003eu, 0x000003c1u, 0x00000392u, 0x00060041u, 0x0000007bu, 0x000003c2u, 0x000003c1u, 0x000003bau, 0x000003c0u, 0x0004003du, 0x0000000fu, 0x000003c3u, 0x000003c2u, 0x00040071u, 0x00000006u, 0x000003c4u, 0x000003c3u, 0x0004007cu, 0x00000008u, 0x000003c5u, 0x000003c4u, 0x0003003eu, 0x000003b6u, 0x000003c5u, 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000003c6u, 0x0004003du, 0x00000008u, 0x000003c7u, 0x00000052u, 0x000500c7u, 0x00000008u, 0x000003c8u, 0x000003c7u, 0x0000023cu, 0x0003003eu, 0x000003b6u, 0x000003c8u, 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000003b8u, 0x000700f5u, 0x00000008u, 0x0000eea4u, 0x000003c5u, 0x000003b7u, 0x000003c8u, 0x000003c6u, 0x0003003eu, 0x00000053u, 0x0000eea4u, 0x0004003du, 0x00000008u, 0x000003cau, 0x00000051u, 0x000500aau, 0x00000069u, 0x000003cbu, 0x000003cau, 0x0000022au, 0x000300f7u, 0x000003cdu, 0x00000000u, 0x000400fau, 0x000003cbu, 0x000003ccu, 0x000003cdu, 0x000200f8u, 0x000003ccu, 0x0004003du, 0x00000008u, 0x000003ceu, 0x00000053u, 0x000400c8u, 0x00000008u, 0x000003cfu, 0x000003ceu, 0x000500c7u, 0x00000008u, 0x000003d0u, 0x000003cfu, 0x0000023cu, 0x0003003eu, 0x00000053u, 0x000003d0u, 0x000200f9u, 0x000003cdu, 0x000200f8u, 0x000003cdu, 0x000200f9u, 0x000003b1u, 0x000200f8u, 0x000003b1u, 0x000200f9u, 0x000003acu, 0x000200f8u, 0x000003acu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000059u, 0x00000000u, 0x00000057u, 0x00030037u, 0x00000056u, 0x00000058u, 0x000200f8u, 0x0000005au, 0x0004003bu, 0x00000046u, 0x000003d1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003d5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003d8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003dcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003e0u, 0x00000007u, 0x0004003du, 0x00000011u, 0x000003d2u, 0x00000058u, 0x00040071u, 0x00000006u, 0x000003d3u, 0x000003d2u, 0x0004007cu, 0x00000008u, 0x000003d4u, 0x000003d3u, 0x0003003eu, 0x000003d1u, 0x000003d4u, 0x000500c3u, 0x00000008u, 0x000003d7u, 0x000003d4u, 0x00000266u, 0x0003003eu, 0x000003d5u, 0x000003d7u, 0x000500c7u, 0x00000008u, 0x000003dbu, 0x000003d4u, 0x000003dau, 0x0003003eu, 0x000003d8u, 0x000003dbu, 0x00050082u, 0x00000008u, 0x000003deu, 0x00000239u, 0x000003d7u, 0x0007000cu, 0x00000008u, 0x000003dfu, 0x00000001u, 0x0000002au, 0x000003deu, 0x00000220u, 0x0003003eu, 0x000003dcu, 0x000003dfu, 0x000500c3u, 0x00000008u, 0x000003e3u, 0x000003e1u, 0x000003d7u, 0x00050082u, 0x00000008u, 0x000003e4u, 0x000003e1u, 0x000003e3u, 0x0003003eu, 0x000003e0u, 0x000003e4u, 0x000500c4u, 0x00000008u, 0x000003e7u, 0x000003dbu, 0x000003dfu, 0x00050080u, 0x00000008u, 0x000003e9u, 0x000003e7u, 0x000003e4u, 0x000200feu, 0x000003e9u, 0x00010038u, 0x00050036u, 0x00000011u, 0x0000005du, 0x00000000u, 0x0000005bu, 0x00030037u, 0x00000046u, 0x0000005cu, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x00000046u, 0x000003ecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003f8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003fcu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000003eeu, 0x0000005cu, 0x00050082u, 0x00000008u, 0x000003efu, 0x000003edu, 0x000003eeu, 0x0007000cu, 0x00000008u, 0x000003f0u, 0x00000001u, 0x0000002au, 0x000003efu, 0x0000022au, 0x0003003eu, 0x000003ecu, 0x000003f0u, 0x0006000cu, 0x00000008u, 0x000003f4u, 0x00000001u, 0x0000004au, 0x000003f0u, 0x00050082u, 0x00000008u, 0x000003f5u, 0x000003f2u, 0x000003f4u, 0x0003003eu, 0x000003f1u, 0x000003f5u, 0x0008000cu, 0x00000008u, 0x000003f7u, 0x00000001u, 0x0000002du, 0x000003f5u, 0x00000220u, 0x0000023cu, 0x0003003eu, 0x000003f1u, 0x000003f7u, 0x00050082u, 0x00000008u, 0x000003fau, 0x00000239u, 0x000003f7u, 0x0007000cu, 0x00000008u, 0x000003fbu, 0x00000001u, 0x0000002au, 0x000003fau, 0x00000220u, 0x0003003eu, 0x000003f8u, 0x000003fbu, 0x0004003du, 0x00000008u, 0x000003fdu, 0x0000005cu, 0x000500c3u, 0x00000008u, 0x000003ffu, 0x000003fdu, 0x000003fbu, 0x000500c7u, 0x00000008u, 0x00000400u, 0x000003ffu, 0x000003dau, 0x0003003eu, 0x000003fcu, 0x00000400u, 0x000500c4u, 0x00000008u, 0x00000402u, 0x000003f7u, 0x00000266u, 0x00050080u, 0x00000008u, 0x00000404u, 0x00000402u, 0x00000400u, 0x00040072u, 0x00000012u, 0x00000405u, 0x00000404u, 0x0004007cu, 0x00000011u, 0x00000406u, 0x00000405u, 0x000200feu, 0x00000406u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000061u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x00000060u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000008u, 0x00000409u, 0x00000060u, 0x000500c4u, 0x00000008u, 0x0000040au, 0x0000022au, 0x00000409u, 0x000200feu, 0x0000040au, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000064u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x00000063u, 0x000200f8u, 0x00000065u, 0x0004003du, 0x00000008u, 0x0000040du, 0x00000063u, 0x0006000cu, 0x00000008u, 0x0000040eu, 0x00000001u, 0x0000004au, 0x0000040du, 0x0007000cu, 0x00000008u, 0x0000040fu, 0x00000001u, 0x0000002au, 0x0000040eu, 0x00000220u, 0x000200feu, 0x0000040fu, 0x00010038u, 0x00050036u, 0x00000047u, 0x00000076u, 0x00000000u, 0x0000006du, 0x00030037u, 0x00000067u, 0x0000006eu, 0x00030037u, 0x00000068u, 0x0000006fu, 0x00030037u, 0x0000006au, 0x00000070u, 0x00030037u, 0x0000006au, 0x00000071u, 0x00030037u, 0x0000006au, 0x00000072u, 0x00030037u, 0x0000006au, 0x00000073u, 0x00030037u, 0x0000006cu, 0x00000074u, 0x00030037u, 0x0000006au, 0x00000075u, 0x000200f8u, 0x00000077u, 0x0005003bu, 0x0000006au, 0x00001ff6u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000041bu, 0x00001ff3u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000041cu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00000442u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000480u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000495u, 0x00000007u, 0x0004003bu, 0x000004b7u, 0x000004b8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000004dau, 0x00000007u, 0x000300f7u, 0x00001ff2u, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00001ff5u, 0x000200f8u, 0x00001ff5u, 0x00050041u, 0x0000007bu, 0x00000412u, 0x0000006fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00000413u, 0x00000412u, 0x00040071u, 0x00000006u, 0x00000414u, 0x00000413u, 0x0004007cu, 0x00000008u, 0x00000415u, 0x00000414u, 0x000300f7u, 0x0000041au, 0x00000000u, 0x000b00fbu, 0x00000415u, 0x0000041au, 0x00000000u, 0x00000416u, 0x00000001u, 0x00000417u, 0x00000002u, 0x00000418u, 0x00000003u, 0x00000419u, 0x000200f8u, 0x00000416u, 0x00050041u, 0x00000068u, 0x0000041du, 0x0000006eu, 0x00000220u, 0x0004003du, 0x00000010u, 0x0000041eu, 0x0000041du, 0x0008004fu, 0x00000047u, 0x0000041fu, 0x0000041eu, 0x0000041eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x0000041fu, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x00000417u, 0x00050041u, 0x00000068u, 0x00000421u, 0x0000006eu, 0x0000022au, 0x0004003du, 0x00000010u, 0x00000422u, 0x00000421u, 0x0008004fu, 0x00000047u, 0x00000423u, 0x00000422u, 0x00000422u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x00000423u, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x00000418u, 0x00050041u, 0x00000068u, 0x00000425u, 0x0000006eu, 0x00000230u, 0x0004003du, 0x00000010u, 0x00000426u, 0x00000425u, 0x0008004fu, 0x00000047u, 0x00000427u, 0x00000426u, 0x00000426u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x00000427u, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x00000419u, 0x00050041u, 0x00000068u, 0x00000429u, 0x0000006eu, 0x0000022du, 0x0004003du, 0x00000010u, 0x0000042au, 0x00000429u, 0x0008004fu, 0x00000047u, 0x0000042bu, 0x0000042au, 0x0000042au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x0000042bu, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x0000041au, 0x000d00f5u, 0x00000047u, 0x0000eebfu, 0x0000eec0u, 0x00001ff5u, 0x0000041fu, 0x00000416u, 0x00000423u, 0x00000417u, 0x00000427u, 0x00000418u, 0x0000042bu, 0x00000419u, 0x0004003du, 0x00000069u, 0x0000042eu, 0x00000075u, 0x000300f7u, 0x00000430u, 0x00000000u, 0x000400fau, 0x0000042eu, 0x0000042fu, 0x00000430u, 0x000200f8u, 0x0000042fu, 0x0004003du, 0x00000069u, 0x00000431u, 0x00000072u, 0x0004003du, 0x00000069u, 0x00000432u, 0x00000073u, 0x000400a8u, 0x00000069u, 0x00000433u, 0x00000432u, 0x000500a7u, 0x00000069u, 0x00000434u, 0x00000431u, 0x00000433u, 0x000300f7u, 0x00000436u, 0x00000000u, 0x000400fau, 0x00000434u, 0x00000435u, 0x00000436u, 0x000200f8u, 0x00000435u, 0x0003003eu, 0x00001ff6u, 0x00000559u, 0x0003003eu, 0x00001ff3u, 0x0000eebfu, 0x000200f9u, 0x00001ff2u, 0x000200f8u, 0x00000436u, 0x000200f9u, 0x00000430u, 0x000200f8u, 0x00000430u, 0x00050041u, 0x0000007bu, 0x00000439u, 0x0000006fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000043au, 0x00000439u, 0x00040071u, 0x00000006u, 0x0000043bu, 0x0000043au, 0x0004007cu, 0x00000008u, 0x0000043cu, 0x0000043bu, 0x000300f7u, 0x00000441u, 0x00000000u, 0x000b00fbu, 0x0000043cu, 0x00000441u, 0x00000000u, 0x0000043du, 0x00000001u, 0x0000043eu, 0x00000002u, 0x0000043fu, 0x00000003u, 0x00000440u, 0x000200f8u, 0x0000043du, 0x00050041u, 0x00000068u, 0x00000443u, 0x0000006eu, 0x00000220u, 0x0004003du, 0x00000010u, 0x00000444u, 0x00000443u, 0x0008004fu, 0x00000047u, 0x00000445u, 0x00000444u, 0x00000444u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x00000445u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x0000043eu, 0x00050041u, 0x00000068u, 0x00000447u, 0x0000006eu, 0x0000022au, 0x0004003du, 0x00000010u, 0x00000448u, 0x00000447u, 0x0008004fu, 0x00000047u, 0x00000449u, 0x00000448u, 0x00000448u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x00000449u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x0000043fu, 0x00050041u, 0x00000068u, 0x0000044bu, 0x0000006eu, 0x00000230u, 0x0004003du, 0x00000010u, 0x0000044cu, 0x0000044bu, 0x0008004fu, 0x00000047u, 0x0000044du, 0x0000044cu, 0x0000044cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x0000044du, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x00000440u, 0x00050041u, 0x00000068u, 0x0000044fu, 0x0000006eu, 0x0000022du, 0x0004003du, 0x00000010u, 0x00000450u, 0x0000044fu, 0x0008004fu, 0x00000047u, 0x00000451u, 0x00000450u, 0x00000450u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x00000451u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x00000441u, 0x0004003du, 0x00000069u, 0x00000454u, 0x00000075u, 0x000300f7u, 0x00000456u, 0x00000000u, 0x000400fau, 0x00000454u, 0x00000455u, 0x00000456u, 0x000200f8u, 0x00000455u, 0x0004003du, 0x00000069u, 0x00000457u, 0x00000071u, 0x000400a8u, 0x00000069u, 0x00000458u, 0x00000457u, 0x000400a8u, 0x00000069u, 0x00000459u, 0x00000458u, 0x000300f7u, 0x0000045bu, 0x00000000u, 0x000400fau, 0x00000459u, 0x0000045au, 0x0000045bu, 0x000200f8u, 0x0000045au, 0x00050041u, 0x0000007bu, 0x0000045du, 0x0000006fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000045eu, 0x0000045du, 0x00040071u, 0x00000006u, 0x0000045fu, 0x0000045eu, 0x0004007cu, 0x00000008u, 0x00000460u, 0x0000045fu, 0x000500aau, 0x00000069u, 0x00000461u, 0x00000460u, 0x00000220u, 0x000300f7u, 0x00000463u, 0x00000000u, 0x000400fau, 0x00000461u, 0x00000462u, 0x00000463u, 0x000200f8u, 0x00000462u, 0x00050041u, 0x0000007bu, 0x00000465u, 0x0000006fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000466u, 0x00000465u, 0x00040071u, 0x00000006u, 0x00000467u, 0x00000466u, 0x0004007cu, 0x00000008u, 0x00000468u, 0x00000467u, 0x000500aau, 0x00000069u, 0x00000469u, 0x00000468u, 0x00000220u, 0x000200f9u, 0x00000463u, 0x000200f8u, 0x00000463u, 0x000700f5u, 0x00000069u, 0x0000046au, 0x00000461u, 0x0000045au, 0x00000469u, 0x00000462u, 0x000300f7u, 0x0000046cu, 0x00000000u, 0x000400fau, 0x0000046au, 0x0000046bu, 0x0000046cu, 0x000200f8u, 0x0000046bu, 0x00060041u, 0x0000007bu, 0x0000046du, 0x0000006eu, 0x00000220u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000046eu, 0x0000046du, 0x000500aau, 0x00000069u, 0x00000470u, 0x0000046eu, 0x0000046fu, 0x000200f9u, 0x0000046cu, 0x000200f8u, 0x0000046cu, 0x000700f5u, 0x00000069u, 0x00000471u, 0x0000046au, 0x00000463u, 0x00000470u, 0x0000046bu, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045bu, 0x000700f5u, 0x00000069u, 0x00000472u, 0x00000458u, 0x00000455u, 0x00000471u, 0x0000046cu, 0x000300f7u, 0x00000474u, 0x00000000u, 0x000400fau, 0x00000472u, 0x00000473u, 0x00000474u, 0x000200f8u, 0x00000473u, 0x0004003du, 0x00000047u, 0x00000475u, 0x00000442u, 0x0003003eu, 0x00001ff6u, 0x00000559u, 0x0003003eu, 0x00001ff3u, 0x00000475u, 0x000200f9u, 0x00001ff2u, 0x000200f8u, 0x00000474u, 0x000200f9u, 0x00000456u, 0x000200f8u, 0x00000456u, 0x00050041u, 0x0000007bu, 0x00000477u, 0x0000006fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000478u, 0x00000477u, 0x00040071u, 0x00000006u, 0x00000479u, 0x00000478u, 0x0004007cu, 0x00000008u, 0x0000047au, 0x00000479u, 0x000300f7u, 0x0000047fu, 0x00000000u, 0x000b00fbu, 0x0000047au, 0x0000047fu, 0x00000000u, 0x0000047bu, 0x00000001u, 0x0000047cu, 0x00000002u, 0x0000047du, 0x00000003u, 0x0000047eu, 0x000200f8u, 0x0000047bu, 0x00060041u, 0x0000007bu, 0x00000481u, 0x0000006eu, 0x00000220u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000482u, 0x00000481u, 0x0003003eu, 0x00000480u, 0x00000482u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047cu, 0x00060041u, 0x0000007bu, 0x00000484u, 0x0000006eu, 0x0000022du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000485u, 0x00000484u, 0x0003003eu, 0x00000480u, 0x00000485u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047du, 0x00050041u, 0x0000007bu, 0x00000487u, 0x0000006eu, 0x00000233u, 0x0004003du, 0x0000000fu, 0x00000488u, 0x00000487u, 0x0003003eu, 0x00000480u, 0x00000488u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047eu, 0x0003003eu, 0x00000480u, 0x00000388u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047fu, 0x000d00f5u, 0x0000000fu, 0x0000eea5u, 0x0000eeaau, 0x00000456u, 0x00000482u, 0x0000047bu, 0x00000485u, 0x0000047cu, 0x00000488u, 0x0000047du, 0x00000388u, 0x0000047eu, 0x00050041u, 0x0000007bu, 0x0000048cu, 0x0000006fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000048du, 0x0000048cu, 0x00040071u, 0x00000006u, 0x0000048eu, 0x0000048du, 0x0004007cu, 0x00000008u, 0x0000048fu, 0x0000048eu, 0x000300f7u, 0x00000494u, 0x00000000u, 0x000b00fbu, 0x0000048fu, 0x00000494u, 0x00000000u, 0x00000490u, 0x00000001u, 0x00000491u, 0x00000002u, 0x00000492u, 0x00000003u, 0x00000493u, 0x000200f8u, 0x00000490u, 0x000400c8u, 0x0000000fu, 0x00000497u, 0x0000eea5u, 0x000500c7u, 0x0000000fu, 0x00000498u, 0x00000497u, 0x0000046fu, 0x0003003eu, 0x00000495u, 0x00000498u, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000491u, 0x00060041u, 0x0000007bu, 0x0000049au, 0x0000006eu, 0x0000022au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000049bu, 0x0000049au, 0x0003003eu, 0x00000495u, 0x0000049bu, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000492u, 0x0003003eu, 0x00000495u, 0x0000046fu, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000493u, 0x0003003eu, 0x00000495u, 0x00000388u, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000494u, 0x000d00f5u, 0x0000000fu, 0x0000eeafu, 0x0000eeaau, 0x0000047fu, 0x00000498u, 0x00000490u, 0x0000049bu, 0x00000491u, 0x0000046fu, 0x00000492u, 0x00000388u, 0x00000493u, 0x000500c2u, 0x0000000fu, 0x000004a1u, 0x0000eea5u, 0x0000038fu, 0x0003003eu, 0x00000480u, 0x000004a1u, 0x000500c2u, 0x0000000fu, 0x000004a3u, 0x0000eeafu, 0x0000038fu, 0x0003003eu, 0x00000495u, 0x000004a3u, 0x0004003du, 0x0000000fu, 0x000004a5u, 0x0000048cu, 0x00040071u, 0x00000006u, 0x000004a6u, 0x000004a5u, 0x0004007cu, 0x00000008u, 0x000004a7u, 0x000004a6u, 0x000500aau, 0x00000069u, 0x000004a8u, 0x000004a7u, 0x0000022au, 0x000300f7u, 0x000004aau, 0x00000000u, 0x000400fau, 0x000004a8u, 0x000004a9u, 0x000004aau, 0x000200f8u, 0x000004a9u, 0x00050041u, 0x0000007bu, 0x000004acu, 0x00000074u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000004adu, 0x000004acu, 0x000500c2u, 0x0000000fu, 0x000004aeu, 0x000004a1u, 0x000004adu, 0x000500c7u, 0x0000000fu, 0x000004b0u, 0x000004aeu, 0x000004afu, 0x0003003eu, 0x00000480u, 0x000004b0u, 0x00050041u, 0x0000007bu, 0x000004b2u, 0x00000074u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000004b3u, 0x000004b2u, 0x000500c2u, 0x0000000fu, 0x000004b4u, 0x000004a3u, 0x000004b3u, 0x000500c5u, 0x0000000fu, 0x000004b5u, 0x000004b4u, 0x0000038fu, 0x0003003eu, 0x00000495u, 0x000004b5u, 0x000200f9u, 0x000004aau, 0x000200f8u, 0x000004aau, 0x000700f5u, 0x0000000fu, 0x0000eec4u, 0x000004a3u, 0x00000494u, 0x000004b5u, 0x000004a9u, 0x000700f5u, 0x0000000fu, 0x0000eeb8u, 0x000004a1u, 0x00000494u, 0x000004b0u, 0x000004a9u, 0x0004003du, 0x00000047u, 0x000004b9u, 0x00000442u, 0x00040071u, 0x000004bau, 0x000004bbu, 0x000004b9u, 0x0004007cu, 0x000004b6u, 0x000004bcu, 0x000004bbu, 0x00040071u, 0x00000011u, 0x000004beu, 0x0000eeb8u, 0x0004007cu, 0x00000012u, 0x000004bfu, 0x000004beu, 0x00060050u, 0x000004b6u, 0x000004c0u, 0x000004bfu, 0x000004bfu, 0x000004bfu, 0x00050084u, 0x000004b6u, 0x000004c1u, 0x000004bcu, 0x000004c0u, 0x00040071u, 0x000004bau, 0x000004c3u, 0x0000eebfu, 0x0004007cu, 0x000004b6u, 0x000004c4u, 0x000004c3u, 0x00040071u, 0x00000011u, 0x000004c6u, 0x0000eec4u, 0x0004007cu, 0x00000012u, 0x000004c7u, 0x000004c6u, 0x00050080u, 0x00000012u, 0x000004c9u, 0x000004c7u, 0x000004c8u, 0x00060050u, 0x000004b6u, 0x000004cau, 0x000004c9u, 0x000004c9u, 0x000004c9u, 0x00050084u, 0x000004b6u, 0x000004cbu, 0x000004c4u, 0x000004cau, 0x00050080u, 0x000004b6u, 0x000004ccu, 0x000004c1u, 0x000004cbu, 0x0003003eu, 0x000004b8u, 0x000004ccu, 0x0004003du, 0x00000069u, 0x000004cdu, 0x00000075u, 0x000400a8u, 0x00000069u, 0x000004ceu, 0x000004cdu, 0x0004003du, 0x00000069u, 0x000004cfu, 0x00000070u, 0x000500a6u, 0x00000069u, 0x000004d0u, 0x000004ceu, 0x000004cfu, 0x000300f7u, 0x000004d2u, 0x00000000u, 0x000400fau, 0x000004d0u, 0x000004d1u, 0x000004d9u, 0x000200f8u, 0x000004d1u, 0x0004003du, 0x000004b6u, 0x000004d3u, 0x000004b8u, 0x000500c3u, 0x000004b6u, 0x000004d6u, 0x000004d3u, 0x0000f38bu, 0x00040072u, 0x0000037cu, 0x000004d7u, 0x000004d6u, 0x0004007cu, 0x00000047u, 0x000004d8u, 0x000004d7u, 0x0003003eu, 0x00000442u, 0x000004d8u, 0x000200f9u, 0x000004d2u, 0x000200f8u, 0x000004d9u, 0x00040071u, 0x00000006u, 0x000004dcu, 0x0000eeb8u, 0x0004007cu, 0x00000008u, 0x000004ddu, 0x000004dcu, 0x000500c3u, 0x00000008u, 0x000004deu, 0x000004ddu, 0x0000022du, 0x00040071u, 0x00000006u, 0x000004e0u, 0x0000eec4u, 0x0004007cu, 0x00000008u, 0x000004e1u, 0x000004e0u, 0x000500c3u, 0x00000008u, 0x000004e2u, 0x000004e1u, 0x0000022du, 0x00050080u, 0x00000008u, 0x000004e3u, 0x000004deu, 0x000004e2u, 0x00050080u, 0x00000008u, 0x000004e4u, 0x000004e3u, 0x0000022au, 0x0003003eu, 0x000004dau, 0x000004e4u, 0x0004003du, 0x000004b6u, 0x000004e6u, 0x000004b8u, 0x000500c3u, 0x000004b6u, 0x000004e8u, 0x000004e6u, 0x0000f38du, 0x0003003eu, 0x000004b8u, 0x000004e8u, 0x0004003du, 0x000004b6u, 0x000004eau, 0x000004b8u, 0x000500c7u, 0x000004b6u, 0x000004ecu, 0x000004eau, 0x0000f38eu, 0x0003003eu, 0x000004b8u, 0x000004ecu, 0x0004003du, 0x000004edu, 0x000004f0u, 0x000004efu, 0x000500c4u, 0x00000008u, 0x000004f2u, 0x000004e4u, 0x00000266u, 0x00050041u, 0x000001c4u, 0x000004f3u, 0x000004b8u, 0x0000032du, 0x0004003du, 0x00000012u, 0x000004f4u, 0x000004f3u, 0x00040072u, 0x00000008u, 0x000004f5u, 0x000004f4u, 0x000500c5u, 0x00000008u, 0x000004f6u, 0x000004f2u, 0x000004f5u, 0x0005005fu, 0x000004f7u, 0x000004f8u, 0x000004f0u, 0x000004f6u, 0x00050051u, 0x00000006u, 0x000004f9u, 0x000004f8u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x000004fau, 0x000004f9u, 0x00050041u, 0x0000007bu, 0x000004fbu, 0x00000442u, 0x0000032du, 0x0003003eu, 0x000004fbu, 0x000004fau, 0x00050041u, 0x000001c4u, 0x000004ffu, 0x000004b8u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00000500u, 0x000004ffu, 0x00040072u, 0x00000008u, 0x00000501u, 0x00000500u, 0x000500c5u, 0x00000008u, 0x00000502u, 0x000004f2u, 0x00000501u, 0x0005005fu, 0x000004f7u, 0x00000503u, 0x000004f0u, 0x00000502u, 0x00050051u, 0x00000006u, 0x00000504u, 0x00000503u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00000505u, 0x00000504u, 0x00050041u, 0x0000007bu, 0x00000506u, 0x00000442u, 0x0000045cu, 0x0003003eu, 0x00000506u, 0x00000505u, 0x00050041u, 0x000001c4u, 0x0000050au, 0x000004b8u, 0x00000386u, 0x0004003du, 0x00000012u, 0x0000050bu, 0x0000050au, 0x00040072u, 0x00000008u, 0x0000050cu, 0x0000050bu, 0x000500c5u, 0x00000008u, 0x0000050du, 0x000004f2u, 0x0000050cu, 0x0005005fu, 0x000004f7u, 0x0000050eu, 0x000004f0u, 0x0000050du, 0x00050051u, 0x00000006u, 0x0000050fu, 0x0000050eu, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00000510u, 0x0000050fu, 0x00050041u, 0x0000007bu, 0x00000511u, 0x00000442u, 0x00000386u, 0x0003003eu, 0x00000511u, 0x00000510u, 0x000200f9u, 0x000004d2u, 0x000200f8u, 0x000004d2u, 0x0004003du, 0x00000047u, 0x00000512u, 0x00000442u, 0x000500c7u, 0x00000047u, 0x00000514u, 0x00000512u, 0x0000f38cu, 0x0003003eu, 0x00001ff6u, 0x00000559u, 0x0003003eu, 0x00001ff3u, 0x00000514u, 0x000200f9u, 0x00001ff2u, 0x000200f8u, 0x00001ff2u, 0x000900f5u, 0x00000047u, 0x0000eec5u, 0x0000eebfu, 0x00000435u, 0x00000475u, 0x00000473u, 0x00000514u, 0x000004d2u, 0x000200feu, 0x0000eec5u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000079u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x00000078u, 0x000200f8u, 0x0000007au, 0x0004003du, 0x00000008u, 0x00000517u, 0x00000078u, 0x000500abu, 0x00000069u, 0x00000518u, 0x00000517u, 0x00000220u, 0x000300f7u, 0x0000051au, 0x00000000u, 0x000400fau, 0x00000518u, 0x00000519u, 0x0000051au, 0x000200f8u, 0x00000519u, 0x0004003du, 0x00000008u, 0x0000051bu, 0x00000078u, 0x0006000cu, 0x00000008u, 0x0000051cu, 0x00000001u, 0x0000004au, 0x0000051bu, 0x000500c4u, 0x00000008u, 0x0000051du, 0x0000022au, 0x0000051cu, 0x0003003eu, 0x00000078u, 0x0000051du, 0x000200f9u, 0x0000051au, 0x000200f8u, 0x0000051au, 0x0004003du, 0x00000008u, 0x0000051eu, 0x00000078u, 0x000200feu, 0x0000051eu, 0x00010038u, 0x00050036u, 0x00000069u, 0x0000008bu, 0x00000000u, 0x0000007cu, 0x00030037u, 0x00000046u, 0x0000007du, 0x00030037u, 0x00000046u, 0x0000007eu, 0x00030037u, 0x00000046u, 0x0000007fu, 0x00030037u, 0x00000056u, 0x00000080u, 0x00030037u, 0x0000007bu, 0x00000081u, 0x00030037u, 0x00000046u, 0x00000082u, 0x00030037u, 0x00000046u, 0x00000083u, 0x00030037u, 0x0000006au, 0x00000084u, 0x00030037u, 0x00000046u, 0x00000085u, 0x00030037u, 0x0000006au, 0x00000086u, 0x00030037u, 0x0000006au, 0x00000087u, 0x00030037u, 0x0000006au, 0x00000088u, 0x00030037u, 0x0000006au, 0x00000089u, 0x00030037u, 0x0000006cu, 0x0000008au, 0x000200f8u, 0x0000008cu, 0x0004003bu, 0x00000046u, 0x00000524u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00000525u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000528u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000052eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000535u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000055bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000055fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000561u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000565u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000570u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000581u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000582u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000585u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000589u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000058du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000005b9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000005bbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000005deu, 0x00000007u, 0x0004003du, 0x00000069u, 0x00000521u, 0x00000084u, 0x000300f7u, 0x00000523u, 0x00000000u, 0x000400fau, 0x00000521u, 0x00000522u, 0x000005d6u, 0x000200f8u, 0x00000522u, 0x0004003du, 0x00000011u, 0x00000526u, 0x00000080u, 0x0003003eu, 0x00000525u, 0x00000526u, 0x00050039u, 0x00000008u, 0x00000527u, 0x00000059u, 0x00000525u, 0x0003003eu, 0x00000524u, 0x00000527u, 0x0004003du, 0x0000000fu, 0x00000529u, 0x00000081u, 0x00040071u, 0x00000006u, 0x0000052au, 0x00000529u, 0x0004007cu, 0x00000008u, 0x0000052bu, 0x0000052au, 0x0003003eu, 0x0000052cu, 0x0000052bu, 0x00050039u, 0x00000008u, 0x0000052du, 0x00000061u, 0x0000052cu, 0x0003003eu, 0x00000528u, 0x0000052du, 0x0004003du, 0x00000011u, 0x0000052fu, 0x00000080u, 0x00040071u, 0x00000006u, 0x00000530u, 0x0000052fu, 0x0004007cu, 0x00000008u, 0x00000531u, 0x00000530u, 0x000500c3u, 0x00000008u, 0x00000532u, 0x00000531u, 0x00000266u, 0x000500c7u, 0x00000008u, 0x00000534u, 0x00000532u, 0x00000533u, 0x0003003eu, 0x0000052eu, 0x00000534u, 0x0003003eu, 0x00000535u, 0x00000536u, 0x0004003du, 0x00000008u, 0x00000537u, 0x0000007fu, 0x0004003du, 0x0000000fu, 0x00000538u, 0x00000081u, 0x00040071u, 0x00000006u, 0x00000539u, 0x00000538u, 0x0004007cu, 0x00000008u, 0x0000053au, 0x00000539u, 0x00050082u, 0x00000008u, 0x0000053bu, 0x00000537u, 0x0000053au, 0x0008000cu, 0x00000008u, 0x0000053cu, 0x00000001u, 0x0000002du, 0x0000053bu, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x0000053du, 0x0000053cu, 0x0004007cu, 0x0000000fu, 0x0000053eu, 0x0000053du, 0x00050041u, 0x0000007bu, 0x0000053fu, 0x0000008au, 0x0000032du, 0x0003003eu, 0x0000053fu, 0x0000053eu, 0x0004003du, 0x0000000fu, 0x00000540u, 0x00000081u, 0x00040071u, 0x00000006u, 0x00000541u, 0x00000540u, 0x0004007cu, 0x00000008u, 0x00000542u, 0x00000541u, 0x0004003du, 0x00000008u, 0x00000543u, 0x0000007fu, 0x00050082u, 0x00000008u, 0x00000544u, 0x00000542u, 0x00000543u, 0x0008000cu, 0x00000008u, 0x00000545u, 0x00000001u, 0x0000002du, 0x00000544u, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x00000546u, 0x00000545u, 0x0004007cu, 0x0000000fu, 0x00000547u, 0x00000546u, 0x00050041u, 0x0000007bu, 0x00000548u, 0x0000008au, 0x0000045cu, 0x0003003eu, 0x00000548u, 0x00000547u, 0x000500b1u, 0x00000069u, 0x0000054au, 0x00000534u, 0x00000230u, 0x000300f7u, 0x0000054cu, 0x00000000u, 0x000400fau, 0x0000054au, 0x0000054bu, 0x0000054cu, 0x000200f8u, 0x0000054bu, 0x000500abu, 0x00000069u, 0x0000054fu, 0x0000052du, 0x0000054eu, 0x000300f7u, 0x00000551u, 0x00000000u, 0x000400fau, 0x0000054fu, 0x00000550u, 0x00000558u, 0x000200f8u, 0x00000550u, 0x000500c4u, 0x00000008u, 0x00000553u, 0x0000052du, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00000556u, 0x00000554u, 0x00000534u, 0x0007000cu, 0x00000008u, 0x00000557u, 0x00000001u, 0x0000002au, 0x00000553u, 0x00000556u, 0x0003003eu, 0x00000528u, 0x00000557u, 0x000200f9u, 0x00000551u, 0x000200f8u, 0x00000558u, 0x0003003eu, 0x00000535u, 0x00000559u, 0x0003003eu, 0x00000528u, 0x0000055au, 0x000200f9u, 0x00000551u, 0x000200f8u, 0x00000551u, 0x000700f5u, 0x00000008u, 0x0000eec8u, 0x00000557u, 0x00000550u, 0x0000055au, 0x00000558u, 0x000600a9u, 0x00000069u, 0x0000f3adu, 0x0000054fu, 0x00000536u, 0x00000559u, 0x000200f9u, 0x0000054cu, 0x000200f8u, 0x0000054cu, 0x000700f5u, 0x00000069u, 0x0000eec9u, 0x00000536u, 0x00000522u, 0x0000f3adu, 0x00000551u, 0x000700f5u, 0x00000008u, 0x0000eec7u, 0x0000052du, 0x00000522u, 0x0000eec8u, 0x00000551u, 0x0004003du, 0x00000008u, 0x0000055cu, 0x0000007eu, 0x000500c5u, 0x00000008u, 0x0000055eu, 0x0000055cu, 0x0000eec7u, 0x0003003eu, 0x0000055fu, 0x0000055eu, 0x00050039u, 0x00000008u, 0x00000560u, 0x00000079u, 0x0000055fu, 0x0003003eu, 0x0000055bu, 0x00000560u, 0x0003003eu, 0x00000561u, 0x00000560u, 0x000500c4u, 0x00000008u, 0x00000564u, 0x00000560u, 0x00000230u, 0x0003003eu, 0x0000055bu, 0x00000564u, 0x000400a8u, 0x00000069u, 0x00000567u, 0x0000eec9u, 0x000300f7u, 0x00000569u, 0x00000000u, 0x000400fau, 0x00000567u, 0x00000568u, 0x00000569u, 0x000200f8u, 0x00000568u, 0x0004003du, 0x00000008u, 0x0000056au, 0x0000007du, 0x00050080u, 0x00000008u, 0x0000056cu, 0x0000056au, 0x00000564u, 0x000500afu, 0x00000069u, 0x0000056eu, 0x0000056cu, 0x00000527u, 0x000200f9u, 0x00000569u, 0x000200f8u, 0x00000569u, 0x000700f5u, 0x00000069u, 0x0000056fu, 0x0000eec9u, 0x0000054cu, 0x0000056eu, 0x00000568u, 0x0003003eu, 0x00000565u, 0x0000056fu, 0x0004003du, 0x00000008u, 0x00000571u, 0x00000082u, 0x0004003du, 0x00000008u, 0x00000572u, 0x00000083u, 0x00050080u, 0x00000008u, 0x00000573u, 0x00000571u, 0x00000572u, 0x000500afu, 0x00000069u, 0x00000574u, 0x00000573u, 0x0000025du, 0x0003003eu, 0x00000570u, 0x00000574u, 0x0004003du, 0x00000069u, 0x00000575u, 0x00000086u, 0x000400a8u, 0x00000069u, 0x00000576u, 0x00000575u, 0x000300f7u, 0x00000578u, 0x00000000u, 0x000400fau, 0x00000576u, 0x00000577u, 0x00000578u, 0x000200f8u, 0x00000577u, 0x000400a8u, 0x00000069u, 0x0000057au, 0x00000574u, 0x0004003du, 0x00000069u, 0x0000057bu, 0x00000087u, 0x000500a7u, 0x00000069u, 0x0000057cu, 0x0000057au, 0x0000057bu, 0x000500a7u, 0x00000069u, 0x0000057eu, 0x0000057cu, 0x0000056fu, 0x000200f9u, 0x00000578u, 0x000200f8u, 0x00000578u, 0x000700f5u, 0x00000069u, 0x0000057fu, 0x00000575u, 0x00000569u, 0x0000057eu, 0x00000577u, 0x0003003eu, 0x00000088u, 0x0000057fu, 0x0003003eu, 0x00000089u, 0x00000574u, 0x0003003eu, 0x00000581u, 0x00000536u, 0x000500aau, 0x00000069u, 0x00000584u, 0x00000527u, 0x000003edu, 0x0003003eu, 0x00000582u, 0x00000584u, 0x0004003du, 0x00000008u, 0x00000586u, 0x0000007du, 0x000500b1u, 0x00000069u, 0x00000588u, 0x00000586u, 0x00000527u, 0x0003003eu, 0x00000585u, 0x00000588u, 0x0004003du, 0x00000008u, 0x0000058au, 0x0000007du, 0x00050082u, 0x00000008u, 0x0000058cu, 0x0000058au, 0x00000564u, 0x0003003eu, 0x00000589u, 0x0000058cu, 0x000500b3u, 0x00000069u, 0x00000591u, 0x0000058cu, 0x00000527u, 0x000500a6u, 0x00000069u, 0x00000592u, 0x0000eec9u, 0x00000591u, 0x0003003eu, 0x0000058du, 0x00000592u, 0x0004003du, 0x00000008u, 0x00000593u, 0x00000085u, 0x000300f7u, 0x00000598u, 0x00000000u, 0x000b00fbu, 0x00000593u, 0x00000598u, 0x00000000u, 0x00000594u, 0x00000001u, 0x00000595u, 0x00000002u, 0x00000596u, 0x00000003u, 0x00000597u, 0x000200f8u, 0x00000594u, 0x000400a8u, 0x00000069u, 0x0000059au, 0x00000584u, 0x000300f7u, 0x0000059cu, 0x00000000u, 0x000400fau, 0x0000059au, 0x0000059bu, 0x0000059cu, 0x000200f8u, 0x0000059bu, 0x000600a9u, 0x00000069u, 0x000005a0u, 0x00000574u, 0x00000588u, 0x00000592u, 0x000200f9u, 0x0000059cu, 0x000200f8u, 0x0000059cu, 0x000700f5u, 0x00000069u, 0x000005a1u, 0x00000584u, 0x00000594u, 0x000005a0u, 0x0000059bu, 0x0003003eu, 0x00000581u, 0x000005a1u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000595u, 0x000400a8u, 0x00000069u, 0x000005a4u, 0x00000588u, 0x000400a8u, 0x00000069u, 0x000005a6u, 0x0000056fu, 0x000500a6u, 0x00000069u, 0x000005a7u, 0x000005a4u, 0x000005a6u, 0x000400a8u, 0x00000069u, 0x000005a9u, 0x00000574u, 0x000500a6u, 0x00000069u, 0x000005aau, 0x000005a7u, 0x000005a9u, 0x000300f7u, 0x000005acu, 0x00000000u, 0x000400fau, 0x000005aau, 0x000005abu, 0x000005b6u, 0x000200f8u, 0x000005abu, 0x000400a8u, 0x00000069u, 0x000005aeu, 0x00000584u, 0x000300f7u, 0x000005b0u, 0x00000000u, 0x000400fau, 0x000005aeu, 0x000005afu, 0x000005b0u, 0x000200f8u, 0x000005afu, 0x000600a9u, 0x00000069u, 0x000005b4u, 0x00000574u, 0x00000588u, 0x00000592u, 0x000200f9u, 0x000005b0u, 0x000200f8u, 0x000005b0u, 0x000700f5u, 0x00000069u, 0x000005b5u, 0x00000584u, 0x000005abu, 0x000005b4u, 0x000005afu, 0x0003003eu, 0x00000581u, 0x000005b5u, 0x000200f9u, 0x000005acu, 0x000200f8u, 0x000005b6u, 0x000500c7u, 0x00000008u, 0x000005b8u, 0x00000560u, 0x0000055au, 0x0003003eu, 0x000005b9u, 0x000005b8u, 0x00050039u, 0x00000008u, 0x000005bau, 0x00000064u, 0x000005b9u, 0x0003003eu, 0x00000561u, 0x000005bau, 0x000500c3u, 0x00000008u, 0x000005beu, 0x00000527u, 0x000005bau, 0x0004003du, 0x00000008u, 0x000005bfu, 0x0000007du, 0x000500c3u, 0x00000008u, 0x000005c1u, 0x000005bfu, 0x000005bau, 0x00050082u, 0x00000008u, 0x000005c2u, 0x000005beu, 0x000005c1u, 0x000500c7u, 0x00000008u, 0x000005c3u, 0x000005c2u, 0x00000533u, 0x0003003eu, 0x000005bbu, 0x000005c3u, 0x0004003du, 0x00000008u, 0x000005c5u, 0x00000082u, 0x00050084u, 0x00000008u, 0x000005c6u, 0x000005c3u, 0x000005c5u, 0x000500c3u, 0x00000008u, 0x000005c7u, 0x000005c6u, 0x00000230u, 0x0007000cu, 0x00000008u, 0x000005c8u, 0x00000001u, 0x00000027u, 0x000005c7u, 0x0000025du, 0x0003003eu, 0x00000082u, 0x000005c8u, 0x0003003eu, 0x00000581u, 0x00000559u, 0x000200f9u, 0x000005acu, 0x000200f8u, 0x000005acu, 0x000700f5u, 0x00000069u, 0x0000eed9u, 0x000005b5u, 0x000005b0u, 0x00000559u, 0x000005b6u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000596u, 0x000500a6u, 0x00000069u, 0x000005ccu, 0x00000588u, 0x00000584u, 0x0003003eu, 0x00000581u, 0x000005ccu, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000597u, 0x000500a7u, 0x00000069u, 0x000005d0u, 0x0000056fu, 0x00000592u, 0x000400a8u, 0x00000069u, 0x000005d2u, 0x00000584u, 0x000500a7u, 0x00000069u, 0x000005d3u, 0x000005d0u, 0x000005d2u, 0x0003003eu, 0x00000581u, 0x000005d3u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000598u, 0x000d00f5u, 0x00000069u, 0x0000eed8u, 0x00000536u, 0x00000578u, 0x000005a1u, 0x0000059cu, 0x0000eed9u, 0x000005acu, 0x000005ccu, 0x00000596u, 0x000005d3u, 0x00000597u, 0x000200f9u, 0x00000523u, 0x000200f8u, 0x000005d6u, 0x00050041u, 0x0000007bu, 0x000005d7u, 0x0000008au, 0x0000032du, 0x0003003eu, 0x000005d7u, 0x00000388u, 0x0004003du, 0x00000008u, 0x000005d8u, 0x0000007fu, 0x00050082u, 0x00000008u, 0x000005d9u, 0x00000533u, 0x000005d8u, 0x0007000cu, 0x00000008u, 0x000005dau, 0x00000001u, 0x00000027u, 0x000005d9u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x000005dbu, 0x000005dau, 0x0004007cu, 0x0000000fu, 0x000005dcu, 0x000005dbu, 0x00050041u, 0x0000007bu, 0x000005ddu, 0x0000008au, 0x0000045cu, 0x0003003eu, 0x000005ddu, 0x000005dcu, 0x0004003du, 0x00000008u, 0x000005dfu, 0x00000082u, 0x0004003du, 0x00000008u, 0x000005e0u, 0x00000083u, 0x00050080u, 0x00000008u, 0x000005e1u, 0x000005dfu, 0x000005e0u, 0x000500afu, 0x00000069u, 0x000005e2u, 0x000005e1u, 0x0000025du, 0x0003003eu, 0x000005deu, 0x000005e2u, 0x0004003du, 0x00000069u, 0x000005e3u, 0x00000086u, 0x000400a8u, 0x00000069u, 0x000005e4u, 0x000005e3u, 0x000300f7u, 0x000005e6u, 0x00000000u, 0x000400fau, 0x000005e4u, 0x000005e5u, 0x000005e6u, 0x000200f8u, 0x000005e5u, 0x000400a8u, 0x00000069u, 0x000005e8u, 0x000005e2u, 0x0004003du, 0x00000069u, 0x000005e9u, 0x00000087u, 0x000500a7u, 0x00000069u, 0x000005eau, 0x000005e8u, 0x000005e9u, 0x000200f9u, 0x000005e6u, 0x000200f8u, 0x000005e6u, 0x000700f5u, 0x00000069u, 0x000005ebu, 0x000005e3u, 0x000005d6u, 0x000005eau, 0x000005e5u, 0x0003003eu, 0x00000088u, 0x000005ebu, 0x0003003eu, 0x00000089u, 0x000005e2u, 0x0003003eu, 0x00000581u, 0x00000559u, 0x000200f9u, 0x00000523u, 0x000200f8u, 0x00000523u, 0x000700f5u, 0x00000069u, 0x0000eed7u, 0x0000eed8u, 0x00000598u, 0x00000559u, 0x000005e6u, 0x000200feu, 0x0000eed7u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000092u, 0x00000000u, 0x0000008eu, 0x00030037u, 0x0000008du, 0x0000008fu, 0x00030037u, 0x0000008du, 0x00000090u, 0x00030037u, 0x00000046u, 0x00000091u, 0x000200f8u, 0x00000093u, 0x0004003bu, 0x0000008du, 0x000005f0u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x000005fdu, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x00000602u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x00000607u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000060cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000611u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000619u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000061fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000062cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000005f4u, 0x00000091u, 0x00040072u, 0x00000012u, 0x000005f5u, 0x000005f4u, 0x0004007cu, 0x00000011u, 0x000005f6u, 0x000005f5u, 0x000500c4u, 0x00000011u, 0x000005f8u, 0x000005f6u, 0x000005f7u, 0x00070050u, 0x00000028u, 0x000005f9u, 0x000005f8u, 0x000005f8u, 0x000005f8u, 0x000005f8u, 0x00050080u, 0x00000028u, 0x000005fau, 0x000005f3u, 0x000005f9u, 0x0003003eu, 0x000005f0u, 0x000005fau, 0x0004003du, 0x00000028u, 0x000005ffu, 0x0000008fu, 0x0009004fu, 0x00000028u, 0x00000600u, 0x000005ffu, 0x000005ffu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b0u, 0x000005fbu, 0x00000601u, 0x000005fau, 0x00000600u, 0x0003003eu, 0x000005fdu, 0x00000601u, 0x0004003du, 0x00000028u, 0x00000604u, 0x0000008fu, 0x0009004fu, 0x00000028u, 0x00000605u, 0x00000604u, 0x00000604u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b0u, 0x000005fbu, 0x00000606u, 0x000005fau, 0x00000605u, 0x0003003eu, 0x00000602u, 0x00000606u, 0x0004003du, 0x00000028u, 0x00000609u, 0x00000090u, 0x0009004fu, 0x00000028u, 0x0000060au, 0x00000609u, 0x00000609u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500aeu, 0x000005fbu, 0x0000060bu, 0x000005fau, 0x0000060au, 0x0003003eu, 0x00000607u, 0x0000060bu, 0x0004003du, 0x00000028u, 0x0000060eu, 0x00000090u, 0x0009004fu, 0x00000028u, 0x0000060fu, 0x0000060eu, 0x0000060eu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500aeu, 0x000005fbu, 0x00000610u, 0x000005fau, 0x0000060fu, 0x0003003eu, 0x0000060cu, 0x00000610u, 0x000600a9u, 0x00000010u, 0x00000615u, 0x00000601u, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x00000617u, 0x0000060bu, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x00000618u, 0x00000615u, 0x00000617u, 0x0003003eu, 0x00000611u, 0x00000618u, 0x000600a9u, 0x00000010u, 0x0000061bu, 0x00000606u, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x0000061du, 0x00000610u, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x0000061eu, 0x0000061bu, 0x0000061du, 0x0003003eu, 0x00000619u, 0x0000061eu, 0x00050084u, 0x00000010u, 0x00000623u, 0x00000618u, 0x00000622u, 0x00050084u, 0x00000010u, 0x0000062au, 0x0000061eu, 0x00000629u, 0x00050080u, 0x00000010u, 0x0000062bu, 0x00000623u, 0x0000062au, 0x0003003eu, 0x0000061fu, 0x0000062bu, 0x00050041u, 0x0000007bu, 0x0000062du, 0x0000061fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000062eu, 0x0000062du, 0x00050041u, 0x0000007bu, 0x0000062fu, 0x0000061fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000630u, 0x0000062fu, 0x000500c5u, 0x0000000fu, 0x00000631u, 0x0000062eu, 0x00000630u, 0x00050041u, 0x0000007bu, 0x00000632u, 0x0000061fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00000633u, 0x00000632u, 0x00050041u, 0x0000007bu, 0x00000634u, 0x0000061fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000635u, 0x00000634u, 0x000500c5u, 0x0000000fu, 0x00000636u, 0x00000633u, 0x00000635u, 0x000500c5u, 0x0000000fu, 0x00000637u, 0x00000631u, 0x00000636u, 0x0003003eu, 0x0000062cu, 0x00000637u, 0x000400c8u, 0x0000000fu, 0x00000639u, 0x00000637u, 0x000500c7u, 0x0000000fu, 0x0000063au, 0x00000639u, 0x0000046fu, 0x000200feu, 0x0000063au, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000099u, 0x00000000u, 0x00000094u, 0x00030037u, 0x00000046u, 0x00000095u, 0x00030037u, 0x00000046u, 0x00000096u, 0x00030037u, 0x0000006au, 0x00000097u, 0x00030037u, 0x00000046u, 0x00000098u, 0x000200f8u, 0x0000009au, 0x0004003bu, 0x00000046u, 0x0000063du, 0x00000007u, 0x0003003eu, 0x0000063du, 0x00000220u, 0x0004003du, 0x00000008u, 0x0000063eu, 0x00000098u, 0x000300f7u, 0x00000643u, 0x00000000u, 0x000b00fbu, 0x0000063eu, 0x00000643u, 0x00000000u, 0x0000063fu, 0x00000001u, 0x00000640u, 0x00000002u, 0x00000641u, 0x00000003u, 0x00000642u, 0x000200f8u, 0x0000063fu, 0x0004003du, 0x00000069u, 0x00000644u, 0x00000097u, 0x000300f7u, 0x00000646u, 0x00000000u, 0x000400fau, 0x00000644u, 0x00000645u, 0x0000064bu, 0x000200f8u, 0x00000645u, 0x0004003du, 0x00000008u, 0x00000647u, 0x00000096u, 0x0004003du, 0x00000008u, 0x00000648u, 0x00000095u, 0x00050080u, 0x00000008u, 0x00000649u, 0x00000647u, 0x00000648u, 0x0007000cu, 0x00000008u, 0x0000064au, 0x00000001u, 0x00000027u, 0x0000023cu, 0x00000649u, 0x0003003eu, 0x0000063du, 0x0000064au, 0x000200f9u, 0x00000646u, 0x000200f8u, 0x0000064bu, 0x0004003du, 0x00000008u, 0x0000064cu, 0x00000095u, 0x00050082u, 0x00000008u, 0x0000064du, 0x0000064cu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000064eu, 0x0000064du, 0x0000023cu, 0x0003003eu, 0x0000063du, 0x0000064eu, 0x000200f9u, 0x00000646u, 0x000200f8u, 0x00000646u, 0x000700f5u, 0x00000008u, 0x0000eedbu, 0x0000064au, 0x00000645u, 0x0000064eu, 0x0000064bu, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000640u, 0x0004003du, 0x00000008u, 0x00000650u, 0x00000095u, 0x0004003du, 0x00000008u, 0x00000651u, 0x00000096u, 0x00050080u, 0x00000008u, 0x00000652u, 0x00000650u, 0x00000651u, 0x000500c7u, 0x00000008u, 0x00000653u, 0x00000652u, 0x0000023cu, 0x0003003eu, 0x0000063du, 0x00000653u, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000641u, 0x0003003eu, 0x0000063du, 0x0000023cu, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000642u, 0x0004003du, 0x00000008u, 0x00000656u, 0x00000096u, 0x0003003eu, 0x0000063du, 0x00000656u, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000643u, 0x000d00f5u, 0x00000008u, 0x0000eedau, 0x00000220u, 0x0000009au, 0x0000eedbu, 0x00000646u, 0x00000653u, 0x00000640u, 0x0000023cu, 0x00000641u, 0x00000656u, 0x00000642u, 0x000200feu, 0x0000eedau, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000009eu, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x0000009cu, 0x00030037u, 0x00000007u, 0x0000009du, 0x000200f8u, 0x0000009fu, 0x0004003bu, 0x0000007bu, 0x0000066au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000068bu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00000696u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d3u, 0x00000007u, 0x000300f7u, 0x00000661u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00000661u, 0x00000000u, 0x0000065du, 0x00000001u, 0x0000065du, 0x00000002u, 0x0000065eu, 0x00000003u, 0x0000065fu, 0x00000004u, 0x00000660u, 0x000200f8u, 0x0000065du, 0x0004003du, 0x00000006u, 0x00000664u, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x00000665u, 0x00000664u, 0x00000663u, 0x0003003eu, 0x0000009cu, 0x00000665u, 0x0004003du, 0x00000006u, 0x00000666u, 0x0000009du, 0x00050084u, 0x00000006u, 0x00000667u, 0x00000666u, 0x00000662u, 0x0004003du, 0x00000006u, 0x00000668u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x00000669u, 0x00000668u, 0x00000667u, 0x0003003eu, 0x0000009cu, 0x00000669u, 0x0004003du, 0x00000006u, 0x0000066fu, 0x0000009cu, 0x000500c6u, 0x00000006u, 0x00000670u, 0x0000066fu, 0x00000464u, 0x00060041u, 0x00000671u, 0x00000672u, 0x0000066eu, 0x00000220u, 0x00000670u, 0x0004003du, 0x0000000fu, 0x00000673u, 0x00000672u, 0x0003003eu, 0x0000066au, 0x00000673u, 0x0004003du, 0x00000006u, 0x0000067du, 0x0000009cu, 0x000500c2u, 0x00000006u, 0x0000067eu, 0x0000067du, 0x0000022au, 0x00060041u, 0x00000671u, 0x0000067fu, 0x0000067cu, 0x00000220u, 0x0000067eu, 0x0004003du, 0x0000000fu, 0x00000680u, 0x0000067fu, 0x00070050u, 0x00000010u, 0x00000681u, 0x00000673u, 0x00000673u, 0x00000673u, 0x00000680u, 0x0003003eu, 0x00000675u, 0x00000681u, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x0000065eu, 0x0004003du, 0x00000006u, 0x00000684u, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x00000685u, 0x00000684u, 0x00000683u, 0x0003003eu, 0x0000009cu, 0x00000685u, 0x0004003du, 0x00000006u, 0x00000686u, 0x0000009du, 0x00050084u, 0x00000006u, 0x00000688u, 0x00000686u, 0x00000687u, 0x0004003du, 0x00000006u, 0x00000689u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x0000068au, 0x00000689u, 0x00000688u, 0x0003003eu, 0x0000009cu, 0x0000068au, 0x0004003du, 0x00000006u, 0x00000690u, 0x0000009cu, 0x000500c6u, 0x00000006u, 0x00000691u, 0x00000690u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00000693u, 0x0000068fu, 0x00000220u, 0x00000691u, 0x0004003du, 0x00000011u, 0x00000694u, 0x00000693u, 0x00040071u, 0x00000006u, 0x00000695u, 0x00000694u, 0x0003003eu, 0x0000068bu, 0x00000695u, 0x000500c2u, 0x00000006u, 0x00000698u, 0x00000695u, 0x00000314u, 0x000500c2u, 0x00000006u, 0x0000069au, 0x00000695u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x0000069cu, 0x00000695u, 0x00000386u, 0x00060050u, 0x0000030cu, 0x0000069du, 0x00000698u, 0x0000069au, 0x0000069cu, 0x000500c7u, 0x0000030cu, 0x000006a0u, 0x0000069du, 0x0000f36du, 0x0003003eu, 0x00000696u, 0x000006a0u, 0x00040071u, 0x00000047u, 0x000006a2u, 0x000006a0u, 0x0004003du, 0x00000006u, 0x000006a3u, 0x0000009cu, 0x00060041u, 0x00000671u, 0x000006a4u, 0x0000067cu, 0x00000220u, 0x000006a3u, 0x0004003du, 0x0000000fu, 0x000006a5u, 0x000006a4u, 0x000500c4u, 0x0000000fu, 0x000006a6u, 0x000006a5u, 0x0000038eu, 0x000500c7u, 0x00000006u, 0x000006a8u, 0x00000695u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000006a9u, 0x000006a8u, 0x0000023cu, 0x00040071u, 0x0000000fu, 0x000006aau, 0x000006a9u, 0x000500c5u, 0x0000000fu, 0x000006abu, 0x000006a6u, 0x000006aau, 0x00050051u, 0x0000000fu, 0x000006acu, 0x000006a2u, 0x00000000u, 0x00050051u, 0x0000000fu, 0x000006adu, 0x000006a2u, 0x00000001u, 0x00050051u, 0x0000000fu, 0x000006aeu, 0x000006a2u, 0x00000002u, 0x00070050u, 0x00000010u, 0x000006afu, 0x000006acu, 0x000006adu, 0x000006aeu, 0x000006abu, 0x0003003eu, 0x00000675u, 0x000006afu, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x0000065fu, 0x0004003du, 0x00000006u, 0x000006b1u, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x000006b2u, 0x000006b1u, 0x00000683u, 0x0003003eu, 0x0000009cu, 0x000006b2u, 0x0004003du, 0x00000006u, 0x000006b3u, 0x0000009du, 0x00050084u, 0x00000006u, 0x000006b5u, 0x000006b3u, 0x000006b4u, 0x0004003du, 0x00000006u, 0x000006b6u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x000006b7u, 0x000006b6u, 0x000006b5u, 0x0003003eu, 0x0000009cu, 0x000006b7u, 0x0004003du, 0x00000006u, 0x000006b9u, 0x0000009cu, 0x000500c6u, 0x00000006u, 0x000006bau, 0x000006b9u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x000006bbu, 0x0000068fu, 0x00000220u, 0x000006bau, 0x0004003du, 0x00000011u, 0x000006bcu, 0x000006bbu, 0x00040071u, 0x00000006u, 0x000006bdu, 0x000006bcu, 0x0003003eu, 0x000006b8u, 0x000006bdu, 0x000500c2u, 0x00000006u, 0x000006bfu, 0x000006bdu, 0x00000314u, 0x00040071u, 0x0000000fu, 0x000006c0u, 0x000006bfu, 0x00060050u, 0x00000047u, 0x000006c1u, 0x000006c0u, 0x000006c0u, 0x000006c0u, 0x000500c7u, 0x00000006u, 0x000006c4u, 0x000006bdu, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x000006c5u, 0x000006c4u, 0x00070050u, 0x00000010u, 0x000006c9u, 0x000006c0u, 0x000006c0u, 0x000006c0u, 0x000006c5u, 0x0003003eu, 0x00000675u, 0x000006c9u, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x00000660u, 0x0004003du, 0x00000006u, 0x000006ccu, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x000006cdu, 0x000006ccu, 0x000006cbu, 0x0003003eu, 0x0000009cu, 0x000006cdu, 0x0004003du, 0x00000006u, 0x000006ceu, 0x0000009du, 0x00050084u, 0x00000006u, 0x000006d0u, 0x000006ceu, 0x000006cfu, 0x0004003du, 0x00000006u, 0x000006d1u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x000006d2u, 0x000006d1u, 0x000006d0u, 0x0003003eu, 0x0000009cu, 0x000006d2u, 0x0004003du, 0x00000006u, 0x000006d8u, 0x0000009cu, 0x00060041u, 0x000006d9u, 0x000006dau, 0x000006d7u, 0x00000220u, 0x000006d8u, 0x0004003du, 0x00000006u, 0x000006dbu, 0x000006dau, 0x0003003eu, 0x000006d3u, 0x000006dbu, 0x00070050u, 0x000004f7u, 0x000006ddu, 0x000006dbu, 0x000006dbu, 0x000006dbu, 0x000006dbu, 0x000500c2u, 0x000004f7u, 0x000006e0u, 0x000006ddu, 0x000006dfu, 0x000500c7u, 0x000004f7u, 0x000006e2u, 0x000006e0u, 0x000006e1u, 0x00040071u, 0x00000010u, 0x000006e3u, 0x000006e2u, 0x0003003eu, 0x00000675u, 0x000006e3u, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x00000661u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a0u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x000000a1u, 0x0004003bu, 0x00000007u, 0x000006f2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000070cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000717u, 0x00000007u, 0x000300f7u, 0x000006e8u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000006e8u, 0x00000002u, 0x000006e6u, 0x00000003u, 0x000006e7u, 0x000200f8u, 0x000006e6u, 0x00050041u, 0x000006e9u, 0x000006ebu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000006ecu, 0x000006ebu, 0x000500c2u, 0x0000000fu, 0x000006edu, 0x000006ecu, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x000006eeu, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000006efu, 0x000006eeu, 0x000500c7u, 0x0000000fu, 0x000006f0u, 0x000006efu, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x000006f1u, 0x000006edu, 0x000006f0u, 0x0003003eu, 0x000006eau, 0x000006f1u, 0x00050041u, 0x000006e9u, 0x000006f3u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000006f4u, 0x000006f3u, 0x00040071u, 0x00000006u, 0x000006f5u, 0x000006f4u, 0x000500c7u, 0x00000006u, 0x000006f6u, 0x000006f5u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000006f8u, 0x000006f6u, 0x000006f7u, 0x0003003eu, 0x000006f2u, 0x000006f8u, 0x00050041u, 0x000006e9u, 0x000006f9u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000006fau, 0x000006f9u, 0x00040071u, 0x00000006u, 0x000006fbu, 0x000006fau, 0x000500c7u, 0x00000006u, 0x000006fcu, 0x000006fbu, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000006fdu, 0x000006fcu, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x000006ffu, 0x000006f8u, 0x000006fdu, 0x0003003eu, 0x000006f2u, 0x000006ffu, 0x0004003du, 0x0000000fu, 0x00000701u, 0x000006eeu, 0x00040071u, 0x00000006u, 0x00000702u, 0x00000701u, 0x000500c7u, 0x00000006u, 0x00000703u, 0x00000702u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x00000705u, 0x00000703u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x00000707u, 0x000006ffu, 0x00000705u, 0x0003003eu, 0x000006f2u, 0x00000707u, 0x00040071u, 0x00000011u, 0x0000070au, 0x00000707u, 0x0003003eu, 0x00000708u, 0x0000070au, 0x000200f9u, 0x000006e8u, 0x000200f8u, 0x000006e7u, 0x0004003du, 0x00000010u, 0x0000070du, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x0000070eu, 0x0000070du, 0x0000070du, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x0000070fu, 0x0000070eu, 0x0003003eu, 0x0000070cu, 0x0000070fu, 0x00050041u, 0x00000007u, 0x00000711u, 0x0000070cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000712u, 0x00000711u, 0x000500c4u, 0x00000006u, 0x00000713u, 0x00000712u, 0x00000314u, 0x00050041u, 0x00000007u, 0x00000714u, 0x0000070cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000715u, 0x00000714u, 0x000500c5u, 0x00000006u, 0x00000716u, 0x00000713u, 0x00000715u, 0x0003003eu, 0x00000710u, 0x00000716u, 0x000500c7u, 0x00000006u, 0x00000719u, 0x00000716u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000071au, 0x00000719u, 0x00000464u, 0x0003003eu, 0x00000717u, 0x0000071au, 0x000500c2u, 0x00000006u, 0x0000071cu, 0x00000716u, 0x00000386u, 0x00040071u, 0x00000011u, 0x0000071du, 0x0000071cu, 0x0003003eu, 0x00000708u, 0x0000071du, 0x000500c7u, 0x00000006u, 0x0000071fu, 0x00000716u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00000720u, 0x0000071fu, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00000722u, 0x00000720u, 0x0000071au, 0x00040071u, 0x0000000fu, 0x00000723u, 0x00000722u, 0x0003003eu, 0x000006eau, 0x00000723u, 0x000200f9u, 0x000006e8u, 0x000200f8u, 0x000006e8u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a2u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x000000a3u, 0x0004003bu, 0x00000007u, 0x00000726u, 0x00000007u, 0x0004003du, 0x00000011u, 0x00000727u, 0x00000708u, 0x00040071u, 0x00000006u, 0x00000728u, 0x00000727u, 0x000500c4u, 0x00000006u, 0x00000729u, 0x00000728u, 0x00000704u, 0x0004003du, 0x0000000fu, 0x0000072au, 0x000006eau, 0x00040071u, 0x00000006u, 0x0000072bu, 0x0000072au, 0x000500c5u, 0x00000006u, 0x0000072cu, 0x00000729u, 0x0000072bu, 0x0003003eu, 0x00000726u, 0x0000072cu, 0x000300f7u, 0x0000072fu, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x0000072fu, 0x00000002u, 0x0000072du, 0x00000003u, 0x0000072eu, 0x000200f8u, 0x0000072du, 0x000500c2u, 0x00000006u, 0x00000732u, 0x0000072cu, 0x00000731u, 0x000500c7u, 0x00000006u, 0x00000733u, 0x00000732u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x00000734u, 0x00000733u, 0x00050041u, 0x000006e9u, 0x00000735u, 0x00000675u, 0x0000032du, 0x0003003eu, 0x00000735u, 0x00000734u, 0x000500c2u, 0x00000006u, 0x00000738u, 0x0000072cu, 0x00000737u, 0x000500c7u, 0x00000006u, 0x00000739u, 0x00000738u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x0000073au, 0x00000739u, 0x00050041u, 0x000006e9u, 0x0000073bu, 0x00000675u, 0x0000045cu, 0x0003003eu, 0x0000073bu, 0x0000073au, 0x000500c2u, 0x00000006u, 0x0000073du, 0x0000072cu, 0x0000032du, 0x000500c7u, 0x00000006u, 0x0000073eu, 0x0000073du, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x0000073fu, 0x0000073eu, 0x00050041u, 0x000006e9u, 0x00000740u, 0x00000675u, 0x00000386u, 0x0003003eu, 0x00000740u, 0x0000073fu, 0x000500c7u, 0x00000006u, 0x00000743u, 0x0000072cu, 0x00000742u, 0x000500c4u, 0x00000006u, 0x00000744u, 0x00000743u, 0x00000737u, 0x00040071u, 0x0000000fu, 0x00000745u, 0x00000744u, 0x00050041u, 0x000006e9u, 0x00000746u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x00000746u, 0x00000745u, 0x000200f9u, 0x0000072fu, 0x000200f8u, 0x0000072eu, 0x000500c2u, 0x00000006u, 0x00000749u, 0x0000072cu, 0x00000731u, 0x000500c7u, 0x00000006u, 0x0000074au, 0x00000749u, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x0000074bu, 0x0000074au, 0x00050041u, 0x000006e9u, 0x0000074cu, 0x00000675u, 0x0000032du, 0x0003003eu, 0x0000074cu, 0x0000074bu, 0x000500c2u, 0x00000006u, 0x0000074eu, 0x0000072cu, 0x00000386u, 0x000500c7u, 0x00000006u, 0x0000074fu, 0x0000074eu, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x00000750u, 0x0000074fu, 0x00050041u, 0x000006e9u, 0x00000751u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x00000751u, 0x00000750u, 0x000200f9u, 0x0000072fu, 0x000200f8u, 0x0000072fu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a6u, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000a4u, 0x00030037u, 0x00000007u, 0x000000a5u, 0x000200f8u, 0x000000a7u, 0x0004003bu, 0x00000056u, 0x0000075du, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000756u, 0x000000a4u, 0x000500c7u, 0x00000006u, 0x00000757u, 0x00000756u, 0x00000683u, 0x0003003eu, 0x000000a4u, 0x00000757u, 0x0004003du, 0x00000006u, 0x00000758u, 0x000000a5u, 0x00050084u, 0x00000006u, 0x0000075au, 0x00000758u, 0x00000759u, 0x0004003du, 0x00000006u, 0x0000075bu, 0x000000a4u, 0x00050080u, 0x00000006u, 0x0000075cu, 0x0000075bu, 0x0000075au, 0x0003003eu, 0x000000a4u, 0x0000075cu, 0x0004003du, 0x00000006u, 0x0000075eu, 0x000000a4u, 0x000500c6u, 0x00000006u, 0x0000075fu, 0x0000075eu, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00000760u, 0x0000068fu, 0x00000220u, 0x0000075fu, 0x0004003du, 0x00000011u, 0x00000761u, 0x00000760u, 0x0003003eu, 0x0000075du, 0x00000761u, 0x000500c2u, 0x00000011u, 0x00000763u, 0x00000761u, 0x000005f2u, 0x0003003eu, 0x00000708u, 0x00000763u, 0x0004003du, 0x00000006u, 0x00000764u, 0x000000a4u, 0x00060041u, 0x00000671u, 0x00000765u, 0x0000067cu, 0x00000220u, 0x00000764u, 0x0004003du, 0x0000000fu, 0x00000766u, 0x00000765u, 0x000500c7u, 0x00000011u, 0x00000768u, 0x00000761u, 0x000005f7u, 0x000500c4u, 0x00000011u, 0x00000769u, 0x00000768u, 0x000005f2u, 0x00040071u, 0x0000000fu, 0x0000076au, 0x00000769u, 0x000500c5u, 0x0000000fu, 0x0000076bu, 0x00000766u, 0x0000076au, 0x0003003eu, 0x000006eau, 0x0000076bu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000aau, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000a8u, 0x00030037u, 0x00000007u, 0x000000a9u, 0x000200f8u, 0x000000abu, 0x0004003bu, 0x000007bfu, 0x000007c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cdu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000007f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007fau, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x0000081cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000081fu, 0x00000007u, 0x0004003du, 0x00000069u, 0x0000076cu, 0x00000755u, 0x000300f7u, 0x0000076eu, 0x00000000u, 0x000400fau, 0x0000076cu, 0x0000076du, 0x0000076eu, 0x000200f8u, 0x0000076du, 0x000300f7u, 0x00000774u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00000774u, 0x00000000u, 0x0000076fu, 0x00000001u, 0x00000770u, 0x00000002u, 0x00000771u, 0x00000003u, 0x00000772u, 0x00000004u, 0x00000773u, 0x000200f8u, 0x0000076fu, 0x0004003du, 0x00000006u, 0x00000775u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x00000776u, 0x00000775u, 0x00000663u, 0x0003003eu, 0x000000a8u, 0x00000776u, 0x0004003du, 0x00000006u, 0x00000777u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x00000778u, 0x00000777u, 0x00000662u, 0x0004003du, 0x00000006u, 0x00000779u, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000077au, 0x00000779u, 0x00000778u, 0x0003003eu, 0x000000a8u, 0x0000077au, 0x0004003du, 0x00000006u, 0x0000077bu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x0000077cu, 0x0000077bu, 0x00000464u, 0x00060041u, 0x00000671u, 0x0000077du, 0x0000066eu, 0x00000220u, 0x0000077cu, 0x0003003eu, 0x0000077du, 0x00000388u, 0x0004003du, 0x00000006u, 0x0000077eu, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x0000077fu, 0x0000077eu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00000780u, 0x0000077fu, 0x0000032du, 0x000300f7u, 0x00000782u, 0x00000000u, 0x000400fau, 0x00000780u, 0x00000781u, 0x00000782u, 0x000200f8u, 0x00000781u, 0x0004003du, 0x00000006u, 0x00000783u, 0x000000a8u, 0x000500c2u, 0x00000006u, 0x00000784u, 0x00000783u, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00000785u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000786u, 0x00000785u, 0x00060041u, 0x00000671u, 0x00000787u, 0x0000067cu, 0x00000220u, 0x00000784u, 0x0003003eu, 0x00000787u, 0x00000786u, 0x000200f9u, 0x00000782u, 0x000200f8u, 0x00000782u, 0x000300f7u, 0x0000078fu, 0x00000000u, 0x000400fau, 0x0000078du, 0x0000078eu, 0x0000078fu, 0x000200f8u, 0x0000078eu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x00000791u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x00000792u, 0x00000791u, 0x00000464u, 0x00050080u, 0x00000006u, 0x00000793u, 0x00000792u, 0x00000662u, 0x00060041u, 0x00000671u, 0x00000794u, 0x0000066eu, 0x00000220u, 0x00000793u, 0x0003003eu, 0x00000794u, 0x0000046fu, 0x000200f9u, 0x0000078fu, 0x000200f8u, 0x0000078fu, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000770u, 0x0004003du, 0x00000006u, 0x00000796u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x00000797u, 0x00000796u, 0x00000663u, 0x0003003eu, 0x000000a8u, 0x00000797u, 0x0004003du, 0x00000006u, 0x00000798u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x00000799u, 0x00000798u, 0x00000662u, 0x0004003du, 0x00000006u, 0x0000079au, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000079bu, 0x0000079au, 0x00000799u, 0x0003003eu, 0x000000a8u, 0x0000079bu, 0x0004003du, 0x00000006u, 0x0000079cu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x0000079du, 0x0000079cu, 0x00000464u, 0x00050041u, 0x000006e9u, 0x0000079eu, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000079fu, 0x0000079eu, 0x00060041u, 0x00000671u, 0x000007a0u, 0x0000066eu, 0x00000220u, 0x0000079du, 0x0003003eu, 0x000007a0u, 0x0000079fu, 0x0004003du, 0x00000006u, 0x000007a1u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007a2u, 0x000007a1u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x000007a3u, 0x000007a2u, 0x0000032du, 0x000300f7u, 0x000007a5u, 0x00000000u, 0x000400fau, 0x000007a3u, 0x000007a4u, 0x000007a5u, 0x000200f8u, 0x000007a4u, 0x0004003du, 0x00000006u, 0x000007a6u, 0x000000a8u, 0x000500c2u, 0x00000006u, 0x000007a7u, 0x000007a6u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000007a9u, 0x0000079eu, 0x00040071u, 0x00000006u, 0x000007aau, 0x000007a9u, 0x0004007cu, 0x00000008u, 0x000007abu, 0x000007aau, 0x000500c7u, 0x00000008u, 0x000007acu, 0x000007abu, 0x0000022au, 0x00050084u, 0x00000008u, 0x000007adu, 0x000007acu, 0x00000230u, 0x00040072u, 0x0000037bu, 0x000007aeu, 0x000007adu, 0x0004007cu, 0x0000000fu, 0x000007afu, 0x000007aeu, 0x00060041u, 0x00000671u, 0x000007b0u, 0x0000067cu, 0x00000220u, 0x000007a7u, 0x0003003eu, 0x000007b0u, 0x000007afu, 0x000200f9u, 0x000007a5u, 0x000200f8u, 0x000007a5u, 0x000300f7u, 0x000007b2u, 0x00000000u, 0x000400fau, 0x0000078du, 0x000007b1u, 0x000007b2u, 0x000200f8u, 0x000007b1u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x000007b3u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x000007b4u, 0x000007b3u, 0x00000464u, 0x00050080u, 0x00000006u, 0x000007b5u, 0x000007b4u, 0x00000662u, 0x00060041u, 0x00000671u, 0x000007b6u, 0x0000066eu, 0x00000220u, 0x000007b5u, 0x0003003eu, 0x000007b6u, 0x0000046fu, 0x000200f9u, 0x000007b2u, 0x000200f8u, 0x000007b2u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000771u, 0x0004003du, 0x00000006u, 0x000007b8u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007b9u, 0x000007b8u, 0x00000683u, 0x0003003eu, 0x000000a8u, 0x000007b9u, 0x0004003du, 0x00000006u, 0x000007bau, 0x000000a9u, 0x00050084u, 0x00000006u, 0x000007bcu, 0x000007bau, 0x000007bbu, 0x0004003du, 0x00000006u, 0x000007bdu, 0x000000a8u, 0x00050080u, 0x00000006u, 0x000007beu, 0x000007bdu, 0x000007bcu, 0x0003003eu, 0x000000a8u, 0x000007beu, 0x0004003du, 0x00000010u, 0x000007c1u, 0x00000675u, 0x00040071u, 0x000004f7u, 0x000007c2u, 0x000007c1u, 0x0003003eu, 0x000007c0u, 0x000007c2u, 0x0004003du, 0x000004f7u, 0x000007c3u, 0x000007c0u, 0x0008004fu, 0x0000030cu, 0x000007c4u, 0x000007c3u, 0x000007c3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000030cu, 0x000007c6u, 0x000007c4u, 0x0000f36du, 0x0004003du, 0x000004f7u, 0x000007c7u, 0x000007c0u, 0x0009004fu, 0x000004f7u, 0x000007c8u, 0x000007c7u, 0x000007c6u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000007c0u, 0x000007c8u, 0x00050041u, 0x00000007u, 0x000007cau, 0x000007c0u, 0x00000464u, 0x0004003du, 0x00000006u, 0x000007cbu, 0x000007cau, 0x000500c2u, 0x00000006u, 0x000007ccu, 0x000007cbu, 0x00000737u, 0x0003003eu, 0x000007c9u, 0x000007ccu, 0x00050041u, 0x00000007u, 0x000007ceu, 0x000007c0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000007cfu, 0x000007ceu, 0x000500c4u, 0x00000006u, 0x000007d0u, 0x000007cfu, 0x00000314u, 0x00050041u, 0x00000007u, 0x000007d1u, 0x000007c0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000007d2u, 0x000007d1u, 0x000500c4u, 0x00000006u, 0x000007d3u, 0x000007d2u, 0x00000464u, 0x000500c5u, 0x00000006u, 0x000007d4u, 0x000007d0u, 0x000007d3u, 0x00050041u, 0x00000007u, 0x000007d5u, 0x000007c0u, 0x00000386u, 0x0004003du, 0x00000006u, 0x000007d6u, 0x000007d5u, 0x000500c2u, 0x00000006u, 0x000007d7u, 0x000007d6u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x000007d8u, 0x000007d4u, 0x000007d7u, 0x000500c2u, 0x00000006u, 0x000007dau, 0x000007ccu, 0x00000386u, 0x000500c5u, 0x00000006u, 0x000007dbu, 0x000007d8u, 0x000007dau, 0x0003003eu, 0x000007cdu, 0x000007dbu, 0x0004003du, 0x00000006u, 0x000007dcu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x000007ddu, 0x000007dcu, 0x0000045cu, 0x00040071u, 0x00000011u, 0x000007dfu, 0x000007dbu, 0x00060041u, 0x00000692u, 0x000007e0u, 0x0000068fu, 0x00000220u, 0x000007ddu, 0x0003003eu, 0x000007e0u, 0x000007dfu, 0x0004003du, 0x00000006u, 0x000007e1u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007e3u, 0x000007ccu, 0x00000464u, 0x00040071u, 0x0000000fu, 0x000007e4u, 0x000007e3u, 0x00060041u, 0x00000671u, 0x000007e5u, 0x0000067cu, 0x00000220u, 0x000007e1u, 0x0003003eu, 0x000007e5u, 0x000007e4u, 0x000300f7u, 0x000007e7u, 0x00000000u, 0x000400fau, 0x0000078du, 0x000007e6u, 0x000007e7u, 0x000200f8u, 0x000007e6u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x000007e8u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x000007e9u, 0x000007e8u, 0x0000045cu, 0x00050080u, 0x00000006u, 0x000007ebu, 0x000007e9u, 0x000007eau, 0x00060041u, 0x00000692u, 0x000007edu, 0x0000068fu, 0x00000220u, 0x000007ebu, 0x0003003eu, 0x000007edu, 0x000007ecu, 0x000200f9u, 0x000007e7u, 0x000200f8u, 0x000007e7u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000772u, 0x0004003du, 0x00000006u, 0x000007efu, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007f0u, 0x000007efu, 0x00000683u, 0x0003003eu, 0x000000a8u, 0x000007f0u, 0x0004003du, 0x00000006u, 0x000007f1u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x000007f3u, 0x000007f1u, 0x000007f2u, 0x0004003du, 0x00000006u, 0x000007f4u, 0x000000a8u, 0x00050080u, 0x00000006u, 0x000007f5u, 0x000007f4u, 0x000007f3u, 0x0003003eu, 0x000000a8u, 0x000007f5u, 0x0004003du, 0x00000010u, 0x000007f7u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x000007f8u, 0x000007f7u, 0x000007f7u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x000007f9u, 0x000007f8u, 0x0003003eu, 0x000007f6u, 0x000007f9u, 0x00050041u, 0x00000007u, 0x000007fbu, 0x000007f6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000007fcu, 0x000007fbu, 0x000500c4u, 0x00000006u, 0x000007fdu, 0x000007fcu, 0x00000314u, 0x00050041u, 0x00000007u, 0x000007feu, 0x000007f6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000007ffu, 0x000007feu, 0x000500c5u, 0x00000006u, 0x00000800u, 0x000007fdu, 0x000007ffu, 0x0003003eu, 0x000007fau, 0x00000800u, 0x0004003du, 0x00000006u, 0x00000801u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x00000802u, 0x00000801u, 0x0000045cu, 0x00040071u, 0x00000011u, 0x00000804u, 0x00000800u, 0x00060041u, 0x00000692u, 0x00000805u, 0x0000068fu, 0x00000220u, 0x00000802u, 0x0003003eu, 0x00000805u, 0x00000804u, 0x0004003du, 0x00000006u, 0x00000806u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000808u, 0x000007feu, 0x000500c7u, 0x00000006u, 0x00000809u, 0x00000808u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000080au, 0x00000809u, 0x00000464u, 0x00040071u, 0x0000000fu, 0x0000080bu, 0x0000080au, 0x00060041u, 0x00000671u, 0x0000080cu, 0x0000067cu, 0x00000220u, 0x00000806u, 0x0003003eu, 0x0000080cu, 0x0000080bu, 0x000300f7u, 0x0000080eu, 0x00000000u, 0x000400fau, 0x0000078du, 0x0000080du, 0x0000080eu, 0x000200f8u, 0x0000080du, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x0000080fu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x00000810u, 0x0000080fu, 0x0000045cu, 0x00050080u, 0x00000006u, 0x00000812u, 0x00000810u, 0x00000811u, 0x00060041u, 0x00000692u, 0x00000813u, 0x0000068fu, 0x00000220u, 0x00000812u, 0x0003003eu, 0x00000813u, 0x000007ecu, 0x000200f9u, 0x0000080eu, 0x000200f8u, 0x0000080eu, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000773u, 0x0004003du, 0x00000006u, 0x00000815u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x00000816u, 0x00000815u, 0x000006cbu, 0x0003003eu, 0x000000a8u, 0x00000816u, 0x0004003du, 0x00000006u, 0x00000817u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x00000819u, 0x00000817u, 0x00000818u, 0x0004003du, 0x00000006u, 0x0000081au, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000081bu, 0x0000081au, 0x00000819u, 0x0003003eu, 0x000000a8u, 0x0000081bu, 0x0004003du, 0x00000010u, 0x0000081du, 0x00000675u, 0x00040071u, 0x000004f7u, 0x0000081eu, 0x0000081du, 0x0003003eu, 0x0000081cu, 0x0000081eu, 0x00050041u, 0x00000007u, 0x00000820u, 0x0000081cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000821u, 0x00000820u, 0x000500c4u, 0x00000006u, 0x00000822u, 0x00000821u, 0x000006deu, 0x00050041u, 0x00000007u, 0x00000823u, 0x0000081cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000824u, 0x00000823u, 0x000500c4u, 0x00000006u, 0x00000825u, 0x00000824u, 0x00000330u, 0x000500c5u, 0x00000006u, 0x00000826u, 0x00000822u, 0x00000825u, 0x00050041u, 0x00000007u, 0x00000827u, 0x0000081cu, 0x00000386u, 0x0004003du, 0x00000006u, 0x00000828u, 0x00000827u, 0x000500c4u, 0x00000006u, 0x00000829u, 0x00000828u, 0x00000314u, 0x000500c5u, 0x00000006u, 0x0000082au, 0x00000826u, 0x00000829u, 0x00050041u, 0x00000007u, 0x0000082bu, 0x0000081cu, 0x00000464u, 0x0004003du, 0x00000006u, 0x0000082cu, 0x0000082bu, 0x000500c4u, 0x00000006u, 0x0000082du, 0x0000082cu, 0x0000032du, 0x000500c5u, 0x00000006u, 0x0000082eu, 0x0000082au, 0x0000082du, 0x0003003eu, 0x0000081fu, 0x0000082eu, 0x0004003du, 0x00000006u, 0x0000082fu, 0x000000a8u, 0x00060041u, 0x000006d9u, 0x00000831u, 0x000006d7u, 0x00000220u, 0x0000082fu, 0x0003003eu, 0x00000831u, 0x0000082eu, 0x0004003du, 0x00000006u, 0x00000832u, 0x000000a8u, 0x00050084u, 0x00000006u, 0x00000833u, 0x00000386u, 0x00000832u, 0x00050041u, 0x000006e9u, 0x00000834u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000835u, 0x00000834u, 0x00040071u, 0x00000006u, 0x00000836u, 0x00000835u, 0x0004007cu, 0x00000008u, 0x00000837u, 0x00000836u, 0x000500c7u, 0x00000008u, 0x00000838u, 0x00000837u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00000839u, 0x00000838u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x0000083au, 0x00000839u, 0x0004007cu, 0x0000000fu, 0x0000083bu, 0x0000083au, 0x00060041u, 0x00000671u, 0x0000083cu, 0x0000067cu, 0x00000220u, 0x00000833u, 0x0003003eu, 0x0000083cu, 0x0000083bu, 0x0004003du, 0x00000006u, 0x0000083du, 0x000000a8u, 0x00050084u, 0x00000006u, 0x0000083eu, 0x00000386u, 0x0000083du, 0x00050080u, 0x00000006u, 0x0000083fu, 0x0000083eu, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00000840u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000841u, 0x00000840u, 0x00040071u, 0x00000006u, 0x00000842u, 0x00000841u, 0x0004007cu, 0x00000008u, 0x00000843u, 0x00000842u, 0x000500c7u, 0x00000008u, 0x00000844u, 0x00000843u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00000845u, 0x00000844u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00000846u, 0x00000845u, 0x0004007cu, 0x0000000fu, 0x00000847u, 0x00000846u, 0x00060041u, 0x00000671u, 0x00000848u, 0x0000067cu, 0x00000220u, 0x0000083fu, 0x0003003eu, 0x00000848u, 0x00000847u, 0x000300f7u, 0x0000084au, 0x00000000u, 0x000400fau, 0x0000078du, 0x00000849u, 0x0000084au, 0x000200f8u, 0x00000849u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x0000084bu, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000084du, 0x0000084bu, 0x0000084cu, 0x00060041u, 0x000006d9u, 0x0000084fu, 0x000006d7u, 0x00000220u, 0x0000084du, 0x0003003eu, 0x0000084fu, 0x0000084eu, 0x000200f9u, 0x0000084au, 0x000200f8u, 0x0000084au, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000774u, 0x000200f9u, 0x0000076eu, 0x000200f8u, 0x0000076eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000aeu, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000acu, 0x00030037u, 0x00000007u, 0x000000adu, 0x000200f8u, 0x000000afu, 0x000300f7u, 0x00000855u, 0x00000000u, 0x000400fau, 0x00000853u, 0x00000854u, 0x00000855u, 0x000200f8u, 0x00000854u, 0x0004003du, 0x00000069u, 0x00000857u, 0x00000856u, 0x000300f7u, 0x00000859u, 0x00000000u, 0x000400fau, 0x00000857u, 0x00000858u, 0x00000859u, 0x000200f8u, 0x00000858u, 0x0004003du, 0x00000006u, 0x0000085au, 0x000000acu, 0x000500c7u, 0x00000006u, 0x0000085bu, 0x0000085au, 0x00000683u, 0x0003003eu, 0x000000acu, 0x0000085bu, 0x0004003du, 0x00000006u, 0x0000085cu, 0x000000adu, 0x00050084u, 0x00000006u, 0x0000085eu, 0x0000085cu, 0x0000085du, 0x0004003du, 0x00000006u, 0x0000085fu, 0x000000acu, 0x00050080u, 0x00000006u, 0x00000860u, 0x0000085fu, 0x0000085eu, 0x0003003eu, 0x000000acu, 0x00000860u, 0x0004003du, 0x00000006u, 0x00000861u, 0x000000acu, 0x000500c6u, 0x00000006u, 0x00000862u, 0x00000861u, 0x0000045cu, 0x0004003du, 0x00000011u, 0x00000863u, 0x00000708u, 0x000500c4u, 0x00000011u, 0x00000864u, 0x00000863u, 0x000005f2u, 0x0004003du, 0x0000000fu, 0x00000865u, 0x000006eau, 0x000500c2u, 0x0000000fu, 0x00000866u, 0x00000865u, 0x000005f2u, 0x00040071u, 0x00000011u, 0x00000867u, 0x00000866u, 0x000500c5u, 0x00000011u, 0x00000868u, 0x00000864u, 0x00000867u, 0x00060041u, 0x00000692u, 0x00000869u, 0x0000068fu, 0x00000220u, 0x00000862u, 0x0003003eu, 0x00000869u, 0x00000868u, 0x0004003du, 0x00000006u, 0x0000086au, 0x000000acu, 0x0004003du, 0x0000000fu, 0x0000086bu, 0x000006eau, 0x00040071u, 0x00000011u, 0x0000086cu, 0x0000086bu, 0x000500c7u, 0x00000011u, 0x0000086du, 0x0000086cu, 0x000005f7u, 0x00040071u, 0x0000000fu, 0x0000086eu, 0x0000086du, 0x00060041u, 0x00000671u, 0x0000086fu, 0x0000067cu, 0x00000220u, 0x0000086au, 0x0003003eu, 0x0000086fu, 0x0000086eu, 0x000300f7u, 0x00000871u, 0x00000000u, 0x000400fau, 0x0000078du, 0x00000870u, 0x00000871u, 0x000200f8u, 0x00000870u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x00000872u, 0x000000acu, 0x000500c6u, 0x00000006u, 0x00000873u, 0x00000872u, 0x0000045cu, 0x00050080u, 0x00000006u, 0x00000875u, 0x00000873u, 0x00000874u, 0x00060041u, 0x00000692u, 0x00000876u, 0x0000068fu, 0x00000220u, 0x00000875u, 0x0003003eu, 0x00000876u, 0x000007ecu, 0x000200f9u, 0x00000871u, 0x000200f8u, 0x00000871u, 0x000200f9u, 0x00000859u, 0x000200f8u, 0x00000859u, 0x000200f9u, 0x00000855u, 0x000200f8u, 0x00000855u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000b8u, 0x00000000u, 0x000000b2u, 0x00030037u, 0x000000b1u, 0x000000b3u, 0x00030037u, 0x00000007u, 0x000000b4u, 0x00030037u, 0x00000007u, 0x000000b5u, 0x00030037u, 0x00000007u, 0x000000b6u, 0x00030037u, 0x00000007u, 0x000000b7u, 0x000200f8u, 0x000000b9u, 0x0004003bu, 0x000000b1u, 0x00000880u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000088au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000892u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b1u, 0x00000007u, 0x0003003eu, 0x00000755u, 0x00000536u, 0x0003003eu, 0x00000856u, 0x00000536u, 0x0004003du, 0x000000b0u, 0x00000877u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x00000878u, 0x000000b4u, 0x0004003du, 0x00000006u, 0x00000879u, 0x000000b5u, 0x00050050u, 0x000000b0u, 0x0000087au, 0x00000878u, 0x00000879u, 0x000500b0u, 0x0000087bu, 0x0000087cu, 0x00000877u, 0x0000087au, 0x0004009bu, 0x00000069u, 0x0000087du, 0x0000087cu, 0x000300f7u, 0x0000087fu, 0x00000000u, 0x000400fau, 0x0000087du, 0x0000087eu, 0x0000087fu, 0x000200f8u, 0x0000087eu, 0x0004003du, 0x000000b0u, 0x00000881u, 0x000000b3u, 0x00050050u, 0x000000b0u, 0x00000885u, 0x00000884u, 0x00000884u, 0x000500c7u, 0x000000b0u, 0x00000886u, 0x00000881u, 0x00000885u, 0x0003003eu, 0x00000880u, 0x00000886u, 0x0004003du, 0x000000b0u, 0x00000887u, 0x000000b3u, 0x00050050u, 0x000000efu, 0x00000888u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x00000889u, 0x00000887u, 0x00000888u, 0x0003003eu, 0x000000b3u, 0x00000889u, 0x00050041u, 0x00000007u, 0x0000088bu, 0x00000880u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000088cu, 0x0000088bu, 0x00050084u, 0x00000006u, 0x0000088eu, 0x0000088cu, 0x0000088du, 0x00050041u, 0x00000007u, 0x0000088fu, 0x00000880u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000890u, 0x0000088fu, 0x00050080u, 0x00000006u, 0x00000891u, 0x0000088eu, 0x00000890u, 0x0003003eu, 0x0000088au, 0x00000891u, 0x0004003du, 0x00000006u, 0x00000893u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x00000894u, 0x000000b4u, 0x000500c2u, 0x00000006u, 0x00000895u, 0x00000894u, 0x0000078bu, 0x00050041u, 0x00000007u, 0x00000896u, 0x000000b3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000897u, 0x00000896u, 0x00050084u, 0x00000006u, 0x00000898u, 0x00000895u, 0x00000897u, 0x00050080u, 0x00000006u, 0x00000899u, 0x00000893u, 0x00000898u, 0x00050041u, 0x00000007u, 0x0000089au, 0x000000b3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000089bu, 0x0000089au, 0x00050080u, 0x00000006u, 0x0000089cu, 0x00000899u, 0x0000089bu, 0x0003003eu, 0x00000892u, 0x0000089cu, 0x0003003eu, 0x0000089eu, 0x0000089cu, 0x0003003eu, 0x000008a0u, 0x0000089cu, 0x0003003eu, 0x000008a2u, 0x00000891u, 0x00060039u, 0x00000002u, 0x000008a4u, 0x0000009eu, 0x000008a0u, 0x000008a2u, 0x0004003du, 0x00000006u, 0x000008a5u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000008a6u, 0x000000b4u, 0x000500c2u, 0x00000006u, 0x000008a7u, 0x000008a6u, 0x0000078bu, 0x0004003du, 0x00000006u, 0x000008a9u, 0x00000896u, 0x00050084u, 0x00000006u, 0x000008aau, 0x000008a7u, 0x000008a9u, 0x00050080u, 0x00000006u, 0x000008abu, 0x000008a5u, 0x000008aau, 0x0004003du, 0x00000006u, 0x000008adu, 0x0000089au, 0x00050080u, 0x00000006u, 0x000008aeu, 0x000008abu, 0x000008adu, 0x0003003eu, 0x00000892u, 0x000008aeu, 0x0003003eu, 0x000008afu, 0x000008aeu, 0x0003003eu, 0x000008b1u, 0x00000891u, 0x00060039u, 0x00000002u, 0x000008b3u, 0x000000a6u, 0x000008afu, 0x000008b1u, 0x000200f9u, 0x0000087fu, 0x000200f8u, 0x0000087fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000bdu, 0x00000000u, 0x000000bau, 0x00030037u, 0x000000b1u, 0x000000bbu, 0x00030037u, 0x00000007u, 0x000000bcu, 0x000200f8u, 0x000000beu, 0x0004003bu, 0x00000007u, 0x000008b4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000008c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c4u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008b5u, 0x000000bbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000008b6u, 0x000008b5u, 0x000500c2u, 0x00000006u, 0x000008b7u, 0x000008b6u, 0x00000386u, 0x0004003du, 0x00000006u, 0x000008b8u, 0x000000bcu, 0x00050080u, 0x00000006u, 0x000008b9u, 0x000008b8u, 0x00000464u, 0x000500c2u, 0x00000006u, 0x000008bau, 0x000008b9u, 0x00000386u, 0x00050084u, 0x00000006u, 0x000008bbu, 0x000008b7u, 0x000008bau, 0x00050041u, 0x00000007u, 0x000008bcu, 0x000000bbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000008bdu, 0x000008bcu, 0x000500c2u, 0x00000006u, 0x000008beu, 0x000008bdu, 0x00000386u, 0x00050080u, 0x00000006u, 0x000008bfu, 0x000008bbu, 0x000008beu, 0x0003003eu, 0x000008b4u, 0x000008bfu, 0x0004003du, 0x000000b0u, 0x000008c1u, 0x000000bbu, 0x000500c7u, 0x000000b0u, 0x000008c3u, 0x000008c1u, 0x0000f36eu, 0x0003003eu, 0x000008c0u, 0x000008c3u, 0x0004003du, 0x00000069u, 0x000008c5u, 0x00000755u, 0x000600a9u, 0x00000006u, 0x000008c6u, 0x000008c5u, 0x0000045cu, 0x0000032du, 0x0004003du, 0x00000069u, 0x000008c7u, 0x00000856u, 0x000600a9u, 0x00000006u, 0x000008c8u, 0x000008c7u, 0x0000045cu, 0x0000032du, 0x00050084u, 0x00000006u, 0x000008c9u, 0x00000386u, 0x000008c8u, 0x00050080u, 0x00000006u, 0x000008cau, 0x000008c6u, 0x000008c9u, 0x0003003eu, 0x000008c4u, 0x000008cau, 0x00050041u, 0x00000007u, 0x000008cbu, 0x000008c0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000008ccu, 0x000008cbu, 0x00050041u, 0x00000007u, 0x000008cdu, 0x000008c0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000008ceu, 0x000008cdu, 0x00050084u, 0x00000006u, 0x000008cfu, 0x000008ceu, 0x00000704u, 0x00050080u, 0x00000006u, 0x000008d0u, 0x000008ccu, 0x000008cfu, 0x00050084u, 0x00000006u, 0x000008d1u, 0x00000386u, 0x000008d0u, 0x000500c4u, 0x00000006u, 0x000008d3u, 0x000008cau, 0x000008d1u, 0x0003003eu, 0x000008c4u, 0x000008d3u, 0x000500abu, 0x00000069u, 0x000008d5u, 0x000008d3u, 0x0000032du, 0x000300f7u, 0x000008d7u, 0x00000000u, 0x000400fau, 0x000008d5u, 0x000008d6u, 0x000008d7u, 0x000200f8u, 0x000008d6u, 0x00050080u, 0x00000006u, 0x000008ddu, 0x000008dbu, 0x000008bfu, 0x00060041u, 0x000006d9u, 0x000008deu, 0x000006d7u, 0x00000220u, 0x000008ddu, 0x000700f1u, 0x00000006u, 0x000008e0u, 0x000008deu, 0x0000045cu, 0x0000032du, 0x000008d3u, 0x000200f9u, 0x000008d7u, 0x000200f8u, 0x000008d7u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000c4u, 0x00000000u, 0x000000b2u, 0x00030037u, 0x000000b1u, 0x000000bfu, 0x00030037u, 0x00000007u, 0x000000c0u, 0x00030037u, 0x00000007u, 0x000000c1u, 0x00030037u, 0x00000007u, 0x000000c2u, 0x00030037u, 0x00000007u, 0x000000c3u, 0x000200f8u, 0x000000c5u, 0x0004003bu, 0x00000007u, 0x000008e9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000008ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000907u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000909u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000915u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000917u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000091eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000920u, 0x00000007u, 0x0004003du, 0x000000b0u, 0x000008e1u, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000008e2u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000008e3u, 0x000000c1u, 0x00050050u, 0x000000b0u, 0x000008e4u, 0x000008e2u, 0x000008e3u, 0x000500b0u, 0x0000087bu, 0x000008e5u, 0x000008e1u, 0x000008e4u, 0x0004009bu, 0x00000069u, 0x000008e6u, 0x000008e5u, 0x000300f7u, 0x000008e8u, 0x00000000u, 0x000400fau, 0x000008e6u, 0x000008e7u, 0x000008e8u, 0x000200f8u, 0x000008e7u, 0x0004003du, 0x00000006u, 0x000008eau, 0x000000c0u, 0x000500c2u, 0x00000006u, 0x000008ebu, 0x000008eau, 0x0000078bu, 0x0003003eu, 0x000008e9u, 0x000008ebu, 0x0004003du, 0x000000b0u, 0x000008edu, 0x000000bfu, 0x00050050u, 0x000000b0u, 0x000008f0u, 0x000008efu, 0x000008efu, 0x000500c7u, 0x000000b0u, 0x000008f1u, 0x000008edu, 0x000008f0u, 0x0003003eu, 0x000008ecu, 0x000008f1u, 0x0004003du, 0x000000b0u, 0x000008f2u, 0x000000bfu, 0x00050050u, 0x000000efu, 0x000008f3u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x000008f4u, 0x000008f2u, 0x000008f3u, 0x0003003eu, 0x000000bfu, 0x000008f4u, 0x00050041u, 0x00000007u, 0x000008f6u, 0x000008ecu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000008f7u, 0x000008f6u, 0x00050084u, 0x00000006u, 0x000008f9u, 0x000008f7u, 0x000008f8u, 0x00050041u, 0x00000007u, 0x000008fau, 0x000008ecu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000008fbu, 0x000008fau, 0x00050080u, 0x00000006u, 0x000008fcu, 0x000008f9u, 0x000008fbu, 0x0003003eu, 0x000008f5u, 0x000008fcu, 0x0004003du, 0x00000006u, 0x000008feu, 0x000000c2u, 0x00050041u, 0x00000007u, 0x00000900u, 0x000000bfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000901u, 0x00000900u, 0x00050084u, 0x00000006u, 0x00000902u, 0x000008ebu, 0x00000901u, 0x00050080u, 0x00000006u, 0x00000903u, 0x000008feu, 0x00000902u, 0x00050041u, 0x00000007u, 0x00000904u, 0x000000bfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000905u, 0x00000904u, 0x00050080u, 0x00000006u, 0x00000906u, 0x00000903u, 0x00000905u, 0x0003003eu, 0x000008fdu, 0x00000906u, 0x0003003eu, 0x00000907u, 0x00000906u, 0x0003003eu, 0x00000909u, 0x000008fcu, 0x00060039u, 0x00000002u, 0x0000090bu, 0x000000aau, 0x00000907u, 0x00000909u, 0x0004003du, 0x00000006u, 0x0000090cu, 0x000000c3u, 0x0004003du, 0x00000006u, 0x0000090fu, 0x00000900u, 0x00050084u, 0x00000006u, 0x00000910u, 0x000008ebu, 0x0000090fu, 0x00050080u, 0x00000006u, 0x00000911u, 0x0000090cu, 0x00000910u, 0x0004003du, 0x00000006u, 0x00000913u, 0x00000904u, 0x00050080u, 0x00000006u, 0x00000914u, 0x00000911u, 0x00000913u, 0x0003003eu, 0x000008fdu, 0x00000914u, 0x0003003eu, 0x00000915u, 0x00000914u, 0x0003003eu, 0x00000917u, 0x000008fcu, 0x00060039u, 0x00000002u, 0x00000919u, 0x000000aeu, 0x00000915u, 0x00000917u, 0x000300f7u, 0x0000091du, 0x00000000u, 0x000400fau, 0x0000091bu, 0x0000091cu, 0x0000091du, 0x000200f8u, 0x0000091cu, 0x0004003du, 0x000000b0u, 0x0000091fu, 0x000000bfu, 0x0003003eu, 0x0000091eu, 0x0000091fu, 0x0003003eu, 0x00000920u, 0x000008ebu, 0x00060039u, 0x00000002u, 0x00000922u, 0x000000bdu, 0x0000091eu, 0x00000920u, 0x000200f9u, 0x0000091du, 0x000200f8u, 0x0000091du, 0x000200f9u, 0x000008e8u, 0x000200f8u, 0x000008e8u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000010u, 0x000000c8u, 0x00000000u, 0x000000c6u, 0x00030037u, 0x0000006au, 0x000000c7u, 0x000200f8u, 0x000000c9u, 0x0004003bu, 0x0000007bu, 0x00000923u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000925u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00000934u, 0x00000007u, 0x0004003du, 0x00000069u, 0x00000924u, 0x000000c7u, 0x000300f7u, 0x00000927u, 0x00000000u, 0x000400fau, 0x00000924u, 0x00000926u, 0x0000092cu, 0x000200f8u, 0x00000926u, 0x00050041u, 0x000006e9u, 0x00000928u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000929u, 0x00000928u, 0x000500c7u, 0x0000000fu, 0x0000092bu, 0x00000929u, 0x0000092au, 0x0003003eu, 0x00000925u, 0x0000092bu, 0x000200f9u, 0x00000927u, 0x000200f8u, 0x0000092cu, 0x0003003eu, 0x00000925u, 0x0000092au, 0x000200f9u, 0x00000927u, 0x000200f8u, 0x00000927u, 0x000700f5u, 0x0000000fu, 0x0000eedcu, 0x0000092bu, 0x00000926u, 0x0000092au, 0x0000092cu, 0x0003003eu, 0x00000923u, 0x0000eedcu, 0x000300f7u, 0x00000933u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00000933u, 0x00000000u, 0x0000092eu, 0x00000001u, 0x0000092fu, 0x00000002u, 0x00000930u, 0x00000003u, 0x00000931u, 0x00000004u, 0x00000932u, 0x000200f8u, 0x0000092eu, 0x0003003eu, 0x00000934u, 0x00000935u, 0x0003003eu, 0x00000923u, 0x0000092au, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x0000092fu, 0x0004003du, 0x00000010u, 0x00000937u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x00000938u, 0x00000937u, 0x00000937u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000934u, 0x00000938u, 0x0003003eu, 0x00000923u, 0x0000092au, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x00000930u, 0x0004003du, 0x00000010u, 0x0000093au, 0x00000675u, 0x0008004fu, 0x00000047u, 0x0000093bu, 0x0000093au, 0x0000093au, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000047u, 0x0000093eu, 0x0000093bu, 0x0000f386u, 0x0003003eu, 0x00000934u, 0x0000093eu, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x00000931u, 0x0004003du, 0x00000010u, 0x00000940u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x00000941u, 0x00000940u, 0x00000940u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000934u, 0x00000941u, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x00000932u, 0x0004003du, 0x00000010u, 0x00000943u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x00000944u, 0x00000943u, 0x00000943u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000934u, 0x00000944u, 0x000200f9u, 0x00000933u, 0x000200f8u, 0x00000933u, 0x000f00f5u, 0x0000000fu, 0x0000eee0u, 0x0000eedcu, 0x00000927u, 0x0000092au, 0x0000092eu, 0x0000092au, 0x0000092fu, 0x0000eedcu, 0x00000930u, 0x0000eedcu, 0x00000931u, 0x0000eedcu, 0x00000932u, 0x000f00f5u, 0x00000047u, 0x0000eeddu, 0x0000eedfu, 0x00000927u, 0x00000935u, 0x0000092eu, 0x00000938u, 0x0000092fu, 0x0000093eu, 0x00000930u, 0x00000941u, 0x00000931u, 0x00000944u, 0x00000932u, 0x00050051u, 0x0000000fu, 0x00000949u, 0x0000eeddu, 0x00000000u, 0x00050051u, 0x0000000fu, 0x0000094au, 0x0000eeddu, 0x00000001u, 0x00050051u, 0x0000000fu, 0x0000094bu, 0x0000eeddu, 0x00000002u, 0x00070050u, 0x00000010u, 0x0000094cu, 0x00000949u, 0x0000094au, 0x0000094bu, 0x0000eee0u, 0x000200feu, 0x0000094cu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000ccu, 0x00000000u, 0x000000cau, 0x00030037u, 0x00000068u, 0x000000cbu, 0x000200f8u, 0x000000cdu, 0x000300f7u, 0x00000951u, 0x00000000u, 0x000400fau, 0x0000094fu, 0x00000950u, 0x00000956u, 0x000200f8u, 0x00000950u, 0x0004003du, 0x00000010u, 0x00000952u, 0x000000cbu, 0x0008004fu, 0x00000047u, 0x00000953u, 0x00000952u, 0x00000952u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x00000954u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x00000955u, 0x00000954u, 0x00000952u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x00000955u, 0x000200f9u, 0x00000951u, 0x000200f8u, 0x00000956u, 0x0004003du, 0x00000010u, 0x00000957u, 0x000000cbu, 0x0003003eu, 0x00000675u, 0x00000957u, 0x000200f9u, 0x00000951u, 0x000200f8u, 0x00000951u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000d0u, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000ceu, 0x00030037u, 0x00000007u, 0x000000cfu, 0x000200f8u, 0x000000d1u, 0x0004003bu, 0x00000068u, 0x00000962u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000965u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000971u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000097fu, 0x00000007u, 0x000300f7u, 0x0000095bu, 0x00000000u, 0x000900fbu, 0x0000065cu, 0x0000095bu, 0x00000000u, 0x00000958u, 0x00000001u, 0x00000959u, 0x00000002u, 0x0000095au, 0x000200f8u, 0x00000958u, 0x0003003eu, 0x00000675u, 0x00000613u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x0000095bu, 0x000200f8u, 0x00000959u, 0x0004003du, 0x00000006u, 0x0000095du, 0x000000ceu, 0x000500c7u, 0x00000006u, 0x0000095eu, 0x0000095du, 0x000006c3u, 0x0003003eu, 0x000000ceu, 0x0000095eu, 0x0004003du, 0x00000006u, 0x0000095fu, 0x000000ceu, 0x00040071u, 0x0000000fu, 0x00000960u, 0x0000095fu, 0x00070050u, 0x00000010u, 0x00000961u, 0x00000960u, 0x00000960u, 0x00000960u, 0x00000960u, 0x0003003eu, 0x00000962u, 0x00000961u, 0x00050039u, 0x00000002u, 0x00000963u, 0x000000ccu, 0x00000962u, 0x000200f9u, 0x0000095bu, 0x000200f8u, 0x0000095au, 0x0004003du, 0x00000006u, 0x00000966u, 0x000000ceu, 0x000500c2u, 0x00000006u, 0x00000967u, 0x00000966u, 0x0000025du, 0x000500c7u, 0x00000006u, 0x00000968u, 0x00000967u, 0x0000069eu, 0x0003003eu, 0x00000965u, 0x00000968u, 0x0004003du, 0x00000006u, 0x0000096au, 0x000000ceu, 0x000500c2u, 0x00000006u, 0x0000096bu, 0x0000096au, 0x00000230u, 0x000500c7u, 0x00000006u, 0x0000096cu, 0x0000096bu, 0x0000069eu, 0x0003003eu, 0x00000969u, 0x0000096cu, 0x0004003du, 0x00000006u, 0x0000096eu, 0x000000ceu, 0x000500c4u, 0x00000006u, 0x0000096fu, 0x0000096eu, 0x0000022du, 0x000500c7u, 0x00000006u, 0x00000970u, 0x0000096fu, 0x0000069eu, 0x0003003eu, 0x0000096du, 0x00000970u, 0x0004003du, 0x00000006u, 0x00000972u, 0x000000ceu, 0x000500c7u, 0x00000006u, 0x00000973u, 0x00000972u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000975u, 0x00000973u, 0x00000974u, 0x0003003eu, 0x00000971u, 0x00000975u, 0x00040071u, 0x0000000fu, 0x00000977u, 0x00000968u, 0x00040071u, 0x0000000fu, 0x00000979u, 0x0000096cu, 0x00040071u, 0x0000000fu, 0x0000097bu, 0x00000970u, 0x00040071u, 0x0000000fu, 0x0000097du, 0x00000975u, 0x00070050u, 0x00000010u, 0x0000097eu, 0x00000977u, 0x00000979u, 0x0000097bu, 0x0000097du, 0x0003003eu, 0x0000097fu, 0x0000097eu, 0x00050039u, 0x00000002u, 0x00000980u, 0x000000ccu, 0x0000097fu, 0x000200f9u, 0x0000095bu, 0x000200f8u, 0x0000095bu, 0x000300f7u, 0x00000984u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000983u, 0x00000984u, 0x000200f8u, 0x00000983u, 0x00040039u, 0x00000002u, 0x00000985u, 0x000000a0u, 0x000200f9u, 0x00000984u, 0x000200f8u, 0x00000984u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000d4u, 0x00000000u, 0x000000d2u, 0x00030037u, 0x00000007u, 0x000000d3u, 0x000200f8u, 0x000000d5u, 0x0004003bu, 0x00000007u, 0x0000098bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000098fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000993u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000997u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009b9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009d6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009e3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009f1u, 0x00000007u, 0x000300f7u, 0x0000098au, 0x00000000u, 0x000b00fbu, 0x0000065cu, 0x0000098au, 0x00000004u, 0x00000986u, 0x00000002u, 0x00000987u, 0x00000003u, 0x00000988u, 0x00000001u, 0x00000989u, 0x000200f8u, 0x00000986u, 0x0004003du, 0x00000006u, 0x0000098cu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x0000098du, 0x0000098cu, 0x000006deu, 0x000500c7u, 0x00000006u, 0x0000098eu, 0x0000098du, 0x000006c3u, 0x0003003eu, 0x0000098bu, 0x0000098eu, 0x0004003du, 0x00000006u, 0x00000990u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x00000991u, 0x00000990u, 0x00000330u, 0x000500c7u, 0x00000006u, 0x00000992u, 0x00000991u, 0x000006c3u, 0x0003003eu, 0x0000098fu, 0x00000992u, 0x0004003du, 0x00000006u, 0x00000994u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x00000995u, 0x00000994u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x00000996u, 0x00000995u, 0x000006c3u, 0x0003003eu, 0x00000993u, 0x00000996u, 0x0004003du, 0x00000006u, 0x00000998u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x00000999u, 0x00000998u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x0000099au, 0x00000999u, 0x000006c3u, 0x0003003eu, 0x00000997u, 0x0000099au, 0x00040071u, 0x0000000fu, 0x0000099cu, 0x0000098eu, 0x00040071u, 0x0000000fu, 0x0000099eu, 0x00000992u, 0x00040071u, 0x0000000fu, 0x000009a0u, 0x00000996u, 0x00040071u, 0x0000000fu, 0x000009a2u, 0x0000099au, 0x00070050u, 0x00000010u, 0x000009a3u, 0x0000099cu, 0x0000099eu, 0x000009a0u, 0x000009a2u, 0x0003003eu, 0x000009a4u, 0x000009a3u, 0x00050039u, 0x00000002u, 0x000009a5u, 0x000000ccu, 0x000009a4u, 0x000200f9u, 0x0000098au, 0x000200f8u, 0x00000987u, 0x0004003du, 0x00000006u, 0x000009a7u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000009a8u, 0x000009a7u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x000009a9u, 0x000009a8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000009aau, 0x000009a9u, 0x00000330u, 0x0004003du, 0x00000006u, 0x000009abu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009acu, 0x000009abu, 0x000009aau, 0x0003003eu, 0x000000d3u, 0x000009acu, 0x0004003du, 0x00000006u, 0x000009aeu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009afu, 0x000009aeu, 0x00000314u, 0x000500c7u, 0x00000006u, 0x000009b0u, 0x000009afu, 0x0000069eu, 0x0003003eu, 0x000009adu, 0x000009b0u, 0x0004003du, 0x00000006u, 0x000009b2u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009b3u, 0x000009b2u, 0x00000464u, 0x000500c7u, 0x00000006u, 0x000009b4u, 0x000009b3u, 0x0000069eu, 0x0003003eu, 0x000009b1u, 0x000009b4u, 0x0004003du, 0x00000006u, 0x000009b6u, 0x000000d3u, 0x000500c4u, 0x00000006u, 0x000009b7u, 0x000009b6u, 0x00000386u, 0x000500c7u, 0x00000006u, 0x000009b8u, 0x000009b7u, 0x0000069eu, 0x0003003eu, 0x000009b5u, 0x000009b8u, 0x0004003du, 0x00000006u, 0x000009bau, 0x000000d3u, 0x000500c7u, 0x00000006u, 0x000009bbu, 0x000009bau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000009bcu, 0x000009bbu, 0x00000974u, 0x0003003eu, 0x000009b9u, 0x000009bcu, 0x00040071u, 0x0000000fu, 0x000009beu, 0x000009b0u, 0x00040071u, 0x0000000fu, 0x000009c0u, 0x000009b4u, 0x00040071u, 0x0000000fu, 0x000009c2u, 0x000009b8u, 0x00040071u, 0x0000000fu, 0x000009c4u, 0x000009bcu, 0x00070050u, 0x00000010u, 0x000009c5u, 0x000009beu, 0x000009c0u, 0x000009c2u, 0x000009c4u, 0x0003003eu, 0x000009c6u, 0x000009c5u, 0x00050039u, 0x00000002u, 0x000009c7u, 0x000000ccu, 0x000009c6u, 0x000200f9u, 0x0000098au, 0x000200f8u, 0x00000988u, 0x0004003du, 0x00000006u, 0x000009c9u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000009cau, 0x000009c9u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x000009cbu, 0x000009cau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000009ccu, 0x000009cbu, 0x00000330u, 0x0004003du, 0x00000006u, 0x000009cdu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009ceu, 0x000009cdu, 0x000009ccu, 0x0003003eu, 0x000000d3u, 0x000009ceu, 0x0004003du, 0x00000006u, 0x000009d0u, 0x000000d3u, 0x000500c7u, 0x00000006u, 0x000009d1u, 0x000009d0u, 0x000009cfu, 0x0003003eu, 0x000000d3u, 0x000009d1u, 0x0004003du, 0x00000006u, 0x000009d3u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009d4u, 0x000009d3u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x000009d5u, 0x000009d4u, 0x000006c3u, 0x0003003eu, 0x000009d2u, 0x000009d5u, 0x0004003du, 0x00000006u, 0x000009d7u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009d8u, 0x000009d7u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x000009d9u, 0x000009d8u, 0x000006c3u, 0x0003003eu, 0x000009d6u, 0x000009d9u, 0x00040071u, 0x0000000fu, 0x000009dbu, 0x000009d5u, 0x00040071u, 0x0000000fu, 0x000009e1u, 0x000009d9u, 0x00070050u, 0x00000010u, 0x000009e2u, 0x000009dbu, 0x000009dbu, 0x000009dbu, 0x000009e1u, 0x0003003eu, 0x000009e3u, 0x000009e2u, 0x00050039u, 0x00000002u, 0x000009e4u, 0x000000ccu, 0x000009e3u, 0x000200f9u, 0x0000098au, 0x000200f8u, 0x00000989u, 0x0004003du, 0x00000006u, 0x000009e6u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000009e7u, 0x000009e6u, 0x00000464u, 0x000500c6u, 0x00000006u, 0x000009e8u, 0x000009e7u, 0x00000464u, 0x00050084u, 0x00000006u, 0x000009e9u, 0x000009e8u, 0x00000314u, 0x0004003du, 0x00000006u, 0x000009eau, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009ebu, 0x000009eau, 0x000009e9u, 0x0003003eu, 0x000000d3u, 0x000009ebu, 0x0004003du, 0x00000006u, 0x000009ecu, 0x000000d3u, 0x000500c7u, 0x00000006u, 0x000009edu, 0x000009ecu, 0x000006c3u, 0x0003003eu, 0x000000d3u, 0x000009edu, 0x0004003du, 0x00000006u, 0x000009eeu, 0x000000d3u, 0x00040071u, 0x0000000fu, 0x000009efu, 0x000009eeu, 0x00070050u, 0x00000010u, 0x000009f0u, 0x000009efu, 0x000009efu, 0x000009efu, 0x000009efu, 0x0003003eu, 0x000009f1u, 0x000009f0u, 0x00050039u, 0x00000002u, 0x000009f2u, 0x000000ccu, 0x000009f1u, 0x000200f9u, 0x0000098au, 0x000200f8u, 0x0000098au, 0x000300f7u, 0x000009f6u, 0x00000000u, 0x000400fau, 0x00000852u, 0x000009f5u, 0x000009f6u, 0x000200f8u, 0x000009f5u, 0x00040039u, 0x00000002u, 0x000009f7u, 0x000000a0u, 0x000200f9u, 0x000009f6u, 0x000200f8u, 0x000009f6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000ddu, 0x00000000u, 0x000000d8u, 0x00030037u, 0x00000046u, 0x000000d9u, 0x00030037u, 0x00000046u, 0x000000dau, 0x00030037u, 0x00000007u, 0x000000dbu, 0x00030037u, 0x000000d7u, 0x000000dcu, 0x000200f8u, 0x000000deu, 0x0004003bu, 0x0000007bu, 0x00007d8cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d8bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d8au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d89u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d88u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d82u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d80u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d7fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d7eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d79u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007d78u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d77u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d76u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000009f8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000009fcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a01u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000a06u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000a09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a1fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a24u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a29u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a2eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a33u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a39u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a3fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a45u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000a4bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a4cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000a4fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a53u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a63u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a64u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000a65u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a66u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a68u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a69u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00000a6au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000a6cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a6eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a70u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a71u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a73u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a74u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a76u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a78u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a79u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000a7au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000a94u, 0x00000007u, 0x0004003bu, 0x00000067u, 0x00000a9au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000a9cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a9eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000aa0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000aa2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000aa4u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000aa6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000aa8u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00000aafu, 0x00000007u, 0x0004003bu, 0x00000067u, 0x00000ab0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000ab2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ab4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ab6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ab8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000abau, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000abcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000abeu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000ac6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ac7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000acau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ad2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ad4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ad5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ad7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000ae2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ae7u, 0x00000007u, 0x00050041u, 0x00000046u, 0x000009f9u, 0x000000dcu, 0x0000022au, 0x0004003du, 0x00000008u, 0x000009fau, 0x000009f9u, 0x000500c3u, 0x00000008u, 0x000009fbu, 0x000009fau, 0x00000260u, 0x0003003eu, 0x000009f8u, 0x000009fbu, 0x0004003du, 0x00000008u, 0x000009feu, 0x000009f9u, 0x000500c7u, 0x00000008u, 0x00000a00u, 0x000009feu, 0x000009ffu, 0x0003003eu, 0x000009fcu, 0x00000a00u, 0x00050041u, 0x0000007bu, 0x00000a02u, 0x000000dcu, 0x0000022du, 0x0004003du, 0x0000000fu, 0x00000a03u, 0x00000a02u, 0x00040071u, 0x00000006u, 0x00000a04u, 0x00000a03u, 0x0004007cu, 0x00000008u, 0x00000a05u, 0x00000a04u, 0x0003003eu, 0x00000a01u, 0x00000a05u, 0x00050041u, 0x00000068u, 0x00000a07u, 0x000000dcu, 0x00000220u, 0x0004003du, 0x00000010u, 0x00000a08u, 0x00000a07u, 0x0003003eu, 0x00000a06u, 0x00000a08u, 0x00050041u, 0x0000007bu, 0x00000a0au, 0x000000dcu, 0x00000230u, 0x0004003du, 0x0000000fu, 0x00000a0bu, 0x00000a0au, 0x0003003eu, 0x00000a09u, 0x00000a0bu, 0x0004003du, 0x00000006u, 0x00000a13u, 0x000000dbu, 0x00080041u, 0x00000671u, 0x00000a14u, 0x00000a12u, 0x00000220u, 0x00000a13u, 0x00000220u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000a15u, 0x00000a14u, 0x00040071u, 0x00000006u, 0x00000a16u, 0x00000a15u, 0x0003003eu, 0x00000a0cu, 0x00000a16u, 0x0004003du, 0x00000006u, 0x00000a19u, 0x000000dbu, 0x0003003eu, 0x00000a18u, 0x00000a19u, 0x00050039u, 0x00000014u, 0x00000a1au, 0x00000017u, 0x00000a18u, 0x00050051u, 0x00000010u, 0x00007d7au, 0x00000a1au, 0x00000008u, 0x0003003eu, 0x00007d76u, 0x00007d7au, 0x00050051u, 0x00000010u, 0x00007d7bu, 0x00000a1au, 0x00000009u, 0x0003003eu, 0x00007d77u, 0x00007d7bu, 0x00050051u, 0x00000011u, 0x00007d7cu, 0x00000a1au, 0x0000000bu, 0x0003003eu, 0x00007d78u, 0x00007d7cu, 0x00050051u, 0x0000000fu, 0x00007d7du, 0x00000a1au, 0x0000000cu, 0x0003003eu, 0x00007d79u, 0x00007d7du, 0x0003003eu, 0x00000a1cu, 0x00000a16u, 0x00050039u, 0x0000001eu, 0x00000a1eu, 0x00000021u, 0x00000a1cu, 0x00050051u, 0x00000010u, 0x00007d83u, 0x00000a1eu, 0x00000000u, 0x0003003eu, 0x00007d7eu, 0x00007d83u, 0x00050051u, 0x00000010u, 0x00007d84u, 0x00000a1eu, 0x00000001u, 0x0003003eu, 0x00007d7fu, 0x00007d84u, 0x00050051u, 0x00000006u, 0x00007d85u, 0x00000a1eu, 0x00000002u, 0x0003003eu, 0x00007d80u, 0x00007d85u, 0x00050051u, 0x0000000fu, 0x00007d86u, 0x00000a1eu, 0x00000003u, 0x0003003eu, 0x00007d81u, 0x00007d86u, 0x00050051u, 0x0000000fu, 0x00007d87u, 0x00000a1eu, 0x00000004u, 0x0003003eu, 0x00007d82u, 0x00007d87u, 0x000500c7u, 0x00000006u, 0x00000a22u, 0x00007d85u, 0x00000314u, 0x000500abu, 0x00000069u, 0x00000a23u, 0x00000a22u, 0x0000032du, 0x0003003eu, 0x00000a1fu, 0x00000a23u, 0x000500c7u, 0x00000006u, 0x00000a27u, 0x00007d85u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00000a28u, 0x00000a27u, 0x0000032du, 0x0003003eu, 0x00000a24u, 0x00000a28u, 0x000500c7u, 0x00000006u, 0x00000a2cu, 0x00007d85u, 0x00000386u, 0x000500abu, 0x00000069u, 0x00000a2du, 0x00000a2cu, 0x0000032du, 0x0003003eu, 0x00000a29u, 0x00000a2du, 0x000500c7u, 0x00000006u, 0x00000a31u, 0x00007d85u, 0x00000330u, 0x000500abu, 0x00000069u, 0x00000a32u, 0x00000a31u, 0x0000032du, 0x0003003eu, 0x00000a2eu, 0x00000a32u, 0x000500c7u, 0x00000006u, 0x00000a37u, 0x00007d85u, 0x00000a36u, 0x000500abu, 0x00000069u, 0x00000a38u, 0x00000a37u, 0x0000032du, 0x0003003eu, 0x00000a33u, 0x00000a38u, 0x000500c7u, 0x00000006u, 0x00000a3du, 0x00007d85u, 0x00000a3cu, 0x000500abu, 0x00000069u, 0x00000a3eu, 0x00000a3du, 0x0000032du, 0x0003003eu, 0x00000a39u, 0x00000a3eu, 0x000500c7u, 0x00000006u, 0x00000a43u, 0x00007d85u, 0x00000a42u, 0x000500abu, 0x00000069u, 0x00000a44u, 0x00000a43u, 0x0000032du, 0x0003003eu, 0x00000a3fu, 0x00000a44u, 0x000500c7u, 0x00000006u, 0x00000a49u, 0x00007d85u, 0x00000a48u, 0x000500abu, 0x00000069u, 0x00000a4au, 0x00000a49u, 0x0000032du, 0x0003003eu, 0x00000a45u, 0x00000a4au, 0x0003003eu, 0x00000a4cu, 0x00000a32u, 0x00050039u, 0x00000010u, 0x00000a4eu, 0x000000c8u, 0x00000a4cu, 0x0003003eu, 0x00000a4bu, 0x00000a4eu, 0x00050041u, 0x0000007bu, 0x00000a50u, 0x00000a4bu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000a51u, 0x00000a50u, 0x000500c2u, 0x0000000fu, 0x00000a52u, 0x00000a51u, 0x0000038eu, 0x0003003eu, 0x00000a4fu, 0x00000a52u, 0x00040071u, 0x00000006u, 0x00000a56u, 0x00007d7cu, 0x0004007cu, 0x00000008u, 0x00000a57u, 0x00000a56u, 0x00040071u, 0x00000006u, 0x00000a5au, 0x00007d7du, 0x0004007cu, 0x00000008u, 0x00000a5bu, 0x00000a5au, 0x00040071u, 0x00000006u, 0x00000a5du, 0x00000a52u, 0x0004007cu, 0x00000008u, 0x00000a5eu, 0x00000a5du, 0x00040071u, 0x00000006u, 0x00000a61u, 0x00007d87u, 0x0004007cu, 0x00000008u, 0x00000a62u, 0x00000a61u, 0x0003003eu, 0x00000a66u, 0x000009fbu, 0x0003003eu, 0x00000a68u, 0x00000a57u, 0x0003003eu, 0x00000a69u, 0x00000a5bu, 0x0004003du, 0x00000011u, 0x00000a6bu, 0x00000708u, 0x0003003eu, 0x00000a6au, 0x00000a6bu, 0x0004003du, 0x0000000fu, 0x00000a6du, 0x000006eau, 0x0003003eu, 0x00000a6cu, 0x00000a6du, 0x0003003eu, 0x00000a6eu, 0x00000a05u, 0x0003003eu, 0x00000a70u, 0x00000a5eu, 0x0003003eu, 0x00000a71u, 0x00000a28u, 0x0003003eu, 0x00000a73u, 0x00000a62u, 0x0003003eu, 0x00000a74u, 0x00000a23u, 0x0003003eu, 0x00000a76u, 0x00000a44u, 0x00120039u, 0x00000069u, 0x00000a7bu, 0x0000008bu, 0x00000a66u, 0x00000a68u, 0x00000a69u, 0x00000a6au, 0x00000a6cu, 0x00000a6eu, 0x00000a70u, 0x00000a71u, 0x00000a73u, 0x00000a74u, 0x00000a76u, 0x00000a78u, 0x00000a79u, 0x00000a7au, 0x0004003du, 0x00000008u, 0x00000a7cu, 0x00000a6eu, 0x0003003eu, 0x00000a01u, 0x00000a7cu, 0x0004003du, 0x00000069u, 0x00000a7du, 0x00000a78u, 0x0003003eu, 0x00000a63u, 0x00000a7du, 0x0004003du, 0x00000069u, 0x00000a7eu, 0x00000a79u, 0x0003003eu, 0x00000a64u, 0x00000a7eu, 0x0004003du, 0x0000006bu, 0x00000a7fu, 0x00000a7au, 0x0003003eu, 0x00000a65u, 0x00000a7fu, 0x0003003eu, 0x00000a53u, 0x00000a7bu, 0x000300f7u, 0x00000a82u, 0x00000000u, 0x000400fau, 0x00000a7bu, 0x00000a81u, 0x00000a82u, 0x000200f8u, 0x00000a81u, 0x000400a8u, 0x00000069u, 0x00000a84u, 0x00000a44u, 0x000500abu, 0x00000069u, 0x00000a86u, 0x00000a7cu, 0x00000220u, 0x000500a6u, 0x00000069u, 0x00000a87u, 0x00000a84u, 0x00000a86u, 0x000200f9u, 0x00000a82u, 0x000200f8u, 0x00000a82u, 0x000700f5u, 0x00000069u, 0x00000a88u, 0x00000a7bu, 0x000000deu, 0x00000a87u, 0x00000a81u, 0x000300f7u, 0x00000a8au, 0x00000000u, 0x000400fau, 0x00000a88u, 0x00000a89u, 0x00000a8au, 0x000200f8u, 0x00000a89u, 0x0004003du, 0x00000010u, 0x00000a8du, 0x00000a4bu, 0x00080050u, 0x00000066u, 0x00000a93u, 0x00000a08u, 0x00000a8du, 0x00007d7au, 0x00007d7bu, 0x00000a0bu, 0x0003003eu, 0x00007d88u, 0x00000a08u, 0x0003003eu, 0x00007d89u, 0x00000a8du, 0x0003003eu, 0x00007d8au, 0x00007d7au, 0x0003003eu, 0x00007d8bu, 0x00007d7bu, 0x0003003eu, 0x00007d8cu, 0x00000a0bu, 0x0003003eu, 0x00000a94u, 0x00007d83u, 0x000300f7u, 0x00000a99u, 0x00000000u, 0x000400fau, 0x00000a3eu, 0x00000a98u, 0x00000a99u, 0x000200f8u, 0x00000a98u, 0x0003003eu, 0x00000a9au, 0x00000a93u, 0x0003003eu, 0x00000a9cu, 0x00007d83u, 0x0003003eu, 0x00000a9eu, 0x00000a23u, 0x0003003eu, 0x00000aa0u, 0x00000a7du, 0x0003003eu, 0x00000aa2u, 0x00000a38u, 0x0003003eu, 0x00000aa4u, 0x00000a7eu, 0x0003003eu, 0x00000aa6u, 0x00000a7fu, 0x0003003eu, 0x00000aa8u, 0x00000536u, 0x000c0039u, 0x00000047u, 0x00000aa9u, 0x00000076u, 0x00000a9au, 0x00000a9cu, 0x00000a9eu, 0x00000aa0u, 0x00000aa2u, 0x00000aa4u, 0x00000aa6u, 0x00000aa8u, 0x0009004fu, 0x00000010u, 0x00000aacu, 0x00000a08u, 0x00000aa9u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00007d88u, 0x00000aacu, 0x0003003eu, 0x00000a94u, 0x00007d84u, 0x000200f9u, 0x00000a99u, 0x000200f8u, 0x00000a99u, 0x000700f5u, 0x00000010u, 0x0000eef1u, 0x00000a08u, 0x00000a89u, 0x00000aacu, 0x00000a98u, 0x00070050u, 0x000005fbu, 0x0000f3aeu, 0x00000a3eu, 0x00000a3eu, 0x00000a3eu, 0x00000a3eu, 0x000600a9u, 0x00000010u, 0x0000f3afu, 0x0000f3aeu, 0x00007d84u, 0x00007d83u, 0x00080050u, 0x00000066u, 0x00007d9du, 0x0000eef1u, 0x00000a8du, 0x00007d7au, 0x00007d7bu, 0x00000a0bu, 0x0003003eu, 0x00000ab0u, 0x00007d9du, 0x0003003eu, 0x00000ab2u, 0x0000f3afu, 0x0003003eu, 0x00000ab4u, 0x00000a23u, 0x0003003eu, 0x00000ab6u, 0x00000a7du, 0x0003003eu, 0x00000ab8u, 0x00000a38u, 0x0003003eu, 0x00000abau, 0x00000a7eu, 0x0003003eu, 0x00000abcu, 0x00000a7fu, 0x0003003eu, 0x00000abeu, 0x00000559u, 0x000c0039u, 0x00000047u, 0x00000abfu, 0x00000076u, 0x00000ab0u, 0x00000ab2u, 0x00000ab4u, 0x00000ab6u, 0x00000ab8u, 0x00000abau, 0x00000abcu, 0x00000abeu, 0x0003003eu, 0x00000aafu, 0x00000abfu, 0x000300f7u, 0x00000ac2u, 0x00000000u, 0x000400fau, 0x00000a4au, 0x00000ac1u, 0x00000ac2u, 0x000200f8u, 0x00000ac1u, 0x00040071u, 0x0000030cu, 0x00000ac4u, 0x00000abfu, 0x0004007cu, 0x00000044u, 0x00000ac5u, 0x00000ac4u, 0x0003003eu, 0x00000ac6u, 0x00000ac5u, 0x0003003eu, 0x00000ac7u, 0x00000a00u, 0x00060039u, 0x00000047u, 0x00000ac9u, 0x0000004bu, 0x00000ac6u, 0x00000ac7u, 0x0003003eu, 0x00000aafu, 0x00000ac9u, 0x000200f9u, 0x00000ac2u, 0x000200f8u, 0x00000ac2u, 0x000700f5u, 0x00000047u, 0x0000ef06u, 0x00000abfu, 0x00000a99u, 0x00000ac9u, 0x00000ac1u, 0x00040071u, 0x00000006u, 0x00000ad0u, 0x00007d86u, 0x0004007cu, 0x00000008u, 0x00000ad1u, 0x00000ad0u, 0x0003003eu, 0x00000ad2u, 0x00000a7cu, 0x0003003eu, 0x00000ad4u, 0x00000a5eu, 0x0003003eu, 0x00000ad5u, 0x00000a7du, 0x0003003eu, 0x00000ad7u, 0x00000ad1u, 0x00080039u, 0x00000008u, 0x00000ad8u, 0x00000099u, 0x00000ad2u, 0x00000ad4u, 0x00000ad5u, 0x00000ad7u, 0x0003003eu, 0x00000acau, 0x00000ad8u, 0x000500c4u, 0x00000008u, 0x00000adbu, 0x00000ad8u, 0x00000236u, 0x00040072u, 0x0000037bu, 0x00000adcu, 0x00000adbu, 0x0004007cu, 0x0000000fu, 0x00000addu, 0x00000adcu, 0x00050051u, 0x0000000fu, 0x00000adeu, 0x0000ef06u, 0x00000000u, 0x00050051u, 0x0000000fu, 0x00000adfu, 0x0000ef06u, 0x00000001u, 0x00050051u, 0x0000000fu, 0x00000ae0u, 0x0000ef06u, 0x00000002u, 0x00070050u, 0x00000010u, 0x00000ae1u, 0x00000adeu, 0x00000adfu, 0x00000ae0u, 0x00000addu, 0x0003003eu, 0x00000ae2u, 0x00000ae1u, 0x00050039u, 0x00000002u, 0x00000ae3u, 0x000000ccu, 0x00000ae2u, 0x000300f7u, 0x00000ae6u, 0x00000000u, 0x000400fau, 0x00000a2du, 0x00000ae5u, 0x00000aefu, 0x000200f8u, 0x00000ae5u, 0x0003003eu, 0x00000ae7u, 0x000009fbu, 0x00050039u, 0x00000011u, 0x00000ae9u, 0x0000005du, 0x00000ae7u, 0x0003003eu, 0x00000708u, 0x00000ae9u, 0x0003003eu, 0x000006eau, 0x00007d7du, 0x0003003eu, 0x00000856u, 0x00000559u, 0x000300f7u, 0x00000aedu, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000aecu, 0x00000aedu, 0x000200f8u, 0x00000aecu, 0x00040039u, 0x00000002u, 0x00000aeeu, 0x000000a2u, 0x000200f9u, 0x00000aedu, 0x000200f8u, 0x00000aedu, 0x000200f9u, 0x00000ae6u, 0x000200f8u, 0x00000aefu, 0x000300f7u, 0x00000af1u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000af0u, 0x00000af1u, 0x000200f8u, 0x00000af0u, 0x00040039u, 0x00000002u, 0x00000af2u, 0x000000a0u, 0x000200f9u, 0x00000af1u, 0x000200f8u, 0x00000af1u, 0x000200f9u, 0x00000ae6u, 0x000200f8u, 0x00000ae6u, 0x000200f9u, 0x00000a8au, 0x000200f8u, 0x00000a8au, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000e2u, 0x00000000u, 0x000000e0u, 0x00030037u, 0x000000dfu, 0x000000e1u, 0x000200f8u, 0x000000e3u, 0x0004003du, 0x00000009u, 0x00000af4u, 0x000000e1u, 0x00050082u, 0x00000009u, 0x00000af6u, 0x00000af4u, 0x0000f375u, 0x0003003eu, 0x000000e1u, 0x00000af6u, 0x0004003du, 0x00000009u, 0x00000af7u, 0x000000e1u, 0x000600cau, 0x00000009u, 0x00000af8u, 0x00000af7u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000000e1u, 0x00000af8u, 0x0004003du, 0x00000009u, 0x00000af9u, 0x000000e1u, 0x00050080u, 0x00000009u, 0x00000afbu, 0x00000af9u, 0x0000f375u, 0x0003003eu, 0x000000e1u, 0x00000afbu, 0x0004003du, 0x00000009u, 0x00000afcu, 0x000000e1u, 0x0008000cu, 0x00000009u, 0x00000affu, 0x00000001u, 0x0000002du, 0x00000afcu, 0x00000afdu, 0x00000afeu, 0x00040072u, 0x00000013u, 0x00000b00u, 0x00000affu, 0x000200feu, 0x00000b00u, 0x00010038u, 0x00050036u, 0x00000010u, 0x000000e7u, 0x00000000u, 0x000000e5u, 0x00030037u, 0x000000e4u, 0x000000e6u, 0x000200f8u, 0x000000e8u, 0x0004003bu, 0x000000dfu, 0x00000b05u, 0x00000007u, 0x0004003du, 0x00000013u, 0x00000b03u, 0x000000e6u, 0x00040072u, 0x00000009u, 0x00000b04u, 0x00000b03u, 0x0003003eu, 0x00000b05u, 0x00000b04u, 0x00050039u, 0x00000013u, 0x00000b06u, 0x000000e2u, 0x00000b05u, 0x00040072u, 0x00000b07u, 0x00000b08u, 0x00000b06u, 0x0004007cu, 0x00000010u, 0x00000b09u, 0x00000b08u, 0x000200feu, 0x00000b09u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000eau, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x000000e9u, 0x000200f8u, 0x000000ebu, 0x0004003du, 0x00000008u, 0x00000b0cu, 0x000000e9u, 0x00050082u, 0x00000008u, 0x00000b0du, 0x00000b0cu, 0x00000af3u, 0x000600cau, 0x00000008u, 0x00000b0eu, 0x00000b0du, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000008u, 0x00000b0fu, 0x00000b0eu, 0x00000af3u, 0x0008000cu, 0x00000008u, 0x00000b10u, 0x00000001u, 0x0000002du, 0x00000b0fu, 0x00000220u, 0x0000035eu, 0x000200feu, 0x00000b10u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000edu, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x000000ecu, 0x000200f8u, 0x000000eeu, 0x0004003du, 0x00000008u, 0x00000b14u, 0x000000ecu, 0x00050082u, 0x00000008u, 0x00000b15u, 0x00000b14u, 0x00000b13u, 0x0003003eu, 0x000000ecu, 0x00000b15u, 0x0004003du, 0x00000008u, 0x00000b16u, 0x000000ecu, 0x000500c4u, 0x00000008u, 0x00000b17u, 0x00000b16u, 0x0000026cu, 0x0003003eu, 0x000000ecu, 0x00000b17u, 0x0004003du, 0x00000008u, 0x00000b18u, 0x000000ecu, 0x000500c3u, 0x00000008u, 0x00000b19u, 0x00000b18u, 0x0000026cu, 0x0003003eu, 0x000000ecu, 0x00000b19u, 0x0004003du, 0x00000008u, 0x00000b1au, 0x000000ecu, 0x00050080u, 0x00000008u, 0x00000b1bu, 0x00000b1au, 0x00000b13u, 0x0003003eu, 0x000000ecu, 0x00000b1bu, 0x0004003du, 0x00000008u, 0x00000b1cu, 0x000000ecu, 0x0008000cu, 0x00000008u, 0x00000b1du, 0x00000001u, 0x0000002du, 0x00000b1cu, 0x00000220u, 0x000003edu, 0x000200feu, 0x00000b1du, 0x00010038u, 0x00050036u, 0x000000efu, 0x000000f2u, 0x00000000u, 0x000000f0u, 0x00030037u, 0x00000046u, 0x000000f1u, 0x000200f8u, 0x000000f3u, 0x0004003bu, 0x00000046u, 0x00000b20u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b25u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b2bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000b2eu, 0x00000007u, 0x0004003bu, 0x00000bf0u, 0x00000bf1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000bf5u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000b21u, 0x000000f1u, 0x0006000cu, 0x00000008u, 0x00000b22u, 0x00000001u, 0x0000004au, 0x00000b21u, 0x00050082u, 0x00000008u, 0x00000b23u, 0x0000026fu, 0x00000b22u, 0x0007000cu, 0x00000008u, 0x00000b24u, 0x00000001u, 0x00000027u, 0x00000b23u, 0x0000026fu, 0x0003003eu, 0x00000b20u, 0x00000b24u, 0x0004003du, 0x00000008u, 0x00000b26u, 0x000000f1u, 0x000500c4u, 0x00000008u, 0x00000b28u, 0x00000b26u, 0x00000b24u, 0x000500c7u, 0x00000008u, 0x00000b2au, 0x00000b28u, 0x00000b29u, 0x0003003eu, 0x00000b25u, 0x00000b2au, 0x000500c7u, 0x00000008u, 0x00000b2du, 0x00000b2au, 0x0000035eu, 0x0003003eu, 0x00000b2bu, 0x00000b2du, 0x000500c3u, 0x00000008u, 0x00000befu, 0x00000b2au, 0x0000025du, 0x0003003eu, 0x00000bf1u, 0x00000bedu, 0x00050041u, 0x000001afu, 0x00000bf2u, 0x00000bf1u, 0x00000befu, 0x0004003du, 0x000001aeu, 0x00000bf3u, 0x00000bf2u, 0x00040072u, 0x000000efu, 0x00000bf4u, 0x00000bf3u, 0x0003003eu, 0x00000b2eu, 0x00000bf4u, 0x00050041u, 0x00000046u, 0x00000bf6u, 0x00000b2eu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000bf7u, 0x00000bf6u, 0x00050084u, 0x00000008u, 0x00000bf9u, 0x00000bf7u, 0x00000b2du, 0x000500c3u, 0x00000008u, 0x00000bfau, 0x00000bf9u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00000bfbu, 0x00000b2eu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000bfcu, 0x00000bfbu, 0x00050080u, 0x00000008u, 0x00000bfdu, 0x00000bfau, 0x00000bfcu, 0x0003003eu, 0x00000bf5u, 0x00000bfdu, 0x00050050u, 0x000000efu, 0x00000c00u, 0x00000bfdu, 0x00000b24u, 0x000200feu, 0x00000c00u, 0x00010038u, 0x00050036u, 0x000000efu, 0x000000f6u, 0x00000000u, 0x000000f4u, 0x00030037u, 0x00000045u, 0x000000f5u, 0x000200f8u, 0x000000f7u, 0x0004003du, 0x00000044u, 0x00000c03u, 0x000000f5u, 0x0007004fu, 0x000000efu, 0x00000c04u, 0x00000c03u, 0x00000c03u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000c04u, 0x00010038u, 0x00050036u, 0x000000efu, 0x000000fbu, 0x00000000u, 0x000000f8u, 0x00030037u, 0x00000045u, 0x000000f9u, 0x00030037u, 0x0000006au, 0x000000fau, 0x000200f8u, 0x000000fcu, 0x0004003bu, 0x00000046u, 0x00000c07u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000c0au, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c10u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c11u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c14u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c17u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c1eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c25u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c2eu, 0x00000007u, 0x00050041u, 0x00000046u, 0x00000c08u, 0x000000f9u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000c09u, 0x00000c08u, 0x0003003eu, 0x00000c07u, 0x00000c09u, 0x000500b3u, 0x00000069u, 0x00000c0cu, 0x00000c09u, 0x00000220u, 0x0003003eu, 0x00000c0au, 0x00000c0cu, 0x000500c7u, 0x00000008u, 0x00000c0fu, 0x00000c09u, 0x00000c0du, 0x0003003eu, 0x00000c07u, 0x00000c0fu, 0x0003003eu, 0x00000c11u, 0x00000c0fu, 0x00050039u, 0x000000efu, 0x00000c13u, 0x000000f2u, 0x00000c11u, 0x0003003eu, 0x00000c10u, 0x00000c13u, 0x00050041u, 0x00000046u, 0x00000c15u, 0x00000c10u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c16u, 0x00000c15u, 0x0003003eu, 0x00000c14u, 0x00000c16u, 0x0004003du, 0x00000044u, 0x00000c18u, 0x000000f9u, 0x0007004fu, 0x000000efu, 0x00000c19u, 0x00000c18u, 0x00000c18u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00000c1au, 0x00000c10u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c1bu, 0x00000c1au, 0x00050050u, 0x000000efu, 0x00000c1cu, 0x00000c1bu, 0x00000c1bu, 0x00050084u, 0x000000efu, 0x00000c1du, 0x00000c19u, 0x00000c1cu, 0x0003003eu, 0x00000c17u, 0x00000c1du, 0x000500c3u, 0x00000008u, 0x00000c22u, 0x00000c20u, 0x00000c16u, 0x0004007eu, 0x00000008u, 0x00000c23u, 0x00000c22u, 0x000500c7u, 0x00000008u, 0x00000c24u, 0x00000c1fu, 0x00000c23u, 0x0003003eu, 0x00000c1eu, 0x00000c24u, 0x0004003du, 0x000000efu, 0x00000c26u, 0x00000c17u, 0x00050050u, 0x000000efu, 0x00000c28u, 0x00000c24u, 0x00000c24u, 0x000500c7u, 0x000000efu, 0x00000c29u, 0x00000c26u, 0x00000c28u, 0x0003003eu, 0x00000c25u, 0x00000c29u, 0x000500abu, 0x00000069u, 0x00000c2bu, 0x00000c16u, 0x0000026fu, 0x000300f7u, 0x00000c2du, 0x00000000u, 0x000400fau, 0x00000c2bu, 0x00000c2cu, 0x00000c34u, 0x000200f8u, 0x00000c2cu, 0x0004003du, 0x000000efu, 0x00000c2fu, 0x00000c17u, 0x00050082u, 0x00000008u, 0x00000c31u, 0x0000026cu, 0x00000c16u, 0x00050050u, 0x000000efu, 0x00000c32u, 0x00000c31u, 0x00000c31u, 0x000500c3u, 0x000000efu, 0x00000c33u, 0x00000c2fu, 0x00000c32u, 0x0003003eu, 0x00000c17u, 0x00000c33u, 0x0003003eu, 0x00000c2eu, 0x00000c33u, 0x000200f9u, 0x00000c2du, 0x000200f8u, 0x00000c34u, 0x0004003du, 0x000000efu, 0x00000c35u, 0x00000c17u, 0x000500c4u, 0x000000efu, 0x00000c37u, 0x00000c35u, 0x0000f376u, 0x0003003eu, 0x00000c2eu, 0x00000c37u, 0x000200f9u, 0x00000c2du, 0x000200f8u, 0x00000c2du, 0x0004003du, 0x000000efu, 0x00000c38u, 0x00000c25u, 0x000500abu, 0x0000087bu, 0x00000c3au, 0x00000c38u, 0x00000c39u, 0x0004009au, 0x00000069u, 0x00000c3bu, 0x00000c3au, 0x000300f7u, 0x00000c3du, 0x00000000u, 0x000400fau, 0x00000c3bu, 0x00000c3cu, 0x00000c3du, 0x000200f8u, 0x00000c3cu, 0x00050041u, 0x00000046u, 0x00000c3eu, 0x00000c25u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c3fu, 0x00000c3eu, 0x000500abu, 0x00000069u, 0x00000c41u, 0x00000c3fu, 0x00000c24u, 0x000300f7u, 0x00000c43u, 0x00000000u, 0x000400fau, 0x00000c41u, 0x00000c42u, 0x00000c43u, 0x000200f8u, 0x00000c42u, 0x0004003du, 0x00000008u, 0x00000c45u, 0x00000c3eu, 0x000500abu, 0x00000069u, 0x00000c46u, 0x00000c45u, 0x00000220u, 0x000200f9u, 0x00000c43u, 0x000200f8u, 0x00000c43u, 0x000700f5u, 0x00000069u, 0x00000c47u, 0x00000c41u, 0x00000c3cu, 0x00000c46u, 0x00000c42u, 0x000300f7u, 0x00000c49u, 0x00000000u, 0x000400fau, 0x00000c47u, 0x00000c48u, 0x00000c49u, 0x000200f8u, 0x00000c48u, 0x00050041u, 0x00000046u, 0x00000c4au, 0x00000c17u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c4bu, 0x00000c4au, 0x000500c7u, 0x00000008u, 0x00000c4cu, 0x00000c4bu, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00000c4du, 0x00000c4cu, 0x00000220u, 0x000300f7u, 0x00000c4fu, 0x00000000u, 0x000400fau, 0x00000c4du, 0x00000c4eu, 0x00000c51u, 0x000200f8u, 0x00000c4eu, 0x00050041u, 0x00000046u, 0x00000c50u, 0x00000c2eu, 0x0000032du, 0x0003003eu, 0x00000c50u, 0x00000c0du, 0x000200f9u, 0x00000c4fu, 0x000200f8u, 0x00000c51u, 0x00050041u, 0x00000046u, 0x00000c53u, 0x00000c2eu, 0x0000032du, 0x0003003eu, 0x00000c53u, 0x00000c52u, 0x000200f9u, 0x00000c4fu, 0x000200f8u, 0x00000c4fu, 0x0003003eu, 0x000000fau, 0x00000559u, 0x000200f9u, 0x00000c49u, 0x000200f8u, 0x00000c49u, 0x00050041u, 0x00000046u, 0x00000c54u, 0x00000c25u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c55u, 0x00000c54u, 0x000500abu, 0x00000069u, 0x00000c57u, 0x00000c55u, 0x00000c24u, 0x000300f7u, 0x00000c59u, 0x00000000u, 0x000400fau, 0x00000c57u, 0x00000c58u, 0x00000c59u, 0x000200f8u, 0x00000c58u, 0x0004003du, 0x00000008u, 0x00000c5bu, 0x00000c54u, 0x000500abu, 0x00000069u, 0x00000c5cu, 0x00000c5bu, 0x00000220u, 0x000200f9u, 0x00000c59u, 0x000200f8u, 0x00000c59u, 0x000700f5u, 0x00000069u, 0x00000c5du, 0x00000c57u, 0x00000c49u, 0x00000c5cu, 0x00000c58u, 0x000300f7u, 0x00000c5fu, 0x00000000u, 0x000400fau, 0x00000c5du, 0x00000c5eu, 0x00000c5fu, 0x000200f8u, 0x00000c5eu, 0x00050041u, 0x00000046u, 0x00000c60u, 0x00000c17u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c61u, 0x00000c60u, 0x000500c7u, 0x00000008u, 0x00000c62u, 0x00000c61u, 0x00000c20u, 0x000500aau, 0x00000069u, 0x00000c63u, 0x00000c62u, 0x00000220u, 0x000300f7u, 0x00000c65u, 0x00000000u, 0x000400fau, 0x00000c63u, 0x00000c64u, 0x00000c67u, 0x000200f8u, 0x00000c64u, 0x00050041u, 0x00000046u, 0x00000c66u, 0x00000c2eu, 0x0000045cu, 0x0003003eu, 0x00000c66u, 0x00000c0du, 0x000200f9u, 0x00000c65u, 0x000200f8u, 0x00000c67u, 0x00050041u, 0x00000046u, 0x00000c68u, 0x00000c2eu, 0x0000045cu, 0x0003003eu, 0x00000c68u, 0x00000c52u, 0x000200f9u, 0x00000c65u, 0x000200f8u, 0x00000c65u, 0x0003003eu, 0x000000fau, 0x00000559u, 0x000200f9u, 0x00000c5fu, 0x000200f8u, 0x00000c5fu, 0x000200f9u, 0x00000c3du, 0x000200f8u, 0x00000c3du, 0x000300f7u, 0x00000c6bu, 0x00000000u, 0x000400fau, 0x00000c0cu, 0x00000c6au, 0x00000c6bu, 0x000200f8u, 0x00000c6au, 0x0003003eu, 0x00000c2eu, 0x00000c6cu, 0x0003003eu, 0x000000fau, 0x00000559u, 0x000200f9u, 0x00000c6bu, 0x000200f8u, 0x00000c6bu, 0x0004003du, 0x000000efu, 0x00000c6du, 0x00000c2eu, 0x0008000cu, 0x000000efu, 0x00000c71u, 0x00000001u, 0x0000002du, 0x00000c6du, 0x00000c6fu, 0x00000c70u, 0x000200feu, 0x00000c71u, 0x00010038u, 0x00050036u, 0x00000010u, 0x00000103u, 0x00000000u, 0x000000fdu, 0x00030037u, 0x000000dfu, 0x000000feu, 0x00030037u, 0x000000dfu, 0x000000ffu, 0x00030037u, 0x000000dfu, 0x00000100u, 0x00030037u, 0x00000046u, 0x00000101u, 0x00030037u, 0x00000046u, 0x00000102u, 0x000200f8u, 0x00000104u, 0x0004003bu, 0x000000e4u, 0x00000c7fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c84u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00000c87u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00000c8bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000caeu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000c74u, 0x000000ffu, 0x000500c7u, 0x00000009u, 0x00000c77u, 0x00000c74u, 0x0000f373u, 0x00070050u, 0x00000009u, 0x00000c78u, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000009u, 0x00000c79u, 0x00000c77u, 0x00000c78u, 0x0004003du, 0x00000008u, 0x00000c7au, 0x00000101u, 0x00070050u, 0x00000009u, 0x00000c7bu, 0x00000c7au, 0x00000c7au, 0x00000c7au, 0x00000c7au, 0x00050084u, 0x00000009u, 0x00000c7cu, 0x00000c79u, 0x00000c7bu, 0x0004003du, 0x00000009u, 0x00000c7du, 0x000000feu, 0x00050080u, 0x00000009u, 0x00000c7eu, 0x00000c7du, 0x00000c7cu, 0x0003003eu, 0x000000feu, 0x00000c7eu, 0x0004003du, 0x00000009u, 0x00000c80u, 0x000000feu, 0x000500c3u, 0x00000009u, 0x00000c82u, 0x00000c80u, 0x0000f374u, 0x00040072u, 0x00000013u, 0x00000c83u, 0x00000c82u, 0x0003003eu, 0x00000c7fu, 0x00000c83u, 0x0004003du, 0x00000008u, 0x00000c85u, 0x00000102u, 0x0006000cu, 0x00000008u, 0x00000c86u, 0x00000001u, 0x00000049u, 0x00000c85u, 0x0003003eu, 0x00000c84u, 0x00000c86u, 0x000500c3u, 0x00000008u, 0x00000c89u, 0x00000c86u, 0x0000022au, 0x00040072u, 0x00000012u, 0x00000c8au, 0x00000c89u, 0x0003003eu, 0x00000c87u, 0x00000c8au, 0x000500c7u, 0x00000008u, 0x00000c8du, 0x00000c86u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00000c8eu, 0x00000c8du, 0x0000022au, 0x00040072u, 0x00000012u, 0x00000c8fu, 0x00000c8eu, 0x000500c7u, 0x00000012u, 0x00000c91u, 0x00000c8au, 0x000004c8u, 0x00050080u, 0x00000012u, 0x00000c92u, 0x00000c8fu, 0x00000c91u, 0x0003003eu, 0x00000c8bu, 0x00000c92u, 0x00070050u, 0x00000013u, 0x00000c96u, 0x00000c94u, 0x00000c94u, 0x00000c94u, 0x00000c94u, 0x000500c4u, 0x00000013u, 0x00000c97u, 0x00000c83u, 0x00000c96u, 0x0003003eu, 0x00000c7fu, 0x00000c97u, 0x0004003du, 0x00000009u, 0x00000c99u, 0x000000ffu, 0x000500c3u, 0x00000009u, 0x00000c9bu, 0x00000c99u, 0x0000f374u, 0x00040072u, 0x00000013u, 0x00000c9cu, 0x00000c9bu, 0x00070050u, 0x00000013u, 0x00000c9du, 0x00000c92u, 0x00000c92u, 0x00000c92u, 0x00000c92u, 0x00050084u, 0x00000013u, 0x00000c9eu, 0x00000c9du, 0x00000c9cu, 0x0004003du, 0x00000009u, 0x00000ca0u, 0x00000100u, 0x000500c3u, 0x00000009u, 0x00000ca2u, 0x00000ca0u, 0x0000f374u, 0x00040072u, 0x00000013u, 0x00000ca3u, 0x00000ca2u, 0x00070050u, 0x00000013u, 0x00000ca4u, 0x00000c8au, 0x00000c8au, 0x00000c8au, 0x00000c8au, 0x00050084u, 0x00000013u, 0x00000ca5u, 0x00000ca4u, 0x00000ca3u, 0x00050080u, 0x00000013u, 0x00000ca6u, 0x00000c9eu, 0x00000ca5u, 0x00050080u, 0x00000013u, 0x00000ca8u, 0x00000c97u, 0x00000ca6u, 0x0003003eu, 0x00000c7fu, 0x00000ca8u, 0x00070050u, 0x00000013u, 0x00000cacu, 0x00000caau, 0x00000caau, 0x00000caau, 0x00000caau, 0x000500c3u, 0x00000013u, 0x00000cadu, 0x00000ca8u, 0x00000cacu, 0x0003003eu, 0x00000c7fu, 0x00000cadu, 0x0003003eu, 0x00000caeu, 0x00000cadu, 0x00050039u, 0x00000010u, 0x00000cb0u, 0x000000e7u, 0x00000caeu, 0x000200feu, 0x00000cb0u, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000010fu, 0x00000000u, 0x00000107u, 0x00030037u, 0x00000105u, 0x00000108u, 0x00030037u, 0x000000dfu, 0x00000109u, 0x00030037u, 0x00000046u, 0x0000010au, 0x00030037u, 0x0000006au, 0x0000010bu, 0x00030037u, 0x0000006au, 0x0000010cu, 0x00030037u, 0x00000106u, 0x0000010du, 0x00030037u, 0x00000046u, 0x0000010eu, 0x000200f8u, 0x00000110u, 0x0004003bu, 0x00000046u, 0x00000cb3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000cb5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000cc4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000cd1u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000cdau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000cecu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000cedu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ceeu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000cf6u, 0x00000007u, 0x0004003du, 0x00000069u, 0x00000cb4u, 0x0000010cu, 0x000300f7u, 0x00000cb7u, 0x00000000u, 0x000400fau, 0x00000cb4u, 0x00000cb6u, 0x00000cbcu, 0x000200f8u, 0x00000cb6u, 0x0004003du, 0x00000008u, 0x00000cb8u, 0x0000010au, 0x00050041u, 0x00000046u, 0x00000cb9u, 0x00000108u, 0x00000236u, 0x0004003du, 0x00000008u, 0x00000cbau, 0x00000cb9u, 0x00050082u, 0x00000008u, 0x00000cbbu, 0x00000cb8u, 0x00000cbau, 0x0003003eu, 0x00000cb5u, 0x00000cbbu, 0x000200f9u, 0x00000cb7u, 0x000200f8u, 0x00000cbcu, 0x00050041u, 0x00000046u, 0x00000cbdu, 0x00000108u, 0x00000239u, 0x0004003du, 0x00000008u, 0x00000cbeu, 0x00000cbdu, 0x0004003du, 0x00000008u, 0x00000cbfu, 0x0000010au, 0x00050082u, 0x00000008u, 0x00000cc0u, 0x00000cbeu, 0x00000cbfu, 0x0003003eu, 0x00000cb5u, 0x00000cc0u, 0x000200f9u, 0x00000cb7u, 0x000200f8u, 0x00000cb7u, 0x000700f5u, 0x00000008u, 0x0000ef1cu, 0x00000cbbu, 0x00000cb6u, 0x00000cc0u, 0x00000cbcu, 0x0003003eu, 0x00000cb3u, 0x0000ef1cu, 0x000500c3u, 0x00000008u, 0x00000cc3u, 0x0000ef1cu, 0x0000078bu, 0x0003003eu, 0x00000cb3u, 0x00000cc3u, 0x00060041u, 0x00000ccau, 0x00000ccbu, 0x00000cc9u, 0x00000220u, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000cccu, 0x00000ccbu, 0x000500c7u, 0x00000008u, 0x00000ccdu, 0x00000cc3u, 0x00000cccu, 0x0003003eu, 0x00000cc4u, 0x00000ccdu, 0x00050082u, 0x00000008u, 0x00000cd0u, 0x00000cc3u, 0x00000ccdu, 0x0003003eu, 0x0000010eu, 0x00000cd0u, 0x00060041u, 0x00000ccau, 0x00000cd3u, 0x00000cc9u, 0x00000220u, 0x00000220u, 0x0004003du, 0x00000008u, 0x00000cd4u, 0x00000cd3u, 0x000500c3u, 0x00000008u, 0x00000cd5u, 0x00000cc3u, 0x00000cd4u, 0x0004003du, 0x00000069u, 0x00000cd6u, 0x0000010cu, 0x000600a9u, 0x00000008u, 0x00000cd8u, 0x00000cd6u, 0x0000022au, 0x00000cd7u, 0x00050084u, 0x00000008u, 0x00000cd9u, 0x00000cd5u, 0x00000cd8u, 0x0003003eu, 0x00000cd1u, 0x00000cd9u, 0x00050041u, 0x000000dfu, 0x00000cdbu, 0x00000108u, 0x0000022au, 0x0004003du, 0x00000009u, 0x00000cdcu, 0x00000cdbu, 0x0008004fu, 0x00000044u, 0x00000cddu, 0x00000cdcu, 0x00000cdcu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000cdeu, 0x00000109u, 0x0008004fu, 0x00000044u, 0x00000cdfu, 0x00000cdeu, 0x00000cdeu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000ce1u, 0x00000cdfu, 0x0000f371u, 0x00060050u, 0x00000044u, 0x00000ce3u, 0x00000cd9u, 0x00000cd9u, 0x00000cd9u, 0x00050084u, 0x00000044u, 0x00000ce4u, 0x00000ce1u, 0x00000ce3u, 0x00050080u, 0x00000044u, 0x00000ce5u, 0x00000cddu, 0x00000ce4u, 0x0003003eu, 0x00000cdau, 0x00000ce5u, 0x0004003du, 0x00000069u, 0x00000ce6u, 0x0000010bu, 0x000300f7u, 0x00000ce8u, 0x00000000u, 0x000400fau, 0x00000ce6u, 0x00000ce7u, 0x00000cf2u, 0x000200f8u, 0x00000ce7u, 0x000500c3u, 0x00000044u, 0x00000cebu, 0x00000ce5u, 0x0000f372u, 0x0003003eu, 0x00000cedu, 0x00000cebu, 0x00060039u, 0x000000efu, 0x00000cf0u, 0x000000fbu, 0x00000cedu, 0x00000ceeu, 0x0004003du, 0x00000069u, 0x00000cf1u, 0x00000ceeu, 0x0003003eu, 0x00000cecu, 0x00000cf1u, 0x0003003eu, 0x0000010du, 0x00000cf0u, 0x000200f9u, 0x00000ce8u, 0x000200f8u, 0x00000cf2u, 0x000500c3u, 0x00000044u, 0x00000cf5u, 0x00000ce5u, 0x0000f372u, 0x0003003eu, 0x00000cf6u, 0x00000cf5u, 0x00050039u, 0x000000efu, 0x00000cf7u, 0x000000f6u, 0x00000cf6u, 0x0003003eu, 0x0000010du, 0x00000cf7u, 0x000200f9u, 0x00000ce8u, 0x000200f8u, 0x00000ce8u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x000000efu, 0x00000116u, 0x00000000u, 0x00000111u, 0x00030037u, 0x000000dfu, 0x00000112u, 0x00030037u, 0x000000dfu, 0x00000113u, 0x00030037u, 0x00000046u, 0x00000114u, 0x00030037u, 0x0000006au, 0x00000115u, 0x000200f8u, 0x00000117u, 0x0004003bu, 0x00000045u, 0x00000cf8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000d0bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d0cu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d0du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d0fu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d14u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000cf9u, 0x00000112u, 0x0008004fu, 0x00000044u, 0x00000cfau, 0x00000cf9u, 0x00000cf9u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000cfbu, 0x00000113u, 0x0008004fu, 0x00000044u, 0x00000cfcu, 0x00000cfbu, 0x00000cfbu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000cfeu, 0x00000cfcu, 0x0000f371u, 0x00060050u, 0x00000044u, 0x00000cffu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000044u, 0x00000d00u, 0x00000cfeu, 0x00000cffu, 0x0004003du, 0x00000008u, 0x00000d01u, 0x00000114u, 0x00060050u, 0x00000044u, 0x00000d02u, 0x00000d01u, 0x00000d01u, 0x00000d01u, 0x00050084u, 0x00000044u, 0x00000d03u, 0x00000d00u, 0x00000d02u, 0x00050080u, 0x00000044u, 0x00000d04u, 0x00000cfau, 0x00000d03u, 0x0003003eu, 0x00000cf8u, 0x00000d04u, 0x000500c3u, 0x00000044u, 0x00000d07u, 0x00000d04u, 0x0000f372u, 0x0003003eu, 0x00000cf8u, 0x00000d07u, 0x0004003du, 0x00000069u, 0x00000d08u, 0x00000115u, 0x000300f7u, 0x00000d0au, 0x00000000u, 0x000400fau, 0x00000d08u, 0x00000d09u, 0x00000d13u, 0x000200f8u, 0x00000d09u, 0x0003003eu, 0x00000d0du, 0x00000d07u, 0x00060039u, 0x000000efu, 0x00000d11u, 0x000000fbu, 0x00000d0du, 0x00000d0fu, 0x0004003du, 0x00000069u, 0x00000d12u, 0x00000d0fu, 0x0003003eu, 0x00000d0cu, 0x00000d12u, 0x0003003eu, 0x00000d0bu, 0x00000d11u, 0x000200f9u, 0x00000d0au, 0x000200f8u, 0x00000d13u, 0x0003003eu, 0x00000d14u, 0x00000d07u, 0x00050039u, 0x000000efu, 0x00000d16u, 0x000000f6u, 0x00000d14u, 0x0003003eu, 0x00000d0bu, 0x00000d16u, 0x000200f9u, 0x00000d0au, 0x000200f8u, 0x00000d0au, 0x000700f5u, 0x000000efu, 0x0000ef20u, 0x00000d11u, 0x00000d09u, 0x00000d16u, 0x00000d13u, 0x000200feu, 0x0000ef20u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000126u, 0x00000000u, 0x00000118u, 0x00030037u, 0x000000dfu, 0x00000119u, 0x00030037u, 0x000000dfu, 0x0000011au, 0x00030037u, 0x000000dfu, 0x0000011bu, 0x00030037u, 0x00000046u, 0x0000011cu, 0x00030037u, 0x00000046u, 0x0000011du, 0x00030037u, 0x0000006au, 0x0000011eu, 0x00030037u, 0x0000006au, 0x0000011fu, 0x00030037u, 0x00000046u, 0x00000120u, 0x00030037u, 0x00000106u, 0x00000121u, 0x00030037u, 0x00000106u, 0x00000122u, 0x00030037u, 0x00000106u, 0x00000123u, 0x00030037u, 0x00000046u, 0x00000124u, 0x00030037u, 0x0000006au, 0x00000125u, 0x000200f8u, 0x00000127u, 0x0004003bu, 0x00000045u, 0x00000d1au, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d2au, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d39u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d55u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d56u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d60u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d61u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d68u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d69u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d71u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d79u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d7eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d90u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d93u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d96u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d99u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000db3u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000d1bu, 0x00000119u, 0x0008004fu, 0x00000044u, 0x00000d1cu, 0x00000d1bu, 0x00000d1bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000d1du, 0x0000011au, 0x0008004fu, 0x00000044u, 0x00000d1eu, 0x00000d1du, 0x00000d1du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d20u, 0x00000d1eu, 0x0000f371u, 0x00060050u, 0x00000044u, 0x00000d21u, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000044u, 0x00000d22u, 0x00000d20u, 0x00000d21u, 0x0004003du, 0x00000008u, 0x00000d23u, 0x0000011cu, 0x00060050u, 0x00000044u, 0x00000d24u, 0x00000d23u, 0x00000d23u, 0x00000d23u, 0x00050084u, 0x00000044u, 0x00000d25u, 0x00000d22u, 0x00000d24u, 0x00050080u, 0x00000044u, 0x00000d26u, 0x00000d1cu, 0x00000d25u, 0x0003003eu, 0x00000d1au, 0x00000d26u, 0x0004003du, 0x00000069u, 0x00000d27u, 0x0000011fu, 0x000300f7u, 0x00000d29u, 0x00000000u, 0x000400fau, 0x00000d27u, 0x00000d28u, 0x00000d29u, 0x000200f8u, 0x00000d28u, 0x0004003du, 0x00000008u, 0x00000d2cu, 0x00000120u, 0x0004003du, 0x00000009u, 0x00000d2du, 0x0000011au, 0x0008004fu, 0x00000044u, 0x00000d2eu, 0x00000d2du, 0x00000d2du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d30u, 0x00000d2eu, 0x0000f371u, 0x000500c3u, 0x00000044u, 0x00000d32u, 0x00000d30u, 0x00000d21u, 0x00060050u, 0x00000044u, 0x00000d33u, 0x00000d2cu, 0x00000d2cu, 0x00000d2cu, 0x00050084u, 0x00000044u, 0x00000d34u, 0x00000d33u, 0x00000d32u, 0x00050080u, 0x00000044u, 0x00000d35u, 0x00000d26u, 0x00000d34u, 0x0003003eu, 0x00000d2au, 0x00000d35u, 0x000300f7u, 0x00000d38u, 0x00000000u, 0x000400fau, 0x00000d36u, 0x00000d37u, 0x00000d46u, 0x000200f8u, 0x00000d37u, 0x0004003du, 0x00000008u, 0x00000d3bu, 0x00000120u, 0x0006000cu, 0x00000008u, 0x00000d3cu, 0x00000001u, 0x00000005u, 0x00000d3bu, 0x0004003du, 0x00000009u, 0x00000d3du, 0x0000011bu, 0x0008004fu, 0x00000044u, 0x00000d3eu, 0x00000d3du, 0x00000d3du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d40u, 0x00000d3eu, 0x0000f377u, 0x000500c3u, 0x00000044u, 0x00000d42u, 0x00000d40u, 0x00000d21u, 0x00060050u, 0x00000044u, 0x00000d43u, 0x00000d3cu, 0x00000d3cu, 0x00000d3cu, 0x00050084u, 0x00000044u, 0x00000d44u, 0x00000d43u, 0x00000d42u, 0x00050080u, 0x00000044u, 0x00000d45u, 0x00000d26u, 0x00000d44u, 0x0003003eu, 0x00000d39u, 0x00000d45u, 0x000200f9u, 0x00000d38u, 0x000200f8u, 0x00000d46u, 0x0004003du, 0x00000009u, 0x00000d48u, 0x0000011bu, 0x0008004fu, 0x00000044u, 0x00000d49u, 0x00000d48u, 0x00000d48u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d4bu, 0x00000d49u, 0x0000f377u, 0x000500c3u, 0x00000044u, 0x00000d4du, 0x00000d4bu, 0x00000d21u, 0x00050080u, 0x00000044u, 0x00000d4eu, 0x00000d26u, 0x00000d4du, 0x0003003eu, 0x00000d39u, 0x00000d4eu, 0x000200f9u, 0x00000d38u, 0x000200f8u, 0x00000d38u, 0x000700f5u, 0x00000044u, 0x0000ef27u, 0x00000d45u, 0x00000d37u, 0x00000d4eu, 0x00000d46u, 0x000200f9u, 0x00000d29u, 0x000200f8u, 0x00000d29u, 0x000700f5u, 0x00000044u, 0x0000ef26u, 0x0000ef24u, 0x00000127u, 0x0000ef27u, 0x00000d38u, 0x000700f5u, 0x00000044u, 0x0000ef23u, 0x0000ef24u, 0x00000127u, 0x00000d35u, 0x00000d38u, 0x0004003du, 0x00000069u, 0x00000d4fu, 0x0000011eu, 0x000300f7u, 0x00000d51u, 0x00000000u, 0x000400fau, 0x00000d4fu, 0x00000d50u, 0x00000d6du, 0x000200f8u, 0x00000d50u, 0x000500c3u, 0x00000044u, 0x00000d54u, 0x00000d26u, 0x0000f372u, 0x0003003eu, 0x00000d55u, 0x00000d54u, 0x0004003du, 0x00000069u, 0x00000d57u, 0x00000125u, 0x0003003eu, 0x00000d56u, 0x00000d57u, 0x00060039u, 0x000000efu, 0x00000d58u, 0x000000fbu, 0x00000d55u, 0x00000d56u, 0x0004003du, 0x00000069u, 0x00000d59u, 0x00000d56u, 0x0003003eu, 0x00000125u, 0x00000d59u, 0x0003003eu, 0x00000121u, 0x00000d58u, 0x0004003du, 0x00000069u, 0x00000d5au, 0x0000011fu, 0x000300f7u, 0x00000d5cu, 0x00000000u, 0x000400fau, 0x00000d5au, 0x00000d5bu, 0x00000d5cu, 0x000200f8u, 0x00000d5bu, 0x000500c3u, 0x00000044u, 0x00000d5fu, 0x0000ef23u, 0x0000f372u, 0x0003003eu, 0x00000d60u, 0x00000d5fu, 0x0004003du, 0x00000069u, 0x00000d62u, 0x00000125u, 0x0003003eu, 0x00000d61u, 0x00000d62u, 0x00060039u, 0x000000efu, 0x00000d63u, 0x000000fbu, 0x00000d60u, 0x00000d61u, 0x0004003du, 0x00000069u, 0x00000d64u, 0x00000d61u, 0x0003003eu, 0x00000125u, 0x00000d64u, 0x0003003eu, 0x00000122u, 0x00000d63u, 0x000500c3u, 0x00000044u, 0x00000d67u, 0x0000ef26u, 0x0000f372u, 0x0003003eu, 0x00000d68u, 0x00000d67u, 0x0004003du, 0x00000069u, 0x00000d6au, 0x00000125u, 0x0003003eu, 0x00000d69u, 0x00000d6au, 0x00060039u, 0x000000efu, 0x00000d6bu, 0x000000fbu, 0x00000d68u, 0x00000d69u, 0x0004003du, 0x00000069u, 0x00000d6cu, 0x00000d69u, 0x0003003eu, 0x00000125u, 0x00000d6cu, 0x0003003eu, 0x00000123u, 0x00000d6bu, 0x000200f9u, 0x00000d5cu, 0x000200f8u, 0x00000d5cu, 0x000200f9u, 0x00000d51u, 0x000200f8u, 0x00000d6du, 0x000500c3u, 0x00000044u, 0x00000d70u, 0x00000d26u, 0x0000f372u, 0x0003003eu, 0x00000d71u, 0x00000d70u, 0x00050039u, 0x000000efu, 0x00000d72u, 0x000000f6u, 0x00000d71u, 0x0003003eu, 0x00000121u, 0x00000d72u, 0x0004003du, 0x00000069u, 0x00000d73u, 0x0000011fu, 0x000300f7u, 0x00000d75u, 0x00000000u, 0x000400fau, 0x00000d73u, 0x00000d74u, 0x00000d75u, 0x000200f8u, 0x00000d74u, 0x000500c3u, 0x00000044u, 0x00000d78u, 0x0000ef23u, 0x0000f372u, 0x0003003eu, 0x00000d79u, 0x00000d78u, 0x00050039u, 0x000000efu, 0x00000d7au, 0x000000f6u, 0x00000d79u, 0x0003003eu, 0x00000122u, 0x00000d7au, 0x000500c3u, 0x00000044u, 0x00000d7du, 0x0000ef26u, 0x0000f372u, 0x0003003eu, 0x00000d7eu, 0x00000d7du, 0x00050039u, 0x000000efu, 0x00000d7fu, 0x000000f6u, 0x00000d7eu, 0x0003003eu, 0x00000123u, 0x00000d7fu, 0x000200f9u, 0x00000d75u, 0x000200f8u, 0x00000d75u, 0x000200f9u, 0x00000d51u, 0x000200f8u, 0x00000d51u, 0x00050041u, 0x00000046u, 0x00000d80u, 0x00000119u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000d81u, 0x00000d80u, 0x00050041u, 0x00000046u, 0x00000d82u, 0x0000011au, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000d83u, 0x00000d82u, 0x0004003du, 0x00000008u, 0x00000d84u, 0x0000011cu, 0x000500c3u, 0x00000008u, 0x00000d85u, 0x00000d84u, 0x0000078bu, 0x00050084u, 0x00000008u, 0x00000d86u, 0x00000d83u, 0x00000d85u, 0x00050080u, 0x00000008u, 0x00000d87u, 0x00000d81u, 0x00000d86u, 0x0004003du, 0x00000008u, 0x00000d89u, 0x00000d82u, 0x000500c3u, 0x00000008u, 0x00000d8au, 0x00000d89u, 0x0000078bu, 0x0004003du, 0x00000008u, 0x00000d8bu, 0x0000011cu, 0x000500c7u, 0x00000008u, 0x00000d8du, 0x00000d8bu, 0x00000d8cu, 0x00050084u, 0x00000008u, 0x00000d8eu, 0x00000d8au, 0x00000d8du, 0x00050080u, 0x00000008u, 0x00000d8fu, 0x00000d87u, 0x00000d8eu, 0x0003003eu, 0x00000124u, 0x00000d8fu, 0x0004003du, 0x00000008u, 0x00000d91u, 0x00000124u, 0x000500c3u, 0x00000008u, 0x00000d92u, 0x00000d91u, 0x00000263u, 0x0003003eu, 0x00000d90u, 0x00000d92u, 0x0004003du, 0x00000008u, 0x00000d94u, 0x0000011du, 0x0006000cu, 0x00000008u, 0x00000d95u, 0x00000001u, 0x00000049u, 0x00000d94u, 0x0003003eu, 0x00000d93u, 0x00000d95u, 0x000500c3u, 0x00000008u, 0x00000d98u, 0x00000d95u, 0x0000022au, 0x0003003eu, 0x00000d96u, 0x00000d98u, 0x000500c7u, 0x00000008u, 0x00000d9bu, 0x00000d95u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00000d9cu, 0x00000d9bu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00000d9eu, 0x00000d98u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00000d9fu, 0x00000d9cu, 0x00000d9eu, 0x0003003eu, 0x00000d99u, 0x00000d9fu, 0x000500c4u, 0x00000008u, 0x00000da2u, 0x00000d92u, 0x00000da0u, 0x0003003eu, 0x00000d90u, 0x00000da2u, 0x0004003du, 0x00000008u, 0x00000da5u, 0x00000d82u, 0x000500c3u, 0x00000008u, 0x00000da6u, 0x00000da5u, 0x00000263u, 0x00050084u, 0x00000008u, 0x00000da7u, 0x00000d9fu, 0x00000da6u, 0x00050041u, 0x00000046u, 0x00000da9u, 0x0000011bu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000daau, 0x00000da9u, 0x000500c3u, 0x00000008u, 0x00000dabu, 0x00000daau, 0x00000263u, 0x00050084u, 0x00000008u, 0x00000dacu, 0x00000d98u, 0x00000dabu, 0x00050080u, 0x00000008u, 0x00000dadu, 0x00000da7u, 0x00000dacu, 0x00050080u, 0x00000008u, 0x00000dafu, 0x00000da2u, 0x00000dadu, 0x0003003eu, 0x00000d90u, 0x00000dafu, 0x000500c3u, 0x00000008u, 0x00000db2u, 0x00000dafu, 0x00000db0u, 0x0003003eu, 0x00000d90u, 0x00000db2u, 0x0003003eu, 0x00000db3u, 0x00000db2u, 0x00050039u, 0x00000008u, 0x00000db5u, 0x000000edu, 0x00000db3u, 0x0003003eu, 0x00000124u, 0x00000db5u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000012cu, 0x00000000u, 0x00000129u, 0x00030037u, 0x00000128u, 0x0000012au, 0x00030037u, 0x00000046u, 0x0000012bu, 0x000200f8u, 0x0000012du, 0x0004003bu, 0x00000046u, 0x00000dbdu, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00000db6u, 0x0000012au, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00000db7u, 0x00000db6u, 0x00040071u, 0x00000006u, 0x00000db8u, 0x00000db7u, 0x0004007cu, 0x00000008u, 0x00000db9u, 0x00000db8u, 0x000500abu, 0x00000069u, 0x00000dbau, 0x00000db9u, 0x00000220u, 0x000300f7u, 0x00000dbcu, 0x00000000u, 0x000400fau, 0x00000dbau, 0x00000dbbu, 0x00000dbcu, 0x000200f8u, 0x00000dbbu, 0x0004003du, 0x0000000fu, 0x00000dbfu, 0x00000db6u, 0x000500c4u, 0x00000008u, 0x00000dc0u, 0x0000022au, 0x00000dbfu, 0x0003003eu, 0x00000dbdu, 0x00000dc0u, 0x00050041u, 0x0000007bu, 0x00000dc1u, 0x0000012au, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00000dc2u, 0x00000dc1u, 0x00040071u, 0x00000006u, 0x00000dc3u, 0x00000dc2u, 0x0004007cu, 0x00000008u, 0x00000dc4u, 0x00000dc3u, 0x000500c7u, 0x00000008u, 0x00000dc5u, 0x00000dc4u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00000dc6u, 0x00000dc5u, 0x00000220u, 0x000300f7u, 0x00000dc8u, 0x00000000u, 0x000400fau, 0x00000dc6u, 0x00000dc7u, 0x00000dc8u, 0x000200f8u, 0x00000dc7u, 0x0004003du, 0x00000008u, 0x00000dc9u, 0x0000012bu, 0x000500c7u, 0x00000008u, 0x00000dcbu, 0x00000dc9u, 0x00000dc0u, 0x00050082u, 0x00000008u, 0x00000dccu, 0x00000dcbu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00000dcdu, 0x00000001u, 0x0000002au, 0x00000dccu, 0x00000220u, 0x0004003du, 0x00000008u, 0x00000dceu, 0x0000012bu, 0x000500c6u, 0x00000008u, 0x00000dcfu, 0x00000dceu, 0x00000dcdu, 0x0003003eu, 0x0000012bu, 0x00000dcfu, 0x000200f9u, 0x00000dc8u, 0x000200f8u, 0x00000dc8u, 0x00050082u, 0x00000008u, 0x00000dd1u, 0x00000dc0u, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000dd2u, 0x0000012bu, 0x000500c7u, 0x00000008u, 0x00000dd3u, 0x00000dd2u, 0x00000dd1u, 0x0003003eu, 0x0000012bu, 0x00000dd3u, 0x000200f9u, 0x00000dbcu, 0x000200f8u, 0x00000dbcu, 0x0004003du, 0x00000008u, 0x00000dd4u, 0x0000012bu, 0x000200feu, 0x00000dd4u, 0x00010038u, 0x00050036u, 0x000000efu, 0x00000131u, 0x00000000u, 0x0000012eu, 0x00030037u, 0x00000128u, 0x0000012fu, 0x00030037u, 0x00000046u, 0x00000130u, 0x000200f8u, 0x00000132u, 0x0004003bu, 0x00000106u, 0x00000dd7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000de3u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000dd8u, 0x00000130u, 0x00050050u, 0x000000efu, 0x00000ddau, 0x00000dd8u, 0x00000dd8u, 0x00050080u, 0x000000efu, 0x00000ddbu, 0x00000ddau, 0x00000dd9u, 0x0003003eu, 0x00000dd7u, 0x00000ddbu, 0x00050041u, 0x0000007bu, 0x00000ddcu, 0x0000012fu, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00000dddu, 0x00000ddcu, 0x00040071u, 0x00000006u, 0x00000ddeu, 0x00000dddu, 0x0004007cu, 0x00000008u, 0x00000ddfu, 0x00000ddeu, 0x000500abu, 0x00000069u, 0x00000de0u, 0x00000ddfu, 0x00000220u, 0x000300f7u, 0x00000de2u, 0x00000000u, 0x000400fau, 0x00000de0u, 0x00000de1u, 0x00000de2u, 0x000200f8u, 0x00000de1u, 0x0004003du, 0x0000000fu, 0x00000de5u, 0x00000ddcu, 0x000500c4u, 0x00000008u, 0x00000de6u, 0x0000022au, 0x00000de5u, 0x0003003eu, 0x00000de3u, 0x00000de6u, 0x00050041u, 0x0000007bu, 0x00000de7u, 0x0000012fu, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00000de8u, 0x00000de7u, 0x00040071u, 0x00000006u, 0x00000de9u, 0x00000de8u, 0x0004007cu, 0x00000008u, 0x00000deau, 0x00000de9u, 0x000500c7u, 0x00000008u, 0x00000debu, 0x00000deau, 0x0000022du, 0x000500abu, 0x00000069u, 0x00000decu, 0x00000debu, 0x00000220u, 0x000300f7u, 0x00000deeu, 0x00000000u, 0x000400fau, 0x00000decu, 0x00000dedu, 0x00000deeu, 0x000200f8u, 0x00000dedu, 0x00050050u, 0x000000efu, 0x00000df1u, 0x00000de6u, 0x00000de6u, 0x000500c7u, 0x000000efu, 0x00000df2u, 0x00000ddbu, 0x00000df1u, 0x00050082u, 0x000000efu, 0x00000df4u, 0x00000df2u, 0x0000f376u, 0x0007000cu, 0x000000efu, 0x00000df6u, 0x00000001u, 0x0000002au, 0x00000df4u, 0x00000c39u, 0x000500c6u, 0x000000efu, 0x00000df8u, 0x00000ddbu, 0x00000df6u, 0x0003003eu, 0x00000dd7u, 0x00000df8u, 0x000200f9u, 0x00000deeu, 0x000200f8u, 0x00000deeu, 0x000700f5u, 0x000000efu, 0x0000ef2au, 0x00000ddbu, 0x00000de1u, 0x00000df8u, 0x00000dedu, 0x00050082u, 0x00000008u, 0x00000dfau, 0x00000de6u, 0x0000022au, 0x00050050u, 0x000000efu, 0x00000dfcu, 0x00000dfau, 0x00000dfau, 0x000500c7u, 0x000000efu, 0x00000dfdu, 0x0000ef2au, 0x00000dfcu, 0x0003003eu, 0x00000dd7u, 0x00000dfdu, 0x000200f9u, 0x00000de2u, 0x000200f8u, 0x00000de2u, 0x000700f5u, 0x000000efu, 0x0000ef2bu, 0x00000ddbu, 0x00000132u, 0x00000dfdu, 0x00000deeu, 0x000200feu, 0x0000ef2bu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000135u, 0x00000000u, 0x00000129u, 0x00030037u, 0x00000128u, 0x00000133u, 0x00030037u, 0x00000046u, 0x00000134u, 0x000200f8u, 0x00000136u, 0x0004003bu, 0x00000046u, 0x00000e08u, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00000e01u, 0x00000133u, 0x00000266u, 0x0004003du, 0x0000000fu, 0x00000e02u, 0x00000e01u, 0x00040071u, 0x00000006u, 0x00000e03u, 0x00000e02u, 0x0004007cu, 0x00000008u, 0x00000e04u, 0x00000e03u, 0x000500abu, 0x00000069u, 0x00000e05u, 0x00000e04u, 0x00000220u, 0x000300f7u, 0x00000e07u, 0x00000000u, 0x000400fau, 0x00000e05u, 0x00000e06u, 0x00000e07u, 0x000200f8u, 0x00000e06u, 0x0004003du, 0x0000000fu, 0x00000e0au, 0x00000e01u, 0x000500c4u, 0x00000008u, 0x00000e0bu, 0x0000022au, 0x00000e0au, 0x0003003eu, 0x00000e08u, 0x00000e0bu, 0x00050041u, 0x0000007bu, 0x00000e0cu, 0x00000133u, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00000e0du, 0x00000e0cu, 0x00040071u, 0x00000006u, 0x00000e0eu, 0x00000e0du, 0x0004007cu, 0x00000008u, 0x00000e0fu, 0x00000e0eu, 0x000500c7u, 0x00000008u, 0x00000e10u, 0x00000e0fu, 0x0000025du, 0x000500abu, 0x00000069u, 0x00000e11u, 0x00000e10u, 0x00000220u, 0x000300f7u, 0x00000e13u, 0x00000000u, 0x000400fau, 0x00000e11u, 0x00000e12u, 0x00000e13u, 0x000200f8u, 0x00000e12u, 0x0004003du, 0x00000008u, 0x00000e14u, 0x00000134u, 0x000500c7u, 0x00000008u, 0x00000e16u, 0x00000e14u, 0x00000e0bu, 0x00050082u, 0x00000008u, 0x00000e17u, 0x00000e16u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00000e18u, 0x00000001u, 0x0000002au, 0x00000e17u, 0x00000220u, 0x0004003du, 0x00000008u, 0x00000e19u, 0x00000134u, 0x000500c6u, 0x00000008u, 0x00000e1au, 0x00000e19u, 0x00000e18u, 0x0003003eu, 0x00000134u, 0x00000e1au, 0x000200f9u, 0x00000e13u, 0x000200f8u, 0x00000e13u, 0x00050082u, 0x00000008u, 0x00000e1cu, 0x00000e0bu, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000e1du, 0x00000134u, 0x000500c7u, 0x00000008u, 0x00000e1eu, 0x00000e1du, 0x00000e1cu, 0x0003003eu, 0x00000134u, 0x00000e1eu, 0x000200f9u, 0x00000e07u, 0x000200f8u, 0x00000e07u, 0x0004003du, 0x00000008u, 0x00000e1fu, 0x00000134u, 0x000200feu, 0x00000e1fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000139u, 0x00000000u, 0x00000137u, 0x00030037u, 0x00000007u, 0x00000138u, 0x000200f8u, 0x0000013au, 0x0004003bu, 0x0000030du, 0x00000e22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e32u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e23u, 0x00000138u, 0x00060050u, 0x0000030cu, 0x00000e24u, 0x00000e23u, 0x00000e23u, 0x00000e23u, 0x000500c2u, 0x0000030cu, 0x00000e27u, 0x00000e24u, 0x00000e26u, 0x000500c7u, 0x0000030cu, 0x00000e2au, 0x00000e27u, 0x0000f37cu, 0x0003003eu, 0x00000e22u, 0x00000e2au, 0x000500c4u, 0x0000030cu, 0x00000e2du, 0x00000e2au, 0x0000f37du, 0x000500c2u, 0x0000030cu, 0x00000e30u, 0x00000e2au, 0x0000f37eu, 0x000500c5u, 0x0000030cu, 0x00000e31u, 0x00000e2du, 0x00000e30u, 0x0003003eu, 0x00000e22u, 0x00000e31u, 0x0004003du, 0x00000006u, 0x00000e33u, 0x00000138u, 0x000500c7u, 0x00000006u, 0x00000e34u, 0x00000e33u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000e35u, 0x00000e34u, 0x000006c3u, 0x0003003eu, 0x00000e32u, 0x00000e35u, 0x00040071u, 0x000004bau, 0x00000e37u, 0x00000e31u, 0x0004007cu, 0x000004b6u, 0x00000e38u, 0x00000e37u, 0x00040071u, 0x00000011u, 0x00000e3au, 0x00000e35u, 0x0004007cu, 0x00000012u, 0x00000e3bu, 0x00000e3au, 0x00050051u, 0x00000012u, 0x00000e3cu, 0x00000e38u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00000e3du, 0x00000e38u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00000e3eu, 0x00000e38u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00000e3fu, 0x00000e3cu, 0x00000e3du, 0x00000e3eu, 0x00000e3bu, 0x000200feu, 0x00000e3fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000013cu, 0x00000000u, 0x00000137u, 0x00030037u, 0x00000007u, 0x0000013bu, 0x000200f8u, 0x0000013du, 0x0004003bu, 0x00000007u, 0x00000e42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e45u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e43u, 0x0000013bu, 0x000500c2u, 0x00000006u, 0x00000e44u, 0x00000e43u, 0x0000025du, 0x0003003eu, 0x00000e42u, 0x00000e44u, 0x0004003du, 0x00000006u, 0x00000e46u, 0x0000013bu, 0x000500c7u, 0x00000006u, 0x00000e47u, 0x00000e46u, 0x000006c3u, 0x0003003eu, 0x00000e45u, 0x00000e47u, 0x00040071u, 0x00000011u, 0x00000e49u, 0x00000e44u, 0x0004007cu, 0x00000012u, 0x00000e4au, 0x00000e49u, 0x00040071u, 0x00000011u, 0x00000e52u, 0x00000e47u, 0x0004007cu, 0x00000012u, 0x00000e53u, 0x00000e52u, 0x00070050u, 0x00000013u, 0x00000e54u, 0x00000e4au, 0x00000e4au, 0x00000e4au, 0x00000e53u, 0x000200feu, 0x00000e54u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000142u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x0000013fu, 0x00030037u, 0x00000007u, 0x00000140u, 0x00030037u, 0x000000b1u, 0x00000141u, 0x000200f8u, 0x00000143u, 0x0004003bu, 0x00000007u, 0x00000e57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e78u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e58u, 0x0000013fu, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000e59u, 0x00000e58u, 0x00050041u, 0x00000007u, 0x00000e5au, 0x0000013fu, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000e5bu, 0x00000e5au, 0x00050041u, 0x00000007u, 0x00000e5cu, 0x00000141u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000e5du, 0x00000e5cu, 0x00050084u, 0x00000006u, 0x00000e5eu, 0x00000e5bu, 0x00000e5du, 0x00050080u, 0x00000006u, 0x00000e5fu, 0x00000e59u, 0x00000e5eu, 0x0003003eu, 0x00000e57u, 0x00000e5fu, 0x00050041u, 0x00000007u, 0x00000e60u, 0x00000141u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000e61u, 0x00000e60u, 0x000500c2u, 0x00000006u, 0x00000e62u, 0x00000e61u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000e64u, 0x00000e5fu, 0x00000e62u, 0x0003003eu, 0x00000e57u, 0x00000e64u, 0x000500c7u, 0x00000006u, 0x00000e67u, 0x00000e64u, 0x00000e65u, 0x0003003eu, 0x00000e57u, 0x00000e67u, 0x0004003du, 0x00000006u, 0x00000e6au, 0x00000e60u, 0x000400c8u, 0x00000006u, 0x00000e6bu, 0x00000e6au, 0x000500c7u, 0x00000006u, 0x00000e6cu, 0x00000e6bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000e6du, 0x00000e6cu, 0x00000704u, 0x0003003eu, 0x00000e68u, 0x00000e6du, 0x0003003eu, 0x00000e6eu, 0x00000e67u, 0x0004003du, 0x00000006u, 0x00000e71u, 0x00000e5cu, 0x000500c7u, 0x00000006u, 0x00000e72u, 0x00000e71u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000e73u, 0x00000e72u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000e75u, 0x00000e67u, 0x00000e73u, 0x0003003eu, 0x00000e6eu, 0x00000e75u, 0x000500c6u, 0x00000006u, 0x00000e77u, 0x00000e75u, 0x00000464u, 0x0003003eu, 0x00000e6eu, 0x00000e77u, 0x0004003du, 0x00000006u, 0x00000e80u, 0x00000140u, 0x00080041u, 0x00000671u, 0x00000e82u, 0x00000e7fu, 0x00000220u, 0x00000e80u, 0x00000220u, 0x00000e77u, 0x0004003du, 0x0000000fu, 0x00000e83u, 0x00000e82u, 0x00040071u, 0x00000006u, 0x00000e84u, 0x00000e83u, 0x0003003eu, 0x00000e78u, 0x00000e84u, 0x000500c2u, 0x00000006u, 0x00000e87u, 0x00000e84u, 0x00000e6du, 0x000500c7u, 0x00000006u, 0x00000e89u, 0x00000e87u, 0x00000e88u, 0x0003003eu, 0x00000e78u, 0x00000e89u, 0x000500c4u, 0x00000006u, 0x00000e8bu, 0x00000e89u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00000e8du, 0x00000e89u, 0x00000e8bu, 0x0003003eu, 0x00000e78u, 0x00000e8du, 0x00040071u, 0x00000011u, 0x00000e8fu, 0x00000e8du, 0x0004007cu, 0x00000012u, 0x00000e90u, 0x00000e8fu, 0x00070050u, 0x00000013u, 0x00000e91u, 0x00000e90u, 0x00000e90u, 0x00000e90u, 0x00000e90u, 0x000200feu, 0x00000e91u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000147u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000144u, 0x00030037u, 0x00000007u, 0x00000145u, 0x00030037u, 0x000000b1u, 0x00000146u, 0x000200f8u, 0x00000148u, 0x0004003bu, 0x00000007u, 0x00000e94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ea4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ebeu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e95u, 0x00000144u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000e96u, 0x00000e95u, 0x00050041u, 0x00000007u, 0x00000e97u, 0x00000144u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000e98u, 0x00000e97u, 0x00050041u, 0x00000007u, 0x00000e99u, 0x00000146u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000e9au, 0x00000e99u, 0x00050084u, 0x00000006u, 0x00000e9bu, 0x00000e98u, 0x00000e9au, 0x00050080u, 0x00000006u, 0x00000e9cu, 0x00000e96u, 0x00000e9bu, 0x0003003eu, 0x00000e94u, 0x00000e9cu, 0x00050041u, 0x00000007u, 0x00000e9du, 0x00000146u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000e9eu, 0x00000e9du, 0x000500c2u, 0x00000006u, 0x00000e9fu, 0x00000e9eu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000ea1u, 0x00000e9cu, 0x00000e9fu, 0x0003003eu, 0x00000e94u, 0x00000ea1u, 0x000500c7u, 0x00000006u, 0x00000ea3u, 0x00000ea1u, 0x00000e65u, 0x0003003eu, 0x00000e94u, 0x00000ea3u, 0x0004003du, 0x00000006u, 0x00000ea6u, 0x00000e9du, 0x000400c8u, 0x00000006u, 0x00000ea7u, 0x00000ea6u, 0x000500c7u, 0x00000006u, 0x00000ea8u, 0x00000ea7u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000ea9u, 0x00000ea8u, 0x00000704u, 0x0003003eu, 0x00000ea4u, 0x00000ea9u, 0x0003003eu, 0x00000eaau, 0x00000ea3u, 0x0004003du, 0x00000006u, 0x00000eadu, 0x00000e99u, 0x000500c7u, 0x00000006u, 0x00000eaeu, 0x00000eadu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000eafu, 0x00000eaeu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000eb1u, 0x00000ea3u, 0x00000eafu, 0x0003003eu, 0x00000eaau, 0x00000eb1u, 0x000500c6u, 0x00000006u, 0x00000eb3u, 0x00000eb1u, 0x00000464u, 0x0003003eu, 0x00000eaau, 0x00000eb3u, 0x0004003du, 0x00000006u, 0x00000eb5u, 0x00000145u, 0x00080041u, 0x00000671u, 0x00000eb7u, 0x00000e7fu, 0x00000220u, 0x00000eb5u, 0x00000220u, 0x00000eb3u, 0x0004003du, 0x0000000fu, 0x00000eb8u, 0x00000eb7u, 0x00040071u, 0x00000006u, 0x00000eb9u, 0x00000eb8u, 0x0003003eu, 0x00000eb4u, 0x00000eb9u, 0x000500c2u, 0x00000006u, 0x00000ebcu, 0x00000eb9u, 0x00000ea9u, 0x000500c7u, 0x00000006u, 0x00000ebdu, 0x00000ebcu, 0x00000e88u, 0x0003003eu, 0x00000eb4u, 0x00000ebdu, 0x000500c7u, 0x00000006u, 0x00000ec1u, 0x00000ebdu, 0x00000ec0u, 0x0003003eu, 0x00000ebeu, 0x00000ec1u, 0x000500c4u, 0x00000006u, 0x00000ec3u, 0x00000ec1u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00000ec5u, 0x00000ec1u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00000ec6u, 0x00000ec3u, 0x00000ec5u, 0x000500c2u, 0x00000006u, 0x00000ec8u, 0x00000ec1u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00000ec9u, 0x00000ec6u, 0x00000ec8u, 0x0003003eu, 0x00000ebeu, 0x00000ec9u, 0x00040071u, 0x00000011u, 0x00000ecbu, 0x00000ec9u, 0x0004007cu, 0x00000012u, 0x00000eccu, 0x00000ecbu, 0x000500c7u, 0x00000006u, 0x00000ed4u, 0x00000ebdu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000ed5u, 0x00000ed4u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00000ed6u, 0x00000ed5u, 0x0004007cu, 0x00000012u, 0x00000ed7u, 0x00000ed6u, 0x00070050u, 0x00000013u, 0x00000ed8u, 0x00000eccu, 0x00000eccu, 0x00000eccu, 0x00000ed7u, 0x000200feu, 0x00000ed8u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000014eu, 0x00000000u, 0x00000149u, 0x00030037u, 0x00000128u, 0x0000014au, 0x00030037u, 0x00000007u, 0x0000014bu, 0x00030037u, 0x000000b1u, 0x0000014cu, 0x00030037u, 0x00000007u, 0x0000014du, 0x000200f8u, 0x0000014fu, 0x0004003bu, 0x00000007u, 0x00000edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ef1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000efbu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000edcu, 0x0000014au, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000eddu, 0x00000edcu, 0x00050041u, 0x00000007u, 0x00000edeu, 0x0000014au, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000edfu, 0x00000edeu, 0x00050041u, 0x00000007u, 0x00000ee0u, 0x0000014cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000ee1u, 0x00000ee0u, 0x00050084u, 0x00000006u, 0x00000ee2u, 0x00000edfu, 0x00000ee1u, 0x00050080u, 0x00000006u, 0x00000ee3u, 0x00000eddu, 0x00000ee2u, 0x0003003eu, 0x00000edbu, 0x00000ee3u, 0x00050041u, 0x00000007u, 0x00000ee4u, 0x0000014cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000ee5u, 0x00000ee4u, 0x000500c2u, 0x00000006u, 0x00000ee6u, 0x00000ee5u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000ee8u, 0x00000ee3u, 0x00000ee6u, 0x0003003eu, 0x00000edbu, 0x00000ee8u, 0x000500c7u, 0x00000006u, 0x00000eeau, 0x00000ee8u, 0x00000e65u, 0x0003003eu, 0x00000edbu, 0x00000eeau, 0x0004003du, 0x00000006u, 0x00000eedu, 0x00000ee4u, 0x000400c8u, 0x00000006u, 0x00000eeeu, 0x00000eedu, 0x000500c7u, 0x00000006u, 0x00000eefu, 0x00000eeeu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000ef0u, 0x00000eefu, 0x00000704u, 0x0003003eu, 0x00000eebu, 0x00000ef0u, 0x0003003eu, 0x00000ef1u, 0x00000eeau, 0x0004003du, 0x00000006u, 0x00000ef4u, 0x00000ee0u, 0x000500c7u, 0x00000006u, 0x00000ef5u, 0x00000ef4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000ef6u, 0x00000ef5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000ef8u, 0x00000eeau, 0x00000ef6u, 0x0003003eu, 0x00000ef1u, 0x00000ef8u, 0x000500c6u, 0x00000006u, 0x00000efau, 0x00000ef8u, 0x00000464u, 0x0003003eu, 0x00000ef1u, 0x00000efau, 0x0004003du, 0x00000006u, 0x00000efcu, 0x0000014bu, 0x00080041u, 0x00000671u, 0x00000efeu, 0x00000e7fu, 0x00000220u, 0x00000efcu, 0x00000220u, 0x00000efau, 0x0004003du, 0x0000000fu, 0x00000effu, 0x00000efeu, 0x00040071u, 0x00000006u, 0x00000f00u, 0x00000effu, 0x0003003eu, 0x00000efbu, 0x00000f00u, 0x000500c2u, 0x00000006u, 0x00000f03u, 0x00000f00u, 0x00000ef0u, 0x000500c7u, 0x00000006u, 0x00000f04u, 0x00000f03u, 0x00000e88u, 0x0003003eu, 0x00000efbu, 0x00000f04u, 0x0004003du, 0x00000006u, 0x00000f05u, 0x0000014du, 0x000500c4u, 0x00000006u, 0x00000f06u, 0x00000f05u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00000f08u, 0x00000f04u, 0x00000f06u, 0x0003003eu, 0x00000efbu, 0x00000f08u, 0x00040071u, 0x00000011u, 0x00000f0au, 0x00000f08u, 0x0004007cu, 0x00000012u, 0x00000f0bu, 0x00000f0au, 0x00070050u, 0x00000013u, 0x00000f0cu, 0x00000f0bu, 0x00000f0bu, 0x00000f0bu, 0x00000f0bu, 0x000200feu, 0x00000f0cu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000158u, 0x00000000u, 0x00000150u, 0x00030037u, 0x00000128u, 0x00000151u, 0x00030037u, 0x00000007u, 0x00000152u, 0x00030037u, 0x000000b1u, 0x00000153u, 0x00030037u, 0x00000007u, 0x00000154u, 0x00030037u, 0x00000007u, 0x00000155u, 0x00030037u, 0x00000007u, 0x00000156u, 0x00030037u, 0x0000006au, 0x00000157u, 0x000200f8u, 0x00000159u, 0x0004003bu, 0x00000007u, 0x00000f0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f3eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000f55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f5cu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f10u, 0x00000151u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000f11u, 0x00000f10u, 0x00050041u, 0x00000007u, 0x00000f12u, 0x00000151u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000f13u, 0x00000f12u, 0x00050041u, 0x00000007u, 0x00000f14u, 0x00000153u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000f15u, 0x00000f14u, 0x00050084u, 0x00000006u, 0x00000f16u, 0x00000f13u, 0x00000f15u, 0x00050080u, 0x00000006u, 0x00000f17u, 0x00000f11u, 0x00000f16u, 0x0003003eu, 0x00000f0fu, 0x00000f17u, 0x00050041u, 0x00000007u, 0x00000f18u, 0x00000153u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000f19u, 0x00000f18u, 0x000500c2u, 0x00000006u, 0x00000f1au, 0x00000f19u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000f1cu, 0x00000f17u, 0x00000f1au, 0x0003003eu, 0x00000f0fu, 0x00000f1cu, 0x000500c7u, 0x00000006u, 0x00000f1fu, 0x00000f1cu, 0x00000f1du, 0x0003003eu, 0x00000f0fu, 0x00000f1fu, 0x0004003du, 0x00000006u, 0x00000f22u, 0x00000f18u, 0x000400c8u, 0x00000006u, 0x00000f23u, 0x00000f22u, 0x000500c7u, 0x00000006u, 0x00000f24u, 0x00000f23u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000f25u, 0x00000f24u, 0x00000704u, 0x0003003eu, 0x00000f20u, 0x00000f25u, 0x0003003eu, 0x00000f26u, 0x00000f1fu, 0x0004003du, 0x00000006u, 0x00000f29u, 0x00000f14u, 0x000500c7u, 0x00000006u, 0x00000f2au, 0x00000f29u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000f2bu, 0x00000f2au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000f2du, 0x00000f1fu, 0x00000f2bu, 0x0003003eu, 0x00000f26u, 0x00000f2du, 0x000500c6u, 0x00000006u, 0x00000f2fu, 0x00000f2du, 0x00000464u, 0x0003003eu, 0x00000f26u, 0x00000f2fu, 0x0004003du, 0x00000006u, 0x00000f31u, 0x00000152u, 0x00080041u, 0x00000671u, 0x00000f33u, 0x00000e7fu, 0x00000220u, 0x00000f31u, 0x00000220u, 0x00000f2fu, 0x0004003du, 0x0000000fu, 0x00000f34u, 0x00000f33u, 0x00040071u, 0x00000006u, 0x00000f35u, 0x00000f34u, 0x0003003eu, 0x00000f30u, 0x00000f35u, 0x000500c2u, 0x00000006u, 0x00000f38u, 0x00000f35u, 0x00000f25u, 0x000500c7u, 0x00000006u, 0x00000f39u, 0x00000f38u, 0x00000e88u, 0x0003003eu, 0x00000f30u, 0x00000f39u, 0x0004003du, 0x00000006u, 0x00000f3au, 0x00000154u, 0x000500c4u, 0x00000006u, 0x00000f3bu, 0x00000f3au, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00000f3du, 0x00000f39u, 0x00000f3bu, 0x0003003eu, 0x00000f30u, 0x00000f3du, 0x000500c4u, 0x00000006u, 0x00000f40u, 0x00000f3du, 0x0000022du, 0x0004003du, 0x00000006u, 0x00000f41u, 0x00000155u, 0x00050080u, 0x00000006u, 0x00000f42u, 0x00000f40u, 0x00000f41u, 0x0003003eu, 0x00000f3eu, 0x00000f42u, 0x0004003du, 0x00000006u, 0x00000f43u, 0x00000156u, 0x000500c6u, 0x00000006u, 0x00000f45u, 0x00000f42u, 0x00000f43u, 0x0003003eu, 0x00000f3eu, 0x00000f45u, 0x0004003du, 0x00000006u, 0x00000f4du, 0x00000152u, 0x000500c5u, 0x00000006u, 0x00000f50u, 0x00000f4eu, 0x00000f45u, 0x00080041u, 0x00000692u, 0x00000f51u, 0x00000f4cu, 0x00000220u, 0x00000f4du, 0x00000220u, 0x00000f50u, 0x0004003du, 0x00000011u, 0x00000f52u, 0x00000f51u, 0x00040071u, 0x00000006u, 0x00000f53u, 0x00000f52u, 0x0003003eu, 0x00000f30u, 0x00000f53u, 0x0004003du, 0x00000069u, 0x00000f54u, 0x00000157u, 0x000300f7u, 0x00000f57u, 0x00000000u, 0x000400fau, 0x00000f54u, 0x00000f56u, 0x00000f5bu, 0x000200f8u, 0x00000f56u, 0x0003003eu, 0x00000f58u, 0x00000f53u, 0x00050039u, 0x00000013u, 0x00000f5au, 0x0000013cu, 0x00000f58u, 0x0003003eu, 0x00000f55u, 0x00000f5au, 0x000200f9u, 0x00000f57u, 0x000200f8u, 0x00000f5bu, 0x0003003eu, 0x00000f5cu, 0x00000f53u, 0x00050039u, 0x00000013u, 0x00000f5eu, 0x00000139u, 0x00000f5cu, 0x0003003eu, 0x00000f55u, 0x00000f5eu, 0x000200f9u, 0x00000f57u, 0x000200f8u, 0x00000f57u, 0x000700f5u, 0x00000013u, 0x0000ef2du, 0x00000f5au, 0x00000f56u, 0x00000f5eu, 0x00000f5bu, 0x000200feu, 0x0000ef2du, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000161u, 0x00000000u, 0x0000015au, 0x00030037u, 0x00000128u, 0x0000015bu, 0x00030037u, 0x00000007u, 0x0000015cu, 0x00030037u, 0x000000b1u, 0x0000015du, 0x00030037u, 0x00000007u, 0x0000015eu, 0x00030037u, 0x00000007u, 0x0000015fu, 0x00030037u, 0x0000006au, 0x00000160u, 0x000200f8u, 0x00000162u, 0x0004003bu, 0x00000007u, 0x00000f62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f81u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000f90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f97u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f63u, 0x0000015bu, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000f64u, 0x00000f63u, 0x00050041u, 0x00000007u, 0x00000f65u, 0x0000015bu, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000f66u, 0x00000f65u, 0x00050041u, 0x00000007u, 0x00000f67u, 0x0000015du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000f68u, 0x00000f67u, 0x00050084u, 0x00000006u, 0x00000f69u, 0x00000f66u, 0x00000f68u, 0x00050080u, 0x00000006u, 0x00000f6au, 0x00000f64u, 0x00000f69u, 0x0003003eu, 0x00000f62u, 0x00000f6au, 0x00050041u, 0x00000007u, 0x00000f6bu, 0x0000015du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000f6cu, 0x00000f6bu, 0x00050080u, 0x00000006u, 0x00000f6eu, 0x00000f6au, 0x00000f6cu, 0x0003003eu, 0x00000f62u, 0x00000f6eu, 0x000500c7u, 0x00000006u, 0x00000f70u, 0x00000f6eu, 0x00000f1du, 0x0003003eu, 0x00000f62u, 0x00000f70u, 0x0003003eu, 0x00000f71u, 0x00000f70u, 0x0004003du, 0x00000006u, 0x00000f74u, 0x00000f67u, 0x000500c7u, 0x00000006u, 0x00000f75u, 0x00000f74u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000f76u, 0x00000f75u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000f78u, 0x00000f70u, 0x00000f76u, 0x0003003eu, 0x00000f71u, 0x00000f78u, 0x000500c6u, 0x00000006u, 0x00000f7au, 0x00000f78u, 0x00000464u, 0x0003003eu, 0x00000f71u, 0x00000f7au, 0x0004003du, 0x00000006u, 0x00000f7cu, 0x0000015cu, 0x00080041u, 0x00000671u, 0x00000f7eu, 0x00000e7fu, 0x00000220u, 0x00000f7cu, 0x00000220u, 0x00000f7au, 0x0004003du, 0x0000000fu, 0x00000f7fu, 0x00000f7eu, 0x00040071u, 0x00000006u, 0x00000f80u, 0x00000f7fu, 0x0003003eu, 0x00000f7bu, 0x00000f80u, 0x000500c4u, 0x00000006u, 0x00000f83u, 0x00000f80u, 0x0000022du, 0x0004003du, 0x00000006u, 0x00000f84u, 0x0000015eu, 0x00050080u, 0x00000006u, 0x00000f85u, 0x00000f83u, 0x00000f84u, 0x0003003eu, 0x00000f81u, 0x00000f85u, 0x0004003du, 0x00000006u, 0x00000f86u, 0x0000015fu, 0x000500c6u, 0x00000006u, 0x00000f88u, 0x00000f85u, 0x00000f86u, 0x0003003eu, 0x00000f81u, 0x00000f88u, 0x0004003du, 0x00000006u, 0x00000f89u, 0x0000015cu, 0x000500c5u, 0x00000006u, 0x00000f8bu, 0x00000f4eu, 0x00000f88u, 0x00080041u, 0x00000692u, 0x00000f8cu, 0x00000f4cu, 0x00000220u, 0x00000f89u, 0x00000220u, 0x00000f8bu, 0x0004003du, 0x00000011u, 0x00000f8du, 0x00000f8cu, 0x00040071u, 0x00000006u, 0x00000f8eu, 0x00000f8du, 0x0003003eu, 0x00000f7bu, 0x00000f8eu, 0x0004003du, 0x00000069u, 0x00000f8fu, 0x00000160u, 0x000300f7u, 0x00000f92u, 0x00000000u, 0x000400fau, 0x00000f8fu, 0x00000f91u, 0x00000f96u, 0x000200f8u, 0x00000f91u, 0x0003003eu, 0x00000f93u, 0x00000f8eu, 0x00050039u, 0x00000013u, 0x00000f95u, 0x0000013cu, 0x00000f93u, 0x0003003eu, 0x00000f90u, 0x00000f95u, 0x000200f9u, 0x00000f92u, 0x000200f8u, 0x00000f96u, 0x0003003eu, 0x00000f97u, 0x00000f8eu, 0x00050039u, 0x00000013u, 0x00000f99u, 0x00000139u, 0x00000f97u, 0x0003003eu, 0x00000f90u, 0x00000f99u, 0x000200f9u, 0x00000f92u, 0x000200f8u, 0x00000f92u, 0x000700f5u, 0x00000013u, 0x0000ef2eu, 0x00000f95u, 0x00000f91u, 0x00000f99u, 0x00000f96u, 0x000200feu, 0x0000ef2eu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000166u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000163u, 0x00030037u, 0x00000007u, 0x00000164u, 0x00030037u, 0x000000b1u, 0x00000165u, 0x000200f8u, 0x00000167u, 0x0004003bu, 0x00000007u, 0x00000f9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fb8u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f9eu, 0x00000163u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000f9fu, 0x00000f9eu, 0x00050041u, 0x00000007u, 0x00000fa0u, 0x00000163u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000fa1u, 0x00000fa0u, 0x00050041u, 0x00000007u, 0x00000fa2u, 0x00000165u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000fa3u, 0x00000fa2u, 0x00050084u, 0x00000006u, 0x00000fa4u, 0x00000fa1u, 0x00000fa3u, 0x00050080u, 0x00000006u, 0x00000fa5u, 0x00000f9fu, 0x00000fa4u, 0x0003003eu, 0x00000f9du, 0x00000fa5u, 0x00050041u, 0x00000007u, 0x00000fa6u, 0x00000165u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000fa7u, 0x00000fa6u, 0x00050084u, 0x00000006u, 0x00000fa8u, 0x00000fa7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00000faau, 0x00000fa5u, 0x00000fa8u, 0x0003003eu, 0x00000f9du, 0x00000faau, 0x000500c7u, 0x00000006u, 0x00000facu, 0x00000faau, 0x00000e65u, 0x0003003eu, 0x00000f9du, 0x00000facu, 0x000500c2u, 0x00000006u, 0x00000fafu, 0x00000facu, 0x0000022au, 0x0003003eu, 0x00000fadu, 0x00000fafu, 0x0004003du, 0x00000006u, 0x00000fb1u, 0x00000fa2u, 0x000500c7u, 0x00000006u, 0x00000fb2u, 0x00000fb1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000fb3u, 0x00000fb2u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00000fb5u, 0x00000fafu, 0x00000fb3u, 0x0003003eu, 0x00000fadu, 0x00000fb5u, 0x000500c6u, 0x00000006u, 0x00000fb7u, 0x00000fb5u, 0x0000045cu, 0x0003003eu, 0x00000fadu, 0x00000fb7u, 0x0004003du, 0x00000006u, 0x00000fb9u, 0x00000164u, 0x00080041u, 0x00000692u, 0x00000fbbu, 0x00000f4cu, 0x00000220u, 0x00000fb9u, 0x00000220u, 0x00000fb7u, 0x0004003du, 0x00000011u, 0x00000fbcu, 0x00000fbbu, 0x00040071u, 0x00000006u, 0x00000fbdu, 0x00000fbcu, 0x0003003eu, 0x00000fb8u, 0x00000fbdu, 0x000500c2u, 0x00000006u, 0x00000fbfu, 0x00000fbdu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00000fc0u, 0x00000fbfu, 0x0004007cu, 0x00000012u, 0x00000fc1u, 0x00000fc0u, 0x000500c7u, 0x00000006u, 0x00000fc3u, 0x00000fbdu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00000fc4u, 0x00000fc3u, 0x0004007cu, 0x00000012u, 0x00000fc5u, 0x00000fc4u, 0x00050050u, 0x000001aeu, 0x00000fc6u, 0x00000fc1u, 0x00000fc5u, 0x0009004fu, 0x00000013u, 0x00000fc7u, 0x00000fc6u, 0x00000fc6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000fc7u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000016eu, 0x00000000u, 0x0000015au, 0x00030037u, 0x00000128u, 0x00000168u, 0x00030037u, 0x00000007u, 0x00000169u, 0x00030037u, 0x000000b1u, 0x0000016au, 0x00030037u, 0x00000007u, 0x0000016bu, 0x00030037u, 0x00000007u, 0x0000016cu, 0x00030037u, 0x0000006au, 0x0000016du, 0x000200f8u, 0x0000016fu, 0x0004003bu, 0x00000007u, 0x00000fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fe5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000febu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000ffcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001003u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000fcbu, 0x00000168u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000fccu, 0x00000fcbu, 0x00050041u, 0x00000007u, 0x00000fcdu, 0x00000168u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000fceu, 0x00000fcdu, 0x00050041u, 0x00000007u, 0x00000fcfu, 0x0000016au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000fd0u, 0x00000fcfu, 0x00050084u, 0x00000006u, 0x00000fd1u, 0x00000fceu, 0x00000fd0u, 0x00050080u, 0x00000006u, 0x00000fd2u, 0x00000fccu, 0x00000fd1u, 0x0003003eu, 0x00000fcau, 0x00000fd2u, 0x00050041u, 0x00000007u, 0x00000fd3u, 0x0000016au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000fd4u, 0x00000fd3u, 0x00050084u, 0x00000006u, 0x00000fd5u, 0x00000fd4u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00000fd7u, 0x00000fd2u, 0x00000fd5u, 0x0003003eu, 0x00000fcau, 0x00000fd7u, 0x000500c7u, 0x00000006u, 0x00000fd9u, 0x00000fd7u, 0x00000f1du, 0x0003003eu, 0x00000fcau, 0x00000fd9u, 0x000500c2u, 0x00000006u, 0x00000fdcu, 0x00000fd9u, 0x0000022au, 0x0003003eu, 0x00000fdau, 0x00000fdcu, 0x0004003du, 0x00000006u, 0x00000fdeu, 0x00000fcfu, 0x000500c7u, 0x00000006u, 0x00000fdfu, 0x00000fdeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000fe0u, 0x00000fdfu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00000fe2u, 0x00000fdcu, 0x00000fe0u, 0x0003003eu, 0x00000fdau, 0x00000fe2u, 0x000500c6u, 0x00000006u, 0x00000fe4u, 0x00000fe2u, 0x0000045cu, 0x0003003eu, 0x00000fdau, 0x00000fe4u, 0x0004003du, 0x00000006u, 0x00000fe6u, 0x00000169u, 0x00080041u, 0x00000692u, 0x00000fe8u, 0x00000f4cu, 0x00000220u, 0x00000fe6u, 0x00000220u, 0x00000fe4u, 0x0004003du, 0x00000011u, 0x00000fe9u, 0x00000fe8u, 0x00040071u, 0x00000006u, 0x00000feau, 0x00000fe9u, 0x0003003eu, 0x00000fe5u, 0x00000feau, 0x000500c2u, 0x00000006u, 0x00000fedu, 0x00000feau, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00000fefu, 0x00000fedu, 0x00000feeu, 0x0004003du, 0x00000006u, 0x00000ff0u, 0x0000016bu, 0x00050080u, 0x00000006u, 0x00000ff1u, 0x00000fefu, 0x00000ff0u, 0x0003003eu, 0x00000febu, 0x00000ff1u, 0x0004003du, 0x00000006u, 0x00000ff2u, 0x0000016cu, 0x000500c6u, 0x00000006u, 0x00000ff4u, 0x00000ff1u, 0x00000ff2u, 0x0003003eu, 0x00000febu, 0x00000ff4u, 0x0004003du, 0x00000006u, 0x00000ff5u, 0x00000169u, 0x000500c5u, 0x00000006u, 0x00000ff7u, 0x00000f4eu, 0x00000ff4u, 0x00080041u, 0x00000692u, 0x00000ff8u, 0x00000f4cu, 0x00000220u, 0x00000ff5u, 0x00000220u, 0x00000ff7u, 0x0004003du, 0x00000011u, 0x00000ff9u, 0x00000ff8u, 0x00040071u, 0x00000006u, 0x00000ffau, 0x00000ff9u, 0x0003003eu, 0x00000fe5u, 0x00000ffau, 0x0004003du, 0x00000069u, 0x00000ffbu, 0x0000016du, 0x000300f7u, 0x00000ffeu, 0x00000000u, 0x000400fau, 0x00000ffbu, 0x00000ffdu, 0x00001002u, 0x000200f8u, 0x00000ffdu, 0x0003003eu, 0x00000fffu, 0x00000ffau, 0x00050039u, 0x00000013u, 0x00001001u, 0x0000013cu, 0x00000fffu, 0x0003003eu, 0x00000ffcu, 0x00001001u, 0x000200f9u, 0x00000ffeu, 0x000200f8u, 0x00001002u, 0x0003003eu, 0x00001003u, 0x00000ffau, 0x00050039u, 0x00000013u, 0x00001005u, 0x00000139u, 0x00001003u, 0x0003003eu, 0x00000ffcu, 0x00001005u, 0x000200f9u, 0x00000ffeu, 0x000200f8u, 0x00000ffeu, 0x000700f5u, 0x00000013u, 0x0000ef2fu, 0x00001001u, 0x00000ffdu, 0x00001005u, 0x00001002u, 0x000200feu, 0x0000ef2fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000173u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000170u, 0x00030037u, 0x00000007u, 0x00000171u, 0x00030037u, 0x000000b1u, 0x00000172u, 0x000200f8u, 0x00000174u, 0x0004003bu, 0x00000007u, 0x00001009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001018u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001022u, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000100au, 0x00000170u, 0x00000233u, 0x0004003du, 0x00000006u, 0x0000100bu, 0x0000100au, 0x00050041u, 0x00000007u, 0x0000100cu, 0x00000170u, 0x00000236u, 0x0004003du, 0x00000006u, 0x0000100du, 0x0000100cu, 0x00050041u, 0x00000007u, 0x0000100eu, 0x00000172u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000100fu, 0x0000100eu, 0x00050084u, 0x00000006u, 0x00001010u, 0x0000100du, 0x0000100fu, 0x00050080u, 0x00000006u, 0x00001011u, 0x0000100bu, 0x00001010u, 0x0003003eu, 0x00001009u, 0x00001011u, 0x00050041u, 0x00000007u, 0x00001012u, 0x00000172u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001013u, 0x00001012u, 0x00050080u, 0x00000006u, 0x00001015u, 0x00001011u, 0x00001013u, 0x0003003eu, 0x00001009u, 0x00001015u, 0x000500c7u, 0x00000006u, 0x00001017u, 0x00001015u, 0x00000e65u, 0x0003003eu, 0x00001009u, 0x00001017u, 0x0003003eu, 0x00001018u, 0x00001017u, 0x0004003du, 0x00000006u, 0x0000101bu, 0x0000100eu, 0x000500c7u, 0x00000006u, 0x0000101cu, 0x0000101bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000101du, 0x0000101cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000101fu, 0x00001017u, 0x0000101du, 0x0003003eu, 0x00001018u, 0x0000101fu, 0x000500c6u, 0x00000006u, 0x00001021u, 0x0000101fu, 0x00000464u, 0x0003003eu, 0x00001018u, 0x00001021u, 0x0004003du, 0x00000006u, 0x00001023u, 0x00000171u, 0x00080041u, 0x00000671u, 0x00001025u, 0x00000e7fu, 0x00000220u, 0x00001023u, 0x00000220u, 0x00001021u, 0x0004003du, 0x0000000fu, 0x00001026u, 0x00001025u, 0x00040071u, 0x00000006u, 0x00001027u, 0x00001026u, 0x0003003eu, 0x00001022u, 0x00001027u, 0x00040071u, 0x00000011u, 0x00001029u, 0x00001027u, 0x0004007cu, 0x00000012u, 0x0000102au, 0x00001029u, 0x00070050u, 0x00000013u, 0x0000102bu, 0x0000102au, 0x0000102au, 0x0000102au, 0x0000102au, 0x000200feu, 0x0000102bu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000178u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000175u, 0x00030037u, 0x00000007u, 0x00000176u, 0x00030037u, 0x000000b1u, 0x00000177u, 0x000200f8u, 0x00000179u, 0x0004003bu, 0x00000007u, 0x0000102eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000103du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001047u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000104du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001050u, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000102fu, 0x00000175u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00001030u, 0x0000102fu, 0x00050041u, 0x00000007u, 0x00001031u, 0x00000175u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00001032u, 0x00001031u, 0x00050041u, 0x00000007u, 0x00001033u, 0x00000177u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001034u, 0x00001033u, 0x00050084u, 0x00000006u, 0x00001035u, 0x00001032u, 0x00001034u, 0x00050080u, 0x00000006u, 0x00001036u, 0x00001030u, 0x00001035u, 0x0003003eu, 0x0000102eu, 0x00001036u, 0x00050041u, 0x00000007u, 0x00001037u, 0x00000177u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001038u, 0x00001037u, 0x00050080u, 0x00000006u, 0x0000103au, 0x00001036u, 0x00001038u, 0x0003003eu, 0x0000102eu, 0x0000103au, 0x000500c7u, 0x00000006u, 0x0000103cu, 0x0000103au, 0x00000e65u, 0x0003003eu, 0x0000102eu, 0x0000103cu, 0x0003003eu, 0x0000103du, 0x0000103cu, 0x0004003du, 0x00000006u, 0x00001040u, 0x00001033u, 0x000500c7u, 0x00000006u, 0x00001041u, 0x00001040u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001042u, 0x00001041u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00001044u, 0x0000103cu, 0x00001042u, 0x0003003eu, 0x0000103du, 0x00001044u, 0x000500c6u, 0x00000006u, 0x00001046u, 0x00001044u, 0x00000464u, 0x0003003eu, 0x0000103du, 0x00001046u, 0x0004003du, 0x00000006u, 0x00001048u, 0x00000176u, 0x00080041u, 0x00000671u, 0x0000104au, 0x00000e7fu, 0x00000220u, 0x00001048u, 0x00000220u, 0x00001046u, 0x0004003du, 0x0000000fu, 0x0000104bu, 0x0000104au, 0x00040071u, 0x00000006u, 0x0000104cu, 0x0000104bu, 0x0003003eu, 0x00001047u, 0x0000104cu, 0x000500c2u, 0x00000006u, 0x0000104fu, 0x0000104cu, 0x00000233u, 0x0003003eu, 0x0000104du, 0x0000104fu, 0x000500c7u, 0x00000006u, 0x00001052u, 0x0000104cu, 0x00000e88u, 0x0003003eu, 0x00001050u, 0x00001052u, 0x000500c4u, 0x00000006u, 0x00001054u, 0x00001052u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00001056u, 0x00001052u, 0x00001054u, 0x0003003eu, 0x00001050u, 0x00001056u, 0x000500c4u, 0x00000006u, 0x00001058u, 0x0000104fu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000105au, 0x0000104fu, 0x00001058u, 0x0003003eu, 0x0000104du, 0x0000105au, 0x00040071u, 0x00000011u, 0x0000105cu, 0x0000105au, 0x0004007cu, 0x00000012u, 0x0000105du, 0x0000105cu, 0x00040071u, 0x00000011u, 0x00001065u, 0x00001056u, 0x0004007cu, 0x00000012u, 0x00001066u, 0x00001065u, 0x00070050u, 0x00000013u, 0x00001067u, 0x0000105du, 0x0000105du, 0x0000105du, 0x00001066u, 0x000200feu, 0x00001067u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000017eu, 0x00000000u, 0x00000149u, 0x00030037u, 0x00000128u, 0x0000017au, 0x00030037u, 0x00000007u, 0x0000017bu, 0x00030037u, 0x000000b1u, 0x0000017cu, 0x00030037u, 0x00000007u, 0x0000017du, 0x000200f8u, 0x0000017fu, 0x0004003bu, 0x00000007u, 0x0000106au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001073u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000107au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001081u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000108bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001096u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000109cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000010a1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000010a7u, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000106bu, 0x0000017au, 0x00000233u, 0x0004003du, 0x00000006u, 0x0000106cu, 0x0000106bu, 0x00050041u, 0x00000007u, 0x0000106du, 0x0000017au, 0x00000236u, 0x0004003du, 0x00000006u, 0x0000106eu, 0x0000106du, 0x00050041u, 0x00000007u, 0x0000106fu, 0x0000017cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001070u, 0x0000106fu, 0x00050084u, 0x00000006u, 0x00001071u, 0x0000106eu, 0x00001070u, 0x00050080u, 0x00000006u, 0x00001072u, 0x0000106cu, 0x00001071u, 0x0003003eu, 0x0000106au, 0x00001072u, 0x00050041u, 0x00000007u, 0x00001075u, 0x0000017cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001076u, 0x00001075u, 0x00050080u, 0x00000006u, 0x00001077u, 0x00001072u, 0x00001076u, 0x0003003eu, 0x00001073u, 0x00001077u, 0x000500c7u, 0x00000006u, 0x00001079u, 0x00001077u, 0x00000f1du, 0x0003003eu, 0x00001073u, 0x00001079u, 0x0004003du, 0x00000006u, 0x0000107cu, 0x0000017du, 0x00050084u, 0x00000006u, 0x0000107du, 0x0000107cu, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000107eu, 0x00001072u, 0x0000107du, 0x0003003eu, 0x0000107au, 0x0000107eu, 0x000500c7u, 0x00000006u, 0x00001080u, 0x0000107eu, 0x00000f1du, 0x0003003eu, 0x0000107au, 0x00001080u, 0x0003003eu, 0x00001081u, 0x00001079u, 0x0004003du, 0x00000006u, 0x00001084u, 0x0000106fu, 0x000500c7u, 0x00000006u, 0x00001085u, 0x00001084u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001086u, 0x00001085u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00001088u, 0x00001079u, 0x00001086u, 0x0003003eu, 0x00001081u, 0x00001088u, 0x000500c6u, 0x00000006u, 0x0000108au, 0x00001088u, 0x00000464u, 0x0003003eu, 0x00001081u, 0x0000108au, 0x000500c2u, 0x00000006u, 0x0000108du, 0x00001080u, 0x0000022au, 0x0003003eu, 0x0000108bu, 0x0000108du, 0x0004003du, 0x00000006u, 0x0000108fu, 0x0000106fu, 0x000500c7u, 0x00000006u, 0x00001090u, 0x0000108fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001091u, 0x00001090u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00001093u, 0x0000108du, 0x00001091u, 0x0003003eu, 0x0000108bu, 0x00001093u, 0x000500c6u, 0x00000006u, 0x00001095u, 0x00001093u, 0x0000045cu, 0x0003003eu, 0x0000108bu, 0x00001095u, 0x0004003du, 0x00000006u, 0x00001097u, 0x0000017bu, 0x000500c5u, 0x00000006u, 0x00001099u, 0x0000108au, 0x00000f46u, 0x00080041u, 0x00000671u, 0x0000109au, 0x00000e7fu, 0x00000220u, 0x00001097u, 0x00000220u, 0x00001099u, 0x0004003du, 0x0000000fu, 0x0000109bu, 0x0000109au, 0x0003003eu, 0x00001096u, 0x0000109bu, 0x0004003du, 0x00000006u, 0x0000109du, 0x0000017bu, 0x00080041u, 0x00000692u, 0x0000109fu, 0x00000f4cu, 0x00000220u, 0x0000109du, 0x00000220u, 0x00001095u, 0x0004003du, 0x00000011u, 0x000010a0u, 0x0000109fu, 0x0003003eu, 0x0000109cu, 0x000010a0u, 0x000500c2u, 0x00000011u, 0x000010a4u, 0x000010a0u, 0x000010a3u, 0x000500c7u, 0x00000011u, 0x000010a5u, 0x000010a4u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000010a6u, 0x000010a5u, 0x0003003eu, 0x000010a1u, 0x000010a6u, 0x000500c2u, 0x00000011u, 0x000010a9u, 0x000010a0u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x000010aau, 0x000010a9u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000010abu, 0x000010aau, 0x0003003eu, 0x000010a7u, 0x000010abu, 0x00040071u, 0x00000011u, 0x000010adu, 0x000010a6u, 0x0004007cu, 0x00000012u, 0x000010aeu, 0x000010adu, 0x00050082u, 0x00000012u, 0x000010b0u, 0x000010aeu, 0x000010afu, 0x00040071u, 0x00000011u, 0x000010b2u, 0x000010abu, 0x0004007cu, 0x00000012u, 0x000010b3u, 0x000010b2u, 0x00050082u, 0x00000012u, 0x000010b4u, 0x000010b3u, 0x000010afu, 0x00040071u, 0x00000011u, 0x000010b6u, 0x0000109bu, 0x0004007cu, 0x00000012u, 0x000010b7u, 0x000010b6u, 0x00070050u, 0x00000013u, 0x000010bbu, 0x000010b0u, 0x000010b4u, 0x000010b7u, 0x000010b7u, 0x000200feu, 0x000010bbu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000183u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000180u, 0x00030037u, 0x00000007u, 0x00000181u, 0x00030037u, 0x000000b1u, 0x00000182u, 0x000200f8u, 0x00000184u, 0x0004003bu, 0x00000007u, 0x000010beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010dfu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010bfu, 0x00000180u, 0x00000233u, 0x0004003du, 0x00000006u, 0x000010c0u, 0x000010bfu, 0x00050041u, 0x00000007u, 0x000010c1u, 0x00000180u, 0x00000236u, 0x0004003du, 0x00000006u, 0x000010c2u, 0x000010c1u, 0x00050041u, 0x00000007u, 0x000010c3u, 0x00000182u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000010c4u, 0x000010c3u, 0x00050084u, 0x00000006u, 0x000010c5u, 0x000010c2u, 0x000010c4u, 0x00050080u, 0x00000006u, 0x000010c6u, 0x000010c0u, 0x000010c5u, 0x0003003eu, 0x000010beu, 0x000010c6u, 0x00050041u, 0x00000007u, 0x000010c7u, 0x00000182u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000010c8u, 0x000010c7u, 0x00050084u, 0x00000006u, 0x000010c9u, 0x000010c8u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000010cbu, 0x000010c6u, 0x000010c9u, 0x0003003eu, 0x000010beu, 0x000010cbu, 0x000500c7u, 0x00000006u, 0x000010cdu, 0x000010cbu, 0x00000e65u, 0x0003003eu, 0x000010beu, 0x000010cdu, 0x000500c2u, 0x00000006u, 0x000010d0u, 0x000010cdu, 0x0000022au, 0x0003003eu, 0x000010ceu, 0x000010d0u, 0x0004003du, 0x00000006u, 0x000010d2u, 0x000010c3u, 0x000500c7u, 0x00000006u, 0x000010d3u, 0x000010d2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000010d4u, 0x000010d3u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000010d6u, 0x000010d0u, 0x000010d4u, 0x0003003eu, 0x000010ceu, 0x000010d6u, 0x000500c6u, 0x00000006u, 0x000010d8u, 0x000010d6u, 0x0000045cu, 0x0003003eu, 0x000010ceu, 0x000010d8u, 0x0004003du, 0x00000006u, 0x000010dau, 0x00000181u, 0x00080041u, 0x00000692u, 0x000010dcu, 0x00000f4cu, 0x00000220u, 0x000010dau, 0x00000220u, 0x000010d8u, 0x0004003du, 0x00000011u, 0x000010ddu, 0x000010dcu, 0x00040071u, 0x00000006u, 0x000010deu, 0x000010ddu, 0x0003003eu, 0x000010d9u, 0x000010deu, 0x0003003eu, 0x000010dfu, 0x000010deu, 0x00050039u, 0x00000013u, 0x000010e1u, 0x00000139u, 0x000010dfu, 0x000200feu, 0x000010e1u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000188u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000185u, 0x00030037u, 0x00000007u, 0x00000186u, 0x00030037u, 0x000000b1u, 0x00000187u, 0x000200f8u, 0x00000189u, 0x0004003bu, 0x00000007u, 0x000010e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001105u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010e5u, 0x00000185u, 0x00000233u, 0x0004003du, 0x00000006u, 0x000010e6u, 0x000010e5u, 0x00050041u, 0x00000007u, 0x000010e7u, 0x00000185u, 0x00000236u, 0x0004003du, 0x00000006u, 0x000010e8u, 0x000010e7u, 0x00050041u, 0x00000007u, 0x000010e9u, 0x00000187u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000010eau, 0x000010e9u, 0x00050084u, 0x00000006u, 0x000010ebu, 0x000010e8u, 0x000010eau, 0x00050080u, 0x00000006u, 0x000010ecu, 0x000010e6u, 0x000010ebu, 0x0003003eu, 0x000010e4u, 0x000010ecu, 0x00050041u, 0x00000007u, 0x000010edu, 0x00000187u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000010eeu, 0x000010edu, 0x00050084u, 0x00000006u, 0x000010efu, 0x000010eeu, 0x00000386u, 0x00050080u, 0x00000006u, 0x000010f1u, 0x000010ecu, 0x000010efu, 0x0003003eu, 0x000010e4u, 0x000010f1u, 0x000500c7u, 0x00000006u, 0x000010f3u, 0x000010f1u, 0x00000e65u, 0x0003003eu, 0x000010e4u, 0x000010f3u, 0x000500c2u, 0x00000006u, 0x000010f6u, 0x000010f3u, 0x0000022au, 0x0003003eu, 0x000010f4u, 0x000010f6u, 0x0004003du, 0x00000006u, 0x000010f8u, 0x000010e9u, 0x000500c7u, 0x00000006u, 0x000010f9u, 0x000010f8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000010fau, 0x000010f9u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000010fcu, 0x000010f6u, 0x000010fau, 0x0003003eu, 0x000010f4u, 0x000010fcu, 0x000500c6u, 0x00000006u, 0x000010feu, 0x000010fcu, 0x0000045cu, 0x0003003eu, 0x000010f4u, 0x000010feu, 0x0004003du, 0x00000006u, 0x00001100u, 0x00000186u, 0x00080041u, 0x00000692u, 0x00001102u, 0x00000f4cu, 0x00000220u, 0x00001100u, 0x00000220u, 0x000010feu, 0x0004003du, 0x00000011u, 0x00001103u, 0x00001102u, 0x00040071u, 0x00000006u, 0x00001104u, 0x00001103u, 0x0003003eu, 0x000010ffu, 0x00001104u, 0x0003003eu, 0x00001105u, 0x00001104u, 0x00050039u, 0x00000013u, 0x00001107u, 0x0000013cu, 0x00001105u, 0x000200feu, 0x00001107u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000018du, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x0000018au, 0x00030037u, 0x00000007u, 0x0000018bu, 0x00030037u, 0x000000b1u, 0x0000018cu, 0x000200f8u, 0x0000018eu, 0x0004003bu, 0x00000007u, 0x0000110au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000111au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001125u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000112bu, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000110bu, 0x0000018au, 0x00000233u, 0x0004003du, 0x00000006u, 0x0000110cu, 0x0000110bu, 0x00050041u, 0x00000007u, 0x0000110du, 0x0000018au, 0x00000236u, 0x0004003du, 0x00000006u, 0x0000110eu, 0x0000110du, 0x00050041u, 0x00000007u, 0x0000110fu, 0x0000018cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001110u, 0x0000110fu, 0x00050084u, 0x00000006u, 0x00001111u, 0x0000110eu, 0x00001110u, 0x00050080u, 0x00000006u, 0x00001112u, 0x0000110cu, 0x00001111u, 0x0003003eu, 0x0000110au, 0x00001112u, 0x00050041u, 0x00000007u, 0x00001113u, 0x0000018cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001114u, 0x00001113u, 0x00050084u, 0x00000006u, 0x00001115u, 0x00001114u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00001117u, 0x00001112u, 0x00001115u, 0x0003003eu, 0x0000110au, 0x00001117u, 0x000500c7u, 0x00000006u, 0x00001119u, 0x00001117u, 0x00000f1du, 0x0003003eu, 0x0000110au, 0x00001119u, 0x000500c2u, 0x00000006u, 0x0000111cu, 0x00001119u, 0x0000022au, 0x0003003eu, 0x0000111au, 0x0000111cu, 0x0004003du, 0x00000006u, 0x0000111eu, 0x0000110fu, 0x000500c7u, 0x00000006u, 0x0000111fu, 0x0000111eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001120u, 0x0000111fu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00001122u, 0x0000111cu, 0x00001120u, 0x0003003eu, 0x0000111au, 0x00001122u, 0x000500c6u, 0x00000006u, 0x00001124u, 0x00001122u, 0x0000045cu, 0x0003003eu, 0x0000111au, 0x00001124u, 0x0004003du, 0x00000006u, 0x00001126u, 0x0000018bu, 0x00080041u, 0x00000692u, 0x00001128u, 0x00000f4cu, 0x00000220u, 0x00001126u, 0x00000220u, 0x00001124u, 0x0004003du, 0x00000011u, 0x00001129u, 0x00001128u, 0x00040071u, 0x00000006u, 0x0000112au, 0x00001129u, 0x0003003eu, 0x00001125u, 0x0000112au, 0x0004003du, 0x00000006u, 0x0000112cu, 0x0000018bu, 0x000500c5u, 0x00000006u, 0x0000112eu, 0x00001124u, 0x00000f4eu, 0x00080041u, 0x00000692u, 0x0000112fu, 0x00000f4cu, 0x00000220u, 0x0000112cu, 0x00000220u, 0x0000112eu, 0x0004003du, 0x00000011u, 0x00001130u, 0x0000112fu, 0x00040071u, 0x00000006u, 0x00001131u, 0x00001130u, 0x0003003eu, 0x0000112bu, 0x00001131u, 0x000500c2u, 0x00000006u, 0x00001133u, 0x0000112au, 0x0000025du, 0x00040071u, 0x00000011u, 0x00001134u, 0x00001133u, 0x0004007cu, 0x00000012u, 0x00001135u, 0x00001134u, 0x000500c7u, 0x00000006u, 0x00001137u, 0x0000112au, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00001138u, 0x00001137u, 0x0004007cu, 0x00000012u, 0x00001139u, 0x00001138u, 0x000500c2u, 0x00000006u, 0x0000113bu, 0x00001131u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000113cu, 0x0000113bu, 0x0004007cu, 0x00000012u, 0x0000113du, 0x0000113cu, 0x000500c7u, 0x00000006u, 0x0000113fu, 0x00001131u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00001140u, 0x0000113fu, 0x0004007cu, 0x00000012u, 0x00001141u, 0x00001140u, 0x00070050u, 0x00000013u, 0x00001142u, 0x00001135u, 0x00001139u, 0x0000113du, 0x00001141u, 0x000200feu, 0x00001142u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000195u, 0x00000000u, 0x0000018fu, 0x00030037u, 0x0000006au, 0x00000190u, 0x00030037u, 0x00000046u, 0x00000191u, 0x00030037u, 0x00000046u, 0x00000192u, 0x00030037u, 0x00000046u, 0x00000193u, 0x00030037u, 0x00000046u, 0x00000194u, 0x000200f8u, 0x00000196u, 0x0004003bu, 0x0000006au, 0x00001159u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001145u, 0x00000191u, 0x0008000cu, 0x00000008u, 0x00001146u, 0x00000001u, 0x0000002du, 0x00001145u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x00000191u, 0x00001146u, 0x0004003du, 0x00000008u, 0x00001147u, 0x00000194u, 0x000500b1u, 0x00000069u, 0x00001148u, 0x00001147u, 0x00000266u, 0x000300f7u, 0x0000114au, 0x00000000u, 0x000400fau, 0x00001148u, 0x00001149u, 0x0000114eu, 0x000200f8u, 0x00001149u, 0x0004003du, 0x00000008u, 0x0000114bu, 0x00000194u, 0x0004003du, 0x00000008u, 0x0000114cu, 0x00000191u, 0x000500c3u, 0x00000008u, 0x0000114du, 0x0000114cu, 0x0000114bu, 0x0003003eu, 0x00000191u, 0x0000114du, 0x000200f9u, 0x0000114au, 0x000200f8u, 0x0000114eu, 0x0004003du, 0x00000008u, 0x00001150u, 0x00000194u, 0x00050082u, 0x00000008u, 0x00001151u, 0x0000114fu, 0x00001150u, 0x0004003du, 0x00000008u, 0x00001152u, 0x00000191u, 0x000500c4u, 0x00000008u, 0x00001153u, 0x00001152u, 0x00001151u, 0x0003003eu, 0x00000191u, 0x00001153u, 0x0004003du, 0x00000008u, 0x00001154u, 0x00000191u, 0x000500c3u, 0x00000008u, 0x00001155u, 0x00001154u, 0x00000554u, 0x0003003eu, 0x00000191u, 0x00001155u, 0x000200f9u, 0x0000114au, 0x000200f8u, 0x0000114au, 0x0004003du, 0x00000069u, 0x00001156u, 0x00000190u, 0x000300f7u, 0x00001158u, 0x00000000u, 0x000400fau, 0x00001156u, 0x00001157u, 0x0000116fu, 0x000200f8u, 0x00001157u, 0x0004003du, 0x00000008u, 0x0000115au, 0x00000191u, 0x000500c3u, 0x00000008u, 0x0000115bu, 0x0000115au, 0x00000230u, 0x0004003du, 0x00000008u, 0x0000115cu, 0x00000193u, 0x000500afu, 0x00000069u, 0x0000115du, 0x0000115bu, 0x0000115cu, 0x0003003eu, 0x00001159u, 0x0000115du, 0x000300f7u, 0x00001160u, 0x00000000u, 0x000400fau, 0x0000115du, 0x0000115fu, 0x00001169u, 0x000200f8u, 0x0000115fu, 0x0004003du, 0x00000008u, 0x00001161u, 0x00000193u, 0x000500c3u, 0x00000008u, 0x00001162u, 0x00001161u, 0x0000022du, 0x0004003du, 0x00000008u, 0x00001163u, 0x00000192u, 0x000500c3u, 0x00000008u, 0x00001164u, 0x00001163u, 0x0000022du, 0x00050082u, 0x00000008u, 0x00001165u, 0x00001162u, 0x00001164u, 0x000500c7u, 0x00000008u, 0x00001167u, 0x00001165u, 0x00001166u, 0x000500c4u, 0x00000008u, 0x00001168u, 0x00001167u, 0x00000236u, 0x0003003eu, 0x00000191u, 0x00001168u, 0x000200f9u, 0x00001160u, 0x000200f8u, 0x00001169u, 0x0004003du, 0x00000008u, 0x0000116au, 0x00000191u, 0x0004003du, 0x00000008u, 0x0000116bu, 0x00000192u, 0x000500c4u, 0x00000008u, 0x0000116cu, 0x0000116bu, 0x00000230u, 0x00050082u, 0x00000008u, 0x0000116du, 0x0000116au, 0x0000116cu, 0x0007000cu, 0x00000008u, 0x0000116eu, 0x00000001u, 0x0000002au, 0x0000116du, 0x00000220u, 0x0003003eu, 0x00000191u, 0x0000116eu, 0x000200f9u, 0x00001160u, 0x000200f8u, 0x00001160u, 0x000200f9u, 0x00001158u, 0x000200f8u, 0x0000116fu, 0x0004003du, 0x00000008u, 0x00001170u, 0x00000192u, 0x000500c4u, 0x00000008u, 0x00001171u, 0x00001170u, 0x00000230u, 0x0004003du, 0x00000008u, 0x00001172u, 0x00000191u, 0x00050082u, 0x00000008u, 0x00001173u, 0x00001172u, 0x00001171u, 0x0003003eu, 0x00000191u, 0x00001173u, 0x000200f9u, 0x00001158u, 0x000200f8u, 0x00001158u, 0x0004003du, 0x00000008u, 0x00001174u, 0x00000191u, 0x000200feu, 0x00001174u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000019bu, 0x00000000u, 0x00000197u, 0x00030037u, 0x00000046u, 0x00000198u, 0x00030037u, 0x00000046u, 0x00000199u, 0x00030037u, 0x00000046u, 0x0000019au, 0x000200f8u, 0x0000019cu, 0x0004003du, 0x00000008u, 0x00001177u, 0x00000198u, 0x0008000cu, 0x00000008u, 0x00001178u, 0x00000001u, 0x0000002du, 0x00001177u, 0x00000c52u, 0x00000c0du, 0x0003003eu, 0x00000198u, 0x00001178u, 0x0004003du, 0x00000008u, 0x00001179u, 0x0000019au, 0x000500b1u, 0x00000069u, 0x0000117au, 0x00001179u, 0x00000266u, 0x000300f7u, 0x0000117cu, 0x00000000u, 0x000400fau, 0x0000117au, 0x0000117bu, 0x00001180u, 0x000200f8u, 0x0000117bu, 0x0004003du, 0x00000008u, 0x0000117du, 0x0000019au, 0x0004003du, 0x00000008u, 0x0000117eu, 0x00000198u, 0x000500c3u, 0x00000008u, 0x0000117fu, 0x0000117eu, 0x0000117du, 0x0003003eu, 0x00000198u, 0x0000117fu, 0x000200f9u, 0x0000117cu, 0x000200f8u, 0x00001180u, 0x0004003du, 0x00000008u, 0x00001181u, 0x0000019au, 0x00050082u, 0x00000008u, 0x00001182u, 0x0000114fu, 0x00001181u, 0x0004003du, 0x00000008u, 0x00001183u, 0x00000198u, 0x000500c4u, 0x00000008u, 0x00001184u, 0x00001183u, 0x00001182u, 0x0003003eu, 0x00000198u, 0x00001184u, 0x0004003du, 0x00000008u, 0x00001185u, 0x00000198u, 0x000500c3u, 0x00000008u, 0x00001186u, 0x00001185u, 0x00000554u, 0x0003003eu, 0x00000198u, 0x00001186u, 0x000200f9u, 0x0000117cu, 0x000200f8u, 0x0000117cu, 0x0004003du, 0x00000008u, 0x00001187u, 0x00000199u, 0x000500c4u, 0x00000008u, 0x00001188u, 0x00001187u, 0x00000230u, 0x0004003du, 0x00000008u, 0x00001189u, 0x00000198u, 0x00050082u, 0x00000008u, 0x0000118au, 0x00001189u, 0x00001188u, 0x0003003eu, 0x00000198u, 0x0000118au, 0x0004003du, 0x00000008u, 0x0000118bu, 0x00000198u, 0x000200feu, 0x0000118bu, 0x00010038u, 0x00050036u, 0x00000008u, 0x000001a4u, 0x00000000u, 0x0000019du, 0x00030037u, 0x00000128u, 0x0000019eu, 0x00030037u, 0x00000007u, 0x0000019fu, 0x00030037u, 0x00000106u, 0x000001a0u, 0x00030037u, 0x00000046u, 0x000001a1u, 0x00030037u, 0x0000006au, 0x000001a2u, 0x00030037u, 0x0000006au, 0x000001a3u, 0x000200f8u, 0x000001a5u, 0x0004003bu, 0x0000006au, 0x0000118eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001191u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000119eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000011a4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011aau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000011b8u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000011b9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011bbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011bfu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000011c0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011c6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000011cfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000011e3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011ecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011f5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000123cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001247u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001248u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000124au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000124eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000124fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001251u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001255u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000125eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000126du, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000118fu, 0x000001a1u, 0x000500b1u, 0x00000069u, 0x00001190u, 0x0000118fu, 0x0000022du, 0x0003003eu, 0x0000118eu, 0x00001190u, 0x000300f7u, 0x00001194u, 0x00000000u, 0x000400fau, 0x00001190u, 0x00001193u, 0x00001194u, 0x000200f8u, 0x00001193u, 0x00050041u, 0x0000007bu, 0x00001195u, 0x0000019eu, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x00001196u, 0x00001195u, 0x00040071u, 0x00000006u, 0x00001197u, 0x00001196u, 0x0004007cu, 0x00000008u, 0x00001198u, 0x00001197u, 0x000500abu, 0x00000069u, 0x00001199u, 0x00001198u, 0x0000022du, 0x000200f9u, 0x00001194u, 0x000200f8u, 0x00001194u, 0x000700f5u, 0x00000069u, 0x0000119au, 0x00001190u, 0x000001a5u, 0x00001199u, 0x00001193u, 0x0004003du, 0x00000069u, 0x0000119bu, 0x000001a2u, 0x000400a8u, 0x00000069u, 0x0000119cu, 0x0000119bu, 0x000500a7u, 0x00000069u, 0x0000119du, 0x0000119au, 0x0000119cu, 0x0003003eu, 0x00001191u, 0x0000119du, 0x00050041u, 0x0000007bu, 0x0000119fu, 0x0000019eu, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000011a0u, 0x0000119fu, 0x00040071u, 0x00000006u, 0x000011a1u, 0x000011a0u, 0x0004007cu, 0x00000008u, 0x000011a2u, 0x000011a1u, 0x0007000cu, 0x00000008u, 0x000011a3u, 0x00000001u, 0x00000027u, 0x000011a2u, 0x0000022du, 0x0003003eu, 0x0000119eu, 0x000011a3u, 0x0004003du, 0x0000000fu, 0x000011a6u, 0x0000119fu, 0x00040071u, 0x00000006u, 0x000011a7u, 0x000011a6u, 0x0004007cu, 0x00000008u, 0x000011a8u, 0x000011a7u, 0x000500aau, 0x00000069u, 0x000011a9u, 0x000011a8u, 0x00000230u, 0x0003003eu, 0x000011a4u, 0x000011a9u, 0x0004003du, 0x00000069u, 0x000011acu, 0x000001a2u, 0x000500a6u, 0x00000069u, 0x000011adu, 0x000011a9u, 0x000011acu, 0x000600a9u, 0x00000008u, 0x000011aeu, 0x000011adu, 0x00001166u, 0x000003dau, 0x0003003eu, 0x000011aau, 0x000011aeu, 0x000300f7u, 0x000011b1u, 0x00000000u, 0x000400fau, 0x0000119du, 0x000011b0u, 0x00001241u, 0x000200f8u, 0x000011b0u, 0x0004003du, 0x00000008u, 0x000011b2u, 0x000001a1u, 0x00050084u, 0x00000008u, 0x000011b3u, 0x0000022du, 0x000011b2u, 0x00050041u, 0x00000046u, 0x000011b4u, 0x000001a0u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000011b5u, 0x000011b4u, 0x00050080u, 0x00000008u, 0x000011b6u, 0x000011b5u, 0x000011b3u, 0x0003003eu, 0x000011b4u, 0x000011b6u, 0x0004003du, 0x00000023u, 0x000011bau, 0x0000019eu, 0x0003003eu, 0x000011b9u, 0x000011bau, 0x0004003du, 0x00000008u, 0x000011bdu, 0x000011b4u, 0x0003003eu, 0x000011bbu, 0x000011bdu, 0x00060039u, 0x000000efu, 0x000011beu, 0x00000131u, 0x000011b9u, 0x000011bbu, 0x0003003eu, 0x000011b8u, 0x000011beu, 0x0004003du, 0x00000023u, 0x000011c1u, 0x0000019eu, 0x0003003eu, 0x000011c0u, 0x000011c1u, 0x00050041u, 0x00000046u, 0x000011c3u, 0x000001a0u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000011c4u, 0x000011c3u, 0x0003003eu, 0x000011c2u, 0x000011c4u, 0x00060039u, 0x00000008u, 0x000011c5u, 0x00000135u, 0x000011c0u, 0x000011c2u, 0x0003003eu, 0x000011bfu, 0x000011c5u, 0x00050041u, 0x00000007u, 0x000011c7u, 0x0000019eu, 0x00000233u, 0x0004003du, 0x00000006u, 0x000011c8u, 0x000011c7u, 0x00050041u, 0x00000007u, 0x000011c9u, 0x0000019eu, 0x00000236u, 0x0004003du, 0x00000006u, 0x000011cau, 0x000011c9u, 0x0004007cu, 0x00000006u, 0x000011ccu, 0x000011c5u, 0x00050084u, 0x00000006u, 0x000011cdu, 0x000011cau, 0x000011ccu, 0x00050080u, 0x00000006u, 0x000011ceu, 0x000011c8u, 0x000011cdu, 0x0003003eu, 0x000011c6u, 0x000011ceu, 0x00050084u, 0x00000006u, 0x000011d1u, 0x000011ceu, 0x00000386u, 0x00050050u, 0x000000efu, 0x000011d4u, 0x000011a3u, 0x000011a3u, 0x000500c4u, 0x000000efu, 0x000011d5u, 0x000011beu, 0x000011d4u, 0x0004007cu, 0x000000b0u, 0x000011d6u, 0x000011d5u, 0x00050050u, 0x000000b0u, 0x000011d7u, 0x000011d1u, 0x000011d1u, 0x00050080u, 0x000000b0u, 0x000011d8u, 0x000011d7u, 0x000011d6u, 0x000500c7u, 0x000000b0u, 0x000011dbu, 0x000011d8u, 0x0000f37au, 0x0003003eu, 0x000011cfu, 0x000011dbu, 0x000500c7u, 0x00000006u, 0x000011deu, 0x000011ccu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000011dfu, 0x000011deu, 0x00000314u, 0x0004003du, 0x000000b0u, 0x000011e0u, 0x000011cfu, 0x00050050u, 0x000000b0u, 0x000011e1u, 0x000011dfu, 0x000011dfu, 0x000500c6u, 0x000000b0u, 0x000011e2u, 0x000011e0u, 0x000011e1u, 0x0003003eu, 0x000011cfu, 0x000011e2u, 0x0004003du, 0x000000b0u, 0x000011e4u, 0x000011cfu, 0x000500c2u, 0x000000b0u, 0x000011e6u, 0x000011e4u, 0x0000f37bu, 0x0003003eu, 0x000011e3u, 0x000011e6u, 0x0004007cu, 0x00000006u, 0x000011e8u, 0x000011aeu, 0x0004003du, 0x000000b0u, 0x000011e9u, 0x000011e3u, 0x00050050u, 0x000000b0u, 0x000011eau, 0x000011e8u, 0x000011e8u, 0x000500c7u, 0x000000b0u, 0x000011ebu, 0x000011e9u, 0x000011eau, 0x0003003eu, 0x000011e3u, 0x000011ebu, 0x0004003du, 0x00000006u, 0x000011edu, 0x0000019fu, 0x00050041u, 0x00000007u, 0x000011eeu, 0x000011e3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000011efu, 0x000011eeu, 0x000500c6u, 0x00000006u, 0x000011f0u, 0x000011efu, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000011f1u, 0x00000f4cu, 0x00000220u, 0x000011edu, 0x00000220u, 0x000011f0u, 0x0004003du, 0x00000011u, 0x000011f2u, 0x000011f1u, 0x00040071u, 0x00000006u, 0x000011f3u, 0x000011f2u, 0x0004007cu, 0x00000008u, 0x000011f4u, 0x000011f3u, 0x0003003eu, 0x000011ecu, 0x000011f4u, 0x0004003du, 0x00000006u, 0x000011f6u, 0x0000019fu, 0x00050041u, 0x00000007u, 0x000011f7u, 0x000011e3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000011f8u, 0x000011f7u, 0x000500c6u, 0x00000006u, 0x000011f9u, 0x000011f8u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000011fau, 0x00000f4cu, 0x00000220u, 0x000011f6u, 0x00000220u, 0x000011f9u, 0x0004003du, 0x00000011u, 0x000011fbu, 0x000011fau, 0x00040071u, 0x00000006u, 0x000011fcu, 0x000011fbu, 0x0004007cu, 0x00000008u, 0x000011fdu, 0x000011fcu, 0x0003003eu, 0x000011f5u, 0x000011fdu, 0x0004003du, 0x0000000fu, 0x000011ffu, 0x0000119fu, 0x00040071u, 0x00000006u, 0x00001200u, 0x000011ffu, 0x0004007cu, 0x00000008u, 0x00001201u, 0x00001200u, 0x000500aau, 0x00000069u, 0x00001202u, 0x00001201u, 0x0000022au, 0x000300f7u, 0x00001204u, 0x00000000u, 0x000400fau, 0x00001202u, 0x00001203u, 0x00001219u, 0x000200f8u, 0x00001203u, 0x00050041u, 0x00000007u, 0x00001205u, 0x000011cfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001206u, 0x00001205u, 0x000500c7u, 0x00000006u, 0x00001207u, 0x00001206u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x00001208u, 0x00001207u, 0x00050084u, 0x00000008u, 0x00001209u, 0x00000233u, 0x00001208u, 0x00050082u, 0x00000008u, 0x0000120au, 0x0000025du, 0x00001209u, 0x000500c3u, 0x00000008u, 0x0000120cu, 0x000011f4u, 0x0000120au, 0x0003003eu, 0x000011ecu, 0x0000120cu, 0x00050041u, 0x00000007u, 0x0000120du, 0x000011cfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000120eu, 0x0000120du, 0x000500c7u, 0x00000006u, 0x0000120fu, 0x0000120eu, 0x00000386u, 0x0004007cu, 0x00000008u, 0x00001210u, 0x0000120fu, 0x00050084u, 0x00000008u, 0x00001211u, 0x00000233u, 0x00001210u, 0x00050082u, 0x00000008u, 0x00001212u, 0x0000025du, 0x00001211u, 0x000500c3u, 0x00000008u, 0x00001214u, 0x000011fdu, 0x00001212u, 0x0003003eu, 0x000011f5u, 0x00001214u, 0x000500c7u, 0x00000008u, 0x00001216u, 0x0000120cu, 0x0000035eu, 0x0003003eu, 0x000011ecu, 0x00001216u, 0x000500c7u, 0x00000008u, 0x00001218u, 0x00001214u, 0x0000035eu, 0x0003003eu, 0x000011f5u, 0x00001218u, 0x000200f9u, 0x00001204u, 0x000200f8u, 0x00001219u, 0x0004003du, 0x0000000fu, 0x0000121bu, 0x0000119fu, 0x00040071u, 0x00000006u, 0x0000121cu, 0x0000121bu, 0x0004007cu, 0x00000008u, 0x0000121du, 0x0000121cu, 0x000500aau, 0x00000069u, 0x0000121eu, 0x0000121du, 0x00000220u, 0x000300f7u, 0x00001220u, 0x00000000u, 0x000400fau, 0x0000121eu, 0x0000121fu, 0x00001237u, 0x000200f8u, 0x0000121fu, 0x00050041u, 0x00000007u, 0x00001221u, 0x000011cfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001222u, 0x00001221u, 0x000500c7u, 0x00000006u, 0x00001223u, 0x00001222u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00001224u, 0x00001223u, 0x00050084u, 0x00000008u, 0x00001225u, 0x00000233u, 0x00001224u, 0x00050082u, 0x00000008u, 0x00001226u, 0x00000269u, 0x00001225u, 0x000500c3u, 0x00000008u, 0x00001228u, 0x000011f4u, 0x00001226u, 0x0003003eu, 0x000011ecu, 0x00001228u, 0x00050041u, 0x00000007u, 0x00001229u, 0x000011cfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000122au, 0x00001229u, 0x000500c7u, 0x00000006u, 0x0000122bu, 0x0000122au, 0x00000464u, 0x0004007cu, 0x00000008u, 0x0000122cu, 0x0000122bu, 0x00050084u, 0x00000008u, 0x0000122du, 0x00000233u, 0x0000122cu, 0x00050082u, 0x00000008u, 0x0000122eu, 0x00000269u, 0x0000122du, 0x000500c3u, 0x00000008u, 0x00001230u, 0x000011fdu, 0x0000122eu, 0x0003003eu, 0x000011f5u, 0x00001230u, 0x000500c7u, 0x00000008u, 0x00001232u, 0x00001228u, 0x00000533u, 0x00050084u, 0x00000008u, 0x00001233u, 0x00001232u, 0x000003f2u, 0x0003003eu, 0x000011ecu, 0x00001233u, 0x000500c7u, 0x00000008u, 0x00001235u, 0x00001230u, 0x00000533u, 0x00050084u, 0x00000008u, 0x00001236u, 0x00001235u, 0x000003f2u, 0x0003003eu, 0x000011f5u, 0x00001236u, 0x000200f9u, 0x00001220u, 0x000200f8u, 0x00001237u, 0x000500c3u, 0x00000008u, 0x00001239u, 0x000011f4u, 0x0000025du, 0x0003003eu, 0x000011ecu, 0x00001239u, 0x000500c3u, 0x00000008u, 0x0000123bu, 0x000011fdu, 0x0000025du, 0x0003003eu, 0x000011f5u, 0x0000123bu, 0x000200f9u, 0x00001220u, 0x000200f8u, 0x00001220u, 0x000700f5u, 0x00000008u, 0x0000ef34u, 0x00001236u, 0x0000121fu, 0x0000123bu, 0x00001237u, 0x000700f5u, 0x00000008u, 0x0000ef32u, 0x00001233u, 0x0000121fu, 0x00001239u, 0x00001237u, 0x000200f9u, 0x00001204u, 0x000200f8u, 0x00001204u, 0x000700f5u, 0x00000008u, 0x0000ef33u, 0x00001218u, 0x00001203u, 0x0000ef34u, 0x00001220u, 0x000700f5u, 0x00000008u, 0x0000ef31u, 0x00001216u, 0x00001203u, 0x0000ef32u, 0x00001220u, 0x000500c4u, 0x00000008u, 0x0000123eu, 0x0000ef31u, 0x0000025du, 0x000500c5u, 0x00000008u, 0x00001240u, 0x0000123eu, 0x0000ef33u, 0x0003003eu, 0x0000123cu, 0x00001240u, 0x000200f9u, 0x000011b1u, 0x000200f8u, 0x00001241u, 0x0004003du, 0x00000008u, 0x00001242u, 0x000001a1u, 0x00050041u, 0x00000046u, 0x00001243u, 0x000001a0u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001244u, 0x00001243u, 0x00050080u, 0x00000008u, 0x00001245u, 0x00001244u, 0x00001242u, 0x0003003eu, 0x00001243u, 0x00001245u, 0x0004003du, 0x00000023u, 0x00001249u, 0x0000019eu, 0x0003003eu, 0x00001248u, 0x00001249u, 0x0004003du, 0x00000008u, 0x0000124cu, 0x00001243u, 0x0003003eu, 0x0000124au, 0x0000124cu, 0x00060039u, 0x00000008u, 0x0000124du, 0x0000012cu, 0x00001248u, 0x0000124au, 0x0003003eu, 0x00001247u, 0x0000124du, 0x0004003du, 0x00000023u, 0x00001250u, 0x0000019eu, 0x0003003eu, 0x0000124fu, 0x00001250u, 0x00050041u, 0x00000046u, 0x00001252u, 0x000001a0u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001253u, 0x00001252u, 0x0003003eu, 0x00001251u, 0x00001253u, 0x00060039u, 0x00000008u, 0x00001254u, 0x00000135u, 0x0000124fu, 0x00001251u, 0x0003003eu, 0x0000124eu, 0x00001254u, 0x00050041u, 0x00000007u, 0x00001256u, 0x0000019eu, 0x00000233u, 0x0004003du, 0x00000006u, 0x00001257u, 0x00001256u, 0x00050041u, 0x00000007u, 0x00001258u, 0x0000019eu, 0x00000236u, 0x0004003du, 0x00000006u, 0x00001259u, 0x00001258u, 0x0004007cu, 0x00000006u, 0x0000125bu, 0x00001254u, 0x00050084u, 0x00000006u, 0x0000125cu, 0x00001259u, 0x0000125bu, 0x00050080u, 0x00000006u, 0x0000125du, 0x00001257u, 0x0000125cu, 0x0003003eu, 0x00001255u, 0x0000125du, 0x00050084u, 0x00000006u, 0x00001260u, 0x0000125du, 0x00000386u, 0x000500c4u, 0x00000008u, 0x00001263u, 0x0000124du, 0x000011a3u, 0x0004007cu, 0x00000006u, 0x00001264u, 0x00001263u, 0x00050080u, 0x00000006u, 0x00001265u, 0x00001260u, 0x00001264u, 0x000500c7u, 0x00000006u, 0x00001266u, 0x00001265u, 0x000011d9u, 0x0003003eu, 0x0000125eu, 0x00001266u, 0x000500c7u, 0x00000006u, 0x00001269u, 0x0000125bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000126au, 0x00001269u, 0x00000314u, 0x000500c6u, 0x00000006u, 0x0000126cu, 0x00001266u, 0x0000126au, 0x0003003eu, 0x0000125eu, 0x0000126cu, 0x000500c2u, 0x00000006u, 0x0000126fu, 0x0000126cu, 0x00000386u, 0x0003003eu, 0x0000126du, 0x0000126fu, 0x0004007cu, 0x00000006u, 0x00001271u, 0x000011aeu, 0x000500c7u, 0x00000006u, 0x00001273u, 0x0000126fu, 0x00001271u, 0x0003003eu, 0x0000126du, 0x00001273u, 0x0004003du, 0x00000006u, 0x00001274u, 0x0000019fu, 0x000500c6u, 0x00000006u, 0x00001276u, 0x00001273u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00001277u, 0x00000f4cu, 0x00000220u, 0x00001274u, 0x00000220u, 0x00001276u, 0x0004003du, 0x00000011u, 0x00001278u, 0x00001277u, 0x00040071u, 0x00000006u, 0x00001279u, 0x00001278u, 0x0004007cu, 0x00000008u, 0x0000127au, 0x00001279u, 0x0003003eu, 0x0000123cu, 0x0000127au, 0x0004003du, 0x00000069u, 0x0000127bu, 0x000001a2u, 0x000300f7u, 0x0000127du, 0x00000000u, 0x000400fau, 0x0000127bu, 0x0000127cu, 0x0000127du, 0x000200f8u, 0x0000127cu, 0x0004003du, 0x0000000fu, 0x0000127fu, 0x0000119fu, 0x00040071u, 0x00000006u, 0x00001280u, 0x0000127fu, 0x0004007cu, 0x00000008u, 0x00001281u, 0x00001280u, 0x000500aau, 0x00000069u, 0x00001282u, 0x00001281u, 0x00000220u, 0x000300f7u, 0x00001284u, 0x00000000u, 0x000400fau, 0x00001282u, 0x00001283u, 0x0000129au, 0x000200f8u, 0x00001283u, 0x000500c7u, 0x00000006u, 0x00001287u, 0x0000126cu, 0x00000464u, 0x00050084u, 0x00000006u, 0x00001288u, 0x00000704u, 0x00001287u, 0x00050082u, 0x00000006u, 0x00001289u, 0x00001285u, 0x00001288u, 0x000500c3u, 0x00000008u, 0x0000128bu, 0x0000127au, 0x00001289u, 0x0003003eu, 0x0000123cu, 0x0000128bu, 0x000500c7u, 0x00000008u, 0x0000128du, 0x0000128bu, 0x00000533u, 0x0003003eu, 0x0000123cu, 0x0000128du, 0x00050041u, 0x0000007bu, 0x0000128eu, 0x0000019eu, 0x0000025du, 0x0004003du, 0x0000000fu, 0x0000128fu, 0x0000128eu, 0x000500c4u, 0x0000000fu, 0x00001290u, 0x0000128fu, 0x00000233u, 0x00040071u, 0x00000006u, 0x00001291u, 0x00001290u, 0x0004007cu, 0x00000008u, 0x00001292u, 0x00001291u, 0x000500c5u, 0x00000008u, 0x00001294u, 0x0000128du, 0x00001292u, 0x0003003eu, 0x0000123cu, 0x00001294u, 0x000500c4u, 0x00000008u, 0x00001296u, 0x00001294u, 0x0000022du, 0x0003003eu, 0x0000123cu, 0x00001296u, 0x0004003du, 0x00000008u, 0x00001297u, 0x000001a1u, 0x00050080u, 0x00000008u, 0x00001299u, 0x00001296u, 0x00001297u, 0x0003003eu, 0x0000123cu, 0x00001299u, 0x000200f9u, 0x00001284u, 0x000200f8u, 0x0000129au, 0x000500c7u, 0x00000006u, 0x0000129cu, 0x0000126cu, 0x00000386u, 0x00050084u, 0x00000006u, 0x0000129du, 0x00000704u, 0x0000129cu, 0x00050082u, 0x00000006u, 0x0000129eu, 0x00000314u, 0x0000129du, 0x000500c3u, 0x00000008u, 0x000012a0u, 0x0000127au, 0x0000129eu, 0x0003003eu, 0x0000123cu, 0x000012a0u, 0x000500c7u, 0x00000008u, 0x000012a2u, 0x000012a0u, 0x0000035eu, 0x0003003eu, 0x0000123cu, 0x000012a2u, 0x000500c4u, 0x00000008u, 0x000012a4u, 0x000012a2u, 0x0000022du, 0x0003003eu, 0x0000123cu, 0x000012a4u, 0x0004003du, 0x00000008u, 0x000012a5u, 0x000001a1u, 0x00050080u, 0x00000008u, 0x000012a7u, 0x000012a4u, 0x000012a5u, 0x0003003eu, 0x0000123cu, 0x000012a7u, 0x000200f9u, 0x00001284u, 0x000200f8u, 0x00001284u, 0x000700f5u, 0x00000008u, 0x0000ef30u, 0x00001299u, 0x00001283u, 0x000012a7u, 0x0000129au, 0x0004003du, 0x00000006u, 0x000012a8u, 0x0000019fu, 0x000500c5u, 0x00000008u, 0x000012abu, 0x0000ef30u, 0x000012aau, 0x000500c6u, 0x00000008u, 0x000012acu, 0x000012abu, 0x0000022au, 0x00080041u, 0x00000692u, 0x000012adu, 0x00000f4cu, 0x00000220u, 0x000012a8u, 0x00000220u, 0x000012acu, 0x0004003du, 0x00000011u, 0x000012aeu, 0x000012adu, 0x00040071u, 0x00000006u, 0x000012afu, 0x000012aeu, 0x0004007cu, 0x00000008u, 0x000012b0u, 0x000012afu, 0x0003003eu, 0x0000123cu, 0x000012b0u, 0x000200f9u, 0x0000127du, 0x000200f8u, 0x0000127du, 0x000700f5u, 0x00000008u, 0x0000ef36u, 0x0000127au, 0x00001241u, 0x000012b0u, 0x00001284u, 0x000200f9u, 0x000011b1u, 0x000200f8u, 0x000011b1u, 0x000700f5u, 0x00000008u, 0x0000ef35u, 0x00001240u, 0x00001204u, 0x0000ef36u, 0x0000127du, 0x000200feu, 0x0000ef35u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000001acu, 0x00000000u, 0x0000019du, 0x00030037u, 0x00000128u, 0x000001a6u, 0x00030037u, 0x00000007u, 0x000001a7u, 0x00030037u, 0x00000106u, 0x000001a8u, 0x00030037u, 0x00000046u, 0x000001a9u, 0x00030037u, 0x0000006au, 0x000001aau, 0x00030037u, 0x0000006au, 0x000001abu, 0x000200f8u, 0x000001adu, 0x0004003bu, 0x00000046u, 0x000012bbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012beu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012bfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012ccu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012cdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012d8u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000012e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000012e3u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000012e5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012e7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000012e8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000012eau, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000012f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000012f8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000012fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012fcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000012feu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001300u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000012b4u, 0x000001a6u, 0x00000220u, 0x0004003du, 0x00000006u, 0x000012b5u, 0x000012b4u, 0x0004007cu, 0x00000008u, 0x000012b6u, 0x000012b5u, 0x00050041u, 0x0000007bu, 0x000012b7u, 0x000001a6u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x000012b8u, 0x000012b7u, 0x00040071u, 0x00000006u, 0x000012b9u, 0x000012b8u, 0x0004007cu, 0x00000008u, 0x000012bau, 0x000012b9u, 0x00050041u, 0x00000046u, 0x000012bcu, 0x000001a8u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000012bdu, 0x000012bcu, 0x0003003eu, 0x000012bbu, 0x000012bdu, 0x0003003eu, 0x000012beu, 0x000012b6u, 0x0003003eu, 0x000012bfu, 0x000012bau, 0x00070039u, 0x00000008u, 0x000012c0u, 0x0000019bu, 0x000012bbu, 0x000012beu, 0x000012bfu, 0x0003003eu, 0x000012bcu, 0x000012c0u, 0x00050041u, 0x00000007u, 0x000012c2u, 0x000001a6u, 0x0000022du, 0x0004003du, 0x00000006u, 0x000012c3u, 0x000012c2u, 0x0004007cu, 0x00000008u, 0x000012c4u, 0x000012c3u, 0x00050041u, 0x0000007bu, 0x000012c5u, 0x000001a6u, 0x00000269u, 0x0004003du, 0x0000000fu, 0x000012c6u, 0x000012c5u, 0x00040071u, 0x00000006u, 0x000012c7u, 0x000012c6u, 0x0004007cu, 0x00000008u, 0x000012c8u, 0x000012c7u, 0x00050041u, 0x00000046u, 0x000012cau, 0x000001a8u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000012cbu, 0x000012cau, 0x0003003eu, 0x000012c9u, 0x000012cbu, 0x0003003eu, 0x000012ccu, 0x000012c4u, 0x0003003eu, 0x000012cdu, 0x000012c8u, 0x00070039u, 0x00000008u, 0x000012ceu, 0x0000019bu, 0x000012c9u, 0x000012ccu, 0x000012cdu, 0x0003003eu, 0x000012cau, 0x000012ceu, 0x0004003du, 0x000000efu, 0x000012d0u, 0x000001a8u, 0x000500c3u, 0x000000efu, 0x000012d2u, 0x000012d0u, 0x0000f378u, 0x0003003eu, 0x000001a8u, 0x000012d2u, 0x00060041u, 0x00000ccau, 0x000012d3u, 0x00000cc9u, 0x00000220u, 0x0000022du, 0x0004003du, 0x00000008u, 0x000012d4u, 0x000012d3u, 0x000500aau, 0x00000069u, 0x000012d5u, 0x000012d4u, 0x00000220u, 0x000300f7u, 0x000012d7u, 0x00000000u, 0x000400fau, 0x000012d5u, 0x000012d6u, 0x000012d9u, 0x000200f8u, 0x000012d6u, 0x0003003eu, 0x000012d8u, 0x00000220u, 0x000200f9u, 0x000012d7u, 0x000200f8u, 0x000012d9u, 0x000500aau, 0x00000069u, 0x000012dcu, 0x000012d4u, 0x0000022au, 0x000300f7u, 0x000012deu, 0x00000000u, 0x000400fau, 0x000012dcu, 0x000012ddu, 0x000012f5u, 0x000200f8u, 0x000012ddu, 0x0004003du, 0x00000008u, 0x000012dfu, 0x000001a9u, 0x000500c3u, 0x00000008u, 0x000012e0u, 0x000012dfu, 0x0000022au, 0x0004003du, 0x00000023u, 0x000012e2u, 0x000001a6u, 0x0003003eu, 0x000012e1u, 0x000012e2u, 0x0004003du, 0x00000006u, 0x000012e4u, 0x000001a7u, 0x0003003eu, 0x000012e3u, 0x000012e4u, 0x0004003du, 0x000000efu, 0x000012e6u, 0x000001a8u, 0x0003003eu, 0x000012e5u, 0x000012e6u, 0x0003003eu, 0x000012e7u, 0x000012e0u, 0x0004003du, 0x00000069u, 0x000012e9u, 0x000001aau, 0x0003003eu, 0x000012e8u, 0x000012e9u, 0x0004003du, 0x00000069u, 0x000012ebu, 0x000001abu, 0x0003003eu, 0x000012eau, 0x000012ebu, 0x000a0039u, 0x00000008u, 0x000012ecu, 0x000001a4u, 0x000012e1u, 0x000012e3u, 0x000012e5u, 0x000012e7u, 0x000012e8u, 0x000012eau, 0x0003003eu, 0x000012d8u, 0x000012ecu, 0x0004003du, 0x00000008u, 0x000012edu, 0x000001a9u, 0x000500c7u, 0x00000008u, 0x000012eeu, 0x000012edu, 0x0000022au, 0x00050084u, 0x00000008u, 0x000012efu, 0x0000025du, 0x000012eeu, 0x00050082u, 0x00000008u, 0x000012f0u, 0x0000025du, 0x000012efu, 0x000500c3u, 0x00000008u, 0x000012f2u, 0x000012ecu, 0x000012f0u, 0x0003003eu, 0x000012d8u, 0x000012f2u, 0x000500c7u, 0x00000008u, 0x000012f4u, 0x000012f2u, 0x0000035eu, 0x0003003eu, 0x000012d8u, 0x000012f4u, 0x000200f9u, 0x000012deu, 0x000200f8u, 0x000012f5u, 0x0004003du, 0x00000023u, 0x000012f7u, 0x000001a6u, 0x0003003eu, 0x000012f6u, 0x000012f7u, 0x0004003du, 0x00000006u, 0x000012f9u, 0x000001a7u, 0x0003003eu, 0x000012f8u, 0x000012f9u, 0x0004003du, 0x000000efu, 0x000012fbu, 0x000001a8u, 0x0003003eu, 0x000012fau, 0x000012fbu, 0x0004003du, 0x00000008u, 0x000012fdu, 0x000001a9u, 0x0003003eu, 0x000012fcu, 0x000012fdu, 0x0004003du, 0x00000069u, 0x000012ffu, 0x000001aau, 0x0003003eu, 0x000012feu, 0x000012ffu, 0x0004003du, 0x00000069u, 0x00001301u, 0x000001abu, 0x0003003eu, 0x00001300u, 0x00001301u, 0x000a0039u, 0x00000008u, 0x00001302u, 0x000001a4u, 0x000012f6u, 0x000012f8u, 0x000012fau, 0x000012fcu, 0x000012feu, 0x00001300u, 0x0003003eu, 0x000012d8u, 0x00001302u, 0x000200f9u, 0x000012deu, 0x000200f8u, 0x000012deu, 0x000700f5u, 0x00000008u, 0x0000ef38u, 0x000012f4u, 0x000012ddu, 0x00001302u, 0x000012f5u, 0x000200f9u, 0x000012d7u, 0x000200f8u, 0x000012d7u, 0x000700f5u, 0x00000008u, 0x0000ef37u, 0x00000220u, 0x000012d6u, 0x0000ef38u, 0x000012deu, 0x000200feu, 0x0000ef37u, 0x00010038u, 0x00050036u, 0x000001aeu, 0x000001b6u, 0x00000000u, 0x000001b0u, 0x00030037u, 0x000001afu, 0x000001b1u, 0x00030037u, 0x000001afu, 0x000001b2u, 0x00030037u, 0x000001afu, 0x000001b3u, 0x00030037u, 0x000001afu, 0x000001b4u, 0x00030037u, 0x00000106u, 0x000001b5u, 0x000200f8u, 0x000001b7u, 0x0004003bu, 0x00000046u, 0x00001306u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000130cu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001313u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001316u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001321u, 0x00000007u, 0x00050041u, 0x00000046u, 0x00001307u, 0x000001b5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001308u, 0x00001307u, 0x00050041u, 0x00000046u, 0x00001309u, 0x000001b5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000130au, 0x00001309u, 0x00050080u, 0x00000008u, 0x0000130bu, 0x00001308u, 0x0000130au, 0x0003003eu, 0x00001306u, 0x0000130bu, 0x000500afu, 0x00000069u, 0x0000130eu, 0x0000130bu, 0x0000114fu, 0x0004003du, 0x000001aeu, 0x0000130fu, 0x000001b4u, 0x0004003du, 0x000001aeu, 0x00001310u, 0x000001b1u, 0x00050050u, 0x0000087bu, 0x00001311u, 0x0000130eu, 0x0000130eu, 0x000600a9u, 0x000001aeu, 0x00001312u, 0x00001311u, 0x0000130fu, 0x00001310u, 0x0003003eu, 0x0000130cu, 0x00001312u, 0x000300f7u, 0x00001318u, 0x00000000u, 0x000400fau, 0x0000130eu, 0x00001317u, 0x0000131du, 0x000200f8u, 0x00001317u, 0x0004003du, 0x000000efu, 0x00001319u, 0x000001b5u, 0x0007004fu, 0x000000efu, 0x0000131au, 0x00001319u, 0x00001319u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x0000131cu, 0x0000f381u, 0x0000131au, 0x0003003eu, 0x00001316u, 0x0000131cu, 0x000200f9u, 0x00001318u, 0x000200f8u, 0x0000131du, 0x0004003du, 0x000000efu, 0x0000131eu, 0x000001b5u, 0x0003003eu, 0x00001316u, 0x0000131eu, 0x000200f9u, 0x00001318u, 0x000200f8u, 0x00001318u, 0x000700f5u, 0x000000efu, 0x0000ef39u, 0x0000131cu, 0x00001317u, 0x0000131eu, 0x0000131du, 0x00040072u, 0x000001aeu, 0x00001320u, 0x0000ef39u, 0x0003003eu, 0x00001313u, 0x00001320u, 0x0004003du, 0x000001aeu, 0x00001322u, 0x000001b2u, 0x00050082u, 0x000001aeu, 0x00001324u, 0x00001322u, 0x00001312u, 0x00050041u, 0x000001c4u, 0x00001325u, 0x00001313u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00001326u, 0x00001325u, 0x00050050u, 0x000001aeu, 0x00001327u, 0x00001326u, 0x00001326u, 0x00050084u, 0x000001aeu, 0x00001328u, 0x00001324u, 0x00001327u, 0x0003003eu, 0x00001321u, 0x00001328u, 0x0004003du, 0x000001aeu, 0x00001329u, 0x000001b3u, 0x00050082u, 0x000001aeu, 0x0000132bu, 0x00001329u, 0x00001312u, 0x00050041u, 0x000001c4u, 0x0000132cu, 0x00001313u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x0000132du, 0x0000132cu, 0x00050050u, 0x000001aeu, 0x0000132eu, 0x0000132du, 0x0000132du, 0x00050084u, 0x000001aeu, 0x0000132fu, 0x0000132bu, 0x0000132eu, 0x00050080u, 0x000001aeu, 0x00001331u, 0x00001328u, 0x0000132fu, 0x0003003eu, 0x00001321u, 0x00001331u, 0x00050080u, 0x000001aeu, 0x00001335u, 0x00001331u, 0x0000f382u, 0x0003003eu, 0x00001321u, 0x00001335u, 0x000500c3u, 0x000001aeu, 0x00001338u, 0x00001335u, 0x0000f383u, 0x0003003eu, 0x00001321u, 0x00001338u, 0x00050080u, 0x000001aeu, 0x0000133bu, 0x00001338u, 0x00001312u, 0x0003003eu, 0x00001321u, 0x0000133bu, 0x000200feu, 0x0000133bu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000001c2u, 0x00000000u, 0x000001b8u, 0x00030037u, 0x00000128u, 0x000001b9u, 0x00030037u, 0x00000007u, 0x000001bau, 0x00030037u, 0x00000106u, 0x000001bbu, 0x00030037u, 0x0000006au, 0x000001bcu, 0x00030037u, 0x0000006au, 0x000001bdu, 0x00030037u, 0x0000006au, 0x000001beu, 0x00030037u, 0x0000006au, 0x000001bfu, 0x00030037u, 0x0000006au, 0x000001c0u, 0x00030037u, 0x000000e4u, 0x000001c1u, 0x000200f8u, 0x000001c3u, 0x0004003bu, 0x0000006au, 0x0000134fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001350u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001353u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001354u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001355u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001368u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001369u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000136cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000136du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000136eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001374u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001379u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001382u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001383u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001385u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001389u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000138au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000138cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001390u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001394u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001396u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001398u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000139cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000139eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000013a0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000013b7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000013bdu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000013c0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000013d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013d7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000013e3u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000013ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013eeu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000013f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000013f5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000013fbu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001403u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001405u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001407u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001408u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001409u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000140au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000140cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000140fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001417u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001419u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000141bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000141cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000141du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000141eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001420u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001426u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000142eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001430u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001432u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001433u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001434u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001435u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001437u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001440u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001442u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001445u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001446u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001448u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001454u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001456u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001457u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001458u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000145au, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001461u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001463u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001465u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001466u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001467u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001469u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001473u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001475u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001477u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001478u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001479u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000147bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001484u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001486u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001488u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001489u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000148au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000148cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001496u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001498u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000149au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000149bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000149cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000149eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014a7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014abu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000014adu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014b9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014bdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000014bfu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014deu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014e0u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014ebu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014edu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014f5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014f7u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001500u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001502u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001504u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001509u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000150bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000150du, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001516u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001518u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000151au, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001520u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001522u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001524u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000152du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000152fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001531u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001536u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001538u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000153au, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001543u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001545u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001547u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000154du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000154fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001551u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000155au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000155cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000155eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001563u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001565u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001567u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001570u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001572u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001574u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000157au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000157cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000157eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001587u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001589u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000158bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001590u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001594u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a5u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b4u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015bdu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c0u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015ccu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015dfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015e2u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015f0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015f3u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015feu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001601u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000160du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000160fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001611u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001612u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001617u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001619u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000161bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001624u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001626u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001628u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000162eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001630u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001632u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000163bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000163du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000163fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001644u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001646u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001648u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001651u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001653u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001655u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000165bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000165du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000165fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001668u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000166au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000166cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000167cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000167eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001680u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001689u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000168bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000168du, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001693u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001695u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001697u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016a2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016a4u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016abu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016adu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016b8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016bau, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016c2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016c4u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016cfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016d1u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016d8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016dau, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016e5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016e7u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016efu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016f1u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016fcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016feu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001703u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001705u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001707u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001712u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001714u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000171au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000171cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000171eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001727u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001729u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000172bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000173au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000173cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000173eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001747u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001749u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000174bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001751u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001753u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001755u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000175eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001760u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001762u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001767u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001769u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000176bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001774u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001776u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001778u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000177eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001780u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001782u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000178bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000178du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000178fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001794u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001796u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001798u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017a3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017a5u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017adu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017afu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017bau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017bcu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000017c5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000017c9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000017ccu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000017d5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000017f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000017fbu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001803u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001808u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000180bu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000180eu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001811u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001814u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001816u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001817u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000181au, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000181du, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001820u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001823u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000183fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001842u, 0x00000007u, 0x00050041u, 0x0000007bu, 0x0000133fu, 0x000001b9u, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00001340u, 0x0000133fu, 0x00040071u, 0x00000006u, 0x00001341u, 0x00001340u, 0x0004007cu, 0x00000008u, 0x00001342u, 0x00001341u, 0x000500c7u, 0x00000008u, 0x00001343u, 0x00001342u, 0x0000022au, 0x000500abu, 0x00000069u, 0x00001344u, 0x00001343u, 0x00000220u, 0x00050041u, 0x00000007u, 0x00001345u, 0x000001b9u, 0x00000220u, 0x0004003du, 0x00000006u, 0x00001346u, 0x00001345u, 0x0004007cu, 0x00000008u, 0x00001347u, 0x00001346u, 0x00050041u, 0x00000007u, 0x00001348u, 0x000001b9u, 0x0000022au, 0x0004003du, 0x00000006u, 0x00001349u, 0x00001348u, 0x0004007cu, 0x00000008u, 0x0000134au, 0x00001349u, 0x00050041u, 0x0000007bu, 0x0000134bu, 0x000001b9u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x0000134cu, 0x0000134bu, 0x00040071u, 0x00000006u, 0x0000134du, 0x0000134cu, 0x0004007cu, 0x00000008u, 0x0000134eu, 0x0000134du, 0x0003003eu, 0x0000134fu, 0x00001344u, 0x00050041u, 0x00000046u, 0x00001351u, 0x000001bbu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001352u, 0x00001351u, 0x0003003eu, 0x00001350u, 0x00001352u, 0x0003003eu, 0x00001353u, 0x00001347u, 0x0003003eu, 0x00001354u, 0x0000134au, 0x0003003eu, 0x00001355u, 0x0000134eu, 0x00090039u, 0x00000008u, 0x00001356u, 0x00000195u, 0x0000134fu, 0x00001350u, 0x00001353u, 0x00001354u, 0x00001355u, 0x0003003eu, 0x00001351u, 0x00001356u, 0x0004003du, 0x0000000fu, 0x00001359u, 0x0000133fu, 0x00040071u, 0x00000006u, 0x0000135au, 0x00001359u, 0x0004007cu, 0x00000008u, 0x0000135bu, 0x0000135au, 0x000500c7u, 0x00000008u, 0x0000135cu, 0x0000135bu, 0x00000233u, 0x000500abu, 0x00000069u, 0x0000135du, 0x0000135cu, 0x00000220u, 0x00050041u, 0x00000007u, 0x0000135eu, 0x000001b9u, 0x0000022du, 0x0004003du, 0x00000006u, 0x0000135fu, 0x0000135eu, 0x0004007cu, 0x00000008u, 0x00001360u, 0x0000135fu, 0x00050041u, 0x00000007u, 0x00001361u, 0x000001b9u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00001362u, 0x00001361u, 0x0004007cu, 0x00000008u, 0x00001363u, 0x00001362u, 0x00050041u, 0x0000007bu, 0x00001364u, 0x000001b9u, 0x00000269u, 0x0004003du, 0x0000000fu, 0x00001365u, 0x00001364u, 0x00040071u, 0x00000006u, 0x00001366u, 0x00001365u, 0x0004007cu, 0x00000008u, 0x00001367u, 0x00001366u, 0x0003003eu, 0x00001368u, 0x0000135du, 0x00050041u, 0x00000046u, 0x0000136au, 0x000001bbu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000136bu, 0x0000136au, 0x0003003eu, 0x00001369u, 0x0000136bu, 0x0003003eu, 0x0000136cu, 0x00001360u, 0x0003003eu, 0x0000136du, 0x00001363u, 0x0003003eu, 0x0000136eu, 0x00001367u, 0x00090039u, 0x00000008u, 0x0000136fu, 0x00000195u, 0x00001368u, 0x00001369u, 0x0000136cu, 0x0000136du, 0x0000136eu, 0x0003003eu, 0x0000136au, 0x0000136fu, 0x0004003du, 0x00000069u, 0x00001371u, 0x000001beu, 0x000300f7u, 0x00001373u, 0x00000000u, 0x000400fau, 0x00001371u, 0x00001372u, 0x00001378u, 0x000200f8u, 0x00001372u, 0x0004003du, 0x000000efu, 0x00001375u, 0x000001bbu, 0x000500c7u, 0x000000efu, 0x00001377u, 0x00001375u, 0x0000f379u, 0x0003003eu, 0x00001374u, 0x00001377u, 0x000200f9u, 0x00001373u, 0x000200f8u, 0x00001378u, 0x0003003eu, 0x00001374u, 0x00000c39u, 0x000200f9u, 0x00001373u, 0x000200f8u, 0x00001373u, 0x00050041u, 0x00000046u, 0x0000137au, 0x00001374u, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000137bu, 0x0000137au, 0x00050041u, 0x00000046u, 0x0000137cu, 0x00001374u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000137du, 0x0000137cu, 0x00050080u, 0x00000008u, 0x0000137eu, 0x0000137bu, 0x0000137du, 0x0003003eu, 0x00001379u, 0x0000137eu, 0x0004003du, 0x000000efu, 0x0000137fu, 0x000001bbu, 0x000500c3u, 0x000000efu, 0x00001381u, 0x0000137fu, 0x0000f378u, 0x0003003eu, 0x000001bbu, 0x00001381u, 0x0004003du, 0x00000023u, 0x00001384u, 0x000001b9u, 0x0003003eu, 0x00001383u, 0x00001384u, 0x0004003du, 0x00000008u, 0x00001387u, 0x00001351u, 0x0003003eu, 0x00001385u, 0x00001387u, 0x00060039u, 0x00000008u, 0x00001388u, 0x0000012cu, 0x00001383u, 0x00001385u, 0x0003003eu, 0x00001382u, 0x00001388u, 0x0004003du, 0x00000023u, 0x0000138bu, 0x000001b9u, 0x0003003eu, 0x0000138au, 0x0000138bu, 0x0004003du, 0x00000008u, 0x0000138eu, 0x0000136au, 0x0003003eu, 0x0000138cu, 0x0000138eu, 0x00060039u, 0x00000008u, 0x0000138fu, 0x00000135u, 0x0000138au, 0x0000138cu, 0x0003003eu, 0x00001389u, 0x0000138fu, 0x0004003du, 0x00000008u, 0x00001392u, 0x00001351u, 0x00050080u, 0x00000008u, 0x00001393u, 0x00001392u, 0x0000022au, 0x0004003du, 0x00000023u, 0x00001395u, 0x000001b9u, 0x0003003eu, 0x00001394u, 0x00001395u, 0x0003003eu, 0x00001396u, 0x00001393u, 0x00060039u, 0x00000008u, 0x00001397u, 0x0000012cu, 0x00001394u, 0x00001396u, 0x0003003eu, 0x00001390u, 0x00001397u, 0x0004003du, 0x00000008u, 0x0000139au, 0x0000136au, 0x00050080u, 0x00000008u, 0x0000139bu, 0x0000139au, 0x0000022au, 0x0004003du, 0x00000023u, 0x0000139du, 0x000001b9u, 0x0003003eu, 0x0000139cu, 0x0000139du, 0x0003003eu, 0x0000139eu, 0x0000139bu, 0x00060039u, 0x00000008u, 0x0000139fu, 0x00000135u, 0x0000139cu, 0x0000139eu, 0x0003003eu, 0x00001398u, 0x0000139fu, 0x00050082u, 0x00000008u, 0x000013a3u, 0x0000139fu, 0x0000138fu, 0x0007000cu, 0x00000008u, 0x000013a5u, 0x00000001u, 0x0000002au, 0x000013a3u, 0x000013a4u, 0x0003003eu, 0x000013a0u, 0x000013a5u, 0x000500c7u, 0x00000008u, 0x000013a7u, 0x0000138fu, 0x0000035eu, 0x00050080u, 0x00000008u, 0x000013a9u, 0x000013a7u, 0x000013a5u, 0x0003003eu, 0x00001398u, 0x000013a9u, 0x0003003eu, 0x00001389u, 0x000013a7u, 0x0004003du, 0x00000069u, 0x000013acu, 0x000001bfu, 0x0004003du, 0x000000efu, 0x000013adu, 0x00001374u, 0x000500aau, 0x0000087bu, 0x000013afu, 0x000013adu, 0x000013aeu, 0x00050051u, 0x00000069u, 0x000013b0u, 0x000013afu, 0x00000000u, 0x00050051u, 0x00000069u, 0x000013b1u, 0x000013afu, 0x00000001u, 0x00060050u, 0x00000363u, 0x000013b2u, 0x000013acu, 0x000013b0u, 0x000013b1u, 0x0004009bu, 0x00000069u, 0x000013b3u, 0x000013b2u, 0x0003003eu, 0x000001bfu, 0x000013b3u, 0x0004003du, 0x00000069u, 0x000013b4u, 0x000001bfu, 0x000300f7u, 0x000013b6u, 0x00000000u, 0x000400fau, 0x000013b4u, 0x000013b5u, 0x000013b6u, 0x000200f8u, 0x000013b5u, 0x0003003eu, 0x00001379u, 0x00000220u, 0x000200f9u, 0x000013b6u, 0x000200f8u, 0x000013b6u, 0x000600a9u, 0x00000008u, 0x0000f3b0u, 0x000013b4u, 0x00000220u, 0x0000137eu, 0x00050041u, 0x0000007bu, 0x000013b8u, 0x000001b9u, 0x00000239u, 0x0004003du, 0x0000000fu, 0x000013b9u, 0x000013b8u, 0x00040071u, 0x00000006u, 0x000013bau, 0x000013b9u, 0x0004007cu, 0x00000008u, 0x000013bbu, 0x000013bau, 0x000500aau, 0x00000069u, 0x000013bcu, 0x000013bbu, 0x0000022au, 0x0003003eu, 0x000013b7u, 0x000013bcu, 0x000500afu, 0x00000069u, 0x000013bfu, 0x0000f3b0u, 0x0000114fu, 0x000300f7u, 0x000013c2u, 0x00000000u, 0x000400fau, 0x000013bfu, 0x000013c1u, 0x000013c6u, 0x000200f8u, 0x000013c1u, 0x00050050u, 0x000000efu, 0x000013c5u, 0x00001397u, 0x000013a9u, 0x0003003eu, 0x000013c0u, 0x000013c5u, 0x000200f9u, 0x000013c2u, 0x000200f8u, 0x000013c6u, 0x00050050u, 0x000000efu, 0x000013c9u, 0x00001388u, 0x000013a7u, 0x0003003eu, 0x000013c0u, 0x000013c9u, 0x000200f9u, 0x000013c2u, 0x000200f8u, 0x000013c2u, 0x000700f5u, 0x000000efu, 0x0000ef40u, 0x000013c5u, 0x000013c1u, 0x000013c9u, 0x000013c6u, 0x0003003eu, 0x000013bdu, 0x0000ef40u, 0x0004003du, 0x00000069u, 0x000013cbu, 0x000001bcu, 0x000300f7u, 0x000013cdu, 0x00000000u, 0x000400fau, 0x000013cbu, 0x000013ccu, 0x000014c6u, 0x000200f8u, 0x000013ccu, 0x0004003du, 0x0000000fu, 0x000013cfu, 0x000013b8u, 0x00040071u, 0x00000006u, 0x000013d0u, 0x000013cfu, 0x0004007cu, 0x00000008u, 0x000013d1u, 0x000013d0u, 0x000300f7u, 0x000013d3u, 0x00000000u, 0x000b00fbu, 0x000013d1u, 0x000013d3u, 0x00000000u, 0x000013d2u, 0x00000002u, 0x000013d2u, 0x00000003u, 0x000013d2u, 0x00000004u, 0x000013d2u, 0x000200f8u, 0x000013d2u, 0x0003003eu, 0x000013d4u, 0x000013bfu, 0x000600a9u, 0x00000008u, 0x000013d9u, 0x000013bfu, 0x0000022du, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000013dau, 0x000013d9u, 0x0003003eu, 0x000013d7u, 0x000013dau, 0x00050041u, 0x0000007bu, 0x000013dbu, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000013dcu, 0x000013dbu, 0x00040071u, 0x00000006u, 0x000013ddu, 0x000013dcu, 0x0004007cu, 0x00000008u, 0x000013deu, 0x000013ddu, 0x000300f7u, 0x000013e2u, 0x00000000u, 0x000700fbu, 0x000013deu, 0x000013e1u, 0x00000000u, 0x000013dfu, 0x00000001u, 0x000013e0u, 0x000200f8u, 0x000013e1u, 0x0004007cu, 0x000000b0u, 0x00001480u, 0x0000ef40u, 0x000600a9u, 0x00000008u, 0x00001482u, 0x000013bfu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00001483u, 0x00001482u, 0x0004003du, 0x00000023u, 0x00001485u, 0x000001b9u, 0x0003003eu, 0x00001484u, 0x00001485u, 0x0004003du, 0x00000006u, 0x00001487u, 0x000001bau, 0x0003003eu, 0x00001486u, 0x00001487u, 0x0003003eu, 0x00001488u, 0x00001480u, 0x0003003eu, 0x00001489u, 0x00001483u, 0x0003003eu, 0x0000148au, 0x000013dau, 0x0004003du, 0x00000069u, 0x0000148du, 0x000001bdu, 0x0003003eu, 0x0000148cu, 0x0000148du, 0x000a0039u, 0x00000013u, 0x0000148eu, 0x0000016eu, 0x00001484u, 0x00001486u, 0x00001488u, 0x00001489u, 0x0000148au, 0x0000148cu, 0x0003003eu, 0x000013e3u, 0x0000148eu, 0x0004003du, 0x00000069u, 0x0000148fu, 0x000001beu, 0x000300f7u, 0x00001491u, 0x00000000u, 0x000400fau, 0x0000148fu, 0x00001490u, 0x00001491u, 0x000200f8u, 0x00001490u, 0x00050050u, 0x000000efu, 0x00001494u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001495u, 0x00001494u, 0x0004003du, 0x00000023u, 0x00001497u, 0x000001b9u, 0x0003003eu, 0x00001496u, 0x00001497u, 0x0004003du, 0x00000006u, 0x00001499u, 0x000001bau, 0x0003003eu, 0x00001498u, 0x00001499u, 0x0003003eu, 0x0000149au, 0x00001495u, 0x0003003eu, 0x0000149bu, 0x0000045cu, 0x0003003eu, 0x0000149cu, 0x000013dau, 0x0004003du, 0x00000069u, 0x0000149fu, 0x000001bdu, 0x0003003eu, 0x0000149eu, 0x0000149fu, 0x000a0039u, 0x00000013u, 0x000014a0u, 0x0000016eu, 0x00001496u, 0x00001498u, 0x0000149au, 0x0000149bu, 0x0000149cu, 0x0000149eu, 0x0003003eu, 0x000013fbu, 0x000014a0u, 0x00050050u, 0x000000efu, 0x000014a3u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000014a4u, 0x000014a3u, 0x0004003du, 0x00000023u, 0x000014a6u, 0x000001b9u, 0x0003003eu, 0x000014a5u, 0x000014a6u, 0x0004003du, 0x00000006u, 0x000014a8u, 0x000001bau, 0x0003003eu, 0x000014a7u, 0x000014a8u, 0x0003003eu, 0x000014a9u, 0x000014a4u, 0x0003003eu, 0x000014aau, 0x00000386u, 0x0003003eu, 0x000014abu, 0x000013dau, 0x0004003du, 0x00000069u, 0x000014aeu, 0x000001bdu, 0x0003003eu, 0x000014adu, 0x000014aeu, 0x000a0039u, 0x00000013u, 0x000014afu, 0x0000016eu, 0x000014a5u, 0x000014a7u, 0x000014a9u, 0x000014aau, 0x000014abu, 0x000014adu, 0x0003003eu, 0x0000140fu, 0x000014afu, 0x000200f9u, 0x00001491u, 0x000200f8u, 0x00001491u, 0x000700f5u, 0x00000013u, 0x0000f032u, 0x0000efd0u, 0x000013e1u, 0x000014afu, 0x00001490u, 0x000700f5u, 0x00000013u, 0x0000efd3u, 0x0000efd0u, 0x000013e1u, 0x000014a0u, 0x00001490u, 0x0004003du, 0x00000069u, 0x000014b0u, 0x000001bfu, 0x000300f7u, 0x000014b2u, 0x00000000u, 0x000400fau, 0x000014b0u, 0x000014b1u, 0x000014b2u, 0x000200f8u, 0x000014b1u, 0x00050050u, 0x000000efu, 0x000014b5u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000014b6u, 0x000014b5u, 0x0004003du, 0x00000023u, 0x000014b8u, 0x000001b9u, 0x0003003eu, 0x000014b7u, 0x000014b8u, 0x0004003du, 0x00000006u, 0x000014bau, 0x000001bau, 0x0003003eu, 0x000014b9u, 0x000014bau, 0x0003003eu, 0x000014bbu, 0x000014b6u, 0x0003003eu, 0x000014bcu, 0x00000464u, 0x0003003eu, 0x000014bdu, 0x000013dau, 0x0004003du, 0x00000069u, 0x000014c0u, 0x000001bdu, 0x0003003eu, 0x000014bfu, 0x000014c0u, 0x000a0039u, 0x00000013u, 0x000014c1u, 0x0000016eu, 0x000014b7u, 0x000014b9u, 0x000014bbu, 0x000014bcu, 0x000014bdu, 0x000014bfu, 0x0003003eu, 0x00001426u, 0x000014c1u, 0x000200f9u, 0x000014b2u, 0x000200f8u, 0x000014b2u, 0x000700f5u, 0x00000013u, 0x0000f060u, 0x0000efd0u, 0x00001491u, 0x000014c1u, 0x000014b1u, 0x000200f9u, 0x000013e2u, 0x000200f8u, 0x000013dfu, 0x0004007cu, 0x000000b0u, 0x000013e5u, 0x0000ef40u, 0x00050041u, 0x0000007bu, 0x000013e6u, 0x000001b9u, 0x0000025du, 0x0004003du, 0x0000000fu, 0x000013e7u, 0x000013e6u, 0x00040071u, 0x00000006u, 0x000013e8u, 0x000013e7u, 0x000600a9u, 0x00000008u, 0x000013eau, 0x000013bfu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x000013ebu, 0x000013eau, 0x0004003du, 0x00000023u, 0x000013edu, 0x000001b9u, 0x0003003eu, 0x000013ecu, 0x000013edu, 0x0004003du, 0x00000006u, 0x000013efu, 0x000001bau, 0x0003003eu, 0x000013eeu, 0x000013efu, 0x0003003eu, 0x000013f0u, 0x000013e5u, 0x0003003eu, 0x000013f1u, 0x000013e8u, 0x0003003eu, 0x000013f2u, 0x000013ebu, 0x0003003eu, 0x000013f3u, 0x000013dau, 0x0004003du, 0x00000069u, 0x000013f6u, 0x000001bdu, 0x0003003eu, 0x000013f5u, 0x000013f6u, 0x000b0039u, 0x00000013u, 0x000013f7u, 0x00000158u, 0x000013ecu, 0x000013eeu, 0x000013f0u, 0x000013f1u, 0x000013f2u, 0x000013f3u, 0x000013f5u, 0x0003003eu, 0x000013e3u, 0x000013f7u, 0x0004003du, 0x00000069u, 0x000013f8u, 0x000001beu, 0x000300f7u, 0x000013fau, 0x00000000u, 0x000400fau, 0x000013f8u, 0x000013f9u, 0x000013fau, 0x000200f8u, 0x000013f9u, 0x00050050u, 0x000000efu, 0x000013feu, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000013ffu, 0x000013feu, 0x0004003du, 0x0000000fu, 0x00001401u, 0x000013e6u, 0x00040071u, 0x00000006u, 0x00001402u, 0x00001401u, 0x0004003du, 0x00000023u, 0x00001404u, 0x000001b9u, 0x0003003eu, 0x00001403u, 0x00001404u, 0x0004003du, 0x00000006u, 0x00001406u, 0x000001bau, 0x0003003eu, 0x00001405u, 0x00001406u, 0x0003003eu, 0x00001407u, 0x000013ffu, 0x0003003eu, 0x00001408u, 0x00001402u, 0x0003003eu, 0x00001409u, 0x0000045cu, 0x0003003eu, 0x0000140au, 0x000013dau, 0x0004003du, 0x00000069u, 0x0000140du, 0x000001bdu, 0x0003003eu, 0x0000140cu, 0x0000140du, 0x000b0039u, 0x00000013u, 0x0000140eu, 0x00000158u, 0x00001403u, 0x00001405u, 0x00001407u, 0x00001408u, 0x00001409u, 0x0000140au, 0x0000140cu, 0x0003003eu, 0x000013fbu, 0x0000140eu, 0x00050050u, 0x000000efu, 0x00001412u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001413u, 0x00001412u, 0x0004003du, 0x0000000fu, 0x00001415u, 0x000013e6u, 0x00040071u, 0x00000006u, 0x00001416u, 0x00001415u, 0x0004003du, 0x00000023u, 0x00001418u, 0x000001b9u, 0x0003003eu, 0x00001417u, 0x00001418u, 0x0004003du, 0x00000006u, 0x0000141au, 0x000001bau, 0x0003003eu, 0x00001419u, 0x0000141au, 0x0003003eu, 0x0000141bu, 0x00001413u, 0x0003003eu, 0x0000141cu, 0x00001416u, 0x0003003eu, 0x0000141du, 0x00000386u, 0x0003003eu, 0x0000141eu, 0x000013dau, 0x0004003du, 0x00000069u, 0x00001421u, 0x000001bdu, 0x0003003eu, 0x00001420u, 0x00001421u, 0x000b0039u, 0x00000013u, 0x00001422u, 0x00000158u, 0x00001417u, 0x00001419u, 0x0000141bu, 0x0000141cu, 0x0000141du, 0x0000141eu, 0x00001420u, 0x0003003eu, 0x0000140fu, 0x00001422u, 0x000200f9u, 0x000013fau, 0x000200f8u, 0x000013fau, 0x000700f5u, 0x00000013u, 0x0000f035u, 0x0000efd0u, 0x000013dfu, 0x00001422u, 0x000013f9u, 0x000700f5u, 0x00000013u, 0x0000efd6u, 0x0000efd0u, 0x000013dfu, 0x0000140eu, 0x000013f9u, 0x0004003du, 0x00000069u, 0x00001423u, 0x000001bfu, 0x000300f7u, 0x00001425u, 0x00000000u, 0x000400fau, 0x00001423u, 0x00001424u, 0x00001425u, 0x000200f8u, 0x00001424u, 0x00050050u, 0x000000efu, 0x00001429u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000142au, 0x00001429u, 0x0004003du, 0x0000000fu, 0x0000142cu, 0x000013e6u, 0x00040071u, 0x00000006u, 0x0000142du, 0x0000142cu, 0x0004003du, 0x00000023u, 0x0000142fu, 0x000001b9u, 0x0003003eu, 0x0000142eu, 0x0000142fu, 0x0004003du, 0x00000006u, 0x00001431u, 0x000001bau, 0x0003003eu, 0x00001430u, 0x00001431u, 0x0003003eu, 0x00001432u, 0x0000142au, 0x0003003eu, 0x00001433u, 0x0000142du, 0x0003003eu, 0x00001434u, 0x00000464u, 0x0003003eu, 0x00001435u, 0x000013dau, 0x0004003du, 0x00000069u, 0x00001438u, 0x000001bdu, 0x0003003eu, 0x00001437u, 0x00001438u, 0x000b0039u, 0x00000013u, 0x00001439u, 0x00000158u, 0x0000142eu, 0x00001430u, 0x00001432u, 0x00001433u, 0x00001434u, 0x00001435u, 0x00001437u, 0x0003003eu, 0x00001426u, 0x00001439u, 0x000200f9u, 0x00001425u, 0x000200f8u, 0x00001425u, 0x000700f5u, 0x00000013u, 0x0000f063u, 0x0000efd0u, 0x000013fau, 0x00001439u, 0x00001424u, 0x000200f9u, 0x000013e2u, 0x000200f8u, 0x000013e0u, 0x0004007cu, 0x000000b0u, 0x0000143cu, 0x0000ef40u, 0x000600a9u, 0x00000008u, 0x0000143eu, 0x000013bfu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x0000143fu, 0x0000143eu, 0x0004003du, 0x00000023u, 0x00001441u, 0x000001b9u, 0x0003003eu, 0x00001440u, 0x00001441u, 0x0004003du, 0x00000006u, 0x00001443u, 0x000001bau, 0x0003003eu, 0x00001442u, 0x00001443u, 0x0003003eu, 0x00001444u, 0x0000143cu, 0x0003003eu, 0x00001445u, 0x0000143fu, 0x0003003eu, 0x00001446u, 0x000013dau, 0x0004003du, 0x00000069u, 0x00001449u, 0x000001bdu, 0x0003003eu, 0x00001448u, 0x00001449u, 0x000a0039u, 0x00000013u, 0x0000144au, 0x00000161u, 0x00001440u, 0x00001442u, 0x00001444u, 0x00001445u, 0x00001446u, 0x00001448u, 0x0003003eu, 0x000013e3u, 0x0000144au, 0x0004003du, 0x00000069u, 0x0000144bu, 0x000001beu, 0x000300f7u, 0x0000144du, 0x00000000u, 0x000400fau, 0x0000144bu, 0x0000144cu, 0x0000144du, 0x000200f8u, 0x0000144cu, 0x00050050u, 0x000000efu, 0x00001450u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001451u, 0x00001450u, 0x0004003du, 0x00000023u, 0x00001453u, 0x000001b9u, 0x0003003eu, 0x00001452u, 0x00001453u, 0x0004003du, 0x00000006u, 0x00001455u, 0x000001bau, 0x0003003eu, 0x00001454u, 0x00001455u, 0x0003003eu, 0x00001456u, 0x00001451u, 0x0003003eu, 0x00001457u, 0x0000045cu, 0x0003003eu, 0x00001458u, 0x000013dau, 0x0004003du, 0x00000069u, 0x0000145bu, 0x000001bdu, 0x0003003eu, 0x0000145au, 0x0000145bu, 0x000a0039u, 0x00000013u, 0x0000145cu, 0x00000161u, 0x00001452u, 0x00001454u, 0x00001456u, 0x00001457u, 0x00001458u, 0x0000145au, 0x0003003eu, 0x000013fbu, 0x0000145cu, 0x00050050u, 0x000000efu, 0x0000145fu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001460u, 0x0000145fu, 0x0004003du, 0x00000023u, 0x00001462u, 0x000001b9u, 0x0003003eu, 0x00001461u, 0x00001462u, 0x0004003du, 0x00000006u, 0x00001464u, 0x000001bau, 0x0003003eu, 0x00001463u, 0x00001464u, 0x0003003eu, 0x00001465u, 0x00001460u, 0x0003003eu, 0x00001466u, 0x00000386u, 0x0003003eu, 0x00001467u, 0x000013dau, 0x0004003du, 0x00000069u, 0x0000146au, 0x000001bdu, 0x0003003eu, 0x00001469u, 0x0000146au, 0x000a0039u, 0x00000013u, 0x0000146bu, 0x00000161u, 0x00001461u, 0x00001463u, 0x00001465u, 0x00001466u, 0x00001467u, 0x00001469u, 0x0003003eu, 0x0000140fu, 0x0000146bu, 0x000200f9u, 0x0000144du, 0x000200f8u, 0x0000144du, 0x000700f5u, 0x00000013u, 0x0000f037u, 0x0000efd0u, 0x000013e0u, 0x0000146bu, 0x0000144cu, 0x000700f5u, 0x00000013u, 0x0000efd8u, 0x0000efd0u, 0x000013e0u, 0x0000145cu, 0x0000144cu, 0x0004003du, 0x00000069u, 0x0000146cu, 0x000001bfu, 0x000300f7u, 0x0000146eu, 0x00000000u, 0x000400fau, 0x0000146cu, 0x0000146du, 0x0000146eu, 0x000200f8u, 0x0000146du, 0x00050050u, 0x000000efu, 0x00001471u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001472u, 0x00001471u, 0x0004003du, 0x00000023u, 0x00001474u, 0x000001b9u, 0x0003003eu, 0x00001473u, 0x00001474u, 0x0004003du, 0x00000006u, 0x00001476u, 0x000001bau, 0x0003003eu, 0x00001475u, 0x00001476u, 0x0003003eu, 0x00001477u, 0x00001472u, 0x0003003eu, 0x00001478u, 0x00000464u, 0x0003003eu, 0x00001479u, 0x000013dau, 0x0004003du, 0x00000069u, 0x0000147cu, 0x000001bdu, 0x0003003eu, 0x0000147bu, 0x0000147cu, 0x000a0039u, 0x00000013u, 0x0000147du, 0x00000161u, 0x00001473u, 0x00001475u, 0x00001477u, 0x00001478u, 0x00001479u, 0x0000147bu, 0x0003003eu, 0x00001426u, 0x0000147du, 0x000200f9u, 0x0000146eu, 0x000200f8u, 0x0000146eu, 0x000700f5u, 0x00000013u, 0x0000f065u, 0x0000efd0u, 0x0000144du, 0x0000147du, 0x0000146du, 0x000200f9u, 0x000013e2u, 0x000200f8u, 0x000013e2u, 0x000900f5u, 0x00000013u, 0x0000f05fu, 0x0000f060u, 0x000014b2u, 0x0000f063u, 0x00001425u, 0x0000f065u, 0x0000146eu, 0x000900f5u, 0x00000013u, 0x0000f030u, 0x0000f032u, 0x000014b2u, 0x0000f035u, 0x00001425u, 0x0000f037u, 0x0000146eu, 0x000900f5u, 0x00000013u, 0x0000f001u, 0x0000148eu, 0x000014b2u, 0x000013f7u, 0x00001425u, 0x0000144au, 0x0000146eu, 0x000900f5u, 0x00000013u, 0x0000efd1u, 0x0000efd3u, 0x000014b2u, 0x0000efd6u, 0x00001425u, 0x0000efd8u, 0x0000146eu, 0x000200f9u, 0x000013d3u, 0x000200f8u, 0x000013d3u, 0x000700f5u, 0x00000013u, 0x0000f05bu, 0x0000efd0u, 0x000013ccu, 0x0000f05fu, 0x000013e2u, 0x000700f5u, 0x00000013u, 0x0000f02cu, 0x0000efd0u, 0x000013ccu, 0x0000f030u, 0x000013e2u, 0x000700f5u, 0x00000013u, 0x0000effdu, 0x0000efd0u, 0x000013ccu, 0x0000f001u, 0x000013e2u, 0x000700f5u, 0x00000013u, 0x0000efccu, 0x0000efd0u, 0x000013ccu, 0x0000efd1u, 0x000013e2u, 0x000200f9u, 0x000013cdu, 0x000200f8u, 0x000014c6u, 0x0004003du, 0x0000000fu, 0x000014c8u, 0x000013b8u, 0x00040071u, 0x00000006u, 0x000014c9u, 0x000014c8u, 0x0004007cu, 0x00000008u, 0x000014cau, 0x000014c9u, 0x000300f7u, 0x000014d0u, 0x00000000u, 0x000d00fbu, 0x000014cau, 0x000014d0u, 0x00000000u, 0x000014cbu, 0x00000001u, 0x000014ccu, 0x00000002u, 0x000014cdu, 0x00000003u, 0x000014ceu, 0x00000004u, 0x000014cfu, 0x000200f8u, 0x000014cbu, 0x00050041u, 0x0000007bu, 0x000014d1u, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000014d2u, 0x000014d1u, 0x00040071u, 0x00000006u, 0x000014d3u, 0x000014d2u, 0x0004007cu, 0x00000008u, 0x000014d4u, 0x000014d3u, 0x000300f7u, 0x000014d9u, 0x00000000u, 0x000b00fbu, 0x000014d4u, 0x000014d9u, 0x00000000u, 0x000014d5u, 0x00000001u, 0x000014d6u, 0x00000002u, 0x000014d7u, 0x00000003u, 0x000014d8u, 0x000200f8u, 0x000014d5u, 0x0004007cu, 0x000000b0u, 0x000014dbu, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x000014ddu, 0x000001b9u, 0x0003003eu, 0x000014dcu, 0x000014ddu, 0x0004003du, 0x00000006u, 0x000014dfu, 0x000001bau, 0x0003003eu, 0x000014deu, 0x000014dfu, 0x0003003eu, 0x000014e0u, 0x000014dbu, 0x00070039u, 0x00000013u, 0x000014e1u, 0x00000142u, 0x000014dcu, 0x000014deu, 0x000014e0u, 0x0003003eu, 0x000013e3u, 0x000014e1u, 0x0004003du, 0x00000069u, 0x000014e2u, 0x000001beu, 0x000300f7u, 0x000014e4u, 0x00000000u, 0x000400fau, 0x000014e2u, 0x000014e3u, 0x000014e4u, 0x000200f8u, 0x000014e3u, 0x00050050u, 0x000000efu, 0x000014e7u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000014e8u, 0x000014e7u, 0x0004003du, 0x00000023u, 0x000014eau, 0x000001b9u, 0x0003003eu, 0x000014e9u, 0x000014eau, 0x0004003du, 0x00000006u, 0x000014ecu, 0x000001bau, 0x0003003eu, 0x000014ebu, 0x000014ecu, 0x0003003eu, 0x000014edu, 0x000014e8u, 0x00070039u, 0x00000013u, 0x000014eeu, 0x00000142u, 0x000014e9u, 0x000014ebu, 0x000014edu, 0x0003003eu, 0x000013fbu, 0x000014eeu, 0x00050050u, 0x000000efu, 0x000014f1u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000014f2u, 0x000014f1u, 0x0004003du, 0x00000023u, 0x000014f4u, 0x000001b9u, 0x0003003eu, 0x000014f3u, 0x000014f4u, 0x0004003du, 0x00000006u, 0x000014f6u, 0x000001bau, 0x0003003eu, 0x000014f5u, 0x000014f6u, 0x0003003eu, 0x000014f7u, 0x000014f2u, 0x00070039u, 0x00000013u, 0x000014f8u, 0x00000142u, 0x000014f3u, 0x000014f5u, 0x000014f7u, 0x0003003eu, 0x0000140fu, 0x000014f8u, 0x000200f9u, 0x000014e4u, 0x000200f8u, 0x000014e4u, 0x000700f5u, 0x00000013u, 0x0000f03bu, 0x0000efd0u, 0x000014d5u, 0x000014f8u, 0x000014e3u, 0x000700f5u, 0x00000013u, 0x0000efdcu, 0x0000efd0u, 0x000014d5u, 0x000014eeu, 0x000014e3u, 0x0004003du, 0x00000069u, 0x000014f9u, 0x000001bfu, 0x000300f7u, 0x000014fbu, 0x00000000u, 0x000400fau, 0x000014f9u, 0x000014fau, 0x000014fbu, 0x000200f8u, 0x000014fau, 0x00050050u, 0x000000efu, 0x000014feu, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000014ffu, 0x000014feu, 0x0004003du, 0x00000023u, 0x00001501u, 0x000001b9u, 0x0003003eu, 0x00001500u, 0x00001501u, 0x0004003du, 0x00000006u, 0x00001503u, 0x000001bau, 0x0003003eu, 0x00001502u, 0x00001503u, 0x0003003eu, 0x00001504u, 0x000014ffu, 0x00070039u, 0x00000013u, 0x00001505u, 0x00000142u, 0x00001500u, 0x00001502u, 0x00001504u, 0x0003003eu, 0x00001426u, 0x00001505u, 0x000200f9u, 0x000014fbu, 0x000200f8u, 0x000014fbu, 0x000700f5u, 0x00000013u, 0x0000f069u, 0x0000efd0u, 0x000014e4u, 0x00001505u, 0x000014fau, 0x000200f9u, 0x000014d9u, 0x000200f8u, 0x000014d6u, 0x0004007cu, 0x000000b0u, 0x00001508u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x0000150au, 0x000001b9u, 0x0003003eu, 0x00001509u, 0x0000150au, 0x0004003du, 0x00000006u, 0x0000150cu, 0x000001bau, 0x0003003eu, 0x0000150bu, 0x0000150cu, 0x0003003eu, 0x0000150du, 0x00001508u, 0x00070039u, 0x00000013u, 0x0000150eu, 0x00000173u, 0x00001509u, 0x0000150bu, 0x0000150du, 0x0003003eu, 0x000013e3u, 0x0000150eu, 0x0004003du, 0x00000069u, 0x0000150fu, 0x000001beu, 0x000300f7u, 0x00001511u, 0x00000000u, 0x000400fau, 0x0000150fu, 0x00001510u, 0x00001511u, 0x000200f8u, 0x00001510u, 0x00050050u, 0x000000efu, 0x00001514u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001515u, 0x00001514u, 0x0004003du, 0x00000023u, 0x00001517u, 0x000001b9u, 0x0003003eu, 0x00001516u, 0x00001517u, 0x0004003du, 0x00000006u, 0x00001519u, 0x000001bau, 0x0003003eu, 0x00001518u, 0x00001519u, 0x0003003eu, 0x0000151au, 0x00001515u, 0x00070039u, 0x00000013u, 0x0000151bu, 0x00000173u, 0x00001516u, 0x00001518u, 0x0000151au, 0x0003003eu, 0x000013fbu, 0x0000151bu, 0x00050050u, 0x000000efu, 0x0000151eu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000151fu, 0x0000151eu, 0x0004003du, 0x00000023u, 0x00001521u, 0x000001b9u, 0x0003003eu, 0x00001520u, 0x00001521u, 0x0004003du, 0x00000006u, 0x00001523u, 0x000001bau, 0x0003003eu, 0x00001522u, 0x00001523u, 0x0003003eu, 0x00001524u, 0x0000151fu, 0x00070039u, 0x00000013u, 0x00001525u, 0x00000173u, 0x00001520u, 0x00001522u, 0x00001524u, 0x0003003eu, 0x0000140fu, 0x00001525u, 0x000200f9u, 0x00001511u, 0x000200f8u, 0x00001511u, 0x000700f5u, 0x00000013u, 0x0000f03du, 0x0000efd0u, 0x000014d6u, 0x00001525u, 0x00001510u, 0x000700f5u, 0x00000013u, 0x0000efdeu, 0x0000efd0u, 0x000014d6u, 0x0000151bu, 0x00001510u, 0x0004003du, 0x00000069u, 0x00001526u, 0x000001bfu, 0x000300f7u, 0x00001528u, 0x00000000u, 0x000400fau, 0x00001526u, 0x00001527u, 0x00001528u, 0x000200f8u, 0x00001527u, 0x00050050u, 0x000000efu, 0x0000152bu, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000152cu, 0x0000152bu, 0x0004003du, 0x00000023u, 0x0000152eu, 0x000001b9u, 0x0003003eu, 0x0000152du, 0x0000152eu, 0x0004003du, 0x00000006u, 0x00001530u, 0x000001bau, 0x0003003eu, 0x0000152fu, 0x00001530u, 0x0003003eu, 0x00001531u, 0x0000152cu, 0x00070039u, 0x00000013u, 0x00001532u, 0x00000173u, 0x0000152du, 0x0000152fu, 0x00001531u, 0x0003003eu, 0x00001426u, 0x00001532u, 0x000200f9u, 0x00001528u, 0x000200f8u, 0x00001528u, 0x000700f5u, 0x00000013u, 0x0000f06bu, 0x0000efd0u, 0x00001511u, 0x00001532u, 0x00001527u, 0x000200f9u, 0x000014d9u, 0x000200f8u, 0x000014d7u, 0x0004007cu, 0x000000b0u, 0x00001535u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001537u, 0x000001b9u, 0x0003003eu, 0x00001536u, 0x00001537u, 0x0004003du, 0x00000006u, 0x00001539u, 0x000001bau, 0x0003003eu, 0x00001538u, 0x00001539u, 0x0003003eu, 0x0000153au, 0x00001535u, 0x00070039u, 0x00000013u, 0x0000153bu, 0x00000183u, 0x00001536u, 0x00001538u, 0x0000153au, 0x0003003eu, 0x000013e3u, 0x0000153bu, 0x0004003du, 0x00000069u, 0x0000153cu, 0x000001beu, 0x000300f7u, 0x0000153eu, 0x00000000u, 0x000400fau, 0x0000153cu, 0x0000153du, 0x0000153eu, 0x000200f8u, 0x0000153du, 0x00050050u, 0x000000efu, 0x00001541u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001542u, 0x00001541u, 0x0004003du, 0x00000023u, 0x00001544u, 0x000001b9u, 0x0003003eu, 0x00001543u, 0x00001544u, 0x0004003du, 0x00000006u, 0x00001546u, 0x000001bau, 0x0003003eu, 0x00001545u, 0x00001546u, 0x0003003eu, 0x00001547u, 0x00001542u, 0x00070039u, 0x00000013u, 0x00001548u, 0x00000183u, 0x00001543u, 0x00001545u, 0x00001547u, 0x0003003eu, 0x000013fbu, 0x00001548u, 0x00050050u, 0x000000efu, 0x0000154bu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000154cu, 0x0000154bu, 0x0004003du, 0x00000023u, 0x0000154eu, 0x000001b9u, 0x0003003eu, 0x0000154du, 0x0000154eu, 0x0004003du, 0x00000006u, 0x00001550u, 0x000001bau, 0x0003003eu, 0x0000154fu, 0x00001550u, 0x0003003eu, 0x00001551u, 0x0000154cu, 0x00070039u, 0x00000013u, 0x00001552u, 0x00000183u, 0x0000154du, 0x0000154fu, 0x00001551u, 0x0003003eu, 0x0000140fu, 0x00001552u, 0x000200f9u, 0x0000153eu, 0x000200f8u, 0x0000153eu, 0x000700f5u, 0x00000013u, 0x0000f03fu, 0x0000efd0u, 0x000014d7u, 0x00001552u, 0x0000153du, 0x000700f5u, 0x00000013u, 0x0000efe0u, 0x0000efd0u, 0x000014d7u, 0x00001548u, 0x0000153du, 0x0004003du, 0x00000069u, 0x00001553u, 0x000001bfu, 0x000300f7u, 0x00001555u, 0x00000000u, 0x000400fau, 0x00001553u, 0x00001554u, 0x00001555u, 0x000200f8u, 0x00001554u, 0x00050050u, 0x000000efu, 0x00001558u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001559u, 0x00001558u, 0x0004003du, 0x00000023u, 0x0000155bu, 0x000001b9u, 0x0003003eu, 0x0000155au, 0x0000155bu, 0x0004003du, 0x00000006u, 0x0000155du, 0x000001bau, 0x0003003eu, 0x0000155cu, 0x0000155du, 0x0003003eu, 0x0000155eu, 0x00001559u, 0x00070039u, 0x00000013u, 0x0000155fu, 0x00000183u, 0x0000155au, 0x0000155cu, 0x0000155eu, 0x0003003eu, 0x00001426u, 0x0000155fu, 0x000200f9u, 0x00001555u, 0x000200f8u, 0x00001555u, 0x000700f5u, 0x00000013u, 0x0000f06du, 0x0000efd0u, 0x0000153eu, 0x0000155fu, 0x00001554u, 0x000200f9u, 0x000014d9u, 0x000200f8u, 0x000014d8u, 0x0004007cu, 0x000000b0u, 0x00001562u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001564u, 0x000001b9u, 0x0003003eu, 0x00001563u, 0x00001564u, 0x0004003du, 0x00000006u, 0x00001566u, 0x000001bau, 0x0003003eu, 0x00001565u, 0x00001566u, 0x0003003eu, 0x00001567u, 0x00001562u, 0x00070039u, 0x00000013u, 0x00001568u, 0x0000018du, 0x00001563u, 0x00001565u, 0x00001567u, 0x0003003eu, 0x000013e3u, 0x00001568u, 0x0004003du, 0x00000069u, 0x00001569u, 0x000001beu, 0x000300f7u, 0x0000156bu, 0x00000000u, 0x000400fau, 0x00001569u, 0x0000156au, 0x0000156bu, 0x000200f8u, 0x0000156au, 0x00050050u, 0x000000efu, 0x0000156eu, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x0000156fu, 0x0000156eu, 0x0004003du, 0x00000023u, 0x00001571u, 0x000001b9u, 0x0003003eu, 0x00001570u, 0x00001571u, 0x0004003du, 0x00000006u, 0x00001573u, 0x000001bau, 0x0003003eu, 0x00001572u, 0x00001573u, 0x0003003eu, 0x00001574u, 0x0000156fu, 0x00070039u, 0x00000013u, 0x00001575u, 0x0000018du, 0x00001570u, 0x00001572u, 0x00001574u, 0x0003003eu, 0x000013fbu, 0x00001575u, 0x00050050u, 0x000000efu, 0x00001578u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001579u, 0x00001578u, 0x0004003du, 0x00000023u, 0x0000157bu, 0x000001b9u, 0x0003003eu, 0x0000157au, 0x0000157bu, 0x0004003du, 0x00000006u, 0x0000157du, 0x000001bau, 0x0003003eu, 0x0000157cu, 0x0000157du, 0x0003003eu, 0x0000157eu, 0x00001579u, 0x00070039u, 0x00000013u, 0x0000157fu, 0x0000018du, 0x0000157au, 0x0000157cu, 0x0000157eu, 0x0003003eu, 0x0000140fu, 0x0000157fu, 0x000200f9u, 0x0000156bu, 0x000200f8u, 0x0000156bu, 0x000700f5u, 0x00000013u, 0x0000f041u, 0x0000efd0u, 0x000014d8u, 0x0000157fu, 0x0000156au, 0x000700f5u, 0x00000013u, 0x0000efe2u, 0x0000efd0u, 0x000014d8u, 0x00001575u, 0x0000156au, 0x0004003du, 0x00000069u, 0x00001580u, 0x000001bfu, 0x000300f7u, 0x00001582u, 0x00000000u, 0x000400fau, 0x00001580u, 0x00001581u, 0x00001582u, 0x000200f8u, 0x00001581u, 0x00050050u, 0x000000efu, 0x00001585u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001586u, 0x00001585u, 0x0004003du, 0x00000023u, 0x00001588u, 0x000001b9u, 0x0003003eu, 0x00001587u, 0x00001588u, 0x0004003du, 0x00000006u, 0x0000158au, 0x000001bau, 0x0003003eu, 0x00001589u, 0x0000158au, 0x0003003eu, 0x0000158bu, 0x00001586u, 0x00070039u, 0x00000013u, 0x0000158cu, 0x0000018du, 0x00001587u, 0x00001589u, 0x0000158bu, 0x0003003eu, 0x00001426u, 0x0000158cu, 0x000200f9u, 0x00001582u, 0x000200f8u, 0x00001582u, 0x000700f5u, 0x00000013u, 0x0000f06fu, 0x0000efd0u, 0x0000156bu, 0x0000158cu, 0x00001581u, 0x000200f9u, 0x000014d9u, 0x000200f8u, 0x000014d9u, 0x000d00f5u, 0x00000013u, 0x0000f068u, 0x0000efd0u, 0x000014cbu, 0x0000f069u, 0x000014fbu, 0x0000f06bu, 0x00001528u, 0x0000f06du, 0x00001555u, 0x0000f06fu, 0x00001582u, 0x000d00f5u, 0x00000013u, 0x0000f039u, 0x0000efd0u, 0x000014cbu, 0x0000f03bu, 0x000014fbu, 0x0000f03du, 0x00001528u, 0x0000f03fu, 0x00001555u, 0x0000f041u, 0x00001582u, 0x000d00f5u, 0x00000013u, 0x0000f009u, 0x0000efd0u, 0x000014cbu, 0x000014e1u, 0x000014fbu, 0x0000150eu, 0x00001528u, 0x0000153bu, 0x00001555u, 0x00001568u, 0x00001582u, 0x000d00f5u, 0x00000013u, 0x0000efdau, 0x0000efd0u, 0x000014cbu, 0x0000efdcu, 0x000014fbu, 0x0000efdeu, 0x00001528u, 0x0000efe0u, 0x00001555u, 0x0000efe2u, 0x00001582u, 0x000200f9u, 0x000014d0u, 0x000200f8u, 0x000014ccu, 0x000500c3u, 0x00000008u, 0x00001592u, 0x00001388u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00001593u, 0x00001592u, 0x0003003eu, 0x00001590u, 0x00001593u, 0x00050082u, 0x00000008u, 0x00001598u, 0x00001397u, 0x00001388u, 0x00050080u, 0x00000008u, 0x00001599u, 0x00001397u, 0x00001598u, 0x000500c3u, 0x00000008u, 0x0000159au, 0x00001599u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x0000159bu, 0x0000159au, 0x0003003eu, 0x00001594u, 0x0000159bu, 0x00050050u, 0x000000efu, 0x0000159eu, 0x00001388u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x0000159fu, 0x0000159eu, 0x0004003du, 0x00000023u, 0x000015a1u, 0x000001b9u, 0x0003003eu, 0x000015a0u, 0x000015a1u, 0x0004003du, 0x00000006u, 0x000015a3u, 0x000001bau, 0x0003003eu, 0x000015a2u, 0x000015a3u, 0x0003003eu, 0x000015a4u, 0x0000159fu, 0x0003003eu, 0x000015a5u, 0x00001593u, 0x00080039u, 0x00000013u, 0x000015a7u, 0x0000017eu, 0x000015a0u, 0x000015a2u, 0x000015a4u, 0x000015a5u, 0x0003003eu, 0x000013e3u, 0x000015a7u, 0x0004003du, 0x00000069u, 0x000015a8u, 0x000001beu, 0x000300f7u, 0x000015aau, 0x00000000u, 0x000400fau, 0x000015a8u, 0x000015a9u, 0x000015aau, 0x000200f8u, 0x000015a9u, 0x00050050u, 0x000000efu, 0x000015adu, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000015aeu, 0x000015adu, 0x0004003du, 0x00000023u, 0x000015b0u, 0x000001b9u, 0x0003003eu, 0x000015afu, 0x000015b0u, 0x0004003du, 0x00000006u, 0x000015b2u, 0x000001bau, 0x0003003eu, 0x000015b1u, 0x000015b2u, 0x0003003eu, 0x000015b3u, 0x000015aeu, 0x0003003eu, 0x000015b4u, 0x0000159bu, 0x00080039u, 0x00000013u, 0x000015b6u, 0x0000017eu, 0x000015afu, 0x000015b1u, 0x000015b3u, 0x000015b4u, 0x0003003eu, 0x000013fbu, 0x000015b6u, 0x00050050u, 0x000000efu, 0x000015b9u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000015bau, 0x000015b9u, 0x0004003du, 0x00000023u, 0x000015bcu, 0x000001b9u, 0x0003003eu, 0x000015bbu, 0x000015bcu, 0x0004003du, 0x00000006u, 0x000015beu, 0x000001bau, 0x0003003eu, 0x000015bdu, 0x000015beu, 0x0003003eu, 0x000015bfu, 0x000015bau, 0x0003003eu, 0x000015c0u, 0x00001593u, 0x00080039u, 0x00000013u, 0x000015c2u, 0x0000017eu, 0x000015bbu, 0x000015bdu, 0x000015bfu, 0x000015c0u, 0x0003003eu, 0x0000140fu, 0x000015c2u, 0x00050050u, 0x000000efu, 0x000015c5u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000015c6u, 0x000015c5u, 0x0004003du, 0x00000023u, 0x000015c8u, 0x000001b9u, 0x0003003eu, 0x000015c7u, 0x000015c8u, 0x0004003du, 0x00000006u, 0x000015cau, 0x000001bau, 0x0003003eu, 0x000015c9u, 0x000015cau, 0x0003003eu, 0x000015cbu, 0x000015c6u, 0x0003003eu, 0x000015ccu, 0x0000159bu, 0x00080039u, 0x00000013u, 0x000015ceu, 0x0000017eu, 0x000015c7u, 0x000015c9u, 0x000015cbu, 0x000015ccu, 0x0003003eu, 0x00001426u, 0x000015ceu, 0x000200f9u, 0x000015aau, 0x000200f8u, 0x000015aau, 0x000700f5u, 0x00000013u, 0x0000f071u, 0x0000efd0u, 0x000014ccu, 0x000015ceu, 0x000015a9u, 0x000700f5u, 0x00000013u, 0x0000f042u, 0x0000efd0u, 0x000014ccu, 0x000015c2u, 0x000015a9u, 0x000700f5u, 0x00000013u, 0x0000efe3u, 0x0000efd0u, 0x000014ccu, 0x000015b6u, 0x000015a9u, 0x000200f9u, 0x000014d0u, 0x000200f8u, 0x000014cdu, 0x00050041u, 0x0000007bu, 0x000015d0u, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000015d1u, 0x000015d0u, 0x00040071u, 0x00000006u, 0x000015d2u, 0x000015d1u, 0x0004007cu, 0x00000008u, 0x000015d3u, 0x000015d2u, 0x000300f7u, 0x000015d7u, 0x00000000u, 0x000700fbu, 0x000015d3u, 0x000015d6u, 0x00000000u, 0x000015d4u, 0x00000001u, 0x000015d5u, 0x000200f8u, 0x000015d6u, 0x0004007cu, 0x000000b0u, 0x00001643u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001645u, 0x000001b9u, 0x0003003eu, 0x00001644u, 0x00001645u, 0x0004003du, 0x00000006u, 0x00001647u, 0x000001bau, 0x0003003eu, 0x00001646u, 0x00001647u, 0x0003003eu, 0x00001648u, 0x00001643u, 0x00070039u, 0x00000013u, 0x00001649u, 0x00000166u, 0x00001644u, 0x00001646u, 0x00001648u, 0x0003003eu, 0x000013e3u, 0x00001649u, 0x0004003du, 0x00000069u, 0x0000164au, 0x000001beu, 0x000300f7u, 0x0000164cu, 0x00000000u, 0x000400fau, 0x0000164au, 0x0000164bu, 0x0000164cu, 0x000200f8u, 0x0000164bu, 0x00050050u, 0x000000efu, 0x0000164fu, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001650u, 0x0000164fu, 0x0004003du, 0x00000023u, 0x00001652u, 0x000001b9u, 0x0003003eu, 0x00001651u, 0x00001652u, 0x0004003du, 0x00000006u, 0x00001654u, 0x000001bau, 0x0003003eu, 0x00001653u, 0x00001654u, 0x0003003eu, 0x00001655u, 0x00001650u, 0x00070039u, 0x00000013u, 0x00001656u, 0x00000166u, 0x00001651u, 0x00001653u, 0x00001655u, 0x0003003eu, 0x000013fbu, 0x00001656u, 0x00050050u, 0x000000efu, 0x00001659u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000165au, 0x00001659u, 0x0004003du, 0x00000023u, 0x0000165cu, 0x000001b9u, 0x0003003eu, 0x0000165bu, 0x0000165cu, 0x0004003du, 0x00000006u, 0x0000165eu, 0x000001bau, 0x0003003eu, 0x0000165du, 0x0000165eu, 0x0003003eu, 0x0000165fu, 0x0000165au, 0x00070039u, 0x00000013u, 0x00001660u, 0x00000166u, 0x0000165bu, 0x0000165du, 0x0000165fu, 0x0003003eu, 0x0000140fu, 0x00001660u, 0x000200f9u, 0x0000164cu, 0x000200f8u, 0x0000164cu, 0x000700f5u, 0x00000013u, 0x0000f045u, 0x0000efd0u, 0x000015d6u, 0x00001660u, 0x0000164bu, 0x000700f5u, 0x00000013u, 0x0000efe6u, 0x0000efd0u, 0x000015d6u, 0x00001656u, 0x0000164bu, 0x0004003du, 0x00000069u, 0x00001661u, 0x000001bfu, 0x000300f7u, 0x00001663u, 0x00000000u, 0x000400fau, 0x00001661u, 0x00001662u, 0x00001663u, 0x000200f8u, 0x00001662u, 0x00050050u, 0x000000efu, 0x00001666u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001667u, 0x00001666u, 0x0004003du, 0x00000023u, 0x00001669u, 0x000001b9u, 0x0003003eu, 0x00001668u, 0x00001669u, 0x0004003du, 0x00000006u, 0x0000166bu, 0x000001bau, 0x0003003eu, 0x0000166au, 0x0000166bu, 0x0003003eu, 0x0000166cu, 0x00001667u, 0x00070039u, 0x00000013u, 0x0000166du, 0x00000166u, 0x00001668u, 0x0000166au, 0x0000166cu, 0x0003003eu, 0x00001426u, 0x0000166du, 0x000200f9u, 0x00001663u, 0x000200f8u, 0x00001663u, 0x000700f5u, 0x00000013u, 0x0000f073u, 0x0000efd0u, 0x0000164cu, 0x0000166du, 0x00001662u, 0x000200f9u, 0x000015d7u, 0x000200f8u, 0x000015d4u, 0x0004007cu, 0x000000b0u, 0x000015d9u, 0x0000ef40u, 0x00050041u, 0x0000007bu, 0x000015dau, 0x000001b9u, 0x0000025du, 0x0004003du, 0x0000000fu, 0x000015dbu, 0x000015dau, 0x00040071u, 0x00000006u, 0x000015dcu, 0x000015dbu, 0x0004003du, 0x00000023u, 0x000015deu, 0x000001b9u, 0x0003003eu, 0x000015ddu, 0x000015deu, 0x0004003du, 0x00000006u, 0x000015e0u, 0x000001bau, 0x0003003eu, 0x000015dfu, 0x000015e0u, 0x0003003eu, 0x000015e1u, 0x000015d9u, 0x0003003eu, 0x000015e2u, 0x000015dcu, 0x00080039u, 0x00000013u, 0x000015e3u, 0x0000014eu, 0x000015ddu, 0x000015dfu, 0x000015e1u, 0x000015e2u, 0x0003003eu, 0x000013e3u, 0x000015e3u, 0x0004003du, 0x00000069u, 0x000015e4u, 0x000001beu, 0x000300f7u, 0x000015e6u, 0x00000000u, 0x000400fau, 0x000015e4u, 0x000015e5u, 0x000015e6u, 0x000200f8u, 0x000015e5u, 0x00050050u, 0x000000efu, 0x000015e9u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000015eau, 0x000015e9u, 0x0004003du, 0x0000000fu, 0x000015ecu, 0x000015dau, 0x00040071u, 0x00000006u, 0x000015edu, 0x000015ecu, 0x0004003du, 0x00000023u, 0x000015efu, 0x000001b9u, 0x0003003eu, 0x000015eeu, 0x000015efu, 0x0004003du, 0x00000006u, 0x000015f1u, 0x000001bau, 0x0003003eu, 0x000015f0u, 0x000015f1u, 0x0003003eu, 0x000015f2u, 0x000015eau, 0x0003003eu, 0x000015f3u, 0x000015edu, 0x00080039u, 0x00000013u, 0x000015f4u, 0x0000014eu, 0x000015eeu, 0x000015f0u, 0x000015f2u, 0x000015f3u, 0x0003003eu, 0x000013fbu, 0x000015f4u, 0x00050050u, 0x000000efu, 0x000015f7u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000015f8u, 0x000015f7u, 0x0004003du, 0x0000000fu, 0x000015fau, 0x000015dau, 0x00040071u, 0x00000006u, 0x000015fbu, 0x000015fau, 0x0004003du, 0x00000023u, 0x000015fdu, 0x000001b9u, 0x0003003eu, 0x000015fcu, 0x000015fdu, 0x0004003du, 0x00000006u, 0x000015ffu, 0x000001bau, 0x0003003eu, 0x000015feu, 0x000015ffu, 0x0003003eu, 0x00001600u, 0x000015f8u, 0x0003003eu, 0x00001601u, 0x000015fbu, 0x00080039u, 0x00000013u, 0x00001602u, 0x0000014eu, 0x000015fcu, 0x000015feu, 0x00001600u, 0x00001601u, 0x0003003eu, 0x0000140fu, 0x00001602u, 0x000200f9u, 0x000015e6u, 0x000200f8u, 0x000015e6u, 0x000700f5u, 0x00000013u, 0x0000f047u, 0x0000efd0u, 0x000015d4u, 0x00001602u, 0x000015e5u, 0x000700f5u, 0x00000013u, 0x0000efe8u, 0x0000efd0u, 0x000015d4u, 0x000015f4u, 0x000015e5u, 0x0004003du, 0x00000069u, 0x00001603u, 0x000001bfu, 0x000300f7u, 0x00001605u, 0x00000000u, 0x000400fau, 0x00001603u, 0x00001604u, 0x00001605u, 0x000200f8u, 0x00001604u, 0x00050050u, 0x000000efu, 0x00001608u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001609u, 0x00001608u, 0x0004003du, 0x0000000fu, 0x0000160bu, 0x000015dau, 0x00040071u, 0x00000006u, 0x0000160cu, 0x0000160bu, 0x0004003du, 0x00000023u, 0x0000160eu, 0x000001b9u, 0x0003003eu, 0x0000160du, 0x0000160eu, 0x0004003du, 0x00000006u, 0x00001610u, 0x000001bau, 0x0003003eu, 0x0000160fu, 0x00001610u, 0x0003003eu, 0x00001611u, 0x00001609u, 0x0003003eu, 0x00001612u, 0x0000160cu, 0x00080039u, 0x00000013u, 0x00001613u, 0x0000014eu, 0x0000160du, 0x0000160fu, 0x00001611u, 0x00001612u, 0x0003003eu, 0x00001426u, 0x00001613u, 0x000200f9u, 0x00001605u, 0x000200f8u, 0x00001605u, 0x000700f5u, 0x00000013u, 0x0000f075u, 0x0000efd0u, 0x000015e6u, 0x00001613u, 0x00001604u, 0x000200f9u, 0x000015d7u, 0x000200f8u, 0x000015d5u, 0x0004007cu, 0x000000b0u, 0x00001616u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001618u, 0x000001b9u, 0x0003003eu, 0x00001617u, 0x00001618u, 0x0004003du, 0x00000006u, 0x0000161au, 0x000001bau, 0x0003003eu, 0x00001619u, 0x0000161au, 0x0003003eu, 0x0000161bu, 0x00001616u, 0x00070039u, 0x00000013u, 0x0000161cu, 0x00000173u, 0x00001617u, 0x00001619u, 0x0000161bu, 0x0003003eu, 0x000013e3u, 0x0000161cu, 0x0004003du, 0x00000069u, 0x0000161du, 0x000001beu, 0x000300f7u, 0x0000161fu, 0x00000000u, 0x000400fau, 0x0000161du, 0x0000161eu, 0x0000161fu, 0x000200f8u, 0x0000161eu, 0x00050050u, 0x000000efu, 0x00001622u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001623u, 0x00001622u, 0x0004003du, 0x00000023u, 0x00001625u, 0x000001b9u, 0x0003003eu, 0x00001624u, 0x00001625u, 0x0004003du, 0x00000006u, 0x00001627u, 0x000001bau, 0x0003003eu, 0x00001626u, 0x00001627u, 0x0003003eu, 0x00001628u, 0x00001623u, 0x00070039u, 0x00000013u, 0x00001629u, 0x00000173u, 0x00001624u, 0x00001626u, 0x00001628u, 0x0003003eu, 0x000013fbu, 0x00001629u, 0x00050050u, 0x000000efu, 0x0000162cu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000162du, 0x0000162cu, 0x0004003du, 0x00000023u, 0x0000162fu, 0x000001b9u, 0x0003003eu, 0x0000162eu, 0x0000162fu, 0x0004003du, 0x00000006u, 0x00001631u, 0x000001bau, 0x0003003eu, 0x00001630u, 0x00001631u, 0x0003003eu, 0x00001632u, 0x0000162du, 0x00070039u, 0x00000013u, 0x00001633u, 0x00000173u, 0x0000162eu, 0x00001630u, 0x00001632u, 0x0003003eu, 0x0000140fu, 0x00001633u, 0x000200f9u, 0x0000161fu, 0x000200f8u, 0x0000161fu, 0x000700f5u, 0x00000013u, 0x0000f049u, 0x0000efd0u, 0x000015d5u, 0x00001633u, 0x0000161eu, 0x000700f5u, 0x00000013u, 0x0000efeau, 0x0000efd0u, 0x000015d5u, 0x00001629u, 0x0000161eu, 0x0004003du, 0x00000069u, 0x00001634u, 0x000001bfu, 0x000300f7u, 0x00001636u, 0x00000000u, 0x000400fau, 0x00001634u, 0x00001635u, 0x00001636u, 0x000200f8u, 0x00001635u, 0x00050050u, 0x000000efu, 0x00001639u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000163au, 0x00001639u, 0x0004003du, 0x00000023u, 0x0000163cu, 0x000001b9u, 0x0003003eu, 0x0000163bu, 0x0000163cu, 0x0004003du, 0x00000006u, 0x0000163eu, 0x000001bau, 0x0003003eu, 0x0000163du, 0x0000163eu, 0x0003003eu, 0x0000163fu, 0x0000163au, 0x00070039u, 0x00000013u, 0x00001640u, 0x00000173u, 0x0000163bu, 0x0000163du, 0x0000163fu, 0x0003003eu, 0x00001426u, 0x00001640u, 0x000200f9u, 0x00001636u, 0x000200f8u, 0x00001636u, 0x000700f5u, 0x00000013u, 0x0000f077u, 0x0000efd0u, 0x0000161fu, 0x00001640u, 0x00001635u, 0x000200f9u, 0x000015d7u, 0x000200f8u, 0x000015d7u, 0x000900f5u, 0x00000013u, 0x0000f072u, 0x0000f073u, 0x00001663u, 0x0000f075u, 0x00001605u, 0x0000f077u, 0x00001636u, 0x000900f5u, 0x00000013u, 0x0000f043u, 0x0000f045u, 0x00001663u, 0x0000f047u, 0x00001605u, 0x0000f049u, 0x00001636u, 0x000900f5u, 0x00000013u, 0x0000f013u, 0x00001649u, 0x00001663u, 0x000015e3u, 0x00001605u, 0x0000161cu, 0x00001636u, 0x000900f5u, 0x00000013u, 0x0000efe4u, 0x0000efe6u, 0x00001663u, 0x0000efe8u, 0x00001605u, 0x0000efeau, 0x00001636u, 0x000200f9u, 0x000014d0u, 0x000200f8u, 0x000014ceu, 0x00050041u, 0x0000007bu, 0x00001671u, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x00001672u, 0x00001671u, 0x00040071u, 0x00000006u, 0x00001673u, 0x00001672u, 0x0004007cu, 0x00000008u, 0x00001674u, 0x00001673u, 0x000300f7u, 0x00001679u, 0x00000000u, 0x000b00fbu, 0x00001674u, 0x00001679u, 0x00000000u, 0x00001675u, 0x00000001u, 0x00001676u, 0x00000002u, 0x00001677u, 0x00000003u, 0x00001678u, 0x000200f8u, 0x00001675u, 0x0004007cu, 0x000000b0u, 0x0000167bu, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x0000167du, 0x000001b9u, 0x0003003eu, 0x0000167cu, 0x0000167du, 0x0004003du, 0x00000006u, 0x0000167fu, 0x000001bau, 0x0003003eu, 0x0000167eu, 0x0000167fu, 0x0003003eu, 0x00001680u, 0x0000167bu, 0x00070039u, 0x00000013u, 0x00001681u, 0x00000147u, 0x0000167cu, 0x0000167eu, 0x00001680u, 0x0003003eu, 0x000013e3u, 0x00001681u, 0x0004003du, 0x00000069u, 0x00001682u, 0x000001beu, 0x000300f7u, 0x00001684u, 0x00000000u, 0x000400fau, 0x00001682u, 0x00001683u, 0x00001684u, 0x000200f8u, 0x00001683u, 0x00050050u, 0x000000efu, 0x00001687u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001688u, 0x00001687u, 0x0004003du, 0x00000023u, 0x0000168au, 0x000001b9u, 0x0003003eu, 0x00001689u, 0x0000168au, 0x0004003du, 0x00000006u, 0x0000168cu, 0x000001bau, 0x0003003eu, 0x0000168bu, 0x0000168cu, 0x0003003eu, 0x0000168du, 0x00001688u, 0x00070039u, 0x00000013u, 0x0000168eu, 0x00000147u, 0x00001689u, 0x0000168bu, 0x0000168du, 0x0003003eu, 0x000013fbu, 0x0000168eu, 0x00050050u, 0x000000efu, 0x00001691u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001692u, 0x00001691u, 0x0004003du, 0x00000023u, 0x00001694u, 0x000001b9u, 0x0003003eu, 0x00001693u, 0x00001694u, 0x0004003du, 0x00000006u, 0x00001696u, 0x000001bau, 0x0003003eu, 0x00001695u, 0x00001696u, 0x0003003eu, 0x00001697u, 0x00001692u, 0x00070039u, 0x00000013u, 0x00001698u, 0x00000147u, 0x00001693u, 0x00001695u, 0x00001697u, 0x0003003eu, 0x0000140fu, 0x00001698u, 0x000200f9u, 0x00001684u, 0x000200f8u, 0x00001684u, 0x000700f5u, 0x00000013u, 0x0000f04cu, 0x0000efd0u, 0x00001675u, 0x00001698u, 0x00001683u, 0x000700f5u, 0x00000013u, 0x0000efedu, 0x0000efd0u, 0x00001675u, 0x0000168eu, 0x00001683u, 0x0004003du, 0x00000069u, 0x00001699u, 0x000001bfu, 0x000300f7u, 0x0000169bu, 0x00000000u, 0x000400fau, 0x00001699u, 0x0000169au, 0x0000169bu, 0x000200f8u, 0x0000169au, 0x00050050u, 0x000000efu, 0x0000169eu, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000169fu, 0x0000169eu, 0x0004003du, 0x00000023u, 0x000016a1u, 0x000001b9u, 0x0003003eu, 0x000016a0u, 0x000016a1u, 0x0004003du, 0x00000006u, 0x000016a3u, 0x000001bau, 0x0003003eu, 0x000016a2u, 0x000016a3u, 0x0003003eu, 0x000016a4u, 0x0000169fu, 0x00070039u, 0x00000013u, 0x000016a5u, 0x00000147u, 0x000016a0u, 0x000016a2u, 0x000016a4u, 0x0003003eu, 0x00001426u, 0x000016a5u, 0x000200f9u, 0x0000169bu, 0x000200f8u, 0x0000169bu, 0x000700f5u, 0x00000013u, 0x0000f07au, 0x0000efd0u, 0x00001684u, 0x000016a5u, 0x0000169au, 0x000200f9u, 0x00001679u, 0x000200f8u, 0x00001676u, 0x0004007cu, 0x000000b0u, 0x000016a8u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x000016aau, 0x000001b9u, 0x0003003eu, 0x000016a9u, 0x000016aau, 0x0004003du, 0x00000006u, 0x000016acu, 0x000001bau, 0x0003003eu, 0x000016abu, 0x000016acu, 0x0003003eu, 0x000016adu, 0x000016a8u, 0x00070039u, 0x00000013u, 0x000016aeu, 0x00000178u, 0x000016a9u, 0x000016abu, 0x000016adu, 0x0003003eu, 0x000013e3u, 0x000016aeu, 0x0004003du, 0x00000069u, 0x000016afu, 0x000001beu, 0x000300f7u, 0x000016b1u, 0x00000000u, 0x000400fau, 0x000016afu, 0x000016b0u, 0x000016b1u, 0x000200f8u, 0x000016b0u, 0x00050050u, 0x000000efu, 0x000016b4u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000016b5u, 0x000016b4u, 0x0004003du, 0x00000023u, 0x000016b7u, 0x000001b9u, 0x0003003eu, 0x000016b6u, 0x000016b7u, 0x0004003du, 0x00000006u, 0x000016b9u, 0x000001bau, 0x0003003eu, 0x000016b8u, 0x000016b9u, 0x0003003eu, 0x000016bau, 0x000016b5u, 0x00070039u, 0x00000013u, 0x000016bbu, 0x00000178u, 0x000016b6u, 0x000016b8u, 0x000016bau, 0x0003003eu, 0x000013fbu, 0x000016bbu, 0x00050050u, 0x000000efu, 0x000016beu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000016bfu, 0x000016beu, 0x0004003du, 0x00000023u, 0x000016c1u, 0x000001b9u, 0x0003003eu, 0x000016c0u, 0x000016c1u, 0x0004003du, 0x00000006u, 0x000016c3u, 0x000001bau, 0x0003003eu, 0x000016c2u, 0x000016c3u, 0x0003003eu, 0x000016c4u, 0x000016bfu, 0x00070039u, 0x00000013u, 0x000016c5u, 0x00000178u, 0x000016c0u, 0x000016c2u, 0x000016c4u, 0x0003003eu, 0x0000140fu, 0x000016c5u, 0x000200f9u, 0x000016b1u, 0x000200f8u, 0x000016b1u, 0x000700f5u, 0x00000013u, 0x0000f04eu, 0x0000efd0u, 0x00001676u, 0x000016c5u, 0x000016b0u, 0x000700f5u, 0x00000013u, 0x0000efefu, 0x0000efd0u, 0x00001676u, 0x000016bbu, 0x000016b0u, 0x0004003du, 0x00000069u, 0x000016c6u, 0x000001bfu, 0x000300f7u, 0x000016c8u, 0x00000000u, 0x000400fau, 0x000016c6u, 0x000016c7u, 0x000016c8u, 0x000200f8u, 0x000016c7u, 0x00050050u, 0x000000efu, 0x000016cbu, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000016ccu, 0x000016cbu, 0x0004003du, 0x00000023u, 0x000016ceu, 0x000001b9u, 0x0003003eu, 0x000016cdu, 0x000016ceu, 0x0004003du, 0x00000006u, 0x000016d0u, 0x000001bau, 0x0003003eu, 0x000016cfu, 0x000016d0u, 0x0003003eu, 0x000016d1u, 0x000016ccu, 0x00070039u, 0x00000013u, 0x000016d2u, 0x00000178u, 0x000016cdu, 0x000016cfu, 0x000016d1u, 0x0003003eu, 0x00001426u, 0x000016d2u, 0x000200f9u, 0x000016c8u, 0x000200f8u, 0x000016c8u, 0x000700f5u, 0x00000013u, 0x0000f07cu, 0x0000efd0u, 0x000016b1u, 0x000016d2u, 0x000016c7u, 0x000200f9u, 0x00001679u, 0x000200f8u, 0x00001677u, 0x0004007cu, 0x000000b0u, 0x000016d5u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x000016d7u, 0x000001b9u, 0x0003003eu, 0x000016d6u, 0x000016d7u, 0x0004003du, 0x00000006u, 0x000016d9u, 0x000001bau, 0x0003003eu, 0x000016d8u, 0x000016d9u, 0x0003003eu, 0x000016dau, 0x000016d5u, 0x00070039u, 0x00000013u, 0x000016dbu, 0x00000188u, 0x000016d6u, 0x000016d8u, 0x000016dau, 0x0003003eu, 0x000013e3u, 0x000016dbu, 0x0004003du, 0x00000069u, 0x000016dcu, 0x000001beu, 0x000300f7u, 0x000016deu, 0x00000000u, 0x000400fau, 0x000016dcu, 0x000016ddu, 0x000016deu, 0x000200f8u, 0x000016ddu, 0x00050050u, 0x000000efu, 0x000016e1u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000016e2u, 0x000016e1u, 0x0004003du, 0x00000023u, 0x000016e4u, 0x000001b9u, 0x0003003eu, 0x000016e3u, 0x000016e4u, 0x0004003du, 0x00000006u, 0x000016e6u, 0x000001bau, 0x0003003eu, 0x000016e5u, 0x000016e6u, 0x0003003eu, 0x000016e7u, 0x000016e2u, 0x00070039u, 0x00000013u, 0x000016e8u, 0x00000188u, 0x000016e3u, 0x000016e5u, 0x000016e7u, 0x0003003eu, 0x000013fbu, 0x000016e8u, 0x00050050u, 0x000000efu, 0x000016ebu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000016ecu, 0x000016ebu, 0x0004003du, 0x00000023u, 0x000016eeu, 0x000001b9u, 0x0003003eu, 0x000016edu, 0x000016eeu, 0x0004003du, 0x00000006u, 0x000016f0u, 0x000001bau, 0x0003003eu, 0x000016efu, 0x000016f0u, 0x0003003eu, 0x000016f1u, 0x000016ecu, 0x00070039u, 0x00000013u, 0x000016f2u, 0x00000188u, 0x000016edu, 0x000016efu, 0x000016f1u, 0x0003003eu, 0x0000140fu, 0x000016f2u, 0x000200f9u, 0x000016deu, 0x000200f8u, 0x000016deu, 0x000700f5u, 0x00000013u, 0x0000f050u, 0x0000efd0u, 0x00001677u, 0x000016f2u, 0x000016ddu, 0x000700f5u, 0x00000013u, 0x0000eff1u, 0x0000efd0u, 0x00001677u, 0x000016e8u, 0x000016ddu, 0x0004003du, 0x00000069u, 0x000016f3u, 0x000001bfu, 0x000300f7u, 0x000016f5u, 0x00000000u, 0x000400fau, 0x000016f3u, 0x000016f4u, 0x000016f5u, 0x000200f8u, 0x000016f4u, 0x00050050u, 0x000000efu, 0x000016f8u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000016f9u, 0x000016f8u, 0x0004003du, 0x00000023u, 0x000016fbu, 0x000001b9u, 0x0003003eu, 0x000016fau, 0x000016fbu, 0x0004003du, 0x00000006u, 0x000016fdu, 0x000001bau, 0x0003003eu, 0x000016fcu, 0x000016fdu, 0x0003003eu, 0x000016feu, 0x000016f9u, 0x00070039u, 0x00000013u, 0x000016ffu, 0x00000188u, 0x000016fau, 0x000016fcu, 0x000016feu, 0x0003003eu, 0x00001426u, 0x000016ffu, 0x000200f9u, 0x000016f5u, 0x000200f8u, 0x000016f5u, 0x000700f5u, 0x00000013u, 0x0000f07eu, 0x0000efd0u, 0x000016deu, 0x000016ffu, 0x000016f4u, 0x000200f9u, 0x00001679u, 0x000200f8u, 0x00001678u, 0x0004007cu, 0x000000b0u, 0x00001702u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001704u, 0x000001b9u, 0x0003003eu, 0x00001703u, 0x00001704u, 0x0004003du, 0x00000006u, 0x00001706u, 0x000001bau, 0x0003003eu, 0x00001705u, 0x00001706u, 0x0003003eu, 0x00001707u, 0x00001702u, 0x00070039u, 0x00000013u, 0x00001708u, 0x00000166u, 0x00001703u, 0x00001705u, 0x00001707u, 0x0003003eu, 0x000013e3u, 0x00001708u, 0x0004003du, 0x00000069u, 0x00001709u, 0x000001beu, 0x000300f7u, 0x0000170bu, 0x00000000u, 0x000400fau, 0x00001709u, 0x0000170au, 0x0000170bu, 0x000200f8u, 0x0000170au, 0x00050050u, 0x000000efu, 0x0000170eu, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x0000170fu, 0x0000170eu, 0x0004003du, 0x00000023u, 0x00001711u, 0x000001b9u, 0x0003003eu, 0x00001710u, 0x00001711u, 0x0004003du, 0x00000006u, 0x00001713u, 0x000001bau, 0x0003003eu, 0x00001712u, 0x00001713u, 0x0003003eu, 0x00001714u, 0x0000170fu, 0x00070039u, 0x00000013u, 0x00001715u, 0x00000166u, 0x00001710u, 0x00001712u, 0x00001714u, 0x0003003eu, 0x000013fbu, 0x00001715u, 0x00050050u, 0x000000efu, 0x00001718u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001719u, 0x00001718u, 0x0004003du, 0x00000023u, 0x0000171bu, 0x000001b9u, 0x0003003eu, 0x0000171au, 0x0000171bu, 0x0004003du, 0x00000006u, 0x0000171du, 0x000001bau, 0x0003003eu, 0x0000171cu, 0x0000171du, 0x0003003eu, 0x0000171eu, 0x00001719u, 0x00070039u, 0x00000013u, 0x0000171fu, 0x00000166u, 0x0000171au, 0x0000171cu, 0x0000171eu, 0x0003003eu, 0x0000140fu, 0x0000171fu, 0x000200f9u, 0x0000170bu, 0x000200f8u, 0x0000170bu, 0x000700f5u, 0x00000013u, 0x0000f052u, 0x0000efd0u, 0x00001678u, 0x0000171fu, 0x0000170au, 0x000700f5u, 0x00000013u, 0x0000eff3u, 0x0000efd0u, 0x00001678u, 0x00001715u, 0x0000170au, 0x0004003du, 0x00000069u, 0x00001720u, 0x000001bfu, 0x000300f7u, 0x00001722u, 0x00000000u, 0x000400fau, 0x00001720u, 0x00001721u, 0x00001722u, 0x000200f8u, 0x00001721u, 0x00050050u, 0x000000efu, 0x00001725u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001726u, 0x00001725u, 0x0004003du, 0x00000023u, 0x00001728u, 0x000001b9u, 0x0003003eu, 0x00001727u, 0x00001728u, 0x0004003du, 0x00000006u, 0x0000172au, 0x000001bau, 0x0003003eu, 0x00001729u, 0x0000172au, 0x0003003eu, 0x0000172bu, 0x00001726u, 0x00070039u, 0x00000013u, 0x0000172cu, 0x00000166u, 0x00001727u, 0x00001729u, 0x0000172bu, 0x0003003eu, 0x00001426u, 0x0000172cu, 0x000200f9u, 0x00001722u, 0x000200f8u, 0x00001722u, 0x000700f5u, 0x00000013u, 0x0000f080u, 0x0000efd0u, 0x0000170bu, 0x0000172cu, 0x00001721u, 0x000200f9u, 0x00001679u, 0x000200f8u, 0x00001679u, 0x000d00f5u, 0x00000013u, 0x0000f079u, 0x0000efd0u, 0x000014ceu, 0x0000f07au, 0x0000169bu, 0x0000f07cu, 0x000016c8u, 0x0000f07eu, 0x000016f5u, 0x0000f080u, 0x00001722u, 0x000d00f5u, 0x00000013u, 0x0000f04au, 0x0000efd0u, 0x000014ceu, 0x0000f04cu, 0x0000169bu, 0x0000f04eu, 0x000016c8u, 0x0000f050u, 0x000016f5u, 0x0000f052u, 0x00001722u, 0x000d00f5u, 0x00000013u, 0x0000f01au, 0x0000efd0u, 0x000014ceu, 0x00001681u, 0x0000169bu, 0x000016aeu, 0x000016c8u, 0x000016dbu, 0x000016f5u, 0x00001708u, 0x00001722u, 0x000d00f5u, 0x00000013u, 0x0000efebu, 0x0000efd0u, 0x000014ceu, 0x0000efedu, 0x0000169bu, 0x0000efefu, 0x000016c8u, 0x0000eff1u, 0x000016f5u, 0x0000eff3u, 0x00001722u, 0x000200f9u, 0x000014d0u, 0x000200f8u, 0x000014cfu, 0x00050041u, 0x0000007bu, 0x00001730u, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x00001731u, 0x00001730u, 0x00040071u, 0x00000006u, 0x00001732u, 0x00001731u, 0x0004007cu, 0x00000008u, 0x00001733u, 0x00001732u, 0x000300f7u, 0x00001737u, 0x00000000u, 0x000700fbu, 0x00001733u, 0x00001736u, 0x00000000u, 0x00001734u, 0x00000001u, 0x00001735u, 0x000200f8u, 0x00001736u, 0x0004007cu, 0x000000b0u, 0x00001793u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001795u, 0x000001b9u, 0x0003003eu, 0x00001794u, 0x00001795u, 0x0004003du, 0x00000006u, 0x00001797u, 0x000001bau, 0x0003003eu, 0x00001796u, 0x00001797u, 0x0003003eu, 0x00001798u, 0x00001793u, 0x00070039u, 0x00000013u, 0x00001799u, 0x00000166u, 0x00001794u, 0x00001796u, 0x00001798u, 0x0003003eu, 0x000013e3u, 0x00001799u, 0x0004003du, 0x00000069u, 0x0000179au, 0x000001beu, 0x000300f7u, 0x0000179cu, 0x00000000u, 0x000400fau, 0x0000179au, 0x0000179bu, 0x0000179cu, 0x000200f8u, 0x0000179bu, 0x00050050u, 0x000000efu, 0x0000179fu, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x000017a0u, 0x0000179fu, 0x0004003du, 0x00000023u, 0x000017a2u, 0x000001b9u, 0x0003003eu, 0x000017a1u, 0x000017a2u, 0x0004003du, 0x00000006u, 0x000017a4u, 0x000001bau, 0x0003003eu, 0x000017a3u, 0x000017a4u, 0x0003003eu, 0x000017a5u, 0x000017a0u, 0x00070039u, 0x00000013u, 0x000017a6u, 0x00000166u, 0x000017a1u, 0x000017a3u, 0x000017a5u, 0x0003003eu, 0x000013fbu, 0x000017a6u, 0x00050050u, 0x000000efu, 0x000017a9u, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000017aau, 0x000017a9u, 0x0004003du, 0x00000023u, 0x000017acu, 0x000001b9u, 0x0003003eu, 0x000017abu, 0x000017acu, 0x0004003du, 0x00000006u, 0x000017aeu, 0x000001bau, 0x0003003eu, 0x000017adu, 0x000017aeu, 0x0003003eu, 0x000017afu, 0x000017aau, 0x00070039u, 0x00000013u, 0x000017b0u, 0x00000166u, 0x000017abu, 0x000017adu, 0x000017afu, 0x0003003eu, 0x0000140fu, 0x000017b0u, 0x000200f9u, 0x0000179cu, 0x000200f8u, 0x0000179cu, 0x000700f5u, 0x00000013u, 0x0000f055u, 0x0000efd0u, 0x00001736u, 0x000017b0u, 0x0000179bu, 0x000700f5u, 0x00000013u, 0x0000eff6u, 0x0000efd0u, 0x00001736u, 0x000017a6u, 0x0000179bu, 0x0004003du, 0x00000069u, 0x000017b1u, 0x000001bfu, 0x000300f7u, 0x000017b3u, 0x00000000u, 0x000400fau, 0x000017b1u, 0x000017b2u, 0x000017b3u, 0x000200f8u, 0x000017b2u, 0x00050050u, 0x000000efu, 0x000017b6u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x000017b7u, 0x000017b6u, 0x0004003du, 0x00000023u, 0x000017b9u, 0x000001b9u, 0x0003003eu, 0x000017b8u, 0x000017b9u, 0x0004003du, 0x00000006u, 0x000017bbu, 0x000001bau, 0x0003003eu, 0x000017bau, 0x000017bbu, 0x0003003eu, 0x000017bcu, 0x000017b7u, 0x00070039u, 0x00000013u, 0x000017bdu, 0x00000166u, 0x000017b8u, 0x000017bau, 0x000017bcu, 0x0003003eu, 0x00001426u, 0x000017bdu, 0x000200f9u, 0x000017b3u, 0x000200f8u, 0x000017b3u, 0x000700f5u, 0x00000013u, 0x0000f083u, 0x0000efd0u, 0x0000179cu, 0x000017bdu, 0x000017b2u, 0x000200f9u, 0x00001737u, 0x000200f8u, 0x00001734u, 0x0004007cu, 0x000000b0u, 0x00001739u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x0000173bu, 0x000001b9u, 0x0003003eu, 0x0000173au, 0x0000173bu, 0x0004003du, 0x00000006u, 0x0000173du, 0x000001bau, 0x0003003eu, 0x0000173cu, 0x0000173du, 0x0003003eu, 0x0000173eu, 0x00001739u, 0x00070039u, 0x00000013u, 0x0000173fu, 0x00000142u, 0x0000173au, 0x0000173cu, 0x0000173eu, 0x0003003eu, 0x000013e3u, 0x0000173fu, 0x0004003du, 0x00000069u, 0x00001740u, 0x000001beu, 0x000300f7u, 0x00001742u, 0x00000000u, 0x000400fau, 0x00001740u, 0x00001741u, 0x00001742u, 0x000200f8u, 0x00001741u, 0x00050050u, 0x000000efu, 0x00001745u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001746u, 0x00001745u, 0x0004003du, 0x00000023u, 0x00001748u, 0x000001b9u, 0x0003003eu, 0x00001747u, 0x00001748u, 0x0004003du, 0x00000006u, 0x0000174au, 0x000001bau, 0x0003003eu, 0x00001749u, 0x0000174au, 0x0003003eu, 0x0000174bu, 0x00001746u, 0x00070039u, 0x00000013u, 0x0000174cu, 0x00000142u, 0x00001747u, 0x00001749u, 0x0000174bu, 0x0003003eu, 0x000013fbu, 0x0000174cu, 0x00050050u, 0x000000efu, 0x0000174fu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x00001750u, 0x0000174fu, 0x0004003du, 0x00000023u, 0x00001752u, 0x000001b9u, 0x0003003eu, 0x00001751u, 0x00001752u, 0x0004003du, 0x00000006u, 0x00001754u, 0x000001bau, 0x0003003eu, 0x00001753u, 0x00001754u, 0x0003003eu, 0x00001755u, 0x00001750u, 0x00070039u, 0x00000013u, 0x00001756u, 0x00000142u, 0x00001751u, 0x00001753u, 0x00001755u, 0x0003003eu, 0x0000140fu, 0x00001756u, 0x000200f9u, 0x00001742u, 0x000200f8u, 0x00001742u, 0x000700f5u, 0x00000013u, 0x0000f057u, 0x0000efd0u, 0x00001734u, 0x00001756u, 0x00001741u, 0x000700f5u, 0x00000013u, 0x0000eff8u, 0x0000efd0u, 0x00001734u, 0x0000174cu, 0x00001741u, 0x0004003du, 0x00000069u, 0x00001757u, 0x000001bfu, 0x000300f7u, 0x00001759u, 0x00000000u, 0x000400fau, 0x00001757u, 0x00001758u, 0x00001759u, 0x000200f8u, 0x00001758u, 0x00050050u, 0x000000efu, 0x0000175cu, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000175du, 0x0000175cu, 0x0004003du, 0x00000023u, 0x0000175fu, 0x000001b9u, 0x0003003eu, 0x0000175eu, 0x0000175fu, 0x0004003du, 0x00000006u, 0x00001761u, 0x000001bau, 0x0003003eu, 0x00001760u, 0x00001761u, 0x0003003eu, 0x00001762u, 0x0000175du, 0x00070039u, 0x00000013u, 0x00001763u, 0x00000142u, 0x0000175eu, 0x00001760u, 0x00001762u, 0x0003003eu, 0x00001426u, 0x00001763u, 0x000200f9u, 0x00001759u, 0x000200f8u, 0x00001759u, 0x000700f5u, 0x00000013u, 0x0000f085u, 0x0000efd0u, 0x00001742u, 0x00001763u, 0x00001758u, 0x000200f9u, 0x00001737u, 0x000200f8u, 0x00001735u, 0x0004007cu, 0x000000b0u, 0x00001766u, 0x0000ef40u, 0x0004003du, 0x00000023u, 0x00001768u, 0x000001b9u, 0x0003003eu, 0x00001767u, 0x00001768u, 0x0004003du, 0x00000006u, 0x0000176au, 0x000001bau, 0x0003003eu, 0x00001769u, 0x0000176au, 0x0003003eu, 0x0000176bu, 0x00001766u, 0x00070039u, 0x00000013u, 0x0000176cu, 0x00000173u, 0x00001767u, 0x00001769u, 0x0000176bu, 0x0003003eu, 0x000013e3u, 0x0000176cu, 0x0004003du, 0x00000069u, 0x0000176du, 0x000001beu, 0x000300f7u, 0x0000176fu, 0x00000000u, 0x000400fau, 0x0000176du, 0x0000176eu, 0x0000176fu, 0x000200f8u, 0x0000176eu, 0x00050050u, 0x000000efu, 0x00001772u, 0x00001397u, 0x000013a7u, 0x0004007cu, 0x000000b0u, 0x00001773u, 0x00001772u, 0x0004003du, 0x00000023u, 0x00001775u, 0x000001b9u, 0x0003003eu, 0x00001774u, 0x00001775u, 0x0004003du, 0x00000006u, 0x00001777u, 0x000001bau, 0x0003003eu, 0x00001776u, 0x00001777u, 0x0003003eu, 0x00001778u, 0x00001773u, 0x00070039u, 0x00000013u, 0x00001779u, 0x00000173u, 0x00001774u, 0x00001776u, 0x00001778u, 0x0003003eu, 0x000013fbu, 0x00001779u, 0x00050050u, 0x000000efu, 0x0000177cu, 0x00001388u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000177du, 0x0000177cu, 0x0004003du, 0x00000023u, 0x0000177fu, 0x000001b9u, 0x0003003eu, 0x0000177eu, 0x0000177fu, 0x0004003du, 0x00000006u, 0x00001781u, 0x000001bau, 0x0003003eu, 0x00001780u, 0x00001781u, 0x0003003eu, 0x00001782u, 0x0000177du, 0x00070039u, 0x00000013u, 0x00001783u, 0x00000173u, 0x0000177eu, 0x00001780u, 0x00001782u, 0x0003003eu, 0x0000140fu, 0x00001783u, 0x000200f9u, 0x0000176fu, 0x000200f8u, 0x0000176fu, 0x000700f5u, 0x00000013u, 0x0000f059u, 0x0000efd0u, 0x00001735u, 0x00001783u, 0x0000176eu, 0x000700f5u, 0x00000013u, 0x0000effau, 0x0000efd0u, 0x00001735u, 0x00001779u, 0x0000176eu, 0x0004003du, 0x00000069u, 0x00001784u, 0x000001bfu, 0x000300f7u, 0x00001786u, 0x00000000u, 0x000400fau, 0x00001784u, 0x00001785u, 0x00001786u, 0x000200f8u, 0x00001785u, 0x00050050u, 0x000000efu, 0x00001789u, 0x00001397u, 0x000013a9u, 0x0004007cu, 0x000000b0u, 0x0000178au, 0x00001789u, 0x0004003du, 0x00000023u, 0x0000178cu, 0x000001b9u, 0x0003003eu, 0x0000178bu, 0x0000178cu, 0x0004003du, 0x00000006u, 0x0000178eu, 0x000001bau, 0x0003003eu, 0x0000178du, 0x0000178eu, 0x0003003eu, 0x0000178fu, 0x0000178au, 0x00070039u, 0x00000013u, 0x00001790u, 0x00000173u, 0x0000178bu, 0x0000178du, 0x0000178fu, 0x0003003eu, 0x00001426u, 0x00001790u, 0x000200f9u, 0x00001786u, 0x000200f8u, 0x00001786u, 0x000700f5u, 0x00000013u, 0x0000f087u, 0x0000efd0u, 0x0000176fu, 0x00001790u, 0x00001785u, 0x000200f9u, 0x00001737u, 0x000200f8u, 0x00001737u, 0x000900f5u, 0x00000013u, 0x0000f082u, 0x0000f083u, 0x000017b3u, 0x0000f085u, 0x00001759u, 0x0000f087u, 0x00001786u, 0x000900f5u, 0x00000013u, 0x0000f053u, 0x0000f055u, 0x000017b3u, 0x0000f057u, 0x00001759u, 0x0000f059u, 0x00001786u, 0x000900f5u, 0x00000013u, 0x0000f023u, 0x00001799u, 0x000017b3u, 0x0000173fu, 0x00001759u, 0x0000176cu, 0x00001786u, 0x000900f5u, 0x00000013u, 0x0000eff4u, 0x0000eff6u, 0x000017b3u, 0x0000eff8u, 0x00001759u, 0x0000effau, 0x00001786u, 0x000200f9u, 0x000014d0u, 0x000200f8u, 0x000014d0u, 0x000f00f5u, 0x00000013u, 0x0000f067u, 0x0000efd0u, 0x000014c6u, 0x0000f068u, 0x000014d9u, 0x0000f071u, 0x000015aau, 0x0000f072u, 0x000015d7u, 0x0000f079u, 0x00001679u, 0x0000f082u, 0x00001737u, 0x000f00f5u, 0x00000013u, 0x0000f038u, 0x0000efd0u, 0x000014c6u, 0x0000f039u, 0x000014d9u, 0x0000f042u, 0x000015aau, 0x0000f043u, 0x000015d7u, 0x0000f04au, 0x00001679u, 0x0000f053u, 0x00001737u, 0x000f00f5u, 0x00000013u, 0x0000f008u, 0x0000efd0u, 0x000014c6u, 0x0000f009u, 0x000014d9u, 0x000015a7u, 0x000015aau, 0x0000f013u, 0x000015d7u, 0x0000f01au, 0x00001679u, 0x0000f023u, 0x00001737u, 0x000f00f5u, 0x00000013u, 0x0000efd9u, 0x0000efd0u, 0x000014c6u, 0x0000efdau, 0x000014d9u, 0x0000efe3u, 0x000015aau, 0x0000efe4u, 0x000015d7u, 0x0000efebu, 0x00001679u, 0x0000eff4u, 0x00001737u, 0x000200f9u, 0x000013cdu, 0x000200f8u, 0x000013cdu, 0x000700f5u, 0x00000013u, 0x0000f05au, 0x0000f05bu, 0x000013d3u, 0x0000f067u, 0x000014d0u, 0x000700f5u, 0x00000013u, 0x0000f02bu, 0x0000f02cu, 0x000013d3u, 0x0000f038u, 0x000014d0u, 0x000700f5u, 0x00000013u, 0x0000effcu, 0x0000effdu, 0x000013d3u, 0x0000f008u, 0x000014d0u, 0x000700f5u, 0x00000013u, 0x0000efcbu, 0x0000efccu, 0x000013d3u, 0x0000efd9u, 0x000014d0u, 0x0004003du, 0x00000069u, 0x000017c2u, 0x000001c0u, 0x000300f7u, 0x000017c4u, 0x00000000u, 0x000400fau, 0x000017c2u, 0x000017c3u, 0x000017f4u, 0x000200f8u, 0x000017c3u, 0x0004003du, 0x00000013u, 0x000017c6u, 0x000001c1u, 0x00040072u, 0x00000009u, 0x000017c7u, 0x000017c6u, 0x000600cau, 0x00000009u, 0x000017c8u, 0x000017c7u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000017c5u, 0x000017c8u, 0x000300f7u, 0x000017ceu, 0x00000000u, 0x000400fau, 0x000013bfu, 0x000017cdu, 0x000017d1u, 0x000200f8u, 0x000017cdu, 0x0004003du, 0x00000009u, 0x000017cfu, 0x000017c5u, 0x0007004fu, 0x000000efu, 0x000017d0u, 0x000017cfu, 0x000017cfu, 0x00000001u, 0x00000000u, 0x0003003eu, 0x000017ccu, 0x000017d0u, 0x000200f9u, 0x000017ceu, 0x000200f8u, 0x000017d1u, 0x0004003du, 0x00000009u, 0x000017d2u, 0x000017c5u, 0x0007004fu, 0x000000efu, 0x000017d3u, 0x000017d2u, 0x000017d2u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017ccu, 0x000017d3u, 0x000200f9u, 0x000017ceu, 0x000200f8u, 0x000017ceu, 0x000700f5u, 0x000000efu, 0x0000f0b4u, 0x000017d0u, 0x000017cdu, 0x000017d3u, 0x000017d1u, 0x0003003eu, 0x000017c9u, 0x0000f0b4u, 0x00050041u, 0x00000046u, 0x000017d6u, 0x000017c9u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000017d7u, 0x000017d6u, 0x00050082u, 0x00000013u, 0x000017dau, 0x0000efcbu, 0x0000effcu, 0x00040072u, 0x00000009u, 0x000017dbu, 0x000017dau, 0x00070050u, 0x00000009u, 0x000017dcu, 0x000017d7u, 0x000017d7u, 0x000017d7u, 0x000017d7u, 0x00050084u, 0x00000009u, 0x000017ddu, 0x000017dcu, 0x000017dbu, 0x00050041u, 0x00000046u, 0x000017deu, 0x000017c9u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000017dfu, 0x000017deu, 0x00050082u, 0x00000013u, 0x000017e2u, 0x0000f02bu, 0x0000effcu, 0x00040072u, 0x00000009u, 0x000017e3u, 0x000017e2u, 0x00070050u, 0x00000009u, 0x000017e4u, 0x000017dfu, 0x000017dfu, 0x000017dfu, 0x000017dfu, 0x00050084u, 0x00000009u, 0x000017e5u, 0x000017e4u, 0x000017e3u, 0x00050080u, 0x00000009u, 0x000017e6u, 0x000017ddu, 0x000017e5u, 0x00050080u, 0x00000009u, 0x000017e8u, 0x000017e6u, 0x0000f375u, 0x0003003eu, 0x000017d5u, 0x000017e8u, 0x000500c3u, 0x00000009u, 0x000017ebu, 0x000017e8u, 0x0000f380u, 0x0003003eu, 0x000017d5u, 0x000017ebu, 0x00050041u, 0x00000046u, 0x000017ecu, 0x000017c5u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000017edu, 0x000017ecu, 0x00070050u, 0x00000009u, 0x000017efu, 0x000017edu, 0x000017edu, 0x000017edu, 0x000017edu, 0x00050080u, 0x00000009u, 0x000017f0u, 0x000017ebu, 0x000017efu, 0x0003003eu, 0x000017d5u, 0x000017f0u, 0x00040072u, 0x00000013u, 0x000017f3u, 0x000017f0u, 0x0003003eu, 0x000017f1u, 0x000017f3u, 0x000200f9u, 0x000017c4u, 0x000200f8u, 0x000017f4u, 0x000300f7u, 0x000017f7u, 0x00000000u, 0x000400fau, 0x000013bcu, 0x000017f6u, 0x0000182fu, 0x000200f8u, 0x000017f6u, 0x0004003du, 0x00000069u, 0x000017f8u, 0x000001beu, 0x000300f7u, 0x000017fau, 0x00000000u, 0x000400fau, 0x000017f8u, 0x000017f9u, 0x0000182du, 0x000200f8u, 0x000017f9u, 0x000500c7u, 0x00000008u, 0x000017fdu, 0x00001388u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x000017feu, 0x000017fdu, 0x00000233u, 0x0004003du, 0x00000008u, 0x00001800u, 0x0000137au, 0x000500c3u, 0x00000008u, 0x00001801u, 0x00001800u, 0x0000022au, 0x000500c5u, 0x00000008u, 0x00001802u, 0x000017feu, 0x00001801u, 0x0003003eu, 0x000017fbu, 0x00001802u, 0x0004003du, 0x00000008u, 0x00001806u, 0x0000137cu, 0x00050050u, 0x000000efu, 0x00001807u, 0x00001802u, 0x00001806u, 0x0007004fu, 0x000001aeu, 0x0000180au, 0x0000effcu, 0x0000effcu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001808u, 0x0000180au, 0x0007004fu, 0x000001aeu, 0x0000180du, 0x0000efcbu, 0x0000efcbu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000180bu, 0x0000180du, 0x0007004fu, 0x000001aeu, 0x00001810u, 0x0000f02bu, 0x0000f02bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000180eu, 0x00001810u, 0x0007004fu, 0x000001aeu, 0x00001813u, 0x0000f05au, 0x0000f05au, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001811u, 0x00001813u, 0x0003003eu, 0x00001814u, 0x00001807u, 0x00090039u, 0x000001aeu, 0x00001815u, 0x000001b6u, 0x00001808u, 0x0000180bu, 0x0000180eu, 0x00001811u, 0x00001814u, 0x0003003eu, 0x00001803u, 0x00001815u, 0x0007004fu, 0x000001aeu, 0x00001819u, 0x0000effcu, 0x0000effcu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001817u, 0x00001819u, 0x0007004fu, 0x000001aeu, 0x0000181cu, 0x0000efcbu, 0x0000efcbu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000181au, 0x0000181cu, 0x0007004fu, 0x000001aeu, 0x0000181fu, 0x0000f02bu, 0x0000f02bu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000181du, 0x0000181fu, 0x0007004fu, 0x000001aeu, 0x00001822u, 0x0000f05au, 0x0000f05au, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001820u, 0x00001822u, 0x0004003du, 0x000000efu, 0x00001824u, 0x00001374u, 0x0003003eu, 0x00001823u, 0x00001824u, 0x00090039u, 0x000001aeu, 0x00001825u, 0x000001b6u, 0x00001817u, 0x0000181au, 0x0000181du, 0x00001820u, 0x00001823u, 0x0003003eu, 0x00001816u, 0x00001825u, 0x00050051u, 0x00000012u, 0x00001828u, 0x00001815u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00001829u, 0x00001815u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000182au, 0x00001825u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000182bu, 0x00001825u, 0x00000001u, 0x00070050u, 0x00000013u, 0x0000182cu, 0x00001828u, 0x00001829u, 0x0000182au, 0x0000182bu, 0x0003003eu, 0x000017f1u, 0x0000182cu, 0x000200f9u, 0x000017fau, 0x000200f8u, 0x0000182du, 0x0003003eu, 0x000017f1u, 0x0000effcu, 0x000200f9u, 0x000017fau, 0x000200f8u, 0x000017fau, 0x000700f5u, 0x00000013u, 0x0000f0bau, 0x0000182cu, 0x000017f9u, 0x0000effcu, 0x0000182du, 0x000200f9u, 0x000017f7u, 0x000200f8u, 0x0000182fu, 0x0004003du, 0x00000069u, 0x00001830u, 0x000001bfu, 0x000300f7u, 0x00001832u, 0x00000000u, 0x000400fau, 0x00001830u, 0x00001831u, 0x0000183eu, 0x000200f8u, 0x00001831u, 0x00050080u, 0x00000013u, 0x00001835u, 0x0000effcu, 0x0000f02bu, 0x00050080u, 0x00000013u, 0x00001837u, 0x00001835u, 0x0000efcbu, 0x00050080u, 0x00000013u, 0x00001839u, 0x00001837u, 0x0000f05au, 0x00050080u, 0x00000013u, 0x0000183bu, 0x00001839u, 0x0000f37fu, 0x000500c3u, 0x00000013u, 0x0000183du, 0x0000183bu, 0x0000f37fu, 0x0003003eu, 0x000017f1u, 0x0000183du, 0x000200f9u, 0x00001832u, 0x000200f8u, 0x0000183eu, 0x000300f7u, 0x00001844u, 0x00000000u, 0x000400fau, 0x000013bfu, 0x00001843u, 0x00001849u, 0x000200f8u, 0x00001843u, 0x0004003du, 0x000000efu, 0x00001845u, 0x00001374u, 0x0007004fu, 0x000000efu, 0x00001846u, 0x00001845u, 0x00001845u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00001848u, 0x0000f381u, 0x00001846u, 0x0003003eu, 0x00001842u, 0x00001848u, 0x000200f9u, 0x00001844u, 0x000200f8u, 0x00001849u, 0x0004003du, 0x000000efu, 0x0000184au, 0x00001374u, 0x0003003eu, 0x00001842u, 0x0000184au, 0x000200f9u, 0x00001844u, 0x000200f8u, 0x00001844u, 0x000700f5u, 0x000000efu, 0x0000efc9u, 0x00001848u, 0x00001843u, 0x0000184au, 0x00001849u, 0x00040072u, 0x000001aeu, 0x0000184cu, 0x0000efc9u, 0x0003003eu, 0x0000183fu, 0x0000184cu, 0x00050082u, 0x00000013u, 0x0000184fu, 0x0000efcbu, 0x0000effcu, 0x00050041u, 0x000001c4u, 0x00001850u, 0x0000183fu, 0x0000032du, 0x0004003du, 0x00000012u, 0x00001851u, 0x00001850u, 0x00070050u, 0x00000013u, 0x00001852u, 0x00001851u, 0x00001851u, 0x00001851u, 0x00001851u, 0x00050084u, 0x00000013u, 0x00001853u, 0x0000184fu, 0x00001852u, 0x0003003eu, 0x000017f1u, 0x00001853u, 0x00050082u, 0x00000013u, 0x00001856u, 0x0000f02bu, 0x0000effcu, 0x00050041u, 0x000001c4u, 0x00001857u, 0x0000183fu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00001858u, 0x00001857u, 0x00070050u, 0x00000013u, 0x00001859u, 0x00001858u, 0x00001858u, 0x00001858u, 0x00001858u, 0x00050084u, 0x00000013u, 0x0000185au, 0x00001856u, 0x00001859u, 0x00050080u, 0x00000013u, 0x0000185cu, 0x00001853u, 0x0000185au, 0x0003003eu, 0x000017f1u, 0x0000185cu, 0x00050080u, 0x00000013u, 0x0000185fu, 0x0000185cu, 0x0000f384u, 0x0003003eu, 0x000017f1u, 0x0000185fu, 0x000500c3u, 0x00000013u, 0x00001862u, 0x0000185fu, 0x0000f385u, 0x0003003eu, 0x000017f1u, 0x00001862u, 0x00050080u, 0x00000013u, 0x00001865u, 0x00001862u, 0x0000effcu, 0x0003003eu, 0x000017f1u, 0x00001865u, 0x000200f9u, 0x00001832u, 0x000200f8u, 0x00001832u, 0x000700f5u, 0x00000013u, 0x0000f0bbu, 0x0000183du, 0x00001831u, 0x00001865u, 0x00001844u, 0x000200f9u, 0x000017f7u, 0x000200f8u, 0x000017f7u, 0x000700f5u, 0x00000013u, 0x0000f0b9u, 0x0000f0bau, 0x000017fau, 0x0000f0bbu, 0x00001832u, 0x000200f9u, 0x000017c4u, 0x000200f8u, 0x000017c4u, 0x000700f5u, 0x00000013u, 0x0000f0b8u, 0x000017f3u, 0x000017ceu, 0x0000f0b9u, 0x000017f7u, 0x000200feu, 0x0000f0b8u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000001d2u, 0x00000000u, 0x000001c5u, 0x00030037u, 0x00000007u, 0x000001c6u, 0x00030037u, 0x00000007u, 0x000001c7u, 0x00030037u, 0x000001c4u, 0x000001c8u, 0x00030037u, 0x00000007u, 0x000001c9u, 0x00030037u, 0x00000046u, 0x000001cau, 0x00030037u, 0x00000106u, 0x000001cbu, 0x00030037u, 0x00000106u, 0x000001ccu, 0x00030037u, 0x00000106u, 0x000001cdu, 0x00030037u, 0x0000006au, 0x000001ceu, 0x00030037u, 0x0000006au, 0x000001cfu, 0x00030037u, 0x0000006au, 0x000001d0u, 0x00030037u, 0x0000006au, 0x000001d1u, 0x000200f8u, 0x000001d3u, 0x0004003bu, 0x0000006au, 0x00001869u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000186au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000186bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001871u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000187au, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001883u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001887u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000018afu, 0x00000007u, 0x0003003eu, 0x00001869u, 0x00000536u, 0x0003003eu, 0x0000186au, 0x00000536u, 0x0003003eu, 0x0000186bu, 0x0000032du, 0x0004003du, 0x00000069u, 0x0000186cu, 0x000001ceu, 0x000300f7u, 0x0000186eu, 0x00000000u, 0x000400fau, 0x0000186cu, 0x0000186du, 0x00001870u, 0x000200f8u, 0x0000186du, 0x0003003eu, 0x0000186au, 0x00000559u, 0x0003003eu, 0x000001c8u, 0x0000186fu, 0x000200f9u, 0x0000186eu, 0x000200f8u, 0x00001870u, 0x0004003du, 0x000000efu, 0x00001872u, 0x000001ccu, 0x0004003du, 0x000000efu, 0x00001873u, 0x000001cbu, 0x00050082u, 0x000000efu, 0x00001874u, 0x00001872u, 0x00001873u, 0x0003003eu, 0x00001871u, 0x00001874u, 0x000500c3u, 0x000000efu, 0x00001877u, 0x00001874u, 0x0000f379u, 0x000500c6u, 0x000000efu, 0x00001879u, 0x00001874u, 0x00001877u, 0x0003003eu, 0x00001871u, 0x00001879u, 0x0004003du, 0x000000efu, 0x0000187bu, 0x000001cdu, 0x0004003du, 0x000000efu, 0x0000187cu, 0x000001cbu, 0x00050082u, 0x000000efu, 0x0000187du, 0x0000187bu, 0x0000187cu, 0x0003003eu, 0x0000187au, 0x0000187du, 0x000500c3u, 0x000000efu, 0x00001880u, 0x0000187du, 0x0000f379u, 0x000500c6u, 0x000000efu, 0x00001882u, 0x0000187du, 0x00001880u, 0x0003003eu, 0x0000187au, 0x00001882u, 0x0007000cu, 0x000000efu, 0x00001886u, 0x00000001u, 0x0000002au, 0x00001879u, 0x00001882u, 0x0003003eu, 0x00001883u, 0x00001886u, 0x00050041u, 0x00000046u, 0x00001888u, 0x00001883u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001889u, 0x00001888u, 0x00050041u, 0x00000046u, 0x0000188au, 0x00001883u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000188bu, 0x0000188au, 0x0007000cu, 0x00000008u, 0x0000188cu, 0x00000001u, 0x0000002au, 0x00001889u, 0x0000188bu, 0x0003003eu, 0x00001887u, 0x0000188cu, 0x000500afu, 0x00000069u, 0x0000188fu, 0x0000188cu, 0x0000188eu, 0x000300f7u, 0x00001891u, 0x00000000u, 0x000400fau, 0x0000188fu, 0x00001890u, 0x00001893u, 0x000200f8u, 0x00001890u, 0x0003003eu, 0x0000186au, 0x00000559u, 0x0003003eu, 0x000001c8u, 0x0000186fu, 0x0004003du, 0x00000006u, 0x00001892u, 0x000001c9u, 0x0003003eu, 0x0000186bu, 0x00001892u, 0x000200f9u, 0x00001891u, 0x000200f8u, 0x00001893u, 0x000500b1u, 0x00000069u, 0x00001895u, 0x0000188cu, 0x0000114fu, 0x000300f7u, 0x00001897u, 0x00000000u, 0x000400fau, 0x00001895u, 0x00001896u, 0x000018aeu, 0x000200f8u, 0x00001896u, 0x0004003du, 0x00000006u, 0x00001898u, 0x000001c9u, 0x000500aau, 0x00000069u, 0x00001899u, 0x00001898u, 0x0000032du, 0x0003003eu, 0x0000186au, 0x00001899u, 0x0003003eu, 0x00001869u, 0x00000559u, 0x0004003du, 0x00000069u, 0x0000189au, 0x000001d0u, 0x000400a8u, 0x00000069u, 0x0000189bu, 0x0000189au, 0x0004003du, 0x00000069u, 0x0000189cu, 0x000001d1u, 0x000400a8u, 0x00000069u, 0x0000189du, 0x0000189cu, 0x000500a7u, 0x00000069u, 0x0000189eu, 0x0000189bu, 0x0000189du, 0x000300f7u, 0x000018a0u, 0x00000000u, 0x000400fau, 0x0000189eu, 0x0000189fu, 0x000018a4u, 0x000200f8u, 0x0000189fu, 0x000600a9u, 0x00000008u, 0x000018a2u, 0x00001899u, 0x0000035eu, 0x00000220u, 0x00040072u, 0x00000012u, 0x000018a3u, 0x000018a2u, 0x0003003eu, 0x000001c8u, 0x000018a3u, 0x000200f9u, 0x000018a0u, 0x000200f8u, 0x000018a4u, 0x0004003du, 0x00000008u, 0x000018a5u, 0x000001cau, 0x0007000cu, 0x00000008u, 0x000018a7u, 0x00000001u, 0x0000002au, 0x000018a5u, 0x0000188cu, 0x000500c4u, 0x00000008u, 0x000018a8u, 0x000018a7u, 0x00000230u, 0x0004003du, 0x00000069u, 0x000018a9u, 0x000001d0u, 0x000600a9u, 0x00000008u, 0x000018abu, 0x000018a9u, 0x000018aau, 0x00000220u, 0x00050080u, 0x00000008u, 0x000018acu, 0x000018a8u, 0x000018abu, 0x00040072u, 0x00000012u, 0x000018adu, 0x000018acu, 0x0003003eu, 0x000001c8u, 0x000018adu, 0x000200f9u, 0x000018a0u, 0x000200f8u, 0x000018a0u, 0x000200f9u, 0x00001897u, 0x000200f8u, 0x000018aeu, 0x000500c3u, 0x00000008u, 0x000018b1u, 0x0000188cu, 0x00000236u, 0x0006000cu, 0x00000008u, 0x000018b2u, 0x00000001u, 0x0000004au, 0x000018b1u, 0x0007000cu, 0x00000008u, 0x000018b3u, 0x00000001u, 0x0000002au, 0x000018b2u, 0x00000220u, 0x0003003eu, 0x000018afu, 0x000018b3u, 0x0004007cu, 0x00000006u, 0x000018b5u, 0x000018b3u, 0x0004003du, 0x00000006u, 0x000018b6u, 0x000001c9u, 0x000500aeu, 0x00000069u, 0x000018b7u, 0x000018b5u, 0x000018b6u, 0x0003003eu, 0x0000186au, 0x000018b7u, 0x0004003du, 0x00000069u, 0x000018b9u, 0x000001d0u, 0x000400a8u, 0x00000069u, 0x000018bau, 0x000018b9u, 0x000500a7u, 0x00000069u, 0x000018bbu, 0x000018b7u, 0x000018bau, 0x0004003du, 0x00000069u, 0x000018bcu, 0x000001d1u, 0x000400a8u, 0x00000069u, 0x000018bdu, 0x000018bcu, 0x000500a7u, 0x00000069u, 0x000018beu, 0x000018bbu, 0x000018bdu, 0x000300f7u, 0x000018c0u, 0x00000000u, 0x000400fau, 0x000018beu, 0x000018bfu, 0x000018c1u, 0x000200f8u, 0x000018bfu, 0x0003003eu, 0x000001c8u, 0x0000186fu, 0x000200f9u, 0x000018c0u, 0x000200f8u, 0x000018c1u, 0x000500c4u, 0x00000008u, 0x000018c3u, 0x0000188cu, 0x00000230u, 0x000500c3u, 0x00000008u, 0x000018c5u, 0x000018c3u, 0x000018b3u, 0x000500c7u, 0x00000008u, 0x000018c6u, 0x000018c5u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x000018c7u, 0x000018c6u, 0x0003003eu, 0x000001c8u, 0x000018c7u, 0x0003003eu, 0x0000186bu, 0x000018b5u, 0x000200f9u, 0x000018c0u, 0x000200f8u, 0x000018c0u, 0x000600a9u, 0x00000006u, 0x0000f3b1u, 0x000018beu, 0x0000032du, 0x000018b5u, 0x000200f9u, 0x00001897u, 0x000200f8u, 0x00001897u, 0x000700f5u, 0x00000006u, 0x0000f0c4u, 0x0000032du, 0x000018a0u, 0x0000f3b1u, 0x000018c0u, 0x000700f5u, 0x00000069u, 0x0000f0beu, 0x00001899u, 0x000018a0u, 0x000018b7u, 0x000018c0u, 0x000600a9u, 0x00000069u, 0x0000f3b2u, 0x00001895u, 0x00000559u, 0x00000536u, 0x000200f9u, 0x00001891u, 0x000200f8u, 0x00001891u, 0x000700f5u, 0x00000069u, 0x0000f0cau, 0x00000536u, 0x00001890u, 0x0000f3b2u, 0x00001897u, 0x000700f5u, 0x00000006u, 0x0000f0c3u, 0x00001892u, 0x00001890u, 0x0000f0c4u, 0x00001897u, 0x000700f5u, 0x00000069u, 0x0000f0bdu, 0x00000559u, 0x00001890u, 0x0000f0beu, 0x00001897u, 0x000200f9u, 0x0000186eu, 0x000200f8u, 0x0000186eu, 0x000700f5u, 0x00000069u, 0x0000f0c9u, 0x00000536u, 0x0000186du, 0x0000f0cau, 0x00001891u, 0x000700f5u, 0x00000006u, 0x0000f0c2u, 0x0000032du, 0x0000186du, 0x0000f0c3u, 0x00001891u, 0x000700f5u, 0x00000069u, 0x0000f0bcu, 0x00000559u, 0x0000186du, 0x0000f0bdu, 0x00001891u, 0x0004003du, 0x00000069u, 0x000018cau, 0x000001cfu, 0x000300f7u, 0x000018ccu, 0x00000000u, 0x000400fau, 0x000018cau, 0x000018cbu, 0x000018ccu, 0x000200f8u, 0x000018cbu, 0x000300f7u, 0x000018cfu, 0x00000000u, 0x000400fau, 0x0000f0bcu, 0x000018ceu, 0x000018cfu, 0x000200f8u, 0x000018ceu, 0x0004003du, 0x00000006u, 0x000018d0u, 0x000001c9u, 0x0003003eu, 0x0000186bu, 0x000018d0u, 0x000200f9u, 0x000018cfu, 0x000200f8u, 0x000018cfu, 0x000700f5u, 0x00000006u, 0x0000f0c1u, 0x0000f0c2u, 0x000018cbu, 0x000018d0u, 0x000018ceu, 0x0004003du, 0x00000069u, 0x000018d1u, 0x000001d1u, 0x000400a8u, 0x00000069u, 0x000018d2u, 0x000018d1u, 0x000300f7u, 0x000018d4u, 0x00000000u, 0x000400fau, 0x000018d2u, 0x000018d3u, 0x000018e9u, 0x000200f8u, 0x000018d3u, 0x0004003du, 0x00000006u, 0x000018d5u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018d7u, 0x000018d5u, 0x0000f0c1u, 0x000500c7u, 0x00000006u, 0x000018d8u, 0x000018d7u, 0x00000742u, 0x0003003eu, 0x000001c6u, 0x000018d8u, 0x000400a8u, 0x00000069u, 0x000018dau, 0x0000f0bcu, 0x000300f7u, 0x000018dcu, 0x00000000u, 0x000400fau, 0x000018dau, 0x000018dbu, 0x000018dcu, 0x000200f8u, 0x000018dbu, 0x0004003du, 0x00000069u, 0x000018ddu, 0x000001d0u, 0x000400a8u, 0x00000069u, 0x000018deu, 0x000018ddu, 0x000500a7u, 0x00000069u, 0x000018e0u, 0x000018deu, 0x0000f0c9u, 0x000200f9u, 0x000018dcu, 0x000200f8u, 0x000018dcu, 0x000700f5u, 0x00000069u, 0x000018e1u, 0x0000f0bcu, 0x000018d3u, 0x000018e0u, 0x000018dbu, 0x000300f7u, 0x000018e3u, 0x00000000u, 0x000400fau, 0x000018e1u, 0x000018e2u, 0x000018e5u, 0x000200f8u, 0x000018e2u, 0x0004003du, 0x00000006u, 0x000018e4u, 0x000001c6u, 0x0003003eu, 0x000001c7u, 0x000018e4u, 0x000200f9u, 0x000018e3u, 0x000200f8u, 0x000018e5u, 0x0004003du, 0x00000006u, 0x000018e6u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018e7u, 0x000018e6u, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x000018e8u, 0x000018e7u, 0x00000742u, 0x0003003eu, 0x000001c7u, 0x000018e8u, 0x000200f9u, 0x000018e3u, 0x000200f8u, 0x000018e3u, 0x000200f9u, 0x000018d4u, 0x000200f8u, 0x000018e9u, 0x0004003du, 0x00000006u, 0x000018eau, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018ecu, 0x000018eau, 0x0000f0c1u, 0x000500a6u, 0x00000069u, 0x000018efu, 0x0000f0bcu, 0x0000f0c9u, 0x000600a9u, 0x00000008u, 0x000018f0u, 0x000018efu, 0x0000022au, 0x0000022du, 0x0004007cu, 0x00000006u, 0x000018f1u, 0x000018f0u, 0x00050080u, 0x00000006u, 0x000018f2u, 0x000018ecu, 0x000018f1u, 0x000500c7u, 0x00000006u, 0x000018f3u, 0x000018f2u, 0x00000742u, 0x0003003eu, 0x000001c7u, 0x000018f3u, 0x0004003du, 0x00000006u, 0x000018f4u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018f6u, 0x000018f4u, 0x0000f0c1u, 0x000600a9u, 0x00000008u, 0x000018f8u, 0x0000f0c9u, 0x00000220u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000018f9u, 0x000018f8u, 0x00050080u, 0x00000006u, 0x000018fau, 0x000018f6u, 0x000018f9u, 0x000500c7u, 0x00000006u, 0x000018fbu, 0x000018fau, 0x00000742u, 0x0003003eu, 0x000001c6u, 0x000018fbu, 0x000200f9u, 0x000018d4u, 0x000200f8u, 0x000018d4u, 0x000200f9u, 0x000018ccu, 0x000200f8u, 0x000018ccu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000001d7u, 0x00000000u, 0x000001d4u, 0x00030037u, 0x000000e4u, 0x000001d5u, 0x00030037u, 0x000000e4u, 0x000001d6u, 0x000200f8u, 0x000001d8u, 0x0004003bu, 0x000000dfu, 0x000018fcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001900u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000190cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000191fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000192bu, 0x00000007u, 0x0004003du, 0x00000013u, 0x000018fdu, 0x000001d5u, 0x00040072u, 0x00000009u, 0x000018feu, 0x000018fdu, 0x000600cau, 0x00000009u, 0x000018ffu, 0x000018feu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000018fcu, 0x000018ffu, 0x00050041u, 0x00000046u, 0x00001901u, 0x000018fcu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00001902u, 0x00001901u, 0x00050041u, 0x000001c4u, 0x00001903u, 0x000001d6u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00001904u, 0x00001903u, 0x00040072u, 0x00000008u, 0x00001905u, 0x00001904u, 0x00050041u, 0x00000046u, 0x00001906u, 0x000018fcu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001907u, 0x00001906u, 0x00050084u, 0x00000008u, 0x00001908u, 0x00001905u, 0x00001907u, 0x00050080u, 0x00000008u, 0x00001909u, 0x00001908u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x0000190au, 0x00001909u, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000190bu, 0x00001902u, 0x0000190au, 0x0003003eu, 0x00001900u, 0x0000190bu, 0x0004003du, 0x00000008u, 0x0000190eu, 0x00001901u, 0x00050041u, 0x000001c4u, 0x0000190fu, 0x000001d6u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00001910u, 0x0000190fu, 0x00040072u, 0x00000008u, 0x00001911u, 0x00001910u, 0x00050041u, 0x00000046u, 0x00001912u, 0x000018fcu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001913u, 0x00001912u, 0x00050084u, 0x00000008u, 0x00001914u, 0x00001911u, 0x00001913u, 0x00050041u, 0x000001c4u, 0x00001915u, 0x000001d6u, 0x00000386u, 0x0004003du, 0x00000012u, 0x00001916u, 0x00001915u, 0x00040072u, 0x00000008u, 0x00001917u, 0x00001916u, 0x0004003du, 0x00000008u, 0x00001919u, 0x00001906u, 0x00050084u, 0x00000008u, 0x0000191au, 0x00001917u, 0x00001919u, 0x00050080u, 0x00000008u, 0x0000191bu, 0x00001914u, 0x0000191au, 0x00050080u, 0x00000008u, 0x0000191cu, 0x0000191bu, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x0000191du, 0x0000191cu, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000191eu, 0x0000190eu, 0x0000191du, 0x0003003eu, 0x0000190cu, 0x0000191eu, 0x0004003du, 0x00000008u, 0x00001921u, 0x00001901u, 0x00050041u, 0x000001c4u, 0x00001922u, 0x000001d6u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001923u, 0x00001922u, 0x00040072u, 0x00000008u, 0x00001924u, 0x00001923u, 0x0004003du, 0x00000008u, 0x00001926u, 0x00001912u, 0x00050084u, 0x00000008u, 0x00001927u, 0x00001924u, 0x00001926u, 0x00050080u, 0x00000008u, 0x00001928u, 0x00001927u, 0x00000af3u, 0x000500c3u, 0x00000008u, 0x00001929u, 0x00001928u, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000192au, 0x00001921u, 0x00001929u, 0x0003003eu, 0x0000191fu, 0x0000192au, 0x0004003du, 0x00000008u, 0x0000192du, 0x00001901u, 0x0003003eu, 0x0000192bu, 0x0000192du, 0x00040072u, 0x00000012u, 0x0000192fu, 0x0000190bu, 0x00040072u, 0x00000012u, 0x00001931u, 0x0000191eu, 0x00040072u, 0x00000012u, 0x00001933u, 0x0000192au, 0x00040072u, 0x00000012u, 0x00001935u, 0x0000192du, 0x00070050u, 0x00000013u, 0x00001936u, 0x0000192fu, 0x00001931u, 0x00001933u, 0x00001935u, 0x000200feu, 0x00001936u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001dbu, 0x00000000u, 0x000001d9u, 0x00030037u, 0x000000dfu, 0x000001dau, 0x000200f8u, 0x000001dcu, 0x0004003du, 0x00000009u, 0x00001939u, 0x000001dau, 0x00050082u, 0x00000009u, 0x0000193bu, 0x00001939u, 0x0000f375u, 0x000600cau, 0x00000009u, 0x0000193cu, 0x0000193bu, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000193eu, 0x0000193cu, 0x0000f375u, 0x000200feu, 0x0000193eu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000001e2u, 0x00000000u, 0x000001ddu, 0x00030037u, 0x000000dfu, 0x000001deu, 0x00030037u, 0x000000dfu, 0x000001dfu, 0x00030037u, 0x000000dfu, 0x000001e0u, 0x00030037u, 0x000000dfu, 0x000001e1u, 0x000200f8u, 0x000001e3u, 0x0004003bu, 0x000000dfu, 0x00001943u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001946u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001949u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000194cu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00001941u, 0x000001e0u, 0x000600cau, 0x00000009u, 0x00001942u, 0x00001941u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000001e0u, 0x00001942u, 0x0004003du, 0x00000009u, 0x00001944u, 0x000001deu, 0x0003003eu, 0x00001943u, 0x00001944u, 0x00050039u, 0x00000009u, 0x00001945u, 0x000001dbu, 0x00001943u, 0x0003003eu, 0x000001deu, 0x00001945u, 0x0004003du, 0x00000009u, 0x00001947u, 0x000001dfu, 0x0003003eu, 0x00001946u, 0x00001947u, 0x00050039u, 0x00000009u, 0x00001948u, 0x000001dbu, 0x00001946u, 0x0003003eu, 0x000001dfu, 0x00001948u, 0x0004003du, 0x00000009u, 0x0000194au, 0x000001e1u, 0x0003003eu, 0x00001949u, 0x0000194au, 0x00050039u, 0x00000009u, 0x0000194bu, 0x000001dbu, 0x00001949u, 0x0003003eu, 0x000001e1u, 0x0000194bu, 0x0004003du, 0x00000009u, 0x0000194du, 0x000001deu, 0x0004003du, 0x00000009u, 0x0000194eu, 0x000001dfu, 0x00050082u, 0x00000009u, 0x0000194fu, 0x0000194du, 0x0000194eu, 0x0004003du, 0x00000009u, 0x00001950u, 0x000001e0u, 0x00050084u, 0x00000009u, 0x00001951u, 0x0000194fu, 0x00001950u, 0x0003003eu, 0x0000194cu, 0x00001951u, 0x00050080u, 0x00000009u, 0x00001954u, 0x00001951u, 0x0000f375u, 0x0003003eu, 0x0000194cu, 0x00001954u, 0x000500c3u, 0x00000009u, 0x00001957u, 0x00001954u, 0x0000f380u, 0x00040072u, 0x00000013u, 0x00001958u, 0x00001957u, 0x0004003du, 0x00000009u, 0x00001959u, 0x000001e1u, 0x00040072u, 0x00000013u, 0x0000195au, 0x00001959u, 0x00050080u, 0x00000013u, 0x0000195bu, 0x00001958u, 0x0000195au, 0x000200feu, 0x0000195bu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001eau, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001e7u, 0x00030037u, 0x00000046u, 0x000001e8u, 0x00030037u, 0x00000046u, 0x000001e9u, 0x000200f8u, 0x000001ebu, 0x0004003bu, 0x00000045u, 0x00001967u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001994u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000195eu, 0x000001e8u, 0x000300f7u, 0x00001966u, 0x00000000u, 0x000f00fbu, 0x0000195eu, 0x00001965u, 0x00000000u, 0x0000195fu, 0x00000001u, 0x00001960u, 0x00000002u, 0x00001961u, 0x00000004u, 0x00001962u, 0x00000007u, 0x00001963u, 0x00000006u, 0x00001964u, 0x000200f8u, 0x00001965u, 0x00050041u, 0x00000068u, 0x00001985u, 0x000001e7u, 0x00000220u, 0x0004003du, 0x00000010u, 0x00001986u, 0x00001985u, 0x0008004fu, 0x00000047u, 0x00001987u, 0x00001986u, 0x00001986u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001988u, 0x00001987u, 0x0004007cu, 0x00000044u, 0x00001989u, 0x00001988u, 0x0003003eu, 0x00001967u, 0x00001989u, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x0000195fu, 0x00050041u, 0x000000e4u, 0x00001968u, 0x000001e7u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001969u, 0x00001968u, 0x0008004fu, 0x000004b6u, 0x0000196au, 0x00001969u, 0x00001969u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000196bu, 0x0000196au, 0x0003003eu, 0x00001967u, 0x0000196bu, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x00001960u, 0x00050041u, 0x000000e4u, 0x0000196du, 0x000001e7u, 0x00000239u, 0x0004003du, 0x00000013u, 0x0000196eu, 0x0000196du, 0x0008004fu, 0x000004b6u, 0x0000196fu, 0x0000196eu, 0x0000196eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001970u, 0x0000196fu, 0x0003003eu, 0x00001967u, 0x00001970u, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x00001961u, 0x00050041u, 0x000000e4u, 0x00001972u, 0x000001e7u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001973u, 0x00001972u, 0x0008004fu, 0x000004b6u, 0x00001974u, 0x00001973u, 0x00001973u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001975u, 0x00001974u, 0x0003003eu, 0x00001967u, 0x00001975u, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x00001962u, 0x00050041u, 0x00000068u, 0x00001977u, 0x000001e7u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001978u, 0x00001977u, 0x0008004fu, 0x00000047u, 0x00001979u, 0x00001978u, 0x00001978u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000197au, 0x00001979u, 0x0004007cu, 0x00000044u, 0x0000197bu, 0x0000197au, 0x0003003eu, 0x00001967u, 0x0000197bu, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x00001963u, 0x00050041u, 0x000001c4u, 0x0000197du, 0x000001e7u, 0x00000260u, 0x0004003du, 0x00000012u, 0x0000197eu, 0x0000197du, 0x00040072u, 0x00000008u, 0x0000197fu, 0x0000197eu, 0x00060050u, 0x00000044u, 0x00001980u, 0x0000197fu, 0x0000197fu, 0x0000197fu, 0x0003003eu, 0x00001967u, 0x00001980u, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x00001964u, 0x0003003eu, 0x00001967u, 0x00001983u, 0x000200f9u, 0x00001966u, 0x000200f8u, 0x00001966u, 0x001100f5u, 0x00000044u, 0x0000f0cfu, 0x00001989u, 0x00001965u, 0x0000196bu, 0x0000195fu, 0x00001970u, 0x00001960u, 0x00001975u, 0x00001961u, 0x0000197bu, 0x00001962u, 0x00001980u, 0x00001963u, 0x00001983u, 0x00001964u, 0x0004003du, 0x00000008u, 0x0000198cu, 0x000001e9u, 0x000300f7u, 0x00001993u, 0x00000000u, 0x000d00fbu, 0x0000198cu, 0x00001992u, 0x00000000u, 0x0000198du, 0x00000001u, 0x0000198eu, 0x00000002u, 0x0000198fu, 0x00000004u, 0x00001990u, 0x00000006u, 0x00001991u, 0x000200f8u, 0x00001992u, 0x00060041u, 0x0000007bu, 0x000019a7u, 0x000001e7u, 0x00000220u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000019a8u, 0x000019a7u, 0x00040071u, 0x00000006u, 0x000019a9u, 0x000019a8u, 0x0004007cu, 0x00000008u, 0x000019aau, 0x000019a9u, 0x0003003eu, 0x00001994u, 0x000019aau, 0x000200f9u, 0x00001993u, 0x000200f8u, 0x0000198du, 0x00060041u, 0x000001c4u, 0x00001995u, 0x000001e7u, 0x00000236u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001996u, 0x00001995u, 0x00040072u, 0x00000008u, 0x00001997u, 0x00001996u, 0x0003003eu, 0x00001994u, 0x00001997u, 0x000200f9u, 0x00001993u, 0x000200f8u, 0x0000198eu, 0x00060041u, 0x000001c4u, 0x00001999u, 0x000001e7u, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000199au, 0x00001999u, 0x00040072u, 0x00000008u, 0x0000199bu, 0x0000199au, 0x0003003eu, 0x00001994u, 0x0000199bu, 0x000200f9u, 0x00001993u, 0x000200f8u, 0x0000198fu, 0x00060041u, 0x000001c4u, 0x0000199du, 0x000001e7u, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000199eu, 0x0000199du, 0x00040072u, 0x00000008u, 0x0000199fu, 0x0000199eu, 0x0003003eu, 0x00001994u, 0x0000199fu, 0x000200f9u, 0x00001993u, 0x000200f8u, 0x00001990u, 0x00060041u, 0x0000007bu, 0x000019a1u, 0x000001e7u, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000019a2u, 0x000019a1u, 0x00040071u, 0x00000006u, 0x000019a3u, 0x000019a2u, 0x0004007cu, 0x00000008u, 0x000019a4u, 0x000019a3u, 0x0003003eu, 0x00001994u, 0x000019a4u, 0x000200f9u, 0x00001993u, 0x000200f8u, 0x00001991u, 0x0003003eu, 0x00001994u, 0x00001982u, 0x000200f9u, 0x00001993u, 0x000200f8u, 0x00001993u, 0x000f00f5u, 0x00000008u, 0x0000f0d0u, 0x000019aau, 0x00001992u, 0x00001997u, 0x0000198du, 0x0000199bu, 0x0000198eu, 0x0000199fu, 0x0000198fu, 0x000019a4u, 0x00001990u, 0x00001982u, 0x00001991u, 0x00050051u, 0x00000008u, 0x000019afu, 0x0000f0cfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000019b0u, 0x0000f0cfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000019b1u, 0x0000f0cfu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000019b2u, 0x000019afu, 0x000019b0u, 0x000019b1u, 0x0000f0d0u, 0x000200feu, 0x000019b2u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001efu, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001ecu, 0x00030037u, 0x00000046u, 0x000001edu, 0x00030037u, 0x00000046u, 0x000001eeu, 0x000200f8u, 0x000001f0u, 0x0004003bu, 0x00000045u, 0x000019bdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000019eeu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000019b5u, 0x000001edu, 0x000300f7u, 0x000019bcu, 0x00000000u, 0x000d00fbu, 0x000019b5u, 0x000019bbu, 0x00000000u, 0x000019b6u, 0x00000001u, 0x000019b7u, 0x00000002u, 0x000019b8u, 0x00000004u, 0x000019b9u, 0x00000007u, 0x000019bau, 0x000200f8u, 0x000019bbu, 0x00050041u, 0x00000068u, 0x000019dfu, 0x000001ecu, 0x0000022au, 0x0004003du, 0x00000010u, 0x000019e0u, 0x000019dfu, 0x0008004fu, 0x00000047u, 0x000019e1u, 0x000019e0u, 0x000019e0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000019e2u, 0x000019e1u, 0x0004007cu, 0x00000044u, 0x000019e3u, 0x000019e2u, 0x0003003eu, 0x000019bdu, 0x000019e3u, 0x000200f9u, 0x000019bcu, 0x000200f8u, 0x000019b6u, 0x00050041u, 0x000000e4u, 0x000019beu, 0x000001ecu, 0x00000236u, 0x0004003du, 0x00000013u, 0x000019bfu, 0x000019beu, 0x0008004fu, 0x000004b6u, 0x000019c0u, 0x000019bfu, 0x000019bfu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000019c1u, 0x000019c0u, 0x0003003eu, 0x000019bdu, 0x000019c1u, 0x000200f9u, 0x000019bcu, 0x000200f8u, 0x000019b7u, 0x00050041u, 0x000000e4u, 0x000019c3u, 0x000001ecu, 0x00000239u, 0x0004003du, 0x00000013u, 0x000019c4u, 0x000019c3u, 0x0008004fu, 0x000004b6u, 0x000019c5u, 0x000019c4u, 0x000019c4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000019c6u, 0x000019c5u, 0x0003003eu, 0x000019bdu, 0x000019c6u, 0x000200f9u, 0x000019bcu, 0x000200f8u, 0x000019b8u, 0x00050041u, 0x000000e4u, 0x000019c8u, 0x000001ecu, 0x0000023cu, 0x0004003du, 0x00000013u, 0x000019c9u, 0x000019c8u, 0x0008004fu, 0x000004b6u, 0x000019cau, 0x000019c9u, 0x000019c9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000019cbu, 0x000019cau, 0x0003003eu, 0x000019bdu, 0x000019cbu, 0x000200f9u, 0x000019bcu, 0x000200f8u, 0x000019b9u, 0x00050041u, 0x00000068u, 0x000019cdu, 0x000001ecu, 0x00000233u, 0x0004003du, 0x00000010u, 0x000019ceu, 0x000019cdu, 0x0008004fu, 0x00000047u, 0x000019cfu, 0x000019ceu, 0x000019ceu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000019d0u, 0x000019cfu, 0x0004007cu, 0x00000044u, 0x000019d1u, 0x000019d0u, 0x0003003eu, 0x000019bdu, 0x000019d1u, 0x000200f9u, 0x000019bcu, 0x000200f8u, 0x000019bau, 0x00060041u, 0x0000007bu, 0x000019d3u, 0x000001ecu, 0x0000022au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000019d4u, 0x000019d3u, 0x00040071u, 0x00000006u, 0x000019d5u, 0x000019d4u, 0x0004007cu, 0x00000008u, 0x000019d6u, 0x000019d5u, 0x000500c4u, 0x00000008u, 0x000019d7u, 0x000019d6u, 0x0000025du, 0x00060041u, 0x0000007bu, 0x000019d8u, 0x000001ecu, 0x0000022au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000019d9u, 0x000019d8u, 0x00040071u, 0x00000006u, 0x000019dau, 0x000019d9u, 0x0004007cu, 0x00000008u, 0x000019dbu, 0x000019dau, 0x000500c5u, 0x00000008u, 0x000019dcu, 0x000019d7u, 0x000019dbu, 0x00060050u, 0x00000044u, 0x000019ddu, 0x000019dcu, 0x000019dcu, 0x000019dcu, 0x0003003eu, 0x000019bdu, 0x000019ddu, 0x000200f9u, 0x000019bcu, 0x000200f8u, 0x000019bcu, 0x000f00f5u, 0x00000044u, 0x0000f0d2u, 0x000019e3u, 0x000019bbu, 0x000019c1u, 0x000019b6u, 0x000019c6u, 0x000019b7u, 0x000019cbu, 0x000019b8u, 0x000019d1u, 0x000019b9u, 0x000019ddu, 0x000019bau, 0x0004003du, 0x00000008u, 0x000019e6u, 0x000001eeu, 0x000300f7u, 0x000019edu, 0x00000000u, 0x000d00fbu, 0x000019e6u, 0x000019ecu, 0x00000000u, 0x000019e7u, 0x00000001u, 0x000019e8u, 0x00000002u, 0x000019e9u, 0x00000004u, 0x000019eau, 0x00000006u, 0x000019ebu, 0x000200f8u, 0x000019ecu, 0x00060041u, 0x0000007bu, 0x00001a01u, 0x000001ecu, 0x0000022au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a02u, 0x00001a01u, 0x00040071u, 0x00000006u, 0x00001a03u, 0x00001a02u, 0x0004007cu, 0x00000008u, 0x00001a04u, 0x00001a03u, 0x0003003eu, 0x000019eeu, 0x00001a04u, 0x000200f9u, 0x000019edu, 0x000200f8u, 0x000019e7u, 0x00060041u, 0x000001c4u, 0x000019efu, 0x000001ecu, 0x00000236u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019f0u, 0x000019efu, 0x00040072u, 0x00000008u, 0x000019f1u, 0x000019f0u, 0x0003003eu, 0x000019eeu, 0x000019f1u, 0x000200f9u, 0x000019edu, 0x000200f8u, 0x000019e8u, 0x00060041u, 0x000001c4u, 0x000019f3u, 0x000001ecu, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019f4u, 0x000019f3u, 0x00040072u, 0x00000008u, 0x000019f5u, 0x000019f4u, 0x0003003eu, 0x000019eeu, 0x000019f5u, 0x000200f9u, 0x000019edu, 0x000200f8u, 0x000019e9u, 0x00060041u, 0x000001c4u, 0x000019f7u, 0x000001ecu, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019f8u, 0x000019f7u, 0x00040072u, 0x00000008u, 0x000019f9u, 0x000019f8u, 0x0003003eu, 0x000019eeu, 0x000019f9u, 0x000200f9u, 0x000019edu, 0x000200f8u, 0x000019eau, 0x00060041u, 0x0000007bu, 0x000019fbu, 0x000001ecu, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000019fcu, 0x000019fbu, 0x00040071u, 0x00000006u, 0x000019fdu, 0x000019fcu, 0x0004007cu, 0x00000008u, 0x000019feu, 0x000019fdu, 0x0003003eu, 0x000019eeu, 0x000019feu, 0x000200f9u, 0x000019edu, 0x000200f8u, 0x000019ebu, 0x0003003eu, 0x000019eeu, 0x00001982u, 0x000200f9u, 0x000019edu, 0x000200f8u, 0x000019edu, 0x000f00f5u, 0x00000008u, 0x0000f0d3u, 0x00001a04u, 0x000019ecu, 0x000019f1u, 0x000019e7u, 0x000019f5u, 0x000019e8u, 0x000019f9u, 0x000019e9u, 0x000019feu, 0x000019eau, 0x00001982u, 0x000019ebu, 0x00050051u, 0x00000008u, 0x00001a09u, 0x0000f0d2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a0au, 0x0000f0d2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a0bu, 0x0000f0d2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a0cu, 0x00001a09u, 0x00001a0au, 0x00001a0bu, 0x0000f0d3u, 0x000200feu, 0x00001a0cu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001f4u, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001f1u, 0x00030037u, 0x00000046u, 0x000001f2u, 0x00030037u, 0x00000046u, 0x000001f3u, 0x000200f8u, 0x000001f5u, 0x0004003bu, 0x00000045u, 0x00001a1cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001a66u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001a0fu, 0x000001f2u, 0x000300f7u, 0x00001a1bu, 0x00000000u, 0x001700fbu, 0x00001a0fu, 0x00001a1au, 0x00000000u, 0x00001a10u, 0x00000007u, 0x00001a11u, 0x00000001u, 0x00001a12u, 0x00000002u, 0x00001a13u, 0x00000004u, 0x00001a14u, 0x00000008u, 0x00001a15u, 0x00000009u, 0x00001a16u, 0x0000000bu, 0x00001a17u, 0x0000000du, 0x00001a18u, 0x0000000fu, 0x00001a19u, 0x000200f8u, 0x00001a1au, 0x00050041u, 0x00000068u, 0x00001a58u, 0x000001f1u, 0x0000022du, 0x0004003du, 0x00000010u, 0x00001a59u, 0x00001a58u, 0x0008004fu, 0x00000047u, 0x00001a5au, 0x00001a59u, 0x00001a59u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001a5bu, 0x00001a5au, 0x0004007cu, 0x00000044u, 0x00001a5cu, 0x00001a5bu, 0x0003003eu, 0x00001a1cu, 0x00001a5cu, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a10u, 0x00050041u, 0x000000e4u, 0x00001a1du, 0x000001f1u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001a1eu, 0x00001a1du, 0x0008004fu, 0x000004b6u, 0x00001a1fu, 0x00001a1eu, 0x00001a1eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a20u, 0x00001a1fu, 0x0003003eu, 0x00001a1cu, 0x00001a20u, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a11u, 0x00050041u, 0x000000e4u, 0x00001a22u, 0x000001f1u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001a23u, 0x00001a22u, 0x0008004fu, 0x000004b6u, 0x00001a24u, 0x00001a23u, 0x00001a23u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00001a25u, 0x00001a24u, 0x0003003eu, 0x00001a1cu, 0x00001a25u, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a12u, 0x00050041u, 0x000000e4u, 0x00001a27u, 0x000001f1u, 0x00000239u, 0x0004003du, 0x00000013u, 0x00001a28u, 0x00001a27u, 0x0008004fu, 0x000004b6u, 0x00001a29u, 0x00001a28u, 0x00001a28u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a2au, 0x00001a29u, 0x0003003eu, 0x00001a1cu, 0x00001a2au, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a13u, 0x00050041u, 0x000000e4u, 0x00001a2cu, 0x000001f1u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001a2du, 0x00001a2cu, 0x0008004fu, 0x000004b6u, 0x00001a2eu, 0x00001a2du, 0x00001a2du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a2fu, 0x00001a2eu, 0x0003003eu, 0x00001a1cu, 0x00001a2fu, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a14u, 0x00050041u, 0x00000068u, 0x00001a31u, 0x000001f1u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001a32u, 0x00001a31u, 0x0008004fu, 0x00000047u, 0x00001a33u, 0x00001a32u, 0x00001a32u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001a34u, 0x00001a33u, 0x0004007cu, 0x00000044u, 0x00001a35u, 0x00001a34u, 0x0003003eu, 0x00001a1cu, 0x00001a35u, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a15u, 0x00050041u, 0x000000e4u, 0x00001a37u, 0x000001f1u, 0x00000239u, 0x0004003du, 0x00000013u, 0x00001a38u, 0x00001a37u, 0x0008004fu, 0x000004b6u, 0x00001a39u, 0x00001a38u, 0x00001a38u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00001a3au, 0x00001a39u, 0x0003003eu, 0x00001a1cu, 0x00001a3au, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a16u, 0x00050041u, 0x000000e4u, 0x00001a3cu, 0x000001f1u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001a3du, 0x00001a3cu, 0x0008004fu, 0x000004b6u, 0x00001a3eu, 0x00001a3du, 0x00001a3du, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00001a3fu, 0x00001a3eu, 0x0003003eu, 0x00001a1cu, 0x00001a3fu, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a17u, 0x00050041u, 0x00000068u, 0x00001a41u, 0x000001f1u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001a42u, 0x00001a41u, 0x0008004fu, 0x00000047u, 0x00001a43u, 0x00001a42u, 0x00001a42u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x00001a44u, 0x00001a43u, 0x0004007cu, 0x00000044u, 0x00001a45u, 0x00001a44u, 0x0003003eu, 0x00001a1cu, 0x00001a45u, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a18u, 0x00050041u, 0x000001c4u, 0x00001a47u, 0x000001f1u, 0x0000025du, 0x0004003du, 0x00000012u, 0x00001a48u, 0x00001a47u, 0x00040072u, 0x00000008u, 0x00001a49u, 0x00001a48u, 0x00060050u, 0x00000044u, 0x00001a4au, 0x00001a49u, 0x00001a49u, 0x00001a49u, 0x0003003eu, 0x00001a1cu, 0x00001a4au, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a19u, 0x00060041u, 0x0000007bu, 0x00001a4cu, 0x000001f1u, 0x0000022du, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001a4du, 0x00001a4cu, 0x00040071u, 0x00000006u, 0x00001a4eu, 0x00001a4du, 0x0004007cu, 0x00000008u, 0x00001a4fu, 0x00001a4eu, 0x000500c4u, 0x00000008u, 0x00001a50u, 0x00001a4fu, 0x0000025du, 0x00060041u, 0x0000007bu, 0x00001a51u, 0x000001f1u, 0x0000022du, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001a52u, 0x00001a51u, 0x00040071u, 0x00000006u, 0x00001a53u, 0x00001a52u, 0x0004007cu, 0x00000008u, 0x00001a54u, 0x00001a53u, 0x000500c5u, 0x00000008u, 0x00001a55u, 0x00001a50u, 0x00001a54u, 0x00060050u, 0x00000044u, 0x00001a56u, 0x00001a55u, 0x00001a55u, 0x00001a55u, 0x0003003eu, 0x00001a1cu, 0x00001a56u, 0x000200f9u, 0x00001a1bu, 0x000200f8u, 0x00001a1bu, 0x001900f5u, 0x00000044u, 0x0000f0d5u, 0x00001a5cu, 0x00001a1au, 0x00001a20u, 0x00001a10u, 0x00001a25u, 0x00001a11u, 0x00001a2au, 0x00001a12u, 0x00001a2fu, 0x00001a13u, 0x00001a35u, 0x00001a14u, 0x00001a3au, 0x00001a15u, 0x00001a3fu, 0x00001a16u, 0x00001a45u, 0x00001a17u, 0x00001a4au, 0x00001a18u, 0x00001a56u, 0x00001a19u, 0x0004003du, 0x00000008u, 0x00001a5fu, 0x000001f3u, 0x000300f7u, 0x00001a65u, 0x00000000u, 0x000b00fbu, 0x00001a5fu, 0x00001a64u, 0x00000000u, 0x00001a60u, 0x00000001u, 0x00001a61u, 0x00000002u, 0x00001a62u, 0x00000004u, 0x00001a63u, 0x000200f8u, 0x00001a64u, 0x00060041u, 0x0000007bu, 0x00001a78u, 0x000001f1u, 0x0000022du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a79u, 0x00001a78u, 0x00040071u, 0x00000006u, 0x00001a7au, 0x00001a79u, 0x0004007cu, 0x00000008u, 0x00001a7bu, 0x00001a7au, 0x0003003eu, 0x00001a66u, 0x00001a7bu, 0x000200f9u, 0x00001a65u, 0x000200f8u, 0x00001a60u, 0x00050041u, 0x000001c4u, 0x00001a67u, 0x000001f1u, 0x0000025du, 0x0004003du, 0x00000012u, 0x00001a68u, 0x00001a67u, 0x00040072u, 0x00000008u, 0x00001a69u, 0x00001a68u, 0x0003003eu, 0x00001a66u, 0x00001a69u, 0x000200f9u, 0x00001a65u, 0x000200f8u, 0x00001a61u, 0x00060041u, 0x000001c4u, 0x00001a6bu, 0x000001f1u, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001a6cu, 0x00001a6bu, 0x00040072u, 0x00000008u, 0x00001a6du, 0x00001a6cu, 0x0003003eu, 0x00001a66u, 0x00001a6du, 0x000200f9u, 0x00001a65u, 0x000200f8u, 0x00001a62u, 0x00060041u, 0x000001c4u, 0x00001a6fu, 0x000001f1u, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001a70u, 0x00001a6fu, 0x00040072u, 0x00000008u, 0x00001a71u, 0x00001a70u, 0x0003003eu, 0x00001a66u, 0x00001a71u, 0x000200f9u, 0x00001a65u, 0x000200f8u, 0x00001a63u, 0x00060041u, 0x0000007bu, 0x00001a73u, 0x000001f1u, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a74u, 0x00001a73u, 0x00040071u, 0x00000006u, 0x00001a75u, 0x00001a74u, 0x0004007cu, 0x00000008u, 0x00001a76u, 0x00001a75u, 0x0003003eu, 0x00001a66u, 0x00001a76u, 0x000200f9u, 0x00001a65u, 0x000200f8u, 0x00001a65u, 0x000d00f5u, 0x00000008u, 0x0000f0d6u, 0x00001a7bu, 0x00001a64u, 0x00001a69u, 0x00001a60u, 0x00001a6du, 0x00001a61u, 0x00001a71u, 0x00001a62u, 0x00001a76u, 0x00001a63u, 0x00050051u, 0x00000008u, 0x00001a80u, 0x0000f0d5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a81u, 0x0000f0d5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a82u, 0x0000f0d5u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a83u, 0x00001a80u, 0x00001a81u, 0x00001a82u, 0x0000f0d6u, 0x000200feu, 0x00001a83u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001f9u, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001f6u, 0x00030037u, 0x00000046u, 0x000001f7u, 0x00030037u, 0x00000046u, 0x000001f8u, 0x000200f8u, 0x000001fau, 0x0004003bu, 0x00000045u, 0x00001a8eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ab4u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001a86u, 0x000001f7u, 0x000300f7u, 0x00001a8du, 0x00000000u, 0x000d00fbu, 0x00001a86u, 0x00001a8cu, 0x00000000u, 0x00001a87u, 0x00000001u, 0x00001a88u, 0x00000002u, 0x00001a89u, 0x00000004u, 0x00001a8au, 0x00000006u, 0x00001a8bu, 0x000200f8u, 0x00001a8cu, 0x00050041u, 0x00000068u, 0x00001aa5u, 0x000001f6u, 0x00000230u, 0x0004003du, 0x00000010u, 0x00001aa6u, 0x00001aa5u, 0x0008004fu, 0x00000047u, 0x00001aa7u, 0x00001aa6u, 0x00001aa6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001aa8u, 0x00001aa7u, 0x0004007cu, 0x00000044u, 0x00001aa9u, 0x00001aa8u, 0x0003003eu, 0x00001a8eu, 0x00001aa9u, 0x000200f9u, 0x00001a8du, 0x000200f8u, 0x00001a87u, 0x00050041u, 0x000000e4u, 0x00001a8fu, 0x000001f6u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001a90u, 0x00001a8fu, 0x0008004fu, 0x000004b6u, 0x00001a91u, 0x00001a90u, 0x00001a90u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a92u, 0x00001a91u, 0x0003003eu, 0x00001a8eu, 0x00001a92u, 0x000200f9u, 0x00001a8du, 0x000200f8u, 0x00001a88u, 0x00050041u, 0x000000e4u, 0x00001a94u, 0x000001f6u, 0x00000239u, 0x0004003du, 0x00000013u, 0x00001a95u, 0x00001a94u, 0x0008004fu, 0x000004b6u, 0x00001a96u, 0x00001a95u, 0x00001a95u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a97u, 0x00001a96u, 0x0003003eu, 0x00001a8eu, 0x00001a97u, 0x000200f9u, 0x00001a8du, 0x000200f8u, 0x00001a89u, 0x00050041u, 0x000000e4u, 0x00001a99u, 0x000001f6u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001a9au, 0x00001a99u, 0x0008004fu, 0x000004b6u, 0x00001a9bu, 0x00001a9au, 0x00001a9au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a9cu, 0x00001a9bu, 0x0003003eu, 0x00001a8eu, 0x00001a9cu, 0x000200f9u, 0x00001a8du, 0x000200f8u, 0x00001a8au, 0x00050041u, 0x00000068u, 0x00001a9eu, 0x000001f6u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001a9fu, 0x00001a9eu, 0x0008004fu, 0x00000047u, 0x00001aa0u, 0x00001a9fu, 0x00001a9fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001aa1u, 0x00001aa0u, 0x0004007cu, 0x00000044u, 0x00001aa2u, 0x00001aa1u, 0x0003003eu, 0x00001a8eu, 0x00001aa2u, 0x000200f9u, 0x00001a8du, 0x000200f8u, 0x00001a8bu, 0x0003003eu, 0x00001a8eu, 0x00001983u, 0x000200f9u, 0x00001a8du, 0x000200f8u, 0x00001a8du, 0x000f00f5u, 0x00000044u, 0x0000f0d8u, 0x00001aa9u, 0x00001a8cu, 0x00001a92u, 0x00001a87u, 0x00001a97u, 0x00001a88u, 0x00001a9cu, 0x00001a89u, 0x00001aa2u, 0x00001a8au, 0x00001983u, 0x00001a8bu, 0x0004003du, 0x00000008u, 0x00001aacu, 0x000001f8u, 0x000300f7u, 0x00001ab3u, 0x00000000u, 0x000d00fbu, 0x00001aacu, 0x00001ab2u, 0x00000000u, 0x00001aadu, 0x00000001u, 0x00001aaeu, 0x00000002u, 0x00001aafu, 0x00000004u, 0x00001ab0u, 0x00000006u, 0x00001ab1u, 0x000200f8u, 0x00001ab2u, 0x00060041u, 0x0000007bu, 0x00001ac7u, 0x000001f6u, 0x00000230u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001ac8u, 0x00001ac7u, 0x00040071u, 0x00000006u, 0x00001ac9u, 0x00001ac8u, 0x0004007cu, 0x00000008u, 0x00001acau, 0x00001ac9u, 0x0003003eu, 0x00001ab4u, 0x00001acau, 0x000200f9u, 0x00001ab3u, 0x000200f8u, 0x00001aadu, 0x00060041u, 0x000001c4u, 0x00001ab5u, 0x000001f6u, 0x00000236u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001ab6u, 0x00001ab5u, 0x00040072u, 0x00000008u, 0x00001ab7u, 0x00001ab6u, 0x0003003eu, 0x00001ab4u, 0x00001ab7u, 0x000200f9u, 0x00001ab3u, 0x000200f8u, 0x00001aaeu, 0x00060041u, 0x000001c4u, 0x00001ab9u, 0x000001f6u, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001abau, 0x00001ab9u, 0x00040072u, 0x00000008u, 0x00001abbu, 0x00001abau, 0x0003003eu, 0x00001ab4u, 0x00001abbu, 0x000200f9u, 0x00001ab3u, 0x000200f8u, 0x00001aafu, 0x00060041u, 0x000001c4u, 0x00001abdu, 0x000001f6u, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001abeu, 0x00001abdu, 0x00040072u, 0x00000008u, 0x00001abfu, 0x00001abeu, 0x0003003eu, 0x00001ab4u, 0x00001abfu, 0x000200f9u, 0x00001ab3u, 0x000200f8u, 0x00001ab0u, 0x00060041u, 0x0000007bu, 0x00001ac1u, 0x000001f6u, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001ac2u, 0x00001ac1u, 0x00040071u, 0x00000006u, 0x00001ac3u, 0x00001ac2u, 0x0004007cu, 0x00000008u, 0x00001ac4u, 0x00001ac3u, 0x0003003eu, 0x00001ab4u, 0x00001ac4u, 0x000200f9u, 0x00001ab3u, 0x000200f8u, 0x00001ab1u, 0x0003003eu, 0x00001ab4u, 0x00001982u, 0x000200f9u, 0x00001ab3u, 0x000200f8u, 0x00001ab3u, 0x000f00f5u, 0x00000008u, 0x0000f0d9u, 0x00001acau, 0x00001ab2u, 0x00001ab7u, 0x00001aadu, 0x00001abbu, 0x00001aaeu, 0x00001abfu, 0x00001aafu, 0x00001ac4u, 0x00001ab0u, 0x00001982u, 0x00001ab1u, 0x00050051u, 0x00000008u, 0x00001acfu, 0x0000f0d8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001ad0u, 0x0000f0d8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001ad1u, 0x0000f0d8u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001ad2u, 0x00001acfu, 0x00001ad0u, 0x00001ad1u, 0x0000f0d9u, 0x000200feu, 0x00001ad2u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000205u, 0x00000000u, 0x000001fbu, 0x00030037u, 0x000001e5u, 0x000001fcu, 0x00030037u, 0x00000068u, 0x000001fdu, 0x00030037u, 0x00000068u, 0x000001feu, 0x00030037u, 0x00000046u, 0x000001ffu, 0x00030037u, 0x00000046u, 0x00000200u, 0x00030037u, 0x0000006au, 0x00000201u, 0x00030037u, 0x0000006au, 0x00000202u, 0x00030037u, 0x0000006au, 0x00000203u, 0x00030037u, 0x0000007bu, 0x00000204u, 0x000200f8u, 0x00000206u, 0x0004003bu, 0x000000dfu, 0x00001ad5u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001adeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ae0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ae1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001ae3u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001aecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001aeeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001aefu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001af1u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001afau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001afcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001afdu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001affu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b08u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b0au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b0bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001b0du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b0eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b10u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b12u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b14u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b1au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b1eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b20u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b2cu, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00001ad6u, 0x000001fdu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001ad7u, 0x00001ad6u, 0x00040071u, 0x00000006u, 0x00001ad8u, 0x00001ad7u, 0x0004007cu, 0x00000008u, 0x00001ad9u, 0x00001ad8u, 0x00050041u, 0x0000007bu, 0x00001adau, 0x000001feu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001adbu, 0x00001adau, 0x00040071u, 0x00000006u, 0x00001adcu, 0x00001adbu, 0x0004007cu, 0x00000008u, 0x00001addu, 0x00001adcu, 0x0004003du, 0x000001e4u, 0x00001adfu, 0x000001fcu, 0x0003003eu, 0x00001adeu, 0x00001adfu, 0x0003003eu, 0x00001ae0u, 0x00001ad9u, 0x0003003eu, 0x00001ae1u, 0x00001addu, 0x00070039u, 0x00000009u, 0x00001ae2u, 0x000001eau, 0x00001adeu, 0x00001ae0u, 0x00001ae1u, 0x0003003eu, 0x00001ad5u, 0x00001ae2u, 0x00050041u, 0x0000007bu, 0x00001ae4u, 0x000001fdu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001ae5u, 0x00001ae4u, 0x00040071u, 0x00000006u, 0x00001ae6u, 0x00001ae5u, 0x0004007cu, 0x00000008u, 0x00001ae7u, 0x00001ae6u, 0x00050041u, 0x0000007bu, 0x00001ae8u, 0x000001feu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001ae9u, 0x00001ae8u, 0x00040071u, 0x00000006u, 0x00001aeau, 0x00001ae9u, 0x0004007cu, 0x00000008u, 0x00001aebu, 0x00001aeau, 0x0004003du, 0x000001e4u, 0x00001aedu, 0x000001fcu, 0x0003003eu, 0x00001aecu, 0x00001aedu, 0x0003003eu, 0x00001aeeu, 0x00001ae7u, 0x0003003eu, 0x00001aefu, 0x00001aebu, 0x00070039u, 0x00000009u, 0x00001af0u, 0x000001efu, 0x00001aecu, 0x00001aeeu, 0x00001aefu, 0x0003003eu, 0x00001ae3u, 0x00001af0u, 0x00050041u, 0x0000007bu, 0x00001af2u, 0x000001fdu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001af3u, 0x00001af2u, 0x00040071u, 0x00000006u, 0x00001af4u, 0x00001af3u, 0x0004007cu, 0x00000008u, 0x00001af5u, 0x00001af4u, 0x00050041u, 0x0000007bu, 0x00001af6u, 0x000001feu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001af7u, 0x00001af6u, 0x00040071u, 0x00000006u, 0x00001af8u, 0x00001af7u, 0x0004007cu, 0x00000008u, 0x00001af9u, 0x00001af8u, 0x0004003du, 0x000001e4u, 0x00001afbu, 0x000001fcu, 0x0003003eu, 0x00001afau, 0x00001afbu, 0x0003003eu, 0x00001afcu, 0x00001af5u, 0x0003003eu, 0x00001afdu, 0x00001af9u, 0x00070039u, 0x00000009u, 0x00001afeu, 0x000001f4u, 0x00001afau, 0x00001afcu, 0x00001afdu, 0x0003003eu, 0x00001af1u, 0x00001afeu, 0x00050041u, 0x0000007bu, 0x00001b00u, 0x000001fdu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b01u, 0x00001b00u, 0x00040071u, 0x00000006u, 0x00001b02u, 0x00001b01u, 0x0004007cu, 0x00000008u, 0x00001b03u, 0x00001b02u, 0x00050041u, 0x0000007bu, 0x00001b04u, 0x000001feu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b05u, 0x00001b04u, 0x00040071u, 0x00000006u, 0x00001b06u, 0x00001b05u, 0x0004007cu, 0x00000008u, 0x00001b07u, 0x00001b06u, 0x0004003du, 0x000001e4u, 0x00001b09u, 0x000001fcu, 0x0003003eu, 0x00001b08u, 0x00001b09u, 0x0003003eu, 0x00001b0au, 0x00001b03u, 0x0003003eu, 0x00001b0bu, 0x00001b07u, 0x00070039u, 0x00000009u, 0x00001b0cu, 0x000001f9u, 0x00001b08u, 0x00001b0au, 0x00001b0bu, 0x0003003eu, 0x00001affu, 0x00001b0cu, 0x0003003eu, 0x00001b0eu, 0x00001ae2u, 0x0003003eu, 0x00001b10u, 0x00001af0u, 0x0003003eu, 0x00001b12u, 0x00001afeu, 0x0003003eu, 0x00001b14u, 0x00001b0cu, 0x00080039u, 0x00000013u, 0x00001b16u, 0x000001e2u, 0x00001b0eu, 0x00001b10u, 0x00001b12u, 0x00001b14u, 0x0003003eu, 0x00001b0du, 0x00001b16u, 0x0004003du, 0x00000069u, 0x00001b17u, 0x00000203u, 0x000300f7u, 0x00001b19u, 0x00000000u, 0x000400fau, 0x00001b17u, 0x00001b18u, 0x00001b3eu, 0x000200f8u, 0x00001b18u, 0x00050041u, 0x000001c4u, 0x00001b1bu, 0x00001b0du, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001b1cu, 0x00001b1bu, 0x00040072u, 0x00000008u, 0x00001b1du, 0x00001b1cu, 0x0003003eu, 0x00001b1eu, 0x00001b1du, 0x00050039u, 0x00000008u, 0x00001b1fu, 0x000000eau, 0x00001b1eu, 0x0003003eu, 0x00001b1au, 0x00001b1fu, 0x00050080u, 0x00000008u, 0x00001b23u, 0x00001b1fu, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00001b24u, 0x00001b23u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00001b25u, 0x00001b1fu, 0x00001b24u, 0x0003003eu, 0x00001b20u, 0x00001b25u, 0x0004003du, 0x00000069u, 0x00001b26u, 0x00000202u, 0x000300f7u, 0x00001b28u, 0x00000000u, 0x000400fau, 0x00001b26u, 0x00001b27u, 0x00001b36u, 0x000200f8u, 0x00001b27u, 0x0004003du, 0x00000069u, 0x00001b29u, 0x00000201u, 0x000300f7u, 0x00001b2bu, 0x00000000u, 0x000400fau, 0x00001b29u, 0x00001b2au, 0x00001b32u, 0x000200f8u, 0x00001b2au, 0x0004003du, 0x00000008u, 0x00001b2eu, 0x00000200u, 0x00050084u, 0x00000008u, 0x00001b2fu, 0x00001b25u, 0x00001b2eu, 0x00050080u, 0x00000008u, 0x00001b30u, 0x00001b2fu, 0x00000233u, 0x000500c3u, 0x00000008u, 0x00001b31u, 0x00001b30u, 0x00000230u, 0x0003003eu, 0x00001b2cu, 0x00001b31u, 0x000200f9u, 0x00001b2bu, 0x000200f8u, 0x00001b32u, 0x0004003du, 0x00000008u, 0x00001b33u, 0x00000200u, 0x000500c4u, 0x00000008u, 0x00001b34u, 0x00001b33u, 0x00000236u, 0x0003003eu, 0x00001b2cu, 0x00001b34u, 0x000200f9u, 0x00001b2bu, 0x000200f8u, 0x00001b2bu, 0x000700f5u, 0x00000008u, 0x0000f0dau, 0x00001b31u, 0x00001b2au, 0x00001b34u, 0x00001b32u, 0x0003003eu, 0x00001b20u, 0x0000f0dau, 0x000200f9u, 0x00001b28u, 0x000200f8u, 0x00001b36u, 0x0004003du, 0x00000008u, 0x00001b37u, 0x000001ffu, 0x00050080u, 0x00000008u, 0x00001b39u, 0x00001b25u, 0x00001b37u, 0x0003003eu, 0x00001b20u, 0x00001b39u, 0x000200f9u, 0x00001b28u, 0x000200f8u, 0x00001b28u, 0x000700f5u, 0x00000008u, 0x0000f0dbu, 0x0000f0dau, 0x00001b2bu, 0x00001b39u, 0x00001b36u, 0x0008000cu, 0x00000008u, 0x00001b3bu, 0x00000001u, 0x0000002du, 0x0000f0dbu, 0x00000220u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x00001b3cu, 0x00001b3bu, 0x0004007cu, 0x0000000fu, 0x00001b3du, 0x00001b3cu, 0x0003003eu, 0x00000204u, 0x00001b3du, 0x000200f9u, 0x00001b19u, 0x000200f8u, 0x00001b3eu, 0x0003003eu, 0x00000204u, 0x00000388u, 0x000200f9u, 0x00001b19u, 0x000200f8u, 0x00001b19u, 0x0004003du, 0x00000013u, 0x00001b3fu, 0x00001b0du, 0x000200feu, 0x00001b3fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000020fu, 0x00000000u, 0x00000207u, 0x00030037u, 0x000001e5u, 0x00000208u, 0x00030037u, 0x00000068u, 0x00000209u, 0x00030037u, 0x00000068u, 0x0000020au, 0x00030037u, 0x00000046u, 0x0000020bu, 0x00030037u, 0x00000046u, 0x0000020cu, 0x00030037u, 0x0000006au, 0x0000020du, 0x00030037u, 0x0000006au, 0x0000020eu, 0x000200f8u, 0x00000210u, 0x0004003bu, 0x000000dfu, 0x00001b42u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b4bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b4du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b4eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b50u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b59u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b5bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b5cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b5eu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b67u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b69u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b6au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b6cu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b75u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b77u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b78u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001b7au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b7bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b7du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b7fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b81u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b86u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b88u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b95u, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00001b43u, 0x00000209u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001b44u, 0x00001b43u, 0x00040071u, 0x00000006u, 0x00001b45u, 0x00001b44u, 0x0004007cu, 0x00000008u, 0x00001b46u, 0x00001b45u, 0x00050041u, 0x0000007bu, 0x00001b47u, 0x0000020au, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001b48u, 0x00001b47u, 0x00040071u, 0x00000006u, 0x00001b49u, 0x00001b48u, 0x0004007cu, 0x00000008u, 0x00001b4au, 0x00001b49u, 0x0004003du, 0x000001e4u, 0x00001b4cu, 0x00000208u, 0x0003003eu, 0x00001b4bu, 0x00001b4cu, 0x0003003eu, 0x00001b4du, 0x00001b46u, 0x0003003eu, 0x00001b4eu, 0x00001b4au, 0x00070039u, 0x00000009u, 0x00001b4fu, 0x000001eau, 0x00001b4bu, 0x00001b4du, 0x00001b4eu, 0x0003003eu, 0x00001b42u, 0x00001b4fu, 0x00050041u, 0x0000007bu, 0x00001b51u, 0x00000209u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001b52u, 0x00001b51u, 0x00040071u, 0x00000006u, 0x00001b53u, 0x00001b52u, 0x0004007cu, 0x00000008u, 0x00001b54u, 0x00001b53u, 0x00050041u, 0x0000007bu, 0x00001b55u, 0x0000020au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001b56u, 0x00001b55u, 0x00040071u, 0x00000006u, 0x00001b57u, 0x00001b56u, 0x0004007cu, 0x00000008u, 0x00001b58u, 0x00001b57u, 0x0004003du, 0x000001e4u, 0x00001b5au, 0x00000208u, 0x0003003eu, 0x00001b59u, 0x00001b5au, 0x0003003eu, 0x00001b5bu, 0x00001b54u, 0x0003003eu, 0x00001b5cu, 0x00001b58u, 0x00070039u, 0x00000009u, 0x00001b5du, 0x000001efu, 0x00001b59u, 0x00001b5bu, 0x00001b5cu, 0x0003003eu, 0x00001b50u, 0x00001b5du, 0x00050041u, 0x0000007bu, 0x00001b5fu, 0x00000209u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001b60u, 0x00001b5fu, 0x00040071u, 0x00000006u, 0x00001b61u, 0x00001b60u, 0x0004007cu, 0x00000008u, 0x00001b62u, 0x00001b61u, 0x00050041u, 0x0000007bu, 0x00001b63u, 0x0000020au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001b64u, 0x00001b63u, 0x00040071u, 0x00000006u, 0x00001b65u, 0x00001b64u, 0x0004007cu, 0x00000008u, 0x00001b66u, 0x00001b65u, 0x0004003du, 0x000001e4u, 0x00001b68u, 0x00000208u, 0x0003003eu, 0x00001b67u, 0x00001b68u, 0x0003003eu, 0x00001b69u, 0x00001b62u, 0x0003003eu, 0x00001b6au, 0x00001b66u, 0x00070039u, 0x00000009u, 0x00001b6bu, 0x000001f4u, 0x00001b67u, 0x00001b69u, 0x00001b6au, 0x0003003eu, 0x00001b5eu, 0x00001b6bu, 0x00050041u, 0x0000007bu, 0x00001b6du, 0x00000209u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b6eu, 0x00001b6du, 0x00040071u, 0x00000006u, 0x00001b6fu, 0x00001b6eu, 0x0004007cu, 0x00000008u, 0x00001b70u, 0x00001b6fu, 0x00050041u, 0x0000007bu, 0x00001b71u, 0x0000020au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b72u, 0x00001b71u, 0x00040071u, 0x00000006u, 0x00001b73u, 0x00001b72u, 0x0004007cu, 0x00000008u, 0x00001b74u, 0x00001b73u, 0x0004003du, 0x000001e4u, 0x00001b76u, 0x00000208u, 0x0003003eu, 0x00001b75u, 0x00001b76u, 0x0003003eu, 0x00001b77u, 0x00001b70u, 0x0003003eu, 0x00001b78u, 0x00001b74u, 0x00070039u, 0x00000009u, 0x00001b79u, 0x000001f9u, 0x00001b75u, 0x00001b77u, 0x00001b78u, 0x0003003eu, 0x00001b6cu, 0x00001b79u, 0x0003003eu, 0x00001b7bu, 0x00001b4fu, 0x0003003eu, 0x00001b7du, 0x00001b5du, 0x0003003eu, 0x00001b7fu, 0x00001b6bu, 0x0003003eu, 0x00001b81u, 0x00001b79u, 0x00080039u, 0x00000013u, 0x00001b83u, 0x000001e2u, 0x00001b7bu, 0x00001b7du, 0x00001b7fu, 0x00001b81u, 0x0003003eu, 0x00001b7au, 0x00001b83u, 0x0004003du, 0x00000013u, 0x00001b84u, 0x00001b7au, 0x00040072u, 0x00000009u, 0x00001b85u, 0x00001b84u, 0x0003003eu, 0x00001b86u, 0x00001b85u, 0x00050039u, 0x00000013u, 0x00001b87u, 0x000000e2u, 0x00001b86u, 0x0003003eu, 0x00001b7au, 0x00001b87u, 0x00050041u, 0x000001c4u, 0x00001b89u, 0x00001b7au, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001b8au, 0x00001b89u, 0x00040072u, 0x00000008u, 0x00001b8bu, 0x00001b8au, 0x0004003du, 0x00000012u, 0x00001b8du, 0x00001b89u, 0x00040072u, 0x00000008u, 0x00001b8eu, 0x00001b8du, 0x00050080u, 0x00000008u, 0x00001b8fu, 0x00001b8eu, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00001b90u, 0x00001b8fu, 0x0000025du, 0x00050080u, 0x00000008u, 0x00001b91u, 0x00001b8bu, 0x00001b90u, 0x0003003eu, 0x00001b88u, 0x00001b91u, 0x0004003du, 0x00000069u, 0x00001b92u, 0x0000020du, 0x000300f7u, 0x00001b94u, 0x00000000u, 0x000400fau, 0x00001b92u, 0x00001b93u, 0x00001b9du, 0x000200f8u, 0x00001b93u, 0x0004003du, 0x00000008u, 0x00001b97u, 0x0000020cu, 0x00050084u, 0x00000008u, 0x00001b98u, 0x00001b91u, 0x00001b97u, 0x00050080u, 0x00000008u, 0x00001b99u, 0x00001b98u, 0x00000233u, 0x000500c3u, 0x00000008u, 0x00001b9au, 0x00001b99u, 0x00000230u, 0x0003003eu, 0x00001b95u, 0x00001b9au, 0x000500c3u, 0x00000008u, 0x00001b9cu, 0x00001b9au, 0x00000236u, 0x0003003eu, 0x0000020cu, 0x00001b9cu, 0x000200f9u, 0x00001b94u, 0x000200f8u, 0x00001b9du, 0x0004003du, 0x00000008u, 0x00001b9eu, 0x0000020cu, 0x000500c4u, 0x00000008u, 0x00001b9fu, 0x00001b9eu, 0x00000236u, 0x0003003eu, 0x00001b95u, 0x00001b9fu, 0x000200f9u, 0x00001b94u, 0x000200f8u, 0x00001b94u, 0x000700f5u, 0x00000008u, 0x0000f0ddu, 0x00001b9au, 0x00001b93u, 0x00001b9fu, 0x00001b9du, 0x0004003du, 0x00000069u, 0x00001ba0u, 0x0000020eu, 0x000300f7u, 0x00001ba2u, 0x00000000u, 0x000400fau, 0x00001ba0u, 0x00001ba1u, 0x00001ba4u, 0x000200f8u, 0x00001ba1u, 0x0003003eu, 0x00001b88u, 0x0000f0ddu, 0x000200f9u, 0x00001ba2u, 0x000200f8u, 0x00001ba4u, 0x0004003du, 0x00000008u, 0x00001ba5u, 0x0000020bu, 0x00050080u, 0x00000008u, 0x00001ba7u, 0x00001b91u, 0x00001ba5u, 0x0003003eu, 0x00001b88u, 0x00001ba7u, 0x000200f9u, 0x00001ba2u, 0x000200f8u, 0x00001ba2u, 0x000700f5u, 0x00000008u, 0x0000f0deu, 0x0000f0ddu, 0x00001ba1u, 0x00001ba7u, 0x00001ba4u, 0x0008000cu, 0x00000008u, 0x00001ba9u, 0x00000001u, 0x0000002du, 0x0000f0deu, 0x00000220u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x00001baau, 0x00001ba9u, 0x0003003eu, 0x00001b89u, 0x00001baau, 0x0004003du, 0x00000013u, 0x00001bacu, 0x00001b7au, 0x000200feu, 0x00001bacu, 0x00010038u, 0x00050036u, 0x00000069u, 0x00000216u, 0x00000000u, 0x00000211u, 0x00030037u, 0x00000046u, 0x00000212u, 0x00030037u, 0x00000046u, 0x00000213u, 0x00030037u, 0x00000007u, 0x00000214u, 0x00030037u, 0x000000d7u, 0x00000215u, 0x000200f8u, 0x00000217u, 0x0004003bu, 0x000001c4u, 0x00007e9fu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007e9eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e9du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e9cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e9bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e9au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e99u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e98u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e97u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e96u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007e75u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007e74u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e73u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e72u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e71u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e70u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e6fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e6eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e6du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e6cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e4eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e4du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e4cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e4bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e4au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e49u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e48u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e41u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e23u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e22u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e21u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e20u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e1fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e1eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e1du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e16u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e09u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e08u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e07u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e06u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e05u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e04u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e03u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e02u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e01u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e00u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007dffu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007de1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007de0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ddfu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ddeu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007dddu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ddcu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ddbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ddau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dd4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007dccu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007dcbu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007dcau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007dc9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007dc8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dc3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dc2u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dc1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dc0u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007dacu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007dabu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007daau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007da9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007da8u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007da7u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007da6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007da5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007da4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007da0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d9fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d9eu, 0x00000007u, 0x0005003bu, 0x0000006au, 0x00001ff1u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000006au, 0x00001feeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bf3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bf9u, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x00001bfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c0cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001c0fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c12u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c15u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c18u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c1bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c1eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c22u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c26u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c2bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c2fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c33u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c37u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c3cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c40u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c44u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c48u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c4cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c50u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c54u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c59u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c5eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c63u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c68u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c6du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c72u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c77u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c7cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c81u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c9cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c9eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ca5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001cb6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cb7u, 0x00000007u, 0x0004003bu, 0x00000105u, 0x00001cb8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001cbau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cbdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001cbfu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001cc1u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001cc3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ccbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cd2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cd5u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001cd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cd8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001cdau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cdcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001cdeu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ce0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d08u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00001d09u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00001d0cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d0fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d28u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d2bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d30u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001d33u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d34u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d37u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d3au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d3du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d3fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d42u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d43u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d51u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d52u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d53u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d54u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d55u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d58u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d5bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d5eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d60u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d62u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d64u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d66u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d68u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d69u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d6au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d6bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d7bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d7eu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00001d86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d89u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00001d8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d8cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d8eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d90u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d92u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d94u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d96u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d98u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d9au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001da5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001dacu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dafu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001db2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001db4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001db6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001db8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dbau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dbcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dbeu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dc0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dc1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dcau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dd3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001de2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001de7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001deau, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00001dfbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e0fu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00001e10u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e12u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00001e17u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001e1fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001e22u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e25u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e26u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e33u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e34u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e42u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001e45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e47u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001e49u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e4bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e4du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e4fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e51u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e53u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e55u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e62u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e64u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e70u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e71u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e72u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e74u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e75u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e76u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e77u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e78u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001e8eu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001e8fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001e91u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001e93u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e95u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e97u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e99u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e9bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e9du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001e9fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001eafu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001eb7u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001eb8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ebau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ebcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ebeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ec0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ec2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ec4u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001edau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001edcu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001edeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ee0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ee2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ee4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ee6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001efbu, 0x00000007u, 0x000300f7u, 0x00001fedu, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00001ff0u, 0x000200f8u, 0x00001ff0u, 0x0004003du, 0x00000006u, 0x00001bb1u, 0x00000214u, 0x0003003eu, 0x00001bb0u, 0x00001bb1u, 0x00050039u, 0x0000002eu, 0x00001bb2u, 0x00000031u, 0x00001bb0u, 0x00050051u, 0x00000008u, 0x00007da1u, 0x00001bb2u, 0x00000000u, 0x0003003eu, 0x00007d9eu, 0x00007da1u, 0x00050051u, 0x00000008u, 0x00007da2u, 0x00001bb2u, 0x00000001u, 0x0003003eu, 0x00007d9fu, 0x00007da2u, 0x00050051u, 0x00000008u, 0x00007da3u, 0x00001bb2u, 0x00000002u, 0x0003003eu, 0x00007da0u, 0x00007da3u, 0x0004003du, 0x00000008u, 0x00001bb3u, 0x00000213u, 0x00050084u, 0x00000008u, 0x00001bb6u, 0x00000882u, 0x00007da2u, 0x000500b1u, 0x00000069u, 0x00001bb7u, 0x00001bb3u, 0x00001bb6u, 0x000400a8u, 0x00000069u, 0x00001bb8u, 0x00001bb7u, 0x000300f7u, 0x00001bbau, 0x00000000u, 0x000400fau, 0x00001bb8u, 0x00001bb9u, 0x00001bbau, 0x000200f8u, 0x00001bb9u, 0x0004003du, 0x00000008u, 0x00001bbbu, 0x00000213u, 0x00050084u, 0x00000008u, 0x00001bbeu, 0x00007da3u, 0x00000882u, 0x00050080u, 0x00000008u, 0x00001bc0u, 0x00001bbeu, 0x00001bbfu, 0x000500adu, 0x00000069u, 0x00001bc1u, 0x00001bbbu, 0x00001bc0u, 0x000200f9u, 0x00001bbau, 0x000200f8u, 0x00001bbau, 0x000700f5u, 0x00000069u, 0x00001bc2u, 0x00001bb7u, 0x00001ff0u, 0x00001bc1u, 0x00001bb9u, 0x000300f7u, 0x00001bc4u, 0x00000000u, 0x000400fau, 0x00001bc2u, 0x00001bc3u, 0x00001bc4u, 0x000200f8u, 0x00001bc3u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001bc4u, 0x0004003du, 0x00000006u, 0x00001bccu, 0x00000214u, 0x00070041u, 0x00000671u, 0x00001bcdu, 0x00001bcbu, 0x00000220u, 0x00001bccu, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00001bceu, 0x00001bcdu, 0x00040071u, 0x00000006u, 0x00001bcfu, 0x00001bceu, 0x0003003eu, 0x00001bc6u, 0x00001bcfu, 0x000300f7u, 0x00001bd2u, 0x00000000u, 0x000400fau, 0x00001bd0u, 0x00001bd1u, 0x00001bd2u, 0x000200f8u, 0x00001bd1u, 0x000500c7u, 0x00000006u, 0x00001bd4u, 0x00001bcfu, 0x00000a36u, 0x000500abu, 0x00000069u, 0x00001bd5u, 0x00001bd4u, 0x0000032du, 0x000300f7u, 0x00001bd7u, 0x00000000u, 0x000400fau, 0x00001bd5u, 0x00001bd6u, 0x00001bd7u, 0x000200f8u, 0x00001bd6u, 0x0004003du, 0x00000008u, 0x00001bdau, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00001bdbu, 0x00001bdau, 0x00001bd9u, 0x0003003eu, 0x00000212u, 0x00001bdbu, 0x0004003du, 0x00000008u, 0x00001bdeu, 0x00000213u, 0x000500c7u, 0x00000008u, 0x00001bdfu, 0x00001bdeu, 0x00001bddu, 0x0003003eu, 0x00000213u, 0x00001bdfu, 0x000200f9u, 0x00001bd7u, 0x000200f8u, 0x00001bd7u, 0x000200f9u, 0x00001bd2u, 0x000200f8u, 0x00001bd2u, 0x00050084u, 0x00000008u, 0x00001be3u, 0x00000882u, 0x00007da1u, 0x0004003du, 0x00000008u, 0x00001be4u, 0x00000213u, 0x00050082u, 0x00000008u, 0x00001be8u, 0x00001be4u, 0x00001bb6u, 0x00050080u, 0x00000008u, 0x00001be9u, 0x00001be3u, 0x00001be8u, 0x0004007cu, 0x00000006u, 0x00001beau, 0x00001be9u, 0x0003003eu, 0x00001bebu, 0x00001beau, 0x00050039u, 0x00000029u, 0x00001becu, 0x0000002cu, 0x00001bebu, 0x00050051u, 0x00000009u, 0x00007dadu, 0x00001becu, 0x00000000u, 0x0003003eu, 0x00007da4u, 0x00007dadu, 0x00050051u, 0x00000009u, 0x00007daeu, 0x00001becu, 0x00000001u, 0x0003003eu, 0x00007da5u, 0x00007daeu, 0x00050051u, 0x00000028u, 0x00007dafu, 0x00001becu, 0x00000002u, 0x0003003eu, 0x00007da6u, 0x00007dafu, 0x00050051u, 0x00000028u, 0x00007db0u, 0x00001becu, 0x00000003u, 0x0003003eu, 0x00007da7u, 0x00007db0u, 0x00050051u, 0x00000008u, 0x00007db1u, 0x00001becu, 0x00000004u, 0x0003003eu, 0x00007da8u, 0x00007db1u, 0x00050051u, 0x00000008u, 0x00007db2u, 0x00001becu, 0x00000005u, 0x0003003eu, 0x00007da9u, 0x00007db2u, 0x00050051u, 0x00000008u, 0x00007db3u, 0x00001becu, 0x00000006u, 0x0003003eu, 0x00007daau, 0x00007db3u, 0x00050051u, 0x00000012u, 0x00007db4u, 0x00001becu, 0x00000007u, 0x0003003eu, 0x00007dabu, 0x00007db4u, 0x00050051u, 0x00000011u, 0x00007db5u, 0x00001becu, 0x00000008u, 0x0003003eu, 0x00007dacu, 0x00007db5u, 0x000500aau, 0x00000069u, 0x00001befu, 0x00007db5u, 0x0000021au, 0x000300f7u, 0x00001bf1u, 0x00000000u, 0x000400fau, 0x00001befu, 0x00001bf0u, 0x00001bf1u, 0x000200f8u, 0x00001bf0u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001bf1u, 0x0004003du, 0x00000006u, 0x00001bf4u, 0x00000214u, 0x00070041u, 0x00000671u, 0x00001bf5u, 0x00001bcbu, 0x00000220u, 0x00001bf4u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x00001bf6u, 0x00001bf5u, 0x00040071u, 0x00000006u, 0x00001bf7u, 0x00001bf6u, 0x0003003eu, 0x00001bf3u, 0x00001bf7u, 0x0004003du, 0x00000006u, 0x00001bfau, 0x00000214u, 0x0003003eu, 0x00001bf9u, 0x00001bfau, 0x00050039u, 0x0000000au, 0x00001bfbu, 0x0000000du, 0x00001bf9u, 0x00050051u, 0x00000009u, 0x00007dc4u, 0x00001bfbu, 0x00000001u, 0x0003003eu, 0x00007dc0u, 0x00007dc4u, 0x00050051u, 0x00000009u, 0x00007dc5u, 0x00001bfbu, 0x00000003u, 0x0003003eu, 0x00007dc1u, 0x00007dc5u, 0x00050051u, 0x00000009u, 0x00007dc6u, 0x00001bfbu, 0x00000005u, 0x0003003eu, 0x00007dc2u, 0x00007dc6u, 0x00050051u, 0x00000009u, 0x00007dc7u, 0x00001bfbu, 0x00000007u, 0x0003003eu, 0x00007dc3u, 0x00007dc7u, 0x0004003du, 0x00000006u, 0x00001bfdu, 0x00000214u, 0x00070041u, 0x00001bfeu, 0x00001bffu, 0x00000a12u, 0x00000220u, 0x00001bfdu, 0x00000220u, 0x0004003du, 0x00000010u, 0x00001c00u, 0x00001bffu, 0x00040071u, 0x000004f7u, 0x00001c01u, 0x00001c00u, 0x0003003eu, 0x00001bfcu, 0x00001c01u, 0x00050041u, 0x00000007u, 0x00001c03u, 0x00001bfcu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001c04u, 0x00001c03u, 0x0003003eu, 0x00001c02u, 0x00001c04u, 0x00050041u, 0x00000007u, 0x00001c06u, 0x00001bfcu, 0x00000386u, 0x0004003du, 0x00000006u, 0x00001c07u, 0x00001c06u, 0x0003003eu, 0x00001c05u, 0x00001c07u, 0x0003003eu, 0x00001c09u, 0x00001c04u, 0x00050039u, 0x00000019u, 0x00001c0bu, 0x0000001cu, 0x00001c09u, 0x00050051u, 0x00000010u, 0x00007dceu, 0x00001c0bu, 0x00000000u, 0x0003003eu, 0x00007dc8u, 0x00007dceu, 0x00050051u, 0x00000010u, 0x00007dcfu, 0x00001c0bu, 0x00000001u, 0x0003003eu, 0x00007dc9u, 0x00007dcfu, 0x00050051u, 0x00000010u, 0x00007dd0u, 0x00001c0bu, 0x00000002u, 0x0003003eu, 0x00007dcau, 0x00007dd0u, 0x00050051u, 0x00000010u, 0x00007dd1u, 0x00001c0bu, 0x00000003u, 0x0003003eu, 0x00007dcbu, 0x00007dd1u, 0x00050051u, 0x00000006u, 0x00007dd2u, 0x00001c0bu, 0x00000004u, 0x0003003eu, 0x00007dccu, 0x00007dd2u, 0x00050051u, 0x00000008u, 0x00007dd3u, 0x00001c0bu, 0x00000005u, 0x0003003eu, 0x00007dcdu, 0x00007dd3u, 0x0003003eu, 0x00001c0cu, 0x00007dd2u, 0x0003003eu, 0x00001c0fu, 0x00007dd3u, 0x0003003eu, 0x00001c12u, 0x00007dceu, 0x0003003eu, 0x00001c15u, 0x00007dcfu, 0x0003003eu, 0x00001c18u, 0x00007dd0u, 0x0003003eu, 0x00001c1bu, 0x00007dd1u, 0x000500c7u, 0x00000006u, 0x00001c20u, 0x00007dd2u, 0x00000330u, 0x000500abu, 0x00000069u, 0x00001c21u, 0x00001c20u, 0x0000032du, 0x0003003eu, 0x00001c1eu, 0x00001c21u, 0x000500c7u, 0x00000006u, 0x00001c24u, 0x00007dd2u, 0x00000a36u, 0x000500abu, 0x00000069u, 0x00001c25u, 0x00001c24u, 0x0000032du, 0x0003003eu, 0x00001c22u, 0x00001c25u, 0x000500c7u, 0x00000006u, 0x00001c29u, 0x00007dd2u, 0x00001c28u, 0x000500abu, 0x00000069u, 0x00001c2au, 0x00001c29u, 0x0000032du, 0x0003003eu, 0x00001c26u, 0x00001c2au, 0x000500c7u, 0x00000006u, 0x00001c2du, 0x00007dd2u, 0x00000a3cu, 0x000500abu, 0x00000069u, 0x00001c2eu, 0x00001c2du, 0x0000032du, 0x0003003eu, 0x00001c2bu, 0x00001c2eu, 0x000500c7u, 0x00000006u, 0x00001c31u, 0x00007dd2u, 0x00000a42u, 0x000500abu, 0x00000069u, 0x00001c32u, 0x00001c31u, 0x0000032du, 0x0003003eu, 0x00001c2fu, 0x00001c32u, 0x000500c7u, 0x00000006u, 0x00001c35u, 0x00007dd2u, 0x00000314u, 0x000500abu, 0x00000069u, 0x00001c36u, 0x00001c35u, 0x0000032du, 0x0003003eu, 0x00001c33u, 0x00001c36u, 0x000500c7u, 0x00000006u, 0x00001c3au, 0x00007dd2u, 0x00001c39u, 0x000500abu, 0x00000069u, 0x00001c3bu, 0x00001c3au, 0x0000032du, 0x0003003eu, 0x00001c37u, 0x00001c3bu, 0x000500c7u, 0x00000006u, 0x00001c3eu, 0x00007dd2u, 0x00000f4eu, 0x000500abu, 0x00000069u, 0x00001c3fu, 0x00001c3eu, 0x0000032du, 0x0003003eu, 0x00001c3cu, 0x00001c3fu, 0x000500c7u, 0x00000006u, 0x00001c42u, 0x00007dd2u, 0x00000f46u, 0x000500abu, 0x00000069u, 0x00001c43u, 0x00001c42u, 0x0000032du, 0x0003003eu, 0x00001c40u, 0x00001c43u, 0x000500c7u, 0x00000006u, 0x00001c46u, 0x00007dd2u, 0x00000704u, 0x000500abu, 0x00000069u, 0x00001c47u, 0x00001c46u, 0x0000032du, 0x0003003eu, 0x00001c44u, 0x00001c47u, 0x000500c7u, 0x00000006u, 0x00001c4au, 0x00007dd2u, 0x00000a48u, 0x000500abu, 0x00000069u, 0x00001c4bu, 0x00001c4au, 0x0000032du, 0x0003003eu, 0x00001c48u, 0x00001c4bu, 0x000500c7u, 0x00000006u, 0x00001c4eu, 0x00007dd2u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00001c4fu, 0x00001c4eu, 0x0000032du, 0x0003003eu, 0x00001c4cu, 0x00001c4fu, 0x000500c7u, 0x00000006u, 0x00001c52u, 0x00007dd2u, 0x00000e79u, 0x000500abu, 0x00000069u, 0x00001c53u, 0x00001c52u, 0x0000032du, 0x0003003eu, 0x00001c50u, 0x00001c53u, 0x000500c7u, 0x00000006u, 0x00001c57u, 0x00007dd2u, 0x00001c56u, 0x000500abu, 0x00000069u, 0x00001c58u, 0x00001c57u, 0x0000032du, 0x0003003eu, 0x00001c54u, 0x00001c58u, 0x000500c7u, 0x00000006u, 0x00001c5cu, 0x00007dd2u, 0x00001c5bu, 0x000500abu, 0x00000069u, 0x00001c5du, 0x00001c5cu, 0x0000032du, 0x0003003eu, 0x00001c59u, 0x00001c5du, 0x000500c7u, 0x00000006u, 0x00001c61u, 0x00007dd2u, 0x00001c60u, 0x000500abu, 0x00000069u, 0x00001c62u, 0x00001c61u, 0x0000032du, 0x0003003eu, 0x00001c5eu, 0x00001c62u, 0x000500c7u, 0x00000006u, 0x00001c66u, 0x00007dd2u, 0x00001c65u, 0x000500abu, 0x00000069u, 0x00001c67u, 0x00001c66u, 0x0000032du, 0x0003003eu, 0x00001c63u, 0x00001c67u, 0x000500c7u, 0x00000006u, 0x00001c6bu, 0x00007dd2u, 0x00001c6au, 0x000500abu, 0x00000069u, 0x00001c6cu, 0x00001c6bu, 0x0000032du, 0x0003003eu, 0x00001c68u, 0x00001c6cu, 0x000500c7u, 0x00000006u, 0x00001c70u, 0x00007dd2u, 0x00001c6fu, 0x000500abu, 0x00000069u, 0x00001c71u, 0x00001c70u, 0x0000032du, 0x0003003eu, 0x00001c6du, 0x00001c71u, 0x000500c7u, 0x00000006u, 0x00001c75u, 0x00007dd2u, 0x00001c74u, 0x000500abu, 0x00000069u, 0x00001c76u, 0x00001c75u, 0x0000032du, 0x0003003eu, 0x00001c72u, 0x00001c76u, 0x000500c7u, 0x00000006u, 0x00001c7au, 0x00007dd2u, 0x00001c79u, 0x000500abu, 0x00000069u, 0x00001c7bu, 0x00001c7au, 0x0000032du, 0x0003003eu, 0x00001c77u, 0x00001c7bu, 0x000500c7u, 0x00000006u, 0x00001c7fu, 0x00007dd2u, 0x00001c7eu, 0x000500abu, 0x00000069u, 0x00001c80u, 0x00001c7fu, 0x0000032du, 0x0003003eu, 0x00001c7cu, 0x00001c80u, 0x000500c7u, 0x00000006u, 0x00001c84u, 0x00007dd2u, 0x00001c83u, 0x000500abu, 0x00000069u, 0x00001c85u, 0x00001c84u, 0x0000032du, 0x0003003eu, 0x00001c81u, 0x00001c85u, 0x000500c7u, 0x00000006u, 0x00001c89u, 0x00007dd2u, 0x00001c88u, 0x000500abu, 0x00000069u, 0x00001c8au, 0x00001c89u, 0x0000032du, 0x0003003eu, 0x00001c86u, 0x00001c8au, 0x000500c7u, 0x00000006u, 0x00001c8du, 0x00007dd2u, 0x00001c8cu, 0x000500abu, 0x00000069u, 0x00001c8eu, 0x00001c8du, 0x0000032du, 0x000300f7u, 0x00001c90u, 0x00000000u, 0x000400fau, 0x00001c8eu, 0x00001c8fu, 0x00001c90u, 0x000200f8u, 0x00001c8fu, 0x0004003du, 0x00000008u, 0x00001c91u, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00001c92u, 0x00001c91u, 0x0004003du, 0x00000008u, 0x00001c93u, 0x00000213u, 0x0004007cu, 0x00000006u, 0x00001c94u, 0x00001c93u, 0x0004003du, 0x00000006u, 0x00001c95u, 0x00000214u, 0x00060041u, 0x00001c96u, 0x00001c97u, 0x00000cc9u, 0x00000220u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00001c98u, 0x00001c97u, 0x00050080u, 0x00000006u, 0x00001c99u, 0x00001c95u, 0x00001c98u, 0x0003003eu, 0x00001c9au, 0x00001c92u, 0x0003003eu, 0x00001c9bu, 0x00001c94u, 0x0003003eu, 0x00001c9cu, 0x00001c99u, 0x00070039u, 0x00000002u, 0x00001c9du, 0x00000037u, 0x00001c9au, 0x00001c9bu, 0x00001c9cu, 0x000200f9u, 0x00001c90u, 0x000200f8u, 0x00001c90u, 0x000500c7u, 0x00000006u, 0x00001ca0u, 0x00001bcfu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00001ca1u, 0x00001ca0u, 0x0000032du, 0x0003003eu, 0x00001c9eu, 0x00001ca1u, 0x000300f7u, 0x00001ca4u, 0x00000000u, 0x000400fau, 0x00001c58u, 0x00001ca3u, 0x00001cf7u, 0x000200f8u, 0x00001ca3u, 0x0004003du, 0x00000008u, 0x00001ca6u, 0x00000212u, 0x000500afu, 0x00000069u, 0x00001ca9u, 0x00001ca6u, 0x00007db2u, 0x000300f7u, 0x00001cabu, 0x00000000u, 0x000400fau, 0x00001ca9u, 0x00001caau, 0x00001cabu, 0x000200f8u, 0x00001caau, 0x0004003du, 0x00000008u, 0x00001cacu, 0x00000212u, 0x000500b3u, 0x00000069u, 0x00001cafu, 0x00001cacu, 0x00007db3u, 0x000200f9u, 0x00001cabu, 0x000200f8u, 0x00001cabu, 0x000700f5u, 0x00000069u, 0x00001cb0u, 0x00001ca9u, 0x00001ca3u, 0x00001cafu, 0x00001caau, 0x0003003eu, 0x00001ca5u, 0x00001cb0u, 0x000400a8u, 0x00000069u, 0x00001cb2u, 0x00001cb0u, 0x000300f7u, 0x00001cb4u, 0x00000000u, 0x000400fau, 0x00001cb2u, 0x00001cb3u, 0x00001cb4u, 0x000200f8u, 0x00001cb3u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001cb4u, 0x0003003eu, 0x00001cb8u, 0x00001becu, 0x0003003eu, 0x00001cbau, 0x00007dc6u, 0x0004003du, 0x00000008u, 0x00001cbeu, 0x00000212u, 0x0003003eu, 0x00001cbdu, 0x00001cbeu, 0x0003003eu, 0x00001cbfu, 0x00001c36u, 0x0003003eu, 0x00001cc1u, 0x00001ca1u, 0x000b0039u, 0x00000002u, 0x00001cc5u, 0x0000010fu, 0x00001cb8u, 0x00001cbau, 0x00001cbdu, 0x00001cbfu, 0x00001cc1u, 0x00001cc3u, 0x00001cc4u, 0x0004003du, 0x000000efu, 0x00001cc6u, 0x00001cc3u, 0x0003003eu, 0x00001cb6u, 0x00001cc6u, 0x0004003du, 0x00000008u, 0x00001cc7u, 0x00001cc4u, 0x0003003eu, 0x00001cb7u, 0x00001cc7u, 0x000500c7u, 0x00000006u, 0x00001ccau, 0x00001bf7u, 0x00000742u, 0x0003003eu, 0x00001cc8u, 0x00001ccau, 0x0004003du, 0x00000006u, 0x00001cccu, 0x00000214u, 0x00080041u, 0x00000671u, 0x00001cceu, 0x00000a12u, 0x00000220u, 0x00001cccu, 0x0000022du, 0x00001ccau, 0x0004003du, 0x0000000fu, 0x00001ccfu, 0x00001cceu, 0x00040071u, 0x00000006u, 0x00001cd0u, 0x00001ccfu, 0x0003003eu, 0x00001ccbu, 0x00001cd0u, 0x0003003eu, 0x00001cd2u, 0x00001cd0u, 0x00050039u, 0x00000023u, 0x00001cd4u, 0x00000026u, 0x00001cd2u, 0x00050051u, 0x00000006u, 0x00007de2u, 0x00001cd4u, 0x00000000u, 0x0003003eu, 0x00007dd4u, 0x00007de2u, 0x00050051u, 0x00000006u, 0x00007de3u, 0x00001cd4u, 0x00000001u, 0x0003003eu, 0x00007dd5u, 0x00007de3u, 0x00050051u, 0x00000006u, 0x00007de4u, 0x00001cd4u, 0x00000002u, 0x0003003eu, 0x00007dd6u, 0x00007de4u, 0x00050051u, 0x00000006u, 0x00007de5u, 0x00001cd4u, 0x00000003u, 0x0003003eu, 0x00007dd7u, 0x00007de5u, 0x00050051u, 0x00000006u, 0x00007de6u, 0x00001cd4u, 0x00000004u, 0x0003003eu, 0x00007dd8u, 0x00007de6u, 0x00050051u, 0x00000006u, 0x00007de7u, 0x00001cd4u, 0x00000005u, 0x0003003eu, 0x00007dd9u, 0x00007de7u, 0x00050051u, 0x0000000fu, 0x00007de8u, 0x00001cd4u, 0x00000006u, 0x0003003eu, 0x00007ddau, 0x00007de8u, 0x00050051u, 0x0000000fu, 0x00007de9u, 0x00001cd4u, 0x00000007u, 0x0003003eu, 0x00007ddbu, 0x00007de9u, 0x00050051u, 0x0000000fu, 0x00007deau, 0x00001cd4u, 0x00000008u, 0x0003003eu, 0x00007ddcu, 0x00007deau, 0x00050051u, 0x0000000fu, 0x00007debu, 0x00001cd4u, 0x00000009u, 0x0003003eu, 0x00007dddu, 0x00007debu, 0x00050051u, 0x0000000fu, 0x00007decu, 0x00001cd4u, 0x0000000au, 0x0003003eu, 0x00007ddeu, 0x00007decu, 0x00050051u, 0x0000000fu, 0x00007dedu, 0x00001cd4u, 0x0000000bu, 0x0003003eu, 0x00007ddfu, 0x00007dedu, 0x00050051u, 0x0000000fu, 0x00007deeu, 0x00001cd4u, 0x0000000cu, 0x0003003eu, 0x00007de0u, 0x00007deeu, 0x00050051u, 0x0000000fu, 0x00007defu, 0x00001cd4u, 0x0000000du, 0x0003003eu, 0x00007de1u, 0x00007defu, 0x0003003eu, 0x00001cd6u, 0x00001cd4u, 0x0003003eu, 0x00001cd8u, 0x00001c07u, 0x0003003eu, 0x00001cdau, 0x00001cc6u, 0x0003003eu, 0x00001cdcu, 0x00001cc7u, 0x0003003eu, 0x00001cdeu, 0x00001c21u, 0x0003003eu, 0x00001ce0u, 0x00001c25u, 0x000a0039u, 0x00000008u, 0x00001ce2u, 0x000001acu, 0x00001cd6u, 0x00001cd8u, 0x00001cdau, 0x00001cdcu, 0x00001cdeu, 0x00001ce0u, 0x0003003eu, 0x00001cd5u, 0x00001ce2u, 0x00050041u, 0x00000046u, 0x00001ce4u, 0x00000215u, 0x0000022au, 0x0003003eu, 0x00001ce4u, 0x00001ce2u, 0x00050041u, 0x0000007bu, 0x00001ce5u, 0x00000215u, 0x0000022du, 0x0003003eu, 0x00001ce5u, 0x00000626u, 0x000300f7u, 0x00001ce8u, 0x00000000u, 0x000400fau, 0x00001c5du, 0x00001ce7u, 0x00001ce8u, 0x000200f8u, 0x00001ce7u, 0x00060041u, 0x00000ccau, 0x00001ce9u, 0x00000cc9u, 0x00000220u, 0x0000022du, 0x0004003du, 0x00000008u, 0x00001ceau, 0x00001ce9u, 0x000500aau, 0x00000069u, 0x00001cebu, 0x00001ceau, 0x0000022du, 0x000200f9u, 0x00001ce8u, 0x000200f8u, 0x00001ce8u, 0x000700f5u, 0x00000069u, 0x00001cecu, 0x00001c5du, 0x00001cb4u, 0x00001cebu, 0x00001ce7u, 0x000300f7u, 0x00001ceeu, 0x00000000u, 0x000400fau, 0x00001cecu, 0x00001cedu, 0x00001ceeu, 0x000200f8u, 0x00001cedu, 0x000500c7u, 0x00000008u, 0x00001cf0u, 0x00001ce2u, 0x0000022au, 0x000500aau, 0x00000069u, 0x00001cf1u, 0x00001cf0u, 0x00000220u, 0x000200f9u, 0x00001ceeu, 0x000200f8u, 0x00001ceeu, 0x000700f5u, 0x00000069u, 0x00001cf2u, 0x00001cecu, 0x00001ce8u, 0x00001cf1u, 0x00001cedu, 0x000300f7u, 0x00001cf4u, 0x00000000u, 0x000400fau, 0x00001cf2u, 0x00001cf3u, 0x00001cf4u, 0x000200f8u, 0x00001cf3u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001cf4u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000559u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001cf7u, 0x000300f7u, 0x00001cfau, 0x00000000u, 0x000400fau, 0x00001c53u, 0x00001cf9u, 0x00001cfau, 0x000200f8u, 0x00001cf9u, 0x00050041u, 0x0000007bu, 0x00001cfbu, 0x00000215u, 0x0000022du, 0x0003003eu, 0x00001cfbu, 0x00000627u, 0x0004003du, 0x00000008u, 0x00001cfcu, 0x00000212u, 0x000500afu, 0x00000069u, 0x00001cffu, 0x00001cfcu, 0x00007db2u, 0x000300f7u, 0x00001d01u, 0x00000000u, 0x000400fau, 0x00001cffu, 0x00001d00u, 0x00001d01u, 0x000200f8u, 0x00001d00u, 0x0004003du, 0x00000008u, 0x00001d02u, 0x00000212u, 0x000500b3u, 0x00000069u, 0x00001d05u, 0x00001d02u, 0x00007db3u, 0x000200f9u, 0x00001d01u, 0x000200f8u, 0x00001d01u, 0x000700f5u, 0x00000069u, 0x00001d06u, 0x00001cffu, 0x00001cf9u, 0x00001d05u, 0x00001d00u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00001d06u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001cfau, 0x000200f9u, 0x00001ca4u, 0x000200f8u, 0x00001ca4u, 0x0003003eu, 0x00001d09u, 0x00007dafu, 0x0003003eu, 0x00001d0cu, 0x00007db0u, 0x0004003du, 0x00000008u, 0x00001d10u, 0x00000212u, 0x0003003eu, 0x00001d0fu, 0x00001d10u, 0x00070039u, 0x0000000fu, 0x00001d11u, 0x00000092u, 0x00001d09u, 0x00001d0cu, 0x00001d0fu, 0x00040071u, 0x00000006u, 0x00001d12u, 0x00001d11u, 0x0004007cu, 0x00000008u, 0x00001d13u, 0x00001d12u, 0x0003003eu, 0x00001d08u, 0x00001d13u, 0x000500aau, 0x00000069u, 0x00001d15u, 0x00001d13u, 0x00000220u, 0x000300f7u, 0x00001d17u, 0x00000000u, 0x000400fau, 0x00001d15u, 0x00001d16u, 0x00001d17u, 0x000200f8u, 0x00001d16u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001d17u, 0x000400cdu, 0x00000008u, 0x00001d1bu, 0x00001d13u, 0x0003003eu, 0x00001d19u, 0x00001d1bu, 0x000400a8u, 0x00000069u, 0x00001d1du, 0x00001c47u, 0x000300f7u, 0x00001d1fu, 0x00000000u, 0x000400fau, 0x00001d1du, 0x00001d1eu, 0x00001d1fu, 0x000200f8u, 0x00001d1eu, 0x000500c7u, 0x00000008u, 0x00001d21u, 0x00001d13u, 0x0000022au, 0x000500aau, 0x00000069u, 0x00001d22u, 0x00001d21u, 0x00000220u, 0x000200f9u, 0x00001d1fu, 0x000200f8u, 0x00001d1fu, 0x000700f5u, 0x00000069u, 0x00001d23u, 0x00001d1du, 0x00001d17u, 0x00001d22u, 0x00001d1eu, 0x000300f7u, 0x00001d25u, 0x00000000u, 0x000400fau, 0x00001d23u, 0x00001d24u, 0x00001d25u, 0x000200f8u, 0x00001d24u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001d25u, 0x0004003du, 0x00000006u, 0x00001d29u, 0x00000214u, 0x0003003eu, 0x00001d28u, 0x00001d29u, 0x00050039u, 0x00000014u, 0x00001d2au, 0x00000017u, 0x00001d28u, 0x00050051u, 0x00000010u, 0x00007e0au, 0x00001d2au, 0x00000000u, 0x0003003eu, 0x00007dffu, 0x00007e0au, 0x00050051u, 0x00000010u, 0x00007e0bu, 0x00001d2au, 0x00000001u, 0x0003003eu, 0x00007e00u, 0x00007e0bu, 0x00050051u, 0x00000010u, 0x00007e0cu, 0x00001d2au, 0x00000002u, 0x0003003eu, 0x00007e01u, 0x00007e0cu, 0x00050051u, 0x00000010u, 0x00007e0du, 0x00001d2au, 0x00000003u, 0x0003003eu, 0x00007e02u, 0x00007e0du, 0x00050051u, 0x00000010u, 0x00007e0eu, 0x00001d2au, 0x00000004u, 0x0003003eu, 0x00007e03u, 0x00007e0eu, 0x00050051u, 0x00000010u, 0x00007e0fu, 0x00001d2au, 0x00000005u, 0x0003003eu, 0x00007e04u, 0x00007e0fu, 0x00050051u, 0x00000010u, 0x00007e10u, 0x00001d2au, 0x00000006u, 0x0003003eu, 0x00007e05u, 0x00007e10u, 0x00050051u, 0x00000010u, 0x00007e11u, 0x00001d2au, 0x00000007u, 0x0003003eu, 0x00007e06u, 0x00007e11u, 0x00050051u, 0x00000010u, 0x00007e12u, 0x00001d2au, 0x00000009u, 0x0003003eu, 0x00007e07u, 0x00007e12u, 0x00050051u, 0x0000000fu, 0x00007e13u, 0x00001d2au, 0x0000000du, 0x0003003eu, 0x00007e08u, 0x00007e13u, 0x00050051u, 0x00000013u, 0x00007e14u, 0x00001d2au, 0x0000000eu, 0x0003003eu, 0x00007e09u, 0x00007e14u, 0x0004003du, 0x00000008u, 0x00001d2cu, 0x00000212u, 0x00050082u, 0x00000008u, 0x00001d2fu, 0x00001d2cu, 0x00007db1u, 0x0003003eu, 0x00001d2bu, 0x00001d2fu, 0x000600a9u, 0x00000008u, 0x00001d32u, 0x00001ca1u, 0x0000022au, 0x00000cd7u, 0x0003003eu, 0x00001d30u, 0x00001d32u, 0x0003003eu, 0x00001d34u, 0x00007dadu, 0x0003003eu, 0x00001d37u, 0x00007dc4u, 0x0003003eu, 0x00001d3au, 0x00007dc5u, 0x0003003eu, 0x00001d3du, 0x00001d2fu, 0x0003003eu, 0x00001d3fu, 0x00001d13u, 0x00090039u, 0x00000010u, 0x00001d41u, 0x00000103u, 0x00001d34u, 0x00001d37u, 0x00001d3au, 0x00001d3du, 0x00001d3fu, 0x0003003eu, 0x00001d33u, 0x00001d41u, 0x0003003eu, 0x00001d42u, 0x00000536u, 0x0003003eu, 0x00001d43u, 0x00001d32u, 0x000500a7u, 0x00000069u, 0x00001d47u, 0x00001d45u, 0x00001c7bu, 0x000300f7u, 0x00001d49u, 0x00000000u, 0x000400fau, 0x00001d47u, 0x00001d48u, 0x00001d49u, 0x000200f8u, 0x00001d48u, 0x000500c7u, 0x00000006u, 0x00001d4bu, 0x00001bcfu, 0x00000a3cu, 0x000500abu, 0x00000069u, 0x00001d4cu, 0x00001d4bu, 0x0000032du, 0x000300f7u, 0x00001d4eu, 0x00000000u, 0x000400fau, 0x00001d4cu, 0x00001d4du, 0x00001d4eu, 0x000200f8u, 0x00001d4du, 0x00050084u, 0x00000008u, 0x00001d50u, 0x00001d32u, 0x00000882u, 0x0003003eu, 0x00001d43u, 0x00001d50u, 0x000200f9u, 0x00001d4eu, 0x000200f8u, 0x00001d4eu, 0x000700f5u, 0x00000008u, 0x0000f111u, 0x00001d32u, 0x00001d48u, 0x00001d50u, 0x00001d4du, 0x000200f9u, 0x00001d49u, 0x000200f8u, 0x00001d49u, 0x000700f5u, 0x00000008u, 0x0000f110u, 0x00001d32u, 0x00001d25u, 0x0000f111u, 0x00001d4eu, 0x0003003eu, 0x00001d55u, 0x00007daeu, 0x0003003eu, 0x00001d58u, 0x00007dc6u, 0x0003003eu, 0x00001d5bu, 0x00007dc7u, 0x0003003eu, 0x00001d5eu, 0x00001d2fu, 0x0003003eu, 0x00001d60u, 0x00001d13u, 0x0003003eu, 0x00001d62u, 0x00001c36u, 0x0003003eu, 0x00001d64u, 0x00001c7bu, 0x0003003eu, 0x00001d66u, 0x0000f110u, 0x0003003eu, 0x00001d6cu, 0x00000536u, 0x00110039u, 0x00000002u, 0x00001d6eu, 0x00000126u, 0x00001d55u, 0x00001d58u, 0x00001d5bu, 0x00001d5eu, 0x00001d60u, 0x00001d62u, 0x00001d64u, 0x00001d66u, 0x00001d68u, 0x00001d69u, 0x00001d6au, 0x00001d6bu, 0x00001d6cu, 0x0004003du, 0x000000efu, 0x00001d6fu, 0x00001d68u, 0x0003003eu, 0x00001d51u, 0x00001d6fu, 0x0004003du, 0x000000efu, 0x00001d70u, 0x00001d69u, 0x0003003eu, 0x00001d52u, 0x00001d70u, 0x0004003du, 0x000000efu, 0x00001d71u, 0x00001d6au, 0x0003003eu, 0x00001d53u, 0x00001d71u, 0x0004003du, 0x00000008u, 0x00001d72u, 0x00001d6bu, 0x0003003eu, 0x00001d54u, 0x00001d72u, 0x0004003du, 0x00000069u, 0x00001d73u, 0x00001d6cu, 0x0003003eu, 0x00001d42u, 0x00001d73u, 0x000500c7u, 0x00000006u, 0x00001d76u, 0x00001bf7u, 0x00000742u, 0x0003003eu, 0x00001d74u, 0x00001d76u, 0x00050080u, 0x00000006u, 0x00001d79u, 0x00001d76u, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x00001d7au, 0x00001d79u, 0x00000742u, 0x0003003eu, 0x00001d77u, 0x00001d7au, 0x000500c2u, 0x00000006u, 0x00001d7du, 0x00001bf7u, 0x00000464u, 0x0003003eu, 0x00001d7bu, 0x00001d7du, 0x00040071u, 0x00000006u, 0x00001d81u, 0x00007e13u, 0x0004007cu, 0x00000008u, 0x00001d82u, 0x00001d81u, 0x0003003eu, 0x00001d7eu, 0x00001d82u, 0x000300f7u, 0x00001d85u, 0x00000000u, 0x000400fau, 0x00001c7bu, 0x00001d84u, 0x00001d85u, 0x000200f8u, 0x00001d84u, 0x0003003eu, 0x00001d87u, 0x00001d76u, 0x0003003eu, 0x00001d89u, 0x00001d7au, 0x0003003eu, 0x00001d8cu, 0x00001d7du, 0x0003003eu, 0x00001d8eu, 0x00001d82u, 0x0003003eu, 0x00001d90u, 0x00001d6fu, 0x0003003eu, 0x00001d92u, 0x00001d70u, 0x0003003eu, 0x00001d94u, 0x00001d71u, 0x0003003eu, 0x00001d96u, 0x00001d73u, 0x0003003eu, 0x00001d98u, 0x00001c3bu, 0x0003003eu, 0x00001d9au, 0x00001c3fu, 0x0003003eu, 0x00001d9cu, 0x00001c43u, 0x00100039u, 0x00000002u, 0x00001d9eu, 0x000001d2u, 0x00001d87u, 0x00001d89u, 0x00001d8bu, 0x00001d8cu, 0x00001d8eu, 0x00001d90u, 0x00001d92u, 0x00001d94u, 0x00001d96u, 0x00001d98u, 0x00001d9au, 0x00001d9cu, 0x0004003du, 0x00000006u, 0x00001d9fu, 0x00001d87u, 0x0003003eu, 0x00001d74u, 0x00001d9fu, 0x0004003du, 0x00000006u, 0x00001da0u, 0x00001d89u, 0x0003003eu, 0x00001d77u, 0x00001da0u, 0x0004003du, 0x00000012u, 0x00001da1u, 0x00001d8bu, 0x0003003eu, 0x00001d86u, 0x00001da1u, 0x000200f9u, 0x00001d85u, 0x000200f8u, 0x00001d85u, 0x000700f5u, 0x00000012u, 0x0000f274u, 0x0000f27au, 0x00001d49u, 0x00001da1u, 0x00001d84u, 0x000700f5u, 0x00000006u, 0x0000f1c9u, 0x00001d7au, 0x00001d49u, 0x00001da0u, 0x00001d84u, 0x000700f5u, 0x00000006u, 0x0000f12bu, 0x00001d76u, 0x00001d49u, 0x00001d9fu, 0x00001d84u, 0x000300f7u, 0x00001da4u, 0x00000000u, 0x000400fau, 0x00001c6cu, 0x00001da3u, 0x00001da4u, 0x000200f8u, 0x00001da3u, 0x0004003du, 0x00000006u, 0x00001da6u, 0x00000214u, 0x00080041u, 0x00000671u, 0x00001da8u, 0x00000a12u, 0x00000220u, 0x00001da6u, 0x0000022du, 0x0000f12bu, 0x0004003du, 0x0000000fu, 0x00001da9u, 0x00001da8u, 0x00040071u, 0x00000006u, 0x00001daau, 0x00001da9u, 0x0003003eu, 0x00001da5u, 0x00001daau, 0x0003003eu, 0x00001dacu, 0x00001daau, 0x00050039u, 0x00000023u, 0x00001daeu, 0x00000026u, 0x00001dacu, 0x00050051u, 0x00000006u, 0x00007e24u, 0x00001daeu, 0x00000000u, 0x0003003eu, 0x00007e16u, 0x00007e24u, 0x00050051u, 0x00000006u, 0x00007e25u, 0x00001daeu, 0x00000001u, 0x0003003eu, 0x00007e17u, 0x00007e25u, 0x00050051u, 0x00000006u, 0x00007e26u, 0x00001daeu, 0x00000002u, 0x0003003eu, 0x00007e18u, 0x00007e26u, 0x00050051u, 0x00000006u, 0x00007e27u, 0x00001daeu, 0x00000003u, 0x0003003eu, 0x00007e19u, 0x00007e27u, 0x00050051u, 0x00000006u, 0x00007e28u, 0x00001daeu, 0x00000004u, 0x0003003eu, 0x00007e1au, 0x00007e28u, 0x00050051u, 0x00000006u, 0x00007e29u, 0x00001daeu, 0x00000005u, 0x0003003eu, 0x00007e1bu, 0x00007e29u, 0x00050051u, 0x0000000fu, 0x00007e2au, 0x00001daeu, 0x00000006u, 0x0003003eu, 0x00007e1cu, 0x00007e2au, 0x00050051u, 0x0000000fu, 0x00007e2bu, 0x00001daeu, 0x00000007u, 0x0003003eu, 0x00007e1du, 0x00007e2bu, 0x00050051u, 0x0000000fu, 0x00007e2cu, 0x00001daeu, 0x00000008u, 0x0003003eu, 0x00007e1eu, 0x00007e2cu, 0x00050051u, 0x0000000fu, 0x00007e2du, 0x00001daeu, 0x00000009u, 0x0003003eu, 0x00007e1fu, 0x00007e2du, 0x00050051u, 0x0000000fu, 0x00007e2eu, 0x00001daeu, 0x0000000au, 0x0003003eu, 0x00007e20u, 0x00007e2eu, 0x00050051u, 0x0000000fu, 0x00007e2fu, 0x00001daeu, 0x0000000bu, 0x0003003eu, 0x00007e21u, 0x00007e2fu, 0x00050051u, 0x0000000fu, 0x00007e30u, 0x00001daeu, 0x0000000cu, 0x0003003eu, 0x00007e22u, 0x00007e30u, 0x00050051u, 0x0000000fu, 0x00007e31u, 0x00001daeu, 0x0000000du, 0x0003003eu, 0x00007e23u, 0x00007e31u, 0x0003003eu, 0x00001db2u, 0x00001daeu, 0x0003003eu, 0x00001db4u, 0x00001c07u, 0x0003003eu, 0x00001db6u, 0x00001d6fu, 0x0003003eu, 0x00001db8u, 0x00001c21u, 0x0003003eu, 0x00001dbau, 0x00001c25u, 0x0003003eu, 0x00001dbcu, 0x00001c2au, 0x0003003eu, 0x00001dbeu, 0x00001c67u, 0x0003003eu, 0x00001dc0u, 0x00000536u, 0x0003003eu, 0x00001dc1u, 0x00001db1u, 0x000d0039u, 0x00000013u, 0x00001dc2u, 0x000001c2u, 0x00001db2u, 0x00001db4u, 0x00001db6u, 0x00001db8u, 0x00001dbau, 0x00001dbcu, 0x00001dbeu, 0x00001dc0u, 0x00001dc1u, 0x0003003eu, 0x00001dafu, 0x00001dc2u, 0x000400a8u, 0x00000069u, 0x00001dc4u, 0x00001c2au, 0x000400a8u, 0x00000069u, 0x00001dc6u, 0x00001c85u, 0x000500a7u, 0x00000069u, 0x00001dc7u, 0x00001dc4u, 0x00001dc6u, 0x000300f7u, 0x00001dc9u, 0x00000000u, 0x000400fau, 0x00001dc7u, 0x00001dc8u, 0x00001dc9u, 0x000200f8u, 0x00001dc8u, 0x0003003eu, 0x00001dcau, 0x00001dc2u, 0x0003003eu, 0x00001dccu, 0x00007e14u, 0x00060039u, 0x00000013u, 0x00001dcfu, 0x000001d7u, 0x00001dcau, 0x00001dccu, 0x0003003eu, 0x00001dafu, 0x00001dcfu, 0x000200f9u, 0x00001dc9u, 0x000200f8u, 0x00001dc9u, 0x000700f5u, 0x00000013u, 0x0000f1f9u, 0x00001dc2u, 0x00001da3u, 0x00001dcfu, 0x00001dc8u, 0x000200f9u, 0x00001da4u, 0x000200f8u, 0x00001da4u, 0x000700f5u, 0x00000013u, 0x0000f1efu, 0x0000f1f6u, 0x00001d85u, 0x0000f1f9u, 0x00001dc9u, 0x000300f7u, 0x00001dd2u, 0x00000000u, 0x000400fau, 0x00001c76u, 0x00001dd1u, 0x00001dd2u, 0x000200f8u, 0x00001dd1u, 0x0004003du, 0x00000008u, 0x00001dd7u, 0x00000213u, 0x00050082u, 0x00000008u, 0x00001ddbu, 0x00001dd7u, 0x00001bb6u, 0x00050080u, 0x00000008u, 0x00001ddcu, 0x00001ddbu, 0x0000022au, 0x00050080u, 0x00000008u, 0x00001dddu, 0x00001be3u, 0x00001ddcu, 0x00070041u, 0x00000692u, 0x00001ddeu, 0x000002dbu, 0x00000220u, 0x00001dddu, 0x0000025du, 0x0004003du, 0x00000011u, 0x00001ddfu, 0x00001ddeu, 0x00040071u, 0x00000006u, 0x00001de0u, 0x00001ddfu, 0x000500abu, 0x00000069u, 0x00001de1u, 0x00001de0u, 0x0000032du, 0x0003003eu, 0x00001dd3u, 0x00001de1u, 0x00040072u, 0x00000008u, 0x00001de5u, 0x00007db4u, 0x000500afu, 0x00000069u, 0x00001de6u, 0x00001de5u, 0x0000025du, 0x0003003eu, 0x00001de2u, 0x00001de6u, 0x0004003du, 0x00000008u, 0x00001de8u, 0x00000212u, 0x000300f7u, 0x00001decu, 0x00000000u, 0x000400fau, 0x00001ca1u, 0x00001debu, 0x00001defu, 0x000200f8u, 0x00001debu, 0x0003003eu, 0x00001deau, 0x00007db3u, 0x000200f9u, 0x00001decu, 0x000200f8u, 0x00001defu, 0x0003003eu, 0x00001deau, 0x00007db2u, 0x000200f9u, 0x00001decu, 0x000200f8u, 0x00001decu, 0x000600a9u, 0x00000008u, 0x0000f3b3u, 0x00001ca1u, 0x00007db3u, 0x00007db2u, 0x000500aau, 0x00000069u, 0x00001df3u, 0x00001de8u, 0x0000f3b3u, 0x0003003eu, 0x00001de7u, 0x00001df3u, 0x000500a7u, 0x00000069u, 0x00001df6u, 0x00001df3u, 0x00001de6u, 0x000500a7u, 0x00000069u, 0x00001df8u, 0x00001df6u, 0x00001de1u, 0x000300f7u, 0x00001dfau, 0x00000000u, 0x000400fau, 0x00001df8u, 0x00001df9u, 0x00001e1au, 0x000200f8u, 0x00001df9u, 0x0004003du, 0x00000008u, 0x00001dffu, 0x00000213u, 0x00050082u, 0x00000008u, 0x00001e03u, 0x00001dffu, 0x00001bb6u, 0x00050080u, 0x00000008u, 0x00001e04u, 0x00001e03u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00001e05u, 0x00001be3u, 0x00001e04u, 0x00070041u, 0x00001e06u, 0x00001e07u, 0x000002dbu, 0x00000220u, 0x00001e05u, 0x0000022au, 0x0004003du, 0x00000009u, 0x00001e08u, 0x00001e07u, 0x0008004fu, 0x00000044u, 0x00001e09u, 0x00001e08u, 0x00001e08u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x00000044u, 0x00001e0bu, 0x00001e09u, 0x0000f372u, 0x0003003eu, 0x00001dfbu, 0x00001e0bu, 0x000300f7u, 0x00001e0eu, 0x00000000u, 0x000400fau, 0x00001c36u, 0x00001e0du, 0x00001e16u, 0x000200f8u, 0x00001e0du, 0x0003003eu, 0x00001e10u, 0x00001e0bu, 0x00060039u, 0x000000efu, 0x00001e14u, 0x000000fbu, 0x00001e10u, 0x00001e12u, 0x0004003du, 0x00000069u, 0x00001e15u, 0x00001e12u, 0x0003003eu, 0x00001e0fu, 0x00001e15u, 0x0003003eu, 0x00001d51u, 0x00001e14u, 0x000200f9u, 0x00001e0eu, 0x000200f8u, 0x00001e16u, 0x0003003eu, 0x00001e17u, 0x00001e0bu, 0x00050039u, 0x000000efu, 0x00001e19u, 0x000000f6u, 0x00001e17u, 0x0003003eu, 0x00001d51u, 0x00001e19u, 0x000200f9u, 0x00001e0eu, 0x000200f8u, 0x00001e0eu, 0x000700f5u, 0x000000efu, 0x0000f1d5u, 0x00001e14u, 0x00001e0du, 0x00001e19u, 0x00001e16u, 0x000200f9u, 0x00001dfau, 0x000200f8u, 0x00001e1au, 0x00050084u, 0x00000008u, 0x00001e1du, 0x00001d32u, 0x00000882u, 0x00050080u, 0x00000008u, 0x00001e1eu, 0x00001d2fu, 0x00001e1du, 0x0003003eu, 0x00001e1fu, 0x00007daeu, 0x0003003eu, 0x00001e22u, 0x00007dc6u, 0x0003003eu, 0x00001e25u, 0x00001e1eu, 0x0003003eu, 0x00001e26u, 0x00001c36u, 0x00080039u, 0x000000efu, 0x00001e28u, 0x00000116u, 0x00001e1fu, 0x00001e22u, 0x00001e25u, 0x00001e26u, 0x0003003eu, 0x00001d51u, 0x00001e28u, 0x000200f9u, 0x00001dfau, 0x000200f8u, 0x00001dfau, 0x000700f5u, 0x000000efu, 0x0000f1d4u, 0x0000f1d5u, 0x00001e0eu, 0x00001e28u, 0x00001e1au, 0x0003003eu, 0x00001d77u, 0x0000f12bu, 0x0003003eu, 0x00001c6du, 0x00000559u, 0x000200f9u, 0x00001dd2u, 0x000200f8u, 0x00001dd2u, 0x000700f5u, 0x000000efu, 0x0000f1d1u, 0x00001d6fu, 0x00001da4u, 0x0000f1d4u, 0x00001dfau, 0x000600a9u, 0x00000006u, 0x0000f3b4u, 0x00001c76u, 0x0000f12bu, 0x0000f1c9u, 0x000600a9u, 0x00000069u, 0x0000f3b5u, 0x00001c76u, 0x00000559u, 0x00001c71u, 0x000300f7u, 0x00001e2cu, 0x00000000u, 0x000400fau, 0x0000f3b5u, 0x00001e2bu, 0x00001e2cu, 0x000200f8u, 0x00001e2bu, 0x000400a8u, 0x00000069u, 0x00001e2fu, 0x00001c8au, 0x000500a7u, 0x00000069u, 0x00001e30u, 0x00001c80u, 0x00001e2fu, 0x000300f7u, 0x00001e32u, 0x00000000u, 0x000400fau, 0x00001e30u, 0x00001e31u, 0x00001e3au, 0x000200f8u, 0x00001e31u, 0x0003003eu, 0x00001e34u, 0x0000f1efu, 0x0003003eu, 0x00001e36u, 0x00007e14u, 0x00060039u, 0x00000013u, 0x00001e39u, 0x000001d7u, 0x00001e34u, 0x00001e36u, 0x0003003eu, 0x00001e33u, 0x00001e39u, 0x000200f9u, 0x00001e32u, 0x000200f8u, 0x00001e3au, 0x0004003du, 0x00000006u, 0x00001e3cu, 0x00000214u, 0x00080041u, 0x00000671u, 0x00001e3eu, 0x00000a12u, 0x00000220u, 0x00001e3cu, 0x0000022du, 0x0000f3b4u, 0x0004003du, 0x0000000fu, 0x00001e3fu, 0x00001e3eu, 0x00040071u, 0x00000006u, 0x00001e40u, 0x00001e3fu, 0x0003003eu, 0x00001e3bu, 0x00001e40u, 0x0003003eu, 0x00001e42u, 0x00001e40u, 0x00050039u, 0x00000023u, 0x00001e44u, 0x00000026u, 0x00001e42u, 0x00050051u, 0x00000006u, 0x00007e4fu, 0x00001e44u, 0x00000000u, 0x0003003eu, 0x00007e41u, 0x00007e4fu, 0x00050051u, 0x00000006u, 0x00007e50u, 0x00001e44u, 0x00000001u, 0x0003003eu, 0x00007e42u, 0x00007e50u, 0x00050051u, 0x00000006u, 0x00007e51u, 0x00001e44u, 0x00000002u, 0x0003003eu, 0x00007e43u, 0x00007e51u, 0x00050051u, 0x00000006u, 0x00007e52u, 0x00001e44u, 0x00000003u, 0x0003003eu, 0x00007e44u, 0x00007e52u, 0x00050051u, 0x00000006u, 0x00007e53u, 0x00001e44u, 0x00000004u, 0x0003003eu, 0x00007e45u, 0x00007e53u, 0x00050051u, 0x00000006u, 0x00007e54u, 0x00001e44u, 0x00000005u, 0x0003003eu, 0x00007e46u, 0x00007e54u, 0x00050051u, 0x0000000fu, 0x00007e55u, 0x00001e44u, 0x00000006u, 0x0003003eu, 0x00007e47u, 0x00007e55u, 0x00050051u, 0x0000000fu, 0x00007e56u, 0x00001e44u, 0x00000007u, 0x0003003eu, 0x00007e48u, 0x00007e56u, 0x00050051u, 0x0000000fu, 0x00007e57u, 0x00001e44u, 0x00000008u, 0x0003003eu, 0x00007e49u, 0x00007e57u, 0x00050051u, 0x0000000fu, 0x00007e58u, 0x00001e44u, 0x00000009u, 0x0003003eu, 0x00007e4au, 0x00007e58u, 0x00050051u, 0x0000000fu, 0x00007e59u, 0x00001e44u, 0x0000000au, 0x0003003eu, 0x00007e4bu, 0x00007e59u, 0x00050051u, 0x0000000fu, 0x00007e5au, 0x00001e44u, 0x0000000bu, 0x0003003eu, 0x00007e4cu, 0x00007e5au, 0x00050051u, 0x0000000fu, 0x00007e5bu, 0x00001e44u, 0x0000000cu, 0x0003003eu, 0x00007e4du, 0x00007e5bu, 0x00050051u, 0x0000000fu, 0x00007e5cu, 0x00001e44u, 0x0000000du, 0x0003003eu, 0x00007e4eu, 0x00007e5cu, 0x0003003eu, 0x00001e45u, 0x00001e44u, 0x0003003eu, 0x00001e47u, 0x00001c07u, 0x0003003eu, 0x00001e49u, 0x0000f1d1u, 0x0003003eu, 0x00001e4bu, 0x00001c21u, 0x0003003eu, 0x00001e4du, 0x00001c25u, 0x0003003eu, 0x00001e4fu, 0x00001c2au, 0x0003003eu, 0x00001e51u, 0x00001c67u, 0x0003003eu, 0x00001e53u, 0x00001c80u, 0x0003003eu, 0x00001e55u, 0x0000f1efu, 0x000d0039u, 0x00000013u, 0x00001e57u, 0x000001c2u, 0x00001e45u, 0x00001e47u, 0x00001e49u, 0x00001e4bu, 0x00001e4du, 0x00001e4fu, 0x00001e51u, 0x00001e53u, 0x00001e55u, 0x0003003eu, 0x00001e33u, 0x00001e57u, 0x000400a8u, 0x00000069u, 0x00001e59u, 0x00001c2au, 0x000400a8u, 0x00000069u, 0x00001e5bu, 0x00001c21u, 0x000500a7u, 0x00000069u, 0x00001e5cu, 0x00001e59u, 0x00001e5bu, 0x000500a7u, 0x00000069u, 0x00001e5fu, 0x00001e5cu, 0x00001e2fu, 0x000300f7u, 0x00001e61u, 0x00000000u, 0x000400fau, 0x00001e5fu, 0x00001e60u, 0x00001e61u, 0x000200f8u, 0x00001e60u, 0x0003003eu, 0x00001e62u, 0x00001e57u, 0x0003003eu, 0x00001e64u, 0x00007e14u, 0x00060039u, 0x00000013u, 0x00001e67u, 0x000001d7u, 0x00001e62u, 0x00001e64u, 0x0003003eu, 0x00001e33u, 0x00001e67u, 0x000200f9u, 0x00001e61u, 0x000200f8u, 0x00001e61u, 0x000700f5u, 0x00000013u, 0x0000f270u, 0x00001e57u, 0x00001e3au, 0x00001e67u, 0x00001e60u, 0x000200f9u, 0x00001e32u, 0x000200f8u, 0x00001e32u, 0x000700f5u, 0x00000013u, 0x0000f26fu, 0x00001e39u, 0x00001e31u, 0x0000f270u, 0x00001e61u, 0x000200f9u, 0x00001e2cu, 0x000200f8u, 0x00001e2cu, 0x000700f5u, 0x00000013u, 0x0000f260u, 0x0000f1f6u, 0x00001dd2u, 0x0000f26fu, 0x00001e32u, 0x0004003du, 0x00000008u, 0x00001e68u, 0x00000213u, 0x000600a9u, 0x00000008u, 0x00001e6au, 0x00001c4fu, 0x0000022au, 0x00000220u, 0x000500c3u, 0x00000008u, 0x00001e6bu, 0x00001e68u, 0x00001e6au, 0x000500c3u, 0x00000008u, 0x00001e6du, 0x00007dd3u, 0x0000022du, 0x000500c7u, 0x00000008u, 0x00001e6fu, 0x00007dd3u, 0x00000230u, 0x0004003du, 0x00000008u, 0x00001e73u, 0x00000212u, 0x0003003eu, 0x00001e72u, 0x00001e73u, 0x0003003eu, 0x00001e74u, 0x00001e6bu, 0x0003003eu, 0x00001e75u, 0x00001e6du, 0x0003003eu, 0x00001e76u, 0x00001e6fu, 0x000a0039u, 0x00000002u, 0x00001e79u, 0x00000054u, 0x00001e72u, 0x00001e74u, 0x00001e75u, 0x00001e76u, 0x00001e77u, 0x00001e78u, 0x0004003du, 0x00000008u, 0x00001e7au, 0x00001e77u, 0x0003003eu, 0x00001e70u, 0x00001e7au, 0x0004003du, 0x00000008u, 0x00001e7bu, 0x00001e78u, 0x0003003eu, 0x00001e71u, 0x00001e7bu, 0x000300f7u, 0x00001e7eu, 0x00000000u, 0x000400fau, 0x00001c4bu, 0x00001e7du, 0x00001ecau, 0x000200f8u, 0x00001e7du, 0x0004003du, 0x00000010u, 0x00001e88u, 0x00001d33u, 0x00040039u, 0x00000012u, 0x00001e8cu, 0x0000003au, 0x000d0050u, 0x000001e4u, 0x00001e8du, 0x00007e0au, 0x00007e0bu, 0x00007e0cu, 0x00007e0du, 0x00001e88u, 0x00001db1u, 0x0000f1efu, 0x0000f260u, 0x0000f274u, 0x00001e8cu, 0x0003003eu, 0x00007e6cu, 0x00007e0au, 0x0003003eu, 0x00007e6du, 0x00007e0bu, 0x0003003eu, 0x00007e6eu, 0x00007e0cu, 0x0003003eu, 0x00007e6fu, 0x00007e0du, 0x0003003eu, 0x00007e70u, 0x00001e88u, 0x0003003eu, 0x00007e71u, 0x00001db1u, 0x0003003eu, 0x00007e72u, 0x0000f1efu, 0x0003003eu, 0x00007e73u, 0x0000f260u, 0x0003003eu, 0x00007e74u, 0x0000f274u, 0x0003003eu, 0x00007e75u, 0x00001e8cu, 0x0003003eu, 0x00001e8fu, 0x00001e8du, 0x0003003eu, 0x00001e91u, 0x00007dceu, 0x0003003eu, 0x00001e93u, 0x00007dcfu, 0x0003003eu, 0x00001e95u, 0x00001e7bu, 0x0003003eu, 0x00001e97u, 0x00001d1bu, 0x0003003eu, 0x00001e99u, 0x00001c2eu, 0x0003003eu, 0x00001e9bu, 0x00001c32u, 0x0003003eu, 0x00001e9du, 0x00001c5du, 0x000d0039u, 0x00000013u, 0x00001ea0u, 0x00000205u, 0x00001e8fu, 0x00001e91u, 0x00001e93u, 0x00001e95u, 0x00001e97u, 0x00001e99u, 0x00001e9bu, 0x00001e9du, 0x00001e9fu, 0x0004003du, 0x0000000fu, 0x00001ea1u, 0x00001e9fu, 0x0003003eu, 0x00001e8eu, 0x00001ea1u, 0x0003003eu, 0x00007e71u, 0x00001ea0u, 0x0003003eu, 0x00007e6cu, 0x00007e0eu, 0x0003003eu, 0x00007e6du, 0x00007e0fu, 0x0003003eu, 0x00007e6eu, 0x00007e10u, 0x0003003eu, 0x00007e6fu, 0x00007e11u, 0x0003003eu, 0x00001eafu, 0x0000f1efu, 0x0003003eu, 0x00007e72u, 0x0000f260u, 0x0003003eu, 0x00007e73u, 0x0000f1efu, 0x000d0050u, 0x000001e4u, 0x00007e95u, 0x00007e0eu, 0x00007e0fu, 0x00007e10u, 0x00007e11u, 0x00001e88u, 0x00001ea0u, 0x0000f260u, 0x0000f1efu, 0x0000f274u, 0x00001e8cu, 0x0003003eu, 0x00001eb8u, 0x00007e95u, 0x0003003eu, 0x00001ebau, 0x00007dd0u, 0x0003003eu, 0x00001ebcu, 0x00007dd1u, 0x0003003eu, 0x00001ebeu, 0x00001e7bu, 0x0003003eu, 0x00001ec0u, 0x00001d1bu, 0x0003003eu, 0x00001ec2u, 0x00001c2eu, 0x0003003eu, 0x00001ec4u, 0x00001c32u, 0x000b0039u, 0x00000013u, 0x00001ec6u, 0x0000020fu, 0x00001eb8u, 0x00001ebau, 0x00001ebcu, 0x00001ebeu, 0x00001ec0u, 0x00001ec2u, 0x00001ec4u, 0x0004003du, 0x00000008u, 0x00001ec7u, 0x00001ec0u, 0x0003003eu, 0x00001d19u, 0x00001ec7u, 0x00040072u, 0x00000b07u, 0x00001ec8u, 0x00001ec6u, 0x0004007cu, 0x00000010u, 0x00001ec9u, 0x00001ec8u, 0x0003003eu, 0x00001eb7u, 0x00001ec9u, 0x000200f9u, 0x00001e7eu, 0x000200f8u, 0x00001ecau, 0x0004003du, 0x00000010u, 0x00001ed4u, 0x00001d33u, 0x00040039u, 0x00000012u, 0x00001ed8u, 0x0000003au, 0x000d0050u, 0x000001e4u, 0x00001ed9u, 0x00007e0eu, 0x00007e0fu, 0x00007e10u, 0x00007e11u, 0x00001ed4u, 0x00001db1u, 0x0000f1efu, 0x0000f260u, 0x0000f274u, 0x00001ed8u, 0x0003003eu, 0x00007e96u, 0x00007e0eu, 0x0003003eu, 0x00007e97u, 0x00007e0fu, 0x0003003eu, 0x00007e98u, 0x00007e10u, 0x0003003eu, 0x00007e99u, 0x00007e11u, 0x0003003eu, 0x00007e9au, 0x00001ed4u, 0x0003003eu, 0x00007e9bu, 0x00001db1u, 0x0003003eu, 0x00007e9cu, 0x0000f1efu, 0x0003003eu, 0x00007e9du, 0x0000f260u, 0x0003003eu, 0x00007e9eu, 0x0000f274u, 0x0003003eu, 0x00007e9fu, 0x00001ed8u, 0x0003003eu, 0x00001edau, 0x00001ed9u, 0x0003003eu, 0x00001edcu, 0x00007dd0u, 0x0003003eu, 0x00001edeu, 0x00007dd1u, 0x0003003eu, 0x00001ee0u, 0x00001e7bu, 0x0003003eu, 0x00001ee2u, 0x00001d1bu, 0x0003003eu, 0x00001ee4u, 0x00001c2eu, 0x0003003eu, 0x00001ee6u, 0x00001c32u, 0x000b0039u, 0x00000013u, 0x00001ee8u, 0x0000020fu, 0x00001edau, 0x00001edcu, 0x00001edeu, 0x00001ee0u, 0x00001ee2u, 0x00001ee4u, 0x00001ee6u, 0x0004003du, 0x00000008u, 0x00001ee9u, 0x00001ee2u, 0x0003003eu, 0x00001d19u, 0x00001ee9u, 0x00040072u, 0x00000b07u, 0x00001eeau, 0x00001ee8u, 0x0004007cu, 0x00000010u, 0x00001eebu, 0x00001eeau, 0x0003003eu, 0x00001eb7u, 0x00001eebu, 0x00050041u, 0x0000007bu, 0x00001eecu, 0x00001eb7u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001eedu, 0x00001eecu, 0x0003003eu, 0x00001e8eu, 0x00001eedu, 0x000200f9u, 0x00001e7eu, 0x000200f8u, 0x00001e7eu, 0x000700f5u, 0x0000000fu, 0x0000f342u, 0x00001ea1u, 0x00001e7du, 0x00001eedu, 0x00001ecau, 0x000700f5u, 0x00000008u, 0x0000f330u, 0x00001ec7u, 0x00001e7du, 0x00001ee9u, 0x00001ecau, 0x000500aau, 0x00000069u, 0x00001ef0u, 0x0000f330u, 0x00000220u, 0x000500a7u, 0x00000069u, 0x00001ef1u, 0x00001c47u, 0x00001ef0u, 0x000300f7u, 0x00001ef3u, 0x00000000u, 0x000400fau, 0x00001ef1u, 0x00001ef2u, 0x00001ef3u, 0x000200f8u, 0x00001ef2u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001ef3u, 0x000300f7u, 0x00001ef7u, 0x00000000u, 0x000400fau, 0x00001c5du, 0x00001ef6u, 0x00001ef7u, 0x000200f8u, 0x00001ef6u, 0x000300f7u, 0x00001efau, 0x00000000u, 0x000400fau, 0x00001c62u, 0x00001ef9u, 0x00001efdu, 0x000200f8u, 0x00001ef9u, 0x00040039u, 0x0000000fu, 0x00001efcu, 0x00000042u, 0x0003003eu, 0x00001efbu, 0x00001efcu, 0x000200f9u, 0x00001efau, 0x000200f8u, 0x00001efdu, 0x00050041u, 0x0000007bu, 0x00007e15u, 0x00007e07u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001effu, 0x00007e15u, 0x0003003eu, 0x00001efbu, 0x00001effu, 0x000200f9u, 0x00001efau, 0x000200f8u, 0x00001efau, 0x000700f5u, 0x0000000fu, 0x0000f343u, 0x00001efcu, 0x00001ef9u, 0x00001effu, 0x00001efdu, 0x000500b0u, 0x00000069u, 0x00001f02u, 0x0000f342u, 0x0000f343u, 0x000300f7u, 0x00001f04u, 0x00000000u, 0x000400fau, 0x00001f02u, 0x00001f03u, 0x00001f04u, 0x000200f8u, 0x00001f03u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000536u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001f04u, 0x000200f9u, 0x00001ef7u, 0x000200f8u, 0x00001ef7u, 0x0004003du, 0x00000010u, 0x00001f06u, 0x00001eb7u, 0x00050041u, 0x00000068u, 0x00001f07u, 0x00000215u, 0x00000220u, 0x0003003eu, 0x00001f07u, 0x00001f06u, 0x000500c4u, 0x00000008u, 0x00001f09u, 0x00001d72u, 0x00000260u, 0x000500c5u, 0x00000008u, 0x00001f0bu, 0x00001f09u, 0x00001e7au, 0x00050041u, 0x00000046u, 0x00001f0cu, 0x00000215u, 0x0000022au, 0x0003003eu, 0x00001f0cu, 0x00001f0bu, 0x00040072u, 0x0000037bu, 0x00001f0eu, 0x0000f330u, 0x0004007cu, 0x0000000fu, 0x00001f0fu, 0x00001f0eu, 0x00050041u, 0x0000007bu, 0x00001f10u, 0x00000215u, 0x0000022du, 0x0003003eu, 0x00001f10u, 0x00001f0fu, 0x00050041u, 0x0000007bu, 0x00001f11u, 0x00001d33u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001f12u, 0x00001f11u, 0x00040071u, 0x00000006u, 0x00001f13u, 0x00001f12u, 0x0004007cu, 0x00000008u, 0x00001f14u, 0x00001f13u, 0x00050080u, 0x00000008u, 0x00001f16u, 0x00001f14u, 0x00001e7bu, 0x0007000cu, 0x00000008u, 0x00001f17u, 0x00000001u, 0x00000027u, 0x00001f16u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x00001f18u, 0x00001f17u, 0x0004007cu, 0x0000000fu, 0x00001f19u, 0x00001f18u, 0x00050041u, 0x0000007bu, 0x00001f1au, 0x00000215u, 0x00000230u, 0x0003003eu, 0x00001f1au, 0x00001f19u, 0x0003003eu, 0x00001ff1u, 0x00000559u, 0x0003003eu, 0x00001feeu, 0x00000559u, 0x000200f9u, 0x00001fedu, 0x000200f8u, 0x00001fedu, 0x001900f5u, 0x00000069u, 0x0000f36cu, 0x00000536u, 0x00001bc3u, 0x00000536u, 0x00001bf0u, 0x00000536u, 0x00001cb3u, 0x00000536u, 0x00001cf3u, 0x00000559u, 0x00001cf4u, 0x00001d06u, 0x00001d01u, 0x00000536u, 0x00001d16u, 0x00000536u, 0x00001d24u, 0x00000536u, 0x00001ef2u, 0x00000536u, 0x00001f03u, 0x00000559u, 0x00001ef7u, 0x000200feu, 0x0000f36cu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000f3e4u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x0000003du, 0x00020011u, 0x0000003fu, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00001f2du, 0x00001f37u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x0000021bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000021bu, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000021bu, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000021bu, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000021bu, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000021bu, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x0000021bu, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x0000021bu, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x0000021cu, 0x00000006u, 0x00000080u, 0x00040048u, 0x0000021du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000021du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000021du, 0x00000002u, 0x00040047u, 0x0000021fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000021fu, 0x00000021u, 0x00000001u, 0x00050048u, 0x00000241u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000241u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000241u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000241u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000241u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000241u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000241u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000241u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000241u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000241u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x00000241u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000241u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x00000241u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x00000241u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x00000241u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x00000242u, 0x00000006u, 0x00000038u, 0x00040048u, 0x00000243u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000243u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000243u, 0x00000002u, 0x00040047u, 0x00000245u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000245u, 0x00000021u, 0x00000002u, 0x00050048u, 0x00000274u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000274u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000274u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000274u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000274u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000274u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000274u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000274u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000275u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000276u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000276u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000276u, 0x00000002u, 0x00040047u, 0x00000278u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000278u, 0x00000021u, 0x00000004u, 0x00050048u, 0x00000292u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000292u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000292u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000292u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000292u, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x00000292u, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000292u, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x00000293u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000294u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000294u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000294u, 0x00000002u, 0x00040047u, 0x00000296u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000296u, 0x00000021u, 0x00000005u, 0x00050048u, 0x000002aeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002aeu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002aeu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002aeu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000002aeu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000002aeu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000002aeu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000002aeu, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x000002aeu, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x000002aeu, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x000002aeu, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000002aeu, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x000002aeu, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x000002aeu, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x000002afu, 0x00000006u, 0x00000020u, 0x00040048u, 0x000002b0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002b0u, 0x00000002u, 0x00040047u, 0x000002b2u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002b2u, 0x00000021u, 0x00000007u, 0x00050048u, 0x000002d7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002d7u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000002d7u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000002d7u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x000002d7u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x000002d7u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x000002d7u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x000002d7u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x000002d7u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x000002d8u, 0x00000006u, 0x00000040u, 0x00040048u, 0x000002d9u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002d9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002d9u, 0x00000002u, 0x00040047u, 0x000002dbu, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002dbu, 0x00000021u, 0x00000008u, 0x00050048u, 0x000002f6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000002f6u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000002f6u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000002f6u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x000002f7u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000002f8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000002f8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000002f8u, 0x00000002u, 0x00040047u, 0x000002fau, 0x00000022u, 0x00000001u, 0x00040047u, 0x000002fau, 0x00000021u, 0x00000009u, 0x00040047u, 0x000004efu, 0x00000022u, 0x00000001u, 0x00040047u, 0x000004efu, 0x00000021u, 0x0000000au, 0x00040047u, 0x0000065cu, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000662u, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000066bu, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000066cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000066cu, 0x00000002u, 0x00040047u, 0x0000066eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000066eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000679u, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000067au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000067au, 0x00000002u, 0x00040047u, 0x0000067cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000067cu, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000068cu, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000068du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000068du, 0x00000002u, 0x00040047u, 0x0000068fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000068fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x000006d4u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000006d5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000006d5u, 0x00000002u, 0x00040047u, 0x000006d7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000006d7u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000788u, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000852u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000a1bu, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000a1cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000a1cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000a1cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x00000a1du, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000a1eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000a1eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000a1eu, 0x00000002u, 0x00040047u, 0x00000a20u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000a20u, 0x00000021u, 0x00000006u, 0x00050048u, 0x00000cd4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000cd4u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000cd4u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000cd4u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000cd5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000cd5u, 0x00000002u, 0x00040047u, 0x00000cd7u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000cd7u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000e88u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000e89u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000e8au, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000e8bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000e8bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000e8bu, 0x00000002u, 0x00040047u, 0x00000e8du, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000e8du, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000f55u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000f56u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000f57u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000f58u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000f58u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000f58u, 0x00000002u, 0x00040047u, 0x00000f5au, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000f5au, 0x00000021u, 0x00000002u, 0x00050048u, 0x00001bd5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001bd5u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001bd5u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001bd5u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001bd5u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00001bd5u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00001bd5u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00001bd5u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00001bd5u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00001bd5u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00001bd5u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00001bd6u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00001bd7u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001bd7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001bd7u, 0x00000002u, 0x00040047u, 0x00001bd9u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001bd9u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00001f2du, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00001f37u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00001f40u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00001f41u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00001f42u, 0x00000001u, 0x00000004u, 0x00040047u, 0x00001f43u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00001f4bu, 0x00000001u, 0x00000005u, 0x00040047u, 0x00001f4fu, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001f50u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001f50u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001f50u, 0x00000002u, 0x00040047u, 0x00001f52u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001f52u, 0x00000021u, 0x0000000cu, 0x00050048u, 0x00001f56u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001f56u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001f56u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001f56u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001f56u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x00001f56u, 0x00000002u, 0x00040047u, 0x00001f83u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001f84u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001f84u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001f84u, 0x00000002u, 0x00040047u, 0x00001f86u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001f86u, 0x00000021u, 0x0000000bu, 0x00040047u, 0x00001ff4u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001ff5u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001ff5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001ff5u, 0x00000002u, 0x00040047u, 0x00001ff7u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001ff7u, 0x00000021u, 0x00000003u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x00040015u, 0x0000000fu, 0x00000008u, 0x00000000u, 0x00040017u, 0x00000010u, 0x0000000fu, 0x00000004u, 0x00040015u, 0x00000011u, 0x00000010u, 0x00000000u, 0x00040015u, 0x00000012u, 0x00000010u, 0x00000001u, 0x00040017u, 0x00000013u, 0x00000012u, 0x00000004u, 0x0011001eu, 0x00000014u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000011u, 0x0000000fu, 0x0000000fu, 0x00000013u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x000a001eu, 0x00000019u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001au, 0x00000019u, 0x00000007u, 0x0009001eu, 0x0000001eu, 0x00000010u, 0x00000010u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x00040021u, 0x0000001fu, 0x0000001eu, 0x00000007u, 0x0010001eu, 0x00000023u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x00040021u, 0x00000024u, 0x00000023u, 0x00000007u, 0x00040017u, 0x00000028u, 0x00000011u, 0x00000004u, 0x000b001eu, 0x00000029u, 0x00000009u, 0x00000009u, 0x00000028u, 0x00000028u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000011u, 0x00040021u, 0x0000002au, 0x00000029u, 0x00000007u, 0x0006001eu, 0x0000002eu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000002fu, 0x0000002eu, 0x00000007u, 0x00060021u, 0x00000033u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030021u, 0x00000039u, 0x00000012u, 0x00030021u, 0x0000003cu, 0x00000008u, 0x00030021u, 0x00000041u, 0x0000000fu, 0x00040017u, 0x00000044u, 0x00000008u, 0x00000003u, 0x00040020u, 0x00000045u, 0x00000007u, 0x00000044u, 0x00040020u, 0x00000046u, 0x00000007u, 0x00000008u, 0x00040017u, 0x00000047u, 0x0000000fu, 0x00000003u, 0x00050021u, 0x00000048u, 0x00000047u, 0x00000045u, 0x00000046u, 0x00090021u, 0x0000004du, 0x00000002u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00040020u, 0x00000056u, 0x00000007u, 0x00000011u, 0x00040021u, 0x00000057u, 0x00000008u, 0x00000056u, 0x00040021u, 0x0000005bu, 0x00000011u, 0x00000046u, 0x00040021u, 0x0000005fu, 0x00000008u, 0x00000046u, 0x0007001eu, 0x00000066u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x0000000fu, 0x00040020u, 0x00000067u, 0x00000007u, 0x00000066u, 0x00040020u, 0x00000068u, 0x00000007u, 0x00000010u, 0x00020014u, 0x00000069u, 0x00040020u, 0x0000006au, 0x00000007u, 0x00000069u, 0x00040017u, 0x0000006bu, 0x0000000fu, 0x00000002u, 0x00040020u, 0x0000006cu, 0x00000007u, 0x0000006bu, 0x000b0021u, 0x0000006du, 0x00000047u, 0x00000067u, 0x00000068u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006cu, 0x0000006au, 0x00040020u, 0x0000007bu, 0x00000007u, 0x0000000fu, 0x00110021u, 0x0000007cu, 0x00000069u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000056u, 0x0000007bu, 0x00000046u, 0x00000046u, 0x0000006au, 0x00000046u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006cu, 0x00040020u, 0x0000008du, 0x00000007u, 0x00000028u, 0x00060021u, 0x0000008eu, 0x0000000fu, 0x0000008du, 0x0000008du, 0x00000046u, 0x00070021u, 0x00000094u, 0x00000008u, 0x00000046u, 0x00000046u, 0x0000006au, 0x00000046u, 0x00050021u, 0x0000009bu, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x000000b0u, 0x00000006u, 0x00000002u, 0x00040020u, 0x000000b1u, 0x00000007u, 0x000000b0u, 0x00080021u, 0x000000b2u, 0x00000002u, 0x000000b1u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x000000bau, 0x00000002u, 0x000000b1u, 0x00000007u, 0x00040021u, 0x000000c6u, 0x00000010u, 0x0000006au, 0x00040021u, 0x000000cau, 0x00000002u, 0x00000068u, 0x00040021u, 0x000000d2u, 0x00000002u, 0x00000007u, 0x0006001eu, 0x000000d6u, 0x00000010u, 0x00000008u, 0x0000000fu, 0x0000000fu, 0x00040020u, 0x000000d7u, 0x00000007u, 0x000000d6u, 0x00070021u, 0x000000d8u, 0x00000002u, 0x00000046u, 0x00000046u, 0x00000007u, 0x000000d7u, 0x00040020u, 0x000000dfu, 0x00000007u, 0x00000009u, 0x00040021u, 0x000000e0u, 0x00000013u, 0x000000dfu, 0x00040020u, 0x000000e4u, 0x00000007u, 0x00000013u, 0x00040021u, 0x000000e5u, 0x00000010u, 0x000000e4u, 0x00040017u, 0x000000efu, 0x00000008u, 0x00000002u, 0x00040021u, 0x000000f0u, 0x000000efu, 0x00000046u, 0x00040021u, 0x000000f4u, 0x000000efu, 0x00000045u, 0x00050021u, 0x000000f8u, 0x000000efu, 0x00000045u, 0x0000006au, 0x00080021u, 0x000000fdu, 0x00000010u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x00000046u, 0x00000046u, 0x00040020u, 0x00000105u, 0x00000007u, 0x00000029u, 0x00040020u, 0x00000106u, 0x00000007u, 0x000000efu, 0x000a0021u, 0x00000107u, 0x00000002u, 0x00000105u, 0x000000dfu, 0x00000046u, 0x0000006au, 0x0000006au, 0x00000106u, 0x00000046u, 0x00070021u, 0x00000111u, 0x000000efu, 0x000000dfu, 0x000000dfu, 0x00000046u, 0x0000006au, 0x00100021u, 0x00000118u, 0x00000002u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x00000046u, 0x00000046u, 0x0000006au, 0x0000006au, 0x00000046u, 0x00000106u, 0x00000106u, 0x00000106u, 0x00000046u, 0x0000006au, 0x00040020u, 0x00000128u, 0x00000007u, 0x00000023u, 0x00050021u, 0x00000129u, 0x00000008u, 0x00000128u, 0x00000046u, 0x00050021u, 0x0000012eu, 0x000000efu, 0x00000128u, 0x00000046u, 0x00040021u, 0x00000137u, 0x00000013u, 0x00000007u, 0x00060021u, 0x0000013eu, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00070021u, 0x00000149u, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00000007u, 0x000a0021u, 0x00000150u, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00000007u, 0x00000007u, 0x00000007u, 0x0000006au, 0x00090021u, 0x0000015au, 0x00000013u, 0x00000128u, 0x00000007u, 0x000000b1u, 0x00000007u, 0x00000007u, 0x0000006au, 0x00080021u, 0x0000018fu, 0x00000008u, 0x0000006au, 0x00000046u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00060021u, 0x00000197u, 0x00000008u, 0x00000046u, 0x00000046u, 0x00000046u, 0x00090021u, 0x0000019du, 0x00000008u, 0x00000128u, 0x00000007u, 0x00000106u, 0x00000046u, 0x0000006au, 0x0000006au, 0x00040017u, 0x000001aeu, 0x00000012u, 0x00000002u, 0x00040020u, 0x000001afu, 0x00000007u, 0x000001aeu, 0x00080021u, 0x000001b0u, 0x000001aeu, 0x000001afu, 0x000001afu, 0x000001afu, 0x000001afu, 0x00000106u, 0x000c0021u, 0x000001b8u, 0x00000013u, 0x00000128u, 0x00000007u, 0x00000106u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x000000e4u, 0x00040020u, 0x000001c4u, 0x00000007u, 0x00000012u, 0x000f0021u, 0x000001c5u, 0x00000002u, 0x00000007u, 0x00000007u, 0x000001c4u, 0x00000007u, 0x00000046u, 0x00000106u, 0x00000106u, 0x00000106u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000006au, 0x00050021u, 0x000001d4u, 0x00000013u, 0x000000e4u, 0x000000e4u, 0x00040021u, 0x000001d9u, 0x00000009u, 0x000000dfu, 0x00070021u, 0x000001ddu, 0x00000013u, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000000dfu, 0x000c001eu, 0x000001e4u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000013u, 0x00000013u, 0x00000013u, 0x00000012u, 0x00000012u, 0x00040020u, 0x000001e5u, 0x00000007u, 0x000001e4u, 0x00060021u, 0x000001e6u, 0x00000009u, 0x000001e5u, 0x00000046u, 0x00000046u, 0x000c0021u, 0x000001fbu, 0x00000013u, 0x000001e5u, 0x00000068u, 0x00000068u, 0x00000046u, 0x00000046u, 0x0000006au, 0x0000006au, 0x0000006au, 0x0000007bu, 0x000a0021u, 0x00000207u, 0x00000013u, 0x000001e5u, 0x00000068u, 0x00000068u, 0x00000046u, 0x00000046u, 0x0000006au, 0x0000006au, 0x00070021u, 0x00000211u, 0x00000069u, 0x00000046u, 0x00000046u, 0x00000007u, 0x000000d7u, 0x00040020u, 0x00000218u, 0x00000006u, 0x00000011u, 0x0004003bu, 0x00000218u, 0x00000219u, 0x00000006u, 0x0004002bu, 0x00000011u, 0x0000021au, 0x00000000u, 0x000a001eu, 0x0000021bu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x0000021cu, 0x0000021bu, 0x0003001eu, 0x0000021du, 0x0000021cu, 0x00040020u, 0x0000021eu, 0x0000000cu, 0x0000021du, 0x0004003bu, 0x0000021eu, 0x0000021fu, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00000220u, 0x00000000u, 0x00040020u, 0x00000222u, 0x0000000cu, 0x0000021bu, 0x00040020u, 0x00000225u, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x0000022au, 0x00000001u, 0x0004002bu, 0x00000008u, 0x0000022du, 0x00000002u, 0x0004002bu, 0x00000008u, 0x00000230u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000233u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000236u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x00000239u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000023cu, 0x00000007u, 0x0011001eu, 0x00000241u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000011u, 0x0000000fu, 0x0000000fu, 0x00000013u, 0x0003001du, 0x00000242u, 0x00000241u, 0x0003001eu, 0x00000243u, 0x00000242u, 0x00040020u, 0x00000244u, 0x0000000cu, 0x00000243u, 0x0004003bu, 0x00000244u, 0x00000245u, 0x0000000cu, 0x00040020u, 0x00000247u, 0x0000000cu, 0x00000241u, 0x00040020u, 0x0000024au, 0x00000007u, 0x00000014u, 0x0004002bu, 0x00000008u, 0x0000025du, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000260u, 0x00000009u, 0x0004002bu, 0x00000008u, 0x00000263u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x00000266u, 0x0000000bu, 0x0004002bu, 0x00000008u, 0x00000269u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x0000026cu, 0x0000000du, 0x0004002bu, 0x00000008u, 0x0000026fu, 0x0000000eu, 0x000a001eu, 0x00000274u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000275u, 0x00000274u, 0x0003001eu, 0x00000276u, 0x00000275u, 0x00040020u, 0x00000277u, 0x0000000cu, 0x00000276u, 0x0004003bu, 0x00000277u, 0x00000278u, 0x0000000cu, 0x00040020u, 0x0000027au, 0x0000000cu, 0x00000274u, 0x00040020u, 0x0000027du, 0x00000007u, 0x00000019u, 0x0009001eu, 0x00000292u, 0x00000010u, 0x00000010u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x00000293u, 0x00000292u, 0x0003001eu, 0x00000294u, 0x00000293u, 0x00040020u, 0x00000295u, 0x0000000cu, 0x00000294u, 0x0004003bu, 0x00000295u, 0x00000296u, 0x0000000cu, 0x00040020u, 0x00000298u, 0x0000000cu, 0x00000292u, 0x00040020u, 0x0000029bu, 0x00000007u, 0x0000001eu, 0x0010001eu, 0x000002aeu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x000002afu, 0x000002aeu, 0x0003001eu, 0x000002b0u, 0x000002afu, 0x00040020u, 0x000002b1u, 0x0000000cu, 0x000002b0u, 0x0004003bu, 0x000002b1u, 0x000002b2u, 0x0000000cu, 0x00040020u, 0x000002b4u, 0x0000000cu, 0x000002aeu, 0x000b001eu, 0x000002d7u, 0x00000009u, 0x00000009u, 0x00000028u, 0x00000028u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000011u, 0x0003001du, 0x000002d8u, 0x000002d7u, 0x0003001eu, 0x000002d9u, 0x000002d8u, 0x00040020u, 0x000002dau, 0x0000000cu, 0x000002d9u, 0x0004003bu, 0x000002dau, 0x000002dbu, 0x0000000cu, 0x00040020u, 0x000002ddu, 0x0000000cu, 0x000002d7u, 0x0006001eu, 0x000002f6u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x000002f7u, 0x000002f6u, 0x0003001eu, 0x000002f8u, 0x000002f7u, 0x00040020u, 0x000002f9u, 0x0000000cu, 0x000002f8u, 0x0004003bu, 0x000002f9u, 0x000002fau, 0x0000000cu, 0x00040020u, 0x000002fcu, 0x0000000cu, 0x000002f6u, 0x00040020u, 0x000002ffu, 0x00000007u, 0x0000002eu, 0x00040017u, 0x0000030cu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000030du, 0x00000007u, 0x0000030cu, 0x0004002bu, 0x00000006u, 0x00000314u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x0000031au, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x0000032du, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000330u, 0x00000010u, 0x0004002bu, 0x00000011u, 0x00000334u, 0x00000007u, 0x0004002bu, 0x00000011u, 0x00000336u, 0x00000006u, 0x0004002bu, 0x00000011u, 0x00000338u, 0x00000020u, 0x0004002bu, 0x00000011u, 0x00000344u, 0x000001ffu, 0x0004002bu, 0x00000011u, 0x0000034bu, 0x000000ffu, 0x0006002cu, 0x00000044u, 0x00000353u, 0x00000220u, 0x00000230u, 0x00000239u, 0x0004002bu, 0x00000008u, 0x00000359u, 0x000000f8u, 0x0004002bu, 0x00000008u, 0x0000035eu, 0x000000ffu, 0x0006002cu, 0x00000044u, 0x0000035fu, 0x0000035eu, 0x0000035eu, 0x0000035eu, 0x0004002bu, 0x00000008u, 0x00000361u, 0x000000f7u, 0x0006002cu, 0x00000044u, 0x00000362u, 0x00000361u, 0x00000361u, 0x00000361u, 0x00040017u, 0x00000363u, 0x00000069u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x0000036cu, 0x0000001fu, 0x00040015u, 0x0000037bu, 0x00000008u, 0x00000001u, 0x00040017u, 0x0000037cu, 0x0000037bu, 0x00000003u, 0x0004001cu, 0x00000385u, 0x0000000fu, 0x00000330u, 0x0004002bu, 0x00000006u, 0x00000386u, 0x00000002u, 0x0004001cu, 0x00000387u, 0x00000385u, 0x00000386u, 0x0004002bu, 0x0000000fu, 0x00000388u, 0x00000000u, 0x0004002bu, 0x0000000fu, 0x00000389u, 0x00000006u, 0x0004002bu, 0x0000000fu, 0x0000038au, 0x00000001u, 0x0004002bu, 0x0000000fu, 0x0000038bu, 0x00000007u, 0x0004002bu, 0x0000000fu, 0x0000038cu, 0x00000004u, 0x0004002bu, 0x0000000fu, 0x0000038du, 0x00000002u, 0x0004002bu, 0x0000000fu, 0x0000038eu, 0x00000005u, 0x0004002bu, 0x0000000fu, 0x0000038fu, 0x00000003u, 0x0013002cu, 0x00000385u, 0x00000390u, 0x00000388u, 0x00000389u, 0x0000038au, 0x0000038bu, 0x0000038cu, 0x0000038du, 0x0000038eu, 0x0000038fu, 0x0000038fu, 0x0000038eu, 0x0000038du, 0x0000038cu, 0x0000038bu, 0x0000038au, 0x00000389u, 0x00000388u, 0x0013002cu, 0x00000385u, 0x00000391u, 0x00000388u, 0x0000038cu, 0x0000038au, 0x0000038eu, 0x0000038cu, 0x00000388u, 0x0000038eu, 0x0000038au, 0x0000038fu, 0x0000038bu, 0x0000038du, 0x00000389u, 0x0000038bu, 0x0000038fu, 0x00000389u, 0x0000038du, 0x0005002cu, 0x00000387u, 0x00000392u, 0x00000390u, 0x00000391u, 0x00040020u, 0x0000039au, 0x00000007u, 0x00000387u, 0x0004002bu, 0x00000008u, 0x000003a0u, 0x00000049u, 0x0004002bu, 0x00000008u, 0x000003dau, 0x000007ffu, 0x0004002bu, 0x00000008u, 0x000003e1u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x000003edu, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x000003f2u, 0x00000011u, 0x00040020u, 0x0000041bu, 0x00000007u, 0x00000047u, 0x0004002bu, 0x00000006u, 0x0000045cu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000464u, 0x00000003u, 0x0004002bu, 0x0000000fu, 0x0000046fu, 0x000000ffu, 0x0004002bu, 0x0000000fu, 0x000004afu, 0x0000003cu, 0x00040017u, 0x000004b6u, 0x00000012u, 0x00000003u, 0x00040020u, 0x000004b7u, 0x00000007u, 0x000004b6u, 0x00040017u, 0x000004bau, 0x00000011u, 0x00000003u, 0x0004002bu, 0x00000012u, 0x000004c8u, 0x00000001u, 0x0004002bu, 0x00000012u, 0x000004d4u, 0x00000005u, 0x0004002bu, 0x00000012u, 0x000004e5u, 0x00000002u, 0x0004002bu, 0x00000012u, 0x000004e9u, 0x000007ffu, 0x00090019u, 0x000004edu, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x000004eeu, 0x00000000u, 0x000004edu, 0x0004003bu, 0x000004eeu, 0x000004efu, 0x00000000u, 0x00040017u, 0x000004f7u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000533u, 0x0000000fu, 0x0003002au, 0x00000069u, 0x00000536u, 0x0004002bu, 0x00000008u, 0x0000054eu, 0x00008000u, 0x0004002bu, 0x00000008u, 0x00000554u, 0x00000010u, 0x00030029u, 0x00000069u, 0x00000559u, 0x0004002bu, 0x00000008u, 0x0000055au, 0x0000ffffu, 0x0004002bu, 0x00000011u, 0x000005f1u, 0x00000004u, 0x0004002bu, 0x00000011u, 0x000005f2u, 0x00000002u, 0x0007002cu, 0x00000028u, 0x000005f3u, 0x0000021au, 0x000005f1u, 0x000005f2u, 0x00000336u, 0x0004002bu, 0x00000011u, 0x000005f7u, 0x00000003u, 0x00040017u, 0x000005fbu, 0x00000069u, 0x00000004u, 0x00040020u, 0x000005fcu, 0x00000007u, 0x000005fbu, 0x0007002cu, 0x00000010u, 0x00000613u, 0x00000388u, 0x00000388u, 0x00000388u, 0x00000388u, 0x0007002cu, 0x00000010u, 0x00000614u, 0x0000038au, 0x0000038au, 0x0000038au, 0x0000038au, 0x0004002bu, 0x0000000fu, 0x00000621u, 0x00000008u, 0x0007002cu, 0x00000010u, 0x00000622u, 0x0000038au, 0x0000038du, 0x0000038cu, 0x00000621u, 0x0004002bu, 0x0000000fu, 0x00000625u, 0x00000010u, 0x0004002bu, 0x0000000fu, 0x00000626u, 0x00000020u, 0x0004002bu, 0x0000000fu, 0x00000627u, 0x00000040u, 0x0004002bu, 0x0000000fu, 0x00000628u, 0x00000080u, 0x0007002cu, 0x00000010u, 0x00000629u, 0x00000625u, 0x00000626u, 0x00000627u, 0x00000628u, 0x00040032u, 0x00000008u, 0x0000065cu, 0x00000000u, 0x00040032u, 0x00000006u, 0x00000662u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000663u, 0x00000082u, 0x00000662u, 0x0000045cu, 0x0003001du, 0x0000066bu, 0x0000000fu, 0x0003001eu, 0x0000066cu, 0x0000066bu, 0x00040020u, 0x0000066du, 0x0000000cu, 0x0000066cu, 0x0004003bu, 0x0000066du, 0x0000066eu, 0x0000000cu, 0x00040020u, 0x00000671u, 0x0000000cu, 0x0000000fu, 0x00040020u, 0x00000674u, 0x00000006u, 0x00000010u, 0x0004003bu, 0x00000674u, 0x00000675u, 0x00000006u, 0x0003001du, 0x00000679u, 0x0000000fu, 0x0003001eu, 0x0000067au, 0x00000679u, 0x00040020u, 0x0000067bu, 0x0000000cu, 0x0000067au, 0x0004003bu, 0x0000067bu, 0x0000067cu, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000683u, 0x000000c2u, 0x00000663u, 0x0000045cu, 0x00060034u, 0x00000006u, 0x00000687u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x0003001du, 0x0000068cu, 0x00000011u, 0x0003001eu, 0x0000068du, 0x0000068cu, 0x00040020u, 0x0000068eu, 0x0000000cu, 0x0000068du, 0x0004003bu, 0x0000068eu, 0x0000068fu, 0x0000000cu, 0x00040020u, 0x00000692u, 0x0000000cu, 0x00000011u, 0x0004002bu, 0x00000006u, 0x0000069eu, 0x000000f8u, 0x00060034u, 0x00000006u, 0x000006b4u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x0004002bu, 0x00000006u, 0x000006c3u, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000006cbu, 0x000000c2u, 0x00000663u, 0x00000386u, 0x00060034u, 0x00000006u, 0x000006cfu, 0x000000c2u, 0x00000662u, 0x0000022du, 0x0003001du, 0x000006d4u, 0x00000006u, 0x0003001eu, 0x000006d5u, 0x000006d4u, 0x00040020u, 0x000006d6u, 0x0000000cu, 0x000006d5u, 0x0004003bu, 0x000006d6u, 0x000006d7u, 0x0000000cu, 0x00040020u, 0x000006d9u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000006deu, 0x00000018u, 0x0007002cu, 0x000004f7u, 0x000006dfu, 0x000006deu, 0x00000330u, 0x00000314u, 0x0000032du, 0x0007002cu, 0x000004f7u, 0x000006e1u, 0x000006c3u, 0x000006c3u, 0x000006c3u, 0x000006c3u, 0x00040020u, 0x000006e9u, 0x00000006u, 0x0000000fu, 0x0004003bu, 0x000006e9u, 0x000006eau, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000006f7u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000704u, 0x00000004u, 0x0004003bu, 0x00000218u, 0x00000708u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000731u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000737u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000742u, 0x00000007u, 0x00040020u, 0x00000754u, 0x00000006u, 0x00000069u, 0x0004003bu, 0x00000754u, 0x00000755u, 0x00000006u, 0x00060034u, 0x00000006u, 0x00000759u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00040032u, 0x00000008u, 0x00000788u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00000789u, 0x000000c7u, 0x00000788u, 0x0000022au, 0x00060034u, 0x00000069u, 0x0000078au, 0x000000abu, 0x00000789u, 0x00000220u, 0x00060034u, 0x00000008u, 0x0000078bu, 0x000000c3u, 0x00000788u, 0x0000022au, 0x00060034u, 0x00000069u, 0x0000078cu, 0x000000aau, 0x0000078bu, 0x00000220u, 0x00060034u, 0x00000069u, 0x0000078du, 0x000000a7u, 0x0000078au, 0x0000078cu, 0x0004002bu, 0x00000006u, 0x00000790u, 0x00000048u, 0x00060034u, 0x00000006u, 0x000007bbu, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00040020u, 0x000007bfu, 0x00000007u, 0x000004f7u, 0x00060034u, 0x00000006u, 0x000007eau, 0x000000c2u, 0x00000662u, 0x0000045cu, 0x0004002bu, 0x00000011u, 0x000007ecu, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x000007f2u, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00060034u, 0x00000006u, 0x00000811u, 0x000000c2u, 0x00000662u, 0x0000045cu, 0x00060034u, 0x00000006u, 0x00000818u, 0x000000c2u, 0x00000662u, 0x0000022du, 0x00060034u, 0x00000006u, 0x0000084cu, 0x000000c2u, 0x00000662u, 0x00000386u, 0x0004002bu, 0x00000006u, 0x0000084eu, 0xffffffffu, 0x00030031u, 0x00000069u, 0x00000852u, 0x00050034u, 0x00000069u, 0x00000853u, 0x000000a8u, 0x00000852u, 0x0004003bu, 0x00000754u, 0x00000856u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000085du, 0x000000c2u, 0x00000662u, 0x0000022au, 0x00060034u, 0x00000006u, 0x00000874u, 0x000000c2u, 0x00000662u, 0x0000045cu, 0x00040017u, 0x0000087bu, 0x00000069u, 0x00000002u, 0x00060034u, 0x00000008u, 0x00000882u, 0x000000c4u, 0x0000022au, 0x0000078bu, 0x00060034u, 0x00000008u, 0x00000883u, 0x00000082u, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000006u, 0x00000884u, 0x00000080u, 0x00000883u, 0x0000032du, 0x00060034u, 0x00000006u, 0x0000088du, 0x00000080u, 0x00000882u, 0x0000032du, 0x00040020u, 0x0000089du, 0x00000006u, 0x00000006u, 0x0004003bu, 0x0000089du, 0x0000089eu, 0x00000006u, 0x00060034u, 0x00000008u, 0x000008e5u, 0x00000084u, 0x00000882u, 0x00000882u, 0x00060034u, 0x00000006u, 0x000008e6u, 0x00000080u, 0x000008e5u, 0x0000032du, 0x00060034u, 0x00000006u, 0x000008e7u, 0x000000c2u, 0x00000662u, 0x0000022du, 0x00060034u, 0x00000006u, 0x000008e8u, 0x00000084u, 0x000008e6u, 0x000008e7u, 0x00060034u, 0x00000008u, 0x000008fcu, 0x00000082u, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000006u, 0x000008fdu, 0x00000080u, 0x000008fcu, 0x0000032du, 0x00060034u, 0x00000006u, 0x00000906u, 0x00000080u, 0x00000882u, 0x0000032du, 0x00060034u, 0x00000069u, 0x00000928u, 0x000000abu, 0x0000078bu, 0x00000220u, 0x00060034u, 0x00000069u, 0x00000929u, 0x000000a7u, 0x0000078au, 0x00000928u, 0x0004002bu, 0x0000000fu, 0x00000938u, 0x000000e0u, 0x0006002cu, 0x00000047u, 0x00000943u, 0x00000388u, 0x00000388u, 0x00000388u, 0x0004002bu, 0x0000000fu, 0x0000094au, 0x000000f8u, 0x00060034u, 0x00000069u, 0x0000095du, 0x000000aau, 0x0000065cu, 0x00000220u, 0x0004002bu, 0x00000006u, 0x00000982u, 0x000000e0u, 0x0004002bu, 0x00000006u, 0x000009ddu, 0x0000ffffu, 0x0004002bu, 0x00000008u, 0x00000a0du, 0x000001ffu, 0x0004001cu, 0x00000a1bu, 0x0000000fu, 0x00000314u, 0x0005001eu, 0x00000a1cu, 0x00000010u, 0x00000010u, 0x00000a1bu, 0x0003001du, 0x00000a1du, 0x00000a1cu, 0x0003001eu, 0x00000a1eu, 0x00000a1du, 0x00040020u, 0x00000a1fu, 0x0000000cu, 0x00000a1eu, 0x0004003bu, 0x00000a1fu, 0x00000a20u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000a44u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x00000a4au, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000a50u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000a56u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x00000b01u, 0x00000080u, 0x0007002cu, 0x00000009u, 0x00000b0bu, 0x00000220u, 0x00000220u, 0x00000220u, 0x00000220u, 0x0007002cu, 0x00000009u, 0x00000b0cu, 0x0000035eu, 0x0000035eu, 0x0000035eu, 0x0000035eu, 0x00040017u, 0x00000b15u, 0x0000037bu, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000b21u, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000b37u, 0x00003fffu, 0x0004001cu, 0x00000b3du, 0x000001aeu, 0x00000a4au, 0x0004002bu, 0x00000012u, 0x00000b3eu, 0x00004000u, 0x0004002bu, 0x00000012u, 0x00000b3fu, 0xfffffc10u, 0x0005002cu, 0x000001aeu, 0x00000b40u, 0x00000b3eu, 0x00000b3fu, 0x0004002bu, 0x00000012u, 0x00000b41u, 0x00003f04u, 0x0004002bu, 0x00000012u, 0x00000b42u, 0xfffffc30u, 0x0005002cu, 0x000001aeu, 0x00000b43u, 0x00000b41u, 0x00000b42u, 0x0004002bu, 0x00000012u, 0x00000b44u, 0x00003e10u, 0x0004002bu, 0x00000012u, 0x00000b45u, 0xfffffc48u, 0x0005002cu, 0x000001aeu, 0x00000b46u, 0x00000b44u, 0x00000b45u, 0x0004002bu, 0x00000012u, 0x00000b47u, 0x00003d22u, 0x0004002bu, 0x00000012u, 0x00000b48u, 0xfffffc68u, 0x0005002cu, 0x000001aeu, 0x00000b49u, 0x00000b47u, 0x00000b48u, 0x0004002bu, 0x00000012u, 0x00000b4au, 0x00003c3cu, 0x0004002bu, 0x00000012u, 0x00000b4bu, 0xfffffc84u, 0x0005002cu, 0x000001aeu, 0x00000b4cu, 0x00000b4au, 0x00000b4bu, 0x0004002bu, 0x00000012u, 0x00000b4du, 0x00003b5du, 0x0004002bu, 0x00000012u, 0x00000b4eu, 0xfffffc98u, 0x0005002cu, 0x000001aeu, 0x00000b4fu, 0x00000b4du, 0x00000b4eu, 0x0004002bu, 0x00000012u, 0x00000b50u, 0x00003a83u, 0x0004002bu, 0x00000012u, 0x00000b51u, 0xfffffcb8u, 0x0005002cu, 0x000001aeu, 0x00000b52u, 0x00000b50u, 0x00000b51u, 0x0004002bu, 0x00000012u, 0x00000b53u, 0x000039b1u, 0x0004002bu, 0x00000012u, 0x00000b54u, 0xfffffcccu, 0x0005002cu, 0x000001aeu, 0x00000b55u, 0x00000b53u, 0x00000b54u, 0x0004002bu, 0x00000012u, 0x00000b56u, 0x000038e4u, 0x0004002bu, 0x00000012u, 0x00000b57u, 0xfffffce0u, 0x0005002cu, 0x000001aeu, 0x00000b58u, 0x00000b56u, 0x00000b57u, 0x0004002bu, 0x00000012u, 0x00000b59u, 0x0000381cu, 0x0004002bu, 0x00000012u, 0x00000b5au, 0xfffffcf8u, 0x0005002cu, 0x000001aeu, 0x00000b5bu, 0x00000b59u, 0x00000b5au, 0x0004002bu, 0x00000012u, 0x00000b5cu, 0x0000375au, 0x0004002bu, 0x00000012u, 0x00000b5du, 0xfffffd0cu, 0x0005002cu, 0x000001aeu, 0x00000b5eu, 0x00000b5cu, 0x00000b5du, 0x0004002bu, 0x00000012u, 0x00000b5fu, 0x0000369du, 0x0004002bu, 0x00000012u, 0x00000b60u, 0xfffffd20u, 0x0005002cu, 0x000001aeu, 0x00000b61u, 0x00000b5fu, 0x00000b60u, 0x0004002bu, 0x00000012u, 0x00000b62u, 0x000035e5u, 0x0004002bu, 0x00000012u, 0x00000b63u, 0xfffffd34u, 0x0005002cu, 0x000001aeu, 0x00000b64u, 0x00000b62u, 0x00000b63u, 0x0004002bu, 0x00000012u, 0x00000b65u, 0x00003532u, 0x0004002bu, 0x00000012u, 0x00000b66u, 0xfffffd44u, 0x0005002cu, 0x000001aeu, 0x00000b67u, 0x00000b65u, 0x00000b66u, 0x0004002bu, 0x00000012u, 0x00000b68u, 0x00003483u, 0x0004002bu, 0x00000012u, 0x00000b69u, 0xfffffd58u, 0x0005002cu, 0x000001aeu, 0x00000b6au, 0x00000b68u, 0x00000b69u, 0x0004002bu, 0x00000012u, 0x00000b6bu, 0x000033d9u, 0x0004002bu, 0x00000012u, 0x00000b6cu, 0xfffffd68u, 0x0005002cu, 0x000001aeu, 0x00000b6du, 0x00000b6bu, 0x00000b6cu, 0x0004002bu, 0x00000012u, 0x00000b6eu, 0x00003333u, 0x0004002bu, 0x00000012u, 0x00000b6fu, 0xfffffd78u, 0x0005002cu, 0x000001aeu, 0x00000b70u, 0x00000b6eu, 0x00000b6fu, 0x0004002bu, 0x00000012u, 0x00000b71u, 0x00003291u, 0x0004002bu, 0x00000012u, 0x00000b72u, 0xfffffd8cu, 0x0005002cu, 0x000001aeu, 0x00000b73u, 0x00000b71u, 0x00000b72u, 0x0004002bu, 0x00000012u, 0x00000b74u, 0x000031f4u, 0x0004002bu, 0x00000012u, 0x00000b75u, 0xfffffd94u, 0x0005002cu, 0x000001aeu, 0x00000b76u, 0x00000b74u, 0x00000b75u, 0x0004002bu, 0x00000012u, 0x00000b77u, 0x00003159u, 0x0004002bu, 0x00000012u, 0x00000b78u, 0xfffffda8u, 0x0005002cu, 0x000001aeu, 0x00000b79u, 0x00000b77u, 0x00000b78u, 0x0004002bu, 0x00000012u, 0x00000b7au, 0x000030c3u, 0x0004002bu, 0x00000012u, 0x00000b7bu, 0xfffffdb4u, 0x0005002cu, 0x000001aeu, 0x00000b7cu, 0x00000b7au, 0x00000b7bu, 0x0004002bu, 0x00000012u, 0x00000b7du, 0x00003030u, 0x0004002bu, 0x00000012u, 0x00000b7eu, 0xfffffdc4u, 0x0005002cu, 0x000001aeu, 0x00000b7fu, 0x00000b7du, 0x00000b7eu, 0x0004002bu, 0x00000012u, 0x00000b80u, 0x00002fa1u, 0x0004002bu, 0x00000012u, 0x00000b81u, 0xfffffdd0u, 0x0005002cu, 0x000001aeu, 0x00000b82u, 0x00000b80u, 0x00000b81u, 0x0004002bu, 0x00000012u, 0x00000b83u, 0x00002f15u, 0x0004002bu, 0x00000012u, 0x00000b84u, 0xfffffddcu, 0x0005002cu, 0x000001aeu, 0x00000b85u, 0x00000b83u, 0x00000b84u, 0x0004002bu, 0x00000012u, 0x00000b86u, 0x00002e8cu, 0x0004002bu, 0x00000012u, 0x00000b87u, 0xfffffde8u, 0x0005002cu, 0x000001aeu, 0x00000b88u, 0x00000b86u, 0x00000b87u, 0x0004002bu, 0x00000012u, 0x00000b89u, 0x00002e06u, 0x0004002bu, 0x00000012u, 0x00000b8au, 0xfffffdf4u, 0x0005002cu, 0x000001aeu, 0x00000b8bu, 0x00000b89u, 0x00000b8au, 0x0004002bu, 0x00000012u, 0x00000b8cu, 0x00002d83u, 0x0004002bu, 0x00000012u, 0x00000b8du, 0xfffffe00u, 0x0005002cu, 0x000001aeu, 0x00000b8eu, 0x00000b8cu, 0x00000b8du, 0x0004002bu, 0x00000012u, 0x00000b8fu, 0x00002d03u, 0x0004002bu, 0x00000012u, 0x00000b90u, 0xfffffe0cu, 0x0005002cu, 0x000001aeu, 0x00000b91u, 0x00000b8fu, 0x00000b90u, 0x0004002bu, 0x00000012u, 0x00000b92u, 0x00002c86u, 0x0004002bu, 0x00000012u, 0x00000b93u, 0xfffffe14u, 0x0005002cu, 0x000001aeu, 0x00000b94u, 0x00000b92u, 0x00000b93u, 0x0004002bu, 0x00000012u, 0x00000b95u, 0x00002c0bu, 0x0004002bu, 0x00000012u, 0x00000b96u, 0xfffffe20u, 0x0005002cu, 0x000001aeu, 0x00000b97u, 0x00000b95u, 0x00000b96u, 0x0004002bu, 0x00000012u, 0x00000b98u, 0x00002b93u, 0x0004002bu, 0x00000012u, 0x00000b99u, 0xfffffe2cu, 0x0005002cu, 0x000001aeu, 0x00000b9au, 0x00000b98u, 0x00000b99u, 0x0004002bu, 0x00000012u, 0x00000b9bu, 0x00002b1eu, 0x0004002bu, 0x00000012u, 0x00000b9cu, 0xfffffe34u, 0x0005002cu, 0x000001aeu, 0x00000b9du, 0x00000b9bu, 0x00000b9cu, 0x0004002bu, 0x00000012u, 0x00000b9eu, 0x00002aabu, 0x0004002bu, 0x00000012u, 0x00000b9fu, 0xfffffe3cu, 0x0005002cu, 0x000001aeu, 0x00000ba0u, 0x00000b9eu, 0x00000b9fu, 0x0004002bu, 0x00000012u, 0x00000ba1u, 0x00002a3au, 0x0004002bu, 0x00000012u, 0x00000ba2u, 0xfffffe48u, 0x0005002cu, 0x000001aeu, 0x00000ba3u, 0x00000ba1u, 0x00000ba2u, 0x0004002bu, 0x00000012u, 0x00000ba4u, 0x000029ccu, 0x0004002bu, 0x00000012u, 0x00000ba5u, 0xfffffe50u, 0x0005002cu, 0x000001aeu, 0x00000ba6u, 0x00000ba4u, 0x00000ba5u, 0x0004002bu, 0x00000012u, 0x00000ba7u, 0x00002960u, 0x0004002bu, 0x00000012u, 0x00000ba8u, 0xfffffe58u, 0x0005002cu, 0x000001aeu, 0x00000ba9u, 0x00000ba7u, 0x00000ba8u, 0x0004002bu, 0x00000012u, 0x00000baau, 0x000028f6u, 0x0004002bu, 0x00000012u, 0x00000babu, 0xfffffe60u, 0x0005002cu, 0x000001aeu, 0x00000bacu, 0x00000baau, 0x00000babu, 0x0004002bu, 0x00000012u, 0x00000badu, 0x0000288eu, 0x0004002bu, 0x00000012u, 0x00000baeu, 0xfffffe68u, 0x0005002cu, 0x000001aeu, 0x00000bafu, 0x00000badu, 0x00000baeu, 0x0004002bu, 0x00000012u, 0x00000bb0u, 0x00002828u, 0x0004002bu, 0x00000012u, 0x00000bb1u, 0xfffffe70u, 0x0005002cu, 0x000001aeu, 0x00000bb2u, 0x00000bb0u, 0x00000bb1u, 0x0004002bu, 0x00000012u, 0x00000bb3u, 0x000027c4u, 0x0004002bu, 0x00000012u, 0x00000bb4u, 0xfffffe78u, 0x0005002cu, 0x000001aeu, 0x00000bb5u, 0x00000bb3u, 0x00000bb4u, 0x0004002bu, 0x00000012u, 0x00000bb6u, 0x00002762u, 0x0004002bu, 0x00000012u, 0x00000bb7u, 0xfffffe80u, 0x0005002cu, 0x000001aeu, 0x00000bb8u, 0x00000bb6u, 0x00000bb7u, 0x0004002bu, 0x00000012u, 0x00000bb9u, 0x00002702u, 0x0004002bu, 0x00000012u, 0x00000bbau, 0xfffffe88u, 0x0005002cu, 0x000001aeu, 0x00000bbbu, 0x00000bb9u, 0x00000bbau, 0x0004002bu, 0x00000012u, 0x00000bbcu, 0x000026a4u, 0x0004002bu, 0x00000012u, 0x00000bbdu, 0xfffffe90u, 0x0005002cu, 0x000001aeu, 0x00000bbeu, 0x00000bbcu, 0x00000bbdu, 0x0004002bu, 0x00000012u, 0x00000bbfu, 0x00002648u, 0x0004002bu, 0x00000012u, 0x00000bc0u, 0xfffffe94u, 0x0005002cu, 0x000001aeu, 0x00000bc1u, 0x00000bbfu, 0x00000bc0u, 0x0004002bu, 0x00000012u, 0x00000bc2u, 0x000025edu, 0x0004002bu, 0x00000012u, 0x00000bc3u, 0xfffffe9cu, 0x0005002cu, 0x000001aeu, 0x00000bc4u, 0x00000bc2u, 0x00000bc3u, 0x0004002bu, 0x00000012u, 0x00000bc5u, 0x00002594u, 0x0004002bu, 0x00000012u, 0x00000bc6u, 0xfffffea4u, 0x0005002cu, 0x000001aeu, 0x00000bc7u, 0x00000bc5u, 0x00000bc6u, 0x0004002bu, 0x00000012u, 0x00000bc8u, 0x0000253du, 0x0004002bu, 0x00000012u, 0x00000bc9u, 0xfffffea8u, 0x0005002cu, 0x000001aeu, 0x00000bcau, 0x00000bc8u, 0x00000bc9u, 0x0004002bu, 0x00000012u, 0x00000bcbu, 0x000024e7u, 0x0004002bu, 0x00000012u, 0x00000bccu, 0xfffffeacu, 0x0005002cu, 0x000001aeu, 0x00000bcdu, 0x00000bcbu, 0x00000bccu, 0x0004002bu, 0x00000012u, 0x00000bceu, 0x00002492u, 0x0004002bu, 0x00000012u, 0x00000bcfu, 0xfffffeb4u, 0x0005002cu, 0x000001aeu, 0x00000bd0u, 0x00000bceu, 0x00000bcfu, 0x0004002bu, 0x00000012u, 0x00000bd1u, 0x0000243fu, 0x0004002bu, 0x00000012u, 0x00000bd2u, 0xfffffebcu, 0x0005002cu, 0x000001aeu, 0x00000bd3u, 0x00000bd1u, 0x00000bd2u, 0x0004002bu, 0x00000012u, 0x00000bd4u, 0x000023eeu, 0x0004002bu, 0x00000012u, 0x00000bd5u, 0xfffffec0u, 0x0005002cu, 0x000001aeu, 0x00000bd6u, 0x00000bd4u, 0x00000bd5u, 0x0004002bu, 0x00000012u, 0x00000bd7u, 0x0000239eu, 0x0004002bu, 0x00000012u, 0x00000bd8u, 0xfffffec4u, 0x0005002cu, 0x000001aeu, 0x00000bd9u, 0x00000bd7u, 0x00000bd8u, 0x0004002bu, 0x00000012u, 0x00000bdau, 0x0000234fu, 0x0004002bu, 0x00000012u, 0x00000bdbu, 0xfffffeccu, 0x0005002cu, 0x000001aeu, 0x00000bdcu, 0x00000bdau, 0x00000bdbu, 0x0004002bu, 0x00000012u, 0x00000bddu, 0x00002302u, 0x0004002bu, 0x00000012u, 0x00000bdeu, 0xfffffed0u, 0x0005002cu, 0x000001aeu, 0x00000bdfu, 0x00000bddu, 0x00000bdeu, 0x0004002bu, 0x00000012u, 0x00000be0u, 0x000022b6u, 0x0004002bu, 0x00000012u, 0x00000be1u, 0xfffffed8u, 0x0005002cu, 0x000001aeu, 0x00000be2u, 0x00000be0u, 0x00000be1u, 0x0004002bu, 0x00000012u, 0x00000be3u, 0x0000226cu, 0x0005002cu, 0x000001aeu, 0x00000be4u, 0x00000be3u, 0x00000be1u, 0x0004002bu, 0x00000012u, 0x00000be5u, 0x00002222u, 0x0004002bu, 0x00000012u, 0x00000be6u, 0xfffffee0u, 0x0005002cu, 0x000001aeu, 0x00000be7u, 0x00000be5u, 0x00000be6u, 0x0004002bu, 0x00000012u, 0x00000be8u, 0x000021dau, 0x0004002bu, 0x00000012u, 0x00000be9u, 0xfffffee4u, 0x0005002cu, 0x000001aeu, 0x00000beau, 0x00000be8u, 0x00000be9u, 0x0004002bu, 0x00000012u, 0x00000bebu, 0x00002193u, 0x0004002bu, 0x00000012u, 0x00000becu, 0xfffffee8u, 0x0005002cu, 0x000001aeu, 0x00000bedu, 0x00000bebu, 0x00000becu, 0x0004002bu, 0x00000012u, 0x00000beeu, 0x0000214du, 0x0004002bu, 0x00000012u, 0x00000befu, 0xfffffeecu, 0x0005002cu, 0x000001aeu, 0x00000bf0u, 0x00000beeu, 0x00000befu, 0x0004002bu, 0x00000012u, 0x00000bf1u, 0x00002108u, 0x0004002bu, 0x00000012u, 0x00000bf2u, 0xfffffef4u, 0x0005002cu, 0x000001aeu, 0x00000bf3u, 0x00000bf1u, 0x00000bf2u, 0x0004002bu, 0x00000012u, 0x00000bf4u, 0x000020c5u, 0x0005002cu, 0x000001aeu, 0x00000bf5u, 0x00000bf4u, 0x00000bf2u, 0x0004002bu, 0x00000012u, 0x00000bf6u, 0x00002082u, 0x0004002bu, 0x00000012u, 0x00000bf7u, 0xfffffefcu, 0x0005002cu, 0x000001aeu, 0x00000bf8u, 0x00000bf6u, 0x00000bf7u, 0x0004002bu, 0x00000012u, 0x00000bf9u, 0x00002041u, 0x0005002cu, 0x000001aeu, 0x00000bfau, 0x00000bf9u, 0x00000bf7u, 0x0043002cu, 0x00000b3du, 0x00000bfbu, 0x00000b40u, 0x00000b43u, 0x00000b46u, 0x00000b49u, 0x00000b4cu, 0x00000b4fu, 0x00000b52u, 0x00000b55u, 0x00000b58u, 0x00000b5bu, 0x00000b5eu, 0x00000b61u, 0x00000b64u, 0x00000b67u, 0x00000b6au, 0x00000b6du, 0x00000b70u, 0x00000b73u, 0x00000b76u, 0x00000b79u, 0x00000b7cu, 0x00000b7fu, 0x00000b82u, 0x00000b85u, 0x00000b88u, 0x00000b8bu, 0x00000b8eu, 0x00000b91u, 0x00000b94u, 0x00000b97u, 0x00000b9au, 0x00000b9du, 0x00000ba0u, 0x00000ba3u, 0x00000ba6u, 0x00000ba9u, 0x00000bacu, 0x00000bafu, 0x00000bb2u, 0x00000bb5u, 0x00000bb8u, 0x00000bbbu, 0x00000bbeu, 0x00000bc1u, 0x00000bc4u, 0x00000bc7u, 0x00000bcau, 0x00000bcdu, 0x00000bd0u, 0x00000bd3u, 0x00000bd6u, 0x00000bd9u, 0x00000bdcu, 0x00000bdfu, 0x00000be2u, 0x00000be4u, 0x00000be7u, 0x00000beau, 0x00000bedu, 0x00000bf0u, 0x00000bf3u, 0x00000bf5u, 0x00000bf8u, 0x00000bfau, 0x00040020u, 0x00000bfeu, 0x00000007u, 0x00000b3du, 0x0004002bu, 0x00000008u, 0x00000c1bu, 0x00007fffu, 0x0004002bu, 0x00000008u, 0x00000c2du, 0x3fffffffu, 0x0004002bu, 0x00000008u, 0x00000c2eu, 0x20000000u, 0x0005002cu, 0x000000efu, 0x00000c47u, 0x00000220u, 0x00000220u, 0x0004002bu, 0x00000008u, 0x00000c60u, 0xffff8000u, 0x0005002cu, 0x000000efu, 0x00000c7au, 0x00000c1bu, 0x00000c1bu, 0x0004002bu, 0x00000008u, 0x00000c7cu, 0xffff0000u, 0x0005002cu, 0x000000efu, 0x00000c7du, 0x00000c7cu, 0x00000c7cu, 0x0005002cu, 0x000000efu, 0x00000c7eu, 0x0000055au, 0x0000055au, 0x0004002bu, 0x00000008u, 0x00000c83u, 0xffffffe0u, 0x00060034u, 0x00000008u, 0x00000ca1u, 0x00000080u, 0x0000022du, 0x0000078bu, 0x00050034u, 0x00000012u, 0x00000ca2u, 0x00000072u, 0x00000ca1u, 0x00060034u, 0x00000008u, 0x00000cb7u, 0x00000080u, 0x00000233u, 0x0000078bu, 0x00050034u, 0x00000012u, 0x00000cb8u, 0x00000072u, 0x00000cb7u, 0x0006001eu, 0x00000cd4u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x00000cd5u, 0x00000cd4u, 0x00040020u, 0x00000cd6u, 0x00000002u, 0x00000cd5u, 0x0004003bu, 0x00000cd6u, 0x00000cd7u, 0x00000002u, 0x00040020u, 0x00000cd8u, 0x00000002u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000ce5u, 0xffffffffu, 0x00060034u, 0x00000069u, 0x00000d44u, 0x000000adu, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000008u, 0x00000d9au, 0x00000082u, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000008u, 0x00000daeu, 0x00000080u, 0x0000022du, 0x0000078bu, 0x00060034u, 0x00000008u, 0x00000dbeu, 0x00000080u, 0x00000236u, 0x0000078bu, 0x0005002cu, 0x000000efu, 0x00000de7u, 0x00000220u, 0x0000022au, 0x0004002bu, 0x00000006u, 0x00000e33u, 0x0000000bu, 0x0006002cu, 0x0000030cu, 0x00000e34u, 0x00000e33u, 0x000006f7u, 0x0000045cu, 0x0004002bu, 0x00000006u, 0x00000e36u, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000e73u, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x00000e87u, 0x00001000u, 0x0004001cu, 0x00000e88u, 0x0000000fu, 0x00000e87u, 0x0003001eu, 0x00000e89u, 0x00000e88u, 0x0003001du, 0x00000e8au, 0x00000e89u, 0x0003001eu, 0x00000e8bu, 0x00000e8au, 0x00040020u, 0x00000e8cu, 0x0000000cu, 0x00000e8bu, 0x0004003bu, 0x00000e8cu, 0x00000e8du, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000e96u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000eceu, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000f2bu, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000f54u, 0x00000800u, 0x0004001cu, 0x00000f55u, 0x00000011u, 0x00000f54u, 0x0003001eu, 0x00000f56u, 0x00000f55u, 0x0003001du, 0x00000f57u, 0x00000f56u, 0x0003001eu, 0x00000f58u, 0x00000f57u, 0x00040020u, 0x00000f59u, 0x0000000cu, 0x00000f58u, 0x0004003bu, 0x00000f59u, 0x00000f5au, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000f5cu, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000ffcu, 0xfffffffcu, 0x0004002bu, 0x00000011u, 0x000010b1u, 0x00000008u, 0x0004002bu, 0x00000012u, 0x000010bdu, 0x00000080u, 0x0004002bu, 0x00000008u, 0x0000115du, 0x00000020u, 0x0004002bu, 0x00000008u, 0x00001174u, 0x000003ffu, 0x0004002bu, 0x00000006u, 0x000011e7u, 0x00001fffu, 0x0004002bu, 0x00000006u, 0x00001293u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x000012b8u, 0x00000400u, 0x0004002bu, 0x00000012u, 0x00001340u, 0x00000010u, 0x0004002bu, 0x00000008u, 0x000013b2u, 0xffffff01u, 0x0005002cu, 0x000000efu, 0x000013bcu, 0x00000554u, 0x00000554u, 0x0004002bu, 0x00000012u, 0x0000187du, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x0000189cu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x000018b8u, 0xffffff00u, 0x0004002bu, 0x00000008u, 0x00001990u, 0x00000100u, 0x0006002cu, 0x00000044u, 0x00001991u, 0x00001990u, 0x00001990u, 0x00001990u, 0x00060034u, 0x00000008u, 0x00001bcdu, 0x00000082u, 0x00000882u, 0x0000022au, 0x000d001eu, 0x00001bd5u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000012u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x00001bd6u, 0x00001bd5u, 0x0003001eu, 0x00001bd7u, 0x00001bd6u, 0x00040020u, 0x00001bd8u, 0x0000000cu, 0x00001bd7u, 0x0004003bu, 0x00001bd8u, 0x00001bd9u, 0x0000000cu, 0x00060034u, 0x00000069u, 0x00001bdeu, 0x000000adu, 0x00000882u, 0x0000022au, 0x00060034u, 0x00000008u, 0x00001be6u, 0x00000082u, 0x00000882u, 0x0000022au, 0x00050034u, 0x00000008u, 0x00001be7u, 0x000000c8u, 0x00001be6u, 0x00060034u, 0x00000008u, 0x00001beau, 0x00000082u, 0x00000882u, 0x0000022au, 0x00050034u, 0x00000008u, 0x00001bebu, 0x000000c8u, 0x00001beau, 0x00040020u, 0x00001c0cu, 0x0000000cu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x00001c36u, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00001c47u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00001c64u, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00001c69u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00001c6eu, 0x00010000u, 0x0004002bu, 0x00000006u, 0x00001c73u, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00001c78u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00001c7du, 0x00080000u, 0x0004002bu, 0x00000006u, 0x00001c82u, 0x00200000u, 0x0004002bu, 0x00000006u, 0x00001c87u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x00001c8cu, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00001c91u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x00001c96u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x00001c9au, 0x10000000u, 0x00040020u, 0x00001ca4u, 0x00000002u, 0x00000006u, 0x00060034u, 0x00000069u, 0x00001d53u, 0x000000adu, 0x00000882u, 0x0000022au, 0x0004002bu, 0x00000012u, 0x00001dbeu, 0x00000000u, 0x0007002cu, 0x00000013u, 0x00001dbfu, 0x00001dbeu, 0x00001dbeu, 0x00001dbeu, 0x00001dbeu, 0x00040020u, 0x00001e14u, 0x0000000cu, 0x00000009u, 0x00040020u, 0x00001f2cu, 0x00000001u, 0x0000030cu, 0x0004003bu, 0x00001f2cu, 0x00001f2du, 0x00000001u, 0x00040020u, 0x00001f2eu, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00001f2cu, 0x00001f37u, 0x00000001u, 0x00040032u, 0x00000008u, 0x00001f40u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00001f41u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00001f42u, 0x00000001u, 0x00060033u, 0x0000030cu, 0x00001f43u, 0x00001f41u, 0x00001f42u, 0x0000045cu, 0x00060034u, 0x00000006u, 0x00001f44u, 0x00000051u, 0x00001f43u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00001f45u, 0x00000080u, 0x00001f44u, 0x0000032du, 0x00060034u, 0x00000008u, 0x00001f46u, 0x00000087u, 0x00001f40u, 0x00001f45u, 0x00040032u, 0x00000008u, 0x00001f4bu, 0x00000100u, 0x00060034u, 0x00000008u, 0x00001f4cu, 0x00000087u, 0x00001f4bu, 0x0000115du, 0x0003001du, 0x00001f4fu, 0x00000006u, 0x0003001eu, 0x00001f50u, 0x00001f4fu, 0x00040020u, 0x00001f51u, 0x0000000cu, 0x00001f50u, 0x0004003bu, 0x00001f51u, 0x00001f52u, 0x0000000cu, 0x0007001eu, 0x00001f56u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00001f57u, 0x00000009u, 0x00001f56u, 0x0004003bu, 0x00001f57u, 0x00001f58u, 0x00000009u, 0x00040020u, 0x00001f59u, 0x00000009u, 0x00000006u, 0x0003001du, 0x00001f83u, 0x00000006u, 0x0003001eu, 0x00001f84u, 0x00001f83u, 0x00040020u, 0x00001f85u, 0x0000000cu, 0x00001f84u, 0x0004003bu, 0x00001f85u, 0x00001f86u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00001fb2u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x00001fe6u, 0x00000200u, 0x0004002bu, 0x00000008u, 0x00001fe7u, 0x00000800u, 0x0004002bu, 0x00000008u, 0x00001fe8u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x00001fe9u, 0x00002000u, 0x0004002bu, 0x00000008u, 0x00001feau, 0x00010000u, 0x0004002bu, 0x00000008u, 0x00001febu, 0x00080000u, 0x0004002bu, 0x00000008u, 0x00001fecu, 0x00100000u, 0x0004002bu, 0x00000008u, 0x00001fedu, 0x00200000u, 0x0004002bu, 0x00000008u, 0x00001feeu, 0x00400000u, 0x0004002bu, 0x00000008u, 0x00001fefu, 0x00800000u, 0x0004002bu, 0x00000008u, 0x00001ff0u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x00001ff1u, 0x0000001au, 0x0004002bu, 0x00000008u, 0x00001ff2u, 0x10000000u, 0x0004002bu, 0x00000008u, 0x00001ff3u, 0x40000000u, 0x0003001du, 0x00001ff4u, 0x00000009u, 0x0003001eu, 0x00001ff5u, 0x00001ff4u, 0x00040020u, 0x00001ff6u, 0x0000000cu, 0x00001ff5u, 0x0004003bu, 0x00001ff6u, 0x00001ff7u, 0x0000000cu, 0x0003002eu, 0x00000010u, 0x00006c10u, 0x0003002eu, 0x00000006u, 0x00006c13u, 0x0003002eu, 0x0000000fu, 0x00006c16u, 0x0003002eu, 0x00000013u, 0x00006c17u, 0x0003002eu, 0x00000012u, 0x00006c5du, 0x0003002eu, 0x00000008u, 0x000071bfu, 0x0003002eu, 0x00000009u, 0x000071dfu, 0x0003002eu, 0x00000028u, 0x000071f5u, 0x0003002eu, 0x00000011u, 0x000071f8u, 0x00030001u, 0x00000044u, 0x00007f62u, 0x00030001u, 0x000000efu, 0x00008038u, 0x00030001u, 0x00000013u, 0x00008760u, 0x00030001u, 0x00000069u, 0x00009266u, 0x00030001u, 0x00000012u, 0x0000ab93u, 0x00030001u, 0x0000000fu, 0x0000bf29u, 0x00030001u, 0x00000008u, 0x0000c197u, 0x00030001u, 0x00000010u, 0x0000c2b9u, 0x00030001u, 0x00000047u, 0x0000c7e1u, 0x00030001u, 0x0000000fu, 0x0000eeceu, 0x00030001u, 0x00000047u, 0x0000eee4u, 0x00030001u, 0x00000047u, 0x0000ef0bu, 0x00030001u, 0x00000069u, 0x0000ef4au, 0x00030001u, 0x00000069u, 0x0000ef4bu, 0x00030001u, 0x00000044u, 0x0000ef50u, 0x00030001u, 0x00000013u, 0x0000effcu, 0x00030001u, 0x00000069u, 0x0000f1ccu, 0x00030001u, 0x00000013u, 0x0000f222u, 0x00030001u, 0x00000012u, 0x0000f2a6u, 0x0006002cu, 0x0000030cu, 0x0000f399u, 0x0000069eu, 0x0000069eu, 0x0000069eu, 0x0005002cu, 0x000000b0u, 0x0000f39au, 0x00000464u, 0x00000464u, 0x0006002cu, 0x0000030cu, 0x0000f39bu, 0x00000314u, 0x00000314u, 0x00000314u, 0x0006002cu, 0x0000030cu, 0x0000f39cu, 0x0000031au, 0x0000031au, 0x0000031au, 0x0006002cu, 0x00000044u, 0x0000f39du, 0x00000c83u, 0x00000c83u, 0x00000c83u, 0x0006002cu, 0x00000044u, 0x0000f39eu, 0x00000554u, 0x00000554u, 0x00000554u, 0x0007002cu, 0x00000009u, 0x0000f39fu, 0x00000c83u, 0x00000c83u, 0x00000c83u, 0x00000c83u, 0x0007002cu, 0x00000009u, 0x0000f3a0u, 0x0000026fu, 0x0000026fu, 0x0000026fu, 0x0000026fu, 0x0007002cu, 0x00000009u, 0x0000f3a1u, 0x00000b01u, 0x00000b01u, 0x00000b01u, 0x00000b01u, 0x0005002cu, 0x000000efu, 0x0000f3a2u, 0x0000022au, 0x0000022au, 0x0006002cu, 0x00000044u, 0x0000f3a3u, 0x00000c60u, 0x00000c60u, 0x00000c60u, 0x0005002cu, 0x000000efu, 0x0000f3a4u, 0x00000236u, 0x00000236u, 0x0005002cu, 0x000000efu, 0x0000f3a5u, 0x0000036cu, 0x0000036cu, 0x0005002cu, 0x000000b0u, 0x0000f3a6u, 0x000011e7u, 0x000011e7u, 0x0005002cu, 0x000000b0u, 0x0000f3a7u, 0x00000386u, 0x00000386u, 0x0006002cu, 0x0000030cu, 0x0000f3a8u, 0x00000e36u, 0x00000e36u, 0x00000e36u, 0x0006002cu, 0x0000030cu, 0x0000f3a9u, 0x00000464u, 0x00000464u, 0x00000464u, 0x0006002cu, 0x0000030cu, 0x0000f3aau, 0x00000386u, 0x00000386u, 0x00000386u, 0x0007002cu, 0x00000013u, 0x0000f3abu, 0x000004e5u, 0x000004e5u, 0x000004e5u, 0x000004e5u, 0x0007002cu, 0x00000009u, 0x0000f3acu, 0x0000025du, 0x0000025du, 0x0000025du, 0x0000025du, 0x0005002cu, 0x000000efu, 0x0000f3adu, 0x0000115du, 0x0000115du, 0x0005002cu, 0x000001aeu, 0x0000f3aeu, 0x00001340u, 0x00001340u, 0x0005002cu, 0x000001aeu, 0x0000f3afu, 0x000004d4u, 0x000004d4u, 0x0007002cu, 0x00000013u, 0x0000f3b0u, 0x00001340u, 0x00001340u, 0x00001340u, 0x00001340u, 0x0007002cu, 0x00000013u, 0x0000f3b1u, 0x000004d4u, 0x000004d4u, 0x000004d4u, 0x000004d4u, 0x0006002cu, 0x00000047u, 0x0000f3b2u, 0x0000094au, 0x0000094au, 0x0000094au, 0x0006002cu, 0x00000044u, 0x0000f3b3u, 0x0000023cu, 0x0000023cu, 0x0000023cu, 0x0006002cu, 0x00000044u, 0x0000f3b4u, 0x00000359u, 0x00000359u, 0x00000359u, 0x0006002cu, 0x00000044u, 0x0000f3b5u, 0x0000025du, 0x0000025du, 0x0000025du, 0x0006002cu, 0x00000044u, 0x0000f3b6u, 0x0000036cu, 0x0000036cu, 0x0000036cu, 0x0006002cu, 0x000004b6u, 0x0000f3b7u, 0x000004d4u, 0x000004d4u, 0x000004d4u, 0x0006002cu, 0x00000047u, 0x0000f3b8u, 0x0000046fu, 0x0000046fu, 0x0000046fu, 0x0006002cu, 0x000004b6u, 0x0000f3b9u, 0x000004e5u, 0x000004e5u, 0x000004e5u, 0x0006002cu, 0x000004b6u, 0x0000f3bau, 0x000004e9u, 0x000004e9u, 0x000004e9u, 0x0006002cu, 0x000004b6u, 0x0000f3bbu, 0x00001dbeu, 0x00001dbeu, 0x00001dbeu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x0000007bu, 0x00007d04u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d03u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d02u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d01u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cfbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cfau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007cf9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cf8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007ceeu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007cedu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007cecu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cebu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007cb4u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007cb3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007cb2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007cb1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007cb0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cafu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007caeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cadu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cacu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007cabu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c95u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c94u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c93u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c92u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c91u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c90u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c8fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c8eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c8du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c8cu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c55u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c54u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c53u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c52u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c51u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c50u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c4fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c4eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c4du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c4cu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c15u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007c14u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c13u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c12u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007c11u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c10u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c0fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c0eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c0du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007c0cu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007bebu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007beau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007be9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007be8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007be7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007be6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007be5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007be4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007be3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007be2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000775fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000775eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000775du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000775cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000775bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000775au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007759u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007758u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007757u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007756u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007755u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007754u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007753u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007752u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007734u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007733u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007732u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007731u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007730u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000772fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000772eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000772du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000772cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000772bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000772au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007729u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007728u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007727u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000072a4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000072a3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000072a2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000072a1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000072a0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000729fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000729eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000729du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000729cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000729bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000729au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007299u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007298u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007297u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007279u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007278u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007277u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007276u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007275u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007274u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007273u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007272u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007271u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007270u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000726fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000726eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000726du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000726cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000725fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000725eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000725du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000725cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000725bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000725au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007259u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007258u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007257u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007256u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007255u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007231u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007230u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000722fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000722eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000722du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000722cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000722bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000722au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007229u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007228u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007227u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007209u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007208u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007207u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007206u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007205u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007204u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007203u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007202u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007201u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007200u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071fcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071f7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071f6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071f4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000071ecu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071ebu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071eau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071e9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000071e8u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071e3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071e2u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071e1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071e0u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000071cbu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x000071cau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071c8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071c7u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000071c6u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000071c5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071c4u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000071c3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071beu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071bdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071bcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071b2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071b1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071b0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071afu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000071a6u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007192u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007191u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007190u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000718fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000718eu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x0000718du, 0x00000007u, 0x0004003bu, 0x0000008du, 0x0000718cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000718bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000718au, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000717fu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x0000717eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000717du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000717cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000717bu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x0000717au, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007179u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007178u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007177u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007165u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007164u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007163u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007162u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007161u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007160u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000715fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000715eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007154u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007153u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007152u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007151u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007150u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000714fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000714eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000714du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000713bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000713au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007139u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007138u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007137u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007136u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007135u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007134u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000712au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007129u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007128u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007127u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007126u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007125u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007124u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007123u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007105u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007104u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007103u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007102u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007101u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007100u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070ffu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070f8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070dbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070b3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070b2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070b1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070b0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000070afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000070adu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007085u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007084u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007083u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007082u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007081u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007080u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000707fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000707cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000707bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007078u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007077u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007074u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007073u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007070u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000706fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000706cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000706bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007068u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007067u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007064u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007063u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007060u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000705fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000703fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000703eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000703du, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000703cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000703bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000703au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007039u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007038u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007037u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007036u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007035u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007034u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007033u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007032u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007031u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007020u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000701fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000701eu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000701du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000701cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000701au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007019u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007018u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007017u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007016u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007015u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007014u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007013u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007012u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ff4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ff3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ff2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ff1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ff0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fefu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006feeu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006febu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006feau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fe9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fe8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fe7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd5u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006fd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006faeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006fa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006f02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006effu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006efeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006efbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006efau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ef2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ee2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006edau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ed2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ecfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ecbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ecau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ec2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ebau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006eaau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ea7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ea6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ea3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ea2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e9fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e9eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e9bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e9au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e7cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e7bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e7au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e79u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e78u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e77u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e76u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e6fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e5au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e59u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006e58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006df2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006defu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006deeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006debu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006deau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006de2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ddau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006db2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006daeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006daau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006da2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d32u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d2fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d2eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d2bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d2au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d27u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d26u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d23u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006d22u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006d17u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006d16u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006d15u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006d14u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006d13u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006d06u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006d05u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006d04u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006d03u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006d02u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006d01u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cf4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cf3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cf2u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cf1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cf0u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006ce4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ce3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ce2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ce1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006ce0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cdfu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cd4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cd3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cd2u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cd1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cd0u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006cc3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cc2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cc1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cc0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cbfu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cbeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cb1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cb0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006cafu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006caeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006cadu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006ca1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006ca0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c9fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c9eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c9du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c9cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c91u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c90u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c8fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c8eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c8du, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006c80u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c7fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c7eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c7du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c7cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c7bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c6eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c6du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c6cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c6bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c6au, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006c5eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c5cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c5bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006c5au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c59u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c58u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c4eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c4du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c4cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c4bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c4au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c40u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c3fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c3eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c3du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c3cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c2au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c29u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c28u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c27u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c26u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c20u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006c1eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c1du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c1cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006c15u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00006c14u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c12u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006c11u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006bf0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006befu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006beeu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00006bedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006becu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bebu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006beau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006be2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006bd1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bd0u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bcfu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00006bceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bcdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bccu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bcbu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bcau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006bc3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bb3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bb2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bb1u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006bb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006bafu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006baeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006badu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ba4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ba3u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ba2u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006ba1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006ba0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006b9fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006b9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b67u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006b68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b69u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006b6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006b6bu, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x00006a77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a79u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a7bu, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x00006a7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a41u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a02u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006a03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069dau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069c0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069c1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069c2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069c3u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000069c4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000699fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000069a0u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006979u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000697au, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000697bu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000697cu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000697du, 0x00000007u, 0x0005003bu, 0x0000006au, 0x00006896u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000041bu, 0x00006897u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00006898u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00006899u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000689au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000689bu, 0x00000007u, 0x0004003bu, 0x000004b7u, 0x0000689cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000689du, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000689eu, 0x00000007u, 0x0005003bu, 0x0000006au, 0x000067b3u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000041bu, 0x000067b4u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000067b5u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000067b6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000067b7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000067b8u, 0x00000007u, 0x0004003bu, 0x000004b7u, 0x000067b9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000067bau, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000067bbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000067afu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000067a6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000067a3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000678bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000678cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000678du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000678eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000678fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006790u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066c8u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000066c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066cau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066cbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066ccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066cdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066ceu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066cfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066d0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066d1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066d2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066d3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066d4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066d5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066d6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066d8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000066d9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066dau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000066dbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000066a6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000066a7u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000066a8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000066a9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000657eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000657fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006580u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006581u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006582u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006583u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006585u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006587u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006588u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006589u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000658au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000658bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000658cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000658du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000658eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000658fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006590u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006591u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006592u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006593u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006594u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00006595u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00006596u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006597u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006598u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006599u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000659au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000659bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000659cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000659du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000659eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000659fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a3u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000065a4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000065a6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000065a8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065a9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065aau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065abu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065acu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000065adu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065aeu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x000065afu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000065b1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065b2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065b3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065b4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065b5u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000065b6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065b7u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000065b8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065b9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065bau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065bbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065bcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000065bdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065beu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000065bfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000065c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006546u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00006547u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006549u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000650du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000650eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000650fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006510u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006511u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006512u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000064d5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000064d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000064d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000064d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006449u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000644au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000644bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000644cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000644du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000644eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000644fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006450u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006451u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006453u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006454u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006455u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00006456u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00006445u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006439u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006432u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000642bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006424u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006408u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006409u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000640au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000640bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000640cu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000063c8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000063c9u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000063cau, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006364u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006365u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006366u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006319u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000631au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000631bu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000062d4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000062d5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000062d6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006268u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000626au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000626bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000626cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000626eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000626fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006270u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006272u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006273u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006274u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006276u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006277u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006278u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006279u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000627au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000627bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000627cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000627du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000627eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000627fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006280u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00006262u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006256u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000624fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006248u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006241u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006225u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006226u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006227u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006228u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006229u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000061e5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000061e6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000061e7u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006181u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006182u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006183u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00006136u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006137u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006138u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000060f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000060f2u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000060f3u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006085u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006087u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006088u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006089u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000608bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000608cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000608du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000608fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006090u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006091u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006093u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00006094u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006095u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006096u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006097u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006098u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006099u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000609au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000609bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000609cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000609du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000607fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006078u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006071u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000606au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000604eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000604fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006050u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006051u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00006052u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000600eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000600fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00006010u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00005faau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005fabu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005facu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00005f5fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005f60u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005f61u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00005f1au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005f1bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005f1cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eaeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eb2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb5u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005eb6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005eb9u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ebau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ebcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ebdu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ebeu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ebfu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ec0u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ec1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005ec2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ec3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ec4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ec5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ec6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ec7u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00005ea8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005ea3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e9eu, 0x00000007u, 0x0004003bu, 0x0000039au, 0x00005e5eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e5fu, 0x00000007u, 0x0004003bu, 0x0000039au, 0x00005e60u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00005e22u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e23u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e24u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e25u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005e26u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005e27u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005debu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005decu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005dedu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00005deeu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005defu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005df0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00005db4u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005db5u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005db6u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00005db7u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005db8u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00005db9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d92u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d6eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d4au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d26u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005d27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cf1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cf2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cf3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cf4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005cf5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cc1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005cc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c8eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c5bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c2eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c02u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005c03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005baau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005babu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b7eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b52u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b26u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005b27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005af8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005af9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005afbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ae6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005abfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005ac3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aacu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005aadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a89u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a73u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a50u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a3au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a17u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005a18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059ddu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000059deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000599eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000599fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059a2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000059a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005963u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005964u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005965u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005966u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005967u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005968u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005928u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005929u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000592au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000592bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000592cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000592du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058e7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000058e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000589eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000589fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000058a2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000058a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005859u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000585au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000585bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000585cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000585du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000585eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005814u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005815u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005816u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005817u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005818u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005819u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057f2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000057f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057ceu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000057cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000057aau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000057abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005784u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005785u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005786u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005787u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005751u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005752u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005753u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005754u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005755u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000571eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000571fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005720u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005721u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005722u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056eeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000056efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000056bbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000056bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000568cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000568du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000568eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000568fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005660u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005661u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005662u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005663u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005634u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005635u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005636u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005637u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005608u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005609u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000560au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000560bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055bbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000055bcu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000055bdu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000055beu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000055bfu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000055c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005566u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005567u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005568u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005569u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000556bu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000556cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000556du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000556eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000556fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005515u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005516u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005517u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005518u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005519u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000551au, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000551bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000551cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000551du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000551eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054c8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000054c9u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000054cau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000054cbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000054ccu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000054cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000548au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000548bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000548cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000548du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000548eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005450u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005453u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005454u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005416u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005417u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005418u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005419u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000541au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053dfu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000053e0u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000053c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053c1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000053c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000539bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000539cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000539du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000539eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000539fu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000537fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005380u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005381u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000535du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000535eu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000533eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000533fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005340u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005319u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000531du, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000052fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052feu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000052ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052dbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000052dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000052b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005290u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005291u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005292u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005293u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000526cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000526du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000526eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000526fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005248u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005249u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000524au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000524bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005215u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005216u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005217u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005218u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005219u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051e5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000051e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051b2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000051b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005180u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00005160u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005161u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005162u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000514eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005112u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005113u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005114u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005115u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005116u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005117u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005118u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005119u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000050f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050f7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050e3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050abu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050aeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000050afu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000508cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000508du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000508eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005078u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005079u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000507au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000503eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000503fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005040u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005041u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005042u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005043u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005044u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005045u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00005022u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005023u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005024u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000500eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000500fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00005010u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fd7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004fd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fdau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004fdbu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004fb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fb9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004fbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004fa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f62u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f63u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004f3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f40u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f2cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004f2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee6u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ee7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004eeau, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004ec6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ec7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ec8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e70u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e71u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004e4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e4eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e3au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004e3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004df5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004df8u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004dd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dd5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004dd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dc1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004dc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d86u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d89u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d8au, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004d67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d68u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d54u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d19u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d1cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004d1du, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004cfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ce6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ce7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ca9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004caau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cacu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004cadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004caeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cafu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004cb0u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00004c8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c8eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c7au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c42u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004c43u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004c1cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004c1du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bfcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bfdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bdcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bddu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bbcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004bbdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004b8du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004b8eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004b5eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004b5fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004655u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004656u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004657u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004658u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004659u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000465au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000465eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000465fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004660u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004661u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004663u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004664u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004666u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004667u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004669u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000466au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000466cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000466du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000466eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000466fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004670u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004671u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004672u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004673u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004675u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004676u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004677u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004678u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004679u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000467au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000467bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000467du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000467eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000467fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004680u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004681u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004682u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004683u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004685u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004686u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004687u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004688u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004689u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000468au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000468bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000468eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004690u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004691u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004692u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004694u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004695u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004696u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004697u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004698u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000469au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000469bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000469cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000469du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000469eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046acu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046afu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046b8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046bbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046beu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000046c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046c7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046cau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046cdu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046dcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046dfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046ebu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046eeu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046fau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046feu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000046ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004700u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004702u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004703u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004704u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004706u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004707u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004708u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000470bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000470fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004712u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004713u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004714u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004716u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004717u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004719u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000471au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000471cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000471du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000471fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004720u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004722u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004723u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004725u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004726u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004728u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004729u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000472bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000472cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000472eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000472fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004731u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004732u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004734u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004735u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004737u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004738u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000473au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000473bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000473du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000473eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004740u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004741u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004743u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004744u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004746u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004747u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004749u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000474au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000474du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004750u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004752u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004753u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004755u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004756u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004758u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004759u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000475bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000475cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000475eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000475fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004761u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004762u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004764u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004765u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004767u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004768u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000476bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000476eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004770u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004771u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004773u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004774u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004776u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004777u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004779u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000477au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000477cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000477du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000477fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00004780u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00004781u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004782u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004783u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00004784u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004785u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004786u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004787u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004788u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004789u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000478au, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000478bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000478cu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000478du, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000478eu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000478fu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004790u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004791u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004792u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004793u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004794u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004795u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000045f7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045f8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045f9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045fbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000045fcu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000045f4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045d3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045d4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045d5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000045d6u, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x000045d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000045d8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000045d9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004570u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004571u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004572u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004573u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004574u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004575u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004576u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004577u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004578u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004579u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000454fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004550u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004551u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00004552u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00004553u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00004554u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004555u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000454cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000452bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000452cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000452du, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000452eu, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x0000452fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004530u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004531u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044c8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000044c9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044cau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044cbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044ccu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044cdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000044ceu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044cfu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044d0u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000044d1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000448cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000448du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000448eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000448fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004490u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004491u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00004455u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004456u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004457u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004458u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004459u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000445au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000441eu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000441fu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004420u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00004421u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004422u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00004423u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043fcu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000043fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043d8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000043d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043b4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000043b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000438eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000438fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004390u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004391u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000435bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000435cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000435du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000435eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000435fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004328u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004329u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000432au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000432bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000432cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042f8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000042f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042c5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000042c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004296u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004297u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004298u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004299u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000426au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000426bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000426cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000426du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000423eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000423fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004240u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004241u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004212u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004213u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004214u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004215u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041e8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000041e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000041bcu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000041bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000418eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000418fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004190u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004191u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004162u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004163u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004164u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004165u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000414eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000414fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004150u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004129u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000412au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000412bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000412cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000412du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004115u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004116u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004117u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040f3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040ddu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040bau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000040a4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000040a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000407eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000407fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004080u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004081u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004082u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004043u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004044u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004045u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004046u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004047u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00004048u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004008u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000400au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000400bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000400cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000400du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fd1u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003fd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f96u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003f97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f51u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003f52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f0cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003f0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003ec8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e82u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e5cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e38u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e14u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003e15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003deeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003defu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003df1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003dbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d8bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003d8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d58u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003d59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d25u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003d26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cf6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cf7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cf8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003cf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ccau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ccbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003cccu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003ccdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ca0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003ca1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c74u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003c75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c25u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003c26u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003c27u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003c28u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003c29u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003c2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003bd5u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003bd6u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003bd7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003bd8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003bd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b83u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b84u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003b85u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b86u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b87u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003b88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b32u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b33u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00003b34u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b35u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00003b36u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003b37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003af4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003af5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003af6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003af7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003af8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003abau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003abbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003abcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003abdu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003abeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a83u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a49u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a4au, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003a2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a2bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a08u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003a09u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000039e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039eau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000039ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039c7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000039c8u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000039a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039a9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000039aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003983u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003984u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003985u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003986u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003987u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003967u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003968u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003942u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003943u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003944u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003945u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003946u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000391eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000391fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003920u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003921u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038fcu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000038fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038d8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000038d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038b4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000038b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000387fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003880u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003881u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003882u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003883u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000384cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000384du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000384eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000384fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003850u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003819u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000381au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000381bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000381cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000381du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000037eau, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000037cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037cbu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000037ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000037b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003780u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003781u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003782u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003783u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003760u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003761u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003762u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000374cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000374du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000374eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003712u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003713u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003714u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003715u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003716u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003717u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003718u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003719u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000036f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036f7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036abu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036aeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000036afu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000368cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000368du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000368eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003678u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003679u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000367au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000363eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000363fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003640u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003641u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003642u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003643u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003644u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003645u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003622u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003623u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003624u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000360eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000360fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003610u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035c9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000035cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035ccu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000035cdu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000035a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035aau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000035abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003595u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003596u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003597u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000354cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000354du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000354eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000354fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003550u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003551u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003552u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003553u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003554u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003530u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003531u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003532u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000351cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000351du, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000351eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d7u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034dau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034dbu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000034b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034b8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034a4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000034a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000345au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000345bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000345cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000345du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000345eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000345fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003460u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003461u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003462u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000343eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000343fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003440u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000342au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000342bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000342cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f0u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033f4u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000033d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033d2u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033beu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000033bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003380u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003381u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003382u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003383u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003384u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003385u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003386u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003387u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00003364u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003365u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003366u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003350u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003351u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003352u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003313u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003314u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003315u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003316u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00003317u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003318u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003319u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000331au, 0x00000007u, 0x0004003bu, 0x0000030du, 0x000032f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032f8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000032f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032e4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000032e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000032aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032acu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000032adu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003286u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003287u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003266u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003267u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003246u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003247u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003226u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00003227u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000031f7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000031f8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000031c8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000031c9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cbfu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cc4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cc8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002cc9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ccau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ccbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ccdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cceu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cd0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cd1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cd3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cd4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cd6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002cd7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cd8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002cd9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002cdau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdcu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002cddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ce0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002ce4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002ce5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ceau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cebu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cecu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002cedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cefu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cf0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cf4u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002cf5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cf8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002cfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfeu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002cffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d01u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d04u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d07u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d0du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d10u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d13u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d16u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d19u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d1fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d22u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d25u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d28u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002d2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d2eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d31u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d34u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d37u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d40u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d43u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d46u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d49u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d4fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d52u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d55u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d58u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d60u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d64u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d68u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d70u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d74u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d78u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d7cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d80u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d83u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d86u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d89u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d8cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d8fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d92u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d95u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d98u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d9bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d9eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002d9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002da1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002da4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002da7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002da8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002daau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dadu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002daeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002db1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002db7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dbcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dbfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dc8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dcbu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dceu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dd1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dd4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dd7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002dd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ddau, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ddbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dddu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002ddeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002de1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002de4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002de7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002deau, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002debu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002decu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002dedu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002deeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002defu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002df0u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df1u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df2u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df3u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df4u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002df6u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df7u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df8u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002df9u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002dfau, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002dfbu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002dfcu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00002dfdu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002dfeu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002dffu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002c0du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002c0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c0fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002c10u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002c11u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002c12u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002c13u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002c14u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002c02u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bffu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bfcu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bf9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bd8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bd9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bdau, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bdbu, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x00002bdcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002bddu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002bdeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b75u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002b76u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b77u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b78u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b79u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b7au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b7bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b7cu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b7du, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b7eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b54u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b55u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b56u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b57u, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x00002b58u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002b59u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002b5au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002af1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002af2u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002af3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002af4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002af5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002af6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002af7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002af8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002af9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002afau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ad0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ad1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ad2u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ad3u, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x00002ad4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002ad5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002ad6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a6du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002a6eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a6fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a70u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a71u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a72u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002a73u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a74u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a75u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002a76u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d5u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d6u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d7u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029d8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000029d9u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029dau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000029dbu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029dcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000029ddu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029deu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029dfu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x000029e0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029e1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029e2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029e3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029e4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000029e5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000029c9u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000029c2u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000029c3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002989u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000298au, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x0000298bu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x0000298cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000298du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000298eu, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00002928u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x00002929u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000292au, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000292bu, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000292cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000292du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000292eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000292fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00002930u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00002931u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002908u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002909u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028e8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028e9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028c8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028c9u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000028a0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000028a1u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000028a2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000277eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000277fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002780u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002781u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002782u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002783u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002785u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002786u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002788u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002789u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000278au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000278bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000278cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000278du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000278eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000278fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002791u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002792u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002794u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002795u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002796u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002797u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002798u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000275eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000275fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000273eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000273fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000271eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000271fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000026f6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000026f7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000026f8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000025d4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000025d5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000025d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025d8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000025d9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025dbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025dcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025dfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000025e0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000025e1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025e8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025edu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025eeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025beu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000025a8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002557u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002558u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002559u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000255au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000255bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000255cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000255du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000255fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002560u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002561u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002562u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002563u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002565u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002566u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002567u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002568u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002569u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000256au, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002532u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002511u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002512u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002513u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002514u, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x00002515u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002516u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002517u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024aeu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000024afu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024b0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024b1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024b2u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024b3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000024b4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024b5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024b6u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000024b7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000246fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002470u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002471u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002472u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002473u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002474u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002475u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002476u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002477u, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000244eu, 0x00000007u, 0x0005003bu, 0x0000006au, 0x000020b3u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000006au, 0x000020b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020bcu, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x000020bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020c2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020c3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020c4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020c5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020c6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000020c7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020c9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ceu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020cfu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020d9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020dau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020dbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020dcu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ddu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020deu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020e2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020e3u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020e4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020e5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020e6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000020e8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020e9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020eau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020ebu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020ecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020f4u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000020f5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020f7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000020f8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020f9u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000020fau, 0x00000007u, 0x0004003bu, 0x0000008du, 0x000020fbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020fcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000020fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000020ffu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002100u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002101u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002102u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002103u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002104u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002105u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002106u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002107u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002108u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002109u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000210au, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000210bu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000210cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000210du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000210eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000210fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002110u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002111u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002112u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002113u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002114u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002115u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002116u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002117u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002118u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002119u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000211au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000211bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000211cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000211du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000211eu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x0000211fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002120u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002121u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00002122u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002123u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002124u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002125u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002126u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002127u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002128u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002129u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000212au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000212bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000212cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000212eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000212fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002131u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002132u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002133u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002134u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002135u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002136u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002137u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002138u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002139u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000213au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000213bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000213cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000213du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000213eu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000213fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002140u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002141u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002142u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00002143u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002144u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00002145u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002146u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002147u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002148u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002149u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000214au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000214bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000214du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000214fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00002150u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002151u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002152u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002153u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002154u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002155u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002156u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002157u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00002158u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002159u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000215au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000215bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000215cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000215du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000215eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000215fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002160u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00002162u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002164u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002165u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002166u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002167u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002168u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002169u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000216au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000216bu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000216cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000216du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000216fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002170u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002171u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002172u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002173u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00002174u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002177u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002178u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00002179u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000217au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000217bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000217cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000217du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000217eu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x0000209eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000203bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000203cu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x0000203du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000203eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000203fu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00002005u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002006u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002007u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002008u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000200au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000200bu, 0x00000007u, 0x0005003bu, 0x0000006au, 0x00001ffau, 0x00000007u, 0x00000536u, 0x0004003bu, 0x00000046u, 0x00001f2bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f32u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001f36u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f3bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f4eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001f62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f6eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f82u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001f9cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001fa3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001fa5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fc9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001fcdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fd1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001fd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fe2u, 0x00000007u, 0x000300f7u, 0x00001ff8u, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00001ff9u, 0x000200f8u, 0x00001ff9u, 0x0003003eu, 0x00000219u, 0x0000021au, 0x00050041u, 0x00001f2eu, 0x00001f2fu, 0x00001f2du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001f30u, 0x00001f2fu, 0x0004007cu, 0x00000008u, 0x00001f31u, 0x00001f30u, 0x0003003eu, 0x00001f2bu, 0x00001f31u, 0x00050041u, 0x00001f2eu, 0x00001f33u, 0x00001f2du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001f34u, 0x00001f33u, 0x0004007cu, 0x00000008u, 0x00001f35u, 0x00001f34u, 0x0003003eu, 0x00001f32u, 0x00001f35u, 0x0004003du, 0x0000030cu, 0x00001f38u, 0x00001f37u, 0x0007004fu, 0x000000b0u, 0x00001f39u, 0x00001f38u, 0x00001f38u, 0x00000000u, 0x00000001u, 0x0004007cu, 0x000000efu, 0x00001f3au, 0x00001f39u, 0x0003003eu, 0x00001f36u, 0x00001f3au, 0x00050041u, 0x00000046u, 0x00001f3cu, 0x00001f36u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001f3du, 0x00001f3cu, 0x00050041u, 0x00000046u, 0x00001f3eu, 0x00001f36u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001f3fu, 0x00001f3eu, 0x00050084u, 0x00000008u, 0x00001f47u, 0x00001f3fu, 0x00001f46u, 0x00050080u, 0x00000008u, 0x00001f48u, 0x00001f3du, 0x00001f47u, 0x0003003eu, 0x00001f3bu, 0x00001f48u, 0x00050084u, 0x00000008u, 0x00001f4du, 0x00001f48u, 0x00001f4cu, 0x0003003eu, 0x00001f49u, 0x00001f4du, 0x00060041u, 0x000006d9u, 0x00001f54u, 0x00001f52u, 0x00000220u, 0x00001f48u, 0x0004003du, 0x00000006u, 0x00001f55u, 0x00001f54u, 0x00050041u, 0x00001f59u, 0x00001f5au, 0x00001f58u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00001f5bu, 0x00001f5au, 0x000500c7u, 0x00000006u, 0x00001f5cu, 0x00001f55u, 0x00001f5bu, 0x0003003eu, 0x00001f4eu, 0x00001f5cu, 0x000500aau, 0x00000069u, 0x00001f5eu, 0x00001f5cu, 0x0000032du, 0x000300f7u, 0x00001f60u, 0x00000000u, 0x000400fau, 0x00001f5eu, 0x00001f5fu, 0x00001f60u, 0x000200f8u, 0x00001f5fu, 0x0003003eu, 0x00001ffau, 0x00000559u, 0x000200f9u, 0x00001ff8u, 0x000200f8u, 0x00001f60u, 0x0004003du, 0x0000030cu, 0x00001f63u, 0x00001f2du, 0x0007004fu, 0x000000b0u, 0x00001f64u, 0x00001f63u, 0x00001f63u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001f62u, 0x00001f64u, 0x00050041u, 0x00001f59u, 0x00001f66u, 0x00001f58u, 0x0000022du, 0x0004003du, 0x00000006u, 0x00001f67u, 0x00001f66u, 0x0003003eu, 0x00001f65u, 0x00001f67u, 0x00050041u, 0x00001f59u, 0x00001f69u, 0x00001f58u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00001f6au, 0x00001f69u, 0x0003003eu, 0x00001f68u, 0x00001f6au, 0x00050041u, 0x00001f59u, 0x00001f6cu, 0x00001f58u, 0x00000220u, 0x0004003du, 0x00000006u, 0x00001f6du, 0x00001f6cu, 0x0003003eu, 0x00001f6bu, 0x00001f6du, 0x00050041u, 0x00001f59u, 0x00001f6fu, 0x00001f58u, 0x0000022au, 0x0004003du, 0x00000006u, 0x00001f70u, 0x00001f6fu, 0x0003003eu, 0x00001f6eu, 0x00001f70u, 0x0003003eu, 0x00000755u, 0x00000536u, 0x0003003eu, 0x00000856u, 0x00000536u, 0x0004003du, 0x000000b0u, 0x0000200cu, 0x00001f62u, 0x00050050u, 0x000000b0u, 0x0000200fu, 0x00001f67u, 0x00001f6au, 0x000500b0u, 0x0000087bu, 0x00002010u, 0x0000200cu, 0x0000200fu, 0x0004009bu, 0x00000069u, 0x00002011u, 0x00002010u, 0x000300f7u, 0x00002012u, 0x00000000u, 0x000400fau, 0x00002011u, 0x00002013u, 0x00002012u, 0x000200f8u, 0x00002013u, 0x0004003du, 0x000000b0u, 0x00002014u, 0x00001f62u, 0x00050050u, 0x000000b0u, 0x00002015u, 0x00000884u, 0x00000884u, 0x000500c7u, 0x000000b0u, 0x00002016u, 0x00002014u, 0x00002015u, 0x0003003eu, 0x00002005u, 0x00002016u, 0x0004003du, 0x000000b0u, 0x00002017u, 0x00001f62u, 0x00050050u, 0x000000efu, 0x00002018u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x00002019u, 0x00002017u, 0x00002018u, 0x0003003eu, 0x00001f62u, 0x00002019u, 0x00050041u, 0x00000007u, 0x0000201au, 0x00002005u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000201bu, 0x0000201au, 0x00050084u, 0x00000006u, 0x0000201cu, 0x0000201bu, 0x0000088du, 0x00050041u, 0x00000007u, 0x0000201du, 0x00002005u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000201eu, 0x0000201du, 0x00050080u, 0x00000006u, 0x0000201fu, 0x0000201cu, 0x0000201eu, 0x0003003eu, 0x00002006u, 0x0000201fu, 0x000500c2u, 0x00000006u, 0x00002022u, 0x00001f67u, 0x0000078bu, 0x00050041u, 0x00000007u, 0x00002023u, 0x00001f62u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002024u, 0x00002023u, 0x00050084u, 0x00000006u, 0x00002025u, 0x00002022u, 0x00002024u, 0x00050080u, 0x00000006u, 0x00002026u, 0x00001f6du, 0x00002025u, 0x00050041u, 0x00000007u, 0x00002027u, 0x00001f62u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002028u, 0x00002027u, 0x00050080u, 0x00000006u, 0x00002029u, 0x00002026u, 0x00002028u, 0x0003003eu, 0x00002007u, 0x00002029u, 0x0003003eu, 0x0000089eu, 0x00002029u, 0x0003003eu, 0x00002008u, 0x00002029u, 0x0003003eu, 0x00002009u, 0x0000201fu, 0x000300f7u, 0x00002040u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00002040u, 0x00000000u, 0x00002041u, 0x00000001u, 0x00002041u, 0x00000002u, 0x00002042u, 0x00000003u, 0x00002043u, 0x00000004u, 0x00002044u, 0x000200f8u, 0x00002044u, 0x000500c7u, 0x00000006u, 0x00002091u, 0x00002029u, 0x000006cbu, 0x0003003eu, 0x00002008u, 0x00002091u, 0x00050084u, 0x00000006u, 0x00002093u, 0x0000201fu, 0x000006cfu, 0x00050080u, 0x00000006u, 0x00002095u, 0x00002091u, 0x00002093u, 0x0003003eu, 0x00002008u, 0x00002095u, 0x00060041u, 0x000006d9u, 0x00002097u, 0x000006d7u, 0x00000220u, 0x00002095u, 0x0004003du, 0x00000006u, 0x00002098u, 0x00002097u, 0x0003003eu, 0x0000203fu, 0x00002098u, 0x00070050u, 0x000004f7u, 0x0000209au, 0x00002098u, 0x00002098u, 0x00002098u, 0x00002098u, 0x000500c2u, 0x000004f7u, 0x0000209bu, 0x0000209au, 0x000006dfu, 0x000500c7u, 0x000004f7u, 0x0000209cu, 0x0000209bu, 0x000006e1u, 0x00040071u, 0x00000010u, 0x0000209du, 0x0000209cu, 0x0003003eu, 0x00000675u, 0x0000209du, 0x000200f9u, 0x00002040u, 0x000200f8u, 0x00002043u, 0x000500c7u, 0x00000006u, 0x0000207bu, 0x00002029u, 0x00000683u, 0x0003003eu, 0x00002008u, 0x0000207bu, 0x00050084u, 0x00000006u, 0x0000207du, 0x0000201fu, 0x000006b4u, 0x00050080u, 0x00000006u, 0x0000207fu, 0x0000207bu, 0x0000207du, 0x0003003eu, 0x00002008u, 0x0000207fu, 0x000500c6u, 0x00000006u, 0x00002081u, 0x0000207fu, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00002082u, 0x0000068fu, 0x00000220u, 0x00002081u, 0x0004003du, 0x00000011u, 0x00002083u, 0x00002082u, 0x00040071u, 0x00000006u, 0x00002084u, 0x00002083u, 0x0003003eu, 0x0000203eu, 0x00002084u, 0x000500c2u, 0x00000006u, 0x00002086u, 0x00002084u, 0x00000314u, 0x00040071u, 0x0000000fu, 0x00002087u, 0x00002086u, 0x00060050u, 0x00000047u, 0x00002088u, 0x00002087u, 0x00002087u, 0x00002087u, 0x000500c7u, 0x00000006u, 0x0000208au, 0x00002084u, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x0000208bu, 0x0000208au, 0x00070050u, 0x00000010u, 0x0000208fu, 0x00002087u, 0x00002087u, 0x00002087u, 0x0000208bu, 0x0003003eu, 0x00000675u, 0x0000208fu, 0x000200f9u, 0x00002040u, 0x000200f8u, 0x00002042u, 0x000500c7u, 0x00000006u, 0x00002058u, 0x00002029u, 0x00000683u, 0x0003003eu, 0x00002008u, 0x00002058u, 0x00050084u, 0x00000006u, 0x0000205au, 0x0000201fu, 0x00000687u, 0x00050080u, 0x00000006u, 0x0000205cu, 0x00002058u, 0x0000205au, 0x0003003eu, 0x00002008u, 0x0000205cu, 0x000500c6u, 0x00000006u, 0x0000205eu, 0x0000205cu, 0x0000045cu, 0x00060041u, 0x00000692u, 0x0000205fu, 0x0000068fu, 0x00000220u, 0x0000205eu, 0x0004003du, 0x00000011u, 0x00002060u, 0x0000205fu, 0x00040071u, 0x00000006u, 0x00002061u, 0x00002060u, 0x0003003eu, 0x0000203cu, 0x00002061u, 0x000500c2u, 0x00000006u, 0x00002063u, 0x00002061u, 0x00000314u, 0x000500c2u, 0x00000006u, 0x00002065u, 0x00002061u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00002067u, 0x00002061u, 0x00000386u, 0x00060050u, 0x0000030cu, 0x00002068u, 0x00002063u, 0x00002065u, 0x00002067u, 0x000500c7u, 0x0000030cu, 0x0000206au, 0x00002068u, 0x0000f399u, 0x0003003eu, 0x0000203du, 0x0000206au, 0x00040071u, 0x00000047u, 0x0000206cu, 0x0000206au, 0x00060041u, 0x00000671u, 0x0000206eu, 0x0000067cu, 0x00000220u, 0x0000205cu, 0x0004003du, 0x0000000fu, 0x0000206fu, 0x0000206eu, 0x000500c4u, 0x0000000fu, 0x00002070u, 0x0000206fu, 0x0000038eu, 0x000500c7u, 0x00000006u, 0x00002072u, 0x00002061u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00002073u, 0x00002072u, 0x0000023cu, 0x00040071u, 0x0000000fu, 0x00002074u, 0x00002073u, 0x000500c5u, 0x0000000fu, 0x00002075u, 0x00002070u, 0x00002074u, 0x00050051u, 0x0000000fu, 0x00002076u, 0x0000206cu, 0x00000000u, 0x00050051u, 0x0000000fu, 0x00002077u, 0x0000206cu, 0x00000001u, 0x00050051u, 0x0000000fu, 0x00002078u, 0x0000206cu, 0x00000002u, 0x00070050u, 0x00000010u, 0x00002079u, 0x00002076u, 0x00002077u, 0x00002078u, 0x00002075u, 0x0003003eu, 0x00000675u, 0x00002079u, 0x000200f9u, 0x00002040u, 0x000200f8u, 0x00002041u, 0x000500c7u, 0x00000006u, 0x00002046u, 0x00002029u, 0x00000663u, 0x0003003eu, 0x00002008u, 0x00002046u, 0x00050084u, 0x00000006u, 0x00002048u, 0x0000201fu, 0x00000662u, 0x00050080u, 0x00000006u, 0x0000204au, 0x00002046u, 0x00002048u, 0x0003003eu, 0x00002008u, 0x0000204au, 0x000500c6u, 0x00000006u, 0x0000204cu, 0x0000204au, 0x00000464u, 0x00060041u, 0x00000671u, 0x0000204du, 0x0000066eu, 0x00000220u, 0x0000204cu, 0x0004003du, 0x0000000fu, 0x0000204eu, 0x0000204du, 0x0003003eu, 0x0000203bu, 0x0000204eu, 0x000500c2u, 0x00000006u, 0x00002053u, 0x0000204au, 0x0000022au, 0x00060041u, 0x00000671u, 0x00002054u, 0x0000067cu, 0x00000220u, 0x00002053u, 0x0004003du, 0x0000000fu, 0x00002055u, 0x00002054u, 0x00070050u, 0x00000010u, 0x00002056u, 0x0000204eu, 0x0000204eu, 0x0000204eu, 0x00002055u, 0x0003003eu, 0x00000675u, 0x00002056u, 0x000200f9u, 0x00002040u, 0x000200f8u, 0x00002040u, 0x0004003du, 0x00000006u, 0x00002032u, 0x00002023u, 0x00050084u, 0x00000006u, 0x00002033u, 0x00002022u, 0x00002032u, 0x00050080u, 0x00000006u, 0x00002034u, 0x00001f70u, 0x00002033u, 0x0004003du, 0x00000006u, 0x00002036u, 0x00002027u, 0x00050080u, 0x00000006u, 0x00002037u, 0x00002034u, 0x00002036u, 0x0003003eu, 0x00002007u, 0x00002037u, 0x0003003eu, 0x0000200au, 0x00002037u, 0x0003003eu, 0x0000200bu, 0x0000201fu, 0x000500c7u, 0x00000006u, 0x000020a0u, 0x00002037u, 0x00000683u, 0x0003003eu, 0x0000200au, 0x000020a0u, 0x00050084u, 0x00000006u, 0x000020a2u, 0x0000201fu, 0x00000759u, 0x00050080u, 0x00000006u, 0x000020a4u, 0x000020a0u, 0x000020a2u, 0x0003003eu, 0x0000200au, 0x000020a4u, 0x000500c6u, 0x00000006u, 0x000020a6u, 0x000020a4u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x000020a7u, 0x0000068fu, 0x00000220u, 0x000020a6u, 0x0004003du, 0x00000011u, 0x000020a8u, 0x000020a7u, 0x0003003eu, 0x0000209eu, 0x000020a8u, 0x000500c2u, 0x00000011u, 0x000020aau, 0x000020a8u, 0x000005f2u, 0x0003003eu, 0x00000708u, 0x000020aau, 0x00060041u, 0x00000671u, 0x000020acu, 0x0000067cu, 0x00000220u, 0x000020a4u, 0x0004003du, 0x0000000fu, 0x000020adu, 0x000020acu, 0x000500c7u, 0x00000011u, 0x000020afu, 0x000020a8u, 0x000005f7u, 0x000500c4u, 0x00000011u, 0x000020b0u, 0x000020afu, 0x000005f2u, 0x00040071u, 0x0000000fu, 0x000020b1u, 0x000020b0u, 0x000500c5u, 0x0000000fu, 0x000020b2u, 0x000020adu, 0x000020b1u, 0x0003003eu, 0x000006eau, 0x000020b2u, 0x000200f9u, 0x00002012u, 0x000200f8u, 0x00002012u, 0x000200f9u, 0x00001f72u, 0x000200f8u, 0x00001f72u, 0x000700f5u, 0x00000006u, 0x00007ed9u, 0x00001f5cu, 0x00002012u, 0x00001f81u, 0x00001f75u, 0x000700f5u, 0x00000047u, 0x0000d1f2u, 0x0000c7e1u, 0x00002012u, 0x0000d1f1u, 0x00001f75u, 0x000700f5u, 0x0000000fu, 0x0000d07fu, 0x0000bf29u, 0x00002012u, 0x0000d07eu, 0x00001f75u, 0x000700f5u, 0x0000000fu, 0x0000cf0du, 0x0000bf29u, 0x00002012u, 0x0000cf0cu, 0x00001f75u, 0x000700f5u, 0x00000047u, 0x0000cce8u, 0x0000c7e1u, 0x00002012u, 0x0000cce7u, 0x00001f75u, 0x000700f5u, 0x0000000fu, 0x0000cb82u, 0x0000bf29u, 0x00002012u, 0x0000cb81u, 0x00001f75u, 0x000700f5u, 0x0000000fu, 0x0000ca1du, 0x0000bf29u, 0x00002012u, 0x0000ca1cu, 0x00001f75u, 0x000700f5u, 0x00000047u, 0x0000c7dfu, 0x0000c7e1u, 0x00002012u, 0x0000c7deu, 0x00001f75u, 0x000700f5u, 0x00000010u, 0x0000c2b7u, 0x0000c2b9u, 0x00002012u, 0x0000c2b6u, 0x00001f75u, 0x000700f5u, 0x00000008u, 0x0000c195u, 0x0000c197u, 0x00002012u, 0x0000c194u, 0x00001f75u, 0x000700f5u, 0x0000000fu, 0x0000c074u, 0x0000bf29u, 0x00002012u, 0x0000c073u, 0x00001f75u, 0x000700f5u, 0x0000000fu, 0x0000bf27u, 0x0000bf29u, 0x00002012u, 0x0000bf26u, 0x00001f75u, 0x000700f5u, 0x00000069u, 0x0000bd8du, 0x00009266u, 0x00002012u, 0x0000bd8cu, 0x00001f75u, 0x000700f5u, 0x00000012u, 0x0000ab91u, 0x0000ab93u, 0x00002012u, 0x0000ab90u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x0000aae7u, 0x00008760u, 0x00002012u, 0x0000aae6u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x0000a019u, 0x00008760u, 0x00002012u, 0x0000a018u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x00009f35u, 0x00008760u, 0x00002012u, 0x00009f34u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x00009e4eu, 0x00008760u, 0x00002012u, 0x00009e4du, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x00009d66u, 0x00008760u, 0x00002012u, 0x00009d65u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x00009899u, 0x00008760u, 0x00002012u, 0x00009898u, 0x00001f75u, 0x000700f5u, 0x00000069u, 0x00009307u, 0x00009266u, 0x00002012u, 0x00009306u, 0x00001f75u, 0x000700f5u, 0x00000069u, 0x00009264u, 0x00009266u, 0x00002012u, 0x00009263u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x000088d4u, 0x00008760u, 0x00002012u, 0x000088d3u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x0000885au, 0x00008760u, 0x00002012u, 0x00008859u, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x000087ddu, 0x00008760u, 0x00002012u, 0x000087dcu, 0x00001f75u, 0x000700f5u, 0x00000013u, 0x0000875eu, 0x00008760u, 0x00002012u, 0x0000875du, 0x00001f75u, 0x000700f5u, 0x000000efu, 0x0000805au, 0x00008038u, 0x00002012u, 0x00008059u, 0x00001f75u, 0x000700f5u, 0x000000efu, 0x00008036u, 0x00008038u, 0x00002012u, 0x00008035u, 0x00001f75u, 0x000700f5u, 0x00000044u, 0x00007f6fu, 0x00007f62u, 0x00002012u, 0x00007f6eu, 0x00001f75u, 0x000700f5u, 0x00000044u, 0x00007f60u, 0x00007f62u, 0x00002012u, 0x00007f5fu, 0x00001f75u, 0x000500abu, 0x00000069u, 0x00001f78u, 0x00007ed9u, 0x0000032du, 0x000400f6u, 0x00001f74u, 0x00001f75u, 0x00000000u, 0x000400fau, 0x00001f78u, 0x00001f73u, 0x00001f74u, 0x000200f8u, 0x00001f73u, 0x0006000cu, 0x00000008u, 0x00001f7bu, 0x00000001u, 0x00000049u, 0x00007ed9u, 0x0003003eu, 0x00001f79u, 0x00001f7bu, 0x000500c4u, 0x00000008u, 0x00001f7du, 0x0000022au, 0x00001f7bu, 0x0004007cu, 0x00000006u, 0x00001f7eu, 0x00001f7du, 0x000400c8u, 0x00000006u, 0x00001f7fu, 0x00001f7eu, 0x000500c7u, 0x00000006u, 0x00001f81u, 0x00007ed9u, 0x00001f7fu, 0x0003003eu, 0x00001f4eu, 0x00001f81u, 0x00050080u, 0x00000008u, 0x00001f89u, 0x00001f4du, 0x00001f7bu, 0x00060041u, 0x000006d9u, 0x00001f8au, 0x00001f86u, 0x00000220u, 0x00001f89u, 0x0004003du, 0x00000006u, 0x00001f8bu, 0x00001f8au, 0x0003003eu, 0x00001f82u, 0x00001f8bu, 0x000200f9u, 0x00001f8cu, 0x000200f8u, 0x00001f8cu, 0x000700f5u, 0x00000047u, 0x0000d1f1u, 0x0000d1f2u, 0x00001f73u, 0x0000eeadu, 0x00001f8fu, 0x000700f5u, 0x0000000fu, 0x0000d07eu, 0x0000d07fu, 0x00001f73u, 0x0000ee92u, 0x00001f8fu, 0x000700f5u, 0x0000000fu, 0x0000cf0cu, 0x0000cf0du, 0x00001f73u, 0x0000ee77u, 0x00001f8fu, 0x000700f5u, 0x00000047u, 0x0000cce7u, 0x0000cce8u, 0x00001f73u, 0x0000ee4fu, 0x00001f8fu, 0x000700f5u, 0x0000000fu, 0x0000cb81u, 0x0000cb82u, 0x00001f73u, 0x0000ee27u, 0x00001f8fu, 0x000700f5u, 0x0000000fu, 0x0000ca1cu, 0x0000ca1du, 0x00001f73u, 0x0000edffu, 0x00001f8fu, 0x000700f5u, 0x00000047u, 0x0000c7deu, 0x0000c7dfu, 0x00001f73u, 0x0000edc1u, 0x00001f8fu, 0x000700f5u, 0x00000010u, 0x0000c2b6u, 0x0000c2b7u, 0x00001f73u, 0x0000c2b4u, 0x00001f8fu, 0x000700f5u, 0x00000008u, 0x0000c194u, 0x0000c195u, 0x00001f73u, 0x0000c192u, 0x00001f8fu, 0x000700f5u, 0x0000000fu, 0x0000c073u, 0x0000c074u, 0x00001f73u, 0x0000c071u, 0x00001f8fu, 0x000700f5u, 0x0000000fu, 0x0000bf26u, 0x0000bf27u, 0x00001f73u, 0x0000bf24u, 0x00001f8fu, 0x000700f5u, 0x00000069u, 0x0000bd8cu, 0x0000bd8du, 0x00001f73u, 0x0000eb49u, 0x00001f8fu, 0x000700f5u, 0x00000012u, 0x0000ab90u, 0x0000ab91u, 0x00001f73u, 0x0000eab7u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x0000aae6u, 0x0000aae7u, 0x00001f73u, 0x0000ea25u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x0000a018u, 0x0000a019u, 0x00001f73u, 0x0000e983u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x00009f34u, 0x00009f35u, 0x00001f73u, 0x0000e8e3u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x00009e4du, 0x00009e4eu, 0x00001f73u, 0x0000e843u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x00009d65u, 0x00009d66u, 0x00001f73u, 0x0000e7a3u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x00009898u, 0x00009899u, 0x00001f73u, 0x0000e711u, 0x00001f8fu, 0x000700f5u, 0x00000069u, 0x00009306u, 0x00009307u, 0x00001f73u, 0x0000e618u, 0x00001f8fu, 0x000700f5u, 0x00000069u, 0x00009263u, 0x00009264u, 0x00001f73u, 0x0000e51fu, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x000088d3u, 0x000088d4u, 0x00001f73u, 0x0000e413u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x00008859u, 0x0000885au, 0x00001f73u, 0x0000e309u, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x000087dcu, 0x000087ddu, 0x00001f73u, 0x0000e1ffu, 0x00001f8fu, 0x000700f5u, 0x00000013u, 0x0000875du, 0x0000875eu, 0x00001f73u, 0x0000e0f5u, 0x00001f8fu, 0x000700f5u, 0x000000efu, 0x00008059u, 0x0000805au, 0x00001f73u, 0x0000df94u, 0x00001f8fu, 0x000700f5u, 0x000000efu, 0x00008035u, 0x00008036u, 0x00001f73u, 0x0000de33u, 0x00001f8fu, 0x000700f5u, 0x00000044u, 0x00007f6eu, 0x00007f6fu, 0x00001f73u, 0x0000dcc6u, 0x00001f8fu, 0x000700f5u, 0x00000044u, 0x00007f5fu, 0x00007f60u, 0x00001f73u, 0x0000db50u, 0x00001f8fu, 0x000700f5u, 0x00000006u, 0x00007f05u, 0x00001f8bu, 0x00001f73u, 0x00001f9bu, 0x00001f8fu, 0x000500abu, 0x00000069u, 0x00001f92u, 0x00007f05u, 0x0000032du, 0x000400f6u, 0x00001f8eu, 0x00001f8fu, 0x00000000u, 0x000400fau, 0x00001f92u, 0x00001f8du, 0x00001f8eu, 0x000200f8u, 0x00001f8du, 0x0006000cu, 0x00000008u, 0x00001f95u, 0x00000001u, 0x00000049u, 0x00007f05u, 0x0003003eu, 0x00001f93u, 0x00001f95u, 0x000500c4u, 0x00000008u, 0x00001f97u, 0x0000022au, 0x00001f95u, 0x0004007cu, 0x00000006u, 0x00001f98u, 0x00001f97u, 0x000400c8u, 0x00000006u, 0x00001f99u, 0x00001f98u, 0x000500c7u, 0x00000006u, 0x00001f9bu, 0x00007f05u, 0x00001f99u, 0x0003003eu, 0x00001f82u, 0x00001f9bu, 0x00050084u, 0x00000008u, 0x00001f9fu, 0x0000115du, 0x00001f7bu, 0x00050080u, 0x00000008u, 0x00001fa0u, 0x00001f95u, 0x00001f9fu, 0x0004007cu, 0x00000006u, 0x00001fa1u, 0x00001fa0u, 0x0003003eu, 0x00001f9cu, 0x00001fa1u, 0x0003003eu, 0x00001fa3u, 0x00001f31u, 0x0003003eu, 0x00001fa5u, 0x00001f35u, 0x0003003eu, 0x00001fa7u, 0x00001fa1u, 0x0003003eu, 0x000020b3u, 0x00000536u, 0x000300f7u, 0x0000217fu, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00002180u, 0x000200f8u, 0x00002180u, 0x0003003eu, 0x000020b6u, 0x00001fa1u, 0x00060041u, 0x000002fcu, 0x000023ffu, 0x000002fau, 0x00000220u, 0x00001fa1u, 0x0004003du, 0x000002f6u, 0x00002400u, 0x000023ffu, 0x00050051u, 0x00000008u, 0x00002401u, 0x00002400u, 0x00000000u, 0x0003003eu, 0x000071a6u, 0x00002401u, 0x00050051u, 0x00000008u, 0x00002403u, 0x00002400u, 0x00000001u, 0x0003003eu, 0x000071a7u, 0x00002403u, 0x00050051u, 0x00000008u, 0x00002405u, 0x00002400u, 0x00000002u, 0x0003003eu, 0x000071a8u, 0x00002405u, 0x00050051u, 0x00000008u, 0x00002407u, 0x00002400u, 0x00000003u, 0x0003003eu, 0x000071a9u, 0x00002407u, 0x00070050u, 0x0000002eu, 0x000071aeu, 0x00002401u, 0x00002403u, 0x00002405u, 0x00002407u, 0x0003003eu, 0x000071afu, 0x00002401u, 0x0003003eu, 0x000071b0u, 0x00002403u, 0x0003003eu, 0x000071b1u, 0x00002405u, 0x0003003eu, 0x000071b2u, 0x00002407u, 0x0003003eu, 0x000071bcu, 0x00002401u, 0x0003003eu, 0x000071bdu, 0x00002403u, 0x0003003eu, 0x000071beu, 0x00002405u, 0x00050084u, 0x00000008u, 0x00002186u, 0x00000882u, 0x00002403u, 0x000500b1u, 0x00000069u, 0x00002187u, 0x00001f35u, 0x00002186u, 0x000400a8u, 0x00000069u, 0x00002188u, 0x00002187u, 0x000300f7u, 0x00002189u, 0x00000000u, 0x000400fau, 0x00002188u, 0x0000218au, 0x00002189u, 0x000200f8u, 0x0000218au, 0x00050084u, 0x00000008u, 0x0000218eu, 0x00002405u, 0x00000882u, 0x00050080u, 0x00000008u, 0x0000218fu, 0x0000218eu, 0x00001bcdu, 0x000500adu, 0x00000069u, 0x00002190u, 0x00001f35u, 0x0000218fu, 0x000200f9u, 0x00002189u, 0x000200f8u, 0x00002189u, 0x000700f5u, 0x00000069u, 0x00002191u, 0x00002187u, 0x00002180u, 0x00002190u, 0x0000218au, 0x000300f7u, 0x00002192u, 0x00000000u, 0x000400fau, 0x00002191u, 0x00002193u, 0x00002192u, 0x000200f8u, 0x00002193u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x00002192u, 0x00070041u, 0x00000671u, 0x00002195u, 0x00001bd9u, 0x00000220u, 0x00001fa1u, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00002196u, 0x00002195u, 0x00040071u, 0x00000006u, 0x00002197u, 0x00002196u, 0x0003003eu, 0x000020b7u, 0x00002197u, 0x000300f7u, 0x00002198u, 0x00000000u, 0x000400fau, 0x00001bdeu, 0x00002199u, 0x00002198u, 0x000200f8u, 0x00002199u, 0x000500c7u, 0x00000006u, 0x0000219bu, 0x00002197u, 0x00000a44u, 0x000500abu, 0x00000069u, 0x0000219cu, 0x0000219bu, 0x0000032du, 0x000300f7u, 0x0000219du, 0x00000000u, 0x000400fau, 0x0000219cu, 0x0000219eu, 0x0000219du, 0x000200f8u, 0x0000219eu, 0x000500c7u, 0x00000008u, 0x000021a0u, 0x00001f31u, 0x00001be7u, 0x0003003eu, 0x00001fa3u, 0x000021a0u, 0x000500c7u, 0x00000008u, 0x000021a2u, 0x00001f35u, 0x00001bebu, 0x0003003eu, 0x00001fa5u, 0x000021a2u, 0x000200f9u, 0x0000219du, 0x000200f8u, 0x0000219du, 0x000700f5u, 0x00000008u, 0x00007f1fu, 0x00001f31u, 0x00002199u, 0x000021a0u, 0x0000219eu, 0x000700f5u, 0x00000008u, 0x00007f18u, 0x00001f35u, 0x00002199u, 0x000021a2u, 0x0000219eu, 0x000200f9u, 0x00002198u, 0x000200f8u, 0x00002198u, 0x000700f5u, 0x00000008u, 0x00007f1eu, 0x00001f31u, 0x00002192u, 0x00007f1fu, 0x0000219du, 0x000700f5u, 0x00000008u, 0x00007f17u, 0x00001f35u, 0x00002192u, 0x00007f18u, 0x0000219du, 0x00050084u, 0x00000008u, 0x000021a5u, 0x00000882u, 0x00002401u, 0x00050082u, 0x00000008u, 0x000021aau, 0x00007f17u, 0x00002186u, 0x00050080u, 0x00000008u, 0x000021abu, 0x000021a5u, 0x000021aau, 0x0004007cu, 0x00000006u, 0x000021acu, 0x000021abu, 0x0003003eu, 0x000020b9u, 0x000021acu, 0x00060041u, 0x000002ddu, 0x0000240du, 0x000002dbu, 0x00000220u, 0x000021acu, 0x0004003du, 0x000002d7u, 0x0000240eu, 0x0000240du, 0x00050051u, 0x00000009u, 0x0000240fu, 0x0000240eu, 0x00000000u, 0x0003003eu, 0x00007177u, 0x0000240fu, 0x00050051u, 0x00000009u, 0x00002411u, 0x0000240eu, 0x00000001u, 0x0003003eu, 0x00007178u, 0x00002411u, 0x00050051u, 0x00000028u, 0x00002413u, 0x0000240eu, 0x00000002u, 0x0003003eu, 0x00007179u, 0x00002413u, 0x00050051u, 0x00000028u, 0x00002415u, 0x0000240eu, 0x00000003u, 0x0003003eu, 0x0000717au, 0x00002415u, 0x00050051u, 0x00000008u, 0x00002417u, 0x0000240eu, 0x00000004u, 0x0003003eu, 0x0000717bu, 0x00002417u, 0x00050051u, 0x00000008u, 0x00002419u, 0x0000240eu, 0x00000005u, 0x0003003eu, 0x0000717cu, 0x00002419u, 0x00050051u, 0x00000008u, 0x0000241bu, 0x0000240eu, 0x00000006u, 0x0003003eu, 0x0000717du, 0x0000241bu, 0x00050051u, 0x00000012u, 0x0000241du, 0x0000240eu, 0x00000007u, 0x0003003eu, 0x0000717eu, 0x0000241du, 0x00050051u, 0x00000011u, 0x0000241fu, 0x0000240eu, 0x00000008u, 0x0003003eu, 0x0000717fu, 0x0000241fu, 0x000c0050u, 0x00000029u, 0x00007189u, 0x0000240fu, 0x00002411u, 0x00002413u, 0x00002415u, 0x00002417u, 0x00002419u, 0x0000241bu, 0x0000241du, 0x0000241fu, 0x0003003eu, 0x0000718au, 0x0000240fu, 0x0003003eu, 0x0000718bu, 0x00002411u, 0x0003003eu, 0x0000718cu, 0x00002413u, 0x0003003eu, 0x0000718du, 0x00002415u, 0x0003003eu, 0x0000718eu, 0x00002417u, 0x0003003eu, 0x0000718fu, 0x00002419u, 0x0003003eu, 0x00007190u, 0x0000241bu, 0x0003003eu, 0x00007191u, 0x0000241du, 0x0003003eu, 0x00007192u, 0x0000241fu, 0x0003003eu, 0x000071c3u, 0x0000240fu, 0x0003003eu, 0x000071c4u, 0x00002411u, 0x0003003eu, 0x000071c5u, 0x00002413u, 0x0003003eu, 0x000071c6u, 0x00002415u, 0x0003003eu, 0x000071c7u, 0x00002417u, 0x0003003eu, 0x000071c8u, 0x00002419u, 0x0003003eu, 0x000071c9u, 0x0000241bu, 0x0003003eu, 0x000071cau, 0x0000241du, 0x0003003eu, 0x000071cbu, 0x0000241fu, 0x000500aau, 0x00000069u, 0x000021b0u, 0x0000241fu, 0x0000021au, 0x000300f7u, 0x000021b1u, 0x00000000u, 0x000400fau, 0x000021b0u, 0x000021b2u, 0x000021b1u, 0x000200f8u, 0x000021b2u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x000021b1u, 0x00070041u, 0x00000671u, 0x000021b4u, 0x00001bd9u, 0x00000220u, 0x00001fa1u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x000021b5u, 0x000021b4u, 0x00040071u, 0x00000006u, 0x000021b6u, 0x000021b5u, 0x0003003eu, 0x000020bau, 0x000021b6u, 0x0003003eu, 0x000020bcu, 0x00001fa1u, 0x00060041u, 0x00000222u, 0x00002425u, 0x0000021fu, 0x00000220u, 0x00001fa1u, 0x0004003du, 0x0000021bu, 0x00002426u, 0x00002425u, 0x00050051u, 0x00000009u, 0x00002427u, 0x00002426u, 0x00000000u, 0x0003003eu, 0x0000714du, 0x00002427u, 0x00050051u, 0x00000009u, 0x00002429u, 0x00002426u, 0x00000001u, 0x0003003eu, 0x0000714eu, 0x00002429u, 0x00050051u, 0x00000009u, 0x0000242bu, 0x00002426u, 0x00000002u, 0x0003003eu, 0x0000714fu, 0x0000242bu, 0x00050051u, 0x00000009u, 0x0000242du, 0x00002426u, 0x00000003u, 0x0003003eu, 0x00007150u, 0x0000242du, 0x00050051u, 0x00000009u, 0x0000242fu, 0x00002426u, 0x00000004u, 0x0003003eu, 0x00007151u, 0x0000242fu, 0x00050051u, 0x00000009u, 0x00002431u, 0x00002426u, 0x00000005u, 0x0003003eu, 0x00007152u, 0x00002431u, 0x00050051u, 0x00000009u, 0x00002433u, 0x00002426u, 0x00000006u, 0x0003003eu, 0x00007153u, 0x00002433u, 0x00050051u, 0x00000009u, 0x00002435u, 0x00002426u, 0x00000007u, 0x0003003eu, 0x00007154u, 0x00002435u, 0x000b0050u, 0x0000000au, 0x0000715du, 0x00002427u, 0x00002429u, 0x0000242bu, 0x0000242du, 0x0000242fu, 0x00002431u, 0x00002433u, 0x00002435u, 0x0003003eu, 0x0000715eu, 0x00002427u, 0x0003003eu, 0x0000715fu, 0x00002429u, 0x0003003eu, 0x00007160u, 0x0000242bu, 0x0003003eu, 0x00007161u, 0x0000242du, 0x0003003eu, 0x00007162u, 0x0000242fu, 0x0003003eu, 0x00007163u, 0x00002431u, 0x0003003eu, 0x00007164u, 0x00002433u, 0x0003003eu, 0x00007165u, 0x00002435u, 0x0003003eu, 0x000071e0u, 0x00002429u, 0x0003003eu, 0x000071e1u, 0x0000242du, 0x0003003eu, 0x000071e2u, 0x00002431u, 0x0003003eu, 0x000071e3u, 0x00002435u, 0x00070041u, 0x00001c0cu, 0x000021bau, 0x00000a20u, 0x00000220u, 0x00001fa1u, 0x00000220u, 0x0004003du, 0x00000010u, 0x000021bbu, 0x000021bau, 0x00040071u, 0x000004f7u, 0x000021bcu, 0x000021bbu, 0x0003003eu, 0x000020bdu, 0x000021bcu, 0x00050041u, 0x00000007u, 0x000021bdu, 0x000020bdu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000021beu, 0x000021bdu, 0x0003003eu, 0x000020beu, 0x000021beu, 0x00050041u, 0x00000007u, 0x000021bfu, 0x000020bdu, 0x00000386u, 0x0004003du, 0x00000006u, 0x000021c0u, 0x000021bfu, 0x0003003eu, 0x000020bfu, 0x000021c0u, 0x0003003eu, 0x000020c1u, 0x000021beu, 0x00060041u, 0x0000027au, 0x0000243bu, 0x00000278u, 0x00000220u, 0x000021beu, 0x0004003du, 0x00000274u, 0x0000243cu, 0x0000243bu, 0x00050051u, 0x00000010u, 0x0000243du, 0x0000243cu, 0x00000000u, 0x0003003eu, 0x00007123u, 0x0000243du, 0x00050051u, 0x00000010u, 0x0000243fu, 0x0000243cu, 0x00000001u, 0x0003003eu, 0x00007124u, 0x0000243fu, 0x00050051u, 0x00000010u, 0x00002441u, 0x0000243cu, 0x00000002u, 0x0003003eu, 0x00007125u, 0x00002441u, 0x00050051u, 0x00000010u, 0x00002443u, 0x0000243cu, 0x00000003u, 0x0003003eu, 0x00007126u, 0x00002443u, 0x00050051u, 0x00000006u, 0x00002445u, 0x0000243cu, 0x00000004u, 0x0003003eu, 0x00007127u, 0x00002445u, 0x00050051u, 0x00000008u, 0x00002447u, 0x0000243cu, 0x00000005u, 0x0003003eu, 0x00007128u, 0x00002447u, 0x00050051u, 0x00000008u, 0x00002449u, 0x0000243cu, 0x00000006u, 0x0003003eu, 0x00007129u, 0x00002449u, 0x00050051u, 0x00000008u, 0x0000244bu, 0x0000243cu, 0x00000007u, 0x0003003eu, 0x0000712au, 0x0000244bu, 0x000b0050u, 0x00000019u, 0x00007133u, 0x0000243du, 0x0000243fu, 0x00002441u, 0x00002443u, 0x00002445u, 0x00002447u, 0x00002449u, 0x0000244bu, 0x0003003eu, 0x00007134u, 0x0000243du, 0x0003003eu, 0x00007135u, 0x0000243fu, 0x0003003eu, 0x00007136u, 0x00002441u, 0x0003003eu, 0x00007137u, 0x00002443u, 0x0003003eu, 0x00007138u, 0x00002445u, 0x0003003eu, 0x00007139u, 0x00002447u, 0x0003003eu, 0x0000713au, 0x00002449u, 0x0003003eu, 0x0000713bu, 0x0000244bu, 0x0003003eu, 0x000071e8u, 0x0000243du, 0x0003003eu, 0x000071e9u, 0x0000243fu, 0x0003003eu, 0x000071eau, 0x00002441u, 0x0003003eu, 0x000071ebu, 0x00002443u, 0x0003003eu, 0x000071ecu, 0x00002445u, 0x0003003eu, 0x000071edu, 0x00002447u, 0x0003003eu, 0x000020c2u, 0x00002445u, 0x0003003eu, 0x000020c3u, 0x00002447u, 0x0003003eu, 0x000020c4u, 0x0000243du, 0x0003003eu, 0x000020c5u, 0x0000243fu, 0x0003003eu, 0x000020c6u, 0x00002441u, 0x0003003eu, 0x000020c7u, 0x00002443u, 0x000500c7u, 0x00000006u, 0x000021d0u, 0x00002445u, 0x00000330u, 0x000500abu, 0x00000069u, 0x000021d1u, 0x000021d0u, 0x0000032du, 0x0003003eu, 0x000020c8u, 0x000021d1u, 0x000500c7u, 0x00000006u, 0x000021d3u, 0x00002445u, 0x00000a44u, 0x000500abu, 0x00000069u, 0x000021d4u, 0x000021d3u, 0x0000032du, 0x0003003eu, 0x000020c9u, 0x000021d4u, 0x000500c7u, 0x00000006u, 0x000021d6u, 0x00002445u, 0x00001c36u, 0x000500abu, 0x00000069u, 0x000021d7u, 0x000021d6u, 0x0000032du, 0x0003003eu, 0x000020cau, 0x000021d7u, 0x000500c7u, 0x00000006u, 0x000021d9u, 0x00002445u, 0x00000a4au, 0x000500abu, 0x00000069u, 0x000021dau, 0x000021d9u, 0x0000032du, 0x0003003eu, 0x000020cbu, 0x000021dau, 0x000500c7u, 0x00000006u, 0x000021dcu, 0x00002445u, 0x00000a50u, 0x000500abu, 0x00000069u, 0x000021ddu, 0x000021dcu, 0x0000032du, 0x0003003eu, 0x000020ccu, 0x000021ddu, 0x000500c7u, 0x00000006u, 0x000021dfu, 0x00002445u, 0x00000314u, 0x000500abu, 0x00000069u, 0x000021e0u, 0x000021dfu, 0x0000032du, 0x0003003eu, 0x000020cdu, 0x000021e0u, 0x000500c7u, 0x00000006u, 0x000021e2u, 0x00002445u, 0x00001c47u, 0x000500abu, 0x00000069u, 0x000021e3u, 0x000021e2u, 0x0000032du, 0x0003003eu, 0x000020ceu, 0x000021e3u, 0x000500c7u, 0x00000006u, 0x000021e5u, 0x00002445u, 0x00000f5cu, 0x000500abu, 0x00000069u, 0x000021e6u, 0x000021e5u, 0x0000032du, 0x0003003eu, 0x000020cfu, 0x000021e6u, 0x000500c7u, 0x00000006u, 0x000021e8u, 0x00002445u, 0x00000f54u, 0x000500abu, 0x00000069u, 0x000021e9u, 0x000021e8u, 0x0000032du, 0x0003003eu, 0x000020d0u, 0x000021e9u, 0x000500c7u, 0x00000006u, 0x000021ebu, 0x00002445u, 0x00000704u, 0x000500abu, 0x00000069u, 0x000021ecu, 0x000021ebu, 0x0000032du, 0x0003003eu, 0x000020d1u, 0x000021ecu, 0x000500c7u, 0x00000006u, 0x000021eeu, 0x00002445u, 0x00000a56u, 0x000500abu, 0x00000069u, 0x000021efu, 0x000021eeu, 0x0000032du, 0x0003003eu, 0x000020d2u, 0x000021efu, 0x000500c7u, 0x00000006u, 0x000021f1u, 0x00002445u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x000021f2u, 0x000021f1u, 0x0000032du, 0x0003003eu, 0x000020d3u, 0x000021f2u, 0x000500c7u, 0x00000006u, 0x000021f4u, 0x00002445u, 0x00000e87u, 0x000500abu, 0x00000069u, 0x000021f5u, 0x000021f4u, 0x0000032du, 0x0003003eu, 0x000020d4u, 0x000021f5u, 0x000500c7u, 0x00000006u, 0x000021f7u, 0x00002445u, 0x00001c64u, 0x000500abu, 0x00000069u, 0x000021f8u, 0x000021f7u, 0x0000032du, 0x0003003eu, 0x000020d5u, 0x000021f8u, 0x000500c7u, 0x00000006u, 0x000021fau, 0x00002445u, 0x00001c69u, 0x000500abu, 0x00000069u, 0x000021fbu, 0x000021fau, 0x0000032du, 0x0003003eu, 0x000020d6u, 0x000021fbu, 0x000500c7u, 0x00000006u, 0x000021fdu, 0x00002445u, 0x00001c6eu, 0x000500abu, 0x00000069u, 0x000021feu, 0x000021fdu, 0x0000032du, 0x0003003eu, 0x000020d7u, 0x000021feu, 0x000500c7u, 0x00000006u, 0x00002200u, 0x00002445u, 0x00001c73u, 0x000500abu, 0x00000069u, 0x00002201u, 0x00002200u, 0x0000032du, 0x0003003eu, 0x000020d8u, 0x00002201u, 0x000500c7u, 0x00000006u, 0x00002203u, 0x00002445u, 0x00001c78u, 0x000500abu, 0x00000069u, 0x00002204u, 0x00002203u, 0x0000032du, 0x0003003eu, 0x000020d9u, 0x00002204u, 0x000500c7u, 0x00000006u, 0x00002206u, 0x00002445u, 0x00001c7du, 0x000500abu, 0x00000069u, 0x00002207u, 0x00002206u, 0x0000032du, 0x0003003eu, 0x000020dau, 0x00002207u, 0x000500c7u, 0x00000006u, 0x00002209u, 0x00002445u, 0x00001c82u, 0x000500abu, 0x00000069u, 0x0000220au, 0x00002209u, 0x0000032du, 0x0003003eu, 0x000020dbu, 0x0000220au, 0x000500c7u, 0x00000006u, 0x0000220cu, 0x00002445u, 0x00001c87u, 0x000500abu, 0x00000069u, 0x0000220du, 0x0000220cu, 0x0000032du, 0x0003003eu, 0x000020dcu, 0x0000220du, 0x000500c7u, 0x00000006u, 0x0000220fu, 0x00002445u, 0x00001c8cu, 0x000500abu, 0x00000069u, 0x00002210u, 0x0000220fu, 0x0000032du, 0x0003003eu, 0x000020ddu, 0x00002210u, 0x000500c7u, 0x00000006u, 0x00002212u, 0x00002445u, 0x00001c91u, 0x000500abu, 0x00000069u, 0x00002213u, 0x00002212u, 0x0000032du, 0x0003003eu, 0x000020deu, 0x00002213u, 0x000500c7u, 0x00000006u, 0x00002215u, 0x00002445u, 0x00001c96u, 0x000500abu, 0x00000069u, 0x00002216u, 0x00002215u, 0x0000032du, 0x0003003eu, 0x000020dfu, 0x00002216u, 0x000500c7u, 0x00000006u, 0x00002218u, 0x00002445u, 0x00001c9au, 0x000500abu, 0x00000069u, 0x00002219u, 0x00002218u, 0x0000032du, 0x000300f7u, 0x0000221au, 0x00000000u, 0x000400fau, 0x00002219u, 0x0000221bu, 0x0000221au, 0x000200f8u, 0x0000221bu, 0x0004007cu, 0x00000006u, 0x0000221du, 0x00007f1eu, 0x0004007cu, 0x00000006u, 0x0000221fu, 0x00007f17u, 0x00060041u, 0x00001ca4u, 0x00002221u, 0x00000cd7u, 0x00000220u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00002222u, 0x00002221u, 0x00050080u, 0x00000006u, 0x00002223u, 0x00001fa1u, 0x00002222u, 0x0003003eu, 0x000020e0u, 0x0000221du, 0x0003003eu, 0x000020e1u, 0x0000221fu, 0x0003003eu, 0x000020e2u, 0x00002223u, 0x00060050u, 0x0000030cu, 0x00002452u, 0x0000221du, 0x0000221fu, 0x00002223u, 0x0003003eu, 0x0000244eu, 0x00002452u, 0x0004003du, 0x0000030cu, 0x00002453u, 0x0000244eu, 0x000500c2u, 0x0000030cu, 0x00002455u, 0x00002453u, 0x0000f39bu, 0x0004003du, 0x0000030cu, 0x00002456u, 0x0000244eu, 0x0008004fu, 0x0000030cu, 0x00002457u, 0x00002456u, 0x00002456u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00002458u, 0x00002455u, 0x00002457u, 0x00050084u, 0x0000030cu, 0x0000245au, 0x00002458u, 0x0000f39cu, 0x0003003eu, 0x0000244eu, 0x0000245au, 0x0004003du, 0x0000030cu, 0x0000245bu, 0x0000244eu, 0x000500c2u, 0x0000030cu, 0x0000245du, 0x0000245bu, 0x0000f39bu, 0x0004003du, 0x0000030cu, 0x0000245eu, 0x0000244eu, 0x0008004fu, 0x0000030cu, 0x0000245fu, 0x0000245eu, 0x0000245eu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00002460u, 0x0000245du, 0x0000245fu, 0x00050084u, 0x0000030cu, 0x00002462u, 0x00002460u, 0x0000f39cu, 0x0003003eu, 0x0000244eu, 0x00002462u, 0x0004003du, 0x0000030cu, 0x00002463u, 0x0000244eu, 0x000500c2u, 0x0000030cu, 0x00002465u, 0x00002463u, 0x0000f39bu, 0x0004003du, 0x0000030cu, 0x00002466u, 0x0000244eu, 0x0008004fu, 0x0000030cu, 0x00002467u, 0x00002466u, 0x00002466u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00002468u, 0x00002465u, 0x00002467u, 0x00050084u, 0x0000030cu, 0x0000246au, 0x00002468u, 0x0000f39cu, 0x0003003eu, 0x0000244eu, 0x0000246au, 0x00050041u, 0x00000007u, 0x0000246bu, 0x0000244eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000246cu, 0x0000246bu, 0x000500c2u, 0x00000006u, 0x0000246du, 0x0000246cu, 0x00000330u, 0x00040071u, 0x00000011u, 0x0000246eu, 0x0000246du, 0x0003003eu, 0x00000219u, 0x0000246eu, 0x000200f9u, 0x0000221au, 0x000200f8u, 0x0000221au, 0x000500c7u, 0x00000006u, 0x00002226u, 0x00002197u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00002227u, 0x00002226u, 0x0000032du, 0x0003003eu, 0x000020e3u, 0x00002227u, 0x000300f7u, 0x00002229u, 0x00000000u, 0x000400fau, 0x000021f8u, 0x0000222au, 0x0000222bu, 0x000200f8u, 0x0000222bu, 0x000300f7u, 0x00002267u, 0x00000000u, 0x000400fau, 0x000021f5u, 0x00002268u, 0x00002267u, 0x000200f8u, 0x00002268u, 0x0003003eu, 0x00007cfau, 0x00000627u, 0x000500afu, 0x00000069u, 0x0000226du, 0x00007f1eu, 0x00002419u, 0x000300f7u, 0x0000226eu, 0x00000000u, 0x000400fau, 0x0000226du, 0x0000226fu, 0x0000226eu, 0x000200f8u, 0x0000226fu, 0x000500b3u, 0x00000069u, 0x00002273u, 0x00007f1eu, 0x0000241bu, 0x000200f9u, 0x0000226eu, 0x000200f8u, 0x0000226eu, 0x000700f5u, 0x00000069u, 0x00002274u, 0x0000226du, 0x00002268u, 0x00002273u, 0x0000226fu, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00002274u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x00002267u, 0x000200f9u, 0x00002229u, 0x000200f8u, 0x0000222au, 0x000500afu, 0x00000069u, 0x0000222fu, 0x00007f1eu, 0x00002419u, 0x000300f7u, 0x00002230u, 0x00000000u, 0x000400fau, 0x0000222fu, 0x00002231u, 0x00002230u, 0x000200f8u, 0x00002231u, 0x000500b3u, 0x00000069u, 0x00002235u, 0x00007f1eu, 0x0000241bu, 0x000200f9u, 0x00002230u, 0x000200f8u, 0x00002230u, 0x000700f5u, 0x00000069u, 0x00002236u, 0x0000222fu, 0x0000222au, 0x00002235u, 0x00002231u, 0x0003003eu, 0x000020e4u, 0x00002236u, 0x000400a8u, 0x00000069u, 0x00002238u, 0x00002236u, 0x000300f7u, 0x00002239u, 0x00000000u, 0x000400fau, 0x00002238u, 0x0000223au, 0x00002239u, 0x000200f8u, 0x0000223au, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x00002239u, 0x0003003eu, 0x000071f4u, 0x00002411u, 0x0003003eu, 0x000071f6u, 0x00002419u, 0x0003003eu, 0x000071f7u, 0x0000241bu, 0x0003003eu, 0x000020e8u, 0x00002431u, 0x0003003eu, 0x000020e9u, 0x00007f1eu, 0x0003003eu, 0x000020eau, 0x000021e0u, 0x0003003eu, 0x000020ebu, 0x00002227u, 0x000300f7u, 0x00002479u, 0x00000000u, 0x000400fau, 0x00002227u, 0x0000247au, 0x0000247bu, 0x000200f8u, 0x0000247bu, 0x00050082u, 0x00000008u, 0x00002483u, 0x0000241bu, 0x00007f1eu, 0x0003003eu, 0x00002470u, 0x00002483u, 0x000200f9u, 0x00002479u, 0x000200f8u, 0x0000247au, 0x00050082u, 0x00000008u, 0x0000247fu, 0x00007f1eu, 0x00002419u, 0x0003003eu, 0x00002470u, 0x0000247fu, 0x000200f9u, 0x00002479u, 0x000200f8u, 0x00002479u, 0x000700f5u, 0x00000008u, 0x0000bd82u, 0x0000247fu, 0x0000247au, 0x00002483u, 0x0000247bu, 0x0003003eu, 0x0000246fu, 0x0000bd82u, 0x000500c3u, 0x00000008u, 0x00002486u, 0x0000bd82u, 0x0000078bu, 0x0003003eu, 0x0000246fu, 0x00002486u, 0x00060041u, 0x00000cd8u, 0x00002488u, 0x00000cd7u, 0x00000220u, 0x0000022au, 0x0004003du, 0x00000008u, 0x00002489u, 0x00002488u, 0x000500c7u, 0x00000008u, 0x0000248au, 0x00002486u, 0x00002489u, 0x0003003eu, 0x00002471u, 0x0000248au, 0x00050082u, 0x00000008u, 0x0000248du, 0x00002486u, 0x0000248au, 0x0003003eu, 0x000020edu, 0x0000248du, 0x00060041u, 0x00000cd8u, 0x0000248fu, 0x00000cd7u, 0x00000220u, 0x00000220u, 0x0004003du, 0x00000008u, 0x00002490u, 0x0000248fu, 0x000500c3u, 0x00000008u, 0x00002491u, 0x00002486u, 0x00002490u, 0x000600a9u, 0x00000008u, 0x00002493u, 0x00002227u, 0x0000022au, 0x00000ce5u, 0x00050084u, 0x00000008u, 0x00002494u, 0x00002491u, 0x00002493u, 0x0003003eu, 0x00002472u, 0x00002494u, 0x0008004fu, 0x00000044u, 0x00002497u, 0x00002411u, 0x00002411u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x00000044u, 0x00002499u, 0x00002431u, 0x00002431u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x0000249bu, 0x00002499u, 0x0000f39du, 0x00060050u, 0x00000044u, 0x0000249du, 0x00002494u, 0x00002494u, 0x00002494u, 0x00050084u, 0x00000044u, 0x0000249eu, 0x0000249bu, 0x0000249du, 0x00050080u, 0x00000044u, 0x0000249fu, 0x00002497u, 0x0000249eu, 0x0003003eu, 0x00002473u, 0x0000249fu, 0x000300f7u, 0x000024a1u, 0x00000000u, 0x000400fau, 0x000021e0u, 0x000024a2u, 0x000024a3u, 0x000200f8u, 0x000024a3u, 0x000500c3u, 0x00000044u, 0x000024acu, 0x0000249fu, 0x0000f39eu, 0x0003003eu, 0x00002477u, 0x000024acu, 0x0007004fu, 0x000000efu, 0x00002534u, 0x000024acu, 0x000024acu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002532u, 0x00002534u, 0x0003003eu, 0x000020ecu, 0x00002534u, 0x000200f9u, 0x000024a1u, 0x000200f8u, 0x000024a2u, 0x000500c3u, 0x00000044u, 0x000024a6u, 0x0000249fu, 0x0000f39eu, 0x0003003eu, 0x00002475u, 0x000024a6u, 0x0003003eu, 0x00002476u, 0x0000bd8cu, 0x00050041u, 0x00000046u, 0x000024b8u, 0x00002475u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000024b9u, 0x000024b8u, 0x0003003eu, 0x000024aeu, 0x000024b9u, 0x000500b3u, 0x00000069u, 0x000024bbu, 0x000024b9u, 0x00000220u, 0x0003003eu, 0x000024afu, 0x000024bbu, 0x000500c7u, 0x00000008u, 0x000024bdu, 0x000024b9u, 0x00000c1bu, 0x0003003eu, 0x000024aeu, 0x000024bdu, 0x0003003eu, 0x000024b1u, 0x000024bdu, 0x0006000cu, 0x00000008u, 0x00002519u, 0x00000001u, 0x0000004au, 0x000024bdu, 0x00050082u, 0x00000008u, 0x0000251au, 0x0000026fu, 0x00002519u, 0x0007000cu, 0x00000008u, 0x0000251bu, 0x00000001u, 0x00000027u, 0x0000251au, 0x0000026fu, 0x0003003eu, 0x00002511u, 0x0000251bu, 0x000500c4u, 0x00000008u, 0x0000251eu, 0x000024bdu, 0x0000251bu, 0x000500c7u, 0x00000008u, 0x0000251fu, 0x0000251eu, 0x00000b37u, 0x0003003eu, 0x00002512u, 0x0000251fu, 0x000500c7u, 0x00000008u, 0x00002521u, 0x0000251fu, 0x0000035eu, 0x0003003eu, 0x00002513u, 0x00002521u, 0x000500c3u, 0x00000008u, 0x00002523u, 0x0000251fu, 0x0000025du, 0x0003003eu, 0x00002515u, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x00002524u, 0x00002515u, 0x00002523u, 0x0004003du, 0x000001aeu, 0x00002525u, 0x00002524u, 0x00040072u, 0x000000efu, 0x00002526u, 0x00002525u, 0x0003003eu, 0x00002514u, 0x00002526u, 0x00050041u, 0x00000046u, 0x00002527u, 0x00002514u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002528u, 0x00002527u, 0x00050084u, 0x00000008u, 0x0000252au, 0x00002528u, 0x00002521u, 0x000500c3u, 0x00000008u, 0x0000252bu, 0x0000252au, 0x00000263u, 0x00050041u, 0x00000046u, 0x0000252cu, 0x00002514u, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000252du, 0x0000252cu, 0x00050080u, 0x00000008u, 0x0000252eu, 0x0000252bu, 0x0000252du, 0x0003003eu, 0x00002516u, 0x0000252eu, 0x00050050u, 0x000000efu, 0x00002531u, 0x0000252eu, 0x0000251bu, 0x0003003eu, 0x00002517u, 0x00002531u, 0x0003003eu, 0x000024b0u, 0x00002531u, 0x00050041u, 0x00000046u, 0x000024c0u, 0x000024b0u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000024c1u, 0x000024c0u, 0x0003003eu, 0x000024b2u, 0x000024c1u, 0x0004003du, 0x00000044u, 0x000024c2u, 0x00002475u, 0x0007004fu, 0x000000efu, 0x000024c3u, 0x000024c2u, 0x000024c2u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x000024c4u, 0x000024b0u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000024c5u, 0x000024c4u, 0x00050050u, 0x000000efu, 0x000024c6u, 0x000024c5u, 0x000024c5u, 0x00050084u, 0x000000efu, 0x000024c7u, 0x000024c3u, 0x000024c6u, 0x0003003eu, 0x000024b3u, 0x000024c7u, 0x000500c3u, 0x00000008u, 0x000024c9u, 0x00000c2eu, 0x000024c1u, 0x0004007eu, 0x00000008u, 0x000024cau, 0x000024c9u, 0x000500c7u, 0x00000008u, 0x000024cbu, 0x00000c2du, 0x000024cau, 0x0003003eu, 0x000024b4u, 0x000024cbu, 0x0004003du, 0x000000efu, 0x000024ccu, 0x000024b3u, 0x00050050u, 0x000000efu, 0x000024ceu, 0x000024cbu, 0x000024cbu, 0x000500c7u, 0x000000efu, 0x000024cfu, 0x000024ccu, 0x000024ceu, 0x0003003eu, 0x000024b5u, 0x000024cfu, 0x000500abu, 0x00000069u, 0x000024d1u, 0x000024c1u, 0x0000026fu, 0x000300f7u, 0x000024d2u, 0x00000000u, 0x000400fau, 0x000024d1u, 0x000024d3u, 0x000024d4u, 0x000200f8u, 0x000024d4u, 0x0004003du, 0x000000efu, 0x000024dau, 0x000024b3u, 0x000500c4u, 0x000000efu, 0x000024dcu, 0x000024dau, 0x0000f3a2u, 0x0003003eu, 0x000024b6u, 0x000024dcu, 0x000200f9u, 0x000024d2u, 0x000200f8u, 0x000024d3u, 0x0004003du, 0x000000efu, 0x000024d5u, 0x000024b3u, 0x00050082u, 0x00000008u, 0x000024d7u, 0x0000026cu, 0x000024c1u, 0x00050050u, 0x000000efu, 0x000024d8u, 0x000024d7u, 0x000024d7u, 0x000500c3u, 0x000000efu, 0x000024d9u, 0x000024d5u, 0x000024d8u, 0x0003003eu, 0x000024b3u, 0x000024d9u, 0x0003003eu, 0x000024b6u, 0x000024d9u, 0x000200f9u, 0x000024d2u, 0x000200f8u, 0x000024d2u, 0x0004003du, 0x000000efu, 0x000024ddu, 0x000024b5u, 0x000500abu, 0x0000087bu, 0x000024deu, 0x000024ddu, 0x00000c47u, 0x0004009au, 0x00000069u, 0x000024dfu, 0x000024deu, 0x000300f7u, 0x000024e0u, 0x00000000u, 0x000400fau, 0x000024dfu, 0x000024e1u, 0x000024e0u, 0x000200f8u, 0x000024e1u, 0x00050041u, 0x00000046u, 0x000024e2u, 0x000024b5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000024e3u, 0x000024e2u, 0x000500abu, 0x00000069u, 0x000024e5u, 0x000024e3u, 0x000024cbu, 0x000300f7u, 0x000024e6u, 0x00000000u, 0x000400fau, 0x000024e5u, 0x000024e7u, 0x000024e6u, 0x000200f8u, 0x000024e7u, 0x0004003du, 0x00000008u, 0x000024e9u, 0x000024e2u, 0x000500abu, 0x00000069u, 0x000024eau, 0x000024e9u, 0x00000220u, 0x000200f9u, 0x000024e6u, 0x000200f8u, 0x000024e6u, 0x000700f5u, 0x00000069u, 0x000024ebu, 0x000024e5u, 0x000024e1u, 0x000024eau, 0x000024e7u, 0x000300f7u, 0x000024ecu, 0x00000000u, 0x000400fau, 0x000024ebu, 0x000024edu, 0x000024ecu, 0x000200f8u, 0x000024edu, 0x00050041u, 0x00000046u, 0x000024eeu, 0x000024b3u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000024efu, 0x000024eeu, 0x000500c7u, 0x00000008u, 0x000024f0u, 0x000024efu, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x000024f1u, 0x000024f0u, 0x00000220u, 0x000300f7u, 0x000024f2u, 0x00000000u, 0x000400fau, 0x000024f1u, 0x000024f3u, 0x000024f4u, 0x000200f8u, 0x000024f4u, 0x00050041u, 0x00000046u, 0x000024f6u, 0x000024b6u, 0x0000032du, 0x0003003eu, 0x000024f6u, 0x00000c60u, 0x000200f9u, 0x000024f2u, 0x000200f8u, 0x000024f3u, 0x00050041u, 0x00000046u, 0x000024f5u, 0x000024b6u, 0x0000032du, 0x0003003eu, 0x000024f5u, 0x00000c1bu, 0x000200f9u, 0x000024f2u, 0x000200f8u, 0x000024f2u, 0x0003003eu, 0x00002476u, 0x00000559u, 0x000200f9u, 0x000024ecu, 0x000200f8u, 0x000024ecu, 0x000600a9u, 0x00000069u, 0x0000f3bcu, 0x000024ebu, 0x00000559u, 0x0000bd8cu, 0x00050041u, 0x00000046u, 0x000024f7u, 0x000024b5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000024f8u, 0x000024f7u, 0x000500abu, 0x00000069u, 0x000024fau, 0x000024f8u, 0x000024cbu, 0x000300f7u, 0x000024fbu, 0x00000000u, 0x000400fau, 0x000024fau, 0x000024fcu, 0x000024fbu, 0x000200f8u, 0x000024fcu, 0x0004003du, 0x00000008u, 0x000024feu, 0x000024f7u, 0x000500abu, 0x00000069u, 0x000024ffu, 0x000024feu, 0x00000220u, 0x000200f9u, 0x000024fbu, 0x000200f8u, 0x000024fbu, 0x000700f5u, 0x00000069u, 0x00002500u, 0x000024fau, 0x000024ecu, 0x000024ffu, 0x000024fcu, 0x000300f7u, 0x00002501u, 0x00000000u, 0x000400fau, 0x00002500u, 0x00002502u, 0x00002501u, 0x000200f8u, 0x00002502u, 0x00050041u, 0x00000046u, 0x00002503u, 0x000024b3u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002504u, 0x00002503u, 0x000500c7u, 0x00000008u, 0x00002505u, 0x00002504u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002506u, 0x00002505u, 0x00000220u, 0x000300f7u, 0x00002507u, 0x00000000u, 0x000400fau, 0x00002506u, 0x00002508u, 0x00002509u, 0x000200f8u, 0x00002509u, 0x00050041u, 0x00000046u, 0x0000250bu, 0x000024b6u, 0x0000045cu, 0x0003003eu, 0x0000250bu, 0x00000c60u, 0x000200f9u, 0x00002507u, 0x000200f8u, 0x00002508u, 0x00050041u, 0x00000046u, 0x0000250au, 0x000024b6u, 0x0000045cu, 0x0003003eu, 0x0000250au, 0x00000c1bu, 0x000200f9u, 0x00002507u, 0x000200f8u, 0x00002507u, 0x0003003eu, 0x00002476u, 0x00000559u, 0x000200f9u, 0x00002501u, 0x000200f8u, 0x00002501u, 0x000600a9u, 0x00000069u, 0x0000f3bdu, 0x00002500u, 0x00000559u, 0x0000f3bcu, 0x000200f9u, 0x000024e0u, 0x000200f8u, 0x000024e0u, 0x000700f5u, 0x00000069u, 0x0000bd9fu, 0x0000bd8cu, 0x000024d2u, 0x0000f3bdu, 0x00002501u, 0x000300f7u, 0x0000250du, 0x00000000u, 0x000400fau, 0x000024bbu, 0x0000250eu, 0x0000250du, 0x000200f8u, 0x0000250eu, 0x0003003eu, 0x000024b6u, 0x00000c7au, 0x0003003eu, 0x00002476u, 0x00000559u, 0x000200f9u, 0x0000250du, 0x000200f8u, 0x0000250du, 0x000600a9u, 0x00000069u, 0x0000f3beu, 0x000024bbu, 0x00000559u, 0x0000bd9fu, 0x0004003du, 0x000000efu, 0x0000250fu, 0x000024b6u, 0x0008000cu, 0x000000efu, 0x00002510u, 0x00000001u, 0x0000002du, 0x0000250fu, 0x00000c7du, 0x00000c7eu, 0x0003003eu, 0x000024b7u, 0x00002510u, 0x0003003eu, 0x00002474u, 0x0000f3beu, 0x0003003eu, 0x000020ecu, 0x00002510u, 0x000200f9u, 0x000024a1u, 0x000200f8u, 0x000024a1u, 0x000700f5u, 0x00000069u, 0x0000eb4fu, 0x0000f3beu, 0x0000250du, 0x0000bd8cu, 0x000024a3u, 0x000700f5u, 0x000000efu, 0x0000bda5u, 0x00002510u, 0x0000250du, 0x00002534u, 0x000024a3u, 0x0003003eu, 0x000020e5u, 0x0000bda5u, 0x0003003eu, 0x000020e6u, 0x0000248du, 0x000500c7u, 0x00000006u, 0x00002245u, 0x000021b6u, 0x00000742u, 0x0003003eu, 0x000020eeu, 0x00002245u, 0x00080041u, 0x00000671u, 0x00002248u, 0x00000a20u, 0x00000220u, 0x00001fa1u, 0x0000022du, 0x00002245u, 0x0004003du, 0x0000000fu, 0x00002249u, 0x00002248u, 0x00040071u, 0x00000006u, 0x0000224au, 0x00002249u, 0x0003003eu, 0x000020efu, 0x0000224au, 0x0003003eu, 0x000020f1u, 0x0000224au, 0x00060041u, 0x000002b4u, 0x00002538u, 0x000002b2u, 0x00000220u, 0x0000224au, 0x0004003du, 0x000002aeu, 0x00002539u, 0x00002538u, 0x00050051u, 0x00000006u, 0x0000253au, 0x00002539u, 0x00000000u, 0x0003003eu, 0x000070dbu, 0x0000253au, 0x00050051u, 0x00000006u, 0x0000253cu, 0x00002539u, 0x00000001u, 0x0003003eu, 0x000070dcu, 0x0000253cu, 0x00050051u, 0x00000006u, 0x0000253eu, 0x00002539u, 0x00000002u, 0x0003003eu, 0x000070ddu, 0x0000253eu, 0x00050051u, 0x00000006u, 0x00002540u, 0x00002539u, 0x00000003u, 0x0003003eu, 0x000070deu, 0x00002540u, 0x00050051u, 0x00000006u, 0x00002542u, 0x00002539u, 0x00000004u, 0x0003003eu, 0x000070dfu, 0x00002542u, 0x00050051u, 0x00000006u, 0x00002544u, 0x00002539u, 0x00000005u, 0x0003003eu, 0x000070e0u, 0x00002544u, 0x00050051u, 0x0000000fu, 0x00002546u, 0x00002539u, 0x00000006u, 0x0003003eu, 0x000070e1u, 0x00002546u, 0x00050051u, 0x0000000fu, 0x00002548u, 0x00002539u, 0x00000007u, 0x0003003eu, 0x000070e2u, 0x00002548u, 0x00050051u, 0x0000000fu, 0x0000254au, 0x00002539u, 0x00000008u, 0x0003003eu, 0x000070e3u, 0x0000254au, 0x00050051u, 0x0000000fu, 0x0000254cu, 0x00002539u, 0x00000009u, 0x0003003eu, 0x000070e4u, 0x0000254cu, 0x00050051u, 0x0000000fu, 0x0000254eu, 0x00002539u, 0x0000000au, 0x0003003eu, 0x000070e5u, 0x0000254eu, 0x00050051u, 0x0000000fu, 0x00002550u, 0x00002539u, 0x0000000bu, 0x0003003eu, 0x000070e6u, 0x00002550u, 0x00050051u, 0x0000000fu, 0x00002552u, 0x00002539u, 0x0000000cu, 0x0003003eu, 0x000070e7u, 0x00002552u, 0x00050051u, 0x0000000fu, 0x00002554u, 0x00002539u, 0x0000000du, 0x0003003eu, 0x000070e8u, 0x00002554u, 0x00110050u, 0x00000023u, 0x000070f7u, 0x0000253au, 0x0000253cu, 0x0000253eu, 0x00002540u, 0x00002542u, 0x00002544u, 0x00002546u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x0000254eu, 0x00002550u, 0x00002552u, 0x00002554u, 0x0003003eu, 0x000070f8u, 0x0000253au, 0x0003003eu, 0x000070f9u, 0x0000253cu, 0x0003003eu, 0x000070fau, 0x0000253eu, 0x0003003eu, 0x000070fbu, 0x00002540u, 0x0003003eu, 0x000070fcu, 0x00002542u, 0x0003003eu, 0x000070fdu, 0x00002544u, 0x0003003eu, 0x000070feu, 0x00002546u, 0x0003003eu, 0x000070ffu, 0x00002548u, 0x0003003eu, 0x00007100u, 0x0000254au, 0x0003003eu, 0x00007101u, 0x0000254cu, 0x0003003eu, 0x00007102u, 0x0000254eu, 0x0003003eu, 0x00007103u, 0x00002550u, 0x0003003eu, 0x00007104u, 0x00002552u, 0x0003003eu, 0x00007105u, 0x00002554u, 0x0003003eu, 0x000071fcu, 0x0000253au, 0x0003003eu, 0x000071fdu, 0x0000253cu, 0x0003003eu, 0x000071feu, 0x0000253eu, 0x0003003eu, 0x000071ffu, 0x00002540u, 0x0003003eu, 0x00007200u, 0x00002542u, 0x0003003eu, 0x00007201u, 0x00002544u, 0x0003003eu, 0x00007202u, 0x00002546u, 0x0003003eu, 0x00007203u, 0x00002548u, 0x0003003eu, 0x00007204u, 0x0000254au, 0x0003003eu, 0x00007205u, 0x0000254cu, 0x0003003eu, 0x00007206u, 0x0000254eu, 0x0003003eu, 0x00007207u, 0x00002550u, 0x0003003eu, 0x00007208u, 0x00002552u, 0x0003003eu, 0x00007209u, 0x00002554u, 0x0003003eu, 0x00007227u, 0x0000253au, 0x0003003eu, 0x00007228u, 0x0000253eu, 0x0003003eu, 0x00007229u, 0x00002542u, 0x0003003eu, 0x0000722au, 0x00002544u, 0x0003003eu, 0x0000722bu, 0x00002548u, 0x0003003eu, 0x0000722cu, 0x0000254au, 0x0003003eu, 0x0000722du, 0x0000254cu, 0x0003003eu, 0x0000722eu, 0x0000254eu, 0x0003003eu, 0x0000722fu, 0x00002550u, 0x0003003eu, 0x00007230u, 0x00002552u, 0x0003003eu, 0x00007231u, 0x00002554u, 0x0003003eu, 0x000020f4u, 0x000021c0u, 0x0003003eu, 0x000020f5u, 0x0000bda5u, 0x0003003eu, 0x000020f6u, 0x0000248du, 0x0003003eu, 0x000020f7u, 0x000021d1u, 0x0003003eu, 0x000020f8u, 0x000021d4u, 0x0004007cu, 0x00000008u, 0x0000256du, 0x0000253au, 0x00040071u, 0x00000006u, 0x00002570u, 0x0000254eu, 0x0004007cu, 0x00000008u, 0x00002571u, 0x00002570u, 0x00050041u, 0x00000046u, 0x00002572u, 0x000020f5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002573u, 0x00002572u, 0x0003003eu, 0x00002557u, 0x00002573u, 0x0003003eu, 0x00002558u, 0x0000256du, 0x0003003eu, 0x00002559u, 0x00002571u, 0x0008000cu, 0x00000008u, 0x000025aau, 0x00000001u, 0x0000002du, 0x00002573u, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x00002557u, 0x000025aau, 0x000500b1u, 0x00000069u, 0x000025acu, 0x00002571u, 0x00000266u, 0x000300f7u, 0x000025adu, 0x00000000u, 0x000400fau, 0x000025acu, 0x000025aeu, 0x000025afu, 0x000200f8u, 0x000025afu, 0x00050082u, 0x00000008u, 0x000025b4u, 0x0000115du, 0x00002571u, 0x000500c4u, 0x00000008u, 0x000025b6u, 0x000025aau, 0x000025b4u, 0x0003003eu, 0x00002557u, 0x000025b6u, 0x000500c3u, 0x00000008u, 0x000025b8u, 0x000025b6u, 0x00000554u, 0x0003003eu, 0x00002557u, 0x000025b8u, 0x000200f9u, 0x000025adu, 0x000200f8u, 0x000025aeu, 0x000500c3u, 0x00000008u, 0x000025b2u, 0x000025aau, 0x00002571u, 0x0003003eu, 0x00002557u, 0x000025b2u, 0x000200f9u, 0x000025adu, 0x000200f8u, 0x000025adu, 0x000700f5u, 0x00000008u, 0x0000bdedu, 0x000025b2u, 0x000025aeu, 0x000025b8u, 0x000025afu, 0x000500c4u, 0x00000008u, 0x000025bau, 0x0000256du, 0x00000230u, 0x00050082u, 0x00000008u, 0x000025bcu, 0x0000bdedu, 0x000025bau, 0x0003003eu, 0x00002557u, 0x000025bcu, 0x0003003eu, 0x000025a8u, 0x000025bcu, 0x0003003eu, 0x00002572u, 0x000025bcu, 0x0004007cu, 0x00000008u, 0x00002578u, 0x0000253eu, 0x00040071u, 0x00000006u, 0x0000257bu, 0x00002552u, 0x0004007cu, 0x00000008u, 0x0000257cu, 0x0000257bu, 0x00050041u, 0x00000046u, 0x0000257du, 0x000020f5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000257eu, 0x0000257du, 0x0003003eu, 0x0000255au, 0x0000257eu, 0x0003003eu, 0x0000255bu, 0x00002578u, 0x0003003eu, 0x0000255cu, 0x0000257cu, 0x0008000cu, 0x00000008u, 0x000025c0u, 0x00000001u, 0x0000002du, 0x0000257eu, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x0000255au, 0x000025c0u, 0x000500b1u, 0x00000069u, 0x000025c2u, 0x0000257cu, 0x00000266u, 0x000300f7u, 0x000025c3u, 0x00000000u, 0x000400fau, 0x000025c2u, 0x000025c4u, 0x000025c5u, 0x000200f8u, 0x000025c5u, 0x00050082u, 0x00000008u, 0x000025cau, 0x0000115du, 0x0000257cu, 0x000500c4u, 0x00000008u, 0x000025ccu, 0x000025c0u, 0x000025cau, 0x0003003eu, 0x0000255au, 0x000025ccu, 0x000500c3u, 0x00000008u, 0x000025ceu, 0x000025ccu, 0x00000554u, 0x0003003eu, 0x0000255au, 0x000025ceu, 0x000200f9u, 0x000025c3u, 0x000200f8u, 0x000025c4u, 0x000500c3u, 0x00000008u, 0x000025c8u, 0x000025c0u, 0x0000257cu, 0x0003003eu, 0x0000255au, 0x000025c8u, 0x000200f9u, 0x000025c3u, 0x000200f8u, 0x000025c3u, 0x000700f5u, 0x00000008u, 0x0000bdf1u, 0x000025c8u, 0x000025c4u, 0x000025ceu, 0x000025c5u, 0x000500c4u, 0x00000008u, 0x000025d0u, 0x00002578u, 0x00000230u, 0x00050082u, 0x00000008u, 0x000025d2u, 0x0000bdf1u, 0x000025d0u, 0x0003003eu, 0x0000255au, 0x000025d2u, 0x0003003eu, 0x000025beu, 0x000025d2u, 0x0003003eu, 0x0000257du, 0x000025d2u, 0x0004003du, 0x000000efu, 0x00002581u, 0x000020f5u, 0x000500c3u, 0x000000efu, 0x00002583u, 0x00002581u, 0x0000f3a4u, 0x0003003eu, 0x000020f5u, 0x00002583u, 0x00060041u, 0x00000cd8u, 0x00002584u, 0x00000cd7u, 0x00000220u, 0x0000022du, 0x0004003du, 0x00000008u, 0x00002585u, 0x00002584u, 0x000500aau, 0x00000069u, 0x00002586u, 0x00002585u, 0x00000220u, 0x000300f7u, 0x00002587u, 0x00000000u, 0x000400fau, 0x00002586u, 0x00002588u, 0x00002589u, 0x000200f8u, 0x00002589u, 0x000500aau, 0x00000069u, 0x0000258cu, 0x00002585u, 0x0000022au, 0x000300f7u, 0x0000258du, 0x00000000u, 0x000400fau, 0x0000258cu, 0x0000258eu, 0x0000258fu, 0x000200f8u, 0x0000258fu, 0x00110050u, 0x00000023u, 0x00007254u, 0x0000253au, 0x00006c13u, 0x0000253eu, 0x00006c13u, 0x00002542u, 0x00002544u, 0x00006c16u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x0000254eu, 0x00002550u, 0x00002552u, 0x00002554u, 0x0003003eu, 0x000070adu, 0x00002542u, 0x0003003eu, 0x000070aeu, 0x00002544u, 0x0003003eu, 0x000070afu, 0x00002548u, 0x0003003eu, 0x000070b0u, 0x0000254au, 0x0003003eu, 0x000070b1u, 0x0000254cu, 0x0003003eu, 0x000070b2u, 0x00002550u, 0x0003003eu, 0x000070b3u, 0x00002554u, 0x0003003eu, 0x00002565u, 0x000021c0u, 0x0004003du, 0x000000efu, 0x000025a2u, 0x000020f5u, 0x0003003eu, 0x00002566u, 0x000025a2u, 0x0003003eu, 0x00002567u, 0x0000248du, 0x0003003eu, 0x00002568u, 0x000021d1u, 0x0003003eu, 0x00002569u, 0x000021d4u, 0x000500b1u, 0x00000069u, 0x0000279au, 0x0000248du, 0x0000022du, 0x0003003eu, 0x0000277eu, 0x0000279au, 0x000300f7u, 0x0000279cu, 0x00000000u, 0x000400fau, 0x0000279au, 0x0000279du, 0x0000279cu, 0x000200f8u, 0x0000279du, 0x00040071u, 0x00000006u, 0x000027a0u, 0x00002548u, 0x0004007cu, 0x00000008u, 0x000027a1u, 0x000027a0u, 0x000500abu, 0x00000069u, 0x000027a2u, 0x000027a1u, 0x0000022du, 0x000200f9u, 0x0000279cu, 0x000200f8u, 0x0000279cu, 0x000700f5u, 0x00000069u, 0x000027a3u, 0x0000279au, 0x0000258fu, 0x000027a2u, 0x0000279du, 0x000400a8u, 0x00000069u, 0x000027a5u, 0x000021d1u, 0x000500a7u, 0x00000069u, 0x000027a6u, 0x000027a3u, 0x000027a5u, 0x0003003eu, 0x0000277fu, 0x000027a6u, 0x00040071u, 0x00000006u, 0x000027a9u, 0x00002548u, 0x0004007cu, 0x00000008u, 0x000027aau, 0x000027a9u, 0x0007000cu, 0x00000008u, 0x000027abu, 0x00000001u, 0x00000027u, 0x000027aau, 0x0000022du, 0x0003003eu, 0x00002780u, 0x000027abu, 0x000500aau, 0x00000069u, 0x000027b0u, 0x000027aau, 0x00000230u, 0x0003003eu, 0x00002781u, 0x000027b0u, 0x000500a6u, 0x00000069u, 0x000027b3u, 0x000027b0u, 0x000021d1u, 0x000600a9u, 0x00000008u, 0x000027b4u, 0x000027b3u, 0x00001174u, 0x000003dau, 0x0003003eu, 0x00002782u, 0x000027b4u, 0x000300f7u, 0x000027b6u, 0x00000000u, 0x000400fau, 0x000027a6u, 0x000027b7u, 0x000027b8u, 0x000200f8u, 0x000027b8u, 0x00050041u, 0x00000046u, 0x0000283cu, 0x00002566u, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000283du, 0x0000283cu, 0x00050080u, 0x00000008u, 0x0000283eu, 0x0000283du, 0x0000248du, 0x0003003eu, 0x0000283cu, 0x0000283eu, 0x00110050u, 0x00000023u, 0x000070d2u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00002542u, 0x00002544u, 0x00006c16u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x00006c16u, 0x00002550u, 0x00006c16u, 0x00002554u, 0x0003003eu, 0x00007067u, 0x0000254cu, 0x0003003eu, 0x00007068u, 0x00002554u, 0x0004003du, 0x00000008u, 0x00002842u, 0x0000283cu, 0x0003003eu, 0x00002791u, 0x00002842u, 0x00040071u, 0x00000006u, 0x000028ecu, 0x0000254cu, 0x0004007cu, 0x00000008u, 0x000028edu, 0x000028ecu, 0x000500abu, 0x00000069u, 0x000028eeu, 0x000028edu, 0x00000220u, 0x000300f7u, 0x000028efu, 0x00000000u, 0x000400fau, 0x000028eeu, 0x000028f0u, 0x000028efu, 0x000200f8u, 0x000028f0u, 0x000500c4u, 0x00000008u, 0x000028f3u, 0x0000022au, 0x0000254cu, 0x0003003eu, 0x000028e8u, 0x000028f3u, 0x00040071u, 0x00000006u, 0x000028f6u, 0x00002554u, 0x0004007cu, 0x00000008u, 0x000028f7u, 0x000028f6u, 0x000500c7u, 0x00000008u, 0x000028f8u, 0x000028f7u, 0x0000022du, 0x000500abu, 0x00000069u, 0x000028f9u, 0x000028f8u, 0x00000220u, 0x000300f7u, 0x000028fau, 0x00000000u, 0x000400fau, 0x000028f9u, 0x000028fbu, 0x000028fau, 0x000200f8u, 0x000028fbu, 0x000500c7u, 0x00000008u, 0x000028feu, 0x00002842u, 0x000028f3u, 0x00050082u, 0x00000008u, 0x000028ffu, 0x000028feu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002900u, 0x00000001u, 0x0000002au, 0x000028ffu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00002902u, 0x00002842u, 0x00002900u, 0x0003003eu, 0x00002791u, 0x00002902u, 0x000200f9u, 0x000028fau, 0x000200f8u, 0x000028fau, 0x000700f5u, 0x00000008u, 0x0000be18u, 0x00002842u, 0x000028f0u, 0x00002902u, 0x000028fbu, 0x00050082u, 0x00000008u, 0x00002904u, 0x000028f3u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00002906u, 0x0000be18u, 0x00002904u, 0x0003003eu, 0x00002791u, 0x00002906u, 0x000200f9u, 0x000028efu, 0x000200f8u, 0x000028efu, 0x000700f5u, 0x00000008u, 0x0000be19u, 0x00002842u, 0x000027b8u, 0x00002906u, 0x000028fau, 0x0003003eu, 0x000028e9u, 0x0000be19u, 0x0003003eu, 0x0000278fu, 0x0000be19u, 0x0003003eu, 0x0000706bu, 0x00002550u, 0x0003003eu, 0x0000706cu, 0x00002554u, 0x00050041u, 0x00000046u, 0x00002845u, 0x00002566u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002846u, 0x00002845u, 0x0003003eu, 0x00002794u, 0x00002846u, 0x00040071u, 0x00000006u, 0x0000290cu, 0x00002550u, 0x0004007cu, 0x00000008u, 0x0000290du, 0x0000290cu, 0x000500abu, 0x00000069u, 0x0000290eu, 0x0000290du, 0x00000220u, 0x000300f7u, 0x0000290fu, 0x00000000u, 0x000400fau, 0x0000290eu, 0x00002910u, 0x0000290fu, 0x000200f8u, 0x00002910u, 0x000500c4u, 0x00000008u, 0x00002913u, 0x0000022au, 0x00002550u, 0x0003003eu, 0x00002908u, 0x00002913u, 0x00040071u, 0x00000006u, 0x00002916u, 0x00002554u, 0x0004007cu, 0x00000008u, 0x00002917u, 0x00002916u, 0x000500c7u, 0x00000008u, 0x00002918u, 0x00002917u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00002919u, 0x00002918u, 0x00000220u, 0x000300f7u, 0x0000291au, 0x00000000u, 0x000400fau, 0x00002919u, 0x0000291bu, 0x0000291au, 0x000200f8u, 0x0000291bu, 0x000500c7u, 0x00000008u, 0x0000291eu, 0x00002846u, 0x00002913u, 0x00050082u, 0x00000008u, 0x0000291fu, 0x0000291eu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002920u, 0x00000001u, 0x0000002au, 0x0000291fu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00002922u, 0x00002846u, 0x00002920u, 0x0003003eu, 0x00002794u, 0x00002922u, 0x000200f9u, 0x0000291au, 0x000200f8u, 0x0000291au, 0x000700f5u, 0x00000008u, 0x0000be29u, 0x00002846u, 0x00002910u, 0x00002922u, 0x0000291bu, 0x00050082u, 0x00000008u, 0x00002924u, 0x00002913u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00002926u, 0x0000be29u, 0x00002924u, 0x0003003eu, 0x00002794u, 0x00002926u, 0x000200f9u, 0x0000290fu, 0x000200f8u, 0x0000290fu, 0x000700f5u, 0x00000008u, 0x0000be2au, 0x00002846u, 0x000028efu, 0x00002926u, 0x0000291au, 0x0003003eu, 0x00002909u, 0x0000be2au, 0x0003003eu, 0x00002792u, 0x0000be2au, 0x0004007cu, 0x00000006u, 0x0000284du, 0x0000be2au, 0x00050084u, 0x00000006u, 0x0000284eu, 0x00002544u, 0x0000284du, 0x00050080u, 0x00000006u, 0x0000284fu, 0x00002542u, 0x0000284eu, 0x0003003eu, 0x00002795u, 0x0000284fu, 0x00050084u, 0x00000006u, 0x00002851u, 0x0000284fu, 0x00000386u, 0x000500c4u, 0x00000008u, 0x00002854u, 0x0000be19u, 0x000027abu, 0x0004007cu, 0x00000006u, 0x00002855u, 0x00002854u, 0x00050080u, 0x00000006u, 0x00002856u, 0x00002851u, 0x00002855u, 0x000500c7u, 0x00000006u, 0x00002857u, 0x00002856u, 0x000011e7u, 0x0003003eu, 0x00002796u, 0x00002857u, 0x000500c7u, 0x00000006u, 0x0000285au, 0x0000284du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000285bu, 0x0000285au, 0x00000314u, 0x000500c6u, 0x00000006u, 0x0000285du, 0x00002857u, 0x0000285bu, 0x0003003eu, 0x00002796u, 0x0000285du, 0x000500c2u, 0x00000006u, 0x0000285fu, 0x0000285du, 0x00000386u, 0x0003003eu, 0x00002797u, 0x0000285fu, 0x0004007cu, 0x00000006u, 0x00002861u, 0x000027b4u, 0x000500c7u, 0x00000006u, 0x00002863u, 0x0000285fu, 0x00002861u, 0x0003003eu, 0x00002797u, 0x00002863u, 0x000500c6u, 0x00000006u, 0x00002866u, 0x00002863u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00002867u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00002866u, 0x0004003du, 0x00000011u, 0x00002868u, 0x00002867u, 0x00040071u, 0x00000006u, 0x00002869u, 0x00002868u, 0x0004007cu, 0x00000008u, 0x0000286au, 0x00002869u, 0x0003003eu, 0x0000278eu, 0x0000286au, 0x000300f7u, 0x0000286cu, 0x00000000u, 0x000400fau, 0x000021d1u, 0x0000286du, 0x0000286cu, 0x000200f8u, 0x0000286du, 0x000500aau, 0x00000069u, 0x00002872u, 0x000027aau, 0x00000220u, 0x000300f7u, 0x00002873u, 0x00000000u, 0x000400fau, 0x00002872u, 0x00002874u, 0x00002875u, 0x000200f8u, 0x00002875u, 0x000500c7u, 0x00000006u, 0x0000288bu, 0x0000285du, 0x00000386u, 0x00050084u, 0x00000006u, 0x0000288cu, 0x00000704u, 0x0000288bu, 0x00050082u, 0x00000006u, 0x0000288du, 0x00000314u, 0x0000288cu, 0x000500c3u, 0x00000008u, 0x0000288fu, 0x0000286au, 0x0000288du, 0x0003003eu, 0x0000278eu, 0x0000288fu, 0x000500c7u, 0x00000008u, 0x00002891u, 0x0000288fu, 0x0000035eu, 0x0003003eu, 0x0000278eu, 0x00002891u, 0x000500c4u, 0x00000008u, 0x00002893u, 0x00002891u, 0x0000022du, 0x0003003eu, 0x0000278eu, 0x00002893u, 0x00050080u, 0x00000008u, 0x00002896u, 0x00002893u, 0x0000248du, 0x0003003eu, 0x0000278eu, 0x00002896u, 0x000200f9u, 0x00002873u, 0x000200f8u, 0x00002874u, 0x000500c7u, 0x00000006u, 0x00002877u, 0x0000285du, 0x00000464u, 0x00050084u, 0x00000006u, 0x00002878u, 0x00000704u, 0x00002877u, 0x00050082u, 0x00000006u, 0x00002879u, 0x00001293u, 0x00002878u, 0x000500c3u, 0x00000008u, 0x0000287bu, 0x0000286au, 0x00002879u, 0x0003003eu, 0x0000278eu, 0x0000287bu, 0x000500c7u, 0x00000008u, 0x0000287du, 0x0000287bu, 0x00000533u, 0x0003003eu, 0x0000278eu, 0x0000287du, 0x000500c4u, 0x0000000fu, 0x00002880u, 0x0000254au, 0x00000233u, 0x00040071u, 0x00000006u, 0x00002881u, 0x00002880u, 0x0004007cu, 0x00000008u, 0x00002882u, 0x00002881u, 0x000500c5u, 0x00000008u, 0x00002884u, 0x0000287du, 0x00002882u, 0x0003003eu, 0x0000278eu, 0x00002884u, 0x000500c4u, 0x00000008u, 0x00002886u, 0x00002884u, 0x0000022du, 0x0003003eu, 0x0000278eu, 0x00002886u, 0x00050080u, 0x00000008u, 0x00002889u, 0x00002886u, 0x0000248du, 0x0003003eu, 0x0000278eu, 0x00002889u, 0x000200f9u, 0x00002873u, 0x000200f8u, 0x00002873u, 0x000700f5u, 0x00000008u, 0x0000be4bu, 0x00002889u, 0x00002874u, 0x00002896u, 0x00002875u, 0x000500c5u, 0x00000008u, 0x00002899u, 0x0000be4bu, 0x000012b8u, 0x000500c6u, 0x00000008u, 0x0000289au, 0x00002899u, 0x0000022au, 0x00080041u, 0x00000692u, 0x0000289bu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000289au, 0x0004003du, 0x00000011u, 0x0000289cu, 0x0000289bu, 0x00040071u, 0x00000006u, 0x0000289du, 0x0000289cu, 0x0004007cu, 0x00000008u, 0x0000289eu, 0x0000289du, 0x0003003eu, 0x0000278eu, 0x0000289eu, 0x000200f9u, 0x0000286cu, 0x000200f8u, 0x0000286cu, 0x000700f5u, 0x00000008u, 0x0000be79u, 0x0000286au, 0x0000290fu, 0x0000289eu, 0x00002873u, 0x000200f9u, 0x000027b6u, 0x000200f8u, 0x000027b7u, 0x00050084u, 0x00000008u, 0x000027bau, 0x0000022du, 0x0000248du, 0x00050041u, 0x00000046u, 0x000027bbu, 0x00002566u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000027bcu, 0x000027bbu, 0x00050080u, 0x00000008u, 0x000027bdu, 0x000027bcu, 0x000027bau, 0x0003003eu, 0x000027bbu, 0x000027bdu, 0x00110050u, 0x00000023u, 0x000070c2u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00002542u, 0x00002544u, 0x00006c16u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x00006c16u, 0x00002550u, 0x00006c16u, 0x00002554u, 0x0003003eu, 0x0000705fu, 0x0000254cu, 0x0003003eu, 0x00007060u, 0x00002554u, 0x0004003du, 0x00000008u, 0x000027c1u, 0x000027bbu, 0x0003003eu, 0x00002785u, 0x000027c1u, 0x00050050u, 0x000000efu, 0x000028a4u, 0x000027c1u, 0x000027c1u, 0x00050080u, 0x000000efu, 0x000028a5u, 0x000028a4u, 0x00000de7u, 0x0003003eu, 0x000028a0u, 0x000028a5u, 0x00040071u, 0x00000006u, 0x000028a8u, 0x0000254cu, 0x0004007cu, 0x00000008u, 0x000028a9u, 0x000028a8u, 0x000500abu, 0x00000069u, 0x000028aau, 0x000028a9u, 0x00000220u, 0x000300f7u, 0x000028abu, 0x00000000u, 0x000400fau, 0x000028aau, 0x000028acu, 0x000028abu, 0x000200f8u, 0x000028acu, 0x000500c4u, 0x00000008u, 0x000028afu, 0x0000022au, 0x0000254cu, 0x0003003eu, 0x000028a1u, 0x000028afu, 0x00040071u, 0x00000006u, 0x000028b2u, 0x00002554u, 0x0004007cu, 0x00000008u, 0x000028b3u, 0x000028b2u, 0x000500c7u, 0x00000008u, 0x000028b4u, 0x000028b3u, 0x0000022du, 0x000500abu, 0x00000069u, 0x000028b5u, 0x000028b4u, 0x00000220u, 0x000300f7u, 0x000028b6u, 0x00000000u, 0x000400fau, 0x000028b5u, 0x000028b7u, 0x000028b6u, 0x000200f8u, 0x000028b7u, 0x00050050u, 0x000000efu, 0x000028bau, 0x000028afu, 0x000028afu, 0x000500c7u, 0x000000efu, 0x000028bbu, 0x000028a5u, 0x000028bau, 0x00050082u, 0x000000efu, 0x000028bdu, 0x000028bbu, 0x0000f3a2u, 0x0007000cu, 0x000000efu, 0x000028bfu, 0x00000001u, 0x0000002au, 0x000028bdu, 0x00000c47u, 0x000500c6u, 0x000000efu, 0x000028c1u, 0x000028a5u, 0x000028bfu, 0x0003003eu, 0x000028a0u, 0x000028c1u, 0x000200f9u, 0x000028b6u, 0x000200f8u, 0x000028b6u, 0x000700f5u, 0x000000efu, 0x0000be4du, 0x000028a5u, 0x000028acu, 0x000028c1u, 0x000028b7u, 0x00050082u, 0x00000008u, 0x000028c3u, 0x000028afu, 0x0000022au, 0x00050050u, 0x000000efu, 0x000028c5u, 0x000028c3u, 0x000028c3u, 0x000500c7u, 0x000000efu, 0x000028c6u, 0x0000be4du, 0x000028c5u, 0x0003003eu, 0x000028a0u, 0x000028c6u, 0x000200f9u, 0x000028abu, 0x000200f8u, 0x000028abu, 0x000700f5u, 0x000000efu, 0x0000be4eu, 0x000028a5u, 0x000027b7u, 0x000028c6u, 0x000028b6u, 0x0003003eu, 0x000028a2u, 0x0000be4eu, 0x0003003eu, 0x00002783u, 0x0000be4eu, 0x0003003eu, 0x00007063u, 0x00002550u, 0x0003003eu, 0x00007064u, 0x00002554u, 0x00050041u, 0x00000046u, 0x000027c4u, 0x00002566u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000027c5u, 0x000027c4u, 0x0003003eu, 0x00002788u, 0x000027c5u, 0x00040071u, 0x00000006u, 0x000028ccu, 0x00002550u, 0x0004007cu, 0x00000008u, 0x000028cdu, 0x000028ccu, 0x000500abu, 0x00000069u, 0x000028ceu, 0x000028cdu, 0x00000220u, 0x000300f7u, 0x000028cfu, 0x00000000u, 0x000400fau, 0x000028ceu, 0x000028d0u, 0x000028cfu, 0x000200f8u, 0x000028d0u, 0x000500c4u, 0x00000008u, 0x000028d3u, 0x0000022au, 0x00002550u, 0x0003003eu, 0x000028c8u, 0x000028d3u, 0x00040071u, 0x00000006u, 0x000028d6u, 0x00002554u, 0x0004007cu, 0x00000008u, 0x000028d7u, 0x000028d6u, 0x000500c7u, 0x00000008u, 0x000028d8u, 0x000028d7u, 0x0000025du, 0x000500abu, 0x00000069u, 0x000028d9u, 0x000028d8u, 0x00000220u, 0x000300f7u, 0x000028dau, 0x00000000u, 0x000400fau, 0x000028d9u, 0x000028dbu, 0x000028dau, 0x000200f8u, 0x000028dbu, 0x000500c7u, 0x00000008u, 0x000028deu, 0x000027c5u, 0x000028d3u, 0x00050082u, 0x00000008u, 0x000028dfu, 0x000028deu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x000028e0u, 0x00000001u, 0x0000002au, 0x000028dfu, 0x00000220u, 0x000500c6u, 0x00000008u, 0x000028e2u, 0x000027c5u, 0x000028e0u, 0x0003003eu, 0x00002788u, 0x000028e2u, 0x000200f9u, 0x000028dau, 0x000200f8u, 0x000028dau, 0x000700f5u, 0x00000008u, 0x0000be5eu, 0x000027c5u, 0x000028d0u, 0x000028e2u, 0x000028dbu, 0x00050082u, 0x00000008u, 0x000028e4u, 0x000028d3u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x000028e6u, 0x0000be5eu, 0x000028e4u, 0x0003003eu, 0x00002788u, 0x000028e6u, 0x000200f9u, 0x000028cfu, 0x000200f8u, 0x000028cfu, 0x000700f5u, 0x00000008u, 0x0000be5fu, 0x000027c5u, 0x000028abu, 0x000028e6u, 0x000028dau, 0x0003003eu, 0x000028c9u, 0x0000be5fu, 0x0003003eu, 0x00002786u, 0x0000be5fu, 0x0004007cu, 0x00000006u, 0x000027ccu, 0x0000be5fu, 0x00050084u, 0x00000006u, 0x000027cdu, 0x00002544u, 0x000027ccu, 0x00050080u, 0x00000006u, 0x000027ceu, 0x00002542u, 0x000027cdu, 0x0003003eu, 0x00002789u, 0x000027ceu, 0x00050084u, 0x00000006u, 0x000027d0u, 0x000027ceu, 0x00000386u, 0x00050050u, 0x000000efu, 0x000027d3u, 0x000027abu, 0x000027abu, 0x000500c4u, 0x000000efu, 0x000027d4u, 0x0000be4eu, 0x000027d3u, 0x0004007cu, 0x000000b0u, 0x000027d5u, 0x000027d4u, 0x00050050u, 0x000000b0u, 0x000027d6u, 0x000027d0u, 0x000027d0u, 0x00050080u, 0x000000b0u, 0x000027d7u, 0x000027d6u, 0x000027d5u, 0x000500c7u, 0x000000b0u, 0x000027d9u, 0x000027d7u, 0x0000f3a6u, 0x0003003eu, 0x0000278au, 0x000027d9u, 0x000500c7u, 0x00000006u, 0x000027dcu, 0x000027ccu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000027ddu, 0x000027dcu, 0x00000314u, 0x0004003du, 0x000000b0u, 0x000027deu, 0x0000278au, 0x00050050u, 0x000000b0u, 0x000027dfu, 0x000027ddu, 0x000027ddu, 0x000500c6u, 0x000000b0u, 0x000027e0u, 0x000027deu, 0x000027dfu, 0x0003003eu, 0x0000278au, 0x000027e0u, 0x0004003du, 0x000000b0u, 0x000027e1u, 0x0000278au, 0x000500c2u, 0x000000b0u, 0x000027e3u, 0x000027e1u, 0x0000f3a7u, 0x0003003eu, 0x0000278bu, 0x000027e3u, 0x0004007cu, 0x00000006u, 0x000027e5u, 0x000027b4u, 0x0004003du, 0x000000b0u, 0x000027e6u, 0x0000278bu, 0x00050050u, 0x000000b0u, 0x000027e7u, 0x000027e5u, 0x000027e5u, 0x000500c7u, 0x000000b0u, 0x000027e8u, 0x000027e6u, 0x000027e7u, 0x0003003eu, 0x0000278bu, 0x000027e8u, 0x00050041u, 0x00000007u, 0x000027eau, 0x0000278bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000027ebu, 0x000027eau, 0x000500c6u, 0x00000006u, 0x000027ecu, 0x000027ebu, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000027edu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000027ecu, 0x0004003du, 0x00000011u, 0x000027eeu, 0x000027edu, 0x00040071u, 0x00000006u, 0x000027efu, 0x000027eeu, 0x0004007cu, 0x00000008u, 0x000027f0u, 0x000027efu, 0x0003003eu, 0x0000278cu, 0x000027f0u, 0x00050041u, 0x00000007u, 0x000027f2u, 0x0000278bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000027f3u, 0x000027f2u, 0x000500c6u, 0x00000006u, 0x000027f4u, 0x000027f3u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000027f5u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000027f4u, 0x0004003du, 0x00000011u, 0x000027f6u, 0x000027f5u, 0x00040071u, 0x00000006u, 0x000027f7u, 0x000027f6u, 0x0004007cu, 0x00000008u, 0x000027f8u, 0x000027f7u, 0x0003003eu, 0x0000278du, 0x000027f8u, 0x000500aau, 0x00000069u, 0x000027fdu, 0x000027aau, 0x0000022au, 0x000300f7u, 0x000027feu, 0x00000000u, 0x000400fau, 0x000027fdu, 0x000027ffu, 0x00002800u, 0x000200f8u, 0x00002800u, 0x000500aau, 0x00000069u, 0x00002819u, 0x000027aau, 0x00000220u, 0x000300f7u, 0x0000281au, 0x00000000u, 0x000400fau, 0x00002819u, 0x0000281bu, 0x0000281cu, 0x000200f8u, 0x0000281cu, 0x000500c3u, 0x00000008u, 0x00002834u, 0x000027f0u, 0x0000025du, 0x0003003eu, 0x0000278cu, 0x00002834u, 0x000500c3u, 0x00000008u, 0x00002836u, 0x000027f8u, 0x0000025du, 0x0003003eu, 0x0000278du, 0x00002836u, 0x000200f9u, 0x0000281au, 0x000200f8u, 0x0000281bu, 0x00050041u, 0x00000007u, 0x0000281du, 0x0000278au, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000281eu, 0x0000281du, 0x000500c7u, 0x00000006u, 0x0000281fu, 0x0000281eu, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00002820u, 0x0000281fu, 0x00050084u, 0x00000008u, 0x00002821u, 0x00000233u, 0x00002820u, 0x00050082u, 0x00000008u, 0x00002822u, 0x00000269u, 0x00002821u, 0x000500c3u, 0x00000008u, 0x00002824u, 0x000027f0u, 0x00002822u, 0x0003003eu, 0x0000278cu, 0x00002824u, 0x00050041u, 0x00000007u, 0x00002825u, 0x0000278au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002826u, 0x00002825u, 0x000500c7u, 0x00000006u, 0x00002827u, 0x00002826u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00002828u, 0x00002827u, 0x00050084u, 0x00000008u, 0x00002829u, 0x00000233u, 0x00002828u, 0x00050082u, 0x00000008u, 0x0000282au, 0x00000269u, 0x00002829u, 0x000500c3u, 0x00000008u, 0x0000282cu, 0x000027f8u, 0x0000282au, 0x0003003eu, 0x0000278du, 0x0000282cu, 0x000500c7u, 0x00000008u, 0x0000282eu, 0x00002824u, 0x00000533u, 0x00050084u, 0x00000008u, 0x0000282fu, 0x0000282eu, 0x000003f2u, 0x0003003eu, 0x0000278cu, 0x0000282fu, 0x000500c7u, 0x00000008u, 0x00002831u, 0x0000282cu, 0x00000533u, 0x00050084u, 0x00000008u, 0x00002832u, 0x00002831u, 0x000003f2u, 0x0003003eu, 0x0000278du, 0x00002832u, 0x000200f9u, 0x0000281au, 0x000200f8u, 0x0000281au, 0x000700f5u, 0x00000008u, 0x0000be77u, 0x00002832u, 0x0000281bu, 0x00002836u, 0x0000281cu, 0x000700f5u, 0x00000008u, 0x0000be75u, 0x0000282fu, 0x0000281bu, 0x00002834u, 0x0000281cu, 0x000200f9u, 0x000027feu, 0x000200f8u, 0x000027ffu, 0x00050041u, 0x00000007u, 0x00002801u, 0x0000278au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002802u, 0x00002801u, 0x000500c7u, 0x00000006u, 0x00002803u, 0x00002802u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x00002804u, 0x00002803u, 0x00050084u, 0x00000008u, 0x00002805u, 0x00000233u, 0x00002804u, 0x00050082u, 0x00000008u, 0x00002806u, 0x0000025du, 0x00002805u, 0x000500c3u, 0x00000008u, 0x00002808u, 0x000027f0u, 0x00002806u, 0x0003003eu, 0x0000278cu, 0x00002808u, 0x00050041u, 0x00000007u, 0x00002809u, 0x0000278au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000280au, 0x00002809u, 0x000500c7u, 0x00000006u, 0x0000280bu, 0x0000280au, 0x00000386u, 0x0004007cu, 0x00000008u, 0x0000280cu, 0x0000280bu, 0x00050084u, 0x00000008u, 0x0000280du, 0x00000233u, 0x0000280cu, 0x00050082u, 0x00000008u, 0x0000280eu, 0x0000025du, 0x0000280du, 0x000500c3u, 0x00000008u, 0x00002810u, 0x000027f8u, 0x0000280eu, 0x0003003eu, 0x0000278du, 0x00002810u, 0x000500c7u, 0x00000008u, 0x00002812u, 0x00002808u, 0x0000035eu, 0x0003003eu, 0x0000278cu, 0x00002812u, 0x000500c7u, 0x00000008u, 0x00002814u, 0x00002810u, 0x0000035eu, 0x0003003eu, 0x0000278du, 0x00002814u, 0x000200f9u, 0x000027feu, 0x000200f8u, 0x000027feu, 0x000700f5u, 0x00000008u, 0x0000be76u, 0x00002814u, 0x000027ffu, 0x0000be77u, 0x0000281au, 0x000700f5u, 0x00000008u, 0x0000be74u, 0x00002812u, 0x000027ffu, 0x0000be75u, 0x0000281au, 0x000500c4u, 0x00000008u, 0x00002838u, 0x0000be74u, 0x0000025du, 0x000500c5u, 0x00000008u, 0x0000283au, 0x00002838u, 0x0000be76u, 0x0003003eu, 0x0000278eu, 0x0000283au, 0x000200f9u, 0x000027b6u, 0x000200f8u, 0x000027b6u, 0x000700f5u, 0x00000008u, 0x0000be78u, 0x0000283au, 0x000027feu, 0x0000be79u, 0x0000286cu, 0x0003003eu, 0x00002798u, 0x0000be78u, 0x0003003eu, 0x0000255du, 0x0000be78u, 0x000200f9u, 0x0000258du, 0x000200f8u, 0x0000258eu, 0x000500c3u, 0x00000008u, 0x00002591u, 0x0000248du, 0x0000022au, 0x00110050u, 0x00000023u, 0x00007248u, 0x0000253au, 0x00006c13u, 0x0000253eu, 0x00006c13u, 0x00002542u, 0x00002544u, 0x00006c16u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x0000254eu, 0x00002550u, 0x00002552u, 0x00002554u, 0x0003003eu, 0x0000707fu, 0x00002542u, 0x0003003eu, 0x00007080u, 0x00002544u, 0x0003003eu, 0x00007081u, 0x00002548u, 0x0003003eu, 0x00007082u, 0x0000254au, 0x0003003eu, 0x00007083u, 0x0000254cu, 0x0003003eu, 0x00007084u, 0x00002550u, 0x0003003eu, 0x00007085u, 0x00002554u, 0x0003003eu, 0x0000255fu, 0x000021c0u, 0x0004003du, 0x000000efu, 0x00002594u, 0x000020f5u, 0x0003003eu, 0x00002560u, 0x00002594u, 0x0003003eu, 0x00002561u, 0x00002591u, 0x0003003eu, 0x00002562u, 0x000021d1u, 0x0003003eu, 0x00002563u, 0x000021d4u, 0x000500b1u, 0x00000069u, 0x000025f0u, 0x00002591u, 0x0000022du, 0x0003003eu, 0x000025d4u, 0x000025f0u, 0x000300f7u, 0x000025f2u, 0x00000000u, 0x000400fau, 0x000025f0u, 0x000025f3u, 0x000025f2u, 0x000200f8u, 0x000025f3u, 0x00040071u, 0x00000006u, 0x000025f6u, 0x00002548u, 0x0004007cu, 0x00000008u, 0x000025f7u, 0x000025f6u, 0x000500abu, 0x00000069u, 0x000025f8u, 0x000025f7u, 0x0000022du, 0x000200f9u, 0x000025f2u, 0x000200f8u, 0x000025f2u, 0x000700f5u, 0x00000069u, 0x000025f9u, 0x000025f0u, 0x0000258eu, 0x000025f8u, 0x000025f3u, 0x000400a8u, 0x00000069u, 0x000025fbu, 0x000021d1u, 0x000500a7u, 0x00000069u, 0x000025fcu, 0x000025f9u, 0x000025fbu, 0x0003003eu, 0x000025d5u, 0x000025fcu, 0x00040071u, 0x00000006u, 0x000025ffu, 0x00002548u, 0x0004007cu, 0x00000008u, 0x00002600u, 0x000025ffu, 0x0007000cu, 0x00000008u, 0x00002601u, 0x00000001u, 0x00000027u, 0x00002600u, 0x0000022du, 0x0003003eu, 0x000025d6u, 0x00002601u, 0x000500aau, 0x00000069u, 0x00002606u, 0x00002600u, 0x00000230u, 0x0003003eu, 0x000025d7u, 0x00002606u, 0x000500a6u, 0x00000069u, 0x00002609u, 0x00002606u, 0x000021d1u, 0x000600a9u, 0x00000008u, 0x0000260au, 0x00002609u, 0x00001174u, 0x000003dau, 0x0003003eu, 0x000025d8u, 0x0000260au, 0x000300f7u, 0x0000260cu, 0x00000000u, 0x000400fau, 0x000025fcu, 0x0000260du, 0x0000260eu, 0x000200f8u, 0x0000260eu, 0x00050041u, 0x00000046u, 0x00002692u, 0x00002560u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002693u, 0x00002692u, 0x00050080u, 0x00000008u, 0x00002694u, 0x00002693u, 0x00002591u, 0x0003003eu, 0x00002692u, 0x00002694u, 0x00110050u, 0x00000023u, 0x000070a4u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00002542u, 0x00002544u, 0x00006c16u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x00006c16u, 0x00002550u, 0x00006c16u, 0x00002554u, 0x0003003eu, 0x00007077u, 0x0000254cu, 0x0003003eu, 0x00007078u, 0x00002554u, 0x0004003du, 0x00000008u, 0x00002698u, 0x00002692u, 0x0003003eu, 0x000025e7u, 0x00002698u, 0x00040071u, 0x00000006u, 0x00002742u, 0x0000254cu, 0x0004007cu, 0x00000008u, 0x00002743u, 0x00002742u, 0x000500abu, 0x00000069u, 0x00002744u, 0x00002743u, 0x00000220u, 0x000300f7u, 0x00002745u, 0x00000000u, 0x000400fau, 0x00002744u, 0x00002746u, 0x00002745u, 0x000200f8u, 0x00002746u, 0x000500c4u, 0x00000008u, 0x00002749u, 0x0000022au, 0x0000254cu, 0x0003003eu, 0x0000273eu, 0x00002749u, 0x00040071u, 0x00000006u, 0x0000274cu, 0x00002554u, 0x0004007cu, 0x00000008u, 0x0000274du, 0x0000274cu, 0x000500c7u, 0x00000008u, 0x0000274eu, 0x0000274du, 0x0000022du, 0x000500abu, 0x00000069u, 0x0000274fu, 0x0000274eu, 0x00000220u, 0x000300f7u, 0x00002750u, 0x00000000u, 0x000400fau, 0x0000274fu, 0x00002751u, 0x00002750u, 0x000200f8u, 0x00002751u, 0x000500c7u, 0x00000008u, 0x00002754u, 0x00002698u, 0x00002749u, 0x00050082u, 0x00000008u, 0x00002755u, 0x00002754u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002756u, 0x00000001u, 0x0000002au, 0x00002755u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00002758u, 0x00002698u, 0x00002756u, 0x0003003eu, 0x000025e7u, 0x00002758u, 0x000200f9u, 0x00002750u, 0x000200f8u, 0x00002750u, 0x000700f5u, 0x00000008u, 0x0000be84u, 0x00002698u, 0x00002746u, 0x00002758u, 0x00002751u, 0x00050082u, 0x00000008u, 0x0000275au, 0x00002749u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000275cu, 0x0000be84u, 0x0000275au, 0x0003003eu, 0x000025e7u, 0x0000275cu, 0x000200f9u, 0x00002745u, 0x000200f8u, 0x00002745u, 0x000700f5u, 0x00000008u, 0x0000be85u, 0x00002698u, 0x0000260eu, 0x0000275cu, 0x00002750u, 0x0003003eu, 0x0000273fu, 0x0000be85u, 0x0003003eu, 0x000025e5u, 0x0000be85u, 0x0003003eu, 0x0000707bu, 0x00002550u, 0x0003003eu, 0x0000707cu, 0x00002554u, 0x00050041u, 0x00000046u, 0x0000269bu, 0x00002560u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000269cu, 0x0000269bu, 0x0003003eu, 0x000025eau, 0x0000269cu, 0x00040071u, 0x00000006u, 0x00002762u, 0x00002550u, 0x0004007cu, 0x00000008u, 0x00002763u, 0x00002762u, 0x000500abu, 0x00000069u, 0x00002764u, 0x00002763u, 0x00000220u, 0x000300f7u, 0x00002765u, 0x00000000u, 0x000400fau, 0x00002764u, 0x00002766u, 0x00002765u, 0x000200f8u, 0x00002766u, 0x000500c4u, 0x00000008u, 0x00002769u, 0x0000022au, 0x00002550u, 0x0003003eu, 0x0000275eu, 0x00002769u, 0x00040071u, 0x00000006u, 0x0000276cu, 0x00002554u, 0x0004007cu, 0x00000008u, 0x0000276du, 0x0000276cu, 0x000500c7u, 0x00000008u, 0x0000276eu, 0x0000276du, 0x0000025du, 0x000500abu, 0x00000069u, 0x0000276fu, 0x0000276eu, 0x00000220u, 0x000300f7u, 0x00002770u, 0x00000000u, 0x000400fau, 0x0000276fu, 0x00002771u, 0x00002770u, 0x000200f8u, 0x00002771u, 0x000500c7u, 0x00000008u, 0x00002774u, 0x0000269cu, 0x00002769u, 0x00050082u, 0x00000008u, 0x00002775u, 0x00002774u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002776u, 0x00000001u, 0x0000002au, 0x00002775u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00002778u, 0x0000269cu, 0x00002776u, 0x0003003eu, 0x000025eau, 0x00002778u, 0x000200f9u, 0x00002770u, 0x000200f8u, 0x00002770u, 0x000700f5u, 0x00000008u, 0x0000be95u, 0x0000269cu, 0x00002766u, 0x00002778u, 0x00002771u, 0x00050082u, 0x00000008u, 0x0000277au, 0x00002769u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000277cu, 0x0000be95u, 0x0000277au, 0x0003003eu, 0x000025eau, 0x0000277cu, 0x000200f9u, 0x00002765u, 0x000200f8u, 0x00002765u, 0x000700f5u, 0x00000008u, 0x0000be96u, 0x0000269cu, 0x00002745u, 0x0000277cu, 0x00002770u, 0x0003003eu, 0x0000275fu, 0x0000be96u, 0x0003003eu, 0x000025e8u, 0x0000be96u, 0x0004007cu, 0x00000006u, 0x000026a3u, 0x0000be96u, 0x00050084u, 0x00000006u, 0x000026a4u, 0x00002544u, 0x000026a3u, 0x00050080u, 0x00000006u, 0x000026a5u, 0x00002542u, 0x000026a4u, 0x0003003eu, 0x000025ebu, 0x000026a5u, 0x00050084u, 0x00000006u, 0x000026a7u, 0x000026a5u, 0x00000386u, 0x000500c4u, 0x00000008u, 0x000026aau, 0x0000be85u, 0x00002601u, 0x0004007cu, 0x00000006u, 0x000026abu, 0x000026aau, 0x00050080u, 0x00000006u, 0x000026acu, 0x000026a7u, 0x000026abu, 0x000500c7u, 0x00000006u, 0x000026adu, 0x000026acu, 0x000011e7u, 0x0003003eu, 0x000025ecu, 0x000026adu, 0x000500c7u, 0x00000006u, 0x000026b0u, 0x000026a3u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000026b1u, 0x000026b0u, 0x00000314u, 0x000500c6u, 0x00000006u, 0x000026b3u, 0x000026adu, 0x000026b1u, 0x0003003eu, 0x000025ecu, 0x000026b3u, 0x000500c2u, 0x00000006u, 0x000026b5u, 0x000026b3u, 0x00000386u, 0x0003003eu, 0x000025edu, 0x000026b5u, 0x0004007cu, 0x00000006u, 0x000026b7u, 0x0000260au, 0x000500c7u, 0x00000006u, 0x000026b9u, 0x000026b5u, 0x000026b7u, 0x0003003eu, 0x000025edu, 0x000026b9u, 0x000500c6u, 0x00000006u, 0x000026bcu, 0x000026b9u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000026bdu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000026bcu, 0x0004003du, 0x00000011u, 0x000026beu, 0x000026bdu, 0x00040071u, 0x00000006u, 0x000026bfu, 0x000026beu, 0x0004007cu, 0x00000008u, 0x000026c0u, 0x000026bfu, 0x0003003eu, 0x000025e4u, 0x000026c0u, 0x000300f7u, 0x000026c2u, 0x00000000u, 0x000400fau, 0x000021d1u, 0x000026c3u, 0x000026c2u, 0x000200f8u, 0x000026c3u, 0x000500aau, 0x00000069u, 0x000026c8u, 0x00002600u, 0x00000220u, 0x000300f7u, 0x000026c9u, 0x00000000u, 0x000400fau, 0x000026c8u, 0x000026cau, 0x000026cbu, 0x000200f8u, 0x000026cbu, 0x000500c7u, 0x00000006u, 0x000026e1u, 0x000026b3u, 0x00000386u, 0x00050084u, 0x00000006u, 0x000026e2u, 0x00000704u, 0x000026e1u, 0x00050082u, 0x00000006u, 0x000026e3u, 0x00000314u, 0x000026e2u, 0x000500c3u, 0x00000008u, 0x000026e5u, 0x000026c0u, 0x000026e3u, 0x0003003eu, 0x000025e4u, 0x000026e5u, 0x000500c7u, 0x00000008u, 0x000026e7u, 0x000026e5u, 0x0000035eu, 0x0003003eu, 0x000025e4u, 0x000026e7u, 0x000500c4u, 0x00000008u, 0x000026e9u, 0x000026e7u, 0x0000022du, 0x0003003eu, 0x000025e4u, 0x000026e9u, 0x00050080u, 0x00000008u, 0x000026ecu, 0x000026e9u, 0x00002591u, 0x0003003eu, 0x000025e4u, 0x000026ecu, 0x000200f9u, 0x000026c9u, 0x000200f8u, 0x000026cau, 0x000500c7u, 0x00000006u, 0x000026cdu, 0x000026b3u, 0x00000464u, 0x00050084u, 0x00000006u, 0x000026ceu, 0x00000704u, 0x000026cdu, 0x00050082u, 0x00000006u, 0x000026cfu, 0x00001293u, 0x000026ceu, 0x000500c3u, 0x00000008u, 0x000026d1u, 0x000026c0u, 0x000026cfu, 0x0003003eu, 0x000025e4u, 0x000026d1u, 0x000500c7u, 0x00000008u, 0x000026d3u, 0x000026d1u, 0x00000533u, 0x0003003eu, 0x000025e4u, 0x000026d3u, 0x000500c4u, 0x0000000fu, 0x000026d6u, 0x0000254au, 0x00000233u, 0x00040071u, 0x00000006u, 0x000026d7u, 0x000026d6u, 0x0004007cu, 0x00000008u, 0x000026d8u, 0x000026d7u, 0x000500c5u, 0x00000008u, 0x000026dau, 0x000026d3u, 0x000026d8u, 0x0003003eu, 0x000025e4u, 0x000026dau, 0x000500c4u, 0x00000008u, 0x000026dcu, 0x000026dau, 0x0000022du, 0x0003003eu, 0x000025e4u, 0x000026dcu, 0x00050080u, 0x00000008u, 0x000026dfu, 0x000026dcu, 0x00002591u, 0x0003003eu, 0x000025e4u, 0x000026dfu, 0x000200f9u, 0x000026c9u, 0x000200f8u, 0x000026c9u, 0x000700f5u, 0x00000008u, 0x0000beb7u, 0x000026dfu, 0x000026cau, 0x000026ecu, 0x000026cbu, 0x000500c5u, 0x00000008u, 0x000026efu, 0x0000beb7u, 0x000012b8u, 0x000500c6u, 0x00000008u, 0x000026f0u, 0x000026efu, 0x0000022au, 0x00080041u, 0x00000692u, 0x000026f1u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000026f0u, 0x0004003du, 0x00000011u, 0x000026f2u, 0x000026f1u, 0x00040071u, 0x00000006u, 0x000026f3u, 0x000026f2u, 0x0004007cu, 0x00000008u, 0x000026f4u, 0x000026f3u, 0x0003003eu, 0x000025e4u, 0x000026f4u, 0x000200f9u, 0x000026c2u, 0x000200f8u, 0x000026c2u, 0x000700f5u, 0x00000008u, 0x0000bee5u, 0x000026c0u, 0x00002765u, 0x000026f4u, 0x000026c9u, 0x000200f9u, 0x0000260cu, 0x000200f8u, 0x0000260du, 0x00050084u, 0x00000008u, 0x00002610u, 0x0000022du, 0x00002591u, 0x00050041u, 0x00000046u, 0x00002611u, 0x00002560u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002612u, 0x00002611u, 0x00050080u, 0x00000008u, 0x00002613u, 0x00002612u, 0x00002610u, 0x0003003eu, 0x00002611u, 0x00002613u, 0x00110050u, 0x00000023u, 0x00007094u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00006c13u, 0x00002542u, 0x00002544u, 0x00006c16u, 0x00002548u, 0x0000254au, 0x0000254cu, 0x00006c16u, 0x00002550u, 0x00006c16u, 0x00002554u, 0x0003003eu, 0x0000706fu, 0x0000254cu, 0x0003003eu, 0x00007070u, 0x00002554u, 0x0004003du, 0x00000008u, 0x00002617u, 0x00002611u, 0x0003003eu, 0x000025dbu, 0x00002617u, 0x00050050u, 0x000000efu, 0x000026fau, 0x00002617u, 0x00002617u, 0x00050080u, 0x000000efu, 0x000026fbu, 0x000026fau, 0x00000de7u, 0x0003003eu, 0x000026f6u, 0x000026fbu, 0x00040071u, 0x00000006u, 0x000026feu, 0x0000254cu, 0x0004007cu, 0x00000008u, 0x000026ffu, 0x000026feu, 0x000500abu, 0x00000069u, 0x00002700u, 0x000026ffu, 0x00000220u, 0x000300f7u, 0x00002701u, 0x00000000u, 0x000400fau, 0x00002700u, 0x00002702u, 0x00002701u, 0x000200f8u, 0x00002702u, 0x000500c4u, 0x00000008u, 0x00002705u, 0x0000022au, 0x0000254cu, 0x0003003eu, 0x000026f7u, 0x00002705u, 0x00040071u, 0x00000006u, 0x00002708u, 0x00002554u, 0x0004007cu, 0x00000008u, 0x00002709u, 0x00002708u, 0x000500c7u, 0x00000008u, 0x0000270au, 0x00002709u, 0x0000022du, 0x000500abu, 0x00000069u, 0x0000270bu, 0x0000270au, 0x00000220u, 0x000300f7u, 0x0000270cu, 0x00000000u, 0x000400fau, 0x0000270bu, 0x0000270du, 0x0000270cu, 0x000200f8u, 0x0000270du, 0x00050050u, 0x000000efu, 0x00002710u, 0x00002705u, 0x00002705u, 0x000500c7u, 0x000000efu, 0x00002711u, 0x000026fbu, 0x00002710u, 0x00050082u, 0x000000efu, 0x00002713u, 0x00002711u, 0x0000f3a2u, 0x0007000cu, 0x000000efu, 0x00002715u, 0x00000001u, 0x0000002au, 0x00002713u, 0x00000c47u, 0x000500c6u, 0x000000efu, 0x00002717u, 0x000026fbu, 0x00002715u, 0x0003003eu, 0x000026f6u, 0x00002717u, 0x000200f9u, 0x0000270cu, 0x000200f8u, 0x0000270cu, 0x000700f5u, 0x000000efu, 0x0000beb9u, 0x000026fbu, 0x00002702u, 0x00002717u, 0x0000270du, 0x00050082u, 0x00000008u, 0x00002719u, 0x00002705u, 0x0000022au, 0x00050050u, 0x000000efu, 0x0000271bu, 0x00002719u, 0x00002719u, 0x000500c7u, 0x000000efu, 0x0000271cu, 0x0000beb9u, 0x0000271bu, 0x0003003eu, 0x000026f6u, 0x0000271cu, 0x000200f9u, 0x00002701u, 0x000200f8u, 0x00002701u, 0x000700f5u, 0x000000efu, 0x0000bebau, 0x000026fbu, 0x0000260du, 0x0000271cu, 0x0000270cu, 0x0003003eu, 0x000026f8u, 0x0000bebau, 0x0003003eu, 0x000025d9u, 0x0000bebau, 0x0003003eu, 0x00007073u, 0x00002550u, 0x0003003eu, 0x00007074u, 0x00002554u, 0x00050041u, 0x00000046u, 0x0000261au, 0x00002560u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000261bu, 0x0000261au, 0x0003003eu, 0x000025deu, 0x0000261bu, 0x00040071u, 0x00000006u, 0x00002722u, 0x00002550u, 0x0004007cu, 0x00000008u, 0x00002723u, 0x00002722u, 0x000500abu, 0x00000069u, 0x00002724u, 0x00002723u, 0x00000220u, 0x000300f7u, 0x00002725u, 0x00000000u, 0x000400fau, 0x00002724u, 0x00002726u, 0x00002725u, 0x000200f8u, 0x00002726u, 0x000500c4u, 0x00000008u, 0x00002729u, 0x0000022au, 0x00002550u, 0x0003003eu, 0x0000271eu, 0x00002729u, 0x00040071u, 0x00000006u, 0x0000272cu, 0x00002554u, 0x0004007cu, 0x00000008u, 0x0000272du, 0x0000272cu, 0x000500c7u, 0x00000008u, 0x0000272eu, 0x0000272du, 0x0000025du, 0x000500abu, 0x00000069u, 0x0000272fu, 0x0000272eu, 0x00000220u, 0x000300f7u, 0x00002730u, 0x00000000u, 0x000400fau, 0x0000272fu, 0x00002731u, 0x00002730u, 0x000200f8u, 0x00002731u, 0x000500c7u, 0x00000008u, 0x00002734u, 0x0000261bu, 0x00002729u, 0x00050082u, 0x00000008u, 0x00002735u, 0x00002734u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00002736u, 0x00000001u, 0x0000002au, 0x00002735u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00002738u, 0x0000261bu, 0x00002736u, 0x0003003eu, 0x000025deu, 0x00002738u, 0x000200f9u, 0x00002730u, 0x000200f8u, 0x00002730u, 0x000700f5u, 0x00000008u, 0x0000becau, 0x0000261bu, 0x00002726u, 0x00002738u, 0x00002731u, 0x00050082u, 0x00000008u, 0x0000273au, 0x00002729u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000273cu, 0x0000becau, 0x0000273au, 0x0003003eu, 0x000025deu, 0x0000273cu, 0x000200f9u, 0x00002725u, 0x000200f8u, 0x00002725u, 0x000700f5u, 0x00000008u, 0x0000becbu, 0x0000261bu, 0x00002701u, 0x0000273cu, 0x00002730u, 0x0003003eu, 0x0000271fu, 0x0000becbu, 0x0003003eu, 0x000025dcu, 0x0000becbu, 0x0004007cu, 0x00000006u, 0x00002622u, 0x0000becbu, 0x00050084u, 0x00000006u, 0x00002623u, 0x00002544u, 0x00002622u, 0x00050080u, 0x00000006u, 0x00002624u, 0x00002542u, 0x00002623u, 0x0003003eu, 0x000025dfu, 0x00002624u, 0x00050084u, 0x00000006u, 0x00002626u, 0x00002624u, 0x00000386u, 0x00050050u, 0x000000efu, 0x00002629u, 0x00002601u, 0x00002601u, 0x000500c4u, 0x000000efu, 0x0000262au, 0x0000bebau, 0x00002629u, 0x0004007cu, 0x000000b0u, 0x0000262bu, 0x0000262au, 0x00050050u, 0x000000b0u, 0x0000262cu, 0x00002626u, 0x00002626u, 0x00050080u, 0x000000b0u, 0x0000262du, 0x0000262cu, 0x0000262bu, 0x000500c7u, 0x000000b0u, 0x0000262fu, 0x0000262du, 0x0000f3a6u, 0x0003003eu, 0x000025e0u, 0x0000262fu, 0x000500c7u, 0x00000006u, 0x00002632u, 0x00002622u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00002633u, 0x00002632u, 0x00000314u, 0x0004003du, 0x000000b0u, 0x00002634u, 0x000025e0u, 0x00050050u, 0x000000b0u, 0x00002635u, 0x00002633u, 0x00002633u, 0x000500c6u, 0x000000b0u, 0x00002636u, 0x00002634u, 0x00002635u, 0x0003003eu, 0x000025e0u, 0x00002636u, 0x0004003du, 0x000000b0u, 0x00002637u, 0x000025e0u, 0x000500c2u, 0x000000b0u, 0x00002639u, 0x00002637u, 0x0000f3a7u, 0x0003003eu, 0x000025e1u, 0x00002639u, 0x0004007cu, 0x00000006u, 0x0000263bu, 0x0000260au, 0x0004003du, 0x000000b0u, 0x0000263cu, 0x000025e1u, 0x00050050u, 0x000000b0u, 0x0000263du, 0x0000263bu, 0x0000263bu, 0x000500c7u, 0x000000b0u, 0x0000263eu, 0x0000263cu, 0x0000263du, 0x0003003eu, 0x000025e1u, 0x0000263eu, 0x00050041u, 0x00000007u, 0x00002640u, 0x000025e1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002641u, 0x00002640u, 0x000500c6u, 0x00000006u, 0x00002642u, 0x00002641u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00002643u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00002642u, 0x0004003du, 0x00000011u, 0x00002644u, 0x00002643u, 0x00040071u, 0x00000006u, 0x00002645u, 0x00002644u, 0x0004007cu, 0x00000008u, 0x00002646u, 0x00002645u, 0x0003003eu, 0x000025e2u, 0x00002646u, 0x00050041u, 0x00000007u, 0x00002648u, 0x000025e1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002649u, 0x00002648u, 0x000500c6u, 0x00000006u, 0x0000264au, 0x00002649u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x0000264bu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000264au, 0x0004003du, 0x00000011u, 0x0000264cu, 0x0000264bu, 0x00040071u, 0x00000006u, 0x0000264du, 0x0000264cu, 0x0004007cu, 0x00000008u, 0x0000264eu, 0x0000264du, 0x0003003eu, 0x000025e3u, 0x0000264eu, 0x000500aau, 0x00000069u, 0x00002653u, 0x00002600u, 0x0000022au, 0x000300f7u, 0x00002654u, 0x00000000u, 0x000400fau, 0x00002653u, 0x00002655u, 0x00002656u, 0x000200f8u, 0x00002656u, 0x000500aau, 0x00000069u, 0x0000266fu, 0x00002600u, 0x00000220u, 0x000300f7u, 0x00002670u, 0x00000000u, 0x000400fau, 0x0000266fu, 0x00002671u, 0x00002672u, 0x000200f8u, 0x00002672u, 0x000500c3u, 0x00000008u, 0x0000268au, 0x00002646u, 0x0000025du, 0x0003003eu, 0x000025e2u, 0x0000268au, 0x000500c3u, 0x00000008u, 0x0000268cu, 0x0000264eu, 0x0000025du, 0x0003003eu, 0x000025e3u, 0x0000268cu, 0x000200f9u, 0x00002670u, 0x000200f8u, 0x00002671u, 0x00050041u, 0x00000007u, 0x00002673u, 0x000025e0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002674u, 0x00002673u, 0x000500c7u, 0x00000006u, 0x00002675u, 0x00002674u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00002676u, 0x00002675u, 0x00050084u, 0x00000008u, 0x00002677u, 0x00000233u, 0x00002676u, 0x00050082u, 0x00000008u, 0x00002678u, 0x00000269u, 0x00002677u, 0x000500c3u, 0x00000008u, 0x0000267au, 0x00002646u, 0x00002678u, 0x0003003eu, 0x000025e2u, 0x0000267au, 0x00050041u, 0x00000007u, 0x0000267bu, 0x000025e0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000267cu, 0x0000267bu, 0x000500c7u, 0x00000006u, 0x0000267du, 0x0000267cu, 0x00000464u, 0x0004007cu, 0x00000008u, 0x0000267eu, 0x0000267du, 0x00050084u, 0x00000008u, 0x0000267fu, 0x00000233u, 0x0000267eu, 0x00050082u, 0x00000008u, 0x00002680u, 0x00000269u, 0x0000267fu, 0x000500c3u, 0x00000008u, 0x00002682u, 0x0000264eu, 0x00002680u, 0x0003003eu, 0x000025e3u, 0x00002682u, 0x000500c7u, 0x00000008u, 0x00002684u, 0x0000267au, 0x00000533u, 0x00050084u, 0x00000008u, 0x00002685u, 0x00002684u, 0x000003f2u, 0x0003003eu, 0x000025e2u, 0x00002685u, 0x000500c7u, 0x00000008u, 0x00002687u, 0x00002682u, 0x00000533u, 0x00050084u, 0x00000008u, 0x00002688u, 0x00002687u, 0x000003f2u, 0x0003003eu, 0x000025e3u, 0x00002688u, 0x000200f9u, 0x00002670u, 0x000200f8u, 0x00002670u, 0x000700f5u, 0x00000008u, 0x0000bee3u, 0x00002688u, 0x00002671u, 0x0000268cu, 0x00002672u, 0x000700f5u, 0x00000008u, 0x0000bee1u, 0x00002685u, 0x00002671u, 0x0000268au, 0x00002672u, 0x000200f9u, 0x00002654u, 0x000200f8u, 0x00002655u, 0x00050041u, 0x00000007u, 0x00002657u, 0x000025e0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00002658u, 0x00002657u, 0x000500c7u, 0x00000006u, 0x00002659u, 0x00002658u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x0000265au, 0x00002659u, 0x00050084u, 0x00000008u, 0x0000265bu, 0x00000233u, 0x0000265au, 0x00050082u, 0x00000008u, 0x0000265cu, 0x0000025du, 0x0000265bu, 0x000500c3u, 0x00000008u, 0x0000265eu, 0x00002646u, 0x0000265cu, 0x0003003eu, 0x000025e2u, 0x0000265eu, 0x00050041u, 0x00000007u, 0x0000265fu, 0x000025e0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00002660u, 0x0000265fu, 0x000500c7u, 0x00000006u, 0x00002661u, 0x00002660u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x00002662u, 0x00002661u, 0x00050084u, 0x00000008u, 0x00002663u, 0x00000233u, 0x00002662u, 0x00050082u, 0x00000008u, 0x00002664u, 0x0000025du, 0x00002663u, 0x000500c3u, 0x00000008u, 0x00002666u, 0x0000264eu, 0x00002664u, 0x0003003eu, 0x000025e3u, 0x00002666u, 0x000500c7u, 0x00000008u, 0x00002668u, 0x0000265eu, 0x0000035eu, 0x0003003eu, 0x000025e2u, 0x00002668u, 0x000500c7u, 0x00000008u, 0x0000266au, 0x00002666u, 0x0000035eu, 0x0003003eu, 0x000025e3u, 0x0000266au, 0x000200f9u, 0x00002654u, 0x000200f8u, 0x00002654u, 0x000700f5u, 0x00000008u, 0x0000bee2u, 0x0000266au, 0x00002655u, 0x0000bee3u, 0x00002670u, 0x000700f5u, 0x00000008u, 0x0000bee0u, 0x00002668u, 0x00002655u, 0x0000bee1u, 0x00002670u, 0x000500c4u, 0x00000008u, 0x0000268eu, 0x0000bee0u, 0x0000025du, 0x000500c5u, 0x00000008u, 0x00002690u, 0x0000268eu, 0x0000bee2u, 0x0003003eu, 0x000025e4u, 0x00002690u, 0x000200f9u, 0x0000260cu, 0x000200f8u, 0x0000260cu, 0x000700f5u, 0x00000008u, 0x0000bee4u, 0x00002690u, 0x00002654u, 0x0000bee5u, 0x000026c2u, 0x0003003eu, 0x000025eeu, 0x0000bee4u, 0x0003003eu, 0x0000255du, 0x0000bee4u, 0x000500c7u, 0x00000008u, 0x00002599u, 0x0000248du, 0x0000022au, 0x00050084u, 0x00000008u, 0x0000259au, 0x0000025du, 0x00002599u, 0x00050082u, 0x00000008u, 0x0000259bu, 0x0000025du, 0x0000259au, 0x000500c3u, 0x00000008u, 0x0000259du, 0x0000bee4u, 0x0000259bu, 0x0003003eu, 0x0000255du, 0x0000259du, 0x000500c7u, 0x00000008u, 0x0000259fu, 0x0000259du, 0x0000035eu, 0x0003003eu, 0x0000255du, 0x0000259fu, 0x000200f9u, 0x0000258du, 0x000200f8u, 0x0000258du, 0x000700f5u, 0x00000008u, 0x0000bef5u, 0x0000259fu, 0x0000260cu, 0x0000be78u, 0x000027b6u, 0x000200f9u, 0x00002587u, 0x000200f8u, 0x00002588u, 0x0003003eu, 0x0000255du, 0x00000220u, 0x000200f9u, 0x00002587u, 0x000200f8u, 0x00002587u, 0x000700f5u, 0x00000008u, 0x0000bef4u, 0x00000220u, 0x00002588u, 0x0000bef5u, 0x0000258du, 0x0003003eu, 0x0000256au, 0x0000bef4u, 0x0003003eu, 0x000020f2u, 0x0000bef4u, 0x0003003eu, 0x00007cf9u, 0x0000bef4u, 0x0003003eu, 0x00007cfau, 0x00000626u, 0x000300f7u, 0x00002258u, 0x00000000u, 0x000400fau, 0x000021fbu, 0x00002259u, 0x00002258u, 0x000200f8u, 0x00002259u, 0x000500aau, 0x00000069u, 0x0000225cu, 0x00002585u, 0x0000022du, 0x000200f9u, 0x00002258u, 0x000200f8u, 0x00002258u, 0x000700f5u, 0x00000069u, 0x0000225du, 0x000021fbu, 0x00002587u, 0x0000225cu, 0x00002259u, 0x000300f7u, 0x0000225eu, 0x00000000u, 0x000400fau, 0x0000225du, 0x0000225fu, 0x0000225eu, 0x000200f8u, 0x0000225fu, 0x000500c7u, 0x00000008u, 0x00002261u, 0x0000bef4u, 0x0000022au, 0x000500aau, 0x00000069u, 0x00002262u, 0x00002261u, 0x00000220u, 0x000200f9u, 0x0000225eu, 0x000200f8u, 0x0000225eu, 0x000700f5u, 0x00000069u, 0x00002263u, 0x0000225du, 0x00002258u, 0x00002262u, 0x0000225fu, 0x000300f7u, 0x00002264u, 0x00000000u, 0x000400fau, 0x00002263u, 0x00002265u, 0x00002264u, 0x000200f8u, 0x00002265u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x00002264u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000559u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x00002229u, 0x0003003eu, 0x000020fau, 0x00002413u, 0x0003003eu, 0x000020fbu, 0x00002415u, 0x0003003eu, 0x000020fcu, 0x00007f1eu, 0x00040072u, 0x00000012u, 0x00002933u, 0x00007f1eu, 0x0004007cu, 0x00000011u, 0x00002934u, 0x00002933u, 0x000500c4u, 0x00000011u, 0x00002935u, 0x00002934u, 0x000005f7u, 0x00070050u, 0x00000028u, 0x00002936u, 0x00002935u, 0x00002935u, 0x00002935u, 0x00002935u, 0x00050080u, 0x00000028u, 0x00002937u, 0x000005f3u, 0x00002936u, 0x0003003eu, 0x00002928u, 0x00002937u, 0x0009004fu, 0x00000028u, 0x0000293au, 0x00002413u, 0x00002413u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b0u, 0x000005fbu, 0x0000293bu, 0x00002937u, 0x0000293au, 0x0003003eu, 0x00002929u, 0x0000293bu, 0x0009004fu, 0x00000028u, 0x0000293eu, 0x00002413u, 0x00002413u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b0u, 0x000005fbu, 0x0000293fu, 0x00002937u, 0x0000293eu, 0x0003003eu, 0x0000292au, 0x0000293fu, 0x0009004fu, 0x00000028u, 0x00002942u, 0x00002415u, 0x00002415u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500aeu, 0x000005fbu, 0x00002943u, 0x00002937u, 0x00002942u, 0x0003003eu, 0x0000292bu, 0x00002943u, 0x0009004fu, 0x00000028u, 0x00002946u, 0x00002415u, 0x00002415u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500aeu, 0x000005fbu, 0x00002947u, 0x00002937u, 0x00002946u, 0x0003003eu, 0x0000292cu, 0x00002947u, 0x000600a9u, 0x00000010u, 0x00002949u, 0x0000293bu, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x0000294bu, 0x00002943u, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x0000294cu, 0x00002949u, 0x0000294bu, 0x0003003eu, 0x0000292du, 0x0000294cu, 0x000600a9u, 0x00000010u, 0x0000294eu, 0x0000293fu, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x00002950u, 0x00002947u, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x00002951u, 0x0000294eu, 0x00002950u, 0x0003003eu, 0x0000292eu, 0x00002951u, 0x00050084u, 0x00000010u, 0x00002953u, 0x0000294cu, 0x00000622u, 0x00050084u, 0x00000010u, 0x00002955u, 0x00002951u, 0x00000629u, 0x00050080u, 0x00000010u, 0x00002956u, 0x00002953u, 0x00002955u, 0x0003003eu, 0x0000292fu, 0x00002956u, 0x00050041u, 0x0000007bu, 0x00002957u, 0x0000292fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00002958u, 0x00002957u, 0x00050041u, 0x0000007bu, 0x00002959u, 0x0000292fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000295au, 0x00002959u, 0x000500c5u, 0x0000000fu, 0x0000295bu, 0x00002958u, 0x0000295au, 0x00050041u, 0x0000007bu, 0x0000295cu, 0x0000292fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x0000295du, 0x0000295cu, 0x00050041u, 0x0000007bu, 0x0000295eu, 0x0000292fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000295fu, 0x0000295eu, 0x000500c5u, 0x0000000fu, 0x00002960u, 0x0000295du, 0x0000295fu, 0x000500c5u, 0x0000000fu, 0x00002961u, 0x0000295bu, 0x00002960u, 0x0003003eu, 0x00002930u, 0x00002961u, 0x000400c8u, 0x0000000fu, 0x00002963u, 0x00002961u, 0x000500c7u, 0x0000000fu, 0x00002964u, 0x00002963u, 0x0000046fu, 0x0003003eu, 0x00002931u, 0x00002964u, 0x00040071u, 0x00000006u, 0x0000227bu, 0x00002964u, 0x0004007cu, 0x00000008u, 0x0000227cu, 0x0000227bu, 0x0003003eu, 0x000020f9u, 0x0000227cu, 0x000500aau, 0x00000069u, 0x0000227eu, 0x0000227cu, 0x00000220u, 0x000300f7u, 0x0000227fu, 0x00000000u, 0x000400fau, 0x0000227eu, 0x00002280u, 0x0000227fu, 0x000200f8u, 0x00002280u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x0000227fu, 0x000400cdu, 0x00000008u, 0x00002282u, 0x0000227cu, 0x0003003eu, 0x000020fdu, 0x00002282u, 0x000400a8u, 0x00000069u, 0x00002284u, 0x000021ecu, 0x000300f7u, 0x00002285u, 0x00000000u, 0x000400fau, 0x00002284u, 0x00002286u, 0x00002285u, 0x000200f8u, 0x00002286u, 0x000500c7u, 0x00000008u, 0x00002288u, 0x0000227cu, 0x0000022au, 0x000500aau, 0x00000069u, 0x00002289u, 0x00002288u, 0x00000220u, 0x000200f9u, 0x00002285u, 0x000200f8u, 0x00002285u, 0x000700f5u, 0x00000069u, 0x0000228au, 0x00002284u, 0x0000227fu, 0x00002289u, 0x00002286u, 0x000300f7u, 0x0000228bu, 0x00000000u, 0x000400fau, 0x0000228au, 0x0000228cu, 0x0000228bu, 0x000200f8u, 0x0000228cu, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x0000228bu, 0x0003003eu, 0x000020ffu, 0x00001fa1u, 0x00060041u, 0x00000247u, 0x00002968u, 0x00000245u, 0x00000220u, 0x00001fa1u, 0x0004003du, 0x00000241u, 0x00002969u, 0x00002968u, 0x00050051u, 0x00000010u, 0x0000296au, 0x00002969u, 0x00000000u, 0x0003003eu, 0x00007012u, 0x0000296au, 0x00050051u, 0x00000010u, 0x0000296cu, 0x00002969u, 0x00000001u, 0x0003003eu, 0x00007013u, 0x0000296cu, 0x00050051u, 0x00000010u, 0x0000296eu, 0x00002969u, 0x00000002u, 0x0003003eu, 0x00007014u, 0x0000296eu, 0x00050051u, 0x00000010u, 0x00002970u, 0x00002969u, 0x00000003u, 0x0003003eu, 0x00007015u, 0x00002970u, 0x00050051u, 0x00000010u, 0x00002972u, 0x00002969u, 0x00000004u, 0x0003003eu, 0x00007016u, 0x00002972u, 0x00050051u, 0x00000010u, 0x00002974u, 0x00002969u, 0x00000005u, 0x0003003eu, 0x00007017u, 0x00002974u, 0x00050051u, 0x00000010u, 0x00002976u, 0x00002969u, 0x00000006u, 0x0003003eu, 0x00007018u, 0x00002976u, 0x00050051u, 0x00000010u, 0x00002978u, 0x00002969u, 0x00000007u, 0x0003003eu, 0x00007019u, 0x00002978u, 0x00050051u, 0x00000010u, 0x0000297au, 0x00002969u, 0x00000008u, 0x0003003eu, 0x0000701au, 0x0000297au, 0x00050051u, 0x00000010u, 0x0000297cu, 0x00002969u, 0x00000009u, 0x0003003eu, 0x0000701bu, 0x0000297cu, 0x00050051u, 0x00000006u, 0x0000297eu, 0x00002969u, 0x0000000au, 0x0003003eu, 0x0000701cu, 0x0000297eu, 0x00050051u, 0x00000011u, 0x00002980u, 0x00002969u, 0x0000000bu, 0x0003003eu, 0x0000701du, 0x00002980u, 0x00050051u, 0x0000000fu, 0x00002982u, 0x00002969u, 0x0000000cu, 0x0003003eu, 0x0000701eu, 0x00002982u, 0x00050051u, 0x0000000fu, 0x00002984u, 0x00002969u, 0x0000000du, 0x0003003eu, 0x0000701fu, 0x00002984u, 0x00050051u, 0x00000013u, 0x00002986u, 0x00002969u, 0x0000000eu, 0x0003003eu, 0x00007020u, 0x00002986u, 0x00120050u, 0x00000014u, 0x00007030u, 0x0000296au, 0x0000296cu, 0x0000296eu, 0x00002970u, 0x00002972u, 0x00002974u, 0x00002976u, 0x00002978u, 0x0000297au, 0x0000297cu, 0x0000297eu, 0x00002980u, 0x00002982u, 0x00002984u, 0x00002986u, 0x0003003eu, 0x00007031u, 0x0000296au, 0x0003003eu, 0x00007032u, 0x0000296cu, 0x0003003eu, 0x00007033u, 0x0000296eu, 0x0003003eu, 0x00007034u, 0x00002970u, 0x0003003eu, 0x00007035u, 0x00002972u, 0x0003003eu, 0x00007036u, 0x00002974u, 0x0003003eu, 0x00007037u, 0x00002976u, 0x0003003eu, 0x00007038u, 0x00002978u, 0x0003003eu, 0x00007039u, 0x0000297au, 0x0003003eu, 0x0000703au, 0x0000297cu, 0x0003003eu, 0x0000703bu, 0x0000297eu, 0x0003003eu, 0x0000703cu, 0x00002980u, 0x0003003eu, 0x0000703du, 0x00002982u, 0x0003003eu, 0x0000703eu, 0x00002984u, 0x0003003eu, 0x0000703fu, 0x00002986u, 0x0003003eu, 0x00007255u, 0x0000296au, 0x0003003eu, 0x00007256u, 0x0000296cu, 0x0003003eu, 0x00007257u, 0x0000296eu, 0x0003003eu, 0x00007258u, 0x00002970u, 0x0003003eu, 0x00007259u, 0x00002972u, 0x0003003eu, 0x0000725au, 0x00002974u, 0x0003003eu, 0x0000725bu, 0x00002976u, 0x0003003eu, 0x0000725cu, 0x00002978u, 0x0003003eu, 0x0000725du, 0x0000297cu, 0x0003003eu, 0x0000725eu, 0x00002984u, 0x0003003eu, 0x0000725fu, 0x00002986u, 0x00050082u, 0x00000008u, 0x00002292u, 0x00007f1eu, 0x00002417u, 0x0003003eu, 0x00002100u, 0x00002292u, 0x000600a9u, 0x00000008u, 0x00002294u, 0x00002227u, 0x0000022au, 0x00000ce5u, 0x0003003eu, 0x00002101u, 0x00002294u, 0x0003003eu, 0x00002103u, 0x0000240fu, 0x0003003eu, 0x00002104u, 0x00002429u, 0x0003003eu, 0x00002105u, 0x0000242du, 0x0003003eu, 0x00002106u, 0x00002292u, 0x0003003eu, 0x00002107u, 0x0000227cu, 0x000500c7u, 0x00000009u, 0x00002991u, 0x00002429u, 0x0000f39fu, 0x00070050u, 0x00000009u, 0x00002992u, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000009u, 0x00002993u, 0x00002991u, 0x00002992u, 0x00070050u, 0x00000009u, 0x00002995u, 0x00002292u, 0x00002292u, 0x00002292u, 0x00002292u, 0x00050084u, 0x00000009u, 0x00002996u, 0x00002993u, 0x00002995u, 0x00050080u, 0x00000009u, 0x00002998u, 0x0000240fu, 0x00002996u, 0x0003003eu, 0x00002103u, 0x00002998u, 0x000500c3u, 0x00000009u, 0x0000299bu, 0x00002998u, 0x0000f3a0u, 0x00040072u, 0x00000013u, 0x0000299cu, 0x0000299bu, 0x0003003eu, 0x00002989u, 0x0000299cu, 0x0006000cu, 0x00000008u, 0x0000299eu, 0x00000001u, 0x00000049u, 0x0000227cu, 0x0003003eu, 0x0000298au, 0x0000299eu, 0x000500c3u, 0x00000008u, 0x000029a0u, 0x0000299eu, 0x0000022au, 0x00040072u, 0x00000012u, 0x000029a1u, 0x000029a0u, 0x0003003eu, 0x0000298bu, 0x000029a1u, 0x000500c7u, 0x00000008u, 0x000029a3u, 0x0000299eu, 0x0000022au, 0x000500c4u, 0x00000008u, 0x000029a4u, 0x000029a3u, 0x0000022au, 0x00040072u, 0x00000012u, 0x000029a5u, 0x000029a4u, 0x000500c7u, 0x00000012u, 0x000029a7u, 0x000029a1u, 0x000004c8u, 0x00050080u, 0x00000012u, 0x000029a8u, 0x000029a5u, 0x000029a7u, 0x0003003eu, 0x0000298cu, 0x000029a8u, 0x00070050u, 0x00000013u, 0x000029aau, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x000500c4u, 0x00000013u, 0x000029abu, 0x0000299cu, 0x000029aau, 0x0003003eu, 0x00002989u, 0x000029abu, 0x000500c3u, 0x00000009u, 0x000029afu, 0x00002429u, 0x0000f3a0u, 0x00040072u, 0x00000013u, 0x000029b0u, 0x000029afu, 0x00070050u, 0x00000013u, 0x000029b1u, 0x000029a8u, 0x000029a8u, 0x000029a8u, 0x000029a8u, 0x00050084u, 0x00000013u, 0x000029b2u, 0x000029b1u, 0x000029b0u, 0x000500c3u, 0x00000009u, 0x000029b6u, 0x0000242du, 0x0000f3a0u, 0x00040072u, 0x00000013u, 0x000029b7u, 0x000029b6u, 0x00070050u, 0x00000013u, 0x000029b8u, 0x000029a1u, 0x000029a1u, 0x000029a1u, 0x000029a1u, 0x00050084u, 0x00000013u, 0x000029b9u, 0x000029b8u, 0x000029b7u, 0x00050080u, 0x00000013u, 0x000029bau, 0x000029b2u, 0x000029b9u, 0x00050080u, 0x00000013u, 0x000029bcu, 0x000029abu, 0x000029bau, 0x0003003eu, 0x00002989u, 0x000029bcu, 0x00070050u, 0x00000013u, 0x000029beu, 0x00000cb8u, 0x00000cb8u, 0x00000cb8u, 0x00000cb8u, 0x000500c3u, 0x00000013u, 0x000029bfu, 0x000029bcu, 0x000029beu, 0x0003003eu, 0x00002989u, 0x000029bfu, 0x0003003eu, 0x0000298du, 0x000029bfu, 0x00040072u, 0x00000009u, 0x000029c5u, 0x000029bfu, 0x0003003eu, 0x000029c2u, 0x000029c5u, 0x00050082u, 0x00000009u, 0x000029ccu, 0x000029c5u, 0x0000f3a1u, 0x0003003eu, 0x000029c2u, 0x000029ccu, 0x000600cau, 0x00000009u, 0x000029ceu, 0x000029ccu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000029c2u, 0x000029ceu, 0x00050080u, 0x00000009u, 0x000029d1u, 0x000029ceu, 0x0000f3a1u, 0x0003003eu, 0x000029c2u, 0x000029d1u, 0x0008000cu, 0x00000009u, 0x000029d3u, 0x00000001u, 0x0000002du, 0x000029d1u, 0x00000b0bu, 0x00000b0cu, 0x00040072u, 0x00000013u, 0x000029d4u, 0x000029d3u, 0x0003003eu, 0x000029c9u, 0x000029d4u, 0x00040072u, 0x00000b15u, 0x000029c7u, 0x000029d4u, 0x0004007cu, 0x00000010u, 0x000029c8u, 0x000029c7u, 0x0003003eu, 0x000029c3u, 0x000029c8u, 0x0003003eu, 0x0000298eu, 0x000029c8u, 0x0003003eu, 0x00002102u, 0x000029c8u, 0x0003003eu, 0x00002108u, 0x00000536u, 0x0003003eu, 0x00002109u, 0x00002294u, 0x000500a7u, 0x00000069u, 0x000022a0u, 0x00001d53u, 0x0000220du, 0x000300f7u, 0x000022a1u, 0x00000000u, 0x000400fau, 0x000022a0u, 0x000022a2u, 0x000022a1u, 0x000200f8u, 0x000022a2u, 0x000500c7u, 0x00000006u, 0x000022a4u, 0x00002197u, 0x00000a4au, 0x000500abu, 0x00000069u, 0x000022a5u, 0x000022a4u, 0x0000032du, 0x000300f7u, 0x000022a6u, 0x00000000u, 0x000400fau, 0x000022a5u, 0x000022a7u, 0x000022a6u, 0x000200f8u, 0x000022a7u, 0x00050084u, 0x00000008u, 0x000022a9u, 0x00002294u, 0x00000882u, 0x0003003eu, 0x00002109u, 0x000022a9u, 0x000200f9u, 0x000022a6u, 0x000200f8u, 0x000022a6u, 0x000700f5u, 0x00000008u, 0x00007f50u, 0x00002294u, 0x000022a2u, 0x000022a9u, 0x000022a7u, 0x000200f9u, 0x000022a1u, 0x000200f8u, 0x000022a1u, 0x000700f5u, 0x00000008u, 0x00007f4fu, 0x00002294u, 0x0000228bu, 0x00007f50u, 0x000022a6u, 0x0003003eu, 0x0000210eu, 0x00002411u, 0x0003003eu, 0x0000210fu, 0x00002431u, 0x0003003eu, 0x00002110u, 0x00002435u, 0x0003003eu, 0x00002111u, 0x00002292u, 0x0003003eu, 0x00002112u, 0x0000227cu, 0x0003003eu, 0x00002113u, 0x000021e0u, 0x0003003eu, 0x00002114u, 0x0000220du, 0x0003003eu, 0x00002115u, 0x00007f4fu, 0x0003003eu, 0x0000211au, 0x00000536u, 0x0004003du, 0x00000009u, 0x000029e6u, 0x0000210eu, 0x0008004fu, 0x00000044u, 0x000029e7u, 0x000029e6u, 0x000029e6u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x000029e8u, 0x0000210fu, 0x0008004fu, 0x00000044u, 0x000029e9u, 0x000029e8u, 0x000029e8u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x000029ebu, 0x000029e9u, 0x0000f39du, 0x00060050u, 0x00000044u, 0x000029ecu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000044u, 0x000029edu, 0x000029ebu, 0x000029ecu, 0x00060050u, 0x00000044u, 0x000029efu, 0x00002292u, 0x00002292u, 0x00002292u, 0x00050084u, 0x00000044u, 0x000029f0u, 0x000029edu, 0x000029efu, 0x00050080u, 0x00000044u, 0x000029f1u, 0x000029e7u, 0x000029f0u, 0x0003003eu, 0x000029d5u, 0x000029f1u, 0x000300f7u, 0x000029f3u, 0x00000000u, 0x000400fau, 0x0000220du, 0x000029f4u, 0x000029f3u, 0x000200f8u, 0x000029f4u, 0x0004003du, 0x00000009u, 0x000029f7u, 0x0000210fu, 0x0008004fu, 0x00000044u, 0x000029f8u, 0x000029f7u, 0x000029f7u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x000029fau, 0x000029f8u, 0x0000f39du, 0x000500c3u, 0x00000044u, 0x000029fcu, 0x000029fau, 0x000029ecu, 0x00060050u, 0x00000044u, 0x000029fdu, 0x00007f4fu, 0x00007f4fu, 0x00007f4fu, 0x00050084u, 0x00000044u, 0x000029feu, 0x000029fdu, 0x000029fcu, 0x00050080u, 0x00000044u, 0x000029ffu, 0x000029f1u, 0x000029feu, 0x0003003eu, 0x000029d6u, 0x000029ffu, 0x000300f7u, 0x00002a00u, 0x00000000u, 0x000400fau, 0x00000d44u, 0x00002a01u, 0x00002a02u, 0x000200f8u, 0x00002a02u, 0x0004003du, 0x00000009u, 0x00002a10u, 0x00002110u, 0x0008004fu, 0x00000044u, 0x00002a11u, 0x00002a10u, 0x00002a10u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00002a13u, 0x00002a11u, 0x0000f3a3u, 0x000500c3u, 0x00000044u, 0x00002a15u, 0x00002a13u, 0x000029ecu, 0x00050080u, 0x00000044u, 0x00002a16u, 0x000029f1u, 0x00002a15u, 0x0003003eu, 0x000029d7u, 0x00002a16u, 0x000200f9u, 0x00002a00u, 0x000200f8u, 0x00002a01u, 0x0006000cu, 0x00000008u, 0x00002a05u, 0x00000001u, 0x00000005u, 0x00007f4fu, 0x0004003du, 0x00000009u, 0x00002a06u, 0x00002110u, 0x0008004fu, 0x00000044u, 0x00002a07u, 0x00002a06u, 0x00002a06u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00002a09u, 0x00002a07u, 0x0000f3a3u, 0x000500c3u, 0x00000044u, 0x00002a0bu, 0x00002a09u, 0x000029ecu, 0x00060050u, 0x00000044u, 0x00002a0cu, 0x00002a05u, 0x00002a05u, 0x00002a05u, 0x00050084u, 0x00000044u, 0x00002a0du, 0x00002a0cu, 0x00002a0bu, 0x00050080u, 0x00000044u, 0x00002a0eu, 0x000029f1u, 0x00002a0du, 0x0003003eu, 0x000029d7u, 0x00002a0eu, 0x000200f9u, 0x00002a00u, 0x000200f8u, 0x00002a00u, 0x000700f5u, 0x00000044u, 0x00007f75u, 0x00002a0eu, 0x00002a01u, 0x00002a16u, 0x00002a02u, 0x000200f9u, 0x000029f3u, 0x000200f8u, 0x000029f3u, 0x000700f5u, 0x00000044u, 0x00007f68u, 0x00007f6eu, 0x000022a1u, 0x00007f75u, 0x00002a00u, 0x000700f5u, 0x00000044u, 0x00007f59u, 0x00007f5fu, 0x000022a1u, 0x000029ffu, 0x00002a00u, 0x000300f7u, 0x00002a18u, 0x00000000u, 0x000400fau, 0x000021e0u, 0x00002a19u, 0x00002a1au, 0x000200f8u, 0x00002a1au, 0x000500c3u, 0x00000044u, 0x00002a32u, 0x000029f1u, 0x0000f39eu, 0x0003003eu, 0x000029deu, 0x00002a32u, 0x0007004fu, 0x000000efu, 0x00002bfbu, 0x00002a32u, 0x00002a32u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002bf9u, 0x00002bfbu, 0x0003003eu, 0x00002116u, 0x00002bfbu, 0x000300f7u, 0x00002a35u, 0x00000000u, 0x000400fau, 0x0000220du, 0x00002a36u, 0x00002a35u, 0x000200f8u, 0x00002a36u, 0x000500c3u, 0x00000044u, 0x00002a39u, 0x00007f59u, 0x0000f39eu, 0x0003003eu, 0x000029dfu, 0x00002a39u, 0x0007004fu, 0x000000efu, 0x00002bfeu, 0x00002a39u, 0x00002a39u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002bfcu, 0x00002bfeu, 0x0003003eu, 0x00002117u, 0x00002bfeu, 0x000500c3u, 0x00000044u, 0x00002a3du, 0x00007f68u, 0x0000f39eu, 0x0003003eu, 0x000029e0u, 0x00002a3du, 0x0007004fu, 0x000000efu, 0x00002c01u, 0x00002a3du, 0x00002a3du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002bffu, 0x00002c01u, 0x0003003eu, 0x00002118u, 0x00002c01u, 0x000200f9u, 0x00002a35u, 0x000200f8u, 0x00002a35u, 0x000700f5u, 0x000000efu, 0x00008067u, 0x00008059u, 0x00002a1au, 0x00002c01u, 0x00002a36u, 0x000700f5u, 0x000000efu, 0x0000804du, 0x00008035u, 0x00002a1au, 0x00002bfeu, 0x00002a36u, 0x000200f9u, 0x00002a18u, 0x000200f8u, 0x00002a19u, 0x000500c3u, 0x00000044u, 0x00002a1du, 0x000029f1u, 0x0000f39eu, 0x0003003eu, 0x000029d8u, 0x00002a1du, 0x0003003eu, 0x000029d9u, 0x00000536u, 0x00050041u, 0x00000046u, 0x00002a77u, 0x000029d8u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a78u, 0x00002a77u, 0x0003003eu, 0x00002a6du, 0x00002a78u, 0x000500b3u, 0x00000069u, 0x00002a7au, 0x00002a78u, 0x00000220u, 0x0003003eu, 0x00002a6eu, 0x00002a7au, 0x000500c7u, 0x00000008u, 0x00002a7cu, 0x00002a78u, 0x00000c1bu, 0x0003003eu, 0x00002a6du, 0x00002a7cu, 0x0003003eu, 0x00002a70u, 0x00002a7cu, 0x0006000cu, 0x00000008u, 0x00002ad8u, 0x00000001u, 0x0000004au, 0x00002a7cu, 0x00050082u, 0x00000008u, 0x00002ad9u, 0x0000026fu, 0x00002ad8u, 0x0007000cu, 0x00000008u, 0x00002adau, 0x00000001u, 0x00000027u, 0x00002ad9u, 0x0000026fu, 0x0003003eu, 0x00002ad0u, 0x00002adau, 0x000500c4u, 0x00000008u, 0x00002addu, 0x00002a7cu, 0x00002adau, 0x000500c7u, 0x00000008u, 0x00002adeu, 0x00002addu, 0x00000b37u, 0x0003003eu, 0x00002ad1u, 0x00002adeu, 0x000500c7u, 0x00000008u, 0x00002ae0u, 0x00002adeu, 0x0000035eu, 0x0003003eu, 0x00002ad2u, 0x00002ae0u, 0x000500c3u, 0x00000008u, 0x00002ae2u, 0x00002adeu, 0x0000025du, 0x0003003eu, 0x00002ad4u, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x00002ae3u, 0x00002ad4u, 0x00002ae2u, 0x0004003du, 0x000001aeu, 0x00002ae4u, 0x00002ae3u, 0x00040072u, 0x000000efu, 0x00002ae5u, 0x00002ae4u, 0x0003003eu, 0x00002ad3u, 0x00002ae5u, 0x00050041u, 0x00000046u, 0x00002ae6u, 0x00002ad3u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002ae7u, 0x00002ae6u, 0x00050084u, 0x00000008u, 0x00002ae9u, 0x00002ae7u, 0x00002ae0u, 0x000500c3u, 0x00000008u, 0x00002aeau, 0x00002ae9u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00002aebu, 0x00002ad3u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002aecu, 0x00002aebu, 0x00050080u, 0x00000008u, 0x00002aedu, 0x00002aeau, 0x00002aecu, 0x0003003eu, 0x00002ad5u, 0x00002aedu, 0x00050050u, 0x000000efu, 0x00002af0u, 0x00002aedu, 0x00002adau, 0x0003003eu, 0x00002ad6u, 0x00002af0u, 0x0003003eu, 0x00002a6fu, 0x00002af0u, 0x00050041u, 0x00000046u, 0x00002a7fu, 0x00002a6fu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002a80u, 0x00002a7fu, 0x0003003eu, 0x00002a71u, 0x00002a80u, 0x0004003du, 0x00000044u, 0x00002a81u, 0x000029d8u, 0x0007004fu, 0x000000efu, 0x00002a82u, 0x00002a81u, 0x00002a81u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00002a83u, 0x00002a6fu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002a84u, 0x00002a83u, 0x00050050u, 0x000000efu, 0x00002a85u, 0x00002a84u, 0x00002a84u, 0x00050084u, 0x000000efu, 0x00002a86u, 0x00002a82u, 0x00002a85u, 0x0003003eu, 0x00002a72u, 0x00002a86u, 0x000500c3u, 0x00000008u, 0x00002a88u, 0x00000c2eu, 0x00002a80u, 0x0004007eu, 0x00000008u, 0x00002a89u, 0x00002a88u, 0x000500c7u, 0x00000008u, 0x00002a8au, 0x00000c2du, 0x00002a89u, 0x0003003eu, 0x00002a73u, 0x00002a8au, 0x0004003du, 0x000000efu, 0x00002a8bu, 0x00002a72u, 0x00050050u, 0x000000efu, 0x00002a8du, 0x00002a8au, 0x00002a8au, 0x000500c7u, 0x000000efu, 0x00002a8eu, 0x00002a8bu, 0x00002a8du, 0x0003003eu, 0x00002a74u, 0x00002a8eu, 0x000500abu, 0x00000069u, 0x00002a90u, 0x00002a80u, 0x0000026fu, 0x000300f7u, 0x00002a91u, 0x00000000u, 0x000400fau, 0x00002a90u, 0x00002a92u, 0x00002a93u, 0x000200f8u, 0x00002a93u, 0x0004003du, 0x000000efu, 0x00002a99u, 0x00002a72u, 0x000500c4u, 0x000000efu, 0x00002a9bu, 0x00002a99u, 0x0000f3a2u, 0x0003003eu, 0x00002a75u, 0x00002a9bu, 0x000200f9u, 0x00002a91u, 0x000200f8u, 0x00002a92u, 0x0004003du, 0x000000efu, 0x00002a94u, 0x00002a72u, 0x00050082u, 0x00000008u, 0x00002a96u, 0x0000026cu, 0x00002a80u, 0x00050050u, 0x000000efu, 0x00002a97u, 0x00002a96u, 0x00002a96u, 0x000500c3u, 0x000000efu, 0x00002a98u, 0x00002a94u, 0x00002a97u, 0x0003003eu, 0x00002a72u, 0x00002a98u, 0x0003003eu, 0x00002a75u, 0x00002a98u, 0x000200f9u, 0x00002a91u, 0x000200f8u, 0x00002a91u, 0x0004003du, 0x000000efu, 0x00002a9cu, 0x00002a74u, 0x000500abu, 0x0000087bu, 0x00002a9du, 0x00002a9cu, 0x00000c47u, 0x0004009au, 0x00000069u, 0x00002a9eu, 0x00002a9du, 0x000300f7u, 0x00002a9fu, 0x00000000u, 0x000400fau, 0x00002a9eu, 0x00002aa0u, 0x00002a9fu, 0x000200f8u, 0x00002aa0u, 0x00050041u, 0x00000046u, 0x00002aa1u, 0x00002a74u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002aa2u, 0x00002aa1u, 0x000500abu, 0x00000069u, 0x00002aa4u, 0x00002aa2u, 0x00002a8au, 0x000300f7u, 0x00002aa5u, 0x00000000u, 0x000400fau, 0x00002aa4u, 0x00002aa6u, 0x00002aa5u, 0x000200f8u, 0x00002aa6u, 0x0004003du, 0x00000008u, 0x00002aa8u, 0x00002aa1u, 0x000500abu, 0x00000069u, 0x00002aa9u, 0x00002aa8u, 0x00000220u, 0x000200f9u, 0x00002aa5u, 0x000200f8u, 0x00002aa5u, 0x000700f5u, 0x00000069u, 0x00002aaau, 0x00002aa4u, 0x00002aa0u, 0x00002aa9u, 0x00002aa6u, 0x000300f7u, 0x00002aabu, 0x00000000u, 0x000400fau, 0x00002aaau, 0x00002aacu, 0x00002aabu, 0x000200f8u, 0x00002aacu, 0x00050041u, 0x00000046u, 0x00002aadu, 0x00002a72u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002aaeu, 0x00002aadu, 0x000500c7u, 0x00000008u, 0x00002aafu, 0x00002aaeu, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002ab0u, 0x00002aafu, 0x00000220u, 0x000300f7u, 0x00002ab1u, 0x00000000u, 0x000400fau, 0x00002ab0u, 0x00002ab2u, 0x00002ab3u, 0x000200f8u, 0x00002ab3u, 0x00050041u, 0x00000046u, 0x00002ab5u, 0x00002a75u, 0x0000032du, 0x0003003eu, 0x00002ab5u, 0x00000c60u, 0x000200f9u, 0x00002ab1u, 0x000200f8u, 0x00002ab2u, 0x00050041u, 0x00000046u, 0x00002ab4u, 0x00002a75u, 0x0000032du, 0x0003003eu, 0x00002ab4u, 0x00000c1bu, 0x000200f9u, 0x00002ab1u, 0x000200f8u, 0x00002ab1u, 0x0003003eu, 0x000029d9u, 0x00000559u, 0x000200f9u, 0x00002aabu, 0x000200f8u, 0x00002aabu, 0x000600a9u, 0x00000069u, 0x0000f3bfu, 0x00002aaau, 0x00000559u, 0x00000536u, 0x00050041u, 0x00000046u, 0x00002ab6u, 0x00002a74u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002ab7u, 0x00002ab6u, 0x000500abu, 0x00000069u, 0x00002ab9u, 0x00002ab7u, 0x00002a8au, 0x000300f7u, 0x00002abau, 0x00000000u, 0x000400fau, 0x00002ab9u, 0x00002abbu, 0x00002abau, 0x000200f8u, 0x00002abbu, 0x0004003du, 0x00000008u, 0x00002abdu, 0x00002ab6u, 0x000500abu, 0x00000069u, 0x00002abeu, 0x00002abdu, 0x00000220u, 0x000200f9u, 0x00002abau, 0x000200f8u, 0x00002abau, 0x000700f5u, 0x00000069u, 0x00002abfu, 0x00002ab9u, 0x00002aabu, 0x00002abeu, 0x00002abbu, 0x000300f7u, 0x00002ac0u, 0x00000000u, 0x000400fau, 0x00002abfu, 0x00002ac1u, 0x00002ac0u, 0x000200f8u, 0x00002ac1u, 0x00050041u, 0x00000046u, 0x00002ac2u, 0x00002a72u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002ac3u, 0x00002ac2u, 0x000500c7u, 0x00000008u, 0x00002ac4u, 0x00002ac3u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002ac5u, 0x00002ac4u, 0x00000220u, 0x000300f7u, 0x00002ac6u, 0x00000000u, 0x000400fau, 0x00002ac5u, 0x00002ac7u, 0x00002ac8u, 0x000200f8u, 0x00002ac8u, 0x00050041u, 0x00000046u, 0x00002acau, 0x00002a75u, 0x0000045cu, 0x0003003eu, 0x00002acau, 0x00000c60u, 0x000200f9u, 0x00002ac6u, 0x000200f8u, 0x00002ac7u, 0x00050041u, 0x00000046u, 0x00002ac9u, 0x00002a75u, 0x0000045cu, 0x0003003eu, 0x00002ac9u, 0x00000c1bu, 0x000200f9u, 0x00002ac6u, 0x000200f8u, 0x00002ac6u, 0x0003003eu, 0x000029d9u, 0x00000559u, 0x000200f9u, 0x00002ac0u, 0x000200f8u, 0x00002ac0u, 0x000600a9u, 0x00000069u, 0x0000f3c0u, 0x00002abfu, 0x00000559u, 0x0000f3bfu, 0x000200f9u, 0x00002a9fu, 0x000200f8u, 0x00002a9fu, 0x000700f5u, 0x00000069u, 0x00007f85u, 0x00000536u, 0x00002a91u, 0x0000f3c0u, 0x00002ac0u, 0x000300f7u, 0x00002accu, 0x00000000u, 0x000400fau, 0x00002a7au, 0x00002acdu, 0x00002accu, 0x000200f8u, 0x00002acdu, 0x0003003eu, 0x00002a75u, 0x00000c7au, 0x0003003eu, 0x000029d9u, 0x00000559u, 0x000200f9u, 0x00002accu, 0x000200f8u, 0x00002accu, 0x000600a9u, 0x00000069u, 0x0000f3c1u, 0x00002a7au, 0x00000559u, 0x00007f85u, 0x0004003du, 0x000000efu, 0x00002aceu, 0x00002a75u, 0x0008000cu, 0x000000efu, 0x00002acfu, 0x00000001u, 0x0000002du, 0x00002aceu, 0x00000c7du, 0x00000c7eu, 0x0003003eu, 0x00002a76u, 0x00002acfu, 0x0003003eu, 0x0000211au, 0x0000f3c1u, 0x0003003eu, 0x00002116u, 0x00002acfu, 0x000300f7u, 0x00002a22u, 0x00000000u, 0x000400fau, 0x0000220du, 0x00002a23u, 0x00002a22u, 0x000200f8u, 0x00002a23u, 0x000500c3u, 0x00000044u, 0x00002a26u, 0x00007f59u, 0x0000f39eu, 0x0003003eu, 0x000029dau, 0x00002a26u, 0x0003003eu, 0x000029dbu, 0x0000f3c1u, 0x00050041u, 0x00000046u, 0x00002afbu, 0x000029dau, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002afcu, 0x00002afbu, 0x0003003eu, 0x00002af1u, 0x00002afcu, 0x000500b3u, 0x00000069u, 0x00002afeu, 0x00002afcu, 0x00000220u, 0x0003003eu, 0x00002af2u, 0x00002afeu, 0x000500c7u, 0x00000008u, 0x00002b00u, 0x00002afcu, 0x00000c1bu, 0x0003003eu, 0x00002af1u, 0x00002b00u, 0x0003003eu, 0x00002af4u, 0x00002b00u, 0x0006000cu, 0x00000008u, 0x00002b5cu, 0x00000001u, 0x0000004au, 0x00002b00u, 0x00050082u, 0x00000008u, 0x00002b5du, 0x0000026fu, 0x00002b5cu, 0x0007000cu, 0x00000008u, 0x00002b5eu, 0x00000001u, 0x00000027u, 0x00002b5du, 0x0000026fu, 0x0003003eu, 0x00002b54u, 0x00002b5eu, 0x000500c4u, 0x00000008u, 0x00002b61u, 0x00002b00u, 0x00002b5eu, 0x000500c7u, 0x00000008u, 0x00002b62u, 0x00002b61u, 0x00000b37u, 0x0003003eu, 0x00002b55u, 0x00002b62u, 0x000500c7u, 0x00000008u, 0x00002b64u, 0x00002b62u, 0x0000035eu, 0x0003003eu, 0x00002b56u, 0x00002b64u, 0x000500c3u, 0x00000008u, 0x00002b66u, 0x00002b62u, 0x0000025du, 0x0003003eu, 0x00002b58u, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x00002b67u, 0x00002b58u, 0x00002b66u, 0x0004003du, 0x000001aeu, 0x00002b68u, 0x00002b67u, 0x00040072u, 0x000000efu, 0x00002b69u, 0x00002b68u, 0x0003003eu, 0x00002b57u, 0x00002b69u, 0x00050041u, 0x00000046u, 0x00002b6au, 0x00002b57u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b6bu, 0x00002b6au, 0x00050084u, 0x00000008u, 0x00002b6du, 0x00002b6bu, 0x00002b64u, 0x000500c3u, 0x00000008u, 0x00002b6eu, 0x00002b6du, 0x00000263u, 0x00050041u, 0x00000046u, 0x00002b6fu, 0x00002b57u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b70u, 0x00002b6fu, 0x00050080u, 0x00000008u, 0x00002b71u, 0x00002b6eu, 0x00002b70u, 0x0003003eu, 0x00002b59u, 0x00002b71u, 0x00050050u, 0x000000efu, 0x00002b74u, 0x00002b71u, 0x00002b5eu, 0x0003003eu, 0x00002b5au, 0x00002b74u, 0x0003003eu, 0x00002af3u, 0x00002b74u, 0x00050041u, 0x00000046u, 0x00002b03u, 0x00002af3u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b04u, 0x00002b03u, 0x0003003eu, 0x00002af5u, 0x00002b04u, 0x0004003du, 0x00000044u, 0x00002b05u, 0x000029dau, 0x0007004fu, 0x000000efu, 0x00002b06u, 0x00002b05u, 0x00002b05u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00002b07u, 0x00002af3u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b08u, 0x00002b07u, 0x00050050u, 0x000000efu, 0x00002b09u, 0x00002b08u, 0x00002b08u, 0x00050084u, 0x000000efu, 0x00002b0au, 0x00002b06u, 0x00002b09u, 0x0003003eu, 0x00002af6u, 0x00002b0au, 0x000500c3u, 0x00000008u, 0x00002b0cu, 0x00000c2eu, 0x00002b04u, 0x0004007eu, 0x00000008u, 0x00002b0du, 0x00002b0cu, 0x000500c7u, 0x00000008u, 0x00002b0eu, 0x00000c2du, 0x00002b0du, 0x0003003eu, 0x00002af7u, 0x00002b0eu, 0x0004003du, 0x000000efu, 0x00002b0fu, 0x00002af6u, 0x00050050u, 0x000000efu, 0x00002b11u, 0x00002b0eu, 0x00002b0eu, 0x000500c7u, 0x000000efu, 0x00002b12u, 0x00002b0fu, 0x00002b11u, 0x0003003eu, 0x00002af8u, 0x00002b12u, 0x000500abu, 0x00000069u, 0x00002b14u, 0x00002b04u, 0x0000026fu, 0x000300f7u, 0x00002b15u, 0x00000000u, 0x000400fau, 0x00002b14u, 0x00002b16u, 0x00002b17u, 0x000200f8u, 0x00002b17u, 0x0004003du, 0x000000efu, 0x00002b1du, 0x00002af6u, 0x000500c4u, 0x000000efu, 0x00002b1fu, 0x00002b1du, 0x0000f3a2u, 0x0003003eu, 0x00002af9u, 0x00002b1fu, 0x000200f9u, 0x00002b15u, 0x000200f8u, 0x00002b16u, 0x0004003du, 0x000000efu, 0x00002b18u, 0x00002af6u, 0x00050082u, 0x00000008u, 0x00002b1au, 0x0000026cu, 0x00002b04u, 0x00050050u, 0x000000efu, 0x00002b1bu, 0x00002b1au, 0x00002b1au, 0x000500c3u, 0x000000efu, 0x00002b1cu, 0x00002b18u, 0x00002b1bu, 0x0003003eu, 0x00002af6u, 0x00002b1cu, 0x0003003eu, 0x00002af9u, 0x00002b1cu, 0x000200f9u, 0x00002b15u, 0x000200f8u, 0x00002b15u, 0x0004003du, 0x000000efu, 0x00002b20u, 0x00002af8u, 0x000500abu, 0x0000087bu, 0x00002b21u, 0x00002b20u, 0x00000c47u, 0x0004009au, 0x00000069u, 0x00002b22u, 0x00002b21u, 0x000300f7u, 0x00002b23u, 0x00000000u, 0x000400fau, 0x00002b22u, 0x00002b24u, 0x00002b23u, 0x000200f8u, 0x00002b24u, 0x00050041u, 0x00000046u, 0x00002b25u, 0x00002af8u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b26u, 0x00002b25u, 0x000500abu, 0x00000069u, 0x00002b28u, 0x00002b26u, 0x00002b0eu, 0x000300f7u, 0x00002b29u, 0x00000000u, 0x000400fau, 0x00002b28u, 0x00002b2au, 0x00002b29u, 0x000200f8u, 0x00002b2au, 0x0004003du, 0x00000008u, 0x00002b2cu, 0x00002b25u, 0x000500abu, 0x00000069u, 0x00002b2du, 0x00002b2cu, 0x00000220u, 0x000200f9u, 0x00002b29u, 0x000200f8u, 0x00002b29u, 0x000700f5u, 0x00000069u, 0x00002b2eu, 0x00002b28u, 0x00002b24u, 0x00002b2du, 0x00002b2au, 0x000300f7u, 0x00002b2fu, 0x00000000u, 0x000400fau, 0x00002b2eu, 0x00002b30u, 0x00002b2fu, 0x000200f8u, 0x00002b30u, 0x00050041u, 0x00000046u, 0x00002b31u, 0x00002af6u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b32u, 0x00002b31u, 0x000500c7u, 0x00000008u, 0x00002b33u, 0x00002b32u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002b34u, 0x00002b33u, 0x00000220u, 0x000300f7u, 0x00002b35u, 0x00000000u, 0x000400fau, 0x00002b34u, 0x00002b36u, 0x00002b37u, 0x000200f8u, 0x00002b37u, 0x00050041u, 0x00000046u, 0x00002b39u, 0x00002af9u, 0x0000032du, 0x0003003eu, 0x00002b39u, 0x00000c60u, 0x000200f9u, 0x00002b35u, 0x000200f8u, 0x00002b36u, 0x00050041u, 0x00000046u, 0x00002b38u, 0x00002af9u, 0x0000032du, 0x0003003eu, 0x00002b38u, 0x00000c1bu, 0x000200f9u, 0x00002b35u, 0x000200f8u, 0x00002b35u, 0x0003003eu, 0x000029dbu, 0x00000559u, 0x000200f9u, 0x00002b2fu, 0x000200f8u, 0x00002b2fu, 0x000600a9u, 0x00000069u, 0x0000f3c2u, 0x00002b2eu, 0x00000559u, 0x0000f3c1u, 0x00050041u, 0x00000046u, 0x00002b3au, 0x00002af8u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b3bu, 0x00002b3au, 0x000500abu, 0x00000069u, 0x00002b3du, 0x00002b3bu, 0x00002b0eu, 0x000300f7u, 0x00002b3eu, 0x00000000u, 0x000400fau, 0x00002b3du, 0x00002b3fu, 0x00002b3eu, 0x000200f8u, 0x00002b3fu, 0x0004003du, 0x00000008u, 0x00002b41u, 0x00002b3au, 0x000500abu, 0x00000069u, 0x00002b42u, 0x00002b41u, 0x00000220u, 0x000200f9u, 0x00002b3eu, 0x000200f8u, 0x00002b3eu, 0x000700f5u, 0x00000069u, 0x00002b43u, 0x00002b3du, 0x00002b2fu, 0x00002b42u, 0x00002b3fu, 0x000300f7u, 0x00002b44u, 0x00000000u, 0x000400fau, 0x00002b43u, 0x00002b45u, 0x00002b44u, 0x000200f8u, 0x00002b45u, 0x00050041u, 0x00000046u, 0x00002b46u, 0x00002af6u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b47u, 0x00002b46u, 0x000500c7u, 0x00000008u, 0x00002b48u, 0x00002b47u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002b49u, 0x00002b48u, 0x00000220u, 0x000300f7u, 0x00002b4au, 0x00000000u, 0x000400fau, 0x00002b49u, 0x00002b4bu, 0x00002b4cu, 0x000200f8u, 0x00002b4cu, 0x00050041u, 0x00000046u, 0x00002b4eu, 0x00002af9u, 0x0000045cu, 0x0003003eu, 0x00002b4eu, 0x00000c60u, 0x000200f9u, 0x00002b4au, 0x000200f8u, 0x00002b4bu, 0x00050041u, 0x00000046u, 0x00002b4du, 0x00002af9u, 0x0000045cu, 0x0003003eu, 0x00002b4du, 0x00000c1bu, 0x000200f9u, 0x00002b4au, 0x000200f8u, 0x00002b4au, 0x0003003eu, 0x000029dbu, 0x00000559u, 0x000200f9u, 0x00002b44u, 0x000200f8u, 0x00002b44u, 0x000600a9u, 0x00000069u, 0x0000f3c3u, 0x00002b43u, 0x00000559u, 0x0000f3c2u, 0x000200f9u, 0x00002b23u, 0x000200f8u, 0x00002b23u, 0x000700f5u, 0x00000069u, 0x00007faau, 0x0000f3c1u, 0x00002b15u, 0x0000f3c3u, 0x00002b44u, 0x000300f7u, 0x00002b50u, 0x00000000u, 0x000400fau, 0x00002afeu, 0x00002b51u, 0x00002b50u, 0x000200f8u, 0x00002b51u, 0x0003003eu, 0x00002af9u, 0x00000c7au, 0x0003003eu, 0x000029dbu, 0x00000559u, 0x000200f9u, 0x00002b50u, 0x000200f8u, 0x00002b50u, 0x000600a9u, 0x00000069u, 0x0000f3c4u, 0x00002afeu, 0x00000559u, 0x00007faau, 0x0004003du, 0x000000efu, 0x00002b52u, 0x00002af9u, 0x0008000cu, 0x000000efu, 0x00002b53u, 0x00000001u, 0x0000002du, 0x00002b52u, 0x00000c7du, 0x00000c7eu, 0x0003003eu, 0x00002afau, 0x00002b53u, 0x0003003eu, 0x0000211au, 0x0000f3c4u, 0x0003003eu, 0x00002117u, 0x00002b53u, 0x000500c3u, 0x00000044u, 0x00002a2cu, 0x00007f68u, 0x0000f39eu, 0x0003003eu, 0x000029dcu, 0x00002a2cu, 0x0003003eu, 0x000029ddu, 0x0000f3c4u, 0x00050041u, 0x00000046u, 0x00002b7fu, 0x000029dcu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002b80u, 0x00002b7fu, 0x0003003eu, 0x00002b75u, 0x00002b80u, 0x000500b3u, 0x00000069u, 0x00002b82u, 0x00002b80u, 0x00000220u, 0x0003003eu, 0x00002b76u, 0x00002b82u, 0x000500c7u, 0x00000008u, 0x00002b84u, 0x00002b80u, 0x00000c1bu, 0x0003003eu, 0x00002b75u, 0x00002b84u, 0x0003003eu, 0x00002b78u, 0x00002b84u, 0x0006000cu, 0x00000008u, 0x00002be0u, 0x00000001u, 0x0000004au, 0x00002b84u, 0x00050082u, 0x00000008u, 0x00002be1u, 0x0000026fu, 0x00002be0u, 0x0007000cu, 0x00000008u, 0x00002be2u, 0x00000001u, 0x00000027u, 0x00002be1u, 0x0000026fu, 0x0003003eu, 0x00002bd8u, 0x00002be2u, 0x000500c4u, 0x00000008u, 0x00002be5u, 0x00002b84u, 0x00002be2u, 0x000500c7u, 0x00000008u, 0x00002be6u, 0x00002be5u, 0x00000b37u, 0x0003003eu, 0x00002bd9u, 0x00002be6u, 0x000500c7u, 0x00000008u, 0x00002be8u, 0x00002be6u, 0x0000035eu, 0x0003003eu, 0x00002bdau, 0x00002be8u, 0x000500c3u, 0x00000008u, 0x00002beau, 0x00002be6u, 0x0000025du, 0x0003003eu, 0x00002bdcu, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x00002bebu, 0x00002bdcu, 0x00002beau, 0x0004003du, 0x000001aeu, 0x00002becu, 0x00002bebu, 0x00040072u, 0x000000efu, 0x00002bedu, 0x00002becu, 0x0003003eu, 0x00002bdbu, 0x00002bedu, 0x00050041u, 0x00000046u, 0x00002beeu, 0x00002bdbu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002befu, 0x00002beeu, 0x00050084u, 0x00000008u, 0x00002bf1u, 0x00002befu, 0x00002be8u, 0x000500c3u, 0x00000008u, 0x00002bf2u, 0x00002bf1u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00002bf3u, 0x00002bdbu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002bf4u, 0x00002bf3u, 0x00050080u, 0x00000008u, 0x00002bf5u, 0x00002bf2u, 0x00002bf4u, 0x0003003eu, 0x00002bddu, 0x00002bf5u, 0x00050050u, 0x000000efu, 0x00002bf8u, 0x00002bf5u, 0x00002be2u, 0x0003003eu, 0x00002bdeu, 0x00002bf8u, 0x0003003eu, 0x00002b77u, 0x00002bf8u, 0x00050041u, 0x00000046u, 0x00002b87u, 0x00002b77u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002b88u, 0x00002b87u, 0x0003003eu, 0x00002b79u, 0x00002b88u, 0x0004003du, 0x00000044u, 0x00002b89u, 0x000029dcu, 0x0007004fu, 0x000000efu, 0x00002b8au, 0x00002b89u, 0x00002b89u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00002b8bu, 0x00002b77u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002b8cu, 0x00002b8bu, 0x00050050u, 0x000000efu, 0x00002b8du, 0x00002b8cu, 0x00002b8cu, 0x00050084u, 0x000000efu, 0x00002b8eu, 0x00002b8au, 0x00002b8du, 0x0003003eu, 0x00002b7au, 0x00002b8eu, 0x000500c3u, 0x00000008u, 0x00002b90u, 0x00000c2eu, 0x00002b88u, 0x0004007eu, 0x00000008u, 0x00002b91u, 0x00002b90u, 0x000500c7u, 0x00000008u, 0x00002b92u, 0x00000c2du, 0x00002b91u, 0x0003003eu, 0x00002b7bu, 0x00002b92u, 0x0004003du, 0x000000efu, 0x00002b93u, 0x00002b7au, 0x00050050u, 0x000000efu, 0x00002b95u, 0x00002b92u, 0x00002b92u, 0x000500c7u, 0x000000efu, 0x00002b96u, 0x00002b93u, 0x00002b95u, 0x0003003eu, 0x00002b7cu, 0x00002b96u, 0x000500abu, 0x00000069u, 0x00002b98u, 0x00002b88u, 0x0000026fu, 0x000300f7u, 0x00002b99u, 0x00000000u, 0x000400fau, 0x00002b98u, 0x00002b9au, 0x00002b9bu, 0x000200f8u, 0x00002b9bu, 0x0004003du, 0x000000efu, 0x00002ba1u, 0x00002b7au, 0x000500c4u, 0x000000efu, 0x00002ba3u, 0x00002ba1u, 0x0000f3a2u, 0x0003003eu, 0x00002b7du, 0x00002ba3u, 0x000200f9u, 0x00002b99u, 0x000200f8u, 0x00002b9au, 0x0004003du, 0x000000efu, 0x00002b9cu, 0x00002b7au, 0x00050082u, 0x00000008u, 0x00002b9eu, 0x0000026cu, 0x00002b88u, 0x00050050u, 0x000000efu, 0x00002b9fu, 0x00002b9eu, 0x00002b9eu, 0x000500c3u, 0x000000efu, 0x00002ba0u, 0x00002b9cu, 0x00002b9fu, 0x0003003eu, 0x00002b7au, 0x00002ba0u, 0x0003003eu, 0x00002b7du, 0x00002ba0u, 0x000200f9u, 0x00002b99u, 0x000200f8u, 0x00002b99u, 0x0004003du, 0x000000efu, 0x00002ba4u, 0x00002b7cu, 0x000500abu, 0x0000087bu, 0x00002ba5u, 0x00002ba4u, 0x00000c47u, 0x0004009au, 0x00000069u, 0x00002ba6u, 0x00002ba5u, 0x000300f7u, 0x00002ba7u, 0x00000000u, 0x000400fau, 0x00002ba6u, 0x00002ba8u, 0x00002ba7u, 0x000200f8u, 0x00002ba8u, 0x00050041u, 0x00000046u, 0x00002ba9u, 0x00002b7cu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002baau, 0x00002ba9u, 0x000500abu, 0x00000069u, 0x00002bacu, 0x00002baau, 0x00002b92u, 0x000300f7u, 0x00002badu, 0x00000000u, 0x000400fau, 0x00002bacu, 0x00002baeu, 0x00002badu, 0x000200f8u, 0x00002baeu, 0x0004003du, 0x00000008u, 0x00002bb0u, 0x00002ba9u, 0x000500abu, 0x00000069u, 0x00002bb1u, 0x00002bb0u, 0x00000220u, 0x000200f9u, 0x00002badu, 0x000200f8u, 0x00002badu, 0x000700f5u, 0x00000069u, 0x00002bb2u, 0x00002bacu, 0x00002ba8u, 0x00002bb1u, 0x00002baeu, 0x000300f7u, 0x00002bb3u, 0x00000000u, 0x000400fau, 0x00002bb2u, 0x00002bb4u, 0x00002bb3u, 0x000200f8u, 0x00002bb4u, 0x00050041u, 0x00000046u, 0x00002bb5u, 0x00002b7au, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002bb6u, 0x00002bb5u, 0x000500c7u, 0x00000008u, 0x00002bb7u, 0x00002bb6u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002bb8u, 0x00002bb7u, 0x00000220u, 0x000300f7u, 0x00002bb9u, 0x00000000u, 0x000400fau, 0x00002bb8u, 0x00002bbau, 0x00002bbbu, 0x000200f8u, 0x00002bbbu, 0x00050041u, 0x00000046u, 0x00002bbdu, 0x00002b7du, 0x0000032du, 0x0003003eu, 0x00002bbdu, 0x00000c60u, 0x000200f9u, 0x00002bb9u, 0x000200f8u, 0x00002bbau, 0x00050041u, 0x00000046u, 0x00002bbcu, 0x00002b7du, 0x0000032du, 0x0003003eu, 0x00002bbcu, 0x00000c1bu, 0x000200f9u, 0x00002bb9u, 0x000200f8u, 0x00002bb9u, 0x0003003eu, 0x000029ddu, 0x00000559u, 0x000200f9u, 0x00002bb3u, 0x000200f8u, 0x00002bb3u, 0x000600a9u, 0x00000069u, 0x0000f3c5u, 0x00002bb2u, 0x00000559u, 0x0000f3c4u, 0x00050041u, 0x00000046u, 0x00002bbeu, 0x00002b7cu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002bbfu, 0x00002bbeu, 0x000500abu, 0x00000069u, 0x00002bc1u, 0x00002bbfu, 0x00002b92u, 0x000300f7u, 0x00002bc2u, 0x00000000u, 0x000400fau, 0x00002bc1u, 0x00002bc3u, 0x00002bc2u, 0x000200f8u, 0x00002bc3u, 0x0004003du, 0x00000008u, 0x00002bc5u, 0x00002bbeu, 0x000500abu, 0x00000069u, 0x00002bc6u, 0x00002bc5u, 0x00000220u, 0x000200f9u, 0x00002bc2u, 0x000200f8u, 0x00002bc2u, 0x000700f5u, 0x00000069u, 0x00002bc7u, 0x00002bc1u, 0x00002bb3u, 0x00002bc6u, 0x00002bc3u, 0x000300f7u, 0x00002bc8u, 0x00000000u, 0x000400fau, 0x00002bc7u, 0x00002bc9u, 0x00002bc8u, 0x000200f8u, 0x00002bc9u, 0x00050041u, 0x00000046u, 0x00002bcau, 0x00002b7au, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002bcbu, 0x00002bcau, 0x000500c7u, 0x00000008u, 0x00002bccu, 0x00002bcbu, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00002bcdu, 0x00002bccu, 0x00000220u, 0x000300f7u, 0x00002bceu, 0x00000000u, 0x000400fau, 0x00002bcdu, 0x00002bcfu, 0x00002bd0u, 0x000200f8u, 0x00002bd0u, 0x00050041u, 0x00000046u, 0x00002bd2u, 0x00002b7du, 0x0000045cu, 0x0003003eu, 0x00002bd2u, 0x00000c60u, 0x000200f9u, 0x00002bceu, 0x000200f8u, 0x00002bcfu, 0x00050041u, 0x00000046u, 0x00002bd1u, 0x00002b7du, 0x0000045cu, 0x0003003eu, 0x00002bd1u, 0x00000c1bu, 0x000200f9u, 0x00002bceu, 0x000200f8u, 0x00002bceu, 0x0003003eu, 0x000029ddu, 0x00000559u, 0x000200f9u, 0x00002bc8u, 0x000200f8u, 0x00002bc8u, 0x000600a9u, 0x00000069u, 0x0000f3c6u, 0x00002bc7u, 0x00000559u, 0x0000f3c5u, 0x000200f9u, 0x00002ba7u, 0x000200f8u, 0x00002ba7u, 0x000700f5u, 0x00000069u, 0x00007fcfu, 0x0000f3c4u, 0x00002b99u, 0x0000f3c6u, 0x00002bc8u, 0x000300f7u, 0x00002bd4u, 0x00000000u, 0x000400fau, 0x00002b82u, 0x00002bd5u, 0x00002bd4u, 0x000200f8u, 0x00002bd5u, 0x0003003eu, 0x00002b7du, 0x00000c7au, 0x0003003eu, 0x000029ddu, 0x00000559u, 0x000200f9u, 0x00002bd4u, 0x000200f8u, 0x00002bd4u, 0x000600a9u, 0x00000069u, 0x0000f3c7u, 0x00002b82u, 0x00000559u, 0x00007fcfu, 0x0004003du, 0x000000efu, 0x00002bd6u, 0x00002b7du, 0x0008000cu, 0x000000efu, 0x00002bd7u, 0x00000001u, 0x0000002du, 0x00002bd6u, 0x00000c7du, 0x00000c7eu, 0x0003003eu, 0x00002b7eu, 0x00002bd7u, 0x0003003eu, 0x0000211au, 0x0000f3c7u, 0x0003003eu, 0x00002118u, 0x00002bd7u, 0x000200f9u, 0x00002a22u, 0x000200f8u, 0x00002a22u, 0x000700f5u, 0x00000069u, 0x00008069u, 0x0000f3c1u, 0x00002accu, 0x0000f3c7u, 0x00002bd4u, 0x000700f5u, 0x000000efu, 0x0000804fu, 0x00008059u, 0x00002accu, 0x00002bd7u, 0x00002bd4u, 0x000700f5u, 0x000000efu, 0x0000802bu, 0x00008035u, 0x00002accu, 0x00002b53u, 0x00002bd4u, 0x000200f9u, 0x00002a18u, 0x000200f8u, 0x00002a18u, 0x000700f5u, 0x00000069u, 0x00008068u, 0x00008069u, 0x00002a22u, 0x00000536u, 0x00002a35u, 0x000700f5u, 0x000000efu, 0x0000804eu, 0x0000804fu, 0x00002a22u, 0x00008067u, 0x00002a35u, 0x000700f5u, 0x000000efu, 0x0000802au, 0x0000802bu, 0x00002a22u, 0x0000804du, 0x00002a35u, 0x000700f5u, 0x000000efu, 0x00008015u, 0x00002acfu, 0x00002a22u, 0x00002bfbu, 0x00002a35u, 0x00050041u, 0x00000046u, 0x00002a3fu, 0x0000210eu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a40u, 0x00002a3fu, 0x00050041u, 0x00000046u, 0x00002a41u, 0x0000210fu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a42u, 0x00002a41u, 0x000500c3u, 0x00000008u, 0x00002a44u, 0x00002292u, 0x0000078bu, 0x00050084u, 0x00000008u, 0x00002a45u, 0x00002a42u, 0x00002a44u, 0x00050080u, 0x00000008u, 0x00002a46u, 0x00002a40u, 0x00002a45u, 0x0004003du, 0x00000008u, 0x00002a48u, 0x00002a41u, 0x000500c3u, 0x00000008u, 0x00002a49u, 0x00002a48u, 0x0000078bu, 0x000500c7u, 0x00000008u, 0x00002a4bu, 0x00002292u, 0x00000d9au, 0x00050084u, 0x00000008u, 0x00002a4cu, 0x00002a49u, 0x00002a4bu, 0x00050080u, 0x00000008u, 0x00002a4du, 0x00002a46u, 0x00002a4cu, 0x0003003eu, 0x00002119u, 0x00002a4du, 0x000500c3u, 0x00000008u, 0x00002a4fu, 0x00002a4du, 0x00000263u, 0x0003003eu, 0x000029e1u, 0x00002a4fu, 0x0003003eu, 0x000029e2u, 0x0000299eu, 0x0003003eu, 0x000029e3u, 0x000029a0u, 0x000500c7u, 0x00000008u, 0x00002a58u, 0x000029a0u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00002a59u, 0x000029a4u, 0x00002a58u, 0x0003003eu, 0x000029e4u, 0x00002a59u, 0x000500c4u, 0x00000008u, 0x00002a5bu, 0x00002a4fu, 0x00000daeu, 0x0003003eu, 0x000029e1u, 0x00002a5bu, 0x0004003du, 0x00000008u, 0x00002a5eu, 0x00002a41u, 0x000500c3u, 0x00000008u, 0x00002a5fu, 0x00002a5eu, 0x00000263u, 0x00050084u, 0x00000008u, 0x00002a60u, 0x00002a59u, 0x00002a5fu, 0x00050041u, 0x00000046u, 0x00002a62u, 0x00002110u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00002a63u, 0x00002a62u, 0x000500c3u, 0x00000008u, 0x00002a64u, 0x00002a63u, 0x00000263u, 0x00050084u, 0x00000008u, 0x00002a65u, 0x000029a0u, 0x00002a64u, 0x00050080u, 0x00000008u, 0x00002a66u, 0x00002a60u, 0x00002a65u, 0x00050080u, 0x00000008u, 0x00002a68u, 0x00002a5bu, 0x00002a66u, 0x0003003eu, 0x000029e1u, 0x00002a68u, 0x000500c3u, 0x00000008u, 0x00002a6au, 0x00002a68u, 0x00000dbeu, 0x0003003eu, 0x000029e1u, 0x00002a6au, 0x0003003eu, 0x000029e5u, 0x00002a6au, 0x00050082u, 0x00000008u, 0x00002c04u, 0x00002a6au, 0x00000b21u, 0x0003003eu, 0x000029e5u, 0x00002c04u, 0x000500c4u, 0x00000008u, 0x00002c06u, 0x00002c04u, 0x0000026cu, 0x0003003eu, 0x000029e5u, 0x00002c06u, 0x000500c3u, 0x00000008u, 0x00002c08u, 0x00002c06u, 0x0000026cu, 0x0003003eu, 0x000029e5u, 0x00002c08u, 0x00050080u, 0x00000008u, 0x00002c0au, 0x00002c08u, 0x00000b21u, 0x0003003eu, 0x000029e5u, 0x00002c0au, 0x0008000cu, 0x00000008u, 0x00002c0cu, 0x00000001u, 0x0000002du, 0x00002c0au, 0x00000220u, 0x000003edu, 0x0003003eu, 0x00002c02u, 0x00002c0cu, 0x0003003eu, 0x00002119u, 0x00002c0cu, 0x0003003eu, 0x0000210au, 0x00008015u, 0x0003003eu, 0x0000210bu, 0x0000802au, 0x0003003eu, 0x0000210cu, 0x0000804eu, 0x0003003eu, 0x0000210du, 0x00002c0cu, 0x0003003eu, 0x00002108u, 0x00008068u, 0x000500c7u, 0x00000006u, 0x000022bdu, 0x000021b6u, 0x00000742u, 0x0003003eu, 0x0000211bu, 0x000022bdu, 0x00050080u, 0x00000006u, 0x000022bfu, 0x000022bdu, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x000022c0u, 0x000022bfu, 0x00000742u, 0x0003003eu, 0x0000211cu, 0x000022c0u, 0x000500c2u, 0x00000006u, 0x000022c2u, 0x000021b6u, 0x00000464u, 0x0003003eu, 0x0000211du, 0x000022c2u, 0x00040071u, 0x00000006u, 0x000022c5u, 0x00002984u, 0x0004007cu, 0x00000008u, 0x000022c6u, 0x000022c5u, 0x0003003eu, 0x0000211eu, 0x000022c6u, 0x000300f7u, 0x000022c8u, 0x00000000u, 0x000400fau, 0x0000220du, 0x000022c9u, 0x000022c8u, 0x000200f8u, 0x000022c9u, 0x0003003eu, 0x00002120u, 0x000022bdu, 0x0003003eu, 0x00002121u, 0x000022c0u, 0x0003003eu, 0x00002123u, 0x000022c2u, 0x0003003eu, 0x00002124u, 0x000022c6u, 0x0003003eu, 0x00002125u, 0x00008015u, 0x0003003eu, 0x00002126u, 0x0000802au, 0x0003003eu, 0x00002127u, 0x0000804eu, 0x0003003eu, 0x00002128u, 0x00008068u, 0x0003003eu, 0x00002129u, 0x000021e3u, 0x0003003eu, 0x0000212au, 0x000021e6u, 0x0003003eu, 0x0000212bu, 0x000021e9u, 0x0003003eu, 0x00002c0du, 0x00000536u, 0x0003003eu, 0x00002c0eu, 0x00000536u, 0x0003003eu, 0x00002c0fu, 0x0000032du, 0x000300f7u, 0x00002c16u, 0x00000000u, 0x000400fau, 0x00008068u, 0x00002c17u, 0x00002c18u, 0x000200f8u, 0x00002c18u, 0x00050082u, 0x000000efu, 0x00002c1bu, 0x0000802au, 0x00008015u, 0x0003003eu, 0x00002c10u, 0x00002c1bu, 0x000500c3u, 0x000000efu, 0x00002c1eu, 0x00002c1bu, 0x0000f3a5u, 0x000500c6u, 0x000000efu, 0x00002c20u, 0x00002c1bu, 0x00002c1eu, 0x0003003eu, 0x00002c10u, 0x00002c20u, 0x00050082u, 0x000000efu, 0x00002c23u, 0x0000804eu, 0x00008015u, 0x0003003eu, 0x00002c11u, 0x00002c23u, 0x000500c3u, 0x000000efu, 0x00002c26u, 0x00002c23u, 0x0000f3a5u, 0x000500c6u, 0x000000efu, 0x00002c28u, 0x00002c23u, 0x00002c26u, 0x0003003eu, 0x00002c11u, 0x00002c28u, 0x0007000cu, 0x000000efu, 0x00002c2bu, 0x00000001u, 0x0000002au, 0x00002c20u, 0x00002c28u, 0x0003003eu, 0x00002c12u, 0x00002c2bu, 0x00050041u, 0x00000046u, 0x00002c2cu, 0x00002c12u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002c2du, 0x00002c2cu, 0x00050041u, 0x00000046u, 0x00002c2eu, 0x00002c12u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002c2fu, 0x00002c2eu, 0x0007000cu, 0x00000008u, 0x00002c30u, 0x00000001u, 0x0000002au, 0x00002c2du, 0x00002c2fu, 0x0003003eu, 0x00002c13u, 0x00002c30u, 0x000500afu, 0x00000069u, 0x00002c32u, 0x00002c30u, 0x0000189cu, 0x000300f7u, 0x00002c33u, 0x00000000u, 0x000400fau, 0x00002c32u, 0x00002c34u, 0x00002c35u, 0x000200f8u, 0x00002c35u, 0x000500b1u, 0x00000069u, 0x00002c38u, 0x00002c30u, 0x0000115du, 0x000300f7u, 0x00002c39u, 0x00000000u, 0x000400fau, 0x00002c38u, 0x00002c3au, 0x00002c3bu, 0x000200f8u, 0x00002c3bu, 0x000500c3u, 0x00000008u, 0x00002c52u, 0x00002c30u, 0x00000236u, 0x0006000cu, 0x00000008u, 0x00002c53u, 0x00000001u, 0x0000004au, 0x00002c52u, 0x0007000cu, 0x00000008u, 0x00002c54u, 0x00000001u, 0x0000002au, 0x00002c53u, 0x00000220u, 0x0003003eu, 0x00002c14u, 0x00002c54u, 0x0004007cu, 0x00000006u, 0x00002c56u, 0x00002c54u, 0x000500aeu, 0x00000069u, 0x00002c58u, 0x00002c56u, 0x000022c2u, 0x0003003eu, 0x00002c0eu, 0x00002c58u, 0x000400a8u, 0x00000069u, 0x00002c5bu, 0x000021e6u, 0x000500a7u, 0x00000069u, 0x00002c5cu, 0x00002c58u, 0x00002c5bu, 0x000400a8u, 0x00000069u, 0x00002c5eu, 0x000021e9u, 0x000500a7u, 0x00000069u, 0x00002c5fu, 0x00002c5cu, 0x00002c5eu, 0x000300f7u, 0x00002c60u, 0x00000000u, 0x000400fau, 0x00002c5fu, 0x00002c61u, 0x00002c62u, 0x000200f8u, 0x00002c62u, 0x000500c4u, 0x00000008u, 0x00002c64u, 0x00002c30u, 0x00000230u, 0x000500c3u, 0x00000008u, 0x00002c66u, 0x00002c64u, 0x00002c54u, 0x000500c7u, 0x00000008u, 0x00002c67u, 0x00002c66u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x00002c68u, 0x00002c67u, 0x0003003eu, 0x00002122u, 0x00002c68u, 0x0003003eu, 0x00002c0fu, 0x00002c56u, 0x000200f9u, 0x00002c60u, 0x000200f8u, 0x00002c61u, 0x0003003eu, 0x00002122u, 0x0000187du, 0x000200f9u, 0x00002c60u, 0x000200f8u, 0x00002c60u, 0x000700f5u, 0x00000012u, 0x0000817cu, 0x0000187du, 0x00002c61u, 0x00002c68u, 0x00002c62u, 0x000600a9u, 0x00000006u, 0x0000f3c8u, 0x00002c5fu, 0x0000032du, 0x00002c56u, 0x000200f9u, 0x00002c39u, 0x000200f8u, 0x00002c3au, 0x000500aau, 0x00000069u, 0x00002c3du, 0x000022c2u, 0x0000032du, 0x0003003eu, 0x00002c0eu, 0x00002c3du, 0x0003003eu, 0x00002c0du, 0x00000559u, 0x000400a8u, 0x00000069u, 0x00002c3fu, 0x000021e6u, 0x000400a8u, 0x00000069u, 0x00002c41u, 0x000021e9u, 0x000500a7u, 0x00000069u, 0x00002c42u, 0x00002c3fu, 0x00002c41u, 0x000300f7u, 0x00002c43u, 0x00000000u, 0x000400fau, 0x00002c42u, 0x00002c44u, 0x00002c45u, 0x000200f8u, 0x00002c45u, 0x0007000cu, 0x00000008u, 0x00002c4bu, 0x00000001u, 0x0000002au, 0x000022c6u, 0x00002c30u, 0x000500c4u, 0x00000008u, 0x00002c4cu, 0x00002c4bu, 0x00000230u, 0x000600a9u, 0x00000008u, 0x00002c4eu, 0x000021e6u, 0x000018b8u, 0x00000220u, 0x00050080u, 0x00000008u, 0x00002c4fu, 0x00002c4cu, 0x00002c4eu, 0x00040072u, 0x00000012u, 0x00002c50u, 0x00002c4fu, 0x0003003eu, 0x00002122u, 0x00002c50u, 0x000200f9u, 0x00002c43u, 0x000200f8u, 0x00002c44u, 0x000600a9u, 0x00000008u, 0x00002c47u, 0x00002c3du, 0x0000035eu, 0x00000220u, 0x00040072u, 0x00000012u, 0x00002c48u, 0x00002c47u, 0x0003003eu, 0x00002122u, 0x00002c48u, 0x000200f9u, 0x00002c43u, 0x000200f8u, 0x00002c43u, 0x000700f5u, 0x00000012u, 0x0000817bu, 0x00002c48u, 0x00002c44u, 0x00002c50u, 0x00002c45u, 0x000200f9u, 0x00002c39u, 0x000200f8u, 0x00002c39u, 0x000700f5u, 0x00000012u, 0x0000817au, 0x0000817bu, 0x00002c43u, 0x0000817cu, 0x00002c60u, 0x000700f5u, 0x00000006u, 0x0000815bu, 0x0000032du, 0x00002c43u, 0x0000f3c8u, 0x00002c60u, 0x000700f5u, 0x00000069u, 0x00008144u, 0x00002c3du, 0x00002c43u, 0x00002c58u, 0x00002c60u, 0x000600a9u, 0x00000069u, 0x0000f3c9u, 0x00002c38u, 0x00000559u, 0x00000536u, 0x000200f9u, 0x00002c33u, 0x000200f8u, 0x00002c34u, 0x0003003eu, 0x00002c0eu, 0x00000559u, 0x0003003eu, 0x00002122u, 0x0000187du, 0x0003003eu, 0x00002c0fu, 0x000022c2u, 0x000200f9u, 0x00002c33u, 0x000200f8u, 0x00002c33u, 0x000700f5u, 0x00000012u, 0x00008179u, 0x0000187du, 0x00002c34u, 0x0000817au, 0x00002c39u, 0x000700f5u, 0x00000069u, 0x00008161u, 0x00000536u, 0x00002c34u, 0x0000f3c9u, 0x00002c39u, 0x000700f5u, 0x00000006u, 0x0000815au, 0x000022c2u, 0x00002c34u, 0x0000815bu, 0x00002c39u, 0x000700f5u, 0x00000069u, 0x00008143u, 0x00000559u, 0x00002c34u, 0x00008144u, 0x00002c39u, 0x000200f9u, 0x00002c16u, 0x000200f8u, 0x00002c17u, 0x0003003eu, 0x00002c0eu, 0x00000559u, 0x0003003eu, 0x00002122u, 0x0000187du, 0x000200f9u, 0x00002c16u, 0x000200f8u, 0x00002c16u, 0x000700f5u, 0x00000012u, 0x00008178u, 0x0000187du, 0x00002c17u, 0x00008179u, 0x00002c33u, 0x000700f5u, 0x00000069u, 0x00008160u, 0x00000536u, 0x00002c17u, 0x00008161u, 0x00002c33u, 0x000700f5u, 0x00000006u, 0x00008159u, 0x0000032du, 0x00002c17u, 0x0000815au, 0x00002c33u, 0x000700f5u, 0x00000069u, 0x00008142u, 0x00000559u, 0x00002c17u, 0x00008143u, 0x00002c33u, 0x000300f7u, 0x00002c6cu, 0x00000000u, 0x000400fau, 0x000021e3u, 0x00002c6du, 0x00002c6cu, 0x000200f8u, 0x00002c6du, 0x000300f7u, 0x00002c6fu, 0x00000000u, 0x000400fau, 0x00008142u, 0x00002c70u, 0x00002c6fu, 0x000200f8u, 0x00002c70u, 0x0003003eu, 0x00002c0fu, 0x000022c2u, 0x000200f9u, 0x00002c6fu, 0x000200f8u, 0x00002c6fu, 0x000600a9u, 0x00000006u, 0x0000f3cau, 0x00008142u, 0x000022c2u, 0x00008159u, 0x000400a8u, 0x00000069u, 0x00002c73u, 0x000021e9u, 0x000300f7u, 0x00002c74u, 0x00000000u, 0x000400fau, 0x00002c73u, 0x00002c75u, 0x00002c76u, 0x000200f8u, 0x00002c76u, 0x00050080u, 0x00000006u, 0x00002c8du, 0x000022bdu, 0x0000f3cau, 0x000500a6u, 0x00000069u, 0x00002c90u, 0x00008142u, 0x00008160u, 0x000600a9u, 0x00000008u, 0x00002c91u, 0x00002c90u, 0x0000022au, 0x0000022du, 0x0004007cu, 0x00000006u, 0x00002c92u, 0x00002c91u, 0x00050080u, 0x00000006u, 0x00002c93u, 0x00002c8du, 0x00002c92u, 0x000500c7u, 0x00000006u, 0x00002c94u, 0x00002c93u, 0x00000742u, 0x0003003eu, 0x00002121u, 0x00002c94u, 0x000600a9u, 0x00000008u, 0x00002c99u, 0x00008160u, 0x00000220u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002c9au, 0x00002c99u, 0x00050080u, 0x00000006u, 0x00002c9bu, 0x00002c8du, 0x00002c9au, 0x000500c7u, 0x00000006u, 0x00002c9cu, 0x00002c9bu, 0x00000742u, 0x0003003eu, 0x00002120u, 0x00002c9cu, 0x000200f9u, 0x00002c74u, 0x000200f8u, 0x00002c75u, 0x00050080u, 0x00000006u, 0x00002c79u, 0x000022bdu, 0x0000f3cau, 0x000500c7u, 0x00000006u, 0x00002c7au, 0x00002c79u, 0x00000742u, 0x0003003eu, 0x00002120u, 0x00002c7au, 0x000400a8u, 0x00000069u, 0x00002c7cu, 0x00008142u, 0x000300f7u, 0x00002c7du, 0x00000000u, 0x000400fau, 0x00002c7cu, 0x00002c7eu, 0x00002c7du, 0x000200f8u, 0x00002c7eu, 0x000400a8u, 0x00000069u, 0x00002c80u, 0x000021e6u, 0x000500a7u, 0x00000069u, 0x00002c82u, 0x00002c80u, 0x00008160u, 0x000200f9u, 0x00002c7du, 0x000200f8u, 0x00002c7du, 0x000700f5u, 0x00000069u, 0x00002c83u, 0x00008142u, 0x00002c75u, 0x00002c82u, 0x00002c7eu, 0x000300f7u, 0x00002c84u, 0x00000000u, 0x000400fau, 0x00002c83u, 0x00002c85u, 0x00002c86u, 0x000200f8u, 0x00002c86u, 0x00050080u, 0x00000006u, 0x00002c89u, 0x00002c7au, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x00002c8au, 0x00002c89u, 0x00000742u, 0x0003003eu, 0x00002121u, 0x00002c8au, 0x000200f9u, 0x00002c84u, 0x000200f8u, 0x00002c85u, 0x0003003eu, 0x00002121u, 0x00002c7au, 0x000200f9u, 0x00002c84u, 0x000200f8u, 0x00002c84u, 0x000700f5u, 0x00000006u, 0x00008176u, 0x00002c7au, 0x00002c85u, 0x00002c8au, 0x00002c86u, 0x000200f9u, 0x00002c74u, 0x000200f8u, 0x00002c74u, 0x000700f5u, 0x00000006u, 0x00008175u, 0x00008176u, 0x00002c84u, 0x00002c94u, 0x00002c76u, 0x000700f5u, 0x00000006u, 0x0000816du, 0x00002c7au, 0x00002c84u, 0x00002c9cu, 0x00002c76u, 0x000200f9u, 0x00002c6cu, 0x000200f8u, 0x00002c6cu, 0x000700f5u, 0x00000006u, 0x0000816fu, 0x000022c0u, 0x00002c16u, 0x00008175u, 0x00002c74u, 0x000700f5u, 0x00000006u, 0x0000816cu, 0x000022bdu, 0x00002c16u, 0x0000816du, 0x00002c74u, 0x0003003eu, 0x0000211bu, 0x0000816cu, 0x0003003eu, 0x0000211cu, 0x0000816fu, 0x0003003eu, 0x0000211fu, 0x00008178u, 0x000200f9u, 0x000022c8u, 0x000200f8u, 0x000022c8u, 0x000700f5u, 0x00000012u, 0x0000ab84u, 0x0000ab90u, 0x00002a18u, 0x00008178u, 0x00002c6cu, 0x000700f5u, 0x00000006u, 0x00009620u, 0x000022c0u, 0x00002a18u, 0x0000816fu, 0x00002c6cu, 0x000700f5u, 0x00000006u, 0x000081ddu, 0x000022bdu, 0x00002a18u, 0x0000816cu, 0x00002c6cu, 0x000300f7u, 0x000022dau, 0x00000000u, 0x000400fau, 0x00002204u, 0x000022dbu, 0x000022dau, 0x000200f8u, 0x000022dbu, 0x00080041u, 0x00000671u, 0x000022deu, 0x00000a20u, 0x00000220u, 0x00001fa1u, 0x0000022du, 0x000081ddu, 0x0004003du, 0x0000000fu, 0x000022dfu, 0x000022deu, 0x00040071u, 0x00000006u, 0x000022e0u, 0x000022dfu, 0x0003003eu, 0x0000212cu, 0x000022e0u, 0x0003003eu, 0x0000212eu, 0x000022e0u, 0x00060041u, 0x000002b4u, 0x00002ca0u, 0x000002b2u, 0x00000220u, 0x000022e0u, 0x0004003du, 0x000002aeu, 0x00002ca1u, 0x00002ca0u, 0x00050051u, 0x00000006u, 0x00002ca2u, 0x00002ca1u, 0x00000000u, 0x0003003eu, 0x00006fcau, 0x00002ca2u, 0x00050051u, 0x00000006u, 0x00002ca4u, 0x00002ca1u, 0x00000001u, 0x0003003eu, 0x00006fcbu, 0x00002ca4u, 0x00050051u, 0x00000006u, 0x00002ca6u, 0x00002ca1u, 0x00000002u, 0x0003003eu, 0x00006fccu, 0x00002ca6u, 0x00050051u, 0x00000006u, 0x00002ca8u, 0x00002ca1u, 0x00000003u, 0x0003003eu, 0x00006fcdu, 0x00002ca8u, 0x00050051u, 0x00000006u, 0x00002caau, 0x00002ca1u, 0x00000004u, 0x0003003eu, 0x00006fceu, 0x00002caau, 0x00050051u, 0x00000006u, 0x00002cacu, 0x00002ca1u, 0x00000005u, 0x0003003eu, 0x00006fcfu, 0x00002cacu, 0x00050051u, 0x0000000fu, 0x00002caeu, 0x00002ca1u, 0x00000006u, 0x0003003eu, 0x00006fd0u, 0x00002caeu, 0x00050051u, 0x0000000fu, 0x00002cb0u, 0x00002ca1u, 0x00000007u, 0x0003003eu, 0x00006fd1u, 0x00002cb0u, 0x00050051u, 0x0000000fu, 0x00002cb2u, 0x00002ca1u, 0x00000008u, 0x0003003eu, 0x00006fd2u, 0x00002cb2u, 0x00050051u, 0x0000000fu, 0x00002cb4u, 0x00002ca1u, 0x00000009u, 0x0003003eu, 0x00006fd3u, 0x00002cb4u, 0x00050051u, 0x0000000fu, 0x00002cb6u, 0x00002ca1u, 0x0000000au, 0x0003003eu, 0x00006fd4u, 0x00002cb6u, 0x00050051u, 0x0000000fu, 0x00002cb8u, 0x00002ca1u, 0x0000000bu, 0x0003003eu, 0x00006fd5u, 0x00002cb8u, 0x00050051u, 0x0000000fu, 0x00002cbau, 0x00002ca1u, 0x0000000cu, 0x0003003eu, 0x00006fd6u, 0x00002cbau, 0x00050051u, 0x0000000fu, 0x00002cbcu, 0x00002ca1u, 0x0000000du, 0x0003003eu, 0x00006fd7u, 0x00002cbcu, 0x00110050u, 0x00000023u, 0x00006fe6u, 0x00002ca2u, 0x00002ca4u, 0x00002ca6u, 0x00002ca8u, 0x00002caau, 0x00002cacu, 0x00002caeu, 0x00002cb0u, 0x00002cb2u, 0x00002cb4u, 0x00002cb6u, 0x00002cb8u, 0x00002cbau, 0x00002cbcu, 0x0003003eu, 0x00006fe7u, 0x00002ca2u, 0x0003003eu, 0x00006fe8u, 0x00002ca4u, 0x0003003eu, 0x00006fe9u, 0x00002ca6u, 0x0003003eu, 0x00006feau, 0x00002ca8u, 0x0003003eu, 0x00006febu, 0x00002caau, 0x0003003eu, 0x00006fecu, 0x00002cacu, 0x0003003eu, 0x00006fedu, 0x00002caeu, 0x0003003eu, 0x00006feeu, 0x00002cb0u, 0x0003003eu, 0x00006fefu, 0x00002cb2u, 0x0003003eu, 0x00006ff0u, 0x00002cb4u, 0x0003003eu, 0x00006ff1u, 0x00002cb6u, 0x0003003eu, 0x00006ff2u, 0x00002cb8u, 0x0003003eu, 0x00006ff3u, 0x00002cbau, 0x0003003eu, 0x00006ff4u, 0x00002cbcu, 0x0003003eu, 0x0000726cu, 0x00002ca2u, 0x0003003eu, 0x0000726du, 0x00002ca4u, 0x0003003eu, 0x0000726eu, 0x00002ca6u, 0x0003003eu, 0x0000726fu, 0x00002ca8u, 0x0003003eu, 0x00007270u, 0x00002caau, 0x0003003eu, 0x00007271u, 0x00002cacu, 0x0003003eu, 0x00007272u, 0x00002caeu, 0x0003003eu, 0x00007273u, 0x00002cb0u, 0x0003003eu, 0x00007274u, 0x00002cb2u, 0x0003003eu, 0x00007275u, 0x00002cb4u, 0x0003003eu, 0x00007276u, 0x00002cb6u, 0x0003003eu, 0x00007277u, 0x00002cb8u, 0x0003003eu, 0x00007278u, 0x00002cbau, 0x0003003eu, 0x00007279u, 0x00002cbcu, 0x0003003eu, 0x00007297u, 0x00002ca2u, 0x0003003eu, 0x00007298u, 0x00002ca4u, 0x0003003eu, 0x00007299u, 0x00002ca6u, 0x0003003eu, 0x0000729au, 0x00002ca8u, 0x0003003eu, 0x0000729bu, 0x00002caau, 0x0003003eu, 0x0000729cu, 0x00002cacu, 0x0003003eu, 0x0000729du, 0x00002caeu, 0x0003003eu, 0x0000729eu, 0x00002cb0u, 0x0003003eu, 0x0000729fu, 0x00002cb2u, 0x0003003eu, 0x000072a0u, 0x00002cb4u, 0x0003003eu, 0x000072a1u, 0x00002cb6u, 0x0003003eu, 0x000072a2u, 0x00002cb8u, 0x0003003eu, 0x000072a3u, 0x00002cbau, 0x0003003eu, 0x000072a4u, 0x00002cbcu, 0x0003003eu, 0x00002131u, 0x000021c0u, 0x0003003eu, 0x00002132u, 0x00008015u, 0x0003003eu, 0x00002133u, 0x000021d1u, 0x0003003eu, 0x00002134u, 0x000021d4u, 0x0003003eu, 0x00002135u, 0x000021d7u, 0x0003003eu, 0x00002136u, 0x00002201u, 0x0003003eu, 0x00002137u, 0x00000536u, 0x0003003eu, 0x00002138u, 0x00001dbfu, 0x00040071u, 0x00000006u, 0x00002e02u, 0x00002cbcu, 0x0004007cu, 0x00000008u, 0x00002e03u, 0x00002e02u, 0x000500c7u, 0x00000008u, 0x00002e04u, 0x00002e03u, 0x0000022au, 0x000500abu, 0x00000069u, 0x00002e05u, 0x00002e04u, 0x00000220u, 0x0004007cu, 0x00000008u, 0x00002e08u, 0x00002ca2u, 0x0004007cu, 0x00000008u, 0x00002e0bu, 0x00002ca4u, 0x00040071u, 0x00000006u, 0x00002e0eu, 0x00002cb6u, 0x0004007cu, 0x00000008u, 0x00002e0fu, 0x00002e0eu, 0x0003003eu, 0x00002cbfu, 0x00002e05u, 0x00050041u, 0x00000046u, 0x00002e10u, 0x00002132u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002e11u, 0x00002e10u, 0x0003003eu, 0x00002cc0u, 0x00002e11u, 0x0003003eu, 0x00002cc1u, 0x00002e08u, 0x0003003eu, 0x00002cc2u, 0x00002e0bu, 0x0003003eu, 0x00002cc3u, 0x00002e0fu, 0x0008000cu, 0x00000008u, 0x000031cbu, 0x00000001u, 0x0000002du, 0x00002e11u, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x00002cc0u, 0x000031cbu, 0x000500b1u, 0x00000069u, 0x000031cdu, 0x00002e0fu, 0x00000266u, 0x000300f7u, 0x000031ceu, 0x00000000u, 0x000400fau, 0x000031cdu, 0x000031cfu, 0x000031d0u, 0x000200f8u, 0x000031d0u, 0x00050082u, 0x00000008u, 0x000031d5u, 0x0000115du, 0x00002e0fu, 0x000500c4u, 0x00000008u, 0x000031d7u, 0x000031cbu, 0x000031d5u, 0x0003003eu, 0x00002cc0u, 0x000031d7u, 0x000500c3u, 0x00000008u, 0x000031d9u, 0x000031d7u, 0x00000554u, 0x0003003eu, 0x00002cc0u, 0x000031d9u, 0x000200f9u, 0x000031ceu, 0x000200f8u, 0x000031cfu, 0x000500c3u, 0x00000008u, 0x000031d3u, 0x000031cbu, 0x00002e0fu, 0x0003003eu, 0x00002cc0u, 0x000031d3u, 0x000200f9u, 0x000031ceu, 0x000200f8u, 0x000031ceu, 0x000700f5u, 0x00000008u, 0x000082d6u, 0x000031d3u, 0x000031cfu, 0x000031d9u, 0x000031d0u, 0x000300f7u, 0x000031dbu, 0x00000000u, 0x000400fau, 0x00002e05u, 0x000031dcu, 0x000031ddu, 0x000200f8u, 0x000031ddu, 0x000500c4u, 0x00000008u, 0x000031f3u, 0x00002e08u, 0x00000230u, 0x00050082u, 0x00000008u, 0x000031f5u, 0x000082d6u, 0x000031f3u, 0x0003003eu, 0x00002cc0u, 0x000031f5u, 0x000200f9u, 0x000031dbu, 0x000200f8u, 0x000031dcu, 0x000500c3u, 0x00000008u, 0x000031dfu, 0x000082d6u, 0x00000230u, 0x000500afu, 0x00000069u, 0x000031e1u, 0x000031dfu, 0x00002e0bu, 0x0003003eu, 0x000031c8u, 0x000031e1u, 0x000300f7u, 0x000031e3u, 0x00000000u, 0x000400fau, 0x000031e1u, 0x000031e4u, 0x000031e5u, 0x000200f8u, 0x000031e5u, 0x000500c4u, 0x00000008u, 0x000031efu, 0x00002e08u, 0x00000230u, 0x00050082u, 0x00000008u, 0x000031f0u, 0x000082d6u, 0x000031efu, 0x0007000cu, 0x00000008u, 0x000031f1u, 0x00000001u, 0x0000002au, 0x000031f0u, 0x00000220u, 0x0003003eu, 0x00002cc0u, 0x000031f1u, 0x000200f9u, 0x000031e3u, 0x000200f8u, 0x000031e4u, 0x000500c3u, 0x00000008u, 0x000031e7u, 0x00002e0bu, 0x0000022du, 0x000500c3u, 0x00000008u, 0x000031e9u, 0x00002e08u, 0x0000022du, 0x00050082u, 0x00000008u, 0x000031eau, 0x000031e7u, 0x000031e9u, 0x000500c7u, 0x00000008u, 0x000031ebu, 0x000031eau, 0x00001174u, 0x000500c4u, 0x00000008u, 0x000031ecu, 0x000031ebu, 0x00000236u, 0x0003003eu, 0x00002cc0u, 0x000031ecu, 0x000200f9u, 0x000031e3u, 0x000200f8u, 0x000031e3u, 0x000700f5u, 0x00000008u, 0x000082d9u, 0x000031ecu, 0x000031e4u, 0x000031f1u, 0x000031e5u, 0x000200f9u, 0x000031dbu, 0x000200f8u, 0x000031dbu, 0x000700f5u, 0x00000008u, 0x000082d8u, 0x000082d9u, 0x000031e3u, 0x000031f5u, 0x000031ddu, 0x0003003eu, 0x000031c9u, 0x000082d8u, 0x0003003eu, 0x00002e10u, 0x000082d8u, 0x000500c7u, 0x00000008u, 0x00002e18u, 0x00002e03u, 0x00000233u, 0x000500abu, 0x00000069u, 0x00002e19u, 0x00002e18u, 0x00000220u, 0x0004007cu, 0x00000008u, 0x00002e1cu, 0x00002ca6u, 0x0004007cu, 0x00000008u, 0x00002e1fu, 0x00002ca8u, 0x00040071u, 0x00000006u, 0x00002e22u, 0x00002cbau, 0x0004007cu, 0x00000008u, 0x00002e23u, 0x00002e22u, 0x0003003eu, 0x00002cc4u, 0x00002e19u, 0x00050041u, 0x00000046u, 0x00002e24u, 0x00002132u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002e25u, 0x00002e24u, 0x0003003eu, 0x00002cc5u, 0x00002e25u, 0x0003003eu, 0x00002cc6u, 0x00002e1cu, 0x0003003eu, 0x00002cc7u, 0x00002e1fu, 0x0003003eu, 0x00002cc8u, 0x00002e23u, 0x0008000cu, 0x00000008u, 0x000031fau, 0x00000001u, 0x0000002du, 0x00002e25u, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x00002cc5u, 0x000031fau, 0x000500b1u, 0x00000069u, 0x000031fcu, 0x00002e23u, 0x00000266u, 0x000300f7u, 0x000031fdu, 0x00000000u, 0x000400fau, 0x000031fcu, 0x000031feu, 0x000031ffu, 0x000200f8u, 0x000031ffu, 0x00050082u, 0x00000008u, 0x00003204u, 0x0000115du, 0x00002e23u, 0x000500c4u, 0x00000008u, 0x00003206u, 0x000031fau, 0x00003204u, 0x0003003eu, 0x00002cc5u, 0x00003206u, 0x000500c3u, 0x00000008u, 0x00003208u, 0x00003206u, 0x00000554u, 0x0003003eu, 0x00002cc5u, 0x00003208u, 0x000200f9u, 0x000031fdu, 0x000200f8u, 0x000031feu, 0x000500c3u, 0x00000008u, 0x00003202u, 0x000031fau, 0x00002e23u, 0x0003003eu, 0x00002cc5u, 0x00003202u, 0x000200f9u, 0x000031fdu, 0x000200f8u, 0x000031fdu, 0x000700f5u, 0x00000008u, 0x000082e8u, 0x00003202u, 0x000031feu, 0x00003208u, 0x000031ffu, 0x000300f7u, 0x0000320au, 0x00000000u, 0x000400fau, 0x00002e19u, 0x0000320bu, 0x0000320cu, 0x000200f8u, 0x0000320cu, 0x000500c4u, 0x00000008u, 0x00003222u, 0x00002e1cu, 0x00000230u, 0x00050082u, 0x00000008u, 0x00003224u, 0x000082e8u, 0x00003222u, 0x0003003eu, 0x00002cc5u, 0x00003224u, 0x000200f9u, 0x0000320au, 0x000200f8u, 0x0000320bu, 0x000500c3u, 0x00000008u, 0x0000320eu, 0x000082e8u, 0x00000230u, 0x000500afu, 0x00000069u, 0x00003210u, 0x0000320eu, 0x00002e1fu, 0x0003003eu, 0x000031f7u, 0x00003210u, 0x000300f7u, 0x00003212u, 0x00000000u, 0x000400fau, 0x00003210u, 0x00003213u, 0x00003214u, 0x000200f8u, 0x00003214u, 0x000500c4u, 0x00000008u, 0x0000321eu, 0x00002e1cu, 0x00000230u, 0x00050082u, 0x00000008u, 0x0000321fu, 0x000082e8u, 0x0000321eu, 0x0007000cu, 0x00000008u, 0x00003220u, 0x00000001u, 0x0000002au, 0x0000321fu, 0x00000220u, 0x0003003eu, 0x00002cc5u, 0x00003220u, 0x000200f9u, 0x00003212u, 0x000200f8u, 0x00003213u, 0x000500c3u, 0x00000008u, 0x00003216u, 0x00002e1fu, 0x0000022du, 0x000500c3u, 0x00000008u, 0x00003218u, 0x00002e1cu, 0x0000022du, 0x00050082u, 0x00000008u, 0x00003219u, 0x00003216u, 0x00003218u, 0x000500c7u, 0x00000008u, 0x0000321au, 0x00003219u, 0x00001174u, 0x000500c4u, 0x00000008u, 0x0000321bu, 0x0000321au, 0x00000236u, 0x0003003eu, 0x00002cc5u, 0x0000321bu, 0x000200f9u, 0x00003212u, 0x000200f8u, 0x00003212u, 0x000700f5u, 0x00000008u, 0x000082ebu, 0x0000321bu, 0x00003213u, 0x00003220u, 0x00003214u, 0x000200f9u, 0x0000320au, 0x000200f8u, 0x0000320au, 0x000700f5u, 0x00000008u, 0x000082eau, 0x000082ebu, 0x00003212u, 0x00003224u, 0x0000320cu, 0x0003003eu, 0x000031f8u, 0x000082eau, 0x0003003eu, 0x00002e24u, 0x000082eau, 0x000300f7u, 0x00002e29u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002e2au, 0x00002e2bu, 0x000200f8u, 0x00002e2bu, 0x0003003eu, 0x00002cc9u, 0x00000c47u, 0x000200f9u, 0x00002e29u, 0x000200f8u, 0x00002e2au, 0x0004003du, 0x000000efu, 0x00002e2cu, 0x00002132u, 0x000500c7u, 0x000000efu, 0x00002e2eu, 0x00002e2cu, 0x0000f3a5u, 0x0003003eu, 0x00002cc9u, 0x00002e2eu, 0x000200f9u, 0x00002e29u, 0x000200f8u, 0x00002e29u, 0x00050041u, 0x00000046u, 0x00002e2fu, 0x00002cc9u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00002e30u, 0x00002e2fu, 0x00050041u, 0x00000046u, 0x00002e31u, 0x00002cc9u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00002e32u, 0x00002e31u, 0x00050080u, 0x00000008u, 0x00002e33u, 0x00002e30u, 0x00002e32u, 0x0003003eu, 0x00002ccau, 0x00002e33u, 0x0004003du, 0x000000efu, 0x00002e34u, 0x00002132u, 0x000500c3u, 0x000000efu, 0x00002e36u, 0x00002e34u, 0x0000f3a4u, 0x0003003eu, 0x00002132u, 0x00002e36u, 0x0003003eu, 0x00006e9au, 0x00002cb4u, 0x0003003eu, 0x00006e9bu, 0x00002cbcu, 0x0004003du, 0x00000008u, 0x00002e39u, 0x00002e10u, 0x0003003eu, 0x00002ccdu, 0x00002e39u, 0x00040071u, 0x00000006u, 0x0000322au, 0x00002cb4u, 0x0004007cu, 0x00000008u, 0x0000322bu, 0x0000322au, 0x000500abu, 0x00000069u, 0x0000322cu, 0x0000322bu, 0x00000220u, 0x000300f7u, 0x0000322du, 0x00000000u, 0x000400fau, 0x0000322cu, 0x0000322eu, 0x0000322du, 0x000200f8u, 0x0000322eu, 0x000500c4u, 0x00000008u, 0x00003231u, 0x0000022au, 0x00002cb4u, 0x0003003eu, 0x00003226u, 0x00003231u, 0x000500c7u, 0x00000008u, 0x00003236u, 0x00002e03u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00003237u, 0x00003236u, 0x00000220u, 0x000300f7u, 0x00003238u, 0x00000000u, 0x000400fau, 0x00003237u, 0x00003239u, 0x00003238u, 0x000200f8u, 0x00003239u, 0x000500c7u, 0x00000008u, 0x0000323cu, 0x00002e39u, 0x00003231u, 0x00050082u, 0x00000008u, 0x0000323du, 0x0000323cu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x0000323eu, 0x00000001u, 0x0000002au, 0x0000323du, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003240u, 0x00002e39u, 0x0000323eu, 0x0003003eu, 0x00002ccdu, 0x00003240u, 0x000200f9u, 0x00003238u, 0x000200f8u, 0x00003238u, 0x000700f5u, 0x00000008u, 0x00008349u, 0x00002e39u, 0x0000322eu, 0x00003240u, 0x00003239u, 0x00050082u, 0x00000008u, 0x00003242u, 0x00003231u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003244u, 0x00008349u, 0x00003242u, 0x0003003eu, 0x00002ccdu, 0x00003244u, 0x000200f9u, 0x0000322du, 0x000200f8u, 0x0000322du, 0x000700f5u, 0x00000008u, 0x0000834au, 0x00002e39u, 0x00002e29u, 0x00003244u, 0x00003238u, 0x0003003eu, 0x00003227u, 0x0000834au, 0x0003003eu, 0x00002ccbu, 0x0000834au, 0x0003003eu, 0x00006e9eu, 0x00002cb8u, 0x0003003eu, 0x00006e9fu, 0x00002cbcu, 0x0004003du, 0x00000008u, 0x00002e3du, 0x00002e24u, 0x0003003eu, 0x00002cd0u, 0x00002e3du, 0x00040071u, 0x00000006u, 0x0000324au, 0x00002cb8u, 0x0004007cu, 0x00000008u, 0x0000324bu, 0x0000324au, 0x000500abu, 0x00000069u, 0x0000324cu, 0x0000324bu, 0x00000220u, 0x000300f7u, 0x0000324du, 0x00000000u, 0x000400fau, 0x0000324cu, 0x0000324eu, 0x0000324du, 0x000200f8u, 0x0000324eu, 0x000500c4u, 0x00000008u, 0x00003251u, 0x0000022au, 0x00002cb8u, 0x0003003eu, 0x00003246u, 0x00003251u, 0x000500c7u, 0x00000008u, 0x00003256u, 0x00002e03u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00003257u, 0x00003256u, 0x00000220u, 0x000300f7u, 0x00003258u, 0x00000000u, 0x000400fau, 0x00003257u, 0x00003259u, 0x00003258u, 0x000200f8u, 0x00003259u, 0x000500c7u, 0x00000008u, 0x0000325cu, 0x00002e3du, 0x00003251u, 0x00050082u, 0x00000008u, 0x0000325du, 0x0000325cu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x0000325eu, 0x00000001u, 0x0000002au, 0x0000325du, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003260u, 0x00002e3du, 0x0000325eu, 0x0003003eu, 0x00002cd0u, 0x00003260u, 0x000200f9u, 0x00003258u, 0x000200f8u, 0x00003258u, 0x000700f5u, 0x00000008u, 0x00008368u, 0x00002e3du, 0x0000324eu, 0x00003260u, 0x00003259u, 0x00050082u, 0x00000008u, 0x00003262u, 0x00003251u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003264u, 0x00008368u, 0x00003262u, 0x0003003eu, 0x00002cd0u, 0x00003264u, 0x000200f9u, 0x0000324du, 0x000200f8u, 0x0000324du, 0x000700f5u, 0x00000008u, 0x00008369u, 0x00002e3du, 0x0000322du, 0x00003264u, 0x00003258u, 0x0003003eu, 0x00003247u, 0x00008369u, 0x0003003eu, 0x00002cceu, 0x00008369u, 0x0004003du, 0x00000008u, 0x00002e40u, 0x00002e10u, 0x00050080u, 0x00000008u, 0x00002e41u, 0x00002e40u, 0x0000022au, 0x0003003eu, 0x00006ea2u, 0x00002cb4u, 0x0003003eu, 0x00006ea3u, 0x00002cbcu, 0x0003003eu, 0x00002cd3u, 0x00002e41u, 0x000300f7u, 0x0000326du, 0x00000000u, 0x000400fau, 0x0000322cu, 0x0000326eu, 0x0000326du, 0x000200f8u, 0x0000326eu, 0x000500c4u, 0x00000008u, 0x00003271u, 0x0000022au, 0x00002cb4u, 0x0003003eu, 0x00003266u, 0x00003271u, 0x000500c7u, 0x00000008u, 0x00003276u, 0x00002e03u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00003277u, 0x00003276u, 0x00000220u, 0x000300f7u, 0x00003278u, 0x00000000u, 0x000400fau, 0x00003277u, 0x00003279u, 0x00003278u, 0x000200f8u, 0x00003279u, 0x000500c7u, 0x00000008u, 0x0000327cu, 0x00002e41u, 0x00003271u, 0x00050082u, 0x00000008u, 0x0000327du, 0x0000327cu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x0000327eu, 0x00000001u, 0x0000002au, 0x0000327du, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00003280u, 0x00002e41u, 0x0000327eu, 0x0003003eu, 0x00002cd3u, 0x00003280u, 0x000200f9u, 0x00003278u, 0x000200f8u, 0x00003278u, 0x000700f5u, 0x00000008u, 0x00008387u, 0x00002e41u, 0x0000326eu, 0x00003280u, 0x00003279u, 0x00050082u, 0x00000008u, 0x00003282u, 0x00003271u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00003284u, 0x00008387u, 0x00003282u, 0x0003003eu, 0x00002cd3u, 0x00003284u, 0x000200f9u, 0x0000326du, 0x000200f8u, 0x0000326du, 0x000700f5u, 0x00000008u, 0x00008388u, 0x00002e41u, 0x0000324du, 0x00003284u, 0x00003278u, 0x0003003eu, 0x00003267u, 0x00008388u, 0x0003003eu, 0x00002cd1u, 0x00008388u, 0x0004003du, 0x00000008u, 0x00002e45u, 0x00002e24u, 0x00050080u, 0x00000008u, 0x00002e46u, 0x00002e45u, 0x0000022au, 0x0003003eu, 0x00006ea6u, 0x00002cb8u, 0x0003003eu, 0x00006ea7u, 0x00002cbcu, 0x0003003eu, 0x00002cd6u, 0x00002e46u, 0x000300f7u, 0x0000328du, 0x00000000u, 0x000400fau, 0x0000324cu, 0x0000328eu, 0x0000328du, 0x000200f8u, 0x0000328eu, 0x000500c4u, 0x00000008u, 0x00003291u, 0x0000022au, 0x00002cb8u, 0x0003003eu, 0x00003286u, 0x00003291u, 0x000500c7u, 0x00000008u, 0x00003296u, 0x00002e03u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00003297u, 0x00003296u, 0x00000220u, 0x000300f7u, 0x00003298u, 0x00000000u, 0x000400fau, 0x00003297u, 0x00003299u, 0x00003298u, 0x000200f8u, 0x00003299u, 0x000500c7u, 0x00000008u, 0x0000329cu, 0x00002e46u, 0x00003291u, 0x00050082u, 0x00000008u, 0x0000329du, 0x0000329cu, 0x0000022au, 0x0007000cu, 0x00000008u, 0x0000329eu, 0x00000001u, 0x0000002au, 0x0000329du, 0x00000220u, 0x000500c6u, 0x00000008u, 0x000032a0u, 0x00002e46u, 0x0000329eu, 0x0003003eu, 0x00002cd6u, 0x000032a0u, 0x000200f9u, 0x00003298u, 0x000200f8u, 0x00003298u, 0x000700f5u, 0x00000008u, 0x000083a6u, 0x00002e46u, 0x0000328eu, 0x000032a0u, 0x00003299u, 0x00050082u, 0x00000008u, 0x000032a2u, 0x00003291u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x000032a4u, 0x000083a6u, 0x000032a2u, 0x0003003eu, 0x00002cd6u, 0x000032a4u, 0x000200f9u, 0x0000328du, 0x000200f8u, 0x0000328du, 0x000700f5u, 0x00000008u, 0x000083a7u, 0x00002e46u, 0x0000326du, 0x000032a4u, 0x00003298u, 0x0003003eu, 0x00003287u, 0x000083a7u, 0x0003003eu, 0x00002cd4u, 0x000083a7u, 0x00050082u, 0x00000008u, 0x00002e4bu, 0x000083a7u, 0x00008369u, 0x0007000cu, 0x00000008u, 0x00002e4cu, 0x00000001u, 0x0000002au, 0x00002e4bu, 0x000013b2u, 0x0003003eu, 0x00002cd7u, 0x00002e4cu, 0x000500c7u, 0x00000008u, 0x00002e4eu, 0x00008369u, 0x0000035eu, 0x00050080u, 0x00000008u, 0x00002e50u, 0x00002e4eu, 0x00002e4cu, 0x0003003eu, 0x00002cd4u, 0x00002e50u, 0x0003003eu, 0x00002cceu, 0x00002e4eu, 0x0004003du, 0x000000efu, 0x00002e54u, 0x00002cc9u, 0x000500aau, 0x0000087bu, 0x00002e55u, 0x00002e54u, 0x000013bcu, 0x00050051u, 0x00000069u, 0x00002e56u, 0x00002e55u, 0x00000000u, 0x00050051u, 0x00000069u, 0x00002e57u, 0x00002e55u, 0x00000001u, 0x00060050u, 0x00000363u, 0x00002e58u, 0x00002201u, 0x00002e56u, 0x00002e57u, 0x0004009bu, 0x00000069u, 0x00002e59u, 0x00002e58u, 0x0003003eu, 0x00002136u, 0x00002e59u, 0x000300f7u, 0x00002e5bu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002e5cu, 0x00002e5bu, 0x000200f8u, 0x00002e5cu, 0x0003003eu, 0x00002ccau, 0x00000220u, 0x000200f9u, 0x00002e5bu, 0x000200f8u, 0x00002e5bu, 0x000600a9u, 0x00000008u, 0x0000f3cbu, 0x00002e59u, 0x00000220u, 0x00002e33u, 0x00040071u, 0x00000006u, 0x00002e5fu, 0x00002caeu, 0x0004007cu, 0x00000008u, 0x00002e60u, 0x00002e5fu, 0x000500aau, 0x00000069u, 0x00002e61u, 0x00002e60u, 0x0000022au, 0x0003003eu, 0x00002cd8u, 0x00002e61u, 0x000500afu, 0x00000069u, 0x00002e63u, 0x0000f3cbu, 0x0000115du, 0x000300f7u, 0x00002e64u, 0x00000000u, 0x000400fau, 0x00002e63u, 0x00002e65u, 0x00002e66u, 0x000200f8u, 0x00002e66u, 0x00050050u, 0x000000efu, 0x00002e6cu, 0x0000834au, 0x00002e4eu, 0x0003003eu, 0x00002cdau, 0x00002e6cu, 0x000200f9u, 0x00002e64u, 0x000200f8u, 0x00002e65u, 0x00050050u, 0x000000efu, 0x00002e69u, 0x00008388u, 0x00002e50u, 0x0003003eu, 0x00002cdau, 0x00002e69u, 0x000200f9u, 0x00002e64u, 0x000200f8u, 0x00002e64u, 0x000700f5u, 0x000000efu, 0x000083d3u, 0x00002e69u, 0x00002e65u, 0x00002e6cu, 0x00002e66u, 0x0003003eu, 0x00002cd9u, 0x000083d3u, 0x000300f7u, 0x00002e6fu, 0x00000000u, 0x000400fau, 0x000021d1u, 0x00002e70u, 0x00002e71u, 0x000200f8u, 0x00002e71u, 0x000300f7u, 0x00002f16u, 0x00000000u, 0x000d00fbu, 0x00002e60u, 0x00002f16u, 0x00000000u, 0x00002f17u, 0x00000001u, 0x00002f18u, 0x00000002u, 0x00002f19u, 0x00000003u, 0x00002f1au, 0x00000004u, 0x00002f1bu, 0x000200f8u, 0x00002f1bu, 0x00040071u, 0x00000006u, 0x000030d1u, 0x00002cb0u, 0x0004007cu, 0x00000008u, 0x000030d2u, 0x000030d1u, 0x000300f7u, 0x000030d3u, 0x00000000u, 0x000700fbu, 0x000030d2u, 0x000030d4u, 0x00000000u, 0x000030d5u, 0x00000001u, 0x000030d6u, 0x000200f8u, 0x000030d6u, 0x0004007cu, 0x000000b0u, 0x00003118u, 0x000083d3u, 0x0003003eu, 0x00006faau, 0x00002caau, 0x0003003eu, 0x00006fabu, 0x00002cacu, 0x0003003eu, 0x00002dd4u, 0x000021c0u, 0x0003003eu, 0x00002dd5u, 0x00003118u, 0x00050041u, 0x00000007u, 0x00004396u, 0x00002dd5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004397u, 0x00004396u, 0x00050084u, 0x00000006u, 0x00004398u, 0x00002cacu, 0x00004397u, 0x00050080u, 0x00000006u, 0x00004399u, 0x00002caau, 0x00004398u, 0x0003003eu, 0x0000438eu, 0x00004399u, 0x00050041u, 0x00000007u, 0x0000439au, 0x00002dd5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000439bu, 0x0000439au, 0x00050080u, 0x00000006u, 0x0000439du, 0x00004399u, 0x0000439bu, 0x0003003eu, 0x0000438eu, 0x0000439du, 0x000500c7u, 0x00000006u, 0x0000439fu, 0x0000439du, 0x00000e73u, 0x0003003eu, 0x0000438eu, 0x0000439fu, 0x0003003eu, 0x0000438fu, 0x0000439fu, 0x0004003du, 0x00000006u, 0x000043a2u, 0x00004396u, 0x000500c7u, 0x00000006u, 0x000043a3u, 0x000043a2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000043a4u, 0x000043a3u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000043a6u, 0x0000439fu, 0x000043a4u, 0x0003003eu, 0x0000438fu, 0x000043a6u, 0x000500c6u, 0x00000006u, 0x000043a8u, 0x000043a6u, 0x00000464u, 0x0003003eu, 0x0000438fu, 0x000043a8u, 0x00080041u, 0x00000671u, 0x000043abu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000043a8u, 0x0004003du, 0x0000000fu, 0x000043acu, 0x000043abu, 0x00040071u, 0x00000006u, 0x000043adu, 0x000043acu, 0x0003003eu, 0x00004390u, 0x000043adu, 0x00040071u, 0x00000011u, 0x000043afu, 0x000043adu, 0x0004007cu, 0x00000012u, 0x000043b0u, 0x000043afu, 0x00070050u, 0x00000013u, 0x000043b1u, 0x000043b0u, 0x000043b0u, 0x000043b0u, 0x000043b0u, 0x0003003eu, 0x00004391u, 0x000043b1u, 0x0003003eu, 0x00002cddu, 0x000043b1u, 0x000300f7u, 0x0000311du, 0x00000000u, 0x000400fau, 0x000021d7u, 0x0000311eu, 0x0000311du, 0x000200f8u, 0x0000311eu, 0x00050050u, 0x000000efu, 0x00003121u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00003122u, 0x00003121u, 0x0003003eu, 0x00006faeu, 0x00002caau, 0x0003003eu, 0x00006fafu, 0x00002cacu, 0x0003003eu, 0x00002dd7u, 0x000021c0u, 0x0003003eu, 0x00002dd8u, 0x00003122u, 0x00050041u, 0x00000007u, 0x000043bau, 0x00002dd8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000043bbu, 0x000043bau, 0x00050084u, 0x00000006u, 0x000043bcu, 0x00002cacu, 0x000043bbu, 0x00050080u, 0x00000006u, 0x000043bdu, 0x00002caau, 0x000043bcu, 0x0003003eu, 0x000043b2u, 0x000043bdu, 0x00050041u, 0x00000007u, 0x000043beu, 0x00002dd8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000043bfu, 0x000043beu, 0x00050080u, 0x00000006u, 0x000043c1u, 0x000043bdu, 0x000043bfu, 0x0003003eu, 0x000043b2u, 0x000043c1u, 0x000500c7u, 0x00000006u, 0x000043c3u, 0x000043c1u, 0x00000e73u, 0x0003003eu, 0x000043b2u, 0x000043c3u, 0x0003003eu, 0x000043b3u, 0x000043c3u, 0x0004003du, 0x00000006u, 0x000043c6u, 0x000043bau, 0x000500c7u, 0x00000006u, 0x000043c7u, 0x000043c6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000043c8u, 0x000043c7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000043cau, 0x000043c3u, 0x000043c8u, 0x0003003eu, 0x000043b3u, 0x000043cau, 0x000500c6u, 0x00000006u, 0x000043ccu, 0x000043cau, 0x00000464u, 0x0003003eu, 0x000043b3u, 0x000043ccu, 0x00080041u, 0x00000671u, 0x000043cfu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000043ccu, 0x0004003du, 0x0000000fu, 0x000043d0u, 0x000043cfu, 0x00040071u, 0x00000006u, 0x000043d1u, 0x000043d0u, 0x0003003eu, 0x000043b4u, 0x000043d1u, 0x00040071u, 0x00000011u, 0x000043d3u, 0x000043d1u, 0x0004007cu, 0x00000012u, 0x000043d4u, 0x000043d3u, 0x00070050u, 0x00000013u, 0x000043d5u, 0x000043d4u, 0x000043d4u, 0x000043d4u, 0x000043d4u, 0x0003003eu, 0x000043b5u, 0x000043d5u, 0x0003003eu, 0x00002ce5u, 0x000043d5u, 0x00050050u, 0x000000efu, 0x00003128u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003129u, 0x00003128u, 0x0003003eu, 0x00006fb2u, 0x00002caau, 0x0003003eu, 0x00006fb3u, 0x00002cacu, 0x0003003eu, 0x00002ddau, 0x000021c0u, 0x0003003eu, 0x00002ddbu, 0x00003129u, 0x00050041u, 0x00000007u, 0x000043deu, 0x00002ddbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000043dfu, 0x000043deu, 0x00050084u, 0x00000006u, 0x000043e0u, 0x00002cacu, 0x000043dfu, 0x00050080u, 0x00000006u, 0x000043e1u, 0x00002caau, 0x000043e0u, 0x0003003eu, 0x000043d6u, 0x000043e1u, 0x00050041u, 0x00000007u, 0x000043e2u, 0x00002ddbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000043e3u, 0x000043e2u, 0x00050080u, 0x00000006u, 0x000043e5u, 0x000043e1u, 0x000043e3u, 0x0003003eu, 0x000043d6u, 0x000043e5u, 0x000500c7u, 0x00000006u, 0x000043e7u, 0x000043e5u, 0x00000e73u, 0x0003003eu, 0x000043d6u, 0x000043e7u, 0x0003003eu, 0x000043d7u, 0x000043e7u, 0x0004003du, 0x00000006u, 0x000043eau, 0x000043deu, 0x000500c7u, 0x00000006u, 0x000043ebu, 0x000043eau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000043ecu, 0x000043ebu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000043eeu, 0x000043e7u, 0x000043ecu, 0x0003003eu, 0x000043d7u, 0x000043eeu, 0x000500c6u, 0x00000006u, 0x000043f0u, 0x000043eeu, 0x00000464u, 0x0003003eu, 0x000043d7u, 0x000043f0u, 0x00080041u, 0x00000671u, 0x000043f3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000043f0u, 0x0004003du, 0x0000000fu, 0x000043f4u, 0x000043f3u, 0x00040071u, 0x00000006u, 0x000043f5u, 0x000043f4u, 0x0003003eu, 0x000043d8u, 0x000043f5u, 0x00040071u, 0x00000011u, 0x000043f7u, 0x000043f5u, 0x0004007cu, 0x00000012u, 0x000043f8u, 0x000043f7u, 0x00070050u, 0x00000013u, 0x000043f9u, 0x000043f8u, 0x000043f8u, 0x000043f8u, 0x000043f8u, 0x0003003eu, 0x000043d9u, 0x000043f9u, 0x0003003eu, 0x00002cedu, 0x000043f9u, 0x000200f9u, 0x0000311du, 0x000200f8u, 0x0000311du, 0x000700f5u, 0x00000013u, 0x000088b7u, 0x00008859u, 0x000030d6u, 0x000043f9u, 0x0000311eu, 0x000700f5u, 0x00000013u, 0x000087bfu, 0x0000875du, 0x000030d6u, 0x000043d5u, 0x0000311eu, 0x000300f7u, 0x0000312eu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x0000312fu, 0x0000312eu, 0x000200f8u, 0x0000312fu, 0x00050050u, 0x000000efu, 0x00003132u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003133u, 0x00003132u, 0x0003003eu, 0x00006fb6u, 0x00002caau, 0x0003003eu, 0x00006fb7u, 0x00002cacu, 0x0003003eu, 0x00002dddu, 0x000021c0u, 0x0003003eu, 0x00002ddeu, 0x00003133u, 0x00050041u, 0x00000007u, 0x00004402u, 0x00002ddeu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004403u, 0x00004402u, 0x00050084u, 0x00000006u, 0x00004404u, 0x00002cacu, 0x00004403u, 0x00050080u, 0x00000006u, 0x00004405u, 0x00002caau, 0x00004404u, 0x0003003eu, 0x000043fau, 0x00004405u, 0x00050041u, 0x00000007u, 0x00004406u, 0x00002ddeu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004407u, 0x00004406u, 0x00050080u, 0x00000006u, 0x00004409u, 0x00004405u, 0x00004407u, 0x0003003eu, 0x000043fau, 0x00004409u, 0x000500c7u, 0x00000006u, 0x0000440bu, 0x00004409u, 0x00000e73u, 0x0003003eu, 0x000043fau, 0x0000440bu, 0x0003003eu, 0x000043fbu, 0x0000440bu, 0x0004003du, 0x00000006u, 0x0000440eu, 0x00004402u, 0x000500c7u, 0x00000006u, 0x0000440fu, 0x0000440eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004410u, 0x0000440fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004412u, 0x0000440bu, 0x00004410u, 0x0003003eu, 0x000043fbu, 0x00004412u, 0x000500c6u, 0x00000006u, 0x00004414u, 0x00004412u, 0x00000464u, 0x0003003eu, 0x000043fbu, 0x00004414u, 0x00080041u, 0x00000671u, 0x00004417u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004414u, 0x0004003du, 0x0000000fu, 0x00004418u, 0x00004417u, 0x00040071u, 0x00000006u, 0x00004419u, 0x00004418u, 0x0003003eu, 0x000043fcu, 0x00004419u, 0x00040071u, 0x00000011u, 0x0000441bu, 0x00004419u, 0x0004007cu, 0x00000012u, 0x0000441cu, 0x0000441bu, 0x00070050u, 0x00000013u, 0x0000441du, 0x0000441cu, 0x0000441cu, 0x0000441cu, 0x0000441cu, 0x0003003eu, 0x000043fdu, 0x0000441du, 0x0003003eu, 0x00002cf5u, 0x0000441du, 0x000200f9u, 0x0000312eu, 0x000200f8u, 0x0000312eu, 0x000700f5u, 0x00000013u, 0x00008933u, 0x000088d3u, 0x0000311du, 0x0000441du, 0x0000312fu, 0x000200f9u, 0x000030d3u, 0x000200f8u, 0x000030d5u, 0x0004007cu, 0x000000b0u, 0x000030f8u, 0x000083d3u, 0x0003003eu, 0x00006f9au, 0x00002caau, 0x0003003eu, 0x00006f9bu, 0x00002cacu, 0x0003003eu, 0x00002dc8u, 0x000021c0u, 0x0003003eu, 0x00002dc9u, 0x000030f8u, 0x00050041u, 0x00000007u, 0x000042cbu, 0x00002dc9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000042ccu, 0x000042cbu, 0x00050084u, 0x00000006u, 0x000042cdu, 0x00002cacu, 0x000042ccu, 0x00050080u, 0x00000006u, 0x000042ceu, 0x00002caau, 0x000042cdu, 0x0003003eu, 0x000042c2u, 0x000042ceu, 0x00050041u, 0x00000007u, 0x000042cfu, 0x00002dc9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000042d0u, 0x000042cfu, 0x000500c2u, 0x00000006u, 0x000042d1u, 0x000042d0u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000042d3u, 0x000042ceu, 0x000042d1u, 0x0003003eu, 0x000042c2u, 0x000042d3u, 0x000500c7u, 0x00000006u, 0x000042d5u, 0x000042d3u, 0x00000e73u, 0x0003003eu, 0x000042c2u, 0x000042d5u, 0x0004003du, 0x00000006u, 0x000042d7u, 0x000042cfu, 0x000400c8u, 0x00000006u, 0x000042d8u, 0x000042d7u, 0x000500c7u, 0x00000006u, 0x000042d9u, 0x000042d8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000042dau, 0x000042d9u, 0x00000704u, 0x0003003eu, 0x000042c3u, 0x000042dau, 0x0003003eu, 0x000042c4u, 0x000042d5u, 0x0004003du, 0x00000006u, 0x000042ddu, 0x000042cbu, 0x000500c7u, 0x00000006u, 0x000042deu, 0x000042ddu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000042dfu, 0x000042deu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000042e1u, 0x000042d5u, 0x000042dfu, 0x0003003eu, 0x000042c4u, 0x000042e1u, 0x000500c6u, 0x00000006u, 0x000042e3u, 0x000042e1u, 0x00000464u, 0x0003003eu, 0x000042c4u, 0x000042e3u, 0x00080041u, 0x00000671u, 0x000042e6u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000042e3u, 0x0004003du, 0x0000000fu, 0x000042e7u, 0x000042e6u, 0x00040071u, 0x00000006u, 0x000042e8u, 0x000042e7u, 0x0003003eu, 0x000042c5u, 0x000042e8u, 0x000500c2u, 0x00000006u, 0x000042ebu, 0x000042e8u, 0x000042dau, 0x000500c7u, 0x00000006u, 0x000042ecu, 0x000042ebu, 0x00000e96u, 0x0003003eu, 0x000042c5u, 0x000042ecu, 0x000500c4u, 0x00000006u, 0x000042eeu, 0x000042ecu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000042f0u, 0x000042ecu, 0x000042eeu, 0x0003003eu, 0x000042c5u, 0x000042f0u, 0x00040071u, 0x00000011u, 0x000042f2u, 0x000042f0u, 0x0004007cu, 0x00000012u, 0x000042f3u, 0x000042f2u, 0x00070050u, 0x00000013u, 0x000042f4u, 0x000042f3u, 0x000042f3u, 0x000042f3u, 0x000042f3u, 0x0003003eu, 0x000042c6u, 0x000042f4u, 0x0003003eu, 0x00002cddu, 0x000042f4u, 0x000300f7u, 0x000030fdu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000030feu, 0x000030fdu, 0x000200f8u, 0x000030feu, 0x00050050u, 0x000000efu, 0x00003101u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00003102u, 0x00003101u, 0x0003003eu, 0x00006f9eu, 0x00002caau, 0x0003003eu, 0x00006f9fu, 0x00002cacu, 0x0003003eu, 0x00002dcbu, 0x000021c0u, 0x0003003eu, 0x00002dccu, 0x00003102u, 0x00050041u, 0x00000007u, 0x000042feu, 0x00002dccu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000042ffu, 0x000042feu, 0x00050084u, 0x00000006u, 0x00004300u, 0x00002cacu, 0x000042ffu, 0x00050080u, 0x00000006u, 0x00004301u, 0x00002caau, 0x00004300u, 0x0003003eu, 0x000042f5u, 0x00004301u, 0x00050041u, 0x00000007u, 0x00004302u, 0x00002dccu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004303u, 0x00004302u, 0x000500c2u, 0x00000006u, 0x00004304u, 0x00004303u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004306u, 0x00004301u, 0x00004304u, 0x0003003eu, 0x000042f5u, 0x00004306u, 0x000500c7u, 0x00000006u, 0x00004308u, 0x00004306u, 0x00000e73u, 0x0003003eu, 0x000042f5u, 0x00004308u, 0x0004003du, 0x00000006u, 0x0000430au, 0x00004302u, 0x000400c8u, 0x00000006u, 0x0000430bu, 0x0000430au, 0x000500c7u, 0x00000006u, 0x0000430cu, 0x0000430bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000430du, 0x0000430cu, 0x00000704u, 0x0003003eu, 0x000042f6u, 0x0000430du, 0x0003003eu, 0x000042f7u, 0x00004308u, 0x0004003du, 0x00000006u, 0x00004310u, 0x000042feu, 0x000500c7u, 0x00000006u, 0x00004311u, 0x00004310u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004312u, 0x00004311u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004314u, 0x00004308u, 0x00004312u, 0x0003003eu, 0x000042f7u, 0x00004314u, 0x000500c6u, 0x00000006u, 0x00004316u, 0x00004314u, 0x00000464u, 0x0003003eu, 0x000042f7u, 0x00004316u, 0x00080041u, 0x00000671u, 0x00004319u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004316u, 0x0004003du, 0x0000000fu, 0x0000431au, 0x00004319u, 0x00040071u, 0x00000006u, 0x0000431bu, 0x0000431au, 0x0003003eu, 0x000042f8u, 0x0000431bu, 0x000500c2u, 0x00000006u, 0x0000431eu, 0x0000431bu, 0x0000430du, 0x000500c7u, 0x00000006u, 0x0000431fu, 0x0000431eu, 0x00000e96u, 0x0003003eu, 0x000042f8u, 0x0000431fu, 0x000500c4u, 0x00000006u, 0x00004321u, 0x0000431fu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004323u, 0x0000431fu, 0x00004321u, 0x0003003eu, 0x000042f8u, 0x00004323u, 0x00040071u, 0x00000011u, 0x00004325u, 0x00004323u, 0x0004007cu, 0x00000012u, 0x00004326u, 0x00004325u, 0x00070050u, 0x00000013u, 0x00004327u, 0x00004326u, 0x00004326u, 0x00004326u, 0x00004326u, 0x0003003eu, 0x000042f9u, 0x00004327u, 0x0003003eu, 0x00002ce5u, 0x00004327u, 0x00050050u, 0x000000efu, 0x00003108u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003109u, 0x00003108u, 0x0003003eu, 0x00006fa2u, 0x00002caau, 0x0003003eu, 0x00006fa3u, 0x00002cacu, 0x0003003eu, 0x00002dceu, 0x000021c0u, 0x0003003eu, 0x00002dcfu, 0x00003109u, 0x00050041u, 0x00000007u, 0x00004331u, 0x00002dcfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004332u, 0x00004331u, 0x00050084u, 0x00000006u, 0x00004333u, 0x00002cacu, 0x00004332u, 0x00050080u, 0x00000006u, 0x00004334u, 0x00002caau, 0x00004333u, 0x0003003eu, 0x00004328u, 0x00004334u, 0x00050041u, 0x00000007u, 0x00004335u, 0x00002dcfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004336u, 0x00004335u, 0x000500c2u, 0x00000006u, 0x00004337u, 0x00004336u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004339u, 0x00004334u, 0x00004337u, 0x0003003eu, 0x00004328u, 0x00004339u, 0x000500c7u, 0x00000006u, 0x0000433bu, 0x00004339u, 0x00000e73u, 0x0003003eu, 0x00004328u, 0x0000433bu, 0x0004003du, 0x00000006u, 0x0000433du, 0x00004335u, 0x000400c8u, 0x00000006u, 0x0000433eu, 0x0000433du, 0x000500c7u, 0x00000006u, 0x0000433fu, 0x0000433eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004340u, 0x0000433fu, 0x00000704u, 0x0003003eu, 0x00004329u, 0x00004340u, 0x0003003eu, 0x0000432au, 0x0000433bu, 0x0004003du, 0x00000006u, 0x00004343u, 0x00004331u, 0x000500c7u, 0x00000006u, 0x00004344u, 0x00004343u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004345u, 0x00004344u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004347u, 0x0000433bu, 0x00004345u, 0x0003003eu, 0x0000432au, 0x00004347u, 0x000500c6u, 0x00000006u, 0x00004349u, 0x00004347u, 0x00000464u, 0x0003003eu, 0x0000432au, 0x00004349u, 0x00080041u, 0x00000671u, 0x0000434cu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004349u, 0x0004003du, 0x0000000fu, 0x0000434du, 0x0000434cu, 0x00040071u, 0x00000006u, 0x0000434eu, 0x0000434du, 0x0003003eu, 0x0000432bu, 0x0000434eu, 0x000500c2u, 0x00000006u, 0x00004351u, 0x0000434eu, 0x00004340u, 0x000500c7u, 0x00000006u, 0x00004352u, 0x00004351u, 0x00000e96u, 0x0003003eu, 0x0000432bu, 0x00004352u, 0x000500c4u, 0x00000006u, 0x00004354u, 0x00004352u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004356u, 0x00004352u, 0x00004354u, 0x0003003eu, 0x0000432bu, 0x00004356u, 0x00040071u, 0x00000011u, 0x00004358u, 0x00004356u, 0x0004007cu, 0x00000012u, 0x00004359u, 0x00004358u, 0x00070050u, 0x00000013u, 0x0000435au, 0x00004359u, 0x00004359u, 0x00004359u, 0x00004359u, 0x0003003eu, 0x0000432cu, 0x0000435au, 0x0003003eu, 0x00002cedu, 0x0000435au, 0x000200f9u, 0x000030fdu, 0x000200f8u, 0x000030fdu, 0x000700f5u, 0x00000013u, 0x000088b5u, 0x00008859u, 0x000030d5u, 0x0000435au, 0x000030feu, 0x000700f5u, 0x00000013u, 0x000087bdu, 0x0000875du, 0x000030d5u, 0x00004327u, 0x000030feu, 0x000300f7u, 0x0000310eu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x0000310fu, 0x0000310eu, 0x000200f8u, 0x0000310fu, 0x00050050u, 0x000000efu, 0x00003112u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003113u, 0x00003112u, 0x0003003eu, 0x00006fa6u, 0x00002caau, 0x0003003eu, 0x00006fa7u, 0x00002cacu, 0x0003003eu, 0x00002dd1u, 0x000021c0u, 0x0003003eu, 0x00002dd2u, 0x00003113u, 0x00050041u, 0x00000007u, 0x00004364u, 0x00002dd2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004365u, 0x00004364u, 0x00050084u, 0x00000006u, 0x00004366u, 0x00002cacu, 0x00004365u, 0x00050080u, 0x00000006u, 0x00004367u, 0x00002caau, 0x00004366u, 0x0003003eu, 0x0000435bu, 0x00004367u, 0x00050041u, 0x00000007u, 0x00004368u, 0x00002dd2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004369u, 0x00004368u, 0x000500c2u, 0x00000006u, 0x0000436au, 0x00004369u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000436cu, 0x00004367u, 0x0000436au, 0x0003003eu, 0x0000435bu, 0x0000436cu, 0x000500c7u, 0x00000006u, 0x0000436eu, 0x0000436cu, 0x00000e73u, 0x0003003eu, 0x0000435bu, 0x0000436eu, 0x0004003du, 0x00000006u, 0x00004370u, 0x00004368u, 0x000400c8u, 0x00000006u, 0x00004371u, 0x00004370u, 0x000500c7u, 0x00000006u, 0x00004372u, 0x00004371u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004373u, 0x00004372u, 0x00000704u, 0x0003003eu, 0x0000435cu, 0x00004373u, 0x0003003eu, 0x0000435du, 0x0000436eu, 0x0004003du, 0x00000006u, 0x00004376u, 0x00004364u, 0x000500c7u, 0x00000006u, 0x00004377u, 0x00004376u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004378u, 0x00004377u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000437au, 0x0000436eu, 0x00004378u, 0x0003003eu, 0x0000435du, 0x0000437au, 0x000500c6u, 0x00000006u, 0x0000437cu, 0x0000437au, 0x00000464u, 0x0003003eu, 0x0000435du, 0x0000437cu, 0x00080041u, 0x00000671u, 0x0000437fu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000437cu, 0x0004003du, 0x0000000fu, 0x00004380u, 0x0000437fu, 0x00040071u, 0x00000006u, 0x00004381u, 0x00004380u, 0x0003003eu, 0x0000435eu, 0x00004381u, 0x000500c2u, 0x00000006u, 0x00004384u, 0x00004381u, 0x00004373u, 0x000500c7u, 0x00000006u, 0x00004385u, 0x00004384u, 0x00000e96u, 0x0003003eu, 0x0000435eu, 0x00004385u, 0x000500c4u, 0x00000006u, 0x00004387u, 0x00004385u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004389u, 0x00004385u, 0x00004387u, 0x0003003eu, 0x0000435eu, 0x00004389u, 0x00040071u, 0x00000011u, 0x0000438bu, 0x00004389u, 0x0004007cu, 0x00000012u, 0x0000438cu, 0x0000438bu, 0x00070050u, 0x00000013u, 0x0000438du, 0x0000438cu, 0x0000438cu, 0x0000438cu, 0x0000438cu, 0x0003003eu, 0x0000435fu, 0x0000438du, 0x0003003eu, 0x00002cf5u, 0x0000438du, 0x000200f9u, 0x0000310eu, 0x000200f8u, 0x0000310eu, 0x000700f5u, 0x00000013u, 0x00008931u, 0x000088d3u, 0x000030fdu, 0x0000438du, 0x0000310fu, 0x000200f9u, 0x000030d3u, 0x000200f8u, 0x000030d4u, 0x0004007cu, 0x000000b0u, 0x000030d8u, 0x000083d3u, 0x0003003eu, 0x00006fbau, 0x00002caau, 0x0003003eu, 0x00006fbbu, 0x00002cacu, 0x0003003eu, 0x00002de0u, 0x000021c0u, 0x0003003eu, 0x00002de1u, 0x000030d8u, 0x00050041u, 0x00000007u, 0x0000421au, 0x00002de1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000421bu, 0x0000421au, 0x00050084u, 0x00000006u, 0x0000421cu, 0x00002cacu, 0x0000421bu, 0x00050080u, 0x00000006u, 0x0000421du, 0x00002caau, 0x0000421cu, 0x0003003eu, 0x00004212u, 0x0000421du, 0x00050041u, 0x00000007u, 0x0000421eu, 0x00002de1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000421fu, 0x0000421eu, 0x00050084u, 0x00000006u, 0x00004220u, 0x0000421fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004222u, 0x0000421du, 0x00004220u, 0x0003003eu, 0x00004212u, 0x00004222u, 0x000500c7u, 0x00000006u, 0x00004224u, 0x00004222u, 0x00000e73u, 0x0003003eu, 0x00004212u, 0x00004224u, 0x000500c2u, 0x00000006u, 0x00004226u, 0x00004224u, 0x0000022au, 0x0003003eu, 0x00004213u, 0x00004226u, 0x0004003du, 0x00000006u, 0x00004228u, 0x0000421au, 0x000500c7u, 0x00000006u, 0x00004229u, 0x00004228u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000422au, 0x00004229u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000422cu, 0x00004226u, 0x0000422au, 0x0003003eu, 0x00004213u, 0x0000422cu, 0x000500c6u, 0x00000006u, 0x0000422eu, 0x0000422cu, 0x0000045cu, 0x0003003eu, 0x00004213u, 0x0000422eu, 0x00080041u, 0x00000692u, 0x00004231u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000422eu, 0x0004003du, 0x00000011u, 0x00004232u, 0x00004231u, 0x00040071u, 0x00000006u, 0x00004233u, 0x00004232u, 0x0003003eu, 0x00004214u, 0x00004233u, 0x000500c2u, 0x00000006u, 0x00004235u, 0x00004233u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004236u, 0x00004235u, 0x0004007cu, 0x00000012u, 0x00004237u, 0x00004236u, 0x000500c7u, 0x00000006u, 0x00004239u, 0x00004233u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000423au, 0x00004239u, 0x0004007cu, 0x00000012u, 0x0000423bu, 0x0000423au, 0x00050050u, 0x000001aeu, 0x0000423cu, 0x00004237u, 0x0000423bu, 0x0009004fu, 0x00000013u, 0x0000423du, 0x0000423cu, 0x0000423cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004215u, 0x0000423du, 0x0003003eu, 0x00002cddu, 0x0000423du, 0x000300f7u, 0x000030ddu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000030deu, 0x000030ddu, 0x000200f8u, 0x000030deu, 0x00050050u, 0x000000efu, 0x000030e1u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x000030e2u, 0x000030e1u, 0x0003003eu, 0x00006fbeu, 0x00002caau, 0x0003003eu, 0x00006fbfu, 0x00002cacu, 0x0003003eu, 0x00002de3u, 0x000021c0u, 0x0003003eu, 0x00002de4u, 0x000030e2u, 0x00050041u, 0x00000007u, 0x00004246u, 0x00002de4u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004247u, 0x00004246u, 0x00050084u, 0x00000006u, 0x00004248u, 0x00002cacu, 0x00004247u, 0x00050080u, 0x00000006u, 0x00004249u, 0x00002caau, 0x00004248u, 0x0003003eu, 0x0000423eu, 0x00004249u, 0x00050041u, 0x00000007u, 0x0000424au, 0x00002de4u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000424bu, 0x0000424au, 0x00050084u, 0x00000006u, 0x0000424cu, 0x0000424bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000424eu, 0x00004249u, 0x0000424cu, 0x0003003eu, 0x0000423eu, 0x0000424eu, 0x000500c7u, 0x00000006u, 0x00004250u, 0x0000424eu, 0x00000e73u, 0x0003003eu, 0x0000423eu, 0x00004250u, 0x000500c2u, 0x00000006u, 0x00004252u, 0x00004250u, 0x0000022au, 0x0003003eu, 0x0000423fu, 0x00004252u, 0x0004003du, 0x00000006u, 0x00004254u, 0x00004246u, 0x000500c7u, 0x00000006u, 0x00004255u, 0x00004254u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004256u, 0x00004255u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004258u, 0x00004252u, 0x00004256u, 0x0003003eu, 0x0000423fu, 0x00004258u, 0x000500c6u, 0x00000006u, 0x0000425au, 0x00004258u, 0x0000045cu, 0x0003003eu, 0x0000423fu, 0x0000425au, 0x00080041u, 0x00000692u, 0x0000425du, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000425au, 0x0004003du, 0x00000011u, 0x0000425eu, 0x0000425du, 0x00040071u, 0x00000006u, 0x0000425fu, 0x0000425eu, 0x0003003eu, 0x00004240u, 0x0000425fu, 0x000500c2u, 0x00000006u, 0x00004261u, 0x0000425fu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004262u, 0x00004261u, 0x0004007cu, 0x00000012u, 0x00004263u, 0x00004262u, 0x000500c7u, 0x00000006u, 0x00004265u, 0x0000425fu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00004266u, 0x00004265u, 0x0004007cu, 0x00000012u, 0x00004267u, 0x00004266u, 0x00050050u, 0x000001aeu, 0x00004268u, 0x00004263u, 0x00004267u, 0x0009004fu, 0x00000013u, 0x00004269u, 0x00004268u, 0x00004268u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004241u, 0x00004269u, 0x0003003eu, 0x00002ce5u, 0x00004269u, 0x00050050u, 0x000000efu, 0x000030e8u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x000030e9u, 0x000030e8u, 0x0003003eu, 0x00006fc2u, 0x00002caau, 0x0003003eu, 0x00006fc3u, 0x00002cacu, 0x0003003eu, 0x00002de6u, 0x000021c0u, 0x0003003eu, 0x00002de7u, 0x000030e9u, 0x00050041u, 0x00000007u, 0x00004272u, 0x00002de7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004273u, 0x00004272u, 0x00050084u, 0x00000006u, 0x00004274u, 0x00002cacu, 0x00004273u, 0x00050080u, 0x00000006u, 0x00004275u, 0x00002caau, 0x00004274u, 0x0003003eu, 0x0000426au, 0x00004275u, 0x00050041u, 0x00000007u, 0x00004276u, 0x00002de7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004277u, 0x00004276u, 0x00050084u, 0x00000006u, 0x00004278u, 0x00004277u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000427au, 0x00004275u, 0x00004278u, 0x0003003eu, 0x0000426au, 0x0000427au, 0x000500c7u, 0x00000006u, 0x0000427cu, 0x0000427au, 0x00000e73u, 0x0003003eu, 0x0000426au, 0x0000427cu, 0x000500c2u, 0x00000006u, 0x0000427eu, 0x0000427cu, 0x0000022au, 0x0003003eu, 0x0000426bu, 0x0000427eu, 0x0004003du, 0x00000006u, 0x00004280u, 0x00004272u, 0x000500c7u, 0x00000006u, 0x00004281u, 0x00004280u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004282u, 0x00004281u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004284u, 0x0000427eu, 0x00004282u, 0x0003003eu, 0x0000426bu, 0x00004284u, 0x000500c6u, 0x00000006u, 0x00004286u, 0x00004284u, 0x0000045cu, 0x0003003eu, 0x0000426bu, 0x00004286u, 0x00080041u, 0x00000692u, 0x00004289u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004286u, 0x0004003du, 0x00000011u, 0x0000428au, 0x00004289u, 0x00040071u, 0x00000006u, 0x0000428bu, 0x0000428au, 0x0003003eu, 0x0000426cu, 0x0000428bu, 0x000500c2u, 0x00000006u, 0x0000428du, 0x0000428bu, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000428eu, 0x0000428du, 0x0004007cu, 0x00000012u, 0x0000428fu, 0x0000428eu, 0x000500c7u, 0x00000006u, 0x00004291u, 0x0000428bu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00004292u, 0x00004291u, 0x0004007cu, 0x00000012u, 0x00004293u, 0x00004292u, 0x00050050u, 0x000001aeu, 0x00004294u, 0x0000428fu, 0x00004293u, 0x0009004fu, 0x00000013u, 0x00004295u, 0x00004294u, 0x00004294u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000426du, 0x00004295u, 0x0003003eu, 0x00002cedu, 0x00004295u, 0x000200f9u, 0x000030ddu, 0x000200f8u, 0x000030ddu, 0x000700f5u, 0x00000013u, 0x000088b3u, 0x00008859u, 0x000030d4u, 0x00004295u, 0x000030deu, 0x000700f5u, 0x00000013u, 0x000087bbu, 0x0000875du, 0x000030d4u, 0x00004269u, 0x000030deu, 0x000300f7u, 0x000030eeu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x000030efu, 0x000030eeu, 0x000200f8u, 0x000030efu, 0x00050050u, 0x000000efu, 0x000030f2u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x000030f3u, 0x000030f2u, 0x0003003eu, 0x00006fc6u, 0x00002caau, 0x0003003eu, 0x00006fc7u, 0x00002cacu, 0x0003003eu, 0x00002de9u, 0x000021c0u, 0x0003003eu, 0x00002deau, 0x000030f3u, 0x00050041u, 0x00000007u, 0x0000429eu, 0x00002deau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000429fu, 0x0000429eu, 0x00050084u, 0x00000006u, 0x000042a0u, 0x00002cacu, 0x0000429fu, 0x00050080u, 0x00000006u, 0x000042a1u, 0x00002caau, 0x000042a0u, 0x0003003eu, 0x00004296u, 0x000042a1u, 0x00050041u, 0x00000007u, 0x000042a2u, 0x00002deau, 0x0000032du, 0x0004003du, 0x00000006u, 0x000042a3u, 0x000042a2u, 0x00050084u, 0x00000006u, 0x000042a4u, 0x000042a3u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000042a6u, 0x000042a1u, 0x000042a4u, 0x0003003eu, 0x00004296u, 0x000042a6u, 0x000500c7u, 0x00000006u, 0x000042a8u, 0x000042a6u, 0x00000e73u, 0x0003003eu, 0x00004296u, 0x000042a8u, 0x000500c2u, 0x00000006u, 0x000042aau, 0x000042a8u, 0x0000022au, 0x0003003eu, 0x00004297u, 0x000042aau, 0x0004003du, 0x00000006u, 0x000042acu, 0x0000429eu, 0x000500c7u, 0x00000006u, 0x000042adu, 0x000042acu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000042aeu, 0x000042adu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000042b0u, 0x000042aau, 0x000042aeu, 0x0003003eu, 0x00004297u, 0x000042b0u, 0x000500c6u, 0x00000006u, 0x000042b2u, 0x000042b0u, 0x0000045cu, 0x0003003eu, 0x00004297u, 0x000042b2u, 0x00080041u, 0x00000692u, 0x000042b5u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000042b2u, 0x0004003du, 0x00000011u, 0x000042b6u, 0x000042b5u, 0x00040071u, 0x00000006u, 0x000042b7u, 0x000042b6u, 0x0003003eu, 0x00004298u, 0x000042b7u, 0x000500c2u, 0x00000006u, 0x000042b9u, 0x000042b7u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000042bau, 0x000042b9u, 0x0004007cu, 0x00000012u, 0x000042bbu, 0x000042bau, 0x000500c7u, 0x00000006u, 0x000042bdu, 0x000042b7u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000042beu, 0x000042bdu, 0x0004007cu, 0x00000012u, 0x000042bfu, 0x000042beu, 0x00050050u, 0x000001aeu, 0x000042c0u, 0x000042bbu, 0x000042bfu, 0x0009004fu, 0x00000013u, 0x000042c1u, 0x000042c0u, 0x000042c0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004299u, 0x000042c1u, 0x0003003eu, 0x00002cf5u, 0x000042c1u, 0x000200f9u, 0x000030eeu, 0x000200f8u, 0x000030eeu, 0x000700f5u, 0x00000013u, 0x0000892fu, 0x000088d3u, 0x000030ddu, 0x000042c1u, 0x000030efu, 0x000200f9u, 0x000030d3u, 0x000200f8u, 0x000030d3u, 0x000900f5u, 0x00000013u, 0x0000892eu, 0x0000892fu, 0x000030eeu, 0x00008931u, 0x0000310eu, 0x00008933u, 0x0000312eu, 0x000900f5u, 0x00000013u, 0x000088b1u, 0x000088b3u, 0x000030eeu, 0x000088b5u, 0x0000310eu, 0x000088b7u, 0x0000312eu, 0x000900f5u, 0x00000013u, 0x00008836u, 0x0000423du, 0x000030eeu, 0x000042f4u, 0x0000310eu, 0x000043b1u, 0x0000312eu, 0x000900f5u, 0x00000013u, 0x000087b9u, 0x000087bbu, 0x000030eeu, 0x000087bdu, 0x0000310eu, 0x000087bfu, 0x0000312eu, 0x000200f9u, 0x00002f16u, 0x000200f8u, 0x00002f1au, 0x00040071u, 0x00000006u, 0x00003048u, 0x00002cb0u, 0x0004007cu, 0x00000008u, 0x00003049u, 0x00003048u, 0x000300f7u, 0x0000304au, 0x00000000u, 0x000b00fbu, 0x00003049u, 0x0000304au, 0x00000000u, 0x0000304bu, 0x00000001u, 0x0000304cu, 0x00000002u, 0x0000304du, 0x00000003u, 0x0000304eu, 0x000200f8u, 0x0000304eu, 0x0004007cu, 0x000000b0u, 0x000030b0u, 0x000083d3u, 0x0003003eu, 0x00006f8au, 0x00002caau, 0x0003003eu, 0x00006f8bu, 0x00002cacu, 0x0003003eu, 0x00002dbcu, 0x000021c0u, 0x0003003eu, 0x00002dbdu, 0x000030b0u, 0x00050041u, 0x00000007u, 0x0000416au, 0x00002dbdu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000416bu, 0x0000416au, 0x00050084u, 0x00000006u, 0x0000416cu, 0x00002cacu, 0x0000416bu, 0x00050080u, 0x00000006u, 0x0000416du, 0x00002caau, 0x0000416cu, 0x0003003eu, 0x00004162u, 0x0000416du, 0x00050041u, 0x00000007u, 0x0000416eu, 0x00002dbdu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000416fu, 0x0000416eu, 0x00050084u, 0x00000006u, 0x00004170u, 0x0000416fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004172u, 0x0000416du, 0x00004170u, 0x0003003eu, 0x00004162u, 0x00004172u, 0x000500c7u, 0x00000006u, 0x00004174u, 0x00004172u, 0x00000e73u, 0x0003003eu, 0x00004162u, 0x00004174u, 0x000500c2u, 0x00000006u, 0x00004176u, 0x00004174u, 0x0000022au, 0x0003003eu, 0x00004163u, 0x00004176u, 0x0004003du, 0x00000006u, 0x00004178u, 0x0000416au, 0x000500c7u, 0x00000006u, 0x00004179u, 0x00004178u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000417au, 0x00004179u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000417cu, 0x00004176u, 0x0000417au, 0x0003003eu, 0x00004163u, 0x0000417cu, 0x000500c6u, 0x00000006u, 0x0000417eu, 0x0000417cu, 0x0000045cu, 0x0003003eu, 0x00004163u, 0x0000417eu, 0x00080041u, 0x00000692u, 0x00004181u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000417eu, 0x0004003du, 0x00000011u, 0x00004182u, 0x00004181u, 0x00040071u, 0x00000006u, 0x00004183u, 0x00004182u, 0x0003003eu, 0x00004164u, 0x00004183u, 0x000500c2u, 0x00000006u, 0x00004185u, 0x00004183u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00004186u, 0x00004185u, 0x0004007cu, 0x00000012u, 0x00004187u, 0x00004186u, 0x000500c7u, 0x00000006u, 0x00004189u, 0x00004183u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000418au, 0x00004189u, 0x0004007cu, 0x00000012u, 0x0000418bu, 0x0000418au, 0x00050050u, 0x000001aeu, 0x0000418cu, 0x00004187u, 0x0000418bu, 0x0009004fu, 0x00000013u, 0x0000418du, 0x0000418cu, 0x0000418cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004165u, 0x0000418du, 0x0003003eu, 0x00002cddu, 0x0000418du, 0x000300f7u, 0x000030b5u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000030b6u, 0x000030b5u, 0x000200f8u, 0x000030b6u, 0x00050050u, 0x000000efu, 0x000030b9u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x000030bau, 0x000030b9u, 0x0003003eu, 0x00006f8eu, 0x00002caau, 0x0003003eu, 0x00006f8fu, 0x00002cacu, 0x0003003eu, 0x00002dbfu, 0x000021c0u, 0x0003003eu, 0x00002dc0u, 0x000030bau, 0x00050041u, 0x00000007u, 0x00004196u, 0x00002dc0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004197u, 0x00004196u, 0x00050084u, 0x00000006u, 0x00004198u, 0x00002cacu, 0x00004197u, 0x00050080u, 0x00000006u, 0x00004199u, 0x00002caau, 0x00004198u, 0x0003003eu, 0x0000418eu, 0x00004199u, 0x00050041u, 0x00000007u, 0x0000419au, 0x00002dc0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000419bu, 0x0000419au, 0x00050084u, 0x00000006u, 0x0000419cu, 0x0000419bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000419eu, 0x00004199u, 0x0000419cu, 0x0003003eu, 0x0000418eu, 0x0000419eu, 0x000500c7u, 0x00000006u, 0x000041a0u, 0x0000419eu, 0x00000e73u, 0x0003003eu, 0x0000418eu, 0x000041a0u, 0x000500c2u, 0x00000006u, 0x000041a2u, 0x000041a0u, 0x0000022au, 0x0003003eu, 0x0000418fu, 0x000041a2u, 0x0004003du, 0x00000006u, 0x000041a4u, 0x00004196u, 0x000500c7u, 0x00000006u, 0x000041a5u, 0x000041a4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000041a6u, 0x000041a5u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000041a8u, 0x000041a2u, 0x000041a6u, 0x0003003eu, 0x0000418fu, 0x000041a8u, 0x000500c6u, 0x00000006u, 0x000041aau, 0x000041a8u, 0x0000045cu, 0x0003003eu, 0x0000418fu, 0x000041aau, 0x00080041u, 0x00000692u, 0x000041adu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000041aau, 0x0004003du, 0x00000011u, 0x000041aeu, 0x000041adu, 0x00040071u, 0x00000006u, 0x000041afu, 0x000041aeu, 0x0003003eu, 0x00004190u, 0x000041afu, 0x000500c2u, 0x00000006u, 0x000041b1u, 0x000041afu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000041b2u, 0x000041b1u, 0x0004007cu, 0x00000012u, 0x000041b3u, 0x000041b2u, 0x000500c7u, 0x00000006u, 0x000041b5u, 0x000041afu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000041b6u, 0x000041b5u, 0x0004007cu, 0x00000012u, 0x000041b7u, 0x000041b6u, 0x00050050u, 0x000001aeu, 0x000041b8u, 0x000041b3u, 0x000041b7u, 0x0009004fu, 0x00000013u, 0x000041b9u, 0x000041b8u, 0x000041b8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004191u, 0x000041b9u, 0x0003003eu, 0x00002ce5u, 0x000041b9u, 0x00050050u, 0x000000efu, 0x000030c0u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x000030c1u, 0x000030c0u, 0x0003003eu, 0x00006f92u, 0x00002caau, 0x0003003eu, 0x00006f93u, 0x00002cacu, 0x0003003eu, 0x00002dc2u, 0x000021c0u, 0x0003003eu, 0x00002dc3u, 0x000030c1u, 0x00050041u, 0x00000007u, 0x000041c2u, 0x00002dc3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000041c3u, 0x000041c2u, 0x00050084u, 0x00000006u, 0x000041c4u, 0x00002cacu, 0x000041c3u, 0x00050080u, 0x00000006u, 0x000041c5u, 0x00002caau, 0x000041c4u, 0x0003003eu, 0x000041bau, 0x000041c5u, 0x00050041u, 0x00000007u, 0x000041c6u, 0x00002dc3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000041c7u, 0x000041c6u, 0x00050084u, 0x00000006u, 0x000041c8u, 0x000041c7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000041cau, 0x000041c5u, 0x000041c8u, 0x0003003eu, 0x000041bau, 0x000041cau, 0x000500c7u, 0x00000006u, 0x000041ccu, 0x000041cau, 0x00000e73u, 0x0003003eu, 0x000041bau, 0x000041ccu, 0x000500c2u, 0x00000006u, 0x000041ceu, 0x000041ccu, 0x0000022au, 0x0003003eu, 0x000041bbu, 0x000041ceu, 0x0004003du, 0x00000006u, 0x000041d0u, 0x000041c2u, 0x000500c7u, 0x00000006u, 0x000041d1u, 0x000041d0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000041d2u, 0x000041d1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000041d4u, 0x000041ceu, 0x000041d2u, 0x0003003eu, 0x000041bbu, 0x000041d4u, 0x000500c6u, 0x00000006u, 0x000041d6u, 0x000041d4u, 0x0000045cu, 0x0003003eu, 0x000041bbu, 0x000041d6u, 0x00080041u, 0x00000692u, 0x000041d9u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000041d6u, 0x0004003du, 0x00000011u, 0x000041dau, 0x000041d9u, 0x00040071u, 0x00000006u, 0x000041dbu, 0x000041dau, 0x0003003eu, 0x000041bcu, 0x000041dbu, 0x000500c2u, 0x00000006u, 0x000041ddu, 0x000041dbu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000041deu, 0x000041ddu, 0x0004007cu, 0x00000012u, 0x000041dfu, 0x000041deu, 0x000500c7u, 0x00000006u, 0x000041e1u, 0x000041dbu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000041e2u, 0x000041e1u, 0x0004007cu, 0x00000012u, 0x000041e3u, 0x000041e2u, 0x00050050u, 0x000001aeu, 0x000041e4u, 0x000041dfu, 0x000041e3u, 0x0009004fu, 0x00000013u, 0x000041e5u, 0x000041e4u, 0x000041e4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000041bdu, 0x000041e5u, 0x0003003eu, 0x00002cedu, 0x000041e5u, 0x000200f9u, 0x000030b5u, 0x000200f8u, 0x000030b5u, 0x000700f5u, 0x00000013u, 0x000088b0u, 0x00008859u, 0x0000304eu, 0x000041e5u, 0x000030b6u, 0x000700f5u, 0x00000013u, 0x000087b8u, 0x0000875du, 0x0000304eu, 0x000041b9u, 0x000030b6u, 0x000300f7u, 0x000030c6u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x000030c7u, 0x000030c6u, 0x000200f8u, 0x000030c7u, 0x00050050u, 0x000000efu, 0x000030cau, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x000030cbu, 0x000030cau, 0x0003003eu, 0x00006f96u, 0x00002caau, 0x0003003eu, 0x00006f97u, 0x00002cacu, 0x0003003eu, 0x00002dc5u, 0x000021c0u, 0x0003003eu, 0x00002dc6u, 0x000030cbu, 0x00050041u, 0x00000007u, 0x000041eeu, 0x00002dc6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000041efu, 0x000041eeu, 0x00050084u, 0x00000006u, 0x000041f0u, 0x00002cacu, 0x000041efu, 0x00050080u, 0x00000006u, 0x000041f1u, 0x00002caau, 0x000041f0u, 0x0003003eu, 0x000041e6u, 0x000041f1u, 0x00050041u, 0x00000007u, 0x000041f2u, 0x00002dc6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000041f3u, 0x000041f2u, 0x00050084u, 0x00000006u, 0x000041f4u, 0x000041f3u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000041f6u, 0x000041f1u, 0x000041f4u, 0x0003003eu, 0x000041e6u, 0x000041f6u, 0x000500c7u, 0x00000006u, 0x000041f8u, 0x000041f6u, 0x00000e73u, 0x0003003eu, 0x000041e6u, 0x000041f8u, 0x000500c2u, 0x00000006u, 0x000041fau, 0x000041f8u, 0x0000022au, 0x0003003eu, 0x000041e7u, 0x000041fau, 0x0004003du, 0x00000006u, 0x000041fcu, 0x000041eeu, 0x000500c7u, 0x00000006u, 0x000041fdu, 0x000041fcu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000041feu, 0x000041fdu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004200u, 0x000041fau, 0x000041feu, 0x0003003eu, 0x000041e7u, 0x00004200u, 0x000500c6u, 0x00000006u, 0x00004202u, 0x00004200u, 0x0000045cu, 0x0003003eu, 0x000041e7u, 0x00004202u, 0x00080041u, 0x00000692u, 0x00004205u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004202u, 0x0004003du, 0x00000011u, 0x00004206u, 0x00004205u, 0x00040071u, 0x00000006u, 0x00004207u, 0x00004206u, 0x0003003eu, 0x000041e8u, 0x00004207u, 0x000500c2u, 0x00000006u, 0x00004209u, 0x00004207u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000420au, 0x00004209u, 0x0004007cu, 0x00000012u, 0x0000420bu, 0x0000420au, 0x000500c7u, 0x00000006u, 0x0000420du, 0x00004207u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000420eu, 0x0000420du, 0x0004007cu, 0x00000012u, 0x0000420fu, 0x0000420eu, 0x00050050u, 0x000001aeu, 0x00004210u, 0x0000420bu, 0x0000420fu, 0x0009004fu, 0x00000013u, 0x00004211u, 0x00004210u, 0x00004210u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000041e9u, 0x00004211u, 0x0003003eu, 0x00002cf5u, 0x00004211u, 0x000200f9u, 0x000030c6u, 0x000200f8u, 0x000030c6u, 0x000700f5u, 0x00000013u, 0x0000892cu, 0x000088d3u, 0x000030b5u, 0x00004211u, 0x000030c7u, 0x000200f9u, 0x0000304au, 0x000200f8u, 0x0000304du, 0x0004007cu, 0x000000b0u, 0x00003090u, 0x000083d3u, 0x0003003eu, 0x00006f7au, 0x00002caau, 0x0003003eu, 0x00006f7bu, 0x00002cacu, 0x0003003eu, 0x00002db0u, 0x000021c0u, 0x0003003eu, 0x00002db1u, 0x00003090u, 0x00050041u, 0x00000007u, 0x00004087u, 0x00002db1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004088u, 0x00004087u, 0x00050084u, 0x00000006u, 0x00004089u, 0x00002cacu, 0x00004088u, 0x00050080u, 0x00000006u, 0x0000408au, 0x00002caau, 0x00004089u, 0x0003003eu, 0x0000407eu, 0x0000408au, 0x00050041u, 0x00000007u, 0x0000408bu, 0x00002db1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000408cu, 0x0000408bu, 0x00050084u, 0x00000006u, 0x0000408du, 0x0000408cu, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000408fu, 0x0000408au, 0x0000408du, 0x0003003eu, 0x0000407eu, 0x0000408fu, 0x000500c7u, 0x00000006u, 0x00004091u, 0x0000408fu, 0x00000e73u, 0x0003003eu, 0x0000407eu, 0x00004091u, 0x000500c2u, 0x00000006u, 0x00004093u, 0x00004091u, 0x0000022au, 0x0003003eu, 0x0000407fu, 0x00004093u, 0x0004003du, 0x00000006u, 0x00004095u, 0x00004087u, 0x000500c7u, 0x00000006u, 0x00004096u, 0x00004095u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004097u, 0x00004096u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004099u, 0x00004093u, 0x00004097u, 0x0003003eu, 0x0000407fu, 0x00004099u, 0x000500c6u, 0x00000006u, 0x0000409bu, 0x00004099u, 0x0000045cu, 0x0003003eu, 0x0000407fu, 0x0000409bu, 0x00080041u, 0x00000692u, 0x0000409eu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000409bu, 0x0004003du, 0x00000011u, 0x0000409fu, 0x0000409eu, 0x00040071u, 0x00000006u, 0x000040a0u, 0x0000409fu, 0x0003003eu, 0x00004080u, 0x000040a0u, 0x0003003eu, 0x00004081u, 0x000040a0u, 0x000500c2u, 0x00000006u, 0x000040a7u, 0x000040a0u, 0x0000025du, 0x0003003eu, 0x000040a3u, 0x000040a7u, 0x000500c7u, 0x00000006u, 0x000040a9u, 0x000040a0u, 0x000006c3u, 0x0003003eu, 0x000040a4u, 0x000040a9u, 0x00040071u, 0x00000011u, 0x000040abu, 0x000040a7u, 0x0004007cu, 0x00000012u, 0x000040acu, 0x000040abu, 0x00040071u, 0x00000011u, 0x000040b4u, 0x000040a9u, 0x0004007cu, 0x00000012u, 0x000040b5u, 0x000040b4u, 0x00070050u, 0x00000013u, 0x000040b6u, 0x000040acu, 0x000040acu, 0x000040acu, 0x000040b5u, 0x0003003eu, 0x000040a5u, 0x000040b6u, 0x0003003eu, 0x00004082u, 0x000040b6u, 0x0003003eu, 0x00002cddu, 0x000040b6u, 0x000300f7u, 0x00003095u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00003096u, 0x00003095u, 0x000200f8u, 0x00003096u, 0x00050050u, 0x000000efu, 0x00003099u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x0000309au, 0x00003099u, 0x0003003eu, 0x00006f7eu, 0x00002caau, 0x0003003eu, 0x00006f7fu, 0x00002cacu, 0x0003003eu, 0x00002db3u, 0x000021c0u, 0x0003003eu, 0x00002db4u, 0x0000309au, 0x00050041u, 0x00000007u, 0x000040c0u, 0x00002db4u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000040c1u, 0x000040c0u, 0x00050084u, 0x00000006u, 0x000040c2u, 0x00002cacu, 0x000040c1u, 0x00050080u, 0x00000006u, 0x000040c3u, 0x00002caau, 0x000040c2u, 0x0003003eu, 0x000040b7u, 0x000040c3u, 0x00050041u, 0x00000007u, 0x000040c4u, 0x00002db4u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000040c5u, 0x000040c4u, 0x00050084u, 0x00000006u, 0x000040c6u, 0x000040c5u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000040c8u, 0x000040c3u, 0x000040c6u, 0x0003003eu, 0x000040b7u, 0x000040c8u, 0x000500c7u, 0x00000006u, 0x000040cau, 0x000040c8u, 0x00000e73u, 0x0003003eu, 0x000040b7u, 0x000040cau, 0x000500c2u, 0x00000006u, 0x000040ccu, 0x000040cau, 0x0000022au, 0x0003003eu, 0x000040b8u, 0x000040ccu, 0x0004003du, 0x00000006u, 0x000040ceu, 0x000040c0u, 0x000500c7u, 0x00000006u, 0x000040cfu, 0x000040ceu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000040d0u, 0x000040cfu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000040d2u, 0x000040ccu, 0x000040d0u, 0x0003003eu, 0x000040b8u, 0x000040d2u, 0x000500c6u, 0x00000006u, 0x000040d4u, 0x000040d2u, 0x0000045cu, 0x0003003eu, 0x000040b8u, 0x000040d4u, 0x00080041u, 0x00000692u, 0x000040d7u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000040d4u, 0x0004003du, 0x00000011u, 0x000040d8u, 0x000040d7u, 0x00040071u, 0x00000006u, 0x000040d9u, 0x000040d8u, 0x0003003eu, 0x000040b9u, 0x000040d9u, 0x0003003eu, 0x000040bau, 0x000040d9u, 0x000500c2u, 0x00000006u, 0x000040e0u, 0x000040d9u, 0x0000025du, 0x0003003eu, 0x000040dcu, 0x000040e0u, 0x000500c7u, 0x00000006u, 0x000040e2u, 0x000040d9u, 0x000006c3u, 0x0003003eu, 0x000040ddu, 0x000040e2u, 0x00040071u, 0x00000011u, 0x000040e4u, 0x000040e0u, 0x0004007cu, 0x00000012u, 0x000040e5u, 0x000040e4u, 0x00040071u, 0x00000011u, 0x000040edu, 0x000040e2u, 0x0004007cu, 0x00000012u, 0x000040eeu, 0x000040edu, 0x00070050u, 0x00000013u, 0x000040efu, 0x000040e5u, 0x000040e5u, 0x000040e5u, 0x000040eeu, 0x0003003eu, 0x000040deu, 0x000040efu, 0x0003003eu, 0x000040bbu, 0x000040efu, 0x0003003eu, 0x00002ce5u, 0x000040efu, 0x00050050u, 0x000000efu, 0x000030a0u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x000030a1u, 0x000030a0u, 0x0003003eu, 0x00006f82u, 0x00002caau, 0x0003003eu, 0x00006f83u, 0x00002cacu, 0x0003003eu, 0x00002db6u, 0x000021c0u, 0x0003003eu, 0x00002db7u, 0x000030a1u, 0x00050041u, 0x00000007u, 0x000040f9u, 0x00002db7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000040fau, 0x000040f9u, 0x00050084u, 0x00000006u, 0x000040fbu, 0x00002cacu, 0x000040fau, 0x00050080u, 0x00000006u, 0x000040fcu, 0x00002caau, 0x000040fbu, 0x0003003eu, 0x000040f0u, 0x000040fcu, 0x00050041u, 0x00000007u, 0x000040fdu, 0x00002db7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000040feu, 0x000040fdu, 0x00050084u, 0x00000006u, 0x000040ffu, 0x000040feu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004101u, 0x000040fcu, 0x000040ffu, 0x0003003eu, 0x000040f0u, 0x00004101u, 0x000500c7u, 0x00000006u, 0x00004103u, 0x00004101u, 0x00000e73u, 0x0003003eu, 0x000040f0u, 0x00004103u, 0x000500c2u, 0x00000006u, 0x00004105u, 0x00004103u, 0x0000022au, 0x0003003eu, 0x000040f1u, 0x00004105u, 0x0004003du, 0x00000006u, 0x00004107u, 0x000040f9u, 0x000500c7u, 0x00000006u, 0x00004108u, 0x00004107u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004109u, 0x00004108u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000410bu, 0x00004105u, 0x00004109u, 0x0003003eu, 0x000040f1u, 0x0000410bu, 0x000500c6u, 0x00000006u, 0x0000410du, 0x0000410bu, 0x0000045cu, 0x0003003eu, 0x000040f1u, 0x0000410du, 0x00080041u, 0x00000692u, 0x00004110u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000410du, 0x0004003du, 0x00000011u, 0x00004111u, 0x00004110u, 0x00040071u, 0x00000006u, 0x00004112u, 0x00004111u, 0x0003003eu, 0x000040f2u, 0x00004112u, 0x0003003eu, 0x000040f3u, 0x00004112u, 0x000500c2u, 0x00000006u, 0x00004119u, 0x00004112u, 0x0000025du, 0x0003003eu, 0x00004115u, 0x00004119u, 0x000500c7u, 0x00000006u, 0x0000411bu, 0x00004112u, 0x000006c3u, 0x0003003eu, 0x00004116u, 0x0000411bu, 0x00040071u, 0x00000011u, 0x0000411du, 0x00004119u, 0x0004007cu, 0x00000012u, 0x0000411eu, 0x0000411du, 0x00040071u, 0x00000011u, 0x00004126u, 0x0000411bu, 0x0004007cu, 0x00000012u, 0x00004127u, 0x00004126u, 0x00070050u, 0x00000013u, 0x00004128u, 0x0000411eu, 0x0000411eu, 0x0000411eu, 0x00004127u, 0x0003003eu, 0x00004117u, 0x00004128u, 0x0003003eu, 0x000040f4u, 0x00004128u, 0x0003003eu, 0x00002cedu, 0x00004128u, 0x000200f9u, 0x00003095u, 0x000200f8u, 0x00003095u, 0x000700f5u, 0x00000013u, 0x000088aeu, 0x00008859u, 0x0000304du, 0x00004128u, 0x00003096u, 0x000700f5u, 0x00000013u, 0x000087b6u, 0x0000875du, 0x0000304du, 0x000040efu, 0x00003096u, 0x000300f7u, 0x000030a6u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x000030a7u, 0x000030a6u, 0x000200f8u, 0x000030a7u, 0x00050050u, 0x000000efu, 0x000030aau, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x000030abu, 0x000030aau, 0x0003003eu, 0x00006f86u, 0x00002caau, 0x0003003eu, 0x00006f87u, 0x00002cacu, 0x0003003eu, 0x00002db9u, 0x000021c0u, 0x0003003eu, 0x00002dbau, 0x000030abu, 0x00050041u, 0x00000007u, 0x00004132u, 0x00002dbau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004133u, 0x00004132u, 0x00050084u, 0x00000006u, 0x00004134u, 0x00002cacu, 0x00004133u, 0x00050080u, 0x00000006u, 0x00004135u, 0x00002caau, 0x00004134u, 0x0003003eu, 0x00004129u, 0x00004135u, 0x00050041u, 0x00000007u, 0x00004136u, 0x00002dbau, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004137u, 0x00004136u, 0x00050084u, 0x00000006u, 0x00004138u, 0x00004137u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000413au, 0x00004135u, 0x00004138u, 0x0003003eu, 0x00004129u, 0x0000413au, 0x000500c7u, 0x00000006u, 0x0000413cu, 0x0000413au, 0x00000e73u, 0x0003003eu, 0x00004129u, 0x0000413cu, 0x000500c2u, 0x00000006u, 0x0000413eu, 0x0000413cu, 0x0000022au, 0x0003003eu, 0x0000412au, 0x0000413eu, 0x0004003du, 0x00000006u, 0x00004140u, 0x00004132u, 0x000500c7u, 0x00000006u, 0x00004141u, 0x00004140u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004142u, 0x00004141u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004144u, 0x0000413eu, 0x00004142u, 0x0003003eu, 0x0000412au, 0x00004144u, 0x000500c6u, 0x00000006u, 0x00004146u, 0x00004144u, 0x0000045cu, 0x0003003eu, 0x0000412au, 0x00004146u, 0x00080041u, 0x00000692u, 0x00004149u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004146u, 0x0004003du, 0x00000011u, 0x0000414au, 0x00004149u, 0x00040071u, 0x00000006u, 0x0000414bu, 0x0000414au, 0x0003003eu, 0x0000412bu, 0x0000414bu, 0x0003003eu, 0x0000412cu, 0x0000414bu, 0x000500c2u, 0x00000006u, 0x00004152u, 0x0000414bu, 0x0000025du, 0x0003003eu, 0x0000414eu, 0x00004152u, 0x000500c7u, 0x00000006u, 0x00004154u, 0x0000414bu, 0x000006c3u, 0x0003003eu, 0x0000414fu, 0x00004154u, 0x00040071u, 0x00000011u, 0x00004156u, 0x00004152u, 0x0004007cu, 0x00000012u, 0x00004157u, 0x00004156u, 0x00040071u, 0x00000011u, 0x0000415fu, 0x00004154u, 0x0004007cu, 0x00000012u, 0x00004160u, 0x0000415fu, 0x00070050u, 0x00000013u, 0x00004161u, 0x00004157u, 0x00004157u, 0x00004157u, 0x00004160u, 0x0003003eu, 0x00004150u, 0x00004161u, 0x0003003eu, 0x0000412du, 0x00004161u, 0x0003003eu, 0x00002cf5u, 0x00004161u, 0x000200f9u, 0x000030a6u, 0x000200f8u, 0x000030a6u, 0x000700f5u, 0x00000013u, 0x0000892au, 0x000088d3u, 0x00003095u, 0x00004161u, 0x000030a7u, 0x000200f9u, 0x0000304au, 0x000200f8u, 0x0000304cu, 0x0004007cu, 0x000000b0u, 0x00003070u, 0x000083d3u, 0x0003003eu, 0x00006f6au, 0x00002caau, 0x0003003eu, 0x00006f6bu, 0x00002cacu, 0x0003003eu, 0x00002da4u, 0x000021c0u, 0x0003003eu, 0x00002da5u, 0x00003070u, 0x00050041u, 0x00000007u, 0x00003f9cu, 0x00002da5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003f9du, 0x00003f9cu, 0x00050084u, 0x00000006u, 0x00003f9eu, 0x00002cacu, 0x00003f9du, 0x00050080u, 0x00000006u, 0x00003f9fu, 0x00002caau, 0x00003f9eu, 0x0003003eu, 0x00003f92u, 0x00003f9fu, 0x00050041u, 0x00000007u, 0x00003fa0u, 0x00002da5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003fa1u, 0x00003fa0u, 0x00050080u, 0x00000006u, 0x00003fa3u, 0x00003f9fu, 0x00003fa1u, 0x0003003eu, 0x00003f92u, 0x00003fa3u, 0x000500c7u, 0x00000006u, 0x00003fa5u, 0x00003fa3u, 0x00000e73u, 0x0003003eu, 0x00003f92u, 0x00003fa5u, 0x0003003eu, 0x00003f93u, 0x00003fa5u, 0x0004003du, 0x00000006u, 0x00003fa8u, 0x00003f9cu, 0x000500c7u, 0x00000006u, 0x00003fa9u, 0x00003fa8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003faau, 0x00003fa9u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003facu, 0x00003fa5u, 0x00003faau, 0x0003003eu, 0x00003f93u, 0x00003facu, 0x000500c6u, 0x00000006u, 0x00003faeu, 0x00003facu, 0x00000464u, 0x0003003eu, 0x00003f93u, 0x00003faeu, 0x00080041u, 0x00000671u, 0x00003fb1u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003faeu, 0x0004003du, 0x0000000fu, 0x00003fb2u, 0x00003fb1u, 0x00040071u, 0x00000006u, 0x00003fb3u, 0x00003fb2u, 0x0003003eu, 0x00003f94u, 0x00003fb3u, 0x000500c2u, 0x00000006u, 0x00003fb5u, 0x00003fb3u, 0x00000233u, 0x0003003eu, 0x00003f95u, 0x00003fb5u, 0x000500c7u, 0x00000006u, 0x00003fb7u, 0x00003fb3u, 0x00000e96u, 0x0003003eu, 0x00003f96u, 0x00003fb7u, 0x000500c4u, 0x00000006u, 0x00003fb9u, 0x00003fb7u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003fbbu, 0x00003fb7u, 0x00003fb9u, 0x0003003eu, 0x00003f96u, 0x00003fbbu, 0x000500c4u, 0x00000006u, 0x00003fbdu, 0x00003fb5u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003fbfu, 0x00003fb5u, 0x00003fbdu, 0x0003003eu, 0x00003f95u, 0x00003fbfu, 0x00040071u, 0x00000011u, 0x00003fc1u, 0x00003fbfu, 0x0004007cu, 0x00000012u, 0x00003fc2u, 0x00003fc1u, 0x00040071u, 0x00000011u, 0x00003fcau, 0x00003fbbu, 0x0004007cu, 0x00000012u, 0x00003fcbu, 0x00003fcau, 0x00070050u, 0x00000013u, 0x00003fccu, 0x00003fc2u, 0x00003fc2u, 0x00003fc2u, 0x00003fcbu, 0x0003003eu, 0x00003f97u, 0x00003fccu, 0x0003003eu, 0x00002cddu, 0x00003fccu, 0x000300f7u, 0x00003075u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00003076u, 0x00003075u, 0x000200f8u, 0x00003076u, 0x00050050u, 0x000000efu, 0x00003079u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x0000307au, 0x00003079u, 0x0003003eu, 0x00006f6eu, 0x00002caau, 0x0003003eu, 0x00006f6fu, 0x00002cacu, 0x0003003eu, 0x00002da7u, 0x000021c0u, 0x0003003eu, 0x00002da8u, 0x0000307au, 0x00050041u, 0x00000007u, 0x00003fd7u, 0x00002da8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003fd8u, 0x00003fd7u, 0x00050084u, 0x00000006u, 0x00003fd9u, 0x00002cacu, 0x00003fd8u, 0x00050080u, 0x00000006u, 0x00003fdau, 0x00002caau, 0x00003fd9u, 0x0003003eu, 0x00003fcdu, 0x00003fdau, 0x00050041u, 0x00000007u, 0x00003fdbu, 0x00002da8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003fdcu, 0x00003fdbu, 0x00050080u, 0x00000006u, 0x00003fdeu, 0x00003fdau, 0x00003fdcu, 0x0003003eu, 0x00003fcdu, 0x00003fdeu, 0x000500c7u, 0x00000006u, 0x00003fe0u, 0x00003fdeu, 0x00000e73u, 0x0003003eu, 0x00003fcdu, 0x00003fe0u, 0x0003003eu, 0x00003fceu, 0x00003fe0u, 0x0004003du, 0x00000006u, 0x00003fe3u, 0x00003fd7u, 0x000500c7u, 0x00000006u, 0x00003fe4u, 0x00003fe3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003fe5u, 0x00003fe4u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003fe7u, 0x00003fe0u, 0x00003fe5u, 0x0003003eu, 0x00003fceu, 0x00003fe7u, 0x000500c6u, 0x00000006u, 0x00003fe9u, 0x00003fe7u, 0x00000464u, 0x0003003eu, 0x00003fceu, 0x00003fe9u, 0x00080041u, 0x00000671u, 0x00003fecu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003fe9u, 0x0004003du, 0x0000000fu, 0x00003fedu, 0x00003fecu, 0x00040071u, 0x00000006u, 0x00003feeu, 0x00003fedu, 0x0003003eu, 0x00003fcfu, 0x00003feeu, 0x000500c2u, 0x00000006u, 0x00003ff0u, 0x00003feeu, 0x00000233u, 0x0003003eu, 0x00003fd0u, 0x00003ff0u, 0x000500c7u, 0x00000006u, 0x00003ff2u, 0x00003feeu, 0x00000e96u, 0x0003003eu, 0x00003fd1u, 0x00003ff2u, 0x000500c4u, 0x00000006u, 0x00003ff4u, 0x00003ff2u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003ff6u, 0x00003ff2u, 0x00003ff4u, 0x0003003eu, 0x00003fd1u, 0x00003ff6u, 0x000500c4u, 0x00000006u, 0x00003ff8u, 0x00003ff0u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003ffau, 0x00003ff0u, 0x00003ff8u, 0x0003003eu, 0x00003fd0u, 0x00003ffau, 0x00040071u, 0x00000011u, 0x00003ffcu, 0x00003ffau, 0x0004007cu, 0x00000012u, 0x00003ffdu, 0x00003ffcu, 0x00040071u, 0x00000011u, 0x00004005u, 0x00003ff6u, 0x0004007cu, 0x00000012u, 0x00004006u, 0x00004005u, 0x00070050u, 0x00000013u, 0x00004007u, 0x00003ffdu, 0x00003ffdu, 0x00003ffdu, 0x00004006u, 0x0003003eu, 0x00003fd2u, 0x00004007u, 0x0003003eu, 0x00002ce5u, 0x00004007u, 0x00050050u, 0x000000efu, 0x00003080u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003081u, 0x00003080u, 0x0003003eu, 0x00006f72u, 0x00002caau, 0x0003003eu, 0x00006f73u, 0x00002cacu, 0x0003003eu, 0x00002daau, 0x000021c0u, 0x0003003eu, 0x00002dabu, 0x00003081u, 0x00050041u, 0x00000007u, 0x00004012u, 0x00002dabu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004013u, 0x00004012u, 0x00050084u, 0x00000006u, 0x00004014u, 0x00002cacu, 0x00004013u, 0x00050080u, 0x00000006u, 0x00004015u, 0x00002caau, 0x00004014u, 0x0003003eu, 0x00004008u, 0x00004015u, 0x00050041u, 0x00000007u, 0x00004016u, 0x00002dabu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004017u, 0x00004016u, 0x00050080u, 0x00000006u, 0x00004019u, 0x00004015u, 0x00004017u, 0x0003003eu, 0x00004008u, 0x00004019u, 0x000500c7u, 0x00000006u, 0x0000401bu, 0x00004019u, 0x00000e73u, 0x0003003eu, 0x00004008u, 0x0000401bu, 0x0003003eu, 0x00004009u, 0x0000401bu, 0x0004003du, 0x00000006u, 0x0000401eu, 0x00004012u, 0x000500c7u, 0x00000006u, 0x0000401fu, 0x0000401eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004020u, 0x0000401fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004022u, 0x0000401bu, 0x00004020u, 0x0003003eu, 0x00004009u, 0x00004022u, 0x000500c6u, 0x00000006u, 0x00004024u, 0x00004022u, 0x00000464u, 0x0003003eu, 0x00004009u, 0x00004024u, 0x00080041u, 0x00000671u, 0x00004027u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004024u, 0x0004003du, 0x0000000fu, 0x00004028u, 0x00004027u, 0x00040071u, 0x00000006u, 0x00004029u, 0x00004028u, 0x0003003eu, 0x0000400au, 0x00004029u, 0x000500c2u, 0x00000006u, 0x0000402bu, 0x00004029u, 0x00000233u, 0x0003003eu, 0x0000400bu, 0x0000402bu, 0x000500c7u, 0x00000006u, 0x0000402du, 0x00004029u, 0x00000e96u, 0x0003003eu, 0x0000400cu, 0x0000402du, 0x000500c4u, 0x00000006u, 0x0000402fu, 0x0000402du, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004031u, 0x0000402du, 0x0000402fu, 0x0003003eu, 0x0000400cu, 0x00004031u, 0x000500c4u, 0x00000006u, 0x00004033u, 0x0000402bu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004035u, 0x0000402bu, 0x00004033u, 0x0003003eu, 0x0000400bu, 0x00004035u, 0x00040071u, 0x00000011u, 0x00004037u, 0x00004035u, 0x0004007cu, 0x00000012u, 0x00004038u, 0x00004037u, 0x00040071u, 0x00000011u, 0x00004040u, 0x00004031u, 0x0004007cu, 0x00000012u, 0x00004041u, 0x00004040u, 0x00070050u, 0x00000013u, 0x00004042u, 0x00004038u, 0x00004038u, 0x00004038u, 0x00004041u, 0x0003003eu, 0x0000400du, 0x00004042u, 0x0003003eu, 0x00002cedu, 0x00004042u, 0x000200f9u, 0x00003075u, 0x000200f8u, 0x00003075u, 0x000700f5u, 0x00000013u, 0x000088acu, 0x00008859u, 0x0000304cu, 0x00004042u, 0x00003076u, 0x000700f5u, 0x00000013u, 0x000087b4u, 0x0000875du, 0x0000304cu, 0x00004007u, 0x00003076u, 0x000300f7u, 0x00003086u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00003087u, 0x00003086u, 0x000200f8u, 0x00003087u, 0x00050050u, 0x000000efu, 0x0000308au, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x0000308bu, 0x0000308au, 0x0003003eu, 0x00006f76u, 0x00002caau, 0x0003003eu, 0x00006f77u, 0x00002cacu, 0x0003003eu, 0x00002dadu, 0x000021c0u, 0x0003003eu, 0x00002daeu, 0x0000308bu, 0x00050041u, 0x00000007u, 0x0000404du, 0x00002daeu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000404eu, 0x0000404du, 0x00050084u, 0x00000006u, 0x0000404fu, 0x00002cacu, 0x0000404eu, 0x00050080u, 0x00000006u, 0x00004050u, 0x00002caau, 0x0000404fu, 0x0003003eu, 0x00004043u, 0x00004050u, 0x00050041u, 0x00000007u, 0x00004051u, 0x00002daeu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004052u, 0x00004051u, 0x00050080u, 0x00000006u, 0x00004054u, 0x00004050u, 0x00004052u, 0x0003003eu, 0x00004043u, 0x00004054u, 0x000500c7u, 0x00000006u, 0x00004056u, 0x00004054u, 0x00000e73u, 0x0003003eu, 0x00004043u, 0x00004056u, 0x0003003eu, 0x00004044u, 0x00004056u, 0x0004003du, 0x00000006u, 0x00004059u, 0x0000404du, 0x000500c7u, 0x00000006u, 0x0000405au, 0x00004059u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000405bu, 0x0000405au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000405du, 0x00004056u, 0x0000405bu, 0x0003003eu, 0x00004044u, 0x0000405du, 0x000500c6u, 0x00000006u, 0x0000405fu, 0x0000405du, 0x00000464u, 0x0003003eu, 0x00004044u, 0x0000405fu, 0x00080041u, 0x00000671u, 0x00004062u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000405fu, 0x0004003du, 0x0000000fu, 0x00004063u, 0x00004062u, 0x00040071u, 0x00000006u, 0x00004064u, 0x00004063u, 0x0003003eu, 0x00004045u, 0x00004064u, 0x000500c2u, 0x00000006u, 0x00004066u, 0x00004064u, 0x00000233u, 0x0003003eu, 0x00004046u, 0x00004066u, 0x000500c7u, 0x00000006u, 0x00004068u, 0x00004064u, 0x00000e96u, 0x0003003eu, 0x00004047u, 0x00004068u, 0x000500c4u, 0x00000006u, 0x0000406au, 0x00004068u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000406cu, 0x00004068u, 0x0000406au, 0x0003003eu, 0x00004047u, 0x0000406cu, 0x000500c4u, 0x00000006u, 0x0000406eu, 0x00004066u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004070u, 0x00004066u, 0x0000406eu, 0x0003003eu, 0x00004046u, 0x00004070u, 0x00040071u, 0x00000011u, 0x00004072u, 0x00004070u, 0x0004007cu, 0x00000012u, 0x00004073u, 0x00004072u, 0x00040071u, 0x00000011u, 0x0000407bu, 0x0000406cu, 0x0004007cu, 0x00000012u, 0x0000407cu, 0x0000407bu, 0x00070050u, 0x00000013u, 0x0000407du, 0x00004073u, 0x00004073u, 0x00004073u, 0x0000407cu, 0x0003003eu, 0x00004048u, 0x0000407du, 0x0003003eu, 0x00002cf5u, 0x0000407du, 0x000200f9u, 0x00003086u, 0x000200f8u, 0x00003086u, 0x000700f5u, 0x00000013u, 0x00008928u, 0x000088d3u, 0x00003075u, 0x0000407du, 0x00003087u, 0x000200f9u, 0x0000304au, 0x000200f8u, 0x0000304bu, 0x0004007cu, 0x000000b0u, 0x00003050u, 0x000083d3u, 0x0003003eu, 0x00006f5au, 0x00002caau, 0x0003003eu, 0x00006f5bu, 0x00002cacu, 0x0003003eu, 0x00002d98u, 0x000021c0u, 0x0003003eu, 0x00002d99u, 0x00003050u, 0x00050041u, 0x00000007u, 0x00003e88u, 0x00002d99u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e89u, 0x00003e88u, 0x00050084u, 0x00000006u, 0x00003e8au, 0x00002cacu, 0x00003e89u, 0x00050080u, 0x00000006u, 0x00003e8bu, 0x00002caau, 0x00003e8au, 0x0003003eu, 0x00003e7eu, 0x00003e8bu, 0x00050041u, 0x00000007u, 0x00003e8cu, 0x00002d99u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e8du, 0x00003e8cu, 0x000500c2u, 0x00000006u, 0x00003e8eu, 0x00003e8du, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003e90u, 0x00003e8bu, 0x00003e8eu, 0x0003003eu, 0x00003e7eu, 0x00003e90u, 0x000500c7u, 0x00000006u, 0x00003e92u, 0x00003e90u, 0x00000e73u, 0x0003003eu, 0x00003e7eu, 0x00003e92u, 0x0004003du, 0x00000006u, 0x00003e94u, 0x00003e8cu, 0x000400c8u, 0x00000006u, 0x00003e95u, 0x00003e94u, 0x000500c7u, 0x00000006u, 0x00003e96u, 0x00003e95u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003e97u, 0x00003e96u, 0x00000704u, 0x0003003eu, 0x00003e7fu, 0x00003e97u, 0x0003003eu, 0x00003e80u, 0x00003e92u, 0x0004003du, 0x00000006u, 0x00003e9au, 0x00003e88u, 0x000500c7u, 0x00000006u, 0x00003e9bu, 0x00003e9au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e9cu, 0x00003e9bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e9eu, 0x00003e92u, 0x00003e9cu, 0x0003003eu, 0x00003e80u, 0x00003e9eu, 0x000500c6u, 0x00000006u, 0x00003ea0u, 0x00003e9eu, 0x00000464u, 0x0003003eu, 0x00003e80u, 0x00003ea0u, 0x00080041u, 0x00000671u, 0x00003ea3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003ea0u, 0x0004003du, 0x0000000fu, 0x00003ea4u, 0x00003ea3u, 0x00040071u, 0x00000006u, 0x00003ea5u, 0x00003ea4u, 0x0003003eu, 0x00003e81u, 0x00003ea5u, 0x000500c2u, 0x00000006u, 0x00003ea8u, 0x00003ea5u, 0x00003e97u, 0x000500c7u, 0x00000006u, 0x00003ea9u, 0x00003ea8u, 0x00000e96u, 0x0003003eu, 0x00003e81u, 0x00003ea9u, 0x000500c7u, 0x00000006u, 0x00003eabu, 0x00003ea9u, 0x00000eceu, 0x0003003eu, 0x00003e82u, 0x00003eabu, 0x000500c4u, 0x00000006u, 0x00003eadu, 0x00003eabu, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003eafu, 0x00003eabu, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003eb0u, 0x00003eadu, 0x00003eafu, 0x000500c2u, 0x00000006u, 0x00003eb2u, 0x00003eabu, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003eb3u, 0x00003eb0u, 0x00003eb2u, 0x0003003eu, 0x00003e82u, 0x00003eb3u, 0x00040071u, 0x00000011u, 0x00003eb5u, 0x00003eb3u, 0x0004007cu, 0x00000012u, 0x00003eb6u, 0x00003eb5u, 0x000500c7u, 0x00000006u, 0x00003ebeu, 0x00003ea9u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003ebfu, 0x00003ebeu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003ec0u, 0x00003ebfu, 0x0004007cu, 0x00000012u, 0x00003ec1u, 0x00003ec0u, 0x00070050u, 0x00000013u, 0x00003ec2u, 0x00003eb6u, 0x00003eb6u, 0x00003eb6u, 0x00003ec1u, 0x0003003eu, 0x00003e83u, 0x00003ec2u, 0x0003003eu, 0x00002cddu, 0x00003ec2u, 0x000300f7u, 0x00003055u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00003056u, 0x00003055u, 0x000200f8u, 0x00003056u, 0x00050050u, 0x000000efu, 0x00003059u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x0000305au, 0x00003059u, 0x0003003eu, 0x00006f5eu, 0x00002caau, 0x0003003eu, 0x00006f5fu, 0x00002cacu, 0x0003003eu, 0x00002d9bu, 0x000021c0u, 0x0003003eu, 0x00002d9cu, 0x0000305au, 0x00050041u, 0x00000007u, 0x00003ecdu, 0x00002d9cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003eceu, 0x00003ecdu, 0x00050084u, 0x00000006u, 0x00003ecfu, 0x00002cacu, 0x00003eceu, 0x00050080u, 0x00000006u, 0x00003ed0u, 0x00002caau, 0x00003ecfu, 0x0003003eu, 0x00003ec3u, 0x00003ed0u, 0x00050041u, 0x00000007u, 0x00003ed1u, 0x00002d9cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003ed2u, 0x00003ed1u, 0x000500c2u, 0x00000006u, 0x00003ed3u, 0x00003ed2u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003ed5u, 0x00003ed0u, 0x00003ed3u, 0x0003003eu, 0x00003ec3u, 0x00003ed5u, 0x000500c7u, 0x00000006u, 0x00003ed7u, 0x00003ed5u, 0x00000e73u, 0x0003003eu, 0x00003ec3u, 0x00003ed7u, 0x0004003du, 0x00000006u, 0x00003ed9u, 0x00003ed1u, 0x000400c8u, 0x00000006u, 0x00003edau, 0x00003ed9u, 0x000500c7u, 0x00000006u, 0x00003edbu, 0x00003edau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003edcu, 0x00003edbu, 0x00000704u, 0x0003003eu, 0x00003ec4u, 0x00003edcu, 0x0003003eu, 0x00003ec5u, 0x00003ed7u, 0x0004003du, 0x00000006u, 0x00003edfu, 0x00003ecdu, 0x000500c7u, 0x00000006u, 0x00003ee0u, 0x00003edfu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ee1u, 0x00003ee0u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003ee3u, 0x00003ed7u, 0x00003ee1u, 0x0003003eu, 0x00003ec5u, 0x00003ee3u, 0x000500c6u, 0x00000006u, 0x00003ee5u, 0x00003ee3u, 0x00000464u, 0x0003003eu, 0x00003ec5u, 0x00003ee5u, 0x00080041u, 0x00000671u, 0x00003ee8u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003ee5u, 0x0004003du, 0x0000000fu, 0x00003ee9u, 0x00003ee8u, 0x00040071u, 0x00000006u, 0x00003eeau, 0x00003ee9u, 0x0003003eu, 0x00003ec6u, 0x00003eeau, 0x000500c2u, 0x00000006u, 0x00003eedu, 0x00003eeau, 0x00003edcu, 0x000500c7u, 0x00000006u, 0x00003eeeu, 0x00003eedu, 0x00000e96u, 0x0003003eu, 0x00003ec6u, 0x00003eeeu, 0x000500c7u, 0x00000006u, 0x00003ef0u, 0x00003eeeu, 0x00000eceu, 0x0003003eu, 0x00003ec7u, 0x00003ef0u, 0x000500c4u, 0x00000006u, 0x00003ef2u, 0x00003ef0u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003ef4u, 0x00003ef0u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003ef5u, 0x00003ef2u, 0x00003ef4u, 0x000500c2u, 0x00000006u, 0x00003ef7u, 0x00003ef0u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003ef8u, 0x00003ef5u, 0x00003ef7u, 0x0003003eu, 0x00003ec7u, 0x00003ef8u, 0x00040071u, 0x00000011u, 0x00003efau, 0x00003ef8u, 0x0004007cu, 0x00000012u, 0x00003efbu, 0x00003efau, 0x000500c7u, 0x00000006u, 0x00003f03u, 0x00003eeeu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f04u, 0x00003f03u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003f05u, 0x00003f04u, 0x0004007cu, 0x00000012u, 0x00003f06u, 0x00003f05u, 0x00070050u, 0x00000013u, 0x00003f07u, 0x00003efbu, 0x00003efbu, 0x00003efbu, 0x00003f06u, 0x0003003eu, 0x00003ec8u, 0x00003f07u, 0x0003003eu, 0x00002ce5u, 0x00003f07u, 0x00050050u, 0x000000efu, 0x00003060u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003061u, 0x00003060u, 0x0003003eu, 0x00006f62u, 0x00002caau, 0x0003003eu, 0x00006f63u, 0x00002cacu, 0x0003003eu, 0x00002d9eu, 0x000021c0u, 0x0003003eu, 0x00002d9fu, 0x00003061u, 0x00050041u, 0x00000007u, 0x00003f12u, 0x00002d9fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003f13u, 0x00003f12u, 0x00050084u, 0x00000006u, 0x00003f14u, 0x00002cacu, 0x00003f13u, 0x00050080u, 0x00000006u, 0x00003f15u, 0x00002caau, 0x00003f14u, 0x0003003eu, 0x00003f08u, 0x00003f15u, 0x00050041u, 0x00000007u, 0x00003f16u, 0x00002d9fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003f17u, 0x00003f16u, 0x000500c2u, 0x00000006u, 0x00003f18u, 0x00003f17u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003f1au, 0x00003f15u, 0x00003f18u, 0x0003003eu, 0x00003f08u, 0x00003f1au, 0x000500c7u, 0x00000006u, 0x00003f1cu, 0x00003f1au, 0x00000e73u, 0x0003003eu, 0x00003f08u, 0x00003f1cu, 0x0004003du, 0x00000006u, 0x00003f1eu, 0x00003f16u, 0x000400c8u, 0x00000006u, 0x00003f1fu, 0x00003f1eu, 0x000500c7u, 0x00000006u, 0x00003f20u, 0x00003f1fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f21u, 0x00003f20u, 0x00000704u, 0x0003003eu, 0x00003f09u, 0x00003f21u, 0x0003003eu, 0x00003f0au, 0x00003f1cu, 0x0004003du, 0x00000006u, 0x00003f24u, 0x00003f12u, 0x000500c7u, 0x00000006u, 0x00003f25u, 0x00003f24u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003f26u, 0x00003f25u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003f28u, 0x00003f1cu, 0x00003f26u, 0x0003003eu, 0x00003f0au, 0x00003f28u, 0x000500c6u, 0x00000006u, 0x00003f2au, 0x00003f28u, 0x00000464u, 0x0003003eu, 0x00003f0au, 0x00003f2au, 0x00080041u, 0x00000671u, 0x00003f2du, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003f2au, 0x0004003du, 0x0000000fu, 0x00003f2eu, 0x00003f2du, 0x00040071u, 0x00000006u, 0x00003f2fu, 0x00003f2eu, 0x0003003eu, 0x00003f0bu, 0x00003f2fu, 0x000500c2u, 0x00000006u, 0x00003f32u, 0x00003f2fu, 0x00003f21u, 0x000500c7u, 0x00000006u, 0x00003f33u, 0x00003f32u, 0x00000e96u, 0x0003003eu, 0x00003f0bu, 0x00003f33u, 0x000500c7u, 0x00000006u, 0x00003f35u, 0x00003f33u, 0x00000eceu, 0x0003003eu, 0x00003f0cu, 0x00003f35u, 0x000500c4u, 0x00000006u, 0x00003f37u, 0x00003f35u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003f39u, 0x00003f35u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003f3au, 0x00003f37u, 0x00003f39u, 0x000500c2u, 0x00000006u, 0x00003f3cu, 0x00003f35u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003f3du, 0x00003f3au, 0x00003f3cu, 0x0003003eu, 0x00003f0cu, 0x00003f3du, 0x00040071u, 0x00000011u, 0x00003f3fu, 0x00003f3du, 0x0004007cu, 0x00000012u, 0x00003f40u, 0x00003f3fu, 0x000500c7u, 0x00000006u, 0x00003f48u, 0x00003f33u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f49u, 0x00003f48u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003f4au, 0x00003f49u, 0x0004007cu, 0x00000012u, 0x00003f4bu, 0x00003f4au, 0x00070050u, 0x00000013u, 0x00003f4cu, 0x00003f40u, 0x00003f40u, 0x00003f40u, 0x00003f4bu, 0x0003003eu, 0x00003f0du, 0x00003f4cu, 0x0003003eu, 0x00002cedu, 0x00003f4cu, 0x000200f9u, 0x00003055u, 0x000200f8u, 0x00003055u, 0x000700f5u, 0x00000013u, 0x000088aau, 0x00008859u, 0x0000304bu, 0x00003f4cu, 0x00003056u, 0x000700f5u, 0x00000013u, 0x000087b2u, 0x0000875du, 0x0000304bu, 0x00003f07u, 0x00003056u, 0x000300f7u, 0x00003066u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00003067u, 0x00003066u, 0x000200f8u, 0x00003067u, 0x00050050u, 0x000000efu, 0x0000306au, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x0000306bu, 0x0000306au, 0x0003003eu, 0x00006f66u, 0x00002caau, 0x0003003eu, 0x00006f67u, 0x00002cacu, 0x0003003eu, 0x00002da1u, 0x000021c0u, 0x0003003eu, 0x00002da2u, 0x0000306bu, 0x00050041u, 0x00000007u, 0x00003f57u, 0x00002da2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003f58u, 0x00003f57u, 0x00050084u, 0x00000006u, 0x00003f59u, 0x00002cacu, 0x00003f58u, 0x00050080u, 0x00000006u, 0x00003f5au, 0x00002caau, 0x00003f59u, 0x0003003eu, 0x00003f4du, 0x00003f5au, 0x00050041u, 0x00000007u, 0x00003f5bu, 0x00002da2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003f5cu, 0x00003f5bu, 0x000500c2u, 0x00000006u, 0x00003f5du, 0x00003f5cu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003f5fu, 0x00003f5au, 0x00003f5du, 0x0003003eu, 0x00003f4du, 0x00003f5fu, 0x000500c7u, 0x00000006u, 0x00003f61u, 0x00003f5fu, 0x00000e73u, 0x0003003eu, 0x00003f4du, 0x00003f61u, 0x0004003du, 0x00000006u, 0x00003f63u, 0x00003f5bu, 0x000400c8u, 0x00000006u, 0x00003f64u, 0x00003f63u, 0x000500c7u, 0x00000006u, 0x00003f65u, 0x00003f64u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f66u, 0x00003f65u, 0x00000704u, 0x0003003eu, 0x00003f4eu, 0x00003f66u, 0x0003003eu, 0x00003f4fu, 0x00003f61u, 0x0004003du, 0x00000006u, 0x00003f69u, 0x00003f57u, 0x000500c7u, 0x00000006u, 0x00003f6au, 0x00003f69u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003f6bu, 0x00003f6au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003f6du, 0x00003f61u, 0x00003f6bu, 0x0003003eu, 0x00003f4fu, 0x00003f6du, 0x000500c6u, 0x00000006u, 0x00003f6fu, 0x00003f6du, 0x00000464u, 0x0003003eu, 0x00003f4fu, 0x00003f6fu, 0x00080041u, 0x00000671u, 0x00003f72u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003f6fu, 0x0004003du, 0x0000000fu, 0x00003f73u, 0x00003f72u, 0x00040071u, 0x00000006u, 0x00003f74u, 0x00003f73u, 0x0003003eu, 0x00003f50u, 0x00003f74u, 0x000500c2u, 0x00000006u, 0x00003f77u, 0x00003f74u, 0x00003f66u, 0x000500c7u, 0x00000006u, 0x00003f78u, 0x00003f77u, 0x00000e96u, 0x0003003eu, 0x00003f50u, 0x00003f78u, 0x000500c7u, 0x00000006u, 0x00003f7au, 0x00003f78u, 0x00000eceu, 0x0003003eu, 0x00003f51u, 0x00003f7au, 0x000500c4u, 0x00000006u, 0x00003f7cu, 0x00003f7au, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00003f7eu, 0x00003f7au, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00003f7fu, 0x00003f7cu, 0x00003f7eu, 0x000500c2u, 0x00000006u, 0x00003f81u, 0x00003f7au, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00003f82u, 0x00003f7fu, 0x00003f81u, 0x0003003eu, 0x00003f51u, 0x00003f82u, 0x00040071u, 0x00000011u, 0x00003f84u, 0x00003f82u, 0x0004007cu, 0x00000012u, 0x00003f85u, 0x00003f84u, 0x000500c7u, 0x00000006u, 0x00003f8du, 0x00003f78u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003f8eu, 0x00003f8du, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003f8fu, 0x00003f8eu, 0x0004007cu, 0x00000012u, 0x00003f90u, 0x00003f8fu, 0x00070050u, 0x00000013u, 0x00003f91u, 0x00003f85u, 0x00003f85u, 0x00003f85u, 0x00003f90u, 0x0003003eu, 0x00003f52u, 0x00003f91u, 0x0003003eu, 0x00002cf5u, 0x00003f91u, 0x000200f9u, 0x00003066u, 0x000200f8u, 0x00003066u, 0x000700f5u, 0x00000013u, 0x00008926u, 0x000088d3u, 0x00003055u, 0x00003f91u, 0x00003067u, 0x000200f9u, 0x0000304au, 0x000200f8u, 0x0000304au, 0x000d00f5u, 0x00000013u, 0x00008925u, 0x000088d3u, 0x00002f1au, 0x00008926u, 0x00003066u, 0x00008928u, 0x00003086u, 0x0000892au, 0x000030a6u, 0x0000892cu, 0x000030c6u, 0x000d00f5u, 0x00000013u, 0x000088a8u, 0x00008859u, 0x00002f1au, 0x000088aau, 0x00003066u, 0x000088acu, 0x00003086u, 0x000088aeu, 0x000030a6u, 0x000088b0u, 0x000030c6u, 0x000d00f5u, 0x00000013u, 0x0000882du, 0x000087dcu, 0x00002f1au, 0x00003ec2u, 0x00003066u, 0x00003fccu, 0x00003086u, 0x000040b6u, 0x000030a6u, 0x0000418du, 0x000030c6u, 0x000d00f5u, 0x00000013u, 0x000087b0u, 0x0000875du, 0x00002f1au, 0x000087b2u, 0x00003066u, 0x000087b4u, 0x00003086u, 0x000087b6u, 0x000030a6u, 0x000087b8u, 0x000030c6u, 0x000200f9u, 0x00002f16u, 0x000200f8u, 0x00002f19u, 0x00040071u, 0x00000006u, 0x00002fd4u, 0x00002cb0u, 0x0004007cu, 0x00000008u, 0x00002fd5u, 0x00002fd4u, 0x000300f7u, 0x00002fd6u, 0x00000000u, 0x000700fbu, 0x00002fd5u, 0x00002fd7u, 0x00000000u, 0x00002fd8u, 0x00000001u, 0x00002fd9u, 0x000200f8u, 0x00002fd9u, 0x0004007cu, 0x000000b0u, 0x00003027u, 0x000083d3u, 0x0003003eu, 0x00006f3au, 0x00002caau, 0x0003003eu, 0x00006f3bu, 0x00002cacu, 0x0003003eu, 0x00002d80u, 0x000021c0u, 0x0003003eu, 0x00002d81u, 0x00003027u, 0x00050041u, 0x00000007u, 0x00003df6u, 0x00002d81u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003df7u, 0x00003df6u, 0x00050084u, 0x00000006u, 0x00003df8u, 0x00002cacu, 0x00003df7u, 0x00050080u, 0x00000006u, 0x00003df9u, 0x00002caau, 0x00003df8u, 0x0003003eu, 0x00003deeu, 0x00003df9u, 0x00050041u, 0x00000007u, 0x00003dfau, 0x00002d81u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003dfbu, 0x00003dfau, 0x00050080u, 0x00000006u, 0x00003dfdu, 0x00003df9u, 0x00003dfbu, 0x0003003eu, 0x00003deeu, 0x00003dfdu, 0x000500c7u, 0x00000006u, 0x00003dffu, 0x00003dfdu, 0x00000e73u, 0x0003003eu, 0x00003deeu, 0x00003dffu, 0x0003003eu, 0x00003defu, 0x00003dffu, 0x0004003du, 0x00000006u, 0x00003e02u, 0x00003df6u, 0x000500c7u, 0x00000006u, 0x00003e03u, 0x00003e02u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e04u, 0x00003e03u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e06u, 0x00003dffu, 0x00003e04u, 0x0003003eu, 0x00003defu, 0x00003e06u, 0x000500c6u, 0x00000006u, 0x00003e08u, 0x00003e06u, 0x00000464u, 0x0003003eu, 0x00003defu, 0x00003e08u, 0x00080041u, 0x00000671u, 0x00003e0bu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003e08u, 0x0004003du, 0x0000000fu, 0x00003e0cu, 0x00003e0bu, 0x00040071u, 0x00000006u, 0x00003e0du, 0x00003e0cu, 0x0003003eu, 0x00003df0u, 0x00003e0du, 0x00040071u, 0x00000011u, 0x00003e0fu, 0x00003e0du, 0x0004007cu, 0x00000012u, 0x00003e10u, 0x00003e0fu, 0x00070050u, 0x00000013u, 0x00003e11u, 0x00003e10u, 0x00003e10u, 0x00003e10u, 0x00003e10u, 0x0003003eu, 0x00003df1u, 0x00003e11u, 0x0003003eu, 0x00002cddu, 0x00003e11u, 0x000300f7u, 0x0000302cu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x0000302du, 0x0000302cu, 0x000200f8u, 0x0000302du, 0x00050050u, 0x000000efu, 0x00003030u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00003031u, 0x00003030u, 0x0003003eu, 0x00006f3eu, 0x00002caau, 0x0003003eu, 0x00006f3fu, 0x00002cacu, 0x0003003eu, 0x00002d83u, 0x000021c0u, 0x0003003eu, 0x00002d84u, 0x00003031u, 0x00050041u, 0x00000007u, 0x00003e1au, 0x00002d84u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e1bu, 0x00003e1au, 0x00050084u, 0x00000006u, 0x00003e1cu, 0x00002cacu, 0x00003e1bu, 0x00050080u, 0x00000006u, 0x00003e1du, 0x00002caau, 0x00003e1cu, 0x0003003eu, 0x00003e12u, 0x00003e1du, 0x00050041u, 0x00000007u, 0x00003e1eu, 0x00002d84u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e1fu, 0x00003e1eu, 0x00050080u, 0x00000006u, 0x00003e21u, 0x00003e1du, 0x00003e1fu, 0x0003003eu, 0x00003e12u, 0x00003e21u, 0x000500c7u, 0x00000006u, 0x00003e23u, 0x00003e21u, 0x00000e73u, 0x0003003eu, 0x00003e12u, 0x00003e23u, 0x0003003eu, 0x00003e13u, 0x00003e23u, 0x0004003du, 0x00000006u, 0x00003e26u, 0x00003e1au, 0x000500c7u, 0x00000006u, 0x00003e27u, 0x00003e26u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e28u, 0x00003e27u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e2au, 0x00003e23u, 0x00003e28u, 0x0003003eu, 0x00003e13u, 0x00003e2au, 0x000500c6u, 0x00000006u, 0x00003e2cu, 0x00003e2au, 0x00000464u, 0x0003003eu, 0x00003e13u, 0x00003e2cu, 0x00080041u, 0x00000671u, 0x00003e2fu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003e2cu, 0x0004003du, 0x0000000fu, 0x00003e30u, 0x00003e2fu, 0x00040071u, 0x00000006u, 0x00003e31u, 0x00003e30u, 0x0003003eu, 0x00003e14u, 0x00003e31u, 0x00040071u, 0x00000011u, 0x00003e33u, 0x00003e31u, 0x0004007cu, 0x00000012u, 0x00003e34u, 0x00003e33u, 0x00070050u, 0x00000013u, 0x00003e35u, 0x00003e34u, 0x00003e34u, 0x00003e34u, 0x00003e34u, 0x0003003eu, 0x00003e15u, 0x00003e35u, 0x0003003eu, 0x00002ce5u, 0x00003e35u, 0x00050050u, 0x000000efu, 0x00003037u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003038u, 0x00003037u, 0x0003003eu, 0x00006f42u, 0x00002caau, 0x0003003eu, 0x00006f43u, 0x00002cacu, 0x0003003eu, 0x00002d86u, 0x000021c0u, 0x0003003eu, 0x00002d87u, 0x00003038u, 0x00050041u, 0x00000007u, 0x00003e3eu, 0x00002d87u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e3fu, 0x00003e3eu, 0x00050084u, 0x00000006u, 0x00003e40u, 0x00002cacu, 0x00003e3fu, 0x00050080u, 0x00000006u, 0x00003e41u, 0x00002caau, 0x00003e40u, 0x0003003eu, 0x00003e36u, 0x00003e41u, 0x00050041u, 0x00000007u, 0x00003e42u, 0x00002d87u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e43u, 0x00003e42u, 0x00050080u, 0x00000006u, 0x00003e45u, 0x00003e41u, 0x00003e43u, 0x0003003eu, 0x00003e36u, 0x00003e45u, 0x000500c7u, 0x00000006u, 0x00003e47u, 0x00003e45u, 0x00000e73u, 0x0003003eu, 0x00003e36u, 0x00003e47u, 0x0003003eu, 0x00003e37u, 0x00003e47u, 0x0004003du, 0x00000006u, 0x00003e4au, 0x00003e3eu, 0x000500c7u, 0x00000006u, 0x00003e4bu, 0x00003e4au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e4cu, 0x00003e4bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e4eu, 0x00003e47u, 0x00003e4cu, 0x0003003eu, 0x00003e37u, 0x00003e4eu, 0x000500c6u, 0x00000006u, 0x00003e50u, 0x00003e4eu, 0x00000464u, 0x0003003eu, 0x00003e37u, 0x00003e50u, 0x00080041u, 0x00000671u, 0x00003e53u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003e50u, 0x0004003du, 0x0000000fu, 0x00003e54u, 0x00003e53u, 0x00040071u, 0x00000006u, 0x00003e55u, 0x00003e54u, 0x0003003eu, 0x00003e38u, 0x00003e55u, 0x00040071u, 0x00000011u, 0x00003e57u, 0x00003e55u, 0x0004007cu, 0x00000012u, 0x00003e58u, 0x00003e57u, 0x00070050u, 0x00000013u, 0x00003e59u, 0x00003e58u, 0x00003e58u, 0x00003e58u, 0x00003e58u, 0x0003003eu, 0x00003e39u, 0x00003e59u, 0x0003003eu, 0x00002cedu, 0x00003e59u, 0x000200f9u, 0x0000302cu, 0x000200f8u, 0x0000302cu, 0x000700f5u, 0x00000013u, 0x000088a7u, 0x00008859u, 0x00002fd9u, 0x00003e59u, 0x0000302du, 0x000700f5u, 0x00000013u, 0x000087afu, 0x0000875du, 0x00002fd9u, 0x00003e35u, 0x0000302du, 0x000300f7u, 0x0000303du, 0x00000000u, 0x000400fau, 0x00002e59u, 0x0000303eu, 0x0000303du, 0x000200f8u, 0x0000303eu, 0x00050050u, 0x000000efu, 0x00003041u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003042u, 0x00003041u, 0x0003003eu, 0x00006f46u, 0x00002caau, 0x0003003eu, 0x00006f47u, 0x00002cacu, 0x0003003eu, 0x00002d89u, 0x000021c0u, 0x0003003eu, 0x00002d8au, 0x00003042u, 0x00050041u, 0x00000007u, 0x00003e62u, 0x00002d8au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003e63u, 0x00003e62u, 0x00050084u, 0x00000006u, 0x00003e64u, 0x00002cacu, 0x00003e63u, 0x00050080u, 0x00000006u, 0x00003e65u, 0x00002caau, 0x00003e64u, 0x0003003eu, 0x00003e5au, 0x00003e65u, 0x00050041u, 0x00000007u, 0x00003e66u, 0x00002d8au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003e67u, 0x00003e66u, 0x00050080u, 0x00000006u, 0x00003e69u, 0x00003e65u, 0x00003e67u, 0x0003003eu, 0x00003e5au, 0x00003e69u, 0x000500c7u, 0x00000006u, 0x00003e6bu, 0x00003e69u, 0x00000e73u, 0x0003003eu, 0x00003e5au, 0x00003e6bu, 0x0003003eu, 0x00003e5bu, 0x00003e6bu, 0x0004003du, 0x00000006u, 0x00003e6eu, 0x00003e62u, 0x000500c7u, 0x00000006u, 0x00003e6fu, 0x00003e6eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003e70u, 0x00003e6fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003e72u, 0x00003e6bu, 0x00003e70u, 0x0003003eu, 0x00003e5bu, 0x00003e72u, 0x000500c6u, 0x00000006u, 0x00003e74u, 0x00003e72u, 0x00000464u, 0x0003003eu, 0x00003e5bu, 0x00003e74u, 0x00080041u, 0x00000671u, 0x00003e77u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003e74u, 0x0004003du, 0x0000000fu, 0x00003e78u, 0x00003e77u, 0x00040071u, 0x00000006u, 0x00003e79u, 0x00003e78u, 0x0003003eu, 0x00003e5cu, 0x00003e79u, 0x00040071u, 0x00000011u, 0x00003e7bu, 0x00003e79u, 0x0004007cu, 0x00000012u, 0x00003e7cu, 0x00003e7bu, 0x00070050u, 0x00000013u, 0x00003e7du, 0x00003e7cu, 0x00003e7cu, 0x00003e7cu, 0x00003e7cu, 0x0003003eu, 0x00003e5du, 0x00003e7du, 0x0003003eu, 0x00002cf5u, 0x00003e7du, 0x000200f9u, 0x0000303du, 0x000200f8u, 0x0000303du, 0x000700f5u, 0x00000013u, 0x00008923u, 0x000088d3u, 0x0000302cu, 0x00003e7du, 0x0000303eu, 0x000200f9u, 0x00002fd6u, 0x000200f8u, 0x00002fd8u, 0x0004007cu, 0x000000b0u, 0x00002ffbu, 0x000083d3u, 0x00040071u, 0x00000006u, 0x00002ffeu, 0x00002cb2u, 0x0003003eu, 0x00006f2au, 0x00002caau, 0x0003003eu, 0x00006f2bu, 0x00002cacu, 0x0003003eu, 0x00002d70u, 0x000021c0u, 0x0003003eu, 0x00002d71u, 0x00002ffbu, 0x0003003eu, 0x00002d72u, 0x00002ffeu, 0x00050041u, 0x00000007u, 0x00003d2bu, 0x00002d71u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003d2cu, 0x00003d2bu, 0x00050084u, 0x00000006u, 0x00003d2du, 0x00002cacu, 0x00003d2cu, 0x00050080u, 0x00000006u, 0x00003d2eu, 0x00002caau, 0x00003d2du, 0x0003003eu, 0x00003d22u, 0x00003d2eu, 0x00050041u, 0x00000007u, 0x00003d2fu, 0x00002d71u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d30u, 0x00003d2fu, 0x000500c2u, 0x00000006u, 0x00003d31u, 0x00003d30u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003d33u, 0x00003d2eu, 0x00003d31u, 0x0003003eu, 0x00003d22u, 0x00003d33u, 0x000500c7u, 0x00000006u, 0x00003d35u, 0x00003d33u, 0x00000e73u, 0x0003003eu, 0x00003d22u, 0x00003d35u, 0x0004003du, 0x00000006u, 0x00003d37u, 0x00003d2fu, 0x000400c8u, 0x00000006u, 0x00003d38u, 0x00003d37u, 0x000500c7u, 0x00000006u, 0x00003d39u, 0x00003d38u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003d3au, 0x00003d39u, 0x00000704u, 0x0003003eu, 0x00003d23u, 0x00003d3au, 0x0003003eu, 0x00003d24u, 0x00003d35u, 0x0004003du, 0x00000006u, 0x00003d3du, 0x00003d2bu, 0x000500c7u, 0x00000006u, 0x00003d3eu, 0x00003d3du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d3fu, 0x00003d3eu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003d41u, 0x00003d35u, 0x00003d3fu, 0x0003003eu, 0x00003d24u, 0x00003d41u, 0x000500c6u, 0x00000006u, 0x00003d43u, 0x00003d41u, 0x00000464u, 0x0003003eu, 0x00003d24u, 0x00003d43u, 0x00080041u, 0x00000671u, 0x00003d46u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003d43u, 0x0004003du, 0x0000000fu, 0x00003d47u, 0x00003d46u, 0x00040071u, 0x00000006u, 0x00003d48u, 0x00003d47u, 0x0003003eu, 0x00003d25u, 0x00003d48u, 0x000500c2u, 0x00000006u, 0x00003d4bu, 0x00003d48u, 0x00003d3au, 0x000500c7u, 0x00000006u, 0x00003d4cu, 0x00003d4bu, 0x00000e96u, 0x0003003eu, 0x00003d25u, 0x00003d4cu, 0x000500c4u, 0x00000006u, 0x00003d4eu, 0x00002ffeu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003d50u, 0x00003d4cu, 0x00003d4eu, 0x0003003eu, 0x00003d25u, 0x00003d50u, 0x00040071u, 0x00000011u, 0x00003d52u, 0x00003d50u, 0x0004007cu, 0x00000012u, 0x00003d53u, 0x00003d52u, 0x00070050u, 0x00000013u, 0x00003d54u, 0x00003d53u, 0x00003d53u, 0x00003d53u, 0x00003d53u, 0x0003003eu, 0x00003d26u, 0x00003d54u, 0x0003003eu, 0x00002cddu, 0x00003d54u, 0x000300f7u, 0x00003003u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00003004u, 0x00003003u, 0x000200f8u, 0x00003004u, 0x00050050u, 0x000000efu, 0x00003007u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00003008u, 0x00003007u, 0x0003003eu, 0x00006f2eu, 0x00002caau, 0x0003003eu, 0x00006f2fu, 0x00002cacu, 0x0003003eu, 0x00002d74u, 0x000021c0u, 0x0003003eu, 0x00002d75u, 0x00003008u, 0x0003003eu, 0x00002d76u, 0x00002ffeu, 0x00050041u, 0x00000007u, 0x00003d5eu, 0x00002d75u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003d5fu, 0x00003d5eu, 0x00050084u, 0x00000006u, 0x00003d60u, 0x00002cacu, 0x00003d5fu, 0x00050080u, 0x00000006u, 0x00003d61u, 0x00002caau, 0x00003d60u, 0x0003003eu, 0x00003d55u, 0x00003d61u, 0x00050041u, 0x00000007u, 0x00003d62u, 0x00002d75u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d63u, 0x00003d62u, 0x000500c2u, 0x00000006u, 0x00003d64u, 0x00003d63u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003d66u, 0x00003d61u, 0x00003d64u, 0x0003003eu, 0x00003d55u, 0x00003d66u, 0x000500c7u, 0x00000006u, 0x00003d68u, 0x00003d66u, 0x00000e73u, 0x0003003eu, 0x00003d55u, 0x00003d68u, 0x0004003du, 0x00000006u, 0x00003d6au, 0x00003d62u, 0x000400c8u, 0x00000006u, 0x00003d6bu, 0x00003d6au, 0x000500c7u, 0x00000006u, 0x00003d6cu, 0x00003d6bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003d6du, 0x00003d6cu, 0x00000704u, 0x0003003eu, 0x00003d56u, 0x00003d6du, 0x0003003eu, 0x00003d57u, 0x00003d68u, 0x0004003du, 0x00000006u, 0x00003d70u, 0x00003d5eu, 0x000500c7u, 0x00000006u, 0x00003d71u, 0x00003d70u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d72u, 0x00003d71u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003d74u, 0x00003d68u, 0x00003d72u, 0x0003003eu, 0x00003d57u, 0x00003d74u, 0x000500c6u, 0x00000006u, 0x00003d76u, 0x00003d74u, 0x00000464u, 0x0003003eu, 0x00003d57u, 0x00003d76u, 0x00080041u, 0x00000671u, 0x00003d79u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003d76u, 0x0004003du, 0x0000000fu, 0x00003d7au, 0x00003d79u, 0x00040071u, 0x00000006u, 0x00003d7bu, 0x00003d7au, 0x0003003eu, 0x00003d58u, 0x00003d7bu, 0x000500c2u, 0x00000006u, 0x00003d7eu, 0x00003d7bu, 0x00003d6du, 0x000500c7u, 0x00000006u, 0x00003d7fu, 0x00003d7eu, 0x00000e96u, 0x0003003eu, 0x00003d58u, 0x00003d7fu, 0x000500c5u, 0x00000006u, 0x00003d83u, 0x00003d7fu, 0x00003d4eu, 0x0003003eu, 0x00003d58u, 0x00003d83u, 0x00040071u, 0x00000011u, 0x00003d85u, 0x00003d83u, 0x0004007cu, 0x00000012u, 0x00003d86u, 0x00003d85u, 0x00070050u, 0x00000013u, 0x00003d87u, 0x00003d86u, 0x00003d86u, 0x00003d86u, 0x00003d86u, 0x0003003eu, 0x00003d59u, 0x00003d87u, 0x0003003eu, 0x00002ce5u, 0x00003d87u, 0x00050050u, 0x000000efu, 0x00003011u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00003012u, 0x00003011u, 0x0003003eu, 0x00006f32u, 0x00002caau, 0x0003003eu, 0x00006f33u, 0x00002cacu, 0x0003003eu, 0x00002d78u, 0x000021c0u, 0x0003003eu, 0x00002d79u, 0x00003012u, 0x0003003eu, 0x00002d7au, 0x00002ffeu, 0x00050041u, 0x00000007u, 0x00003d91u, 0x00002d79u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003d92u, 0x00003d91u, 0x00050084u, 0x00000006u, 0x00003d93u, 0x00002cacu, 0x00003d92u, 0x00050080u, 0x00000006u, 0x00003d94u, 0x00002caau, 0x00003d93u, 0x0003003eu, 0x00003d88u, 0x00003d94u, 0x00050041u, 0x00000007u, 0x00003d95u, 0x00002d79u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d96u, 0x00003d95u, 0x000500c2u, 0x00000006u, 0x00003d97u, 0x00003d96u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003d99u, 0x00003d94u, 0x00003d97u, 0x0003003eu, 0x00003d88u, 0x00003d99u, 0x000500c7u, 0x00000006u, 0x00003d9bu, 0x00003d99u, 0x00000e73u, 0x0003003eu, 0x00003d88u, 0x00003d9bu, 0x0004003du, 0x00000006u, 0x00003d9du, 0x00003d95u, 0x000400c8u, 0x00000006u, 0x00003d9eu, 0x00003d9du, 0x000500c7u, 0x00000006u, 0x00003d9fu, 0x00003d9eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003da0u, 0x00003d9fu, 0x00000704u, 0x0003003eu, 0x00003d89u, 0x00003da0u, 0x0003003eu, 0x00003d8au, 0x00003d9bu, 0x0004003du, 0x00000006u, 0x00003da3u, 0x00003d91u, 0x000500c7u, 0x00000006u, 0x00003da4u, 0x00003da3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003da5u, 0x00003da4u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003da7u, 0x00003d9bu, 0x00003da5u, 0x0003003eu, 0x00003d8au, 0x00003da7u, 0x000500c6u, 0x00000006u, 0x00003da9u, 0x00003da7u, 0x00000464u, 0x0003003eu, 0x00003d8au, 0x00003da9u, 0x00080041u, 0x00000671u, 0x00003dacu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003da9u, 0x0004003du, 0x0000000fu, 0x00003dadu, 0x00003dacu, 0x00040071u, 0x00000006u, 0x00003daeu, 0x00003dadu, 0x0003003eu, 0x00003d8bu, 0x00003daeu, 0x000500c2u, 0x00000006u, 0x00003db1u, 0x00003daeu, 0x00003da0u, 0x000500c7u, 0x00000006u, 0x00003db2u, 0x00003db1u, 0x00000e96u, 0x0003003eu, 0x00003d8bu, 0x00003db2u, 0x000500c5u, 0x00000006u, 0x00003db6u, 0x00003db2u, 0x00003d4eu, 0x0003003eu, 0x00003d8bu, 0x00003db6u, 0x00040071u, 0x00000011u, 0x00003db8u, 0x00003db6u, 0x0004007cu, 0x00000012u, 0x00003db9u, 0x00003db8u, 0x00070050u, 0x00000013u, 0x00003dbau, 0x00003db9u, 0x00003db9u, 0x00003db9u, 0x00003db9u, 0x0003003eu, 0x00003d8cu, 0x00003dbau, 0x0003003eu, 0x00002cedu, 0x00003dbau, 0x000200f9u, 0x00003003u, 0x000200f8u, 0x00003003u, 0x000700f5u, 0x00000013u, 0x000088a5u, 0x00008859u, 0x00002fd8u, 0x00003dbau, 0x00003004u, 0x000700f5u, 0x00000013u, 0x000087adu, 0x0000875du, 0x00002fd8u, 0x00003d87u, 0x00003004u, 0x000300f7u, 0x0000301au, 0x00000000u, 0x000400fau, 0x00002e59u, 0x0000301bu, 0x0000301au, 0x000200f8u, 0x0000301bu, 0x00050050u, 0x000000efu, 0x0000301eu, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x0000301fu, 0x0000301eu, 0x0003003eu, 0x00006f36u, 0x00002caau, 0x0003003eu, 0x00006f37u, 0x00002cacu, 0x0003003eu, 0x00002d7cu, 0x000021c0u, 0x0003003eu, 0x00002d7du, 0x0000301fu, 0x0003003eu, 0x00002d7eu, 0x00002ffeu, 0x00050041u, 0x00000007u, 0x00003dc4u, 0x00002d7du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003dc5u, 0x00003dc4u, 0x00050084u, 0x00000006u, 0x00003dc6u, 0x00002cacu, 0x00003dc5u, 0x00050080u, 0x00000006u, 0x00003dc7u, 0x00002caau, 0x00003dc6u, 0x0003003eu, 0x00003dbbu, 0x00003dc7u, 0x00050041u, 0x00000007u, 0x00003dc8u, 0x00002d7du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003dc9u, 0x00003dc8u, 0x000500c2u, 0x00000006u, 0x00003dcau, 0x00003dc9u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003dccu, 0x00003dc7u, 0x00003dcau, 0x0003003eu, 0x00003dbbu, 0x00003dccu, 0x000500c7u, 0x00000006u, 0x00003dceu, 0x00003dccu, 0x00000e73u, 0x0003003eu, 0x00003dbbu, 0x00003dceu, 0x0004003du, 0x00000006u, 0x00003dd0u, 0x00003dc8u, 0x000400c8u, 0x00000006u, 0x00003dd1u, 0x00003dd0u, 0x000500c7u, 0x00000006u, 0x00003dd2u, 0x00003dd1u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003dd3u, 0x00003dd2u, 0x00000704u, 0x0003003eu, 0x00003dbcu, 0x00003dd3u, 0x0003003eu, 0x00003dbdu, 0x00003dceu, 0x0004003du, 0x00000006u, 0x00003dd6u, 0x00003dc4u, 0x000500c7u, 0x00000006u, 0x00003dd7u, 0x00003dd6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003dd8u, 0x00003dd7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003ddau, 0x00003dceu, 0x00003dd8u, 0x0003003eu, 0x00003dbdu, 0x00003ddau, 0x000500c6u, 0x00000006u, 0x00003ddcu, 0x00003ddau, 0x00000464u, 0x0003003eu, 0x00003dbdu, 0x00003ddcu, 0x00080041u, 0x00000671u, 0x00003ddfu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003ddcu, 0x0004003du, 0x0000000fu, 0x00003de0u, 0x00003ddfu, 0x00040071u, 0x00000006u, 0x00003de1u, 0x00003de0u, 0x0003003eu, 0x00003dbeu, 0x00003de1u, 0x000500c2u, 0x00000006u, 0x00003de4u, 0x00003de1u, 0x00003dd3u, 0x000500c7u, 0x00000006u, 0x00003de5u, 0x00003de4u, 0x00000e96u, 0x0003003eu, 0x00003dbeu, 0x00003de5u, 0x000500c5u, 0x00000006u, 0x00003de9u, 0x00003de5u, 0x00003d4eu, 0x0003003eu, 0x00003dbeu, 0x00003de9u, 0x00040071u, 0x00000011u, 0x00003debu, 0x00003de9u, 0x0004007cu, 0x00000012u, 0x00003decu, 0x00003debu, 0x00070050u, 0x00000013u, 0x00003dedu, 0x00003decu, 0x00003decu, 0x00003decu, 0x00003decu, 0x0003003eu, 0x00003dbfu, 0x00003dedu, 0x0003003eu, 0x00002cf5u, 0x00003dedu, 0x000200f9u, 0x0000301au, 0x000200f8u, 0x0000301au, 0x000700f5u, 0x00000013u, 0x00008921u, 0x000088d3u, 0x00003003u, 0x00003dedu, 0x0000301bu, 0x000200f9u, 0x00002fd6u, 0x000200f8u, 0x00002fd7u, 0x0004007cu, 0x000000b0u, 0x00002fdbu, 0x000083d3u, 0x0003003eu, 0x00006f4au, 0x00002caau, 0x0003003eu, 0x00006f4bu, 0x00002cacu, 0x0003003eu, 0x00002d8cu, 0x000021c0u, 0x0003003eu, 0x00002d8du, 0x00002fdbu, 0x00050041u, 0x00000007u, 0x00003c7au, 0x00002d8du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003c7bu, 0x00003c7au, 0x00050084u, 0x00000006u, 0x00003c7cu, 0x00002cacu, 0x00003c7bu, 0x00050080u, 0x00000006u, 0x00003c7du, 0x00002caau, 0x00003c7cu, 0x0003003eu, 0x00003c72u, 0x00003c7du, 0x00050041u, 0x00000007u, 0x00003c7eu, 0x00002d8du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003c7fu, 0x00003c7eu, 0x00050084u, 0x00000006u, 0x00003c80u, 0x00003c7fu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003c82u, 0x00003c7du, 0x00003c80u, 0x0003003eu, 0x00003c72u, 0x00003c82u, 0x000500c7u, 0x00000006u, 0x00003c84u, 0x00003c82u, 0x00000e73u, 0x0003003eu, 0x00003c72u, 0x00003c84u, 0x000500c2u, 0x00000006u, 0x00003c86u, 0x00003c84u, 0x0000022au, 0x0003003eu, 0x00003c73u, 0x00003c86u, 0x0004003du, 0x00000006u, 0x00003c88u, 0x00003c7au, 0x000500c7u, 0x00000006u, 0x00003c89u, 0x00003c88u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003c8au, 0x00003c89u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003c8cu, 0x00003c86u, 0x00003c8au, 0x0003003eu, 0x00003c73u, 0x00003c8cu, 0x000500c6u, 0x00000006u, 0x00003c8eu, 0x00003c8cu, 0x0000045cu, 0x0003003eu, 0x00003c73u, 0x00003c8eu, 0x00080041u, 0x00000692u, 0x00003c91u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003c8eu, 0x0004003du, 0x00000011u, 0x00003c92u, 0x00003c91u, 0x00040071u, 0x00000006u, 0x00003c93u, 0x00003c92u, 0x0003003eu, 0x00003c74u, 0x00003c93u, 0x000500c2u, 0x00000006u, 0x00003c95u, 0x00003c93u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003c96u, 0x00003c95u, 0x0004007cu, 0x00000012u, 0x00003c97u, 0x00003c96u, 0x000500c7u, 0x00000006u, 0x00003c99u, 0x00003c93u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003c9au, 0x00003c99u, 0x0004007cu, 0x00000012u, 0x00003c9bu, 0x00003c9au, 0x00050050u, 0x000001aeu, 0x00003c9cu, 0x00003c97u, 0x00003c9bu, 0x0009004fu, 0x00000013u, 0x00003c9du, 0x00003c9cu, 0x00003c9cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003c75u, 0x00003c9du, 0x0003003eu, 0x00002cddu, 0x00003c9du, 0x000300f7u, 0x00002fe0u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002fe1u, 0x00002fe0u, 0x000200f8u, 0x00002fe1u, 0x00050050u, 0x000000efu, 0x00002fe4u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002fe5u, 0x00002fe4u, 0x0003003eu, 0x00006f4eu, 0x00002caau, 0x0003003eu, 0x00006f4fu, 0x00002cacu, 0x0003003eu, 0x00002d8fu, 0x000021c0u, 0x0003003eu, 0x00002d90u, 0x00002fe5u, 0x00050041u, 0x00000007u, 0x00003ca6u, 0x00002d90u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003ca7u, 0x00003ca6u, 0x00050084u, 0x00000006u, 0x00003ca8u, 0x00002cacu, 0x00003ca7u, 0x00050080u, 0x00000006u, 0x00003ca9u, 0x00002caau, 0x00003ca8u, 0x0003003eu, 0x00003c9eu, 0x00003ca9u, 0x00050041u, 0x00000007u, 0x00003caau, 0x00002d90u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003cabu, 0x00003caau, 0x00050084u, 0x00000006u, 0x00003cacu, 0x00003cabu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003caeu, 0x00003ca9u, 0x00003cacu, 0x0003003eu, 0x00003c9eu, 0x00003caeu, 0x000500c7u, 0x00000006u, 0x00003cb0u, 0x00003caeu, 0x00000e73u, 0x0003003eu, 0x00003c9eu, 0x00003cb0u, 0x000500c2u, 0x00000006u, 0x00003cb2u, 0x00003cb0u, 0x0000022au, 0x0003003eu, 0x00003c9fu, 0x00003cb2u, 0x0004003du, 0x00000006u, 0x00003cb4u, 0x00003ca6u, 0x000500c7u, 0x00000006u, 0x00003cb5u, 0x00003cb4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003cb6u, 0x00003cb5u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003cb8u, 0x00003cb2u, 0x00003cb6u, 0x0003003eu, 0x00003c9fu, 0x00003cb8u, 0x000500c6u, 0x00000006u, 0x00003cbau, 0x00003cb8u, 0x0000045cu, 0x0003003eu, 0x00003c9fu, 0x00003cbau, 0x00080041u, 0x00000692u, 0x00003cbdu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003cbau, 0x0004003du, 0x00000011u, 0x00003cbeu, 0x00003cbdu, 0x00040071u, 0x00000006u, 0x00003cbfu, 0x00003cbeu, 0x0003003eu, 0x00003ca0u, 0x00003cbfu, 0x000500c2u, 0x00000006u, 0x00003cc1u, 0x00003cbfu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003cc2u, 0x00003cc1u, 0x0004007cu, 0x00000012u, 0x00003cc3u, 0x00003cc2u, 0x000500c7u, 0x00000006u, 0x00003cc5u, 0x00003cbfu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003cc6u, 0x00003cc5u, 0x0004007cu, 0x00000012u, 0x00003cc7u, 0x00003cc6u, 0x00050050u, 0x000001aeu, 0x00003cc8u, 0x00003cc3u, 0x00003cc7u, 0x0009004fu, 0x00000013u, 0x00003cc9u, 0x00003cc8u, 0x00003cc8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003ca1u, 0x00003cc9u, 0x0003003eu, 0x00002ce5u, 0x00003cc9u, 0x00050050u, 0x000000efu, 0x00002febu, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002fecu, 0x00002febu, 0x0003003eu, 0x00006f52u, 0x00002caau, 0x0003003eu, 0x00006f53u, 0x00002cacu, 0x0003003eu, 0x00002d92u, 0x000021c0u, 0x0003003eu, 0x00002d93u, 0x00002fecu, 0x00050041u, 0x00000007u, 0x00003cd2u, 0x00002d93u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003cd3u, 0x00003cd2u, 0x00050084u, 0x00000006u, 0x00003cd4u, 0x00002cacu, 0x00003cd3u, 0x00050080u, 0x00000006u, 0x00003cd5u, 0x00002caau, 0x00003cd4u, 0x0003003eu, 0x00003ccau, 0x00003cd5u, 0x00050041u, 0x00000007u, 0x00003cd6u, 0x00002d93u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003cd7u, 0x00003cd6u, 0x00050084u, 0x00000006u, 0x00003cd8u, 0x00003cd7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003cdau, 0x00003cd5u, 0x00003cd8u, 0x0003003eu, 0x00003ccau, 0x00003cdau, 0x000500c7u, 0x00000006u, 0x00003cdcu, 0x00003cdau, 0x00000e73u, 0x0003003eu, 0x00003ccau, 0x00003cdcu, 0x000500c2u, 0x00000006u, 0x00003cdeu, 0x00003cdcu, 0x0000022au, 0x0003003eu, 0x00003ccbu, 0x00003cdeu, 0x0004003du, 0x00000006u, 0x00003ce0u, 0x00003cd2u, 0x000500c7u, 0x00000006u, 0x00003ce1u, 0x00003ce0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ce2u, 0x00003ce1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003ce4u, 0x00003cdeu, 0x00003ce2u, 0x0003003eu, 0x00003ccbu, 0x00003ce4u, 0x000500c6u, 0x00000006u, 0x00003ce6u, 0x00003ce4u, 0x0000045cu, 0x0003003eu, 0x00003ccbu, 0x00003ce6u, 0x00080041u, 0x00000692u, 0x00003ce9u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003ce6u, 0x0004003du, 0x00000011u, 0x00003ceau, 0x00003ce9u, 0x00040071u, 0x00000006u, 0x00003cebu, 0x00003ceau, 0x0003003eu, 0x00003cccu, 0x00003cebu, 0x000500c2u, 0x00000006u, 0x00003cedu, 0x00003cebu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003ceeu, 0x00003cedu, 0x0004007cu, 0x00000012u, 0x00003cefu, 0x00003ceeu, 0x000500c7u, 0x00000006u, 0x00003cf1u, 0x00003cebu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003cf2u, 0x00003cf1u, 0x0004007cu, 0x00000012u, 0x00003cf3u, 0x00003cf2u, 0x00050050u, 0x000001aeu, 0x00003cf4u, 0x00003cefu, 0x00003cf3u, 0x0009004fu, 0x00000013u, 0x00003cf5u, 0x00003cf4u, 0x00003cf4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003ccdu, 0x00003cf5u, 0x0003003eu, 0x00002cedu, 0x00003cf5u, 0x000200f9u, 0x00002fe0u, 0x000200f8u, 0x00002fe0u, 0x000700f5u, 0x00000013u, 0x000088a3u, 0x00008859u, 0x00002fd7u, 0x00003cf5u, 0x00002fe1u, 0x000700f5u, 0x00000013u, 0x000087abu, 0x0000875du, 0x00002fd7u, 0x00003cc9u, 0x00002fe1u, 0x000300f7u, 0x00002ff1u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002ff2u, 0x00002ff1u, 0x000200f8u, 0x00002ff2u, 0x00050050u, 0x000000efu, 0x00002ff5u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002ff6u, 0x00002ff5u, 0x0003003eu, 0x00006f56u, 0x00002caau, 0x0003003eu, 0x00006f57u, 0x00002cacu, 0x0003003eu, 0x00002d95u, 0x000021c0u, 0x0003003eu, 0x00002d96u, 0x00002ff6u, 0x00050041u, 0x00000007u, 0x00003cfeu, 0x00002d96u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003cffu, 0x00003cfeu, 0x00050084u, 0x00000006u, 0x00003d00u, 0x00002cacu, 0x00003cffu, 0x00050080u, 0x00000006u, 0x00003d01u, 0x00002caau, 0x00003d00u, 0x0003003eu, 0x00003cf6u, 0x00003d01u, 0x00050041u, 0x00000007u, 0x00003d02u, 0x00002d96u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003d03u, 0x00003d02u, 0x00050084u, 0x00000006u, 0x00003d04u, 0x00003d03u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003d06u, 0x00003d01u, 0x00003d04u, 0x0003003eu, 0x00003cf6u, 0x00003d06u, 0x000500c7u, 0x00000006u, 0x00003d08u, 0x00003d06u, 0x00000e73u, 0x0003003eu, 0x00003cf6u, 0x00003d08u, 0x000500c2u, 0x00000006u, 0x00003d0au, 0x00003d08u, 0x0000022au, 0x0003003eu, 0x00003cf7u, 0x00003d0au, 0x0004003du, 0x00000006u, 0x00003d0cu, 0x00003cfeu, 0x000500c7u, 0x00000006u, 0x00003d0du, 0x00003d0cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003d0eu, 0x00003d0du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003d10u, 0x00003d0au, 0x00003d0eu, 0x0003003eu, 0x00003cf7u, 0x00003d10u, 0x000500c6u, 0x00000006u, 0x00003d12u, 0x00003d10u, 0x0000045cu, 0x0003003eu, 0x00003cf7u, 0x00003d12u, 0x00080041u, 0x00000692u, 0x00003d15u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003d12u, 0x0004003du, 0x00000011u, 0x00003d16u, 0x00003d15u, 0x00040071u, 0x00000006u, 0x00003d17u, 0x00003d16u, 0x0003003eu, 0x00003cf8u, 0x00003d17u, 0x000500c2u, 0x00000006u, 0x00003d19u, 0x00003d17u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003d1au, 0x00003d19u, 0x0004007cu, 0x00000012u, 0x00003d1bu, 0x00003d1au, 0x000500c7u, 0x00000006u, 0x00003d1du, 0x00003d17u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003d1eu, 0x00003d1du, 0x0004007cu, 0x00000012u, 0x00003d1fu, 0x00003d1eu, 0x00050050u, 0x000001aeu, 0x00003d20u, 0x00003d1bu, 0x00003d1fu, 0x0009004fu, 0x00000013u, 0x00003d21u, 0x00003d20u, 0x00003d20u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003cf9u, 0x00003d21u, 0x0003003eu, 0x00002cf5u, 0x00003d21u, 0x000200f9u, 0x00002ff1u, 0x000200f8u, 0x00002ff1u, 0x000700f5u, 0x00000013u, 0x0000891fu, 0x000088d3u, 0x00002fe0u, 0x00003d21u, 0x00002ff2u, 0x000200f9u, 0x00002fd6u, 0x000200f8u, 0x00002fd6u, 0x000900f5u, 0x00000013u, 0x0000891eu, 0x0000891fu, 0x00002ff1u, 0x00008921u, 0x0000301au, 0x00008923u, 0x0000303du, 0x000900f5u, 0x00000013u, 0x000088a1u, 0x000088a3u, 0x00002ff1u, 0x000088a5u, 0x0000301au, 0x000088a7u, 0x0000303du, 0x000900f5u, 0x00000013u, 0x00008826u, 0x00003c9du, 0x00002ff1u, 0x00003d54u, 0x0000301au, 0x00003e11u, 0x0000303du, 0x000900f5u, 0x00000013u, 0x000087a9u, 0x000087abu, 0x00002ff1u, 0x000087adu, 0x0000301au, 0x000087afu, 0x0000303du, 0x000200f9u, 0x00002f16u, 0x000200f8u, 0x00002f18u, 0x000500c3u, 0x00000008u, 0x00002fa6u, 0x0000834au, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002fa7u, 0x00002fa6u, 0x0003003eu, 0x00002d5du, 0x00002fa7u, 0x00050082u, 0x00000008u, 0x00002fabu, 0x00008388u, 0x0000834au, 0x00050080u, 0x00000008u, 0x00002facu, 0x00008388u, 0x00002fabu, 0x000500c3u, 0x00000008u, 0x00002fadu, 0x00002facu, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002faeu, 0x00002fadu, 0x0003003eu, 0x00002d5eu, 0x00002faeu, 0x00050050u, 0x000000efu, 0x00002fb1u, 0x0000834au, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002fb2u, 0x00002fb1u, 0x0003003eu, 0x00006f1au, 0x00002caau, 0x0003003eu, 0x00006f1bu, 0x00002cacu, 0x0003003eu, 0x00002d60u, 0x000021c0u, 0x0003003eu, 0x00002d61u, 0x00002fb2u, 0x0003003eu, 0x00002d62u, 0x00002fa7u, 0x00050041u, 0x00000007u, 0x00003b3cu, 0x00002d61u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003b3du, 0x00003b3cu, 0x00050084u, 0x00000006u, 0x00003b3eu, 0x00002cacu, 0x00003b3du, 0x00050080u, 0x00000006u, 0x00003b3fu, 0x00002caau, 0x00003b3eu, 0x0003003eu, 0x00003b2eu, 0x00003b3fu, 0x00050041u, 0x00000007u, 0x00003b41u, 0x00002d61u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003b42u, 0x00003b41u, 0x00050080u, 0x00000006u, 0x00003b43u, 0x00003b3fu, 0x00003b42u, 0x0003003eu, 0x00003b2fu, 0x00003b43u, 0x000500c7u, 0x00000006u, 0x00003b45u, 0x00003b43u, 0x00000f2bu, 0x0003003eu, 0x00003b2fu, 0x00003b45u, 0x00050084u, 0x00000006u, 0x00003b48u, 0x00002fa7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003b49u, 0x00003b3fu, 0x00003b48u, 0x0003003eu, 0x00003b30u, 0x00003b49u, 0x000500c7u, 0x00000006u, 0x00003b4bu, 0x00003b49u, 0x00000f2bu, 0x0003003eu, 0x00003b30u, 0x00003b4bu, 0x0003003eu, 0x00003b31u, 0x00003b45u, 0x0004003du, 0x00000006u, 0x00003b4eu, 0x00003b3cu, 0x000500c7u, 0x00000006u, 0x00003b4fu, 0x00003b4eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b50u, 0x00003b4fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003b52u, 0x00003b45u, 0x00003b50u, 0x0003003eu, 0x00003b31u, 0x00003b52u, 0x000500c6u, 0x00000006u, 0x00003b54u, 0x00003b52u, 0x00000464u, 0x0003003eu, 0x00003b31u, 0x00003b54u, 0x000500c2u, 0x00000006u, 0x00003b56u, 0x00003b4bu, 0x0000022au, 0x0003003eu, 0x00003b32u, 0x00003b56u, 0x0004003du, 0x00000006u, 0x00003b58u, 0x00003b3cu, 0x000500c7u, 0x00000006u, 0x00003b59u, 0x00003b58u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b5au, 0x00003b59u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003b5cu, 0x00003b56u, 0x00003b5au, 0x0003003eu, 0x00003b32u, 0x00003b5cu, 0x000500c6u, 0x00000006u, 0x00003b5eu, 0x00003b5cu, 0x0000045cu, 0x0003003eu, 0x00003b32u, 0x00003b5eu, 0x000500c5u, 0x00000006u, 0x00003b61u, 0x00003b54u, 0x00000f54u, 0x00080041u, 0x00000671u, 0x00003b62u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003b61u, 0x0004003du, 0x0000000fu, 0x00003b63u, 0x00003b62u, 0x0003003eu, 0x00003b33u, 0x00003b63u, 0x00080041u, 0x00000692u, 0x00003b66u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003b5eu, 0x0004003du, 0x00000011u, 0x00003b67u, 0x00003b66u, 0x0003003eu, 0x00003b34u, 0x00003b67u, 0x000500c2u, 0x00000011u, 0x00003b69u, 0x00003b67u, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x00003b6au, 0x00003b69u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003b6bu, 0x00003b6au, 0x0003003eu, 0x00003b35u, 0x00003b6bu, 0x000500c2u, 0x00000011u, 0x00003b6du, 0x00003b67u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003b6eu, 0x00003b6du, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003b6fu, 0x00003b6eu, 0x0003003eu, 0x00003b36u, 0x00003b6fu, 0x00040071u, 0x00000011u, 0x00003b71u, 0x00003b6bu, 0x0004007cu, 0x00000012u, 0x00003b72u, 0x00003b71u, 0x00050082u, 0x00000012u, 0x00003b73u, 0x00003b72u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003b75u, 0x00003b6fu, 0x0004007cu, 0x00000012u, 0x00003b76u, 0x00003b75u, 0x00050082u, 0x00000012u, 0x00003b77u, 0x00003b76u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003b79u, 0x00003b63u, 0x0004007cu, 0x00000012u, 0x00003b7au, 0x00003b79u, 0x00070050u, 0x00000013u, 0x00003b7eu, 0x00003b73u, 0x00003b77u, 0x00003b7au, 0x00003b7au, 0x0003003eu, 0x00003b37u, 0x00003b7eu, 0x0003003eu, 0x00002cddu, 0x00003b7eu, 0x000300f7u, 0x00002fb8u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002fb9u, 0x00002fb8u, 0x000200f8u, 0x00002fb9u, 0x00050050u, 0x000000efu, 0x00002fbcu, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002fbdu, 0x00002fbcu, 0x0003003eu, 0x00006f1eu, 0x00002caau, 0x0003003eu, 0x00006f1fu, 0x00002cacu, 0x0003003eu, 0x00002d64u, 0x000021c0u, 0x0003003eu, 0x00002d65u, 0x00002fbdu, 0x0003003eu, 0x00002d66u, 0x00002faeu, 0x00050041u, 0x00000007u, 0x00003b8du, 0x00002d65u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003b8eu, 0x00003b8du, 0x00050084u, 0x00000006u, 0x00003b8fu, 0x00002cacu, 0x00003b8eu, 0x00050080u, 0x00000006u, 0x00003b90u, 0x00002caau, 0x00003b8fu, 0x0003003eu, 0x00003b7fu, 0x00003b90u, 0x00050041u, 0x00000007u, 0x00003b92u, 0x00002d65u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003b93u, 0x00003b92u, 0x00050080u, 0x00000006u, 0x00003b94u, 0x00003b90u, 0x00003b93u, 0x0003003eu, 0x00003b80u, 0x00003b94u, 0x000500c7u, 0x00000006u, 0x00003b96u, 0x00003b94u, 0x00000f2bu, 0x0003003eu, 0x00003b80u, 0x00003b96u, 0x00050084u, 0x00000006u, 0x00003b99u, 0x00002faeu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003b9au, 0x00003b90u, 0x00003b99u, 0x0003003eu, 0x00003b81u, 0x00003b9au, 0x000500c7u, 0x00000006u, 0x00003b9cu, 0x00003b9au, 0x00000f2bu, 0x0003003eu, 0x00003b81u, 0x00003b9cu, 0x0003003eu, 0x00003b82u, 0x00003b96u, 0x0004003du, 0x00000006u, 0x00003b9fu, 0x00003b8du, 0x000500c7u, 0x00000006u, 0x00003ba0u, 0x00003b9fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ba1u, 0x00003ba0u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003ba3u, 0x00003b96u, 0x00003ba1u, 0x0003003eu, 0x00003b82u, 0x00003ba3u, 0x000500c6u, 0x00000006u, 0x00003ba5u, 0x00003ba3u, 0x00000464u, 0x0003003eu, 0x00003b82u, 0x00003ba5u, 0x000500c2u, 0x00000006u, 0x00003ba7u, 0x00003b9cu, 0x0000022au, 0x0003003eu, 0x00003b83u, 0x00003ba7u, 0x0004003du, 0x00000006u, 0x00003ba9u, 0x00003b8du, 0x000500c7u, 0x00000006u, 0x00003baau, 0x00003ba9u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003babu, 0x00003baau, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003badu, 0x00003ba7u, 0x00003babu, 0x0003003eu, 0x00003b83u, 0x00003badu, 0x000500c6u, 0x00000006u, 0x00003bafu, 0x00003badu, 0x0000045cu, 0x0003003eu, 0x00003b83u, 0x00003bafu, 0x000500c5u, 0x00000006u, 0x00003bb2u, 0x00003ba5u, 0x00000f54u, 0x00080041u, 0x00000671u, 0x00003bb3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003bb2u, 0x0004003du, 0x0000000fu, 0x00003bb4u, 0x00003bb3u, 0x0003003eu, 0x00003b84u, 0x00003bb4u, 0x00080041u, 0x00000692u, 0x00003bb7u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003bafu, 0x0004003du, 0x00000011u, 0x00003bb8u, 0x00003bb7u, 0x0003003eu, 0x00003b85u, 0x00003bb8u, 0x000500c2u, 0x00000011u, 0x00003bbau, 0x00003bb8u, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x00003bbbu, 0x00003bbau, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003bbcu, 0x00003bbbu, 0x0003003eu, 0x00003b86u, 0x00003bbcu, 0x000500c2u, 0x00000011u, 0x00003bbeu, 0x00003bb8u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003bbfu, 0x00003bbeu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003bc0u, 0x00003bbfu, 0x0003003eu, 0x00003b87u, 0x00003bc0u, 0x00040071u, 0x00000011u, 0x00003bc2u, 0x00003bbcu, 0x0004007cu, 0x00000012u, 0x00003bc3u, 0x00003bc2u, 0x00050082u, 0x00000012u, 0x00003bc4u, 0x00003bc3u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003bc6u, 0x00003bc0u, 0x0004007cu, 0x00000012u, 0x00003bc7u, 0x00003bc6u, 0x00050082u, 0x00000012u, 0x00003bc8u, 0x00003bc7u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003bcau, 0x00003bb4u, 0x0004007cu, 0x00000012u, 0x00003bcbu, 0x00003bcau, 0x00070050u, 0x00000013u, 0x00003bcfu, 0x00003bc4u, 0x00003bc8u, 0x00003bcbu, 0x00003bcbu, 0x0003003eu, 0x00003b88u, 0x00003bcfu, 0x0003003eu, 0x00002ce5u, 0x00003bcfu, 0x00050050u, 0x000000efu, 0x00002fc4u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002fc5u, 0x00002fc4u, 0x0003003eu, 0x00006f22u, 0x00002caau, 0x0003003eu, 0x00006f23u, 0x00002cacu, 0x0003003eu, 0x00002d68u, 0x000021c0u, 0x0003003eu, 0x00002d69u, 0x00002fc5u, 0x0003003eu, 0x00002d6au, 0x00002fa7u, 0x00050041u, 0x00000007u, 0x00003bdeu, 0x00002d69u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003bdfu, 0x00003bdeu, 0x00050084u, 0x00000006u, 0x00003be0u, 0x00002cacu, 0x00003bdfu, 0x00050080u, 0x00000006u, 0x00003be1u, 0x00002caau, 0x00003be0u, 0x0003003eu, 0x00003bd0u, 0x00003be1u, 0x00050041u, 0x00000007u, 0x00003be3u, 0x00002d69u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003be4u, 0x00003be3u, 0x00050080u, 0x00000006u, 0x00003be5u, 0x00003be1u, 0x00003be4u, 0x0003003eu, 0x00003bd1u, 0x00003be5u, 0x000500c7u, 0x00000006u, 0x00003be7u, 0x00003be5u, 0x00000f2bu, 0x0003003eu, 0x00003bd1u, 0x00003be7u, 0x00050080u, 0x00000006u, 0x00003bebu, 0x00003be1u, 0x00003b48u, 0x0003003eu, 0x00003bd2u, 0x00003bebu, 0x000500c7u, 0x00000006u, 0x00003bedu, 0x00003bebu, 0x00000f2bu, 0x0003003eu, 0x00003bd2u, 0x00003bedu, 0x0003003eu, 0x00003bd3u, 0x00003be7u, 0x0004003du, 0x00000006u, 0x00003bf0u, 0x00003bdeu, 0x000500c7u, 0x00000006u, 0x00003bf1u, 0x00003bf0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003bf2u, 0x00003bf1u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003bf4u, 0x00003be7u, 0x00003bf2u, 0x0003003eu, 0x00003bd3u, 0x00003bf4u, 0x000500c6u, 0x00000006u, 0x00003bf6u, 0x00003bf4u, 0x00000464u, 0x0003003eu, 0x00003bd3u, 0x00003bf6u, 0x000500c2u, 0x00000006u, 0x00003bf8u, 0x00003bedu, 0x0000022au, 0x0003003eu, 0x00003bd4u, 0x00003bf8u, 0x0004003du, 0x00000006u, 0x00003bfau, 0x00003bdeu, 0x000500c7u, 0x00000006u, 0x00003bfbu, 0x00003bfau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003bfcu, 0x00003bfbu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003bfeu, 0x00003bf8u, 0x00003bfcu, 0x0003003eu, 0x00003bd4u, 0x00003bfeu, 0x000500c6u, 0x00000006u, 0x00003c00u, 0x00003bfeu, 0x0000045cu, 0x0003003eu, 0x00003bd4u, 0x00003c00u, 0x000500c5u, 0x00000006u, 0x00003c03u, 0x00003bf6u, 0x00000f54u, 0x00080041u, 0x00000671u, 0x00003c04u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003c03u, 0x0004003du, 0x0000000fu, 0x00003c05u, 0x00003c04u, 0x0003003eu, 0x00003bd5u, 0x00003c05u, 0x00080041u, 0x00000692u, 0x00003c08u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003c00u, 0x0004003du, 0x00000011u, 0x00003c09u, 0x00003c08u, 0x0003003eu, 0x00003bd6u, 0x00003c09u, 0x000500c2u, 0x00000011u, 0x00003c0bu, 0x00003c09u, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x00003c0cu, 0x00003c0bu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c0du, 0x00003c0cu, 0x0003003eu, 0x00003bd7u, 0x00003c0du, 0x000500c2u, 0x00000011u, 0x00003c0fu, 0x00003c09u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003c10u, 0x00003c0fu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c11u, 0x00003c10u, 0x0003003eu, 0x00003bd8u, 0x00003c11u, 0x00040071u, 0x00000011u, 0x00003c13u, 0x00003c0du, 0x0004007cu, 0x00000012u, 0x00003c14u, 0x00003c13u, 0x00050082u, 0x00000012u, 0x00003c15u, 0x00003c14u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003c17u, 0x00003c11u, 0x0004007cu, 0x00000012u, 0x00003c18u, 0x00003c17u, 0x00050082u, 0x00000012u, 0x00003c19u, 0x00003c18u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003c1bu, 0x00003c05u, 0x0004007cu, 0x00000012u, 0x00003c1cu, 0x00003c1bu, 0x00070050u, 0x00000013u, 0x00003c20u, 0x00003c15u, 0x00003c19u, 0x00003c1cu, 0x00003c1cu, 0x0003003eu, 0x00003bd9u, 0x00003c20u, 0x0003003eu, 0x00002cedu, 0x00003c20u, 0x00050050u, 0x000000efu, 0x00002fccu, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002fcdu, 0x00002fccu, 0x0003003eu, 0x00006f26u, 0x00002caau, 0x0003003eu, 0x00006f27u, 0x00002cacu, 0x0003003eu, 0x00002d6cu, 0x000021c0u, 0x0003003eu, 0x00002d6du, 0x00002fcdu, 0x0003003eu, 0x00002d6eu, 0x00002faeu, 0x00050041u, 0x00000007u, 0x00003c2fu, 0x00002d6du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003c30u, 0x00003c2fu, 0x00050084u, 0x00000006u, 0x00003c31u, 0x00002cacu, 0x00003c30u, 0x00050080u, 0x00000006u, 0x00003c32u, 0x00002caau, 0x00003c31u, 0x0003003eu, 0x00003c21u, 0x00003c32u, 0x00050041u, 0x00000007u, 0x00003c34u, 0x00002d6du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003c35u, 0x00003c34u, 0x00050080u, 0x00000006u, 0x00003c36u, 0x00003c32u, 0x00003c35u, 0x0003003eu, 0x00003c22u, 0x00003c36u, 0x000500c7u, 0x00000006u, 0x00003c38u, 0x00003c36u, 0x00000f2bu, 0x0003003eu, 0x00003c22u, 0x00003c38u, 0x00050080u, 0x00000006u, 0x00003c3cu, 0x00003c32u, 0x00003b99u, 0x0003003eu, 0x00003c23u, 0x00003c3cu, 0x000500c7u, 0x00000006u, 0x00003c3eu, 0x00003c3cu, 0x00000f2bu, 0x0003003eu, 0x00003c23u, 0x00003c3eu, 0x0003003eu, 0x00003c24u, 0x00003c38u, 0x0004003du, 0x00000006u, 0x00003c41u, 0x00003c2fu, 0x000500c7u, 0x00000006u, 0x00003c42u, 0x00003c41u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003c43u, 0x00003c42u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003c45u, 0x00003c38u, 0x00003c43u, 0x0003003eu, 0x00003c24u, 0x00003c45u, 0x000500c6u, 0x00000006u, 0x00003c47u, 0x00003c45u, 0x00000464u, 0x0003003eu, 0x00003c24u, 0x00003c47u, 0x000500c2u, 0x00000006u, 0x00003c49u, 0x00003c3eu, 0x0000022au, 0x0003003eu, 0x00003c25u, 0x00003c49u, 0x0004003du, 0x00000006u, 0x00003c4bu, 0x00003c2fu, 0x000500c7u, 0x00000006u, 0x00003c4cu, 0x00003c4bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003c4du, 0x00003c4cu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003c4fu, 0x00003c49u, 0x00003c4du, 0x0003003eu, 0x00003c25u, 0x00003c4fu, 0x000500c6u, 0x00000006u, 0x00003c51u, 0x00003c4fu, 0x0000045cu, 0x0003003eu, 0x00003c25u, 0x00003c51u, 0x000500c5u, 0x00000006u, 0x00003c54u, 0x00003c47u, 0x00000f54u, 0x00080041u, 0x00000671u, 0x00003c55u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003c54u, 0x0004003du, 0x0000000fu, 0x00003c56u, 0x00003c55u, 0x0003003eu, 0x00003c26u, 0x00003c56u, 0x00080041u, 0x00000692u, 0x00003c59u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003c51u, 0x0004003du, 0x00000011u, 0x00003c5au, 0x00003c59u, 0x0003003eu, 0x00003c27u, 0x00003c5au, 0x000500c2u, 0x00000011u, 0x00003c5cu, 0x00003c5au, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x00003c5du, 0x00003c5cu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c5eu, 0x00003c5du, 0x0003003eu, 0x00003c28u, 0x00003c5eu, 0x000500c2u, 0x00000011u, 0x00003c60u, 0x00003c5au, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00003c61u, 0x00003c60u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00003c62u, 0x00003c61u, 0x0003003eu, 0x00003c29u, 0x00003c62u, 0x00040071u, 0x00000011u, 0x00003c64u, 0x00003c5eu, 0x0004007cu, 0x00000012u, 0x00003c65u, 0x00003c64u, 0x00050082u, 0x00000012u, 0x00003c66u, 0x00003c65u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003c68u, 0x00003c62u, 0x0004007cu, 0x00000012u, 0x00003c69u, 0x00003c68u, 0x00050082u, 0x00000012u, 0x00003c6au, 0x00003c69u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00003c6cu, 0x00003c56u, 0x0004007cu, 0x00000012u, 0x00003c6du, 0x00003c6cu, 0x00070050u, 0x00000013u, 0x00003c71u, 0x00003c66u, 0x00003c6au, 0x00003c6du, 0x00003c6du, 0x0003003eu, 0x00003c2au, 0x00003c71u, 0x0003003eu, 0x00002cf5u, 0x00003c71u, 0x000200f9u, 0x00002fb8u, 0x000200f8u, 0x00002fb8u, 0x000700f5u, 0x00000013u, 0x0000891du, 0x000088d3u, 0x00002f18u, 0x00003c71u, 0x00002fb9u, 0x000700f5u, 0x00000013u, 0x000088a0u, 0x00008859u, 0x00002f18u, 0x00003c20u, 0x00002fb9u, 0x000700f5u, 0x00000013u, 0x000087a8u, 0x0000875du, 0x00002f18u, 0x00003bcfu, 0x00002fb9u, 0x000200f9u, 0x00002f16u, 0x000200f8u, 0x00002f17u, 0x00040071u, 0x00000006u, 0x00002f1eu, 0x00002cb0u, 0x0004007cu, 0x00000008u, 0x00002f1fu, 0x00002f1eu, 0x000300f7u, 0x00002f20u, 0x00000000u, 0x000b00fbu, 0x00002f1fu, 0x00002f20u, 0x00000000u, 0x00002f21u, 0x00000001u, 0x00002f22u, 0x00000002u, 0x00002f23u, 0x00000003u, 0x00002f24u, 0x000200f8u, 0x00002f24u, 0x0004007cu, 0x000000b0u, 0x00002f86u, 0x000083d3u, 0x0003003eu, 0x00006f0au, 0x00002caau, 0x0003003eu, 0x00006f0bu, 0x00002cacu, 0x0003003eu, 0x00002d52u, 0x000021c0u, 0x0003003eu, 0x00002d53u, 0x00002f86u, 0x00050041u, 0x00000007u, 0x00003a4fu, 0x00002d53u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003a50u, 0x00003a4fu, 0x00050084u, 0x00000006u, 0x00003a51u, 0x00002cacu, 0x00003a50u, 0x00050080u, 0x00000006u, 0x00003a52u, 0x00002caau, 0x00003a51u, 0x0003003eu, 0x00003a46u, 0x00003a52u, 0x00050041u, 0x00000007u, 0x00003a53u, 0x00002d53u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003a54u, 0x00003a53u, 0x00050084u, 0x00000006u, 0x00003a55u, 0x00003a54u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003a57u, 0x00003a52u, 0x00003a55u, 0x0003003eu, 0x00003a46u, 0x00003a57u, 0x000500c7u, 0x00000006u, 0x00003a59u, 0x00003a57u, 0x00000f2bu, 0x0003003eu, 0x00003a46u, 0x00003a59u, 0x000500c2u, 0x00000006u, 0x00003a5bu, 0x00003a59u, 0x0000022au, 0x0003003eu, 0x00003a47u, 0x00003a5bu, 0x0004003du, 0x00000006u, 0x00003a5du, 0x00003a4fu, 0x000500c7u, 0x00000006u, 0x00003a5eu, 0x00003a5du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003a5fu, 0x00003a5eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003a61u, 0x00003a5bu, 0x00003a5fu, 0x0003003eu, 0x00003a47u, 0x00003a61u, 0x000500c6u, 0x00000006u, 0x00003a63u, 0x00003a61u, 0x0000045cu, 0x0003003eu, 0x00003a47u, 0x00003a63u, 0x00080041u, 0x00000692u, 0x00003a66u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003a63u, 0x0004003du, 0x00000011u, 0x00003a67u, 0x00003a66u, 0x00040071u, 0x00000006u, 0x00003a68u, 0x00003a67u, 0x0003003eu, 0x00003a48u, 0x00003a68u, 0x000500c5u, 0x00000006u, 0x00003a6bu, 0x00003a63u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x00003a6cu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003a6bu, 0x0004003du, 0x00000011u, 0x00003a6du, 0x00003a6cu, 0x00040071u, 0x00000006u, 0x00003a6eu, 0x00003a6du, 0x0003003eu, 0x00003a49u, 0x00003a6eu, 0x000500c2u, 0x00000006u, 0x00003a70u, 0x00003a68u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003a71u, 0x00003a70u, 0x0004007cu, 0x00000012u, 0x00003a72u, 0x00003a71u, 0x000500c7u, 0x00000006u, 0x00003a74u, 0x00003a68u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003a75u, 0x00003a74u, 0x0004007cu, 0x00000012u, 0x00003a76u, 0x00003a75u, 0x000500c2u, 0x00000006u, 0x00003a78u, 0x00003a6eu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003a79u, 0x00003a78u, 0x0004007cu, 0x00000012u, 0x00003a7au, 0x00003a79u, 0x000500c7u, 0x00000006u, 0x00003a7cu, 0x00003a6eu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003a7du, 0x00003a7cu, 0x0004007cu, 0x00000012u, 0x00003a7eu, 0x00003a7du, 0x00070050u, 0x00000013u, 0x00003a7fu, 0x00003a72u, 0x00003a76u, 0x00003a7au, 0x00003a7eu, 0x0003003eu, 0x00003a4au, 0x00003a7fu, 0x0003003eu, 0x00002cddu, 0x00003a7fu, 0x000300f7u, 0x00002f8bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002f8cu, 0x00002f8bu, 0x000200f8u, 0x00002f8cu, 0x00050050u, 0x000000efu, 0x00002f8fu, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002f90u, 0x00002f8fu, 0x0003003eu, 0x00006f0eu, 0x00002caau, 0x0003003eu, 0x00006f0fu, 0x00002cacu, 0x0003003eu, 0x00002d55u, 0x000021c0u, 0x0003003eu, 0x00002d56u, 0x00002f90u, 0x00050041u, 0x00000007u, 0x00003a89u, 0x00002d56u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003a8au, 0x00003a89u, 0x00050084u, 0x00000006u, 0x00003a8bu, 0x00002cacu, 0x00003a8au, 0x00050080u, 0x00000006u, 0x00003a8cu, 0x00002caau, 0x00003a8bu, 0x0003003eu, 0x00003a80u, 0x00003a8cu, 0x00050041u, 0x00000007u, 0x00003a8du, 0x00002d56u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003a8eu, 0x00003a8du, 0x00050084u, 0x00000006u, 0x00003a8fu, 0x00003a8eu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003a91u, 0x00003a8cu, 0x00003a8fu, 0x0003003eu, 0x00003a80u, 0x00003a91u, 0x000500c7u, 0x00000006u, 0x00003a93u, 0x00003a91u, 0x00000f2bu, 0x0003003eu, 0x00003a80u, 0x00003a93u, 0x000500c2u, 0x00000006u, 0x00003a95u, 0x00003a93u, 0x0000022au, 0x0003003eu, 0x00003a81u, 0x00003a95u, 0x0004003du, 0x00000006u, 0x00003a97u, 0x00003a89u, 0x000500c7u, 0x00000006u, 0x00003a98u, 0x00003a97u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003a99u, 0x00003a98u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003a9bu, 0x00003a95u, 0x00003a99u, 0x0003003eu, 0x00003a81u, 0x00003a9bu, 0x000500c6u, 0x00000006u, 0x00003a9du, 0x00003a9bu, 0x0000045cu, 0x0003003eu, 0x00003a81u, 0x00003a9du, 0x00080041u, 0x00000692u, 0x00003aa0u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003a9du, 0x0004003du, 0x00000011u, 0x00003aa1u, 0x00003aa0u, 0x00040071u, 0x00000006u, 0x00003aa2u, 0x00003aa1u, 0x0003003eu, 0x00003a82u, 0x00003aa2u, 0x000500c5u, 0x00000006u, 0x00003aa5u, 0x00003a9du, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x00003aa6u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003aa5u, 0x0004003du, 0x00000011u, 0x00003aa7u, 0x00003aa6u, 0x00040071u, 0x00000006u, 0x00003aa8u, 0x00003aa7u, 0x0003003eu, 0x00003a83u, 0x00003aa8u, 0x000500c2u, 0x00000006u, 0x00003aaau, 0x00003aa2u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003aabu, 0x00003aaau, 0x0004007cu, 0x00000012u, 0x00003aacu, 0x00003aabu, 0x000500c7u, 0x00000006u, 0x00003aaeu, 0x00003aa2u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003aafu, 0x00003aaeu, 0x0004007cu, 0x00000012u, 0x00003ab0u, 0x00003aafu, 0x000500c2u, 0x00000006u, 0x00003ab2u, 0x00003aa8u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003ab3u, 0x00003ab2u, 0x0004007cu, 0x00000012u, 0x00003ab4u, 0x00003ab3u, 0x000500c7u, 0x00000006u, 0x00003ab6u, 0x00003aa8u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003ab7u, 0x00003ab6u, 0x0004007cu, 0x00000012u, 0x00003ab8u, 0x00003ab7u, 0x00070050u, 0x00000013u, 0x00003ab9u, 0x00003aacu, 0x00003ab0u, 0x00003ab4u, 0x00003ab8u, 0x0003003eu, 0x00003a84u, 0x00003ab9u, 0x0003003eu, 0x00002ce5u, 0x00003ab9u, 0x00050050u, 0x000000efu, 0x00002f96u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f97u, 0x00002f96u, 0x0003003eu, 0x00006f12u, 0x00002caau, 0x0003003eu, 0x00006f13u, 0x00002cacu, 0x0003003eu, 0x00002d58u, 0x000021c0u, 0x0003003eu, 0x00002d59u, 0x00002f97u, 0x00050041u, 0x00000007u, 0x00003ac3u, 0x00002d59u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003ac4u, 0x00003ac3u, 0x00050084u, 0x00000006u, 0x00003ac5u, 0x00002cacu, 0x00003ac4u, 0x00050080u, 0x00000006u, 0x00003ac6u, 0x00002caau, 0x00003ac5u, 0x0003003eu, 0x00003abau, 0x00003ac6u, 0x00050041u, 0x00000007u, 0x00003ac7u, 0x00002d59u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003ac8u, 0x00003ac7u, 0x00050084u, 0x00000006u, 0x00003ac9u, 0x00003ac8u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003acbu, 0x00003ac6u, 0x00003ac9u, 0x0003003eu, 0x00003abau, 0x00003acbu, 0x000500c7u, 0x00000006u, 0x00003acdu, 0x00003acbu, 0x00000f2bu, 0x0003003eu, 0x00003abau, 0x00003acdu, 0x000500c2u, 0x00000006u, 0x00003acfu, 0x00003acdu, 0x0000022au, 0x0003003eu, 0x00003abbu, 0x00003acfu, 0x0004003du, 0x00000006u, 0x00003ad1u, 0x00003ac3u, 0x000500c7u, 0x00000006u, 0x00003ad2u, 0x00003ad1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003ad3u, 0x00003ad2u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003ad5u, 0x00003acfu, 0x00003ad3u, 0x0003003eu, 0x00003abbu, 0x00003ad5u, 0x000500c6u, 0x00000006u, 0x00003ad7u, 0x00003ad5u, 0x0000045cu, 0x0003003eu, 0x00003abbu, 0x00003ad7u, 0x00080041u, 0x00000692u, 0x00003adau, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003ad7u, 0x0004003du, 0x00000011u, 0x00003adbu, 0x00003adau, 0x00040071u, 0x00000006u, 0x00003adcu, 0x00003adbu, 0x0003003eu, 0x00003abcu, 0x00003adcu, 0x000500c5u, 0x00000006u, 0x00003adfu, 0x00003ad7u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x00003ae0u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003adfu, 0x0004003du, 0x00000011u, 0x00003ae1u, 0x00003ae0u, 0x00040071u, 0x00000006u, 0x00003ae2u, 0x00003ae1u, 0x0003003eu, 0x00003abdu, 0x00003ae2u, 0x000500c2u, 0x00000006u, 0x00003ae4u, 0x00003adcu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003ae5u, 0x00003ae4u, 0x0004007cu, 0x00000012u, 0x00003ae6u, 0x00003ae5u, 0x000500c7u, 0x00000006u, 0x00003ae8u, 0x00003adcu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003ae9u, 0x00003ae8u, 0x0004007cu, 0x00000012u, 0x00003aeau, 0x00003ae9u, 0x000500c2u, 0x00000006u, 0x00003aecu, 0x00003ae2u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003aedu, 0x00003aecu, 0x0004007cu, 0x00000012u, 0x00003aeeu, 0x00003aedu, 0x000500c7u, 0x00000006u, 0x00003af0u, 0x00003ae2u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003af1u, 0x00003af0u, 0x0004007cu, 0x00000012u, 0x00003af2u, 0x00003af1u, 0x00070050u, 0x00000013u, 0x00003af3u, 0x00003ae6u, 0x00003aeau, 0x00003aeeu, 0x00003af2u, 0x0003003eu, 0x00003abeu, 0x00003af3u, 0x0003003eu, 0x00002cedu, 0x00003af3u, 0x000200f9u, 0x00002f8bu, 0x000200f8u, 0x00002f8bu, 0x000700f5u, 0x00000013u, 0x0000889fu, 0x00008859u, 0x00002f24u, 0x00003af3u, 0x00002f8cu, 0x000700f5u, 0x00000013u, 0x000087a7u, 0x0000875du, 0x00002f24u, 0x00003ab9u, 0x00002f8cu, 0x000300f7u, 0x00002f9cu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002f9du, 0x00002f9cu, 0x000200f8u, 0x00002f9du, 0x00050050u, 0x000000efu, 0x00002fa0u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002fa1u, 0x00002fa0u, 0x0003003eu, 0x00006f16u, 0x00002caau, 0x0003003eu, 0x00006f17u, 0x00002cacu, 0x0003003eu, 0x00002d5bu, 0x000021c0u, 0x0003003eu, 0x00002d5cu, 0x00002fa1u, 0x00050041u, 0x00000007u, 0x00003afdu, 0x00002d5cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003afeu, 0x00003afdu, 0x00050084u, 0x00000006u, 0x00003affu, 0x00002cacu, 0x00003afeu, 0x00050080u, 0x00000006u, 0x00003b00u, 0x00002caau, 0x00003affu, 0x0003003eu, 0x00003af4u, 0x00003b00u, 0x00050041u, 0x00000007u, 0x00003b01u, 0x00002d5cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003b02u, 0x00003b01u, 0x00050084u, 0x00000006u, 0x00003b03u, 0x00003b02u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003b05u, 0x00003b00u, 0x00003b03u, 0x0003003eu, 0x00003af4u, 0x00003b05u, 0x000500c7u, 0x00000006u, 0x00003b07u, 0x00003b05u, 0x00000f2bu, 0x0003003eu, 0x00003af4u, 0x00003b07u, 0x000500c2u, 0x00000006u, 0x00003b09u, 0x00003b07u, 0x0000022au, 0x0003003eu, 0x00003af5u, 0x00003b09u, 0x0004003du, 0x00000006u, 0x00003b0bu, 0x00003afdu, 0x000500c7u, 0x00000006u, 0x00003b0cu, 0x00003b0bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003b0du, 0x00003b0cu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003b0fu, 0x00003b09u, 0x00003b0du, 0x0003003eu, 0x00003af5u, 0x00003b0fu, 0x000500c6u, 0x00000006u, 0x00003b11u, 0x00003b0fu, 0x0000045cu, 0x0003003eu, 0x00003af5u, 0x00003b11u, 0x00080041u, 0x00000692u, 0x00003b14u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003b11u, 0x0004003du, 0x00000011u, 0x00003b15u, 0x00003b14u, 0x00040071u, 0x00000006u, 0x00003b16u, 0x00003b15u, 0x0003003eu, 0x00003af6u, 0x00003b16u, 0x000500c5u, 0x00000006u, 0x00003b19u, 0x00003b11u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x00003b1au, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003b19u, 0x0004003du, 0x00000011u, 0x00003b1bu, 0x00003b1au, 0x00040071u, 0x00000006u, 0x00003b1cu, 0x00003b1bu, 0x0003003eu, 0x00003af7u, 0x00003b1cu, 0x000500c2u, 0x00000006u, 0x00003b1eu, 0x00003b16u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003b1fu, 0x00003b1eu, 0x0004007cu, 0x00000012u, 0x00003b20u, 0x00003b1fu, 0x000500c7u, 0x00000006u, 0x00003b22u, 0x00003b16u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003b23u, 0x00003b22u, 0x0004007cu, 0x00000012u, 0x00003b24u, 0x00003b23u, 0x000500c2u, 0x00000006u, 0x00003b26u, 0x00003b1cu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00003b27u, 0x00003b26u, 0x0004007cu, 0x00000012u, 0x00003b28u, 0x00003b27u, 0x000500c7u, 0x00000006u, 0x00003b2au, 0x00003b1cu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00003b2bu, 0x00003b2au, 0x0004007cu, 0x00000012u, 0x00003b2cu, 0x00003b2bu, 0x00070050u, 0x00000013u, 0x00003b2du, 0x00003b20u, 0x00003b24u, 0x00003b28u, 0x00003b2cu, 0x0003003eu, 0x00003af8u, 0x00003b2du, 0x0003003eu, 0x00002cf5u, 0x00003b2du, 0x000200f9u, 0x00002f9cu, 0x000200f8u, 0x00002f9cu, 0x000700f5u, 0x00000013u, 0x0000891bu, 0x000088d3u, 0x00002f8bu, 0x00003b2du, 0x00002f9du, 0x000200f9u, 0x00002f20u, 0x000200f8u, 0x00002f23u, 0x0004007cu, 0x000000b0u, 0x00002f66u, 0x000083d3u, 0x0003003eu, 0x00006efau, 0x00002caau, 0x0003003eu, 0x00006efbu, 0x00002cacu, 0x0003003eu, 0x00002d46u, 0x000021c0u, 0x0003003eu, 0x00002d47u, 0x00002f66u, 0x00050041u, 0x00000007u, 0x0000394bu, 0x00002d47u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000394cu, 0x0000394bu, 0x00050084u, 0x00000006u, 0x0000394du, 0x00002cacu, 0x0000394cu, 0x00050080u, 0x00000006u, 0x0000394eu, 0x00002caau, 0x0000394du, 0x0003003eu, 0x00003942u, 0x0000394eu, 0x00050041u, 0x00000007u, 0x0000394fu, 0x00002d47u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003950u, 0x0000394fu, 0x00050084u, 0x00000006u, 0x00003951u, 0x00003950u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003953u, 0x0000394eu, 0x00003951u, 0x0003003eu, 0x00003942u, 0x00003953u, 0x000500c7u, 0x00000006u, 0x00003955u, 0x00003953u, 0x00000e73u, 0x0003003eu, 0x00003942u, 0x00003955u, 0x000500c2u, 0x00000006u, 0x00003957u, 0x00003955u, 0x0000022au, 0x0003003eu, 0x00003943u, 0x00003957u, 0x0004003du, 0x00000006u, 0x00003959u, 0x0000394bu, 0x000500c7u, 0x00000006u, 0x0000395au, 0x00003959u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000395bu, 0x0000395au, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000395du, 0x00003957u, 0x0000395bu, 0x0003003eu, 0x00003943u, 0x0000395du, 0x000500c6u, 0x00000006u, 0x0000395fu, 0x0000395du, 0x0000045cu, 0x0003003eu, 0x00003943u, 0x0000395fu, 0x00080041u, 0x00000692u, 0x00003962u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000395fu, 0x0004003du, 0x00000011u, 0x00003963u, 0x00003962u, 0x00040071u, 0x00000006u, 0x00003964u, 0x00003963u, 0x0003003eu, 0x00003944u, 0x00003964u, 0x0003003eu, 0x00003945u, 0x00003964u, 0x00060050u, 0x0000030cu, 0x0000396bu, 0x00003964u, 0x00003964u, 0x00003964u, 0x000500c2u, 0x0000030cu, 0x0000396cu, 0x0000396bu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x0000396eu, 0x0000396cu, 0x0000f3a8u, 0x0003003eu, 0x00003967u, 0x0000396eu, 0x000500c4u, 0x0000030cu, 0x00003971u, 0x0000396eu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00003974u, 0x0000396eu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00003975u, 0x00003971u, 0x00003974u, 0x0003003eu, 0x00003967u, 0x00003975u, 0x000500c7u, 0x00000006u, 0x00003977u, 0x00003964u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003978u, 0x00003977u, 0x000006c3u, 0x0003003eu, 0x00003968u, 0x00003978u, 0x00040071u, 0x000004bau, 0x0000397au, 0x00003975u, 0x0004007cu, 0x000004b6u, 0x0000397bu, 0x0000397au, 0x00040071u, 0x00000011u, 0x0000397du, 0x00003978u, 0x0004007cu, 0x00000012u, 0x0000397eu, 0x0000397du, 0x00050051u, 0x00000012u, 0x0000397fu, 0x0000397bu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003980u, 0x0000397bu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003981u, 0x0000397bu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003982u, 0x0000397fu, 0x00003980u, 0x00003981u, 0x0000397eu, 0x0003003eu, 0x00003969u, 0x00003982u, 0x0003003eu, 0x00003946u, 0x00003982u, 0x0003003eu, 0x00002cddu, 0x00003982u, 0x000300f7u, 0x00002f6bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002f6cu, 0x00002f6bu, 0x000200f8u, 0x00002f6cu, 0x00050050u, 0x000000efu, 0x00002f6fu, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002f70u, 0x00002f6fu, 0x0003003eu, 0x00006efeu, 0x00002caau, 0x0003003eu, 0x00006effu, 0x00002cacu, 0x0003003eu, 0x00002d49u, 0x000021c0u, 0x0003003eu, 0x00002d4au, 0x00002f70u, 0x00050041u, 0x00000007u, 0x0000398cu, 0x00002d4au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000398du, 0x0000398cu, 0x00050084u, 0x00000006u, 0x0000398eu, 0x00002cacu, 0x0000398du, 0x00050080u, 0x00000006u, 0x0000398fu, 0x00002caau, 0x0000398eu, 0x0003003eu, 0x00003983u, 0x0000398fu, 0x00050041u, 0x00000007u, 0x00003990u, 0x00002d4au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003991u, 0x00003990u, 0x00050084u, 0x00000006u, 0x00003992u, 0x00003991u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003994u, 0x0000398fu, 0x00003992u, 0x0003003eu, 0x00003983u, 0x00003994u, 0x000500c7u, 0x00000006u, 0x00003996u, 0x00003994u, 0x00000e73u, 0x0003003eu, 0x00003983u, 0x00003996u, 0x000500c2u, 0x00000006u, 0x00003998u, 0x00003996u, 0x0000022au, 0x0003003eu, 0x00003984u, 0x00003998u, 0x0004003du, 0x00000006u, 0x0000399au, 0x0000398cu, 0x000500c7u, 0x00000006u, 0x0000399bu, 0x0000399au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000399cu, 0x0000399bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000399eu, 0x00003998u, 0x0000399cu, 0x0003003eu, 0x00003984u, 0x0000399eu, 0x000500c6u, 0x00000006u, 0x000039a0u, 0x0000399eu, 0x0000045cu, 0x0003003eu, 0x00003984u, 0x000039a0u, 0x00080041u, 0x00000692u, 0x000039a3u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000039a0u, 0x0004003du, 0x00000011u, 0x000039a4u, 0x000039a3u, 0x00040071u, 0x00000006u, 0x000039a5u, 0x000039a4u, 0x0003003eu, 0x00003985u, 0x000039a5u, 0x0003003eu, 0x00003986u, 0x000039a5u, 0x00060050u, 0x0000030cu, 0x000039acu, 0x000039a5u, 0x000039a5u, 0x000039a5u, 0x000500c2u, 0x0000030cu, 0x000039adu, 0x000039acu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000039afu, 0x000039adu, 0x0000f3a8u, 0x0003003eu, 0x000039a8u, 0x000039afu, 0x000500c4u, 0x0000030cu, 0x000039b2u, 0x000039afu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000039b5u, 0x000039afu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000039b6u, 0x000039b2u, 0x000039b5u, 0x0003003eu, 0x000039a8u, 0x000039b6u, 0x000500c7u, 0x00000006u, 0x000039b8u, 0x000039a5u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000039b9u, 0x000039b8u, 0x000006c3u, 0x0003003eu, 0x000039a9u, 0x000039b9u, 0x00040071u, 0x000004bau, 0x000039bbu, 0x000039b6u, 0x0004007cu, 0x000004b6u, 0x000039bcu, 0x000039bbu, 0x00040071u, 0x00000011u, 0x000039beu, 0x000039b9u, 0x0004007cu, 0x00000012u, 0x000039bfu, 0x000039beu, 0x00050051u, 0x00000012u, 0x000039c0u, 0x000039bcu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000039c1u, 0x000039bcu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000039c2u, 0x000039bcu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000039c3u, 0x000039c0u, 0x000039c1u, 0x000039c2u, 0x000039bfu, 0x0003003eu, 0x000039aau, 0x000039c3u, 0x0003003eu, 0x00003987u, 0x000039c3u, 0x0003003eu, 0x00002ce5u, 0x000039c3u, 0x00050050u, 0x000000efu, 0x00002f76u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f77u, 0x00002f76u, 0x0003003eu, 0x00006f02u, 0x00002caau, 0x0003003eu, 0x00006f03u, 0x00002cacu, 0x0003003eu, 0x00002d4cu, 0x000021c0u, 0x0003003eu, 0x00002d4du, 0x00002f77u, 0x00050041u, 0x00000007u, 0x000039cdu, 0x00002d4du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000039ceu, 0x000039cdu, 0x00050084u, 0x00000006u, 0x000039cfu, 0x00002cacu, 0x000039ceu, 0x00050080u, 0x00000006u, 0x000039d0u, 0x00002caau, 0x000039cfu, 0x0003003eu, 0x000039c4u, 0x000039d0u, 0x00050041u, 0x00000007u, 0x000039d1u, 0x00002d4du, 0x0000032du, 0x0004003du, 0x00000006u, 0x000039d2u, 0x000039d1u, 0x00050084u, 0x00000006u, 0x000039d3u, 0x000039d2u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000039d5u, 0x000039d0u, 0x000039d3u, 0x0003003eu, 0x000039c4u, 0x000039d5u, 0x000500c7u, 0x00000006u, 0x000039d7u, 0x000039d5u, 0x00000e73u, 0x0003003eu, 0x000039c4u, 0x000039d7u, 0x000500c2u, 0x00000006u, 0x000039d9u, 0x000039d7u, 0x0000022au, 0x0003003eu, 0x000039c5u, 0x000039d9u, 0x0004003du, 0x00000006u, 0x000039dbu, 0x000039cdu, 0x000500c7u, 0x00000006u, 0x000039dcu, 0x000039dbu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000039ddu, 0x000039dcu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000039dfu, 0x000039d9u, 0x000039ddu, 0x0003003eu, 0x000039c5u, 0x000039dfu, 0x000500c6u, 0x00000006u, 0x000039e1u, 0x000039dfu, 0x0000045cu, 0x0003003eu, 0x000039c5u, 0x000039e1u, 0x00080041u, 0x00000692u, 0x000039e4u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000039e1u, 0x0004003du, 0x00000011u, 0x000039e5u, 0x000039e4u, 0x00040071u, 0x00000006u, 0x000039e6u, 0x000039e5u, 0x0003003eu, 0x000039c6u, 0x000039e6u, 0x0003003eu, 0x000039c7u, 0x000039e6u, 0x00060050u, 0x0000030cu, 0x000039edu, 0x000039e6u, 0x000039e6u, 0x000039e6u, 0x000500c2u, 0x0000030cu, 0x000039eeu, 0x000039edu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000039f0u, 0x000039eeu, 0x0000f3a8u, 0x0003003eu, 0x000039e9u, 0x000039f0u, 0x000500c4u, 0x0000030cu, 0x000039f3u, 0x000039f0u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000039f6u, 0x000039f0u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000039f7u, 0x000039f3u, 0x000039f6u, 0x0003003eu, 0x000039e9u, 0x000039f7u, 0x000500c7u, 0x00000006u, 0x000039f9u, 0x000039e6u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000039fau, 0x000039f9u, 0x000006c3u, 0x0003003eu, 0x000039eau, 0x000039fau, 0x00040071u, 0x000004bau, 0x000039fcu, 0x000039f7u, 0x0004007cu, 0x000004b6u, 0x000039fdu, 0x000039fcu, 0x00040071u, 0x00000011u, 0x000039ffu, 0x000039fau, 0x0004007cu, 0x00000012u, 0x00003a00u, 0x000039ffu, 0x00050051u, 0x00000012u, 0x00003a01u, 0x000039fdu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003a02u, 0x000039fdu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003a03u, 0x000039fdu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003a04u, 0x00003a01u, 0x00003a02u, 0x00003a03u, 0x00003a00u, 0x0003003eu, 0x000039ebu, 0x00003a04u, 0x0003003eu, 0x000039c8u, 0x00003a04u, 0x0003003eu, 0x00002cedu, 0x00003a04u, 0x000200f9u, 0x00002f6bu, 0x000200f8u, 0x00002f6bu, 0x000700f5u, 0x00000013u, 0x0000889du, 0x00008859u, 0x00002f23u, 0x00003a04u, 0x00002f6cu, 0x000700f5u, 0x00000013u, 0x000087a5u, 0x0000875du, 0x00002f23u, 0x000039c3u, 0x00002f6cu, 0x000300f7u, 0x00002f7cu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002f7du, 0x00002f7cu, 0x000200f8u, 0x00002f7du, 0x00050050u, 0x000000efu, 0x00002f80u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f81u, 0x00002f80u, 0x0003003eu, 0x00006f06u, 0x00002caau, 0x0003003eu, 0x00006f07u, 0x00002cacu, 0x0003003eu, 0x00002d4fu, 0x000021c0u, 0x0003003eu, 0x00002d50u, 0x00002f81u, 0x00050041u, 0x00000007u, 0x00003a0eu, 0x00002d50u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003a0fu, 0x00003a0eu, 0x00050084u, 0x00000006u, 0x00003a10u, 0x00002cacu, 0x00003a0fu, 0x00050080u, 0x00000006u, 0x00003a11u, 0x00002caau, 0x00003a10u, 0x0003003eu, 0x00003a05u, 0x00003a11u, 0x00050041u, 0x00000007u, 0x00003a12u, 0x00002d50u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003a13u, 0x00003a12u, 0x00050084u, 0x00000006u, 0x00003a14u, 0x00003a13u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003a16u, 0x00003a11u, 0x00003a14u, 0x0003003eu, 0x00003a05u, 0x00003a16u, 0x000500c7u, 0x00000006u, 0x00003a18u, 0x00003a16u, 0x00000e73u, 0x0003003eu, 0x00003a05u, 0x00003a18u, 0x000500c2u, 0x00000006u, 0x00003a1au, 0x00003a18u, 0x0000022au, 0x0003003eu, 0x00003a06u, 0x00003a1au, 0x0004003du, 0x00000006u, 0x00003a1cu, 0x00003a0eu, 0x000500c7u, 0x00000006u, 0x00003a1du, 0x00003a1cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003a1eu, 0x00003a1du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003a20u, 0x00003a1au, 0x00003a1eu, 0x0003003eu, 0x00003a06u, 0x00003a20u, 0x000500c6u, 0x00000006u, 0x00003a22u, 0x00003a20u, 0x0000045cu, 0x0003003eu, 0x00003a06u, 0x00003a22u, 0x00080041u, 0x00000692u, 0x00003a25u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003a22u, 0x0004003du, 0x00000011u, 0x00003a26u, 0x00003a25u, 0x00040071u, 0x00000006u, 0x00003a27u, 0x00003a26u, 0x0003003eu, 0x00003a07u, 0x00003a27u, 0x0003003eu, 0x00003a08u, 0x00003a27u, 0x00060050u, 0x0000030cu, 0x00003a2eu, 0x00003a27u, 0x00003a27u, 0x00003a27u, 0x000500c2u, 0x0000030cu, 0x00003a2fu, 0x00003a2eu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00003a31u, 0x00003a2fu, 0x0000f3a8u, 0x0003003eu, 0x00003a2au, 0x00003a31u, 0x000500c4u, 0x0000030cu, 0x00003a34u, 0x00003a31u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00003a37u, 0x00003a31u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00003a38u, 0x00003a34u, 0x00003a37u, 0x0003003eu, 0x00003a2au, 0x00003a38u, 0x000500c7u, 0x00000006u, 0x00003a3au, 0x00003a27u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003a3bu, 0x00003a3au, 0x000006c3u, 0x0003003eu, 0x00003a2bu, 0x00003a3bu, 0x00040071u, 0x000004bau, 0x00003a3du, 0x00003a38u, 0x0004007cu, 0x000004b6u, 0x00003a3eu, 0x00003a3du, 0x00040071u, 0x00000011u, 0x00003a40u, 0x00003a3bu, 0x0004007cu, 0x00000012u, 0x00003a41u, 0x00003a40u, 0x00050051u, 0x00000012u, 0x00003a42u, 0x00003a3eu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003a43u, 0x00003a3eu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003a44u, 0x00003a3eu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003a45u, 0x00003a42u, 0x00003a43u, 0x00003a44u, 0x00003a41u, 0x0003003eu, 0x00003a2cu, 0x00003a45u, 0x0003003eu, 0x00003a09u, 0x00003a45u, 0x0003003eu, 0x00002cf5u, 0x00003a45u, 0x000200f9u, 0x00002f7cu, 0x000200f8u, 0x00002f7cu, 0x000700f5u, 0x00000013u, 0x00008919u, 0x000088d3u, 0x00002f6bu, 0x00003a45u, 0x00002f7du, 0x000200f9u, 0x00002f20u, 0x000200f8u, 0x00002f22u, 0x0004007cu, 0x000000b0u, 0x00002f46u, 0x000083d3u, 0x0003003eu, 0x00006eeau, 0x00002caau, 0x0003003eu, 0x00006eebu, 0x00002cacu, 0x0003003eu, 0x00002d3au, 0x000021c0u, 0x0003003eu, 0x00002d3bu, 0x00002f46u, 0x00050041u, 0x00000007u, 0x000038bau, 0x00002d3bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000038bbu, 0x000038bau, 0x00050084u, 0x00000006u, 0x000038bcu, 0x00002cacu, 0x000038bbu, 0x00050080u, 0x00000006u, 0x000038bdu, 0x00002caau, 0x000038bcu, 0x0003003eu, 0x000038b2u, 0x000038bdu, 0x00050041u, 0x00000007u, 0x000038beu, 0x00002d3bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000038bfu, 0x000038beu, 0x00050080u, 0x00000006u, 0x000038c1u, 0x000038bdu, 0x000038bfu, 0x0003003eu, 0x000038b2u, 0x000038c1u, 0x000500c7u, 0x00000006u, 0x000038c3u, 0x000038c1u, 0x00000e73u, 0x0003003eu, 0x000038b2u, 0x000038c3u, 0x0003003eu, 0x000038b3u, 0x000038c3u, 0x0004003du, 0x00000006u, 0x000038c6u, 0x000038bau, 0x000500c7u, 0x00000006u, 0x000038c7u, 0x000038c6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000038c8u, 0x000038c7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000038cau, 0x000038c3u, 0x000038c8u, 0x0003003eu, 0x000038b3u, 0x000038cau, 0x000500c6u, 0x00000006u, 0x000038ccu, 0x000038cau, 0x00000464u, 0x0003003eu, 0x000038b3u, 0x000038ccu, 0x00080041u, 0x00000671u, 0x000038cfu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000038ccu, 0x0004003du, 0x0000000fu, 0x000038d0u, 0x000038cfu, 0x00040071u, 0x00000006u, 0x000038d1u, 0x000038d0u, 0x0003003eu, 0x000038b4u, 0x000038d1u, 0x00040071u, 0x00000011u, 0x000038d3u, 0x000038d1u, 0x0004007cu, 0x00000012u, 0x000038d4u, 0x000038d3u, 0x00070050u, 0x00000013u, 0x000038d5u, 0x000038d4u, 0x000038d4u, 0x000038d4u, 0x000038d4u, 0x0003003eu, 0x000038b5u, 0x000038d5u, 0x0003003eu, 0x00002cddu, 0x000038d5u, 0x000300f7u, 0x00002f4bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002f4cu, 0x00002f4bu, 0x000200f8u, 0x00002f4cu, 0x00050050u, 0x000000efu, 0x00002f4fu, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002f50u, 0x00002f4fu, 0x0003003eu, 0x00006eeeu, 0x00002caau, 0x0003003eu, 0x00006eefu, 0x00002cacu, 0x0003003eu, 0x00002d3du, 0x000021c0u, 0x0003003eu, 0x00002d3eu, 0x00002f50u, 0x00050041u, 0x00000007u, 0x000038deu, 0x00002d3eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000038dfu, 0x000038deu, 0x00050084u, 0x00000006u, 0x000038e0u, 0x00002cacu, 0x000038dfu, 0x00050080u, 0x00000006u, 0x000038e1u, 0x00002caau, 0x000038e0u, 0x0003003eu, 0x000038d6u, 0x000038e1u, 0x00050041u, 0x00000007u, 0x000038e2u, 0x00002d3eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000038e3u, 0x000038e2u, 0x00050080u, 0x00000006u, 0x000038e5u, 0x000038e1u, 0x000038e3u, 0x0003003eu, 0x000038d6u, 0x000038e5u, 0x000500c7u, 0x00000006u, 0x000038e7u, 0x000038e5u, 0x00000e73u, 0x0003003eu, 0x000038d6u, 0x000038e7u, 0x0003003eu, 0x000038d7u, 0x000038e7u, 0x0004003du, 0x00000006u, 0x000038eau, 0x000038deu, 0x000500c7u, 0x00000006u, 0x000038ebu, 0x000038eau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000038ecu, 0x000038ebu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000038eeu, 0x000038e7u, 0x000038ecu, 0x0003003eu, 0x000038d7u, 0x000038eeu, 0x000500c6u, 0x00000006u, 0x000038f0u, 0x000038eeu, 0x00000464u, 0x0003003eu, 0x000038d7u, 0x000038f0u, 0x00080041u, 0x00000671u, 0x000038f3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000038f0u, 0x0004003du, 0x0000000fu, 0x000038f4u, 0x000038f3u, 0x00040071u, 0x00000006u, 0x000038f5u, 0x000038f4u, 0x0003003eu, 0x000038d8u, 0x000038f5u, 0x00040071u, 0x00000011u, 0x000038f7u, 0x000038f5u, 0x0004007cu, 0x00000012u, 0x000038f8u, 0x000038f7u, 0x00070050u, 0x00000013u, 0x000038f9u, 0x000038f8u, 0x000038f8u, 0x000038f8u, 0x000038f8u, 0x0003003eu, 0x000038d9u, 0x000038f9u, 0x0003003eu, 0x00002ce5u, 0x000038f9u, 0x00050050u, 0x000000efu, 0x00002f56u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f57u, 0x00002f56u, 0x0003003eu, 0x00006ef2u, 0x00002caau, 0x0003003eu, 0x00006ef3u, 0x00002cacu, 0x0003003eu, 0x00002d40u, 0x000021c0u, 0x0003003eu, 0x00002d41u, 0x00002f57u, 0x00050041u, 0x00000007u, 0x00003902u, 0x00002d41u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003903u, 0x00003902u, 0x00050084u, 0x00000006u, 0x00003904u, 0x00002cacu, 0x00003903u, 0x00050080u, 0x00000006u, 0x00003905u, 0x00002caau, 0x00003904u, 0x0003003eu, 0x000038fau, 0x00003905u, 0x00050041u, 0x00000007u, 0x00003906u, 0x00002d41u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003907u, 0x00003906u, 0x00050080u, 0x00000006u, 0x00003909u, 0x00003905u, 0x00003907u, 0x0003003eu, 0x000038fau, 0x00003909u, 0x000500c7u, 0x00000006u, 0x0000390bu, 0x00003909u, 0x00000e73u, 0x0003003eu, 0x000038fau, 0x0000390bu, 0x0003003eu, 0x000038fbu, 0x0000390bu, 0x0004003du, 0x00000006u, 0x0000390eu, 0x00003902u, 0x000500c7u, 0x00000006u, 0x0000390fu, 0x0000390eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003910u, 0x0000390fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003912u, 0x0000390bu, 0x00003910u, 0x0003003eu, 0x000038fbu, 0x00003912u, 0x000500c6u, 0x00000006u, 0x00003914u, 0x00003912u, 0x00000464u, 0x0003003eu, 0x000038fbu, 0x00003914u, 0x00080041u, 0x00000671u, 0x00003917u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003914u, 0x0004003du, 0x0000000fu, 0x00003918u, 0x00003917u, 0x00040071u, 0x00000006u, 0x00003919u, 0x00003918u, 0x0003003eu, 0x000038fcu, 0x00003919u, 0x00040071u, 0x00000011u, 0x0000391bu, 0x00003919u, 0x0004007cu, 0x00000012u, 0x0000391cu, 0x0000391bu, 0x00070050u, 0x00000013u, 0x0000391du, 0x0000391cu, 0x0000391cu, 0x0000391cu, 0x0000391cu, 0x0003003eu, 0x000038fdu, 0x0000391du, 0x0003003eu, 0x00002cedu, 0x0000391du, 0x000200f9u, 0x00002f4bu, 0x000200f8u, 0x00002f4bu, 0x000700f5u, 0x00000013u, 0x0000889bu, 0x00008859u, 0x00002f22u, 0x0000391du, 0x00002f4cu, 0x000700f5u, 0x00000013u, 0x000087a3u, 0x0000875du, 0x00002f22u, 0x000038f9u, 0x00002f4cu, 0x000300f7u, 0x00002f5cu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002f5du, 0x00002f5cu, 0x000200f8u, 0x00002f5du, 0x00050050u, 0x000000efu, 0x00002f60u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f61u, 0x00002f60u, 0x0003003eu, 0x00006ef6u, 0x00002caau, 0x0003003eu, 0x00006ef7u, 0x00002cacu, 0x0003003eu, 0x00002d43u, 0x000021c0u, 0x0003003eu, 0x00002d44u, 0x00002f61u, 0x00050041u, 0x00000007u, 0x00003926u, 0x00002d44u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003927u, 0x00003926u, 0x00050084u, 0x00000006u, 0x00003928u, 0x00002cacu, 0x00003927u, 0x00050080u, 0x00000006u, 0x00003929u, 0x00002caau, 0x00003928u, 0x0003003eu, 0x0000391eu, 0x00003929u, 0x00050041u, 0x00000007u, 0x0000392au, 0x00002d44u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000392bu, 0x0000392au, 0x00050080u, 0x00000006u, 0x0000392du, 0x00003929u, 0x0000392bu, 0x0003003eu, 0x0000391eu, 0x0000392du, 0x000500c7u, 0x00000006u, 0x0000392fu, 0x0000392du, 0x00000e73u, 0x0003003eu, 0x0000391eu, 0x0000392fu, 0x0003003eu, 0x0000391fu, 0x0000392fu, 0x0004003du, 0x00000006u, 0x00003932u, 0x00003926u, 0x000500c7u, 0x00000006u, 0x00003933u, 0x00003932u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003934u, 0x00003933u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003936u, 0x0000392fu, 0x00003934u, 0x0003003eu, 0x0000391fu, 0x00003936u, 0x000500c6u, 0x00000006u, 0x00003938u, 0x00003936u, 0x00000464u, 0x0003003eu, 0x0000391fu, 0x00003938u, 0x00080041u, 0x00000671u, 0x0000393bu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003938u, 0x0004003du, 0x0000000fu, 0x0000393cu, 0x0000393bu, 0x00040071u, 0x00000006u, 0x0000393du, 0x0000393cu, 0x0003003eu, 0x00003920u, 0x0000393du, 0x00040071u, 0x00000011u, 0x0000393fu, 0x0000393du, 0x0004007cu, 0x00000012u, 0x00003940u, 0x0000393fu, 0x00070050u, 0x00000013u, 0x00003941u, 0x00003940u, 0x00003940u, 0x00003940u, 0x00003940u, 0x0003003eu, 0x00003921u, 0x00003941u, 0x0003003eu, 0x00002cf5u, 0x00003941u, 0x000200f9u, 0x00002f5cu, 0x000200f8u, 0x00002f5cu, 0x000700f5u, 0x00000013u, 0x00008917u, 0x000088d3u, 0x00002f4bu, 0x00003941u, 0x00002f5du, 0x000200f9u, 0x00002f20u, 0x000200f8u, 0x00002f21u, 0x0004007cu, 0x000000b0u, 0x00002f26u, 0x000083d3u, 0x0003003eu, 0x00006edau, 0x00002caau, 0x0003003eu, 0x00006edbu, 0x00002cacu, 0x0003003eu, 0x00002d2eu, 0x000021c0u, 0x0003003eu, 0x00002d2fu, 0x00002f26u, 0x00050041u, 0x00000007u, 0x000037efu, 0x00002d2fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000037f0u, 0x000037efu, 0x00050084u, 0x00000006u, 0x000037f1u, 0x00002cacu, 0x000037f0u, 0x00050080u, 0x00000006u, 0x000037f2u, 0x00002caau, 0x000037f1u, 0x0003003eu, 0x000037e6u, 0x000037f2u, 0x00050041u, 0x00000007u, 0x000037f3u, 0x00002d2fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000037f4u, 0x000037f3u, 0x000500c2u, 0x00000006u, 0x000037f5u, 0x000037f4u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000037f7u, 0x000037f2u, 0x000037f5u, 0x0003003eu, 0x000037e6u, 0x000037f7u, 0x000500c7u, 0x00000006u, 0x000037f9u, 0x000037f7u, 0x00000e73u, 0x0003003eu, 0x000037e6u, 0x000037f9u, 0x0004003du, 0x00000006u, 0x000037fbu, 0x000037f3u, 0x000400c8u, 0x00000006u, 0x000037fcu, 0x000037fbu, 0x000500c7u, 0x00000006u, 0x000037fdu, 0x000037fcu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000037feu, 0x000037fdu, 0x00000704u, 0x0003003eu, 0x000037e7u, 0x000037feu, 0x0003003eu, 0x000037e8u, 0x000037f9u, 0x0004003du, 0x00000006u, 0x00003801u, 0x000037efu, 0x000500c7u, 0x00000006u, 0x00003802u, 0x00003801u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003803u, 0x00003802u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003805u, 0x000037f9u, 0x00003803u, 0x0003003eu, 0x000037e8u, 0x00003805u, 0x000500c6u, 0x00000006u, 0x00003807u, 0x00003805u, 0x00000464u, 0x0003003eu, 0x000037e8u, 0x00003807u, 0x00080041u, 0x00000671u, 0x0000380au, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003807u, 0x0004003du, 0x0000000fu, 0x0000380bu, 0x0000380au, 0x00040071u, 0x00000006u, 0x0000380cu, 0x0000380bu, 0x0003003eu, 0x000037e9u, 0x0000380cu, 0x000500c2u, 0x00000006u, 0x0000380fu, 0x0000380cu, 0x000037feu, 0x000500c7u, 0x00000006u, 0x00003810u, 0x0000380fu, 0x00000e96u, 0x0003003eu, 0x000037e9u, 0x00003810u, 0x000500c4u, 0x00000006u, 0x00003812u, 0x00003810u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003814u, 0x00003810u, 0x00003812u, 0x0003003eu, 0x000037e9u, 0x00003814u, 0x00040071u, 0x00000011u, 0x00003816u, 0x00003814u, 0x0004007cu, 0x00000012u, 0x00003817u, 0x00003816u, 0x00070050u, 0x00000013u, 0x00003818u, 0x00003817u, 0x00003817u, 0x00003817u, 0x00003817u, 0x0003003eu, 0x000037eau, 0x00003818u, 0x0003003eu, 0x00002cddu, 0x00003818u, 0x000300f7u, 0x00002f2bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002f2cu, 0x00002f2bu, 0x000200f8u, 0x00002f2cu, 0x00050050u, 0x000000efu, 0x00002f2fu, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002f30u, 0x00002f2fu, 0x0003003eu, 0x00006edeu, 0x00002caau, 0x0003003eu, 0x00006edfu, 0x00002cacu, 0x0003003eu, 0x00002d31u, 0x000021c0u, 0x0003003eu, 0x00002d32u, 0x00002f30u, 0x00050041u, 0x00000007u, 0x00003822u, 0x00002d32u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003823u, 0x00003822u, 0x00050084u, 0x00000006u, 0x00003824u, 0x00002cacu, 0x00003823u, 0x00050080u, 0x00000006u, 0x00003825u, 0x00002caau, 0x00003824u, 0x0003003eu, 0x00003819u, 0x00003825u, 0x00050041u, 0x00000007u, 0x00003826u, 0x00002d32u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003827u, 0x00003826u, 0x000500c2u, 0x00000006u, 0x00003828u, 0x00003827u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000382au, 0x00003825u, 0x00003828u, 0x0003003eu, 0x00003819u, 0x0000382au, 0x000500c7u, 0x00000006u, 0x0000382cu, 0x0000382au, 0x00000e73u, 0x0003003eu, 0x00003819u, 0x0000382cu, 0x0004003du, 0x00000006u, 0x0000382eu, 0x00003826u, 0x000400c8u, 0x00000006u, 0x0000382fu, 0x0000382eu, 0x000500c7u, 0x00000006u, 0x00003830u, 0x0000382fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003831u, 0x00003830u, 0x00000704u, 0x0003003eu, 0x0000381au, 0x00003831u, 0x0003003eu, 0x0000381bu, 0x0000382cu, 0x0004003du, 0x00000006u, 0x00003834u, 0x00003822u, 0x000500c7u, 0x00000006u, 0x00003835u, 0x00003834u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003836u, 0x00003835u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003838u, 0x0000382cu, 0x00003836u, 0x0003003eu, 0x0000381bu, 0x00003838u, 0x000500c6u, 0x00000006u, 0x0000383au, 0x00003838u, 0x00000464u, 0x0003003eu, 0x0000381bu, 0x0000383au, 0x00080041u, 0x00000671u, 0x0000383du, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000383au, 0x0004003du, 0x0000000fu, 0x0000383eu, 0x0000383du, 0x00040071u, 0x00000006u, 0x0000383fu, 0x0000383eu, 0x0003003eu, 0x0000381cu, 0x0000383fu, 0x000500c2u, 0x00000006u, 0x00003842u, 0x0000383fu, 0x00003831u, 0x000500c7u, 0x00000006u, 0x00003843u, 0x00003842u, 0x00000e96u, 0x0003003eu, 0x0000381cu, 0x00003843u, 0x000500c4u, 0x00000006u, 0x00003845u, 0x00003843u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00003847u, 0x00003843u, 0x00003845u, 0x0003003eu, 0x0000381cu, 0x00003847u, 0x00040071u, 0x00000011u, 0x00003849u, 0x00003847u, 0x0004007cu, 0x00000012u, 0x0000384au, 0x00003849u, 0x00070050u, 0x00000013u, 0x0000384bu, 0x0000384au, 0x0000384au, 0x0000384au, 0x0000384au, 0x0003003eu, 0x0000381du, 0x0000384bu, 0x0003003eu, 0x00002ce5u, 0x0000384bu, 0x00050050u, 0x000000efu, 0x00002f36u, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f37u, 0x00002f36u, 0x0003003eu, 0x00006ee2u, 0x00002caau, 0x0003003eu, 0x00006ee3u, 0x00002cacu, 0x0003003eu, 0x00002d34u, 0x000021c0u, 0x0003003eu, 0x00002d35u, 0x00002f37u, 0x00050041u, 0x00000007u, 0x00003855u, 0x00002d35u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003856u, 0x00003855u, 0x00050084u, 0x00000006u, 0x00003857u, 0x00002cacu, 0x00003856u, 0x00050080u, 0x00000006u, 0x00003858u, 0x00002caau, 0x00003857u, 0x0003003eu, 0x0000384cu, 0x00003858u, 0x00050041u, 0x00000007u, 0x00003859u, 0x00002d35u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000385au, 0x00003859u, 0x000500c2u, 0x00000006u, 0x0000385bu, 0x0000385au, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000385du, 0x00003858u, 0x0000385bu, 0x0003003eu, 0x0000384cu, 0x0000385du, 0x000500c7u, 0x00000006u, 0x0000385fu, 0x0000385du, 0x00000e73u, 0x0003003eu, 0x0000384cu, 0x0000385fu, 0x0004003du, 0x00000006u, 0x00003861u, 0x00003859u, 0x000400c8u, 0x00000006u, 0x00003862u, 0x00003861u, 0x000500c7u, 0x00000006u, 0x00003863u, 0x00003862u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003864u, 0x00003863u, 0x00000704u, 0x0003003eu, 0x0000384du, 0x00003864u, 0x0003003eu, 0x0000384eu, 0x0000385fu, 0x0004003du, 0x00000006u, 0x00003867u, 0x00003855u, 0x000500c7u, 0x00000006u, 0x00003868u, 0x00003867u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003869u, 0x00003868u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000386bu, 0x0000385fu, 0x00003869u, 0x0003003eu, 0x0000384eu, 0x0000386bu, 0x000500c6u, 0x00000006u, 0x0000386du, 0x0000386bu, 0x00000464u, 0x0003003eu, 0x0000384eu, 0x0000386du, 0x00080041u, 0x00000671u, 0x00003870u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000386du, 0x0004003du, 0x0000000fu, 0x00003871u, 0x00003870u, 0x00040071u, 0x00000006u, 0x00003872u, 0x00003871u, 0x0003003eu, 0x0000384fu, 0x00003872u, 0x000500c2u, 0x00000006u, 0x00003875u, 0x00003872u, 0x00003864u, 0x000500c7u, 0x00000006u, 0x00003876u, 0x00003875u, 0x00000e96u, 0x0003003eu, 0x0000384fu, 0x00003876u, 0x000500c4u, 0x00000006u, 0x00003878u, 0x00003876u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000387au, 0x00003876u, 0x00003878u, 0x0003003eu, 0x0000384fu, 0x0000387au, 0x00040071u, 0x00000011u, 0x0000387cu, 0x0000387au, 0x0004007cu, 0x00000012u, 0x0000387du, 0x0000387cu, 0x00070050u, 0x00000013u, 0x0000387eu, 0x0000387du, 0x0000387du, 0x0000387du, 0x0000387du, 0x0003003eu, 0x00003850u, 0x0000387eu, 0x0003003eu, 0x00002cedu, 0x0000387eu, 0x000200f9u, 0x00002f2bu, 0x000200f8u, 0x00002f2bu, 0x000700f5u, 0x00000013u, 0x00008899u, 0x00008859u, 0x00002f21u, 0x0000387eu, 0x00002f2cu, 0x000700f5u, 0x00000013u, 0x000087a1u, 0x0000875du, 0x00002f21u, 0x0000384bu, 0x00002f2cu, 0x000300f7u, 0x00002f3cu, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002f3du, 0x00002f3cu, 0x000200f8u, 0x00002f3du, 0x00050050u, 0x000000efu, 0x00002f40u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f41u, 0x00002f40u, 0x0003003eu, 0x00006ee6u, 0x00002caau, 0x0003003eu, 0x00006ee7u, 0x00002cacu, 0x0003003eu, 0x00002d37u, 0x000021c0u, 0x0003003eu, 0x00002d38u, 0x00002f41u, 0x00050041u, 0x00000007u, 0x00003888u, 0x00002d38u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003889u, 0x00003888u, 0x00050084u, 0x00000006u, 0x0000388au, 0x00002cacu, 0x00003889u, 0x00050080u, 0x00000006u, 0x0000388bu, 0x00002caau, 0x0000388au, 0x0003003eu, 0x0000387fu, 0x0000388bu, 0x00050041u, 0x00000007u, 0x0000388cu, 0x00002d38u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000388du, 0x0000388cu, 0x000500c2u, 0x00000006u, 0x0000388eu, 0x0000388du, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003890u, 0x0000388bu, 0x0000388eu, 0x0003003eu, 0x0000387fu, 0x00003890u, 0x000500c7u, 0x00000006u, 0x00003892u, 0x00003890u, 0x00000e73u, 0x0003003eu, 0x0000387fu, 0x00003892u, 0x0004003du, 0x00000006u, 0x00003894u, 0x0000388cu, 0x000400c8u, 0x00000006u, 0x00003895u, 0x00003894u, 0x000500c7u, 0x00000006u, 0x00003896u, 0x00003895u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003897u, 0x00003896u, 0x00000704u, 0x0003003eu, 0x00003880u, 0x00003897u, 0x0003003eu, 0x00003881u, 0x00003892u, 0x0004003du, 0x00000006u, 0x0000389au, 0x00003888u, 0x000500c7u, 0x00000006u, 0x0000389bu, 0x0000389au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000389cu, 0x0000389bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000389eu, 0x00003892u, 0x0000389cu, 0x0003003eu, 0x00003881u, 0x0000389eu, 0x000500c6u, 0x00000006u, 0x000038a0u, 0x0000389eu, 0x00000464u, 0x0003003eu, 0x00003881u, 0x000038a0u, 0x00080041u, 0x00000671u, 0x000038a3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000038a0u, 0x0004003du, 0x0000000fu, 0x000038a4u, 0x000038a3u, 0x00040071u, 0x00000006u, 0x000038a5u, 0x000038a4u, 0x0003003eu, 0x00003882u, 0x000038a5u, 0x000500c2u, 0x00000006u, 0x000038a8u, 0x000038a5u, 0x00003897u, 0x000500c7u, 0x00000006u, 0x000038a9u, 0x000038a8u, 0x00000e96u, 0x0003003eu, 0x00003882u, 0x000038a9u, 0x000500c4u, 0x00000006u, 0x000038abu, 0x000038a9u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000038adu, 0x000038a9u, 0x000038abu, 0x0003003eu, 0x00003882u, 0x000038adu, 0x00040071u, 0x00000011u, 0x000038afu, 0x000038adu, 0x0004007cu, 0x00000012u, 0x000038b0u, 0x000038afu, 0x00070050u, 0x00000013u, 0x000038b1u, 0x000038b0u, 0x000038b0u, 0x000038b0u, 0x000038b0u, 0x0003003eu, 0x00003883u, 0x000038b1u, 0x0003003eu, 0x00002cf5u, 0x000038b1u, 0x000200f9u, 0x00002f3cu, 0x000200f8u, 0x00002f3cu, 0x000700f5u, 0x00000013u, 0x00008915u, 0x000088d3u, 0x00002f2bu, 0x000038b1u, 0x00002f3du, 0x000200f9u, 0x00002f20u, 0x000200f8u, 0x00002f20u, 0x000d00f5u, 0x00000013u, 0x00008914u, 0x000088d3u, 0x00002f17u, 0x00008915u, 0x00002f3cu, 0x00008917u, 0x00002f5cu, 0x00008919u, 0x00002f7cu, 0x0000891bu, 0x00002f9cu, 0x000d00f5u, 0x00000013u, 0x00008897u, 0x00008859u, 0x00002f17u, 0x00008899u, 0x00002f3cu, 0x0000889bu, 0x00002f5cu, 0x0000889du, 0x00002f7cu, 0x0000889fu, 0x00002f9cu, 0x000d00f5u, 0x00000013u, 0x0000881cu, 0x000087dcu, 0x00002f17u, 0x00003818u, 0x00002f3cu, 0x000038d5u, 0x00002f5cu, 0x00003982u, 0x00002f7cu, 0x00003a7fu, 0x00002f9cu, 0x000d00f5u, 0x00000013u, 0x0000879fu, 0x0000875du, 0x00002f17u, 0x000087a1u, 0x00002f3cu, 0x000087a3u, 0x00002f5cu, 0x000087a5u, 0x00002f7cu, 0x000087a7u, 0x00002f9cu, 0x000200f9u, 0x00002f16u, 0x000200f8u, 0x00002f16u, 0x000f00f5u, 0x00000013u, 0x00008913u, 0x000088d3u, 0x00002e71u, 0x00008914u, 0x00002f20u, 0x0000891du, 0x00002fb8u, 0x0000891eu, 0x00002fd6u, 0x00008925u, 0x0000304au, 0x0000892eu, 0x000030d3u, 0x000f00f5u, 0x00000013u, 0x00008896u, 0x00008859u, 0x00002e71u, 0x00008897u, 0x00002f20u, 0x000088a0u, 0x00002fb8u, 0x000088a1u, 0x00002fd6u, 0x000088a8u, 0x0000304au, 0x000088b1u, 0x000030d3u, 0x000f00f5u, 0x00000013u, 0x0000881bu, 0x000087dcu, 0x00002e71u, 0x0000881cu, 0x00002f20u, 0x00003b7eu, 0x00002fb8u, 0x00008826u, 0x00002fd6u, 0x0000882du, 0x0000304au, 0x00008836u, 0x000030d3u, 0x000f00f5u, 0x00000013u, 0x0000879eu, 0x0000875du, 0x00002e71u, 0x0000879fu, 0x00002f20u, 0x000087a8u, 0x00002fb8u, 0x000087a9u, 0x00002fd6u, 0x000087b0u, 0x0000304au, 0x000087b9u, 0x000030d3u, 0x000200f9u, 0x00002e6fu, 0x000200f8u, 0x00002e70u, 0x000300f7u, 0x00002e76u, 0x00000000u, 0x000b00fbu, 0x00002e60u, 0x00002e76u, 0x00000000u, 0x00002e77u, 0x00000002u, 0x00002e77u, 0x00000003u, 0x00002e77u, 0x00000004u, 0x00002e77u, 0x000200f8u, 0x00002e77u, 0x0003003eu, 0x00002cdbu, 0x00002e63u, 0x000600a9u, 0x00000008u, 0x00002e7bu, 0x00002e63u, 0x0000022du, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00002e7cu, 0x00002e7bu, 0x0003003eu, 0x00002cdcu, 0x00002e7cu, 0x00040071u, 0x00000006u, 0x00002e7fu, 0x00002cb0u, 0x0004007cu, 0x00000008u, 0x00002e80u, 0x00002e7fu, 0x000300f7u, 0x00002e81u, 0x00000000u, 0x000700fbu, 0x00002e80u, 0x00002e82u, 0x00000000u, 0x00002e83u, 0x00000001u, 0x00002e84u, 0x000200f8u, 0x00002e84u, 0x0004007cu, 0x000000b0u, 0x00002ee8u, 0x000083d3u, 0x000600a9u, 0x00000008u, 0x00002eeau, 0x00002e63u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00002eebu, 0x00002eeau, 0x0003003eu, 0x00006ebau, 0x00002caau, 0x0003003eu, 0x00006ebbu, 0x00002cacu, 0x0003003eu, 0x00002cfeu, 0x000021c0u, 0x0003003eu, 0x00002cffu, 0x00002ee8u, 0x0003003eu, 0x00002d00u, 0x00002eebu, 0x0003003eu, 0x00002d01u, 0x00002e7cu, 0x0003003eu, 0x00002d02u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x0000364au, 0x00002cffu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000364bu, 0x0000364au, 0x00050084u, 0x00000006u, 0x0000364cu, 0x00002cacu, 0x0000364bu, 0x00050080u, 0x00000006u, 0x0000364du, 0x00002caau, 0x0000364cu, 0x0003003eu, 0x0000363eu, 0x0000364du, 0x00050041u, 0x00000007u, 0x0000364eu, 0x00002cffu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000364fu, 0x0000364eu, 0x00050080u, 0x00000006u, 0x00003651u, 0x0000364du, 0x0000364fu, 0x0003003eu, 0x0000363eu, 0x00003651u, 0x000500c7u, 0x00000006u, 0x00003653u, 0x00003651u, 0x00000f2bu, 0x0003003eu, 0x0000363eu, 0x00003653u, 0x0003003eu, 0x0000363fu, 0x00003653u, 0x0004003du, 0x00000006u, 0x00003656u, 0x0000364au, 0x000500c7u, 0x00000006u, 0x00003657u, 0x00003656u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003658u, 0x00003657u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000365au, 0x00003653u, 0x00003658u, 0x0003003eu, 0x0000363fu, 0x0000365au, 0x000500c6u, 0x00000006u, 0x0000365cu, 0x0000365au, 0x00000464u, 0x0003003eu, 0x0000363fu, 0x0000365cu, 0x00080041u, 0x00000671u, 0x0000365fu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000365cu, 0x0004003du, 0x0000000fu, 0x00003660u, 0x0000365fu, 0x00040071u, 0x00000006u, 0x00003661u, 0x00003660u, 0x0003003eu, 0x00003640u, 0x00003661u, 0x000500c4u, 0x00000006u, 0x00003663u, 0x00003661u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003665u, 0x00003663u, 0x00002eebu, 0x0003003eu, 0x00003641u, 0x00003665u, 0x000500c6u, 0x00000006u, 0x00003668u, 0x00003665u, 0x00002e7cu, 0x0003003eu, 0x00003641u, 0x00003668u, 0x000500c5u, 0x00000006u, 0x0000366bu, 0x00000f5cu, 0x00003668u, 0x00080041u, 0x00000692u, 0x0000366cu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000366bu, 0x0004003du, 0x00000011u, 0x0000366du, 0x0000366cu, 0x00040071u, 0x00000006u, 0x0000366eu, 0x0000366du, 0x0003003eu, 0x00003640u, 0x0000366eu, 0x000300f7u, 0x00003670u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00003671u, 0x00003672u, 0x000200f8u, 0x00003672u, 0x0003003eu, 0x00003644u, 0x0000366eu, 0x00060050u, 0x0000030cu, 0x00003690u, 0x0000366eu, 0x0000366eu, 0x0000366eu, 0x000500c2u, 0x0000030cu, 0x00003691u, 0x00003690u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00003693u, 0x00003691u, 0x0000f3a8u, 0x0003003eu, 0x0000368cu, 0x00003693u, 0x000500c4u, 0x0000030cu, 0x00003696u, 0x00003693u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00003699u, 0x00003693u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000369au, 0x00003696u, 0x00003699u, 0x0003003eu, 0x0000368cu, 0x0000369au, 0x000500c7u, 0x00000006u, 0x0000369cu, 0x0000366eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000369du, 0x0000369cu, 0x000006c3u, 0x0003003eu, 0x0000368du, 0x0000369du, 0x00040071u, 0x000004bau, 0x0000369fu, 0x0000369au, 0x0004007cu, 0x000004b6u, 0x000036a0u, 0x0000369fu, 0x00040071u, 0x00000011u, 0x000036a2u, 0x0000369du, 0x0004007cu, 0x00000012u, 0x000036a3u, 0x000036a2u, 0x00050051u, 0x00000012u, 0x000036a4u, 0x000036a0u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000036a5u, 0x000036a0u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000036a6u, 0x000036a0u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000036a7u, 0x000036a4u, 0x000036a5u, 0x000036a6u, 0x000036a3u, 0x0003003eu, 0x0000368eu, 0x000036a7u, 0x0003003eu, 0x00003642u, 0x000036a7u, 0x000200f9u, 0x00003670u, 0x000200f8u, 0x00003671u, 0x0003003eu, 0x00003643u, 0x0000366eu, 0x000500c2u, 0x00000006u, 0x0000367cu, 0x0000366eu, 0x0000025du, 0x0003003eu, 0x00003678u, 0x0000367cu, 0x000500c7u, 0x00000006u, 0x0000367eu, 0x0000366eu, 0x000006c3u, 0x0003003eu, 0x00003679u, 0x0000367eu, 0x00040071u, 0x00000011u, 0x00003680u, 0x0000367cu, 0x0004007cu, 0x00000012u, 0x00003681u, 0x00003680u, 0x00040071u, 0x00000011u, 0x00003689u, 0x0000367eu, 0x0004007cu, 0x00000012u, 0x0000368au, 0x00003689u, 0x00070050u, 0x00000013u, 0x0000368bu, 0x00003681u, 0x00003681u, 0x00003681u, 0x0000368au, 0x0003003eu, 0x0000367au, 0x0000368bu, 0x0003003eu, 0x00003642u, 0x0000368bu, 0x000200f9u, 0x00003670u, 0x000200f8u, 0x00003670u, 0x000700f5u, 0x00000013u, 0x0000855cu, 0x0000368bu, 0x00003671u, 0x000036a7u, 0x00003672u, 0x0003003eu, 0x00003645u, 0x0000855cu, 0x0003003eu, 0x00002cddu, 0x0000855cu, 0x000300f7u, 0x00002ef2u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002ef3u, 0x00002ef2u, 0x000200f8u, 0x00002ef3u, 0x00050050u, 0x000000efu, 0x00002ef6u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002ef7u, 0x00002ef6u, 0x0003003eu, 0x00006ebeu, 0x00002caau, 0x0003003eu, 0x00006ebfu, 0x00002cacu, 0x0003003eu, 0x00002d04u, 0x000021c0u, 0x0003003eu, 0x00002d05u, 0x00002ef7u, 0x0003003eu, 0x00002d06u, 0x0000045cu, 0x0003003eu, 0x00002d07u, 0x00002e7cu, 0x0003003eu, 0x00002d08u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x000036b4u, 0x00002d05u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000036b5u, 0x000036b4u, 0x00050084u, 0x00000006u, 0x000036b6u, 0x00002cacu, 0x000036b5u, 0x00050080u, 0x00000006u, 0x000036b7u, 0x00002caau, 0x000036b6u, 0x0003003eu, 0x000036a8u, 0x000036b7u, 0x00050041u, 0x00000007u, 0x000036b8u, 0x00002d05u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000036b9u, 0x000036b8u, 0x00050080u, 0x00000006u, 0x000036bbu, 0x000036b7u, 0x000036b9u, 0x0003003eu, 0x000036a8u, 0x000036bbu, 0x000500c7u, 0x00000006u, 0x000036bdu, 0x000036bbu, 0x00000f2bu, 0x0003003eu, 0x000036a8u, 0x000036bdu, 0x0003003eu, 0x000036a9u, 0x000036bdu, 0x0004003du, 0x00000006u, 0x000036c0u, 0x000036b4u, 0x000500c7u, 0x00000006u, 0x000036c1u, 0x000036c0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000036c2u, 0x000036c1u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000036c4u, 0x000036bdu, 0x000036c2u, 0x0003003eu, 0x000036a9u, 0x000036c4u, 0x000500c6u, 0x00000006u, 0x000036c6u, 0x000036c4u, 0x00000464u, 0x0003003eu, 0x000036a9u, 0x000036c6u, 0x00080041u, 0x00000671u, 0x000036c9u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000036c6u, 0x0004003du, 0x0000000fu, 0x000036cau, 0x000036c9u, 0x00040071u, 0x00000006u, 0x000036cbu, 0x000036cau, 0x0003003eu, 0x000036aau, 0x000036cbu, 0x000500c4u, 0x00000006u, 0x000036cdu, 0x000036cbu, 0x0000022du, 0x00050080u, 0x00000006u, 0x000036cfu, 0x000036cdu, 0x0000045cu, 0x0003003eu, 0x000036abu, 0x000036cfu, 0x000500c6u, 0x00000006u, 0x000036d2u, 0x000036cfu, 0x00002e7cu, 0x0003003eu, 0x000036abu, 0x000036d2u, 0x000500c5u, 0x00000006u, 0x000036d5u, 0x00000f5cu, 0x000036d2u, 0x00080041u, 0x00000692u, 0x000036d6u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000036d5u, 0x0004003du, 0x00000011u, 0x000036d7u, 0x000036d6u, 0x00040071u, 0x00000006u, 0x000036d8u, 0x000036d7u, 0x0003003eu, 0x000036aau, 0x000036d8u, 0x000300f7u, 0x000036dau, 0x00000000u, 0x000400fau, 0x000021d4u, 0x000036dbu, 0x000036dcu, 0x000200f8u, 0x000036dcu, 0x0003003eu, 0x000036aeu, 0x000036d8u, 0x00060050u, 0x0000030cu, 0x000036fau, 0x000036d8u, 0x000036d8u, 0x000036d8u, 0x000500c2u, 0x0000030cu, 0x000036fbu, 0x000036fau, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000036fdu, 0x000036fbu, 0x0000f3a8u, 0x0003003eu, 0x000036f6u, 0x000036fdu, 0x000500c4u, 0x0000030cu, 0x00003700u, 0x000036fdu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00003703u, 0x000036fdu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00003704u, 0x00003700u, 0x00003703u, 0x0003003eu, 0x000036f6u, 0x00003704u, 0x000500c7u, 0x00000006u, 0x00003706u, 0x000036d8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003707u, 0x00003706u, 0x000006c3u, 0x0003003eu, 0x000036f7u, 0x00003707u, 0x00040071u, 0x000004bau, 0x00003709u, 0x00003704u, 0x0004007cu, 0x000004b6u, 0x0000370au, 0x00003709u, 0x00040071u, 0x00000011u, 0x0000370cu, 0x00003707u, 0x0004007cu, 0x00000012u, 0x0000370du, 0x0000370cu, 0x00050051u, 0x00000012u, 0x0000370eu, 0x0000370au, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000370fu, 0x0000370au, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003710u, 0x0000370au, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003711u, 0x0000370eu, 0x0000370fu, 0x00003710u, 0x0000370du, 0x0003003eu, 0x000036f8u, 0x00003711u, 0x0003003eu, 0x000036acu, 0x00003711u, 0x000200f9u, 0x000036dau, 0x000200f8u, 0x000036dbu, 0x0003003eu, 0x000036adu, 0x000036d8u, 0x000500c2u, 0x00000006u, 0x000036e6u, 0x000036d8u, 0x0000025du, 0x0003003eu, 0x000036e2u, 0x000036e6u, 0x000500c7u, 0x00000006u, 0x000036e8u, 0x000036d8u, 0x000006c3u, 0x0003003eu, 0x000036e3u, 0x000036e8u, 0x00040071u, 0x00000011u, 0x000036eau, 0x000036e6u, 0x0004007cu, 0x00000012u, 0x000036ebu, 0x000036eau, 0x00040071u, 0x00000011u, 0x000036f3u, 0x000036e8u, 0x0004007cu, 0x00000012u, 0x000036f4u, 0x000036f3u, 0x00070050u, 0x00000013u, 0x000036f5u, 0x000036ebu, 0x000036ebu, 0x000036ebu, 0x000036f4u, 0x0003003eu, 0x000036e4u, 0x000036f5u, 0x0003003eu, 0x000036acu, 0x000036f5u, 0x000200f9u, 0x000036dau, 0x000200f8u, 0x000036dau, 0x000700f5u, 0x00000013u, 0x00008574u, 0x000036f5u, 0x000036dbu, 0x00003711u, 0x000036dcu, 0x0003003eu, 0x000036afu, 0x00008574u, 0x0003003eu, 0x00002ce5u, 0x00008574u, 0x00050050u, 0x000000efu, 0x00002effu, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f00u, 0x00002effu, 0x0003003eu, 0x00006ec2u, 0x00002caau, 0x0003003eu, 0x00006ec3u, 0x00002cacu, 0x0003003eu, 0x00002d0au, 0x000021c0u, 0x0003003eu, 0x00002d0bu, 0x00002f00u, 0x0003003eu, 0x00002d0cu, 0x00000386u, 0x0003003eu, 0x00002d0du, 0x00002e7cu, 0x0003003eu, 0x00002d0eu, 0x000021d4u, 0x00050041u, 0x00000007u, 0x0000371eu, 0x00002d0bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000371fu, 0x0000371eu, 0x00050084u, 0x00000006u, 0x00003720u, 0x00002cacu, 0x0000371fu, 0x00050080u, 0x00000006u, 0x00003721u, 0x00002caau, 0x00003720u, 0x0003003eu, 0x00003712u, 0x00003721u, 0x00050041u, 0x00000007u, 0x00003722u, 0x00002d0bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003723u, 0x00003722u, 0x00050080u, 0x00000006u, 0x00003725u, 0x00003721u, 0x00003723u, 0x0003003eu, 0x00003712u, 0x00003725u, 0x000500c7u, 0x00000006u, 0x00003727u, 0x00003725u, 0x00000f2bu, 0x0003003eu, 0x00003712u, 0x00003727u, 0x0003003eu, 0x00003713u, 0x00003727u, 0x0004003du, 0x00000006u, 0x0000372au, 0x0000371eu, 0x000500c7u, 0x00000006u, 0x0000372bu, 0x0000372au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000372cu, 0x0000372bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000372eu, 0x00003727u, 0x0000372cu, 0x0003003eu, 0x00003713u, 0x0000372eu, 0x000500c6u, 0x00000006u, 0x00003730u, 0x0000372eu, 0x00000464u, 0x0003003eu, 0x00003713u, 0x00003730u, 0x00080041u, 0x00000671u, 0x00003733u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003730u, 0x0004003du, 0x0000000fu, 0x00003734u, 0x00003733u, 0x00040071u, 0x00000006u, 0x00003735u, 0x00003734u, 0x0003003eu, 0x00003714u, 0x00003735u, 0x000500c4u, 0x00000006u, 0x00003737u, 0x00003735u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003739u, 0x00003737u, 0x00000386u, 0x0003003eu, 0x00003715u, 0x00003739u, 0x000500c6u, 0x00000006u, 0x0000373cu, 0x00003739u, 0x00002e7cu, 0x0003003eu, 0x00003715u, 0x0000373cu, 0x000500c5u, 0x00000006u, 0x0000373fu, 0x00000f5cu, 0x0000373cu, 0x00080041u, 0x00000692u, 0x00003740u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000373fu, 0x0004003du, 0x00000011u, 0x00003741u, 0x00003740u, 0x00040071u, 0x00000006u, 0x00003742u, 0x00003741u, 0x0003003eu, 0x00003714u, 0x00003742u, 0x000300f7u, 0x00003744u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00003745u, 0x00003746u, 0x000200f8u, 0x00003746u, 0x0003003eu, 0x00003718u, 0x00003742u, 0x00060050u, 0x0000030cu, 0x00003764u, 0x00003742u, 0x00003742u, 0x00003742u, 0x000500c2u, 0x0000030cu, 0x00003765u, 0x00003764u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00003767u, 0x00003765u, 0x0000f3a8u, 0x0003003eu, 0x00003760u, 0x00003767u, 0x000500c4u, 0x0000030cu, 0x0000376au, 0x00003767u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000376du, 0x00003767u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000376eu, 0x0000376au, 0x0000376du, 0x0003003eu, 0x00003760u, 0x0000376eu, 0x000500c7u, 0x00000006u, 0x00003770u, 0x00003742u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003771u, 0x00003770u, 0x000006c3u, 0x0003003eu, 0x00003761u, 0x00003771u, 0x00040071u, 0x000004bau, 0x00003773u, 0x0000376eu, 0x0004007cu, 0x000004b6u, 0x00003774u, 0x00003773u, 0x00040071u, 0x00000011u, 0x00003776u, 0x00003771u, 0x0004007cu, 0x00000012u, 0x00003777u, 0x00003776u, 0x00050051u, 0x00000012u, 0x00003778u, 0x00003774u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003779u, 0x00003774u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000377au, 0x00003774u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000377bu, 0x00003778u, 0x00003779u, 0x0000377au, 0x00003777u, 0x0003003eu, 0x00003762u, 0x0000377bu, 0x0003003eu, 0x00003716u, 0x0000377bu, 0x000200f9u, 0x00003744u, 0x000200f8u, 0x00003745u, 0x0003003eu, 0x00003717u, 0x00003742u, 0x000500c2u, 0x00000006u, 0x00003750u, 0x00003742u, 0x0000025du, 0x0003003eu, 0x0000374cu, 0x00003750u, 0x000500c7u, 0x00000006u, 0x00003752u, 0x00003742u, 0x000006c3u, 0x0003003eu, 0x0000374du, 0x00003752u, 0x00040071u, 0x00000011u, 0x00003754u, 0x00003750u, 0x0004007cu, 0x00000012u, 0x00003755u, 0x00003754u, 0x00040071u, 0x00000011u, 0x0000375du, 0x00003752u, 0x0004007cu, 0x00000012u, 0x0000375eu, 0x0000375du, 0x00070050u, 0x00000013u, 0x0000375fu, 0x00003755u, 0x00003755u, 0x00003755u, 0x0000375eu, 0x0003003eu, 0x0000374eu, 0x0000375fu, 0x0003003eu, 0x00003716u, 0x0000375fu, 0x000200f9u, 0x00003744u, 0x000200f8u, 0x00003744u, 0x000700f5u, 0x00000013u, 0x0000858cu, 0x0000375fu, 0x00003745u, 0x0000377bu, 0x00003746u, 0x0003003eu, 0x00003719u, 0x0000858cu, 0x0003003eu, 0x00002cedu, 0x0000858cu, 0x000200f9u, 0x00002ef2u, 0x000200f8u, 0x00002ef2u, 0x000700f5u, 0x00000013u, 0x00008893u, 0x00008859u, 0x00003670u, 0x0000858cu, 0x00003744u, 0x000700f5u, 0x00000013u, 0x0000879au, 0x0000875du, 0x00003670u, 0x00008574u, 0x00003744u, 0x000300f7u, 0x00002f07u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002f08u, 0x00002f07u, 0x000200f8u, 0x00002f08u, 0x00050050u, 0x000000efu, 0x00002f0bu, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002f0cu, 0x00002f0bu, 0x0003003eu, 0x00006ec6u, 0x00002caau, 0x0003003eu, 0x00006ec7u, 0x00002cacu, 0x0003003eu, 0x00002d10u, 0x000021c0u, 0x0003003eu, 0x00002d11u, 0x00002f0cu, 0x0003003eu, 0x00002d12u, 0x00000464u, 0x0003003eu, 0x00002d13u, 0x00002e7cu, 0x0003003eu, 0x00002d14u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00003788u, 0x00002d11u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003789u, 0x00003788u, 0x00050084u, 0x00000006u, 0x0000378au, 0x00002cacu, 0x00003789u, 0x00050080u, 0x00000006u, 0x0000378bu, 0x00002caau, 0x0000378au, 0x0003003eu, 0x0000377cu, 0x0000378bu, 0x00050041u, 0x00000007u, 0x0000378cu, 0x00002d11u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000378du, 0x0000378cu, 0x00050080u, 0x00000006u, 0x0000378fu, 0x0000378bu, 0x0000378du, 0x0003003eu, 0x0000377cu, 0x0000378fu, 0x000500c7u, 0x00000006u, 0x00003791u, 0x0000378fu, 0x00000f2bu, 0x0003003eu, 0x0000377cu, 0x00003791u, 0x0003003eu, 0x0000377du, 0x00003791u, 0x0004003du, 0x00000006u, 0x00003794u, 0x00003788u, 0x000500c7u, 0x00000006u, 0x00003795u, 0x00003794u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003796u, 0x00003795u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00003798u, 0x00003791u, 0x00003796u, 0x0003003eu, 0x0000377du, 0x00003798u, 0x000500c6u, 0x00000006u, 0x0000379au, 0x00003798u, 0x00000464u, 0x0003003eu, 0x0000377du, 0x0000379au, 0x00080041u, 0x00000671u, 0x0000379du, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000379au, 0x0004003du, 0x0000000fu, 0x0000379eu, 0x0000379du, 0x00040071u, 0x00000006u, 0x0000379fu, 0x0000379eu, 0x0003003eu, 0x0000377eu, 0x0000379fu, 0x000500c4u, 0x00000006u, 0x000037a1u, 0x0000379fu, 0x0000022du, 0x00050080u, 0x00000006u, 0x000037a3u, 0x000037a1u, 0x00000464u, 0x0003003eu, 0x0000377fu, 0x000037a3u, 0x000500c6u, 0x00000006u, 0x000037a6u, 0x000037a3u, 0x00002e7cu, 0x0003003eu, 0x0000377fu, 0x000037a6u, 0x000500c5u, 0x00000006u, 0x000037a9u, 0x00000f5cu, 0x000037a6u, 0x00080041u, 0x00000692u, 0x000037aau, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000037a9u, 0x0004003du, 0x00000011u, 0x000037abu, 0x000037aau, 0x00040071u, 0x00000006u, 0x000037acu, 0x000037abu, 0x0003003eu, 0x0000377eu, 0x000037acu, 0x000300f7u, 0x000037aeu, 0x00000000u, 0x000400fau, 0x000021d4u, 0x000037afu, 0x000037b0u, 0x000200f8u, 0x000037b0u, 0x0003003eu, 0x00003782u, 0x000037acu, 0x00060050u, 0x0000030cu, 0x000037ceu, 0x000037acu, 0x000037acu, 0x000037acu, 0x000500c2u, 0x0000030cu, 0x000037cfu, 0x000037ceu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000037d1u, 0x000037cfu, 0x0000f3a8u, 0x0003003eu, 0x000037cau, 0x000037d1u, 0x000500c4u, 0x0000030cu, 0x000037d4u, 0x000037d1u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000037d7u, 0x000037d1u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000037d8u, 0x000037d4u, 0x000037d7u, 0x0003003eu, 0x000037cau, 0x000037d8u, 0x000500c7u, 0x00000006u, 0x000037dau, 0x000037acu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000037dbu, 0x000037dau, 0x000006c3u, 0x0003003eu, 0x000037cbu, 0x000037dbu, 0x00040071u, 0x000004bau, 0x000037ddu, 0x000037d8u, 0x0004007cu, 0x000004b6u, 0x000037deu, 0x000037ddu, 0x00040071u, 0x00000011u, 0x000037e0u, 0x000037dbu, 0x0004007cu, 0x00000012u, 0x000037e1u, 0x000037e0u, 0x00050051u, 0x00000012u, 0x000037e2u, 0x000037deu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000037e3u, 0x000037deu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000037e4u, 0x000037deu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000037e5u, 0x000037e2u, 0x000037e3u, 0x000037e4u, 0x000037e1u, 0x0003003eu, 0x000037ccu, 0x000037e5u, 0x0003003eu, 0x00003780u, 0x000037e5u, 0x000200f9u, 0x000037aeu, 0x000200f8u, 0x000037afu, 0x0003003eu, 0x00003781u, 0x000037acu, 0x000500c2u, 0x00000006u, 0x000037bau, 0x000037acu, 0x0000025du, 0x0003003eu, 0x000037b6u, 0x000037bau, 0x000500c7u, 0x00000006u, 0x000037bcu, 0x000037acu, 0x000006c3u, 0x0003003eu, 0x000037b7u, 0x000037bcu, 0x00040071u, 0x00000011u, 0x000037beu, 0x000037bau, 0x0004007cu, 0x00000012u, 0x000037bfu, 0x000037beu, 0x00040071u, 0x00000011u, 0x000037c7u, 0x000037bcu, 0x0004007cu, 0x00000012u, 0x000037c8u, 0x000037c7u, 0x00070050u, 0x00000013u, 0x000037c9u, 0x000037bfu, 0x000037bfu, 0x000037bfu, 0x000037c8u, 0x0003003eu, 0x000037b8u, 0x000037c9u, 0x0003003eu, 0x00003780u, 0x000037c9u, 0x000200f9u, 0x000037aeu, 0x000200f8u, 0x000037aeu, 0x000700f5u, 0x00000013u, 0x000085b9u, 0x000037c9u, 0x000037afu, 0x000037e5u, 0x000037b0u, 0x0003003eu, 0x00003783u, 0x000085b9u, 0x0003003eu, 0x00002cf5u, 0x000085b9u, 0x000200f9u, 0x00002f07u, 0x000200f8u, 0x00002f07u, 0x000700f5u, 0x00000013u, 0x0000890eu, 0x000088d3u, 0x00002ef2u, 0x000085b9u, 0x000037aeu, 0x000200f9u, 0x00002e81u, 0x000200f8u, 0x00002e83u, 0x0004007cu, 0x000000b0u, 0x00002eb1u, 0x000083d3u, 0x00040071u, 0x00000006u, 0x00002eb4u, 0x00002cb2u, 0x000600a9u, 0x00000008u, 0x00002eb6u, 0x00002e63u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00002eb7u, 0x00002eb6u, 0x0003003eu, 0x00006eaau, 0x00002caau, 0x0003003eu, 0x00006eabu, 0x00002cacu, 0x0003003eu, 0x00002cdfu, 0x000021c0u, 0x0003003eu, 0x00002ce0u, 0x00002eb1u, 0x0003003eu, 0x00002ce1u, 0x00002eb4u, 0x0003003eu, 0x00002ce2u, 0x00002eb7u, 0x0003003eu, 0x00002ce3u, 0x00002e7cu, 0x0003003eu, 0x00002ce4u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00003467u, 0x00002ce0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003468u, 0x00003467u, 0x00050084u, 0x00000006u, 0x00003469u, 0x00002cacu, 0x00003468u, 0x00050080u, 0x00000006u, 0x0000346au, 0x00002caau, 0x00003469u, 0x0003003eu, 0x0000345au, 0x0000346au, 0x00050041u, 0x00000007u, 0x0000346bu, 0x00002ce0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000346cu, 0x0000346bu, 0x000500c2u, 0x00000006u, 0x0000346du, 0x0000346cu, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000346fu, 0x0000346au, 0x0000346du, 0x0003003eu, 0x0000345au, 0x0000346fu, 0x000500c7u, 0x00000006u, 0x00003471u, 0x0000346fu, 0x00000f2bu, 0x0003003eu, 0x0000345au, 0x00003471u, 0x0004003du, 0x00000006u, 0x00003473u, 0x0000346bu, 0x000400c8u, 0x00000006u, 0x00003474u, 0x00003473u, 0x000500c7u, 0x00000006u, 0x00003475u, 0x00003474u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003476u, 0x00003475u, 0x00000704u, 0x0003003eu, 0x0000345bu, 0x00003476u, 0x0003003eu, 0x0000345cu, 0x00003471u, 0x0004003du, 0x00000006u, 0x00003479u, 0x00003467u, 0x000500c7u, 0x00000006u, 0x0000347au, 0x00003479u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000347bu, 0x0000347au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000347du, 0x00003471u, 0x0000347bu, 0x0003003eu, 0x0000345cu, 0x0000347du, 0x000500c6u, 0x00000006u, 0x0000347fu, 0x0000347du, 0x00000464u, 0x0003003eu, 0x0000345cu, 0x0000347fu, 0x00080041u, 0x00000671u, 0x00003482u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000347fu, 0x0004003du, 0x0000000fu, 0x00003483u, 0x00003482u, 0x00040071u, 0x00000006u, 0x00003484u, 0x00003483u, 0x0003003eu, 0x0000345du, 0x00003484u, 0x000500c2u, 0x00000006u, 0x00003487u, 0x00003484u, 0x00003476u, 0x000500c7u, 0x00000006u, 0x00003488u, 0x00003487u, 0x00000e96u, 0x0003003eu, 0x0000345du, 0x00003488u, 0x000500c4u, 0x00000006u, 0x0000348au, 0x00002eb4u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000348cu, 0x00003488u, 0x0000348au, 0x0003003eu, 0x0000345du, 0x0000348cu, 0x000500c4u, 0x00000006u, 0x0000348eu, 0x0000348cu, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003490u, 0x0000348eu, 0x00002eb7u, 0x0003003eu, 0x0000345eu, 0x00003490u, 0x000500c6u, 0x00000006u, 0x00003493u, 0x00003490u, 0x00002e7cu, 0x0003003eu, 0x0000345eu, 0x00003493u, 0x000500c5u, 0x00000006u, 0x00003496u, 0x00000f5cu, 0x00003493u, 0x00080041u, 0x00000692u, 0x00003497u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003496u, 0x0004003du, 0x00000011u, 0x00003498u, 0x00003497u, 0x00040071u, 0x00000006u, 0x00003499u, 0x00003498u, 0x0003003eu, 0x0000345du, 0x00003499u, 0x000300f7u, 0x0000349bu, 0x00000000u, 0x000400fau, 0x000021d4u, 0x0000349cu, 0x0000349du, 0x000200f8u, 0x0000349du, 0x0003003eu, 0x00003461u, 0x00003499u, 0x00060050u, 0x0000030cu, 0x000034bbu, 0x00003499u, 0x00003499u, 0x00003499u, 0x000500c2u, 0x0000030cu, 0x000034bcu, 0x000034bbu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000034beu, 0x000034bcu, 0x0000f3a8u, 0x0003003eu, 0x000034b7u, 0x000034beu, 0x000500c4u, 0x0000030cu, 0x000034c1u, 0x000034beu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000034c4u, 0x000034beu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000034c5u, 0x000034c1u, 0x000034c4u, 0x0003003eu, 0x000034b7u, 0x000034c5u, 0x000500c7u, 0x00000006u, 0x000034c7u, 0x00003499u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000034c8u, 0x000034c7u, 0x000006c3u, 0x0003003eu, 0x000034b8u, 0x000034c8u, 0x00040071u, 0x000004bau, 0x000034cau, 0x000034c5u, 0x0004007cu, 0x000004b6u, 0x000034cbu, 0x000034cau, 0x00040071u, 0x00000011u, 0x000034cdu, 0x000034c8u, 0x0004007cu, 0x00000012u, 0x000034ceu, 0x000034cdu, 0x00050051u, 0x00000012u, 0x000034cfu, 0x000034cbu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000034d0u, 0x000034cbu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000034d1u, 0x000034cbu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000034d2u, 0x000034cfu, 0x000034d0u, 0x000034d1u, 0x000034ceu, 0x0003003eu, 0x000034b9u, 0x000034d2u, 0x0003003eu, 0x0000345fu, 0x000034d2u, 0x000200f9u, 0x0000349bu, 0x000200f8u, 0x0000349cu, 0x0003003eu, 0x00003460u, 0x00003499u, 0x000500c2u, 0x00000006u, 0x000034a7u, 0x00003499u, 0x0000025du, 0x0003003eu, 0x000034a3u, 0x000034a7u, 0x000500c7u, 0x00000006u, 0x000034a9u, 0x00003499u, 0x000006c3u, 0x0003003eu, 0x000034a4u, 0x000034a9u, 0x00040071u, 0x00000011u, 0x000034abu, 0x000034a7u, 0x0004007cu, 0x00000012u, 0x000034acu, 0x000034abu, 0x00040071u, 0x00000011u, 0x000034b4u, 0x000034a9u, 0x0004007cu, 0x00000012u, 0x000034b5u, 0x000034b4u, 0x00070050u, 0x00000013u, 0x000034b6u, 0x000034acu, 0x000034acu, 0x000034acu, 0x000034b5u, 0x0003003eu, 0x000034a5u, 0x000034b6u, 0x0003003eu, 0x0000345fu, 0x000034b6u, 0x000200f9u, 0x0000349bu, 0x000200f8u, 0x0000349bu, 0x000700f5u, 0x00000013u, 0x000085bau, 0x000034b6u, 0x0000349cu, 0x000034d2u, 0x0000349du, 0x0003003eu, 0x00003462u, 0x000085bau, 0x0003003eu, 0x00002cddu, 0x000085bau, 0x000300f7u, 0x00002ebeu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002ebfu, 0x00002ebeu, 0x000200f8u, 0x00002ebfu, 0x00050050u, 0x000000efu, 0x00002ec2u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002ec3u, 0x00002ec2u, 0x0003003eu, 0x00006eaeu, 0x00002caau, 0x0003003eu, 0x00006eafu, 0x00002cacu, 0x0003003eu, 0x00002ce7u, 0x000021c0u, 0x0003003eu, 0x00002ce8u, 0x00002ec3u, 0x0003003eu, 0x00002ce9u, 0x00002eb4u, 0x0003003eu, 0x00002ceau, 0x0000045cu, 0x0003003eu, 0x00002cebu, 0x00002e7cu, 0x0003003eu, 0x00002cecu, 0x000021d4u, 0x00050041u, 0x00000007u, 0x000034e0u, 0x00002ce8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000034e1u, 0x000034e0u, 0x00050084u, 0x00000006u, 0x000034e2u, 0x00002cacu, 0x000034e1u, 0x00050080u, 0x00000006u, 0x000034e3u, 0x00002caau, 0x000034e2u, 0x0003003eu, 0x000034d3u, 0x000034e3u, 0x00050041u, 0x00000007u, 0x000034e4u, 0x00002ce8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000034e5u, 0x000034e4u, 0x000500c2u, 0x00000006u, 0x000034e6u, 0x000034e5u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000034e8u, 0x000034e3u, 0x000034e6u, 0x0003003eu, 0x000034d3u, 0x000034e8u, 0x000500c7u, 0x00000006u, 0x000034eau, 0x000034e8u, 0x00000f2bu, 0x0003003eu, 0x000034d3u, 0x000034eau, 0x0004003du, 0x00000006u, 0x000034ecu, 0x000034e4u, 0x000400c8u, 0x00000006u, 0x000034edu, 0x000034ecu, 0x000500c7u, 0x00000006u, 0x000034eeu, 0x000034edu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000034efu, 0x000034eeu, 0x00000704u, 0x0003003eu, 0x000034d4u, 0x000034efu, 0x0003003eu, 0x000034d5u, 0x000034eau, 0x0004003du, 0x00000006u, 0x000034f2u, 0x000034e0u, 0x000500c7u, 0x00000006u, 0x000034f3u, 0x000034f2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000034f4u, 0x000034f3u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000034f6u, 0x000034eau, 0x000034f4u, 0x0003003eu, 0x000034d5u, 0x000034f6u, 0x000500c6u, 0x00000006u, 0x000034f8u, 0x000034f6u, 0x00000464u, 0x0003003eu, 0x000034d5u, 0x000034f8u, 0x00080041u, 0x00000671u, 0x000034fbu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000034f8u, 0x0004003du, 0x0000000fu, 0x000034fcu, 0x000034fbu, 0x00040071u, 0x00000006u, 0x000034fdu, 0x000034fcu, 0x0003003eu, 0x000034d6u, 0x000034fdu, 0x000500c2u, 0x00000006u, 0x00003500u, 0x000034fdu, 0x000034efu, 0x000500c7u, 0x00000006u, 0x00003501u, 0x00003500u, 0x00000e96u, 0x0003003eu, 0x000034d6u, 0x00003501u, 0x000500c5u, 0x00000006u, 0x00003505u, 0x00003501u, 0x0000348au, 0x0003003eu, 0x000034d6u, 0x00003505u, 0x000500c4u, 0x00000006u, 0x00003507u, 0x00003505u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003509u, 0x00003507u, 0x0000045cu, 0x0003003eu, 0x000034d7u, 0x00003509u, 0x000500c6u, 0x00000006u, 0x0000350cu, 0x00003509u, 0x00002e7cu, 0x0003003eu, 0x000034d7u, 0x0000350cu, 0x000500c5u, 0x00000006u, 0x0000350fu, 0x00000f5cu, 0x0000350cu, 0x00080041u, 0x00000692u, 0x00003510u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000350fu, 0x0004003du, 0x00000011u, 0x00003511u, 0x00003510u, 0x00040071u, 0x00000006u, 0x00003512u, 0x00003511u, 0x0003003eu, 0x000034d6u, 0x00003512u, 0x000300f7u, 0x00003514u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00003515u, 0x00003516u, 0x000200f8u, 0x00003516u, 0x0003003eu, 0x000034dau, 0x00003512u, 0x00060050u, 0x0000030cu, 0x00003534u, 0x00003512u, 0x00003512u, 0x00003512u, 0x000500c2u, 0x0000030cu, 0x00003535u, 0x00003534u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00003537u, 0x00003535u, 0x0000f3a8u, 0x0003003eu, 0x00003530u, 0x00003537u, 0x000500c4u, 0x0000030cu, 0x0000353au, 0x00003537u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000353du, 0x00003537u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000353eu, 0x0000353au, 0x0000353du, 0x0003003eu, 0x00003530u, 0x0000353eu, 0x000500c7u, 0x00000006u, 0x00003540u, 0x00003512u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003541u, 0x00003540u, 0x000006c3u, 0x0003003eu, 0x00003531u, 0x00003541u, 0x00040071u, 0x000004bau, 0x00003543u, 0x0000353eu, 0x0004007cu, 0x000004b6u, 0x00003544u, 0x00003543u, 0x00040071u, 0x00000011u, 0x00003546u, 0x00003541u, 0x0004007cu, 0x00000012u, 0x00003547u, 0x00003546u, 0x00050051u, 0x00000012u, 0x00003548u, 0x00003544u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003549u, 0x00003544u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000354au, 0x00003544u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000354bu, 0x00003548u, 0x00003549u, 0x0000354au, 0x00003547u, 0x0003003eu, 0x00003532u, 0x0000354bu, 0x0003003eu, 0x000034d8u, 0x0000354bu, 0x000200f9u, 0x00003514u, 0x000200f8u, 0x00003515u, 0x0003003eu, 0x000034d9u, 0x00003512u, 0x000500c2u, 0x00000006u, 0x00003520u, 0x00003512u, 0x0000025du, 0x0003003eu, 0x0000351cu, 0x00003520u, 0x000500c7u, 0x00000006u, 0x00003522u, 0x00003512u, 0x000006c3u, 0x0003003eu, 0x0000351du, 0x00003522u, 0x00040071u, 0x00000011u, 0x00003524u, 0x00003520u, 0x0004007cu, 0x00000012u, 0x00003525u, 0x00003524u, 0x00040071u, 0x00000011u, 0x0000352du, 0x00003522u, 0x0004007cu, 0x00000012u, 0x0000352eu, 0x0000352du, 0x00070050u, 0x00000013u, 0x0000352fu, 0x00003525u, 0x00003525u, 0x00003525u, 0x0000352eu, 0x0003003eu, 0x0000351eu, 0x0000352fu, 0x0003003eu, 0x000034d8u, 0x0000352fu, 0x000200f9u, 0x00003514u, 0x000200f8u, 0x00003514u, 0x000700f5u, 0x00000013u, 0x000085cfu, 0x0000352fu, 0x00003515u, 0x0000354bu, 0x00003516u, 0x0003003eu, 0x000034dbu, 0x000085cfu, 0x0003003eu, 0x00002ce5u, 0x000085cfu, 0x00050050u, 0x000000efu, 0x00002eceu, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002ecfu, 0x00002eceu, 0x0003003eu, 0x00006eb2u, 0x00002caau, 0x0003003eu, 0x00006eb3u, 0x00002cacu, 0x0003003eu, 0x00002cefu, 0x000021c0u, 0x0003003eu, 0x00002cf0u, 0x00002ecfu, 0x0003003eu, 0x00002cf1u, 0x00002eb4u, 0x0003003eu, 0x00002cf2u, 0x00000386u, 0x0003003eu, 0x00002cf3u, 0x00002e7cu, 0x0003003eu, 0x00002cf4u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00003559u, 0x00002cf0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000355au, 0x00003559u, 0x00050084u, 0x00000006u, 0x0000355bu, 0x00002cacu, 0x0000355au, 0x00050080u, 0x00000006u, 0x0000355cu, 0x00002caau, 0x0000355bu, 0x0003003eu, 0x0000354cu, 0x0000355cu, 0x00050041u, 0x00000007u, 0x0000355du, 0x00002cf0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000355eu, 0x0000355du, 0x000500c2u, 0x00000006u, 0x0000355fu, 0x0000355eu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00003561u, 0x0000355cu, 0x0000355fu, 0x0003003eu, 0x0000354cu, 0x00003561u, 0x000500c7u, 0x00000006u, 0x00003563u, 0x00003561u, 0x00000f2bu, 0x0003003eu, 0x0000354cu, 0x00003563u, 0x0004003du, 0x00000006u, 0x00003565u, 0x0000355du, 0x000400c8u, 0x00000006u, 0x00003566u, 0x00003565u, 0x000500c7u, 0x00000006u, 0x00003567u, 0x00003566u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003568u, 0x00003567u, 0x00000704u, 0x0003003eu, 0x0000354du, 0x00003568u, 0x0003003eu, 0x0000354eu, 0x00003563u, 0x0004003du, 0x00000006u, 0x0000356bu, 0x00003559u, 0x000500c7u, 0x00000006u, 0x0000356cu, 0x0000356bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000356du, 0x0000356cu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000356fu, 0x00003563u, 0x0000356du, 0x0003003eu, 0x0000354eu, 0x0000356fu, 0x000500c6u, 0x00000006u, 0x00003571u, 0x0000356fu, 0x00000464u, 0x0003003eu, 0x0000354eu, 0x00003571u, 0x00080041u, 0x00000671u, 0x00003574u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003571u, 0x0004003du, 0x0000000fu, 0x00003575u, 0x00003574u, 0x00040071u, 0x00000006u, 0x00003576u, 0x00003575u, 0x0003003eu, 0x0000354fu, 0x00003576u, 0x000500c2u, 0x00000006u, 0x00003579u, 0x00003576u, 0x00003568u, 0x000500c7u, 0x00000006u, 0x0000357au, 0x00003579u, 0x00000e96u, 0x0003003eu, 0x0000354fu, 0x0000357au, 0x000500c5u, 0x00000006u, 0x0000357eu, 0x0000357au, 0x0000348au, 0x0003003eu, 0x0000354fu, 0x0000357eu, 0x000500c4u, 0x00000006u, 0x00003580u, 0x0000357eu, 0x0000022du, 0x00050080u, 0x00000006u, 0x00003582u, 0x00003580u, 0x00000386u, 0x0003003eu, 0x00003550u, 0x00003582u, 0x000500c6u, 0x00000006u, 0x00003585u, 0x00003582u, 0x00002e7cu, 0x0003003eu, 0x00003550u, 0x00003585u, 0x000500c5u, 0x00000006u, 0x00003588u, 0x00000f5cu, 0x00003585u, 0x00080041u, 0x00000692u, 0x00003589u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003588u, 0x0004003du, 0x00000011u, 0x0000358au, 0x00003589u, 0x00040071u, 0x00000006u, 0x0000358bu, 0x0000358au, 0x0003003eu, 0x0000354fu, 0x0000358bu, 0x000300f7u, 0x0000358du, 0x00000000u, 0x000400fau, 0x000021d4u, 0x0000358eu, 0x0000358fu, 0x000200f8u, 0x0000358fu, 0x0003003eu, 0x00003553u, 0x0000358bu, 0x00060050u, 0x0000030cu, 0x000035adu, 0x0000358bu, 0x0000358bu, 0x0000358bu, 0x000500c2u, 0x0000030cu, 0x000035aeu, 0x000035adu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000035b0u, 0x000035aeu, 0x0000f3a8u, 0x0003003eu, 0x000035a9u, 0x000035b0u, 0x000500c4u, 0x0000030cu, 0x000035b3u, 0x000035b0u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000035b6u, 0x000035b0u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000035b7u, 0x000035b3u, 0x000035b6u, 0x0003003eu, 0x000035a9u, 0x000035b7u, 0x000500c7u, 0x00000006u, 0x000035b9u, 0x0000358bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000035bau, 0x000035b9u, 0x000006c3u, 0x0003003eu, 0x000035aau, 0x000035bau, 0x00040071u, 0x000004bau, 0x000035bcu, 0x000035b7u, 0x0004007cu, 0x000004b6u, 0x000035bdu, 0x000035bcu, 0x00040071u, 0x00000011u, 0x000035bfu, 0x000035bau, 0x0004007cu, 0x00000012u, 0x000035c0u, 0x000035bfu, 0x00050051u, 0x00000012u, 0x000035c1u, 0x000035bdu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000035c2u, 0x000035bdu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000035c3u, 0x000035bdu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000035c4u, 0x000035c1u, 0x000035c2u, 0x000035c3u, 0x000035c0u, 0x0003003eu, 0x000035abu, 0x000035c4u, 0x0003003eu, 0x00003551u, 0x000035c4u, 0x000200f9u, 0x0000358du, 0x000200f8u, 0x0000358eu, 0x0003003eu, 0x00003552u, 0x0000358bu, 0x000500c2u, 0x00000006u, 0x00003599u, 0x0000358bu, 0x0000025du, 0x0003003eu, 0x00003595u, 0x00003599u, 0x000500c7u, 0x00000006u, 0x0000359bu, 0x0000358bu, 0x000006c3u, 0x0003003eu, 0x00003596u, 0x0000359bu, 0x00040071u, 0x00000011u, 0x0000359du, 0x00003599u, 0x0004007cu, 0x00000012u, 0x0000359eu, 0x0000359du, 0x00040071u, 0x00000011u, 0x000035a6u, 0x0000359bu, 0x0004007cu, 0x00000012u, 0x000035a7u, 0x000035a6u, 0x00070050u, 0x00000013u, 0x000035a8u, 0x0000359eu, 0x0000359eu, 0x0000359eu, 0x000035a7u, 0x0003003eu, 0x00003597u, 0x000035a8u, 0x0003003eu, 0x00003551u, 0x000035a8u, 0x000200f9u, 0x0000358du, 0x000200f8u, 0x0000358du, 0x000700f5u, 0x00000013u, 0x000085e5u, 0x000035a8u, 0x0000358eu, 0x000035c4u, 0x0000358fu, 0x0003003eu, 0x00003554u, 0x000085e5u, 0x0003003eu, 0x00002cedu, 0x000085e5u, 0x000200f9u, 0x00002ebeu, 0x000200f8u, 0x00002ebeu, 0x000700f5u, 0x00000013u, 0x0000888fu, 0x00008859u, 0x0000349bu, 0x000085e5u, 0x0000358du, 0x000700f5u, 0x00000013u, 0x00008795u, 0x0000875du, 0x0000349bu, 0x000085cfu, 0x0000358du, 0x000300f7u, 0x00002ed9u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002edau, 0x00002ed9u, 0x000200f8u, 0x00002edau, 0x00050050u, 0x000000efu, 0x00002eddu, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002edeu, 0x00002eddu, 0x0003003eu, 0x00006eb6u, 0x00002caau, 0x0003003eu, 0x00006eb7u, 0x00002cacu, 0x0003003eu, 0x00002cf7u, 0x000021c0u, 0x0003003eu, 0x00002cf8u, 0x00002edeu, 0x0003003eu, 0x00002cf9u, 0x00002eb4u, 0x0003003eu, 0x00002cfau, 0x00000464u, 0x0003003eu, 0x00002cfbu, 0x00002e7cu, 0x0003003eu, 0x00002cfcu, 0x000021d4u, 0x00050041u, 0x00000007u, 0x000035d2u, 0x00002cf8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000035d3u, 0x000035d2u, 0x00050084u, 0x00000006u, 0x000035d4u, 0x00002cacu, 0x000035d3u, 0x00050080u, 0x00000006u, 0x000035d5u, 0x00002caau, 0x000035d4u, 0x0003003eu, 0x000035c5u, 0x000035d5u, 0x00050041u, 0x00000007u, 0x000035d6u, 0x00002cf8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000035d7u, 0x000035d6u, 0x000500c2u, 0x00000006u, 0x000035d8u, 0x000035d7u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000035dau, 0x000035d5u, 0x000035d8u, 0x0003003eu, 0x000035c5u, 0x000035dau, 0x000500c7u, 0x00000006u, 0x000035dcu, 0x000035dau, 0x00000f2bu, 0x0003003eu, 0x000035c5u, 0x000035dcu, 0x0004003du, 0x00000006u, 0x000035deu, 0x000035d6u, 0x000400c8u, 0x00000006u, 0x000035dfu, 0x000035deu, 0x000500c7u, 0x00000006u, 0x000035e0u, 0x000035dfu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000035e1u, 0x000035e0u, 0x00000704u, 0x0003003eu, 0x000035c6u, 0x000035e1u, 0x0003003eu, 0x000035c7u, 0x000035dcu, 0x0004003du, 0x00000006u, 0x000035e4u, 0x000035d2u, 0x000500c7u, 0x00000006u, 0x000035e5u, 0x000035e4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000035e6u, 0x000035e5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000035e8u, 0x000035dcu, 0x000035e6u, 0x0003003eu, 0x000035c7u, 0x000035e8u, 0x000500c6u, 0x00000006u, 0x000035eau, 0x000035e8u, 0x00000464u, 0x0003003eu, 0x000035c7u, 0x000035eau, 0x00080041u, 0x00000671u, 0x000035edu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000035eau, 0x0004003du, 0x0000000fu, 0x000035eeu, 0x000035edu, 0x00040071u, 0x00000006u, 0x000035efu, 0x000035eeu, 0x0003003eu, 0x000035c8u, 0x000035efu, 0x000500c2u, 0x00000006u, 0x000035f2u, 0x000035efu, 0x000035e1u, 0x000500c7u, 0x00000006u, 0x000035f3u, 0x000035f2u, 0x00000e96u, 0x0003003eu, 0x000035c8u, 0x000035f3u, 0x000500c5u, 0x00000006u, 0x000035f7u, 0x000035f3u, 0x0000348au, 0x0003003eu, 0x000035c8u, 0x000035f7u, 0x000500c4u, 0x00000006u, 0x000035f9u, 0x000035f7u, 0x0000022du, 0x00050080u, 0x00000006u, 0x000035fbu, 0x000035f9u, 0x00000464u, 0x0003003eu, 0x000035c9u, 0x000035fbu, 0x000500c6u, 0x00000006u, 0x000035feu, 0x000035fbu, 0x00002e7cu, 0x0003003eu, 0x000035c9u, 0x000035feu, 0x000500c5u, 0x00000006u, 0x00003601u, 0x00000f5cu, 0x000035feu, 0x00080041u, 0x00000692u, 0x00003602u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003601u, 0x0004003du, 0x00000011u, 0x00003603u, 0x00003602u, 0x00040071u, 0x00000006u, 0x00003604u, 0x00003603u, 0x0003003eu, 0x000035c8u, 0x00003604u, 0x000300f7u, 0x00003606u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00003607u, 0x00003608u, 0x000200f8u, 0x00003608u, 0x0003003eu, 0x000035ccu, 0x00003604u, 0x00060050u, 0x0000030cu, 0x00003626u, 0x00003604u, 0x00003604u, 0x00003604u, 0x000500c2u, 0x0000030cu, 0x00003627u, 0x00003626u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00003629u, 0x00003627u, 0x0000f3a8u, 0x0003003eu, 0x00003622u, 0x00003629u, 0x000500c4u, 0x0000030cu, 0x0000362cu, 0x00003629u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000362fu, 0x00003629u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00003630u, 0x0000362cu, 0x0000362fu, 0x0003003eu, 0x00003622u, 0x00003630u, 0x000500c7u, 0x00000006u, 0x00003632u, 0x00003604u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003633u, 0x00003632u, 0x000006c3u, 0x0003003eu, 0x00003623u, 0x00003633u, 0x00040071u, 0x000004bau, 0x00003635u, 0x00003630u, 0x0004007cu, 0x000004b6u, 0x00003636u, 0x00003635u, 0x00040071u, 0x00000011u, 0x00003638u, 0x00003633u, 0x0004007cu, 0x00000012u, 0x00003639u, 0x00003638u, 0x00050051u, 0x00000012u, 0x0000363au, 0x00003636u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000363bu, 0x00003636u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000363cu, 0x00003636u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000363du, 0x0000363au, 0x0000363bu, 0x0000363cu, 0x00003639u, 0x0003003eu, 0x00003624u, 0x0000363du, 0x0003003eu, 0x000035cau, 0x0000363du, 0x000200f9u, 0x00003606u, 0x000200f8u, 0x00003607u, 0x0003003eu, 0x000035cbu, 0x00003604u, 0x000500c2u, 0x00000006u, 0x00003612u, 0x00003604u, 0x0000025du, 0x0003003eu, 0x0000360eu, 0x00003612u, 0x000500c7u, 0x00000006u, 0x00003614u, 0x00003604u, 0x000006c3u, 0x0003003eu, 0x0000360fu, 0x00003614u, 0x00040071u, 0x00000011u, 0x00003616u, 0x00003612u, 0x0004007cu, 0x00000012u, 0x00003617u, 0x00003616u, 0x00040071u, 0x00000011u, 0x0000361fu, 0x00003614u, 0x0004007cu, 0x00000012u, 0x00003620u, 0x0000361fu, 0x00070050u, 0x00000013u, 0x00003621u, 0x00003617u, 0x00003617u, 0x00003617u, 0x00003620u, 0x0003003eu, 0x00003610u, 0x00003621u, 0x0003003eu, 0x000035cau, 0x00003621u, 0x000200f9u, 0x00003606u, 0x000200f8u, 0x00003606u, 0x000700f5u, 0x00000013u, 0x00008611u, 0x00003621u, 0x00003607u, 0x0000363du, 0x00003608u, 0x0003003eu, 0x000035cdu, 0x00008611u, 0x0003003eu, 0x00002cf5u, 0x00008611u, 0x000200f9u, 0x00002ed9u, 0x000200f8u, 0x00002ed9u, 0x000700f5u, 0x00000013u, 0x00008909u, 0x000088d3u, 0x00002ebeu, 0x00008611u, 0x00003606u, 0x000200f9u, 0x00002e81u, 0x000200f8u, 0x00002e82u, 0x0004007cu, 0x000000b0u, 0x00002e86u, 0x000083d3u, 0x000600a9u, 0x00000008u, 0x00002e88u, 0x00002e63u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00002e89u, 0x00002e88u, 0x0003003eu, 0x00006ecau, 0x00002caau, 0x0003003eu, 0x00006ecbu, 0x00002cacu, 0x0003003eu, 0x00002d16u, 0x000021c0u, 0x0003003eu, 0x00002d17u, 0x00002e86u, 0x0003003eu, 0x00002d18u, 0x00002e89u, 0x0003003eu, 0x00002d19u, 0x00002e7cu, 0x0003003eu, 0x00002d1au, 0x000021d4u, 0x00050041u, 0x00000007u, 0x000032b2u, 0x00002d17u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000032b3u, 0x000032b2u, 0x00050084u, 0x00000006u, 0x000032b4u, 0x00002cacu, 0x000032b3u, 0x00050080u, 0x00000006u, 0x000032b5u, 0x00002caau, 0x000032b4u, 0x0003003eu, 0x000032a6u, 0x000032b5u, 0x00050041u, 0x00000007u, 0x000032b6u, 0x00002d17u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000032b7u, 0x000032b6u, 0x00050084u, 0x00000006u, 0x000032b8u, 0x000032b7u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000032bau, 0x000032b5u, 0x000032b8u, 0x0003003eu, 0x000032a6u, 0x000032bau, 0x000500c7u, 0x00000006u, 0x000032bcu, 0x000032bau, 0x00000f2bu, 0x0003003eu, 0x000032a6u, 0x000032bcu, 0x000500c2u, 0x00000006u, 0x000032beu, 0x000032bcu, 0x0000022au, 0x0003003eu, 0x000032a7u, 0x000032beu, 0x0004003du, 0x00000006u, 0x000032c0u, 0x000032b2u, 0x000500c7u, 0x00000006u, 0x000032c1u, 0x000032c0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000032c2u, 0x000032c1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000032c4u, 0x000032beu, 0x000032c2u, 0x0003003eu, 0x000032a7u, 0x000032c4u, 0x000500c6u, 0x00000006u, 0x000032c6u, 0x000032c4u, 0x0000045cu, 0x0003003eu, 0x000032a7u, 0x000032c6u, 0x00080041u, 0x00000692u, 0x000032c9u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000032c6u, 0x0004003du, 0x00000011u, 0x000032cau, 0x000032c9u, 0x00040071u, 0x00000006u, 0x000032cbu, 0x000032cau, 0x0003003eu, 0x000032a8u, 0x000032cbu, 0x000500c2u, 0x00000006u, 0x000032cdu, 0x000032cbu, 0x00000239u, 0x000500c7u, 0x00000006u, 0x000032ceu, 0x000032cdu, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x000032d0u, 0x000032ceu, 0x00002e89u, 0x0003003eu, 0x000032a9u, 0x000032d0u, 0x000500c6u, 0x00000006u, 0x000032d3u, 0x000032d0u, 0x00002e7cu, 0x0003003eu, 0x000032a9u, 0x000032d3u, 0x000500c5u, 0x00000006u, 0x000032d6u, 0x00000f5cu, 0x000032d3u, 0x00080041u, 0x00000692u, 0x000032d7u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000032d6u, 0x0004003du, 0x00000011u, 0x000032d8u, 0x000032d7u, 0x00040071u, 0x00000006u, 0x000032d9u, 0x000032d8u, 0x0003003eu, 0x000032a8u, 0x000032d9u, 0x000300f7u, 0x000032dbu, 0x00000000u, 0x000400fau, 0x000021d4u, 0x000032dcu, 0x000032ddu, 0x000200f8u, 0x000032ddu, 0x0003003eu, 0x000032acu, 0x000032d9u, 0x00060050u, 0x0000030cu, 0x000032fbu, 0x000032d9u, 0x000032d9u, 0x000032d9u, 0x000500c2u, 0x0000030cu, 0x000032fcu, 0x000032fbu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000032feu, 0x000032fcu, 0x0000f3a8u, 0x0003003eu, 0x000032f7u, 0x000032feu, 0x000500c4u, 0x0000030cu, 0x00003301u, 0x000032feu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00003304u, 0x000032feu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00003305u, 0x00003301u, 0x00003304u, 0x0003003eu, 0x000032f7u, 0x00003305u, 0x000500c7u, 0x00000006u, 0x00003307u, 0x000032d9u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003308u, 0x00003307u, 0x000006c3u, 0x0003003eu, 0x000032f8u, 0x00003308u, 0x00040071u, 0x000004bau, 0x0000330au, 0x00003305u, 0x0004007cu, 0x000004b6u, 0x0000330bu, 0x0000330au, 0x00040071u, 0x00000011u, 0x0000330du, 0x00003308u, 0x0004007cu, 0x00000012u, 0x0000330eu, 0x0000330du, 0x00050051u, 0x00000012u, 0x0000330fu, 0x0000330bu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003310u, 0x0000330bu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003311u, 0x0000330bu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003312u, 0x0000330fu, 0x00003310u, 0x00003311u, 0x0000330eu, 0x0003003eu, 0x000032f9u, 0x00003312u, 0x0003003eu, 0x000032aau, 0x00003312u, 0x000200f9u, 0x000032dbu, 0x000200f8u, 0x000032dcu, 0x0003003eu, 0x000032abu, 0x000032d9u, 0x000500c2u, 0x00000006u, 0x000032e7u, 0x000032d9u, 0x0000025du, 0x0003003eu, 0x000032e3u, 0x000032e7u, 0x000500c7u, 0x00000006u, 0x000032e9u, 0x000032d9u, 0x000006c3u, 0x0003003eu, 0x000032e4u, 0x000032e9u, 0x00040071u, 0x00000011u, 0x000032ebu, 0x000032e7u, 0x0004007cu, 0x00000012u, 0x000032ecu, 0x000032ebu, 0x00040071u, 0x00000011u, 0x000032f4u, 0x000032e9u, 0x0004007cu, 0x00000012u, 0x000032f5u, 0x000032f4u, 0x00070050u, 0x00000013u, 0x000032f6u, 0x000032ecu, 0x000032ecu, 0x000032ecu, 0x000032f5u, 0x0003003eu, 0x000032e5u, 0x000032f6u, 0x0003003eu, 0x000032aau, 0x000032f6u, 0x000200f9u, 0x000032dbu, 0x000200f8u, 0x000032dbu, 0x000700f5u, 0x00000013u, 0x00008612u, 0x000032f6u, 0x000032dcu, 0x00003312u, 0x000032ddu, 0x0003003eu, 0x000032adu, 0x00008612u, 0x0003003eu, 0x00002cddu, 0x00008612u, 0x000300f7u, 0x00002e90u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00002e91u, 0x00002e90u, 0x000200f8u, 0x00002e91u, 0x00050050u, 0x000000efu, 0x00002e94u, 0x00008388u, 0x00002e4eu, 0x0004007cu, 0x000000b0u, 0x00002e95u, 0x00002e94u, 0x0003003eu, 0x00006eceu, 0x00002caau, 0x0003003eu, 0x00006ecfu, 0x00002cacu, 0x0003003eu, 0x00002d1cu, 0x000021c0u, 0x0003003eu, 0x00002d1du, 0x00002e95u, 0x0003003eu, 0x00002d1eu, 0x0000045cu, 0x0003003eu, 0x00002d1fu, 0x00002e7cu, 0x0003003eu, 0x00002d20u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x0000331fu, 0x00002d1du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00003320u, 0x0000331fu, 0x00050084u, 0x00000006u, 0x00003321u, 0x00002cacu, 0x00003320u, 0x00050080u, 0x00000006u, 0x00003322u, 0x00002caau, 0x00003321u, 0x0003003eu, 0x00003313u, 0x00003322u, 0x00050041u, 0x00000007u, 0x00003323u, 0x00002d1du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003324u, 0x00003323u, 0x00050084u, 0x00000006u, 0x00003325u, 0x00003324u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003327u, 0x00003322u, 0x00003325u, 0x0003003eu, 0x00003313u, 0x00003327u, 0x000500c7u, 0x00000006u, 0x00003329u, 0x00003327u, 0x00000f2bu, 0x0003003eu, 0x00003313u, 0x00003329u, 0x000500c2u, 0x00000006u, 0x0000332bu, 0x00003329u, 0x0000022au, 0x0003003eu, 0x00003314u, 0x0000332bu, 0x0004003du, 0x00000006u, 0x0000332du, 0x0000331fu, 0x000500c7u, 0x00000006u, 0x0000332eu, 0x0000332du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000332fu, 0x0000332eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00003331u, 0x0000332bu, 0x0000332fu, 0x0003003eu, 0x00003314u, 0x00003331u, 0x000500c6u, 0x00000006u, 0x00003333u, 0x00003331u, 0x0000045cu, 0x0003003eu, 0x00003314u, 0x00003333u, 0x00080041u, 0x00000692u, 0x00003336u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003333u, 0x0004003du, 0x00000011u, 0x00003337u, 0x00003336u, 0x00040071u, 0x00000006u, 0x00003338u, 0x00003337u, 0x0003003eu, 0x00003315u, 0x00003338u, 0x000500c2u, 0x00000006u, 0x0000333au, 0x00003338u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x0000333bu, 0x0000333au, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x0000333du, 0x0000333bu, 0x0000045cu, 0x0003003eu, 0x00003316u, 0x0000333du, 0x000500c6u, 0x00000006u, 0x00003340u, 0x0000333du, 0x00002e7cu, 0x0003003eu, 0x00003316u, 0x00003340u, 0x000500c5u, 0x00000006u, 0x00003343u, 0x00000f5cu, 0x00003340u, 0x00080041u, 0x00000692u, 0x00003344u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00003343u, 0x0004003du, 0x00000011u, 0x00003345u, 0x00003344u, 0x00040071u, 0x00000006u, 0x00003346u, 0x00003345u, 0x0003003eu, 0x00003315u, 0x00003346u, 0x000300f7u, 0x00003348u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00003349u, 0x0000334au, 0x000200f8u, 0x0000334au, 0x0003003eu, 0x00003319u, 0x00003346u, 0x00060050u, 0x0000030cu, 0x00003368u, 0x00003346u, 0x00003346u, 0x00003346u, 0x000500c2u, 0x0000030cu, 0x00003369u, 0x00003368u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x0000336bu, 0x00003369u, 0x0000f3a8u, 0x0003003eu, 0x00003364u, 0x0000336bu, 0x000500c4u, 0x0000030cu, 0x0000336eu, 0x0000336bu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00003371u, 0x0000336bu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00003372u, 0x0000336eu, 0x00003371u, 0x0003003eu, 0x00003364u, 0x00003372u, 0x000500c7u, 0x00000006u, 0x00003374u, 0x00003346u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00003375u, 0x00003374u, 0x000006c3u, 0x0003003eu, 0x00003365u, 0x00003375u, 0x00040071u, 0x000004bau, 0x00003377u, 0x00003372u, 0x0004007cu, 0x000004b6u, 0x00003378u, 0x00003377u, 0x00040071u, 0x00000011u, 0x0000337au, 0x00003375u, 0x0004007cu, 0x00000012u, 0x0000337bu, 0x0000337au, 0x00050051u, 0x00000012u, 0x0000337cu, 0x00003378u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000337du, 0x00003378u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000337eu, 0x00003378u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000337fu, 0x0000337cu, 0x0000337du, 0x0000337eu, 0x0000337bu, 0x0003003eu, 0x00003366u, 0x0000337fu, 0x0003003eu, 0x00003317u, 0x0000337fu, 0x000200f9u, 0x00003348u, 0x000200f8u, 0x00003349u, 0x0003003eu, 0x00003318u, 0x00003346u, 0x000500c2u, 0x00000006u, 0x00003354u, 0x00003346u, 0x0000025du, 0x0003003eu, 0x00003350u, 0x00003354u, 0x000500c7u, 0x00000006u, 0x00003356u, 0x00003346u, 0x000006c3u, 0x0003003eu, 0x00003351u, 0x00003356u, 0x00040071u, 0x00000011u, 0x00003358u, 0x00003354u, 0x0004007cu, 0x00000012u, 0x00003359u, 0x00003358u, 0x00040071u, 0x00000011u, 0x00003361u, 0x00003356u, 0x0004007cu, 0x00000012u, 0x00003362u, 0x00003361u, 0x00070050u, 0x00000013u, 0x00003363u, 0x00003359u, 0x00003359u, 0x00003359u, 0x00003362u, 0x0003003eu, 0x00003352u, 0x00003363u, 0x0003003eu, 0x00003317u, 0x00003363u, 0x000200f9u, 0x00003348u, 0x000200f8u, 0x00003348u, 0x000700f5u, 0x00000013u, 0x00008627u, 0x00003363u, 0x00003349u, 0x0000337fu, 0x0000334au, 0x0003003eu, 0x0000331au, 0x00008627u, 0x0003003eu, 0x00002ce5u, 0x00008627u, 0x00050050u, 0x000000efu, 0x00002e9du, 0x0000834au, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002e9eu, 0x00002e9du, 0x0003003eu, 0x00006ed2u, 0x00002caau, 0x0003003eu, 0x00006ed3u, 0x00002cacu, 0x0003003eu, 0x00002d22u, 0x000021c0u, 0x0003003eu, 0x00002d23u, 0x00002e9eu, 0x0003003eu, 0x00002d24u, 0x00000386u, 0x0003003eu, 0x00002d25u, 0x00002e7cu, 0x0003003eu, 0x00002d26u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x0000338cu, 0x00002d23u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000338du, 0x0000338cu, 0x00050084u, 0x00000006u, 0x0000338eu, 0x00002cacu, 0x0000338du, 0x00050080u, 0x00000006u, 0x0000338fu, 0x00002caau, 0x0000338eu, 0x0003003eu, 0x00003380u, 0x0000338fu, 0x00050041u, 0x00000007u, 0x00003390u, 0x00002d23u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00003391u, 0x00003390u, 0x00050084u, 0x00000006u, 0x00003392u, 0x00003391u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003394u, 0x0000338fu, 0x00003392u, 0x0003003eu, 0x00003380u, 0x00003394u, 0x000500c7u, 0x00000006u, 0x00003396u, 0x00003394u, 0x00000f2bu, 0x0003003eu, 0x00003380u, 0x00003396u, 0x000500c2u, 0x00000006u, 0x00003398u, 0x00003396u, 0x0000022au, 0x0003003eu, 0x00003381u, 0x00003398u, 0x0004003du, 0x00000006u, 0x0000339au, 0x0000338cu, 0x000500c7u, 0x00000006u, 0x0000339bu, 0x0000339au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000339cu, 0x0000339bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000339eu, 0x00003398u, 0x0000339cu, 0x0003003eu, 0x00003381u, 0x0000339eu, 0x000500c6u, 0x00000006u, 0x000033a0u, 0x0000339eu, 0x0000045cu, 0x0003003eu, 0x00003381u, 0x000033a0u, 0x00080041u, 0x00000692u, 0x000033a3u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000033a0u, 0x0004003du, 0x00000011u, 0x000033a4u, 0x000033a3u, 0x00040071u, 0x00000006u, 0x000033a5u, 0x000033a4u, 0x0003003eu, 0x00003382u, 0x000033a5u, 0x000500c2u, 0x00000006u, 0x000033a7u, 0x000033a5u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x000033a8u, 0x000033a7u, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x000033aau, 0x000033a8u, 0x00000386u, 0x0003003eu, 0x00003383u, 0x000033aau, 0x000500c6u, 0x00000006u, 0x000033adu, 0x000033aau, 0x00002e7cu, 0x0003003eu, 0x00003383u, 0x000033adu, 0x000500c5u, 0x00000006u, 0x000033b0u, 0x00000f5cu, 0x000033adu, 0x00080041u, 0x00000692u, 0x000033b1u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000033b0u, 0x0004003du, 0x00000011u, 0x000033b2u, 0x000033b1u, 0x00040071u, 0x00000006u, 0x000033b3u, 0x000033b2u, 0x0003003eu, 0x00003382u, 0x000033b3u, 0x000300f7u, 0x000033b5u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x000033b6u, 0x000033b7u, 0x000200f8u, 0x000033b7u, 0x0003003eu, 0x00003386u, 0x000033b3u, 0x00060050u, 0x0000030cu, 0x000033d5u, 0x000033b3u, 0x000033b3u, 0x000033b3u, 0x000500c2u, 0x0000030cu, 0x000033d6u, 0x000033d5u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000033d8u, 0x000033d6u, 0x0000f3a8u, 0x0003003eu, 0x000033d1u, 0x000033d8u, 0x000500c4u, 0x0000030cu, 0x000033dbu, 0x000033d8u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000033deu, 0x000033d8u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000033dfu, 0x000033dbu, 0x000033deu, 0x0003003eu, 0x000033d1u, 0x000033dfu, 0x000500c7u, 0x00000006u, 0x000033e1u, 0x000033b3u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000033e2u, 0x000033e1u, 0x000006c3u, 0x0003003eu, 0x000033d2u, 0x000033e2u, 0x00040071u, 0x000004bau, 0x000033e4u, 0x000033dfu, 0x0004007cu, 0x000004b6u, 0x000033e5u, 0x000033e4u, 0x00040071u, 0x00000011u, 0x000033e7u, 0x000033e2u, 0x0004007cu, 0x00000012u, 0x000033e8u, 0x000033e7u, 0x00050051u, 0x00000012u, 0x000033e9u, 0x000033e5u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000033eau, 0x000033e5u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000033ebu, 0x000033e5u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000033ecu, 0x000033e9u, 0x000033eau, 0x000033ebu, 0x000033e8u, 0x0003003eu, 0x000033d3u, 0x000033ecu, 0x0003003eu, 0x00003384u, 0x000033ecu, 0x000200f9u, 0x000033b5u, 0x000200f8u, 0x000033b6u, 0x0003003eu, 0x00003385u, 0x000033b3u, 0x000500c2u, 0x00000006u, 0x000033c1u, 0x000033b3u, 0x0000025du, 0x0003003eu, 0x000033bdu, 0x000033c1u, 0x000500c7u, 0x00000006u, 0x000033c3u, 0x000033b3u, 0x000006c3u, 0x0003003eu, 0x000033beu, 0x000033c3u, 0x00040071u, 0x00000011u, 0x000033c5u, 0x000033c1u, 0x0004007cu, 0x00000012u, 0x000033c6u, 0x000033c5u, 0x00040071u, 0x00000011u, 0x000033ceu, 0x000033c3u, 0x0004007cu, 0x00000012u, 0x000033cfu, 0x000033ceu, 0x00070050u, 0x00000013u, 0x000033d0u, 0x000033c6u, 0x000033c6u, 0x000033c6u, 0x000033cfu, 0x0003003eu, 0x000033bfu, 0x000033d0u, 0x0003003eu, 0x00003384u, 0x000033d0u, 0x000200f9u, 0x000033b5u, 0x000200f8u, 0x000033b5u, 0x000700f5u, 0x00000013u, 0x0000863du, 0x000033d0u, 0x000033b6u, 0x000033ecu, 0x000033b7u, 0x0003003eu, 0x00003387u, 0x0000863du, 0x0003003eu, 0x00002cedu, 0x0000863du, 0x000200f9u, 0x00002e90u, 0x000200f8u, 0x00002e90u, 0x000700f5u, 0x00000013u, 0x0000888au, 0x00008859u, 0x000032dbu, 0x0000863du, 0x000033b5u, 0x000700f5u, 0x00000013u, 0x0000878fu, 0x0000875du, 0x000032dbu, 0x00008627u, 0x000033b5u, 0x000300f7u, 0x00002ea5u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00002ea6u, 0x00002ea5u, 0x000200f8u, 0x00002ea6u, 0x00050050u, 0x000000efu, 0x00002ea9u, 0x00008388u, 0x00002e50u, 0x0004007cu, 0x000000b0u, 0x00002eaau, 0x00002ea9u, 0x0003003eu, 0x00006ed6u, 0x00002caau, 0x0003003eu, 0x00006ed7u, 0x00002cacu, 0x0003003eu, 0x00002d28u, 0x000021c0u, 0x0003003eu, 0x00002d29u, 0x00002eaau, 0x0003003eu, 0x00002d2au, 0x00000464u, 0x0003003eu, 0x00002d2bu, 0x00002e7cu, 0x0003003eu, 0x00002d2cu, 0x000021d4u, 0x00050041u, 0x00000007u, 0x000033f9u, 0x00002d29u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000033fau, 0x000033f9u, 0x00050084u, 0x00000006u, 0x000033fbu, 0x00002cacu, 0x000033fau, 0x00050080u, 0x00000006u, 0x000033fcu, 0x00002caau, 0x000033fbu, 0x0003003eu, 0x000033edu, 0x000033fcu, 0x00050041u, 0x00000007u, 0x000033fdu, 0x00002d29u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000033feu, 0x000033fdu, 0x00050084u, 0x00000006u, 0x000033ffu, 0x000033feu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00003401u, 0x000033fcu, 0x000033ffu, 0x0003003eu, 0x000033edu, 0x00003401u, 0x000500c7u, 0x00000006u, 0x00003403u, 0x00003401u, 0x00000f2bu, 0x0003003eu, 0x000033edu, 0x00003403u, 0x000500c2u, 0x00000006u, 0x00003405u, 0x00003403u, 0x0000022au, 0x0003003eu, 0x000033eeu, 0x00003405u, 0x0004003du, 0x00000006u, 0x00003407u, 0x000033f9u, 0x000500c7u, 0x00000006u, 0x00003408u, 0x00003407u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00003409u, 0x00003408u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000340bu, 0x00003405u, 0x00003409u, 0x0003003eu, 0x000033eeu, 0x0000340bu, 0x000500c6u, 0x00000006u, 0x0000340du, 0x0000340bu, 0x0000045cu, 0x0003003eu, 0x000033eeu, 0x0000340du, 0x00080041u, 0x00000692u, 0x00003410u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000340du, 0x0004003du, 0x00000011u, 0x00003411u, 0x00003410u, 0x00040071u, 0x00000006u, 0x00003412u, 0x00003411u, 0x0003003eu, 0x000033efu, 0x00003412u, 0x000500c2u, 0x00000006u, 0x00003414u, 0x00003412u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00003415u, 0x00003414u, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x00003417u, 0x00003415u, 0x00000464u, 0x0003003eu, 0x000033f0u, 0x00003417u, 0x000500c6u, 0x00000006u, 0x0000341au, 0x00003417u, 0x00002e7cu, 0x0003003eu, 0x000033f0u, 0x0000341au, 0x000500c5u, 0x00000006u, 0x0000341du, 0x00000f5cu, 0x0000341au, 0x00080041u, 0x00000692u, 0x0000341eu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000341du, 0x0004003du, 0x00000011u, 0x0000341fu, 0x0000341eu, 0x00040071u, 0x00000006u, 0x00003420u, 0x0000341fu, 0x0003003eu, 0x000033efu, 0x00003420u, 0x000300f7u, 0x00003422u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00003423u, 0x00003424u, 0x000200f8u, 0x00003424u, 0x0003003eu, 0x000033f3u, 0x00003420u, 0x00060050u, 0x0000030cu, 0x00003442u, 0x00003420u, 0x00003420u, 0x00003420u, 0x000500c2u, 0x0000030cu, 0x00003443u, 0x00003442u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00003445u, 0x00003443u, 0x0000f3a8u, 0x0003003eu, 0x0000343eu, 0x00003445u, 0x000500c4u, 0x0000030cu, 0x00003448u, 0x00003445u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000344bu, 0x00003445u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000344cu, 0x00003448u, 0x0000344bu, 0x0003003eu, 0x0000343eu, 0x0000344cu, 0x000500c7u, 0x00000006u, 0x0000344eu, 0x00003420u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000344fu, 0x0000344eu, 0x000006c3u, 0x0003003eu, 0x0000343fu, 0x0000344fu, 0x00040071u, 0x000004bau, 0x00003451u, 0x0000344cu, 0x0004007cu, 0x000004b6u, 0x00003452u, 0x00003451u, 0x00040071u, 0x00000011u, 0x00003454u, 0x0000344fu, 0x0004007cu, 0x00000012u, 0x00003455u, 0x00003454u, 0x00050051u, 0x00000012u, 0x00003456u, 0x00003452u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003457u, 0x00003452u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003458u, 0x00003452u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003459u, 0x00003456u, 0x00003457u, 0x00003458u, 0x00003455u, 0x0003003eu, 0x00003440u, 0x00003459u, 0x0003003eu, 0x000033f1u, 0x00003459u, 0x000200f9u, 0x00003422u, 0x000200f8u, 0x00003423u, 0x0003003eu, 0x000033f2u, 0x00003420u, 0x000500c2u, 0x00000006u, 0x0000342eu, 0x00003420u, 0x0000025du, 0x0003003eu, 0x0000342au, 0x0000342eu, 0x000500c7u, 0x00000006u, 0x00003430u, 0x00003420u, 0x000006c3u, 0x0003003eu, 0x0000342bu, 0x00003430u, 0x00040071u, 0x00000011u, 0x00003432u, 0x0000342eu, 0x0004007cu, 0x00000012u, 0x00003433u, 0x00003432u, 0x00040071u, 0x00000011u, 0x0000343bu, 0x00003430u, 0x0004007cu, 0x00000012u, 0x0000343cu, 0x0000343bu, 0x00070050u, 0x00000013u, 0x0000343du, 0x00003433u, 0x00003433u, 0x00003433u, 0x0000343cu, 0x0003003eu, 0x0000342cu, 0x0000343du, 0x0003003eu, 0x000033f1u, 0x0000343du, 0x000200f9u, 0x00003422u, 0x000200f8u, 0x00003422u, 0x000700f5u, 0x00000013u, 0x00008669u, 0x0000343du, 0x00003423u, 0x00003459u, 0x00003424u, 0x0003003eu, 0x000033f4u, 0x00008669u, 0x0003003eu, 0x00002cf5u, 0x00008669u, 0x000200f9u, 0x00002ea5u, 0x000200f8u, 0x00002ea5u, 0x000700f5u, 0x00000013u, 0x00008903u, 0x000088d3u, 0x00002e90u, 0x00008669u, 0x00003422u, 0x000200f9u, 0x00002e81u, 0x000200f8u, 0x00002e81u, 0x000900f5u, 0x00000013u, 0x00008902u, 0x00008903u, 0x00002ea5u, 0x00008909u, 0x00002ed9u, 0x0000890eu, 0x00002f07u, 0x000900f5u, 0x00000013u, 0x00008888u, 0x0000888au, 0x00002ea5u, 0x0000888fu, 0x00002ed9u, 0x00008893u, 0x00002f07u, 0x000900f5u, 0x00000013u, 0x0000880bu, 0x00008612u, 0x00002ea5u, 0x000085bau, 0x00002ed9u, 0x0000855cu, 0x00002f07u, 0x000900f5u, 0x00000013u, 0x0000878du, 0x0000878fu, 0x00002ea5u, 0x00008795u, 0x00002ed9u, 0x0000879au, 0x00002f07u, 0x000200f9u, 0x00002e76u, 0x000200f8u, 0x00002e76u, 0x000700f5u, 0x00000013u, 0x000088b9u, 0x000088d3u, 0x00002e70u, 0x00008902u, 0x00002e81u, 0x000700f5u, 0x00000013u, 0x0000883fu, 0x00008859u, 0x00002e70u, 0x00008888u, 0x00002e81u, 0x000700f5u, 0x00000013u, 0x000087c2u, 0x000087dcu, 0x00002e70u, 0x0000880bu, 0x00002e81u, 0x000700f5u, 0x00000013u, 0x00008743u, 0x0000875du, 0x00002e70u, 0x0000878du, 0x00002e81u, 0x000200f9u, 0x00002e6fu, 0x000200f8u, 0x00002e6fu, 0x000700f5u, 0x00000013u, 0x000088b8u, 0x000088b9u, 0x00002e76u, 0x00008913u, 0x00002f16u, 0x000700f5u, 0x00000013u, 0x0000883eu, 0x0000883fu, 0x00002e76u, 0x00008896u, 0x00002f16u, 0x000700f5u, 0x00000013u, 0x000087c1u, 0x000087c2u, 0x00002e76u, 0x0000881bu, 0x00002f16u, 0x000700f5u, 0x00000013u, 0x00008742u, 0x00008743u, 0x00002e76u, 0x0000879eu, 0x00002f16u, 0x000300f7u, 0x00003166u, 0x00000000u, 0x000400fau, 0x00002e61u, 0x00003167u, 0x00003168u, 0x000200f8u, 0x00003168u, 0x000300f7u, 0x00003194u, 0x00000000u, 0x000400fau, 0x00002e59u, 0x00003195u, 0x00003196u, 0x000200f8u, 0x00003196u, 0x000300f7u, 0x000031a4u, 0x00000000u, 0x000400fau, 0x00002e63u, 0x000031a5u, 0x000031a6u, 0x000200f8u, 0x000031a6u, 0x0004003du, 0x000000efu, 0x000031abu, 0x00002cc9u, 0x0003003eu, 0x00002dfeu, 0x000031abu, 0x000200f9u, 0x000031a4u, 0x000200f8u, 0x000031a5u, 0x0004003du, 0x000000efu, 0x000031a7u, 0x00002cc9u, 0x0007004fu, 0x000000efu, 0x000031a8u, 0x000031a7u, 0x000031a7u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x000031aau, 0x0000f3adu, 0x000031a8u, 0x0003003eu, 0x00002dfeu, 0x000031aau, 0x000200f9u, 0x000031a4u, 0x000200f8u, 0x000031a4u, 0x000700f5u, 0x000000efu, 0x00008740u, 0x000031aau, 0x000031a5u, 0x000031abu, 0x000031a6u, 0x00040072u, 0x000001aeu, 0x000031adu, 0x00008740u, 0x0003003eu, 0x00002dfdu, 0x000031adu, 0x00050082u, 0x00000013u, 0x000031b0u, 0x00008742u, 0x000087c1u, 0x00050041u, 0x000001c4u, 0x000031b1u, 0x00002dfdu, 0x0000032du, 0x0004003du, 0x00000012u, 0x000031b2u, 0x000031b1u, 0x00070050u, 0x00000013u, 0x000031b3u, 0x000031b2u, 0x000031b2u, 0x000031b2u, 0x000031b2u, 0x00050084u, 0x00000013u, 0x000031b4u, 0x000031b0u, 0x000031b3u, 0x0003003eu, 0x00002defu, 0x000031b4u, 0x00050082u, 0x00000013u, 0x000031b7u, 0x0000883eu, 0x000087c1u, 0x00050041u, 0x000001c4u, 0x000031b8u, 0x00002dfdu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x000031b9u, 0x000031b8u, 0x00070050u, 0x00000013u, 0x000031bau, 0x000031b9u, 0x000031b9u, 0x000031b9u, 0x000031b9u, 0x00050084u, 0x00000013u, 0x000031bbu, 0x000031b7u, 0x000031bau, 0x00050080u, 0x00000013u, 0x000031bdu, 0x000031b4u, 0x000031bbu, 0x0003003eu, 0x00002defu, 0x000031bdu, 0x00050080u, 0x00000013u, 0x000031c0u, 0x000031bdu, 0x0000f3b0u, 0x0003003eu, 0x00002defu, 0x000031c0u, 0x000500c3u, 0x00000013u, 0x000031c3u, 0x000031c0u, 0x0000f3b1u, 0x0003003eu, 0x00002defu, 0x000031c3u, 0x00050080u, 0x00000013u, 0x000031c6u, 0x000031c3u, 0x000087c1u, 0x0003003eu, 0x00002defu, 0x000031c6u, 0x000200f9u, 0x00003194u, 0x000200f8u, 0x00003195u, 0x00050080u, 0x00000013u, 0x00003199u, 0x000087c1u, 0x0000883eu, 0x00050080u, 0x00000013u, 0x0000319bu, 0x00003199u, 0x00008742u, 0x00050080u, 0x00000013u, 0x0000319du, 0x0000319bu, 0x000088b8u, 0x00050080u, 0x00000013u, 0x0000319fu, 0x0000319du, 0x0000f3abu, 0x000500c3u, 0x00000013u, 0x000031a1u, 0x0000319fu, 0x0000f3abu, 0x0003003eu, 0x00002defu, 0x000031a1u, 0x000200f9u, 0x00003194u, 0x000200f8u, 0x00003194u, 0x000700f5u, 0x00000013u, 0x000089f7u, 0x000031a1u, 0x00003195u, 0x000031c6u, 0x000031a4u, 0x000200f9u, 0x00003166u, 0x000200f8u, 0x00003167u, 0x000300f7u, 0x0000316au, 0x00000000u, 0x000400fau, 0x000021d7u, 0x0000316bu, 0x0000316cu, 0x000200f8u, 0x0000316cu, 0x0003003eu, 0x00002defu, 0x000087c1u, 0x000200f9u, 0x0000316au, 0x000200f8u, 0x0000316bu, 0x000500c7u, 0x00000008u, 0x0000316eu, 0x0000834au, 0x0000022au, 0x000500c4u, 0x00000008u, 0x0000316fu, 0x0000316eu, 0x00000233u, 0x0004003du, 0x00000008u, 0x00003171u, 0x00002e2fu, 0x000500c3u, 0x00000008u, 0x00003172u, 0x00003171u, 0x0000022au, 0x000500c5u, 0x00000008u, 0x00003173u, 0x0000316fu, 0x00003172u, 0x0003003eu, 0x00002df0u, 0x00003173u, 0x0004003du, 0x00000008u, 0x00003176u, 0x00002e31u, 0x00050050u, 0x000000efu, 0x00003177u, 0x00003173u, 0x00003176u, 0x0007004fu, 0x000001aeu, 0x00003179u, 0x000087c1u, 0x000087c1u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002df2u, 0x00003179u, 0x0007004fu, 0x000001aeu, 0x0000317bu, 0x00008742u, 0x00008742u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002df3u, 0x0000317bu, 0x0007004fu, 0x000001aeu, 0x0000317du, 0x0000883eu, 0x0000883eu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002df4u, 0x0000317du, 0x0007004fu, 0x000001aeu, 0x0000317fu, 0x000088b8u, 0x000088b8u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002df5u, 0x0000317fu, 0x0003003eu, 0x00002df6u, 0x00003177u, 0x00050041u, 0x00000046u, 0x00004424u, 0x00002df6u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004425u, 0x00004424u, 0x00050041u, 0x00000046u, 0x00004426u, 0x00002df6u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004427u, 0x00004426u, 0x00050080u, 0x00000008u, 0x00004428u, 0x00004425u, 0x00004427u, 0x0003003eu, 0x0000441eu, 0x00004428u, 0x000500afu, 0x00000069u, 0x0000442au, 0x00004428u, 0x0000115du, 0x00050050u, 0x0000087bu, 0x0000442du, 0x0000442au, 0x0000442au, 0x000600a9u, 0x000001aeu, 0x0000442eu, 0x0000442du, 0x0000317fu, 0x00003179u, 0x0003003eu, 0x0000441fu, 0x0000442eu, 0x000300f7u, 0x00004431u, 0x00000000u, 0x000400fau, 0x0000442au, 0x00004432u, 0x00004433u, 0x000200f8u, 0x00004433u, 0x0004003du, 0x000000efu, 0x00004438u, 0x00002df6u, 0x0003003eu, 0x00004421u, 0x00004438u, 0x000200f9u, 0x00004431u, 0x000200f8u, 0x00004432u, 0x0004003du, 0x000000efu, 0x00004434u, 0x00002df6u, 0x0007004fu, 0x000000efu, 0x00004435u, 0x00004434u, 0x00004434u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00004437u, 0x0000f3adu, 0x00004435u, 0x0003003eu, 0x00004421u, 0x00004437u, 0x000200f9u, 0x00004431u, 0x000200f8u, 0x00004431u, 0x000700f5u, 0x000000efu, 0x0000899au, 0x00004437u, 0x00004432u, 0x00004438u, 0x00004433u, 0x00040072u, 0x000001aeu, 0x0000443au, 0x0000899au, 0x0003003eu, 0x00004420u, 0x0000443au, 0x00050082u, 0x000001aeu, 0x0000443du, 0x0000317bu, 0x0000442eu, 0x00050041u, 0x000001c4u, 0x0000443eu, 0x00004420u, 0x0000032du, 0x0004003du, 0x00000012u, 0x0000443fu, 0x0000443eu, 0x00050050u, 0x000001aeu, 0x00004440u, 0x0000443fu, 0x0000443fu, 0x00050084u, 0x000001aeu, 0x00004441u, 0x0000443du, 0x00004440u, 0x0003003eu, 0x00004422u, 0x00004441u, 0x00050082u, 0x000001aeu, 0x00004444u, 0x0000317du, 0x0000442eu, 0x00050041u, 0x000001c4u, 0x00004445u, 0x00004420u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00004446u, 0x00004445u, 0x00050050u, 0x000001aeu, 0x00004447u, 0x00004446u, 0x00004446u, 0x00050084u, 0x000001aeu, 0x00004448u, 0x00004444u, 0x00004447u, 0x00050080u, 0x000001aeu, 0x0000444au, 0x00004441u, 0x00004448u, 0x0003003eu, 0x00004422u, 0x0000444au, 0x00050080u, 0x000001aeu, 0x0000444du, 0x0000444au, 0x0000f3aeu, 0x0003003eu, 0x00004422u, 0x0000444du, 0x000500c3u, 0x000001aeu, 0x00004450u, 0x0000444du, 0x0000f3afu, 0x0003003eu, 0x00004422u, 0x00004450u, 0x00050080u, 0x000001aeu, 0x00004453u, 0x00004450u, 0x0000442eu, 0x0003003eu, 0x00004422u, 0x00004453u, 0x0003003eu, 0x00004423u, 0x00004453u, 0x0003003eu, 0x00002df1u, 0x00004453u, 0x0007004fu, 0x000001aeu, 0x00003182u, 0x000087c1u, 0x000087c1u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002df8u, 0x00003182u, 0x0007004fu, 0x000001aeu, 0x00003184u, 0x00008742u, 0x00008742u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002df9u, 0x00003184u, 0x0007004fu, 0x000001aeu, 0x00003186u, 0x0000883eu, 0x0000883eu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002dfau, 0x00003186u, 0x0007004fu, 0x000001aeu, 0x00003188u, 0x000088b8u, 0x000088b8u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002dfbu, 0x00003188u, 0x0004003du, 0x000000efu, 0x00003189u, 0x00002cc9u, 0x0003003eu, 0x00002dfcu, 0x00003189u, 0x00050041u, 0x00000046u, 0x0000445bu, 0x00002dfcu, 0x0000032du, 0x0004003du, 0x00000008u, 0x0000445cu, 0x0000445bu, 0x00050041u, 0x00000046u, 0x0000445du, 0x00002dfcu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000445eu, 0x0000445du, 0x00050080u, 0x00000008u, 0x0000445fu, 0x0000445cu, 0x0000445eu, 0x0003003eu, 0x00004455u, 0x0000445fu, 0x000500afu, 0x00000069u, 0x00004461u, 0x0000445fu, 0x0000115du, 0x00050050u, 0x0000087bu, 0x00004464u, 0x00004461u, 0x00004461u, 0x000600a9u, 0x000001aeu, 0x00004465u, 0x00004464u, 0x00003188u, 0x00003182u, 0x0003003eu, 0x00004456u, 0x00004465u, 0x000300f7u, 0x00004468u, 0x00000000u, 0x000400fau, 0x00004461u, 0x00004469u, 0x0000446au, 0x000200f8u, 0x0000446au, 0x0004003du, 0x000000efu, 0x0000446fu, 0x00002dfcu, 0x0003003eu, 0x00004458u, 0x0000446fu, 0x000200f9u, 0x00004468u, 0x000200f8u, 0x00004469u, 0x0004003du, 0x000000efu, 0x0000446bu, 0x00002dfcu, 0x0007004fu, 0x000000efu, 0x0000446cu, 0x0000446bu, 0x0000446bu, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x0000446eu, 0x0000f3adu, 0x0000446cu, 0x0003003eu, 0x00004458u, 0x0000446eu, 0x000200f9u, 0x00004468u, 0x000200f8u, 0x00004468u, 0x000700f5u, 0x000000efu, 0x000089a2u, 0x0000446eu, 0x00004469u, 0x0000446fu, 0x0000446au, 0x00040072u, 0x000001aeu, 0x00004471u, 0x000089a2u, 0x0003003eu, 0x00004457u, 0x00004471u, 0x00050082u, 0x000001aeu, 0x00004474u, 0x00003184u, 0x00004465u, 0x00050041u, 0x000001c4u, 0x00004475u, 0x00004457u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004476u, 0x00004475u, 0x00050050u, 0x000001aeu, 0x00004477u, 0x00004476u, 0x00004476u, 0x00050084u, 0x000001aeu, 0x00004478u, 0x00004474u, 0x00004477u, 0x0003003eu, 0x00004459u, 0x00004478u, 0x00050082u, 0x000001aeu, 0x0000447bu, 0x00003186u, 0x00004465u, 0x00050041u, 0x000001c4u, 0x0000447cu, 0x00004457u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x0000447du, 0x0000447cu, 0x00050050u, 0x000001aeu, 0x0000447eu, 0x0000447du, 0x0000447du, 0x00050084u, 0x000001aeu, 0x0000447fu, 0x0000447bu, 0x0000447eu, 0x00050080u, 0x000001aeu, 0x00004481u, 0x00004478u, 0x0000447fu, 0x0003003eu, 0x00004459u, 0x00004481u, 0x00050080u, 0x000001aeu, 0x00004484u, 0x00004481u, 0x0000f3aeu, 0x0003003eu, 0x00004459u, 0x00004484u, 0x000500c3u, 0x000001aeu, 0x00004487u, 0x00004484u, 0x0000f3afu, 0x0003003eu, 0x00004459u, 0x00004487u, 0x00050080u, 0x000001aeu, 0x0000448au, 0x00004487u, 0x00004465u, 0x0003003eu, 0x00004459u, 0x0000448au, 0x0003003eu, 0x0000445au, 0x0000448au, 0x0003003eu, 0x00002df7u, 0x0000448au, 0x00050051u, 0x00000012u, 0x0000318du, 0x00004453u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000318eu, 0x00004453u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000318fu, 0x0000448au, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003190u, 0x0000448au, 0x00000001u, 0x00070050u, 0x00000013u, 0x00003191u, 0x0000318du, 0x0000318eu, 0x0000318fu, 0x00003190u, 0x0003003eu, 0x00002defu, 0x00003191u, 0x000200f9u, 0x0000316au, 0x000200f8u, 0x0000316au, 0x000700f5u, 0x00000013u, 0x000089f6u, 0x00003191u, 0x00004468u, 0x000087c1u, 0x0000316cu, 0x000200f9u, 0x00003166u, 0x000200f8u, 0x00003166u, 0x000700f5u, 0x00000013u, 0x000089f5u, 0x000089f6u, 0x0000316au, 0x000089f7u, 0x00003194u, 0x0003003eu, 0x00002dffu, 0x000089f5u, 0x0003003eu, 0x0000212fu, 0x000089f5u, 0x000400a8u, 0x00000069u, 0x000022ecu, 0x000021d7u, 0x000400a8u, 0x00000069u, 0x000022eeu, 0x00002213u, 0x000500a7u, 0x00000069u, 0x000022efu, 0x000022ecu, 0x000022eeu, 0x000300f7u, 0x000022f0u, 0x00000000u, 0x000400fau, 0x000022efu, 0x000022f1u, 0x000022f0u, 0x000200f8u, 0x000022f1u, 0x0003003eu, 0x00002139u, 0x000089f5u, 0x0003003eu, 0x0000213au, 0x00002986u, 0x00040072u, 0x00000009u, 0x00004493u, 0x000089f5u, 0x000600cau, 0x00000009u, 0x00004494u, 0x00004493u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000448cu, 0x00004494u, 0x00050041u, 0x00000046u, 0x00004495u, 0x0000448cu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00004496u, 0x00004495u, 0x00050041u, 0x000001c4u, 0x00004497u, 0x0000213au, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004498u, 0x00004497u, 0x00040072u, 0x00000008u, 0x00004499u, 0x00004498u, 0x00050041u, 0x00000046u, 0x0000449au, 0x0000448cu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000449bu, 0x0000449au, 0x00050084u, 0x00000008u, 0x0000449cu, 0x00004499u, 0x0000449bu, 0x00050080u, 0x00000008u, 0x0000449du, 0x0000449cu, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x0000449eu, 0x0000449du, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000449fu, 0x00004496u, 0x0000449eu, 0x0003003eu, 0x0000448du, 0x0000449fu, 0x0004003du, 0x00000008u, 0x000044a1u, 0x00004495u, 0x00050041u, 0x000001c4u, 0x000044a2u, 0x0000213au, 0x0000045cu, 0x0004003du, 0x00000012u, 0x000044a3u, 0x000044a2u, 0x00040072u, 0x00000008u, 0x000044a4u, 0x000044a3u, 0x00050041u, 0x00000046u, 0x000044a5u, 0x0000448cu, 0x0000032du, 0x0004003du, 0x00000008u, 0x000044a6u, 0x000044a5u, 0x00050084u, 0x00000008u, 0x000044a7u, 0x000044a4u, 0x000044a6u, 0x00050041u, 0x000001c4u, 0x000044a8u, 0x0000213au, 0x00000386u, 0x0004003du, 0x00000012u, 0x000044a9u, 0x000044a8u, 0x00040072u, 0x00000008u, 0x000044aau, 0x000044a9u, 0x0004003du, 0x00000008u, 0x000044acu, 0x0000449au, 0x00050084u, 0x00000008u, 0x000044adu, 0x000044aau, 0x000044acu, 0x00050080u, 0x00000008u, 0x000044aeu, 0x000044a7u, 0x000044adu, 0x00050080u, 0x00000008u, 0x000044afu, 0x000044aeu, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x000044b0u, 0x000044afu, 0x0000025du, 0x00050080u, 0x00000008u, 0x000044b1u, 0x000044a1u, 0x000044b0u, 0x0003003eu, 0x0000448eu, 0x000044b1u, 0x0004003du, 0x00000008u, 0x000044b3u, 0x00004495u, 0x00050041u, 0x000001c4u, 0x000044b4u, 0x0000213au, 0x00000464u, 0x0004003du, 0x00000012u, 0x000044b5u, 0x000044b4u, 0x00040072u, 0x00000008u, 0x000044b6u, 0x000044b5u, 0x0004003du, 0x00000008u, 0x000044b8u, 0x000044a5u, 0x00050084u, 0x00000008u, 0x000044b9u, 0x000044b6u, 0x000044b8u, 0x00050080u, 0x00000008u, 0x000044bau, 0x000044b9u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x000044bbu, 0x000044bau, 0x0000025du, 0x00050080u, 0x00000008u, 0x000044bcu, 0x000044b3u, 0x000044bbu, 0x0003003eu, 0x0000448fu, 0x000044bcu, 0x0004003du, 0x00000008u, 0x000044beu, 0x00004495u, 0x0003003eu, 0x00004490u, 0x000044beu, 0x00040072u, 0x00000012u, 0x000044c0u, 0x0000449fu, 0x00040072u, 0x00000012u, 0x000044c2u, 0x000044b1u, 0x00040072u, 0x00000012u, 0x000044c4u, 0x000044bcu, 0x00040072u, 0x00000012u, 0x000044c6u, 0x000044beu, 0x00070050u, 0x00000013u, 0x000044c7u, 0x000044c0u, 0x000044c2u, 0x000044c4u, 0x000044c6u, 0x0003003eu, 0x00004491u, 0x000044c7u, 0x0003003eu, 0x0000212fu, 0x000044c7u, 0x000200f9u, 0x000022f0u, 0x000200f8u, 0x000022f0u, 0x000700f5u, 0x00000013u, 0x000098c3u, 0x000089f5u, 0x00003166u, 0x000044c7u, 0x000022f1u, 0x000200f9u, 0x000022dau, 0x000200f8u, 0x000022dau, 0x000700f5u, 0x00000013u, 0x0000e45du, 0x000088d3u, 0x000022c8u, 0x000088b8u, 0x000022f0u, 0x000700f5u, 0x00000013u, 0x0000e353u, 0x00008859u, 0x000022c8u, 0x0000883eu, 0x000022f0u, 0x000700f5u, 0x00000013u, 0x0000e249u, 0x000087dcu, 0x000022c8u, 0x000087c1u, 0x000022f0u, 0x000700f5u, 0x00000013u, 0x0000e13fu, 0x0000875du, 0x000022c8u, 0x00008742u, 0x000022f0u, 0x000700f5u, 0x00000013u, 0x0000988bu, 0x00009898u, 0x000022c8u, 0x000098c3u, 0x000022f0u, 0x000300f7u, 0x000022f7u, 0x00000000u, 0x000400fau, 0x0000220au, 0x000022f8u, 0x000022f7u, 0x000200f8u, 0x000022f8u, 0x00050080u, 0x00000008u, 0x00002301u, 0x000021aau, 0x0000022au, 0x00050080u, 0x00000008u, 0x00002302u, 0x000021a5u, 0x00002301u, 0x00070041u, 0x00000692u, 0x00002303u, 0x000002dbu, 0x00000220u, 0x00002302u, 0x0000025du, 0x0004003du, 0x00000011u, 0x00002304u, 0x00002303u, 0x00040071u, 0x00000006u, 0x00002305u, 0x00002304u, 0x000500abu, 0x00000069u, 0x00002306u, 0x00002305u, 0x0000032du, 0x0003003eu, 0x0000213bu, 0x00002306u, 0x00040072u, 0x00000008u, 0x00002309u, 0x0000241du, 0x000500afu, 0x00000069u, 0x0000230au, 0x00002309u, 0x0000025du, 0x0003003eu, 0x0000213cu, 0x0000230au, 0x000300f7u, 0x0000230du, 0x00000000u, 0x000400fau, 0x00002227u, 0x0000230eu, 0x0000230fu, 0x000200f8u, 0x0000230fu, 0x0003003eu, 0x0000213eu, 0x00002419u, 0x000200f9u, 0x0000230du, 0x000200f8u, 0x0000230eu, 0x0003003eu, 0x0000213eu, 0x0000241bu, 0x000200f9u, 0x0000230du, 0x000200f8u, 0x0000230du, 0x000600a9u, 0x00000008u, 0x0000f3ccu, 0x00002227u, 0x0000241bu, 0x00002419u, 0x000500aau, 0x00000069u, 0x00002315u, 0x00007f1eu, 0x0000f3ccu, 0x0003003eu, 0x0000213du, 0x00002315u, 0x000500a7u, 0x00000069u, 0x00002318u, 0x00002315u, 0x0000230au, 0x000500a7u, 0x00000069u, 0x0000231au, 0x00002318u, 0x00002306u, 0x000300f7u, 0x0000231bu, 0x00000000u, 0x000400fau, 0x0000231au, 0x0000231cu, 0x0000231du, 0x000200f8u, 0x0000231du, 0x00050084u, 0x00000008u, 0x00002339u, 0x00002294u, 0x00000882u, 0x00050080u, 0x00000008u, 0x0000233au, 0x00002292u, 0x00002339u, 0x0003003eu, 0x00002144u, 0x00002411u, 0x0003003eu, 0x00002145u, 0x00002431u, 0x0003003eu, 0x00002146u, 0x0000233au, 0x0003003eu, 0x00002147u, 0x000021e0u, 0x0008004fu, 0x00000044u, 0x00004557u, 0x00002411u, 0x00002411u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x00000044u, 0x00004559u, 0x00002431u, 0x00002431u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x0000455bu, 0x00004559u, 0x0000f39du, 0x000500c3u, 0x00000044u, 0x0000455du, 0x0000455bu, 0x000029ecu, 0x00060050u, 0x00000044u, 0x0000455fu, 0x0000233au, 0x0000233au, 0x0000233au, 0x00050084u, 0x00000044u, 0x00004560u, 0x0000455du, 0x0000455fu, 0x00050080u, 0x00000044u, 0x00004561u, 0x00004557u, 0x00004560u, 0x0003003eu, 0x0000454fu, 0x00004561u, 0x000500c3u, 0x00000044u, 0x00004564u, 0x00004561u, 0x0000f39eu, 0x0003003eu, 0x0000454fu, 0x00004564u, 0x000300f7u, 0x00004566u, 0x00000000u, 0x000400fau, 0x000021e0u, 0x00004567u, 0x00004568u, 0x000200f8u, 0x00004568u, 0x0003003eu, 0x00004554u, 0x00004564u, 0x0007004fu, 0x000000efu, 0x000045f6u, 0x00004564u, 0x00004564u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000045f4u, 0x000045f6u, 0x0003003eu, 0x00004550u, 0x000045f6u, 0x000200f9u, 0x00004566u, 0x000200f8u, 0x00004567u, 0x0003003eu, 0x00004552u, 0x00004564u, 0x0003003eu, 0x00004553u, 0x00009263u, 0x00050041u, 0x00000046u, 0x0000457au, 0x00004552u, 0x00000386u, 0x0004003du, 0x00000008u, 0x0000457bu, 0x0000457au, 0x0003003eu, 0x00004570u, 0x0000457bu, 0x000500b3u, 0x00000069u, 0x0000457du, 0x0000457bu, 0x00000220u, 0x0003003eu, 0x00004571u, 0x0000457du, 0x000500c7u, 0x00000008u, 0x0000457fu, 0x0000457bu, 0x00000c1bu, 0x0003003eu, 0x00004570u, 0x0000457fu, 0x0003003eu, 0x00004573u, 0x0000457fu, 0x0006000cu, 0x00000008u, 0x000045dbu, 0x00000001u, 0x0000004au, 0x0000457fu, 0x00050082u, 0x00000008u, 0x000045dcu, 0x0000026fu, 0x000045dbu, 0x0007000cu, 0x00000008u, 0x000045ddu, 0x00000001u, 0x00000027u, 0x000045dcu, 0x0000026fu, 0x0003003eu, 0x000045d3u, 0x000045ddu, 0x000500c4u, 0x00000008u, 0x000045e0u, 0x0000457fu, 0x000045ddu, 0x000500c7u, 0x00000008u, 0x000045e1u, 0x000045e0u, 0x00000b37u, 0x0003003eu, 0x000045d4u, 0x000045e1u, 0x000500c7u, 0x00000008u, 0x000045e3u, 0x000045e1u, 0x0000035eu, 0x0003003eu, 0x000045d5u, 0x000045e3u, 0x000500c3u, 0x00000008u, 0x000045e5u, 0x000045e1u, 0x0000025du, 0x0003003eu, 0x000045d7u, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x000045e6u, 0x000045d7u, 0x000045e5u, 0x0004003du, 0x000001aeu, 0x000045e7u, 0x000045e6u, 0x00040072u, 0x000000efu, 0x000045e8u, 0x000045e7u, 0x0003003eu, 0x000045d6u, 0x000045e8u, 0x00050041u, 0x00000046u, 0x000045e9u, 0x000045d6u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045eau, 0x000045e9u, 0x00050084u, 0x00000008u, 0x000045ecu, 0x000045eau, 0x000045e3u, 0x000500c3u, 0x00000008u, 0x000045edu, 0x000045ecu, 0x00000263u, 0x00050041u, 0x00000046u, 0x000045eeu, 0x000045d6u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000045efu, 0x000045eeu, 0x00050080u, 0x00000008u, 0x000045f0u, 0x000045edu, 0x000045efu, 0x0003003eu, 0x000045d8u, 0x000045f0u, 0x00050050u, 0x000000efu, 0x000045f3u, 0x000045f0u, 0x000045ddu, 0x0003003eu, 0x000045d9u, 0x000045f3u, 0x0003003eu, 0x00004572u, 0x000045f3u, 0x00050041u, 0x00000046u, 0x00004582u, 0x00004572u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004583u, 0x00004582u, 0x0003003eu, 0x00004574u, 0x00004583u, 0x0004003du, 0x00000044u, 0x00004584u, 0x00004552u, 0x0007004fu, 0x000000efu, 0x00004585u, 0x00004584u, 0x00004584u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00004586u, 0x00004572u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004587u, 0x00004586u, 0x00050050u, 0x000000efu, 0x00004588u, 0x00004587u, 0x00004587u, 0x00050084u, 0x000000efu, 0x00004589u, 0x00004585u, 0x00004588u, 0x0003003eu, 0x00004575u, 0x00004589u, 0x000500c3u, 0x00000008u, 0x0000458bu, 0x00000c2eu, 0x00004583u, 0x0004007eu, 0x00000008u, 0x0000458cu, 0x0000458bu, 0x000500c7u, 0x00000008u, 0x0000458du, 0x00000c2du, 0x0000458cu, 0x0003003eu, 0x00004576u, 0x0000458du, 0x0004003du, 0x000000efu, 0x0000458eu, 0x00004575u, 0x00050050u, 0x000000efu, 0x00004590u, 0x0000458du, 0x0000458du, 0x000500c7u, 0x000000efu, 0x00004591u, 0x0000458eu, 0x00004590u, 0x0003003eu, 0x00004577u, 0x00004591u, 0x000500abu, 0x00000069u, 0x00004593u, 0x00004583u, 0x0000026fu, 0x000300f7u, 0x00004594u, 0x00000000u, 0x000400fau, 0x00004593u, 0x00004595u, 0x00004596u, 0x000200f8u, 0x00004596u, 0x0004003du, 0x000000efu, 0x0000459cu, 0x00004575u, 0x000500c4u, 0x000000efu, 0x0000459eu, 0x0000459cu, 0x0000f3a2u, 0x0003003eu, 0x00004578u, 0x0000459eu, 0x000200f9u, 0x00004594u, 0x000200f8u, 0x00004595u, 0x0004003du, 0x000000efu, 0x00004597u, 0x00004575u, 0x00050082u, 0x00000008u, 0x00004599u, 0x0000026cu, 0x00004583u, 0x00050050u, 0x000000efu, 0x0000459au, 0x00004599u, 0x00004599u, 0x000500c3u, 0x000000efu, 0x0000459bu, 0x00004597u, 0x0000459au, 0x0003003eu, 0x00004575u, 0x0000459bu, 0x0003003eu, 0x00004578u, 0x0000459bu, 0x000200f9u, 0x00004594u, 0x000200f8u, 0x00004594u, 0x0004003du, 0x000000efu, 0x0000459fu, 0x00004577u, 0x000500abu, 0x0000087bu, 0x000045a0u, 0x0000459fu, 0x00000c47u, 0x0004009au, 0x00000069u, 0x000045a1u, 0x000045a0u, 0x000300f7u, 0x000045a2u, 0x00000000u, 0x000400fau, 0x000045a1u, 0x000045a3u, 0x000045a2u, 0x000200f8u, 0x000045a3u, 0x00050041u, 0x00000046u, 0x000045a4u, 0x00004577u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000045a5u, 0x000045a4u, 0x000500abu, 0x00000069u, 0x000045a7u, 0x000045a5u, 0x0000458du, 0x000300f7u, 0x000045a8u, 0x00000000u, 0x000400fau, 0x000045a7u, 0x000045a9u, 0x000045a8u, 0x000200f8u, 0x000045a9u, 0x0004003du, 0x00000008u, 0x000045abu, 0x000045a4u, 0x000500abu, 0x00000069u, 0x000045acu, 0x000045abu, 0x00000220u, 0x000200f9u, 0x000045a8u, 0x000200f8u, 0x000045a8u, 0x000700f5u, 0x00000069u, 0x000045adu, 0x000045a7u, 0x000045a3u, 0x000045acu, 0x000045a9u, 0x000300f7u, 0x000045aeu, 0x00000000u, 0x000400fau, 0x000045adu, 0x000045afu, 0x000045aeu, 0x000200f8u, 0x000045afu, 0x00050041u, 0x00000046u, 0x000045b0u, 0x00004575u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000045b1u, 0x000045b0u, 0x000500c7u, 0x00000008u, 0x000045b2u, 0x000045b1u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x000045b3u, 0x000045b2u, 0x00000220u, 0x000300f7u, 0x000045b4u, 0x00000000u, 0x000400fau, 0x000045b3u, 0x000045b5u, 0x000045b6u, 0x000200f8u, 0x000045b6u, 0x00050041u, 0x00000046u, 0x000045b8u, 0x00004578u, 0x0000032du, 0x0003003eu, 0x000045b8u, 0x00000c60u, 0x000200f9u, 0x000045b4u, 0x000200f8u, 0x000045b5u, 0x00050041u, 0x00000046u, 0x000045b7u, 0x00004578u, 0x0000032du, 0x0003003eu, 0x000045b7u, 0x00000c1bu, 0x000200f9u, 0x000045b4u, 0x000200f8u, 0x000045b4u, 0x0003003eu, 0x00004553u, 0x00000559u, 0x000200f9u, 0x000045aeu, 0x000200f8u, 0x000045aeu, 0x000600a9u, 0x00000069u, 0x0000f3cdu, 0x000045adu, 0x00000559u, 0x00009263u, 0x00050041u, 0x00000046u, 0x000045b9u, 0x00004577u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045bau, 0x000045b9u, 0x000500abu, 0x00000069u, 0x000045bcu, 0x000045bau, 0x0000458du, 0x000300f7u, 0x000045bdu, 0x00000000u, 0x000400fau, 0x000045bcu, 0x000045beu, 0x000045bdu, 0x000200f8u, 0x000045beu, 0x0004003du, 0x00000008u, 0x000045c0u, 0x000045b9u, 0x000500abu, 0x00000069u, 0x000045c1u, 0x000045c0u, 0x00000220u, 0x000200f9u, 0x000045bdu, 0x000200f8u, 0x000045bdu, 0x000700f5u, 0x00000069u, 0x000045c2u, 0x000045bcu, 0x000045aeu, 0x000045c1u, 0x000045beu, 0x000300f7u, 0x000045c3u, 0x00000000u, 0x000400fau, 0x000045c2u, 0x000045c4u, 0x000045c3u, 0x000200f8u, 0x000045c4u, 0x00050041u, 0x00000046u, 0x000045c5u, 0x00004575u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000045c6u, 0x000045c5u, 0x000500c7u, 0x00000008u, 0x000045c7u, 0x000045c6u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x000045c8u, 0x000045c7u, 0x00000220u, 0x000300f7u, 0x000045c9u, 0x00000000u, 0x000400fau, 0x000045c8u, 0x000045cau, 0x000045cbu, 0x000200f8u, 0x000045cbu, 0x00050041u, 0x00000046u, 0x000045cdu, 0x00004578u, 0x0000045cu, 0x0003003eu, 0x000045cdu, 0x00000c60u, 0x000200f9u, 0x000045c9u, 0x000200f8u, 0x000045cau, 0x00050041u, 0x00000046u, 0x000045ccu, 0x00004578u, 0x0000045cu, 0x0003003eu, 0x000045ccu, 0x00000c1bu, 0x000200f9u, 0x000045c9u, 0x000200f8u, 0x000045c9u, 0x0003003eu, 0x00004553u, 0x00000559u, 0x000200f9u, 0x000045c3u, 0x000200f8u, 0x000045c3u, 0x000600a9u, 0x00000069u, 0x0000f3ceu, 0x000045c2u, 0x00000559u, 0x0000f3cdu, 0x000200f9u, 0x000045a2u, 0x000200f8u, 0x000045a2u, 0x000700f5u, 0x00000069u, 0x000092eeu, 0x00009263u, 0x00004594u, 0x0000f3ceu, 0x000045c3u, 0x000300f7u, 0x000045cfu, 0x00000000u, 0x000400fau, 0x0000457du, 0x000045d0u, 0x000045cfu, 0x000200f8u, 0x000045d0u, 0x0003003eu, 0x00004578u, 0x00000c7au, 0x0003003eu, 0x00004553u, 0x00000559u, 0x000200f9u, 0x000045cfu, 0x000200f8u, 0x000045cfu, 0x000600a9u, 0x00000069u, 0x0000f3cfu, 0x0000457du, 0x00000559u, 0x000092eeu, 0x0004003du, 0x000000efu, 0x000045d1u, 0x00004578u, 0x0008000cu, 0x000000efu, 0x000045d2u, 0x00000001u, 0x0000002du, 0x000045d1u, 0x00000c7du, 0x00000c7eu, 0x0003003eu, 0x00004579u, 0x000045d2u, 0x0003003eu, 0x00004551u, 0x0000f3cfu, 0x0003003eu, 0x00004550u, 0x000045d2u, 0x000200f9u, 0x00004566u, 0x000200f8u, 0x00004566u, 0x000700f5u, 0x00000069u, 0x0000e574u, 0x0000f3cfu, 0x000045cfu, 0x00009263u, 0x00004568u, 0x000700f5u, 0x000000efu, 0x000092f4u, 0x000045d2u, 0x000045cfu, 0x000045f6u, 0x00004568u, 0x0003003eu, 0x00004555u, 0x000092f4u, 0x0003003eu, 0x0000210au, 0x000092f4u, 0x000200f9u, 0x0000231bu, 0x000200f8u, 0x0000231cu, 0x00070041u, 0x00001e14u, 0x00002328u, 0x000002dbu, 0x00000220u, 0x00002302u, 0x0000022au, 0x0004003du, 0x00000009u, 0x00002329u, 0x00002328u, 0x0008004fu, 0x00000044u, 0x0000232au, 0x00002329u, 0x00002329u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x00000044u, 0x0000232cu, 0x0000232au, 0x0000f39eu, 0x0003003eu, 0x0000213fu, 0x0000232cu, 0x000300f7u, 0x0000232eu, 0x00000000u, 0x000400fau, 0x000021e0u, 0x0000232fu, 0x00002330u, 0x000200f8u, 0x00002330u, 0x0003003eu, 0x00002143u, 0x0000232cu, 0x0007004fu, 0x000000efu, 0x0000454eu, 0x0000232cu, 0x0000232cu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000454cu, 0x0000454eu, 0x0003003eu, 0x0000210au, 0x0000454eu, 0x000200f9u, 0x0000232eu, 0x000200f8u, 0x0000232fu, 0x0003003eu, 0x00002141u, 0x0000232cu, 0x0003003eu, 0x00002142u, 0x00009306u, 0x00050041u, 0x00000046u, 0x000044d2u, 0x00002141u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000044d3u, 0x000044d2u, 0x0003003eu, 0x000044c8u, 0x000044d3u, 0x000500b3u, 0x00000069u, 0x000044d5u, 0x000044d3u, 0x00000220u, 0x0003003eu, 0x000044c9u, 0x000044d5u, 0x000500c7u, 0x00000008u, 0x000044d7u, 0x000044d3u, 0x00000c1bu, 0x0003003eu, 0x000044c8u, 0x000044d7u, 0x0003003eu, 0x000044cbu, 0x000044d7u, 0x0006000cu, 0x00000008u, 0x00004533u, 0x00000001u, 0x0000004au, 0x000044d7u, 0x00050082u, 0x00000008u, 0x00004534u, 0x0000026fu, 0x00004533u, 0x0007000cu, 0x00000008u, 0x00004535u, 0x00000001u, 0x00000027u, 0x00004534u, 0x0000026fu, 0x0003003eu, 0x0000452bu, 0x00004535u, 0x000500c4u, 0x00000008u, 0x00004538u, 0x000044d7u, 0x00004535u, 0x000500c7u, 0x00000008u, 0x00004539u, 0x00004538u, 0x00000b37u, 0x0003003eu, 0x0000452cu, 0x00004539u, 0x000500c7u, 0x00000008u, 0x0000453bu, 0x00004539u, 0x0000035eu, 0x0003003eu, 0x0000452du, 0x0000453bu, 0x000500c3u, 0x00000008u, 0x0000453du, 0x00004539u, 0x0000025du, 0x0003003eu, 0x0000452fu, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x0000453eu, 0x0000452fu, 0x0000453du, 0x0004003du, 0x000001aeu, 0x0000453fu, 0x0000453eu, 0x00040072u, 0x000000efu, 0x00004540u, 0x0000453fu, 0x0003003eu, 0x0000452eu, 0x00004540u, 0x00050041u, 0x00000046u, 0x00004541u, 0x0000452eu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004542u, 0x00004541u, 0x00050084u, 0x00000008u, 0x00004544u, 0x00004542u, 0x0000453bu, 0x000500c3u, 0x00000008u, 0x00004545u, 0x00004544u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00004546u, 0x0000452eu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004547u, 0x00004546u, 0x00050080u, 0x00000008u, 0x00004548u, 0x00004545u, 0x00004547u, 0x0003003eu, 0x00004530u, 0x00004548u, 0x00050050u, 0x000000efu, 0x0000454bu, 0x00004548u, 0x00004535u, 0x0003003eu, 0x00004531u, 0x0000454bu, 0x0003003eu, 0x000044cau, 0x0000454bu, 0x00050041u, 0x00000046u, 0x000044dau, 0x000044cau, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000044dbu, 0x000044dau, 0x0003003eu, 0x000044ccu, 0x000044dbu, 0x0004003du, 0x00000044u, 0x000044dcu, 0x00002141u, 0x0007004fu, 0x000000efu, 0x000044ddu, 0x000044dcu, 0x000044dcu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x000044deu, 0x000044cau, 0x0000032du, 0x0004003du, 0x00000008u, 0x000044dfu, 0x000044deu, 0x00050050u, 0x000000efu, 0x000044e0u, 0x000044dfu, 0x000044dfu, 0x00050084u, 0x000000efu, 0x000044e1u, 0x000044ddu, 0x000044e0u, 0x0003003eu, 0x000044cdu, 0x000044e1u, 0x000500c3u, 0x00000008u, 0x000044e3u, 0x00000c2eu, 0x000044dbu, 0x0004007eu, 0x00000008u, 0x000044e4u, 0x000044e3u, 0x000500c7u, 0x00000008u, 0x000044e5u, 0x00000c2du, 0x000044e4u, 0x0003003eu, 0x000044ceu, 0x000044e5u, 0x0004003du, 0x000000efu, 0x000044e6u, 0x000044cdu, 0x00050050u, 0x000000efu, 0x000044e8u, 0x000044e5u, 0x000044e5u, 0x000500c7u, 0x000000efu, 0x000044e9u, 0x000044e6u, 0x000044e8u, 0x0003003eu, 0x000044cfu, 0x000044e9u, 0x000500abu, 0x00000069u, 0x000044ebu, 0x000044dbu, 0x0000026fu, 0x000300f7u, 0x000044ecu, 0x00000000u, 0x000400fau, 0x000044ebu, 0x000044edu, 0x000044eeu, 0x000200f8u, 0x000044eeu, 0x0004003du, 0x000000efu, 0x000044f4u, 0x000044cdu, 0x000500c4u, 0x000000efu, 0x000044f6u, 0x000044f4u, 0x0000f3a2u, 0x0003003eu, 0x000044d0u, 0x000044f6u, 0x000200f9u, 0x000044ecu, 0x000200f8u, 0x000044edu, 0x0004003du, 0x000000efu, 0x000044efu, 0x000044cdu, 0x00050082u, 0x00000008u, 0x000044f1u, 0x0000026cu, 0x000044dbu, 0x00050050u, 0x000000efu, 0x000044f2u, 0x000044f1u, 0x000044f1u, 0x000500c3u, 0x000000efu, 0x000044f3u, 0x000044efu, 0x000044f2u, 0x0003003eu, 0x000044cdu, 0x000044f3u, 0x0003003eu, 0x000044d0u, 0x000044f3u, 0x000200f9u, 0x000044ecu, 0x000200f8u, 0x000044ecu, 0x0004003du, 0x000000efu, 0x000044f7u, 0x000044cfu, 0x000500abu, 0x0000087bu, 0x000044f8u, 0x000044f7u, 0x00000c47u, 0x0004009au, 0x00000069u, 0x000044f9u, 0x000044f8u, 0x000300f7u, 0x000044fau, 0x00000000u, 0x000400fau, 0x000044f9u, 0x000044fbu, 0x000044fau, 0x000200f8u, 0x000044fbu, 0x00050041u, 0x00000046u, 0x000044fcu, 0x000044cfu, 0x0000032du, 0x0004003du, 0x00000008u, 0x000044fdu, 0x000044fcu, 0x000500abu, 0x00000069u, 0x000044ffu, 0x000044fdu, 0x000044e5u, 0x000300f7u, 0x00004500u, 0x00000000u, 0x000400fau, 0x000044ffu, 0x00004501u, 0x00004500u, 0x000200f8u, 0x00004501u, 0x0004003du, 0x00000008u, 0x00004503u, 0x000044fcu, 0x000500abu, 0x00000069u, 0x00004504u, 0x00004503u, 0x00000220u, 0x000200f9u, 0x00004500u, 0x000200f8u, 0x00004500u, 0x000700f5u, 0x00000069u, 0x00004505u, 0x000044ffu, 0x000044fbu, 0x00004504u, 0x00004501u, 0x000300f7u, 0x00004506u, 0x00000000u, 0x000400fau, 0x00004505u, 0x00004507u, 0x00004506u, 0x000200f8u, 0x00004507u, 0x00050041u, 0x00000046u, 0x00004508u, 0x000044cdu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004509u, 0x00004508u, 0x000500c7u, 0x00000008u, 0x0000450au, 0x00004509u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x0000450bu, 0x0000450au, 0x00000220u, 0x000300f7u, 0x0000450cu, 0x00000000u, 0x000400fau, 0x0000450bu, 0x0000450du, 0x0000450eu, 0x000200f8u, 0x0000450eu, 0x00050041u, 0x00000046u, 0x00004510u, 0x000044d0u, 0x0000032du, 0x0003003eu, 0x00004510u, 0x00000c60u, 0x000200f9u, 0x0000450cu, 0x000200f8u, 0x0000450du, 0x00050041u, 0x00000046u, 0x0000450fu, 0x000044d0u, 0x0000032du, 0x0003003eu, 0x0000450fu, 0x00000c1bu, 0x000200f9u, 0x0000450cu, 0x000200f8u, 0x0000450cu, 0x0003003eu, 0x00002142u, 0x00000559u, 0x000200f9u, 0x00004506u, 0x000200f8u, 0x00004506u, 0x000600a9u, 0x00000069u, 0x0000f3d0u, 0x00004505u, 0x00000559u, 0x00009306u, 0x00050041u, 0x00000046u, 0x00004511u, 0x000044cfu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004512u, 0x00004511u, 0x000500abu, 0x00000069u, 0x00004514u, 0x00004512u, 0x000044e5u, 0x000300f7u, 0x00004515u, 0x00000000u, 0x000400fau, 0x00004514u, 0x00004516u, 0x00004515u, 0x000200f8u, 0x00004516u, 0x0004003du, 0x00000008u, 0x00004518u, 0x00004511u, 0x000500abu, 0x00000069u, 0x00004519u, 0x00004518u, 0x00000220u, 0x000200f9u, 0x00004515u, 0x000200f8u, 0x00004515u, 0x000700f5u, 0x00000069u, 0x0000451au, 0x00004514u, 0x00004506u, 0x00004519u, 0x00004516u, 0x000300f7u, 0x0000451bu, 0x00000000u, 0x000400fau, 0x0000451au, 0x0000451cu, 0x0000451bu, 0x000200f8u, 0x0000451cu, 0x00050041u, 0x00000046u, 0x0000451du, 0x000044cdu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000451eu, 0x0000451du, 0x000500c7u, 0x00000008u, 0x0000451fu, 0x0000451eu, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00004520u, 0x0000451fu, 0x00000220u, 0x000300f7u, 0x00004521u, 0x00000000u, 0x000400fau, 0x00004520u, 0x00004522u, 0x00004523u, 0x000200f8u, 0x00004523u, 0x00050041u, 0x00000046u, 0x00004525u, 0x000044d0u, 0x0000045cu, 0x0003003eu, 0x00004525u, 0x00000c60u, 0x000200f9u, 0x00004521u, 0x000200f8u, 0x00004522u, 0x00050041u, 0x00000046u, 0x00004524u, 0x000044d0u, 0x0000045cu, 0x0003003eu, 0x00004524u, 0x00000c1bu, 0x000200f9u, 0x00004521u, 0x000200f8u, 0x00004521u, 0x0003003eu, 0x00002142u, 0x00000559u, 0x000200f9u, 0x0000451bu, 0x000200f8u, 0x0000451bu, 0x000600a9u, 0x00000069u, 0x0000f3d1u, 0x0000451au, 0x00000559u, 0x0000f3d0u, 0x000200f9u, 0x000044fau, 0x000200f8u, 0x000044fau, 0x000700f5u, 0x00000069u, 0x00009390u, 0x00009306u, 0x000044ecu, 0x0000f3d1u, 0x0000451bu, 0x000300f7u, 0x00004527u, 0x00000000u, 0x000400fau, 0x000044d5u, 0x00004528u, 0x00004527u, 0x000200f8u, 0x00004528u, 0x0003003eu, 0x000044d0u, 0x00000c7au, 0x0003003eu, 0x00002142u, 0x00000559u, 0x000200f9u, 0x00004527u, 0x000200f8u, 0x00004527u, 0x000600a9u, 0x00000069u, 0x0000f3d2u, 0x000044d5u, 0x00000559u, 0x00009390u, 0x0004003du, 0x000000efu, 0x00004529u, 0x000044d0u, 0x0008000cu, 0x000000efu, 0x0000452au, 0x00000001u, 0x0000002du, 0x00004529u, 0x00000c7du, 0x00000c7eu, 0x0003003eu, 0x000044d1u, 0x0000452au, 0x0003003eu, 0x00002140u, 0x0000f3d2u, 0x0003003eu, 0x0000210au, 0x0000452au, 0x000200f9u, 0x0000232eu, 0x000200f8u, 0x0000232eu, 0x000700f5u, 0x00000069u, 0x0000e663u, 0x0000f3d2u, 0x00004527u, 0x00009306u, 0x00002330u, 0x000700f5u, 0x000000efu, 0x00009732u, 0x0000452au, 0x00004527u, 0x0000454eu, 0x00002330u, 0x000200f9u, 0x0000231bu, 0x000200f8u, 0x0000231bu, 0x000700f5u, 0x00000069u, 0x0000e662u, 0x0000e663u, 0x0000232eu, 0x00009306u, 0x00004566u, 0x000700f5u, 0x00000069u, 0x0000e569u, 0x00009263u, 0x0000232eu, 0x0000e574u, 0x00004566u, 0x000700f5u, 0x000000efu, 0x00009731u, 0x00009732u, 0x0000232eu, 0x000092f4u, 0x00004566u, 0x0003003eu, 0x0000211cu, 0x000081ddu, 0x0003003eu, 0x000020dau, 0x00000559u, 0x000200f9u, 0x000022f7u, 0x000200f8u, 0x000022f7u, 0x000700f5u, 0x00000069u, 0x0000e661u, 0x00009306u, 0x000022dau, 0x0000e662u, 0x0000231bu, 0x000700f5u, 0x00000069u, 0x0000e568u, 0x00009263u, 0x000022dau, 0x0000e569u, 0x0000231bu, 0x000700f5u, 0x000000efu, 0x000096ddu, 0x00008015u, 0x000022dau, 0x00009731u, 0x0000231bu, 0x000600a9u, 0x00000006u, 0x0000f3d3u, 0x0000220au, 0x000081ddu, 0x00009620u, 0x000600a9u, 0x00000069u, 0x0000f3d4u, 0x0000220au, 0x00000559u, 0x00002207u, 0x000300f7u, 0x00002343u, 0x00000000u, 0x000400fau, 0x0000f3d4u, 0x00002344u, 0x00002343u, 0x000200f8u, 0x00002344u, 0x000400a8u, 0x00000069u, 0x00002347u, 0x00002216u, 0x000500a7u, 0x00000069u, 0x00002348u, 0x00002210u, 0x00002347u, 0x000300f7u, 0x00002349u, 0x00000000u, 0x000400fau, 0x00002348u, 0x0000234au, 0x0000234bu, 0x000200f8u, 0x0000234bu, 0x00080041u, 0x00000671u, 0x00002352u, 0x00000a20u, 0x00000220u, 0x00001fa1u, 0x0000022du, 0x0000f3d3u, 0x0004003du, 0x0000000fu, 0x00002353u, 0x00002352u, 0x00040071u, 0x00000006u, 0x00002354u, 0x00002353u, 0x0003003eu, 0x0000214bu, 0x00002354u, 0x0003003eu, 0x0000214du, 0x00002354u, 0x00060041u, 0x000002b4u, 0x00004636u, 0x000002b2u, 0x00000220u, 0x00002354u, 0x0004003du, 0x000002aeu, 0x00004637u, 0x00004636u, 0x00050051u, 0x00000006u, 0x00004638u, 0x00004637u, 0x00000000u, 0x0003003eu, 0x00006e52u, 0x00004638u, 0x00050051u, 0x00000006u, 0x0000463au, 0x00004637u, 0x00000001u, 0x0003003eu, 0x00006e53u, 0x0000463au, 0x00050051u, 0x00000006u, 0x0000463cu, 0x00004637u, 0x00000002u, 0x0003003eu, 0x00006e54u, 0x0000463cu, 0x00050051u, 0x00000006u, 0x0000463eu, 0x00004637u, 0x00000003u, 0x0003003eu, 0x00006e55u, 0x0000463eu, 0x00050051u, 0x00000006u, 0x00004640u, 0x00004637u, 0x00000004u, 0x0003003eu, 0x00006e56u, 0x00004640u, 0x00050051u, 0x00000006u, 0x00004642u, 0x00004637u, 0x00000005u, 0x0003003eu, 0x00006e57u, 0x00004642u, 0x00050051u, 0x0000000fu, 0x00004644u, 0x00004637u, 0x00000006u, 0x0003003eu, 0x00006e58u, 0x00004644u, 0x00050051u, 0x0000000fu, 0x00004646u, 0x00004637u, 0x00000007u, 0x0003003eu, 0x00006e59u, 0x00004646u, 0x00050051u, 0x0000000fu, 0x00004648u, 0x00004637u, 0x00000008u, 0x0003003eu, 0x00006e5au, 0x00004648u, 0x00050051u, 0x0000000fu, 0x0000464au, 0x00004637u, 0x00000009u, 0x0003003eu, 0x00006e5bu, 0x0000464au, 0x00050051u, 0x0000000fu, 0x0000464cu, 0x00004637u, 0x0000000au, 0x0003003eu, 0x00006e5cu, 0x0000464cu, 0x00050051u, 0x0000000fu, 0x0000464eu, 0x00004637u, 0x0000000bu, 0x0003003eu, 0x00006e5du, 0x0000464eu, 0x00050051u, 0x0000000fu, 0x00004650u, 0x00004637u, 0x0000000cu, 0x0003003eu, 0x00006e5eu, 0x00004650u, 0x00050051u, 0x0000000fu, 0x00004652u, 0x00004637u, 0x0000000du, 0x0003003eu, 0x00006e5fu, 0x00004652u, 0x00110050u, 0x00000023u, 0x00006e6eu, 0x00004638u, 0x0000463au, 0x0000463cu, 0x0000463eu, 0x00004640u, 0x00004642u, 0x00004644u, 0x00004646u, 0x00004648u, 0x0000464au, 0x0000464cu, 0x0000464eu, 0x00004650u, 0x00004652u, 0x0003003eu, 0x00006e6fu, 0x00004638u, 0x0003003eu, 0x00006e70u, 0x0000463au, 0x0003003eu, 0x00006e71u, 0x0000463cu, 0x0003003eu, 0x00006e72u, 0x0000463eu, 0x0003003eu, 0x00006e73u, 0x00004640u, 0x0003003eu, 0x00006e74u, 0x00004642u, 0x0003003eu, 0x00006e75u, 0x00004644u, 0x0003003eu, 0x00006e76u, 0x00004646u, 0x0003003eu, 0x00006e77u, 0x00004648u, 0x0003003eu, 0x00006e78u, 0x0000464au, 0x0003003eu, 0x00006e79u, 0x0000464cu, 0x0003003eu, 0x00006e7au, 0x0000464eu, 0x0003003eu, 0x00006e7bu, 0x00004650u, 0x0003003eu, 0x00006e7cu, 0x00004652u, 0x0003003eu, 0x00007727u, 0x00004638u, 0x0003003eu, 0x00007728u, 0x0000463au, 0x0003003eu, 0x00007729u, 0x0000463cu, 0x0003003eu, 0x0000772au, 0x0000463eu, 0x0003003eu, 0x0000772bu, 0x00004640u, 0x0003003eu, 0x0000772cu, 0x00004642u, 0x0003003eu, 0x0000772du, 0x00004644u, 0x0003003eu, 0x0000772eu, 0x00004646u, 0x0003003eu, 0x0000772fu, 0x00004648u, 0x0003003eu, 0x00007730u, 0x0000464au, 0x0003003eu, 0x00007731u, 0x0000464cu, 0x0003003eu, 0x00007732u, 0x0000464eu, 0x0003003eu, 0x00007733u, 0x00004650u, 0x0003003eu, 0x00007734u, 0x00004652u, 0x0003003eu, 0x00007752u, 0x00004638u, 0x0003003eu, 0x00007753u, 0x0000463au, 0x0003003eu, 0x00007754u, 0x0000463cu, 0x0003003eu, 0x00007755u, 0x0000463eu, 0x0003003eu, 0x00007756u, 0x00004640u, 0x0003003eu, 0x00007757u, 0x00004642u, 0x0003003eu, 0x00007758u, 0x00004644u, 0x0003003eu, 0x00007759u, 0x00004646u, 0x0003003eu, 0x0000775au, 0x00004648u, 0x0003003eu, 0x0000775bu, 0x0000464au, 0x0003003eu, 0x0000775cu, 0x0000464cu, 0x0003003eu, 0x0000775du, 0x0000464eu, 0x0003003eu, 0x0000775eu, 0x00004650u, 0x0003003eu, 0x0000775fu, 0x00004652u, 0x0003003eu, 0x0000214fu, 0x000021c0u, 0x0003003eu, 0x00002150u, 0x000096ddu, 0x0003003eu, 0x00002151u, 0x000021d1u, 0x0003003eu, 0x00002152u, 0x000021d4u, 0x0003003eu, 0x00002153u, 0x000021d7u, 0x0003003eu, 0x00002154u, 0x00002201u, 0x0003003eu, 0x00002155u, 0x00002210u, 0x0003003eu, 0x00002156u, 0x0000988bu, 0x00040071u, 0x00000006u, 0x00004798u, 0x00004652u, 0x0004007cu, 0x00000008u, 0x00004799u, 0x00004798u, 0x000500c7u, 0x00000008u, 0x0000479au, 0x00004799u, 0x0000022au, 0x000500abu, 0x00000069u, 0x0000479bu, 0x0000479au, 0x00000220u, 0x0004007cu, 0x00000008u, 0x0000479eu, 0x00004638u, 0x0004007cu, 0x00000008u, 0x000047a1u, 0x0000463au, 0x00040071u, 0x00000006u, 0x000047a4u, 0x0000464cu, 0x0004007cu, 0x00000008u, 0x000047a5u, 0x000047a4u, 0x0003003eu, 0x00004655u, 0x0000479bu, 0x00050041u, 0x00000046u, 0x000047a6u, 0x00002150u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000047a7u, 0x000047a6u, 0x0003003eu, 0x00004656u, 0x000047a7u, 0x0003003eu, 0x00004657u, 0x0000479eu, 0x0003003eu, 0x00004658u, 0x000047a1u, 0x0003003eu, 0x00004659u, 0x000047a5u, 0x0008000cu, 0x00000008u, 0x00004b61u, 0x00000001u, 0x0000002du, 0x000047a7u, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x00004656u, 0x00004b61u, 0x000500b1u, 0x00000069u, 0x00004b63u, 0x000047a5u, 0x00000266u, 0x000300f7u, 0x00004b64u, 0x00000000u, 0x000400fau, 0x00004b63u, 0x00004b65u, 0x00004b66u, 0x000200f8u, 0x00004b66u, 0x00050082u, 0x00000008u, 0x00004b6bu, 0x0000115du, 0x000047a5u, 0x000500c4u, 0x00000008u, 0x00004b6du, 0x00004b61u, 0x00004b6bu, 0x0003003eu, 0x00004656u, 0x00004b6du, 0x000500c3u, 0x00000008u, 0x00004b6fu, 0x00004b6du, 0x00000554u, 0x0003003eu, 0x00004656u, 0x00004b6fu, 0x000200f9u, 0x00004b64u, 0x000200f8u, 0x00004b65u, 0x000500c3u, 0x00000008u, 0x00004b69u, 0x00004b61u, 0x000047a5u, 0x0003003eu, 0x00004656u, 0x00004b69u, 0x000200f9u, 0x00004b64u, 0x000200f8u, 0x00004b64u, 0x000700f5u, 0x00000008u, 0x000098dcu, 0x00004b69u, 0x00004b65u, 0x00004b6fu, 0x00004b66u, 0x000300f7u, 0x00004b71u, 0x00000000u, 0x000400fau, 0x0000479bu, 0x00004b72u, 0x00004b73u, 0x000200f8u, 0x00004b73u, 0x000500c4u, 0x00000008u, 0x00004b89u, 0x0000479eu, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004b8bu, 0x000098dcu, 0x00004b89u, 0x0003003eu, 0x00004656u, 0x00004b8bu, 0x000200f9u, 0x00004b71u, 0x000200f8u, 0x00004b72u, 0x000500c3u, 0x00000008u, 0x00004b75u, 0x000098dcu, 0x00000230u, 0x000500afu, 0x00000069u, 0x00004b77u, 0x00004b75u, 0x000047a1u, 0x0003003eu, 0x00004b5eu, 0x00004b77u, 0x000300f7u, 0x00004b79u, 0x00000000u, 0x000400fau, 0x00004b77u, 0x00004b7au, 0x00004b7bu, 0x000200f8u, 0x00004b7bu, 0x000500c4u, 0x00000008u, 0x00004b85u, 0x0000479eu, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004b86u, 0x000098dcu, 0x00004b85u, 0x0007000cu, 0x00000008u, 0x00004b87u, 0x00000001u, 0x0000002au, 0x00004b86u, 0x00000220u, 0x0003003eu, 0x00004656u, 0x00004b87u, 0x000200f9u, 0x00004b79u, 0x000200f8u, 0x00004b7au, 0x000500c3u, 0x00000008u, 0x00004b7du, 0x000047a1u, 0x0000022du, 0x000500c3u, 0x00000008u, 0x00004b7fu, 0x0000479eu, 0x0000022du, 0x00050082u, 0x00000008u, 0x00004b80u, 0x00004b7du, 0x00004b7fu, 0x000500c7u, 0x00000008u, 0x00004b81u, 0x00004b80u, 0x00001174u, 0x000500c4u, 0x00000008u, 0x00004b82u, 0x00004b81u, 0x00000236u, 0x0003003eu, 0x00004656u, 0x00004b82u, 0x000200f9u, 0x00004b79u, 0x000200f8u, 0x00004b79u, 0x000700f5u, 0x00000008u, 0x000098dfu, 0x00004b82u, 0x00004b7au, 0x00004b87u, 0x00004b7bu, 0x000200f9u, 0x00004b71u, 0x000200f8u, 0x00004b71u, 0x000700f5u, 0x00000008u, 0x000098deu, 0x000098dfu, 0x00004b79u, 0x00004b8bu, 0x00004b73u, 0x0003003eu, 0x00004b5fu, 0x000098deu, 0x0003003eu, 0x000047a6u, 0x000098deu, 0x000500c7u, 0x00000008u, 0x000047aeu, 0x00004799u, 0x00000233u, 0x000500abu, 0x00000069u, 0x000047afu, 0x000047aeu, 0x00000220u, 0x0004007cu, 0x00000008u, 0x000047b2u, 0x0000463cu, 0x0004007cu, 0x00000008u, 0x000047b5u, 0x0000463eu, 0x00040071u, 0x00000006u, 0x000047b8u, 0x00004650u, 0x0004007cu, 0x00000008u, 0x000047b9u, 0x000047b8u, 0x0003003eu, 0x0000465au, 0x000047afu, 0x00050041u, 0x00000046u, 0x000047bau, 0x00002150u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000047bbu, 0x000047bau, 0x0003003eu, 0x0000465bu, 0x000047bbu, 0x0003003eu, 0x0000465cu, 0x000047b2u, 0x0003003eu, 0x0000465du, 0x000047b5u, 0x0003003eu, 0x0000465eu, 0x000047b9u, 0x0008000cu, 0x00000008u, 0x00004b90u, 0x00000001u, 0x0000002du, 0x000047bbu, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x0000465bu, 0x00004b90u, 0x000500b1u, 0x00000069u, 0x00004b92u, 0x000047b9u, 0x00000266u, 0x000300f7u, 0x00004b93u, 0x00000000u, 0x000400fau, 0x00004b92u, 0x00004b94u, 0x00004b95u, 0x000200f8u, 0x00004b95u, 0x00050082u, 0x00000008u, 0x00004b9au, 0x0000115du, 0x000047b9u, 0x000500c4u, 0x00000008u, 0x00004b9cu, 0x00004b90u, 0x00004b9au, 0x0003003eu, 0x0000465bu, 0x00004b9cu, 0x000500c3u, 0x00000008u, 0x00004b9eu, 0x00004b9cu, 0x00000554u, 0x0003003eu, 0x0000465bu, 0x00004b9eu, 0x000200f9u, 0x00004b93u, 0x000200f8u, 0x00004b94u, 0x000500c3u, 0x00000008u, 0x00004b98u, 0x00004b90u, 0x000047b9u, 0x0003003eu, 0x0000465bu, 0x00004b98u, 0x000200f9u, 0x00004b93u, 0x000200f8u, 0x00004b93u, 0x000700f5u, 0x00000008u, 0x000098eeu, 0x00004b98u, 0x00004b94u, 0x00004b9eu, 0x00004b95u, 0x000300f7u, 0x00004ba0u, 0x00000000u, 0x000400fau, 0x000047afu, 0x00004ba1u, 0x00004ba2u, 0x000200f8u, 0x00004ba2u, 0x000500c4u, 0x00000008u, 0x00004bb8u, 0x000047b2u, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004bbau, 0x000098eeu, 0x00004bb8u, 0x0003003eu, 0x0000465bu, 0x00004bbau, 0x000200f9u, 0x00004ba0u, 0x000200f8u, 0x00004ba1u, 0x000500c3u, 0x00000008u, 0x00004ba4u, 0x000098eeu, 0x00000230u, 0x000500afu, 0x00000069u, 0x00004ba6u, 0x00004ba4u, 0x000047b5u, 0x0003003eu, 0x00004b8du, 0x00004ba6u, 0x000300f7u, 0x00004ba8u, 0x00000000u, 0x000400fau, 0x00004ba6u, 0x00004ba9u, 0x00004baau, 0x000200f8u, 0x00004baau, 0x000500c4u, 0x00000008u, 0x00004bb4u, 0x000047b2u, 0x00000230u, 0x00050082u, 0x00000008u, 0x00004bb5u, 0x000098eeu, 0x00004bb4u, 0x0007000cu, 0x00000008u, 0x00004bb6u, 0x00000001u, 0x0000002au, 0x00004bb5u, 0x00000220u, 0x0003003eu, 0x0000465bu, 0x00004bb6u, 0x000200f9u, 0x00004ba8u, 0x000200f8u, 0x00004ba9u, 0x000500c3u, 0x00000008u, 0x00004bacu, 0x000047b5u, 0x0000022du, 0x000500c3u, 0x00000008u, 0x00004baeu, 0x000047b2u, 0x0000022du, 0x00050082u, 0x00000008u, 0x00004bafu, 0x00004bacu, 0x00004baeu, 0x000500c7u, 0x00000008u, 0x00004bb0u, 0x00004bafu, 0x00001174u, 0x000500c4u, 0x00000008u, 0x00004bb1u, 0x00004bb0u, 0x00000236u, 0x0003003eu, 0x0000465bu, 0x00004bb1u, 0x000200f9u, 0x00004ba8u, 0x000200f8u, 0x00004ba8u, 0x000700f5u, 0x00000008u, 0x000098f1u, 0x00004bb1u, 0x00004ba9u, 0x00004bb6u, 0x00004baau, 0x000200f9u, 0x00004ba0u, 0x000200f8u, 0x00004ba0u, 0x000700f5u, 0x00000008u, 0x000098f0u, 0x000098f1u, 0x00004ba8u, 0x00004bbau, 0x00004ba2u, 0x0003003eu, 0x00004b8eu, 0x000098f0u, 0x0003003eu, 0x000047bau, 0x000098f0u, 0x000300f7u, 0x000047bfu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000047c0u, 0x000047c1u, 0x000200f8u, 0x000047c1u, 0x0003003eu, 0x0000465fu, 0x00000c47u, 0x000200f9u, 0x000047bfu, 0x000200f8u, 0x000047c0u, 0x0004003du, 0x000000efu, 0x000047c2u, 0x00002150u, 0x000500c7u, 0x000000efu, 0x000047c4u, 0x000047c2u, 0x0000f3a5u, 0x0003003eu, 0x0000465fu, 0x000047c4u, 0x000200f9u, 0x000047bfu, 0x000200f8u, 0x000047bfu, 0x00050041u, 0x00000046u, 0x000047c5u, 0x0000465fu, 0x0000032du, 0x0004003du, 0x00000008u, 0x000047c6u, 0x000047c5u, 0x00050041u, 0x00000046u, 0x000047c7u, 0x0000465fu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000047c8u, 0x000047c7u, 0x00050080u, 0x00000008u, 0x000047c9u, 0x000047c6u, 0x000047c8u, 0x0003003eu, 0x00004660u, 0x000047c9u, 0x0004003du, 0x000000efu, 0x000047cau, 0x00002150u, 0x000500c3u, 0x000000efu, 0x000047ccu, 0x000047cau, 0x0000f3a4u, 0x0003003eu, 0x00002150u, 0x000047ccu, 0x0003003eu, 0x00006d22u, 0x0000464au, 0x0003003eu, 0x00006d23u, 0x00004652u, 0x0004003du, 0x00000008u, 0x000047cfu, 0x000047a6u, 0x0003003eu, 0x00004663u, 0x000047cfu, 0x00040071u, 0x00000006u, 0x00004bc0u, 0x0000464au, 0x0004007cu, 0x00000008u, 0x00004bc1u, 0x00004bc0u, 0x000500abu, 0x00000069u, 0x00004bc2u, 0x00004bc1u, 0x00000220u, 0x000300f7u, 0x00004bc3u, 0x00000000u, 0x000400fau, 0x00004bc2u, 0x00004bc4u, 0x00004bc3u, 0x000200f8u, 0x00004bc4u, 0x000500c4u, 0x00000008u, 0x00004bc7u, 0x0000022au, 0x0000464au, 0x0003003eu, 0x00004bbcu, 0x00004bc7u, 0x000500c7u, 0x00000008u, 0x00004bccu, 0x00004799u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00004bcdu, 0x00004bccu, 0x00000220u, 0x000300f7u, 0x00004bceu, 0x00000000u, 0x000400fau, 0x00004bcdu, 0x00004bcfu, 0x00004bceu, 0x000200f8u, 0x00004bcfu, 0x000500c7u, 0x00000008u, 0x00004bd2u, 0x000047cfu, 0x00004bc7u, 0x00050082u, 0x00000008u, 0x00004bd3u, 0x00004bd2u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004bd4u, 0x00000001u, 0x0000002au, 0x00004bd3u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004bd6u, 0x000047cfu, 0x00004bd4u, 0x0003003eu, 0x00004663u, 0x00004bd6u, 0x000200f9u, 0x00004bceu, 0x000200f8u, 0x00004bceu, 0x000700f5u, 0x00000008u, 0x0000994fu, 0x000047cfu, 0x00004bc4u, 0x00004bd6u, 0x00004bcfu, 0x00050082u, 0x00000008u, 0x00004bd8u, 0x00004bc7u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004bdau, 0x0000994fu, 0x00004bd8u, 0x0003003eu, 0x00004663u, 0x00004bdau, 0x000200f9u, 0x00004bc3u, 0x000200f8u, 0x00004bc3u, 0x000700f5u, 0x00000008u, 0x00009950u, 0x000047cfu, 0x000047bfu, 0x00004bdau, 0x00004bceu, 0x0003003eu, 0x00004bbdu, 0x00009950u, 0x0003003eu, 0x00004661u, 0x00009950u, 0x0003003eu, 0x00006d26u, 0x0000464eu, 0x0003003eu, 0x00006d27u, 0x00004652u, 0x0004003du, 0x00000008u, 0x000047d3u, 0x000047bau, 0x0003003eu, 0x00004666u, 0x000047d3u, 0x00040071u, 0x00000006u, 0x00004be0u, 0x0000464eu, 0x0004007cu, 0x00000008u, 0x00004be1u, 0x00004be0u, 0x000500abu, 0x00000069u, 0x00004be2u, 0x00004be1u, 0x00000220u, 0x000300f7u, 0x00004be3u, 0x00000000u, 0x000400fau, 0x00004be2u, 0x00004be4u, 0x00004be3u, 0x000200f8u, 0x00004be4u, 0x000500c4u, 0x00000008u, 0x00004be7u, 0x0000022au, 0x0000464eu, 0x0003003eu, 0x00004bdcu, 0x00004be7u, 0x000500c7u, 0x00000008u, 0x00004becu, 0x00004799u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00004bedu, 0x00004becu, 0x00000220u, 0x000300f7u, 0x00004beeu, 0x00000000u, 0x000400fau, 0x00004bedu, 0x00004befu, 0x00004beeu, 0x000200f8u, 0x00004befu, 0x000500c7u, 0x00000008u, 0x00004bf2u, 0x000047d3u, 0x00004be7u, 0x00050082u, 0x00000008u, 0x00004bf3u, 0x00004bf2u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004bf4u, 0x00000001u, 0x0000002au, 0x00004bf3u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004bf6u, 0x000047d3u, 0x00004bf4u, 0x0003003eu, 0x00004666u, 0x00004bf6u, 0x000200f9u, 0x00004beeu, 0x000200f8u, 0x00004beeu, 0x000700f5u, 0x00000008u, 0x0000996eu, 0x000047d3u, 0x00004be4u, 0x00004bf6u, 0x00004befu, 0x00050082u, 0x00000008u, 0x00004bf8u, 0x00004be7u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004bfau, 0x0000996eu, 0x00004bf8u, 0x0003003eu, 0x00004666u, 0x00004bfau, 0x000200f9u, 0x00004be3u, 0x000200f8u, 0x00004be3u, 0x000700f5u, 0x00000008u, 0x0000996fu, 0x000047d3u, 0x00004bc3u, 0x00004bfau, 0x00004beeu, 0x0003003eu, 0x00004bddu, 0x0000996fu, 0x0003003eu, 0x00004664u, 0x0000996fu, 0x0004003du, 0x00000008u, 0x000047d6u, 0x000047a6u, 0x00050080u, 0x00000008u, 0x000047d7u, 0x000047d6u, 0x0000022au, 0x0003003eu, 0x00006d2au, 0x0000464au, 0x0003003eu, 0x00006d2bu, 0x00004652u, 0x0003003eu, 0x00004669u, 0x000047d7u, 0x000300f7u, 0x00004c03u, 0x00000000u, 0x000400fau, 0x00004bc2u, 0x00004c04u, 0x00004c03u, 0x000200f8u, 0x00004c04u, 0x000500c4u, 0x00000008u, 0x00004c07u, 0x0000022au, 0x0000464au, 0x0003003eu, 0x00004bfcu, 0x00004c07u, 0x000500c7u, 0x00000008u, 0x00004c0cu, 0x00004799u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00004c0du, 0x00004c0cu, 0x00000220u, 0x000300f7u, 0x00004c0eu, 0x00000000u, 0x000400fau, 0x00004c0du, 0x00004c0fu, 0x00004c0eu, 0x000200f8u, 0x00004c0fu, 0x000500c7u, 0x00000008u, 0x00004c12u, 0x000047d7u, 0x00004c07u, 0x00050082u, 0x00000008u, 0x00004c13u, 0x00004c12u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004c14u, 0x00000001u, 0x0000002au, 0x00004c13u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004c16u, 0x000047d7u, 0x00004c14u, 0x0003003eu, 0x00004669u, 0x00004c16u, 0x000200f9u, 0x00004c0eu, 0x000200f8u, 0x00004c0eu, 0x000700f5u, 0x00000008u, 0x0000998du, 0x000047d7u, 0x00004c04u, 0x00004c16u, 0x00004c0fu, 0x00050082u, 0x00000008u, 0x00004c18u, 0x00004c07u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004c1au, 0x0000998du, 0x00004c18u, 0x0003003eu, 0x00004669u, 0x00004c1au, 0x000200f9u, 0x00004c03u, 0x000200f8u, 0x00004c03u, 0x000700f5u, 0x00000008u, 0x0000998eu, 0x000047d7u, 0x00004be3u, 0x00004c1au, 0x00004c0eu, 0x0003003eu, 0x00004bfdu, 0x0000998eu, 0x0003003eu, 0x00004667u, 0x0000998eu, 0x0004003du, 0x00000008u, 0x000047dbu, 0x000047bau, 0x00050080u, 0x00000008u, 0x000047dcu, 0x000047dbu, 0x0000022au, 0x0003003eu, 0x00006d2eu, 0x0000464eu, 0x0003003eu, 0x00006d2fu, 0x00004652u, 0x0003003eu, 0x0000466cu, 0x000047dcu, 0x000300f7u, 0x00004c23u, 0x00000000u, 0x000400fau, 0x00004be2u, 0x00004c24u, 0x00004c23u, 0x000200f8u, 0x00004c24u, 0x000500c4u, 0x00000008u, 0x00004c27u, 0x0000022au, 0x0000464eu, 0x0003003eu, 0x00004c1cu, 0x00004c27u, 0x000500c7u, 0x00000008u, 0x00004c2cu, 0x00004799u, 0x0000025du, 0x000500abu, 0x00000069u, 0x00004c2du, 0x00004c2cu, 0x00000220u, 0x000300f7u, 0x00004c2eu, 0x00000000u, 0x000400fau, 0x00004c2du, 0x00004c2fu, 0x00004c2eu, 0x000200f8u, 0x00004c2fu, 0x000500c7u, 0x00000008u, 0x00004c32u, 0x000047dcu, 0x00004c27u, 0x00050082u, 0x00000008u, 0x00004c33u, 0x00004c32u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00004c34u, 0x00000001u, 0x0000002au, 0x00004c33u, 0x00000220u, 0x000500c6u, 0x00000008u, 0x00004c36u, 0x000047dcu, 0x00004c34u, 0x0003003eu, 0x0000466cu, 0x00004c36u, 0x000200f9u, 0x00004c2eu, 0x000200f8u, 0x00004c2eu, 0x000700f5u, 0x00000008u, 0x000099acu, 0x000047dcu, 0x00004c24u, 0x00004c36u, 0x00004c2fu, 0x00050082u, 0x00000008u, 0x00004c38u, 0x00004c27u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00004c3au, 0x000099acu, 0x00004c38u, 0x0003003eu, 0x0000466cu, 0x00004c3au, 0x000200f9u, 0x00004c23u, 0x000200f8u, 0x00004c23u, 0x000700f5u, 0x00000008u, 0x000099adu, 0x000047dcu, 0x00004c03u, 0x00004c3au, 0x00004c2eu, 0x0003003eu, 0x00004c1du, 0x000099adu, 0x0003003eu, 0x0000466au, 0x000099adu, 0x00050082u, 0x00000008u, 0x000047e1u, 0x000099adu, 0x0000996fu, 0x0007000cu, 0x00000008u, 0x000047e2u, 0x00000001u, 0x0000002au, 0x000047e1u, 0x000013b2u, 0x0003003eu, 0x0000466du, 0x000047e2u, 0x000500c7u, 0x00000008u, 0x000047e4u, 0x0000996fu, 0x0000035eu, 0x00050080u, 0x00000008u, 0x000047e6u, 0x000047e4u, 0x000047e2u, 0x0003003eu, 0x0000466au, 0x000047e6u, 0x0003003eu, 0x00004664u, 0x000047e4u, 0x0004003du, 0x000000efu, 0x000047eau, 0x0000465fu, 0x000500aau, 0x0000087bu, 0x000047ebu, 0x000047eau, 0x000013bcu, 0x00050051u, 0x00000069u, 0x000047ecu, 0x000047ebu, 0x00000000u, 0x00050051u, 0x00000069u, 0x000047edu, 0x000047ebu, 0x00000001u, 0x00060050u, 0x00000363u, 0x000047eeu, 0x00002201u, 0x000047ecu, 0x000047edu, 0x0004009bu, 0x00000069u, 0x000047efu, 0x000047eeu, 0x0003003eu, 0x00002154u, 0x000047efu, 0x000300f7u, 0x000047f1u, 0x00000000u, 0x000400fau, 0x000047efu, 0x000047f2u, 0x000047f1u, 0x000200f8u, 0x000047f2u, 0x0003003eu, 0x00004660u, 0x00000220u, 0x000200f9u, 0x000047f1u, 0x000200f8u, 0x000047f1u, 0x000600a9u, 0x00000008u, 0x0000f3d5u, 0x000047efu, 0x00000220u, 0x000047c9u, 0x00040071u, 0x00000006u, 0x000047f5u, 0x00004644u, 0x0004007cu, 0x00000008u, 0x000047f6u, 0x000047f5u, 0x000500aau, 0x00000069u, 0x000047f7u, 0x000047f6u, 0x0000022au, 0x0003003eu, 0x0000466eu, 0x000047f7u, 0x000500afu, 0x00000069u, 0x000047f9u, 0x0000f3d5u, 0x0000115du, 0x000300f7u, 0x000047fau, 0x00000000u, 0x000400fau, 0x000047f9u, 0x000047fbu, 0x000047fcu, 0x000200f8u, 0x000047fcu, 0x00050050u, 0x000000efu, 0x00004802u, 0x00009950u, 0x000047e4u, 0x0003003eu, 0x00004670u, 0x00004802u, 0x000200f9u, 0x000047fau, 0x000200f8u, 0x000047fbu, 0x00050050u, 0x000000efu, 0x000047ffu, 0x0000998eu, 0x000047e6u, 0x0003003eu, 0x00004670u, 0x000047ffu, 0x000200f9u, 0x000047fau, 0x000200f8u, 0x000047fau, 0x000700f5u, 0x000000efu, 0x000099d9u, 0x000047ffu, 0x000047fbu, 0x00004802u, 0x000047fcu, 0x0003003eu, 0x0000466fu, 0x000099d9u, 0x000300f7u, 0x00004805u, 0x00000000u, 0x000400fau, 0x000021d1u, 0x00004806u, 0x00004807u, 0x000200f8u, 0x00004807u, 0x000300f7u, 0x000048acu, 0x00000000u, 0x000d00fbu, 0x000047f6u, 0x000048acu, 0x00000000u, 0x000048adu, 0x00000001u, 0x000048aeu, 0x00000002u, 0x000048afu, 0x00000003u, 0x000048b0u, 0x00000004u, 0x000048b1u, 0x000200f8u, 0x000048b1u, 0x00040071u, 0x00000006u, 0x00004a67u, 0x00004646u, 0x0004007cu, 0x00000008u, 0x00004a68u, 0x00004a67u, 0x000300f7u, 0x00004a69u, 0x00000000u, 0x000700fbu, 0x00004a68u, 0x00004a6au, 0x00000000u, 0x00004a6bu, 0x00000001u, 0x00004a6cu, 0x000200f8u, 0x00004a6cu, 0x0004007cu, 0x000000b0u, 0x00004aaeu, 0x000099d9u, 0x0003003eu, 0x00006e32u, 0x00004640u, 0x0003003eu, 0x00006e33u, 0x00004642u, 0x0003003eu, 0x0000476au, 0x000021c0u, 0x0003003eu, 0x0000476bu, 0x00004aaeu, 0x00050041u, 0x00000007u, 0x00005d2cu, 0x0000476bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d2du, 0x00005d2cu, 0x00050084u, 0x00000006u, 0x00005d2eu, 0x00004642u, 0x00005d2du, 0x00050080u, 0x00000006u, 0x00005d2fu, 0x00004640u, 0x00005d2eu, 0x0003003eu, 0x00005d24u, 0x00005d2fu, 0x00050041u, 0x00000007u, 0x00005d30u, 0x0000476bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d31u, 0x00005d30u, 0x00050080u, 0x00000006u, 0x00005d33u, 0x00005d2fu, 0x00005d31u, 0x0003003eu, 0x00005d24u, 0x00005d33u, 0x000500c7u, 0x00000006u, 0x00005d35u, 0x00005d33u, 0x00000e73u, 0x0003003eu, 0x00005d24u, 0x00005d35u, 0x0003003eu, 0x00005d25u, 0x00005d35u, 0x0004003du, 0x00000006u, 0x00005d38u, 0x00005d2cu, 0x000500c7u, 0x00000006u, 0x00005d39u, 0x00005d38u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d3au, 0x00005d39u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d3cu, 0x00005d35u, 0x00005d3au, 0x0003003eu, 0x00005d25u, 0x00005d3cu, 0x000500c6u, 0x00000006u, 0x00005d3eu, 0x00005d3cu, 0x00000464u, 0x0003003eu, 0x00005d25u, 0x00005d3eu, 0x00080041u, 0x00000671u, 0x00005d41u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005d3eu, 0x0004003du, 0x0000000fu, 0x00005d42u, 0x00005d41u, 0x00040071u, 0x00000006u, 0x00005d43u, 0x00005d42u, 0x0003003eu, 0x00005d26u, 0x00005d43u, 0x00040071u, 0x00000011u, 0x00005d45u, 0x00005d43u, 0x0004007cu, 0x00000012u, 0x00005d46u, 0x00005d45u, 0x00070050u, 0x00000013u, 0x00005d47u, 0x00005d46u, 0x00005d46u, 0x00005d46u, 0x00005d46u, 0x0003003eu, 0x00005d27u, 0x00005d47u, 0x0003003eu, 0x00004673u, 0x00005d47u, 0x000300f7u, 0x00004ab3u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004ab4u, 0x00004ab3u, 0x000200f8u, 0x00004ab4u, 0x00050050u, 0x000000efu, 0x00004ab7u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004ab8u, 0x00004ab7u, 0x0003003eu, 0x00006e36u, 0x00004640u, 0x0003003eu, 0x00006e37u, 0x00004642u, 0x0003003eu, 0x0000476du, 0x000021c0u, 0x0003003eu, 0x0000476eu, 0x00004ab8u, 0x00050041u, 0x00000007u, 0x00005d50u, 0x0000476eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d51u, 0x00005d50u, 0x00050084u, 0x00000006u, 0x00005d52u, 0x00004642u, 0x00005d51u, 0x00050080u, 0x00000006u, 0x00005d53u, 0x00004640u, 0x00005d52u, 0x0003003eu, 0x00005d48u, 0x00005d53u, 0x00050041u, 0x00000007u, 0x00005d54u, 0x0000476eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d55u, 0x00005d54u, 0x00050080u, 0x00000006u, 0x00005d57u, 0x00005d53u, 0x00005d55u, 0x0003003eu, 0x00005d48u, 0x00005d57u, 0x000500c7u, 0x00000006u, 0x00005d59u, 0x00005d57u, 0x00000e73u, 0x0003003eu, 0x00005d48u, 0x00005d59u, 0x0003003eu, 0x00005d49u, 0x00005d59u, 0x0004003du, 0x00000006u, 0x00005d5cu, 0x00005d50u, 0x000500c7u, 0x00000006u, 0x00005d5du, 0x00005d5cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d5eu, 0x00005d5du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d60u, 0x00005d59u, 0x00005d5eu, 0x0003003eu, 0x00005d49u, 0x00005d60u, 0x000500c6u, 0x00000006u, 0x00005d62u, 0x00005d60u, 0x00000464u, 0x0003003eu, 0x00005d49u, 0x00005d62u, 0x00080041u, 0x00000671u, 0x00005d65u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005d62u, 0x0004003du, 0x0000000fu, 0x00005d66u, 0x00005d65u, 0x00040071u, 0x00000006u, 0x00005d67u, 0x00005d66u, 0x0003003eu, 0x00005d4au, 0x00005d67u, 0x00040071u, 0x00000011u, 0x00005d69u, 0x00005d67u, 0x0004007cu, 0x00000012u, 0x00005d6au, 0x00005d69u, 0x00070050u, 0x00000013u, 0x00005d6bu, 0x00005d6au, 0x00005d6au, 0x00005d6au, 0x00005d6au, 0x0003003eu, 0x00005d4bu, 0x00005d6bu, 0x0003003eu, 0x0000467bu, 0x00005d6bu, 0x00050050u, 0x000000efu, 0x00004abeu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004abfu, 0x00004abeu, 0x0003003eu, 0x00006e3au, 0x00004640u, 0x0003003eu, 0x00006e3bu, 0x00004642u, 0x0003003eu, 0x00004770u, 0x000021c0u, 0x0003003eu, 0x00004771u, 0x00004abfu, 0x00050041u, 0x00000007u, 0x00005d74u, 0x00004771u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d75u, 0x00005d74u, 0x00050084u, 0x00000006u, 0x00005d76u, 0x00004642u, 0x00005d75u, 0x00050080u, 0x00000006u, 0x00005d77u, 0x00004640u, 0x00005d76u, 0x0003003eu, 0x00005d6cu, 0x00005d77u, 0x00050041u, 0x00000007u, 0x00005d78u, 0x00004771u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d79u, 0x00005d78u, 0x00050080u, 0x00000006u, 0x00005d7bu, 0x00005d77u, 0x00005d79u, 0x0003003eu, 0x00005d6cu, 0x00005d7bu, 0x000500c7u, 0x00000006u, 0x00005d7du, 0x00005d7bu, 0x00000e73u, 0x0003003eu, 0x00005d6cu, 0x00005d7du, 0x0003003eu, 0x00005d6du, 0x00005d7du, 0x0004003du, 0x00000006u, 0x00005d80u, 0x00005d74u, 0x000500c7u, 0x00000006u, 0x00005d81u, 0x00005d80u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d82u, 0x00005d81u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d84u, 0x00005d7du, 0x00005d82u, 0x0003003eu, 0x00005d6du, 0x00005d84u, 0x000500c6u, 0x00000006u, 0x00005d86u, 0x00005d84u, 0x00000464u, 0x0003003eu, 0x00005d6du, 0x00005d86u, 0x00080041u, 0x00000671u, 0x00005d89u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005d86u, 0x0004003du, 0x0000000fu, 0x00005d8au, 0x00005d89u, 0x00040071u, 0x00000006u, 0x00005d8bu, 0x00005d8au, 0x0003003eu, 0x00005d6eu, 0x00005d8bu, 0x00040071u, 0x00000011u, 0x00005d8du, 0x00005d8bu, 0x0004007cu, 0x00000012u, 0x00005d8eu, 0x00005d8du, 0x00070050u, 0x00000013u, 0x00005d8fu, 0x00005d8eu, 0x00005d8eu, 0x00005d8eu, 0x00005d8eu, 0x0003003eu, 0x00005d6fu, 0x00005d8fu, 0x0003003eu, 0x00004683u, 0x00005d8fu, 0x000200f9u, 0x00004ab3u, 0x000200f8u, 0x00004ab3u, 0x000700f5u, 0x00000013u, 0x00009ffau, 0x00009f34u, 0x00004a6cu, 0x00005d8fu, 0x00004ab4u, 0x000700f5u, 0x00000013u, 0x00009e2eu, 0x00009d65u, 0x00004a6cu, 0x00005d6bu, 0x00004ab4u, 0x000300f7u, 0x00004ac4u, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004ac5u, 0x00004ac4u, 0x000200f8u, 0x00004ac5u, 0x00050050u, 0x000000efu, 0x00004ac8u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004ac9u, 0x00004ac8u, 0x0003003eu, 0x00006e3eu, 0x00004640u, 0x0003003eu, 0x00006e3fu, 0x00004642u, 0x0003003eu, 0x00004773u, 0x000021c0u, 0x0003003eu, 0x00004774u, 0x00004ac9u, 0x00050041u, 0x00000007u, 0x00005d98u, 0x00004774u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005d99u, 0x00005d98u, 0x00050084u, 0x00000006u, 0x00005d9au, 0x00004642u, 0x00005d99u, 0x00050080u, 0x00000006u, 0x00005d9bu, 0x00004640u, 0x00005d9au, 0x0003003eu, 0x00005d90u, 0x00005d9bu, 0x00050041u, 0x00000007u, 0x00005d9cu, 0x00004774u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005d9du, 0x00005d9cu, 0x00050080u, 0x00000006u, 0x00005d9fu, 0x00005d9bu, 0x00005d9du, 0x0003003eu, 0x00005d90u, 0x00005d9fu, 0x000500c7u, 0x00000006u, 0x00005da1u, 0x00005d9fu, 0x00000e73u, 0x0003003eu, 0x00005d90u, 0x00005da1u, 0x0003003eu, 0x00005d91u, 0x00005da1u, 0x0004003du, 0x00000006u, 0x00005da4u, 0x00005d98u, 0x000500c7u, 0x00000006u, 0x00005da5u, 0x00005da4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005da6u, 0x00005da5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005da8u, 0x00005da1u, 0x00005da6u, 0x0003003eu, 0x00005d91u, 0x00005da8u, 0x000500c6u, 0x00000006u, 0x00005daau, 0x00005da8u, 0x00000464u, 0x0003003eu, 0x00005d91u, 0x00005daau, 0x00080041u, 0x00000671u, 0x00005dadu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005daau, 0x0004003du, 0x0000000fu, 0x00005daeu, 0x00005dadu, 0x00040071u, 0x00000006u, 0x00005dafu, 0x00005daeu, 0x0003003eu, 0x00005d92u, 0x00005dafu, 0x00040071u, 0x00000011u, 0x00005db1u, 0x00005dafu, 0x0004007cu, 0x00000012u, 0x00005db2u, 0x00005db1u, 0x00070050u, 0x00000013u, 0x00005db3u, 0x00005db2u, 0x00005db2u, 0x00005db2u, 0x00005db2u, 0x0003003eu, 0x00005d93u, 0x00005db3u, 0x0003003eu, 0x0000468bu, 0x00005db3u, 0x000200f9u, 0x00004ac4u, 0x000200f8u, 0x00004ac4u, 0x000700f5u, 0x00000013u, 0x0000a0e0u, 0x0000a018u, 0x00004ab3u, 0x00005db3u, 0x00004ac5u, 0x000200f9u, 0x00004a69u, 0x000200f8u, 0x00004a6bu, 0x0004007cu, 0x000000b0u, 0x00004a8eu, 0x000099d9u, 0x0003003eu, 0x00006e22u, 0x00004640u, 0x0003003eu, 0x00006e23u, 0x00004642u, 0x0003003eu, 0x0000475eu, 0x000021c0u, 0x0003003eu, 0x0000475fu, 0x00004a8eu, 0x00050041u, 0x00000007u, 0x00005c61u, 0x0000475fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c62u, 0x00005c61u, 0x00050084u, 0x00000006u, 0x00005c63u, 0x00004642u, 0x00005c62u, 0x00050080u, 0x00000006u, 0x00005c64u, 0x00004640u, 0x00005c63u, 0x0003003eu, 0x00005c58u, 0x00005c64u, 0x00050041u, 0x00000007u, 0x00005c65u, 0x0000475fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c66u, 0x00005c65u, 0x000500c2u, 0x00000006u, 0x00005c67u, 0x00005c66u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005c69u, 0x00005c64u, 0x00005c67u, 0x0003003eu, 0x00005c58u, 0x00005c69u, 0x000500c7u, 0x00000006u, 0x00005c6bu, 0x00005c69u, 0x00000e73u, 0x0003003eu, 0x00005c58u, 0x00005c6bu, 0x0004003du, 0x00000006u, 0x00005c6du, 0x00005c65u, 0x000400c8u, 0x00000006u, 0x00005c6eu, 0x00005c6du, 0x000500c7u, 0x00000006u, 0x00005c6fu, 0x00005c6eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005c70u, 0x00005c6fu, 0x00000704u, 0x0003003eu, 0x00005c59u, 0x00005c70u, 0x0003003eu, 0x00005c5au, 0x00005c6bu, 0x0004003du, 0x00000006u, 0x00005c73u, 0x00005c61u, 0x000500c7u, 0x00000006u, 0x00005c74u, 0x00005c73u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c75u, 0x00005c74u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005c77u, 0x00005c6bu, 0x00005c75u, 0x0003003eu, 0x00005c5au, 0x00005c77u, 0x000500c6u, 0x00000006u, 0x00005c79u, 0x00005c77u, 0x00000464u, 0x0003003eu, 0x00005c5au, 0x00005c79u, 0x00080041u, 0x00000671u, 0x00005c7cu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005c79u, 0x0004003du, 0x0000000fu, 0x00005c7du, 0x00005c7cu, 0x00040071u, 0x00000006u, 0x00005c7eu, 0x00005c7du, 0x0003003eu, 0x00005c5bu, 0x00005c7eu, 0x000500c2u, 0x00000006u, 0x00005c81u, 0x00005c7eu, 0x00005c70u, 0x000500c7u, 0x00000006u, 0x00005c82u, 0x00005c81u, 0x00000e96u, 0x0003003eu, 0x00005c5bu, 0x00005c82u, 0x000500c4u, 0x00000006u, 0x00005c84u, 0x00005c82u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005c86u, 0x00005c82u, 0x00005c84u, 0x0003003eu, 0x00005c5bu, 0x00005c86u, 0x00040071u, 0x00000011u, 0x00005c88u, 0x00005c86u, 0x0004007cu, 0x00000012u, 0x00005c89u, 0x00005c88u, 0x00070050u, 0x00000013u, 0x00005c8au, 0x00005c89u, 0x00005c89u, 0x00005c89u, 0x00005c89u, 0x0003003eu, 0x00005c5cu, 0x00005c8au, 0x0003003eu, 0x00004673u, 0x00005c8au, 0x000300f7u, 0x00004a93u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004a94u, 0x00004a93u, 0x000200f8u, 0x00004a94u, 0x00050050u, 0x000000efu, 0x00004a97u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004a98u, 0x00004a97u, 0x0003003eu, 0x00006e26u, 0x00004640u, 0x0003003eu, 0x00006e27u, 0x00004642u, 0x0003003eu, 0x00004761u, 0x000021c0u, 0x0003003eu, 0x00004762u, 0x00004a98u, 0x00050041u, 0x00000007u, 0x00005c94u, 0x00004762u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c95u, 0x00005c94u, 0x00050084u, 0x00000006u, 0x00005c96u, 0x00004642u, 0x00005c95u, 0x00050080u, 0x00000006u, 0x00005c97u, 0x00004640u, 0x00005c96u, 0x0003003eu, 0x00005c8bu, 0x00005c97u, 0x00050041u, 0x00000007u, 0x00005c98u, 0x00004762u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c99u, 0x00005c98u, 0x000500c2u, 0x00000006u, 0x00005c9au, 0x00005c99u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005c9cu, 0x00005c97u, 0x00005c9au, 0x0003003eu, 0x00005c8bu, 0x00005c9cu, 0x000500c7u, 0x00000006u, 0x00005c9eu, 0x00005c9cu, 0x00000e73u, 0x0003003eu, 0x00005c8bu, 0x00005c9eu, 0x0004003du, 0x00000006u, 0x00005ca0u, 0x00005c98u, 0x000400c8u, 0x00000006u, 0x00005ca1u, 0x00005ca0u, 0x000500c7u, 0x00000006u, 0x00005ca2u, 0x00005ca1u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005ca3u, 0x00005ca2u, 0x00000704u, 0x0003003eu, 0x00005c8cu, 0x00005ca3u, 0x0003003eu, 0x00005c8du, 0x00005c9eu, 0x0004003du, 0x00000006u, 0x00005ca6u, 0x00005c94u, 0x000500c7u, 0x00000006u, 0x00005ca7u, 0x00005ca6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005ca8u, 0x00005ca7u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005caau, 0x00005c9eu, 0x00005ca8u, 0x0003003eu, 0x00005c8du, 0x00005caau, 0x000500c6u, 0x00000006u, 0x00005cacu, 0x00005caau, 0x00000464u, 0x0003003eu, 0x00005c8du, 0x00005cacu, 0x00080041u, 0x00000671u, 0x00005cafu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005cacu, 0x0004003du, 0x0000000fu, 0x00005cb0u, 0x00005cafu, 0x00040071u, 0x00000006u, 0x00005cb1u, 0x00005cb0u, 0x0003003eu, 0x00005c8eu, 0x00005cb1u, 0x000500c2u, 0x00000006u, 0x00005cb4u, 0x00005cb1u, 0x00005ca3u, 0x000500c7u, 0x00000006u, 0x00005cb5u, 0x00005cb4u, 0x00000e96u, 0x0003003eu, 0x00005c8eu, 0x00005cb5u, 0x000500c4u, 0x00000006u, 0x00005cb7u, 0x00005cb5u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005cb9u, 0x00005cb5u, 0x00005cb7u, 0x0003003eu, 0x00005c8eu, 0x00005cb9u, 0x00040071u, 0x00000011u, 0x00005cbbu, 0x00005cb9u, 0x0004007cu, 0x00000012u, 0x00005cbcu, 0x00005cbbu, 0x00070050u, 0x00000013u, 0x00005cbdu, 0x00005cbcu, 0x00005cbcu, 0x00005cbcu, 0x00005cbcu, 0x0003003eu, 0x00005c8fu, 0x00005cbdu, 0x0003003eu, 0x0000467bu, 0x00005cbdu, 0x00050050u, 0x000000efu, 0x00004a9eu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a9fu, 0x00004a9eu, 0x0003003eu, 0x00006e2au, 0x00004640u, 0x0003003eu, 0x00006e2bu, 0x00004642u, 0x0003003eu, 0x00004764u, 0x000021c0u, 0x0003003eu, 0x00004765u, 0x00004a9fu, 0x00050041u, 0x00000007u, 0x00005cc7u, 0x00004765u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005cc8u, 0x00005cc7u, 0x00050084u, 0x00000006u, 0x00005cc9u, 0x00004642u, 0x00005cc8u, 0x00050080u, 0x00000006u, 0x00005ccau, 0x00004640u, 0x00005cc9u, 0x0003003eu, 0x00005cbeu, 0x00005ccau, 0x00050041u, 0x00000007u, 0x00005ccbu, 0x00004765u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005cccu, 0x00005ccbu, 0x000500c2u, 0x00000006u, 0x00005ccdu, 0x00005cccu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005ccfu, 0x00005ccau, 0x00005ccdu, 0x0003003eu, 0x00005cbeu, 0x00005ccfu, 0x000500c7u, 0x00000006u, 0x00005cd1u, 0x00005ccfu, 0x00000e73u, 0x0003003eu, 0x00005cbeu, 0x00005cd1u, 0x0004003du, 0x00000006u, 0x00005cd3u, 0x00005ccbu, 0x000400c8u, 0x00000006u, 0x00005cd4u, 0x00005cd3u, 0x000500c7u, 0x00000006u, 0x00005cd5u, 0x00005cd4u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005cd6u, 0x00005cd5u, 0x00000704u, 0x0003003eu, 0x00005cbfu, 0x00005cd6u, 0x0003003eu, 0x00005cc0u, 0x00005cd1u, 0x0004003du, 0x00000006u, 0x00005cd9u, 0x00005cc7u, 0x000500c7u, 0x00000006u, 0x00005cdau, 0x00005cd9u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005cdbu, 0x00005cdau, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005cddu, 0x00005cd1u, 0x00005cdbu, 0x0003003eu, 0x00005cc0u, 0x00005cddu, 0x000500c6u, 0x00000006u, 0x00005cdfu, 0x00005cddu, 0x00000464u, 0x0003003eu, 0x00005cc0u, 0x00005cdfu, 0x00080041u, 0x00000671u, 0x00005ce2u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005cdfu, 0x0004003du, 0x0000000fu, 0x00005ce3u, 0x00005ce2u, 0x00040071u, 0x00000006u, 0x00005ce4u, 0x00005ce3u, 0x0003003eu, 0x00005cc1u, 0x00005ce4u, 0x000500c2u, 0x00000006u, 0x00005ce7u, 0x00005ce4u, 0x00005cd6u, 0x000500c7u, 0x00000006u, 0x00005ce8u, 0x00005ce7u, 0x00000e96u, 0x0003003eu, 0x00005cc1u, 0x00005ce8u, 0x000500c4u, 0x00000006u, 0x00005ceau, 0x00005ce8u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005cecu, 0x00005ce8u, 0x00005ceau, 0x0003003eu, 0x00005cc1u, 0x00005cecu, 0x00040071u, 0x00000011u, 0x00005ceeu, 0x00005cecu, 0x0004007cu, 0x00000012u, 0x00005cefu, 0x00005ceeu, 0x00070050u, 0x00000013u, 0x00005cf0u, 0x00005cefu, 0x00005cefu, 0x00005cefu, 0x00005cefu, 0x0003003eu, 0x00005cc2u, 0x00005cf0u, 0x0003003eu, 0x00004683u, 0x00005cf0u, 0x000200f9u, 0x00004a93u, 0x000200f8u, 0x00004a93u, 0x000700f5u, 0x00000013u, 0x00009ff8u, 0x00009f34u, 0x00004a6bu, 0x00005cf0u, 0x00004a94u, 0x000700f5u, 0x00000013u, 0x00009e2cu, 0x00009d65u, 0x00004a6bu, 0x00005cbdu, 0x00004a94u, 0x000300f7u, 0x00004aa4u, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004aa5u, 0x00004aa4u, 0x000200f8u, 0x00004aa5u, 0x00050050u, 0x000000efu, 0x00004aa8u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004aa9u, 0x00004aa8u, 0x0003003eu, 0x00006e2eu, 0x00004640u, 0x0003003eu, 0x00006e2fu, 0x00004642u, 0x0003003eu, 0x00004767u, 0x000021c0u, 0x0003003eu, 0x00004768u, 0x00004aa9u, 0x00050041u, 0x00000007u, 0x00005cfau, 0x00004768u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005cfbu, 0x00005cfau, 0x00050084u, 0x00000006u, 0x00005cfcu, 0x00004642u, 0x00005cfbu, 0x00050080u, 0x00000006u, 0x00005cfdu, 0x00004640u, 0x00005cfcu, 0x0003003eu, 0x00005cf1u, 0x00005cfdu, 0x00050041u, 0x00000007u, 0x00005cfeu, 0x00004768u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005cffu, 0x00005cfeu, 0x000500c2u, 0x00000006u, 0x00005d00u, 0x00005cffu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005d02u, 0x00005cfdu, 0x00005d00u, 0x0003003eu, 0x00005cf1u, 0x00005d02u, 0x000500c7u, 0x00000006u, 0x00005d04u, 0x00005d02u, 0x00000e73u, 0x0003003eu, 0x00005cf1u, 0x00005d04u, 0x0004003du, 0x00000006u, 0x00005d06u, 0x00005cfeu, 0x000400c8u, 0x00000006u, 0x00005d07u, 0x00005d06u, 0x000500c7u, 0x00000006u, 0x00005d08u, 0x00005d07u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005d09u, 0x00005d08u, 0x00000704u, 0x0003003eu, 0x00005cf2u, 0x00005d09u, 0x0003003eu, 0x00005cf3u, 0x00005d04u, 0x0004003du, 0x00000006u, 0x00005d0cu, 0x00005cfau, 0x000500c7u, 0x00000006u, 0x00005d0du, 0x00005d0cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005d0eu, 0x00005d0du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005d10u, 0x00005d04u, 0x00005d0eu, 0x0003003eu, 0x00005cf3u, 0x00005d10u, 0x000500c6u, 0x00000006u, 0x00005d12u, 0x00005d10u, 0x00000464u, 0x0003003eu, 0x00005cf3u, 0x00005d12u, 0x00080041u, 0x00000671u, 0x00005d15u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005d12u, 0x0004003du, 0x0000000fu, 0x00005d16u, 0x00005d15u, 0x00040071u, 0x00000006u, 0x00005d17u, 0x00005d16u, 0x0003003eu, 0x00005cf4u, 0x00005d17u, 0x000500c2u, 0x00000006u, 0x00005d1au, 0x00005d17u, 0x00005d09u, 0x000500c7u, 0x00000006u, 0x00005d1bu, 0x00005d1au, 0x00000e96u, 0x0003003eu, 0x00005cf4u, 0x00005d1bu, 0x000500c4u, 0x00000006u, 0x00005d1du, 0x00005d1bu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005d1fu, 0x00005d1bu, 0x00005d1du, 0x0003003eu, 0x00005cf4u, 0x00005d1fu, 0x00040071u, 0x00000011u, 0x00005d21u, 0x00005d1fu, 0x0004007cu, 0x00000012u, 0x00005d22u, 0x00005d21u, 0x00070050u, 0x00000013u, 0x00005d23u, 0x00005d22u, 0x00005d22u, 0x00005d22u, 0x00005d22u, 0x0003003eu, 0x00005cf5u, 0x00005d23u, 0x0003003eu, 0x0000468bu, 0x00005d23u, 0x000200f9u, 0x00004aa4u, 0x000200f8u, 0x00004aa4u, 0x000700f5u, 0x00000013u, 0x0000a0deu, 0x0000a018u, 0x00004a93u, 0x00005d23u, 0x00004aa5u, 0x000200f9u, 0x00004a69u, 0x000200f8u, 0x00004a6au, 0x0004007cu, 0x000000b0u, 0x00004a6eu, 0x000099d9u, 0x0003003eu, 0x00006e42u, 0x00004640u, 0x0003003eu, 0x00006e43u, 0x00004642u, 0x0003003eu, 0x00004776u, 0x000021c0u, 0x0003003eu, 0x00004777u, 0x00004a6eu, 0x00050041u, 0x00000007u, 0x00005bb0u, 0x00004777u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005bb1u, 0x00005bb0u, 0x00050084u, 0x00000006u, 0x00005bb2u, 0x00004642u, 0x00005bb1u, 0x00050080u, 0x00000006u, 0x00005bb3u, 0x00004640u, 0x00005bb2u, 0x0003003eu, 0x00005ba8u, 0x00005bb3u, 0x00050041u, 0x00000007u, 0x00005bb4u, 0x00004777u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005bb5u, 0x00005bb4u, 0x00050084u, 0x00000006u, 0x00005bb6u, 0x00005bb5u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005bb8u, 0x00005bb3u, 0x00005bb6u, 0x0003003eu, 0x00005ba8u, 0x00005bb8u, 0x000500c7u, 0x00000006u, 0x00005bbau, 0x00005bb8u, 0x00000e73u, 0x0003003eu, 0x00005ba8u, 0x00005bbau, 0x000500c2u, 0x00000006u, 0x00005bbcu, 0x00005bbau, 0x0000022au, 0x0003003eu, 0x00005ba9u, 0x00005bbcu, 0x0004003du, 0x00000006u, 0x00005bbeu, 0x00005bb0u, 0x000500c7u, 0x00000006u, 0x00005bbfu, 0x00005bbeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005bc0u, 0x00005bbfu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005bc2u, 0x00005bbcu, 0x00005bc0u, 0x0003003eu, 0x00005ba9u, 0x00005bc2u, 0x000500c6u, 0x00000006u, 0x00005bc4u, 0x00005bc2u, 0x0000045cu, 0x0003003eu, 0x00005ba9u, 0x00005bc4u, 0x00080041u, 0x00000692u, 0x00005bc7u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005bc4u, 0x0004003du, 0x00000011u, 0x00005bc8u, 0x00005bc7u, 0x00040071u, 0x00000006u, 0x00005bc9u, 0x00005bc8u, 0x0003003eu, 0x00005baau, 0x00005bc9u, 0x000500c2u, 0x00000006u, 0x00005bcbu, 0x00005bc9u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005bccu, 0x00005bcbu, 0x0004007cu, 0x00000012u, 0x00005bcdu, 0x00005bccu, 0x000500c7u, 0x00000006u, 0x00005bcfu, 0x00005bc9u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005bd0u, 0x00005bcfu, 0x0004007cu, 0x00000012u, 0x00005bd1u, 0x00005bd0u, 0x00050050u, 0x000001aeu, 0x00005bd2u, 0x00005bcdu, 0x00005bd1u, 0x0009004fu, 0x00000013u, 0x00005bd3u, 0x00005bd2u, 0x00005bd2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005babu, 0x00005bd3u, 0x0003003eu, 0x00004673u, 0x00005bd3u, 0x000300f7u, 0x00004a73u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004a74u, 0x00004a73u, 0x000200f8u, 0x00004a74u, 0x00050050u, 0x000000efu, 0x00004a77u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004a78u, 0x00004a77u, 0x0003003eu, 0x00006e46u, 0x00004640u, 0x0003003eu, 0x00006e47u, 0x00004642u, 0x0003003eu, 0x00004779u, 0x000021c0u, 0x0003003eu, 0x0000477au, 0x00004a78u, 0x00050041u, 0x00000007u, 0x00005bdcu, 0x0000477au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005bddu, 0x00005bdcu, 0x00050084u, 0x00000006u, 0x00005bdeu, 0x00004642u, 0x00005bddu, 0x00050080u, 0x00000006u, 0x00005bdfu, 0x00004640u, 0x00005bdeu, 0x0003003eu, 0x00005bd4u, 0x00005bdfu, 0x00050041u, 0x00000007u, 0x00005be0u, 0x0000477au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005be1u, 0x00005be0u, 0x00050084u, 0x00000006u, 0x00005be2u, 0x00005be1u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005be4u, 0x00005bdfu, 0x00005be2u, 0x0003003eu, 0x00005bd4u, 0x00005be4u, 0x000500c7u, 0x00000006u, 0x00005be6u, 0x00005be4u, 0x00000e73u, 0x0003003eu, 0x00005bd4u, 0x00005be6u, 0x000500c2u, 0x00000006u, 0x00005be8u, 0x00005be6u, 0x0000022au, 0x0003003eu, 0x00005bd5u, 0x00005be8u, 0x0004003du, 0x00000006u, 0x00005beau, 0x00005bdcu, 0x000500c7u, 0x00000006u, 0x00005bebu, 0x00005beau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005becu, 0x00005bebu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005beeu, 0x00005be8u, 0x00005becu, 0x0003003eu, 0x00005bd5u, 0x00005beeu, 0x000500c6u, 0x00000006u, 0x00005bf0u, 0x00005beeu, 0x0000045cu, 0x0003003eu, 0x00005bd5u, 0x00005bf0u, 0x00080041u, 0x00000692u, 0x00005bf3u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005bf0u, 0x0004003du, 0x00000011u, 0x00005bf4u, 0x00005bf3u, 0x00040071u, 0x00000006u, 0x00005bf5u, 0x00005bf4u, 0x0003003eu, 0x00005bd6u, 0x00005bf5u, 0x000500c2u, 0x00000006u, 0x00005bf7u, 0x00005bf5u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005bf8u, 0x00005bf7u, 0x0004007cu, 0x00000012u, 0x00005bf9u, 0x00005bf8u, 0x000500c7u, 0x00000006u, 0x00005bfbu, 0x00005bf5u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005bfcu, 0x00005bfbu, 0x0004007cu, 0x00000012u, 0x00005bfdu, 0x00005bfcu, 0x00050050u, 0x000001aeu, 0x00005bfeu, 0x00005bf9u, 0x00005bfdu, 0x0009004fu, 0x00000013u, 0x00005bffu, 0x00005bfeu, 0x00005bfeu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005bd7u, 0x00005bffu, 0x0003003eu, 0x0000467bu, 0x00005bffu, 0x00050050u, 0x000000efu, 0x00004a7eu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a7fu, 0x00004a7eu, 0x0003003eu, 0x00006e4au, 0x00004640u, 0x0003003eu, 0x00006e4bu, 0x00004642u, 0x0003003eu, 0x0000477cu, 0x000021c0u, 0x0003003eu, 0x0000477du, 0x00004a7fu, 0x00050041u, 0x00000007u, 0x00005c08u, 0x0000477du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c09u, 0x00005c08u, 0x00050084u, 0x00000006u, 0x00005c0au, 0x00004642u, 0x00005c09u, 0x00050080u, 0x00000006u, 0x00005c0bu, 0x00004640u, 0x00005c0au, 0x0003003eu, 0x00005c00u, 0x00005c0bu, 0x00050041u, 0x00000007u, 0x00005c0cu, 0x0000477du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c0du, 0x00005c0cu, 0x00050084u, 0x00000006u, 0x00005c0eu, 0x00005c0du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005c10u, 0x00005c0bu, 0x00005c0eu, 0x0003003eu, 0x00005c00u, 0x00005c10u, 0x000500c7u, 0x00000006u, 0x00005c12u, 0x00005c10u, 0x00000e73u, 0x0003003eu, 0x00005c00u, 0x00005c12u, 0x000500c2u, 0x00000006u, 0x00005c14u, 0x00005c12u, 0x0000022au, 0x0003003eu, 0x00005c01u, 0x00005c14u, 0x0004003du, 0x00000006u, 0x00005c16u, 0x00005c08u, 0x000500c7u, 0x00000006u, 0x00005c17u, 0x00005c16u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c18u, 0x00005c17u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005c1au, 0x00005c14u, 0x00005c18u, 0x0003003eu, 0x00005c01u, 0x00005c1au, 0x000500c6u, 0x00000006u, 0x00005c1cu, 0x00005c1au, 0x0000045cu, 0x0003003eu, 0x00005c01u, 0x00005c1cu, 0x00080041u, 0x00000692u, 0x00005c1fu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005c1cu, 0x0004003du, 0x00000011u, 0x00005c20u, 0x00005c1fu, 0x00040071u, 0x00000006u, 0x00005c21u, 0x00005c20u, 0x0003003eu, 0x00005c02u, 0x00005c21u, 0x000500c2u, 0x00000006u, 0x00005c23u, 0x00005c21u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005c24u, 0x00005c23u, 0x0004007cu, 0x00000012u, 0x00005c25u, 0x00005c24u, 0x000500c7u, 0x00000006u, 0x00005c27u, 0x00005c21u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005c28u, 0x00005c27u, 0x0004007cu, 0x00000012u, 0x00005c29u, 0x00005c28u, 0x00050050u, 0x000001aeu, 0x00005c2au, 0x00005c25u, 0x00005c29u, 0x0009004fu, 0x00000013u, 0x00005c2bu, 0x00005c2au, 0x00005c2au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005c03u, 0x00005c2bu, 0x0003003eu, 0x00004683u, 0x00005c2bu, 0x000200f9u, 0x00004a73u, 0x000200f8u, 0x00004a73u, 0x000700f5u, 0x00000013u, 0x00009ff6u, 0x00009f34u, 0x00004a6au, 0x00005c2bu, 0x00004a74u, 0x000700f5u, 0x00000013u, 0x00009e2au, 0x00009d65u, 0x00004a6au, 0x00005bffu, 0x00004a74u, 0x000300f7u, 0x00004a84u, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004a85u, 0x00004a84u, 0x000200f8u, 0x00004a85u, 0x00050050u, 0x000000efu, 0x00004a88u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a89u, 0x00004a88u, 0x0003003eu, 0x00006e4eu, 0x00004640u, 0x0003003eu, 0x00006e4fu, 0x00004642u, 0x0003003eu, 0x0000477fu, 0x000021c0u, 0x0003003eu, 0x00004780u, 0x00004a89u, 0x00050041u, 0x00000007u, 0x00005c34u, 0x00004780u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005c35u, 0x00005c34u, 0x00050084u, 0x00000006u, 0x00005c36u, 0x00004642u, 0x00005c35u, 0x00050080u, 0x00000006u, 0x00005c37u, 0x00004640u, 0x00005c36u, 0x0003003eu, 0x00005c2cu, 0x00005c37u, 0x00050041u, 0x00000007u, 0x00005c38u, 0x00004780u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005c39u, 0x00005c38u, 0x00050084u, 0x00000006u, 0x00005c3au, 0x00005c39u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005c3cu, 0x00005c37u, 0x00005c3au, 0x0003003eu, 0x00005c2cu, 0x00005c3cu, 0x000500c7u, 0x00000006u, 0x00005c3eu, 0x00005c3cu, 0x00000e73u, 0x0003003eu, 0x00005c2cu, 0x00005c3eu, 0x000500c2u, 0x00000006u, 0x00005c40u, 0x00005c3eu, 0x0000022au, 0x0003003eu, 0x00005c2du, 0x00005c40u, 0x0004003du, 0x00000006u, 0x00005c42u, 0x00005c34u, 0x000500c7u, 0x00000006u, 0x00005c43u, 0x00005c42u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005c44u, 0x00005c43u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005c46u, 0x00005c40u, 0x00005c44u, 0x0003003eu, 0x00005c2du, 0x00005c46u, 0x000500c6u, 0x00000006u, 0x00005c48u, 0x00005c46u, 0x0000045cu, 0x0003003eu, 0x00005c2du, 0x00005c48u, 0x00080041u, 0x00000692u, 0x00005c4bu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005c48u, 0x0004003du, 0x00000011u, 0x00005c4cu, 0x00005c4bu, 0x00040071u, 0x00000006u, 0x00005c4du, 0x00005c4cu, 0x0003003eu, 0x00005c2eu, 0x00005c4du, 0x000500c2u, 0x00000006u, 0x00005c4fu, 0x00005c4du, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005c50u, 0x00005c4fu, 0x0004007cu, 0x00000012u, 0x00005c51u, 0x00005c50u, 0x000500c7u, 0x00000006u, 0x00005c53u, 0x00005c4du, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005c54u, 0x00005c53u, 0x0004007cu, 0x00000012u, 0x00005c55u, 0x00005c54u, 0x00050050u, 0x000001aeu, 0x00005c56u, 0x00005c51u, 0x00005c55u, 0x0009004fu, 0x00000013u, 0x00005c57u, 0x00005c56u, 0x00005c56u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005c2fu, 0x00005c57u, 0x0003003eu, 0x0000468bu, 0x00005c57u, 0x000200f9u, 0x00004a84u, 0x000200f8u, 0x00004a84u, 0x000700f5u, 0x00000013u, 0x0000a0dcu, 0x0000a018u, 0x00004a73u, 0x00005c57u, 0x00004a85u, 0x000200f9u, 0x00004a69u, 0x000200f8u, 0x00004a69u, 0x000900f5u, 0x00000013u, 0x0000a0dbu, 0x0000a0dcu, 0x00004a84u, 0x0000a0deu, 0x00004aa4u, 0x0000a0e0u, 0x00004ac4u, 0x000900f5u, 0x00000013u, 0x00009ff4u, 0x00009ff6u, 0x00004a84u, 0x00009ff8u, 0x00004aa4u, 0x00009ffau, 0x00004ac4u, 0x000900f5u, 0x00000013u, 0x00009f0fu, 0x00005bd3u, 0x00004a84u, 0x00005c8au, 0x00004aa4u, 0x00005d47u, 0x00004ac4u, 0x000900f5u, 0x00000013u, 0x00009e28u, 0x00009e2au, 0x00004a84u, 0x00009e2cu, 0x00004aa4u, 0x00009e2eu, 0x00004ac4u, 0x000200f9u, 0x000048acu, 0x000200f8u, 0x000048b0u, 0x00040071u, 0x00000006u, 0x000049deu, 0x00004646u, 0x0004007cu, 0x00000008u, 0x000049dfu, 0x000049deu, 0x000300f7u, 0x000049e0u, 0x00000000u, 0x000b00fbu, 0x000049dfu, 0x000049e0u, 0x00000000u, 0x000049e1u, 0x00000001u, 0x000049e2u, 0x00000002u, 0x000049e3u, 0x00000003u, 0x000049e4u, 0x000200f8u, 0x000049e4u, 0x0004007cu, 0x000000b0u, 0x00004a46u, 0x000099d9u, 0x0003003eu, 0x00006e12u, 0x00004640u, 0x0003003eu, 0x00006e13u, 0x00004642u, 0x0003003eu, 0x00004752u, 0x000021c0u, 0x0003003eu, 0x00004753u, 0x00004a46u, 0x00050041u, 0x00000007u, 0x00005b00u, 0x00004753u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b01u, 0x00005b00u, 0x00050084u, 0x00000006u, 0x00005b02u, 0x00004642u, 0x00005b01u, 0x00050080u, 0x00000006u, 0x00005b03u, 0x00004640u, 0x00005b02u, 0x0003003eu, 0x00005af8u, 0x00005b03u, 0x00050041u, 0x00000007u, 0x00005b04u, 0x00004753u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b05u, 0x00005b04u, 0x00050084u, 0x00000006u, 0x00005b06u, 0x00005b05u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b08u, 0x00005b03u, 0x00005b06u, 0x0003003eu, 0x00005af8u, 0x00005b08u, 0x000500c7u, 0x00000006u, 0x00005b0au, 0x00005b08u, 0x00000e73u, 0x0003003eu, 0x00005af8u, 0x00005b0au, 0x000500c2u, 0x00000006u, 0x00005b0cu, 0x00005b0au, 0x0000022au, 0x0003003eu, 0x00005af9u, 0x00005b0cu, 0x0004003du, 0x00000006u, 0x00005b0eu, 0x00005b00u, 0x000500c7u, 0x00000006u, 0x00005b0fu, 0x00005b0eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b10u, 0x00005b0fu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b12u, 0x00005b0cu, 0x00005b10u, 0x0003003eu, 0x00005af9u, 0x00005b12u, 0x000500c6u, 0x00000006u, 0x00005b14u, 0x00005b12u, 0x0000045cu, 0x0003003eu, 0x00005af9u, 0x00005b14u, 0x00080041u, 0x00000692u, 0x00005b17u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005b14u, 0x0004003du, 0x00000011u, 0x00005b18u, 0x00005b17u, 0x00040071u, 0x00000006u, 0x00005b19u, 0x00005b18u, 0x0003003eu, 0x00005afau, 0x00005b19u, 0x000500c2u, 0x00000006u, 0x00005b1bu, 0x00005b19u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b1cu, 0x00005b1bu, 0x0004007cu, 0x00000012u, 0x00005b1du, 0x00005b1cu, 0x000500c7u, 0x00000006u, 0x00005b1fu, 0x00005b19u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b20u, 0x00005b1fu, 0x0004007cu, 0x00000012u, 0x00005b21u, 0x00005b20u, 0x00050050u, 0x000001aeu, 0x00005b22u, 0x00005b1du, 0x00005b21u, 0x0009004fu, 0x00000013u, 0x00005b23u, 0x00005b22u, 0x00005b22u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005afbu, 0x00005b23u, 0x0003003eu, 0x00004673u, 0x00005b23u, 0x000300f7u, 0x00004a4bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004a4cu, 0x00004a4bu, 0x000200f8u, 0x00004a4cu, 0x00050050u, 0x000000efu, 0x00004a4fu, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004a50u, 0x00004a4fu, 0x0003003eu, 0x00006e16u, 0x00004640u, 0x0003003eu, 0x00006e17u, 0x00004642u, 0x0003003eu, 0x00004755u, 0x000021c0u, 0x0003003eu, 0x00004756u, 0x00004a50u, 0x00050041u, 0x00000007u, 0x00005b2cu, 0x00004756u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b2du, 0x00005b2cu, 0x00050084u, 0x00000006u, 0x00005b2eu, 0x00004642u, 0x00005b2du, 0x00050080u, 0x00000006u, 0x00005b2fu, 0x00004640u, 0x00005b2eu, 0x0003003eu, 0x00005b24u, 0x00005b2fu, 0x00050041u, 0x00000007u, 0x00005b30u, 0x00004756u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b31u, 0x00005b30u, 0x00050084u, 0x00000006u, 0x00005b32u, 0x00005b31u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b34u, 0x00005b2fu, 0x00005b32u, 0x0003003eu, 0x00005b24u, 0x00005b34u, 0x000500c7u, 0x00000006u, 0x00005b36u, 0x00005b34u, 0x00000e73u, 0x0003003eu, 0x00005b24u, 0x00005b36u, 0x000500c2u, 0x00000006u, 0x00005b38u, 0x00005b36u, 0x0000022au, 0x0003003eu, 0x00005b25u, 0x00005b38u, 0x0004003du, 0x00000006u, 0x00005b3au, 0x00005b2cu, 0x000500c7u, 0x00000006u, 0x00005b3bu, 0x00005b3au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b3cu, 0x00005b3bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b3eu, 0x00005b38u, 0x00005b3cu, 0x0003003eu, 0x00005b25u, 0x00005b3eu, 0x000500c6u, 0x00000006u, 0x00005b40u, 0x00005b3eu, 0x0000045cu, 0x0003003eu, 0x00005b25u, 0x00005b40u, 0x00080041u, 0x00000692u, 0x00005b43u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005b40u, 0x0004003du, 0x00000011u, 0x00005b44u, 0x00005b43u, 0x00040071u, 0x00000006u, 0x00005b45u, 0x00005b44u, 0x0003003eu, 0x00005b26u, 0x00005b45u, 0x000500c2u, 0x00000006u, 0x00005b47u, 0x00005b45u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b48u, 0x00005b47u, 0x0004007cu, 0x00000012u, 0x00005b49u, 0x00005b48u, 0x000500c7u, 0x00000006u, 0x00005b4bu, 0x00005b45u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b4cu, 0x00005b4bu, 0x0004007cu, 0x00000012u, 0x00005b4du, 0x00005b4cu, 0x00050050u, 0x000001aeu, 0x00005b4eu, 0x00005b49u, 0x00005b4du, 0x0009004fu, 0x00000013u, 0x00005b4fu, 0x00005b4eu, 0x00005b4eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b27u, 0x00005b4fu, 0x0003003eu, 0x0000467bu, 0x00005b4fu, 0x00050050u, 0x000000efu, 0x00004a56u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a57u, 0x00004a56u, 0x0003003eu, 0x00006e1au, 0x00004640u, 0x0003003eu, 0x00006e1bu, 0x00004642u, 0x0003003eu, 0x00004758u, 0x000021c0u, 0x0003003eu, 0x00004759u, 0x00004a57u, 0x00050041u, 0x00000007u, 0x00005b58u, 0x00004759u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b59u, 0x00005b58u, 0x00050084u, 0x00000006u, 0x00005b5au, 0x00004642u, 0x00005b59u, 0x00050080u, 0x00000006u, 0x00005b5bu, 0x00004640u, 0x00005b5au, 0x0003003eu, 0x00005b50u, 0x00005b5bu, 0x00050041u, 0x00000007u, 0x00005b5cu, 0x00004759u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b5du, 0x00005b5cu, 0x00050084u, 0x00000006u, 0x00005b5eu, 0x00005b5du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b60u, 0x00005b5bu, 0x00005b5eu, 0x0003003eu, 0x00005b50u, 0x00005b60u, 0x000500c7u, 0x00000006u, 0x00005b62u, 0x00005b60u, 0x00000e73u, 0x0003003eu, 0x00005b50u, 0x00005b62u, 0x000500c2u, 0x00000006u, 0x00005b64u, 0x00005b62u, 0x0000022au, 0x0003003eu, 0x00005b51u, 0x00005b64u, 0x0004003du, 0x00000006u, 0x00005b66u, 0x00005b58u, 0x000500c7u, 0x00000006u, 0x00005b67u, 0x00005b66u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b68u, 0x00005b67u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b6au, 0x00005b64u, 0x00005b68u, 0x0003003eu, 0x00005b51u, 0x00005b6au, 0x000500c6u, 0x00000006u, 0x00005b6cu, 0x00005b6au, 0x0000045cu, 0x0003003eu, 0x00005b51u, 0x00005b6cu, 0x00080041u, 0x00000692u, 0x00005b6fu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005b6cu, 0x0004003du, 0x00000011u, 0x00005b70u, 0x00005b6fu, 0x00040071u, 0x00000006u, 0x00005b71u, 0x00005b70u, 0x0003003eu, 0x00005b52u, 0x00005b71u, 0x000500c2u, 0x00000006u, 0x00005b73u, 0x00005b71u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005b74u, 0x00005b73u, 0x0004007cu, 0x00000012u, 0x00005b75u, 0x00005b74u, 0x000500c7u, 0x00000006u, 0x00005b77u, 0x00005b71u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005b78u, 0x00005b77u, 0x0004007cu, 0x00000012u, 0x00005b79u, 0x00005b78u, 0x00050050u, 0x000001aeu, 0x00005b7au, 0x00005b75u, 0x00005b79u, 0x0009004fu, 0x00000013u, 0x00005b7bu, 0x00005b7au, 0x00005b7au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b53u, 0x00005b7bu, 0x0003003eu, 0x00004683u, 0x00005b7bu, 0x000200f9u, 0x00004a4bu, 0x000200f8u, 0x00004a4bu, 0x000700f5u, 0x00000013u, 0x00009ff3u, 0x00009f34u, 0x000049e4u, 0x00005b7bu, 0x00004a4cu, 0x000700f5u, 0x00000013u, 0x00009e27u, 0x00009d65u, 0x000049e4u, 0x00005b4fu, 0x00004a4cu, 0x000300f7u, 0x00004a5cu, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004a5du, 0x00004a5cu, 0x000200f8u, 0x00004a5du, 0x00050050u, 0x000000efu, 0x00004a60u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a61u, 0x00004a60u, 0x0003003eu, 0x00006e1eu, 0x00004640u, 0x0003003eu, 0x00006e1fu, 0x00004642u, 0x0003003eu, 0x0000475bu, 0x000021c0u, 0x0003003eu, 0x0000475cu, 0x00004a61u, 0x00050041u, 0x00000007u, 0x00005b84u, 0x0000475cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005b85u, 0x00005b84u, 0x00050084u, 0x00000006u, 0x00005b86u, 0x00004642u, 0x00005b85u, 0x00050080u, 0x00000006u, 0x00005b87u, 0x00004640u, 0x00005b86u, 0x0003003eu, 0x00005b7cu, 0x00005b87u, 0x00050041u, 0x00000007u, 0x00005b88u, 0x0000475cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005b89u, 0x00005b88u, 0x00050084u, 0x00000006u, 0x00005b8au, 0x00005b89u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005b8cu, 0x00005b87u, 0x00005b8au, 0x0003003eu, 0x00005b7cu, 0x00005b8cu, 0x000500c7u, 0x00000006u, 0x00005b8eu, 0x00005b8cu, 0x00000e73u, 0x0003003eu, 0x00005b7cu, 0x00005b8eu, 0x000500c2u, 0x00000006u, 0x00005b90u, 0x00005b8eu, 0x0000022au, 0x0003003eu, 0x00005b7du, 0x00005b90u, 0x0004003du, 0x00000006u, 0x00005b92u, 0x00005b84u, 0x000500c7u, 0x00000006u, 0x00005b93u, 0x00005b92u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005b94u, 0x00005b93u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005b96u, 0x00005b90u, 0x00005b94u, 0x0003003eu, 0x00005b7du, 0x00005b96u, 0x000500c6u, 0x00000006u, 0x00005b98u, 0x00005b96u, 0x0000045cu, 0x0003003eu, 0x00005b7du, 0x00005b98u, 0x00080041u, 0x00000692u, 0x00005b9bu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005b98u, 0x0004003du, 0x00000011u, 0x00005b9cu, 0x00005b9bu, 0x00040071u, 0x00000006u, 0x00005b9du, 0x00005b9cu, 0x0003003eu, 0x00005b7eu, 0x00005b9du, 0x000500c2u, 0x00000006u, 0x00005b9fu, 0x00005b9du, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005ba0u, 0x00005b9fu, 0x0004007cu, 0x00000012u, 0x00005ba1u, 0x00005ba0u, 0x000500c7u, 0x00000006u, 0x00005ba3u, 0x00005b9du, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005ba4u, 0x00005ba3u, 0x0004007cu, 0x00000012u, 0x00005ba5u, 0x00005ba4u, 0x00050050u, 0x000001aeu, 0x00005ba6u, 0x00005ba1u, 0x00005ba5u, 0x0009004fu, 0x00000013u, 0x00005ba7u, 0x00005ba6u, 0x00005ba6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005b7fu, 0x00005ba7u, 0x0003003eu, 0x0000468bu, 0x00005ba7u, 0x000200f9u, 0x00004a5cu, 0x000200f8u, 0x00004a5cu, 0x000700f5u, 0x00000013u, 0x0000a0d9u, 0x0000a018u, 0x00004a4bu, 0x00005ba7u, 0x00004a5du, 0x000200f9u, 0x000049e0u, 0x000200f8u, 0x000049e3u, 0x0004007cu, 0x000000b0u, 0x00004a26u, 0x000099d9u, 0x0003003eu, 0x00006e02u, 0x00004640u, 0x0003003eu, 0x00006e03u, 0x00004642u, 0x0003003eu, 0x00004746u, 0x000021c0u, 0x0003003eu, 0x00004747u, 0x00004a26u, 0x00050041u, 0x00000007u, 0x00005a1du, 0x00004747u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005a1eu, 0x00005a1du, 0x00050084u, 0x00000006u, 0x00005a1fu, 0x00004642u, 0x00005a1eu, 0x00050080u, 0x00000006u, 0x00005a20u, 0x00004640u, 0x00005a1fu, 0x0003003eu, 0x00005a14u, 0x00005a20u, 0x00050041u, 0x00000007u, 0x00005a21u, 0x00004747u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005a22u, 0x00005a21u, 0x00050084u, 0x00000006u, 0x00005a23u, 0x00005a22u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005a25u, 0x00005a20u, 0x00005a23u, 0x0003003eu, 0x00005a14u, 0x00005a25u, 0x000500c7u, 0x00000006u, 0x00005a27u, 0x00005a25u, 0x00000e73u, 0x0003003eu, 0x00005a14u, 0x00005a27u, 0x000500c2u, 0x00000006u, 0x00005a29u, 0x00005a27u, 0x0000022au, 0x0003003eu, 0x00005a15u, 0x00005a29u, 0x0004003du, 0x00000006u, 0x00005a2bu, 0x00005a1du, 0x000500c7u, 0x00000006u, 0x00005a2cu, 0x00005a2bu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005a2du, 0x00005a2cu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005a2fu, 0x00005a29u, 0x00005a2du, 0x0003003eu, 0x00005a15u, 0x00005a2fu, 0x000500c6u, 0x00000006u, 0x00005a31u, 0x00005a2fu, 0x0000045cu, 0x0003003eu, 0x00005a15u, 0x00005a31u, 0x00080041u, 0x00000692u, 0x00005a34u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005a31u, 0x0004003du, 0x00000011u, 0x00005a35u, 0x00005a34u, 0x00040071u, 0x00000006u, 0x00005a36u, 0x00005a35u, 0x0003003eu, 0x00005a16u, 0x00005a36u, 0x0003003eu, 0x00005a17u, 0x00005a36u, 0x000500c2u, 0x00000006u, 0x00005a3du, 0x00005a36u, 0x0000025du, 0x0003003eu, 0x00005a39u, 0x00005a3du, 0x000500c7u, 0x00000006u, 0x00005a3fu, 0x00005a36u, 0x000006c3u, 0x0003003eu, 0x00005a3au, 0x00005a3fu, 0x00040071u, 0x00000011u, 0x00005a41u, 0x00005a3du, 0x0004007cu, 0x00000012u, 0x00005a42u, 0x00005a41u, 0x00040071u, 0x00000011u, 0x00005a4au, 0x00005a3fu, 0x0004007cu, 0x00000012u, 0x00005a4bu, 0x00005a4au, 0x00070050u, 0x00000013u, 0x00005a4cu, 0x00005a42u, 0x00005a42u, 0x00005a42u, 0x00005a4bu, 0x0003003eu, 0x00005a3bu, 0x00005a4cu, 0x0003003eu, 0x00005a18u, 0x00005a4cu, 0x0003003eu, 0x00004673u, 0x00005a4cu, 0x000300f7u, 0x00004a2bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004a2cu, 0x00004a2bu, 0x000200f8u, 0x00004a2cu, 0x00050050u, 0x000000efu, 0x00004a2fu, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004a30u, 0x00004a2fu, 0x0003003eu, 0x00006e06u, 0x00004640u, 0x0003003eu, 0x00006e07u, 0x00004642u, 0x0003003eu, 0x00004749u, 0x000021c0u, 0x0003003eu, 0x0000474au, 0x00004a30u, 0x00050041u, 0x00000007u, 0x00005a56u, 0x0000474au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005a57u, 0x00005a56u, 0x00050084u, 0x00000006u, 0x00005a58u, 0x00004642u, 0x00005a57u, 0x00050080u, 0x00000006u, 0x00005a59u, 0x00004640u, 0x00005a58u, 0x0003003eu, 0x00005a4du, 0x00005a59u, 0x00050041u, 0x00000007u, 0x00005a5au, 0x0000474au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005a5bu, 0x00005a5au, 0x00050084u, 0x00000006u, 0x00005a5cu, 0x00005a5bu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005a5eu, 0x00005a59u, 0x00005a5cu, 0x0003003eu, 0x00005a4du, 0x00005a5eu, 0x000500c7u, 0x00000006u, 0x00005a60u, 0x00005a5eu, 0x00000e73u, 0x0003003eu, 0x00005a4du, 0x00005a60u, 0x000500c2u, 0x00000006u, 0x00005a62u, 0x00005a60u, 0x0000022au, 0x0003003eu, 0x00005a4eu, 0x00005a62u, 0x0004003du, 0x00000006u, 0x00005a64u, 0x00005a56u, 0x000500c7u, 0x00000006u, 0x00005a65u, 0x00005a64u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005a66u, 0x00005a65u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005a68u, 0x00005a62u, 0x00005a66u, 0x0003003eu, 0x00005a4eu, 0x00005a68u, 0x000500c6u, 0x00000006u, 0x00005a6au, 0x00005a68u, 0x0000045cu, 0x0003003eu, 0x00005a4eu, 0x00005a6au, 0x00080041u, 0x00000692u, 0x00005a6du, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005a6au, 0x0004003du, 0x00000011u, 0x00005a6eu, 0x00005a6du, 0x00040071u, 0x00000006u, 0x00005a6fu, 0x00005a6eu, 0x0003003eu, 0x00005a4fu, 0x00005a6fu, 0x0003003eu, 0x00005a50u, 0x00005a6fu, 0x000500c2u, 0x00000006u, 0x00005a76u, 0x00005a6fu, 0x0000025du, 0x0003003eu, 0x00005a72u, 0x00005a76u, 0x000500c7u, 0x00000006u, 0x00005a78u, 0x00005a6fu, 0x000006c3u, 0x0003003eu, 0x00005a73u, 0x00005a78u, 0x00040071u, 0x00000011u, 0x00005a7au, 0x00005a76u, 0x0004007cu, 0x00000012u, 0x00005a7bu, 0x00005a7au, 0x00040071u, 0x00000011u, 0x00005a83u, 0x00005a78u, 0x0004007cu, 0x00000012u, 0x00005a84u, 0x00005a83u, 0x00070050u, 0x00000013u, 0x00005a85u, 0x00005a7bu, 0x00005a7bu, 0x00005a7bu, 0x00005a84u, 0x0003003eu, 0x00005a74u, 0x00005a85u, 0x0003003eu, 0x00005a51u, 0x00005a85u, 0x0003003eu, 0x0000467bu, 0x00005a85u, 0x00050050u, 0x000000efu, 0x00004a36u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a37u, 0x00004a36u, 0x0003003eu, 0x00006e0au, 0x00004640u, 0x0003003eu, 0x00006e0bu, 0x00004642u, 0x0003003eu, 0x0000474cu, 0x000021c0u, 0x0003003eu, 0x0000474du, 0x00004a37u, 0x00050041u, 0x00000007u, 0x00005a8fu, 0x0000474du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005a90u, 0x00005a8fu, 0x00050084u, 0x00000006u, 0x00005a91u, 0x00004642u, 0x00005a90u, 0x00050080u, 0x00000006u, 0x00005a92u, 0x00004640u, 0x00005a91u, 0x0003003eu, 0x00005a86u, 0x00005a92u, 0x00050041u, 0x00000007u, 0x00005a93u, 0x0000474du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005a94u, 0x00005a93u, 0x00050084u, 0x00000006u, 0x00005a95u, 0x00005a94u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005a97u, 0x00005a92u, 0x00005a95u, 0x0003003eu, 0x00005a86u, 0x00005a97u, 0x000500c7u, 0x00000006u, 0x00005a99u, 0x00005a97u, 0x00000e73u, 0x0003003eu, 0x00005a86u, 0x00005a99u, 0x000500c2u, 0x00000006u, 0x00005a9bu, 0x00005a99u, 0x0000022au, 0x0003003eu, 0x00005a87u, 0x00005a9bu, 0x0004003du, 0x00000006u, 0x00005a9du, 0x00005a8fu, 0x000500c7u, 0x00000006u, 0x00005a9eu, 0x00005a9du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005a9fu, 0x00005a9eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005aa1u, 0x00005a9bu, 0x00005a9fu, 0x0003003eu, 0x00005a87u, 0x00005aa1u, 0x000500c6u, 0x00000006u, 0x00005aa3u, 0x00005aa1u, 0x0000045cu, 0x0003003eu, 0x00005a87u, 0x00005aa3u, 0x00080041u, 0x00000692u, 0x00005aa6u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005aa3u, 0x0004003du, 0x00000011u, 0x00005aa7u, 0x00005aa6u, 0x00040071u, 0x00000006u, 0x00005aa8u, 0x00005aa7u, 0x0003003eu, 0x00005a88u, 0x00005aa8u, 0x0003003eu, 0x00005a89u, 0x00005aa8u, 0x000500c2u, 0x00000006u, 0x00005aafu, 0x00005aa8u, 0x0000025du, 0x0003003eu, 0x00005aabu, 0x00005aafu, 0x000500c7u, 0x00000006u, 0x00005ab1u, 0x00005aa8u, 0x000006c3u, 0x0003003eu, 0x00005aacu, 0x00005ab1u, 0x00040071u, 0x00000011u, 0x00005ab3u, 0x00005aafu, 0x0004007cu, 0x00000012u, 0x00005ab4u, 0x00005ab3u, 0x00040071u, 0x00000011u, 0x00005abcu, 0x00005ab1u, 0x0004007cu, 0x00000012u, 0x00005abdu, 0x00005abcu, 0x00070050u, 0x00000013u, 0x00005abeu, 0x00005ab4u, 0x00005ab4u, 0x00005ab4u, 0x00005abdu, 0x0003003eu, 0x00005aadu, 0x00005abeu, 0x0003003eu, 0x00005a8au, 0x00005abeu, 0x0003003eu, 0x00004683u, 0x00005abeu, 0x000200f9u, 0x00004a2bu, 0x000200f8u, 0x00004a2bu, 0x000700f5u, 0x00000013u, 0x00009ff1u, 0x00009f34u, 0x000049e3u, 0x00005abeu, 0x00004a2cu, 0x000700f5u, 0x00000013u, 0x00009e25u, 0x00009d65u, 0x000049e3u, 0x00005a85u, 0x00004a2cu, 0x000300f7u, 0x00004a3cu, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004a3du, 0x00004a3cu, 0x000200f8u, 0x00004a3du, 0x00050050u, 0x000000efu, 0x00004a40u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a41u, 0x00004a40u, 0x0003003eu, 0x00006e0eu, 0x00004640u, 0x0003003eu, 0x00006e0fu, 0x00004642u, 0x0003003eu, 0x0000474fu, 0x000021c0u, 0x0003003eu, 0x00004750u, 0x00004a41u, 0x00050041u, 0x00000007u, 0x00005ac8u, 0x00004750u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005ac9u, 0x00005ac8u, 0x00050084u, 0x00000006u, 0x00005acau, 0x00004642u, 0x00005ac9u, 0x00050080u, 0x00000006u, 0x00005acbu, 0x00004640u, 0x00005acau, 0x0003003eu, 0x00005abfu, 0x00005acbu, 0x00050041u, 0x00000007u, 0x00005accu, 0x00004750u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005acdu, 0x00005accu, 0x00050084u, 0x00000006u, 0x00005aceu, 0x00005acdu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005ad0u, 0x00005acbu, 0x00005aceu, 0x0003003eu, 0x00005abfu, 0x00005ad0u, 0x000500c7u, 0x00000006u, 0x00005ad2u, 0x00005ad0u, 0x00000e73u, 0x0003003eu, 0x00005abfu, 0x00005ad2u, 0x000500c2u, 0x00000006u, 0x00005ad4u, 0x00005ad2u, 0x0000022au, 0x0003003eu, 0x00005ac0u, 0x00005ad4u, 0x0004003du, 0x00000006u, 0x00005ad6u, 0x00005ac8u, 0x000500c7u, 0x00000006u, 0x00005ad7u, 0x00005ad6u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005ad8u, 0x00005ad7u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005adau, 0x00005ad4u, 0x00005ad8u, 0x0003003eu, 0x00005ac0u, 0x00005adau, 0x000500c6u, 0x00000006u, 0x00005adcu, 0x00005adau, 0x0000045cu, 0x0003003eu, 0x00005ac0u, 0x00005adcu, 0x00080041u, 0x00000692u, 0x00005adfu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005adcu, 0x0004003du, 0x00000011u, 0x00005ae0u, 0x00005adfu, 0x00040071u, 0x00000006u, 0x00005ae1u, 0x00005ae0u, 0x0003003eu, 0x00005ac1u, 0x00005ae1u, 0x0003003eu, 0x00005ac2u, 0x00005ae1u, 0x000500c2u, 0x00000006u, 0x00005ae8u, 0x00005ae1u, 0x0000025du, 0x0003003eu, 0x00005ae4u, 0x00005ae8u, 0x000500c7u, 0x00000006u, 0x00005aeau, 0x00005ae1u, 0x000006c3u, 0x0003003eu, 0x00005ae5u, 0x00005aeau, 0x00040071u, 0x00000011u, 0x00005aecu, 0x00005ae8u, 0x0004007cu, 0x00000012u, 0x00005aedu, 0x00005aecu, 0x00040071u, 0x00000011u, 0x00005af5u, 0x00005aeau, 0x0004007cu, 0x00000012u, 0x00005af6u, 0x00005af5u, 0x00070050u, 0x00000013u, 0x00005af7u, 0x00005aedu, 0x00005aedu, 0x00005aedu, 0x00005af6u, 0x0003003eu, 0x00005ae6u, 0x00005af7u, 0x0003003eu, 0x00005ac3u, 0x00005af7u, 0x0003003eu, 0x0000468bu, 0x00005af7u, 0x000200f9u, 0x00004a3cu, 0x000200f8u, 0x00004a3cu, 0x000700f5u, 0x00000013u, 0x0000a0d7u, 0x0000a018u, 0x00004a2bu, 0x00005af7u, 0x00004a3du, 0x000200f9u, 0x000049e0u, 0x000200f8u, 0x000049e2u, 0x0004007cu, 0x000000b0u, 0x00004a06u, 0x000099d9u, 0x0003003eu, 0x00006df2u, 0x00004640u, 0x0003003eu, 0x00006df3u, 0x00004642u, 0x0003003eu, 0x0000473au, 0x000021c0u, 0x0003003eu, 0x0000473bu, 0x00004a06u, 0x00050041u, 0x00000007u, 0x00005932u, 0x0000473bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005933u, 0x00005932u, 0x00050084u, 0x00000006u, 0x00005934u, 0x00004642u, 0x00005933u, 0x00050080u, 0x00000006u, 0x00005935u, 0x00004640u, 0x00005934u, 0x0003003eu, 0x00005928u, 0x00005935u, 0x00050041u, 0x00000007u, 0x00005936u, 0x0000473bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005937u, 0x00005936u, 0x00050080u, 0x00000006u, 0x00005939u, 0x00005935u, 0x00005937u, 0x0003003eu, 0x00005928u, 0x00005939u, 0x000500c7u, 0x00000006u, 0x0000593bu, 0x00005939u, 0x00000e73u, 0x0003003eu, 0x00005928u, 0x0000593bu, 0x0003003eu, 0x00005929u, 0x0000593bu, 0x0004003du, 0x00000006u, 0x0000593eu, 0x00005932u, 0x000500c7u, 0x00000006u, 0x0000593fu, 0x0000593eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005940u, 0x0000593fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005942u, 0x0000593bu, 0x00005940u, 0x0003003eu, 0x00005929u, 0x00005942u, 0x000500c6u, 0x00000006u, 0x00005944u, 0x00005942u, 0x00000464u, 0x0003003eu, 0x00005929u, 0x00005944u, 0x00080041u, 0x00000671u, 0x00005947u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005944u, 0x0004003du, 0x0000000fu, 0x00005948u, 0x00005947u, 0x00040071u, 0x00000006u, 0x00005949u, 0x00005948u, 0x0003003eu, 0x0000592au, 0x00005949u, 0x000500c2u, 0x00000006u, 0x0000594bu, 0x00005949u, 0x00000233u, 0x0003003eu, 0x0000592bu, 0x0000594bu, 0x000500c7u, 0x00000006u, 0x0000594du, 0x00005949u, 0x00000e96u, 0x0003003eu, 0x0000592cu, 0x0000594du, 0x000500c4u, 0x00000006u, 0x0000594fu, 0x0000594du, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005951u, 0x0000594du, 0x0000594fu, 0x0003003eu, 0x0000592cu, 0x00005951u, 0x000500c4u, 0x00000006u, 0x00005953u, 0x0000594bu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005955u, 0x0000594bu, 0x00005953u, 0x0003003eu, 0x0000592bu, 0x00005955u, 0x00040071u, 0x00000011u, 0x00005957u, 0x00005955u, 0x0004007cu, 0x00000012u, 0x00005958u, 0x00005957u, 0x00040071u, 0x00000011u, 0x00005960u, 0x00005951u, 0x0004007cu, 0x00000012u, 0x00005961u, 0x00005960u, 0x00070050u, 0x00000013u, 0x00005962u, 0x00005958u, 0x00005958u, 0x00005958u, 0x00005961u, 0x0003003eu, 0x0000592du, 0x00005962u, 0x0003003eu, 0x00004673u, 0x00005962u, 0x000300f7u, 0x00004a0bu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004a0cu, 0x00004a0bu, 0x000200f8u, 0x00004a0cu, 0x00050050u, 0x000000efu, 0x00004a0fu, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004a10u, 0x00004a0fu, 0x0003003eu, 0x00006df6u, 0x00004640u, 0x0003003eu, 0x00006df7u, 0x00004642u, 0x0003003eu, 0x0000473du, 0x000021c0u, 0x0003003eu, 0x0000473eu, 0x00004a10u, 0x00050041u, 0x00000007u, 0x0000596du, 0x0000473eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000596eu, 0x0000596du, 0x00050084u, 0x00000006u, 0x0000596fu, 0x00004642u, 0x0000596eu, 0x00050080u, 0x00000006u, 0x00005970u, 0x00004640u, 0x0000596fu, 0x0003003eu, 0x00005963u, 0x00005970u, 0x00050041u, 0x00000007u, 0x00005971u, 0x0000473eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005972u, 0x00005971u, 0x00050080u, 0x00000006u, 0x00005974u, 0x00005970u, 0x00005972u, 0x0003003eu, 0x00005963u, 0x00005974u, 0x000500c7u, 0x00000006u, 0x00005976u, 0x00005974u, 0x00000e73u, 0x0003003eu, 0x00005963u, 0x00005976u, 0x0003003eu, 0x00005964u, 0x00005976u, 0x0004003du, 0x00000006u, 0x00005979u, 0x0000596du, 0x000500c7u, 0x00000006u, 0x0000597au, 0x00005979u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000597bu, 0x0000597au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000597du, 0x00005976u, 0x0000597bu, 0x0003003eu, 0x00005964u, 0x0000597du, 0x000500c6u, 0x00000006u, 0x0000597fu, 0x0000597du, 0x00000464u, 0x0003003eu, 0x00005964u, 0x0000597fu, 0x00080041u, 0x00000671u, 0x00005982u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000597fu, 0x0004003du, 0x0000000fu, 0x00005983u, 0x00005982u, 0x00040071u, 0x00000006u, 0x00005984u, 0x00005983u, 0x0003003eu, 0x00005965u, 0x00005984u, 0x000500c2u, 0x00000006u, 0x00005986u, 0x00005984u, 0x00000233u, 0x0003003eu, 0x00005966u, 0x00005986u, 0x000500c7u, 0x00000006u, 0x00005988u, 0x00005984u, 0x00000e96u, 0x0003003eu, 0x00005967u, 0x00005988u, 0x000500c4u, 0x00000006u, 0x0000598au, 0x00005988u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x0000598cu, 0x00005988u, 0x0000598au, 0x0003003eu, 0x00005967u, 0x0000598cu, 0x000500c4u, 0x00000006u, 0x0000598eu, 0x00005986u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005990u, 0x00005986u, 0x0000598eu, 0x0003003eu, 0x00005966u, 0x00005990u, 0x00040071u, 0x00000011u, 0x00005992u, 0x00005990u, 0x0004007cu, 0x00000012u, 0x00005993u, 0x00005992u, 0x00040071u, 0x00000011u, 0x0000599bu, 0x0000598cu, 0x0004007cu, 0x00000012u, 0x0000599cu, 0x0000599bu, 0x00070050u, 0x00000013u, 0x0000599du, 0x00005993u, 0x00005993u, 0x00005993u, 0x0000599cu, 0x0003003eu, 0x00005968u, 0x0000599du, 0x0003003eu, 0x0000467bu, 0x0000599du, 0x00050050u, 0x000000efu, 0x00004a16u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a17u, 0x00004a16u, 0x0003003eu, 0x00006dfau, 0x00004640u, 0x0003003eu, 0x00006dfbu, 0x00004642u, 0x0003003eu, 0x00004740u, 0x000021c0u, 0x0003003eu, 0x00004741u, 0x00004a17u, 0x00050041u, 0x00000007u, 0x000059a8u, 0x00004741u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000059a9u, 0x000059a8u, 0x00050084u, 0x00000006u, 0x000059aau, 0x00004642u, 0x000059a9u, 0x00050080u, 0x00000006u, 0x000059abu, 0x00004640u, 0x000059aau, 0x0003003eu, 0x0000599eu, 0x000059abu, 0x00050041u, 0x00000007u, 0x000059acu, 0x00004741u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000059adu, 0x000059acu, 0x00050080u, 0x00000006u, 0x000059afu, 0x000059abu, 0x000059adu, 0x0003003eu, 0x0000599eu, 0x000059afu, 0x000500c7u, 0x00000006u, 0x000059b1u, 0x000059afu, 0x00000e73u, 0x0003003eu, 0x0000599eu, 0x000059b1u, 0x0003003eu, 0x0000599fu, 0x000059b1u, 0x0004003du, 0x00000006u, 0x000059b4u, 0x000059a8u, 0x000500c7u, 0x00000006u, 0x000059b5u, 0x000059b4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000059b6u, 0x000059b5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000059b8u, 0x000059b1u, 0x000059b6u, 0x0003003eu, 0x0000599fu, 0x000059b8u, 0x000500c6u, 0x00000006u, 0x000059bau, 0x000059b8u, 0x00000464u, 0x0003003eu, 0x0000599fu, 0x000059bau, 0x00080041u, 0x00000671u, 0x000059bdu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000059bau, 0x0004003du, 0x0000000fu, 0x000059beu, 0x000059bdu, 0x00040071u, 0x00000006u, 0x000059bfu, 0x000059beu, 0x0003003eu, 0x000059a0u, 0x000059bfu, 0x000500c2u, 0x00000006u, 0x000059c1u, 0x000059bfu, 0x00000233u, 0x0003003eu, 0x000059a1u, 0x000059c1u, 0x000500c7u, 0x00000006u, 0x000059c3u, 0x000059bfu, 0x00000e96u, 0x0003003eu, 0x000059a2u, 0x000059c3u, 0x000500c4u, 0x00000006u, 0x000059c5u, 0x000059c3u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000059c7u, 0x000059c3u, 0x000059c5u, 0x0003003eu, 0x000059a2u, 0x000059c7u, 0x000500c4u, 0x00000006u, 0x000059c9u, 0x000059c1u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000059cbu, 0x000059c1u, 0x000059c9u, 0x0003003eu, 0x000059a1u, 0x000059cbu, 0x00040071u, 0x00000011u, 0x000059cdu, 0x000059cbu, 0x0004007cu, 0x00000012u, 0x000059ceu, 0x000059cdu, 0x00040071u, 0x00000011u, 0x000059d6u, 0x000059c7u, 0x0004007cu, 0x00000012u, 0x000059d7u, 0x000059d6u, 0x00070050u, 0x00000013u, 0x000059d8u, 0x000059ceu, 0x000059ceu, 0x000059ceu, 0x000059d7u, 0x0003003eu, 0x000059a3u, 0x000059d8u, 0x0003003eu, 0x00004683u, 0x000059d8u, 0x000200f9u, 0x00004a0bu, 0x000200f8u, 0x00004a0bu, 0x000700f5u, 0x00000013u, 0x00009fefu, 0x00009f34u, 0x000049e2u, 0x000059d8u, 0x00004a0cu, 0x000700f5u, 0x00000013u, 0x00009e23u, 0x00009d65u, 0x000049e2u, 0x0000599du, 0x00004a0cu, 0x000300f7u, 0x00004a1cu, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004a1du, 0x00004a1cu, 0x000200f8u, 0x00004a1du, 0x00050050u, 0x000000efu, 0x00004a20u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a21u, 0x00004a20u, 0x0003003eu, 0x00006dfeu, 0x00004640u, 0x0003003eu, 0x00006dffu, 0x00004642u, 0x0003003eu, 0x00004743u, 0x000021c0u, 0x0003003eu, 0x00004744u, 0x00004a21u, 0x00050041u, 0x00000007u, 0x000059e3u, 0x00004744u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000059e4u, 0x000059e3u, 0x00050084u, 0x00000006u, 0x000059e5u, 0x00004642u, 0x000059e4u, 0x00050080u, 0x00000006u, 0x000059e6u, 0x00004640u, 0x000059e5u, 0x0003003eu, 0x000059d9u, 0x000059e6u, 0x00050041u, 0x00000007u, 0x000059e7u, 0x00004744u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000059e8u, 0x000059e7u, 0x00050080u, 0x00000006u, 0x000059eau, 0x000059e6u, 0x000059e8u, 0x0003003eu, 0x000059d9u, 0x000059eau, 0x000500c7u, 0x00000006u, 0x000059ecu, 0x000059eau, 0x00000e73u, 0x0003003eu, 0x000059d9u, 0x000059ecu, 0x0003003eu, 0x000059dau, 0x000059ecu, 0x0004003du, 0x00000006u, 0x000059efu, 0x000059e3u, 0x000500c7u, 0x00000006u, 0x000059f0u, 0x000059efu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000059f1u, 0x000059f0u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000059f3u, 0x000059ecu, 0x000059f1u, 0x0003003eu, 0x000059dau, 0x000059f3u, 0x000500c6u, 0x00000006u, 0x000059f5u, 0x000059f3u, 0x00000464u, 0x0003003eu, 0x000059dau, 0x000059f5u, 0x00080041u, 0x00000671u, 0x000059f8u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000059f5u, 0x0004003du, 0x0000000fu, 0x000059f9u, 0x000059f8u, 0x00040071u, 0x00000006u, 0x000059fau, 0x000059f9u, 0x0003003eu, 0x000059dbu, 0x000059fau, 0x000500c2u, 0x00000006u, 0x000059fcu, 0x000059fau, 0x00000233u, 0x0003003eu, 0x000059dcu, 0x000059fcu, 0x000500c7u, 0x00000006u, 0x000059feu, 0x000059fau, 0x00000e96u, 0x0003003eu, 0x000059ddu, 0x000059feu, 0x000500c4u, 0x00000006u, 0x00005a00u, 0x000059feu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005a02u, 0x000059feu, 0x00005a00u, 0x0003003eu, 0x000059ddu, 0x00005a02u, 0x000500c4u, 0x00000006u, 0x00005a04u, 0x000059fcu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005a06u, 0x000059fcu, 0x00005a04u, 0x0003003eu, 0x000059dcu, 0x00005a06u, 0x00040071u, 0x00000011u, 0x00005a08u, 0x00005a06u, 0x0004007cu, 0x00000012u, 0x00005a09u, 0x00005a08u, 0x00040071u, 0x00000011u, 0x00005a11u, 0x00005a02u, 0x0004007cu, 0x00000012u, 0x00005a12u, 0x00005a11u, 0x00070050u, 0x00000013u, 0x00005a13u, 0x00005a09u, 0x00005a09u, 0x00005a09u, 0x00005a12u, 0x0003003eu, 0x000059deu, 0x00005a13u, 0x0003003eu, 0x0000468bu, 0x00005a13u, 0x000200f9u, 0x00004a1cu, 0x000200f8u, 0x00004a1cu, 0x000700f5u, 0x00000013u, 0x0000a0d5u, 0x0000a018u, 0x00004a0bu, 0x00005a13u, 0x00004a1du, 0x000200f9u, 0x000049e0u, 0x000200f8u, 0x000049e1u, 0x0004007cu, 0x000000b0u, 0x000049e6u, 0x000099d9u, 0x0003003eu, 0x00006de2u, 0x00004640u, 0x0003003eu, 0x00006de3u, 0x00004642u, 0x0003003eu, 0x0000472eu, 0x000021c0u, 0x0003003eu, 0x0000472fu, 0x000049e6u, 0x00050041u, 0x00000007u, 0x0000581eu, 0x0000472fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000581fu, 0x0000581eu, 0x00050084u, 0x00000006u, 0x00005820u, 0x00004642u, 0x0000581fu, 0x00050080u, 0x00000006u, 0x00005821u, 0x00004640u, 0x00005820u, 0x0003003eu, 0x00005814u, 0x00005821u, 0x00050041u, 0x00000007u, 0x00005822u, 0x0000472fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005823u, 0x00005822u, 0x000500c2u, 0x00000006u, 0x00005824u, 0x00005823u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005826u, 0x00005821u, 0x00005824u, 0x0003003eu, 0x00005814u, 0x00005826u, 0x000500c7u, 0x00000006u, 0x00005828u, 0x00005826u, 0x00000e73u, 0x0003003eu, 0x00005814u, 0x00005828u, 0x0004003du, 0x00000006u, 0x0000582au, 0x00005822u, 0x000400c8u, 0x00000006u, 0x0000582bu, 0x0000582au, 0x000500c7u, 0x00000006u, 0x0000582cu, 0x0000582bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000582du, 0x0000582cu, 0x00000704u, 0x0003003eu, 0x00005815u, 0x0000582du, 0x0003003eu, 0x00005816u, 0x00005828u, 0x0004003du, 0x00000006u, 0x00005830u, 0x0000581eu, 0x000500c7u, 0x00000006u, 0x00005831u, 0x00005830u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005832u, 0x00005831u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005834u, 0x00005828u, 0x00005832u, 0x0003003eu, 0x00005816u, 0x00005834u, 0x000500c6u, 0x00000006u, 0x00005836u, 0x00005834u, 0x00000464u, 0x0003003eu, 0x00005816u, 0x00005836u, 0x00080041u, 0x00000671u, 0x00005839u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005836u, 0x0004003du, 0x0000000fu, 0x0000583au, 0x00005839u, 0x00040071u, 0x00000006u, 0x0000583bu, 0x0000583au, 0x0003003eu, 0x00005817u, 0x0000583bu, 0x000500c2u, 0x00000006u, 0x0000583eu, 0x0000583bu, 0x0000582du, 0x000500c7u, 0x00000006u, 0x0000583fu, 0x0000583eu, 0x00000e96u, 0x0003003eu, 0x00005817u, 0x0000583fu, 0x000500c7u, 0x00000006u, 0x00005841u, 0x0000583fu, 0x00000eceu, 0x0003003eu, 0x00005818u, 0x00005841u, 0x000500c4u, 0x00000006u, 0x00005843u, 0x00005841u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00005845u, 0x00005841u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00005846u, 0x00005843u, 0x00005845u, 0x000500c2u, 0x00000006u, 0x00005848u, 0x00005841u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00005849u, 0x00005846u, 0x00005848u, 0x0003003eu, 0x00005818u, 0x00005849u, 0x00040071u, 0x00000011u, 0x0000584bu, 0x00005849u, 0x0004007cu, 0x00000012u, 0x0000584cu, 0x0000584bu, 0x000500c7u, 0x00000006u, 0x00005854u, 0x0000583fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005855u, 0x00005854u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005856u, 0x00005855u, 0x0004007cu, 0x00000012u, 0x00005857u, 0x00005856u, 0x00070050u, 0x00000013u, 0x00005858u, 0x0000584cu, 0x0000584cu, 0x0000584cu, 0x00005857u, 0x0003003eu, 0x00005819u, 0x00005858u, 0x0003003eu, 0x00004673u, 0x00005858u, 0x000300f7u, 0x000049ebu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000049ecu, 0x000049ebu, 0x000200f8u, 0x000049ecu, 0x00050050u, 0x000000efu, 0x000049efu, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x000049f0u, 0x000049efu, 0x0003003eu, 0x00006de6u, 0x00004640u, 0x0003003eu, 0x00006de7u, 0x00004642u, 0x0003003eu, 0x00004731u, 0x000021c0u, 0x0003003eu, 0x00004732u, 0x000049f0u, 0x00050041u, 0x00000007u, 0x00005863u, 0x00004732u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005864u, 0x00005863u, 0x00050084u, 0x00000006u, 0x00005865u, 0x00004642u, 0x00005864u, 0x00050080u, 0x00000006u, 0x00005866u, 0x00004640u, 0x00005865u, 0x0003003eu, 0x00005859u, 0x00005866u, 0x00050041u, 0x00000007u, 0x00005867u, 0x00004732u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005868u, 0x00005867u, 0x000500c2u, 0x00000006u, 0x00005869u, 0x00005868u, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000586bu, 0x00005866u, 0x00005869u, 0x0003003eu, 0x00005859u, 0x0000586bu, 0x000500c7u, 0x00000006u, 0x0000586du, 0x0000586bu, 0x00000e73u, 0x0003003eu, 0x00005859u, 0x0000586du, 0x0004003du, 0x00000006u, 0x0000586fu, 0x00005867u, 0x000400c8u, 0x00000006u, 0x00005870u, 0x0000586fu, 0x000500c7u, 0x00000006u, 0x00005871u, 0x00005870u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005872u, 0x00005871u, 0x00000704u, 0x0003003eu, 0x0000585au, 0x00005872u, 0x0003003eu, 0x0000585bu, 0x0000586du, 0x0004003du, 0x00000006u, 0x00005875u, 0x00005863u, 0x000500c7u, 0x00000006u, 0x00005876u, 0x00005875u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005877u, 0x00005876u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005879u, 0x0000586du, 0x00005877u, 0x0003003eu, 0x0000585bu, 0x00005879u, 0x000500c6u, 0x00000006u, 0x0000587bu, 0x00005879u, 0x00000464u, 0x0003003eu, 0x0000585bu, 0x0000587bu, 0x00080041u, 0x00000671u, 0x0000587eu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000587bu, 0x0004003du, 0x0000000fu, 0x0000587fu, 0x0000587eu, 0x00040071u, 0x00000006u, 0x00005880u, 0x0000587fu, 0x0003003eu, 0x0000585cu, 0x00005880u, 0x000500c2u, 0x00000006u, 0x00005883u, 0x00005880u, 0x00005872u, 0x000500c7u, 0x00000006u, 0x00005884u, 0x00005883u, 0x00000e96u, 0x0003003eu, 0x0000585cu, 0x00005884u, 0x000500c7u, 0x00000006u, 0x00005886u, 0x00005884u, 0x00000eceu, 0x0003003eu, 0x0000585du, 0x00005886u, 0x000500c4u, 0x00000006u, 0x00005888u, 0x00005886u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x0000588au, 0x00005886u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x0000588bu, 0x00005888u, 0x0000588au, 0x000500c2u, 0x00000006u, 0x0000588du, 0x00005886u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x0000588eu, 0x0000588bu, 0x0000588du, 0x0003003eu, 0x0000585du, 0x0000588eu, 0x00040071u, 0x00000011u, 0x00005890u, 0x0000588eu, 0x0004007cu, 0x00000012u, 0x00005891u, 0x00005890u, 0x000500c7u, 0x00000006u, 0x00005899u, 0x00005884u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000589au, 0x00005899u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000589bu, 0x0000589au, 0x0004007cu, 0x00000012u, 0x0000589cu, 0x0000589bu, 0x00070050u, 0x00000013u, 0x0000589du, 0x00005891u, 0x00005891u, 0x00005891u, 0x0000589cu, 0x0003003eu, 0x0000585eu, 0x0000589du, 0x0003003eu, 0x0000467bu, 0x0000589du, 0x00050050u, 0x000000efu, 0x000049f6u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000049f7u, 0x000049f6u, 0x0003003eu, 0x00006deau, 0x00004640u, 0x0003003eu, 0x00006debu, 0x00004642u, 0x0003003eu, 0x00004734u, 0x000021c0u, 0x0003003eu, 0x00004735u, 0x000049f7u, 0x00050041u, 0x00000007u, 0x000058a8u, 0x00004735u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000058a9u, 0x000058a8u, 0x00050084u, 0x00000006u, 0x000058aau, 0x00004642u, 0x000058a9u, 0x00050080u, 0x00000006u, 0x000058abu, 0x00004640u, 0x000058aau, 0x0003003eu, 0x0000589eu, 0x000058abu, 0x00050041u, 0x00000007u, 0x000058acu, 0x00004735u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000058adu, 0x000058acu, 0x000500c2u, 0x00000006u, 0x000058aeu, 0x000058adu, 0x0000022au, 0x00050080u, 0x00000006u, 0x000058b0u, 0x000058abu, 0x000058aeu, 0x0003003eu, 0x0000589eu, 0x000058b0u, 0x000500c7u, 0x00000006u, 0x000058b2u, 0x000058b0u, 0x00000e73u, 0x0003003eu, 0x0000589eu, 0x000058b2u, 0x0004003du, 0x00000006u, 0x000058b4u, 0x000058acu, 0x000400c8u, 0x00000006u, 0x000058b5u, 0x000058b4u, 0x000500c7u, 0x00000006u, 0x000058b6u, 0x000058b5u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000058b7u, 0x000058b6u, 0x00000704u, 0x0003003eu, 0x0000589fu, 0x000058b7u, 0x0003003eu, 0x000058a0u, 0x000058b2u, 0x0004003du, 0x00000006u, 0x000058bau, 0x000058a8u, 0x000500c7u, 0x00000006u, 0x000058bbu, 0x000058bau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000058bcu, 0x000058bbu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000058beu, 0x000058b2u, 0x000058bcu, 0x0003003eu, 0x000058a0u, 0x000058beu, 0x000500c6u, 0x00000006u, 0x000058c0u, 0x000058beu, 0x00000464u, 0x0003003eu, 0x000058a0u, 0x000058c0u, 0x00080041u, 0x00000671u, 0x000058c3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000058c0u, 0x0004003du, 0x0000000fu, 0x000058c4u, 0x000058c3u, 0x00040071u, 0x00000006u, 0x000058c5u, 0x000058c4u, 0x0003003eu, 0x000058a1u, 0x000058c5u, 0x000500c2u, 0x00000006u, 0x000058c8u, 0x000058c5u, 0x000058b7u, 0x000500c7u, 0x00000006u, 0x000058c9u, 0x000058c8u, 0x00000e96u, 0x0003003eu, 0x000058a1u, 0x000058c9u, 0x000500c7u, 0x00000006u, 0x000058cbu, 0x000058c9u, 0x00000eceu, 0x0003003eu, 0x000058a2u, 0x000058cbu, 0x000500c4u, 0x00000006u, 0x000058cdu, 0x000058cbu, 0x00000233u, 0x000500c4u, 0x00000006u, 0x000058cfu, 0x000058cbu, 0x0000022au, 0x000500c5u, 0x00000006u, 0x000058d0u, 0x000058cdu, 0x000058cfu, 0x000500c2u, 0x00000006u, 0x000058d2u, 0x000058cbu, 0x0000022du, 0x000500c5u, 0x00000006u, 0x000058d3u, 0x000058d0u, 0x000058d2u, 0x0003003eu, 0x000058a2u, 0x000058d3u, 0x00040071u, 0x00000011u, 0x000058d5u, 0x000058d3u, 0x0004007cu, 0x00000012u, 0x000058d6u, 0x000058d5u, 0x000500c7u, 0x00000006u, 0x000058deu, 0x000058c9u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000058dfu, 0x000058deu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000058e0u, 0x000058dfu, 0x0004007cu, 0x00000012u, 0x000058e1u, 0x000058e0u, 0x00070050u, 0x00000013u, 0x000058e2u, 0x000058d6u, 0x000058d6u, 0x000058d6u, 0x000058e1u, 0x0003003eu, 0x000058a3u, 0x000058e2u, 0x0003003eu, 0x00004683u, 0x000058e2u, 0x000200f9u, 0x000049ebu, 0x000200f8u, 0x000049ebu, 0x000700f5u, 0x00000013u, 0x00009fedu, 0x00009f34u, 0x000049e1u, 0x000058e2u, 0x000049ecu, 0x000700f5u, 0x00000013u, 0x00009e21u, 0x00009d65u, 0x000049e1u, 0x0000589du, 0x000049ecu, 0x000300f7u, 0x000049fcu, 0x00000000u, 0x000400fau, 0x000047efu, 0x000049fdu, 0x000049fcu, 0x000200f8u, 0x000049fdu, 0x00050050u, 0x000000efu, 0x00004a00u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004a01u, 0x00004a00u, 0x0003003eu, 0x00006deeu, 0x00004640u, 0x0003003eu, 0x00006defu, 0x00004642u, 0x0003003eu, 0x00004737u, 0x000021c0u, 0x0003003eu, 0x00004738u, 0x00004a01u, 0x00050041u, 0x00000007u, 0x000058edu, 0x00004738u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000058eeu, 0x000058edu, 0x00050084u, 0x00000006u, 0x000058efu, 0x00004642u, 0x000058eeu, 0x00050080u, 0x00000006u, 0x000058f0u, 0x00004640u, 0x000058efu, 0x0003003eu, 0x000058e3u, 0x000058f0u, 0x00050041u, 0x00000007u, 0x000058f1u, 0x00004738u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000058f2u, 0x000058f1u, 0x000500c2u, 0x00000006u, 0x000058f3u, 0x000058f2u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000058f5u, 0x000058f0u, 0x000058f3u, 0x0003003eu, 0x000058e3u, 0x000058f5u, 0x000500c7u, 0x00000006u, 0x000058f7u, 0x000058f5u, 0x00000e73u, 0x0003003eu, 0x000058e3u, 0x000058f7u, 0x0004003du, 0x00000006u, 0x000058f9u, 0x000058f1u, 0x000400c8u, 0x00000006u, 0x000058fau, 0x000058f9u, 0x000500c7u, 0x00000006u, 0x000058fbu, 0x000058fau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000058fcu, 0x000058fbu, 0x00000704u, 0x0003003eu, 0x000058e4u, 0x000058fcu, 0x0003003eu, 0x000058e5u, 0x000058f7u, 0x0004003du, 0x00000006u, 0x000058ffu, 0x000058edu, 0x000500c7u, 0x00000006u, 0x00005900u, 0x000058ffu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005901u, 0x00005900u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005903u, 0x000058f7u, 0x00005901u, 0x0003003eu, 0x000058e5u, 0x00005903u, 0x000500c6u, 0x00000006u, 0x00005905u, 0x00005903u, 0x00000464u, 0x0003003eu, 0x000058e5u, 0x00005905u, 0x00080041u, 0x00000671u, 0x00005908u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005905u, 0x0004003du, 0x0000000fu, 0x00005909u, 0x00005908u, 0x00040071u, 0x00000006u, 0x0000590au, 0x00005909u, 0x0003003eu, 0x000058e6u, 0x0000590au, 0x000500c2u, 0x00000006u, 0x0000590du, 0x0000590au, 0x000058fcu, 0x000500c7u, 0x00000006u, 0x0000590eu, 0x0000590du, 0x00000e96u, 0x0003003eu, 0x000058e6u, 0x0000590eu, 0x000500c7u, 0x00000006u, 0x00005910u, 0x0000590eu, 0x00000eceu, 0x0003003eu, 0x000058e7u, 0x00005910u, 0x000500c4u, 0x00000006u, 0x00005912u, 0x00005910u, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00005914u, 0x00005910u, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00005915u, 0x00005912u, 0x00005914u, 0x000500c2u, 0x00000006u, 0x00005917u, 0x00005910u, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00005918u, 0x00005915u, 0x00005917u, 0x0003003eu, 0x000058e7u, 0x00005918u, 0x00040071u, 0x00000011u, 0x0000591au, 0x00005918u, 0x0004007cu, 0x00000012u, 0x0000591bu, 0x0000591au, 0x000500c7u, 0x00000006u, 0x00005923u, 0x0000590eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005924u, 0x00005923u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005925u, 0x00005924u, 0x0004007cu, 0x00000012u, 0x00005926u, 0x00005925u, 0x00070050u, 0x00000013u, 0x00005927u, 0x0000591bu, 0x0000591bu, 0x0000591bu, 0x00005926u, 0x0003003eu, 0x000058e8u, 0x00005927u, 0x0003003eu, 0x0000468bu, 0x00005927u, 0x000200f9u, 0x000049fcu, 0x000200f8u, 0x000049fcu, 0x000700f5u, 0x00000013u, 0x0000a0d3u, 0x0000a018u, 0x000049ebu, 0x00005927u, 0x000049fdu, 0x000200f9u, 0x000049e0u, 0x000200f8u, 0x000049e0u, 0x000d00f5u, 0x00000013u, 0x0000a0d2u, 0x0000a018u, 0x000048b0u, 0x0000a0d3u, 0x000049fcu, 0x0000a0d5u, 0x00004a1cu, 0x0000a0d7u, 0x00004a3cu, 0x0000a0d9u, 0x00004a5cu, 0x000d00f5u, 0x00000013u, 0x00009febu, 0x00009f34u, 0x000048b0u, 0x00009fedu, 0x000049fcu, 0x00009fefu, 0x00004a1cu, 0x00009ff1u, 0x00004a3cu, 0x00009ff3u, 0x00004a5cu, 0x000d00f5u, 0x00000013u, 0x00009f06u, 0x00009e4du, 0x000048b0u, 0x00005858u, 0x000049fcu, 0x00005962u, 0x00004a1cu, 0x00005a4cu, 0x00004a3cu, 0x00005b23u, 0x00004a5cu, 0x000d00f5u, 0x00000013u, 0x00009e1fu, 0x00009d65u, 0x000048b0u, 0x00009e21u, 0x000049fcu, 0x00009e23u, 0x00004a1cu, 0x00009e25u, 0x00004a3cu, 0x00009e27u, 0x00004a5cu, 0x000200f9u, 0x000048acu, 0x000200f8u, 0x000048afu, 0x00040071u, 0x00000006u, 0x0000496au, 0x00004646u, 0x0004007cu, 0x00000008u, 0x0000496bu, 0x0000496au, 0x000300f7u, 0x0000496cu, 0x00000000u, 0x000700fbu, 0x0000496bu, 0x0000496du, 0x00000000u, 0x0000496eu, 0x00000001u, 0x0000496fu, 0x000200f8u, 0x0000496fu, 0x0004007cu, 0x000000b0u, 0x000049bdu, 0x000099d9u, 0x0003003eu, 0x00006dc2u, 0x00004640u, 0x0003003eu, 0x00006dc3u, 0x00004642u, 0x0003003eu, 0x00004716u, 0x000021c0u, 0x0003003eu, 0x00004717u, 0x000049bdu, 0x00050041u, 0x00000007u, 0x0000578cu, 0x00004717u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000578du, 0x0000578cu, 0x00050084u, 0x00000006u, 0x0000578eu, 0x00004642u, 0x0000578du, 0x00050080u, 0x00000006u, 0x0000578fu, 0x00004640u, 0x0000578eu, 0x0003003eu, 0x00005784u, 0x0000578fu, 0x00050041u, 0x00000007u, 0x00005790u, 0x00004717u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005791u, 0x00005790u, 0x00050080u, 0x00000006u, 0x00005793u, 0x0000578fu, 0x00005791u, 0x0003003eu, 0x00005784u, 0x00005793u, 0x000500c7u, 0x00000006u, 0x00005795u, 0x00005793u, 0x00000e73u, 0x0003003eu, 0x00005784u, 0x00005795u, 0x0003003eu, 0x00005785u, 0x00005795u, 0x0004003du, 0x00000006u, 0x00005798u, 0x0000578cu, 0x000500c7u, 0x00000006u, 0x00005799u, 0x00005798u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000579au, 0x00005799u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000579cu, 0x00005795u, 0x0000579au, 0x0003003eu, 0x00005785u, 0x0000579cu, 0x000500c6u, 0x00000006u, 0x0000579eu, 0x0000579cu, 0x00000464u, 0x0003003eu, 0x00005785u, 0x0000579eu, 0x00080041u, 0x00000671u, 0x000057a1u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000579eu, 0x0004003du, 0x0000000fu, 0x000057a2u, 0x000057a1u, 0x00040071u, 0x00000006u, 0x000057a3u, 0x000057a2u, 0x0003003eu, 0x00005786u, 0x000057a3u, 0x00040071u, 0x00000011u, 0x000057a5u, 0x000057a3u, 0x0004007cu, 0x00000012u, 0x000057a6u, 0x000057a5u, 0x00070050u, 0x00000013u, 0x000057a7u, 0x000057a6u, 0x000057a6u, 0x000057a6u, 0x000057a6u, 0x0003003eu, 0x00005787u, 0x000057a7u, 0x0003003eu, 0x00004673u, 0x000057a7u, 0x000300f7u, 0x000049c2u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000049c3u, 0x000049c2u, 0x000200f8u, 0x000049c3u, 0x00050050u, 0x000000efu, 0x000049c6u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x000049c7u, 0x000049c6u, 0x0003003eu, 0x00006dc6u, 0x00004640u, 0x0003003eu, 0x00006dc7u, 0x00004642u, 0x0003003eu, 0x00004719u, 0x000021c0u, 0x0003003eu, 0x0000471au, 0x000049c7u, 0x00050041u, 0x00000007u, 0x000057b0u, 0x0000471au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000057b1u, 0x000057b0u, 0x00050084u, 0x00000006u, 0x000057b2u, 0x00004642u, 0x000057b1u, 0x00050080u, 0x00000006u, 0x000057b3u, 0x00004640u, 0x000057b2u, 0x0003003eu, 0x000057a8u, 0x000057b3u, 0x00050041u, 0x00000007u, 0x000057b4u, 0x0000471au, 0x0000032du, 0x0004003du, 0x00000006u, 0x000057b5u, 0x000057b4u, 0x00050080u, 0x00000006u, 0x000057b7u, 0x000057b3u, 0x000057b5u, 0x0003003eu, 0x000057a8u, 0x000057b7u, 0x000500c7u, 0x00000006u, 0x000057b9u, 0x000057b7u, 0x00000e73u, 0x0003003eu, 0x000057a8u, 0x000057b9u, 0x0003003eu, 0x000057a9u, 0x000057b9u, 0x0004003du, 0x00000006u, 0x000057bcu, 0x000057b0u, 0x000500c7u, 0x00000006u, 0x000057bdu, 0x000057bcu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000057beu, 0x000057bdu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000057c0u, 0x000057b9u, 0x000057beu, 0x0003003eu, 0x000057a9u, 0x000057c0u, 0x000500c6u, 0x00000006u, 0x000057c2u, 0x000057c0u, 0x00000464u, 0x0003003eu, 0x000057a9u, 0x000057c2u, 0x00080041u, 0x00000671u, 0x000057c5u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000057c2u, 0x0004003du, 0x0000000fu, 0x000057c6u, 0x000057c5u, 0x00040071u, 0x00000006u, 0x000057c7u, 0x000057c6u, 0x0003003eu, 0x000057aau, 0x000057c7u, 0x00040071u, 0x00000011u, 0x000057c9u, 0x000057c7u, 0x0004007cu, 0x00000012u, 0x000057cau, 0x000057c9u, 0x00070050u, 0x00000013u, 0x000057cbu, 0x000057cau, 0x000057cau, 0x000057cau, 0x000057cau, 0x0003003eu, 0x000057abu, 0x000057cbu, 0x0003003eu, 0x0000467bu, 0x000057cbu, 0x00050050u, 0x000000efu, 0x000049cdu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000049ceu, 0x000049cdu, 0x0003003eu, 0x00006dcau, 0x00004640u, 0x0003003eu, 0x00006dcbu, 0x00004642u, 0x0003003eu, 0x0000471cu, 0x000021c0u, 0x0003003eu, 0x0000471du, 0x000049ceu, 0x00050041u, 0x00000007u, 0x000057d4u, 0x0000471du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000057d5u, 0x000057d4u, 0x00050084u, 0x00000006u, 0x000057d6u, 0x00004642u, 0x000057d5u, 0x00050080u, 0x00000006u, 0x000057d7u, 0x00004640u, 0x000057d6u, 0x0003003eu, 0x000057ccu, 0x000057d7u, 0x00050041u, 0x00000007u, 0x000057d8u, 0x0000471du, 0x0000032du, 0x0004003du, 0x00000006u, 0x000057d9u, 0x000057d8u, 0x00050080u, 0x00000006u, 0x000057dbu, 0x000057d7u, 0x000057d9u, 0x0003003eu, 0x000057ccu, 0x000057dbu, 0x000500c7u, 0x00000006u, 0x000057ddu, 0x000057dbu, 0x00000e73u, 0x0003003eu, 0x000057ccu, 0x000057ddu, 0x0003003eu, 0x000057cdu, 0x000057ddu, 0x0004003du, 0x00000006u, 0x000057e0u, 0x000057d4u, 0x000500c7u, 0x00000006u, 0x000057e1u, 0x000057e0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000057e2u, 0x000057e1u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000057e4u, 0x000057ddu, 0x000057e2u, 0x0003003eu, 0x000057cdu, 0x000057e4u, 0x000500c6u, 0x00000006u, 0x000057e6u, 0x000057e4u, 0x00000464u, 0x0003003eu, 0x000057cdu, 0x000057e6u, 0x00080041u, 0x00000671u, 0x000057e9u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000057e6u, 0x0004003du, 0x0000000fu, 0x000057eau, 0x000057e9u, 0x00040071u, 0x00000006u, 0x000057ebu, 0x000057eau, 0x0003003eu, 0x000057ceu, 0x000057ebu, 0x00040071u, 0x00000011u, 0x000057edu, 0x000057ebu, 0x0004007cu, 0x00000012u, 0x000057eeu, 0x000057edu, 0x00070050u, 0x00000013u, 0x000057efu, 0x000057eeu, 0x000057eeu, 0x000057eeu, 0x000057eeu, 0x0003003eu, 0x000057cfu, 0x000057efu, 0x0003003eu, 0x00004683u, 0x000057efu, 0x000200f9u, 0x000049c2u, 0x000200f8u, 0x000049c2u, 0x000700f5u, 0x00000013u, 0x00009feau, 0x00009f34u, 0x0000496fu, 0x000057efu, 0x000049c3u, 0x000700f5u, 0x00000013u, 0x00009e1eu, 0x00009d65u, 0x0000496fu, 0x000057cbu, 0x000049c3u, 0x000300f7u, 0x000049d3u, 0x00000000u, 0x000400fau, 0x000047efu, 0x000049d4u, 0x000049d3u, 0x000200f8u, 0x000049d4u, 0x00050050u, 0x000000efu, 0x000049d7u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000049d8u, 0x000049d7u, 0x0003003eu, 0x00006dceu, 0x00004640u, 0x0003003eu, 0x00006dcfu, 0x00004642u, 0x0003003eu, 0x0000471fu, 0x000021c0u, 0x0003003eu, 0x00004720u, 0x000049d8u, 0x00050041u, 0x00000007u, 0x000057f8u, 0x00004720u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000057f9u, 0x000057f8u, 0x00050084u, 0x00000006u, 0x000057fau, 0x00004642u, 0x000057f9u, 0x00050080u, 0x00000006u, 0x000057fbu, 0x00004640u, 0x000057fau, 0x0003003eu, 0x000057f0u, 0x000057fbu, 0x00050041u, 0x00000007u, 0x000057fcu, 0x00004720u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000057fdu, 0x000057fcu, 0x00050080u, 0x00000006u, 0x000057ffu, 0x000057fbu, 0x000057fdu, 0x0003003eu, 0x000057f0u, 0x000057ffu, 0x000500c7u, 0x00000006u, 0x00005801u, 0x000057ffu, 0x00000e73u, 0x0003003eu, 0x000057f0u, 0x00005801u, 0x0003003eu, 0x000057f1u, 0x00005801u, 0x0004003du, 0x00000006u, 0x00005804u, 0x000057f8u, 0x000500c7u, 0x00000006u, 0x00005805u, 0x00005804u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005806u, 0x00005805u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005808u, 0x00005801u, 0x00005806u, 0x0003003eu, 0x000057f1u, 0x00005808u, 0x000500c6u, 0x00000006u, 0x0000580au, 0x00005808u, 0x00000464u, 0x0003003eu, 0x000057f1u, 0x0000580au, 0x00080041u, 0x00000671u, 0x0000580du, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000580au, 0x0004003du, 0x0000000fu, 0x0000580eu, 0x0000580du, 0x00040071u, 0x00000006u, 0x0000580fu, 0x0000580eu, 0x0003003eu, 0x000057f2u, 0x0000580fu, 0x00040071u, 0x00000011u, 0x00005811u, 0x0000580fu, 0x0004007cu, 0x00000012u, 0x00005812u, 0x00005811u, 0x00070050u, 0x00000013u, 0x00005813u, 0x00005812u, 0x00005812u, 0x00005812u, 0x00005812u, 0x0003003eu, 0x000057f3u, 0x00005813u, 0x0003003eu, 0x0000468bu, 0x00005813u, 0x000200f9u, 0x000049d3u, 0x000200f8u, 0x000049d3u, 0x000700f5u, 0x00000013u, 0x0000a0d0u, 0x0000a018u, 0x000049c2u, 0x00005813u, 0x000049d4u, 0x000200f9u, 0x0000496cu, 0x000200f8u, 0x0000496eu, 0x0004007cu, 0x000000b0u, 0x00004991u, 0x000099d9u, 0x00040071u, 0x00000006u, 0x00004994u, 0x00004648u, 0x0003003eu, 0x00006db2u, 0x00004640u, 0x0003003eu, 0x00006db3u, 0x00004642u, 0x0003003eu, 0x00004706u, 0x000021c0u, 0x0003003eu, 0x00004707u, 0x00004991u, 0x0003003eu, 0x00004708u, 0x00004994u, 0x00050041u, 0x00000007u, 0x000056c1u, 0x00004707u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000056c2u, 0x000056c1u, 0x00050084u, 0x00000006u, 0x000056c3u, 0x00004642u, 0x000056c2u, 0x00050080u, 0x00000006u, 0x000056c4u, 0x00004640u, 0x000056c3u, 0x0003003eu, 0x000056b8u, 0x000056c4u, 0x00050041u, 0x00000007u, 0x000056c5u, 0x00004707u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000056c6u, 0x000056c5u, 0x000500c2u, 0x00000006u, 0x000056c7u, 0x000056c6u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000056c9u, 0x000056c4u, 0x000056c7u, 0x0003003eu, 0x000056b8u, 0x000056c9u, 0x000500c7u, 0x00000006u, 0x000056cbu, 0x000056c9u, 0x00000e73u, 0x0003003eu, 0x000056b8u, 0x000056cbu, 0x0004003du, 0x00000006u, 0x000056cdu, 0x000056c5u, 0x000400c8u, 0x00000006u, 0x000056ceu, 0x000056cdu, 0x000500c7u, 0x00000006u, 0x000056cfu, 0x000056ceu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000056d0u, 0x000056cfu, 0x00000704u, 0x0003003eu, 0x000056b9u, 0x000056d0u, 0x0003003eu, 0x000056bau, 0x000056cbu, 0x0004003du, 0x00000006u, 0x000056d3u, 0x000056c1u, 0x000500c7u, 0x00000006u, 0x000056d4u, 0x000056d3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000056d5u, 0x000056d4u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000056d7u, 0x000056cbu, 0x000056d5u, 0x0003003eu, 0x000056bau, 0x000056d7u, 0x000500c6u, 0x00000006u, 0x000056d9u, 0x000056d7u, 0x00000464u, 0x0003003eu, 0x000056bau, 0x000056d9u, 0x00080041u, 0x00000671u, 0x000056dcu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000056d9u, 0x0004003du, 0x0000000fu, 0x000056ddu, 0x000056dcu, 0x00040071u, 0x00000006u, 0x000056deu, 0x000056ddu, 0x0003003eu, 0x000056bbu, 0x000056deu, 0x000500c2u, 0x00000006u, 0x000056e1u, 0x000056deu, 0x000056d0u, 0x000500c7u, 0x00000006u, 0x000056e2u, 0x000056e1u, 0x00000e96u, 0x0003003eu, 0x000056bbu, 0x000056e2u, 0x000500c4u, 0x00000006u, 0x000056e4u, 0x00004994u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000056e6u, 0x000056e2u, 0x000056e4u, 0x0003003eu, 0x000056bbu, 0x000056e6u, 0x00040071u, 0x00000011u, 0x000056e8u, 0x000056e6u, 0x0004007cu, 0x00000012u, 0x000056e9u, 0x000056e8u, 0x00070050u, 0x00000013u, 0x000056eau, 0x000056e9u, 0x000056e9u, 0x000056e9u, 0x000056e9u, 0x0003003eu, 0x000056bcu, 0x000056eau, 0x0003003eu, 0x00004673u, 0x000056eau, 0x000300f7u, 0x00004999u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x0000499au, 0x00004999u, 0x000200f8u, 0x0000499au, 0x00050050u, 0x000000efu, 0x0000499du, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x0000499eu, 0x0000499du, 0x0003003eu, 0x00006db6u, 0x00004640u, 0x0003003eu, 0x00006db7u, 0x00004642u, 0x0003003eu, 0x0000470au, 0x000021c0u, 0x0003003eu, 0x0000470bu, 0x0000499eu, 0x0003003eu, 0x0000470cu, 0x00004994u, 0x00050041u, 0x00000007u, 0x000056f4u, 0x0000470bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000056f5u, 0x000056f4u, 0x00050084u, 0x00000006u, 0x000056f6u, 0x00004642u, 0x000056f5u, 0x00050080u, 0x00000006u, 0x000056f7u, 0x00004640u, 0x000056f6u, 0x0003003eu, 0x000056ebu, 0x000056f7u, 0x00050041u, 0x00000007u, 0x000056f8u, 0x0000470bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000056f9u, 0x000056f8u, 0x000500c2u, 0x00000006u, 0x000056fau, 0x000056f9u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000056fcu, 0x000056f7u, 0x000056fau, 0x0003003eu, 0x000056ebu, 0x000056fcu, 0x000500c7u, 0x00000006u, 0x000056feu, 0x000056fcu, 0x00000e73u, 0x0003003eu, 0x000056ebu, 0x000056feu, 0x0004003du, 0x00000006u, 0x00005700u, 0x000056f8u, 0x000400c8u, 0x00000006u, 0x00005701u, 0x00005700u, 0x000500c7u, 0x00000006u, 0x00005702u, 0x00005701u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005703u, 0x00005702u, 0x00000704u, 0x0003003eu, 0x000056ecu, 0x00005703u, 0x0003003eu, 0x000056edu, 0x000056feu, 0x0004003du, 0x00000006u, 0x00005706u, 0x000056f4u, 0x000500c7u, 0x00000006u, 0x00005707u, 0x00005706u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005708u, 0x00005707u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000570au, 0x000056feu, 0x00005708u, 0x0003003eu, 0x000056edu, 0x0000570au, 0x000500c6u, 0x00000006u, 0x0000570cu, 0x0000570au, 0x00000464u, 0x0003003eu, 0x000056edu, 0x0000570cu, 0x00080041u, 0x00000671u, 0x0000570fu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000570cu, 0x0004003du, 0x0000000fu, 0x00005710u, 0x0000570fu, 0x00040071u, 0x00000006u, 0x00005711u, 0x00005710u, 0x0003003eu, 0x000056eeu, 0x00005711u, 0x000500c2u, 0x00000006u, 0x00005714u, 0x00005711u, 0x00005703u, 0x000500c7u, 0x00000006u, 0x00005715u, 0x00005714u, 0x00000e96u, 0x0003003eu, 0x000056eeu, 0x00005715u, 0x000500c5u, 0x00000006u, 0x00005719u, 0x00005715u, 0x000056e4u, 0x0003003eu, 0x000056eeu, 0x00005719u, 0x00040071u, 0x00000011u, 0x0000571bu, 0x00005719u, 0x0004007cu, 0x00000012u, 0x0000571cu, 0x0000571bu, 0x00070050u, 0x00000013u, 0x0000571du, 0x0000571cu, 0x0000571cu, 0x0000571cu, 0x0000571cu, 0x0003003eu, 0x000056efu, 0x0000571du, 0x0003003eu, 0x0000467bu, 0x0000571du, 0x00050050u, 0x000000efu, 0x000049a7u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000049a8u, 0x000049a7u, 0x0003003eu, 0x00006dbau, 0x00004640u, 0x0003003eu, 0x00006dbbu, 0x00004642u, 0x0003003eu, 0x0000470eu, 0x000021c0u, 0x0003003eu, 0x0000470fu, 0x000049a8u, 0x0003003eu, 0x00004710u, 0x00004994u, 0x00050041u, 0x00000007u, 0x00005727u, 0x0000470fu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005728u, 0x00005727u, 0x00050084u, 0x00000006u, 0x00005729u, 0x00004642u, 0x00005728u, 0x00050080u, 0x00000006u, 0x0000572au, 0x00004640u, 0x00005729u, 0x0003003eu, 0x0000571eu, 0x0000572au, 0x00050041u, 0x00000007u, 0x0000572bu, 0x0000470fu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000572cu, 0x0000572bu, 0x000500c2u, 0x00000006u, 0x0000572du, 0x0000572cu, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000572fu, 0x0000572au, 0x0000572du, 0x0003003eu, 0x0000571eu, 0x0000572fu, 0x000500c7u, 0x00000006u, 0x00005731u, 0x0000572fu, 0x00000e73u, 0x0003003eu, 0x0000571eu, 0x00005731u, 0x0004003du, 0x00000006u, 0x00005733u, 0x0000572bu, 0x000400c8u, 0x00000006u, 0x00005734u, 0x00005733u, 0x000500c7u, 0x00000006u, 0x00005735u, 0x00005734u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005736u, 0x00005735u, 0x00000704u, 0x0003003eu, 0x0000571fu, 0x00005736u, 0x0003003eu, 0x00005720u, 0x00005731u, 0x0004003du, 0x00000006u, 0x00005739u, 0x00005727u, 0x000500c7u, 0x00000006u, 0x0000573au, 0x00005739u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000573bu, 0x0000573au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000573du, 0x00005731u, 0x0000573bu, 0x0003003eu, 0x00005720u, 0x0000573du, 0x000500c6u, 0x00000006u, 0x0000573fu, 0x0000573du, 0x00000464u, 0x0003003eu, 0x00005720u, 0x0000573fu, 0x00080041u, 0x00000671u, 0x00005742u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000573fu, 0x0004003du, 0x0000000fu, 0x00005743u, 0x00005742u, 0x00040071u, 0x00000006u, 0x00005744u, 0x00005743u, 0x0003003eu, 0x00005721u, 0x00005744u, 0x000500c2u, 0x00000006u, 0x00005747u, 0x00005744u, 0x00005736u, 0x000500c7u, 0x00000006u, 0x00005748u, 0x00005747u, 0x00000e96u, 0x0003003eu, 0x00005721u, 0x00005748u, 0x000500c5u, 0x00000006u, 0x0000574cu, 0x00005748u, 0x000056e4u, 0x0003003eu, 0x00005721u, 0x0000574cu, 0x00040071u, 0x00000011u, 0x0000574eu, 0x0000574cu, 0x0004007cu, 0x00000012u, 0x0000574fu, 0x0000574eu, 0x00070050u, 0x00000013u, 0x00005750u, 0x0000574fu, 0x0000574fu, 0x0000574fu, 0x0000574fu, 0x0003003eu, 0x00005722u, 0x00005750u, 0x0003003eu, 0x00004683u, 0x00005750u, 0x000200f9u, 0x00004999u, 0x000200f8u, 0x00004999u, 0x000700f5u, 0x00000013u, 0x00009fe8u, 0x00009f34u, 0x0000496eu, 0x00005750u, 0x0000499au, 0x000700f5u, 0x00000013u, 0x00009e1cu, 0x00009d65u, 0x0000496eu, 0x0000571du, 0x0000499au, 0x000300f7u, 0x000049b0u, 0x00000000u, 0x000400fau, 0x000047efu, 0x000049b1u, 0x000049b0u, 0x000200f8u, 0x000049b1u, 0x00050050u, 0x000000efu, 0x000049b4u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000049b5u, 0x000049b4u, 0x0003003eu, 0x00006dbeu, 0x00004640u, 0x0003003eu, 0x00006dbfu, 0x00004642u, 0x0003003eu, 0x00004712u, 0x000021c0u, 0x0003003eu, 0x00004713u, 0x000049b5u, 0x0003003eu, 0x00004714u, 0x00004994u, 0x00050041u, 0x00000007u, 0x0000575au, 0x00004713u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000575bu, 0x0000575au, 0x00050084u, 0x00000006u, 0x0000575cu, 0x00004642u, 0x0000575bu, 0x00050080u, 0x00000006u, 0x0000575du, 0x00004640u, 0x0000575cu, 0x0003003eu, 0x00005751u, 0x0000575du, 0x00050041u, 0x00000007u, 0x0000575eu, 0x00004713u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000575fu, 0x0000575eu, 0x000500c2u, 0x00000006u, 0x00005760u, 0x0000575fu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005762u, 0x0000575du, 0x00005760u, 0x0003003eu, 0x00005751u, 0x00005762u, 0x000500c7u, 0x00000006u, 0x00005764u, 0x00005762u, 0x00000e73u, 0x0003003eu, 0x00005751u, 0x00005764u, 0x0004003du, 0x00000006u, 0x00005766u, 0x0000575eu, 0x000400c8u, 0x00000006u, 0x00005767u, 0x00005766u, 0x000500c7u, 0x00000006u, 0x00005768u, 0x00005767u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005769u, 0x00005768u, 0x00000704u, 0x0003003eu, 0x00005752u, 0x00005769u, 0x0003003eu, 0x00005753u, 0x00005764u, 0x0004003du, 0x00000006u, 0x0000576cu, 0x0000575au, 0x000500c7u, 0x00000006u, 0x0000576du, 0x0000576cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000576eu, 0x0000576du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005770u, 0x00005764u, 0x0000576eu, 0x0003003eu, 0x00005753u, 0x00005770u, 0x000500c6u, 0x00000006u, 0x00005772u, 0x00005770u, 0x00000464u, 0x0003003eu, 0x00005753u, 0x00005772u, 0x00080041u, 0x00000671u, 0x00005775u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005772u, 0x0004003du, 0x0000000fu, 0x00005776u, 0x00005775u, 0x00040071u, 0x00000006u, 0x00005777u, 0x00005776u, 0x0003003eu, 0x00005754u, 0x00005777u, 0x000500c2u, 0x00000006u, 0x0000577au, 0x00005777u, 0x00005769u, 0x000500c7u, 0x00000006u, 0x0000577bu, 0x0000577au, 0x00000e96u, 0x0003003eu, 0x00005754u, 0x0000577bu, 0x000500c5u, 0x00000006u, 0x0000577fu, 0x0000577bu, 0x000056e4u, 0x0003003eu, 0x00005754u, 0x0000577fu, 0x00040071u, 0x00000011u, 0x00005781u, 0x0000577fu, 0x0004007cu, 0x00000012u, 0x00005782u, 0x00005781u, 0x00070050u, 0x00000013u, 0x00005783u, 0x00005782u, 0x00005782u, 0x00005782u, 0x00005782u, 0x0003003eu, 0x00005755u, 0x00005783u, 0x0003003eu, 0x0000468bu, 0x00005783u, 0x000200f9u, 0x000049b0u, 0x000200f8u, 0x000049b0u, 0x000700f5u, 0x00000013u, 0x0000a0ceu, 0x0000a018u, 0x00004999u, 0x00005783u, 0x000049b1u, 0x000200f9u, 0x0000496cu, 0x000200f8u, 0x0000496du, 0x0004007cu, 0x000000b0u, 0x00004971u, 0x000099d9u, 0x0003003eu, 0x00006dd2u, 0x00004640u, 0x0003003eu, 0x00006dd3u, 0x00004642u, 0x0003003eu, 0x00004722u, 0x000021c0u, 0x0003003eu, 0x00004723u, 0x00004971u, 0x00050041u, 0x00000007u, 0x00005610u, 0x00004723u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005611u, 0x00005610u, 0x00050084u, 0x00000006u, 0x00005612u, 0x00004642u, 0x00005611u, 0x00050080u, 0x00000006u, 0x00005613u, 0x00004640u, 0x00005612u, 0x0003003eu, 0x00005608u, 0x00005613u, 0x00050041u, 0x00000007u, 0x00005614u, 0x00004723u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005615u, 0x00005614u, 0x00050084u, 0x00000006u, 0x00005616u, 0x00005615u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005618u, 0x00005613u, 0x00005616u, 0x0003003eu, 0x00005608u, 0x00005618u, 0x000500c7u, 0x00000006u, 0x0000561au, 0x00005618u, 0x00000e73u, 0x0003003eu, 0x00005608u, 0x0000561au, 0x000500c2u, 0x00000006u, 0x0000561cu, 0x0000561au, 0x0000022au, 0x0003003eu, 0x00005609u, 0x0000561cu, 0x0004003du, 0x00000006u, 0x0000561eu, 0x00005610u, 0x000500c7u, 0x00000006u, 0x0000561fu, 0x0000561eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005620u, 0x0000561fu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005622u, 0x0000561cu, 0x00005620u, 0x0003003eu, 0x00005609u, 0x00005622u, 0x000500c6u, 0x00000006u, 0x00005624u, 0x00005622u, 0x0000045cu, 0x0003003eu, 0x00005609u, 0x00005624u, 0x00080041u, 0x00000692u, 0x00005627u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005624u, 0x0004003du, 0x00000011u, 0x00005628u, 0x00005627u, 0x00040071u, 0x00000006u, 0x00005629u, 0x00005628u, 0x0003003eu, 0x0000560au, 0x00005629u, 0x000500c2u, 0x00000006u, 0x0000562bu, 0x00005629u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000562cu, 0x0000562bu, 0x0004007cu, 0x00000012u, 0x0000562du, 0x0000562cu, 0x000500c7u, 0x00000006u, 0x0000562fu, 0x00005629u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005630u, 0x0000562fu, 0x0004007cu, 0x00000012u, 0x00005631u, 0x00005630u, 0x00050050u, 0x000001aeu, 0x00005632u, 0x0000562du, 0x00005631u, 0x0009004fu, 0x00000013u, 0x00005633u, 0x00005632u, 0x00005632u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000560bu, 0x00005633u, 0x0003003eu, 0x00004673u, 0x00005633u, 0x000300f7u, 0x00004976u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004977u, 0x00004976u, 0x000200f8u, 0x00004977u, 0x00050050u, 0x000000efu, 0x0000497au, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x0000497bu, 0x0000497au, 0x0003003eu, 0x00006dd6u, 0x00004640u, 0x0003003eu, 0x00006dd7u, 0x00004642u, 0x0003003eu, 0x00004725u, 0x000021c0u, 0x0003003eu, 0x00004726u, 0x0000497bu, 0x00050041u, 0x00000007u, 0x0000563cu, 0x00004726u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000563du, 0x0000563cu, 0x00050084u, 0x00000006u, 0x0000563eu, 0x00004642u, 0x0000563du, 0x00050080u, 0x00000006u, 0x0000563fu, 0x00004640u, 0x0000563eu, 0x0003003eu, 0x00005634u, 0x0000563fu, 0x00050041u, 0x00000007u, 0x00005640u, 0x00004726u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005641u, 0x00005640u, 0x00050084u, 0x00000006u, 0x00005642u, 0x00005641u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005644u, 0x0000563fu, 0x00005642u, 0x0003003eu, 0x00005634u, 0x00005644u, 0x000500c7u, 0x00000006u, 0x00005646u, 0x00005644u, 0x00000e73u, 0x0003003eu, 0x00005634u, 0x00005646u, 0x000500c2u, 0x00000006u, 0x00005648u, 0x00005646u, 0x0000022au, 0x0003003eu, 0x00005635u, 0x00005648u, 0x0004003du, 0x00000006u, 0x0000564au, 0x0000563cu, 0x000500c7u, 0x00000006u, 0x0000564bu, 0x0000564au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000564cu, 0x0000564bu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000564eu, 0x00005648u, 0x0000564cu, 0x0003003eu, 0x00005635u, 0x0000564eu, 0x000500c6u, 0x00000006u, 0x00005650u, 0x0000564eu, 0x0000045cu, 0x0003003eu, 0x00005635u, 0x00005650u, 0x00080041u, 0x00000692u, 0x00005653u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005650u, 0x0004003du, 0x00000011u, 0x00005654u, 0x00005653u, 0x00040071u, 0x00000006u, 0x00005655u, 0x00005654u, 0x0003003eu, 0x00005636u, 0x00005655u, 0x000500c2u, 0x00000006u, 0x00005657u, 0x00005655u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005658u, 0x00005657u, 0x0004007cu, 0x00000012u, 0x00005659u, 0x00005658u, 0x000500c7u, 0x00000006u, 0x0000565bu, 0x00005655u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000565cu, 0x0000565bu, 0x0004007cu, 0x00000012u, 0x0000565du, 0x0000565cu, 0x00050050u, 0x000001aeu, 0x0000565eu, 0x00005659u, 0x0000565du, 0x0009004fu, 0x00000013u, 0x0000565fu, 0x0000565eu, 0x0000565eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005637u, 0x0000565fu, 0x0003003eu, 0x0000467bu, 0x0000565fu, 0x00050050u, 0x000000efu, 0x00004981u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004982u, 0x00004981u, 0x0003003eu, 0x00006ddau, 0x00004640u, 0x0003003eu, 0x00006ddbu, 0x00004642u, 0x0003003eu, 0x00004728u, 0x000021c0u, 0x0003003eu, 0x00004729u, 0x00004982u, 0x00050041u, 0x00000007u, 0x00005668u, 0x00004729u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005669u, 0x00005668u, 0x00050084u, 0x00000006u, 0x0000566au, 0x00004642u, 0x00005669u, 0x00050080u, 0x00000006u, 0x0000566bu, 0x00004640u, 0x0000566au, 0x0003003eu, 0x00005660u, 0x0000566bu, 0x00050041u, 0x00000007u, 0x0000566cu, 0x00004729u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000566du, 0x0000566cu, 0x00050084u, 0x00000006u, 0x0000566eu, 0x0000566du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005670u, 0x0000566bu, 0x0000566eu, 0x0003003eu, 0x00005660u, 0x00005670u, 0x000500c7u, 0x00000006u, 0x00005672u, 0x00005670u, 0x00000e73u, 0x0003003eu, 0x00005660u, 0x00005672u, 0x000500c2u, 0x00000006u, 0x00005674u, 0x00005672u, 0x0000022au, 0x0003003eu, 0x00005661u, 0x00005674u, 0x0004003du, 0x00000006u, 0x00005676u, 0x00005668u, 0x000500c7u, 0x00000006u, 0x00005677u, 0x00005676u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005678u, 0x00005677u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000567au, 0x00005674u, 0x00005678u, 0x0003003eu, 0x00005661u, 0x0000567au, 0x000500c6u, 0x00000006u, 0x0000567cu, 0x0000567au, 0x0000045cu, 0x0003003eu, 0x00005661u, 0x0000567cu, 0x00080041u, 0x00000692u, 0x0000567fu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000567cu, 0x0004003du, 0x00000011u, 0x00005680u, 0x0000567fu, 0x00040071u, 0x00000006u, 0x00005681u, 0x00005680u, 0x0003003eu, 0x00005662u, 0x00005681u, 0x000500c2u, 0x00000006u, 0x00005683u, 0x00005681u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005684u, 0x00005683u, 0x0004007cu, 0x00000012u, 0x00005685u, 0x00005684u, 0x000500c7u, 0x00000006u, 0x00005687u, 0x00005681u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005688u, 0x00005687u, 0x0004007cu, 0x00000012u, 0x00005689u, 0x00005688u, 0x00050050u, 0x000001aeu, 0x0000568au, 0x00005685u, 0x00005689u, 0x0009004fu, 0x00000013u, 0x0000568bu, 0x0000568au, 0x0000568au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005663u, 0x0000568bu, 0x0003003eu, 0x00004683u, 0x0000568bu, 0x000200f9u, 0x00004976u, 0x000200f8u, 0x00004976u, 0x000700f5u, 0x00000013u, 0x00009fe6u, 0x00009f34u, 0x0000496du, 0x0000568bu, 0x00004977u, 0x000700f5u, 0x00000013u, 0x00009e1au, 0x00009d65u, 0x0000496du, 0x0000565fu, 0x00004977u, 0x000300f7u, 0x00004987u, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004988u, 0x00004987u, 0x000200f8u, 0x00004988u, 0x00050050u, 0x000000efu, 0x0000498bu, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x0000498cu, 0x0000498bu, 0x0003003eu, 0x00006ddeu, 0x00004640u, 0x0003003eu, 0x00006ddfu, 0x00004642u, 0x0003003eu, 0x0000472bu, 0x000021c0u, 0x0003003eu, 0x0000472cu, 0x0000498cu, 0x00050041u, 0x00000007u, 0x00005694u, 0x0000472cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005695u, 0x00005694u, 0x00050084u, 0x00000006u, 0x00005696u, 0x00004642u, 0x00005695u, 0x00050080u, 0x00000006u, 0x00005697u, 0x00004640u, 0x00005696u, 0x0003003eu, 0x0000568cu, 0x00005697u, 0x00050041u, 0x00000007u, 0x00005698u, 0x0000472cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005699u, 0x00005698u, 0x00050084u, 0x00000006u, 0x0000569au, 0x00005699u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000569cu, 0x00005697u, 0x0000569au, 0x0003003eu, 0x0000568cu, 0x0000569cu, 0x000500c7u, 0x00000006u, 0x0000569eu, 0x0000569cu, 0x00000e73u, 0x0003003eu, 0x0000568cu, 0x0000569eu, 0x000500c2u, 0x00000006u, 0x000056a0u, 0x0000569eu, 0x0000022au, 0x0003003eu, 0x0000568du, 0x000056a0u, 0x0004003du, 0x00000006u, 0x000056a2u, 0x00005694u, 0x000500c7u, 0x00000006u, 0x000056a3u, 0x000056a2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000056a4u, 0x000056a3u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000056a6u, 0x000056a0u, 0x000056a4u, 0x0003003eu, 0x0000568du, 0x000056a6u, 0x000500c6u, 0x00000006u, 0x000056a8u, 0x000056a6u, 0x0000045cu, 0x0003003eu, 0x0000568du, 0x000056a8u, 0x00080041u, 0x00000692u, 0x000056abu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000056a8u, 0x0004003du, 0x00000011u, 0x000056acu, 0x000056abu, 0x00040071u, 0x00000006u, 0x000056adu, 0x000056acu, 0x0003003eu, 0x0000568eu, 0x000056adu, 0x000500c2u, 0x00000006u, 0x000056afu, 0x000056adu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000056b0u, 0x000056afu, 0x0004007cu, 0x00000012u, 0x000056b1u, 0x000056b0u, 0x000500c7u, 0x00000006u, 0x000056b3u, 0x000056adu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000056b4u, 0x000056b3u, 0x0004007cu, 0x00000012u, 0x000056b5u, 0x000056b4u, 0x00050050u, 0x000001aeu, 0x000056b6u, 0x000056b1u, 0x000056b5u, 0x0009004fu, 0x00000013u, 0x000056b7u, 0x000056b6u, 0x000056b6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000568fu, 0x000056b7u, 0x0003003eu, 0x0000468bu, 0x000056b7u, 0x000200f9u, 0x00004987u, 0x000200f8u, 0x00004987u, 0x000700f5u, 0x00000013u, 0x0000a0ccu, 0x0000a018u, 0x00004976u, 0x000056b7u, 0x00004988u, 0x000200f9u, 0x0000496cu, 0x000200f8u, 0x0000496cu, 0x000900f5u, 0x00000013u, 0x0000a0cbu, 0x0000a0ccu, 0x00004987u, 0x0000a0ceu, 0x000049b0u, 0x0000a0d0u, 0x000049d3u, 0x000900f5u, 0x00000013u, 0x00009fe4u, 0x00009fe6u, 0x00004987u, 0x00009fe8u, 0x000049b0u, 0x00009feau, 0x000049d3u, 0x000900f5u, 0x00000013u, 0x00009effu, 0x00005633u, 0x00004987u, 0x000056eau, 0x000049b0u, 0x000057a7u, 0x000049d3u, 0x000900f5u, 0x00000013u, 0x00009e18u, 0x00009e1au, 0x00004987u, 0x00009e1cu, 0x000049b0u, 0x00009e1eu, 0x000049d3u, 0x000200f9u, 0x000048acu, 0x000200f8u, 0x000048aeu, 0x000500c3u, 0x00000008u, 0x0000493cu, 0x00009950u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x0000493du, 0x0000493cu, 0x0003003eu, 0x000046f3u, 0x0000493du, 0x00050082u, 0x00000008u, 0x00004941u, 0x0000998eu, 0x00009950u, 0x00050080u, 0x00000008u, 0x00004942u, 0x0000998eu, 0x00004941u, 0x000500c3u, 0x00000008u, 0x00004943u, 0x00004942u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00004944u, 0x00004943u, 0x0003003eu, 0x000046f4u, 0x00004944u, 0x00050050u, 0x000000efu, 0x00004947u, 0x00009950u, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004948u, 0x00004947u, 0x0003003eu, 0x00006da2u, 0x00004640u, 0x0003003eu, 0x00006da3u, 0x00004642u, 0x0003003eu, 0x000046f6u, 0x000021c0u, 0x0003003eu, 0x000046f7u, 0x00004948u, 0x0003003eu, 0x000046f8u, 0x0000493du, 0x00050041u, 0x00000007u, 0x000054d2u, 0x000046f7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000054d3u, 0x000054d2u, 0x00050084u, 0x00000006u, 0x000054d4u, 0x00004642u, 0x000054d3u, 0x00050080u, 0x00000006u, 0x000054d5u, 0x00004640u, 0x000054d4u, 0x0003003eu, 0x000054c4u, 0x000054d5u, 0x00050041u, 0x00000007u, 0x000054d7u, 0x000046f7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000054d8u, 0x000054d7u, 0x00050080u, 0x00000006u, 0x000054d9u, 0x000054d5u, 0x000054d8u, 0x0003003eu, 0x000054c5u, 0x000054d9u, 0x000500c7u, 0x00000006u, 0x000054dbu, 0x000054d9u, 0x00000f2bu, 0x0003003eu, 0x000054c5u, 0x000054dbu, 0x00050084u, 0x00000006u, 0x000054deu, 0x0000493du, 0x00000386u, 0x00050080u, 0x00000006u, 0x000054dfu, 0x000054d5u, 0x000054deu, 0x0003003eu, 0x000054c6u, 0x000054dfu, 0x000500c7u, 0x00000006u, 0x000054e1u, 0x000054dfu, 0x00000f2bu, 0x0003003eu, 0x000054c6u, 0x000054e1u, 0x0003003eu, 0x000054c7u, 0x000054dbu, 0x0004003du, 0x00000006u, 0x000054e4u, 0x000054d2u, 0x000500c7u, 0x00000006u, 0x000054e5u, 0x000054e4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000054e6u, 0x000054e5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000054e8u, 0x000054dbu, 0x000054e6u, 0x0003003eu, 0x000054c7u, 0x000054e8u, 0x000500c6u, 0x00000006u, 0x000054eau, 0x000054e8u, 0x00000464u, 0x0003003eu, 0x000054c7u, 0x000054eau, 0x000500c2u, 0x00000006u, 0x000054ecu, 0x000054e1u, 0x0000022au, 0x0003003eu, 0x000054c8u, 0x000054ecu, 0x0004003du, 0x00000006u, 0x000054eeu, 0x000054d2u, 0x000500c7u, 0x00000006u, 0x000054efu, 0x000054eeu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000054f0u, 0x000054efu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000054f2u, 0x000054ecu, 0x000054f0u, 0x0003003eu, 0x000054c8u, 0x000054f2u, 0x000500c6u, 0x00000006u, 0x000054f4u, 0x000054f2u, 0x0000045cu, 0x0003003eu, 0x000054c8u, 0x000054f4u, 0x000500c5u, 0x00000006u, 0x000054f7u, 0x000054eau, 0x00000f54u, 0x00080041u, 0x00000671u, 0x000054f8u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000054f7u, 0x0004003du, 0x0000000fu, 0x000054f9u, 0x000054f8u, 0x0003003eu, 0x000054c9u, 0x000054f9u, 0x00080041u, 0x00000692u, 0x000054fcu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000054f4u, 0x0004003du, 0x00000011u, 0x000054fdu, 0x000054fcu, 0x0003003eu, 0x000054cau, 0x000054fdu, 0x000500c2u, 0x00000011u, 0x000054ffu, 0x000054fdu, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x00005500u, 0x000054ffu, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005501u, 0x00005500u, 0x0003003eu, 0x000054cbu, 0x00005501u, 0x000500c2u, 0x00000011u, 0x00005503u, 0x000054fdu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00005504u, 0x00005503u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005505u, 0x00005504u, 0x0003003eu, 0x000054ccu, 0x00005505u, 0x00040071u, 0x00000011u, 0x00005507u, 0x00005501u, 0x0004007cu, 0x00000012u, 0x00005508u, 0x00005507u, 0x00050082u, 0x00000012u, 0x00005509u, 0x00005508u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x0000550bu, 0x00005505u, 0x0004007cu, 0x00000012u, 0x0000550cu, 0x0000550bu, 0x00050082u, 0x00000012u, 0x0000550du, 0x0000550cu, 0x000010bdu, 0x00040071u, 0x00000011u, 0x0000550fu, 0x000054f9u, 0x0004007cu, 0x00000012u, 0x00005510u, 0x0000550fu, 0x00070050u, 0x00000013u, 0x00005514u, 0x00005509u, 0x0000550du, 0x00005510u, 0x00005510u, 0x0003003eu, 0x000054cdu, 0x00005514u, 0x0003003eu, 0x00004673u, 0x00005514u, 0x000300f7u, 0x0000494eu, 0x00000000u, 0x000400fau, 0x000021d7u, 0x0000494fu, 0x0000494eu, 0x000200f8u, 0x0000494fu, 0x00050050u, 0x000000efu, 0x00004952u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004953u, 0x00004952u, 0x0003003eu, 0x00006da6u, 0x00004640u, 0x0003003eu, 0x00006da7u, 0x00004642u, 0x0003003eu, 0x000046fau, 0x000021c0u, 0x0003003eu, 0x000046fbu, 0x00004953u, 0x0003003eu, 0x000046fcu, 0x00004944u, 0x00050041u, 0x00000007u, 0x00005523u, 0x000046fbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005524u, 0x00005523u, 0x00050084u, 0x00000006u, 0x00005525u, 0x00004642u, 0x00005524u, 0x00050080u, 0x00000006u, 0x00005526u, 0x00004640u, 0x00005525u, 0x0003003eu, 0x00005515u, 0x00005526u, 0x00050041u, 0x00000007u, 0x00005528u, 0x000046fbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005529u, 0x00005528u, 0x00050080u, 0x00000006u, 0x0000552au, 0x00005526u, 0x00005529u, 0x0003003eu, 0x00005516u, 0x0000552au, 0x000500c7u, 0x00000006u, 0x0000552cu, 0x0000552au, 0x00000f2bu, 0x0003003eu, 0x00005516u, 0x0000552cu, 0x00050084u, 0x00000006u, 0x0000552fu, 0x00004944u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005530u, 0x00005526u, 0x0000552fu, 0x0003003eu, 0x00005517u, 0x00005530u, 0x000500c7u, 0x00000006u, 0x00005532u, 0x00005530u, 0x00000f2bu, 0x0003003eu, 0x00005517u, 0x00005532u, 0x0003003eu, 0x00005518u, 0x0000552cu, 0x0004003du, 0x00000006u, 0x00005535u, 0x00005523u, 0x000500c7u, 0x00000006u, 0x00005536u, 0x00005535u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005537u, 0x00005536u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005539u, 0x0000552cu, 0x00005537u, 0x0003003eu, 0x00005518u, 0x00005539u, 0x000500c6u, 0x00000006u, 0x0000553bu, 0x00005539u, 0x00000464u, 0x0003003eu, 0x00005518u, 0x0000553bu, 0x000500c2u, 0x00000006u, 0x0000553du, 0x00005532u, 0x0000022au, 0x0003003eu, 0x00005519u, 0x0000553du, 0x0004003du, 0x00000006u, 0x0000553fu, 0x00005523u, 0x000500c7u, 0x00000006u, 0x00005540u, 0x0000553fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005541u, 0x00005540u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005543u, 0x0000553du, 0x00005541u, 0x0003003eu, 0x00005519u, 0x00005543u, 0x000500c6u, 0x00000006u, 0x00005545u, 0x00005543u, 0x0000045cu, 0x0003003eu, 0x00005519u, 0x00005545u, 0x000500c5u, 0x00000006u, 0x00005548u, 0x0000553bu, 0x00000f54u, 0x00080041u, 0x00000671u, 0x00005549u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005548u, 0x0004003du, 0x0000000fu, 0x0000554au, 0x00005549u, 0x0003003eu, 0x0000551au, 0x0000554au, 0x00080041u, 0x00000692u, 0x0000554du, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005545u, 0x0004003du, 0x00000011u, 0x0000554eu, 0x0000554du, 0x0003003eu, 0x0000551bu, 0x0000554eu, 0x000500c2u, 0x00000011u, 0x00005550u, 0x0000554eu, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x00005551u, 0x00005550u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005552u, 0x00005551u, 0x0003003eu, 0x0000551cu, 0x00005552u, 0x000500c2u, 0x00000011u, 0x00005554u, 0x0000554eu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x00005555u, 0x00005554u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00005556u, 0x00005555u, 0x0003003eu, 0x0000551du, 0x00005556u, 0x00040071u, 0x00000011u, 0x00005558u, 0x00005552u, 0x0004007cu, 0x00000012u, 0x00005559u, 0x00005558u, 0x00050082u, 0x00000012u, 0x0000555au, 0x00005559u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x0000555cu, 0x00005556u, 0x0004007cu, 0x00000012u, 0x0000555du, 0x0000555cu, 0x00050082u, 0x00000012u, 0x0000555eu, 0x0000555du, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00005560u, 0x0000554au, 0x0004007cu, 0x00000012u, 0x00005561u, 0x00005560u, 0x00070050u, 0x00000013u, 0x00005565u, 0x0000555au, 0x0000555eu, 0x00005561u, 0x00005561u, 0x0003003eu, 0x0000551eu, 0x00005565u, 0x0003003eu, 0x0000467bu, 0x00005565u, 0x00050050u, 0x000000efu, 0x0000495au, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x0000495bu, 0x0000495au, 0x0003003eu, 0x00006daau, 0x00004640u, 0x0003003eu, 0x00006dabu, 0x00004642u, 0x0003003eu, 0x000046feu, 0x000021c0u, 0x0003003eu, 0x000046ffu, 0x0000495bu, 0x0003003eu, 0x00004700u, 0x0000493du, 0x00050041u, 0x00000007u, 0x00005574u, 0x000046ffu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005575u, 0x00005574u, 0x00050084u, 0x00000006u, 0x00005576u, 0x00004642u, 0x00005575u, 0x00050080u, 0x00000006u, 0x00005577u, 0x00004640u, 0x00005576u, 0x0003003eu, 0x00005566u, 0x00005577u, 0x00050041u, 0x00000007u, 0x00005579u, 0x000046ffu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000557au, 0x00005579u, 0x00050080u, 0x00000006u, 0x0000557bu, 0x00005577u, 0x0000557au, 0x0003003eu, 0x00005567u, 0x0000557bu, 0x000500c7u, 0x00000006u, 0x0000557du, 0x0000557bu, 0x00000f2bu, 0x0003003eu, 0x00005567u, 0x0000557du, 0x00050080u, 0x00000006u, 0x00005581u, 0x00005577u, 0x000054deu, 0x0003003eu, 0x00005568u, 0x00005581u, 0x000500c7u, 0x00000006u, 0x00005583u, 0x00005581u, 0x00000f2bu, 0x0003003eu, 0x00005568u, 0x00005583u, 0x0003003eu, 0x00005569u, 0x0000557du, 0x0004003du, 0x00000006u, 0x00005586u, 0x00005574u, 0x000500c7u, 0x00000006u, 0x00005587u, 0x00005586u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005588u, 0x00005587u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000558au, 0x0000557du, 0x00005588u, 0x0003003eu, 0x00005569u, 0x0000558au, 0x000500c6u, 0x00000006u, 0x0000558cu, 0x0000558au, 0x00000464u, 0x0003003eu, 0x00005569u, 0x0000558cu, 0x000500c2u, 0x00000006u, 0x0000558eu, 0x00005583u, 0x0000022au, 0x0003003eu, 0x0000556au, 0x0000558eu, 0x0004003du, 0x00000006u, 0x00005590u, 0x00005574u, 0x000500c7u, 0x00000006u, 0x00005591u, 0x00005590u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005592u, 0x00005591u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005594u, 0x0000558eu, 0x00005592u, 0x0003003eu, 0x0000556au, 0x00005594u, 0x000500c6u, 0x00000006u, 0x00005596u, 0x00005594u, 0x0000045cu, 0x0003003eu, 0x0000556au, 0x00005596u, 0x000500c5u, 0x00000006u, 0x00005599u, 0x0000558cu, 0x00000f54u, 0x00080041u, 0x00000671u, 0x0000559au, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005599u, 0x0004003du, 0x0000000fu, 0x0000559bu, 0x0000559au, 0x0003003eu, 0x0000556bu, 0x0000559bu, 0x00080041u, 0x00000692u, 0x0000559eu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005596u, 0x0004003du, 0x00000011u, 0x0000559fu, 0x0000559eu, 0x0003003eu, 0x0000556cu, 0x0000559fu, 0x000500c2u, 0x00000011u, 0x000055a1u, 0x0000559fu, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x000055a2u, 0x000055a1u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000055a3u, 0x000055a2u, 0x0003003eu, 0x0000556du, 0x000055a3u, 0x000500c2u, 0x00000011u, 0x000055a5u, 0x0000559fu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x000055a6u, 0x000055a5u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000055a7u, 0x000055a6u, 0x0003003eu, 0x0000556eu, 0x000055a7u, 0x00040071u, 0x00000011u, 0x000055a9u, 0x000055a3u, 0x0004007cu, 0x00000012u, 0x000055aau, 0x000055a9u, 0x00050082u, 0x00000012u, 0x000055abu, 0x000055aau, 0x000010bdu, 0x00040071u, 0x00000011u, 0x000055adu, 0x000055a7u, 0x0004007cu, 0x00000012u, 0x000055aeu, 0x000055adu, 0x00050082u, 0x00000012u, 0x000055afu, 0x000055aeu, 0x000010bdu, 0x00040071u, 0x00000011u, 0x000055b1u, 0x0000559bu, 0x0004007cu, 0x00000012u, 0x000055b2u, 0x000055b1u, 0x00070050u, 0x00000013u, 0x000055b6u, 0x000055abu, 0x000055afu, 0x000055b2u, 0x000055b2u, 0x0003003eu, 0x0000556fu, 0x000055b6u, 0x0003003eu, 0x00004683u, 0x000055b6u, 0x00050050u, 0x000000efu, 0x00004962u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004963u, 0x00004962u, 0x0003003eu, 0x00006daeu, 0x00004640u, 0x0003003eu, 0x00006dafu, 0x00004642u, 0x0003003eu, 0x00004702u, 0x000021c0u, 0x0003003eu, 0x00004703u, 0x00004963u, 0x0003003eu, 0x00004704u, 0x00004944u, 0x00050041u, 0x00000007u, 0x000055c5u, 0x00004703u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000055c6u, 0x000055c5u, 0x00050084u, 0x00000006u, 0x000055c7u, 0x00004642u, 0x000055c6u, 0x00050080u, 0x00000006u, 0x000055c8u, 0x00004640u, 0x000055c7u, 0x0003003eu, 0x000055b7u, 0x000055c8u, 0x00050041u, 0x00000007u, 0x000055cau, 0x00004703u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000055cbu, 0x000055cau, 0x00050080u, 0x00000006u, 0x000055ccu, 0x000055c8u, 0x000055cbu, 0x0003003eu, 0x000055b8u, 0x000055ccu, 0x000500c7u, 0x00000006u, 0x000055ceu, 0x000055ccu, 0x00000f2bu, 0x0003003eu, 0x000055b8u, 0x000055ceu, 0x00050080u, 0x00000006u, 0x000055d2u, 0x000055c8u, 0x0000552fu, 0x0003003eu, 0x000055b9u, 0x000055d2u, 0x000500c7u, 0x00000006u, 0x000055d4u, 0x000055d2u, 0x00000f2bu, 0x0003003eu, 0x000055b9u, 0x000055d4u, 0x0003003eu, 0x000055bau, 0x000055ceu, 0x0004003du, 0x00000006u, 0x000055d7u, 0x000055c5u, 0x000500c7u, 0x00000006u, 0x000055d8u, 0x000055d7u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000055d9u, 0x000055d8u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000055dbu, 0x000055ceu, 0x000055d9u, 0x0003003eu, 0x000055bau, 0x000055dbu, 0x000500c6u, 0x00000006u, 0x000055ddu, 0x000055dbu, 0x00000464u, 0x0003003eu, 0x000055bau, 0x000055ddu, 0x000500c2u, 0x00000006u, 0x000055dfu, 0x000055d4u, 0x0000022au, 0x0003003eu, 0x000055bbu, 0x000055dfu, 0x0004003du, 0x00000006u, 0x000055e1u, 0x000055c5u, 0x000500c7u, 0x00000006u, 0x000055e2u, 0x000055e1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000055e3u, 0x000055e2u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000055e5u, 0x000055dfu, 0x000055e3u, 0x0003003eu, 0x000055bbu, 0x000055e5u, 0x000500c6u, 0x00000006u, 0x000055e7u, 0x000055e5u, 0x0000045cu, 0x0003003eu, 0x000055bbu, 0x000055e7u, 0x000500c5u, 0x00000006u, 0x000055eau, 0x000055ddu, 0x00000f54u, 0x00080041u, 0x00000671u, 0x000055ebu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000055eau, 0x0004003du, 0x0000000fu, 0x000055ecu, 0x000055ebu, 0x0003003eu, 0x000055bcu, 0x000055ecu, 0x00080041u, 0x00000692u, 0x000055efu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000055e7u, 0x0004003du, 0x00000011u, 0x000055f0u, 0x000055efu, 0x0003003eu, 0x000055bdu, 0x000055f0u, 0x000500c2u, 0x00000011u, 0x000055f2u, 0x000055f0u, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x000055f3u, 0x000055f2u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000055f4u, 0x000055f3u, 0x0003003eu, 0x000055beu, 0x000055f4u, 0x000500c2u, 0x00000011u, 0x000055f6u, 0x000055f0u, 0x0000021au, 0x000500c7u, 0x00000011u, 0x000055f7u, 0x000055f6u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000055f8u, 0x000055f7u, 0x0003003eu, 0x000055bfu, 0x000055f8u, 0x00040071u, 0x00000011u, 0x000055fau, 0x000055f4u, 0x0004007cu, 0x00000012u, 0x000055fbu, 0x000055fau, 0x00050082u, 0x00000012u, 0x000055fcu, 0x000055fbu, 0x000010bdu, 0x00040071u, 0x00000011u, 0x000055feu, 0x000055f8u, 0x0004007cu, 0x00000012u, 0x000055ffu, 0x000055feu, 0x00050082u, 0x00000012u, 0x00005600u, 0x000055ffu, 0x000010bdu, 0x00040071u, 0x00000011u, 0x00005602u, 0x000055ecu, 0x0004007cu, 0x00000012u, 0x00005603u, 0x00005602u, 0x00070050u, 0x00000013u, 0x00005607u, 0x000055fcu, 0x00005600u, 0x00005603u, 0x00005603u, 0x0003003eu, 0x000055c0u, 0x00005607u, 0x0003003eu, 0x0000468bu, 0x00005607u, 0x000200f9u, 0x0000494eu, 0x000200f8u, 0x0000494eu, 0x000700f5u, 0x00000013u, 0x0000a0cau, 0x0000a018u, 0x000048aeu, 0x00005607u, 0x0000494fu, 0x000700f5u, 0x00000013u, 0x00009fe3u, 0x00009f34u, 0x000048aeu, 0x000055b6u, 0x0000494fu, 0x000700f5u, 0x00000013u, 0x00009e17u, 0x00009d65u, 0x000048aeu, 0x00005565u, 0x0000494fu, 0x000200f9u, 0x000048acu, 0x000200f8u, 0x000048adu, 0x00040071u, 0x00000006u, 0x000048b4u, 0x00004646u, 0x0004007cu, 0x00000008u, 0x000048b5u, 0x000048b4u, 0x000300f7u, 0x000048b6u, 0x00000000u, 0x000b00fbu, 0x000048b5u, 0x000048b6u, 0x00000000u, 0x000048b7u, 0x00000001u, 0x000048b8u, 0x00000002u, 0x000048b9u, 0x00000003u, 0x000048bau, 0x000200f8u, 0x000048bau, 0x0004007cu, 0x000000b0u, 0x0000491cu, 0x000099d9u, 0x0003003eu, 0x00006d92u, 0x00004640u, 0x0003003eu, 0x00006d93u, 0x00004642u, 0x0003003eu, 0x000046e8u, 0x000021c0u, 0x0003003eu, 0x000046e9u, 0x0000491cu, 0x00050041u, 0x00000007u, 0x000053e5u, 0x000046e9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000053e6u, 0x000053e5u, 0x00050084u, 0x00000006u, 0x000053e7u, 0x00004642u, 0x000053e6u, 0x00050080u, 0x00000006u, 0x000053e8u, 0x00004640u, 0x000053e7u, 0x0003003eu, 0x000053dcu, 0x000053e8u, 0x00050041u, 0x00000007u, 0x000053e9u, 0x000046e9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000053eau, 0x000053e9u, 0x00050084u, 0x00000006u, 0x000053ebu, 0x000053eau, 0x00000386u, 0x00050080u, 0x00000006u, 0x000053edu, 0x000053e8u, 0x000053ebu, 0x0003003eu, 0x000053dcu, 0x000053edu, 0x000500c7u, 0x00000006u, 0x000053efu, 0x000053edu, 0x00000f2bu, 0x0003003eu, 0x000053dcu, 0x000053efu, 0x000500c2u, 0x00000006u, 0x000053f1u, 0x000053efu, 0x0000022au, 0x0003003eu, 0x000053ddu, 0x000053f1u, 0x0004003du, 0x00000006u, 0x000053f3u, 0x000053e5u, 0x000500c7u, 0x00000006u, 0x000053f4u, 0x000053f3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000053f5u, 0x000053f4u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000053f7u, 0x000053f1u, 0x000053f5u, 0x0003003eu, 0x000053ddu, 0x000053f7u, 0x000500c6u, 0x00000006u, 0x000053f9u, 0x000053f7u, 0x0000045cu, 0x0003003eu, 0x000053ddu, 0x000053f9u, 0x00080041u, 0x00000692u, 0x000053fcu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000053f9u, 0x0004003du, 0x00000011u, 0x000053fdu, 0x000053fcu, 0x00040071u, 0x00000006u, 0x000053feu, 0x000053fdu, 0x0003003eu, 0x000053deu, 0x000053feu, 0x000500c5u, 0x00000006u, 0x00005401u, 0x000053f9u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x00005402u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005401u, 0x0004003du, 0x00000011u, 0x00005403u, 0x00005402u, 0x00040071u, 0x00000006u, 0x00005404u, 0x00005403u, 0x0003003eu, 0x000053dfu, 0x00005404u, 0x000500c2u, 0x00000006u, 0x00005406u, 0x000053feu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005407u, 0x00005406u, 0x0004007cu, 0x00000012u, 0x00005408u, 0x00005407u, 0x000500c7u, 0x00000006u, 0x0000540au, 0x000053feu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000540bu, 0x0000540au, 0x0004007cu, 0x00000012u, 0x0000540cu, 0x0000540bu, 0x000500c2u, 0x00000006u, 0x0000540eu, 0x00005404u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000540fu, 0x0000540eu, 0x0004007cu, 0x00000012u, 0x00005410u, 0x0000540fu, 0x000500c7u, 0x00000006u, 0x00005412u, 0x00005404u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005413u, 0x00005412u, 0x0004007cu, 0x00000012u, 0x00005414u, 0x00005413u, 0x00070050u, 0x00000013u, 0x00005415u, 0x00005408u, 0x0000540cu, 0x00005410u, 0x00005414u, 0x0003003eu, 0x000053e0u, 0x00005415u, 0x0003003eu, 0x00004673u, 0x00005415u, 0x000300f7u, 0x00004921u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004922u, 0x00004921u, 0x000200f8u, 0x00004922u, 0x00050050u, 0x000000efu, 0x00004925u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004926u, 0x00004925u, 0x0003003eu, 0x00006d96u, 0x00004640u, 0x0003003eu, 0x00006d97u, 0x00004642u, 0x0003003eu, 0x000046ebu, 0x000021c0u, 0x0003003eu, 0x000046ecu, 0x00004926u, 0x00050041u, 0x00000007u, 0x0000541fu, 0x000046ecu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005420u, 0x0000541fu, 0x00050084u, 0x00000006u, 0x00005421u, 0x00004642u, 0x00005420u, 0x00050080u, 0x00000006u, 0x00005422u, 0x00004640u, 0x00005421u, 0x0003003eu, 0x00005416u, 0x00005422u, 0x00050041u, 0x00000007u, 0x00005423u, 0x000046ecu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005424u, 0x00005423u, 0x00050084u, 0x00000006u, 0x00005425u, 0x00005424u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005427u, 0x00005422u, 0x00005425u, 0x0003003eu, 0x00005416u, 0x00005427u, 0x000500c7u, 0x00000006u, 0x00005429u, 0x00005427u, 0x00000f2bu, 0x0003003eu, 0x00005416u, 0x00005429u, 0x000500c2u, 0x00000006u, 0x0000542bu, 0x00005429u, 0x0000022au, 0x0003003eu, 0x00005417u, 0x0000542bu, 0x0004003du, 0x00000006u, 0x0000542du, 0x0000541fu, 0x000500c7u, 0x00000006u, 0x0000542eu, 0x0000542du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000542fu, 0x0000542eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005431u, 0x0000542bu, 0x0000542fu, 0x0003003eu, 0x00005417u, 0x00005431u, 0x000500c6u, 0x00000006u, 0x00005433u, 0x00005431u, 0x0000045cu, 0x0003003eu, 0x00005417u, 0x00005433u, 0x00080041u, 0x00000692u, 0x00005436u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005433u, 0x0004003du, 0x00000011u, 0x00005437u, 0x00005436u, 0x00040071u, 0x00000006u, 0x00005438u, 0x00005437u, 0x0003003eu, 0x00005418u, 0x00005438u, 0x000500c5u, 0x00000006u, 0x0000543bu, 0x00005433u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x0000543cu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000543bu, 0x0004003du, 0x00000011u, 0x0000543du, 0x0000543cu, 0x00040071u, 0x00000006u, 0x0000543eu, 0x0000543du, 0x0003003eu, 0x00005419u, 0x0000543eu, 0x000500c2u, 0x00000006u, 0x00005440u, 0x00005438u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005441u, 0x00005440u, 0x0004007cu, 0x00000012u, 0x00005442u, 0x00005441u, 0x000500c7u, 0x00000006u, 0x00005444u, 0x00005438u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005445u, 0x00005444u, 0x0004007cu, 0x00000012u, 0x00005446u, 0x00005445u, 0x000500c2u, 0x00000006u, 0x00005448u, 0x0000543eu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005449u, 0x00005448u, 0x0004007cu, 0x00000012u, 0x0000544au, 0x00005449u, 0x000500c7u, 0x00000006u, 0x0000544cu, 0x0000543eu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000544du, 0x0000544cu, 0x0004007cu, 0x00000012u, 0x0000544eu, 0x0000544du, 0x00070050u, 0x00000013u, 0x0000544fu, 0x00005442u, 0x00005446u, 0x0000544au, 0x0000544eu, 0x0003003eu, 0x0000541au, 0x0000544fu, 0x0003003eu, 0x0000467bu, 0x0000544fu, 0x00050050u, 0x000000efu, 0x0000492cu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x0000492du, 0x0000492cu, 0x0003003eu, 0x00006d9au, 0x00004640u, 0x0003003eu, 0x00006d9bu, 0x00004642u, 0x0003003eu, 0x000046eeu, 0x000021c0u, 0x0003003eu, 0x000046efu, 0x0000492du, 0x00050041u, 0x00000007u, 0x00005459u, 0x000046efu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000545au, 0x00005459u, 0x00050084u, 0x00000006u, 0x0000545bu, 0x00004642u, 0x0000545au, 0x00050080u, 0x00000006u, 0x0000545cu, 0x00004640u, 0x0000545bu, 0x0003003eu, 0x00005450u, 0x0000545cu, 0x00050041u, 0x00000007u, 0x0000545du, 0x000046efu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000545eu, 0x0000545du, 0x00050084u, 0x00000006u, 0x0000545fu, 0x0000545eu, 0x00000386u, 0x00050080u, 0x00000006u, 0x00005461u, 0x0000545cu, 0x0000545fu, 0x0003003eu, 0x00005450u, 0x00005461u, 0x000500c7u, 0x00000006u, 0x00005463u, 0x00005461u, 0x00000f2bu, 0x0003003eu, 0x00005450u, 0x00005463u, 0x000500c2u, 0x00000006u, 0x00005465u, 0x00005463u, 0x0000022au, 0x0003003eu, 0x00005451u, 0x00005465u, 0x0004003du, 0x00000006u, 0x00005467u, 0x00005459u, 0x000500c7u, 0x00000006u, 0x00005468u, 0x00005467u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005469u, 0x00005468u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000546bu, 0x00005465u, 0x00005469u, 0x0003003eu, 0x00005451u, 0x0000546bu, 0x000500c6u, 0x00000006u, 0x0000546du, 0x0000546bu, 0x0000045cu, 0x0003003eu, 0x00005451u, 0x0000546du, 0x00080041u, 0x00000692u, 0x00005470u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000546du, 0x0004003du, 0x00000011u, 0x00005471u, 0x00005470u, 0x00040071u, 0x00000006u, 0x00005472u, 0x00005471u, 0x0003003eu, 0x00005452u, 0x00005472u, 0x000500c5u, 0x00000006u, 0x00005475u, 0x0000546du, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x00005476u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005475u, 0x0004003du, 0x00000011u, 0x00005477u, 0x00005476u, 0x00040071u, 0x00000006u, 0x00005478u, 0x00005477u, 0x0003003eu, 0x00005453u, 0x00005478u, 0x000500c2u, 0x00000006u, 0x0000547au, 0x00005472u, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000547bu, 0x0000547au, 0x0004007cu, 0x00000012u, 0x0000547cu, 0x0000547bu, 0x000500c7u, 0x00000006u, 0x0000547eu, 0x00005472u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000547fu, 0x0000547eu, 0x0004007cu, 0x00000012u, 0x00005480u, 0x0000547fu, 0x000500c2u, 0x00000006u, 0x00005482u, 0x00005478u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00005483u, 0x00005482u, 0x0004007cu, 0x00000012u, 0x00005484u, 0x00005483u, 0x000500c7u, 0x00000006u, 0x00005486u, 0x00005478u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00005487u, 0x00005486u, 0x0004007cu, 0x00000012u, 0x00005488u, 0x00005487u, 0x00070050u, 0x00000013u, 0x00005489u, 0x0000547cu, 0x00005480u, 0x00005484u, 0x00005488u, 0x0003003eu, 0x00005454u, 0x00005489u, 0x0003003eu, 0x00004683u, 0x00005489u, 0x000200f9u, 0x00004921u, 0x000200f8u, 0x00004921u, 0x000700f5u, 0x00000013u, 0x00009fe2u, 0x00009f34u, 0x000048bau, 0x00005489u, 0x00004922u, 0x000700f5u, 0x00000013u, 0x00009e16u, 0x00009d65u, 0x000048bau, 0x0000544fu, 0x00004922u, 0x000300f7u, 0x00004932u, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004933u, 0x00004932u, 0x000200f8u, 0x00004933u, 0x00050050u, 0x000000efu, 0x00004936u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004937u, 0x00004936u, 0x0003003eu, 0x00006d9eu, 0x00004640u, 0x0003003eu, 0x00006d9fu, 0x00004642u, 0x0003003eu, 0x000046f1u, 0x000021c0u, 0x0003003eu, 0x000046f2u, 0x00004937u, 0x00050041u, 0x00000007u, 0x00005493u, 0x000046f2u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005494u, 0x00005493u, 0x00050084u, 0x00000006u, 0x00005495u, 0x00004642u, 0x00005494u, 0x00050080u, 0x00000006u, 0x00005496u, 0x00004640u, 0x00005495u, 0x0003003eu, 0x0000548au, 0x00005496u, 0x00050041u, 0x00000007u, 0x00005497u, 0x000046f2u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005498u, 0x00005497u, 0x00050084u, 0x00000006u, 0x00005499u, 0x00005498u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000549bu, 0x00005496u, 0x00005499u, 0x0003003eu, 0x0000548au, 0x0000549bu, 0x000500c7u, 0x00000006u, 0x0000549du, 0x0000549bu, 0x00000f2bu, 0x0003003eu, 0x0000548au, 0x0000549du, 0x000500c2u, 0x00000006u, 0x0000549fu, 0x0000549du, 0x0000022au, 0x0003003eu, 0x0000548bu, 0x0000549fu, 0x0004003du, 0x00000006u, 0x000054a1u, 0x00005493u, 0x000500c7u, 0x00000006u, 0x000054a2u, 0x000054a1u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000054a3u, 0x000054a2u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000054a5u, 0x0000549fu, 0x000054a3u, 0x0003003eu, 0x0000548bu, 0x000054a5u, 0x000500c6u, 0x00000006u, 0x000054a7u, 0x000054a5u, 0x0000045cu, 0x0003003eu, 0x0000548bu, 0x000054a7u, 0x00080041u, 0x00000692u, 0x000054aau, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000054a7u, 0x0004003du, 0x00000011u, 0x000054abu, 0x000054aau, 0x00040071u, 0x00000006u, 0x000054acu, 0x000054abu, 0x0003003eu, 0x0000548cu, 0x000054acu, 0x000500c5u, 0x00000006u, 0x000054afu, 0x000054a7u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x000054b0u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000054afu, 0x0004003du, 0x00000011u, 0x000054b1u, 0x000054b0u, 0x00040071u, 0x00000006u, 0x000054b2u, 0x000054b1u, 0x0003003eu, 0x0000548du, 0x000054b2u, 0x000500c2u, 0x00000006u, 0x000054b4u, 0x000054acu, 0x0000025du, 0x00040071u, 0x00000011u, 0x000054b5u, 0x000054b4u, 0x0004007cu, 0x00000012u, 0x000054b6u, 0x000054b5u, 0x000500c7u, 0x00000006u, 0x000054b8u, 0x000054acu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000054b9u, 0x000054b8u, 0x0004007cu, 0x00000012u, 0x000054bau, 0x000054b9u, 0x000500c2u, 0x00000006u, 0x000054bcu, 0x000054b2u, 0x0000025du, 0x00040071u, 0x00000011u, 0x000054bdu, 0x000054bcu, 0x0004007cu, 0x00000012u, 0x000054beu, 0x000054bdu, 0x000500c7u, 0x00000006u, 0x000054c0u, 0x000054b2u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x000054c1u, 0x000054c0u, 0x0004007cu, 0x00000012u, 0x000054c2u, 0x000054c1u, 0x00070050u, 0x00000013u, 0x000054c3u, 0x000054b6u, 0x000054bau, 0x000054beu, 0x000054c2u, 0x0003003eu, 0x0000548eu, 0x000054c3u, 0x0003003eu, 0x0000468bu, 0x000054c3u, 0x000200f9u, 0x00004932u, 0x000200f8u, 0x00004932u, 0x000700f5u, 0x00000013u, 0x0000a0c8u, 0x0000a018u, 0x00004921u, 0x000054c3u, 0x00004933u, 0x000200f9u, 0x000048b6u, 0x000200f8u, 0x000048b9u, 0x0004007cu, 0x000000b0u, 0x000048fcu, 0x000099d9u, 0x0003003eu, 0x00006d82u, 0x00004640u, 0x0003003eu, 0x00006d83u, 0x00004642u, 0x0003003eu, 0x000046dcu, 0x000021c0u, 0x0003003eu, 0x000046ddu, 0x000048fcu, 0x00050041u, 0x00000007u, 0x000052e1u, 0x000046ddu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000052e2u, 0x000052e1u, 0x00050084u, 0x00000006u, 0x000052e3u, 0x00004642u, 0x000052e2u, 0x00050080u, 0x00000006u, 0x000052e4u, 0x00004640u, 0x000052e3u, 0x0003003eu, 0x000052d8u, 0x000052e4u, 0x00050041u, 0x00000007u, 0x000052e5u, 0x000046ddu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000052e6u, 0x000052e5u, 0x00050084u, 0x00000006u, 0x000052e7u, 0x000052e6u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000052e9u, 0x000052e4u, 0x000052e7u, 0x0003003eu, 0x000052d8u, 0x000052e9u, 0x000500c7u, 0x00000006u, 0x000052ebu, 0x000052e9u, 0x00000e73u, 0x0003003eu, 0x000052d8u, 0x000052ebu, 0x000500c2u, 0x00000006u, 0x000052edu, 0x000052ebu, 0x0000022au, 0x0003003eu, 0x000052d9u, 0x000052edu, 0x0004003du, 0x00000006u, 0x000052efu, 0x000052e1u, 0x000500c7u, 0x00000006u, 0x000052f0u, 0x000052efu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000052f1u, 0x000052f0u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000052f3u, 0x000052edu, 0x000052f1u, 0x0003003eu, 0x000052d9u, 0x000052f3u, 0x000500c6u, 0x00000006u, 0x000052f5u, 0x000052f3u, 0x0000045cu, 0x0003003eu, 0x000052d9u, 0x000052f5u, 0x00080041u, 0x00000692u, 0x000052f8u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000052f5u, 0x0004003du, 0x00000011u, 0x000052f9u, 0x000052f8u, 0x00040071u, 0x00000006u, 0x000052fau, 0x000052f9u, 0x0003003eu, 0x000052dau, 0x000052fau, 0x0003003eu, 0x000052dbu, 0x000052fau, 0x00060050u, 0x0000030cu, 0x00005301u, 0x000052fau, 0x000052fau, 0x000052fau, 0x000500c2u, 0x0000030cu, 0x00005302u, 0x00005301u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00005304u, 0x00005302u, 0x0000f3a8u, 0x0003003eu, 0x000052fdu, 0x00005304u, 0x000500c4u, 0x0000030cu, 0x00005307u, 0x00005304u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000530au, 0x00005304u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000530bu, 0x00005307u, 0x0000530au, 0x0003003eu, 0x000052fdu, 0x0000530bu, 0x000500c7u, 0x00000006u, 0x0000530du, 0x000052fau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000530eu, 0x0000530du, 0x000006c3u, 0x0003003eu, 0x000052feu, 0x0000530eu, 0x00040071u, 0x000004bau, 0x00005310u, 0x0000530bu, 0x0004007cu, 0x000004b6u, 0x00005311u, 0x00005310u, 0x00040071u, 0x00000011u, 0x00005313u, 0x0000530eu, 0x0004007cu, 0x00000012u, 0x00005314u, 0x00005313u, 0x00050051u, 0x00000012u, 0x00005315u, 0x00005311u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005316u, 0x00005311u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005317u, 0x00005311u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00005318u, 0x00005315u, 0x00005316u, 0x00005317u, 0x00005314u, 0x0003003eu, 0x000052ffu, 0x00005318u, 0x0003003eu, 0x000052dcu, 0x00005318u, 0x0003003eu, 0x00004673u, 0x00005318u, 0x000300f7u, 0x00004901u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004902u, 0x00004901u, 0x000200f8u, 0x00004902u, 0x00050050u, 0x000000efu, 0x00004905u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004906u, 0x00004905u, 0x0003003eu, 0x00006d86u, 0x00004640u, 0x0003003eu, 0x00006d87u, 0x00004642u, 0x0003003eu, 0x000046dfu, 0x000021c0u, 0x0003003eu, 0x000046e0u, 0x00004906u, 0x00050041u, 0x00000007u, 0x00005322u, 0x000046e0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005323u, 0x00005322u, 0x00050084u, 0x00000006u, 0x00005324u, 0x00004642u, 0x00005323u, 0x00050080u, 0x00000006u, 0x00005325u, 0x00004640u, 0x00005324u, 0x0003003eu, 0x00005319u, 0x00005325u, 0x00050041u, 0x00000007u, 0x00005326u, 0x000046e0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005327u, 0x00005326u, 0x00050084u, 0x00000006u, 0x00005328u, 0x00005327u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000532au, 0x00005325u, 0x00005328u, 0x0003003eu, 0x00005319u, 0x0000532au, 0x000500c7u, 0x00000006u, 0x0000532cu, 0x0000532au, 0x00000e73u, 0x0003003eu, 0x00005319u, 0x0000532cu, 0x000500c2u, 0x00000006u, 0x0000532eu, 0x0000532cu, 0x0000022au, 0x0003003eu, 0x0000531au, 0x0000532eu, 0x0004003du, 0x00000006u, 0x00005330u, 0x00005322u, 0x000500c7u, 0x00000006u, 0x00005331u, 0x00005330u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005332u, 0x00005331u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005334u, 0x0000532eu, 0x00005332u, 0x0003003eu, 0x0000531au, 0x00005334u, 0x000500c6u, 0x00000006u, 0x00005336u, 0x00005334u, 0x0000045cu, 0x0003003eu, 0x0000531au, 0x00005336u, 0x00080041u, 0x00000692u, 0x00005339u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005336u, 0x0004003du, 0x00000011u, 0x0000533au, 0x00005339u, 0x00040071u, 0x00000006u, 0x0000533bu, 0x0000533au, 0x0003003eu, 0x0000531bu, 0x0000533bu, 0x0003003eu, 0x0000531cu, 0x0000533bu, 0x00060050u, 0x0000030cu, 0x00005342u, 0x0000533bu, 0x0000533bu, 0x0000533bu, 0x000500c2u, 0x0000030cu, 0x00005343u, 0x00005342u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00005345u, 0x00005343u, 0x0000f3a8u, 0x0003003eu, 0x0000533eu, 0x00005345u, 0x000500c4u, 0x0000030cu, 0x00005348u, 0x00005345u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000534bu, 0x00005345u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000534cu, 0x00005348u, 0x0000534bu, 0x0003003eu, 0x0000533eu, 0x0000534cu, 0x000500c7u, 0x00000006u, 0x0000534eu, 0x0000533bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000534fu, 0x0000534eu, 0x000006c3u, 0x0003003eu, 0x0000533fu, 0x0000534fu, 0x00040071u, 0x000004bau, 0x00005351u, 0x0000534cu, 0x0004007cu, 0x000004b6u, 0x00005352u, 0x00005351u, 0x00040071u, 0x00000011u, 0x00005354u, 0x0000534fu, 0x0004007cu, 0x00000012u, 0x00005355u, 0x00005354u, 0x00050051u, 0x00000012u, 0x00005356u, 0x00005352u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005357u, 0x00005352u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005358u, 0x00005352u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00005359u, 0x00005356u, 0x00005357u, 0x00005358u, 0x00005355u, 0x0003003eu, 0x00005340u, 0x00005359u, 0x0003003eu, 0x0000531du, 0x00005359u, 0x0003003eu, 0x0000467bu, 0x00005359u, 0x00050050u, 0x000000efu, 0x0000490cu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x0000490du, 0x0000490cu, 0x0003003eu, 0x00006d8au, 0x00004640u, 0x0003003eu, 0x00006d8bu, 0x00004642u, 0x0003003eu, 0x000046e2u, 0x000021c0u, 0x0003003eu, 0x000046e3u, 0x0000490du, 0x00050041u, 0x00000007u, 0x00005363u, 0x000046e3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005364u, 0x00005363u, 0x00050084u, 0x00000006u, 0x00005365u, 0x00004642u, 0x00005364u, 0x00050080u, 0x00000006u, 0x00005366u, 0x00004640u, 0x00005365u, 0x0003003eu, 0x0000535au, 0x00005366u, 0x00050041u, 0x00000007u, 0x00005367u, 0x000046e3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005368u, 0x00005367u, 0x00050084u, 0x00000006u, 0x00005369u, 0x00005368u, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000536bu, 0x00005366u, 0x00005369u, 0x0003003eu, 0x0000535au, 0x0000536bu, 0x000500c7u, 0x00000006u, 0x0000536du, 0x0000536bu, 0x00000e73u, 0x0003003eu, 0x0000535au, 0x0000536du, 0x000500c2u, 0x00000006u, 0x0000536fu, 0x0000536du, 0x0000022au, 0x0003003eu, 0x0000535bu, 0x0000536fu, 0x0004003du, 0x00000006u, 0x00005371u, 0x00005363u, 0x000500c7u, 0x00000006u, 0x00005372u, 0x00005371u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005373u, 0x00005372u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00005375u, 0x0000536fu, 0x00005373u, 0x0003003eu, 0x0000535bu, 0x00005375u, 0x000500c6u, 0x00000006u, 0x00005377u, 0x00005375u, 0x0000045cu, 0x0003003eu, 0x0000535bu, 0x00005377u, 0x00080041u, 0x00000692u, 0x0000537au, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005377u, 0x0004003du, 0x00000011u, 0x0000537bu, 0x0000537au, 0x00040071u, 0x00000006u, 0x0000537cu, 0x0000537bu, 0x0003003eu, 0x0000535cu, 0x0000537cu, 0x0003003eu, 0x0000535du, 0x0000537cu, 0x00060050u, 0x0000030cu, 0x00005383u, 0x0000537cu, 0x0000537cu, 0x0000537cu, 0x000500c2u, 0x0000030cu, 0x00005384u, 0x00005383u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00005386u, 0x00005384u, 0x0000f3a8u, 0x0003003eu, 0x0000537fu, 0x00005386u, 0x000500c4u, 0x0000030cu, 0x00005389u, 0x00005386u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000538cu, 0x00005386u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000538du, 0x00005389u, 0x0000538cu, 0x0003003eu, 0x0000537fu, 0x0000538du, 0x000500c7u, 0x00000006u, 0x0000538fu, 0x0000537cu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005390u, 0x0000538fu, 0x000006c3u, 0x0003003eu, 0x00005380u, 0x00005390u, 0x00040071u, 0x000004bau, 0x00005392u, 0x0000538du, 0x0004007cu, 0x000004b6u, 0x00005393u, 0x00005392u, 0x00040071u, 0x00000011u, 0x00005395u, 0x00005390u, 0x0004007cu, 0x00000012u, 0x00005396u, 0x00005395u, 0x00050051u, 0x00000012u, 0x00005397u, 0x00005393u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005398u, 0x00005393u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005399u, 0x00005393u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000539au, 0x00005397u, 0x00005398u, 0x00005399u, 0x00005396u, 0x0003003eu, 0x00005381u, 0x0000539au, 0x0003003eu, 0x0000535eu, 0x0000539au, 0x0003003eu, 0x00004683u, 0x0000539au, 0x000200f9u, 0x00004901u, 0x000200f8u, 0x00004901u, 0x000700f5u, 0x00000013u, 0x00009fe0u, 0x00009f34u, 0x000048b9u, 0x0000539au, 0x00004902u, 0x000700f5u, 0x00000013u, 0x00009e14u, 0x00009d65u, 0x000048b9u, 0x00005359u, 0x00004902u, 0x000300f7u, 0x00004912u, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004913u, 0x00004912u, 0x000200f8u, 0x00004913u, 0x00050050u, 0x000000efu, 0x00004916u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004917u, 0x00004916u, 0x0003003eu, 0x00006d8eu, 0x00004640u, 0x0003003eu, 0x00006d8fu, 0x00004642u, 0x0003003eu, 0x000046e5u, 0x000021c0u, 0x0003003eu, 0x000046e6u, 0x00004917u, 0x00050041u, 0x00000007u, 0x000053a4u, 0x000046e6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000053a5u, 0x000053a4u, 0x00050084u, 0x00000006u, 0x000053a6u, 0x00004642u, 0x000053a5u, 0x00050080u, 0x00000006u, 0x000053a7u, 0x00004640u, 0x000053a6u, 0x0003003eu, 0x0000539bu, 0x000053a7u, 0x00050041u, 0x00000007u, 0x000053a8u, 0x000046e6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000053a9u, 0x000053a8u, 0x00050084u, 0x00000006u, 0x000053aau, 0x000053a9u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000053acu, 0x000053a7u, 0x000053aau, 0x0003003eu, 0x0000539bu, 0x000053acu, 0x000500c7u, 0x00000006u, 0x000053aeu, 0x000053acu, 0x00000e73u, 0x0003003eu, 0x0000539bu, 0x000053aeu, 0x000500c2u, 0x00000006u, 0x000053b0u, 0x000053aeu, 0x0000022au, 0x0003003eu, 0x0000539cu, 0x000053b0u, 0x0004003du, 0x00000006u, 0x000053b2u, 0x000053a4u, 0x000500c7u, 0x00000006u, 0x000053b3u, 0x000053b2u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000053b4u, 0x000053b3u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000053b6u, 0x000053b0u, 0x000053b4u, 0x0003003eu, 0x0000539cu, 0x000053b6u, 0x000500c6u, 0x00000006u, 0x000053b8u, 0x000053b6u, 0x0000045cu, 0x0003003eu, 0x0000539cu, 0x000053b8u, 0x00080041u, 0x00000692u, 0x000053bbu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000053b8u, 0x0004003du, 0x00000011u, 0x000053bcu, 0x000053bbu, 0x00040071u, 0x00000006u, 0x000053bdu, 0x000053bcu, 0x0003003eu, 0x0000539du, 0x000053bdu, 0x0003003eu, 0x0000539eu, 0x000053bdu, 0x00060050u, 0x0000030cu, 0x000053c4u, 0x000053bdu, 0x000053bdu, 0x000053bdu, 0x000500c2u, 0x0000030cu, 0x000053c5u, 0x000053c4u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000053c7u, 0x000053c5u, 0x0000f3a8u, 0x0003003eu, 0x000053c0u, 0x000053c7u, 0x000500c4u, 0x0000030cu, 0x000053cau, 0x000053c7u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x000053cdu, 0x000053c7u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x000053ceu, 0x000053cau, 0x000053cdu, 0x0003003eu, 0x000053c0u, 0x000053ceu, 0x000500c7u, 0x00000006u, 0x000053d0u, 0x000053bdu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000053d1u, 0x000053d0u, 0x000006c3u, 0x0003003eu, 0x000053c1u, 0x000053d1u, 0x00040071u, 0x000004bau, 0x000053d3u, 0x000053ceu, 0x0004007cu, 0x000004b6u, 0x000053d4u, 0x000053d3u, 0x00040071u, 0x00000011u, 0x000053d6u, 0x000053d1u, 0x0004007cu, 0x00000012u, 0x000053d7u, 0x000053d6u, 0x00050051u, 0x00000012u, 0x000053d8u, 0x000053d4u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000053d9u, 0x000053d4u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000053dau, 0x000053d4u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000053dbu, 0x000053d8u, 0x000053d9u, 0x000053dau, 0x000053d7u, 0x0003003eu, 0x000053c2u, 0x000053dbu, 0x0003003eu, 0x0000539fu, 0x000053dbu, 0x0003003eu, 0x0000468bu, 0x000053dbu, 0x000200f9u, 0x00004912u, 0x000200f8u, 0x00004912u, 0x000700f5u, 0x00000013u, 0x0000a0c6u, 0x0000a018u, 0x00004901u, 0x000053dbu, 0x00004913u, 0x000200f9u, 0x000048b6u, 0x000200f8u, 0x000048b8u, 0x0004007cu, 0x000000b0u, 0x000048dcu, 0x000099d9u, 0x0003003eu, 0x00006d72u, 0x00004640u, 0x0003003eu, 0x00006d73u, 0x00004642u, 0x0003003eu, 0x000046d0u, 0x000021c0u, 0x0003003eu, 0x000046d1u, 0x000048dcu, 0x00050041u, 0x00000007u, 0x00005250u, 0x000046d1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005251u, 0x00005250u, 0x00050084u, 0x00000006u, 0x00005252u, 0x00004642u, 0x00005251u, 0x00050080u, 0x00000006u, 0x00005253u, 0x00004640u, 0x00005252u, 0x0003003eu, 0x00005248u, 0x00005253u, 0x00050041u, 0x00000007u, 0x00005254u, 0x000046d1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005255u, 0x00005254u, 0x00050080u, 0x00000006u, 0x00005257u, 0x00005253u, 0x00005255u, 0x0003003eu, 0x00005248u, 0x00005257u, 0x000500c7u, 0x00000006u, 0x00005259u, 0x00005257u, 0x00000e73u, 0x0003003eu, 0x00005248u, 0x00005259u, 0x0003003eu, 0x00005249u, 0x00005259u, 0x0004003du, 0x00000006u, 0x0000525cu, 0x00005250u, 0x000500c7u, 0x00000006u, 0x0000525du, 0x0000525cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000525eu, 0x0000525du, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005260u, 0x00005259u, 0x0000525eu, 0x0003003eu, 0x00005249u, 0x00005260u, 0x000500c6u, 0x00000006u, 0x00005262u, 0x00005260u, 0x00000464u, 0x0003003eu, 0x00005249u, 0x00005262u, 0x00080041u, 0x00000671u, 0x00005265u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005262u, 0x0004003du, 0x0000000fu, 0x00005266u, 0x00005265u, 0x00040071u, 0x00000006u, 0x00005267u, 0x00005266u, 0x0003003eu, 0x0000524au, 0x00005267u, 0x00040071u, 0x00000011u, 0x00005269u, 0x00005267u, 0x0004007cu, 0x00000012u, 0x0000526au, 0x00005269u, 0x00070050u, 0x00000013u, 0x0000526bu, 0x0000526au, 0x0000526au, 0x0000526au, 0x0000526au, 0x0003003eu, 0x0000524bu, 0x0000526bu, 0x0003003eu, 0x00004673u, 0x0000526bu, 0x000300f7u, 0x000048e1u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000048e2u, 0x000048e1u, 0x000200f8u, 0x000048e2u, 0x00050050u, 0x000000efu, 0x000048e5u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x000048e6u, 0x000048e5u, 0x0003003eu, 0x00006d76u, 0x00004640u, 0x0003003eu, 0x00006d77u, 0x00004642u, 0x0003003eu, 0x000046d3u, 0x000021c0u, 0x0003003eu, 0x000046d4u, 0x000048e6u, 0x00050041u, 0x00000007u, 0x00005274u, 0x000046d4u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005275u, 0x00005274u, 0x00050084u, 0x00000006u, 0x00005276u, 0x00004642u, 0x00005275u, 0x00050080u, 0x00000006u, 0x00005277u, 0x00004640u, 0x00005276u, 0x0003003eu, 0x0000526cu, 0x00005277u, 0x00050041u, 0x00000007u, 0x00005278u, 0x000046d4u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005279u, 0x00005278u, 0x00050080u, 0x00000006u, 0x0000527bu, 0x00005277u, 0x00005279u, 0x0003003eu, 0x0000526cu, 0x0000527bu, 0x000500c7u, 0x00000006u, 0x0000527du, 0x0000527bu, 0x00000e73u, 0x0003003eu, 0x0000526cu, 0x0000527du, 0x0003003eu, 0x0000526du, 0x0000527du, 0x0004003du, 0x00000006u, 0x00005280u, 0x00005274u, 0x000500c7u, 0x00000006u, 0x00005281u, 0x00005280u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005282u, 0x00005281u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005284u, 0x0000527du, 0x00005282u, 0x0003003eu, 0x0000526du, 0x00005284u, 0x000500c6u, 0x00000006u, 0x00005286u, 0x00005284u, 0x00000464u, 0x0003003eu, 0x0000526du, 0x00005286u, 0x00080041u, 0x00000671u, 0x00005289u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005286u, 0x0004003du, 0x0000000fu, 0x0000528au, 0x00005289u, 0x00040071u, 0x00000006u, 0x0000528bu, 0x0000528au, 0x0003003eu, 0x0000526eu, 0x0000528bu, 0x00040071u, 0x00000011u, 0x0000528du, 0x0000528bu, 0x0004007cu, 0x00000012u, 0x0000528eu, 0x0000528du, 0x00070050u, 0x00000013u, 0x0000528fu, 0x0000528eu, 0x0000528eu, 0x0000528eu, 0x0000528eu, 0x0003003eu, 0x0000526fu, 0x0000528fu, 0x0003003eu, 0x0000467bu, 0x0000528fu, 0x00050050u, 0x000000efu, 0x000048ecu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000048edu, 0x000048ecu, 0x0003003eu, 0x00006d7au, 0x00004640u, 0x0003003eu, 0x00006d7bu, 0x00004642u, 0x0003003eu, 0x000046d6u, 0x000021c0u, 0x0003003eu, 0x000046d7u, 0x000048edu, 0x00050041u, 0x00000007u, 0x00005298u, 0x000046d7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005299u, 0x00005298u, 0x00050084u, 0x00000006u, 0x0000529au, 0x00004642u, 0x00005299u, 0x00050080u, 0x00000006u, 0x0000529bu, 0x00004640u, 0x0000529au, 0x0003003eu, 0x00005290u, 0x0000529bu, 0x00050041u, 0x00000007u, 0x0000529cu, 0x000046d7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000529du, 0x0000529cu, 0x00050080u, 0x00000006u, 0x0000529fu, 0x0000529bu, 0x0000529du, 0x0003003eu, 0x00005290u, 0x0000529fu, 0x000500c7u, 0x00000006u, 0x000052a1u, 0x0000529fu, 0x00000e73u, 0x0003003eu, 0x00005290u, 0x000052a1u, 0x0003003eu, 0x00005291u, 0x000052a1u, 0x0004003du, 0x00000006u, 0x000052a4u, 0x00005298u, 0x000500c7u, 0x00000006u, 0x000052a5u, 0x000052a4u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000052a6u, 0x000052a5u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000052a8u, 0x000052a1u, 0x000052a6u, 0x0003003eu, 0x00005291u, 0x000052a8u, 0x000500c6u, 0x00000006u, 0x000052aau, 0x000052a8u, 0x00000464u, 0x0003003eu, 0x00005291u, 0x000052aau, 0x00080041u, 0x00000671u, 0x000052adu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000052aau, 0x0004003du, 0x0000000fu, 0x000052aeu, 0x000052adu, 0x00040071u, 0x00000006u, 0x000052afu, 0x000052aeu, 0x0003003eu, 0x00005292u, 0x000052afu, 0x00040071u, 0x00000011u, 0x000052b1u, 0x000052afu, 0x0004007cu, 0x00000012u, 0x000052b2u, 0x000052b1u, 0x00070050u, 0x00000013u, 0x000052b3u, 0x000052b2u, 0x000052b2u, 0x000052b2u, 0x000052b2u, 0x0003003eu, 0x00005293u, 0x000052b3u, 0x0003003eu, 0x00004683u, 0x000052b3u, 0x000200f9u, 0x000048e1u, 0x000200f8u, 0x000048e1u, 0x000700f5u, 0x00000013u, 0x00009fdeu, 0x00009f34u, 0x000048b8u, 0x000052b3u, 0x000048e2u, 0x000700f5u, 0x00000013u, 0x00009e12u, 0x00009d65u, 0x000048b8u, 0x0000528fu, 0x000048e2u, 0x000300f7u, 0x000048f2u, 0x00000000u, 0x000400fau, 0x000047efu, 0x000048f3u, 0x000048f2u, 0x000200f8u, 0x000048f3u, 0x00050050u, 0x000000efu, 0x000048f6u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000048f7u, 0x000048f6u, 0x0003003eu, 0x00006d7eu, 0x00004640u, 0x0003003eu, 0x00006d7fu, 0x00004642u, 0x0003003eu, 0x000046d9u, 0x000021c0u, 0x0003003eu, 0x000046dau, 0x000048f7u, 0x00050041u, 0x00000007u, 0x000052bcu, 0x000046dau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000052bdu, 0x000052bcu, 0x00050084u, 0x00000006u, 0x000052beu, 0x00004642u, 0x000052bdu, 0x00050080u, 0x00000006u, 0x000052bfu, 0x00004640u, 0x000052beu, 0x0003003eu, 0x000052b4u, 0x000052bfu, 0x00050041u, 0x00000007u, 0x000052c0u, 0x000046dau, 0x0000032du, 0x0004003du, 0x00000006u, 0x000052c1u, 0x000052c0u, 0x00050080u, 0x00000006u, 0x000052c3u, 0x000052bfu, 0x000052c1u, 0x0003003eu, 0x000052b4u, 0x000052c3u, 0x000500c7u, 0x00000006u, 0x000052c5u, 0x000052c3u, 0x00000e73u, 0x0003003eu, 0x000052b4u, 0x000052c5u, 0x0003003eu, 0x000052b5u, 0x000052c5u, 0x0004003du, 0x00000006u, 0x000052c8u, 0x000052bcu, 0x000500c7u, 0x00000006u, 0x000052c9u, 0x000052c8u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000052cau, 0x000052c9u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000052ccu, 0x000052c5u, 0x000052cau, 0x0003003eu, 0x000052b5u, 0x000052ccu, 0x000500c6u, 0x00000006u, 0x000052ceu, 0x000052ccu, 0x00000464u, 0x0003003eu, 0x000052b5u, 0x000052ceu, 0x00080041u, 0x00000671u, 0x000052d1u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000052ceu, 0x0004003du, 0x0000000fu, 0x000052d2u, 0x000052d1u, 0x00040071u, 0x00000006u, 0x000052d3u, 0x000052d2u, 0x0003003eu, 0x000052b6u, 0x000052d3u, 0x00040071u, 0x00000011u, 0x000052d5u, 0x000052d3u, 0x0004007cu, 0x00000012u, 0x000052d6u, 0x000052d5u, 0x00070050u, 0x00000013u, 0x000052d7u, 0x000052d6u, 0x000052d6u, 0x000052d6u, 0x000052d6u, 0x0003003eu, 0x000052b7u, 0x000052d7u, 0x0003003eu, 0x0000468bu, 0x000052d7u, 0x000200f9u, 0x000048f2u, 0x000200f8u, 0x000048f2u, 0x000700f5u, 0x00000013u, 0x0000a0c4u, 0x0000a018u, 0x000048e1u, 0x000052d7u, 0x000048f3u, 0x000200f9u, 0x000048b6u, 0x000200f8u, 0x000048b7u, 0x0004007cu, 0x000000b0u, 0x000048bcu, 0x000099d9u, 0x0003003eu, 0x00006d62u, 0x00004640u, 0x0003003eu, 0x00006d63u, 0x00004642u, 0x0003003eu, 0x000046c4u, 0x000021c0u, 0x0003003eu, 0x000046c5u, 0x000048bcu, 0x00050041u, 0x00000007u, 0x00005185u, 0x000046c5u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00005186u, 0x00005185u, 0x00050084u, 0x00000006u, 0x00005187u, 0x00004642u, 0x00005186u, 0x00050080u, 0x00000006u, 0x00005188u, 0x00004640u, 0x00005187u, 0x0003003eu, 0x0000517cu, 0x00005188u, 0x00050041u, 0x00000007u, 0x00005189u, 0x000046c5u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000518au, 0x00005189u, 0x000500c2u, 0x00000006u, 0x0000518bu, 0x0000518au, 0x0000022au, 0x00050080u, 0x00000006u, 0x0000518du, 0x00005188u, 0x0000518bu, 0x0003003eu, 0x0000517cu, 0x0000518du, 0x000500c7u, 0x00000006u, 0x0000518fu, 0x0000518du, 0x00000e73u, 0x0003003eu, 0x0000517cu, 0x0000518fu, 0x0004003du, 0x00000006u, 0x00005191u, 0x00005189u, 0x000400c8u, 0x00000006u, 0x00005192u, 0x00005191u, 0x000500c7u, 0x00000006u, 0x00005193u, 0x00005192u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005194u, 0x00005193u, 0x00000704u, 0x0003003eu, 0x0000517du, 0x00005194u, 0x0003003eu, 0x0000517eu, 0x0000518fu, 0x0004003du, 0x00000006u, 0x00005197u, 0x00005185u, 0x000500c7u, 0x00000006u, 0x00005198u, 0x00005197u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005199u, 0x00005198u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000519bu, 0x0000518fu, 0x00005199u, 0x0003003eu, 0x0000517eu, 0x0000519bu, 0x000500c6u, 0x00000006u, 0x0000519du, 0x0000519bu, 0x00000464u, 0x0003003eu, 0x0000517eu, 0x0000519du, 0x00080041u, 0x00000671u, 0x000051a0u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000519du, 0x0004003du, 0x0000000fu, 0x000051a1u, 0x000051a0u, 0x00040071u, 0x00000006u, 0x000051a2u, 0x000051a1u, 0x0003003eu, 0x0000517fu, 0x000051a2u, 0x000500c2u, 0x00000006u, 0x000051a5u, 0x000051a2u, 0x00005194u, 0x000500c7u, 0x00000006u, 0x000051a6u, 0x000051a5u, 0x00000e96u, 0x0003003eu, 0x0000517fu, 0x000051a6u, 0x000500c4u, 0x00000006u, 0x000051a8u, 0x000051a6u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000051aau, 0x000051a6u, 0x000051a8u, 0x0003003eu, 0x0000517fu, 0x000051aau, 0x00040071u, 0x00000011u, 0x000051acu, 0x000051aau, 0x0004007cu, 0x00000012u, 0x000051adu, 0x000051acu, 0x00070050u, 0x00000013u, 0x000051aeu, 0x000051adu, 0x000051adu, 0x000051adu, 0x000051adu, 0x0003003eu, 0x00005180u, 0x000051aeu, 0x0003003eu, 0x00004673u, 0x000051aeu, 0x000300f7u, 0x000048c1u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x000048c2u, 0x000048c1u, 0x000200f8u, 0x000048c2u, 0x00050050u, 0x000000efu, 0x000048c5u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x000048c6u, 0x000048c5u, 0x0003003eu, 0x00006d66u, 0x00004640u, 0x0003003eu, 0x00006d67u, 0x00004642u, 0x0003003eu, 0x000046c7u, 0x000021c0u, 0x0003003eu, 0x000046c8u, 0x000048c6u, 0x00050041u, 0x00000007u, 0x000051b8u, 0x000046c8u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000051b9u, 0x000051b8u, 0x00050084u, 0x00000006u, 0x000051bau, 0x00004642u, 0x000051b9u, 0x00050080u, 0x00000006u, 0x000051bbu, 0x00004640u, 0x000051bau, 0x0003003eu, 0x000051afu, 0x000051bbu, 0x00050041u, 0x00000007u, 0x000051bcu, 0x000046c8u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000051bdu, 0x000051bcu, 0x000500c2u, 0x00000006u, 0x000051beu, 0x000051bdu, 0x0000022au, 0x00050080u, 0x00000006u, 0x000051c0u, 0x000051bbu, 0x000051beu, 0x0003003eu, 0x000051afu, 0x000051c0u, 0x000500c7u, 0x00000006u, 0x000051c2u, 0x000051c0u, 0x00000e73u, 0x0003003eu, 0x000051afu, 0x000051c2u, 0x0004003du, 0x00000006u, 0x000051c4u, 0x000051bcu, 0x000400c8u, 0x00000006u, 0x000051c5u, 0x000051c4u, 0x000500c7u, 0x00000006u, 0x000051c6u, 0x000051c5u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000051c7u, 0x000051c6u, 0x00000704u, 0x0003003eu, 0x000051b0u, 0x000051c7u, 0x0003003eu, 0x000051b1u, 0x000051c2u, 0x0004003du, 0x00000006u, 0x000051cau, 0x000051b8u, 0x000500c7u, 0x00000006u, 0x000051cbu, 0x000051cau, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000051ccu, 0x000051cbu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000051ceu, 0x000051c2u, 0x000051ccu, 0x0003003eu, 0x000051b1u, 0x000051ceu, 0x000500c6u, 0x00000006u, 0x000051d0u, 0x000051ceu, 0x00000464u, 0x0003003eu, 0x000051b1u, 0x000051d0u, 0x00080041u, 0x00000671u, 0x000051d3u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000051d0u, 0x0004003du, 0x0000000fu, 0x000051d4u, 0x000051d3u, 0x00040071u, 0x00000006u, 0x000051d5u, 0x000051d4u, 0x0003003eu, 0x000051b2u, 0x000051d5u, 0x000500c2u, 0x00000006u, 0x000051d8u, 0x000051d5u, 0x000051c7u, 0x000500c7u, 0x00000006u, 0x000051d9u, 0x000051d8u, 0x00000e96u, 0x0003003eu, 0x000051b2u, 0x000051d9u, 0x000500c4u, 0x00000006u, 0x000051dbu, 0x000051d9u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x000051ddu, 0x000051d9u, 0x000051dbu, 0x0003003eu, 0x000051b2u, 0x000051ddu, 0x00040071u, 0x00000011u, 0x000051dfu, 0x000051ddu, 0x0004007cu, 0x00000012u, 0x000051e0u, 0x000051dfu, 0x00070050u, 0x00000013u, 0x000051e1u, 0x000051e0u, 0x000051e0u, 0x000051e0u, 0x000051e0u, 0x0003003eu, 0x000051b3u, 0x000051e1u, 0x0003003eu, 0x0000467bu, 0x000051e1u, 0x00050050u, 0x000000efu, 0x000048ccu, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000048cdu, 0x000048ccu, 0x0003003eu, 0x00006d6au, 0x00004640u, 0x0003003eu, 0x00006d6bu, 0x00004642u, 0x0003003eu, 0x000046cau, 0x000021c0u, 0x0003003eu, 0x000046cbu, 0x000048cdu, 0x00050041u, 0x00000007u, 0x000051ebu, 0x000046cbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000051ecu, 0x000051ebu, 0x00050084u, 0x00000006u, 0x000051edu, 0x00004642u, 0x000051ecu, 0x00050080u, 0x00000006u, 0x000051eeu, 0x00004640u, 0x000051edu, 0x0003003eu, 0x000051e2u, 0x000051eeu, 0x00050041u, 0x00000007u, 0x000051efu, 0x000046cbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000051f0u, 0x000051efu, 0x000500c2u, 0x00000006u, 0x000051f1u, 0x000051f0u, 0x0000022au, 0x00050080u, 0x00000006u, 0x000051f3u, 0x000051eeu, 0x000051f1u, 0x0003003eu, 0x000051e2u, 0x000051f3u, 0x000500c7u, 0x00000006u, 0x000051f5u, 0x000051f3u, 0x00000e73u, 0x0003003eu, 0x000051e2u, 0x000051f5u, 0x0004003du, 0x00000006u, 0x000051f7u, 0x000051efu, 0x000400c8u, 0x00000006u, 0x000051f8u, 0x000051f7u, 0x000500c7u, 0x00000006u, 0x000051f9u, 0x000051f8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000051fau, 0x000051f9u, 0x00000704u, 0x0003003eu, 0x000051e3u, 0x000051fau, 0x0003003eu, 0x000051e4u, 0x000051f5u, 0x0004003du, 0x00000006u, 0x000051fdu, 0x000051ebu, 0x000500c7u, 0x00000006u, 0x000051feu, 0x000051fdu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000051ffu, 0x000051feu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005201u, 0x000051f5u, 0x000051ffu, 0x0003003eu, 0x000051e4u, 0x00005201u, 0x000500c6u, 0x00000006u, 0x00005203u, 0x00005201u, 0x00000464u, 0x0003003eu, 0x000051e4u, 0x00005203u, 0x00080041u, 0x00000671u, 0x00005206u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005203u, 0x0004003du, 0x0000000fu, 0x00005207u, 0x00005206u, 0x00040071u, 0x00000006u, 0x00005208u, 0x00005207u, 0x0003003eu, 0x000051e5u, 0x00005208u, 0x000500c2u, 0x00000006u, 0x0000520bu, 0x00005208u, 0x000051fau, 0x000500c7u, 0x00000006u, 0x0000520cu, 0x0000520bu, 0x00000e96u, 0x0003003eu, 0x000051e5u, 0x0000520cu, 0x000500c4u, 0x00000006u, 0x0000520eu, 0x0000520cu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005210u, 0x0000520cu, 0x0000520eu, 0x0003003eu, 0x000051e5u, 0x00005210u, 0x00040071u, 0x00000011u, 0x00005212u, 0x00005210u, 0x0004007cu, 0x00000012u, 0x00005213u, 0x00005212u, 0x00070050u, 0x00000013u, 0x00005214u, 0x00005213u, 0x00005213u, 0x00005213u, 0x00005213u, 0x0003003eu, 0x000051e6u, 0x00005214u, 0x0003003eu, 0x00004683u, 0x00005214u, 0x000200f9u, 0x000048c1u, 0x000200f8u, 0x000048c1u, 0x000700f5u, 0x00000013u, 0x00009fdcu, 0x00009f34u, 0x000048b7u, 0x00005214u, 0x000048c2u, 0x000700f5u, 0x00000013u, 0x00009e10u, 0x00009d65u, 0x000048b7u, 0x000051e1u, 0x000048c2u, 0x000300f7u, 0x000048d2u, 0x00000000u, 0x000400fau, 0x000047efu, 0x000048d3u, 0x000048d2u, 0x000200f8u, 0x000048d3u, 0x00050050u, 0x000000efu, 0x000048d6u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000048d7u, 0x000048d6u, 0x0003003eu, 0x00006d6eu, 0x00004640u, 0x0003003eu, 0x00006d6fu, 0x00004642u, 0x0003003eu, 0x000046cdu, 0x000021c0u, 0x0003003eu, 0x000046ceu, 0x000048d7u, 0x00050041u, 0x00000007u, 0x0000521eu, 0x000046ceu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000521fu, 0x0000521eu, 0x00050084u, 0x00000006u, 0x00005220u, 0x00004642u, 0x0000521fu, 0x00050080u, 0x00000006u, 0x00005221u, 0x00004640u, 0x00005220u, 0x0003003eu, 0x00005215u, 0x00005221u, 0x00050041u, 0x00000007u, 0x00005222u, 0x000046ceu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005223u, 0x00005222u, 0x000500c2u, 0x00000006u, 0x00005224u, 0x00005223u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00005226u, 0x00005221u, 0x00005224u, 0x0003003eu, 0x00005215u, 0x00005226u, 0x000500c7u, 0x00000006u, 0x00005228u, 0x00005226u, 0x00000e73u, 0x0003003eu, 0x00005215u, 0x00005228u, 0x0004003du, 0x00000006u, 0x0000522au, 0x00005222u, 0x000400c8u, 0x00000006u, 0x0000522bu, 0x0000522au, 0x000500c7u, 0x00000006u, 0x0000522cu, 0x0000522bu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000522du, 0x0000522cu, 0x00000704u, 0x0003003eu, 0x00005216u, 0x0000522du, 0x0003003eu, 0x00005217u, 0x00005228u, 0x0004003du, 0x00000006u, 0x00005230u, 0x0000521eu, 0x000500c7u, 0x00000006u, 0x00005231u, 0x00005230u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005232u, 0x00005231u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00005234u, 0x00005228u, 0x00005232u, 0x0003003eu, 0x00005217u, 0x00005234u, 0x000500c6u, 0x00000006u, 0x00005236u, 0x00005234u, 0x00000464u, 0x0003003eu, 0x00005217u, 0x00005236u, 0x00080041u, 0x00000671u, 0x00005239u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005236u, 0x0004003du, 0x0000000fu, 0x0000523au, 0x00005239u, 0x00040071u, 0x00000006u, 0x0000523bu, 0x0000523au, 0x0003003eu, 0x00005218u, 0x0000523bu, 0x000500c2u, 0x00000006u, 0x0000523eu, 0x0000523bu, 0x0000522du, 0x000500c7u, 0x00000006u, 0x0000523fu, 0x0000523eu, 0x00000e96u, 0x0003003eu, 0x00005218u, 0x0000523fu, 0x000500c4u, 0x00000006u, 0x00005241u, 0x0000523fu, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00005243u, 0x0000523fu, 0x00005241u, 0x0003003eu, 0x00005218u, 0x00005243u, 0x00040071u, 0x00000011u, 0x00005245u, 0x00005243u, 0x0004007cu, 0x00000012u, 0x00005246u, 0x00005245u, 0x00070050u, 0x00000013u, 0x00005247u, 0x00005246u, 0x00005246u, 0x00005246u, 0x00005246u, 0x0003003eu, 0x00005219u, 0x00005247u, 0x0003003eu, 0x0000468bu, 0x00005247u, 0x000200f9u, 0x000048d2u, 0x000200f8u, 0x000048d2u, 0x000700f5u, 0x00000013u, 0x0000a0c2u, 0x0000a018u, 0x000048c1u, 0x00005247u, 0x000048d3u, 0x000200f9u, 0x000048b6u, 0x000200f8u, 0x000048b6u, 0x000d00f5u, 0x00000013u, 0x0000a0c1u, 0x0000a018u, 0x000048adu, 0x0000a0c2u, 0x000048d2u, 0x0000a0c4u, 0x000048f2u, 0x0000a0c6u, 0x00004912u, 0x0000a0c8u, 0x00004932u, 0x000d00f5u, 0x00000013u, 0x00009fdau, 0x00009f34u, 0x000048adu, 0x00009fdcu, 0x000048d2u, 0x00009fdeu, 0x000048f2u, 0x00009fe0u, 0x00004912u, 0x00009fe2u, 0x00004932u, 0x000d00f5u, 0x00000013u, 0x00009ef5u, 0x00009e4du, 0x000048adu, 0x000051aeu, 0x000048d2u, 0x0000526bu, 0x000048f2u, 0x00005318u, 0x00004912u, 0x00005415u, 0x00004932u, 0x000d00f5u, 0x00000013u, 0x00009e0eu, 0x00009d65u, 0x000048adu, 0x00009e10u, 0x000048d2u, 0x00009e12u, 0x000048f2u, 0x00009e14u, 0x00004912u, 0x00009e16u, 0x00004932u, 0x000200f9u, 0x000048acu, 0x000200f8u, 0x000048acu, 0x000f00f5u, 0x00000013u, 0x0000a0c0u, 0x0000a018u, 0x00004807u, 0x0000a0c1u, 0x000048b6u, 0x0000a0cau, 0x0000494eu, 0x0000a0cbu, 0x0000496cu, 0x0000a0d2u, 0x000049e0u, 0x0000a0dbu, 0x00004a69u, 0x000f00f5u, 0x00000013u, 0x00009fd9u, 0x00009f34u, 0x00004807u, 0x00009fdau, 0x000048b6u, 0x00009fe3u, 0x0000494eu, 0x00009fe4u, 0x0000496cu, 0x00009febu, 0x000049e0u, 0x00009ff4u, 0x00004a69u, 0x000f00f5u, 0x00000013u, 0x00009ef4u, 0x00009e4du, 0x00004807u, 0x00009ef5u, 0x000048b6u, 0x00005514u, 0x0000494eu, 0x00009effu, 0x0000496cu, 0x00009f06u, 0x000049e0u, 0x00009f0fu, 0x00004a69u, 0x000f00f5u, 0x00000013u, 0x00009e0du, 0x00009d65u, 0x00004807u, 0x00009e0eu, 0x000048b6u, 0x00009e17u, 0x0000494eu, 0x00009e18u, 0x0000496cu, 0x00009e1fu, 0x000049e0u, 0x00009e28u, 0x00004a69u, 0x000200f9u, 0x00004805u, 0x000200f8u, 0x00004806u, 0x000300f7u, 0x0000480cu, 0x00000000u, 0x000b00fbu, 0x000047f6u, 0x0000480cu, 0x00000000u, 0x0000480du, 0x00000002u, 0x0000480du, 0x00000003u, 0x0000480du, 0x00000004u, 0x0000480du, 0x000200f8u, 0x0000480du, 0x0003003eu, 0x00004671u, 0x000047f9u, 0x000600a9u, 0x00000008u, 0x00004811u, 0x000047f9u, 0x0000022du, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00004812u, 0x00004811u, 0x0003003eu, 0x00004672u, 0x00004812u, 0x00040071u, 0x00000006u, 0x00004815u, 0x00004646u, 0x0004007cu, 0x00000008u, 0x00004816u, 0x00004815u, 0x000300f7u, 0x00004817u, 0x00000000u, 0x000700fbu, 0x00004816u, 0x00004818u, 0x00000000u, 0x00004819u, 0x00000001u, 0x0000481au, 0x000200f8u, 0x0000481au, 0x0004007cu, 0x000000b0u, 0x0000487eu, 0x000099d9u, 0x000600a9u, 0x00000008u, 0x00004880u, 0x000047f9u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00004881u, 0x00004880u, 0x0003003eu, 0x00006d42u, 0x00004640u, 0x0003003eu, 0x00006d43u, 0x00004642u, 0x0003003eu, 0x00004694u, 0x000021c0u, 0x0003003eu, 0x00004695u, 0x0000487eu, 0x0003003eu, 0x00004696u, 0x00004881u, 0x0003003eu, 0x00004697u, 0x00004812u, 0x0003003eu, 0x00004698u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004fe0u, 0x00004695u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004fe1u, 0x00004fe0u, 0x00050084u, 0x00000006u, 0x00004fe2u, 0x00004642u, 0x00004fe1u, 0x00050080u, 0x00000006u, 0x00004fe3u, 0x00004640u, 0x00004fe2u, 0x0003003eu, 0x00004fd4u, 0x00004fe3u, 0x00050041u, 0x00000007u, 0x00004fe4u, 0x00004695u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004fe5u, 0x00004fe4u, 0x00050080u, 0x00000006u, 0x00004fe7u, 0x00004fe3u, 0x00004fe5u, 0x0003003eu, 0x00004fd4u, 0x00004fe7u, 0x000500c7u, 0x00000006u, 0x00004fe9u, 0x00004fe7u, 0x00000f2bu, 0x0003003eu, 0x00004fd4u, 0x00004fe9u, 0x0003003eu, 0x00004fd5u, 0x00004fe9u, 0x0004003du, 0x00000006u, 0x00004fecu, 0x00004fe0u, 0x000500c7u, 0x00000006u, 0x00004fedu, 0x00004fecu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004feeu, 0x00004fedu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004ff0u, 0x00004fe9u, 0x00004feeu, 0x0003003eu, 0x00004fd5u, 0x00004ff0u, 0x000500c6u, 0x00000006u, 0x00004ff2u, 0x00004ff0u, 0x00000464u, 0x0003003eu, 0x00004fd5u, 0x00004ff2u, 0x00080041u, 0x00000671u, 0x00004ff5u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004ff2u, 0x0004003du, 0x0000000fu, 0x00004ff6u, 0x00004ff5u, 0x00040071u, 0x00000006u, 0x00004ff7u, 0x00004ff6u, 0x0003003eu, 0x00004fd6u, 0x00004ff7u, 0x000500c4u, 0x00000006u, 0x00004ff9u, 0x00004ff7u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004ffbu, 0x00004ff9u, 0x00004881u, 0x0003003eu, 0x00004fd7u, 0x00004ffbu, 0x000500c6u, 0x00000006u, 0x00004ffeu, 0x00004ffbu, 0x00004812u, 0x0003003eu, 0x00004fd7u, 0x00004ffeu, 0x000500c5u, 0x00000006u, 0x00005001u, 0x00000f5cu, 0x00004ffeu, 0x00080041u, 0x00000692u, 0x00005002u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005001u, 0x0004003du, 0x00000011u, 0x00005003u, 0x00005002u, 0x00040071u, 0x00000006u, 0x00005004u, 0x00005003u, 0x0003003eu, 0x00004fd6u, 0x00005004u, 0x000300f7u, 0x00005006u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00005007u, 0x00005008u, 0x000200f8u, 0x00005008u, 0x0003003eu, 0x00004fdau, 0x00005004u, 0x00060050u, 0x0000030cu, 0x00005026u, 0x00005004u, 0x00005004u, 0x00005004u, 0x000500c2u, 0x0000030cu, 0x00005027u, 0x00005026u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00005029u, 0x00005027u, 0x0000f3a8u, 0x0003003eu, 0x00005022u, 0x00005029u, 0x000500c4u, 0x0000030cu, 0x0000502cu, 0x00005029u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000502fu, 0x00005029u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00005030u, 0x0000502cu, 0x0000502fu, 0x0003003eu, 0x00005022u, 0x00005030u, 0x000500c7u, 0x00000006u, 0x00005032u, 0x00005004u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005033u, 0x00005032u, 0x000006c3u, 0x0003003eu, 0x00005023u, 0x00005033u, 0x00040071u, 0x000004bau, 0x00005035u, 0x00005030u, 0x0004007cu, 0x000004b6u, 0x00005036u, 0x00005035u, 0x00040071u, 0x00000011u, 0x00005038u, 0x00005033u, 0x0004007cu, 0x00000012u, 0x00005039u, 0x00005038u, 0x00050051u, 0x00000012u, 0x0000503au, 0x00005036u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000503bu, 0x00005036u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000503cu, 0x00005036u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000503du, 0x0000503au, 0x0000503bu, 0x0000503cu, 0x00005039u, 0x0003003eu, 0x00005024u, 0x0000503du, 0x0003003eu, 0x00004fd8u, 0x0000503du, 0x000200f9u, 0x00005006u, 0x000200f8u, 0x00005007u, 0x0003003eu, 0x00004fd9u, 0x00005004u, 0x000500c2u, 0x00000006u, 0x00005012u, 0x00005004u, 0x0000025du, 0x0003003eu, 0x0000500eu, 0x00005012u, 0x000500c7u, 0x00000006u, 0x00005014u, 0x00005004u, 0x000006c3u, 0x0003003eu, 0x0000500fu, 0x00005014u, 0x00040071u, 0x00000011u, 0x00005016u, 0x00005012u, 0x0004007cu, 0x00000012u, 0x00005017u, 0x00005016u, 0x00040071u, 0x00000011u, 0x0000501fu, 0x00005014u, 0x0004007cu, 0x00000012u, 0x00005020u, 0x0000501fu, 0x00070050u, 0x00000013u, 0x00005021u, 0x00005017u, 0x00005017u, 0x00005017u, 0x00005020u, 0x0003003eu, 0x00005010u, 0x00005021u, 0x0003003eu, 0x00004fd8u, 0x00005021u, 0x000200f9u, 0x00005006u, 0x000200f8u, 0x00005006u, 0x000700f5u, 0x00000013u, 0x00009b62u, 0x00005021u, 0x00005007u, 0x0000503du, 0x00005008u, 0x0003003eu, 0x00004fdbu, 0x00009b62u, 0x0003003eu, 0x00004673u, 0x00009b62u, 0x000300f7u, 0x00004888u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004889u, 0x00004888u, 0x000200f8u, 0x00004889u, 0x00050050u, 0x000000efu, 0x0000488cu, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x0000488du, 0x0000488cu, 0x0003003eu, 0x00006d46u, 0x00004640u, 0x0003003eu, 0x00006d47u, 0x00004642u, 0x0003003eu, 0x0000469au, 0x000021c0u, 0x0003003eu, 0x0000469bu, 0x0000488du, 0x0003003eu, 0x0000469cu, 0x0000045cu, 0x0003003eu, 0x0000469du, 0x00004812u, 0x0003003eu, 0x0000469eu, 0x000021d4u, 0x00050041u, 0x00000007u, 0x0000504au, 0x0000469bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000504bu, 0x0000504au, 0x00050084u, 0x00000006u, 0x0000504cu, 0x00004642u, 0x0000504bu, 0x00050080u, 0x00000006u, 0x0000504du, 0x00004640u, 0x0000504cu, 0x0003003eu, 0x0000503eu, 0x0000504du, 0x00050041u, 0x00000007u, 0x0000504eu, 0x0000469bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000504fu, 0x0000504eu, 0x00050080u, 0x00000006u, 0x00005051u, 0x0000504du, 0x0000504fu, 0x0003003eu, 0x0000503eu, 0x00005051u, 0x000500c7u, 0x00000006u, 0x00005053u, 0x00005051u, 0x00000f2bu, 0x0003003eu, 0x0000503eu, 0x00005053u, 0x0003003eu, 0x0000503fu, 0x00005053u, 0x0004003du, 0x00000006u, 0x00005056u, 0x0000504au, 0x000500c7u, 0x00000006u, 0x00005057u, 0x00005056u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00005058u, 0x00005057u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000505au, 0x00005053u, 0x00005058u, 0x0003003eu, 0x0000503fu, 0x0000505au, 0x000500c6u, 0x00000006u, 0x0000505cu, 0x0000505au, 0x00000464u, 0x0003003eu, 0x0000503fu, 0x0000505cu, 0x00080041u, 0x00000671u, 0x0000505fu, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000505cu, 0x0004003du, 0x0000000fu, 0x00005060u, 0x0000505fu, 0x00040071u, 0x00000006u, 0x00005061u, 0x00005060u, 0x0003003eu, 0x00005040u, 0x00005061u, 0x000500c4u, 0x00000006u, 0x00005063u, 0x00005061u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00005065u, 0x00005063u, 0x0000045cu, 0x0003003eu, 0x00005041u, 0x00005065u, 0x000500c6u, 0x00000006u, 0x00005068u, 0x00005065u, 0x00004812u, 0x0003003eu, 0x00005041u, 0x00005068u, 0x000500c5u, 0x00000006u, 0x0000506bu, 0x00000f5cu, 0x00005068u, 0x00080041u, 0x00000692u, 0x0000506cu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000506bu, 0x0004003du, 0x00000011u, 0x0000506du, 0x0000506cu, 0x00040071u, 0x00000006u, 0x0000506eu, 0x0000506du, 0x0003003eu, 0x00005040u, 0x0000506eu, 0x000300f7u, 0x00005070u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00005071u, 0x00005072u, 0x000200f8u, 0x00005072u, 0x0003003eu, 0x00005044u, 0x0000506eu, 0x00060050u, 0x0000030cu, 0x00005090u, 0x0000506eu, 0x0000506eu, 0x0000506eu, 0x000500c2u, 0x0000030cu, 0x00005091u, 0x00005090u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00005093u, 0x00005091u, 0x0000f3a8u, 0x0003003eu, 0x0000508cu, 0x00005093u, 0x000500c4u, 0x0000030cu, 0x00005096u, 0x00005093u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00005099u, 0x00005093u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000509au, 0x00005096u, 0x00005099u, 0x0003003eu, 0x0000508cu, 0x0000509au, 0x000500c7u, 0x00000006u, 0x0000509cu, 0x0000506eu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000509du, 0x0000509cu, 0x000006c3u, 0x0003003eu, 0x0000508du, 0x0000509du, 0x00040071u, 0x000004bau, 0x0000509fu, 0x0000509au, 0x0004007cu, 0x000004b6u, 0x000050a0u, 0x0000509fu, 0x00040071u, 0x00000011u, 0x000050a2u, 0x0000509du, 0x0004007cu, 0x00000012u, 0x000050a3u, 0x000050a2u, 0x00050051u, 0x00000012u, 0x000050a4u, 0x000050a0u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000050a5u, 0x000050a0u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000050a6u, 0x000050a0u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000050a7u, 0x000050a4u, 0x000050a5u, 0x000050a6u, 0x000050a3u, 0x0003003eu, 0x0000508eu, 0x000050a7u, 0x0003003eu, 0x00005042u, 0x000050a7u, 0x000200f9u, 0x00005070u, 0x000200f8u, 0x00005071u, 0x0003003eu, 0x00005043u, 0x0000506eu, 0x000500c2u, 0x00000006u, 0x0000507cu, 0x0000506eu, 0x0000025du, 0x0003003eu, 0x00005078u, 0x0000507cu, 0x000500c7u, 0x00000006u, 0x0000507eu, 0x0000506eu, 0x000006c3u, 0x0003003eu, 0x00005079u, 0x0000507eu, 0x00040071u, 0x00000011u, 0x00005080u, 0x0000507cu, 0x0004007cu, 0x00000012u, 0x00005081u, 0x00005080u, 0x00040071u, 0x00000011u, 0x00005089u, 0x0000507eu, 0x0004007cu, 0x00000012u, 0x0000508au, 0x00005089u, 0x00070050u, 0x00000013u, 0x0000508bu, 0x00005081u, 0x00005081u, 0x00005081u, 0x0000508au, 0x0003003eu, 0x0000507au, 0x0000508bu, 0x0003003eu, 0x00005042u, 0x0000508bu, 0x000200f9u, 0x00005070u, 0x000200f8u, 0x00005070u, 0x000700f5u, 0x00000013u, 0x00009b7au, 0x0000508bu, 0x00005071u, 0x000050a7u, 0x00005072u, 0x0003003eu, 0x00005045u, 0x00009b7au, 0x0003003eu, 0x0000467bu, 0x00009b7au, 0x00050050u, 0x000000efu, 0x00004895u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004896u, 0x00004895u, 0x0003003eu, 0x00006d4au, 0x00004640u, 0x0003003eu, 0x00006d4bu, 0x00004642u, 0x0003003eu, 0x000046a0u, 0x000021c0u, 0x0003003eu, 0x000046a1u, 0x00004896u, 0x0003003eu, 0x000046a2u, 0x00000386u, 0x0003003eu, 0x000046a3u, 0x00004812u, 0x0003003eu, 0x000046a4u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x000050b4u, 0x000046a1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000050b5u, 0x000050b4u, 0x00050084u, 0x00000006u, 0x000050b6u, 0x00004642u, 0x000050b5u, 0x00050080u, 0x00000006u, 0x000050b7u, 0x00004640u, 0x000050b6u, 0x0003003eu, 0x000050a8u, 0x000050b7u, 0x00050041u, 0x00000007u, 0x000050b8u, 0x000046a1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000050b9u, 0x000050b8u, 0x00050080u, 0x00000006u, 0x000050bbu, 0x000050b7u, 0x000050b9u, 0x0003003eu, 0x000050a8u, 0x000050bbu, 0x000500c7u, 0x00000006u, 0x000050bdu, 0x000050bbu, 0x00000f2bu, 0x0003003eu, 0x000050a8u, 0x000050bdu, 0x0003003eu, 0x000050a9u, 0x000050bdu, 0x0004003du, 0x00000006u, 0x000050c0u, 0x000050b4u, 0x000500c7u, 0x00000006u, 0x000050c1u, 0x000050c0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000050c2u, 0x000050c1u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x000050c4u, 0x000050bdu, 0x000050c2u, 0x0003003eu, 0x000050a9u, 0x000050c4u, 0x000500c6u, 0x00000006u, 0x000050c6u, 0x000050c4u, 0x00000464u, 0x0003003eu, 0x000050a9u, 0x000050c6u, 0x00080041u, 0x00000671u, 0x000050c9u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000050c6u, 0x0004003du, 0x0000000fu, 0x000050cau, 0x000050c9u, 0x00040071u, 0x00000006u, 0x000050cbu, 0x000050cau, 0x0003003eu, 0x000050aau, 0x000050cbu, 0x000500c4u, 0x00000006u, 0x000050cdu, 0x000050cbu, 0x0000022du, 0x00050080u, 0x00000006u, 0x000050cfu, 0x000050cdu, 0x00000386u, 0x0003003eu, 0x000050abu, 0x000050cfu, 0x000500c6u, 0x00000006u, 0x000050d2u, 0x000050cfu, 0x00004812u, 0x0003003eu, 0x000050abu, 0x000050d2u, 0x000500c5u, 0x00000006u, 0x000050d5u, 0x00000f5cu, 0x000050d2u, 0x00080041u, 0x00000692u, 0x000050d6u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x000050d5u, 0x0004003du, 0x00000011u, 0x000050d7u, 0x000050d6u, 0x00040071u, 0x00000006u, 0x000050d8u, 0x000050d7u, 0x0003003eu, 0x000050aau, 0x000050d8u, 0x000300f7u, 0x000050dau, 0x00000000u, 0x000400fau, 0x000021d4u, 0x000050dbu, 0x000050dcu, 0x000200f8u, 0x000050dcu, 0x0003003eu, 0x000050aeu, 0x000050d8u, 0x00060050u, 0x0000030cu, 0x000050fau, 0x000050d8u, 0x000050d8u, 0x000050d8u, 0x000500c2u, 0x0000030cu, 0x000050fbu, 0x000050fau, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x000050fdu, 0x000050fbu, 0x0000f3a8u, 0x0003003eu, 0x000050f6u, 0x000050fdu, 0x000500c4u, 0x0000030cu, 0x00005100u, 0x000050fdu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00005103u, 0x000050fdu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00005104u, 0x00005100u, 0x00005103u, 0x0003003eu, 0x000050f6u, 0x00005104u, 0x000500c7u, 0x00000006u, 0x00005106u, 0x000050d8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005107u, 0x00005106u, 0x000006c3u, 0x0003003eu, 0x000050f7u, 0x00005107u, 0x00040071u, 0x000004bau, 0x00005109u, 0x00005104u, 0x0004007cu, 0x000004b6u, 0x0000510au, 0x00005109u, 0x00040071u, 0x00000011u, 0x0000510cu, 0x00005107u, 0x0004007cu, 0x00000012u, 0x0000510du, 0x0000510cu, 0x00050051u, 0x00000012u, 0x0000510eu, 0x0000510au, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000510fu, 0x0000510au, 0x00000001u, 0x00050051u, 0x00000012u, 0x00005110u, 0x0000510au, 0x00000002u, 0x00070050u, 0x00000013u, 0x00005111u, 0x0000510eu, 0x0000510fu, 0x00005110u, 0x0000510du, 0x0003003eu, 0x000050f8u, 0x00005111u, 0x0003003eu, 0x000050acu, 0x00005111u, 0x000200f9u, 0x000050dau, 0x000200f8u, 0x000050dbu, 0x0003003eu, 0x000050adu, 0x000050d8u, 0x000500c2u, 0x00000006u, 0x000050e6u, 0x000050d8u, 0x0000025du, 0x0003003eu, 0x000050e2u, 0x000050e6u, 0x000500c7u, 0x00000006u, 0x000050e8u, 0x000050d8u, 0x000006c3u, 0x0003003eu, 0x000050e3u, 0x000050e8u, 0x00040071u, 0x00000011u, 0x000050eau, 0x000050e6u, 0x0004007cu, 0x00000012u, 0x000050ebu, 0x000050eau, 0x00040071u, 0x00000011u, 0x000050f3u, 0x000050e8u, 0x0004007cu, 0x00000012u, 0x000050f4u, 0x000050f3u, 0x00070050u, 0x00000013u, 0x000050f5u, 0x000050ebu, 0x000050ebu, 0x000050ebu, 0x000050f4u, 0x0003003eu, 0x000050e4u, 0x000050f5u, 0x0003003eu, 0x000050acu, 0x000050f5u, 0x000200f9u, 0x000050dau, 0x000200f8u, 0x000050dau, 0x000700f5u, 0x00000013u, 0x00009b92u, 0x000050f5u, 0x000050dbu, 0x00005111u, 0x000050dcu, 0x0003003eu, 0x000050afu, 0x00009b92u, 0x0003003eu, 0x00004683u, 0x00009b92u, 0x000200f9u, 0x00004888u, 0x000200f8u, 0x00004888u, 0x000700f5u, 0x00000013u, 0x00009fd6u, 0x00009f34u, 0x00005006u, 0x00009b92u, 0x000050dau, 0x000700f5u, 0x00000013u, 0x00009e09u, 0x00009d65u, 0x00005006u, 0x00009b7au, 0x000050dau, 0x000300f7u, 0x0000489du, 0x00000000u, 0x000400fau, 0x000047efu, 0x0000489eu, 0x0000489du, 0x000200f8u, 0x0000489eu, 0x00050050u, 0x000000efu, 0x000048a1u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x000048a2u, 0x000048a1u, 0x0003003eu, 0x00006d4eu, 0x00004640u, 0x0003003eu, 0x00006d4fu, 0x00004642u, 0x0003003eu, 0x000046a6u, 0x000021c0u, 0x0003003eu, 0x000046a7u, 0x000048a2u, 0x0003003eu, 0x000046a8u, 0x00000464u, 0x0003003eu, 0x000046a9u, 0x00004812u, 0x0003003eu, 0x000046aau, 0x000021d4u, 0x00050041u, 0x00000007u, 0x0000511eu, 0x000046a7u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000511fu, 0x0000511eu, 0x00050084u, 0x00000006u, 0x00005120u, 0x00004642u, 0x0000511fu, 0x00050080u, 0x00000006u, 0x00005121u, 0x00004640u, 0x00005120u, 0x0003003eu, 0x00005112u, 0x00005121u, 0x00050041u, 0x00000007u, 0x00005122u, 0x000046a7u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00005123u, 0x00005122u, 0x00050080u, 0x00000006u, 0x00005125u, 0x00005121u, 0x00005123u, 0x0003003eu, 0x00005112u, 0x00005125u, 0x000500c7u, 0x00000006u, 0x00005127u, 0x00005125u, 0x00000f2bu, 0x0003003eu, 0x00005112u, 0x00005127u, 0x0003003eu, 0x00005113u, 0x00005127u, 0x0004003du, 0x00000006u, 0x0000512au, 0x0000511eu, 0x000500c7u, 0x00000006u, 0x0000512bu, 0x0000512au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000512cu, 0x0000512bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000512eu, 0x00005127u, 0x0000512cu, 0x0003003eu, 0x00005113u, 0x0000512eu, 0x000500c6u, 0x00000006u, 0x00005130u, 0x0000512eu, 0x00000464u, 0x0003003eu, 0x00005113u, 0x00005130u, 0x00080041u, 0x00000671u, 0x00005133u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00005130u, 0x0004003du, 0x0000000fu, 0x00005134u, 0x00005133u, 0x00040071u, 0x00000006u, 0x00005135u, 0x00005134u, 0x0003003eu, 0x00005114u, 0x00005135u, 0x000500c4u, 0x00000006u, 0x00005137u, 0x00005135u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00005139u, 0x00005137u, 0x00000464u, 0x0003003eu, 0x00005115u, 0x00005139u, 0x000500c6u, 0x00000006u, 0x0000513cu, 0x00005139u, 0x00004812u, 0x0003003eu, 0x00005115u, 0x0000513cu, 0x000500c5u, 0x00000006u, 0x0000513fu, 0x00000f5cu, 0x0000513cu, 0x00080041u, 0x00000692u, 0x00005140u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x0000513fu, 0x0004003du, 0x00000011u, 0x00005141u, 0x00005140u, 0x00040071u, 0x00000006u, 0x00005142u, 0x00005141u, 0x0003003eu, 0x00005114u, 0x00005142u, 0x000300f7u, 0x00005144u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00005145u, 0x00005146u, 0x000200f8u, 0x00005146u, 0x0003003eu, 0x00005118u, 0x00005142u, 0x00060050u, 0x0000030cu, 0x00005164u, 0x00005142u, 0x00005142u, 0x00005142u, 0x000500c2u, 0x0000030cu, 0x00005165u, 0x00005164u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00005167u, 0x00005165u, 0x0000f3a8u, 0x0003003eu, 0x00005160u, 0x00005167u, 0x000500c4u, 0x0000030cu, 0x0000516au, 0x00005167u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x0000516du, 0x00005167u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x0000516eu, 0x0000516au, 0x0000516du, 0x0003003eu, 0x00005160u, 0x0000516eu, 0x000500c7u, 0x00000006u, 0x00005170u, 0x00005142u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00005171u, 0x00005170u, 0x000006c3u, 0x0003003eu, 0x00005161u, 0x00005171u, 0x00040071u, 0x000004bau, 0x00005173u, 0x0000516eu, 0x0004007cu, 0x000004b6u, 0x00005174u, 0x00005173u, 0x00040071u, 0x00000011u, 0x00005176u, 0x00005171u, 0x0004007cu, 0x00000012u, 0x00005177u, 0x00005176u, 0x00050051u, 0x00000012u, 0x00005178u, 0x00005174u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00005179u, 0x00005174u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000517au, 0x00005174u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000517bu, 0x00005178u, 0x00005179u, 0x0000517au, 0x00005177u, 0x0003003eu, 0x00005162u, 0x0000517bu, 0x0003003eu, 0x00005116u, 0x0000517bu, 0x000200f9u, 0x00005144u, 0x000200f8u, 0x00005145u, 0x0003003eu, 0x00005117u, 0x00005142u, 0x000500c2u, 0x00000006u, 0x00005150u, 0x00005142u, 0x0000025du, 0x0003003eu, 0x0000514cu, 0x00005150u, 0x000500c7u, 0x00000006u, 0x00005152u, 0x00005142u, 0x000006c3u, 0x0003003eu, 0x0000514du, 0x00005152u, 0x00040071u, 0x00000011u, 0x00005154u, 0x00005150u, 0x0004007cu, 0x00000012u, 0x00005155u, 0x00005154u, 0x00040071u, 0x00000011u, 0x0000515du, 0x00005152u, 0x0004007cu, 0x00000012u, 0x0000515eu, 0x0000515du, 0x00070050u, 0x00000013u, 0x0000515fu, 0x00005155u, 0x00005155u, 0x00005155u, 0x0000515eu, 0x0003003eu, 0x0000514eu, 0x0000515fu, 0x0003003eu, 0x00005116u, 0x0000515fu, 0x000200f9u, 0x00005144u, 0x000200f8u, 0x00005144u, 0x000700f5u, 0x00000013u, 0x00009bbfu, 0x0000515fu, 0x00005145u, 0x0000517bu, 0x00005146u, 0x0003003eu, 0x00005119u, 0x00009bbfu, 0x0003003eu, 0x0000468bu, 0x00009bbfu, 0x000200f9u, 0x0000489du, 0x000200f8u, 0x0000489du, 0x000700f5u, 0x00000013u, 0x0000a0bbu, 0x0000a018u, 0x00004888u, 0x00009bbfu, 0x00005144u, 0x000200f9u, 0x00004817u, 0x000200f8u, 0x00004819u, 0x0004007cu, 0x000000b0u, 0x00004847u, 0x000099d9u, 0x00040071u, 0x00000006u, 0x0000484au, 0x00004648u, 0x000600a9u, 0x00000008u, 0x0000484cu, 0x000047f9u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x0000484du, 0x0000484cu, 0x0003003eu, 0x00006d32u, 0x00004640u, 0x0003003eu, 0x00006d33u, 0x00004642u, 0x0003003eu, 0x00004675u, 0x000021c0u, 0x0003003eu, 0x00004676u, 0x00004847u, 0x0003003eu, 0x00004677u, 0x0000484au, 0x0003003eu, 0x00004678u, 0x0000484du, 0x0003003eu, 0x00004679u, 0x00004812u, 0x0003003eu, 0x0000467au, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004dfdu, 0x00004676u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004dfeu, 0x00004dfdu, 0x00050084u, 0x00000006u, 0x00004dffu, 0x00004642u, 0x00004dfeu, 0x00050080u, 0x00000006u, 0x00004e00u, 0x00004640u, 0x00004dffu, 0x0003003eu, 0x00004df0u, 0x00004e00u, 0x00050041u, 0x00000007u, 0x00004e01u, 0x00004676u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004e02u, 0x00004e01u, 0x000500c2u, 0x00000006u, 0x00004e03u, 0x00004e02u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004e05u, 0x00004e00u, 0x00004e03u, 0x0003003eu, 0x00004df0u, 0x00004e05u, 0x000500c7u, 0x00000006u, 0x00004e07u, 0x00004e05u, 0x00000f2bu, 0x0003003eu, 0x00004df0u, 0x00004e07u, 0x0004003du, 0x00000006u, 0x00004e09u, 0x00004e01u, 0x000400c8u, 0x00000006u, 0x00004e0au, 0x00004e09u, 0x000500c7u, 0x00000006u, 0x00004e0bu, 0x00004e0au, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004e0cu, 0x00004e0bu, 0x00000704u, 0x0003003eu, 0x00004df1u, 0x00004e0cu, 0x0003003eu, 0x00004df2u, 0x00004e07u, 0x0004003du, 0x00000006u, 0x00004e0fu, 0x00004dfdu, 0x000500c7u, 0x00000006u, 0x00004e10u, 0x00004e0fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004e11u, 0x00004e10u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004e13u, 0x00004e07u, 0x00004e11u, 0x0003003eu, 0x00004df2u, 0x00004e13u, 0x000500c6u, 0x00000006u, 0x00004e15u, 0x00004e13u, 0x00000464u, 0x0003003eu, 0x00004df2u, 0x00004e15u, 0x00080041u, 0x00000671u, 0x00004e18u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004e15u, 0x0004003du, 0x0000000fu, 0x00004e19u, 0x00004e18u, 0x00040071u, 0x00000006u, 0x00004e1au, 0x00004e19u, 0x0003003eu, 0x00004df3u, 0x00004e1au, 0x000500c2u, 0x00000006u, 0x00004e1du, 0x00004e1au, 0x00004e0cu, 0x000500c7u, 0x00000006u, 0x00004e1eu, 0x00004e1du, 0x00000e96u, 0x0003003eu, 0x00004df3u, 0x00004e1eu, 0x000500c4u, 0x00000006u, 0x00004e20u, 0x0000484au, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00004e22u, 0x00004e1eu, 0x00004e20u, 0x0003003eu, 0x00004df3u, 0x00004e22u, 0x000500c4u, 0x00000006u, 0x00004e24u, 0x00004e22u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004e26u, 0x00004e24u, 0x0000484du, 0x0003003eu, 0x00004df4u, 0x00004e26u, 0x000500c6u, 0x00000006u, 0x00004e29u, 0x00004e26u, 0x00004812u, 0x0003003eu, 0x00004df4u, 0x00004e29u, 0x000500c5u, 0x00000006u, 0x00004e2cu, 0x00000f5cu, 0x00004e29u, 0x00080041u, 0x00000692u, 0x00004e2du, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004e2cu, 0x0004003du, 0x00000011u, 0x00004e2eu, 0x00004e2du, 0x00040071u, 0x00000006u, 0x00004e2fu, 0x00004e2eu, 0x0003003eu, 0x00004df3u, 0x00004e2fu, 0x000300f7u, 0x00004e31u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004e32u, 0x00004e33u, 0x000200f8u, 0x00004e33u, 0x0003003eu, 0x00004df7u, 0x00004e2fu, 0x00060050u, 0x0000030cu, 0x00004e51u, 0x00004e2fu, 0x00004e2fu, 0x00004e2fu, 0x000500c2u, 0x0000030cu, 0x00004e52u, 0x00004e51u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004e54u, 0x00004e52u, 0x0000f3a8u, 0x0003003eu, 0x00004e4du, 0x00004e54u, 0x000500c4u, 0x0000030cu, 0x00004e57u, 0x00004e54u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004e5au, 0x00004e54u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004e5bu, 0x00004e57u, 0x00004e5au, 0x0003003eu, 0x00004e4du, 0x00004e5bu, 0x000500c7u, 0x00000006u, 0x00004e5du, 0x00004e2fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004e5eu, 0x00004e5du, 0x000006c3u, 0x0003003eu, 0x00004e4eu, 0x00004e5eu, 0x00040071u, 0x000004bau, 0x00004e60u, 0x00004e5bu, 0x0004007cu, 0x000004b6u, 0x00004e61u, 0x00004e60u, 0x00040071u, 0x00000011u, 0x00004e63u, 0x00004e5eu, 0x0004007cu, 0x00000012u, 0x00004e64u, 0x00004e63u, 0x00050051u, 0x00000012u, 0x00004e65u, 0x00004e61u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004e66u, 0x00004e61u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004e67u, 0x00004e61u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004e68u, 0x00004e65u, 0x00004e66u, 0x00004e67u, 0x00004e64u, 0x0003003eu, 0x00004e4fu, 0x00004e68u, 0x0003003eu, 0x00004df5u, 0x00004e68u, 0x000200f9u, 0x00004e31u, 0x000200f8u, 0x00004e32u, 0x0003003eu, 0x00004df6u, 0x00004e2fu, 0x000500c2u, 0x00000006u, 0x00004e3du, 0x00004e2fu, 0x0000025du, 0x0003003eu, 0x00004e39u, 0x00004e3du, 0x000500c7u, 0x00000006u, 0x00004e3fu, 0x00004e2fu, 0x000006c3u, 0x0003003eu, 0x00004e3au, 0x00004e3fu, 0x00040071u, 0x00000011u, 0x00004e41u, 0x00004e3du, 0x0004007cu, 0x00000012u, 0x00004e42u, 0x00004e41u, 0x00040071u, 0x00000011u, 0x00004e4au, 0x00004e3fu, 0x0004007cu, 0x00000012u, 0x00004e4bu, 0x00004e4au, 0x00070050u, 0x00000013u, 0x00004e4cu, 0x00004e42u, 0x00004e42u, 0x00004e42u, 0x00004e4bu, 0x0003003eu, 0x00004e3bu, 0x00004e4cu, 0x0003003eu, 0x00004df5u, 0x00004e4cu, 0x000200f9u, 0x00004e31u, 0x000200f8u, 0x00004e31u, 0x000700f5u, 0x00000013u, 0x00009bc0u, 0x00004e4cu, 0x00004e32u, 0x00004e68u, 0x00004e33u, 0x0003003eu, 0x00004df8u, 0x00009bc0u, 0x0003003eu, 0x00004673u, 0x00009bc0u, 0x000300f7u, 0x00004854u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004855u, 0x00004854u, 0x000200f8u, 0x00004855u, 0x00050050u, 0x000000efu, 0x00004858u, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x00004859u, 0x00004858u, 0x0003003eu, 0x00006d36u, 0x00004640u, 0x0003003eu, 0x00006d37u, 0x00004642u, 0x0003003eu, 0x0000467du, 0x000021c0u, 0x0003003eu, 0x0000467eu, 0x00004859u, 0x0003003eu, 0x0000467fu, 0x0000484au, 0x0003003eu, 0x00004680u, 0x0000045cu, 0x0003003eu, 0x00004681u, 0x00004812u, 0x0003003eu, 0x00004682u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004e76u, 0x0000467eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004e77u, 0x00004e76u, 0x00050084u, 0x00000006u, 0x00004e78u, 0x00004642u, 0x00004e77u, 0x00050080u, 0x00000006u, 0x00004e79u, 0x00004640u, 0x00004e78u, 0x0003003eu, 0x00004e69u, 0x00004e79u, 0x00050041u, 0x00000007u, 0x00004e7au, 0x0000467eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004e7bu, 0x00004e7au, 0x000500c2u, 0x00000006u, 0x00004e7cu, 0x00004e7bu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004e7eu, 0x00004e79u, 0x00004e7cu, 0x0003003eu, 0x00004e69u, 0x00004e7eu, 0x000500c7u, 0x00000006u, 0x00004e80u, 0x00004e7eu, 0x00000f2bu, 0x0003003eu, 0x00004e69u, 0x00004e80u, 0x0004003du, 0x00000006u, 0x00004e82u, 0x00004e7au, 0x000400c8u, 0x00000006u, 0x00004e83u, 0x00004e82u, 0x000500c7u, 0x00000006u, 0x00004e84u, 0x00004e83u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004e85u, 0x00004e84u, 0x00000704u, 0x0003003eu, 0x00004e6au, 0x00004e85u, 0x0003003eu, 0x00004e6bu, 0x00004e80u, 0x0004003du, 0x00000006u, 0x00004e88u, 0x00004e76u, 0x000500c7u, 0x00000006u, 0x00004e89u, 0x00004e88u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004e8au, 0x00004e89u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004e8cu, 0x00004e80u, 0x00004e8au, 0x0003003eu, 0x00004e6bu, 0x00004e8cu, 0x000500c6u, 0x00000006u, 0x00004e8eu, 0x00004e8cu, 0x00000464u, 0x0003003eu, 0x00004e6bu, 0x00004e8eu, 0x00080041u, 0x00000671u, 0x00004e91u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004e8eu, 0x0004003du, 0x0000000fu, 0x00004e92u, 0x00004e91u, 0x00040071u, 0x00000006u, 0x00004e93u, 0x00004e92u, 0x0003003eu, 0x00004e6cu, 0x00004e93u, 0x000500c2u, 0x00000006u, 0x00004e96u, 0x00004e93u, 0x00004e85u, 0x000500c7u, 0x00000006u, 0x00004e97u, 0x00004e96u, 0x00000e96u, 0x0003003eu, 0x00004e6cu, 0x00004e97u, 0x000500c5u, 0x00000006u, 0x00004e9bu, 0x00004e97u, 0x00004e20u, 0x0003003eu, 0x00004e6cu, 0x00004e9bu, 0x000500c4u, 0x00000006u, 0x00004e9du, 0x00004e9bu, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004e9fu, 0x00004e9du, 0x0000045cu, 0x0003003eu, 0x00004e6du, 0x00004e9fu, 0x000500c6u, 0x00000006u, 0x00004ea2u, 0x00004e9fu, 0x00004812u, 0x0003003eu, 0x00004e6du, 0x00004ea2u, 0x000500c5u, 0x00000006u, 0x00004ea5u, 0x00000f5cu, 0x00004ea2u, 0x00080041u, 0x00000692u, 0x00004ea6u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004ea5u, 0x0004003du, 0x00000011u, 0x00004ea7u, 0x00004ea6u, 0x00040071u, 0x00000006u, 0x00004ea8u, 0x00004ea7u, 0x0003003eu, 0x00004e6cu, 0x00004ea8u, 0x000300f7u, 0x00004eaau, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004eabu, 0x00004eacu, 0x000200f8u, 0x00004eacu, 0x0003003eu, 0x00004e70u, 0x00004ea8u, 0x00060050u, 0x0000030cu, 0x00004ecau, 0x00004ea8u, 0x00004ea8u, 0x00004ea8u, 0x000500c2u, 0x0000030cu, 0x00004ecbu, 0x00004ecau, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004ecdu, 0x00004ecbu, 0x0000f3a8u, 0x0003003eu, 0x00004ec6u, 0x00004ecdu, 0x000500c4u, 0x0000030cu, 0x00004ed0u, 0x00004ecdu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004ed3u, 0x00004ecdu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004ed4u, 0x00004ed0u, 0x00004ed3u, 0x0003003eu, 0x00004ec6u, 0x00004ed4u, 0x000500c7u, 0x00000006u, 0x00004ed6u, 0x00004ea8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004ed7u, 0x00004ed6u, 0x000006c3u, 0x0003003eu, 0x00004ec7u, 0x00004ed7u, 0x00040071u, 0x000004bau, 0x00004ed9u, 0x00004ed4u, 0x0004007cu, 0x000004b6u, 0x00004edau, 0x00004ed9u, 0x00040071u, 0x00000011u, 0x00004edcu, 0x00004ed7u, 0x0004007cu, 0x00000012u, 0x00004eddu, 0x00004edcu, 0x00050051u, 0x00000012u, 0x00004edeu, 0x00004edau, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004edfu, 0x00004edau, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004ee0u, 0x00004edau, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004ee1u, 0x00004edeu, 0x00004edfu, 0x00004ee0u, 0x00004eddu, 0x0003003eu, 0x00004ec8u, 0x00004ee1u, 0x0003003eu, 0x00004e6eu, 0x00004ee1u, 0x000200f9u, 0x00004eaau, 0x000200f8u, 0x00004eabu, 0x0003003eu, 0x00004e6fu, 0x00004ea8u, 0x000500c2u, 0x00000006u, 0x00004eb6u, 0x00004ea8u, 0x0000025du, 0x0003003eu, 0x00004eb2u, 0x00004eb6u, 0x000500c7u, 0x00000006u, 0x00004eb8u, 0x00004ea8u, 0x000006c3u, 0x0003003eu, 0x00004eb3u, 0x00004eb8u, 0x00040071u, 0x00000011u, 0x00004ebau, 0x00004eb6u, 0x0004007cu, 0x00000012u, 0x00004ebbu, 0x00004ebau, 0x00040071u, 0x00000011u, 0x00004ec3u, 0x00004eb8u, 0x0004007cu, 0x00000012u, 0x00004ec4u, 0x00004ec3u, 0x00070050u, 0x00000013u, 0x00004ec5u, 0x00004ebbu, 0x00004ebbu, 0x00004ebbu, 0x00004ec4u, 0x0003003eu, 0x00004eb4u, 0x00004ec5u, 0x0003003eu, 0x00004e6eu, 0x00004ec5u, 0x000200f9u, 0x00004eaau, 0x000200f8u, 0x00004eaau, 0x000700f5u, 0x00000013u, 0x00009bd5u, 0x00004ec5u, 0x00004eabu, 0x00004ee1u, 0x00004eacu, 0x0003003eu, 0x00004e71u, 0x00009bd5u, 0x0003003eu, 0x0000467bu, 0x00009bd5u, 0x00050050u, 0x000000efu, 0x00004864u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004865u, 0x00004864u, 0x0003003eu, 0x00006d3au, 0x00004640u, 0x0003003eu, 0x00006d3bu, 0x00004642u, 0x0003003eu, 0x00004685u, 0x000021c0u, 0x0003003eu, 0x00004686u, 0x00004865u, 0x0003003eu, 0x00004687u, 0x0000484au, 0x0003003eu, 0x00004688u, 0x00000386u, 0x0003003eu, 0x00004689u, 0x00004812u, 0x0003003eu, 0x0000468au, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004eefu, 0x00004686u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004ef0u, 0x00004eefu, 0x00050084u, 0x00000006u, 0x00004ef1u, 0x00004642u, 0x00004ef0u, 0x00050080u, 0x00000006u, 0x00004ef2u, 0x00004640u, 0x00004ef1u, 0x0003003eu, 0x00004ee2u, 0x00004ef2u, 0x00050041u, 0x00000007u, 0x00004ef3u, 0x00004686u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004ef4u, 0x00004ef3u, 0x000500c2u, 0x00000006u, 0x00004ef5u, 0x00004ef4u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004ef7u, 0x00004ef2u, 0x00004ef5u, 0x0003003eu, 0x00004ee2u, 0x00004ef7u, 0x000500c7u, 0x00000006u, 0x00004ef9u, 0x00004ef7u, 0x00000f2bu, 0x0003003eu, 0x00004ee2u, 0x00004ef9u, 0x0004003du, 0x00000006u, 0x00004efbu, 0x00004ef3u, 0x000400c8u, 0x00000006u, 0x00004efcu, 0x00004efbu, 0x000500c7u, 0x00000006u, 0x00004efdu, 0x00004efcu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004efeu, 0x00004efdu, 0x00000704u, 0x0003003eu, 0x00004ee3u, 0x00004efeu, 0x0003003eu, 0x00004ee4u, 0x00004ef9u, 0x0004003du, 0x00000006u, 0x00004f01u, 0x00004eefu, 0x000500c7u, 0x00000006u, 0x00004f02u, 0x00004f01u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004f03u, 0x00004f02u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004f05u, 0x00004ef9u, 0x00004f03u, 0x0003003eu, 0x00004ee4u, 0x00004f05u, 0x000500c6u, 0x00000006u, 0x00004f07u, 0x00004f05u, 0x00000464u, 0x0003003eu, 0x00004ee4u, 0x00004f07u, 0x00080041u, 0x00000671u, 0x00004f0au, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004f07u, 0x0004003du, 0x0000000fu, 0x00004f0bu, 0x00004f0au, 0x00040071u, 0x00000006u, 0x00004f0cu, 0x00004f0bu, 0x0003003eu, 0x00004ee5u, 0x00004f0cu, 0x000500c2u, 0x00000006u, 0x00004f0fu, 0x00004f0cu, 0x00004efeu, 0x000500c7u, 0x00000006u, 0x00004f10u, 0x00004f0fu, 0x00000e96u, 0x0003003eu, 0x00004ee5u, 0x00004f10u, 0x000500c5u, 0x00000006u, 0x00004f14u, 0x00004f10u, 0x00004e20u, 0x0003003eu, 0x00004ee5u, 0x00004f14u, 0x000500c4u, 0x00000006u, 0x00004f16u, 0x00004f14u, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004f18u, 0x00004f16u, 0x00000386u, 0x0003003eu, 0x00004ee6u, 0x00004f18u, 0x000500c6u, 0x00000006u, 0x00004f1bu, 0x00004f18u, 0x00004812u, 0x0003003eu, 0x00004ee6u, 0x00004f1bu, 0x000500c5u, 0x00000006u, 0x00004f1eu, 0x00000f5cu, 0x00004f1bu, 0x00080041u, 0x00000692u, 0x00004f1fu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004f1eu, 0x0004003du, 0x00000011u, 0x00004f20u, 0x00004f1fu, 0x00040071u, 0x00000006u, 0x00004f21u, 0x00004f20u, 0x0003003eu, 0x00004ee5u, 0x00004f21u, 0x000300f7u, 0x00004f23u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004f24u, 0x00004f25u, 0x000200f8u, 0x00004f25u, 0x0003003eu, 0x00004ee9u, 0x00004f21u, 0x00060050u, 0x0000030cu, 0x00004f43u, 0x00004f21u, 0x00004f21u, 0x00004f21u, 0x000500c2u, 0x0000030cu, 0x00004f44u, 0x00004f43u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004f46u, 0x00004f44u, 0x0000f3a8u, 0x0003003eu, 0x00004f3fu, 0x00004f46u, 0x000500c4u, 0x0000030cu, 0x00004f49u, 0x00004f46u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004f4cu, 0x00004f46u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004f4du, 0x00004f49u, 0x00004f4cu, 0x0003003eu, 0x00004f3fu, 0x00004f4du, 0x000500c7u, 0x00000006u, 0x00004f4fu, 0x00004f21u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004f50u, 0x00004f4fu, 0x000006c3u, 0x0003003eu, 0x00004f40u, 0x00004f50u, 0x00040071u, 0x000004bau, 0x00004f52u, 0x00004f4du, 0x0004007cu, 0x000004b6u, 0x00004f53u, 0x00004f52u, 0x00040071u, 0x00000011u, 0x00004f55u, 0x00004f50u, 0x0004007cu, 0x00000012u, 0x00004f56u, 0x00004f55u, 0x00050051u, 0x00000012u, 0x00004f57u, 0x00004f53u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004f58u, 0x00004f53u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004f59u, 0x00004f53u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004f5au, 0x00004f57u, 0x00004f58u, 0x00004f59u, 0x00004f56u, 0x0003003eu, 0x00004f41u, 0x00004f5au, 0x0003003eu, 0x00004ee7u, 0x00004f5au, 0x000200f9u, 0x00004f23u, 0x000200f8u, 0x00004f24u, 0x0003003eu, 0x00004ee8u, 0x00004f21u, 0x000500c2u, 0x00000006u, 0x00004f2fu, 0x00004f21u, 0x0000025du, 0x0003003eu, 0x00004f2bu, 0x00004f2fu, 0x000500c7u, 0x00000006u, 0x00004f31u, 0x00004f21u, 0x000006c3u, 0x0003003eu, 0x00004f2cu, 0x00004f31u, 0x00040071u, 0x00000011u, 0x00004f33u, 0x00004f2fu, 0x0004007cu, 0x00000012u, 0x00004f34u, 0x00004f33u, 0x00040071u, 0x00000011u, 0x00004f3cu, 0x00004f31u, 0x0004007cu, 0x00000012u, 0x00004f3du, 0x00004f3cu, 0x00070050u, 0x00000013u, 0x00004f3eu, 0x00004f34u, 0x00004f34u, 0x00004f34u, 0x00004f3du, 0x0003003eu, 0x00004f2du, 0x00004f3eu, 0x0003003eu, 0x00004ee7u, 0x00004f3eu, 0x000200f9u, 0x00004f23u, 0x000200f8u, 0x00004f23u, 0x000700f5u, 0x00000013u, 0x00009bebu, 0x00004f3eu, 0x00004f24u, 0x00004f5au, 0x00004f25u, 0x0003003eu, 0x00004eeau, 0x00009bebu, 0x0003003eu, 0x00004683u, 0x00009bebu, 0x000200f9u, 0x00004854u, 0x000200f8u, 0x00004854u, 0x000700f5u, 0x00000013u, 0x00009fd2u, 0x00009f34u, 0x00004e31u, 0x00009bebu, 0x00004f23u, 0x000700f5u, 0x00000013u, 0x00009e04u, 0x00009d65u, 0x00004e31u, 0x00009bd5u, 0x00004f23u, 0x000300f7u, 0x0000486fu, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004870u, 0x0000486fu, 0x000200f8u, 0x00004870u, 0x00050050u, 0x000000efu, 0x00004873u, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004874u, 0x00004873u, 0x0003003eu, 0x00006d3eu, 0x00004640u, 0x0003003eu, 0x00006d3fu, 0x00004642u, 0x0003003eu, 0x0000468du, 0x000021c0u, 0x0003003eu, 0x0000468eu, 0x00004874u, 0x0003003eu, 0x0000468fu, 0x0000484au, 0x0003003eu, 0x00004690u, 0x00000464u, 0x0003003eu, 0x00004691u, 0x00004812u, 0x0003003eu, 0x00004692u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004f68u, 0x0000468eu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004f69u, 0x00004f68u, 0x00050084u, 0x00000006u, 0x00004f6au, 0x00004642u, 0x00004f69u, 0x00050080u, 0x00000006u, 0x00004f6bu, 0x00004640u, 0x00004f6au, 0x0003003eu, 0x00004f5bu, 0x00004f6bu, 0x00050041u, 0x00000007u, 0x00004f6cu, 0x0000468eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004f6du, 0x00004f6cu, 0x000500c2u, 0x00000006u, 0x00004f6eu, 0x00004f6du, 0x0000022au, 0x00050080u, 0x00000006u, 0x00004f70u, 0x00004f6bu, 0x00004f6eu, 0x0003003eu, 0x00004f5bu, 0x00004f70u, 0x000500c7u, 0x00000006u, 0x00004f72u, 0x00004f70u, 0x00000f2bu, 0x0003003eu, 0x00004f5bu, 0x00004f72u, 0x0004003du, 0x00000006u, 0x00004f74u, 0x00004f6cu, 0x000400c8u, 0x00000006u, 0x00004f75u, 0x00004f74u, 0x000500c7u, 0x00000006u, 0x00004f76u, 0x00004f75u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004f77u, 0x00004f76u, 0x00000704u, 0x0003003eu, 0x00004f5cu, 0x00004f77u, 0x0003003eu, 0x00004f5du, 0x00004f72u, 0x0004003du, 0x00000006u, 0x00004f7au, 0x00004f68u, 0x000500c7u, 0x00000006u, 0x00004f7bu, 0x00004f7au, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004f7cu, 0x00004f7bu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00004f7eu, 0x00004f72u, 0x00004f7cu, 0x0003003eu, 0x00004f5du, 0x00004f7eu, 0x000500c6u, 0x00000006u, 0x00004f80u, 0x00004f7eu, 0x00000464u, 0x0003003eu, 0x00004f5du, 0x00004f80u, 0x00080041u, 0x00000671u, 0x00004f83u, 0x00000e8du, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004f80u, 0x0004003du, 0x0000000fu, 0x00004f84u, 0x00004f83u, 0x00040071u, 0x00000006u, 0x00004f85u, 0x00004f84u, 0x0003003eu, 0x00004f5eu, 0x00004f85u, 0x000500c2u, 0x00000006u, 0x00004f88u, 0x00004f85u, 0x00004f77u, 0x000500c7u, 0x00000006u, 0x00004f89u, 0x00004f88u, 0x00000e96u, 0x0003003eu, 0x00004f5eu, 0x00004f89u, 0x000500c5u, 0x00000006u, 0x00004f8du, 0x00004f89u, 0x00004e20u, 0x0003003eu, 0x00004f5eu, 0x00004f8du, 0x000500c4u, 0x00000006u, 0x00004f8fu, 0x00004f8du, 0x0000022du, 0x00050080u, 0x00000006u, 0x00004f91u, 0x00004f8fu, 0x00000464u, 0x0003003eu, 0x00004f5fu, 0x00004f91u, 0x000500c6u, 0x00000006u, 0x00004f94u, 0x00004f91u, 0x00004812u, 0x0003003eu, 0x00004f5fu, 0x00004f94u, 0x000500c5u, 0x00000006u, 0x00004f97u, 0x00000f5cu, 0x00004f94u, 0x00080041u, 0x00000692u, 0x00004f98u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004f97u, 0x0004003du, 0x00000011u, 0x00004f99u, 0x00004f98u, 0x00040071u, 0x00000006u, 0x00004f9au, 0x00004f99u, 0x0003003eu, 0x00004f5eu, 0x00004f9au, 0x000300f7u, 0x00004f9cu, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004f9du, 0x00004f9eu, 0x000200f8u, 0x00004f9eu, 0x0003003eu, 0x00004f62u, 0x00004f9au, 0x00060050u, 0x0000030cu, 0x00004fbcu, 0x00004f9au, 0x00004f9au, 0x00004f9au, 0x000500c2u, 0x0000030cu, 0x00004fbdu, 0x00004fbcu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004fbfu, 0x00004fbdu, 0x0000f3a8u, 0x0003003eu, 0x00004fb8u, 0x00004fbfu, 0x000500c4u, 0x0000030cu, 0x00004fc2u, 0x00004fbfu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004fc5u, 0x00004fbfu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004fc6u, 0x00004fc2u, 0x00004fc5u, 0x0003003eu, 0x00004fb8u, 0x00004fc6u, 0x000500c7u, 0x00000006u, 0x00004fc8u, 0x00004f9au, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004fc9u, 0x00004fc8u, 0x000006c3u, 0x0003003eu, 0x00004fb9u, 0x00004fc9u, 0x00040071u, 0x000004bau, 0x00004fcbu, 0x00004fc6u, 0x0004007cu, 0x000004b6u, 0x00004fccu, 0x00004fcbu, 0x00040071u, 0x00000011u, 0x00004fceu, 0x00004fc9u, 0x0004007cu, 0x00000012u, 0x00004fcfu, 0x00004fceu, 0x00050051u, 0x00000012u, 0x00004fd0u, 0x00004fccu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004fd1u, 0x00004fccu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004fd2u, 0x00004fccu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004fd3u, 0x00004fd0u, 0x00004fd1u, 0x00004fd2u, 0x00004fcfu, 0x0003003eu, 0x00004fbau, 0x00004fd3u, 0x0003003eu, 0x00004f60u, 0x00004fd3u, 0x000200f9u, 0x00004f9cu, 0x000200f8u, 0x00004f9du, 0x0003003eu, 0x00004f61u, 0x00004f9au, 0x000500c2u, 0x00000006u, 0x00004fa8u, 0x00004f9au, 0x0000025du, 0x0003003eu, 0x00004fa4u, 0x00004fa8u, 0x000500c7u, 0x00000006u, 0x00004faau, 0x00004f9au, 0x000006c3u, 0x0003003eu, 0x00004fa5u, 0x00004faau, 0x00040071u, 0x00000011u, 0x00004facu, 0x00004fa8u, 0x0004007cu, 0x00000012u, 0x00004fadu, 0x00004facu, 0x00040071u, 0x00000011u, 0x00004fb5u, 0x00004faau, 0x0004007cu, 0x00000012u, 0x00004fb6u, 0x00004fb5u, 0x00070050u, 0x00000013u, 0x00004fb7u, 0x00004fadu, 0x00004fadu, 0x00004fadu, 0x00004fb6u, 0x0003003eu, 0x00004fa6u, 0x00004fb7u, 0x0003003eu, 0x00004f60u, 0x00004fb7u, 0x000200f9u, 0x00004f9cu, 0x000200f8u, 0x00004f9cu, 0x000700f5u, 0x00000013u, 0x00009c17u, 0x00004fb7u, 0x00004f9du, 0x00004fd3u, 0x00004f9eu, 0x0003003eu, 0x00004f63u, 0x00009c17u, 0x0003003eu, 0x0000468bu, 0x00009c17u, 0x000200f9u, 0x0000486fu, 0x000200f8u, 0x0000486fu, 0x000700f5u, 0x00000013u, 0x0000a0b6u, 0x0000a018u, 0x00004854u, 0x00009c17u, 0x00004f9cu, 0x000200f9u, 0x00004817u, 0x000200f8u, 0x00004818u, 0x0004007cu, 0x000000b0u, 0x0000481cu, 0x000099d9u, 0x000600a9u, 0x00000008u, 0x0000481eu, 0x000047f9u, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x0000481fu, 0x0000481eu, 0x0003003eu, 0x00006d52u, 0x00004640u, 0x0003003eu, 0x00006d53u, 0x00004642u, 0x0003003eu, 0x000046acu, 0x000021c0u, 0x0003003eu, 0x000046adu, 0x0000481cu, 0x0003003eu, 0x000046aeu, 0x0000481fu, 0x0003003eu, 0x000046afu, 0x00004812u, 0x0003003eu, 0x000046b0u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004c48u, 0x000046adu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004c49u, 0x00004c48u, 0x00050084u, 0x00000006u, 0x00004c4au, 0x00004642u, 0x00004c49u, 0x00050080u, 0x00000006u, 0x00004c4bu, 0x00004640u, 0x00004c4au, 0x0003003eu, 0x00004c3cu, 0x00004c4bu, 0x00050041u, 0x00000007u, 0x00004c4cu, 0x000046adu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004c4du, 0x00004c4cu, 0x00050084u, 0x00000006u, 0x00004c4eu, 0x00004c4du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004c50u, 0x00004c4bu, 0x00004c4eu, 0x0003003eu, 0x00004c3cu, 0x00004c50u, 0x000500c7u, 0x00000006u, 0x00004c52u, 0x00004c50u, 0x00000f2bu, 0x0003003eu, 0x00004c3cu, 0x00004c52u, 0x000500c2u, 0x00000006u, 0x00004c54u, 0x00004c52u, 0x0000022au, 0x0003003eu, 0x00004c3du, 0x00004c54u, 0x0004003du, 0x00000006u, 0x00004c56u, 0x00004c48u, 0x000500c7u, 0x00000006u, 0x00004c57u, 0x00004c56u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004c58u, 0x00004c57u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004c5au, 0x00004c54u, 0x00004c58u, 0x0003003eu, 0x00004c3du, 0x00004c5au, 0x000500c6u, 0x00000006u, 0x00004c5cu, 0x00004c5au, 0x0000045cu, 0x0003003eu, 0x00004c3du, 0x00004c5cu, 0x00080041u, 0x00000692u, 0x00004c5fu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004c5cu, 0x0004003du, 0x00000011u, 0x00004c60u, 0x00004c5fu, 0x00040071u, 0x00000006u, 0x00004c61u, 0x00004c60u, 0x0003003eu, 0x00004c3eu, 0x00004c61u, 0x000500c2u, 0x00000006u, 0x00004c63u, 0x00004c61u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004c64u, 0x00004c63u, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x00004c66u, 0x00004c64u, 0x0000481fu, 0x0003003eu, 0x00004c3fu, 0x00004c66u, 0x000500c6u, 0x00000006u, 0x00004c69u, 0x00004c66u, 0x00004812u, 0x0003003eu, 0x00004c3fu, 0x00004c69u, 0x000500c5u, 0x00000006u, 0x00004c6cu, 0x00000f5cu, 0x00004c69u, 0x00080041u, 0x00000692u, 0x00004c6du, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004c6cu, 0x0004003du, 0x00000011u, 0x00004c6eu, 0x00004c6du, 0x00040071u, 0x00000006u, 0x00004c6fu, 0x00004c6eu, 0x0003003eu, 0x00004c3eu, 0x00004c6fu, 0x000300f7u, 0x00004c71u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004c72u, 0x00004c73u, 0x000200f8u, 0x00004c73u, 0x0003003eu, 0x00004c42u, 0x00004c6fu, 0x00060050u, 0x0000030cu, 0x00004c91u, 0x00004c6fu, 0x00004c6fu, 0x00004c6fu, 0x000500c2u, 0x0000030cu, 0x00004c92u, 0x00004c91u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004c94u, 0x00004c92u, 0x0000f3a8u, 0x0003003eu, 0x00004c8du, 0x00004c94u, 0x000500c4u, 0x0000030cu, 0x00004c97u, 0x00004c94u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004c9au, 0x00004c94u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004c9bu, 0x00004c97u, 0x00004c9au, 0x0003003eu, 0x00004c8du, 0x00004c9bu, 0x000500c7u, 0x00000006u, 0x00004c9du, 0x00004c6fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004c9eu, 0x00004c9du, 0x000006c3u, 0x0003003eu, 0x00004c8eu, 0x00004c9eu, 0x00040071u, 0x000004bau, 0x00004ca0u, 0x00004c9bu, 0x0004007cu, 0x000004b6u, 0x00004ca1u, 0x00004ca0u, 0x00040071u, 0x00000011u, 0x00004ca3u, 0x00004c9eu, 0x0004007cu, 0x00000012u, 0x00004ca4u, 0x00004ca3u, 0x00050051u, 0x00000012u, 0x00004ca5u, 0x00004ca1u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004ca6u, 0x00004ca1u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004ca7u, 0x00004ca1u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004ca8u, 0x00004ca5u, 0x00004ca6u, 0x00004ca7u, 0x00004ca4u, 0x0003003eu, 0x00004c8fu, 0x00004ca8u, 0x0003003eu, 0x00004c40u, 0x00004ca8u, 0x000200f9u, 0x00004c71u, 0x000200f8u, 0x00004c72u, 0x0003003eu, 0x00004c41u, 0x00004c6fu, 0x000500c2u, 0x00000006u, 0x00004c7du, 0x00004c6fu, 0x0000025du, 0x0003003eu, 0x00004c79u, 0x00004c7du, 0x000500c7u, 0x00000006u, 0x00004c7fu, 0x00004c6fu, 0x000006c3u, 0x0003003eu, 0x00004c7au, 0x00004c7fu, 0x00040071u, 0x00000011u, 0x00004c81u, 0x00004c7du, 0x0004007cu, 0x00000012u, 0x00004c82u, 0x00004c81u, 0x00040071u, 0x00000011u, 0x00004c8au, 0x00004c7fu, 0x0004007cu, 0x00000012u, 0x00004c8bu, 0x00004c8au, 0x00070050u, 0x00000013u, 0x00004c8cu, 0x00004c82u, 0x00004c82u, 0x00004c82u, 0x00004c8bu, 0x0003003eu, 0x00004c7bu, 0x00004c8cu, 0x0003003eu, 0x00004c40u, 0x00004c8cu, 0x000200f9u, 0x00004c71u, 0x000200f8u, 0x00004c71u, 0x000700f5u, 0x00000013u, 0x00009c18u, 0x00004c8cu, 0x00004c72u, 0x00004ca8u, 0x00004c73u, 0x0003003eu, 0x00004c43u, 0x00009c18u, 0x0003003eu, 0x00004673u, 0x00009c18u, 0x000300f7u, 0x00004826u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004827u, 0x00004826u, 0x000200f8u, 0x00004827u, 0x00050050u, 0x000000efu, 0x0000482au, 0x0000998eu, 0x000047e4u, 0x0004007cu, 0x000000b0u, 0x0000482bu, 0x0000482au, 0x0003003eu, 0x00006d56u, 0x00004640u, 0x0003003eu, 0x00006d57u, 0x00004642u, 0x0003003eu, 0x000046b2u, 0x000021c0u, 0x0003003eu, 0x000046b3u, 0x0000482bu, 0x0003003eu, 0x000046b4u, 0x0000045cu, 0x0003003eu, 0x000046b5u, 0x00004812u, 0x0003003eu, 0x000046b6u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004cb5u, 0x000046b3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004cb6u, 0x00004cb5u, 0x00050084u, 0x00000006u, 0x00004cb7u, 0x00004642u, 0x00004cb6u, 0x00050080u, 0x00000006u, 0x00004cb8u, 0x00004640u, 0x00004cb7u, 0x0003003eu, 0x00004ca9u, 0x00004cb8u, 0x00050041u, 0x00000007u, 0x00004cb9u, 0x000046b3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004cbau, 0x00004cb9u, 0x00050084u, 0x00000006u, 0x00004cbbu, 0x00004cbau, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004cbdu, 0x00004cb8u, 0x00004cbbu, 0x0003003eu, 0x00004ca9u, 0x00004cbdu, 0x000500c7u, 0x00000006u, 0x00004cbfu, 0x00004cbdu, 0x00000f2bu, 0x0003003eu, 0x00004ca9u, 0x00004cbfu, 0x000500c2u, 0x00000006u, 0x00004cc1u, 0x00004cbfu, 0x0000022au, 0x0003003eu, 0x00004caau, 0x00004cc1u, 0x0004003du, 0x00000006u, 0x00004cc3u, 0x00004cb5u, 0x000500c7u, 0x00000006u, 0x00004cc4u, 0x00004cc3u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004cc5u, 0x00004cc4u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004cc7u, 0x00004cc1u, 0x00004cc5u, 0x0003003eu, 0x00004caau, 0x00004cc7u, 0x000500c6u, 0x00000006u, 0x00004cc9u, 0x00004cc7u, 0x0000045cu, 0x0003003eu, 0x00004caau, 0x00004cc9u, 0x00080041u, 0x00000692u, 0x00004cccu, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004cc9u, 0x0004003du, 0x00000011u, 0x00004ccdu, 0x00004cccu, 0x00040071u, 0x00000006u, 0x00004cceu, 0x00004ccdu, 0x0003003eu, 0x00004cabu, 0x00004cceu, 0x000500c2u, 0x00000006u, 0x00004cd0u, 0x00004cceu, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004cd1u, 0x00004cd0u, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x00004cd3u, 0x00004cd1u, 0x0000045cu, 0x0003003eu, 0x00004cacu, 0x00004cd3u, 0x000500c6u, 0x00000006u, 0x00004cd6u, 0x00004cd3u, 0x00004812u, 0x0003003eu, 0x00004cacu, 0x00004cd6u, 0x000500c5u, 0x00000006u, 0x00004cd9u, 0x00000f5cu, 0x00004cd6u, 0x00080041u, 0x00000692u, 0x00004cdau, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004cd9u, 0x0004003du, 0x00000011u, 0x00004cdbu, 0x00004cdau, 0x00040071u, 0x00000006u, 0x00004cdcu, 0x00004cdbu, 0x0003003eu, 0x00004cabu, 0x00004cdcu, 0x000300f7u, 0x00004cdeu, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004cdfu, 0x00004ce0u, 0x000200f8u, 0x00004ce0u, 0x0003003eu, 0x00004cafu, 0x00004cdcu, 0x00060050u, 0x0000030cu, 0x00004cfeu, 0x00004cdcu, 0x00004cdcu, 0x00004cdcu, 0x000500c2u, 0x0000030cu, 0x00004cffu, 0x00004cfeu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004d01u, 0x00004cffu, 0x0000f3a8u, 0x0003003eu, 0x00004cfau, 0x00004d01u, 0x000500c4u, 0x0000030cu, 0x00004d04u, 0x00004d01u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004d07u, 0x00004d01u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004d08u, 0x00004d04u, 0x00004d07u, 0x0003003eu, 0x00004cfau, 0x00004d08u, 0x000500c7u, 0x00000006u, 0x00004d0au, 0x00004cdcu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004d0bu, 0x00004d0au, 0x000006c3u, 0x0003003eu, 0x00004cfbu, 0x00004d0bu, 0x00040071u, 0x000004bau, 0x00004d0du, 0x00004d08u, 0x0004007cu, 0x000004b6u, 0x00004d0eu, 0x00004d0du, 0x00040071u, 0x00000011u, 0x00004d10u, 0x00004d0bu, 0x0004007cu, 0x00000012u, 0x00004d11u, 0x00004d10u, 0x00050051u, 0x00000012u, 0x00004d12u, 0x00004d0eu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004d13u, 0x00004d0eu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004d14u, 0x00004d0eu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004d15u, 0x00004d12u, 0x00004d13u, 0x00004d14u, 0x00004d11u, 0x0003003eu, 0x00004cfcu, 0x00004d15u, 0x0003003eu, 0x00004cadu, 0x00004d15u, 0x000200f9u, 0x00004cdeu, 0x000200f8u, 0x00004cdfu, 0x0003003eu, 0x00004caeu, 0x00004cdcu, 0x000500c2u, 0x00000006u, 0x00004ceau, 0x00004cdcu, 0x0000025du, 0x0003003eu, 0x00004ce6u, 0x00004ceau, 0x000500c7u, 0x00000006u, 0x00004cecu, 0x00004cdcu, 0x000006c3u, 0x0003003eu, 0x00004ce7u, 0x00004cecu, 0x00040071u, 0x00000011u, 0x00004ceeu, 0x00004ceau, 0x0004007cu, 0x00000012u, 0x00004cefu, 0x00004ceeu, 0x00040071u, 0x00000011u, 0x00004cf7u, 0x00004cecu, 0x0004007cu, 0x00000012u, 0x00004cf8u, 0x00004cf7u, 0x00070050u, 0x00000013u, 0x00004cf9u, 0x00004cefu, 0x00004cefu, 0x00004cefu, 0x00004cf8u, 0x0003003eu, 0x00004ce8u, 0x00004cf9u, 0x0003003eu, 0x00004cadu, 0x00004cf9u, 0x000200f9u, 0x00004cdeu, 0x000200f8u, 0x00004cdeu, 0x000700f5u, 0x00000013u, 0x00009c2du, 0x00004cf9u, 0x00004cdfu, 0x00004d15u, 0x00004ce0u, 0x0003003eu, 0x00004cb0u, 0x00009c2du, 0x0003003eu, 0x0000467bu, 0x00009c2du, 0x00050050u, 0x000000efu, 0x00004833u, 0x00009950u, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004834u, 0x00004833u, 0x0003003eu, 0x00006d5au, 0x00004640u, 0x0003003eu, 0x00006d5bu, 0x00004642u, 0x0003003eu, 0x000046b8u, 0x000021c0u, 0x0003003eu, 0x000046b9u, 0x00004834u, 0x0003003eu, 0x000046bau, 0x00000386u, 0x0003003eu, 0x000046bbu, 0x00004812u, 0x0003003eu, 0x000046bcu, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004d22u, 0x000046b9u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004d23u, 0x00004d22u, 0x00050084u, 0x00000006u, 0x00004d24u, 0x00004642u, 0x00004d23u, 0x00050080u, 0x00000006u, 0x00004d25u, 0x00004640u, 0x00004d24u, 0x0003003eu, 0x00004d16u, 0x00004d25u, 0x00050041u, 0x00000007u, 0x00004d26u, 0x000046b9u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004d27u, 0x00004d26u, 0x00050084u, 0x00000006u, 0x00004d28u, 0x00004d27u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004d2au, 0x00004d25u, 0x00004d28u, 0x0003003eu, 0x00004d16u, 0x00004d2au, 0x000500c7u, 0x00000006u, 0x00004d2cu, 0x00004d2au, 0x00000f2bu, 0x0003003eu, 0x00004d16u, 0x00004d2cu, 0x000500c2u, 0x00000006u, 0x00004d2eu, 0x00004d2cu, 0x0000022au, 0x0003003eu, 0x00004d17u, 0x00004d2eu, 0x0004003du, 0x00000006u, 0x00004d30u, 0x00004d22u, 0x000500c7u, 0x00000006u, 0x00004d31u, 0x00004d30u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004d32u, 0x00004d31u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004d34u, 0x00004d2eu, 0x00004d32u, 0x0003003eu, 0x00004d17u, 0x00004d34u, 0x000500c6u, 0x00000006u, 0x00004d36u, 0x00004d34u, 0x0000045cu, 0x0003003eu, 0x00004d17u, 0x00004d36u, 0x00080041u, 0x00000692u, 0x00004d39u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004d36u, 0x0004003du, 0x00000011u, 0x00004d3au, 0x00004d39u, 0x00040071u, 0x00000006u, 0x00004d3bu, 0x00004d3au, 0x0003003eu, 0x00004d18u, 0x00004d3bu, 0x000500c2u, 0x00000006u, 0x00004d3du, 0x00004d3bu, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004d3eu, 0x00004d3du, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x00004d40u, 0x00004d3eu, 0x00000386u, 0x0003003eu, 0x00004d19u, 0x00004d40u, 0x000500c6u, 0x00000006u, 0x00004d43u, 0x00004d40u, 0x00004812u, 0x0003003eu, 0x00004d19u, 0x00004d43u, 0x000500c5u, 0x00000006u, 0x00004d46u, 0x00000f5cu, 0x00004d43u, 0x00080041u, 0x00000692u, 0x00004d47u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004d46u, 0x0004003du, 0x00000011u, 0x00004d48u, 0x00004d47u, 0x00040071u, 0x00000006u, 0x00004d49u, 0x00004d48u, 0x0003003eu, 0x00004d18u, 0x00004d49u, 0x000300f7u, 0x00004d4bu, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004d4cu, 0x00004d4du, 0x000200f8u, 0x00004d4du, 0x0003003eu, 0x00004d1cu, 0x00004d49u, 0x00060050u, 0x0000030cu, 0x00004d6bu, 0x00004d49u, 0x00004d49u, 0x00004d49u, 0x000500c2u, 0x0000030cu, 0x00004d6cu, 0x00004d6bu, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004d6eu, 0x00004d6cu, 0x0000f3a8u, 0x0003003eu, 0x00004d67u, 0x00004d6eu, 0x000500c4u, 0x0000030cu, 0x00004d71u, 0x00004d6eu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004d74u, 0x00004d6eu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004d75u, 0x00004d71u, 0x00004d74u, 0x0003003eu, 0x00004d67u, 0x00004d75u, 0x000500c7u, 0x00000006u, 0x00004d77u, 0x00004d49u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004d78u, 0x00004d77u, 0x000006c3u, 0x0003003eu, 0x00004d68u, 0x00004d78u, 0x00040071u, 0x000004bau, 0x00004d7au, 0x00004d75u, 0x0004007cu, 0x000004b6u, 0x00004d7bu, 0x00004d7au, 0x00040071u, 0x00000011u, 0x00004d7du, 0x00004d78u, 0x0004007cu, 0x00000012u, 0x00004d7eu, 0x00004d7du, 0x00050051u, 0x00000012u, 0x00004d7fu, 0x00004d7bu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004d80u, 0x00004d7bu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004d81u, 0x00004d7bu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004d82u, 0x00004d7fu, 0x00004d80u, 0x00004d81u, 0x00004d7eu, 0x0003003eu, 0x00004d69u, 0x00004d82u, 0x0003003eu, 0x00004d1au, 0x00004d82u, 0x000200f9u, 0x00004d4bu, 0x000200f8u, 0x00004d4cu, 0x0003003eu, 0x00004d1bu, 0x00004d49u, 0x000500c2u, 0x00000006u, 0x00004d57u, 0x00004d49u, 0x0000025du, 0x0003003eu, 0x00004d53u, 0x00004d57u, 0x000500c7u, 0x00000006u, 0x00004d59u, 0x00004d49u, 0x000006c3u, 0x0003003eu, 0x00004d54u, 0x00004d59u, 0x00040071u, 0x00000011u, 0x00004d5bu, 0x00004d57u, 0x0004007cu, 0x00000012u, 0x00004d5cu, 0x00004d5bu, 0x00040071u, 0x00000011u, 0x00004d64u, 0x00004d59u, 0x0004007cu, 0x00000012u, 0x00004d65u, 0x00004d64u, 0x00070050u, 0x00000013u, 0x00004d66u, 0x00004d5cu, 0x00004d5cu, 0x00004d5cu, 0x00004d65u, 0x0003003eu, 0x00004d55u, 0x00004d66u, 0x0003003eu, 0x00004d1au, 0x00004d66u, 0x000200f9u, 0x00004d4bu, 0x000200f8u, 0x00004d4bu, 0x000700f5u, 0x00000013u, 0x00009c43u, 0x00004d66u, 0x00004d4cu, 0x00004d82u, 0x00004d4du, 0x0003003eu, 0x00004d1du, 0x00009c43u, 0x0003003eu, 0x00004683u, 0x00009c43u, 0x000200f9u, 0x00004826u, 0x000200f8u, 0x00004826u, 0x000700f5u, 0x00000013u, 0x00009fcdu, 0x00009f34u, 0x00004c71u, 0x00009c43u, 0x00004d4bu, 0x000700f5u, 0x00000013u, 0x00009dfeu, 0x00009d65u, 0x00004c71u, 0x00009c2du, 0x00004d4bu, 0x000300f7u, 0x0000483bu, 0x00000000u, 0x000400fau, 0x000047efu, 0x0000483cu, 0x0000483bu, 0x000200f8u, 0x0000483cu, 0x00050050u, 0x000000efu, 0x0000483fu, 0x0000998eu, 0x000047e6u, 0x0004007cu, 0x000000b0u, 0x00004840u, 0x0000483fu, 0x0003003eu, 0x00006d5eu, 0x00004640u, 0x0003003eu, 0x00006d5fu, 0x00004642u, 0x0003003eu, 0x000046beu, 0x000021c0u, 0x0003003eu, 0x000046bfu, 0x00004840u, 0x0003003eu, 0x000046c0u, 0x00000464u, 0x0003003eu, 0x000046c1u, 0x00004812u, 0x0003003eu, 0x000046c2u, 0x000021d4u, 0x00050041u, 0x00000007u, 0x00004d8fu, 0x000046bfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00004d90u, 0x00004d8fu, 0x00050084u, 0x00000006u, 0x00004d91u, 0x00004642u, 0x00004d90u, 0x00050080u, 0x00000006u, 0x00004d92u, 0x00004640u, 0x00004d91u, 0x0003003eu, 0x00004d83u, 0x00004d92u, 0x00050041u, 0x00000007u, 0x00004d93u, 0x000046bfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00004d94u, 0x00004d93u, 0x00050084u, 0x00000006u, 0x00004d95u, 0x00004d94u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00004d97u, 0x00004d92u, 0x00004d95u, 0x0003003eu, 0x00004d83u, 0x00004d97u, 0x000500c7u, 0x00000006u, 0x00004d99u, 0x00004d97u, 0x00000f2bu, 0x0003003eu, 0x00004d83u, 0x00004d99u, 0x000500c2u, 0x00000006u, 0x00004d9bu, 0x00004d99u, 0x0000022au, 0x0003003eu, 0x00004d84u, 0x00004d9bu, 0x0004003du, 0x00000006u, 0x00004d9du, 0x00004d8fu, 0x000500c7u, 0x00000006u, 0x00004d9eu, 0x00004d9du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00004d9fu, 0x00004d9eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00004da1u, 0x00004d9bu, 0x00004d9fu, 0x0003003eu, 0x00004d84u, 0x00004da1u, 0x000500c6u, 0x00000006u, 0x00004da3u, 0x00004da1u, 0x0000045cu, 0x0003003eu, 0x00004d84u, 0x00004da3u, 0x00080041u, 0x00000692u, 0x00004da6u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004da3u, 0x0004003du, 0x00000011u, 0x00004da7u, 0x00004da6u, 0x00040071u, 0x00000006u, 0x00004da8u, 0x00004da7u, 0x0003003eu, 0x00004d85u, 0x00004da8u, 0x000500c2u, 0x00000006u, 0x00004daau, 0x00004da8u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00004dabu, 0x00004daau, 0x00000ffcu, 0x00050080u, 0x00000006u, 0x00004dadu, 0x00004dabu, 0x00000464u, 0x0003003eu, 0x00004d86u, 0x00004dadu, 0x000500c6u, 0x00000006u, 0x00004db0u, 0x00004dadu, 0x00004812u, 0x0003003eu, 0x00004d86u, 0x00004db0u, 0x000500c5u, 0x00000006u, 0x00004db3u, 0x00000f5cu, 0x00004db0u, 0x00080041u, 0x00000692u, 0x00004db4u, 0x00000f5au, 0x00000220u, 0x000021c0u, 0x00000220u, 0x00004db3u, 0x0004003du, 0x00000011u, 0x00004db5u, 0x00004db4u, 0x00040071u, 0x00000006u, 0x00004db6u, 0x00004db5u, 0x0003003eu, 0x00004d85u, 0x00004db6u, 0x000300f7u, 0x00004db8u, 0x00000000u, 0x000400fau, 0x000021d4u, 0x00004db9u, 0x00004dbau, 0x000200f8u, 0x00004dbau, 0x0003003eu, 0x00004d89u, 0x00004db6u, 0x00060050u, 0x0000030cu, 0x00004dd8u, 0x00004db6u, 0x00004db6u, 0x00004db6u, 0x000500c2u, 0x0000030cu, 0x00004dd9u, 0x00004dd8u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00004ddbu, 0x00004dd9u, 0x0000f3a8u, 0x0003003eu, 0x00004dd4u, 0x00004ddbu, 0x000500c4u, 0x0000030cu, 0x00004ddeu, 0x00004ddbu, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00004de1u, 0x00004ddbu, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00004de2u, 0x00004ddeu, 0x00004de1u, 0x0003003eu, 0x00004dd4u, 0x00004de2u, 0x000500c7u, 0x00000006u, 0x00004de4u, 0x00004db6u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00004de5u, 0x00004de4u, 0x000006c3u, 0x0003003eu, 0x00004dd5u, 0x00004de5u, 0x00040071u, 0x000004bau, 0x00004de7u, 0x00004de2u, 0x0004007cu, 0x000004b6u, 0x00004de8u, 0x00004de7u, 0x00040071u, 0x00000011u, 0x00004deau, 0x00004de5u, 0x0004007cu, 0x00000012u, 0x00004debu, 0x00004deau, 0x00050051u, 0x00000012u, 0x00004decu, 0x00004de8u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004dedu, 0x00004de8u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004deeu, 0x00004de8u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004defu, 0x00004decu, 0x00004dedu, 0x00004deeu, 0x00004debu, 0x0003003eu, 0x00004dd6u, 0x00004defu, 0x0003003eu, 0x00004d87u, 0x00004defu, 0x000200f9u, 0x00004db8u, 0x000200f8u, 0x00004db9u, 0x0003003eu, 0x00004d88u, 0x00004db6u, 0x000500c2u, 0x00000006u, 0x00004dc4u, 0x00004db6u, 0x0000025du, 0x0003003eu, 0x00004dc0u, 0x00004dc4u, 0x000500c7u, 0x00000006u, 0x00004dc6u, 0x00004db6u, 0x000006c3u, 0x0003003eu, 0x00004dc1u, 0x00004dc6u, 0x00040071u, 0x00000011u, 0x00004dc8u, 0x00004dc4u, 0x0004007cu, 0x00000012u, 0x00004dc9u, 0x00004dc8u, 0x00040071u, 0x00000011u, 0x00004dd1u, 0x00004dc6u, 0x0004007cu, 0x00000012u, 0x00004dd2u, 0x00004dd1u, 0x00070050u, 0x00000013u, 0x00004dd3u, 0x00004dc9u, 0x00004dc9u, 0x00004dc9u, 0x00004dd2u, 0x0003003eu, 0x00004dc2u, 0x00004dd3u, 0x0003003eu, 0x00004d87u, 0x00004dd3u, 0x000200f9u, 0x00004db8u, 0x000200f8u, 0x00004db8u, 0x000700f5u, 0x00000013u, 0x00009c6fu, 0x00004dd3u, 0x00004db9u, 0x00004defu, 0x00004dbau, 0x0003003eu, 0x00004d8au, 0x00009c6fu, 0x0003003eu, 0x0000468bu, 0x00009c6fu, 0x000200f9u, 0x0000483bu, 0x000200f8u, 0x0000483bu, 0x000700f5u, 0x00000013u, 0x0000a0b0u, 0x0000a018u, 0x00004826u, 0x00009c6fu, 0x00004db8u, 0x000200f9u, 0x00004817u, 0x000200f8u, 0x00004817u, 0x000900f5u, 0x00000013u, 0x0000a0afu, 0x0000a0b0u, 0x0000483bu, 0x0000a0b6u, 0x0000486fu, 0x0000a0bbu, 0x0000489du, 0x000900f5u, 0x00000013u, 0x00009fcbu, 0x00009fcdu, 0x0000483bu, 0x00009fd2u, 0x0000486fu, 0x00009fd6u, 0x0000489du, 0x000900f5u, 0x00000013u, 0x00009ee4u, 0x00009c18u, 0x0000483bu, 0x00009bc0u, 0x0000486fu, 0x00009b62u, 0x0000489du, 0x000900f5u, 0x00000013u, 0x00009dfcu, 0x00009dfeu, 0x0000483bu, 0x00009e04u, 0x0000486fu, 0x00009e09u, 0x0000489du, 0x000200f9u, 0x0000480cu, 0x000200f8u, 0x0000480cu, 0x000700f5u, 0x00000013u, 0x00009ffcu, 0x0000a018u, 0x00004806u, 0x0000a0afu, 0x00004817u, 0x000700f5u, 0x00000013u, 0x00009f18u, 0x00009f34u, 0x00004806u, 0x00009fcbu, 0x00004817u, 0x000700f5u, 0x00000013u, 0x00009e31u, 0x00009e4du, 0x00004806u, 0x00009ee4u, 0x00004817u, 0x000700f5u, 0x00000013u, 0x00009d49u, 0x00009d65u, 0x00004806u, 0x00009dfcu, 0x00004817u, 0x000200f9u, 0x00004805u, 0x000200f8u, 0x00004805u, 0x000700f5u, 0x00000013u, 0x00009ffbu, 0x00009ffcu, 0x0000480cu, 0x0000a0c0u, 0x000048acu, 0x000700f5u, 0x00000013u, 0x00009f17u, 0x00009f18u, 0x0000480cu, 0x00009fd9u, 0x000048acu, 0x000700f5u, 0x00000013u, 0x00009e30u, 0x00009e31u, 0x0000480cu, 0x00009ef4u, 0x000048acu, 0x000700f5u, 0x00000013u, 0x00009d48u, 0x00009d49u, 0x0000480cu, 0x00009e0du, 0x000048acu, 0x000300f7u, 0x00004aceu, 0x00000000u, 0x000400fau, 0x00002210u, 0x00004acfu, 0x00004ad0u, 0x000200f8u, 0x00004ad0u, 0x000300f7u, 0x00004afcu, 0x00000000u, 0x000400fau, 0x000047f7u, 0x00004afdu, 0x00004afeu, 0x000200f8u, 0x00004afeu, 0x000300f7u, 0x00004b2au, 0x00000000u, 0x000400fau, 0x000047efu, 0x00004b2bu, 0x00004b2cu, 0x000200f8u, 0x00004b2cu, 0x000300f7u, 0x00004b3au, 0x00000000u, 0x000400fau, 0x000047f9u, 0x00004b3bu, 0x00004b3cu, 0x000200f8u, 0x00004b3cu, 0x0004003du, 0x000000efu, 0x00004b41u, 0x0000465fu, 0x0003003eu, 0x00004794u, 0x00004b41u, 0x000200f9u, 0x00004b3au, 0x000200f8u, 0x00004b3bu, 0x0004003du, 0x000000efu, 0x00004b3du, 0x0000465fu, 0x0007004fu, 0x000000efu, 0x00004b3eu, 0x00004b3du, 0x00004b3du, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00004b40u, 0x0000f3adu, 0x00004b3eu, 0x0003003eu, 0x00004794u, 0x00004b40u, 0x000200f9u, 0x00004b3au, 0x000200f8u, 0x00004b3au, 0x000700f5u, 0x000000efu, 0x00009d46u, 0x00004b40u, 0x00004b3bu, 0x00004b41u, 0x00004b3cu, 0x00040072u, 0x000001aeu, 0x00004b43u, 0x00009d46u, 0x0003003eu, 0x00004793u, 0x00004b43u, 0x00050082u, 0x00000013u, 0x00004b46u, 0x00009d48u, 0x00009e30u, 0x00050041u, 0x000001c4u, 0x00004b47u, 0x00004793u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004b48u, 0x00004b47u, 0x00070050u, 0x00000013u, 0x00004b49u, 0x00004b48u, 0x00004b48u, 0x00004b48u, 0x00004b48u, 0x00050084u, 0x00000013u, 0x00004b4au, 0x00004b46u, 0x00004b49u, 0x0003003eu, 0x00004785u, 0x00004b4au, 0x00050082u, 0x00000013u, 0x00004b4du, 0x00009f17u, 0x00009e30u, 0x00050041u, 0x000001c4u, 0x00004b4eu, 0x00004793u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00004b4fu, 0x00004b4eu, 0x00070050u, 0x00000013u, 0x00004b50u, 0x00004b4fu, 0x00004b4fu, 0x00004b4fu, 0x00004b4fu, 0x00050084u, 0x00000013u, 0x00004b51u, 0x00004b4du, 0x00004b50u, 0x00050080u, 0x00000013u, 0x00004b53u, 0x00004b4au, 0x00004b51u, 0x0003003eu, 0x00004785u, 0x00004b53u, 0x00050080u, 0x00000013u, 0x00004b56u, 0x00004b53u, 0x0000f3b0u, 0x0003003eu, 0x00004785u, 0x00004b56u, 0x000500c3u, 0x00000013u, 0x00004b59u, 0x00004b56u, 0x0000f3b1u, 0x0003003eu, 0x00004785u, 0x00004b59u, 0x00050080u, 0x00000013u, 0x00004b5cu, 0x00004b59u, 0x00009e30u, 0x0003003eu, 0x00004785u, 0x00004b5cu, 0x000200f9u, 0x00004b2au, 0x000200f8u, 0x00004b2bu, 0x00050080u, 0x00000013u, 0x00004b2fu, 0x00009e30u, 0x00009f17u, 0x00050080u, 0x00000013u, 0x00004b31u, 0x00004b2fu, 0x00009d48u, 0x00050080u, 0x00000013u, 0x00004b33u, 0x00004b31u, 0x00009ffbu, 0x00050080u, 0x00000013u, 0x00004b35u, 0x00004b33u, 0x0000f3abu, 0x000500c3u, 0x00000013u, 0x00004b37u, 0x00004b35u, 0x0000f3abu, 0x0003003eu, 0x00004785u, 0x00004b37u, 0x000200f9u, 0x00004b2au, 0x000200f8u, 0x00004b2au, 0x000700f5u, 0x00000013u, 0x0000a1a4u, 0x00004b37u, 0x00004b2bu, 0x00004b5cu, 0x00004b3au, 0x000200f9u, 0x00004afcu, 0x000200f8u, 0x00004afdu, 0x000300f7u, 0x00004b00u, 0x00000000u, 0x000400fau, 0x000021d7u, 0x00004b01u, 0x00004b02u, 0x000200f8u, 0x00004b02u, 0x0003003eu, 0x00004785u, 0x00009e30u, 0x000200f9u, 0x00004b00u, 0x000200f8u, 0x00004b01u, 0x000500c7u, 0x00000008u, 0x00004b04u, 0x00009950u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00004b05u, 0x00004b04u, 0x00000233u, 0x0004003du, 0x00000008u, 0x00004b07u, 0x000047c5u, 0x000500c3u, 0x00000008u, 0x00004b08u, 0x00004b07u, 0x0000022au, 0x000500c5u, 0x00000008u, 0x00004b09u, 0x00004b05u, 0x00004b08u, 0x0003003eu, 0x00004786u, 0x00004b09u, 0x0004003du, 0x00000008u, 0x00004b0cu, 0x000047c7u, 0x00050050u, 0x000000efu, 0x00004b0du, 0x00004b09u, 0x00004b0cu, 0x0007004fu, 0x000001aeu, 0x00004b0fu, 0x00009e30u, 0x00009e30u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004788u, 0x00004b0fu, 0x0007004fu, 0x000001aeu, 0x00004b11u, 0x00009d48u, 0x00009d48u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004789u, 0x00004b11u, 0x0007004fu, 0x000001aeu, 0x00004b13u, 0x00009f17u, 0x00009f17u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000478au, 0x00004b13u, 0x0007004fu, 0x000001aeu, 0x00004b15u, 0x00009ffbu, 0x00009ffbu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000478bu, 0x00004b15u, 0x0003003eu, 0x0000478cu, 0x00004b0du, 0x00050041u, 0x00000046u, 0x00005dbau, 0x0000478cu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00005dbbu, 0x00005dbau, 0x00050041u, 0x00000046u, 0x00005dbcu, 0x0000478cu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00005dbdu, 0x00005dbcu, 0x00050080u, 0x00000008u, 0x00005dbeu, 0x00005dbbu, 0x00005dbdu, 0x0003003eu, 0x00005db4u, 0x00005dbeu, 0x000500afu, 0x00000069u, 0x00005dc0u, 0x00005dbeu, 0x0000115du, 0x00050050u, 0x0000087bu, 0x00005dc3u, 0x00005dc0u, 0x00005dc0u, 0x000600a9u, 0x000001aeu, 0x00005dc4u, 0x00005dc3u, 0x00004b15u, 0x00004b0fu, 0x0003003eu, 0x00005db5u, 0x00005dc4u, 0x000300f7u, 0x00005dc7u, 0x00000000u, 0x000400fau, 0x00005dc0u, 0x00005dc8u, 0x00005dc9u, 0x000200f8u, 0x00005dc9u, 0x0004003du, 0x000000efu, 0x00005dceu, 0x0000478cu, 0x0003003eu, 0x00005db7u, 0x00005dceu, 0x000200f9u, 0x00005dc7u, 0x000200f8u, 0x00005dc8u, 0x0004003du, 0x000000efu, 0x00005dcau, 0x0000478cu, 0x0007004fu, 0x000000efu, 0x00005dcbu, 0x00005dcau, 0x00005dcau, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00005dcdu, 0x0000f3adu, 0x00005dcbu, 0x0003003eu, 0x00005db7u, 0x00005dcdu, 0x000200f9u, 0x00005dc7u, 0x000200f8u, 0x00005dc7u, 0x000700f5u, 0x000000efu, 0x0000a147u, 0x00005dcdu, 0x00005dc8u, 0x00005dceu, 0x00005dc9u, 0x00040072u, 0x000001aeu, 0x00005dd0u, 0x0000a147u, 0x0003003eu, 0x00005db6u, 0x00005dd0u, 0x00050082u, 0x000001aeu, 0x00005dd3u, 0x00004b11u, 0x00005dc4u, 0x00050041u, 0x000001c4u, 0x00005dd4u, 0x00005db6u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00005dd5u, 0x00005dd4u, 0x00050050u, 0x000001aeu, 0x00005dd6u, 0x00005dd5u, 0x00005dd5u, 0x00050084u, 0x000001aeu, 0x00005dd7u, 0x00005dd3u, 0x00005dd6u, 0x0003003eu, 0x00005db8u, 0x00005dd7u, 0x00050082u, 0x000001aeu, 0x00005ddau, 0x00004b13u, 0x00005dc4u, 0x00050041u, 0x000001c4u, 0x00005ddbu, 0x00005db6u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00005ddcu, 0x00005ddbu, 0x00050050u, 0x000001aeu, 0x00005dddu, 0x00005ddcu, 0x00005ddcu, 0x00050084u, 0x000001aeu, 0x00005ddeu, 0x00005ddau, 0x00005dddu, 0x00050080u, 0x000001aeu, 0x00005de0u, 0x00005dd7u, 0x00005ddeu, 0x0003003eu, 0x00005db8u, 0x00005de0u, 0x00050080u, 0x000001aeu, 0x00005de3u, 0x00005de0u, 0x0000f3aeu, 0x0003003eu, 0x00005db8u, 0x00005de3u, 0x000500c3u, 0x000001aeu, 0x00005de6u, 0x00005de3u, 0x0000f3afu, 0x0003003eu, 0x00005db8u, 0x00005de6u, 0x00050080u, 0x000001aeu, 0x00005de9u, 0x00005de6u, 0x00005dc4u, 0x0003003eu, 0x00005db8u, 0x00005de9u, 0x0003003eu, 0x00005db9u, 0x00005de9u, 0x0003003eu, 0x00004787u, 0x00005de9u, 0x0007004fu, 0x000001aeu, 0x00004b18u, 0x00009e30u, 0x00009e30u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000478eu, 0x00004b18u, 0x0007004fu, 0x000001aeu, 0x00004b1au, 0x00009d48u, 0x00009d48u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000478fu, 0x00004b1au, 0x0007004fu, 0x000001aeu, 0x00004b1cu, 0x00009f17u, 0x00009f17u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004790u, 0x00004b1cu, 0x0007004fu, 0x000001aeu, 0x00004b1eu, 0x00009ffbu, 0x00009ffbu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00004791u, 0x00004b1eu, 0x0004003du, 0x000000efu, 0x00004b1fu, 0x0000465fu, 0x0003003eu, 0x00004792u, 0x00004b1fu, 0x00050041u, 0x00000046u, 0x00005df1u, 0x00004792u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00005df2u, 0x00005df1u, 0x00050041u, 0x00000046u, 0x00005df3u, 0x00004792u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00005df4u, 0x00005df3u, 0x00050080u, 0x00000008u, 0x00005df5u, 0x00005df2u, 0x00005df4u, 0x0003003eu, 0x00005debu, 0x00005df5u, 0x000500afu, 0x00000069u, 0x00005df7u, 0x00005df5u, 0x0000115du, 0x00050050u, 0x0000087bu, 0x00005dfau, 0x00005df7u, 0x00005df7u, 0x000600a9u, 0x000001aeu, 0x00005dfbu, 0x00005dfau, 0x00004b1eu, 0x00004b18u, 0x0003003eu, 0x00005decu, 0x00005dfbu, 0x000300f7u, 0x00005dfeu, 0x00000000u, 0x000400fau, 0x00005df7u, 0x00005dffu, 0x00005e00u, 0x000200f8u, 0x00005e00u, 0x0004003du, 0x000000efu, 0x00005e05u, 0x00004792u, 0x0003003eu, 0x00005deeu, 0x00005e05u, 0x000200f9u, 0x00005dfeu, 0x000200f8u, 0x00005dffu, 0x0004003du, 0x000000efu, 0x00005e01u, 0x00004792u, 0x0007004fu, 0x000000efu, 0x00005e02u, 0x00005e01u, 0x00005e01u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00005e04u, 0x0000f3adu, 0x00005e02u, 0x0003003eu, 0x00005deeu, 0x00005e04u, 0x000200f9u, 0x00005dfeu, 0x000200f8u, 0x00005dfeu, 0x000700f5u, 0x000000efu, 0x0000a14fu, 0x00005e04u, 0x00005dffu, 0x00005e05u, 0x00005e00u, 0x00040072u, 0x000001aeu, 0x00005e07u, 0x0000a14fu, 0x0003003eu, 0x00005dedu, 0x00005e07u, 0x00050082u, 0x000001aeu, 0x00005e0au, 0x00004b1au, 0x00005dfbu, 0x00050041u, 0x000001c4u, 0x00005e0bu, 0x00005dedu, 0x0000032du, 0x0004003du, 0x00000012u, 0x00005e0cu, 0x00005e0bu, 0x00050050u, 0x000001aeu, 0x00005e0du, 0x00005e0cu, 0x00005e0cu, 0x00050084u, 0x000001aeu, 0x00005e0eu, 0x00005e0au, 0x00005e0du, 0x0003003eu, 0x00005defu, 0x00005e0eu, 0x00050082u, 0x000001aeu, 0x00005e11u, 0x00004b1cu, 0x00005dfbu, 0x00050041u, 0x000001c4u, 0x00005e12u, 0x00005dedu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00005e13u, 0x00005e12u, 0x00050050u, 0x000001aeu, 0x00005e14u, 0x00005e13u, 0x00005e13u, 0x00050084u, 0x000001aeu, 0x00005e15u, 0x00005e11u, 0x00005e14u, 0x00050080u, 0x000001aeu, 0x00005e17u, 0x00005e0eu, 0x00005e15u, 0x0003003eu, 0x00005defu, 0x00005e17u, 0x00050080u, 0x000001aeu, 0x00005e1au, 0x00005e17u, 0x0000f3aeu, 0x0003003eu, 0x00005defu, 0x00005e1au, 0x000500c3u, 0x000001aeu, 0x00005e1du, 0x00005e1au, 0x0000f3afu, 0x0003003eu, 0x00005defu, 0x00005e1du, 0x00050080u, 0x000001aeu, 0x00005e20u, 0x00005e1du, 0x00005dfbu, 0x0003003eu, 0x00005defu, 0x00005e20u, 0x0003003eu, 0x00005df0u, 0x00005e20u, 0x0003003eu, 0x0000478du, 0x00005e20u, 0x00050051u, 0x00000012u, 0x00004b23u, 0x00005de9u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004b24u, 0x00005de9u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004b25u, 0x00005e20u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004b26u, 0x00005e20u, 0x00000001u, 0x00070050u, 0x00000013u, 0x00004b27u, 0x00004b23u, 0x00004b24u, 0x00004b25u, 0x00004b26u, 0x0003003eu, 0x00004785u, 0x00004b27u, 0x000200f9u, 0x00004b00u, 0x000200f8u, 0x00004b00u, 0x000700f5u, 0x00000013u, 0x0000a1a3u, 0x00004b27u, 0x00005dfeu, 0x00009e30u, 0x00004b02u, 0x000200f9u, 0x00004afcu, 0x000200f8u, 0x00004afcu, 0x000700f5u, 0x00000013u, 0x0000a1a2u, 0x0000a1a3u, 0x00004b00u, 0x0000a1a4u, 0x00004b2au, 0x000200f9u, 0x00004aceu, 0x000200f8u, 0x00004acfu, 0x00040072u, 0x00000009u, 0x00004ad2u, 0x0000988bu, 0x000600cau, 0x00000009u, 0x00004ad3u, 0x00004ad2u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00004781u, 0x00004ad3u, 0x000300f7u, 0x00004ad6u, 0x00000000u, 0x000400fau, 0x000047f9u, 0x00004ad7u, 0x00004ad8u, 0x000200f8u, 0x00004ad8u, 0x0004003du, 0x00000009u, 0x00004adbu, 0x00004781u, 0x0007004fu, 0x000000efu, 0x00004adcu, 0x00004adbu, 0x00004adbu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004783u, 0x00004adcu, 0x000200f9u, 0x00004ad6u, 0x000200f8u, 0x00004ad7u, 0x0004003du, 0x00000009u, 0x00004ad9u, 0x00004781u, 0x0007004fu, 0x000000efu, 0x00004adau, 0x00004ad9u, 0x00004ad9u, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00004783u, 0x00004adau, 0x000200f9u, 0x00004ad6u, 0x000200f8u, 0x00004ad6u, 0x000700f5u, 0x000000efu, 0x0000a19du, 0x00004adau, 0x00004ad7u, 0x00004adcu, 0x00004ad8u, 0x0003003eu, 0x00004782u, 0x0000a19du, 0x00050041u, 0x00000046u, 0x00004adeu, 0x00004782u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004adfu, 0x00004adeu, 0x00050082u, 0x00000013u, 0x00004ae2u, 0x00009d48u, 0x00009e30u, 0x00040072u, 0x00000009u, 0x00004ae3u, 0x00004ae2u, 0x00070050u, 0x00000009u, 0x00004ae4u, 0x00004adfu, 0x00004adfu, 0x00004adfu, 0x00004adfu, 0x00050084u, 0x00000009u, 0x00004ae5u, 0x00004ae4u, 0x00004ae3u, 0x00050041u, 0x00000046u, 0x00004ae6u, 0x00004782u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004ae7u, 0x00004ae6u, 0x00050082u, 0x00000013u, 0x00004aeau, 0x00009f17u, 0x00009e30u, 0x00040072u, 0x00000009u, 0x00004aebu, 0x00004aeau, 0x00070050u, 0x00000009u, 0x00004aecu, 0x00004ae7u, 0x00004ae7u, 0x00004ae7u, 0x00004ae7u, 0x00050084u, 0x00000009u, 0x00004aedu, 0x00004aecu, 0x00004aebu, 0x00050080u, 0x00000009u, 0x00004aeeu, 0x00004ae5u, 0x00004aedu, 0x00050080u, 0x00000009u, 0x00004af0u, 0x00004aeeu, 0x0000f3a1u, 0x0003003eu, 0x00004784u, 0x00004af0u, 0x000500c3u, 0x00000009u, 0x00004af3u, 0x00004af0u, 0x0000f3acu, 0x0003003eu, 0x00004784u, 0x00004af3u, 0x00050041u, 0x00000046u, 0x00004af4u, 0x00004781u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00004af5u, 0x00004af4u, 0x00070050u, 0x00000009u, 0x00004af7u, 0x00004af5u, 0x00004af5u, 0x00004af5u, 0x00004af5u, 0x00050080u, 0x00000009u, 0x00004af8u, 0x00004af3u, 0x00004af7u, 0x0003003eu, 0x00004784u, 0x00004af8u, 0x00040072u, 0x00000013u, 0x00004afau, 0x00004af8u, 0x0003003eu, 0x00004785u, 0x00004afau, 0x000200f9u, 0x00004aceu, 0x000200f8u, 0x00004aceu, 0x000700f5u, 0x00000013u, 0x0000a1a1u, 0x00004afau, 0x00004ad6u, 0x0000a1a2u, 0x00004afcu, 0x0003003eu, 0x00004795u, 0x0000a1a1u, 0x0003003eu, 0x00002148u, 0x0000a1a1u, 0x000400a8u, 0x00000069u, 0x00002362u, 0x000021d7u, 0x000400a8u, 0x00000069u, 0x00002364u, 0x000021d1u, 0x000500a7u, 0x00000069u, 0x00002365u, 0x00002362u, 0x00002364u, 0x000500a7u, 0x00000069u, 0x00002368u, 0x00002365u, 0x00002347u, 0x000300f7u, 0x00002369u, 0x00000000u, 0x000400fau, 0x00002368u, 0x0000236au, 0x00002369u, 0x000200f8u, 0x0000236au, 0x0003003eu, 0x00002157u, 0x0000a1a1u, 0x0003003eu, 0x00002158u, 0x00002986u, 0x00040072u, 0x00000009u, 0x00005e29u, 0x0000a1a1u, 0x000600cau, 0x00000009u, 0x00005e2au, 0x00005e29u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00005e22u, 0x00005e2au, 0x00050041u, 0x00000046u, 0x00005e2bu, 0x00005e22u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00005e2cu, 0x00005e2bu, 0x00050041u, 0x000001c4u, 0x00005e2du, 0x00002158u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00005e2eu, 0x00005e2du, 0x00040072u, 0x00000008u, 0x00005e2fu, 0x00005e2eu, 0x00050041u, 0x00000046u, 0x00005e30u, 0x00005e22u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00005e31u, 0x00005e30u, 0x00050084u, 0x00000008u, 0x00005e32u, 0x00005e2fu, 0x00005e31u, 0x00050080u, 0x00000008u, 0x00005e33u, 0x00005e32u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00005e34u, 0x00005e33u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005e35u, 0x00005e2cu, 0x00005e34u, 0x0003003eu, 0x00005e23u, 0x00005e35u, 0x0004003du, 0x00000008u, 0x00005e37u, 0x00005e2bu, 0x00050041u, 0x000001c4u, 0x00005e38u, 0x00002158u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00005e39u, 0x00005e38u, 0x00040072u, 0x00000008u, 0x00005e3au, 0x00005e39u, 0x00050041u, 0x00000046u, 0x00005e3bu, 0x00005e22u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00005e3cu, 0x00005e3bu, 0x00050084u, 0x00000008u, 0x00005e3du, 0x00005e3au, 0x00005e3cu, 0x00050041u, 0x000001c4u, 0x00005e3eu, 0x00002158u, 0x00000386u, 0x0004003du, 0x00000012u, 0x00005e3fu, 0x00005e3eu, 0x00040072u, 0x00000008u, 0x00005e40u, 0x00005e3fu, 0x0004003du, 0x00000008u, 0x00005e42u, 0x00005e30u, 0x00050084u, 0x00000008u, 0x00005e43u, 0x00005e40u, 0x00005e42u, 0x00050080u, 0x00000008u, 0x00005e44u, 0x00005e3du, 0x00005e43u, 0x00050080u, 0x00000008u, 0x00005e45u, 0x00005e44u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00005e46u, 0x00005e45u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005e47u, 0x00005e37u, 0x00005e46u, 0x0003003eu, 0x00005e24u, 0x00005e47u, 0x0004003du, 0x00000008u, 0x00005e49u, 0x00005e2bu, 0x00050041u, 0x000001c4u, 0x00005e4au, 0x00002158u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005e4bu, 0x00005e4au, 0x00040072u, 0x00000008u, 0x00005e4cu, 0x00005e4bu, 0x0004003du, 0x00000008u, 0x00005e4eu, 0x00005e3bu, 0x00050084u, 0x00000008u, 0x00005e4fu, 0x00005e4cu, 0x00005e4eu, 0x00050080u, 0x00000008u, 0x00005e50u, 0x00005e4fu, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00005e51u, 0x00005e50u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005e52u, 0x00005e49u, 0x00005e51u, 0x0003003eu, 0x00005e25u, 0x00005e52u, 0x0004003du, 0x00000008u, 0x00005e54u, 0x00005e2bu, 0x0003003eu, 0x00005e26u, 0x00005e54u, 0x00040072u, 0x00000012u, 0x00005e56u, 0x00005e35u, 0x00040072u, 0x00000012u, 0x00005e58u, 0x00005e47u, 0x00040072u, 0x00000012u, 0x00005e5au, 0x00005e52u, 0x00040072u, 0x00000012u, 0x00005e5cu, 0x00005e54u, 0x00070050u, 0x00000013u, 0x00005e5du, 0x00005e56u, 0x00005e58u, 0x00005e5au, 0x00005e5cu, 0x0003003eu, 0x00005e27u, 0x00005e5du, 0x0003003eu, 0x00002148u, 0x00005e5du, 0x000200f9u, 0x00002369u, 0x000200f8u, 0x00002369u, 0x000700f5u, 0x00000013u, 0x0000ab7au, 0x0000a1a1u, 0x00004aceu, 0x00005e5du, 0x0000236au, 0x000200f9u, 0x00002349u, 0x000200f8u, 0x0000234au, 0x0003003eu, 0x00002149u, 0x0000988bu, 0x0003003eu, 0x0000214au, 0x00002986u, 0x00040072u, 0x00000009u, 0x000045feu, 0x0000988bu, 0x000600cau, 0x00000009u, 0x000045ffu, 0x000045feu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000045f7u, 0x000045ffu, 0x00050041u, 0x00000046u, 0x00004600u, 0x000045f7u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00004601u, 0x00004600u, 0x00050041u, 0x000001c4u, 0x00004602u, 0x0000214au, 0x0000032du, 0x0004003du, 0x00000012u, 0x00004603u, 0x00004602u, 0x00040072u, 0x00000008u, 0x00004604u, 0x00004603u, 0x00050041u, 0x00000046u, 0x00004605u, 0x000045f7u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00004606u, 0x00004605u, 0x00050084u, 0x00000008u, 0x00004607u, 0x00004604u, 0x00004606u, 0x00050080u, 0x00000008u, 0x00004608u, 0x00004607u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00004609u, 0x00004608u, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000460au, 0x00004601u, 0x00004609u, 0x0003003eu, 0x000045f8u, 0x0000460au, 0x0004003du, 0x00000008u, 0x0000460cu, 0x00004600u, 0x00050041u, 0x000001c4u, 0x0000460du, 0x0000214au, 0x0000045cu, 0x0004003du, 0x00000012u, 0x0000460eu, 0x0000460du, 0x00040072u, 0x00000008u, 0x0000460fu, 0x0000460eu, 0x00050041u, 0x00000046u, 0x00004610u, 0x000045f7u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00004611u, 0x00004610u, 0x00050084u, 0x00000008u, 0x00004612u, 0x0000460fu, 0x00004611u, 0x00050041u, 0x000001c4u, 0x00004613u, 0x0000214au, 0x00000386u, 0x0004003du, 0x00000012u, 0x00004614u, 0x00004613u, 0x00040072u, 0x00000008u, 0x00004615u, 0x00004614u, 0x0004003du, 0x00000008u, 0x00004617u, 0x00004605u, 0x00050084u, 0x00000008u, 0x00004618u, 0x00004615u, 0x00004617u, 0x00050080u, 0x00000008u, 0x00004619u, 0x00004612u, 0x00004618u, 0x00050080u, 0x00000008u, 0x0000461au, 0x00004619u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x0000461bu, 0x0000461au, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000461cu, 0x0000460cu, 0x0000461bu, 0x0003003eu, 0x000045f9u, 0x0000461cu, 0x0004003du, 0x00000008u, 0x0000461eu, 0x00004600u, 0x00050041u, 0x000001c4u, 0x0000461fu, 0x0000214au, 0x00000464u, 0x0004003du, 0x00000012u, 0x00004620u, 0x0000461fu, 0x00040072u, 0x00000008u, 0x00004621u, 0x00004620u, 0x0004003du, 0x00000008u, 0x00004623u, 0x00004610u, 0x00050084u, 0x00000008u, 0x00004624u, 0x00004621u, 0x00004623u, 0x00050080u, 0x00000008u, 0x00004625u, 0x00004624u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00004626u, 0x00004625u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00004627u, 0x0000461eu, 0x00004626u, 0x0003003eu, 0x000045fau, 0x00004627u, 0x0004003du, 0x00000008u, 0x00004629u, 0x00004600u, 0x0003003eu, 0x000045fbu, 0x00004629u, 0x00040072u, 0x00000012u, 0x0000462bu, 0x0000460au, 0x00040072u, 0x00000012u, 0x0000462du, 0x0000461cu, 0x00040072u, 0x00000012u, 0x0000462fu, 0x00004627u, 0x00040072u, 0x00000012u, 0x00004631u, 0x00004629u, 0x00070050u, 0x00000013u, 0x00004632u, 0x0000462bu, 0x0000462du, 0x0000462fu, 0x00004631u, 0x0003003eu, 0x000045fcu, 0x00004632u, 0x0003003eu, 0x00002148u, 0x00004632u, 0x000200f9u, 0x00002349u, 0x000200f8u, 0x00002349u, 0x000700f5u, 0x00000013u, 0x0000e9ccu, 0x0000a018u, 0x0000234au, 0x00009ffbu, 0x00002369u, 0x000700f5u, 0x00000013u, 0x0000e92cu, 0x00009f34u, 0x0000234au, 0x00009f17u, 0x00002369u, 0x000700f5u, 0x00000013u, 0x0000e88cu, 0x00009e4du, 0x0000234au, 0x00009e30u, 0x00002369u, 0x000700f5u, 0x00000013u, 0x0000e7ecu, 0x00009d65u, 0x0000234au, 0x00009d48u, 0x00002369u, 0x000700f5u, 0x00000013u, 0x0000ab79u, 0x00004632u, 0x0000234au, 0x0000ab7au, 0x00002369u, 0x000200f9u, 0x00002343u, 0x000200f8u, 0x00002343u, 0x000700f5u, 0x00000013u, 0x0000e9cbu, 0x0000a018u, 0x000022f7u, 0x0000e9ccu, 0x00002349u, 0x000700f5u, 0x00000013u, 0x0000e92bu, 0x00009f34u, 0x000022f7u, 0x0000e92cu, 0x00002349u, 0x000700f5u, 0x00000013u, 0x0000e88bu, 0x00009e4du, 0x000022f7u, 0x0000e88cu, 0x00002349u, 0x000700f5u, 0x00000013u, 0x0000e7ebu, 0x00009d65u, 0x000022f7u, 0x0000e7ecu, 0x00002349u, 0x000700f5u, 0x00000013u, 0x0000aad7u, 0x0000aae6u, 0x000022f7u, 0x0000ab79u, 0x00002349u, 0x000600a9u, 0x00000008u, 0x00002371u, 0x000021f2u, 0x0000022au, 0x00000220u, 0x000500c3u, 0x00000008u, 0x00002372u, 0x00007f17u, 0x00002371u, 0x000500c3u, 0x00000008u, 0x00002374u, 0x00002447u, 0x0000022du, 0x000500c7u, 0x00000008u, 0x00002376u, 0x00002447u, 0x00000230u, 0x0003003eu, 0x0000215bu, 0x00007f1eu, 0x0003003eu, 0x0000215cu, 0x00002372u, 0x0003003eu, 0x0000215du, 0x00002374u, 0x0003003eu, 0x0000215eu, 0x00002376u, 0x000500b1u, 0x00000069u, 0x00005e62u, 0x00002374u, 0x0000022du, 0x000300f7u, 0x00005e63u, 0x00000000u, 0x000400fau, 0x00005e62u, 0x00005e64u, 0x00005e65u, 0x000200f8u, 0x00005e65u, 0x000500aau, 0x00000069u, 0x00005e73u, 0x00002374u, 0x0000022du, 0x000300f7u, 0x00005e74u, 0x00000000u, 0x000400fau, 0x00005e73u, 0x00005e75u, 0x00005e76u, 0x000200f8u, 0x00005e76u, 0x0003003eu, 0x0000215fu, 0x00000220u, 0x000200f9u, 0x00005e74u, 0x000200f8u, 0x00005e75u, 0x0004003du, 0x00000011u, 0x00005e9fu, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00005ea0u, 0x00005e9fu, 0x00000344u, 0x00040071u, 0x00000006u, 0x00005ea1u, 0x00005ea0u, 0x0004007cu, 0x00000008u, 0x00005ea2u, 0x00005ea1u, 0x0003003eu, 0x00005e9eu, 0x00005ea2u, 0x0003003eu, 0x0000215fu, 0x00005ea2u, 0x000200f9u, 0x00005e74u, 0x000200f8u, 0x00005e74u, 0x000700f5u, 0x00000008u, 0x0000a5b6u, 0x00005ea2u, 0x00005e75u, 0x00000220u, 0x00005e76u, 0x000200f9u, 0x00005e63u, 0x000200f8u, 0x00005e64u, 0x000500c7u, 0x00000008u, 0x00005e68u, 0x00002372u, 0x00000230u, 0x00050084u, 0x00000008u, 0x00005e69u, 0x00005e68u, 0x00000233u, 0x000500c7u, 0x00000008u, 0x00005e6bu, 0x00007f1eu, 0x00000230u, 0x00050080u, 0x00000008u, 0x00005e6cu, 0x00005e69u, 0x00005e6bu, 0x0003003eu, 0x00005e5eu, 0x00000392u, 0x00060041u, 0x0000007bu, 0x00005e6du, 0x00005e5eu, 0x00002374u, 0x00005e6cu, 0x0004003du, 0x0000000fu, 0x00005e6eu, 0x00005e6du, 0x00040071u, 0x00000006u, 0x00005e6fu, 0x00005e6eu, 0x0004007cu, 0x00000008u, 0x00005e70u, 0x00005e6fu, 0x00050084u, 0x00000008u, 0x00005e71u, 0x00005e70u, 0x000003a0u, 0x0003003eu, 0x0000215fu, 0x00005e71u, 0x000200f9u, 0x00005e63u, 0x000200f8u, 0x00005e63u, 0x000700f5u, 0x00000008u, 0x0000a5b5u, 0x00005e71u, 0x00005e64u, 0x0000a5b6u, 0x00005e74u, 0x000500aau, 0x00000069u, 0x00005e79u, 0x00002376u, 0x00000230u, 0x000300f7u, 0x00005e7au, 0x00000000u, 0x000400fau, 0x00005e79u, 0x00005e7bu, 0x00005e7cu, 0x000200f8u, 0x00005e7cu, 0x000500aau, 0x00000069u, 0x00005e7eu, 0x00002376u, 0x0000022du, 0x000300f7u, 0x00005e7fu, 0x00000000u, 0x000400fau, 0x00005e7eu, 0x00005e80u, 0x00005e81u, 0x000200f8u, 0x00005e81u, 0x000500afu, 0x00000069u, 0x00005e84u, 0x00002374u, 0x0000022du, 0x000300f7u, 0x00005e85u, 0x00000000u, 0x000400fau, 0x00005e84u, 0x00005e86u, 0x00005e87u, 0x000200f8u, 0x00005e87u, 0x000500c7u, 0x00000008u, 0x00005e95u, 0x0000a5b5u, 0x0000023cu, 0x0003003eu, 0x00005e5fu, 0x00005e95u, 0x000200f9u, 0x00005e85u, 0x000200f8u, 0x00005e86u, 0x000500c7u, 0x00000008u, 0x00005e89u, 0x00002374u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00005e8bu, 0x00002372u, 0x00000230u, 0x00050084u, 0x00000008u, 0x00005e8cu, 0x00005e8bu, 0x00000233u, 0x000500c7u, 0x00000008u, 0x00005e8eu, 0x00007f1eu, 0x00000230u, 0x00050080u, 0x00000008u, 0x00005e8fu, 0x00005e8cu, 0x00005e8eu, 0x0003003eu, 0x00005e60u, 0x00000392u, 0x00060041u, 0x0000007bu, 0x00005e90u, 0x00005e60u, 0x00005e89u, 0x00005e8fu, 0x0004003du, 0x0000000fu, 0x00005e91u, 0x00005e90u, 0x00040071u, 0x00000006u, 0x00005e92u, 0x00005e91u, 0x0004007cu, 0x00000008u, 0x00005e93u, 0x00005e92u, 0x0003003eu, 0x00005e5fu, 0x00005e93u, 0x000200f9u, 0x00005e85u, 0x000200f8u, 0x00005e85u, 0x000700f5u, 0x00000008u, 0x0000a5bbu, 0x00005e93u, 0x00005e86u, 0x00005e95u, 0x00005e87u, 0x0003003eu, 0x00002160u, 0x0000a5bbu, 0x000500aau, 0x00000069u, 0x00005e98u, 0x00002376u, 0x0000022au, 0x000300f7u, 0x00005e99u, 0x00000000u, 0x000400fau, 0x00005e98u, 0x00005e9au, 0x00005e99u, 0x000200f8u, 0x00005e9au, 0x000400c8u, 0x00000008u, 0x00005e9cu, 0x0000a5bbu, 0x000500c7u, 0x00000008u, 0x00005e9du, 0x00005e9cu, 0x0000023cu, 0x0003003eu, 0x00002160u, 0x00005e9du, 0x000200f9u, 0x00005e99u, 0x000200f8u, 0x00005e99u, 0x000700f5u, 0x00000008u, 0x0000a5c3u, 0x0000a5bbu, 0x00005e85u, 0x00005e9du, 0x00005e9au, 0x000200f9u, 0x00005e7fu, 0x000200f8u, 0x00005e80u, 0x0004003du, 0x00000011u, 0x00005ea4u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00005ea5u, 0x00005ea4u, 0x00000334u, 0x00040071u, 0x00000006u, 0x00005ea6u, 0x00005ea5u, 0x0004007cu, 0x00000008u, 0x00005ea7u, 0x00005ea6u, 0x0003003eu, 0x00005ea3u, 0x00005ea7u, 0x0003003eu, 0x00002160u, 0x00005ea7u, 0x000200f9u, 0x00005e7fu, 0x000200f8u, 0x00005e7fu, 0x000700f5u, 0x00000008u, 0x0000a5c2u, 0x00005ea7u, 0x00005e80u, 0x0000a5c3u, 0x00005e99u, 0x000200f9u, 0x00005e7au, 0x000200f8u, 0x00005e7bu, 0x0003003eu, 0x00002160u, 0x00000220u, 0x000200f9u, 0x00005e7au, 0x000200f8u, 0x00005e7au, 0x000700f5u, 0x00000008u, 0x0000a5c1u, 0x00000220u, 0x00005e7bu, 0x0000a5c2u, 0x00005e7fu, 0x0003003eu, 0x00002159u, 0x0000a5b5u, 0x0003003eu, 0x0000215au, 0x0000a5c1u, 0x000300f7u, 0x0000237cu, 0x00000000u, 0x000400fau, 0x000021efu, 0x0000237du, 0x0000237eu, 0x000200f8u, 0x0000237eu, 0x0004003du, 0x00000010u, 0x000023beu, 0x00002102u, 0x0004003du, 0x00000011u, 0x00006263u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00006264u, 0x00006263u, 0x00000334u, 0x000500c4u, 0x00000011u, 0x00006265u, 0x00006264u, 0x00000336u, 0x000500c5u, 0x00000011u, 0x00006266u, 0x00006265u, 0x00000338u, 0x0004007cu, 0x00000012u, 0x00006267u, 0x00006266u, 0x0003003eu, 0x00006262u, 0x00006267u, 0x000d0050u, 0x000001e4u, 0x000023c3u, 0x00002972u, 0x00002974u, 0x00002976u, 0x00002978u, 0x000023beu, 0x00001dbfu, 0x0000988bu, 0x0000aad7u, 0x0000ab84u, 0x00006267u, 0x0003003eu, 0x00007c8cu, 0x00002972u, 0x0003003eu, 0x00007c8du, 0x00002974u, 0x0003003eu, 0x00007c8eu, 0x00002976u, 0x0003003eu, 0x00007c8fu, 0x00002978u, 0x0003003eu, 0x00007c90u, 0x000023beu, 0x0003003eu, 0x00007c91u, 0x00001dbfu, 0x0003003eu, 0x00007c92u, 0x0000988bu, 0x0003003eu, 0x00007c93u, 0x0000aad7u, 0x0003003eu, 0x00007c94u, 0x0000ab84u, 0x0003003eu, 0x00007c95u, 0x00006267u, 0x0003003eu, 0x00007cabu, 0x00002972u, 0x0003003eu, 0x00007cacu, 0x00002974u, 0x0003003eu, 0x00007cadu, 0x00002976u, 0x0003003eu, 0x00007caeu, 0x00002978u, 0x0003003eu, 0x00007cafu, 0x000023beu, 0x0003003eu, 0x00007cb0u, 0x00001dbfu, 0x0003003eu, 0x00007cb1u, 0x0000988bu, 0x0003003eu, 0x00007cb2u, 0x0000aad7u, 0x0003003eu, 0x00007cb3u, 0x0000ab84u, 0x0003003eu, 0x00007cb4u, 0x00006267u, 0x0003003eu, 0x00002177u, 0x00002441u, 0x0003003eu, 0x00002178u, 0x00002443u, 0x0003003eu, 0x00002179u, 0x0000a5c1u, 0x0003003eu, 0x0000217au, 0x00002282u, 0x0003003eu, 0x0000217bu, 0x000021dau, 0x0003003eu, 0x0000217cu, 0x000021ddu, 0x00050041u, 0x0000007bu, 0x00006281u, 0x00002177u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006282u, 0x00006281u, 0x00040071u, 0x00000006u, 0x00006283u, 0x00006282u, 0x0004007cu, 0x00000008u, 0x00006284u, 0x00006283u, 0x00050041u, 0x0000007bu, 0x00006285u, 0x00002178u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006286u, 0x00006285u, 0x00040071u, 0x00000006u, 0x00006287u, 0x00006286u, 0x0004007cu, 0x00000008u, 0x00006288u, 0x00006287u, 0x0003003eu, 0x00006c58u, 0x00002972u, 0x0003003eu, 0x00006c59u, 0x000023beu, 0x0003003eu, 0x00006c5au, 0x00001dbfu, 0x0003003eu, 0x00006c5bu, 0x0000988bu, 0x0003003eu, 0x00006c5cu, 0x0000aad7u, 0x0003003eu, 0x00006c5eu, 0x00006267u, 0x0003003eu, 0x0000626au, 0x00006284u, 0x0003003eu, 0x0000626bu, 0x00006288u, 0x000300f7u, 0x000062d8u, 0x00000000u, 0x000f00fbu, 0x00006284u, 0x000062d9u, 0x00000000u, 0x000062dau, 0x00000001u, 0x000062dbu, 0x00000002u, 0x000062dcu, 0x00000004u, 0x000062ddu, 0x00000007u, 0x000062deu, 0x00000006u, 0x000062dfu, 0x000200f8u, 0x000062dfu, 0x0003003eu, 0x000062d4u, 0x00001991u, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062deu, 0x00040072u, 0x00000008u, 0x000062f8u, 0x00006267u, 0x00060050u, 0x00000044u, 0x000062f9u, 0x000062f8u, 0x000062f8u, 0x000062f8u, 0x0003003eu, 0x000062d4u, 0x000062f9u, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062ddu, 0x0004003du, 0x00000010u, 0x000062f2u, 0x00006c59u, 0x0008004fu, 0x00000047u, 0x000062f3u, 0x000062f2u, 0x000062f2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000062f4u, 0x000062f3u, 0x0004007cu, 0x00000044u, 0x000062f5u, 0x000062f4u, 0x0003003eu, 0x000062d4u, 0x000062f5u, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062dcu, 0x0004003du, 0x00000013u, 0x000062eeu, 0x00006c5cu, 0x0008004fu, 0x000004b6u, 0x000062efu, 0x000062eeu, 0x000062eeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000062f0u, 0x000062efu, 0x0003003eu, 0x000062d4u, 0x000062f0u, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062dbu, 0x0004003du, 0x00000013u, 0x000062eau, 0x00006c5bu, 0x0008004fu, 0x000004b6u, 0x000062ebu, 0x000062eau, 0x000062eau, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000062ecu, 0x000062ebu, 0x0003003eu, 0x000062d4u, 0x000062ecu, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062dau, 0x0004003du, 0x00000013u, 0x000062e6u, 0x00006c5au, 0x0008004fu, 0x000004b6u, 0x000062e7u, 0x000062e6u, 0x000062e6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000062e8u, 0x000062e7u, 0x0003003eu, 0x000062d4u, 0x000062e8u, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062d9u, 0x0004003du, 0x00000010u, 0x000062e1u, 0x00006c58u, 0x0008004fu, 0x00000047u, 0x000062e2u, 0x000062e1u, 0x000062e1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000062e3u, 0x000062e2u, 0x0004007cu, 0x00000044u, 0x000062e4u, 0x000062e3u, 0x0003003eu, 0x000062d4u, 0x000062e4u, 0x000200f9u, 0x000062d8u, 0x000200f8u, 0x000062d8u, 0x001100f5u, 0x00000044u, 0x0000b131u, 0x000062e4u, 0x000062d9u, 0x000062e8u, 0x000062dau, 0x000062ecu, 0x000062dbu, 0x000062f0u, 0x000062dcu, 0x000062f5u, 0x000062ddu, 0x000062f9u, 0x000062deu, 0x00001991u, 0x000062dfu, 0x000300f7u, 0x000062fbu, 0x00000000u, 0x000d00fbu, 0x00006288u, 0x000062fcu, 0x00000000u, 0x000062fdu, 0x00000001u, 0x000062feu, 0x00000002u, 0x000062ffu, 0x00000004u, 0x00006300u, 0x00000006u, 0x00006301u, 0x000200f8u, 0x00006301u, 0x0003003eu, 0x000062d5u, 0x00001990u, 0x000200f9u, 0x000062fbu, 0x000200f8u, 0x00006300u, 0x00050041u, 0x0000007bu, 0x00006c69u, 0x00006c59u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006310u, 0x00006c69u, 0x00040071u, 0x00000006u, 0x00006311u, 0x00006310u, 0x0004007cu, 0x00000008u, 0x00006312u, 0x00006311u, 0x0003003eu, 0x000062d5u, 0x00006312u, 0x000200f9u, 0x000062fbu, 0x000200f8u, 0x000062ffu, 0x00050041u, 0x000001c4u, 0x00006c68u, 0x00006c5cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000630du, 0x00006c68u, 0x00040072u, 0x00000008u, 0x0000630eu, 0x0000630du, 0x0003003eu, 0x000062d5u, 0x0000630eu, 0x000200f9u, 0x000062fbu, 0x000200f8u, 0x000062feu, 0x00050041u, 0x000001c4u, 0x00006c67u, 0x00006c5bu, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000630au, 0x00006c67u, 0x00040072u, 0x00000008u, 0x0000630bu, 0x0000630au, 0x0003003eu, 0x000062d5u, 0x0000630bu, 0x000200f9u, 0x000062fbu, 0x000200f8u, 0x000062fdu, 0x00050041u, 0x000001c4u, 0x00006c66u, 0x00006c5au, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006307u, 0x00006c66u, 0x00040072u, 0x00000008u, 0x00006308u, 0x00006307u, 0x0003003eu, 0x000062d5u, 0x00006308u, 0x000200f9u, 0x000062fbu, 0x000200f8u, 0x000062fcu, 0x00050041u, 0x0000007bu, 0x00006c65u, 0x00006c58u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006303u, 0x00006c65u, 0x00040071u, 0x00000006u, 0x00006304u, 0x00006303u, 0x0004007cu, 0x00000008u, 0x00006305u, 0x00006304u, 0x0003003eu, 0x000062d5u, 0x00006305u, 0x000200f9u, 0x000062fbu, 0x000200f8u, 0x000062fbu, 0x000f00f5u, 0x00000008u, 0x0000b132u, 0x00006305u, 0x000062fcu, 0x00006308u, 0x000062fdu, 0x0000630bu, 0x000062feu, 0x0000630eu, 0x000062ffu, 0x00006312u, 0x00006300u, 0x00001990u, 0x00006301u, 0x00050051u, 0x00000008u, 0x00006315u, 0x0000b131u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006316u, 0x0000b131u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006317u, 0x0000b131u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006318u, 0x00006315u, 0x00006316u, 0x00006317u, 0x0000b132u, 0x0003003eu, 0x000062d6u, 0x00006318u, 0x0003003eu, 0x00006268u, 0x00006318u, 0x00050041u, 0x0000007bu, 0x0000628bu, 0x00002177u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000628cu, 0x0000628bu, 0x00040071u, 0x00000006u, 0x0000628du, 0x0000628cu, 0x0004007cu, 0x00000008u, 0x0000628eu, 0x0000628du, 0x00050041u, 0x0000007bu, 0x0000628fu, 0x00002178u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006290u, 0x0000628fu, 0x00040071u, 0x00000006u, 0x00006291u, 0x00006290u, 0x0004007cu, 0x00000008u, 0x00006292u, 0x00006291u, 0x0003003eu, 0x00006c6au, 0x00002974u, 0x0003003eu, 0x00006c6bu, 0x000023beu, 0x0003003eu, 0x00006c6cu, 0x00001dbfu, 0x0003003eu, 0x00006c6du, 0x0000988bu, 0x0003003eu, 0x00006c6eu, 0x0000aad7u, 0x0003003eu, 0x0000626eu, 0x0000628eu, 0x0003003eu, 0x0000626fu, 0x00006292u, 0x000300f7u, 0x0000631du, 0x00000000u, 0x000d00fbu, 0x0000628eu, 0x0000631eu, 0x00000000u, 0x0000631fu, 0x00000001u, 0x00006320u, 0x00000002u, 0x00006321u, 0x00000004u, 0x00006322u, 0x00000007u, 0x00006323u, 0x000200f8u, 0x00006323u, 0x00050041u, 0x0000007bu, 0x00006c74u, 0x00006c6au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000633bu, 0x00006c74u, 0x00040071u, 0x00000006u, 0x0000633cu, 0x0000633bu, 0x0004007cu, 0x00000008u, 0x0000633du, 0x0000633cu, 0x000500c4u, 0x00000008u, 0x0000633eu, 0x0000633du, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006c75u, 0x00006c6au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006340u, 0x00006c75u, 0x00040071u, 0x00000006u, 0x00006341u, 0x00006340u, 0x0004007cu, 0x00000008u, 0x00006342u, 0x00006341u, 0x000500c5u, 0x00000008u, 0x00006343u, 0x0000633eu, 0x00006342u, 0x00060050u, 0x00000044u, 0x00006344u, 0x00006343u, 0x00006343u, 0x00006343u, 0x0003003eu, 0x00006319u, 0x00006344u, 0x000200f9u, 0x0000631du, 0x000200f8u, 0x00006322u, 0x0004003du, 0x00000010u, 0x00006336u, 0x00006c6bu, 0x0008004fu, 0x00000047u, 0x00006337u, 0x00006336u, 0x00006336u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006338u, 0x00006337u, 0x0004007cu, 0x00000044u, 0x00006339u, 0x00006338u, 0x0003003eu, 0x00006319u, 0x00006339u, 0x000200f9u, 0x0000631du, 0x000200f8u, 0x00006321u, 0x0004003du, 0x00000013u, 0x00006332u, 0x00006c6eu, 0x0008004fu, 0x000004b6u, 0x00006333u, 0x00006332u, 0x00006332u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006334u, 0x00006333u, 0x0003003eu, 0x00006319u, 0x00006334u, 0x000200f9u, 0x0000631du, 0x000200f8u, 0x00006320u, 0x0004003du, 0x00000013u, 0x0000632eu, 0x00006c6du, 0x0008004fu, 0x000004b6u, 0x0000632fu, 0x0000632eu, 0x0000632eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006330u, 0x0000632fu, 0x0003003eu, 0x00006319u, 0x00006330u, 0x000200f9u, 0x0000631du, 0x000200f8u, 0x0000631fu, 0x0004003du, 0x00000013u, 0x0000632au, 0x00006c6cu, 0x0008004fu, 0x000004b6u, 0x0000632bu, 0x0000632au, 0x0000632au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000632cu, 0x0000632bu, 0x0003003eu, 0x00006319u, 0x0000632cu, 0x000200f9u, 0x0000631du, 0x000200f8u, 0x0000631eu, 0x0004003du, 0x00000010u, 0x00006325u, 0x00006c6au, 0x0008004fu, 0x00000047u, 0x00006326u, 0x00006325u, 0x00006325u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006327u, 0x00006326u, 0x0004007cu, 0x00000044u, 0x00006328u, 0x00006327u, 0x0003003eu, 0x00006319u, 0x00006328u, 0x000200f9u, 0x0000631du, 0x000200f8u, 0x0000631du, 0x000f00f5u, 0x00000044u, 0x0000b149u, 0x00006328u, 0x0000631eu, 0x0000632cu, 0x0000631fu, 0x00006330u, 0x00006320u, 0x00006334u, 0x00006321u, 0x00006339u, 0x00006322u, 0x00006344u, 0x00006323u, 0x000300f7u, 0x00006346u, 0x00000000u, 0x000d00fbu, 0x00006292u, 0x00006347u, 0x00000000u, 0x00006348u, 0x00000001u, 0x00006349u, 0x00000002u, 0x0000634au, 0x00000004u, 0x0000634bu, 0x00000006u, 0x0000634cu, 0x000200f8u, 0x0000634cu, 0x0003003eu, 0x0000631au, 0x00001990u, 0x000200f9u, 0x00006346u, 0x000200f8u, 0x0000634bu, 0x00050041u, 0x0000007bu, 0x00006c7au, 0x00006c6bu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000635bu, 0x00006c7au, 0x00040071u, 0x00000006u, 0x0000635cu, 0x0000635bu, 0x0004007cu, 0x00000008u, 0x0000635du, 0x0000635cu, 0x0003003eu, 0x0000631au, 0x0000635du, 0x000200f9u, 0x00006346u, 0x000200f8u, 0x0000634au, 0x00050041u, 0x000001c4u, 0x00006c79u, 0x00006c6eu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006358u, 0x00006c79u, 0x00040072u, 0x00000008u, 0x00006359u, 0x00006358u, 0x0003003eu, 0x0000631au, 0x00006359u, 0x000200f9u, 0x00006346u, 0x000200f8u, 0x00006349u, 0x00050041u, 0x000001c4u, 0x00006c78u, 0x00006c6du, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006355u, 0x00006c78u, 0x00040072u, 0x00000008u, 0x00006356u, 0x00006355u, 0x0003003eu, 0x0000631au, 0x00006356u, 0x000200f9u, 0x00006346u, 0x000200f8u, 0x00006348u, 0x00050041u, 0x000001c4u, 0x00006c77u, 0x00006c6cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006352u, 0x00006c77u, 0x00040072u, 0x00000008u, 0x00006353u, 0x00006352u, 0x0003003eu, 0x0000631au, 0x00006353u, 0x000200f9u, 0x00006346u, 0x000200f8u, 0x00006347u, 0x00050041u, 0x0000007bu, 0x00006c76u, 0x00006c6au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000634eu, 0x00006c76u, 0x00040071u, 0x00000006u, 0x0000634fu, 0x0000634eu, 0x0004007cu, 0x00000008u, 0x00006350u, 0x0000634fu, 0x0003003eu, 0x0000631au, 0x00006350u, 0x000200f9u, 0x00006346u, 0x000200f8u, 0x00006346u, 0x000f00f5u, 0x00000008u, 0x0000b14au, 0x00006350u, 0x00006347u, 0x00006353u, 0x00006348u, 0x00006356u, 0x00006349u, 0x00006359u, 0x0000634au, 0x0000635du, 0x0000634bu, 0x00001990u, 0x0000634cu, 0x00050051u, 0x00000008u, 0x00006360u, 0x0000b149u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006361u, 0x0000b149u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006362u, 0x0000b149u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006363u, 0x00006360u, 0x00006361u, 0x00006362u, 0x0000b14au, 0x0003003eu, 0x0000631bu, 0x00006363u, 0x0003003eu, 0x0000626cu, 0x00006363u, 0x00050041u, 0x0000007bu, 0x00006295u, 0x00002177u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006296u, 0x00006295u, 0x00040071u, 0x00000006u, 0x00006297u, 0x00006296u, 0x0004007cu, 0x00000008u, 0x00006298u, 0x00006297u, 0x00050041u, 0x0000007bu, 0x00006299u, 0x00002178u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x0000629au, 0x00006299u, 0x00040071u, 0x00000006u, 0x0000629bu, 0x0000629au, 0x0004007cu, 0x00000008u, 0x0000629cu, 0x0000629bu, 0x0003003eu, 0x00006c7bu, 0x00002976u, 0x0003003eu, 0x00006c7cu, 0x000023beu, 0x0003003eu, 0x00006c7du, 0x00001dbfu, 0x0003003eu, 0x00006c7eu, 0x0000988bu, 0x0003003eu, 0x00006c7fu, 0x0000aad7u, 0x0003003eu, 0x00006c80u, 0x0000ab84u, 0x0003003eu, 0x00006272u, 0x00006298u, 0x0003003eu, 0x00006273u, 0x0000629cu, 0x000300f7u, 0x00006368u, 0x00000000u, 0x001700fbu, 0x00006298u, 0x00006369u, 0x00000000u, 0x0000636au, 0x00000007u, 0x0000636bu, 0x00000001u, 0x0000636cu, 0x00000002u, 0x0000636du, 0x00000004u, 0x0000636eu, 0x00000008u, 0x0000636fu, 0x00000009u, 0x00006370u, 0x0000000bu, 0x00006371u, 0x0000000du, 0x00006372u, 0x0000000fu, 0x00006373u, 0x000200f8u, 0x00006373u, 0x00050041u, 0x0000007bu, 0x00006c87u, 0x00006c7bu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000063a0u, 0x00006c87u, 0x00040071u, 0x00000006u, 0x000063a1u, 0x000063a0u, 0x0004007cu, 0x00000008u, 0x000063a2u, 0x000063a1u, 0x000500c4u, 0x00000008u, 0x000063a3u, 0x000063a2u, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006c88u, 0x00006c7bu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000063a5u, 0x00006c88u, 0x00040071u, 0x00000006u, 0x000063a6u, 0x000063a5u, 0x0004007cu, 0x00000008u, 0x000063a7u, 0x000063a6u, 0x000500c5u, 0x00000008u, 0x000063a8u, 0x000063a3u, 0x000063a7u, 0x00060050u, 0x00000044u, 0x000063a9u, 0x000063a8u, 0x000063a8u, 0x000063a8u, 0x0003003eu, 0x00006364u, 0x000063a9u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x00006372u, 0x00040072u, 0x00000008u, 0x0000639du, 0x0000ab84u, 0x00060050u, 0x00000044u, 0x0000639eu, 0x0000639du, 0x0000639du, 0x0000639du, 0x0003003eu, 0x00006364u, 0x0000639eu, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x00006371u, 0x0004003du, 0x00000010u, 0x00006397u, 0x00006c7cu, 0x0008004fu, 0x00000047u, 0x00006398u, 0x00006397u, 0x00006397u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x00006399u, 0x00006398u, 0x0004007cu, 0x00000044u, 0x0000639au, 0x00006399u, 0x0003003eu, 0x00006364u, 0x0000639au, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x00006370u, 0x0004003du, 0x00000013u, 0x00006393u, 0x00006c7fu, 0x0008004fu, 0x000004b6u, 0x00006394u, 0x00006393u, 0x00006393u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00006395u, 0x00006394u, 0x0003003eu, 0x00006364u, 0x00006395u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x0000636fu, 0x0004003du, 0x00000013u, 0x0000638fu, 0x00006c7eu, 0x0008004fu, 0x000004b6u, 0x00006390u, 0x0000638fu, 0x0000638fu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00006391u, 0x00006390u, 0x0003003eu, 0x00006364u, 0x00006391u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x0000636eu, 0x0004003du, 0x00000010u, 0x0000638au, 0x00006c7cu, 0x0008004fu, 0x00000047u, 0x0000638bu, 0x0000638au, 0x0000638au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000638cu, 0x0000638bu, 0x0004007cu, 0x00000044u, 0x0000638du, 0x0000638cu, 0x0003003eu, 0x00006364u, 0x0000638du, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x0000636du, 0x0004003du, 0x00000013u, 0x00006386u, 0x00006c7fu, 0x0008004fu, 0x000004b6u, 0x00006387u, 0x00006386u, 0x00006386u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006388u, 0x00006387u, 0x0003003eu, 0x00006364u, 0x00006388u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x0000636cu, 0x0004003du, 0x00000013u, 0x00006382u, 0x00006c7eu, 0x0008004fu, 0x000004b6u, 0x00006383u, 0x00006382u, 0x00006382u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006384u, 0x00006383u, 0x0003003eu, 0x00006364u, 0x00006384u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x0000636bu, 0x00040072u, 0x00000044u, 0x00006380u, 0x0000f3bbu, 0x0003003eu, 0x00006364u, 0x00006380u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x0000636au, 0x00040072u, 0x00000044u, 0x0000637cu, 0x0000f3bbu, 0x0003003eu, 0x00006364u, 0x0000637cu, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x00006369u, 0x0004003du, 0x00000010u, 0x00006375u, 0x00006c7bu, 0x0008004fu, 0x00000047u, 0x00006376u, 0x00006375u, 0x00006375u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006377u, 0x00006376u, 0x0004007cu, 0x00000044u, 0x00006378u, 0x00006377u, 0x0003003eu, 0x00006364u, 0x00006378u, 0x000200f9u, 0x00006368u, 0x000200f8u, 0x00006368u, 0x001900f5u, 0x00000044u, 0x0000b162u, 0x00006378u, 0x00006369u, 0x0000637cu, 0x0000636au, 0x00006380u, 0x0000636bu, 0x00006384u, 0x0000636cu, 0x00006388u, 0x0000636du, 0x0000638du, 0x0000636eu, 0x00006391u, 0x0000636fu, 0x00006395u, 0x00006370u, 0x0000639au, 0x00006371u, 0x0000639eu, 0x00006372u, 0x000063a9u, 0x00006373u, 0x000300f7u, 0x000063abu, 0x00000000u, 0x000b00fbu, 0x0000629cu, 0x000063acu, 0x00000000u, 0x000063adu, 0x00000001u, 0x000063aeu, 0x00000002u, 0x000063afu, 0x00000004u, 0x000063b0u, 0x000200f8u, 0x000063b0u, 0x00050041u, 0x0000007bu, 0x00006c8cu, 0x00006c7cu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063bfu, 0x00006c8cu, 0x00040071u, 0x00000006u, 0x000063c0u, 0x000063bfu, 0x0004007cu, 0x00000008u, 0x000063c1u, 0x000063c0u, 0x0003003eu, 0x00006365u, 0x000063c1u, 0x000200f9u, 0x000063abu, 0x000200f8u, 0x000063afu, 0x00050041u, 0x000001c4u, 0x00006c8bu, 0x00006c7fu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063bcu, 0x00006c8bu, 0x00040072u, 0x00000008u, 0x000063bdu, 0x000063bcu, 0x0003003eu, 0x00006365u, 0x000063bdu, 0x000200f9u, 0x000063abu, 0x000200f8u, 0x000063aeu, 0x00050041u, 0x000001c4u, 0x00006c8au, 0x00006c7eu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063b9u, 0x00006c8au, 0x00040072u, 0x00000008u, 0x000063bau, 0x000063b9u, 0x0003003eu, 0x00006365u, 0x000063bau, 0x000200f9u, 0x000063abu, 0x000200f8u, 0x000063adu, 0x00040072u, 0x00000008u, 0x000063b7u, 0x0000ab84u, 0x0003003eu, 0x00006365u, 0x000063b7u, 0x000200f9u, 0x000063abu, 0x000200f8u, 0x000063acu, 0x00050041u, 0x0000007bu, 0x00006c89u, 0x00006c7bu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063b2u, 0x00006c89u, 0x00040071u, 0x00000006u, 0x000063b3u, 0x000063b2u, 0x0004007cu, 0x00000008u, 0x000063b4u, 0x000063b3u, 0x0003003eu, 0x00006365u, 0x000063b4u, 0x000200f9u, 0x000063abu, 0x000200f8u, 0x000063abu, 0x000d00f5u, 0x00000008u, 0x0000b163u, 0x000063b4u, 0x000063acu, 0x000063b7u, 0x000063adu, 0x000063bau, 0x000063aeu, 0x000063bdu, 0x000063afu, 0x000063c1u, 0x000063b0u, 0x00050051u, 0x00000008u, 0x000063c4u, 0x0000b162u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000063c5u, 0x0000b162u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000063c6u, 0x0000b162u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000063c7u, 0x000063c4u, 0x000063c5u, 0x000063c6u, 0x0000b163u, 0x0003003eu, 0x00006366u, 0x000063c7u, 0x0003003eu, 0x00006270u, 0x000063c7u, 0x00050041u, 0x0000007bu, 0x0000629fu, 0x00002177u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000062a0u, 0x0000629fu, 0x00040071u, 0x00000006u, 0x000062a1u, 0x000062a0u, 0x0004007cu, 0x00000008u, 0x000062a2u, 0x000062a1u, 0x00050041u, 0x0000007bu, 0x000062a3u, 0x00002178u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000062a4u, 0x000062a3u, 0x00040071u, 0x00000006u, 0x000062a5u, 0x000062a4u, 0x0004007cu, 0x00000008u, 0x000062a6u, 0x000062a5u, 0x0003003eu, 0x00006c8du, 0x00002978u, 0x0003003eu, 0x00006c8eu, 0x000023beu, 0x0003003eu, 0x00006c8fu, 0x00001dbfu, 0x0003003eu, 0x00006c90u, 0x0000988bu, 0x0003003eu, 0x00006c91u, 0x0000aad7u, 0x0003003eu, 0x00006276u, 0x000062a2u, 0x0003003eu, 0x00006277u, 0x000062a6u, 0x000300f7u, 0x000063ccu, 0x00000000u, 0x000d00fbu, 0x000062a2u, 0x000063cdu, 0x00000000u, 0x000063ceu, 0x00000001u, 0x000063cfu, 0x00000002u, 0x000063d0u, 0x00000004u, 0x000063d1u, 0x00000006u, 0x000063d2u, 0x000200f8u, 0x000063d2u, 0x0003003eu, 0x000063c8u, 0x00001991u, 0x000200f9u, 0x000063ccu, 0x000200f8u, 0x000063d1u, 0x0004003du, 0x00000010u, 0x000063e5u, 0x00006c8eu, 0x0008004fu, 0x00000047u, 0x000063e6u, 0x000063e5u, 0x000063e5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000063e7u, 0x000063e6u, 0x0004007cu, 0x00000044u, 0x000063e8u, 0x000063e7u, 0x0003003eu, 0x000063c8u, 0x000063e8u, 0x000200f9u, 0x000063ccu, 0x000200f8u, 0x000063d0u, 0x0004003du, 0x00000013u, 0x000063e1u, 0x00006c91u, 0x0008004fu, 0x000004b6u, 0x000063e2u, 0x000063e1u, 0x000063e1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000063e3u, 0x000063e2u, 0x0003003eu, 0x000063c8u, 0x000063e3u, 0x000200f9u, 0x000063ccu, 0x000200f8u, 0x000063cfu, 0x0004003du, 0x00000013u, 0x000063ddu, 0x00006c90u, 0x0008004fu, 0x000004b6u, 0x000063deu, 0x000063ddu, 0x000063ddu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000063dfu, 0x000063deu, 0x0003003eu, 0x000063c8u, 0x000063dfu, 0x000200f9u, 0x000063ccu, 0x000200f8u, 0x000063ceu, 0x0004003du, 0x00000013u, 0x000063d9u, 0x00006c8fu, 0x0008004fu, 0x000004b6u, 0x000063dau, 0x000063d9u, 0x000063d9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000063dbu, 0x000063dau, 0x0003003eu, 0x000063c8u, 0x000063dbu, 0x000200f9u, 0x000063ccu, 0x000200f8u, 0x000063cdu, 0x0004003du, 0x00000010u, 0x000063d4u, 0x00006c8du, 0x0008004fu, 0x00000047u, 0x000063d5u, 0x000063d4u, 0x000063d4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000063d6u, 0x000063d5u, 0x0004007cu, 0x00000044u, 0x000063d7u, 0x000063d6u, 0x0003003eu, 0x000063c8u, 0x000063d7u, 0x000200f9u, 0x000063ccu, 0x000200f8u, 0x000063ccu, 0x000f00f5u, 0x00000044u, 0x0000b17au, 0x000063d7u, 0x000063cdu, 0x000063dbu, 0x000063ceu, 0x000063dfu, 0x000063cfu, 0x000063e3u, 0x000063d0u, 0x000063e8u, 0x000063d1u, 0x00001991u, 0x000063d2u, 0x000300f7u, 0x000063eau, 0x00000000u, 0x000d00fbu, 0x000062a6u, 0x000063ebu, 0x00000000u, 0x000063ecu, 0x00000001u, 0x000063edu, 0x00000002u, 0x000063eeu, 0x00000004u, 0x000063efu, 0x00000006u, 0x000063f0u, 0x000200f8u, 0x000063f0u, 0x0003003eu, 0x000063c9u, 0x00001990u, 0x000200f9u, 0x000063eau, 0x000200f8u, 0x000063efu, 0x00050041u, 0x0000007bu, 0x00006c9bu, 0x00006c8eu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063ffu, 0x00006c9bu, 0x00040071u, 0x00000006u, 0x00006400u, 0x000063ffu, 0x0004007cu, 0x00000008u, 0x00006401u, 0x00006400u, 0x0003003eu, 0x000063c9u, 0x00006401u, 0x000200f9u, 0x000063eau, 0x000200f8u, 0x000063eeu, 0x00050041u, 0x000001c4u, 0x00006c9au, 0x00006c91u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063fcu, 0x00006c9au, 0x00040072u, 0x00000008u, 0x000063fdu, 0x000063fcu, 0x0003003eu, 0x000063c9u, 0x000063fdu, 0x000200f9u, 0x000063eau, 0x000200f8u, 0x000063edu, 0x00050041u, 0x000001c4u, 0x00006c99u, 0x00006c90u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063f9u, 0x00006c99u, 0x00040072u, 0x00000008u, 0x000063fau, 0x000063f9u, 0x0003003eu, 0x000063c9u, 0x000063fau, 0x000200f9u, 0x000063eau, 0x000200f8u, 0x000063ecu, 0x00050041u, 0x000001c4u, 0x00006c98u, 0x00006c8fu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000063f6u, 0x00006c98u, 0x00040072u, 0x00000008u, 0x000063f7u, 0x000063f6u, 0x0003003eu, 0x000063c9u, 0x000063f7u, 0x000200f9u, 0x000063eau, 0x000200f8u, 0x000063ebu, 0x00050041u, 0x0000007bu, 0x00006c97u, 0x00006c8du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000063f2u, 0x00006c97u, 0x00040071u, 0x00000006u, 0x000063f3u, 0x000063f2u, 0x0004007cu, 0x00000008u, 0x000063f4u, 0x000063f3u, 0x0003003eu, 0x000063c9u, 0x000063f4u, 0x000200f9u, 0x000063eau, 0x000200f8u, 0x000063eau, 0x000f00f5u, 0x00000008u, 0x0000b17bu, 0x000063f4u, 0x000063ebu, 0x000063f7u, 0x000063ecu, 0x000063fau, 0x000063edu, 0x000063fdu, 0x000063eeu, 0x00006401u, 0x000063efu, 0x00001990u, 0x000063f0u, 0x00050051u, 0x00000008u, 0x00006404u, 0x0000b17au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006405u, 0x0000b17au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006406u, 0x0000b17au, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006407u, 0x00006404u, 0x00006405u, 0x00006406u, 0x0000b17bu, 0x0003003eu, 0x000063cau, 0x00006407u, 0x0003003eu, 0x00006274u, 0x00006407u, 0x0003003eu, 0x00006279u, 0x00006318u, 0x0003003eu, 0x0000627au, 0x00006363u, 0x0003003eu, 0x0000627bu, 0x000063c7u, 0x0003003eu, 0x0000627cu, 0x00006407u, 0x000600cau, 0x00000009u, 0x0000640eu, 0x000063c7u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000627bu, 0x0000640eu, 0x0003003eu, 0x00006408u, 0x00006318u, 0x00050082u, 0x00000009u, 0x00006427u, 0x00006318u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x00006428u, 0x00006427u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000642au, 0x00006428u, 0x0000f3a1u, 0x0003003eu, 0x00006424u, 0x0000642au, 0x0003003eu, 0x00006279u, 0x0000642au, 0x0003003eu, 0x00006409u, 0x00006363u, 0x00050082u, 0x00000009u, 0x0000642eu, 0x00006363u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x0000642fu, 0x0000642eu, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006431u, 0x0000642fu, 0x0000f3a1u, 0x0003003eu, 0x0000642bu, 0x00006431u, 0x0003003eu, 0x0000627au, 0x00006431u, 0x0003003eu, 0x0000640au, 0x00006407u, 0x00050082u, 0x00000009u, 0x00006435u, 0x00006407u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x00006436u, 0x00006435u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006438u, 0x00006436u, 0x0000f3a1u, 0x0003003eu, 0x00006432u, 0x00006438u, 0x0003003eu, 0x0000627cu, 0x00006438u, 0x00050082u, 0x00000009u, 0x00006417u, 0x0000642au, 0x00006431u, 0x00050084u, 0x00000009u, 0x00006419u, 0x00006417u, 0x0000640eu, 0x0003003eu, 0x0000640bu, 0x00006419u, 0x00050080u, 0x00000009u, 0x0000641cu, 0x00006419u, 0x0000f3a1u, 0x0003003eu, 0x0000640bu, 0x0000641cu, 0x000500c3u, 0x00000009u, 0x0000641fu, 0x0000641cu, 0x0000f3acu, 0x00040072u, 0x00000013u, 0x00006420u, 0x0000641fu, 0x00040072u, 0x00000013u, 0x00006422u, 0x00006438u, 0x00050080u, 0x00000013u, 0x00006423u, 0x00006420u, 0x00006422u, 0x0003003eu, 0x0000640cu, 0x00006423u, 0x0003003eu, 0x00006278u, 0x00006423u, 0x0004003du, 0x00000013u, 0x000062aeu, 0x00006278u, 0x00040072u, 0x00000009u, 0x000062afu, 0x000062aeu, 0x0003003eu, 0x0000627du, 0x000062afu, 0x00050082u, 0x00000009u, 0x0000643cu, 0x000062afu, 0x0000f3a1u, 0x0003003eu, 0x0000627du, 0x0000643cu, 0x000600cau, 0x00000009u, 0x0000643eu, 0x0000643cu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000627du, 0x0000643eu, 0x00050080u, 0x00000009u, 0x00006441u, 0x0000643eu, 0x0000f3a1u, 0x0003003eu, 0x0000627du, 0x00006441u, 0x0008000cu, 0x00000009u, 0x00006443u, 0x00000001u, 0x0000002du, 0x00006441u, 0x00000b0bu, 0x00000b0cu, 0x00040072u, 0x00000013u, 0x00006444u, 0x00006443u, 0x0003003eu, 0x00006439u, 0x00006444u, 0x0003003eu, 0x00006278u, 0x00006444u, 0x00050041u, 0x000001c4u, 0x000062b1u, 0x00006278u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000062b2u, 0x000062b1u, 0x00040072u, 0x00000008u, 0x000062b3u, 0x000062b2u, 0x0004003du, 0x00000012u, 0x000062b5u, 0x000062b1u, 0x00040072u, 0x00000008u, 0x000062b6u, 0x000062b5u, 0x00050080u, 0x00000008u, 0x000062b7u, 0x000062b6u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x000062b8u, 0x000062b7u, 0x0000025du, 0x00050080u, 0x00000008u, 0x000062b9u, 0x000062b3u, 0x000062b8u, 0x0003003eu, 0x0000627eu, 0x000062b9u, 0x000300f7u, 0x000062bbu, 0x00000000u, 0x000400fau, 0x000021dau, 0x000062bcu, 0x000062bdu, 0x000200f8u, 0x000062bdu, 0x000500c4u, 0x00000008u, 0x000062c6u, 0x00002282u, 0x00000236u, 0x0003003eu, 0x0000627fu, 0x000062c6u, 0x000200f9u, 0x000062bbu, 0x000200f8u, 0x000062bcu, 0x00050084u, 0x00000008u, 0x000062c0u, 0x000062b9u, 0x00002282u, 0x00050080u, 0x00000008u, 0x000062c1u, 0x000062c0u, 0x00000233u, 0x000500c3u, 0x00000008u, 0x000062c2u, 0x000062c1u, 0x00000230u, 0x0003003eu, 0x0000627fu, 0x000062c2u, 0x000500c3u, 0x00000008u, 0x000062c4u, 0x000062c2u, 0x00000236u, 0x0003003eu, 0x0000217au, 0x000062c4u, 0x000200f9u, 0x000062bbu, 0x000200f8u, 0x000062bbu, 0x000700f5u, 0x00000008u, 0x0000b1aeu, 0x000062c4u, 0x000062bcu, 0x00002282u, 0x000062bdu, 0x000700f5u, 0x00000008u, 0x0000b1abu, 0x000062c2u, 0x000062bcu, 0x000062c6u, 0x000062bdu, 0x000300f7u, 0x000062c8u, 0x00000000u, 0x000400fau, 0x000021ddu, 0x000062c9u, 0x000062cau, 0x000200f8u, 0x000062cau, 0x00050080u, 0x00000008u, 0x000062ceu, 0x000062b9u, 0x0000a5c1u, 0x0003003eu, 0x0000627eu, 0x000062ceu, 0x000200f9u, 0x000062c8u, 0x000200f8u, 0x000062c9u, 0x0003003eu, 0x0000627eu, 0x0000b1abu, 0x000200f9u, 0x000062c8u, 0x000200f8u, 0x000062c8u, 0x000700f5u, 0x00000008u, 0x0000b1acu, 0x0000b1abu, 0x000062c9u, 0x000062ceu, 0x000062cau, 0x0008000cu, 0x00000008u, 0x000062d0u, 0x00000001u, 0x0000002du, 0x0000b1acu, 0x00000220u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x000062d1u, 0x000062d0u, 0x0003003eu, 0x000062b1u, 0x000062d1u, 0x0004003du, 0x00000013u, 0x000062d3u, 0x00006278u, 0x0003003eu, 0x00006280u, 0x000062d3u, 0x0003003eu, 0x000020fdu, 0x0000b1aeu, 0x00040072u, 0x00000b15u, 0x000023cdu, 0x000062d3u, 0x0004007cu, 0x00000010u, 0x000023ceu, 0x000023cdu, 0x0003003eu, 0x0000216du, 0x000023ceu, 0x00050041u, 0x0000007bu, 0x000023cfu, 0x0000216du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000023d0u, 0x000023cfu, 0x0003003eu, 0x00002162u, 0x000023d0u, 0x000200f9u, 0x0000237cu, 0x000200f8u, 0x0000237du, 0x0004003du, 0x00000010u, 0x00002387u, 0x00002102u, 0x0004003du, 0x00000011u, 0x00005ea9u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00005eaau, 0x00005ea9u, 0x00000334u, 0x000500c4u, 0x00000011u, 0x00005eabu, 0x00005eaau, 0x00000336u, 0x000500c5u, 0x00000011u, 0x00005eacu, 0x00005eabu, 0x00000338u, 0x0004007cu, 0x00000012u, 0x00005eadu, 0x00005eacu, 0x0003003eu, 0x00005ea8u, 0x00005eadu, 0x000d0050u, 0x000001e4u, 0x0000238cu, 0x0000296au, 0x0000296cu, 0x0000296eu, 0x00002970u, 0x00002387u, 0x00001dbfu, 0x0000988bu, 0x0000aad7u, 0x0000ab84u, 0x00005eadu, 0x0003003eu, 0x00007be2u, 0x0000296au, 0x0003003eu, 0x00007be3u, 0x0000296cu, 0x0003003eu, 0x00007be4u, 0x0000296eu, 0x0003003eu, 0x00007be5u, 0x00002970u, 0x0003003eu, 0x00007be6u, 0x00002387u, 0x0003003eu, 0x00007be7u, 0x00001dbfu, 0x0003003eu, 0x00007be8u, 0x0000988bu, 0x0003003eu, 0x00007be9u, 0x0000aad7u, 0x0003003eu, 0x00007beau, 0x0000ab84u, 0x0003003eu, 0x00007bebu, 0x00005eadu, 0x0003003eu, 0x00007c0cu, 0x0000296au, 0x0003003eu, 0x00007c0du, 0x0000296cu, 0x0003003eu, 0x00007c0eu, 0x0000296eu, 0x0003003eu, 0x00007c0fu, 0x00002970u, 0x0003003eu, 0x00007c10u, 0x00002387u, 0x0003003eu, 0x00007c11u, 0x00001dbfu, 0x0003003eu, 0x00007c12u, 0x0000988bu, 0x0003003eu, 0x00007c13u, 0x0000aad7u, 0x0003003eu, 0x00007c14u, 0x0000ab84u, 0x0003003eu, 0x00007c15u, 0x00005eadu, 0x0003003eu, 0x00002164u, 0x0000243du, 0x0003003eu, 0x00002165u, 0x0000243fu, 0x0003003eu, 0x00002166u, 0x0000a5c1u, 0x0003003eu, 0x00002167u, 0x00002282u, 0x0003003eu, 0x00002168u, 0x000021dau, 0x0003003eu, 0x00002169u, 0x000021ddu, 0x0003003eu, 0x0000216au, 0x000021fbu, 0x00050041u, 0x0000007bu, 0x00005ec8u, 0x00002164u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00005ec9u, 0x00005ec8u, 0x00040071u, 0x00000006u, 0x00005ecau, 0x00005ec9u, 0x0004007cu, 0x00000008u, 0x00005ecbu, 0x00005ecau, 0x00050041u, 0x0000007bu, 0x00005eccu, 0x00002165u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00005ecdu, 0x00005eccu, 0x00040071u, 0x00000006u, 0x00005eceu, 0x00005ecdu, 0x0004007cu, 0x00000008u, 0x00005ecfu, 0x00005eceu, 0x0003003eu, 0x00006cdfu, 0x0000296au, 0x0003003eu, 0x00006ce0u, 0x00002387u, 0x0003003eu, 0x00006ce1u, 0x00001dbfu, 0x0003003eu, 0x00006ce2u, 0x0000988bu, 0x0003003eu, 0x00006ce3u, 0x0000aad7u, 0x0003003eu, 0x00006ce4u, 0x00005eadu, 0x0003003eu, 0x00005eb0u, 0x00005ecbu, 0x0003003eu, 0x00005eb1u, 0x00005ecfu, 0x000300f7u, 0x00005f1eu, 0x00000000u, 0x000f00fbu, 0x00005ecbu, 0x00005f1fu, 0x00000000u, 0x00005f20u, 0x00000001u, 0x00005f21u, 0x00000002u, 0x00005f22u, 0x00000004u, 0x00005f23u, 0x00000007u, 0x00005f24u, 0x00000006u, 0x00005f25u, 0x000200f8u, 0x00005f25u, 0x0003003eu, 0x00005f1au, 0x00001991u, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f24u, 0x00040072u, 0x00000008u, 0x00005f3eu, 0x00005eadu, 0x00060050u, 0x00000044u, 0x00005f3fu, 0x00005f3eu, 0x00005f3eu, 0x00005f3eu, 0x0003003eu, 0x00005f1au, 0x00005f3fu, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f23u, 0x0004003du, 0x00000010u, 0x00005f38u, 0x00006ce0u, 0x0008004fu, 0x00000047u, 0x00005f39u, 0x00005f38u, 0x00005f38u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f3au, 0x00005f39u, 0x0004007cu, 0x00000044u, 0x00005f3bu, 0x00005f3au, 0x0003003eu, 0x00005f1au, 0x00005f3bu, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f22u, 0x0004003du, 0x00000013u, 0x00005f34u, 0x00006ce3u, 0x0008004fu, 0x000004b6u, 0x00005f35u, 0x00005f34u, 0x00005f34u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f36u, 0x00005f35u, 0x0003003eu, 0x00005f1au, 0x00005f36u, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f21u, 0x0004003du, 0x00000013u, 0x00005f30u, 0x00006ce2u, 0x0008004fu, 0x000004b6u, 0x00005f31u, 0x00005f30u, 0x00005f30u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f32u, 0x00005f31u, 0x0003003eu, 0x00005f1au, 0x00005f32u, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f20u, 0x0004003du, 0x00000013u, 0x00005f2cu, 0x00006ce1u, 0x0008004fu, 0x000004b6u, 0x00005f2du, 0x00005f2cu, 0x00005f2cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f2eu, 0x00005f2du, 0x0003003eu, 0x00005f1au, 0x00005f2eu, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f1fu, 0x0004003du, 0x00000010u, 0x00005f27u, 0x00006cdfu, 0x0008004fu, 0x00000047u, 0x00005f28u, 0x00005f27u, 0x00005f27u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f29u, 0x00005f28u, 0x0004007cu, 0x00000044u, 0x00005f2au, 0x00005f29u, 0x0003003eu, 0x00005f1au, 0x00005f2au, 0x000200f9u, 0x00005f1eu, 0x000200f8u, 0x00005f1eu, 0x001100f5u, 0x00000044u, 0x0000b84eu, 0x00005f2au, 0x00005f1fu, 0x00005f2eu, 0x00005f20u, 0x00005f32u, 0x00005f21u, 0x00005f36u, 0x00005f22u, 0x00005f3bu, 0x00005f23u, 0x00005f3fu, 0x00005f24u, 0x00001991u, 0x00005f25u, 0x000300f7u, 0x00005f41u, 0x00000000u, 0x000d00fbu, 0x00005ecfu, 0x00005f42u, 0x00000000u, 0x00005f43u, 0x00000001u, 0x00005f44u, 0x00000002u, 0x00005f45u, 0x00000004u, 0x00005f46u, 0x00000006u, 0x00005f47u, 0x000200f8u, 0x00005f47u, 0x0003003eu, 0x00005f1bu, 0x00001990u, 0x000200f9u, 0x00005f41u, 0x000200f8u, 0x00005f46u, 0x00050041u, 0x0000007bu, 0x00006cefu, 0x00006ce0u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f56u, 0x00006cefu, 0x00040071u, 0x00000006u, 0x00005f57u, 0x00005f56u, 0x0004007cu, 0x00000008u, 0x00005f58u, 0x00005f57u, 0x0003003eu, 0x00005f1bu, 0x00005f58u, 0x000200f9u, 0x00005f41u, 0x000200f8u, 0x00005f45u, 0x00050041u, 0x000001c4u, 0x00006ceeu, 0x00006ce3u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f53u, 0x00006ceeu, 0x00040072u, 0x00000008u, 0x00005f54u, 0x00005f53u, 0x0003003eu, 0x00005f1bu, 0x00005f54u, 0x000200f9u, 0x00005f41u, 0x000200f8u, 0x00005f44u, 0x00050041u, 0x000001c4u, 0x00006cedu, 0x00006ce2u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f50u, 0x00006cedu, 0x00040072u, 0x00000008u, 0x00005f51u, 0x00005f50u, 0x0003003eu, 0x00005f1bu, 0x00005f51u, 0x000200f9u, 0x00005f41u, 0x000200f8u, 0x00005f43u, 0x00050041u, 0x000001c4u, 0x00006cecu, 0x00006ce1u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f4du, 0x00006cecu, 0x00040072u, 0x00000008u, 0x00005f4eu, 0x00005f4du, 0x0003003eu, 0x00005f1bu, 0x00005f4eu, 0x000200f9u, 0x00005f41u, 0x000200f8u, 0x00005f42u, 0x00050041u, 0x0000007bu, 0x00006cebu, 0x00006cdfu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f49u, 0x00006cebu, 0x00040071u, 0x00000006u, 0x00005f4au, 0x00005f49u, 0x0004007cu, 0x00000008u, 0x00005f4bu, 0x00005f4au, 0x0003003eu, 0x00005f1bu, 0x00005f4bu, 0x000200f9u, 0x00005f41u, 0x000200f8u, 0x00005f41u, 0x000f00f5u, 0x00000008u, 0x0000b84fu, 0x00005f4bu, 0x00005f42u, 0x00005f4eu, 0x00005f43u, 0x00005f51u, 0x00005f44u, 0x00005f54u, 0x00005f45u, 0x00005f58u, 0x00005f46u, 0x00001990u, 0x00005f47u, 0x00050051u, 0x00000008u, 0x00005f5bu, 0x0000b84eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005f5cu, 0x0000b84eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005f5du, 0x0000b84eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005f5eu, 0x00005f5bu, 0x00005f5cu, 0x00005f5du, 0x0000b84fu, 0x0003003eu, 0x00005f1cu, 0x00005f5eu, 0x0003003eu, 0x00005eaeu, 0x00005f5eu, 0x00050041u, 0x0000007bu, 0x00005ed2u, 0x00002164u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005ed3u, 0x00005ed2u, 0x00040071u, 0x00000006u, 0x00005ed4u, 0x00005ed3u, 0x0004007cu, 0x00000008u, 0x00005ed5u, 0x00005ed4u, 0x00050041u, 0x0000007bu, 0x00005ed6u, 0x00002165u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005ed7u, 0x00005ed6u, 0x00040071u, 0x00000006u, 0x00005ed8u, 0x00005ed7u, 0x0004007cu, 0x00000008u, 0x00005ed9u, 0x00005ed8u, 0x0003003eu, 0x00006cf0u, 0x0000296cu, 0x0003003eu, 0x00006cf1u, 0x00002387u, 0x0003003eu, 0x00006cf2u, 0x00001dbfu, 0x0003003eu, 0x00006cf3u, 0x0000988bu, 0x0003003eu, 0x00006cf4u, 0x0000aad7u, 0x0003003eu, 0x00005eb4u, 0x00005ed5u, 0x0003003eu, 0x00005eb5u, 0x00005ed9u, 0x000300f7u, 0x00005f63u, 0x00000000u, 0x000d00fbu, 0x00005ed5u, 0x00005f64u, 0x00000000u, 0x00005f65u, 0x00000001u, 0x00005f66u, 0x00000002u, 0x00005f67u, 0x00000004u, 0x00005f68u, 0x00000007u, 0x00005f69u, 0x000200f8u, 0x00005f69u, 0x00050041u, 0x0000007bu, 0x00006cfau, 0x00006cf0u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005f81u, 0x00006cfau, 0x00040071u, 0x00000006u, 0x00005f82u, 0x00005f81u, 0x0004007cu, 0x00000008u, 0x00005f83u, 0x00005f82u, 0x000500c4u, 0x00000008u, 0x00005f84u, 0x00005f83u, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006cfbu, 0x00006cf0u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005f86u, 0x00006cfbu, 0x00040071u, 0x00000006u, 0x00005f87u, 0x00005f86u, 0x0004007cu, 0x00000008u, 0x00005f88u, 0x00005f87u, 0x000500c5u, 0x00000008u, 0x00005f89u, 0x00005f84u, 0x00005f88u, 0x00060050u, 0x00000044u, 0x00005f8au, 0x00005f89u, 0x00005f89u, 0x00005f89u, 0x0003003eu, 0x00005f5fu, 0x00005f8au, 0x000200f9u, 0x00005f63u, 0x000200f8u, 0x00005f68u, 0x0004003du, 0x00000010u, 0x00005f7cu, 0x00006cf1u, 0x0008004fu, 0x00000047u, 0x00005f7du, 0x00005f7cu, 0x00005f7cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f7eu, 0x00005f7du, 0x0004007cu, 0x00000044u, 0x00005f7fu, 0x00005f7eu, 0x0003003eu, 0x00005f5fu, 0x00005f7fu, 0x000200f9u, 0x00005f63u, 0x000200f8u, 0x00005f67u, 0x0004003du, 0x00000013u, 0x00005f78u, 0x00006cf4u, 0x0008004fu, 0x000004b6u, 0x00005f79u, 0x00005f78u, 0x00005f78u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f7au, 0x00005f79u, 0x0003003eu, 0x00005f5fu, 0x00005f7au, 0x000200f9u, 0x00005f63u, 0x000200f8u, 0x00005f66u, 0x0004003du, 0x00000013u, 0x00005f74u, 0x00006cf3u, 0x0008004fu, 0x000004b6u, 0x00005f75u, 0x00005f74u, 0x00005f74u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f76u, 0x00005f75u, 0x0003003eu, 0x00005f5fu, 0x00005f76u, 0x000200f9u, 0x00005f63u, 0x000200f8u, 0x00005f65u, 0x0004003du, 0x00000013u, 0x00005f70u, 0x00006cf2u, 0x0008004fu, 0x000004b6u, 0x00005f71u, 0x00005f70u, 0x00005f70u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005f72u, 0x00005f71u, 0x0003003eu, 0x00005f5fu, 0x00005f72u, 0x000200f9u, 0x00005f63u, 0x000200f8u, 0x00005f64u, 0x0004003du, 0x00000010u, 0x00005f6bu, 0x00006cf0u, 0x0008004fu, 0x00000047u, 0x00005f6cu, 0x00005f6bu, 0x00005f6bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005f6du, 0x00005f6cu, 0x0004007cu, 0x00000044u, 0x00005f6eu, 0x00005f6du, 0x0003003eu, 0x00005f5fu, 0x00005f6eu, 0x000200f9u, 0x00005f63u, 0x000200f8u, 0x00005f63u, 0x000f00f5u, 0x00000044u, 0x0000b866u, 0x00005f6eu, 0x00005f64u, 0x00005f72u, 0x00005f65u, 0x00005f76u, 0x00005f66u, 0x00005f7au, 0x00005f67u, 0x00005f7fu, 0x00005f68u, 0x00005f8au, 0x00005f69u, 0x000300f7u, 0x00005f8cu, 0x00000000u, 0x000d00fbu, 0x00005ed9u, 0x00005f8du, 0x00000000u, 0x00005f8eu, 0x00000001u, 0x00005f8fu, 0x00000002u, 0x00005f90u, 0x00000004u, 0x00005f91u, 0x00000006u, 0x00005f92u, 0x000200f8u, 0x00005f92u, 0x0003003eu, 0x00005f60u, 0x00001990u, 0x000200f9u, 0x00005f8cu, 0x000200f8u, 0x00005f91u, 0x00050041u, 0x0000007bu, 0x00006d00u, 0x00006cf1u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005fa1u, 0x00006d00u, 0x00040071u, 0x00000006u, 0x00005fa2u, 0x00005fa1u, 0x0004007cu, 0x00000008u, 0x00005fa3u, 0x00005fa2u, 0x0003003eu, 0x00005f60u, 0x00005fa3u, 0x000200f9u, 0x00005f8cu, 0x000200f8u, 0x00005f90u, 0x00050041u, 0x000001c4u, 0x00006cffu, 0x00006cf4u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f9eu, 0x00006cffu, 0x00040072u, 0x00000008u, 0x00005f9fu, 0x00005f9eu, 0x0003003eu, 0x00005f60u, 0x00005f9fu, 0x000200f9u, 0x00005f8cu, 0x000200f8u, 0x00005f8fu, 0x00050041u, 0x000001c4u, 0x00006cfeu, 0x00006cf3u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f9bu, 0x00006cfeu, 0x00040072u, 0x00000008u, 0x00005f9cu, 0x00005f9bu, 0x0003003eu, 0x00005f60u, 0x00005f9cu, 0x000200f9u, 0x00005f8cu, 0x000200f8u, 0x00005f8eu, 0x00050041u, 0x000001c4u, 0x00006cfdu, 0x00006cf2u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005f98u, 0x00006cfdu, 0x00040072u, 0x00000008u, 0x00005f99u, 0x00005f98u, 0x0003003eu, 0x00005f60u, 0x00005f99u, 0x000200f9u, 0x00005f8cu, 0x000200f8u, 0x00005f8du, 0x00050041u, 0x0000007bu, 0x00006cfcu, 0x00006cf0u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005f94u, 0x00006cfcu, 0x00040071u, 0x00000006u, 0x00005f95u, 0x00005f94u, 0x0004007cu, 0x00000008u, 0x00005f96u, 0x00005f95u, 0x0003003eu, 0x00005f60u, 0x00005f96u, 0x000200f9u, 0x00005f8cu, 0x000200f8u, 0x00005f8cu, 0x000f00f5u, 0x00000008u, 0x0000b867u, 0x00005f96u, 0x00005f8du, 0x00005f99u, 0x00005f8eu, 0x00005f9cu, 0x00005f8fu, 0x00005f9fu, 0x00005f90u, 0x00005fa3u, 0x00005f91u, 0x00001990u, 0x00005f92u, 0x00050051u, 0x00000008u, 0x00005fa6u, 0x0000b866u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005fa7u, 0x0000b866u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005fa8u, 0x0000b866u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005fa9u, 0x00005fa6u, 0x00005fa7u, 0x00005fa8u, 0x0000b867u, 0x0003003eu, 0x00005f61u, 0x00005fa9u, 0x0003003eu, 0x00005eb2u, 0x00005fa9u, 0x00050041u, 0x0000007bu, 0x00005edcu, 0x00002164u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005eddu, 0x00005edcu, 0x00040071u, 0x00000006u, 0x00005edeu, 0x00005eddu, 0x0004007cu, 0x00000008u, 0x00005edfu, 0x00005edeu, 0x00050041u, 0x0000007bu, 0x00005ee0u, 0x00002165u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005ee1u, 0x00005ee0u, 0x00040071u, 0x00000006u, 0x00005ee2u, 0x00005ee1u, 0x0004007cu, 0x00000008u, 0x00005ee3u, 0x00005ee2u, 0x0003003eu, 0x00006d01u, 0x0000296eu, 0x0003003eu, 0x00006d02u, 0x00002387u, 0x0003003eu, 0x00006d03u, 0x00001dbfu, 0x0003003eu, 0x00006d04u, 0x0000988bu, 0x0003003eu, 0x00006d05u, 0x0000aad7u, 0x0003003eu, 0x00006d06u, 0x0000ab84u, 0x0003003eu, 0x00005eb8u, 0x00005edfu, 0x0003003eu, 0x00005eb9u, 0x00005ee3u, 0x000300f7u, 0x00005faeu, 0x00000000u, 0x001700fbu, 0x00005edfu, 0x00005fafu, 0x00000000u, 0x00005fb0u, 0x00000007u, 0x00005fb1u, 0x00000001u, 0x00005fb2u, 0x00000002u, 0x00005fb3u, 0x00000004u, 0x00005fb4u, 0x00000008u, 0x00005fb5u, 0x00000009u, 0x00005fb6u, 0x0000000bu, 0x00005fb7u, 0x0000000du, 0x00005fb8u, 0x0000000fu, 0x00005fb9u, 0x000200f8u, 0x00005fb9u, 0x00050041u, 0x0000007bu, 0x00006d0du, 0x00006d01u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00005fe6u, 0x00006d0du, 0x00040071u, 0x00000006u, 0x00005fe7u, 0x00005fe6u, 0x0004007cu, 0x00000008u, 0x00005fe8u, 0x00005fe7u, 0x000500c4u, 0x00000008u, 0x00005fe9u, 0x00005fe8u, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006d0eu, 0x00006d01u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00005febu, 0x00006d0eu, 0x00040071u, 0x00000006u, 0x00005fecu, 0x00005febu, 0x0004007cu, 0x00000008u, 0x00005fedu, 0x00005fecu, 0x000500c5u, 0x00000008u, 0x00005feeu, 0x00005fe9u, 0x00005fedu, 0x00060050u, 0x00000044u, 0x00005fefu, 0x00005feeu, 0x00005feeu, 0x00005feeu, 0x0003003eu, 0x00005faau, 0x00005fefu, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb8u, 0x00040072u, 0x00000008u, 0x00005fe3u, 0x0000ab84u, 0x00060050u, 0x00000044u, 0x00005fe4u, 0x00005fe3u, 0x00005fe3u, 0x00005fe3u, 0x0003003eu, 0x00005faau, 0x00005fe4u, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb7u, 0x0004003du, 0x00000010u, 0x00005fddu, 0x00006d02u, 0x0008004fu, 0x00000047u, 0x00005fdeu, 0x00005fddu, 0x00005fddu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x00005fdfu, 0x00005fdeu, 0x0004007cu, 0x00000044u, 0x00005fe0u, 0x00005fdfu, 0x0003003eu, 0x00005faau, 0x00005fe0u, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb6u, 0x0004003du, 0x00000013u, 0x00005fd9u, 0x00006d05u, 0x0008004fu, 0x000004b6u, 0x00005fdau, 0x00005fd9u, 0x00005fd9u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00005fdbu, 0x00005fdau, 0x0003003eu, 0x00005faau, 0x00005fdbu, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb5u, 0x0004003du, 0x00000013u, 0x00005fd5u, 0x00006d04u, 0x0008004fu, 0x000004b6u, 0x00005fd6u, 0x00005fd5u, 0x00005fd5u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00005fd7u, 0x00005fd6u, 0x0003003eu, 0x00005faau, 0x00005fd7u, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb4u, 0x0004003du, 0x00000010u, 0x00005fd0u, 0x00006d02u, 0x0008004fu, 0x00000047u, 0x00005fd1u, 0x00005fd0u, 0x00005fd0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005fd2u, 0x00005fd1u, 0x0004007cu, 0x00000044u, 0x00005fd3u, 0x00005fd2u, 0x0003003eu, 0x00005faau, 0x00005fd3u, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb3u, 0x0004003du, 0x00000013u, 0x00005fccu, 0x00006d05u, 0x0008004fu, 0x000004b6u, 0x00005fcdu, 0x00005fccu, 0x00005fccu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005fceu, 0x00005fcdu, 0x0003003eu, 0x00005faau, 0x00005fceu, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb2u, 0x0004003du, 0x00000013u, 0x00005fc8u, 0x00006d04u, 0x0008004fu, 0x000004b6u, 0x00005fc9u, 0x00005fc8u, 0x00005fc8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00005fcau, 0x00005fc9u, 0x0003003eu, 0x00005faau, 0x00005fcau, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb1u, 0x00040072u, 0x00000044u, 0x00005fc6u, 0x0000f3bbu, 0x0003003eu, 0x00005faau, 0x00005fc6u, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fb0u, 0x00040072u, 0x00000044u, 0x00005fc2u, 0x0000f3bbu, 0x0003003eu, 0x00005faau, 0x00005fc2u, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005fafu, 0x0004003du, 0x00000010u, 0x00005fbbu, 0x00006d01u, 0x0008004fu, 0x00000047u, 0x00005fbcu, 0x00005fbbu, 0x00005fbbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00005fbdu, 0x00005fbcu, 0x0004007cu, 0x00000044u, 0x00005fbeu, 0x00005fbdu, 0x0003003eu, 0x00005faau, 0x00005fbeu, 0x000200f9u, 0x00005faeu, 0x000200f8u, 0x00005faeu, 0x001900f5u, 0x00000044u, 0x0000b87fu, 0x00005fbeu, 0x00005fafu, 0x00005fc2u, 0x00005fb0u, 0x00005fc6u, 0x00005fb1u, 0x00005fcau, 0x00005fb2u, 0x00005fceu, 0x00005fb3u, 0x00005fd3u, 0x00005fb4u, 0x00005fd7u, 0x00005fb5u, 0x00005fdbu, 0x00005fb6u, 0x00005fe0u, 0x00005fb7u, 0x00005fe4u, 0x00005fb8u, 0x00005fefu, 0x00005fb9u, 0x000300f7u, 0x00005ff1u, 0x00000000u, 0x000b00fbu, 0x00005ee3u, 0x00005ff2u, 0x00000000u, 0x00005ff3u, 0x00000001u, 0x00005ff4u, 0x00000002u, 0x00005ff5u, 0x00000004u, 0x00005ff6u, 0x000200f8u, 0x00005ff6u, 0x00050041u, 0x0000007bu, 0x00006d12u, 0x00006d02u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006005u, 0x00006d12u, 0x00040071u, 0x00000006u, 0x00006006u, 0x00006005u, 0x0004007cu, 0x00000008u, 0x00006007u, 0x00006006u, 0x0003003eu, 0x00005fabu, 0x00006007u, 0x000200f9u, 0x00005ff1u, 0x000200f8u, 0x00005ff5u, 0x00050041u, 0x000001c4u, 0x00006d11u, 0x00006d05u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006002u, 0x00006d11u, 0x00040072u, 0x00000008u, 0x00006003u, 0x00006002u, 0x0003003eu, 0x00005fabu, 0x00006003u, 0x000200f9u, 0x00005ff1u, 0x000200f8u, 0x00005ff4u, 0x00050041u, 0x000001c4u, 0x00006d10u, 0x00006d04u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005fffu, 0x00006d10u, 0x00040072u, 0x00000008u, 0x00006000u, 0x00005fffu, 0x0003003eu, 0x00005fabu, 0x00006000u, 0x000200f9u, 0x00005ff1u, 0x000200f8u, 0x00005ff3u, 0x00040072u, 0x00000008u, 0x00005ffdu, 0x0000ab84u, 0x0003003eu, 0x00005fabu, 0x00005ffdu, 0x000200f9u, 0x00005ff1u, 0x000200f8u, 0x00005ff2u, 0x00050041u, 0x0000007bu, 0x00006d0fu, 0x00006d01u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005ff8u, 0x00006d0fu, 0x00040071u, 0x00000006u, 0x00005ff9u, 0x00005ff8u, 0x0004007cu, 0x00000008u, 0x00005ffau, 0x00005ff9u, 0x0003003eu, 0x00005fabu, 0x00005ffau, 0x000200f9u, 0x00005ff1u, 0x000200f8u, 0x00005ff1u, 0x000d00f5u, 0x00000008u, 0x0000b880u, 0x00005ffau, 0x00005ff2u, 0x00005ffdu, 0x00005ff3u, 0x00006000u, 0x00005ff4u, 0x00006003u, 0x00005ff5u, 0x00006007u, 0x00005ff6u, 0x00050051u, 0x00000008u, 0x0000600au, 0x0000b87fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000600bu, 0x0000b87fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000600cu, 0x0000b87fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000600du, 0x0000600au, 0x0000600bu, 0x0000600cu, 0x0000b880u, 0x0003003eu, 0x00005facu, 0x0000600du, 0x0003003eu, 0x00005eb6u, 0x0000600du, 0x00050041u, 0x0000007bu, 0x00005ee6u, 0x00002164u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005ee7u, 0x00005ee6u, 0x00040071u, 0x00000006u, 0x00005ee8u, 0x00005ee7u, 0x0004007cu, 0x00000008u, 0x00005ee9u, 0x00005ee8u, 0x00050041u, 0x0000007bu, 0x00005eeau, 0x00002165u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00005eebu, 0x00005eeau, 0x00040071u, 0x00000006u, 0x00005eecu, 0x00005eebu, 0x0004007cu, 0x00000008u, 0x00005eedu, 0x00005eecu, 0x0003003eu, 0x00006d13u, 0x00002970u, 0x0003003eu, 0x00006d14u, 0x00002387u, 0x0003003eu, 0x00006d15u, 0x00001dbfu, 0x0003003eu, 0x00006d16u, 0x0000988bu, 0x0003003eu, 0x00006d17u, 0x0000aad7u, 0x0003003eu, 0x00005ebcu, 0x00005ee9u, 0x0003003eu, 0x00005ebdu, 0x00005eedu, 0x000300f7u, 0x00006012u, 0x00000000u, 0x000d00fbu, 0x00005ee9u, 0x00006013u, 0x00000000u, 0x00006014u, 0x00000001u, 0x00006015u, 0x00000002u, 0x00006016u, 0x00000004u, 0x00006017u, 0x00000006u, 0x00006018u, 0x000200f8u, 0x00006018u, 0x0003003eu, 0x0000600eu, 0x00001991u, 0x000200f9u, 0x00006012u, 0x000200f8u, 0x00006017u, 0x0004003du, 0x00000010u, 0x0000602bu, 0x00006d14u, 0x0008004fu, 0x00000047u, 0x0000602cu, 0x0000602bu, 0x0000602bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000602du, 0x0000602cu, 0x0004007cu, 0x00000044u, 0x0000602eu, 0x0000602du, 0x0003003eu, 0x0000600eu, 0x0000602eu, 0x000200f9u, 0x00006012u, 0x000200f8u, 0x00006016u, 0x0004003du, 0x00000013u, 0x00006027u, 0x00006d17u, 0x0008004fu, 0x000004b6u, 0x00006028u, 0x00006027u, 0x00006027u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006029u, 0x00006028u, 0x0003003eu, 0x0000600eu, 0x00006029u, 0x000200f9u, 0x00006012u, 0x000200f8u, 0x00006015u, 0x0004003du, 0x00000013u, 0x00006023u, 0x00006d16u, 0x0008004fu, 0x000004b6u, 0x00006024u, 0x00006023u, 0x00006023u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006025u, 0x00006024u, 0x0003003eu, 0x0000600eu, 0x00006025u, 0x000200f9u, 0x00006012u, 0x000200f8u, 0x00006014u, 0x0004003du, 0x00000013u, 0x0000601fu, 0x00006d15u, 0x0008004fu, 0x000004b6u, 0x00006020u, 0x0000601fu, 0x0000601fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006021u, 0x00006020u, 0x0003003eu, 0x0000600eu, 0x00006021u, 0x000200f9u, 0x00006012u, 0x000200f8u, 0x00006013u, 0x0004003du, 0x00000010u, 0x0000601au, 0x00006d13u, 0x0008004fu, 0x00000047u, 0x0000601bu, 0x0000601au, 0x0000601au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x0000601cu, 0x0000601bu, 0x0004007cu, 0x00000044u, 0x0000601du, 0x0000601cu, 0x0003003eu, 0x0000600eu, 0x0000601du, 0x000200f9u, 0x00006012u, 0x000200f8u, 0x00006012u, 0x000f00f5u, 0x00000044u, 0x0000b897u, 0x0000601du, 0x00006013u, 0x00006021u, 0x00006014u, 0x00006025u, 0x00006015u, 0x00006029u, 0x00006016u, 0x0000602eu, 0x00006017u, 0x00001991u, 0x00006018u, 0x000300f7u, 0x00006030u, 0x00000000u, 0x000d00fbu, 0x00005eedu, 0x00006031u, 0x00000000u, 0x00006032u, 0x00000001u, 0x00006033u, 0x00000002u, 0x00006034u, 0x00000004u, 0x00006035u, 0x00000006u, 0x00006036u, 0x000200f8u, 0x00006036u, 0x0003003eu, 0x0000600fu, 0x00001990u, 0x000200f9u, 0x00006030u, 0x000200f8u, 0x00006035u, 0x00050041u, 0x0000007bu, 0x00006d21u, 0x00006d14u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006045u, 0x00006d21u, 0x00040071u, 0x00000006u, 0x00006046u, 0x00006045u, 0x0004007cu, 0x00000008u, 0x00006047u, 0x00006046u, 0x0003003eu, 0x0000600fu, 0x00006047u, 0x000200f9u, 0x00006030u, 0x000200f8u, 0x00006034u, 0x00050041u, 0x000001c4u, 0x00006d20u, 0x00006d17u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006042u, 0x00006d20u, 0x00040072u, 0x00000008u, 0x00006043u, 0x00006042u, 0x0003003eu, 0x0000600fu, 0x00006043u, 0x000200f9u, 0x00006030u, 0x000200f8u, 0x00006033u, 0x00050041u, 0x000001c4u, 0x00006d1fu, 0x00006d16u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000603fu, 0x00006d1fu, 0x00040072u, 0x00000008u, 0x00006040u, 0x0000603fu, 0x0003003eu, 0x0000600fu, 0x00006040u, 0x000200f9u, 0x00006030u, 0x000200f8u, 0x00006032u, 0x00050041u, 0x000001c4u, 0x00006d1eu, 0x00006d15u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000603cu, 0x00006d1eu, 0x00040072u, 0x00000008u, 0x0000603du, 0x0000603cu, 0x0003003eu, 0x0000600fu, 0x0000603du, 0x000200f9u, 0x00006030u, 0x000200f8u, 0x00006031u, 0x00050041u, 0x0000007bu, 0x00006d1du, 0x00006d13u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006038u, 0x00006d1du, 0x00040071u, 0x00000006u, 0x00006039u, 0x00006038u, 0x0004007cu, 0x00000008u, 0x0000603au, 0x00006039u, 0x0003003eu, 0x0000600fu, 0x0000603au, 0x000200f9u, 0x00006030u, 0x000200f8u, 0x00006030u, 0x000f00f5u, 0x00000008u, 0x0000b898u, 0x0000603au, 0x00006031u, 0x0000603du, 0x00006032u, 0x00006040u, 0x00006033u, 0x00006043u, 0x00006034u, 0x00006047u, 0x00006035u, 0x00001990u, 0x00006036u, 0x00050051u, 0x00000008u, 0x0000604au, 0x0000b897u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000604bu, 0x0000b897u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000604cu, 0x0000b897u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000604du, 0x0000604au, 0x0000604bu, 0x0000604cu, 0x0000b898u, 0x0003003eu, 0x00006010u, 0x0000604du, 0x0003003eu, 0x00005ebau, 0x0000604du, 0x0003003eu, 0x00005ebfu, 0x00005f5eu, 0x0003003eu, 0x00005ec0u, 0x00005fa9u, 0x0003003eu, 0x00005ec1u, 0x0000600du, 0x0003003eu, 0x00005ec2u, 0x0000604du, 0x000600cau, 0x00000009u, 0x00006054u, 0x0000600du, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00005ec1u, 0x00006054u, 0x0003003eu, 0x0000604eu, 0x00005f5eu, 0x00050082u, 0x00000009u, 0x0000606du, 0x00005f5eu, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x0000606eu, 0x0000606du, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006070u, 0x0000606eu, 0x0000f3a1u, 0x0003003eu, 0x0000606au, 0x00006070u, 0x0003003eu, 0x00005ebfu, 0x00006070u, 0x0003003eu, 0x0000604fu, 0x00005fa9u, 0x00050082u, 0x00000009u, 0x00006074u, 0x00005fa9u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x00006075u, 0x00006074u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006077u, 0x00006075u, 0x0000f3a1u, 0x0003003eu, 0x00006071u, 0x00006077u, 0x0003003eu, 0x00005ec0u, 0x00006077u, 0x0003003eu, 0x00006050u, 0x0000604du, 0x00050082u, 0x00000009u, 0x0000607bu, 0x0000604du, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x0000607cu, 0x0000607bu, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000607eu, 0x0000607cu, 0x0000f3a1u, 0x0003003eu, 0x00006078u, 0x0000607eu, 0x0003003eu, 0x00005ec2u, 0x0000607eu, 0x00050082u, 0x00000009u, 0x0000605du, 0x00006070u, 0x00006077u, 0x00050084u, 0x00000009u, 0x0000605fu, 0x0000605du, 0x00006054u, 0x0003003eu, 0x00006051u, 0x0000605fu, 0x00050080u, 0x00000009u, 0x00006062u, 0x0000605fu, 0x0000f3a1u, 0x0003003eu, 0x00006051u, 0x00006062u, 0x000500c3u, 0x00000009u, 0x00006065u, 0x00006062u, 0x0000f3acu, 0x00040072u, 0x00000013u, 0x00006066u, 0x00006065u, 0x00040072u, 0x00000013u, 0x00006068u, 0x0000607eu, 0x00050080u, 0x00000013u, 0x00006069u, 0x00006066u, 0x00006068u, 0x0003003eu, 0x00006052u, 0x00006069u, 0x0003003eu, 0x00005ebeu, 0x00006069u, 0x000300f7u, 0x00005ef6u, 0x00000000u, 0x000400fau, 0x000021fbu, 0x00005ef7u, 0x00005ef8u, 0x000200f8u, 0x00005ef8u, 0x0003003eu, 0x0000216bu, 0x00000388u, 0x000200f9u, 0x00005ef6u, 0x000200f8u, 0x00005ef7u, 0x00050041u, 0x000001c4u, 0x00005ef9u, 0x00005ebeu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00005efau, 0x00005ef9u, 0x00040072u, 0x00000008u, 0x00005efbu, 0x00005efau, 0x0003003eu, 0x00005ec4u, 0x00005efbu, 0x00050082u, 0x00000008u, 0x00006081u, 0x00005efbu, 0x00000b01u, 0x000600cau, 0x00000008u, 0x00006082u, 0x00006081u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000008u, 0x00006083u, 0x00006082u, 0x00000b01u, 0x0008000cu, 0x00000008u, 0x00006084u, 0x00000001u, 0x0000002du, 0x00006083u, 0x00000220u, 0x0000035eu, 0x0003003eu, 0x0000607fu, 0x00006084u, 0x0003003eu, 0x00005ec3u, 0x00006084u, 0x00050080u, 0x00000008u, 0x00005effu, 0x00006084u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00005f00u, 0x00005effu, 0x0000025du, 0x00050080u, 0x00000008u, 0x00005f01u, 0x00006084u, 0x00005f00u, 0x0003003eu, 0x00005ec5u, 0x00005f01u, 0x000300f7u, 0x00005f03u, 0x00000000u, 0x000400fau, 0x000021ddu, 0x00005f04u, 0x00005f05u, 0x000200f8u, 0x00005f05u, 0x00050080u, 0x00000008u, 0x00005f14u, 0x00005f01u, 0x0000a5c1u, 0x0003003eu, 0x00005ec5u, 0x00005f14u, 0x000200f9u, 0x00005f03u, 0x000200f8u, 0x00005f04u, 0x000300f7u, 0x00005f07u, 0x00000000u, 0x000400fau, 0x000021dau, 0x00005f08u, 0x00005f09u, 0x000200f8u, 0x00005f09u, 0x000500c4u, 0x00000008u, 0x00005f10u, 0x00002282u, 0x00000236u, 0x0003003eu, 0x00005ec6u, 0x00005f10u, 0x000200f9u, 0x00005f07u, 0x000200f8u, 0x00005f08u, 0x00050084u, 0x00000008u, 0x00005f0cu, 0x00005f01u, 0x00002282u, 0x00050080u, 0x00000008u, 0x00005f0du, 0x00005f0cu, 0x00000233u, 0x000500c3u, 0x00000008u, 0x00005f0eu, 0x00005f0du, 0x00000230u, 0x0003003eu, 0x00005ec6u, 0x00005f0eu, 0x000200f9u, 0x00005f07u, 0x000200f8u, 0x00005f07u, 0x000700f5u, 0x00000008u, 0x0000b8cdu, 0x00005f0eu, 0x00005f08u, 0x00005f10u, 0x00005f09u, 0x0003003eu, 0x00005ec5u, 0x0000b8cdu, 0x000200f9u, 0x00005f03u, 0x000200f8u, 0x00005f03u, 0x000700f5u, 0x00000008u, 0x0000b8ceu, 0x0000b8cdu, 0x00005f07u, 0x00005f14u, 0x00005f05u, 0x0008000cu, 0x00000008u, 0x00005f16u, 0x00000001u, 0x0000002du, 0x0000b8ceu, 0x00000220u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x00005f17u, 0x00005f16u, 0x0004007cu, 0x0000000fu, 0x00005f18u, 0x00005f17u, 0x0003003eu, 0x0000216bu, 0x00005f18u, 0x000200f9u, 0x00005ef6u, 0x000200f8u, 0x00005ef6u, 0x000700f5u, 0x0000000fu, 0x0000b8cfu, 0x00005f18u, 0x00005f03u, 0x00000388u, 0x00005ef8u, 0x0004003du, 0x00000013u, 0x00005f19u, 0x00005ebeu, 0x0003003eu, 0x00005ec7u, 0x00005f19u, 0x0003003eu, 0x00002162u, 0x0000b8cfu, 0x0003003eu, 0x00007be7u, 0x00005f19u, 0x0003003eu, 0x00007be2u, 0x00002972u, 0x0003003eu, 0x00007be3u, 0x00002974u, 0x0003003eu, 0x00007be4u, 0x00002976u, 0x0003003eu, 0x00007be5u, 0x00002978u, 0x0003003eu, 0x0000216cu, 0x0000988bu, 0x0003003eu, 0x00007be8u, 0x0000aad7u, 0x0003003eu, 0x00007be9u, 0x0000988bu, 0x000d0050u, 0x000001e4u, 0x00007c0bu, 0x00002972u, 0x00002974u, 0x00002976u, 0x00002978u, 0x00002387u, 0x00005f19u, 0x0000aad7u, 0x0000988bu, 0x0000ab84u, 0x00005eadu, 0x0003003eu, 0x00007c4cu, 0x00002972u, 0x0003003eu, 0x00007c4du, 0x00002974u, 0x0003003eu, 0x00007c4eu, 0x00002976u, 0x0003003eu, 0x00007c4fu, 0x00002978u, 0x0003003eu, 0x00007c50u, 0x00002387u, 0x0003003eu, 0x00007c51u, 0x00005f19u, 0x0003003eu, 0x00007c52u, 0x0000aad7u, 0x0003003eu, 0x00007c53u, 0x0000988bu, 0x0003003eu, 0x00007c54u, 0x0000ab84u, 0x0003003eu, 0x00007c55u, 0x00005eadu, 0x0003003eu, 0x0000216fu, 0x00002441u, 0x0003003eu, 0x00002170u, 0x00002443u, 0x0003003eu, 0x00002171u, 0x0000a5c1u, 0x0003003eu, 0x00002172u, 0x00002282u, 0x0003003eu, 0x00002173u, 0x000021dau, 0x0003003eu, 0x00002174u, 0x000021ddu, 0x00050041u, 0x0000007bu, 0x0000609eu, 0x0000216fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000609fu, 0x0000609eu, 0x00040071u, 0x00000006u, 0x000060a0u, 0x0000609fu, 0x0004007cu, 0x00000008u, 0x000060a1u, 0x000060a0u, 0x00050041u, 0x0000007bu, 0x000060a2u, 0x00002170u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000060a3u, 0x000060a2u, 0x00040071u, 0x00000006u, 0x000060a4u, 0x000060a3u, 0x0004007cu, 0x00000008u, 0x000060a5u, 0x000060a4u, 0x0003003eu, 0x00006c9cu, 0x00002972u, 0x0003003eu, 0x00006c9du, 0x00002387u, 0x0003003eu, 0x00006c9eu, 0x00005f19u, 0x0003003eu, 0x00006c9fu, 0x0000aad7u, 0x0003003eu, 0x00006ca0u, 0x0000988bu, 0x0003003eu, 0x00006ca1u, 0x00005eadu, 0x0003003eu, 0x00006087u, 0x000060a1u, 0x0003003eu, 0x00006088u, 0x000060a5u, 0x000300f7u, 0x000060f5u, 0x00000000u, 0x000f00fbu, 0x000060a1u, 0x000060f6u, 0x00000000u, 0x000060f7u, 0x00000001u, 0x000060f8u, 0x00000002u, 0x000060f9u, 0x00000004u, 0x000060fau, 0x00000007u, 0x000060fbu, 0x00000006u, 0x000060fcu, 0x000200f8u, 0x000060fcu, 0x0003003eu, 0x000060f1u, 0x00001991u, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060fbu, 0x00040072u, 0x00000008u, 0x00006115u, 0x00005eadu, 0x00060050u, 0x00000044u, 0x00006116u, 0x00006115u, 0x00006115u, 0x00006115u, 0x0003003eu, 0x000060f1u, 0x00006116u, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060fau, 0x0004003du, 0x00000010u, 0x0000610fu, 0x00006c9du, 0x0008004fu, 0x00000047u, 0x00006110u, 0x0000610fu, 0x0000610fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006111u, 0x00006110u, 0x0004007cu, 0x00000044u, 0x00006112u, 0x00006111u, 0x0003003eu, 0x000060f1u, 0x00006112u, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060f9u, 0x0004003du, 0x00000013u, 0x0000610bu, 0x00006ca0u, 0x0008004fu, 0x000004b6u, 0x0000610cu, 0x0000610bu, 0x0000610bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000610du, 0x0000610cu, 0x0003003eu, 0x000060f1u, 0x0000610du, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060f8u, 0x0004003du, 0x00000013u, 0x00006107u, 0x00006c9fu, 0x0008004fu, 0x000004b6u, 0x00006108u, 0x00006107u, 0x00006107u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006109u, 0x00006108u, 0x0003003eu, 0x000060f1u, 0x00006109u, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060f7u, 0x0004003du, 0x00000013u, 0x00006103u, 0x00006c9eu, 0x0008004fu, 0x000004b6u, 0x00006104u, 0x00006103u, 0x00006103u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006105u, 0x00006104u, 0x0003003eu, 0x000060f1u, 0x00006105u, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060f6u, 0x0004003du, 0x00000010u, 0x000060feu, 0x00006c9cu, 0x0008004fu, 0x00000047u, 0x000060ffu, 0x000060feu, 0x000060feu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006100u, 0x000060ffu, 0x0004007cu, 0x00000044u, 0x00006101u, 0x00006100u, 0x0003003eu, 0x000060f1u, 0x00006101u, 0x000200f9u, 0x000060f5u, 0x000200f8u, 0x000060f5u, 0x001100f5u, 0x00000044u, 0x0000b977u, 0x00006101u, 0x000060f6u, 0x00006105u, 0x000060f7u, 0x00006109u, 0x000060f8u, 0x0000610du, 0x000060f9u, 0x00006112u, 0x000060fau, 0x00006116u, 0x000060fbu, 0x00001991u, 0x000060fcu, 0x000300f7u, 0x00006118u, 0x00000000u, 0x000d00fbu, 0x000060a5u, 0x00006119u, 0x00000000u, 0x0000611au, 0x00000001u, 0x0000611bu, 0x00000002u, 0x0000611cu, 0x00000004u, 0x0000611du, 0x00000006u, 0x0000611eu, 0x000200f8u, 0x0000611eu, 0x0003003eu, 0x000060f2u, 0x00001990u, 0x000200f9u, 0x00006118u, 0x000200f8u, 0x0000611du, 0x00050041u, 0x0000007bu, 0x00006cacu, 0x00006c9du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000612du, 0x00006cacu, 0x00040071u, 0x00000006u, 0x0000612eu, 0x0000612du, 0x0004007cu, 0x00000008u, 0x0000612fu, 0x0000612eu, 0x0003003eu, 0x000060f2u, 0x0000612fu, 0x000200f9u, 0x00006118u, 0x000200f8u, 0x0000611cu, 0x00050041u, 0x000001c4u, 0x00006cabu, 0x00006ca0u, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000612au, 0x00006cabu, 0x00040072u, 0x00000008u, 0x0000612bu, 0x0000612au, 0x0003003eu, 0x000060f2u, 0x0000612bu, 0x000200f9u, 0x00006118u, 0x000200f8u, 0x0000611bu, 0x00050041u, 0x000001c4u, 0x00006caau, 0x00006c9fu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006127u, 0x00006caau, 0x00040072u, 0x00000008u, 0x00006128u, 0x00006127u, 0x0003003eu, 0x000060f2u, 0x00006128u, 0x000200f9u, 0x00006118u, 0x000200f8u, 0x0000611au, 0x00050041u, 0x000001c4u, 0x00006ca9u, 0x00006c9eu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006124u, 0x00006ca9u, 0x00040072u, 0x00000008u, 0x00006125u, 0x00006124u, 0x0003003eu, 0x000060f2u, 0x00006125u, 0x000200f9u, 0x00006118u, 0x000200f8u, 0x00006119u, 0x00050041u, 0x0000007bu, 0x00006ca8u, 0x00006c9cu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006120u, 0x00006ca8u, 0x00040071u, 0x00000006u, 0x00006121u, 0x00006120u, 0x0004007cu, 0x00000008u, 0x00006122u, 0x00006121u, 0x0003003eu, 0x000060f2u, 0x00006122u, 0x000200f9u, 0x00006118u, 0x000200f8u, 0x00006118u, 0x000f00f5u, 0x00000008u, 0x0000b978u, 0x00006122u, 0x00006119u, 0x00006125u, 0x0000611au, 0x00006128u, 0x0000611bu, 0x0000612bu, 0x0000611cu, 0x0000612fu, 0x0000611du, 0x00001990u, 0x0000611eu, 0x00050051u, 0x00000008u, 0x00006132u, 0x0000b977u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006133u, 0x0000b977u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006134u, 0x0000b977u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006135u, 0x00006132u, 0x00006133u, 0x00006134u, 0x0000b978u, 0x0003003eu, 0x000060f3u, 0x00006135u, 0x0003003eu, 0x00006085u, 0x00006135u, 0x00050041u, 0x0000007bu, 0x000060a8u, 0x0000216fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000060a9u, 0x000060a8u, 0x00040071u, 0x00000006u, 0x000060aau, 0x000060a9u, 0x0004007cu, 0x00000008u, 0x000060abu, 0x000060aau, 0x00050041u, 0x0000007bu, 0x000060acu, 0x00002170u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000060adu, 0x000060acu, 0x00040071u, 0x00000006u, 0x000060aeu, 0x000060adu, 0x0004007cu, 0x00000008u, 0x000060afu, 0x000060aeu, 0x0003003eu, 0x00006cadu, 0x00002974u, 0x0003003eu, 0x00006caeu, 0x00002387u, 0x0003003eu, 0x00006cafu, 0x00005f19u, 0x0003003eu, 0x00006cb0u, 0x0000aad7u, 0x0003003eu, 0x00006cb1u, 0x0000988bu, 0x0003003eu, 0x0000608bu, 0x000060abu, 0x0003003eu, 0x0000608cu, 0x000060afu, 0x000300f7u, 0x0000613au, 0x00000000u, 0x000d00fbu, 0x000060abu, 0x0000613bu, 0x00000000u, 0x0000613cu, 0x00000001u, 0x0000613du, 0x00000002u, 0x0000613eu, 0x00000004u, 0x0000613fu, 0x00000007u, 0x00006140u, 0x000200f8u, 0x00006140u, 0x00050041u, 0x0000007bu, 0x00006cb7u, 0x00006cadu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006158u, 0x00006cb7u, 0x00040071u, 0x00000006u, 0x00006159u, 0x00006158u, 0x0004007cu, 0x00000008u, 0x0000615au, 0x00006159u, 0x000500c4u, 0x00000008u, 0x0000615bu, 0x0000615au, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006cb8u, 0x00006cadu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x0000615du, 0x00006cb8u, 0x00040071u, 0x00000006u, 0x0000615eu, 0x0000615du, 0x0004007cu, 0x00000008u, 0x0000615fu, 0x0000615eu, 0x000500c5u, 0x00000008u, 0x00006160u, 0x0000615bu, 0x0000615fu, 0x00060050u, 0x00000044u, 0x00006161u, 0x00006160u, 0x00006160u, 0x00006160u, 0x0003003eu, 0x00006136u, 0x00006161u, 0x000200f9u, 0x0000613au, 0x000200f8u, 0x0000613fu, 0x0004003du, 0x00000010u, 0x00006153u, 0x00006caeu, 0x0008004fu, 0x00000047u, 0x00006154u, 0x00006153u, 0x00006153u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006155u, 0x00006154u, 0x0004007cu, 0x00000044u, 0x00006156u, 0x00006155u, 0x0003003eu, 0x00006136u, 0x00006156u, 0x000200f9u, 0x0000613au, 0x000200f8u, 0x0000613eu, 0x0004003du, 0x00000013u, 0x0000614fu, 0x00006cb1u, 0x0008004fu, 0x000004b6u, 0x00006150u, 0x0000614fu, 0x0000614fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006151u, 0x00006150u, 0x0003003eu, 0x00006136u, 0x00006151u, 0x000200f9u, 0x0000613au, 0x000200f8u, 0x0000613du, 0x0004003du, 0x00000013u, 0x0000614bu, 0x00006cb0u, 0x0008004fu, 0x000004b6u, 0x0000614cu, 0x0000614bu, 0x0000614bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000614du, 0x0000614cu, 0x0003003eu, 0x00006136u, 0x0000614du, 0x000200f9u, 0x0000613au, 0x000200f8u, 0x0000613cu, 0x0004003du, 0x00000013u, 0x00006147u, 0x00006cafu, 0x0008004fu, 0x000004b6u, 0x00006148u, 0x00006147u, 0x00006147u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006149u, 0x00006148u, 0x0003003eu, 0x00006136u, 0x00006149u, 0x000200f9u, 0x0000613au, 0x000200f8u, 0x0000613bu, 0x0004003du, 0x00000010u, 0x00006142u, 0x00006cadu, 0x0008004fu, 0x00000047u, 0x00006143u, 0x00006142u, 0x00006142u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006144u, 0x00006143u, 0x0004007cu, 0x00000044u, 0x00006145u, 0x00006144u, 0x0003003eu, 0x00006136u, 0x00006145u, 0x000200f9u, 0x0000613au, 0x000200f8u, 0x0000613au, 0x000f00f5u, 0x00000044u, 0x0000b98fu, 0x00006145u, 0x0000613bu, 0x00006149u, 0x0000613cu, 0x0000614du, 0x0000613du, 0x00006151u, 0x0000613eu, 0x00006156u, 0x0000613fu, 0x00006161u, 0x00006140u, 0x000300f7u, 0x00006163u, 0x00000000u, 0x000d00fbu, 0x000060afu, 0x00006164u, 0x00000000u, 0x00006165u, 0x00000001u, 0x00006166u, 0x00000002u, 0x00006167u, 0x00000004u, 0x00006168u, 0x00000006u, 0x00006169u, 0x000200f8u, 0x00006169u, 0x0003003eu, 0x00006137u, 0x00001990u, 0x000200f9u, 0x00006163u, 0x000200f8u, 0x00006168u, 0x00050041u, 0x0000007bu, 0x00006cbdu, 0x00006caeu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006178u, 0x00006cbdu, 0x00040071u, 0x00000006u, 0x00006179u, 0x00006178u, 0x0004007cu, 0x00000008u, 0x0000617au, 0x00006179u, 0x0003003eu, 0x00006137u, 0x0000617au, 0x000200f9u, 0x00006163u, 0x000200f8u, 0x00006167u, 0x00050041u, 0x000001c4u, 0x00006cbcu, 0x00006cb1u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006175u, 0x00006cbcu, 0x00040072u, 0x00000008u, 0x00006176u, 0x00006175u, 0x0003003eu, 0x00006137u, 0x00006176u, 0x000200f9u, 0x00006163u, 0x000200f8u, 0x00006166u, 0x00050041u, 0x000001c4u, 0x00006cbbu, 0x00006cb0u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006172u, 0x00006cbbu, 0x00040072u, 0x00000008u, 0x00006173u, 0x00006172u, 0x0003003eu, 0x00006137u, 0x00006173u, 0x000200f9u, 0x00006163u, 0x000200f8u, 0x00006165u, 0x00050041u, 0x000001c4u, 0x00006cbau, 0x00006cafu, 0x00000464u, 0x0004003du, 0x00000012u, 0x0000616fu, 0x00006cbau, 0x00040072u, 0x00000008u, 0x00006170u, 0x0000616fu, 0x0003003eu, 0x00006137u, 0x00006170u, 0x000200f9u, 0x00006163u, 0x000200f8u, 0x00006164u, 0x00050041u, 0x0000007bu, 0x00006cb9u, 0x00006cadu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000616bu, 0x00006cb9u, 0x00040071u, 0x00000006u, 0x0000616cu, 0x0000616bu, 0x0004007cu, 0x00000008u, 0x0000616du, 0x0000616cu, 0x0003003eu, 0x00006137u, 0x0000616du, 0x000200f9u, 0x00006163u, 0x000200f8u, 0x00006163u, 0x000f00f5u, 0x00000008u, 0x0000b990u, 0x0000616du, 0x00006164u, 0x00006170u, 0x00006165u, 0x00006173u, 0x00006166u, 0x00006176u, 0x00006167u, 0x0000617au, 0x00006168u, 0x00001990u, 0x00006169u, 0x00050051u, 0x00000008u, 0x0000617du, 0x0000b98fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000617eu, 0x0000b98fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000617fu, 0x0000b98fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006180u, 0x0000617du, 0x0000617eu, 0x0000617fu, 0x0000b990u, 0x0003003eu, 0x00006138u, 0x00006180u, 0x0003003eu, 0x00006089u, 0x00006180u, 0x00050041u, 0x0000007bu, 0x000060b2u, 0x0000216fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000060b3u, 0x000060b2u, 0x00040071u, 0x00000006u, 0x000060b4u, 0x000060b3u, 0x0004007cu, 0x00000008u, 0x000060b5u, 0x000060b4u, 0x00050041u, 0x0000007bu, 0x000060b6u, 0x00002170u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000060b7u, 0x000060b6u, 0x00040071u, 0x00000006u, 0x000060b8u, 0x000060b7u, 0x0004007cu, 0x00000008u, 0x000060b9u, 0x000060b8u, 0x0003003eu, 0x00006cbeu, 0x00002976u, 0x0003003eu, 0x00006cbfu, 0x00002387u, 0x0003003eu, 0x00006cc0u, 0x00005f19u, 0x0003003eu, 0x00006cc1u, 0x0000aad7u, 0x0003003eu, 0x00006cc2u, 0x0000988bu, 0x0003003eu, 0x00006cc3u, 0x0000ab84u, 0x0003003eu, 0x0000608fu, 0x000060b5u, 0x0003003eu, 0x00006090u, 0x000060b9u, 0x000300f7u, 0x00006185u, 0x00000000u, 0x001700fbu, 0x000060b5u, 0x00006186u, 0x00000000u, 0x00006187u, 0x00000007u, 0x00006188u, 0x00000001u, 0x00006189u, 0x00000002u, 0x0000618au, 0x00000004u, 0x0000618bu, 0x00000008u, 0x0000618cu, 0x00000009u, 0x0000618du, 0x0000000bu, 0x0000618eu, 0x0000000du, 0x0000618fu, 0x0000000fu, 0x00006190u, 0x000200f8u, 0x00006190u, 0x00050041u, 0x0000007bu, 0x00006ccau, 0x00006cbeu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000061bdu, 0x00006ccau, 0x00040071u, 0x00000006u, 0x000061beu, 0x000061bdu, 0x0004007cu, 0x00000008u, 0x000061bfu, 0x000061beu, 0x000500c4u, 0x00000008u, 0x000061c0u, 0x000061bfu, 0x0000025du, 0x00050041u, 0x0000007bu, 0x00006ccbu, 0x00006cbeu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000061c2u, 0x00006ccbu, 0x00040071u, 0x00000006u, 0x000061c3u, 0x000061c2u, 0x0004007cu, 0x00000008u, 0x000061c4u, 0x000061c3u, 0x000500c5u, 0x00000008u, 0x000061c5u, 0x000061c0u, 0x000061c4u, 0x00060050u, 0x00000044u, 0x000061c6u, 0x000061c5u, 0x000061c5u, 0x000061c5u, 0x0003003eu, 0x00006181u, 0x000061c6u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x0000618fu, 0x00040072u, 0x00000008u, 0x000061bau, 0x0000ab84u, 0x00060050u, 0x00000044u, 0x000061bbu, 0x000061bau, 0x000061bau, 0x000061bau, 0x0003003eu, 0x00006181u, 0x000061bbu, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x0000618eu, 0x0004003du, 0x00000010u, 0x000061b4u, 0x00006cbfu, 0x0008004fu, 0x00000047u, 0x000061b5u, 0x000061b4u, 0x000061b4u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x000061b6u, 0x000061b5u, 0x0004007cu, 0x00000044u, 0x000061b7u, 0x000061b6u, 0x0003003eu, 0x00006181u, 0x000061b7u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x0000618du, 0x0004003du, 0x00000013u, 0x000061b0u, 0x00006cc2u, 0x0008004fu, 0x000004b6u, 0x000061b1u, 0x000061b0u, 0x000061b0u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x000061b2u, 0x000061b1u, 0x0003003eu, 0x00006181u, 0x000061b2u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x0000618cu, 0x0004003du, 0x00000013u, 0x000061acu, 0x00006cc1u, 0x0008004fu, 0x000004b6u, 0x000061adu, 0x000061acu, 0x000061acu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x000061aeu, 0x000061adu, 0x0003003eu, 0x00006181u, 0x000061aeu, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x0000618bu, 0x0004003du, 0x00000010u, 0x000061a7u, 0x00006cbfu, 0x0008004fu, 0x00000047u, 0x000061a8u, 0x000061a7u, 0x000061a7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000061a9u, 0x000061a8u, 0x0004007cu, 0x00000044u, 0x000061aau, 0x000061a9u, 0x0003003eu, 0x00006181u, 0x000061aau, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x0000618au, 0x0004003du, 0x00000013u, 0x000061a3u, 0x00006cc2u, 0x0008004fu, 0x000004b6u, 0x000061a4u, 0x000061a3u, 0x000061a3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061a5u, 0x000061a4u, 0x0003003eu, 0x00006181u, 0x000061a5u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x00006189u, 0x0004003du, 0x00000013u, 0x0000619fu, 0x00006cc1u, 0x0008004fu, 0x000004b6u, 0x000061a0u, 0x0000619fu, 0x0000619fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061a1u, 0x000061a0u, 0x0003003eu, 0x00006181u, 0x000061a1u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x00006188u, 0x0008004fu, 0x000004b6u, 0x0000619cu, 0x00005f19u, 0x00005f19u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x0000619du, 0x0000619cu, 0x0003003eu, 0x00006181u, 0x0000619du, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x00006187u, 0x0008004fu, 0x000004b6u, 0x00006198u, 0x00005f19u, 0x00005f19u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006199u, 0x00006198u, 0x0003003eu, 0x00006181u, 0x00006199u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x00006186u, 0x0004003du, 0x00000010u, 0x00006192u, 0x00006cbeu, 0x0008004fu, 0x00000047u, 0x00006193u, 0x00006192u, 0x00006192u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006194u, 0x00006193u, 0x0004007cu, 0x00000044u, 0x00006195u, 0x00006194u, 0x0003003eu, 0x00006181u, 0x00006195u, 0x000200f9u, 0x00006185u, 0x000200f8u, 0x00006185u, 0x001900f5u, 0x00000044u, 0x0000b9a8u, 0x00006195u, 0x00006186u, 0x00006199u, 0x00006187u, 0x0000619du, 0x00006188u, 0x000061a1u, 0x00006189u, 0x000061a5u, 0x0000618au, 0x000061aau, 0x0000618bu, 0x000061aeu, 0x0000618cu, 0x000061b2u, 0x0000618du, 0x000061b7u, 0x0000618eu, 0x000061bbu, 0x0000618fu, 0x000061c6u, 0x00006190u, 0x000300f7u, 0x000061c8u, 0x00000000u, 0x000b00fbu, 0x000060b9u, 0x000061c9u, 0x00000000u, 0x000061cau, 0x00000001u, 0x000061cbu, 0x00000002u, 0x000061ccu, 0x00000004u, 0x000061cdu, 0x000200f8u, 0x000061cdu, 0x00050041u, 0x0000007bu, 0x00006ccfu, 0x00006cbfu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000061dcu, 0x00006ccfu, 0x00040071u, 0x00000006u, 0x000061ddu, 0x000061dcu, 0x0004007cu, 0x00000008u, 0x000061deu, 0x000061ddu, 0x0003003eu, 0x00006182u, 0x000061deu, 0x000200f9u, 0x000061c8u, 0x000200f8u, 0x000061ccu, 0x00050041u, 0x000001c4u, 0x00006cceu, 0x00006cc2u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000061d9u, 0x00006cceu, 0x00040072u, 0x00000008u, 0x000061dau, 0x000061d9u, 0x0003003eu, 0x00006182u, 0x000061dau, 0x000200f9u, 0x000061c8u, 0x000200f8u, 0x000061cbu, 0x00050041u, 0x000001c4u, 0x00006ccdu, 0x00006cc1u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000061d6u, 0x00006ccdu, 0x00040072u, 0x00000008u, 0x000061d7u, 0x000061d6u, 0x0003003eu, 0x00006182u, 0x000061d7u, 0x000200f9u, 0x000061c8u, 0x000200f8u, 0x000061cau, 0x00040072u, 0x00000008u, 0x000061d4u, 0x0000ab84u, 0x0003003eu, 0x00006182u, 0x000061d4u, 0x000200f9u, 0x000061c8u, 0x000200f8u, 0x000061c9u, 0x00050041u, 0x0000007bu, 0x00006cccu, 0x00006cbeu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000061cfu, 0x00006cccu, 0x00040071u, 0x00000006u, 0x000061d0u, 0x000061cfu, 0x0004007cu, 0x00000008u, 0x000061d1u, 0x000061d0u, 0x0003003eu, 0x00006182u, 0x000061d1u, 0x000200f9u, 0x000061c8u, 0x000200f8u, 0x000061c8u, 0x000d00f5u, 0x00000008u, 0x0000b9a9u, 0x000061d1u, 0x000061c9u, 0x000061d4u, 0x000061cau, 0x000061d7u, 0x000061cbu, 0x000061dau, 0x000061ccu, 0x000061deu, 0x000061cdu, 0x00050051u, 0x00000008u, 0x000061e1u, 0x0000b9a8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000061e2u, 0x0000b9a8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000061e3u, 0x0000b9a8u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000061e4u, 0x000061e1u, 0x000061e2u, 0x000061e3u, 0x0000b9a9u, 0x0003003eu, 0x00006183u, 0x000061e4u, 0x0003003eu, 0x0000608du, 0x000061e4u, 0x00050041u, 0x0000007bu, 0x000060bcu, 0x0000216fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000060bdu, 0x000060bcu, 0x00040071u, 0x00000006u, 0x000060beu, 0x000060bdu, 0x0004007cu, 0x00000008u, 0x000060bfu, 0x000060beu, 0x00050041u, 0x0000007bu, 0x000060c0u, 0x00002170u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000060c1u, 0x000060c0u, 0x00040071u, 0x00000006u, 0x000060c2u, 0x000060c1u, 0x0004007cu, 0x00000008u, 0x000060c3u, 0x000060c2u, 0x0003003eu, 0x00006cd0u, 0x00002978u, 0x0003003eu, 0x00006cd1u, 0x00002387u, 0x0003003eu, 0x00006cd2u, 0x00005f19u, 0x0003003eu, 0x00006cd3u, 0x0000aad7u, 0x0003003eu, 0x00006cd4u, 0x0000988bu, 0x0003003eu, 0x00006093u, 0x000060bfu, 0x0003003eu, 0x00006094u, 0x000060c3u, 0x000300f7u, 0x000061e9u, 0x00000000u, 0x000d00fbu, 0x000060bfu, 0x000061eau, 0x00000000u, 0x000061ebu, 0x00000001u, 0x000061ecu, 0x00000002u, 0x000061edu, 0x00000004u, 0x000061eeu, 0x00000006u, 0x000061efu, 0x000200f8u, 0x000061efu, 0x0003003eu, 0x000061e5u, 0x00001991u, 0x000200f9u, 0x000061e9u, 0x000200f8u, 0x000061eeu, 0x0004003du, 0x00000010u, 0x00006202u, 0x00006cd1u, 0x0008004fu, 0x00000047u, 0x00006203u, 0x00006202u, 0x00006202u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00006204u, 0x00006203u, 0x0004007cu, 0x00000044u, 0x00006205u, 0x00006204u, 0x0003003eu, 0x000061e5u, 0x00006205u, 0x000200f9u, 0x000061e9u, 0x000200f8u, 0x000061edu, 0x0004003du, 0x00000013u, 0x000061feu, 0x00006cd4u, 0x0008004fu, 0x000004b6u, 0x000061ffu, 0x000061feu, 0x000061feu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00006200u, 0x000061ffu, 0x0003003eu, 0x000061e5u, 0x00006200u, 0x000200f9u, 0x000061e9u, 0x000200f8u, 0x000061ecu, 0x0004003du, 0x00000013u, 0x000061fau, 0x00006cd3u, 0x0008004fu, 0x000004b6u, 0x000061fbu, 0x000061fau, 0x000061fau, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061fcu, 0x000061fbu, 0x0003003eu, 0x000061e5u, 0x000061fcu, 0x000200f9u, 0x000061e9u, 0x000200f8u, 0x000061ebu, 0x0004003du, 0x00000013u, 0x000061f6u, 0x00006cd2u, 0x0008004fu, 0x000004b6u, 0x000061f7u, 0x000061f6u, 0x000061f6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000061f8u, 0x000061f7u, 0x0003003eu, 0x000061e5u, 0x000061f8u, 0x000200f9u, 0x000061e9u, 0x000200f8u, 0x000061eau, 0x0004003du, 0x00000010u, 0x000061f1u, 0x00006cd0u, 0x0008004fu, 0x00000047u, 0x000061f2u, 0x000061f1u, 0x000061f1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000061f3u, 0x000061f2u, 0x0004007cu, 0x00000044u, 0x000061f4u, 0x000061f3u, 0x0003003eu, 0x000061e5u, 0x000061f4u, 0x000200f9u, 0x000061e9u, 0x000200f8u, 0x000061e9u, 0x000f00f5u, 0x00000044u, 0x0000b9c0u, 0x000061f4u, 0x000061eau, 0x000061f8u, 0x000061ebu, 0x000061fcu, 0x000061ecu, 0x00006200u, 0x000061edu, 0x00006205u, 0x000061eeu, 0x00001991u, 0x000061efu, 0x000300f7u, 0x00006207u, 0x00000000u, 0x000d00fbu, 0x000060c3u, 0x00006208u, 0x00000000u, 0x00006209u, 0x00000001u, 0x0000620au, 0x00000002u, 0x0000620bu, 0x00000004u, 0x0000620cu, 0x00000006u, 0x0000620du, 0x000200f8u, 0x0000620du, 0x0003003eu, 0x000061e6u, 0x00001990u, 0x000200f9u, 0x00006207u, 0x000200f8u, 0x0000620cu, 0x00050041u, 0x0000007bu, 0x00006cdeu, 0x00006cd1u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000621cu, 0x00006cdeu, 0x00040071u, 0x00000006u, 0x0000621du, 0x0000621cu, 0x0004007cu, 0x00000008u, 0x0000621eu, 0x0000621du, 0x0003003eu, 0x000061e6u, 0x0000621eu, 0x000200f9u, 0x00006207u, 0x000200f8u, 0x0000620bu, 0x00050041u, 0x000001c4u, 0x00006cddu, 0x00006cd4u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006219u, 0x00006cddu, 0x00040072u, 0x00000008u, 0x0000621au, 0x00006219u, 0x0003003eu, 0x000061e6u, 0x0000621au, 0x000200f9u, 0x00006207u, 0x000200f8u, 0x0000620au, 0x00050041u, 0x000001c4u, 0x00006cdcu, 0x00006cd3u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006216u, 0x00006cdcu, 0x00040072u, 0x00000008u, 0x00006217u, 0x00006216u, 0x0003003eu, 0x000061e6u, 0x00006217u, 0x000200f9u, 0x00006207u, 0x000200f8u, 0x00006209u, 0x00050041u, 0x000001c4u, 0x00006cdbu, 0x00006cd2u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00006213u, 0x00006cdbu, 0x00040072u, 0x00000008u, 0x00006214u, 0x00006213u, 0x0003003eu, 0x000061e6u, 0x00006214u, 0x000200f9u, 0x00006207u, 0x000200f8u, 0x00006208u, 0x00050041u, 0x0000007bu, 0x00006cdau, 0x00006cd0u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000620fu, 0x00006cdau, 0x00040071u, 0x00000006u, 0x00006210u, 0x0000620fu, 0x0004007cu, 0x00000008u, 0x00006211u, 0x00006210u, 0x0003003eu, 0x000061e6u, 0x00006211u, 0x000200f9u, 0x00006207u, 0x000200f8u, 0x00006207u, 0x000f00f5u, 0x00000008u, 0x0000b9c1u, 0x00006211u, 0x00006208u, 0x00006214u, 0x00006209u, 0x00006217u, 0x0000620au, 0x0000621au, 0x0000620bu, 0x0000621eu, 0x0000620cu, 0x00001990u, 0x0000620du, 0x00050051u, 0x00000008u, 0x00006221u, 0x0000b9c0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00006222u, 0x0000b9c0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00006223u, 0x0000b9c0u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00006224u, 0x00006221u, 0x00006222u, 0x00006223u, 0x0000b9c1u, 0x0003003eu, 0x000061e7u, 0x00006224u, 0x0003003eu, 0x00006091u, 0x00006224u, 0x0003003eu, 0x00006096u, 0x00006135u, 0x0003003eu, 0x00006097u, 0x00006180u, 0x0003003eu, 0x00006098u, 0x000061e4u, 0x0003003eu, 0x00006099u, 0x00006224u, 0x000600cau, 0x00000009u, 0x0000622bu, 0x000061e4u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x00006098u, 0x0000622bu, 0x0003003eu, 0x00006225u, 0x00006135u, 0x00050082u, 0x00000009u, 0x00006244u, 0x00006135u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x00006245u, 0x00006244u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006247u, 0x00006245u, 0x0000f3a1u, 0x0003003eu, 0x00006241u, 0x00006247u, 0x0003003eu, 0x00006096u, 0x00006247u, 0x0003003eu, 0x00006226u, 0x00006180u, 0x00050082u, 0x00000009u, 0x0000624bu, 0x00006180u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x0000624cu, 0x0000624bu, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000624eu, 0x0000624cu, 0x0000f3a1u, 0x0003003eu, 0x00006248u, 0x0000624eu, 0x0003003eu, 0x00006097u, 0x0000624eu, 0x0003003eu, 0x00006227u, 0x00006224u, 0x00050082u, 0x00000009u, 0x00006252u, 0x00006224u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x00006253u, 0x00006252u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x00006255u, 0x00006253u, 0x0000f3a1u, 0x0003003eu, 0x0000624fu, 0x00006255u, 0x0003003eu, 0x00006099u, 0x00006255u, 0x00050082u, 0x00000009u, 0x00006234u, 0x00006247u, 0x0000624eu, 0x00050084u, 0x00000009u, 0x00006236u, 0x00006234u, 0x0000622bu, 0x0003003eu, 0x00006228u, 0x00006236u, 0x00050080u, 0x00000009u, 0x00006239u, 0x00006236u, 0x0000f3a1u, 0x0003003eu, 0x00006228u, 0x00006239u, 0x000500c3u, 0x00000009u, 0x0000623cu, 0x00006239u, 0x0000f3acu, 0x00040072u, 0x00000013u, 0x0000623du, 0x0000623cu, 0x00040072u, 0x00000013u, 0x0000623fu, 0x00006255u, 0x00050080u, 0x00000013u, 0x00006240u, 0x0000623du, 0x0000623fu, 0x0003003eu, 0x00006229u, 0x00006240u, 0x0003003eu, 0x00006095u, 0x00006240u, 0x0004003du, 0x00000013u, 0x000060cbu, 0x00006095u, 0x00040072u, 0x00000009u, 0x000060ccu, 0x000060cbu, 0x0003003eu, 0x0000609au, 0x000060ccu, 0x00050082u, 0x00000009u, 0x00006259u, 0x000060ccu, 0x0000f3a1u, 0x0003003eu, 0x0000609au, 0x00006259u, 0x000600cau, 0x00000009u, 0x0000625bu, 0x00006259u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000609au, 0x0000625bu, 0x00050080u, 0x00000009u, 0x0000625eu, 0x0000625bu, 0x0000f3a1u, 0x0003003eu, 0x0000609au, 0x0000625eu, 0x0008000cu, 0x00000009u, 0x00006260u, 0x00000001u, 0x0000002du, 0x0000625eu, 0x00000b0bu, 0x00000b0cu, 0x00040072u, 0x00000013u, 0x00006261u, 0x00006260u, 0x0003003eu, 0x00006256u, 0x00006261u, 0x0003003eu, 0x00006095u, 0x00006261u, 0x00050041u, 0x000001c4u, 0x000060ceu, 0x00006095u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000060cfu, 0x000060ceu, 0x00040072u, 0x00000008u, 0x000060d0u, 0x000060cfu, 0x0004003du, 0x00000012u, 0x000060d2u, 0x000060ceu, 0x00040072u, 0x00000008u, 0x000060d3u, 0x000060d2u, 0x00050080u, 0x00000008u, 0x000060d4u, 0x000060d3u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x000060d5u, 0x000060d4u, 0x0000025du, 0x00050080u, 0x00000008u, 0x000060d6u, 0x000060d0u, 0x000060d5u, 0x0003003eu, 0x0000609bu, 0x000060d6u, 0x000300f7u, 0x000060d8u, 0x00000000u, 0x000400fau, 0x000021dau, 0x000060d9u, 0x000060dau, 0x000200f8u, 0x000060dau, 0x000500c4u, 0x00000008u, 0x000060e3u, 0x00002282u, 0x00000236u, 0x0003003eu, 0x0000609cu, 0x000060e3u, 0x000200f9u, 0x000060d8u, 0x000200f8u, 0x000060d9u, 0x00050084u, 0x00000008u, 0x000060ddu, 0x000060d6u, 0x00002282u, 0x00050080u, 0x00000008u, 0x000060deu, 0x000060ddu, 0x00000233u, 0x000500c3u, 0x00000008u, 0x000060dfu, 0x000060deu, 0x00000230u, 0x0003003eu, 0x0000609cu, 0x000060dfu, 0x000500c3u, 0x00000008u, 0x000060e1u, 0x000060dfu, 0x00000236u, 0x0003003eu, 0x00002172u, 0x000060e1u, 0x000200f9u, 0x000060d8u, 0x000200f8u, 0x000060d8u, 0x000700f5u, 0x00000008u, 0x0000b9f4u, 0x000060e1u, 0x000060d9u, 0x00002282u, 0x000060dau, 0x000700f5u, 0x00000008u, 0x0000b9f1u, 0x000060dfu, 0x000060d9u, 0x000060e3u, 0x000060dau, 0x000300f7u, 0x000060e5u, 0x00000000u, 0x000400fau, 0x000021ddu, 0x000060e6u, 0x000060e7u, 0x000200f8u, 0x000060e7u, 0x00050080u, 0x00000008u, 0x000060ebu, 0x000060d6u, 0x0000a5c1u, 0x0003003eu, 0x0000609bu, 0x000060ebu, 0x000200f9u, 0x000060e5u, 0x000200f8u, 0x000060e6u, 0x0003003eu, 0x0000609bu, 0x0000b9f1u, 0x000200f9u, 0x000060e5u, 0x000200f8u, 0x000060e5u, 0x000700f5u, 0x00000008u, 0x0000b9f2u, 0x0000b9f1u, 0x000060e6u, 0x000060ebu, 0x000060e7u, 0x0008000cu, 0x00000008u, 0x000060edu, 0x00000001u, 0x0000002du, 0x0000b9f2u, 0x00000220u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x000060eeu, 0x000060edu, 0x0003003eu, 0x000060ceu, 0x000060eeu, 0x0004003du, 0x00000013u, 0x000060f0u, 0x00006095u, 0x0003003eu, 0x0000609du, 0x000060f0u, 0x0003003eu, 0x000020fdu, 0x0000b9f4u, 0x00040072u, 0x00000b15u, 0x000023b4u, 0x000060f0u, 0x0004007cu, 0x00000010u, 0x000023b5u, 0x000023b4u, 0x0003003eu, 0x0000216du, 0x000023b5u, 0x000200f9u, 0x0000237cu, 0x000200f8u, 0x0000237cu, 0x000700f5u, 0x0000000fu, 0x0000bc3cu, 0x0000b8cfu, 0x000060e5u, 0x000023d0u, 0x000062c8u, 0x000700f5u, 0x00000008u, 0x0000bb07u, 0x0000b9f4u, 0x000060e5u, 0x0000b1aeu, 0x000062c8u, 0x000500aau, 0x00000069u, 0x000023d3u, 0x0000bb07u, 0x00000220u, 0x000500a7u, 0x00000069u, 0x000023d4u, 0x000021ecu, 0x000023d3u, 0x000300f7u, 0x000023d5u, 0x00000000u, 0x000400fau, 0x000023d4u, 0x000023d6u, 0x000023d5u, 0x000200f8u, 0x000023d6u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x000023d5u, 0x000300f7u, 0x000023d8u, 0x00000000u, 0x000400fau, 0x000021fbu, 0x000023d9u, 0x000023d8u, 0x000200f8u, 0x000023d9u, 0x000300f7u, 0x000023dbu, 0x00000000u, 0x000400fau, 0x000021feu, 0x000023dcu, 0x000023ddu, 0x000200f8u, 0x000023ddu, 0x00050041u, 0x0000007bu, 0x0000726bu, 0x0000725du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000023e0u, 0x0000726bu, 0x0003003eu, 0x0000217du, 0x000023e0u, 0x000200f9u, 0x000023dbu, 0x000200f8u, 0x000023dcu, 0x0004003du, 0x00000011u, 0x00006446u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00006447u, 0x00006446u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x00006448u, 0x00006447u, 0x0003003eu, 0x00006445u, 0x00006448u, 0x0003003eu, 0x0000217du, 0x00006448u, 0x000200f9u, 0x000023dbu, 0x000200f8u, 0x000023dbu, 0x000700f5u, 0x0000000fu, 0x0000bc47u, 0x00006448u, 0x000023dcu, 0x000023e0u, 0x000023ddu, 0x000500b0u, 0x00000069u, 0x000023e3u, 0x0000bc3cu, 0x0000bc47u, 0x000300f7u, 0x000023e4u, 0x00000000u, 0x000400fau, 0x000023e3u, 0x000023e5u, 0x000023e4u, 0x000200f8u, 0x000023e5u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000536u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x000023e4u, 0x000200f9u, 0x000023d8u, 0x000200f8u, 0x000023d8u, 0x0004003du, 0x00000010u, 0x000023e6u, 0x0000216du, 0x0003003eu, 0x00007cf8u, 0x000023e6u, 0x000500c4u, 0x00000008u, 0x000023e9u, 0x00002c0cu, 0x00000260u, 0x000500c5u, 0x00000008u, 0x000023ebu, 0x000023e9u, 0x0000a5b5u, 0x0003003eu, 0x00007cf9u, 0x000023ebu, 0x00040072u, 0x0000037bu, 0x000023eeu, 0x0000bb07u, 0x0004007cu, 0x0000000fu, 0x000023efu, 0x000023eeu, 0x0003003eu, 0x00007cfau, 0x000023efu, 0x00050041u, 0x0000007bu, 0x000023f1u, 0x00002102u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000023f2u, 0x000023f1u, 0x00040071u, 0x00000006u, 0x000023f3u, 0x000023f2u, 0x0004007cu, 0x00000008u, 0x000023f4u, 0x000023f3u, 0x00050080u, 0x00000008u, 0x000023f6u, 0x000023f4u, 0x0000a5c1u, 0x0007000cu, 0x00000008u, 0x000023f7u, 0x00000001u, 0x00000027u, 0x000023f6u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x000023f8u, 0x000023f7u, 0x0004007cu, 0x0000000fu, 0x000023f9u, 0x000023f8u, 0x0003003eu, 0x00007cfbu, 0x000023f9u, 0x0003003eu, 0x000020b3u, 0x00000559u, 0x0003003eu, 0x000020b4u, 0x00000559u, 0x000200f9u, 0x0000217fu, 0x000200f8u, 0x0000217fu, 0x001900f5u, 0x00000069u, 0x0000eb49u, 0x0000bd8cu, 0x00002193u, 0x0000bd8cu, 0x000021b2u, 0x0000bd8cu, 0x0000223au, 0x0000eb4fu, 0x00002265u, 0x0000eb4fu, 0x00002264u, 0x0000bd8cu, 0x0000226eu, 0x0000bd8cu, 0x00002280u, 0x0000bd8cu, 0x0000228cu, 0x0000bd8cu, 0x000023d6u, 0x0000bd8cu, 0x000023e5u, 0x0000bd8cu, 0x000023d8u, 0x001900f5u, 0x00000012u, 0x0000eab7u, 0x0000ab90u, 0x00002193u, 0x0000ab90u, 0x000021b2u, 0x0000ab90u, 0x0000223au, 0x0000ab90u, 0x00002265u, 0x0000ab90u, 0x00002264u, 0x0000ab90u, 0x0000226eu, 0x0000ab90u, 0x00002280u, 0x0000ab90u, 0x0000228cu, 0x0000ab84u, 0x000023d6u, 0x0000ab84u, 0x000023e5u, 0x0000ab84u, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000ea25u, 0x0000aae6u, 0x00002193u, 0x0000aae6u, 0x000021b2u, 0x0000aae6u, 0x0000223au, 0x0000aae6u, 0x00002265u, 0x0000aae6u, 0x00002264u, 0x0000aae6u, 0x0000226eu, 0x0000aae6u, 0x00002280u, 0x0000aae6u, 0x0000228cu, 0x0000aad7u, 0x000023d6u, 0x0000aad7u, 0x000023e5u, 0x0000aad7u, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e983u, 0x0000a018u, 0x00002193u, 0x0000a018u, 0x000021b2u, 0x0000a018u, 0x0000223au, 0x0000a018u, 0x00002265u, 0x0000a018u, 0x00002264u, 0x0000a018u, 0x0000226eu, 0x0000a018u, 0x00002280u, 0x0000a018u, 0x0000228cu, 0x0000e9cbu, 0x000023d6u, 0x0000e9cbu, 0x000023e5u, 0x0000e9cbu, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e8e3u, 0x00009f34u, 0x00002193u, 0x00009f34u, 0x000021b2u, 0x00009f34u, 0x0000223au, 0x00009f34u, 0x00002265u, 0x00009f34u, 0x00002264u, 0x00009f34u, 0x0000226eu, 0x00009f34u, 0x00002280u, 0x00009f34u, 0x0000228cu, 0x0000e92bu, 0x000023d6u, 0x0000e92bu, 0x000023e5u, 0x0000e92bu, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e843u, 0x00009e4du, 0x00002193u, 0x00009e4du, 0x000021b2u, 0x00009e4du, 0x0000223au, 0x00009e4du, 0x00002265u, 0x00009e4du, 0x00002264u, 0x00009e4du, 0x0000226eu, 0x00009e4du, 0x00002280u, 0x00009e4du, 0x0000228cu, 0x0000e88bu, 0x000023d6u, 0x0000e88bu, 0x000023e5u, 0x0000e88bu, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e7a3u, 0x00009d65u, 0x00002193u, 0x00009d65u, 0x000021b2u, 0x00009d65u, 0x0000223au, 0x00009d65u, 0x00002265u, 0x00009d65u, 0x00002264u, 0x00009d65u, 0x0000226eu, 0x00009d65u, 0x00002280u, 0x00009d65u, 0x0000228cu, 0x0000e7ebu, 0x000023d6u, 0x0000e7ebu, 0x000023e5u, 0x0000e7ebu, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e711u, 0x00009898u, 0x00002193u, 0x00009898u, 0x000021b2u, 0x00009898u, 0x0000223au, 0x00009898u, 0x00002265u, 0x00009898u, 0x00002264u, 0x00009898u, 0x0000226eu, 0x00009898u, 0x00002280u, 0x00009898u, 0x0000228cu, 0x0000988bu, 0x000023d6u, 0x0000988bu, 0x000023e5u, 0x0000988bu, 0x000023d8u, 0x001900f5u, 0x00000069u, 0x0000e618u, 0x00009306u, 0x00002193u, 0x00009306u, 0x000021b2u, 0x00009306u, 0x0000223au, 0x00009306u, 0x00002265u, 0x00009306u, 0x00002264u, 0x00009306u, 0x0000226eu, 0x00009306u, 0x00002280u, 0x00009306u, 0x0000228cu, 0x0000e661u, 0x000023d6u, 0x0000e661u, 0x000023e5u, 0x0000e661u, 0x000023d8u, 0x001900f5u, 0x00000069u, 0x0000e51fu, 0x00009263u, 0x00002193u, 0x00009263u, 0x000021b2u, 0x00009263u, 0x0000223au, 0x00009263u, 0x00002265u, 0x00009263u, 0x00002264u, 0x00009263u, 0x0000226eu, 0x00009263u, 0x00002280u, 0x00009263u, 0x0000228cu, 0x0000e568u, 0x000023d6u, 0x0000e568u, 0x000023e5u, 0x0000e568u, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e413u, 0x000088d3u, 0x00002193u, 0x000088d3u, 0x000021b2u, 0x000088d3u, 0x0000223au, 0x000088d3u, 0x00002265u, 0x000088d3u, 0x00002264u, 0x000088d3u, 0x0000226eu, 0x000088d3u, 0x00002280u, 0x000088d3u, 0x0000228cu, 0x0000e45du, 0x000023d6u, 0x0000e45du, 0x000023e5u, 0x0000e45du, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e309u, 0x00008859u, 0x00002193u, 0x00008859u, 0x000021b2u, 0x00008859u, 0x0000223au, 0x00008859u, 0x00002265u, 0x00008859u, 0x00002264u, 0x00008859u, 0x0000226eu, 0x00008859u, 0x00002280u, 0x00008859u, 0x0000228cu, 0x0000e353u, 0x000023d6u, 0x0000e353u, 0x000023e5u, 0x0000e353u, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e1ffu, 0x000087dcu, 0x00002193u, 0x000087dcu, 0x000021b2u, 0x000087dcu, 0x0000223au, 0x000087dcu, 0x00002265u, 0x000087dcu, 0x00002264u, 0x000087dcu, 0x0000226eu, 0x000087dcu, 0x00002280u, 0x000087dcu, 0x0000228cu, 0x0000e249u, 0x000023d6u, 0x0000e249u, 0x000023e5u, 0x0000e249u, 0x000023d8u, 0x001900f5u, 0x00000013u, 0x0000e0f5u, 0x0000875du, 0x00002193u, 0x0000875du, 0x000021b2u, 0x0000875du, 0x0000223au, 0x0000875du, 0x00002265u, 0x0000875du, 0x00002264u, 0x0000875du, 0x0000226eu, 0x0000875du, 0x00002280u, 0x0000875du, 0x0000228cu, 0x0000e13fu, 0x000023d6u, 0x0000e13fu, 0x000023e5u, 0x0000e13fu, 0x000023d8u, 0x001900f5u, 0x000000efu, 0x0000df94u, 0x00008059u, 0x00002193u, 0x00008059u, 0x000021b2u, 0x00008059u, 0x0000223au, 0x00008059u, 0x00002265u, 0x00008059u, 0x00002264u, 0x00008059u, 0x0000226eu, 0x00008059u, 0x00002280u, 0x00008059u, 0x0000228cu, 0x0000804eu, 0x000023d6u, 0x0000804eu, 0x000023e5u, 0x0000804eu, 0x000023d8u, 0x001900f5u, 0x000000efu, 0x0000de33u, 0x00008035u, 0x00002193u, 0x00008035u, 0x000021b2u, 0x00008035u, 0x0000223au, 0x00008035u, 0x00002265u, 0x00008035u, 0x00002264u, 0x00008035u, 0x0000226eu, 0x00008035u, 0x00002280u, 0x00008035u, 0x0000228cu, 0x0000802au, 0x000023d6u, 0x0000802au, 0x000023e5u, 0x0000802au, 0x000023d8u, 0x001900f5u, 0x00000044u, 0x0000dcc6u, 0x00007f6eu, 0x00002193u, 0x00007f6eu, 0x000021b2u, 0x00007f6eu, 0x0000223au, 0x00007f6eu, 0x00002265u, 0x00007f6eu, 0x00002264u, 0x00007f6eu, 0x0000226eu, 0x00007f6eu, 0x00002280u, 0x00007f6eu, 0x0000228cu, 0x00007f68u, 0x000023d6u, 0x00007f68u, 0x000023e5u, 0x00007f68u, 0x000023d8u, 0x001900f5u, 0x00000044u, 0x0000db50u, 0x00007f5fu, 0x00002193u, 0x00007f5fu, 0x000021b2u, 0x00007f5fu, 0x0000223au, 0x00007f5fu, 0x00002265u, 0x00007f5fu, 0x00002264u, 0x00007f5fu, 0x0000226eu, 0x00007f5fu, 0x00002280u, 0x00007f5fu, 0x0000228cu, 0x00007f59u, 0x000023d6u, 0x00007f59u, 0x000023e5u, 0x00007f59u, 0x000023d8u, 0x001900f5u, 0x00000010u, 0x0000c2b4u, 0x0000c2b6u, 0x00002193u, 0x0000c2b6u, 0x000021b2u, 0x0000c2b6u, 0x0000223au, 0x0000c2b6u, 0x00002265u, 0x0000c2b6u, 0x00002264u, 0x0000c2b6u, 0x0000226eu, 0x0000c2b6u, 0x00002280u, 0x0000c2b6u, 0x0000228cu, 0x0000c2b6u, 0x000023d6u, 0x0000c2b6u, 0x000023e5u, 0x000023e6u, 0x000023d8u, 0x001900f5u, 0x00000008u, 0x0000c192u, 0x0000c194u, 0x00002193u, 0x0000c194u, 0x000021b2u, 0x0000c194u, 0x0000223au, 0x0000bef4u, 0x00002265u, 0x0000bef4u, 0x00002264u, 0x0000c194u, 0x0000226eu, 0x0000c194u, 0x00002280u, 0x0000c194u, 0x0000228cu, 0x0000c194u, 0x000023d6u, 0x0000c194u, 0x000023e5u, 0x000023ebu, 0x000023d8u, 0x001900f5u, 0x0000000fu, 0x0000c071u, 0x0000c073u, 0x00002193u, 0x0000c073u, 0x000021b2u, 0x0000c073u, 0x0000223au, 0x00000626u, 0x00002265u, 0x00000626u, 0x00002264u, 0x00000627u, 0x0000226eu, 0x0000c073u, 0x00002280u, 0x0000c073u, 0x0000228cu, 0x0000c073u, 0x000023d6u, 0x0000c073u, 0x000023e5u, 0x000023efu, 0x000023d8u, 0x001900f5u, 0x0000000fu, 0x0000bf24u, 0x0000bf26u, 0x00002193u, 0x0000bf26u, 0x000021b2u, 0x0000bf26u, 0x0000223au, 0x0000bf26u, 0x00002265u, 0x0000bf26u, 0x00002264u, 0x0000bf26u, 0x0000226eu, 0x0000bf26u, 0x00002280u, 0x0000bf26u, 0x0000228cu, 0x0000bf26u, 0x000023d6u, 0x0000bf26u, 0x000023e5u, 0x000023f9u, 0x000023d8u, 0x001900f5u, 0x00000069u, 0x0000bf23u, 0x00000536u, 0x00002193u, 0x00000536u, 0x000021b2u, 0x00000536u, 0x0000223au, 0x00000536u, 0x00002265u, 0x00000559u, 0x00002264u, 0x00002274u, 0x0000226eu, 0x00000536u, 0x00002280u, 0x00000536u, 0x0000228cu, 0x00000536u, 0x000023d6u, 0x00000536u, 0x000023e5u, 0x00000559u, 0x000023d8u, 0x0003003eu, 0x0000217eu, 0x0000bf23u, 0x00070050u, 0x000000d6u, 0x00007d00u, 0x0000c2b4u, 0x0000c192u, 0x0000c071u, 0x0000bf24u, 0x0003003eu, 0x00007cebu, 0x0000c2b4u, 0x0003003eu, 0x00007cecu, 0x0000c192u, 0x0003003eu, 0x00007cedu, 0x0000c071u, 0x0003003eu, 0x00007ceeu, 0x0000bf24u, 0x000300f7u, 0x00001fadu, 0x00000000u, 0x000400fau, 0x0000bf23u, 0x00001facu, 0x00001fadu, 0x000200f8u, 0x00001facu, 0x00040071u, 0x00000006u, 0x00001fb0u, 0x0000c071u, 0x0004007cu, 0x00000008u, 0x00001fb1u, 0x00001fb0u, 0x000500c7u, 0x00000008u, 0x00001fb3u, 0x00001fb1u, 0x00001fb2u, 0x000500abu, 0x00000069u, 0x00001fb4u, 0x00001fb3u, 0x00000220u, 0x000300f7u, 0x00001fb6u, 0x00000000u, 0x000400fau, 0x00001fb4u, 0x00001fb5u, 0x00001fbcu, 0x000200f8u, 0x00001fbcu, 0x000500c7u, 0x00000008u, 0x00001fc1u, 0x00001fb1u, 0x0000115du, 0x000500abu, 0x00000069u, 0x00001fc2u, 0x00001fc1u, 0x00000220u, 0x000300f7u, 0x00001fc4u, 0x00000000u, 0x000400fau, 0x00001fc2u, 0x00001fc3u, 0x00001fccu, 0x000200f8u, 0x00001fccu, 0x0003003eu, 0x00001fcdu, 0x00001f31u, 0x0003003eu, 0x00001fcfu, 0x00001f35u, 0x0003003eu, 0x00001fd1u, 0x00001fa1u, 0x0003003eu, 0x00007d01u, 0x0000c2b4u, 0x0003003eu, 0x00007d02u, 0x0000c192u, 0x0003003eu, 0x00007d03u, 0x0000c071u, 0x0003003eu, 0x00007d04u, 0x0000bf24u, 0x000500c3u, 0x00000008u, 0x000065c3u, 0x0000c192u, 0x00000260u, 0x0003003eu, 0x0000657eu, 0x000065c3u, 0x000500c7u, 0x00000008u, 0x000065c6u, 0x0000c192u, 0x00000a0du, 0x0003003eu, 0x0000657fu, 0x000065c6u, 0x0003003eu, 0x00006580u, 0x00001fb1u, 0x0003003eu, 0x00006581u, 0x0000c2b4u, 0x0003003eu, 0x00006582u, 0x0000bf24u, 0x00080041u, 0x00000671u, 0x000065d0u, 0x00000a20u, 0x00000220u, 0x00001fa1u, 0x00000220u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000065d1u, 0x000065d0u, 0x00040071u, 0x00000006u, 0x000065d2u, 0x000065d1u, 0x0003003eu, 0x00006583u, 0x000065d2u, 0x0003003eu, 0x00006585u, 0x00001fa1u, 0x00060041u, 0x00000247u, 0x00006671u, 0x00000245u, 0x00000220u, 0x00001fa1u, 0x0004003du, 0x00000241u, 0x00006672u, 0x00006671u, 0x00050051u, 0x00000010u, 0x00006673u, 0x00006672u, 0x00000000u, 0x0003003eu, 0x00006bc3u, 0x00006673u, 0x00050051u, 0x00000010u, 0x00006675u, 0x00006672u, 0x00000001u, 0x0003003eu, 0x00006bc4u, 0x00006675u, 0x00050051u, 0x00000010u, 0x00006677u, 0x00006672u, 0x00000002u, 0x0003003eu, 0x00006bc5u, 0x00006677u, 0x00050051u, 0x00000010u, 0x00006679u, 0x00006672u, 0x00000003u, 0x0003003eu, 0x00006bc6u, 0x00006679u, 0x00050051u, 0x00000010u, 0x0000667bu, 0x00006672u, 0x00000004u, 0x0003003eu, 0x00006bc7u, 0x0000667bu, 0x00050051u, 0x00000010u, 0x0000667du, 0x00006672u, 0x00000005u, 0x0003003eu, 0x00006bc8u, 0x0000667du, 0x00050051u, 0x00000010u, 0x0000667fu, 0x00006672u, 0x00000006u, 0x0003003eu, 0x00006bc9u, 0x0000667fu, 0x00050051u, 0x00000010u, 0x00006681u, 0x00006672u, 0x00000007u, 0x0003003eu, 0x00006bcau, 0x00006681u, 0x00050051u, 0x00000010u, 0x00006683u, 0x00006672u, 0x00000008u, 0x0003003eu, 0x00006bcbu, 0x00006683u, 0x00050051u, 0x00000010u, 0x00006685u, 0x00006672u, 0x00000009u, 0x0003003eu, 0x00006bccu, 0x00006685u, 0x00050051u, 0x00000006u, 0x00006687u, 0x00006672u, 0x0000000au, 0x0003003eu, 0x00006bcdu, 0x00006687u, 0x00050051u, 0x00000011u, 0x00006689u, 0x00006672u, 0x0000000bu, 0x0003003eu, 0x00006bceu, 0x00006689u, 0x00050051u, 0x0000000fu, 0x0000668bu, 0x00006672u, 0x0000000cu, 0x0003003eu, 0x00006bcfu, 0x0000668bu, 0x00050051u, 0x0000000fu, 0x0000668du, 0x00006672u, 0x0000000du, 0x0003003eu, 0x00006bd0u, 0x0000668du, 0x00050051u, 0x00000013u, 0x0000668fu, 0x00006672u, 0x0000000eu, 0x0003003eu, 0x00006bd1u, 0x0000668fu, 0x00120050u, 0x00000014u, 0x00006be1u, 0x00006673u, 0x00006675u, 0x00006677u, 0x00006679u, 0x0000667bu, 0x0000667du, 0x0000667fu, 0x00006681u, 0x00006683u, 0x00006685u, 0x00006687u, 0x00006689u, 0x0000668bu, 0x0000668du, 0x0000668fu, 0x0003003eu, 0x00006be2u, 0x00006673u, 0x0003003eu, 0x00006be3u, 0x00006675u, 0x0003003eu, 0x00006be4u, 0x00006677u, 0x0003003eu, 0x00006be5u, 0x00006679u, 0x0003003eu, 0x00006be6u, 0x0000667bu, 0x0003003eu, 0x00006be7u, 0x0000667du, 0x0003003eu, 0x00006be8u, 0x0000667fu, 0x0003003eu, 0x00006be9u, 0x00006681u, 0x0003003eu, 0x00006beau, 0x00006683u, 0x0003003eu, 0x00006bebu, 0x00006685u, 0x0003003eu, 0x00006becu, 0x00006687u, 0x0003003eu, 0x00006bedu, 0x00006689u, 0x0003003eu, 0x00006beeu, 0x0000668bu, 0x0003003eu, 0x00006befu, 0x0000668du, 0x0003003eu, 0x00006bf0u, 0x0000668fu, 0x0003003eu, 0x00006c11u, 0x00006683u, 0x0003003eu, 0x00006c12u, 0x00006685u, 0x0003003eu, 0x00006c14u, 0x00006689u, 0x0003003eu, 0x00006c15u, 0x0000668bu, 0x0003003eu, 0x00006587u, 0x000065d2u, 0x00060041u, 0x00000298u, 0x00006695u, 0x00000296u, 0x00000220u, 0x000065d2u, 0x0004003du, 0x00000292u, 0x00006696u, 0x00006695u, 0x00050051u, 0x00000010u, 0x00006697u, 0x00006696u, 0x00000000u, 0x0003003eu, 0x00006b9eu, 0x00006697u, 0x00050051u, 0x00000010u, 0x00006699u, 0x00006696u, 0x00000001u, 0x0003003eu, 0x00006b9fu, 0x00006699u, 0x00050051u, 0x00000006u, 0x0000669bu, 0x00006696u, 0x00000002u, 0x0003003eu, 0x00006ba0u, 0x0000669bu, 0x00050051u, 0x0000000fu, 0x0000669du, 0x00006696u, 0x00000003u, 0x0003003eu, 0x00006ba1u, 0x0000669du, 0x00050051u, 0x0000000fu, 0x0000669fu, 0x00006696u, 0x00000004u, 0x0003003eu, 0x00006ba2u, 0x0000669fu, 0x00050051u, 0x0000000fu, 0x000066a1u, 0x00006696u, 0x00000005u, 0x0003003eu, 0x00006ba3u, 0x000066a1u, 0x00050051u, 0x0000000fu, 0x000066a3u, 0x00006696u, 0x00000006u, 0x0003003eu, 0x00006ba4u, 0x000066a3u, 0x000a0050u, 0x0000001eu, 0x00006bacu, 0x00006697u, 0x00006699u, 0x0000669bu, 0x0000669du, 0x0000669fu, 0x000066a1u, 0x000066a3u, 0x0003003eu, 0x00006badu, 0x00006697u, 0x0003003eu, 0x00006baeu, 0x00006699u, 0x0003003eu, 0x00006bafu, 0x0000669bu, 0x0003003eu, 0x00006bb0u, 0x0000669du, 0x0003003eu, 0x00006bb1u, 0x0000669fu, 0x0003003eu, 0x00006bb2u, 0x000066a1u, 0x0003003eu, 0x00006bb3u, 0x000066a3u, 0x0003003eu, 0x00006c1cu, 0x00006697u, 0x0003003eu, 0x00006c1du, 0x00006699u, 0x0003003eu, 0x00006c1eu, 0x0000669bu, 0x0003003eu, 0x00006c1fu, 0x0000669du, 0x0003003eu, 0x00006c20u, 0x0000669fu, 0x000500c7u, 0x00000006u, 0x000065d9u, 0x0000669bu, 0x00000314u, 0x000500abu, 0x00000069u, 0x000065dau, 0x000065d9u, 0x0000032du, 0x0003003eu, 0x00006588u, 0x000065dau, 0x000500c7u, 0x00000006u, 0x000065ddu, 0x0000669bu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x000065deu, 0x000065ddu, 0x0000032du, 0x0003003eu, 0x00006589u, 0x000065deu, 0x000500c7u, 0x00000006u, 0x000065e1u, 0x0000669bu, 0x00000386u, 0x000500abu, 0x00000069u, 0x000065e2u, 0x000065e1u, 0x0000032du, 0x0003003eu, 0x0000658au, 0x000065e2u, 0x000500c7u, 0x00000006u, 0x000065e5u, 0x0000669bu, 0x00000330u, 0x000500abu, 0x00000069u, 0x000065e6u, 0x000065e5u, 0x0000032du, 0x0003003eu, 0x0000658bu, 0x000065e6u, 0x000500c7u, 0x00000006u, 0x000065e9u, 0x0000669bu, 0x00000a44u, 0x000500abu, 0x00000069u, 0x000065eau, 0x000065e9u, 0x0000032du, 0x0003003eu, 0x0000658cu, 0x000065eau, 0x000500c7u, 0x00000006u, 0x000065edu, 0x0000669bu, 0x00000a4au, 0x000500abu, 0x00000069u, 0x000065eeu, 0x000065edu, 0x0000032du, 0x0003003eu, 0x0000658du, 0x000065eeu, 0x000500c7u, 0x00000006u, 0x000065f1u, 0x0000669bu, 0x00000a50u, 0x000500abu, 0x00000069u, 0x000065f2u, 0x000065f1u, 0x0000032du, 0x0003003eu, 0x0000658eu, 0x000065f2u, 0x000500c7u, 0x00000006u, 0x000065f5u, 0x0000669bu, 0x00000a56u, 0x000500abu, 0x00000069u, 0x000065f6u, 0x000065f5u, 0x0000032du, 0x0003003eu, 0x0000658fu, 0x000065f6u, 0x0003003eu, 0x00006591u, 0x000065e6u, 0x000300f7u, 0x000066abu, 0x00000000u, 0x000400fau, 0x000065e6u, 0x000066acu, 0x000066adu, 0x000200f8u, 0x000066adu, 0x0003003eu, 0x000066a7u, 0x00000938u, 0x000200f9u, 0x000066abu, 0x000200f8u, 0x000066acu, 0x00050041u, 0x000006e9u, 0x000066aeu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000066afu, 0x000066aeu, 0x000500c7u, 0x0000000fu, 0x000066b0u, 0x000066afu, 0x00000938u, 0x0003003eu, 0x000066a7u, 0x000066b0u, 0x000200f9u, 0x000066abu, 0x000200f8u, 0x000066abu, 0x000700f5u, 0x0000000fu, 0x0000c7d9u, 0x000066b0u, 0x000066acu, 0x00000938u, 0x000066adu, 0x0003003eu, 0x000066a6u, 0x0000c7d9u, 0x000300f7u, 0x000066b2u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x000066b2u, 0x00000000u, 0x000066b3u, 0x00000001u, 0x000066b4u, 0x00000002u, 0x000066b5u, 0x00000003u, 0x000066b6u, 0x00000004u, 0x000066b7u, 0x000200f8u, 0x000066b7u, 0x0004003du, 0x00000010u, 0x000066c0u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066c1u, 0x000066c0u, 0x000066c0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000066a8u, 0x000066c1u, 0x000200f9u, 0x000066b2u, 0x000200f8u, 0x000066b6u, 0x0004003du, 0x00000010u, 0x000066beu, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066bfu, 0x000066beu, 0x000066beu, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x000066a8u, 0x000066bfu, 0x000200f9u, 0x000066b2u, 0x000200f8u, 0x000066b5u, 0x0004003du, 0x00000010u, 0x000066bau, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066bbu, 0x000066bau, 0x000066bau, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000047u, 0x000066bdu, 0x000066bbu, 0x0000f3b2u, 0x0003003eu, 0x000066a8u, 0x000066bdu, 0x000200f9u, 0x000066b2u, 0x000200f8u, 0x000066b4u, 0x0004003du, 0x00000010u, 0x000066b8u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x000066b9u, 0x000066b8u, 0x000066b8u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x000066a8u, 0x000066b9u, 0x0003003eu, 0x000066a6u, 0x00000938u, 0x000200f9u, 0x000066b2u, 0x000200f8u, 0x000066b3u, 0x0003003eu, 0x000066a8u, 0x00000943u, 0x0003003eu, 0x000066a6u, 0x00000938u, 0x000200f9u, 0x000066b2u, 0x000200f8u, 0x000066b2u, 0x000f00f5u, 0x0000000fu, 0x0000c92au, 0x0000c7d9u, 0x000066abu, 0x00000938u, 0x000066b3u, 0x00000938u, 0x000066b4u, 0x0000c7d9u, 0x000066b5u, 0x0000c7d9u, 0x000066b6u, 0x0000c7d9u, 0x000066b7u, 0x000f00f5u, 0x00000047u, 0x0000c7dau, 0x0000c7deu, 0x000066abu, 0x00000943u, 0x000066b3u, 0x000066b9u, 0x000066b4u, 0x000066bdu, 0x000066b5u, 0x000066bfu, 0x000066b6u, 0x000066c1u, 0x000066b7u, 0x00050051u, 0x0000000fu, 0x000066c4u, 0x0000c7dau, 0x00000000u, 0x00050051u, 0x0000000fu, 0x000066c5u, 0x0000c7dau, 0x00000001u, 0x00050051u, 0x0000000fu, 0x000066c6u, 0x0000c7dau, 0x00000002u, 0x00070050u, 0x00000010u, 0x000066c7u, 0x000066c4u, 0x000066c5u, 0x000066c6u, 0x0000c92au, 0x0003003eu, 0x000066a9u, 0x000066c7u, 0x0003003eu, 0x00006590u, 0x000066c7u, 0x00050041u, 0x0000007bu, 0x000065f9u, 0x00006590u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000065fau, 0x000065f9u, 0x000500c2u, 0x0000000fu, 0x000065fbu, 0x000065fau, 0x0000038eu, 0x0003003eu, 0x00006592u, 0x000065fbu, 0x00040071u, 0x00000006u, 0x000065feu, 0x00006689u, 0x0004007cu, 0x00000008u, 0x000065ffu, 0x000065feu, 0x00040071u, 0x00000006u, 0x00006602u, 0x0000668bu, 0x0004007cu, 0x00000008u, 0x00006603u, 0x00006602u, 0x00040071u, 0x00000006u, 0x00006605u, 0x000065fbu, 0x0004007cu, 0x00000008u, 0x00006606u, 0x00006605u, 0x00040071u, 0x00000006u, 0x00006609u, 0x0000669fu, 0x0004007cu, 0x00000008u, 0x0000660au, 0x00006609u, 0x0003003eu, 0x00006597u, 0x000065c3u, 0x0003003eu, 0x00006598u, 0x000065ffu, 0x0003003eu, 0x00006599u, 0x00006603u, 0x0004003du, 0x00000011u, 0x0000660cu, 0x00000708u, 0x0003003eu, 0x0000659au, 0x0000660cu, 0x0004003du, 0x0000000fu, 0x0000660du, 0x000006eau, 0x0003003eu, 0x0000659bu, 0x0000660du, 0x0003003eu, 0x0000659cu, 0x00001fb1u, 0x0003003eu, 0x0000659du, 0x00006606u, 0x0003003eu, 0x0000659eu, 0x000065deu, 0x0003003eu, 0x0000659fu, 0x0000660au, 0x0003003eu, 0x000065a0u, 0x000065dau, 0x0003003eu, 0x000065a1u, 0x000065f2u, 0x00050080u, 0x00000008u, 0x0000671eu, 0x00001fb1u, 0x00006606u, 0x000500afu, 0x00000069u, 0x0000671fu, 0x0000671eu, 0x0000025du, 0x000300f7u, 0x000066ddu, 0x00000000u, 0x000400fau, 0x000065deu, 0x000066deu, 0x000066dfu, 0x000200f8u, 0x000066dfu, 0x00050041u, 0x0000007bu, 0x00006775u, 0x000065a4u, 0x0000032du, 0x0003003eu, 0x00006775u, 0x00000388u, 0x00050082u, 0x00000008u, 0x00006777u, 0x00000533u, 0x00006603u, 0x0007000cu, 0x00000008u, 0x00006778u, 0x00000001u, 0x00000027u, 0x00006777u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x00006779u, 0x00006778u, 0x0004007cu, 0x0000000fu, 0x0000677au, 0x00006779u, 0x00050041u, 0x0000007bu, 0x0000677bu, 0x000065a4u, 0x0000045cu, 0x0003003eu, 0x0000677bu, 0x0000677au, 0x0003003eu, 0x000066dau, 0x0000671fu, 0x000400a8u, 0x00000069u, 0x00006781u, 0x000065dau, 0x000300f7u, 0x00006782u, 0x00000000u, 0x000400fau, 0x00006781u, 0x00006783u, 0x00006782u, 0x000200f8u, 0x00006783u, 0x000400a8u, 0x00000069u, 0x00006785u, 0x0000671fu, 0x000500a7u, 0x00000069u, 0x00006787u, 0x00006785u, 0x000065f2u, 0x000200f9u, 0x00006782u, 0x000200f8u, 0x00006782u, 0x000700f5u, 0x00000069u, 0x00006788u, 0x000065dau, 0x000066dfu, 0x00006787u, 0x00006783u, 0x0003003eu, 0x000065a2u, 0x00006788u, 0x0003003eu, 0x000065a3u, 0x0000671fu, 0x0003003eu, 0x000066d3u, 0x00000559u, 0x000200f9u, 0x000066ddu, 0x000200f8u, 0x000066deu, 0x0003003eu, 0x000066c9u, 0x0000660cu, 0x00040071u, 0x00000006u, 0x00006792u, 0x0000660cu, 0x0004007cu, 0x00000008u, 0x00006793u, 0x00006792u, 0x0003003eu, 0x0000678bu, 0x00006793u, 0x000500c3u, 0x00000008u, 0x00006795u, 0x00006793u, 0x00000266u, 0x0003003eu, 0x0000678cu, 0x00006795u, 0x000500c7u, 0x00000008u, 0x00006797u, 0x00006793u, 0x000003dau, 0x0003003eu, 0x0000678du, 0x00006797u, 0x00050082u, 0x00000008u, 0x00006799u, 0x00000239u, 0x00006795u, 0x0007000cu, 0x00000008u, 0x0000679au, 0x00000001u, 0x0000002au, 0x00006799u, 0x00000220u, 0x0003003eu, 0x0000678eu, 0x0000679au, 0x000500c3u, 0x00000008u, 0x0000679cu, 0x000003e1u, 0x00006795u, 0x00050082u, 0x00000008u, 0x0000679du, 0x000003e1u, 0x0000679cu, 0x0003003eu, 0x0000678fu, 0x0000679du, 0x000500c4u, 0x00000008u, 0x000067a0u, 0x00006797u, 0x0000679au, 0x00050080u, 0x00000008u, 0x000067a2u, 0x000067a0u, 0x0000679du, 0x0003003eu, 0x00006790u, 0x000067a2u, 0x0003003eu, 0x000066c8u, 0x000067a2u, 0x00040071u, 0x00000006u, 0x000066e3u, 0x0000660du, 0x0004007cu, 0x00000008u, 0x000066e4u, 0x000066e3u, 0x0003003eu, 0x000066cbu, 0x000066e4u, 0x000500c4u, 0x00000008u, 0x000067a5u, 0x0000022au, 0x000066e4u, 0x0003003eu, 0x000067a3u, 0x000067a5u, 0x0003003eu, 0x000066cau, 0x000067a5u, 0x000500c7u, 0x00000008u, 0x000066eau, 0x00006795u, 0x00000533u, 0x0003003eu, 0x000066ccu, 0x000066eau, 0x0003003eu, 0x000066cdu, 0x00000536u, 0x00050082u, 0x00000008u, 0x000066efu, 0x00006603u, 0x000066e4u, 0x0008000cu, 0x00000008u, 0x000066f0u, 0x00000001u, 0x0000002du, 0x000066efu, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x000066f1u, 0x000066f0u, 0x0004007cu, 0x0000000fu, 0x000066f2u, 0x000066f1u, 0x00050041u, 0x0000007bu, 0x000066f3u, 0x000065a4u, 0x0000032du, 0x0003003eu, 0x000066f3u, 0x000066f2u, 0x00050082u, 0x00000008u, 0x000066f8u, 0x000066e4u, 0x00006603u, 0x0008000cu, 0x00000008u, 0x000066f9u, 0x00000001u, 0x0000002du, 0x000066f8u, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x000066fau, 0x000066f9u, 0x0004007cu, 0x0000000fu, 0x000066fbu, 0x000066fau, 0x00050041u, 0x0000007bu, 0x000066fcu, 0x000065a4u, 0x0000045cu, 0x0003003eu, 0x000066fcu, 0x000066fbu, 0x000500b1u, 0x00000069u, 0x000066feu, 0x000066eau, 0x00000230u, 0x000300f7u, 0x000066ffu, 0x00000000u, 0x000400fau, 0x000066feu, 0x00006700u, 0x000066ffu, 0x000200f8u, 0x00006700u, 0x000500abu, 0x00000069u, 0x00006702u, 0x000067a5u, 0x0000054eu, 0x000300f7u, 0x00006703u, 0x00000000u, 0x000400fau, 0x00006702u, 0x00006704u, 0x00006705u, 0x000200f8u, 0x00006705u, 0x0003003eu, 0x000066cdu, 0x00000559u, 0x0003003eu, 0x000066cau, 0x0000055au, 0x000200f9u, 0x00006703u, 0x000200f8u, 0x00006704u, 0x000500c4u, 0x00000008u, 0x00006707u, 0x000067a5u, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00006709u, 0x00000554u, 0x000066eau, 0x0007000cu, 0x00000008u, 0x0000670au, 0x00000001u, 0x0000002au, 0x00006707u, 0x00006709u, 0x0003003eu, 0x000066cau, 0x0000670au, 0x000200f9u, 0x00006703u, 0x000200f8u, 0x00006703u, 0x000700f5u, 0x00000008u, 0x0000c93fu, 0x0000670au, 0x00006704u, 0x0000055au, 0x00006705u, 0x000600a9u, 0x00000069u, 0x0000f3d6u, 0x00006702u, 0x00000536u, 0x00000559u, 0x000200f9u, 0x000066ffu, 0x000200f8u, 0x000066ffu, 0x000700f5u, 0x00000069u, 0x0000c942u, 0x00000536u, 0x000066deu, 0x0000f3d6u, 0x00006703u, 0x000700f5u, 0x00000008u, 0x0000c93eu, 0x000067a5u, 0x000066deu, 0x0000c93fu, 0x00006703u, 0x000500c5u, 0x00000008u, 0x0000670du, 0x000065ffu, 0x0000c93eu, 0x0003003eu, 0x000066cfu, 0x0000670du, 0x000500abu, 0x00000069u, 0x000067a8u, 0x0000670du, 0x00000220u, 0x000300f7u, 0x000067a9u, 0x00000000u, 0x000400fau, 0x000067a8u, 0x000067aau, 0x000067a9u, 0x000200f8u, 0x000067aau, 0x0006000cu, 0x00000008u, 0x000067acu, 0x00000001u, 0x0000004au, 0x0000670du, 0x000500c4u, 0x00000008u, 0x000067adu, 0x0000022au, 0x000067acu, 0x0003003eu, 0x000066cfu, 0x000067adu, 0x000200f9u, 0x000067a9u, 0x000200f8u, 0x000067a9u, 0x000700f5u, 0x00000008u, 0x0000c940u, 0x0000670du, 0x000066ffu, 0x000067adu, 0x000067aau, 0x0003003eu, 0x000067a6u, 0x0000c940u, 0x0003003eu, 0x000066ceu, 0x0000c940u, 0x0003003eu, 0x000066d0u, 0x0000c940u, 0x000500c4u, 0x00000008u, 0x00006711u, 0x0000c940u, 0x00000230u, 0x0003003eu, 0x000066ceu, 0x00006711u, 0x000400a8u, 0x00000069u, 0x00006713u, 0x0000c942u, 0x000300f7u, 0x00006714u, 0x00000000u, 0x000400fau, 0x00006713u, 0x00006715u, 0x00006714u, 0x000200f8u, 0x00006715u, 0x00050080u, 0x00000008u, 0x00006718u, 0x000065c3u, 0x00006711u, 0x000500afu, 0x00000069u, 0x0000671au, 0x00006718u, 0x000067a2u, 0x000200f9u, 0x00006714u, 0x000200f8u, 0x00006714u, 0x000700f5u, 0x00000069u, 0x0000671bu, 0x0000c942u, 0x000067a9u, 0x0000671au, 0x00006715u, 0x0003003eu, 0x000066d1u, 0x0000671bu, 0x0003003eu, 0x000066d2u, 0x0000671fu, 0x000400a8u, 0x00000069u, 0x00006721u, 0x000065dau, 0x000300f7u, 0x00006722u, 0x00000000u, 0x000400fau, 0x00006721u, 0x00006723u, 0x00006722u, 0x000200f8u, 0x00006723u, 0x000400a8u, 0x00000069u, 0x00006725u, 0x0000671fu, 0x000500a7u, 0x00000069u, 0x00006727u, 0x00006725u, 0x000065f2u, 0x000500a7u, 0x00000069u, 0x00006729u, 0x00006727u, 0x0000671bu, 0x000200f9u, 0x00006722u, 0x000200f8u, 0x00006722u, 0x000700f5u, 0x00000069u, 0x0000672au, 0x000065dau, 0x00006714u, 0x00006729u, 0x00006723u, 0x0003003eu, 0x000065a2u, 0x0000672au, 0x0003003eu, 0x000065a3u, 0x0000671fu, 0x0003003eu, 0x000066d3u, 0x00000536u, 0x000500aau, 0x00000069u, 0x0000672du, 0x000067a2u, 0x000003edu, 0x0003003eu, 0x000066d4u, 0x0000672du, 0x000500b1u, 0x00000069u, 0x00006730u, 0x000065c3u, 0x000067a2u, 0x0003003eu, 0x000066d5u, 0x00006730u, 0x00050082u, 0x00000008u, 0x00006733u, 0x000065c3u, 0x00006711u, 0x0003003eu, 0x000066d6u, 0x00006733u, 0x000500b3u, 0x00000069u, 0x00006737u, 0x00006733u, 0x000067a2u, 0x000500a6u, 0x00000069u, 0x00006738u, 0x0000c942u, 0x00006737u, 0x0003003eu, 0x000066d7u, 0x00006738u, 0x000300f7u, 0x0000673au, 0x00000000u, 0x000b00fbu, 0x0000660au, 0x0000673au, 0x00000000u, 0x0000673bu, 0x00000001u, 0x0000673cu, 0x00000002u, 0x0000673du, 0x00000003u, 0x0000673eu, 0x000200f8u, 0x0000673eu, 0x000500a7u, 0x00000069u, 0x00006771u, 0x0000671bu, 0x00006738u, 0x000400a8u, 0x00000069u, 0x00006773u, 0x0000672du, 0x000500a7u, 0x00000069u, 0x00006774u, 0x00006771u, 0x00006773u, 0x0003003eu, 0x000066d3u, 0x00006774u, 0x000200f9u, 0x0000673au, 0x000200f8u, 0x0000673du, 0x000500a6u, 0x00000069u, 0x0000676eu, 0x00006730u, 0x0000672du, 0x0003003eu, 0x000066d3u, 0x0000676eu, 0x000200f9u, 0x0000673au, 0x000200f8u, 0x0000673cu, 0x000400a8u, 0x00000069u, 0x00006749u, 0x00006730u, 0x000400a8u, 0x00000069u, 0x0000674bu, 0x0000671bu, 0x000500a6u, 0x00000069u, 0x0000674cu, 0x00006749u, 0x0000674bu, 0x000400a8u, 0x00000069u, 0x0000674eu, 0x0000671fu, 0x000500a6u, 0x00000069u, 0x0000674fu, 0x0000674cu, 0x0000674eu, 0x000300f7u, 0x00006750u, 0x00000000u, 0x000400fau, 0x0000674fu, 0x00006751u, 0x00006752u, 0x000200f8u, 0x00006752u, 0x000500c7u, 0x00000008u, 0x0000675du, 0x0000c940u, 0x0000055au, 0x0003003eu, 0x000066d8u, 0x0000675du, 0x0006000cu, 0x00000008u, 0x000067b1u, 0x00000001u, 0x0000004au, 0x0000675du, 0x0007000cu, 0x00000008u, 0x000067b2u, 0x00000001u, 0x0000002au, 0x000067b1u, 0x00000220u, 0x0003003eu, 0x000067afu, 0x000067b2u, 0x0003003eu, 0x000066d0u, 0x000067b2u, 0x000500c3u, 0x00000008u, 0x00006761u, 0x000067a2u, 0x000067b2u, 0x000500c3u, 0x00000008u, 0x00006764u, 0x000065c3u, 0x000067b2u, 0x00050082u, 0x00000008u, 0x00006765u, 0x00006761u, 0x00006764u, 0x000500c7u, 0x00000008u, 0x00006766u, 0x00006765u, 0x00000533u, 0x0003003eu, 0x000066d9u, 0x00006766u, 0x00050084u, 0x00000008u, 0x00006769u, 0x00006766u, 0x00001fb1u, 0x000500c3u, 0x00000008u, 0x0000676au, 0x00006769u, 0x00000230u, 0x0007000cu, 0x00000008u, 0x0000676bu, 0x00000001u, 0x00000027u, 0x0000676au, 0x0000025du, 0x0003003eu, 0x0000659cu, 0x0000676bu, 0x0003003eu, 0x000066d3u, 0x00000559u, 0x000200f9u, 0x00006750u, 0x000200f8u, 0x00006751u, 0x000400a8u, 0x00000069u, 0x00006754u, 0x0000672du, 0x000300f7u, 0x00006755u, 0x00000000u, 0x000400fau, 0x00006754u, 0x00006756u, 0x00006755u, 0x000200f8u, 0x00006756u, 0x000600a9u, 0x00000069u, 0x0000675au, 0x0000671fu, 0x00006730u, 0x00006738u, 0x000200f9u, 0x00006755u, 0x000200f8u, 0x00006755u, 0x000700f5u, 0x00000069u, 0x0000675bu, 0x0000672du, 0x00006751u, 0x0000675au, 0x00006756u, 0x0003003eu, 0x000066d3u, 0x0000675bu, 0x000200f9u, 0x00006750u, 0x000200f8u, 0x00006750u, 0x000700f5u, 0x00000008u, 0x0000c972u, 0x00001fb1u, 0x00006755u, 0x0000676bu, 0x00006752u, 0x000700f5u, 0x00000069u, 0x0000c96eu, 0x0000675bu, 0x00006755u, 0x00000559u, 0x00006752u, 0x000200f9u, 0x0000673au, 0x000200f8u, 0x0000673bu, 0x000400a8u, 0x00000069u, 0x00006740u, 0x0000672du, 0x000300f7u, 0x00006741u, 0x00000000u, 0x000400fau, 0x00006740u, 0x00006742u, 0x00006741u, 0x000200f8u, 0x00006742u, 0x000600a9u, 0x00000069u, 0x00006746u, 0x0000671fu, 0x00006730u, 0x00006738u, 0x000200f9u, 0x00006741u, 0x000200f8u, 0x00006741u, 0x000700f5u, 0x00000069u, 0x00006747u, 0x0000672du, 0x0000673bu, 0x00006746u, 0x00006742u, 0x0003003eu, 0x000066d3u, 0x00006747u, 0x000200f9u, 0x0000673au, 0x000200f8u, 0x0000673au, 0x000d00f5u, 0x00000008u, 0x0000c970u, 0x00001fb1u, 0x00006722u, 0x00001fb1u, 0x00006741u, 0x0000c972u, 0x00006750u, 0x00001fb1u, 0x0000673du, 0x00001fb1u, 0x0000673eu, 0x000d00f5u, 0x00000069u, 0x0000c96du, 0x00000536u, 0x00006722u, 0x00006747u, 0x00006741u, 0x0000c96eu, 0x00006750u, 0x0000676eu, 0x0000673du, 0x00006774u, 0x0000673eu, 0x000200f9u, 0x000066ddu, 0x000200f8u, 0x000066ddu, 0x000700f5u, 0x00000069u, 0x0000c975u, 0x0000672au, 0x0000673au, 0x00006788u, 0x00006782u, 0x000700f5u, 0x00000008u, 0x0000c96fu, 0x0000c970u, 0x0000673au, 0x00001fb1u, 0x00006782u, 0x000700f5u, 0x00000069u, 0x0000c96cu, 0x0000c96du, 0x0000673au, 0x00000559u, 0x00006782u, 0x0003003eu, 0x000066dbu, 0x0000c96cu, 0x0003003eu, 0x00006580u, 0x0000c96fu, 0x0003003eu, 0x00006594u, 0x0000c975u, 0x0003003eu, 0x00006595u, 0x0000671fu, 0x0004003du, 0x0000006bu, 0x00006616u, 0x000065a4u, 0x0003003eu, 0x00006596u, 0x00006616u, 0x0003003eu, 0x00006593u, 0x0000c96cu, 0x000300f7u, 0x00006618u, 0x00000000u, 0x000400fau, 0x0000c96cu, 0x00006619u, 0x00006618u, 0x000200f8u, 0x00006619u, 0x000400a8u, 0x00000069u, 0x0000661bu, 0x000065f2u, 0x000500abu, 0x00000069u, 0x0000661du, 0x0000c96fu, 0x00000220u, 0x000500a6u, 0x00000069u, 0x0000661eu, 0x0000661bu, 0x0000661du, 0x000200f9u, 0x00006618u, 0x000200f8u, 0x00006618u, 0x000700f5u, 0x00000069u, 0x0000661fu, 0x0000c96cu, 0x000066ddu, 0x0000661eu, 0x00006619u, 0x000300f7u, 0x00006620u, 0x00000000u, 0x000400fau, 0x0000661fu, 0x00006621u, 0x00006620u, 0x000200f8u, 0x00006621u, 0x0004003du, 0x00000010u, 0x00006623u, 0x00006590u, 0x00080050u, 0x00000066u, 0x00006629u, 0x0000c2b4u, 0x00006623u, 0x00006683u, 0x00006685u, 0x0000bf24u, 0x0003003eu, 0x00006c26u, 0x0000c2b4u, 0x0003003eu, 0x00006c27u, 0x00006623u, 0x0003003eu, 0x00006c28u, 0x00006683u, 0x0003003eu, 0x00006c29u, 0x00006685u, 0x0003003eu, 0x00006c2au, 0x0000bf24u, 0x0003003eu, 0x000065a6u, 0x00006697u, 0x000300f7u, 0x0000662du, 0x00000000u, 0x000400fau, 0x000065eeu, 0x0000662eu, 0x0000662du, 0x000200f8u, 0x0000662eu, 0x0003003eu, 0x00006c3cu, 0x0000c2b4u, 0x0003003eu, 0x00006c3du, 0x00006623u, 0x0003003eu, 0x00006c3eu, 0x00006683u, 0x0003003eu, 0x00006c3fu, 0x00006685u, 0x0003003eu, 0x00006c40u, 0x0000bf24u, 0x0003003eu, 0x000065a8u, 0x00006697u, 0x0003003eu, 0x000065a9u, 0x000065dau, 0x0003003eu, 0x000065aau, 0x0000c975u, 0x0003003eu, 0x000065abu, 0x000065eau, 0x0003003eu, 0x000065acu, 0x0000671fu, 0x0003003eu, 0x000065adu, 0x00006616u, 0x0003003eu, 0x000065aeu, 0x00000536u, 0x0003003eu, 0x000067b3u, 0x00000536u, 0x00050041u, 0x0000007bu, 0x000067beu, 0x000065a8u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000067bfu, 0x000067beu, 0x00040071u, 0x00000006u, 0x000067c0u, 0x000067bfu, 0x0004007cu, 0x00000008u, 0x000067c1u, 0x000067c0u, 0x000300f7u, 0x000067c2u, 0x00000000u, 0x000b00fbu, 0x000067c1u, 0x000067c2u, 0x00000000u, 0x000067c3u, 0x00000001u, 0x000067c4u, 0x00000002u, 0x000067c5u, 0x00000003u, 0x000067c6u, 0x000200f8u, 0x000067c6u, 0x0004003du, 0x00000010u, 0x000067d1u, 0x00006c3eu, 0x0008004fu, 0x00000047u, 0x000067d2u, 0x000067d1u, 0x000067d1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b5u, 0x000067d2u, 0x000200f9u, 0x000067c2u, 0x000200f8u, 0x000067c5u, 0x0008004fu, 0x00000047u, 0x000067cfu, 0x00006685u, 0x00006685u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b5u, 0x000067cfu, 0x000200f9u, 0x000067c2u, 0x000200f8u, 0x000067c4u, 0x0004003du, 0x00000010u, 0x000067cbu, 0x00006c3du, 0x0008004fu, 0x00000047u, 0x000067ccu, 0x000067cbu, 0x000067cbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b5u, 0x000067ccu, 0x000200f9u, 0x000067c2u, 0x000200f8u, 0x000067c3u, 0x0004003du, 0x00000010u, 0x000067c8u, 0x00006c3cu, 0x0008004fu, 0x00000047u, 0x000067c9u, 0x000067c8u, 0x000067c8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b5u, 0x000067c9u, 0x000200f9u, 0x000067c2u, 0x000200f8u, 0x000067c2u, 0x000d00f5u, 0x00000047u, 0x0000ccdbu, 0x0000cce7u, 0x0000662eu, 0x000067c9u, 0x000067c3u, 0x000067ccu, 0x000067c4u, 0x000067cfu, 0x000067c5u, 0x000067d2u, 0x000067c6u, 0x00050041u, 0x0000007bu, 0x000067ddu, 0x000065a8u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000067deu, 0x000067ddu, 0x00040071u, 0x00000006u, 0x000067dfu, 0x000067deu, 0x0004007cu, 0x00000008u, 0x000067e0u, 0x000067dfu, 0x000300f7u, 0x000067e1u, 0x00000000u, 0x000b00fbu, 0x000067e0u, 0x000067e1u, 0x00000000u, 0x000067e2u, 0x00000001u, 0x000067e3u, 0x00000002u, 0x000067e4u, 0x00000003u, 0x000067e5u, 0x000200f8u, 0x000067e5u, 0x0004003du, 0x00000010u, 0x000067f0u, 0x00006c3eu, 0x0008004fu, 0x00000047u, 0x000067f1u, 0x000067f0u, 0x000067f0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b6u, 0x000067f1u, 0x000200f9u, 0x000067e1u, 0x000200f8u, 0x000067e4u, 0x0008004fu, 0x00000047u, 0x000067eeu, 0x00006685u, 0x00006685u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b6u, 0x000067eeu, 0x000200f9u, 0x000067e1u, 0x000200f8u, 0x000067e3u, 0x0004003du, 0x00000010u, 0x000067eau, 0x00006c3du, 0x0008004fu, 0x00000047u, 0x000067ebu, 0x000067eau, 0x000067eau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b6u, 0x000067ebu, 0x000200f9u, 0x000067e1u, 0x000200f8u, 0x000067e2u, 0x0004003du, 0x00000010u, 0x000067e7u, 0x00006c3cu, 0x0008004fu, 0x00000047u, 0x000067e8u, 0x000067e7u, 0x000067e7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000067b6u, 0x000067e8u, 0x000200f9u, 0x000067e1u, 0x000200f8u, 0x000067e1u, 0x00050041u, 0x0000007bu, 0x00006811u, 0x000065a8u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006812u, 0x00006811u, 0x00040071u, 0x00000006u, 0x00006813u, 0x00006812u, 0x0004007cu, 0x00000008u, 0x00006814u, 0x00006813u, 0x000300f7u, 0x00006815u, 0x00000000u, 0x000b00fbu, 0x00006814u, 0x00006815u, 0x00000000u, 0x00006816u, 0x00000001u, 0x00006817u, 0x00000002u, 0x00006818u, 0x00000003u, 0x00006819u, 0x000200f8u, 0x00006819u, 0x0003003eu, 0x000067b7u, 0x00000388u, 0x000200f9u, 0x00006815u, 0x000200f8u, 0x00006818u, 0x0003003eu, 0x000067b7u, 0x0000bf24u, 0x000200f9u, 0x00006815u, 0x000200f8u, 0x00006817u, 0x00050041u, 0x0000007bu, 0x00006c48u, 0x00006c3eu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000681du, 0x00006c48u, 0x0003003eu, 0x000067b7u, 0x0000681du, 0x000200f9u, 0x00006815u, 0x000200f8u, 0x00006816u, 0x00050041u, 0x0000007bu, 0x00006c47u, 0x00006c3cu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000681bu, 0x00006c47u, 0x0003003eu, 0x000067b7u, 0x0000681bu, 0x000200f9u, 0x00006815u, 0x000200f8u, 0x00006815u, 0x000d00f5u, 0x0000000fu, 0x0000ca0cu, 0x0000ca1cu, 0x000067e1u, 0x0000681bu, 0x00006816u, 0x0000681du, 0x00006817u, 0x0000bf24u, 0x00006818u, 0x00000388u, 0x00006819u, 0x00050041u, 0x0000007bu, 0x00006820u, 0x000065a8u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006821u, 0x00006820u, 0x00040071u, 0x00000006u, 0x00006822u, 0x00006821u, 0x0004007cu, 0x00000008u, 0x00006823u, 0x00006822u, 0x000300f7u, 0x00006824u, 0x00000000u, 0x000b00fbu, 0x00006823u, 0x00006824u, 0x00000000u, 0x00006825u, 0x00000001u, 0x00006826u, 0x00000002u, 0x00006827u, 0x00000003u, 0x00006828u, 0x000200f8u, 0x00006828u, 0x0003003eu, 0x000067b8u, 0x00000388u, 0x000200f9u, 0x00006824u, 0x000200f8u, 0x00006827u, 0x0003003eu, 0x000067b8u, 0x0000046fu, 0x000200f9u, 0x00006824u, 0x000200f8u, 0x00006826u, 0x00050041u, 0x0000007bu, 0x00006c49u, 0x00006c3du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000682du, 0x00006c49u, 0x0003003eu, 0x000067b8u, 0x0000682du, 0x000200f9u, 0x00006824u, 0x000200f8u, 0x00006825u, 0x000400c8u, 0x0000000fu, 0x0000682au, 0x0000ca0cu, 0x000500c7u, 0x0000000fu, 0x0000682bu, 0x0000682au, 0x0000046fu, 0x0003003eu, 0x000067b8u, 0x0000682bu, 0x000200f9u, 0x00006824u, 0x000200f8u, 0x00006824u, 0x000d00f5u, 0x0000000fu, 0x0000cb70u, 0x0000cb81u, 0x00006815u, 0x0000682bu, 0x00006825u, 0x0000682du, 0x00006826u, 0x0000046fu, 0x00006827u, 0x00000388u, 0x00006828u, 0x000500c2u, 0x0000000fu, 0x0000682fu, 0x0000ca0cu, 0x0000038fu, 0x0003003eu, 0x000067b7u, 0x0000682fu, 0x000500c2u, 0x0000000fu, 0x00006831u, 0x0000cb70u, 0x0000038fu, 0x0003003eu, 0x000067b8u, 0x00006831u, 0x0004003du, 0x0000000fu, 0x00006833u, 0x00006820u, 0x00040071u, 0x00000006u, 0x00006834u, 0x00006833u, 0x0004007cu, 0x00000008u, 0x00006835u, 0x00006834u, 0x000500aau, 0x00000069u, 0x00006836u, 0x00006835u, 0x0000022au, 0x000300f7u, 0x00006837u, 0x00000000u, 0x000400fau, 0x00006836u, 0x00006838u, 0x00006837u, 0x000200f8u, 0x00006838u, 0x00050041u, 0x0000007bu, 0x0000683au, 0x000065adu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000683bu, 0x0000683au, 0x000500c2u, 0x0000000fu, 0x0000683cu, 0x0000682fu, 0x0000683bu, 0x000500c7u, 0x0000000fu, 0x0000683du, 0x0000683cu, 0x000004afu, 0x0003003eu, 0x000067b7u, 0x0000683du, 0x00050041u, 0x0000007bu, 0x0000683fu, 0x000065adu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006840u, 0x0000683fu, 0x000500c2u, 0x0000000fu, 0x00006841u, 0x00006831u, 0x00006840u, 0x000500c5u, 0x0000000fu, 0x00006842u, 0x00006841u, 0x0000038fu, 0x0003003eu, 0x000067b8u, 0x00006842u, 0x000200f9u, 0x00006837u, 0x000200f8u, 0x00006837u, 0x000700f5u, 0x0000000fu, 0x0000ce3au, 0x00006831u, 0x00006824u, 0x00006842u, 0x00006838u, 0x000700f5u, 0x0000000fu, 0x0000ccd4u, 0x0000682fu, 0x00006824u, 0x0000683du, 0x00006838u, 0x0004003du, 0x00000047u, 0x00006843u, 0x000067b6u, 0x00040071u, 0x000004bau, 0x00006844u, 0x00006843u, 0x0004007cu, 0x000004b6u, 0x00006845u, 0x00006844u, 0x00040071u, 0x00000011u, 0x00006847u, 0x0000ccd4u, 0x0004007cu, 0x00000012u, 0x00006848u, 0x00006847u, 0x00060050u, 0x000004b6u, 0x00006849u, 0x00006848u, 0x00006848u, 0x00006848u, 0x00050084u, 0x000004b6u, 0x0000684au, 0x00006845u, 0x00006849u, 0x00040071u, 0x000004bau, 0x0000684cu, 0x0000ccdbu, 0x0004007cu, 0x000004b6u, 0x0000684du, 0x0000684cu, 0x00040071u, 0x00000011u, 0x0000684fu, 0x0000ce3au, 0x0004007cu, 0x00000012u, 0x00006850u, 0x0000684fu, 0x00050080u, 0x00000012u, 0x00006851u, 0x00006850u, 0x000004c8u, 0x00060050u, 0x000004b6u, 0x00006852u, 0x00006851u, 0x00006851u, 0x00006851u, 0x00050084u, 0x000004b6u, 0x00006853u, 0x0000684du, 0x00006852u, 0x00050080u, 0x000004b6u, 0x00006854u, 0x0000684au, 0x00006853u, 0x0003003eu, 0x000067b9u, 0x00006854u, 0x0004003du, 0x000004b6u, 0x0000685cu, 0x000067b9u, 0x000500c3u, 0x000004b6u, 0x0000685eu, 0x0000685cu, 0x0000f3b7u, 0x00040072u, 0x0000037cu, 0x0000685fu, 0x0000685eu, 0x0004007cu, 0x00000047u, 0x00006860u, 0x0000685fu, 0x0003003eu, 0x000067b6u, 0x00006860u, 0x0004003du, 0x00000047u, 0x00006892u, 0x000067b6u, 0x000500c7u, 0x00000047u, 0x00006894u, 0x00006892u, 0x0000f3b8u, 0x0003003eu, 0x000067b3u, 0x00000559u, 0x0003003eu, 0x000067b4u, 0x00006894u, 0x0003003eu, 0x000067bbu, 0x00006894u, 0x0009004fu, 0x00000010u, 0x00006639u, 0x0000c2b4u, 0x00006894u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00006c26u, 0x00006639u, 0x0003003eu, 0x000065a6u, 0x00006699u, 0x000200f9u, 0x0000662du, 0x000200f8u, 0x0000662du, 0x000700f5u, 0x00000047u, 0x0000ee66u, 0x0000cce7u, 0x00006621u, 0x0000ccdbu, 0x00006837u, 0x000700f5u, 0x0000000fu, 0x0000ee3eu, 0x0000cb81u, 0x00006621u, 0x0000ce3au, 0x00006837u, 0x000700f5u, 0x0000000fu, 0x0000ee16u, 0x0000ca1cu, 0x00006621u, 0x0000ccd4u, 0x00006837u, 0x000700f5u, 0x00000010u, 0x0000cea7u, 0x0000c2b4u, 0x00006621u, 0x00006639u, 0x00006837u, 0x00070050u, 0x000005fbu, 0x0000f3d7u, 0x000065eeu, 0x000065eeu, 0x000065eeu, 0x000065eeu, 0x000600a9u, 0x00000010u, 0x0000f3d8u, 0x0000f3d7u, 0x00006699u, 0x00006697u, 0x00080050u, 0x00000066u, 0x00006c3bu, 0x0000cea7u, 0x00006623u, 0x00006683u, 0x00006685u, 0x0000bf24u, 0x0003003eu, 0x00006c4au, 0x0000cea7u, 0x0003003eu, 0x00006c4bu, 0x00006623u, 0x0003003eu, 0x00006c4cu, 0x00006683u, 0x0003003eu, 0x00006c4du, 0x00006685u, 0x0003003eu, 0x00006c4eu, 0x0000bf24u, 0x0003003eu, 0x000065b1u, 0x0000f3d8u, 0x0003003eu, 0x000065b2u, 0x000065dau, 0x0003003eu, 0x000065b3u, 0x0000c975u, 0x0003003eu, 0x000065b4u, 0x000065eau, 0x0003003eu, 0x000065b5u, 0x0000671fu, 0x0003003eu, 0x000065b6u, 0x00006616u, 0x0003003eu, 0x000065b7u, 0x00000559u, 0x0003003eu, 0x00006896u, 0x00000536u, 0x000300f7u, 0x0000689fu, 0x00000000u, 0x000300fbu, 0x0000032du, 0x000068a0u, 0x000200f8u, 0x000068a0u, 0x00050041u, 0x0000007bu, 0x000068a1u, 0x000065b1u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000068a2u, 0x000068a1u, 0x00040071u, 0x00000006u, 0x000068a3u, 0x000068a2u, 0x0004007cu, 0x00000008u, 0x000068a4u, 0x000068a3u, 0x000300f7u, 0x000068a5u, 0x00000000u, 0x000b00fbu, 0x000068a4u, 0x000068a5u, 0x00000000u, 0x000068a6u, 0x00000001u, 0x000068a7u, 0x00000002u, 0x000068a8u, 0x00000003u, 0x000068a9u, 0x000200f8u, 0x000068a9u, 0x0004003du, 0x00000010u, 0x000068b4u, 0x00006c4cu, 0x0008004fu, 0x00000047u, 0x000068b5u, 0x000068b4u, 0x000068b4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006898u, 0x000068b5u, 0x000200f9u, 0x000068a5u, 0x000200f8u, 0x000068a8u, 0x0008004fu, 0x00000047u, 0x000068b2u, 0x00006685u, 0x00006685u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006898u, 0x000068b2u, 0x000200f9u, 0x000068a5u, 0x000200f8u, 0x000068a7u, 0x0004003du, 0x00000010u, 0x000068aeu, 0x00006c4bu, 0x0008004fu, 0x00000047u, 0x000068afu, 0x000068aeu, 0x000068aeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006898u, 0x000068afu, 0x000200f9u, 0x000068a5u, 0x000200f8u, 0x000068a6u, 0x0004003du, 0x00000010u, 0x000068abu, 0x00006c4au, 0x0008004fu, 0x00000047u, 0x000068acu, 0x000068abu, 0x000068abu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006898u, 0x000068acu, 0x000200f9u, 0x000068a5u, 0x000200f8u, 0x000068a5u, 0x000d00f5u, 0x00000047u, 0x0000d1e4u, 0x0000d1f1u, 0x000068a0u, 0x000068acu, 0x000068a6u, 0x000068afu, 0x000068a7u, 0x000068b2u, 0x000068a8u, 0x000068b5u, 0x000068a9u, 0x000400a8u, 0x00000069u, 0x000068bbu, 0x0000671fu, 0x000500a7u, 0x00000069u, 0x000068bcu, 0x000065eau, 0x000068bbu, 0x000300f7u, 0x000068bdu, 0x00000000u, 0x000400fau, 0x000068bcu, 0x000068beu, 0x000068bdu, 0x000200f8u, 0x000068beu, 0x0003003eu, 0x00006896u, 0x00000559u, 0x0003003eu, 0x00006897u, 0x0000d1e4u, 0x000200f9u, 0x0000689fu, 0x000200f8u, 0x000068bdu, 0x00050041u, 0x0000007bu, 0x000068c0u, 0x000065b1u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000068c1u, 0x000068c0u, 0x00040071u, 0x00000006u, 0x000068c2u, 0x000068c1u, 0x0004007cu, 0x00000008u, 0x000068c3u, 0x000068c2u, 0x000300f7u, 0x000068c4u, 0x00000000u, 0x000b00fbu, 0x000068c3u, 0x000068c4u, 0x00000000u, 0x000068c5u, 0x00000001u, 0x000068c6u, 0x00000002u, 0x000068c7u, 0x00000003u, 0x000068c8u, 0x000200f8u, 0x000068c8u, 0x0004003du, 0x00000010u, 0x000068d3u, 0x00006c4cu, 0x0008004fu, 0x00000047u, 0x000068d4u, 0x000068d3u, 0x000068d3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006899u, 0x000068d4u, 0x000200f9u, 0x000068c4u, 0x000200f8u, 0x000068c7u, 0x0008004fu, 0x00000047u, 0x000068d1u, 0x00006685u, 0x00006685u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006899u, 0x000068d1u, 0x000200f9u, 0x000068c4u, 0x000200f8u, 0x000068c6u, 0x0004003du, 0x00000010u, 0x000068cdu, 0x00006c4bu, 0x0008004fu, 0x00000047u, 0x000068ceu, 0x000068cdu, 0x000068cdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006899u, 0x000068ceu, 0x000200f9u, 0x000068c4u, 0x000200f8u, 0x000068c5u, 0x0004003du, 0x00000010u, 0x000068cau, 0x00006c4au, 0x0008004fu, 0x00000047u, 0x000068cbu, 0x000068cau, 0x000068cau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00006899u, 0x000068cbu, 0x000200f9u, 0x000068c4u, 0x000200f8u, 0x000068c4u, 0x000400a8u, 0x00000069u, 0x000068d9u, 0x0000c975u, 0x000400a8u, 0x00000069u, 0x000068dau, 0x000068d9u, 0x000300f7u, 0x000068dbu, 0x00000000u, 0x000400fau, 0x000068dau, 0x000068dcu, 0x000068dbu, 0x000200f8u, 0x000068dcu, 0x00050041u, 0x0000007bu, 0x000068ddu, 0x000065b1u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000068deu, 0x000068ddu, 0x00040071u, 0x00000006u, 0x000068dfu, 0x000068deu, 0x0004007cu, 0x00000008u, 0x000068e0u, 0x000068dfu, 0x000500aau, 0x00000069u, 0x000068e1u, 0x000068e0u, 0x00000220u, 0x000300f7u, 0x000068e2u, 0x00000000u, 0x000400fau, 0x000068e1u, 0x000068e3u, 0x000068e2u, 0x000200f8u, 0x000068e3u, 0x00050041u, 0x0000007bu, 0x000068e4u, 0x000065b1u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068e5u, 0x000068e4u, 0x00040071u, 0x00000006u, 0x000068e6u, 0x000068e5u, 0x0004007cu, 0x00000008u, 0x000068e7u, 0x000068e6u, 0x000500aau, 0x00000069u, 0x000068e8u, 0x000068e7u, 0x00000220u, 0x000200f9u, 0x000068e2u, 0x000200f8u, 0x000068e2u, 0x000700f5u, 0x00000069u, 0x000068e9u, 0x000068e1u, 0x000068dcu, 0x000068e8u, 0x000068e3u, 0x000300f7u, 0x000068eau, 0x00000000u, 0x000400fau, 0x000068e9u, 0x000068ebu, 0x000068eau, 0x000200f8u, 0x000068ebu, 0x00050041u, 0x0000007bu, 0x00006c54u, 0x00006c4au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068edu, 0x00006c54u, 0x000500aau, 0x00000069u, 0x000068eeu, 0x000068edu, 0x0000046fu, 0x000200f9u, 0x000068eau, 0x000200f8u, 0x000068eau, 0x000700f5u, 0x00000069u, 0x000068efu, 0x000068e9u, 0x000068e2u, 0x000068eeu, 0x000068ebu, 0x000200f9u, 0x000068dbu, 0x000200f8u, 0x000068dbu, 0x000700f5u, 0x00000069u, 0x000068f0u, 0x000068d9u, 0x000068c4u, 0x000068efu, 0x000068eau, 0x000300f7u, 0x000068f1u, 0x00000000u, 0x000400fau, 0x000068f0u, 0x000068f2u, 0x000068f1u, 0x000200f8u, 0x000068f2u, 0x0004003du, 0x00000047u, 0x000068f3u, 0x00006899u, 0x0003003eu, 0x00006896u, 0x00000559u, 0x0003003eu, 0x00006897u, 0x000068f3u, 0x000200f9u, 0x0000689fu, 0x000200f8u, 0x000068f1u, 0x00050041u, 0x0000007bu, 0x000068f4u, 0x000065b1u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000068f5u, 0x000068f4u, 0x00040071u, 0x00000006u, 0x000068f6u, 0x000068f5u, 0x0004007cu, 0x00000008u, 0x000068f7u, 0x000068f6u, 0x000300f7u, 0x000068f8u, 0x00000000u, 0x000b00fbu, 0x000068f7u, 0x000068f8u, 0x00000000u, 0x000068f9u, 0x00000001u, 0x000068fau, 0x00000002u, 0x000068fbu, 0x00000003u, 0x000068fcu, 0x000200f8u, 0x000068fcu, 0x0003003eu, 0x0000689au, 0x00000388u, 0x000200f9u, 0x000068f8u, 0x000200f8u, 0x000068fbu, 0x0003003eu, 0x0000689au, 0x0000bf24u, 0x000200f9u, 0x000068f8u, 0x000200f8u, 0x000068fau, 0x00050041u, 0x0000007bu, 0x00006c56u, 0x00006c4cu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006900u, 0x00006c56u, 0x0003003eu, 0x0000689au, 0x00006900u, 0x000200f9u, 0x000068f8u, 0x000200f8u, 0x000068f9u, 0x00050041u, 0x0000007bu, 0x00006c55u, 0x00006c4au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000068feu, 0x00006c55u, 0x0003003eu, 0x0000689au, 0x000068feu, 0x000200f9u, 0x000068f8u, 0x000200f8u, 0x000068f8u, 0x000d00f5u, 0x0000000fu, 0x0000cefbu, 0x0000cf0cu, 0x000068f1u, 0x000068feu, 0x000068f9u, 0x00006900u, 0x000068fau, 0x0000bf24u, 0x000068fbu, 0x00000388u, 0x000068fcu, 0x00050041u, 0x0000007bu, 0x00006903u, 0x000065b1u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006904u, 0x00006903u, 0x00040071u, 0x00000006u, 0x00006905u, 0x00006904u, 0x0004007cu, 0x00000008u, 0x00006906u, 0x00006905u, 0x000300f7u, 0x00006907u, 0x00000000u, 0x000b00fbu, 0x00006906u, 0x00006907u, 0x00000000u, 0x00006908u, 0x00000001u, 0x00006909u, 0x00000002u, 0x0000690au, 0x00000003u, 0x0000690bu, 0x000200f8u, 0x0000690bu, 0x0003003eu, 0x0000689bu, 0x00000388u, 0x000200f9u, 0x00006907u, 0x000200f8u, 0x0000690au, 0x0003003eu, 0x0000689bu, 0x0000046fu, 0x000200f9u, 0x00006907u, 0x000200f8u, 0x00006909u, 0x00050041u, 0x0000007bu, 0x00006c57u, 0x00006c4bu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006910u, 0x00006c57u, 0x0003003eu, 0x0000689bu, 0x00006910u, 0x000200f9u, 0x00006907u, 0x000200f8u, 0x00006908u, 0x000400c8u, 0x0000000fu, 0x0000690du, 0x0000cefbu, 0x000500c7u, 0x0000000fu, 0x0000690eu, 0x0000690du, 0x0000046fu, 0x0003003eu, 0x0000689bu, 0x0000690eu, 0x000200f9u, 0x00006907u, 0x000200f8u, 0x00006907u, 0x000d00f5u, 0x0000000fu, 0x0000d06cu, 0x0000d07eu, 0x000068f8u, 0x0000690eu, 0x00006908u, 0x00006910u, 0x00006909u, 0x0000046fu, 0x0000690au, 0x00000388u, 0x0000690bu, 0x000500c2u, 0x0000000fu, 0x00006912u, 0x0000cefbu, 0x0000038fu, 0x0003003eu, 0x0000689au, 0x00006912u, 0x000500c2u, 0x0000000fu, 0x00006914u, 0x0000d06cu, 0x0000038fu, 0x0003003eu, 0x0000689bu, 0x00006914u, 0x0004003du, 0x0000000fu, 0x00006916u, 0x00006903u, 0x00040071u, 0x00000006u, 0x00006917u, 0x00006916u, 0x0004007cu, 0x00000008u, 0x00006918u, 0x00006917u, 0x000500aau, 0x00000069u, 0x00006919u, 0x00006918u, 0x0000022au, 0x000300f7u, 0x0000691au, 0x00000000u, 0x000400fau, 0x00006919u, 0x0000691bu, 0x0000691au, 0x000200f8u, 0x0000691bu, 0x00050041u, 0x0000007bu, 0x0000691du, 0x000065b6u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000691eu, 0x0000691du, 0x000500c2u, 0x0000000fu, 0x0000691fu, 0x00006912u, 0x0000691eu, 0x000500c7u, 0x0000000fu, 0x00006920u, 0x0000691fu, 0x000004afu, 0x0003003eu, 0x0000689au, 0x00006920u, 0x00050041u, 0x0000007bu, 0x00006922u, 0x000065b6u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006923u, 0x00006922u, 0x000500c2u, 0x0000000fu, 0x00006924u, 0x00006914u, 0x00006923u, 0x000500c5u, 0x0000000fu, 0x00006925u, 0x00006924u, 0x0000038fu, 0x0003003eu, 0x0000689bu, 0x00006925u, 0x000200f9u, 0x0000691au, 0x000200f8u, 0x0000691au, 0x000700f5u, 0x0000000fu, 0x0000d350u, 0x00006914u, 0x00006907u, 0x00006925u, 0x0000691bu, 0x000700f5u, 0x0000000fu, 0x0000d1ddu, 0x00006912u, 0x00006907u, 0x00006920u, 0x0000691bu, 0x0004003du, 0x00000047u, 0x00006926u, 0x00006899u, 0x00040071u, 0x000004bau, 0x00006927u, 0x00006926u, 0x0004007cu, 0x000004b6u, 0x00006928u, 0x00006927u, 0x00040071u, 0x00000011u, 0x0000692au, 0x0000d1ddu, 0x0004007cu, 0x00000012u, 0x0000692bu, 0x0000692au, 0x00060050u, 0x000004b6u, 0x0000692cu, 0x0000692bu, 0x0000692bu, 0x0000692bu, 0x00050084u, 0x000004b6u, 0x0000692du, 0x00006928u, 0x0000692cu, 0x00040071u, 0x000004bau, 0x0000692fu, 0x0000d1e4u, 0x0004007cu, 0x000004b6u, 0x00006930u, 0x0000692fu, 0x00040071u, 0x00000011u, 0x00006932u, 0x0000d350u, 0x0004007cu, 0x00000012u, 0x00006933u, 0x00006932u, 0x00050080u, 0x00000012u, 0x00006934u, 0x00006933u, 0x000004c8u, 0x00060050u, 0x000004b6u, 0x00006935u, 0x00006934u, 0x00006934u, 0x00006934u, 0x00050084u, 0x000004b6u, 0x00006936u, 0x00006930u, 0x00006935u, 0x00050080u, 0x000004b6u, 0x00006937u, 0x0000692du, 0x00006936u, 0x0003003eu, 0x0000689cu, 0x00006937u, 0x000500a6u, 0x00000069u, 0x0000693bu, 0x00000536u, 0x000065dau, 0x000300f7u, 0x0000693cu, 0x00000000u, 0x000400fau, 0x0000693bu, 0x0000693du, 0x0000693eu, 0x000200f8u, 0x0000693eu, 0x00040071u, 0x00000006u, 0x00006945u, 0x0000d1ddu, 0x0004007cu, 0x00000008u, 0x00006946u, 0x00006945u, 0x000500c3u, 0x00000008u, 0x00006947u, 0x00006946u, 0x0000022du, 0x00040071u, 0x00000006u, 0x00006949u, 0x0000d350u, 0x0004007cu, 0x00000008u, 0x0000694au, 0x00006949u, 0x000500c3u, 0x00000008u, 0x0000694bu, 0x0000694au, 0x0000022du, 0x00050080u, 0x00000008u, 0x0000694cu, 0x00006947u, 0x0000694bu, 0x00050080u, 0x00000008u, 0x0000694du, 0x0000694cu, 0x0000022au, 0x0003003eu, 0x0000689du, 0x0000694du, 0x0004003du, 0x000004b6u, 0x0000694eu, 0x0000689cu, 0x000500c3u, 0x000004b6u, 0x00006950u, 0x0000694eu, 0x0000f3b9u, 0x0003003eu, 0x0000689cu, 0x00006950u, 0x0004003du, 0x000004b6u, 0x00006951u, 0x0000689cu, 0x000500c7u, 0x000004b6u, 0x00006953u, 0x00006951u, 0x0000f3bau, 0x0003003eu, 0x0000689cu, 0x00006953u, 0x0004003du, 0x000004edu, 0x00006954u, 0x000004efu, 0x000500c4u, 0x00000008u, 0x00006956u, 0x0000694du, 0x00000266u, 0x00050041u, 0x000001c4u, 0x00006957u, 0x0000689cu, 0x0000032du, 0x0004003du, 0x00000012u, 0x00006958u, 0x00006957u, 0x00040072u, 0x00000008u, 0x00006959u, 0x00006958u, 0x000500c5u, 0x00000008u, 0x0000695au, 0x00006956u, 0x00006959u, 0x0005005fu, 0x000004f7u, 0x0000695bu, 0x00006954u, 0x0000695au, 0x00050051u, 0x00000006u, 0x0000695cu, 0x0000695bu, 0x00000000u, 0x00040071u, 0x0000000fu, 0x0000695du, 0x0000695cu, 0x00050041u, 0x0000007bu, 0x0000695eu, 0x00006899u, 0x0000032du, 0x0003003eu, 0x0000695eu, 0x0000695du, 0x00050041u, 0x000001c4u, 0x00006962u, 0x0000689cu, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00006963u, 0x00006962u, 0x00040072u, 0x00000008u, 0x00006964u, 0x00006963u, 0x000500c5u, 0x00000008u, 0x00006965u, 0x00006956u, 0x00006964u, 0x0005005fu, 0x000004f7u, 0x00006966u, 0x00006954u, 0x00006965u, 0x00050051u, 0x00000006u, 0x00006967u, 0x00006966u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00006968u, 0x00006967u, 0x00050041u, 0x0000007bu, 0x00006969u, 0x00006899u, 0x0000045cu, 0x0003003eu, 0x00006969u, 0x00006968u, 0x00050041u, 0x000001c4u, 0x0000696du, 0x0000689cu, 0x00000386u, 0x0004003du, 0x00000012u, 0x0000696eu, 0x0000696du, 0x00040072u, 0x00000008u, 0x0000696fu, 0x0000696eu, 0x000500c5u, 0x00000008u, 0x00006970u, 0x00006956u, 0x0000696fu, 0x0005005fu, 0x000004f7u, 0x00006971u, 0x00006954u, 0x00006970u, 0x00050051u, 0x00000006u, 0x00006972u, 0x00006971u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00006973u, 0x00006972u, 0x00050041u, 0x0000007bu, 0x00006974u, 0x00006899u, 0x00000386u, 0x0003003eu, 0x00006974u, 0x00006973u, 0x000200f9u, 0x0000693cu, 0x000200f8u, 0x0000693du, 0x0004003du, 0x000004b6u, 0x0000693fu, 0x0000689cu, 0x000500c3u, 0x000004b6u, 0x00006941u, 0x0000693fu, 0x0000f3b7u, 0x00040072u, 0x0000037cu, 0x00006942u, 0x00006941u, 0x0004007cu, 0x00000047u, 0x00006943u, 0x00006942u, 0x0003003eu, 0x00006899u, 0x00006943u, 0x000200f9u, 0x0000693cu, 0x000200f8u, 0x0000693cu, 0x0004003du, 0x00000047u, 0x00006975u, 0x00006899u, 0x000500c7u, 0x00000047u, 0x00006977u, 0x00006975u, 0x0000f3b8u, 0x0003003eu, 0x00006896u, 0x00000559u, 0x0003003eu, 0x00006897u, 0x00006977u, 0x000200f9u, 0x0000689fu, 0x000200f8u, 0x0000689fu, 0x000900f5u, 0x0000000fu, 0x0000eea7u, 0x0000d07eu, 0x000068beu, 0x0000d07eu, 0x000068f2u, 0x0000d350u, 0x0000693cu, 0x000900f5u, 0x0000000fu, 0x0000ee8cu, 0x0000cf0cu, 0x000068beu, 0x0000cf0cu, 0x000068f2u, 0x0000d1ddu, 0x0000693cu, 0x000900f5u, 0x00000047u, 0x0000d362u, 0x0000d1e4u, 0x000068beu, 0x000068f3u, 0x000068f2u, 0x00006977u, 0x0000693cu, 0x0003003eu, 0x0000689eu, 0x0000d362u, 0x0003003eu, 0x000065afu, 0x0000d362u, 0x000300f7u, 0x00006645u, 0x00000000u, 0x000400fau, 0x000065f6u, 0x00006646u, 0x00006645u, 0x000200f8u, 0x00006646u, 0x00040071u, 0x0000030cu, 0x00006648u, 0x0000d362u, 0x0004007cu, 0x00000044u, 0x00006649u, 0x00006648u, 0x0003003eu, 0x000065b8u, 0x00006649u, 0x0003003eu, 0x000065b9u, 0x000065c6u, 0x00060050u, 0x00000044u, 0x0000697fu, 0x000065c6u, 0x000065c6u, 0x000065c6u, 0x000500c3u, 0x00000044u, 0x00006980u, 0x0000697fu, 0x00000353u, 0x000500c7u, 0x00000044u, 0x00006982u, 0x00006980u, 0x0000f3b3u, 0x0003003eu, 0x00006979u, 0x00006982u, 0x000500c7u, 0x00000044u, 0x00006985u, 0x00006649u, 0x0000f3b4u, 0x00050080u, 0x00000044u, 0x00006987u, 0x00006985u, 0x0000f3b5u, 0x000500adu, 0x00000363u, 0x00006989u, 0x00006649u, 0x00000362u, 0x000600a9u, 0x00000044u, 0x0000698au, 0x00006989u, 0x0000035fu, 0x00006987u, 0x0003003eu, 0x0000697au, 0x0000698au, 0x000500c7u, 0x00000044u, 0x0000698eu, 0x00006649u, 0x0000f3b3u, 0x00050082u, 0x00000044u, 0x0000698fu, 0x00006982u, 0x0000698eu, 0x000500c3u, 0x00000044u, 0x00006991u, 0x0000698fu, 0x0000f3b6u, 0x0003003eu, 0x0000697bu, 0x00006991u, 0x00050082u, 0x00000044u, 0x00006994u, 0x0000698au, 0x00006649u, 0x0003003eu, 0x0000697cu, 0x00006994u, 0x000500c7u, 0x00000044u, 0x00006998u, 0x00006994u, 0x00006991u, 0x00050080u, 0x00000044u, 0x00006999u, 0x00006649u, 0x00006998u, 0x0003003eu, 0x0000697au, 0x00006999u, 0x000500c7u, 0x00000044u, 0x0000699cu, 0x00006999u, 0x0000035fu, 0x00040072u, 0x0000037cu, 0x0000699du, 0x0000699cu, 0x0004007cu, 0x00000047u, 0x0000699eu, 0x0000699du, 0x0003003eu, 0x0000697du, 0x0000699eu, 0x0003003eu, 0x000065afu, 0x0000699eu, 0x000200f9u, 0x00006645u, 0x000200f8u, 0x00006645u, 0x000700f5u, 0x00000047u, 0x0000d42au, 0x0000d362u, 0x0000689fu, 0x0000699eu, 0x00006646u, 0x00040071u, 0x00000006u, 0x00006651u, 0x0000669du, 0x0004007cu, 0x00000008u, 0x00006652u, 0x00006651u, 0x0003003eu, 0x000065bbu, 0x0000c96fu, 0x0003003eu, 0x000065bcu, 0x00006606u, 0x0003003eu, 0x000065bdu, 0x0000c975u, 0x0003003eu, 0x000065beu, 0x00006652u, 0x0003003eu, 0x0000699fu, 0x00000220u, 0x000300f7u, 0x000069a2u, 0x00000000u, 0x000b00fbu, 0x00006652u, 0x000069a2u, 0x00000000u, 0x000069a3u, 0x00000001u, 0x000069a4u, 0x00000002u, 0x000069a5u, 0x00000003u, 0x000069a6u, 0x000200f8u, 0x000069a6u, 0x0003003eu, 0x0000699fu, 0x00006606u, 0x000200f9u, 0x000069a2u, 0x000200f8u, 0x000069a5u, 0x0003003eu, 0x0000699fu, 0x0000023cu, 0x000200f9u, 0x000069a2u, 0x000200f8u, 0x000069a4u, 0x00050080u, 0x00000008u, 0x000069b4u, 0x0000c96fu, 0x00006606u, 0x000500c7u, 0x00000008u, 0x000069b5u, 0x000069b4u, 0x0000023cu, 0x0003003eu, 0x0000699fu, 0x000069b5u, 0x000200f9u, 0x000069a2u, 0x000200f8u, 0x000069a3u, 0x000300f7u, 0x000069a8u, 0x00000000u, 0x000400fau, 0x0000c975u, 0x000069a9u, 0x000069aau, 0x000200f8u, 0x000069aau, 0x00050082u, 0x00000008u, 0x000069b0u, 0x0000c96fu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x000069b1u, 0x000069b0u, 0x0000023cu, 0x0003003eu, 0x0000699fu, 0x000069b1u, 0x000200f9u, 0x000069a8u, 0x000200f8u, 0x000069a9u, 0x00050080u, 0x00000008u, 0x000069adu, 0x00006606u, 0x0000c96fu, 0x0007000cu, 0x00000008u, 0x000069aeu, 0x00000001u, 0x00000027u, 0x0000023cu, 0x000069adu, 0x0003003eu, 0x0000699fu, 0x000069aeu, 0x000200f9u, 0x000069a8u, 0x000200f8u, 0x000069a8u, 0x000700f5u, 0x00000008u, 0x0000d428u, 0x000069aeu, 0x000069a9u, 0x000069b1u, 0x000069aau, 0x000200f9u, 0x000069a2u, 0x000200f8u, 0x000069a2u, 0x000d00f5u, 0x00000008u, 0x0000d427u, 0x00000220u, 0x00006645u, 0x0000d428u, 0x000069a8u, 0x000069b5u, 0x000069a4u, 0x0000023cu, 0x000069a5u, 0x00006606u, 0x000069a6u, 0x0003003eu, 0x000069a0u, 0x0000d427u, 0x0003003eu, 0x000065bau, 0x0000d427u, 0x000500c4u, 0x00000008u, 0x00006658u, 0x0000d427u, 0x00000236u, 0x00040072u, 0x0000037bu, 0x00006659u, 0x00006658u, 0x0004007cu, 0x0000000fu, 0x0000665au, 0x00006659u, 0x00050051u, 0x0000000fu, 0x0000665bu, 0x0000d42au, 0x00000000u, 0x00050051u, 0x0000000fu, 0x0000665cu, 0x0000d42au, 0x00000001u, 0x00050051u, 0x0000000fu, 0x0000665du, 0x0000d42au, 0x00000002u, 0x00070050u, 0x00000010u, 0x0000665eu, 0x0000665bu, 0x0000665cu, 0x0000665du, 0x0000665au, 0x0003003eu, 0x000065bfu, 0x0000665eu, 0x000300f7u, 0x000069b8u, 0x00000000u, 0x000400fau, 0x0000095du, 0x000069b9u, 0x000069bau, 0x000200f8u, 0x000069bau, 0x0003003eu, 0x00000675u, 0x0000665eu, 0x000200f9u, 0x000069b8u, 0x000200f8u, 0x000069b9u, 0x0008004fu, 0x00000047u, 0x000069bcu, 0x0000665eu, 0x0000665eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000069bdu, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000069beu, 0x000069bdu, 0x0000665eu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000069beu, 0x000200f9u, 0x000069b8u, 0x000200f8u, 0x000069b8u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000300f7u, 0x00006661u, 0x00000000u, 0x000400fau, 0x000065e2u, 0x00006662u, 0x00006663u, 0x000200f8u, 0x00006663u, 0x000300f7u, 0x0000666bu, 0x00000000u, 0x000400fau, 0x00000852u, 0x0000666cu, 0x0000666bu, 0x000200f8u, 0x0000666cu, 0x000300f7u, 0x00006a06u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x00006a06u, 0x00000002u, 0x00006a07u, 0x00000003u, 0x00006a08u, 0x000200f8u, 0x00006a08u, 0x0004003du, 0x00000010u, 0x00006a25u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x00006a26u, 0x00006a25u, 0x00006a25u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x00006a27u, 0x00006a26u, 0x0003003eu, 0x00006a03u, 0x00006a27u, 0x00050041u, 0x00000007u, 0x00006a28u, 0x00006a03u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006a29u, 0x00006a28u, 0x000500c4u, 0x00000006u, 0x00006a2au, 0x00006a29u, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006a2bu, 0x00006a03u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006a2cu, 0x00006a2bu, 0x000500c5u, 0x00000006u, 0x00006a2du, 0x00006a2au, 0x00006a2cu, 0x0003003eu, 0x00006a04u, 0x00006a2du, 0x000500c7u, 0x00000006u, 0x00006a2fu, 0x00006a2du, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006a30u, 0x00006a2fu, 0x00000464u, 0x0003003eu, 0x00006a05u, 0x00006a30u, 0x000500c2u, 0x00000006u, 0x00006a32u, 0x00006a2du, 0x00000386u, 0x00040071u, 0x00000011u, 0x00006a33u, 0x00006a32u, 0x0003003eu, 0x00000708u, 0x00006a33u, 0x000500c7u, 0x00000006u, 0x00006a35u, 0x00006a2du, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00006a36u, 0x00006a35u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00006a38u, 0x00006a36u, 0x00006a30u, 0x00040071u, 0x0000000fu, 0x00006a39u, 0x00006a38u, 0x0003003eu, 0x000006eau, 0x00006a39u, 0x000200f9u, 0x00006a06u, 0x000200f8u, 0x00006a07u, 0x00050041u, 0x000006e9u, 0x00006a09u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006a0au, 0x00006a09u, 0x000500c2u, 0x0000000fu, 0x00006a0bu, 0x00006a0au, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x00006a0cu, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006a0du, 0x00006a0cu, 0x000500c7u, 0x0000000fu, 0x00006a0eu, 0x00006a0du, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x00006a0fu, 0x00006a0bu, 0x00006a0eu, 0x0003003eu, 0x000006eau, 0x00006a0fu, 0x00050041u, 0x000006e9u, 0x00006a10u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006a11u, 0x00006a10u, 0x00040071u, 0x00000006u, 0x00006a12u, 0x00006a11u, 0x000500c7u, 0x00000006u, 0x00006a13u, 0x00006a12u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x00006a14u, 0x00006a13u, 0x000006f7u, 0x0003003eu, 0x00006a02u, 0x00006a14u, 0x00050041u, 0x000006e9u, 0x00006a15u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006a16u, 0x00006a15u, 0x00040071u, 0x00000006u, 0x00006a17u, 0x00006a16u, 0x000500c7u, 0x00000006u, 0x00006a18u, 0x00006a17u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x00006a19u, 0x00006a18u, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x00006a1bu, 0x00006a14u, 0x00006a19u, 0x0003003eu, 0x00006a02u, 0x00006a1bu, 0x0004003du, 0x0000000fu, 0x00006a1du, 0x00006a0cu, 0x00040071u, 0x00000006u, 0x00006a1eu, 0x00006a1du, 0x000500c7u, 0x00000006u, 0x00006a1fu, 0x00006a1eu, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x00006a20u, 0x00006a1fu, 0x00000704u, 0x000500c5u, 0x00000006u, 0x00006a22u, 0x00006a1bu, 0x00006a20u, 0x0003003eu, 0x00006a02u, 0x00006a22u, 0x00040071u, 0x00000011u, 0x00006a24u, 0x00006a22u, 0x0003003eu, 0x00000708u, 0x00006a24u, 0x000200f9u, 0x00006a06u, 0x000200f8u, 0x00006a06u, 0x000200f9u, 0x0000666bu, 0x000200f8u, 0x0000666bu, 0x000200f9u, 0x00006661u, 0x000200f8u, 0x00006662u, 0x0003003eu, 0x000065c0u, 0x000065c3u, 0x00050082u, 0x00000008u, 0x000069c6u, 0x000003edu, 0x000065c3u, 0x0007000cu, 0x00000008u, 0x000069c7u, 0x00000001u, 0x0000002au, 0x000069c6u, 0x0000022au, 0x0003003eu, 0x000069c0u, 0x000069c7u, 0x0006000cu, 0x00000008u, 0x000069c9u, 0x00000001u, 0x0000004au, 0x000069c7u, 0x00050082u, 0x00000008u, 0x000069cau, 0x000003f2u, 0x000069c9u, 0x0003003eu, 0x000069c1u, 0x000069cau, 0x0008000cu, 0x00000008u, 0x000069ccu, 0x00000001u, 0x0000002du, 0x000069cau, 0x00000220u, 0x0000023cu, 0x0003003eu, 0x000069c1u, 0x000069ccu, 0x00050082u, 0x00000008u, 0x000069ceu, 0x00000239u, 0x000069ccu, 0x0007000cu, 0x00000008u, 0x000069cfu, 0x00000001u, 0x0000002au, 0x000069ceu, 0x00000220u, 0x0003003eu, 0x000069c2u, 0x000069cfu, 0x000500c3u, 0x00000008u, 0x000069d2u, 0x000065c3u, 0x000069cfu, 0x000500c7u, 0x00000008u, 0x000069d3u, 0x000069d2u, 0x000003dau, 0x0003003eu, 0x000069c3u, 0x000069d3u, 0x000500c4u, 0x00000008u, 0x000069d5u, 0x000069ccu, 0x00000266u, 0x00050080u, 0x00000008u, 0x000069d7u, 0x000069d5u, 0x000069d3u, 0x00040072u, 0x00000012u, 0x000069d8u, 0x000069d7u, 0x0004007cu, 0x00000011u, 0x000069d9u, 0x000069d8u, 0x0003003eu, 0x000069c4u, 0x000069d9u, 0x0003003eu, 0x00000708u, 0x000069d9u, 0x0003003eu, 0x000006eau, 0x0000668bu, 0x0003003eu, 0x00000856u, 0x00000559u, 0x000300f7u, 0x00006668u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00006669u, 0x00006668u, 0x000200f8u, 0x00006669u, 0x0004003du, 0x00000011u, 0x000069dbu, 0x00000708u, 0x00040071u, 0x00000006u, 0x000069dcu, 0x000069dbu, 0x000500c4u, 0x00000006u, 0x000069ddu, 0x000069dcu, 0x00000704u, 0x0004003du, 0x0000000fu, 0x000069deu, 0x000006eau, 0x00040071u, 0x00000006u, 0x000069dfu, 0x000069deu, 0x000500c5u, 0x00000006u, 0x000069e0u, 0x000069ddu, 0x000069dfu, 0x0003003eu, 0x000069dau, 0x000069e0u, 0x000300f7u, 0x000069e1u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000069e1u, 0x00000002u, 0x000069e2u, 0x00000003u, 0x000069e3u, 0x000200f8u, 0x000069e3u, 0x000500c2u, 0x00000006u, 0x000069f9u, 0x000069e0u, 0x00000731u, 0x000500c7u, 0x00000006u, 0x000069fau, 0x000069f9u, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x000069fbu, 0x000069fau, 0x00050041u, 0x000006e9u, 0x000069fcu, 0x00000675u, 0x0000032du, 0x0003003eu, 0x000069fcu, 0x000069fbu, 0x000500c2u, 0x00000006u, 0x000069feu, 0x000069e0u, 0x00000386u, 0x000500c7u, 0x00000006u, 0x000069ffu, 0x000069feu, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x00006a00u, 0x000069ffu, 0x00050041u, 0x000006e9u, 0x00006a01u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x00006a01u, 0x00006a00u, 0x000200f9u, 0x000069e1u, 0x000200f8u, 0x000069e2u, 0x000500c2u, 0x00000006u, 0x000069e5u, 0x000069e0u, 0x00000731u, 0x000500c7u, 0x00000006u, 0x000069e6u, 0x000069e5u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x000069e7u, 0x000069e6u, 0x00050041u, 0x000006e9u, 0x000069e8u, 0x00000675u, 0x0000032du, 0x0003003eu, 0x000069e8u, 0x000069e7u, 0x000500c2u, 0x00000006u, 0x000069eau, 0x000069e0u, 0x00000737u, 0x000500c7u, 0x00000006u, 0x000069ebu, 0x000069eau, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x000069ecu, 0x000069ebu, 0x00050041u, 0x000006e9u, 0x000069edu, 0x00000675u, 0x0000045cu, 0x0003003eu, 0x000069edu, 0x000069ecu, 0x000500c2u, 0x00000006u, 0x000069efu, 0x000069e0u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x000069f0u, 0x000069efu, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x000069f1u, 0x000069f0u, 0x00050041u, 0x000006e9u, 0x000069f2u, 0x00000675u, 0x00000386u, 0x0003003eu, 0x000069f2u, 0x000069f1u, 0x000500c7u, 0x00000006u, 0x000069f4u, 0x000069e0u, 0x00000742u, 0x000500c4u, 0x00000006u, 0x000069f5u, 0x000069f4u, 0x00000737u, 0x00040071u, 0x0000000fu, 0x000069f6u, 0x000069f5u, 0x00050041u, 0x000006e9u, 0x000069f7u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x000069f7u, 0x000069f6u, 0x000200f9u, 0x000069e1u, 0x000200f8u, 0x000069e1u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006668u, 0x000200f8u, 0x00006668u, 0x000200f9u, 0x00006661u, 0x000200f8u, 0x00006661u, 0x000200f9u, 0x00006620u, 0x000200f8u, 0x00006620u, 0x000700f5u, 0x00000047u, 0x0000eebcu, 0x0000d1f1u, 0x00006618u, 0x0000d1e4u, 0x00006661u, 0x000700f5u, 0x0000000fu, 0x0000eea1u, 0x0000d07eu, 0x00006618u, 0x0000eea7u, 0x00006661u, 0x000700f5u, 0x0000000fu, 0x0000ee86u, 0x0000cf0cu, 0x00006618u, 0x0000ee8cu, 0x00006661u, 0x000700f5u, 0x00000047u, 0x0000ee5eu, 0x0000cce7u, 0x00006618u, 0x0000ee66u, 0x00006661u, 0x000700f5u, 0x0000000fu, 0x0000ee36u, 0x0000cb81u, 0x00006618u, 0x0000ee3eu, 0x00006661u, 0x000700f5u, 0x0000000fu, 0x0000ee0eu, 0x0000ca1cu, 0x00006618u, 0x0000ee16u, 0x00006661u, 0x000200f9u, 0x00001fc4u, 0x000200f8u, 0x00001fc3u, 0x0004007cu, 0x00000006u, 0x00001fc7u, 0x0000c192u, 0x0003003eu, 0x00001fc8u, 0x00001fc7u, 0x0003003eu, 0x00001fc9u, 0x00001fa1u, 0x000300f7u, 0x00006513u, 0x00000000u, 0x000900fbu, 0x0000065cu, 0x00006513u, 0x00000000u, 0x00006514u, 0x00000001u, 0x00006515u, 0x00000002u, 0x00006516u, 0x000200f8u, 0x00006516u, 0x000500c2u, 0x00000006u, 0x0000651eu, 0x00001fc7u, 0x0000025du, 0x000500c7u, 0x00000006u, 0x0000651fu, 0x0000651eu, 0x0000069eu, 0x0003003eu, 0x0000650eu, 0x0000651fu, 0x000500c2u, 0x00000006u, 0x00006521u, 0x00001fc7u, 0x00000230u, 0x000500c7u, 0x00000006u, 0x00006522u, 0x00006521u, 0x0000069eu, 0x0003003eu, 0x0000650fu, 0x00006522u, 0x000500c4u, 0x00000006u, 0x00006524u, 0x00001fc7u, 0x0000022du, 0x000500c7u, 0x00000006u, 0x00006525u, 0x00006524u, 0x0000069eu, 0x0003003eu, 0x00006510u, 0x00006525u, 0x000500c7u, 0x00000006u, 0x00006527u, 0x00001fc7u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006528u, 0x00006527u, 0x00000982u, 0x0003003eu, 0x00006511u, 0x00006528u, 0x00040071u, 0x0000000fu, 0x0000652au, 0x0000651fu, 0x00040071u, 0x0000000fu, 0x0000652cu, 0x00006522u, 0x00040071u, 0x0000000fu, 0x0000652eu, 0x00006525u, 0x00040071u, 0x0000000fu, 0x00006530u, 0x00006528u, 0x00070050u, 0x00000010u, 0x00006531u, 0x0000652au, 0x0000652cu, 0x0000652eu, 0x00006530u, 0x0003003eu, 0x00006512u, 0x00006531u, 0x000300f7u, 0x0000653eu, 0x00000000u, 0x000400fau, 0x0000095du, 0x0000653fu, 0x00006540u, 0x000200f8u, 0x00006540u, 0x0003003eu, 0x00000675u, 0x00006531u, 0x000200f9u, 0x0000653eu, 0x000200f8u, 0x0000653fu, 0x0008004fu, 0x00000047u, 0x00006542u, 0x00006531u, 0x00006531u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x00006543u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x00006544u, 0x00006543u, 0x00006531u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x00006544u, 0x000200f9u, 0x0000653eu, 0x000200f8u, 0x0000653eu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006513u, 0x000200f8u, 0x00006515u, 0x000500c7u, 0x00000006u, 0x00006518u, 0x00001fc7u, 0x000006c3u, 0x0003003eu, 0x00001fc8u, 0x00006518u, 0x00040071u, 0x0000000fu, 0x0000651au, 0x00006518u, 0x00070050u, 0x00000010u, 0x0000651bu, 0x0000651au, 0x0000651au, 0x0000651au, 0x0000651au, 0x0003003eu, 0x0000650du, 0x0000651bu, 0x000300f7u, 0x00006536u, 0x00000000u, 0x000400fau, 0x0000095du, 0x00006537u, 0x00006538u, 0x000200f8u, 0x00006538u, 0x0003003eu, 0x00000675u, 0x0000651bu, 0x000200f9u, 0x00006536u, 0x000200f8u, 0x00006537u, 0x0008004fu, 0x00000047u, 0x0000653au, 0x0000651bu, 0x0000651bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x0000653bu, 0x00000675u, 0x0009004fu, 0x00000010u, 0x0000653cu, 0x0000653bu, 0x0000651bu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x0000653cu, 0x000200f9u, 0x00006536u, 0x000200f8u, 0x00006536u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006513u, 0x000200f8u, 0x00006514u, 0x0003003eu, 0x00000675u, 0x00000613u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006513u, 0x000200f8u, 0x00006513u, 0x000300f7u, 0x00006533u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00006534u, 0x00006533u, 0x000200f8u, 0x00006534u, 0x000300f7u, 0x0000654au, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x0000654au, 0x00000002u, 0x0000654bu, 0x00000003u, 0x0000654cu, 0x000200f8u, 0x0000654cu, 0x0004003du, 0x00000010u, 0x00006569u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x0000656au, 0x00006569u, 0x00006569u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x0000656bu, 0x0000656au, 0x0003003eu, 0x00006547u, 0x0000656bu, 0x00050041u, 0x00000007u, 0x0000656cu, 0x00006547u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000656du, 0x0000656cu, 0x000500c4u, 0x00000006u, 0x0000656eu, 0x0000656du, 0x00000314u, 0x00050041u, 0x00000007u, 0x0000656fu, 0x00006547u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006570u, 0x0000656fu, 0x000500c5u, 0x00000006u, 0x00006571u, 0x0000656eu, 0x00006570u, 0x0003003eu, 0x00006548u, 0x00006571u, 0x000500c7u, 0x00000006u, 0x00006573u, 0x00006571u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006574u, 0x00006573u, 0x00000464u, 0x0003003eu, 0x00006549u, 0x00006574u, 0x000500c2u, 0x00000006u, 0x00006576u, 0x00006571u, 0x00000386u, 0x00040071u, 0x00000011u, 0x00006577u, 0x00006576u, 0x0003003eu, 0x00000708u, 0x00006577u, 0x000500c7u, 0x00000006u, 0x00006579u, 0x00006571u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x0000657au, 0x00006579u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x0000657cu, 0x0000657au, 0x00006574u, 0x00040071u, 0x0000000fu, 0x0000657du, 0x0000657cu, 0x0003003eu, 0x000006eau, 0x0000657du, 0x000200f9u, 0x0000654au, 0x000200f8u, 0x0000654bu, 0x00050041u, 0x000006e9u, 0x0000654du, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000654eu, 0x0000654du, 0x000500c2u, 0x0000000fu, 0x0000654fu, 0x0000654eu, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x00006550u, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00006551u, 0x00006550u, 0x000500c7u, 0x0000000fu, 0x00006552u, 0x00006551u, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x00006553u, 0x0000654fu, 0x00006552u, 0x0003003eu, 0x000006eau, 0x00006553u, 0x00050041u, 0x000006e9u, 0x00006554u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006555u, 0x00006554u, 0x00040071u, 0x00000006u, 0x00006556u, 0x00006555u, 0x000500c7u, 0x00000006u, 0x00006557u, 0x00006556u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x00006558u, 0x00006557u, 0x000006f7u, 0x0003003eu, 0x00006546u, 0x00006558u, 0x00050041u, 0x000006e9u, 0x00006559u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000655au, 0x00006559u, 0x00040071u, 0x00000006u, 0x0000655bu, 0x0000655au, 0x000500c7u, 0x00000006u, 0x0000655cu, 0x0000655bu, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x0000655du, 0x0000655cu, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x0000655fu, 0x00006558u, 0x0000655du, 0x0003003eu, 0x00006546u, 0x0000655fu, 0x0004003du, 0x0000000fu, 0x00006561u, 0x00006550u, 0x00040071u, 0x00000006u, 0x00006562u, 0x00006561u, 0x000500c7u, 0x00000006u, 0x00006563u, 0x00006562u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x00006564u, 0x00006563u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x00006566u, 0x0000655fu, 0x00006564u, 0x0003003eu, 0x00006546u, 0x00006566u, 0x00040071u, 0x00000011u, 0x00006568u, 0x00006566u, 0x0003003eu, 0x00000708u, 0x00006568u, 0x000200f9u, 0x0000654au, 0x000200f8u, 0x0000654au, 0x000200f9u, 0x00006533u, 0x000200f8u, 0x00006533u, 0x000200f9u, 0x00001fc4u, 0x000200f8u, 0x00001fc4u, 0x000700f5u, 0x00000047u, 0x0000eeb6u, 0x0000d1f1u, 0x00006533u, 0x0000eebcu, 0x00006620u, 0x000700f5u, 0x0000000fu, 0x0000ee9bu, 0x0000d07eu, 0x00006533u, 0x0000eea1u, 0x00006620u, 0x000700f5u, 0x0000000fu, 0x0000ee80u, 0x0000cf0cu, 0x00006533u, 0x0000ee86u, 0x00006620u, 0x000700f5u, 0x00000047u, 0x0000ee58u, 0x0000cce7u, 0x00006533u, 0x0000ee5eu, 0x00006620u, 0x000700f5u, 0x0000000fu, 0x0000ee30u, 0x0000cb81u, 0x00006533u, 0x0000ee36u, 0x00006620u, 0x000700f5u, 0x0000000fu, 0x0000ee08u, 0x0000ca1cu, 0x00006533u, 0x0000ee0eu, 0x00006620u, 0x000700f5u, 0x00000047u, 0x0000edcau, 0x0000c7deu, 0x00006533u, 0x0000c7dau, 0x00006620u, 0x000200f9u, 0x00001fb6u, 0x000200f8u, 0x00001fb5u, 0x00070041u, 0x000006d9u, 0x00001fb9u, 0x00000245u, 0x00000220u, 0x00001fa1u, 0x00000263u, 0x0004003du, 0x00000006u, 0x00001fbau, 0x00001fb9u, 0x0003003eu, 0x00001fb8u, 0x00001fbau, 0x000300f7u, 0x00006457u, 0x00000000u, 0x000b00fbu, 0x0000065cu, 0x00006457u, 0x00000004u, 0x00006458u, 0x00000002u, 0x00006459u, 0x00000003u, 0x0000645au, 0x00000001u, 0x0000645bu, 0x000200f8u, 0x0000645bu, 0x0004003du, 0x00000006u, 0x000064a6u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000064a7u, 0x000064a6u, 0x00000464u, 0x000500c6u, 0x00000006u, 0x000064a8u, 0x000064a7u, 0x00000464u, 0x00050084u, 0x00000006u, 0x000064a9u, 0x000064a8u, 0x00000314u, 0x000500c2u, 0x00000006u, 0x000064abu, 0x00001fbau, 0x000064a9u, 0x0003003eu, 0x00001fb8u, 0x000064abu, 0x000500c7u, 0x00000006u, 0x000064adu, 0x000064abu, 0x000006c3u, 0x0003003eu, 0x00001fb8u, 0x000064adu, 0x00040071u, 0x0000000fu, 0x000064afu, 0x000064adu, 0x00070050u, 0x00000010u, 0x000064b0u, 0x000064afu, 0x000064afu, 0x000064afu, 0x000064afu, 0x0003003eu, 0x00006456u, 0x000064b0u, 0x000300f7u, 0x000064cdu, 0x00000000u, 0x000400fau, 0x0000095du, 0x000064ceu, 0x000064cfu, 0x000200f8u, 0x000064cfu, 0x0003003eu, 0x00000675u, 0x000064b0u, 0x000200f9u, 0x000064cdu, 0x000200f8u, 0x000064ceu, 0x0008004fu, 0x00000047u, 0x000064d1u, 0x000064b0u, 0x000064b0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064d2u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064d3u, 0x000064d2u, 0x000064b0u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064d3u, 0x000200f9u, 0x000064cdu, 0x000200f8u, 0x000064cdu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006457u, 0x000200f8u, 0x0000645au, 0x0004003du, 0x00000006u, 0x0000648eu, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x0000648fu, 0x0000648eu, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x00006490u, 0x0000648fu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006491u, 0x00006490u, 0x00000330u, 0x000500c2u, 0x00000006u, 0x00006493u, 0x00001fbau, 0x00006491u, 0x0003003eu, 0x00001fb8u, 0x00006493u, 0x000500c7u, 0x00000006u, 0x00006495u, 0x00006493u, 0x000009ddu, 0x0003003eu, 0x00001fb8u, 0x00006495u, 0x000500c2u, 0x00000006u, 0x00006497u, 0x00006495u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x00006498u, 0x00006497u, 0x000006c3u, 0x0003003eu, 0x00006453u, 0x00006498u, 0x000500c2u, 0x00000006u, 0x0000649au, 0x00006495u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x0000649bu, 0x0000649au, 0x000006c3u, 0x0003003eu, 0x00006454u, 0x0000649bu, 0x00040071u, 0x0000000fu, 0x0000649du, 0x00006498u, 0x00040071u, 0x0000000fu, 0x000064a3u, 0x0000649bu, 0x00070050u, 0x00000010u, 0x000064a4u, 0x0000649du, 0x0000649du, 0x0000649du, 0x000064a3u, 0x0003003eu, 0x00006455u, 0x000064a4u, 0x000300f7u, 0x000064c5u, 0x00000000u, 0x000400fau, 0x0000095du, 0x000064c6u, 0x000064c7u, 0x000200f8u, 0x000064c7u, 0x0003003eu, 0x00000675u, 0x000064a4u, 0x000200f9u, 0x000064c5u, 0x000200f8u, 0x000064c6u, 0x0008004fu, 0x00000047u, 0x000064c9u, 0x000064a4u, 0x000064a4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064cau, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064cbu, 0x000064cau, 0x000064a4u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064cbu, 0x000200f9u, 0x000064c5u, 0x000200f8u, 0x000064c5u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006457u, 0x000200f8u, 0x00006459u, 0x0004003du, 0x00000006u, 0x00006472u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x00006473u, 0x00006472u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x00006474u, 0x00006473u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006475u, 0x00006474u, 0x00000330u, 0x000500c2u, 0x00000006u, 0x00006477u, 0x00001fbau, 0x00006475u, 0x0003003eu, 0x00001fb8u, 0x00006477u, 0x000500c2u, 0x00000006u, 0x00006479u, 0x00006477u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x0000647au, 0x00006479u, 0x0000069eu, 0x0003003eu, 0x0000644eu, 0x0000647au, 0x000500c2u, 0x00000006u, 0x0000647cu, 0x00006477u, 0x00000464u, 0x000500c7u, 0x00000006u, 0x0000647du, 0x0000647cu, 0x0000069eu, 0x0003003eu, 0x0000644fu, 0x0000647du, 0x000500c4u, 0x00000006u, 0x0000647fu, 0x00006477u, 0x00000386u, 0x000500c7u, 0x00000006u, 0x00006480u, 0x0000647fu, 0x0000069eu, 0x0003003eu, 0x00006450u, 0x00006480u, 0x000500c7u, 0x00000006u, 0x00006482u, 0x00006477u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006483u, 0x00006482u, 0x00000982u, 0x0003003eu, 0x00006451u, 0x00006483u, 0x00040071u, 0x0000000fu, 0x00006485u, 0x0000647au, 0x00040071u, 0x0000000fu, 0x00006487u, 0x0000647du, 0x00040071u, 0x0000000fu, 0x00006489u, 0x00006480u, 0x00040071u, 0x0000000fu, 0x0000648bu, 0x00006483u, 0x00070050u, 0x00000010u, 0x0000648cu, 0x00006485u, 0x00006487u, 0x00006489u, 0x0000648bu, 0x0003003eu, 0x00006452u, 0x0000648cu, 0x000300f7u, 0x000064bdu, 0x00000000u, 0x000400fau, 0x0000095du, 0x000064beu, 0x000064bfu, 0x000200f8u, 0x000064bfu, 0x0003003eu, 0x00000675u, 0x0000648cu, 0x000200f9u, 0x000064bdu, 0x000200f8u, 0x000064beu, 0x0008004fu, 0x00000047u, 0x000064c1u, 0x0000648cu, 0x0000648cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064c2u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064c3u, 0x000064c2u, 0x0000648cu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064c3u, 0x000200f9u, 0x000064bdu, 0x000200f8u, 0x000064bdu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006457u, 0x000200f8u, 0x00006458u, 0x000500c2u, 0x00000006u, 0x0000645du, 0x00001fbau, 0x000006deu, 0x000500c7u, 0x00000006u, 0x0000645eu, 0x0000645du, 0x000006c3u, 0x0003003eu, 0x00006449u, 0x0000645eu, 0x000500c2u, 0x00000006u, 0x00006460u, 0x00001fbau, 0x00000330u, 0x000500c7u, 0x00000006u, 0x00006461u, 0x00006460u, 0x000006c3u, 0x0003003eu, 0x0000644au, 0x00006461u, 0x000500c2u, 0x00000006u, 0x00006463u, 0x00001fbau, 0x00000314u, 0x000500c7u, 0x00000006u, 0x00006464u, 0x00006463u, 0x000006c3u, 0x0003003eu, 0x0000644bu, 0x00006464u, 0x000500c2u, 0x00000006u, 0x00006466u, 0x00001fbau, 0x0000032du, 0x000500c7u, 0x00000006u, 0x00006467u, 0x00006466u, 0x000006c3u, 0x0003003eu, 0x0000644cu, 0x00006467u, 0x00040071u, 0x0000000fu, 0x00006469u, 0x0000645eu, 0x00040071u, 0x0000000fu, 0x0000646bu, 0x00006461u, 0x00040071u, 0x0000000fu, 0x0000646du, 0x00006464u, 0x00040071u, 0x0000000fu, 0x0000646fu, 0x00006467u, 0x00070050u, 0x00000010u, 0x00006470u, 0x00006469u, 0x0000646bu, 0x0000646du, 0x0000646fu, 0x0003003eu, 0x0000644du, 0x00006470u, 0x000300f7u, 0x000064b5u, 0x00000000u, 0x000400fau, 0x0000095du, 0x000064b6u, 0x000064b7u, 0x000200f8u, 0x000064b7u, 0x0003003eu, 0x00000675u, 0x00006470u, 0x000200f9u, 0x000064b5u, 0x000200f8u, 0x000064b6u, 0x0008004fu, 0x00000047u, 0x000064b9u, 0x00006470u, 0x00006470u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x000064bau, 0x00000675u, 0x0009004fu, 0x00000010u, 0x000064bbu, 0x000064bau, 0x00006470u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x000064bbu, 0x000200f9u, 0x000064b5u, 0x000200f8u, 0x000064b5u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00006457u, 0x000200f8u, 0x00006457u, 0x000300f7u, 0x000064b2u, 0x00000000u, 0x000400fau, 0x00000852u, 0x000064b3u, 0x000064b2u, 0x000200f8u, 0x000064b3u, 0x000300f7u, 0x000064d9u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000064d9u, 0x00000002u, 0x000064dau, 0x00000003u, 0x000064dbu, 0x000200f8u, 0x000064dbu, 0x0004003du, 0x00000010u, 0x000064f8u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x000064f9u, 0x000064f8u, 0x000064f8u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x000064fau, 0x000064f9u, 0x0003003eu, 0x000064d6u, 0x000064fau, 0x00050041u, 0x00000007u, 0x000064fbu, 0x000064d6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000064fcu, 0x000064fbu, 0x000500c4u, 0x00000006u, 0x000064fdu, 0x000064fcu, 0x00000314u, 0x00050041u, 0x00000007u, 0x000064feu, 0x000064d6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000064ffu, 0x000064feu, 0x000500c5u, 0x00000006u, 0x00006500u, 0x000064fdu, 0x000064ffu, 0x0003003eu, 0x000064d7u, 0x00006500u, 0x000500c7u, 0x00000006u, 0x00006502u, 0x00006500u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006503u, 0x00006502u, 0x00000464u, 0x0003003eu, 0x000064d8u, 0x00006503u, 0x000500c2u, 0x00000006u, 0x00006505u, 0x00006500u, 0x00000386u, 0x00040071u, 0x00000011u, 0x00006506u, 0x00006505u, 0x0003003eu, 0x00000708u, 0x00006506u, 0x000500c7u, 0x00000006u, 0x00006508u, 0x00006500u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00006509u, 0x00006508u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x0000650bu, 0x00006509u, 0x00006503u, 0x00040071u, 0x0000000fu, 0x0000650cu, 0x0000650bu, 0x0003003eu, 0x000006eau, 0x0000650cu, 0x000200f9u, 0x000064d9u, 0x000200f8u, 0x000064dau, 0x00050041u, 0x000006e9u, 0x000064dcu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000064ddu, 0x000064dcu, 0x000500c2u, 0x0000000fu, 0x000064deu, 0x000064ddu, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x000064dfu, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000064e0u, 0x000064dfu, 0x000500c7u, 0x0000000fu, 0x000064e1u, 0x000064e0u, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x000064e2u, 0x000064deu, 0x000064e1u, 0x0003003eu, 0x000006eau, 0x000064e2u, 0x00050041u, 0x000006e9u, 0x000064e3u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000064e4u, 0x000064e3u, 0x00040071u, 0x00000006u, 0x000064e5u, 0x000064e4u, 0x000500c7u, 0x00000006u, 0x000064e6u, 0x000064e5u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000064e7u, 0x000064e6u, 0x000006f7u, 0x0003003eu, 0x000064d5u, 0x000064e7u, 0x00050041u, 0x000006e9u, 0x000064e8u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000064e9u, 0x000064e8u, 0x00040071u, 0x00000006u, 0x000064eau, 0x000064e9u, 0x000500c7u, 0x00000006u, 0x000064ebu, 0x000064eau, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000064ecu, 0x000064ebu, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x000064eeu, 0x000064e7u, 0x000064ecu, 0x0003003eu, 0x000064d5u, 0x000064eeu, 0x0004003du, 0x0000000fu, 0x000064f0u, 0x000064dfu, 0x00040071u, 0x00000006u, 0x000064f1u, 0x000064f0u, 0x000500c7u, 0x00000006u, 0x000064f2u, 0x000064f1u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x000064f3u, 0x000064f2u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x000064f5u, 0x000064eeu, 0x000064f3u, 0x0003003eu, 0x000064d5u, 0x000064f5u, 0x00040071u, 0x00000011u, 0x000064f7u, 0x000064f5u, 0x0003003eu, 0x00000708u, 0x000064f7u, 0x000200f9u, 0x000064d9u, 0x000200f8u, 0x000064d9u, 0x000200f9u, 0x000064b2u, 0x000200f8u, 0x000064b2u, 0x000200f9u, 0x00001fb6u, 0x000200f8u, 0x00001fb6u, 0x000700f5u, 0x00000047u, 0x0000eeaeu, 0x0000d1f1u, 0x000064b2u, 0x0000eeb6u, 0x00001fc4u, 0x000700f5u, 0x0000000fu, 0x0000ee93u, 0x0000d07eu, 0x000064b2u, 0x0000ee9bu, 0x00001fc4u, 0x000700f5u, 0x0000000fu, 0x0000ee78u, 0x0000cf0cu, 0x000064b2u, 0x0000ee80u, 0x00001fc4u, 0x000700f5u, 0x00000047u, 0x0000ee50u, 0x0000cce7u, 0x000064b2u, 0x0000ee58u, 0x00001fc4u, 0x000700f5u, 0x0000000fu, 0x0000ee28u, 0x0000cb81u, 0x000064b2u, 0x0000ee30u, 0x00001fc4u, 0x000700f5u, 0x0000000fu, 0x0000ee00u, 0x0000ca1cu, 0x000064b2u, 0x0000ee08u, 0x00001fc4u, 0x000700f5u, 0x00000047u, 0x0000edc2u, 0x0000c7deu, 0x000064b2u, 0x0000edcau, 0x00001fc4u, 0x000200f9u, 0x00001fadu, 0x000200f8u, 0x00001fadu, 0x000700f5u, 0x00000047u, 0x0000eeadu, 0x0000d1f1u, 0x0000217fu, 0x0000eeaeu, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000ee92u, 0x0000d07eu, 0x0000217fu, 0x0000ee93u, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000ee77u, 0x0000cf0cu, 0x0000217fu, 0x0000ee78u, 0x00001fb6u, 0x000700f5u, 0x00000047u, 0x0000ee4fu, 0x0000cce7u, 0x0000217fu, 0x0000ee50u, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000ee27u, 0x0000cb81u, 0x0000217fu, 0x0000ee28u, 0x00001fb6u, 0x000700f5u, 0x0000000fu, 0x0000edffu, 0x0000ca1cu, 0x0000217fu, 0x0000ee00u, 0x00001fb6u, 0x000700f5u, 0x00000047u, 0x0000edc1u, 0x0000c7deu, 0x0000217fu, 0x0000edc2u, 0x00001fb6u, 0x000200f9u, 0x00001f8fu, 0x000200f8u, 0x00001f8fu, 0x000200f9u, 0x00001f8cu, 0x000200f8u, 0x00001f8eu, 0x000200f9u, 0x00001f75u, 0x000200f8u, 0x00001f75u, 0x000200f9u, 0x00001f72u, 0x000200f8u, 0x00001f74u, 0x0003003eu, 0x00001fd6u, 0x00001f64u, 0x0003003eu, 0x00001fd9u, 0x00001f67u, 0x0003003eu, 0x00001fdcu, 0x00001f6au, 0x0003003eu, 0x00001fdfu, 0x00001f6du, 0x0003003eu, 0x00001fe2u, 0x00001f70u, 0x0004003du, 0x000000b0u, 0x00006a44u, 0x00001fd6u, 0x000500b0u, 0x0000087bu, 0x00006a48u, 0x00006a44u, 0x0000200fu, 0x0004009bu, 0x00000069u, 0x00006a49u, 0x00006a48u, 0x000300f7u, 0x00006a4au, 0x00000000u, 0x000400fau, 0x00006a49u, 0x00006a4bu, 0x00006a4au, 0x000200f8u, 0x00006a4bu, 0x000500c2u, 0x00000006u, 0x00006a4du, 0x00001f67u, 0x0000078bu, 0x0003003eu, 0x00006a3au, 0x00006a4du, 0x0004003du, 0x000000b0u, 0x00006a4eu, 0x00001fd6u, 0x00050050u, 0x000000b0u, 0x00006a4fu, 0x000008fdu, 0x000008fdu, 0x000500c7u, 0x000000b0u, 0x00006a50u, 0x00006a4eu, 0x00006a4fu, 0x0003003eu, 0x00006a3bu, 0x00006a50u, 0x0004003du, 0x000000b0u, 0x00006a51u, 0x00001fd6u, 0x00050050u, 0x000000efu, 0x00006a52u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x00006a53u, 0x00006a51u, 0x00006a52u, 0x0003003eu, 0x00001fd6u, 0x00006a53u, 0x00050041u, 0x00000007u, 0x00006a54u, 0x00006a3bu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006a55u, 0x00006a54u, 0x00050084u, 0x00000006u, 0x00006a56u, 0x00006a55u, 0x00000906u, 0x00050041u, 0x00000007u, 0x00006a57u, 0x00006a3bu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006a58u, 0x00006a57u, 0x00050080u, 0x00000006u, 0x00006a59u, 0x00006a56u, 0x00006a58u, 0x0003003eu, 0x00006a3cu, 0x00006a59u, 0x00050041u, 0x00000007u, 0x00006a5cu, 0x00001fd6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006a5du, 0x00006a5cu, 0x00050084u, 0x00000006u, 0x00006a5eu, 0x00006a4du, 0x00006a5du, 0x00050080u, 0x00000006u, 0x00006a5fu, 0x00001f6du, 0x00006a5eu, 0x00050041u, 0x00000007u, 0x00006a60u, 0x00001fd6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006a61u, 0x00006a60u, 0x00050080u, 0x00000006u, 0x00006a62u, 0x00006a5fu, 0x00006a61u, 0x0003003eu, 0x00006a3du, 0x00006a62u, 0x0003003eu, 0x00006a3eu, 0x00006a62u, 0x0003003eu, 0x00006a3fu, 0x00006a59u, 0x0004003du, 0x00000069u, 0x00006a7eu, 0x00000755u, 0x000300f7u, 0x00006a7fu, 0x00000000u, 0x000400fau, 0x00006a7eu, 0x00006a80u, 0x00006a7fu, 0x000200f8u, 0x00006a80u, 0x000300f7u, 0x00006a81u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00006a81u, 0x00000000u, 0x00006a82u, 0x00000001u, 0x00006a83u, 0x00000002u, 0x00006a84u, 0x00000003u, 0x00006a85u, 0x00000004u, 0x00006a86u, 0x000200f8u, 0x00006a86u, 0x000500c7u, 0x00000006u, 0x00006b12u, 0x00006a62u, 0x000006cbu, 0x0003003eu, 0x00006a3eu, 0x00006b12u, 0x00050084u, 0x00000006u, 0x00006b14u, 0x00006a59u, 0x00000818u, 0x00050080u, 0x00000006u, 0x00006b16u, 0x00006b12u, 0x00006b14u, 0x0003003eu, 0x00006a3eu, 0x00006b16u, 0x0004003du, 0x00000010u, 0x00006b17u, 0x00000675u, 0x00040071u, 0x000004f7u, 0x00006b18u, 0x00006b17u, 0x0003003eu, 0x00006a7cu, 0x00006b18u, 0x00050041u, 0x00000007u, 0x00006b19u, 0x00006a7cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006b1au, 0x00006b19u, 0x000500c4u, 0x00000006u, 0x00006b1bu, 0x00006b1au, 0x000006deu, 0x00050041u, 0x00000007u, 0x00006b1cu, 0x00006a7cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006b1du, 0x00006b1cu, 0x000500c4u, 0x00000006u, 0x00006b1eu, 0x00006b1du, 0x00000330u, 0x000500c5u, 0x00000006u, 0x00006b1fu, 0x00006b1bu, 0x00006b1eu, 0x00050041u, 0x00000007u, 0x00006b20u, 0x00006a7cu, 0x00000386u, 0x0004003du, 0x00000006u, 0x00006b21u, 0x00006b20u, 0x000500c4u, 0x00000006u, 0x00006b22u, 0x00006b21u, 0x00000314u, 0x000500c5u, 0x00000006u, 0x00006b23u, 0x00006b1fu, 0x00006b22u, 0x00050041u, 0x00000007u, 0x00006b24u, 0x00006a7cu, 0x00000464u, 0x0004003du, 0x00000006u, 0x00006b25u, 0x00006b24u, 0x000500c4u, 0x00000006u, 0x00006b26u, 0x00006b25u, 0x0000032du, 0x000500c5u, 0x00000006u, 0x00006b27u, 0x00006b23u, 0x00006b26u, 0x0003003eu, 0x00006a7du, 0x00006b27u, 0x00060041u, 0x000006d9u, 0x00006b2au, 0x000006d7u, 0x00000220u, 0x00006b16u, 0x0003003eu, 0x00006b2au, 0x00006b27u, 0x00050084u, 0x00000006u, 0x00006b2cu, 0x00000386u, 0x00006b16u, 0x00050041u, 0x000006e9u, 0x00006b2du, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006b2eu, 0x00006b2du, 0x00040071u, 0x00000006u, 0x00006b2fu, 0x00006b2eu, 0x0004007cu, 0x00000008u, 0x00006b30u, 0x00006b2fu, 0x000500c7u, 0x00000008u, 0x00006b31u, 0x00006b30u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00006b32u, 0x00006b31u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00006b33u, 0x00006b32u, 0x0004007cu, 0x0000000fu, 0x00006b34u, 0x00006b33u, 0x00060041u, 0x00000671u, 0x00006b35u, 0x0000067cu, 0x00000220u, 0x00006b2cu, 0x0003003eu, 0x00006b35u, 0x00006b34u, 0x00050080u, 0x00000006u, 0x00006b38u, 0x00006b2cu, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00006b39u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006b3au, 0x00006b39u, 0x00040071u, 0x00000006u, 0x00006b3bu, 0x00006b3au, 0x0004007cu, 0x00000008u, 0x00006b3cu, 0x00006b3bu, 0x000500c7u, 0x00000008u, 0x00006b3du, 0x00006b3cu, 0x0000022au, 0x00050084u, 0x00000008u, 0x00006b3eu, 0x00006b3du, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00006b3fu, 0x00006b3eu, 0x0004007cu, 0x0000000fu, 0x00006b40u, 0x00006b3fu, 0x00060041u, 0x00000671u, 0x00006b41u, 0x0000067cu, 0x00000220u, 0x00006b38u, 0x0003003eu, 0x00006b41u, 0x00006b40u, 0x000300f7u, 0x00006b42u, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006b43u, 0x00006b42u, 0x000200f8u, 0x00006b43u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006b45u, 0x00006b16u, 0x0000084cu, 0x00060041u, 0x000006d9u, 0x00006b46u, 0x000006d7u, 0x00000220u, 0x00006b45u, 0x0003003eu, 0x00006b46u, 0x0000084eu, 0x000200f9u, 0x00006b42u, 0x000200f8u, 0x00006b42u, 0x000200f9u, 0x00006a81u, 0x000200f8u, 0x00006a85u, 0x000500c7u, 0x00000006u, 0x00006af1u, 0x00006a62u, 0x00000683u, 0x0003003eu, 0x00006a3eu, 0x00006af1u, 0x00050084u, 0x00000006u, 0x00006af3u, 0x00006a59u, 0x000007f2u, 0x00050080u, 0x00000006u, 0x00006af5u, 0x00006af1u, 0x00006af3u, 0x0003003eu, 0x00006a3eu, 0x00006af5u, 0x0004003du, 0x00000010u, 0x00006af6u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x00006af7u, 0x00006af6u, 0x00006af6u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x00006af8u, 0x00006af7u, 0x0003003eu, 0x00006a7au, 0x00006af8u, 0x00050041u, 0x00000007u, 0x00006af9u, 0x00006a7au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006afau, 0x00006af9u, 0x000500c4u, 0x00000006u, 0x00006afbu, 0x00006afau, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006afcu, 0x00006a7au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006afdu, 0x00006afcu, 0x000500c5u, 0x00000006u, 0x00006afeu, 0x00006afbu, 0x00006afdu, 0x0003003eu, 0x00006a7bu, 0x00006afeu, 0x000500c6u, 0x00000006u, 0x00006b00u, 0x00006af5u, 0x0000045cu, 0x00040071u, 0x00000011u, 0x00006b02u, 0x00006afeu, 0x00060041u, 0x00000692u, 0x00006b03u, 0x0000068fu, 0x00000220u, 0x00006b00u, 0x0003003eu, 0x00006b03u, 0x00006b02u, 0x0004003du, 0x00000006u, 0x00006b06u, 0x00006afcu, 0x000500c7u, 0x00000006u, 0x00006b07u, 0x00006b06u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00006b08u, 0x00006b07u, 0x00000464u, 0x00040071u, 0x0000000fu, 0x00006b09u, 0x00006b08u, 0x00060041u, 0x00000671u, 0x00006b0au, 0x0000067cu, 0x00000220u, 0x00006af5u, 0x0003003eu, 0x00006b0au, 0x00006b09u, 0x000300f7u, 0x00006b0bu, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006b0cu, 0x00006b0bu, 0x000200f8u, 0x00006b0cu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006b0fu, 0x00006b00u, 0x00000811u, 0x00060041u, 0x00000692u, 0x00006b10u, 0x0000068fu, 0x00000220u, 0x00006b0fu, 0x0003003eu, 0x00006b10u, 0x000007ecu, 0x000200f9u, 0x00006b0bu, 0x000200f8u, 0x00006b0bu, 0x000200f9u, 0x00006a81u, 0x000200f8u, 0x00006a84u, 0x000500c7u, 0x00000006u, 0x00006ac2u, 0x00006a62u, 0x00000683u, 0x0003003eu, 0x00006a3eu, 0x00006ac2u, 0x00050084u, 0x00000006u, 0x00006ac4u, 0x00006a59u, 0x000007bbu, 0x00050080u, 0x00000006u, 0x00006ac6u, 0x00006ac2u, 0x00006ac4u, 0x0003003eu, 0x00006a3eu, 0x00006ac6u, 0x0004003du, 0x00000010u, 0x00006ac7u, 0x00000675u, 0x00040071u, 0x000004f7u, 0x00006ac8u, 0x00006ac7u, 0x0003003eu, 0x00006a77u, 0x00006ac8u, 0x0004003du, 0x000004f7u, 0x00006ac9u, 0x00006a77u, 0x0008004fu, 0x0000030cu, 0x00006acau, 0x00006ac9u, 0x00006ac9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000030cu, 0x00006accu, 0x00006acau, 0x0000f399u, 0x0004003du, 0x000004f7u, 0x00006acdu, 0x00006a77u, 0x0009004fu, 0x000004f7u, 0x00006aceu, 0x00006acdu, 0x00006accu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00006a77u, 0x00006aceu, 0x00050041u, 0x00000007u, 0x00006acfu, 0x00006a77u, 0x00000464u, 0x0004003du, 0x00000006u, 0x00006ad0u, 0x00006acfu, 0x000500c2u, 0x00000006u, 0x00006ad1u, 0x00006ad0u, 0x00000737u, 0x0003003eu, 0x00006a78u, 0x00006ad1u, 0x00050041u, 0x00000007u, 0x00006ad2u, 0x00006a77u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006ad3u, 0x00006ad2u, 0x000500c4u, 0x00000006u, 0x00006ad4u, 0x00006ad3u, 0x00000314u, 0x00050041u, 0x00000007u, 0x00006ad5u, 0x00006a77u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006ad6u, 0x00006ad5u, 0x000500c4u, 0x00000006u, 0x00006ad7u, 0x00006ad6u, 0x00000464u, 0x000500c5u, 0x00000006u, 0x00006ad8u, 0x00006ad4u, 0x00006ad7u, 0x00050041u, 0x00000007u, 0x00006ad9u, 0x00006a77u, 0x00000386u, 0x0004003du, 0x00000006u, 0x00006adau, 0x00006ad9u, 0x000500c2u, 0x00000006u, 0x00006adbu, 0x00006adau, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00006adcu, 0x00006ad8u, 0x00006adbu, 0x000500c2u, 0x00000006u, 0x00006adeu, 0x00006ad1u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00006adfu, 0x00006adcu, 0x00006adeu, 0x0003003eu, 0x00006a79u, 0x00006adfu, 0x000500c6u, 0x00000006u, 0x00006ae1u, 0x00006ac6u, 0x0000045cu, 0x00040071u, 0x00000011u, 0x00006ae3u, 0x00006adfu, 0x00060041u, 0x00000692u, 0x00006ae4u, 0x0000068fu, 0x00000220u, 0x00006ae1u, 0x0003003eu, 0x00006ae4u, 0x00006ae3u, 0x000500c7u, 0x00000006u, 0x00006ae7u, 0x00006ad1u, 0x00000464u, 0x00040071u, 0x0000000fu, 0x00006ae8u, 0x00006ae7u, 0x00060041u, 0x00000671u, 0x00006ae9u, 0x0000067cu, 0x00000220u, 0x00006ac6u, 0x0003003eu, 0x00006ae9u, 0x00006ae8u, 0x000300f7u, 0x00006aeau, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006aebu, 0x00006aeau, 0x000200f8u, 0x00006aebu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006aeeu, 0x00006ae1u, 0x000007eau, 0x00060041u, 0x00000692u, 0x00006aefu, 0x0000068fu, 0x00000220u, 0x00006aeeu, 0x0003003eu, 0x00006aefu, 0x000007ecu, 0x000200f9u, 0x00006aeau, 0x000200f8u, 0x00006aeau, 0x000200f9u, 0x00006a81u, 0x000200f8u, 0x00006a83u, 0x000500c7u, 0x00000006u, 0x00006aa1u, 0x00006a62u, 0x00000663u, 0x0003003eu, 0x00006a3eu, 0x00006aa1u, 0x00050084u, 0x00000006u, 0x00006aa3u, 0x00006a59u, 0x00000662u, 0x00050080u, 0x00000006u, 0x00006aa5u, 0x00006aa1u, 0x00006aa3u, 0x0003003eu, 0x00006a3eu, 0x00006aa5u, 0x000500c6u, 0x00000006u, 0x00006aa7u, 0x00006aa5u, 0x00000464u, 0x00050041u, 0x000006e9u, 0x00006aa8u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00006aa9u, 0x00006aa8u, 0x00060041u, 0x00000671u, 0x00006aaau, 0x0000066eu, 0x00000220u, 0x00006aa7u, 0x0003003eu, 0x00006aaau, 0x00006aa9u, 0x000500c7u, 0x00000006u, 0x00006aacu, 0x00006aa5u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00006aadu, 0x00006aacu, 0x0000032du, 0x000300f7u, 0x00006aaeu, 0x00000000u, 0x000400fau, 0x00006aadu, 0x00006aafu, 0x00006aaeu, 0x000200f8u, 0x00006aafu, 0x000500c2u, 0x00000006u, 0x00006ab1u, 0x00006aa5u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00006ab3u, 0x00006aa8u, 0x00040071u, 0x00000006u, 0x00006ab4u, 0x00006ab3u, 0x0004007cu, 0x00000008u, 0x00006ab5u, 0x00006ab4u, 0x000500c7u, 0x00000008u, 0x00006ab6u, 0x00006ab5u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00006ab7u, 0x00006ab6u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00006ab8u, 0x00006ab7u, 0x0004007cu, 0x0000000fu, 0x00006ab9u, 0x00006ab8u, 0x00060041u, 0x00000671u, 0x00006abau, 0x0000067cu, 0x00000220u, 0x00006ab1u, 0x0003003eu, 0x00006abau, 0x00006ab9u, 0x000200f9u, 0x00006aaeu, 0x000200f8u, 0x00006aaeu, 0x000300f7u, 0x00006abbu, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006abcu, 0x00006abbu, 0x000200f8u, 0x00006abcu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006abfu, 0x00006aa7u, 0x00000662u, 0x00060041u, 0x00000671u, 0x00006ac0u, 0x0000066eu, 0x00000220u, 0x00006abfu, 0x0003003eu, 0x00006ac0u, 0x0000046fu, 0x000200f9u, 0x00006abbu, 0x000200f8u, 0x00006abbu, 0x000200f9u, 0x00006a81u, 0x000200f8u, 0x00006a82u, 0x000500c7u, 0x00000006u, 0x00006a88u, 0x00006a62u, 0x00000663u, 0x0003003eu, 0x00006a3eu, 0x00006a88u, 0x00050084u, 0x00000006u, 0x00006a8au, 0x00006a59u, 0x00000662u, 0x00050080u, 0x00000006u, 0x00006a8cu, 0x00006a88u, 0x00006a8au, 0x0003003eu, 0x00006a3eu, 0x00006a8cu, 0x000500c6u, 0x00000006u, 0x00006a8eu, 0x00006a8cu, 0x00000464u, 0x00060041u, 0x00000671u, 0x00006a8fu, 0x0000066eu, 0x00000220u, 0x00006a8eu, 0x0003003eu, 0x00006a8fu, 0x00000388u, 0x000500c7u, 0x00000006u, 0x00006a91u, 0x00006a8cu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00006a92u, 0x00006a91u, 0x0000032du, 0x000300f7u, 0x00006a93u, 0x00000000u, 0x000400fau, 0x00006a92u, 0x00006a94u, 0x00006a93u, 0x000200f8u, 0x00006a94u, 0x000500c2u, 0x00000006u, 0x00006a96u, 0x00006a8cu, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00006a97u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00006a98u, 0x00006a97u, 0x00060041u, 0x00000671u, 0x00006a99u, 0x0000067cu, 0x00000220u, 0x00006a96u, 0x0003003eu, 0x00006a99u, 0x00006a98u, 0x000200f9u, 0x00006a93u, 0x000200f8u, 0x00006a93u, 0x000300f7u, 0x00006a9au, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006a9bu, 0x00006a9au, 0x000200f8u, 0x00006a9bu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006a9eu, 0x00006a8eu, 0x00000662u, 0x00060041u, 0x00000671u, 0x00006a9fu, 0x0000066eu, 0x00000220u, 0x00006a9eu, 0x0003003eu, 0x00006a9fu, 0x0000046fu, 0x000200f9u, 0x00006a9au, 0x000200f8u, 0x00006a9au, 0x000200f9u, 0x00006a81u, 0x000200f8u, 0x00006a81u, 0x000200f9u, 0x00006a7fu, 0x000200f8u, 0x00006a7fu, 0x0004003du, 0x00000006u, 0x00006a69u, 0x00006a5cu, 0x00050084u, 0x00000006u, 0x00006a6au, 0x00006a4du, 0x00006a69u, 0x00050080u, 0x00000006u, 0x00006a6bu, 0x00001f70u, 0x00006a6au, 0x0004003du, 0x00000006u, 0x00006a6du, 0x00006a60u, 0x00050080u, 0x00000006u, 0x00006a6eu, 0x00006a6bu, 0x00006a6du, 0x0003003eu, 0x00006a3du, 0x00006a6eu, 0x0003003eu, 0x00006a40u, 0x00006a6eu, 0x0003003eu, 0x00006a41u, 0x00006a59u, 0x000300f7u, 0x00006b47u, 0x00000000u, 0x000400fau, 0x00000853u, 0x00006b48u, 0x00006b47u, 0x000200f8u, 0x00006b48u, 0x0004003du, 0x00000069u, 0x00006b49u, 0x00000856u, 0x000300f7u, 0x00006b4au, 0x00000000u, 0x000400fau, 0x00006b49u, 0x00006b4bu, 0x00006b4au, 0x000200f8u, 0x00006b4bu, 0x000500c7u, 0x00000006u, 0x00006b4du, 0x00006a6eu, 0x00000683u, 0x0003003eu, 0x00006a40u, 0x00006b4du, 0x00050084u, 0x00000006u, 0x00006b4fu, 0x00006a59u, 0x0000085du, 0x00050080u, 0x00000006u, 0x00006b51u, 0x00006b4du, 0x00006b4fu, 0x0003003eu, 0x00006a40u, 0x00006b51u, 0x000500c6u, 0x00000006u, 0x00006b53u, 0x00006b51u, 0x0000045cu, 0x0004003du, 0x00000011u, 0x00006b54u, 0x00000708u, 0x000500c4u, 0x00000011u, 0x00006b55u, 0x00006b54u, 0x000005f2u, 0x0004003du, 0x0000000fu, 0x00006b56u, 0x000006eau, 0x000500c2u, 0x0000000fu, 0x00006b57u, 0x00006b56u, 0x000005f2u, 0x00040071u, 0x00000011u, 0x00006b58u, 0x00006b57u, 0x000500c5u, 0x00000011u, 0x00006b59u, 0x00006b55u, 0x00006b58u, 0x00060041u, 0x00000692u, 0x00006b5au, 0x0000068fu, 0x00000220u, 0x00006b53u, 0x0003003eu, 0x00006b5au, 0x00006b59u, 0x0004003du, 0x0000000fu, 0x00006b5cu, 0x000006eau, 0x00040071u, 0x00000011u, 0x00006b5du, 0x00006b5cu, 0x000500c7u, 0x00000011u, 0x00006b5eu, 0x00006b5du, 0x000005f7u, 0x00040071u, 0x0000000fu, 0x00006b5fu, 0x00006b5eu, 0x00060041u, 0x00000671u, 0x00006b60u, 0x0000067cu, 0x00000220u, 0x00006b51u, 0x0003003eu, 0x00006b60u, 0x00006b5fu, 0x000300f7u, 0x00006b61u, 0x00000000u, 0x000400fau, 0x0000078du, 0x00006b62u, 0x00006b61u, 0x000200f8u, 0x00006b62u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00006b65u, 0x00006b53u, 0x00000874u, 0x00060041u, 0x00000692u, 0x00006b66u, 0x0000068fu, 0x00000220u, 0x00006b65u, 0x0003003eu, 0x00006b66u, 0x000007ecu, 0x000200f9u, 0x00006b61u, 0x000200f8u, 0x00006b61u, 0x000200f9u, 0x00006b4au, 0x000200f8u, 0x00006b4au, 0x000200f9u, 0x00006b47u, 0x000200f8u, 0x00006b47u, 0x000300f7u, 0x00006a72u, 0x00000000u, 0x000400fau, 0x00000929u, 0x00006a73u, 0x00006a72u, 0x000200f8u, 0x00006a73u, 0x0004003du, 0x000000b0u, 0x00006a74u, 0x00001fd6u, 0x0003003eu, 0x00006a42u, 0x00006a74u, 0x0003003eu, 0x00006a43u, 0x00006a4du, 0x00050041u, 0x00000007u, 0x00006b6cu, 0x00006a42u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006b6du, 0x00006b6cu, 0x000500c2u, 0x00000006u, 0x00006b6eu, 0x00006b6du, 0x00000386u, 0x00050080u, 0x00000006u, 0x00006b70u, 0x00006a4du, 0x00000464u, 0x000500c2u, 0x00000006u, 0x00006b71u, 0x00006b70u, 0x00000386u, 0x00050084u, 0x00000006u, 0x00006b72u, 0x00006b6eu, 0x00006b71u, 0x00050041u, 0x00000007u, 0x00006b73u, 0x00006a42u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006b74u, 0x00006b73u, 0x000500c2u, 0x00000006u, 0x00006b75u, 0x00006b74u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00006b76u, 0x00006b72u, 0x00006b75u, 0x0003003eu, 0x00006b67u, 0x00006b76u, 0x0004003du, 0x000000b0u, 0x00006b77u, 0x00006a42u, 0x000500c7u, 0x000000b0u, 0x00006b79u, 0x00006b77u, 0x0000f39au, 0x0003003eu, 0x00006b68u, 0x00006b79u, 0x0004003du, 0x00000069u, 0x00006b7au, 0x00000755u, 0x000600a9u, 0x00000006u, 0x00006b7bu, 0x00006b7au, 0x0000045cu, 0x0000032du, 0x0004003du, 0x00000069u, 0x00006b7cu, 0x00000856u, 0x000600a9u, 0x00000006u, 0x00006b7du, 0x00006b7cu, 0x0000045cu, 0x0000032du, 0x00050084u, 0x00000006u, 0x00006b7eu, 0x00000386u, 0x00006b7du, 0x00050080u, 0x00000006u, 0x00006b7fu, 0x00006b7bu, 0x00006b7eu, 0x0003003eu, 0x00006b69u, 0x00006b7fu, 0x00050041u, 0x00000007u, 0x00006b80u, 0x00006b68u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00006b81u, 0x00006b80u, 0x00050041u, 0x00000007u, 0x00006b82u, 0x00006b68u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00006b83u, 0x00006b82u, 0x00050084u, 0x00000006u, 0x00006b84u, 0x00006b83u, 0x00000704u, 0x00050080u, 0x00000006u, 0x00006b85u, 0x00006b81u, 0x00006b84u, 0x00050084u, 0x00000006u, 0x00006b86u, 0x00000386u, 0x00006b85u, 0x000500c4u, 0x00000006u, 0x00006b88u, 0x00006b7fu, 0x00006b86u, 0x0003003eu, 0x00006b69u, 0x00006b88u, 0x0003003eu, 0x00006b6au, 0x00000559u, 0x000200f9u, 0x00006b89u, 0x000200f8u, 0x00006b89u, 0x000700f5u, 0x00000069u, 0x00007f00u, 0x00000559u, 0x00006a73u, 0x0000f3d9u, 0x00006b8bu, 0x000400f6u, 0x00006b8au, 0x00006b8bu, 0x00000000u, 0x000200f9u, 0x00006b8cu, 0x000200f8u, 0x00006b8cu, 0x00050152u, 0x00000006u, 0x00006b8eu, 0x00000464u, 0x00006b76u, 0x000500aau, 0x00000069u, 0x00006b90u, 0x00006b8eu, 0x00006b76u, 0x000300f7u, 0x00006b91u, 0x00000000u, 0x000400fau, 0x00006b90u, 0x00006b92u, 0x00006b91u, 0x000200f8u, 0x00006b92u, 0x00060168u, 0x00000006u, 0x00006b94u, 0x00000464u, 0x00000000u, 0x00006b88u, 0x0003003eu, 0x00006b6bu, 0x00006b94u, 0x0004014du, 0x00000069u, 0x00006b95u, 0x00000464u, 0x000300f7u, 0x00006b96u, 0x00000000u, 0x000400fau, 0x00006b95u, 0x00006b97u, 0x00006b96u, 0x000200f8u, 0x00006b97u, 0x00050080u, 0x00000006u, 0x00006b99u, 0x000008e8u, 0x00006b76u, 0x00060041u, 0x000006d9u, 0x00006b9au, 0x000006d7u, 0x00000220u, 0x00006b99u, 0x000700f1u, 0x00000006u, 0x00006b9cu, 0x00006b9au, 0x0000045cu, 0x0000032du, 0x00006b94u, 0x000200f9u, 0x00006b96u, 0x000200f8u, 0x00006b96u, 0x0003003eu, 0x00006b6au, 0x00000536u, 0x000200f9u, 0x00006b91u, 0x000200f8u, 0x00006b91u, 0x000600a9u, 0x00000069u, 0x0000f3d9u, 0x00006b90u, 0x00000536u, 0x00007f00u, 0x000200f9u, 0x00006b8bu, 0x000200f8u, 0x00006b8bu, 0x000400fau, 0x0000f3d9u, 0x00006b89u, 0x00006b8au, 0x000200f8u, 0x00006b8au, 0x000200f9u, 0x00006a72u, 0x000200f8u, 0x00006a72u, 0x000200f9u, 0x00006a4au, 0x000200f8u, 0x00006a4au, 0x0003003eu, 0x00001ffau, 0x00000559u, 0x000200f9u, 0x00001ff8u, 0x000200f8u, 0x00001ff8u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x000000dfu, 0x00007d10u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d0fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d0eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d0du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d0cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d0bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d0au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d09u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000221u, 0x0000000cu, 0x00060041u, 0x00000222u, 0x00000223u, 0x0000021fu, 0x00000220u, 0x00000221u, 0x0004003du, 0x0000021bu, 0x00000224u, 0x00000223u, 0x00050051u, 0x00000009u, 0x00000227u, 0x00000224u, 0x00000000u, 0x0003003eu, 0x00007d09u, 0x00000227u, 0x00050051u, 0x00000009u, 0x00000229u, 0x00000224u, 0x00000001u, 0x0003003eu, 0x00007d0au, 0x00000229u, 0x00050051u, 0x00000009u, 0x0000022cu, 0x00000224u, 0x00000002u, 0x0003003eu, 0x00007d0bu, 0x0000022cu, 0x00050051u, 0x00000009u, 0x0000022fu, 0x00000224u, 0x00000003u, 0x0003003eu, 0x00007d0cu, 0x0000022fu, 0x00050051u, 0x00000009u, 0x00000232u, 0x00000224u, 0x00000004u, 0x0003003eu, 0x00007d0du, 0x00000232u, 0x00050051u, 0x00000009u, 0x00000235u, 0x00000224u, 0x00000005u, 0x0003003eu, 0x00007d0eu, 0x00000235u, 0x00050051u, 0x00000009u, 0x00000238u, 0x00000224u, 0x00000006u, 0x0003003eu, 0x00007d0fu, 0x00000238u, 0x00050051u, 0x00000009u, 0x0000023bu, 0x00000224u, 0x00000007u, 0x0003003eu, 0x00007d10u, 0x0000023bu, 0x000b0050u, 0x0000000au, 0x00007d19u, 0x00000227u, 0x00000229u, 0x0000022cu, 0x0000022fu, 0x00000232u, 0x00000235u, 0x00000238u, 0x0000023bu, 0x000200feu, 0x00007d19u, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003bu, 0x000000e4u, 0x00007d28u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d27u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d26u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007d25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d24u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d23u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d22u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d21u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d20u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d1au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000246u, 0x00000016u, 0x00060041u, 0x00000247u, 0x00000248u, 0x00000245u, 0x00000220u, 0x00000246u, 0x0004003du, 0x00000241u, 0x00000249u, 0x00000248u, 0x00050051u, 0x00000010u, 0x0000024cu, 0x00000249u, 0x00000000u, 0x0003003eu, 0x00007d1au, 0x0000024cu, 0x00050051u, 0x00000010u, 0x0000024eu, 0x00000249u, 0x00000001u, 0x0003003eu, 0x00007d1bu, 0x0000024eu, 0x00050051u, 0x00000010u, 0x00000250u, 0x00000249u, 0x00000002u, 0x0003003eu, 0x00007d1cu, 0x00000250u, 0x00050051u, 0x00000010u, 0x00000252u, 0x00000249u, 0x00000003u, 0x0003003eu, 0x00007d1du, 0x00000252u, 0x00050051u, 0x00000010u, 0x00000254u, 0x00000249u, 0x00000004u, 0x0003003eu, 0x00007d1eu, 0x00000254u, 0x00050051u, 0x00000010u, 0x00000256u, 0x00000249u, 0x00000005u, 0x0003003eu, 0x00007d1fu, 0x00000256u, 0x00050051u, 0x00000010u, 0x00000258u, 0x00000249u, 0x00000006u, 0x0003003eu, 0x00007d20u, 0x00000258u, 0x00050051u, 0x00000010u, 0x0000025au, 0x00000249u, 0x00000007u, 0x0003003eu, 0x00007d21u, 0x0000025au, 0x00050051u, 0x00000010u, 0x0000025cu, 0x00000249u, 0x00000008u, 0x0003003eu, 0x00007d22u, 0x0000025cu, 0x00050051u, 0x00000010u, 0x0000025fu, 0x00000249u, 0x00000009u, 0x0003003eu, 0x00007d23u, 0x0000025fu, 0x00050051u, 0x00000006u, 0x00000262u, 0x00000249u, 0x0000000au, 0x0003003eu, 0x00007d24u, 0x00000262u, 0x00050051u, 0x00000011u, 0x00000265u, 0x00000249u, 0x0000000bu, 0x0003003eu, 0x00007d25u, 0x00000265u, 0x00050051u, 0x0000000fu, 0x00000268u, 0x00000249u, 0x0000000cu, 0x0003003eu, 0x00007d26u, 0x00000268u, 0x00050051u, 0x0000000fu, 0x0000026bu, 0x00000249u, 0x0000000du, 0x0003003eu, 0x00007d27u, 0x0000026bu, 0x00050051u, 0x00000013u, 0x0000026eu, 0x00000249u, 0x0000000eu, 0x0003003eu, 0x00007d28u, 0x0000026eu, 0x00120050u, 0x00000014u, 0x00007d38u, 0x0000024cu, 0x0000024eu, 0x00000250u, 0x00000252u, 0x00000254u, 0x00000256u, 0x00000258u, 0x0000025au, 0x0000025cu, 0x0000025fu, 0x00000262u, 0x00000265u, 0x00000268u, 0x0000026bu, 0x0000026eu, 0x000200feu, 0x00007d38u, 0x00010038u, 0x00050036u, 0x00000019u, 0x0000001cu, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000007u, 0x0000001bu, 0x000200f8u, 0x0000001du, 0x0004003bu, 0x00000046u, 0x00007d40u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d3fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d3du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d3cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d3bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d3au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d39u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000279u, 0x0000001bu, 0x00060041u, 0x0000027au, 0x0000027bu, 0x00000278u, 0x00000220u, 0x00000279u, 0x0004003du, 0x00000274u, 0x0000027cu, 0x0000027bu, 0x00050051u, 0x00000010u, 0x0000027fu, 0x0000027cu, 0x00000000u, 0x0003003eu, 0x00007d39u, 0x0000027fu, 0x00050051u, 0x00000010u, 0x00000281u, 0x0000027cu, 0x00000001u, 0x0003003eu, 0x00007d3au, 0x00000281u, 0x00050051u, 0x00000010u, 0x00000283u, 0x0000027cu, 0x00000002u, 0x0003003eu, 0x00007d3bu, 0x00000283u, 0x00050051u, 0x00000010u, 0x00000285u, 0x0000027cu, 0x00000003u, 0x0003003eu, 0x00007d3cu, 0x00000285u, 0x00050051u, 0x00000006u, 0x00000287u, 0x0000027cu, 0x00000004u, 0x0003003eu, 0x00007d3du, 0x00000287u, 0x00050051u, 0x00000008u, 0x00000289u, 0x0000027cu, 0x00000005u, 0x0003003eu, 0x00007d3eu, 0x00000289u, 0x00050051u, 0x00000008u, 0x0000028bu, 0x0000027cu, 0x00000006u, 0x0003003eu, 0x00007d3fu, 0x0000028bu, 0x00050051u, 0x00000008u, 0x0000028du, 0x0000027cu, 0x00000007u, 0x0003003eu, 0x00007d40u, 0x0000028du, 0x000b0050u, 0x00000019u, 0x00007d49u, 0x0000027fu, 0x00000281u, 0x00000283u, 0x00000285u, 0x00000287u, 0x00000289u, 0x0000028bu, 0x0000028du, 0x000200feu, 0x00007d49u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000021u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003bu, 0x0000007bu, 0x00007d50u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d4fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d4eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d4cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d4bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d4au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000297u, 0x00000020u, 0x00060041u, 0x00000298u, 0x00000299u, 0x00000296u, 0x00000220u, 0x00000297u, 0x0004003du, 0x00000292u, 0x0000029au, 0x00000299u, 0x00050051u, 0x00000010u, 0x0000029du, 0x0000029au, 0x00000000u, 0x0003003eu, 0x00007d4au, 0x0000029du, 0x00050051u, 0x00000010u, 0x0000029fu, 0x0000029au, 0x00000001u, 0x0003003eu, 0x00007d4bu, 0x0000029fu, 0x00050051u, 0x00000006u, 0x000002a1u, 0x0000029au, 0x00000002u, 0x0003003eu, 0x00007d4cu, 0x000002a1u, 0x00050051u, 0x0000000fu, 0x000002a3u, 0x0000029au, 0x00000003u, 0x0003003eu, 0x00007d4du, 0x000002a3u, 0x00050051u, 0x0000000fu, 0x000002a5u, 0x0000029au, 0x00000004u, 0x0003003eu, 0x00007d4eu, 0x000002a5u, 0x00050051u, 0x0000000fu, 0x000002a7u, 0x0000029au, 0x00000005u, 0x0003003eu, 0x00007d4fu, 0x000002a7u, 0x00050051u, 0x0000000fu, 0x000002a9u, 0x0000029au, 0x00000006u, 0x0003003eu, 0x00007d50u, 0x000002a9u, 0x000a0050u, 0x0000001eu, 0x00007d58u, 0x0000029du, 0x0000029fu, 0x000002a1u, 0x000002a3u, 0x000002a5u, 0x000002a7u, 0x000002a9u, 0x000200feu, 0x00007d58u, 0x00010038u, 0x00050036u, 0x00000023u, 0x00000026u, 0x00000000u, 0x00000024u, 0x00030037u, 0x00000007u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x0000007bu, 0x00007d66u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d65u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d64u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d63u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d62u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d61u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d60u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d59u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002b3u, 0x00000025u, 0x00060041u, 0x000002b4u, 0x000002b5u, 0x000002b2u, 0x00000220u, 0x000002b3u, 0x0004003du, 0x000002aeu, 0x000002b6u, 0x000002b5u, 0x00050051u, 0x00000006u, 0x000002b8u, 0x000002b6u, 0x00000000u, 0x0003003eu, 0x00007d59u, 0x000002b8u, 0x00050051u, 0x00000006u, 0x000002bau, 0x000002b6u, 0x00000001u, 0x0003003eu, 0x00007d5au, 0x000002bau, 0x00050051u, 0x00000006u, 0x000002bcu, 0x000002b6u, 0x00000002u, 0x0003003eu, 0x00007d5bu, 0x000002bcu, 0x00050051u, 0x00000006u, 0x000002beu, 0x000002b6u, 0x00000003u, 0x0003003eu, 0x00007d5cu, 0x000002beu, 0x00050051u, 0x00000006u, 0x000002c0u, 0x000002b6u, 0x00000004u, 0x0003003eu, 0x00007d5du, 0x000002c0u, 0x00050051u, 0x00000006u, 0x000002c2u, 0x000002b6u, 0x00000005u, 0x0003003eu, 0x00007d5eu, 0x000002c2u, 0x00050051u, 0x0000000fu, 0x000002c4u, 0x000002b6u, 0x00000006u, 0x0003003eu, 0x00007d5fu, 0x000002c4u, 0x00050051u, 0x0000000fu, 0x000002c6u, 0x000002b6u, 0x00000007u, 0x0003003eu, 0x00007d60u, 0x000002c6u, 0x00050051u, 0x0000000fu, 0x000002c8u, 0x000002b6u, 0x00000008u, 0x0003003eu, 0x00007d61u, 0x000002c8u, 0x00050051u, 0x0000000fu, 0x000002cau, 0x000002b6u, 0x00000009u, 0x0003003eu, 0x00007d62u, 0x000002cau, 0x00050051u, 0x0000000fu, 0x000002ccu, 0x000002b6u, 0x0000000au, 0x0003003eu, 0x00007d63u, 0x000002ccu, 0x00050051u, 0x0000000fu, 0x000002ceu, 0x000002b6u, 0x0000000bu, 0x0003003eu, 0x00007d64u, 0x000002ceu, 0x00050051u, 0x0000000fu, 0x000002d0u, 0x000002b6u, 0x0000000cu, 0x0003003eu, 0x00007d65u, 0x000002d0u, 0x00050051u, 0x0000000fu, 0x000002d2u, 0x000002b6u, 0x0000000du, 0x0003003eu, 0x00007d66u, 0x000002d2u, 0x00110050u, 0x00000023u, 0x00007d75u, 0x000002b8u, 0x000002bau, 0x000002bcu, 0x000002beu, 0x000002c0u, 0x000002c2u, 0x000002c4u, 0x000002c6u, 0x000002c8u, 0x000002cau, 0x000002ccu, 0x000002ceu, 0x000002d0u, 0x000002d2u, 0x000200feu, 0x00007d75u, 0x00010038u, 0x00050036u, 0x00000029u, 0x0000002cu, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x0000002bu, 0x000200f8u, 0x0000002du, 0x0004003bu, 0x00000056u, 0x00007d7eu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007d7du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d7cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d7bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d7au, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007d79u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007d78u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d77u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007d76u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002dcu, 0x0000002bu, 0x00060041u, 0x000002ddu, 0x000002deu, 0x000002dbu, 0x00000220u, 0x000002dcu, 0x0004003du, 0x000002d7u, 0x000002dfu, 0x000002deu, 0x00050051u, 0x00000009u, 0x000002e1u, 0x000002dfu, 0x00000000u, 0x0003003eu, 0x00007d76u, 0x000002e1u, 0x00050051u, 0x00000009u, 0x000002e3u, 0x000002dfu, 0x00000001u, 0x0003003eu, 0x00007d77u, 0x000002e3u, 0x00050051u, 0x00000028u, 0x000002e5u, 0x000002dfu, 0x00000002u, 0x0003003eu, 0x00007d78u, 0x000002e5u, 0x00050051u, 0x00000028u, 0x000002e7u, 0x000002dfu, 0x00000003u, 0x0003003eu, 0x00007d79u, 0x000002e7u, 0x00050051u, 0x00000008u, 0x000002e9u, 0x000002dfu, 0x00000004u, 0x0003003eu, 0x00007d7au, 0x000002e9u, 0x00050051u, 0x00000008u, 0x000002ebu, 0x000002dfu, 0x00000005u, 0x0003003eu, 0x00007d7bu, 0x000002ebu, 0x00050051u, 0x00000008u, 0x000002edu, 0x000002dfu, 0x00000006u, 0x0003003eu, 0x00007d7cu, 0x000002edu, 0x00050051u, 0x00000012u, 0x000002efu, 0x000002dfu, 0x00000007u, 0x0003003eu, 0x00007d7du, 0x000002efu, 0x00050051u, 0x00000011u, 0x000002f1u, 0x000002dfu, 0x00000008u, 0x0003003eu, 0x00007d7eu, 0x000002f1u, 0x000c0050u, 0x00000029u, 0x00007d88u, 0x000002e1u, 0x000002e3u, 0x000002e5u, 0x000002e7u, 0x000002e9u, 0x000002ebu, 0x000002edu, 0x000002efu, 0x000002f1u, 0x000200feu, 0x00007d88u, 0x00010038u, 0x00050036u, 0x0000002eu, 0x00000031u, 0x00000000u, 0x0000002fu, 0x00030037u, 0x00000007u, 0x00000030u, 0x000200f8u, 0x00000032u, 0x0004003bu, 0x00000046u, 0x00007d8cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d8bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d8au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007d89u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002fbu, 0x00000030u, 0x00060041u, 0x000002fcu, 0x000002fdu, 0x000002fau, 0x00000220u, 0x000002fbu, 0x0004003du, 0x000002f6u, 0x000002feu, 0x000002fdu, 0x00050051u, 0x00000008u, 0x00000301u, 0x000002feu, 0x00000000u, 0x0003003eu, 0x00007d89u, 0x00000301u, 0x00050051u, 0x00000008u, 0x00000303u, 0x000002feu, 0x00000001u, 0x0003003eu, 0x00007d8au, 0x00000303u, 0x00050051u, 0x00000008u, 0x00000305u, 0x000002feu, 0x00000002u, 0x0003003eu, 0x00007d8bu, 0x00000305u, 0x00050051u, 0x00000008u, 0x00000307u, 0x000002feu, 0x00000003u, 0x0003003eu, 0x00007d8cu, 0x00000307u, 0x00070050u, 0x0000002eu, 0x00007d91u, 0x00000301u, 0x00000303u, 0x00000305u, 0x00000307u, 0x000200feu, 0x00007d91u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000037u, 0x00000000u, 0x00000033u, 0x00030037u, 0x00000007u, 0x00000034u, 0x00030037u, 0x00000007u, 0x00000035u, 0x00030037u, 0x00000007u, 0x00000036u, 0x000200f8u, 0x00000038u, 0x0004003bu, 0x0000030du, 0x0000030eu, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000030fu, 0x00000034u, 0x0004003du, 0x00000006u, 0x00000310u, 0x00000035u, 0x0004003du, 0x00000006u, 0x00000311u, 0x00000036u, 0x00060050u, 0x0000030cu, 0x00000312u, 0x0000030fu, 0x00000310u, 0x00000311u, 0x0003003eu, 0x0000030eu, 0x00000312u, 0x0004003du, 0x0000030cu, 0x00000313u, 0x0000030eu, 0x000500c2u, 0x0000030cu, 0x00000316u, 0x00000313u, 0x0000f39bu, 0x0004003du, 0x0000030cu, 0x00000317u, 0x0000030eu, 0x0008004fu, 0x0000030cu, 0x00000318u, 0x00000317u, 0x00000317u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00000319u, 0x00000316u, 0x00000318u, 0x00050084u, 0x0000030cu, 0x0000031cu, 0x00000319u, 0x0000f39cu, 0x0003003eu, 0x0000030eu, 0x0000031cu, 0x0004003du, 0x0000030cu, 0x0000031du, 0x0000030eu, 0x000500c2u, 0x0000030cu, 0x0000031fu, 0x0000031du, 0x0000f39bu, 0x0004003du, 0x0000030cu, 0x00000320u, 0x0000030eu, 0x0008004fu, 0x0000030cu, 0x00000321u, 0x00000320u, 0x00000320u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x00000322u, 0x0000031fu, 0x00000321u, 0x00050084u, 0x0000030cu, 0x00000324u, 0x00000322u, 0x0000f39cu, 0x0003003eu, 0x0000030eu, 0x00000324u, 0x0004003du, 0x0000030cu, 0x00000325u, 0x0000030eu, 0x000500c2u, 0x0000030cu, 0x00000327u, 0x00000325u, 0x0000f39bu, 0x0004003du, 0x0000030cu, 0x00000328u, 0x0000030eu, 0x0008004fu, 0x0000030cu, 0x00000329u, 0x00000328u, 0x00000328u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000030cu, 0x0000032au, 0x00000327u, 0x00000329u, 0x00050084u, 0x0000030cu, 0x0000032cu, 0x0000032au, 0x0000f39cu, 0x0003003eu, 0x0000030eu, 0x0000032cu, 0x00050041u, 0x00000007u, 0x0000032eu, 0x0000030eu, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000032fu, 0x0000032eu, 0x000500c2u, 0x00000006u, 0x00000331u, 0x0000032fu, 0x00000330u, 0x00040071u, 0x00000011u, 0x00000332u, 0x00000331u, 0x0003003eu, 0x00000219u, 0x00000332u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000012u, 0x0000003au, 0x00000000u, 0x00000039u, 0x000200f8u, 0x0000003bu, 0x0004003du, 0x00000011u, 0x00000333u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00000335u, 0x00000333u, 0x00000334u, 0x000500c4u, 0x00000011u, 0x00000337u, 0x00000335u, 0x00000336u, 0x000500c5u, 0x00000011u, 0x00000339u, 0x00000337u, 0x00000338u, 0x0004007cu, 0x00000012u, 0x0000033au, 0x00000339u, 0x000200feu, 0x0000033au, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003du, 0x00000000u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003du, 0x00000011u, 0x0000033du, 0x00000219u, 0x000500c7u, 0x00000011u, 0x0000033eu, 0x0000033du, 0x00000334u, 0x00040071u, 0x00000006u, 0x0000033fu, 0x0000033eu, 0x0004007cu, 0x00000008u, 0x00000340u, 0x0000033fu, 0x000200feu, 0x00000340u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003fu, 0x00000000u, 0x0000003cu, 0x000200f8u, 0x00000040u, 0x0004003du, 0x00000011u, 0x00000343u, 0x00000219u, 0x000500c7u, 0x00000011u, 0x00000345u, 0x00000343u, 0x00000344u, 0x00040071u, 0x00000006u, 0x00000346u, 0x00000345u, 0x0004007cu, 0x00000008u, 0x00000347u, 0x00000346u, 0x000200feu, 0x00000347u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000042u, 0x00000000u, 0x00000041u, 0x000200f8u, 0x00000043u, 0x0004003du, 0x00000011u, 0x0000034au, 0x00000219u, 0x000500c7u, 0x00000011u, 0x0000034cu, 0x0000034au, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x0000034du, 0x0000034cu, 0x000200feu, 0x0000034du, 0x00010038u, 0x00050036u, 0x00000047u, 0x0000004bu, 0x00000000u, 0x00000048u, 0x00030037u, 0x00000045u, 0x00000049u, 0x00030037u, 0x00000046u, 0x0000004au, 0x000200f8u, 0x0000004cu, 0x0004003bu, 0x00000045u, 0x00000350u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000357u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000366u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x0000036fu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000351u, 0x0000004au, 0x00060050u, 0x00000044u, 0x00000352u, 0x00000351u, 0x00000351u, 0x00000351u, 0x000500c3u, 0x00000044u, 0x00000354u, 0x00000352u, 0x00000353u, 0x000500c7u, 0x00000044u, 0x00000356u, 0x00000354u, 0x0000f3b3u, 0x0003003eu, 0x00000350u, 0x00000356u, 0x0004003du, 0x00000044u, 0x00000358u, 0x00000049u, 0x000500c7u, 0x00000044u, 0x0000035bu, 0x00000358u, 0x0000f3b4u, 0x00050080u, 0x00000044u, 0x0000035du, 0x0000035bu, 0x0000f3b5u, 0x0004003du, 0x00000044u, 0x00000360u, 0x00000049u, 0x000500adu, 0x00000363u, 0x00000364u, 0x00000360u, 0x00000362u, 0x000600a9u, 0x00000044u, 0x00000365u, 0x00000364u, 0x0000035fu, 0x0000035du, 0x0003003eu, 0x00000357u, 0x00000365u, 0x0004003du, 0x00000044u, 0x00000368u, 0x00000049u, 0x000500c7u, 0x00000044u, 0x0000036au, 0x00000368u, 0x0000f3b3u, 0x00050082u, 0x00000044u, 0x0000036bu, 0x00000356u, 0x0000036au, 0x000500c3u, 0x00000044u, 0x0000036eu, 0x0000036bu, 0x0000f3b6u, 0x0003003eu, 0x00000366u, 0x0000036eu, 0x0004003du, 0x00000044u, 0x00000371u, 0x00000049u, 0x00050082u, 0x00000044u, 0x00000372u, 0x00000365u, 0x00000371u, 0x0003003eu, 0x0000036fu, 0x00000372u, 0x0004003du, 0x00000044u, 0x00000373u, 0x00000049u, 0x000500c7u, 0x00000044u, 0x00000376u, 0x00000372u, 0x0000036eu, 0x00050080u, 0x00000044u, 0x00000377u, 0x00000373u, 0x00000376u, 0x0003003eu, 0x00000357u, 0x00000377u, 0x000500c7u, 0x00000044u, 0x0000037au, 0x00000377u, 0x0000035fu, 0x00040072u, 0x0000037cu, 0x0000037du, 0x0000037au, 0x0004007cu, 0x00000047u, 0x0000037eu, 0x0000037du, 0x000200feu, 0x0000037eu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000054u, 0x00000000u, 0x0000004du, 0x00030037u, 0x00000046u, 0x0000004eu, 0x00030037u, 0x00000046u, 0x0000004fu, 0x00030037u, 0x00000046u, 0x00000050u, 0x00030037u, 0x00000046u, 0x00000051u, 0x00030037u, 0x00000046u, 0x00000052u, 0x00030037u, 0x00000046u, 0x00000053u, 0x000200f8u, 0x00000055u, 0x0004003bu, 0x0000039au, 0x0000039bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003b6u, 0x00000007u, 0x0004003bu, 0x0000039au, 0x000003c1u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000381u, 0x00000050u, 0x000500b1u, 0x00000069u, 0x00000382u, 0x00000381u, 0x0000022du, 0x000300f7u, 0x00000384u, 0x00000000u, 0x000400fau, 0x00000382u, 0x00000383u, 0x000003a2u, 0x000200f8u, 0x00000383u, 0x0004003du, 0x00000008u, 0x00000393u, 0x00000050u, 0x0004003du, 0x00000008u, 0x00000394u, 0x0000004fu, 0x000500c7u, 0x00000008u, 0x00000395u, 0x00000394u, 0x00000230u, 0x00050084u, 0x00000008u, 0x00000396u, 0x00000395u, 0x00000233u, 0x0004003du, 0x00000008u, 0x00000397u, 0x0000004eu, 0x000500c7u, 0x00000008u, 0x00000398u, 0x00000397u, 0x00000230u, 0x00050080u, 0x00000008u, 0x00000399u, 0x00000396u, 0x00000398u, 0x0003003eu, 0x0000039bu, 0x00000392u, 0x00060041u, 0x0000007bu, 0x0000039cu, 0x0000039bu, 0x00000393u, 0x00000399u, 0x0004003du, 0x0000000fu, 0x0000039du, 0x0000039cu, 0x00040071u, 0x00000006u, 0x0000039eu, 0x0000039du, 0x0004007cu, 0x00000008u, 0x0000039fu, 0x0000039eu, 0x00050084u, 0x00000008u, 0x000003a1u, 0x0000039fu, 0x000003a0u, 0x0003003eu, 0x00000052u, 0x000003a1u, 0x000200f9u, 0x00000384u, 0x000200f8u, 0x000003a2u, 0x0004003du, 0x00000008u, 0x000003a3u, 0x00000050u, 0x000500aau, 0x00000069u, 0x000003a4u, 0x000003a3u, 0x0000022du, 0x000300f7u, 0x000003a6u, 0x00000000u, 0x000400fau, 0x000003a4u, 0x000003a5u, 0x000003a8u, 0x000200f8u, 0x000003a5u, 0x00040039u, 0x00000008u, 0x000003a7u, 0x0000003fu, 0x0003003eu, 0x00000052u, 0x000003a7u, 0x000200f9u, 0x000003a6u, 0x000200f8u, 0x000003a8u, 0x0003003eu, 0x00000052u, 0x00000220u, 0x000200f9u, 0x000003a6u, 0x000200f8u, 0x000003a6u, 0x000200f9u, 0x00000384u, 0x000200f8u, 0x00000384u, 0x0004003du, 0x00000008u, 0x000003a9u, 0x00000051u, 0x000500aau, 0x00000069u, 0x000003aau, 0x000003a9u, 0x00000230u, 0x000300f7u, 0x000003acu, 0x00000000u, 0x000400fau, 0x000003aau, 0x000003abu, 0x000003adu, 0x000200f8u, 0x000003abu, 0x0003003eu, 0x00000053u, 0x00000220u, 0x000200f9u, 0x000003acu, 0x000200f8u, 0x000003adu, 0x0004003du, 0x00000008u, 0x000003aeu, 0x00000051u, 0x000500aau, 0x00000069u, 0x000003afu, 0x000003aeu, 0x0000022du, 0x000300f7u, 0x000003b1u, 0x00000000u, 0x000400fau, 0x000003afu, 0x000003b0u, 0x000003b3u, 0x000200f8u, 0x000003b0u, 0x00040039u, 0x00000008u, 0x000003b2u, 0x0000003du, 0x0003003eu, 0x00000053u, 0x000003b2u, 0x000200f9u, 0x000003b1u, 0x000200f8u, 0x000003b3u, 0x0004003du, 0x00000008u, 0x000003b4u, 0x00000050u, 0x000500afu, 0x00000069u, 0x000003b5u, 0x000003b4u, 0x0000022du, 0x000300f7u, 0x000003b8u, 0x00000000u, 0x000400fau, 0x000003b5u, 0x000003b7u, 0x000003c6u, 0x000200f8u, 0x000003b7u, 0x0004003du, 0x00000008u, 0x000003b9u, 0x00000050u, 0x000500c7u, 0x00000008u, 0x000003bau, 0x000003b9u, 0x0000022au, 0x0004003du, 0x00000008u, 0x000003bbu, 0x0000004fu, 0x000500c7u, 0x00000008u, 0x000003bcu, 0x000003bbu, 0x00000230u, 0x00050084u, 0x00000008u, 0x000003bdu, 0x000003bcu, 0x00000233u, 0x0004003du, 0x00000008u, 0x000003beu, 0x0000004eu, 0x000500c7u, 0x00000008u, 0x000003bfu, 0x000003beu, 0x00000230u, 0x00050080u, 0x00000008u, 0x000003c0u, 0x000003bdu, 0x000003bfu, 0x0003003eu, 0x000003c1u, 0x00000392u, 0x00060041u, 0x0000007bu, 0x000003c2u, 0x000003c1u, 0x000003bau, 0x000003c0u, 0x0004003du, 0x0000000fu, 0x000003c3u, 0x000003c2u, 0x00040071u, 0x00000006u, 0x000003c4u, 0x000003c3u, 0x0004007cu, 0x00000008u, 0x000003c5u, 0x000003c4u, 0x0003003eu, 0x000003b6u, 0x000003c5u, 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000003c6u, 0x0004003du, 0x00000008u, 0x000003c7u, 0x00000052u, 0x000500c7u, 0x00000008u, 0x000003c8u, 0x000003c7u, 0x0000023cu, 0x0003003eu, 0x000003b6u, 0x000003c8u, 0x000200f9u, 0x000003b8u, 0x000200f8u, 0x000003b8u, 0x000700f5u, 0x00000008u, 0x0000eec8u, 0x000003c5u, 0x000003b7u, 0x000003c8u, 0x000003c6u, 0x0003003eu, 0x00000053u, 0x0000eec8u, 0x0004003du, 0x00000008u, 0x000003cau, 0x00000051u, 0x000500aau, 0x00000069u, 0x000003cbu, 0x000003cau, 0x0000022au, 0x000300f7u, 0x000003cdu, 0x00000000u, 0x000400fau, 0x000003cbu, 0x000003ccu, 0x000003cdu, 0x000200f8u, 0x000003ccu, 0x0004003du, 0x00000008u, 0x000003ceu, 0x00000053u, 0x000400c8u, 0x00000008u, 0x000003cfu, 0x000003ceu, 0x000500c7u, 0x00000008u, 0x000003d0u, 0x000003cfu, 0x0000023cu, 0x0003003eu, 0x00000053u, 0x000003d0u, 0x000200f9u, 0x000003cdu, 0x000200f8u, 0x000003cdu, 0x000200f9u, 0x000003b1u, 0x000200f8u, 0x000003b1u, 0x000200f9u, 0x000003acu, 0x000200f8u, 0x000003acu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000059u, 0x00000000u, 0x00000057u, 0x00030037u, 0x00000056u, 0x00000058u, 0x000200f8u, 0x0000005au, 0x0004003bu, 0x00000046u, 0x000003d1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003d5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003d8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003dcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003e0u, 0x00000007u, 0x0004003du, 0x00000011u, 0x000003d2u, 0x00000058u, 0x00040071u, 0x00000006u, 0x000003d3u, 0x000003d2u, 0x0004007cu, 0x00000008u, 0x000003d4u, 0x000003d3u, 0x0003003eu, 0x000003d1u, 0x000003d4u, 0x000500c3u, 0x00000008u, 0x000003d7u, 0x000003d4u, 0x00000266u, 0x0003003eu, 0x000003d5u, 0x000003d7u, 0x000500c7u, 0x00000008u, 0x000003dbu, 0x000003d4u, 0x000003dau, 0x0003003eu, 0x000003d8u, 0x000003dbu, 0x00050082u, 0x00000008u, 0x000003deu, 0x00000239u, 0x000003d7u, 0x0007000cu, 0x00000008u, 0x000003dfu, 0x00000001u, 0x0000002au, 0x000003deu, 0x00000220u, 0x0003003eu, 0x000003dcu, 0x000003dfu, 0x000500c3u, 0x00000008u, 0x000003e3u, 0x000003e1u, 0x000003d7u, 0x00050082u, 0x00000008u, 0x000003e4u, 0x000003e1u, 0x000003e3u, 0x0003003eu, 0x000003e0u, 0x000003e4u, 0x000500c4u, 0x00000008u, 0x000003e7u, 0x000003dbu, 0x000003dfu, 0x00050080u, 0x00000008u, 0x000003e9u, 0x000003e7u, 0x000003e4u, 0x000200feu, 0x000003e9u, 0x00010038u, 0x00050036u, 0x00000011u, 0x0000005du, 0x00000000u, 0x0000005bu, 0x00030037u, 0x00000046u, 0x0000005cu, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x00000046u, 0x000003ecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003f8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000003fcu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000003eeu, 0x0000005cu, 0x00050082u, 0x00000008u, 0x000003efu, 0x000003edu, 0x000003eeu, 0x0007000cu, 0x00000008u, 0x000003f0u, 0x00000001u, 0x0000002au, 0x000003efu, 0x0000022au, 0x0003003eu, 0x000003ecu, 0x000003f0u, 0x0006000cu, 0x00000008u, 0x000003f4u, 0x00000001u, 0x0000004au, 0x000003f0u, 0x00050082u, 0x00000008u, 0x000003f5u, 0x000003f2u, 0x000003f4u, 0x0003003eu, 0x000003f1u, 0x000003f5u, 0x0008000cu, 0x00000008u, 0x000003f7u, 0x00000001u, 0x0000002du, 0x000003f5u, 0x00000220u, 0x0000023cu, 0x0003003eu, 0x000003f1u, 0x000003f7u, 0x00050082u, 0x00000008u, 0x000003fau, 0x00000239u, 0x000003f7u, 0x0007000cu, 0x00000008u, 0x000003fbu, 0x00000001u, 0x0000002au, 0x000003fau, 0x00000220u, 0x0003003eu, 0x000003f8u, 0x000003fbu, 0x0004003du, 0x00000008u, 0x000003fdu, 0x0000005cu, 0x000500c3u, 0x00000008u, 0x000003ffu, 0x000003fdu, 0x000003fbu, 0x000500c7u, 0x00000008u, 0x00000400u, 0x000003ffu, 0x000003dau, 0x0003003eu, 0x000003fcu, 0x00000400u, 0x000500c4u, 0x00000008u, 0x00000402u, 0x000003f7u, 0x00000266u, 0x00050080u, 0x00000008u, 0x00000404u, 0x00000402u, 0x00000400u, 0x00040072u, 0x00000012u, 0x00000405u, 0x00000404u, 0x0004007cu, 0x00000011u, 0x00000406u, 0x00000405u, 0x000200feu, 0x00000406u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000061u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x00000060u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x00000008u, 0x00000409u, 0x00000060u, 0x000500c4u, 0x00000008u, 0x0000040au, 0x0000022au, 0x00000409u, 0x000200feu, 0x0000040au, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000064u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x00000063u, 0x000200f8u, 0x00000065u, 0x0004003du, 0x00000008u, 0x0000040du, 0x00000063u, 0x0006000cu, 0x00000008u, 0x0000040eu, 0x00000001u, 0x0000004au, 0x0000040du, 0x0007000cu, 0x00000008u, 0x0000040fu, 0x00000001u, 0x0000002au, 0x0000040eu, 0x00000220u, 0x000200feu, 0x0000040fu, 0x00010038u, 0x00050036u, 0x00000047u, 0x00000076u, 0x00000000u, 0x0000006du, 0x00030037u, 0x00000067u, 0x0000006eu, 0x00030037u, 0x00000068u, 0x0000006fu, 0x00030037u, 0x0000006au, 0x00000070u, 0x00030037u, 0x0000006au, 0x00000071u, 0x00030037u, 0x0000006au, 0x00000072u, 0x00030037u, 0x0000006au, 0x00000073u, 0x00030037u, 0x0000006cu, 0x00000074u, 0x00030037u, 0x0000006au, 0x00000075u, 0x000200f8u, 0x00000077u, 0x0005003bu, 0x0000006au, 0x00002004u, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000041bu, 0x00002001u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x0000041cu, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00000442u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000480u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000495u, 0x00000007u, 0x0004003bu, 0x000004b7u, 0x000004b8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000004dau, 0x00000007u, 0x000300f7u, 0x00002000u, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00002003u, 0x000200f8u, 0x00002003u, 0x00050041u, 0x0000007bu, 0x00000412u, 0x0000006fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00000413u, 0x00000412u, 0x00040071u, 0x00000006u, 0x00000414u, 0x00000413u, 0x0004007cu, 0x00000008u, 0x00000415u, 0x00000414u, 0x000300f7u, 0x0000041au, 0x00000000u, 0x000b00fbu, 0x00000415u, 0x0000041au, 0x00000000u, 0x00000416u, 0x00000001u, 0x00000417u, 0x00000002u, 0x00000418u, 0x00000003u, 0x00000419u, 0x000200f8u, 0x00000416u, 0x00050041u, 0x00000068u, 0x0000041du, 0x0000006eu, 0x00000220u, 0x0004003du, 0x00000010u, 0x0000041eu, 0x0000041du, 0x0008004fu, 0x00000047u, 0x0000041fu, 0x0000041eu, 0x0000041eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x0000041fu, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x00000417u, 0x00050041u, 0x00000068u, 0x00000421u, 0x0000006eu, 0x0000022au, 0x0004003du, 0x00000010u, 0x00000422u, 0x00000421u, 0x0008004fu, 0x00000047u, 0x00000423u, 0x00000422u, 0x00000422u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x00000423u, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x00000418u, 0x00050041u, 0x00000068u, 0x00000425u, 0x0000006eu, 0x00000230u, 0x0004003du, 0x00000010u, 0x00000426u, 0x00000425u, 0x0008004fu, 0x00000047u, 0x00000427u, 0x00000426u, 0x00000426u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x00000427u, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x00000419u, 0x00050041u, 0x00000068u, 0x00000429u, 0x0000006eu, 0x0000022du, 0x0004003du, 0x00000010u, 0x0000042au, 0x00000429u, 0x0008004fu, 0x00000047u, 0x0000042bu, 0x0000042au, 0x0000042au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000041cu, 0x0000042bu, 0x000200f9u, 0x0000041au, 0x000200f8u, 0x0000041au, 0x000d00f5u, 0x00000047u, 0x0000eee3u, 0x0000eee4u, 0x00002003u, 0x0000041fu, 0x00000416u, 0x00000423u, 0x00000417u, 0x00000427u, 0x00000418u, 0x0000042bu, 0x00000419u, 0x0004003du, 0x00000069u, 0x0000042eu, 0x00000075u, 0x000300f7u, 0x00000430u, 0x00000000u, 0x000400fau, 0x0000042eu, 0x0000042fu, 0x00000430u, 0x000200f8u, 0x0000042fu, 0x0004003du, 0x00000069u, 0x00000431u, 0x00000072u, 0x0004003du, 0x00000069u, 0x00000432u, 0x00000073u, 0x000400a8u, 0x00000069u, 0x00000433u, 0x00000432u, 0x000500a7u, 0x00000069u, 0x00000434u, 0x00000431u, 0x00000433u, 0x000300f7u, 0x00000436u, 0x00000000u, 0x000400fau, 0x00000434u, 0x00000435u, 0x00000436u, 0x000200f8u, 0x00000435u, 0x0003003eu, 0x00002004u, 0x00000559u, 0x0003003eu, 0x00002001u, 0x0000eee3u, 0x000200f9u, 0x00002000u, 0x000200f8u, 0x00000436u, 0x000200f9u, 0x00000430u, 0x000200f8u, 0x00000430u, 0x00050041u, 0x0000007bu, 0x00000439u, 0x0000006fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000043au, 0x00000439u, 0x00040071u, 0x00000006u, 0x0000043bu, 0x0000043au, 0x0004007cu, 0x00000008u, 0x0000043cu, 0x0000043bu, 0x000300f7u, 0x00000441u, 0x00000000u, 0x000b00fbu, 0x0000043cu, 0x00000441u, 0x00000000u, 0x0000043du, 0x00000001u, 0x0000043eu, 0x00000002u, 0x0000043fu, 0x00000003u, 0x00000440u, 0x000200f8u, 0x0000043du, 0x00050041u, 0x00000068u, 0x00000443u, 0x0000006eu, 0x00000220u, 0x0004003du, 0x00000010u, 0x00000444u, 0x00000443u, 0x0008004fu, 0x00000047u, 0x00000445u, 0x00000444u, 0x00000444u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x00000445u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x0000043eu, 0x00050041u, 0x00000068u, 0x00000447u, 0x0000006eu, 0x0000022au, 0x0004003du, 0x00000010u, 0x00000448u, 0x00000447u, 0x0008004fu, 0x00000047u, 0x00000449u, 0x00000448u, 0x00000448u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x00000449u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x0000043fu, 0x00050041u, 0x00000068u, 0x0000044bu, 0x0000006eu, 0x00000230u, 0x0004003du, 0x00000010u, 0x0000044cu, 0x0000044bu, 0x0008004fu, 0x00000047u, 0x0000044du, 0x0000044cu, 0x0000044cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x0000044du, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x00000440u, 0x00050041u, 0x00000068u, 0x0000044fu, 0x0000006eu, 0x0000022du, 0x0004003du, 0x00000010u, 0x00000450u, 0x0000044fu, 0x0008004fu, 0x00000047u, 0x00000451u, 0x00000450u, 0x00000450u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000442u, 0x00000451u, 0x000200f9u, 0x00000441u, 0x000200f8u, 0x00000441u, 0x0004003du, 0x00000069u, 0x00000454u, 0x00000075u, 0x000300f7u, 0x00000456u, 0x00000000u, 0x000400fau, 0x00000454u, 0x00000455u, 0x00000456u, 0x000200f8u, 0x00000455u, 0x0004003du, 0x00000069u, 0x00000457u, 0x00000071u, 0x000400a8u, 0x00000069u, 0x00000458u, 0x00000457u, 0x000400a8u, 0x00000069u, 0x00000459u, 0x00000458u, 0x000300f7u, 0x0000045bu, 0x00000000u, 0x000400fau, 0x00000459u, 0x0000045au, 0x0000045bu, 0x000200f8u, 0x0000045au, 0x00050041u, 0x0000007bu, 0x0000045du, 0x0000006fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x0000045eu, 0x0000045du, 0x00040071u, 0x00000006u, 0x0000045fu, 0x0000045eu, 0x0004007cu, 0x00000008u, 0x00000460u, 0x0000045fu, 0x000500aau, 0x00000069u, 0x00000461u, 0x00000460u, 0x00000220u, 0x000300f7u, 0x00000463u, 0x00000000u, 0x000400fau, 0x00000461u, 0x00000462u, 0x00000463u, 0x000200f8u, 0x00000462u, 0x00050041u, 0x0000007bu, 0x00000465u, 0x0000006fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000466u, 0x00000465u, 0x00040071u, 0x00000006u, 0x00000467u, 0x00000466u, 0x0004007cu, 0x00000008u, 0x00000468u, 0x00000467u, 0x000500aau, 0x00000069u, 0x00000469u, 0x00000468u, 0x00000220u, 0x000200f9u, 0x00000463u, 0x000200f8u, 0x00000463u, 0x000700f5u, 0x00000069u, 0x0000046au, 0x00000461u, 0x0000045au, 0x00000469u, 0x00000462u, 0x000300f7u, 0x0000046cu, 0x00000000u, 0x000400fau, 0x0000046au, 0x0000046bu, 0x0000046cu, 0x000200f8u, 0x0000046bu, 0x00060041u, 0x0000007bu, 0x0000046du, 0x0000006eu, 0x00000220u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000046eu, 0x0000046du, 0x000500aau, 0x00000069u, 0x00000470u, 0x0000046eu, 0x0000046fu, 0x000200f9u, 0x0000046cu, 0x000200f8u, 0x0000046cu, 0x000700f5u, 0x00000069u, 0x00000471u, 0x0000046au, 0x00000463u, 0x00000470u, 0x0000046bu, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045bu, 0x000700f5u, 0x00000069u, 0x00000472u, 0x00000458u, 0x00000455u, 0x00000471u, 0x0000046cu, 0x000300f7u, 0x00000474u, 0x00000000u, 0x000400fau, 0x00000472u, 0x00000473u, 0x00000474u, 0x000200f8u, 0x00000473u, 0x0004003du, 0x00000047u, 0x00000475u, 0x00000442u, 0x0003003eu, 0x00002004u, 0x00000559u, 0x0003003eu, 0x00002001u, 0x00000475u, 0x000200f9u, 0x00002000u, 0x000200f8u, 0x00000474u, 0x000200f9u, 0x00000456u, 0x000200f8u, 0x00000456u, 0x00050041u, 0x0000007bu, 0x00000477u, 0x0000006fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000478u, 0x00000477u, 0x00040071u, 0x00000006u, 0x00000479u, 0x00000478u, 0x0004007cu, 0x00000008u, 0x0000047au, 0x00000479u, 0x000300f7u, 0x0000047fu, 0x00000000u, 0x000b00fbu, 0x0000047au, 0x0000047fu, 0x00000000u, 0x0000047bu, 0x00000001u, 0x0000047cu, 0x00000002u, 0x0000047du, 0x00000003u, 0x0000047eu, 0x000200f8u, 0x0000047bu, 0x00060041u, 0x0000007bu, 0x00000481u, 0x0000006eu, 0x00000220u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000482u, 0x00000481u, 0x0003003eu, 0x00000480u, 0x00000482u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047cu, 0x00060041u, 0x0000007bu, 0x00000484u, 0x0000006eu, 0x0000022du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000485u, 0x00000484u, 0x0003003eu, 0x00000480u, 0x00000485u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047du, 0x00050041u, 0x0000007bu, 0x00000487u, 0x0000006eu, 0x00000233u, 0x0004003du, 0x0000000fu, 0x00000488u, 0x00000487u, 0x0003003eu, 0x00000480u, 0x00000488u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047eu, 0x0003003eu, 0x00000480u, 0x00000388u, 0x000200f9u, 0x0000047fu, 0x000200f8u, 0x0000047fu, 0x000d00f5u, 0x0000000fu, 0x0000eec9u, 0x0000eeceu, 0x00000456u, 0x00000482u, 0x0000047bu, 0x00000485u, 0x0000047cu, 0x00000488u, 0x0000047du, 0x00000388u, 0x0000047eu, 0x00050041u, 0x0000007bu, 0x0000048cu, 0x0000006fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000048du, 0x0000048cu, 0x00040071u, 0x00000006u, 0x0000048eu, 0x0000048du, 0x0004007cu, 0x00000008u, 0x0000048fu, 0x0000048eu, 0x000300f7u, 0x00000494u, 0x00000000u, 0x000b00fbu, 0x0000048fu, 0x00000494u, 0x00000000u, 0x00000490u, 0x00000001u, 0x00000491u, 0x00000002u, 0x00000492u, 0x00000003u, 0x00000493u, 0x000200f8u, 0x00000490u, 0x000400c8u, 0x0000000fu, 0x00000497u, 0x0000eec9u, 0x000500c7u, 0x0000000fu, 0x00000498u, 0x00000497u, 0x0000046fu, 0x0003003eu, 0x00000495u, 0x00000498u, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000491u, 0x00060041u, 0x0000007bu, 0x0000049au, 0x0000006eu, 0x0000022au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x0000049bu, 0x0000049au, 0x0003003eu, 0x00000495u, 0x0000049bu, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000492u, 0x0003003eu, 0x00000495u, 0x0000046fu, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000493u, 0x0003003eu, 0x00000495u, 0x00000388u, 0x000200f9u, 0x00000494u, 0x000200f8u, 0x00000494u, 0x000d00f5u, 0x0000000fu, 0x0000eed3u, 0x0000eeceu, 0x0000047fu, 0x00000498u, 0x00000490u, 0x0000049bu, 0x00000491u, 0x0000046fu, 0x00000492u, 0x00000388u, 0x00000493u, 0x000500c2u, 0x0000000fu, 0x000004a1u, 0x0000eec9u, 0x0000038fu, 0x0003003eu, 0x00000480u, 0x000004a1u, 0x000500c2u, 0x0000000fu, 0x000004a3u, 0x0000eed3u, 0x0000038fu, 0x0003003eu, 0x00000495u, 0x000004a3u, 0x0004003du, 0x0000000fu, 0x000004a5u, 0x0000048cu, 0x00040071u, 0x00000006u, 0x000004a6u, 0x000004a5u, 0x0004007cu, 0x00000008u, 0x000004a7u, 0x000004a6u, 0x000500aau, 0x00000069u, 0x000004a8u, 0x000004a7u, 0x0000022au, 0x000300f7u, 0x000004aau, 0x00000000u, 0x000400fau, 0x000004a8u, 0x000004a9u, 0x000004aau, 0x000200f8u, 0x000004a9u, 0x00050041u, 0x0000007bu, 0x000004acu, 0x00000074u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000004adu, 0x000004acu, 0x000500c2u, 0x0000000fu, 0x000004aeu, 0x000004a1u, 0x000004adu, 0x000500c7u, 0x0000000fu, 0x000004b0u, 0x000004aeu, 0x000004afu, 0x0003003eu, 0x00000480u, 0x000004b0u, 0x00050041u, 0x0000007bu, 0x000004b2u, 0x00000074u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000004b3u, 0x000004b2u, 0x000500c2u, 0x0000000fu, 0x000004b4u, 0x000004a3u, 0x000004b3u, 0x000500c5u, 0x0000000fu, 0x000004b5u, 0x000004b4u, 0x0000038fu, 0x0003003eu, 0x00000495u, 0x000004b5u, 0x000200f9u, 0x000004aau, 0x000200f8u, 0x000004aau, 0x000700f5u, 0x0000000fu, 0x0000eee8u, 0x000004a3u, 0x00000494u, 0x000004b5u, 0x000004a9u, 0x000700f5u, 0x0000000fu, 0x0000eedcu, 0x000004a1u, 0x00000494u, 0x000004b0u, 0x000004a9u, 0x0004003du, 0x00000047u, 0x000004b9u, 0x00000442u, 0x00040071u, 0x000004bau, 0x000004bbu, 0x000004b9u, 0x0004007cu, 0x000004b6u, 0x000004bcu, 0x000004bbu, 0x00040071u, 0x00000011u, 0x000004beu, 0x0000eedcu, 0x0004007cu, 0x00000012u, 0x000004bfu, 0x000004beu, 0x00060050u, 0x000004b6u, 0x000004c0u, 0x000004bfu, 0x000004bfu, 0x000004bfu, 0x00050084u, 0x000004b6u, 0x000004c1u, 0x000004bcu, 0x000004c0u, 0x00040071u, 0x000004bau, 0x000004c3u, 0x0000eee3u, 0x0004007cu, 0x000004b6u, 0x000004c4u, 0x000004c3u, 0x00040071u, 0x00000011u, 0x000004c6u, 0x0000eee8u, 0x0004007cu, 0x00000012u, 0x000004c7u, 0x000004c6u, 0x00050080u, 0x00000012u, 0x000004c9u, 0x000004c7u, 0x000004c8u, 0x00060050u, 0x000004b6u, 0x000004cau, 0x000004c9u, 0x000004c9u, 0x000004c9u, 0x00050084u, 0x000004b6u, 0x000004cbu, 0x000004c4u, 0x000004cau, 0x00050080u, 0x000004b6u, 0x000004ccu, 0x000004c1u, 0x000004cbu, 0x0003003eu, 0x000004b8u, 0x000004ccu, 0x0004003du, 0x00000069u, 0x000004cdu, 0x00000075u, 0x000400a8u, 0x00000069u, 0x000004ceu, 0x000004cdu, 0x0004003du, 0x00000069u, 0x000004cfu, 0x00000070u, 0x000500a6u, 0x00000069u, 0x000004d0u, 0x000004ceu, 0x000004cfu, 0x000300f7u, 0x000004d2u, 0x00000000u, 0x000400fau, 0x000004d0u, 0x000004d1u, 0x000004d9u, 0x000200f8u, 0x000004d1u, 0x0004003du, 0x000004b6u, 0x000004d3u, 0x000004b8u, 0x000500c3u, 0x000004b6u, 0x000004d6u, 0x000004d3u, 0x0000f3b7u, 0x00040072u, 0x0000037cu, 0x000004d7u, 0x000004d6u, 0x0004007cu, 0x00000047u, 0x000004d8u, 0x000004d7u, 0x0003003eu, 0x00000442u, 0x000004d8u, 0x000200f9u, 0x000004d2u, 0x000200f8u, 0x000004d9u, 0x00040071u, 0x00000006u, 0x000004dcu, 0x0000eedcu, 0x0004007cu, 0x00000008u, 0x000004ddu, 0x000004dcu, 0x000500c3u, 0x00000008u, 0x000004deu, 0x000004ddu, 0x0000022du, 0x00040071u, 0x00000006u, 0x000004e0u, 0x0000eee8u, 0x0004007cu, 0x00000008u, 0x000004e1u, 0x000004e0u, 0x000500c3u, 0x00000008u, 0x000004e2u, 0x000004e1u, 0x0000022du, 0x00050080u, 0x00000008u, 0x000004e3u, 0x000004deu, 0x000004e2u, 0x00050080u, 0x00000008u, 0x000004e4u, 0x000004e3u, 0x0000022au, 0x0003003eu, 0x000004dau, 0x000004e4u, 0x0004003du, 0x000004b6u, 0x000004e6u, 0x000004b8u, 0x000500c3u, 0x000004b6u, 0x000004e8u, 0x000004e6u, 0x0000f3b9u, 0x0003003eu, 0x000004b8u, 0x000004e8u, 0x0004003du, 0x000004b6u, 0x000004eau, 0x000004b8u, 0x000500c7u, 0x000004b6u, 0x000004ecu, 0x000004eau, 0x0000f3bau, 0x0003003eu, 0x000004b8u, 0x000004ecu, 0x0004003du, 0x000004edu, 0x000004f0u, 0x000004efu, 0x000500c4u, 0x00000008u, 0x000004f2u, 0x000004e4u, 0x00000266u, 0x00050041u, 0x000001c4u, 0x000004f3u, 0x000004b8u, 0x0000032du, 0x0004003du, 0x00000012u, 0x000004f4u, 0x000004f3u, 0x00040072u, 0x00000008u, 0x000004f5u, 0x000004f4u, 0x000500c5u, 0x00000008u, 0x000004f6u, 0x000004f2u, 0x000004f5u, 0x0005005fu, 0x000004f7u, 0x000004f8u, 0x000004f0u, 0x000004f6u, 0x00050051u, 0x00000006u, 0x000004f9u, 0x000004f8u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x000004fau, 0x000004f9u, 0x00050041u, 0x0000007bu, 0x000004fbu, 0x00000442u, 0x0000032du, 0x0003003eu, 0x000004fbu, 0x000004fau, 0x00050041u, 0x000001c4u, 0x000004ffu, 0x000004b8u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00000500u, 0x000004ffu, 0x00040072u, 0x00000008u, 0x00000501u, 0x00000500u, 0x000500c5u, 0x00000008u, 0x00000502u, 0x000004f2u, 0x00000501u, 0x0005005fu, 0x000004f7u, 0x00000503u, 0x000004f0u, 0x00000502u, 0x00050051u, 0x00000006u, 0x00000504u, 0x00000503u, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00000505u, 0x00000504u, 0x00050041u, 0x0000007bu, 0x00000506u, 0x00000442u, 0x0000045cu, 0x0003003eu, 0x00000506u, 0x00000505u, 0x00050041u, 0x000001c4u, 0x0000050au, 0x000004b8u, 0x00000386u, 0x0004003du, 0x00000012u, 0x0000050bu, 0x0000050au, 0x00040072u, 0x00000008u, 0x0000050cu, 0x0000050bu, 0x000500c5u, 0x00000008u, 0x0000050du, 0x000004f2u, 0x0000050cu, 0x0005005fu, 0x000004f7u, 0x0000050eu, 0x000004f0u, 0x0000050du, 0x00050051u, 0x00000006u, 0x0000050fu, 0x0000050eu, 0x00000000u, 0x00040071u, 0x0000000fu, 0x00000510u, 0x0000050fu, 0x00050041u, 0x0000007bu, 0x00000511u, 0x00000442u, 0x00000386u, 0x0003003eu, 0x00000511u, 0x00000510u, 0x000200f9u, 0x000004d2u, 0x000200f8u, 0x000004d2u, 0x0004003du, 0x00000047u, 0x00000512u, 0x00000442u, 0x000500c7u, 0x00000047u, 0x00000514u, 0x00000512u, 0x0000f3b8u, 0x0003003eu, 0x00002004u, 0x00000559u, 0x0003003eu, 0x00002001u, 0x00000514u, 0x000200f9u, 0x00002000u, 0x000200f8u, 0x00002000u, 0x000900f5u, 0x00000047u, 0x0000eee9u, 0x0000eee3u, 0x00000435u, 0x00000475u, 0x00000473u, 0x00000514u, 0x000004d2u, 0x000200feu, 0x0000eee9u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000079u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x00000078u, 0x000200f8u, 0x0000007au, 0x0004003du, 0x00000008u, 0x00000517u, 0x00000078u, 0x000500abu, 0x00000069u, 0x00000518u, 0x00000517u, 0x00000220u, 0x000300f7u, 0x0000051au, 0x00000000u, 0x000400fau, 0x00000518u, 0x00000519u, 0x0000051au, 0x000200f8u, 0x00000519u, 0x0004003du, 0x00000008u, 0x0000051bu, 0x00000078u, 0x0006000cu, 0x00000008u, 0x0000051cu, 0x00000001u, 0x0000004au, 0x0000051bu, 0x000500c4u, 0x00000008u, 0x0000051du, 0x0000022au, 0x0000051cu, 0x0003003eu, 0x00000078u, 0x0000051du, 0x000200f9u, 0x0000051au, 0x000200f8u, 0x0000051au, 0x0004003du, 0x00000008u, 0x0000051eu, 0x00000078u, 0x000200feu, 0x0000051eu, 0x00010038u, 0x00050036u, 0x00000069u, 0x0000008bu, 0x00000000u, 0x0000007cu, 0x00030037u, 0x00000046u, 0x0000007du, 0x00030037u, 0x00000046u, 0x0000007eu, 0x00030037u, 0x00000046u, 0x0000007fu, 0x00030037u, 0x00000056u, 0x00000080u, 0x00030037u, 0x0000007bu, 0x00000081u, 0x00030037u, 0x00000046u, 0x00000082u, 0x00030037u, 0x00000046u, 0x00000083u, 0x00030037u, 0x0000006au, 0x00000084u, 0x00030037u, 0x00000046u, 0x00000085u, 0x00030037u, 0x0000006au, 0x00000086u, 0x00030037u, 0x0000006au, 0x00000087u, 0x00030037u, 0x0000006au, 0x00000088u, 0x00030037u, 0x0000006au, 0x00000089u, 0x00030037u, 0x0000006cu, 0x0000008au, 0x000200f8u, 0x0000008cu, 0x0004003bu, 0x00000046u, 0x00000524u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00000525u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000528u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000052eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000535u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000055bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000055fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000561u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000565u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000570u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000581u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000582u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000585u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000589u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000058du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000005b9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000005bbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000005deu, 0x00000007u, 0x0004003du, 0x00000069u, 0x00000521u, 0x00000084u, 0x000300f7u, 0x00000523u, 0x00000000u, 0x000400fau, 0x00000521u, 0x00000522u, 0x000005d6u, 0x000200f8u, 0x00000522u, 0x0004003du, 0x00000011u, 0x00000526u, 0x00000080u, 0x0003003eu, 0x00000525u, 0x00000526u, 0x00050039u, 0x00000008u, 0x00000527u, 0x00000059u, 0x00000525u, 0x0003003eu, 0x00000524u, 0x00000527u, 0x0004003du, 0x0000000fu, 0x00000529u, 0x00000081u, 0x00040071u, 0x00000006u, 0x0000052au, 0x00000529u, 0x0004007cu, 0x00000008u, 0x0000052bu, 0x0000052au, 0x0003003eu, 0x0000052cu, 0x0000052bu, 0x00050039u, 0x00000008u, 0x0000052du, 0x00000061u, 0x0000052cu, 0x0003003eu, 0x00000528u, 0x0000052du, 0x0004003du, 0x00000011u, 0x0000052fu, 0x00000080u, 0x00040071u, 0x00000006u, 0x00000530u, 0x0000052fu, 0x0004007cu, 0x00000008u, 0x00000531u, 0x00000530u, 0x000500c3u, 0x00000008u, 0x00000532u, 0x00000531u, 0x00000266u, 0x000500c7u, 0x00000008u, 0x00000534u, 0x00000532u, 0x00000533u, 0x0003003eu, 0x0000052eu, 0x00000534u, 0x0003003eu, 0x00000535u, 0x00000536u, 0x0004003du, 0x00000008u, 0x00000537u, 0x0000007fu, 0x0004003du, 0x0000000fu, 0x00000538u, 0x00000081u, 0x00040071u, 0x00000006u, 0x00000539u, 0x00000538u, 0x0004007cu, 0x00000008u, 0x0000053au, 0x00000539u, 0x00050082u, 0x00000008u, 0x0000053bu, 0x00000537u, 0x0000053au, 0x0008000cu, 0x00000008u, 0x0000053cu, 0x00000001u, 0x0000002du, 0x0000053bu, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x0000053du, 0x0000053cu, 0x0004007cu, 0x0000000fu, 0x0000053eu, 0x0000053du, 0x00050041u, 0x0000007bu, 0x0000053fu, 0x0000008au, 0x0000032du, 0x0003003eu, 0x0000053fu, 0x0000053eu, 0x0004003du, 0x0000000fu, 0x00000540u, 0x00000081u, 0x00040071u, 0x00000006u, 0x00000541u, 0x00000540u, 0x0004007cu, 0x00000008u, 0x00000542u, 0x00000541u, 0x0004003du, 0x00000008u, 0x00000543u, 0x0000007fu, 0x00050082u, 0x00000008u, 0x00000544u, 0x00000542u, 0x00000543u, 0x0008000cu, 0x00000008u, 0x00000545u, 0x00000001u, 0x0000002du, 0x00000544u, 0x00000220u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x00000546u, 0x00000545u, 0x0004007cu, 0x0000000fu, 0x00000547u, 0x00000546u, 0x00050041u, 0x0000007bu, 0x00000548u, 0x0000008au, 0x0000045cu, 0x0003003eu, 0x00000548u, 0x00000547u, 0x000500b1u, 0x00000069u, 0x0000054au, 0x00000534u, 0x00000230u, 0x000300f7u, 0x0000054cu, 0x00000000u, 0x000400fau, 0x0000054au, 0x0000054bu, 0x0000054cu, 0x000200f8u, 0x0000054bu, 0x000500abu, 0x00000069u, 0x0000054fu, 0x0000052du, 0x0000054eu, 0x000300f7u, 0x00000551u, 0x00000000u, 0x000400fau, 0x0000054fu, 0x00000550u, 0x00000558u, 0x000200f8u, 0x00000550u, 0x000500c4u, 0x00000008u, 0x00000553u, 0x0000052du, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00000556u, 0x00000554u, 0x00000534u, 0x0007000cu, 0x00000008u, 0x00000557u, 0x00000001u, 0x0000002au, 0x00000553u, 0x00000556u, 0x0003003eu, 0x00000528u, 0x00000557u, 0x000200f9u, 0x00000551u, 0x000200f8u, 0x00000558u, 0x0003003eu, 0x00000535u, 0x00000559u, 0x0003003eu, 0x00000528u, 0x0000055au, 0x000200f9u, 0x00000551u, 0x000200f8u, 0x00000551u, 0x000700f5u, 0x00000008u, 0x0000eeecu, 0x00000557u, 0x00000550u, 0x0000055au, 0x00000558u, 0x000600a9u, 0x00000069u, 0x0000f3dau, 0x0000054fu, 0x00000536u, 0x00000559u, 0x000200f9u, 0x0000054cu, 0x000200f8u, 0x0000054cu, 0x000700f5u, 0x00000069u, 0x0000eeedu, 0x00000536u, 0x00000522u, 0x0000f3dau, 0x00000551u, 0x000700f5u, 0x00000008u, 0x0000eeebu, 0x0000052du, 0x00000522u, 0x0000eeecu, 0x00000551u, 0x0004003du, 0x00000008u, 0x0000055cu, 0x0000007eu, 0x000500c5u, 0x00000008u, 0x0000055eu, 0x0000055cu, 0x0000eeebu, 0x0003003eu, 0x0000055fu, 0x0000055eu, 0x00050039u, 0x00000008u, 0x00000560u, 0x00000079u, 0x0000055fu, 0x0003003eu, 0x0000055bu, 0x00000560u, 0x0003003eu, 0x00000561u, 0x00000560u, 0x000500c4u, 0x00000008u, 0x00000564u, 0x00000560u, 0x00000230u, 0x0003003eu, 0x0000055bu, 0x00000564u, 0x000400a8u, 0x00000069u, 0x00000567u, 0x0000eeedu, 0x000300f7u, 0x00000569u, 0x00000000u, 0x000400fau, 0x00000567u, 0x00000568u, 0x00000569u, 0x000200f8u, 0x00000568u, 0x0004003du, 0x00000008u, 0x0000056au, 0x0000007du, 0x00050080u, 0x00000008u, 0x0000056cu, 0x0000056au, 0x00000564u, 0x000500afu, 0x00000069u, 0x0000056eu, 0x0000056cu, 0x00000527u, 0x000200f9u, 0x00000569u, 0x000200f8u, 0x00000569u, 0x000700f5u, 0x00000069u, 0x0000056fu, 0x0000eeedu, 0x0000054cu, 0x0000056eu, 0x00000568u, 0x0003003eu, 0x00000565u, 0x0000056fu, 0x0004003du, 0x00000008u, 0x00000571u, 0x00000082u, 0x0004003du, 0x00000008u, 0x00000572u, 0x00000083u, 0x00050080u, 0x00000008u, 0x00000573u, 0x00000571u, 0x00000572u, 0x000500afu, 0x00000069u, 0x00000574u, 0x00000573u, 0x0000025du, 0x0003003eu, 0x00000570u, 0x00000574u, 0x0004003du, 0x00000069u, 0x00000575u, 0x00000086u, 0x000400a8u, 0x00000069u, 0x00000576u, 0x00000575u, 0x000300f7u, 0x00000578u, 0x00000000u, 0x000400fau, 0x00000576u, 0x00000577u, 0x00000578u, 0x000200f8u, 0x00000577u, 0x000400a8u, 0x00000069u, 0x0000057au, 0x00000574u, 0x0004003du, 0x00000069u, 0x0000057bu, 0x00000087u, 0x000500a7u, 0x00000069u, 0x0000057cu, 0x0000057au, 0x0000057bu, 0x000500a7u, 0x00000069u, 0x0000057eu, 0x0000057cu, 0x0000056fu, 0x000200f9u, 0x00000578u, 0x000200f8u, 0x00000578u, 0x000700f5u, 0x00000069u, 0x0000057fu, 0x00000575u, 0x00000569u, 0x0000057eu, 0x00000577u, 0x0003003eu, 0x00000088u, 0x0000057fu, 0x0003003eu, 0x00000089u, 0x00000574u, 0x0003003eu, 0x00000581u, 0x00000536u, 0x000500aau, 0x00000069u, 0x00000584u, 0x00000527u, 0x000003edu, 0x0003003eu, 0x00000582u, 0x00000584u, 0x0004003du, 0x00000008u, 0x00000586u, 0x0000007du, 0x000500b1u, 0x00000069u, 0x00000588u, 0x00000586u, 0x00000527u, 0x0003003eu, 0x00000585u, 0x00000588u, 0x0004003du, 0x00000008u, 0x0000058au, 0x0000007du, 0x00050082u, 0x00000008u, 0x0000058cu, 0x0000058au, 0x00000564u, 0x0003003eu, 0x00000589u, 0x0000058cu, 0x000500b3u, 0x00000069u, 0x00000591u, 0x0000058cu, 0x00000527u, 0x000500a6u, 0x00000069u, 0x00000592u, 0x0000eeedu, 0x00000591u, 0x0003003eu, 0x0000058du, 0x00000592u, 0x0004003du, 0x00000008u, 0x00000593u, 0x00000085u, 0x000300f7u, 0x00000598u, 0x00000000u, 0x000b00fbu, 0x00000593u, 0x00000598u, 0x00000000u, 0x00000594u, 0x00000001u, 0x00000595u, 0x00000002u, 0x00000596u, 0x00000003u, 0x00000597u, 0x000200f8u, 0x00000594u, 0x000400a8u, 0x00000069u, 0x0000059au, 0x00000584u, 0x000300f7u, 0x0000059cu, 0x00000000u, 0x000400fau, 0x0000059au, 0x0000059bu, 0x0000059cu, 0x000200f8u, 0x0000059bu, 0x000600a9u, 0x00000069u, 0x000005a0u, 0x00000574u, 0x00000588u, 0x00000592u, 0x000200f9u, 0x0000059cu, 0x000200f8u, 0x0000059cu, 0x000700f5u, 0x00000069u, 0x000005a1u, 0x00000584u, 0x00000594u, 0x000005a0u, 0x0000059bu, 0x0003003eu, 0x00000581u, 0x000005a1u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000595u, 0x000400a8u, 0x00000069u, 0x000005a4u, 0x00000588u, 0x000400a8u, 0x00000069u, 0x000005a6u, 0x0000056fu, 0x000500a6u, 0x00000069u, 0x000005a7u, 0x000005a4u, 0x000005a6u, 0x000400a8u, 0x00000069u, 0x000005a9u, 0x00000574u, 0x000500a6u, 0x00000069u, 0x000005aau, 0x000005a7u, 0x000005a9u, 0x000300f7u, 0x000005acu, 0x00000000u, 0x000400fau, 0x000005aau, 0x000005abu, 0x000005b6u, 0x000200f8u, 0x000005abu, 0x000400a8u, 0x00000069u, 0x000005aeu, 0x00000584u, 0x000300f7u, 0x000005b0u, 0x00000000u, 0x000400fau, 0x000005aeu, 0x000005afu, 0x000005b0u, 0x000200f8u, 0x000005afu, 0x000600a9u, 0x00000069u, 0x000005b4u, 0x00000574u, 0x00000588u, 0x00000592u, 0x000200f9u, 0x000005b0u, 0x000200f8u, 0x000005b0u, 0x000700f5u, 0x00000069u, 0x000005b5u, 0x00000584u, 0x000005abu, 0x000005b4u, 0x000005afu, 0x0003003eu, 0x00000581u, 0x000005b5u, 0x000200f9u, 0x000005acu, 0x000200f8u, 0x000005b6u, 0x000500c7u, 0x00000008u, 0x000005b8u, 0x00000560u, 0x0000055au, 0x0003003eu, 0x000005b9u, 0x000005b8u, 0x00050039u, 0x00000008u, 0x000005bau, 0x00000064u, 0x000005b9u, 0x0003003eu, 0x00000561u, 0x000005bau, 0x000500c3u, 0x00000008u, 0x000005beu, 0x00000527u, 0x000005bau, 0x0004003du, 0x00000008u, 0x000005bfu, 0x0000007du, 0x000500c3u, 0x00000008u, 0x000005c1u, 0x000005bfu, 0x000005bau, 0x00050082u, 0x00000008u, 0x000005c2u, 0x000005beu, 0x000005c1u, 0x000500c7u, 0x00000008u, 0x000005c3u, 0x000005c2u, 0x00000533u, 0x0003003eu, 0x000005bbu, 0x000005c3u, 0x0004003du, 0x00000008u, 0x000005c5u, 0x00000082u, 0x00050084u, 0x00000008u, 0x000005c6u, 0x000005c3u, 0x000005c5u, 0x000500c3u, 0x00000008u, 0x000005c7u, 0x000005c6u, 0x00000230u, 0x0007000cu, 0x00000008u, 0x000005c8u, 0x00000001u, 0x00000027u, 0x000005c7u, 0x0000025du, 0x0003003eu, 0x00000082u, 0x000005c8u, 0x0003003eu, 0x00000581u, 0x00000559u, 0x000200f9u, 0x000005acu, 0x000200f8u, 0x000005acu, 0x000700f5u, 0x00000069u, 0x0000eefdu, 0x000005b5u, 0x000005b0u, 0x00000559u, 0x000005b6u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000596u, 0x000500a6u, 0x00000069u, 0x000005ccu, 0x00000588u, 0x00000584u, 0x0003003eu, 0x00000581u, 0x000005ccu, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000597u, 0x000500a7u, 0x00000069u, 0x000005d0u, 0x0000056fu, 0x00000592u, 0x000400a8u, 0x00000069u, 0x000005d2u, 0x00000584u, 0x000500a7u, 0x00000069u, 0x000005d3u, 0x000005d0u, 0x000005d2u, 0x0003003eu, 0x00000581u, 0x000005d3u, 0x000200f9u, 0x00000598u, 0x000200f8u, 0x00000598u, 0x000d00f5u, 0x00000069u, 0x0000eefcu, 0x00000536u, 0x00000578u, 0x000005a1u, 0x0000059cu, 0x0000eefdu, 0x000005acu, 0x000005ccu, 0x00000596u, 0x000005d3u, 0x00000597u, 0x000200f9u, 0x00000523u, 0x000200f8u, 0x000005d6u, 0x00050041u, 0x0000007bu, 0x000005d7u, 0x0000008au, 0x0000032du, 0x0003003eu, 0x000005d7u, 0x00000388u, 0x0004003du, 0x00000008u, 0x000005d8u, 0x0000007fu, 0x00050082u, 0x00000008u, 0x000005d9u, 0x00000533u, 0x000005d8u, 0x0007000cu, 0x00000008u, 0x000005dau, 0x00000001u, 0x00000027u, 0x000005d9u, 0x00000233u, 0x00040072u, 0x0000037bu, 0x000005dbu, 0x000005dau, 0x0004007cu, 0x0000000fu, 0x000005dcu, 0x000005dbu, 0x00050041u, 0x0000007bu, 0x000005ddu, 0x0000008au, 0x0000045cu, 0x0003003eu, 0x000005ddu, 0x000005dcu, 0x0004003du, 0x00000008u, 0x000005dfu, 0x00000082u, 0x0004003du, 0x00000008u, 0x000005e0u, 0x00000083u, 0x00050080u, 0x00000008u, 0x000005e1u, 0x000005dfu, 0x000005e0u, 0x000500afu, 0x00000069u, 0x000005e2u, 0x000005e1u, 0x0000025du, 0x0003003eu, 0x000005deu, 0x000005e2u, 0x0004003du, 0x00000069u, 0x000005e3u, 0x00000086u, 0x000400a8u, 0x00000069u, 0x000005e4u, 0x000005e3u, 0x000300f7u, 0x000005e6u, 0x00000000u, 0x000400fau, 0x000005e4u, 0x000005e5u, 0x000005e6u, 0x000200f8u, 0x000005e5u, 0x000400a8u, 0x00000069u, 0x000005e8u, 0x000005e2u, 0x0004003du, 0x00000069u, 0x000005e9u, 0x00000087u, 0x000500a7u, 0x00000069u, 0x000005eau, 0x000005e8u, 0x000005e9u, 0x000200f9u, 0x000005e6u, 0x000200f8u, 0x000005e6u, 0x000700f5u, 0x00000069u, 0x000005ebu, 0x000005e3u, 0x000005d6u, 0x000005eau, 0x000005e5u, 0x0003003eu, 0x00000088u, 0x000005ebu, 0x0003003eu, 0x00000089u, 0x000005e2u, 0x0003003eu, 0x00000581u, 0x00000559u, 0x000200f9u, 0x00000523u, 0x000200f8u, 0x00000523u, 0x000700f5u, 0x00000069u, 0x0000eefbu, 0x0000eefcu, 0x00000598u, 0x00000559u, 0x000005e6u, 0x000200feu, 0x0000eefbu, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000092u, 0x00000000u, 0x0000008eu, 0x00030037u, 0x0000008du, 0x0000008fu, 0x00030037u, 0x0000008du, 0x00000090u, 0x00030037u, 0x00000046u, 0x00000091u, 0x000200f8u, 0x00000093u, 0x0004003bu, 0x0000008du, 0x000005f0u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x000005fdu, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x00000602u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x00000607u, 0x00000007u, 0x0004003bu, 0x000005fcu, 0x0000060cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000611u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000619u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000061fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x0000062cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000005f4u, 0x00000091u, 0x00040072u, 0x00000012u, 0x000005f5u, 0x000005f4u, 0x0004007cu, 0x00000011u, 0x000005f6u, 0x000005f5u, 0x000500c4u, 0x00000011u, 0x000005f8u, 0x000005f6u, 0x000005f7u, 0x00070050u, 0x00000028u, 0x000005f9u, 0x000005f8u, 0x000005f8u, 0x000005f8u, 0x000005f8u, 0x00050080u, 0x00000028u, 0x000005fau, 0x000005f3u, 0x000005f9u, 0x0003003eu, 0x000005f0u, 0x000005fau, 0x0004003du, 0x00000028u, 0x000005ffu, 0x0000008fu, 0x0009004fu, 0x00000028u, 0x00000600u, 0x000005ffu, 0x000005ffu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b0u, 0x000005fbu, 0x00000601u, 0x000005fau, 0x00000600u, 0x0003003eu, 0x000005fdu, 0x00000601u, 0x0004003du, 0x00000028u, 0x00000604u, 0x0000008fu, 0x0009004fu, 0x00000028u, 0x00000605u, 0x00000604u, 0x00000604u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b0u, 0x000005fbu, 0x00000606u, 0x000005fau, 0x00000605u, 0x0003003eu, 0x00000602u, 0x00000606u, 0x0004003du, 0x00000028u, 0x00000609u, 0x00000090u, 0x0009004fu, 0x00000028u, 0x0000060au, 0x00000609u, 0x00000609u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500aeu, 0x000005fbu, 0x0000060bu, 0x000005fau, 0x0000060au, 0x0003003eu, 0x00000607u, 0x0000060bu, 0x0004003du, 0x00000028u, 0x0000060eu, 0x00000090u, 0x0009004fu, 0x00000028u, 0x0000060fu, 0x0000060eu, 0x0000060eu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500aeu, 0x000005fbu, 0x00000610u, 0x000005fau, 0x0000060fu, 0x0003003eu, 0x0000060cu, 0x00000610u, 0x000600a9u, 0x00000010u, 0x00000615u, 0x00000601u, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x00000617u, 0x0000060bu, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x00000618u, 0x00000615u, 0x00000617u, 0x0003003eu, 0x00000611u, 0x00000618u, 0x000600a9u, 0x00000010u, 0x0000061bu, 0x00000606u, 0x00000614u, 0x00000613u, 0x000600a9u, 0x00000010u, 0x0000061du, 0x00000610u, 0x00000614u, 0x00000613u, 0x000500c5u, 0x00000010u, 0x0000061eu, 0x0000061bu, 0x0000061du, 0x0003003eu, 0x00000619u, 0x0000061eu, 0x00050084u, 0x00000010u, 0x00000623u, 0x00000618u, 0x00000622u, 0x00050084u, 0x00000010u, 0x0000062au, 0x0000061eu, 0x00000629u, 0x00050080u, 0x00000010u, 0x0000062bu, 0x00000623u, 0x0000062au, 0x0003003eu, 0x0000061fu, 0x0000062bu, 0x00050041u, 0x0000007bu, 0x0000062du, 0x0000061fu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000062eu, 0x0000062du, 0x00050041u, 0x0000007bu, 0x0000062fu, 0x0000061fu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000630u, 0x0000062fu, 0x000500c5u, 0x0000000fu, 0x00000631u, 0x0000062eu, 0x00000630u, 0x00050041u, 0x0000007bu, 0x00000632u, 0x0000061fu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00000633u, 0x00000632u, 0x00050041u, 0x0000007bu, 0x00000634u, 0x0000061fu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000635u, 0x00000634u, 0x000500c5u, 0x0000000fu, 0x00000636u, 0x00000633u, 0x00000635u, 0x000500c5u, 0x0000000fu, 0x00000637u, 0x00000631u, 0x00000636u, 0x0003003eu, 0x0000062cu, 0x00000637u, 0x000400c8u, 0x0000000fu, 0x00000639u, 0x00000637u, 0x000500c7u, 0x0000000fu, 0x0000063au, 0x00000639u, 0x0000046fu, 0x000200feu, 0x0000063au, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000099u, 0x00000000u, 0x00000094u, 0x00030037u, 0x00000046u, 0x00000095u, 0x00030037u, 0x00000046u, 0x00000096u, 0x00030037u, 0x0000006au, 0x00000097u, 0x00030037u, 0x00000046u, 0x00000098u, 0x000200f8u, 0x0000009au, 0x0004003bu, 0x00000046u, 0x0000063du, 0x00000007u, 0x0003003eu, 0x0000063du, 0x00000220u, 0x0004003du, 0x00000008u, 0x0000063eu, 0x00000098u, 0x000300f7u, 0x00000643u, 0x00000000u, 0x000b00fbu, 0x0000063eu, 0x00000643u, 0x00000000u, 0x0000063fu, 0x00000001u, 0x00000640u, 0x00000002u, 0x00000641u, 0x00000003u, 0x00000642u, 0x000200f8u, 0x0000063fu, 0x0004003du, 0x00000069u, 0x00000644u, 0x00000097u, 0x000300f7u, 0x00000646u, 0x00000000u, 0x000400fau, 0x00000644u, 0x00000645u, 0x0000064bu, 0x000200f8u, 0x00000645u, 0x0004003du, 0x00000008u, 0x00000647u, 0x00000096u, 0x0004003du, 0x00000008u, 0x00000648u, 0x00000095u, 0x00050080u, 0x00000008u, 0x00000649u, 0x00000647u, 0x00000648u, 0x0007000cu, 0x00000008u, 0x0000064au, 0x00000001u, 0x00000027u, 0x0000023cu, 0x00000649u, 0x0003003eu, 0x0000063du, 0x0000064au, 0x000200f9u, 0x00000646u, 0x000200f8u, 0x0000064bu, 0x0004003du, 0x00000008u, 0x0000064cu, 0x00000095u, 0x00050082u, 0x00000008u, 0x0000064du, 0x0000064cu, 0x0000022au, 0x000500c7u, 0x00000008u, 0x0000064eu, 0x0000064du, 0x0000023cu, 0x0003003eu, 0x0000063du, 0x0000064eu, 0x000200f9u, 0x00000646u, 0x000200f8u, 0x00000646u, 0x000700f5u, 0x00000008u, 0x0000eeffu, 0x0000064au, 0x00000645u, 0x0000064eu, 0x0000064bu, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000640u, 0x0004003du, 0x00000008u, 0x00000650u, 0x00000095u, 0x0004003du, 0x00000008u, 0x00000651u, 0x00000096u, 0x00050080u, 0x00000008u, 0x00000652u, 0x00000650u, 0x00000651u, 0x000500c7u, 0x00000008u, 0x00000653u, 0x00000652u, 0x0000023cu, 0x0003003eu, 0x0000063du, 0x00000653u, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000641u, 0x0003003eu, 0x0000063du, 0x0000023cu, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000642u, 0x0004003du, 0x00000008u, 0x00000656u, 0x00000096u, 0x0003003eu, 0x0000063du, 0x00000656u, 0x000200f9u, 0x00000643u, 0x000200f8u, 0x00000643u, 0x000d00f5u, 0x00000008u, 0x0000eefeu, 0x00000220u, 0x0000009au, 0x0000eeffu, 0x00000646u, 0x00000653u, 0x00000640u, 0x0000023cu, 0x00000641u, 0x00000656u, 0x00000642u, 0x000200feu, 0x0000eefeu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000009eu, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x0000009cu, 0x00030037u, 0x00000007u, 0x0000009du, 0x000200f8u, 0x0000009fu, 0x0004003bu, 0x0000007bu, 0x0000066au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000068bu, 0x00000007u, 0x0004003bu, 0x0000030du, 0x00000696u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d3u, 0x00000007u, 0x000300f7u, 0x00000661u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00000661u, 0x00000000u, 0x0000065du, 0x00000001u, 0x0000065du, 0x00000002u, 0x0000065eu, 0x00000003u, 0x0000065fu, 0x00000004u, 0x00000660u, 0x000200f8u, 0x0000065du, 0x0004003du, 0x00000006u, 0x00000664u, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x00000665u, 0x00000664u, 0x00000663u, 0x0003003eu, 0x0000009cu, 0x00000665u, 0x0004003du, 0x00000006u, 0x00000666u, 0x0000009du, 0x00050084u, 0x00000006u, 0x00000667u, 0x00000666u, 0x00000662u, 0x0004003du, 0x00000006u, 0x00000668u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x00000669u, 0x00000668u, 0x00000667u, 0x0003003eu, 0x0000009cu, 0x00000669u, 0x0004003du, 0x00000006u, 0x0000066fu, 0x0000009cu, 0x000500c6u, 0x00000006u, 0x00000670u, 0x0000066fu, 0x00000464u, 0x00060041u, 0x00000671u, 0x00000672u, 0x0000066eu, 0x00000220u, 0x00000670u, 0x0004003du, 0x0000000fu, 0x00000673u, 0x00000672u, 0x0003003eu, 0x0000066au, 0x00000673u, 0x0004003du, 0x00000006u, 0x0000067du, 0x0000009cu, 0x000500c2u, 0x00000006u, 0x0000067eu, 0x0000067du, 0x0000022au, 0x00060041u, 0x00000671u, 0x0000067fu, 0x0000067cu, 0x00000220u, 0x0000067eu, 0x0004003du, 0x0000000fu, 0x00000680u, 0x0000067fu, 0x00070050u, 0x00000010u, 0x00000681u, 0x00000673u, 0x00000673u, 0x00000673u, 0x00000680u, 0x0003003eu, 0x00000675u, 0x00000681u, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x0000065eu, 0x0004003du, 0x00000006u, 0x00000684u, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x00000685u, 0x00000684u, 0x00000683u, 0x0003003eu, 0x0000009cu, 0x00000685u, 0x0004003du, 0x00000006u, 0x00000686u, 0x0000009du, 0x00050084u, 0x00000006u, 0x00000688u, 0x00000686u, 0x00000687u, 0x0004003du, 0x00000006u, 0x00000689u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x0000068au, 0x00000689u, 0x00000688u, 0x0003003eu, 0x0000009cu, 0x0000068au, 0x0004003du, 0x00000006u, 0x00000690u, 0x0000009cu, 0x000500c6u, 0x00000006u, 0x00000691u, 0x00000690u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00000693u, 0x0000068fu, 0x00000220u, 0x00000691u, 0x0004003du, 0x00000011u, 0x00000694u, 0x00000693u, 0x00040071u, 0x00000006u, 0x00000695u, 0x00000694u, 0x0003003eu, 0x0000068bu, 0x00000695u, 0x000500c2u, 0x00000006u, 0x00000698u, 0x00000695u, 0x00000314u, 0x000500c2u, 0x00000006u, 0x0000069au, 0x00000695u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x0000069cu, 0x00000695u, 0x00000386u, 0x00060050u, 0x0000030cu, 0x0000069du, 0x00000698u, 0x0000069au, 0x0000069cu, 0x000500c7u, 0x0000030cu, 0x000006a0u, 0x0000069du, 0x0000f399u, 0x0003003eu, 0x00000696u, 0x000006a0u, 0x00040071u, 0x00000047u, 0x000006a2u, 0x000006a0u, 0x0004003du, 0x00000006u, 0x000006a3u, 0x0000009cu, 0x00060041u, 0x00000671u, 0x000006a4u, 0x0000067cu, 0x00000220u, 0x000006a3u, 0x0004003du, 0x0000000fu, 0x000006a5u, 0x000006a4u, 0x000500c4u, 0x0000000fu, 0x000006a6u, 0x000006a5u, 0x0000038eu, 0x000500c7u, 0x00000006u, 0x000006a8u, 0x00000695u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000006a9u, 0x000006a8u, 0x0000023cu, 0x00040071u, 0x0000000fu, 0x000006aau, 0x000006a9u, 0x000500c5u, 0x0000000fu, 0x000006abu, 0x000006a6u, 0x000006aau, 0x00050051u, 0x0000000fu, 0x000006acu, 0x000006a2u, 0x00000000u, 0x00050051u, 0x0000000fu, 0x000006adu, 0x000006a2u, 0x00000001u, 0x00050051u, 0x0000000fu, 0x000006aeu, 0x000006a2u, 0x00000002u, 0x00070050u, 0x00000010u, 0x000006afu, 0x000006acu, 0x000006adu, 0x000006aeu, 0x000006abu, 0x0003003eu, 0x00000675u, 0x000006afu, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x0000065fu, 0x0004003du, 0x00000006u, 0x000006b1u, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x000006b2u, 0x000006b1u, 0x00000683u, 0x0003003eu, 0x0000009cu, 0x000006b2u, 0x0004003du, 0x00000006u, 0x000006b3u, 0x0000009du, 0x00050084u, 0x00000006u, 0x000006b5u, 0x000006b3u, 0x000006b4u, 0x0004003du, 0x00000006u, 0x000006b6u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x000006b7u, 0x000006b6u, 0x000006b5u, 0x0003003eu, 0x0000009cu, 0x000006b7u, 0x0004003du, 0x00000006u, 0x000006b9u, 0x0000009cu, 0x000500c6u, 0x00000006u, 0x000006bau, 0x000006b9u, 0x0000045cu, 0x00060041u, 0x00000692u, 0x000006bbu, 0x0000068fu, 0x00000220u, 0x000006bau, 0x0004003du, 0x00000011u, 0x000006bcu, 0x000006bbu, 0x00040071u, 0x00000006u, 0x000006bdu, 0x000006bcu, 0x0003003eu, 0x000006b8u, 0x000006bdu, 0x000500c2u, 0x00000006u, 0x000006bfu, 0x000006bdu, 0x00000314u, 0x00040071u, 0x0000000fu, 0x000006c0u, 0x000006bfu, 0x00060050u, 0x00000047u, 0x000006c1u, 0x000006c0u, 0x000006c0u, 0x000006c0u, 0x000500c7u, 0x00000006u, 0x000006c4u, 0x000006bdu, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x000006c5u, 0x000006c4u, 0x00070050u, 0x00000010u, 0x000006c9u, 0x000006c0u, 0x000006c0u, 0x000006c0u, 0x000006c5u, 0x0003003eu, 0x00000675u, 0x000006c9u, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x00000660u, 0x0004003du, 0x00000006u, 0x000006ccu, 0x0000009cu, 0x000500c7u, 0x00000006u, 0x000006cdu, 0x000006ccu, 0x000006cbu, 0x0003003eu, 0x0000009cu, 0x000006cdu, 0x0004003du, 0x00000006u, 0x000006ceu, 0x0000009du, 0x00050084u, 0x00000006u, 0x000006d0u, 0x000006ceu, 0x000006cfu, 0x0004003du, 0x00000006u, 0x000006d1u, 0x0000009cu, 0x00050080u, 0x00000006u, 0x000006d2u, 0x000006d1u, 0x000006d0u, 0x0003003eu, 0x0000009cu, 0x000006d2u, 0x0004003du, 0x00000006u, 0x000006d8u, 0x0000009cu, 0x00060041u, 0x000006d9u, 0x000006dau, 0x000006d7u, 0x00000220u, 0x000006d8u, 0x0004003du, 0x00000006u, 0x000006dbu, 0x000006dau, 0x0003003eu, 0x000006d3u, 0x000006dbu, 0x00070050u, 0x000004f7u, 0x000006ddu, 0x000006dbu, 0x000006dbu, 0x000006dbu, 0x000006dbu, 0x000500c2u, 0x000004f7u, 0x000006e0u, 0x000006ddu, 0x000006dfu, 0x000500c7u, 0x000004f7u, 0x000006e2u, 0x000006e0u, 0x000006e1u, 0x00040071u, 0x00000010u, 0x000006e3u, 0x000006e2u, 0x0003003eu, 0x00000675u, 0x000006e3u, 0x000200f9u, 0x00000661u, 0x000200f8u, 0x00000661u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a0u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x000000a1u, 0x0004003bu, 0x00000007u, 0x000006f2u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000070cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000717u, 0x00000007u, 0x000300f7u, 0x000006e8u, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x000006e8u, 0x00000002u, 0x000006e6u, 0x00000003u, 0x000006e7u, 0x000200f8u, 0x000006e6u, 0x00050041u, 0x000006e9u, 0x000006ebu, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000006ecu, 0x000006ebu, 0x000500c2u, 0x0000000fu, 0x000006edu, 0x000006ecu, 0x0000038fu, 0x00050041u, 0x000006e9u, 0x000006eeu, 0x00000675u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000006efu, 0x000006eeu, 0x000500c7u, 0x0000000fu, 0x000006f0u, 0x000006efu, 0x00000621u, 0x000500c5u, 0x0000000fu, 0x000006f1u, 0x000006edu, 0x000006f0u, 0x0003003eu, 0x000006eau, 0x000006f1u, 0x00050041u, 0x000006e9u, 0x000006f3u, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x000006f4u, 0x000006f3u, 0x00040071u, 0x00000006u, 0x000006f5u, 0x000006f4u, 0x000500c7u, 0x00000006u, 0x000006f6u, 0x000006f5u, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000006f8u, 0x000006f6u, 0x000006f7u, 0x0003003eu, 0x000006f2u, 0x000006f8u, 0x00050041u, 0x000006e9u, 0x000006f9u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000006fau, 0x000006f9u, 0x00040071u, 0x00000006u, 0x000006fbu, 0x000006fau, 0x000500c7u, 0x00000006u, 0x000006fcu, 0x000006fbu, 0x0000069eu, 0x000500c4u, 0x00000006u, 0x000006fdu, 0x000006fcu, 0x0000045cu, 0x000500c5u, 0x00000006u, 0x000006ffu, 0x000006f8u, 0x000006fdu, 0x0003003eu, 0x000006f2u, 0x000006ffu, 0x0004003du, 0x0000000fu, 0x00000701u, 0x000006eeu, 0x00040071u, 0x00000006u, 0x00000702u, 0x00000701u, 0x000500c7u, 0x00000006u, 0x00000703u, 0x00000702u, 0x0000069eu, 0x000500c2u, 0x00000006u, 0x00000705u, 0x00000703u, 0x00000704u, 0x000500c5u, 0x00000006u, 0x00000707u, 0x000006ffu, 0x00000705u, 0x0003003eu, 0x000006f2u, 0x00000707u, 0x00040071u, 0x00000011u, 0x0000070au, 0x00000707u, 0x0003003eu, 0x00000708u, 0x0000070au, 0x000200f9u, 0x000006e8u, 0x000200f8u, 0x000006e7u, 0x0004003du, 0x00000010u, 0x0000070du, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x0000070eu, 0x0000070du, 0x0000070du, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x0000070fu, 0x0000070eu, 0x0003003eu, 0x0000070cu, 0x0000070fu, 0x00050041u, 0x00000007u, 0x00000711u, 0x0000070cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000712u, 0x00000711u, 0x000500c4u, 0x00000006u, 0x00000713u, 0x00000712u, 0x00000314u, 0x00050041u, 0x00000007u, 0x00000714u, 0x0000070cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000715u, 0x00000714u, 0x000500c5u, 0x00000006u, 0x00000716u, 0x00000713u, 0x00000715u, 0x0003003eu, 0x00000710u, 0x00000716u, 0x000500c7u, 0x00000006u, 0x00000719u, 0x00000716u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000071au, 0x00000719u, 0x00000464u, 0x0003003eu, 0x00000717u, 0x0000071au, 0x000500c2u, 0x00000006u, 0x0000071cu, 0x00000716u, 0x00000386u, 0x00040071u, 0x00000011u, 0x0000071du, 0x0000071cu, 0x0003003eu, 0x00000708u, 0x0000071du, 0x000500c7u, 0x00000006u, 0x0000071fu, 0x00000716u, 0x00000464u, 0x000500c4u, 0x00000006u, 0x00000720u, 0x0000071fu, 0x00000386u, 0x000500c5u, 0x00000006u, 0x00000722u, 0x00000720u, 0x0000071au, 0x00040071u, 0x0000000fu, 0x00000723u, 0x00000722u, 0x0003003eu, 0x000006eau, 0x00000723u, 0x000200f9u, 0x000006e8u, 0x000200f8u, 0x000006e8u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a2u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x000000a3u, 0x0004003bu, 0x00000007u, 0x00000726u, 0x00000007u, 0x0004003du, 0x00000011u, 0x00000727u, 0x00000708u, 0x00040071u, 0x00000006u, 0x00000728u, 0x00000727u, 0x000500c4u, 0x00000006u, 0x00000729u, 0x00000728u, 0x00000704u, 0x0004003du, 0x0000000fu, 0x0000072au, 0x000006eau, 0x00040071u, 0x00000006u, 0x0000072bu, 0x0000072au, 0x000500c5u, 0x00000006u, 0x0000072cu, 0x00000729u, 0x0000072bu, 0x0003003eu, 0x00000726u, 0x0000072cu, 0x000300f7u, 0x0000072fu, 0x00000000u, 0x000700fbu, 0x0000065cu, 0x0000072fu, 0x00000002u, 0x0000072du, 0x00000003u, 0x0000072eu, 0x000200f8u, 0x0000072du, 0x000500c2u, 0x00000006u, 0x00000732u, 0x0000072cu, 0x00000731u, 0x000500c7u, 0x00000006u, 0x00000733u, 0x00000732u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x00000734u, 0x00000733u, 0x00050041u, 0x000006e9u, 0x00000735u, 0x00000675u, 0x0000032du, 0x0003003eu, 0x00000735u, 0x00000734u, 0x000500c2u, 0x00000006u, 0x00000738u, 0x0000072cu, 0x00000737u, 0x000500c7u, 0x00000006u, 0x00000739u, 0x00000738u, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x0000073au, 0x00000739u, 0x00050041u, 0x000006e9u, 0x0000073bu, 0x00000675u, 0x0000045cu, 0x0003003eu, 0x0000073bu, 0x0000073au, 0x000500c2u, 0x00000006u, 0x0000073du, 0x0000072cu, 0x0000032du, 0x000500c7u, 0x00000006u, 0x0000073eu, 0x0000073du, 0x0000069eu, 0x00040071u, 0x0000000fu, 0x0000073fu, 0x0000073eu, 0x00050041u, 0x000006e9u, 0x00000740u, 0x00000675u, 0x00000386u, 0x0003003eu, 0x00000740u, 0x0000073fu, 0x000500c7u, 0x00000006u, 0x00000743u, 0x0000072cu, 0x00000742u, 0x000500c4u, 0x00000006u, 0x00000744u, 0x00000743u, 0x00000737u, 0x00040071u, 0x0000000fu, 0x00000745u, 0x00000744u, 0x00050041u, 0x000006e9u, 0x00000746u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x00000746u, 0x00000745u, 0x000200f9u, 0x0000072fu, 0x000200f8u, 0x0000072eu, 0x000500c2u, 0x00000006u, 0x00000749u, 0x0000072cu, 0x00000731u, 0x000500c7u, 0x00000006u, 0x0000074au, 0x00000749u, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x0000074bu, 0x0000074au, 0x00050041u, 0x000006e9u, 0x0000074cu, 0x00000675u, 0x0000032du, 0x0003003eu, 0x0000074cu, 0x0000074bu, 0x000500c2u, 0x00000006u, 0x0000074eu, 0x0000072cu, 0x00000386u, 0x000500c7u, 0x00000006u, 0x0000074fu, 0x0000074eu, 0x000006c3u, 0x00040071u, 0x0000000fu, 0x00000750u, 0x0000074fu, 0x00050041u, 0x000006e9u, 0x00000751u, 0x00000675u, 0x00000464u, 0x0003003eu, 0x00000751u, 0x00000750u, 0x000200f9u, 0x0000072fu, 0x000200f8u, 0x0000072fu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a6u, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000a4u, 0x00030037u, 0x00000007u, 0x000000a5u, 0x000200f8u, 0x000000a7u, 0x0004003bu, 0x00000056u, 0x0000075du, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000756u, 0x000000a4u, 0x000500c7u, 0x00000006u, 0x00000757u, 0x00000756u, 0x00000683u, 0x0003003eu, 0x000000a4u, 0x00000757u, 0x0004003du, 0x00000006u, 0x00000758u, 0x000000a5u, 0x00050084u, 0x00000006u, 0x0000075au, 0x00000758u, 0x00000759u, 0x0004003du, 0x00000006u, 0x0000075bu, 0x000000a4u, 0x00050080u, 0x00000006u, 0x0000075cu, 0x0000075bu, 0x0000075au, 0x0003003eu, 0x000000a4u, 0x0000075cu, 0x0004003du, 0x00000006u, 0x0000075eu, 0x000000a4u, 0x000500c6u, 0x00000006u, 0x0000075fu, 0x0000075eu, 0x0000045cu, 0x00060041u, 0x00000692u, 0x00000760u, 0x0000068fu, 0x00000220u, 0x0000075fu, 0x0004003du, 0x00000011u, 0x00000761u, 0x00000760u, 0x0003003eu, 0x0000075du, 0x00000761u, 0x000500c2u, 0x00000011u, 0x00000763u, 0x00000761u, 0x000005f2u, 0x0003003eu, 0x00000708u, 0x00000763u, 0x0004003du, 0x00000006u, 0x00000764u, 0x000000a4u, 0x00060041u, 0x00000671u, 0x00000765u, 0x0000067cu, 0x00000220u, 0x00000764u, 0x0004003du, 0x0000000fu, 0x00000766u, 0x00000765u, 0x000500c7u, 0x00000011u, 0x00000768u, 0x00000761u, 0x000005f7u, 0x000500c4u, 0x00000011u, 0x00000769u, 0x00000768u, 0x000005f2u, 0x00040071u, 0x0000000fu, 0x0000076au, 0x00000769u, 0x000500c5u, 0x0000000fu, 0x0000076bu, 0x00000766u, 0x0000076au, 0x0003003eu, 0x000006eau, 0x0000076bu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000aau, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000a8u, 0x00030037u, 0x00000007u, 0x000000a9u, 0x000200f8u, 0x000000abu, 0x0004003bu, 0x000007bfu, 0x000007c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cdu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000007f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007fau, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x0000081cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000081fu, 0x00000007u, 0x0004003du, 0x00000069u, 0x0000076cu, 0x00000755u, 0x000300f7u, 0x0000076eu, 0x00000000u, 0x000400fau, 0x0000076cu, 0x0000076du, 0x0000076eu, 0x000200f8u, 0x0000076du, 0x000300f7u, 0x00000774u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00000774u, 0x00000000u, 0x0000076fu, 0x00000001u, 0x00000770u, 0x00000002u, 0x00000771u, 0x00000003u, 0x00000772u, 0x00000004u, 0x00000773u, 0x000200f8u, 0x0000076fu, 0x0004003du, 0x00000006u, 0x00000775u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x00000776u, 0x00000775u, 0x00000663u, 0x0003003eu, 0x000000a8u, 0x00000776u, 0x0004003du, 0x00000006u, 0x00000777u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x00000778u, 0x00000777u, 0x00000662u, 0x0004003du, 0x00000006u, 0x00000779u, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000077au, 0x00000779u, 0x00000778u, 0x0003003eu, 0x000000a8u, 0x0000077au, 0x0004003du, 0x00000006u, 0x0000077bu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x0000077cu, 0x0000077bu, 0x00000464u, 0x00060041u, 0x00000671u, 0x0000077du, 0x0000066eu, 0x00000220u, 0x0000077cu, 0x0003003eu, 0x0000077du, 0x00000388u, 0x0004003du, 0x00000006u, 0x0000077eu, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x0000077fu, 0x0000077eu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00000780u, 0x0000077fu, 0x0000032du, 0x000300f7u, 0x00000782u, 0x00000000u, 0x000400fau, 0x00000780u, 0x00000781u, 0x00000782u, 0x000200f8u, 0x00000781u, 0x0004003du, 0x00000006u, 0x00000783u, 0x000000a8u, 0x000500c2u, 0x00000006u, 0x00000784u, 0x00000783u, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00000785u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000786u, 0x00000785u, 0x00060041u, 0x00000671u, 0x00000787u, 0x0000067cu, 0x00000220u, 0x00000784u, 0x0003003eu, 0x00000787u, 0x00000786u, 0x000200f9u, 0x00000782u, 0x000200f8u, 0x00000782u, 0x000300f7u, 0x0000078fu, 0x00000000u, 0x000400fau, 0x0000078du, 0x0000078eu, 0x0000078fu, 0x000200f8u, 0x0000078eu, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x00000791u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x00000792u, 0x00000791u, 0x00000464u, 0x00050080u, 0x00000006u, 0x00000793u, 0x00000792u, 0x00000662u, 0x00060041u, 0x00000671u, 0x00000794u, 0x0000066eu, 0x00000220u, 0x00000793u, 0x0003003eu, 0x00000794u, 0x0000046fu, 0x000200f9u, 0x0000078fu, 0x000200f8u, 0x0000078fu, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000770u, 0x0004003du, 0x00000006u, 0x00000796u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x00000797u, 0x00000796u, 0x00000663u, 0x0003003eu, 0x000000a8u, 0x00000797u, 0x0004003du, 0x00000006u, 0x00000798u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x00000799u, 0x00000798u, 0x00000662u, 0x0004003du, 0x00000006u, 0x0000079au, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000079bu, 0x0000079au, 0x00000799u, 0x0003003eu, 0x000000a8u, 0x0000079bu, 0x0004003du, 0x00000006u, 0x0000079cu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x0000079du, 0x0000079cu, 0x00000464u, 0x00050041u, 0x000006e9u, 0x0000079eu, 0x00000675u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x0000079fu, 0x0000079eu, 0x00060041u, 0x00000671u, 0x000007a0u, 0x0000066eu, 0x00000220u, 0x0000079du, 0x0003003eu, 0x000007a0u, 0x0000079fu, 0x0004003du, 0x00000006u, 0x000007a1u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007a2u, 0x000007a1u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x000007a3u, 0x000007a2u, 0x0000032du, 0x000300f7u, 0x000007a5u, 0x00000000u, 0x000400fau, 0x000007a3u, 0x000007a4u, 0x000007a5u, 0x000200f8u, 0x000007a4u, 0x0004003du, 0x00000006u, 0x000007a6u, 0x000000a8u, 0x000500c2u, 0x00000006u, 0x000007a7u, 0x000007a6u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000007a9u, 0x0000079eu, 0x00040071u, 0x00000006u, 0x000007aau, 0x000007a9u, 0x0004007cu, 0x00000008u, 0x000007abu, 0x000007aau, 0x000500c7u, 0x00000008u, 0x000007acu, 0x000007abu, 0x0000022au, 0x00050084u, 0x00000008u, 0x000007adu, 0x000007acu, 0x00000230u, 0x00040072u, 0x0000037bu, 0x000007aeu, 0x000007adu, 0x0004007cu, 0x0000000fu, 0x000007afu, 0x000007aeu, 0x00060041u, 0x00000671u, 0x000007b0u, 0x0000067cu, 0x00000220u, 0x000007a7u, 0x0003003eu, 0x000007b0u, 0x000007afu, 0x000200f9u, 0x000007a5u, 0x000200f8u, 0x000007a5u, 0x000300f7u, 0x000007b2u, 0x00000000u, 0x000400fau, 0x0000078du, 0x000007b1u, 0x000007b2u, 0x000200f8u, 0x000007b1u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x000007b3u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x000007b4u, 0x000007b3u, 0x00000464u, 0x00050080u, 0x00000006u, 0x000007b5u, 0x000007b4u, 0x00000662u, 0x00060041u, 0x00000671u, 0x000007b6u, 0x0000066eu, 0x00000220u, 0x000007b5u, 0x0003003eu, 0x000007b6u, 0x0000046fu, 0x000200f9u, 0x000007b2u, 0x000200f8u, 0x000007b2u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000771u, 0x0004003du, 0x00000006u, 0x000007b8u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007b9u, 0x000007b8u, 0x00000683u, 0x0003003eu, 0x000000a8u, 0x000007b9u, 0x0004003du, 0x00000006u, 0x000007bau, 0x000000a9u, 0x00050084u, 0x00000006u, 0x000007bcu, 0x000007bau, 0x000007bbu, 0x0004003du, 0x00000006u, 0x000007bdu, 0x000000a8u, 0x00050080u, 0x00000006u, 0x000007beu, 0x000007bdu, 0x000007bcu, 0x0003003eu, 0x000000a8u, 0x000007beu, 0x0004003du, 0x00000010u, 0x000007c1u, 0x00000675u, 0x00040071u, 0x000004f7u, 0x000007c2u, 0x000007c1u, 0x0003003eu, 0x000007c0u, 0x000007c2u, 0x0004003du, 0x000004f7u, 0x000007c3u, 0x000007c0u, 0x0008004fu, 0x0000030cu, 0x000007c4u, 0x000007c3u, 0x000007c3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000030cu, 0x000007c6u, 0x000007c4u, 0x0000f399u, 0x0004003du, 0x000004f7u, 0x000007c7u, 0x000007c0u, 0x0009004fu, 0x000004f7u, 0x000007c8u, 0x000007c7u, 0x000007c6u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000007c0u, 0x000007c8u, 0x00050041u, 0x00000007u, 0x000007cau, 0x000007c0u, 0x00000464u, 0x0004003du, 0x00000006u, 0x000007cbu, 0x000007cau, 0x000500c2u, 0x00000006u, 0x000007ccu, 0x000007cbu, 0x00000737u, 0x0003003eu, 0x000007c9u, 0x000007ccu, 0x00050041u, 0x00000007u, 0x000007ceu, 0x000007c0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000007cfu, 0x000007ceu, 0x000500c4u, 0x00000006u, 0x000007d0u, 0x000007cfu, 0x00000314u, 0x00050041u, 0x00000007u, 0x000007d1u, 0x000007c0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000007d2u, 0x000007d1u, 0x000500c4u, 0x00000006u, 0x000007d3u, 0x000007d2u, 0x00000464u, 0x000500c5u, 0x00000006u, 0x000007d4u, 0x000007d0u, 0x000007d3u, 0x00050041u, 0x00000007u, 0x000007d5u, 0x000007c0u, 0x00000386u, 0x0004003du, 0x00000006u, 0x000007d6u, 0x000007d5u, 0x000500c2u, 0x00000006u, 0x000007d7u, 0x000007d6u, 0x00000386u, 0x000500c5u, 0x00000006u, 0x000007d8u, 0x000007d4u, 0x000007d7u, 0x000500c2u, 0x00000006u, 0x000007dau, 0x000007ccu, 0x00000386u, 0x000500c5u, 0x00000006u, 0x000007dbu, 0x000007d8u, 0x000007dau, 0x0003003eu, 0x000007cdu, 0x000007dbu, 0x0004003du, 0x00000006u, 0x000007dcu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x000007ddu, 0x000007dcu, 0x0000045cu, 0x00040071u, 0x00000011u, 0x000007dfu, 0x000007dbu, 0x00060041u, 0x00000692u, 0x000007e0u, 0x0000068fu, 0x00000220u, 0x000007ddu, 0x0003003eu, 0x000007e0u, 0x000007dfu, 0x0004003du, 0x00000006u, 0x000007e1u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007e3u, 0x000007ccu, 0x00000464u, 0x00040071u, 0x0000000fu, 0x000007e4u, 0x000007e3u, 0x00060041u, 0x00000671u, 0x000007e5u, 0x0000067cu, 0x00000220u, 0x000007e1u, 0x0003003eu, 0x000007e5u, 0x000007e4u, 0x000300f7u, 0x000007e7u, 0x00000000u, 0x000400fau, 0x0000078du, 0x000007e6u, 0x000007e7u, 0x000200f8u, 0x000007e6u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x000007e8u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x000007e9u, 0x000007e8u, 0x0000045cu, 0x00050080u, 0x00000006u, 0x000007ebu, 0x000007e9u, 0x000007eau, 0x00060041u, 0x00000692u, 0x000007edu, 0x0000068fu, 0x00000220u, 0x000007ebu, 0x0003003eu, 0x000007edu, 0x000007ecu, 0x000200f9u, 0x000007e7u, 0x000200f8u, 0x000007e7u, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000772u, 0x0004003du, 0x00000006u, 0x000007efu, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x000007f0u, 0x000007efu, 0x00000683u, 0x0003003eu, 0x000000a8u, 0x000007f0u, 0x0004003du, 0x00000006u, 0x000007f1u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x000007f3u, 0x000007f1u, 0x000007f2u, 0x0004003du, 0x00000006u, 0x000007f4u, 0x000000a8u, 0x00050080u, 0x00000006u, 0x000007f5u, 0x000007f4u, 0x000007f3u, 0x0003003eu, 0x000000a8u, 0x000007f5u, 0x0004003du, 0x00000010u, 0x000007f7u, 0x00000675u, 0x0007004fu, 0x0000006bu, 0x000007f8u, 0x000007f7u, 0x000007f7u, 0x00000000u, 0x00000003u, 0x00040071u, 0x000000b0u, 0x000007f9u, 0x000007f8u, 0x0003003eu, 0x000007f6u, 0x000007f9u, 0x00050041u, 0x00000007u, 0x000007fbu, 0x000007f6u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000007fcu, 0x000007fbu, 0x000500c4u, 0x00000006u, 0x000007fdu, 0x000007fcu, 0x00000314u, 0x00050041u, 0x00000007u, 0x000007feu, 0x000007f6u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000007ffu, 0x000007feu, 0x000500c5u, 0x00000006u, 0x00000800u, 0x000007fdu, 0x000007ffu, 0x0003003eu, 0x000007fau, 0x00000800u, 0x0004003du, 0x00000006u, 0x00000801u, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x00000802u, 0x00000801u, 0x0000045cu, 0x00040071u, 0x00000011u, 0x00000804u, 0x00000800u, 0x00060041u, 0x00000692u, 0x00000805u, 0x0000068fu, 0x00000220u, 0x00000802u, 0x0003003eu, 0x00000805u, 0x00000804u, 0x0004003du, 0x00000006u, 0x00000806u, 0x000000a8u, 0x0004003du, 0x00000006u, 0x00000808u, 0x000007feu, 0x000500c7u, 0x00000006u, 0x00000809u, 0x00000808u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x0000080au, 0x00000809u, 0x00000464u, 0x00040071u, 0x0000000fu, 0x0000080bu, 0x0000080au, 0x00060041u, 0x00000671u, 0x0000080cu, 0x0000067cu, 0x00000220u, 0x00000806u, 0x0003003eu, 0x0000080cu, 0x0000080bu, 0x000300f7u, 0x0000080eu, 0x00000000u, 0x000400fau, 0x0000078du, 0x0000080du, 0x0000080eu, 0x000200f8u, 0x0000080du, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x0000080fu, 0x000000a8u, 0x000500c6u, 0x00000006u, 0x00000810u, 0x0000080fu, 0x0000045cu, 0x00050080u, 0x00000006u, 0x00000812u, 0x00000810u, 0x00000811u, 0x00060041u, 0x00000692u, 0x00000813u, 0x0000068fu, 0x00000220u, 0x00000812u, 0x0003003eu, 0x00000813u, 0x000007ecu, 0x000200f9u, 0x0000080eu, 0x000200f8u, 0x0000080eu, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000773u, 0x0004003du, 0x00000006u, 0x00000815u, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x00000816u, 0x00000815u, 0x000006cbu, 0x0003003eu, 0x000000a8u, 0x00000816u, 0x0004003du, 0x00000006u, 0x00000817u, 0x000000a9u, 0x00050084u, 0x00000006u, 0x00000819u, 0x00000817u, 0x00000818u, 0x0004003du, 0x00000006u, 0x0000081au, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000081bu, 0x0000081au, 0x00000819u, 0x0003003eu, 0x000000a8u, 0x0000081bu, 0x0004003du, 0x00000010u, 0x0000081du, 0x00000675u, 0x00040071u, 0x000004f7u, 0x0000081eu, 0x0000081du, 0x0003003eu, 0x0000081cu, 0x0000081eu, 0x00050041u, 0x00000007u, 0x00000820u, 0x0000081cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000821u, 0x00000820u, 0x000500c4u, 0x00000006u, 0x00000822u, 0x00000821u, 0x000006deu, 0x00050041u, 0x00000007u, 0x00000823u, 0x0000081cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000824u, 0x00000823u, 0x000500c4u, 0x00000006u, 0x00000825u, 0x00000824u, 0x00000330u, 0x000500c5u, 0x00000006u, 0x00000826u, 0x00000822u, 0x00000825u, 0x00050041u, 0x00000007u, 0x00000827u, 0x0000081cu, 0x00000386u, 0x0004003du, 0x00000006u, 0x00000828u, 0x00000827u, 0x000500c4u, 0x00000006u, 0x00000829u, 0x00000828u, 0x00000314u, 0x000500c5u, 0x00000006u, 0x0000082au, 0x00000826u, 0x00000829u, 0x00050041u, 0x00000007u, 0x0000082bu, 0x0000081cu, 0x00000464u, 0x0004003du, 0x00000006u, 0x0000082cu, 0x0000082bu, 0x000500c4u, 0x00000006u, 0x0000082du, 0x0000082cu, 0x0000032du, 0x000500c5u, 0x00000006u, 0x0000082eu, 0x0000082au, 0x0000082du, 0x0003003eu, 0x0000081fu, 0x0000082eu, 0x0004003du, 0x00000006u, 0x0000082fu, 0x000000a8u, 0x00060041u, 0x000006d9u, 0x00000831u, 0x000006d7u, 0x00000220u, 0x0000082fu, 0x0003003eu, 0x00000831u, 0x0000082eu, 0x0004003du, 0x00000006u, 0x00000832u, 0x000000a8u, 0x00050084u, 0x00000006u, 0x00000833u, 0x00000386u, 0x00000832u, 0x00050041u, 0x000006e9u, 0x00000834u, 0x00000675u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000835u, 0x00000834u, 0x00040071u, 0x00000006u, 0x00000836u, 0x00000835u, 0x0004007cu, 0x00000008u, 0x00000837u, 0x00000836u, 0x000500c7u, 0x00000008u, 0x00000838u, 0x00000837u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00000839u, 0x00000838u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x0000083au, 0x00000839u, 0x0004007cu, 0x0000000fu, 0x0000083bu, 0x0000083au, 0x00060041u, 0x00000671u, 0x0000083cu, 0x0000067cu, 0x00000220u, 0x00000833u, 0x0003003eu, 0x0000083cu, 0x0000083bu, 0x0004003du, 0x00000006u, 0x0000083du, 0x000000a8u, 0x00050084u, 0x00000006u, 0x0000083eu, 0x00000386u, 0x0000083du, 0x00050080u, 0x00000006u, 0x0000083fu, 0x0000083eu, 0x0000045cu, 0x00050041u, 0x000006e9u, 0x00000840u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000841u, 0x00000840u, 0x00040071u, 0x00000006u, 0x00000842u, 0x00000841u, 0x0004007cu, 0x00000008u, 0x00000843u, 0x00000842u, 0x000500c7u, 0x00000008u, 0x00000844u, 0x00000843u, 0x0000022au, 0x00050084u, 0x00000008u, 0x00000845u, 0x00000844u, 0x00000230u, 0x00040072u, 0x0000037bu, 0x00000846u, 0x00000845u, 0x0004007cu, 0x0000000fu, 0x00000847u, 0x00000846u, 0x00060041u, 0x00000671u, 0x00000848u, 0x0000067cu, 0x00000220u, 0x0000083fu, 0x0003003eu, 0x00000848u, 0x00000847u, 0x000300f7u, 0x0000084au, 0x00000000u, 0x000400fau, 0x0000078du, 0x00000849u, 0x0000084au, 0x000200f8u, 0x00000849u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x0000084bu, 0x000000a8u, 0x00050080u, 0x00000006u, 0x0000084du, 0x0000084bu, 0x0000084cu, 0x00060041u, 0x000006d9u, 0x0000084fu, 0x000006d7u, 0x00000220u, 0x0000084du, 0x0003003eu, 0x0000084fu, 0x0000084eu, 0x000200f9u, 0x0000084au, 0x000200f8u, 0x0000084au, 0x000200f9u, 0x00000774u, 0x000200f8u, 0x00000774u, 0x000200f9u, 0x0000076eu, 0x000200f8u, 0x0000076eu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000aeu, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000acu, 0x00030037u, 0x00000007u, 0x000000adu, 0x000200f8u, 0x000000afu, 0x000300f7u, 0x00000855u, 0x00000000u, 0x000400fau, 0x00000853u, 0x00000854u, 0x00000855u, 0x000200f8u, 0x00000854u, 0x0004003du, 0x00000069u, 0x00000857u, 0x00000856u, 0x000300f7u, 0x00000859u, 0x00000000u, 0x000400fau, 0x00000857u, 0x00000858u, 0x00000859u, 0x000200f8u, 0x00000858u, 0x0004003du, 0x00000006u, 0x0000085au, 0x000000acu, 0x000500c7u, 0x00000006u, 0x0000085bu, 0x0000085au, 0x00000683u, 0x0003003eu, 0x000000acu, 0x0000085bu, 0x0004003du, 0x00000006u, 0x0000085cu, 0x000000adu, 0x00050084u, 0x00000006u, 0x0000085eu, 0x0000085cu, 0x0000085du, 0x0004003du, 0x00000006u, 0x0000085fu, 0x000000acu, 0x00050080u, 0x00000006u, 0x00000860u, 0x0000085fu, 0x0000085eu, 0x0003003eu, 0x000000acu, 0x00000860u, 0x0004003du, 0x00000006u, 0x00000861u, 0x000000acu, 0x000500c6u, 0x00000006u, 0x00000862u, 0x00000861u, 0x0000045cu, 0x0004003du, 0x00000011u, 0x00000863u, 0x00000708u, 0x000500c4u, 0x00000011u, 0x00000864u, 0x00000863u, 0x000005f2u, 0x0004003du, 0x0000000fu, 0x00000865u, 0x000006eau, 0x000500c2u, 0x0000000fu, 0x00000866u, 0x00000865u, 0x000005f2u, 0x00040071u, 0x00000011u, 0x00000867u, 0x00000866u, 0x000500c5u, 0x00000011u, 0x00000868u, 0x00000864u, 0x00000867u, 0x00060041u, 0x00000692u, 0x00000869u, 0x0000068fu, 0x00000220u, 0x00000862u, 0x0003003eu, 0x00000869u, 0x00000868u, 0x0004003du, 0x00000006u, 0x0000086au, 0x000000acu, 0x0004003du, 0x0000000fu, 0x0000086bu, 0x000006eau, 0x00040071u, 0x00000011u, 0x0000086cu, 0x0000086bu, 0x000500c7u, 0x00000011u, 0x0000086du, 0x0000086cu, 0x000005f7u, 0x00040071u, 0x0000000fu, 0x0000086eu, 0x0000086du, 0x00060041u, 0x00000671u, 0x0000086fu, 0x0000067cu, 0x00000220u, 0x0000086au, 0x0003003eu, 0x0000086fu, 0x0000086eu, 0x000300f7u, 0x00000871u, 0x00000000u, 0x000400fau, 0x0000078du, 0x00000870u, 0x00000871u, 0x000200f8u, 0x00000870u, 0x000300e1u, 0x0000045cu, 0x00000790u, 0x0004003du, 0x00000006u, 0x00000872u, 0x000000acu, 0x000500c6u, 0x00000006u, 0x00000873u, 0x00000872u, 0x0000045cu, 0x00050080u, 0x00000006u, 0x00000875u, 0x00000873u, 0x00000874u, 0x00060041u, 0x00000692u, 0x00000876u, 0x0000068fu, 0x00000220u, 0x00000875u, 0x0003003eu, 0x00000876u, 0x000007ecu, 0x000200f9u, 0x00000871u, 0x000200f8u, 0x00000871u, 0x000200f9u, 0x00000859u, 0x000200f8u, 0x00000859u, 0x000200f9u, 0x00000855u, 0x000200f8u, 0x00000855u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000b8u, 0x00000000u, 0x000000b2u, 0x00030037u, 0x000000b1u, 0x000000b3u, 0x00030037u, 0x00000007u, 0x000000b4u, 0x00030037u, 0x00000007u, 0x000000b5u, 0x00030037u, 0x00000007u, 0x000000b6u, 0x00030037u, 0x00000007u, 0x000000b7u, 0x000200f8u, 0x000000b9u, 0x0004003bu, 0x000000b1u, 0x00000880u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000088au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000892u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b1u, 0x00000007u, 0x0003003eu, 0x00000755u, 0x00000536u, 0x0003003eu, 0x00000856u, 0x00000536u, 0x0004003du, 0x000000b0u, 0x00000877u, 0x000000b3u, 0x0004003du, 0x00000006u, 0x00000878u, 0x000000b4u, 0x0004003du, 0x00000006u, 0x00000879u, 0x000000b5u, 0x00050050u, 0x000000b0u, 0x0000087au, 0x00000878u, 0x00000879u, 0x000500b0u, 0x0000087bu, 0x0000087cu, 0x00000877u, 0x0000087au, 0x0004009bu, 0x00000069u, 0x0000087du, 0x0000087cu, 0x000300f7u, 0x0000087fu, 0x00000000u, 0x000400fau, 0x0000087du, 0x0000087eu, 0x0000087fu, 0x000200f8u, 0x0000087eu, 0x0004003du, 0x000000b0u, 0x00000881u, 0x000000b3u, 0x00050050u, 0x000000b0u, 0x00000885u, 0x00000884u, 0x00000884u, 0x000500c7u, 0x000000b0u, 0x00000886u, 0x00000881u, 0x00000885u, 0x0003003eu, 0x00000880u, 0x00000886u, 0x0004003du, 0x000000b0u, 0x00000887u, 0x000000b3u, 0x00050050u, 0x000000efu, 0x00000888u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x00000889u, 0x00000887u, 0x00000888u, 0x0003003eu, 0x000000b3u, 0x00000889u, 0x00050041u, 0x00000007u, 0x0000088bu, 0x00000880u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000088cu, 0x0000088bu, 0x00050084u, 0x00000006u, 0x0000088eu, 0x0000088cu, 0x0000088du, 0x00050041u, 0x00000007u, 0x0000088fu, 0x00000880u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000890u, 0x0000088fu, 0x00050080u, 0x00000006u, 0x00000891u, 0x0000088eu, 0x00000890u, 0x0003003eu, 0x0000088au, 0x00000891u, 0x0004003du, 0x00000006u, 0x00000893u, 0x000000b6u, 0x0004003du, 0x00000006u, 0x00000894u, 0x000000b4u, 0x000500c2u, 0x00000006u, 0x00000895u, 0x00000894u, 0x0000078bu, 0x00050041u, 0x00000007u, 0x00000896u, 0x000000b3u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000897u, 0x00000896u, 0x00050084u, 0x00000006u, 0x00000898u, 0x00000895u, 0x00000897u, 0x00050080u, 0x00000006u, 0x00000899u, 0x00000893u, 0x00000898u, 0x00050041u, 0x00000007u, 0x0000089au, 0x000000b3u, 0x0000032du, 0x0004003du, 0x00000006u, 0x0000089bu, 0x0000089au, 0x00050080u, 0x00000006u, 0x0000089cu, 0x00000899u, 0x0000089bu, 0x0003003eu, 0x00000892u, 0x0000089cu, 0x0003003eu, 0x0000089eu, 0x0000089cu, 0x0003003eu, 0x000008a0u, 0x0000089cu, 0x0003003eu, 0x000008a2u, 0x00000891u, 0x00060039u, 0x00000002u, 0x000008a4u, 0x0000009eu, 0x000008a0u, 0x000008a2u, 0x0004003du, 0x00000006u, 0x000008a5u, 0x000000b7u, 0x0004003du, 0x00000006u, 0x000008a6u, 0x000000b4u, 0x000500c2u, 0x00000006u, 0x000008a7u, 0x000008a6u, 0x0000078bu, 0x0004003du, 0x00000006u, 0x000008a9u, 0x00000896u, 0x00050084u, 0x00000006u, 0x000008aau, 0x000008a7u, 0x000008a9u, 0x00050080u, 0x00000006u, 0x000008abu, 0x000008a5u, 0x000008aau, 0x0004003du, 0x00000006u, 0x000008adu, 0x0000089au, 0x00050080u, 0x00000006u, 0x000008aeu, 0x000008abu, 0x000008adu, 0x0003003eu, 0x00000892u, 0x000008aeu, 0x0003003eu, 0x000008afu, 0x000008aeu, 0x0003003eu, 0x000008b1u, 0x00000891u, 0x00060039u, 0x00000002u, 0x000008b3u, 0x000000a6u, 0x000008afu, 0x000008b1u, 0x000200f9u, 0x0000087fu, 0x000200f8u, 0x0000087fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000bdu, 0x00000000u, 0x000000bau, 0x00030037u, 0x000000b1u, 0x000000bbu, 0x00030037u, 0x00000007u, 0x000000bcu, 0x000200f8u, 0x000000beu, 0x0004003bu, 0x00000007u, 0x000008b4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000008c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000008d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008dfu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008b5u, 0x000000bbu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000008b6u, 0x000008b5u, 0x000500c2u, 0x00000006u, 0x000008b7u, 0x000008b6u, 0x00000386u, 0x0004003du, 0x00000006u, 0x000008b8u, 0x000000bcu, 0x00050080u, 0x00000006u, 0x000008b9u, 0x000008b8u, 0x00000464u, 0x000500c2u, 0x00000006u, 0x000008bau, 0x000008b9u, 0x00000386u, 0x00050084u, 0x00000006u, 0x000008bbu, 0x000008b7u, 0x000008bau, 0x00050041u, 0x00000007u, 0x000008bcu, 0x000000bbu, 0x0000032du, 0x0004003du, 0x00000006u, 0x000008bdu, 0x000008bcu, 0x000500c2u, 0x00000006u, 0x000008beu, 0x000008bdu, 0x00000386u, 0x00050080u, 0x00000006u, 0x000008bfu, 0x000008bbu, 0x000008beu, 0x0003003eu, 0x000008b4u, 0x000008bfu, 0x0004003du, 0x000000b0u, 0x000008c1u, 0x000000bbu, 0x000500c7u, 0x000000b0u, 0x000008c3u, 0x000008c1u, 0x0000f39au, 0x0003003eu, 0x000008c0u, 0x000008c3u, 0x0004003du, 0x00000069u, 0x000008c5u, 0x00000755u, 0x000600a9u, 0x00000006u, 0x000008c6u, 0x000008c5u, 0x0000045cu, 0x0000032du, 0x0004003du, 0x00000069u, 0x000008c7u, 0x00000856u, 0x000600a9u, 0x00000006u, 0x000008c8u, 0x000008c7u, 0x0000045cu, 0x0000032du, 0x00050084u, 0x00000006u, 0x000008c9u, 0x00000386u, 0x000008c8u, 0x00050080u, 0x00000006u, 0x000008cau, 0x000008c6u, 0x000008c9u, 0x0003003eu, 0x000008c4u, 0x000008cau, 0x00050041u, 0x00000007u, 0x000008cbu, 0x000008c0u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000008ccu, 0x000008cbu, 0x00050041u, 0x00000007u, 0x000008cdu, 0x000008c0u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000008ceu, 0x000008cdu, 0x00050084u, 0x00000006u, 0x000008cfu, 0x000008ceu, 0x00000704u, 0x00050080u, 0x00000006u, 0x000008d0u, 0x000008ccu, 0x000008cfu, 0x00050084u, 0x00000006u, 0x000008d1u, 0x00000386u, 0x000008d0u, 0x000500c4u, 0x00000006u, 0x000008d3u, 0x000008cau, 0x000008d1u, 0x0003003eu, 0x000008c4u, 0x000008d3u, 0x0003003eu, 0x000008d4u, 0x00000559u, 0x000200f9u, 0x000008d5u, 0x000200f8u, 0x000008d5u, 0x000700f5u, 0x00000069u, 0x0000ef03u, 0x00000559u, 0x000000beu, 0x0000f3dbu, 0x000008d8u, 0x000400f6u, 0x000008d7u, 0x000008d8u, 0x00000000u, 0x000200f9u, 0x000008d6u, 0x000200f8u, 0x000008d6u, 0x00050152u, 0x00000006u, 0x000008dau, 0x00000464u, 0x000008bfu, 0x000500aau, 0x00000069u, 0x000008dcu, 0x000008dau, 0x000008bfu, 0x000300f7u, 0x000008deu, 0x00000000u, 0x000400fau, 0x000008dcu, 0x000008ddu, 0x000008deu, 0x000200f8u, 0x000008ddu, 0x00060168u, 0x00000006u, 0x000008e1u, 0x00000464u, 0x00000000u, 0x000008d3u, 0x0003003eu, 0x000008dfu, 0x000008e1u, 0x0004014du, 0x00000069u, 0x000008e2u, 0x00000464u, 0x000300f7u, 0x000008e4u, 0x00000000u, 0x000400fau, 0x000008e2u, 0x000008e3u, 0x000008e4u, 0x000200f8u, 0x000008e3u, 0x00050080u, 0x00000006u, 0x000008eau, 0x000008e8u, 0x000008bfu, 0x00060041u, 0x000006d9u, 0x000008ebu, 0x000006d7u, 0x00000220u, 0x000008eau, 0x000700f1u, 0x00000006u, 0x000008edu, 0x000008ebu, 0x0000045cu, 0x0000032du, 0x000008e1u, 0x000200f9u, 0x000008e4u, 0x000200f8u, 0x000008e4u, 0x0003003eu, 0x000008d4u, 0x00000536u, 0x000200f9u, 0x000008deu, 0x000200f8u, 0x000008deu, 0x000600a9u, 0x00000069u, 0x0000f3dbu, 0x000008dcu, 0x00000536u, 0x0000ef03u, 0x000200f9u, 0x000008d8u, 0x000200f8u, 0x000008d8u, 0x000400fau, 0x0000f3dbu, 0x000008d5u, 0x000008d7u, 0x000200f8u, 0x000008d7u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000c4u, 0x00000000u, 0x000000b2u, 0x00030037u, 0x000000b1u, 0x000000bfu, 0x00030037u, 0x00000007u, 0x000000c0u, 0x00030037u, 0x00000007u, 0x000000c1u, 0x00030037u, 0x00000007u, 0x000000c2u, 0x00030037u, 0x00000007u, 0x000000c3u, 0x000200f8u, 0x000000c5u, 0x0004003bu, 0x00000007u, 0x000008f7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000008fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000903u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000090bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000915u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000917u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000923u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000925u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000092cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000092eu, 0x00000007u, 0x0004003du, 0x000000b0u, 0x000008efu, 0x000000bfu, 0x0004003du, 0x00000006u, 0x000008f0u, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000008f1u, 0x000000c1u, 0x00050050u, 0x000000b0u, 0x000008f2u, 0x000008f0u, 0x000008f1u, 0x000500b0u, 0x0000087bu, 0x000008f3u, 0x000008efu, 0x000008f2u, 0x0004009bu, 0x00000069u, 0x000008f4u, 0x000008f3u, 0x000300f7u, 0x000008f6u, 0x00000000u, 0x000400fau, 0x000008f4u, 0x000008f5u, 0x000008f6u, 0x000200f8u, 0x000008f5u, 0x0004003du, 0x00000006u, 0x000008f8u, 0x000000c0u, 0x000500c2u, 0x00000006u, 0x000008f9u, 0x000008f8u, 0x0000078bu, 0x0003003eu, 0x000008f7u, 0x000008f9u, 0x0004003du, 0x000000b0u, 0x000008fbu, 0x000000bfu, 0x00050050u, 0x000000b0u, 0x000008feu, 0x000008fdu, 0x000008fdu, 0x000500c7u, 0x000000b0u, 0x000008ffu, 0x000008fbu, 0x000008feu, 0x0003003eu, 0x000008fau, 0x000008ffu, 0x0004003du, 0x000000b0u, 0x00000900u, 0x000000bfu, 0x00050050u, 0x000000efu, 0x00000901u, 0x0000078bu, 0x0000078bu, 0x000500c2u, 0x000000b0u, 0x00000902u, 0x00000900u, 0x00000901u, 0x0003003eu, 0x000000bfu, 0x00000902u, 0x00050041u, 0x00000007u, 0x00000904u, 0x000008fau, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000905u, 0x00000904u, 0x00050084u, 0x00000006u, 0x00000907u, 0x00000905u, 0x00000906u, 0x00050041u, 0x00000007u, 0x00000908u, 0x000008fau, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000909u, 0x00000908u, 0x00050080u, 0x00000006u, 0x0000090au, 0x00000907u, 0x00000909u, 0x0003003eu, 0x00000903u, 0x0000090au, 0x0004003du, 0x00000006u, 0x0000090cu, 0x000000c2u, 0x00050041u, 0x00000007u, 0x0000090eu, 0x000000bfu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000090fu, 0x0000090eu, 0x00050084u, 0x00000006u, 0x00000910u, 0x000008f9u, 0x0000090fu, 0x00050080u, 0x00000006u, 0x00000911u, 0x0000090cu, 0x00000910u, 0x00050041u, 0x00000007u, 0x00000912u, 0x000000bfu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000913u, 0x00000912u, 0x00050080u, 0x00000006u, 0x00000914u, 0x00000911u, 0x00000913u, 0x0003003eu, 0x0000090bu, 0x00000914u, 0x0003003eu, 0x00000915u, 0x00000914u, 0x0003003eu, 0x00000917u, 0x0000090au, 0x00060039u, 0x00000002u, 0x00000919u, 0x000000aau, 0x00000915u, 0x00000917u, 0x0004003du, 0x00000006u, 0x0000091au, 0x000000c3u, 0x0004003du, 0x00000006u, 0x0000091du, 0x0000090eu, 0x00050084u, 0x00000006u, 0x0000091eu, 0x000008f9u, 0x0000091du, 0x00050080u, 0x00000006u, 0x0000091fu, 0x0000091au, 0x0000091eu, 0x0004003du, 0x00000006u, 0x00000921u, 0x00000912u, 0x00050080u, 0x00000006u, 0x00000922u, 0x0000091fu, 0x00000921u, 0x0003003eu, 0x0000090bu, 0x00000922u, 0x0003003eu, 0x00000923u, 0x00000922u, 0x0003003eu, 0x00000925u, 0x0000090au, 0x00060039u, 0x00000002u, 0x00000927u, 0x000000aeu, 0x00000923u, 0x00000925u, 0x000300f7u, 0x0000092bu, 0x00000000u, 0x000400fau, 0x00000929u, 0x0000092au, 0x0000092bu, 0x000200f8u, 0x0000092au, 0x0004003du, 0x000000b0u, 0x0000092du, 0x000000bfu, 0x0003003eu, 0x0000092cu, 0x0000092du, 0x0003003eu, 0x0000092eu, 0x000008f9u, 0x00060039u, 0x00000002u, 0x00000930u, 0x000000bdu, 0x0000092cu, 0x0000092eu, 0x000200f9u, 0x0000092bu, 0x000200f8u, 0x0000092bu, 0x000200f9u, 0x000008f6u, 0x000200f8u, 0x000008f6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000010u, 0x000000c8u, 0x00000000u, 0x000000c6u, 0x00030037u, 0x0000006au, 0x000000c7u, 0x000200f8u, 0x000000c9u, 0x0004003bu, 0x0000007bu, 0x00000931u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000933u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00000942u, 0x00000007u, 0x0004003du, 0x00000069u, 0x00000932u, 0x000000c7u, 0x000300f7u, 0x00000935u, 0x00000000u, 0x000400fau, 0x00000932u, 0x00000934u, 0x0000093au, 0x000200f8u, 0x00000934u, 0x00050041u, 0x000006e9u, 0x00000936u, 0x00000675u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000937u, 0x00000936u, 0x000500c7u, 0x0000000fu, 0x00000939u, 0x00000937u, 0x00000938u, 0x0003003eu, 0x00000933u, 0x00000939u, 0x000200f9u, 0x00000935u, 0x000200f8u, 0x0000093au, 0x0003003eu, 0x00000933u, 0x00000938u, 0x000200f9u, 0x00000935u, 0x000200f8u, 0x00000935u, 0x000700f5u, 0x0000000fu, 0x0000ef08u, 0x00000939u, 0x00000934u, 0x00000938u, 0x0000093au, 0x0003003eu, 0x00000931u, 0x0000ef08u, 0x000300f7u, 0x00000941u, 0x00000000u, 0x000d00fbu, 0x0000065cu, 0x00000941u, 0x00000000u, 0x0000093cu, 0x00000001u, 0x0000093du, 0x00000002u, 0x0000093eu, 0x00000003u, 0x0000093fu, 0x00000004u, 0x00000940u, 0x000200f8u, 0x0000093cu, 0x0003003eu, 0x00000942u, 0x00000943u, 0x0003003eu, 0x00000931u, 0x00000938u, 0x000200f9u, 0x00000941u, 0x000200f8u, 0x0000093du, 0x0004003du, 0x00000010u, 0x00000945u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x00000946u, 0x00000945u, 0x00000945u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000942u, 0x00000946u, 0x0003003eu, 0x00000931u, 0x00000938u, 0x000200f9u, 0x00000941u, 0x000200f8u, 0x0000093eu, 0x0004003du, 0x00000010u, 0x00000948u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x00000949u, 0x00000948u, 0x00000948u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000047u, 0x0000094cu, 0x00000949u, 0x0000f3b2u, 0x0003003eu, 0x00000942u, 0x0000094cu, 0x000200f9u, 0x00000941u, 0x000200f8u, 0x0000093fu, 0x0004003du, 0x00000010u, 0x0000094eu, 0x00000675u, 0x0008004fu, 0x00000047u, 0x0000094fu, 0x0000094eu, 0x0000094eu, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000942u, 0x0000094fu, 0x000200f9u, 0x00000941u, 0x000200f8u, 0x00000940u, 0x0004003du, 0x00000010u, 0x00000951u, 0x00000675u, 0x0008004fu, 0x00000047u, 0x00000952u, 0x00000951u, 0x00000951u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000942u, 0x00000952u, 0x000200f9u, 0x00000941u, 0x000200f8u, 0x00000941u, 0x000f00f5u, 0x0000000fu, 0x0000ef0cu, 0x0000ef08u, 0x00000935u, 0x00000938u, 0x0000093cu, 0x00000938u, 0x0000093du, 0x0000ef08u, 0x0000093eu, 0x0000ef08u, 0x0000093fu, 0x0000ef08u, 0x00000940u, 0x000f00f5u, 0x00000047u, 0x0000ef09u, 0x0000ef0bu, 0x00000935u, 0x00000943u, 0x0000093cu, 0x00000946u, 0x0000093du, 0x0000094cu, 0x0000093eu, 0x0000094fu, 0x0000093fu, 0x00000952u, 0x00000940u, 0x00050051u, 0x0000000fu, 0x00000957u, 0x0000ef09u, 0x00000000u, 0x00050051u, 0x0000000fu, 0x00000958u, 0x0000ef09u, 0x00000001u, 0x00050051u, 0x0000000fu, 0x00000959u, 0x0000ef09u, 0x00000002u, 0x00070050u, 0x00000010u, 0x0000095au, 0x00000957u, 0x00000958u, 0x00000959u, 0x0000ef0cu, 0x000200feu, 0x0000095au, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000ccu, 0x00000000u, 0x000000cau, 0x00030037u, 0x00000068u, 0x000000cbu, 0x000200f8u, 0x000000cdu, 0x000300f7u, 0x0000095fu, 0x00000000u, 0x000400fau, 0x0000095du, 0x0000095eu, 0x00000964u, 0x000200f8u, 0x0000095eu, 0x0004003du, 0x00000010u, 0x00000960u, 0x000000cbu, 0x0008004fu, 0x00000047u, 0x00000961u, 0x00000960u, 0x00000960u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000010u, 0x00000962u, 0x00000675u, 0x0009004fu, 0x00000010u, 0x00000963u, 0x00000962u, 0x00000960u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000675u, 0x00000963u, 0x000200f9u, 0x0000095fu, 0x000200f8u, 0x00000964u, 0x0004003du, 0x00000010u, 0x00000965u, 0x000000cbu, 0x0003003eu, 0x00000675u, 0x00000965u, 0x000200f9u, 0x0000095fu, 0x000200f8u, 0x0000095fu, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000d0u, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000007u, 0x000000ceu, 0x00030037u, 0x00000007u, 0x000000cfu, 0x000200f8u, 0x000000d1u, 0x0004003bu, 0x00000068u, 0x00000970u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000973u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000977u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000097bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000097fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000098du, 0x00000007u, 0x000300f7u, 0x00000969u, 0x00000000u, 0x000900fbu, 0x0000065cu, 0x00000969u, 0x00000000u, 0x00000966u, 0x00000001u, 0x00000967u, 0x00000002u, 0x00000968u, 0x000200f8u, 0x00000966u, 0x0003003eu, 0x00000675u, 0x00000613u, 0x0003003eu, 0x00000755u, 0x00000559u, 0x000200f9u, 0x00000969u, 0x000200f8u, 0x00000967u, 0x0004003du, 0x00000006u, 0x0000096bu, 0x000000ceu, 0x000500c7u, 0x00000006u, 0x0000096cu, 0x0000096bu, 0x000006c3u, 0x0003003eu, 0x000000ceu, 0x0000096cu, 0x0004003du, 0x00000006u, 0x0000096du, 0x000000ceu, 0x00040071u, 0x0000000fu, 0x0000096eu, 0x0000096du, 0x00070050u, 0x00000010u, 0x0000096fu, 0x0000096eu, 0x0000096eu, 0x0000096eu, 0x0000096eu, 0x0003003eu, 0x00000970u, 0x0000096fu, 0x00050039u, 0x00000002u, 0x00000971u, 0x000000ccu, 0x00000970u, 0x000200f9u, 0x00000969u, 0x000200f8u, 0x00000968u, 0x0004003du, 0x00000006u, 0x00000974u, 0x000000ceu, 0x000500c2u, 0x00000006u, 0x00000975u, 0x00000974u, 0x0000025du, 0x000500c7u, 0x00000006u, 0x00000976u, 0x00000975u, 0x0000069eu, 0x0003003eu, 0x00000973u, 0x00000976u, 0x0004003du, 0x00000006u, 0x00000978u, 0x000000ceu, 0x000500c2u, 0x00000006u, 0x00000979u, 0x00000978u, 0x00000230u, 0x000500c7u, 0x00000006u, 0x0000097au, 0x00000979u, 0x0000069eu, 0x0003003eu, 0x00000977u, 0x0000097au, 0x0004003du, 0x00000006u, 0x0000097cu, 0x000000ceu, 0x000500c4u, 0x00000006u, 0x0000097du, 0x0000097cu, 0x0000022du, 0x000500c7u, 0x00000006u, 0x0000097eu, 0x0000097du, 0x0000069eu, 0x0003003eu, 0x0000097bu, 0x0000097eu, 0x0004003du, 0x00000006u, 0x00000980u, 0x000000ceu, 0x000500c7u, 0x00000006u, 0x00000981u, 0x00000980u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000983u, 0x00000981u, 0x00000982u, 0x0003003eu, 0x0000097fu, 0x00000983u, 0x00040071u, 0x0000000fu, 0x00000985u, 0x00000976u, 0x00040071u, 0x0000000fu, 0x00000987u, 0x0000097au, 0x00040071u, 0x0000000fu, 0x00000989u, 0x0000097eu, 0x00040071u, 0x0000000fu, 0x0000098bu, 0x00000983u, 0x00070050u, 0x00000010u, 0x0000098cu, 0x00000985u, 0x00000987u, 0x00000989u, 0x0000098bu, 0x0003003eu, 0x0000098du, 0x0000098cu, 0x00050039u, 0x00000002u, 0x0000098eu, 0x000000ccu, 0x0000098du, 0x000200f9u, 0x00000969u, 0x000200f8u, 0x00000969u, 0x000300f7u, 0x00000992u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000991u, 0x00000992u, 0x000200f8u, 0x00000991u, 0x00040039u, 0x00000002u, 0x00000993u, 0x000000a0u, 0x000200f9u, 0x00000992u, 0x000200f8u, 0x00000992u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000d4u, 0x00000000u, 0x000000d2u, 0x00030037u, 0x00000007u, 0x000000d3u, 0x000200f8u, 0x000000d5u, 0x0004003bu, 0x00000007u, 0x00000999u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000099du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009a5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009c7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009e4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009f1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009ffu, 0x00000007u, 0x000300f7u, 0x00000998u, 0x00000000u, 0x000b00fbu, 0x0000065cu, 0x00000998u, 0x00000004u, 0x00000994u, 0x00000002u, 0x00000995u, 0x00000003u, 0x00000996u, 0x00000001u, 0x00000997u, 0x000200f8u, 0x00000994u, 0x0004003du, 0x00000006u, 0x0000099au, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x0000099bu, 0x0000099au, 0x000006deu, 0x000500c7u, 0x00000006u, 0x0000099cu, 0x0000099bu, 0x000006c3u, 0x0003003eu, 0x00000999u, 0x0000099cu, 0x0004003du, 0x00000006u, 0x0000099eu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x0000099fu, 0x0000099eu, 0x00000330u, 0x000500c7u, 0x00000006u, 0x000009a0u, 0x0000099fu, 0x000006c3u, 0x0003003eu, 0x0000099du, 0x000009a0u, 0x0004003du, 0x00000006u, 0x000009a2u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009a3u, 0x000009a2u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x000009a4u, 0x000009a3u, 0x000006c3u, 0x0003003eu, 0x000009a1u, 0x000009a4u, 0x0004003du, 0x00000006u, 0x000009a6u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009a7u, 0x000009a6u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x000009a8u, 0x000009a7u, 0x000006c3u, 0x0003003eu, 0x000009a5u, 0x000009a8u, 0x00040071u, 0x0000000fu, 0x000009aau, 0x0000099cu, 0x00040071u, 0x0000000fu, 0x000009acu, 0x000009a0u, 0x00040071u, 0x0000000fu, 0x000009aeu, 0x000009a4u, 0x00040071u, 0x0000000fu, 0x000009b0u, 0x000009a8u, 0x00070050u, 0x00000010u, 0x000009b1u, 0x000009aau, 0x000009acu, 0x000009aeu, 0x000009b0u, 0x0003003eu, 0x000009b2u, 0x000009b1u, 0x00050039u, 0x00000002u, 0x000009b3u, 0x000000ccu, 0x000009b2u, 0x000200f9u, 0x00000998u, 0x000200f8u, 0x00000995u, 0x0004003du, 0x00000006u, 0x000009b5u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000009b6u, 0x000009b5u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x000009b7u, 0x000009b6u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000009b8u, 0x000009b7u, 0x00000330u, 0x0004003du, 0x00000006u, 0x000009b9u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009bau, 0x000009b9u, 0x000009b8u, 0x0003003eu, 0x000000d3u, 0x000009bau, 0x0004003du, 0x00000006u, 0x000009bcu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009bdu, 0x000009bcu, 0x00000314u, 0x000500c7u, 0x00000006u, 0x000009beu, 0x000009bdu, 0x0000069eu, 0x0003003eu, 0x000009bbu, 0x000009beu, 0x0004003du, 0x00000006u, 0x000009c0u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009c1u, 0x000009c0u, 0x00000464u, 0x000500c7u, 0x00000006u, 0x000009c2u, 0x000009c1u, 0x0000069eu, 0x0003003eu, 0x000009bfu, 0x000009c2u, 0x0004003du, 0x00000006u, 0x000009c4u, 0x000000d3u, 0x000500c4u, 0x00000006u, 0x000009c5u, 0x000009c4u, 0x00000386u, 0x000500c7u, 0x00000006u, 0x000009c6u, 0x000009c5u, 0x0000069eu, 0x0003003eu, 0x000009c3u, 0x000009c6u, 0x0004003du, 0x00000006u, 0x000009c8u, 0x000000d3u, 0x000500c7u, 0x00000006u, 0x000009c9u, 0x000009c8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000009cau, 0x000009c9u, 0x00000982u, 0x0003003eu, 0x000009c7u, 0x000009cau, 0x00040071u, 0x0000000fu, 0x000009ccu, 0x000009beu, 0x00040071u, 0x0000000fu, 0x000009ceu, 0x000009c2u, 0x00040071u, 0x0000000fu, 0x000009d0u, 0x000009c6u, 0x00040071u, 0x0000000fu, 0x000009d2u, 0x000009cau, 0x00070050u, 0x00000010u, 0x000009d3u, 0x000009ccu, 0x000009ceu, 0x000009d0u, 0x000009d2u, 0x0003003eu, 0x000009d4u, 0x000009d3u, 0x00050039u, 0x00000002u, 0x000009d5u, 0x000000ccu, 0x000009d4u, 0x000200f9u, 0x00000998u, 0x000200f8u, 0x00000996u, 0x0004003du, 0x00000006u, 0x000009d7u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000009d8u, 0x000009d7u, 0x0000045cu, 0x000500c6u, 0x00000006u, 0x000009d9u, 0x000009d8u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000009dau, 0x000009d9u, 0x00000330u, 0x0004003du, 0x00000006u, 0x000009dbu, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009dcu, 0x000009dbu, 0x000009dau, 0x0003003eu, 0x000000d3u, 0x000009dcu, 0x0004003du, 0x00000006u, 0x000009deu, 0x000000d3u, 0x000500c7u, 0x00000006u, 0x000009dfu, 0x000009deu, 0x000009ddu, 0x0003003eu, 0x000000d3u, 0x000009dfu, 0x0004003du, 0x00000006u, 0x000009e1u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009e2u, 0x000009e1u, 0x00000314u, 0x000500c7u, 0x00000006u, 0x000009e3u, 0x000009e2u, 0x000006c3u, 0x0003003eu, 0x000009e0u, 0x000009e3u, 0x0004003du, 0x00000006u, 0x000009e5u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009e6u, 0x000009e5u, 0x0000032du, 0x000500c7u, 0x00000006u, 0x000009e7u, 0x000009e6u, 0x000006c3u, 0x0003003eu, 0x000009e4u, 0x000009e7u, 0x00040071u, 0x0000000fu, 0x000009e9u, 0x000009e3u, 0x00040071u, 0x0000000fu, 0x000009efu, 0x000009e7u, 0x00070050u, 0x00000010u, 0x000009f0u, 0x000009e9u, 0x000009e9u, 0x000009e9u, 0x000009efu, 0x0003003eu, 0x000009f1u, 0x000009f0u, 0x00050039u, 0x00000002u, 0x000009f2u, 0x000000ccu, 0x000009f1u, 0x000200f9u, 0x00000998u, 0x000200f8u, 0x00000997u, 0x0004003du, 0x00000006u, 0x000009f4u, 0x0000089eu, 0x000500c7u, 0x00000006u, 0x000009f5u, 0x000009f4u, 0x00000464u, 0x000500c6u, 0x00000006u, 0x000009f6u, 0x000009f5u, 0x00000464u, 0x00050084u, 0x00000006u, 0x000009f7u, 0x000009f6u, 0x00000314u, 0x0004003du, 0x00000006u, 0x000009f8u, 0x000000d3u, 0x000500c2u, 0x00000006u, 0x000009f9u, 0x000009f8u, 0x000009f7u, 0x0003003eu, 0x000000d3u, 0x000009f9u, 0x0004003du, 0x00000006u, 0x000009fau, 0x000000d3u, 0x000500c7u, 0x00000006u, 0x000009fbu, 0x000009fau, 0x000006c3u, 0x0003003eu, 0x000000d3u, 0x000009fbu, 0x0004003du, 0x00000006u, 0x000009fcu, 0x000000d3u, 0x00040071u, 0x0000000fu, 0x000009fdu, 0x000009fcu, 0x00070050u, 0x00000010u, 0x000009feu, 0x000009fdu, 0x000009fdu, 0x000009fdu, 0x000009fdu, 0x0003003eu, 0x000009ffu, 0x000009feu, 0x00050039u, 0x00000002u, 0x00000a00u, 0x000000ccu, 0x000009ffu, 0x000200f9u, 0x00000998u, 0x000200f8u, 0x00000998u, 0x000300f7u, 0x00000a04u, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000a03u, 0x00000a04u, 0x000200f8u, 0x00000a03u, 0x00040039u, 0x00000002u, 0x00000a05u, 0x000000a0u, 0x000200f9u, 0x00000a04u, 0x000200f8u, 0x00000a04u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000ddu, 0x00000000u, 0x000000d8u, 0x00030037u, 0x00000046u, 0x000000d9u, 0x00030037u, 0x00000046u, 0x000000dau, 0x00030037u, 0x00000007u, 0x000000dbu, 0x00030037u, 0x000000d7u, 0x000000dcu, 0x000200f8u, 0x000000deu, 0x0004003bu, 0x0000007bu, 0x00007da8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007da7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007da6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007da5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007da4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d9eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007d9cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d9bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d9au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007d95u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007d94u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d93u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007d92u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a06u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a0au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a0fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000a14u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000a17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a2au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a2du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a32u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a37u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a3cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a41u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a47u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a4du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a53u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000a59u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a5au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000a5du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a61u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a71u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a72u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000a73u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a74u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a76u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a77u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00000a78u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00000a7au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a7cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a7eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a7fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000a81u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a82u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a84u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a86u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000a87u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000a88u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000aa2u, 0x00000007u, 0x0004003bu, 0x00000067u, 0x00000aa8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000aaau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000aacu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000aaeu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ab0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ab2u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000ab4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ab6u, 0x00000007u, 0x0004003bu, 0x0000041bu, 0x00000abdu, 0x00000007u, 0x0004003bu, 0x00000067u, 0x00000abeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000ac0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ac2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ac4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ac6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ac8u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000acau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000accu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000ad4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ad5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ad8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ae0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ae2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000ae3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000ae5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000af0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000af5u, 0x00000007u, 0x00050041u, 0x00000046u, 0x00000a07u, 0x000000dcu, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000a08u, 0x00000a07u, 0x000500c3u, 0x00000008u, 0x00000a09u, 0x00000a08u, 0x00000260u, 0x0003003eu, 0x00000a06u, 0x00000a09u, 0x0004003du, 0x00000008u, 0x00000a0cu, 0x00000a07u, 0x000500c7u, 0x00000008u, 0x00000a0eu, 0x00000a0cu, 0x00000a0du, 0x0003003eu, 0x00000a0au, 0x00000a0eu, 0x00050041u, 0x0000007bu, 0x00000a10u, 0x000000dcu, 0x0000022du, 0x0004003du, 0x0000000fu, 0x00000a11u, 0x00000a10u, 0x00040071u, 0x00000006u, 0x00000a12u, 0x00000a11u, 0x0004007cu, 0x00000008u, 0x00000a13u, 0x00000a12u, 0x0003003eu, 0x00000a0fu, 0x00000a13u, 0x00050041u, 0x00000068u, 0x00000a15u, 0x000000dcu, 0x00000220u, 0x0004003du, 0x00000010u, 0x00000a16u, 0x00000a15u, 0x0003003eu, 0x00000a14u, 0x00000a16u, 0x00050041u, 0x0000007bu, 0x00000a18u, 0x000000dcu, 0x00000230u, 0x0004003du, 0x0000000fu, 0x00000a19u, 0x00000a18u, 0x0003003eu, 0x00000a17u, 0x00000a19u, 0x0004003du, 0x00000006u, 0x00000a21u, 0x000000dbu, 0x00080041u, 0x00000671u, 0x00000a22u, 0x00000a20u, 0x00000220u, 0x00000a21u, 0x00000220u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00000a23u, 0x00000a22u, 0x00040071u, 0x00000006u, 0x00000a24u, 0x00000a23u, 0x0003003eu, 0x00000a1au, 0x00000a24u, 0x0004003du, 0x00000006u, 0x00000a27u, 0x000000dbu, 0x0003003eu, 0x00000a26u, 0x00000a27u, 0x00050039u, 0x00000014u, 0x00000a28u, 0x00000017u, 0x00000a26u, 0x00050051u, 0x00000010u, 0x00007d96u, 0x00000a28u, 0x00000008u, 0x0003003eu, 0x00007d92u, 0x00007d96u, 0x00050051u, 0x00000010u, 0x00007d97u, 0x00000a28u, 0x00000009u, 0x0003003eu, 0x00007d93u, 0x00007d97u, 0x00050051u, 0x00000011u, 0x00007d98u, 0x00000a28u, 0x0000000bu, 0x0003003eu, 0x00007d94u, 0x00007d98u, 0x00050051u, 0x0000000fu, 0x00007d99u, 0x00000a28u, 0x0000000cu, 0x0003003eu, 0x00007d95u, 0x00007d99u, 0x0003003eu, 0x00000a2au, 0x00000a24u, 0x00050039u, 0x0000001eu, 0x00000a2cu, 0x00000021u, 0x00000a2au, 0x00050051u, 0x00000010u, 0x00007d9fu, 0x00000a2cu, 0x00000000u, 0x0003003eu, 0x00007d9au, 0x00007d9fu, 0x00050051u, 0x00000010u, 0x00007da0u, 0x00000a2cu, 0x00000001u, 0x0003003eu, 0x00007d9bu, 0x00007da0u, 0x00050051u, 0x00000006u, 0x00007da1u, 0x00000a2cu, 0x00000002u, 0x0003003eu, 0x00007d9cu, 0x00007da1u, 0x00050051u, 0x0000000fu, 0x00007da2u, 0x00000a2cu, 0x00000003u, 0x0003003eu, 0x00007d9du, 0x00007da2u, 0x00050051u, 0x0000000fu, 0x00007da3u, 0x00000a2cu, 0x00000004u, 0x0003003eu, 0x00007d9eu, 0x00007da3u, 0x000500c7u, 0x00000006u, 0x00000a30u, 0x00007da1u, 0x00000314u, 0x000500abu, 0x00000069u, 0x00000a31u, 0x00000a30u, 0x0000032du, 0x0003003eu, 0x00000a2du, 0x00000a31u, 0x000500c7u, 0x00000006u, 0x00000a35u, 0x00007da1u, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00000a36u, 0x00000a35u, 0x0000032du, 0x0003003eu, 0x00000a32u, 0x00000a36u, 0x000500c7u, 0x00000006u, 0x00000a3au, 0x00007da1u, 0x00000386u, 0x000500abu, 0x00000069u, 0x00000a3bu, 0x00000a3au, 0x0000032du, 0x0003003eu, 0x00000a37u, 0x00000a3bu, 0x000500c7u, 0x00000006u, 0x00000a3fu, 0x00007da1u, 0x00000330u, 0x000500abu, 0x00000069u, 0x00000a40u, 0x00000a3fu, 0x0000032du, 0x0003003eu, 0x00000a3cu, 0x00000a40u, 0x000500c7u, 0x00000006u, 0x00000a45u, 0x00007da1u, 0x00000a44u, 0x000500abu, 0x00000069u, 0x00000a46u, 0x00000a45u, 0x0000032du, 0x0003003eu, 0x00000a41u, 0x00000a46u, 0x000500c7u, 0x00000006u, 0x00000a4bu, 0x00007da1u, 0x00000a4au, 0x000500abu, 0x00000069u, 0x00000a4cu, 0x00000a4bu, 0x0000032du, 0x0003003eu, 0x00000a47u, 0x00000a4cu, 0x000500c7u, 0x00000006u, 0x00000a51u, 0x00007da1u, 0x00000a50u, 0x000500abu, 0x00000069u, 0x00000a52u, 0x00000a51u, 0x0000032du, 0x0003003eu, 0x00000a4du, 0x00000a52u, 0x000500c7u, 0x00000006u, 0x00000a57u, 0x00007da1u, 0x00000a56u, 0x000500abu, 0x00000069u, 0x00000a58u, 0x00000a57u, 0x0000032du, 0x0003003eu, 0x00000a53u, 0x00000a58u, 0x0003003eu, 0x00000a5au, 0x00000a40u, 0x00050039u, 0x00000010u, 0x00000a5cu, 0x000000c8u, 0x00000a5au, 0x0003003eu, 0x00000a59u, 0x00000a5cu, 0x00050041u, 0x0000007bu, 0x00000a5eu, 0x00000a59u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00000a5fu, 0x00000a5eu, 0x000500c2u, 0x0000000fu, 0x00000a60u, 0x00000a5fu, 0x0000038eu, 0x0003003eu, 0x00000a5du, 0x00000a60u, 0x00040071u, 0x00000006u, 0x00000a64u, 0x00007d98u, 0x0004007cu, 0x00000008u, 0x00000a65u, 0x00000a64u, 0x00040071u, 0x00000006u, 0x00000a68u, 0x00007d99u, 0x0004007cu, 0x00000008u, 0x00000a69u, 0x00000a68u, 0x00040071u, 0x00000006u, 0x00000a6bu, 0x00000a60u, 0x0004007cu, 0x00000008u, 0x00000a6cu, 0x00000a6bu, 0x00040071u, 0x00000006u, 0x00000a6fu, 0x00007da3u, 0x0004007cu, 0x00000008u, 0x00000a70u, 0x00000a6fu, 0x0003003eu, 0x00000a74u, 0x00000a09u, 0x0003003eu, 0x00000a76u, 0x00000a65u, 0x0003003eu, 0x00000a77u, 0x00000a69u, 0x0004003du, 0x00000011u, 0x00000a79u, 0x00000708u, 0x0003003eu, 0x00000a78u, 0x00000a79u, 0x0004003du, 0x0000000fu, 0x00000a7bu, 0x000006eau, 0x0003003eu, 0x00000a7au, 0x00000a7bu, 0x0003003eu, 0x00000a7cu, 0x00000a13u, 0x0003003eu, 0x00000a7eu, 0x00000a6cu, 0x0003003eu, 0x00000a7fu, 0x00000a36u, 0x0003003eu, 0x00000a81u, 0x00000a70u, 0x0003003eu, 0x00000a82u, 0x00000a31u, 0x0003003eu, 0x00000a84u, 0x00000a52u, 0x00120039u, 0x00000069u, 0x00000a89u, 0x0000008bu, 0x00000a74u, 0x00000a76u, 0x00000a77u, 0x00000a78u, 0x00000a7au, 0x00000a7cu, 0x00000a7eu, 0x00000a7fu, 0x00000a81u, 0x00000a82u, 0x00000a84u, 0x00000a86u, 0x00000a87u, 0x00000a88u, 0x0004003du, 0x00000008u, 0x00000a8au, 0x00000a7cu, 0x0003003eu, 0x00000a0fu, 0x00000a8au, 0x0004003du, 0x00000069u, 0x00000a8bu, 0x00000a86u, 0x0003003eu, 0x00000a71u, 0x00000a8bu, 0x0004003du, 0x00000069u, 0x00000a8cu, 0x00000a87u, 0x0003003eu, 0x00000a72u, 0x00000a8cu, 0x0004003du, 0x0000006bu, 0x00000a8du, 0x00000a88u, 0x0003003eu, 0x00000a73u, 0x00000a8du, 0x0003003eu, 0x00000a61u, 0x00000a89u, 0x000300f7u, 0x00000a90u, 0x00000000u, 0x000400fau, 0x00000a89u, 0x00000a8fu, 0x00000a90u, 0x000200f8u, 0x00000a8fu, 0x000400a8u, 0x00000069u, 0x00000a92u, 0x00000a52u, 0x000500abu, 0x00000069u, 0x00000a94u, 0x00000a8au, 0x00000220u, 0x000500a6u, 0x00000069u, 0x00000a95u, 0x00000a92u, 0x00000a94u, 0x000200f9u, 0x00000a90u, 0x000200f8u, 0x00000a90u, 0x000700f5u, 0x00000069u, 0x00000a96u, 0x00000a89u, 0x000000deu, 0x00000a95u, 0x00000a8fu, 0x000300f7u, 0x00000a98u, 0x00000000u, 0x000400fau, 0x00000a96u, 0x00000a97u, 0x00000a98u, 0x000200f8u, 0x00000a97u, 0x0004003du, 0x00000010u, 0x00000a9bu, 0x00000a59u, 0x00080050u, 0x00000066u, 0x00000aa1u, 0x00000a16u, 0x00000a9bu, 0x00007d96u, 0x00007d97u, 0x00000a19u, 0x0003003eu, 0x00007da4u, 0x00000a16u, 0x0003003eu, 0x00007da5u, 0x00000a9bu, 0x0003003eu, 0x00007da6u, 0x00007d96u, 0x0003003eu, 0x00007da7u, 0x00007d97u, 0x0003003eu, 0x00007da8u, 0x00000a19u, 0x0003003eu, 0x00000aa2u, 0x00007d9fu, 0x000300f7u, 0x00000aa7u, 0x00000000u, 0x000400fau, 0x00000a4cu, 0x00000aa6u, 0x00000aa7u, 0x000200f8u, 0x00000aa6u, 0x0003003eu, 0x00000aa8u, 0x00000aa1u, 0x0003003eu, 0x00000aaau, 0x00007d9fu, 0x0003003eu, 0x00000aacu, 0x00000a31u, 0x0003003eu, 0x00000aaeu, 0x00000a8bu, 0x0003003eu, 0x00000ab0u, 0x00000a46u, 0x0003003eu, 0x00000ab2u, 0x00000a8cu, 0x0003003eu, 0x00000ab4u, 0x00000a8du, 0x0003003eu, 0x00000ab6u, 0x00000536u, 0x000c0039u, 0x00000047u, 0x00000ab7u, 0x00000076u, 0x00000aa8u, 0x00000aaau, 0x00000aacu, 0x00000aaeu, 0x00000ab0u, 0x00000ab2u, 0x00000ab4u, 0x00000ab6u, 0x0009004fu, 0x00000010u, 0x00000abau, 0x00000a16u, 0x00000ab7u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00007da4u, 0x00000abau, 0x0003003eu, 0x00000aa2u, 0x00007da0u, 0x000200f9u, 0x00000aa7u, 0x000200f8u, 0x00000aa7u, 0x000700f5u, 0x00000010u, 0x0000ef1du, 0x00000a16u, 0x00000a97u, 0x00000abau, 0x00000aa6u, 0x00070050u, 0x000005fbu, 0x0000f3dcu, 0x00000a4cu, 0x00000a4cu, 0x00000a4cu, 0x00000a4cu, 0x000600a9u, 0x00000010u, 0x0000f3ddu, 0x0000f3dcu, 0x00007da0u, 0x00007d9fu, 0x00080050u, 0x00000066u, 0x00007db9u, 0x0000ef1du, 0x00000a9bu, 0x00007d96u, 0x00007d97u, 0x00000a19u, 0x0003003eu, 0x00000abeu, 0x00007db9u, 0x0003003eu, 0x00000ac0u, 0x0000f3ddu, 0x0003003eu, 0x00000ac2u, 0x00000a31u, 0x0003003eu, 0x00000ac4u, 0x00000a8bu, 0x0003003eu, 0x00000ac6u, 0x00000a46u, 0x0003003eu, 0x00000ac8u, 0x00000a8cu, 0x0003003eu, 0x00000acau, 0x00000a8du, 0x0003003eu, 0x00000accu, 0x00000559u, 0x000c0039u, 0x00000047u, 0x00000acdu, 0x00000076u, 0x00000abeu, 0x00000ac0u, 0x00000ac2u, 0x00000ac4u, 0x00000ac6u, 0x00000ac8u, 0x00000acau, 0x00000accu, 0x0003003eu, 0x00000abdu, 0x00000acdu, 0x000300f7u, 0x00000ad0u, 0x00000000u, 0x000400fau, 0x00000a58u, 0x00000acfu, 0x00000ad0u, 0x000200f8u, 0x00000acfu, 0x00040071u, 0x0000030cu, 0x00000ad2u, 0x00000acdu, 0x0004007cu, 0x00000044u, 0x00000ad3u, 0x00000ad2u, 0x0003003eu, 0x00000ad4u, 0x00000ad3u, 0x0003003eu, 0x00000ad5u, 0x00000a0eu, 0x00060039u, 0x00000047u, 0x00000ad7u, 0x0000004bu, 0x00000ad4u, 0x00000ad5u, 0x0003003eu, 0x00000abdu, 0x00000ad7u, 0x000200f9u, 0x00000ad0u, 0x000200f8u, 0x00000ad0u, 0x000700f5u, 0x00000047u, 0x0000ef32u, 0x00000acdu, 0x00000aa7u, 0x00000ad7u, 0x00000acfu, 0x00040071u, 0x00000006u, 0x00000adeu, 0x00007da2u, 0x0004007cu, 0x00000008u, 0x00000adfu, 0x00000adeu, 0x0003003eu, 0x00000ae0u, 0x00000a8au, 0x0003003eu, 0x00000ae2u, 0x00000a6cu, 0x0003003eu, 0x00000ae3u, 0x00000a8bu, 0x0003003eu, 0x00000ae5u, 0x00000adfu, 0x00080039u, 0x00000008u, 0x00000ae6u, 0x00000099u, 0x00000ae0u, 0x00000ae2u, 0x00000ae3u, 0x00000ae5u, 0x0003003eu, 0x00000ad8u, 0x00000ae6u, 0x000500c4u, 0x00000008u, 0x00000ae9u, 0x00000ae6u, 0x00000236u, 0x00040072u, 0x0000037bu, 0x00000aeau, 0x00000ae9u, 0x0004007cu, 0x0000000fu, 0x00000aebu, 0x00000aeau, 0x00050051u, 0x0000000fu, 0x00000aecu, 0x0000ef32u, 0x00000000u, 0x00050051u, 0x0000000fu, 0x00000aedu, 0x0000ef32u, 0x00000001u, 0x00050051u, 0x0000000fu, 0x00000aeeu, 0x0000ef32u, 0x00000002u, 0x00070050u, 0x00000010u, 0x00000aefu, 0x00000aecu, 0x00000aedu, 0x00000aeeu, 0x00000aebu, 0x0003003eu, 0x00000af0u, 0x00000aefu, 0x00050039u, 0x00000002u, 0x00000af1u, 0x000000ccu, 0x00000af0u, 0x000300f7u, 0x00000af4u, 0x00000000u, 0x000400fau, 0x00000a3bu, 0x00000af3u, 0x00000afdu, 0x000200f8u, 0x00000af3u, 0x0003003eu, 0x00000af5u, 0x00000a09u, 0x00050039u, 0x00000011u, 0x00000af7u, 0x0000005du, 0x00000af5u, 0x0003003eu, 0x00000708u, 0x00000af7u, 0x0003003eu, 0x000006eau, 0x00007d99u, 0x0003003eu, 0x00000856u, 0x00000559u, 0x000300f7u, 0x00000afbu, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000afau, 0x00000afbu, 0x000200f8u, 0x00000afau, 0x00040039u, 0x00000002u, 0x00000afcu, 0x000000a2u, 0x000200f9u, 0x00000afbu, 0x000200f8u, 0x00000afbu, 0x000200f9u, 0x00000af4u, 0x000200f8u, 0x00000afdu, 0x000300f7u, 0x00000affu, 0x00000000u, 0x000400fau, 0x00000852u, 0x00000afeu, 0x00000affu, 0x000200f8u, 0x00000afeu, 0x00040039u, 0x00000002u, 0x00000b00u, 0x000000a0u, 0x000200f9u, 0x00000affu, 0x000200f8u, 0x00000affu, 0x000200f9u, 0x00000af4u, 0x000200f8u, 0x00000af4u, 0x000200f9u, 0x00000a98u, 0x000200f8u, 0x00000a98u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000e2u, 0x00000000u, 0x000000e0u, 0x00030037u, 0x000000dfu, 0x000000e1u, 0x000200f8u, 0x000000e3u, 0x0004003du, 0x00000009u, 0x00000b02u, 0x000000e1u, 0x00050082u, 0x00000009u, 0x00000b04u, 0x00000b02u, 0x0000f3a1u, 0x0003003eu, 0x000000e1u, 0x00000b04u, 0x0004003du, 0x00000009u, 0x00000b05u, 0x000000e1u, 0x000600cau, 0x00000009u, 0x00000b06u, 0x00000b05u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000000e1u, 0x00000b06u, 0x0004003du, 0x00000009u, 0x00000b07u, 0x000000e1u, 0x00050080u, 0x00000009u, 0x00000b09u, 0x00000b07u, 0x0000f3a1u, 0x0003003eu, 0x000000e1u, 0x00000b09u, 0x0004003du, 0x00000009u, 0x00000b0au, 0x000000e1u, 0x0008000cu, 0x00000009u, 0x00000b0du, 0x00000001u, 0x0000002du, 0x00000b0au, 0x00000b0bu, 0x00000b0cu, 0x00040072u, 0x00000013u, 0x00000b0eu, 0x00000b0du, 0x000200feu, 0x00000b0eu, 0x00010038u, 0x00050036u, 0x00000010u, 0x000000e7u, 0x00000000u, 0x000000e5u, 0x00030037u, 0x000000e4u, 0x000000e6u, 0x000200f8u, 0x000000e8u, 0x0004003bu, 0x000000dfu, 0x00000b13u, 0x00000007u, 0x0004003du, 0x00000013u, 0x00000b11u, 0x000000e6u, 0x00040072u, 0x00000009u, 0x00000b12u, 0x00000b11u, 0x0003003eu, 0x00000b13u, 0x00000b12u, 0x00050039u, 0x00000013u, 0x00000b14u, 0x000000e2u, 0x00000b13u, 0x00040072u, 0x00000b15u, 0x00000b16u, 0x00000b14u, 0x0004007cu, 0x00000010u, 0x00000b17u, 0x00000b16u, 0x000200feu, 0x00000b17u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000eau, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x000000e9u, 0x000200f8u, 0x000000ebu, 0x0004003du, 0x00000008u, 0x00000b1au, 0x000000e9u, 0x00050082u, 0x00000008u, 0x00000b1bu, 0x00000b1au, 0x00000b01u, 0x000600cau, 0x00000008u, 0x00000b1cu, 0x00000b1bu, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000008u, 0x00000b1du, 0x00000b1cu, 0x00000b01u, 0x0008000cu, 0x00000008u, 0x00000b1eu, 0x00000001u, 0x0000002du, 0x00000b1du, 0x00000220u, 0x0000035eu, 0x000200feu, 0x00000b1eu, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000edu, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000046u, 0x000000ecu, 0x000200f8u, 0x000000eeu, 0x0004003du, 0x00000008u, 0x00000b22u, 0x000000ecu, 0x00050082u, 0x00000008u, 0x00000b23u, 0x00000b22u, 0x00000b21u, 0x0003003eu, 0x000000ecu, 0x00000b23u, 0x0004003du, 0x00000008u, 0x00000b24u, 0x000000ecu, 0x000500c4u, 0x00000008u, 0x00000b25u, 0x00000b24u, 0x0000026cu, 0x0003003eu, 0x000000ecu, 0x00000b25u, 0x0004003du, 0x00000008u, 0x00000b26u, 0x000000ecu, 0x000500c3u, 0x00000008u, 0x00000b27u, 0x00000b26u, 0x0000026cu, 0x0003003eu, 0x000000ecu, 0x00000b27u, 0x0004003du, 0x00000008u, 0x00000b28u, 0x000000ecu, 0x00050080u, 0x00000008u, 0x00000b29u, 0x00000b28u, 0x00000b21u, 0x0003003eu, 0x000000ecu, 0x00000b29u, 0x0004003du, 0x00000008u, 0x00000b2au, 0x000000ecu, 0x0008000cu, 0x00000008u, 0x00000b2bu, 0x00000001u, 0x0000002du, 0x00000b2au, 0x00000220u, 0x000003edu, 0x000200feu, 0x00000b2bu, 0x00010038u, 0x00050036u, 0x000000efu, 0x000000f2u, 0x00000000u, 0x000000f0u, 0x00030037u, 0x00000046u, 0x000000f1u, 0x000200f8u, 0x000000f3u, 0x0004003bu, 0x00000046u, 0x00000b2eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b33u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b39u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000b3cu, 0x00000007u, 0x0004003bu, 0x00000bfeu, 0x00000bffu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c03u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000b2fu, 0x000000f1u, 0x0006000cu, 0x00000008u, 0x00000b30u, 0x00000001u, 0x0000004au, 0x00000b2fu, 0x00050082u, 0x00000008u, 0x00000b31u, 0x0000026fu, 0x00000b30u, 0x0007000cu, 0x00000008u, 0x00000b32u, 0x00000001u, 0x00000027u, 0x00000b31u, 0x0000026fu, 0x0003003eu, 0x00000b2eu, 0x00000b32u, 0x0004003du, 0x00000008u, 0x00000b34u, 0x000000f1u, 0x000500c4u, 0x00000008u, 0x00000b36u, 0x00000b34u, 0x00000b32u, 0x000500c7u, 0x00000008u, 0x00000b38u, 0x00000b36u, 0x00000b37u, 0x0003003eu, 0x00000b33u, 0x00000b38u, 0x000500c7u, 0x00000008u, 0x00000b3bu, 0x00000b38u, 0x0000035eu, 0x0003003eu, 0x00000b39u, 0x00000b3bu, 0x000500c3u, 0x00000008u, 0x00000bfdu, 0x00000b38u, 0x0000025du, 0x0003003eu, 0x00000bffu, 0x00000bfbu, 0x00050041u, 0x000001afu, 0x00000c00u, 0x00000bffu, 0x00000bfdu, 0x0004003du, 0x000001aeu, 0x00000c01u, 0x00000c00u, 0x00040072u, 0x000000efu, 0x00000c02u, 0x00000c01u, 0x0003003eu, 0x00000b3cu, 0x00000c02u, 0x00050041u, 0x00000046u, 0x00000c04u, 0x00000b3cu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c05u, 0x00000c04u, 0x00050084u, 0x00000008u, 0x00000c07u, 0x00000c05u, 0x00000b3bu, 0x000500c3u, 0x00000008u, 0x00000c08u, 0x00000c07u, 0x00000263u, 0x00050041u, 0x00000046u, 0x00000c09u, 0x00000b3cu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c0au, 0x00000c09u, 0x00050080u, 0x00000008u, 0x00000c0bu, 0x00000c08u, 0x00000c0au, 0x0003003eu, 0x00000c03u, 0x00000c0bu, 0x00050050u, 0x000000efu, 0x00000c0eu, 0x00000c0bu, 0x00000b32u, 0x000200feu, 0x00000c0eu, 0x00010038u, 0x00050036u, 0x000000efu, 0x000000f6u, 0x00000000u, 0x000000f4u, 0x00030037u, 0x00000045u, 0x000000f5u, 0x000200f8u, 0x000000f7u, 0x0004003du, 0x00000044u, 0x00000c11u, 0x000000f5u, 0x0007004fu, 0x000000efu, 0x00000c12u, 0x00000c11u, 0x00000c11u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000c12u, 0x00010038u, 0x00050036u, 0x000000efu, 0x000000fbu, 0x00000000u, 0x000000f8u, 0x00030037u, 0x00000045u, 0x000000f9u, 0x00030037u, 0x0000006au, 0x000000fau, 0x000200f8u, 0x000000fcu, 0x0004003bu, 0x00000046u, 0x00000c15u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000c18u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c1eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c1fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c22u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c25u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c2cu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c33u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000c3cu, 0x00000007u, 0x00050041u, 0x00000046u, 0x00000c16u, 0x000000f9u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000c17u, 0x00000c16u, 0x0003003eu, 0x00000c15u, 0x00000c17u, 0x000500b3u, 0x00000069u, 0x00000c1au, 0x00000c17u, 0x00000220u, 0x0003003eu, 0x00000c18u, 0x00000c1au, 0x000500c7u, 0x00000008u, 0x00000c1du, 0x00000c17u, 0x00000c1bu, 0x0003003eu, 0x00000c15u, 0x00000c1du, 0x0003003eu, 0x00000c1fu, 0x00000c1du, 0x00050039u, 0x000000efu, 0x00000c21u, 0x000000f2u, 0x00000c1fu, 0x0003003eu, 0x00000c1eu, 0x00000c21u, 0x00050041u, 0x00000046u, 0x00000c23u, 0x00000c1eu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c24u, 0x00000c23u, 0x0003003eu, 0x00000c22u, 0x00000c24u, 0x0004003du, 0x00000044u, 0x00000c26u, 0x000000f9u, 0x0007004fu, 0x000000efu, 0x00000c27u, 0x00000c26u, 0x00000c26u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000046u, 0x00000c28u, 0x00000c1eu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c29u, 0x00000c28u, 0x00050050u, 0x000000efu, 0x00000c2au, 0x00000c29u, 0x00000c29u, 0x00050084u, 0x000000efu, 0x00000c2bu, 0x00000c27u, 0x00000c2au, 0x0003003eu, 0x00000c25u, 0x00000c2bu, 0x000500c3u, 0x00000008u, 0x00000c30u, 0x00000c2eu, 0x00000c24u, 0x0004007eu, 0x00000008u, 0x00000c31u, 0x00000c30u, 0x000500c7u, 0x00000008u, 0x00000c32u, 0x00000c2du, 0x00000c31u, 0x0003003eu, 0x00000c2cu, 0x00000c32u, 0x0004003du, 0x000000efu, 0x00000c34u, 0x00000c25u, 0x00050050u, 0x000000efu, 0x00000c36u, 0x00000c32u, 0x00000c32u, 0x000500c7u, 0x000000efu, 0x00000c37u, 0x00000c34u, 0x00000c36u, 0x0003003eu, 0x00000c33u, 0x00000c37u, 0x000500abu, 0x00000069u, 0x00000c39u, 0x00000c24u, 0x0000026fu, 0x000300f7u, 0x00000c3bu, 0x00000000u, 0x000400fau, 0x00000c39u, 0x00000c3au, 0x00000c42u, 0x000200f8u, 0x00000c3au, 0x0004003du, 0x000000efu, 0x00000c3du, 0x00000c25u, 0x00050082u, 0x00000008u, 0x00000c3fu, 0x0000026cu, 0x00000c24u, 0x00050050u, 0x000000efu, 0x00000c40u, 0x00000c3fu, 0x00000c3fu, 0x000500c3u, 0x000000efu, 0x00000c41u, 0x00000c3du, 0x00000c40u, 0x0003003eu, 0x00000c25u, 0x00000c41u, 0x0003003eu, 0x00000c3cu, 0x00000c41u, 0x000200f9u, 0x00000c3bu, 0x000200f8u, 0x00000c42u, 0x0004003du, 0x000000efu, 0x00000c43u, 0x00000c25u, 0x000500c4u, 0x000000efu, 0x00000c45u, 0x00000c43u, 0x0000f3a2u, 0x0003003eu, 0x00000c3cu, 0x00000c45u, 0x000200f9u, 0x00000c3bu, 0x000200f8u, 0x00000c3bu, 0x0004003du, 0x000000efu, 0x00000c46u, 0x00000c33u, 0x000500abu, 0x0000087bu, 0x00000c48u, 0x00000c46u, 0x00000c47u, 0x0004009au, 0x00000069u, 0x00000c49u, 0x00000c48u, 0x000300f7u, 0x00000c4bu, 0x00000000u, 0x000400fau, 0x00000c49u, 0x00000c4au, 0x00000c4bu, 0x000200f8u, 0x00000c4au, 0x00050041u, 0x00000046u, 0x00000c4cu, 0x00000c33u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c4du, 0x00000c4cu, 0x000500abu, 0x00000069u, 0x00000c4fu, 0x00000c4du, 0x00000c32u, 0x000300f7u, 0x00000c51u, 0x00000000u, 0x000400fau, 0x00000c4fu, 0x00000c50u, 0x00000c51u, 0x000200f8u, 0x00000c50u, 0x0004003du, 0x00000008u, 0x00000c53u, 0x00000c4cu, 0x000500abu, 0x00000069u, 0x00000c54u, 0x00000c53u, 0x00000220u, 0x000200f9u, 0x00000c51u, 0x000200f8u, 0x00000c51u, 0x000700f5u, 0x00000069u, 0x00000c55u, 0x00000c4fu, 0x00000c4au, 0x00000c54u, 0x00000c50u, 0x000300f7u, 0x00000c57u, 0x00000000u, 0x000400fau, 0x00000c55u, 0x00000c56u, 0x00000c57u, 0x000200f8u, 0x00000c56u, 0x00050041u, 0x00000046u, 0x00000c58u, 0x00000c25u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00000c59u, 0x00000c58u, 0x000500c7u, 0x00000008u, 0x00000c5au, 0x00000c59u, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00000c5bu, 0x00000c5au, 0x00000220u, 0x000300f7u, 0x00000c5du, 0x00000000u, 0x000400fau, 0x00000c5bu, 0x00000c5cu, 0x00000c5fu, 0x000200f8u, 0x00000c5cu, 0x00050041u, 0x00000046u, 0x00000c5eu, 0x00000c3cu, 0x0000032du, 0x0003003eu, 0x00000c5eu, 0x00000c1bu, 0x000200f9u, 0x00000c5du, 0x000200f8u, 0x00000c5fu, 0x00050041u, 0x00000046u, 0x00000c61u, 0x00000c3cu, 0x0000032du, 0x0003003eu, 0x00000c61u, 0x00000c60u, 0x000200f9u, 0x00000c5du, 0x000200f8u, 0x00000c5du, 0x0003003eu, 0x000000fau, 0x00000559u, 0x000200f9u, 0x00000c57u, 0x000200f8u, 0x00000c57u, 0x00050041u, 0x00000046u, 0x00000c62u, 0x00000c33u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c63u, 0x00000c62u, 0x000500abu, 0x00000069u, 0x00000c65u, 0x00000c63u, 0x00000c32u, 0x000300f7u, 0x00000c67u, 0x00000000u, 0x000400fau, 0x00000c65u, 0x00000c66u, 0x00000c67u, 0x000200f8u, 0x00000c66u, 0x0004003du, 0x00000008u, 0x00000c69u, 0x00000c62u, 0x000500abu, 0x00000069u, 0x00000c6au, 0x00000c69u, 0x00000220u, 0x000200f9u, 0x00000c67u, 0x000200f8u, 0x00000c67u, 0x000700f5u, 0x00000069u, 0x00000c6bu, 0x00000c65u, 0x00000c57u, 0x00000c6au, 0x00000c66u, 0x000300f7u, 0x00000c6du, 0x00000000u, 0x000400fau, 0x00000c6bu, 0x00000c6cu, 0x00000c6du, 0x000200f8u, 0x00000c6cu, 0x00050041u, 0x00000046u, 0x00000c6eu, 0x00000c25u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00000c6fu, 0x00000c6eu, 0x000500c7u, 0x00000008u, 0x00000c70u, 0x00000c6fu, 0x00000c2eu, 0x000500aau, 0x00000069u, 0x00000c71u, 0x00000c70u, 0x00000220u, 0x000300f7u, 0x00000c73u, 0x00000000u, 0x000400fau, 0x00000c71u, 0x00000c72u, 0x00000c75u, 0x000200f8u, 0x00000c72u, 0x00050041u, 0x00000046u, 0x00000c74u, 0x00000c3cu, 0x0000045cu, 0x0003003eu, 0x00000c74u, 0x00000c1bu, 0x000200f9u, 0x00000c73u, 0x000200f8u, 0x00000c75u, 0x00050041u, 0x00000046u, 0x00000c76u, 0x00000c3cu, 0x0000045cu, 0x0003003eu, 0x00000c76u, 0x00000c60u, 0x000200f9u, 0x00000c73u, 0x000200f8u, 0x00000c73u, 0x0003003eu, 0x000000fau, 0x00000559u, 0x000200f9u, 0x00000c6du, 0x000200f8u, 0x00000c6du, 0x000200f9u, 0x00000c4bu, 0x000200f8u, 0x00000c4bu, 0x000300f7u, 0x00000c79u, 0x00000000u, 0x000400fau, 0x00000c1au, 0x00000c78u, 0x00000c79u, 0x000200f8u, 0x00000c78u, 0x0003003eu, 0x00000c3cu, 0x00000c7au, 0x0003003eu, 0x000000fau, 0x00000559u, 0x000200f9u, 0x00000c79u, 0x000200f8u, 0x00000c79u, 0x0004003du, 0x000000efu, 0x00000c7bu, 0x00000c3cu, 0x0008000cu, 0x000000efu, 0x00000c7fu, 0x00000001u, 0x0000002du, 0x00000c7bu, 0x00000c7du, 0x00000c7eu, 0x000200feu, 0x00000c7fu, 0x00010038u, 0x00050036u, 0x00000010u, 0x00000103u, 0x00000000u, 0x000000fdu, 0x00030037u, 0x000000dfu, 0x000000feu, 0x00030037u, 0x000000dfu, 0x000000ffu, 0x00030037u, 0x000000dfu, 0x00000100u, 0x00030037u, 0x00000046u, 0x00000101u, 0x00030037u, 0x00000046u, 0x00000102u, 0x000200f8u, 0x00000104u, 0x0004003bu, 0x000000e4u, 0x00000c8du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c92u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00000c95u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00000c99u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000cbcu, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000c82u, 0x000000ffu, 0x000500c7u, 0x00000009u, 0x00000c85u, 0x00000c82u, 0x0000f39fu, 0x00070050u, 0x00000009u, 0x00000c86u, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000009u, 0x00000c87u, 0x00000c85u, 0x00000c86u, 0x0004003du, 0x00000008u, 0x00000c88u, 0x00000101u, 0x00070050u, 0x00000009u, 0x00000c89u, 0x00000c88u, 0x00000c88u, 0x00000c88u, 0x00000c88u, 0x00050084u, 0x00000009u, 0x00000c8au, 0x00000c87u, 0x00000c89u, 0x0004003du, 0x00000009u, 0x00000c8bu, 0x000000feu, 0x00050080u, 0x00000009u, 0x00000c8cu, 0x00000c8bu, 0x00000c8au, 0x0003003eu, 0x000000feu, 0x00000c8cu, 0x0004003du, 0x00000009u, 0x00000c8eu, 0x000000feu, 0x000500c3u, 0x00000009u, 0x00000c90u, 0x00000c8eu, 0x0000f3a0u, 0x00040072u, 0x00000013u, 0x00000c91u, 0x00000c90u, 0x0003003eu, 0x00000c8du, 0x00000c91u, 0x0004003du, 0x00000008u, 0x00000c93u, 0x00000102u, 0x0006000cu, 0x00000008u, 0x00000c94u, 0x00000001u, 0x00000049u, 0x00000c93u, 0x0003003eu, 0x00000c92u, 0x00000c94u, 0x000500c3u, 0x00000008u, 0x00000c97u, 0x00000c94u, 0x0000022au, 0x00040072u, 0x00000012u, 0x00000c98u, 0x00000c97u, 0x0003003eu, 0x00000c95u, 0x00000c98u, 0x000500c7u, 0x00000008u, 0x00000c9bu, 0x00000c94u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00000c9cu, 0x00000c9bu, 0x0000022au, 0x00040072u, 0x00000012u, 0x00000c9du, 0x00000c9cu, 0x000500c7u, 0x00000012u, 0x00000c9fu, 0x00000c98u, 0x000004c8u, 0x00050080u, 0x00000012u, 0x00000ca0u, 0x00000c9du, 0x00000c9fu, 0x0003003eu, 0x00000c99u, 0x00000ca0u, 0x00070050u, 0x00000013u, 0x00000ca4u, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x00000ca2u, 0x000500c4u, 0x00000013u, 0x00000ca5u, 0x00000c91u, 0x00000ca4u, 0x0003003eu, 0x00000c8du, 0x00000ca5u, 0x0004003du, 0x00000009u, 0x00000ca7u, 0x000000ffu, 0x000500c3u, 0x00000009u, 0x00000ca9u, 0x00000ca7u, 0x0000f3a0u, 0x00040072u, 0x00000013u, 0x00000caau, 0x00000ca9u, 0x00070050u, 0x00000013u, 0x00000cabu, 0x00000ca0u, 0x00000ca0u, 0x00000ca0u, 0x00000ca0u, 0x00050084u, 0x00000013u, 0x00000cacu, 0x00000cabu, 0x00000caau, 0x0004003du, 0x00000009u, 0x00000caeu, 0x00000100u, 0x000500c3u, 0x00000009u, 0x00000cb0u, 0x00000caeu, 0x0000f3a0u, 0x00040072u, 0x00000013u, 0x00000cb1u, 0x00000cb0u, 0x00070050u, 0x00000013u, 0x00000cb2u, 0x00000c98u, 0x00000c98u, 0x00000c98u, 0x00000c98u, 0x00050084u, 0x00000013u, 0x00000cb3u, 0x00000cb2u, 0x00000cb1u, 0x00050080u, 0x00000013u, 0x00000cb4u, 0x00000cacu, 0x00000cb3u, 0x00050080u, 0x00000013u, 0x00000cb6u, 0x00000ca5u, 0x00000cb4u, 0x0003003eu, 0x00000c8du, 0x00000cb6u, 0x00070050u, 0x00000013u, 0x00000cbau, 0x00000cb8u, 0x00000cb8u, 0x00000cb8u, 0x00000cb8u, 0x000500c3u, 0x00000013u, 0x00000cbbu, 0x00000cb6u, 0x00000cbau, 0x0003003eu, 0x00000c8du, 0x00000cbbu, 0x0003003eu, 0x00000cbcu, 0x00000cbbu, 0x00050039u, 0x00000010u, 0x00000cbeu, 0x000000e7u, 0x00000cbcu, 0x000200feu, 0x00000cbeu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000010fu, 0x00000000u, 0x00000107u, 0x00030037u, 0x00000105u, 0x00000108u, 0x00030037u, 0x000000dfu, 0x00000109u, 0x00030037u, 0x00000046u, 0x0000010au, 0x00030037u, 0x0000006au, 0x0000010bu, 0x00030037u, 0x0000006au, 0x0000010cu, 0x00030037u, 0x00000106u, 0x0000010du, 0x00030037u, 0x00000046u, 0x0000010eu, 0x000200f8u, 0x00000110u, 0x0004003bu, 0x00000046u, 0x00000cc1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000cc3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000cd2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000cdfu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000ce8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000cfau, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000cfbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000cfcu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d04u, 0x00000007u, 0x0004003du, 0x00000069u, 0x00000cc2u, 0x0000010cu, 0x000300f7u, 0x00000cc5u, 0x00000000u, 0x000400fau, 0x00000cc2u, 0x00000cc4u, 0x00000ccau, 0x000200f8u, 0x00000cc4u, 0x0004003du, 0x00000008u, 0x00000cc6u, 0x0000010au, 0x00050041u, 0x00000046u, 0x00000cc7u, 0x00000108u, 0x00000236u, 0x0004003du, 0x00000008u, 0x00000cc8u, 0x00000cc7u, 0x00050082u, 0x00000008u, 0x00000cc9u, 0x00000cc6u, 0x00000cc8u, 0x0003003eu, 0x00000cc3u, 0x00000cc9u, 0x000200f9u, 0x00000cc5u, 0x000200f8u, 0x00000ccau, 0x00050041u, 0x00000046u, 0x00000ccbu, 0x00000108u, 0x00000239u, 0x0004003du, 0x00000008u, 0x00000cccu, 0x00000ccbu, 0x0004003du, 0x00000008u, 0x00000ccdu, 0x0000010au, 0x00050082u, 0x00000008u, 0x00000cceu, 0x00000cccu, 0x00000ccdu, 0x0003003eu, 0x00000cc3u, 0x00000cceu, 0x000200f9u, 0x00000cc5u, 0x000200f8u, 0x00000cc5u, 0x000700f5u, 0x00000008u, 0x0000ef48u, 0x00000cc9u, 0x00000cc4u, 0x00000cceu, 0x00000ccau, 0x0003003eu, 0x00000cc1u, 0x0000ef48u, 0x000500c3u, 0x00000008u, 0x00000cd1u, 0x0000ef48u, 0x0000078bu, 0x0003003eu, 0x00000cc1u, 0x00000cd1u, 0x00060041u, 0x00000cd8u, 0x00000cd9u, 0x00000cd7u, 0x00000220u, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000cdau, 0x00000cd9u, 0x000500c7u, 0x00000008u, 0x00000cdbu, 0x00000cd1u, 0x00000cdau, 0x0003003eu, 0x00000cd2u, 0x00000cdbu, 0x00050082u, 0x00000008u, 0x00000cdeu, 0x00000cd1u, 0x00000cdbu, 0x0003003eu, 0x0000010eu, 0x00000cdeu, 0x00060041u, 0x00000cd8u, 0x00000ce1u, 0x00000cd7u, 0x00000220u, 0x00000220u, 0x0004003du, 0x00000008u, 0x00000ce2u, 0x00000ce1u, 0x000500c3u, 0x00000008u, 0x00000ce3u, 0x00000cd1u, 0x00000ce2u, 0x0004003du, 0x00000069u, 0x00000ce4u, 0x0000010cu, 0x000600a9u, 0x00000008u, 0x00000ce6u, 0x00000ce4u, 0x0000022au, 0x00000ce5u, 0x00050084u, 0x00000008u, 0x00000ce7u, 0x00000ce3u, 0x00000ce6u, 0x0003003eu, 0x00000cdfu, 0x00000ce7u, 0x00050041u, 0x000000dfu, 0x00000ce9u, 0x00000108u, 0x0000022au, 0x0004003du, 0x00000009u, 0x00000ceau, 0x00000ce9u, 0x0008004fu, 0x00000044u, 0x00000cebu, 0x00000ceau, 0x00000ceau, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000cecu, 0x00000109u, 0x0008004fu, 0x00000044u, 0x00000cedu, 0x00000cecu, 0x00000cecu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000cefu, 0x00000cedu, 0x0000f39du, 0x00060050u, 0x00000044u, 0x00000cf1u, 0x00000ce7u, 0x00000ce7u, 0x00000ce7u, 0x00050084u, 0x00000044u, 0x00000cf2u, 0x00000cefu, 0x00000cf1u, 0x00050080u, 0x00000044u, 0x00000cf3u, 0x00000cebu, 0x00000cf2u, 0x0003003eu, 0x00000ce8u, 0x00000cf3u, 0x0004003du, 0x00000069u, 0x00000cf4u, 0x0000010bu, 0x000300f7u, 0x00000cf6u, 0x00000000u, 0x000400fau, 0x00000cf4u, 0x00000cf5u, 0x00000d00u, 0x000200f8u, 0x00000cf5u, 0x000500c3u, 0x00000044u, 0x00000cf9u, 0x00000cf3u, 0x0000f39eu, 0x0003003eu, 0x00000cfbu, 0x00000cf9u, 0x00060039u, 0x000000efu, 0x00000cfeu, 0x000000fbu, 0x00000cfbu, 0x00000cfcu, 0x0004003du, 0x00000069u, 0x00000cffu, 0x00000cfcu, 0x0003003eu, 0x00000cfau, 0x00000cffu, 0x0003003eu, 0x0000010du, 0x00000cfeu, 0x000200f9u, 0x00000cf6u, 0x000200f8u, 0x00000d00u, 0x000500c3u, 0x00000044u, 0x00000d03u, 0x00000cf3u, 0x0000f39eu, 0x0003003eu, 0x00000d04u, 0x00000d03u, 0x00050039u, 0x000000efu, 0x00000d05u, 0x000000f6u, 0x00000d04u, 0x0003003eu, 0x0000010du, 0x00000d05u, 0x000200f9u, 0x00000cf6u, 0x000200f8u, 0x00000cf6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x000000efu, 0x00000116u, 0x00000000u, 0x00000111u, 0x00030037u, 0x000000dfu, 0x00000112u, 0x00030037u, 0x000000dfu, 0x00000113u, 0x00030037u, 0x00000046u, 0x00000114u, 0x00030037u, 0x0000006au, 0x00000115u, 0x000200f8u, 0x00000117u, 0x0004003bu, 0x00000045u, 0x00000d06u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00000d19u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d1au, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d1bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d1du, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d22u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000d07u, 0x00000112u, 0x0008004fu, 0x00000044u, 0x00000d08u, 0x00000d07u, 0x00000d07u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000d09u, 0x00000113u, 0x0008004fu, 0x00000044u, 0x00000d0au, 0x00000d09u, 0x00000d09u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d0cu, 0x00000d0au, 0x0000f39du, 0x00060050u, 0x00000044u, 0x00000d0du, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000044u, 0x00000d0eu, 0x00000d0cu, 0x00000d0du, 0x0004003du, 0x00000008u, 0x00000d0fu, 0x00000114u, 0x00060050u, 0x00000044u, 0x00000d10u, 0x00000d0fu, 0x00000d0fu, 0x00000d0fu, 0x00050084u, 0x00000044u, 0x00000d11u, 0x00000d0eu, 0x00000d10u, 0x00050080u, 0x00000044u, 0x00000d12u, 0x00000d08u, 0x00000d11u, 0x0003003eu, 0x00000d06u, 0x00000d12u, 0x000500c3u, 0x00000044u, 0x00000d15u, 0x00000d12u, 0x0000f39eu, 0x0003003eu, 0x00000d06u, 0x00000d15u, 0x0004003du, 0x00000069u, 0x00000d16u, 0x00000115u, 0x000300f7u, 0x00000d18u, 0x00000000u, 0x000400fau, 0x00000d16u, 0x00000d17u, 0x00000d21u, 0x000200f8u, 0x00000d17u, 0x0003003eu, 0x00000d1bu, 0x00000d15u, 0x00060039u, 0x000000efu, 0x00000d1fu, 0x000000fbu, 0x00000d1bu, 0x00000d1du, 0x0004003du, 0x00000069u, 0x00000d20u, 0x00000d1du, 0x0003003eu, 0x00000d1au, 0x00000d20u, 0x0003003eu, 0x00000d19u, 0x00000d1fu, 0x000200f9u, 0x00000d18u, 0x000200f8u, 0x00000d21u, 0x0003003eu, 0x00000d22u, 0x00000d15u, 0x00050039u, 0x000000efu, 0x00000d24u, 0x000000f6u, 0x00000d22u, 0x0003003eu, 0x00000d19u, 0x00000d24u, 0x000200f9u, 0x00000d18u, 0x000200f8u, 0x00000d18u, 0x000700f5u, 0x000000efu, 0x0000ef4cu, 0x00000d1fu, 0x00000d17u, 0x00000d24u, 0x00000d21u, 0x000200feu, 0x0000ef4cu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000126u, 0x00000000u, 0x00000118u, 0x00030037u, 0x000000dfu, 0x00000119u, 0x00030037u, 0x000000dfu, 0x0000011au, 0x00030037u, 0x000000dfu, 0x0000011bu, 0x00030037u, 0x00000046u, 0x0000011cu, 0x00030037u, 0x00000046u, 0x0000011du, 0x00030037u, 0x0000006au, 0x0000011eu, 0x00030037u, 0x0000006au, 0x0000011fu, 0x00030037u, 0x00000046u, 0x00000120u, 0x00030037u, 0x00000106u, 0x00000121u, 0x00030037u, 0x00000106u, 0x00000122u, 0x00030037u, 0x00000106u, 0x00000123u, 0x00030037u, 0x00000046u, 0x00000124u, 0x00030037u, 0x0000006au, 0x00000125u, 0x000200f8u, 0x00000127u, 0x0004003bu, 0x00000045u, 0x00000d28u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d38u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d47u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d63u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d64u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d6eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d6fu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d76u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00000d77u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d7fu, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d87u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00000d8cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d9eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000da1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000da4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000da7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000dc1u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000d29u, 0x00000119u, 0x0008004fu, 0x00000044u, 0x00000d2au, 0x00000d29u, 0x00000d29u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000d2bu, 0x0000011au, 0x0008004fu, 0x00000044u, 0x00000d2cu, 0x00000d2bu, 0x00000d2bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d2eu, 0x00000d2cu, 0x0000f39du, 0x00060050u, 0x00000044u, 0x00000d2fu, 0x0000078bu, 0x0000078bu, 0x0000078bu, 0x000500c3u, 0x00000044u, 0x00000d30u, 0x00000d2eu, 0x00000d2fu, 0x0004003du, 0x00000008u, 0x00000d31u, 0x0000011cu, 0x00060050u, 0x00000044u, 0x00000d32u, 0x00000d31u, 0x00000d31u, 0x00000d31u, 0x00050084u, 0x00000044u, 0x00000d33u, 0x00000d30u, 0x00000d32u, 0x00050080u, 0x00000044u, 0x00000d34u, 0x00000d2au, 0x00000d33u, 0x0003003eu, 0x00000d28u, 0x00000d34u, 0x0004003du, 0x00000069u, 0x00000d35u, 0x0000011fu, 0x000300f7u, 0x00000d37u, 0x00000000u, 0x000400fau, 0x00000d35u, 0x00000d36u, 0x00000d37u, 0x000200f8u, 0x00000d36u, 0x0004003du, 0x00000008u, 0x00000d3au, 0x00000120u, 0x0004003du, 0x00000009u, 0x00000d3bu, 0x0000011au, 0x0008004fu, 0x00000044u, 0x00000d3cu, 0x00000d3bu, 0x00000d3bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d3eu, 0x00000d3cu, 0x0000f39du, 0x000500c3u, 0x00000044u, 0x00000d40u, 0x00000d3eu, 0x00000d2fu, 0x00060050u, 0x00000044u, 0x00000d41u, 0x00000d3au, 0x00000d3au, 0x00000d3au, 0x00050084u, 0x00000044u, 0x00000d42u, 0x00000d41u, 0x00000d40u, 0x00050080u, 0x00000044u, 0x00000d43u, 0x00000d34u, 0x00000d42u, 0x0003003eu, 0x00000d38u, 0x00000d43u, 0x000300f7u, 0x00000d46u, 0x00000000u, 0x000400fau, 0x00000d44u, 0x00000d45u, 0x00000d54u, 0x000200f8u, 0x00000d45u, 0x0004003du, 0x00000008u, 0x00000d49u, 0x00000120u, 0x0006000cu, 0x00000008u, 0x00000d4au, 0x00000001u, 0x00000005u, 0x00000d49u, 0x0004003du, 0x00000009u, 0x00000d4bu, 0x0000011bu, 0x0008004fu, 0x00000044u, 0x00000d4cu, 0x00000d4bu, 0x00000d4bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d4eu, 0x00000d4cu, 0x0000f3a3u, 0x000500c3u, 0x00000044u, 0x00000d50u, 0x00000d4eu, 0x00000d2fu, 0x00060050u, 0x00000044u, 0x00000d51u, 0x00000d4au, 0x00000d4au, 0x00000d4au, 0x00050084u, 0x00000044u, 0x00000d52u, 0x00000d51u, 0x00000d50u, 0x00050080u, 0x00000044u, 0x00000d53u, 0x00000d34u, 0x00000d52u, 0x0003003eu, 0x00000d47u, 0x00000d53u, 0x000200f9u, 0x00000d46u, 0x000200f8u, 0x00000d54u, 0x0004003du, 0x00000009u, 0x00000d56u, 0x0000011bu, 0x0008004fu, 0x00000044u, 0x00000d57u, 0x00000d56u, 0x00000d56u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000044u, 0x00000d59u, 0x00000d57u, 0x0000f3a3u, 0x000500c3u, 0x00000044u, 0x00000d5bu, 0x00000d59u, 0x00000d2fu, 0x00050080u, 0x00000044u, 0x00000d5cu, 0x00000d34u, 0x00000d5bu, 0x0003003eu, 0x00000d47u, 0x00000d5cu, 0x000200f9u, 0x00000d46u, 0x000200f8u, 0x00000d46u, 0x000700f5u, 0x00000044u, 0x0000ef53u, 0x00000d53u, 0x00000d45u, 0x00000d5cu, 0x00000d54u, 0x000200f9u, 0x00000d37u, 0x000200f8u, 0x00000d37u, 0x000700f5u, 0x00000044u, 0x0000ef52u, 0x0000ef50u, 0x00000127u, 0x0000ef53u, 0x00000d46u, 0x000700f5u, 0x00000044u, 0x0000ef4fu, 0x0000ef50u, 0x00000127u, 0x00000d43u, 0x00000d46u, 0x0004003du, 0x00000069u, 0x00000d5du, 0x0000011eu, 0x000300f7u, 0x00000d5fu, 0x00000000u, 0x000400fau, 0x00000d5du, 0x00000d5eu, 0x00000d7bu, 0x000200f8u, 0x00000d5eu, 0x000500c3u, 0x00000044u, 0x00000d62u, 0x00000d34u, 0x0000f39eu, 0x0003003eu, 0x00000d63u, 0x00000d62u, 0x0004003du, 0x00000069u, 0x00000d65u, 0x00000125u, 0x0003003eu, 0x00000d64u, 0x00000d65u, 0x00060039u, 0x000000efu, 0x00000d66u, 0x000000fbu, 0x00000d63u, 0x00000d64u, 0x0004003du, 0x00000069u, 0x00000d67u, 0x00000d64u, 0x0003003eu, 0x00000125u, 0x00000d67u, 0x0003003eu, 0x00000121u, 0x00000d66u, 0x0004003du, 0x00000069u, 0x00000d68u, 0x0000011fu, 0x000300f7u, 0x00000d6au, 0x00000000u, 0x000400fau, 0x00000d68u, 0x00000d69u, 0x00000d6au, 0x000200f8u, 0x00000d69u, 0x000500c3u, 0x00000044u, 0x00000d6du, 0x0000ef4fu, 0x0000f39eu, 0x0003003eu, 0x00000d6eu, 0x00000d6du, 0x0004003du, 0x00000069u, 0x00000d70u, 0x00000125u, 0x0003003eu, 0x00000d6fu, 0x00000d70u, 0x00060039u, 0x000000efu, 0x00000d71u, 0x000000fbu, 0x00000d6eu, 0x00000d6fu, 0x0004003du, 0x00000069u, 0x00000d72u, 0x00000d6fu, 0x0003003eu, 0x00000125u, 0x00000d72u, 0x0003003eu, 0x00000122u, 0x00000d71u, 0x000500c3u, 0x00000044u, 0x00000d75u, 0x0000ef52u, 0x0000f39eu, 0x0003003eu, 0x00000d76u, 0x00000d75u, 0x0004003du, 0x00000069u, 0x00000d78u, 0x00000125u, 0x0003003eu, 0x00000d77u, 0x00000d78u, 0x00060039u, 0x000000efu, 0x00000d79u, 0x000000fbu, 0x00000d76u, 0x00000d77u, 0x0004003du, 0x00000069u, 0x00000d7au, 0x00000d77u, 0x0003003eu, 0x00000125u, 0x00000d7au, 0x0003003eu, 0x00000123u, 0x00000d79u, 0x000200f9u, 0x00000d6au, 0x000200f8u, 0x00000d6au, 0x000200f9u, 0x00000d5fu, 0x000200f8u, 0x00000d7bu, 0x000500c3u, 0x00000044u, 0x00000d7eu, 0x00000d34u, 0x0000f39eu, 0x0003003eu, 0x00000d7fu, 0x00000d7eu, 0x00050039u, 0x000000efu, 0x00000d80u, 0x000000f6u, 0x00000d7fu, 0x0003003eu, 0x00000121u, 0x00000d80u, 0x0004003du, 0x00000069u, 0x00000d81u, 0x0000011fu, 0x000300f7u, 0x00000d83u, 0x00000000u, 0x000400fau, 0x00000d81u, 0x00000d82u, 0x00000d83u, 0x000200f8u, 0x00000d82u, 0x000500c3u, 0x00000044u, 0x00000d86u, 0x0000ef4fu, 0x0000f39eu, 0x0003003eu, 0x00000d87u, 0x00000d86u, 0x00050039u, 0x000000efu, 0x00000d88u, 0x000000f6u, 0x00000d87u, 0x0003003eu, 0x00000122u, 0x00000d88u, 0x000500c3u, 0x00000044u, 0x00000d8bu, 0x0000ef52u, 0x0000f39eu, 0x0003003eu, 0x00000d8cu, 0x00000d8bu, 0x00050039u, 0x000000efu, 0x00000d8du, 0x000000f6u, 0x00000d8cu, 0x0003003eu, 0x00000123u, 0x00000d8du, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d83u, 0x000200f9u, 0x00000d5fu, 0x000200f8u, 0x00000d5fu, 0x00050041u, 0x00000046u, 0x00000d8eu, 0x00000119u, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000d8fu, 0x00000d8eu, 0x00050041u, 0x00000046u, 0x00000d90u, 0x0000011au, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000d91u, 0x00000d90u, 0x0004003du, 0x00000008u, 0x00000d92u, 0x0000011cu, 0x000500c3u, 0x00000008u, 0x00000d93u, 0x00000d92u, 0x0000078bu, 0x00050084u, 0x00000008u, 0x00000d94u, 0x00000d91u, 0x00000d93u, 0x00050080u, 0x00000008u, 0x00000d95u, 0x00000d8fu, 0x00000d94u, 0x0004003du, 0x00000008u, 0x00000d97u, 0x00000d90u, 0x000500c3u, 0x00000008u, 0x00000d98u, 0x00000d97u, 0x0000078bu, 0x0004003du, 0x00000008u, 0x00000d99u, 0x0000011cu, 0x000500c7u, 0x00000008u, 0x00000d9bu, 0x00000d99u, 0x00000d9au, 0x00050084u, 0x00000008u, 0x00000d9cu, 0x00000d98u, 0x00000d9bu, 0x00050080u, 0x00000008u, 0x00000d9du, 0x00000d95u, 0x00000d9cu, 0x0003003eu, 0x00000124u, 0x00000d9du, 0x0004003du, 0x00000008u, 0x00000d9fu, 0x00000124u, 0x000500c3u, 0x00000008u, 0x00000da0u, 0x00000d9fu, 0x00000263u, 0x0003003eu, 0x00000d9eu, 0x00000da0u, 0x0004003du, 0x00000008u, 0x00000da2u, 0x0000011du, 0x0006000cu, 0x00000008u, 0x00000da3u, 0x00000001u, 0x00000049u, 0x00000da2u, 0x0003003eu, 0x00000da1u, 0x00000da3u, 0x000500c3u, 0x00000008u, 0x00000da6u, 0x00000da3u, 0x0000022au, 0x0003003eu, 0x00000da4u, 0x00000da6u, 0x000500c7u, 0x00000008u, 0x00000da9u, 0x00000da3u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x00000daau, 0x00000da9u, 0x0000022au, 0x000500c7u, 0x00000008u, 0x00000dacu, 0x00000da6u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00000dadu, 0x00000daau, 0x00000dacu, 0x0003003eu, 0x00000da7u, 0x00000dadu, 0x000500c4u, 0x00000008u, 0x00000db0u, 0x00000da0u, 0x00000daeu, 0x0003003eu, 0x00000d9eu, 0x00000db0u, 0x0004003du, 0x00000008u, 0x00000db3u, 0x00000d90u, 0x000500c3u, 0x00000008u, 0x00000db4u, 0x00000db3u, 0x00000263u, 0x00050084u, 0x00000008u, 0x00000db5u, 0x00000dadu, 0x00000db4u, 0x00050041u, 0x00000046u, 0x00000db7u, 0x0000011bu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000db8u, 0x00000db7u, 0x000500c3u, 0x00000008u, 0x00000db9u, 0x00000db8u, 0x00000263u, 0x00050084u, 0x00000008u, 0x00000dbau, 0x00000da6u, 0x00000db9u, 0x00050080u, 0x00000008u, 0x00000dbbu, 0x00000db5u, 0x00000dbau, 0x00050080u, 0x00000008u, 0x00000dbdu, 0x00000db0u, 0x00000dbbu, 0x0003003eu, 0x00000d9eu, 0x00000dbdu, 0x000500c3u, 0x00000008u, 0x00000dc0u, 0x00000dbdu, 0x00000dbeu, 0x0003003eu, 0x00000d9eu, 0x00000dc0u, 0x0003003eu, 0x00000dc1u, 0x00000dc0u, 0x00050039u, 0x00000008u, 0x00000dc3u, 0x000000edu, 0x00000dc1u, 0x0003003eu, 0x00000124u, 0x00000dc3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000012cu, 0x00000000u, 0x00000129u, 0x00030037u, 0x00000128u, 0x0000012au, 0x00030037u, 0x00000046u, 0x0000012bu, 0x000200f8u, 0x0000012du, 0x0004003bu, 0x00000046u, 0x00000dcbu, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00000dc4u, 0x0000012au, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00000dc5u, 0x00000dc4u, 0x00040071u, 0x00000006u, 0x00000dc6u, 0x00000dc5u, 0x0004007cu, 0x00000008u, 0x00000dc7u, 0x00000dc6u, 0x000500abu, 0x00000069u, 0x00000dc8u, 0x00000dc7u, 0x00000220u, 0x000300f7u, 0x00000dcau, 0x00000000u, 0x000400fau, 0x00000dc8u, 0x00000dc9u, 0x00000dcau, 0x000200f8u, 0x00000dc9u, 0x0004003du, 0x0000000fu, 0x00000dcdu, 0x00000dc4u, 0x000500c4u, 0x00000008u, 0x00000dceu, 0x0000022au, 0x00000dcdu, 0x0003003eu, 0x00000dcbu, 0x00000dceu, 0x00050041u, 0x0000007bu, 0x00000dcfu, 0x0000012au, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00000dd0u, 0x00000dcfu, 0x00040071u, 0x00000006u, 0x00000dd1u, 0x00000dd0u, 0x0004007cu, 0x00000008u, 0x00000dd2u, 0x00000dd1u, 0x000500c7u, 0x00000008u, 0x00000dd3u, 0x00000dd2u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00000dd4u, 0x00000dd3u, 0x00000220u, 0x000300f7u, 0x00000dd6u, 0x00000000u, 0x000400fau, 0x00000dd4u, 0x00000dd5u, 0x00000dd6u, 0x000200f8u, 0x00000dd5u, 0x0004003du, 0x00000008u, 0x00000dd7u, 0x0000012bu, 0x000500c7u, 0x00000008u, 0x00000dd9u, 0x00000dd7u, 0x00000dceu, 0x00050082u, 0x00000008u, 0x00000ddau, 0x00000dd9u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00000ddbu, 0x00000001u, 0x0000002au, 0x00000ddau, 0x00000220u, 0x0004003du, 0x00000008u, 0x00000ddcu, 0x0000012bu, 0x000500c6u, 0x00000008u, 0x00000dddu, 0x00000ddcu, 0x00000ddbu, 0x0003003eu, 0x0000012bu, 0x00000dddu, 0x000200f9u, 0x00000dd6u, 0x000200f8u, 0x00000dd6u, 0x00050082u, 0x00000008u, 0x00000ddfu, 0x00000dceu, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000de0u, 0x0000012bu, 0x000500c7u, 0x00000008u, 0x00000de1u, 0x00000de0u, 0x00000ddfu, 0x0003003eu, 0x0000012bu, 0x00000de1u, 0x000200f9u, 0x00000dcau, 0x000200f8u, 0x00000dcau, 0x0004003du, 0x00000008u, 0x00000de2u, 0x0000012bu, 0x000200feu, 0x00000de2u, 0x00010038u, 0x00050036u, 0x000000efu, 0x00000131u, 0x00000000u, 0x0000012eu, 0x00030037u, 0x00000128u, 0x0000012fu, 0x00030037u, 0x00000046u, 0x00000130u, 0x000200f8u, 0x00000132u, 0x0004003bu, 0x00000106u, 0x00000de5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000df1u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000de6u, 0x00000130u, 0x00050050u, 0x000000efu, 0x00000de8u, 0x00000de6u, 0x00000de6u, 0x00050080u, 0x000000efu, 0x00000de9u, 0x00000de8u, 0x00000de7u, 0x0003003eu, 0x00000de5u, 0x00000de9u, 0x00050041u, 0x0000007bu, 0x00000deau, 0x0000012fu, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00000debu, 0x00000deau, 0x00040071u, 0x00000006u, 0x00000decu, 0x00000debu, 0x0004007cu, 0x00000008u, 0x00000dedu, 0x00000decu, 0x000500abu, 0x00000069u, 0x00000deeu, 0x00000dedu, 0x00000220u, 0x000300f7u, 0x00000df0u, 0x00000000u, 0x000400fau, 0x00000deeu, 0x00000defu, 0x00000df0u, 0x000200f8u, 0x00000defu, 0x0004003du, 0x0000000fu, 0x00000df3u, 0x00000deau, 0x000500c4u, 0x00000008u, 0x00000df4u, 0x0000022au, 0x00000df3u, 0x0003003eu, 0x00000df1u, 0x00000df4u, 0x00050041u, 0x0000007bu, 0x00000df5u, 0x0000012fu, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00000df6u, 0x00000df5u, 0x00040071u, 0x00000006u, 0x00000df7u, 0x00000df6u, 0x0004007cu, 0x00000008u, 0x00000df8u, 0x00000df7u, 0x000500c7u, 0x00000008u, 0x00000df9u, 0x00000df8u, 0x0000022du, 0x000500abu, 0x00000069u, 0x00000dfau, 0x00000df9u, 0x00000220u, 0x000300f7u, 0x00000dfcu, 0x00000000u, 0x000400fau, 0x00000dfau, 0x00000dfbu, 0x00000dfcu, 0x000200f8u, 0x00000dfbu, 0x00050050u, 0x000000efu, 0x00000dffu, 0x00000df4u, 0x00000df4u, 0x000500c7u, 0x000000efu, 0x00000e00u, 0x00000de9u, 0x00000dffu, 0x00050082u, 0x000000efu, 0x00000e02u, 0x00000e00u, 0x0000f3a2u, 0x0007000cu, 0x000000efu, 0x00000e04u, 0x00000001u, 0x0000002au, 0x00000e02u, 0x00000c47u, 0x000500c6u, 0x000000efu, 0x00000e06u, 0x00000de9u, 0x00000e04u, 0x0003003eu, 0x00000de5u, 0x00000e06u, 0x000200f9u, 0x00000dfcu, 0x000200f8u, 0x00000dfcu, 0x000700f5u, 0x000000efu, 0x0000ef56u, 0x00000de9u, 0x00000defu, 0x00000e06u, 0x00000dfbu, 0x00050082u, 0x00000008u, 0x00000e08u, 0x00000df4u, 0x0000022au, 0x00050050u, 0x000000efu, 0x00000e0au, 0x00000e08u, 0x00000e08u, 0x000500c7u, 0x000000efu, 0x00000e0bu, 0x0000ef56u, 0x00000e0au, 0x0003003eu, 0x00000de5u, 0x00000e0bu, 0x000200f9u, 0x00000df0u, 0x000200f8u, 0x00000df0u, 0x000700f5u, 0x000000efu, 0x0000ef57u, 0x00000de9u, 0x00000132u, 0x00000e0bu, 0x00000dfcu, 0x000200feu, 0x0000ef57u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000135u, 0x00000000u, 0x00000129u, 0x00030037u, 0x00000128u, 0x00000133u, 0x00030037u, 0x00000046u, 0x00000134u, 0x000200f8u, 0x00000136u, 0x0004003bu, 0x00000046u, 0x00000e16u, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00000e0fu, 0x00000133u, 0x00000266u, 0x0004003du, 0x0000000fu, 0x00000e10u, 0x00000e0fu, 0x00040071u, 0x00000006u, 0x00000e11u, 0x00000e10u, 0x0004007cu, 0x00000008u, 0x00000e12u, 0x00000e11u, 0x000500abu, 0x00000069u, 0x00000e13u, 0x00000e12u, 0x00000220u, 0x000300f7u, 0x00000e15u, 0x00000000u, 0x000400fau, 0x00000e13u, 0x00000e14u, 0x00000e15u, 0x000200f8u, 0x00000e14u, 0x0004003du, 0x0000000fu, 0x00000e18u, 0x00000e0fu, 0x000500c4u, 0x00000008u, 0x00000e19u, 0x0000022au, 0x00000e18u, 0x0003003eu, 0x00000e16u, 0x00000e19u, 0x00050041u, 0x0000007bu, 0x00000e1au, 0x00000133u, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x00000e1bu, 0x00000e1au, 0x00040071u, 0x00000006u, 0x00000e1cu, 0x00000e1bu, 0x0004007cu, 0x00000008u, 0x00000e1du, 0x00000e1cu, 0x000500c7u, 0x00000008u, 0x00000e1eu, 0x00000e1du, 0x0000025du, 0x000500abu, 0x00000069u, 0x00000e1fu, 0x00000e1eu, 0x00000220u, 0x000300f7u, 0x00000e21u, 0x00000000u, 0x000400fau, 0x00000e1fu, 0x00000e20u, 0x00000e21u, 0x000200f8u, 0x00000e20u, 0x0004003du, 0x00000008u, 0x00000e22u, 0x00000134u, 0x000500c7u, 0x00000008u, 0x00000e24u, 0x00000e22u, 0x00000e19u, 0x00050082u, 0x00000008u, 0x00000e25u, 0x00000e24u, 0x0000022au, 0x0007000cu, 0x00000008u, 0x00000e26u, 0x00000001u, 0x0000002au, 0x00000e25u, 0x00000220u, 0x0004003du, 0x00000008u, 0x00000e27u, 0x00000134u, 0x000500c6u, 0x00000008u, 0x00000e28u, 0x00000e27u, 0x00000e26u, 0x0003003eu, 0x00000134u, 0x00000e28u, 0x000200f9u, 0x00000e21u, 0x000200f8u, 0x00000e21u, 0x00050082u, 0x00000008u, 0x00000e2au, 0x00000e19u, 0x0000022au, 0x0004003du, 0x00000008u, 0x00000e2bu, 0x00000134u, 0x000500c7u, 0x00000008u, 0x00000e2cu, 0x00000e2bu, 0x00000e2au, 0x0003003eu, 0x00000134u, 0x00000e2cu, 0x000200f9u, 0x00000e15u, 0x000200f8u, 0x00000e15u, 0x0004003du, 0x00000008u, 0x00000e2du, 0x00000134u, 0x000200feu, 0x00000e2du, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000139u, 0x00000000u, 0x00000137u, 0x00030037u, 0x00000007u, 0x00000138u, 0x000200f8u, 0x0000013au, 0x0004003bu, 0x0000030du, 0x00000e30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e40u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e31u, 0x00000138u, 0x00060050u, 0x0000030cu, 0x00000e32u, 0x00000e31u, 0x00000e31u, 0x00000e31u, 0x000500c2u, 0x0000030cu, 0x00000e35u, 0x00000e32u, 0x00000e34u, 0x000500c7u, 0x0000030cu, 0x00000e38u, 0x00000e35u, 0x0000f3a8u, 0x0003003eu, 0x00000e30u, 0x00000e38u, 0x000500c4u, 0x0000030cu, 0x00000e3bu, 0x00000e38u, 0x0000f3a9u, 0x000500c2u, 0x0000030cu, 0x00000e3eu, 0x00000e38u, 0x0000f3aau, 0x000500c5u, 0x0000030cu, 0x00000e3fu, 0x00000e3bu, 0x00000e3eu, 0x0003003eu, 0x00000e30u, 0x00000e3fu, 0x0004003du, 0x00000006u, 0x00000e41u, 0x00000138u, 0x000500c7u, 0x00000006u, 0x00000e42u, 0x00000e41u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000e43u, 0x00000e42u, 0x000006c3u, 0x0003003eu, 0x00000e40u, 0x00000e43u, 0x00040071u, 0x000004bau, 0x00000e45u, 0x00000e3fu, 0x0004007cu, 0x000004b6u, 0x00000e46u, 0x00000e45u, 0x00040071u, 0x00000011u, 0x00000e48u, 0x00000e43u, 0x0004007cu, 0x00000012u, 0x00000e49u, 0x00000e48u, 0x00050051u, 0x00000012u, 0x00000e4au, 0x00000e46u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00000e4bu, 0x00000e46u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00000e4cu, 0x00000e46u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00000e4du, 0x00000e4au, 0x00000e4bu, 0x00000e4cu, 0x00000e49u, 0x000200feu, 0x00000e4du, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000013cu, 0x00000000u, 0x00000137u, 0x00030037u, 0x00000007u, 0x0000013bu, 0x000200f8u, 0x0000013du, 0x0004003bu, 0x00000007u, 0x00000e50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e53u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000e51u, 0x0000013bu, 0x000500c2u, 0x00000006u, 0x00000e52u, 0x00000e51u, 0x0000025du, 0x0003003eu, 0x00000e50u, 0x00000e52u, 0x0004003du, 0x00000006u, 0x00000e54u, 0x0000013bu, 0x000500c7u, 0x00000006u, 0x00000e55u, 0x00000e54u, 0x000006c3u, 0x0003003eu, 0x00000e53u, 0x00000e55u, 0x00040071u, 0x00000011u, 0x00000e57u, 0x00000e52u, 0x0004007cu, 0x00000012u, 0x00000e58u, 0x00000e57u, 0x00040071u, 0x00000011u, 0x00000e60u, 0x00000e55u, 0x0004007cu, 0x00000012u, 0x00000e61u, 0x00000e60u, 0x00070050u, 0x00000013u, 0x00000e62u, 0x00000e58u, 0x00000e58u, 0x00000e58u, 0x00000e61u, 0x000200feu, 0x00000e62u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000142u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x0000013fu, 0x00030037u, 0x00000007u, 0x00000140u, 0x00030037u, 0x000000b1u, 0x00000141u, 0x000200f8u, 0x00000143u, 0x0004003bu, 0x00000007u, 0x00000e65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e86u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000e66u, 0x0000013fu, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000e67u, 0x00000e66u, 0x00050041u, 0x00000007u, 0x00000e68u, 0x0000013fu, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000e69u, 0x00000e68u, 0x00050041u, 0x00000007u, 0x00000e6au, 0x00000141u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000e6bu, 0x00000e6au, 0x00050084u, 0x00000006u, 0x00000e6cu, 0x00000e69u, 0x00000e6bu, 0x00050080u, 0x00000006u, 0x00000e6du, 0x00000e67u, 0x00000e6cu, 0x0003003eu, 0x00000e65u, 0x00000e6du, 0x00050041u, 0x00000007u, 0x00000e6eu, 0x00000141u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000e6fu, 0x00000e6eu, 0x000500c2u, 0x00000006u, 0x00000e70u, 0x00000e6fu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000e72u, 0x00000e6du, 0x00000e70u, 0x0003003eu, 0x00000e65u, 0x00000e72u, 0x000500c7u, 0x00000006u, 0x00000e75u, 0x00000e72u, 0x00000e73u, 0x0003003eu, 0x00000e65u, 0x00000e75u, 0x0004003du, 0x00000006u, 0x00000e78u, 0x00000e6eu, 0x000400c8u, 0x00000006u, 0x00000e79u, 0x00000e78u, 0x000500c7u, 0x00000006u, 0x00000e7au, 0x00000e79u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000e7bu, 0x00000e7au, 0x00000704u, 0x0003003eu, 0x00000e76u, 0x00000e7bu, 0x0003003eu, 0x00000e7cu, 0x00000e75u, 0x0004003du, 0x00000006u, 0x00000e7fu, 0x00000e6au, 0x000500c7u, 0x00000006u, 0x00000e80u, 0x00000e7fu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000e81u, 0x00000e80u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000e83u, 0x00000e75u, 0x00000e81u, 0x0003003eu, 0x00000e7cu, 0x00000e83u, 0x000500c6u, 0x00000006u, 0x00000e85u, 0x00000e83u, 0x00000464u, 0x0003003eu, 0x00000e7cu, 0x00000e85u, 0x0004003du, 0x00000006u, 0x00000e8eu, 0x00000140u, 0x00080041u, 0x00000671u, 0x00000e90u, 0x00000e8du, 0x00000220u, 0x00000e8eu, 0x00000220u, 0x00000e85u, 0x0004003du, 0x0000000fu, 0x00000e91u, 0x00000e90u, 0x00040071u, 0x00000006u, 0x00000e92u, 0x00000e91u, 0x0003003eu, 0x00000e86u, 0x00000e92u, 0x000500c2u, 0x00000006u, 0x00000e95u, 0x00000e92u, 0x00000e7bu, 0x000500c7u, 0x00000006u, 0x00000e97u, 0x00000e95u, 0x00000e96u, 0x0003003eu, 0x00000e86u, 0x00000e97u, 0x000500c4u, 0x00000006u, 0x00000e99u, 0x00000e97u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00000e9bu, 0x00000e97u, 0x00000e99u, 0x0003003eu, 0x00000e86u, 0x00000e9bu, 0x00040071u, 0x00000011u, 0x00000e9du, 0x00000e9bu, 0x0004007cu, 0x00000012u, 0x00000e9eu, 0x00000e9du, 0x00070050u, 0x00000013u, 0x00000e9fu, 0x00000e9eu, 0x00000e9eu, 0x00000e9eu, 0x00000e9eu, 0x000200feu, 0x00000e9fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000147u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000144u, 0x00030037u, 0x00000007u, 0x00000145u, 0x00030037u, 0x000000b1u, 0x00000146u, 0x000200f8u, 0x00000148u, 0x0004003bu, 0x00000007u, 0x00000ea2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ec2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eccu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000ea3u, 0x00000144u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000ea4u, 0x00000ea3u, 0x00050041u, 0x00000007u, 0x00000ea5u, 0x00000144u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000ea6u, 0x00000ea5u, 0x00050041u, 0x00000007u, 0x00000ea7u, 0x00000146u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000ea8u, 0x00000ea7u, 0x00050084u, 0x00000006u, 0x00000ea9u, 0x00000ea6u, 0x00000ea8u, 0x00050080u, 0x00000006u, 0x00000eaau, 0x00000ea4u, 0x00000ea9u, 0x0003003eu, 0x00000ea2u, 0x00000eaau, 0x00050041u, 0x00000007u, 0x00000eabu, 0x00000146u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000eacu, 0x00000eabu, 0x000500c2u, 0x00000006u, 0x00000eadu, 0x00000eacu, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000eafu, 0x00000eaau, 0x00000eadu, 0x0003003eu, 0x00000ea2u, 0x00000eafu, 0x000500c7u, 0x00000006u, 0x00000eb1u, 0x00000eafu, 0x00000e73u, 0x0003003eu, 0x00000ea2u, 0x00000eb1u, 0x0004003du, 0x00000006u, 0x00000eb4u, 0x00000eabu, 0x000400c8u, 0x00000006u, 0x00000eb5u, 0x00000eb4u, 0x000500c7u, 0x00000006u, 0x00000eb6u, 0x00000eb5u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000eb7u, 0x00000eb6u, 0x00000704u, 0x0003003eu, 0x00000eb2u, 0x00000eb7u, 0x0003003eu, 0x00000eb8u, 0x00000eb1u, 0x0004003du, 0x00000006u, 0x00000ebbu, 0x00000ea7u, 0x000500c7u, 0x00000006u, 0x00000ebcu, 0x00000ebbu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000ebdu, 0x00000ebcu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000ebfu, 0x00000eb1u, 0x00000ebdu, 0x0003003eu, 0x00000eb8u, 0x00000ebfu, 0x000500c6u, 0x00000006u, 0x00000ec1u, 0x00000ebfu, 0x00000464u, 0x0003003eu, 0x00000eb8u, 0x00000ec1u, 0x0004003du, 0x00000006u, 0x00000ec3u, 0x00000145u, 0x00080041u, 0x00000671u, 0x00000ec5u, 0x00000e8du, 0x00000220u, 0x00000ec3u, 0x00000220u, 0x00000ec1u, 0x0004003du, 0x0000000fu, 0x00000ec6u, 0x00000ec5u, 0x00040071u, 0x00000006u, 0x00000ec7u, 0x00000ec6u, 0x0003003eu, 0x00000ec2u, 0x00000ec7u, 0x000500c2u, 0x00000006u, 0x00000ecau, 0x00000ec7u, 0x00000eb7u, 0x000500c7u, 0x00000006u, 0x00000ecbu, 0x00000ecau, 0x00000e96u, 0x0003003eu, 0x00000ec2u, 0x00000ecbu, 0x000500c7u, 0x00000006u, 0x00000ecfu, 0x00000ecbu, 0x00000eceu, 0x0003003eu, 0x00000eccu, 0x00000ecfu, 0x000500c4u, 0x00000006u, 0x00000ed1u, 0x00000ecfu, 0x00000233u, 0x000500c4u, 0x00000006u, 0x00000ed3u, 0x00000ecfu, 0x0000022au, 0x000500c5u, 0x00000006u, 0x00000ed4u, 0x00000ed1u, 0x00000ed3u, 0x000500c2u, 0x00000006u, 0x00000ed6u, 0x00000ecfu, 0x0000022du, 0x000500c5u, 0x00000006u, 0x00000ed7u, 0x00000ed4u, 0x00000ed6u, 0x0003003eu, 0x00000eccu, 0x00000ed7u, 0x00040071u, 0x00000011u, 0x00000ed9u, 0x00000ed7u, 0x0004007cu, 0x00000012u, 0x00000edau, 0x00000ed9u, 0x000500c7u, 0x00000006u, 0x00000ee2u, 0x00000ecbu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000ee3u, 0x00000ee2u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00000ee4u, 0x00000ee3u, 0x0004007cu, 0x00000012u, 0x00000ee5u, 0x00000ee4u, 0x00070050u, 0x00000013u, 0x00000ee6u, 0x00000edau, 0x00000edau, 0x00000edau, 0x00000ee5u, 0x000200feu, 0x00000ee6u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000014eu, 0x00000000u, 0x00000149u, 0x00030037u, 0x00000128u, 0x0000014au, 0x00030037u, 0x00000007u, 0x0000014bu, 0x00030037u, 0x000000b1u, 0x0000014cu, 0x00030037u, 0x00000007u, 0x0000014du, 0x000200f8u, 0x0000014fu, 0x0004003bu, 0x00000007u, 0x00000ee9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ef9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000effu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f09u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000eeau, 0x0000014au, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000eebu, 0x00000eeau, 0x00050041u, 0x00000007u, 0x00000eecu, 0x0000014au, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000eedu, 0x00000eecu, 0x00050041u, 0x00000007u, 0x00000eeeu, 0x0000014cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000eefu, 0x00000eeeu, 0x00050084u, 0x00000006u, 0x00000ef0u, 0x00000eedu, 0x00000eefu, 0x00050080u, 0x00000006u, 0x00000ef1u, 0x00000eebu, 0x00000ef0u, 0x0003003eu, 0x00000ee9u, 0x00000ef1u, 0x00050041u, 0x00000007u, 0x00000ef2u, 0x0000014cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000ef3u, 0x00000ef2u, 0x000500c2u, 0x00000006u, 0x00000ef4u, 0x00000ef3u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000ef6u, 0x00000ef1u, 0x00000ef4u, 0x0003003eu, 0x00000ee9u, 0x00000ef6u, 0x000500c7u, 0x00000006u, 0x00000ef8u, 0x00000ef6u, 0x00000e73u, 0x0003003eu, 0x00000ee9u, 0x00000ef8u, 0x0004003du, 0x00000006u, 0x00000efbu, 0x00000ef2u, 0x000400c8u, 0x00000006u, 0x00000efcu, 0x00000efbu, 0x000500c7u, 0x00000006u, 0x00000efdu, 0x00000efcu, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000efeu, 0x00000efdu, 0x00000704u, 0x0003003eu, 0x00000ef9u, 0x00000efeu, 0x0003003eu, 0x00000effu, 0x00000ef8u, 0x0004003du, 0x00000006u, 0x00000f02u, 0x00000eeeu, 0x000500c7u, 0x00000006u, 0x00000f03u, 0x00000f02u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000f04u, 0x00000f03u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000f06u, 0x00000ef8u, 0x00000f04u, 0x0003003eu, 0x00000effu, 0x00000f06u, 0x000500c6u, 0x00000006u, 0x00000f08u, 0x00000f06u, 0x00000464u, 0x0003003eu, 0x00000effu, 0x00000f08u, 0x0004003du, 0x00000006u, 0x00000f0au, 0x0000014bu, 0x00080041u, 0x00000671u, 0x00000f0cu, 0x00000e8du, 0x00000220u, 0x00000f0au, 0x00000220u, 0x00000f08u, 0x0004003du, 0x0000000fu, 0x00000f0du, 0x00000f0cu, 0x00040071u, 0x00000006u, 0x00000f0eu, 0x00000f0du, 0x0003003eu, 0x00000f09u, 0x00000f0eu, 0x000500c2u, 0x00000006u, 0x00000f11u, 0x00000f0eu, 0x00000efeu, 0x000500c7u, 0x00000006u, 0x00000f12u, 0x00000f11u, 0x00000e96u, 0x0003003eu, 0x00000f09u, 0x00000f12u, 0x0004003du, 0x00000006u, 0x00000f13u, 0x0000014du, 0x000500c4u, 0x00000006u, 0x00000f14u, 0x00000f13u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00000f16u, 0x00000f12u, 0x00000f14u, 0x0003003eu, 0x00000f09u, 0x00000f16u, 0x00040071u, 0x00000011u, 0x00000f18u, 0x00000f16u, 0x0004007cu, 0x00000012u, 0x00000f19u, 0x00000f18u, 0x00070050u, 0x00000013u, 0x00000f1au, 0x00000f19u, 0x00000f19u, 0x00000f19u, 0x00000f19u, 0x000200feu, 0x00000f1au, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000158u, 0x00000000u, 0x00000150u, 0x00030037u, 0x00000128u, 0x00000151u, 0x00030037u, 0x00000007u, 0x00000152u, 0x00030037u, 0x000000b1u, 0x00000153u, 0x00030037u, 0x00000007u, 0x00000154u, 0x00030037u, 0x00000007u, 0x00000155u, 0x00030037u, 0x00000007u, 0x00000156u, 0x00030037u, 0x0000006au, 0x00000157u, 0x000200f8u, 0x00000159u, 0x0004003bu, 0x00000007u, 0x00000f1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f4cu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000f63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f6au, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f1eu, 0x00000151u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000f1fu, 0x00000f1eu, 0x00050041u, 0x00000007u, 0x00000f20u, 0x00000151u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000f21u, 0x00000f20u, 0x00050041u, 0x00000007u, 0x00000f22u, 0x00000153u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000f23u, 0x00000f22u, 0x00050084u, 0x00000006u, 0x00000f24u, 0x00000f21u, 0x00000f23u, 0x00050080u, 0x00000006u, 0x00000f25u, 0x00000f1fu, 0x00000f24u, 0x0003003eu, 0x00000f1du, 0x00000f25u, 0x00050041u, 0x00000007u, 0x00000f26u, 0x00000153u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000f27u, 0x00000f26u, 0x000500c2u, 0x00000006u, 0x00000f28u, 0x00000f27u, 0x0000022au, 0x00050080u, 0x00000006u, 0x00000f2au, 0x00000f25u, 0x00000f28u, 0x0003003eu, 0x00000f1du, 0x00000f2au, 0x000500c7u, 0x00000006u, 0x00000f2du, 0x00000f2au, 0x00000f2bu, 0x0003003eu, 0x00000f1du, 0x00000f2du, 0x0004003du, 0x00000006u, 0x00000f30u, 0x00000f26u, 0x000400c8u, 0x00000006u, 0x00000f31u, 0x00000f30u, 0x000500c7u, 0x00000006u, 0x00000f32u, 0x00000f31u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00000f33u, 0x00000f32u, 0x00000704u, 0x0003003eu, 0x00000f2eu, 0x00000f33u, 0x0003003eu, 0x00000f34u, 0x00000f2du, 0x0004003du, 0x00000006u, 0x00000f37u, 0x00000f22u, 0x000500c7u, 0x00000006u, 0x00000f38u, 0x00000f37u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000f39u, 0x00000f38u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000f3bu, 0x00000f2du, 0x00000f39u, 0x0003003eu, 0x00000f34u, 0x00000f3bu, 0x000500c6u, 0x00000006u, 0x00000f3du, 0x00000f3bu, 0x00000464u, 0x0003003eu, 0x00000f34u, 0x00000f3du, 0x0004003du, 0x00000006u, 0x00000f3fu, 0x00000152u, 0x00080041u, 0x00000671u, 0x00000f41u, 0x00000e8du, 0x00000220u, 0x00000f3fu, 0x00000220u, 0x00000f3du, 0x0004003du, 0x0000000fu, 0x00000f42u, 0x00000f41u, 0x00040071u, 0x00000006u, 0x00000f43u, 0x00000f42u, 0x0003003eu, 0x00000f3eu, 0x00000f43u, 0x000500c2u, 0x00000006u, 0x00000f46u, 0x00000f43u, 0x00000f33u, 0x000500c7u, 0x00000006u, 0x00000f47u, 0x00000f46u, 0x00000e96u, 0x0003003eu, 0x00000f3eu, 0x00000f47u, 0x0004003du, 0x00000006u, 0x00000f48u, 0x00000154u, 0x000500c4u, 0x00000006u, 0x00000f49u, 0x00000f48u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00000f4bu, 0x00000f47u, 0x00000f49u, 0x0003003eu, 0x00000f3eu, 0x00000f4bu, 0x000500c4u, 0x00000006u, 0x00000f4eu, 0x00000f4bu, 0x0000022du, 0x0004003du, 0x00000006u, 0x00000f4fu, 0x00000155u, 0x00050080u, 0x00000006u, 0x00000f50u, 0x00000f4eu, 0x00000f4fu, 0x0003003eu, 0x00000f4cu, 0x00000f50u, 0x0004003du, 0x00000006u, 0x00000f51u, 0x00000156u, 0x000500c6u, 0x00000006u, 0x00000f53u, 0x00000f50u, 0x00000f51u, 0x0003003eu, 0x00000f4cu, 0x00000f53u, 0x0004003du, 0x00000006u, 0x00000f5bu, 0x00000152u, 0x000500c5u, 0x00000006u, 0x00000f5eu, 0x00000f5cu, 0x00000f53u, 0x00080041u, 0x00000692u, 0x00000f5fu, 0x00000f5au, 0x00000220u, 0x00000f5bu, 0x00000220u, 0x00000f5eu, 0x0004003du, 0x00000011u, 0x00000f60u, 0x00000f5fu, 0x00040071u, 0x00000006u, 0x00000f61u, 0x00000f60u, 0x0003003eu, 0x00000f3eu, 0x00000f61u, 0x0004003du, 0x00000069u, 0x00000f62u, 0x00000157u, 0x000300f7u, 0x00000f65u, 0x00000000u, 0x000400fau, 0x00000f62u, 0x00000f64u, 0x00000f69u, 0x000200f8u, 0x00000f64u, 0x0003003eu, 0x00000f66u, 0x00000f61u, 0x00050039u, 0x00000013u, 0x00000f68u, 0x0000013cu, 0x00000f66u, 0x0003003eu, 0x00000f63u, 0x00000f68u, 0x000200f9u, 0x00000f65u, 0x000200f8u, 0x00000f69u, 0x0003003eu, 0x00000f6au, 0x00000f61u, 0x00050039u, 0x00000013u, 0x00000f6cu, 0x00000139u, 0x00000f6au, 0x0003003eu, 0x00000f63u, 0x00000f6cu, 0x000200f9u, 0x00000f65u, 0x000200f8u, 0x00000f65u, 0x000700f5u, 0x00000013u, 0x0000ef59u, 0x00000f68u, 0x00000f64u, 0x00000f6cu, 0x00000f69u, 0x000200feu, 0x0000ef59u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000161u, 0x00000000u, 0x0000015au, 0x00030037u, 0x00000128u, 0x0000015bu, 0x00030037u, 0x00000007u, 0x0000015cu, 0x00030037u, 0x000000b1u, 0x0000015du, 0x00030037u, 0x00000007u, 0x0000015eu, 0x00030037u, 0x00000007u, 0x0000015fu, 0x00030037u, 0x0000006au, 0x00000160u, 0x000200f8u, 0x00000162u, 0x0004003bu, 0x00000007u, 0x00000f70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f8fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00000f9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa5u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000f71u, 0x0000015bu, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000f72u, 0x00000f71u, 0x00050041u, 0x00000007u, 0x00000f73u, 0x0000015bu, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000f74u, 0x00000f73u, 0x00050041u, 0x00000007u, 0x00000f75u, 0x0000015du, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000f76u, 0x00000f75u, 0x00050084u, 0x00000006u, 0x00000f77u, 0x00000f74u, 0x00000f76u, 0x00050080u, 0x00000006u, 0x00000f78u, 0x00000f72u, 0x00000f77u, 0x0003003eu, 0x00000f70u, 0x00000f78u, 0x00050041u, 0x00000007u, 0x00000f79u, 0x0000015du, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000f7au, 0x00000f79u, 0x00050080u, 0x00000006u, 0x00000f7cu, 0x00000f78u, 0x00000f7au, 0x0003003eu, 0x00000f70u, 0x00000f7cu, 0x000500c7u, 0x00000006u, 0x00000f7eu, 0x00000f7cu, 0x00000f2bu, 0x0003003eu, 0x00000f70u, 0x00000f7eu, 0x0003003eu, 0x00000f7fu, 0x00000f7eu, 0x0004003du, 0x00000006u, 0x00000f82u, 0x00000f75u, 0x000500c7u, 0x00000006u, 0x00000f83u, 0x00000f82u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000f84u, 0x00000f83u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00000f86u, 0x00000f7eu, 0x00000f84u, 0x0003003eu, 0x00000f7fu, 0x00000f86u, 0x000500c6u, 0x00000006u, 0x00000f88u, 0x00000f86u, 0x00000464u, 0x0003003eu, 0x00000f7fu, 0x00000f88u, 0x0004003du, 0x00000006u, 0x00000f8au, 0x0000015cu, 0x00080041u, 0x00000671u, 0x00000f8cu, 0x00000e8du, 0x00000220u, 0x00000f8au, 0x00000220u, 0x00000f88u, 0x0004003du, 0x0000000fu, 0x00000f8du, 0x00000f8cu, 0x00040071u, 0x00000006u, 0x00000f8eu, 0x00000f8du, 0x0003003eu, 0x00000f89u, 0x00000f8eu, 0x000500c4u, 0x00000006u, 0x00000f91u, 0x00000f8eu, 0x0000022du, 0x0004003du, 0x00000006u, 0x00000f92u, 0x0000015eu, 0x00050080u, 0x00000006u, 0x00000f93u, 0x00000f91u, 0x00000f92u, 0x0003003eu, 0x00000f8fu, 0x00000f93u, 0x0004003du, 0x00000006u, 0x00000f94u, 0x0000015fu, 0x000500c6u, 0x00000006u, 0x00000f96u, 0x00000f93u, 0x00000f94u, 0x0003003eu, 0x00000f8fu, 0x00000f96u, 0x0004003du, 0x00000006u, 0x00000f97u, 0x0000015cu, 0x000500c5u, 0x00000006u, 0x00000f99u, 0x00000f5cu, 0x00000f96u, 0x00080041u, 0x00000692u, 0x00000f9au, 0x00000f5au, 0x00000220u, 0x00000f97u, 0x00000220u, 0x00000f99u, 0x0004003du, 0x00000011u, 0x00000f9bu, 0x00000f9au, 0x00040071u, 0x00000006u, 0x00000f9cu, 0x00000f9bu, 0x0003003eu, 0x00000f89u, 0x00000f9cu, 0x0004003du, 0x00000069u, 0x00000f9du, 0x00000160u, 0x000300f7u, 0x00000fa0u, 0x00000000u, 0x000400fau, 0x00000f9du, 0x00000f9fu, 0x00000fa4u, 0x000200f8u, 0x00000f9fu, 0x0003003eu, 0x00000fa1u, 0x00000f9cu, 0x00050039u, 0x00000013u, 0x00000fa3u, 0x0000013cu, 0x00000fa1u, 0x0003003eu, 0x00000f9eu, 0x00000fa3u, 0x000200f9u, 0x00000fa0u, 0x000200f8u, 0x00000fa4u, 0x0003003eu, 0x00000fa5u, 0x00000f9cu, 0x00050039u, 0x00000013u, 0x00000fa7u, 0x00000139u, 0x00000fa5u, 0x0003003eu, 0x00000f9eu, 0x00000fa7u, 0x000200f9u, 0x00000fa0u, 0x000200f8u, 0x00000fa0u, 0x000700f5u, 0x00000013u, 0x0000ef5au, 0x00000fa3u, 0x00000f9fu, 0x00000fa7u, 0x00000fa4u, 0x000200feu, 0x0000ef5au, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000166u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000163u, 0x00030037u, 0x00000007u, 0x00000164u, 0x00030037u, 0x000000b1u, 0x00000165u, 0x000200f8u, 0x00000167u, 0x0004003bu, 0x00000007u, 0x00000fabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fc6u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000facu, 0x00000163u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000fadu, 0x00000facu, 0x00050041u, 0x00000007u, 0x00000faeu, 0x00000163u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000fafu, 0x00000faeu, 0x00050041u, 0x00000007u, 0x00000fb0u, 0x00000165u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000fb1u, 0x00000fb0u, 0x00050084u, 0x00000006u, 0x00000fb2u, 0x00000fafu, 0x00000fb1u, 0x00050080u, 0x00000006u, 0x00000fb3u, 0x00000fadu, 0x00000fb2u, 0x0003003eu, 0x00000fabu, 0x00000fb3u, 0x00050041u, 0x00000007u, 0x00000fb4u, 0x00000165u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000fb5u, 0x00000fb4u, 0x00050084u, 0x00000006u, 0x00000fb6u, 0x00000fb5u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00000fb8u, 0x00000fb3u, 0x00000fb6u, 0x0003003eu, 0x00000fabu, 0x00000fb8u, 0x000500c7u, 0x00000006u, 0x00000fbau, 0x00000fb8u, 0x00000e73u, 0x0003003eu, 0x00000fabu, 0x00000fbau, 0x000500c2u, 0x00000006u, 0x00000fbdu, 0x00000fbau, 0x0000022au, 0x0003003eu, 0x00000fbbu, 0x00000fbdu, 0x0004003du, 0x00000006u, 0x00000fbfu, 0x00000fb0u, 0x000500c7u, 0x00000006u, 0x00000fc0u, 0x00000fbfu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000fc1u, 0x00000fc0u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00000fc3u, 0x00000fbdu, 0x00000fc1u, 0x0003003eu, 0x00000fbbu, 0x00000fc3u, 0x000500c6u, 0x00000006u, 0x00000fc5u, 0x00000fc3u, 0x0000045cu, 0x0003003eu, 0x00000fbbu, 0x00000fc5u, 0x0004003du, 0x00000006u, 0x00000fc7u, 0x00000164u, 0x00080041u, 0x00000692u, 0x00000fc9u, 0x00000f5au, 0x00000220u, 0x00000fc7u, 0x00000220u, 0x00000fc5u, 0x0004003du, 0x00000011u, 0x00000fcau, 0x00000fc9u, 0x00040071u, 0x00000006u, 0x00000fcbu, 0x00000fcau, 0x0003003eu, 0x00000fc6u, 0x00000fcbu, 0x000500c2u, 0x00000006u, 0x00000fcdu, 0x00000fcbu, 0x0000025du, 0x00040071u, 0x00000011u, 0x00000fceu, 0x00000fcdu, 0x0004007cu, 0x00000012u, 0x00000fcfu, 0x00000fceu, 0x000500c7u, 0x00000006u, 0x00000fd1u, 0x00000fcbu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00000fd2u, 0x00000fd1u, 0x0004007cu, 0x00000012u, 0x00000fd3u, 0x00000fd2u, 0x00050050u, 0x000001aeu, 0x00000fd4u, 0x00000fcfu, 0x00000fd3u, 0x0009004fu, 0x00000013u, 0x00000fd5u, 0x00000fd4u, 0x00000fd4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000fd5u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000016eu, 0x00000000u, 0x0000015au, 0x00030037u, 0x00000128u, 0x00000168u, 0x00030037u, 0x00000007u, 0x00000169u, 0x00030037u, 0x000000b1u, 0x0000016au, 0x00030037u, 0x00000007u, 0x0000016bu, 0x00030037u, 0x00000007u, 0x0000016cu, 0x00030037u, 0x0000006au, 0x0000016du, 0x000200f8u, 0x0000016fu, 0x0004003bu, 0x00000007u, 0x00000fd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fe8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ff3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ff9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000100au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001011u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000fd9u, 0x00000168u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00000fdau, 0x00000fd9u, 0x00050041u, 0x00000007u, 0x00000fdbu, 0x00000168u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00000fdcu, 0x00000fdbu, 0x00050041u, 0x00000007u, 0x00000fddu, 0x0000016au, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00000fdeu, 0x00000fddu, 0x00050084u, 0x00000006u, 0x00000fdfu, 0x00000fdcu, 0x00000fdeu, 0x00050080u, 0x00000006u, 0x00000fe0u, 0x00000fdau, 0x00000fdfu, 0x0003003eu, 0x00000fd8u, 0x00000fe0u, 0x00050041u, 0x00000007u, 0x00000fe1u, 0x0000016au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00000fe2u, 0x00000fe1u, 0x00050084u, 0x00000006u, 0x00000fe3u, 0x00000fe2u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00000fe5u, 0x00000fe0u, 0x00000fe3u, 0x0003003eu, 0x00000fd8u, 0x00000fe5u, 0x000500c7u, 0x00000006u, 0x00000fe7u, 0x00000fe5u, 0x00000f2bu, 0x0003003eu, 0x00000fd8u, 0x00000fe7u, 0x000500c2u, 0x00000006u, 0x00000feau, 0x00000fe7u, 0x0000022au, 0x0003003eu, 0x00000fe8u, 0x00000feau, 0x0004003du, 0x00000006u, 0x00000fecu, 0x00000fddu, 0x000500c7u, 0x00000006u, 0x00000fedu, 0x00000fecu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00000feeu, 0x00000fedu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00000ff0u, 0x00000feau, 0x00000feeu, 0x0003003eu, 0x00000fe8u, 0x00000ff0u, 0x000500c6u, 0x00000006u, 0x00000ff2u, 0x00000ff0u, 0x0000045cu, 0x0003003eu, 0x00000fe8u, 0x00000ff2u, 0x0004003du, 0x00000006u, 0x00000ff4u, 0x00000169u, 0x00080041u, 0x00000692u, 0x00000ff6u, 0x00000f5au, 0x00000220u, 0x00000ff4u, 0x00000220u, 0x00000ff2u, 0x0004003du, 0x00000011u, 0x00000ff7u, 0x00000ff6u, 0x00040071u, 0x00000006u, 0x00000ff8u, 0x00000ff7u, 0x0003003eu, 0x00000ff3u, 0x00000ff8u, 0x000500c2u, 0x00000006u, 0x00000ffbu, 0x00000ff8u, 0x00000239u, 0x000500c7u, 0x00000006u, 0x00000ffdu, 0x00000ffbu, 0x00000ffcu, 0x0004003du, 0x00000006u, 0x00000ffeu, 0x0000016bu, 0x00050080u, 0x00000006u, 0x00000fffu, 0x00000ffdu, 0x00000ffeu, 0x0003003eu, 0x00000ff9u, 0x00000fffu, 0x0004003du, 0x00000006u, 0x00001000u, 0x0000016cu, 0x000500c6u, 0x00000006u, 0x00001002u, 0x00000fffu, 0x00001000u, 0x0003003eu, 0x00000ff9u, 0x00001002u, 0x0004003du, 0x00000006u, 0x00001003u, 0x00000169u, 0x000500c5u, 0x00000006u, 0x00001005u, 0x00000f5cu, 0x00001002u, 0x00080041u, 0x00000692u, 0x00001006u, 0x00000f5au, 0x00000220u, 0x00001003u, 0x00000220u, 0x00001005u, 0x0004003du, 0x00000011u, 0x00001007u, 0x00001006u, 0x00040071u, 0x00000006u, 0x00001008u, 0x00001007u, 0x0003003eu, 0x00000ff3u, 0x00001008u, 0x0004003du, 0x00000069u, 0x00001009u, 0x0000016du, 0x000300f7u, 0x0000100cu, 0x00000000u, 0x000400fau, 0x00001009u, 0x0000100bu, 0x00001010u, 0x000200f8u, 0x0000100bu, 0x0003003eu, 0x0000100du, 0x00001008u, 0x00050039u, 0x00000013u, 0x0000100fu, 0x0000013cu, 0x0000100du, 0x0003003eu, 0x0000100au, 0x0000100fu, 0x000200f9u, 0x0000100cu, 0x000200f8u, 0x00001010u, 0x0003003eu, 0x00001011u, 0x00001008u, 0x00050039u, 0x00000013u, 0x00001013u, 0x00000139u, 0x00001011u, 0x0003003eu, 0x0000100au, 0x00001013u, 0x000200f9u, 0x0000100cu, 0x000200f8u, 0x0000100cu, 0x000700f5u, 0x00000013u, 0x0000ef5bu, 0x0000100fu, 0x0000100bu, 0x00001013u, 0x00001010u, 0x000200feu, 0x0000ef5bu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000173u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000170u, 0x00030037u, 0x00000007u, 0x00000171u, 0x00030037u, 0x000000b1u, 0x00000172u, 0x000200f8u, 0x00000174u, 0x0004003bu, 0x00000007u, 0x00001017u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001026u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001030u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001018u, 0x00000170u, 0x00000233u, 0x0004003du, 0x00000006u, 0x00001019u, 0x00001018u, 0x00050041u, 0x00000007u, 0x0000101au, 0x00000170u, 0x00000236u, 0x0004003du, 0x00000006u, 0x0000101bu, 0x0000101au, 0x00050041u, 0x00000007u, 0x0000101cu, 0x00000172u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000101du, 0x0000101cu, 0x00050084u, 0x00000006u, 0x0000101eu, 0x0000101bu, 0x0000101du, 0x00050080u, 0x00000006u, 0x0000101fu, 0x00001019u, 0x0000101eu, 0x0003003eu, 0x00001017u, 0x0000101fu, 0x00050041u, 0x00000007u, 0x00001020u, 0x00000172u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001021u, 0x00001020u, 0x00050080u, 0x00000006u, 0x00001023u, 0x0000101fu, 0x00001021u, 0x0003003eu, 0x00001017u, 0x00001023u, 0x000500c7u, 0x00000006u, 0x00001025u, 0x00001023u, 0x00000e73u, 0x0003003eu, 0x00001017u, 0x00001025u, 0x0003003eu, 0x00001026u, 0x00001025u, 0x0004003du, 0x00000006u, 0x00001029u, 0x0000101cu, 0x000500c7u, 0x00000006u, 0x0000102au, 0x00001029u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000102bu, 0x0000102au, 0x0000022du, 0x000500c6u, 0x00000006u, 0x0000102du, 0x00001025u, 0x0000102bu, 0x0003003eu, 0x00001026u, 0x0000102du, 0x000500c6u, 0x00000006u, 0x0000102fu, 0x0000102du, 0x00000464u, 0x0003003eu, 0x00001026u, 0x0000102fu, 0x0004003du, 0x00000006u, 0x00001031u, 0x00000171u, 0x00080041u, 0x00000671u, 0x00001033u, 0x00000e8du, 0x00000220u, 0x00001031u, 0x00000220u, 0x0000102fu, 0x0004003du, 0x0000000fu, 0x00001034u, 0x00001033u, 0x00040071u, 0x00000006u, 0x00001035u, 0x00001034u, 0x0003003eu, 0x00001030u, 0x00001035u, 0x00040071u, 0x00000011u, 0x00001037u, 0x00001035u, 0x0004007cu, 0x00000012u, 0x00001038u, 0x00001037u, 0x00070050u, 0x00000013u, 0x00001039u, 0x00001038u, 0x00001038u, 0x00001038u, 0x00001038u, 0x000200feu, 0x00001039u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000178u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000175u, 0x00030037u, 0x00000007u, 0x00000176u, 0x00030037u, 0x000000b1u, 0x00000177u, 0x000200f8u, 0x00000179u, 0x0004003bu, 0x00000007u, 0x0000103cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000104bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001055u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000105bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000105eu, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000103du, 0x00000175u, 0x00000233u, 0x0004003du, 0x00000006u, 0x0000103eu, 0x0000103du, 0x00050041u, 0x00000007u, 0x0000103fu, 0x00000175u, 0x00000236u, 0x0004003du, 0x00000006u, 0x00001040u, 0x0000103fu, 0x00050041u, 0x00000007u, 0x00001041u, 0x00000177u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001042u, 0x00001041u, 0x00050084u, 0x00000006u, 0x00001043u, 0x00001040u, 0x00001042u, 0x00050080u, 0x00000006u, 0x00001044u, 0x0000103eu, 0x00001043u, 0x0003003eu, 0x0000103cu, 0x00001044u, 0x00050041u, 0x00000007u, 0x00001045u, 0x00000177u, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001046u, 0x00001045u, 0x00050080u, 0x00000006u, 0x00001048u, 0x00001044u, 0x00001046u, 0x0003003eu, 0x0000103cu, 0x00001048u, 0x000500c7u, 0x00000006u, 0x0000104au, 0x00001048u, 0x00000e73u, 0x0003003eu, 0x0000103cu, 0x0000104au, 0x0003003eu, 0x0000104bu, 0x0000104au, 0x0004003du, 0x00000006u, 0x0000104eu, 0x00001041u, 0x000500c7u, 0x00000006u, 0x0000104fu, 0x0000104eu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001050u, 0x0000104fu, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00001052u, 0x0000104au, 0x00001050u, 0x0003003eu, 0x0000104bu, 0x00001052u, 0x000500c6u, 0x00000006u, 0x00001054u, 0x00001052u, 0x00000464u, 0x0003003eu, 0x0000104bu, 0x00001054u, 0x0004003du, 0x00000006u, 0x00001056u, 0x00000176u, 0x00080041u, 0x00000671u, 0x00001058u, 0x00000e8du, 0x00000220u, 0x00001056u, 0x00000220u, 0x00001054u, 0x0004003du, 0x0000000fu, 0x00001059u, 0x00001058u, 0x00040071u, 0x00000006u, 0x0000105au, 0x00001059u, 0x0003003eu, 0x00001055u, 0x0000105au, 0x000500c2u, 0x00000006u, 0x0000105du, 0x0000105au, 0x00000233u, 0x0003003eu, 0x0000105bu, 0x0000105du, 0x000500c7u, 0x00000006u, 0x00001060u, 0x0000105au, 0x00000e96u, 0x0003003eu, 0x0000105eu, 0x00001060u, 0x000500c4u, 0x00000006u, 0x00001062u, 0x00001060u, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00001064u, 0x00001060u, 0x00001062u, 0x0003003eu, 0x0000105eu, 0x00001064u, 0x000500c4u, 0x00000006u, 0x00001066u, 0x0000105du, 0x00000233u, 0x000500c5u, 0x00000006u, 0x00001068u, 0x0000105du, 0x00001066u, 0x0003003eu, 0x0000105bu, 0x00001068u, 0x00040071u, 0x00000011u, 0x0000106au, 0x00001068u, 0x0004007cu, 0x00000012u, 0x0000106bu, 0x0000106au, 0x00040071u, 0x00000011u, 0x00001073u, 0x00001064u, 0x0004007cu, 0x00000012u, 0x00001074u, 0x00001073u, 0x00070050u, 0x00000013u, 0x00001075u, 0x0000106bu, 0x0000106bu, 0x0000106bu, 0x00001074u, 0x000200feu, 0x00001075u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000017eu, 0x00000000u, 0x00000149u, 0x00030037u, 0x00000128u, 0x0000017au, 0x00030037u, 0x00000007u, 0x0000017bu, 0x00030037u, 0x000000b1u, 0x0000017cu, 0x00030037u, 0x00000007u, 0x0000017du, 0x000200f8u, 0x0000017fu, 0x0004003bu, 0x00000007u, 0x00001078u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001081u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001088u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000108fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001099u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000010a4u, 0x00000007u, 0x0004003bu, 0x00000056u, 0x000010aau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000010afu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x000010b5u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001079u, 0x0000017au, 0x00000233u, 0x0004003du, 0x00000006u, 0x0000107au, 0x00001079u, 0x00050041u, 0x00000007u, 0x0000107bu, 0x0000017au, 0x00000236u, 0x0004003du, 0x00000006u, 0x0000107cu, 0x0000107bu, 0x00050041u, 0x00000007u, 0x0000107du, 0x0000017cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000107eu, 0x0000107du, 0x00050084u, 0x00000006u, 0x0000107fu, 0x0000107cu, 0x0000107eu, 0x00050080u, 0x00000006u, 0x00001080u, 0x0000107au, 0x0000107fu, 0x0003003eu, 0x00001078u, 0x00001080u, 0x00050041u, 0x00000007u, 0x00001083u, 0x0000017cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001084u, 0x00001083u, 0x00050080u, 0x00000006u, 0x00001085u, 0x00001080u, 0x00001084u, 0x0003003eu, 0x00001081u, 0x00001085u, 0x000500c7u, 0x00000006u, 0x00001087u, 0x00001085u, 0x00000f2bu, 0x0003003eu, 0x00001081u, 0x00001087u, 0x0004003du, 0x00000006u, 0x0000108au, 0x0000017du, 0x00050084u, 0x00000006u, 0x0000108bu, 0x0000108au, 0x00000386u, 0x00050080u, 0x00000006u, 0x0000108cu, 0x00001080u, 0x0000108bu, 0x0003003eu, 0x00001088u, 0x0000108cu, 0x000500c7u, 0x00000006u, 0x0000108eu, 0x0000108cu, 0x00000f2bu, 0x0003003eu, 0x00001088u, 0x0000108eu, 0x0003003eu, 0x0000108fu, 0x00001087u, 0x0004003du, 0x00000006u, 0x00001092u, 0x0000107du, 0x000500c7u, 0x00000006u, 0x00001093u, 0x00001092u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001094u, 0x00001093u, 0x0000022du, 0x000500c6u, 0x00000006u, 0x00001096u, 0x00001087u, 0x00001094u, 0x0003003eu, 0x0000108fu, 0x00001096u, 0x000500c6u, 0x00000006u, 0x00001098u, 0x00001096u, 0x00000464u, 0x0003003eu, 0x0000108fu, 0x00001098u, 0x000500c2u, 0x00000006u, 0x0000109bu, 0x0000108eu, 0x0000022au, 0x0003003eu, 0x00001099u, 0x0000109bu, 0x0004003du, 0x00000006u, 0x0000109du, 0x0000107du, 0x000500c7u, 0x00000006u, 0x0000109eu, 0x0000109du, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000109fu, 0x0000109eu, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000010a1u, 0x0000109bu, 0x0000109fu, 0x0003003eu, 0x00001099u, 0x000010a1u, 0x000500c6u, 0x00000006u, 0x000010a3u, 0x000010a1u, 0x0000045cu, 0x0003003eu, 0x00001099u, 0x000010a3u, 0x0004003du, 0x00000006u, 0x000010a5u, 0x0000017bu, 0x000500c5u, 0x00000006u, 0x000010a7u, 0x00001098u, 0x00000f54u, 0x00080041u, 0x00000671u, 0x000010a8u, 0x00000e8du, 0x00000220u, 0x000010a5u, 0x00000220u, 0x000010a7u, 0x0004003du, 0x0000000fu, 0x000010a9u, 0x000010a8u, 0x0003003eu, 0x000010a4u, 0x000010a9u, 0x0004003du, 0x00000006u, 0x000010abu, 0x0000017bu, 0x00080041u, 0x00000692u, 0x000010adu, 0x00000f5au, 0x00000220u, 0x000010abu, 0x00000220u, 0x000010a3u, 0x0004003du, 0x00000011u, 0x000010aeu, 0x000010adu, 0x0003003eu, 0x000010aau, 0x000010aeu, 0x000500c2u, 0x00000011u, 0x000010b2u, 0x000010aeu, 0x000010b1u, 0x000500c7u, 0x00000011u, 0x000010b3u, 0x000010b2u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000010b4u, 0x000010b3u, 0x0003003eu, 0x000010afu, 0x000010b4u, 0x000500c2u, 0x00000011u, 0x000010b7u, 0x000010aeu, 0x0000021au, 0x000500c7u, 0x00000011u, 0x000010b8u, 0x000010b7u, 0x0000034bu, 0x00040071u, 0x0000000fu, 0x000010b9u, 0x000010b8u, 0x0003003eu, 0x000010b5u, 0x000010b9u, 0x00040071u, 0x00000011u, 0x000010bbu, 0x000010b4u, 0x0004007cu, 0x00000012u, 0x000010bcu, 0x000010bbu, 0x00050082u, 0x00000012u, 0x000010beu, 0x000010bcu, 0x000010bdu, 0x00040071u, 0x00000011u, 0x000010c0u, 0x000010b9u, 0x0004007cu, 0x00000012u, 0x000010c1u, 0x000010c0u, 0x00050082u, 0x00000012u, 0x000010c2u, 0x000010c1u, 0x000010bdu, 0x00040071u, 0x00000011u, 0x000010c4u, 0x000010a9u, 0x0004007cu, 0x00000012u, 0x000010c5u, 0x000010c4u, 0x00070050u, 0x00000013u, 0x000010c9u, 0x000010beu, 0x000010c2u, 0x000010c5u, 0x000010c5u, 0x000200feu, 0x000010c9u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000183u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000180u, 0x00030037u, 0x00000007u, 0x00000181u, 0x00030037u, 0x000000b1u, 0x00000182u, 0x000200f8u, 0x00000184u, 0x0004003bu, 0x00000007u, 0x000010ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010edu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010cdu, 0x00000180u, 0x00000233u, 0x0004003du, 0x00000006u, 0x000010ceu, 0x000010cdu, 0x00050041u, 0x00000007u, 0x000010cfu, 0x00000180u, 0x00000236u, 0x0004003du, 0x00000006u, 0x000010d0u, 0x000010cfu, 0x00050041u, 0x00000007u, 0x000010d1u, 0x00000182u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000010d2u, 0x000010d1u, 0x00050084u, 0x00000006u, 0x000010d3u, 0x000010d0u, 0x000010d2u, 0x00050080u, 0x00000006u, 0x000010d4u, 0x000010ceu, 0x000010d3u, 0x0003003eu, 0x000010ccu, 0x000010d4u, 0x00050041u, 0x00000007u, 0x000010d5u, 0x00000182u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000010d6u, 0x000010d5u, 0x00050084u, 0x00000006u, 0x000010d7u, 0x000010d6u, 0x00000386u, 0x00050080u, 0x00000006u, 0x000010d9u, 0x000010d4u, 0x000010d7u, 0x0003003eu, 0x000010ccu, 0x000010d9u, 0x000500c7u, 0x00000006u, 0x000010dbu, 0x000010d9u, 0x00000e73u, 0x0003003eu, 0x000010ccu, 0x000010dbu, 0x000500c2u, 0x00000006u, 0x000010deu, 0x000010dbu, 0x0000022au, 0x0003003eu, 0x000010dcu, 0x000010deu, 0x0004003du, 0x00000006u, 0x000010e0u, 0x000010d1u, 0x000500c7u, 0x00000006u, 0x000010e1u, 0x000010e0u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x000010e2u, 0x000010e1u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x000010e4u, 0x000010deu, 0x000010e2u, 0x0003003eu, 0x000010dcu, 0x000010e4u, 0x000500c6u, 0x00000006u, 0x000010e6u, 0x000010e4u, 0x0000045cu, 0x0003003eu, 0x000010dcu, 0x000010e6u, 0x0004003du, 0x00000006u, 0x000010e8u, 0x00000181u, 0x00080041u, 0x00000692u, 0x000010eau, 0x00000f5au, 0x00000220u, 0x000010e8u, 0x00000220u, 0x000010e6u, 0x0004003du, 0x00000011u, 0x000010ebu, 0x000010eau, 0x00040071u, 0x00000006u, 0x000010ecu, 0x000010ebu, 0x0003003eu, 0x000010e7u, 0x000010ecu, 0x0003003eu, 0x000010edu, 0x000010ecu, 0x00050039u, 0x00000013u, 0x000010efu, 0x00000139u, 0x000010edu, 0x000200feu, 0x000010efu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000188u, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x00000185u, 0x00030037u, 0x00000007u, 0x00000186u, 0x00030037u, 0x000000b1u, 0x00000187u, 0x000200f8u, 0x00000189u, 0x0004003bu, 0x00000007u, 0x000010f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001102u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000110du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001113u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000010f3u, 0x00000185u, 0x00000233u, 0x0004003du, 0x00000006u, 0x000010f4u, 0x000010f3u, 0x00050041u, 0x00000007u, 0x000010f5u, 0x00000185u, 0x00000236u, 0x0004003du, 0x00000006u, 0x000010f6u, 0x000010f5u, 0x00050041u, 0x00000007u, 0x000010f7u, 0x00000187u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x000010f8u, 0x000010f7u, 0x00050084u, 0x00000006u, 0x000010f9u, 0x000010f6u, 0x000010f8u, 0x00050080u, 0x00000006u, 0x000010fau, 0x000010f4u, 0x000010f9u, 0x0003003eu, 0x000010f2u, 0x000010fau, 0x00050041u, 0x00000007u, 0x000010fbu, 0x00000187u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000010fcu, 0x000010fbu, 0x00050084u, 0x00000006u, 0x000010fdu, 0x000010fcu, 0x00000386u, 0x00050080u, 0x00000006u, 0x000010ffu, 0x000010fau, 0x000010fdu, 0x0003003eu, 0x000010f2u, 0x000010ffu, 0x000500c7u, 0x00000006u, 0x00001101u, 0x000010ffu, 0x00000e73u, 0x0003003eu, 0x000010f2u, 0x00001101u, 0x000500c2u, 0x00000006u, 0x00001104u, 0x00001101u, 0x0000022au, 0x0003003eu, 0x00001102u, 0x00001104u, 0x0004003du, 0x00000006u, 0x00001106u, 0x000010f7u, 0x000500c7u, 0x00000006u, 0x00001107u, 0x00001106u, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x00001108u, 0x00001107u, 0x0000022au, 0x000500c6u, 0x00000006u, 0x0000110au, 0x00001104u, 0x00001108u, 0x0003003eu, 0x00001102u, 0x0000110au, 0x000500c6u, 0x00000006u, 0x0000110cu, 0x0000110au, 0x0000045cu, 0x0003003eu, 0x00001102u, 0x0000110cu, 0x0004003du, 0x00000006u, 0x0000110eu, 0x00000186u, 0x00080041u, 0x00000692u, 0x00001110u, 0x00000f5au, 0x00000220u, 0x0000110eu, 0x00000220u, 0x0000110cu, 0x0004003du, 0x00000011u, 0x00001111u, 0x00001110u, 0x00040071u, 0x00000006u, 0x00001112u, 0x00001111u, 0x0003003eu, 0x0000110du, 0x00001112u, 0x0003003eu, 0x00001113u, 0x00001112u, 0x00050039u, 0x00000013u, 0x00001115u, 0x0000013cu, 0x00001113u, 0x000200feu, 0x00001115u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000018du, 0x00000000u, 0x0000013eu, 0x00030037u, 0x00000128u, 0x0000018au, 0x00030037u, 0x00000007u, 0x0000018bu, 0x00030037u, 0x000000b1u, 0x0000018cu, 0x000200f8u, 0x0000018eu, 0x0004003bu, 0x00000007u, 0x00001118u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001128u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001133u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001139u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00001119u, 0x0000018au, 0x00000233u, 0x0004003du, 0x00000006u, 0x0000111au, 0x00001119u, 0x00050041u, 0x00000007u, 0x0000111bu, 0x0000018au, 0x00000236u, 0x0004003du, 0x00000006u, 0x0000111cu, 0x0000111bu, 0x00050041u, 0x00000007u, 0x0000111du, 0x0000018cu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000111eu, 0x0000111du, 0x00050084u, 0x00000006u, 0x0000111fu, 0x0000111cu, 0x0000111eu, 0x00050080u, 0x00000006u, 0x00001120u, 0x0000111au, 0x0000111fu, 0x0003003eu, 0x00001118u, 0x00001120u, 0x00050041u, 0x00000007u, 0x00001121u, 0x0000018cu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001122u, 0x00001121u, 0x00050084u, 0x00000006u, 0x00001123u, 0x00001122u, 0x00000386u, 0x00050080u, 0x00000006u, 0x00001125u, 0x00001120u, 0x00001123u, 0x0003003eu, 0x00001118u, 0x00001125u, 0x000500c7u, 0x00000006u, 0x00001127u, 0x00001125u, 0x00000f2bu, 0x0003003eu, 0x00001118u, 0x00001127u, 0x000500c2u, 0x00000006u, 0x0000112au, 0x00001127u, 0x0000022au, 0x0003003eu, 0x00001128u, 0x0000112au, 0x0004003du, 0x00000006u, 0x0000112cu, 0x0000111du, 0x000500c7u, 0x00000006u, 0x0000112du, 0x0000112cu, 0x0000045cu, 0x000500c4u, 0x00000006u, 0x0000112eu, 0x0000112du, 0x0000022au, 0x000500c6u, 0x00000006u, 0x00001130u, 0x0000112au, 0x0000112eu, 0x0003003eu, 0x00001128u, 0x00001130u, 0x000500c6u, 0x00000006u, 0x00001132u, 0x00001130u, 0x0000045cu, 0x0003003eu, 0x00001128u, 0x00001132u, 0x0004003du, 0x00000006u, 0x00001134u, 0x0000018bu, 0x00080041u, 0x00000692u, 0x00001136u, 0x00000f5au, 0x00000220u, 0x00001134u, 0x00000220u, 0x00001132u, 0x0004003du, 0x00000011u, 0x00001137u, 0x00001136u, 0x00040071u, 0x00000006u, 0x00001138u, 0x00001137u, 0x0003003eu, 0x00001133u, 0x00001138u, 0x0004003du, 0x00000006u, 0x0000113au, 0x0000018bu, 0x000500c5u, 0x00000006u, 0x0000113cu, 0x00001132u, 0x00000f5cu, 0x00080041u, 0x00000692u, 0x0000113du, 0x00000f5au, 0x00000220u, 0x0000113au, 0x00000220u, 0x0000113cu, 0x0004003du, 0x00000011u, 0x0000113eu, 0x0000113du, 0x00040071u, 0x00000006u, 0x0000113fu, 0x0000113eu, 0x0003003eu, 0x00001139u, 0x0000113fu, 0x000500c2u, 0x00000006u, 0x00001141u, 0x00001138u, 0x0000025du, 0x00040071u, 0x00000011u, 0x00001142u, 0x00001141u, 0x0004007cu, 0x00000012u, 0x00001143u, 0x00001142u, 0x000500c7u, 0x00000006u, 0x00001145u, 0x00001138u, 0x000006c3u, 0x00040071u, 0x00000011u, 0x00001146u, 0x00001145u, 0x0004007cu, 0x00000012u, 0x00001147u, 0x00001146u, 0x000500c2u, 0x00000006u, 0x00001149u, 0x0000113fu, 0x0000025du, 0x00040071u, 0x00000011u, 0x0000114au, 0x00001149u, 0x0004007cu, 0x00000012u, 0x0000114bu, 0x0000114au, 0x000500c7u, 0x00000006u, 0x0000114du, 0x0000113fu, 0x000006c3u, 0x00040071u, 0x00000011u, 0x0000114eu, 0x0000114du, 0x0004007cu, 0x00000012u, 0x0000114fu, 0x0000114eu, 0x00070050u, 0x00000013u, 0x00001150u, 0x00001143u, 0x00001147u, 0x0000114bu, 0x0000114fu, 0x000200feu, 0x00001150u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000195u, 0x00000000u, 0x0000018fu, 0x00030037u, 0x0000006au, 0x00000190u, 0x00030037u, 0x00000046u, 0x00000191u, 0x00030037u, 0x00000046u, 0x00000192u, 0x00030037u, 0x00000046u, 0x00000193u, 0x00030037u, 0x00000046u, 0x00000194u, 0x000200f8u, 0x00000196u, 0x0004003bu, 0x0000006au, 0x00001167u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001153u, 0x00000191u, 0x0008000cu, 0x00000008u, 0x00001154u, 0x00000001u, 0x0000002du, 0x00001153u, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x00000191u, 0x00001154u, 0x0004003du, 0x00000008u, 0x00001155u, 0x00000194u, 0x000500b1u, 0x00000069u, 0x00001156u, 0x00001155u, 0x00000266u, 0x000300f7u, 0x00001158u, 0x00000000u, 0x000400fau, 0x00001156u, 0x00001157u, 0x0000115cu, 0x000200f8u, 0x00001157u, 0x0004003du, 0x00000008u, 0x00001159u, 0x00000194u, 0x0004003du, 0x00000008u, 0x0000115au, 0x00000191u, 0x000500c3u, 0x00000008u, 0x0000115bu, 0x0000115au, 0x00001159u, 0x0003003eu, 0x00000191u, 0x0000115bu, 0x000200f9u, 0x00001158u, 0x000200f8u, 0x0000115cu, 0x0004003du, 0x00000008u, 0x0000115eu, 0x00000194u, 0x00050082u, 0x00000008u, 0x0000115fu, 0x0000115du, 0x0000115eu, 0x0004003du, 0x00000008u, 0x00001160u, 0x00000191u, 0x000500c4u, 0x00000008u, 0x00001161u, 0x00001160u, 0x0000115fu, 0x0003003eu, 0x00000191u, 0x00001161u, 0x0004003du, 0x00000008u, 0x00001162u, 0x00000191u, 0x000500c3u, 0x00000008u, 0x00001163u, 0x00001162u, 0x00000554u, 0x0003003eu, 0x00000191u, 0x00001163u, 0x000200f9u, 0x00001158u, 0x000200f8u, 0x00001158u, 0x0004003du, 0x00000069u, 0x00001164u, 0x00000190u, 0x000300f7u, 0x00001166u, 0x00000000u, 0x000400fau, 0x00001164u, 0x00001165u, 0x0000117du, 0x000200f8u, 0x00001165u, 0x0004003du, 0x00000008u, 0x00001168u, 0x00000191u, 0x000500c3u, 0x00000008u, 0x00001169u, 0x00001168u, 0x00000230u, 0x0004003du, 0x00000008u, 0x0000116au, 0x00000193u, 0x000500afu, 0x00000069u, 0x0000116bu, 0x00001169u, 0x0000116au, 0x0003003eu, 0x00001167u, 0x0000116bu, 0x000300f7u, 0x0000116eu, 0x00000000u, 0x000400fau, 0x0000116bu, 0x0000116du, 0x00001177u, 0x000200f8u, 0x0000116du, 0x0004003du, 0x00000008u, 0x0000116fu, 0x00000193u, 0x000500c3u, 0x00000008u, 0x00001170u, 0x0000116fu, 0x0000022du, 0x0004003du, 0x00000008u, 0x00001171u, 0x00000192u, 0x000500c3u, 0x00000008u, 0x00001172u, 0x00001171u, 0x0000022du, 0x00050082u, 0x00000008u, 0x00001173u, 0x00001170u, 0x00001172u, 0x000500c7u, 0x00000008u, 0x00001175u, 0x00001173u, 0x00001174u, 0x000500c4u, 0x00000008u, 0x00001176u, 0x00001175u, 0x00000236u, 0x0003003eu, 0x00000191u, 0x00001176u, 0x000200f9u, 0x0000116eu, 0x000200f8u, 0x00001177u, 0x0004003du, 0x00000008u, 0x00001178u, 0x00000191u, 0x0004003du, 0x00000008u, 0x00001179u, 0x00000192u, 0x000500c4u, 0x00000008u, 0x0000117au, 0x00001179u, 0x00000230u, 0x00050082u, 0x00000008u, 0x0000117bu, 0x00001178u, 0x0000117au, 0x0007000cu, 0x00000008u, 0x0000117cu, 0x00000001u, 0x0000002au, 0x0000117bu, 0x00000220u, 0x0003003eu, 0x00000191u, 0x0000117cu, 0x000200f9u, 0x0000116eu, 0x000200f8u, 0x0000116eu, 0x000200f9u, 0x00001166u, 0x000200f8u, 0x0000117du, 0x0004003du, 0x00000008u, 0x0000117eu, 0x00000192u, 0x000500c4u, 0x00000008u, 0x0000117fu, 0x0000117eu, 0x00000230u, 0x0004003du, 0x00000008u, 0x00001180u, 0x00000191u, 0x00050082u, 0x00000008u, 0x00001181u, 0x00001180u, 0x0000117fu, 0x0003003eu, 0x00000191u, 0x00001181u, 0x000200f9u, 0x00001166u, 0x000200f8u, 0x00001166u, 0x0004003du, 0x00000008u, 0x00001182u, 0x00000191u, 0x000200feu, 0x00001182u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000019bu, 0x00000000u, 0x00000197u, 0x00030037u, 0x00000046u, 0x00000198u, 0x00030037u, 0x00000046u, 0x00000199u, 0x00030037u, 0x00000046u, 0x0000019au, 0x000200f8u, 0x0000019cu, 0x0004003du, 0x00000008u, 0x00001185u, 0x00000198u, 0x0008000cu, 0x00000008u, 0x00001186u, 0x00000001u, 0x0000002du, 0x00001185u, 0x00000c60u, 0x00000c1bu, 0x0003003eu, 0x00000198u, 0x00001186u, 0x0004003du, 0x00000008u, 0x00001187u, 0x0000019au, 0x000500b1u, 0x00000069u, 0x00001188u, 0x00001187u, 0x00000266u, 0x000300f7u, 0x0000118au, 0x00000000u, 0x000400fau, 0x00001188u, 0x00001189u, 0x0000118eu, 0x000200f8u, 0x00001189u, 0x0004003du, 0x00000008u, 0x0000118bu, 0x0000019au, 0x0004003du, 0x00000008u, 0x0000118cu, 0x00000198u, 0x000500c3u, 0x00000008u, 0x0000118du, 0x0000118cu, 0x0000118bu, 0x0003003eu, 0x00000198u, 0x0000118du, 0x000200f9u, 0x0000118au, 0x000200f8u, 0x0000118eu, 0x0004003du, 0x00000008u, 0x0000118fu, 0x0000019au, 0x00050082u, 0x00000008u, 0x00001190u, 0x0000115du, 0x0000118fu, 0x0004003du, 0x00000008u, 0x00001191u, 0x00000198u, 0x000500c4u, 0x00000008u, 0x00001192u, 0x00001191u, 0x00001190u, 0x0003003eu, 0x00000198u, 0x00001192u, 0x0004003du, 0x00000008u, 0x00001193u, 0x00000198u, 0x000500c3u, 0x00000008u, 0x00001194u, 0x00001193u, 0x00000554u, 0x0003003eu, 0x00000198u, 0x00001194u, 0x000200f9u, 0x0000118au, 0x000200f8u, 0x0000118au, 0x0004003du, 0x00000008u, 0x00001195u, 0x00000199u, 0x000500c4u, 0x00000008u, 0x00001196u, 0x00001195u, 0x00000230u, 0x0004003du, 0x00000008u, 0x00001197u, 0x00000198u, 0x00050082u, 0x00000008u, 0x00001198u, 0x00001197u, 0x00001196u, 0x0003003eu, 0x00000198u, 0x00001198u, 0x0004003du, 0x00000008u, 0x00001199u, 0x00000198u, 0x000200feu, 0x00001199u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000001a4u, 0x00000000u, 0x0000019du, 0x00030037u, 0x00000128u, 0x0000019eu, 0x00030037u, 0x00000007u, 0x0000019fu, 0x00030037u, 0x00000106u, 0x000001a0u, 0x00030037u, 0x00000046u, 0x000001a1u, 0x00030037u, 0x0000006au, 0x000001a2u, 0x00030037u, 0x0000006au, 0x000001a3u, 0x000200f8u, 0x000001a5u, 0x0004003bu, 0x0000006au, 0x0000119cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000119fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011acu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000011b2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011b8u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000011c6u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000011c7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011cdu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000011ceu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011d4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000011ddu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000011f1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001203u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000124au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001255u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001256u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001258u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000125cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000125du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000125fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001263u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000126cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000127bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000119du, 0x000001a1u, 0x000500b1u, 0x00000069u, 0x0000119eu, 0x0000119du, 0x0000022du, 0x0003003eu, 0x0000119cu, 0x0000119eu, 0x000300f7u, 0x000011a2u, 0x00000000u, 0x000400fau, 0x0000119eu, 0x000011a1u, 0x000011a2u, 0x000200f8u, 0x000011a1u, 0x00050041u, 0x0000007bu, 0x000011a3u, 0x0000019eu, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000011a4u, 0x000011a3u, 0x00040071u, 0x00000006u, 0x000011a5u, 0x000011a4u, 0x0004007cu, 0x00000008u, 0x000011a6u, 0x000011a5u, 0x000500abu, 0x00000069u, 0x000011a7u, 0x000011a6u, 0x0000022du, 0x000200f9u, 0x000011a2u, 0x000200f8u, 0x000011a2u, 0x000700f5u, 0x00000069u, 0x000011a8u, 0x0000119eu, 0x000001a5u, 0x000011a7u, 0x000011a1u, 0x0004003du, 0x00000069u, 0x000011a9u, 0x000001a2u, 0x000400a8u, 0x00000069u, 0x000011aau, 0x000011a9u, 0x000500a7u, 0x00000069u, 0x000011abu, 0x000011a8u, 0x000011aau, 0x0003003eu, 0x0000119fu, 0x000011abu, 0x00050041u, 0x0000007bu, 0x000011adu, 0x0000019eu, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000011aeu, 0x000011adu, 0x00040071u, 0x00000006u, 0x000011afu, 0x000011aeu, 0x0004007cu, 0x00000008u, 0x000011b0u, 0x000011afu, 0x0007000cu, 0x00000008u, 0x000011b1u, 0x00000001u, 0x00000027u, 0x000011b0u, 0x0000022du, 0x0003003eu, 0x000011acu, 0x000011b1u, 0x0004003du, 0x0000000fu, 0x000011b4u, 0x000011adu, 0x00040071u, 0x00000006u, 0x000011b5u, 0x000011b4u, 0x0004007cu, 0x00000008u, 0x000011b6u, 0x000011b5u, 0x000500aau, 0x00000069u, 0x000011b7u, 0x000011b6u, 0x00000230u, 0x0003003eu, 0x000011b2u, 0x000011b7u, 0x0004003du, 0x00000069u, 0x000011bau, 0x000001a2u, 0x000500a6u, 0x00000069u, 0x000011bbu, 0x000011b7u, 0x000011bau, 0x000600a9u, 0x00000008u, 0x000011bcu, 0x000011bbu, 0x00001174u, 0x000003dau, 0x0003003eu, 0x000011b8u, 0x000011bcu, 0x000300f7u, 0x000011bfu, 0x00000000u, 0x000400fau, 0x000011abu, 0x000011beu, 0x0000124fu, 0x000200f8u, 0x000011beu, 0x0004003du, 0x00000008u, 0x000011c0u, 0x000001a1u, 0x00050084u, 0x00000008u, 0x000011c1u, 0x0000022du, 0x000011c0u, 0x00050041u, 0x00000046u, 0x000011c2u, 0x000001a0u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000011c3u, 0x000011c2u, 0x00050080u, 0x00000008u, 0x000011c4u, 0x000011c3u, 0x000011c1u, 0x0003003eu, 0x000011c2u, 0x000011c4u, 0x0004003du, 0x00000023u, 0x000011c8u, 0x0000019eu, 0x0003003eu, 0x000011c7u, 0x000011c8u, 0x0004003du, 0x00000008u, 0x000011cbu, 0x000011c2u, 0x0003003eu, 0x000011c9u, 0x000011cbu, 0x00060039u, 0x000000efu, 0x000011ccu, 0x00000131u, 0x000011c7u, 0x000011c9u, 0x0003003eu, 0x000011c6u, 0x000011ccu, 0x0004003du, 0x00000023u, 0x000011cfu, 0x0000019eu, 0x0003003eu, 0x000011ceu, 0x000011cfu, 0x00050041u, 0x00000046u, 0x000011d1u, 0x000001a0u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000011d2u, 0x000011d1u, 0x0003003eu, 0x000011d0u, 0x000011d2u, 0x00060039u, 0x00000008u, 0x000011d3u, 0x00000135u, 0x000011ceu, 0x000011d0u, 0x0003003eu, 0x000011cdu, 0x000011d3u, 0x00050041u, 0x00000007u, 0x000011d5u, 0x0000019eu, 0x00000233u, 0x0004003du, 0x00000006u, 0x000011d6u, 0x000011d5u, 0x00050041u, 0x00000007u, 0x000011d7u, 0x0000019eu, 0x00000236u, 0x0004003du, 0x00000006u, 0x000011d8u, 0x000011d7u, 0x0004007cu, 0x00000006u, 0x000011dau, 0x000011d3u, 0x00050084u, 0x00000006u, 0x000011dbu, 0x000011d8u, 0x000011dau, 0x00050080u, 0x00000006u, 0x000011dcu, 0x000011d6u, 0x000011dbu, 0x0003003eu, 0x000011d4u, 0x000011dcu, 0x00050084u, 0x00000006u, 0x000011dfu, 0x000011dcu, 0x00000386u, 0x00050050u, 0x000000efu, 0x000011e2u, 0x000011b1u, 0x000011b1u, 0x000500c4u, 0x000000efu, 0x000011e3u, 0x000011ccu, 0x000011e2u, 0x0004007cu, 0x000000b0u, 0x000011e4u, 0x000011e3u, 0x00050050u, 0x000000b0u, 0x000011e5u, 0x000011dfu, 0x000011dfu, 0x00050080u, 0x000000b0u, 0x000011e6u, 0x000011e5u, 0x000011e4u, 0x000500c7u, 0x000000b0u, 0x000011e9u, 0x000011e6u, 0x0000f3a6u, 0x0003003eu, 0x000011ddu, 0x000011e9u, 0x000500c7u, 0x00000006u, 0x000011ecu, 0x000011dau, 0x0000045cu, 0x00050084u, 0x00000006u, 0x000011edu, 0x000011ecu, 0x00000314u, 0x0004003du, 0x000000b0u, 0x000011eeu, 0x000011ddu, 0x00050050u, 0x000000b0u, 0x000011efu, 0x000011edu, 0x000011edu, 0x000500c6u, 0x000000b0u, 0x000011f0u, 0x000011eeu, 0x000011efu, 0x0003003eu, 0x000011ddu, 0x000011f0u, 0x0004003du, 0x000000b0u, 0x000011f2u, 0x000011ddu, 0x000500c2u, 0x000000b0u, 0x000011f4u, 0x000011f2u, 0x0000f3a7u, 0x0003003eu, 0x000011f1u, 0x000011f4u, 0x0004007cu, 0x00000006u, 0x000011f6u, 0x000011bcu, 0x0004003du, 0x000000b0u, 0x000011f7u, 0x000011f1u, 0x00050050u, 0x000000b0u, 0x000011f8u, 0x000011f6u, 0x000011f6u, 0x000500c7u, 0x000000b0u, 0x000011f9u, 0x000011f7u, 0x000011f8u, 0x0003003eu, 0x000011f1u, 0x000011f9u, 0x0004003du, 0x00000006u, 0x000011fbu, 0x0000019fu, 0x00050041u, 0x00000007u, 0x000011fcu, 0x000011f1u, 0x0000032du, 0x0004003du, 0x00000006u, 0x000011fdu, 0x000011fcu, 0x000500c6u, 0x00000006u, 0x000011feu, 0x000011fdu, 0x0000045cu, 0x00080041u, 0x00000692u, 0x000011ffu, 0x00000f5au, 0x00000220u, 0x000011fbu, 0x00000220u, 0x000011feu, 0x0004003du, 0x00000011u, 0x00001200u, 0x000011ffu, 0x00040071u, 0x00000006u, 0x00001201u, 0x00001200u, 0x0004007cu, 0x00000008u, 0x00001202u, 0x00001201u, 0x0003003eu, 0x000011fau, 0x00001202u, 0x0004003du, 0x00000006u, 0x00001204u, 0x0000019fu, 0x00050041u, 0x00000007u, 0x00001205u, 0x000011f1u, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001206u, 0x00001205u, 0x000500c6u, 0x00000006u, 0x00001207u, 0x00001206u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00001208u, 0x00000f5au, 0x00000220u, 0x00001204u, 0x00000220u, 0x00001207u, 0x0004003du, 0x00000011u, 0x00001209u, 0x00001208u, 0x00040071u, 0x00000006u, 0x0000120au, 0x00001209u, 0x0004007cu, 0x00000008u, 0x0000120bu, 0x0000120au, 0x0003003eu, 0x00001203u, 0x0000120bu, 0x0004003du, 0x0000000fu, 0x0000120du, 0x000011adu, 0x00040071u, 0x00000006u, 0x0000120eu, 0x0000120du, 0x0004007cu, 0x00000008u, 0x0000120fu, 0x0000120eu, 0x000500aau, 0x00000069u, 0x00001210u, 0x0000120fu, 0x0000022au, 0x000300f7u, 0x00001212u, 0x00000000u, 0x000400fau, 0x00001210u, 0x00001211u, 0x00001227u, 0x000200f8u, 0x00001211u, 0x00050041u, 0x00000007u, 0x00001213u, 0x000011ddu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001214u, 0x00001213u, 0x000500c7u, 0x00000006u, 0x00001215u, 0x00001214u, 0x00000386u, 0x0004007cu, 0x00000008u, 0x00001216u, 0x00001215u, 0x00050084u, 0x00000008u, 0x00001217u, 0x00000233u, 0x00001216u, 0x00050082u, 0x00000008u, 0x00001218u, 0x0000025du, 0x00001217u, 0x000500c3u, 0x00000008u, 0x0000121au, 0x00001202u, 0x00001218u, 0x0003003eu, 0x000011fau, 0x0000121au, 0x00050041u, 0x00000007u, 0x0000121bu, 0x000011ddu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x0000121cu, 0x0000121bu, 0x000500c7u, 0x00000006u, 0x0000121du, 0x0000121cu, 0x00000386u, 0x0004007cu, 0x00000008u, 0x0000121eu, 0x0000121du, 0x00050084u, 0x00000008u, 0x0000121fu, 0x00000233u, 0x0000121eu, 0x00050082u, 0x00000008u, 0x00001220u, 0x0000025du, 0x0000121fu, 0x000500c3u, 0x00000008u, 0x00001222u, 0x0000120bu, 0x00001220u, 0x0003003eu, 0x00001203u, 0x00001222u, 0x000500c7u, 0x00000008u, 0x00001224u, 0x0000121au, 0x0000035eu, 0x0003003eu, 0x000011fau, 0x00001224u, 0x000500c7u, 0x00000008u, 0x00001226u, 0x00001222u, 0x0000035eu, 0x0003003eu, 0x00001203u, 0x00001226u, 0x000200f9u, 0x00001212u, 0x000200f8u, 0x00001227u, 0x0004003du, 0x0000000fu, 0x00001229u, 0x000011adu, 0x00040071u, 0x00000006u, 0x0000122au, 0x00001229u, 0x0004007cu, 0x00000008u, 0x0000122bu, 0x0000122au, 0x000500aau, 0x00000069u, 0x0000122cu, 0x0000122bu, 0x00000220u, 0x000300f7u, 0x0000122eu, 0x00000000u, 0x000400fau, 0x0000122cu, 0x0000122du, 0x00001245u, 0x000200f8u, 0x0000122du, 0x00050041u, 0x00000007u, 0x0000122fu, 0x000011ddu, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001230u, 0x0000122fu, 0x000500c7u, 0x00000006u, 0x00001231u, 0x00001230u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x00001232u, 0x00001231u, 0x00050084u, 0x00000008u, 0x00001233u, 0x00000233u, 0x00001232u, 0x00050082u, 0x00000008u, 0x00001234u, 0x00000269u, 0x00001233u, 0x000500c3u, 0x00000008u, 0x00001236u, 0x00001202u, 0x00001234u, 0x0003003eu, 0x000011fau, 0x00001236u, 0x00050041u, 0x00000007u, 0x00001237u, 0x000011ddu, 0x0000045cu, 0x0004003du, 0x00000006u, 0x00001238u, 0x00001237u, 0x000500c7u, 0x00000006u, 0x00001239u, 0x00001238u, 0x00000464u, 0x0004007cu, 0x00000008u, 0x0000123au, 0x00001239u, 0x00050084u, 0x00000008u, 0x0000123bu, 0x00000233u, 0x0000123au, 0x00050082u, 0x00000008u, 0x0000123cu, 0x00000269u, 0x0000123bu, 0x000500c3u, 0x00000008u, 0x0000123eu, 0x0000120bu, 0x0000123cu, 0x0003003eu, 0x00001203u, 0x0000123eu, 0x000500c7u, 0x00000008u, 0x00001240u, 0x00001236u, 0x00000533u, 0x00050084u, 0x00000008u, 0x00001241u, 0x00001240u, 0x000003f2u, 0x0003003eu, 0x000011fau, 0x00001241u, 0x000500c7u, 0x00000008u, 0x00001243u, 0x0000123eu, 0x00000533u, 0x00050084u, 0x00000008u, 0x00001244u, 0x00001243u, 0x000003f2u, 0x0003003eu, 0x00001203u, 0x00001244u, 0x000200f9u, 0x0000122eu, 0x000200f8u, 0x00001245u, 0x000500c3u, 0x00000008u, 0x00001247u, 0x00001202u, 0x0000025du, 0x0003003eu, 0x000011fau, 0x00001247u, 0x000500c3u, 0x00000008u, 0x00001249u, 0x0000120bu, 0x0000025du, 0x0003003eu, 0x00001203u, 0x00001249u, 0x000200f9u, 0x0000122eu, 0x000200f8u, 0x0000122eu, 0x000700f5u, 0x00000008u, 0x0000ef60u, 0x00001244u, 0x0000122du, 0x00001249u, 0x00001245u, 0x000700f5u, 0x00000008u, 0x0000ef5eu, 0x00001241u, 0x0000122du, 0x00001247u, 0x00001245u, 0x000200f9u, 0x00001212u, 0x000200f8u, 0x00001212u, 0x000700f5u, 0x00000008u, 0x0000ef5fu, 0x00001226u, 0x00001211u, 0x0000ef60u, 0x0000122eu, 0x000700f5u, 0x00000008u, 0x0000ef5du, 0x00001224u, 0x00001211u, 0x0000ef5eu, 0x0000122eu, 0x000500c4u, 0x00000008u, 0x0000124cu, 0x0000ef5du, 0x0000025du, 0x000500c5u, 0x00000008u, 0x0000124eu, 0x0000124cu, 0x0000ef5fu, 0x0003003eu, 0x0000124au, 0x0000124eu, 0x000200f9u, 0x000011bfu, 0x000200f8u, 0x0000124fu, 0x0004003du, 0x00000008u, 0x00001250u, 0x000001a1u, 0x00050041u, 0x00000046u, 0x00001251u, 0x000001a0u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001252u, 0x00001251u, 0x00050080u, 0x00000008u, 0x00001253u, 0x00001252u, 0x00001250u, 0x0003003eu, 0x00001251u, 0x00001253u, 0x0004003du, 0x00000023u, 0x00001257u, 0x0000019eu, 0x0003003eu, 0x00001256u, 0x00001257u, 0x0004003du, 0x00000008u, 0x0000125au, 0x00001251u, 0x0003003eu, 0x00001258u, 0x0000125au, 0x00060039u, 0x00000008u, 0x0000125bu, 0x0000012cu, 0x00001256u, 0x00001258u, 0x0003003eu, 0x00001255u, 0x0000125bu, 0x0004003du, 0x00000023u, 0x0000125eu, 0x0000019eu, 0x0003003eu, 0x0000125du, 0x0000125eu, 0x00050041u, 0x00000046u, 0x00001260u, 0x000001a0u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001261u, 0x00001260u, 0x0003003eu, 0x0000125fu, 0x00001261u, 0x00060039u, 0x00000008u, 0x00001262u, 0x00000135u, 0x0000125du, 0x0000125fu, 0x0003003eu, 0x0000125cu, 0x00001262u, 0x00050041u, 0x00000007u, 0x00001264u, 0x0000019eu, 0x00000233u, 0x0004003du, 0x00000006u, 0x00001265u, 0x00001264u, 0x00050041u, 0x00000007u, 0x00001266u, 0x0000019eu, 0x00000236u, 0x0004003du, 0x00000006u, 0x00001267u, 0x00001266u, 0x0004007cu, 0x00000006u, 0x00001269u, 0x00001262u, 0x00050084u, 0x00000006u, 0x0000126au, 0x00001267u, 0x00001269u, 0x00050080u, 0x00000006u, 0x0000126bu, 0x00001265u, 0x0000126au, 0x0003003eu, 0x00001263u, 0x0000126bu, 0x00050084u, 0x00000006u, 0x0000126eu, 0x0000126bu, 0x00000386u, 0x000500c4u, 0x00000008u, 0x00001271u, 0x0000125bu, 0x000011b1u, 0x0004007cu, 0x00000006u, 0x00001272u, 0x00001271u, 0x00050080u, 0x00000006u, 0x00001273u, 0x0000126eu, 0x00001272u, 0x000500c7u, 0x00000006u, 0x00001274u, 0x00001273u, 0x000011e7u, 0x0003003eu, 0x0000126cu, 0x00001274u, 0x000500c7u, 0x00000006u, 0x00001277u, 0x00001269u, 0x0000045cu, 0x00050084u, 0x00000006u, 0x00001278u, 0x00001277u, 0x00000314u, 0x000500c6u, 0x00000006u, 0x0000127au, 0x00001274u, 0x00001278u, 0x0003003eu, 0x0000126cu, 0x0000127au, 0x000500c2u, 0x00000006u, 0x0000127du, 0x0000127au, 0x00000386u, 0x0003003eu, 0x0000127bu, 0x0000127du, 0x0004007cu, 0x00000006u, 0x0000127fu, 0x000011bcu, 0x000500c7u, 0x00000006u, 0x00001281u, 0x0000127du, 0x0000127fu, 0x0003003eu, 0x0000127bu, 0x00001281u, 0x0004003du, 0x00000006u, 0x00001282u, 0x0000019fu, 0x000500c6u, 0x00000006u, 0x00001284u, 0x00001281u, 0x0000045cu, 0x00080041u, 0x00000692u, 0x00001285u, 0x00000f5au, 0x00000220u, 0x00001282u, 0x00000220u, 0x00001284u, 0x0004003du, 0x00000011u, 0x00001286u, 0x00001285u, 0x00040071u, 0x00000006u, 0x00001287u, 0x00001286u, 0x0004007cu, 0x00000008u, 0x00001288u, 0x00001287u, 0x0003003eu, 0x0000124au, 0x00001288u, 0x0004003du, 0x00000069u, 0x00001289u, 0x000001a2u, 0x000300f7u, 0x0000128bu, 0x00000000u, 0x000400fau, 0x00001289u, 0x0000128au, 0x0000128bu, 0x000200f8u, 0x0000128au, 0x0004003du, 0x0000000fu, 0x0000128du, 0x000011adu, 0x00040071u, 0x00000006u, 0x0000128eu, 0x0000128du, 0x0004007cu, 0x00000008u, 0x0000128fu, 0x0000128eu, 0x000500aau, 0x00000069u, 0x00001290u, 0x0000128fu, 0x00000220u, 0x000300f7u, 0x00001292u, 0x00000000u, 0x000400fau, 0x00001290u, 0x00001291u, 0x000012a8u, 0x000200f8u, 0x00001291u, 0x000500c7u, 0x00000006u, 0x00001295u, 0x0000127au, 0x00000464u, 0x00050084u, 0x00000006u, 0x00001296u, 0x00000704u, 0x00001295u, 0x00050082u, 0x00000006u, 0x00001297u, 0x00001293u, 0x00001296u, 0x000500c3u, 0x00000008u, 0x00001299u, 0x00001288u, 0x00001297u, 0x0003003eu, 0x0000124au, 0x00001299u, 0x000500c7u, 0x00000008u, 0x0000129bu, 0x00001299u, 0x00000533u, 0x0003003eu, 0x0000124au, 0x0000129bu, 0x00050041u, 0x0000007bu, 0x0000129cu, 0x0000019eu, 0x0000025du, 0x0004003du, 0x0000000fu, 0x0000129du, 0x0000129cu, 0x000500c4u, 0x0000000fu, 0x0000129eu, 0x0000129du, 0x00000233u, 0x00040071u, 0x00000006u, 0x0000129fu, 0x0000129eu, 0x0004007cu, 0x00000008u, 0x000012a0u, 0x0000129fu, 0x000500c5u, 0x00000008u, 0x000012a2u, 0x0000129bu, 0x000012a0u, 0x0003003eu, 0x0000124au, 0x000012a2u, 0x000500c4u, 0x00000008u, 0x000012a4u, 0x000012a2u, 0x0000022du, 0x0003003eu, 0x0000124au, 0x000012a4u, 0x0004003du, 0x00000008u, 0x000012a5u, 0x000001a1u, 0x00050080u, 0x00000008u, 0x000012a7u, 0x000012a4u, 0x000012a5u, 0x0003003eu, 0x0000124au, 0x000012a7u, 0x000200f9u, 0x00001292u, 0x000200f8u, 0x000012a8u, 0x000500c7u, 0x00000006u, 0x000012aau, 0x0000127au, 0x00000386u, 0x00050084u, 0x00000006u, 0x000012abu, 0x00000704u, 0x000012aau, 0x00050082u, 0x00000006u, 0x000012acu, 0x00000314u, 0x000012abu, 0x000500c3u, 0x00000008u, 0x000012aeu, 0x00001288u, 0x000012acu, 0x0003003eu, 0x0000124au, 0x000012aeu, 0x000500c7u, 0x00000008u, 0x000012b0u, 0x000012aeu, 0x0000035eu, 0x0003003eu, 0x0000124au, 0x000012b0u, 0x000500c4u, 0x00000008u, 0x000012b2u, 0x000012b0u, 0x0000022du, 0x0003003eu, 0x0000124au, 0x000012b2u, 0x0004003du, 0x00000008u, 0x000012b3u, 0x000001a1u, 0x00050080u, 0x00000008u, 0x000012b5u, 0x000012b2u, 0x000012b3u, 0x0003003eu, 0x0000124au, 0x000012b5u, 0x000200f9u, 0x00001292u, 0x000200f8u, 0x00001292u, 0x000700f5u, 0x00000008u, 0x0000ef5cu, 0x000012a7u, 0x00001291u, 0x000012b5u, 0x000012a8u, 0x0004003du, 0x00000006u, 0x000012b6u, 0x0000019fu, 0x000500c5u, 0x00000008u, 0x000012b9u, 0x0000ef5cu, 0x000012b8u, 0x000500c6u, 0x00000008u, 0x000012bau, 0x000012b9u, 0x0000022au, 0x00080041u, 0x00000692u, 0x000012bbu, 0x00000f5au, 0x00000220u, 0x000012b6u, 0x00000220u, 0x000012bau, 0x0004003du, 0x00000011u, 0x000012bcu, 0x000012bbu, 0x00040071u, 0x00000006u, 0x000012bdu, 0x000012bcu, 0x0004007cu, 0x00000008u, 0x000012beu, 0x000012bdu, 0x0003003eu, 0x0000124au, 0x000012beu, 0x000200f9u, 0x0000128bu, 0x000200f8u, 0x0000128bu, 0x000700f5u, 0x00000008u, 0x0000ef62u, 0x00001288u, 0x0000124fu, 0x000012beu, 0x00001292u, 0x000200f9u, 0x000011bfu, 0x000200f8u, 0x000011bfu, 0x000700f5u, 0x00000008u, 0x0000ef61u, 0x0000124eu, 0x00001212u, 0x0000ef62u, 0x0000128bu, 0x000200feu, 0x0000ef61u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000001acu, 0x00000000u, 0x0000019du, 0x00030037u, 0x00000128u, 0x000001a6u, 0x00030037u, 0x00000007u, 0x000001a7u, 0x00030037u, 0x00000106u, 0x000001a8u, 0x00030037u, 0x00000046u, 0x000001a9u, 0x00030037u, 0x0000006au, 0x000001aau, 0x00030037u, 0x0000006au, 0x000001abu, 0x000200f8u, 0x000001adu, 0x0004003bu, 0x00000046u, 0x000012c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012ccu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012cdu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012d7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012dau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012dbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012e6u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000012efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000012f1u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000012f3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000012f5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000012f6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000012f8u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001304u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001306u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001308u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000130au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000130cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000130eu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000012c2u, 0x000001a6u, 0x00000220u, 0x0004003du, 0x00000006u, 0x000012c3u, 0x000012c2u, 0x0004007cu, 0x00000008u, 0x000012c4u, 0x000012c3u, 0x00050041u, 0x0000007bu, 0x000012c5u, 0x000001a6u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x000012c6u, 0x000012c5u, 0x00040071u, 0x00000006u, 0x000012c7u, 0x000012c6u, 0x0004007cu, 0x00000008u, 0x000012c8u, 0x000012c7u, 0x00050041u, 0x00000046u, 0x000012cau, 0x000001a8u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000012cbu, 0x000012cau, 0x0003003eu, 0x000012c9u, 0x000012cbu, 0x0003003eu, 0x000012ccu, 0x000012c4u, 0x0003003eu, 0x000012cdu, 0x000012c8u, 0x00070039u, 0x00000008u, 0x000012ceu, 0x0000019bu, 0x000012c9u, 0x000012ccu, 0x000012cdu, 0x0003003eu, 0x000012cau, 0x000012ceu, 0x00050041u, 0x00000007u, 0x000012d0u, 0x000001a6u, 0x0000022du, 0x0004003du, 0x00000006u, 0x000012d1u, 0x000012d0u, 0x0004007cu, 0x00000008u, 0x000012d2u, 0x000012d1u, 0x00050041u, 0x0000007bu, 0x000012d3u, 0x000001a6u, 0x00000269u, 0x0004003du, 0x0000000fu, 0x000012d4u, 0x000012d3u, 0x00040071u, 0x00000006u, 0x000012d5u, 0x000012d4u, 0x0004007cu, 0x00000008u, 0x000012d6u, 0x000012d5u, 0x00050041u, 0x00000046u, 0x000012d8u, 0x000001a8u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000012d9u, 0x000012d8u, 0x0003003eu, 0x000012d7u, 0x000012d9u, 0x0003003eu, 0x000012dau, 0x000012d2u, 0x0003003eu, 0x000012dbu, 0x000012d6u, 0x00070039u, 0x00000008u, 0x000012dcu, 0x0000019bu, 0x000012d7u, 0x000012dau, 0x000012dbu, 0x0003003eu, 0x000012d8u, 0x000012dcu, 0x0004003du, 0x000000efu, 0x000012deu, 0x000001a8u, 0x000500c3u, 0x000000efu, 0x000012e0u, 0x000012deu, 0x0000f3a4u, 0x0003003eu, 0x000001a8u, 0x000012e0u, 0x00060041u, 0x00000cd8u, 0x000012e1u, 0x00000cd7u, 0x00000220u, 0x0000022du, 0x0004003du, 0x00000008u, 0x000012e2u, 0x000012e1u, 0x000500aau, 0x00000069u, 0x000012e3u, 0x000012e2u, 0x00000220u, 0x000300f7u, 0x000012e5u, 0x00000000u, 0x000400fau, 0x000012e3u, 0x000012e4u, 0x000012e7u, 0x000200f8u, 0x000012e4u, 0x0003003eu, 0x000012e6u, 0x00000220u, 0x000200f9u, 0x000012e5u, 0x000200f8u, 0x000012e7u, 0x000500aau, 0x00000069u, 0x000012eau, 0x000012e2u, 0x0000022au, 0x000300f7u, 0x000012ecu, 0x00000000u, 0x000400fau, 0x000012eau, 0x000012ebu, 0x00001303u, 0x000200f8u, 0x000012ebu, 0x0004003du, 0x00000008u, 0x000012edu, 0x000001a9u, 0x000500c3u, 0x00000008u, 0x000012eeu, 0x000012edu, 0x0000022au, 0x0004003du, 0x00000023u, 0x000012f0u, 0x000001a6u, 0x0003003eu, 0x000012efu, 0x000012f0u, 0x0004003du, 0x00000006u, 0x000012f2u, 0x000001a7u, 0x0003003eu, 0x000012f1u, 0x000012f2u, 0x0004003du, 0x000000efu, 0x000012f4u, 0x000001a8u, 0x0003003eu, 0x000012f3u, 0x000012f4u, 0x0003003eu, 0x000012f5u, 0x000012eeu, 0x0004003du, 0x00000069u, 0x000012f7u, 0x000001aau, 0x0003003eu, 0x000012f6u, 0x000012f7u, 0x0004003du, 0x00000069u, 0x000012f9u, 0x000001abu, 0x0003003eu, 0x000012f8u, 0x000012f9u, 0x000a0039u, 0x00000008u, 0x000012fau, 0x000001a4u, 0x000012efu, 0x000012f1u, 0x000012f3u, 0x000012f5u, 0x000012f6u, 0x000012f8u, 0x0003003eu, 0x000012e6u, 0x000012fau, 0x0004003du, 0x00000008u, 0x000012fbu, 0x000001a9u, 0x000500c7u, 0x00000008u, 0x000012fcu, 0x000012fbu, 0x0000022au, 0x00050084u, 0x00000008u, 0x000012fdu, 0x0000025du, 0x000012fcu, 0x00050082u, 0x00000008u, 0x000012feu, 0x0000025du, 0x000012fdu, 0x000500c3u, 0x00000008u, 0x00001300u, 0x000012fau, 0x000012feu, 0x0003003eu, 0x000012e6u, 0x00001300u, 0x000500c7u, 0x00000008u, 0x00001302u, 0x00001300u, 0x0000035eu, 0x0003003eu, 0x000012e6u, 0x00001302u, 0x000200f9u, 0x000012ecu, 0x000200f8u, 0x00001303u, 0x0004003du, 0x00000023u, 0x00001305u, 0x000001a6u, 0x0003003eu, 0x00001304u, 0x00001305u, 0x0004003du, 0x00000006u, 0x00001307u, 0x000001a7u, 0x0003003eu, 0x00001306u, 0x00001307u, 0x0004003du, 0x000000efu, 0x00001309u, 0x000001a8u, 0x0003003eu, 0x00001308u, 0x00001309u, 0x0004003du, 0x00000008u, 0x0000130bu, 0x000001a9u, 0x0003003eu, 0x0000130au, 0x0000130bu, 0x0004003du, 0x00000069u, 0x0000130du, 0x000001aau, 0x0003003eu, 0x0000130cu, 0x0000130du, 0x0004003du, 0x00000069u, 0x0000130fu, 0x000001abu, 0x0003003eu, 0x0000130eu, 0x0000130fu, 0x000a0039u, 0x00000008u, 0x00001310u, 0x000001a4u, 0x00001304u, 0x00001306u, 0x00001308u, 0x0000130au, 0x0000130cu, 0x0000130eu, 0x0003003eu, 0x000012e6u, 0x00001310u, 0x000200f9u, 0x000012ecu, 0x000200f8u, 0x000012ecu, 0x000700f5u, 0x00000008u, 0x0000ef64u, 0x00001302u, 0x000012ebu, 0x00001310u, 0x00001303u, 0x000200f9u, 0x000012e5u, 0x000200f8u, 0x000012e5u, 0x000700f5u, 0x00000008u, 0x0000ef63u, 0x00000220u, 0x000012e4u, 0x0000ef64u, 0x000012ecu, 0x000200feu, 0x0000ef63u, 0x00010038u, 0x00050036u, 0x000001aeu, 0x000001b6u, 0x00000000u, 0x000001b0u, 0x00030037u, 0x000001afu, 0x000001b1u, 0x00030037u, 0x000001afu, 0x000001b2u, 0x00030037u, 0x000001afu, 0x000001b3u, 0x00030037u, 0x000001afu, 0x000001b4u, 0x00030037u, 0x00000106u, 0x000001b5u, 0x000200f8u, 0x000001b7u, 0x0004003bu, 0x00000046u, 0x00001314u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000131au, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001321u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001324u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000132fu, 0x00000007u, 0x00050041u, 0x00000046u, 0x00001315u, 0x000001b5u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001316u, 0x00001315u, 0x00050041u, 0x00000046u, 0x00001317u, 0x000001b5u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001318u, 0x00001317u, 0x00050080u, 0x00000008u, 0x00001319u, 0x00001316u, 0x00001318u, 0x0003003eu, 0x00001314u, 0x00001319u, 0x000500afu, 0x00000069u, 0x0000131cu, 0x00001319u, 0x0000115du, 0x0004003du, 0x000001aeu, 0x0000131du, 0x000001b4u, 0x0004003du, 0x000001aeu, 0x0000131eu, 0x000001b1u, 0x00050050u, 0x0000087bu, 0x0000131fu, 0x0000131cu, 0x0000131cu, 0x000600a9u, 0x000001aeu, 0x00001320u, 0x0000131fu, 0x0000131du, 0x0000131eu, 0x0003003eu, 0x0000131au, 0x00001320u, 0x000300f7u, 0x00001326u, 0x00000000u, 0x000400fau, 0x0000131cu, 0x00001325u, 0x0000132bu, 0x000200f8u, 0x00001325u, 0x0004003du, 0x000000efu, 0x00001327u, 0x000001b5u, 0x0007004fu, 0x000000efu, 0x00001328u, 0x00001327u, 0x00001327u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x0000132au, 0x0000f3adu, 0x00001328u, 0x0003003eu, 0x00001324u, 0x0000132au, 0x000200f9u, 0x00001326u, 0x000200f8u, 0x0000132bu, 0x0004003du, 0x000000efu, 0x0000132cu, 0x000001b5u, 0x0003003eu, 0x00001324u, 0x0000132cu, 0x000200f9u, 0x00001326u, 0x000200f8u, 0x00001326u, 0x000700f5u, 0x000000efu, 0x0000ef65u, 0x0000132au, 0x00001325u, 0x0000132cu, 0x0000132bu, 0x00040072u, 0x000001aeu, 0x0000132eu, 0x0000ef65u, 0x0003003eu, 0x00001321u, 0x0000132eu, 0x0004003du, 0x000001aeu, 0x00001330u, 0x000001b2u, 0x00050082u, 0x000001aeu, 0x00001332u, 0x00001330u, 0x00001320u, 0x00050041u, 0x000001c4u, 0x00001333u, 0x00001321u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00001334u, 0x00001333u, 0x00050050u, 0x000001aeu, 0x00001335u, 0x00001334u, 0x00001334u, 0x00050084u, 0x000001aeu, 0x00001336u, 0x00001332u, 0x00001335u, 0x0003003eu, 0x0000132fu, 0x00001336u, 0x0004003du, 0x000001aeu, 0x00001337u, 0x000001b3u, 0x00050082u, 0x000001aeu, 0x00001339u, 0x00001337u, 0x00001320u, 0x00050041u, 0x000001c4u, 0x0000133au, 0x00001321u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x0000133bu, 0x0000133au, 0x00050050u, 0x000001aeu, 0x0000133cu, 0x0000133bu, 0x0000133bu, 0x00050084u, 0x000001aeu, 0x0000133du, 0x00001339u, 0x0000133cu, 0x00050080u, 0x000001aeu, 0x0000133fu, 0x00001336u, 0x0000133du, 0x0003003eu, 0x0000132fu, 0x0000133fu, 0x00050080u, 0x000001aeu, 0x00001343u, 0x0000133fu, 0x0000f3aeu, 0x0003003eu, 0x0000132fu, 0x00001343u, 0x000500c3u, 0x000001aeu, 0x00001346u, 0x00001343u, 0x0000f3afu, 0x0003003eu, 0x0000132fu, 0x00001346u, 0x00050080u, 0x000001aeu, 0x00001349u, 0x00001346u, 0x00001320u, 0x0003003eu, 0x0000132fu, 0x00001349u, 0x000200feu, 0x00001349u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000001c2u, 0x00000000u, 0x000001b8u, 0x00030037u, 0x00000128u, 0x000001b9u, 0x00030037u, 0x00000007u, 0x000001bau, 0x00030037u, 0x00000106u, 0x000001bbu, 0x00030037u, 0x0000006au, 0x000001bcu, 0x00030037u, 0x0000006au, 0x000001bdu, 0x00030037u, 0x0000006au, 0x000001beu, 0x00030037u, 0x0000006au, 0x000001bfu, 0x00030037u, 0x0000006au, 0x000001c0u, 0x00030037u, 0x000000e4u, 0x000001c1u, 0x000200f8u, 0x000001c3u, 0x0004003bu, 0x0000006au, 0x0000135du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000135eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001361u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001362u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001363u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001376u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001377u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000137au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000137bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000137cu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001382u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001387u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001390u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001391u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001393u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001397u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001398u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000139au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000139eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000013a2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000013a4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000013a6u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000013aau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000013acu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000013aeu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000013c5u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000013cbu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000013ceu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000013e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013e5u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000013f1u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000013fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013fcu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000013feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001400u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001401u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001403u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001409u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001411u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001413u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001415u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001416u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001417u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001418u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000141au, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x0000141du, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001425u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001427u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001429u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000142au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000142bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000142cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000142eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001434u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000143cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000143eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001440u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001441u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001442u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001443u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001445u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000144eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001450u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001452u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001453u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001454u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001456u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001460u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001462u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001464u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001465u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001466u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001468u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000146fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001471u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001473u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001474u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001475u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001477u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001481u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001483u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001485u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001486u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001487u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001489u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001492u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001494u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001496u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001497u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001498u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x0000149au, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014a6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014aau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000014acu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014b5u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014b9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000014bbu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014c7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014cbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x000014cdu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014ecu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014eeu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000014f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014f9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000014fbu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001501u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001503u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001505u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000150eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001510u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001512u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001517u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001519u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000151bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001524u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001526u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001528u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000152eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001530u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001532u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000153bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000153du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000153fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001544u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001546u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001548u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001551u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001553u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001555u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000155bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000155du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000155fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001568u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000156au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000156cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001571u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001573u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001575u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000157eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001580u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001582u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001588u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000158au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000158cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001595u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001597u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001599u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000159eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015a2u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b3u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015bfu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c2u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015cbu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015ceu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015d7u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015dau, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015edu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000015efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015f0u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000015fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015feu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001601u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000160au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000160cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000160eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000160fu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000161bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000161du, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000161fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001620u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001625u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001627u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001629u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001632u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001634u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001636u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000163cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000163eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001640u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001649u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000164bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000164du, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001652u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001654u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001656u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000165fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001661u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001663u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001669u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000166bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000166du, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001676u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001678u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000167au, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000168au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000168cu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000168eu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001697u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001699u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000169bu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016a3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016a5u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016b0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016b2u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016b9u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016bbu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016c6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016c8u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016d0u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016d2u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016ddu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016dfu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016e6u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016e8u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016f3u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016f5u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000016fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016fdu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000016ffu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001708u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000170au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000170cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001711u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001713u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001715u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000171eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001720u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001722u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001728u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000172au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000172cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001735u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001737u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001739u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001748u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000174au, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000174cu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001755u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001757u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001759u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000175fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001761u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001763u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000176cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000176eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001770u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001775u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001777u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001779u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001782u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001784u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001786u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x0000178cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000178eu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x00001790u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001799u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000179bu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x0000179du, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017a4u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017a6u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017b1u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017b3u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017bbu, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017bdu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x000017c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017c8u, 0x00000007u, 0x0004003bu, 0x000000b1u, 0x000017cau, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000017d3u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000017d7u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x000017dau, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x000017e3u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x000017ffu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001809u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001811u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001816u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001819u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000181cu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000181fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001822u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001824u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001825u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x00001828u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000182bu, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000182eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001831u, 0x00000007u, 0x0004003bu, 0x000001afu, 0x0000184du, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001850u, 0x00000007u, 0x00050041u, 0x0000007bu, 0x0000134du, 0x000001b9u, 0x0000026cu, 0x0004003du, 0x0000000fu, 0x0000134eu, 0x0000134du, 0x00040071u, 0x00000006u, 0x0000134fu, 0x0000134eu, 0x0004007cu, 0x00000008u, 0x00001350u, 0x0000134fu, 0x000500c7u, 0x00000008u, 0x00001351u, 0x00001350u, 0x0000022au, 0x000500abu, 0x00000069u, 0x00001352u, 0x00001351u, 0x00000220u, 0x00050041u, 0x00000007u, 0x00001353u, 0x000001b9u, 0x00000220u, 0x0004003du, 0x00000006u, 0x00001354u, 0x00001353u, 0x0004007cu, 0x00000008u, 0x00001355u, 0x00001354u, 0x00050041u, 0x00000007u, 0x00001356u, 0x000001b9u, 0x0000022au, 0x0004003du, 0x00000006u, 0x00001357u, 0x00001356u, 0x0004007cu, 0x00000008u, 0x00001358u, 0x00001357u, 0x00050041u, 0x0000007bu, 0x00001359u, 0x000001b9u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x0000135au, 0x00001359u, 0x00040071u, 0x00000006u, 0x0000135bu, 0x0000135au, 0x0004007cu, 0x00000008u, 0x0000135cu, 0x0000135bu, 0x0003003eu, 0x0000135du, 0x00001352u, 0x00050041u, 0x00000046u, 0x0000135fu, 0x000001bbu, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001360u, 0x0000135fu, 0x0003003eu, 0x0000135eu, 0x00001360u, 0x0003003eu, 0x00001361u, 0x00001355u, 0x0003003eu, 0x00001362u, 0x00001358u, 0x0003003eu, 0x00001363u, 0x0000135cu, 0x00090039u, 0x00000008u, 0x00001364u, 0x00000195u, 0x0000135du, 0x0000135eu, 0x00001361u, 0x00001362u, 0x00001363u, 0x0003003eu, 0x0000135fu, 0x00001364u, 0x0004003du, 0x0000000fu, 0x00001367u, 0x0000134du, 0x00040071u, 0x00000006u, 0x00001368u, 0x00001367u, 0x0004007cu, 0x00000008u, 0x00001369u, 0x00001368u, 0x000500c7u, 0x00000008u, 0x0000136au, 0x00001369u, 0x00000233u, 0x000500abu, 0x00000069u, 0x0000136bu, 0x0000136au, 0x00000220u, 0x00050041u, 0x00000007u, 0x0000136cu, 0x000001b9u, 0x0000022du, 0x0004003du, 0x00000006u, 0x0000136du, 0x0000136cu, 0x0004007cu, 0x00000008u, 0x0000136eu, 0x0000136du, 0x00050041u, 0x00000007u, 0x0000136fu, 0x000001b9u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00001370u, 0x0000136fu, 0x0004007cu, 0x00000008u, 0x00001371u, 0x00001370u, 0x00050041u, 0x0000007bu, 0x00001372u, 0x000001b9u, 0x00000269u, 0x0004003du, 0x0000000fu, 0x00001373u, 0x00001372u, 0x00040071u, 0x00000006u, 0x00001374u, 0x00001373u, 0x0004007cu, 0x00000008u, 0x00001375u, 0x00001374u, 0x0003003eu, 0x00001376u, 0x0000136bu, 0x00050041u, 0x00000046u, 0x00001378u, 0x000001bbu, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001379u, 0x00001378u, 0x0003003eu, 0x00001377u, 0x00001379u, 0x0003003eu, 0x0000137au, 0x0000136eu, 0x0003003eu, 0x0000137bu, 0x00001371u, 0x0003003eu, 0x0000137cu, 0x00001375u, 0x00090039u, 0x00000008u, 0x0000137du, 0x00000195u, 0x00001376u, 0x00001377u, 0x0000137au, 0x0000137bu, 0x0000137cu, 0x0003003eu, 0x00001378u, 0x0000137du, 0x0004003du, 0x00000069u, 0x0000137fu, 0x000001beu, 0x000300f7u, 0x00001381u, 0x00000000u, 0x000400fau, 0x0000137fu, 0x00001380u, 0x00001386u, 0x000200f8u, 0x00001380u, 0x0004003du, 0x000000efu, 0x00001383u, 0x000001bbu, 0x000500c7u, 0x000000efu, 0x00001385u, 0x00001383u, 0x0000f3a5u, 0x0003003eu, 0x00001382u, 0x00001385u, 0x000200f9u, 0x00001381u, 0x000200f8u, 0x00001386u, 0x0003003eu, 0x00001382u, 0x00000c47u, 0x000200f9u, 0x00001381u, 0x000200f8u, 0x00001381u, 0x00050041u, 0x00000046u, 0x00001388u, 0x00001382u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001389u, 0x00001388u, 0x00050041u, 0x00000046u, 0x0000138au, 0x00001382u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x0000138bu, 0x0000138au, 0x00050080u, 0x00000008u, 0x0000138cu, 0x00001389u, 0x0000138bu, 0x0003003eu, 0x00001387u, 0x0000138cu, 0x0004003du, 0x000000efu, 0x0000138du, 0x000001bbu, 0x000500c3u, 0x000000efu, 0x0000138fu, 0x0000138du, 0x0000f3a4u, 0x0003003eu, 0x000001bbu, 0x0000138fu, 0x0004003du, 0x00000023u, 0x00001392u, 0x000001b9u, 0x0003003eu, 0x00001391u, 0x00001392u, 0x0004003du, 0x00000008u, 0x00001395u, 0x0000135fu, 0x0003003eu, 0x00001393u, 0x00001395u, 0x00060039u, 0x00000008u, 0x00001396u, 0x0000012cu, 0x00001391u, 0x00001393u, 0x0003003eu, 0x00001390u, 0x00001396u, 0x0004003du, 0x00000023u, 0x00001399u, 0x000001b9u, 0x0003003eu, 0x00001398u, 0x00001399u, 0x0004003du, 0x00000008u, 0x0000139cu, 0x00001378u, 0x0003003eu, 0x0000139au, 0x0000139cu, 0x00060039u, 0x00000008u, 0x0000139du, 0x00000135u, 0x00001398u, 0x0000139au, 0x0003003eu, 0x00001397u, 0x0000139du, 0x0004003du, 0x00000008u, 0x000013a0u, 0x0000135fu, 0x00050080u, 0x00000008u, 0x000013a1u, 0x000013a0u, 0x0000022au, 0x0004003du, 0x00000023u, 0x000013a3u, 0x000001b9u, 0x0003003eu, 0x000013a2u, 0x000013a3u, 0x0003003eu, 0x000013a4u, 0x000013a1u, 0x00060039u, 0x00000008u, 0x000013a5u, 0x0000012cu, 0x000013a2u, 0x000013a4u, 0x0003003eu, 0x0000139eu, 0x000013a5u, 0x0004003du, 0x00000008u, 0x000013a8u, 0x00001378u, 0x00050080u, 0x00000008u, 0x000013a9u, 0x000013a8u, 0x0000022au, 0x0004003du, 0x00000023u, 0x000013abu, 0x000001b9u, 0x0003003eu, 0x000013aau, 0x000013abu, 0x0003003eu, 0x000013acu, 0x000013a9u, 0x00060039u, 0x00000008u, 0x000013adu, 0x00000135u, 0x000013aau, 0x000013acu, 0x0003003eu, 0x000013a6u, 0x000013adu, 0x00050082u, 0x00000008u, 0x000013b1u, 0x000013adu, 0x0000139du, 0x0007000cu, 0x00000008u, 0x000013b3u, 0x00000001u, 0x0000002au, 0x000013b1u, 0x000013b2u, 0x0003003eu, 0x000013aeu, 0x000013b3u, 0x000500c7u, 0x00000008u, 0x000013b5u, 0x0000139du, 0x0000035eu, 0x00050080u, 0x00000008u, 0x000013b7u, 0x000013b5u, 0x000013b3u, 0x0003003eu, 0x000013a6u, 0x000013b7u, 0x0003003eu, 0x00001397u, 0x000013b5u, 0x0004003du, 0x00000069u, 0x000013bau, 0x000001bfu, 0x0004003du, 0x000000efu, 0x000013bbu, 0x00001382u, 0x000500aau, 0x0000087bu, 0x000013bdu, 0x000013bbu, 0x000013bcu, 0x00050051u, 0x00000069u, 0x000013beu, 0x000013bdu, 0x00000000u, 0x00050051u, 0x00000069u, 0x000013bfu, 0x000013bdu, 0x00000001u, 0x00060050u, 0x00000363u, 0x000013c0u, 0x000013bau, 0x000013beu, 0x000013bfu, 0x0004009bu, 0x00000069u, 0x000013c1u, 0x000013c0u, 0x0003003eu, 0x000001bfu, 0x000013c1u, 0x0004003du, 0x00000069u, 0x000013c2u, 0x000001bfu, 0x000300f7u, 0x000013c4u, 0x00000000u, 0x000400fau, 0x000013c2u, 0x000013c3u, 0x000013c4u, 0x000200f8u, 0x000013c3u, 0x0003003eu, 0x00001387u, 0x00000220u, 0x000200f9u, 0x000013c4u, 0x000200f8u, 0x000013c4u, 0x000600a9u, 0x00000008u, 0x0000f3deu, 0x000013c2u, 0x00000220u, 0x0000138cu, 0x00050041u, 0x0000007bu, 0x000013c6u, 0x000001b9u, 0x00000239u, 0x0004003du, 0x0000000fu, 0x000013c7u, 0x000013c6u, 0x00040071u, 0x00000006u, 0x000013c8u, 0x000013c7u, 0x0004007cu, 0x00000008u, 0x000013c9u, 0x000013c8u, 0x000500aau, 0x00000069u, 0x000013cau, 0x000013c9u, 0x0000022au, 0x0003003eu, 0x000013c5u, 0x000013cau, 0x000500afu, 0x00000069u, 0x000013cdu, 0x0000f3deu, 0x0000115du, 0x000300f7u, 0x000013d0u, 0x00000000u, 0x000400fau, 0x000013cdu, 0x000013cfu, 0x000013d4u, 0x000200f8u, 0x000013cfu, 0x00050050u, 0x000000efu, 0x000013d3u, 0x000013a5u, 0x000013b7u, 0x0003003eu, 0x000013ceu, 0x000013d3u, 0x000200f9u, 0x000013d0u, 0x000200f8u, 0x000013d4u, 0x00050050u, 0x000000efu, 0x000013d7u, 0x00001396u, 0x000013b5u, 0x0003003eu, 0x000013ceu, 0x000013d7u, 0x000200f9u, 0x000013d0u, 0x000200f8u, 0x000013d0u, 0x000700f5u, 0x000000efu, 0x0000ef6cu, 0x000013d3u, 0x000013cfu, 0x000013d7u, 0x000013d4u, 0x0003003eu, 0x000013cbu, 0x0000ef6cu, 0x0004003du, 0x00000069u, 0x000013d9u, 0x000001bcu, 0x000300f7u, 0x000013dbu, 0x00000000u, 0x000400fau, 0x000013d9u, 0x000013dau, 0x000014d4u, 0x000200f8u, 0x000013dau, 0x0004003du, 0x0000000fu, 0x000013ddu, 0x000013c6u, 0x00040071u, 0x00000006u, 0x000013deu, 0x000013ddu, 0x0004007cu, 0x00000008u, 0x000013dfu, 0x000013deu, 0x000300f7u, 0x000013e1u, 0x00000000u, 0x000b00fbu, 0x000013dfu, 0x000013e1u, 0x00000000u, 0x000013e0u, 0x00000002u, 0x000013e0u, 0x00000003u, 0x000013e0u, 0x00000004u, 0x000013e0u, 0x000200f8u, 0x000013e0u, 0x0003003eu, 0x000013e2u, 0x000013cdu, 0x000600a9u, 0x00000008u, 0x000013e7u, 0x000013cdu, 0x0000022du, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000013e8u, 0x000013e7u, 0x0003003eu, 0x000013e5u, 0x000013e8u, 0x00050041u, 0x0000007bu, 0x000013e9u, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000013eau, 0x000013e9u, 0x00040071u, 0x00000006u, 0x000013ebu, 0x000013eau, 0x0004007cu, 0x00000008u, 0x000013ecu, 0x000013ebu, 0x000300f7u, 0x000013f0u, 0x00000000u, 0x000700fbu, 0x000013ecu, 0x000013efu, 0x00000000u, 0x000013edu, 0x00000001u, 0x000013eeu, 0x000200f8u, 0x000013efu, 0x0004007cu, 0x000000b0u, 0x0000148eu, 0x0000ef6cu, 0x000600a9u, 0x00000008u, 0x00001490u, 0x000013cdu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x00001491u, 0x00001490u, 0x0004003du, 0x00000023u, 0x00001493u, 0x000001b9u, 0x0003003eu, 0x00001492u, 0x00001493u, 0x0004003du, 0x00000006u, 0x00001495u, 0x000001bau, 0x0003003eu, 0x00001494u, 0x00001495u, 0x0003003eu, 0x00001496u, 0x0000148eu, 0x0003003eu, 0x00001497u, 0x00001491u, 0x0003003eu, 0x00001498u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x0000149bu, 0x000001bdu, 0x0003003eu, 0x0000149au, 0x0000149bu, 0x000a0039u, 0x00000013u, 0x0000149cu, 0x0000016eu, 0x00001492u, 0x00001494u, 0x00001496u, 0x00001497u, 0x00001498u, 0x0000149au, 0x0003003eu, 0x000013f1u, 0x0000149cu, 0x0004003du, 0x00000069u, 0x0000149du, 0x000001beu, 0x000300f7u, 0x0000149fu, 0x00000000u, 0x000400fau, 0x0000149du, 0x0000149eu, 0x0000149fu, 0x000200f8u, 0x0000149eu, 0x00050050u, 0x000000efu, 0x000014a2u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000014a3u, 0x000014a2u, 0x0004003du, 0x00000023u, 0x000014a5u, 0x000001b9u, 0x0003003eu, 0x000014a4u, 0x000014a5u, 0x0004003du, 0x00000006u, 0x000014a7u, 0x000001bau, 0x0003003eu, 0x000014a6u, 0x000014a7u, 0x0003003eu, 0x000014a8u, 0x000014a3u, 0x0003003eu, 0x000014a9u, 0x0000045cu, 0x0003003eu, 0x000014aau, 0x000013e8u, 0x0004003du, 0x00000069u, 0x000014adu, 0x000001bdu, 0x0003003eu, 0x000014acu, 0x000014adu, 0x000a0039u, 0x00000013u, 0x000014aeu, 0x0000016eu, 0x000014a4u, 0x000014a6u, 0x000014a8u, 0x000014a9u, 0x000014aau, 0x000014acu, 0x0003003eu, 0x00001409u, 0x000014aeu, 0x00050050u, 0x000000efu, 0x000014b1u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000014b2u, 0x000014b1u, 0x0004003du, 0x00000023u, 0x000014b4u, 0x000001b9u, 0x0003003eu, 0x000014b3u, 0x000014b4u, 0x0004003du, 0x00000006u, 0x000014b6u, 0x000001bau, 0x0003003eu, 0x000014b5u, 0x000014b6u, 0x0003003eu, 0x000014b7u, 0x000014b2u, 0x0003003eu, 0x000014b8u, 0x00000386u, 0x0003003eu, 0x000014b9u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x000014bcu, 0x000001bdu, 0x0003003eu, 0x000014bbu, 0x000014bcu, 0x000a0039u, 0x00000013u, 0x000014bdu, 0x0000016eu, 0x000014b3u, 0x000014b5u, 0x000014b7u, 0x000014b8u, 0x000014b9u, 0x000014bbu, 0x0003003eu, 0x0000141du, 0x000014bdu, 0x000200f9u, 0x0000149fu, 0x000200f8u, 0x0000149fu, 0x000700f5u, 0x00000013u, 0x0000f05eu, 0x0000effcu, 0x000013efu, 0x000014bdu, 0x0000149eu, 0x000700f5u, 0x00000013u, 0x0000efffu, 0x0000effcu, 0x000013efu, 0x000014aeu, 0x0000149eu, 0x0004003du, 0x00000069u, 0x000014beu, 0x000001bfu, 0x000300f7u, 0x000014c0u, 0x00000000u, 0x000400fau, 0x000014beu, 0x000014bfu, 0x000014c0u, 0x000200f8u, 0x000014bfu, 0x00050050u, 0x000000efu, 0x000014c3u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000014c4u, 0x000014c3u, 0x0004003du, 0x00000023u, 0x000014c6u, 0x000001b9u, 0x0003003eu, 0x000014c5u, 0x000014c6u, 0x0004003du, 0x00000006u, 0x000014c8u, 0x000001bau, 0x0003003eu, 0x000014c7u, 0x000014c8u, 0x0003003eu, 0x000014c9u, 0x000014c4u, 0x0003003eu, 0x000014cau, 0x00000464u, 0x0003003eu, 0x000014cbu, 0x000013e8u, 0x0004003du, 0x00000069u, 0x000014ceu, 0x000001bdu, 0x0003003eu, 0x000014cdu, 0x000014ceu, 0x000a0039u, 0x00000013u, 0x000014cfu, 0x0000016eu, 0x000014c5u, 0x000014c7u, 0x000014c9u, 0x000014cau, 0x000014cbu, 0x000014cdu, 0x0003003eu, 0x00001434u, 0x000014cfu, 0x000200f9u, 0x000014c0u, 0x000200f8u, 0x000014c0u, 0x000700f5u, 0x00000013u, 0x0000f08cu, 0x0000effcu, 0x0000149fu, 0x000014cfu, 0x000014bfu, 0x000200f9u, 0x000013f0u, 0x000200f8u, 0x000013edu, 0x0004007cu, 0x000000b0u, 0x000013f3u, 0x0000ef6cu, 0x00050041u, 0x0000007bu, 0x000013f4u, 0x000001b9u, 0x0000025du, 0x0004003du, 0x0000000fu, 0x000013f5u, 0x000013f4u, 0x00040071u, 0x00000006u, 0x000013f6u, 0x000013f5u, 0x000600a9u, 0x00000008u, 0x000013f8u, 0x000013cdu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x000013f9u, 0x000013f8u, 0x0004003du, 0x00000023u, 0x000013fbu, 0x000001b9u, 0x0003003eu, 0x000013fau, 0x000013fbu, 0x0004003du, 0x00000006u, 0x000013fdu, 0x000001bau, 0x0003003eu, 0x000013fcu, 0x000013fdu, 0x0003003eu, 0x000013feu, 0x000013f3u, 0x0003003eu, 0x000013ffu, 0x000013f6u, 0x0003003eu, 0x00001400u, 0x000013f9u, 0x0003003eu, 0x00001401u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x00001404u, 0x000001bdu, 0x0003003eu, 0x00001403u, 0x00001404u, 0x000b0039u, 0x00000013u, 0x00001405u, 0x00000158u, 0x000013fau, 0x000013fcu, 0x000013feu, 0x000013ffu, 0x00001400u, 0x00001401u, 0x00001403u, 0x0003003eu, 0x000013f1u, 0x00001405u, 0x0004003du, 0x00000069u, 0x00001406u, 0x000001beu, 0x000300f7u, 0x00001408u, 0x00000000u, 0x000400fau, 0x00001406u, 0x00001407u, 0x00001408u, 0x000200f8u, 0x00001407u, 0x00050050u, 0x000000efu, 0x0000140cu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x0000140du, 0x0000140cu, 0x0004003du, 0x0000000fu, 0x0000140fu, 0x000013f4u, 0x00040071u, 0x00000006u, 0x00001410u, 0x0000140fu, 0x0004003du, 0x00000023u, 0x00001412u, 0x000001b9u, 0x0003003eu, 0x00001411u, 0x00001412u, 0x0004003du, 0x00000006u, 0x00001414u, 0x000001bau, 0x0003003eu, 0x00001413u, 0x00001414u, 0x0003003eu, 0x00001415u, 0x0000140du, 0x0003003eu, 0x00001416u, 0x00001410u, 0x0003003eu, 0x00001417u, 0x0000045cu, 0x0003003eu, 0x00001418u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x0000141bu, 0x000001bdu, 0x0003003eu, 0x0000141au, 0x0000141bu, 0x000b0039u, 0x00000013u, 0x0000141cu, 0x00000158u, 0x00001411u, 0x00001413u, 0x00001415u, 0x00001416u, 0x00001417u, 0x00001418u, 0x0000141au, 0x0003003eu, 0x00001409u, 0x0000141cu, 0x00050050u, 0x000000efu, 0x00001420u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001421u, 0x00001420u, 0x0004003du, 0x0000000fu, 0x00001423u, 0x000013f4u, 0x00040071u, 0x00000006u, 0x00001424u, 0x00001423u, 0x0004003du, 0x00000023u, 0x00001426u, 0x000001b9u, 0x0003003eu, 0x00001425u, 0x00001426u, 0x0004003du, 0x00000006u, 0x00001428u, 0x000001bau, 0x0003003eu, 0x00001427u, 0x00001428u, 0x0003003eu, 0x00001429u, 0x00001421u, 0x0003003eu, 0x0000142au, 0x00001424u, 0x0003003eu, 0x0000142bu, 0x00000386u, 0x0003003eu, 0x0000142cu, 0x000013e8u, 0x0004003du, 0x00000069u, 0x0000142fu, 0x000001bdu, 0x0003003eu, 0x0000142eu, 0x0000142fu, 0x000b0039u, 0x00000013u, 0x00001430u, 0x00000158u, 0x00001425u, 0x00001427u, 0x00001429u, 0x0000142au, 0x0000142bu, 0x0000142cu, 0x0000142eu, 0x0003003eu, 0x0000141du, 0x00001430u, 0x000200f9u, 0x00001408u, 0x000200f8u, 0x00001408u, 0x000700f5u, 0x00000013u, 0x0000f061u, 0x0000effcu, 0x000013edu, 0x00001430u, 0x00001407u, 0x000700f5u, 0x00000013u, 0x0000f002u, 0x0000effcu, 0x000013edu, 0x0000141cu, 0x00001407u, 0x0004003du, 0x00000069u, 0x00001431u, 0x000001bfu, 0x000300f7u, 0x00001433u, 0x00000000u, 0x000400fau, 0x00001431u, 0x00001432u, 0x00001433u, 0x000200f8u, 0x00001432u, 0x00050050u, 0x000000efu, 0x00001437u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001438u, 0x00001437u, 0x0004003du, 0x0000000fu, 0x0000143au, 0x000013f4u, 0x00040071u, 0x00000006u, 0x0000143bu, 0x0000143au, 0x0004003du, 0x00000023u, 0x0000143du, 0x000001b9u, 0x0003003eu, 0x0000143cu, 0x0000143du, 0x0004003du, 0x00000006u, 0x0000143fu, 0x000001bau, 0x0003003eu, 0x0000143eu, 0x0000143fu, 0x0003003eu, 0x00001440u, 0x00001438u, 0x0003003eu, 0x00001441u, 0x0000143bu, 0x0003003eu, 0x00001442u, 0x00000464u, 0x0003003eu, 0x00001443u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x00001446u, 0x000001bdu, 0x0003003eu, 0x00001445u, 0x00001446u, 0x000b0039u, 0x00000013u, 0x00001447u, 0x00000158u, 0x0000143cu, 0x0000143eu, 0x00001440u, 0x00001441u, 0x00001442u, 0x00001443u, 0x00001445u, 0x0003003eu, 0x00001434u, 0x00001447u, 0x000200f9u, 0x00001433u, 0x000200f8u, 0x00001433u, 0x000700f5u, 0x00000013u, 0x0000f08fu, 0x0000effcu, 0x00001408u, 0x00001447u, 0x00001432u, 0x000200f9u, 0x000013f0u, 0x000200f8u, 0x000013eeu, 0x0004007cu, 0x000000b0u, 0x0000144au, 0x0000ef6cu, 0x000600a9u, 0x00000008u, 0x0000144cu, 0x000013cdu, 0x00000230u, 0x00000220u, 0x0004007cu, 0x00000006u, 0x0000144du, 0x0000144cu, 0x0004003du, 0x00000023u, 0x0000144fu, 0x000001b9u, 0x0003003eu, 0x0000144eu, 0x0000144fu, 0x0004003du, 0x00000006u, 0x00001451u, 0x000001bau, 0x0003003eu, 0x00001450u, 0x00001451u, 0x0003003eu, 0x00001452u, 0x0000144au, 0x0003003eu, 0x00001453u, 0x0000144du, 0x0003003eu, 0x00001454u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x00001457u, 0x000001bdu, 0x0003003eu, 0x00001456u, 0x00001457u, 0x000a0039u, 0x00000013u, 0x00001458u, 0x00000161u, 0x0000144eu, 0x00001450u, 0x00001452u, 0x00001453u, 0x00001454u, 0x00001456u, 0x0003003eu, 0x000013f1u, 0x00001458u, 0x0004003du, 0x00000069u, 0x00001459u, 0x000001beu, 0x000300f7u, 0x0000145bu, 0x00000000u, 0x000400fau, 0x00001459u, 0x0000145au, 0x0000145bu, 0x000200f8u, 0x0000145au, 0x00050050u, 0x000000efu, 0x0000145eu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x0000145fu, 0x0000145eu, 0x0004003du, 0x00000023u, 0x00001461u, 0x000001b9u, 0x0003003eu, 0x00001460u, 0x00001461u, 0x0004003du, 0x00000006u, 0x00001463u, 0x000001bau, 0x0003003eu, 0x00001462u, 0x00001463u, 0x0003003eu, 0x00001464u, 0x0000145fu, 0x0003003eu, 0x00001465u, 0x0000045cu, 0x0003003eu, 0x00001466u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x00001469u, 0x000001bdu, 0x0003003eu, 0x00001468u, 0x00001469u, 0x000a0039u, 0x00000013u, 0x0000146au, 0x00000161u, 0x00001460u, 0x00001462u, 0x00001464u, 0x00001465u, 0x00001466u, 0x00001468u, 0x0003003eu, 0x00001409u, 0x0000146au, 0x00050050u, 0x000000efu, 0x0000146du, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000146eu, 0x0000146du, 0x0004003du, 0x00000023u, 0x00001470u, 0x000001b9u, 0x0003003eu, 0x0000146fu, 0x00001470u, 0x0004003du, 0x00000006u, 0x00001472u, 0x000001bau, 0x0003003eu, 0x00001471u, 0x00001472u, 0x0003003eu, 0x00001473u, 0x0000146eu, 0x0003003eu, 0x00001474u, 0x00000386u, 0x0003003eu, 0x00001475u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x00001478u, 0x000001bdu, 0x0003003eu, 0x00001477u, 0x00001478u, 0x000a0039u, 0x00000013u, 0x00001479u, 0x00000161u, 0x0000146fu, 0x00001471u, 0x00001473u, 0x00001474u, 0x00001475u, 0x00001477u, 0x0003003eu, 0x0000141du, 0x00001479u, 0x000200f9u, 0x0000145bu, 0x000200f8u, 0x0000145bu, 0x000700f5u, 0x00000013u, 0x0000f063u, 0x0000effcu, 0x000013eeu, 0x00001479u, 0x0000145au, 0x000700f5u, 0x00000013u, 0x0000f004u, 0x0000effcu, 0x000013eeu, 0x0000146au, 0x0000145au, 0x0004003du, 0x00000069u, 0x0000147au, 0x000001bfu, 0x000300f7u, 0x0000147cu, 0x00000000u, 0x000400fau, 0x0000147au, 0x0000147bu, 0x0000147cu, 0x000200f8u, 0x0000147bu, 0x00050050u, 0x000000efu, 0x0000147fu, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001480u, 0x0000147fu, 0x0004003du, 0x00000023u, 0x00001482u, 0x000001b9u, 0x0003003eu, 0x00001481u, 0x00001482u, 0x0004003du, 0x00000006u, 0x00001484u, 0x000001bau, 0x0003003eu, 0x00001483u, 0x00001484u, 0x0003003eu, 0x00001485u, 0x00001480u, 0x0003003eu, 0x00001486u, 0x00000464u, 0x0003003eu, 0x00001487u, 0x000013e8u, 0x0004003du, 0x00000069u, 0x0000148au, 0x000001bdu, 0x0003003eu, 0x00001489u, 0x0000148au, 0x000a0039u, 0x00000013u, 0x0000148bu, 0x00000161u, 0x00001481u, 0x00001483u, 0x00001485u, 0x00001486u, 0x00001487u, 0x00001489u, 0x0003003eu, 0x00001434u, 0x0000148bu, 0x000200f9u, 0x0000147cu, 0x000200f8u, 0x0000147cu, 0x000700f5u, 0x00000013u, 0x0000f091u, 0x0000effcu, 0x0000145bu, 0x0000148bu, 0x0000147bu, 0x000200f9u, 0x000013f0u, 0x000200f8u, 0x000013f0u, 0x000900f5u, 0x00000013u, 0x0000f08bu, 0x0000f08cu, 0x000014c0u, 0x0000f08fu, 0x00001433u, 0x0000f091u, 0x0000147cu, 0x000900f5u, 0x00000013u, 0x0000f05cu, 0x0000f05eu, 0x000014c0u, 0x0000f061u, 0x00001433u, 0x0000f063u, 0x0000147cu, 0x000900f5u, 0x00000013u, 0x0000f02du, 0x0000149cu, 0x000014c0u, 0x00001405u, 0x00001433u, 0x00001458u, 0x0000147cu, 0x000900f5u, 0x00000013u, 0x0000effdu, 0x0000efffu, 0x000014c0u, 0x0000f002u, 0x00001433u, 0x0000f004u, 0x0000147cu, 0x000200f9u, 0x000013e1u, 0x000200f8u, 0x000013e1u, 0x000700f5u, 0x00000013u, 0x0000f087u, 0x0000effcu, 0x000013dau, 0x0000f08bu, 0x000013f0u, 0x000700f5u, 0x00000013u, 0x0000f058u, 0x0000effcu, 0x000013dau, 0x0000f05cu, 0x000013f0u, 0x000700f5u, 0x00000013u, 0x0000f029u, 0x0000effcu, 0x000013dau, 0x0000f02du, 0x000013f0u, 0x000700f5u, 0x00000013u, 0x0000eff8u, 0x0000effcu, 0x000013dau, 0x0000effdu, 0x000013f0u, 0x000200f9u, 0x000013dbu, 0x000200f8u, 0x000014d4u, 0x0004003du, 0x0000000fu, 0x000014d6u, 0x000013c6u, 0x00040071u, 0x00000006u, 0x000014d7u, 0x000014d6u, 0x0004007cu, 0x00000008u, 0x000014d8u, 0x000014d7u, 0x000300f7u, 0x000014deu, 0x00000000u, 0x000d00fbu, 0x000014d8u, 0x000014deu, 0x00000000u, 0x000014d9u, 0x00000001u, 0x000014dau, 0x00000002u, 0x000014dbu, 0x00000003u, 0x000014dcu, 0x00000004u, 0x000014ddu, 0x000200f8u, 0x000014d9u, 0x00050041u, 0x0000007bu, 0x000014dfu, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000014e0u, 0x000014dfu, 0x00040071u, 0x00000006u, 0x000014e1u, 0x000014e0u, 0x0004007cu, 0x00000008u, 0x000014e2u, 0x000014e1u, 0x000300f7u, 0x000014e7u, 0x00000000u, 0x000b00fbu, 0x000014e2u, 0x000014e7u, 0x00000000u, 0x000014e3u, 0x00000001u, 0x000014e4u, 0x00000002u, 0x000014e5u, 0x00000003u, 0x000014e6u, 0x000200f8u, 0x000014e3u, 0x0004007cu, 0x000000b0u, 0x000014e9u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x000014ebu, 0x000001b9u, 0x0003003eu, 0x000014eau, 0x000014ebu, 0x0004003du, 0x00000006u, 0x000014edu, 0x000001bau, 0x0003003eu, 0x000014ecu, 0x000014edu, 0x0003003eu, 0x000014eeu, 0x000014e9u, 0x00070039u, 0x00000013u, 0x000014efu, 0x00000142u, 0x000014eau, 0x000014ecu, 0x000014eeu, 0x0003003eu, 0x000013f1u, 0x000014efu, 0x0004003du, 0x00000069u, 0x000014f0u, 0x000001beu, 0x000300f7u, 0x000014f2u, 0x00000000u, 0x000400fau, 0x000014f0u, 0x000014f1u, 0x000014f2u, 0x000200f8u, 0x000014f1u, 0x00050050u, 0x000000efu, 0x000014f5u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000014f6u, 0x000014f5u, 0x0004003du, 0x00000023u, 0x000014f8u, 0x000001b9u, 0x0003003eu, 0x000014f7u, 0x000014f8u, 0x0004003du, 0x00000006u, 0x000014fau, 0x000001bau, 0x0003003eu, 0x000014f9u, 0x000014fau, 0x0003003eu, 0x000014fbu, 0x000014f6u, 0x00070039u, 0x00000013u, 0x000014fcu, 0x00000142u, 0x000014f7u, 0x000014f9u, 0x000014fbu, 0x0003003eu, 0x00001409u, 0x000014fcu, 0x00050050u, 0x000000efu, 0x000014ffu, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001500u, 0x000014ffu, 0x0004003du, 0x00000023u, 0x00001502u, 0x000001b9u, 0x0003003eu, 0x00001501u, 0x00001502u, 0x0004003du, 0x00000006u, 0x00001504u, 0x000001bau, 0x0003003eu, 0x00001503u, 0x00001504u, 0x0003003eu, 0x00001505u, 0x00001500u, 0x00070039u, 0x00000013u, 0x00001506u, 0x00000142u, 0x00001501u, 0x00001503u, 0x00001505u, 0x0003003eu, 0x0000141du, 0x00001506u, 0x000200f9u, 0x000014f2u, 0x000200f8u, 0x000014f2u, 0x000700f5u, 0x00000013u, 0x0000f067u, 0x0000effcu, 0x000014e3u, 0x00001506u, 0x000014f1u, 0x000700f5u, 0x00000013u, 0x0000f008u, 0x0000effcu, 0x000014e3u, 0x000014fcu, 0x000014f1u, 0x0004003du, 0x00000069u, 0x00001507u, 0x000001bfu, 0x000300f7u, 0x00001509u, 0x00000000u, 0x000400fau, 0x00001507u, 0x00001508u, 0x00001509u, 0x000200f8u, 0x00001508u, 0x00050050u, 0x000000efu, 0x0000150cu, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000150du, 0x0000150cu, 0x0004003du, 0x00000023u, 0x0000150fu, 0x000001b9u, 0x0003003eu, 0x0000150eu, 0x0000150fu, 0x0004003du, 0x00000006u, 0x00001511u, 0x000001bau, 0x0003003eu, 0x00001510u, 0x00001511u, 0x0003003eu, 0x00001512u, 0x0000150du, 0x00070039u, 0x00000013u, 0x00001513u, 0x00000142u, 0x0000150eu, 0x00001510u, 0x00001512u, 0x0003003eu, 0x00001434u, 0x00001513u, 0x000200f9u, 0x00001509u, 0x000200f8u, 0x00001509u, 0x000700f5u, 0x00000013u, 0x0000f095u, 0x0000effcu, 0x000014f2u, 0x00001513u, 0x00001508u, 0x000200f9u, 0x000014e7u, 0x000200f8u, 0x000014e4u, 0x0004007cu, 0x000000b0u, 0x00001516u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001518u, 0x000001b9u, 0x0003003eu, 0x00001517u, 0x00001518u, 0x0004003du, 0x00000006u, 0x0000151au, 0x000001bau, 0x0003003eu, 0x00001519u, 0x0000151au, 0x0003003eu, 0x0000151bu, 0x00001516u, 0x00070039u, 0x00000013u, 0x0000151cu, 0x00000173u, 0x00001517u, 0x00001519u, 0x0000151bu, 0x0003003eu, 0x000013f1u, 0x0000151cu, 0x0004003du, 0x00000069u, 0x0000151du, 0x000001beu, 0x000300f7u, 0x0000151fu, 0x00000000u, 0x000400fau, 0x0000151du, 0x0000151eu, 0x0000151fu, 0x000200f8u, 0x0000151eu, 0x00050050u, 0x000000efu, 0x00001522u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x00001523u, 0x00001522u, 0x0004003du, 0x00000023u, 0x00001525u, 0x000001b9u, 0x0003003eu, 0x00001524u, 0x00001525u, 0x0004003du, 0x00000006u, 0x00001527u, 0x000001bau, 0x0003003eu, 0x00001526u, 0x00001527u, 0x0003003eu, 0x00001528u, 0x00001523u, 0x00070039u, 0x00000013u, 0x00001529u, 0x00000173u, 0x00001524u, 0x00001526u, 0x00001528u, 0x0003003eu, 0x00001409u, 0x00001529u, 0x00050050u, 0x000000efu, 0x0000152cu, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000152du, 0x0000152cu, 0x0004003du, 0x00000023u, 0x0000152fu, 0x000001b9u, 0x0003003eu, 0x0000152eu, 0x0000152fu, 0x0004003du, 0x00000006u, 0x00001531u, 0x000001bau, 0x0003003eu, 0x00001530u, 0x00001531u, 0x0003003eu, 0x00001532u, 0x0000152du, 0x00070039u, 0x00000013u, 0x00001533u, 0x00000173u, 0x0000152eu, 0x00001530u, 0x00001532u, 0x0003003eu, 0x0000141du, 0x00001533u, 0x000200f9u, 0x0000151fu, 0x000200f8u, 0x0000151fu, 0x000700f5u, 0x00000013u, 0x0000f069u, 0x0000effcu, 0x000014e4u, 0x00001533u, 0x0000151eu, 0x000700f5u, 0x00000013u, 0x0000f00au, 0x0000effcu, 0x000014e4u, 0x00001529u, 0x0000151eu, 0x0004003du, 0x00000069u, 0x00001534u, 0x000001bfu, 0x000300f7u, 0x00001536u, 0x00000000u, 0x000400fau, 0x00001534u, 0x00001535u, 0x00001536u, 0x000200f8u, 0x00001535u, 0x00050050u, 0x000000efu, 0x00001539u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000153au, 0x00001539u, 0x0004003du, 0x00000023u, 0x0000153cu, 0x000001b9u, 0x0003003eu, 0x0000153bu, 0x0000153cu, 0x0004003du, 0x00000006u, 0x0000153eu, 0x000001bau, 0x0003003eu, 0x0000153du, 0x0000153eu, 0x0003003eu, 0x0000153fu, 0x0000153au, 0x00070039u, 0x00000013u, 0x00001540u, 0x00000173u, 0x0000153bu, 0x0000153du, 0x0000153fu, 0x0003003eu, 0x00001434u, 0x00001540u, 0x000200f9u, 0x00001536u, 0x000200f8u, 0x00001536u, 0x000700f5u, 0x00000013u, 0x0000f097u, 0x0000effcu, 0x0000151fu, 0x00001540u, 0x00001535u, 0x000200f9u, 0x000014e7u, 0x000200f8u, 0x000014e5u, 0x0004007cu, 0x000000b0u, 0x00001543u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001545u, 0x000001b9u, 0x0003003eu, 0x00001544u, 0x00001545u, 0x0004003du, 0x00000006u, 0x00001547u, 0x000001bau, 0x0003003eu, 0x00001546u, 0x00001547u, 0x0003003eu, 0x00001548u, 0x00001543u, 0x00070039u, 0x00000013u, 0x00001549u, 0x00000183u, 0x00001544u, 0x00001546u, 0x00001548u, 0x0003003eu, 0x000013f1u, 0x00001549u, 0x0004003du, 0x00000069u, 0x0000154au, 0x000001beu, 0x000300f7u, 0x0000154cu, 0x00000000u, 0x000400fau, 0x0000154au, 0x0000154bu, 0x0000154cu, 0x000200f8u, 0x0000154bu, 0x00050050u, 0x000000efu, 0x0000154fu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x00001550u, 0x0000154fu, 0x0004003du, 0x00000023u, 0x00001552u, 0x000001b9u, 0x0003003eu, 0x00001551u, 0x00001552u, 0x0004003du, 0x00000006u, 0x00001554u, 0x000001bau, 0x0003003eu, 0x00001553u, 0x00001554u, 0x0003003eu, 0x00001555u, 0x00001550u, 0x00070039u, 0x00000013u, 0x00001556u, 0x00000183u, 0x00001551u, 0x00001553u, 0x00001555u, 0x0003003eu, 0x00001409u, 0x00001556u, 0x00050050u, 0x000000efu, 0x00001559u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000155au, 0x00001559u, 0x0004003du, 0x00000023u, 0x0000155cu, 0x000001b9u, 0x0003003eu, 0x0000155bu, 0x0000155cu, 0x0004003du, 0x00000006u, 0x0000155eu, 0x000001bau, 0x0003003eu, 0x0000155du, 0x0000155eu, 0x0003003eu, 0x0000155fu, 0x0000155au, 0x00070039u, 0x00000013u, 0x00001560u, 0x00000183u, 0x0000155bu, 0x0000155du, 0x0000155fu, 0x0003003eu, 0x0000141du, 0x00001560u, 0x000200f9u, 0x0000154cu, 0x000200f8u, 0x0000154cu, 0x000700f5u, 0x00000013u, 0x0000f06bu, 0x0000effcu, 0x000014e5u, 0x00001560u, 0x0000154bu, 0x000700f5u, 0x00000013u, 0x0000f00cu, 0x0000effcu, 0x000014e5u, 0x00001556u, 0x0000154bu, 0x0004003du, 0x00000069u, 0x00001561u, 0x000001bfu, 0x000300f7u, 0x00001563u, 0x00000000u, 0x000400fau, 0x00001561u, 0x00001562u, 0x00001563u, 0x000200f8u, 0x00001562u, 0x00050050u, 0x000000efu, 0x00001566u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001567u, 0x00001566u, 0x0004003du, 0x00000023u, 0x00001569u, 0x000001b9u, 0x0003003eu, 0x00001568u, 0x00001569u, 0x0004003du, 0x00000006u, 0x0000156bu, 0x000001bau, 0x0003003eu, 0x0000156au, 0x0000156bu, 0x0003003eu, 0x0000156cu, 0x00001567u, 0x00070039u, 0x00000013u, 0x0000156du, 0x00000183u, 0x00001568u, 0x0000156au, 0x0000156cu, 0x0003003eu, 0x00001434u, 0x0000156du, 0x000200f9u, 0x00001563u, 0x000200f8u, 0x00001563u, 0x000700f5u, 0x00000013u, 0x0000f099u, 0x0000effcu, 0x0000154cu, 0x0000156du, 0x00001562u, 0x000200f9u, 0x000014e7u, 0x000200f8u, 0x000014e6u, 0x0004007cu, 0x000000b0u, 0x00001570u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001572u, 0x000001b9u, 0x0003003eu, 0x00001571u, 0x00001572u, 0x0004003du, 0x00000006u, 0x00001574u, 0x000001bau, 0x0003003eu, 0x00001573u, 0x00001574u, 0x0003003eu, 0x00001575u, 0x00001570u, 0x00070039u, 0x00000013u, 0x00001576u, 0x0000018du, 0x00001571u, 0x00001573u, 0x00001575u, 0x0003003eu, 0x000013f1u, 0x00001576u, 0x0004003du, 0x00000069u, 0x00001577u, 0x000001beu, 0x000300f7u, 0x00001579u, 0x00000000u, 0x000400fau, 0x00001577u, 0x00001578u, 0x00001579u, 0x000200f8u, 0x00001578u, 0x00050050u, 0x000000efu, 0x0000157cu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x0000157du, 0x0000157cu, 0x0004003du, 0x00000023u, 0x0000157fu, 0x000001b9u, 0x0003003eu, 0x0000157eu, 0x0000157fu, 0x0004003du, 0x00000006u, 0x00001581u, 0x000001bau, 0x0003003eu, 0x00001580u, 0x00001581u, 0x0003003eu, 0x00001582u, 0x0000157du, 0x00070039u, 0x00000013u, 0x00001583u, 0x0000018du, 0x0000157eu, 0x00001580u, 0x00001582u, 0x0003003eu, 0x00001409u, 0x00001583u, 0x00050050u, 0x000000efu, 0x00001586u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001587u, 0x00001586u, 0x0004003du, 0x00000023u, 0x00001589u, 0x000001b9u, 0x0003003eu, 0x00001588u, 0x00001589u, 0x0004003du, 0x00000006u, 0x0000158bu, 0x000001bau, 0x0003003eu, 0x0000158au, 0x0000158bu, 0x0003003eu, 0x0000158cu, 0x00001587u, 0x00070039u, 0x00000013u, 0x0000158du, 0x0000018du, 0x00001588u, 0x0000158au, 0x0000158cu, 0x0003003eu, 0x0000141du, 0x0000158du, 0x000200f9u, 0x00001579u, 0x000200f8u, 0x00001579u, 0x000700f5u, 0x00000013u, 0x0000f06du, 0x0000effcu, 0x000014e6u, 0x0000158du, 0x00001578u, 0x000700f5u, 0x00000013u, 0x0000f00eu, 0x0000effcu, 0x000014e6u, 0x00001583u, 0x00001578u, 0x0004003du, 0x00000069u, 0x0000158eu, 0x000001bfu, 0x000300f7u, 0x00001590u, 0x00000000u, 0x000400fau, 0x0000158eu, 0x0000158fu, 0x00001590u, 0x000200f8u, 0x0000158fu, 0x00050050u, 0x000000efu, 0x00001593u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001594u, 0x00001593u, 0x0004003du, 0x00000023u, 0x00001596u, 0x000001b9u, 0x0003003eu, 0x00001595u, 0x00001596u, 0x0004003du, 0x00000006u, 0x00001598u, 0x000001bau, 0x0003003eu, 0x00001597u, 0x00001598u, 0x0003003eu, 0x00001599u, 0x00001594u, 0x00070039u, 0x00000013u, 0x0000159au, 0x0000018du, 0x00001595u, 0x00001597u, 0x00001599u, 0x0003003eu, 0x00001434u, 0x0000159au, 0x000200f9u, 0x00001590u, 0x000200f8u, 0x00001590u, 0x000700f5u, 0x00000013u, 0x0000f09bu, 0x0000effcu, 0x00001579u, 0x0000159au, 0x0000158fu, 0x000200f9u, 0x000014e7u, 0x000200f8u, 0x000014e7u, 0x000d00f5u, 0x00000013u, 0x0000f094u, 0x0000effcu, 0x000014d9u, 0x0000f095u, 0x00001509u, 0x0000f097u, 0x00001536u, 0x0000f099u, 0x00001563u, 0x0000f09bu, 0x00001590u, 0x000d00f5u, 0x00000013u, 0x0000f065u, 0x0000effcu, 0x000014d9u, 0x0000f067u, 0x00001509u, 0x0000f069u, 0x00001536u, 0x0000f06bu, 0x00001563u, 0x0000f06du, 0x00001590u, 0x000d00f5u, 0x00000013u, 0x0000f035u, 0x0000effcu, 0x000014d9u, 0x000014efu, 0x00001509u, 0x0000151cu, 0x00001536u, 0x00001549u, 0x00001563u, 0x00001576u, 0x00001590u, 0x000d00f5u, 0x00000013u, 0x0000f006u, 0x0000effcu, 0x000014d9u, 0x0000f008u, 0x00001509u, 0x0000f00au, 0x00001536u, 0x0000f00cu, 0x00001563u, 0x0000f00eu, 0x00001590u, 0x000200f9u, 0x000014deu, 0x000200f8u, 0x000014dau, 0x000500c3u, 0x00000008u, 0x000015a0u, 0x00001396u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000015a1u, 0x000015a0u, 0x0003003eu, 0x0000159eu, 0x000015a1u, 0x00050082u, 0x00000008u, 0x000015a6u, 0x000013a5u, 0x00001396u, 0x00050080u, 0x00000008u, 0x000015a7u, 0x000013a5u, 0x000015a6u, 0x000500c3u, 0x00000008u, 0x000015a8u, 0x000015a7u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x000015a9u, 0x000015a8u, 0x0003003eu, 0x000015a2u, 0x000015a9u, 0x00050050u, 0x000000efu, 0x000015acu, 0x00001396u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000015adu, 0x000015acu, 0x0004003du, 0x00000023u, 0x000015afu, 0x000001b9u, 0x0003003eu, 0x000015aeu, 0x000015afu, 0x0004003du, 0x00000006u, 0x000015b1u, 0x000001bau, 0x0003003eu, 0x000015b0u, 0x000015b1u, 0x0003003eu, 0x000015b2u, 0x000015adu, 0x0003003eu, 0x000015b3u, 0x000015a1u, 0x00080039u, 0x00000013u, 0x000015b5u, 0x0000017eu, 0x000015aeu, 0x000015b0u, 0x000015b2u, 0x000015b3u, 0x0003003eu, 0x000013f1u, 0x000015b5u, 0x0004003du, 0x00000069u, 0x000015b6u, 0x000001beu, 0x000300f7u, 0x000015b8u, 0x00000000u, 0x000400fau, 0x000015b6u, 0x000015b7u, 0x000015b8u, 0x000200f8u, 0x000015b7u, 0x00050050u, 0x000000efu, 0x000015bbu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000015bcu, 0x000015bbu, 0x0004003du, 0x00000023u, 0x000015beu, 0x000001b9u, 0x0003003eu, 0x000015bdu, 0x000015beu, 0x0004003du, 0x00000006u, 0x000015c0u, 0x000001bau, 0x0003003eu, 0x000015bfu, 0x000015c0u, 0x0003003eu, 0x000015c1u, 0x000015bcu, 0x0003003eu, 0x000015c2u, 0x000015a9u, 0x00080039u, 0x00000013u, 0x000015c4u, 0x0000017eu, 0x000015bdu, 0x000015bfu, 0x000015c1u, 0x000015c2u, 0x0003003eu, 0x00001409u, 0x000015c4u, 0x00050050u, 0x000000efu, 0x000015c7u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000015c8u, 0x000015c7u, 0x0004003du, 0x00000023u, 0x000015cau, 0x000001b9u, 0x0003003eu, 0x000015c9u, 0x000015cau, 0x0004003du, 0x00000006u, 0x000015ccu, 0x000001bau, 0x0003003eu, 0x000015cbu, 0x000015ccu, 0x0003003eu, 0x000015cdu, 0x000015c8u, 0x0003003eu, 0x000015ceu, 0x000015a1u, 0x00080039u, 0x00000013u, 0x000015d0u, 0x0000017eu, 0x000015c9u, 0x000015cbu, 0x000015cdu, 0x000015ceu, 0x0003003eu, 0x0000141du, 0x000015d0u, 0x00050050u, 0x000000efu, 0x000015d3u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000015d4u, 0x000015d3u, 0x0004003du, 0x00000023u, 0x000015d6u, 0x000001b9u, 0x0003003eu, 0x000015d5u, 0x000015d6u, 0x0004003du, 0x00000006u, 0x000015d8u, 0x000001bau, 0x0003003eu, 0x000015d7u, 0x000015d8u, 0x0003003eu, 0x000015d9u, 0x000015d4u, 0x0003003eu, 0x000015dau, 0x000015a9u, 0x00080039u, 0x00000013u, 0x000015dcu, 0x0000017eu, 0x000015d5u, 0x000015d7u, 0x000015d9u, 0x000015dau, 0x0003003eu, 0x00001434u, 0x000015dcu, 0x000200f9u, 0x000015b8u, 0x000200f8u, 0x000015b8u, 0x000700f5u, 0x00000013u, 0x0000f09du, 0x0000effcu, 0x000014dau, 0x000015dcu, 0x000015b7u, 0x000700f5u, 0x00000013u, 0x0000f06eu, 0x0000effcu, 0x000014dau, 0x000015d0u, 0x000015b7u, 0x000700f5u, 0x00000013u, 0x0000f00fu, 0x0000effcu, 0x000014dau, 0x000015c4u, 0x000015b7u, 0x000200f9u, 0x000014deu, 0x000200f8u, 0x000014dbu, 0x00050041u, 0x0000007bu, 0x000015deu, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x000015dfu, 0x000015deu, 0x00040071u, 0x00000006u, 0x000015e0u, 0x000015dfu, 0x0004007cu, 0x00000008u, 0x000015e1u, 0x000015e0u, 0x000300f7u, 0x000015e5u, 0x00000000u, 0x000700fbu, 0x000015e1u, 0x000015e4u, 0x00000000u, 0x000015e2u, 0x00000001u, 0x000015e3u, 0x000200f8u, 0x000015e4u, 0x0004007cu, 0x000000b0u, 0x00001651u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001653u, 0x000001b9u, 0x0003003eu, 0x00001652u, 0x00001653u, 0x0004003du, 0x00000006u, 0x00001655u, 0x000001bau, 0x0003003eu, 0x00001654u, 0x00001655u, 0x0003003eu, 0x00001656u, 0x00001651u, 0x00070039u, 0x00000013u, 0x00001657u, 0x00000166u, 0x00001652u, 0x00001654u, 0x00001656u, 0x0003003eu, 0x000013f1u, 0x00001657u, 0x0004003du, 0x00000069u, 0x00001658u, 0x000001beu, 0x000300f7u, 0x0000165au, 0x00000000u, 0x000400fau, 0x00001658u, 0x00001659u, 0x0000165au, 0x000200f8u, 0x00001659u, 0x00050050u, 0x000000efu, 0x0000165du, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x0000165eu, 0x0000165du, 0x0004003du, 0x00000023u, 0x00001660u, 0x000001b9u, 0x0003003eu, 0x0000165fu, 0x00001660u, 0x0004003du, 0x00000006u, 0x00001662u, 0x000001bau, 0x0003003eu, 0x00001661u, 0x00001662u, 0x0003003eu, 0x00001663u, 0x0000165eu, 0x00070039u, 0x00000013u, 0x00001664u, 0x00000166u, 0x0000165fu, 0x00001661u, 0x00001663u, 0x0003003eu, 0x00001409u, 0x00001664u, 0x00050050u, 0x000000efu, 0x00001667u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001668u, 0x00001667u, 0x0004003du, 0x00000023u, 0x0000166au, 0x000001b9u, 0x0003003eu, 0x00001669u, 0x0000166au, 0x0004003du, 0x00000006u, 0x0000166cu, 0x000001bau, 0x0003003eu, 0x0000166bu, 0x0000166cu, 0x0003003eu, 0x0000166du, 0x00001668u, 0x00070039u, 0x00000013u, 0x0000166eu, 0x00000166u, 0x00001669u, 0x0000166bu, 0x0000166du, 0x0003003eu, 0x0000141du, 0x0000166eu, 0x000200f9u, 0x0000165au, 0x000200f8u, 0x0000165au, 0x000700f5u, 0x00000013u, 0x0000f071u, 0x0000effcu, 0x000015e4u, 0x0000166eu, 0x00001659u, 0x000700f5u, 0x00000013u, 0x0000f012u, 0x0000effcu, 0x000015e4u, 0x00001664u, 0x00001659u, 0x0004003du, 0x00000069u, 0x0000166fu, 0x000001bfu, 0x000300f7u, 0x00001671u, 0x00000000u, 0x000400fau, 0x0000166fu, 0x00001670u, 0x00001671u, 0x000200f8u, 0x00001670u, 0x00050050u, 0x000000efu, 0x00001674u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001675u, 0x00001674u, 0x0004003du, 0x00000023u, 0x00001677u, 0x000001b9u, 0x0003003eu, 0x00001676u, 0x00001677u, 0x0004003du, 0x00000006u, 0x00001679u, 0x000001bau, 0x0003003eu, 0x00001678u, 0x00001679u, 0x0003003eu, 0x0000167au, 0x00001675u, 0x00070039u, 0x00000013u, 0x0000167bu, 0x00000166u, 0x00001676u, 0x00001678u, 0x0000167au, 0x0003003eu, 0x00001434u, 0x0000167bu, 0x000200f9u, 0x00001671u, 0x000200f8u, 0x00001671u, 0x000700f5u, 0x00000013u, 0x0000f09fu, 0x0000effcu, 0x0000165au, 0x0000167bu, 0x00001670u, 0x000200f9u, 0x000015e5u, 0x000200f8u, 0x000015e2u, 0x0004007cu, 0x000000b0u, 0x000015e7u, 0x0000ef6cu, 0x00050041u, 0x0000007bu, 0x000015e8u, 0x000001b9u, 0x0000025du, 0x0004003du, 0x0000000fu, 0x000015e9u, 0x000015e8u, 0x00040071u, 0x00000006u, 0x000015eau, 0x000015e9u, 0x0004003du, 0x00000023u, 0x000015ecu, 0x000001b9u, 0x0003003eu, 0x000015ebu, 0x000015ecu, 0x0004003du, 0x00000006u, 0x000015eeu, 0x000001bau, 0x0003003eu, 0x000015edu, 0x000015eeu, 0x0003003eu, 0x000015efu, 0x000015e7u, 0x0003003eu, 0x000015f0u, 0x000015eau, 0x00080039u, 0x00000013u, 0x000015f1u, 0x0000014eu, 0x000015ebu, 0x000015edu, 0x000015efu, 0x000015f0u, 0x0003003eu, 0x000013f1u, 0x000015f1u, 0x0004003du, 0x00000069u, 0x000015f2u, 0x000001beu, 0x000300f7u, 0x000015f4u, 0x00000000u, 0x000400fau, 0x000015f2u, 0x000015f3u, 0x000015f4u, 0x000200f8u, 0x000015f3u, 0x00050050u, 0x000000efu, 0x000015f7u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000015f8u, 0x000015f7u, 0x0004003du, 0x0000000fu, 0x000015fau, 0x000015e8u, 0x00040071u, 0x00000006u, 0x000015fbu, 0x000015fau, 0x0004003du, 0x00000023u, 0x000015fdu, 0x000001b9u, 0x0003003eu, 0x000015fcu, 0x000015fdu, 0x0004003du, 0x00000006u, 0x000015ffu, 0x000001bau, 0x0003003eu, 0x000015feu, 0x000015ffu, 0x0003003eu, 0x00001600u, 0x000015f8u, 0x0003003eu, 0x00001601u, 0x000015fbu, 0x00080039u, 0x00000013u, 0x00001602u, 0x0000014eu, 0x000015fcu, 0x000015feu, 0x00001600u, 0x00001601u, 0x0003003eu, 0x00001409u, 0x00001602u, 0x00050050u, 0x000000efu, 0x00001605u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001606u, 0x00001605u, 0x0004003du, 0x0000000fu, 0x00001608u, 0x000015e8u, 0x00040071u, 0x00000006u, 0x00001609u, 0x00001608u, 0x0004003du, 0x00000023u, 0x0000160bu, 0x000001b9u, 0x0003003eu, 0x0000160au, 0x0000160bu, 0x0004003du, 0x00000006u, 0x0000160du, 0x000001bau, 0x0003003eu, 0x0000160cu, 0x0000160du, 0x0003003eu, 0x0000160eu, 0x00001606u, 0x0003003eu, 0x0000160fu, 0x00001609u, 0x00080039u, 0x00000013u, 0x00001610u, 0x0000014eu, 0x0000160au, 0x0000160cu, 0x0000160eu, 0x0000160fu, 0x0003003eu, 0x0000141du, 0x00001610u, 0x000200f9u, 0x000015f4u, 0x000200f8u, 0x000015f4u, 0x000700f5u, 0x00000013u, 0x0000f073u, 0x0000effcu, 0x000015e2u, 0x00001610u, 0x000015f3u, 0x000700f5u, 0x00000013u, 0x0000f014u, 0x0000effcu, 0x000015e2u, 0x00001602u, 0x000015f3u, 0x0004003du, 0x00000069u, 0x00001611u, 0x000001bfu, 0x000300f7u, 0x00001613u, 0x00000000u, 0x000400fau, 0x00001611u, 0x00001612u, 0x00001613u, 0x000200f8u, 0x00001612u, 0x00050050u, 0x000000efu, 0x00001616u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001617u, 0x00001616u, 0x0004003du, 0x0000000fu, 0x00001619u, 0x000015e8u, 0x00040071u, 0x00000006u, 0x0000161au, 0x00001619u, 0x0004003du, 0x00000023u, 0x0000161cu, 0x000001b9u, 0x0003003eu, 0x0000161bu, 0x0000161cu, 0x0004003du, 0x00000006u, 0x0000161eu, 0x000001bau, 0x0003003eu, 0x0000161du, 0x0000161eu, 0x0003003eu, 0x0000161fu, 0x00001617u, 0x0003003eu, 0x00001620u, 0x0000161au, 0x00080039u, 0x00000013u, 0x00001621u, 0x0000014eu, 0x0000161bu, 0x0000161du, 0x0000161fu, 0x00001620u, 0x0003003eu, 0x00001434u, 0x00001621u, 0x000200f9u, 0x00001613u, 0x000200f8u, 0x00001613u, 0x000700f5u, 0x00000013u, 0x0000f0a1u, 0x0000effcu, 0x000015f4u, 0x00001621u, 0x00001612u, 0x000200f9u, 0x000015e5u, 0x000200f8u, 0x000015e3u, 0x0004007cu, 0x000000b0u, 0x00001624u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001626u, 0x000001b9u, 0x0003003eu, 0x00001625u, 0x00001626u, 0x0004003du, 0x00000006u, 0x00001628u, 0x000001bau, 0x0003003eu, 0x00001627u, 0x00001628u, 0x0003003eu, 0x00001629u, 0x00001624u, 0x00070039u, 0x00000013u, 0x0000162au, 0x00000173u, 0x00001625u, 0x00001627u, 0x00001629u, 0x0003003eu, 0x000013f1u, 0x0000162au, 0x0004003du, 0x00000069u, 0x0000162bu, 0x000001beu, 0x000300f7u, 0x0000162du, 0x00000000u, 0x000400fau, 0x0000162bu, 0x0000162cu, 0x0000162du, 0x000200f8u, 0x0000162cu, 0x00050050u, 0x000000efu, 0x00001630u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x00001631u, 0x00001630u, 0x0004003du, 0x00000023u, 0x00001633u, 0x000001b9u, 0x0003003eu, 0x00001632u, 0x00001633u, 0x0004003du, 0x00000006u, 0x00001635u, 0x000001bau, 0x0003003eu, 0x00001634u, 0x00001635u, 0x0003003eu, 0x00001636u, 0x00001631u, 0x00070039u, 0x00000013u, 0x00001637u, 0x00000173u, 0x00001632u, 0x00001634u, 0x00001636u, 0x0003003eu, 0x00001409u, 0x00001637u, 0x00050050u, 0x000000efu, 0x0000163au, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000163bu, 0x0000163au, 0x0004003du, 0x00000023u, 0x0000163du, 0x000001b9u, 0x0003003eu, 0x0000163cu, 0x0000163du, 0x0004003du, 0x00000006u, 0x0000163fu, 0x000001bau, 0x0003003eu, 0x0000163eu, 0x0000163fu, 0x0003003eu, 0x00001640u, 0x0000163bu, 0x00070039u, 0x00000013u, 0x00001641u, 0x00000173u, 0x0000163cu, 0x0000163eu, 0x00001640u, 0x0003003eu, 0x0000141du, 0x00001641u, 0x000200f9u, 0x0000162du, 0x000200f8u, 0x0000162du, 0x000700f5u, 0x00000013u, 0x0000f075u, 0x0000effcu, 0x000015e3u, 0x00001641u, 0x0000162cu, 0x000700f5u, 0x00000013u, 0x0000f016u, 0x0000effcu, 0x000015e3u, 0x00001637u, 0x0000162cu, 0x0004003du, 0x00000069u, 0x00001642u, 0x000001bfu, 0x000300f7u, 0x00001644u, 0x00000000u, 0x000400fau, 0x00001642u, 0x00001643u, 0x00001644u, 0x000200f8u, 0x00001643u, 0x00050050u, 0x000000efu, 0x00001647u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001648u, 0x00001647u, 0x0004003du, 0x00000023u, 0x0000164au, 0x000001b9u, 0x0003003eu, 0x00001649u, 0x0000164au, 0x0004003du, 0x00000006u, 0x0000164cu, 0x000001bau, 0x0003003eu, 0x0000164bu, 0x0000164cu, 0x0003003eu, 0x0000164du, 0x00001648u, 0x00070039u, 0x00000013u, 0x0000164eu, 0x00000173u, 0x00001649u, 0x0000164bu, 0x0000164du, 0x0003003eu, 0x00001434u, 0x0000164eu, 0x000200f9u, 0x00001644u, 0x000200f8u, 0x00001644u, 0x000700f5u, 0x00000013u, 0x0000f0a3u, 0x0000effcu, 0x0000162du, 0x0000164eu, 0x00001643u, 0x000200f9u, 0x000015e5u, 0x000200f8u, 0x000015e5u, 0x000900f5u, 0x00000013u, 0x0000f09eu, 0x0000f09fu, 0x00001671u, 0x0000f0a1u, 0x00001613u, 0x0000f0a3u, 0x00001644u, 0x000900f5u, 0x00000013u, 0x0000f06fu, 0x0000f071u, 0x00001671u, 0x0000f073u, 0x00001613u, 0x0000f075u, 0x00001644u, 0x000900f5u, 0x00000013u, 0x0000f03fu, 0x00001657u, 0x00001671u, 0x000015f1u, 0x00001613u, 0x0000162au, 0x00001644u, 0x000900f5u, 0x00000013u, 0x0000f010u, 0x0000f012u, 0x00001671u, 0x0000f014u, 0x00001613u, 0x0000f016u, 0x00001644u, 0x000200f9u, 0x000014deu, 0x000200f8u, 0x000014dcu, 0x00050041u, 0x0000007bu, 0x0000167fu, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x00001680u, 0x0000167fu, 0x00040071u, 0x00000006u, 0x00001681u, 0x00001680u, 0x0004007cu, 0x00000008u, 0x00001682u, 0x00001681u, 0x000300f7u, 0x00001687u, 0x00000000u, 0x000b00fbu, 0x00001682u, 0x00001687u, 0x00000000u, 0x00001683u, 0x00000001u, 0x00001684u, 0x00000002u, 0x00001685u, 0x00000003u, 0x00001686u, 0x000200f8u, 0x00001683u, 0x0004007cu, 0x000000b0u, 0x00001689u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x0000168bu, 0x000001b9u, 0x0003003eu, 0x0000168au, 0x0000168bu, 0x0004003du, 0x00000006u, 0x0000168du, 0x000001bau, 0x0003003eu, 0x0000168cu, 0x0000168du, 0x0003003eu, 0x0000168eu, 0x00001689u, 0x00070039u, 0x00000013u, 0x0000168fu, 0x00000147u, 0x0000168au, 0x0000168cu, 0x0000168eu, 0x0003003eu, 0x000013f1u, 0x0000168fu, 0x0004003du, 0x00000069u, 0x00001690u, 0x000001beu, 0x000300f7u, 0x00001692u, 0x00000000u, 0x000400fau, 0x00001690u, 0x00001691u, 0x00001692u, 0x000200f8u, 0x00001691u, 0x00050050u, 0x000000efu, 0x00001695u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x00001696u, 0x00001695u, 0x0004003du, 0x00000023u, 0x00001698u, 0x000001b9u, 0x0003003eu, 0x00001697u, 0x00001698u, 0x0004003du, 0x00000006u, 0x0000169au, 0x000001bau, 0x0003003eu, 0x00001699u, 0x0000169au, 0x0003003eu, 0x0000169bu, 0x00001696u, 0x00070039u, 0x00000013u, 0x0000169cu, 0x00000147u, 0x00001697u, 0x00001699u, 0x0000169bu, 0x0003003eu, 0x00001409u, 0x0000169cu, 0x00050050u, 0x000000efu, 0x0000169fu, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000016a0u, 0x0000169fu, 0x0004003du, 0x00000023u, 0x000016a2u, 0x000001b9u, 0x0003003eu, 0x000016a1u, 0x000016a2u, 0x0004003du, 0x00000006u, 0x000016a4u, 0x000001bau, 0x0003003eu, 0x000016a3u, 0x000016a4u, 0x0003003eu, 0x000016a5u, 0x000016a0u, 0x00070039u, 0x00000013u, 0x000016a6u, 0x00000147u, 0x000016a1u, 0x000016a3u, 0x000016a5u, 0x0003003eu, 0x0000141du, 0x000016a6u, 0x000200f9u, 0x00001692u, 0x000200f8u, 0x00001692u, 0x000700f5u, 0x00000013u, 0x0000f078u, 0x0000effcu, 0x00001683u, 0x000016a6u, 0x00001691u, 0x000700f5u, 0x00000013u, 0x0000f019u, 0x0000effcu, 0x00001683u, 0x0000169cu, 0x00001691u, 0x0004003du, 0x00000069u, 0x000016a7u, 0x000001bfu, 0x000300f7u, 0x000016a9u, 0x00000000u, 0x000400fau, 0x000016a7u, 0x000016a8u, 0x000016a9u, 0x000200f8u, 0x000016a8u, 0x00050050u, 0x000000efu, 0x000016acu, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000016adu, 0x000016acu, 0x0004003du, 0x00000023u, 0x000016afu, 0x000001b9u, 0x0003003eu, 0x000016aeu, 0x000016afu, 0x0004003du, 0x00000006u, 0x000016b1u, 0x000001bau, 0x0003003eu, 0x000016b0u, 0x000016b1u, 0x0003003eu, 0x000016b2u, 0x000016adu, 0x00070039u, 0x00000013u, 0x000016b3u, 0x00000147u, 0x000016aeu, 0x000016b0u, 0x000016b2u, 0x0003003eu, 0x00001434u, 0x000016b3u, 0x000200f9u, 0x000016a9u, 0x000200f8u, 0x000016a9u, 0x000700f5u, 0x00000013u, 0x0000f0a6u, 0x0000effcu, 0x00001692u, 0x000016b3u, 0x000016a8u, 0x000200f9u, 0x00001687u, 0x000200f8u, 0x00001684u, 0x0004007cu, 0x000000b0u, 0x000016b6u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x000016b8u, 0x000001b9u, 0x0003003eu, 0x000016b7u, 0x000016b8u, 0x0004003du, 0x00000006u, 0x000016bau, 0x000001bau, 0x0003003eu, 0x000016b9u, 0x000016bau, 0x0003003eu, 0x000016bbu, 0x000016b6u, 0x00070039u, 0x00000013u, 0x000016bcu, 0x00000178u, 0x000016b7u, 0x000016b9u, 0x000016bbu, 0x0003003eu, 0x000013f1u, 0x000016bcu, 0x0004003du, 0x00000069u, 0x000016bdu, 0x000001beu, 0x000300f7u, 0x000016bfu, 0x00000000u, 0x000400fau, 0x000016bdu, 0x000016beu, 0x000016bfu, 0x000200f8u, 0x000016beu, 0x00050050u, 0x000000efu, 0x000016c2u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000016c3u, 0x000016c2u, 0x0004003du, 0x00000023u, 0x000016c5u, 0x000001b9u, 0x0003003eu, 0x000016c4u, 0x000016c5u, 0x0004003du, 0x00000006u, 0x000016c7u, 0x000001bau, 0x0003003eu, 0x000016c6u, 0x000016c7u, 0x0003003eu, 0x000016c8u, 0x000016c3u, 0x00070039u, 0x00000013u, 0x000016c9u, 0x00000178u, 0x000016c4u, 0x000016c6u, 0x000016c8u, 0x0003003eu, 0x00001409u, 0x000016c9u, 0x00050050u, 0x000000efu, 0x000016ccu, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000016cdu, 0x000016ccu, 0x0004003du, 0x00000023u, 0x000016cfu, 0x000001b9u, 0x0003003eu, 0x000016ceu, 0x000016cfu, 0x0004003du, 0x00000006u, 0x000016d1u, 0x000001bau, 0x0003003eu, 0x000016d0u, 0x000016d1u, 0x0003003eu, 0x000016d2u, 0x000016cdu, 0x00070039u, 0x00000013u, 0x000016d3u, 0x00000178u, 0x000016ceu, 0x000016d0u, 0x000016d2u, 0x0003003eu, 0x0000141du, 0x000016d3u, 0x000200f9u, 0x000016bfu, 0x000200f8u, 0x000016bfu, 0x000700f5u, 0x00000013u, 0x0000f07au, 0x0000effcu, 0x00001684u, 0x000016d3u, 0x000016beu, 0x000700f5u, 0x00000013u, 0x0000f01bu, 0x0000effcu, 0x00001684u, 0x000016c9u, 0x000016beu, 0x0004003du, 0x00000069u, 0x000016d4u, 0x000001bfu, 0x000300f7u, 0x000016d6u, 0x00000000u, 0x000400fau, 0x000016d4u, 0x000016d5u, 0x000016d6u, 0x000200f8u, 0x000016d5u, 0x00050050u, 0x000000efu, 0x000016d9u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000016dau, 0x000016d9u, 0x0004003du, 0x00000023u, 0x000016dcu, 0x000001b9u, 0x0003003eu, 0x000016dbu, 0x000016dcu, 0x0004003du, 0x00000006u, 0x000016deu, 0x000001bau, 0x0003003eu, 0x000016ddu, 0x000016deu, 0x0003003eu, 0x000016dfu, 0x000016dau, 0x00070039u, 0x00000013u, 0x000016e0u, 0x00000178u, 0x000016dbu, 0x000016ddu, 0x000016dfu, 0x0003003eu, 0x00001434u, 0x000016e0u, 0x000200f9u, 0x000016d6u, 0x000200f8u, 0x000016d6u, 0x000700f5u, 0x00000013u, 0x0000f0a8u, 0x0000effcu, 0x000016bfu, 0x000016e0u, 0x000016d5u, 0x000200f9u, 0x00001687u, 0x000200f8u, 0x00001685u, 0x0004007cu, 0x000000b0u, 0x000016e3u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x000016e5u, 0x000001b9u, 0x0003003eu, 0x000016e4u, 0x000016e5u, 0x0004003du, 0x00000006u, 0x000016e7u, 0x000001bau, 0x0003003eu, 0x000016e6u, 0x000016e7u, 0x0003003eu, 0x000016e8u, 0x000016e3u, 0x00070039u, 0x00000013u, 0x000016e9u, 0x00000188u, 0x000016e4u, 0x000016e6u, 0x000016e8u, 0x0003003eu, 0x000013f1u, 0x000016e9u, 0x0004003du, 0x00000069u, 0x000016eau, 0x000001beu, 0x000300f7u, 0x000016ecu, 0x00000000u, 0x000400fau, 0x000016eau, 0x000016ebu, 0x000016ecu, 0x000200f8u, 0x000016ebu, 0x00050050u, 0x000000efu, 0x000016efu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000016f0u, 0x000016efu, 0x0004003du, 0x00000023u, 0x000016f2u, 0x000001b9u, 0x0003003eu, 0x000016f1u, 0x000016f2u, 0x0004003du, 0x00000006u, 0x000016f4u, 0x000001bau, 0x0003003eu, 0x000016f3u, 0x000016f4u, 0x0003003eu, 0x000016f5u, 0x000016f0u, 0x00070039u, 0x00000013u, 0x000016f6u, 0x00000188u, 0x000016f1u, 0x000016f3u, 0x000016f5u, 0x0003003eu, 0x00001409u, 0x000016f6u, 0x00050050u, 0x000000efu, 0x000016f9u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000016fau, 0x000016f9u, 0x0004003du, 0x00000023u, 0x000016fcu, 0x000001b9u, 0x0003003eu, 0x000016fbu, 0x000016fcu, 0x0004003du, 0x00000006u, 0x000016feu, 0x000001bau, 0x0003003eu, 0x000016fdu, 0x000016feu, 0x0003003eu, 0x000016ffu, 0x000016fau, 0x00070039u, 0x00000013u, 0x00001700u, 0x00000188u, 0x000016fbu, 0x000016fdu, 0x000016ffu, 0x0003003eu, 0x0000141du, 0x00001700u, 0x000200f9u, 0x000016ecu, 0x000200f8u, 0x000016ecu, 0x000700f5u, 0x00000013u, 0x0000f07cu, 0x0000effcu, 0x00001685u, 0x00001700u, 0x000016ebu, 0x000700f5u, 0x00000013u, 0x0000f01du, 0x0000effcu, 0x00001685u, 0x000016f6u, 0x000016ebu, 0x0004003du, 0x00000069u, 0x00001701u, 0x000001bfu, 0x000300f7u, 0x00001703u, 0x00000000u, 0x000400fau, 0x00001701u, 0x00001702u, 0x00001703u, 0x000200f8u, 0x00001702u, 0x00050050u, 0x000000efu, 0x00001706u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001707u, 0x00001706u, 0x0004003du, 0x00000023u, 0x00001709u, 0x000001b9u, 0x0003003eu, 0x00001708u, 0x00001709u, 0x0004003du, 0x00000006u, 0x0000170bu, 0x000001bau, 0x0003003eu, 0x0000170au, 0x0000170bu, 0x0003003eu, 0x0000170cu, 0x00001707u, 0x00070039u, 0x00000013u, 0x0000170du, 0x00000188u, 0x00001708u, 0x0000170au, 0x0000170cu, 0x0003003eu, 0x00001434u, 0x0000170du, 0x000200f9u, 0x00001703u, 0x000200f8u, 0x00001703u, 0x000700f5u, 0x00000013u, 0x0000f0aau, 0x0000effcu, 0x000016ecu, 0x0000170du, 0x00001702u, 0x000200f9u, 0x00001687u, 0x000200f8u, 0x00001686u, 0x0004007cu, 0x000000b0u, 0x00001710u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001712u, 0x000001b9u, 0x0003003eu, 0x00001711u, 0x00001712u, 0x0004003du, 0x00000006u, 0x00001714u, 0x000001bau, 0x0003003eu, 0x00001713u, 0x00001714u, 0x0003003eu, 0x00001715u, 0x00001710u, 0x00070039u, 0x00000013u, 0x00001716u, 0x00000166u, 0x00001711u, 0x00001713u, 0x00001715u, 0x0003003eu, 0x000013f1u, 0x00001716u, 0x0004003du, 0x00000069u, 0x00001717u, 0x000001beu, 0x000300f7u, 0x00001719u, 0x00000000u, 0x000400fau, 0x00001717u, 0x00001718u, 0x00001719u, 0x000200f8u, 0x00001718u, 0x00050050u, 0x000000efu, 0x0000171cu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x0000171du, 0x0000171cu, 0x0004003du, 0x00000023u, 0x0000171fu, 0x000001b9u, 0x0003003eu, 0x0000171eu, 0x0000171fu, 0x0004003du, 0x00000006u, 0x00001721u, 0x000001bau, 0x0003003eu, 0x00001720u, 0x00001721u, 0x0003003eu, 0x00001722u, 0x0000171du, 0x00070039u, 0x00000013u, 0x00001723u, 0x00000166u, 0x0000171eu, 0x00001720u, 0x00001722u, 0x0003003eu, 0x00001409u, 0x00001723u, 0x00050050u, 0x000000efu, 0x00001726u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001727u, 0x00001726u, 0x0004003du, 0x00000023u, 0x00001729u, 0x000001b9u, 0x0003003eu, 0x00001728u, 0x00001729u, 0x0004003du, 0x00000006u, 0x0000172bu, 0x000001bau, 0x0003003eu, 0x0000172au, 0x0000172bu, 0x0003003eu, 0x0000172cu, 0x00001727u, 0x00070039u, 0x00000013u, 0x0000172du, 0x00000166u, 0x00001728u, 0x0000172au, 0x0000172cu, 0x0003003eu, 0x0000141du, 0x0000172du, 0x000200f9u, 0x00001719u, 0x000200f8u, 0x00001719u, 0x000700f5u, 0x00000013u, 0x0000f07eu, 0x0000effcu, 0x00001686u, 0x0000172du, 0x00001718u, 0x000700f5u, 0x00000013u, 0x0000f01fu, 0x0000effcu, 0x00001686u, 0x00001723u, 0x00001718u, 0x0004003du, 0x00000069u, 0x0000172eu, 0x000001bfu, 0x000300f7u, 0x00001730u, 0x00000000u, 0x000400fau, 0x0000172eu, 0x0000172fu, 0x00001730u, 0x000200f8u, 0x0000172fu, 0x00050050u, 0x000000efu, 0x00001733u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001734u, 0x00001733u, 0x0004003du, 0x00000023u, 0x00001736u, 0x000001b9u, 0x0003003eu, 0x00001735u, 0x00001736u, 0x0004003du, 0x00000006u, 0x00001738u, 0x000001bau, 0x0003003eu, 0x00001737u, 0x00001738u, 0x0003003eu, 0x00001739u, 0x00001734u, 0x00070039u, 0x00000013u, 0x0000173au, 0x00000166u, 0x00001735u, 0x00001737u, 0x00001739u, 0x0003003eu, 0x00001434u, 0x0000173au, 0x000200f9u, 0x00001730u, 0x000200f8u, 0x00001730u, 0x000700f5u, 0x00000013u, 0x0000f0acu, 0x0000effcu, 0x00001719u, 0x0000173au, 0x0000172fu, 0x000200f9u, 0x00001687u, 0x000200f8u, 0x00001687u, 0x000d00f5u, 0x00000013u, 0x0000f0a5u, 0x0000effcu, 0x000014dcu, 0x0000f0a6u, 0x000016a9u, 0x0000f0a8u, 0x000016d6u, 0x0000f0aau, 0x00001703u, 0x0000f0acu, 0x00001730u, 0x000d00f5u, 0x00000013u, 0x0000f076u, 0x0000effcu, 0x000014dcu, 0x0000f078u, 0x000016a9u, 0x0000f07au, 0x000016d6u, 0x0000f07cu, 0x00001703u, 0x0000f07eu, 0x00001730u, 0x000d00f5u, 0x00000013u, 0x0000f046u, 0x0000effcu, 0x000014dcu, 0x0000168fu, 0x000016a9u, 0x000016bcu, 0x000016d6u, 0x000016e9u, 0x00001703u, 0x00001716u, 0x00001730u, 0x000d00f5u, 0x00000013u, 0x0000f017u, 0x0000effcu, 0x000014dcu, 0x0000f019u, 0x000016a9u, 0x0000f01bu, 0x000016d6u, 0x0000f01du, 0x00001703u, 0x0000f01fu, 0x00001730u, 0x000200f9u, 0x000014deu, 0x000200f8u, 0x000014ddu, 0x00050041u, 0x0000007bu, 0x0000173eu, 0x000001b9u, 0x0000023cu, 0x0004003du, 0x0000000fu, 0x0000173fu, 0x0000173eu, 0x00040071u, 0x00000006u, 0x00001740u, 0x0000173fu, 0x0004007cu, 0x00000008u, 0x00001741u, 0x00001740u, 0x000300f7u, 0x00001745u, 0x00000000u, 0x000700fbu, 0x00001741u, 0x00001744u, 0x00000000u, 0x00001742u, 0x00000001u, 0x00001743u, 0x000200f8u, 0x00001744u, 0x0004007cu, 0x000000b0u, 0x000017a1u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x000017a3u, 0x000001b9u, 0x0003003eu, 0x000017a2u, 0x000017a3u, 0x0004003du, 0x00000006u, 0x000017a5u, 0x000001bau, 0x0003003eu, 0x000017a4u, 0x000017a5u, 0x0003003eu, 0x000017a6u, 0x000017a1u, 0x00070039u, 0x00000013u, 0x000017a7u, 0x00000166u, 0x000017a2u, 0x000017a4u, 0x000017a6u, 0x0003003eu, 0x000013f1u, 0x000017a7u, 0x0004003du, 0x00000069u, 0x000017a8u, 0x000001beu, 0x000300f7u, 0x000017aau, 0x00000000u, 0x000400fau, 0x000017a8u, 0x000017a9u, 0x000017aau, 0x000200f8u, 0x000017a9u, 0x00050050u, 0x000000efu, 0x000017adu, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x000017aeu, 0x000017adu, 0x0004003du, 0x00000023u, 0x000017b0u, 0x000001b9u, 0x0003003eu, 0x000017afu, 0x000017b0u, 0x0004003du, 0x00000006u, 0x000017b2u, 0x000001bau, 0x0003003eu, 0x000017b1u, 0x000017b2u, 0x0003003eu, 0x000017b3u, 0x000017aeu, 0x00070039u, 0x00000013u, 0x000017b4u, 0x00000166u, 0x000017afu, 0x000017b1u, 0x000017b3u, 0x0003003eu, 0x00001409u, 0x000017b4u, 0x00050050u, 0x000000efu, 0x000017b7u, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000017b8u, 0x000017b7u, 0x0004003du, 0x00000023u, 0x000017bau, 0x000001b9u, 0x0003003eu, 0x000017b9u, 0x000017bau, 0x0004003du, 0x00000006u, 0x000017bcu, 0x000001bau, 0x0003003eu, 0x000017bbu, 0x000017bcu, 0x0003003eu, 0x000017bdu, 0x000017b8u, 0x00070039u, 0x00000013u, 0x000017beu, 0x00000166u, 0x000017b9u, 0x000017bbu, 0x000017bdu, 0x0003003eu, 0x0000141du, 0x000017beu, 0x000200f9u, 0x000017aau, 0x000200f8u, 0x000017aau, 0x000700f5u, 0x00000013u, 0x0000f081u, 0x0000effcu, 0x00001744u, 0x000017beu, 0x000017a9u, 0x000700f5u, 0x00000013u, 0x0000f022u, 0x0000effcu, 0x00001744u, 0x000017b4u, 0x000017a9u, 0x0004003du, 0x00000069u, 0x000017bfu, 0x000001bfu, 0x000300f7u, 0x000017c1u, 0x00000000u, 0x000400fau, 0x000017bfu, 0x000017c0u, 0x000017c1u, 0x000200f8u, 0x000017c0u, 0x00050050u, 0x000000efu, 0x000017c4u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x000017c5u, 0x000017c4u, 0x0004003du, 0x00000023u, 0x000017c7u, 0x000001b9u, 0x0003003eu, 0x000017c6u, 0x000017c7u, 0x0004003du, 0x00000006u, 0x000017c9u, 0x000001bau, 0x0003003eu, 0x000017c8u, 0x000017c9u, 0x0003003eu, 0x000017cau, 0x000017c5u, 0x00070039u, 0x00000013u, 0x000017cbu, 0x00000166u, 0x000017c6u, 0x000017c8u, 0x000017cau, 0x0003003eu, 0x00001434u, 0x000017cbu, 0x000200f9u, 0x000017c1u, 0x000200f8u, 0x000017c1u, 0x000700f5u, 0x00000013u, 0x0000f0afu, 0x0000effcu, 0x000017aau, 0x000017cbu, 0x000017c0u, 0x000200f9u, 0x00001745u, 0x000200f8u, 0x00001742u, 0x0004007cu, 0x000000b0u, 0x00001747u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001749u, 0x000001b9u, 0x0003003eu, 0x00001748u, 0x00001749u, 0x0004003du, 0x00000006u, 0x0000174bu, 0x000001bau, 0x0003003eu, 0x0000174au, 0x0000174bu, 0x0003003eu, 0x0000174cu, 0x00001747u, 0x00070039u, 0x00000013u, 0x0000174du, 0x00000142u, 0x00001748u, 0x0000174au, 0x0000174cu, 0x0003003eu, 0x000013f1u, 0x0000174du, 0x0004003du, 0x00000069u, 0x0000174eu, 0x000001beu, 0x000300f7u, 0x00001750u, 0x00000000u, 0x000400fau, 0x0000174eu, 0x0000174fu, 0x00001750u, 0x000200f8u, 0x0000174fu, 0x00050050u, 0x000000efu, 0x00001753u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x00001754u, 0x00001753u, 0x0004003du, 0x00000023u, 0x00001756u, 0x000001b9u, 0x0003003eu, 0x00001755u, 0x00001756u, 0x0004003du, 0x00000006u, 0x00001758u, 0x000001bau, 0x0003003eu, 0x00001757u, 0x00001758u, 0x0003003eu, 0x00001759u, 0x00001754u, 0x00070039u, 0x00000013u, 0x0000175au, 0x00000142u, 0x00001755u, 0x00001757u, 0x00001759u, 0x0003003eu, 0x00001409u, 0x0000175au, 0x00050050u, 0x000000efu, 0x0000175du, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000175eu, 0x0000175du, 0x0004003du, 0x00000023u, 0x00001760u, 0x000001b9u, 0x0003003eu, 0x0000175fu, 0x00001760u, 0x0004003du, 0x00000006u, 0x00001762u, 0x000001bau, 0x0003003eu, 0x00001761u, 0x00001762u, 0x0003003eu, 0x00001763u, 0x0000175eu, 0x00070039u, 0x00000013u, 0x00001764u, 0x00000142u, 0x0000175fu, 0x00001761u, 0x00001763u, 0x0003003eu, 0x0000141du, 0x00001764u, 0x000200f9u, 0x00001750u, 0x000200f8u, 0x00001750u, 0x000700f5u, 0x00000013u, 0x0000f083u, 0x0000effcu, 0x00001742u, 0x00001764u, 0x0000174fu, 0x000700f5u, 0x00000013u, 0x0000f024u, 0x0000effcu, 0x00001742u, 0x0000175au, 0x0000174fu, 0x0004003du, 0x00000069u, 0x00001765u, 0x000001bfu, 0x000300f7u, 0x00001767u, 0x00000000u, 0x000400fau, 0x00001765u, 0x00001766u, 0x00001767u, 0x000200f8u, 0x00001766u, 0x00050050u, 0x000000efu, 0x0000176au, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000176bu, 0x0000176au, 0x0004003du, 0x00000023u, 0x0000176du, 0x000001b9u, 0x0003003eu, 0x0000176cu, 0x0000176du, 0x0004003du, 0x00000006u, 0x0000176fu, 0x000001bau, 0x0003003eu, 0x0000176eu, 0x0000176fu, 0x0003003eu, 0x00001770u, 0x0000176bu, 0x00070039u, 0x00000013u, 0x00001771u, 0x00000142u, 0x0000176cu, 0x0000176eu, 0x00001770u, 0x0003003eu, 0x00001434u, 0x00001771u, 0x000200f9u, 0x00001767u, 0x000200f8u, 0x00001767u, 0x000700f5u, 0x00000013u, 0x0000f0b1u, 0x0000effcu, 0x00001750u, 0x00001771u, 0x00001766u, 0x000200f9u, 0x00001745u, 0x000200f8u, 0x00001743u, 0x0004007cu, 0x000000b0u, 0x00001774u, 0x0000ef6cu, 0x0004003du, 0x00000023u, 0x00001776u, 0x000001b9u, 0x0003003eu, 0x00001775u, 0x00001776u, 0x0004003du, 0x00000006u, 0x00001778u, 0x000001bau, 0x0003003eu, 0x00001777u, 0x00001778u, 0x0003003eu, 0x00001779u, 0x00001774u, 0x00070039u, 0x00000013u, 0x0000177au, 0x00000173u, 0x00001775u, 0x00001777u, 0x00001779u, 0x0003003eu, 0x000013f1u, 0x0000177au, 0x0004003du, 0x00000069u, 0x0000177bu, 0x000001beu, 0x000300f7u, 0x0000177du, 0x00000000u, 0x000400fau, 0x0000177bu, 0x0000177cu, 0x0000177du, 0x000200f8u, 0x0000177cu, 0x00050050u, 0x000000efu, 0x00001780u, 0x000013a5u, 0x000013b5u, 0x0004007cu, 0x000000b0u, 0x00001781u, 0x00001780u, 0x0004003du, 0x00000023u, 0x00001783u, 0x000001b9u, 0x0003003eu, 0x00001782u, 0x00001783u, 0x0004003du, 0x00000006u, 0x00001785u, 0x000001bau, 0x0003003eu, 0x00001784u, 0x00001785u, 0x0003003eu, 0x00001786u, 0x00001781u, 0x00070039u, 0x00000013u, 0x00001787u, 0x00000173u, 0x00001782u, 0x00001784u, 0x00001786u, 0x0003003eu, 0x00001409u, 0x00001787u, 0x00050050u, 0x000000efu, 0x0000178au, 0x00001396u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x0000178bu, 0x0000178au, 0x0004003du, 0x00000023u, 0x0000178du, 0x000001b9u, 0x0003003eu, 0x0000178cu, 0x0000178du, 0x0004003du, 0x00000006u, 0x0000178fu, 0x000001bau, 0x0003003eu, 0x0000178eu, 0x0000178fu, 0x0003003eu, 0x00001790u, 0x0000178bu, 0x00070039u, 0x00000013u, 0x00001791u, 0x00000173u, 0x0000178cu, 0x0000178eu, 0x00001790u, 0x0003003eu, 0x0000141du, 0x00001791u, 0x000200f9u, 0x0000177du, 0x000200f8u, 0x0000177du, 0x000700f5u, 0x00000013u, 0x0000f085u, 0x0000effcu, 0x00001743u, 0x00001791u, 0x0000177cu, 0x000700f5u, 0x00000013u, 0x0000f026u, 0x0000effcu, 0x00001743u, 0x00001787u, 0x0000177cu, 0x0004003du, 0x00000069u, 0x00001792u, 0x000001bfu, 0x000300f7u, 0x00001794u, 0x00000000u, 0x000400fau, 0x00001792u, 0x00001793u, 0x00001794u, 0x000200f8u, 0x00001793u, 0x00050050u, 0x000000efu, 0x00001797u, 0x000013a5u, 0x000013b7u, 0x0004007cu, 0x000000b0u, 0x00001798u, 0x00001797u, 0x0004003du, 0x00000023u, 0x0000179au, 0x000001b9u, 0x0003003eu, 0x00001799u, 0x0000179au, 0x0004003du, 0x00000006u, 0x0000179cu, 0x000001bau, 0x0003003eu, 0x0000179bu, 0x0000179cu, 0x0003003eu, 0x0000179du, 0x00001798u, 0x00070039u, 0x00000013u, 0x0000179eu, 0x00000173u, 0x00001799u, 0x0000179bu, 0x0000179du, 0x0003003eu, 0x00001434u, 0x0000179eu, 0x000200f9u, 0x00001794u, 0x000200f8u, 0x00001794u, 0x000700f5u, 0x00000013u, 0x0000f0b3u, 0x0000effcu, 0x0000177du, 0x0000179eu, 0x00001793u, 0x000200f9u, 0x00001745u, 0x000200f8u, 0x00001745u, 0x000900f5u, 0x00000013u, 0x0000f0aeu, 0x0000f0afu, 0x000017c1u, 0x0000f0b1u, 0x00001767u, 0x0000f0b3u, 0x00001794u, 0x000900f5u, 0x00000013u, 0x0000f07fu, 0x0000f081u, 0x000017c1u, 0x0000f083u, 0x00001767u, 0x0000f085u, 0x00001794u, 0x000900f5u, 0x00000013u, 0x0000f04fu, 0x000017a7u, 0x000017c1u, 0x0000174du, 0x00001767u, 0x0000177au, 0x00001794u, 0x000900f5u, 0x00000013u, 0x0000f020u, 0x0000f022u, 0x000017c1u, 0x0000f024u, 0x00001767u, 0x0000f026u, 0x00001794u, 0x000200f9u, 0x000014deu, 0x000200f8u, 0x000014deu, 0x000f00f5u, 0x00000013u, 0x0000f093u, 0x0000effcu, 0x000014d4u, 0x0000f094u, 0x000014e7u, 0x0000f09du, 0x000015b8u, 0x0000f09eu, 0x000015e5u, 0x0000f0a5u, 0x00001687u, 0x0000f0aeu, 0x00001745u, 0x000f00f5u, 0x00000013u, 0x0000f064u, 0x0000effcu, 0x000014d4u, 0x0000f065u, 0x000014e7u, 0x0000f06eu, 0x000015b8u, 0x0000f06fu, 0x000015e5u, 0x0000f076u, 0x00001687u, 0x0000f07fu, 0x00001745u, 0x000f00f5u, 0x00000013u, 0x0000f034u, 0x0000effcu, 0x000014d4u, 0x0000f035u, 0x000014e7u, 0x000015b5u, 0x000015b8u, 0x0000f03fu, 0x000015e5u, 0x0000f046u, 0x00001687u, 0x0000f04fu, 0x00001745u, 0x000f00f5u, 0x00000013u, 0x0000f005u, 0x0000effcu, 0x000014d4u, 0x0000f006u, 0x000014e7u, 0x0000f00fu, 0x000015b8u, 0x0000f010u, 0x000015e5u, 0x0000f017u, 0x00001687u, 0x0000f020u, 0x00001745u, 0x000200f9u, 0x000013dbu, 0x000200f8u, 0x000013dbu, 0x000700f5u, 0x00000013u, 0x0000f086u, 0x0000f087u, 0x000013e1u, 0x0000f093u, 0x000014deu, 0x000700f5u, 0x00000013u, 0x0000f057u, 0x0000f058u, 0x000013e1u, 0x0000f064u, 0x000014deu, 0x000700f5u, 0x00000013u, 0x0000f028u, 0x0000f029u, 0x000013e1u, 0x0000f034u, 0x000014deu, 0x000700f5u, 0x00000013u, 0x0000eff7u, 0x0000eff8u, 0x000013e1u, 0x0000f005u, 0x000014deu, 0x0004003du, 0x00000069u, 0x000017d0u, 0x000001c0u, 0x000300f7u, 0x000017d2u, 0x00000000u, 0x000400fau, 0x000017d0u, 0x000017d1u, 0x00001802u, 0x000200f8u, 0x000017d1u, 0x0004003du, 0x00000013u, 0x000017d4u, 0x000001c1u, 0x00040072u, 0x00000009u, 0x000017d5u, 0x000017d4u, 0x000600cau, 0x00000009u, 0x000017d6u, 0x000017d5u, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000017d3u, 0x000017d6u, 0x000300f7u, 0x000017dcu, 0x00000000u, 0x000400fau, 0x000013cdu, 0x000017dbu, 0x000017dfu, 0x000200f8u, 0x000017dbu, 0x0004003du, 0x00000009u, 0x000017ddu, 0x000017d3u, 0x0007004fu, 0x000000efu, 0x000017deu, 0x000017ddu, 0x000017ddu, 0x00000001u, 0x00000000u, 0x0003003eu, 0x000017dau, 0x000017deu, 0x000200f9u, 0x000017dcu, 0x000200f8u, 0x000017dfu, 0x0004003du, 0x00000009u, 0x000017e0u, 0x000017d3u, 0x0007004fu, 0x000000efu, 0x000017e1u, 0x000017e0u, 0x000017e0u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000017dau, 0x000017e1u, 0x000200f9u, 0x000017dcu, 0x000200f8u, 0x000017dcu, 0x000700f5u, 0x000000efu, 0x0000f0e0u, 0x000017deu, 0x000017dbu, 0x000017e1u, 0x000017dfu, 0x0003003eu, 0x000017d7u, 0x0000f0e0u, 0x00050041u, 0x00000046u, 0x000017e4u, 0x000017d7u, 0x0000032du, 0x0004003du, 0x00000008u, 0x000017e5u, 0x000017e4u, 0x00050082u, 0x00000013u, 0x000017e8u, 0x0000eff7u, 0x0000f028u, 0x00040072u, 0x00000009u, 0x000017e9u, 0x000017e8u, 0x00070050u, 0x00000009u, 0x000017eau, 0x000017e5u, 0x000017e5u, 0x000017e5u, 0x000017e5u, 0x00050084u, 0x00000009u, 0x000017ebu, 0x000017eau, 0x000017e9u, 0x00050041u, 0x00000046u, 0x000017ecu, 0x000017d7u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x000017edu, 0x000017ecu, 0x00050082u, 0x00000013u, 0x000017f0u, 0x0000f057u, 0x0000f028u, 0x00040072u, 0x00000009u, 0x000017f1u, 0x000017f0u, 0x00070050u, 0x00000009u, 0x000017f2u, 0x000017edu, 0x000017edu, 0x000017edu, 0x000017edu, 0x00050084u, 0x00000009u, 0x000017f3u, 0x000017f2u, 0x000017f1u, 0x00050080u, 0x00000009u, 0x000017f4u, 0x000017ebu, 0x000017f3u, 0x00050080u, 0x00000009u, 0x000017f6u, 0x000017f4u, 0x0000f3a1u, 0x0003003eu, 0x000017e3u, 0x000017f6u, 0x000500c3u, 0x00000009u, 0x000017f9u, 0x000017f6u, 0x0000f3acu, 0x0003003eu, 0x000017e3u, 0x000017f9u, 0x00050041u, 0x00000046u, 0x000017fau, 0x000017d3u, 0x00000386u, 0x0004003du, 0x00000008u, 0x000017fbu, 0x000017fau, 0x00070050u, 0x00000009u, 0x000017fdu, 0x000017fbu, 0x000017fbu, 0x000017fbu, 0x000017fbu, 0x00050080u, 0x00000009u, 0x000017feu, 0x000017f9u, 0x000017fdu, 0x0003003eu, 0x000017e3u, 0x000017feu, 0x00040072u, 0x00000013u, 0x00001801u, 0x000017feu, 0x0003003eu, 0x000017ffu, 0x00001801u, 0x000200f9u, 0x000017d2u, 0x000200f8u, 0x00001802u, 0x000300f7u, 0x00001805u, 0x00000000u, 0x000400fau, 0x000013cau, 0x00001804u, 0x0000183du, 0x000200f8u, 0x00001804u, 0x0004003du, 0x00000069u, 0x00001806u, 0x000001beu, 0x000300f7u, 0x00001808u, 0x00000000u, 0x000400fau, 0x00001806u, 0x00001807u, 0x0000183bu, 0x000200f8u, 0x00001807u, 0x000500c7u, 0x00000008u, 0x0000180bu, 0x00001396u, 0x0000022au, 0x000500c4u, 0x00000008u, 0x0000180cu, 0x0000180bu, 0x00000233u, 0x0004003du, 0x00000008u, 0x0000180eu, 0x00001388u, 0x000500c3u, 0x00000008u, 0x0000180fu, 0x0000180eu, 0x0000022au, 0x000500c5u, 0x00000008u, 0x00001810u, 0x0000180cu, 0x0000180fu, 0x0003003eu, 0x00001809u, 0x00001810u, 0x0004003du, 0x00000008u, 0x00001814u, 0x0000138au, 0x00050050u, 0x000000efu, 0x00001815u, 0x00001810u, 0x00001814u, 0x0007004fu, 0x000001aeu, 0x00001818u, 0x0000f028u, 0x0000f028u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001816u, 0x00001818u, 0x0007004fu, 0x000001aeu, 0x0000181bu, 0x0000eff7u, 0x0000eff7u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001819u, 0x0000181bu, 0x0007004fu, 0x000001aeu, 0x0000181eu, 0x0000f057u, 0x0000f057u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000181cu, 0x0000181eu, 0x0007004fu, 0x000001aeu, 0x00001821u, 0x0000f086u, 0x0000f086u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000181fu, 0x00001821u, 0x0003003eu, 0x00001822u, 0x00001815u, 0x00090039u, 0x000001aeu, 0x00001823u, 0x000001b6u, 0x00001816u, 0x00001819u, 0x0000181cu, 0x0000181fu, 0x00001822u, 0x0003003eu, 0x00001811u, 0x00001823u, 0x0007004fu, 0x000001aeu, 0x00001827u, 0x0000f028u, 0x0000f028u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001825u, 0x00001827u, 0x0007004fu, 0x000001aeu, 0x0000182au, 0x0000eff7u, 0x0000eff7u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001828u, 0x0000182au, 0x0007004fu, 0x000001aeu, 0x0000182du, 0x0000f057u, 0x0000f057u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000182bu, 0x0000182du, 0x0007004fu, 0x000001aeu, 0x00001830u, 0x0000f086u, 0x0000f086u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000182eu, 0x00001830u, 0x0004003du, 0x000000efu, 0x00001832u, 0x00001382u, 0x0003003eu, 0x00001831u, 0x00001832u, 0x00090039u, 0x000001aeu, 0x00001833u, 0x000001b6u, 0x00001825u, 0x00001828u, 0x0000182bu, 0x0000182eu, 0x00001831u, 0x0003003eu, 0x00001824u, 0x00001833u, 0x00050051u, 0x00000012u, 0x00001836u, 0x00001823u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00001837u, 0x00001823u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00001838u, 0x00001833u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00001839u, 0x00001833u, 0x00000001u, 0x00070050u, 0x00000013u, 0x0000183au, 0x00001836u, 0x00001837u, 0x00001838u, 0x00001839u, 0x0003003eu, 0x000017ffu, 0x0000183au, 0x000200f9u, 0x00001808u, 0x000200f8u, 0x0000183bu, 0x0003003eu, 0x000017ffu, 0x0000f028u, 0x000200f9u, 0x00001808u, 0x000200f8u, 0x00001808u, 0x000700f5u, 0x00000013u, 0x0000f0e6u, 0x0000183au, 0x00001807u, 0x0000f028u, 0x0000183bu, 0x000200f9u, 0x00001805u, 0x000200f8u, 0x0000183du, 0x0004003du, 0x00000069u, 0x0000183eu, 0x000001bfu, 0x000300f7u, 0x00001840u, 0x00000000u, 0x000400fau, 0x0000183eu, 0x0000183fu, 0x0000184cu, 0x000200f8u, 0x0000183fu, 0x00050080u, 0x00000013u, 0x00001843u, 0x0000f028u, 0x0000f057u, 0x00050080u, 0x00000013u, 0x00001845u, 0x00001843u, 0x0000eff7u, 0x00050080u, 0x00000013u, 0x00001847u, 0x00001845u, 0x0000f086u, 0x00050080u, 0x00000013u, 0x00001849u, 0x00001847u, 0x0000f3abu, 0x000500c3u, 0x00000013u, 0x0000184bu, 0x00001849u, 0x0000f3abu, 0x0003003eu, 0x000017ffu, 0x0000184bu, 0x000200f9u, 0x00001840u, 0x000200f8u, 0x0000184cu, 0x000300f7u, 0x00001852u, 0x00000000u, 0x000400fau, 0x000013cdu, 0x00001851u, 0x00001857u, 0x000200f8u, 0x00001851u, 0x0004003du, 0x000000efu, 0x00001853u, 0x00001382u, 0x0007004fu, 0x000000efu, 0x00001854u, 0x00001853u, 0x00001853u, 0x00000001u, 0x00000000u, 0x00050082u, 0x000000efu, 0x00001856u, 0x0000f3adu, 0x00001854u, 0x0003003eu, 0x00001850u, 0x00001856u, 0x000200f9u, 0x00001852u, 0x000200f8u, 0x00001857u, 0x0004003du, 0x000000efu, 0x00001858u, 0x00001382u, 0x0003003eu, 0x00001850u, 0x00001858u, 0x000200f9u, 0x00001852u, 0x000200f8u, 0x00001852u, 0x000700f5u, 0x000000efu, 0x0000eff5u, 0x00001856u, 0x00001851u, 0x00001858u, 0x00001857u, 0x00040072u, 0x000001aeu, 0x0000185au, 0x0000eff5u, 0x0003003eu, 0x0000184du, 0x0000185au, 0x00050082u, 0x00000013u, 0x0000185du, 0x0000eff7u, 0x0000f028u, 0x00050041u, 0x000001c4u, 0x0000185eu, 0x0000184du, 0x0000032du, 0x0004003du, 0x00000012u, 0x0000185fu, 0x0000185eu, 0x00070050u, 0x00000013u, 0x00001860u, 0x0000185fu, 0x0000185fu, 0x0000185fu, 0x0000185fu, 0x00050084u, 0x00000013u, 0x00001861u, 0x0000185du, 0x00001860u, 0x0003003eu, 0x000017ffu, 0x00001861u, 0x00050082u, 0x00000013u, 0x00001864u, 0x0000f057u, 0x0000f028u, 0x00050041u, 0x000001c4u, 0x00001865u, 0x0000184du, 0x0000045cu, 0x0004003du, 0x00000012u, 0x00001866u, 0x00001865u, 0x00070050u, 0x00000013u, 0x00001867u, 0x00001866u, 0x00001866u, 0x00001866u, 0x00001866u, 0x00050084u, 0x00000013u, 0x00001868u, 0x00001864u, 0x00001867u, 0x00050080u, 0x00000013u, 0x0000186au, 0x00001861u, 0x00001868u, 0x0003003eu, 0x000017ffu, 0x0000186au, 0x00050080u, 0x00000013u, 0x0000186du, 0x0000186au, 0x0000f3b0u, 0x0003003eu, 0x000017ffu, 0x0000186du, 0x000500c3u, 0x00000013u, 0x00001870u, 0x0000186du, 0x0000f3b1u, 0x0003003eu, 0x000017ffu, 0x00001870u, 0x00050080u, 0x00000013u, 0x00001873u, 0x00001870u, 0x0000f028u, 0x0003003eu, 0x000017ffu, 0x00001873u, 0x000200f9u, 0x00001840u, 0x000200f8u, 0x00001840u, 0x000700f5u, 0x00000013u, 0x0000f0e7u, 0x0000184bu, 0x0000183fu, 0x00001873u, 0x00001852u, 0x000200f9u, 0x00001805u, 0x000200f8u, 0x00001805u, 0x000700f5u, 0x00000013u, 0x0000f0e5u, 0x0000f0e6u, 0x00001808u, 0x0000f0e7u, 0x00001840u, 0x000200f9u, 0x000017d2u, 0x000200f8u, 0x000017d2u, 0x000700f5u, 0x00000013u, 0x0000f0e4u, 0x00001801u, 0x000017dcu, 0x0000f0e5u, 0x00001805u, 0x000200feu, 0x0000f0e4u, 0x00010038u, 0x00050036u, 0x00000002u, 0x000001d2u, 0x00000000u, 0x000001c5u, 0x00030037u, 0x00000007u, 0x000001c6u, 0x00030037u, 0x00000007u, 0x000001c7u, 0x00030037u, 0x000001c4u, 0x000001c8u, 0x00030037u, 0x00000007u, 0x000001c9u, 0x00030037u, 0x00000046u, 0x000001cau, 0x00030037u, 0x00000106u, 0x000001cbu, 0x00030037u, 0x00000106u, 0x000001ccu, 0x00030037u, 0x00000106u, 0x000001cdu, 0x00030037u, 0x0000006au, 0x000001ceu, 0x00030037u, 0x0000006au, 0x000001cfu, 0x00030037u, 0x0000006au, 0x000001d0u, 0x00030037u, 0x0000006au, 0x000001d1u, 0x000200f8u, 0x000001d3u, 0x0004003bu, 0x0000006au, 0x00001877u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001878u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001879u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x0000187fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001888u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001891u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001895u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000018bdu, 0x00000007u, 0x0003003eu, 0x00001877u, 0x00000536u, 0x0003003eu, 0x00001878u, 0x00000536u, 0x0003003eu, 0x00001879u, 0x0000032du, 0x0004003du, 0x00000069u, 0x0000187au, 0x000001ceu, 0x000300f7u, 0x0000187cu, 0x00000000u, 0x000400fau, 0x0000187au, 0x0000187bu, 0x0000187eu, 0x000200f8u, 0x0000187bu, 0x0003003eu, 0x00001878u, 0x00000559u, 0x0003003eu, 0x000001c8u, 0x0000187du, 0x000200f9u, 0x0000187cu, 0x000200f8u, 0x0000187eu, 0x0004003du, 0x000000efu, 0x00001880u, 0x000001ccu, 0x0004003du, 0x000000efu, 0x00001881u, 0x000001cbu, 0x00050082u, 0x000000efu, 0x00001882u, 0x00001880u, 0x00001881u, 0x0003003eu, 0x0000187fu, 0x00001882u, 0x000500c3u, 0x000000efu, 0x00001885u, 0x00001882u, 0x0000f3a5u, 0x000500c6u, 0x000000efu, 0x00001887u, 0x00001882u, 0x00001885u, 0x0003003eu, 0x0000187fu, 0x00001887u, 0x0004003du, 0x000000efu, 0x00001889u, 0x000001cdu, 0x0004003du, 0x000000efu, 0x0000188au, 0x000001cbu, 0x00050082u, 0x000000efu, 0x0000188bu, 0x00001889u, 0x0000188au, 0x0003003eu, 0x00001888u, 0x0000188bu, 0x000500c3u, 0x000000efu, 0x0000188eu, 0x0000188bu, 0x0000f3a5u, 0x000500c6u, 0x000000efu, 0x00001890u, 0x0000188bu, 0x0000188eu, 0x0003003eu, 0x00001888u, 0x00001890u, 0x0007000cu, 0x000000efu, 0x00001894u, 0x00000001u, 0x0000002au, 0x00001887u, 0x00001890u, 0x0003003eu, 0x00001891u, 0x00001894u, 0x00050041u, 0x00000046u, 0x00001896u, 0x00001891u, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001897u, 0x00001896u, 0x00050041u, 0x00000046u, 0x00001898u, 0x00001891u, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001899u, 0x00001898u, 0x0007000cu, 0x00000008u, 0x0000189au, 0x00000001u, 0x0000002au, 0x00001897u, 0x00001899u, 0x0003003eu, 0x00001895u, 0x0000189au, 0x000500afu, 0x00000069u, 0x0000189du, 0x0000189au, 0x0000189cu, 0x000300f7u, 0x0000189fu, 0x00000000u, 0x000400fau, 0x0000189du, 0x0000189eu, 0x000018a1u, 0x000200f8u, 0x0000189eu, 0x0003003eu, 0x00001878u, 0x00000559u, 0x0003003eu, 0x000001c8u, 0x0000187du, 0x0004003du, 0x00000006u, 0x000018a0u, 0x000001c9u, 0x0003003eu, 0x00001879u, 0x000018a0u, 0x000200f9u, 0x0000189fu, 0x000200f8u, 0x000018a1u, 0x000500b1u, 0x00000069u, 0x000018a3u, 0x0000189au, 0x0000115du, 0x000300f7u, 0x000018a5u, 0x00000000u, 0x000400fau, 0x000018a3u, 0x000018a4u, 0x000018bcu, 0x000200f8u, 0x000018a4u, 0x0004003du, 0x00000006u, 0x000018a6u, 0x000001c9u, 0x000500aau, 0x00000069u, 0x000018a7u, 0x000018a6u, 0x0000032du, 0x0003003eu, 0x00001878u, 0x000018a7u, 0x0003003eu, 0x00001877u, 0x00000559u, 0x0004003du, 0x00000069u, 0x000018a8u, 0x000001d0u, 0x000400a8u, 0x00000069u, 0x000018a9u, 0x000018a8u, 0x0004003du, 0x00000069u, 0x000018aau, 0x000001d1u, 0x000400a8u, 0x00000069u, 0x000018abu, 0x000018aau, 0x000500a7u, 0x00000069u, 0x000018acu, 0x000018a9u, 0x000018abu, 0x000300f7u, 0x000018aeu, 0x00000000u, 0x000400fau, 0x000018acu, 0x000018adu, 0x000018b2u, 0x000200f8u, 0x000018adu, 0x000600a9u, 0x00000008u, 0x000018b0u, 0x000018a7u, 0x0000035eu, 0x00000220u, 0x00040072u, 0x00000012u, 0x000018b1u, 0x000018b0u, 0x0003003eu, 0x000001c8u, 0x000018b1u, 0x000200f9u, 0x000018aeu, 0x000200f8u, 0x000018b2u, 0x0004003du, 0x00000008u, 0x000018b3u, 0x000001cau, 0x0007000cu, 0x00000008u, 0x000018b5u, 0x00000001u, 0x0000002au, 0x000018b3u, 0x0000189au, 0x000500c4u, 0x00000008u, 0x000018b6u, 0x000018b5u, 0x00000230u, 0x0004003du, 0x00000069u, 0x000018b7u, 0x000001d0u, 0x000600a9u, 0x00000008u, 0x000018b9u, 0x000018b7u, 0x000018b8u, 0x00000220u, 0x00050080u, 0x00000008u, 0x000018bau, 0x000018b6u, 0x000018b9u, 0x00040072u, 0x00000012u, 0x000018bbu, 0x000018bau, 0x0003003eu, 0x000001c8u, 0x000018bbu, 0x000200f9u, 0x000018aeu, 0x000200f8u, 0x000018aeu, 0x000200f9u, 0x000018a5u, 0x000200f8u, 0x000018bcu, 0x000500c3u, 0x00000008u, 0x000018bfu, 0x0000189au, 0x00000236u, 0x0006000cu, 0x00000008u, 0x000018c0u, 0x00000001u, 0x0000004au, 0x000018bfu, 0x0007000cu, 0x00000008u, 0x000018c1u, 0x00000001u, 0x0000002au, 0x000018c0u, 0x00000220u, 0x0003003eu, 0x000018bdu, 0x000018c1u, 0x0004007cu, 0x00000006u, 0x000018c3u, 0x000018c1u, 0x0004003du, 0x00000006u, 0x000018c4u, 0x000001c9u, 0x000500aeu, 0x00000069u, 0x000018c5u, 0x000018c3u, 0x000018c4u, 0x0003003eu, 0x00001878u, 0x000018c5u, 0x0004003du, 0x00000069u, 0x000018c7u, 0x000001d0u, 0x000400a8u, 0x00000069u, 0x000018c8u, 0x000018c7u, 0x000500a7u, 0x00000069u, 0x000018c9u, 0x000018c5u, 0x000018c8u, 0x0004003du, 0x00000069u, 0x000018cau, 0x000001d1u, 0x000400a8u, 0x00000069u, 0x000018cbu, 0x000018cau, 0x000500a7u, 0x00000069u, 0x000018ccu, 0x000018c9u, 0x000018cbu, 0x000300f7u, 0x000018ceu, 0x00000000u, 0x000400fau, 0x000018ccu, 0x000018cdu, 0x000018cfu, 0x000200f8u, 0x000018cdu, 0x0003003eu, 0x000001c8u, 0x0000187du, 0x000200f9u, 0x000018ceu, 0x000200f8u, 0x000018cfu, 0x000500c4u, 0x00000008u, 0x000018d1u, 0x0000189au, 0x00000230u, 0x000500c3u, 0x00000008u, 0x000018d3u, 0x000018d1u, 0x000018c1u, 0x000500c7u, 0x00000008u, 0x000018d4u, 0x000018d3u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x000018d5u, 0x000018d4u, 0x0003003eu, 0x000001c8u, 0x000018d5u, 0x0003003eu, 0x00001879u, 0x000018c3u, 0x000200f9u, 0x000018ceu, 0x000200f8u, 0x000018ceu, 0x000600a9u, 0x00000006u, 0x0000f3dfu, 0x000018ccu, 0x0000032du, 0x000018c3u, 0x000200f9u, 0x000018a5u, 0x000200f8u, 0x000018a5u, 0x000700f5u, 0x00000006u, 0x0000f0f0u, 0x0000032du, 0x000018aeu, 0x0000f3dfu, 0x000018ceu, 0x000700f5u, 0x00000069u, 0x0000f0eau, 0x000018a7u, 0x000018aeu, 0x000018c5u, 0x000018ceu, 0x000600a9u, 0x00000069u, 0x0000f3e0u, 0x000018a3u, 0x00000559u, 0x00000536u, 0x000200f9u, 0x0000189fu, 0x000200f8u, 0x0000189fu, 0x000700f5u, 0x00000069u, 0x0000f0f6u, 0x00000536u, 0x0000189eu, 0x0000f3e0u, 0x000018a5u, 0x000700f5u, 0x00000006u, 0x0000f0efu, 0x000018a0u, 0x0000189eu, 0x0000f0f0u, 0x000018a5u, 0x000700f5u, 0x00000069u, 0x0000f0e9u, 0x00000559u, 0x0000189eu, 0x0000f0eau, 0x000018a5u, 0x000200f9u, 0x0000187cu, 0x000200f8u, 0x0000187cu, 0x000700f5u, 0x00000069u, 0x0000f0f5u, 0x00000536u, 0x0000187bu, 0x0000f0f6u, 0x0000189fu, 0x000700f5u, 0x00000006u, 0x0000f0eeu, 0x0000032du, 0x0000187bu, 0x0000f0efu, 0x0000189fu, 0x000700f5u, 0x00000069u, 0x0000f0e8u, 0x00000559u, 0x0000187bu, 0x0000f0e9u, 0x0000189fu, 0x0004003du, 0x00000069u, 0x000018d8u, 0x000001cfu, 0x000300f7u, 0x000018dau, 0x00000000u, 0x000400fau, 0x000018d8u, 0x000018d9u, 0x000018dau, 0x000200f8u, 0x000018d9u, 0x000300f7u, 0x000018ddu, 0x00000000u, 0x000400fau, 0x0000f0e8u, 0x000018dcu, 0x000018ddu, 0x000200f8u, 0x000018dcu, 0x0004003du, 0x00000006u, 0x000018deu, 0x000001c9u, 0x0003003eu, 0x00001879u, 0x000018deu, 0x000200f9u, 0x000018ddu, 0x000200f8u, 0x000018ddu, 0x000700f5u, 0x00000006u, 0x0000f0edu, 0x0000f0eeu, 0x000018d9u, 0x000018deu, 0x000018dcu, 0x0004003du, 0x00000069u, 0x000018dfu, 0x000001d1u, 0x000400a8u, 0x00000069u, 0x000018e0u, 0x000018dfu, 0x000300f7u, 0x000018e2u, 0x00000000u, 0x000400fau, 0x000018e0u, 0x000018e1u, 0x000018f7u, 0x000200f8u, 0x000018e1u, 0x0004003du, 0x00000006u, 0x000018e3u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018e5u, 0x000018e3u, 0x0000f0edu, 0x000500c7u, 0x00000006u, 0x000018e6u, 0x000018e5u, 0x00000742u, 0x0003003eu, 0x000001c6u, 0x000018e6u, 0x000400a8u, 0x00000069u, 0x000018e8u, 0x0000f0e8u, 0x000300f7u, 0x000018eau, 0x00000000u, 0x000400fau, 0x000018e8u, 0x000018e9u, 0x000018eau, 0x000200f8u, 0x000018e9u, 0x0004003du, 0x00000069u, 0x000018ebu, 0x000001d0u, 0x000400a8u, 0x00000069u, 0x000018ecu, 0x000018ebu, 0x000500a7u, 0x00000069u, 0x000018eeu, 0x000018ecu, 0x0000f0f5u, 0x000200f9u, 0x000018eau, 0x000200f8u, 0x000018eau, 0x000700f5u, 0x00000069u, 0x000018efu, 0x0000f0e8u, 0x000018e1u, 0x000018eeu, 0x000018e9u, 0x000300f7u, 0x000018f1u, 0x00000000u, 0x000400fau, 0x000018efu, 0x000018f0u, 0x000018f3u, 0x000200f8u, 0x000018f0u, 0x0004003du, 0x00000006u, 0x000018f2u, 0x000001c6u, 0x0003003eu, 0x000001c7u, 0x000018f2u, 0x000200f9u, 0x000018f1u, 0x000200f8u, 0x000018f3u, 0x0004003du, 0x00000006u, 0x000018f4u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018f5u, 0x000018f4u, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x000018f6u, 0x000018f5u, 0x00000742u, 0x0003003eu, 0x000001c7u, 0x000018f6u, 0x000200f9u, 0x000018f1u, 0x000200f8u, 0x000018f1u, 0x000200f9u, 0x000018e2u, 0x000200f8u, 0x000018f7u, 0x0004003du, 0x00000006u, 0x000018f8u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x000018fau, 0x000018f8u, 0x0000f0edu, 0x000500a6u, 0x00000069u, 0x000018fdu, 0x0000f0e8u, 0x0000f0f5u, 0x000600a9u, 0x00000008u, 0x000018feu, 0x000018fdu, 0x0000022au, 0x0000022du, 0x0004007cu, 0x00000006u, 0x000018ffu, 0x000018feu, 0x00050080u, 0x00000006u, 0x00001900u, 0x000018fau, 0x000018ffu, 0x000500c7u, 0x00000006u, 0x00001901u, 0x00001900u, 0x00000742u, 0x0003003eu, 0x000001c7u, 0x00001901u, 0x0004003du, 0x00000006u, 0x00001902u, 0x000001c6u, 0x00050080u, 0x00000006u, 0x00001904u, 0x00001902u, 0x0000f0edu, 0x000600a9u, 0x00000008u, 0x00001906u, 0x0000f0f5u, 0x00000220u, 0x0000022au, 0x0004007cu, 0x00000006u, 0x00001907u, 0x00001906u, 0x00050080u, 0x00000006u, 0x00001908u, 0x00001904u, 0x00001907u, 0x000500c7u, 0x00000006u, 0x00001909u, 0x00001908u, 0x00000742u, 0x0003003eu, 0x000001c6u, 0x00001909u, 0x000200f9u, 0x000018e2u, 0x000200f8u, 0x000018e2u, 0x000200f9u, 0x000018dau, 0x000200f8u, 0x000018dau, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000001d7u, 0x00000000u, 0x000001d4u, 0x00030037u, 0x000000e4u, 0x000001d5u, 0x00030037u, 0x000000e4u, 0x000001d6u, 0x000200f8u, 0x000001d8u, 0x0004003bu, 0x000000dfu, 0x0000190au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000190eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000191au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000192du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001939u, 0x00000007u, 0x0004003du, 0x00000013u, 0x0000190bu, 0x000001d5u, 0x00040072u, 0x00000009u, 0x0000190cu, 0x0000190bu, 0x000600cau, 0x00000009u, 0x0000190du, 0x0000190cu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x0000190au, 0x0000190du, 0x00050041u, 0x00000046u, 0x0000190fu, 0x0000190au, 0x00000386u, 0x0004003du, 0x00000008u, 0x00001910u, 0x0000190fu, 0x00050041u, 0x000001c4u, 0x00001911u, 0x000001d6u, 0x0000032du, 0x0004003du, 0x00000012u, 0x00001912u, 0x00001911u, 0x00040072u, 0x00000008u, 0x00001913u, 0x00001912u, 0x00050041u, 0x00000046u, 0x00001914u, 0x0000190au, 0x0000045cu, 0x0004003du, 0x00000008u, 0x00001915u, 0x00001914u, 0x00050084u, 0x00000008u, 0x00001916u, 0x00001913u, 0x00001915u, 0x00050080u, 0x00000008u, 0x00001917u, 0x00001916u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00001918u, 0x00001917u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00001919u, 0x00001910u, 0x00001918u, 0x0003003eu, 0x0000190eu, 0x00001919u, 0x0004003du, 0x00000008u, 0x0000191cu, 0x0000190fu, 0x00050041u, 0x000001c4u, 0x0000191du, 0x000001d6u, 0x0000045cu, 0x0004003du, 0x00000012u, 0x0000191eu, 0x0000191du, 0x00040072u, 0x00000008u, 0x0000191fu, 0x0000191eu, 0x00050041u, 0x00000046u, 0x00001920u, 0x0000190au, 0x0000032du, 0x0004003du, 0x00000008u, 0x00001921u, 0x00001920u, 0x00050084u, 0x00000008u, 0x00001922u, 0x0000191fu, 0x00001921u, 0x00050041u, 0x000001c4u, 0x00001923u, 0x000001d6u, 0x00000386u, 0x0004003du, 0x00000012u, 0x00001924u, 0x00001923u, 0x00040072u, 0x00000008u, 0x00001925u, 0x00001924u, 0x0004003du, 0x00000008u, 0x00001927u, 0x00001914u, 0x00050084u, 0x00000008u, 0x00001928u, 0x00001925u, 0x00001927u, 0x00050080u, 0x00000008u, 0x00001929u, 0x00001922u, 0x00001928u, 0x00050080u, 0x00000008u, 0x0000192au, 0x00001929u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x0000192bu, 0x0000192au, 0x0000025du, 0x00050080u, 0x00000008u, 0x0000192cu, 0x0000191cu, 0x0000192bu, 0x0003003eu, 0x0000191au, 0x0000192cu, 0x0004003du, 0x00000008u, 0x0000192fu, 0x0000190fu, 0x00050041u, 0x000001c4u, 0x00001930u, 0x000001d6u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001931u, 0x00001930u, 0x00040072u, 0x00000008u, 0x00001932u, 0x00001931u, 0x0004003du, 0x00000008u, 0x00001934u, 0x00001920u, 0x00050084u, 0x00000008u, 0x00001935u, 0x00001932u, 0x00001934u, 0x00050080u, 0x00000008u, 0x00001936u, 0x00001935u, 0x00000b01u, 0x000500c3u, 0x00000008u, 0x00001937u, 0x00001936u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00001938u, 0x0000192fu, 0x00001937u, 0x0003003eu, 0x0000192du, 0x00001938u, 0x0004003du, 0x00000008u, 0x0000193bu, 0x0000190fu, 0x0003003eu, 0x00001939u, 0x0000193bu, 0x00040072u, 0x00000012u, 0x0000193du, 0x00001919u, 0x00040072u, 0x00000012u, 0x0000193fu, 0x0000192cu, 0x00040072u, 0x00000012u, 0x00001941u, 0x00001938u, 0x00040072u, 0x00000012u, 0x00001943u, 0x0000193bu, 0x00070050u, 0x00000013u, 0x00001944u, 0x0000193du, 0x0000193fu, 0x00001941u, 0x00001943u, 0x000200feu, 0x00001944u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001dbu, 0x00000000u, 0x000001d9u, 0x00030037u, 0x000000dfu, 0x000001dau, 0x000200f8u, 0x000001dcu, 0x0004003du, 0x00000009u, 0x00001947u, 0x000001dau, 0x00050082u, 0x00000009u, 0x00001949u, 0x00001947u, 0x0000f3a1u, 0x000600cau, 0x00000009u, 0x0000194au, 0x00001949u, 0x00000220u, 0x00000260u, 0x00050080u, 0x00000009u, 0x0000194cu, 0x0000194au, 0x0000f3a1u, 0x000200feu, 0x0000194cu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000001e2u, 0x00000000u, 0x000001ddu, 0x00030037u, 0x000000dfu, 0x000001deu, 0x00030037u, 0x000000dfu, 0x000001dfu, 0x00030037u, 0x000000dfu, 0x000001e0u, 0x00030037u, 0x000000dfu, 0x000001e1u, 0x000200f8u, 0x000001e3u, 0x0004003bu, 0x000000dfu, 0x00001951u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001954u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001957u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x0000195au, 0x00000007u, 0x0004003du, 0x00000009u, 0x0000194fu, 0x000001e0u, 0x000600cau, 0x00000009u, 0x00001950u, 0x0000194fu, 0x00000220u, 0x00000260u, 0x0003003eu, 0x000001e0u, 0x00001950u, 0x0004003du, 0x00000009u, 0x00001952u, 0x000001deu, 0x0003003eu, 0x00001951u, 0x00001952u, 0x00050039u, 0x00000009u, 0x00001953u, 0x000001dbu, 0x00001951u, 0x0003003eu, 0x000001deu, 0x00001953u, 0x0004003du, 0x00000009u, 0x00001955u, 0x000001dfu, 0x0003003eu, 0x00001954u, 0x00001955u, 0x00050039u, 0x00000009u, 0x00001956u, 0x000001dbu, 0x00001954u, 0x0003003eu, 0x000001dfu, 0x00001956u, 0x0004003du, 0x00000009u, 0x00001958u, 0x000001e1u, 0x0003003eu, 0x00001957u, 0x00001958u, 0x00050039u, 0x00000009u, 0x00001959u, 0x000001dbu, 0x00001957u, 0x0003003eu, 0x000001e1u, 0x00001959u, 0x0004003du, 0x00000009u, 0x0000195bu, 0x000001deu, 0x0004003du, 0x00000009u, 0x0000195cu, 0x000001dfu, 0x00050082u, 0x00000009u, 0x0000195du, 0x0000195bu, 0x0000195cu, 0x0004003du, 0x00000009u, 0x0000195eu, 0x000001e0u, 0x00050084u, 0x00000009u, 0x0000195fu, 0x0000195du, 0x0000195eu, 0x0003003eu, 0x0000195au, 0x0000195fu, 0x00050080u, 0x00000009u, 0x00001962u, 0x0000195fu, 0x0000f3a1u, 0x0003003eu, 0x0000195au, 0x00001962u, 0x000500c3u, 0x00000009u, 0x00001965u, 0x00001962u, 0x0000f3acu, 0x00040072u, 0x00000013u, 0x00001966u, 0x00001965u, 0x0004003du, 0x00000009u, 0x00001967u, 0x000001e1u, 0x00040072u, 0x00000013u, 0x00001968u, 0x00001967u, 0x00050080u, 0x00000013u, 0x00001969u, 0x00001966u, 0x00001968u, 0x000200feu, 0x00001969u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001eau, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001e7u, 0x00030037u, 0x00000046u, 0x000001e8u, 0x00030037u, 0x00000046u, 0x000001e9u, 0x000200f8u, 0x000001ebu, 0x0004003bu, 0x00000045u, 0x00001975u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000019a2u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000196cu, 0x000001e8u, 0x000300f7u, 0x00001974u, 0x00000000u, 0x000f00fbu, 0x0000196cu, 0x00001973u, 0x00000000u, 0x0000196du, 0x00000001u, 0x0000196eu, 0x00000002u, 0x0000196fu, 0x00000004u, 0x00001970u, 0x00000007u, 0x00001971u, 0x00000006u, 0x00001972u, 0x000200f8u, 0x00001973u, 0x00050041u, 0x00000068u, 0x00001993u, 0x000001e7u, 0x00000220u, 0x0004003du, 0x00000010u, 0x00001994u, 0x00001993u, 0x0008004fu, 0x00000047u, 0x00001995u, 0x00001994u, 0x00001994u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001996u, 0x00001995u, 0x0004007cu, 0x00000044u, 0x00001997u, 0x00001996u, 0x0003003eu, 0x00001975u, 0x00001997u, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x0000196du, 0x00050041u, 0x000000e4u, 0x00001976u, 0x000001e7u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001977u, 0x00001976u, 0x0008004fu, 0x000004b6u, 0x00001978u, 0x00001977u, 0x00001977u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001979u, 0x00001978u, 0x0003003eu, 0x00001975u, 0x00001979u, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x0000196eu, 0x00050041u, 0x000000e4u, 0x0000197bu, 0x000001e7u, 0x00000239u, 0x0004003du, 0x00000013u, 0x0000197cu, 0x0000197bu, 0x0008004fu, 0x000004b6u, 0x0000197du, 0x0000197cu, 0x0000197cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x0000197eu, 0x0000197du, 0x0003003eu, 0x00001975u, 0x0000197eu, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x0000196fu, 0x00050041u, 0x000000e4u, 0x00001980u, 0x000001e7u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001981u, 0x00001980u, 0x0008004fu, 0x000004b6u, 0x00001982u, 0x00001981u, 0x00001981u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001983u, 0x00001982u, 0x0003003eu, 0x00001975u, 0x00001983u, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x00001970u, 0x00050041u, 0x00000068u, 0x00001985u, 0x000001e7u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001986u, 0x00001985u, 0x0008004fu, 0x00000047u, 0x00001987u, 0x00001986u, 0x00001986u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001988u, 0x00001987u, 0x0004007cu, 0x00000044u, 0x00001989u, 0x00001988u, 0x0003003eu, 0x00001975u, 0x00001989u, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x00001971u, 0x00050041u, 0x000001c4u, 0x0000198bu, 0x000001e7u, 0x00000260u, 0x0004003du, 0x00000012u, 0x0000198cu, 0x0000198bu, 0x00040072u, 0x00000008u, 0x0000198du, 0x0000198cu, 0x00060050u, 0x00000044u, 0x0000198eu, 0x0000198du, 0x0000198du, 0x0000198du, 0x0003003eu, 0x00001975u, 0x0000198eu, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x00001972u, 0x0003003eu, 0x00001975u, 0x00001991u, 0x000200f9u, 0x00001974u, 0x000200f8u, 0x00001974u, 0x001100f5u, 0x00000044u, 0x0000f0fbu, 0x00001997u, 0x00001973u, 0x00001979u, 0x0000196du, 0x0000197eu, 0x0000196eu, 0x00001983u, 0x0000196fu, 0x00001989u, 0x00001970u, 0x0000198eu, 0x00001971u, 0x00001991u, 0x00001972u, 0x0004003du, 0x00000008u, 0x0000199au, 0x000001e9u, 0x000300f7u, 0x000019a1u, 0x00000000u, 0x000d00fbu, 0x0000199au, 0x000019a0u, 0x00000000u, 0x0000199bu, 0x00000001u, 0x0000199cu, 0x00000002u, 0x0000199du, 0x00000004u, 0x0000199eu, 0x00000006u, 0x0000199fu, 0x000200f8u, 0x000019a0u, 0x00060041u, 0x0000007bu, 0x000019b5u, 0x000001e7u, 0x00000220u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000019b6u, 0x000019b5u, 0x00040071u, 0x00000006u, 0x000019b7u, 0x000019b6u, 0x0004007cu, 0x00000008u, 0x000019b8u, 0x000019b7u, 0x0003003eu, 0x000019a2u, 0x000019b8u, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x0000199bu, 0x00060041u, 0x000001c4u, 0x000019a3u, 0x000001e7u, 0x00000236u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019a4u, 0x000019a3u, 0x00040072u, 0x00000008u, 0x000019a5u, 0x000019a4u, 0x0003003eu, 0x000019a2u, 0x000019a5u, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x0000199cu, 0x00060041u, 0x000001c4u, 0x000019a7u, 0x000001e7u, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019a8u, 0x000019a7u, 0x00040072u, 0x00000008u, 0x000019a9u, 0x000019a8u, 0x0003003eu, 0x000019a2u, 0x000019a9u, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x0000199du, 0x00060041u, 0x000001c4u, 0x000019abu, 0x000001e7u, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019acu, 0x000019abu, 0x00040072u, 0x00000008u, 0x000019adu, 0x000019acu, 0x0003003eu, 0x000019a2u, 0x000019adu, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x0000199eu, 0x00060041u, 0x0000007bu, 0x000019afu, 0x000001e7u, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x000019b0u, 0x000019afu, 0x00040071u, 0x00000006u, 0x000019b1u, 0x000019b0u, 0x0004007cu, 0x00000008u, 0x000019b2u, 0x000019b1u, 0x0003003eu, 0x000019a2u, 0x000019b2u, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x0000199fu, 0x0003003eu, 0x000019a2u, 0x00001990u, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x000019a1u, 0x000f00f5u, 0x00000008u, 0x0000f0fcu, 0x000019b8u, 0x000019a0u, 0x000019a5u, 0x0000199bu, 0x000019a9u, 0x0000199cu, 0x000019adu, 0x0000199du, 0x000019b2u, 0x0000199eu, 0x00001990u, 0x0000199fu, 0x00050051u, 0x00000008u, 0x000019bdu, 0x0000f0fbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000019beu, 0x0000f0fbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000019bfu, 0x0000f0fbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000019c0u, 0x000019bdu, 0x000019beu, 0x000019bfu, 0x0000f0fcu, 0x000200feu, 0x000019c0u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001efu, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001ecu, 0x00030037u, 0x00000046u, 0x000001edu, 0x00030037u, 0x00000046u, 0x000001eeu, 0x000200f8u, 0x000001f0u, 0x0004003bu, 0x00000045u, 0x000019cbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000019fcu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000019c3u, 0x000001edu, 0x000300f7u, 0x000019cau, 0x00000000u, 0x000d00fbu, 0x000019c3u, 0x000019c9u, 0x00000000u, 0x000019c4u, 0x00000001u, 0x000019c5u, 0x00000002u, 0x000019c6u, 0x00000004u, 0x000019c7u, 0x00000007u, 0x000019c8u, 0x000200f8u, 0x000019c9u, 0x00050041u, 0x00000068u, 0x000019edu, 0x000001ecu, 0x0000022au, 0x0004003du, 0x00000010u, 0x000019eeu, 0x000019edu, 0x0008004fu, 0x00000047u, 0x000019efu, 0x000019eeu, 0x000019eeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000019f0u, 0x000019efu, 0x0004007cu, 0x00000044u, 0x000019f1u, 0x000019f0u, 0x0003003eu, 0x000019cbu, 0x000019f1u, 0x000200f9u, 0x000019cau, 0x000200f8u, 0x000019c4u, 0x00050041u, 0x000000e4u, 0x000019ccu, 0x000001ecu, 0x00000236u, 0x0004003du, 0x00000013u, 0x000019cdu, 0x000019ccu, 0x0008004fu, 0x000004b6u, 0x000019ceu, 0x000019cdu, 0x000019cdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000019cfu, 0x000019ceu, 0x0003003eu, 0x000019cbu, 0x000019cfu, 0x000200f9u, 0x000019cau, 0x000200f8u, 0x000019c5u, 0x00050041u, 0x000000e4u, 0x000019d1u, 0x000001ecu, 0x00000239u, 0x0004003du, 0x00000013u, 0x000019d2u, 0x000019d1u, 0x0008004fu, 0x000004b6u, 0x000019d3u, 0x000019d2u, 0x000019d2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000019d4u, 0x000019d3u, 0x0003003eu, 0x000019cbu, 0x000019d4u, 0x000200f9u, 0x000019cau, 0x000200f8u, 0x000019c6u, 0x00050041u, 0x000000e4u, 0x000019d6u, 0x000001ecu, 0x0000023cu, 0x0004003du, 0x00000013u, 0x000019d7u, 0x000019d6u, 0x0008004fu, 0x000004b6u, 0x000019d8u, 0x000019d7u, 0x000019d7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x000019d9u, 0x000019d8u, 0x0003003eu, 0x000019cbu, 0x000019d9u, 0x000200f9u, 0x000019cau, 0x000200f8u, 0x000019c7u, 0x00050041u, 0x00000068u, 0x000019dbu, 0x000001ecu, 0x00000233u, 0x0004003du, 0x00000010u, 0x000019dcu, 0x000019dbu, 0x0008004fu, 0x00000047u, 0x000019ddu, 0x000019dcu, 0x000019dcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x000019deu, 0x000019ddu, 0x0004007cu, 0x00000044u, 0x000019dfu, 0x000019deu, 0x0003003eu, 0x000019cbu, 0x000019dfu, 0x000200f9u, 0x000019cau, 0x000200f8u, 0x000019c8u, 0x00060041u, 0x0000007bu, 0x000019e1u, 0x000001ecu, 0x0000022au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x000019e2u, 0x000019e1u, 0x00040071u, 0x00000006u, 0x000019e3u, 0x000019e2u, 0x0004007cu, 0x00000008u, 0x000019e4u, 0x000019e3u, 0x000500c4u, 0x00000008u, 0x000019e5u, 0x000019e4u, 0x0000025du, 0x00060041u, 0x0000007bu, 0x000019e6u, 0x000001ecu, 0x0000022au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x000019e7u, 0x000019e6u, 0x00040071u, 0x00000006u, 0x000019e8u, 0x000019e7u, 0x0004007cu, 0x00000008u, 0x000019e9u, 0x000019e8u, 0x000500c5u, 0x00000008u, 0x000019eau, 0x000019e5u, 0x000019e9u, 0x00060050u, 0x00000044u, 0x000019ebu, 0x000019eau, 0x000019eau, 0x000019eau, 0x0003003eu, 0x000019cbu, 0x000019ebu, 0x000200f9u, 0x000019cau, 0x000200f8u, 0x000019cau, 0x000f00f5u, 0x00000044u, 0x0000f0feu, 0x000019f1u, 0x000019c9u, 0x000019cfu, 0x000019c4u, 0x000019d4u, 0x000019c5u, 0x000019d9u, 0x000019c6u, 0x000019dfu, 0x000019c7u, 0x000019ebu, 0x000019c8u, 0x0004003du, 0x00000008u, 0x000019f4u, 0x000001eeu, 0x000300f7u, 0x000019fbu, 0x00000000u, 0x000d00fbu, 0x000019f4u, 0x000019fau, 0x00000000u, 0x000019f5u, 0x00000001u, 0x000019f6u, 0x00000002u, 0x000019f7u, 0x00000004u, 0x000019f8u, 0x00000006u, 0x000019f9u, 0x000200f8u, 0x000019fau, 0x00060041u, 0x0000007bu, 0x00001a0fu, 0x000001ecu, 0x0000022au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a10u, 0x00001a0fu, 0x00040071u, 0x00000006u, 0x00001a11u, 0x00001a10u, 0x0004007cu, 0x00000008u, 0x00001a12u, 0x00001a11u, 0x0003003eu, 0x000019fcu, 0x00001a12u, 0x000200f9u, 0x000019fbu, 0x000200f8u, 0x000019f5u, 0x00060041u, 0x000001c4u, 0x000019fdu, 0x000001ecu, 0x00000236u, 0x00000464u, 0x0004003du, 0x00000012u, 0x000019feu, 0x000019fdu, 0x00040072u, 0x00000008u, 0x000019ffu, 0x000019feu, 0x0003003eu, 0x000019fcu, 0x000019ffu, 0x000200f9u, 0x000019fbu, 0x000200f8u, 0x000019f6u, 0x00060041u, 0x000001c4u, 0x00001a01u, 0x000001ecu, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001a02u, 0x00001a01u, 0x00040072u, 0x00000008u, 0x00001a03u, 0x00001a02u, 0x0003003eu, 0x000019fcu, 0x00001a03u, 0x000200f9u, 0x000019fbu, 0x000200f8u, 0x000019f7u, 0x00060041u, 0x000001c4u, 0x00001a05u, 0x000001ecu, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001a06u, 0x00001a05u, 0x00040072u, 0x00000008u, 0x00001a07u, 0x00001a06u, 0x0003003eu, 0x000019fcu, 0x00001a07u, 0x000200f9u, 0x000019fbu, 0x000200f8u, 0x000019f8u, 0x00060041u, 0x0000007bu, 0x00001a09u, 0x000001ecu, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a0au, 0x00001a09u, 0x00040071u, 0x00000006u, 0x00001a0bu, 0x00001a0au, 0x0004007cu, 0x00000008u, 0x00001a0cu, 0x00001a0bu, 0x0003003eu, 0x000019fcu, 0x00001a0cu, 0x000200f9u, 0x000019fbu, 0x000200f8u, 0x000019f9u, 0x0003003eu, 0x000019fcu, 0x00001990u, 0x000200f9u, 0x000019fbu, 0x000200f8u, 0x000019fbu, 0x000f00f5u, 0x00000008u, 0x0000f0ffu, 0x00001a12u, 0x000019fau, 0x000019ffu, 0x000019f5u, 0x00001a03u, 0x000019f6u, 0x00001a07u, 0x000019f7u, 0x00001a0cu, 0x000019f8u, 0x00001990u, 0x000019f9u, 0x00050051u, 0x00000008u, 0x00001a17u, 0x0000f0feu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a18u, 0x0000f0feu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a19u, 0x0000f0feu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a1au, 0x00001a17u, 0x00001a18u, 0x00001a19u, 0x0000f0ffu, 0x000200feu, 0x00001a1au, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001f4u, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001f1u, 0x00030037u, 0x00000046u, 0x000001f2u, 0x00030037u, 0x00000046u, 0x000001f3u, 0x000200f8u, 0x000001f5u, 0x0004003bu, 0x00000045u, 0x00001a2au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001a74u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001a1du, 0x000001f2u, 0x000300f7u, 0x00001a29u, 0x00000000u, 0x001700fbu, 0x00001a1du, 0x00001a28u, 0x00000000u, 0x00001a1eu, 0x00000007u, 0x00001a1fu, 0x00000001u, 0x00001a20u, 0x00000002u, 0x00001a21u, 0x00000004u, 0x00001a22u, 0x00000008u, 0x00001a23u, 0x00000009u, 0x00001a24u, 0x0000000bu, 0x00001a25u, 0x0000000du, 0x00001a26u, 0x0000000fu, 0x00001a27u, 0x000200f8u, 0x00001a28u, 0x00050041u, 0x00000068u, 0x00001a66u, 0x000001f1u, 0x0000022du, 0x0004003du, 0x00000010u, 0x00001a67u, 0x00001a66u, 0x0008004fu, 0x00000047u, 0x00001a68u, 0x00001a67u, 0x00001a67u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001a69u, 0x00001a68u, 0x0004007cu, 0x00000044u, 0x00001a6au, 0x00001a69u, 0x0003003eu, 0x00001a2au, 0x00001a6au, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a1eu, 0x00050041u, 0x000000e4u, 0x00001a2bu, 0x000001f1u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001a2cu, 0x00001a2bu, 0x0008004fu, 0x000004b6u, 0x00001a2du, 0x00001a2cu, 0x00001a2cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a2eu, 0x00001a2du, 0x0003003eu, 0x00001a2au, 0x00001a2eu, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a1fu, 0x00050041u, 0x000000e4u, 0x00001a30u, 0x000001f1u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001a31u, 0x00001a30u, 0x0008004fu, 0x000004b6u, 0x00001a32u, 0x00001a31u, 0x00001a31u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00001a33u, 0x00001a32u, 0x0003003eu, 0x00001a2au, 0x00001a33u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a20u, 0x00050041u, 0x000000e4u, 0x00001a35u, 0x000001f1u, 0x00000239u, 0x0004003du, 0x00000013u, 0x00001a36u, 0x00001a35u, 0x0008004fu, 0x000004b6u, 0x00001a37u, 0x00001a36u, 0x00001a36u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a38u, 0x00001a37u, 0x0003003eu, 0x00001a2au, 0x00001a38u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a21u, 0x00050041u, 0x000000e4u, 0x00001a3au, 0x000001f1u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001a3bu, 0x00001a3au, 0x0008004fu, 0x000004b6u, 0x00001a3cu, 0x00001a3bu, 0x00001a3bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001a3du, 0x00001a3cu, 0x0003003eu, 0x00001a2au, 0x00001a3du, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a22u, 0x00050041u, 0x00000068u, 0x00001a3fu, 0x000001f1u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001a40u, 0x00001a3fu, 0x0008004fu, 0x00000047u, 0x00001a41u, 0x00001a40u, 0x00001a40u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001a42u, 0x00001a41u, 0x0004007cu, 0x00000044u, 0x00001a43u, 0x00001a42u, 0x0003003eu, 0x00001a2au, 0x00001a43u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a23u, 0x00050041u, 0x000000e4u, 0x00001a45u, 0x000001f1u, 0x00000239u, 0x0004003du, 0x00000013u, 0x00001a46u, 0x00001a45u, 0x0008004fu, 0x000004b6u, 0x00001a47u, 0x00001a46u, 0x00001a46u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00001a48u, 0x00001a47u, 0x0003003eu, 0x00001a2au, 0x00001a48u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a24u, 0x00050041u, 0x000000e4u, 0x00001a4au, 0x000001f1u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001a4bu, 0x00001a4au, 0x0008004fu, 0x000004b6u, 0x00001a4cu, 0x00001a4bu, 0x00001a4bu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x00000044u, 0x00001a4du, 0x00001a4cu, 0x0003003eu, 0x00001a2au, 0x00001a4du, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a25u, 0x00050041u, 0x00000068u, 0x00001a4fu, 0x000001f1u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001a50u, 0x00001a4fu, 0x0008004fu, 0x00000047u, 0x00001a51u, 0x00001a50u, 0x00001a50u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000030cu, 0x00001a52u, 0x00001a51u, 0x0004007cu, 0x00000044u, 0x00001a53u, 0x00001a52u, 0x0003003eu, 0x00001a2au, 0x00001a53u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a26u, 0x00050041u, 0x000001c4u, 0x00001a55u, 0x000001f1u, 0x0000025du, 0x0004003du, 0x00000012u, 0x00001a56u, 0x00001a55u, 0x00040072u, 0x00000008u, 0x00001a57u, 0x00001a56u, 0x00060050u, 0x00000044u, 0x00001a58u, 0x00001a57u, 0x00001a57u, 0x00001a57u, 0x0003003eu, 0x00001a2au, 0x00001a58u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a27u, 0x00060041u, 0x0000007bu, 0x00001a5au, 0x000001f1u, 0x0000022du, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001a5bu, 0x00001a5au, 0x00040071u, 0x00000006u, 0x00001a5cu, 0x00001a5bu, 0x0004007cu, 0x00000008u, 0x00001a5du, 0x00001a5cu, 0x000500c4u, 0x00000008u, 0x00001a5eu, 0x00001a5du, 0x0000025du, 0x00060041u, 0x0000007bu, 0x00001a5fu, 0x000001f1u, 0x0000022du, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001a60u, 0x00001a5fu, 0x00040071u, 0x00000006u, 0x00001a61u, 0x00001a60u, 0x0004007cu, 0x00000008u, 0x00001a62u, 0x00001a61u, 0x000500c5u, 0x00000008u, 0x00001a63u, 0x00001a5eu, 0x00001a62u, 0x00060050u, 0x00000044u, 0x00001a64u, 0x00001a63u, 0x00001a63u, 0x00001a63u, 0x0003003eu, 0x00001a2au, 0x00001a64u, 0x000200f9u, 0x00001a29u, 0x000200f8u, 0x00001a29u, 0x001900f5u, 0x00000044u, 0x0000f101u, 0x00001a6au, 0x00001a28u, 0x00001a2eu, 0x00001a1eu, 0x00001a33u, 0x00001a1fu, 0x00001a38u, 0x00001a20u, 0x00001a3du, 0x00001a21u, 0x00001a43u, 0x00001a22u, 0x00001a48u, 0x00001a23u, 0x00001a4du, 0x00001a24u, 0x00001a53u, 0x00001a25u, 0x00001a58u, 0x00001a26u, 0x00001a64u, 0x00001a27u, 0x0004003du, 0x00000008u, 0x00001a6du, 0x000001f3u, 0x000300f7u, 0x00001a73u, 0x00000000u, 0x000b00fbu, 0x00001a6du, 0x00001a72u, 0x00000000u, 0x00001a6eu, 0x00000001u, 0x00001a6fu, 0x00000002u, 0x00001a70u, 0x00000004u, 0x00001a71u, 0x000200f8u, 0x00001a72u, 0x00060041u, 0x0000007bu, 0x00001a86u, 0x000001f1u, 0x0000022du, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a87u, 0x00001a86u, 0x00040071u, 0x00000006u, 0x00001a88u, 0x00001a87u, 0x0004007cu, 0x00000008u, 0x00001a89u, 0x00001a88u, 0x0003003eu, 0x00001a74u, 0x00001a89u, 0x000200f9u, 0x00001a73u, 0x000200f8u, 0x00001a6eu, 0x00050041u, 0x000001c4u, 0x00001a75u, 0x000001f1u, 0x0000025du, 0x0004003du, 0x00000012u, 0x00001a76u, 0x00001a75u, 0x00040072u, 0x00000008u, 0x00001a77u, 0x00001a76u, 0x0003003eu, 0x00001a74u, 0x00001a77u, 0x000200f9u, 0x00001a73u, 0x000200f8u, 0x00001a6fu, 0x00060041u, 0x000001c4u, 0x00001a79u, 0x000001f1u, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001a7au, 0x00001a79u, 0x00040072u, 0x00000008u, 0x00001a7bu, 0x00001a7au, 0x0003003eu, 0x00001a74u, 0x00001a7bu, 0x000200f9u, 0x00001a73u, 0x000200f8u, 0x00001a70u, 0x00060041u, 0x000001c4u, 0x00001a7du, 0x000001f1u, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001a7eu, 0x00001a7du, 0x00040072u, 0x00000008u, 0x00001a7fu, 0x00001a7eu, 0x0003003eu, 0x00001a74u, 0x00001a7fu, 0x000200f9u, 0x00001a73u, 0x000200f8u, 0x00001a71u, 0x00060041u, 0x0000007bu, 0x00001a81u, 0x000001f1u, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001a82u, 0x00001a81u, 0x00040071u, 0x00000006u, 0x00001a83u, 0x00001a82u, 0x0004007cu, 0x00000008u, 0x00001a84u, 0x00001a83u, 0x0003003eu, 0x00001a74u, 0x00001a84u, 0x000200f9u, 0x00001a73u, 0x000200f8u, 0x00001a73u, 0x000d00f5u, 0x00000008u, 0x0000f102u, 0x00001a89u, 0x00001a72u, 0x00001a77u, 0x00001a6eu, 0x00001a7bu, 0x00001a6fu, 0x00001a7fu, 0x00001a70u, 0x00001a84u, 0x00001a71u, 0x00050051u, 0x00000008u, 0x00001a8eu, 0x0000f101u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001a8fu, 0x0000f101u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001a90u, 0x0000f101u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001a91u, 0x00001a8eu, 0x00001a8fu, 0x00001a90u, 0x0000f102u, 0x000200feu, 0x00001a91u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000001f9u, 0x00000000u, 0x000001e6u, 0x00030037u, 0x000001e5u, 0x000001f6u, 0x00030037u, 0x00000046u, 0x000001f7u, 0x00030037u, 0x00000046u, 0x000001f8u, 0x000200f8u, 0x000001fau, 0x0004003bu, 0x00000045u, 0x00001a9cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ac2u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001a94u, 0x000001f7u, 0x000300f7u, 0x00001a9bu, 0x00000000u, 0x000d00fbu, 0x00001a94u, 0x00001a9au, 0x00000000u, 0x00001a95u, 0x00000001u, 0x00001a96u, 0x00000002u, 0x00001a97u, 0x00000004u, 0x00001a98u, 0x00000006u, 0x00001a99u, 0x000200f8u, 0x00001a9au, 0x00050041u, 0x00000068u, 0x00001ab3u, 0x000001f6u, 0x00000230u, 0x0004003du, 0x00000010u, 0x00001ab4u, 0x00001ab3u, 0x0008004fu, 0x00000047u, 0x00001ab5u, 0x00001ab4u, 0x00001ab4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001ab6u, 0x00001ab5u, 0x0004007cu, 0x00000044u, 0x00001ab7u, 0x00001ab6u, 0x0003003eu, 0x00001a9cu, 0x00001ab7u, 0x000200f9u, 0x00001a9bu, 0x000200f8u, 0x00001a95u, 0x00050041u, 0x000000e4u, 0x00001a9du, 0x000001f6u, 0x00000236u, 0x0004003du, 0x00000013u, 0x00001a9eu, 0x00001a9du, 0x0008004fu, 0x000004b6u, 0x00001a9fu, 0x00001a9eu, 0x00001a9eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001aa0u, 0x00001a9fu, 0x0003003eu, 0x00001a9cu, 0x00001aa0u, 0x000200f9u, 0x00001a9bu, 0x000200f8u, 0x00001a96u, 0x00050041u, 0x000000e4u, 0x00001aa2u, 0x000001f6u, 0x00000239u, 0x0004003du, 0x00000013u, 0x00001aa3u, 0x00001aa2u, 0x0008004fu, 0x000004b6u, 0x00001aa4u, 0x00001aa3u, 0x00001aa3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001aa5u, 0x00001aa4u, 0x0003003eu, 0x00001a9cu, 0x00001aa5u, 0x000200f9u, 0x00001a9bu, 0x000200f8u, 0x00001a97u, 0x00050041u, 0x000000e4u, 0x00001aa7u, 0x000001f6u, 0x0000023cu, 0x0004003du, 0x00000013u, 0x00001aa8u, 0x00001aa7u, 0x0008004fu, 0x000004b6u, 0x00001aa9u, 0x00001aa8u, 0x00001aa8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x00000044u, 0x00001aaau, 0x00001aa9u, 0x0003003eu, 0x00001a9cu, 0x00001aaau, 0x000200f9u, 0x00001a9bu, 0x000200f8u, 0x00001a98u, 0x00050041u, 0x00000068u, 0x00001aacu, 0x000001f6u, 0x00000233u, 0x0004003du, 0x00000010u, 0x00001aadu, 0x00001aacu, 0x0008004fu, 0x00000047u, 0x00001aaeu, 0x00001aadu, 0x00001aadu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000030cu, 0x00001aafu, 0x00001aaeu, 0x0004007cu, 0x00000044u, 0x00001ab0u, 0x00001aafu, 0x0003003eu, 0x00001a9cu, 0x00001ab0u, 0x000200f9u, 0x00001a9bu, 0x000200f8u, 0x00001a99u, 0x0003003eu, 0x00001a9cu, 0x00001991u, 0x000200f9u, 0x00001a9bu, 0x000200f8u, 0x00001a9bu, 0x000f00f5u, 0x00000044u, 0x0000f104u, 0x00001ab7u, 0x00001a9au, 0x00001aa0u, 0x00001a95u, 0x00001aa5u, 0x00001a96u, 0x00001aaau, 0x00001a97u, 0x00001ab0u, 0x00001a98u, 0x00001991u, 0x00001a99u, 0x0004003du, 0x00000008u, 0x00001abau, 0x000001f8u, 0x000300f7u, 0x00001ac1u, 0x00000000u, 0x000d00fbu, 0x00001abau, 0x00001ac0u, 0x00000000u, 0x00001abbu, 0x00000001u, 0x00001abcu, 0x00000002u, 0x00001abdu, 0x00000004u, 0x00001abeu, 0x00000006u, 0x00001abfu, 0x000200f8u, 0x00001ac0u, 0x00060041u, 0x0000007bu, 0x00001ad5u, 0x000001f6u, 0x00000230u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001ad6u, 0x00001ad5u, 0x00040071u, 0x00000006u, 0x00001ad7u, 0x00001ad6u, 0x0004007cu, 0x00000008u, 0x00001ad8u, 0x00001ad7u, 0x0003003eu, 0x00001ac2u, 0x00001ad8u, 0x000200f9u, 0x00001ac1u, 0x000200f8u, 0x00001abbu, 0x00060041u, 0x000001c4u, 0x00001ac3u, 0x000001f6u, 0x00000236u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001ac4u, 0x00001ac3u, 0x00040072u, 0x00000008u, 0x00001ac5u, 0x00001ac4u, 0x0003003eu, 0x00001ac2u, 0x00001ac5u, 0x000200f9u, 0x00001ac1u, 0x000200f8u, 0x00001abcu, 0x00060041u, 0x000001c4u, 0x00001ac7u, 0x000001f6u, 0x00000239u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001ac8u, 0x00001ac7u, 0x00040072u, 0x00000008u, 0x00001ac9u, 0x00001ac8u, 0x0003003eu, 0x00001ac2u, 0x00001ac9u, 0x000200f9u, 0x00001ac1u, 0x000200f8u, 0x00001abdu, 0x00060041u, 0x000001c4u, 0x00001acbu, 0x000001f6u, 0x0000023cu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001accu, 0x00001acbu, 0x00040072u, 0x00000008u, 0x00001acdu, 0x00001accu, 0x0003003eu, 0x00001ac2u, 0x00001acdu, 0x000200f9u, 0x00001ac1u, 0x000200f8u, 0x00001abeu, 0x00060041u, 0x0000007bu, 0x00001acfu, 0x000001f6u, 0x00000233u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001ad0u, 0x00001acfu, 0x00040071u, 0x00000006u, 0x00001ad1u, 0x00001ad0u, 0x0004007cu, 0x00000008u, 0x00001ad2u, 0x00001ad1u, 0x0003003eu, 0x00001ac2u, 0x00001ad2u, 0x000200f9u, 0x00001ac1u, 0x000200f8u, 0x00001abfu, 0x0003003eu, 0x00001ac2u, 0x00001990u, 0x000200f9u, 0x00001ac1u, 0x000200f8u, 0x00001ac1u, 0x000f00f5u, 0x00000008u, 0x0000f105u, 0x00001ad8u, 0x00001ac0u, 0x00001ac5u, 0x00001abbu, 0x00001ac9u, 0x00001abcu, 0x00001acdu, 0x00001abdu, 0x00001ad2u, 0x00001abeu, 0x00001990u, 0x00001abfu, 0x00050051u, 0x00000008u, 0x00001addu, 0x0000f104u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001adeu, 0x0000f104u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001adfu, 0x0000f104u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001ae0u, 0x00001addu, 0x00001adeu, 0x00001adfu, 0x0000f105u, 0x000200feu, 0x00001ae0u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000205u, 0x00000000u, 0x000001fbu, 0x00030037u, 0x000001e5u, 0x000001fcu, 0x00030037u, 0x00000068u, 0x000001fdu, 0x00030037u, 0x00000068u, 0x000001feu, 0x00030037u, 0x00000046u, 0x000001ffu, 0x00030037u, 0x00000046u, 0x00000200u, 0x00030037u, 0x0000006au, 0x00000201u, 0x00030037u, 0x0000006au, 0x00000202u, 0x00030037u, 0x0000006au, 0x00000203u, 0x00030037u, 0x0000007bu, 0x00000204u, 0x000200f8u, 0x00000206u, 0x0004003bu, 0x000000dfu, 0x00001ae3u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001aecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001aeeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001aefu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001af1u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001afau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001afcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001afdu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001affu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b08u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b0au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b0bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b0du, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b16u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b18u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b19u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001b1bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b1cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b1eu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b20u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b22u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b28u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b2cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b2eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b3au, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00001ae4u, 0x000001fdu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001ae5u, 0x00001ae4u, 0x00040071u, 0x00000006u, 0x00001ae6u, 0x00001ae5u, 0x0004007cu, 0x00000008u, 0x00001ae7u, 0x00001ae6u, 0x00050041u, 0x0000007bu, 0x00001ae8u, 0x000001feu, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001ae9u, 0x00001ae8u, 0x00040071u, 0x00000006u, 0x00001aeau, 0x00001ae9u, 0x0004007cu, 0x00000008u, 0x00001aebu, 0x00001aeau, 0x0004003du, 0x000001e4u, 0x00001aedu, 0x000001fcu, 0x0003003eu, 0x00001aecu, 0x00001aedu, 0x0003003eu, 0x00001aeeu, 0x00001ae7u, 0x0003003eu, 0x00001aefu, 0x00001aebu, 0x00070039u, 0x00000009u, 0x00001af0u, 0x000001eau, 0x00001aecu, 0x00001aeeu, 0x00001aefu, 0x0003003eu, 0x00001ae3u, 0x00001af0u, 0x00050041u, 0x0000007bu, 0x00001af2u, 0x000001fdu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001af3u, 0x00001af2u, 0x00040071u, 0x00000006u, 0x00001af4u, 0x00001af3u, 0x0004007cu, 0x00000008u, 0x00001af5u, 0x00001af4u, 0x00050041u, 0x0000007bu, 0x00001af6u, 0x000001feu, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001af7u, 0x00001af6u, 0x00040071u, 0x00000006u, 0x00001af8u, 0x00001af7u, 0x0004007cu, 0x00000008u, 0x00001af9u, 0x00001af8u, 0x0004003du, 0x000001e4u, 0x00001afbu, 0x000001fcu, 0x0003003eu, 0x00001afau, 0x00001afbu, 0x0003003eu, 0x00001afcu, 0x00001af5u, 0x0003003eu, 0x00001afdu, 0x00001af9u, 0x00070039u, 0x00000009u, 0x00001afeu, 0x000001efu, 0x00001afau, 0x00001afcu, 0x00001afdu, 0x0003003eu, 0x00001af1u, 0x00001afeu, 0x00050041u, 0x0000007bu, 0x00001b00u, 0x000001fdu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001b01u, 0x00001b00u, 0x00040071u, 0x00000006u, 0x00001b02u, 0x00001b01u, 0x0004007cu, 0x00000008u, 0x00001b03u, 0x00001b02u, 0x00050041u, 0x0000007bu, 0x00001b04u, 0x000001feu, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001b05u, 0x00001b04u, 0x00040071u, 0x00000006u, 0x00001b06u, 0x00001b05u, 0x0004007cu, 0x00000008u, 0x00001b07u, 0x00001b06u, 0x0004003du, 0x000001e4u, 0x00001b09u, 0x000001fcu, 0x0003003eu, 0x00001b08u, 0x00001b09u, 0x0003003eu, 0x00001b0au, 0x00001b03u, 0x0003003eu, 0x00001b0bu, 0x00001b07u, 0x00070039u, 0x00000009u, 0x00001b0cu, 0x000001f4u, 0x00001b08u, 0x00001b0au, 0x00001b0bu, 0x0003003eu, 0x00001affu, 0x00001b0cu, 0x00050041u, 0x0000007bu, 0x00001b0eu, 0x000001fdu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b0fu, 0x00001b0eu, 0x00040071u, 0x00000006u, 0x00001b10u, 0x00001b0fu, 0x0004007cu, 0x00000008u, 0x00001b11u, 0x00001b10u, 0x00050041u, 0x0000007bu, 0x00001b12u, 0x000001feu, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b13u, 0x00001b12u, 0x00040071u, 0x00000006u, 0x00001b14u, 0x00001b13u, 0x0004007cu, 0x00000008u, 0x00001b15u, 0x00001b14u, 0x0004003du, 0x000001e4u, 0x00001b17u, 0x000001fcu, 0x0003003eu, 0x00001b16u, 0x00001b17u, 0x0003003eu, 0x00001b18u, 0x00001b11u, 0x0003003eu, 0x00001b19u, 0x00001b15u, 0x00070039u, 0x00000009u, 0x00001b1au, 0x000001f9u, 0x00001b16u, 0x00001b18u, 0x00001b19u, 0x0003003eu, 0x00001b0du, 0x00001b1au, 0x0003003eu, 0x00001b1cu, 0x00001af0u, 0x0003003eu, 0x00001b1eu, 0x00001afeu, 0x0003003eu, 0x00001b20u, 0x00001b0cu, 0x0003003eu, 0x00001b22u, 0x00001b1au, 0x00080039u, 0x00000013u, 0x00001b24u, 0x000001e2u, 0x00001b1cu, 0x00001b1eu, 0x00001b20u, 0x00001b22u, 0x0003003eu, 0x00001b1bu, 0x00001b24u, 0x0004003du, 0x00000069u, 0x00001b25u, 0x00000203u, 0x000300f7u, 0x00001b27u, 0x00000000u, 0x000400fau, 0x00001b25u, 0x00001b26u, 0x00001b4cu, 0x000200f8u, 0x00001b26u, 0x00050041u, 0x000001c4u, 0x00001b29u, 0x00001b1bu, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001b2au, 0x00001b29u, 0x00040072u, 0x00000008u, 0x00001b2bu, 0x00001b2au, 0x0003003eu, 0x00001b2cu, 0x00001b2bu, 0x00050039u, 0x00000008u, 0x00001b2du, 0x000000eau, 0x00001b2cu, 0x0003003eu, 0x00001b28u, 0x00001b2du, 0x00050080u, 0x00000008u, 0x00001b31u, 0x00001b2du, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00001b32u, 0x00001b31u, 0x0000025du, 0x00050080u, 0x00000008u, 0x00001b33u, 0x00001b2du, 0x00001b32u, 0x0003003eu, 0x00001b2eu, 0x00001b33u, 0x0004003du, 0x00000069u, 0x00001b34u, 0x00000202u, 0x000300f7u, 0x00001b36u, 0x00000000u, 0x000400fau, 0x00001b34u, 0x00001b35u, 0x00001b44u, 0x000200f8u, 0x00001b35u, 0x0004003du, 0x00000069u, 0x00001b37u, 0x00000201u, 0x000300f7u, 0x00001b39u, 0x00000000u, 0x000400fau, 0x00001b37u, 0x00001b38u, 0x00001b40u, 0x000200f8u, 0x00001b38u, 0x0004003du, 0x00000008u, 0x00001b3cu, 0x00000200u, 0x00050084u, 0x00000008u, 0x00001b3du, 0x00001b33u, 0x00001b3cu, 0x00050080u, 0x00000008u, 0x00001b3eu, 0x00001b3du, 0x00000233u, 0x000500c3u, 0x00000008u, 0x00001b3fu, 0x00001b3eu, 0x00000230u, 0x0003003eu, 0x00001b3au, 0x00001b3fu, 0x000200f9u, 0x00001b39u, 0x000200f8u, 0x00001b40u, 0x0004003du, 0x00000008u, 0x00001b41u, 0x00000200u, 0x000500c4u, 0x00000008u, 0x00001b42u, 0x00001b41u, 0x00000236u, 0x0003003eu, 0x00001b3au, 0x00001b42u, 0x000200f9u, 0x00001b39u, 0x000200f8u, 0x00001b39u, 0x000700f5u, 0x00000008u, 0x0000f106u, 0x00001b3fu, 0x00001b38u, 0x00001b42u, 0x00001b40u, 0x0003003eu, 0x00001b2eu, 0x0000f106u, 0x000200f9u, 0x00001b36u, 0x000200f8u, 0x00001b44u, 0x0004003du, 0x00000008u, 0x00001b45u, 0x000001ffu, 0x00050080u, 0x00000008u, 0x00001b47u, 0x00001b33u, 0x00001b45u, 0x0003003eu, 0x00001b2eu, 0x00001b47u, 0x000200f9u, 0x00001b36u, 0x000200f8u, 0x00001b36u, 0x000700f5u, 0x00000008u, 0x0000f107u, 0x0000f106u, 0x00001b39u, 0x00001b47u, 0x00001b44u, 0x0008000cu, 0x00000008u, 0x00001b49u, 0x00000001u, 0x0000002du, 0x0000f107u, 0x00000220u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x00001b4au, 0x00001b49u, 0x0004007cu, 0x0000000fu, 0x00001b4bu, 0x00001b4au, 0x0003003eu, 0x00000204u, 0x00001b4bu, 0x000200f9u, 0x00001b27u, 0x000200f8u, 0x00001b4cu, 0x0003003eu, 0x00000204u, 0x00000388u, 0x000200f9u, 0x00001b27u, 0x000200f8u, 0x00001b27u, 0x0004003du, 0x00000013u, 0x00001b4du, 0x00001b1bu, 0x000200feu, 0x00001b4du, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000020fu, 0x00000000u, 0x00000207u, 0x00030037u, 0x000001e5u, 0x00000208u, 0x00030037u, 0x00000068u, 0x00000209u, 0x00030037u, 0x00000068u, 0x0000020au, 0x00030037u, 0x00000046u, 0x0000020bu, 0x00030037u, 0x00000046u, 0x0000020cu, 0x00030037u, 0x0000006au, 0x0000020du, 0x00030037u, 0x0000006au, 0x0000020eu, 0x000200f8u, 0x00000210u, 0x0004003bu, 0x000000dfu, 0x00001b50u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b59u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b5bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b5cu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b5eu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b67u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b69u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b6au, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b6cu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b75u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b77u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b78u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b7au, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001b83u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b85u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b86u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001b88u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b89u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b8bu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b8du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b8fu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001b94u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001b96u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ba3u, 0x00000007u, 0x00050041u, 0x0000007bu, 0x00001b51u, 0x00000209u, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001b52u, 0x00001b51u, 0x00040071u, 0x00000006u, 0x00001b53u, 0x00001b52u, 0x0004007cu, 0x00000008u, 0x00001b54u, 0x00001b53u, 0x00050041u, 0x0000007bu, 0x00001b55u, 0x0000020au, 0x0000032du, 0x0004003du, 0x0000000fu, 0x00001b56u, 0x00001b55u, 0x00040071u, 0x00000006u, 0x00001b57u, 0x00001b56u, 0x0004007cu, 0x00000008u, 0x00001b58u, 0x00001b57u, 0x0004003du, 0x000001e4u, 0x00001b5au, 0x00000208u, 0x0003003eu, 0x00001b59u, 0x00001b5au, 0x0003003eu, 0x00001b5bu, 0x00001b54u, 0x0003003eu, 0x00001b5cu, 0x00001b58u, 0x00070039u, 0x00000009u, 0x00001b5du, 0x000001eau, 0x00001b59u, 0x00001b5bu, 0x00001b5cu, 0x0003003eu, 0x00001b50u, 0x00001b5du, 0x00050041u, 0x0000007bu, 0x00001b5fu, 0x00000209u, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001b60u, 0x00001b5fu, 0x00040071u, 0x00000006u, 0x00001b61u, 0x00001b60u, 0x0004007cu, 0x00000008u, 0x00001b62u, 0x00001b61u, 0x00050041u, 0x0000007bu, 0x00001b63u, 0x0000020au, 0x0000045cu, 0x0004003du, 0x0000000fu, 0x00001b64u, 0x00001b63u, 0x00040071u, 0x00000006u, 0x00001b65u, 0x00001b64u, 0x0004007cu, 0x00000008u, 0x00001b66u, 0x00001b65u, 0x0004003du, 0x000001e4u, 0x00001b68u, 0x00000208u, 0x0003003eu, 0x00001b67u, 0x00001b68u, 0x0003003eu, 0x00001b69u, 0x00001b62u, 0x0003003eu, 0x00001b6au, 0x00001b66u, 0x00070039u, 0x00000009u, 0x00001b6bu, 0x000001efu, 0x00001b67u, 0x00001b69u, 0x00001b6au, 0x0003003eu, 0x00001b5eu, 0x00001b6bu, 0x00050041u, 0x0000007bu, 0x00001b6du, 0x00000209u, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001b6eu, 0x00001b6du, 0x00040071u, 0x00000006u, 0x00001b6fu, 0x00001b6eu, 0x0004007cu, 0x00000008u, 0x00001b70u, 0x00001b6fu, 0x00050041u, 0x0000007bu, 0x00001b71u, 0x0000020au, 0x00000386u, 0x0004003du, 0x0000000fu, 0x00001b72u, 0x00001b71u, 0x00040071u, 0x00000006u, 0x00001b73u, 0x00001b72u, 0x0004007cu, 0x00000008u, 0x00001b74u, 0x00001b73u, 0x0004003du, 0x000001e4u, 0x00001b76u, 0x00000208u, 0x0003003eu, 0x00001b75u, 0x00001b76u, 0x0003003eu, 0x00001b77u, 0x00001b70u, 0x0003003eu, 0x00001b78u, 0x00001b74u, 0x00070039u, 0x00000009u, 0x00001b79u, 0x000001f4u, 0x00001b75u, 0x00001b77u, 0x00001b78u, 0x0003003eu, 0x00001b6cu, 0x00001b79u, 0x00050041u, 0x0000007bu, 0x00001b7bu, 0x00000209u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b7cu, 0x00001b7bu, 0x00040071u, 0x00000006u, 0x00001b7du, 0x00001b7cu, 0x0004007cu, 0x00000008u, 0x00001b7eu, 0x00001b7du, 0x00050041u, 0x0000007bu, 0x00001b7fu, 0x0000020au, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001b80u, 0x00001b7fu, 0x00040071u, 0x00000006u, 0x00001b81u, 0x00001b80u, 0x0004007cu, 0x00000008u, 0x00001b82u, 0x00001b81u, 0x0004003du, 0x000001e4u, 0x00001b84u, 0x00000208u, 0x0003003eu, 0x00001b83u, 0x00001b84u, 0x0003003eu, 0x00001b85u, 0x00001b7eu, 0x0003003eu, 0x00001b86u, 0x00001b82u, 0x00070039u, 0x00000009u, 0x00001b87u, 0x000001f9u, 0x00001b83u, 0x00001b85u, 0x00001b86u, 0x0003003eu, 0x00001b7au, 0x00001b87u, 0x0003003eu, 0x00001b89u, 0x00001b5du, 0x0003003eu, 0x00001b8bu, 0x00001b6bu, 0x0003003eu, 0x00001b8du, 0x00001b79u, 0x0003003eu, 0x00001b8fu, 0x00001b87u, 0x00080039u, 0x00000013u, 0x00001b91u, 0x000001e2u, 0x00001b89u, 0x00001b8bu, 0x00001b8du, 0x00001b8fu, 0x0003003eu, 0x00001b88u, 0x00001b91u, 0x0004003du, 0x00000013u, 0x00001b92u, 0x00001b88u, 0x00040072u, 0x00000009u, 0x00001b93u, 0x00001b92u, 0x0003003eu, 0x00001b94u, 0x00001b93u, 0x00050039u, 0x00000013u, 0x00001b95u, 0x000000e2u, 0x00001b94u, 0x0003003eu, 0x00001b88u, 0x00001b95u, 0x00050041u, 0x000001c4u, 0x00001b97u, 0x00001b88u, 0x00000464u, 0x0004003du, 0x00000012u, 0x00001b98u, 0x00001b97u, 0x00040072u, 0x00000008u, 0x00001b99u, 0x00001b98u, 0x0004003du, 0x00000012u, 0x00001b9bu, 0x00001b97u, 0x00040072u, 0x00000008u, 0x00001b9cu, 0x00001b9bu, 0x00050080u, 0x00000008u, 0x00001b9du, 0x00001b9cu, 0x0000022au, 0x000500c3u, 0x00000008u, 0x00001b9eu, 0x00001b9du, 0x0000025du, 0x00050080u, 0x00000008u, 0x00001b9fu, 0x00001b99u, 0x00001b9eu, 0x0003003eu, 0x00001b96u, 0x00001b9fu, 0x0004003du, 0x00000069u, 0x00001ba0u, 0x0000020du, 0x000300f7u, 0x00001ba2u, 0x00000000u, 0x000400fau, 0x00001ba0u, 0x00001ba1u, 0x00001babu, 0x000200f8u, 0x00001ba1u, 0x0004003du, 0x00000008u, 0x00001ba5u, 0x0000020cu, 0x00050084u, 0x00000008u, 0x00001ba6u, 0x00001b9fu, 0x00001ba5u, 0x00050080u, 0x00000008u, 0x00001ba7u, 0x00001ba6u, 0x00000233u, 0x000500c3u, 0x00000008u, 0x00001ba8u, 0x00001ba7u, 0x00000230u, 0x0003003eu, 0x00001ba3u, 0x00001ba8u, 0x000500c3u, 0x00000008u, 0x00001baau, 0x00001ba8u, 0x00000236u, 0x0003003eu, 0x0000020cu, 0x00001baau, 0x000200f9u, 0x00001ba2u, 0x000200f8u, 0x00001babu, 0x0004003du, 0x00000008u, 0x00001bacu, 0x0000020cu, 0x000500c4u, 0x00000008u, 0x00001badu, 0x00001bacu, 0x00000236u, 0x0003003eu, 0x00001ba3u, 0x00001badu, 0x000200f9u, 0x00001ba2u, 0x000200f8u, 0x00001ba2u, 0x000700f5u, 0x00000008u, 0x0000f109u, 0x00001ba8u, 0x00001ba1u, 0x00001badu, 0x00001babu, 0x0004003du, 0x00000069u, 0x00001baeu, 0x0000020eu, 0x000300f7u, 0x00001bb0u, 0x00000000u, 0x000400fau, 0x00001baeu, 0x00001bafu, 0x00001bb2u, 0x000200f8u, 0x00001bafu, 0x0003003eu, 0x00001b96u, 0x0000f109u, 0x000200f9u, 0x00001bb0u, 0x000200f8u, 0x00001bb2u, 0x0004003du, 0x00000008u, 0x00001bb3u, 0x0000020bu, 0x00050080u, 0x00000008u, 0x00001bb5u, 0x00001b9fu, 0x00001bb3u, 0x0003003eu, 0x00001b96u, 0x00001bb5u, 0x000200f9u, 0x00001bb0u, 0x000200f8u, 0x00001bb0u, 0x000700f5u, 0x00000008u, 0x0000f10au, 0x0000f109u, 0x00001bafu, 0x00001bb5u, 0x00001bb2u, 0x0008000cu, 0x00000008u, 0x00001bb7u, 0x00000001u, 0x0000002du, 0x0000f10au, 0x00000220u, 0x0000035eu, 0x00040072u, 0x00000012u, 0x00001bb8u, 0x00001bb7u, 0x0003003eu, 0x00001b97u, 0x00001bb8u, 0x0004003du, 0x00000013u, 0x00001bbau, 0x00001b88u, 0x000200feu, 0x00001bbau, 0x00010038u, 0x00050036u, 0x00000069u, 0x00000216u, 0x00000000u, 0x00000211u, 0x00030037u, 0x00000046u, 0x00000212u, 0x00030037u, 0x00000046u, 0x00000213u, 0x00030037u, 0x00000007u, 0x00000214u, 0x00030037u, 0x000000d7u, 0x00000215u, 0x000200f8u, 0x00000217u, 0x0004003bu, 0x000001c4u, 0x00007ebbu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007ebau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007eb9u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007eb8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007eb7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007eb6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007eb5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007eb4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007eb3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007eb2u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007e91u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007e90u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e8fu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e8eu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e8du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e8cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e8bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e8au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e89u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e88u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e6au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e69u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e68u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e67u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e66u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e65u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e64u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e5du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e3fu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e3eu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e3du, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e3cu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e3bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e3au, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e39u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007e32u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00007e25u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007e24u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e23u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e22u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e21u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e20u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e1fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e1eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e1du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e1cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007e1bu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007dfdu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007dfcu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007dfbu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007dfau, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007df9u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007df8u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007df7u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00007df6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007df5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007df4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007df3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007df2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007df1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007df0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007de9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00007de8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007de7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007de6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007de5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00007de4u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007ddfu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007ddeu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dddu, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007ddcu, 0x00000007u, 0x0004003bu, 0x00000056u, 0x00007dc8u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00007dc7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dc6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dc5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dc4u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007dc3u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00007dc2u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dc1u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00007dc0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dbcu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dbbu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00007dbau, 0x00000007u, 0x0005003bu, 0x0000006au, 0x00001fffu, 0x00000007u, 0x00000536u, 0x0004003bu, 0x0000006au, 0x00001ffcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001bf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c07u, 0x00000007u, 0x0004003bu, 0x000007bfu, 0x00001c0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001c1au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001c1du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c20u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c23u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c26u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c29u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c2cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c30u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c34u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c39u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c3du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c41u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c45u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c4au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c4eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c52u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c56u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c5au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c5eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c62u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c67u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c6cu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c71u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c76u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c7bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c80u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c85u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c8au, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c8fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001c94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ca8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ca9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001caau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001cacu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001cb3u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001cc4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cc5u, 0x00000007u, 0x0004003bu, 0x00000105u, 0x00001cc6u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001cc8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ccbu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ccdu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ccfu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001cd1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001cd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001cd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ce0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ce3u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001ce4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ce6u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001ce8u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ceau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001cecu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ceeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d16u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00001d17u, 0x00000007u, 0x0004003bu, 0x0000008du, 0x00001d1au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d1du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d36u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d39u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d3eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001d41u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d42u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d45u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d48u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d4bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d4du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d50u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d51u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d5fu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d60u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d61u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d62u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d63u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d66u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001d69u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d6cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d6eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d70u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d72u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d74u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d76u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d77u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d78u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d79u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d89u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d8cu, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00001d94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d97u, 0x00000007u, 0x0004003bu, 0x000001c4u, 0x00001d99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d9au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001d9cu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001d9eu, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001da0u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001da2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001da4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001da6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001da8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001daau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001db3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001dbau, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dbdu, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001dc2u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001dc4u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dc6u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dc8u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dcau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dccu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001dceu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dcfu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001dd8u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001ddau, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001de1u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001df0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001df5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001df8u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00001e09u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e1du, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00001e1eu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e20u, 0x00000007u, 0x0004003bu, 0x00000045u, 0x00001e25u, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001e2du, 0x00000007u, 0x0004003bu, 0x000000dfu, 0x00001e30u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e33u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e34u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e41u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e42u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e50u, 0x00000007u, 0x0004003bu, 0x00000128u, 0x00001e53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e55u, 0x00000007u, 0x0004003bu, 0x00000106u, 0x00001e57u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e59u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e5bu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e5du, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e5fu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001e61u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e63u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e70u, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001e72u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e7eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e7fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e80u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e82u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e83u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e84u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e85u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001e86u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001e9cu, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001e9du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001e9fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ea1u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ea3u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ea5u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ea7u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ea9u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001eabu, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001eadu, 0x00000007u, 0x0004003bu, 0x000000e4u, 0x00001ebdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ec5u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001ec6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ec8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ecau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001eccu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001eceu, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ed0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ed2u, 0x00000007u, 0x0004003bu, 0x000001e5u, 0x00001ee8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001eeau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001eecu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001eeeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001ef0u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ef2u, 0x00000007u, 0x0004003bu, 0x0000006au, 0x00001ef4u, 0x00000007u, 0x0004003bu, 0x0000007bu, 0x00001f09u, 0x00000007u, 0x000300f7u, 0x00001ffbu, 0x00000000u, 0x000300fbu, 0x0000032du, 0x00001ffeu, 0x000200f8u, 0x00001ffeu, 0x0004003du, 0x00000006u, 0x00001bbfu, 0x00000214u, 0x0003003eu, 0x00001bbeu, 0x00001bbfu, 0x00050039u, 0x0000002eu, 0x00001bc0u, 0x00000031u, 0x00001bbeu, 0x00050051u, 0x00000008u, 0x00007dbdu, 0x00001bc0u, 0x00000000u, 0x0003003eu, 0x00007dbau, 0x00007dbdu, 0x00050051u, 0x00000008u, 0x00007dbeu, 0x00001bc0u, 0x00000001u, 0x0003003eu, 0x00007dbbu, 0x00007dbeu, 0x00050051u, 0x00000008u, 0x00007dbfu, 0x00001bc0u, 0x00000002u, 0x0003003eu, 0x00007dbcu, 0x00007dbfu, 0x0004003du, 0x00000008u, 0x00001bc1u, 0x00000213u, 0x00050084u, 0x00000008u, 0x00001bc4u, 0x00000882u, 0x00007dbeu, 0x000500b1u, 0x00000069u, 0x00001bc5u, 0x00001bc1u, 0x00001bc4u, 0x000400a8u, 0x00000069u, 0x00001bc6u, 0x00001bc5u, 0x000300f7u, 0x00001bc8u, 0x00000000u, 0x000400fau, 0x00001bc6u, 0x00001bc7u, 0x00001bc8u, 0x000200f8u, 0x00001bc7u, 0x0004003du, 0x00000008u, 0x00001bc9u, 0x00000213u, 0x00050084u, 0x00000008u, 0x00001bccu, 0x00007dbfu, 0x00000882u, 0x00050080u, 0x00000008u, 0x00001bceu, 0x00001bccu, 0x00001bcdu, 0x000500adu, 0x00000069u, 0x00001bcfu, 0x00001bc9u, 0x00001bceu, 0x000200f9u, 0x00001bc8u, 0x000200f8u, 0x00001bc8u, 0x000700f5u, 0x00000069u, 0x00001bd0u, 0x00001bc5u, 0x00001ffeu, 0x00001bcfu, 0x00001bc7u, 0x000300f7u, 0x00001bd2u, 0x00000000u, 0x000400fau, 0x00001bd0u, 0x00001bd1u, 0x00001bd2u, 0x000200f8u, 0x00001bd1u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001bd2u, 0x0004003du, 0x00000006u, 0x00001bdau, 0x00000214u, 0x00070041u, 0x00000671u, 0x00001bdbu, 0x00001bd9u, 0x00000220u, 0x00001bdau, 0x00000260u, 0x0004003du, 0x0000000fu, 0x00001bdcu, 0x00001bdbu, 0x00040071u, 0x00000006u, 0x00001bddu, 0x00001bdcu, 0x0003003eu, 0x00001bd4u, 0x00001bddu, 0x000300f7u, 0x00001be0u, 0x00000000u, 0x000400fau, 0x00001bdeu, 0x00001bdfu, 0x00001be0u, 0x000200f8u, 0x00001bdfu, 0x000500c7u, 0x00000006u, 0x00001be2u, 0x00001bddu, 0x00000a44u, 0x000500abu, 0x00000069u, 0x00001be3u, 0x00001be2u, 0x0000032du, 0x000300f7u, 0x00001be5u, 0x00000000u, 0x000400fau, 0x00001be3u, 0x00001be4u, 0x00001be5u, 0x000200f8u, 0x00001be4u, 0x0004003du, 0x00000008u, 0x00001be8u, 0x00000212u, 0x000500c7u, 0x00000008u, 0x00001be9u, 0x00001be8u, 0x00001be7u, 0x0003003eu, 0x00000212u, 0x00001be9u, 0x0004003du, 0x00000008u, 0x00001becu, 0x00000213u, 0x000500c7u, 0x00000008u, 0x00001bedu, 0x00001becu, 0x00001bebu, 0x0003003eu, 0x00000213u, 0x00001bedu, 0x000200f9u, 0x00001be5u, 0x000200f8u, 0x00001be5u, 0x000200f9u, 0x00001be0u, 0x000200f8u, 0x00001be0u, 0x00050084u, 0x00000008u, 0x00001bf1u, 0x00000882u, 0x00007dbdu, 0x0004003du, 0x00000008u, 0x00001bf2u, 0x00000213u, 0x00050082u, 0x00000008u, 0x00001bf6u, 0x00001bf2u, 0x00001bc4u, 0x00050080u, 0x00000008u, 0x00001bf7u, 0x00001bf1u, 0x00001bf6u, 0x0004007cu, 0x00000006u, 0x00001bf8u, 0x00001bf7u, 0x0003003eu, 0x00001bf9u, 0x00001bf8u, 0x00050039u, 0x00000029u, 0x00001bfau, 0x0000002cu, 0x00001bf9u, 0x00050051u, 0x00000009u, 0x00007dc9u, 0x00001bfau, 0x00000000u, 0x0003003eu, 0x00007dc0u, 0x00007dc9u, 0x00050051u, 0x00000009u, 0x00007dcau, 0x00001bfau, 0x00000001u, 0x0003003eu, 0x00007dc1u, 0x00007dcau, 0x00050051u, 0x00000028u, 0x00007dcbu, 0x00001bfau, 0x00000002u, 0x0003003eu, 0x00007dc2u, 0x00007dcbu, 0x00050051u, 0x00000028u, 0x00007dccu, 0x00001bfau, 0x00000003u, 0x0003003eu, 0x00007dc3u, 0x00007dccu, 0x00050051u, 0x00000008u, 0x00007dcdu, 0x00001bfau, 0x00000004u, 0x0003003eu, 0x00007dc4u, 0x00007dcdu, 0x00050051u, 0x00000008u, 0x00007dceu, 0x00001bfau, 0x00000005u, 0x0003003eu, 0x00007dc5u, 0x00007dceu, 0x00050051u, 0x00000008u, 0x00007dcfu, 0x00001bfau, 0x00000006u, 0x0003003eu, 0x00007dc6u, 0x00007dcfu, 0x00050051u, 0x00000012u, 0x00007dd0u, 0x00001bfau, 0x00000007u, 0x0003003eu, 0x00007dc7u, 0x00007dd0u, 0x00050051u, 0x00000011u, 0x00007dd1u, 0x00001bfau, 0x00000008u, 0x0003003eu, 0x00007dc8u, 0x00007dd1u, 0x000500aau, 0x00000069u, 0x00001bfdu, 0x00007dd1u, 0x0000021au, 0x000300f7u, 0x00001bffu, 0x00000000u, 0x000400fau, 0x00001bfdu, 0x00001bfeu, 0x00001bffu, 0x000200f8u, 0x00001bfeu, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001bffu, 0x0004003du, 0x00000006u, 0x00001c02u, 0x00000214u, 0x00070041u, 0x00000671u, 0x00001c03u, 0x00001bd9u, 0x00000220u, 0x00001c02u, 0x00000263u, 0x0004003du, 0x0000000fu, 0x00001c04u, 0x00001c03u, 0x00040071u, 0x00000006u, 0x00001c05u, 0x00001c04u, 0x0003003eu, 0x00001c01u, 0x00001c05u, 0x0004003du, 0x00000006u, 0x00001c08u, 0x00000214u, 0x0003003eu, 0x00001c07u, 0x00001c08u, 0x00050039u, 0x0000000au, 0x00001c09u, 0x0000000du, 0x00001c07u, 0x00050051u, 0x00000009u, 0x00007de0u, 0x00001c09u, 0x00000001u, 0x0003003eu, 0x00007ddcu, 0x00007de0u, 0x00050051u, 0x00000009u, 0x00007de1u, 0x00001c09u, 0x00000003u, 0x0003003eu, 0x00007dddu, 0x00007de1u, 0x00050051u, 0x00000009u, 0x00007de2u, 0x00001c09u, 0x00000005u, 0x0003003eu, 0x00007ddeu, 0x00007de2u, 0x00050051u, 0x00000009u, 0x00007de3u, 0x00001c09u, 0x00000007u, 0x0003003eu, 0x00007ddfu, 0x00007de3u, 0x0004003du, 0x00000006u, 0x00001c0bu, 0x00000214u, 0x00070041u, 0x00001c0cu, 0x00001c0du, 0x00000a20u, 0x00000220u, 0x00001c0bu, 0x00000220u, 0x0004003du, 0x00000010u, 0x00001c0eu, 0x00001c0du, 0x00040071u, 0x000004f7u, 0x00001c0fu, 0x00001c0eu, 0x0003003eu, 0x00001c0au, 0x00001c0fu, 0x00050041u, 0x00000007u, 0x00001c11u, 0x00001c0au, 0x0000032du, 0x0004003du, 0x00000006u, 0x00001c12u, 0x00001c11u, 0x0003003eu, 0x00001c10u, 0x00001c12u, 0x00050041u, 0x00000007u, 0x00001c14u, 0x00001c0au, 0x00000386u, 0x0004003du, 0x00000006u, 0x00001c15u, 0x00001c14u, 0x0003003eu, 0x00001c13u, 0x00001c15u, 0x0003003eu, 0x00001c17u, 0x00001c12u, 0x00050039u, 0x00000019u, 0x00001c19u, 0x0000001cu, 0x00001c17u, 0x00050051u, 0x00000010u, 0x00007deau, 0x00001c19u, 0x00000000u, 0x0003003eu, 0x00007de4u, 0x00007deau, 0x00050051u, 0x00000010u, 0x00007debu, 0x00001c19u, 0x00000001u, 0x0003003eu, 0x00007de5u, 0x00007debu, 0x00050051u, 0x00000010u, 0x00007decu, 0x00001c19u, 0x00000002u, 0x0003003eu, 0x00007de6u, 0x00007decu, 0x00050051u, 0x00000010u, 0x00007dedu, 0x00001c19u, 0x00000003u, 0x0003003eu, 0x00007de7u, 0x00007dedu, 0x00050051u, 0x00000006u, 0x00007deeu, 0x00001c19u, 0x00000004u, 0x0003003eu, 0x00007de8u, 0x00007deeu, 0x00050051u, 0x00000008u, 0x00007defu, 0x00001c19u, 0x00000005u, 0x0003003eu, 0x00007de9u, 0x00007defu, 0x0003003eu, 0x00001c1au, 0x00007deeu, 0x0003003eu, 0x00001c1du, 0x00007defu, 0x0003003eu, 0x00001c20u, 0x00007deau, 0x0003003eu, 0x00001c23u, 0x00007debu, 0x0003003eu, 0x00001c26u, 0x00007decu, 0x0003003eu, 0x00001c29u, 0x00007dedu, 0x000500c7u, 0x00000006u, 0x00001c2eu, 0x00007deeu, 0x00000330u, 0x000500abu, 0x00000069u, 0x00001c2fu, 0x00001c2eu, 0x0000032du, 0x0003003eu, 0x00001c2cu, 0x00001c2fu, 0x000500c7u, 0x00000006u, 0x00001c32u, 0x00007deeu, 0x00000a44u, 0x000500abu, 0x00000069u, 0x00001c33u, 0x00001c32u, 0x0000032du, 0x0003003eu, 0x00001c30u, 0x00001c33u, 0x000500c7u, 0x00000006u, 0x00001c37u, 0x00007deeu, 0x00001c36u, 0x000500abu, 0x00000069u, 0x00001c38u, 0x00001c37u, 0x0000032du, 0x0003003eu, 0x00001c34u, 0x00001c38u, 0x000500c7u, 0x00000006u, 0x00001c3bu, 0x00007deeu, 0x00000a4au, 0x000500abu, 0x00000069u, 0x00001c3cu, 0x00001c3bu, 0x0000032du, 0x0003003eu, 0x00001c39u, 0x00001c3cu, 0x000500c7u, 0x00000006u, 0x00001c3fu, 0x00007deeu, 0x00000a50u, 0x000500abu, 0x00000069u, 0x00001c40u, 0x00001c3fu, 0x0000032du, 0x0003003eu, 0x00001c3du, 0x00001c40u, 0x000500c7u, 0x00000006u, 0x00001c43u, 0x00007deeu, 0x00000314u, 0x000500abu, 0x00000069u, 0x00001c44u, 0x00001c43u, 0x0000032du, 0x0003003eu, 0x00001c41u, 0x00001c44u, 0x000500c7u, 0x00000006u, 0x00001c48u, 0x00007deeu, 0x00001c47u, 0x000500abu, 0x00000069u, 0x00001c49u, 0x00001c48u, 0x0000032du, 0x0003003eu, 0x00001c45u, 0x00001c49u, 0x000500c7u, 0x00000006u, 0x00001c4cu, 0x00007deeu, 0x00000f5cu, 0x000500abu, 0x00000069u, 0x00001c4du, 0x00001c4cu, 0x0000032du, 0x0003003eu, 0x00001c4au, 0x00001c4du, 0x000500c7u, 0x00000006u, 0x00001c50u, 0x00007deeu, 0x00000f54u, 0x000500abu, 0x00000069u, 0x00001c51u, 0x00001c50u, 0x0000032du, 0x0003003eu, 0x00001c4eu, 0x00001c51u, 0x000500c7u, 0x00000006u, 0x00001c54u, 0x00007deeu, 0x00000704u, 0x000500abu, 0x00000069u, 0x00001c55u, 0x00001c54u, 0x0000032du, 0x0003003eu, 0x00001c52u, 0x00001c55u, 0x000500c7u, 0x00000006u, 0x00001c58u, 0x00007deeu, 0x00000a56u, 0x000500abu, 0x00000069u, 0x00001c59u, 0x00001c58u, 0x0000032du, 0x0003003eu, 0x00001c56u, 0x00001c59u, 0x000500c7u, 0x00000006u, 0x00001c5cu, 0x00007deeu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00001c5du, 0x00001c5cu, 0x0000032du, 0x0003003eu, 0x00001c5au, 0x00001c5du, 0x000500c7u, 0x00000006u, 0x00001c60u, 0x00007deeu, 0x00000e87u, 0x000500abu, 0x00000069u, 0x00001c61u, 0x00001c60u, 0x0000032du, 0x0003003eu, 0x00001c5eu, 0x00001c61u, 0x000500c7u, 0x00000006u, 0x00001c65u, 0x00007deeu, 0x00001c64u, 0x000500abu, 0x00000069u, 0x00001c66u, 0x00001c65u, 0x0000032du, 0x0003003eu, 0x00001c62u, 0x00001c66u, 0x000500c7u, 0x00000006u, 0x00001c6au, 0x00007deeu, 0x00001c69u, 0x000500abu, 0x00000069u, 0x00001c6bu, 0x00001c6au, 0x0000032du, 0x0003003eu, 0x00001c67u, 0x00001c6bu, 0x000500c7u, 0x00000006u, 0x00001c6fu, 0x00007deeu, 0x00001c6eu, 0x000500abu, 0x00000069u, 0x00001c70u, 0x00001c6fu, 0x0000032du, 0x0003003eu, 0x00001c6cu, 0x00001c70u, 0x000500c7u, 0x00000006u, 0x00001c74u, 0x00007deeu, 0x00001c73u, 0x000500abu, 0x00000069u, 0x00001c75u, 0x00001c74u, 0x0000032du, 0x0003003eu, 0x00001c71u, 0x00001c75u, 0x000500c7u, 0x00000006u, 0x00001c79u, 0x00007deeu, 0x00001c78u, 0x000500abu, 0x00000069u, 0x00001c7au, 0x00001c79u, 0x0000032du, 0x0003003eu, 0x00001c76u, 0x00001c7au, 0x000500c7u, 0x00000006u, 0x00001c7eu, 0x00007deeu, 0x00001c7du, 0x000500abu, 0x00000069u, 0x00001c7fu, 0x00001c7eu, 0x0000032du, 0x0003003eu, 0x00001c7bu, 0x00001c7fu, 0x000500c7u, 0x00000006u, 0x00001c83u, 0x00007deeu, 0x00001c82u, 0x000500abu, 0x00000069u, 0x00001c84u, 0x00001c83u, 0x0000032du, 0x0003003eu, 0x00001c80u, 0x00001c84u, 0x000500c7u, 0x00000006u, 0x00001c88u, 0x00007deeu, 0x00001c87u, 0x000500abu, 0x00000069u, 0x00001c89u, 0x00001c88u, 0x0000032du, 0x0003003eu, 0x00001c85u, 0x00001c89u, 0x000500c7u, 0x00000006u, 0x00001c8du, 0x00007deeu, 0x00001c8cu, 0x000500abu, 0x00000069u, 0x00001c8eu, 0x00001c8du, 0x0000032du, 0x0003003eu, 0x00001c8au, 0x00001c8eu, 0x000500c7u, 0x00000006u, 0x00001c92u, 0x00007deeu, 0x00001c91u, 0x000500abu, 0x00000069u, 0x00001c93u, 0x00001c92u, 0x0000032du, 0x0003003eu, 0x00001c8fu, 0x00001c93u, 0x000500c7u, 0x00000006u, 0x00001c97u, 0x00007deeu, 0x00001c96u, 0x000500abu, 0x00000069u, 0x00001c98u, 0x00001c97u, 0x0000032du, 0x0003003eu, 0x00001c94u, 0x00001c98u, 0x000500c7u, 0x00000006u, 0x00001c9bu, 0x00007deeu, 0x00001c9au, 0x000500abu, 0x00000069u, 0x00001c9cu, 0x00001c9bu, 0x0000032du, 0x000300f7u, 0x00001c9eu, 0x00000000u, 0x000400fau, 0x00001c9cu, 0x00001c9du, 0x00001c9eu, 0x000200f8u, 0x00001c9du, 0x0004003du, 0x00000008u, 0x00001c9fu, 0x00000212u, 0x0004007cu, 0x00000006u, 0x00001ca0u, 0x00001c9fu, 0x0004003du, 0x00000008u, 0x00001ca1u, 0x00000213u, 0x0004007cu, 0x00000006u, 0x00001ca2u, 0x00001ca1u, 0x0004003du, 0x00000006u, 0x00001ca3u, 0x00000214u, 0x00060041u, 0x00001ca4u, 0x00001ca5u, 0x00000cd7u, 0x00000220u, 0x00000230u, 0x0004003du, 0x00000006u, 0x00001ca6u, 0x00001ca5u, 0x00050080u, 0x00000006u, 0x00001ca7u, 0x00001ca3u, 0x00001ca6u, 0x0003003eu, 0x00001ca8u, 0x00001ca0u, 0x0003003eu, 0x00001ca9u, 0x00001ca2u, 0x0003003eu, 0x00001caau, 0x00001ca7u, 0x00070039u, 0x00000002u, 0x00001cabu, 0x00000037u, 0x00001ca8u, 0x00001ca9u, 0x00001caau, 0x000200f9u, 0x00001c9eu, 0x000200f8u, 0x00001c9eu, 0x000500c7u, 0x00000006u, 0x00001caeu, 0x00001bddu, 0x0000045cu, 0x000500abu, 0x00000069u, 0x00001cafu, 0x00001caeu, 0x0000032du, 0x0003003eu, 0x00001cacu, 0x00001cafu, 0x000300f7u, 0x00001cb2u, 0x00000000u, 0x000400fau, 0x00001c66u, 0x00001cb1u, 0x00001d05u, 0x000200f8u, 0x00001cb1u, 0x0004003du, 0x00000008u, 0x00001cb4u, 0x00000212u, 0x000500afu, 0x00000069u, 0x00001cb7u, 0x00001cb4u, 0x00007dceu, 0x000300f7u, 0x00001cb9u, 0x00000000u, 0x000400fau, 0x00001cb7u, 0x00001cb8u, 0x00001cb9u, 0x000200f8u, 0x00001cb8u, 0x0004003du, 0x00000008u, 0x00001cbau, 0x00000212u, 0x000500b3u, 0x00000069u, 0x00001cbdu, 0x00001cbau, 0x00007dcfu, 0x000200f9u, 0x00001cb9u, 0x000200f8u, 0x00001cb9u, 0x000700f5u, 0x00000069u, 0x00001cbeu, 0x00001cb7u, 0x00001cb1u, 0x00001cbdu, 0x00001cb8u, 0x0003003eu, 0x00001cb3u, 0x00001cbeu, 0x000400a8u, 0x00000069u, 0x00001cc0u, 0x00001cbeu, 0x000300f7u, 0x00001cc2u, 0x00000000u, 0x000400fau, 0x00001cc0u, 0x00001cc1u, 0x00001cc2u, 0x000200f8u, 0x00001cc1u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001cc2u, 0x0003003eu, 0x00001cc6u, 0x00001bfau, 0x0003003eu, 0x00001cc8u, 0x00007de2u, 0x0004003du, 0x00000008u, 0x00001cccu, 0x00000212u, 0x0003003eu, 0x00001ccbu, 0x00001cccu, 0x0003003eu, 0x00001ccdu, 0x00001c44u, 0x0003003eu, 0x00001ccfu, 0x00001cafu, 0x000b0039u, 0x00000002u, 0x00001cd3u, 0x0000010fu, 0x00001cc6u, 0x00001cc8u, 0x00001ccbu, 0x00001ccdu, 0x00001ccfu, 0x00001cd1u, 0x00001cd2u, 0x0004003du, 0x000000efu, 0x00001cd4u, 0x00001cd1u, 0x0003003eu, 0x00001cc4u, 0x00001cd4u, 0x0004003du, 0x00000008u, 0x00001cd5u, 0x00001cd2u, 0x0003003eu, 0x00001cc5u, 0x00001cd5u, 0x000500c7u, 0x00000006u, 0x00001cd8u, 0x00001c05u, 0x00000742u, 0x0003003eu, 0x00001cd6u, 0x00001cd8u, 0x0004003du, 0x00000006u, 0x00001cdau, 0x00000214u, 0x00080041u, 0x00000671u, 0x00001cdcu, 0x00000a20u, 0x00000220u, 0x00001cdau, 0x0000022du, 0x00001cd8u, 0x0004003du, 0x0000000fu, 0x00001cddu, 0x00001cdcu, 0x00040071u, 0x00000006u, 0x00001cdeu, 0x00001cddu, 0x0003003eu, 0x00001cd9u, 0x00001cdeu, 0x0003003eu, 0x00001ce0u, 0x00001cdeu, 0x00050039u, 0x00000023u, 0x00001ce2u, 0x00000026u, 0x00001ce0u, 0x00050051u, 0x00000006u, 0x00007dfeu, 0x00001ce2u, 0x00000000u, 0x0003003eu, 0x00007df0u, 0x00007dfeu, 0x00050051u, 0x00000006u, 0x00007dffu, 0x00001ce2u, 0x00000001u, 0x0003003eu, 0x00007df1u, 0x00007dffu, 0x00050051u, 0x00000006u, 0x00007e00u, 0x00001ce2u, 0x00000002u, 0x0003003eu, 0x00007df2u, 0x00007e00u, 0x00050051u, 0x00000006u, 0x00007e01u, 0x00001ce2u, 0x00000003u, 0x0003003eu, 0x00007df3u, 0x00007e01u, 0x00050051u, 0x00000006u, 0x00007e02u, 0x00001ce2u, 0x00000004u, 0x0003003eu, 0x00007df4u, 0x00007e02u, 0x00050051u, 0x00000006u, 0x00007e03u, 0x00001ce2u, 0x00000005u, 0x0003003eu, 0x00007df5u, 0x00007e03u, 0x00050051u, 0x0000000fu, 0x00007e04u, 0x00001ce2u, 0x00000006u, 0x0003003eu, 0x00007df6u, 0x00007e04u, 0x00050051u, 0x0000000fu, 0x00007e05u, 0x00001ce2u, 0x00000007u, 0x0003003eu, 0x00007df7u, 0x00007e05u, 0x00050051u, 0x0000000fu, 0x00007e06u, 0x00001ce2u, 0x00000008u, 0x0003003eu, 0x00007df8u, 0x00007e06u, 0x00050051u, 0x0000000fu, 0x00007e07u, 0x00001ce2u, 0x00000009u, 0x0003003eu, 0x00007df9u, 0x00007e07u, 0x00050051u, 0x0000000fu, 0x00007e08u, 0x00001ce2u, 0x0000000au, 0x0003003eu, 0x00007dfau, 0x00007e08u, 0x00050051u, 0x0000000fu, 0x00007e09u, 0x00001ce2u, 0x0000000bu, 0x0003003eu, 0x00007dfbu, 0x00007e09u, 0x00050051u, 0x0000000fu, 0x00007e0au, 0x00001ce2u, 0x0000000cu, 0x0003003eu, 0x00007dfcu, 0x00007e0au, 0x00050051u, 0x0000000fu, 0x00007e0bu, 0x00001ce2u, 0x0000000du, 0x0003003eu, 0x00007dfdu, 0x00007e0bu, 0x0003003eu, 0x00001ce4u, 0x00001ce2u, 0x0003003eu, 0x00001ce6u, 0x00001c15u, 0x0003003eu, 0x00001ce8u, 0x00001cd4u, 0x0003003eu, 0x00001ceau, 0x00001cd5u, 0x0003003eu, 0x00001cecu, 0x00001c2fu, 0x0003003eu, 0x00001ceeu, 0x00001c33u, 0x000a0039u, 0x00000008u, 0x00001cf0u, 0x000001acu, 0x00001ce4u, 0x00001ce6u, 0x00001ce8u, 0x00001ceau, 0x00001cecu, 0x00001ceeu, 0x0003003eu, 0x00001ce3u, 0x00001cf0u, 0x00050041u, 0x00000046u, 0x00001cf2u, 0x00000215u, 0x0000022au, 0x0003003eu, 0x00001cf2u, 0x00001cf0u, 0x00050041u, 0x0000007bu, 0x00001cf3u, 0x00000215u, 0x0000022du, 0x0003003eu, 0x00001cf3u, 0x00000626u, 0x000300f7u, 0x00001cf6u, 0x00000000u, 0x000400fau, 0x00001c6bu, 0x00001cf5u, 0x00001cf6u, 0x000200f8u, 0x00001cf5u, 0x00060041u, 0x00000cd8u, 0x00001cf7u, 0x00000cd7u, 0x00000220u, 0x0000022du, 0x0004003du, 0x00000008u, 0x00001cf8u, 0x00001cf7u, 0x000500aau, 0x00000069u, 0x00001cf9u, 0x00001cf8u, 0x0000022du, 0x000200f9u, 0x00001cf6u, 0x000200f8u, 0x00001cf6u, 0x000700f5u, 0x00000069u, 0x00001cfau, 0x00001c6bu, 0x00001cc2u, 0x00001cf9u, 0x00001cf5u, 0x000300f7u, 0x00001cfcu, 0x00000000u, 0x000400fau, 0x00001cfau, 0x00001cfbu, 0x00001cfcu, 0x000200f8u, 0x00001cfbu, 0x000500c7u, 0x00000008u, 0x00001cfeu, 0x00001cf0u, 0x0000022au, 0x000500aau, 0x00000069u, 0x00001cffu, 0x00001cfeu, 0x00000220u, 0x000200f9u, 0x00001cfcu, 0x000200f8u, 0x00001cfcu, 0x000700f5u, 0x00000069u, 0x00001d00u, 0x00001cfau, 0x00001cf6u, 0x00001cffu, 0x00001cfbu, 0x000300f7u, 0x00001d02u, 0x00000000u, 0x000400fau, 0x00001d00u, 0x00001d01u, 0x00001d02u, 0x000200f8u, 0x00001d01u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001d02u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000559u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001d05u, 0x000300f7u, 0x00001d08u, 0x00000000u, 0x000400fau, 0x00001c61u, 0x00001d07u, 0x00001d08u, 0x000200f8u, 0x00001d07u, 0x00050041u, 0x0000007bu, 0x00001d09u, 0x00000215u, 0x0000022du, 0x0003003eu, 0x00001d09u, 0x00000627u, 0x0004003du, 0x00000008u, 0x00001d0au, 0x00000212u, 0x000500afu, 0x00000069u, 0x00001d0du, 0x00001d0au, 0x00007dceu, 0x000300f7u, 0x00001d0fu, 0x00000000u, 0x000400fau, 0x00001d0du, 0x00001d0eu, 0x00001d0fu, 0x000200f8u, 0x00001d0eu, 0x0004003du, 0x00000008u, 0x00001d10u, 0x00000212u, 0x000500b3u, 0x00000069u, 0x00001d13u, 0x00001d10u, 0x00007dcfu, 0x000200f9u, 0x00001d0fu, 0x000200f8u, 0x00001d0fu, 0x000700f5u, 0x00000069u, 0x00001d14u, 0x00001d0du, 0x00001d07u, 0x00001d13u, 0x00001d0eu, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00001d14u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001d08u, 0x000200f9u, 0x00001cb2u, 0x000200f8u, 0x00001cb2u, 0x0003003eu, 0x00001d17u, 0x00007dcbu, 0x0003003eu, 0x00001d1au, 0x00007dccu, 0x0004003du, 0x00000008u, 0x00001d1eu, 0x00000212u, 0x0003003eu, 0x00001d1du, 0x00001d1eu, 0x00070039u, 0x0000000fu, 0x00001d1fu, 0x00000092u, 0x00001d17u, 0x00001d1au, 0x00001d1du, 0x00040071u, 0x00000006u, 0x00001d20u, 0x00001d1fu, 0x0004007cu, 0x00000008u, 0x00001d21u, 0x00001d20u, 0x0003003eu, 0x00001d16u, 0x00001d21u, 0x000500aau, 0x00000069u, 0x00001d23u, 0x00001d21u, 0x00000220u, 0x000300f7u, 0x00001d25u, 0x00000000u, 0x000400fau, 0x00001d23u, 0x00001d24u, 0x00001d25u, 0x000200f8u, 0x00001d24u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001d25u, 0x000400cdu, 0x00000008u, 0x00001d29u, 0x00001d21u, 0x0003003eu, 0x00001d27u, 0x00001d29u, 0x000400a8u, 0x00000069u, 0x00001d2bu, 0x00001c55u, 0x000300f7u, 0x00001d2du, 0x00000000u, 0x000400fau, 0x00001d2bu, 0x00001d2cu, 0x00001d2du, 0x000200f8u, 0x00001d2cu, 0x000500c7u, 0x00000008u, 0x00001d2fu, 0x00001d21u, 0x0000022au, 0x000500aau, 0x00000069u, 0x00001d30u, 0x00001d2fu, 0x00000220u, 0x000200f9u, 0x00001d2du, 0x000200f8u, 0x00001d2du, 0x000700f5u, 0x00000069u, 0x00001d31u, 0x00001d2bu, 0x00001d25u, 0x00001d30u, 0x00001d2cu, 0x000300f7u, 0x00001d33u, 0x00000000u, 0x000400fau, 0x00001d31u, 0x00001d32u, 0x00001d33u, 0x000200f8u, 0x00001d32u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001d33u, 0x0004003du, 0x00000006u, 0x00001d37u, 0x00000214u, 0x0003003eu, 0x00001d36u, 0x00001d37u, 0x00050039u, 0x00000014u, 0x00001d38u, 0x00000017u, 0x00001d36u, 0x00050051u, 0x00000010u, 0x00007e26u, 0x00001d38u, 0x00000000u, 0x0003003eu, 0x00007e1bu, 0x00007e26u, 0x00050051u, 0x00000010u, 0x00007e27u, 0x00001d38u, 0x00000001u, 0x0003003eu, 0x00007e1cu, 0x00007e27u, 0x00050051u, 0x00000010u, 0x00007e28u, 0x00001d38u, 0x00000002u, 0x0003003eu, 0x00007e1du, 0x00007e28u, 0x00050051u, 0x00000010u, 0x00007e29u, 0x00001d38u, 0x00000003u, 0x0003003eu, 0x00007e1eu, 0x00007e29u, 0x00050051u, 0x00000010u, 0x00007e2au, 0x00001d38u, 0x00000004u, 0x0003003eu, 0x00007e1fu, 0x00007e2au, 0x00050051u, 0x00000010u, 0x00007e2bu, 0x00001d38u, 0x00000005u, 0x0003003eu, 0x00007e20u, 0x00007e2bu, 0x00050051u, 0x00000010u, 0x00007e2cu, 0x00001d38u, 0x00000006u, 0x0003003eu, 0x00007e21u, 0x00007e2cu, 0x00050051u, 0x00000010u, 0x00007e2du, 0x00001d38u, 0x00000007u, 0x0003003eu, 0x00007e22u, 0x00007e2du, 0x00050051u, 0x00000010u, 0x00007e2eu, 0x00001d38u, 0x00000009u, 0x0003003eu, 0x00007e23u, 0x00007e2eu, 0x00050051u, 0x0000000fu, 0x00007e2fu, 0x00001d38u, 0x0000000du, 0x0003003eu, 0x00007e24u, 0x00007e2fu, 0x00050051u, 0x00000013u, 0x00007e30u, 0x00001d38u, 0x0000000eu, 0x0003003eu, 0x00007e25u, 0x00007e30u, 0x0004003du, 0x00000008u, 0x00001d3au, 0x00000212u, 0x00050082u, 0x00000008u, 0x00001d3du, 0x00001d3au, 0x00007dcdu, 0x0003003eu, 0x00001d39u, 0x00001d3du, 0x000600a9u, 0x00000008u, 0x00001d40u, 0x00001cafu, 0x0000022au, 0x00000ce5u, 0x0003003eu, 0x00001d3eu, 0x00001d40u, 0x0003003eu, 0x00001d42u, 0x00007dc9u, 0x0003003eu, 0x00001d45u, 0x00007de0u, 0x0003003eu, 0x00001d48u, 0x00007de1u, 0x0003003eu, 0x00001d4bu, 0x00001d3du, 0x0003003eu, 0x00001d4du, 0x00001d21u, 0x00090039u, 0x00000010u, 0x00001d4fu, 0x00000103u, 0x00001d42u, 0x00001d45u, 0x00001d48u, 0x00001d4bu, 0x00001d4du, 0x0003003eu, 0x00001d41u, 0x00001d4fu, 0x0003003eu, 0x00001d50u, 0x00000536u, 0x0003003eu, 0x00001d51u, 0x00001d40u, 0x000500a7u, 0x00000069u, 0x00001d55u, 0x00001d53u, 0x00001c89u, 0x000300f7u, 0x00001d57u, 0x00000000u, 0x000400fau, 0x00001d55u, 0x00001d56u, 0x00001d57u, 0x000200f8u, 0x00001d56u, 0x000500c7u, 0x00000006u, 0x00001d59u, 0x00001bddu, 0x00000a4au, 0x000500abu, 0x00000069u, 0x00001d5au, 0x00001d59u, 0x0000032du, 0x000300f7u, 0x00001d5cu, 0x00000000u, 0x000400fau, 0x00001d5au, 0x00001d5bu, 0x00001d5cu, 0x000200f8u, 0x00001d5bu, 0x00050084u, 0x00000008u, 0x00001d5eu, 0x00001d40u, 0x00000882u, 0x0003003eu, 0x00001d51u, 0x00001d5eu, 0x000200f9u, 0x00001d5cu, 0x000200f8u, 0x00001d5cu, 0x000700f5u, 0x00000008u, 0x0000f13du, 0x00001d40u, 0x00001d56u, 0x00001d5eu, 0x00001d5bu, 0x000200f9u, 0x00001d57u, 0x000200f8u, 0x00001d57u, 0x000700f5u, 0x00000008u, 0x0000f13cu, 0x00001d40u, 0x00001d33u, 0x0000f13du, 0x00001d5cu, 0x0003003eu, 0x00001d63u, 0x00007dcau, 0x0003003eu, 0x00001d66u, 0x00007de2u, 0x0003003eu, 0x00001d69u, 0x00007de3u, 0x0003003eu, 0x00001d6cu, 0x00001d3du, 0x0003003eu, 0x00001d6eu, 0x00001d21u, 0x0003003eu, 0x00001d70u, 0x00001c44u, 0x0003003eu, 0x00001d72u, 0x00001c89u, 0x0003003eu, 0x00001d74u, 0x0000f13cu, 0x0003003eu, 0x00001d7au, 0x00000536u, 0x00110039u, 0x00000002u, 0x00001d7cu, 0x00000126u, 0x00001d63u, 0x00001d66u, 0x00001d69u, 0x00001d6cu, 0x00001d6eu, 0x00001d70u, 0x00001d72u, 0x00001d74u, 0x00001d76u, 0x00001d77u, 0x00001d78u, 0x00001d79u, 0x00001d7au, 0x0004003du, 0x000000efu, 0x00001d7du, 0x00001d76u, 0x0003003eu, 0x00001d5fu, 0x00001d7du, 0x0004003du, 0x000000efu, 0x00001d7eu, 0x00001d77u, 0x0003003eu, 0x00001d60u, 0x00001d7eu, 0x0004003du, 0x000000efu, 0x00001d7fu, 0x00001d78u, 0x0003003eu, 0x00001d61u, 0x00001d7fu, 0x0004003du, 0x00000008u, 0x00001d80u, 0x00001d79u, 0x0003003eu, 0x00001d62u, 0x00001d80u, 0x0004003du, 0x00000069u, 0x00001d81u, 0x00001d7au, 0x0003003eu, 0x00001d50u, 0x00001d81u, 0x000500c7u, 0x00000006u, 0x00001d84u, 0x00001c05u, 0x00000742u, 0x0003003eu, 0x00001d82u, 0x00001d84u, 0x00050080u, 0x00000006u, 0x00001d87u, 0x00001d84u, 0x0000045cu, 0x000500c7u, 0x00000006u, 0x00001d88u, 0x00001d87u, 0x00000742u, 0x0003003eu, 0x00001d85u, 0x00001d88u, 0x000500c2u, 0x00000006u, 0x00001d8bu, 0x00001c05u, 0x00000464u, 0x0003003eu, 0x00001d89u, 0x00001d8bu, 0x00040071u, 0x00000006u, 0x00001d8fu, 0x00007e2fu, 0x0004007cu, 0x00000008u, 0x00001d90u, 0x00001d8fu, 0x0003003eu, 0x00001d8cu, 0x00001d90u, 0x000300f7u, 0x00001d93u, 0x00000000u, 0x000400fau, 0x00001c89u, 0x00001d92u, 0x00001d93u, 0x000200f8u, 0x00001d92u, 0x0003003eu, 0x00001d95u, 0x00001d84u, 0x0003003eu, 0x00001d97u, 0x00001d88u, 0x0003003eu, 0x00001d9au, 0x00001d8bu, 0x0003003eu, 0x00001d9cu, 0x00001d90u, 0x0003003eu, 0x00001d9eu, 0x00001d7du, 0x0003003eu, 0x00001da0u, 0x00001d7eu, 0x0003003eu, 0x00001da2u, 0x00001d7fu, 0x0003003eu, 0x00001da4u, 0x00001d81u, 0x0003003eu, 0x00001da6u, 0x00001c49u, 0x0003003eu, 0x00001da8u, 0x00001c4du, 0x0003003eu, 0x00001daau, 0x00001c51u, 0x00100039u, 0x00000002u, 0x00001dacu, 0x000001d2u, 0x00001d95u, 0x00001d97u, 0x00001d99u, 0x00001d9au, 0x00001d9cu, 0x00001d9eu, 0x00001da0u, 0x00001da2u, 0x00001da4u, 0x00001da6u, 0x00001da8u, 0x00001daau, 0x0004003du, 0x00000006u, 0x00001dadu, 0x00001d95u, 0x0003003eu, 0x00001d82u, 0x00001dadu, 0x0004003du, 0x00000006u, 0x00001daeu, 0x00001d97u, 0x0003003eu, 0x00001d85u, 0x00001daeu, 0x0004003du, 0x00000012u, 0x00001dafu, 0x00001d99u, 0x0003003eu, 0x00001d94u, 0x00001dafu, 0x000200f9u, 0x00001d93u, 0x000200f8u, 0x00001d93u, 0x000700f5u, 0x00000012u, 0x0000f2a0u, 0x0000f2a6u, 0x00001d57u, 0x00001dafu, 0x00001d92u, 0x000700f5u, 0x00000006u, 0x0000f1f5u, 0x00001d88u, 0x00001d57u, 0x00001daeu, 0x00001d92u, 0x000700f5u, 0x00000006u, 0x0000f157u, 0x00001d84u, 0x00001d57u, 0x00001dadu, 0x00001d92u, 0x000300f7u, 0x00001db2u, 0x00000000u, 0x000400fau, 0x00001c7au, 0x00001db1u, 0x00001db2u, 0x000200f8u, 0x00001db1u, 0x0004003du, 0x00000006u, 0x00001db4u, 0x00000214u, 0x00080041u, 0x00000671u, 0x00001db6u, 0x00000a20u, 0x00000220u, 0x00001db4u, 0x0000022du, 0x0000f157u, 0x0004003du, 0x0000000fu, 0x00001db7u, 0x00001db6u, 0x00040071u, 0x00000006u, 0x00001db8u, 0x00001db7u, 0x0003003eu, 0x00001db3u, 0x00001db8u, 0x0003003eu, 0x00001dbau, 0x00001db8u, 0x00050039u, 0x00000023u, 0x00001dbcu, 0x00000026u, 0x00001dbau, 0x00050051u, 0x00000006u, 0x00007e40u, 0x00001dbcu, 0x00000000u, 0x0003003eu, 0x00007e32u, 0x00007e40u, 0x00050051u, 0x00000006u, 0x00007e41u, 0x00001dbcu, 0x00000001u, 0x0003003eu, 0x00007e33u, 0x00007e41u, 0x00050051u, 0x00000006u, 0x00007e42u, 0x00001dbcu, 0x00000002u, 0x0003003eu, 0x00007e34u, 0x00007e42u, 0x00050051u, 0x00000006u, 0x00007e43u, 0x00001dbcu, 0x00000003u, 0x0003003eu, 0x00007e35u, 0x00007e43u, 0x00050051u, 0x00000006u, 0x00007e44u, 0x00001dbcu, 0x00000004u, 0x0003003eu, 0x00007e36u, 0x00007e44u, 0x00050051u, 0x00000006u, 0x00007e45u, 0x00001dbcu, 0x00000005u, 0x0003003eu, 0x00007e37u, 0x00007e45u, 0x00050051u, 0x0000000fu, 0x00007e46u, 0x00001dbcu, 0x00000006u, 0x0003003eu, 0x00007e38u, 0x00007e46u, 0x00050051u, 0x0000000fu, 0x00007e47u, 0x00001dbcu, 0x00000007u, 0x0003003eu, 0x00007e39u, 0x00007e47u, 0x00050051u, 0x0000000fu, 0x00007e48u, 0x00001dbcu, 0x00000008u, 0x0003003eu, 0x00007e3au, 0x00007e48u, 0x00050051u, 0x0000000fu, 0x00007e49u, 0x00001dbcu, 0x00000009u, 0x0003003eu, 0x00007e3bu, 0x00007e49u, 0x00050051u, 0x0000000fu, 0x00007e4au, 0x00001dbcu, 0x0000000au, 0x0003003eu, 0x00007e3cu, 0x00007e4au, 0x00050051u, 0x0000000fu, 0x00007e4bu, 0x00001dbcu, 0x0000000bu, 0x0003003eu, 0x00007e3du, 0x00007e4bu, 0x00050051u, 0x0000000fu, 0x00007e4cu, 0x00001dbcu, 0x0000000cu, 0x0003003eu, 0x00007e3eu, 0x00007e4cu, 0x00050051u, 0x0000000fu, 0x00007e4du, 0x00001dbcu, 0x0000000du, 0x0003003eu, 0x00007e3fu, 0x00007e4du, 0x0003003eu, 0x00001dc0u, 0x00001dbcu, 0x0003003eu, 0x00001dc2u, 0x00001c15u, 0x0003003eu, 0x00001dc4u, 0x00001d7du, 0x0003003eu, 0x00001dc6u, 0x00001c2fu, 0x0003003eu, 0x00001dc8u, 0x00001c33u, 0x0003003eu, 0x00001dcau, 0x00001c38u, 0x0003003eu, 0x00001dccu, 0x00001c75u, 0x0003003eu, 0x00001dceu, 0x00000536u, 0x0003003eu, 0x00001dcfu, 0x00001dbfu, 0x000d0039u, 0x00000013u, 0x00001dd0u, 0x000001c2u, 0x00001dc0u, 0x00001dc2u, 0x00001dc4u, 0x00001dc6u, 0x00001dc8u, 0x00001dcau, 0x00001dccu, 0x00001dceu, 0x00001dcfu, 0x0003003eu, 0x00001dbdu, 0x00001dd0u, 0x000400a8u, 0x00000069u, 0x00001dd2u, 0x00001c38u, 0x000400a8u, 0x00000069u, 0x00001dd4u, 0x00001c93u, 0x000500a7u, 0x00000069u, 0x00001dd5u, 0x00001dd2u, 0x00001dd4u, 0x000300f7u, 0x00001dd7u, 0x00000000u, 0x000400fau, 0x00001dd5u, 0x00001dd6u, 0x00001dd7u, 0x000200f8u, 0x00001dd6u, 0x0003003eu, 0x00001dd8u, 0x00001dd0u, 0x0003003eu, 0x00001ddau, 0x00007e30u, 0x00060039u, 0x00000013u, 0x00001dddu, 0x000001d7u, 0x00001dd8u, 0x00001ddau, 0x0003003eu, 0x00001dbdu, 0x00001dddu, 0x000200f9u, 0x00001dd7u, 0x000200f8u, 0x00001dd7u, 0x000700f5u, 0x00000013u, 0x0000f225u, 0x00001dd0u, 0x00001db1u, 0x00001dddu, 0x00001dd6u, 0x000200f9u, 0x00001db2u, 0x000200f8u, 0x00001db2u, 0x000700f5u, 0x00000013u, 0x0000f21bu, 0x0000f222u, 0x00001d93u, 0x0000f225u, 0x00001dd7u, 0x000300f7u, 0x00001de0u, 0x00000000u, 0x000400fau, 0x00001c84u, 0x00001ddfu, 0x00001de0u, 0x000200f8u, 0x00001ddfu, 0x0004003du, 0x00000008u, 0x00001de5u, 0x00000213u, 0x00050082u, 0x00000008u, 0x00001de9u, 0x00001de5u, 0x00001bc4u, 0x00050080u, 0x00000008u, 0x00001deau, 0x00001de9u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00001debu, 0x00001bf1u, 0x00001deau, 0x00070041u, 0x00000692u, 0x00001decu, 0x000002dbu, 0x00000220u, 0x00001debu, 0x0000025du, 0x0004003du, 0x00000011u, 0x00001dedu, 0x00001decu, 0x00040071u, 0x00000006u, 0x00001deeu, 0x00001dedu, 0x000500abu, 0x00000069u, 0x00001defu, 0x00001deeu, 0x0000032du, 0x0003003eu, 0x00001de1u, 0x00001defu, 0x00040072u, 0x00000008u, 0x00001df3u, 0x00007dd0u, 0x000500afu, 0x00000069u, 0x00001df4u, 0x00001df3u, 0x0000025du, 0x0003003eu, 0x00001df0u, 0x00001df4u, 0x0004003du, 0x00000008u, 0x00001df6u, 0x00000212u, 0x000300f7u, 0x00001dfau, 0x00000000u, 0x000400fau, 0x00001cafu, 0x00001df9u, 0x00001dfdu, 0x000200f8u, 0x00001df9u, 0x0003003eu, 0x00001df8u, 0x00007dcfu, 0x000200f9u, 0x00001dfau, 0x000200f8u, 0x00001dfdu, 0x0003003eu, 0x00001df8u, 0x00007dceu, 0x000200f9u, 0x00001dfau, 0x000200f8u, 0x00001dfau, 0x000600a9u, 0x00000008u, 0x0000f3e1u, 0x00001cafu, 0x00007dcfu, 0x00007dceu, 0x000500aau, 0x00000069u, 0x00001e01u, 0x00001df6u, 0x0000f3e1u, 0x0003003eu, 0x00001df5u, 0x00001e01u, 0x000500a7u, 0x00000069u, 0x00001e04u, 0x00001e01u, 0x00001df4u, 0x000500a7u, 0x00000069u, 0x00001e06u, 0x00001e04u, 0x00001defu, 0x000300f7u, 0x00001e08u, 0x00000000u, 0x000400fau, 0x00001e06u, 0x00001e07u, 0x00001e28u, 0x000200f8u, 0x00001e07u, 0x0004003du, 0x00000008u, 0x00001e0du, 0x00000213u, 0x00050082u, 0x00000008u, 0x00001e11u, 0x00001e0du, 0x00001bc4u, 0x00050080u, 0x00000008u, 0x00001e12u, 0x00001e11u, 0x0000022au, 0x00050080u, 0x00000008u, 0x00001e13u, 0x00001bf1u, 0x00001e12u, 0x00070041u, 0x00001e14u, 0x00001e15u, 0x000002dbu, 0x00000220u, 0x00001e13u, 0x0000022au, 0x0004003du, 0x00000009u, 0x00001e16u, 0x00001e15u, 0x0008004fu, 0x00000044u, 0x00001e17u, 0x00001e16u, 0x00001e16u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x00000044u, 0x00001e19u, 0x00001e17u, 0x0000f39eu, 0x0003003eu, 0x00001e09u, 0x00001e19u, 0x000300f7u, 0x00001e1cu, 0x00000000u, 0x000400fau, 0x00001c44u, 0x00001e1bu, 0x00001e24u, 0x000200f8u, 0x00001e1bu, 0x0003003eu, 0x00001e1eu, 0x00001e19u, 0x00060039u, 0x000000efu, 0x00001e22u, 0x000000fbu, 0x00001e1eu, 0x00001e20u, 0x0004003du, 0x00000069u, 0x00001e23u, 0x00001e20u, 0x0003003eu, 0x00001e1du, 0x00001e23u, 0x0003003eu, 0x00001d5fu, 0x00001e22u, 0x000200f9u, 0x00001e1cu, 0x000200f8u, 0x00001e24u, 0x0003003eu, 0x00001e25u, 0x00001e19u, 0x00050039u, 0x000000efu, 0x00001e27u, 0x000000f6u, 0x00001e25u, 0x0003003eu, 0x00001d5fu, 0x00001e27u, 0x000200f9u, 0x00001e1cu, 0x000200f8u, 0x00001e1cu, 0x000700f5u, 0x000000efu, 0x0000f201u, 0x00001e22u, 0x00001e1bu, 0x00001e27u, 0x00001e24u, 0x000200f9u, 0x00001e08u, 0x000200f8u, 0x00001e28u, 0x00050084u, 0x00000008u, 0x00001e2bu, 0x00001d40u, 0x00000882u, 0x00050080u, 0x00000008u, 0x00001e2cu, 0x00001d3du, 0x00001e2bu, 0x0003003eu, 0x00001e2du, 0x00007dcau, 0x0003003eu, 0x00001e30u, 0x00007de2u, 0x0003003eu, 0x00001e33u, 0x00001e2cu, 0x0003003eu, 0x00001e34u, 0x00001c44u, 0x00080039u, 0x000000efu, 0x00001e36u, 0x00000116u, 0x00001e2du, 0x00001e30u, 0x00001e33u, 0x00001e34u, 0x0003003eu, 0x00001d5fu, 0x00001e36u, 0x000200f9u, 0x00001e08u, 0x000200f8u, 0x00001e08u, 0x000700f5u, 0x000000efu, 0x0000f200u, 0x0000f201u, 0x00001e1cu, 0x00001e36u, 0x00001e28u, 0x0003003eu, 0x00001d85u, 0x0000f157u, 0x0003003eu, 0x00001c7bu, 0x00000559u, 0x000200f9u, 0x00001de0u, 0x000200f8u, 0x00001de0u, 0x000700f5u, 0x000000efu, 0x0000f1fdu, 0x00001d7du, 0x00001db2u, 0x0000f200u, 0x00001e08u, 0x000600a9u, 0x00000006u, 0x0000f3e2u, 0x00001c84u, 0x0000f157u, 0x0000f1f5u, 0x000600a9u, 0x00000069u, 0x0000f3e3u, 0x00001c84u, 0x00000559u, 0x00001c7fu, 0x000300f7u, 0x00001e3au, 0x00000000u, 0x000400fau, 0x0000f3e3u, 0x00001e39u, 0x00001e3au, 0x000200f8u, 0x00001e39u, 0x000400a8u, 0x00000069u, 0x00001e3du, 0x00001c98u, 0x000500a7u, 0x00000069u, 0x00001e3eu, 0x00001c8eu, 0x00001e3du, 0x000300f7u, 0x00001e40u, 0x00000000u, 0x000400fau, 0x00001e3eu, 0x00001e3fu, 0x00001e48u, 0x000200f8u, 0x00001e3fu, 0x0003003eu, 0x00001e42u, 0x0000f21bu, 0x0003003eu, 0x00001e44u, 0x00007e30u, 0x00060039u, 0x00000013u, 0x00001e47u, 0x000001d7u, 0x00001e42u, 0x00001e44u, 0x0003003eu, 0x00001e41u, 0x00001e47u, 0x000200f9u, 0x00001e40u, 0x000200f8u, 0x00001e48u, 0x0004003du, 0x00000006u, 0x00001e4au, 0x00000214u, 0x00080041u, 0x00000671u, 0x00001e4cu, 0x00000a20u, 0x00000220u, 0x00001e4au, 0x0000022du, 0x0000f3e2u, 0x0004003du, 0x0000000fu, 0x00001e4du, 0x00001e4cu, 0x00040071u, 0x00000006u, 0x00001e4eu, 0x00001e4du, 0x0003003eu, 0x00001e49u, 0x00001e4eu, 0x0003003eu, 0x00001e50u, 0x00001e4eu, 0x00050039u, 0x00000023u, 0x00001e52u, 0x00000026u, 0x00001e50u, 0x00050051u, 0x00000006u, 0x00007e6bu, 0x00001e52u, 0x00000000u, 0x0003003eu, 0x00007e5du, 0x00007e6bu, 0x00050051u, 0x00000006u, 0x00007e6cu, 0x00001e52u, 0x00000001u, 0x0003003eu, 0x00007e5eu, 0x00007e6cu, 0x00050051u, 0x00000006u, 0x00007e6du, 0x00001e52u, 0x00000002u, 0x0003003eu, 0x00007e5fu, 0x00007e6du, 0x00050051u, 0x00000006u, 0x00007e6eu, 0x00001e52u, 0x00000003u, 0x0003003eu, 0x00007e60u, 0x00007e6eu, 0x00050051u, 0x00000006u, 0x00007e6fu, 0x00001e52u, 0x00000004u, 0x0003003eu, 0x00007e61u, 0x00007e6fu, 0x00050051u, 0x00000006u, 0x00007e70u, 0x00001e52u, 0x00000005u, 0x0003003eu, 0x00007e62u, 0x00007e70u, 0x00050051u, 0x0000000fu, 0x00007e71u, 0x00001e52u, 0x00000006u, 0x0003003eu, 0x00007e63u, 0x00007e71u, 0x00050051u, 0x0000000fu, 0x00007e72u, 0x00001e52u, 0x00000007u, 0x0003003eu, 0x00007e64u, 0x00007e72u, 0x00050051u, 0x0000000fu, 0x00007e73u, 0x00001e52u, 0x00000008u, 0x0003003eu, 0x00007e65u, 0x00007e73u, 0x00050051u, 0x0000000fu, 0x00007e74u, 0x00001e52u, 0x00000009u, 0x0003003eu, 0x00007e66u, 0x00007e74u, 0x00050051u, 0x0000000fu, 0x00007e75u, 0x00001e52u, 0x0000000au, 0x0003003eu, 0x00007e67u, 0x00007e75u, 0x00050051u, 0x0000000fu, 0x00007e76u, 0x00001e52u, 0x0000000bu, 0x0003003eu, 0x00007e68u, 0x00007e76u, 0x00050051u, 0x0000000fu, 0x00007e77u, 0x00001e52u, 0x0000000cu, 0x0003003eu, 0x00007e69u, 0x00007e77u, 0x00050051u, 0x0000000fu, 0x00007e78u, 0x00001e52u, 0x0000000du, 0x0003003eu, 0x00007e6au, 0x00007e78u, 0x0003003eu, 0x00001e53u, 0x00001e52u, 0x0003003eu, 0x00001e55u, 0x00001c15u, 0x0003003eu, 0x00001e57u, 0x0000f1fdu, 0x0003003eu, 0x00001e59u, 0x00001c2fu, 0x0003003eu, 0x00001e5bu, 0x00001c33u, 0x0003003eu, 0x00001e5du, 0x00001c38u, 0x0003003eu, 0x00001e5fu, 0x00001c75u, 0x0003003eu, 0x00001e61u, 0x00001c8eu, 0x0003003eu, 0x00001e63u, 0x0000f21bu, 0x000d0039u, 0x00000013u, 0x00001e65u, 0x000001c2u, 0x00001e53u, 0x00001e55u, 0x00001e57u, 0x00001e59u, 0x00001e5bu, 0x00001e5du, 0x00001e5fu, 0x00001e61u, 0x00001e63u, 0x0003003eu, 0x00001e41u, 0x00001e65u, 0x000400a8u, 0x00000069u, 0x00001e67u, 0x00001c38u, 0x000400a8u, 0x00000069u, 0x00001e69u, 0x00001c2fu, 0x000500a7u, 0x00000069u, 0x00001e6au, 0x00001e67u, 0x00001e69u, 0x000500a7u, 0x00000069u, 0x00001e6du, 0x00001e6au, 0x00001e3du, 0x000300f7u, 0x00001e6fu, 0x00000000u, 0x000400fau, 0x00001e6du, 0x00001e6eu, 0x00001e6fu, 0x000200f8u, 0x00001e6eu, 0x0003003eu, 0x00001e70u, 0x00001e65u, 0x0003003eu, 0x00001e72u, 0x00007e30u, 0x00060039u, 0x00000013u, 0x00001e75u, 0x000001d7u, 0x00001e70u, 0x00001e72u, 0x0003003eu, 0x00001e41u, 0x00001e75u, 0x000200f9u, 0x00001e6fu, 0x000200f8u, 0x00001e6fu, 0x000700f5u, 0x00000013u, 0x0000f29cu, 0x00001e65u, 0x00001e48u, 0x00001e75u, 0x00001e6eu, 0x000200f9u, 0x00001e40u, 0x000200f8u, 0x00001e40u, 0x000700f5u, 0x00000013u, 0x0000f29bu, 0x00001e47u, 0x00001e3fu, 0x0000f29cu, 0x00001e6fu, 0x000200f9u, 0x00001e3au, 0x000200f8u, 0x00001e3au, 0x000700f5u, 0x00000013u, 0x0000f28cu, 0x0000f222u, 0x00001de0u, 0x0000f29bu, 0x00001e40u, 0x0004003du, 0x00000008u, 0x00001e76u, 0x00000213u, 0x000600a9u, 0x00000008u, 0x00001e78u, 0x00001c5du, 0x0000022au, 0x00000220u, 0x000500c3u, 0x00000008u, 0x00001e79u, 0x00001e76u, 0x00001e78u, 0x000500c3u, 0x00000008u, 0x00001e7bu, 0x00007defu, 0x0000022du, 0x000500c7u, 0x00000008u, 0x00001e7du, 0x00007defu, 0x00000230u, 0x0004003du, 0x00000008u, 0x00001e81u, 0x00000212u, 0x0003003eu, 0x00001e80u, 0x00001e81u, 0x0003003eu, 0x00001e82u, 0x00001e79u, 0x0003003eu, 0x00001e83u, 0x00001e7bu, 0x0003003eu, 0x00001e84u, 0x00001e7du, 0x000a0039u, 0x00000002u, 0x00001e87u, 0x00000054u, 0x00001e80u, 0x00001e82u, 0x00001e83u, 0x00001e84u, 0x00001e85u, 0x00001e86u, 0x0004003du, 0x00000008u, 0x00001e88u, 0x00001e85u, 0x0003003eu, 0x00001e7eu, 0x00001e88u, 0x0004003du, 0x00000008u, 0x00001e89u, 0x00001e86u, 0x0003003eu, 0x00001e7fu, 0x00001e89u, 0x000300f7u, 0x00001e8cu, 0x00000000u, 0x000400fau, 0x00001c59u, 0x00001e8bu, 0x00001ed8u, 0x000200f8u, 0x00001e8bu, 0x0004003du, 0x00000010u, 0x00001e96u, 0x00001d41u, 0x00040039u, 0x00000012u, 0x00001e9au, 0x0000003au, 0x000d0050u, 0x000001e4u, 0x00001e9bu, 0x00007e26u, 0x00007e27u, 0x00007e28u, 0x00007e29u, 0x00001e96u, 0x00001dbfu, 0x0000f21bu, 0x0000f28cu, 0x0000f2a0u, 0x00001e9au, 0x0003003eu, 0x00007e88u, 0x00007e26u, 0x0003003eu, 0x00007e89u, 0x00007e27u, 0x0003003eu, 0x00007e8au, 0x00007e28u, 0x0003003eu, 0x00007e8bu, 0x00007e29u, 0x0003003eu, 0x00007e8cu, 0x00001e96u, 0x0003003eu, 0x00007e8du, 0x00001dbfu, 0x0003003eu, 0x00007e8eu, 0x0000f21bu, 0x0003003eu, 0x00007e8fu, 0x0000f28cu, 0x0003003eu, 0x00007e90u, 0x0000f2a0u, 0x0003003eu, 0x00007e91u, 0x00001e9au, 0x0003003eu, 0x00001e9du, 0x00001e9bu, 0x0003003eu, 0x00001e9fu, 0x00007deau, 0x0003003eu, 0x00001ea1u, 0x00007debu, 0x0003003eu, 0x00001ea3u, 0x00001e89u, 0x0003003eu, 0x00001ea5u, 0x00001d29u, 0x0003003eu, 0x00001ea7u, 0x00001c3cu, 0x0003003eu, 0x00001ea9u, 0x00001c40u, 0x0003003eu, 0x00001eabu, 0x00001c6bu, 0x000d0039u, 0x00000013u, 0x00001eaeu, 0x00000205u, 0x00001e9du, 0x00001e9fu, 0x00001ea1u, 0x00001ea3u, 0x00001ea5u, 0x00001ea7u, 0x00001ea9u, 0x00001eabu, 0x00001eadu, 0x0004003du, 0x0000000fu, 0x00001eafu, 0x00001eadu, 0x0003003eu, 0x00001e9cu, 0x00001eafu, 0x0003003eu, 0x00007e8du, 0x00001eaeu, 0x0003003eu, 0x00007e88u, 0x00007e2au, 0x0003003eu, 0x00007e89u, 0x00007e2bu, 0x0003003eu, 0x00007e8au, 0x00007e2cu, 0x0003003eu, 0x00007e8bu, 0x00007e2du, 0x0003003eu, 0x00001ebdu, 0x0000f21bu, 0x0003003eu, 0x00007e8eu, 0x0000f28cu, 0x0003003eu, 0x00007e8fu, 0x0000f21bu, 0x000d0050u, 0x000001e4u, 0x00007eb1u, 0x00007e2au, 0x00007e2bu, 0x00007e2cu, 0x00007e2du, 0x00001e96u, 0x00001eaeu, 0x0000f28cu, 0x0000f21bu, 0x0000f2a0u, 0x00001e9au, 0x0003003eu, 0x00001ec6u, 0x00007eb1u, 0x0003003eu, 0x00001ec8u, 0x00007decu, 0x0003003eu, 0x00001ecau, 0x00007dedu, 0x0003003eu, 0x00001eccu, 0x00001e89u, 0x0003003eu, 0x00001eceu, 0x00001d29u, 0x0003003eu, 0x00001ed0u, 0x00001c3cu, 0x0003003eu, 0x00001ed2u, 0x00001c40u, 0x000b0039u, 0x00000013u, 0x00001ed4u, 0x0000020fu, 0x00001ec6u, 0x00001ec8u, 0x00001ecau, 0x00001eccu, 0x00001eceu, 0x00001ed0u, 0x00001ed2u, 0x0004003du, 0x00000008u, 0x00001ed5u, 0x00001eceu, 0x0003003eu, 0x00001d27u, 0x00001ed5u, 0x00040072u, 0x00000b15u, 0x00001ed6u, 0x00001ed4u, 0x0004007cu, 0x00000010u, 0x00001ed7u, 0x00001ed6u, 0x0003003eu, 0x00001ec5u, 0x00001ed7u, 0x000200f9u, 0x00001e8cu, 0x000200f8u, 0x00001ed8u, 0x0004003du, 0x00000010u, 0x00001ee2u, 0x00001d41u, 0x00040039u, 0x00000012u, 0x00001ee6u, 0x0000003au, 0x000d0050u, 0x000001e4u, 0x00001ee7u, 0x00007e2au, 0x00007e2bu, 0x00007e2cu, 0x00007e2du, 0x00001ee2u, 0x00001dbfu, 0x0000f21bu, 0x0000f28cu, 0x0000f2a0u, 0x00001ee6u, 0x0003003eu, 0x00007eb2u, 0x00007e2au, 0x0003003eu, 0x00007eb3u, 0x00007e2bu, 0x0003003eu, 0x00007eb4u, 0x00007e2cu, 0x0003003eu, 0x00007eb5u, 0x00007e2du, 0x0003003eu, 0x00007eb6u, 0x00001ee2u, 0x0003003eu, 0x00007eb7u, 0x00001dbfu, 0x0003003eu, 0x00007eb8u, 0x0000f21bu, 0x0003003eu, 0x00007eb9u, 0x0000f28cu, 0x0003003eu, 0x00007ebau, 0x0000f2a0u, 0x0003003eu, 0x00007ebbu, 0x00001ee6u, 0x0003003eu, 0x00001ee8u, 0x00001ee7u, 0x0003003eu, 0x00001eeau, 0x00007decu, 0x0003003eu, 0x00001eecu, 0x00007dedu, 0x0003003eu, 0x00001eeeu, 0x00001e89u, 0x0003003eu, 0x00001ef0u, 0x00001d29u, 0x0003003eu, 0x00001ef2u, 0x00001c3cu, 0x0003003eu, 0x00001ef4u, 0x00001c40u, 0x000b0039u, 0x00000013u, 0x00001ef6u, 0x0000020fu, 0x00001ee8u, 0x00001eeau, 0x00001eecu, 0x00001eeeu, 0x00001ef0u, 0x00001ef2u, 0x00001ef4u, 0x0004003du, 0x00000008u, 0x00001ef7u, 0x00001ef0u, 0x0003003eu, 0x00001d27u, 0x00001ef7u, 0x00040072u, 0x00000b15u, 0x00001ef8u, 0x00001ef6u, 0x0004007cu, 0x00000010u, 0x00001ef9u, 0x00001ef8u, 0x0003003eu, 0x00001ec5u, 0x00001ef9u, 0x00050041u, 0x0000007bu, 0x00001efau, 0x00001ec5u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001efbu, 0x00001efau, 0x0003003eu, 0x00001e9cu, 0x00001efbu, 0x000200f9u, 0x00001e8cu, 0x000200f8u, 0x00001e8cu, 0x000700f5u, 0x0000000fu, 0x0000f36eu, 0x00001eafu, 0x00001e8bu, 0x00001efbu, 0x00001ed8u, 0x000700f5u, 0x00000008u, 0x0000f35cu, 0x00001ed5u, 0x00001e8bu, 0x00001ef7u, 0x00001ed8u, 0x000500aau, 0x00000069u, 0x00001efeu, 0x0000f35cu, 0x00000220u, 0x000500a7u, 0x00000069u, 0x00001effu, 0x00001c55u, 0x00001efeu, 0x000300f7u, 0x00001f01u, 0x00000000u, 0x000400fau, 0x00001effu, 0x00001f00u, 0x00001f01u, 0x000200f8u, 0x00001f00u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001f01u, 0x000300f7u, 0x00001f05u, 0x00000000u, 0x000400fau, 0x00001c6bu, 0x00001f04u, 0x00001f05u, 0x000200f8u, 0x00001f04u, 0x000300f7u, 0x00001f08u, 0x00000000u, 0x000400fau, 0x00001c70u, 0x00001f07u, 0x00001f0bu, 0x000200f8u, 0x00001f07u, 0x00040039u, 0x0000000fu, 0x00001f0au, 0x00000042u, 0x0003003eu, 0x00001f09u, 0x00001f0au, 0x000200f9u, 0x00001f08u, 0x000200f8u, 0x00001f0bu, 0x00050041u, 0x0000007bu, 0x00007e31u, 0x00007e23u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001f0du, 0x00007e31u, 0x0003003eu, 0x00001f09u, 0x00001f0du, 0x000200f9u, 0x00001f08u, 0x000200f8u, 0x00001f08u, 0x000700f5u, 0x0000000fu, 0x0000f36fu, 0x00001f0au, 0x00001f07u, 0x00001f0du, 0x00001f0bu, 0x000500b0u, 0x00000069u, 0x00001f10u, 0x0000f36eu, 0x0000f36fu, 0x000300f7u, 0x00001f12u, 0x00000000u, 0x000400fau, 0x00001f10u, 0x00001f11u, 0x00001f12u, 0x000200f8u, 0x00001f11u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000536u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001f12u, 0x000200f9u, 0x00001f05u, 0x000200f8u, 0x00001f05u, 0x0004003du, 0x00000010u, 0x00001f14u, 0x00001ec5u, 0x00050041u, 0x00000068u, 0x00001f15u, 0x00000215u, 0x00000220u, 0x0003003eu, 0x00001f15u, 0x00001f14u, 0x000500c4u, 0x00000008u, 0x00001f17u, 0x00001d80u, 0x00000260u, 0x000500c5u, 0x00000008u, 0x00001f19u, 0x00001f17u, 0x00001e88u, 0x00050041u, 0x00000046u, 0x00001f1au, 0x00000215u, 0x0000022au, 0x0003003eu, 0x00001f1au, 0x00001f19u, 0x00040072u, 0x0000037bu, 0x00001f1cu, 0x0000f35cu, 0x0004007cu, 0x0000000fu, 0x00001f1du, 0x00001f1cu, 0x00050041u, 0x0000007bu, 0x00001f1eu, 0x00000215u, 0x0000022du, 0x0003003eu, 0x00001f1eu, 0x00001f1du, 0x00050041u, 0x0000007bu, 0x00001f1fu, 0x00001d41u, 0x00000464u, 0x0004003du, 0x0000000fu, 0x00001f20u, 0x00001f1fu, 0x00040071u, 0x00000006u, 0x00001f21u, 0x00001f20u, 0x0004007cu, 0x00000008u, 0x00001f22u, 0x00001f21u, 0x00050080u, 0x00000008u, 0x00001f24u, 0x00001f22u, 0x00001e89u, 0x0007000cu, 0x00000008u, 0x00001f25u, 0x00000001u, 0x00000027u, 0x00001f24u, 0x0000035eu, 0x00040072u, 0x0000037bu, 0x00001f26u, 0x00001f25u, 0x0004007cu, 0x0000000fu, 0x00001f27u, 0x00001f26u, 0x00050041u, 0x0000007bu, 0x00001f28u, 0x00000215u, 0x00000230u, 0x0003003eu, 0x00001f28u, 0x00001f27u, 0x0003003eu, 0x00001fffu, 0x00000559u, 0x0003003eu, 0x00001ffcu, 0x00000559u, 0x000200f9u, 0x00001ffbu, 0x000200f8u, 0x00001ffbu, 0x001900f5u, 0x00000069u, 0x0000f398u, 0x00000536u, 0x00001bd1u, 0x00000536u, 0x00001bfeu, 0x00000536u, 0x00001cc1u, 0x00000536u, 0x00001d01u, 0x00000559u, 0x00001d02u, 0x00001d14u, 0x00001d0fu, 0x00000536u, 0x00001d24u, 0x00000536u, 0x00001d32u, 0x00000536u, 0x00001f00u, 0x00000536u, 0x00001f11u, 0x00000559u, 0x00001f05u, 0x000200feu, 0x0000f398u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000193bu, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000007f6u, 0x00000800u, 0x0000087cu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x000000a2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000a2u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000a2u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000a2u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000a2u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000000a2u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000a2u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000000a2u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000000a2u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000a2u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000000a2u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000000a2u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000000a2u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x000000a2u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x000000a2u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000000a3u, 0x00000006u, 0x00000038u, 0x00040048u, 0x000000a4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000a4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000a4u, 0x00000002u, 0x00040047u, 0x000000a6u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000000a6u, 0x00000021u, 0x00000002u, 0x00050048u, 0x00000106u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000106u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000106u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000106u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000106u, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x00000106u, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000106u, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x00000107u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000108u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000108u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000108u, 0x00000002u, 0x00040047u, 0x0000010au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000010au, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000259u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000259u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000367u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000036du, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000376u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000377u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000377u, 0x00000002u, 0x00040047u, 0x00000379u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000379u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000385u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000386u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000386u, 0x00000002u, 0x00040047u, 0x00000388u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000388u, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000039au, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000039bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000039bu, 0x00000002u, 0x00040047u, 0x0000039du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000039du, 0x00000021u, 0x00000000u, 0x00040047u, 0x000003e6u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000003e7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003e7u, 0x00000002u, 0x00040047u, 0x000003e9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003e9u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000049eu, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000564u, 0x00000001u, 0x00000002u, 0x00040047u, 0x0000071cu, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000071du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000071du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000071du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x0000071eu, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000071fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000071fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000071fu, 0x00000002u, 0x00040047u, 0x00000721u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000721u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000007f6u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00000800u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000809u, 0x00000001u, 0x00000006u, 0x00040047u, 0x0000080au, 0x00000001u, 0x00000003u, 0x00040047u, 0x0000080bu, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000080cu, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00000814u, 0x00000001u, 0x00000005u, 0x00040047u, 0x00000819u, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000081au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000081au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000081au, 0x00000002u, 0x00040047u, 0x0000081cu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000081cu, 0x00000021u, 0x0000000cu, 0x00050048u, 0x00000820u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000820u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000820u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000820u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000820u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x00000820u, 0x00000002u, 0x00040047u, 0x0000084du, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000084eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000084eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000084eu, 0x00000002u, 0x00040047u, 0x00000850u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000850u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000857u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000858u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000858u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000858u, 0x00000002u, 0x00040047u, 0x0000085au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000085au, 0x00000021u, 0x0000000bu, 0x00040047u, 0x0000087cu, 0x0000000bu, 0x0000001du, 0x00040047u, 0x00000881u, 0x00000006u, 0x00000001u, 0x00040048u, 0x00000882u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000882u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000882u, 0x00000002u, 0x00040047u, 0x00000884u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000884u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000008a0u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008a1u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008a1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008a1u, 0x00000002u, 0x00040047u, 0x000008a3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008a3u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008aeu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008afu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008afu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008afu, 0x00000002u, 0x00040047u, 0x000008b1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008b1u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008b8u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008b9u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008b9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008b9u, 0x00000002u, 0x00040047u, 0x000008bbu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008bbu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000008c1u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000008c2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008c2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008c2u, 0x00000002u, 0x00040047u, 0x000008c4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008c4u, 0x00000021u, 0x00000005u, 0x00040047u, 0x000008fdu, 0x00000006u, 0x00000002u, 0x00050048u, 0x000008feu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000008ffu, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000900u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000900u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000900u, 0x00000002u, 0x00040047u, 0x00000902u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000902u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000904u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000905u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000906u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000907u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000907u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000907u, 0x00000002u, 0x00040047u, 0x00000909u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000909u, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000090au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000090au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000090au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000090au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000090au, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x0000090au, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000090au, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000090au, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000090au, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000090au, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000090au, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000090bu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000090cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000090cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000090cu, 0x00000002u, 0x00040047u, 0x0000090eu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000090eu, 0x00000021u, 0x00000000u, 0x00050048u, 0x0000090fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000090fu, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000090fu, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000090fu, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000090fu, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000090fu, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x0000090fu, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x0000090fu, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000910u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000911u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000911u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000911u, 0x00000002u, 0x00040047u, 0x00000913u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000913u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000914u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000915u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000915u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000915u, 0x00000002u, 0x00040047u, 0x00000917u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000917u, 0x00000021u, 0x00000003u, 0x00050048u, 0x00000918u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000918u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000918u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000918u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000918u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000918u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000918u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000918u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000919u, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000091au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000091au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000091au, 0x00000002u, 0x00040047u, 0x0000091cu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000091cu, 0x00000021u, 0x00000004u, 0x00050048u, 0x0000091du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000091du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000091du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000091du, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000091du, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000091du, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000091du, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000091du, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x0000091du, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x0000091du, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x0000091du, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000091du, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x0000091du, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000091du, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000091eu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000091fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000091fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000091fu, 0x00000002u, 0x00040047u, 0x00000921u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000921u, 0x00000021u, 0x00000007u, 0x00050048u, 0x00000923u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000923u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000923u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000923u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000923u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000923u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000923u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000923u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000923u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000924u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000925u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000925u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000925u, 0x00000002u, 0x00040047u, 0x00000927u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000927u, 0x00000021u, 0x00000008u, 0x00050048u, 0x00000928u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000928u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000928u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000928u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000929u, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000092au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000092au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000092au, 0x00000002u, 0x00040047u, 0x0000092cu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000092cu, 0x00000021u, 0x00000009u, 0x00050048u, 0x0000092du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000092du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000092du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000092du, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000092eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000092eu, 0x00000002u, 0x00040047u, 0x00000930u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000930u, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x0011001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x0009001eu, 0x0000000fu, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000010u, 0x0000000fu, 0x00000007u, 0x00040017u, 0x00000014u, 0x00000008u, 0x00000003u, 0x00040020u, 0x00000015u, 0x00000007u, 0x00000014u, 0x00040020u, 0x00000016u, 0x00000007u, 0x00000008u, 0x00050021u, 0x00000017u, 0x00000014u, 0x00000015u, 0x00000016u, 0x00040021u, 0x0000001cu, 0x00000008u, 0x00000016u, 0x0007001eu, 0x00000029u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000029u, 0x00040020u, 0x0000002bu, 0x00000007u, 0x00000009u, 0x00020014u, 0x0000002cu, 0x00040020u, 0x0000002du, 0x00000007u, 0x0000002cu, 0x00040017u, 0x0000002eu, 0x00000008u, 0x00000002u, 0x00040020u, 0x0000002fu, 0x00000007u, 0x0000002eu, 0x000b0021u, 0x00000030u, 0x00000014u, 0x0000002au, 0x0000002bu, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002fu, 0x0000002du, 0x00110021u, 0x0000003eu, 0x0000002cu, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x0000002du, 0x00000016u, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002fu, 0x00070021u, 0x0000004fu, 0x00000008u, 0x00000016u, 0x00000016u, 0x0000002du, 0x00000016u, 0x00050021u, 0x00000056u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x0000006bu, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000006cu, 0x00000007u, 0x0000006bu, 0x00080021u, 0x0000006du, 0x00000002u, 0x0000006cu, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x00000075u, 0x00000002u, 0x0000006cu, 0x00000007u, 0x00040021u, 0x00000081u, 0x00000009u, 0x0000002du, 0x00040021u, 0x00000085u, 0x00000002u, 0x0000002bu, 0x00040021u, 0x0000008du, 0x00000002u, 0x00000007u, 0x0006001eu, 0x00000091u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x00000092u, 0x00000007u, 0x00000091u, 0x00070021u, 0x00000093u, 0x00000002u, 0x00000016u, 0x00000016u, 0x00000007u, 0x00000092u, 0x00040020u, 0x0000009au, 0x00000006u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x0000009cu, 0x00000000u, 0x00040015u, 0x0000009du, 0x00000008u, 0x00000000u, 0x00040017u, 0x0000009eu, 0x0000009du, 0x00000004u, 0x00040015u, 0x0000009fu, 0x00000010u, 0x00000000u, 0x00040015u, 0x000000a0u, 0x00000010u, 0x00000001u, 0x00040017u, 0x000000a1u, 0x000000a0u, 0x00000004u, 0x0011001eu, 0x000000a2u, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x00000006u, 0x0000009fu, 0x0000009du, 0x0000009du, 0x000000a1u, 0x0003001du, 0x000000a3u, 0x000000a2u, 0x0003001eu, 0x000000a4u, 0x000000a3u, 0x00040020u, 0x000000a5u, 0x0000000cu, 0x000000a4u, 0x0004003bu, 0x000000a5u, 0x000000a6u, 0x0000000cu, 0x00040020u, 0x000000a8u, 0x0000000cu, 0x0000009eu, 0x00040017u, 0x000000abu, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000000afu, 0x00000001u, 0x0004002bu, 0x00000008u, 0x000000b5u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x000000bbu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000000c1u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000000c7u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x000000cdu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000000d3u, 0x00000007u, 0x0004002bu, 0x00000008u, 0x000000d9u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x000000dfu, 0x00000009u, 0x0004002bu, 0x00000008u, 0x000000e5u, 0x0000000au, 0x00040020u, 0x000000e6u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000000eau, 0x0000000bu, 0x00040020u, 0x000000ebu, 0x0000000cu, 0x0000009fu, 0x0004002bu, 0x00000008u, 0x000000f1u, 0x0000000cu, 0x00040020u, 0x000000f2u, 0x0000000cu, 0x0000009du, 0x0004002bu, 0x00000008u, 0x000000f8u, 0x0000000du, 0x0004002bu, 0x00000008u, 0x000000feu, 0x0000000eu, 0x00040020u, 0x000000ffu, 0x0000000cu, 0x000000a1u, 0x0009001eu, 0x00000106u, 0x0000009eu, 0x0000009eu, 0x00000006u, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0003001du, 0x00000107u, 0x00000106u, 0x0003001eu, 0x00000108u, 0x00000107u, 0x00040020u, 0x00000109u, 0x0000000cu, 0x00000108u, 0x0004003bu, 0x00000109u, 0x0000010au, 0x0000000cu, 0x0006002cu, 0x00000014u, 0x00000128u, 0x0000009cu, 0x000000bbu, 0x000000cdu, 0x0004002bu, 0x00000008u, 0x0000012eu, 0x000000f8u, 0x0004002bu, 0x00000008u, 0x00000133u, 0x000000ffu, 0x0006002cu, 0x00000014u, 0x00000134u, 0x00000133u, 0x00000133u, 0x00000133u, 0x0004002bu, 0x00000008u, 0x00000136u, 0x000000f7u, 0x0006002cu, 0x00000014u, 0x00000137u, 0x00000136u, 0x00000136u, 0x00000136u, 0x00040017u, 0x00000138u, 0x0000002cu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000141u, 0x0000001fu, 0x0004002bu, 0x00000008u, 0x0000015du, 0x000007ffu, 0x0004002bu, 0x00000008u, 0x00000164u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x00000170u, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x00000175u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000193u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x000001b8u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000001dau, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000001e0u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000222u, 0x0000003cu, 0x00090019u, 0x00000257u, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000258u, 0x00000000u, 0x00000257u, 0x0004003bu, 0x00000258u, 0x00000259u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000295u, 0x0000000fu, 0x0003002au, 0x0000002cu, 0x00000298u, 0x0004002bu, 0x00000008u, 0x000002a8u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x000002aeu, 0x00000010u, 0x00030029u, 0x0000002cu, 0x000002b3u, 0x0004002bu, 0x00000008u, 0x000002b4u, 0x0000ffffu, 0x00040032u, 0x00000008u, 0x00000367u, 0x00000000u, 0x00040032u, 0x00000006u, 0x0000036du, 0x00000000u, 0x00060034u, 0x00000006u, 0x0000036eu, 0x00000082u, 0x0000036du, 0x000001dau, 0x0003001du, 0x00000376u, 0x0000009du, 0x0003001eu, 0x00000377u, 0x00000376u, 0x00040020u, 0x00000378u, 0x0000000cu, 0x00000377u, 0x0004003bu, 0x00000378u, 0x00000379u, 0x0000000cu, 0x00040020u, 0x00000380u, 0x00000006u, 0x00000009u, 0x0004003bu, 0x00000380u, 0x00000381u, 0x00000006u, 0x0003001du, 0x00000385u, 0x0000009du, 0x0003001eu, 0x00000386u, 0x00000385u, 0x00040020u, 0x00000387u, 0x0000000cu, 0x00000386u, 0x0004003bu, 0x00000387u, 0x00000388u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000391u, 0x000000c2u, 0x0000036eu, 0x000001dau, 0x00060034u, 0x00000006u, 0x00000395u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x0003001du, 0x0000039au, 0x0000009fu, 0x0003001eu, 0x0000039bu, 0x0000039au, 0x00040020u, 0x0000039cu, 0x0000000cu, 0x0000039bu, 0x0004003bu, 0x0000039cu, 0x0000039du, 0x0000000cu, 0x00040017u, 0x000003a3u, 0x00000006u, 0x00000003u, 0x00040020u, 0x000003a4u, 0x00000007u, 0x000003a3u, 0x0004002bu, 0x00000006u, 0x000003a7u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000003aeu, 0x000000f8u, 0x00060034u, 0x00000006u, 0x000003c6u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x0004002bu, 0x00000006u, 0x000003d5u, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000003ddu, 0x000000c2u, 0x0000036eu, 0x00000193u, 0x00060034u, 0x00000006u, 0x000003e1u, 0x000000c2u, 0x0000036du, 0x000000b5u, 0x0003001du, 0x000003e6u, 0x00000006u, 0x0003001eu, 0x000003e7u, 0x000003e6u, 0x00040020u, 0x000003e8u, 0x0000000cu, 0x000003e7u, 0x0004003bu, 0x000003e8u, 0x000003e9u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000003efu, 0x00000018u, 0x0004002bu, 0x00000006u, 0x000003f0u, 0x00000010u, 0x0007002cu, 0x000000abu, 0x000003f1u, 0x000003efu, 0x000003f0u, 0x000003a7u, 0x000001b8u, 0x0007002cu, 0x000000abu, 0x000003f3u, 0x000003d5u, 0x000003d5u, 0x000003d5u, 0x000003d5u, 0x0004003bu, 0x0000009au, 0x000003fbu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000408u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000415u, 0x00000004u, 0x0004003bu, 0x0000009au, 0x00000419u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000442u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000448u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000453u, 0x00000007u, 0x00040020u, 0x00000465u, 0x00000006u, 0x0000002cu, 0x0004003bu, 0x00000465u, 0x00000466u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000046au, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00040032u, 0x00000008u, 0x0000049eu, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000049fu, 0x000000c7u, 0x0000049eu, 0x000000afu, 0x00060034u, 0x0000002cu, 0x000004a0u, 0x000000abu, 0x0000049fu, 0x0000009cu, 0x00060034u, 0x00000008u, 0x000004a1u, 0x000000c3u, 0x0000049eu, 0x000000afu, 0x00060034u, 0x0000002cu, 0x000004a2u, 0x000000aau, 0x000004a1u, 0x0000009cu, 0x00060034u, 0x0000002cu, 0x000004a3u, 0x000000a7u, 0x000004a0u, 0x000004a2u, 0x0004002bu, 0x00000006u, 0x000004a6u, 0x00000048u, 0x00060034u, 0x00000006u, 0x000004d1u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00040020u, 0x000004d5u, 0x00000007u, 0x000000abu, 0x00060034u, 0x00000006u, 0x00000500u, 0x000000c2u, 0x0000036du, 0x000001dau, 0x0004002bu, 0x00000006u, 0x00000502u, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x00000509u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000528u, 0x000000c2u, 0x0000036du, 0x000001dau, 0x00060034u, 0x00000006u, 0x00000530u, 0x000000c2u, 0x0000036du, 0x000000b5u, 0x00060034u, 0x00000006u, 0x0000055eu, 0x000000c2u, 0x0000036du, 0x00000193u, 0x0004002bu, 0x00000006u, 0x00000560u, 0xffffffffu, 0x00030031u, 0x0000002cu, 0x00000564u, 0x00050034u, 0x0000002cu, 0x00000565u, 0x000000a8u, 0x00000564u, 0x0004003bu, 0x00000465u, 0x00000568u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000056fu, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000585u, 0x000000c2u, 0x0000036du, 0x000001dau, 0x00040017u, 0x0000058du, 0x0000002cu, 0x00000002u, 0x00060034u, 0x00000008u, 0x00000594u, 0x000000c4u, 0x000000afu, 0x000004a1u, 0x00060034u, 0x00000008u, 0x00000595u, 0x00000082u, 0x00000594u, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000596u, 0x00000080u, 0x00000595u, 0x000001b8u, 0x00060034u, 0x00000006u, 0x0000059fu, 0x00000080u, 0x00000594u, 0x000001b8u, 0x00040020u, 0x000005afu, 0x00000006u, 0x00000006u, 0x0004003bu, 0x000005afu, 0x000005b0u, 0x00000006u, 0x00060034u, 0x00000008u, 0x000005eau, 0x00000084u, 0x00000594u, 0x00000594u, 0x00060034u, 0x00000006u, 0x000005ebu, 0x00000080u, 0x000005eau, 0x000001b8u, 0x00060034u, 0x00000006u, 0x000005ecu, 0x000000c2u, 0x0000036du, 0x000000b5u, 0x00060034u, 0x00000006u, 0x000005edu, 0x00000084u, 0x000005ebu, 0x000005ecu, 0x00060034u, 0x00000008u, 0x00000600u, 0x00000082u, 0x00000594u, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000601u, 0x00000080u, 0x00000600u, 0x000001b8u, 0x00060034u, 0x00000006u, 0x0000060au, 0x00000080u, 0x00000594u, 0x000001b8u, 0x00060034u, 0x0000002cu, 0x0000062cu, 0x000000abu, 0x000004a1u, 0x0000009cu, 0x00060034u, 0x0000002cu, 0x0000062du, 0x000000a7u, 0x000004a0u, 0x0000062cu, 0x0004002bu, 0x00000008u, 0x0000063cu, 0x000000e0u, 0x0006002cu, 0x00000014u, 0x00000647u, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x00060034u, 0x0000002cu, 0x00000660u, 0x000000aau, 0x00000367u, 0x0000009cu, 0x0007002cu, 0x00000009u, 0x0000066du, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x0004002bu, 0x00000006u, 0x00000686u, 0x000000e0u, 0x0004002bu, 0x00000008u, 0x00000710u, 0x000001ffu, 0x0004001cu, 0x0000071cu, 0x0000009du, 0x000003a7u, 0x0005001eu, 0x0000071du, 0x0000009eu, 0x0000009eu, 0x0000071cu, 0x0003001du, 0x0000071eu, 0x0000071du, 0x0003001eu, 0x0000071fu, 0x0000071eu, 0x00040020u, 0x00000720u, 0x0000000cu, 0x0000071fu, 0x0004003bu, 0x00000720u, 0x00000721u, 0x0000000cu, 0x00040020u, 0x00000726u, 0x00000007u, 0x0000000au, 0x00040020u, 0x0000072bu, 0x00000007u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000747u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x0000074du, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000753u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000759u, 0x00000100u, 0x00040020u, 0x000007f5u, 0x00000001u, 0x000003a3u, 0x0004003bu, 0x000007f5u, 0x000007f6u, 0x00000001u, 0x00040020u, 0x000007f7u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x000007f5u, 0x00000800u, 0x00000001u, 0x00040032u, 0x00000008u, 0x00000809u, 0x00000400u, 0x00040032u, 0x00000006u, 0x0000080au, 0x00000001u, 0x00040032u, 0x00000006u, 0x0000080bu, 0x00000001u, 0x00060033u, 0x000003a3u, 0x0000080cu, 0x0000080au, 0x0000080bu, 0x000001dau, 0x00060034u, 0x00000006u, 0x0000080du, 0x00000051u, 0x0000080cu, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000080eu, 0x00000080u, 0x0000080du, 0x000001b8u, 0x00060034u, 0x00000008u, 0x0000080fu, 0x00000087u, 0x00000809u, 0x0000080eu, 0x00040032u, 0x00000008u, 0x00000814u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x00000815u, 0x00000020u, 0x00060034u, 0x00000008u, 0x00000816u, 0x00000087u, 0x00000814u, 0x00000815u, 0x0003001du, 0x00000819u, 0x00000006u, 0x0003001eu, 0x0000081au, 0x00000819u, 0x00040020u, 0x0000081bu, 0x0000000cu, 0x0000081au, 0x0004003bu, 0x0000081bu, 0x0000081cu, 0x0000000cu, 0x0007001eu, 0x00000820u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000821u, 0x00000009u, 0x00000820u, 0x0004003bu, 0x00000821u, 0x00000822u, 0x00000009u, 0x00040020u, 0x00000823u, 0x00000009u, 0x00000006u, 0x0003001du, 0x0000084du, 0x00000006u, 0x0003001eu, 0x0000084eu, 0x0000084du, 0x00040020u, 0x0000084fu, 0x0000000cu, 0x0000084eu, 0x0004003bu, 0x0000084fu, 0x00000850u, 0x0000000cu, 0x0003001du, 0x00000857u, 0x00000006u, 0x0003001eu, 0x00000858u, 0x00000857u, 0x00040020u, 0x00000859u, 0x0000000cu, 0x00000858u, 0x0004003bu, 0x00000859u, 0x0000085au, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000878u, 0x00000051u, 0x0000080cu, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000879u, 0x00000051u, 0x0000080cu, 0x00000001u, 0x00060034u, 0x00000006u, 0x0000087au, 0x00000084u, 0x00000878u, 0x00000879u, 0x0004003bu, 0x000007f7u, 0x0000087cu, 0x00000001u, 0x00040015u, 0x00000880u, 0x00000008u, 0x00000001u, 0x0003001du, 0x00000881u, 0x00000880u, 0x0003001eu, 0x00000882u, 0x00000881u, 0x00040020u, 0x00000883u, 0x0000000cu, 0x00000882u, 0x0004003bu, 0x00000883u, 0x00000884u, 0x0000000cu, 0x00040020u, 0x00000886u, 0x0000000cu, 0x00000880u, 0x0004002bu, 0x00000008u, 0x0000088fu, 0x00000040u, 0x0003001du, 0x000008a0u, 0x00000006u, 0x0003001eu, 0x000008a1u, 0x000008a0u, 0x00040020u, 0x000008a2u, 0x0000000cu, 0x000008a1u, 0x0004003bu, 0x000008a2u, 0x000008a3u, 0x0000000cu, 0x0003001du, 0x000008aeu, 0x0000009eu, 0x0003001eu, 0x000008afu, 0x000008aeu, 0x00040020u, 0x000008b0u, 0x0000000cu, 0x000008afu, 0x0004003bu, 0x000008b0u, 0x000008b1u, 0x0000000cu, 0x0003001du, 0x000008b8u, 0x00000008u, 0x0003001eu, 0x000008b9u, 0x000008b8u, 0x00040020u, 0x000008bau, 0x0000000cu, 0x000008b9u, 0x0004003bu, 0x000008bau, 0x000008bbu, 0x0000000cu, 0x00040020u, 0x000008bdu, 0x0000000cu, 0x00000008u, 0x0003001du, 0x000008c1u, 0x0000009du, 0x0003001eu, 0x000008c2u, 0x000008c1u, 0x00040020u, 0x000008c3u, 0x0000000cu, 0x000008c2u, 0x0004003bu, 0x000008c3u, 0x000008c4u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x000008e8u, 0x00000080u, 0x0004002bu, 0x00000008u, 0x000008e9u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x000008eau, 0x00000200u, 0x0004002bu, 0x00000008u, 0x000008ebu, 0x00000400u, 0x0004002bu, 0x00000008u, 0x000008ecu, 0x00000800u, 0x0004002bu, 0x00000008u, 0x000008edu, 0x00001000u, 0x0004002bu, 0x00000008u, 0x000008eeu, 0x00002000u, 0x0004002bu, 0x00000008u, 0x000008efu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x000008f0u, 0x00010000u, 0x0004002bu, 0x00000008u, 0x000008f1u, 0x00020000u, 0x0004002bu, 0x00000008u, 0x000008f2u, 0x00080000u, 0x0004002bu, 0x00000008u, 0x000008f3u, 0x00100000u, 0x0004002bu, 0x00000008u, 0x000008f4u, 0x00200000u, 0x0004002bu, 0x00000008u, 0x000008f5u, 0x00400000u, 0x0004002bu, 0x00000008u, 0x000008f6u, 0x00800000u, 0x0004002bu, 0x00000008u, 0x000008f7u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x000008f8u, 0x0000001au, 0x0004002bu, 0x00000008u, 0x000008f9u, 0x10000000u, 0x0004002bu, 0x00000008u, 0x000008fau, 0x20000000u, 0x0004002bu, 0x00000008u, 0x000008fbu, 0x40000000u, 0x0004002bu, 0x00000006u, 0x000008fcu, 0x00000800u, 0x0004001cu, 0x000008fdu, 0x0000009fu, 0x000008fcu, 0x0003001eu, 0x000008feu, 0x000008fdu, 0x0003001du, 0x000008ffu, 0x000008feu, 0x0003001eu, 0x00000900u, 0x000008ffu, 0x00040020u, 0x00000901u, 0x0000000cu, 0x00000900u, 0x0004003bu, 0x00000901u, 0x00000902u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000903u, 0x00001000u, 0x0004001cu, 0x00000904u, 0x0000009du, 0x00000903u, 0x0003001eu, 0x00000905u, 0x00000904u, 0x0003001du, 0x00000906u, 0x00000905u, 0x0003001eu, 0x00000907u, 0x00000906u, 0x00040020u, 0x00000908u, 0x0000000cu, 0x00000907u, 0x0004003bu, 0x00000908u, 0x00000909u, 0x0000000cu, 0x000d001eu, 0x0000090au, 0x00000008u, 0x00000008u, 0x00000008u, 0x000000a0u, 0x000000a0u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000000a0u, 0x0000009du, 0x0000009du, 0x0003001du, 0x0000090bu, 0x0000090au, 0x0003001eu, 0x0000090cu, 0x0000090bu, 0x00040020u, 0x0000090du, 0x0000000cu, 0x0000090cu, 0x0004003bu, 0x0000090du, 0x0000090eu, 0x0000000cu, 0x000a001eu, 0x0000090fu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000910u, 0x0000090fu, 0x0003001eu, 0x00000911u, 0x00000910u, 0x00040020u, 0x00000912u, 0x0000000cu, 0x00000911u, 0x0004003bu, 0x00000912u, 0x00000913u, 0x0000000cu, 0x0003001du, 0x00000914u, 0x00000009u, 0x0003001eu, 0x00000915u, 0x00000914u, 0x00040020u, 0x00000916u, 0x0000000cu, 0x00000915u, 0x0004003bu, 0x00000916u, 0x00000917u, 0x0000000cu, 0x000a001eu, 0x00000918u, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000919u, 0x00000918u, 0x0003001eu, 0x0000091au, 0x00000919u, 0x00040020u, 0x0000091bu, 0x0000000cu, 0x0000091au, 0x0004003bu, 0x0000091bu, 0x0000091cu, 0x0000000cu, 0x0010001eu, 0x0000091du, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0003001du, 0x0000091eu, 0x0000091du, 0x0003001eu, 0x0000091fu, 0x0000091eu, 0x00040020u, 0x00000920u, 0x0000000cu, 0x0000091fu, 0x0004003bu, 0x00000920u, 0x00000921u, 0x0000000cu, 0x00040017u, 0x00000922u, 0x0000009fu, 0x00000004u, 0x000b001eu, 0x00000923u, 0x00000009u, 0x00000009u, 0x00000922u, 0x00000922u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000000a0u, 0x0000009fu, 0x0003001du, 0x00000924u, 0x00000923u, 0x0003001eu, 0x00000925u, 0x00000924u, 0x00040020u, 0x00000926u, 0x0000000cu, 0x00000925u, 0x0004003bu, 0x00000926u, 0x00000927u, 0x0000000cu, 0x0006001eu, 0x00000928u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000929u, 0x00000928u, 0x0003001eu, 0x0000092au, 0x00000929u, 0x00040020u, 0x0000092bu, 0x0000000cu, 0x0000092au, 0x0004003bu, 0x0000092bu, 0x0000092cu, 0x0000000cu, 0x0006001eu, 0x0000092du, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x0000092eu, 0x0000092du, 0x00040020u, 0x0000092fu, 0x00000002u, 0x0000092eu, 0x0004003bu, 0x0000092fu, 0x00000930u, 0x00000002u, 0x0004001cu, 0x00000931u, 0x00000008u, 0x000003f0u, 0x0004001cu, 0x00000932u, 0x00000931u, 0x00000193u, 0x0013002cu, 0x00000931u, 0x00000933u, 0x0000009cu, 0x000000cdu, 0x000000afu, 0x000000d3u, 0x000000c1u, 0x000000b5u, 0x000000c7u, 0x000000bbu, 0x000000bbu, 0x000000c7u, 0x000000b5u, 0x000000c1u, 0x000000d3u, 0x000000afu, 0x000000cdu, 0x0000009cu, 0x0013002cu, 0x00000931u, 0x00000934u, 0x0000009cu, 0x000000c1u, 0x000000afu, 0x000000c7u, 0x000000c1u, 0x0000009cu, 0x000000c7u, 0x000000afu, 0x000000bbu, 0x000000d3u, 0x000000b5u, 0x000000cdu, 0x000000d3u, 0x000000bbu, 0x000000cdu, 0x000000b5u, 0x0005002cu, 0x00000932u, 0x00000935u, 0x00000933u, 0x00000934u, 0x0003002eu, 0x00000009u, 0x00001161u, 0x0003002eu, 0x00000006u, 0x00001164u, 0x0003002eu, 0x00000008u, 0x00001167u, 0x00030001u, 0x00000014u, 0x00001224u, 0x00030001u, 0x00000008u, 0x0000131au, 0x00030001u, 0x00000008u, 0x000018c5u, 0x00030001u, 0x00000014u, 0x000018dbu, 0x00030001u, 0x00000014u, 0x000018fau, 0x0006002cu, 0x000003a3u, 0x0000192bu, 0x000003aeu, 0x000003aeu, 0x000003aeu, 0x0005002cu, 0x0000006bu, 0x0000192cu, 0x000001e0u, 0x000001e0u, 0x0006002cu, 0x00000014u, 0x0000192du, 0x0000012eu, 0x0000012eu, 0x0000012eu, 0x0006002cu, 0x00000014u, 0x0000192eu, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x0006002cu, 0x00000014u, 0x0000192fu, 0x000000d9u, 0x000000d9u, 0x000000d9u, 0x0006002cu, 0x00000014u, 0x00001930u, 0x00000141u, 0x00000141u, 0x00000141u, 0x0006002cu, 0x00000014u, 0x00001931u, 0x000000c7u, 0x000000c7u, 0x000000c7u, 0x0006002cu, 0x00000014u, 0x00001932u, 0x000000b5u, 0x000000b5u, 0x000000b5u, 0x0006002cu, 0x00000014u, 0x00001933u, 0x0000015du, 0x0000015du, 0x0000015du, 0x00040017u, 0x00001935u, 0x0000002cu, 0x00000004u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000016u, 0x000011b4u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011b3u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011b2u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011b1u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011abu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011aau, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011a9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011a8u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000119eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000119du, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000119cu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000119bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000119au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001190u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000118fu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000118eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000118du, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000118cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000117au, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001179u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001178u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001177u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001176u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001170u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000116fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000116eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000116du, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000116cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001166u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001165u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001163u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001162u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001141u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001140u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000113fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000113eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000113du, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000113cu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000113bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000113au, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001139u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001138u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001137u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001136u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001135u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001134u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001133u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001123u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001122u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001121u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001120u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000111fu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000111eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000111du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010f4u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000010f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000010f6u, 0x00000007u, 0x0004003bu, 0x000004d5u, 0x00001006u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001007u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001008u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00001009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100au, 0x00000007u, 0x0004003bu, 0x000004d5u, 0x0000100bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fc9u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd0u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000fd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f91u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000f92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f69u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f51u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f52u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f53u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f54u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f55u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f30u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f31u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f08u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f09u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f0au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f0bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f0cu, 0x00000007u, 0x0005003bu, 0x0000002du, 0x00000e38u, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000015u, 0x00000e39u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e3au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e3bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000e3cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000e3du, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e3eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000e3fu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e40u, 0x00000007u, 0x0005003bu, 0x0000002du, 0x00000d68u, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000015u, 0x00000d69u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d6au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d6bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d6cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d6du, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d6eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d6fu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d70u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d64u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d5bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d58u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d42u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d43u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d44u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d45u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d46u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d47u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c8du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c8eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c8fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c90u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c91u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c92u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c93u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c94u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c95u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c96u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c97u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c98u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c99u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c9au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9bu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c9cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000c9fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca0u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c6bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c6cu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000c6du, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000c6eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b2au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b2bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b2cu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b2du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b33u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b34u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b35u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b36u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b37u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b38u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b39u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b3au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b3bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b3cu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b3du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b3eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b3fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b40u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b41u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b42u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b43u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b44u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b45u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b46u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b47u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b48u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b49u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b4bu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4cu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4fu, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b50u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b52u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b54u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b55u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b56u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b57u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b58u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b59u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000b5bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b5du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b60u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b61u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b62u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b63u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000b64u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b65u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b66u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b67u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b68u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b69u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b6au, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b6bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000af2u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000af3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000af4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000af5u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000ab9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000abau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000abbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000abcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000abdu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000abeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a81u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000a82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009f8u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000009f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009fdu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000009feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a00u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000a01u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000a02u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000009ddu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000974u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000975u, 0x00000007u, 0x0004003bu, 0x000003a4u, 0x00000976u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000977u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000978u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000093eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000093fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000940u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000941u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000942u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000943u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000944u, 0x00000007u, 0x0005003bu, 0x0000002du, 0x00000938u, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000016u, 0x000007f4u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007fbu, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x000007ffu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000804u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000812u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000818u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000082cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000082fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000832u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000835u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000838u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000843u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000084cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000856u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000867u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000870u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000876u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000087fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000895u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000089fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a9u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000008cdu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000008cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008d1u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000008d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008e4u, 0x00000007u, 0x000300f7u, 0x00000936u, 0x00000000u, 0x000300fbu, 0x000001b8u, 0x00000937u, 0x000200f8u, 0x00000937u, 0x0003003eu, 0x0000009bu, 0x0000009cu, 0x00050041u, 0x000007f7u, 0x000007f8u, 0x000007f6u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000007f9u, 0x000007f8u, 0x0004007cu, 0x00000008u, 0x000007fau, 0x000007f9u, 0x0003003eu, 0x000007f4u, 0x000007fau, 0x00050041u, 0x000007f7u, 0x000007fcu, 0x000007f6u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000007fdu, 0x000007fcu, 0x0004007cu, 0x00000008u, 0x000007feu, 0x000007fdu, 0x0003003eu, 0x000007fbu, 0x000007feu, 0x0004003du, 0x000003a3u, 0x00000801u, 0x00000800u, 0x0007004fu, 0x0000006bu, 0x00000802u, 0x00000801u, 0x00000801u, 0x00000000u, 0x00000001u, 0x0004007cu, 0x0000002eu, 0x00000803u, 0x00000802u, 0x0003003eu, 0x000007ffu, 0x00000803u, 0x00050041u, 0x00000016u, 0x00000805u, 0x000007ffu, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000806u, 0x00000805u, 0x00050041u, 0x00000016u, 0x00000807u, 0x000007ffu, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000808u, 0x00000807u, 0x00050084u, 0x00000008u, 0x00000810u, 0x00000808u, 0x0000080fu, 0x00050080u, 0x00000008u, 0x00000811u, 0x00000806u, 0x00000810u, 0x0003003eu, 0x00000804u, 0x00000811u, 0x00050084u, 0x00000008u, 0x00000817u, 0x00000811u, 0x00000816u, 0x0003003eu, 0x00000812u, 0x00000817u, 0x00060041u, 0x000000e6u, 0x0000081eu, 0x0000081cu, 0x0000009cu, 0x00000811u, 0x0004003du, 0x00000006u, 0x0000081fu, 0x0000081eu, 0x00050041u, 0x00000823u, 0x00000824u, 0x00000822u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x00000825u, 0x00000824u, 0x000500c7u, 0x00000006u, 0x00000826u, 0x0000081fu, 0x00000825u, 0x0003003eu, 0x00000818u, 0x00000826u, 0x000500aau, 0x0000002cu, 0x00000828u, 0x00000826u, 0x000001b8u, 0x000300f7u, 0x0000082au, 0x00000000u, 0x000400fau, 0x00000828u, 0x00000829u, 0x0000082au, 0x000200f8u, 0x00000829u, 0x0003003eu, 0x00000938u, 0x000002b3u, 0x000200f9u, 0x00000936u, 0x000200f8u, 0x0000082au, 0x0004003du, 0x000003a3u, 0x0000082du, 0x000007f6u, 0x0007004fu, 0x0000006bu, 0x0000082eu, 0x0000082du, 0x0000082du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000082cu, 0x0000082eu, 0x00050041u, 0x00000823u, 0x00000830u, 0x00000822u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x00000831u, 0x00000830u, 0x0003003eu, 0x0000082fu, 0x00000831u, 0x00050041u, 0x00000823u, 0x00000833u, 0x00000822u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x00000834u, 0x00000833u, 0x0003003eu, 0x00000832u, 0x00000834u, 0x00050041u, 0x00000823u, 0x00000836u, 0x00000822u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x00000837u, 0x00000836u, 0x0003003eu, 0x00000835u, 0x00000837u, 0x00050041u, 0x00000823u, 0x00000839u, 0x00000822u, 0x000000afu, 0x0004003du, 0x00000006u, 0x0000083au, 0x00000839u, 0x0003003eu, 0x00000838u, 0x0000083au, 0x0003003eu, 0x00000466u, 0x00000298u, 0x0003003eu, 0x00000568u, 0x00000298u, 0x0004003du, 0x0000006bu, 0x00000945u, 0x0000082cu, 0x00050050u, 0x0000006bu, 0x00000948u, 0x00000831u, 0x00000834u, 0x000500b0u, 0x0000058du, 0x00000949u, 0x00000945u, 0x00000948u, 0x0004009bu, 0x0000002cu, 0x0000094au, 0x00000949u, 0x000300f7u, 0x0000094bu, 0x00000000u, 0x000400fau, 0x0000094au, 0x0000094cu, 0x0000094bu, 0x000200f8u, 0x0000094cu, 0x0004003du, 0x0000006bu, 0x0000094du, 0x0000082cu, 0x00050050u, 0x0000006bu, 0x0000094eu, 0x00000596u, 0x00000596u, 0x000500c7u, 0x0000006bu, 0x0000094fu, 0x0000094du, 0x0000094eu, 0x0003003eu, 0x0000093eu, 0x0000094fu, 0x0004003du, 0x0000006bu, 0x00000950u, 0x0000082cu, 0x00050050u, 0x0000002eu, 0x00000951u, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x00000952u, 0x00000950u, 0x00000951u, 0x0003003eu, 0x0000082cu, 0x00000952u, 0x00050041u, 0x00000007u, 0x00000953u, 0x0000093eu, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000954u, 0x00000953u, 0x00050084u, 0x00000006u, 0x00000955u, 0x00000954u, 0x0000059fu, 0x00050041u, 0x00000007u, 0x00000956u, 0x0000093eu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000957u, 0x00000956u, 0x00050080u, 0x00000006u, 0x00000958u, 0x00000955u, 0x00000957u, 0x0003003eu, 0x0000093fu, 0x00000958u, 0x000500c2u, 0x00000006u, 0x0000095bu, 0x00000831u, 0x000004a1u, 0x00050041u, 0x00000007u, 0x0000095cu, 0x0000082cu, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000095du, 0x0000095cu, 0x00050084u, 0x00000006u, 0x0000095eu, 0x0000095bu, 0x0000095du, 0x00050080u, 0x00000006u, 0x0000095fu, 0x00000837u, 0x0000095eu, 0x00050041u, 0x00000007u, 0x00000960u, 0x0000082cu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000961u, 0x00000960u, 0x00050080u, 0x00000006u, 0x00000962u, 0x0000095fu, 0x00000961u, 0x0003003eu, 0x00000940u, 0x00000962u, 0x0003003eu, 0x000005b0u, 0x00000962u, 0x0003003eu, 0x00000941u, 0x00000962u, 0x0003003eu, 0x00000942u, 0x00000958u, 0x000300f7u, 0x00000979u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000979u, 0x00000000u, 0x0000097au, 0x00000001u, 0x0000097au, 0x00000002u, 0x0000097bu, 0x00000003u, 0x0000097cu, 0x00000004u, 0x0000097du, 0x000200f8u, 0x0000097du, 0x000500c7u, 0x00000006u, 0x000009d0u, 0x00000962u, 0x000003ddu, 0x0003003eu, 0x00000941u, 0x000009d0u, 0x00050084u, 0x00000006u, 0x000009d2u, 0x00000958u, 0x000003e1u, 0x00050080u, 0x00000006u, 0x000009d4u, 0x000009d0u, 0x000009d2u, 0x0003003eu, 0x00000941u, 0x000009d4u, 0x00060041u, 0x000000e6u, 0x000009d6u, 0x000003e9u, 0x0000009cu, 0x000009d4u, 0x0004003du, 0x00000006u, 0x000009d7u, 0x000009d6u, 0x0003003eu, 0x00000978u, 0x000009d7u, 0x00070050u, 0x000000abu, 0x000009d9u, 0x000009d7u, 0x000009d7u, 0x000009d7u, 0x000009d7u, 0x000500c2u, 0x000000abu, 0x000009dau, 0x000009d9u, 0x000003f1u, 0x000500c7u, 0x000000abu, 0x000009dbu, 0x000009dau, 0x000003f3u, 0x0004007cu, 0x00000009u, 0x000009dcu, 0x000009dbu, 0x0003003eu, 0x00000381u, 0x000009dcu, 0x000200f9u, 0x00000979u, 0x000200f8u, 0x0000097cu, 0x000500c7u, 0x00000006u, 0x000009bau, 0x00000962u, 0x00000391u, 0x0003003eu, 0x00000941u, 0x000009bau, 0x00050084u, 0x00000006u, 0x000009bcu, 0x00000958u, 0x000003c6u, 0x00050080u, 0x00000006u, 0x000009beu, 0x000009bau, 0x000009bcu, 0x0003003eu, 0x00000941u, 0x000009beu, 0x000500c6u, 0x00000006u, 0x000009c0u, 0x000009beu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000009c1u, 0x0000039du, 0x0000009cu, 0x000009c0u, 0x0004003du, 0x0000009fu, 0x000009c2u, 0x000009c1u, 0x00040071u, 0x00000006u, 0x000009c3u, 0x000009c2u, 0x0003003eu, 0x00000977u, 0x000009c3u, 0x000500c2u, 0x00000006u, 0x000009c5u, 0x000009c3u, 0x000003a7u, 0x0004007cu, 0x00000008u, 0x000009c6u, 0x000009c5u, 0x00060050u, 0x00000014u, 0x000009c7u, 0x000009c6u, 0x000009c6u, 0x000009c6u, 0x000500c7u, 0x00000006u, 0x000009c9u, 0x000009c3u, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x000009cau, 0x000009c9u, 0x00070050u, 0x00000009u, 0x000009ceu, 0x000009c6u, 0x000009c6u, 0x000009c6u, 0x000009cau, 0x0003003eu, 0x00000381u, 0x000009ceu, 0x000200f9u, 0x00000979u, 0x000200f8u, 0x0000097bu, 0x000500c7u, 0x00000006u, 0x00000995u, 0x00000962u, 0x00000391u, 0x0003003eu, 0x00000941u, 0x00000995u, 0x00050084u, 0x00000006u, 0x00000997u, 0x00000958u, 0x00000395u, 0x00050080u, 0x00000006u, 0x00000999u, 0x00000995u, 0x00000997u, 0x0003003eu, 0x00000941u, 0x00000999u, 0x000500c6u, 0x00000006u, 0x0000099bu, 0x00000999u, 0x000001dau, 0x00060041u, 0x000000ebu, 0x0000099cu, 0x0000039du, 0x0000009cu, 0x0000099bu, 0x0004003du, 0x0000009fu, 0x0000099du, 0x0000099cu, 0x00040071u, 0x00000006u, 0x0000099eu, 0x0000099du, 0x0003003eu, 0x00000975u, 0x0000099eu, 0x000500c2u, 0x00000006u, 0x000009a0u, 0x0000099eu, 0x000003a7u, 0x000500c2u, 0x00000006u, 0x000009a2u, 0x0000099eu, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x000009a4u, 0x0000099eu, 0x00000193u, 0x00060050u, 0x000003a3u, 0x000009a5u, 0x000009a0u, 0x000009a2u, 0x000009a4u, 0x000500c7u, 0x000003a3u, 0x000009a7u, 0x000009a5u, 0x0000192bu, 0x0003003eu, 0x00000976u, 0x000009a7u, 0x0004007cu, 0x00000014u, 0x000009a9u, 0x000009a7u, 0x00060041u, 0x000000f2u, 0x000009abu, 0x00000388u, 0x0000009cu, 0x00000999u, 0x0004003du, 0x0000009du, 0x000009acu, 0x000009abu, 0x00040071u, 0x00000006u, 0x000009adu, 0x000009acu, 0x0004007cu, 0x00000008u, 0x000009aeu, 0x000009adu, 0x000500c4u, 0x00000008u, 0x000009afu, 0x000009aeu, 0x000000c7u, 0x000500c7u, 0x00000006u, 0x000009b1u, 0x0000099eu, 0x000001dau, 0x000500c4u, 0x00000006u, 0x000009b2u, 0x000009b1u, 0x000000d3u, 0x0004007cu, 0x00000008u, 0x000009b3u, 0x000009b2u, 0x000500c5u, 0x00000008u, 0x000009b4u, 0x000009afu, 0x000009b3u, 0x00050051u, 0x00000008u, 0x000009b5u, 0x000009a9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000009b6u, 0x000009a9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000009b7u, 0x000009a9u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000009b8u, 0x000009b5u, 0x000009b6u, 0x000009b7u, 0x000009b4u, 0x0003003eu, 0x00000381u, 0x000009b8u, 0x000200f9u, 0x00000979u, 0x000200f8u, 0x0000097au, 0x000500c7u, 0x00000006u, 0x0000097fu, 0x00000962u, 0x0000036eu, 0x0003003eu, 0x00000941u, 0x0000097fu, 0x00050084u, 0x00000006u, 0x00000981u, 0x00000958u, 0x0000036du, 0x00050080u, 0x00000006u, 0x00000983u, 0x0000097fu, 0x00000981u, 0x0003003eu, 0x00000941u, 0x00000983u, 0x000500c6u, 0x00000006u, 0x00000985u, 0x00000983u, 0x000001e0u, 0x00060041u, 0x000000f2u, 0x00000986u, 0x00000379u, 0x0000009cu, 0x00000985u, 0x0004003du, 0x0000009du, 0x00000987u, 0x00000986u, 0x00040071u, 0x00000006u, 0x00000988u, 0x00000987u, 0x0004007cu, 0x00000008u, 0x00000989u, 0x00000988u, 0x0003003eu, 0x00000974u, 0x00000989u, 0x000500c2u, 0x00000006u, 0x0000098eu, 0x00000983u, 0x000000afu, 0x00060041u, 0x000000f2u, 0x0000098fu, 0x00000388u, 0x0000009cu, 0x0000098eu, 0x0004003du, 0x0000009du, 0x00000990u, 0x0000098fu, 0x00040071u, 0x00000006u, 0x00000991u, 0x00000990u, 0x0004007cu, 0x00000008u, 0x00000992u, 0x00000991u, 0x00070050u, 0x00000009u, 0x00000993u, 0x00000989u, 0x00000989u, 0x00000989u, 0x00000992u, 0x0003003eu, 0x00000381u, 0x00000993u, 0x000200f9u, 0x00000979u, 0x000200f8u, 0x00000979u, 0x0004003du, 0x00000006u, 0x0000096bu, 0x0000095cu, 0x00050084u, 0x00000006u, 0x0000096cu, 0x0000095bu, 0x0000096bu, 0x00050080u, 0x00000006u, 0x0000096du, 0x0000083au, 0x0000096cu, 0x0004003du, 0x00000006u, 0x0000096fu, 0x00000960u, 0x00050080u, 0x00000006u, 0x00000970u, 0x0000096du, 0x0000096fu, 0x0003003eu, 0x00000940u, 0x00000970u, 0x0003003eu, 0x00000943u, 0x00000970u, 0x0003003eu, 0x00000944u, 0x00000958u, 0x000500c7u, 0x00000006u, 0x000009dfu, 0x00000970u, 0x00000391u, 0x0003003eu, 0x00000943u, 0x000009dfu, 0x00050084u, 0x00000006u, 0x000009e1u, 0x00000958u, 0x0000046au, 0x00050080u, 0x00000006u, 0x000009e3u, 0x000009dfu, 0x000009e1u, 0x0003003eu, 0x00000943u, 0x000009e3u, 0x000500c6u, 0x00000006u, 0x000009e5u, 0x000009e3u, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000009e6u, 0x0000039du, 0x0000009cu, 0x000009e5u, 0x0004003du, 0x0000009fu, 0x000009e7u, 0x000009e6u, 0x00040071u, 0x00000006u, 0x000009e8u, 0x000009e7u, 0x0004007cu, 0x00000008u, 0x000009e9u, 0x000009e8u, 0x0003003eu, 0x000009ddu, 0x000009e9u, 0x000500c3u, 0x00000008u, 0x000009ebu, 0x000009e9u, 0x000000b5u, 0x0003003eu, 0x00000419u, 0x000009ebu, 0x00060041u, 0x000000f2u, 0x000009edu, 0x00000388u, 0x0000009cu, 0x000009e3u, 0x0004003du, 0x0000009du, 0x000009eeu, 0x000009edu, 0x00040071u, 0x00000006u, 0x000009efu, 0x000009eeu, 0x0004007cu, 0x00000008u, 0x000009f0u, 0x000009efu, 0x000500c7u, 0x00000008u, 0x000009f2u, 0x000009e9u, 0x000000bbu, 0x000500c4u, 0x00000008u, 0x000009f3u, 0x000009f2u, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x000009f4u, 0x000009f0u, 0x000009f3u, 0x0003003eu, 0x000003fbu, 0x000009f4u, 0x000200f9u, 0x0000094bu, 0x000200f8u, 0x0000094bu, 0x000200f9u, 0x0000083cu, 0x000200f8u, 0x0000083cu, 0x000700f5u, 0x00000006u, 0x000011e9u, 0x00000826u, 0x0000094bu, 0x0000084bu, 0x0000083fu, 0x000700f5u, 0x00000014u, 0x00001486u, 0x00001224u, 0x0000094bu, 0x00001485u, 0x0000083fu, 0x000700f5u, 0x00000008u, 0x0000145bu, 0x0000131au, 0x0000094bu, 0x0000145au, 0x0000083fu, 0x000700f5u, 0x00000008u, 0x00001431u, 0x0000131au, 0x0000094bu, 0x00001430u, 0x0000083fu, 0x000700f5u, 0x00000014u, 0x00001354u, 0x00001224u, 0x0000094bu, 0x00001353u, 0x0000083fu, 0x000700f5u, 0x00000008u, 0x00001336u, 0x0000131au, 0x0000094bu, 0x00001335u, 0x0000083fu, 0x000700f5u, 0x00000008u, 0x00001318u, 0x0000131au, 0x0000094bu, 0x00001317u, 0x0000083fu, 0x000700f5u, 0x00000014u, 0x00001222u, 0x00001224u, 0x0000094bu, 0x00001221u, 0x0000083fu, 0x000500abu, 0x0000002cu, 0x00000842u, 0x000011e9u, 0x000001b8u, 0x000400f6u, 0x0000083eu, 0x0000083fu, 0x00000000u, 0x000400fau, 0x00000842u, 0x0000083du, 0x0000083eu, 0x000200f8u, 0x0000083du, 0x0006000cu, 0x00000008u, 0x00000845u, 0x00000001u, 0x00000049u, 0x000011e9u, 0x0003003eu, 0x00000843u, 0x00000845u, 0x000500c4u, 0x00000008u, 0x00000847u, 0x000000afu, 0x00000845u, 0x0004007cu, 0x00000006u, 0x00000848u, 0x00000847u, 0x000400c8u, 0x00000006u, 0x00000849u, 0x00000848u, 0x000500c7u, 0x00000006u, 0x0000084bu, 0x000011e9u, 0x00000849u, 0x0003003eu, 0x00000818u, 0x0000084bu, 0x00050080u, 0x00000008u, 0x00000853u, 0x00000817u, 0x00000845u, 0x00060041u, 0x000000e6u, 0x00000854u, 0x00000850u, 0x0000009cu, 0x00000853u, 0x0004003du, 0x00000006u, 0x00000855u, 0x00000854u, 0x0003003eu, 0x0000084cu, 0x00000855u, 0x00060041u, 0x000000e6u, 0x0000085eu, 0x0000085au, 0x0000009cu, 0x00000853u, 0x0004003du, 0x00000006u, 0x0000085fu, 0x0000085eu, 0x0003003eu, 0x00000856u, 0x0000085fu, 0x000200f9u, 0x00000860u, 0x000200f8u, 0x00000860u, 0x000700f5u, 0x00000014u, 0x00001485u, 0x00001486u, 0x0000083du, 0x000018a5u, 0x00000863u, 0x000700f5u, 0x00000008u, 0x0000145au, 0x0000145bu, 0x0000083du, 0x0000188au, 0x00000863u, 0x000700f5u, 0x00000008u, 0x00001430u, 0x00001431u, 0x0000083du, 0x0000186fu, 0x00000863u, 0x000700f5u, 0x00000014u, 0x00001353u, 0x00001354u, 0x0000083du, 0x00001847u, 0x00000863u, 0x000700f5u, 0x00000008u, 0x00001335u, 0x00001336u, 0x0000083du, 0x0000181fu, 0x00000863u, 0x000700f5u, 0x00000008u, 0x00001317u, 0x00001318u, 0x0000083du, 0x000017f7u, 0x00000863u, 0x000700f5u, 0x00000014u, 0x00001221u, 0x00001222u, 0x0000083du, 0x000017b9u, 0x00000863u, 0x000700f5u, 0x00000006u, 0x00001213u, 0x00000855u, 0x0000083du, 0x000008d7u, 0x00000863u, 0x000700f5u, 0x00000006u, 0x00001211u, 0x0000085fu, 0x0000083du, 0x0000086fu, 0x00000863u, 0x000500abu, 0x0000002cu, 0x00000866u, 0x00001211u, 0x000001b8u, 0x000400f6u, 0x00000862u, 0x00000863u, 0x00000000u, 0x000400fau, 0x00000866u, 0x00000861u, 0x00000862u, 0x000200f8u, 0x00000861u, 0x0006000cu, 0x00000008u, 0x00000869u, 0x00000001u, 0x00000049u, 0x00001211u, 0x0003003eu, 0x00000867u, 0x00000869u, 0x000500c4u, 0x00000008u, 0x0000086bu, 0x000000afu, 0x00000869u, 0x0004007cu, 0x00000006u, 0x0000086cu, 0x0000086bu, 0x000400c8u, 0x00000006u, 0x0000086du, 0x0000086cu, 0x000500c7u, 0x00000006u, 0x0000086fu, 0x00001211u, 0x0000086du, 0x0003003eu, 0x00000856u, 0x0000086fu, 0x00050084u, 0x00000008u, 0x00000873u, 0x00000815u, 0x00000845u, 0x00050080u, 0x00000008u, 0x00000874u, 0x00000869u, 0x00000873u, 0x0004007cu, 0x00000006u, 0x00000875u, 0x00000874u, 0x0003003eu, 0x00000870u, 0x00000875u, 0x00050084u, 0x00000006u, 0x0000087bu, 0x00001213u, 0x0000087au, 0x0004003du, 0x00000006u, 0x0000087du, 0x0000087cu, 0x00050080u, 0x00000006u, 0x0000087eu, 0x0000087bu, 0x0000087du, 0x0003003eu, 0x00000876u, 0x0000087eu, 0x00060041u, 0x00000886u, 0x00000887u, 0x00000884u, 0x0000009cu, 0x0000087eu, 0x0004003du, 0x00000880u, 0x00000888u, 0x00000887u, 0x00040072u, 0x00000008u, 0x00000889u, 0x00000888u, 0x0003003eu, 0x0000087fu, 0x00000889u, 0x000500afu, 0x0000002cu, 0x0000088bu, 0x00000889u, 0x0000009cu, 0x000300f7u, 0x0000088du, 0x00000000u, 0x000400fau, 0x0000088bu, 0x0000088cu, 0x0000088du, 0x000200f8u, 0x0000088cu, 0x000500c7u, 0x00000008u, 0x00000890u, 0x00000889u, 0x0000088fu, 0x000500abu, 0x0000002cu, 0x00000891u, 0x00000890u, 0x0000009cu, 0x000300f7u, 0x00000893u, 0x00000000u, 0x000400fau, 0x00000891u, 0x00000892u, 0x00000899u, 0x000200f8u, 0x00000899u, 0x000500c7u, 0x00000008u, 0x0000089bu, 0x00000889u, 0x00000815u, 0x000500abu, 0x0000002cu, 0x0000089cu, 0x0000089bu, 0x0000009cu, 0x000300f7u, 0x0000089eu, 0x00000000u, 0x000400fau, 0x0000089cu, 0x0000089du, 0x000008acu, 0x000200f8u, 0x000008acu, 0x00060041u, 0x000000a8u, 0x000008b3u, 0x000008b1u, 0x0000009cu, 0x0000087eu, 0x0004003du, 0x0000009eu, 0x000008b4u, 0x000008b3u, 0x00040071u, 0x000000abu, 0x000008b5u, 0x000008b4u, 0x0004007cu, 0x00000009u, 0x000008b6u, 0x000008b5u, 0x0003003eu, 0x000011a8u, 0x000008b6u, 0x00060041u, 0x000008bdu, 0x000008beu, 0x000008bbu, 0x0000009cu, 0x0000087eu, 0x0004003du, 0x00000008u, 0x000008bfu, 0x000008beu, 0x0003003eu, 0x000011a9u, 0x000008bfu, 0x00060041u, 0x000000f2u, 0x000008c6u, 0x000008c4u, 0x0000009cu, 0x0000087eu, 0x0004003du, 0x0000009du, 0x000008c7u, 0x000008c6u, 0x00040071u, 0x00000006u, 0x000008c8u, 0x000008c7u, 0x0004007cu, 0x00000008u, 0x000008c9u, 0x000008c8u, 0x0003003eu, 0x000011abu, 0x000008c9u, 0x0003003eu, 0x000011aau, 0x00000889u, 0x0003003eu, 0x000008cdu, 0x000007fau, 0x0003003eu, 0x000008cfu, 0x000007feu, 0x0003003eu, 0x000008d1u, 0x00000875u, 0x00070050u, 0x00000091u, 0x000011b0u, 0x000008b6u, 0x000008bfu, 0x00000889u, 0x000008c9u, 0x0003003eu, 0x000011b1u, 0x000008b6u, 0x0003003eu, 0x000011b2u, 0x000008bfu, 0x0003003eu, 0x000011b3u, 0x00000889u, 0x0003003eu, 0x000011b4u, 0x000008c9u, 0x000500c3u, 0x00000008u, 0x00000b6fu, 0x000008bfu, 0x000000dfu, 0x0003003eu, 0x00000b2au, 0x00000b6fu, 0x000500c7u, 0x00000008u, 0x00000b72u, 0x000008bfu, 0x00000710u, 0x0003003eu, 0x00000b2bu, 0x00000b72u, 0x0003003eu, 0x00000b2cu, 0x00000889u, 0x0003003eu, 0x00000b2du, 0x000008b6u, 0x0003003eu, 0x00000b2eu, 0x000008c9u, 0x00080041u, 0x000000f2u, 0x00000b7au, 0x00000721u, 0x0000009cu, 0x00000875u, 0x0000009cu, 0x000001dau, 0x0004003du, 0x0000009du, 0x00000b7bu, 0x00000b7au, 0x00040071u, 0x00000006u, 0x00000b7cu, 0x00000b7bu, 0x0003003eu, 0x00000b2fu, 0x00000b7cu, 0x0003003eu, 0x00000b31u, 0x00000875u, 0x00070041u, 0x000000a8u, 0x00000c0au, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x00000c0bu, 0x00000c0au, 0x00040071u, 0x000000abu, 0x00000c0cu, 0x00000c0bu, 0x0004007cu, 0x00000009u, 0x00000c0du, 0x00000c0cu, 0x00070041u, 0x000000a8u, 0x00000c0fu, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000afu, 0x0004003du, 0x0000009eu, 0x00000c10u, 0x00000c0fu, 0x00040071u, 0x000000abu, 0x00000c11u, 0x00000c10u, 0x0004007cu, 0x00000009u, 0x00000c12u, 0x00000c11u, 0x00070041u, 0x000000a8u, 0x00000c14u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000b5u, 0x0004003du, 0x0000009eu, 0x00000c15u, 0x00000c14u, 0x00040071u, 0x000000abu, 0x00000c16u, 0x00000c15u, 0x0004007cu, 0x00000009u, 0x00000c17u, 0x00000c16u, 0x00070041u, 0x000000a8u, 0x00000c19u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000bbu, 0x0004003du, 0x0000009eu, 0x00000c1au, 0x00000c19u, 0x00040071u, 0x000000abu, 0x00000c1bu, 0x00000c1au, 0x0004007cu, 0x00000009u, 0x00000c1cu, 0x00000c1bu, 0x00070041u, 0x000000a8u, 0x00000c1eu, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000c1u, 0x0004003du, 0x0000009eu, 0x00000c1fu, 0x00000c1eu, 0x00040071u, 0x000000abu, 0x00000c20u, 0x00000c1fu, 0x0004007cu, 0x00000009u, 0x00000c21u, 0x00000c20u, 0x00070041u, 0x000000a8u, 0x00000c23u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000c7u, 0x0004003du, 0x0000009eu, 0x00000c24u, 0x00000c23u, 0x00040071u, 0x000000abu, 0x00000c25u, 0x00000c24u, 0x0004007cu, 0x00000009u, 0x00000c26u, 0x00000c25u, 0x00070041u, 0x000000a8u, 0x00000c28u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000cdu, 0x0004003du, 0x0000009eu, 0x00000c29u, 0x00000c28u, 0x00040071u, 0x000000abu, 0x00000c2au, 0x00000c29u, 0x0004007cu, 0x00000009u, 0x00000c2bu, 0x00000c2au, 0x00070041u, 0x000000a8u, 0x00000c2du, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000d3u, 0x0004003du, 0x0000009eu, 0x00000c2eu, 0x00000c2du, 0x00040071u, 0x000000abu, 0x00000c2fu, 0x00000c2eu, 0x0004007cu, 0x00000009u, 0x00000c30u, 0x00000c2fu, 0x00070041u, 0x000000a8u, 0x00000c32u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000d9u, 0x0004003du, 0x0000009eu, 0x00000c33u, 0x00000c32u, 0x00040071u, 0x000000abu, 0x00000c34u, 0x00000c33u, 0x0004007cu, 0x00000009u, 0x00000c35u, 0x00000c34u, 0x00070041u, 0x000000a8u, 0x00000c37u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000dfu, 0x0004003du, 0x0000009eu, 0x00000c38u, 0x00000c37u, 0x00040071u, 0x000000abu, 0x00000c39u, 0x00000c38u, 0x0004007cu, 0x00000009u, 0x00000c3au, 0x00000c39u, 0x00070041u, 0x000000e6u, 0x00000c3cu, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x00000c3du, 0x00000c3cu, 0x00070041u, 0x000000ebu, 0x00000c3fu, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000eau, 0x0004003du, 0x0000009fu, 0x00000c40u, 0x00000c3fu, 0x00040071u, 0x00000006u, 0x00000c41u, 0x00000c40u, 0x0004007cu, 0x00000008u, 0x00000c42u, 0x00000c41u, 0x00070041u, 0x000000f2u, 0x00000c44u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000f1u, 0x0004003du, 0x0000009du, 0x00000c45u, 0x00000c44u, 0x00040071u, 0x00000006u, 0x00000c46u, 0x00000c45u, 0x0004007cu, 0x00000008u, 0x00000c47u, 0x00000c46u, 0x00070041u, 0x000000f2u, 0x00000c49u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000f8u, 0x0004003du, 0x0000009du, 0x00000c4au, 0x00000c49u, 0x00040071u, 0x00000006u, 0x00000c4bu, 0x00000c4au, 0x0004007cu, 0x00000008u, 0x00000c4cu, 0x00000c4bu, 0x00070041u, 0x000000ffu, 0x00000c4eu, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000feu, 0x0004003du, 0x000000a1u, 0x00000c4fu, 0x00000c4eu, 0x00040072u, 0x00000009u, 0x00000c50u, 0x00000c4fu, 0x00120050u, 0x0000000au, 0x00000c51u, 0x00000c0du, 0x00000c12u, 0x00000c17u, 0x00000c1cu, 0x00000c21u, 0x00000c26u, 0x00000c2bu, 0x00000c30u, 0x00000c35u, 0x00000c3au, 0x00000c3du, 0x00000c42u, 0x00000c47u, 0x00000c4cu, 0x00000c50u, 0x0003003eu, 0x00001133u, 0x00000c0du, 0x0003003eu, 0x00001134u, 0x00000c12u, 0x0003003eu, 0x00001135u, 0x00000c17u, 0x0003003eu, 0x00001136u, 0x00000c1cu, 0x0003003eu, 0x00001137u, 0x00000c21u, 0x0003003eu, 0x00001138u, 0x00000c26u, 0x0003003eu, 0x00001139u, 0x00000c2bu, 0x0003003eu, 0x0000113au, 0x00000c30u, 0x0003003eu, 0x0000113bu, 0x00000c35u, 0x0003003eu, 0x0000113cu, 0x00000c3au, 0x0003003eu, 0x0000113du, 0x00000c3du, 0x0003003eu, 0x0000113eu, 0x00000c42u, 0x0003003eu, 0x0000113fu, 0x00000c47u, 0x0003003eu, 0x00001140u, 0x00000c4cu, 0x0003003eu, 0x00001141u, 0x00000c50u, 0x0003003eu, 0x00001162u, 0x00000c35u, 0x0003003eu, 0x00001163u, 0x00000c3au, 0x0003003eu, 0x00001165u, 0x00000c42u, 0x0003003eu, 0x00001166u, 0x00000c47u, 0x0003003eu, 0x00000b33u, 0x00000b7cu, 0x00070041u, 0x000000a8u, 0x00000c54u, 0x0000010au, 0x0000009cu, 0x00000b7cu, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x00000c55u, 0x00000c54u, 0x00040071u, 0x000000abu, 0x00000c56u, 0x00000c55u, 0x0004007cu, 0x00000009u, 0x00000c57u, 0x00000c56u, 0x00070041u, 0x000000a8u, 0x00000c59u, 0x0000010au, 0x0000009cu, 0x00000b7cu, 0x000000afu, 0x0004003du, 0x0000009eu, 0x00000c5au, 0x00000c59u, 0x00040071u, 0x000000abu, 0x00000c5bu, 0x00000c5au, 0x0004007cu, 0x00000009u, 0x00000c5cu, 0x00000c5bu, 0x00070041u, 0x000000e6u, 0x00000c5eu, 0x0000010au, 0x0000009cu, 0x00000b7cu, 0x000000b5u, 0x0004003du, 0x00000006u, 0x00000c5fu, 0x00000c5eu, 0x00070041u, 0x000000f2u, 0x00000c61u, 0x0000010au, 0x0000009cu, 0x00000b7cu, 0x000000bbu, 0x0004003du, 0x0000009du, 0x00000c62u, 0x00000c61u, 0x00040071u, 0x00000006u, 0x00000c63u, 0x00000c62u, 0x0004007cu, 0x00000008u, 0x00000c64u, 0x00000c63u, 0x00070041u, 0x000000f2u, 0x00000c66u, 0x0000010au, 0x0000009cu, 0x00000b7cu, 0x000000c1u, 0x0004003du, 0x0000009du, 0x00000c67u, 0x00000c66u, 0x00040071u, 0x00000006u, 0x00000c68u, 0x00000c67u, 0x0004007cu, 0x00000008u, 0x00000c69u, 0x00000c68u, 0x000a0050u, 0x0000000fu, 0x00000c6au, 0x00000c57u, 0x00000c5cu, 0x00000c5fu, 0x00000c64u, 0x00000c69u, 0x0000009cu, 0x0000009cu, 0x0003003eu, 0x0000111du, 0x00000c57u, 0x0003003eu, 0x0000111eu, 0x00000c5cu, 0x0003003eu, 0x0000111fu, 0x00000c5fu, 0x0003003eu, 0x00001120u, 0x00000c64u, 0x0003003eu, 0x00001121u, 0x00000c69u, 0x0003003eu, 0x00001122u, 0x0000009cu, 0x0003003eu, 0x00001123u, 0x0000009cu, 0x0003003eu, 0x0000116cu, 0x00000c57u, 0x0003003eu, 0x0000116du, 0x00000c5cu, 0x0003003eu, 0x0000116eu, 0x00000c5fu, 0x0003003eu, 0x0000116fu, 0x00000c64u, 0x0003003eu, 0x00001170u, 0x00000c69u, 0x000500c7u, 0x00000006u, 0x00000b83u, 0x00000c5fu, 0x000003a7u, 0x000500abu, 0x0000002cu, 0x00000b84u, 0x00000b83u, 0x000001b8u, 0x0003003eu, 0x00000b34u, 0x00000b84u, 0x000500c7u, 0x00000006u, 0x00000b87u, 0x00000c5fu, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00000b88u, 0x00000b87u, 0x000001b8u, 0x0003003eu, 0x00000b35u, 0x00000b88u, 0x000500c7u, 0x00000006u, 0x00000b8bu, 0x00000c5fu, 0x00000193u, 0x000500abu, 0x0000002cu, 0x00000b8cu, 0x00000b8bu, 0x000001b8u, 0x0003003eu, 0x00000b36u, 0x00000b8cu, 0x000500c7u, 0x00000006u, 0x00000b8fu, 0x00000c5fu, 0x000003f0u, 0x000500abu, 0x0000002cu, 0x00000b90u, 0x00000b8fu, 0x000001b8u, 0x0003003eu, 0x00000b37u, 0x00000b90u, 0x000500c7u, 0x00000006u, 0x00000b93u, 0x00000c5fu, 0x00000747u, 0x000500abu, 0x0000002cu, 0x00000b94u, 0x00000b93u, 0x000001b8u, 0x0003003eu, 0x00000b38u, 0x00000b94u, 0x000500c7u, 0x00000006u, 0x00000b97u, 0x00000c5fu, 0x0000074du, 0x000500abu, 0x0000002cu, 0x00000b98u, 0x00000b97u, 0x000001b8u, 0x0003003eu, 0x00000b39u, 0x00000b98u, 0x000500c7u, 0x00000006u, 0x00000b9bu, 0x00000c5fu, 0x00000753u, 0x000500abu, 0x0000002cu, 0x00000b9cu, 0x00000b9bu, 0x000001b8u, 0x0003003eu, 0x00000b3au, 0x00000b9cu, 0x000500c7u, 0x00000006u, 0x00000b9fu, 0x00000c5fu, 0x00000759u, 0x000500abu, 0x0000002cu, 0x00000ba0u, 0x00000b9fu, 0x000001b8u, 0x0003003eu, 0x00000b3bu, 0x00000ba0u, 0x0003003eu, 0x00000b3du, 0x00000b90u, 0x000300f7u, 0x00000c70u, 0x00000000u, 0x000400fau, 0x00000b90u, 0x00000c71u, 0x00000c72u, 0x000200f8u, 0x00000c72u, 0x0003003eu, 0x00000c6cu, 0x0000063cu, 0x000200f9u, 0x00000c70u, 0x000200f8u, 0x00000c71u, 0x00050041u, 0x0000009au, 0x00000c73u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000c74u, 0x00000c73u, 0x000500c7u, 0x00000008u, 0x00000c75u, 0x00000c74u, 0x0000063cu, 0x0003003eu, 0x00000c6cu, 0x00000c75u, 0x000200f9u, 0x00000c70u, 0x000200f8u, 0x00000c70u, 0x000700f5u, 0x00000008u, 0x0000121eu, 0x00000c75u, 0x00000c71u, 0x0000063cu, 0x00000c72u, 0x0003003eu, 0x00000c6bu, 0x0000121eu, 0x000300f7u, 0x00000c77u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000c77u, 0x00000000u, 0x00000c78u, 0x00000001u, 0x00000c79u, 0x00000002u, 0x00000c7au, 0x00000003u, 0x00000c7bu, 0x00000004u, 0x00000c7cu, 0x000200f8u, 0x00000c7cu, 0x0004003du, 0x00000009u, 0x00000c85u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c86u, 0x00000c85u, 0x00000c85u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000c6du, 0x00000c86u, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c7bu, 0x0004003du, 0x00000009u, 0x00000c83u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c84u, 0x00000c83u, 0x00000c83u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c6du, 0x00000c84u, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c7au, 0x0004003du, 0x00000009u, 0x00000c7fu, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c80u, 0x00000c7fu, 0x00000c7fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000014u, 0x00000c82u, 0x00000c80u, 0x0000192du, 0x0003003eu, 0x00000c6du, 0x00000c82u, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c79u, 0x0004003du, 0x00000009u, 0x00000c7du, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c7eu, 0x00000c7du, 0x00000c7du, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c6du, 0x00000c7eu, 0x0003003eu, 0x00000c6bu, 0x0000063cu, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c78u, 0x0003003eu, 0x00000c6du, 0x00000647u, 0x0003003eu, 0x00000c6bu, 0x0000063cu, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c77u, 0x000f00f5u, 0x00000008u, 0x00001227u, 0x0000121eu, 0x00000c70u, 0x0000063cu, 0x00000c78u, 0x0000063cu, 0x00000c79u, 0x0000121eu, 0x00000c7au, 0x0000121eu, 0x00000c7bu, 0x0000121eu, 0x00000c7cu, 0x000f00f5u, 0x00000014u, 0x0000121fu, 0x00001221u, 0x00000c70u, 0x00000647u, 0x00000c78u, 0x00000c7eu, 0x00000c79u, 0x00000c82u, 0x00000c7au, 0x00000c84u, 0x00000c7bu, 0x00000c86u, 0x00000c7cu, 0x00050051u, 0x00000008u, 0x00000c89u, 0x0000121fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c8au, 0x0000121fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c8bu, 0x0000121fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000c8cu, 0x00000c89u, 0x00000c8au, 0x00000c8bu, 0x00001227u, 0x0003003eu, 0x00000c6eu, 0x00000c8cu, 0x0003003eu, 0x00000b3cu, 0x00000c8cu, 0x00050041u, 0x00000016u, 0x00000ba3u, 0x00000b3cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000ba4u, 0x00000ba3u, 0x000500c3u, 0x00000008u, 0x00000ba5u, 0x00000ba4u, 0x000000c7u, 0x0003003eu, 0x00000b3eu, 0x00000ba5u, 0x0003003eu, 0x00000b43u, 0x00000b6fu, 0x0003003eu, 0x00000b44u, 0x00000c42u, 0x0003003eu, 0x00000b45u, 0x00000c47u, 0x0004003du, 0x00000008u, 0x00000babu, 0x00000419u, 0x0003003eu, 0x00000b46u, 0x00000babu, 0x0004003du, 0x00000008u, 0x00000bacu, 0x000003fbu, 0x0003003eu, 0x00000b47u, 0x00000bacu, 0x0003003eu, 0x00000b48u, 0x00000889u, 0x0003003eu, 0x00000b49u, 0x00000ba5u, 0x0003003eu, 0x00000b4au, 0x00000b88u, 0x0003003eu, 0x00000b4bu, 0x00000c69u, 0x0003003eu, 0x00000b4cu, 0x00000b84u, 0x0003003eu, 0x00000b4du, 0x00000b9cu, 0x00050080u, 0x00000008u, 0x00000cd7u, 0x00000889u, 0x00000ba5u, 0x000500afu, 0x0000002cu, 0x00000cd8u, 0x00000cd7u, 0x000000d9u, 0x000300f7u, 0x00000ca2u, 0x00000000u, 0x000400fau, 0x00000b88u, 0x00000ca3u, 0x00000ca4u, 0x000200f8u, 0x00000ca4u, 0x00050041u, 0x00000016u, 0x00000d2eu, 0x00000b50u, 0x000001b8u, 0x0003003eu, 0x00000d2eu, 0x0000009cu, 0x00050082u, 0x00000008u, 0x00000d30u, 0x00000295u, 0x00000c47u, 0x0007000cu, 0x00000008u, 0x00000d31u, 0x00000001u, 0x00000027u, 0x00000d30u, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000d32u, 0x00000b50u, 0x000001dau, 0x0003003eu, 0x00000d32u, 0x00000d31u, 0x0003003eu, 0x00000c9fu, 0x00000cd8u, 0x000400a8u, 0x0000002cu, 0x00000d38u, 0x00000b84u, 0x000300f7u, 0x00000d39u, 0x00000000u, 0x000400fau, 0x00000d38u, 0x00000d3au, 0x00000d39u, 0x000200f8u, 0x00000d3au, 0x000400a8u, 0x0000002cu, 0x00000d3cu, 0x00000cd8u, 0x000500a7u, 0x0000002cu, 0x00000d3eu, 0x00000d3cu, 0x00000b9cu, 0x000200f9u, 0x00000d39u, 0x000200f8u, 0x00000d39u, 0x000700f5u, 0x0000002cu, 0x00000d3fu, 0x00000b84u, 0x00000ca4u, 0x00000d3eu, 0x00000d3au, 0x0003003eu, 0x00000b4eu, 0x00000d3fu, 0x0003003eu, 0x00000b4fu, 0x00000cd8u, 0x0003003eu, 0x00000c98u, 0x000002b3u, 0x000200f9u, 0x00000ca2u, 0x000200f8u, 0x00000ca3u, 0x0003003eu, 0x00000c8eu, 0x00000babu, 0x0003003eu, 0x00000d42u, 0x00000babu, 0x000500c3u, 0x00000008u, 0x00000d4au, 0x00000babu, 0x000000eau, 0x0003003eu, 0x00000d43u, 0x00000d4au, 0x000500c7u, 0x00000008u, 0x00000d4cu, 0x00000babu, 0x0000015du, 0x0003003eu, 0x00000d44u, 0x00000d4cu, 0x00050082u, 0x00000008u, 0x00000d4eu, 0x000000cdu, 0x00000d4au, 0x0007000cu, 0x00000008u, 0x00000d4fu, 0x00000001u, 0x0000002au, 0x00000d4eu, 0x0000009cu, 0x0003003eu, 0x00000d45u, 0x00000d4fu, 0x000500c3u, 0x00000008u, 0x00000d51u, 0x00000164u, 0x00000d4au, 0x00050082u, 0x00000008u, 0x00000d52u, 0x00000164u, 0x00000d51u, 0x0003003eu, 0x00000d46u, 0x00000d52u, 0x000500c4u, 0x00000008u, 0x00000d55u, 0x00000d4cu, 0x00000d4fu, 0x00050080u, 0x00000008u, 0x00000d57u, 0x00000d55u, 0x00000d52u, 0x0003003eu, 0x00000d47u, 0x00000d57u, 0x0003003eu, 0x00000c8du, 0x00000d57u, 0x0003003eu, 0x00000c90u, 0x00000bacu, 0x000500c4u, 0x00000008u, 0x00000d5au, 0x000000afu, 0x00000bacu, 0x0003003eu, 0x00000d58u, 0x00000d5au, 0x0003003eu, 0x00000c8fu, 0x00000d5au, 0x000500c7u, 0x00000008u, 0x00000cabu, 0x00000d4au, 0x00000295u, 0x0003003eu, 0x00000c91u, 0x00000cabu, 0x0003003eu, 0x00000c92u, 0x00000298u, 0x00050082u, 0x00000008u, 0x00000caeu, 0x00000c47u, 0x00000bacu, 0x0008000cu, 0x00000008u, 0x00000cafu, 0x00000001u, 0x0000002du, 0x00000caeu, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000cb0u, 0x00000b50u, 0x000001b8u, 0x0003003eu, 0x00000cb0u, 0x00000cafu, 0x00050082u, 0x00000008u, 0x00000cb3u, 0x00000bacu, 0x00000c47u, 0x0008000cu, 0x00000008u, 0x00000cb4u, 0x00000001u, 0x0000002du, 0x00000cb3u, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000cb5u, 0x00000b50u, 0x000001dau, 0x0003003eu, 0x00000cb5u, 0x00000cb4u, 0x000500b1u, 0x0000002cu, 0x00000cb7u, 0x00000cabu, 0x000000bbu, 0x000300f7u, 0x00000cb8u, 0x00000000u, 0x000400fau, 0x00000cb7u, 0x00000cb9u, 0x00000cb8u, 0x000200f8u, 0x00000cb9u, 0x000500abu, 0x0000002cu, 0x00000cbbu, 0x00000d5au, 0x000002a8u, 0x000300f7u, 0x00000cbcu, 0x00000000u, 0x000400fau, 0x00000cbbu, 0x00000cbdu, 0x00000cbeu, 0x000200f8u, 0x00000cbeu, 0x0003003eu, 0x00000c92u, 0x000002b3u, 0x0003003eu, 0x00000c8fu, 0x000002b4u, 0x000200f9u, 0x00000cbcu, 0x000200f8u, 0x00000cbdu, 0x000500c4u, 0x00000008u, 0x00000cc0u, 0x00000d5au, 0x000000afu, 0x000500c3u, 0x00000008u, 0x00000cc2u, 0x000002aeu, 0x00000cabu, 0x0007000cu, 0x00000008u, 0x00000cc3u, 0x00000001u, 0x0000002au, 0x00000cc0u, 0x00000cc2u, 0x0003003eu, 0x00000c8fu, 0x00000cc3u, 0x000200f9u, 0x00000cbcu, 0x000200f8u, 0x00000cbcu, 0x000700f5u, 0x00000008u, 0x0000123cu, 0x00000cc3u, 0x00000cbdu, 0x000002b4u, 0x00000cbeu, 0x000600a9u, 0x0000002cu, 0x00001934u, 0x00000cbbu, 0x00000298u, 0x000002b3u, 0x000200f9u, 0x00000cb8u, 0x000200f8u, 0x00000cb8u, 0x000700f5u, 0x0000002cu, 0x0000123fu, 0x00000298u, 0x00000ca3u, 0x00001934u, 0x00000cbcu, 0x000700f5u, 0x00000008u, 0x0000123bu, 0x00000d5au, 0x00000ca3u, 0x0000123cu, 0x00000cbcu, 0x000500c5u, 0x00000008u, 0x00000cc6u, 0x00000c42u, 0x0000123bu, 0x0003003eu, 0x00000c94u, 0x00000cc6u, 0x000500abu, 0x0000002cu, 0x00000d5du, 0x00000cc6u, 0x0000009cu, 0x000300f7u, 0x00000d5eu, 0x00000000u, 0x000400fau, 0x00000d5du, 0x00000d5fu, 0x00000d5eu, 0x000200f8u, 0x00000d5fu, 0x0006000cu, 0x00000008u, 0x00000d61u, 0x00000001u, 0x0000004au, 0x00000cc6u, 0x000500c4u, 0x00000008u, 0x00000d62u, 0x000000afu, 0x00000d61u, 0x0003003eu, 0x00000c94u, 0x00000d62u, 0x000200f9u, 0x00000d5eu, 0x000200f8u, 0x00000d5eu, 0x000700f5u, 0x00000008u, 0x0000123du, 0x00000cc6u, 0x00000cb8u, 0x00000d62u, 0x00000d5fu, 0x0003003eu, 0x00000d5bu, 0x0000123du, 0x0003003eu, 0x00000c93u, 0x0000123du, 0x0003003eu, 0x00000c95u, 0x0000123du, 0x000500c4u, 0x00000008u, 0x00000ccau, 0x0000123du, 0x000000bbu, 0x0003003eu, 0x00000c93u, 0x00000ccau, 0x000400a8u, 0x0000002cu, 0x00000cccu, 0x0000123fu, 0x000300f7u, 0x00000ccdu, 0x00000000u, 0x000400fau, 0x00000cccu, 0x00000cceu, 0x00000ccdu, 0x000200f8u, 0x00000cceu, 0x00050080u, 0x00000008u, 0x00000cd1u, 0x00000b6fu, 0x00000ccau, 0x000500afu, 0x0000002cu, 0x00000cd3u, 0x00000cd1u, 0x00000d57u, 0x000200f9u, 0x00000ccdu, 0x000200f8u, 0x00000ccdu, 0x000700f5u, 0x0000002cu, 0x00000cd4u, 0x0000123fu, 0x00000d5eu, 0x00000cd3u, 0x00000cceu, 0x0003003eu, 0x00000c96u, 0x00000cd4u, 0x0003003eu, 0x00000c97u, 0x00000cd8u, 0x000400a8u, 0x0000002cu, 0x00000cdau, 0x00000b84u, 0x000300f7u, 0x00000cdbu, 0x00000000u, 0x000400fau, 0x00000cdau, 0x00000cdcu, 0x00000cdbu, 0x000200f8u, 0x00000cdcu, 0x000400a8u, 0x0000002cu, 0x00000cdeu, 0x00000cd8u, 0x000500a7u, 0x0000002cu, 0x00000ce0u, 0x00000cdeu, 0x00000b9cu, 0x000500a7u, 0x0000002cu, 0x00000ce2u, 0x00000ce0u, 0x00000cd4u, 0x000200f9u, 0x00000cdbu, 0x000200f8u, 0x00000cdbu, 0x000700f5u, 0x0000002cu, 0x00000ce3u, 0x00000b84u, 0x00000ccdu, 0x00000ce2u, 0x00000cdcu, 0x0003003eu, 0x00000b4eu, 0x00000ce3u, 0x0003003eu, 0x00000b4fu, 0x00000cd8u, 0x0003003eu, 0x00000c98u, 0x00000298u, 0x000500aau, 0x0000002cu, 0x00000ce6u, 0x00000d57u, 0x00000170u, 0x0003003eu, 0x00000c99u, 0x00000ce6u, 0x000500b1u, 0x0000002cu, 0x00000ce9u, 0x00000b6fu, 0x00000d57u, 0x0003003eu, 0x00000c9au, 0x00000ce9u, 0x00050082u, 0x00000008u, 0x00000cecu, 0x00000b6fu, 0x00000ccau, 0x0003003eu, 0x00000c9bu, 0x00000cecu, 0x000500b3u, 0x0000002cu, 0x00000cf0u, 0x00000cecu, 0x00000d57u, 0x000500a6u, 0x0000002cu, 0x00000cf1u, 0x0000123fu, 0x00000cf0u, 0x0003003eu, 0x00000c9cu, 0x00000cf1u, 0x000300f7u, 0x00000cf3u, 0x00000000u, 0x000b00fbu, 0x00000c69u, 0x00000cf3u, 0x00000000u, 0x00000cf4u, 0x00000001u, 0x00000cf5u, 0x00000002u, 0x00000cf6u, 0x00000003u, 0x00000cf7u, 0x000200f8u, 0x00000cf7u, 0x000500a7u, 0x0000002cu, 0x00000d2au, 0x00000cd4u, 0x00000cf1u, 0x000400a8u, 0x0000002cu, 0x00000d2cu, 0x00000ce6u, 0x000500a7u, 0x0000002cu, 0x00000d2du, 0x00000d2au, 0x00000d2cu, 0x0003003eu, 0x00000c98u, 0x00000d2du, 0x000200f9u, 0x00000cf3u, 0x000200f8u, 0x00000cf6u, 0x000500a6u, 0x0000002cu, 0x00000d27u, 0x00000ce9u, 0x00000ce6u, 0x0003003eu, 0x00000c98u, 0x00000d27u, 0x000200f9u, 0x00000cf3u, 0x000200f8u, 0x00000cf5u, 0x000400a8u, 0x0000002cu, 0x00000d02u, 0x00000ce9u, 0x000400a8u, 0x0000002cu, 0x00000d04u, 0x00000cd4u, 0x000500a6u, 0x0000002cu, 0x00000d05u, 0x00000d02u, 0x00000d04u, 0x000400a8u, 0x0000002cu, 0x00000d07u, 0x00000cd8u, 0x000500a6u, 0x0000002cu, 0x00000d08u, 0x00000d05u, 0x00000d07u, 0x000300f7u, 0x00000d09u, 0x00000000u, 0x000400fau, 0x00000d08u, 0x00000d0au, 0x00000d0bu, 0x000200f8u, 0x00000d0bu, 0x000500c7u, 0x00000008u, 0x00000d16u, 0x0000123du, 0x000002b4u, 0x0003003eu, 0x00000c9du, 0x00000d16u, 0x0006000cu, 0x00000008u, 0x00000d66u, 0x00000001u, 0x0000004au, 0x00000d16u, 0x0007000cu, 0x00000008u, 0x00000d67u, 0x00000001u, 0x0000002au, 0x00000d66u, 0x0000009cu, 0x0003003eu, 0x00000d64u, 0x00000d67u, 0x0003003eu, 0x00000c95u, 0x00000d67u, 0x000500c3u, 0x00000008u, 0x00000d1au, 0x00000d57u, 0x00000d67u, 0x000500c3u, 0x00000008u, 0x00000d1du, 0x00000b6fu, 0x00000d67u, 0x00050082u, 0x00000008u, 0x00000d1eu, 0x00000d1au, 0x00000d1du, 0x000500c7u, 0x00000008u, 0x00000d1fu, 0x00000d1eu, 0x00000295u, 0x0003003eu, 0x00000c9eu, 0x00000d1fu, 0x00050084u, 0x00000008u, 0x00000d22u, 0x00000d1fu, 0x00000889u, 0x000500c3u, 0x00000008u, 0x00000d23u, 0x00000d22u, 0x000000bbu, 0x0007000cu, 0x00000008u, 0x00000d24u, 0x00000001u, 0x00000027u, 0x00000d23u, 0x000000d9u, 0x0003003eu, 0x00000b48u, 0x00000d24u, 0x0003003eu, 0x00000c98u, 0x000002b3u, 0x000200f9u, 0x00000d09u, 0x000200f8u, 0x00000d0au, 0x000400a8u, 0x0000002cu, 0x00000d0du, 0x00000ce6u, 0x000300f7u, 0x00000d0eu, 0x00000000u, 0x000400fau, 0x00000d0du, 0x00000d0fu, 0x00000d0eu, 0x000200f8u, 0x00000d0fu, 0x000600a9u, 0x0000002cu, 0x00000d13u, 0x00000cd8u, 0x00000ce9u, 0x00000cf1u, 0x000200f9u, 0x00000d0eu, 0x000200f8u, 0x00000d0eu, 0x000700f5u, 0x0000002cu, 0x00000d14u, 0x00000ce6u, 0x00000d0au, 0x00000d13u, 0x00000d0fu, 0x0003003eu, 0x00000c98u, 0x00000d14u, 0x000200f9u, 0x00000d09u, 0x000200f8u, 0x00000d09u, 0x000700f5u, 0x00000008u, 0x0000126fu, 0x00000889u, 0x00000d0eu, 0x00000d24u, 0x00000d0bu, 0x000700f5u, 0x0000002cu, 0x0000126bu, 0x00000d14u, 0x00000d0eu, 0x000002b3u, 0x00000d0bu, 0x000200f9u, 0x00000cf3u, 0x000200f8u, 0x00000cf4u, 0x000400a8u, 0x0000002cu, 0x00000cf9u, 0x00000ce6u, 0x000300f7u, 0x00000cfau, 0x00000000u, 0x000400fau, 0x00000cf9u, 0x00000cfbu, 0x00000cfau, 0x000200f8u, 0x00000cfbu, 0x000600a9u, 0x0000002cu, 0x00000cffu, 0x00000cd8u, 0x00000ce9u, 0x00000cf1u, 0x000200f9u, 0x00000cfau, 0x000200f8u, 0x00000cfau, 0x000700f5u, 0x0000002cu, 0x00000d00u, 0x00000ce6u, 0x00000cf4u, 0x00000cffu, 0x00000cfbu, 0x0003003eu, 0x00000c98u, 0x00000d00u, 0x000200f9u, 0x00000cf3u, 0x000200f8u, 0x00000cf3u, 0x000d00f5u, 0x00000008u, 0x0000126du, 0x00000889u, 0x00000cdbu, 0x00000889u, 0x00000cfau, 0x0000126fu, 0x00000d09u, 0x00000889u, 0x00000cf6u, 0x00000889u, 0x00000cf7u, 0x000d00f5u, 0x0000002cu, 0x0000126au, 0x00000298u, 0x00000cdbu, 0x00000d00u, 0x00000cfau, 0x0000126bu, 0x00000d09u, 0x00000d27u, 0x00000cf6u, 0x00000d2du, 0x00000cf7u, 0x000200f9u, 0x00000ca2u, 0x000200f8u, 0x00000ca2u, 0x000700f5u, 0x0000002cu, 0x00001272u, 0x00000ce3u, 0x00000cf3u, 0x00000d3fu, 0x00000d39u, 0x000700f5u, 0x00000008u, 0x0000126cu, 0x0000126du, 0x00000cf3u, 0x00000889u, 0x00000d39u, 0x000700f5u, 0x0000002cu, 0x00001269u, 0x0000126au, 0x00000cf3u, 0x000002b3u, 0x00000d39u, 0x0003003eu, 0x00000ca0u, 0x00001269u, 0x0003003eu, 0x00000b2cu, 0x0000126cu, 0x0003003eu, 0x00000b40u, 0x00001272u, 0x0003003eu, 0x00000b41u, 0x00000cd8u, 0x0004003du, 0x0000002eu, 0x00000bb8u, 0x00000b50u, 0x0003003eu, 0x00000b42u, 0x00000bb8u, 0x0003003eu, 0x00000b3fu, 0x00001269u, 0x000300f7u, 0x00000bbau, 0x00000000u, 0x000400fau, 0x00001269u, 0x00000bbbu, 0x00000bbau, 0x000200f8u, 0x00000bbbu, 0x000400a8u, 0x0000002cu, 0x00000bbdu, 0x00000b9cu, 0x000500abu, 0x0000002cu, 0x00000bbfu, 0x0000126cu, 0x0000009cu, 0x000500a6u, 0x0000002cu, 0x00000bc0u, 0x00000bbdu, 0x00000bbfu, 0x000200f9u, 0x00000bbau, 0x000200f8u, 0x00000bbau, 0x000700f5u, 0x0000002cu, 0x00000bc1u, 0x00001269u, 0x00000ca2u, 0x00000bc0u, 0x00000bbbu, 0x000300f7u, 0x00000bc2u, 0x00000000u, 0x000400fau, 0x00000bc1u, 0x00000bc3u, 0x00000bc2u, 0x000200f8u, 0x00000bc3u, 0x0004003du, 0x00000009u, 0x00000bc5u, 0x00000b3cu, 0x00080050u, 0x00000029u, 0x00000bcbu, 0x000008b6u, 0x00000bc5u, 0x00000c35u, 0x00000c3au, 0x000008c9u, 0x0003003eu, 0x00001176u, 0x000008b6u, 0x0003003eu, 0x00001177u, 0x00000bc5u, 0x0003003eu, 0x00001178u, 0x00000c35u, 0x0003003eu, 0x00001179u, 0x00000c3au, 0x0003003eu, 0x0000117au, 0x000008c9u, 0x0003003eu, 0x00000b52u, 0x00000c57u, 0x000300f7u, 0x00000bcfu, 0x00000000u, 0x000400fau, 0x00000b98u, 0x00000bd0u, 0x00000bcfu, 0x000200f8u, 0x00000bd0u, 0x0003003eu, 0x0000118cu, 0x000008b6u, 0x0003003eu, 0x0000118du, 0x00000bc5u, 0x0003003eu, 0x0000118eu, 0x00000c35u, 0x0003003eu, 0x0000118fu, 0x00000c3au, 0x0003003eu, 0x00001190u, 0x000008c9u, 0x0003003eu, 0x00000b54u, 0x00000c57u, 0x0003003eu, 0x00000b55u, 0x00000b84u, 0x0003003eu, 0x00000b56u, 0x00001272u, 0x0003003eu, 0x00000b57u, 0x00000b94u, 0x0003003eu, 0x00000b58u, 0x00000cd8u, 0x0003003eu, 0x00000b59u, 0x00000bb8u, 0x0003003eu, 0x00000b5au, 0x00000298u, 0x0003003eu, 0x00000d68u, 0x00000298u, 0x00050041u, 0x00000016u, 0x00000d73u, 0x00000b54u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000d74u, 0x00000d73u, 0x000300f7u, 0x00000d75u, 0x00000000u, 0x000b00fbu, 0x00000d74u, 0x00000d75u, 0x00000000u, 0x00000d76u, 0x00000001u, 0x00000d77u, 0x00000002u, 0x00000d78u, 0x00000003u, 0x00000d79u, 0x000200f8u, 0x00000d79u, 0x0004003du, 0x00000009u, 0x00000d84u, 0x0000118eu, 0x0008004fu, 0x00000014u, 0x00000d85u, 0x00000d84u, 0x00000d84u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6au, 0x00000d85u, 0x000200f9u, 0x00000d75u, 0x000200f8u, 0x00000d78u, 0x0008004fu, 0x00000014u, 0x00000d82u, 0x00000c3au, 0x00000c3au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6au, 0x00000d82u, 0x000200f9u, 0x00000d75u, 0x000200f8u, 0x00000d77u, 0x0004003du, 0x00000009u, 0x00000d7eu, 0x0000118du, 0x0008004fu, 0x00000014u, 0x00000d7fu, 0x00000d7eu, 0x00000d7eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6au, 0x00000d7fu, 0x000200f9u, 0x00000d75u, 0x000200f8u, 0x00000d76u, 0x0004003du, 0x00000009u, 0x00000d7bu, 0x0000118cu, 0x0008004fu, 0x00000014u, 0x00000d7cu, 0x00000d7bu, 0x00000d7bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6au, 0x00000d7cu, 0x000200f9u, 0x00000d75u, 0x000200f8u, 0x00000d75u, 0x000d00f5u, 0x00000014u, 0x00001349u, 0x00001353u, 0x00000bd0u, 0x00000d7cu, 0x00000d76u, 0x00000d7fu, 0x00000d77u, 0x00000d82u, 0x00000d78u, 0x00000d85u, 0x00000d79u, 0x00050041u, 0x00000016u, 0x00000d90u, 0x00000b54u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000d91u, 0x00000d90u, 0x000300f7u, 0x00000d92u, 0x00000000u, 0x000b00fbu, 0x00000d91u, 0x00000d92u, 0x00000000u, 0x00000d93u, 0x00000001u, 0x00000d94u, 0x00000002u, 0x00000d95u, 0x00000003u, 0x00000d96u, 0x000200f8u, 0x00000d96u, 0x0004003du, 0x00000009u, 0x00000da1u, 0x0000118eu, 0x0008004fu, 0x00000014u, 0x00000da2u, 0x00000da1u, 0x00000da1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6bu, 0x00000da2u, 0x000200f9u, 0x00000d92u, 0x000200f8u, 0x00000d95u, 0x0008004fu, 0x00000014u, 0x00000d9fu, 0x00000c3au, 0x00000c3au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6bu, 0x00000d9fu, 0x000200f9u, 0x00000d92u, 0x000200f8u, 0x00000d94u, 0x0004003du, 0x00000009u, 0x00000d9bu, 0x0000118du, 0x0008004fu, 0x00000014u, 0x00000d9cu, 0x00000d9bu, 0x00000d9bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6bu, 0x00000d9cu, 0x000200f9u, 0x00000d92u, 0x000200f8u, 0x00000d93u, 0x0004003du, 0x00000009u, 0x00000d98u, 0x0000118cu, 0x0008004fu, 0x00000014u, 0x00000d99u, 0x00000d98u, 0x00000d98u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d6bu, 0x00000d99u, 0x000200f9u, 0x00000d92u, 0x000200f8u, 0x00000d92u, 0x00050041u, 0x00000016u, 0x00000dbeu, 0x00000b54u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000dbfu, 0x00000dbeu, 0x000300f7u, 0x00000dc0u, 0x00000000u, 0x000b00fbu, 0x00000dbfu, 0x00000dc0u, 0x00000000u, 0x00000dc1u, 0x00000001u, 0x00000dc2u, 0x00000002u, 0x00000dc3u, 0x00000003u, 0x00000dc4u, 0x000200f8u, 0x00000dc4u, 0x0003003eu, 0x00000d6cu, 0x0000009cu, 0x000200f9u, 0x00000dc0u, 0x000200f8u, 0x00000dc3u, 0x0003003eu, 0x00000d6cu, 0x000008c9u, 0x000200f9u, 0x00000dc0u, 0x000200f8u, 0x00000dc2u, 0x00050041u, 0x00000016u, 0x00001198u, 0x0000118eu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000dc8u, 0x00001198u, 0x0003003eu, 0x00000d6cu, 0x00000dc8u, 0x000200f9u, 0x00000dc0u, 0x000200f8u, 0x00000dc1u, 0x00050041u, 0x00000016u, 0x00001197u, 0x0000118cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000dc6u, 0x00001197u, 0x0003003eu, 0x00000d6cu, 0x00000dc6u, 0x000200f9u, 0x00000dc0u, 0x000200f8u, 0x00000dc0u, 0x000d00f5u, 0x00000008u, 0x00001309u, 0x00001317u, 0x00000d92u, 0x00000dc6u, 0x00000dc1u, 0x00000dc8u, 0x00000dc2u, 0x000008c9u, 0x00000dc3u, 0x0000009cu, 0x00000dc4u, 0x00050041u, 0x00000016u, 0x00000dcbu, 0x00000b54u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000dccu, 0x00000dcbu, 0x000300f7u, 0x00000dcdu, 0x00000000u, 0x000b00fbu, 0x00000dccu, 0x00000dcdu, 0x00000000u, 0x00000dceu, 0x00000001u, 0x00000dcfu, 0x00000002u, 0x00000dd0u, 0x00000003u, 0x00000dd1u, 0x000200f8u, 0x00000dd1u, 0x0003003eu, 0x00000d6du, 0x0000009cu, 0x000200f9u, 0x00000dcdu, 0x000200f8u, 0x00000dd0u, 0x0003003eu, 0x00000d6du, 0x00000133u, 0x000200f9u, 0x00000dcdu, 0x000200f8u, 0x00000dcfu, 0x00050041u, 0x00000016u, 0x00001199u, 0x0000118du, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000dd6u, 0x00001199u, 0x0003003eu, 0x00000d6du, 0x00000dd6u, 0x000200f9u, 0x00000dcdu, 0x000200f8u, 0x00000dceu, 0x000400c8u, 0x00000008u, 0x00000dd3u, 0x00001309u, 0x000500c7u, 0x00000008u, 0x00000dd4u, 0x00000dd3u, 0x00000133u, 0x0003003eu, 0x00000d6du, 0x00000dd4u, 0x000200f9u, 0x00000dcdu, 0x000200f8u, 0x00000dcdu, 0x000d00f5u, 0x00000008u, 0x00001326u, 0x00001335u, 0x00000dc0u, 0x00000dd4u, 0x00000dceu, 0x00000dd6u, 0x00000dcfu, 0x00000133u, 0x00000dd0u, 0x0000009cu, 0x00000dd1u, 0x000500c3u, 0x00000008u, 0x00000dd8u, 0x00001309u, 0x000000bbu, 0x0003003eu, 0x00000d6cu, 0x00000dd8u, 0x000500c3u, 0x00000008u, 0x00000ddau, 0x00001326u, 0x000000bbu, 0x0003003eu, 0x00000d6du, 0x00000ddau, 0x0004003du, 0x00000008u, 0x00000ddcu, 0x00000dcbu, 0x000500aau, 0x0000002cu, 0x00000dddu, 0x00000ddcu, 0x000000afu, 0x000300f7u, 0x00000ddeu, 0x00000000u, 0x000400fau, 0x00000dddu, 0x00000ddfu, 0x00000ddeu, 0x000200f8u, 0x00000ddfu, 0x00050041u, 0x00000016u, 0x00000de1u, 0x00000b59u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000de2u, 0x00000de1u, 0x000500c3u, 0x00000008u, 0x00000de3u, 0x00000dd8u, 0x00000de2u, 0x000500c7u, 0x00000008u, 0x00000de4u, 0x00000de3u, 0x00000222u, 0x0003003eu, 0x00000d6cu, 0x00000de4u, 0x00050041u, 0x00000016u, 0x00000de6u, 0x00000b59u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000de7u, 0x00000de6u, 0x000500c3u, 0x00000008u, 0x00000de8u, 0x00000ddau, 0x00000de7u, 0x000500c5u, 0x00000008u, 0x00000de9u, 0x00000de8u, 0x000000bbu, 0x0003003eu, 0x00000d6du, 0x00000de9u, 0x000200f9u, 0x00000ddeu, 0x000200f8u, 0x00000ddeu, 0x000700f5u, 0x00000008u, 0x00001360u, 0x00000ddau, 0x00000dcdu, 0x00000de9u, 0x00000ddfu, 0x000700f5u, 0x00000008u, 0x00001342u, 0x00000dd8u, 0x00000dcdu, 0x00000de4u, 0x00000ddfu, 0x0004003du, 0x00000014u, 0x00000deau, 0x00000d6bu, 0x00050051u, 0x00000008u, 0x00000debu, 0x00000deau, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000decu, 0x00000deau, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000dedu, 0x00000deau, 0x00000002u, 0x00060050u, 0x00000014u, 0x00000df0u, 0x00001342u, 0x00001342u, 0x00001342u, 0x00050084u, 0x00000014u, 0x00000df1u, 0x00000deau, 0x00000df0u, 0x00050051u, 0x00000008u, 0x00000df3u, 0x00001349u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000df4u, 0x00001349u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000df5u, 0x00001349u, 0x00000002u, 0x00050080u, 0x00000008u, 0x00000df8u, 0x00001360u, 0x000000afu, 0x00060050u, 0x00000014u, 0x00000df9u, 0x00000df8u, 0x00000df8u, 0x00000df8u, 0x00050084u, 0x00000014u, 0x00000dfau, 0x00001349u, 0x00000df9u, 0x00050080u, 0x00000014u, 0x00000dfbu, 0x00000df1u, 0x00000dfau, 0x0003003eu, 0x00000d6eu, 0x00000dfbu, 0x0004003du, 0x00000014u, 0x00000e03u, 0x00000d6eu, 0x000500c3u, 0x00000014u, 0x00000e05u, 0x00000e03u, 0x00001931u, 0x00050051u, 0x00000008u, 0x00000e06u, 0x00000e05u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000e07u, 0x00000e05u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000e08u, 0x00000e05u, 0x00000002u, 0x0003003eu, 0x00000d6bu, 0x00000e05u, 0x0004003du, 0x00000014u, 0x00000e34u, 0x00000d6bu, 0x000500c7u, 0x00000014u, 0x00000e36u, 0x00000e34u, 0x00000134u, 0x0003003eu, 0x00000d68u, 0x000002b3u, 0x0003003eu, 0x00000d69u, 0x00000e36u, 0x0003003eu, 0x00000d70u, 0x00000e36u, 0x0009004fu, 0x00000009u, 0x00000bdbu, 0x000008b6u, 0x00000e36u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001176u, 0x00000bdbu, 0x0003003eu, 0x00000b52u, 0x00000c5cu, 0x000200f9u, 0x00000bcfu, 0x000200f8u, 0x00000bcfu, 0x000700f5u, 0x00000014u, 0x0000185eu, 0x00001353u, 0x00000bc3u, 0x00001349u, 0x00000ddeu, 0x000700f5u, 0x00000008u, 0x00001836u, 0x00001335u, 0x00000bc3u, 0x00001360u, 0x00000ddeu, 0x000700f5u, 0x00000008u, 0x0000180eu, 0x00001317u, 0x00000bc3u, 0x00001342u, 0x00000ddeu, 0x000700f5u, 0x00000009u, 0x000013cdu, 0x000008b6u, 0x00000bc3u, 0x00000bdbu, 0x00000ddeu, 0x00070050u, 0x00001935u, 0x00001936u, 0x00000b98u, 0x00000b98u, 0x00000b98u, 0x00000b98u, 0x000600a9u, 0x00000009u, 0x00001937u, 0x00001936u, 0x00000c5cu, 0x00000c57u, 0x00080050u, 0x00000029u, 0x0000118bu, 0x000013cdu, 0x00000bc5u, 0x00000c35u, 0x00000c3au, 0x000008c9u, 0x0003003eu, 0x0000119au, 0x000013cdu, 0x0003003eu, 0x0000119bu, 0x00000bc5u, 0x0003003eu, 0x0000119cu, 0x00000c35u, 0x0003003eu, 0x0000119du, 0x00000c3au, 0x0003003eu, 0x0000119eu, 0x000008c9u, 0x0003003eu, 0x00000b5du, 0x00001937u, 0x0003003eu, 0x00000b5eu, 0x00000b84u, 0x0003003eu, 0x00000b5fu, 0x00001272u, 0x0003003eu, 0x00000b60u, 0x00000b94u, 0x0003003eu, 0x00000b61u, 0x00000cd8u, 0x0003003eu, 0x00000b62u, 0x00000bb8u, 0x0003003eu, 0x00000b63u, 0x000002b3u, 0x0003003eu, 0x00000e38u, 0x00000298u, 0x000300f7u, 0x00000e41u, 0x00000000u, 0x000300fbu, 0x000001b8u, 0x00000e42u, 0x000200f8u, 0x00000e42u, 0x00050041u, 0x00000016u, 0x00000e43u, 0x00000b5du, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000e44u, 0x00000e43u, 0x000300f7u, 0x00000e45u, 0x00000000u, 0x000b00fbu, 0x00000e44u, 0x00000e45u, 0x00000000u, 0x00000e46u, 0x00000001u, 0x00000e47u, 0x00000002u, 0x00000e48u, 0x00000003u, 0x00000e49u, 0x000200f8u, 0x00000e49u, 0x0004003du, 0x00000009u, 0x00000e54u, 0x0000119cu, 0x0008004fu, 0x00000014u, 0x00000e55u, 0x00000e54u, 0x00000e54u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3au, 0x00000e55u, 0x000200f9u, 0x00000e45u, 0x000200f8u, 0x00000e48u, 0x0008004fu, 0x00000014u, 0x00000e52u, 0x00000c3au, 0x00000c3au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3au, 0x00000e52u, 0x000200f9u, 0x00000e45u, 0x000200f8u, 0x00000e47u, 0x0004003du, 0x00000009u, 0x00000e4eu, 0x0000119bu, 0x0008004fu, 0x00000014u, 0x00000e4fu, 0x00000e4eu, 0x00000e4eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3au, 0x00000e4fu, 0x000200f9u, 0x00000e45u, 0x000200f8u, 0x00000e46u, 0x0004003du, 0x00000009u, 0x00000e4bu, 0x0000119au, 0x0008004fu, 0x00000014u, 0x00000e4cu, 0x00000e4bu, 0x00000e4bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3au, 0x00000e4cu, 0x000200f9u, 0x00000e45u, 0x000200f8u, 0x00000e45u, 0x000d00f5u, 0x00000014u, 0x0000147au, 0x00001485u, 0x00000e42u, 0x00000e4cu, 0x00000e46u, 0x00000e4fu, 0x00000e47u, 0x00000e52u, 0x00000e48u, 0x00000e55u, 0x00000e49u, 0x000400a8u, 0x0000002cu, 0x00000e5bu, 0x00000cd8u, 0x000500a7u, 0x0000002cu, 0x00000e5cu, 0x00000b94u, 0x00000e5bu, 0x000300f7u, 0x00000e5du, 0x00000000u, 0x000400fau, 0x00000e5cu, 0x00000e5eu, 0x00000e5du, 0x000200f8u, 0x00000e5eu, 0x0003003eu, 0x00000e38u, 0x000002b3u, 0x0003003eu, 0x00000e39u, 0x0000147au, 0x000200f9u, 0x00000e41u, 0x000200f8u, 0x00000e5du, 0x00050041u, 0x00000016u, 0x00000e60u, 0x00000b5du, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000e61u, 0x00000e60u, 0x000300f7u, 0x00000e62u, 0x00000000u, 0x000b00fbu, 0x00000e61u, 0x00000e62u, 0x00000000u, 0x00000e63u, 0x00000001u, 0x00000e64u, 0x00000002u, 0x00000e65u, 0x00000003u, 0x00000e66u, 0x000200f8u, 0x00000e66u, 0x0004003du, 0x00000009u, 0x00000e71u, 0x0000119cu, 0x0008004fu, 0x00000014u, 0x00000e72u, 0x00000e71u, 0x00000e71u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3bu, 0x00000e72u, 0x000200f9u, 0x00000e62u, 0x000200f8u, 0x00000e65u, 0x0008004fu, 0x00000014u, 0x00000e6fu, 0x00000c3au, 0x00000c3au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3bu, 0x00000e6fu, 0x000200f9u, 0x00000e62u, 0x000200f8u, 0x00000e64u, 0x0004003du, 0x00000009u, 0x00000e6bu, 0x0000119bu, 0x0008004fu, 0x00000014u, 0x00000e6cu, 0x00000e6bu, 0x00000e6bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3bu, 0x00000e6cu, 0x000200f9u, 0x00000e62u, 0x000200f8u, 0x00000e63u, 0x0004003du, 0x00000009u, 0x00000e68u, 0x0000119au, 0x0008004fu, 0x00000014u, 0x00000e69u, 0x00000e68u, 0x00000e68u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e3bu, 0x00000e69u, 0x000200f9u, 0x00000e62u, 0x000200f8u, 0x00000e62u, 0x000400a8u, 0x0000002cu, 0x00000e77u, 0x00001272u, 0x000400a8u, 0x0000002cu, 0x00000e78u, 0x00000e77u, 0x000300f7u, 0x00000e79u, 0x00000000u, 0x000400fau, 0x00000e78u, 0x00000e7au, 0x00000e79u, 0x000200f8u, 0x00000e7au, 0x00050041u, 0x00000016u, 0x00000e7bu, 0x00000b5du, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000e7cu, 0x00000e7bu, 0x000500aau, 0x0000002cu, 0x00000e7du, 0x00000e7cu, 0x0000009cu, 0x000300f7u, 0x00000e7eu, 0x00000000u, 0x000400fau, 0x00000e7du, 0x00000e7fu, 0x00000e7eu, 0x000200f8u, 0x00000e7fu, 0x00050041u, 0x00000016u, 0x00000e80u, 0x00000b5du, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e81u, 0x00000e80u, 0x000500aau, 0x0000002cu, 0x00000e82u, 0x00000e81u, 0x0000009cu, 0x000200f9u, 0x00000e7eu, 0x000200f8u, 0x00000e7eu, 0x000700f5u, 0x0000002cu, 0x00000e83u, 0x00000e7du, 0x00000e7au, 0x00000e82u, 0x00000e7fu, 0x000300f7u, 0x00000e84u, 0x00000000u, 0x000400fau, 0x00000e83u, 0x00000e85u, 0x00000e84u, 0x000200f8u, 0x00000e85u, 0x00050041u, 0x00000016u, 0x000011a4u, 0x0000119au, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e87u, 0x000011a4u, 0x000500aau, 0x0000002cu, 0x00000e88u, 0x00000e87u, 0x00000133u, 0x000200f9u, 0x00000e84u, 0x000200f8u, 0x00000e84u, 0x000700f5u, 0x0000002cu, 0x00000e89u, 0x00000e83u, 0x00000e7eu, 0x00000e88u, 0x00000e85u, 0x000200f9u, 0x00000e79u, 0x000200f8u, 0x00000e79u, 0x000700f5u, 0x0000002cu, 0x00000e8au, 0x00000e77u, 0x00000e62u, 0x00000e89u, 0x00000e84u, 0x000300f7u, 0x00000e8bu, 0x00000000u, 0x000400fau, 0x00000e8au, 0x00000e8cu, 0x00000e8bu, 0x000200f8u, 0x00000e8cu, 0x0004003du, 0x00000014u, 0x00000e8du, 0x00000e3bu, 0x0003003eu, 0x00000e38u, 0x000002b3u, 0x0003003eu, 0x00000e39u, 0x00000e8du, 0x000200f9u, 0x00000e41u, 0x000200f8u, 0x00000e8bu, 0x00050041u, 0x00000016u, 0x00000e8eu, 0x00000b5du, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000e8fu, 0x00000e8eu, 0x000300f7u, 0x00000e90u, 0x00000000u, 0x000b00fbu, 0x00000e8fu, 0x00000e90u, 0x00000000u, 0x00000e91u, 0x00000001u, 0x00000e92u, 0x00000002u, 0x00000e93u, 0x00000003u, 0x00000e94u, 0x000200f8u, 0x00000e94u, 0x0003003eu, 0x00000e3cu, 0x0000009cu, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e93u, 0x0003003eu, 0x00000e3cu, 0x000008c9u, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e92u, 0x00050041u, 0x00000016u, 0x000011a6u, 0x0000119cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e98u, 0x000011a6u, 0x0003003eu, 0x00000e3cu, 0x00000e98u, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e91u, 0x00050041u, 0x00000016u, 0x000011a5u, 0x0000119au, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e96u, 0x000011a5u, 0x0003003eu, 0x00000e3cu, 0x00000e96u, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e90u, 0x000d00f5u, 0x00000008u, 0x00001421u, 0x00001430u, 0x00000e8bu, 0x00000e96u, 0x00000e91u, 0x00000e98u, 0x00000e92u, 0x000008c9u, 0x00000e93u, 0x0000009cu, 0x00000e94u, 0x00050041u, 0x00000016u, 0x00000e9bu, 0x00000b5du, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e9cu, 0x00000e9bu, 0x000300f7u, 0x00000e9du, 0x00000000u, 0x000b00fbu, 0x00000e9cu, 0x00000e9du, 0x00000000u, 0x00000e9eu, 0x00000001u, 0x00000e9fu, 0x00000002u, 0x00000ea0u, 0x00000003u, 0x00000ea1u, 0x000200f8u, 0x00000ea1u, 0x0003003eu, 0x00000e3du, 0x0000009cu, 0x000200f9u, 0x00000e9du, 0x000200f8u, 0x00000ea0u, 0x0003003eu, 0x00000e3du, 0x00000133u, 0x000200f9u, 0x00000e9du, 0x000200f8u, 0x00000e9fu, 0x00050041u, 0x00000016u, 0x000011a7u, 0x0000119bu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000ea6u, 0x000011a7u, 0x0003003eu, 0x00000e3du, 0x00000ea6u, 0x000200f9u, 0x00000e9du, 0x000200f8u, 0x00000e9eu, 0x000400c8u, 0x00000008u, 0x00000ea3u, 0x00001421u, 0x000500c7u, 0x00000008u, 0x00000ea4u, 0x00000ea3u, 0x00000133u, 0x0003003eu, 0x00000e3du, 0x00000ea4u, 0x000200f9u, 0x00000e9du, 0x000200f8u, 0x00000e9du, 0x000d00f5u, 0x00000008u, 0x0000144au, 0x0000145au, 0x00000e90u, 0x00000ea4u, 0x00000e9eu, 0x00000ea6u, 0x00000e9fu, 0x00000133u, 0x00000ea0u, 0x0000009cu, 0x00000ea1u, 0x000500c3u, 0x00000008u, 0x00000ea8u, 0x00001421u, 0x000000bbu, 0x0003003eu, 0x00000e3cu, 0x00000ea8u, 0x000500c3u, 0x00000008u, 0x00000eaau, 0x0000144au, 0x000000bbu, 0x0003003eu, 0x00000e3du, 0x00000eaau, 0x0004003du, 0x00000008u, 0x00000eacu, 0x00000e9bu, 0x000500aau, 0x0000002cu, 0x00000eadu, 0x00000eacu, 0x000000afu, 0x000300f7u, 0x00000eaeu, 0x00000000u, 0x000400fau, 0x00000eadu, 0x00000eafu, 0x00000eaeu, 0x000200f8u, 0x00000eafu, 0x00050041u, 0x00000016u, 0x00000eb1u, 0x00000b62u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000eb2u, 0x00000eb1u, 0x000500c3u, 0x00000008u, 0x00000eb3u, 0x00000ea8u, 0x00000eb2u, 0x000500c7u, 0x00000008u, 0x00000eb4u, 0x00000eb3u, 0x00000222u, 0x0003003eu, 0x00000e3cu, 0x00000eb4u, 0x00050041u, 0x00000016u, 0x00000eb6u, 0x00000b62u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000eb7u, 0x00000eb6u, 0x000500c3u, 0x00000008u, 0x00000eb8u, 0x00000eaau, 0x00000eb7u, 0x000500c5u, 0x00000008u, 0x00000eb9u, 0x00000eb8u, 0x000000bbu, 0x0003003eu, 0x00000e3du, 0x00000eb9u, 0x000200f9u, 0x00000eaeu, 0x000200f8u, 0x00000eaeu, 0x000700f5u, 0x00000008u, 0x0000149eu, 0x00000eaau, 0x00000e9du, 0x00000eb9u, 0x00000eafu, 0x000700f5u, 0x00000008u, 0x00001473u, 0x00000ea8u, 0x00000e9du, 0x00000eb4u, 0x00000eafu, 0x0004003du, 0x00000014u, 0x00000ebau, 0x00000e3bu, 0x00050051u, 0x00000008u, 0x00000ebbu, 0x00000ebau, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ebcu, 0x00000ebau, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ebdu, 0x00000ebau, 0x00000002u, 0x00060050u, 0x00000014u, 0x00000ec0u, 0x00001473u, 0x00001473u, 0x00001473u, 0x00050084u, 0x00000014u, 0x00000ec1u, 0x00000ebau, 0x00000ec0u, 0x00050051u, 0x00000008u, 0x00000ec3u, 0x0000147au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ec4u, 0x0000147au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ec5u, 0x0000147au, 0x00000002u, 0x00050080u, 0x00000008u, 0x00000ec8u, 0x0000149eu, 0x000000afu, 0x00060050u, 0x00000014u, 0x00000ec9u, 0x00000ec8u, 0x00000ec8u, 0x00000ec8u, 0x00050084u, 0x00000014u, 0x00000ecau, 0x0000147au, 0x00000ec9u, 0x00050080u, 0x00000014u, 0x00000ecbu, 0x00000ec1u, 0x00000ecau, 0x0003003eu, 0x00000e3eu, 0x00000ecbu, 0x000500a6u, 0x0000002cu, 0x00000ecfu, 0x00000298u, 0x00000b84u, 0x000300f7u, 0x00000ed0u, 0x00000000u, 0x000400fau, 0x00000ecfu, 0x00000ed1u, 0x00000ed2u, 0x000200f8u, 0x00000ed2u, 0x000500c3u, 0x00000008u, 0x00000edbu, 0x00001473u, 0x000000b5u, 0x000500c3u, 0x00000008u, 0x00000eddu, 0x0000149eu, 0x000000b5u, 0x00050080u, 0x00000008u, 0x00000edeu, 0x00000edbu, 0x00000eddu, 0x00050080u, 0x00000008u, 0x00000edfu, 0x00000edeu, 0x000000afu, 0x0003003eu, 0x00000e3fu, 0x00000edfu, 0x0004003du, 0x00000014u, 0x00000ee0u, 0x00000e3eu, 0x000500c3u, 0x00000014u, 0x00000ee2u, 0x00000ee0u, 0x00001932u, 0x0003003eu, 0x00000e3eu, 0x00000ee2u, 0x0004003du, 0x00000014u, 0x00000ee3u, 0x00000e3eu, 0x000500c7u, 0x00000014u, 0x00000ee5u, 0x00000ee3u, 0x00001933u, 0x0003003eu, 0x00000e3eu, 0x00000ee5u, 0x0004003du, 0x00000257u, 0x00000ee6u, 0x00000259u, 0x000500c4u, 0x00000008u, 0x00000ee8u, 0x00000edfu, 0x000000eau, 0x00050041u, 0x00000016u, 0x00000ee9u, 0x00000e3eu, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000eeau, 0x00000ee9u, 0x000500c5u, 0x00000008u, 0x00000eebu, 0x00000ee8u, 0x00000eeau, 0x0005005fu, 0x000000abu, 0x00000eecu, 0x00000ee6u, 0x00000eebu, 0x00050051u, 0x00000006u, 0x00000eedu, 0x00000eecu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000eeeu, 0x00000eedu, 0x00050041u, 0x00000016u, 0x00000eefu, 0x00000e3bu, 0x000001b8u, 0x0003003eu, 0x00000eefu, 0x00000eeeu, 0x00050041u, 0x00000016u, 0x00000ef3u, 0x00000e3eu, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000ef4u, 0x00000ef3u, 0x000500c5u, 0x00000008u, 0x00000ef5u, 0x00000ee8u, 0x00000ef4u, 0x0005005fu, 0x000000abu, 0x00000ef6u, 0x00000ee6u, 0x00000ef5u, 0x00050051u, 0x00000006u, 0x00000ef7u, 0x00000ef6u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000ef8u, 0x00000ef7u, 0x00050041u, 0x00000016u, 0x00000ef9u, 0x00000e3bu, 0x000001dau, 0x0003003eu, 0x00000ef9u, 0x00000ef8u, 0x00050041u, 0x00000016u, 0x00000efdu, 0x00000e3eu, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000efeu, 0x00000efdu, 0x000500c5u, 0x00000008u, 0x00000effu, 0x00000ee8u, 0x00000efeu, 0x0005005fu, 0x000000abu, 0x00000f00u, 0x00000ee6u, 0x00000effu, 0x00050051u, 0x00000006u, 0x00000f01u, 0x00000f00u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000f02u, 0x00000f01u, 0x00050041u, 0x00000016u, 0x00000f03u, 0x00000e3bu, 0x00000193u, 0x0003003eu, 0x00000f03u, 0x00000f02u, 0x000200f9u, 0x00000ed0u, 0x000200f8u, 0x00000ed1u, 0x0004003du, 0x00000014u, 0x00000ed3u, 0x00000e3eu, 0x000500c3u, 0x00000014u, 0x00000ed5u, 0x00000ed3u, 0x00001931u, 0x00050051u, 0x00000008u, 0x00000ed6u, 0x00000ed5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ed7u, 0x00000ed5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ed8u, 0x00000ed5u, 0x00000002u, 0x0003003eu, 0x00000e3bu, 0x00000ed5u, 0x000200f9u, 0x00000ed0u, 0x000200f8u, 0x00000ed0u, 0x0004003du, 0x00000014u, 0x00000f04u, 0x00000e3bu, 0x000500c7u, 0x00000014u, 0x00000f06u, 0x00000f04u, 0x00000134u, 0x0003003eu, 0x00000e38u, 0x000002b3u, 0x0003003eu, 0x00000e39u, 0x00000f06u, 0x000200f9u, 0x00000e41u, 0x000200f8u, 0x00000e41u, 0x000900f5u, 0x00000008u, 0x0000189fu, 0x0000145au, 0x00000e5eu, 0x0000145au, 0x00000e8cu, 0x0000149eu, 0x00000ed0u, 0x000900f5u, 0x00000008u, 0x00001884u, 0x00001430u, 0x00000e5eu, 0x00001430u, 0x00000e8cu, 0x00001473u, 0x00000ed0u, 0x000900f5u, 0x00000014u, 0x000014b0u, 0x0000147au, 0x00000e5eu, 0x00000e8du, 0x00000e8cu, 0x00000f06u, 0x00000ed0u, 0x0003003eu, 0x00000e40u, 0x000014b0u, 0x0003003eu, 0x00000b5bu, 0x000014b0u, 0x000300f7u, 0x00000be7u, 0x00000000u, 0x000400fau, 0x00000ba0u, 0x00000be8u, 0x00000be7u, 0x000200f8u, 0x00000be8u, 0x0003003eu, 0x00000b64u, 0x000014b0u, 0x0003003eu, 0x00000b65u, 0x00000b72u, 0x00060050u, 0x00000014u, 0x00000f0eu, 0x00000b72u, 0x00000b72u, 0x00000b72u, 0x000500c3u, 0x00000014u, 0x00000f0fu, 0x00000f0eu, 0x00000128u, 0x000500c7u, 0x00000014u, 0x00000f11u, 0x00000f0fu, 0x0000192eu, 0x0003003eu, 0x00000f08u, 0x00000f11u, 0x000500c7u, 0x00000014u, 0x00000f14u, 0x000014b0u, 0x0000192du, 0x00050080u, 0x00000014u, 0x00000f16u, 0x00000f14u, 0x0000192fu, 0x000500adu, 0x00000138u, 0x00000f18u, 0x000014b0u, 0x00000137u, 0x000600a9u, 0x00000014u, 0x00000f19u, 0x00000f18u, 0x00000134u, 0x00000f16u, 0x0003003eu, 0x00000f09u, 0x00000f19u, 0x000500c7u, 0x00000014u, 0x00000f1du, 0x000014b0u, 0x0000192eu, 0x00050082u, 0x00000014u, 0x00000f1eu, 0x00000f11u, 0x00000f1du, 0x000500c3u, 0x00000014u, 0x00000f20u, 0x00000f1eu, 0x00001930u, 0x0003003eu, 0x00000f0au, 0x00000f20u, 0x00050082u, 0x00000014u, 0x00000f23u, 0x00000f19u, 0x000014b0u, 0x0003003eu, 0x00000f0bu, 0x00000f23u, 0x000500c7u, 0x00000014u, 0x00000f27u, 0x00000f23u, 0x00000f20u, 0x00050080u, 0x00000014u, 0x00000f28u, 0x000014b0u, 0x00000f27u, 0x0003003eu, 0x00000f09u, 0x00000f28u, 0x000500c7u, 0x00000014u, 0x00000f2bu, 0x00000f28u, 0x00000134u, 0x00050051u, 0x00000008u, 0x00000f2cu, 0x00000f2bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000f2du, 0x00000f2bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000f2eu, 0x00000f2bu, 0x00000002u, 0x0003003eu, 0x00000f0cu, 0x00000f2bu, 0x0003003eu, 0x00000b5bu, 0x00000f2bu, 0x000200f9u, 0x00000be7u, 0x000200f8u, 0x00000be7u, 0x000700f5u, 0x00000014u, 0x00001578u, 0x000014b0u, 0x00000e41u, 0x00000f2bu, 0x00000be8u, 0x0003003eu, 0x00000b67u, 0x0000126cu, 0x0003003eu, 0x00000b68u, 0x00000ba5u, 0x0003003eu, 0x00000b69u, 0x00001272u, 0x0003003eu, 0x00000b6au, 0x00000c64u, 0x0003003eu, 0x00000f30u, 0x0000009cu, 0x000300f7u, 0x00000f33u, 0x00000000u, 0x000b00fbu, 0x00000c64u, 0x00000f33u, 0x00000000u, 0x00000f34u, 0x00000001u, 0x00000f35u, 0x00000002u, 0x00000f36u, 0x00000003u, 0x00000f37u, 0x000200f8u, 0x00000f37u, 0x0003003eu, 0x00000f30u, 0x00000ba5u, 0x000200f9u, 0x00000f33u, 0x000200f8u, 0x00000f36u, 0x0003003eu, 0x00000f30u, 0x000000d3u, 0x000200f9u, 0x00000f33u, 0x000200f8u, 0x00000f35u, 0x00050080u, 0x00000008u, 0x00000f45u, 0x0000126cu, 0x00000ba5u, 0x000500c7u, 0x00000008u, 0x00000f46u, 0x00000f45u, 0x000000d3u, 0x0003003eu, 0x00000f30u, 0x00000f46u, 0x000200f9u, 0x00000f33u, 0x000200f8u, 0x00000f34u, 0x000300f7u, 0x00000f39u, 0x00000000u, 0x000400fau, 0x00001272u, 0x00000f3au, 0x00000f3bu, 0x000200f8u, 0x00000f3bu, 0x00050082u, 0x00000008u, 0x00000f41u, 0x0000126cu, 0x000000afu, 0x000500c7u, 0x00000008u, 0x00000f42u, 0x00000f41u, 0x000000d3u, 0x0003003eu, 0x00000f30u, 0x00000f42u, 0x000200f9u, 0x00000f39u, 0x000200f8u, 0x00000f3au, 0x00050080u, 0x00000008u, 0x00000f3eu, 0x00000ba5u, 0x0000126cu, 0x0007000cu, 0x00000008u, 0x00000f3fu, 0x00000001u, 0x00000027u, 0x000000d3u, 0x00000f3eu, 0x0003003eu, 0x00000f30u, 0x00000f3fu, 0x000200f9u, 0x00000f39u, 0x000200f8u, 0x00000f39u, 0x000700f5u, 0x00000008u, 0x00001576u, 0x00000f3fu, 0x00000f3au, 0x00000f42u, 0x00000f3bu, 0x000200f9u, 0x00000f33u, 0x000200f8u, 0x00000f33u, 0x000d00f5u, 0x00000008u, 0x00001575u, 0x0000009cu, 0x00000be7u, 0x00001576u, 0x00000f39u, 0x00000f46u, 0x00000f35u, 0x000000d3u, 0x00000f36u, 0x00000ba5u, 0x00000f37u, 0x0003003eu, 0x00000f31u, 0x00001575u, 0x0003003eu, 0x00000b66u, 0x00001575u, 0x000500c4u, 0x00000008u, 0x00000bf4u, 0x00001575u, 0x000000c7u, 0x00050051u, 0x00000008u, 0x00000bf5u, 0x00001578u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000bf6u, 0x00001578u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000bf7u, 0x00001578u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000bf8u, 0x00000bf5u, 0x00000bf6u, 0x00000bf7u, 0x00000bf4u, 0x0003003eu, 0x00000b6bu, 0x00000bf8u, 0x000300f7u, 0x00000f49u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000f4au, 0x00000f4bu, 0x000200f8u, 0x00000f4bu, 0x0003003eu, 0x00000381u, 0x00000bf8u, 0x000200f9u, 0x00000f49u, 0x000200f8u, 0x00000f4au, 0x0008004fu, 0x00000014u, 0x00000f4du, 0x00000bf8u, 0x00000bf8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000f4eu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000f4fu, 0x00000f4eu, 0x00000bf8u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000f4fu, 0x000200f9u, 0x00000f49u, 0x000200f8u, 0x00000f49u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000300f7u, 0x00000bfbu, 0x00000000u, 0x000400fau, 0x00000b8cu, 0x00000bfcu, 0x00000bfdu, 0x000200f8u, 0x00000bfdu, 0x000300f7u, 0x00000c05u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000c06u, 0x00000c05u, 0x000200f8u, 0x00000c06u, 0x000300f7u, 0x00000f95u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000f95u, 0x00000002u, 0x00000f96u, 0x00000003u, 0x00000f97u, 0x000200f8u, 0x00000f97u, 0x0004003du, 0x00000009u, 0x00000fb4u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00000fb5u, 0x00000fb4u, 0x00000fb4u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000fb6u, 0x00000fb5u, 0x0003003eu, 0x00000f92u, 0x00000fb6u, 0x00050041u, 0x00000007u, 0x00000fb7u, 0x00000f92u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000fb8u, 0x00000fb7u, 0x000500c4u, 0x00000006u, 0x00000fb9u, 0x00000fb8u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000fbau, 0x00000f92u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000fbbu, 0x00000fbau, 0x000500c5u, 0x00000006u, 0x00000fbcu, 0x00000fb9u, 0x00000fbbu, 0x0003003eu, 0x00000f93u, 0x00000fbcu, 0x000500c7u, 0x00000006u, 0x00000fbeu, 0x00000fbcu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000fbfu, 0x00000fbeu, 0x000001e0u, 0x0003003eu, 0x00000f94u, 0x00000fbfu, 0x000500c2u, 0x00000006u, 0x00000fc1u, 0x00000fbcu, 0x00000193u, 0x0004007cu, 0x00000008u, 0x00000fc2u, 0x00000fc1u, 0x0003003eu, 0x00000419u, 0x00000fc2u, 0x000500c7u, 0x00000006u, 0x00000fc4u, 0x00000fbcu, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000fc5u, 0x00000fc4u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000fc7u, 0x00000fc5u, 0x00000fbfu, 0x0004007cu, 0x00000008u, 0x00000fc8u, 0x00000fc7u, 0x0003003eu, 0x000003fbu, 0x00000fc8u, 0x000200f9u, 0x00000f95u, 0x000200f8u, 0x00000f96u, 0x00050041u, 0x0000009au, 0x00000f98u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000f99u, 0x00000f98u, 0x000500c3u, 0x00000008u, 0x00000f9au, 0x00000f99u, 0x000000bbu, 0x00050041u, 0x0000009au, 0x00000f9bu, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000f9cu, 0x00000f9bu, 0x000500c7u, 0x00000008u, 0x00000f9du, 0x00000f9cu, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000f9eu, 0x00000f9au, 0x00000f9du, 0x0003003eu, 0x000003fbu, 0x00000f9eu, 0x00050041u, 0x0000009au, 0x00000f9fu, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000fa0u, 0x00000f9fu, 0x0004007cu, 0x00000006u, 0x00000fa1u, 0x00000fa0u, 0x000500c7u, 0x00000006u, 0x00000fa2u, 0x00000fa1u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000fa3u, 0x00000fa2u, 0x00000408u, 0x0003003eu, 0x00000f91u, 0x00000fa3u, 0x00050041u, 0x0000009au, 0x00000fa4u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000fa5u, 0x00000fa4u, 0x0004007cu, 0x00000006u, 0x00000fa6u, 0x00000fa5u, 0x000500c7u, 0x00000006u, 0x00000fa7u, 0x00000fa6u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000fa8u, 0x00000fa7u, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000faau, 0x00000fa3u, 0x00000fa8u, 0x0003003eu, 0x00000f91u, 0x00000faau, 0x0004003du, 0x00000008u, 0x00000facu, 0x00000f9bu, 0x0004007cu, 0x00000006u, 0x00000fadu, 0x00000facu, 0x000500c7u, 0x00000006u, 0x00000faeu, 0x00000fadu, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000fafu, 0x00000faeu, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000fb1u, 0x00000faau, 0x00000fafu, 0x0003003eu, 0x00000f91u, 0x00000fb1u, 0x0004007cu, 0x00000008u, 0x00000fb3u, 0x00000fb1u, 0x0003003eu, 0x00000419u, 0x00000fb3u, 0x000200f9u, 0x00000f95u, 0x000200f8u, 0x00000f95u, 0x000200f9u, 0x00000c05u, 0x000200f8u, 0x00000c05u, 0x000200f9u, 0x00000bfbu, 0x000200f8u, 0x00000bfcu, 0x0003003eu, 0x00000b6cu, 0x00000b6fu, 0x00050082u, 0x00000008u, 0x00000f57u, 0x00000170u, 0x00000b6fu, 0x0007000cu, 0x00000008u, 0x00000f58u, 0x00000001u, 0x0000002au, 0x00000f57u, 0x000000afu, 0x0003003eu, 0x00000f51u, 0x00000f58u, 0x0006000cu, 0x00000008u, 0x00000f5au, 0x00000001u, 0x0000004au, 0x00000f58u, 0x00050082u, 0x00000008u, 0x00000f5bu, 0x00000175u, 0x00000f5au, 0x0003003eu, 0x00000f52u, 0x00000f5bu, 0x0008000cu, 0x00000008u, 0x00000f5du, 0x00000001u, 0x0000002du, 0x00000f5bu, 0x0000009cu, 0x000000d3u, 0x0003003eu, 0x00000f52u, 0x00000f5du, 0x00050082u, 0x00000008u, 0x00000f5fu, 0x000000cdu, 0x00000f5du, 0x0007000cu, 0x00000008u, 0x00000f60u, 0x00000001u, 0x0000002au, 0x00000f5fu, 0x0000009cu, 0x0003003eu, 0x00000f53u, 0x00000f60u, 0x000500c3u, 0x00000008u, 0x00000f63u, 0x00000b6fu, 0x00000f60u, 0x000500c7u, 0x00000008u, 0x00000f64u, 0x00000f63u, 0x0000015du, 0x0003003eu, 0x00000f54u, 0x00000f64u, 0x000500c4u, 0x00000008u, 0x00000f66u, 0x00000f5du, 0x000000eau, 0x00050080u, 0x00000008u, 0x00000f68u, 0x00000f66u, 0x00000f64u, 0x0003003eu, 0x00000f55u, 0x00000f68u, 0x0003003eu, 0x00000419u, 0x00000f68u, 0x0003003eu, 0x000003fbu, 0x00000c47u, 0x0003003eu, 0x00000568u, 0x000002b3u, 0x000300f7u, 0x00000c02u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000c03u, 0x00000c02u, 0x000200f8u, 0x00000c03u, 0x0004003du, 0x00000008u, 0x00000f6au, 0x00000419u, 0x0004007cu, 0x00000006u, 0x00000f6bu, 0x00000f6au, 0x000500c4u, 0x00000006u, 0x00000f6cu, 0x00000f6bu, 0x00000415u, 0x0004003du, 0x00000008u, 0x00000f6du, 0x000003fbu, 0x0004007cu, 0x00000006u, 0x00000f6eu, 0x00000f6du, 0x000500c5u, 0x00000006u, 0x00000f6fu, 0x00000f6cu, 0x00000f6eu, 0x0003003eu, 0x00000f69u, 0x00000f6fu, 0x000300f7u, 0x00000f70u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000f70u, 0x00000002u, 0x00000f71u, 0x00000003u, 0x00000f72u, 0x000200f8u, 0x00000f72u, 0x000500c2u, 0x00000006u, 0x00000f88u, 0x00000f6fu, 0x00000442u, 0x000500c7u, 0x00000006u, 0x00000f89u, 0x00000f88u, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x00000f8au, 0x00000f89u, 0x00050041u, 0x0000009au, 0x00000f8bu, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x00000f8bu, 0x00000f8au, 0x000500c2u, 0x00000006u, 0x00000f8du, 0x00000f6fu, 0x00000193u, 0x000500c7u, 0x00000006u, 0x00000f8eu, 0x00000f8du, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x00000f8fu, 0x00000f8eu, 0x00050041u, 0x0000009au, 0x00000f90u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000f90u, 0x00000f8fu, 0x000200f9u, 0x00000f70u, 0x000200f8u, 0x00000f71u, 0x000500c2u, 0x00000006u, 0x00000f74u, 0x00000f6fu, 0x00000442u, 0x000500c7u, 0x00000006u, 0x00000f75u, 0x00000f74u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000f76u, 0x00000f75u, 0x00050041u, 0x0000009au, 0x00000f77u, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x00000f77u, 0x00000f76u, 0x000500c2u, 0x00000006u, 0x00000f79u, 0x00000f6fu, 0x00000448u, 0x000500c7u, 0x00000006u, 0x00000f7au, 0x00000f79u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000f7bu, 0x00000f7au, 0x00050041u, 0x0000009au, 0x00000f7cu, 0x00000381u, 0x000001dau, 0x0003003eu, 0x00000f7cu, 0x00000f7bu, 0x000500c2u, 0x00000006u, 0x00000f7eu, 0x00000f6fu, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x00000f7fu, 0x00000f7eu, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000f80u, 0x00000f7fu, 0x00050041u, 0x0000009au, 0x00000f81u, 0x00000381u, 0x00000193u, 0x0003003eu, 0x00000f81u, 0x00000f80u, 0x000500c7u, 0x00000006u, 0x00000f83u, 0x00000f6fu, 0x00000453u, 0x000500c4u, 0x00000006u, 0x00000f84u, 0x00000f83u, 0x00000448u, 0x0004007cu, 0x00000008u, 0x00000f85u, 0x00000f84u, 0x00050041u, 0x0000009au, 0x00000f86u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000f86u, 0x00000f85u, 0x000200f9u, 0x00000f70u, 0x000200f8u, 0x00000f70u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000c02u, 0x000200f8u, 0x00000c02u, 0x000200f9u, 0x00000bfbu, 0x000200f8u, 0x00000bfbu, 0x000200f9u, 0x00000bc2u, 0x000200f8u, 0x00000bc2u, 0x000700f5u, 0x00000014u, 0x000018b4u, 0x00001485u, 0x00000bbau, 0x0000147au, 0x00000bfbu, 0x000700f5u, 0x00000008u, 0x00001899u, 0x0000145au, 0x00000bbau, 0x0000189fu, 0x00000bfbu, 0x000700f5u, 0x00000008u, 0x0000187eu, 0x00001430u, 0x00000bbau, 0x00001884u, 0x00000bfbu, 0x000700f5u, 0x00000014u, 0x00001856u, 0x00001353u, 0x00000bbau, 0x0000185eu, 0x00000bfbu, 0x000700f5u, 0x00000008u, 0x0000182eu, 0x00001335u, 0x00000bbau, 0x00001836u, 0x00000bfbu, 0x000700f5u, 0x00000008u, 0x00001806u, 0x00001317u, 0x00000bbau, 0x0000180eu, 0x00000bfbu, 0x000200f9u, 0x0000089eu, 0x000200f8u, 0x0000089du, 0x00060041u, 0x000000e6u, 0x000008a5u, 0x000008a3u, 0x0000009cu, 0x0000087eu, 0x0004003du, 0x00000006u, 0x000008a6u, 0x000008a5u, 0x0003003eu, 0x0000089fu, 0x000008a6u, 0x0003003eu, 0x000008a7u, 0x000008a6u, 0x0003003eu, 0x000008a9u, 0x00000875u, 0x000300f7u, 0x00000abfu, 0x00000000u, 0x000900fbu, 0x00000367u, 0x00000abfu, 0x00000000u, 0x00000ac0u, 0x00000001u, 0x00000ac1u, 0x00000002u, 0x00000ac2u, 0x000200f8u, 0x00000ac2u, 0x000500c2u, 0x00000006u, 0x00000acau, 0x000008a6u, 0x000000d9u, 0x000500c7u, 0x00000006u, 0x00000acbu, 0x00000acau, 0x000003aeu, 0x0003003eu, 0x00000abau, 0x00000acbu, 0x000500c2u, 0x00000006u, 0x00000acdu, 0x000008a6u, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x00000aceu, 0x00000acdu, 0x000003aeu, 0x0003003eu, 0x00000abbu, 0x00000aceu, 0x000500c4u, 0x00000006u, 0x00000ad0u, 0x000008a6u, 0x000000b5u, 0x000500c7u, 0x00000006u, 0x00000ad1u, 0x00000ad0u, 0x000003aeu, 0x0003003eu, 0x00000abcu, 0x00000ad1u, 0x000500c7u, 0x00000006u, 0x00000ad3u, 0x000008a6u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000ad4u, 0x00000ad3u, 0x00000686u, 0x0003003eu, 0x00000abdu, 0x00000ad4u, 0x0004007cu, 0x00000008u, 0x00000ad6u, 0x00000acbu, 0x0004007cu, 0x00000008u, 0x00000ad8u, 0x00000aceu, 0x0004007cu, 0x00000008u, 0x00000adau, 0x00000ad1u, 0x0004007cu, 0x00000008u, 0x00000adcu, 0x00000ad4u, 0x00070050u, 0x00000009u, 0x00000addu, 0x00000ad6u, 0x00000ad8u, 0x00000adau, 0x00000adcu, 0x0003003eu, 0x00000abeu, 0x00000addu, 0x000300f7u, 0x00000aeau, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000aebu, 0x00000aecu, 0x000200f8u, 0x00000aecu, 0x0003003eu, 0x00000381u, 0x00000addu, 0x000200f9u, 0x00000aeau, 0x000200f8u, 0x00000aebu, 0x0008004fu, 0x00000014u, 0x00000aeeu, 0x00000addu, 0x00000addu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000aefu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000af0u, 0x00000aefu, 0x00000addu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000af0u, 0x000200f9u, 0x00000aeau, 0x000200f8u, 0x00000aeau, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000abfu, 0x000200f8u, 0x00000ac1u, 0x000500c7u, 0x00000006u, 0x00000ac4u, 0x000008a6u, 0x000003d5u, 0x0003003eu, 0x000008a7u, 0x00000ac4u, 0x0004007cu, 0x00000008u, 0x00000ac6u, 0x00000ac4u, 0x00070050u, 0x00000009u, 0x00000ac7u, 0x00000ac6u, 0x00000ac6u, 0x00000ac6u, 0x00000ac6u, 0x0003003eu, 0x00000ab9u, 0x00000ac7u, 0x000300f7u, 0x00000ae2u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000ae3u, 0x00000ae4u, 0x000200f8u, 0x00000ae4u, 0x0003003eu, 0x00000381u, 0x00000ac7u, 0x000200f9u, 0x00000ae2u, 0x000200f8u, 0x00000ae3u, 0x0008004fu, 0x00000014u, 0x00000ae6u, 0x00000ac7u, 0x00000ac7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000ae7u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000ae8u, 0x00000ae7u, 0x00000ac7u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000ae8u, 0x000200f9u, 0x00000ae2u, 0x000200f8u, 0x00000ae2u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000abfu, 0x000200f8u, 0x00000ac0u, 0x0003003eu, 0x00000381u, 0x0000066du, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000abfu, 0x000200f8u, 0x00000abfu, 0x000300f7u, 0x00000adfu, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000ae0u, 0x00000adfu, 0x000200f8u, 0x00000ae0u, 0x000300f7u, 0x00000af6u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000af6u, 0x00000002u, 0x00000af7u, 0x00000003u, 0x00000af8u, 0x000200f8u, 0x00000af8u, 0x0004003du, 0x00000009u, 0x00000b15u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00000b16u, 0x00000b15u, 0x00000b15u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000b17u, 0x00000b16u, 0x0003003eu, 0x00000af3u, 0x00000b17u, 0x00050041u, 0x00000007u, 0x00000b18u, 0x00000af3u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000b19u, 0x00000b18u, 0x000500c4u, 0x00000006u, 0x00000b1au, 0x00000b19u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000b1bu, 0x00000af3u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000b1cu, 0x00000b1bu, 0x000500c5u, 0x00000006u, 0x00000b1du, 0x00000b1au, 0x00000b1cu, 0x0003003eu, 0x00000af4u, 0x00000b1du, 0x000500c7u, 0x00000006u, 0x00000b1fu, 0x00000b1du, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000b20u, 0x00000b1fu, 0x000001e0u, 0x0003003eu, 0x00000af5u, 0x00000b20u, 0x000500c2u, 0x00000006u, 0x00000b22u, 0x00000b1du, 0x00000193u, 0x0004007cu, 0x00000008u, 0x00000b23u, 0x00000b22u, 0x0003003eu, 0x00000419u, 0x00000b23u, 0x000500c7u, 0x00000006u, 0x00000b25u, 0x00000b1du, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000b26u, 0x00000b25u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000b28u, 0x00000b26u, 0x00000b20u, 0x0004007cu, 0x00000008u, 0x00000b29u, 0x00000b28u, 0x0003003eu, 0x000003fbu, 0x00000b29u, 0x000200f9u, 0x00000af6u, 0x000200f8u, 0x00000af7u, 0x00050041u, 0x0000009au, 0x00000af9u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000afau, 0x00000af9u, 0x000500c3u, 0x00000008u, 0x00000afbu, 0x00000afau, 0x000000bbu, 0x00050041u, 0x0000009au, 0x00000afcu, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000afdu, 0x00000afcu, 0x000500c7u, 0x00000008u, 0x00000afeu, 0x00000afdu, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000affu, 0x00000afbu, 0x00000afeu, 0x0003003eu, 0x000003fbu, 0x00000affu, 0x00050041u, 0x0000009au, 0x00000b00u, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000b01u, 0x00000b00u, 0x0004007cu, 0x00000006u, 0x00000b02u, 0x00000b01u, 0x000500c7u, 0x00000006u, 0x00000b03u, 0x00000b02u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000b04u, 0x00000b03u, 0x00000408u, 0x0003003eu, 0x00000af2u, 0x00000b04u, 0x00050041u, 0x0000009au, 0x00000b05u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000b06u, 0x00000b05u, 0x0004007cu, 0x00000006u, 0x00000b07u, 0x00000b06u, 0x000500c7u, 0x00000006u, 0x00000b08u, 0x00000b07u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000b09u, 0x00000b08u, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000b0bu, 0x00000b04u, 0x00000b09u, 0x0003003eu, 0x00000af2u, 0x00000b0bu, 0x0004003du, 0x00000008u, 0x00000b0du, 0x00000afcu, 0x0004007cu, 0x00000006u, 0x00000b0eu, 0x00000b0du, 0x000500c7u, 0x00000006u, 0x00000b0fu, 0x00000b0eu, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000b10u, 0x00000b0fu, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000b12u, 0x00000b0bu, 0x00000b10u, 0x0003003eu, 0x00000af2u, 0x00000b12u, 0x0004007cu, 0x00000008u, 0x00000b14u, 0x00000b12u, 0x0003003eu, 0x00000419u, 0x00000b14u, 0x000200f9u, 0x00000af6u, 0x000200f8u, 0x00000af6u, 0x000200f9u, 0x00000adfu, 0x000200f8u, 0x00000adfu, 0x000200f9u, 0x0000089eu, 0x000200f8u, 0x0000089eu, 0x000700f5u, 0x00000014u, 0x000018aeu, 0x00001485u, 0x00000adfu, 0x000018b4u, 0x00000bc2u, 0x000700f5u, 0x00000008u, 0x00001893u, 0x0000145au, 0x00000adfu, 0x00001899u, 0x00000bc2u, 0x000700f5u, 0x00000008u, 0x00001878u, 0x00001430u, 0x00000adfu, 0x0000187eu, 0x00000bc2u, 0x000700f5u, 0x00000014u, 0x00001850u, 0x00001353u, 0x00000adfu, 0x00001856u, 0x00000bc2u, 0x000700f5u, 0x00000008u, 0x00001828u, 0x00001335u, 0x00000adfu, 0x0000182eu, 0x00000bc2u, 0x000700f5u, 0x00000008u, 0x00001800u, 0x00001317u, 0x00000adfu, 0x00001806u, 0x00000bc2u, 0x000700f5u, 0x00000014u, 0x000017c2u, 0x00001221u, 0x00000adfu, 0x0000121fu, 0x00000bc2u, 0x000200f9u, 0x00000893u, 0x000200f8u, 0x00000892u, 0x00070041u, 0x000000e6u, 0x00000896u, 0x000000a6u, 0x0000009cu, 0x00000875u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x00000897u, 0x00000896u, 0x0003003eu, 0x00000895u, 0x00000897u, 0x000300f7u, 0x00000a03u, 0x00000000u, 0x000b00fbu, 0x00000367u, 0x00000a03u, 0x00000004u, 0x00000a04u, 0x00000002u, 0x00000a05u, 0x00000003u, 0x00000a06u, 0x00000001u, 0x00000a07u, 0x000200f8u, 0x00000a07u, 0x0004003du, 0x00000006u, 0x00000a52u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000a53u, 0x00000a52u, 0x000001e0u, 0x000500c6u, 0x00000006u, 0x00000a54u, 0x00000a53u, 0x000001e0u, 0x00050084u, 0x00000006u, 0x00000a55u, 0x00000a54u, 0x000003a7u, 0x000500c2u, 0x00000006u, 0x00000a57u, 0x00000897u, 0x00000a55u, 0x0003003eu, 0x00000895u, 0x00000a57u, 0x000500c7u, 0x00000006u, 0x00000a59u, 0x00000a57u, 0x000003d5u, 0x0003003eu, 0x00000895u, 0x00000a59u, 0x0004007cu, 0x00000008u, 0x00000a5bu, 0x00000a59u, 0x00070050u, 0x00000009u, 0x00000a5cu, 0x00000a5bu, 0x00000a5bu, 0x00000a5bu, 0x00000a5bu, 0x0003003eu, 0x00000a02u, 0x00000a5cu, 0x000300f7u, 0x00000a79u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000a7au, 0x00000a7bu, 0x000200f8u, 0x00000a7bu, 0x0003003eu, 0x00000381u, 0x00000a5cu, 0x000200f9u, 0x00000a79u, 0x000200f8u, 0x00000a7au, 0x0008004fu, 0x00000014u, 0x00000a7du, 0x00000a5cu, 0x00000a5cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a7eu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a7fu, 0x00000a7eu, 0x00000a5cu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a7fu, 0x000200f9u, 0x00000a79u, 0x000200f8u, 0x00000a79u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a03u, 0x000200f8u, 0x00000a06u, 0x0004003du, 0x00000006u, 0x00000a3au, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000a3bu, 0x00000a3au, 0x000001dau, 0x000500c6u, 0x00000006u, 0x00000a3cu, 0x00000a3bu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000a3du, 0x00000a3cu, 0x000003f0u, 0x000500c2u, 0x00000006u, 0x00000a3fu, 0x00000897u, 0x00000a3du, 0x0003003eu, 0x00000895u, 0x00000a3fu, 0x000500c7u, 0x00000006u, 0x00000a41u, 0x00000a3fu, 0x00000502u, 0x0003003eu, 0x00000895u, 0x00000a41u, 0x000500c2u, 0x00000006u, 0x00000a43u, 0x00000a41u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x00000a44u, 0x00000a43u, 0x000003d5u, 0x0003003eu, 0x000009ffu, 0x00000a44u, 0x000500c2u, 0x00000006u, 0x00000a46u, 0x00000a41u, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x00000a47u, 0x00000a46u, 0x000003d5u, 0x0003003eu, 0x00000a00u, 0x00000a47u, 0x0004007cu, 0x00000008u, 0x00000a49u, 0x00000a44u, 0x0004007cu, 0x00000008u, 0x00000a4fu, 0x00000a47u, 0x00070050u, 0x00000009u, 0x00000a50u, 0x00000a49u, 0x00000a49u, 0x00000a49u, 0x00000a4fu, 0x0003003eu, 0x00000a01u, 0x00000a50u, 0x000300f7u, 0x00000a71u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000a72u, 0x00000a73u, 0x000200f8u, 0x00000a73u, 0x0003003eu, 0x00000381u, 0x00000a50u, 0x000200f9u, 0x00000a71u, 0x000200f8u, 0x00000a72u, 0x0008004fu, 0x00000014u, 0x00000a75u, 0x00000a50u, 0x00000a50u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a76u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a77u, 0x00000a76u, 0x00000a50u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a77u, 0x000200f9u, 0x00000a71u, 0x000200f8u, 0x00000a71u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a03u, 0x000200f8u, 0x00000a05u, 0x0004003du, 0x00000006u, 0x00000a1eu, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000a1fu, 0x00000a1eu, 0x000001dau, 0x000500c6u, 0x00000006u, 0x00000a20u, 0x00000a1fu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000a21u, 0x00000a20u, 0x000003f0u, 0x000500c2u, 0x00000006u, 0x00000a23u, 0x00000897u, 0x00000a21u, 0x0003003eu, 0x00000895u, 0x00000a23u, 0x000500c2u, 0x00000006u, 0x00000a25u, 0x00000a23u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x00000a26u, 0x00000a25u, 0x000003aeu, 0x0003003eu, 0x000009fau, 0x00000a26u, 0x000500c2u, 0x00000006u, 0x00000a28u, 0x00000a23u, 0x000001e0u, 0x000500c7u, 0x00000006u, 0x00000a29u, 0x00000a28u, 0x000003aeu, 0x0003003eu, 0x000009fbu, 0x00000a29u, 0x000500c4u, 0x00000006u, 0x00000a2bu, 0x00000a23u, 0x00000193u, 0x000500c7u, 0x00000006u, 0x00000a2cu, 0x00000a2bu, 0x000003aeu, 0x0003003eu, 0x000009fcu, 0x00000a2cu, 0x000500c7u, 0x00000006u, 0x00000a2eu, 0x00000a23u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000a2fu, 0x00000a2eu, 0x00000686u, 0x0003003eu, 0x000009fdu, 0x00000a2fu, 0x0004007cu, 0x00000008u, 0x00000a31u, 0x00000a26u, 0x0004007cu, 0x00000008u, 0x00000a33u, 0x00000a29u, 0x0004007cu, 0x00000008u, 0x00000a35u, 0x00000a2cu, 0x0004007cu, 0x00000008u, 0x00000a37u, 0x00000a2fu, 0x00070050u, 0x00000009u, 0x00000a38u, 0x00000a31u, 0x00000a33u, 0x00000a35u, 0x00000a37u, 0x0003003eu, 0x000009feu, 0x00000a38u, 0x000300f7u, 0x00000a69u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000a6au, 0x00000a6bu, 0x000200f8u, 0x00000a6bu, 0x0003003eu, 0x00000381u, 0x00000a38u, 0x000200f9u, 0x00000a69u, 0x000200f8u, 0x00000a6au, 0x0008004fu, 0x00000014u, 0x00000a6du, 0x00000a38u, 0x00000a38u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a6eu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a6fu, 0x00000a6eu, 0x00000a38u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a6fu, 0x000200f9u, 0x00000a69u, 0x000200f8u, 0x00000a69u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a03u, 0x000200f8u, 0x00000a04u, 0x000500c2u, 0x00000006u, 0x00000a09u, 0x00000897u, 0x000003efu, 0x000500c7u, 0x00000006u, 0x00000a0au, 0x00000a09u, 0x000003d5u, 0x0003003eu, 0x000009f5u, 0x00000a0au, 0x000500c2u, 0x00000006u, 0x00000a0cu, 0x00000897u, 0x000003f0u, 0x000500c7u, 0x00000006u, 0x00000a0du, 0x00000a0cu, 0x000003d5u, 0x0003003eu, 0x000009f6u, 0x00000a0du, 0x000500c2u, 0x00000006u, 0x00000a0fu, 0x00000897u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x00000a10u, 0x00000a0fu, 0x000003d5u, 0x0003003eu, 0x000009f7u, 0x00000a10u, 0x000500c2u, 0x00000006u, 0x00000a12u, 0x00000897u, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x00000a13u, 0x00000a12u, 0x000003d5u, 0x0003003eu, 0x000009f8u, 0x00000a13u, 0x0004007cu, 0x00000008u, 0x00000a15u, 0x00000a0au, 0x0004007cu, 0x00000008u, 0x00000a17u, 0x00000a0du, 0x0004007cu, 0x00000008u, 0x00000a19u, 0x00000a10u, 0x0004007cu, 0x00000008u, 0x00000a1bu, 0x00000a13u, 0x00070050u, 0x00000009u, 0x00000a1cu, 0x00000a15u, 0x00000a17u, 0x00000a19u, 0x00000a1bu, 0x0003003eu, 0x000009f9u, 0x00000a1cu, 0x000300f7u, 0x00000a61u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000a62u, 0x00000a63u, 0x000200f8u, 0x00000a63u, 0x0003003eu, 0x00000381u, 0x00000a1cu, 0x000200f9u, 0x00000a61u, 0x000200f8u, 0x00000a62u, 0x0008004fu, 0x00000014u, 0x00000a65u, 0x00000a1cu, 0x00000a1cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a66u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a67u, 0x00000a66u, 0x00000a1cu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a67u, 0x000200f9u, 0x00000a61u, 0x000200f8u, 0x00000a61u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a03u, 0x000200f8u, 0x00000a03u, 0x000300f7u, 0x00000a5eu, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000a5fu, 0x00000a5eu, 0x000200f8u, 0x00000a5fu, 0x000300f7u, 0x00000a85u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000a85u, 0x00000002u, 0x00000a86u, 0x00000003u, 0x00000a87u, 0x000200f8u, 0x00000a87u, 0x0004003du, 0x00000009u, 0x00000aa4u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00000aa5u, 0x00000aa4u, 0x00000aa4u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000aa6u, 0x00000aa5u, 0x0003003eu, 0x00000a82u, 0x00000aa6u, 0x00050041u, 0x00000007u, 0x00000aa7u, 0x00000a82u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000aa8u, 0x00000aa7u, 0x000500c4u, 0x00000006u, 0x00000aa9u, 0x00000aa8u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000aaau, 0x00000a82u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000aabu, 0x00000aaau, 0x000500c5u, 0x00000006u, 0x00000aacu, 0x00000aa9u, 0x00000aabu, 0x0003003eu, 0x00000a83u, 0x00000aacu, 0x000500c7u, 0x00000006u, 0x00000aaeu, 0x00000aacu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000aafu, 0x00000aaeu, 0x000001e0u, 0x0003003eu, 0x00000a84u, 0x00000aafu, 0x000500c2u, 0x00000006u, 0x00000ab1u, 0x00000aacu, 0x00000193u, 0x0004007cu, 0x00000008u, 0x00000ab2u, 0x00000ab1u, 0x0003003eu, 0x00000419u, 0x00000ab2u, 0x000500c7u, 0x00000006u, 0x00000ab4u, 0x00000aacu, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000ab5u, 0x00000ab4u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000ab7u, 0x00000ab5u, 0x00000aafu, 0x0004007cu, 0x00000008u, 0x00000ab8u, 0x00000ab7u, 0x0003003eu, 0x000003fbu, 0x00000ab8u, 0x000200f9u, 0x00000a85u, 0x000200f8u, 0x00000a86u, 0x00050041u, 0x0000009au, 0x00000a88u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000a89u, 0x00000a88u, 0x000500c3u, 0x00000008u, 0x00000a8au, 0x00000a89u, 0x000000bbu, 0x00050041u, 0x0000009au, 0x00000a8bu, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000a8cu, 0x00000a8bu, 0x000500c7u, 0x00000008u, 0x00000a8du, 0x00000a8cu, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000a8eu, 0x00000a8au, 0x00000a8du, 0x0003003eu, 0x000003fbu, 0x00000a8eu, 0x00050041u, 0x0000009au, 0x00000a8fu, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000a90u, 0x00000a8fu, 0x0004007cu, 0x00000006u, 0x00000a91u, 0x00000a90u, 0x000500c7u, 0x00000006u, 0x00000a92u, 0x00000a91u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000a93u, 0x00000a92u, 0x00000408u, 0x0003003eu, 0x00000a81u, 0x00000a93u, 0x00050041u, 0x0000009au, 0x00000a94u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000a95u, 0x00000a94u, 0x0004007cu, 0x00000006u, 0x00000a96u, 0x00000a95u, 0x000500c7u, 0x00000006u, 0x00000a97u, 0x00000a96u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000a98u, 0x00000a97u, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000a9au, 0x00000a93u, 0x00000a98u, 0x0003003eu, 0x00000a81u, 0x00000a9au, 0x0004003du, 0x00000008u, 0x00000a9cu, 0x00000a8bu, 0x0004007cu, 0x00000006u, 0x00000a9du, 0x00000a9cu, 0x000500c7u, 0x00000006u, 0x00000a9eu, 0x00000a9du, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000a9fu, 0x00000a9eu, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000aa1u, 0x00000a9au, 0x00000a9fu, 0x0003003eu, 0x00000a81u, 0x00000aa1u, 0x0004007cu, 0x00000008u, 0x00000aa3u, 0x00000aa1u, 0x0003003eu, 0x00000419u, 0x00000aa3u, 0x000200f9u, 0x00000a85u, 0x000200f8u, 0x00000a85u, 0x000200f9u, 0x00000a5eu, 0x000200f8u, 0x00000a5eu, 0x000200f9u, 0x00000893u, 0x000200f8u, 0x00000893u, 0x000700f5u, 0x00000014u, 0x000018a6u, 0x00001485u, 0x00000a5eu, 0x000018aeu, 0x0000089eu, 0x000700f5u, 0x00000008u, 0x0000188bu, 0x0000145au, 0x00000a5eu, 0x00001893u, 0x0000089eu, 0x000700f5u, 0x00000008u, 0x00001870u, 0x00001430u, 0x00000a5eu, 0x00001878u, 0x0000089eu, 0x000700f5u, 0x00000014u, 0x00001848u, 0x00001353u, 0x00000a5eu, 0x00001850u, 0x0000089eu, 0x000700f5u, 0x00000008u, 0x00001820u, 0x00001335u, 0x00000a5eu, 0x00001828u, 0x0000089eu, 0x000700f5u, 0x00000008u, 0x000017f8u, 0x00001317u, 0x00000a5eu, 0x00001800u, 0x0000089eu, 0x000700f5u, 0x00000014u, 0x000017bau, 0x00001221u, 0x00000a5eu, 0x000017c2u, 0x0000089eu, 0x000200f9u, 0x0000088du, 0x000200f8u, 0x0000088du, 0x000700f5u, 0x00000014u, 0x000018a5u, 0x00001485u, 0x00000861u, 0x000018a6u, 0x00000893u, 0x000700f5u, 0x00000008u, 0x0000188au, 0x0000145au, 0x00000861u, 0x0000188bu, 0x00000893u, 0x000700f5u, 0x00000008u, 0x0000186fu, 0x00001430u, 0x00000861u, 0x00001870u, 0x00000893u, 0x000700f5u, 0x00000014u, 0x00001847u, 0x00001353u, 0x00000861u, 0x00001848u, 0x00000893u, 0x000700f5u, 0x00000008u, 0x0000181fu, 0x00001335u, 0x00000861u, 0x00001820u, 0x00000893u, 0x000700f5u, 0x00000008u, 0x000017f7u, 0x00001317u, 0x00000861u, 0x000017f8u, 0x00000893u, 0x000700f5u, 0x00000014u, 0x000017b9u, 0x00001221u, 0x00000861u, 0x000017bau, 0x00000893u, 0x00050080u, 0x00000006u, 0x000008d7u, 0x00001213u, 0x000000afu, 0x0003003eu, 0x0000084cu, 0x000008d7u, 0x000200f9u, 0x00000863u, 0x000200f8u, 0x00000863u, 0x000200f9u, 0x00000860u, 0x000200f8u, 0x00000862u, 0x000200f9u, 0x0000083fu, 0x000200f8u, 0x0000083fu, 0x000200f9u, 0x0000083cu, 0x000200f8u, 0x0000083eu, 0x0003003eu, 0x000008d8u, 0x0000082eu, 0x0003003eu, 0x000008dbu, 0x00000831u, 0x0003003eu, 0x000008deu, 0x00000834u, 0x0003003eu, 0x000008e1u, 0x00000837u, 0x0003003eu, 0x000008e4u, 0x0000083au, 0x0004003du, 0x0000006bu, 0x00000fd3u, 0x000008d8u, 0x000500b0u, 0x0000058du, 0x00000fd7u, 0x00000fd3u, 0x00000948u, 0x0004009bu, 0x0000002cu, 0x00000fd8u, 0x00000fd7u, 0x000300f7u, 0x00000fd9u, 0x00000000u, 0x000400fau, 0x00000fd8u, 0x00000fdau, 0x00000fd9u, 0x000200f8u, 0x00000fdau, 0x000500c2u, 0x00000006u, 0x00000fdcu, 0x00000831u, 0x000004a1u, 0x0003003eu, 0x00000fc9u, 0x00000fdcu, 0x0004003du, 0x0000006bu, 0x00000fddu, 0x000008d8u, 0x00050050u, 0x0000006bu, 0x00000fdeu, 0x00000601u, 0x00000601u, 0x000500c7u, 0x0000006bu, 0x00000fdfu, 0x00000fddu, 0x00000fdeu, 0x0003003eu, 0x00000fcau, 0x00000fdfu, 0x0004003du, 0x0000006bu, 0x00000fe0u, 0x000008d8u, 0x00050050u, 0x0000002eu, 0x00000fe1u, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x00000fe2u, 0x00000fe0u, 0x00000fe1u, 0x0003003eu, 0x000008d8u, 0x00000fe2u, 0x00050041u, 0x00000007u, 0x00000fe3u, 0x00000fcau, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000fe4u, 0x00000fe3u, 0x00050084u, 0x00000006u, 0x00000fe5u, 0x00000fe4u, 0x0000060au, 0x00050041u, 0x00000007u, 0x00000fe6u, 0x00000fcau, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000fe7u, 0x00000fe6u, 0x00050080u, 0x00000006u, 0x00000fe8u, 0x00000fe5u, 0x00000fe7u, 0x0003003eu, 0x00000fcbu, 0x00000fe8u, 0x00050041u, 0x00000007u, 0x00000febu, 0x000008d8u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000fecu, 0x00000febu, 0x00050084u, 0x00000006u, 0x00000fedu, 0x00000fdcu, 0x00000fecu, 0x00050080u, 0x00000006u, 0x00000feeu, 0x00000837u, 0x00000fedu, 0x00050041u, 0x00000007u, 0x00000fefu, 0x000008d8u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000ff0u, 0x00000fefu, 0x00050080u, 0x00000006u, 0x00000ff1u, 0x00000feeu, 0x00000ff0u, 0x0003003eu, 0x00000fccu, 0x00000ff1u, 0x0003003eu, 0x00000fcdu, 0x00000ff1u, 0x0003003eu, 0x00000fceu, 0x00000fe8u, 0x0004003du, 0x0000002cu, 0x0000100du, 0x00000466u, 0x000300f7u, 0x0000100eu, 0x00000000u, 0x000400fau, 0x0000100du, 0x0000100fu, 0x0000100eu, 0x000200f8u, 0x0000100fu, 0x000300f7u, 0x00001010u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00001010u, 0x00000000u, 0x00001011u, 0x00000001u, 0x00001012u, 0x00000002u, 0x00001013u, 0x00000003u, 0x00001014u, 0x00000004u, 0x00001015u, 0x000200f8u, 0x00001015u, 0x000500c7u, 0x00000006u, 0x000010a5u, 0x00000ff1u, 0x000003ddu, 0x0003003eu, 0x00000fcdu, 0x000010a5u, 0x00050084u, 0x00000006u, 0x000010a7u, 0x00000fe8u, 0x00000530u, 0x00050080u, 0x00000006u, 0x000010a9u, 0x000010a5u, 0x000010a7u, 0x0003003eu, 0x00000fcdu, 0x000010a9u, 0x0004003du, 0x00000009u, 0x000010aau, 0x00000381u, 0x0004007cu, 0x000000abu, 0x000010abu, 0x000010aau, 0x0003003eu, 0x0000100bu, 0x000010abu, 0x00050041u, 0x00000007u, 0x000010acu, 0x0000100bu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000010adu, 0x000010acu, 0x000500c4u, 0x00000006u, 0x000010aeu, 0x000010adu, 0x000003efu, 0x00050041u, 0x00000007u, 0x000010afu, 0x0000100bu, 0x000001dau, 0x0004003du, 0x00000006u, 0x000010b0u, 0x000010afu, 0x000500c4u, 0x00000006u, 0x000010b1u, 0x000010b0u, 0x000003f0u, 0x000500c5u, 0x00000006u, 0x000010b2u, 0x000010aeu, 0x000010b1u, 0x00050041u, 0x00000007u, 0x000010b3u, 0x0000100bu, 0x00000193u, 0x0004003du, 0x00000006u, 0x000010b4u, 0x000010b3u, 0x000500c4u, 0x00000006u, 0x000010b5u, 0x000010b4u, 0x000003a7u, 0x000500c5u, 0x00000006u, 0x000010b6u, 0x000010b2u, 0x000010b5u, 0x00050041u, 0x00000007u, 0x000010b7u, 0x0000100bu, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000010b8u, 0x000010b7u, 0x000500c4u, 0x00000006u, 0x000010b9u, 0x000010b8u, 0x000001b8u, 0x000500c5u, 0x00000006u, 0x000010bau, 0x000010b6u, 0x000010b9u, 0x0003003eu, 0x0000100cu, 0x000010bau, 0x00060041u, 0x000000e6u, 0x000010bdu, 0x000003e9u, 0x0000009cu, 0x000010a9u, 0x0003003eu, 0x000010bdu, 0x000010bau, 0x00050084u, 0x00000006u, 0x000010bfu, 0x00000193u, 0x000010a9u, 0x00050041u, 0x0000009au, 0x000010c0u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000010c1u, 0x000010c0u, 0x000500c7u, 0x00000008u, 0x000010c2u, 0x000010c1u, 0x000000afu, 0x00050084u, 0x00000008u, 0x000010c3u, 0x000010c2u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000010c4u, 0x000010c3u, 0x00060041u, 0x000000f2u, 0x000010c5u, 0x00000388u, 0x0000009cu, 0x000010bfu, 0x0003003eu, 0x000010c5u, 0x000010c4u, 0x00050080u, 0x00000006u, 0x000010c8u, 0x000010bfu, 0x000001dau, 0x00050041u, 0x0000009au, 0x000010c9u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000010cau, 0x000010c9u, 0x000500c7u, 0x00000008u, 0x000010cbu, 0x000010cau, 0x000000afu, 0x00050084u, 0x00000008u, 0x000010ccu, 0x000010cbu, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000010cdu, 0x000010ccu, 0x00060041u, 0x000000f2u, 0x000010ceu, 0x00000388u, 0x0000009cu, 0x000010c8u, 0x0003003eu, 0x000010ceu, 0x000010cdu, 0x000300f7u, 0x000010cfu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000010d0u, 0x000010cfu, 0x000200f8u, 0x000010d0u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x000010d2u, 0x000010a9u, 0x0000055eu, 0x00060041u, 0x000000e6u, 0x000010d3u, 0x000003e9u, 0x0000009cu, 0x000010d2u, 0x0003003eu, 0x000010d3u, 0x00000560u, 0x000200f9u, 0x000010cfu, 0x000200f8u, 0x000010cfu, 0x000200f9u, 0x00001010u, 0x000200f8u, 0x00001014u, 0x000500c7u, 0x00000006u, 0x00001083u, 0x00000ff1u, 0x00000391u, 0x0003003eu, 0x00000fcdu, 0x00001083u, 0x00050084u, 0x00000006u, 0x00001085u, 0x00000fe8u, 0x00000509u, 0x00050080u, 0x00000006u, 0x00001087u, 0x00001083u, 0x00001085u, 0x0003003eu, 0x00000fcdu, 0x00001087u, 0x0004003du, 0x00000009u, 0x00001088u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00001089u, 0x00001088u, 0x00001088u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x0000108au, 0x00001089u, 0x0003003eu, 0x00001009u, 0x0000108au, 0x00050041u, 0x00000007u, 0x0000108bu, 0x00001009u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000108cu, 0x0000108bu, 0x000500c4u, 0x00000006u, 0x0000108du, 0x0000108cu, 0x000003a7u, 0x00050041u, 0x00000007u, 0x0000108eu, 0x00001009u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000108fu, 0x0000108eu, 0x000500c5u, 0x00000006u, 0x00001090u, 0x0000108du, 0x0000108fu, 0x0003003eu, 0x0000100au, 0x00001090u, 0x000500c6u, 0x00000006u, 0x00001092u, 0x00001087u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x00001094u, 0x00001090u, 0x00060041u, 0x000000ebu, 0x00001095u, 0x0000039du, 0x0000009cu, 0x00001092u, 0x0003003eu, 0x00001095u, 0x00001094u, 0x0004003du, 0x00000006u, 0x00001098u, 0x0000108eu, 0x000500c7u, 0x00000006u, 0x00001099u, 0x00001098u, 0x000001dau, 0x00050084u, 0x00000006u, 0x0000109au, 0x00001099u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x0000109bu, 0x0000109au, 0x00060041u, 0x000000f2u, 0x0000109cu, 0x00000388u, 0x0000009cu, 0x00001087u, 0x0003003eu, 0x0000109cu, 0x0000109bu, 0x000300f7u, 0x0000109du, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000109eu, 0x0000109du, 0x000200f8u, 0x0000109eu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x000010a1u, 0x00001092u, 0x00000528u, 0x00040071u, 0x0000009fu, 0x000010a2u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x000010a3u, 0x0000039du, 0x0000009cu, 0x000010a1u, 0x0003003eu, 0x000010a3u, 0x000010a2u, 0x000200f9u, 0x0000109du, 0x000200f8u, 0x0000109du, 0x000200f9u, 0x00001010u, 0x000200f8u, 0x00001013u, 0x000500c7u, 0x00000006u, 0x00001053u, 0x00000ff1u, 0x00000391u, 0x0003003eu, 0x00000fcdu, 0x00001053u, 0x00050084u, 0x00000006u, 0x00001055u, 0x00000fe8u, 0x000004d1u, 0x00050080u, 0x00000006u, 0x00001057u, 0x00001053u, 0x00001055u, 0x0003003eu, 0x00000fcdu, 0x00001057u, 0x0004003du, 0x00000009u, 0x00001058u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x00001059u, 0x00001058u, 0x0003003eu, 0x00001006u, 0x00001059u, 0x0004003du, 0x000000abu, 0x0000105au, 0x00001006u, 0x0008004fu, 0x000003a3u, 0x0000105bu, 0x0000105au, 0x0000105au, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003a3u, 0x0000105du, 0x0000105bu, 0x0000192bu, 0x0004003du, 0x000000abu, 0x0000105eu, 0x00001006u, 0x0009004fu, 0x000000abu, 0x0000105fu, 0x0000105eu, 0x0000105du, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001006u, 0x0000105fu, 0x00050041u, 0x00000007u, 0x00001060u, 0x00001006u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x00001061u, 0x00001060u, 0x000500c2u, 0x00000006u, 0x00001062u, 0x00001061u, 0x00000448u, 0x0003003eu, 0x00001007u, 0x00001062u, 0x00050041u, 0x00000007u, 0x00001063u, 0x00001006u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00001064u, 0x00001063u, 0x000500c4u, 0x00000006u, 0x00001065u, 0x00001064u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00001066u, 0x00001006u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00001067u, 0x00001066u, 0x000500c4u, 0x00000006u, 0x00001068u, 0x00001067u, 0x000001e0u, 0x000500c5u, 0x00000006u, 0x00001069u, 0x00001065u, 0x00001068u, 0x00050041u, 0x00000007u, 0x0000106au, 0x00001006u, 0x00000193u, 0x0004003du, 0x00000006u, 0x0000106bu, 0x0000106au, 0x000500c2u, 0x00000006u, 0x0000106cu, 0x0000106bu, 0x00000193u, 0x000500c5u, 0x00000006u, 0x0000106du, 0x00001069u, 0x0000106cu, 0x000500c2u, 0x00000006u, 0x0000106fu, 0x00001062u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00001070u, 0x0000106du, 0x0000106fu, 0x0003003eu, 0x00001008u, 0x00001070u, 0x000500c6u, 0x00000006u, 0x00001072u, 0x00001057u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x00001074u, 0x00001070u, 0x00060041u, 0x000000ebu, 0x00001075u, 0x0000039du, 0x0000009cu, 0x00001072u, 0x0003003eu, 0x00001075u, 0x00001074u, 0x000500c7u, 0x00000006u, 0x00001078u, 0x00001062u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x00001079u, 0x00001078u, 0x00060041u, 0x000000f2u, 0x0000107au, 0x00000388u, 0x0000009cu, 0x00001057u, 0x0003003eu, 0x0000107au, 0x00001079u, 0x000300f7u, 0x0000107bu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000107cu, 0x0000107bu, 0x000200f8u, 0x0000107cu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x0000107fu, 0x00001072u, 0x00000500u, 0x00040071u, 0x0000009fu, 0x00001080u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x00001081u, 0x0000039du, 0x0000009cu, 0x0000107fu, 0x0003003eu, 0x00001081u, 0x00001080u, 0x000200f9u, 0x0000107bu, 0x000200f8u, 0x0000107bu, 0x000200f9u, 0x00001010u, 0x000200f8u, 0x00001012u, 0x000500c7u, 0x00000006u, 0x00001033u, 0x00000ff1u, 0x0000036eu, 0x0003003eu, 0x00000fcdu, 0x00001033u, 0x00050084u, 0x00000006u, 0x00001035u, 0x00000fe8u, 0x0000036du, 0x00050080u, 0x00000006u, 0x00001037u, 0x00001033u, 0x00001035u, 0x0003003eu, 0x00000fcdu, 0x00001037u, 0x000500c6u, 0x00000006u, 0x00001039u, 0x00001037u, 0x000001e0u, 0x00050041u, 0x0000009au, 0x0000103au, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x0000103bu, 0x0000103au, 0x00040071u, 0x0000009du, 0x0000103cu, 0x0000103bu, 0x00060041u, 0x000000f2u, 0x0000103du, 0x00000379u, 0x0000009cu, 0x00001039u, 0x0003003eu, 0x0000103du, 0x0000103cu, 0x000500c7u, 0x00000006u, 0x0000103fu, 0x00001037u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00001040u, 0x0000103fu, 0x000001b8u, 0x000300f7u, 0x00001041u, 0x00000000u, 0x000400fau, 0x00001040u, 0x00001042u, 0x00001041u, 0x000200f8u, 0x00001042u, 0x000500c2u, 0x00000006u, 0x00001044u, 0x00001037u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00001046u, 0x0000103au, 0x000500c7u, 0x00000008u, 0x00001047u, 0x00001046u, 0x000000afu, 0x00050084u, 0x00000008u, 0x00001048u, 0x00001047u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x00001049u, 0x00001048u, 0x00060041u, 0x000000f2u, 0x0000104au, 0x00000388u, 0x0000009cu, 0x00001044u, 0x0003003eu, 0x0000104au, 0x00001049u, 0x000200f9u, 0x00001041u, 0x000200f8u, 0x00001041u, 0x000300f7u, 0x0000104bu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000104cu, 0x0000104bu, 0x000200f8u, 0x0000104cu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x0000104fu, 0x00001039u, 0x0000036du, 0x00040071u, 0x0000009du, 0x00001050u, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x00001051u, 0x00000379u, 0x0000009cu, 0x0000104fu, 0x0003003eu, 0x00001051u, 0x00001050u, 0x000200f9u, 0x0000104bu, 0x000200f8u, 0x0000104bu, 0x000200f9u, 0x00001010u, 0x000200f8u, 0x00001011u, 0x000500c7u, 0x00000006u, 0x00001017u, 0x00000ff1u, 0x0000036eu, 0x0003003eu, 0x00000fcdu, 0x00001017u, 0x00050084u, 0x00000006u, 0x00001019u, 0x00000fe8u, 0x0000036du, 0x00050080u, 0x00000006u, 0x0000101bu, 0x00001017u, 0x00001019u, 0x0003003eu, 0x00000fcdu, 0x0000101bu, 0x000500c6u, 0x00000006u, 0x0000101du, 0x0000101bu, 0x000001e0u, 0x00040071u, 0x0000009du, 0x0000101eu, 0x000001b8u, 0x00060041u, 0x000000f2u, 0x0000101fu, 0x00000379u, 0x0000009cu, 0x0000101du, 0x0003003eu, 0x0000101fu, 0x0000101eu, 0x000500c7u, 0x00000006u, 0x00001021u, 0x0000101bu, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00001022u, 0x00001021u, 0x000001b8u, 0x000300f7u, 0x00001023u, 0x00000000u, 0x000400fau, 0x00001022u, 0x00001024u, 0x00001023u, 0x000200f8u, 0x00001024u, 0x000500c2u, 0x00000006u, 0x00001026u, 0x0000101bu, 0x000001dau, 0x00050041u, 0x0000009au, 0x00001027u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00001028u, 0x00001027u, 0x00040071u, 0x0000009du, 0x00001029u, 0x00001028u, 0x00060041u, 0x000000f2u, 0x0000102au, 0x00000388u, 0x0000009cu, 0x00001026u, 0x0003003eu, 0x0000102au, 0x00001029u, 0x000200f9u, 0x00001023u, 0x000200f8u, 0x00001023u, 0x000300f7u, 0x0000102bu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000102cu, 0x0000102bu, 0x000200f8u, 0x0000102cu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x0000102fu, 0x0000101du, 0x0000036du, 0x00040071u, 0x0000009du, 0x00001030u, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x00001031u, 0x00000379u, 0x0000009cu, 0x0000102fu, 0x0003003eu, 0x00001031u, 0x00001030u, 0x000200f9u, 0x0000102bu, 0x000200f8u, 0x0000102bu, 0x000200f9u, 0x00001010u, 0x000200f8u, 0x00001010u, 0x000200f9u, 0x0000100eu, 0x000200f8u, 0x0000100eu, 0x0004003du, 0x00000006u, 0x00000ff8u, 0x00000febu, 0x00050084u, 0x00000006u, 0x00000ff9u, 0x00000fdcu, 0x00000ff8u, 0x00050080u, 0x00000006u, 0x00000ffau, 0x0000083au, 0x00000ff9u, 0x0004003du, 0x00000006u, 0x00000ffcu, 0x00000fefu, 0x00050080u, 0x00000006u, 0x00000ffdu, 0x00000ffau, 0x00000ffcu, 0x0003003eu, 0x00000fccu, 0x00000ffdu, 0x0003003eu, 0x00000fcfu, 0x00000ffdu, 0x0003003eu, 0x00000fd0u, 0x00000fe8u, 0x000300f7u, 0x000010d4u, 0x00000000u, 0x000400fau, 0x00000565u, 0x000010d5u, 0x000010d4u, 0x000200f8u, 0x000010d5u, 0x0004003du, 0x0000002cu, 0x000010d6u, 0x00000568u, 0x000300f7u, 0x000010d7u, 0x00000000u, 0x000400fau, 0x000010d6u, 0x000010d8u, 0x000010d7u, 0x000200f8u, 0x000010d8u, 0x000500c7u, 0x00000006u, 0x000010dau, 0x00000ffdu, 0x00000391u, 0x0003003eu, 0x00000fcfu, 0x000010dau, 0x00050084u, 0x00000006u, 0x000010dcu, 0x00000fe8u, 0x0000056fu, 0x00050080u, 0x00000006u, 0x000010deu, 0x000010dau, 0x000010dcu, 0x0003003eu, 0x00000fcfu, 0x000010deu, 0x000500c6u, 0x00000006u, 0x000010e0u, 0x000010deu, 0x000001dau, 0x0004003du, 0x00000008u, 0x000010e1u, 0x00000419u, 0x000500c4u, 0x00000008u, 0x000010e2u, 0x000010e1u, 0x000000b5u, 0x0004003du, 0x00000008u, 0x000010e3u, 0x000003fbu, 0x000500c3u, 0x00000008u, 0x000010e4u, 0x000010e3u, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x000010e5u, 0x000010e2u, 0x000010e4u, 0x00040071u, 0x0000009fu, 0x000010e6u, 0x000010e5u, 0x00060041u, 0x000000ebu, 0x000010e7u, 0x0000039du, 0x0000009cu, 0x000010e0u, 0x0003003eu, 0x000010e7u, 0x000010e6u, 0x0004003du, 0x00000008u, 0x000010e9u, 0x000003fbu, 0x000500c7u, 0x00000008u, 0x000010eau, 0x000010e9u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000010ebu, 0x000010eau, 0x00060041u, 0x000000f2u, 0x000010ecu, 0x00000388u, 0x0000009cu, 0x000010deu, 0x0003003eu, 0x000010ecu, 0x000010ebu, 0x000300f7u, 0x000010edu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000010eeu, 0x000010edu, 0x000200f8u, 0x000010eeu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x000010f1u, 0x000010e0u, 0x00000585u, 0x00040071u, 0x0000009fu, 0x000010f2u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x000010f3u, 0x0000039du, 0x0000009cu, 0x000010f1u, 0x0003003eu, 0x000010f3u, 0x000010f2u, 0x000200f9u, 0x000010edu, 0x000200f8u, 0x000010edu, 0x000200f9u, 0x000010d7u, 0x000200f8u, 0x000010d7u, 0x000200f9u, 0x000010d4u, 0x000200f8u, 0x000010d4u, 0x000300f7u, 0x00001001u, 0x00000000u, 0x000400fau, 0x0000062du, 0x00001002u, 0x00001001u, 0x000200f8u, 0x00001002u, 0x0004003du, 0x0000006bu, 0x00001003u, 0x000008d8u, 0x0003003eu, 0x00000fd1u, 0x00001003u, 0x0003003eu, 0x00000fd2u, 0x00000fdcu, 0x00050041u, 0x00000007u, 0x000010f7u, 0x00000fd1u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000010f8u, 0x000010f7u, 0x000500c2u, 0x00000006u, 0x000010f9u, 0x000010f8u, 0x00000193u, 0x00050080u, 0x00000006u, 0x000010fbu, 0x00000fdcu, 0x000001e0u, 0x000500c2u, 0x00000006u, 0x000010fcu, 0x000010fbu, 0x00000193u, 0x00050084u, 0x00000006u, 0x000010fdu, 0x000010f9u, 0x000010fcu, 0x00050041u, 0x00000007u, 0x000010feu, 0x00000fd1u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000010ffu, 0x000010feu, 0x000500c2u, 0x00000006u, 0x00001100u, 0x000010ffu, 0x00000193u, 0x00050080u, 0x00000006u, 0x00001101u, 0x000010fdu, 0x00001100u, 0x0003003eu, 0x000010f4u, 0x00001101u, 0x0004003du, 0x0000006bu, 0x00001102u, 0x00000fd1u, 0x000500c7u, 0x0000006bu, 0x00001104u, 0x00001102u, 0x0000192cu, 0x0003003eu, 0x000010f5u, 0x00001104u, 0x0004003du, 0x0000002cu, 0x00001105u, 0x00000466u, 0x000600a9u, 0x00000006u, 0x00001106u, 0x00001105u, 0x000001dau, 0x000001b8u, 0x0004003du, 0x0000002cu, 0x00001107u, 0x00000568u, 0x000600a9u, 0x00000006u, 0x00001108u, 0x00001107u, 0x000001dau, 0x000001b8u, 0x00050084u, 0x00000006u, 0x00001109u, 0x00000193u, 0x00001108u, 0x00050080u, 0x00000006u, 0x0000110au, 0x00001106u, 0x00001109u, 0x0003003eu, 0x000010f6u, 0x0000110au, 0x00050041u, 0x00000007u, 0x0000110bu, 0x000010f5u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000110cu, 0x0000110bu, 0x00050041u, 0x00000007u, 0x0000110du, 0x000010f5u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000110eu, 0x0000110du, 0x00050084u, 0x00000006u, 0x0000110fu, 0x0000110eu, 0x00000415u, 0x00050080u, 0x00000006u, 0x00001110u, 0x0000110cu, 0x0000110fu, 0x00050084u, 0x00000006u, 0x00001111u, 0x00000193u, 0x00001110u, 0x000500c4u, 0x00000006u, 0x00001113u, 0x0000110au, 0x00001111u, 0x0003003eu, 0x000010f6u, 0x00001113u, 0x000500abu, 0x0000002cu, 0x00001115u, 0x00001113u, 0x000001b8u, 0x000300f7u, 0x00001116u, 0x00000000u, 0x000400fau, 0x00001115u, 0x00001117u, 0x00001116u, 0x000200f8u, 0x00001117u, 0x00050080u, 0x00000006u, 0x00001119u, 0x000005edu, 0x00001101u, 0x00060041u, 0x000000e6u, 0x0000111au, 0x000003e9u, 0x0000009cu, 0x00001119u, 0x000700f1u, 0x00000006u, 0x0000111cu, 0x0000111au, 0x000001dau, 0x000001b8u, 0x00001113u, 0x000200f9u, 0x00001116u, 0x000200f8u, 0x00001116u, 0x000200f9u, 0x00001001u, 0x000200f8u, 0x00001001u, 0x000200f9u, 0x00000fd9u, 0x000200f8u, 0x00000fd9u, 0x0003003eu, 0x00000938u, 0x000002b3u, 0x000200f9u, 0x00000936u, 0x000200f8u, 0x00000936u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000a9u, 0x000000a6u, 0x0000009cu, 0x000000a7u, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x000000aau, 0x000000a9u, 0x00040071u, 0x000000abu, 0x000000acu, 0x000000aau, 0x0004007cu, 0x00000009u, 0x000000adu, 0x000000acu, 0x0004003du, 0x00000006u, 0x000000aeu, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000b0u, 0x000000a6u, 0x0000009cu, 0x000000aeu, 0x000000afu, 0x0004003du, 0x0000009eu, 0x000000b1u, 0x000000b0u, 0x00040071u, 0x000000abu, 0x000000b2u, 0x000000b1u, 0x0004007cu, 0x00000009u, 0x000000b3u, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000b6u, 0x000000a6u, 0x0000009cu, 0x000000b4u, 0x000000b5u, 0x0004003du, 0x0000009eu, 0x000000b7u, 0x000000b6u, 0x00040071u, 0x000000abu, 0x000000b8u, 0x000000b7u, 0x0004007cu, 0x00000009u, 0x000000b9u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000bau, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000bcu, 0x000000a6u, 0x0000009cu, 0x000000bau, 0x000000bbu, 0x0004003du, 0x0000009eu, 0x000000bdu, 0x000000bcu, 0x00040071u, 0x000000abu, 0x000000beu, 0x000000bdu, 0x0004007cu, 0x00000009u, 0x000000bfu, 0x000000beu, 0x0004003du, 0x00000006u, 0x000000c0u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000c2u, 0x000000a6u, 0x0000009cu, 0x000000c0u, 0x000000c1u, 0x0004003du, 0x0000009eu, 0x000000c3u, 0x000000c2u, 0x00040071u, 0x000000abu, 0x000000c4u, 0x000000c3u, 0x0004007cu, 0x00000009u, 0x000000c5u, 0x000000c4u, 0x0004003du, 0x00000006u, 0x000000c6u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000c8u, 0x000000a6u, 0x0000009cu, 0x000000c6u, 0x000000c7u, 0x0004003du, 0x0000009eu, 0x000000c9u, 0x000000c8u, 0x00040071u, 0x000000abu, 0x000000cau, 0x000000c9u, 0x0004007cu, 0x00000009u, 0x000000cbu, 0x000000cau, 0x0004003du, 0x00000006u, 0x000000ccu, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000ceu, 0x000000a6u, 0x0000009cu, 0x000000ccu, 0x000000cdu, 0x0004003du, 0x0000009eu, 0x000000cfu, 0x000000ceu, 0x00040071u, 0x000000abu, 0x000000d0u, 0x000000cfu, 0x0004007cu, 0x00000009u, 0x000000d1u, 0x000000d0u, 0x0004003du, 0x00000006u, 0x000000d2u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000d4u, 0x000000a6u, 0x0000009cu, 0x000000d2u, 0x000000d3u, 0x0004003du, 0x0000009eu, 0x000000d5u, 0x000000d4u, 0x00040071u, 0x000000abu, 0x000000d6u, 0x000000d5u, 0x0004007cu, 0x00000009u, 0x000000d7u, 0x000000d6u, 0x0004003du, 0x00000006u, 0x000000d8u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000dau, 0x000000a6u, 0x0000009cu, 0x000000d8u, 0x000000d9u, 0x0004003du, 0x0000009eu, 0x000000dbu, 0x000000dau, 0x00040071u, 0x000000abu, 0x000000dcu, 0x000000dbu, 0x0004007cu, 0x00000009u, 0x000000ddu, 0x000000dcu, 0x0004003du, 0x00000006u, 0x000000deu, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000e0u, 0x000000a6u, 0x0000009cu, 0x000000deu, 0x000000dfu, 0x0004003du, 0x0000009eu, 0x000000e1u, 0x000000e0u, 0x00040071u, 0x000000abu, 0x000000e2u, 0x000000e1u, 0x0004007cu, 0x00000009u, 0x000000e3u, 0x000000e2u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x0000000cu, 0x00070041u, 0x000000e6u, 0x000000e7u, 0x000000a6u, 0x0000009cu, 0x000000e4u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e8u, 0x000000e7u, 0x0004003du, 0x00000006u, 0x000000e9u, 0x0000000cu, 0x00070041u, 0x000000ebu, 0x000000ecu, 0x000000a6u, 0x0000009cu, 0x000000e9u, 0x000000eau, 0x0004003du, 0x0000009fu, 0x000000edu, 0x000000ecu, 0x00040071u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x0004007cu, 0x00000008u, 0x000000efu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, 0x0000000cu, 0x00070041u, 0x000000f2u, 0x000000f3u, 0x000000a6u, 0x0000009cu, 0x000000f0u, 0x000000f1u, 0x0004003du, 0x0000009du, 0x000000f4u, 0x000000f3u, 0x00040071u, 0x00000006u, 0x000000f5u, 0x000000f4u, 0x0004007cu, 0x00000008u, 0x000000f6u, 0x000000f5u, 0x0004003du, 0x00000006u, 0x000000f7u, 0x0000000cu, 0x00070041u, 0x000000f2u, 0x000000f9u, 0x000000a6u, 0x0000009cu, 0x000000f7u, 0x000000f8u, 0x0004003du, 0x0000009du, 0x000000fau, 0x000000f9u, 0x00040071u, 0x00000006u, 0x000000fbu, 0x000000fau, 0x0004007cu, 0x00000008u, 0x000000fcu, 0x000000fbu, 0x0004003du, 0x00000006u, 0x000000fdu, 0x0000000cu, 0x00070041u, 0x000000ffu, 0x00000100u, 0x000000a6u, 0x0000009cu, 0x000000fdu, 0x000000feu, 0x0004003du, 0x000000a1u, 0x00000101u, 0x00000100u, 0x00040072u, 0x00000009u, 0x00000102u, 0x00000101u, 0x00120050u, 0x0000000au, 0x00000103u, 0x000000adu, 0x000000b3u, 0x000000b9u, 0x000000bfu, 0x000000c5u, 0x000000cbu, 0x000000d1u, 0x000000d7u, 0x000000ddu, 0x000000e3u, 0x000000e8u, 0x000000efu, 0x000000f6u, 0x000000fcu, 0x00000102u, 0x000200feu, 0x00000103u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000012u, 0x00000000u, 0x00000010u, 0x00030037u, 0x00000007u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003du, 0x00000006u, 0x0000010bu, 0x00000011u, 0x00070041u, 0x000000a8u, 0x0000010cu, 0x0000010au, 0x0000009cu, 0x0000010bu, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x0000010du, 0x0000010cu, 0x00040071u, 0x000000abu, 0x0000010eu, 0x0000010du, 0x0004007cu, 0x00000009u, 0x0000010fu, 0x0000010eu, 0x0004003du, 0x00000006u, 0x00000110u, 0x00000011u, 0x00070041u, 0x000000a8u, 0x00000111u, 0x0000010au, 0x0000009cu, 0x00000110u, 0x000000afu, 0x0004003du, 0x0000009eu, 0x00000112u, 0x00000111u, 0x00040071u, 0x000000abu, 0x00000113u, 0x00000112u, 0x0004007cu, 0x00000009u, 0x00000114u, 0x00000113u, 0x0004003du, 0x00000006u, 0x00000115u, 0x00000011u, 0x00070041u, 0x000000e6u, 0x00000116u, 0x0000010au, 0x0000009cu, 0x00000115u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000118u, 0x00000011u, 0x00070041u, 0x000000f2u, 0x00000119u, 0x0000010au, 0x0000009cu, 0x00000118u, 0x000000bbu, 0x0004003du, 0x0000009du, 0x0000011au, 0x00000119u, 0x00040071u, 0x00000006u, 0x0000011bu, 0x0000011au, 0x0004007cu, 0x00000008u, 0x0000011cu, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000011u, 0x00070041u, 0x000000f2u, 0x0000011eu, 0x0000010au, 0x0000009cu, 0x0000011du, 0x000000c1u, 0x0004003du, 0x0000009du, 0x0000011fu, 0x0000011eu, 0x00040071u, 0x00000006u, 0x00000120u, 0x0000011fu, 0x0004007cu, 0x00000008u, 0x00000121u, 0x00000120u, 0x000a0050u, 0x0000000fu, 0x00000122u, 0x0000010fu, 0x00000114u, 0x00000117u, 0x0000011cu, 0x00000121u, 0x0000009cu, 0x0000009cu, 0x000200feu, 0x00000122u, 0x00010038u, 0x00050036u, 0x00000014u, 0x0000001au, 0x00000000u, 0x00000017u, 0x00030037u, 0x00000015u, 0x00000018u, 0x00030037u, 0x00000016u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000015u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x0000013bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000144u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000126u, 0x00000019u, 0x00060050u, 0x00000014u, 0x00000127u, 0x00000126u, 0x00000126u, 0x00000126u, 0x000500c3u, 0x00000014u, 0x00000129u, 0x00000127u, 0x00000128u, 0x000500c7u, 0x00000014u, 0x0000012bu, 0x00000129u, 0x0000192eu, 0x0003003eu, 0x00000125u, 0x0000012bu, 0x0004003du, 0x00000014u, 0x0000012du, 0x00000018u, 0x000500c7u, 0x00000014u, 0x00000130u, 0x0000012du, 0x0000192du, 0x00050080u, 0x00000014u, 0x00000132u, 0x00000130u, 0x0000192fu, 0x0004003du, 0x00000014u, 0x00000135u, 0x00000018u, 0x000500adu, 0x00000138u, 0x00000139u, 0x00000135u, 0x00000137u, 0x000600a9u, 0x00000014u, 0x0000013au, 0x00000139u, 0x00000134u, 0x00000132u, 0x0003003eu, 0x0000012cu, 0x0000013au, 0x0004003du, 0x00000014u, 0x0000013du, 0x00000018u, 0x000500c7u, 0x00000014u, 0x0000013fu, 0x0000013du, 0x0000192eu, 0x00050082u, 0x00000014u, 0x00000140u, 0x0000012bu, 0x0000013fu, 0x000500c3u, 0x00000014u, 0x00000143u, 0x00000140u, 0x00001930u, 0x0003003eu, 0x0000013bu, 0x00000143u, 0x0004003du, 0x00000014u, 0x00000146u, 0x00000018u, 0x00050082u, 0x00000014u, 0x00000147u, 0x0000013au, 0x00000146u, 0x0003003eu, 0x00000144u, 0x00000147u, 0x0004003du, 0x00000014u, 0x00000148u, 0x00000018u, 0x000500c7u, 0x00000014u, 0x0000014bu, 0x00000147u, 0x00000143u, 0x00050080u, 0x00000014u, 0x0000014cu, 0x00000148u, 0x0000014bu, 0x0003003eu, 0x0000012cu, 0x0000014cu, 0x000500c7u, 0x00000014u, 0x0000014fu, 0x0000014cu, 0x00000134u, 0x00050051u, 0x00000008u, 0x00000150u, 0x0000014fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000151u, 0x0000014fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000152u, 0x0000014fu, 0x00000002u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001eu, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x0000001du, 0x000200f8u, 0x0000001fu, 0x0004003bu, 0x00000016u, 0x00000156u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000158u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000015fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000163u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000157u, 0x0000001du, 0x0003003eu, 0x00000156u, 0x00000157u, 0x000500c3u, 0x00000008u, 0x0000015au, 0x00000157u, 0x000000eau, 0x0003003eu, 0x00000158u, 0x0000015au, 0x000500c7u, 0x00000008u, 0x0000015eu, 0x00000157u, 0x0000015du, 0x0003003eu, 0x0000015bu, 0x0000015eu, 0x00050082u, 0x00000008u, 0x00000161u, 0x000000cdu, 0x0000015au, 0x0007000cu, 0x00000008u, 0x00000162u, 0x00000001u, 0x0000002au, 0x00000161u, 0x0000009cu, 0x0003003eu, 0x0000015fu, 0x00000162u, 0x000500c3u, 0x00000008u, 0x00000166u, 0x00000164u, 0x0000015au, 0x00050082u, 0x00000008u, 0x00000167u, 0x00000164u, 0x00000166u, 0x0003003eu, 0x00000163u, 0x00000167u, 0x000500c4u, 0x00000008u, 0x0000016au, 0x0000015eu, 0x00000162u, 0x00050080u, 0x00000008u, 0x0000016cu, 0x0000016au, 0x00000167u, 0x000200feu, 0x0000016cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000021u, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003bu, 0x00000016u, 0x0000016fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000174u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000017bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000017fu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000171u, 0x00000020u, 0x00050082u, 0x00000008u, 0x00000172u, 0x00000170u, 0x00000171u, 0x0007000cu, 0x00000008u, 0x00000173u, 0x00000001u, 0x0000002au, 0x00000172u, 0x000000afu, 0x0003003eu, 0x0000016fu, 0x00000173u, 0x0006000cu, 0x00000008u, 0x00000177u, 0x00000001u, 0x0000004au, 0x00000173u, 0x00050082u, 0x00000008u, 0x00000178u, 0x00000175u, 0x00000177u, 0x0003003eu, 0x00000174u, 0x00000178u, 0x0008000cu, 0x00000008u, 0x0000017au, 0x00000001u, 0x0000002du, 0x00000178u, 0x0000009cu, 0x000000d3u, 0x0003003eu, 0x00000174u, 0x0000017au, 0x00050082u, 0x00000008u, 0x0000017du, 0x000000cdu, 0x0000017au, 0x0007000cu, 0x00000008u, 0x0000017eu, 0x00000001u, 0x0000002au, 0x0000017du, 0x0000009cu, 0x0003003eu, 0x0000017bu, 0x0000017eu, 0x0004003du, 0x00000008u, 0x00000180u, 0x00000020u, 0x000500c3u, 0x00000008u, 0x00000182u, 0x00000180u, 0x0000017eu, 0x000500c7u, 0x00000008u, 0x00000183u, 0x00000182u, 0x0000015du, 0x0003003eu, 0x0000017fu, 0x00000183u, 0x000500c4u, 0x00000008u, 0x00000185u, 0x0000017au, 0x000000eau, 0x00050080u, 0x00000008u, 0x00000187u, 0x00000185u, 0x00000183u, 0x000200feu, 0x00000187u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000024u, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003du, 0x00000008u, 0x0000018au, 0x00000023u, 0x000500c4u, 0x00000008u, 0x0000018bu, 0x000000afu, 0x0000018au, 0x000200feu, 0x0000018bu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000027u, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x00000026u, 0x000200f8u, 0x00000028u, 0x0004003du, 0x00000008u, 0x0000018eu, 0x00000026u, 0x0006000cu, 0x00000008u, 0x0000018fu, 0x00000001u, 0x0000004au, 0x0000018eu, 0x0007000cu, 0x00000008u, 0x00000190u, 0x00000001u, 0x0000002au, 0x0000018fu, 0x0000009cu, 0x000200feu, 0x00000190u, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000039u, 0x00000000u, 0x00000030u, 0x00030037u, 0x0000002au, 0x00000031u, 0x00030037u, 0x0000002bu, 0x00000032u, 0x00030037u, 0x0000002du, 0x00000033u, 0x00030037u, 0x0000002du, 0x00000034u, 0x00030037u, 0x0000002du, 0x00000035u, 0x00030037u, 0x0000002du, 0x00000036u, 0x00030037u, 0x0000002fu, 0x00000037u, 0x00030037u, 0x0000002du, 0x00000038u, 0x000200f8u, 0x0000003au, 0x0005003bu, 0x0000002du, 0x0000093du, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000015u, 0x0000093au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x0000019bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x000001c0u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000001f7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000020au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000024au, 0x00000007u, 0x000300f7u, 0x00000939u, 0x00000000u, 0x000300fbu, 0x000001b8u, 0x0000093cu, 0x000200f8u, 0x0000093cu, 0x00050041u, 0x00000016u, 0x00000194u, 0x00000032u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000195u, 0x00000194u, 0x000300f7u, 0x0000019au, 0x00000000u, 0x000b00fbu, 0x00000195u, 0x0000019au, 0x00000000u, 0x00000196u, 0x00000001u, 0x00000197u, 0x00000002u, 0x00000198u, 0x00000003u, 0x00000199u, 0x000200f8u, 0x00000196u, 0x00050041u, 0x0000002bu, 0x0000019cu, 0x00000031u, 0x0000009cu, 0x0004003du, 0x00000009u, 0x0000019du, 0x0000019cu, 0x0008004fu, 0x00000014u, 0x0000019eu, 0x0000019du, 0x0000019du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x0000019eu, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x00000197u, 0x00050041u, 0x0000002bu, 0x000001a0u, 0x00000031u, 0x000000afu, 0x0004003du, 0x00000009u, 0x000001a1u, 0x000001a0u, 0x0008004fu, 0x00000014u, 0x000001a2u, 0x000001a1u, 0x000001a1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x000001a2u, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x00000198u, 0x00050041u, 0x0000002bu, 0x000001a4u, 0x00000031u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000001a5u, 0x000001a4u, 0x0008004fu, 0x00000014u, 0x000001a6u, 0x000001a5u, 0x000001a5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x000001a6u, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x00000199u, 0x00050041u, 0x0000002bu, 0x000001a8u, 0x00000031u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000001a9u, 0x000001a8u, 0x0008004fu, 0x00000014u, 0x000001aau, 0x000001a9u, 0x000001a9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x000001aau, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x0000019au, 0x000d00f5u, 0x00000014u, 0x000018dau, 0x000018dbu, 0x0000093cu, 0x0000019eu, 0x00000196u, 0x000001a2u, 0x00000197u, 0x000001a6u, 0x00000198u, 0x000001aau, 0x00000199u, 0x0004003du, 0x0000002cu, 0x000001adu, 0x00000038u, 0x000300f7u, 0x000001afu, 0x00000000u, 0x000400fau, 0x000001adu, 0x000001aeu, 0x000001afu, 0x000200f8u, 0x000001aeu, 0x0004003du, 0x0000002cu, 0x000001b0u, 0x00000035u, 0x0004003du, 0x0000002cu, 0x000001b1u, 0x00000036u, 0x000400a8u, 0x0000002cu, 0x000001b2u, 0x000001b1u, 0x000500a7u, 0x0000002cu, 0x000001b3u, 0x000001b0u, 0x000001b2u, 0x000300f7u, 0x000001b5u, 0x00000000u, 0x000400fau, 0x000001b3u, 0x000001b4u, 0x000001b5u, 0x000200f8u, 0x000001b4u, 0x0003003eu, 0x0000093du, 0x000002b3u, 0x0003003eu, 0x0000093au, 0x000018dau, 0x000200f9u, 0x00000939u, 0x000200f8u, 0x000001b5u, 0x000200f9u, 0x000001afu, 0x000200f8u, 0x000001afu, 0x00050041u, 0x00000016u, 0x000001b9u, 0x00000032u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x000001bau, 0x000001b9u, 0x000300f7u, 0x000001bfu, 0x00000000u, 0x000b00fbu, 0x000001bau, 0x000001bfu, 0x00000000u, 0x000001bbu, 0x00000001u, 0x000001bcu, 0x00000002u, 0x000001bdu, 0x00000003u, 0x000001beu, 0x000200f8u, 0x000001bbu, 0x00050041u, 0x0000002bu, 0x000001c1u, 0x00000031u, 0x0000009cu, 0x0004003du, 0x00000009u, 0x000001c2u, 0x000001c1u, 0x0008004fu, 0x00000014u, 0x000001c3u, 0x000001c2u, 0x000001c2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001c3u, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001bcu, 0x00050041u, 0x0000002bu, 0x000001c5u, 0x00000031u, 0x000000afu, 0x0004003du, 0x00000009u, 0x000001c6u, 0x000001c5u, 0x0008004fu, 0x00000014u, 0x000001c7u, 0x000001c6u, 0x000001c6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001c7u, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001bdu, 0x00050041u, 0x0000002bu, 0x000001c9u, 0x00000031u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000001cau, 0x000001c9u, 0x0008004fu, 0x00000014u, 0x000001cbu, 0x000001cau, 0x000001cau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001cbu, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001beu, 0x00050041u, 0x0000002bu, 0x000001cdu, 0x00000031u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000001ceu, 0x000001cdu, 0x0008004fu, 0x00000014u, 0x000001cfu, 0x000001ceu, 0x000001ceu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001cfu, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001bfu, 0x0004003du, 0x0000002cu, 0x000001d2u, 0x00000038u, 0x000300f7u, 0x000001d4u, 0x00000000u, 0x000400fau, 0x000001d2u, 0x000001d3u, 0x000001d4u, 0x000200f8u, 0x000001d3u, 0x0004003du, 0x0000002cu, 0x000001d5u, 0x00000034u, 0x000400a8u, 0x0000002cu, 0x000001d6u, 0x000001d5u, 0x000400a8u, 0x0000002cu, 0x000001d7u, 0x000001d6u, 0x000300f7u, 0x000001d9u, 0x00000000u, 0x000400fau, 0x000001d7u, 0x000001d8u, 0x000001d9u, 0x000200f8u, 0x000001d8u, 0x00050041u, 0x00000016u, 0x000001dbu, 0x00000032u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000001dcu, 0x000001dbu, 0x000500aau, 0x0000002cu, 0x000001ddu, 0x000001dcu, 0x0000009cu, 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000400fau, 0x000001ddu, 0x000001deu, 0x000001dfu, 0x000200f8u, 0x000001deu, 0x00050041u, 0x00000016u, 0x000001e1u, 0x00000032u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001e2u, 0x000001e1u, 0x000500aau, 0x0000002cu, 0x000001e3u, 0x000001e2u, 0x0000009cu, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x000700f5u, 0x0000002cu, 0x000001e4u, 0x000001ddu, 0x000001d8u, 0x000001e3u, 0x000001deu, 0x000300f7u, 0x000001e6u, 0x00000000u, 0x000400fau, 0x000001e4u, 0x000001e5u, 0x000001e6u, 0x000200f8u, 0x000001e5u, 0x00060041u, 0x00000016u, 0x000001e7u, 0x00000031u, 0x0000009cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001e8u, 0x000001e7u, 0x000500aau, 0x0000002cu, 0x000001e9u, 0x000001e8u, 0x00000133u, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001e6u, 0x000700f5u, 0x0000002cu, 0x000001eau, 0x000001e4u, 0x000001dfu, 0x000001e9u, 0x000001e5u, 0x000200f9u, 0x000001d9u, 0x000200f8u, 0x000001d9u, 0x000700f5u, 0x0000002cu, 0x000001ebu, 0x000001d6u, 0x000001d3u, 0x000001eau, 0x000001e6u, 0x000300f7u, 0x000001edu, 0x00000000u, 0x000400fau, 0x000001ebu, 0x000001ecu, 0x000001edu, 0x000200f8u, 0x000001ecu, 0x0004003du, 0x00000014u, 0x000001eeu, 0x000001c0u, 0x0003003eu, 0x0000093du, 0x000002b3u, 0x0003003eu, 0x0000093au, 0x000001eeu, 0x000200f9u, 0x00000939u, 0x000200f8u, 0x000001edu, 0x000200f9u, 0x000001d4u, 0x000200f8u, 0x000001d4u, 0x00050041u, 0x00000016u, 0x000001f0u, 0x00000032u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000001f1u, 0x000001f0u, 0x000300f7u, 0x000001f6u, 0x00000000u, 0x000b00fbu, 0x000001f1u, 0x000001f6u, 0x00000000u, 0x000001f2u, 0x00000001u, 0x000001f3u, 0x00000002u, 0x000001f4u, 0x00000003u, 0x000001f5u, 0x000200f8u, 0x000001f2u, 0x00060041u, 0x00000016u, 0x000001f8u, 0x00000031u, 0x0000009cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001f9u, 0x000001f8u, 0x0003003eu, 0x000001f7u, 0x000001f9u, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f3u, 0x00060041u, 0x00000016u, 0x000001fbu, 0x00000031u, 0x000000b5u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001fcu, 0x000001fbu, 0x0003003eu, 0x000001f7u, 0x000001fcu, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f4u, 0x00050041u, 0x00000016u, 0x000001feu, 0x00000031u, 0x000000c1u, 0x0004003du, 0x00000008u, 0x000001ffu, 0x000001feu, 0x0003003eu, 0x000001f7u, 0x000001ffu, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f5u, 0x0003003eu, 0x000001f7u, 0x0000009cu, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f6u, 0x000d00f5u, 0x00000008u, 0x000018c0u, 0x000018c5u, 0x000001d4u, 0x000001f9u, 0x000001f2u, 0x000001fcu, 0x000001f3u, 0x000001ffu, 0x000001f4u, 0x0000009cu, 0x000001f5u, 0x00050041u, 0x00000016u, 0x00000203u, 0x00000032u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000204u, 0x00000203u, 0x000300f7u, 0x00000209u, 0x00000000u, 0x000b00fbu, 0x00000204u, 0x00000209u, 0x00000000u, 0x00000205u, 0x00000001u, 0x00000206u, 0x00000002u, 0x00000207u, 0x00000003u, 0x00000208u, 0x000200f8u, 0x00000205u, 0x000400c8u, 0x00000008u, 0x0000020cu, 0x000018c0u, 0x000500c7u, 0x00000008u, 0x0000020du, 0x0000020cu, 0x00000133u, 0x0003003eu, 0x0000020au, 0x0000020du, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000206u, 0x00060041u, 0x00000016u, 0x0000020fu, 0x00000031u, 0x000000afu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000210u, 0x0000020fu, 0x0003003eu, 0x0000020au, 0x00000210u, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000207u, 0x0003003eu, 0x0000020au, 0x00000133u, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000208u, 0x0003003eu, 0x0000020au, 0x0000009cu, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000209u, 0x000d00f5u, 0x00000008u, 0x000018cau, 0x000018c5u, 0x000001f6u, 0x0000020du, 0x00000205u, 0x00000210u, 0x00000206u, 0x00000133u, 0x00000207u, 0x0000009cu, 0x00000208u, 0x000500c3u, 0x00000008u, 0x00000216u, 0x000018c0u, 0x000000bbu, 0x0003003eu, 0x000001f7u, 0x00000216u, 0x000500c3u, 0x00000008u, 0x00000218u, 0x000018cau, 0x000000bbu, 0x0003003eu, 0x0000020au, 0x00000218u, 0x0004003du, 0x00000008u, 0x0000021au, 0x00000203u, 0x000500aau, 0x0000002cu, 0x0000021bu, 0x0000021au, 0x000000afu, 0x000300f7u, 0x0000021du, 0x00000000u, 0x000400fau, 0x0000021bu, 0x0000021cu, 0x0000021du, 0x000200f8u, 0x0000021cu, 0x00050041u, 0x00000016u, 0x0000021fu, 0x00000037u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000220u, 0x0000021fu, 0x000500c3u, 0x00000008u, 0x00000221u, 0x00000216u, 0x00000220u, 0x000500c7u, 0x00000008u, 0x00000223u, 0x00000221u, 0x00000222u, 0x0003003eu, 0x000001f7u, 0x00000223u, 0x00050041u, 0x00000016u, 0x00000225u, 0x00000037u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000226u, 0x00000225u, 0x000500c3u, 0x00000008u, 0x00000227u, 0x00000218u, 0x00000226u, 0x000500c5u, 0x00000008u, 0x00000228u, 0x00000227u, 0x000000bbu, 0x0003003eu, 0x0000020au, 0x00000228u, 0x000200f9u, 0x0000021du, 0x000200f8u, 0x0000021du, 0x000700f5u, 0x00000008u, 0x000018dfu, 0x00000218u, 0x00000209u, 0x00000228u, 0x0000021cu, 0x000700f5u, 0x00000008u, 0x000018d3u, 0x00000216u, 0x00000209u, 0x00000223u, 0x0000021cu, 0x0004003du, 0x00000014u, 0x0000022au, 0x000001c0u, 0x00050051u, 0x00000008u, 0x0000022bu, 0x0000022au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000022cu, 0x0000022au, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000022du, 0x0000022au, 0x00000002u, 0x00060050u, 0x00000014u, 0x00000230u, 0x000018d3u, 0x000018d3u, 0x000018d3u, 0x00050084u, 0x00000014u, 0x00000231u, 0x0000022au, 0x00000230u, 0x00050051u, 0x00000008u, 0x00000233u, 0x000018dau, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000234u, 0x000018dau, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000235u, 0x000018dau, 0x00000002u, 0x00050080u, 0x00000008u, 0x00000238u, 0x000018dfu, 0x000000afu, 0x00060050u, 0x00000014u, 0x00000239u, 0x00000238u, 0x00000238u, 0x00000238u, 0x00050084u, 0x00000014u, 0x0000023au, 0x000018dau, 0x00000239u, 0x00050080u, 0x00000014u, 0x0000023bu, 0x00000231u, 0x0000023au, 0x0003003eu, 0x00000229u, 0x0000023bu, 0x0004003du, 0x0000002cu, 0x0000023cu, 0x00000038u, 0x000400a8u, 0x0000002cu, 0x0000023du, 0x0000023cu, 0x0004003du, 0x0000002cu, 0x0000023eu, 0x00000033u, 0x000500a6u, 0x0000002cu, 0x0000023fu, 0x0000023du, 0x0000023eu, 0x000300f7u, 0x00000241u, 0x00000000u, 0x000400fau, 0x0000023fu, 0x00000240u, 0x00000249u, 0x000200f8u, 0x00000240u, 0x0004003du, 0x00000014u, 0x00000242u, 0x00000229u, 0x000500c3u, 0x00000014u, 0x00000244u, 0x00000242u, 0x00001931u, 0x00050051u, 0x00000008u, 0x00000245u, 0x00000244u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000246u, 0x00000244u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000247u, 0x00000244u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x00000244u, 0x000200f9u, 0x00000241u, 0x000200f8u, 0x00000249u, 0x000500c3u, 0x00000008u, 0x0000024cu, 0x000018d3u, 0x000000b5u, 0x000500c3u, 0x00000008u, 0x0000024eu, 0x000018dfu, 0x000000b5u, 0x00050080u, 0x00000008u, 0x0000024fu, 0x0000024cu, 0x0000024eu, 0x00050080u, 0x00000008u, 0x00000250u, 0x0000024fu, 0x000000afu, 0x0003003eu, 0x0000024au, 0x00000250u, 0x0004003du, 0x00000014u, 0x00000251u, 0x00000229u, 0x000500c3u, 0x00000014u, 0x00000253u, 0x00000251u, 0x00001932u, 0x0003003eu, 0x00000229u, 0x00000253u, 0x0004003du, 0x00000014u, 0x00000254u, 0x00000229u, 0x000500c7u, 0x00000014u, 0x00000256u, 0x00000254u, 0x00001933u, 0x0003003eu, 0x00000229u, 0x00000256u, 0x0004003du, 0x00000257u, 0x0000025au, 0x00000259u, 0x000500c4u, 0x00000008u, 0x0000025cu, 0x00000250u, 0x000000eau, 0x00050041u, 0x00000016u, 0x0000025du, 0x00000229u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x0000025eu, 0x0000025du, 0x000500c5u, 0x00000008u, 0x0000025fu, 0x0000025cu, 0x0000025eu, 0x0005005fu, 0x000000abu, 0x00000260u, 0x0000025au, 0x0000025fu, 0x00050051u, 0x00000006u, 0x00000261u, 0x00000260u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000262u, 0x00000261u, 0x00050041u, 0x00000016u, 0x00000263u, 0x000001c0u, 0x000001b8u, 0x0003003eu, 0x00000263u, 0x00000262u, 0x00050041u, 0x00000016u, 0x00000267u, 0x00000229u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000268u, 0x00000267u, 0x000500c5u, 0x00000008u, 0x00000269u, 0x0000025cu, 0x00000268u, 0x0005005fu, 0x000000abu, 0x0000026au, 0x0000025au, 0x00000269u, 0x00050051u, 0x00000006u, 0x0000026bu, 0x0000026au, 0x00000000u, 0x0004007cu, 0x00000008u, 0x0000026cu, 0x0000026bu, 0x00050041u, 0x00000016u, 0x0000026du, 0x000001c0u, 0x000001dau, 0x0003003eu, 0x0000026du, 0x0000026cu, 0x00050041u, 0x00000016u, 0x00000271u, 0x00000229u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000272u, 0x00000271u, 0x000500c5u, 0x00000008u, 0x00000273u, 0x0000025cu, 0x00000272u, 0x0005005fu, 0x000000abu, 0x00000274u, 0x0000025au, 0x00000273u, 0x00050051u, 0x00000006u, 0x00000275u, 0x00000274u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000276u, 0x00000275u, 0x00050041u, 0x00000016u, 0x00000277u, 0x000001c0u, 0x00000193u, 0x0003003eu, 0x00000277u, 0x00000276u, 0x000200f9u, 0x00000241u, 0x000200f8u, 0x00000241u, 0x0004003du, 0x00000014u, 0x00000278u, 0x000001c0u, 0x000500c7u, 0x00000014u, 0x0000027au, 0x00000278u, 0x00000134u, 0x0003003eu, 0x0000093du, 0x000002b3u, 0x0003003eu, 0x0000093au, 0x0000027au, 0x000200f9u, 0x00000939u, 0x000200f8u, 0x00000939u, 0x000900f5u, 0x00000014u, 0x000018e0u, 0x000018dau, 0x000001b4u, 0x000001eeu, 0x000001ecu, 0x0000027au, 0x00000241u, 0x000200feu, 0x000018e0u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003cu, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x0000003bu, 0x000200f8u, 0x0000003du, 0x0004003du, 0x00000008u, 0x0000027du, 0x0000003bu, 0x000500abu, 0x0000002cu, 0x0000027eu, 0x0000027du, 0x0000009cu, 0x000300f7u, 0x00000280u, 0x00000000u, 0x000400fau, 0x0000027eu, 0x0000027fu, 0x00000280u, 0x000200f8u, 0x0000027fu, 0x0004003du, 0x00000008u, 0x00000281u, 0x0000003bu, 0x0006000cu, 0x00000008u, 0x00000282u, 0x00000001u, 0x0000004au, 0x00000281u, 0x000500c4u, 0x00000008u, 0x00000283u, 0x000000afu, 0x00000282u, 0x0003003eu, 0x0000003bu, 0x00000283u, 0x000200f9u, 0x00000280u, 0x000200f8u, 0x00000280u, 0x0004003du, 0x00000008u, 0x00000284u, 0x0000003bu, 0x000200feu, 0x00000284u, 0x00010038u, 0x00050036u, 0x0000002cu, 0x0000004du, 0x00000000u, 0x0000003eu, 0x00030037u, 0x00000016u, 0x0000003fu, 0x00030037u, 0x00000016u, 0x00000040u, 0x00030037u, 0x00000016u, 0x00000041u, 0x00030037u, 0x00000016u, 0x00000042u, 0x00030037u, 0x00000016u, 0x00000043u, 0x00030037u, 0x00000016u, 0x00000044u, 0x00030037u, 0x00000016u, 0x00000045u, 0x00030037u, 0x0000002du, 0x00000046u, 0x00030037u, 0x00000016u, 0x00000047u, 0x00030037u, 0x0000002du, 0x00000048u, 0x00030037u, 0x0000002du, 0x00000049u, 0x00030037u, 0x0000002du, 0x0000004au, 0x00030037u, 0x0000002du, 0x0000004bu, 0x00030037u, 0x0000002fu, 0x0000004cu, 0x000200f8u, 0x0000004eu, 0x0004003bu, 0x00000016u, 0x0000028au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000028eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000028fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000292u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000297u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002b5u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002b9u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002bbu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002bfu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002cau, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002dbu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002dcu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002dfu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002e3u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002e7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000313u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000315u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000336u, 0x00000007u, 0x0004003du, 0x0000002cu, 0x00000287u, 0x00000046u, 0x000300f7u, 0x00000289u, 0x00000000u, 0x000400fau, 0x00000287u, 0x00000288u, 0x00000330u, 0x000200f8u, 0x00000288u, 0x0004003du, 0x00000008u, 0x0000028cu, 0x00000042u, 0x0003003eu, 0x0000028bu, 0x0000028cu, 0x00050039u, 0x00000008u, 0x0000028du, 0x0000001eu, 0x0000028bu, 0x0003003eu, 0x0000028au, 0x0000028du, 0x0004003du, 0x00000008u, 0x00000290u, 0x00000043u, 0x0003003eu, 0x0000028fu, 0x00000290u, 0x00050039u, 0x00000008u, 0x00000291u, 0x00000024u, 0x0000028fu, 0x0003003eu, 0x0000028eu, 0x00000291u, 0x0004003du, 0x00000008u, 0x00000293u, 0x00000042u, 0x000500c3u, 0x00000008u, 0x00000294u, 0x00000293u, 0x000000eau, 0x000500c7u, 0x00000008u, 0x00000296u, 0x00000294u, 0x00000295u, 0x0003003eu, 0x00000292u, 0x00000296u, 0x0003003eu, 0x00000297u, 0x00000298u, 0x0004003du, 0x00000008u, 0x00000299u, 0x00000041u, 0x0004003du, 0x00000008u, 0x0000029au, 0x00000043u, 0x00050082u, 0x00000008u, 0x0000029bu, 0x00000299u, 0x0000029au, 0x0008000cu, 0x00000008u, 0x0000029cu, 0x00000001u, 0x0000002du, 0x0000029bu, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x0000029du, 0x0000004cu, 0x000001b8u, 0x0003003eu, 0x0000029du, 0x0000029cu, 0x0004003du, 0x00000008u, 0x0000029eu, 0x00000043u, 0x0004003du, 0x00000008u, 0x0000029fu, 0x00000041u, 0x00050082u, 0x00000008u, 0x000002a0u, 0x0000029eu, 0x0000029fu, 0x0008000cu, 0x00000008u, 0x000002a1u, 0x00000001u, 0x0000002du, 0x000002a0u, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x000002a2u, 0x0000004cu, 0x000001dau, 0x0003003eu, 0x000002a2u, 0x000002a1u, 0x000500b1u, 0x0000002cu, 0x000002a4u, 0x00000296u, 0x000000bbu, 0x000300f7u, 0x000002a6u, 0x00000000u, 0x000400fau, 0x000002a4u, 0x000002a5u, 0x000002a6u, 0x000200f8u, 0x000002a5u, 0x000500abu, 0x0000002cu, 0x000002a9u, 0x00000291u, 0x000002a8u, 0x000300f7u, 0x000002abu, 0x00000000u, 0x000400fau, 0x000002a9u, 0x000002aau, 0x000002b2u, 0x000200f8u, 0x000002aau, 0x000500c4u, 0x00000008u, 0x000002adu, 0x00000291u, 0x000000afu, 0x000500c3u, 0x00000008u, 0x000002b0u, 0x000002aeu, 0x00000296u, 0x0007000cu, 0x00000008u, 0x000002b1u, 0x00000001u, 0x0000002au, 0x000002adu, 0x000002b0u, 0x0003003eu, 0x0000028eu, 0x000002b1u, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002b2u, 0x0003003eu, 0x00000297u, 0x000002b3u, 0x0003003eu, 0x0000028eu, 0x000002b4u, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002abu, 0x000700f5u, 0x00000008u, 0x000018e3u, 0x000002b1u, 0x000002aau, 0x000002b4u, 0x000002b2u, 0x000600a9u, 0x0000002cu, 0x00001938u, 0x000002a9u, 0x00000298u, 0x000002b3u, 0x000200f9u, 0x000002a6u, 0x000200f8u, 0x000002a6u, 0x000700f5u, 0x0000002cu, 0x000018e4u, 0x00000298u, 0x00000288u, 0x00001938u, 0x000002abu, 0x000700f5u, 0x00000008u, 0x000018e2u, 0x00000291u, 0x00000288u, 0x000018e3u, 0x000002abu, 0x0004003du, 0x00000008u, 0x000002b6u, 0x00000040u, 0x000500c5u, 0x00000008u, 0x000002b8u, 0x000002b6u, 0x000018e2u, 0x0003003eu, 0x000002b9u, 0x000002b8u, 0x00050039u, 0x00000008u, 0x000002bau, 0x0000003cu, 0x000002b9u, 0x0003003eu, 0x000002b5u, 0x000002bau, 0x0003003eu, 0x000002bbu, 0x000002bau, 0x000500c4u, 0x00000008u, 0x000002beu, 0x000002bau, 0x000000bbu, 0x0003003eu, 0x000002b5u, 0x000002beu, 0x000400a8u, 0x0000002cu, 0x000002c1u, 0x000018e4u, 0x000300f7u, 0x000002c3u, 0x00000000u, 0x000400fau, 0x000002c1u, 0x000002c2u, 0x000002c3u, 0x000200f8u, 0x000002c2u, 0x0004003du, 0x00000008u, 0x000002c4u, 0x0000003fu, 0x00050080u, 0x00000008u, 0x000002c6u, 0x000002c4u, 0x000002beu, 0x000500afu, 0x0000002cu, 0x000002c8u, 0x000002c6u, 0x0000028du, 0x000200f9u, 0x000002c3u, 0x000200f8u, 0x000002c3u, 0x000700f5u, 0x0000002cu, 0x000002c9u, 0x000018e4u, 0x000002a6u, 0x000002c8u, 0x000002c2u, 0x0003003eu, 0x000002bfu, 0x000002c9u, 0x0004003du, 0x00000008u, 0x000002cbu, 0x00000044u, 0x0004003du, 0x00000008u, 0x000002ccu, 0x00000045u, 0x00050080u, 0x00000008u, 0x000002cdu, 0x000002cbu, 0x000002ccu, 0x000500afu, 0x0000002cu, 0x000002ceu, 0x000002cdu, 0x000000d9u, 0x0003003eu, 0x000002cau, 0x000002ceu, 0x0004003du, 0x0000002cu, 0x000002cfu, 0x00000048u, 0x000400a8u, 0x0000002cu, 0x000002d0u, 0x000002cfu, 0x000300f7u, 0x000002d2u, 0x00000000u, 0x000400fau, 0x000002d0u, 0x000002d1u, 0x000002d2u, 0x000200f8u, 0x000002d1u, 0x000400a8u, 0x0000002cu, 0x000002d4u, 0x000002ceu, 0x0004003du, 0x0000002cu, 0x000002d5u, 0x00000049u, 0x000500a7u, 0x0000002cu, 0x000002d6u, 0x000002d4u, 0x000002d5u, 0x000500a7u, 0x0000002cu, 0x000002d8u, 0x000002d6u, 0x000002c9u, 0x000200f9u, 0x000002d2u, 0x000200f8u, 0x000002d2u, 0x000700f5u, 0x0000002cu, 0x000002d9u, 0x000002cfu, 0x000002c3u, 0x000002d8u, 0x000002d1u, 0x0003003eu, 0x0000004au, 0x000002d9u, 0x0003003eu, 0x0000004bu, 0x000002ceu, 0x0003003eu, 0x000002dbu, 0x00000298u, 0x000500aau, 0x0000002cu, 0x000002deu, 0x0000028du, 0x00000170u, 0x0003003eu, 0x000002dcu, 0x000002deu, 0x0004003du, 0x00000008u, 0x000002e0u, 0x0000003fu, 0x000500b1u, 0x0000002cu, 0x000002e2u, 0x000002e0u, 0x0000028du, 0x0003003eu, 0x000002dfu, 0x000002e2u, 0x0004003du, 0x00000008u, 0x000002e4u, 0x0000003fu, 0x00050082u, 0x00000008u, 0x000002e6u, 0x000002e4u, 0x000002beu, 0x0003003eu, 0x000002e3u, 0x000002e6u, 0x000500b3u, 0x0000002cu, 0x000002ebu, 0x000002e6u, 0x0000028du, 0x000500a6u, 0x0000002cu, 0x000002ecu, 0x000018e4u, 0x000002ebu, 0x0003003eu, 0x000002e7u, 0x000002ecu, 0x0004003du, 0x00000008u, 0x000002edu, 0x00000047u, 0x000300f7u, 0x000002f2u, 0x00000000u, 0x000b00fbu, 0x000002edu, 0x000002f2u, 0x00000000u, 0x000002eeu, 0x00000001u, 0x000002efu, 0x00000002u, 0x000002f0u, 0x00000003u, 0x000002f1u, 0x000200f8u, 0x000002eeu, 0x000400a8u, 0x0000002cu, 0x000002f4u, 0x000002deu, 0x000300f7u, 0x000002f6u, 0x00000000u, 0x000400fau, 0x000002f4u, 0x000002f5u, 0x000002f6u, 0x000200f8u, 0x000002f5u, 0x000600a9u, 0x0000002cu, 0x000002fau, 0x000002ceu, 0x000002e2u, 0x000002ecu, 0x000200f9u, 0x000002f6u, 0x000200f8u, 0x000002f6u, 0x000700f5u, 0x0000002cu, 0x000002fbu, 0x000002deu, 0x000002eeu, 0x000002fau, 0x000002f5u, 0x0003003eu, 0x000002dbu, 0x000002fbu, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002efu, 0x000400a8u, 0x0000002cu, 0x000002feu, 0x000002e2u, 0x000400a8u, 0x0000002cu, 0x00000300u, 0x000002c9u, 0x000500a6u, 0x0000002cu, 0x00000301u, 0x000002feu, 0x00000300u, 0x000400a8u, 0x0000002cu, 0x00000303u, 0x000002ceu, 0x000500a6u, 0x0000002cu, 0x00000304u, 0x00000301u, 0x00000303u, 0x000300f7u, 0x00000306u, 0x00000000u, 0x000400fau, 0x00000304u, 0x00000305u, 0x00000310u, 0x000200f8u, 0x00000305u, 0x000400a8u, 0x0000002cu, 0x00000308u, 0x000002deu, 0x000300f7u, 0x0000030au, 0x00000000u, 0x000400fau, 0x00000308u, 0x00000309u, 0x0000030au, 0x000200f8u, 0x00000309u, 0x000600a9u, 0x0000002cu, 0x0000030eu, 0x000002ceu, 0x000002e2u, 0x000002ecu, 0x000200f9u, 0x0000030au, 0x000200f8u, 0x0000030au, 0x000700f5u, 0x0000002cu, 0x0000030fu, 0x000002deu, 0x00000305u, 0x0000030eu, 0x00000309u, 0x0003003eu, 0x000002dbu, 0x0000030fu, 0x000200f9u, 0x00000306u, 0x000200f8u, 0x00000310u, 0x000500c7u, 0x00000008u, 0x00000312u, 0x000002bau, 0x000002b4u, 0x0003003eu, 0x00000313u, 0x00000312u, 0x00050039u, 0x00000008u, 0x00000314u, 0x00000027u, 0x00000313u, 0x0003003eu, 0x000002bbu, 0x00000314u, 0x000500c3u, 0x00000008u, 0x00000318u, 0x0000028du, 0x00000314u, 0x0004003du, 0x00000008u, 0x00000319u, 0x0000003fu, 0x000500c3u, 0x00000008u, 0x0000031bu, 0x00000319u, 0x00000314u, 0x00050082u, 0x00000008u, 0x0000031cu, 0x00000318u, 0x0000031bu, 0x000500c7u, 0x00000008u, 0x0000031du, 0x0000031cu, 0x00000295u, 0x0003003eu, 0x00000315u, 0x0000031du, 0x0004003du, 0x00000008u, 0x0000031fu, 0x00000044u, 0x00050084u, 0x00000008u, 0x00000320u, 0x0000031du, 0x0000031fu, 0x000500c3u, 0x00000008u, 0x00000321u, 0x00000320u, 0x000000bbu, 0x0007000cu, 0x00000008u, 0x00000322u, 0x00000001u, 0x00000027u, 0x00000321u, 0x000000d9u, 0x0003003eu, 0x00000044u, 0x00000322u, 0x0003003eu, 0x000002dbu, 0x000002b3u, 0x000200f9u, 0x00000306u, 0x000200f8u, 0x00000306u, 0x000700f5u, 0x0000002cu, 0x000018f4u, 0x0000030fu, 0x0000030au, 0x000002b3u, 0x00000310u, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002f0u, 0x000500a6u, 0x0000002cu, 0x00000326u, 0x000002e2u, 0x000002deu, 0x0003003eu, 0x000002dbu, 0x00000326u, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002f1u, 0x000500a7u, 0x0000002cu, 0x0000032au, 0x000002c9u, 0x000002ecu, 0x000400a8u, 0x0000002cu, 0x0000032cu, 0x000002deu, 0x000500a7u, 0x0000002cu, 0x0000032du, 0x0000032au, 0x0000032cu, 0x0003003eu, 0x000002dbu, 0x0000032du, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002f2u, 0x000d00f5u, 0x0000002cu, 0x000018f3u, 0x00000298u, 0x000002d2u, 0x000002fbu, 0x000002f6u, 0x000018f4u, 0x00000306u, 0x00000326u, 0x000002f0u, 0x0000032du, 0x000002f1u, 0x000200f9u, 0x00000289u, 0x000200f8u, 0x00000330u, 0x00050041u, 0x00000016u, 0x00000331u, 0x0000004cu, 0x000001b8u, 0x0003003eu, 0x00000331u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x00000332u, 0x00000041u, 0x00050082u, 0x00000008u, 0x00000333u, 0x00000295u, 0x00000332u, 0x0007000cu, 0x00000008u, 0x00000334u, 0x00000001u, 0x00000027u, 0x00000333u, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000335u, 0x0000004cu, 0x000001dau, 0x0003003eu, 0x00000335u, 0x00000334u, 0x0004003du, 0x00000008u, 0x00000337u, 0x00000044u, 0x0004003du, 0x00000008u, 0x00000338u, 0x00000045u, 0x00050080u, 0x00000008u, 0x00000339u, 0x00000337u, 0x00000338u, 0x000500afu, 0x0000002cu, 0x0000033au, 0x00000339u, 0x000000d9u, 0x0003003eu, 0x00000336u, 0x0000033au, 0x0004003du, 0x0000002cu, 0x0000033bu, 0x00000048u, 0x000400a8u, 0x0000002cu, 0x0000033cu, 0x0000033bu, 0x000300f7u, 0x0000033eu, 0x00000000u, 0x000400fau, 0x0000033cu, 0x0000033du, 0x0000033eu, 0x000200f8u, 0x0000033du, 0x000400a8u, 0x0000002cu, 0x00000340u, 0x0000033au, 0x0004003du, 0x0000002cu, 0x00000341u, 0x00000049u, 0x000500a7u, 0x0000002cu, 0x00000342u, 0x00000340u, 0x00000341u, 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x0000033eu, 0x000700f5u, 0x0000002cu, 0x00000343u, 0x0000033bu, 0x00000330u, 0x00000342u, 0x0000033du, 0x0003003eu, 0x0000004au, 0x00000343u, 0x0003003eu, 0x0000004bu, 0x0000033au, 0x0003003eu, 0x000002dbu, 0x000002b3u, 0x000200f9u, 0x00000289u, 0x000200f8u, 0x00000289u, 0x000700f5u, 0x0000002cu, 0x000018f2u, 0x000018f3u, 0x000002f2u, 0x000002b3u, 0x0000033eu, 0x000200feu, 0x000018f2u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000054u, 0x00000000u, 0x0000004fu, 0x00030037u, 0x00000016u, 0x00000050u, 0x00030037u, 0x00000016u, 0x00000051u, 0x00030037u, 0x0000002du, 0x00000052u, 0x00030037u, 0x00000016u, 0x00000053u, 0x000200f8u, 0x00000055u, 0x0004003bu, 0x00000016u, 0x00000348u, 0x00000007u, 0x0003003eu, 0x00000348u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x00000349u, 0x00000053u, 0x000300f7u, 0x0000034eu, 0x00000000u, 0x000b00fbu, 0x00000349u, 0x0000034eu, 0x00000000u, 0x0000034au, 0x00000001u, 0x0000034bu, 0x00000002u, 0x0000034cu, 0x00000003u, 0x0000034du, 0x000200f8u, 0x0000034au, 0x0004003du, 0x0000002cu, 0x0000034fu, 0x00000052u, 0x000300f7u, 0x00000351u, 0x00000000u, 0x000400fau, 0x0000034fu, 0x00000350u, 0x00000356u, 0x000200f8u, 0x00000350u, 0x0004003du, 0x00000008u, 0x00000352u, 0x00000051u, 0x0004003du, 0x00000008u, 0x00000353u, 0x00000050u, 0x00050080u, 0x00000008u, 0x00000354u, 0x00000352u, 0x00000353u, 0x0007000cu, 0x00000008u, 0x00000355u, 0x00000001u, 0x00000027u, 0x000000d3u, 0x00000354u, 0x0003003eu, 0x00000348u, 0x00000355u, 0x000200f9u, 0x00000351u, 0x000200f8u, 0x00000356u, 0x0004003du, 0x00000008u, 0x00000357u, 0x00000050u, 0x00050082u, 0x00000008u, 0x00000358u, 0x00000357u, 0x000000afu, 0x000500c7u, 0x00000008u, 0x00000359u, 0x00000358u, 0x000000d3u, 0x0003003eu, 0x00000348u, 0x00000359u, 0x000200f9u, 0x00000351u, 0x000200f8u, 0x00000351u, 0x000700f5u, 0x00000008u, 0x000018f6u, 0x00000355u, 0x00000350u, 0x00000359u, 0x00000356u, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034bu, 0x0004003du, 0x00000008u, 0x0000035bu, 0x00000050u, 0x0004003du, 0x00000008u, 0x0000035cu, 0x00000051u, 0x00050080u, 0x00000008u, 0x0000035du, 0x0000035bu, 0x0000035cu, 0x000500c7u, 0x00000008u, 0x0000035eu, 0x0000035du, 0x000000d3u, 0x0003003eu, 0x00000348u, 0x0000035eu, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034cu, 0x0003003eu, 0x00000348u, 0x000000d3u, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034du, 0x0004003du, 0x00000008u, 0x00000361u, 0x00000051u, 0x0003003eu, 0x00000348u, 0x00000361u, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034eu, 0x000d00f5u, 0x00000008u, 0x000018f5u, 0x0000009cu, 0x00000055u, 0x000018f6u, 0x00000351u, 0x0000035eu, 0x0000034bu, 0x000000d3u, 0x0000034cu, 0x00000361u, 0x0000034du, 0x000200feu, 0x000018f5u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000059u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000057u, 0x00030037u, 0x00000007u, 0x00000058u, 0x000200f8u, 0x0000005au, 0x0004003bu, 0x00000016u, 0x00000375u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000399u, 0x00000007u, 0x0004003bu, 0x000003a4u, 0x000003a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003e5u, 0x00000007u, 0x000300f7u, 0x0000036cu, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x0000036cu, 0x00000000u, 0x00000368u, 0x00000001u, 0x00000368u, 0x00000002u, 0x00000369u, 0x00000003u, 0x0000036au, 0x00000004u, 0x0000036bu, 0x000200f8u, 0x00000368u, 0x0004003du, 0x00000006u, 0x0000036fu, 0x00000057u, 0x000500c7u, 0x00000006u, 0x00000370u, 0x0000036fu, 0x0000036eu, 0x0003003eu, 0x00000057u, 0x00000370u, 0x0004003du, 0x00000006u, 0x00000371u, 0x00000058u, 0x00050084u, 0x00000006u, 0x00000372u, 0x00000371u, 0x0000036du, 0x0004003du, 0x00000006u, 0x00000373u, 0x00000057u, 0x00050080u, 0x00000006u, 0x00000374u, 0x00000373u, 0x00000372u, 0x0003003eu, 0x00000057u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000037au, 0x00000057u, 0x000500c6u, 0x00000006u, 0x0000037bu, 0x0000037au, 0x000001e0u, 0x00060041u, 0x000000f2u, 0x0000037cu, 0x00000379u, 0x0000009cu, 0x0000037bu, 0x0004003du, 0x0000009du, 0x0000037du, 0x0000037cu, 0x00040071u, 0x00000006u, 0x0000037eu, 0x0000037du, 0x0004007cu, 0x00000008u, 0x0000037fu, 0x0000037eu, 0x0003003eu, 0x00000375u, 0x0000037fu, 0x0004003du, 0x00000006u, 0x00000389u, 0x00000057u, 0x000500c2u, 0x00000006u, 0x0000038au, 0x00000389u, 0x000000afu, 0x00060041u, 0x000000f2u, 0x0000038bu, 0x00000388u, 0x0000009cu, 0x0000038au, 0x0004003du, 0x0000009du, 0x0000038cu, 0x0000038bu, 0x00040071u, 0x00000006u, 0x0000038du, 0x0000038cu, 0x0004007cu, 0x00000008u, 0x0000038eu, 0x0000038du, 0x00070050u, 0x00000009u, 0x0000038fu, 0x0000037fu, 0x0000037fu, 0x0000037fu, 0x0000038eu, 0x0003003eu, 0x00000381u, 0x0000038fu, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x00000369u, 0x0004003du, 0x00000006u, 0x00000392u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x00000393u, 0x00000392u, 0x00000391u, 0x0003003eu, 0x00000057u, 0x00000393u, 0x0004003du, 0x00000006u, 0x00000394u, 0x00000058u, 0x00050084u, 0x00000006u, 0x00000396u, 0x00000394u, 0x00000395u, 0x0004003du, 0x00000006u, 0x00000397u, 0x00000057u, 0x00050080u, 0x00000006u, 0x00000398u, 0x00000397u, 0x00000396u, 0x0003003eu, 0x00000057u, 0x00000398u, 0x0004003du, 0x00000006u, 0x0000039eu, 0x00000057u, 0x000500c6u, 0x00000006u, 0x0000039fu, 0x0000039eu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000003a0u, 0x0000039du, 0x0000009cu, 0x0000039fu, 0x0004003du, 0x0000009fu, 0x000003a1u, 0x000003a0u, 0x00040071u, 0x00000006u, 0x000003a2u, 0x000003a1u, 0x0003003eu, 0x00000399u, 0x000003a2u, 0x000500c2u, 0x00000006u, 0x000003a8u, 0x000003a2u, 0x000003a7u, 0x000500c2u, 0x00000006u, 0x000003aau, 0x000003a2u, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x000003acu, 0x000003a2u, 0x00000193u, 0x00060050u, 0x000003a3u, 0x000003adu, 0x000003a8u, 0x000003aau, 0x000003acu, 0x000500c7u, 0x000003a3u, 0x000003b0u, 0x000003adu, 0x0000192bu, 0x0003003eu, 0x000003a5u, 0x000003b0u, 0x0004007cu, 0x00000014u, 0x000003b2u, 0x000003b0u, 0x0004003du, 0x00000006u, 0x000003b3u, 0x00000057u, 0x00060041u, 0x000000f2u, 0x000003b4u, 0x00000388u, 0x0000009cu, 0x000003b3u, 0x0004003du, 0x0000009du, 0x000003b5u, 0x000003b4u, 0x00040071u, 0x00000006u, 0x000003b6u, 0x000003b5u, 0x0004007cu, 0x00000008u, 0x000003b7u, 0x000003b6u, 0x000500c4u, 0x00000008u, 0x000003b8u, 0x000003b7u, 0x000000c7u, 0x000500c7u, 0x00000006u, 0x000003bau, 0x000003a2u, 0x000001dau, 0x000500c4u, 0x00000006u, 0x000003bbu, 0x000003bau, 0x000000d3u, 0x0004007cu, 0x00000008u, 0x000003bcu, 0x000003bbu, 0x000500c5u, 0x00000008u, 0x000003bdu, 0x000003b8u, 0x000003bcu, 0x00050051u, 0x00000008u, 0x000003beu, 0x000003b2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003bfu, 0x000003b2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003c0u, 0x000003b2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000003c1u, 0x000003beu, 0x000003bfu, 0x000003c0u, 0x000003bdu, 0x0003003eu, 0x00000381u, 0x000003c1u, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036au, 0x0004003du, 0x00000006u, 0x000003c3u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x000003c4u, 0x000003c3u, 0x00000391u, 0x0003003eu, 0x00000057u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000003c5u, 0x00000058u, 0x00050084u, 0x00000006u, 0x000003c7u, 0x000003c5u, 0x000003c6u, 0x0004003du, 0x00000006u, 0x000003c8u, 0x00000057u, 0x00050080u, 0x00000006u, 0x000003c9u, 0x000003c8u, 0x000003c7u, 0x0003003eu, 0x00000057u, 0x000003c9u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x00000057u, 0x000500c6u, 0x00000006u, 0x000003ccu, 0x000003cbu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000003cdu, 0x0000039du, 0x0000009cu, 0x000003ccu, 0x0004003du, 0x0000009fu, 0x000003ceu, 0x000003cdu, 0x00040071u, 0x00000006u, 0x000003cfu, 0x000003ceu, 0x0003003eu, 0x000003cau, 0x000003cfu, 0x000500c2u, 0x00000006u, 0x000003d1u, 0x000003cfu, 0x000003a7u, 0x0004007cu, 0x00000008u, 0x000003d2u, 0x000003d1u, 0x00060050u, 0x00000014u, 0x000003d3u, 0x000003d2u, 0x000003d2u, 0x000003d2u, 0x000500c7u, 0x00000006u, 0x000003d6u, 0x000003cfu, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x000003d7u, 0x000003d6u, 0x00070050u, 0x00000009u, 0x000003dbu, 0x000003d2u, 0x000003d2u, 0x000003d2u, 0x000003d7u, 0x0003003eu, 0x00000381u, 0x000003dbu, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036bu, 0x0004003du, 0x00000006u, 0x000003deu, 0x00000057u, 0x000500c7u, 0x00000006u, 0x000003dfu, 0x000003deu, 0x000003ddu, 0x0003003eu, 0x00000057u, 0x000003dfu, 0x0004003du, 0x00000006u, 0x000003e0u, 0x00000058u, 0x00050084u, 0x00000006u, 0x000003e2u, 0x000003e0u, 0x000003e1u, 0x0004003du, 0x00000006u, 0x000003e3u, 0x00000057u, 0x00050080u, 0x00000006u, 0x000003e4u, 0x000003e3u, 0x000003e2u, 0x0003003eu, 0x00000057u, 0x000003e4u, 0x0004003du, 0x00000006u, 0x000003eau, 0x00000057u, 0x00060041u, 0x000000e6u, 0x000003ebu, 0x000003e9u, 0x0000009cu, 0x000003eau, 0x0004003du, 0x00000006u, 0x000003ecu, 0x000003ebu, 0x0003003eu, 0x000003e5u, 0x000003ecu, 0x00070050u, 0x000000abu, 0x000003eeu, 0x000003ecu, 0x000003ecu, 0x000003ecu, 0x000003ecu, 0x000500c2u, 0x000000abu, 0x000003f2u, 0x000003eeu, 0x000003f1u, 0x000500c7u, 0x000000abu, 0x000003f4u, 0x000003f2u, 0x000003f3u, 0x0004007cu, 0x00000009u, 0x000003f5u, 0x000003f4u, 0x0003003eu, 0x00000381u, 0x000003f5u, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000005bu, 0x00000000u, 0x00000003u, 0x000200f8u, 0x0000005cu, 0x0004003bu, 0x00000007u, 0x00000403u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000041du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000421u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000428u, 0x00000007u, 0x000300f7u, 0x000003fau, 0x00000000u, 0x000700fbu, 0x00000367u, 0x000003fau, 0x00000002u, 0x000003f8u, 0x00000003u, 0x000003f9u, 0x000200f8u, 0x000003f8u, 0x00050041u, 0x0000009au, 0x000003fcu, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000003fdu, 0x000003fcu, 0x000500c3u, 0x00000008u, 0x000003feu, 0x000003fdu, 0x000000bbu, 0x00050041u, 0x0000009au, 0x000003ffu, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000400u, 0x000003ffu, 0x000500c7u, 0x00000008u, 0x00000401u, 0x00000400u, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000402u, 0x000003feu, 0x00000401u, 0x0003003eu, 0x000003fbu, 0x00000402u, 0x00050041u, 0x0000009au, 0x00000404u, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000405u, 0x00000404u, 0x0004007cu, 0x00000006u, 0x00000406u, 0x00000405u, 0x000500c7u, 0x00000006u, 0x00000407u, 0x00000406u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000409u, 0x00000407u, 0x00000408u, 0x0003003eu, 0x00000403u, 0x00000409u, 0x00050041u, 0x0000009au, 0x0000040au, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x0000040bu, 0x0000040au, 0x0004007cu, 0x00000006u, 0x0000040cu, 0x0000040bu, 0x000500c7u, 0x00000006u, 0x0000040du, 0x0000040cu, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x0000040eu, 0x0000040du, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000410u, 0x00000409u, 0x0000040eu, 0x0003003eu, 0x00000403u, 0x00000410u, 0x0004003du, 0x00000008u, 0x00000412u, 0x000003ffu, 0x0004007cu, 0x00000006u, 0x00000413u, 0x00000412u, 0x000500c7u, 0x00000006u, 0x00000414u, 0x00000413u, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000416u, 0x00000414u, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000418u, 0x00000410u, 0x00000416u, 0x0003003eu, 0x00000403u, 0x00000418u, 0x0004007cu, 0x00000008u, 0x0000041bu, 0x00000418u, 0x0003003eu, 0x00000419u, 0x0000041bu, 0x000200f9u, 0x000003fau, 0x000200f8u, 0x000003f9u, 0x0004003du, 0x00000009u, 0x0000041eu, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x0000041fu, 0x0000041eu, 0x0000041eu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000420u, 0x0000041fu, 0x0003003eu, 0x0000041du, 0x00000420u, 0x00050041u, 0x00000007u, 0x00000422u, 0x0000041du, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000423u, 0x00000422u, 0x000500c4u, 0x00000006u, 0x00000424u, 0x00000423u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000425u, 0x0000041du, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000426u, 0x00000425u, 0x000500c5u, 0x00000006u, 0x00000427u, 0x00000424u, 0x00000426u, 0x0003003eu, 0x00000421u, 0x00000427u, 0x000500c7u, 0x00000006u, 0x0000042au, 0x00000427u, 0x000001dau, 0x00050084u, 0x00000006u, 0x0000042bu, 0x0000042au, 0x000001e0u, 0x0003003eu, 0x00000428u, 0x0000042bu, 0x000500c2u, 0x00000006u, 0x0000042du, 0x00000427u, 0x00000193u, 0x0004007cu, 0x00000008u, 0x0000042eu, 0x0000042du, 0x0003003eu, 0x00000419u, 0x0000042eu, 0x000500c7u, 0x00000006u, 0x00000430u, 0x00000427u, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000431u, 0x00000430u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000433u, 0x00000431u, 0x0000042bu, 0x0004007cu, 0x00000008u, 0x00000434u, 0x00000433u, 0x0003003eu, 0x000003fbu, 0x00000434u, 0x000200f9u, 0x000003fau, 0x000200f8u, 0x000003fau, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000005du, 0x00000000u, 0x00000003u, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x00000007u, 0x00000437u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000438u, 0x00000419u, 0x0004007cu, 0x00000006u, 0x00000439u, 0x00000438u, 0x000500c4u, 0x00000006u, 0x0000043au, 0x00000439u, 0x00000415u, 0x0004003du, 0x00000008u, 0x0000043bu, 0x000003fbu, 0x0004007cu, 0x00000006u, 0x0000043cu, 0x0000043bu, 0x000500c5u, 0x00000006u, 0x0000043du, 0x0000043au, 0x0000043cu, 0x0003003eu, 0x00000437u, 0x0000043du, 0x000300f7u, 0x00000440u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000440u, 0x00000002u, 0x0000043eu, 0x00000003u, 0x0000043fu, 0x000200f8u, 0x0000043eu, 0x000500c2u, 0x00000006u, 0x00000443u, 0x0000043du, 0x00000442u, 0x000500c7u, 0x00000006u, 0x00000444u, 0x00000443u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000445u, 0x00000444u, 0x00050041u, 0x0000009au, 0x00000446u, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x00000446u, 0x00000445u, 0x000500c2u, 0x00000006u, 0x00000449u, 0x0000043du, 0x00000448u, 0x000500c7u, 0x00000006u, 0x0000044au, 0x00000449u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x0000044bu, 0x0000044au, 0x00050041u, 0x0000009au, 0x0000044cu, 0x00000381u, 0x000001dau, 0x0003003eu, 0x0000044cu, 0x0000044bu, 0x000500c2u, 0x00000006u, 0x0000044eu, 0x0000043du, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x0000044fu, 0x0000044eu, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000450u, 0x0000044fu, 0x00050041u, 0x0000009au, 0x00000451u, 0x00000381u, 0x00000193u, 0x0003003eu, 0x00000451u, 0x00000450u, 0x000500c7u, 0x00000006u, 0x00000454u, 0x0000043du, 0x00000453u, 0x000500c4u, 0x00000006u, 0x00000455u, 0x00000454u, 0x00000448u, 0x0004007cu, 0x00000008u, 0x00000456u, 0x00000455u, 0x00050041u, 0x0000009au, 0x00000457u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000457u, 0x00000456u, 0x000200f9u, 0x00000440u, 0x000200f8u, 0x0000043fu, 0x000500c2u, 0x00000006u, 0x0000045au, 0x0000043du, 0x00000442u, 0x000500c7u, 0x00000006u, 0x0000045bu, 0x0000045au, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x0000045cu, 0x0000045bu, 0x00050041u, 0x0000009au, 0x0000045du, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x0000045du, 0x0000045cu, 0x000500c2u, 0x00000006u, 0x0000045fu, 0x0000043du, 0x00000193u, 0x000500c7u, 0x00000006u, 0x00000460u, 0x0000045fu, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x00000461u, 0x00000460u, 0x00050041u, 0x0000009au, 0x00000462u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000462u, 0x00000461u, 0x000200f9u, 0x00000440u, 0x000200f8u, 0x00000440u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000061u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000060u, 0x000200f8u, 0x00000062u, 0x0004003bu, 0x00000016u, 0x0000046eu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000467u, 0x0000005fu, 0x000500c7u, 0x00000006u, 0x00000468u, 0x00000467u, 0x00000391u, 0x0003003eu, 0x0000005fu, 0x00000468u, 0x0004003du, 0x00000006u, 0x00000469u, 0x00000060u, 0x00050084u, 0x00000006u, 0x0000046bu, 0x00000469u, 0x0000046au, 0x0004003du, 0x00000006u, 0x0000046cu, 0x0000005fu, 0x00050080u, 0x00000006u, 0x0000046du, 0x0000046cu, 0x0000046bu, 0x0003003eu, 0x0000005fu, 0x0000046du, 0x0004003du, 0x00000006u, 0x0000046fu, 0x0000005fu, 0x000500c6u, 0x00000006u, 0x00000470u, 0x0000046fu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x00000471u, 0x0000039du, 0x0000009cu, 0x00000470u, 0x0004003du, 0x0000009fu, 0x00000472u, 0x00000471u, 0x00040071u, 0x00000006u, 0x00000473u, 0x00000472u, 0x0004007cu, 0x00000008u, 0x00000474u, 0x00000473u, 0x0003003eu, 0x0000046eu, 0x00000474u, 0x000500c3u, 0x00000008u, 0x00000476u, 0x00000474u, 0x000000b5u, 0x0003003eu, 0x00000419u, 0x00000476u, 0x0004003du, 0x00000006u, 0x00000477u, 0x0000005fu, 0x00060041u, 0x000000f2u, 0x00000478u, 0x00000388u, 0x0000009cu, 0x00000477u, 0x0004003du, 0x0000009du, 0x00000479u, 0x00000478u, 0x00040071u, 0x00000006u, 0x0000047au, 0x00000479u, 0x0004007cu, 0x00000008u, 0x0000047bu, 0x0000047au, 0x000500c7u, 0x00000008u, 0x0000047du, 0x00000474u, 0x000000bbu, 0x000500c4u, 0x00000008u, 0x0000047eu, 0x0000047du, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x0000047fu, 0x0000047bu, 0x0000047eu, 0x0003003eu, 0x000003fbu, 0x0000047fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000065u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000063u, 0x00030037u, 0x00000007u, 0x00000064u, 0x000200f8u, 0x00000066u, 0x0004003bu, 0x000004d5u, 0x000004d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004e3u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000050du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000511u, 0x00000007u, 0x0004003bu, 0x000004d5u, 0x00000534u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000537u, 0x00000007u, 0x0004003du, 0x0000002cu, 0x00000480u, 0x00000466u, 0x000300f7u, 0x00000482u, 0x00000000u, 0x000400fau, 0x00000480u, 0x00000481u, 0x00000482u, 0x000200f8u, 0x00000481u, 0x000300f7u, 0x00000488u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000488u, 0x00000000u, 0x00000483u, 0x00000001u, 0x00000484u, 0x00000002u, 0x00000485u, 0x00000003u, 0x00000486u, 0x00000004u, 0x00000487u, 0x000200f8u, 0x00000483u, 0x0004003du, 0x00000006u, 0x00000489u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x0000048au, 0x00000489u, 0x0000036eu, 0x0003003eu, 0x00000063u, 0x0000048au, 0x0004003du, 0x00000006u, 0x0000048bu, 0x00000064u, 0x00050084u, 0x00000006u, 0x0000048cu, 0x0000048bu, 0x0000036du, 0x0004003du, 0x00000006u, 0x0000048du, 0x00000063u, 0x00050080u, 0x00000006u, 0x0000048eu, 0x0000048du, 0x0000048cu, 0x0003003eu, 0x00000063u, 0x0000048eu, 0x0004003du, 0x00000006u, 0x0000048fu, 0x00000063u, 0x000500c6u, 0x00000006u, 0x00000490u, 0x0000048fu, 0x000001e0u, 0x00040071u, 0x0000009du, 0x00000491u, 0x000001b8u, 0x00060041u, 0x000000f2u, 0x00000492u, 0x00000379u, 0x0000009cu, 0x00000490u, 0x0003003eu, 0x00000492u, 0x00000491u, 0x0004003du, 0x00000006u, 0x00000493u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x00000494u, 0x00000493u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00000495u, 0x00000494u, 0x000001b8u, 0x000300f7u, 0x00000497u, 0x00000000u, 0x000400fau, 0x00000495u, 0x00000496u, 0x00000497u, 0x000200f8u, 0x00000496u, 0x0004003du, 0x00000006u, 0x00000498u, 0x00000063u, 0x000500c2u, 0x00000006u, 0x00000499u, 0x00000498u, 0x000001dau, 0x00050041u, 0x0000009au, 0x0000049au, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x0000049bu, 0x0000049au, 0x00040071u, 0x0000009du, 0x0000049cu, 0x0000049bu, 0x00060041u, 0x000000f2u, 0x0000049du, 0x00000388u, 0x0000009cu, 0x00000499u, 0x0003003eu, 0x0000049du, 0x0000049cu, 0x000200f9u, 0x00000497u, 0x000200f8u, 0x00000497u, 0x000300f7u, 0x000004a5u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000004a4u, 0x000004a5u, 0x000200f8u, 0x000004a4u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x000004a7u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004a8u, 0x000004a7u, 0x000001e0u, 0x00050080u, 0x00000006u, 0x000004a9u, 0x000004a8u, 0x0000036du, 0x00040071u, 0x0000009du, 0x000004aau, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x000004abu, 0x00000379u, 0x0000009cu, 0x000004a9u, 0x0003003eu, 0x000004abu, 0x000004aau, 0x000200f9u, 0x000004a5u, 0x000200f8u, 0x000004a5u, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000484u, 0x0004003du, 0x00000006u, 0x000004adu, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004aeu, 0x000004adu, 0x0000036eu, 0x0003003eu, 0x00000063u, 0x000004aeu, 0x0004003du, 0x00000006u, 0x000004afu, 0x00000064u, 0x00050084u, 0x00000006u, 0x000004b0u, 0x000004afu, 0x0000036du, 0x0004003du, 0x00000006u, 0x000004b1u, 0x00000063u, 0x00050080u, 0x00000006u, 0x000004b2u, 0x000004b1u, 0x000004b0u, 0x0003003eu, 0x00000063u, 0x000004b2u, 0x0004003du, 0x00000006u, 0x000004b3u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004b4u, 0x000004b3u, 0x000001e0u, 0x00050041u, 0x0000009au, 0x000004b5u, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x000004b6u, 0x000004b5u, 0x00040071u, 0x0000009du, 0x000004b7u, 0x000004b6u, 0x00060041u, 0x000000f2u, 0x000004b8u, 0x00000379u, 0x0000009cu, 0x000004b4u, 0x0003003eu, 0x000004b8u, 0x000004b7u, 0x0004003du, 0x00000006u, 0x000004b9u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004bau, 0x000004b9u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x000004bbu, 0x000004bau, 0x000001b8u, 0x000300f7u, 0x000004bdu, 0x00000000u, 0x000400fau, 0x000004bbu, 0x000004bcu, 0x000004bdu, 0x000200f8u, 0x000004bcu, 0x0004003du, 0x00000006u, 0x000004beu, 0x00000063u, 0x000500c2u, 0x00000006u, 0x000004bfu, 0x000004beu, 0x000001dau, 0x0004003du, 0x00000008u, 0x000004c1u, 0x000004b5u, 0x000500c7u, 0x00000008u, 0x000004c2u, 0x000004c1u, 0x000000afu, 0x00050084u, 0x00000008u, 0x000004c3u, 0x000004c2u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000004c4u, 0x000004c3u, 0x00060041u, 0x000000f2u, 0x000004c5u, 0x00000388u, 0x0000009cu, 0x000004bfu, 0x0003003eu, 0x000004c5u, 0x000004c4u, 0x000200f9u, 0x000004bdu, 0x000200f8u, 0x000004bdu, 0x000300f7u, 0x000004c7u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000004c6u, 0x000004c7u, 0x000200f8u, 0x000004c6u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x000004c8u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004c9u, 0x000004c8u, 0x000001e0u, 0x00050080u, 0x00000006u, 0x000004cau, 0x000004c9u, 0x0000036du, 0x00040071u, 0x0000009du, 0x000004cbu, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x000004ccu, 0x00000379u, 0x0000009cu, 0x000004cau, 0x0003003eu, 0x000004ccu, 0x000004cbu, 0x000200f9u, 0x000004c7u, 0x000200f8u, 0x000004c7u, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000004ceu, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004cfu, 0x000004ceu, 0x00000391u, 0x0003003eu, 0x00000063u, 0x000004cfu, 0x0004003du, 0x00000006u, 0x000004d0u, 0x00000064u, 0x00050084u, 0x00000006u, 0x000004d2u, 0x000004d0u, 0x000004d1u, 0x0004003du, 0x00000006u, 0x000004d3u, 0x00000063u, 0x00050080u, 0x00000006u, 0x000004d4u, 0x000004d3u, 0x000004d2u, 0x0003003eu, 0x00000063u, 0x000004d4u, 0x0004003du, 0x00000009u, 0x000004d7u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x000004d8u, 0x000004d7u, 0x0003003eu, 0x000004d6u, 0x000004d8u, 0x0004003du, 0x000000abu, 0x000004d9u, 0x000004d6u, 0x0008004fu, 0x000003a3u, 0x000004dau, 0x000004d9u, 0x000004d9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003a3u, 0x000004dcu, 0x000004dau, 0x0000192bu, 0x0004003du, 0x000000abu, 0x000004ddu, 0x000004d6u, 0x0009004fu, 0x000000abu, 0x000004deu, 0x000004ddu, 0x000004dcu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000004d6u, 0x000004deu, 0x00050041u, 0x00000007u, 0x000004e0u, 0x000004d6u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000004e1u, 0x000004e0u, 0x000500c2u, 0x00000006u, 0x000004e2u, 0x000004e1u, 0x00000448u, 0x0003003eu, 0x000004dfu, 0x000004e2u, 0x00050041u, 0x00000007u, 0x000004e4u, 0x000004d6u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000004e5u, 0x000004e4u, 0x000500c4u, 0x00000006u, 0x000004e6u, 0x000004e5u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x000004e7u, 0x000004d6u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000004e8u, 0x000004e7u, 0x000500c4u, 0x00000006u, 0x000004e9u, 0x000004e8u, 0x000001e0u, 0x000500c5u, 0x00000006u, 0x000004eau, 0x000004e6u, 0x000004e9u, 0x00050041u, 0x00000007u, 0x000004ebu, 0x000004d6u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000004ecu, 0x000004ebu, 0x000500c2u, 0x00000006u, 0x000004edu, 0x000004ecu, 0x00000193u, 0x000500c5u, 0x00000006u, 0x000004eeu, 0x000004eau, 0x000004edu, 0x000500c2u, 0x00000006u, 0x000004f0u, 0x000004e2u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x000004f1u, 0x000004eeu, 0x000004f0u, 0x0003003eu, 0x000004e3u, 0x000004f1u, 0x0004003du, 0x00000006u, 0x000004f2u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004f3u, 0x000004f2u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x000004f5u, 0x000004f1u, 0x00060041u, 0x000000ebu, 0x000004f6u, 0x0000039du, 0x0000009cu, 0x000004f3u, 0x0003003eu, 0x000004f6u, 0x000004f5u, 0x0004003du, 0x00000006u, 0x000004f7u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004f9u, 0x000004e2u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x000004fau, 0x000004f9u, 0x00060041u, 0x000000f2u, 0x000004fbu, 0x00000388u, 0x0000009cu, 0x000004f7u, 0x0003003eu, 0x000004fbu, 0x000004fau, 0x000300f7u, 0x000004fdu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000004fcu, 0x000004fdu, 0x000200f8u, 0x000004fcu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x000004feu, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004ffu, 0x000004feu, 0x000001dau, 0x00050080u, 0x00000006u, 0x00000501u, 0x000004ffu, 0x00000500u, 0x00040071u, 0x0000009fu, 0x00000503u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x00000504u, 0x0000039du, 0x0000009cu, 0x00000501u, 0x0003003eu, 0x00000504u, 0x00000503u, 0x000200f9u, 0x000004fdu, 0x000200f8u, 0x000004fdu, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000486u, 0x0004003du, 0x00000006u, 0x00000506u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x00000507u, 0x00000506u, 0x00000391u, 0x0003003eu, 0x00000063u, 0x00000507u, 0x0004003du, 0x00000006u, 0x00000508u, 0x00000064u, 0x00050084u, 0x00000006u, 0x0000050au, 0x00000508u, 0x00000509u, 0x0004003du, 0x00000006u, 0x0000050bu, 0x00000063u, 0x00050080u, 0x00000006u, 0x0000050cu, 0x0000050bu, 0x0000050au, 0x0003003eu, 0x00000063u, 0x0000050cu, 0x0004003du, 0x00000009u, 0x0000050eu, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x0000050fu, 0x0000050eu, 0x0000050eu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000510u, 0x0000050fu, 0x0003003eu, 0x0000050du, 0x00000510u, 0x00050041u, 0x00000007u, 0x00000512u, 0x0000050du, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000513u, 0x00000512u, 0x000500c4u, 0x00000006u, 0x00000514u, 0x00000513u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000515u, 0x0000050du, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000516u, 0x00000515u, 0x000500c5u, 0x00000006u, 0x00000517u, 0x00000514u, 0x00000516u, 0x0003003eu, 0x00000511u, 0x00000517u, 0x0004003du, 0x00000006u, 0x00000518u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x00000519u, 0x00000518u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x0000051bu, 0x00000517u, 0x00060041u, 0x000000ebu, 0x0000051cu, 0x0000039du, 0x0000009cu, 0x00000519u, 0x0003003eu, 0x0000051cu, 0x0000051bu, 0x0004003du, 0x00000006u, 0x0000051du, 0x00000063u, 0x0004003du, 0x00000006u, 0x0000051fu, 0x00000515u, 0x000500c7u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000521u, 0x00000520u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x00000522u, 0x00000521u, 0x00060041u, 0x000000f2u, 0x00000523u, 0x00000388u, 0x0000009cu, 0x0000051du, 0x0003003eu, 0x00000523u, 0x00000522u, 0x000300f7u, 0x00000525u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x00000524u, 0x00000525u, 0x000200f8u, 0x00000524u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x00000526u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x00000527u, 0x00000526u, 0x000001dau, 0x00050080u, 0x00000006u, 0x00000529u, 0x00000527u, 0x00000528u, 0x00040071u, 0x0000009fu, 0x0000052au, 0x00000502u, 0x00060041u, 0x000000ebu, 0x0000052bu, 0x0000039du, 0x0000009cu, 0x00000529u, 0x0003003eu, 0x0000052bu, 0x0000052au, 0x000200f9u, 0x00000525u, 0x000200f8u, 0x00000525u, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000487u, 0x0004003du, 0x00000006u, 0x0000052du, 0x00000063u, 0x000500c7u, 0x00000006u, 0x0000052eu, 0x0000052du, 0x000003ddu, 0x0003003eu, 0x00000063u, 0x0000052eu, 0x0004003du, 0x00000006u, 0x0000052fu, 0x00000064u, 0x00050084u, 0x00000006u, 0x00000531u, 0x0000052fu, 0x00000530u, 0x0004003du, 0x00000006u, 0x00000532u, 0x00000063u, 0x00050080u, 0x00000006u, 0x00000533u, 0x00000532u, 0x00000531u, 0x0003003eu, 0x00000063u, 0x00000533u, 0x0004003du, 0x00000009u, 0x00000535u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x00000536u, 0x00000535u, 0x0003003eu, 0x00000534u, 0x00000536u, 0x00050041u, 0x00000007u, 0x00000538u, 0x00000534u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000539u, 0x00000538u, 0x000500c4u, 0x00000006u, 0x0000053au, 0x00000539u, 0x000003efu, 0x00050041u, 0x00000007u, 0x0000053bu, 0x00000534u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000053cu, 0x0000053bu, 0x000500c4u, 0x00000006u, 0x0000053du, 0x0000053cu, 0x000003f0u, 0x000500c5u, 0x00000006u, 0x0000053eu, 0x0000053au, 0x0000053du, 0x00050041u, 0x00000007u, 0x0000053fu, 0x00000534u, 0x00000193u, 0x0004003du, 0x00000006u, 0x00000540u, 0x0000053fu, 0x000500c4u, 0x00000006u, 0x00000541u, 0x00000540u, 0x000003a7u, 0x000500c5u, 0x00000006u, 0x00000542u, 0x0000053eu, 0x00000541u, 0x00050041u, 0x00000007u, 0x00000543u, 0x00000534u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x00000544u, 0x00000543u, 0x000500c4u, 0x00000006u, 0x00000545u, 0x00000544u, 0x000001b8u, 0x000500c5u, 0x00000006u, 0x00000546u, 0x00000542u, 0x00000545u, 0x0003003eu, 0x00000537u, 0x00000546u, 0x0004003du, 0x00000006u, 0x00000547u, 0x00000063u, 0x00060041u, 0x000000e6u, 0x00000549u, 0x000003e9u, 0x0000009cu, 0x00000547u, 0x0003003eu, 0x00000549u, 0x00000546u, 0x0004003du, 0x00000006u, 0x0000054au, 0x00000063u, 0x00050084u, 0x00000006u, 0x0000054bu, 0x00000193u, 0x0000054au, 0x00050041u, 0x0000009au, 0x0000054cu, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x0000054du, 0x0000054cu, 0x000500c7u, 0x00000008u, 0x0000054eu, 0x0000054du, 0x000000afu, 0x00050084u, 0x00000008u, 0x0000054fu, 0x0000054eu, 0x000000bbu, 0x00040071u, 0x0000009du, 0x00000550u, 0x0000054fu, 0x00060041u, 0x000000f2u, 0x00000551u, 0x00000388u, 0x0000009cu, 0x0000054bu, 0x0003003eu, 0x00000551u, 0x00000550u, 0x0004003du, 0x00000006u, 0x00000552u, 0x00000063u, 0x00050084u, 0x00000006u, 0x00000553u, 0x00000193u, 0x00000552u, 0x00050080u, 0x00000006u, 0x00000554u, 0x00000553u, 0x000001dau, 0x00050041u, 0x0000009au, 0x00000555u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000556u, 0x00000555u, 0x000500c7u, 0x00000008u, 0x00000557u, 0x00000556u, 0x000000afu, 0x00050084u, 0x00000008u, 0x00000558u, 0x00000557u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x00000559u, 0x00000558u, 0x00060041u, 0x000000f2u, 0x0000055au, 0x00000388u, 0x0000009cu, 0x00000554u, 0x0003003eu, 0x0000055au, 0x00000559u, 0x000300f7u, 0x0000055cu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000055bu, 0x0000055cu, 0x000200f8u, 0x0000055bu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x0000055du, 0x00000063u, 0x00050080u, 0x00000006u, 0x0000055fu, 0x0000055du, 0x0000055eu, 0x00060041u, 0x000000e6u, 0x00000561u, 0x000003e9u, 0x0000009cu, 0x0000055fu, 0x0003003eu, 0x00000561u, 0x00000560u, 0x000200f9u, 0x0000055cu, 0x000200f8u, 0x0000055cu, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000488u, 0x000200f9u, 0x00000482u, 0x000200f8u, 0x00000482u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000069u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000067u, 0x00030037u, 0x00000007u, 0x00000068u, 0x000200f8u, 0x0000006au, 0x000300f7u, 0x00000567u, 0x00000000u, 0x000400fau, 0x00000565u, 0x00000566u, 0x00000567u, 0x000200f8u, 0x00000566u, 0x0004003du, 0x0000002cu, 0x00000569u, 0x00000568u, 0x000300f7u, 0x0000056bu, 0x00000000u, 0x000400fau, 0x00000569u, 0x0000056au, 0x0000056bu, 0x000200f8u, 0x0000056au, 0x0004003du, 0x00000006u, 0x0000056cu, 0x00000067u, 0x000500c7u, 0x00000006u, 0x0000056du, 0x0000056cu, 0x00000391u, 0x0003003eu, 0x00000067u, 0x0000056du, 0x0004003du, 0x00000006u, 0x0000056eu, 0x00000068u, 0x00050084u, 0x00000006u, 0x00000570u, 0x0000056eu, 0x0000056fu, 0x0004003du, 0x00000006u, 0x00000571u, 0x00000067u, 0x00050080u, 0x00000006u, 0x00000572u, 0x00000571u, 0x00000570u, 0x0003003eu, 0x00000067u, 0x00000572u, 0x0004003du, 0x00000006u, 0x00000573u, 0x00000067u, 0x000500c6u, 0x00000006u, 0x00000574u, 0x00000573u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000575u, 0x00000419u, 0x000500c4u, 0x00000008u, 0x00000576u, 0x00000575u, 0x000000b5u, 0x0004003du, 0x00000008u, 0x00000577u, 0x000003fbu, 0x000500c3u, 0x00000008u, 0x00000578u, 0x00000577u, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x00000579u, 0x00000576u, 0x00000578u, 0x00040071u, 0x0000009fu, 0x0000057au, 0x00000579u, 0x00060041u, 0x000000ebu, 0x0000057bu, 0x0000039du, 0x0000009cu, 0x00000574u, 0x0003003eu, 0x0000057bu, 0x0000057au, 0x0004003du, 0x00000006u, 0x0000057cu, 0x00000067u, 0x0004003du, 0x00000008u, 0x0000057du, 0x000003fbu, 0x000500c7u, 0x00000008u, 0x0000057eu, 0x0000057du, 0x000000bbu, 0x00040071u, 0x0000009du, 0x0000057fu, 0x0000057eu, 0x00060041u, 0x000000f2u, 0x00000580u, 0x00000388u, 0x0000009cu, 0x0000057cu, 0x0003003eu, 0x00000580u, 0x0000057fu, 0x000300f7u, 0x00000582u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x00000581u, 0x00000582u, 0x000200f8u, 0x00000581u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x00000583u, 0x00000067u, 0x000500c6u, 0x00000006u, 0x00000584u, 0x00000583u, 0x000001dau, 0x00050080u, 0x00000006u, 0x00000586u, 0x00000584u, 0x00000585u, 0x00040071u, 0x0000009fu, 0x00000587u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x00000588u, 0x0000039du, 0x0000009cu, 0x00000586u, 0x0003003eu, 0x00000588u, 0x00000587u, 0x000200f9u, 0x00000582u, 0x000200f8u, 0x00000582u, 0x000200f9u, 0x0000056bu, 0x000200f8u, 0x0000056bu, 0x000200f9u, 0x00000567u, 0x000200f8u, 0x00000567u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000073u, 0x00000000u, 0x0000006du, 0x00030037u, 0x0000006cu, 0x0000006eu, 0x00030037u, 0x00000007u, 0x0000006fu, 0x00030037u, 0x00000007u, 0x00000070u, 0x00030037u, 0x00000007u, 0x00000071u, 0x00030037u, 0x00000007u, 0x00000072u, 0x000200f8u, 0x00000074u, 0x0004003bu, 0x0000006cu, 0x00000592u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005c3u, 0x00000007u, 0x0003003eu, 0x00000466u, 0x00000298u, 0x0003003eu, 0x00000568u, 0x00000298u, 0x0004003du, 0x0000006bu, 0x00000589u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x0000058au, 0x0000006fu, 0x0004003du, 0x00000006u, 0x0000058bu, 0x00000070u, 0x00050050u, 0x0000006bu, 0x0000058cu, 0x0000058au, 0x0000058bu, 0x000500b0u, 0x0000058du, 0x0000058eu, 0x00000589u, 0x0000058cu, 0x0004009bu, 0x0000002cu, 0x0000058fu, 0x0000058eu, 0x000300f7u, 0x00000591u, 0x00000000u, 0x000400fau, 0x0000058fu, 0x00000590u, 0x00000591u, 0x000200f8u, 0x00000590u, 0x0004003du, 0x0000006bu, 0x00000593u, 0x0000006eu, 0x00050050u, 0x0000006bu, 0x00000597u, 0x00000596u, 0x00000596u, 0x000500c7u, 0x0000006bu, 0x00000598u, 0x00000593u, 0x00000597u, 0x0003003eu, 0x00000592u, 0x00000598u, 0x0004003du, 0x0000006bu, 0x00000599u, 0x0000006eu, 0x00050050u, 0x0000002eu, 0x0000059au, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x0000059bu, 0x00000599u, 0x0000059au, 0x0003003eu, 0x0000006eu, 0x0000059bu, 0x00050041u, 0x00000007u, 0x0000059du, 0x00000592u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000059eu, 0x0000059du, 0x00050084u, 0x00000006u, 0x000005a0u, 0x0000059eu, 0x0000059fu, 0x00050041u, 0x00000007u, 0x000005a1u, 0x00000592u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005a2u, 0x000005a1u, 0x00050080u, 0x00000006u, 0x000005a3u, 0x000005a0u, 0x000005a2u, 0x0003003eu, 0x0000059cu, 0x000005a3u, 0x0004003du, 0x00000006u, 0x000005a5u, 0x00000071u, 0x0004003du, 0x00000006u, 0x000005a6u, 0x0000006fu, 0x000500c2u, 0x00000006u, 0x000005a7u, 0x000005a6u, 0x000004a1u, 0x00050041u, 0x00000007u, 0x000005a8u, 0x0000006eu, 0x000001dau, 0x0004003du, 0x00000006u, 0x000005a9u, 0x000005a8u, 0x00050084u, 0x00000006u, 0x000005aau, 0x000005a7u, 0x000005a9u, 0x00050080u, 0x00000006u, 0x000005abu, 0x000005a5u, 0x000005aau, 0x00050041u, 0x00000007u, 0x000005acu, 0x0000006eu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005adu, 0x000005acu, 0x00050080u, 0x00000006u, 0x000005aeu, 0x000005abu, 0x000005adu, 0x0003003eu, 0x000005a4u, 0x000005aeu, 0x0003003eu, 0x000005b0u, 0x000005aeu, 0x0003003eu, 0x000005b2u, 0x000005aeu, 0x0003003eu, 0x000005b4u, 0x000005a3u, 0x00060039u, 0x00000002u, 0x000005b6u, 0x00000059u, 0x000005b2u, 0x000005b4u, 0x0004003du, 0x00000006u, 0x000005b7u, 0x00000072u, 0x0004003du, 0x00000006u, 0x000005b8u, 0x0000006fu, 0x000500c2u, 0x00000006u, 0x000005b9u, 0x000005b8u, 0x000004a1u, 0x0004003du, 0x00000006u, 0x000005bbu, 0x000005a8u, 0x00050084u, 0x00000006u, 0x000005bcu, 0x000005b9u, 0x000005bbu, 0x00050080u, 0x00000006u, 0x000005bdu, 0x000005b7u, 0x000005bcu, 0x0004003du, 0x00000006u, 0x000005bfu, 0x000005acu, 0x00050080u, 0x00000006u, 0x000005c0u, 0x000005bdu, 0x000005bfu, 0x0003003eu, 0x000005a4u, 0x000005c0u, 0x0003003eu, 0x000005c1u, 0x000005c0u, 0x0003003eu, 0x000005c3u, 0x000005a3u, 0x00060039u, 0x00000002u, 0x000005c5u, 0x00000061u, 0x000005c1u, 0x000005c3u, 0x000200f9u, 0x00000591u, 0x000200f8u, 0x00000591u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000078u, 0x00000000u, 0x00000075u, 0x00030037u, 0x0000006cu, 0x00000076u, 0x00030037u, 0x00000007u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003bu, 0x00000007u, 0x000005c6u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005d6u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000005c7u, 0x00000076u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000005c8u, 0x000005c7u, 0x000500c2u, 0x00000006u, 0x000005c9u, 0x000005c8u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000005cau, 0x00000077u, 0x00050080u, 0x00000006u, 0x000005cbu, 0x000005cau, 0x000001e0u, 0x000500c2u, 0x00000006u, 0x000005ccu, 0x000005cbu, 0x00000193u, 0x00050084u, 0x00000006u, 0x000005cdu, 0x000005c9u, 0x000005ccu, 0x00050041u, 0x00000007u, 0x000005ceu, 0x00000076u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005cfu, 0x000005ceu, 0x000500c2u, 0x00000006u, 0x000005d0u, 0x000005cfu, 0x00000193u, 0x00050080u, 0x00000006u, 0x000005d1u, 0x000005cdu, 0x000005d0u, 0x0003003eu, 0x000005c6u, 0x000005d1u, 0x0004003du, 0x0000006bu, 0x000005d3u, 0x00000076u, 0x000500c7u, 0x0000006bu, 0x000005d5u, 0x000005d3u, 0x0000192cu, 0x0003003eu, 0x000005d2u, 0x000005d5u, 0x0004003du, 0x0000002cu, 0x000005d7u, 0x00000466u, 0x000600a9u, 0x00000006u, 0x000005d8u, 0x000005d7u, 0x000001dau, 0x000001b8u, 0x0004003du, 0x0000002cu, 0x000005d9u, 0x00000568u, 0x000600a9u, 0x00000006u, 0x000005dau, 0x000005d9u, 0x000001dau, 0x000001b8u, 0x00050084u, 0x00000006u, 0x000005dbu, 0x00000193u, 0x000005dau, 0x00050080u, 0x00000006u, 0x000005dcu, 0x000005d8u, 0x000005dbu, 0x0003003eu, 0x000005d6u, 0x000005dcu, 0x00050041u, 0x00000007u, 0x000005ddu, 0x000005d2u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005deu, 0x000005ddu, 0x00050041u, 0x00000007u, 0x000005dfu, 0x000005d2u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000005e0u, 0x000005dfu, 0x00050084u, 0x00000006u, 0x000005e1u, 0x000005e0u, 0x00000415u, 0x00050080u, 0x00000006u, 0x000005e2u, 0x000005deu, 0x000005e1u, 0x00050084u, 0x00000006u, 0x000005e3u, 0x00000193u, 0x000005e2u, 0x000500c4u, 0x00000006u, 0x000005e5u, 0x000005dcu, 0x000005e3u, 0x0003003eu, 0x000005d6u, 0x000005e5u, 0x000500abu, 0x0000002cu, 0x000005e7u, 0x000005e5u, 0x000001b8u, 0x000300f7u, 0x000005e9u, 0x00000000u, 0x000400fau, 0x000005e7u, 0x000005e8u, 0x000005e9u, 0x000200f8u, 0x000005e8u, 0x00050080u, 0x00000006u, 0x000005efu, 0x000005edu, 0x000005d1u, 0x00060041u, 0x000000e6u, 0x000005f0u, 0x000003e9u, 0x0000009cu, 0x000005efu, 0x000700f1u, 0x00000006u, 0x000005f2u, 0x000005f0u, 0x000001dau, 0x000001b8u, 0x000005e5u, 0x000200f9u, 0x000005e9u, 0x000200f8u, 0x000005e9u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000007fu, 0x00000000u, 0x0000006du, 0x00030037u, 0x0000006cu, 0x0000007au, 0x00030037u, 0x00000007u, 0x0000007bu, 0x00030037u, 0x00000007u, 0x0000007cu, 0x00030037u, 0x00000007u, 0x0000007du, 0x00030037u, 0x00000007u, 0x0000007eu, 0x000200f8u, 0x00000080u, 0x0004003bu, 0x00000007u, 0x000005fbu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000607u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000060fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000619u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000061bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000627u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000629u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000630u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000632u, 0x00000007u, 0x0004003du, 0x0000006bu, 0x000005f3u, 0x0000007au, 0x0004003du, 0x00000006u, 0x000005f4u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x000005f5u, 0x0000007cu, 0x00050050u, 0x0000006bu, 0x000005f6u, 0x000005f4u, 0x000005f5u, 0x000500b0u, 0x0000058du, 0x000005f7u, 0x000005f3u, 0x000005f6u, 0x0004009bu, 0x0000002cu, 0x000005f8u, 0x000005f7u, 0x000300f7u, 0x000005fau, 0x00000000u, 0x000400fau, 0x000005f8u, 0x000005f9u, 0x000005fau, 0x000200f8u, 0x000005f9u, 0x0004003du, 0x00000006u, 0x000005fcu, 0x0000007bu, 0x000500c2u, 0x00000006u, 0x000005fdu, 0x000005fcu, 0x000004a1u, 0x0003003eu, 0x000005fbu, 0x000005fdu, 0x0004003du, 0x0000006bu, 0x000005ffu, 0x0000007au, 0x00050050u, 0x0000006bu, 0x00000602u, 0x00000601u, 0x00000601u, 0x000500c7u, 0x0000006bu, 0x00000603u, 0x000005ffu, 0x00000602u, 0x0003003eu, 0x000005feu, 0x00000603u, 0x0004003du, 0x0000006bu, 0x00000604u, 0x0000007au, 0x00050050u, 0x0000002eu, 0x00000605u, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x00000606u, 0x00000604u, 0x00000605u, 0x0003003eu, 0x0000007au, 0x00000606u, 0x00050041u, 0x00000007u, 0x00000608u, 0x000005feu, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000609u, 0x00000608u, 0x00050084u, 0x00000006u, 0x0000060bu, 0x00000609u, 0x0000060au, 0x00050041u, 0x00000007u, 0x0000060cu, 0x000005feu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000060du, 0x0000060cu, 0x00050080u, 0x00000006u, 0x0000060eu, 0x0000060bu, 0x0000060du, 0x0003003eu, 0x00000607u, 0x0000060eu, 0x0004003du, 0x00000006u, 0x00000610u, 0x0000007du, 0x00050041u, 0x00000007u, 0x00000612u, 0x0000007au, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000613u, 0x00000612u, 0x00050084u, 0x00000006u, 0x00000614u, 0x000005fdu, 0x00000613u, 0x00050080u, 0x00000006u, 0x00000615u, 0x00000610u, 0x00000614u, 0x00050041u, 0x00000007u, 0x00000616u, 0x0000007au, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000617u, 0x00000616u, 0x00050080u, 0x00000006u, 0x00000618u, 0x00000615u, 0x00000617u, 0x0003003eu, 0x0000060fu, 0x00000618u, 0x0003003eu, 0x00000619u, 0x00000618u, 0x0003003eu, 0x0000061bu, 0x0000060eu, 0x00060039u, 0x00000002u, 0x0000061du, 0x00000065u, 0x00000619u, 0x0000061bu, 0x0004003du, 0x00000006u, 0x0000061eu, 0x0000007eu, 0x0004003du, 0x00000006u, 0x00000621u, 0x00000612u, 0x00050084u, 0x00000006u, 0x00000622u, 0x000005fdu, 0x00000621u, 0x00050080u, 0x00000006u, 0x00000623u, 0x0000061eu, 0x00000622u, 0x0004003du, 0x00000006u, 0x00000625u, 0x00000616u, 0x00050080u, 0x00000006u, 0x00000626u, 0x00000623u, 0x00000625u, 0x0003003eu, 0x0000060fu, 0x00000626u, 0x0003003eu, 0x00000627u, 0x00000626u, 0x0003003eu, 0x00000629u, 0x0000060eu, 0x00060039u, 0x00000002u, 0x0000062bu, 0x00000069u, 0x00000627u, 0x00000629u, 0x000300f7u, 0x0000062fu, 0x00000000u, 0x000400fau, 0x0000062du, 0x0000062eu, 0x0000062fu, 0x000200f8u, 0x0000062eu, 0x0004003du, 0x0000006bu, 0x00000631u, 0x0000007au, 0x0003003eu, 0x00000630u, 0x00000631u, 0x0003003eu, 0x00000632u, 0x000005fdu, 0x00060039u, 0x00000002u, 0x00000634u, 0x00000078u, 0x00000630u, 0x00000632u, 0x000200f9u, 0x0000062fu, 0x000200f8u, 0x0000062fu, 0x000200f9u, 0x000005fau, 0x000200f8u, 0x000005fau, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000083u, 0x00000000u, 0x00000081u, 0x00030037u, 0x0000002du, 0x00000082u, 0x000200f8u, 0x00000084u, 0x0004003bu, 0x00000016u, 0x00000635u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000637u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000646u, 0x00000007u, 0x0004003du, 0x0000002cu, 0x00000636u, 0x00000082u, 0x000300f7u, 0x00000639u, 0x00000000u, 0x000400fau, 0x00000636u, 0x00000638u, 0x0000063eu, 0x000200f8u, 0x00000638u, 0x00050041u, 0x0000009au, 0x0000063au, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x0000063bu, 0x0000063au, 0x000500c7u, 0x00000008u, 0x0000063du, 0x0000063bu, 0x0000063cu, 0x0003003eu, 0x00000637u, 0x0000063du, 0x000200f9u, 0x00000639u, 0x000200f8u, 0x0000063eu, 0x0003003eu, 0x00000637u, 0x0000063cu, 0x000200f9u, 0x00000639u, 0x000200f8u, 0x00000639u, 0x000700f5u, 0x00000008u, 0x000018f7u, 0x0000063du, 0x00000638u, 0x0000063cu, 0x0000063eu, 0x0003003eu, 0x00000635u, 0x000018f7u, 0x000300f7u, 0x00000645u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000645u, 0x00000000u, 0x00000640u, 0x00000001u, 0x00000641u, 0x00000002u, 0x00000642u, 0x00000003u, 0x00000643u, 0x00000004u, 0x00000644u, 0x000200f8u, 0x00000640u, 0x0003003eu, 0x00000646u, 0x00000647u, 0x0003003eu, 0x00000635u, 0x0000063cu, 0x000200f9u, 0x00000645u, 0x000200f8u, 0x00000641u, 0x0004003du, 0x00000009u, 0x00000649u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x0000064au, 0x00000649u, 0x00000649u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000646u, 0x0000064au, 0x0003003eu, 0x00000635u, 0x0000063cu, 0x000200f9u, 0x00000645u, 0x000200f8u, 0x00000642u, 0x0004003du, 0x00000009u, 0x0000064cu, 0x00000381u, 0x0008004fu, 0x00000014u, 0x0000064du, 0x0000064cu, 0x0000064cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000014u, 0x0000064fu, 0x0000064du, 0x0000192du, 0x0003003eu, 0x00000646u, 0x0000064fu, 0x000200f9u, 0x00000645u, 0x000200f8u, 0x00000643u, 0x0004003du, 0x00000009u, 0x00000651u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000652u, 0x00000651u, 0x00000651u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000646u, 0x00000652u, 0x000200f9u, 0x00000645u, 0x000200f8u, 0x00000644u, 0x0004003du, 0x00000009u, 0x00000654u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000655u, 0x00000654u, 0x00000654u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000646u, 0x00000655u, 0x000200f9u, 0x00000645u, 0x000200f8u, 0x00000645u, 0x000f00f5u, 0x00000008u, 0x000018fbu, 0x000018f7u, 0x00000639u, 0x0000063cu, 0x00000640u, 0x0000063cu, 0x00000641u, 0x000018f7u, 0x00000642u, 0x000018f7u, 0x00000643u, 0x000018f7u, 0x00000644u, 0x000f00f5u, 0x00000014u, 0x000018f8u, 0x000018fau, 0x00000639u, 0x00000647u, 0x00000640u, 0x0000064au, 0x00000641u, 0x0000064fu, 0x00000642u, 0x00000652u, 0x00000643u, 0x00000655u, 0x00000644u, 0x00050051u, 0x00000008u, 0x0000065au, 0x000018f8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000065bu, 0x000018f8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000065cu, 0x000018f8u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000065du, 0x0000065au, 0x0000065bu, 0x0000065cu, 0x000018fbu, 0x000200feu, 0x0000065du, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000087u, 0x00000000u, 0x00000085u, 0x00030037u, 0x0000002bu, 0x00000086u, 0x000200f8u, 0x00000088u, 0x000300f7u, 0x00000662u, 0x00000000u, 0x000400fau, 0x00000660u, 0x00000661u, 0x00000667u, 0x000200f8u, 0x00000661u, 0x0004003du, 0x00000009u, 0x00000663u, 0x00000086u, 0x0008004fu, 0x00000014u, 0x00000664u, 0x00000663u, 0x00000663u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000665u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000666u, 0x00000665u, 0x00000663u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000666u, 0x000200f9u, 0x00000662u, 0x000200f8u, 0x00000667u, 0x0004003du, 0x00000009u, 0x00000668u, 0x00000086u, 0x0003003eu, 0x00000381u, 0x00000668u, 0x000200f9u, 0x00000662u, 0x000200f8u, 0x00000662u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000008bu, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000089u, 0x00030037u, 0x00000007u, 0x0000008au, 0x000200f8u, 0x0000008cu, 0x0004003bu, 0x0000002bu, 0x00000674u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000677u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000067bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000067fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000683u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000691u, 0x00000007u, 0x000300f7u, 0x0000066cu, 0x00000000u, 0x000900fbu, 0x00000367u, 0x0000066cu, 0x00000000u, 0x00000669u, 0x00000001u, 0x0000066au, 0x00000002u, 0x0000066bu, 0x000200f8u, 0x00000669u, 0x0003003eu, 0x00000381u, 0x0000066du, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x0000066cu, 0x000200f8u, 0x0000066au, 0x0004003du, 0x00000006u, 0x0000066fu, 0x00000089u, 0x000500c7u, 0x00000006u, 0x00000670u, 0x0000066fu, 0x000003d5u, 0x0003003eu, 0x00000089u, 0x00000670u, 0x0004003du, 0x00000006u, 0x00000671u, 0x00000089u, 0x0004007cu, 0x00000008u, 0x00000672u, 0x00000671u, 0x00070050u, 0x00000009u, 0x00000673u, 0x00000672u, 0x00000672u, 0x00000672u, 0x00000672u, 0x0003003eu, 0x00000674u, 0x00000673u, 0x00050039u, 0x00000002u, 0x00000675u, 0x00000087u, 0x00000674u, 0x000200f9u, 0x0000066cu, 0x000200f8u, 0x0000066bu, 0x0004003du, 0x00000006u, 0x00000678u, 0x00000089u, 0x000500c2u, 0x00000006u, 0x00000679u, 0x00000678u, 0x000000d9u, 0x000500c7u, 0x00000006u, 0x0000067au, 0x00000679u, 0x000003aeu, 0x0003003eu, 0x00000677u, 0x0000067au, 0x0004003du, 0x00000006u, 0x0000067cu, 0x00000089u, 0x000500c2u, 0x00000006u, 0x0000067du, 0x0000067cu, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x0000067eu, 0x0000067du, 0x000003aeu, 0x0003003eu, 0x0000067bu, 0x0000067eu, 0x0004003du, 0x00000006u, 0x00000680u, 0x00000089u, 0x000500c4u, 0x00000006u, 0x00000681u, 0x00000680u, 0x000000b5u, 0x000500c7u, 0x00000006u, 0x00000682u, 0x00000681u, 0x000003aeu, 0x0003003eu, 0x0000067fu, 0x00000682u, 0x0004003du, 0x00000006u, 0x00000684u, 0x00000089u, 0x000500c7u, 0x00000006u, 0x00000685u, 0x00000684u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000687u, 0x00000685u, 0x00000686u, 0x0003003eu, 0x00000683u, 0x00000687u, 0x0004007cu, 0x00000008u, 0x00000689u, 0x0000067au, 0x0004007cu, 0x00000008u, 0x0000068bu, 0x0000067eu, 0x0004007cu, 0x00000008u, 0x0000068du, 0x00000682u, 0x0004007cu, 0x00000008u, 0x0000068fu, 0x00000687u, 0x00070050u, 0x00000009u, 0x00000690u, 0x00000689u, 0x0000068bu, 0x0000068du, 0x0000068fu, 0x0003003eu, 0x00000691u, 0x00000690u, 0x00050039u, 0x00000002u, 0x00000692u, 0x00000087u, 0x00000691u, 0x000200f9u, 0x0000066cu, 0x000200f8u, 0x0000066cu, 0x000300f7u, 0x00000696u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000695u, 0x00000696u, 0x000200f8u, 0x00000695u, 0x00040039u, 0x00000002u, 0x00000697u, 0x0000005bu, 0x000200f9u, 0x00000696u, 0x000200f8u, 0x00000696u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000008fu, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000008eu, 0x000200f8u, 0x00000090u, 0x0004003bu, 0x00000007u, 0x0000069du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006a9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000006b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000006d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006e7u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000006f4u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000702u, 0x00000007u, 0x000300f7u, 0x0000069cu, 0x00000000u, 0x000b00fbu, 0x00000367u, 0x0000069cu, 0x00000004u, 0x00000698u, 0x00000002u, 0x00000699u, 0x00000003u, 0x0000069au, 0x00000001u, 0x0000069bu, 0x000200f8u, 0x00000698u, 0x0004003du, 0x00000006u, 0x0000069eu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x0000069fu, 0x0000069eu, 0x000003efu, 0x000500c7u, 0x00000006u, 0x000006a0u, 0x0000069fu, 0x000003d5u, 0x0003003eu, 0x0000069du, 0x000006a0u, 0x0004003du, 0x00000006u, 0x000006a2u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006a3u, 0x000006a2u, 0x000003f0u, 0x000500c7u, 0x00000006u, 0x000006a4u, 0x000006a3u, 0x000003d5u, 0x0003003eu, 0x000006a1u, 0x000006a4u, 0x0004003du, 0x00000006u, 0x000006a6u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006a7u, 0x000006a6u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x000006a8u, 0x000006a7u, 0x000003d5u, 0x0003003eu, 0x000006a5u, 0x000006a8u, 0x0004003du, 0x00000006u, 0x000006aau, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006abu, 0x000006aau, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x000006acu, 0x000006abu, 0x000003d5u, 0x0003003eu, 0x000006a9u, 0x000006acu, 0x0004007cu, 0x00000008u, 0x000006aeu, 0x000006a0u, 0x0004007cu, 0x00000008u, 0x000006b0u, 0x000006a4u, 0x0004007cu, 0x00000008u, 0x000006b2u, 0x000006a8u, 0x0004007cu, 0x00000008u, 0x000006b4u, 0x000006acu, 0x00070050u, 0x00000009u, 0x000006b5u, 0x000006aeu, 0x000006b0u, 0x000006b2u, 0x000006b4u, 0x0003003eu, 0x000006b6u, 0x000006b5u, 0x00050039u, 0x00000002u, 0x000006b7u, 0x00000087u, 0x000006b6u, 0x000200f9u, 0x0000069cu, 0x000200f8u, 0x00000699u, 0x0004003du, 0x00000006u, 0x000006b9u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x000006bau, 0x000006b9u, 0x000001dau, 0x000500c6u, 0x00000006u, 0x000006bbu, 0x000006bau, 0x000001dau, 0x00050084u, 0x00000006u, 0x000006bcu, 0x000006bbu, 0x000003f0u, 0x0004003du, 0x00000006u, 0x000006bdu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006beu, 0x000006bdu, 0x000006bcu, 0x0003003eu, 0x0000008eu, 0x000006beu, 0x0004003du, 0x00000006u, 0x000006c0u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006c1u, 0x000006c0u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x000006c2u, 0x000006c1u, 0x000003aeu, 0x0003003eu, 0x000006bfu, 0x000006c2u, 0x0004003du, 0x00000006u, 0x000006c4u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006c5u, 0x000006c4u, 0x000001e0u, 0x000500c7u, 0x00000006u, 0x000006c6u, 0x000006c5u, 0x000003aeu, 0x0003003eu, 0x000006c3u, 0x000006c6u, 0x0004003du, 0x00000006u, 0x000006c8u, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x000006c9u, 0x000006c8u, 0x00000193u, 0x000500c7u, 0x00000006u, 0x000006cau, 0x000006c9u, 0x000003aeu, 0x0003003eu, 0x000006c7u, 0x000006cau, 0x0004003du, 0x00000006u, 0x000006ccu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006cdu, 0x000006ccu, 0x000001dau, 0x00050084u, 0x00000006u, 0x000006ceu, 0x000006cdu, 0x00000686u, 0x0003003eu, 0x000006cbu, 0x000006ceu, 0x0004007cu, 0x00000008u, 0x000006d0u, 0x000006c2u, 0x0004007cu, 0x00000008u, 0x000006d2u, 0x000006c6u, 0x0004007cu, 0x00000008u, 0x000006d4u, 0x000006cau, 0x0004007cu, 0x00000008u, 0x000006d6u, 0x000006ceu, 0x00070050u, 0x00000009u, 0x000006d7u, 0x000006d0u, 0x000006d2u, 0x000006d4u, 0x000006d6u, 0x0003003eu, 0x000006d8u, 0x000006d7u, 0x00050039u, 0x00000002u, 0x000006d9u, 0x00000087u, 0x000006d8u, 0x000200f9u, 0x0000069cu, 0x000200f8u, 0x0000069au, 0x0004003du, 0x00000006u, 0x000006dbu, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x000006dcu, 0x000006dbu, 0x000001dau, 0x000500c6u, 0x00000006u, 0x000006ddu, 0x000006dcu, 0x000001dau, 0x00050084u, 0x00000006u, 0x000006deu, 0x000006ddu, 0x000003f0u, 0x0004003du, 0x00000006u, 0x000006dfu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006e0u, 0x000006dfu, 0x000006deu, 0x0003003eu, 0x0000008eu, 0x000006e0u, 0x0004003du, 0x00000006u, 0x000006e1u, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006e2u, 0x000006e1u, 0x00000502u, 0x0003003eu, 0x0000008eu, 0x000006e2u, 0x0004003du, 0x00000006u, 0x000006e4u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006e5u, 0x000006e4u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x000006e6u, 0x000006e5u, 0x000003d5u, 0x0003003eu, 0x000006e3u, 0x000006e6u, 0x0004003du, 0x00000006u, 0x000006e8u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006e9u, 0x000006e8u, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x000006eau, 0x000006e9u, 0x000003d5u, 0x0003003eu, 0x000006e7u, 0x000006eau, 0x0004007cu, 0x00000008u, 0x000006ecu, 0x000006e6u, 0x0004007cu, 0x00000008u, 0x000006f2u, 0x000006eau, 0x00070050u, 0x00000009u, 0x000006f3u, 0x000006ecu, 0x000006ecu, 0x000006ecu, 0x000006f2u, 0x0003003eu, 0x000006f4u, 0x000006f3u, 0x00050039u, 0x00000002u, 0x000006f5u, 0x00000087u, 0x000006f4u, 0x000200f9u, 0x0000069cu, 0x000200f8u, 0x0000069bu, 0x0004003du, 0x00000006u, 0x000006f7u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x000001e0u, 0x000500c6u, 0x00000006u, 0x000006f9u, 0x000006f8u, 0x000001e0u, 0x00050084u, 0x00000006u, 0x000006fau, 0x000006f9u, 0x000003a7u, 0x0004003du, 0x00000006u, 0x000006fbu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006fcu, 0x000006fbu, 0x000006fau, 0x0003003eu, 0x0000008eu, 0x000006fcu, 0x0004003du, 0x00000006u, 0x000006fdu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006feu, 0x000006fdu, 0x000003d5u, 0x0003003eu, 0x0000008eu, 0x000006feu, 0x0004003du, 0x00000006u, 0x000006ffu, 0x0000008eu, 0x0004007cu, 0x00000008u, 0x00000700u, 0x000006ffu, 0x00070050u, 0x00000009u, 0x00000701u, 0x00000700u, 0x00000700u, 0x00000700u, 0x00000700u, 0x0003003eu, 0x00000702u, 0x00000701u, 0x00050039u, 0x00000002u, 0x00000703u, 0x00000087u, 0x00000702u, 0x000200f9u, 0x0000069cu, 0x000200f8u, 0x0000069cu, 0x000300f7u, 0x00000707u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000706u, 0x00000707u, 0x000200f8u, 0x00000706u, 0x00040039u, 0x00000002u, 0x00000708u, 0x0000005bu, 0x000200f9u, 0x00000707u, 0x000200f8u, 0x00000707u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000098u, 0x00000000u, 0x00000093u, 0x00030037u, 0x00000016u, 0x00000094u, 0x00030037u, 0x00000016u, 0x00000095u, 0x00030037u, 0x00000007u, 0x00000096u, 0x00030037u, 0x00000092u, 0x00000097u, 0x000200f8u, 0x00000099u, 0x0004003bu, 0x00000016u, 0x000011cfu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011ceu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011cdu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011ccu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011cbu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011c5u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011c3u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011c2u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011c1u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011bcu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011bbu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011bau, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011b9u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000709u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000070du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000715u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000718u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000071bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000728u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000072du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000730u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000735u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000073au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000073fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000744u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000074au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000750u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000756u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000075cu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000075du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000760u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000764u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000765u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000766u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000767u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000768u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000076au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000076du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000770u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000772u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000774u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000077au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000077du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000077fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000781u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000782u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000783u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000079du, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000007a3u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007a5u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007a7u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007a9u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007abu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007adu, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x000007afu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007b1u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x000007b8u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000007b9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007bdu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007bfu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007c1u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007c3u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x000007c5u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007c7u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x000007ccu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007ceu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007d1u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007d2u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007d4u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007d6u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007d8u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007e3u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007e8u, 0x00000007u, 0x00050041u, 0x00000016u, 0x0000070au, 0x00000097u, 0x000000afu, 0x0004003du, 0x00000008u, 0x0000070bu, 0x0000070au, 0x000500c3u, 0x00000008u, 0x0000070cu, 0x0000070bu, 0x000000dfu, 0x0003003eu, 0x00000709u, 0x0000070cu, 0x0004003du, 0x00000008u, 0x0000070fu, 0x0000070au, 0x000500c7u, 0x00000008u, 0x00000711u, 0x0000070fu, 0x00000710u, 0x0003003eu, 0x0000070du, 0x00000711u, 0x00050041u, 0x00000016u, 0x00000713u, 0x00000097u, 0x000000b5u, 0x0004003du, 0x00000008u, 0x00000714u, 0x00000713u, 0x0003003eu, 0x00000712u, 0x00000714u, 0x00050041u, 0x0000002bu, 0x00000716u, 0x00000097u, 0x0000009cu, 0x0004003du, 0x00000009u, 0x00000717u, 0x00000716u, 0x0003003eu, 0x00000715u, 0x00000717u, 0x00050041u, 0x00000016u, 0x00000719u, 0x00000097u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x0000071au, 0x00000719u, 0x0003003eu, 0x00000718u, 0x0000071au, 0x0004003du, 0x00000006u, 0x00000722u, 0x00000096u, 0x00080041u, 0x000000f2u, 0x00000723u, 0x00000721u, 0x0000009cu, 0x00000722u, 0x0000009cu, 0x000001dau, 0x0004003du, 0x0000009du, 0x00000724u, 0x00000723u, 0x00040071u, 0x00000006u, 0x00000725u, 0x00000724u, 0x0003003eu, 0x0000071bu, 0x00000725u, 0x0004003du, 0x00000006u, 0x00000729u, 0x00000096u, 0x0003003eu, 0x00000728u, 0x00000729u, 0x00050039u, 0x0000000au, 0x0000072au, 0x0000000du, 0x00000728u, 0x00050051u, 0x00000009u, 0x000011bdu, 0x0000072au, 0x00000008u, 0x0003003eu, 0x000011b9u, 0x000011bdu, 0x00050051u, 0x00000009u, 0x000011beu, 0x0000072au, 0x00000009u, 0x0003003eu, 0x000011bau, 0x000011beu, 0x00050051u, 0x00000008u, 0x000011bfu, 0x0000072au, 0x0000000bu, 0x0003003eu, 0x000011bbu, 0x000011bfu, 0x00050051u, 0x00000008u, 0x000011c0u, 0x0000072au, 0x0000000cu, 0x0003003eu, 0x000011bcu, 0x000011c0u, 0x0003003eu, 0x0000072du, 0x00000725u, 0x00050039u, 0x0000000fu, 0x0000072fu, 0x00000012u, 0x0000072du, 0x00050051u, 0x00000009u, 0x000011c6u, 0x0000072fu, 0x00000000u, 0x0003003eu, 0x000011c1u, 0x000011c6u, 0x00050051u, 0x00000009u, 0x000011c7u, 0x0000072fu, 0x00000001u, 0x0003003eu, 0x000011c2u, 0x000011c7u, 0x00050051u, 0x00000006u, 0x000011c8u, 0x0000072fu, 0x00000002u, 0x0003003eu, 0x000011c3u, 0x000011c8u, 0x00050051u, 0x00000008u, 0x000011c9u, 0x0000072fu, 0x00000003u, 0x0003003eu, 0x000011c4u, 0x000011c9u, 0x00050051u, 0x00000008u, 0x000011cau, 0x0000072fu, 0x00000004u, 0x0003003eu, 0x000011c5u, 0x000011cau, 0x000500c7u, 0x00000006u, 0x00000733u, 0x000011c8u, 0x000003a7u, 0x000500abu, 0x0000002cu, 0x00000734u, 0x00000733u, 0x000001b8u, 0x0003003eu, 0x00000730u, 0x00000734u, 0x000500c7u, 0x00000006u, 0x00000738u, 0x000011c8u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00000739u, 0x00000738u, 0x000001b8u, 0x0003003eu, 0x00000735u, 0x00000739u, 0x000500c7u, 0x00000006u, 0x0000073du, 0x000011c8u, 0x00000193u, 0x000500abu, 0x0000002cu, 0x0000073eu, 0x0000073du, 0x000001b8u, 0x0003003eu, 0x0000073au, 0x0000073eu, 0x000500c7u, 0x00000006u, 0x00000742u, 0x000011c8u, 0x000003f0u, 0x000500abu, 0x0000002cu, 0x00000743u, 0x00000742u, 0x000001b8u, 0x0003003eu, 0x0000073fu, 0x00000743u, 0x000500c7u, 0x00000006u, 0x00000748u, 0x000011c8u, 0x00000747u, 0x000500abu, 0x0000002cu, 0x00000749u, 0x00000748u, 0x000001b8u, 0x0003003eu, 0x00000744u, 0x00000749u, 0x000500c7u, 0x00000006u, 0x0000074eu, 0x000011c8u, 0x0000074du, 0x000500abu, 0x0000002cu, 0x0000074fu, 0x0000074eu, 0x000001b8u, 0x0003003eu, 0x0000074au, 0x0000074fu, 0x000500c7u, 0x00000006u, 0x00000754u, 0x000011c8u, 0x00000753u, 0x000500abu, 0x0000002cu, 0x00000755u, 0x00000754u, 0x000001b8u, 0x0003003eu, 0x00000750u, 0x00000755u, 0x000500c7u, 0x00000006u, 0x0000075au, 0x000011c8u, 0x00000759u, 0x000500abu, 0x0000002cu, 0x0000075bu, 0x0000075au, 0x000001b8u, 0x0003003eu, 0x00000756u, 0x0000075bu, 0x0003003eu, 0x0000075du, 0x00000743u, 0x00050039u, 0x00000009u, 0x0000075fu, 0x00000083u, 0x0000075du, 0x0003003eu, 0x0000075cu, 0x0000075fu, 0x00050041u, 0x00000016u, 0x00000761u, 0x0000075cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000762u, 0x00000761u, 0x000500c3u, 0x00000008u, 0x00000763u, 0x00000762u, 0x000000c7u, 0x0003003eu, 0x00000760u, 0x00000763u, 0x0003003eu, 0x00000768u, 0x0000070cu, 0x0003003eu, 0x0000076au, 0x000011bfu, 0x0003003eu, 0x0000076du, 0x000011c0u, 0x0004003du, 0x00000008u, 0x00000771u, 0x00000419u, 0x0003003eu, 0x00000770u, 0x00000771u, 0x0004003du, 0x00000008u, 0x00000773u, 0x000003fbu, 0x0003003eu, 0x00000772u, 0x00000773u, 0x0003003eu, 0x00000774u, 0x00000714u, 0x0003003eu, 0x00000776u, 0x00000763u, 0x0003003eu, 0x00000778u, 0x00000739u, 0x0003003eu, 0x0000077au, 0x000011cau, 0x0003003eu, 0x0000077du, 0x00000734u, 0x0003003eu, 0x0000077fu, 0x00000755u, 0x00120039u, 0x0000002cu, 0x00000784u, 0x0000004du, 0x00000768u, 0x0000076au, 0x0000076du, 0x00000770u, 0x00000772u, 0x00000774u, 0x00000776u, 0x00000778u, 0x0000077au, 0x0000077du, 0x0000077fu, 0x00000781u, 0x00000782u, 0x00000783u, 0x0004003du, 0x00000008u, 0x00000785u, 0x00000774u, 0x0003003eu, 0x00000712u, 0x00000785u, 0x0004003du, 0x0000002cu, 0x00000786u, 0x00000781u, 0x0003003eu, 0x00000765u, 0x00000786u, 0x0004003du, 0x0000002cu, 0x00000787u, 0x00000782u, 0x0003003eu, 0x00000766u, 0x00000787u, 0x0004003du, 0x0000002eu, 0x00000788u, 0x00000783u, 0x0003003eu, 0x00000767u, 0x00000788u, 0x0003003eu, 0x00000764u, 0x00000784u, 0x000300f7u, 0x0000078bu, 0x00000000u, 0x000400fau, 0x00000784u, 0x0000078au, 0x0000078bu, 0x000200f8u, 0x0000078au, 0x000400a8u, 0x0000002cu, 0x0000078du, 0x00000755u, 0x000500abu, 0x0000002cu, 0x0000078fu, 0x00000785u, 0x0000009cu, 0x000500a6u, 0x0000002cu, 0x00000790u, 0x0000078du, 0x0000078fu, 0x000200f9u, 0x0000078bu, 0x000200f8u, 0x0000078bu, 0x000700f5u, 0x0000002cu, 0x00000791u, 0x00000784u, 0x00000099u, 0x00000790u, 0x0000078au, 0x000300f7u, 0x00000793u, 0x00000000u, 0x000400fau, 0x00000791u, 0x00000792u, 0x00000793u, 0x000200f8u, 0x00000792u, 0x0004003du, 0x00000009u, 0x00000796u, 0x0000075cu, 0x00080050u, 0x00000029u, 0x0000079cu, 0x00000717u, 0x00000796u, 0x000011bdu, 0x000011beu, 0x0000071au, 0x0003003eu, 0x000011cbu, 0x00000717u, 0x0003003eu, 0x000011ccu, 0x00000796u, 0x0003003eu, 0x000011cdu, 0x000011bdu, 0x0003003eu, 0x000011ceu, 0x000011beu, 0x0003003eu, 0x000011cfu, 0x0000071au, 0x0003003eu, 0x0000079du, 0x000011c6u, 0x000300f7u, 0x000007a2u, 0x00000000u, 0x000400fau, 0x0000074fu, 0x000007a1u, 0x000007a2u, 0x000200f8u, 0x000007a1u, 0x0003003eu, 0x000007a3u, 0x0000079cu, 0x0003003eu, 0x000007a5u, 0x000011c6u, 0x0003003eu, 0x000007a7u, 0x00000734u, 0x0003003eu, 0x000007a9u, 0x00000786u, 0x0003003eu, 0x000007abu, 0x00000749u, 0x0003003eu, 0x000007adu, 0x00000787u, 0x0003003eu, 0x000007afu, 0x00000788u, 0x0003003eu, 0x000007b1u, 0x00000298u, 0x000c0039u, 0x00000014u, 0x000007b2u, 0x00000039u, 0x000007a3u, 0x000007a5u, 0x000007a7u, 0x000007a9u, 0x000007abu, 0x000007adu, 0x000007afu, 0x000007b1u, 0x0009004fu, 0x00000009u, 0x000007b5u, 0x00000717u, 0x000007b2u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000011cbu, 0x000007b5u, 0x0003003eu, 0x0000079du, 0x000011c7u, 0x000200f9u, 0x000007a2u, 0x000200f8u, 0x000007a2u, 0x000700f5u, 0x00000009u, 0x0000190cu, 0x00000717u, 0x00000792u, 0x000007b5u, 0x000007a1u, 0x00070050u, 0x00001935u, 0x00001939u, 0x0000074fu, 0x0000074fu, 0x0000074fu, 0x0000074fu, 0x000600a9u, 0x00000009u, 0x0000193au, 0x00001939u, 0x000011c7u, 0x000011c6u, 0x00080050u, 0x00000029u, 0x000011e0u, 0x0000190cu, 0x00000796u, 0x000011bdu, 0x000011beu, 0x0000071au, 0x0003003eu, 0x000007b9u, 0x000011e0u, 0x0003003eu, 0x000007bbu, 0x0000193au, 0x0003003eu, 0x000007bdu, 0x00000734u, 0x0003003eu, 0x000007bfu, 0x00000786u, 0x0003003eu, 0x000007c1u, 0x00000749u, 0x0003003eu, 0x000007c3u, 0x00000787u, 0x0003003eu, 0x000007c5u, 0x00000788u, 0x0003003eu, 0x000007c7u, 0x000002b3u, 0x000c0039u, 0x00000014u, 0x000007c8u, 0x00000039u, 0x000007b9u, 0x000007bbu, 0x000007bdu, 0x000007bfu, 0x000007c1u, 0x000007c3u, 0x000007c5u, 0x000007c7u, 0x0003003eu, 0x000007b8u, 0x000007c8u, 0x000300f7u, 0x000007cbu, 0x00000000u, 0x000400fau, 0x0000075bu, 0x000007cau, 0x000007cbu, 0x000200f8u, 0x000007cau, 0x0003003eu, 0x000007ccu, 0x000007c8u, 0x0003003eu, 0x000007ceu, 0x00000711u, 0x00060039u, 0x00000014u, 0x000007d0u, 0x0000001au, 0x000007ccu, 0x000007ceu, 0x0003003eu, 0x000007b8u, 0x000007d0u, 0x000200f9u, 0x000007cbu, 0x000200f8u, 0x000007cbu, 0x000700f5u, 0x00000014u, 0x00001921u, 0x000007c8u, 0x000007a2u, 0x000007d0u, 0x000007cau, 0x0003003eu, 0x000007d2u, 0x00000785u, 0x0003003eu, 0x000007d4u, 0x00000763u, 0x0003003eu, 0x000007d6u, 0x00000786u, 0x0003003eu, 0x000007d8u, 0x000011c9u, 0x00080039u, 0x00000008u, 0x000007dbu, 0x00000054u, 0x000007d2u, 0x000007d4u, 0x000007d6u, 0x000007d8u, 0x0003003eu, 0x000007d1u, 0x000007dbu, 0x000500c4u, 0x00000008u, 0x000007deu, 0x000007dbu, 0x000000c7u, 0x00050051u, 0x00000008u, 0x000007dfu, 0x00001921u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000007e0u, 0x00001921u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000007e1u, 0x00001921u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000007e2u, 0x000007dfu, 0x000007e0u, 0x000007e1u, 0x000007deu, 0x0003003eu, 0x000007e3u, 0x000007e2u, 0x00050039u, 0x00000002u, 0x000007e4u, 0x00000087u, 0x000007e3u, 0x000300f7u, 0x000007e7u, 0x00000000u, 0x000400fau, 0x0000073eu, 0x000007e6u, 0x000007f0u, 0x000200f8u, 0x000007e6u, 0x0003003eu, 0x000007e8u, 0x0000070cu, 0x00050039u, 0x00000008u, 0x000007eau, 0x00000021u, 0x000007e8u, 0x0003003eu, 0x00000419u, 0x000007eau, 0x0003003eu, 0x000003fbu, 0x000011c0u, 0x0003003eu, 0x00000568u, 0x000002b3u, 0x000300f7u, 0x000007eeu, 0x00000000u, 0x000400fau, 0x00000564u, 0x000007edu, 0x000007eeu, 0x000200f8u, 0x000007edu, 0x00040039u, 0x00000002u, 0x000007efu, 0x0000005du, 0x000200f9u, 0x000007eeu, 0x000200f8u, 0x000007eeu, 0x000200f9u, 0x000007e7u, 0x000200f8u, 0x000007f0u, 0x000300f7u, 0x000007f2u, 0x00000000u, 0x000400fau, 0x00000564u, 0x000007f1u, 0x000007f2u, 0x000200f8u, 0x000007f1u, 0x00040039u, 0x00000002u, 0x000007f3u, 0x0000005bu, 0x000200f9u, 0x000007f2u, 0x000200f8u, 0x000007f2u, 0x000200f9u, 0x000007e7u, 0x000200f8u, 0x000007e7u, 0x000200f9u, 0x00000793u, 0x000200f8u, 0x00000793u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00001969u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x0000003du, 0x00020011u, 0x0000003fu, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000804u, 0x0000080eu, 0x0000088au, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x000000a2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000a2u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000a2u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000a2u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000a2u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000000a2u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000a2u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000000a2u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000000a2u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000a2u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000000a2u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000000a2u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000000a2u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x000000a2u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x000000a2u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000000a3u, 0x00000006u, 0x00000038u, 0x00040048u, 0x000000a4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000a4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000a4u, 0x00000002u, 0x00040047u, 0x000000a6u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000000a6u, 0x00000021u, 0x00000002u, 0x00050048u, 0x00000106u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000106u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000106u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000106u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000106u, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x00000106u, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000106u, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x00000107u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000108u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000108u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000108u, 0x00000002u, 0x00040047u, 0x0000010au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000010au, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000259u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000259u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000367u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000036du, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000376u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000377u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000377u, 0x00000002u, 0x00040047u, 0x00000379u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000379u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000385u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000386u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000386u, 0x00000002u, 0x00040047u, 0x00000388u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000388u, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000039au, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000039bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000039bu, 0x00000002u, 0x00040047u, 0x0000039du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000039du, 0x00000021u, 0x00000000u, 0x00040047u, 0x000003e6u, 0x00000006u, 0x00000004u, 0x00050048u, 0x000003e7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003e7u, 0x00000002u, 0x00040047u, 0x000003e9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003e9u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000049eu, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000564u, 0x00000001u, 0x00000002u, 0x00040047u, 0x0000072au, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000072bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000072bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000072bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x0000072cu, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000072du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000072du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000072du, 0x00000002u, 0x00040047u, 0x0000072fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000072fu, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000804u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x0000080eu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000817u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00000818u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00000819u, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000081au, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00000822u, 0x00000001u, 0x00000005u, 0x00040047u, 0x00000827u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000828u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000828u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000828u, 0x00000002u, 0x00040047u, 0x0000082au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000082au, 0x00000021u, 0x0000000cu, 0x00050048u, 0x0000082eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000082eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000082eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000082eu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000082eu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x0000082eu, 0x00000002u, 0x00040047u, 0x0000085bu, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000085cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000085cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000085cu, 0x00000002u, 0x00040047u, 0x0000085eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000085eu, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000865u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000866u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000866u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000866u, 0x00000002u, 0x00040047u, 0x00000868u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000868u, 0x00000021u, 0x0000000bu, 0x00040047u, 0x0000088au, 0x0000000bu, 0x0000001du, 0x00040047u, 0x0000088fu, 0x00000006u, 0x00000001u, 0x00040048u, 0x00000890u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000890u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000890u, 0x00000002u, 0x00040047u, 0x00000892u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000892u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000008aeu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008afu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008afu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008afu, 0x00000002u, 0x00040047u, 0x000008b1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008b1u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008bcu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008bdu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008bdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008bdu, 0x00000002u, 0x00040047u, 0x000008bfu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008bfu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008c6u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008c7u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008c7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008c7u, 0x00000002u, 0x00040047u, 0x000008c9u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008c9u, 0x00000021u, 0x00000004u, 0x00040047u, 0x000008cfu, 0x00000006u, 0x00000001u, 0x00040048u, 0x000008d0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008d0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008d0u, 0x00000002u, 0x00040047u, 0x000008d2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008d2u, 0x00000021u, 0x00000005u, 0x00040047u, 0x0000090bu, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000090cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x0000090du, 0x00000006u, 0x00001000u, 0x00040048u, 0x0000090eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000090eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000090eu, 0x00000002u, 0x00040047u, 0x00000910u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000910u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000912u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000913u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000914u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000915u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000915u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000915u, 0x00000002u, 0x00040047u, 0x00000917u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000917u, 0x00000021u, 0x00000002u, 0x00050048u, 0x00000918u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000918u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000918u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000918u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000918u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00000918u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000918u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000918u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000918u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000918u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000918u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000919u, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000091au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000091au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000091au, 0x00000002u, 0x00040047u, 0x0000091cu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000091cu, 0x00000021u, 0x00000000u, 0x00050048u, 0x0000091du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000091du, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000091du, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x0000091du, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x0000091du, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x0000091du, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x0000091du, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x0000091du, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x0000091eu, 0x00000006u, 0x00000080u, 0x00040048u, 0x0000091fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000091fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000091fu, 0x00000002u, 0x00040047u, 0x00000921u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000921u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000922u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000923u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000923u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000923u, 0x00000002u, 0x00040047u, 0x00000925u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000925u, 0x00000021u, 0x00000003u, 0x00050048u, 0x00000926u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000926u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000926u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000926u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000926u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000926u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000926u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000926u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x00000927u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000928u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000928u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000928u, 0x00000002u, 0x00040047u, 0x0000092au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000092au, 0x00000021u, 0x00000004u, 0x00050048u, 0x0000092bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000092bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000092bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000092bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000092bu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000092bu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000092bu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000092bu, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x0000092bu, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x0000092bu, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x0000092bu, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000092bu, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x0000092bu, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000092bu, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000092cu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000092du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000092du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000092du, 0x00000002u, 0x00040047u, 0x0000092fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000092fu, 0x00000021u, 0x00000007u, 0x00050048u, 0x00000931u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000931u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000931u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000931u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000931u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000931u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000931u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000931u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000931u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000932u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000933u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000933u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000933u, 0x00000002u, 0x00040047u, 0x00000935u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000935u, 0x00000021u, 0x00000008u, 0x00050048u, 0x00000936u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000936u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000936u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000936u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000937u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000938u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000938u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000938u, 0x00000002u, 0x00040047u, 0x0000093au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000093au, 0x00000021u, 0x00000009u, 0x00050048u, 0x0000093bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000093bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000093bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000093bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000093cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000093cu, 0x00000002u, 0x00040047u, 0x0000093eu, 0x00000022u, 0x00000002u, 0x00040047u, 0x0000093eu, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x0011001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x0009001eu, 0x0000000fu, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000010u, 0x0000000fu, 0x00000007u, 0x00040017u, 0x00000014u, 0x00000008u, 0x00000003u, 0x00040020u, 0x00000015u, 0x00000007u, 0x00000014u, 0x00040020u, 0x00000016u, 0x00000007u, 0x00000008u, 0x00050021u, 0x00000017u, 0x00000014u, 0x00000015u, 0x00000016u, 0x00040021u, 0x0000001cu, 0x00000008u, 0x00000016u, 0x0007001eu, 0x00000029u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00040020u, 0x0000002au, 0x00000007u, 0x00000029u, 0x00040020u, 0x0000002bu, 0x00000007u, 0x00000009u, 0x00020014u, 0x0000002cu, 0x00040020u, 0x0000002du, 0x00000007u, 0x0000002cu, 0x00040017u, 0x0000002eu, 0x00000008u, 0x00000002u, 0x00040020u, 0x0000002fu, 0x00000007u, 0x0000002eu, 0x000b0021u, 0x00000030u, 0x00000014u, 0x0000002au, 0x0000002bu, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002fu, 0x0000002du, 0x00110021u, 0x0000003eu, 0x0000002cu, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x00000016u, 0x0000002du, 0x00000016u, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002du, 0x0000002fu, 0x00070021u, 0x0000004fu, 0x00000008u, 0x00000016u, 0x00000016u, 0x0000002du, 0x00000016u, 0x00050021u, 0x00000056u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x0000006bu, 0x00000006u, 0x00000002u, 0x00040020u, 0x0000006cu, 0x00000007u, 0x0000006bu, 0x00080021u, 0x0000006du, 0x00000002u, 0x0000006cu, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x00000075u, 0x00000002u, 0x0000006cu, 0x00000007u, 0x00040021u, 0x00000081u, 0x00000009u, 0x0000002du, 0x00040021u, 0x00000085u, 0x00000002u, 0x0000002bu, 0x00040021u, 0x0000008du, 0x00000002u, 0x00000007u, 0x0006001eu, 0x00000091u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x00000092u, 0x00000007u, 0x00000091u, 0x00070021u, 0x00000093u, 0x00000002u, 0x00000016u, 0x00000016u, 0x00000007u, 0x00000092u, 0x00040020u, 0x0000009au, 0x00000006u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x0000009cu, 0x00000000u, 0x00040015u, 0x0000009du, 0x00000008u, 0x00000000u, 0x00040017u, 0x0000009eu, 0x0000009du, 0x00000004u, 0x00040015u, 0x0000009fu, 0x00000010u, 0x00000000u, 0x00040015u, 0x000000a0u, 0x00000010u, 0x00000001u, 0x00040017u, 0x000000a1u, 0x000000a0u, 0x00000004u, 0x0011001eu, 0x000000a2u, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x00000006u, 0x0000009fu, 0x0000009du, 0x0000009du, 0x000000a1u, 0x0003001du, 0x000000a3u, 0x000000a2u, 0x0003001eu, 0x000000a4u, 0x000000a3u, 0x00040020u, 0x000000a5u, 0x0000000cu, 0x000000a4u, 0x0004003bu, 0x000000a5u, 0x000000a6u, 0x0000000cu, 0x00040020u, 0x000000a8u, 0x0000000cu, 0x0000009eu, 0x00040017u, 0x000000abu, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000000afu, 0x00000001u, 0x0004002bu, 0x00000008u, 0x000000b5u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x000000bbu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000000c1u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000000c7u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x000000cdu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000000d3u, 0x00000007u, 0x0004002bu, 0x00000008u, 0x000000d9u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x000000dfu, 0x00000009u, 0x0004002bu, 0x00000008u, 0x000000e5u, 0x0000000au, 0x00040020u, 0x000000e6u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000000eau, 0x0000000bu, 0x00040020u, 0x000000ebu, 0x0000000cu, 0x0000009fu, 0x0004002bu, 0x00000008u, 0x000000f1u, 0x0000000cu, 0x00040020u, 0x000000f2u, 0x0000000cu, 0x0000009du, 0x0004002bu, 0x00000008u, 0x000000f8u, 0x0000000du, 0x0004002bu, 0x00000008u, 0x000000feu, 0x0000000eu, 0x00040020u, 0x000000ffu, 0x0000000cu, 0x000000a1u, 0x0009001eu, 0x00000106u, 0x0000009eu, 0x0000009eu, 0x00000006u, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0003001du, 0x00000107u, 0x00000106u, 0x0003001eu, 0x00000108u, 0x00000107u, 0x00040020u, 0x00000109u, 0x0000000cu, 0x00000108u, 0x0004003bu, 0x00000109u, 0x0000010au, 0x0000000cu, 0x0006002cu, 0x00000014u, 0x00000128u, 0x0000009cu, 0x000000bbu, 0x000000cdu, 0x0004002bu, 0x00000008u, 0x0000012eu, 0x000000f8u, 0x0004002bu, 0x00000008u, 0x00000133u, 0x000000ffu, 0x0006002cu, 0x00000014u, 0x00000134u, 0x00000133u, 0x00000133u, 0x00000133u, 0x0004002bu, 0x00000008u, 0x00000136u, 0x000000f7u, 0x0006002cu, 0x00000014u, 0x00000137u, 0x00000136u, 0x00000136u, 0x00000136u, 0x00040017u, 0x00000138u, 0x0000002cu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000141u, 0x0000001fu, 0x0004002bu, 0x00000008u, 0x0000015du, 0x000007ffu, 0x0004002bu, 0x00000008u, 0x00000164u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x00000170u, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x00000175u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000193u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x000001b8u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000001dau, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000001e0u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000222u, 0x0000003cu, 0x00090019u, 0x00000257u, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000258u, 0x00000000u, 0x00000257u, 0x0004003bu, 0x00000258u, 0x00000259u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000295u, 0x0000000fu, 0x0003002au, 0x0000002cu, 0x00000298u, 0x0004002bu, 0x00000008u, 0x000002a8u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x000002aeu, 0x00000010u, 0x00030029u, 0x0000002cu, 0x000002b3u, 0x0004002bu, 0x00000008u, 0x000002b4u, 0x0000ffffu, 0x00040032u, 0x00000008u, 0x00000367u, 0x00000000u, 0x00040032u, 0x00000006u, 0x0000036du, 0x00000000u, 0x00060034u, 0x00000006u, 0x0000036eu, 0x00000082u, 0x0000036du, 0x000001dau, 0x0003001du, 0x00000376u, 0x0000009du, 0x0003001eu, 0x00000377u, 0x00000376u, 0x00040020u, 0x00000378u, 0x0000000cu, 0x00000377u, 0x0004003bu, 0x00000378u, 0x00000379u, 0x0000000cu, 0x00040020u, 0x00000380u, 0x00000006u, 0x00000009u, 0x0004003bu, 0x00000380u, 0x00000381u, 0x00000006u, 0x0003001du, 0x00000385u, 0x0000009du, 0x0003001eu, 0x00000386u, 0x00000385u, 0x00040020u, 0x00000387u, 0x0000000cu, 0x00000386u, 0x0004003bu, 0x00000387u, 0x00000388u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000391u, 0x000000c2u, 0x0000036eu, 0x000001dau, 0x00060034u, 0x00000006u, 0x00000395u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x0003001du, 0x0000039au, 0x0000009fu, 0x0003001eu, 0x0000039bu, 0x0000039au, 0x00040020u, 0x0000039cu, 0x0000000cu, 0x0000039bu, 0x0004003bu, 0x0000039cu, 0x0000039du, 0x0000000cu, 0x00040017u, 0x000003a3u, 0x00000006u, 0x00000003u, 0x00040020u, 0x000003a4u, 0x00000007u, 0x000003a3u, 0x0004002bu, 0x00000006u, 0x000003a7u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000003aeu, 0x000000f8u, 0x00060034u, 0x00000006u, 0x000003c6u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x0004002bu, 0x00000006u, 0x000003d5u, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000003ddu, 0x000000c2u, 0x0000036eu, 0x00000193u, 0x00060034u, 0x00000006u, 0x000003e1u, 0x000000c2u, 0x0000036du, 0x000000b5u, 0x0003001du, 0x000003e6u, 0x00000006u, 0x0003001eu, 0x000003e7u, 0x000003e6u, 0x00040020u, 0x000003e8u, 0x0000000cu, 0x000003e7u, 0x0004003bu, 0x000003e8u, 0x000003e9u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000003efu, 0x00000018u, 0x0004002bu, 0x00000006u, 0x000003f0u, 0x00000010u, 0x0007002cu, 0x000000abu, 0x000003f1u, 0x000003efu, 0x000003f0u, 0x000003a7u, 0x000001b8u, 0x0007002cu, 0x000000abu, 0x000003f3u, 0x000003d5u, 0x000003d5u, 0x000003d5u, 0x000003d5u, 0x0004003bu, 0x0000009au, 0x000003fbu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000408u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000415u, 0x00000004u, 0x0004003bu, 0x0000009au, 0x00000419u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000442u, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000448u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000453u, 0x00000007u, 0x00040020u, 0x00000465u, 0x00000006u, 0x0000002cu, 0x0004003bu, 0x00000465u, 0x00000466u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000046au, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00040032u, 0x00000008u, 0x0000049eu, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000049fu, 0x000000c7u, 0x0000049eu, 0x000000afu, 0x00060034u, 0x0000002cu, 0x000004a0u, 0x000000abu, 0x0000049fu, 0x0000009cu, 0x00060034u, 0x00000008u, 0x000004a1u, 0x000000c3u, 0x0000049eu, 0x000000afu, 0x00060034u, 0x0000002cu, 0x000004a2u, 0x000000aau, 0x000004a1u, 0x0000009cu, 0x00060034u, 0x0000002cu, 0x000004a3u, 0x000000a7u, 0x000004a0u, 0x000004a2u, 0x0004002bu, 0x00000006u, 0x000004a6u, 0x00000048u, 0x00060034u, 0x00000006u, 0x000004d1u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00040020u, 0x000004d5u, 0x00000007u, 0x000000abu, 0x00060034u, 0x00000006u, 0x00000500u, 0x000000c2u, 0x0000036du, 0x000001dau, 0x0004002bu, 0x00000006u, 0x00000502u, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x00000509u, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000528u, 0x000000c2u, 0x0000036du, 0x000001dau, 0x00060034u, 0x00000006u, 0x00000530u, 0x000000c2u, 0x0000036du, 0x000000b5u, 0x00060034u, 0x00000006u, 0x0000055eu, 0x000000c2u, 0x0000036du, 0x00000193u, 0x0004002bu, 0x00000006u, 0x00000560u, 0xffffffffu, 0x00030031u, 0x0000002cu, 0x00000564u, 0x00050034u, 0x0000002cu, 0x00000565u, 0x000000a8u, 0x00000564u, 0x0004003bu, 0x00000465u, 0x00000568u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000056fu, 0x000000c2u, 0x0000036du, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000585u, 0x000000c2u, 0x0000036du, 0x000001dau, 0x00040017u, 0x0000058du, 0x0000002cu, 0x00000002u, 0x00060034u, 0x00000008u, 0x00000594u, 0x000000c4u, 0x000000afu, 0x000004a1u, 0x00060034u, 0x00000008u, 0x00000595u, 0x00000082u, 0x00000594u, 0x000000afu, 0x00060034u, 0x00000006u, 0x00000596u, 0x00000080u, 0x00000595u, 0x000001b8u, 0x00060034u, 0x00000006u, 0x0000059fu, 0x00000080u, 0x00000594u, 0x000001b8u, 0x00040020u, 0x000005afu, 0x00000006u, 0x00000006u, 0x0004003bu, 0x000005afu, 0x000005b0u, 0x00000006u, 0x00060034u, 0x00000008u, 0x000005f7u, 0x00000084u, 0x00000594u, 0x00000594u, 0x00060034u, 0x00000006u, 0x000005f8u, 0x00000080u, 0x000005f7u, 0x000001b8u, 0x00060034u, 0x00000006u, 0x000005f9u, 0x000000c2u, 0x0000036du, 0x000000b5u, 0x00060034u, 0x00000006u, 0x000005fau, 0x00000084u, 0x000005f8u, 0x000005f9u, 0x00060034u, 0x00000008u, 0x0000060eu, 0x00000082u, 0x00000594u, 0x000000afu, 0x00060034u, 0x00000006u, 0x0000060fu, 0x00000080u, 0x0000060eu, 0x000001b8u, 0x00060034u, 0x00000006u, 0x00000618u, 0x00000080u, 0x00000594u, 0x000001b8u, 0x00060034u, 0x0000002cu, 0x0000063au, 0x000000abu, 0x000004a1u, 0x0000009cu, 0x00060034u, 0x0000002cu, 0x0000063bu, 0x000000a7u, 0x000004a0u, 0x0000063au, 0x0004002bu, 0x00000008u, 0x0000064au, 0x000000e0u, 0x0006002cu, 0x00000014u, 0x00000655u, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x00060034u, 0x0000002cu, 0x0000066eu, 0x000000aau, 0x00000367u, 0x0000009cu, 0x0007002cu, 0x00000009u, 0x0000067bu, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x0000009cu, 0x0004002bu, 0x00000006u, 0x00000694u, 0x000000e0u, 0x0004002bu, 0x00000008u, 0x0000071eu, 0x000001ffu, 0x0004001cu, 0x0000072au, 0x0000009du, 0x000003a7u, 0x0005001eu, 0x0000072bu, 0x0000009eu, 0x0000009eu, 0x0000072au, 0x0003001du, 0x0000072cu, 0x0000072bu, 0x0003001eu, 0x0000072du, 0x0000072cu, 0x00040020u, 0x0000072eu, 0x0000000cu, 0x0000072du, 0x0004003bu, 0x0000072eu, 0x0000072fu, 0x0000000cu, 0x00040020u, 0x00000734u, 0x00000007u, 0x0000000au, 0x00040020u, 0x00000739u, 0x00000007u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x00000755u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x0000075bu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000761u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000767u, 0x00000100u, 0x00040020u, 0x00000803u, 0x00000001u, 0x000003a3u, 0x0004003bu, 0x00000803u, 0x00000804u, 0x00000001u, 0x00040020u, 0x00000805u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00000803u, 0x0000080eu, 0x00000001u, 0x00040032u, 0x00000008u, 0x00000817u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00000818u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00000819u, 0x00000001u, 0x00060033u, 0x000003a3u, 0x0000081au, 0x00000818u, 0x00000819u, 0x000001dau, 0x00060034u, 0x00000006u, 0x0000081bu, 0x00000051u, 0x0000081au, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000081cu, 0x00000080u, 0x0000081bu, 0x000001b8u, 0x00060034u, 0x00000008u, 0x0000081du, 0x00000087u, 0x00000817u, 0x0000081cu, 0x00040032u, 0x00000008u, 0x00000822u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x00000823u, 0x00000020u, 0x00060034u, 0x00000008u, 0x00000824u, 0x00000087u, 0x00000822u, 0x00000823u, 0x0003001du, 0x00000827u, 0x00000006u, 0x0003001eu, 0x00000828u, 0x00000827u, 0x00040020u, 0x00000829u, 0x0000000cu, 0x00000828u, 0x0004003bu, 0x00000829u, 0x0000082au, 0x0000000cu, 0x0007001eu, 0x0000082eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000082fu, 0x00000009u, 0x0000082eu, 0x0004003bu, 0x0000082fu, 0x00000830u, 0x00000009u, 0x00040020u, 0x00000831u, 0x00000009u, 0x00000006u, 0x0003001du, 0x0000085bu, 0x00000006u, 0x0003001eu, 0x0000085cu, 0x0000085bu, 0x00040020u, 0x0000085du, 0x0000000cu, 0x0000085cu, 0x0004003bu, 0x0000085du, 0x0000085eu, 0x0000000cu, 0x0003001du, 0x00000865u, 0x00000006u, 0x0003001eu, 0x00000866u, 0x00000865u, 0x00040020u, 0x00000867u, 0x0000000cu, 0x00000866u, 0x0004003bu, 0x00000867u, 0x00000868u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000886u, 0x00000051u, 0x0000081au, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000887u, 0x00000051u, 0x0000081au, 0x00000001u, 0x00060034u, 0x00000006u, 0x00000888u, 0x00000084u, 0x00000886u, 0x00000887u, 0x0004003bu, 0x00000805u, 0x0000088au, 0x00000001u, 0x00040015u, 0x0000088eu, 0x00000008u, 0x00000001u, 0x0003001du, 0x0000088fu, 0x0000088eu, 0x0003001eu, 0x00000890u, 0x0000088fu, 0x00040020u, 0x00000891u, 0x0000000cu, 0x00000890u, 0x0004003bu, 0x00000891u, 0x00000892u, 0x0000000cu, 0x00040020u, 0x00000894u, 0x0000000cu, 0x0000088eu, 0x0004002bu, 0x00000008u, 0x0000089du, 0x00000040u, 0x0003001du, 0x000008aeu, 0x00000006u, 0x0003001eu, 0x000008afu, 0x000008aeu, 0x00040020u, 0x000008b0u, 0x0000000cu, 0x000008afu, 0x0004003bu, 0x000008b0u, 0x000008b1u, 0x0000000cu, 0x0003001du, 0x000008bcu, 0x0000009eu, 0x0003001eu, 0x000008bdu, 0x000008bcu, 0x00040020u, 0x000008beu, 0x0000000cu, 0x000008bdu, 0x0004003bu, 0x000008beu, 0x000008bfu, 0x0000000cu, 0x0003001du, 0x000008c6u, 0x00000008u, 0x0003001eu, 0x000008c7u, 0x000008c6u, 0x00040020u, 0x000008c8u, 0x0000000cu, 0x000008c7u, 0x0004003bu, 0x000008c8u, 0x000008c9u, 0x0000000cu, 0x00040020u, 0x000008cbu, 0x0000000cu, 0x00000008u, 0x0003001du, 0x000008cfu, 0x0000009du, 0x0003001eu, 0x000008d0u, 0x000008cfu, 0x00040020u, 0x000008d1u, 0x0000000cu, 0x000008d0u, 0x0004003bu, 0x000008d1u, 0x000008d2u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x000008f6u, 0x00000080u, 0x0004002bu, 0x00000008u, 0x000008f7u, 0x00000100u, 0x0004002bu, 0x00000008u, 0x000008f8u, 0x00000200u, 0x0004002bu, 0x00000008u, 0x000008f9u, 0x00000400u, 0x0004002bu, 0x00000008u, 0x000008fau, 0x00000800u, 0x0004002bu, 0x00000008u, 0x000008fbu, 0x00001000u, 0x0004002bu, 0x00000008u, 0x000008fcu, 0x00002000u, 0x0004002bu, 0x00000008u, 0x000008fdu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x000008feu, 0x00010000u, 0x0004002bu, 0x00000008u, 0x000008ffu, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000900u, 0x00080000u, 0x0004002bu, 0x00000008u, 0x00000901u, 0x00100000u, 0x0004002bu, 0x00000008u, 0x00000902u, 0x00200000u, 0x0004002bu, 0x00000008u, 0x00000903u, 0x00400000u, 0x0004002bu, 0x00000008u, 0x00000904u, 0x00800000u, 0x0004002bu, 0x00000008u, 0x00000905u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x00000906u, 0x0000001au, 0x0004002bu, 0x00000008u, 0x00000907u, 0x10000000u, 0x0004002bu, 0x00000008u, 0x00000908u, 0x20000000u, 0x0004002bu, 0x00000008u, 0x00000909u, 0x40000000u, 0x0004002bu, 0x00000006u, 0x0000090au, 0x00000800u, 0x0004001cu, 0x0000090bu, 0x0000009fu, 0x0000090au, 0x0003001eu, 0x0000090cu, 0x0000090bu, 0x0003001du, 0x0000090du, 0x0000090cu, 0x0003001eu, 0x0000090eu, 0x0000090du, 0x00040020u, 0x0000090fu, 0x0000000cu, 0x0000090eu, 0x0004003bu, 0x0000090fu, 0x00000910u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000911u, 0x00001000u, 0x0004001cu, 0x00000912u, 0x0000009du, 0x00000911u, 0x0003001eu, 0x00000913u, 0x00000912u, 0x0003001du, 0x00000914u, 0x00000913u, 0x0003001eu, 0x00000915u, 0x00000914u, 0x00040020u, 0x00000916u, 0x0000000cu, 0x00000915u, 0x0004003bu, 0x00000916u, 0x00000917u, 0x0000000cu, 0x000d001eu, 0x00000918u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000000a0u, 0x000000a0u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000000a0u, 0x0000009du, 0x0000009du, 0x0003001du, 0x00000919u, 0x00000918u, 0x0003001eu, 0x0000091au, 0x00000919u, 0x00040020u, 0x0000091bu, 0x0000000cu, 0x0000091au, 0x0004003bu, 0x0000091bu, 0x0000091cu, 0x0000000cu, 0x000a001eu, 0x0000091du, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x0000091eu, 0x0000091du, 0x0003001eu, 0x0000091fu, 0x0000091eu, 0x00040020u, 0x00000920u, 0x0000000cu, 0x0000091fu, 0x0004003bu, 0x00000920u, 0x00000921u, 0x0000000cu, 0x0003001du, 0x00000922u, 0x00000009u, 0x0003001eu, 0x00000923u, 0x00000922u, 0x00040020u, 0x00000924u, 0x0000000cu, 0x00000923u, 0x0004003bu, 0x00000924u, 0x00000925u, 0x0000000cu, 0x000a001eu, 0x00000926u, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x0000009eu, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000927u, 0x00000926u, 0x0003001eu, 0x00000928u, 0x00000927u, 0x00040020u, 0x00000929u, 0x0000000cu, 0x00000928u, 0x0004003bu, 0x00000929u, 0x0000092au, 0x0000000cu, 0x0010001eu, 0x0000092bu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0000009du, 0x0003001du, 0x0000092cu, 0x0000092bu, 0x0003001eu, 0x0000092du, 0x0000092cu, 0x00040020u, 0x0000092eu, 0x0000000cu, 0x0000092du, 0x0004003bu, 0x0000092eu, 0x0000092fu, 0x0000000cu, 0x00040017u, 0x00000930u, 0x0000009fu, 0x00000004u, 0x000b001eu, 0x00000931u, 0x00000009u, 0x00000009u, 0x00000930u, 0x00000930u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000000a0u, 0x0000009fu, 0x0003001du, 0x00000932u, 0x00000931u, 0x0003001eu, 0x00000933u, 0x00000932u, 0x00040020u, 0x00000934u, 0x0000000cu, 0x00000933u, 0x0004003bu, 0x00000934u, 0x00000935u, 0x0000000cu, 0x0006001eu, 0x00000936u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000937u, 0x00000936u, 0x0003001eu, 0x00000938u, 0x00000937u, 0x00040020u, 0x00000939u, 0x0000000cu, 0x00000938u, 0x0004003bu, 0x00000939u, 0x0000093au, 0x0000000cu, 0x0006001eu, 0x0000093bu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x0000093cu, 0x0000093bu, 0x00040020u, 0x0000093du, 0x00000002u, 0x0000093cu, 0x0004003bu, 0x0000093du, 0x0000093eu, 0x00000002u, 0x0004001cu, 0x0000093fu, 0x00000008u, 0x000003f0u, 0x0004001cu, 0x00000940u, 0x0000093fu, 0x00000193u, 0x0013002cu, 0x0000093fu, 0x00000941u, 0x0000009cu, 0x000000cdu, 0x000000afu, 0x000000d3u, 0x000000c1u, 0x000000b5u, 0x000000c7u, 0x000000bbu, 0x000000bbu, 0x000000c7u, 0x000000b5u, 0x000000c1u, 0x000000d3u, 0x000000afu, 0x000000cdu, 0x0000009cu, 0x0013002cu, 0x0000093fu, 0x00000942u, 0x0000009cu, 0x000000c1u, 0x000000afu, 0x000000c7u, 0x000000c1u, 0x0000009cu, 0x000000c7u, 0x000000afu, 0x000000bbu, 0x000000d3u, 0x000000b5u, 0x000000cdu, 0x000000d3u, 0x000000bbu, 0x000000cdu, 0x000000b5u, 0x0005002cu, 0x00000940u, 0x00000943u, 0x00000941u, 0x00000942u, 0x0003002eu, 0x00000009u, 0x0000117du, 0x0003002eu, 0x00000006u, 0x00001180u, 0x0003002eu, 0x00000008u, 0x00001183u, 0x00030001u, 0x00000014u, 0x00001244u, 0x00030001u, 0x00000008u, 0x0000133au, 0x00030001u, 0x00000008u, 0x000018e9u, 0x00030001u, 0x00000014u, 0x000018ffu, 0x00030001u, 0x00000014u, 0x00001926u, 0x0006002cu, 0x000003a3u, 0x00001957u, 0x000003aeu, 0x000003aeu, 0x000003aeu, 0x0005002cu, 0x0000006bu, 0x00001958u, 0x000001e0u, 0x000001e0u, 0x0006002cu, 0x00000014u, 0x00001959u, 0x0000012eu, 0x0000012eu, 0x0000012eu, 0x0006002cu, 0x00000014u, 0x0000195au, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x0006002cu, 0x00000014u, 0x0000195bu, 0x000000d9u, 0x000000d9u, 0x000000d9u, 0x0006002cu, 0x00000014u, 0x0000195cu, 0x00000141u, 0x00000141u, 0x00000141u, 0x0006002cu, 0x00000014u, 0x0000195du, 0x000000c7u, 0x000000c7u, 0x000000c7u, 0x0006002cu, 0x00000014u, 0x0000195eu, 0x000000b5u, 0x000000b5u, 0x000000b5u, 0x0006002cu, 0x00000014u, 0x0000195fu, 0x0000015du, 0x0000015du, 0x0000015du, 0x00040017u, 0x00001961u, 0x0000002cu, 0x00000004u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000016u, 0x000011d0u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011cfu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011ceu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011cdu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011c7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011c6u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011c5u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011c4u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011bau, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011b9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011b8u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011b7u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011b6u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011acu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011abu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011aau, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011a9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011a8u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001196u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001195u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001194u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001193u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001192u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000118cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000118bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000118au, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001189u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001188u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001182u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00001181u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000117fu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000117eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000115du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000115cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000115bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000115au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001159u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001158u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001157u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001156u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001155u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001154u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001153u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001152u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001151u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001150u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000114fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000113fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000113eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000113du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000113cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000113bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000113au, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00001139u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000009bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001102u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00001103u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001104u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00001105u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001106u, 0x00000007u, 0x0004003bu, 0x000004d5u, 0x00001014u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001015u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001016u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00001017u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001018u, 0x00000007u, 0x0004003bu, 0x000004d5u, 0x00001019u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000101au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd7u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000fd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdeu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000fdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fe0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f9fu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000fa0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f77u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f5fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f60u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f61u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f62u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f63u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f3eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000f3fu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f16u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f17u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f18u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f19u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000f1au, 0x00000007u, 0x0005003bu, 0x0000002du, 0x00000e46u, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000015u, 0x00000e47u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e48u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e49u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000e4au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000e4bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e4cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000e4du, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000e4eu, 0x00000007u, 0x0005003bu, 0x0000002du, 0x00000d76u, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000015u, 0x00000d77u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d78u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d79u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d7au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d7bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d7cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d7du, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000d7eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d72u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d69u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d66u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d50u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d51u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d52u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d53u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d54u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000d55u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c9fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca0u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000ca1u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000ca2u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000ca3u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca4u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca5u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca6u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca7u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000ca8u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000ca9u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000caau, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000cabu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000cacu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000cadu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000caeu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c79u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000c7au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000c7bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000c7cu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b38u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b39u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b3au, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b3bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b41u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b42u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b43u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b44u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b45u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b46u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b47u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b48u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b49u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b4au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b4cu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b4fu, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b50u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b51u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b52u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b53u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b54u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b55u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b56u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b57u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b58u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b59u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5bu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5cu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b5du, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b5eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b60u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b62u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b63u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b64u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b65u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b66u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b67u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b68u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000b69u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b6bu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b6cu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b6du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b6eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b6fu, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000b70u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b71u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000b72u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b73u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b74u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b75u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b76u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000b77u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b78u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000b79u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000b7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b00u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000b01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b03u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000ac7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ac8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ac9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000acau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000acbu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000accu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a8fu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x00000a90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a06u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000a07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a0bu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000a0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a0eu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000a0fu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000a10u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000009ebu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000982u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000983u, 0x00000007u, 0x0004003bu, 0x000003a4u, 0x00000984u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000985u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000986u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000094cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000094du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000094eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000094fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000950u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000951u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000952u, 0x00000007u, 0x0005003bu, 0x0000002du, 0x00000946u, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000016u, 0x00000802u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000809u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x0000080du, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000812u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000820u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000826u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000083au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000083du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000840u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000843u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000846u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000851u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000085au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000864u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000875u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000087eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000884u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000088du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000008dbu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000008ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008dfu, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000008e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f2u, 0x00000007u, 0x000300f7u, 0x00000944u, 0x00000000u, 0x000300fbu, 0x000001b8u, 0x00000945u, 0x000200f8u, 0x00000945u, 0x0003003eu, 0x0000009bu, 0x0000009cu, 0x00050041u, 0x00000805u, 0x00000806u, 0x00000804u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000807u, 0x00000806u, 0x0004007cu, 0x00000008u, 0x00000808u, 0x00000807u, 0x0003003eu, 0x00000802u, 0x00000808u, 0x00050041u, 0x00000805u, 0x0000080au, 0x00000804u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000080bu, 0x0000080au, 0x0004007cu, 0x00000008u, 0x0000080cu, 0x0000080bu, 0x0003003eu, 0x00000809u, 0x0000080cu, 0x0004003du, 0x000003a3u, 0x0000080fu, 0x0000080eu, 0x0007004fu, 0x0000006bu, 0x00000810u, 0x0000080fu, 0x0000080fu, 0x00000000u, 0x00000001u, 0x0004007cu, 0x0000002eu, 0x00000811u, 0x00000810u, 0x0003003eu, 0x0000080du, 0x00000811u, 0x00050041u, 0x00000016u, 0x00000813u, 0x0000080du, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000814u, 0x00000813u, 0x00050041u, 0x00000016u, 0x00000815u, 0x0000080du, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000816u, 0x00000815u, 0x00050084u, 0x00000008u, 0x0000081eu, 0x00000816u, 0x0000081du, 0x00050080u, 0x00000008u, 0x0000081fu, 0x00000814u, 0x0000081eu, 0x0003003eu, 0x00000812u, 0x0000081fu, 0x00050084u, 0x00000008u, 0x00000825u, 0x0000081fu, 0x00000824u, 0x0003003eu, 0x00000820u, 0x00000825u, 0x00060041u, 0x000000e6u, 0x0000082cu, 0x0000082au, 0x0000009cu, 0x0000081fu, 0x0004003du, 0x00000006u, 0x0000082du, 0x0000082cu, 0x00050041u, 0x00000831u, 0x00000832u, 0x00000830u, 0x000000c1u, 0x0004003du, 0x00000006u, 0x00000833u, 0x00000832u, 0x000500c7u, 0x00000006u, 0x00000834u, 0x0000082du, 0x00000833u, 0x0003003eu, 0x00000826u, 0x00000834u, 0x000500aau, 0x0000002cu, 0x00000836u, 0x00000834u, 0x000001b8u, 0x000300f7u, 0x00000838u, 0x00000000u, 0x000400fau, 0x00000836u, 0x00000837u, 0x00000838u, 0x000200f8u, 0x00000837u, 0x0003003eu, 0x00000946u, 0x000002b3u, 0x000200f9u, 0x00000944u, 0x000200f8u, 0x00000838u, 0x0004003du, 0x000003a3u, 0x0000083bu, 0x00000804u, 0x0007004fu, 0x0000006bu, 0x0000083cu, 0x0000083bu, 0x0000083bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000083au, 0x0000083cu, 0x00050041u, 0x00000831u, 0x0000083eu, 0x00000830u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x0000083fu, 0x0000083eu, 0x0003003eu, 0x0000083du, 0x0000083fu, 0x00050041u, 0x00000831u, 0x00000841u, 0x00000830u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x00000842u, 0x00000841u, 0x0003003eu, 0x00000840u, 0x00000842u, 0x00050041u, 0x00000831u, 0x00000844u, 0x00000830u, 0x0000009cu, 0x0004003du, 0x00000006u, 0x00000845u, 0x00000844u, 0x0003003eu, 0x00000843u, 0x00000845u, 0x00050041u, 0x00000831u, 0x00000847u, 0x00000830u, 0x000000afu, 0x0004003du, 0x00000006u, 0x00000848u, 0x00000847u, 0x0003003eu, 0x00000846u, 0x00000848u, 0x0003003eu, 0x00000466u, 0x00000298u, 0x0003003eu, 0x00000568u, 0x00000298u, 0x0004003du, 0x0000006bu, 0x00000953u, 0x0000083au, 0x00050050u, 0x0000006bu, 0x00000956u, 0x0000083fu, 0x00000842u, 0x000500b0u, 0x0000058du, 0x00000957u, 0x00000953u, 0x00000956u, 0x0004009bu, 0x0000002cu, 0x00000958u, 0x00000957u, 0x000300f7u, 0x00000959u, 0x00000000u, 0x000400fau, 0x00000958u, 0x0000095au, 0x00000959u, 0x000200f8u, 0x0000095au, 0x0004003du, 0x0000006bu, 0x0000095bu, 0x0000083au, 0x00050050u, 0x0000006bu, 0x0000095cu, 0x00000596u, 0x00000596u, 0x000500c7u, 0x0000006bu, 0x0000095du, 0x0000095bu, 0x0000095cu, 0x0003003eu, 0x0000094cu, 0x0000095du, 0x0004003du, 0x0000006bu, 0x0000095eu, 0x0000083au, 0x00050050u, 0x0000002eu, 0x0000095fu, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x00000960u, 0x0000095eu, 0x0000095fu, 0x0003003eu, 0x0000083au, 0x00000960u, 0x00050041u, 0x00000007u, 0x00000961u, 0x0000094cu, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000962u, 0x00000961u, 0x00050084u, 0x00000006u, 0x00000963u, 0x00000962u, 0x0000059fu, 0x00050041u, 0x00000007u, 0x00000964u, 0x0000094cu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000965u, 0x00000964u, 0x00050080u, 0x00000006u, 0x00000966u, 0x00000963u, 0x00000965u, 0x0003003eu, 0x0000094du, 0x00000966u, 0x000500c2u, 0x00000006u, 0x00000969u, 0x0000083fu, 0x000004a1u, 0x00050041u, 0x00000007u, 0x0000096au, 0x0000083au, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000096bu, 0x0000096au, 0x00050084u, 0x00000006u, 0x0000096cu, 0x00000969u, 0x0000096bu, 0x00050080u, 0x00000006u, 0x0000096du, 0x00000845u, 0x0000096cu, 0x00050041u, 0x00000007u, 0x0000096eu, 0x0000083au, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000096fu, 0x0000096eu, 0x00050080u, 0x00000006u, 0x00000970u, 0x0000096du, 0x0000096fu, 0x0003003eu, 0x0000094eu, 0x00000970u, 0x0003003eu, 0x000005b0u, 0x00000970u, 0x0003003eu, 0x0000094fu, 0x00000970u, 0x0003003eu, 0x00000950u, 0x00000966u, 0x000300f7u, 0x00000987u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000987u, 0x00000000u, 0x00000988u, 0x00000001u, 0x00000988u, 0x00000002u, 0x00000989u, 0x00000003u, 0x0000098au, 0x00000004u, 0x0000098bu, 0x000200f8u, 0x0000098bu, 0x000500c7u, 0x00000006u, 0x000009deu, 0x00000970u, 0x000003ddu, 0x0003003eu, 0x0000094fu, 0x000009deu, 0x00050084u, 0x00000006u, 0x000009e0u, 0x00000966u, 0x000003e1u, 0x00050080u, 0x00000006u, 0x000009e2u, 0x000009deu, 0x000009e0u, 0x0003003eu, 0x0000094fu, 0x000009e2u, 0x00060041u, 0x000000e6u, 0x000009e4u, 0x000003e9u, 0x0000009cu, 0x000009e2u, 0x0004003du, 0x00000006u, 0x000009e5u, 0x000009e4u, 0x0003003eu, 0x00000986u, 0x000009e5u, 0x00070050u, 0x000000abu, 0x000009e7u, 0x000009e5u, 0x000009e5u, 0x000009e5u, 0x000009e5u, 0x000500c2u, 0x000000abu, 0x000009e8u, 0x000009e7u, 0x000003f1u, 0x000500c7u, 0x000000abu, 0x000009e9u, 0x000009e8u, 0x000003f3u, 0x0004007cu, 0x00000009u, 0x000009eau, 0x000009e9u, 0x0003003eu, 0x00000381u, 0x000009eau, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x0000098au, 0x000500c7u, 0x00000006u, 0x000009c8u, 0x00000970u, 0x00000391u, 0x0003003eu, 0x0000094fu, 0x000009c8u, 0x00050084u, 0x00000006u, 0x000009cau, 0x00000966u, 0x000003c6u, 0x00050080u, 0x00000006u, 0x000009ccu, 0x000009c8u, 0x000009cau, 0x0003003eu, 0x0000094fu, 0x000009ccu, 0x000500c6u, 0x00000006u, 0x000009ceu, 0x000009ccu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000009cfu, 0x0000039du, 0x0000009cu, 0x000009ceu, 0x0004003du, 0x0000009fu, 0x000009d0u, 0x000009cfu, 0x00040071u, 0x00000006u, 0x000009d1u, 0x000009d0u, 0x0003003eu, 0x00000985u, 0x000009d1u, 0x000500c2u, 0x00000006u, 0x000009d3u, 0x000009d1u, 0x000003a7u, 0x0004007cu, 0x00000008u, 0x000009d4u, 0x000009d3u, 0x00060050u, 0x00000014u, 0x000009d5u, 0x000009d4u, 0x000009d4u, 0x000009d4u, 0x000500c7u, 0x00000006u, 0x000009d7u, 0x000009d1u, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x000009d8u, 0x000009d7u, 0x00070050u, 0x00000009u, 0x000009dcu, 0x000009d4u, 0x000009d4u, 0x000009d4u, 0x000009d8u, 0x0003003eu, 0x00000381u, 0x000009dcu, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000989u, 0x000500c7u, 0x00000006u, 0x000009a3u, 0x00000970u, 0x00000391u, 0x0003003eu, 0x0000094fu, 0x000009a3u, 0x00050084u, 0x00000006u, 0x000009a5u, 0x00000966u, 0x00000395u, 0x00050080u, 0x00000006u, 0x000009a7u, 0x000009a3u, 0x000009a5u, 0x0003003eu, 0x0000094fu, 0x000009a7u, 0x000500c6u, 0x00000006u, 0x000009a9u, 0x000009a7u, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000009aau, 0x0000039du, 0x0000009cu, 0x000009a9u, 0x0004003du, 0x0000009fu, 0x000009abu, 0x000009aau, 0x00040071u, 0x00000006u, 0x000009acu, 0x000009abu, 0x0003003eu, 0x00000983u, 0x000009acu, 0x000500c2u, 0x00000006u, 0x000009aeu, 0x000009acu, 0x000003a7u, 0x000500c2u, 0x00000006u, 0x000009b0u, 0x000009acu, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x000009b2u, 0x000009acu, 0x00000193u, 0x00060050u, 0x000003a3u, 0x000009b3u, 0x000009aeu, 0x000009b0u, 0x000009b2u, 0x000500c7u, 0x000003a3u, 0x000009b5u, 0x000009b3u, 0x00001957u, 0x0003003eu, 0x00000984u, 0x000009b5u, 0x0004007cu, 0x00000014u, 0x000009b7u, 0x000009b5u, 0x00060041u, 0x000000f2u, 0x000009b9u, 0x00000388u, 0x0000009cu, 0x000009a7u, 0x0004003du, 0x0000009du, 0x000009bau, 0x000009b9u, 0x00040071u, 0x00000006u, 0x000009bbu, 0x000009bau, 0x0004007cu, 0x00000008u, 0x000009bcu, 0x000009bbu, 0x000500c4u, 0x00000008u, 0x000009bdu, 0x000009bcu, 0x000000c7u, 0x000500c7u, 0x00000006u, 0x000009bfu, 0x000009acu, 0x000001dau, 0x000500c4u, 0x00000006u, 0x000009c0u, 0x000009bfu, 0x000000d3u, 0x0004007cu, 0x00000008u, 0x000009c1u, 0x000009c0u, 0x000500c5u, 0x00000008u, 0x000009c2u, 0x000009bdu, 0x000009c1u, 0x00050051u, 0x00000008u, 0x000009c3u, 0x000009b7u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000009c4u, 0x000009b7u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000009c5u, 0x000009b7u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000009c6u, 0x000009c3u, 0x000009c4u, 0x000009c5u, 0x000009c2u, 0x0003003eu, 0x00000381u, 0x000009c6u, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000988u, 0x000500c7u, 0x00000006u, 0x0000098du, 0x00000970u, 0x0000036eu, 0x0003003eu, 0x0000094fu, 0x0000098du, 0x00050084u, 0x00000006u, 0x0000098fu, 0x00000966u, 0x0000036du, 0x00050080u, 0x00000006u, 0x00000991u, 0x0000098du, 0x0000098fu, 0x0003003eu, 0x0000094fu, 0x00000991u, 0x000500c6u, 0x00000006u, 0x00000993u, 0x00000991u, 0x000001e0u, 0x00060041u, 0x000000f2u, 0x00000994u, 0x00000379u, 0x0000009cu, 0x00000993u, 0x0004003du, 0x0000009du, 0x00000995u, 0x00000994u, 0x00040071u, 0x00000006u, 0x00000996u, 0x00000995u, 0x0004007cu, 0x00000008u, 0x00000997u, 0x00000996u, 0x0003003eu, 0x00000982u, 0x00000997u, 0x000500c2u, 0x00000006u, 0x0000099cu, 0x00000991u, 0x000000afu, 0x00060041u, 0x000000f2u, 0x0000099du, 0x00000388u, 0x0000009cu, 0x0000099cu, 0x0004003du, 0x0000009du, 0x0000099eu, 0x0000099du, 0x00040071u, 0x00000006u, 0x0000099fu, 0x0000099eu, 0x0004007cu, 0x00000008u, 0x000009a0u, 0x0000099fu, 0x00070050u, 0x00000009u, 0x000009a1u, 0x00000997u, 0x00000997u, 0x00000997u, 0x000009a0u, 0x0003003eu, 0x00000381u, 0x000009a1u, 0x000200f9u, 0x00000987u, 0x000200f8u, 0x00000987u, 0x0004003du, 0x00000006u, 0x00000979u, 0x0000096au, 0x00050084u, 0x00000006u, 0x0000097au, 0x00000969u, 0x00000979u, 0x00050080u, 0x00000006u, 0x0000097bu, 0x00000848u, 0x0000097au, 0x0004003du, 0x00000006u, 0x0000097du, 0x0000096eu, 0x00050080u, 0x00000006u, 0x0000097eu, 0x0000097bu, 0x0000097du, 0x0003003eu, 0x0000094eu, 0x0000097eu, 0x0003003eu, 0x00000951u, 0x0000097eu, 0x0003003eu, 0x00000952u, 0x00000966u, 0x000500c7u, 0x00000006u, 0x000009edu, 0x0000097eu, 0x00000391u, 0x0003003eu, 0x00000951u, 0x000009edu, 0x00050084u, 0x00000006u, 0x000009efu, 0x00000966u, 0x0000046au, 0x00050080u, 0x00000006u, 0x000009f1u, 0x000009edu, 0x000009efu, 0x0003003eu, 0x00000951u, 0x000009f1u, 0x000500c6u, 0x00000006u, 0x000009f3u, 0x000009f1u, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000009f4u, 0x0000039du, 0x0000009cu, 0x000009f3u, 0x0004003du, 0x0000009fu, 0x000009f5u, 0x000009f4u, 0x00040071u, 0x00000006u, 0x000009f6u, 0x000009f5u, 0x0004007cu, 0x00000008u, 0x000009f7u, 0x000009f6u, 0x0003003eu, 0x000009ebu, 0x000009f7u, 0x000500c3u, 0x00000008u, 0x000009f9u, 0x000009f7u, 0x000000b5u, 0x0003003eu, 0x00000419u, 0x000009f9u, 0x00060041u, 0x000000f2u, 0x000009fbu, 0x00000388u, 0x0000009cu, 0x000009f1u, 0x0004003du, 0x0000009du, 0x000009fcu, 0x000009fbu, 0x00040071u, 0x00000006u, 0x000009fdu, 0x000009fcu, 0x0004007cu, 0x00000008u, 0x000009feu, 0x000009fdu, 0x000500c7u, 0x00000008u, 0x00000a00u, 0x000009f7u, 0x000000bbu, 0x000500c4u, 0x00000008u, 0x00000a01u, 0x00000a00u, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x00000a02u, 0x000009feu, 0x00000a01u, 0x0003003eu, 0x000003fbu, 0x00000a02u, 0x000200f9u, 0x00000959u, 0x000200f8u, 0x00000959u, 0x000200f9u, 0x0000084au, 0x000200f8u, 0x0000084au, 0x000700f5u, 0x00000006u, 0x00001205u, 0x00000834u, 0x00000959u, 0x00000859u, 0x0000084du, 0x000700f5u, 0x00000014u, 0x000014a6u, 0x00001244u, 0x00000959u, 0x000014a5u, 0x0000084du, 0x000700f5u, 0x00000008u, 0x0000147bu, 0x0000133au, 0x00000959u, 0x0000147au, 0x0000084du, 0x000700f5u, 0x00000008u, 0x00001451u, 0x0000133au, 0x00000959u, 0x00001450u, 0x0000084du, 0x000700f5u, 0x00000014u, 0x00001374u, 0x00001244u, 0x00000959u, 0x00001373u, 0x0000084du, 0x000700f5u, 0x00000008u, 0x00001356u, 0x0000133au, 0x00000959u, 0x00001355u, 0x0000084du, 0x000700f5u, 0x00000008u, 0x00001338u, 0x0000133au, 0x00000959u, 0x00001337u, 0x0000084du, 0x000700f5u, 0x00000014u, 0x00001242u, 0x00001244u, 0x00000959u, 0x00001241u, 0x0000084du, 0x000500abu, 0x0000002cu, 0x00000850u, 0x00001205u, 0x000001b8u, 0x000400f6u, 0x0000084cu, 0x0000084du, 0x00000000u, 0x000400fau, 0x00000850u, 0x0000084bu, 0x0000084cu, 0x000200f8u, 0x0000084bu, 0x0006000cu, 0x00000008u, 0x00000853u, 0x00000001u, 0x00000049u, 0x00001205u, 0x0003003eu, 0x00000851u, 0x00000853u, 0x000500c4u, 0x00000008u, 0x00000855u, 0x000000afu, 0x00000853u, 0x0004007cu, 0x00000006u, 0x00000856u, 0x00000855u, 0x000400c8u, 0x00000006u, 0x00000857u, 0x00000856u, 0x000500c7u, 0x00000006u, 0x00000859u, 0x00001205u, 0x00000857u, 0x0003003eu, 0x00000826u, 0x00000859u, 0x00050080u, 0x00000008u, 0x00000861u, 0x00000825u, 0x00000853u, 0x00060041u, 0x000000e6u, 0x00000862u, 0x0000085eu, 0x0000009cu, 0x00000861u, 0x0004003du, 0x00000006u, 0x00000863u, 0x00000862u, 0x0003003eu, 0x0000085au, 0x00000863u, 0x00060041u, 0x000000e6u, 0x0000086cu, 0x00000868u, 0x0000009cu, 0x00000861u, 0x0004003du, 0x00000006u, 0x0000086du, 0x0000086cu, 0x0003003eu, 0x00000864u, 0x0000086du, 0x000200f9u, 0x0000086eu, 0x000200f8u, 0x0000086eu, 0x000700f5u, 0x00000014u, 0x000014a5u, 0x000014a6u, 0x0000084bu, 0x000018c9u, 0x00000871u, 0x000700f5u, 0x00000008u, 0x0000147au, 0x0000147bu, 0x0000084bu, 0x000018aeu, 0x00000871u, 0x000700f5u, 0x00000008u, 0x00001450u, 0x00001451u, 0x0000084bu, 0x00001893u, 0x00000871u, 0x000700f5u, 0x00000014u, 0x00001373u, 0x00001374u, 0x0000084bu, 0x0000186bu, 0x00000871u, 0x000700f5u, 0x00000008u, 0x00001355u, 0x00001356u, 0x0000084bu, 0x00001843u, 0x00000871u, 0x000700f5u, 0x00000008u, 0x00001337u, 0x00001338u, 0x0000084bu, 0x0000181bu, 0x00000871u, 0x000700f5u, 0x00000014u, 0x00001241u, 0x00001242u, 0x0000084bu, 0x000017ddu, 0x00000871u, 0x000700f5u, 0x00000006u, 0x00001233u, 0x00000863u, 0x0000084bu, 0x000008e5u, 0x00000871u, 0x000700f5u, 0x00000006u, 0x00001231u, 0x0000086du, 0x0000084bu, 0x0000087du, 0x00000871u, 0x000500abu, 0x0000002cu, 0x00000874u, 0x00001231u, 0x000001b8u, 0x000400f6u, 0x00000870u, 0x00000871u, 0x00000000u, 0x000400fau, 0x00000874u, 0x0000086fu, 0x00000870u, 0x000200f8u, 0x0000086fu, 0x0006000cu, 0x00000008u, 0x00000877u, 0x00000001u, 0x00000049u, 0x00001231u, 0x0003003eu, 0x00000875u, 0x00000877u, 0x000500c4u, 0x00000008u, 0x00000879u, 0x000000afu, 0x00000877u, 0x0004007cu, 0x00000006u, 0x0000087au, 0x00000879u, 0x000400c8u, 0x00000006u, 0x0000087bu, 0x0000087au, 0x000500c7u, 0x00000006u, 0x0000087du, 0x00001231u, 0x0000087bu, 0x0003003eu, 0x00000864u, 0x0000087du, 0x00050084u, 0x00000008u, 0x00000881u, 0x00000823u, 0x00000853u, 0x00050080u, 0x00000008u, 0x00000882u, 0x00000877u, 0x00000881u, 0x0004007cu, 0x00000006u, 0x00000883u, 0x00000882u, 0x0003003eu, 0x0000087eu, 0x00000883u, 0x00050084u, 0x00000006u, 0x00000889u, 0x00001233u, 0x00000888u, 0x0004003du, 0x00000006u, 0x0000088bu, 0x0000088au, 0x00050080u, 0x00000006u, 0x0000088cu, 0x00000889u, 0x0000088bu, 0x0003003eu, 0x00000884u, 0x0000088cu, 0x00060041u, 0x00000894u, 0x00000895u, 0x00000892u, 0x0000009cu, 0x0000088cu, 0x0004003du, 0x0000088eu, 0x00000896u, 0x00000895u, 0x00040072u, 0x00000008u, 0x00000897u, 0x00000896u, 0x0003003eu, 0x0000088du, 0x00000897u, 0x000500afu, 0x0000002cu, 0x00000899u, 0x00000897u, 0x0000009cu, 0x000300f7u, 0x0000089bu, 0x00000000u, 0x000400fau, 0x00000899u, 0x0000089au, 0x0000089bu, 0x000200f8u, 0x0000089au, 0x000500c7u, 0x00000008u, 0x0000089eu, 0x00000897u, 0x0000089du, 0x000500abu, 0x0000002cu, 0x0000089fu, 0x0000089eu, 0x0000009cu, 0x000300f7u, 0x000008a1u, 0x00000000u, 0x000400fau, 0x0000089fu, 0x000008a0u, 0x000008a7u, 0x000200f8u, 0x000008a7u, 0x000500c7u, 0x00000008u, 0x000008a9u, 0x00000897u, 0x00000823u, 0x000500abu, 0x0000002cu, 0x000008aau, 0x000008a9u, 0x0000009cu, 0x000300f7u, 0x000008acu, 0x00000000u, 0x000400fau, 0x000008aau, 0x000008abu, 0x000008bau, 0x000200f8u, 0x000008bau, 0x00060041u, 0x000000a8u, 0x000008c1u, 0x000008bfu, 0x0000009cu, 0x0000088cu, 0x0004003du, 0x0000009eu, 0x000008c2u, 0x000008c1u, 0x00040071u, 0x000000abu, 0x000008c3u, 0x000008c2u, 0x0004007cu, 0x00000009u, 0x000008c4u, 0x000008c3u, 0x0003003eu, 0x000011c4u, 0x000008c4u, 0x00060041u, 0x000008cbu, 0x000008ccu, 0x000008c9u, 0x0000009cu, 0x0000088cu, 0x0004003du, 0x00000008u, 0x000008cdu, 0x000008ccu, 0x0003003eu, 0x000011c5u, 0x000008cdu, 0x00060041u, 0x000000f2u, 0x000008d4u, 0x000008d2u, 0x0000009cu, 0x0000088cu, 0x0004003du, 0x0000009du, 0x000008d5u, 0x000008d4u, 0x00040071u, 0x00000006u, 0x000008d6u, 0x000008d5u, 0x0004007cu, 0x00000008u, 0x000008d7u, 0x000008d6u, 0x0003003eu, 0x000011c7u, 0x000008d7u, 0x0003003eu, 0x000011c6u, 0x00000897u, 0x0003003eu, 0x000008dbu, 0x00000808u, 0x0003003eu, 0x000008ddu, 0x0000080cu, 0x0003003eu, 0x000008dfu, 0x00000883u, 0x00070050u, 0x00000091u, 0x000011ccu, 0x000008c4u, 0x000008cdu, 0x00000897u, 0x000008d7u, 0x0003003eu, 0x000011cdu, 0x000008c4u, 0x0003003eu, 0x000011ceu, 0x000008cdu, 0x0003003eu, 0x000011cfu, 0x00000897u, 0x0003003eu, 0x000011d0u, 0x000008d7u, 0x000500c3u, 0x00000008u, 0x00000b7du, 0x000008cdu, 0x000000dfu, 0x0003003eu, 0x00000b38u, 0x00000b7du, 0x000500c7u, 0x00000008u, 0x00000b80u, 0x000008cdu, 0x0000071eu, 0x0003003eu, 0x00000b39u, 0x00000b80u, 0x0003003eu, 0x00000b3au, 0x00000897u, 0x0003003eu, 0x00000b3bu, 0x000008c4u, 0x0003003eu, 0x00000b3cu, 0x000008d7u, 0x00080041u, 0x000000f2u, 0x00000b88u, 0x0000072fu, 0x0000009cu, 0x00000883u, 0x0000009cu, 0x000001dau, 0x0004003du, 0x0000009du, 0x00000b89u, 0x00000b88u, 0x00040071u, 0x00000006u, 0x00000b8au, 0x00000b89u, 0x0003003eu, 0x00000b3du, 0x00000b8au, 0x0003003eu, 0x00000b3fu, 0x00000883u, 0x00070041u, 0x000000a8u, 0x00000c18u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x00000c19u, 0x00000c18u, 0x00040071u, 0x000000abu, 0x00000c1au, 0x00000c19u, 0x0004007cu, 0x00000009u, 0x00000c1bu, 0x00000c1au, 0x00070041u, 0x000000a8u, 0x00000c1du, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000afu, 0x0004003du, 0x0000009eu, 0x00000c1eu, 0x00000c1du, 0x00040071u, 0x000000abu, 0x00000c1fu, 0x00000c1eu, 0x0004007cu, 0x00000009u, 0x00000c20u, 0x00000c1fu, 0x00070041u, 0x000000a8u, 0x00000c22u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000b5u, 0x0004003du, 0x0000009eu, 0x00000c23u, 0x00000c22u, 0x00040071u, 0x000000abu, 0x00000c24u, 0x00000c23u, 0x0004007cu, 0x00000009u, 0x00000c25u, 0x00000c24u, 0x00070041u, 0x000000a8u, 0x00000c27u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000bbu, 0x0004003du, 0x0000009eu, 0x00000c28u, 0x00000c27u, 0x00040071u, 0x000000abu, 0x00000c29u, 0x00000c28u, 0x0004007cu, 0x00000009u, 0x00000c2au, 0x00000c29u, 0x00070041u, 0x000000a8u, 0x00000c2cu, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000c1u, 0x0004003du, 0x0000009eu, 0x00000c2du, 0x00000c2cu, 0x00040071u, 0x000000abu, 0x00000c2eu, 0x00000c2du, 0x0004007cu, 0x00000009u, 0x00000c2fu, 0x00000c2eu, 0x00070041u, 0x000000a8u, 0x00000c31u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000c7u, 0x0004003du, 0x0000009eu, 0x00000c32u, 0x00000c31u, 0x00040071u, 0x000000abu, 0x00000c33u, 0x00000c32u, 0x0004007cu, 0x00000009u, 0x00000c34u, 0x00000c33u, 0x00070041u, 0x000000a8u, 0x00000c36u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000cdu, 0x0004003du, 0x0000009eu, 0x00000c37u, 0x00000c36u, 0x00040071u, 0x000000abu, 0x00000c38u, 0x00000c37u, 0x0004007cu, 0x00000009u, 0x00000c39u, 0x00000c38u, 0x00070041u, 0x000000a8u, 0x00000c3bu, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000d3u, 0x0004003du, 0x0000009eu, 0x00000c3cu, 0x00000c3bu, 0x00040071u, 0x000000abu, 0x00000c3du, 0x00000c3cu, 0x0004007cu, 0x00000009u, 0x00000c3eu, 0x00000c3du, 0x00070041u, 0x000000a8u, 0x00000c40u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000d9u, 0x0004003du, 0x0000009eu, 0x00000c41u, 0x00000c40u, 0x00040071u, 0x000000abu, 0x00000c42u, 0x00000c41u, 0x0004007cu, 0x00000009u, 0x00000c43u, 0x00000c42u, 0x00070041u, 0x000000a8u, 0x00000c45u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000dfu, 0x0004003du, 0x0000009eu, 0x00000c46u, 0x00000c45u, 0x00040071u, 0x000000abu, 0x00000c47u, 0x00000c46u, 0x0004007cu, 0x00000009u, 0x00000c48u, 0x00000c47u, 0x00070041u, 0x000000e6u, 0x00000c4au, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x00000c4bu, 0x00000c4au, 0x00070041u, 0x000000ebu, 0x00000c4du, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000eau, 0x0004003du, 0x0000009fu, 0x00000c4eu, 0x00000c4du, 0x00040071u, 0x00000006u, 0x00000c4fu, 0x00000c4eu, 0x0004007cu, 0x00000008u, 0x00000c50u, 0x00000c4fu, 0x00070041u, 0x000000f2u, 0x00000c52u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000f1u, 0x0004003du, 0x0000009du, 0x00000c53u, 0x00000c52u, 0x00040071u, 0x00000006u, 0x00000c54u, 0x00000c53u, 0x0004007cu, 0x00000008u, 0x00000c55u, 0x00000c54u, 0x00070041u, 0x000000f2u, 0x00000c57u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000f8u, 0x0004003du, 0x0000009du, 0x00000c58u, 0x00000c57u, 0x00040071u, 0x00000006u, 0x00000c59u, 0x00000c58u, 0x0004007cu, 0x00000008u, 0x00000c5au, 0x00000c59u, 0x00070041u, 0x000000ffu, 0x00000c5cu, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000feu, 0x0004003du, 0x000000a1u, 0x00000c5du, 0x00000c5cu, 0x00040072u, 0x00000009u, 0x00000c5eu, 0x00000c5du, 0x00120050u, 0x0000000au, 0x00000c5fu, 0x00000c1bu, 0x00000c20u, 0x00000c25u, 0x00000c2au, 0x00000c2fu, 0x00000c34u, 0x00000c39u, 0x00000c3eu, 0x00000c43u, 0x00000c48u, 0x00000c4bu, 0x00000c50u, 0x00000c55u, 0x00000c5au, 0x00000c5eu, 0x0003003eu, 0x0000114fu, 0x00000c1bu, 0x0003003eu, 0x00001150u, 0x00000c20u, 0x0003003eu, 0x00001151u, 0x00000c25u, 0x0003003eu, 0x00001152u, 0x00000c2au, 0x0003003eu, 0x00001153u, 0x00000c2fu, 0x0003003eu, 0x00001154u, 0x00000c34u, 0x0003003eu, 0x00001155u, 0x00000c39u, 0x0003003eu, 0x00001156u, 0x00000c3eu, 0x0003003eu, 0x00001157u, 0x00000c43u, 0x0003003eu, 0x00001158u, 0x00000c48u, 0x0003003eu, 0x00001159u, 0x00000c4bu, 0x0003003eu, 0x0000115au, 0x00000c50u, 0x0003003eu, 0x0000115bu, 0x00000c55u, 0x0003003eu, 0x0000115cu, 0x00000c5au, 0x0003003eu, 0x0000115du, 0x00000c5eu, 0x0003003eu, 0x0000117eu, 0x00000c43u, 0x0003003eu, 0x0000117fu, 0x00000c48u, 0x0003003eu, 0x00001181u, 0x00000c50u, 0x0003003eu, 0x00001182u, 0x00000c55u, 0x0003003eu, 0x00000b41u, 0x00000b8au, 0x00070041u, 0x000000a8u, 0x00000c62u, 0x0000010au, 0x0000009cu, 0x00000b8au, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x00000c63u, 0x00000c62u, 0x00040071u, 0x000000abu, 0x00000c64u, 0x00000c63u, 0x0004007cu, 0x00000009u, 0x00000c65u, 0x00000c64u, 0x00070041u, 0x000000a8u, 0x00000c67u, 0x0000010au, 0x0000009cu, 0x00000b8au, 0x000000afu, 0x0004003du, 0x0000009eu, 0x00000c68u, 0x00000c67u, 0x00040071u, 0x000000abu, 0x00000c69u, 0x00000c68u, 0x0004007cu, 0x00000009u, 0x00000c6au, 0x00000c69u, 0x00070041u, 0x000000e6u, 0x00000c6cu, 0x0000010au, 0x0000009cu, 0x00000b8au, 0x000000b5u, 0x0004003du, 0x00000006u, 0x00000c6du, 0x00000c6cu, 0x00070041u, 0x000000f2u, 0x00000c6fu, 0x0000010au, 0x0000009cu, 0x00000b8au, 0x000000bbu, 0x0004003du, 0x0000009du, 0x00000c70u, 0x00000c6fu, 0x00040071u, 0x00000006u, 0x00000c71u, 0x00000c70u, 0x0004007cu, 0x00000008u, 0x00000c72u, 0x00000c71u, 0x00070041u, 0x000000f2u, 0x00000c74u, 0x0000010au, 0x0000009cu, 0x00000b8au, 0x000000c1u, 0x0004003du, 0x0000009du, 0x00000c75u, 0x00000c74u, 0x00040071u, 0x00000006u, 0x00000c76u, 0x00000c75u, 0x0004007cu, 0x00000008u, 0x00000c77u, 0x00000c76u, 0x000a0050u, 0x0000000fu, 0x00000c78u, 0x00000c65u, 0x00000c6au, 0x00000c6du, 0x00000c72u, 0x00000c77u, 0x0000009cu, 0x0000009cu, 0x0003003eu, 0x00001139u, 0x00000c65u, 0x0003003eu, 0x0000113au, 0x00000c6au, 0x0003003eu, 0x0000113bu, 0x00000c6du, 0x0003003eu, 0x0000113cu, 0x00000c72u, 0x0003003eu, 0x0000113du, 0x00000c77u, 0x0003003eu, 0x0000113eu, 0x0000009cu, 0x0003003eu, 0x0000113fu, 0x0000009cu, 0x0003003eu, 0x00001188u, 0x00000c65u, 0x0003003eu, 0x00001189u, 0x00000c6au, 0x0003003eu, 0x0000118au, 0x00000c6du, 0x0003003eu, 0x0000118bu, 0x00000c72u, 0x0003003eu, 0x0000118cu, 0x00000c77u, 0x000500c7u, 0x00000006u, 0x00000b91u, 0x00000c6du, 0x000003a7u, 0x000500abu, 0x0000002cu, 0x00000b92u, 0x00000b91u, 0x000001b8u, 0x0003003eu, 0x00000b42u, 0x00000b92u, 0x000500c7u, 0x00000006u, 0x00000b95u, 0x00000c6du, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00000b96u, 0x00000b95u, 0x000001b8u, 0x0003003eu, 0x00000b43u, 0x00000b96u, 0x000500c7u, 0x00000006u, 0x00000b99u, 0x00000c6du, 0x00000193u, 0x000500abu, 0x0000002cu, 0x00000b9au, 0x00000b99u, 0x000001b8u, 0x0003003eu, 0x00000b44u, 0x00000b9au, 0x000500c7u, 0x00000006u, 0x00000b9du, 0x00000c6du, 0x000003f0u, 0x000500abu, 0x0000002cu, 0x00000b9eu, 0x00000b9du, 0x000001b8u, 0x0003003eu, 0x00000b45u, 0x00000b9eu, 0x000500c7u, 0x00000006u, 0x00000ba1u, 0x00000c6du, 0x00000755u, 0x000500abu, 0x0000002cu, 0x00000ba2u, 0x00000ba1u, 0x000001b8u, 0x0003003eu, 0x00000b46u, 0x00000ba2u, 0x000500c7u, 0x00000006u, 0x00000ba5u, 0x00000c6du, 0x0000075bu, 0x000500abu, 0x0000002cu, 0x00000ba6u, 0x00000ba5u, 0x000001b8u, 0x0003003eu, 0x00000b47u, 0x00000ba6u, 0x000500c7u, 0x00000006u, 0x00000ba9u, 0x00000c6du, 0x00000761u, 0x000500abu, 0x0000002cu, 0x00000baau, 0x00000ba9u, 0x000001b8u, 0x0003003eu, 0x00000b48u, 0x00000baau, 0x000500c7u, 0x00000006u, 0x00000badu, 0x00000c6du, 0x00000767u, 0x000500abu, 0x0000002cu, 0x00000baeu, 0x00000badu, 0x000001b8u, 0x0003003eu, 0x00000b49u, 0x00000baeu, 0x0003003eu, 0x00000b4bu, 0x00000b9eu, 0x000300f7u, 0x00000c7eu, 0x00000000u, 0x000400fau, 0x00000b9eu, 0x00000c7fu, 0x00000c80u, 0x000200f8u, 0x00000c80u, 0x0003003eu, 0x00000c7au, 0x0000064au, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c7fu, 0x00050041u, 0x0000009au, 0x00000c81u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000c82u, 0x00000c81u, 0x000500c7u, 0x00000008u, 0x00000c83u, 0x00000c82u, 0x0000064au, 0x0003003eu, 0x00000c7au, 0x00000c83u, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c7eu, 0x000700f5u, 0x00000008u, 0x0000123eu, 0x00000c83u, 0x00000c7fu, 0x0000064au, 0x00000c80u, 0x0003003eu, 0x00000c79u, 0x0000123eu, 0x000300f7u, 0x00000c85u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000c85u, 0x00000000u, 0x00000c86u, 0x00000001u, 0x00000c87u, 0x00000002u, 0x00000c88u, 0x00000003u, 0x00000c89u, 0x00000004u, 0x00000c8au, 0x000200f8u, 0x00000c8au, 0x0004003du, 0x00000009u, 0x00000c93u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c94u, 0x00000c93u, 0x00000c93u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000c7bu, 0x00000c94u, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c89u, 0x0004003du, 0x00000009u, 0x00000c91u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c92u, 0x00000c91u, 0x00000c91u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c7bu, 0x00000c92u, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c88u, 0x0004003du, 0x00000009u, 0x00000c8du, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c8eu, 0x00000c8du, 0x00000c8du, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000014u, 0x00000c90u, 0x00000c8eu, 0x00001959u, 0x0003003eu, 0x00000c7bu, 0x00000c90u, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c87u, 0x0004003du, 0x00000009u, 0x00000c8bu, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000c8cu, 0x00000c8bu, 0x00000c8bu, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c7bu, 0x00000c8cu, 0x0003003eu, 0x00000c79u, 0x0000064au, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c86u, 0x0003003eu, 0x00000c7bu, 0x00000655u, 0x0003003eu, 0x00000c79u, 0x0000064au, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c85u, 0x000f00f5u, 0x00000008u, 0x00001247u, 0x0000123eu, 0x00000c7eu, 0x0000064au, 0x00000c86u, 0x0000064au, 0x00000c87u, 0x0000123eu, 0x00000c88u, 0x0000123eu, 0x00000c89u, 0x0000123eu, 0x00000c8au, 0x000f00f5u, 0x00000014u, 0x0000123fu, 0x00001241u, 0x00000c7eu, 0x00000655u, 0x00000c86u, 0x00000c8cu, 0x00000c87u, 0x00000c90u, 0x00000c88u, 0x00000c92u, 0x00000c89u, 0x00000c94u, 0x00000c8au, 0x00050051u, 0x00000008u, 0x00000c97u, 0x0000123fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c98u, 0x0000123fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c99u, 0x0000123fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000c9au, 0x00000c97u, 0x00000c98u, 0x00000c99u, 0x00001247u, 0x0003003eu, 0x00000c7cu, 0x00000c9au, 0x0003003eu, 0x00000b4au, 0x00000c9au, 0x00050041u, 0x00000016u, 0x00000bb1u, 0x00000b4au, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000bb2u, 0x00000bb1u, 0x000500c3u, 0x00000008u, 0x00000bb3u, 0x00000bb2u, 0x000000c7u, 0x0003003eu, 0x00000b4cu, 0x00000bb3u, 0x0003003eu, 0x00000b51u, 0x00000b7du, 0x0003003eu, 0x00000b52u, 0x00000c50u, 0x0003003eu, 0x00000b53u, 0x00000c55u, 0x0004003du, 0x00000008u, 0x00000bb9u, 0x00000419u, 0x0003003eu, 0x00000b54u, 0x00000bb9u, 0x0004003du, 0x00000008u, 0x00000bbau, 0x000003fbu, 0x0003003eu, 0x00000b55u, 0x00000bbau, 0x0003003eu, 0x00000b56u, 0x00000897u, 0x0003003eu, 0x00000b57u, 0x00000bb3u, 0x0003003eu, 0x00000b58u, 0x00000b96u, 0x0003003eu, 0x00000b59u, 0x00000c77u, 0x0003003eu, 0x00000b5au, 0x00000b92u, 0x0003003eu, 0x00000b5bu, 0x00000baau, 0x00050080u, 0x00000008u, 0x00000ce5u, 0x00000897u, 0x00000bb3u, 0x000500afu, 0x0000002cu, 0x00000ce6u, 0x00000ce5u, 0x000000d9u, 0x000300f7u, 0x00000cb0u, 0x00000000u, 0x000400fau, 0x00000b96u, 0x00000cb1u, 0x00000cb2u, 0x000200f8u, 0x00000cb2u, 0x00050041u, 0x00000016u, 0x00000d3cu, 0x00000b5eu, 0x000001b8u, 0x0003003eu, 0x00000d3cu, 0x0000009cu, 0x00050082u, 0x00000008u, 0x00000d3eu, 0x00000295u, 0x00000c55u, 0x0007000cu, 0x00000008u, 0x00000d3fu, 0x00000001u, 0x00000027u, 0x00000d3eu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000d40u, 0x00000b5eu, 0x000001dau, 0x0003003eu, 0x00000d40u, 0x00000d3fu, 0x0003003eu, 0x00000cadu, 0x00000ce6u, 0x000400a8u, 0x0000002cu, 0x00000d46u, 0x00000b92u, 0x000300f7u, 0x00000d47u, 0x00000000u, 0x000400fau, 0x00000d46u, 0x00000d48u, 0x00000d47u, 0x000200f8u, 0x00000d48u, 0x000400a8u, 0x0000002cu, 0x00000d4au, 0x00000ce6u, 0x000500a7u, 0x0000002cu, 0x00000d4cu, 0x00000d4au, 0x00000baau, 0x000200f9u, 0x00000d47u, 0x000200f8u, 0x00000d47u, 0x000700f5u, 0x0000002cu, 0x00000d4du, 0x00000b92u, 0x00000cb2u, 0x00000d4cu, 0x00000d48u, 0x0003003eu, 0x00000b5cu, 0x00000d4du, 0x0003003eu, 0x00000b5du, 0x00000ce6u, 0x0003003eu, 0x00000ca6u, 0x000002b3u, 0x000200f9u, 0x00000cb0u, 0x000200f8u, 0x00000cb1u, 0x0003003eu, 0x00000c9cu, 0x00000bb9u, 0x0003003eu, 0x00000d50u, 0x00000bb9u, 0x000500c3u, 0x00000008u, 0x00000d58u, 0x00000bb9u, 0x000000eau, 0x0003003eu, 0x00000d51u, 0x00000d58u, 0x000500c7u, 0x00000008u, 0x00000d5au, 0x00000bb9u, 0x0000015du, 0x0003003eu, 0x00000d52u, 0x00000d5au, 0x00050082u, 0x00000008u, 0x00000d5cu, 0x000000cdu, 0x00000d58u, 0x0007000cu, 0x00000008u, 0x00000d5du, 0x00000001u, 0x0000002au, 0x00000d5cu, 0x0000009cu, 0x0003003eu, 0x00000d53u, 0x00000d5du, 0x000500c3u, 0x00000008u, 0x00000d5fu, 0x00000164u, 0x00000d58u, 0x00050082u, 0x00000008u, 0x00000d60u, 0x00000164u, 0x00000d5fu, 0x0003003eu, 0x00000d54u, 0x00000d60u, 0x000500c4u, 0x00000008u, 0x00000d63u, 0x00000d5au, 0x00000d5du, 0x00050080u, 0x00000008u, 0x00000d65u, 0x00000d63u, 0x00000d60u, 0x0003003eu, 0x00000d55u, 0x00000d65u, 0x0003003eu, 0x00000c9bu, 0x00000d65u, 0x0003003eu, 0x00000c9eu, 0x00000bbau, 0x000500c4u, 0x00000008u, 0x00000d68u, 0x000000afu, 0x00000bbau, 0x0003003eu, 0x00000d66u, 0x00000d68u, 0x0003003eu, 0x00000c9du, 0x00000d68u, 0x000500c7u, 0x00000008u, 0x00000cb9u, 0x00000d58u, 0x00000295u, 0x0003003eu, 0x00000c9fu, 0x00000cb9u, 0x0003003eu, 0x00000ca0u, 0x00000298u, 0x00050082u, 0x00000008u, 0x00000cbcu, 0x00000c55u, 0x00000bbau, 0x0008000cu, 0x00000008u, 0x00000cbdu, 0x00000001u, 0x0000002du, 0x00000cbcu, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000cbeu, 0x00000b5eu, 0x000001b8u, 0x0003003eu, 0x00000cbeu, 0x00000cbdu, 0x00050082u, 0x00000008u, 0x00000cc1u, 0x00000bbau, 0x00000c55u, 0x0008000cu, 0x00000008u, 0x00000cc2u, 0x00000001u, 0x0000002du, 0x00000cc1u, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000cc3u, 0x00000b5eu, 0x000001dau, 0x0003003eu, 0x00000cc3u, 0x00000cc2u, 0x000500b1u, 0x0000002cu, 0x00000cc5u, 0x00000cb9u, 0x000000bbu, 0x000300f7u, 0x00000cc6u, 0x00000000u, 0x000400fau, 0x00000cc5u, 0x00000cc7u, 0x00000cc6u, 0x000200f8u, 0x00000cc7u, 0x000500abu, 0x0000002cu, 0x00000cc9u, 0x00000d68u, 0x000002a8u, 0x000300f7u, 0x00000ccau, 0x00000000u, 0x000400fau, 0x00000cc9u, 0x00000ccbu, 0x00000cccu, 0x000200f8u, 0x00000cccu, 0x0003003eu, 0x00000ca0u, 0x000002b3u, 0x0003003eu, 0x00000c9du, 0x000002b4u, 0x000200f9u, 0x00000ccau, 0x000200f8u, 0x00000ccbu, 0x000500c4u, 0x00000008u, 0x00000cceu, 0x00000d68u, 0x000000afu, 0x000500c3u, 0x00000008u, 0x00000cd0u, 0x000002aeu, 0x00000cb9u, 0x0007000cu, 0x00000008u, 0x00000cd1u, 0x00000001u, 0x0000002au, 0x00000cceu, 0x00000cd0u, 0x0003003eu, 0x00000c9du, 0x00000cd1u, 0x000200f9u, 0x00000ccau, 0x000200f8u, 0x00000ccau, 0x000700f5u, 0x00000008u, 0x0000125cu, 0x00000cd1u, 0x00000ccbu, 0x000002b4u, 0x00000cccu, 0x000600a9u, 0x0000002cu, 0x00001960u, 0x00000cc9u, 0x00000298u, 0x000002b3u, 0x000200f9u, 0x00000cc6u, 0x000200f8u, 0x00000cc6u, 0x000700f5u, 0x0000002cu, 0x0000125fu, 0x00000298u, 0x00000cb1u, 0x00001960u, 0x00000ccau, 0x000700f5u, 0x00000008u, 0x0000125bu, 0x00000d68u, 0x00000cb1u, 0x0000125cu, 0x00000ccau, 0x000500c5u, 0x00000008u, 0x00000cd4u, 0x00000c50u, 0x0000125bu, 0x0003003eu, 0x00000ca2u, 0x00000cd4u, 0x000500abu, 0x0000002cu, 0x00000d6bu, 0x00000cd4u, 0x0000009cu, 0x000300f7u, 0x00000d6cu, 0x00000000u, 0x000400fau, 0x00000d6bu, 0x00000d6du, 0x00000d6cu, 0x000200f8u, 0x00000d6du, 0x0006000cu, 0x00000008u, 0x00000d6fu, 0x00000001u, 0x0000004au, 0x00000cd4u, 0x000500c4u, 0x00000008u, 0x00000d70u, 0x000000afu, 0x00000d6fu, 0x0003003eu, 0x00000ca2u, 0x00000d70u, 0x000200f9u, 0x00000d6cu, 0x000200f8u, 0x00000d6cu, 0x000700f5u, 0x00000008u, 0x0000125du, 0x00000cd4u, 0x00000cc6u, 0x00000d70u, 0x00000d6du, 0x0003003eu, 0x00000d69u, 0x0000125du, 0x0003003eu, 0x00000ca1u, 0x0000125du, 0x0003003eu, 0x00000ca3u, 0x0000125du, 0x000500c4u, 0x00000008u, 0x00000cd8u, 0x0000125du, 0x000000bbu, 0x0003003eu, 0x00000ca1u, 0x00000cd8u, 0x000400a8u, 0x0000002cu, 0x00000cdau, 0x0000125fu, 0x000300f7u, 0x00000cdbu, 0x00000000u, 0x000400fau, 0x00000cdau, 0x00000cdcu, 0x00000cdbu, 0x000200f8u, 0x00000cdcu, 0x00050080u, 0x00000008u, 0x00000cdfu, 0x00000b7du, 0x00000cd8u, 0x000500afu, 0x0000002cu, 0x00000ce1u, 0x00000cdfu, 0x00000d65u, 0x000200f9u, 0x00000cdbu, 0x000200f8u, 0x00000cdbu, 0x000700f5u, 0x0000002cu, 0x00000ce2u, 0x0000125fu, 0x00000d6cu, 0x00000ce1u, 0x00000cdcu, 0x0003003eu, 0x00000ca4u, 0x00000ce2u, 0x0003003eu, 0x00000ca5u, 0x00000ce6u, 0x000400a8u, 0x0000002cu, 0x00000ce8u, 0x00000b92u, 0x000300f7u, 0x00000ce9u, 0x00000000u, 0x000400fau, 0x00000ce8u, 0x00000ceau, 0x00000ce9u, 0x000200f8u, 0x00000ceau, 0x000400a8u, 0x0000002cu, 0x00000cecu, 0x00000ce6u, 0x000500a7u, 0x0000002cu, 0x00000ceeu, 0x00000cecu, 0x00000baau, 0x000500a7u, 0x0000002cu, 0x00000cf0u, 0x00000ceeu, 0x00000ce2u, 0x000200f9u, 0x00000ce9u, 0x000200f8u, 0x00000ce9u, 0x000700f5u, 0x0000002cu, 0x00000cf1u, 0x00000b92u, 0x00000cdbu, 0x00000cf0u, 0x00000ceau, 0x0003003eu, 0x00000b5cu, 0x00000cf1u, 0x0003003eu, 0x00000b5du, 0x00000ce6u, 0x0003003eu, 0x00000ca6u, 0x00000298u, 0x000500aau, 0x0000002cu, 0x00000cf4u, 0x00000d65u, 0x00000170u, 0x0003003eu, 0x00000ca7u, 0x00000cf4u, 0x000500b1u, 0x0000002cu, 0x00000cf7u, 0x00000b7du, 0x00000d65u, 0x0003003eu, 0x00000ca8u, 0x00000cf7u, 0x00050082u, 0x00000008u, 0x00000cfau, 0x00000b7du, 0x00000cd8u, 0x0003003eu, 0x00000ca9u, 0x00000cfau, 0x000500b3u, 0x0000002cu, 0x00000cfeu, 0x00000cfau, 0x00000d65u, 0x000500a6u, 0x0000002cu, 0x00000cffu, 0x0000125fu, 0x00000cfeu, 0x0003003eu, 0x00000caau, 0x00000cffu, 0x000300f7u, 0x00000d01u, 0x00000000u, 0x000b00fbu, 0x00000c77u, 0x00000d01u, 0x00000000u, 0x00000d02u, 0x00000001u, 0x00000d03u, 0x00000002u, 0x00000d04u, 0x00000003u, 0x00000d05u, 0x000200f8u, 0x00000d05u, 0x000500a7u, 0x0000002cu, 0x00000d38u, 0x00000ce2u, 0x00000cffu, 0x000400a8u, 0x0000002cu, 0x00000d3au, 0x00000cf4u, 0x000500a7u, 0x0000002cu, 0x00000d3bu, 0x00000d38u, 0x00000d3au, 0x0003003eu, 0x00000ca6u, 0x00000d3bu, 0x000200f9u, 0x00000d01u, 0x000200f8u, 0x00000d04u, 0x000500a6u, 0x0000002cu, 0x00000d35u, 0x00000cf7u, 0x00000cf4u, 0x0003003eu, 0x00000ca6u, 0x00000d35u, 0x000200f9u, 0x00000d01u, 0x000200f8u, 0x00000d03u, 0x000400a8u, 0x0000002cu, 0x00000d10u, 0x00000cf7u, 0x000400a8u, 0x0000002cu, 0x00000d12u, 0x00000ce2u, 0x000500a6u, 0x0000002cu, 0x00000d13u, 0x00000d10u, 0x00000d12u, 0x000400a8u, 0x0000002cu, 0x00000d15u, 0x00000ce6u, 0x000500a6u, 0x0000002cu, 0x00000d16u, 0x00000d13u, 0x00000d15u, 0x000300f7u, 0x00000d17u, 0x00000000u, 0x000400fau, 0x00000d16u, 0x00000d18u, 0x00000d19u, 0x000200f8u, 0x00000d19u, 0x000500c7u, 0x00000008u, 0x00000d24u, 0x0000125du, 0x000002b4u, 0x0003003eu, 0x00000cabu, 0x00000d24u, 0x0006000cu, 0x00000008u, 0x00000d74u, 0x00000001u, 0x0000004au, 0x00000d24u, 0x0007000cu, 0x00000008u, 0x00000d75u, 0x00000001u, 0x0000002au, 0x00000d74u, 0x0000009cu, 0x0003003eu, 0x00000d72u, 0x00000d75u, 0x0003003eu, 0x00000ca3u, 0x00000d75u, 0x000500c3u, 0x00000008u, 0x00000d28u, 0x00000d65u, 0x00000d75u, 0x000500c3u, 0x00000008u, 0x00000d2bu, 0x00000b7du, 0x00000d75u, 0x00050082u, 0x00000008u, 0x00000d2cu, 0x00000d28u, 0x00000d2bu, 0x000500c7u, 0x00000008u, 0x00000d2du, 0x00000d2cu, 0x00000295u, 0x0003003eu, 0x00000cacu, 0x00000d2du, 0x00050084u, 0x00000008u, 0x00000d30u, 0x00000d2du, 0x00000897u, 0x000500c3u, 0x00000008u, 0x00000d31u, 0x00000d30u, 0x000000bbu, 0x0007000cu, 0x00000008u, 0x00000d32u, 0x00000001u, 0x00000027u, 0x00000d31u, 0x000000d9u, 0x0003003eu, 0x00000b56u, 0x00000d32u, 0x0003003eu, 0x00000ca6u, 0x000002b3u, 0x000200f9u, 0x00000d17u, 0x000200f8u, 0x00000d18u, 0x000400a8u, 0x0000002cu, 0x00000d1bu, 0x00000cf4u, 0x000300f7u, 0x00000d1cu, 0x00000000u, 0x000400fau, 0x00000d1bu, 0x00000d1du, 0x00000d1cu, 0x000200f8u, 0x00000d1du, 0x000600a9u, 0x0000002cu, 0x00000d21u, 0x00000ce6u, 0x00000cf7u, 0x00000cffu, 0x000200f9u, 0x00000d1cu, 0x000200f8u, 0x00000d1cu, 0x000700f5u, 0x0000002cu, 0x00000d22u, 0x00000cf4u, 0x00000d18u, 0x00000d21u, 0x00000d1du, 0x0003003eu, 0x00000ca6u, 0x00000d22u, 0x000200f9u, 0x00000d17u, 0x000200f8u, 0x00000d17u, 0x000700f5u, 0x00000008u, 0x0000128fu, 0x00000897u, 0x00000d1cu, 0x00000d32u, 0x00000d19u, 0x000700f5u, 0x0000002cu, 0x0000128bu, 0x00000d22u, 0x00000d1cu, 0x000002b3u, 0x00000d19u, 0x000200f9u, 0x00000d01u, 0x000200f8u, 0x00000d02u, 0x000400a8u, 0x0000002cu, 0x00000d07u, 0x00000cf4u, 0x000300f7u, 0x00000d08u, 0x00000000u, 0x000400fau, 0x00000d07u, 0x00000d09u, 0x00000d08u, 0x000200f8u, 0x00000d09u, 0x000600a9u, 0x0000002cu, 0x00000d0du, 0x00000ce6u, 0x00000cf7u, 0x00000cffu, 0x000200f9u, 0x00000d08u, 0x000200f8u, 0x00000d08u, 0x000700f5u, 0x0000002cu, 0x00000d0eu, 0x00000cf4u, 0x00000d02u, 0x00000d0du, 0x00000d09u, 0x0003003eu, 0x00000ca6u, 0x00000d0eu, 0x000200f9u, 0x00000d01u, 0x000200f8u, 0x00000d01u, 0x000d00f5u, 0x00000008u, 0x0000128du, 0x00000897u, 0x00000ce9u, 0x00000897u, 0x00000d08u, 0x0000128fu, 0x00000d17u, 0x00000897u, 0x00000d04u, 0x00000897u, 0x00000d05u, 0x000d00f5u, 0x0000002cu, 0x0000128au, 0x00000298u, 0x00000ce9u, 0x00000d0eu, 0x00000d08u, 0x0000128bu, 0x00000d17u, 0x00000d35u, 0x00000d04u, 0x00000d3bu, 0x00000d05u, 0x000200f9u, 0x00000cb0u, 0x000200f8u, 0x00000cb0u, 0x000700f5u, 0x0000002cu, 0x00001292u, 0x00000cf1u, 0x00000d01u, 0x00000d4du, 0x00000d47u, 0x000700f5u, 0x00000008u, 0x0000128cu, 0x0000128du, 0x00000d01u, 0x00000897u, 0x00000d47u, 0x000700f5u, 0x0000002cu, 0x00001289u, 0x0000128au, 0x00000d01u, 0x000002b3u, 0x00000d47u, 0x0003003eu, 0x00000caeu, 0x00001289u, 0x0003003eu, 0x00000b3au, 0x0000128cu, 0x0003003eu, 0x00000b4eu, 0x00001292u, 0x0003003eu, 0x00000b4fu, 0x00000ce6u, 0x0004003du, 0x0000002eu, 0x00000bc6u, 0x00000b5eu, 0x0003003eu, 0x00000b50u, 0x00000bc6u, 0x0003003eu, 0x00000b4du, 0x00001289u, 0x000300f7u, 0x00000bc8u, 0x00000000u, 0x000400fau, 0x00001289u, 0x00000bc9u, 0x00000bc8u, 0x000200f8u, 0x00000bc9u, 0x000400a8u, 0x0000002cu, 0x00000bcbu, 0x00000baau, 0x000500abu, 0x0000002cu, 0x00000bcdu, 0x0000128cu, 0x0000009cu, 0x000500a6u, 0x0000002cu, 0x00000bceu, 0x00000bcbu, 0x00000bcdu, 0x000200f9u, 0x00000bc8u, 0x000200f8u, 0x00000bc8u, 0x000700f5u, 0x0000002cu, 0x00000bcfu, 0x00001289u, 0x00000cb0u, 0x00000bceu, 0x00000bc9u, 0x000300f7u, 0x00000bd0u, 0x00000000u, 0x000400fau, 0x00000bcfu, 0x00000bd1u, 0x00000bd0u, 0x000200f8u, 0x00000bd1u, 0x0004003du, 0x00000009u, 0x00000bd3u, 0x00000b4au, 0x00080050u, 0x00000029u, 0x00000bd9u, 0x000008c4u, 0x00000bd3u, 0x00000c43u, 0x00000c48u, 0x000008d7u, 0x0003003eu, 0x00001192u, 0x000008c4u, 0x0003003eu, 0x00001193u, 0x00000bd3u, 0x0003003eu, 0x00001194u, 0x00000c43u, 0x0003003eu, 0x00001195u, 0x00000c48u, 0x0003003eu, 0x00001196u, 0x000008d7u, 0x0003003eu, 0x00000b60u, 0x00000c65u, 0x000300f7u, 0x00000bddu, 0x00000000u, 0x000400fau, 0x00000ba6u, 0x00000bdeu, 0x00000bddu, 0x000200f8u, 0x00000bdeu, 0x0003003eu, 0x000011a8u, 0x000008c4u, 0x0003003eu, 0x000011a9u, 0x00000bd3u, 0x0003003eu, 0x000011aau, 0x00000c43u, 0x0003003eu, 0x000011abu, 0x00000c48u, 0x0003003eu, 0x000011acu, 0x000008d7u, 0x0003003eu, 0x00000b62u, 0x00000c65u, 0x0003003eu, 0x00000b63u, 0x00000b92u, 0x0003003eu, 0x00000b64u, 0x00001292u, 0x0003003eu, 0x00000b65u, 0x00000ba2u, 0x0003003eu, 0x00000b66u, 0x00000ce6u, 0x0003003eu, 0x00000b67u, 0x00000bc6u, 0x0003003eu, 0x00000b68u, 0x00000298u, 0x0003003eu, 0x00000d76u, 0x00000298u, 0x00050041u, 0x00000016u, 0x00000d81u, 0x00000b62u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000d82u, 0x00000d81u, 0x000300f7u, 0x00000d83u, 0x00000000u, 0x000b00fbu, 0x00000d82u, 0x00000d83u, 0x00000000u, 0x00000d84u, 0x00000001u, 0x00000d85u, 0x00000002u, 0x00000d86u, 0x00000003u, 0x00000d87u, 0x000200f8u, 0x00000d87u, 0x0004003du, 0x00000009u, 0x00000d92u, 0x000011aau, 0x0008004fu, 0x00000014u, 0x00000d93u, 0x00000d92u, 0x00000d92u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d78u, 0x00000d93u, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d86u, 0x0008004fu, 0x00000014u, 0x00000d90u, 0x00000c48u, 0x00000c48u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d78u, 0x00000d90u, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d85u, 0x0004003du, 0x00000009u, 0x00000d8cu, 0x000011a9u, 0x0008004fu, 0x00000014u, 0x00000d8du, 0x00000d8cu, 0x00000d8cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d78u, 0x00000d8du, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d84u, 0x0004003du, 0x00000009u, 0x00000d89u, 0x000011a8u, 0x0008004fu, 0x00000014u, 0x00000d8au, 0x00000d89u, 0x00000d89u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d78u, 0x00000d8au, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d83u, 0x000d00f5u, 0x00000014u, 0x00001369u, 0x00001373u, 0x00000bdeu, 0x00000d8au, 0x00000d84u, 0x00000d8du, 0x00000d85u, 0x00000d90u, 0x00000d86u, 0x00000d93u, 0x00000d87u, 0x00050041u, 0x00000016u, 0x00000d9eu, 0x00000b62u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000d9fu, 0x00000d9eu, 0x000300f7u, 0x00000da0u, 0x00000000u, 0x000b00fbu, 0x00000d9fu, 0x00000da0u, 0x00000000u, 0x00000da1u, 0x00000001u, 0x00000da2u, 0x00000002u, 0x00000da3u, 0x00000003u, 0x00000da4u, 0x000200f8u, 0x00000da4u, 0x0004003du, 0x00000009u, 0x00000dafu, 0x000011aau, 0x0008004fu, 0x00000014u, 0x00000db0u, 0x00000dafu, 0x00000dafu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d79u, 0x00000db0u, 0x000200f9u, 0x00000da0u, 0x000200f8u, 0x00000da3u, 0x0008004fu, 0x00000014u, 0x00000dadu, 0x00000c48u, 0x00000c48u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d79u, 0x00000dadu, 0x000200f9u, 0x00000da0u, 0x000200f8u, 0x00000da2u, 0x0004003du, 0x00000009u, 0x00000da9u, 0x000011a9u, 0x0008004fu, 0x00000014u, 0x00000daau, 0x00000da9u, 0x00000da9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d79u, 0x00000daau, 0x000200f9u, 0x00000da0u, 0x000200f8u, 0x00000da1u, 0x0004003du, 0x00000009u, 0x00000da6u, 0x000011a8u, 0x0008004fu, 0x00000014u, 0x00000da7u, 0x00000da6u, 0x00000da6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d79u, 0x00000da7u, 0x000200f9u, 0x00000da0u, 0x000200f8u, 0x00000da0u, 0x00050041u, 0x00000016u, 0x00000dccu, 0x00000b62u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000dcdu, 0x00000dccu, 0x000300f7u, 0x00000dceu, 0x00000000u, 0x000b00fbu, 0x00000dcdu, 0x00000dceu, 0x00000000u, 0x00000dcfu, 0x00000001u, 0x00000dd0u, 0x00000002u, 0x00000dd1u, 0x00000003u, 0x00000dd2u, 0x000200f8u, 0x00000dd2u, 0x0003003eu, 0x00000d7au, 0x0000009cu, 0x000200f9u, 0x00000dceu, 0x000200f8u, 0x00000dd1u, 0x0003003eu, 0x00000d7au, 0x000008d7u, 0x000200f9u, 0x00000dceu, 0x000200f8u, 0x00000dd0u, 0x00050041u, 0x00000016u, 0x000011b4u, 0x000011aau, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000dd6u, 0x000011b4u, 0x0003003eu, 0x00000d7au, 0x00000dd6u, 0x000200f9u, 0x00000dceu, 0x000200f8u, 0x00000dcfu, 0x00050041u, 0x00000016u, 0x000011b3u, 0x000011a8u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000dd4u, 0x000011b3u, 0x0003003eu, 0x00000d7au, 0x00000dd4u, 0x000200f9u, 0x00000dceu, 0x000200f8u, 0x00000dceu, 0x000d00f5u, 0x00000008u, 0x00001329u, 0x00001337u, 0x00000da0u, 0x00000dd4u, 0x00000dcfu, 0x00000dd6u, 0x00000dd0u, 0x000008d7u, 0x00000dd1u, 0x0000009cu, 0x00000dd2u, 0x00050041u, 0x00000016u, 0x00000dd9u, 0x00000b62u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000ddau, 0x00000dd9u, 0x000300f7u, 0x00000ddbu, 0x00000000u, 0x000b00fbu, 0x00000ddau, 0x00000ddbu, 0x00000000u, 0x00000ddcu, 0x00000001u, 0x00000dddu, 0x00000002u, 0x00000ddeu, 0x00000003u, 0x00000ddfu, 0x000200f8u, 0x00000ddfu, 0x0003003eu, 0x00000d7bu, 0x0000009cu, 0x000200f9u, 0x00000ddbu, 0x000200f8u, 0x00000ddeu, 0x0003003eu, 0x00000d7bu, 0x00000133u, 0x000200f9u, 0x00000ddbu, 0x000200f8u, 0x00000dddu, 0x00050041u, 0x00000016u, 0x000011b5u, 0x000011a9u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000de4u, 0x000011b5u, 0x0003003eu, 0x00000d7bu, 0x00000de4u, 0x000200f9u, 0x00000ddbu, 0x000200f8u, 0x00000ddcu, 0x000400c8u, 0x00000008u, 0x00000de1u, 0x00001329u, 0x000500c7u, 0x00000008u, 0x00000de2u, 0x00000de1u, 0x00000133u, 0x0003003eu, 0x00000d7bu, 0x00000de2u, 0x000200f9u, 0x00000ddbu, 0x000200f8u, 0x00000ddbu, 0x000d00f5u, 0x00000008u, 0x00001346u, 0x00001355u, 0x00000dceu, 0x00000de2u, 0x00000ddcu, 0x00000de4u, 0x00000dddu, 0x00000133u, 0x00000ddeu, 0x0000009cu, 0x00000ddfu, 0x000500c3u, 0x00000008u, 0x00000de6u, 0x00001329u, 0x000000bbu, 0x0003003eu, 0x00000d7au, 0x00000de6u, 0x000500c3u, 0x00000008u, 0x00000de8u, 0x00001346u, 0x000000bbu, 0x0003003eu, 0x00000d7bu, 0x00000de8u, 0x0004003du, 0x00000008u, 0x00000deau, 0x00000dd9u, 0x000500aau, 0x0000002cu, 0x00000debu, 0x00000deau, 0x000000afu, 0x000300f7u, 0x00000decu, 0x00000000u, 0x000400fau, 0x00000debu, 0x00000dedu, 0x00000decu, 0x000200f8u, 0x00000dedu, 0x00050041u, 0x00000016u, 0x00000defu, 0x00000b67u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000df0u, 0x00000defu, 0x000500c3u, 0x00000008u, 0x00000df1u, 0x00000de6u, 0x00000df0u, 0x000500c7u, 0x00000008u, 0x00000df2u, 0x00000df1u, 0x00000222u, 0x0003003eu, 0x00000d7au, 0x00000df2u, 0x00050041u, 0x00000016u, 0x00000df4u, 0x00000b67u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000df5u, 0x00000df4u, 0x000500c3u, 0x00000008u, 0x00000df6u, 0x00000de8u, 0x00000df5u, 0x000500c5u, 0x00000008u, 0x00000df7u, 0x00000df6u, 0x000000bbu, 0x0003003eu, 0x00000d7bu, 0x00000df7u, 0x000200f9u, 0x00000decu, 0x000200f8u, 0x00000decu, 0x000700f5u, 0x00000008u, 0x00001380u, 0x00000de8u, 0x00000ddbu, 0x00000df7u, 0x00000dedu, 0x000700f5u, 0x00000008u, 0x00001362u, 0x00000de6u, 0x00000ddbu, 0x00000df2u, 0x00000dedu, 0x0004003du, 0x00000014u, 0x00000df8u, 0x00000d79u, 0x00050051u, 0x00000008u, 0x00000df9u, 0x00000df8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000dfau, 0x00000df8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000dfbu, 0x00000df8u, 0x00000002u, 0x00060050u, 0x00000014u, 0x00000dfeu, 0x00001362u, 0x00001362u, 0x00001362u, 0x00050084u, 0x00000014u, 0x00000dffu, 0x00000df8u, 0x00000dfeu, 0x00050051u, 0x00000008u, 0x00000e01u, 0x00001369u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000e02u, 0x00001369u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000e03u, 0x00001369u, 0x00000002u, 0x00050080u, 0x00000008u, 0x00000e06u, 0x00001380u, 0x000000afu, 0x00060050u, 0x00000014u, 0x00000e07u, 0x00000e06u, 0x00000e06u, 0x00000e06u, 0x00050084u, 0x00000014u, 0x00000e08u, 0x00001369u, 0x00000e07u, 0x00050080u, 0x00000014u, 0x00000e09u, 0x00000dffu, 0x00000e08u, 0x0003003eu, 0x00000d7cu, 0x00000e09u, 0x0004003du, 0x00000014u, 0x00000e11u, 0x00000d7cu, 0x000500c3u, 0x00000014u, 0x00000e13u, 0x00000e11u, 0x0000195du, 0x00050051u, 0x00000008u, 0x00000e14u, 0x00000e13u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000e15u, 0x00000e13u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000e16u, 0x00000e13u, 0x00000002u, 0x0003003eu, 0x00000d79u, 0x00000e13u, 0x0004003du, 0x00000014u, 0x00000e42u, 0x00000d79u, 0x000500c7u, 0x00000014u, 0x00000e44u, 0x00000e42u, 0x00000134u, 0x0003003eu, 0x00000d76u, 0x000002b3u, 0x0003003eu, 0x00000d77u, 0x00000e44u, 0x0003003eu, 0x00000d7eu, 0x00000e44u, 0x0009004fu, 0x00000009u, 0x00000be9u, 0x000008c4u, 0x00000e44u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001192u, 0x00000be9u, 0x0003003eu, 0x00000b60u, 0x00000c6au, 0x000200f9u, 0x00000bddu, 0x000200f8u, 0x00000bddu, 0x000700f5u, 0x00000014u, 0x00001882u, 0x00001373u, 0x00000bd1u, 0x00001369u, 0x00000decu, 0x000700f5u, 0x00000008u, 0x0000185au, 0x00001355u, 0x00000bd1u, 0x00001380u, 0x00000decu, 0x000700f5u, 0x00000008u, 0x00001832u, 0x00001337u, 0x00000bd1u, 0x00001362u, 0x00000decu, 0x000700f5u, 0x00000009u, 0x000013edu, 0x000008c4u, 0x00000bd1u, 0x00000be9u, 0x00000decu, 0x00070050u, 0x00001961u, 0x00001962u, 0x00000ba6u, 0x00000ba6u, 0x00000ba6u, 0x00000ba6u, 0x000600a9u, 0x00000009u, 0x00001963u, 0x00001962u, 0x00000c6au, 0x00000c65u, 0x00080050u, 0x00000029u, 0x000011a7u, 0x000013edu, 0x00000bd3u, 0x00000c43u, 0x00000c48u, 0x000008d7u, 0x0003003eu, 0x000011b6u, 0x000013edu, 0x0003003eu, 0x000011b7u, 0x00000bd3u, 0x0003003eu, 0x000011b8u, 0x00000c43u, 0x0003003eu, 0x000011b9u, 0x00000c48u, 0x0003003eu, 0x000011bau, 0x000008d7u, 0x0003003eu, 0x00000b6bu, 0x00001963u, 0x0003003eu, 0x00000b6cu, 0x00000b92u, 0x0003003eu, 0x00000b6du, 0x00001292u, 0x0003003eu, 0x00000b6eu, 0x00000ba2u, 0x0003003eu, 0x00000b6fu, 0x00000ce6u, 0x0003003eu, 0x00000b70u, 0x00000bc6u, 0x0003003eu, 0x00000b71u, 0x000002b3u, 0x0003003eu, 0x00000e46u, 0x00000298u, 0x000300f7u, 0x00000e4fu, 0x00000000u, 0x000300fbu, 0x000001b8u, 0x00000e50u, 0x000200f8u, 0x00000e50u, 0x00050041u, 0x00000016u, 0x00000e51u, 0x00000b6bu, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000e52u, 0x00000e51u, 0x000300f7u, 0x00000e53u, 0x00000000u, 0x000b00fbu, 0x00000e52u, 0x00000e53u, 0x00000000u, 0x00000e54u, 0x00000001u, 0x00000e55u, 0x00000002u, 0x00000e56u, 0x00000003u, 0x00000e57u, 0x000200f8u, 0x00000e57u, 0x0004003du, 0x00000009u, 0x00000e62u, 0x000011b8u, 0x0008004fu, 0x00000014u, 0x00000e63u, 0x00000e62u, 0x00000e62u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e48u, 0x00000e63u, 0x000200f9u, 0x00000e53u, 0x000200f8u, 0x00000e56u, 0x0008004fu, 0x00000014u, 0x00000e60u, 0x00000c48u, 0x00000c48u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e48u, 0x00000e60u, 0x000200f9u, 0x00000e53u, 0x000200f8u, 0x00000e55u, 0x0004003du, 0x00000009u, 0x00000e5cu, 0x000011b7u, 0x0008004fu, 0x00000014u, 0x00000e5du, 0x00000e5cu, 0x00000e5cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e48u, 0x00000e5du, 0x000200f9u, 0x00000e53u, 0x000200f8u, 0x00000e54u, 0x0004003du, 0x00000009u, 0x00000e59u, 0x000011b6u, 0x0008004fu, 0x00000014u, 0x00000e5au, 0x00000e59u, 0x00000e59u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e48u, 0x00000e5au, 0x000200f9u, 0x00000e53u, 0x000200f8u, 0x00000e53u, 0x000d00f5u, 0x00000014u, 0x0000149au, 0x000014a5u, 0x00000e50u, 0x00000e5au, 0x00000e54u, 0x00000e5du, 0x00000e55u, 0x00000e60u, 0x00000e56u, 0x00000e63u, 0x00000e57u, 0x000400a8u, 0x0000002cu, 0x00000e69u, 0x00000ce6u, 0x000500a7u, 0x0000002cu, 0x00000e6au, 0x00000ba2u, 0x00000e69u, 0x000300f7u, 0x00000e6bu, 0x00000000u, 0x000400fau, 0x00000e6au, 0x00000e6cu, 0x00000e6bu, 0x000200f8u, 0x00000e6cu, 0x0003003eu, 0x00000e46u, 0x000002b3u, 0x0003003eu, 0x00000e47u, 0x0000149au, 0x000200f9u, 0x00000e4fu, 0x000200f8u, 0x00000e6bu, 0x00050041u, 0x00000016u, 0x00000e6eu, 0x00000b6bu, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000e6fu, 0x00000e6eu, 0x000300f7u, 0x00000e70u, 0x00000000u, 0x000b00fbu, 0x00000e6fu, 0x00000e70u, 0x00000000u, 0x00000e71u, 0x00000001u, 0x00000e72u, 0x00000002u, 0x00000e73u, 0x00000003u, 0x00000e74u, 0x000200f8u, 0x00000e74u, 0x0004003du, 0x00000009u, 0x00000e7fu, 0x000011b8u, 0x0008004fu, 0x00000014u, 0x00000e80u, 0x00000e7fu, 0x00000e7fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e49u, 0x00000e80u, 0x000200f9u, 0x00000e70u, 0x000200f8u, 0x00000e73u, 0x0008004fu, 0x00000014u, 0x00000e7du, 0x00000c48u, 0x00000c48u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e49u, 0x00000e7du, 0x000200f9u, 0x00000e70u, 0x000200f8u, 0x00000e72u, 0x0004003du, 0x00000009u, 0x00000e79u, 0x000011b7u, 0x0008004fu, 0x00000014u, 0x00000e7au, 0x00000e79u, 0x00000e79u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e49u, 0x00000e7au, 0x000200f9u, 0x00000e70u, 0x000200f8u, 0x00000e71u, 0x0004003du, 0x00000009u, 0x00000e76u, 0x000011b6u, 0x0008004fu, 0x00000014u, 0x00000e77u, 0x00000e76u, 0x00000e76u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e49u, 0x00000e77u, 0x000200f9u, 0x00000e70u, 0x000200f8u, 0x00000e70u, 0x000400a8u, 0x0000002cu, 0x00000e85u, 0x00001292u, 0x000400a8u, 0x0000002cu, 0x00000e86u, 0x00000e85u, 0x000300f7u, 0x00000e87u, 0x00000000u, 0x000400fau, 0x00000e86u, 0x00000e88u, 0x00000e87u, 0x000200f8u, 0x00000e88u, 0x00050041u, 0x00000016u, 0x00000e89u, 0x00000b6bu, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000e8au, 0x00000e89u, 0x000500aau, 0x0000002cu, 0x00000e8bu, 0x00000e8au, 0x0000009cu, 0x000300f7u, 0x00000e8cu, 0x00000000u, 0x000400fau, 0x00000e8bu, 0x00000e8du, 0x00000e8cu, 0x000200f8u, 0x00000e8du, 0x00050041u, 0x00000016u, 0x00000e8eu, 0x00000b6bu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e8fu, 0x00000e8eu, 0x000500aau, 0x0000002cu, 0x00000e90u, 0x00000e8fu, 0x0000009cu, 0x000200f9u, 0x00000e8cu, 0x000200f8u, 0x00000e8cu, 0x000700f5u, 0x0000002cu, 0x00000e91u, 0x00000e8bu, 0x00000e88u, 0x00000e90u, 0x00000e8du, 0x000300f7u, 0x00000e92u, 0x00000000u, 0x000400fau, 0x00000e91u, 0x00000e93u, 0x00000e92u, 0x000200f8u, 0x00000e93u, 0x00050041u, 0x00000016u, 0x000011c0u, 0x000011b6u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000e95u, 0x000011c0u, 0x000500aau, 0x0000002cu, 0x00000e96u, 0x00000e95u, 0x00000133u, 0x000200f9u, 0x00000e92u, 0x000200f8u, 0x00000e92u, 0x000700f5u, 0x0000002cu, 0x00000e97u, 0x00000e91u, 0x00000e8cu, 0x00000e96u, 0x00000e93u, 0x000200f9u, 0x00000e87u, 0x000200f8u, 0x00000e87u, 0x000700f5u, 0x0000002cu, 0x00000e98u, 0x00000e85u, 0x00000e70u, 0x00000e97u, 0x00000e92u, 0x000300f7u, 0x00000e99u, 0x00000000u, 0x000400fau, 0x00000e98u, 0x00000e9au, 0x00000e99u, 0x000200f8u, 0x00000e9au, 0x0004003du, 0x00000014u, 0x00000e9bu, 0x00000e49u, 0x0003003eu, 0x00000e46u, 0x000002b3u, 0x0003003eu, 0x00000e47u, 0x00000e9bu, 0x000200f9u, 0x00000e4fu, 0x000200f8u, 0x00000e99u, 0x00050041u, 0x00000016u, 0x00000e9cu, 0x00000b6bu, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000e9du, 0x00000e9cu, 0x000300f7u, 0x00000e9eu, 0x00000000u, 0x000b00fbu, 0x00000e9du, 0x00000e9eu, 0x00000000u, 0x00000e9fu, 0x00000001u, 0x00000ea0u, 0x00000002u, 0x00000ea1u, 0x00000003u, 0x00000ea2u, 0x000200f8u, 0x00000ea2u, 0x0003003eu, 0x00000e4au, 0x0000009cu, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000ea1u, 0x0003003eu, 0x00000e4au, 0x000008d7u, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000ea0u, 0x00050041u, 0x00000016u, 0x000011c2u, 0x000011b8u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000ea6u, 0x000011c2u, 0x0003003eu, 0x00000e4au, 0x00000ea6u, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000e9fu, 0x00050041u, 0x00000016u, 0x000011c1u, 0x000011b6u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000ea4u, 0x000011c1u, 0x0003003eu, 0x00000e4au, 0x00000ea4u, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000e9eu, 0x000d00f5u, 0x00000008u, 0x00001441u, 0x00001450u, 0x00000e99u, 0x00000ea4u, 0x00000e9fu, 0x00000ea6u, 0x00000ea0u, 0x000008d7u, 0x00000ea1u, 0x0000009cu, 0x00000ea2u, 0x00050041u, 0x00000016u, 0x00000ea9u, 0x00000b6bu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000eaau, 0x00000ea9u, 0x000300f7u, 0x00000eabu, 0x00000000u, 0x000b00fbu, 0x00000eaau, 0x00000eabu, 0x00000000u, 0x00000eacu, 0x00000001u, 0x00000eadu, 0x00000002u, 0x00000eaeu, 0x00000003u, 0x00000eafu, 0x000200f8u, 0x00000eafu, 0x0003003eu, 0x00000e4bu, 0x0000009cu, 0x000200f9u, 0x00000eabu, 0x000200f8u, 0x00000eaeu, 0x0003003eu, 0x00000e4bu, 0x00000133u, 0x000200f9u, 0x00000eabu, 0x000200f8u, 0x00000eadu, 0x00050041u, 0x00000016u, 0x000011c3u, 0x000011b7u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000eb4u, 0x000011c3u, 0x0003003eu, 0x00000e4bu, 0x00000eb4u, 0x000200f9u, 0x00000eabu, 0x000200f8u, 0x00000eacu, 0x000400c8u, 0x00000008u, 0x00000eb1u, 0x00001441u, 0x000500c7u, 0x00000008u, 0x00000eb2u, 0x00000eb1u, 0x00000133u, 0x0003003eu, 0x00000e4bu, 0x00000eb2u, 0x000200f9u, 0x00000eabu, 0x000200f8u, 0x00000eabu, 0x000d00f5u, 0x00000008u, 0x0000146au, 0x0000147au, 0x00000e9eu, 0x00000eb2u, 0x00000eacu, 0x00000eb4u, 0x00000eadu, 0x00000133u, 0x00000eaeu, 0x0000009cu, 0x00000eafu, 0x000500c3u, 0x00000008u, 0x00000eb6u, 0x00001441u, 0x000000bbu, 0x0003003eu, 0x00000e4au, 0x00000eb6u, 0x000500c3u, 0x00000008u, 0x00000eb8u, 0x0000146au, 0x000000bbu, 0x0003003eu, 0x00000e4bu, 0x00000eb8u, 0x0004003du, 0x00000008u, 0x00000ebau, 0x00000ea9u, 0x000500aau, 0x0000002cu, 0x00000ebbu, 0x00000ebau, 0x000000afu, 0x000300f7u, 0x00000ebcu, 0x00000000u, 0x000400fau, 0x00000ebbu, 0x00000ebdu, 0x00000ebcu, 0x000200f8u, 0x00000ebdu, 0x00050041u, 0x00000016u, 0x00000ebfu, 0x00000b70u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000ec0u, 0x00000ebfu, 0x000500c3u, 0x00000008u, 0x00000ec1u, 0x00000eb6u, 0x00000ec0u, 0x000500c7u, 0x00000008u, 0x00000ec2u, 0x00000ec1u, 0x00000222u, 0x0003003eu, 0x00000e4au, 0x00000ec2u, 0x00050041u, 0x00000016u, 0x00000ec4u, 0x00000b70u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000ec5u, 0x00000ec4u, 0x000500c3u, 0x00000008u, 0x00000ec6u, 0x00000eb8u, 0x00000ec5u, 0x000500c5u, 0x00000008u, 0x00000ec7u, 0x00000ec6u, 0x000000bbu, 0x0003003eu, 0x00000e4bu, 0x00000ec7u, 0x000200f9u, 0x00000ebcu, 0x000200f8u, 0x00000ebcu, 0x000700f5u, 0x00000008u, 0x000014beu, 0x00000eb8u, 0x00000eabu, 0x00000ec7u, 0x00000ebdu, 0x000700f5u, 0x00000008u, 0x00001493u, 0x00000eb6u, 0x00000eabu, 0x00000ec2u, 0x00000ebdu, 0x0004003du, 0x00000014u, 0x00000ec8u, 0x00000e49u, 0x00050051u, 0x00000008u, 0x00000ec9u, 0x00000ec8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ecau, 0x00000ec8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ecbu, 0x00000ec8u, 0x00000002u, 0x00060050u, 0x00000014u, 0x00000eceu, 0x00001493u, 0x00001493u, 0x00001493u, 0x00050084u, 0x00000014u, 0x00000ecfu, 0x00000ec8u, 0x00000eceu, 0x00050051u, 0x00000008u, 0x00000ed1u, 0x0000149au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ed2u, 0x0000149au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ed3u, 0x0000149au, 0x00000002u, 0x00050080u, 0x00000008u, 0x00000ed6u, 0x000014beu, 0x000000afu, 0x00060050u, 0x00000014u, 0x00000ed7u, 0x00000ed6u, 0x00000ed6u, 0x00000ed6u, 0x00050084u, 0x00000014u, 0x00000ed8u, 0x0000149au, 0x00000ed7u, 0x00050080u, 0x00000014u, 0x00000ed9u, 0x00000ecfu, 0x00000ed8u, 0x0003003eu, 0x00000e4cu, 0x00000ed9u, 0x000500a6u, 0x0000002cu, 0x00000eddu, 0x00000298u, 0x00000b92u, 0x000300f7u, 0x00000edeu, 0x00000000u, 0x000400fau, 0x00000eddu, 0x00000edfu, 0x00000ee0u, 0x000200f8u, 0x00000ee0u, 0x000500c3u, 0x00000008u, 0x00000ee9u, 0x00001493u, 0x000000b5u, 0x000500c3u, 0x00000008u, 0x00000eebu, 0x000014beu, 0x000000b5u, 0x00050080u, 0x00000008u, 0x00000eecu, 0x00000ee9u, 0x00000eebu, 0x00050080u, 0x00000008u, 0x00000eedu, 0x00000eecu, 0x000000afu, 0x0003003eu, 0x00000e4du, 0x00000eedu, 0x0004003du, 0x00000014u, 0x00000eeeu, 0x00000e4cu, 0x000500c3u, 0x00000014u, 0x00000ef0u, 0x00000eeeu, 0x0000195eu, 0x0003003eu, 0x00000e4cu, 0x00000ef0u, 0x0004003du, 0x00000014u, 0x00000ef1u, 0x00000e4cu, 0x000500c7u, 0x00000014u, 0x00000ef3u, 0x00000ef1u, 0x0000195fu, 0x0003003eu, 0x00000e4cu, 0x00000ef3u, 0x0004003du, 0x00000257u, 0x00000ef4u, 0x00000259u, 0x000500c4u, 0x00000008u, 0x00000ef6u, 0x00000eedu, 0x000000eau, 0x00050041u, 0x00000016u, 0x00000ef7u, 0x00000e4cu, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000ef8u, 0x00000ef7u, 0x000500c5u, 0x00000008u, 0x00000ef9u, 0x00000ef6u, 0x00000ef8u, 0x0005005fu, 0x000000abu, 0x00000efau, 0x00000ef4u, 0x00000ef9u, 0x00050051u, 0x00000006u, 0x00000efbu, 0x00000efau, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000efcu, 0x00000efbu, 0x00050041u, 0x00000016u, 0x00000efdu, 0x00000e49u, 0x000001b8u, 0x0003003eu, 0x00000efdu, 0x00000efcu, 0x00050041u, 0x00000016u, 0x00000f01u, 0x00000e4cu, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000f02u, 0x00000f01u, 0x000500c5u, 0x00000008u, 0x00000f03u, 0x00000ef6u, 0x00000f02u, 0x0005005fu, 0x000000abu, 0x00000f04u, 0x00000ef4u, 0x00000f03u, 0x00050051u, 0x00000006u, 0x00000f05u, 0x00000f04u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000f06u, 0x00000f05u, 0x00050041u, 0x00000016u, 0x00000f07u, 0x00000e49u, 0x000001dau, 0x0003003eu, 0x00000f07u, 0x00000f06u, 0x00050041u, 0x00000016u, 0x00000f0bu, 0x00000e4cu, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000f0cu, 0x00000f0bu, 0x000500c5u, 0x00000008u, 0x00000f0du, 0x00000ef6u, 0x00000f0cu, 0x0005005fu, 0x000000abu, 0x00000f0eu, 0x00000ef4u, 0x00000f0du, 0x00050051u, 0x00000006u, 0x00000f0fu, 0x00000f0eu, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000f10u, 0x00000f0fu, 0x00050041u, 0x00000016u, 0x00000f11u, 0x00000e49u, 0x00000193u, 0x0003003eu, 0x00000f11u, 0x00000f10u, 0x000200f9u, 0x00000edeu, 0x000200f8u, 0x00000edfu, 0x0004003du, 0x00000014u, 0x00000ee1u, 0x00000e4cu, 0x000500c3u, 0x00000014u, 0x00000ee3u, 0x00000ee1u, 0x0000195du, 0x00050051u, 0x00000008u, 0x00000ee4u, 0x00000ee3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000ee5u, 0x00000ee3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ee6u, 0x00000ee3u, 0x00000002u, 0x0003003eu, 0x00000e49u, 0x00000ee3u, 0x000200f9u, 0x00000edeu, 0x000200f8u, 0x00000edeu, 0x0004003du, 0x00000014u, 0x00000f12u, 0x00000e49u, 0x000500c7u, 0x00000014u, 0x00000f14u, 0x00000f12u, 0x00000134u, 0x0003003eu, 0x00000e46u, 0x000002b3u, 0x0003003eu, 0x00000e47u, 0x00000f14u, 0x000200f9u, 0x00000e4fu, 0x000200f8u, 0x00000e4fu, 0x000900f5u, 0x00000008u, 0x000018c3u, 0x0000147au, 0x00000e6cu, 0x0000147au, 0x00000e9au, 0x000014beu, 0x00000edeu, 0x000900f5u, 0x00000008u, 0x000018a8u, 0x00001450u, 0x00000e6cu, 0x00001450u, 0x00000e9au, 0x00001493u, 0x00000edeu, 0x000900f5u, 0x00000014u, 0x000014d0u, 0x0000149au, 0x00000e6cu, 0x00000e9bu, 0x00000e9au, 0x00000f14u, 0x00000edeu, 0x0003003eu, 0x00000e4eu, 0x000014d0u, 0x0003003eu, 0x00000b69u, 0x000014d0u, 0x000300f7u, 0x00000bf5u, 0x00000000u, 0x000400fau, 0x00000baeu, 0x00000bf6u, 0x00000bf5u, 0x000200f8u, 0x00000bf6u, 0x0003003eu, 0x00000b72u, 0x000014d0u, 0x0003003eu, 0x00000b73u, 0x00000b80u, 0x00060050u, 0x00000014u, 0x00000f1cu, 0x00000b80u, 0x00000b80u, 0x00000b80u, 0x000500c3u, 0x00000014u, 0x00000f1du, 0x00000f1cu, 0x00000128u, 0x000500c7u, 0x00000014u, 0x00000f1fu, 0x00000f1du, 0x0000195au, 0x0003003eu, 0x00000f16u, 0x00000f1fu, 0x000500c7u, 0x00000014u, 0x00000f22u, 0x000014d0u, 0x00001959u, 0x00050080u, 0x00000014u, 0x00000f24u, 0x00000f22u, 0x0000195bu, 0x000500adu, 0x00000138u, 0x00000f26u, 0x000014d0u, 0x00000137u, 0x000600a9u, 0x00000014u, 0x00000f27u, 0x00000f26u, 0x00000134u, 0x00000f24u, 0x0003003eu, 0x00000f17u, 0x00000f27u, 0x000500c7u, 0x00000014u, 0x00000f2bu, 0x000014d0u, 0x0000195au, 0x00050082u, 0x00000014u, 0x00000f2cu, 0x00000f1fu, 0x00000f2bu, 0x000500c3u, 0x00000014u, 0x00000f2eu, 0x00000f2cu, 0x0000195cu, 0x0003003eu, 0x00000f18u, 0x00000f2eu, 0x00050082u, 0x00000014u, 0x00000f31u, 0x00000f27u, 0x000014d0u, 0x0003003eu, 0x00000f19u, 0x00000f31u, 0x000500c7u, 0x00000014u, 0x00000f35u, 0x00000f31u, 0x00000f2eu, 0x00050080u, 0x00000014u, 0x00000f36u, 0x000014d0u, 0x00000f35u, 0x0003003eu, 0x00000f17u, 0x00000f36u, 0x000500c7u, 0x00000014u, 0x00000f39u, 0x00000f36u, 0x00000134u, 0x00050051u, 0x00000008u, 0x00000f3au, 0x00000f39u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000f3bu, 0x00000f39u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000f3cu, 0x00000f39u, 0x00000002u, 0x0003003eu, 0x00000f1au, 0x00000f39u, 0x0003003eu, 0x00000b69u, 0x00000f39u, 0x000200f9u, 0x00000bf5u, 0x000200f8u, 0x00000bf5u, 0x000700f5u, 0x00000014u, 0x00001598u, 0x000014d0u, 0x00000e4fu, 0x00000f39u, 0x00000bf6u, 0x0003003eu, 0x00000b75u, 0x0000128cu, 0x0003003eu, 0x00000b76u, 0x00000bb3u, 0x0003003eu, 0x00000b77u, 0x00001292u, 0x0003003eu, 0x00000b78u, 0x00000c72u, 0x0003003eu, 0x00000f3eu, 0x0000009cu, 0x000300f7u, 0x00000f41u, 0x00000000u, 0x000b00fbu, 0x00000c72u, 0x00000f41u, 0x00000000u, 0x00000f42u, 0x00000001u, 0x00000f43u, 0x00000002u, 0x00000f44u, 0x00000003u, 0x00000f45u, 0x000200f8u, 0x00000f45u, 0x0003003eu, 0x00000f3eu, 0x00000bb3u, 0x000200f9u, 0x00000f41u, 0x000200f8u, 0x00000f44u, 0x0003003eu, 0x00000f3eu, 0x000000d3u, 0x000200f9u, 0x00000f41u, 0x000200f8u, 0x00000f43u, 0x00050080u, 0x00000008u, 0x00000f53u, 0x0000128cu, 0x00000bb3u, 0x000500c7u, 0x00000008u, 0x00000f54u, 0x00000f53u, 0x000000d3u, 0x0003003eu, 0x00000f3eu, 0x00000f54u, 0x000200f9u, 0x00000f41u, 0x000200f8u, 0x00000f42u, 0x000300f7u, 0x00000f47u, 0x00000000u, 0x000400fau, 0x00001292u, 0x00000f48u, 0x00000f49u, 0x000200f8u, 0x00000f49u, 0x00050082u, 0x00000008u, 0x00000f4fu, 0x0000128cu, 0x000000afu, 0x000500c7u, 0x00000008u, 0x00000f50u, 0x00000f4fu, 0x000000d3u, 0x0003003eu, 0x00000f3eu, 0x00000f50u, 0x000200f9u, 0x00000f47u, 0x000200f8u, 0x00000f48u, 0x00050080u, 0x00000008u, 0x00000f4cu, 0x00000bb3u, 0x0000128cu, 0x0007000cu, 0x00000008u, 0x00000f4du, 0x00000001u, 0x00000027u, 0x000000d3u, 0x00000f4cu, 0x0003003eu, 0x00000f3eu, 0x00000f4du, 0x000200f9u, 0x00000f47u, 0x000200f8u, 0x00000f47u, 0x000700f5u, 0x00000008u, 0x00001596u, 0x00000f4du, 0x00000f48u, 0x00000f50u, 0x00000f49u, 0x000200f9u, 0x00000f41u, 0x000200f8u, 0x00000f41u, 0x000d00f5u, 0x00000008u, 0x00001595u, 0x0000009cu, 0x00000bf5u, 0x00001596u, 0x00000f47u, 0x00000f54u, 0x00000f43u, 0x000000d3u, 0x00000f44u, 0x00000bb3u, 0x00000f45u, 0x0003003eu, 0x00000f3fu, 0x00001595u, 0x0003003eu, 0x00000b74u, 0x00001595u, 0x000500c4u, 0x00000008u, 0x00000c02u, 0x00001595u, 0x000000c7u, 0x00050051u, 0x00000008u, 0x00000c03u, 0x00001598u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c04u, 0x00001598u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c05u, 0x00001598u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000c06u, 0x00000c03u, 0x00000c04u, 0x00000c05u, 0x00000c02u, 0x0003003eu, 0x00000b79u, 0x00000c06u, 0x000300f7u, 0x00000f57u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000f58u, 0x00000f59u, 0x000200f8u, 0x00000f59u, 0x0003003eu, 0x00000381u, 0x00000c06u, 0x000200f9u, 0x00000f57u, 0x000200f8u, 0x00000f58u, 0x0008004fu, 0x00000014u, 0x00000f5bu, 0x00000c06u, 0x00000c06u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000f5cu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000f5du, 0x00000f5cu, 0x00000c06u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000f5du, 0x000200f9u, 0x00000f57u, 0x000200f8u, 0x00000f57u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000300f7u, 0x00000c09u, 0x00000000u, 0x000400fau, 0x00000b9au, 0x00000c0au, 0x00000c0bu, 0x000200f8u, 0x00000c0bu, 0x000300f7u, 0x00000c13u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000c14u, 0x00000c13u, 0x000200f8u, 0x00000c14u, 0x000300f7u, 0x00000fa3u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000fa3u, 0x00000002u, 0x00000fa4u, 0x00000003u, 0x00000fa5u, 0x000200f8u, 0x00000fa5u, 0x0004003du, 0x00000009u, 0x00000fc2u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00000fc3u, 0x00000fc2u, 0x00000fc2u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000fc4u, 0x00000fc3u, 0x0003003eu, 0x00000fa0u, 0x00000fc4u, 0x00050041u, 0x00000007u, 0x00000fc5u, 0x00000fa0u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000fc6u, 0x00000fc5u, 0x000500c4u, 0x00000006u, 0x00000fc7u, 0x00000fc6u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000fc8u, 0x00000fa0u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000fc9u, 0x00000fc8u, 0x000500c5u, 0x00000006u, 0x00000fcau, 0x00000fc7u, 0x00000fc9u, 0x0003003eu, 0x00000fa1u, 0x00000fcau, 0x000500c7u, 0x00000006u, 0x00000fccu, 0x00000fcau, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000fcdu, 0x00000fccu, 0x000001e0u, 0x0003003eu, 0x00000fa2u, 0x00000fcdu, 0x000500c2u, 0x00000006u, 0x00000fcfu, 0x00000fcau, 0x00000193u, 0x0004007cu, 0x00000008u, 0x00000fd0u, 0x00000fcfu, 0x0003003eu, 0x00000419u, 0x00000fd0u, 0x000500c7u, 0x00000006u, 0x00000fd2u, 0x00000fcau, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000fd3u, 0x00000fd2u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000fd5u, 0x00000fd3u, 0x00000fcdu, 0x0004007cu, 0x00000008u, 0x00000fd6u, 0x00000fd5u, 0x0003003eu, 0x000003fbu, 0x00000fd6u, 0x000200f9u, 0x00000fa3u, 0x000200f8u, 0x00000fa4u, 0x00050041u, 0x0000009au, 0x00000fa6u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000fa7u, 0x00000fa6u, 0x000500c3u, 0x00000008u, 0x00000fa8u, 0x00000fa7u, 0x000000bbu, 0x00050041u, 0x0000009au, 0x00000fa9u, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000faau, 0x00000fa9u, 0x000500c7u, 0x00000008u, 0x00000fabu, 0x00000faau, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000facu, 0x00000fa8u, 0x00000fabu, 0x0003003eu, 0x000003fbu, 0x00000facu, 0x00050041u, 0x0000009au, 0x00000fadu, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000faeu, 0x00000fadu, 0x0004007cu, 0x00000006u, 0x00000fafu, 0x00000faeu, 0x000500c7u, 0x00000006u, 0x00000fb0u, 0x00000fafu, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000fb1u, 0x00000fb0u, 0x00000408u, 0x0003003eu, 0x00000f9fu, 0x00000fb1u, 0x00050041u, 0x0000009au, 0x00000fb2u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000fb3u, 0x00000fb2u, 0x0004007cu, 0x00000006u, 0x00000fb4u, 0x00000fb3u, 0x000500c7u, 0x00000006u, 0x00000fb5u, 0x00000fb4u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000fb6u, 0x00000fb5u, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000fb8u, 0x00000fb1u, 0x00000fb6u, 0x0003003eu, 0x00000f9fu, 0x00000fb8u, 0x0004003du, 0x00000008u, 0x00000fbau, 0x00000fa9u, 0x0004007cu, 0x00000006u, 0x00000fbbu, 0x00000fbau, 0x000500c7u, 0x00000006u, 0x00000fbcu, 0x00000fbbu, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000fbdu, 0x00000fbcu, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000fbfu, 0x00000fb8u, 0x00000fbdu, 0x0003003eu, 0x00000f9fu, 0x00000fbfu, 0x0004007cu, 0x00000008u, 0x00000fc1u, 0x00000fbfu, 0x0003003eu, 0x00000419u, 0x00000fc1u, 0x000200f9u, 0x00000fa3u, 0x000200f8u, 0x00000fa3u, 0x000200f9u, 0x00000c13u, 0x000200f8u, 0x00000c13u, 0x000200f9u, 0x00000c09u, 0x000200f8u, 0x00000c0au, 0x0003003eu, 0x00000b7au, 0x00000b7du, 0x00050082u, 0x00000008u, 0x00000f65u, 0x00000170u, 0x00000b7du, 0x0007000cu, 0x00000008u, 0x00000f66u, 0x00000001u, 0x0000002au, 0x00000f65u, 0x000000afu, 0x0003003eu, 0x00000f5fu, 0x00000f66u, 0x0006000cu, 0x00000008u, 0x00000f68u, 0x00000001u, 0x0000004au, 0x00000f66u, 0x00050082u, 0x00000008u, 0x00000f69u, 0x00000175u, 0x00000f68u, 0x0003003eu, 0x00000f60u, 0x00000f69u, 0x0008000cu, 0x00000008u, 0x00000f6bu, 0x00000001u, 0x0000002du, 0x00000f69u, 0x0000009cu, 0x000000d3u, 0x0003003eu, 0x00000f60u, 0x00000f6bu, 0x00050082u, 0x00000008u, 0x00000f6du, 0x000000cdu, 0x00000f6bu, 0x0007000cu, 0x00000008u, 0x00000f6eu, 0x00000001u, 0x0000002au, 0x00000f6du, 0x0000009cu, 0x0003003eu, 0x00000f61u, 0x00000f6eu, 0x000500c3u, 0x00000008u, 0x00000f71u, 0x00000b7du, 0x00000f6eu, 0x000500c7u, 0x00000008u, 0x00000f72u, 0x00000f71u, 0x0000015du, 0x0003003eu, 0x00000f62u, 0x00000f72u, 0x000500c4u, 0x00000008u, 0x00000f74u, 0x00000f6bu, 0x000000eau, 0x00050080u, 0x00000008u, 0x00000f76u, 0x00000f74u, 0x00000f72u, 0x0003003eu, 0x00000f63u, 0x00000f76u, 0x0003003eu, 0x00000419u, 0x00000f76u, 0x0003003eu, 0x000003fbu, 0x00000c55u, 0x0003003eu, 0x00000568u, 0x000002b3u, 0x000300f7u, 0x00000c10u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000c11u, 0x00000c10u, 0x000200f8u, 0x00000c11u, 0x0004003du, 0x00000008u, 0x00000f78u, 0x00000419u, 0x0004007cu, 0x00000006u, 0x00000f79u, 0x00000f78u, 0x000500c4u, 0x00000006u, 0x00000f7au, 0x00000f79u, 0x00000415u, 0x0004003du, 0x00000008u, 0x00000f7bu, 0x000003fbu, 0x0004007cu, 0x00000006u, 0x00000f7cu, 0x00000f7bu, 0x000500c5u, 0x00000006u, 0x00000f7du, 0x00000f7au, 0x00000f7cu, 0x0003003eu, 0x00000f77u, 0x00000f7du, 0x000300f7u, 0x00000f7eu, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000f7eu, 0x00000002u, 0x00000f7fu, 0x00000003u, 0x00000f80u, 0x000200f8u, 0x00000f80u, 0x000500c2u, 0x00000006u, 0x00000f96u, 0x00000f7du, 0x00000442u, 0x000500c7u, 0x00000006u, 0x00000f97u, 0x00000f96u, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x00000f98u, 0x00000f97u, 0x00050041u, 0x0000009au, 0x00000f99u, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x00000f99u, 0x00000f98u, 0x000500c2u, 0x00000006u, 0x00000f9bu, 0x00000f7du, 0x00000193u, 0x000500c7u, 0x00000006u, 0x00000f9cu, 0x00000f9bu, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x00000f9du, 0x00000f9cu, 0x00050041u, 0x0000009au, 0x00000f9eu, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000f9eu, 0x00000f9du, 0x000200f9u, 0x00000f7eu, 0x000200f8u, 0x00000f7fu, 0x000500c2u, 0x00000006u, 0x00000f82u, 0x00000f7du, 0x00000442u, 0x000500c7u, 0x00000006u, 0x00000f83u, 0x00000f82u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000f84u, 0x00000f83u, 0x00050041u, 0x0000009au, 0x00000f85u, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x00000f85u, 0x00000f84u, 0x000500c2u, 0x00000006u, 0x00000f87u, 0x00000f7du, 0x00000448u, 0x000500c7u, 0x00000006u, 0x00000f88u, 0x00000f87u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000f89u, 0x00000f88u, 0x00050041u, 0x0000009au, 0x00000f8au, 0x00000381u, 0x000001dau, 0x0003003eu, 0x00000f8au, 0x00000f89u, 0x000500c2u, 0x00000006u, 0x00000f8cu, 0x00000f7du, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x00000f8du, 0x00000f8cu, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000f8eu, 0x00000f8du, 0x00050041u, 0x0000009au, 0x00000f8fu, 0x00000381u, 0x00000193u, 0x0003003eu, 0x00000f8fu, 0x00000f8eu, 0x000500c7u, 0x00000006u, 0x00000f91u, 0x00000f7du, 0x00000453u, 0x000500c4u, 0x00000006u, 0x00000f92u, 0x00000f91u, 0x00000448u, 0x0004007cu, 0x00000008u, 0x00000f93u, 0x00000f92u, 0x00050041u, 0x0000009au, 0x00000f94u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000f94u, 0x00000f93u, 0x000200f9u, 0x00000f7eu, 0x000200f8u, 0x00000f7eu, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000c10u, 0x000200f8u, 0x00000c10u, 0x000200f9u, 0x00000c09u, 0x000200f8u, 0x00000c09u, 0x000200f9u, 0x00000bd0u, 0x000200f8u, 0x00000bd0u, 0x000700f5u, 0x00000014u, 0x000018d8u, 0x000014a5u, 0x00000bc8u, 0x0000149au, 0x00000c09u, 0x000700f5u, 0x00000008u, 0x000018bdu, 0x0000147au, 0x00000bc8u, 0x000018c3u, 0x00000c09u, 0x000700f5u, 0x00000008u, 0x000018a2u, 0x00001450u, 0x00000bc8u, 0x000018a8u, 0x00000c09u, 0x000700f5u, 0x00000014u, 0x0000187au, 0x00001373u, 0x00000bc8u, 0x00001882u, 0x00000c09u, 0x000700f5u, 0x00000008u, 0x00001852u, 0x00001355u, 0x00000bc8u, 0x0000185au, 0x00000c09u, 0x000700f5u, 0x00000008u, 0x0000182au, 0x00001337u, 0x00000bc8u, 0x00001832u, 0x00000c09u, 0x000200f9u, 0x000008acu, 0x000200f8u, 0x000008abu, 0x00060041u, 0x000000e6u, 0x000008b3u, 0x000008b1u, 0x0000009cu, 0x0000088cu, 0x0004003du, 0x00000006u, 0x000008b4u, 0x000008b3u, 0x0003003eu, 0x000008adu, 0x000008b4u, 0x0003003eu, 0x000008b5u, 0x000008b4u, 0x0003003eu, 0x000008b7u, 0x00000883u, 0x000300f7u, 0x00000acdu, 0x00000000u, 0x000900fbu, 0x00000367u, 0x00000acdu, 0x00000000u, 0x00000aceu, 0x00000001u, 0x00000acfu, 0x00000002u, 0x00000ad0u, 0x000200f8u, 0x00000ad0u, 0x000500c2u, 0x00000006u, 0x00000ad8u, 0x000008b4u, 0x000000d9u, 0x000500c7u, 0x00000006u, 0x00000ad9u, 0x00000ad8u, 0x000003aeu, 0x0003003eu, 0x00000ac8u, 0x00000ad9u, 0x000500c2u, 0x00000006u, 0x00000adbu, 0x000008b4u, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x00000adcu, 0x00000adbu, 0x000003aeu, 0x0003003eu, 0x00000ac9u, 0x00000adcu, 0x000500c4u, 0x00000006u, 0x00000adeu, 0x000008b4u, 0x000000b5u, 0x000500c7u, 0x00000006u, 0x00000adfu, 0x00000adeu, 0x000003aeu, 0x0003003eu, 0x00000acau, 0x00000adfu, 0x000500c7u, 0x00000006u, 0x00000ae1u, 0x000008b4u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000ae2u, 0x00000ae1u, 0x00000694u, 0x0003003eu, 0x00000acbu, 0x00000ae2u, 0x0004007cu, 0x00000008u, 0x00000ae4u, 0x00000ad9u, 0x0004007cu, 0x00000008u, 0x00000ae6u, 0x00000adcu, 0x0004007cu, 0x00000008u, 0x00000ae8u, 0x00000adfu, 0x0004007cu, 0x00000008u, 0x00000aeau, 0x00000ae2u, 0x00070050u, 0x00000009u, 0x00000aebu, 0x00000ae4u, 0x00000ae6u, 0x00000ae8u, 0x00000aeau, 0x0003003eu, 0x00000accu, 0x00000aebu, 0x000300f7u, 0x00000af8u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000af9u, 0x00000afau, 0x000200f8u, 0x00000afau, 0x0003003eu, 0x00000381u, 0x00000aebu, 0x000200f9u, 0x00000af8u, 0x000200f8u, 0x00000af9u, 0x0008004fu, 0x00000014u, 0x00000afcu, 0x00000aebu, 0x00000aebu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000afdu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000afeu, 0x00000afdu, 0x00000aebu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000afeu, 0x000200f9u, 0x00000af8u, 0x000200f8u, 0x00000af8u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000acdu, 0x000200f8u, 0x00000acfu, 0x000500c7u, 0x00000006u, 0x00000ad2u, 0x000008b4u, 0x000003d5u, 0x0003003eu, 0x000008b5u, 0x00000ad2u, 0x0004007cu, 0x00000008u, 0x00000ad4u, 0x00000ad2u, 0x00070050u, 0x00000009u, 0x00000ad5u, 0x00000ad4u, 0x00000ad4u, 0x00000ad4u, 0x00000ad4u, 0x0003003eu, 0x00000ac7u, 0x00000ad5u, 0x000300f7u, 0x00000af0u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000af1u, 0x00000af2u, 0x000200f8u, 0x00000af2u, 0x0003003eu, 0x00000381u, 0x00000ad5u, 0x000200f9u, 0x00000af0u, 0x000200f8u, 0x00000af1u, 0x0008004fu, 0x00000014u, 0x00000af4u, 0x00000ad5u, 0x00000ad5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000af5u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000af6u, 0x00000af5u, 0x00000ad5u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000af6u, 0x000200f9u, 0x00000af0u, 0x000200f8u, 0x00000af0u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000acdu, 0x000200f8u, 0x00000aceu, 0x0003003eu, 0x00000381u, 0x0000067bu, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000acdu, 0x000200f8u, 0x00000acdu, 0x000300f7u, 0x00000aedu, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000aeeu, 0x00000aedu, 0x000200f8u, 0x00000aeeu, 0x000300f7u, 0x00000b04u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000b04u, 0x00000002u, 0x00000b05u, 0x00000003u, 0x00000b06u, 0x000200f8u, 0x00000b06u, 0x0004003du, 0x00000009u, 0x00000b23u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00000b24u, 0x00000b23u, 0x00000b23u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000b25u, 0x00000b24u, 0x0003003eu, 0x00000b01u, 0x00000b25u, 0x00050041u, 0x00000007u, 0x00000b26u, 0x00000b01u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000b27u, 0x00000b26u, 0x000500c4u, 0x00000006u, 0x00000b28u, 0x00000b27u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000b29u, 0x00000b01u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000b2au, 0x00000b29u, 0x000500c5u, 0x00000006u, 0x00000b2bu, 0x00000b28u, 0x00000b2au, 0x0003003eu, 0x00000b02u, 0x00000b2bu, 0x000500c7u, 0x00000006u, 0x00000b2du, 0x00000b2bu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000b2eu, 0x00000b2du, 0x000001e0u, 0x0003003eu, 0x00000b03u, 0x00000b2eu, 0x000500c2u, 0x00000006u, 0x00000b30u, 0x00000b2bu, 0x00000193u, 0x0004007cu, 0x00000008u, 0x00000b31u, 0x00000b30u, 0x0003003eu, 0x00000419u, 0x00000b31u, 0x000500c7u, 0x00000006u, 0x00000b33u, 0x00000b2bu, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000b34u, 0x00000b33u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000b36u, 0x00000b34u, 0x00000b2eu, 0x0004007cu, 0x00000008u, 0x00000b37u, 0x00000b36u, 0x0003003eu, 0x000003fbu, 0x00000b37u, 0x000200f9u, 0x00000b04u, 0x000200f8u, 0x00000b05u, 0x00050041u, 0x0000009au, 0x00000b07u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000b08u, 0x00000b07u, 0x000500c3u, 0x00000008u, 0x00000b09u, 0x00000b08u, 0x000000bbu, 0x00050041u, 0x0000009au, 0x00000b0au, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000b0bu, 0x00000b0au, 0x000500c7u, 0x00000008u, 0x00000b0cu, 0x00000b0bu, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000b0du, 0x00000b09u, 0x00000b0cu, 0x0003003eu, 0x000003fbu, 0x00000b0du, 0x00050041u, 0x0000009au, 0x00000b0eu, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000b0fu, 0x00000b0eu, 0x0004007cu, 0x00000006u, 0x00000b10u, 0x00000b0fu, 0x000500c7u, 0x00000006u, 0x00000b11u, 0x00000b10u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000b12u, 0x00000b11u, 0x00000408u, 0x0003003eu, 0x00000b00u, 0x00000b12u, 0x00050041u, 0x0000009au, 0x00000b13u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000b14u, 0x00000b13u, 0x0004007cu, 0x00000006u, 0x00000b15u, 0x00000b14u, 0x000500c7u, 0x00000006u, 0x00000b16u, 0x00000b15u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000b17u, 0x00000b16u, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000b19u, 0x00000b12u, 0x00000b17u, 0x0003003eu, 0x00000b00u, 0x00000b19u, 0x0004003du, 0x00000008u, 0x00000b1bu, 0x00000b0au, 0x0004007cu, 0x00000006u, 0x00000b1cu, 0x00000b1bu, 0x000500c7u, 0x00000006u, 0x00000b1du, 0x00000b1cu, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000b1eu, 0x00000b1du, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000b20u, 0x00000b19u, 0x00000b1eu, 0x0003003eu, 0x00000b00u, 0x00000b20u, 0x0004007cu, 0x00000008u, 0x00000b22u, 0x00000b20u, 0x0003003eu, 0x00000419u, 0x00000b22u, 0x000200f9u, 0x00000b04u, 0x000200f8u, 0x00000b04u, 0x000200f9u, 0x00000aedu, 0x000200f8u, 0x00000aedu, 0x000200f9u, 0x000008acu, 0x000200f8u, 0x000008acu, 0x000700f5u, 0x00000014u, 0x000018d2u, 0x000014a5u, 0x00000aedu, 0x000018d8u, 0x00000bd0u, 0x000700f5u, 0x00000008u, 0x000018b7u, 0x0000147au, 0x00000aedu, 0x000018bdu, 0x00000bd0u, 0x000700f5u, 0x00000008u, 0x0000189cu, 0x00001450u, 0x00000aedu, 0x000018a2u, 0x00000bd0u, 0x000700f5u, 0x00000014u, 0x00001874u, 0x00001373u, 0x00000aedu, 0x0000187au, 0x00000bd0u, 0x000700f5u, 0x00000008u, 0x0000184cu, 0x00001355u, 0x00000aedu, 0x00001852u, 0x00000bd0u, 0x000700f5u, 0x00000008u, 0x00001824u, 0x00001337u, 0x00000aedu, 0x0000182au, 0x00000bd0u, 0x000700f5u, 0x00000014u, 0x000017e6u, 0x00001241u, 0x00000aedu, 0x0000123fu, 0x00000bd0u, 0x000200f9u, 0x000008a1u, 0x000200f8u, 0x000008a0u, 0x00070041u, 0x000000e6u, 0x000008a4u, 0x000000a6u, 0x0000009cu, 0x00000883u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000008a5u, 0x000008a4u, 0x0003003eu, 0x000008a3u, 0x000008a5u, 0x000300f7u, 0x00000a11u, 0x00000000u, 0x000b00fbu, 0x00000367u, 0x00000a11u, 0x00000004u, 0x00000a12u, 0x00000002u, 0x00000a13u, 0x00000003u, 0x00000a14u, 0x00000001u, 0x00000a15u, 0x000200f8u, 0x00000a15u, 0x0004003du, 0x00000006u, 0x00000a60u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000a61u, 0x00000a60u, 0x000001e0u, 0x000500c6u, 0x00000006u, 0x00000a62u, 0x00000a61u, 0x000001e0u, 0x00050084u, 0x00000006u, 0x00000a63u, 0x00000a62u, 0x000003a7u, 0x000500c2u, 0x00000006u, 0x00000a65u, 0x000008a5u, 0x00000a63u, 0x0003003eu, 0x000008a3u, 0x00000a65u, 0x000500c7u, 0x00000006u, 0x00000a67u, 0x00000a65u, 0x000003d5u, 0x0003003eu, 0x000008a3u, 0x00000a67u, 0x0004007cu, 0x00000008u, 0x00000a69u, 0x00000a67u, 0x00070050u, 0x00000009u, 0x00000a6au, 0x00000a69u, 0x00000a69u, 0x00000a69u, 0x00000a69u, 0x0003003eu, 0x00000a10u, 0x00000a6au, 0x000300f7u, 0x00000a87u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a88u, 0x00000a89u, 0x000200f8u, 0x00000a89u, 0x0003003eu, 0x00000381u, 0x00000a6au, 0x000200f9u, 0x00000a87u, 0x000200f8u, 0x00000a88u, 0x0008004fu, 0x00000014u, 0x00000a8bu, 0x00000a6au, 0x00000a6au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a8cu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a8du, 0x00000a8cu, 0x00000a6au, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a8du, 0x000200f9u, 0x00000a87u, 0x000200f8u, 0x00000a87u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a11u, 0x000200f8u, 0x00000a14u, 0x0004003du, 0x00000006u, 0x00000a48u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000a49u, 0x00000a48u, 0x000001dau, 0x000500c6u, 0x00000006u, 0x00000a4au, 0x00000a49u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000a4bu, 0x00000a4au, 0x000003f0u, 0x000500c2u, 0x00000006u, 0x00000a4du, 0x000008a5u, 0x00000a4bu, 0x0003003eu, 0x000008a3u, 0x00000a4du, 0x000500c7u, 0x00000006u, 0x00000a4fu, 0x00000a4du, 0x00000502u, 0x0003003eu, 0x000008a3u, 0x00000a4fu, 0x000500c2u, 0x00000006u, 0x00000a51u, 0x00000a4fu, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x00000a52u, 0x00000a51u, 0x000003d5u, 0x0003003eu, 0x00000a0du, 0x00000a52u, 0x000500c2u, 0x00000006u, 0x00000a54u, 0x00000a4fu, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x00000a55u, 0x00000a54u, 0x000003d5u, 0x0003003eu, 0x00000a0eu, 0x00000a55u, 0x0004007cu, 0x00000008u, 0x00000a57u, 0x00000a52u, 0x0004007cu, 0x00000008u, 0x00000a5du, 0x00000a55u, 0x00070050u, 0x00000009u, 0x00000a5eu, 0x00000a57u, 0x00000a57u, 0x00000a57u, 0x00000a5du, 0x0003003eu, 0x00000a0fu, 0x00000a5eu, 0x000300f7u, 0x00000a7fu, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a80u, 0x00000a81u, 0x000200f8u, 0x00000a81u, 0x0003003eu, 0x00000381u, 0x00000a5eu, 0x000200f9u, 0x00000a7fu, 0x000200f8u, 0x00000a80u, 0x0008004fu, 0x00000014u, 0x00000a83u, 0x00000a5eu, 0x00000a5eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a84u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a85u, 0x00000a84u, 0x00000a5eu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a85u, 0x000200f9u, 0x00000a7fu, 0x000200f8u, 0x00000a7fu, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a11u, 0x000200f8u, 0x00000a13u, 0x0004003du, 0x00000006u, 0x00000a2cu, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000a2du, 0x00000a2cu, 0x000001dau, 0x000500c6u, 0x00000006u, 0x00000a2eu, 0x00000a2du, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000a2fu, 0x00000a2eu, 0x000003f0u, 0x000500c2u, 0x00000006u, 0x00000a31u, 0x000008a5u, 0x00000a2fu, 0x0003003eu, 0x000008a3u, 0x00000a31u, 0x000500c2u, 0x00000006u, 0x00000a33u, 0x00000a31u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x00000a34u, 0x00000a33u, 0x000003aeu, 0x0003003eu, 0x00000a08u, 0x00000a34u, 0x000500c2u, 0x00000006u, 0x00000a36u, 0x00000a31u, 0x000001e0u, 0x000500c7u, 0x00000006u, 0x00000a37u, 0x00000a36u, 0x000003aeu, 0x0003003eu, 0x00000a09u, 0x00000a37u, 0x000500c4u, 0x00000006u, 0x00000a39u, 0x00000a31u, 0x00000193u, 0x000500c7u, 0x00000006u, 0x00000a3au, 0x00000a39u, 0x000003aeu, 0x0003003eu, 0x00000a0au, 0x00000a3au, 0x000500c7u, 0x00000006u, 0x00000a3cu, 0x00000a31u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000a3du, 0x00000a3cu, 0x00000694u, 0x0003003eu, 0x00000a0bu, 0x00000a3du, 0x0004007cu, 0x00000008u, 0x00000a3fu, 0x00000a34u, 0x0004007cu, 0x00000008u, 0x00000a41u, 0x00000a37u, 0x0004007cu, 0x00000008u, 0x00000a43u, 0x00000a3au, 0x0004007cu, 0x00000008u, 0x00000a45u, 0x00000a3du, 0x00070050u, 0x00000009u, 0x00000a46u, 0x00000a3fu, 0x00000a41u, 0x00000a43u, 0x00000a45u, 0x0003003eu, 0x00000a0cu, 0x00000a46u, 0x000300f7u, 0x00000a77u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a78u, 0x00000a79u, 0x000200f8u, 0x00000a79u, 0x0003003eu, 0x00000381u, 0x00000a46u, 0x000200f9u, 0x00000a77u, 0x000200f8u, 0x00000a78u, 0x0008004fu, 0x00000014u, 0x00000a7bu, 0x00000a46u, 0x00000a46u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a7cu, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a7du, 0x00000a7cu, 0x00000a46u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a7du, 0x000200f9u, 0x00000a77u, 0x000200f8u, 0x00000a77u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a11u, 0x000200f8u, 0x00000a12u, 0x000500c2u, 0x00000006u, 0x00000a17u, 0x000008a5u, 0x000003efu, 0x000500c7u, 0x00000006u, 0x00000a18u, 0x00000a17u, 0x000003d5u, 0x0003003eu, 0x00000a03u, 0x00000a18u, 0x000500c2u, 0x00000006u, 0x00000a1au, 0x000008a5u, 0x000003f0u, 0x000500c7u, 0x00000006u, 0x00000a1bu, 0x00000a1au, 0x000003d5u, 0x0003003eu, 0x00000a04u, 0x00000a1bu, 0x000500c2u, 0x00000006u, 0x00000a1du, 0x000008a5u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x00000a1eu, 0x00000a1du, 0x000003d5u, 0x0003003eu, 0x00000a05u, 0x00000a1eu, 0x000500c2u, 0x00000006u, 0x00000a20u, 0x000008a5u, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x00000a21u, 0x00000a20u, 0x000003d5u, 0x0003003eu, 0x00000a06u, 0x00000a21u, 0x0004007cu, 0x00000008u, 0x00000a23u, 0x00000a18u, 0x0004007cu, 0x00000008u, 0x00000a25u, 0x00000a1bu, 0x0004007cu, 0x00000008u, 0x00000a27u, 0x00000a1eu, 0x0004007cu, 0x00000008u, 0x00000a29u, 0x00000a21u, 0x00070050u, 0x00000009u, 0x00000a2au, 0x00000a23u, 0x00000a25u, 0x00000a27u, 0x00000a29u, 0x0003003eu, 0x00000a07u, 0x00000a2au, 0x000300f7u, 0x00000a6fu, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a70u, 0x00000a71u, 0x000200f8u, 0x00000a71u, 0x0003003eu, 0x00000381u, 0x00000a2au, 0x000200f9u, 0x00000a6fu, 0x000200f8u, 0x00000a70u, 0x0008004fu, 0x00000014u, 0x00000a73u, 0x00000a2au, 0x00000a2au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a74u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000a75u, 0x00000a74u, 0x00000a2au, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000a75u, 0x000200f9u, 0x00000a6fu, 0x000200f8u, 0x00000a6fu, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x00000a11u, 0x000200f8u, 0x00000a11u, 0x000300f7u, 0x00000a6cu, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000a6du, 0x00000a6cu, 0x000200f8u, 0x00000a6du, 0x000300f7u, 0x00000a93u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000a93u, 0x00000002u, 0x00000a94u, 0x00000003u, 0x00000a95u, 0x000200f8u, 0x00000a95u, 0x0004003du, 0x00000009u, 0x00000ab2u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00000ab3u, 0x00000ab2u, 0x00000ab2u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000ab4u, 0x00000ab3u, 0x0003003eu, 0x00000a90u, 0x00000ab4u, 0x00050041u, 0x00000007u, 0x00000ab5u, 0x00000a90u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000ab6u, 0x00000ab5u, 0x000500c4u, 0x00000006u, 0x00000ab7u, 0x00000ab6u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000ab8u, 0x00000a90u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000ab9u, 0x00000ab8u, 0x000500c5u, 0x00000006u, 0x00000abau, 0x00000ab7u, 0x00000ab9u, 0x0003003eu, 0x00000a91u, 0x00000abau, 0x000500c7u, 0x00000006u, 0x00000abcu, 0x00000abau, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000abdu, 0x00000abcu, 0x000001e0u, 0x0003003eu, 0x00000a92u, 0x00000abdu, 0x000500c2u, 0x00000006u, 0x00000abfu, 0x00000abau, 0x00000193u, 0x0004007cu, 0x00000008u, 0x00000ac0u, 0x00000abfu, 0x0003003eu, 0x00000419u, 0x00000ac0u, 0x000500c7u, 0x00000006u, 0x00000ac2u, 0x00000abau, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000ac3u, 0x00000ac2u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000ac5u, 0x00000ac3u, 0x00000abdu, 0x0004007cu, 0x00000008u, 0x00000ac6u, 0x00000ac5u, 0x0003003eu, 0x000003fbu, 0x00000ac6u, 0x000200f9u, 0x00000a93u, 0x000200f8u, 0x00000a94u, 0x00050041u, 0x0000009au, 0x00000a96u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000a97u, 0x00000a96u, 0x000500c3u, 0x00000008u, 0x00000a98u, 0x00000a97u, 0x000000bbu, 0x00050041u, 0x0000009au, 0x00000a99u, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000a9au, 0x00000a99u, 0x000500c7u, 0x00000008u, 0x00000a9bu, 0x00000a9au, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000a9cu, 0x00000a98u, 0x00000a9bu, 0x0003003eu, 0x000003fbu, 0x00000a9cu, 0x00050041u, 0x0000009au, 0x00000a9du, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000a9eu, 0x00000a9du, 0x0004007cu, 0x00000006u, 0x00000a9fu, 0x00000a9eu, 0x000500c7u, 0x00000006u, 0x00000aa0u, 0x00000a9fu, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000aa1u, 0x00000aa0u, 0x00000408u, 0x0003003eu, 0x00000a8fu, 0x00000aa1u, 0x00050041u, 0x0000009au, 0x00000aa2u, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000aa3u, 0x00000aa2u, 0x0004007cu, 0x00000006u, 0x00000aa4u, 0x00000aa3u, 0x000500c7u, 0x00000006u, 0x00000aa5u, 0x00000aa4u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000aa6u, 0x00000aa5u, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000aa8u, 0x00000aa1u, 0x00000aa6u, 0x0003003eu, 0x00000a8fu, 0x00000aa8u, 0x0004003du, 0x00000008u, 0x00000aaau, 0x00000a99u, 0x0004007cu, 0x00000006u, 0x00000aabu, 0x00000aaau, 0x000500c7u, 0x00000006u, 0x00000aacu, 0x00000aabu, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000aadu, 0x00000aacu, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000aafu, 0x00000aa8u, 0x00000aadu, 0x0003003eu, 0x00000a8fu, 0x00000aafu, 0x0004007cu, 0x00000008u, 0x00000ab1u, 0x00000aafu, 0x0003003eu, 0x00000419u, 0x00000ab1u, 0x000200f9u, 0x00000a93u, 0x000200f8u, 0x00000a93u, 0x000200f9u, 0x00000a6cu, 0x000200f8u, 0x00000a6cu, 0x000200f9u, 0x000008a1u, 0x000200f8u, 0x000008a1u, 0x000700f5u, 0x00000014u, 0x000018cau, 0x000014a5u, 0x00000a6cu, 0x000018d2u, 0x000008acu, 0x000700f5u, 0x00000008u, 0x000018afu, 0x0000147au, 0x00000a6cu, 0x000018b7u, 0x000008acu, 0x000700f5u, 0x00000008u, 0x00001894u, 0x00001450u, 0x00000a6cu, 0x0000189cu, 0x000008acu, 0x000700f5u, 0x00000014u, 0x0000186cu, 0x00001373u, 0x00000a6cu, 0x00001874u, 0x000008acu, 0x000700f5u, 0x00000008u, 0x00001844u, 0x00001355u, 0x00000a6cu, 0x0000184cu, 0x000008acu, 0x000700f5u, 0x00000008u, 0x0000181cu, 0x00001337u, 0x00000a6cu, 0x00001824u, 0x000008acu, 0x000700f5u, 0x00000014u, 0x000017deu, 0x00001241u, 0x00000a6cu, 0x000017e6u, 0x000008acu, 0x000200f9u, 0x0000089bu, 0x000200f8u, 0x0000089bu, 0x000700f5u, 0x00000014u, 0x000018c9u, 0x000014a5u, 0x0000086fu, 0x000018cau, 0x000008a1u, 0x000700f5u, 0x00000008u, 0x000018aeu, 0x0000147au, 0x0000086fu, 0x000018afu, 0x000008a1u, 0x000700f5u, 0x00000008u, 0x00001893u, 0x00001450u, 0x0000086fu, 0x00001894u, 0x000008a1u, 0x000700f5u, 0x00000014u, 0x0000186bu, 0x00001373u, 0x0000086fu, 0x0000186cu, 0x000008a1u, 0x000700f5u, 0x00000008u, 0x00001843u, 0x00001355u, 0x0000086fu, 0x00001844u, 0x000008a1u, 0x000700f5u, 0x00000008u, 0x0000181bu, 0x00001337u, 0x0000086fu, 0x0000181cu, 0x000008a1u, 0x000700f5u, 0x00000014u, 0x000017ddu, 0x00001241u, 0x0000086fu, 0x000017deu, 0x000008a1u, 0x00050080u, 0x00000006u, 0x000008e5u, 0x00001233u, 0x000000afu, 0x0003003eu, 0x0000085au, 0x000008e5u, 0x000200f9u, 0x00000871u, 0x000200f8u, 0x00000871u, 0x000200f9u, 0x0000086eu, 0x000200f8u, 0x00000870u, 0x000200f9u, 0x0000084du, 0x000200f8u, 0x0000084du, 0x000200f9u, 0x0000084au, 0x000200f8u, 0x0000084cu, 0x0003003eu, 0x000008e6u, 0x0000083cu, 0x0003003eu, 0x000008e9u, 0x0000083fu, 0x0003003eu, 0x000008ecu, 0x00000842u, 0x0003003eu, 0x000008efu, 0x00000845u, 0x0003003eu, 0x000008f2u, 0x00000848u, 0x0004003du, 0x0000006bu, 0x00000fe1u, 0x000008e6u, 0x000500b0u, 0x0000058du, 0x00000fe5u, 0x00000fe1u, 0x00000956u, 0x0004009bu, 0x0000002cu, 0x00000fe6u, 0x00000fe5u, 0x000300f7u, 0x00000fe7u, 0x00000000u, 0x000400fau, 0x00000fe6u, 0x00000fe8u, 0x00000fe7u, 0x000200f8u, 0x00000fe8u, 0x000500c2u, 0x00000006u, 0x00000feau, 0x0000083fu, 0x000004a1u, 0x0003003eu, 0x00000fd7u, 0x00000feau, 0x0004003du, 0x0000006bu, 0x00000febu, 0x000008e6u, 0x00050050u, 0x0000006bu, 0x00000fecu, 0x0000060fu, 0x0000060fu, 0x000500c7u, 0x0000006bu, 0x00000fedu, 0x00000febu, 0x00000fecu, 0x0003003eu, 0x00000fd8u, 0x00000fedu, 0x0004003du, 0x0000006bu, 0x00000feeu, 0x000008e6u, 0x00050050u, 0x0000002eu, 0x00000fefu, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x00000ff0u, 0x00000feeu, 0x00000fefu, 0x0003003eu, 0x000008e6u, 0x00000ff0u, 0x00050041u, 0x00000007u, 0x00000ff1u, 0x00000fd8u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000ff2u, 0x00000ff1u, 0x00050084u, 0x00000006u, 0x00000ff3u, 0x00000ff2u, 0x00000618u, 0x00050041u, 0x00000007u, 0x00000ff4u, 0x00000fd8u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000ff5u, 0x00000ff4u, 0x00050080u, 0x00000006u, 0x00000ff6u, 0x00000ff3u, 0x00000ff5u, 0x0003003eu, 0x00000fd9u, 0x00000ff6u, 0x00050041u, 0x00000007u, 0x00000ff9u, 0x000008e6u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000ffau, 0x00000ff9u, 0x00050084u, 0x00000006u, 0x00000ffbu, 0x00000feau, 0x00000ffau, 0x00050080u, 0x00000006u, 0x00000ffcu, 0x00000845u, 0x00000ffbu, 0x00050041u, 0x00000007u, 0x00000ffdu, 0x000008e6u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000ffeu, 0x00000ffdu, 0x00050080u, 0x00000006u, 0x00000fffu, 0x00000ffcu, 0x00000ffeu, 0x0003003eu, 0x00000fdau, 0x00000fffu, 0x0003003eu, 0x00000fdbu, 0x00000fffu, 0x0003003eu, 0x00000fdcu, 0x00000ff6u, 0x0004003du, 0x0000002cu, 0x0000101bu, 0x00000466u, 0x000300f7u, 0x0000101cu, 0x00000000u, 0x000400fau, 0x0000101bu, 0x0000101du, 0x0000101cu, 0x000200f8u, 0x0000101du, 0x000300f7u, 0x0000101eu, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x0000101eu, 0x00000000u, 0x0000101fu, 0x00000001u, 0x00001020u, 0x00000002u, 0x00001021u, 0x00000003u, 0x00001022u, 0x00000004u, 0x00001023u, 0x000200f8u, 0x00001023u, 0x000500c7u, 0x00000006u, 0x000010b3u, 0x00000fffu, 0x000003ddu, 0x0003003eu, 0x00000fdbu, 0x000010b3u, 0x00050084u, 0x00000006u, 0x000010b5u, 0x00000ff6u, 0x00000530u, 0x00050080u, 0x00000006u, 0x000010b7u, 0x000010b3u, 0x000010b5u, 0x0003003eu, 0x00000fdbu, 0x000010b7u, 0x0004003du, 0x00000009u, 0x000010b8u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x000010b9u, 0x000010b8u, 0x0003003eu, 0x00001019u, 0x000010b9u, 0x00050041u, 0x00000007u, 0x000010bau, 0x00001019u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000010bbu, 0x000010bau, 0x000500c4u, 0x00000006u, 0x000010bcu, 0x000010bbu, 0x000003efu, 0x00050041u, 0x00000007u, 0x000010bdu, 0x00001019u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000010beu, 0x000010bdu, 0x000500c4u, 0x00000006u, 0x000010bfu, 0x000010beu, 0x000003f0u, 0x000500c5u, 0x00000006u, 0x000010c0u, 0x000010bcu, 0x000010bfu, 0x00050041u, 0x00000007u, 0x000010c1u, 0x00001019u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000010c2u, 0x000010c1u, 0x000500c4u, 0x00000006u, 0x000010c3u, 0x000010c2u, 0x000003a7u, 0x000500c5u, 0x00000006u, 0x000010c4u, 0x000010c0u, 0x000010c3u, 0x00050041u, 0x00000007u, 0x000010c5u, 0x00001019u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000010c6u, 0x000010c5u, 0x000500c4u, 0x00000006u, 0x000010c7u, 0x000010c6u, 0x000001b8u, 0x000500c5u, 0x00000006u, 0x000010c8u, 0x000010c4u, 0x000010c7u, 0x0003003eu, 0x0000101au, 0x000010c8u, 0x00060041u, 0x000000e6u, 0x000010cbu, 0x000003e9u, 0x0000009cu, 0x000010b7u, 0x0003003eu, 0x000010cbu, 0x000010c8u, 0x00050084u, 0x00000006u, 0x000010cdu, 0x00000193u, 0x000010b7u, 0x00050041u, 0x0000009au, 0x000010ceu, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000010cfu, 0x000010ceu, 0x000500c7u, 0x00000008u, 0x000010d0u, 0x000010cfu, 0x000000afu, 0x00050084u, 0x00000008u, 0x000010d1u, 0x000010d0u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000010d2u, 0x000010d1u, 0x00060041u, 0x000000f2u, 0x000010d3u, 0x00000388u, 0x0000009cu, 0x000010cdu, 0x0003003eu, 0x000010d3u, 0x000010d2u, 0x00050080u, 0x00000006u, 0x000010d6u, 0x000010cdu, 0x000001dau, 0x00050041u, 0x0000009au, 0x000010d7u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000010d8u, 0x000010d7u, 0x000500c7u, 0x00000008u, 0x000010d9u, 0x000010d8u, 0x000000afu, 0x00050084u, 0x00000008u, 0x000010dau, 0x000010d9u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000010dbu, 0x000010dau, 0x00060041u, 0x000000f2u, 0x000010dcu, 0x00000388u, 0x0000009cu, 0x000010d6u, 0x0003003eu, 0x000010dcu, 0x000010dbu, 0x000300f7u, 0x000010ddu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000010deu, 0x000010ddu, 0x000200f8u, 0x000010deu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x000010e0u, 0x000010b7u, 0x0000055eu, 0x00060041u, 0x000000e6u, 0x000010e1u, 0x000003e9u, 0x0000009cu, 0x000010e0u, 0x0003003eu, 0x000010e1u, 0x00000560u, 0x000200f9u, 0x000010ddu, 0x000200f8u, 0x000010ddu, 0x000200f9u, 0x0000101eu, 0x000200f8u, 0x00001022u, 0x000500c7u, 0x00000006u, 0x00001091u, 0x00000fffu, 0x00000391u, 0x0003003eu, 0x00000fdbu, 0x00001091u, 0x00050084u, 0x00000006u, 0x00001093u, 0x00000ff6u, 0x00000509u, 0x00050080u, 0x00000006u, 0x00001095u, 0x00001091u, 0x00001093u, 0x0003003eu, 0x00000fdbu, 0x00001095u, 0x0004003du, 0x00000009u, 0x00001096u, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x00001097u, 0x00001096u, 0x00001096u, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00001098u, 0x00001097u, 0x0003003eu, 0x00001017u, 0x00001098u, 0x00050041u, 0x00000007u, 0x00001099u, 0x00001017u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000109au, 0x00001099u, 0x000500c4u, 0x00000006u, 0x0000109bu, 0x0000109au, 0x000003a7u, 0x00050041u, 0x00000007u, 0x0000109cu, 0x00001017u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000109du, 0x0000109cu, 0x000500c5u, 0x00000006u, 0x0000109eu, 0x0000109bu, 0x0000109du, 0x0003003eu, 0x00001018u, 0x0000109eu, 0x000500c6u, 0x00000006u, 0x000010a0u, 0x00001095u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x000010a2u, 0x0000109eu, 0x00060041u, 0x000000ebu, 0x000010a3u, 0x0000039du, 0x0000009cu, 0x000010a0u, 0x0003003eu, 0x000010a3u, 0x000010a2u, 0x0004003du, 0x00000006u, 0x000010a6u, 0x0000109cu, 0x000500c7u, 0x00000006u, 0x000010a7u, 0x000010a6u, 0x000001dau, 0x00050084u, 0x00000006u, 0x000010a8u, 0x000010a7u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x000010a9u, 0x000010a8u, 0x00060041u, 0x000000f2u, 0x000010aau, 0x00000388u, 0x0000009cu, 0x00001095u, 0x0003003eu, 0x000010aau, 0x000010a9u, 0x000300f7u, 0x000010abu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000010acu, 0x000010abu, 0x000200f8u, 0x000010acu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x000010afu, 0x000010a0u, 0x00000528u, 0x00040071u, 0x0000009fu, 0x000010b0u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x000010b1u, 0x0000039du, 0x0000009cu, 0x000010afu, 0x0003003eu, 0x000010b1u, 0x000010b0u, 0x000200f9u, 0x000010abu, 0x000200f8u, 0x000010abu, 0x000200f9u, 0x0000101eu, 0x000200f8u, 0x00001021u, 0x000500c7u, 0x00000006u, 0x00001061u, 0x00000fffu, 0x00000391u, 0x0003003eu, 0x00000fdbu, 0x00001061u, 0x00050084u, 0x00000006u, 0x00001063u, 0x00000ff6u, 0x000004d1u, 0x00050080u, 0x00000006u, 0x00001065u, 0x00001061u, 0x00001063u, 0x0003003eu, 0x00000fdbu, 0x00001065u, 0x0004003du, 0x00000009u, 0x00001066u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x00001067u, 0x00001066u, 0x0003003eu, 0x00001014u, 0x00001067u, 0x0004003du, 0x000000abu, 0x00001068u, 0x00001014u, 0x0008004fu, 0x000003a3u, 0x00001069u, 0x00001068u, 0x00001068u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003a3u, 0x0000106bu, 0x00001069u, 0x00001957u, 0x0004003du, 0x000000abu, 0x0000106cu, 0x00001014u, 0x0009004fu, 0x000000abu, 0x0000106du, 0x0000106cu, 0x0000106bu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001014u, 0x0000106du, 0x00050041u, 0x00000007u, 0x0000106eu, 0x00001014u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x0000106fu, 0x0000106eu, 0x000500c2u, 0x00000006u, 0x00001070u, 0x0000106fu, 0x00000448u, 0x0003003eu, 0x00001015u, 0x00001070u, 0x00050041u, 0x00000007u, 0x00001071u, 0x00001014u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00001072u, 0x00001071u, 0x000500c4u, 0x00000006u, 0x00001073u, 0x00001072u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00001074u, 0x00001014u, 0x000001dau, 0x0004003du, 0x00000006u, 0x00001075u, 0x00001074u, 0x000500c4u, 0x00000006u, 0x00001076u, 0x00001075u, 0x000001e0u, 0x000500c5u, 0x00000006u, 0x00001077u, 0x00001073u, 0x00001076u, 0x00050041u, 0x00000007u, 0x00001078u, 0x00001014u, 0x00000193u, 0x0004003du, 0x00000006u, 0x00001079u, 0x00001078u, 0x000500c2u, 0x00000006u, 0x0000107au, 0x00001079u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x0000107bu, 0x00001077u, 0x0000107au, 0x000500c2u, 0x00000006u, 0x0000107du, 0x00001070u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x0000107eu, 0x0000107bu, 0x0000107du, 0x0003003eu, 0x00001016u, 0x0000107eu, 0x000500c6u, 0x00000006u, 0x00001080u, 0x00001065u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x00001082u, 0x0000107eu, 0x00060041u, 0x000000ebu, 0x00001083u, 0x0000039du, 0x0000009cu, 0x00001080u, 0x0003003eu, 0x00001083u, 0x00001082u, 0x000500c7u, 0x00000006u, 0x00001086u, 0x00001070u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x00001087u, 0x00001086u, 0x00060041u, 0x000000f2u, 0x00001088u, 0x00000388u, 0x0000009cu, 0x00001065u, 0x0003003eu, 0x00001088u, 0x00001087u, 0x000300f7u, 0x00001089u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000108au, 0x00001089u, 0x000200f8u, 0x0000108au, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x0000108du, 0x00001080u, 0x00000500u, 0x00040071u, 0x0000009fu, 0x0000108eu, 0x00000502u, 0x00060041u, 0x000000ebu, 0x0000108fu, 0x0000039du, 0x0000009cu, 0x0000108du, 0x0003003eu, 0x0000108fu, 0x0000108eu, 0x000200f9u, 0x00001089u, 0x000200f8u, 0x00001089u, 0x000200f9u, 0x0000101eu, 0x000200f8u, 0x00001020u, 0x000500c7u, 0x00000006u, 0x00001041u, 0x00000fffu, 0x0000036eu, 0x0003003eu, 0x00000fdbu, 0x00001041u, 0x00050084u, 0x00000006u, 0x00001043u, 0x00000ff6u, 0x0000036du, 0x00050080u, 0x00000006u, 0x00001045u, 0x00001041u, 0x00001043u, 0x0003003eu, 0x00000fdbu, 0x00001045u, 0x000500c6u, 0x00000006u, 0x00001047u, 0x00001045u, 0x000001e0u, 0x00050041u, 0x0000009au, 0x00001048u, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00001049u, 0x00001048u, 0x00040071u, 0x0000009du, 0x0000104au, 0x00001049u, 0x00060041u, 0x000000f2u, 0x0000104bu, 0x00000379u, 0x0000009cu, 0x00001047u, 0x0003003eu, 0x0000104bu, 0x0000104au, 0x000500c7u, 0x00000006u, 0x0000104du, 0x00001045u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x0000104eu, 0x0000104du, 0x000001b8u, 0x000300f7u, 0x0000104fu, 0x00000000u, 0x000400fau, 0x0000104eu, 0x00001050u, 0x0000104fu, 0x000200f8u, 0x00001050u, 0x000500c2u, 0x00000006u, 0x00001052u, 0x00001045u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00001054u, 0x00001048u, 0x000500c7u, 0x00000008u, 0x00001055u, 0x00001054u, 0x000000afu, 0x00050084u, 0x00000008u, 0x00001056u, 0x00001055u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x00001057u, 0x00001056u, 0x00060041u, 0x000000f2u, 0x00001058u, 0x00000388u, 0x0000009cu, 0x00001052u, 0x0003003eu, 0x00001058u, 0x00001057u, 0x000200f9u, 0x0000104fu, 0x000200f8u, 0x0000104fu, 0x000300f7u, 0x00001059u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000105au, 0x00001059u, 0x000200f8u, 0x0000105au, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x0000105du, 0x00001047u, 0x0000036du, 0x00040071u, 0x0000009du, 0x0000105eu, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x0000105fu, 0x00000379u, 0x0000009cu, 0x0000105du, 0x0003003eu, 0x0000105fu, 0x0000105eu, 0x000200f9u, 0x00001059u, 0x000200f8u, 0x00001059u, 0x000200f9u, 0x0000101eu, 0x000200f8u, 0x0000101fu, 0x000500c7u, 0x00000006u, 0x00001025u, 0x00000fffu, 0x0000036eu, 0x0003003eu, 0x00000fdbu, 0x00001025u, 0x00050084u, 0x00000006u, 0x00001027u, 0x00000ff6u, 0x0000036du, 0x00050080u, 0x00000006u, 0x00001029u, 0x00001025u, 0x00001027u, 0x0003003eu, 0x00000fdbu, 0x00001029u, 0x000500c6u, 0x00000006u, 0x0000102bu, 0x00001029u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x0000102cu, 0x000001b8u, 0x00060041u, 0x000000f2u, 0x0000102du, 0x00000379u, 0x0000009cu, 0x0000102bu, 0x0003003eu, 0x0000102du, 0x0000102cu, 0x000500c7u, 0x00000006u, 0x0000102fu, 0x00001029u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00001030u, 0x0000102fu, 0x000001b8u, 0x000300f7u, 0x00001031u, 0x00000000u, 0x000400fau, 0x00001030u, 0x00001032u, 0x00001031u, 0x000200f8u, 0x00001032u, 0x000500c2u, 0x00000006u, 0x00001034u, 0x00001029u, 0x000001dau, 0x00050041u, 0x0000009au, 0x00001035u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00001036u, 0x00001035u, 0x00040071u, 0x0000009du, 0x00001037u, 0x00001036u, 0x00060041u, 0x000000f2u, 0x00001038u, 0x00000388u, 0x0000009cu, 0x00001034u, 0x0003003eu, 0x00001038u, 0x00001037u, 0x000200f9u, 0x00001031u, 0x000200f8u, 0x00001031u, 0x000300f7u, 0x00001039u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000103au, 0x00001039u, 0x000200f8u, 0x0000103au, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x0000103du, 0x0000102bu, 0x0000036du, 0x00040071u, 0x0000009du, 0x0000103eu, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x0000103fu, 0x00000379u, 0x0000009cu, 0x0000103du, 0x0003003eu, 0x0000103fu, 0x0000103eu, 0x000200f9u, 0x00001039u, 0x000200f8u, 0x00001039u, 0x000200f9u, 0x0000101eu, 0x000200f8u, 0x0000101eu, 0x000200f9u, 0x0000101cu, 0x000200f8u, 0x0000101cu, 0x0004003du, 0x00000006u, 0x00001006u, 0x00000ff9u, 0x00050084u, 0x00000006u, 0x00001007u, 0x00000feau, 0x00001006u, 0x00050080u, 0x00000006u, 0x00001008u, 0x00000848u, 0x00001007u, 0x0004003du, 0x00000006u, 0x0000100au, 0x00000ffdu, 0x00050080u, 0x00000006u, 0x0000100bu, 0x00001008u, 0x0000100au, 0x0003003eu, 0x00000fdau, 0x0000100bu, 0x0003003eu, 0x00000fddu, 0x0000100bu, 0x0003003eu, 0x00000fdeu, 0x00000ff6u, 0x000300f7u, 0x000010e2u, 0x00000000u, 0x000400fau, 0x00000565u, 0x000010e3u, 0x000010e2u, 0x000200f8u, 0x000010e3u, 0x0004003du, 0x0000002cu, 0x000010e4u, 0x00000568u, 0x000300f7u, 0x000010e5u, 0x00000000u, 0x000400fau, 0x000010e4u, 0x000010e6u, 0x000010e5u, 0x000200f8u, 0x000010e6u, 0x000500c7u, 0x00000006u, 0x000010e8u, 0x0000100bu, 0x00000391u, 0x0003003eu, 0x00000fddu, 0x000010e8u, 0x00050084u, 0x00000006u, 0x000010eau, 0x00000ff6u, 0x0000056fu, 0x00050080u, 0x00000006u, 0x000010ecu, 0x000010e8u, 0x000010eau, 0x0003003eu, 0x00000fddu, 0x000010ecu, 0x000500c6u, 0x00000006u, 0x000010eeu, 0x000010ecu, 0x000001dau, 0x0004003du, 0x00000008u, 0x000010efu, 0x00000419u, 0x000500c4u, 0x00000008u, 0x000010f0u, 0x000010efu, 0x000000b5u, 0x0004003du, 0x00000008u, 0x000010f1u, 0x000003fbu, 0x000500c3u, 0x00000008u, 0x000010f2u, 0x000010f1u, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x000010f3u, 0x000010f0u, 0x000010f2u, 0x00040071u, 0x0000009fu, 0x000010f4u, 0x000010f3u, 0x00060041u, 0x000000ebu, 0x000010f5u, 0x0000039du, 0x0000009cu, 0x000010eeu, 0x0003003eu, 0x000010f5u, 0x000010f4u, 0x0004003du, 0x00000008u, 0x000010f7u, 0x000003fbu, 0x000500c7u, 0x00000008u, 0x000010f8u, 0x000010f7u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000010f9u, 0x000010f8u, 0x00060041u, 0x000000f2u, 0x000010fau, 0x00000388u, 0x0000009cu, 0x000010ecu, 0x0003003eu, 0x000010fau, 0x000010f9u, 0x000300f7u, 0x000010fbu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000010fcu, 0x000010fbu, 0x000200f8u, 0x000010fcu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x00050080u, 0x00000006u, 0x000010ffu, 0x000010eeu, 0x00000585u, 0x00040071u, 0x0000009fu, 0x00001100u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x00001101u, 0x0000039du, 0x0000009cu, 0x000010ffu, 0x0003003eu, 0x00001101u, 0x00001100u, 0x000200f9u, 0x000010fbu, 0x000200f8u, 0x000010fbu, 0x000200f9u, 0x000010e5u, 0x000200f8u, 0x000010e5u, 0x000200f9u, 0x000010e2u, 0x000200f8u, 0x000010e2u, 0x000300f7u, 0x0000100fu, 0x00000000u, 0x000400fau, 0x0000063bu, 0x00001010u, 0x0000100fu, 0x000200f8u, 0x00001010u, 0x0004003du, 0x0000006bu, 0x00001011u, 0x000008e6u, 0x0003003eu, 0x00000fdfu, 0x00001011u, 0x0003003eu, 0x00000fe0u, 0x00000feau, 0x00050041u, 0x00000007u, 0x00001107u, 0x00000fdfu, 0x000001dau, 0x0004003du, 0x00000006u, 0x00001108u, 0x00001107u, 0x000500c2u, 0x00000006u, 0x00001109u, 0x00001108u, 0x00000193u, 0x00050080u, 0x00000006u, 0x0000110bu, 0x00000feau, 0x000001e0u, 0x000500c2u, 0x00000006u, 0x0000110cu, 0x0000110bu, 0x00000193u, 0x00050084u, 0x00000006u, 0x0000110du, 0x00001109u, 0x0000110cu, 0x00050041u, 0x00000007u, 0x0000110eu, 0x00000fdfu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000110fu, 0x0000110eu, 0x000500c2u, 0x00000006u, 0x00001110u, 0x0000110fu, 0x00000193u, 0x00050080u, 0x00000006u, 0x00001111u, 0x0000110du, 0x00001110u, 0x0003003eu, 0x00001102u, 0x00001111u, 0x0004003du, 0x0000006bu, 0x00001112u, 0x00000fdfu, 0x000500c7u, 0x0000006bu, 0x00001114u, 0x00001112u, 0x00001958u, 0x0003003eu, 0x00001103u, 0x00001114u, 0x0004003du, 0x0000002cu, 0x00001115u, 0x00000466u, 0x000600a9u, 0x00000006u, 0x00001116u, 0x00001115u, 0x000001dau, 0x000001b8u, 0x0004003du, 0x0000002cu, 0x00001117u, 0x00000568u, 0x000600a9u, 0x00000006u, 0x00001118u, 0x00001117u, 0x000001dau, 0x000001b8u, 0x00050084u, 0x00000006u, 0x00001119u, 0x00000193u, 0x00001118u, 0x00050080u, 0x00000006u, 0x0000111au, 0x00001116u, 0x00001119u, 0x0003003eu, 0x00001104u, 0x0000111au, 0x00050041u, 0x00000007u, 0x0000111bu, 0x00001103u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000111cu, 0x0000111bu, 0x00050041u, 0x00000007u, 0x0000111du, 0x00001103u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000111eu, 0x0000111du, 0x00050084u, 0x00000006u, 0x0000111fu, 0x0000111eu, 0x00000415u, 0x00050080u, 0x00000006u, 0x00001120u, 0x0000111cu, 0x0000111fu, 0x00050084u, 0x00000006u, 0x00001121u, 0x00000193u, 0x00001120u, 0x000500c4u, 0x00000006u, 0x00001123u, 0x0000111au, 0x00001121u, 0x0003003eu, 0x00001104u, 0x00001123u, 0x0003003eu, 0x00001105u, 0x000002b3u, 0x000200f9u, 0x00001124u, 0x000200f8u, 0x00001124u, 0x000700f5u, 0x0000002cu, 0x0000122cu, 0x000002b3u, 0x00001010u, 0x00001964u, 0x00001126u, 0x000400f6u, 0x00001125u, 0x00001126u, 0x00000000u, 0x000200f9u, 0x00001127u, 0x000200f8u, 0x00001127u, 0x00050152u, 0x00000006u, 0x00001129u, 0x000001e0u, 0x00001111u, 0x000500aau, 0x0000002cu, 0x0000112bu, 0x00001129u, 0x00001111u, 0x000300f7u, 0x0000112cu, 0x00000000u, 0x000400fau, 0x0000112bu, 0x0000112du, 0x0000112cu, 0x000200f8u, 0x0000112du, 0x00060168u, 0x00000006u, 0x0000112fu, 0x000001e0u, 0x00000000u, 0x00001123u, 0x0003003eu, 0x00001106u, 0x0000112fu, 0x0004014du, 0x0000002cu, 0x00001130u, 0x000001e0u, 0x000300f7u, 0x00001131u, 0x00000000u, 0x000400fau, 0x00001130u, 0x00001132u, 0x00001131u, 0x000200f8u, 0x00001132u, 0x00050080u, 0x00000006u, 0x00001134u, 0x000005fau, 0x00001111u, 0x00060041u, 0x000000e6u, 0x00001135u, 0x000003e9u, 0x0000009cu, 0x00001134u, 0x000700f1u, 0x00000006u, 0x00001137u, 0x00001135u, 0x000001dau, 0x000001b8u, 0x0000112fu, 0x000200f9u, 0x00001131u, 0x000200f8u, 0x00001131u, 0x0003003eu, 0x00001105u, 0x00000298u, 0x000200f9u, 0x0000112cu, 0x000200f8u, 0x0000112cu, 0x000600a9u, 0x0000002cu, 0x00001964u, 0x0000112bu, 0x00000298u, 0x0000122cu, 0x000200f9u, 0x00001126u, 0x000200f8u, 0x00001126u, 0x000400fau, 0x00001964u, 0x00001124u, 0x00001125u, 0x000200f8u, 0x00001125u, 0x000200f9u, 0x0000100fu, 0x000200f8u, 0x0000100fu, 0x000200f9u, 0x00000fe7u, 0x000200f8u, 0x00000fe7u, 0x0003003eu, 0x00000946u, 0x000002b3u, 0x000200f9u, 0x00000944u, 0x000200f8u, 0x00000944u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003du, 0x00000006u, 0x000000a7u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000a9u, 0x000000a6u, 0x0000009cu, 0x000000a7u, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x000000aau, 0x000000a9u, 0x00040071u, 0x000000abu, 0x000000acu, 0x000000aau, 0x0004007cu, 0x00000009u, 0x000000adu, 0x000000acu, 0x0004003du, 0x00000006u, 0x000000aeu, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000b0u, 0x000000a6u, 0x0000009cu, 0x000000aeu, 0x000000afu, 0x0004003du, 0x0000009eu, 0x000000b1u, 0x000000b0u, 0x00040071u, 0x000000abu, 0x000000b2u, 0x000000b1u, 0x0004007cu, 0x00000009u, 0x000000b3u, 0x000000b2u, 0x0004003du, 0x00000006u, 0x000000b4u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000b6u, 0x000000a6u, 0x0000009cu, 0x000000b4u, 0x000000b5u, 0x0004003du, 0x0000009eu, 0x000000b7u, 0x000000b6u, 0x00040071u, 0x000000abu, 0x000000b8u, 0x000000b7u, 0x0004007cu, 0x00000009u, 0x000000b9u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x000000bau, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000bcu, 0x000000a6u, 0x0000009cu, 0x000000bau, 0x000000bbu, 0x0004003du, 0x0000009eu, 0x000000bdu, 0x000000bcu, 0x00040071u, 0x000000abu, 0x000000beu, 0x000000bdu, 0x0004007cu, 0x00000009u, 0x000000bfu, 0x000000beu, 0x0004003du, 0x00000006u, 0x000000c0u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000c2u, 0x000000a6u, 0x0000009cu, 0x000000c0u, 0x000000c1u, 0x0004003du, 0x0000009eu, 0x000000c3u, 0x000000c2u, 0x00040071u, 0x000000abu, 0x000000c4u, 0x000000c3u, 0x0004007cu, 0x00000009u, 0x000000c5u, 0x000000c4u, 0x0004003du, 0x00000006u, 0x000000c6u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000c8u, 0x000000a6u, 0x0000009cu, 0x000000c6u, 0x000000c7u, 0x0004003du, 0x0000009eu, 0x000000c9u, 0x000000c8u, 0x00040071u, 0x000000abu, 0x000000cau, 0x000000c9u, 0x0004007cu, 0x00000009u, 0x000000cbu, 0x000000cau, 0x0004003du, 0x00000006u, 0x000000ccu, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000ceu, 0x000000a6u, 0x0000009cu, 0x000000ccu, 0x000000cdu, 0x0004003du, 0x0000009eu, 0x000000cfu, 0x000000ceu, 0x00040071u, 0x000000abu, 0x000000d0u, 0x000000cfu, 0x0004007cu, 0x00000009u, 0x000000d1u, 0x000000d0u, 0x0004003du, 0x00000006u, 0x000000d2u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000d4u, 0x000000a6u, 0x0000009cu, 0x000000d2u, 0x000000d3u, 0x0004003du, 0x0000009eu, 0x000000d5u, 0x000000d4u, 0x00040071u, 0x000000abu, 0x000000d6u, 0x000000d5u, 0x0004007cu, 0x00000009u, 0x000000d7u, 0x000000d6u, 0x0004003du, 0x00000006u, 0x000000d8u, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000dau, 0x000000a6u, 0x0000009cu, 0x000000d8u, 0x000000d9u, 0x0004003du, 0x0000009eu, 0x000000dbu, 0x000000dau, 0x00040071u, 0x000000abu, 0x000000dcu, 0x000000dbu, 0x0004007cu, 0x00000009u, 0x000000ddu, 0x000000dcu, 0x0004003du, 0x00000006u, 0x000000deu, 0x0000000cu, 0x00070041u, 0x000000a8u, 0x000000e0u, 0x000000a6u, 0x0000009cu, 0x000000deu, 0x000000dfu, 0x0004003du, 0x0000009eu, 0x000000e1u, 0x000000e0u, 0x00040071u, 0x000000abu, 0x000000e2u, 0x000000e1u, 0x0004007cu, 0x00000009u, 0x000000e3u, 0x000000e2u, 0x0004003du, 0x00000006u, 0x000000e4u, 0x0000000cu, 0x00070041u, 0x000000e6u, 0x000000e7u, 0x000000a6u, 0x0000009cu, 0x000000e4u, 0x000000e5u, 0x0004003du, 0x00000006u, 0x000000e8u, 0x000000e7u, 0x0004003du, 0x00000006u, 0x000000e9u, 0x0000000cu, 0x00070041u, 0x000000ebu, 0x000000ecu, 0x000000a6u, 0x0000009cu, 0x000000e9u, 0x000000eau, 0x0004003du, 0x0000009fu, 0x000000edu, 0x000000ecu, 0x00040071u, 0x00000006u, 0x000000eeu, 0x000000edu, 0x0004007cu, 0x00000008u, 0x000000efu, 0x000000eeu, 0x0004003du, 0x00000006u, 0x000000f0u, 0x0000000cu, 0x00070041u, 0x000000f2u, 0x000000f3u, 0x000000a6u, 0x0000009cu, 0x000000f0u, 0x000000f1u, 0x0004003du, 0x0000009du, 0x000000f4u, 0x000000f3u, 0x00040071u, 0x00000006u, 0x000000f5u, 0x000000f4u, 0x0004007cu, 0x00000008u, 0x000000f6u, 0x000000f5u, 0x0004003du, 0x00000006u, 0x000000f7u, 0x0000000cu, 0x00070041u, 0x000000f2u, 0x000000f9u, 0x000000a6u, 0x0000009cu, 0x000000f7u, 0x000000f8u, 0x0004003du, 0x0000009du, 0x000000fau, 0x000000f9u, 0x00040071u, 0x00000006u, 0x000000fbu, 0x000000fau, 0x0004007cu, 0x00000008u, 0x000000fcu, 0x000000fbu, 0x0004003du, 0x00000006u, 0x000000fdu, 0x0000000cu, 0x00070041u, 0x000000ffu, 0x00000100u, 0x000000a6u, 0x0000009cu, 0x000000fdu, 0x000000feu, 0x0004003du, 0x000000a1u, 0x00000101u, 0x00000100u, 0x00040072u, 0x00000009u, 0x00000102u, 0x00000101u, 0x00120050u, 0x0000000au, 0x00000103u, 0x000000adu, 0x000000b3u, 0x000000b9u, 0x000000bfu, 0x000000c5u, 0x000000cbu, 0x000000d1u, 0x000000d7u, 0x000000ddu, 0x000000e3u, 0x000000e8u, 0x000000efu, 0x000000f6u, 0x000000fcu, 0x00000102u, 0x000200feu, 0x00000103u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000012u, 0x00000000u, 0x00000010u, 0x00030037u, 0x00000007u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003du, 0x00000006u, 0x0000010bu, 0x00000011u, 0x00070041u, 0x000000a8u, 0x0000010cu, 0x0000010au, 0x0000009cu, 0x0000010bu, 0x0000009cu, 0x0004003du, 0x0000009eu, 0x0000010du, 0x0000010cu, 0x00040071u, 0x000000abu, 0x0000010eu, 0x0000010du, 0x0004007cu, 0x00000009u, 0x0000010fu, 0x0000010eu, 0x0004003du, 0x00000006u, 0x00000110u, 0x00000011u, 0x00070041u, 0x000000a8u, 0x00000111u, 0x0000010au, 0x0000009cu, 0x00000110u, 0x000000afu, 0x0004003du, 0x0000009eu, 0x00000112u, 0x00000111u, 0x00040071u, 0x000000abu, 0x00000113u, 0x00000112u, 0x0004007cu, 0x00000009u, 0x00000114u, 0x00000113u, 0x0004003du, 0x00000006u, 0x00000115u, 0x00000011u, 0x00070041u, 0x000000e6u, 0x00000116u, 0x0000010au, 0x0000009cu, 0x00000115u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x00000117u, 0x00000116u, 0x0004003du, 0x00000006u, 0x00000118u, 0x00000011u, 0x00070041u, 0x000000f2u, 0x00000119u, 0x0000010au, 0x0000009cu, 0x00000118u, 0x000000bbu, 0x0004003du, 0x0000009du, 0x0000011au, 0x00000119u, 0x00040071u, 0x00000006u, 0x0000011bu, 0x0000011au, 0x0004007cu, 0x00000008u, 0x0000011cu, 0x0000011bu, 0x0004003du, 0x00000006u, 0x0000011du, 0x00000011u, 0x00070041u, 0x000000f2u, 0x0000011eu, 0x0000010au, 0x0000009cu, 0x0000011du, 0x000000c1u, 0x0004003du, 0x0000009du, 0x0000011fu, 0x0000011eu, 0x00040071u, 0x00000006u, 0x00000120u, 0x0000011fu, 0x0004007cu, 0x00000008u, 0x00000121u, 0x00000120u, 0x000a0050u, 0x0000000fu, 0x00000122u, 0x0000010fu, 0x00000114u, 0x00000117u, 0x0000011cu, 0x00000121u, 0x0000009cu, 0x0000009cu, 0x000200feu, 0x00000122u, 0x00010038u, 0x00050036u, 0x00000014u, 0x0000001au, 0x00000000u, 0x00000017u, 0x00030037u, 0x00000015u, 0x00000018u, 0x00030037u, 0x00000016u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000015u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x0000012cu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x0000013bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000144u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000126u, 0x00000019u, 0x00060050u, 0x00000014u, 0x00000127u, 0x00000126u, 0x00000126u, 0x00000126u, 0x000500c3u, 0x00000014u, 0x00000129u, 0x00000127u, 0x00000128u, 0x000500c7u, 0x00000014u, 0x0000012bu, 0x00000129u, 0x0000195au, 0x0003003eu, 0x00000125u, 0x0000012bu, 0x0004003du, 0x00000014u, 0x0000012du, 0x00000018u, 0x000500c7u, 0x00000014u, 0x00000130u, 0x0000012du, 0x00001959u, 0x00050080u, 0x00000014u, 0x00000132u, 0x00000130u, 0x0000195bu, 0x0004003du, 0x00000014u, 0x00000135u, 0x00000018u, 0x000500adu, 0x00000138u, 0x00000139u, 0x00000135u, 0x00000137u, 0x000600a9u, 0x00000014u, 0x0000013au, 0x00000139u, 0x00000134u, 0x00000132u, 0x0003003eu, 0x0000012cu, 0x0000013au, 0x0004003du, 0x00000014u, 0x0000013du, 0x00000018u, 0x000500c7u, 0x00000014u, 0x0000013fu, 0x0000013du, 0x0000195au, 0x00050082u, 0x00000014u, 0x00000140u, 0x0000012bu, 0x0000013fu, 0x000500c3u, 0x00000014u, 0x00000143u, 0x00000140u, 0x0000195cu, 0x0003003eu, 0x0000013bu, 0x00000143u, 0x0004003du, 0x00000014u, 0x00000146u, 0x00000018u, 0x00050082u, 0x00000014u, 0x00000147u, 0x0000013au, 0x00000146u, 0x0003003eu, 0x00000144u, 0x00000147u, 0x0004003du, 0x00000014u, 0x00000148u, 0x00000018u, 0x000500c7u, 0x00000014u, 0x0000014bu, 0x00000147u, 0x00000143u, 0x00050080u, 0x00000014u, 0x0000014cu, 0x00000148u, 0x0000014bu, 0x0003003eu, 0x0000012cu, 0x0000014cu, 0x000500c7u, 0x00000014u, 0x0000014fu, 0x0000014cu, 0x00000134u, 0x00050051u, 0x00000008u, 0x00000150u, 0x0000014fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000151u, 0x0000014fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000152u, 0x0000014fu, 0x00000002u, 0x000200feu, 0x0000014fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000001eu, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x0000001du, 0x000200f8u, 0x0000001fu, 0x0004003bu, 0x00000016u, 0x00000156u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000158u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000015fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000163u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000157u, 0x0000001du, 0x0003003eu, 0x00000156u, 0x00000157u, 0x000500c3u, 0x00000008u, 0x0000015au, 0x00000157u, 0x000000eau, 0x0003003eu, 0x00000158u, 0x0000015au, 0x000500c7u, 0x00000008u, 0x0000015eu, 0x00000157u, 0x0000015du, 0x0003003eu, 0x0000015bu, 0x0000015eu, 0x00050082u, 0x00000008u, 0x00000161u, 0x000000cdu, 0x0000015au, 0x0007000cu, 0x00000008u, 0x00000162u, 0x00000001u, 0x0000002au, 0x00000161u, 0x0000009cu, 0x0003003eu, 0x0000015fu, 0x00000162u, 0x000500c3u, 0x00000008u, 0x00000166u, 0x00000164u, 0x0000015au, 0x00050082u, 0x00000008u, 0x00000167u, 0x00000164u, 0x00000166u, 0x0003003eu, 0x00000163u, 0x00000167u, 0x000500c4u, 0x00000008u, 0x0000016au, 0x0000015eu, 0x00000162u, 0x00050080u, 0x00000008u, 0x0000016cu, 0x0000016au, 0x00000167u, 0x000200feu, 0x0000016cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000021u, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003bu, 0x00000016u, 0x0000016fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000174u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000017bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000017fu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000171u, 0x00000020u, 0x00050082u, 0x00000008u, 0x00000172u, 0x00000170u, 0x00000171u, 0x0007000cu, 0x00000008u, 0x00000173u, 0x00000001u, 0x0000002au, 0x00000172u, 0x000000afu, 0x0003003eu, 0x0000016fu, 0x00000173u, 0x0006000cu, 0x00000008u, 0x00000177u, 0x00000001u, 0x0000004au, 0x00000173u, 0x00050082u, 0x00000008u, 0x00000178u, 0x00000175u, 0x00000177u, 0x0003003eu, 0x00000174u, 0x00000178u, 0x0008000cu, 0x00000008u, 0x0000017au, 0x00000001u, 0x0000002du, 0x00000178u, 0x0000009cu, 0x000000d3u, 0x0003003eu, 0x00000174u, 0x0000017au, 0x00050082u, 0x00000008u, 0x0000017du, 0x000000cdu, 0x0000017au, 0x0007000cu, 0x00000008u, 0x0000017eu, 0x00000001u, 0x0000002au, 0x0000017du, 0x0000009cu, 0x0003003eu, 0x0000017bu, 0x0000017eu, 0x0004003du, 0x00000008u, 0x00000180u, 0x00000020u, 0x000500c3u, 0x00000008u, 0x00000182u, 0x00000180u, 0x0000017eu, 0x000500c7u, 0x00000008u, 0x00000183u, 0x00000182u, 0x0000015du, 0x0003003eu, 0x0000017fu, 0x00000183u, 0x000500c4u, 0x00000008u, 0x00000185u, 0x0000017au, 0x000000eau, 0x00050080u, 0x00000008u, 0x00000187u, 0x00000185u, 0x00000183u, 0x000200feu, 0x00000187u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000024u, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003du, 0x00000008u, 0x0000018au, 0x00000023u, 0x000500c4u, 0x00000008u, 0x0000018bu, 0x000000afu, 0x0000018au, 0x000200feu, 0x0000018bu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000027u, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x00000026u, 0x000200f8u, 0x00000028u, 0x0004003du, 0x00000008u, 0x0000018eu, 0x00000026u, 0x0006000cu, 0x00000008u, 0x0000018fu, 0x00000001u, 0x0000004au, 0x0000018eu, 0x0007000cu, 0x00000008u, 0x00000190u, 0x00000001u, 0x0000002au, 0x0000018fu, 0x0000009cu, 0x000200feu, 0x00000190u, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000039u, 0x00000000u, 0x00000030u, 0x00030037u, 0x0000002au, 0x00000031u, 0x00030037u, 0x0000002bu, 0x00000032u, 0x00030037u, 0x0000002du, 0x00000033u, 0x00030037u, 0x0000002du, 0x00000034u, 0x00030037u, 0x0000002du, 0x00000035u, 0x00030037u, 0x0000002du, 0x00000036u, 0x00030037u, 0x0000002fu, 0x00000037u, 0x00030037u, 0x0000002du, 0x00000038u, 0x000200f8u, 0x0000003au, 0x0005003bu, 0x0000002du, 0x0000094bu, 0x00000007u, 0x00000298u, 0x0004003bu, 0x00000015u, 0x00000948u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x0000019bu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x000001c0u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000001f7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000020au, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000024au, 0x00000007u, 0x000300f7u, 0x00000947u, 0x00000000u, 0x000300fbu, 0x000001b8u, 0x0000094au, 0x000200f8u, 0x0000094au, 0x00050041u, 0x00000016u, 0x00000194u, 0x00000032u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000195u, 0x00000194u, 0x000300f7u, 0x0000019au, 0x00000000u, 0x000b00fbu, 0x00000195u, 0x0000019au, 0x00000000u, 0x00000196u, 0x00000001u, 0x00000197u, 0x00000002u, 0x00000198u, 0x00000003u, 0x00000199u, 0x000200f8u, 0x00000196u, 0x00050041u, 0x0000002bu, 0x0000019cu, 0x00000031u, 0x0000009cu, 0x0004003du, 0x00000009u, 0x0000019du, 0x0000019cu, 0x0008004fu, 0x00000014u, 0x0000019eu, 0x0000019du, 0x0000019du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x0000019eu, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x00000197u, 0x00050041u, 0x0000002bu, 0x000001a0u, 0x00000031u, 0x000000afu, 0x0004003du, 0x00000009u, 0x000001a1u, 0x000001a0u, 0x0008004fu, 0x00000014u, 0x000001a2u, 0x000001a1u, 0x000001a1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x000001a2u, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x00000198u, 0x00050041u, 0x0000002bu, 0x000001a4u, 0x00000031u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000001a5u, 0x000001a4u, 0x0008004fu, 0x00000014u, 0x000001a6u, 0x000001a5u, 0x000001a5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x000001a6u, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x00000199u, 0x00050041u, 0x0000002bu, 0x000001a8u, 0x00000031u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000001a9u, 0x000001a8u, 0x0008004fu, 0x00000014u, 0x000001aau, 0x000001a9u, 0x000001a9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000019bu, 0x000001aau, 0x000200f9u, 0x0000019au, 0x000200f8u, 0x0000019au, 0x000d00f5u, 0x00000014u, 0x000018feu, 0x000018ffu, 0x0000094au, 0x0000019eu, 0x00000196u, 0x000001a2u, 0x00000197u, 0x000001a6u, 0x00000198u, 0x000001aau, 0x00000199u, 0x0004003du, 0x0000002cu, 0x000001adu, 0x00000038u, 0x000300f7u, 0x000001afu, 0x00000000u, 0x000400fau, 0x000001adu, 0x000001aeu, 0x000001afu, 0x000200f8u, 0x000001aeu, 0x0004003du, 0x0000002cu, 0x000001b0u, 0x00000035u, 0x0004003du, 0x0000002cu, 0x000001b1u, 0x00000036u, 0x000400a8u, 0x0000002cu, 0x000001b2u, 0x000001b1u, 0x000500a7u, 0x0000002cu, 0x000001b3u, 0x000001b0u, 0x000001b2u, 0x000300f7u, 0x000001b5u, 0x00000000u, 0x000400fau, 0x000001b3u, 0x000001b4u, 0x000001b5u, 0x000200f8u, 0x000001b4u, 0x0003003eu, 0x0000094bu, 0x000002b3u, 0x0003003eu, 0x00000948u, 0x000018feu, 0x000200f9u, 0x00000947u, 0x000200f8u, 0x000001b5u, 0x000200f9u, 0x000001afu, 0x000200f8u, 0x000001afu, 0x00050041u, 0x00000016u, 0x000001b9u, 0x00000032u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x000001bau, 0x000001b9u, 0x000300f7u, 0x000001bfu, 0x00000000u, 0x000b00fbu, 0x000001bau, 0x000001bfu, 0x00000000u, 0x000001bbu, 0x00000001u, 0x000001bcu, 0x00000002u, 0x000001bdu, 0x00000003u, 0x000001beu, 0x000200f8u, 0x000001bbu, 0x00050041u, 0x0000002bu, 0x000001c1u, 0x00000031u, 0x0000009cu, 0x0004003du, 0x00000009u, 0x000001c2u, 0x000001c1u, 0x0008004fu, 0x00000014u, 0x000001c3u, 0x000001c2u, 0x000001c2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001c3u, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001bcu, 0x00050041u, 0x0000002bu, 0x000001c5u, 0x00000031u, 0x000000afu, 0x0004003du, 0x00000009u, 0x000001c6u, 0x000001c5u, 0x0008004fu, 0x00000014u, 0x000001c7u, 0x000001c6u, 0x000001c6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001c7u, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001bdu, 0x00050041u, 0x0000002bu, 0x000001c9u, 0x00000031u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000001cau, 0x000001c9u, 0x0008004fu, 0x00000014u, 0x000001cbu, 0x000001cau, 0x000001cau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001cbu, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001beu, 0x00050041u, 0x0000002bu, 0x000001cdu, 0x00000031u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000001ceu, 0x000001cdu, 0x0008004fu, 0x00000014u, 0x000001cfu, 0x000001ceu, 0x000001ceu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x000001cfu, 0x000200f9u, 0x000001bfu, 0x000200f8u, 0x000001bfu, 0x0004003du, 0x0000002cu, 0x000001d2u, 0x00000038u, 0x000300f7u, 0x000001d4u, 0x00000000u, 0x000400fau, 0x000001d2u, 0x000001d3u, 0x000001d4u, 0x000200f8u, 0x000001d3u, 0x0004003du, 0x0000002cu, 0x000001d5u, 0x00000034u, 0x000400a8u, 0x0000002cu, 0x000001d6u, 0x000001d5u, 0x000400a8u, 0x0000002cu, 0x000001d7u, 0x000001d6u, 0x000300f7u, 0x000001d9u, 0x00000000u, 0x000400fau, 0x000001d7u, 0x000001d8u, 0x000001d9u, 0x000200f8u, 0x000001d8u, 0x00050041u, 0x00000016u, 0x000001dbu, 0x00000032u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000001dcu, 0x000001dbu, 0x000500aau, 0x0000002cu, 0x000001ddu, 0x000001dcu, 0x0000009cu, 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000400fau, 0x000001ddu, 0x000001deu, 0x000001dfu, 0x000200f8u, 0x000001deu, 0x00050041u, 0x00000016u, 0x000001e1u, 0x00000032u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001e2u, 0x000001e1u, 0x000500aau, 0x0000002cu, 0x000001e3u, 0x000001e2u, 0x0000009cu, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x000700f5u, 0x0000002cu, 0x000001e4u, 0x000001ddu, 0x000001d8u, 0x000001e3u, 0x000001deu, 0x000300f7u, 0x000001e6u, 0x00000000u, 0x000400fau, 0x000001e4u, 0x000001e5u, 0x000001e6u, 0x000200f8u, 0x000001e5u, 0x00060041u, 0x00000016u, 0x000001e7u, 0x00000031u, 0x0000009cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001e8u, 0x000001e7u, 0x000500aau, 0x0000002cu, 0x000001e9u, 0x000001e8u, 0x00000133u, 0x000200f9u, 0x000001e6u, 0x000200f8u, 0x000001e6u, 0x000700f5u, 0x0000002cu, 0x000001eau, 0x000001e4u, 0x000001dfu, 0x000001e9u, 0x000001e5u, 0x000200f9u, 0x000001d9u, 0x000200f8u, 0x000001d9u, 0x000700f5u, 0x0000002cu, 0x000001ebu, 0x000001d6u, 0x000001d3u, 0x000001eau, 0x000001e6u, 0x000300f7u, 0x000001edu, 0x00000000u, 0x000400fau, 0x000001ebu, 0x000001ecu, 0x000001edu, 0x000200f8u, 0x000001ecu, 0x0004003du, 0x00000014u, 0x000001eeu, 0x000001c0u, 0x0003003eu, 0x0000094bu, 0x000002b3u, 0x0003003eu, 0x00000948u, 0x000001eeu, 0x000200f9u, 0x00000947u, 0x000200f8u, 0x000001edu, 0x000200f9u, 0x000001d4u, 0x000200f8u, 0x000001d4u, 0x00050041u, 0x00000016u, 0x000001f0u, 0x00000032u, 0x000001dau, 0x0004003du, 0x00000008u, 0x000001f1u, 0x000001f0u, 0x000300f7u, 0x000001f6u, 0x00000000u, 0x000b00fbu, 0x000001f1u, 0x000001f6u, 0x00000000u, 0x000001f2u, 0x00000001u, 0x000001f3u, 0x00000002u, 0x000001f4u, 0x00000003u, 0x000001f5u, 0x000200f8u, 0x000001f2u, 0x00060041u, 0x00000016u, 0x000001f8u, 0x00000031u, 0x0000009cu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001f9u, 0x000001f8u, 0x0003003eu, 0x000001f7u, 0x000001f9u, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f3u, 0x00060041u, 0x00000016u, 0x000001fbu, 0x00000031u, 0x000000b5u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000001fcu, 0x000001fbu, 0x0003003eu, 0x000001f7u, 0x000001fcu, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f4u, 0x00050041u, 0x00000016u, 0x000001feu, 0x00000031u, 0x000000c1u, 0x0004003du, 0x00000008u, 0x000001ffu, 0x000001feu, 0x0003003eu, 0x000001f7u, 0x000001ffu, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f5u, 0x0003003eu, 0x000001f7u, 0x0000009cu, 0x000200f9u, 0x000001f6u, 0x000200f8u, 0x000001f6u, 0x000d00f5u, 0x00000008u, 0x000018e4u, 0x000018e9u, 0x000001d4u, 0x000001f9u, 0x000001f2u, 0x000001fcu, 0x000001f3u, 0x000001ffu, 0x000001f4u, 0x0000009cu, 0x000001f5u, 0x00050041u, 0x00000016u, 0x00000203u, 0x00000032u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000204u, 0x00000203u, 0x000300f7u, 0x00000209u, 0x00000000u, 0x000b00fbu, 0x00000204u, 0x00000209u, 0x00000000u, 0x00000205u, 0x00000001u, 0x00000206u, 0x00000002u, 0x00000207u, 0x00000003u, 0x00000208u, 0x000200f8u, 0x00000205u, 0x000400c8u, 0x00000008u, 0x0000020cu, 0x000018e4u, 0x000500c7u, 0x00000008u, 0x0000020du, 0x0000020cu, 0x00000133u, 0x0003003eu, 0x0000020au, 0x0000020du, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000206u, 0x00060041u, 0x00000016u, 0x0000020fu, 0x00000031u, 0x000000afu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000210u, 0x0000020fu, 0x0003003eu, 0x0000020au, 0x00000210u, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000207u, 0x0003003eu, 0x0000020au, 0x00000133u, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000208u, 0x0003003eu, 0x0000020au, 0x0000009cu, 0x000200f9u, 0x00000209u, 0x000200f8u, 0x00000209u, 0x000d00f5u, 0x00000008u, 0x000018eeu, 0x000018e9u, 0x000001f6u, 0x0000020du, 0x00000205u, 0x00000210u, 0x00000206u, 0x00000133u, 0x00000207u, 0x0000009cu, 0x00000208u, 0x000500c3u, 0x00000008u, 0x00000216u, 0x000018e4u, 0x000000bbu, 0x0003003eu, 0x000001f7u, 0x00000216u, 0x000500c3u, 0x00000008u, 0x00000218u, 0x000018eeu, 0x000000bbu, 0x0003003eu, 0x0000020au, 0x00000218u, 0x0004003du, 0x00000008u, 0x0000021au, 0x00000203u, 0x000500aau, 0x0000002cu, 0x0000021bu, 0x0000021au, 0x000000afu, 0x000300f7u, 0x0000021du, 0x00000000u, 0x000400fau, 0x0000021bu, 0x0000021cu, 0x0000021du, 0x000200f8u, 0x0000021cu, 0x00050041u, 0x00000016u, 0x0000021fu, 0x00000037u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000220u, 0x0000021fu, 0x000500c3u, 0x00000008u, 0x00000221u, 0x00000216u, 0x00000220u, 0x000500c7u, 0x00000008u, 0x00000223u, 0x00000221u, 0x00000222u, 0x0003003eu, 0x000001f7u, 0x00000223u, 0x00050041u, 0x00000016u, 0x00000225u, 0x00000037u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000226u, 0x00000225u, 0x000500c3u, 0x00000008u, 0x00000227u, 0x00000218u, 0x00000226u, 0x000500c5u, 0x00000008u, 0x00000228u, 0x00000227u, 0x000000bbu, 0x0003003eu, 0x0000020au, 0x00000228u, 0x000200f9u, 0x0000021du, 0x000200f8u, 0x0000021du, 0x000700f5u, 0x00000008u, 0x00001903u, 0x00000218u, 0x00000209u, 0x00000228u, 0x0000021cu, 0x000700f5u, 0x00000008u, 0x000018f7u, 0x00000216u, 0x00000209u, 0x00000223u, 0x0000021cu, 0x0004003du, 0x00000014u, 0x0000022au, 0x000001c0u, 0x00050051u, 0x00000008u, 0x0000022bu, 0x0000022au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000022cu, 0x0000022au, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000022du, 0x0000022au, 0x00000002u, 0x00060050u, 0x00000014u, 0x00000230u, 0x000018f7u, 0x000018f7u, 0x000018f7u, 0x00050084u, 0x00000014u, 0x00000231u, 0x0000022au, 0x00000230u, 0x00050051u, 0x00000008u, 0x00000233u, 0x000018feu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000234u, 0x000018feu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000235u, 0x000018feu, 0x00000002u, 0x00050080u, 0x00000008u, 0x00000238u, 0x00001903u, 0x000000afu, 0x00060050u, 0x00000014u, 0x00000239u, 0x00000238u, 0x00000238u, 0x00000238u, 0x00050084u, 0x00000014u, 0x0000023au, 0x000018feu, 0x00000239u, 0x00050080u, 0x00000014u, 0x0000023bu, 0x00000231u, 0x0000023au, 0x0003003eu, 0x00000229u, 0x0000023bu, 0x0004003du, 0x0000002cu, 0x0000023cu, 0x00000038u, 0x000400a8u, 0x0000002cu, 0x0000023du, 0x0000023cu, 0x0004003du, 0x0000002cu, 0x0000023eu, 0x00000033u, 0x000500a6u, 0x0000002cu, 0x0000023fu, 0x0000023du, 0x0000023eu, 0x000300f7u, 0x00000241u, 0x00000000u, 0x000400fau, 0x0000023fu, 0x00000240u, 0x00000249u, 0x000200f8u, 0x00000240u, 0x0004003du, 0x00000014u, 0x00000242u, 0x00000229u, 0x000500c3u, 0x00000014u, 0x00000244u, 0x00000242u, 0x0000195du, 0x00050051u, 0x00000008u, 0x00000245u, 0x00000244u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000246u, 0x00000244u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000247u, 0x00000244u, 0x00000002u, 0x0003003eu, 0x000001c0u, 0x00000244u, 0x000200f9u, 0x00000241u, 0x000200f8u, 0x00000249u, 0x000500c3u, 0x00000008u, 0x0000024cu, 0x000018f7u, 0x000000b5u, 0x000500c3u, 0x00000008u, 0x0000024eu, 0x00001903u, 0x000000b5u, 0x00050080u, 0x00000008u, 0x0000024fu, 0x0000024cu, 0x0000024eu, 0x00050080u, 0x00000008u, 0x00000250u, 0x0000024fu, 0x000000afu, 0x0003003eu, 0x0000024au, 0x00000250u, 0x0004003du, 0x00000014u, 0x00000251u, 0x00000229u, 0x000500c3u, 0x00000014u, 0x00000253u, 0x00000251u, 0x0000195eu, 0x0003003eu, 0x00000229u, 0x00000253u, 0x0004003du, 0x00000014u, 0x00000254u, 0x00000229u, 0x000500c7u, 0x00000014u, 0x00000256u, 0x00000254u, 0x0000195fu, 0x0003003eu, 0x00000229u, 0x00000256u, 0x0004003du, 0x00000257u, 0x0000025au, 0x00000259u, 0x000500c4u, 0x00000008u, 0x0000025cu, 0x00000250u, 0x000000eau, 0x00050041u, 0x00000016u, 0x0000025du, 0x00000229u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x0000025eu, 0x0000025du, 0x000500c5u, 0x00000008u, 0x0000025fu, 0x0000025cu, 0x0000025eu, 0x0005005fu, 0x000000abu, 0x00000260u, 0x0000025au, 0x0000025fu, 0x00050051u, 0x00000006u, 0x00000261u, 0x00000260u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000262u, 0x00000261u, 0x00050041u, 0x00000016u, 0x00000263u, 0x000001c0u, 0x000001b8u, 0x0003003eu, 0x00000263u, 0x00000262u, 0x00050041u, 0x00000016u, 0x00000267u, 0x00000229u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000268u, 0x00000267u, 0x000500c5u, 0x00000008u, 0x00000269u, 0x0000025cu, 0x00000268u, 0x0005005fu, 0x000000abu, 0x0000026au, 0x0000025au, 0x00000269u, 0x00050051u, 0x00000006u, 0x0000026bu, 0x0000026au, 0x00000000u, 0x0004007cu, 0x00000008u, 0x0000026cu, 0x0000026bu, 0x00050041u, 0x00000016u, 0x0000026du, 0x000001c0u, 0x000001dau, 0x0003003eu, 0x0000026du, 0x0000026cu, 0x00050041u, 0x00000016u, 0x00000271u, 0x00000229u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000272u, 0x00000271u, 0x000500c5u, 0x00000008u, 0x00000273u, 0x0000025cu, 0x00000272u, 0x0005005fu, 0x000000abu, 0x00000274u, 0x0000025au, 0x00000273u, 0x00050051u, 0x00000006u, 0x00000275u, 0x00000274u, 0x00000000u, 0x0004007cu, 0x00000008u, 0x00000276u, 0x00000275u, 0x00050041u, 0x00000016u, 0x00000277u, 0x000001c0u, 0x00000193u, 0x0003003eu, 0x00000277u, 0x00000276u, 0x000200f9u, 0x00000241u, 0x000200f8u, 0x00000241u, 0x0004003du, 0x00000014u, 0x00000278u, 0x000001c0u, 0x000500c7u, 0x00000014u, 0x0000027au, 0x00000278u, 0x00000134u, 0x0003003eu, 0x0000094bu, 0x000002b3u, 0x0003003eu, 0x00000948u, 0x0000027au, 0x000200f9u, 0x00000947u, 0x000200f8u, 0x00000947u, 0x000900f5u, 0x00000014u, 0x00001904u, 0x000018feu, 0x000001b4u, 0x000001eeu, 0x000001ecu, 0x0000027au, 0x00000241u, 0x000200feu, 0x00001904u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003cu, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000016u, 0x0000003bu, 0x000200f8u, 0x0000003du, 0x0004003du, 0x00000008u, 0x0000027du, 0x0000003bu, 0x000500abu, 0x0000002cu, 0x0000027eu, 0x0000027du, 0x0000009cu, 0x000300f7u, 0x00000280u, 0x00000000u, 0x000400fau, 0x0000027eu, 0x0000027fu, 0x00000280u, 0x000200f8u, 0x0000027fu, 0x0004003du, 0x00000008u, 0x00000281u, 0x0000003bu, 0x0006000cu, 0x00000008u, 0x00000282u, 0x00000001u, 0x0000004au, 0x00000281u, 0x000500c4u, 0x00000008u, 0x00000283u, 0x000000afu, 0x00000282u, 0x0003003eu, 0x0000003bu, 0x00000283u, 0x000200f9u, 0x00000280u, 0x000200f8u, 0x00000280u, 0x0004003du, 0x00000008u, 0x00000284u, 0x0000003bu, 0x000200feu, 0x00000284u, 0x00010038u, 0x00050036u, 0x0000002cu, 0x0000004du, 0x00000000u, 0x0000003eu, 0x00030037u, 0x00000016u, 0x0000003fu, 0x00030037u, 0x00000016u, 0x00000040u, 0x00030037u, 0x00000016u, 0x00000041u, 0x00030037u, 0x00000016u, 0x00000042u, 0x00030037u, 0x00000016u, 0x00000043u, 0x00030037u, 0x00000016u, 0x00000044u, 0x00030037u, 0x00000016u, 0x00000045u, 0x00030037u, 0x0000002du, 0x00000046u, 0x00030037u, 0x00000016u, 0x00000047u, 0x00030037u, 0x0000002du, 0x00000048u, 0x00030037u, 0x0000002du, 0x00000049u, 0x00030037u, 0x0000002du, 0x0000004au, 0x00030037u, 0x0000002du, 0x0000004bu, 0x00030037u, 0x0000002fu, 0x0000004cu, 0x000200f8u, 0x0000004eu, 0x0004003bu, 0x00000016u, 0x0000028au, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000028eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000028fu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000292u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000297u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002b5u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002b9u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002bbu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002bfu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002cau, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002dbu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002dcu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002dfu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000002e3u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000002e7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000313u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000315u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000336u, 0x00000007u, 0x0004003du, 0x0000002cu, 0x00000287u, 0x00000046u, 0x000300f7u, 0x00000289u, 0x00000000u, 0x000400fau, 0x00000287u, 0x00000288u, 0x00000330u, 0x000200f8u, 0x00000288u, 0x0004003du, 0x00000008u, 0x0000028cu, 0x00000042u, 0x0003003eu, 0x0000028bu, 0x0000028cu, 0x00050039u, 0x00000008u, 0x0000028du, 0x0000001eu, 0x0000028bu, 0x0003003eu, 0x0000028au, 0x0000028du, 0x0004003du, 0x00000008u, 0x00000290u, 0x00000043u, 0x0003003eu, 0x0000028fu, 0x00000290u, 0x00050039u, 0x00000008u, 0x00000291u, 0x00000024u, 0x0000028fu, 0x0003003eu, 0x0000028eu, 0x00000291u, 0x0004003du, 0x00000008u, 0x00000293u, 0x00000042u, 0x000500c3u, 0x00000008u, 0x00000294u, 0x00000293u, 0x000000eau, 0x000500c7u, 0x00000008u, 0x00000296u, 0x00000294u, 0x00000295u, 0x0003003eu, 0x00000292u, 0x00000296u, 0x0003003eu, 0x00000297u, 0x00000298u, 0x0004003du, 0x00000008u, 0x00000299u, 0x00000041u, 0x0004003du, 0x00000008u, 0x0000029au, 0x00000043u, 0x00050082u, 0x00000008u, 0x0000029bu, 0x00000299u, 0x0000029au, 0x0008000cu, 0x00000008u, 0x0000029cu, 0x00000001u, 0x0000002du, 0x0000029bu, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x0000029du, 0x0000004cu, 0x000001b8u, 0x0003003eu, 0x0000029du, 0x0000029cu, 0x0004003du, 0x00000008u, 0x0000029eu, 0x00000043u, 0x0004003du, 0x00000008u, 0x0000029fu, 0x00000041u, 0x00050082u, 0x00000008u, 0x000002a0u, 0x0000029eu, 0x0000029fu, 0x0008000cu, 0x00000008u, 0x000002a1u, 0x00000001u, 0x0000002du, 0x000002a0u, 0x0000009cu, 0x000000c1u, 0x00050041u, 0x00000016u, 0x000002a2u, 0x0000004cu, 0x000001dau, 0x0003003eu, 0x000002a2u, 0x000002a1u, 0x000500b1u, 0x0000002cu, 0x000002a4u, 0x00000296u, 0x000000bbu, 0x000300f7u, 0x000002a6u, 0x00000000u, 0x000400fau, 0x000002a4u, 0x000002a5u, 0x000002a6u, 0x000200f8u, 0x000002a5u, 0x000500abu, 0x0000002cu, 0x000002a9u, 0x00000291u, 0x000002a8u, 0x000300f7u, 0x000002abu, 0x00000000u, 0x000400fau, 0x000002a9u, 0x000002aau, 0x000002b2u, 0x000200f8u, 0x000002aau, 0x000500c4u, 0x00000008u, 0x000002adu, 0x00000291u, 0x000000afu, 0x000500c3u, 0x00000008u, 0x000002b0u, 0x000002aeu, 0x00000296u, 0x0007000cu, 0x00000008u, 0x000002b1u, 0x00000001u, 0x0000002au, 0x000002adu, 0x000002b0u, 0x0003003eu, 0x0000028eu, 0x000002b1u, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002b2u, 0x0003003eu, 0x00000297u, 0x000002b3u, 0x0003003eu, 0x0000028eu, 0x000002b4u, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002abu, 0x000700f5u, 0x00000008u, 0x00001907u, 0x000002b1u, 0x000002aau, 0x000002b4u, 0x000002b2u, 0x000600a9u, 0x0000002cu, 0x00001965u, 0x000002a9u, 0x00000298u, 0x000002b3u, 0x000200f9u, 0x000002a6u, 0x000200f8u, 0x000002a6u, 0x000700f5u, 0x0000002cu, 0x00001908u, 0x00000298u, 0x00000288u, 0x00001965u, 0x000002abu, 0x000700f5u, 0x00000008u, 0x00001906u, 0x00000291u, 0x00000288u, 0x00001907u, 0x000002abu, 0x0004003du, 0x00000008u, 0x000002b6u, 0x00000040u, 0x000500c5u, 0x00000008u, 0x000002b8u, 0x000002b6u, 0x00001906u, 0x0003003eu, 0x000002b9u, 0x000002b8u, 0x00050039u, 0x00000008u, 0x000002bau, 0x0000003cu, 0x000002b9u, 0x0003003eu, 0x000002b5u, 0x000002bau, 0x0003003eu, 0x000002bbu, 0x000002bau, 0x000500c4u, 0x00000008u, 0x000002beu, 0x000002bau, 0x000000bbu, 0x0003003eu, 0x000002b5u, 0x000002beu, 0x000400a8u, 0x0000002cu, 0x000002c1u, 0x00001908u, 0x000300f7u, 0x000002c3u, 0x00000000u, 0x000400fau, 0x000002c1u, 0x000002c2u, 0x000002c3u, 0x000200f8u, 0x000002c2u, 0x0004003du, 0x00000008u, 0x000002c4u, 0x0000003fu, 0x00050080u, 0x00000008u, 0x000002c6u, 0x000002c4u, 0x000002beu, 0x000500afu, 0x0000002cu, 0x000002c8u, 0x000002c6u, 0x0000028du, 0x000200f9u, 0x000002c3u, 0x000200f8u, 0x000002c3u, 0x000700f5u, 0x0000002cu, 0x000002c9u, 0x00001908u, 0x000002a6u, 0x000002c8u, 0x000002c2u, 0x0003003eu, 0x000002bfu, 0x000002c9u, 0x0004003du, 0x00000008u, 0x000002cbu, 0x00000044u, 0x0004003du, 0x00000008u, 0x000002ccu, 0x00000045u, 0x00050080u, 0x00000008u, 0x000002cdu, 0x000002cbu, 0x000002ccu, 0x000500afu, 0x0000002cu, 0x000002ceu, 0x000002cdu, 0x000000d9u, 0x0003003eu, 0x000002cau, 0x000002ceu, 0x0004003du, 0x0000002cu, 0x000002cfu, 0x00000048u, 0x000400a8u, 0x0000002cu, 0x000002d0u, 0x000002cfu, 0x000300f7u, 0x000002d2u, 0x00000000u, 0x000400fau, 0x000002d0u, 0x000002d1u, 0x000002d2u, 0x000200f8u, 0x000002d1u, 0x000400a8u, 0x0000002cu, 0x000002d4u, 0x000002ceu, 0x0004003du, 0x0000002cu, 0x000002d5u, 0x00000049u, 0x000500a7u, 0x0000002cu, 0x000002d6u, 0x000002d4u, 0x000002d5u, 0x000500a7u, 0x0000002cu, 0x000002d8u, 0x000002d6u, 0x000002c9u, 0x000200f9u, 0x000002d2u, 0x000200f8u, 0x000002d2u, 0x000700f5u, 0x0000002cu, 0x000002d9u, 0x000002cfu, 0x000002c3u, 0x000002d8u, 0x000002d1u, 0x0003003eu, 0x0000004au, 0x000002d9u, 0x0003003eu, 0x0000004bu, 0x000002ceu, 0x0003003eu, 0x000002dbu, 0x00000298u, 0x000500aau, 0x0000002cu, 0x000002deu, 0x0000028du, 0x00000170u, 0x0003003eu, 0x000002dcu, 0x000002deu, 0x0004003du, 0x00000008u, 0x000002e0u, 0x0000003fu, 0x000500b1u, 0x0000002cu, 0x000002e2u, 0x000002e0u, 0x0000028du, 0x0003003eu, 0x000002dfu, 0x000002e2u, 0x0004003du, 0x00000008u, 0x000002e4u, 0x0000003fu, 0x00050082u, 0x00000008u, 0x000002e6u, 0x000002e4u, 0x000002beu, 0x0003003eu, 0x000002e3u, 0x000002e6u, 0x000500b3u, 0x0000002cu, 0x000002ebu, 0x000002e6u, 0x0000028du, 0x000500a6u, 0x0000002cu, 0x000002ecu, 0x00001908u, 0x000002ebu, 0x0003003eu, 0x000002e7u, 0x000002ecu, 0x0004003du, 0x00000008u, 0x000002edu, 0x00000047u, 0x000300f7u, 0x000002f2u, 0x00000000u, 0x000b00fbu, 0x000002edu, 0x000002f2u, 0x00000000u, 0x000002eeu, 0x00000001u, 0x000002efu, 0x00000002u, 0x000002f0u, 0x00000003u, 0x000002f1u, 0x000200f8u, 0x000002eeu, 0x000400a8u, 0x0000002cu, 0x000002f4u, 0x000002deu, 0x000300f7u, 0x000002f6u, 0x00000000u, 0x000400fau, 0x000002f4u, 0x000002f5u, 0x000002f6u, 0x000200f8u, 0x000002f5u, 0x000600a9u, 0x0000002cu, 0x000002fau, 0x000002ceu, 0x000002e2u, 0x000002ecu, 0x000200f9u, 0x000002f6u, 0x000200f8u, 0x000002f6u, 0x000700f5u, 0x0000002cu, 0x000002fbu, 0x000002deu, 0x000002eeu, 0x000002fau, 0x000002f5u, 0x0003003eu, 0x000002dbu, 0x000002fbu, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002efu, 0x000400a8u, 0x0000002cu, 0x000002feu, 0x000002e2u, 0x000400a8u, 0x0000002cu, 0x00000300u, 0x000002c9u, 0x000500a6u, 0x0000002cu, 0x00000301u, 0x000002feu, 0x00000300u, 0x000400a8u, 0x0000002cu, 0x00000303u, 0x000002ceu, 0x000500a6u, 0x0000002cu, 0x00000304u, 0x00000301u, 0x00000303u, 0x000300f7u, 0x00000306u, 0x00000000u, 0x000400fau, 0x00000304u, 0x00000305u, 0x00000310u, 0x000200f8u, 0x00000305u, 0x000400a8u, 0x0000002cu, 0x00000308u, 0x000002deu, 0x000300f7u, 0x0000030au, 0x00000000u, 0x000400fau, 0x00000308u, 0x00000309u, 0x0000030au, 0x000200f8u, 0x00000309u, 0x000600a9u, 0x0000002cu, 0x0000030eu, 0x000002ceu, 0x000002e2u, 0x000002ecu, 0x000200f9u, 0x0000030au, 0x000200f8u, 0x0000030au, 0x000700f5u, 0x0000002cu, 0x0000030fu, 0x000002deu, 0x00000305u, 0x0000030eu, 0x00000309u, 0x0003003eu, 0x000002dbu, 0x0000030fu, 0x000200f9u, 0x00000306u, 0x000200f8u, 0x00000310u, 0x000500c7u, 0x00000008u, 0x00000312u, 0x000002bau, 0x000002b4u, 0x0003003eu, 0x00000313u, 0x00000312u, 0x00050039u, 0x00000008u, 0x00000314u, 0x00000027u, 0x00000313u, 0x0003003eu, 0x000002bbu, 0x00000314u, 0x000500c3u, 0x00000008u, 0x00000318u, 0x0000028du, 0x00000314u, 0x0004003du, 0x00000008u, 0x00000319u, 0x0000003fu, 0x000500c3u, 0x00000008u, 0x0000031bu, 0x00000319u, 0x00000314u, 0x00050082u, 0x00000008u, 0x0000031cu, 0x00000318u, 0x0000031bu, 0x000500c7u, 0x00000008u, 0x0000031du, 0x0000031cu, 0x00000295u, 0x0003003eu, 0x00000315u, 0x0000031du, 0x0004003du, 0x00000008u, 0x0000031fu, 0x00000044u, 0x00050084u, 0x00000008u, 0x00000320u, 0x0000031du, 0x0000031fu, 0x000500c3u, 0x00000008u, 0x00000321u, 0x00000320u, 0x000000bbu, 0x0007000cu, 0x00000008u, 0x00000322u, 0x00000001u, 0x00000027u, 0x00000321u, 0x000000d9u, 0x0003003eu, 0x00000044u, 0x00000322u, 0x0003003eu, 0x000002dbu, 0x000002b3u, 0x000200f9u, 0x00000306u, 0x000200f8u, 0x00000306u, 0x000700f5u, 0x0000002cu, 0x00001918u, 0x0000030fu, 0x0000030au, 0x000002b3u, 0x00000310u, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002f0u, 0x000500a6u, 0x0000002cu, 0x00000326u, 0x000002e2u, 0x000002deu, 0x0003003eu, 0x000002dbu, 0x00000326u, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002f1u, 0x000500a7u, 0x0000002cu, 0x0000032au, 0x000002c9u, 0x000002ecu, 0x000400a8u, 0x0000002cu, 0x0000032cu, 0x000002deu, 0x000500a7u, 0x0000002cu, 0x0000032du, 0x0000032au, 0x0000032cu, 0x0003003eu, 0x000002dbu, 0x0000032du, 0x000200f9u, 0x000002f2u, 0x000200f8u, 0x000002f2u, 0x000d00f5u, 0x0000002cu, 0x00001917u, 0x00000298u, 0x000002d2u, 0x000002fbu, 0x000002f6u, 0x00001918u, 0x00000306u, 0x00000326u, 0x000002f0u, 0x0000032du, 0x000002f1u, 0x000200f9u, 0x00000289u, 0x000200f8u, 0x00000330u, 0x00050041u, 0x00000016u, 0x00000331u, 0x0000004cu, 0x000001b8u, 0x0003003eu, 0x00000331u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x00000332u, 0x00000041u, 0x00050082u, 0x00000008u, 0x00000333u, 0x00000295u, 0x00000332u, 0x0007000cu, 0x00000008u, 0x00000334u, 0x00000001u, 0x00000027u, 0x00000333u, 0x000000c1u, 0x00050041u, 0x00000016u, 0x00000335u, 0x0000004cu, 0x000001dau, 0x0003003eu, 0x00000335u, 0x00000334u, 0x0004003du, 0x00000008u, 0x00000337u, 0x00000044u, 0x0004003du, 0x00000008u, 0x00000338u, 0x00000045u, 0x00050080u, 0x00000008u, 0x00000339u, 0x00000337u, 0x00000338u, 0x000500afu, 0x0000002cu, 0x0000033au, 0x00000339u, 0x000000d9u, 0x0003003eu, 0x00000336u, 0x0000033au, 0x0004003du, 0x0000002cu, 0x0000033bu, 0x00000048u, 0x000400a8u, 0x0000002cu, 0x0000033cu, 0x0000033bu, 0x000300f7u, 0x0000033eu, 0x00000000u, 0x000400fau, 0x0000033cu, 0x0000033du, 0x0000033eu, 0x000200f8u, 0x0000033du, 0x000400a8u, 0x0000002cu, 0x00000340u, 0x0000033au, 0x0004003du, 0x0000002cu, 0x00000341u, 0x00000049u, 0x000500a7u, 0x0000002cu, 0x00000342u, 0x00000340u, 0x00000341u, 0x000200f9u, 0x0000033eu, 0x000200f8u, 0x0000033eu, 0x000700f5u, 0x0000002cu, 0x00000343u, 0x0000033bu, 0x00000330u, 0x00000342u, 0x0000033du, 0x0003003eu, 0x0000004au, 0x00000343u, 0x0003003eu, 0x0000004bu, 0x0000033au, 0x0003003eu, 0x000002dbu, 0x000002b3u, 0x000200f9u, 0x00000289u, 0x000200f8u, 0x00000289u, 0x000700f5u, 0x0000002cu, 0x00001916u, 0x00001917u, 0x000002f2u, 0x000002b3u, 0x0000033eu, 0x000200feu, 0x00001916u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000054u, 0x00000000u, 0x0000004fu, 0x00030037u, 0x00000016u, 0x00000050u, 0x00030037u, 0x00000016u, 0x00000051u, 0x00030037u, 0x0000002du, 0x00000052u, 0x00030037u, 0x00000016u, 0x00000053u, 0x000200f8u, 0x00000055u, 0x0004003bu, 0x00000016u, 0x00000348u, 0x00000007u, 0x0003003eu, 0x00000348u, 0x0000009cu, 0x0004003du, 0x00000008u, 0x00000349u, 0x00000053u, 0x000300f7u, 0x0000034eu, 0x00000000u, 0x000b00fbu, 0x00000349u, 0x0000034eu, 0x00000000u, 0x0000034au, 0x00000001u, 0x0000034bu, 0x00000002u, 0x0000034cu, 0x00000003u, 0x0000034du, 0x000200f8u, 0x0000034au, 0x0004003du, 0x0000002cu, 0x0000034fu, 0x00000052u, 0x000300f7u, 0x00000351u, 0x00000000u, 0x000400fau, 0x0000034fu, 0x00000350u, 0x00000356u, 0x000200f8u, 0x00000350u, 0x0004003du, 0x00000008u, 0x00000352u, 0x00000051u, 0x0004003du, 0x00000008u, 0x00000353u, 0x00000050u, 0x00050080u, 0x00000008u, 0x00000354u, 0x00000352u, 0x00000353u, 0x0007000cu, 0x00000008u, 0x00000355u, 0x00000001u, 0x00000027u, 0x000000d3u, 0x00000354u, 0x0003003eu, 0x00000348u, 0x00000355u, 0x000200f9u, 0x00000351u, 0x000200f8u, 0x00000356u, 0x0004003du, 0x00000008u, 0x00000357u, 0x00000050u, 0x00050082u, 0x00000008u, 0x00000358u, 0x00000357u, 0x000000afu, 0x000500c7u, 0x00000008u, 0x00000359u, 0x00000358u, 0x000000d3u, 0x0003003eu, 0x00000348u, 0x00000359u, 0x000200f9u, 0x00000351u, 0x000200f8u, 0x00000351u, 0x000700f5u, 0x00000008u, 0x0000191au, 0x00000355u, 0x00000350u, 0x00000359u, 0x00000356u, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034bu, 0x0004003du, 0x00000008u, 0x0000035bu, 0x00000050u, 0x0004003du, 0x00000008u, 0x0000035cu, 0x00000051u, 0x00050080u, 0x00000008u, 0x0000035du, 0x0000035bu, 0x0000035cu, 0x000500c7u, 0x00000008u, 0x0000035eu, 0x0000035du, 0x000000d3u, 0x0003003eu, 0x00000348u, 0x0000035eu, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034cu, 0x0003003eu, 0x00000348u, 0x000000d3u, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034du, 0x0004003du, 0x00000008u, 0x00000361u, 0x00000051u, 0x0003003eu, 0x00000348u, 0x00000361u, 0x000200f9u, 0x0000034eu, 0x000200f8u, 0x0000034eu, 0x000d00f5u, 0x00000008u, 0x00001919u, 0x0000009cu, 0x00000055u, 0x0000191au, 0x00000351u, 0x0000035eu, 0x0000034bu, 0x000000d3u, 0x0000034cu, 0x00000361u, 0x0000034du, 0x000200feu, 0x00001919u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000059u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000057u, 0x00030037u, 0x00000007u, 0x00000058u, 0x000200f8u, 0x0000005au, 0x0004003bu, 0x00000016u, 0x00000375u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000399u, 0x00000007u, 0x0004003bu, 0x000003a4u, 0x000003a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003e5u, 0x00000007u, 0x000300f7u, 0x0000036cu, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x0000036cu, 0x00000000u, 0x00000368u, 0x00000001u, 0x00000368u, 0x00000002u, 0x00000369u, 0x00000003u, 0x0000036au, 0x00000004u, 0x0000036bu, 0x000200f8u, 0x00000368u, 0x0004003du, 0x00000006u, 0x0000036fu, 0x00000057u, 0x000500c7u, 0x00000006u, 0x00000370u, 0x0000036fu, 0x0000036eu, 0x0003003eu, 0x00000057u, 0x00000370u, 0x0004003du, 0x00000006u, 0x00000371u, 0x00000058u, 0x00050084u, 0x00000006u, 0x00000372u, 0x00000371u, 0x0000036du, 0x0004003du, 0x00000006u, 0x00000373u, 0x00000057u, 0x00050080u, 0x00000006u, 0x00000374u, 0x00000373u, 0x00000372u, 0x0003003eu, 0x00000057u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000037au, 0x00000057u, 0x000500c6u, 0x00000006u, 0x0000037bu, 0x0000037au, 0x000001e0u, 0x00060041u, 0x000000f2u, 0x0000037cu, 0x00000379u, 0x0000009cu, 0x0000037bu, 0x0004003du, 0x0000009du, 0x0000037du, 0x0000037cu, 0x00040071u, 0x00000006u, 0x0000037eu, 0x0000037du, 0x0004007cu, 0x00000008u, 0x0000037fu, 0x0000037eu, 0x0003003eu, 0x00000375u, 0x0000037fu, 0x0004003du, 0x00000006u, 0x00000389u, 0x00000057u, 0x000500c2u, 0x00000006u, 0x0000038au, 0x00000389u, 0x000000afu, 0x00060041u, 0x000000f2u, 0x0000038bu, 0x00000388u, 0x0000009cu, 0x0000038au, 0x0004003du, 0x0000009du, 0x0000038cu, 0x0000038bu, 0x00040071u, 0x00000006u, 0x0000038du, 0x0000038cu, 0x0004007cu, 0x00000008u, 0x0000038eu, 0x0000038du, 0x00070050u, 0x00000009u, 0x0000038fu, 0x0000037fu, 0x0000037fu, 0x0000037fu, 0x0000038eu, 0x0003003eu, 0x00000381u, 0x0000038fu, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x00000369u, 0x0004003du, 0x00000006u, 0x00000392u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x00000393u, 0x00000392u, 0x00000391u, 0x0003003eu, 0x00000057u, 0x00000393u, 0x0004003du, 0x00000006u, 0x00000394u, 0x00000058u, 0x00050084u, 0x00000006u, 0x00000396u, 0x00000394u, 0x00000395u, 0x0004003du, 0x00000006u, 0x00000397u, 0x00000057u, 0x00050080u, 0x00000006u, 0x00000398u, 0x00000397u, 0x00000396u, 0x0003003eu, 0x00000057u, 0x00000398u, 0x0004003du, 0x00000006u, 0x0000039eu, 0x00000057u, 0x000500c6u, 0x00000006u, 0x0000039fu, 0x0000039eu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000003a0u, 0x0000039du, 0x0000009cu, 0x0000039fu, 0x0004003du, 0x0000009fu, 0x000003a1u, 0x000003a0u, 0x00040071u, 0x00000006u, 0x000003a2u, 0x000003a1u, 0x0003003eu, 0x00000399u, 0x000003a2u, 0x000500c2u, 0x00000006u, 0x000003a8u, 0x000003a2u, 0x000003a7u, 0x000500c2u, 0x00000006u, 0x000003aau, 0x000003a2u, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x000003acu, 0x000003a2u, 0x00000193u, 0x00060050u, 0x000003a3u, 0x000003adu, 0x000003a8u, 0x000003aau, 0x000003acu, 0x000500c7u, 0x000003a3u, 0x000003b0u, 0x000003adu, 0x00001957u, 0x0003003eu, 0x000003a5u, 0x000003b0u, 0x0004007cu, 0x00000014u, 0x000003b2u, 0x000003b0u, 0x0004003du, 0x00000006u, 0x000003b3u, 0x00000057u, 0x00060041u, 0x000000f2u, 0x000003b4u, 0x00000388u, 0x0000009cu, 0x000003b3u, 0x0004003du, 0x0000009du, 0x000003b5u, 0x000003b4u, 0x00040071u, 0x00000006u, 0x000003b6u, 0x000003b5u, 0x0004007cu, 0x00000008u, 0x000003b7u, 0x000003b6u, 0x000500c4u, 0x00000008u, 0x000003b8u, 0x000003b7u, 0x000000c7u, 0x000500c7u, 0x00000006u, 0x000003bau, 0x000003a2u, 0x000001dau, 0x000500c4u, 0x00000006u, 0x000003bbu, 0x000003bau, 0x000000d3u, 0x0004007cu, 0x00000008u, 0x000003bcu, 0x000003bbu, 0x000500c5u, 0x00000008u, 0x000003bdu, 0x000003b8u, 0x000003bcu, 0x00050051u, 0x00000008u, 0x000003beu, 0x000003b2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003bfu, 0x000003b2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003c0u, 0x000003b2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000003c1u, 0x000003beu, 0x000003bfu, 0x000003c0u, 0x000003bdu, 0x0003003eu, 0x00000381u, 0x000003c1u, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036au, 0x0004003du, 0x00000006u, 0x000003c3u, 0x00000057u, 0x000500c7u, 0x00000006u, 0x000003c4u, 0x000003c3u, 0x00000391u, 0x0003003eu, 0x00000057u, 0x000003c4u, 0x0004003du, 0x00000006u, 0x000003c5u, 0x00000058u, 0x00050084u, 0x00000006u, 0x000003c7u, 0x000003c5u, 0x000003c6u, 0x0004003du, 0x00000006u, 0x000003c8u, 0x00000057u, 0x00050080u, 0x00000006u, 0x000003c9u, 0x000003c8u, 0x000003c7u, 0x0003003eu, 0x00000057u, 0x000003c9u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x00000057u, 0x000500c6u, 0x00000006u, 0x000003ccu, 0x000003cbu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x000003cdu, 0x0000039du, 0x0000009cu, 0x000003ccu, 0x0004003du, 0x0000009fu, 0x000003ceu, 0x000003cdu, 0x00040071u, 0x00000006u, 0x000003cfu, 0x000003ceu, 0x0003003eu, 0x000003cau, 0x000003cfu, 0x000500c2u, 0x00000006u, 0x000003d1u, 0x000003cfu, 0x000003a7u, 0x0004007cu, 0x00000008u, 0x000003d2u, 0x000003d1u, 0x00060050u, 0x00000014u, 0x000003d3u, 0x000003d2u, 0x000003d2u, 0x000003d2u, 0x000500c7u, 0x00000006u, 0x000003d6u, 0x000003cfu, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x000003d7u, 0x000003d6u, 0x00070050u, 0x00000009u, 0x000003dbu, 0x000003d2u, 0x000003d2u, 0x000003d2u, 0x000003d7u, 0x0003003eu, 0x00000381u, 0x000003dbu, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036bu, 0x0004003du, 0x00000006u, 0x000003deu, 0x00000057u, 0x000500c7u, 0x00000006u, 0x000003dfu, 0x000003deu, 0x000003ddu, 0x0003003eu, 0x00000057u, 0x000003dfu, 0x0004003du, 0x00000006u, 0x000003e0u, 0x00000058u, 0x00050084u, 0x00000006u, 0x000003e2u, 0x000003e0u, 0x000003e1u, 0x0004003du, 0x00000006u, 0x000003e3u, 0x00000057u, 0x00050080u, 0x00000006u, 0x000003e4u, 0x000003e3u, 0x000003e2u, 0x0003003eu, 0x00000057u, 0x000003e4u, 0x0004003du, 0x00000006u, 0x000003eau, 0x00000057u, 0x00060041u, 0x000000e6u, 0x000003ebu, 0x000003e9u, 0x0000009cu, 0x000003eau, 0x0004003du, 0x00000006u, 0x000003ecu, 0x000003ebu, 0x0003003eu, 0x000003e5u, 0x000003ecu, 0x00070050u, 0x000000abu, 0x000003eeu, 0x000003ecu, 0x000003ecu, 0x000003ecu, 0x000003ecu, 0x000500c2u, 0x000000abu, 0x000003f2u, 0x000003eeu, 0x000003f1u, 0x000500c7u, 0x000000abu, 0x000003f4u, 0x000003f2u, 0x000003f3u, 0x0004007cu, 0x00000009u, 0x000003f5u, 0x000003f4u, 0x0003003eu, 0x00000381u, 0x000003f5u, 0x000200f9u, 0x0000036cu, 0x000200f8u, 0x0000036cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000005bu, 0x00000000u, 0x00000003u, 0x000200f8u, 0x0000005cu, 0x0004003bu, 0x00000007u, 0x00000403u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000041du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000421u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000428u, 0x00000007u, 0x000300f7u, 0x000003fau, 0x00000000u, 0x000700fbu, 0x00000367u, 0x000003fau, 0x00000002u, 0x000003f8u, 0x00000003u, 0x000003f9u, 0x000200f8u, 0x000003f8u, 0x00050041u, 0x0000009au, 0x000003fcu, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x000003fdu, 0x000003fcu, 0x000500c3u, 0x00000008u, 0x000003feu, 0x000003fdu, 0x000000bbu, 0x00050041u, 0x0000009au, 0x000003ffu, 0x00000381u, 0x00000193u, 0x0004003du, 0x00000008u, 0x00000400u, 0x000003ffu, 0x000500c7u, 0x00000008u, 0x00000401u, 0x00000400u, 0x000000d9u, 0x000500c5u, 0x00000008u, 0x00000402u, 0x000003feu, 0x00000401u, 0x0003003eu, 0x000003fbu, 0x00000402u, 0x00050041u, 0x0000009au, 0x00000404u, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x00000405u, 0x00000404u, 0x0004007cu, 0x00000006u, 0x00000406u, 0x00000405u, 0x000500c7u, 0x00000006u, 0x00000407u, 0x00000406u, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x00000409u, 0x00000407u, 0x00000408u, 0x0003003eu, 0x00000403u, 0x00000409u, 0x00050041u, 0x0000009au, 0x0000040au, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x0000040bu, 0x0000040au, 0x0004007cu, 0x00000006u, 0x0000040cu, 0x0000040bu, 0x000500c7u, 0x00000006u, 0x0000040du, 0x0000040cu, 0x000003aeu, 0x000500c4u, 0x00000006u, 0x0000040eu, 0x0000040du, 0x000001dau, 0x000500c5u, 0x00000006u, 0x00000410u, 0x00000409u, 0x0000040eu, 0x0003003eu, 0x00000403u, 0x00000410u, 0x0004003du, 0x00000008u, 0x00000412u, 0x000003ffu, 0x0004007cu, 0x00000006u, 0x00000413u, 0x00000412u, 0x000500c7u, 0x00000006u, 0x00000414u, 0x00000413u, 0x000003aeu, 0x000500c2u, 0x00000006u, 0x00000416u, 0x00000414u, 0x00000415u, 0x000500c5u, 0x00000006u, 0x00000418u, 0x00000410u, 0x00000416u, 0x0003003eu, 0x00000403u, 0x00000418u, 0x0004007cu, 0x00000008u, 0x0000041bu, 0x00000418u, 0x0003003eu, 0x00000419u, 0x0000041bu, 0x000200f9u, 0x000003fau, 0x000200f8u, 0x000003f9u, 0x0004003du, 0x00000009u, 0x0000041eu, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x0000041fu, 0x0000041eu, 0x0000041eu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000420u, 0x0000041fu, 0x0003003eu, 0x0000041du, 0x00000420u, 0x00050041u, 0x00000007u, 0x00000422u, 0x0000041du, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000423u, 0x00000422u, 0x000500c4u, 0x00000006u, 0x00000424u, 0x00000423u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000425u, 0x0000041du, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000426u, 0x00000425u, 0x000500c5u, 0x00000006u, 0x00000427u, 0x00000424u, 0x00000426u, 0x0003003eu, 0x00000421u, 0x00000427u, 0x000500c7u, 0x00000006u, 0x0000042au, 0x00000427u, 0x000001dau, 0x00050084u, 0x00000006u, 0x0000042bu, 0x0000042au, 0x000001e0u, 0x0003003eu, 0x00000428u, 0x0000042bu, 0x000500c2u, 0x00000006u, 0x0000042du, 0x00000427u, 0x00000193u, 0x0004007cu, 0x00000008u, 0x0000042eu, 0x0000042du, 0x0003003eu, 0x00000419u, 0x0000042eu, 0x000500c7u, 0x00000006u, 0x00000430u, 0x00000427u, 0x000001e0u, 0x000500c4u, 0x00000006u, 0x00000431u, 0x00000430u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x00000433u, 0x00000431u, 0x0000042bu, 0x0004007cu, 0x00000008u, 0x00000434u, 0x00000433u, 0x0003003eu, 0x000003fbu, 0x00000434u, 0x000200f9u, 0x000003fau, 0x000200f8u, 0x000003fau, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000005du, 0x00000000u, 0x00000003u, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x00000007u, 0x00000437u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000438u, 0x00000419u, 0x0004007cu, 0x00000006u, 0x00000439u, 0x00000438u, 0x000500c4u, 0x00000006u, 0x0000043au, 0x00000439u, 0x00000415u, 0x0004003du, 0x00000008u, 0x0000043bu, 0x000003fbu, 0x0004007cu, 0x00000006u, 0x0000043cu, 0x0000043bu, 0x000500c5u, 0x00000006u, 0x0000043du, 0x0000043au, 0x0000043cu, 0x0003003eu, 0x00000437u, 0x0000043du, 0x000300f7u, 0x00000440u, 0x00000000u, 0x000700fbu, 0x00000367u, 0x00000440u, 0x00000002u, 0x0000043eu, 0x00000003u, 0x0000043fu, 0x000200f8u, 0x0000043eu, 0x000500c2u, 0x00000006u, 0x00000443u, 0x0000043du, 0x00000442u, 0x000500c7u, 0x00000006u, 0x00000444u, 0x00000443u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000445u, 0x00000444u, 0x00050041u, 0x0000009au, 0x00000446u, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x00000446u, 0x00000445u, 0x000500c2u, 0x00000006u, 0x00000449u, 0x0000043du, 0x00000448u, 0x000500c7u, 0x00000006u, 0x0000044au, 0x00000449u, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x0000044bu, 0x0000044au, 0x00050041u, 0x0000009au, 0x0000044cu, 0x00000381u, 0x000001dau, 0x0003003eu, 0x0000044cu, 0x0000044bu, 0x000500c2u, 0x00000006u, 0x0000044eu, 0x0000043du, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x0000044fu, 0x0000044eu, 0x000003aeu, 0x0004007cu, 0x00000008u, 0x00000450u, 0x0000044fu, 0x00050041u, 0x0000009au, 0x00000451u, 0x00000381u, 0x00000193u, 0x0003003eu, 0x00000451u, 0x00000450u, 0x000500c7u, 0x00000006u, 0x00000454u, 0x0000043du, 0x00000453u, 0x000500c4u, 0x00000006u, 0x00000455u, 0x00000454u, 0x00000448u, 0x0004007cu, 0x00000008u, 0x00000456u, 0x00000455u, 0x00050041u, 0x0000009au, 0x00000457u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000457u, 0x00000456u, 0x000200f9u, 0x00000440u, 0x000200f8u, 0x0000043fu, 0x000500c2u, 0x00000006u, 0x0000045au, 0x0000043du, 0x00000442u, 0x000500c7u, 0x00000006u, 0x0000045bu, 0x0000045au, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x0000045cu, 0x0000045bu, 0x00050041u, 0x0000009au, 0x0000045du, 0x00000381u, 0x000001b8u, 0x0003003eu, 0x0000045du, 0x0000045cu, 0x000500c2u, 0x00000006u, 0x0000045fu, 0x0000043du, 0x00000193u, 0x000500c7u, 0x00000006u, 0x00000460u, 0x0000045fu, 0x000003d5u, 0x0004007cu, 0x00000008u, 0x00000461u, 0x00000460u, 0x00050041u, 0x0000009au, 0x00000462u, 0x00000381u, 0x000001e0u, 0x0003003eu, 0x00000462u, 0x00000461u, 0x000200f9u, 0x00000440u, 0x000200f8u, 0x00000440u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000061u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000060u, 0x000200f8u, 0x00000062u, 0x0004003bu, 0x00000016u, 0x0000046eu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000467u, 0x0000005fu, 0x000500c7u, 0x00000006u, 0x00000468u, 0x00000467u, 0x00000391u, 0x0003003eu, 0x0000005fu, 0x00000468u, 0x0004003du, 0x00000006u, 0x00000469u, 0x00000060u, 0x00050084u, 0x00000006u, 0x0000046bu, 0x00000469u, 0x0000046au, 0x0004003du, 0x00000006u, 0x0000046cu, 0x0000005fu, 0x00050080u, 0x00000006u, 0x0000046du, 0x0000046cu, 0x0000046bu, 0x0003003eu, 0x0000005fu, 0x0000046du, 0x0004003du, 0x00000006u, 0x0000046fu, 0x0000005fu, 0x000500c6u, 0x00000006u, 0x00000470u, 0x0000046fu, 0x000001dau, 0x00060041u, 0x000000ebu, 0x00000471u, 0x0000039du, 0x0000009cu, 0x00000470u, 0x0004003du, 0x0000009fu, 0x00000472u, 0x00000471u, 0x00040071u, 0x00000006u, 0x00000473u, 0x00000472u, 0x0004007cu, 0x00000008u, 0x00000474u, 0x00000473u, 0x0003003eu, 0x0000046eu, 0x00000474u, 0x000500c3u, 0x00000008u, 0x00000476u, 0x00000474u, 0x000000b5u, 0x0003003eu, 0x00000419u, 0x00000476u, 0x0004003du, 0x00000006u, 0x00000477u, 0x0000005fu, 0x00060041u, 0x000000f2u, 0x00000478u, 0x00000388u, 0x0000009cu, 0x00000477u, 0x0004003du, 0x0000009du, 0x00000479u, 0x00000478u, 0x00040071u, 0x00000006u, 0x0000047au, 0x00000479u, 0x0004007cu, 0x00000008u, 0x0000047bu, 0x0000047au, 0x000500c7u, 0x00000008u, 0x0000047du, 0x00000474u, 0x000000bbu, 0x000500c4u, 0x00000008u, 0x0000047eu, 0x0000047du, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x0000047fu, 0x0000047bu, 0x0000047eu, 0x0003003eu, 0x000003fbu, 0x0000047fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000065u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000063u, 0x00030037u, 0x00000007u, 0x00000064u, 0x000200f8u, 0x00000066u, 0x0004003bu, 0x000004d5u, 0x000004d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004e3u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000050du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000511u, 0x00000007u, 0x0004003bu, 0x000004d5u, 0x00000534u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000537u, 0x00000007u, 0x0004003du, 0x0000002cu, 0x00000480u, 0x00000466u, 0x000300f7u, 0x00000482u, 0x00000000u, 0x000400fau, 0x00000480u, 0x00000481u, 0x00000482u, 0x000200f8u, 0x00000481u, 0x000300f7u, 0x00000488u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000488u, 0x00000000u, 0x00000483u, 0x00000001u, 0x00000484u, 0x00000002u, 0x00000485u, 0x00000003u, 0x00000486u, 0x00000004u, 0x00000487u, 0x000200f8u, 0x00000483u, 0x0004003du, 0x00000006u, 0x00000489u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x0000048au, 0x00000489u, 0x0000036eu, 0x0003003eu, 0x00000063u, 0x0000048au, 0x0004003du, 0x00000006u, 0x0000048bu, 0x00000064u, 0x00050084u, 0x00000006u, 0x0000048cu, 0x0000048bu, 0x0000036du, 0x0004003du, 0x00000006u, 0x0000048du, 0x00000063u, 0x00050080u, 0x00000006u, 0x0000048eu, 0x0000048du, 0x0000048cu, 0x0003003eu, 0x00000063u, 0x0000048eu, 0x0004003du, 0x00000006u, 0x0000048fu, 0x00000063u, 0x000500c6u, 0x00000006u, 0x00000490u, 0x0000048fu, 0x000001e0u, 0x00040071u, 0x0000009du, 0x00000491u, 0x000001b8u, 0x00060041u, 0x000000f2u, 0x00000492u, 0x00000379u, 0x0000009cu, 0x00000490u, 0x0003003eu, 0x00000492u, 0x00000491u, 0x0004003du, 0x00000006u, 0x00000493u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x00000494u, 0x00000493u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00000495u, 0x00000494u, 0x000001b8u, 0x000300f7u, 0x00000497u, 0x00000000u, 0x000400fau, 0x00000495u, 0x00000496u, 0x00000497u, 0x000200f8u, 0x00000496u, 0x0004003du, 0x00000006u, 0x00000498u, 0x00000063u, 0x000500c2u, 0x00000006u, 0x00000499u, 0x00000498u, 0x000001dau, 0x00050041u, 0x0000009au, 0x0000049au, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x0000049bu, 0x0000049au, 0x00040071u, 0x0000009du, 0x0000049cu, 0x0000049bu, 0x00060041u, 0x000000f2u, 0x0000049du, 0x00000388u, 0x0000009cu, 0x00000499u, 0x0003003eu, 0x0000049du, 0x0000049cu, 0x000200f9u, 0x00000497u, 0x000200f8u, 0x00000497u, 0x000300f7u, 0x000004a5u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000004a4u, 0x000004a5u, 0x000200f8u, 0x000004a4u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x000004a7u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004a8u, 0x000004a7u, 0x000001e0u, 0x00050080u, 0x00000006u, 0x000004a9u, 0x000004a8u, 0x0000036du, 0x00040071u, 0x0000009du, 0x000004aau, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x000004abu, 0x00000379u, 0x0000009cu, 0x000004a9u, 0x0003003eu, 0x000004abu, 0x000004aau, 0x000200f9u, 0x000004a5u, 0x000200f8u, 0x000004a5u, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000484u, 0x0004003du, 0x00000006u, 0x000004adu, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004aeu, 0x000004adu, 0x0000036eu, 0x0003003eu, 0x00000063u, 0x000004aeu, 0x0004003du, 0x00000006u, 0x000004afu, 0x00000064u, 0x00050084u, 0x00000006u, 0x000004b0u, 0x000004afu, 0x0000036du, 0x0004003du, 0x00000006u, 0x000004b1u, 0x00000063u, 0x00050080u, 0x00000006u, 0x000004b2u, 0x000004b1u, 0x000004b0u, 0x0003003eu, 0x00000063u, 0x000004b2u, 0x0004003du, 0x00000006u, 0x000004b3u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004b4u, 0x000004b3u, 0x000001e0u, 0x00050041u, 0x0000009au, 0x000004b5u, 0x00000381u, 0x000001b8u, 0x0004003du, 0x00000008u, 0x000004b6u, 0x000004b5u, 0x00040071u, 0x0000009du, 0x000004b7u, 0x000004b6u, 0x00060041u, 0x000000f2u, 0x000004b8u, 0x00000379u, 0x0000009cu, 0x000004b4u, 0x0003003eu, 0x000004b8u, 0x000004b7u, 0x0004003du, 0x00000006u, 0x000004b9u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004bau, 0x000004b9u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x000004bbu, 0x000004bau, 0x000001b8u, 0x000300f7u, 0x000004bdu, 0x00000000u, 0x000400fau, 0x000004bbu, 0x000004bcu, 0x000004bdu, 0x000200f8u, 0x000004bcu, 0x0004003du, 0x00000006u, 0x000004beu, 0x00000063u, 0x000500c2u, 0x00000006u, 0x000004bfu, 0x000004beu, 0x000001dau, 0x0004003du, 0x00000008u, 0x000004c1u, 0x000004b5u, 0x000500c7u, 0x00000008u, 0x000004c2u, 0x000004c1u, 0x000000afu, 0x00050084u, 0x00000008u, 0x000004c3u, 0x000004c2u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x000004c4u, 0x000004c3u, 0x00060041u, 0x000000f2u, 0x000004c5u, 0x00000388u, 0x0000009cu, 0x000004bfu, 0x0003003eu, 0x000004c5u, 0x000004c4u, 0x000200f9u, 0x000004bdu, 0x000200f8u, 0x000004bdu, 0x000300f7u, 0x000004c7u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000004c6u, 0x000004c7u, 0x000200f8u, 0x000004c6u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x000004c8u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004c9u, 0x000004c8u, 0x000001e0u, 0x00050080u, 0x00000006u, 0x000004cau, 0x000004c9u, 0x0000036du, 0x00040071u, 0x0000009du, 0x000004cbu, 0x000003d5u, 0x00060041u, 0x000000f2u, 0x000004ccu, 0x00000379u, 0x0000009cu, 0x000004cau, 0x0003003eu, 0x000004ccu, 0x000004cbu, 0x000200f9u, 0x000004c7u, 0x000200f8u, 0x000004c7u, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000485u, 0x0004003du, 0x00000006u, 0x000004ceu, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004cfu, 0x000004ceu, 0x00000391u, 0x0003003eu, 0x00000063u, 0x000004cfu, 0x0004003du, 0x00000006u, 0x000004d0u, 0x00000064u, 0x00050084u, 0x00000006u, 0x000004d2u, 0x000004d0u, 0x000004d1u, 0x0004003du, 0x00000006u, 0x000004d3u, 0x00000063u, 0x00050080u, 0x00000006u, 0x000004d4u, 0x000004d3u, 0x000004d2u, 0x0003003eu, 0x00000063u, 0x000004d4u, 0x0004003du, 0x00000009u, 0x000004d7u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x000004d8u, 0x000004d7u, 0x0003003eu, 0x000004d6u, 0x000004d8u, 0x0004003du, 0x000000abu, 0x000004d9u, 0x000004d6u, 0x0008004fu, 0x000003a3u, 0x000004dau, 0x000004d9u, 0x000004d9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003a3u, 0x000004dcu, 0x000004dau, 0x00001957u, 0x0004003du, 0x000000abu, 0x000004ddu, 0x000004d6u, 0x0009004fu, 0x000000abu, 0x000004deu, 0x000004ddu, 0x000004dcu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000004d6u, 0x000004deu, 0x00050041u, 0x00000007u, 0x000004e0u, 0x000004d6u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x000004e1u, 0x000004e0u, 0x000500c2u, 0x00000006u, 0x000004e2u, 0x000004e1u, 0x00000448u, 0x0003003eu, 0x000004dfu, 0x000004e2u, 0x00050041u, 0x00000007u, 0x000004e4u, 0x000004d6u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000004e5u, 0x000004e4u, 0x000500c4u, 0x00000006u, 0x000004e6u, 0x000004e5u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x000004e7u, 0x000004d6u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000004e8u, 0x000004e7u, 0x000500c4u, 0x00000006u, 0x000004e9u, 0x000004e8u, 0x000001e0u, 0x000500c5u, 0x00000006u, 0x000004eau, 0x000004e6u, 0x000004e9u, 0x00050041u, 0x00000007u, 0x000004ebu, 0x000004d6u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000004ecu, 0x000004ebu, 0x000500c2u, 0x00000006u, 0x000004edu, 0x000004ecu, 0x00000193u, 0x000500c5u, 0x00000006u, 0x000004eeu, 0x000004eau, 0x000004edu, 0x000500c2u, 0x00000006u, 0x000004f0u, 0x000004e2u, 0x00000193u, 0x000500c5u, 0x00000006u, 0x000004f1u, 0x000004eeu, 0x000004f0u, 0x0003003eu, 0x000004e3u, 0x000004f1u, 0x0004003du, 0x00000006u, 0x000004f2u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004f3u, 0x000004f2u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x000004f5u, 0x000004f1u, 0x00060041u, 0x000000ebu, 0x000004f6u, 0x0000039du, 0x0000009cu, 0x000004f3u, 0x0003003eu, 0x000004f6u, 0x000004f5u, 0x0004003du, 0x00000006u, 0x000004f7u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x000004f9u, 0x000004e2u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x000004fau, 0x000004f9u, 0x00060041u, 0x000000f2u, 0x000004fbu, 0x00000388u, 0x0000009cu, 0x000004f7u, 0x0003003eu, 0x000004fbu, 0x000004fau, 0x000300f7u, 0x000004fdu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x000004fcu, 0x000004fdu, 0x000200f8u, 0x000004fcu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x000004feu, 0x00000063u, 0x000500c6u, 0x00000006u, 0x000004ffu, 0x000004feu, 0x000001dau, 0x00050080u, 0x00000006u, 0x00000501u, 0x000004ffu, 0x00000500u, 0x00040071u, 0x0000009fu, 0x00000503u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x00000504u, 0x0000039du, 0x0000009cu, 0x00000501u, 0x0003003eu, 0x00000504u, 0x00000503u, 0x000200f9u, 0x000004fdu, 0x000200f8u, 0x000004fdu, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000486u, 0x0004003du, 0x00000006u, 0x00000506u, 0x00000063u, 0x000500c7u, 0x00000006u, 0x00000507u, 0x00000506u, 0x00000391u, 0x0003003eu, 0x00000063u, 0x00000507u, 0x0004003du, 0x00000006u, 0x00000508u, 0x00000064u, 0x00050084u, 0x00000006u, 0x0000050au, 0x00000508u, 0x00000509u, 0x0004003du, 0x00000006u, 0x0000050bu, 0x00000063u, 0x00050080u, 0x00000006u, 0x0000050cu, 0x0000050bu, 0x0000050au, 0x0003003eu, 0x00000063u, 0x0000050cu, 0x0004003du, 0x00000009u, 0x0000050eu, 0x00000381u, 0x0007004fu, 0x0000002eu, 0x0000050fu, 0x0000050eu, 0x0000050eu, 0x00000000u, 0x00000003u, 0x0004007cu, 0x0000006bu, 0x00000510u, 0x0000050fu, 0x0003003eu, 0x0000050du, 0x00000510u, 0x00050041u, 0x00000007u, 0x00000512u, 0x0000050du, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000513u, 0x00000512u, 0x000500c4u, 0x00000006u, 0x00000514u, 0x00000513u, 0x000003a7u, 0x00050041u, 0x00000007u, 0x00000515u, 0x0000050du, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000516u, 0x00000515u, 0x000500c5u, 0x00000006u, 0x00000517u, 0x00000514u, 0x00000516u, 0x0003003eu, 0x00000511u, 0x00000517u, 0x0004003du, 0x00000006u, 0x00000518u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x00000519u, 0x00000518u, 0x000001dau, 0x00040071u, 0x0000009fu, 0x0000051bu, 0x00000517u, 0x00060041u, 0x000000ebu, 0x0000051cu, 0x0000039du, 0x0000009cu, 0x00000519u, 0x0003003eu, 0x0000051cu, 0x0000051bu, 0x0004003du, 0x00000006u, 0x0000051du, 0x00000063u, 0x0004003du, 0x00000006u, 0x0000051fu, 0x00000515u, 0x000500c7u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000521u, 0x00000520u, 0x000001e0u, 0x00040071u, 0x0000009du, 0x00000522u, 0x00000521u, 0x00060041u, 0x000000f2u, 0x00000523u, 0x00000388u, 0x0000009cu, 0x0000051du, 0x0003003eu, 0x00000523u, 0x00000522u, 0x000300f7u, 0x00000525u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x00000524u, 0x00000525u, 0x000200f8u, 0x00000524u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x00000526u, 0x00000063u, 0x000500c6u, 0x00000006u, 0x00000527u, 0x00000526u, 0x000001dau, 0x00050080u, 0x00000006u, 0x00000529u, 0x00000527u, 0x00000528u, 0x00040071u, 0x0000009fu, 0x0000052au, 0x00000502u, 0x00060041u, 0x000000ebu, 0x0000052bu, 0x0000039du, 0x0000009cu, 0x00000529u, 0x0003003eu, 0x0000052bu, 0x0000052au, 0x000200f9u, 0x00000525u, 0x000200f8u, 0x00000525u, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000487u, 0x0004003du, 0x00000006u, 0x0000052du, 0x00000063u, 0x000500c7u, 0x00000006u, 0x0000052eu, 0x0000052du, 0x000003ddu, 0x0003003eu, 0x00000063u, 0x0000052eu, 0x0004003du, 0x00000006u, 0x0000052fu, 0x00000064u, 0x00050084u, 0x00000006u, 0x00000531u, 0x0000052fu, 0x00000530u, 0x0004003du, 0x00000006u, 0x00000532u, 0x00000063u, 0x00050080u, 0x00000006u, 0x00000533u, 0x00000532u, 0x00000531u, 0x0003003eu, 0x00000063u, 0x00000533u, 0x0004003du, 0x00000009u, 0x00000535u, 0x00000381u, 0x0004007cu, 0x000000abu, 0x00000536u, 0x00000535u, 0x0003003eu, 0x00000534u, 0x00000536u, 0x00050041u, 0x00000007u, 0x00000538u, 0x00000534u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000539u, 0x00000538u, 0x000500c4u, 0x00000006u, 0x0000053au, 0x00000539u, 0x000003efu, 0x00050041u, 0x00000007u, 0x0000053bu, 0x00000534u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000053cu, 0x0000053bu, 0x000500c4u, 0x00000006u, 0x0000053du, 0x0000053cu, 0x000003f0u, 0x000500c5u, 0x00000006u, 0x0000053eu, 0x0000053au, 0x0000053du, 0x00050041u, 0x00000007u, 0x0000053fu, 0x00000534u, 0x00000193u, 0x0004003du, 0x00000006u, 0x00000540u, 0x0000053fu, 0x000500c4u, 0x00000006u, 0x00000541u, 0x00000540u, 0x000003a7u, 0x000500c5u, 0x00000006u, 0x00000542u, 0x0000053eu, 0x00000541u, 0x00050041u, 0x00000007u, 0x00000543u, 0x00000534u, 0x000001e0u, 0x0004003du, 0x00000006u, 0x00000544u, 0x00000543u, 0x000500c4u, 0x00000006u, 0x00000545u, 0x00000544u, 0x000001b8u, 0x000500c5u, 0x00000006u, 0x00000546u, 0x00000542u, 0x00000545u, 0x0003003eu, 0x00000537u, 0x00000546u, 0x0004003du, 0x00000006u, 0x00000547u, 0x00000063u, 0x00060041u, 0x000000e6u, 0x00000549u, 0x000003e9u, 0x0000009cu, 0x00000547u, 0x0003003eu, 0x00000549u, 0x00000546u, 0x0004003du, 0x00000006u, 0x0000054au, 0x00000063u, 0x00050084u, 0x00000006u, 0x0000054bu, 0x00000193u, 0x0000054au, 0x00050041u, 0x0000009au, 0x0000054cu, 0x00000381u, 0x000001dau, 0x0004003du, 0x00000008u, 0x0000054du, 0x0000054cu, 0x000500c7u, 0x00000008u, 0x0000054eu, 0x0000054du, 0x000000afu, 0x00050084u, 0x00000008u, 0x0000054fu, 0x0000054eu, 0x000000bbu, 0x00040071u, 0x0000009du, 0x00000550u, 0x0000054fu, 0x00060041u, 0x000000f2u, 0x00000551u, 0x00000388u, 0x0000009cu, 0x0000054bu, 0x0003003eu, 0x00000551u, 0x00000550u, 0x0004003du, 0x00000006u, 0x00000552u, 0x00000063u, 0x00050084u, 0x00000006u, 0x00000553u, 0x00000193u, 0x00000552u, 0x00050080u, 0x00000006u, 0x00000554u, 0x00000553u, 0x000001dau, 0x00050041u, 0x0000009au, 0x00000555u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000556u, 0x00000555u, 0x000500c7u, 0x00000008u, 0x00000557u, 0x00000556u, 0x000000afu, 0x00050084u, 0x00000008u, 0x00000558u, 0x00000557u, 0x000000bbu, 0x00040071u, 0x0000009du, 0x00000559u, 0x00000558u, 0x00060041u, 0x000000f2u, 0x0000055au, 0x00000388u, 0x0000009cu, 0x00000554u, 0x0003003eu, 0x0000055au, 0x00000559u, 0x000300f7u, 0x0000055cu, 0x00000000u, 0x000400fau, 0x000004a3u, 0x0000055bu, 0x0000055cu, 0x000200f8u, 0x0000055bu, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x0000055du, 0x00000063u, 0x00050080u, 0x00000006u, 0x0000055fu, 0x0000055du, 0x0000055eu, 0x00060041u, 0x000000e6u, 0x00000561u, 0x000003e9u, 0x0000009cu, 0x0000055fu, 0x0003003eu, 0x00000561u, 0x00000560u, 0x000200f9u, 0x0000055cu, 0x000200f8u, 0x0000055cu, 0x000200f9u, 0x00000488u, 0x000200f8u, 0x00000488u, 0x000200f9u, 0x00000482u, 0x000200f8u, 0x00000482u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000069u, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000067u, 0x00030037u, 0x00000007u, 0x00000068u, 0x000200f8u, 0x0000006au, 0x000300f7u, 0x00000567u, 0x00000000u, 0x000400fau, 0x00000565u, 0x00000566u, 0x00000567u, 0x000200f8u, 0x00000566u, 0x0004003du, 0x0000002cu, 0x00000569u, 0x00000568u, 0x000300f7u, 0x0000056bu, 0x00000000u, 0x000400fau, 0x00000569u, 0x0000056au, 0x0000056bu, 0x000200f8u, 0x0000056au, 0x0004003du, 0x00000006u, 0x0000056cu, 0x00000067u, 0x000500c7u, 0x00000006u, 0x0000056du, 0x0000056cu, 0x00000391u, 0x0003003eu, 0x00000067u, 0x0000056du, 0x0004003du, 0x00000006u, 0x0000056eu, 0x00000068u, 0x00050084u, 0x00000006u, 0x00000570u, 0x0000056eu, 0x0000056fu, 0x0004003du, 0x00000006u, 0x00000571u, 0x00000067u, 0x00050080u, 0x00000006u, 0x00000572u, 0x00000571u, 0x00000570u, 0x0003003eu, 0x00000067u, 0x00000572u, 0x0004003du, 0x00000006u, 0x00000573u, 0x00000067u, 0x000500c6u, 0x00000006u, 0x00000574u, 0x00000573u, 0x000001dau, 0x0004003du, 0x00000008u, 0x00000575u, 0x00000419u, 0x000500c4u, 0x00000008u, 0x00000576u, 0x00000575u, 0x000000b5u, 0x0004003du, 0x00000008u, 0x00000577u, 0x000003fbu, 0x000500c3u, 0x00000008u, 0x00000578u, 0x00000577u, 0x000000b5u, 0x000500c5u, 0x00000008u, 0x00000579u, 0x00000576u, 0x00000578u, 0x00040071u, 0x0000009fu, 0x0000057au, 0x00000579u, 0x00060041u, 0x000000ebu, 0x0000057bu, 0x0000039du, 0x0000009cu, 0x00000574u, 0x0003003eu, 0x0000057bu, 0x0000057au, 0x0004003du, 0x00000006u, 0x0000057cu, 0x00000067u, 0x0004003du, 0x00000008u, 0x0000057du, 0x000003fbu, 0x000500c7u, 0x00000008u, 0x0000057eu, 0x0000057du, 0x000000bbu, 0x00040071u, 0x0000009du, 0x0000057fu, 0x0000057eu, 0x00060041u, 0x000000f2u, 0x00000580u, 0x00000388u, 0x0000009cu, 0x0000057cu, 0x0003003eu, 0x00000580u, 0x0000057fu, 0x000300f7u, 0x00000582u, 0x00000000u, 0x000400fau, 0x000004a3u, 0x00000581u, 0x00000582u, 0x000200f8u, 0x00000581u, 0x000300e1u, 0x000001dau, 0x000004a6u, 0x0004003du, 0x00000006u, 0x00000583u, 0x00000067u, 0x000500c6u, 0x00000006u, 0x00000584u, 0x00000583u, 0x000001dau, 0x00050080u, 0x00000006u, 0x00000586u, 0x00000584u, 0x00000585u, 0x00040071u, 0x0000009fu, 0x00000587u, 0x00000502u, 0x00060041u, 0x000000ebu, 0x00000588u, 0x0000039du, 0x0000009cu, 0x00000586u, 0x0003003eu, 0x00000588u, 0x00000587u, 0x000200f9u, 0x00000582u, 0x000200f8u, 0x00000582u, 0x000200f9u, 0x0000056bu, 0x000200f8u, 0x0000056bu, 0x000200f9u, 0x00000567u, 0x000200f8u, 0x00000567u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000073u, 0x00000000u, 0x0000006du, 0x00030037u, 0x0000006cu, 0x0000006eu, 0x00030037u, 0x00000007u, 0x0000006fu, 0x00030037u, 0x00000007u, 0x00000070u, 0x00030037u, 0x00000007u, 0x00000071u, 0x00030037u, 0x00000007u, 0x00000072u, 0x000200f8u, 0x00000074u, 0x0004003bu, 0x0000006cu, 0x00000592u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000059cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005c3u, 0x00000007u, 0x0003003eu, 0x00000466u, 0x00000298u, 0x0003003eu, 0x00000568u, 0x00000298u, 0x0004003du, 0x0000006bu, 0x00000589u, 0x0000006eu, 0x0004003du, 0x00000006u, 0x0000058au, 0x0000006fu, 0x0004003du, 0x00000006u, 0x0000058bu, 0x00000070u, 0x00050050u, 0x0000006bu, 0x0000058cu, 0x0000058au, 0x0000058bu, 0x000500b0u, 0x0000058du, 0x0000058eu, 0x00000589u, 0x0000058cu, 0x0004009bu, 0x0000002cu, 0x0000058fu, 0x0000058eu, 0x000300f7u, 0x00000591u, 0x00000000u, 0x000400fau, 0x0000058fu, 0x00000590u, 0x00000591u, 0x000200f8u, 0x00000590u, 0x0004003du, 0x0000006bu, 0x00000593u, 0x0000006eu, 0x00050050u, 0x0000006bu, 0x00000597u, 0x00000596u, 0x00000596u, 0x000500c7u, 0x0000006bu, 0x00000598u, 0x00000593u, 0x00000597u, 0x0003003eu, 0x00000592u, 0x00000598u, 0x0004003du, 0x0000006bu, 0x00000599u, 0x0000006eu, 0x00050050u, 0x0000002eu, 0x0000059au, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x0000059bu, 0x00000599u, 0x0000059au, 0x0003003eu, 0x0000006eu, 0x0000059bu, 0x00050041u, 0x00000007u, 0x0000059du, 0x00000592u, 0x000001dau, 0x0004003du, 0x00000006u, 0x0000059eu, 0x0000059du, 0x00050084u, 0x00000006u, 0x000005a0u, 0x0000059eu, 0x0000059fu, 0x00050041u, 0x00000007u, 0x000005a1u, 0x00000592u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005a2u, 0x000005a1u, 0x00050080u, 0x00000006u, 0x000005a3u, 0x000005a0u, 0x000005a2u, 0x0003003eu, 0x0000059cu, 0x000005a3u, 0x0004003du, 0x00000006u, 0x000005a5u, 0x00000071u, 0x0004003du, 0x00000006u, 0x000005a6u, 0x0000006fu, 0x000500c2u, 0x00000006u, 0x000005a7u, 0x000005a6u, 0x000004a1u, 0x00050041u, 0x00000007u, 0x000005a8u, 0x0000006eu, 0x000001dau, 0x0004003du, 0x00000006u, 0x000005a9u, 0x000005a8u, 0x00050084u, 0x00000006u, 0x000005aau, 0x000005a7u, 0x000005a9u, 0x00050080u, 0x00000006u, 0x000005abu, 0x000005a5u, 0x000005aau, 0x00050041u, 0x00000007u, 0x000005acu, 0x0000006eu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005adu, 0x000005acu, 0x00050080u, 0x00000006u, 0x000005aeu, 0x000005abu, 0x000005adu, 0x0003003eu, 0x000005a4u, 0x000005aeu, 0x0003003eu, 0x000005b0u, 0x000005aeu, 0x0003003eu, 0x000005b2u, 0x000005aeu, 0x0003003eu, 0x000005b4u, 0x000005a3u, 0x00060039u, 0x00000002u, 0x000005b6u, 0x00000059u, 0x000005b2u, 0x000005b4u, 0x0004003du, 0x00000006u, 0x000005b7u, 0x00000072u, 0x0004003du, 0x00000006u, 0x000005b8u, 0x0000006fu, 0x000500c2u, 0x00000006u, 0x000005b9u, 0x000005b8u, 0x000004a1u, 0x0004003du, 0x00000006u, 0x000005bbu, 0x000005a8u, 0x00050084u, 0x00000006u, 0x000005bcu, 0x000005b9u, 0x000005bbu, 0x00050080u, 0x00000006u, 0x000005bdu, 0x000005b7u, 0x000005bcu, 0x0004003du, 0x00000006u, 0x000005bfu, 0x000005acu, 0x00050080u, 0x00000006u, 0x000005c0u, 0x000005bdu, 0x000005bfu, 0x0003003eu, 0x000005a4u, 0x000005c0u, 0x0003003eu, 0x000005c1u, 0x000005c0u, 0x0003003eu, 0x000005c3u, 0x000005a3u, 0x00060039u, 0x00000002u, 0x000005c5u, 0x00000061u, 0x000005c1u, 0x000005c3u, 0x000200f9u, 0x00000591u, 0x000200f8u, 0x00000591u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000078u, 0x00000000u, 0x00000075u, 0x00030037u, 0x0000006cu, 0x00000076u, 0x00030037u, 0x00000007u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003bu, 0x00000007u, 0x000005c6u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x000005d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005d6u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000005e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005f1u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000005c7u, 0x00000076u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000005c8u, 0x000005c7u, 0x000500c2u, 0x00000006u, 0x000005c9u, 0x000005c8u, 0x00000193u, 0x0004003du, 0x00000006u, 0x000005cau, 0x00000077u, 0x00050080u, 0x00000006u, 0x000005cbu, 0x000005cau, 0x000001e0u, 0x000500c2u, 0x00000006u, 0x000005ccu, 0x000005cbu, 0x00000193u, 0x00050084u, 0x00000006u, 0x000005cdu, 0x000005c9u, 0x000005ccu, 0x00050041u, 0x00000007u, 0x000005ceu, 0x00000076u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005cfu, 0x000005ceu, 0x000500c2u, 0x00000006u, 0x000005d0u, 0x000005cfu, 0x00000193u, 0x00050080u, 0x00000006u, 0x000005d1u, 0x000005cdu, 0x000005d0u, 0x0003003eu, 0x000005c6u, 0x000005d1u, 0x0004003du, 0x0000006bu, 0x000005d3u, 0x00000076u, 0x000500c7u, 0x0000006bu, 0x000005d5u, 0x000005d3u, 0x00001958u, 0x0003003eu, 0x000005d2u, 0x000005d5u, 0x0004003du, 0x0000002cu, 0x000005d7u, 0x00000466u, 0x000600a9u, 0x00000006u, 0x000005d8u, 0x000005d7u, 0x000001dau, 0x000001b8u, 0x0004003du, 0x0000002cu, 0x000005d9u, 0x00000568u, 0x000600a9u, 0x00000006u, 0x000005dau, 0x000005d9u, 0x000001dau, 0x000001b8u, 0x00050084u, 0x00000006u, 0x000005dbu, 0x00000193u, 0x000005dau, 0x00050080u, 0x00000006u, 0x000005dcu, 0x000005d8u, 0x000005dbu, 0x0003003eu, 0x000005d6u, 0x000005dcu, 0x00050041u, 0x00000007u, 0x000005ddu, 0x000005d2u, 0x000001b8u, 0x0004003du, 0x00000006u, 0x000005deu, 0x000005ddu, 0x00050041u, 0x00000007u, 0x000005dfu, 0x000005d2u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000005e0u, 0x000005dfu, 0x00050084u, 0x00000006u, 0x000005e1u, 0x000005e0u, 0x00000415u, 0x00050080u, 0x00000006u, 0x000005e2u, 0x000005deu, 0x000005e1u, 0x00050084u, 0x00000006u, 0x000005e3u, 0x00000193u, 0x000005e2u, 0x000500c4u, 0x00000006u, 0x000005e5u, 0x000005dcu, 0x000005e3u, 0x0003003eu, 0x000005d6u, 0x000005e5u, 0x0003003eu, 0x000005e6u, 0x000002b3u, 0x000200f9u, 0x000005e7u, 0x000200f8u, 0x000005e7u, 0x000700f5u, 0x0000002cu, 0x0000191eu, 0x000002b3u, 0x00000079u, 0x00001966u, 0x000005eau, 0x000400f6u, 0x000005e9u, 0x000005eau, 0x00000000u, 0x000200f9u, 0x000005e8u, 0x000200f8u, 0x000005e8u, 0x00050152u, 0x00000006u, 0x000005ecu, 0x000001e0u, 0x000005d1u, 0x000500aau, 0x0000002cu, 0x000005eeu, 0x000005ecu, 0x000005d1u, 0x000300f7u, 0x000005f0u, 0x00000000u, 0x000400fau, 0x000005eeu, 0x000005efu, 0x000005f0u, 0x000200f8u, 0x000005efu, 0x00060168u, 0x00000006u, 0x000005f3u, 0x000001e0u, 0x00000000u, 0x000005e5u, 0x0003003eu, 0x000005f1u, 0x000005f3u, 0x0004014du, 0x0000002cu, 0x000005f4u, 0x000001e0u, 0x000300f7u, 0x000005f6u, 0x00000000u, 0x000400fau, 0x000005f4u, 0x000005f5u, 0x000005f6u, 0x000200f8u, 0x000005f5u, 0x00050080u, 0x00000006u, 0x000005fcu, 0x000005fau, 0x000005d1u, 0x00060041u, 0x000000e6u, 0x000005fdu, 0x000003e9u, 0x0000009cu, 0x000005fcu, 0x000700f1u, 0x00000006u, 0x000005ffu, 0x000005fdu, 0x000001dau, 0x000001b8u, 0x000005f3u, 0x000200f9u, 0x000005f6u, 0x000200f8u, 0x000005f6u, 0x0003003eu, 0x000005e6u, 0x00000298u, 0x000200f9u, 0x000005f0u, 0x000200f8u, 0x000005f0u, 0x000600a9u, 0x0000002cu, 0x00001966u, 0x000005eeu, 0x00000298u, 0x0000191eu, 0x000200f9u, 0x000005eau, 0x000200f8u, 0x000005eau, 0x000400fau, 0x00001966u, 0x000005e7u, 0x000005e9u, 0x000200f8u, 0x000005e9u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000007fu, 0x00000000u, 0x0000006du, 0x00030037u, 0x0000006cu, 0x0000007au, 0x00030037u, 0x00000007u, 0x0000007bu, 0x00030037u, 0x00000007u, 0x0000007cu, 0x00030037u, 0x00000007u, 0x0000007du, 0x00030037u, 0x00000007u, 0x0000007eu, 0x000200f8u, 0x00000080u, 0x0004003bu, 0x00000007u, 0x00000609u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000060cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000615u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000061du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000627u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000629u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000635u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000637u, 0x00000007u, 0x0004003bu, 0x0000006cu, 0x0000063eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000640u, 0x00000007u, 0x0004003du, 0x0000006bu, 0x00000601u, 0x0000007au, 0x0004003du, 0x00000006u, 0x00000602u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x00000603u, 0x0000007cu, 0x00050050u, 0x0000006bu, 0x00000604u, 0x00000602u, 0x00000603u, 0x000500b0u, 0x0000058du, 0x00000605u, 0x00000601u, 0x00000604u, 0x0004009bu, 0x0000002cu, 0x00000606u, 0x00000605u, 0x000300f7u, 0x00000608u, 0x00000000u, 0x000400fau, 0x00000606u, 0x00000607u, 0x00000608u, 0x000200f8u, 0x00000607u, 0x0004003du, 0x00000006u, 0x0000060au, 0x0000007bu, 0x000500c2u, 0x00000006u, 0x0000060bu, 0x0000060au, 0x000004a1u, 0x0003003eu, 0x00000609u, 0x0000060bu, 0x0004003du, 0x0000006bu, 0x0000060du, 0x0000007au, 0x00050050u, 0x0000006bu, 0x00000610u, 0x0000060fu, 0x0000060fu, 0x000500c7u, 0x0000006bu, 0x00000611u, 0x0000060du, 0x00000610u, 0x0003003eu, 0x0000060cu, 0x00000611u, 0x0004003du, 0x0000006bu, 0x00000612u, 0x0000007au, 0x00050050u, 0x0000002eu, 0x00000613u, 0x000004a1u, 0x000004a1u, 0x000500c2u, 0x0000006bu, 0x00000614u, 0x00000612u, 0x00000613u, 0x0003003eu, 0x0000007au, 0x00000614u, 0x00050041u, 0x00000007u, 0x00000616u, 0x0000060cu, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000617u, 0x00000616u, 0x00050084u, 0x00000006u, 0x00000619u, 0x00000617u, 0x00000618u, 0x00050041u, 0x00000007u, 0x0000061au, 0x0000060cu, 0x000001b8u, 0x0004003du, 0x00000006u, 0x0000061bu, 0x0000061au, 0x00050080u, 0x00000006u, 0x0000061cu, 0x00000619u, 0x0000061bu, 0x0003003eu, 0x00000615u, 0x0000061cu, 0x0004003du, 0x00000006u, 0x0000061eu, 0x0000007du, 0x00050041u, 0x00000007u, 0x00000620u, 0x0000007au, 0x000001dau, 0x0004003du, 0x00000006u, 0x00000621u, 0x00000620u, 0x00050084u, 0x00000006u, 0x00000622u, 0x0000060bu, 0x00000621u, 0x00050080u, 0x00000006u, 0x00000623u, 0x0000061eu, 0x00000622u, 0x00050041u, 0x00000007u, 0x00000624u, 0x0000007au, 0x000001b8u, 0x0004003du, 0x00000006u, 0x00000625u, 0x00000624u, 0x00050080u, 0x00000006u, 0x00000626u, 0x00000623u, 0x00000625u, 0x0003003eu, 0x0000061du, 0x00000626u, 0x0003003eu, 0x00000627u, 0x00000626u, 0x0003003eu, 0x00000629u, 0x0000061cu, 0x00060039u, 0x00000002u, 0x0000062bu, 0x00000065u, 0x00000627u, 0x00000629u, 0x0004003du, 0x00000006u, 0x0000062cu, 0x0000007eu, 0x0004003du, 0x00000006u, 0x0000062fu, 0x00000620u, 0x00050084u, 0x00000006u, 0x00000630u, 0x0000060bu, 0x0000062fu, 0x00050080u, 0x00000006u, 0x00000631u, 0x0000062cu, 0x00000630u, 0x0004003du, 0x00000006u, 0x00000633u, 0x00000624u, 0x00050080u, 0x00000006u, 0x00000634u, 0x00000631u, 0x00000633u, 0x0003003eu, 0x0000061du, 0x00000634u, 0x0003003eu, 0x00000635u, 0x00000634u, 0x0003003eu, 0x00000637u, 0x0000061cu, 0x00060039u, 0x00000002u, 0x00000639u, 0x00000069u, 0x00000635u, 0x00000637u, 0x000300f7u, 0x0000063du, 0x00000000u, 0x000400fau, 0x0000063bu, 0x0000063cu, 0x0000063du, 0x000200f8u, 0x0000063cu, 0x0004003du, 0x0000006bu, 0x0000063fu, 0x0000007au, 0x0003003eu, 0x0000063eu, 0x0000063fu, 0x0003003eu, 0x00000640u, 0x0000060bu, 0x00060039u, 0x00000002u, 0x00000642u, 0x00000078u, 0x0000063eu, 0x00000640u, 0x000200f9u, 0x0000063du, 0x000200f8u, 0x0000063du, 0x000200f9u, 0x00000608u, 0x000200f8u, 0x00000608u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000083u, 0x00000000u, 0x00000081u, 0x00030037u, 0x0000002du, 0x00000082u, 0x000200f8u, 0x00000084u, 0x0004003bu, 0x00000016u, 0x00000643u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000645u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x00000654u, 0x00000007u, 0x0004003du, 0x0000002cu, 0x00000644u, 0x00000082u, 0x000300f7u, 0x00000647u, 0x00000000u, 0x000400fau, 0x00000644u, 0x00000646u, 0x0000064cu, 0x000200f8u, 0x00000646u, 0x00050041u, 0x0000009au, 0x00000648u, 0x00000381u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000649u, 0x00000648u, 0x000500c7u, 0x00000008u, 0x0000064bu, 0x00000649u, 0x0000064au, 0x0003003eu, 0x00000645u, 0x0000064bu, 0x000200f9u, 0x00000647u, 0x000200f8u, 0x0000064cu, 0x0003003eu, 0x00000645u, 0x0000064au, 0x000200f9u, 0x00000647u, 0x000200f8u, 0x00000647u, 0x000700f5u, 0x00000008u, 0x00001923u, 0x0000064bu, 0x00000646u, 0x0000064au, 0x0000064cu, 0x0003003eu, 0x00000643u, 0x00001923u, 0x000300f7u, 0x00000653u, 0x00000000u, 0x000d00fbu, 0x00000367u, 0x00000653u, 0x00000000u, 0x0000064eu, 0x00000001u, 0x0000064fu, 0x00000002u, 0x00000650u, 0x00000003u, 0x00000651u, 0x00000004u, 0x00000652u, 0x000200f8u, 0x0000064eu, 0x0003003eu, 0x00000654u, 0x00000655u, 0x0003003eu, 0x00000643u, 0x0000064au, 0x000200f9u, 0x00000653u, 0x000200f8u, 0x0000064fu, 0x0004003du, 0x00000009u, 0x00000657u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000658u, 0x00000657u, 0x00000657u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000654u, 0x00000658u, 0x0003003eu, 0x00000643u, 0x0000064au, 0x000200f9u, 0x00000653u, 0x000200f8u, 0x00000650u, 0x0004003du, 0x00000009u, 0x0000065au, 0x00000381u, 0x0008004fu, 0x00000014u, 0x0000065bu, 0x0000065au, 0x0000065au, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x00000014u, 0x0000065du, 0x0000065bu, 0x00001959u, 0x0003003eu, 0x00000654u, 0x0000065du, 0x000200f9u, 0x00000653u, 0x000200f8u, 0x00000651u, 0x0004003du, 0x00000009u, 0x0000065fu, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000660u, 0x0000065fu, 0x0000065fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000654u, 0x00000660u, 0x000200f9u, 0x00000653u, 0x000200f8u, 0x00000652u, 0x0004003du, 0x00000009u, 0x00000662u, 0x00000381u, 0x0008004fu, 0x00000014u, 0x00000663u, 0x00000662u, 0x00000662u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000654u, 0x00000663u, 0x000200f9u, 0x00000653u, 0x000200f8u, 0x00000653u, 0x000f00f5u, 0x00000008u, 0x00001927u, 0x00001923u, 0x00000647u, 0x0000064au, 0x0000064eu, 0x0000064au, 0x0000064fu, 0x00001923u, 0x00000650u, 0x00001923u, 0x00000651u, 0x00001923u, 0x00000652u, 0x000f00f5u, 0x00000014u, 0x00001924u, 0x00001926u, 0x00000647u, 0x00000655u, 0x0000064eu, 0x00000658u, 0x0000064fu, 0x0000065du, 0x00000650u, 0x00000660u, 0x00000651u, 0x00000663u, 0x00000652u, 0x00050051u, 0x00000008u, 0x00000668u, 0x00001924u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000669u, 0x00001924u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000066au, 0x00001924u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000066bu, 0x00000668u, 0x00000669u, 0x0000066au, 0x00001927u, 0x000200feu, 0x0000066bu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000087u, 0x00000000u, 0x00000085u, 0x00030037u, 0x0000002bu, 0x00000086u, 0x000200f8u, 0x00000088u, 0x000300f7u, 0x00000670u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x0000066fu, 0x00000675u, 0x000200f8u, 0x0000066fu, 0x0004003du, 0x00000009u, 0x00000671u, 0x00000086u, 0x0008004fu, 0x00000014u, 0x00000672u, 0x00000671u, 0x00000671u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000673u, 0x00000381u, 0x0009004fu, 0x00000009u, 0x00000674u, 0x00000673u, 0x00000671u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00000381u, 0x00000674u, 0x000200f9u, 0x00000670u, 0x000200f8u, 0x00000675u, 0x0004003du, 0x00000009u, 0x00000676u, 0x00000086u, 0x0003003eu, 0x00000381u, 0x00000676u, 0x000200f9u, 0x00000670u, 0x000200f8u, 0x00000670u, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000008bu, 0x00000000u, 0x00000056u, 0x00030037u, 0x00000007u, 0x00000089u, 0x00030037u, 0x00000007u, 0x0000008au, 0x000200f8u, 0x0000008cu, 0x0004003bu, 0x0000002bu, 0x00000682u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000685u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000691u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000069fu, 0x00000007u, 0x000300f7u, 0x0000067au, 0x00000000u, 0x000900fbu, 0x00000367u, 0x0000067au, 0x00000000u, 0x00000677u, 0x00000001u, 0x00000678u, 0x00000002u, 0x00000679u, 0x000200f8u, 0x00000677u, 0x0003003eu, 0x00000381u, 0x0000067bu, 0x0003003eu, 0x00000466u, 0x000002b3u, 0x000200f9u, 0x0000067au, 0x000200f8u, 0x00000678u, 0x0004003du, 0x00000006u, 0x0000067du, 0x00000089u, 0x000500c7u, 0x00000006u, 0x0000067eu, 0x0000067du, 0x000003d5u, 0x0003003eu, 0x00000089u, 0x0000067eu, 0x0004003du, 0x00000006u, 0x0000067fu, 0x00000089u, 0x0004007cu, 0x00000008u, 0x00000680u, 0x0000067fu, 0x00070050u, 0x00000009u, 0x00000681u, 0x00000680u, 0x00000680u, 0x00000680u, 0x00000680u, 0x0003003eu, 0x00000682u, 0x00000681u, 0x00050039u, 0x00000002u, 0x00000683u, 0x00000087u, 0x00000682u, 0x000200f9u, 0x0000067au, 0x000200f8u, 0x00000679u, 0x0004003du, 0x00000006u, 0x00000686u, 0x00000089u, 0x000500c2u, 0x00000006u, 0x00000687u, 0x00000686u, 0x000000d9u, 0x000500c7u, 0x00000006u, 0x00000688u, 0x00000687u, 0x000003aeu, 0x0003003eu, 0x00000685u, 0x00000688u, 0x0004003du, 0x00000006u, 0x0000068au, 0x00000089u, 0x000500c2u, 0x00000006u, 0x0000068bu, 0x0000068au, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x0000068cu, 0x0000068bu, 0x000003aeu, 0x0003003eu, 0x00000689u, 0x0000068cu, 0x0004003du, 0x00000006u, 0x0000068eu, 0x00000089u, 0x000500c4u, 0x00000006u, 0x0000068fu, 0x0000068eu, 0x000000b5u, 0x000500c7u, 0x00000006u, 0x00000690u, 0x0000068fu, 0x000003aeu, 0x0003003eu, 0x0000068du, 0x00000690u, 0x0004003du, 0x00000006u, 0x00000692u, 0x00000089u, 0x000500c7u, 0x00000006u, 0x00000693u, 0x00000692u, 0x000001dau, 0x00050084u, 0x00000006u, 0x00000695u, 0x00000693u, 0x00000694u, 0x0003003eu, 0x00000691u, 0x00000695u, 0x0004007cu, 0x00000008u, 0x00000697u, 0x00000688u, 0x0004007cu, 0x00000008u, 0x00000699u, 0x0000068cu, 0x0004007cu, 0x00000008u, 0x0000069bu, 0x00000690u, 0x0004007cu, 0x00000008u, 0x0000069du, 0x00000695u, 0x00070050u, 0x00000009u, 0x0000069eu, 0x00000697u, 0x00000699u, 0x0000069bu, 0x0000069du, 0x0003003eu, 0x0000069fu, 0x0000069eu, 0x00050039u, 0x00000002u, 0x000006a0u, 0x00000087u, 0x0000069fu, 0x000200f9u, 0x0000067au, 0x000200f8u, 0x0000067au, 0x000300f7u, 0x000006a4u, 0x00000000u, 0x000400fau, 0x00000564u, 0x000006a3u, 0x000006a4u, 0x000200f8u, 0x000006a3u, 0x00040039u, 0x00000002u, 0x000006a5u, 0x0000005bu, 0x000200f9u, 0x000006a4u, 0x000200f8u, 0x000006a4u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000008fu, 0x00000000u, 0x0000008du, 0x00030037u, 0x00000007u, 0x0000008eu, 0x000200f8u, 0x00000090u, 0x0004003bu, 0x00000007u, 0x000006abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000006c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006f5u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000702u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000710u, 0x00000007u, 0x000300f7u, 0x000006aau, 0x00000000u, 0x000b00fbu, 0x00000367u, 0x000006aau, 0x00000004u, 0x000006a6u, 0x00000002u, 0x000006a7u, 0x00000003u, 0x000006a8u, 0x00000001u, 0x000006a9u, 0x000200f8u, 0x000006a6u, 0x0004003du, 0x00000006u, 0x000006acu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006adu, 0x000006acu, 0x000003efu, 0x000500c7u, 0x00000006u, 0x000006aeu, 0x000006adu, 0x000003d5u, 0x0003003eu, 0x000006abu, 0x000006aeu, 0x0004003du, 0x00000006u, 0x000006b0u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006b1u, 0x000006b0u, 0x000003f0u, 0x000500c7u, 0x00000006u, 0x000006b2u, 0x000006b1u, 0x000003d5u, 0x0003003eu, 0x000006afu, 0x000006b2u, 0x0004003du, 0x00000006u, 0x000006b4u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006b5u, 0x000006b4u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x000006b6u, 0x000006b5u, 0x000003d5u, 0x0003003eu, 0x000006b3u, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006b8u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006b9u, 0x000006b8u, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x000006bau, 0x000006b9u, 0x000003d5u, 0x0003003eu, 0x000006b7u, 0x000006bau, 0x0004007cu, 0x00000008u, 0x000006bcu, 0x000006aeu, 0x0004007cu, 0x00000008u, 0x000006beu, 0x000006b2u, 0x0004007cu, 0x00000008u, 0x000006c0u, 0x000006b6u, 0x0004007cu, 0x00000008u, 0x000006c2u, 0x000006bau, 0x00070050u, 0x00000009u, 0x000006c3u, 0x000006bcu, 0x000006beu, 0x000006c0u, 0x000006c2u, 0x0003003eu, 0x000006c4u, 0x000006c3u, 0x00050039u, 0x00000002u, 0x000006c5u, 0x00000087u, 0x000006c4u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006a7u, 0x0004003du, 0x00000006u, 0x000006c7u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x000006c8u, 0x000006c7u, 0x000001dau, 0x000500c6u, 0x00000006u, 0x000006c9u, 0x000006c8u, 0x000001dau, 0x00050084u, 0x00000006u, 0x000006cau, 0x000006c9u, 0x000003f0u, 0x0004003du, 0x00000006u, 0x000006cbu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006ccu, 0x000006cbu, 0x000006cau, 0x0003003eu, 0x0000008eu, 0x000006ccu, 0x0004003du, 0x00000006u, 0x000006ceu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006cfu, 0x000006ceu, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x000006d0u, 0x000006cfu, 0x000003aeu, 0x0003003eu, 0x000006cdu, 0x000006d0u, 0x0004003du, 0x00000006u, 0x000006d2u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006d3u, 0x000006d2u, 0x000001e0u, 0x000500c7u, 0x00000006u, 0x000006d4u, 0x000006d3u, 0x000003aeu, 0x0003003eu, 0x000006d1u, 0x000006d4u, 0x0004003du, 0x00000006u, 0x000006d6u, 0x0000008eu, 0x000500c4u, 0x00000006u, 0x000006d7u, 0x000006d6u, 0x00000193u, 0x000500c7u, 0x00000006u, 0x000006d8u, 0x000006d7u, 0x000003aeu, 0x0003003eu, 0x000006d5u, 0x000006d8u, 0x0004003du, 0x00000006u, 0x000006dau, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006dbu, 0x000006dau, 0x000001dau, 0x00050084u, 0x00000006u, 0x000006dcu, 0x000006dbu, 0x00000694u, 0x0003003eu, 0x000006d9u, 0x000006dcu, 0x0004007cu, 0x00000008u, 0x000006deu, 0x000006d0u, 0x0004007cu, 0x00000008u, 0x000006e0u, 0x000006d4u, 0x0004007cu, 0x00000008u, 0x000006e2u, 0x000006d8u, 0x0004007cu, 0x00000008u, 0x000006e4u, 0x000006dcu, 0x00070050u, 0x00000009u, 0x000006e5u, 0x000006deu, 0x000006e0u, 0x000006e2u, 0x000006e4u, 0x0003003eu, 0x000006e6u, 0x000006e5u, 0x00050039u, 0x00000002u, 0x000006e7u, 0x00000087u, 0x000006e6u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006a8u, 0x0004003du, 0x00000006u, 0x000006e9u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x000006eau, 0x000006e9u, 0x000001dau, 0x000500c6u, 0x00000006u, 0x000006ebu, 0x000006eau, 0x000001dau, 0x00050084u, 0x00000006u, 0x000006ecu, 0x000006ebu, 0x000003f0u, 0x0004003du, 0x00000006u, 0x000006edu, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006eeu, 0x000006edu, 0x000006ecu, 0x0003003eu, 0x0000008eu, 0x000006eeu, 0x0004003du, 0x00000006u, 0x000006efu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x000006f0u, 0x000006efu, 0x00000502u, 0x0003003eu, 0x0000008eu, 0x000006f0u, 0x0004003du, 0x00000006u, 0x000006f2u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006f3u, 0x000006f2u, 0x000003a7u, 0x000500c7u, 0x00000006u, 0x000006f4u, 0x000006f3u, 0x000003d5u, 0x0003003eu, 0x000006f1u, 0x000006f4u, 0x0004003du, 0x00000006u, 0x000006f6u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x000006f7u, 0x000006f6u, 0x000001b8u, 0x000500c7u, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x000003d5u, 0x0003003eu, 0x000006f5u, 0x000006f8u, 0x0004007cu, 0x00000008u, 0x000006fau, 0x000006f4u, 0x0004007cu, 0x00000008u, 0x00000700u, 0x000006f8u, 0x00070050u, 0x00000009u, 0x00000701u, 0x000006fau, 0x000006fau, 0x000006fau, 0x00000700u, 0x0003003eu, 0x00000702u, 0x00000701u, 0x00050039u, 0x00000002u, 0x00000703u, 0x00000087u, 0x00000702u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006a9u, 0x0004003du, 0x00000006u, 0x00000705u, 0x000005b0u, 0x000500c7u, 0x00000006u, 0x00000706u, 0x00000705u, 0x000001e0u, 0x000500c6u, 0x00000006u, 0x00000707u, 0x00000706u, 0x000001e0u, 0x00050084u, 0x00000006u, 0x00000708u, 0x00000707u, 0x000003a7u, 0x0004003du, 0x00000006u, 0x00000709u, 0x0000008eu, 0x000500c2u, 0x00000006u, 0x0000070au, 0x00000709u, 0x00000708u, 0x0003003eu, 0x0000008eu, 0x0000070au, 0x0004003du, 0x00000006u, 0x0000070bu, 0x0000008eu, 0x000500c7u, 0x00000006u, 0x0000070cu, 0x0000070bu, 0x000003d5u, 0x0003003eu, 0x0000008eu, 0x0000070cu, 0x0004003du, 0x00000006u, 0x0000070du, 0x0000008eu, 0x0004007cu, 0x00000008u, 0x0000070eu, 0x0000070du, 0x00070050u, 0x00000009u, 0x0000070fu, 0x0000070eu, 0x0000070eu, 0x0000070eu, 0x0000070eu, 0x0003003eu, 0x00000710u, 0x0000070fu, 0x00050039u, 0x00000002u, 0x00000711u, 0x00000087u, 0x00000710u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006aau, 0x000300f7u, 0x00000715u, 0x00000000u, 0x000400fau, 0x00000564u, 0x00000714u, 0x00000715u, 0x000200f8u, 0x00000714u, 0x00040039u, 0x00000002u, 0x00000716u, 0x0000005bu, 0x000200f9u, 0x00000715u, 0x000200f8u, 0x00000715u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000098u, 0x00000000u, 0x00000093u, 0x00030037u, 0x00000016u, 0x00000094u, 0x00030037u, 0x00000016u, 0x00000095u, 0x00030037u, 0x00000007u, 0x00000096u, 0x00030037u, 0x00000092u, 0x00000097u, 0x000200f8u, 0x00000099u, 0x0004003bu, 0x00000016u, 0x000011ebu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011eau, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011e9u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011e8u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011e7u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011e1u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011dfu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011deu, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011ddu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011d8u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000011d7u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011d6u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000011d5u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000717u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000071bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000720u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x00000723u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000726u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000729u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000736u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000073bu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000073eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000743u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000748u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000074du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000752u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000758u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000075eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000764u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x0000076au, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000076bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000076eu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000772u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000773u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000774u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000775u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000776u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000778u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000077bu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x0000077eu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000780u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000782u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000784u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000786u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x00000788u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000078bu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000078du, 0x00000007u, 0x0004003bu, 0x0000002du, 0x0000078fu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x00000790u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x00000791u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007abu, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000007b1u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007b3u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007b5u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007b7u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007b9u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x000007bdu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007bfu, 0x00000007u, 0x0004003bu, 0x00000015u, 0x000007c6u, 0x00000007u, 0x0004003bu, 0x0000002au, 0x000007c7u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007c9u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007cbu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007cdu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007cfu, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007d1u, 0x00000007u, 0x0004003bu, 0x0000002fu, 0x000007d3u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007d5u, 0x00000007u, 0x0004003bu, 0x00000015u, 0x000007dau, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007dcu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007dfu, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007e0u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007e2u, 0x00000007u, 0x0004003bu, 0x0000002du, 0x000007e4u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007e6u, 0x00000007u, 0x0004003bu, 0x0000002bu, 0x000007f1u, 0x00000007u, 0x0004003bu, 0x00000016u, 0x000007f6u, 0x00000007u, 0x00050041u, 0x00000016u, 0x00000718u, 0x00000097u, 0x000000afu, 0x0004003du, 0x00000008u, 0x00000719u, 0x00000718u, 0x000500c3u, 0x00000008u, 0x0000071au, 0x00000719u, 0x000000dfu, 0x0003003eu, 0x00000717u, 0x0000071au, 0x0004003du, 0x00000008u, 0x0000071du, 0x00000718u, 0x000500c7u, 0x00000008u, 0x0000071fu, 0x0000071du, 0x0000071eu, 0x0003003eu, 0x0000071bu, 0x0000071fu, 0x00050041u, 0x00000016u, 0x00000721u, 0x00000097u, 0x000000b5u, 0x0004003du, 0x00000008u, 0x00000722u, 0x00000721u, 0x0003003eu, 0x00000720u, 0x00000722u, 0x00050041u, 0x0000002bu, 0x00000724u, 0x00000097u, 0x0000009cu, 0x0004003du, 0x00000009u, 0x00000725u, 0x00000724u, 0x0003003eu, 0x00000723u, 0x00000725u, 0x00050041u, 0x00000016u, 0x00000727u, 0x00000097u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x00000728u, 0x00000727u, 0x0003003eu, 0x00000726u, 0x00000728u, 0x0004003du, 0x00000006u, 0x00000730u, 0x00000096u, 0x00080041u, 0x000000f2u, 0x00000731u, 0x0000072fu, 0x0000009cu, 0x00000730u, 0x0000009cu, 0x000001dau, 0x0004003du, 0x0000009du, 0x00000732u, 0x00000731u, 0x00040071u, 0x00000006u, 0x00000733u, 0x00000732u, 0x0003003eu, 0x00000729u, 0x00000733u, 0x0004003du, 0x00000006u, 0x00000737u, 0x00000096u, 0x0003003eu, 0x00000736u, 0x00000737u, 0x00050039u, 0x0000000au, 0x00000738u, 0x0000000du, 0x00000736u, 0x00050051u, 0x00000009u, 0x000011d9u, 0x00000738u, 0x00000008u, 0x0003003eu, 0x000011d5u, 0x000011d9u, 0x00050051u, 0x00000009u, 0x000011dau, 0x00000738u, 0x00000009u, 0x0003003eu, 0x000011d6u, 0x000011dau, 0x00050051u, 0x00000008u, 0x000011dbu, 0x00000738u, 0x0000000bu, 0x0003003eu, 0x000011d7u, 0x000011dbu, 0x00050051u, 0x00000008u, 0x000011dcu, 0x00000738u, 0x0000000cu, 0x0003003eu, 0x000011d8u, 0x000011dcu, 0x0003003eu, 0x0000073bu, 0x00000733u, 0x00050039u, 0x0000000fu, 0x0000073du, 0x00000012u, 0x0000073bu, 0x00050051u, 0x00000009u, 0x000011e2u, 0x0000073du, 0x00000000u, 0x0003003eu, 0x000011ddu, 0x000011e2u, 0x00050051u, 0x00000009u, 0x000011e3u, 0x0000073du, 0x00000001u, 0x0003003eu, 0x000011deu, 0x000011e3u, 0x00050051u, 0x00000006u, 0x000011e4u, 0x0000073du, 0x00000002u, 0x0003003eu, 0x000011dfu, 0x000011e4u, 0x00050051u, 0x00000008u, 0x000011e5u, 0x0000073du, 0x00000003u, 0x0003003eu, 0x000011e0u, 0x000011e5u, 0x00050051u, 0x00000008u, 0x000011e6u, 0x0000073du, 0x00000004u, 0x0003003eu, 0x000011e1u, 0x000011e6u, 0x000500c7u, 0x00000006u, 0x00000741u, 0x000011e4u, 0x000003a7u, 0x000500abu, 0x0000002cu, 0x00000742u, 0x00000741u, 0x000001b8u, 0x0003003eu, 0x0000073eu, 0x00000742u, 0x000500c7u, 0x00000006u, 0x00000746u, 0x000011e4u, 0x000001dau, 0x000500abu, 0x0000002cu, 0x00000747u, 0x00000746u, 0x000001b8u, 0x0003003eu, 0x00000743u, 0x00000747u, 0x000500c7u, 0x00000006u, 0x0000074bu, 0x000011e4u, 0x00000193u, 0x000500abu, 0x0000002cu, 0x0000074cu, 0x0000074bu, 0x000001b8u, 0x0003003eu, 0x00000748u, 0x0000074cu, 0x000500c7u, 0x00000006u, 0x00000750u, 0x000011e4u, 0x000003f0u, 0x000500abu, 0x0000002cu, 0x00000751u, 0x00000750u, 0x000001b8u, 0x0003003eu, 0x0000074du, 0x00000751u, 0x000500c7u, 0x00000006u, 0x00000756u, 0x000011e4u, 0x00000755u, 0x000500abu, 0x0000002cu, 0x00000757u, 0x00000756u, 0x000001b8u, 0x0003003eu, 0x00000752u, 0x00000757u, 0x000500c7u, 0x00000006u, 0x0000075cu, 0x000011e4u, 0x0000075bu, 0x000500abu, 0x0000002cu, 0x0000075du, 0x0000075cu, 0x000001b8u, 0x0003003eu, 0x00000758u, 0x0000075du, 0x000500c7u, 0x00000006u, 0x00000762u, 0x000011e4u, 0x00000761u, 0x000500abu, 0x0000002cu, 0x00000763u, 0x00000762u, 0x000001b8u, 0x0003003eu, 0x0000075eu, 0x00000763u, 0x000500c7u, 0x00000006u, 0x00000768u, 0x000011e4u, 0x00000767u, 0x000500abu, 0x0000002cu, 0x00000769u, 0x00000768u, 0x000001b8u, 0x0003003eu, 0x00000764u, 0x00000769u, 0x0003003eu, 0x0000076bu, 0x00000751u, 0x00050039u, 0x00000009u, 0x0000076du, 0x00000083u, 0x0000076bu, 0x0003003eu, 0x0000076au, 0x0000076du, 0x00050041u, 0x00000016u, 0x0000076fu, 0x0000076au, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000770u, 0x0000076fu, 0x000500c3u, 0x00000008u, 0x00000771u, 0x00000770u, 0x000000c7u, 0x0003003eu, 0x0000076eu, 0x00000771u, 0x0003003eu, 0x00000776u, 0x0000071au, 0x0003003eu, 0x00000778u, 0x000011dbu, 0x0003003eu, 0x0000077bu, 0x000011dcu, 0x0004003du, 0x00000008u, 0x0000077fu, 0x00000419u, 0x0003003eu, 0x0000077eu, 0x0000077fu, 0x0004003du, 0x00000008u, 0x00000781u, 0x000003fbu, 0x0003003eu, 0x00000780u, 0x00000781u, 0x0003003eu, 0x00000782u, 0x00000722u, 0x0003003eu, 0x00000784u, 0x00000771u, 0x0003003eu, 0x00000786u, 0x00000747u, 0x0003003eu, 0x00000788u, 0x000011e6u, 0x0003003eu, 0x0000078bu, 0x00000742u, 0x0003003eu, 0x0000078du, 0x00000763u, 0x00120039u, 0x0000002cu, 0x00000792u, 0x0000004du, 0x00000776u, 0x00000778u, 0x0000077bu, 0x0000077eu, 0x00000780u, 0x00000782u, 0x00000784u, 0x00000786u, 0x00000788u, 0x0000078bu, 0x0000078du, 0x0000078fu, 0x00000790u, 0x00000791u, 0x0004003du, 0x00000008u, 0x00000793u, 0x00000782u, 0x0003003eu, 0x00000720u, 0x00000793u, 0x0004003du, 0x0000002cu, 0x00000794u, 0x0000078fu, 0x0003003eu, 0x00000773u, 0x00000794u, 0x0004003du, 0x0000002cu, 0x00000795u, 0x00000790u, 0x0003003eu, 0x00000774u, 0x00000795u, 0x0004003du, 0x0000002eu, 0x00000796u, 0x00000791u, 0x0003003eu, 0x00000775u, 0x00000796u, 0x0003003eu, 0x00000772u, 0x00000792u, 0x000300f7u, 0x00000799u, 0x00000000u, 0x000400fau, 0x00000792u, 0x00000798u, 0x00000799u, 0x000200f8u, 0x00000798u, 0x000400a8u, 0x0000002cu, 0x0000079bu, 0x00000763u, 0x000500abu, 0x0000002cu, 0x0000079du, 0x00000793u, 0x0000009cu, 0x000500a6u, 0x0000002cu, 0x0000079eu, 0x0000079bu, 0x0000079du, 0x000200f9u, 0x00000799u, 0x000200f8u, 0x00000799u, 0x000700f5u, 0x0000002cu, 0x0000079fu, 0x00000792u, 0x00000099u, 0x0000079eu, 0x00000798u, 0x000300f7u, 0x000007a1u, 0x00000000u, 0x000400fau, 0x0000079fu, 0x000007a0u, 0x000007a1u, 0x000200f8u, 0x000007a0u, 0x0004003du, 0x00000009u, 0x000007a4u, 0x0000076au, 0x00080050u, 0x00000029u, 0x000007aau, 0x00000725u, 0x000007a4u, 0x000011d9u, 0x000011dau, 0x00000728u, 0x0003003eu, 0x000011e7u, 0x00000725u, 0x0003003eu, 0x000011e8u, 0x000007a4u, 0x0003003eu, 0x000011e9u, 0x000011d9u, 0x0003003eu, 0x000011eau, 0x000011dau, 0x0003003eu, 0x000011ebu, 0x00000728u, 0x0003003eu, 0x000007abu, 0x000011e2u, 0x000300f7u, 0x000007b0u, 0x00000000u, 0x000400fau, 0x0000075du, 0x000007afu, 0x000007b0u, 0x000200f8u, 0x000007afu, 0x0003003eu, 0x000007b1u, 0x000007aau, 0x0003003eu, 0x000007b3u, 0x000011e2u, 0x0003003eu, 0x000007b5u, 0x00000742u, 0x0003003eu, 0x000007b7u, 0x00000794u, 0x0003003eu, 0x000007b9u, 0x00000757u, 0x0003003eu, 0x000007bbu, 0x00000795u, 0x0003003eu, 0x000007bdu, 0x00000796u, 0x0003003eu, 0x000007bfu, 0x00000298u, 0x000c0039u, 0x00000014u, 0x000007c0u, 0x00000039u, 0x000007b1u, 0x000007b3u, 0x000007b5u, 0x000007b7u, 0x000007b9u, 0x000007bbu, 0x000007bdu, 0x000007bfu, 0x0009004fu, 0x00000009u, 0x000007c3u, 0x00000725u, 0x000007c0u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000011e7u, 0x000007c3u, 0x0003003eu, 0x000007abu, 0x000011e3u, 0x000200f9u, 0x000007b0u, 0x000200f8u, 0x000007b0u, 0x000700f5u, 0x00000009u, 0x00001938u, 0x00000725u, 0x000007a0u, 0x000007c3u, 0x000007afu, 0x00070050u, 0x00001961u, 0x00001967u, 0x0000075du, 0x0000075du, 0x0000075du, 0x0000075du, 0x000600a9u, 0x00000009u, 0x00001968u, 0x00001967u, 0x000011e3u, 0x000011e2u, 0x00080050u, 0x00000029u, 0x000011fcu, 0x00001938u, 0x000007a4u, 0x000011d9u, 0x000011dau, 0x00000728u, 0x0003003eu, 0x000007c7u, 0x000011fcu, 0x0003003eu, 0x000007c9u, 0x00001968u, 0x0003003eu, 0x000007cbu, 0x00000742u, 0x0003003eu, 0x000007cdu, 0x00000794u, 0x0003003eu, 0x000007cfu, 0x00000757u, 0x0003003eu, 0x000007d1u, 0x00000795u, 0x0003003eu, 0x000007d3u, 0x00000796u, 0x0003003eu, 0x000007d5u, 0x000002b3u, 0x000c0039u, 0x00000014u, 0x000007d6u, 0x00000039u, 0x000007c7u, 0x000007c9u, 0x000007cbu, 0x000007cdu, 0x000007cfu, 0x000007d1u, 0x000007d3u, 0x000007d5u, 0x0003003eu, 0x000007c6u, 0x000007d6u, 0x000300f7u, 0x000007d9u, 0x00000000u, 0x000400fau, 0x00000769u, 0x000007d8u, 0x000007d9u, 0x000200f8u, 0x000007d8u, 0x0003003eu, 0x000007dau, 0x000007d6u, 0x0003003eu, 0x000007dcu, 0x0000071fu, 0x00060039u, 0x00000014u, 0x000007deu, 0x0000001au, 0x000007dau, 0x000007dcu, 0x0003003eu, 0x000007c6u, 0x000007deu, 0x000200f9u, 0x000007d9u, 0x000200f8u, 0x000007d9u, 0x000700f5u, 0x00000014u, 0x0000194du, 0x000007d6u, 0x000007b0u, 0x000007deu, 0x000007d8u, 0x0003003eu, 0x000007e0u, 0x00000793u, 0x0003003eu, 0x000007e2u, 0x00000771u, 0x0003003eu, 0x000007e4u, 0x00000794u, 0x0003003eu, 0x000007e6u, 0x000011e5u, 0x00080039u, 0x00000008u, 0x000007e9u, 0x00000054u, 0x000007e0u, 0x000007e2u, 0x000007e4u, 0x000007e6u, 0x0003003eu, 0x000007dfu, 0x000007e9u, 0x000500c4u, 0x00000008u, 0x000007ecu, 0x000007e9u, 0x000000c7u, 0x00050051u, 0x00000008u, 0x000007edu, 0x0000194du, 0x00000000u, 0x00050051u, 0x00000008u, 0x000007eeu, 0x0000194du, 0x00000001u, 0x00050051u, 0x00000008u, 0x000007efu, 0x0000194du, 0x00000002u, 0x00070050u, 0x00000009u, 0x000007f0u, 0x000007edu, 0x000007eeu, 0x000007efu, 0x000007ecu, 0x0003003eu, 0x000007f1u, 0x000007f0u, 0x00050039u, 0x00000002u, 0x000007f2u, 0x00000087u, 0x000007f1u, 0x000300f7u, 0x000007f5u, 0x00000000u, 0x000400fau, 0x0000074cu, 0x000007f4u, 0x000007feu, 0x000200f8u, 0x000007f4u, 0x0003003eu, 0x000007f6u, 0x0000071au, 0x00050039u, 0x00000008u, 0x000007f8u, 0x00000021u, 0x000007f6u, 0x0003003eu, 0x00000419u, 0x000007f8u, 0x0003003eu, 0x000003fbu, 0x000011dcu, 0x0003003eu, 0x00000568u, 0x000002b3u, 0x000300f7u, 0x000007fcu, 0x00000000u, 0x000400fau, 0x00000564u, 0x000007fbu, 0x000007fcu, 0x000200f8u, 0x000007fbu, 0x00040039u, 0x00000002u, 0x000007fdu, 0x0000005du, 0x000200f9u, 0x000007fcu, 0x000200f8u, 0x000007fcu, 0x000200f9u, 0x000007f5u, 0x000200f8u, 0x000007feu, 0x000300f7u, 0x00000800u, 0x00000000u, 0x000400fau, 0x00000564u, 0x000007ffu, 0x00000800u, 0x000200f8u, 0x000007ffu, 0x00040039u, 0x00000002u, 0x00000801u, 0x0000005bu, 0x000200f9u, 0x00000800u, 0x000200f8u, 0x00000800u, 0x000200f9u, 0x000007f5u, 0x000200f8u, 0x000007f5u, 0x000200f9u, 0x000007a1u, 0x000200f8u, 0x000007a1u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x000019d9u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000815u, 0x00000820u, 0x0000089cu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x000000a6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000a6u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000a6u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000a6u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000a6u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000000a6u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000a6u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000000a6u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000000a6u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000a6u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000000a6u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000000a6u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000000a6u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x000000a6u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x000000a6u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000000a7u, 0x00000006u, 0x00000038u, 0x00040048u, 0x000000a8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000a8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000a8u, 0x00000002u, 0x00040047u, 0x000000aau, 0x00000022u, 0x00000001u, 0x00040047u, 0x000000aau, 0x00000021u, 0x00000002u, 0x00050048u, 0x000000e2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000e2u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000e2u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000e2u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000e2u, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x000000e2u, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x000000e2u, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x000000e3u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000000e4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000e4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000e4u, 0x00000002u, 0x00040047u, 0x000000e6u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000000e6u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000251u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000251u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000372u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000378u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000381u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000382u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000382u, 0x00000002u, 0x00040047u, 0x00000384u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000384u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000038fu, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000390u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000390u, 0x00000002u, 0x00040047u, 0x00000392u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000392u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000003a2u, 0x00000006u, 0x00000002u, 0x00050048u, 0x000003a3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003a3u, 0x00000002u, 0x00040047u, 0x000003a5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003a5u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000003eeu, 0x00000006u, 0x00000004u, 0x00050048u, 0x000003efu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003efu, 0x00000002u, 0x00040047u, 0x000003f1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003f1u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000004a6u, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000570u, 0x00000001u, 0x00000002u, 0x00040047u, 0x0000072du, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000072eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000072eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000072eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x0000072fu, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000730u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000730u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000730u, 0x00000002u, 0x00040047u, 0x00000732u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000732u, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000815u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00000820u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000829u, 0x00000001u, 0x00000006u, 0x00040047u, 0x0000082au, 0x00000001u, 0x00000003u, 0x00040047u, 0x0000082bu, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000082cu, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00000834u, 0x00000001u, 0x00000005u, 0x00040047u, 0x00000839u, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000083au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000083au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000083au, 0x00000002u, 0x00040047u, 0x0000083cu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000083cu, 0x00000021u, 0x0000000cu, 0x00050048u, 0x00000840u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000840u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000840u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000840u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000840u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x00000840u, 0x00000002u, 0x00040047u, 0x0000086du, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000086eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000086eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000086eu, 0x00000002u, 0x00040047u, 0x00000870u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000870u, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000877u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000878u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000878u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000878u, 0x00000002u, 0x00040047u, 0x0000087au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000087au, 0x00000021u, 0x0000000bu, 0x00040047u, 0x0000089cu, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000008a0u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000008a1u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008a1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008a1u, 0x00000002u, 0x00040047u, 0x000008a3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008a3u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000008bfu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008c0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008c0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008c0u, 0x00000002u, 0x00040047u, 0x000008c2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008c2u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008cdu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008ceu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008ceu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008ceu, 0x00000002u, 0x00040047u, 0x000008d0u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008d0u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008dbu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008dcu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008dcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008dcu, 0x00000002u, 0x00040047u, 0x000008deu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008deu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000008e4u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000008e5u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008e5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008e5u, 0x00000002u, 0x00040047u, 0x000008e7u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008e7u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000920u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000921u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000922u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000923u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000923u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000923u, 0x00000002u, 0x00040047u, 0x00000925u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000925u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000927u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000928u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000929u, 0x00000006u, 0x00001000u, 0x00040048u, 0x0000092au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000092au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000092au, 0x00000002u, 0x00040047u, 0x0000092cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000092cu, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000092du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000092du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000092du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000092du, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000092du, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x0000092du, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000092du, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000092du, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000092du, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000092du, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000092du, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000092eu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000092fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000092fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000092fu, 0x00000002u, 0x00040047u, 0x00000931u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000931u, 0x00000021u, 0x00000000u, 0x00050048u, 0x00000933u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000933u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000933u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000933u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000933u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000933u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000933u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000933u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000934u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000935u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000935u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000935u, 0x00000002u, 0x00040047u, 0x00000937u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000937u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000938u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000939u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000939u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000939u, 0x00000002u, 0x00040047u, 0x0000093bu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000093bu, 0x00000021u, 0x00000003u, 0x00050048u, 0x0000093cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000093cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000093cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000093cu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000093cu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000093cu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000093cu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000093cu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000093du, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000093eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000093eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000093eu, 0x00000002u, 0x00040047u, 0x00000940u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000940u, 0x00000021u, 0x00000004u, 0x00050048u, 0x00000941u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000941u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000941u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000941u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000941u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000941u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000941u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000941u, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x00000941u, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x00000941u, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x00000941u, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000941u, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x00000941u, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000941u, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000942u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000943u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000943u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000943u, 0x00000002u, 0x00040047u, 0x00000945u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000945u, 0x00000021u, 0x00000007u, 0x00050048u, 0x00000947u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000947u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000947u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000947u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000947u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000947u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000947u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000947u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000947u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000948u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000949u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000949u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000949u, 0x00000002u, 0x00040047u, 0x0000094bu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000094bu, 0x00000021u, 0x00000008u, 0x00050048u, 0x0000094cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000094cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000094cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000094cu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x0000094du, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000094eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000094eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000094eu, 0x00000002u, 0x00040047u, 0x00000950u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000950u, 0x00000021u, 0x00000009u, 0x00050048u, 0x00000951u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000951u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000951u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000951u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000952u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000952u, 0x00000002u, 0x00040047u, 0x00000954u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000954u, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000008u, 0x00000000u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x00040015u, 0x0000000au, 0x00000010u, 0x00000000u, 0x00040015u, 0x0000000bu, 0x00000010u, 0x00000001u, 0x00040017u, 0x0000000cu, 0x0000000bu, 0x00000004u, 0x0011001eu, 0x0000000du, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x0000000au, 0x00000008u, 0x00000008u, 0x0000000cu, 0x00040021u, 0x0000000eu, 0x0000000du, 0x00000007u, 0x0009001eu, 0x00000012u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000013u, 0x00000012u, 0x00000007u, 0x00040015u, 0x00000017u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000018u, 0x00000017u, 0x00000003u, 0x00040020u, 0x00000019u, 0x00000007u, 0x00000018u, 0x00040020u, 0x0000001au, 0x00000007u, 0x00000017u, 0x00040017u, 0x0000001bu, 0x00000008u, 0x00000003u, 0x00050021u, 0x0000001cu, 0x0000001bu, 0x00000019u, 0x0000001au, 0x00040020u, 0x00000021u, 0x00000007u, 0x0000000au, 0x00040021u, 0x00000022u, 0x00000017u, 0x00000021u, 0x00040021u, 0x00000026u, 0x0000000au, 0x0000001au, 0x00040021u, 0x0000002au, 0x00000017u, 0x0000001au, 0x0007001eu, 0x00000031u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00040020u, 0x00000032u, 0x00000007u, 0x00000031u, 0x00040020u, 0x00000033u, 0x00000007u, 0x00000009u, 0x00020014u, 0x00000034u, 0x00040020u, 0x00000035u, 0x00000007u, 0x00000034u, 0x00040017u, 0x00000036u, 0x00000008u, 0x00000002u, 0x00040020u, 0x00000037u, 0x00000007u, 0x00000036u, 0x000b0021u, 0x00000038u, 0x0000001bu, 0x00000032u, 0x00000033u, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000037u, 0x00000035u, 0x00040020u, 0x00000046u, 0x00000007u, 0x00000008u, 0x00110021u, 0x00000047u, 0x00000034u, 0x0000001au, 0x0000001au, 0x0000001au, 0x00000021u, 0x00000046u, 0x0000001au, 0x0000001au, 0x00000035u, 0x0000001au, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000037u, 0x00070021u, 0x00000058u, 0x00000017u, 0x0000001au, 0x0000001au, 0x00000035u, 0x0000001au, 0x00050021u, 0x0000005fu, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x00000074u, 0x00000006u, 0x00000002u, 0x00040020u, 0x00000075u, 0x00000007u, 0x00000074u, 0x00080021u, 0x00000076u, 0x00000002u, 0x00000075u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000007eu, 0x00000002u, 0x00000075u, 0x00000007u, 0x00040021u, 0x0000008au, 0x00000009u, 0x00000035u, 0x00040021u, 0x0000008eu, 0x00000002u, 0x00000033u, 0x00040021u, 0x00000096u, 0x00000002u, 0x00000007u, 0x0006001eu, 0x0000009au, 0x00000009u, 0x00000017u, 0x00000008u, 0x00000008u, 0x00040020u, 0x0000009bu, 0x00000007u, 0x0000009au, 0x00070021u, 0x0000009cu, 0x00000002u, 0x0000001au, 0x0000001au, 0x00000007u, 0x0000009bu, 0x00040020u, 0x000000a3u, 0x00000006u, 0x0000000au, 0x0004002bu, 0x0000000au, 0x000000a5u, 0x00000000u, 0x0011001eu, 0x000000a6u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x0000000au, 0x00000008u, 0x00000008u, 0x0000000cu, 0x0003001du, 0x000000a7u, 0x000000a6u, 0x0003001eu, 0x000000a8u, 0x000000a7u, 0x00040020u, 0x000000a9u, 0x0000000cu, 0x000000a8u, 0x0004003bu, 0x000000a9u, 0x000000aau, 0x0000000cu, 0x0004002bu, 0x00000017u, 0x000000abu, 0x00000000u, 0x00040020u, 0x000000adu, 0x0000000cu, 0x000000a6u, 0x00040020u, 0x000000b0u, 0x00000007u, 0x0000000du, 0x0004002bu, 0x00000017u, 0x000000b5u, 0x00000001u, 0x0004002bu, 0x00000017u, 0x000000b8u, 0x00000002u, 0x0004002bu, 0x00000017u, 0x000000bbu, 0x00000003u, 0x0004002bu, 0x00000017u, 0x000000beu, 0x00000004u, 0x0004002bu, 0x00000017u, 0x000000c1u, 0x00000005u, 0x0004002bu, 0x00000017u, 0x000000c4u, 0x00000006u, 0x0004002bu, 0x00000017u, 0x000000c7u, 0x00000007u, 0x0004002bu, 0x00000017u, 0x000000cau, 0x00000008u, 0x0004002bu, 0x00000017u, 0x000000cdu, 0x00000009u, 0x0004002bu, 0x00000017u, 0x000000d0u, 0x0000000au, 0x0004002bu, 0x00000017u, 0x000000d3u, 0x0000000bu, 0x0004002bu, 0x00000017u, 0x000000d6u, 0x0000000cu, 0x0004002bu, 0x00000017u, 0x000000d9u, 0x0000000du, 0x0004002bu, 0x00000017u, 0x000000dcu, 0x0000000eu, 0x00040020u, 0x000000ddu, 0x00000007u, 0x0000000cu, 0x0009001eu, 0x000000e2u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x000000e3u, 0x000000e2u, 0x0003001eu, 0x000000e4u, 0x000000e3u, 0x00040020u, 0x000000e5u, 0x0000000cu, 0x000000e4u, 0x0004003bu, 0x000000e5u, 0x000000e6u, 0x0000000cu, 0x00040020u, 0x000000e8u, 0x0000000cu, 0x000000e2u, 0x00040020u, 0x000000ebu, 0x00000007u, 0x00000012u, 0x0006002cu, 0x00000018u, 0x00000101u, 0x000000abu, 0x000000bbu, 0x000000c4u, 0x0004002bu, 0x00000017u, 0x00000107u, 0x000000f8u, 0x0004002bu, 0x00000017u, 0x0000010cu, 0x000000ffu, 0x0006002cu, 0x00000018u, 0x0000010du, 0x0000010cu, 0x0000010cu, 0x0000010cu, 0x0004002bu, 0x00000017u, 0x0000010fu, 0x000000f7u, 0x0006002cu, 0x00000018u, 0x00000110u, 0x0000010fu, 0x0000010fu, 0x0000010fu, 0x00040017u, 0x00000111u, 0x00000034u, 0x00000003u, 0x0004002bu, 0x00000017u, 0x0000011au, 0x0000001fu, 0x00040015u, 0x00000129u, 0x00000008u, 0x00000001u, 0x00040017u, 0x0000012au, 0x00000129u, 0x00000003u, 0x0004002bu, 0x00000017u, 0x00000138u, 0x000007ffu, 0x0004002bu, 0x00000017u, 0x0000013fu, 0x00040000u, 0x0004002bu, 0x00000017u, 0x0000014bu, 0x0003ffffu, 0x0004002bu, 0x00000017u, 0x00000150u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000170u, 0x00000002u, 0x00040020u, 0x0000017au, 0x00000007u, 0x0000001bu, 0x0004002bu, 0x00000006u, 0x00000198u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000001bcu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000001c4u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000001cfu, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x000001eau, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000201u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000211u, 0x0000003cu, 0x00040017u, 0x00000218u, 0x0000000bu, 0x00000003u, 0x00040020u, 0x00000219u, 0x00000007u, 0x00000218u, 0x00040017u, 0x0000021cu, 0x0000000au, 0x00000003u, 0x0004002bu, 0x0000000bu, 0x0000022au, 0x00000001u, 0x0004002bu, 0x0000000bu, 0x00000236u, 0x00000005u, 0x0004002bu, 0x0000000bu, 0x00000247u, 0x00000002u, 0x0004002bu, 0x0000000bu, 0x0000024bu, 0x000007ffu, 0x00090019u, 0x0000024fu, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000250u, 0x00000000u, 0x0000024fu, 0x0004003bu, 0x00000250u, 0x00000251u, 0x00000000u, 0x00040020u, 0x00000255u, 0x00000007u, 0x0000000bu, 0x00040017u, 0x0000025au, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000017u, 0x00000296u, 0x0000000fu, 0x0003002au, 0x00000034u, 0x00000299u, 0x0004002bu, 0x00000017u, 0x000002b1u, 0x00008000u, 0x0004002bu, 0x00000017u, 0x000002b7u, 0x00000010u, 0x00030029u, 0x00000034u, 0x000002bcu, 0x0004002bu, 0x00000017u, 0x000002bdu, 0x0000ffffu, 0x00040032u, 0x00000017u, 0x00000372u, 0x00000000u, 0x00040032u, 0x00000006u, 0x00000378u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000379u, 0x00000082u, 0x00000378u, 0x000001bcu, 0x0003001du, 0x00000381u, 0x00000008u, 0x0003001eu, 0x00000382u, 0x00000381u, 0x00040020u, 0x00000383u, 0x0000000cu, 0x00000382u, 0x0004003bu, 0x00000383u, 0x00000384u, 0x0000000cu, 0x00040020u, 0x00000387u, 0x0000000cu, 0x00000008u, 0x00040020u, 0x0000038au, 0x00000006u, 0x00000009u, 0x0004003bu, 0x0000038au, 0x0000038bu, 0x00000006u, 0x0003001du, 0x0000038fu, 0x00000008u, 0x0003001eu, 0x00000390u, 0x0000038fu, 0x00040020u, 0x00000391u, 0x0000000cu, 0x00000390u, 0x0004003bu, 0x00000391u, 0x00000392u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000399u, 0x000000c2u, 0x00000379u, 0x000001bcu, 0x00060034u, 0x00000006u, 0x0000039du, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x0003001du, 0x000003a2u, 0x0000000au, 0x0003001eu, 0x000003a3u, 0x000003a2u, 0x00040020u, 0x000003a4u, 0x0000000cu, 0x000003a3u, 0x0004003bu, 0x000003a4u, 0x000003a5u, 0x0000000cu, 0x00040020u, 0x000003a8u, 0x0000000cu, 0x0000000au, 0x00040017u, 0x000003acu, 0x00000006u, 0x00000003u, 0x00040020u, 0x000003adu, 0x00000007u, 0x000003acu, 0x0004002bu, 0x00000006u, 0x000003b0u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000003b7u, 0x000000f8u, 0x0004002bu, 0x00000008u, 0x000003bfu, 0x00000005u, 0x00060034u, 0x00000006u, 0x000003ceu, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x0004002bu, 0x00000006u, 0x000003ddu, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000003e5u, 0x000000c2u, 0x00000379u, 0x00000170u, 0x00060034u, 0x00000006u, 0x000003e9u, 0x000000c2u, 0x00000378u, 0x000000b8u, 0x0003001du, 0x000003eeu, 0x00000006u, 0x0003001eu, 0x000003efu, 0x000003eeu, 0x00040020u, 0x000003f0u, 0x0000000cu, 0x000003efu, 0x0004003bu, 0x000003f0u, 0x000003f1u, 0x0000000cu, 0x00040020u, 0x000003f3u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000003f8u, 0x00000018u, 0x0004002bu, 0x00000006u, 0x000003f9u, 0x00000010u, 0x0007002cu, 0x0000025au, 0x000003fau, 0x000003f8u, 0x000003f9u, 0x000003b0u, 0x00000198u, 0x0007002cu, 0x0000025au, 0x000003fcu, 0x000003ddu, 0x000003ddu, 0x000003ddu, 0x000003ddu, 0x00040020u, 0x00000404u, 0x00000006u, 0x00000008u, 0x0004003bu, 0x00000404u, 0x00000405u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000040bu, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000413u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000420u, 0x00000004u, 0x0004003bu, 0x000000a3u, 0x00000424u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000044du, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000453u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x0000045eu, 0x00000007u, 0x00040020u, 0x00000470u, 0x00000006u, 0x00000034u, 0x0004003bu, 0x00000470u, 0x00000471u, 0x00000006u, 0x00060034u, 0x00000006u, 0x00000475u, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x0004002bu, 0x0000000au, 0x0000047fu, 0x00000002u, 0x0004002bu, 0x0000000au, 0x00000485u, 0x00000003u, 0x00040032u, 0x00000017u, 0x000004a6u, 0x00000000u, 0x00060034u, 0x00000017u, 0x000004a7u, 0x000000c7u, 0x000004a6u, 0x000000b5u, 0x00060034u, 0x00000034u, 0x000004a8u, 0x000000abu, 0x000004a7u, 0x000000abu, 0x00060034u, 0x00000017u, 0x000004a9u, 0x000000c3u, 0x000004a6u, 0x000000b5u, 0x00060034u, 0x00000034u, 0x000004aau, 0x000000aau, 0x000004a9u, 0x000000abu, 0x00060034u, 0x00000034u, 0x000004abu, 0x000000a7u, 0x000004a8u, 0x000004aau, 0x0004002bu, 0x00000006u, 0x000004aeu, 0x00000048u, 0x00060034u, 0x00000006u, 0x000004d9u, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x00040020u, 0x000004ddu, 0x00000007u, 0x0000025au, 0x00060034u, 0x00000006u, 0x00000508u, 0x000000c2u, 0x00000378u, 0x000001bcu, 0x0004002bu, 0x0000000au, 0x0000050au, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x00000510u, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x0000052fu, 0x000000c2u, 0x00000378u, 0x000001bcu, 0x00060034u, 0x00000006u, 0x00000536u, 0x000000c2u, 0x00000378u, 0x000000b8u, 0x00060034u, 0x00000006u, 0x0000056au, 0x000000c2u, 0x00000378u, 0x00000170u, 0x0004002bu, 0x00000006u, 0x0000056cu, 0xffffffffu, 0x00030031u, 0x00000034u, 0x00000570u, 0x00050034u, 0x00000034u, 0x00000571u, 0x000000a8u, 0x00000570u, 0x0004003bu, 0x00000470u, 0x00000574u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000057bu, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x00000592u, 0x000000c2u, 0x00000378u, 0x000001bcu, 0x00040017u, 0x00000599u, 0x00000034u, 0x00000002u, 0x00060034u, 0x00000017u, 0x000005a0u, 0x000000c4u, 0x000000b5u, 0x000004a9u, 0x00060034u, 0x00000017u, 0x000005a1u, 0x00000082u, 0x000005a0u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x000005a2u, 0x00000080u, 0x000005a1u, 0x00000198u, 0x00040017u, 0x000005a6u, 0x00000017u, 0x00000002u, 0x00060034u, 0x00000006u, 0x000005acu, 0x00000080u, 0x000005a0u, 0x00000198u, 0x00040020u, 0x000005bcu, 0x00000006u, 0x00000006u, 0x0004003bu, 0x000005bcu, 0x000005bdu, 0x00000006u, 0x00060034u, 0x00000017u, 0x000005f7u, 0x00000084u, 0x000005a0u, 0x000005a0u, 0x00060034u, 0x00000006u, 0x000005f8u, 0x00000080u, 0x000005f7u, 0x00000198u, 0x00060034u, 0x00000006u, 0x000005f9u, 0x000000c2u, 0x00000378u, 0x000000b8u, 0x00060034u, 0x00000006u, 0x000005fau, 0x00000084u, 0x000005f8u, 0x000005f9u, 0x00060034u, 0x00000017u, 0x0000060du, 0x00000082u, 0x000005a0u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x0000060eu, 0x00000080u, 0x0000060du, 0x00000198u, 0x00060034u, 0x00000006u, 0x00000617u, 0x00000080u, 0x000005a0u, 0x00000198u, 0x00060034u, 0x00000034u, 0x00000639u, 0x000000abu, 0x000004a9u, 0x000000abu, 0x00060034u, 0x00000034u, 0x0000063au, 0x000000a7u, 0x000004a8u, 0x00000639u, 0x0004002bu, 0x00000008u, 0x00000649u, 0x000000e0u, 0x0006002cu, 0x0000001bu, 0x00000654u, 0x000001eau, 0x000001eau, 0x000001eau, 0x0004002bu, 0x00000008u, 0x0000065bu, 0x000000f8u, 0x00060034u, 0x00000034u, 0x0000066eu, 0x000000aau, 0x00000372u, 0x000000abu, 0x0007002cu, 0x00000009u, 0x0000067bu, 0x000001eau, 0x000001eau, 0x000001eau, 0x000001eau, 0x0004002bu, 0x00000006u, 0x00000694u, 0x000000e0u, 0x0004002bu, 0x00000006u, 0x000006efu, 0x0000ffffu, 0x0004002bu, 0x00000017u, 0x0000071fu, 0x000001ffu, 0x0004001cu, 0x0000072du, 0x00000008u, 0x000003b0u, 0x0005001eu, 0x0000072eu, 0x00000009u, 0x00000009u, 0x0000072du, 0x0003001du, 0x0000072fu, 0x0000072eu, 0x0003001eu, 0x00000730u, 0x0000072fu, 0x00040020u, 0x00000731u, 0x0000000cu, 0x00000730u, 0x0004003bu, 0x00000731u, 0x00000732u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000756u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x0000075cu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000762u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000768u, 0x00000100u, 0x00040020u, 0x00000814u, 0x00000001u, 0x000003acu, 0x0004003bu, 0x00000814u, 0x00000815u, 0x00000001u, 0x00040020u, 0x00000816u, 0x00000001u, 0x00000006u, 0x00040020u, 0x0000081eu, 0x00000007u, 0x000005a6u, 0x0004003bu, 0x00000814u, 0x00000820u, 0x00000001u, 0x00040032u, 0x00000017u, 0x00000829u, 0x00000400u, 0x00040032u, 0x00000006u, 0x0000082au, 0x00000001u, 0x00040032u, 0x00000006u, 0x0000082bu, 0x00000001u, 0x00060033u, 0x000003acu, 0x0000082cu, 0x0000082au, 0x0000082bu, 0x000001bcu, 0x00060034u, 0x00000006u, 0x0000082du, 0x00000051u, 0x0000082cu, 0x00000000u, 0x00060034u, 0x00000017u, 0x0000082eu, 0x00000080u, 0x0000082du, 0x00000198u, 0x00060034u, 0x00000017u, 0x0000082fu, 0x00000087u, 0x00000829u, 0x0000082eu, 0x00040032u, 0x00000017u, 0x00000834u, 0x00000100u, 0x0004002bu, 0x00000017u, 0x00000835u, 0x00000020u, 0x00060034u, 0x00000017u, 0x00000836u, 0x00000087u, 0x00000834u, 0x00000835u, 0x0003001du, 0x00000839u, 0x00000006u, 0x0003001eu, 0x0000083au, 0x00000839u, 0x00040020u, 0x0000083bu, 0x0000000cu, 0x0000083au, 0x0004003bu, 0x0000083bu, 0x0000083cu, 0x0000000cu, 0x0007001eu, 0x00000840u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000841u, 0x00000009u, 0x00000840u, 0x0004003bu, 0x00000841u, 0x00000842u, 0x00000009u, 0x00040020u, 0x00000843u, 0x00000009u, 0x00000006u, 0x0003001du, 0x0000086du, 0x00000006u, 0x0003001eu, 0x0000086eu, 0x0000086du, 0x00040020u, 0x0000086fu, 0x0000000cu, 0x0000086eu, 0x0004003bu, 0x0000086fu, 0x00000870u, 0x0000000cu, 0x0003001du, 0x00000877u, 0x00000006u, 0x0003001eu, 0x00000878u, 0x00000877u, 0x00040020u, 0x00000879u, 0x0000000cu, 0x00000878u, 0x0004003bu, 0x00000879u, 0x0000087au, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000898u, 0x00000051u, 0x0000082cu, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000899u, 0x00000051u, 0x0000082cu, 0x00000001u, 0x00060034u, 0x00000006u, 0x0000089au, 0x00000084u, 0x00000898u, 0x00000899u, 0x0004003bu, 0x00000816u, 0x0000089cu, 0x00000001u, 0x0003001du, 0x000008a0u, 0x00000129u, 0x0003001eu, 0x000008a1u, 0x000008a0u, 0x00040020u, 0x000008a2u, 0x0000000cu, 0x000008a1u, 0x0004003bu, 0x000008a2u, 0x000008a3u, 0x0000000cu, 0x00040020u, 0x000008a5u, 0x0000000cu, 0x00000129u, 0x0004002bu, 0x00000017u, 0x000008aeu, 0x00000040u, 0x0003001du, 0x000008bfu, 0x00000006u, 0x0003001eu, 0x000008c0u, 0x000008bfu, 0x00040020u, 0x000008c1u, 0x0000000cu, 0x000008c0u, 0x0004003bu, 0x000008c1u, 0x000008c2u, 0x0000000cu, 0x0003001du, 0x000008cdu, 0x00000009u, 0x0003001eu, 0x000008ceu, 0x000008cdu, 0x00040020u, 0x000008cfu, 0x0000000cu, 0x000008ceu, 0x0004003bu, 0x000008cfu, 0x000008d0u, 0x0000000cu, 0x00040020u, 0x000008d2u, 0x0000000cu, 0x00000009u, 0x0003001du, 0x000008dbu, 0x00000017u, 0x0003001eu, 0x000008dcu, 0x000008dbu, 0x00040020u, 0x000008ddu, 0x0000000cu, 0x000008dcu, 0x0004003bu, 0x000008ddu, 0x000008deu, 0x0000000cu, 0x00040020u, 0x000008e0u, 0x0000000cu, 0x00000017u, 0x0003001du, 0x000008e4u, 0x00000008u, 0x0003001eu, 0x000008e5u, 0x000008e4u, 0x00040020u, 0x000008e6u, 0x0000000cu, 0x000008e5u, 0x0004003bu, 0x000008e6u, 0x000008e7u, 0x0000000cu, 0x0004002bu, 0x00000017u, 0x0000090bu, 0x00000080u, 0x0004002bu, 0x00000017u, 0x0000090cu, 0x00000100u, 0x0004002bu, 0x00000017u, 0x0000090du, 0x00000200u, 0x0004002bu, 0x00000017u, 0x0000090eu, 0x00000400u, 0x0004002bu, 0x00000017u, 0x0000090fu, 0x00000800u, 0x0004002bu, 0x00000017u, 0x00000910u, 0x00001000u, 0x0004002bu, 0x00000017u, 0x00000911u, 0x00002000u, 0x0004002bu, 0x00000017u, 0x00000912u, 0x00004000u, 0x0004002bu, 0x00000017u, 0x00000913u, 0x00010000u, 0x0004002bu, 0x00000017u, 0x00000914u, 0x00020000u, 0x0004002bu, 0x00000017u, 0x00000915u, 0x00080000u, 0x0004002bu, 0x00000017u, 0x00000916u, 0x00100000u, 0x0004002bu, 0x00000017u, 0x00000917u, 0x00200000u, 0x0004002bu, 0x00000017u, 0x00000918u, 0x00400000u, 0x0004002bu, 0x00000017u, 0x00000919u, 0x00800000u, 0x0004002bu, 0x00000017u, 0x0000091au, 0x01000000u, 0x0004002bu, 0x00000017u, 0x0000091bu, 0x0000001au, 0x0004002bu, 0x00000017u, 0x0000091cu, 0x10000000u, 0x0004002bu, 0x00000017u, 0x0000091du, 0x20000000u, 0x0004002bu, 0x00000017u, 0x0000091eu, 0x40000000u, 0x0004002bu, 0x00000006u, 0x0000091fu, 0x00000800u, 0x0004001cu, 0x00000920u, 0x0000000au, 0x0000091fu, 0x0003001eu, 0x00000921u, 0x00000920u, 0x0003001du, 0x00000922u, 0x00000921u, 0x0003001eu, 0x00000923u, 0x00000922u, 0x00040020u, 0x00000924u, 0x0000000cu, 0x00000923u, 0x0004003bu, 0x00000924u, 0x00000925u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000926u, 0x00001000u, 0x0004001cu, 0x00000927u, 0x00000008u, 0x00000926u, 0x0003001eu, 0x00000928u, 0x00000927u, 0x0003001du, 0x00000929u, 0x00000928u, 0x0003001eu, 0x0000092au, 0x00000929u, 0x00040020u, 0x0000092bu, 0x0000000cu, 0x0000092au, 0x0004003bu, 0x0000092bu, 0x0000092cu, 0x0000000cu, 0x000d001eu, 0x0000092du, 0x00000017u, 0x00000017u, 0x00000017u, 0x0000000bu, 0x0000000bu, 0x00000017u, 0x00000017u, 0x00000017u, 0x0000000bu, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000092eu, 0x0000092du, 0x0003001eu, 0x0000092fu, 0x0000092eu, 0x00040020u, 0x00000930u, 0x0000000cu, 0x0000092fu, 0x0004003bu, 0x00000930u, 0x00000931u, 0x0000000cu, 0x00040017u, 0x00000932u, 0x00000017u, 0x00000004u, 0x000a001eu, 0x00000933u, 0x00000932u, 0x00000932u, 0x00000932u, 0x00000932u, 0x00000932u, 0x00000932u, 0x00000932u, 0x00000932u, 0x0003001du, 0x00000934u, 0x00000933u, 0x0003001eu, 0x00000935u, 0x00000934u, 0x00040020u, 0x00000936u, 0x0000000cu, 0x00000935u, 0x0004003bu, 0x00000936u, 0x00000937u, 0x0000000cu, 0x0003001du, 0x00000938u, 0x00000932u, 0x0003001eu, 0x00000939u, 0x00000938u, 0x00040020u, 0x0000093au, 0x0000000cu, 0x00000939u, 0x0004003bu, 0x0000093au, 0x0000093bu, 0x0000000cu, 0x000a001eu, 0x0000093cu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000017u, 0x00000017u, 0x00000017u, 0x0003001du, 0x0000093du, 0x0000093cu, 0x0003001eu, 0x0000093eu, 0x0000093du, 0x00040020u, 0x0000093fu, 0x0000000cu, 0x0000093eu, 0x0004003bu, 0x0000093fu, 0x00000940u, 0x0000000cu, 0x0010001eu, 0x00000941u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000942u, 0x00000941u, 0x0003001eu, 0x00000943u, 0x00000942u, 0x00040020u, 0x00000944u, 0x0000000cu, 0x00000943u, 0x0004003bu, 0x00000944u, 0x00000945u, 0x0000000cu, 0x00040017u, 0x00000946u, 0x0000000au, 0x00000004u, 0x000b001eu, 0x00000947u, 0x00000932u, 0x00000932u, 0x00000946u, 0x00000946u, 0x00000017u, 0x00000017u, 0x00000017u, 0x0000000bu, 0x0000000au, 0x0003001du, 0x00000948u, 0x00000947u, 0x0003001eu, 0x00000949u, 0x00000948u, 0x00040020u, 0x0000094au, 0x0000000cu, 0x00000949u, 0x0004003bu, 0x0000094au, 0x0000094bu, 0x0000000cu, 0x0006001eu, 0x0000094cu, 0x00000017u, 0x00000017u, 0x00000017u, 0x00000017u, 0x0003001du, 0x0000094du, 0x0000094cu, 0x0003001eu, 0x0000094eu, 0x0000094du, 0x00040020u, 0x0000094fu, 0x0000000cu, 0x0000094eu, 0x0004003bu, 0x0000094fu, 0x00000950u, 0x0000000cu, 0x0006001eu, 0x00000951u, 0x00000017u, 0x00000017u, 0x00000017u, 0x00000006u, 0x0003001eu, 0x00000952u, 0x00000951u, 0x00040020u, 0x00000953u, 0x00000002u, 0x00000952u, 0x0004003bu, 0x00000953u, 0x00000954u, 0x00000002u, 0x0004001cu, 0x00000955u, 0x00000008u, 0x000003f9u, 0x0004001cu, 0x00000956u, 0x00000955u, 0x00000170u, 0x0004002bu, 0x00000008u, 0x00000957u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000958u, 0x00000001u, 0x0004002bu, 0x00000008u, 0x00000959u, 0x00000007u, 0x0004002bu, 0x00000008u, 0x0000095au, 0x00000004u, 0x0004002bu, 0x00000008u, 0x0000095bu, 0x00000002u, 0x0013002cu, 0x00000955u, 0x0000095cu, 0x000001eau, 0x00000957u, 0x00000958u, 0x00000959u, 0x0000095au, 0x0000095bu, 0x000003bfu, 0x00000201u, 0x00000201u, 0x000003bfu, 0x0000095bu, 0x0000095au, 0x00000959u, 0x00000958u, 0x00000957u, 0x000001eau, 0x0013002cu, 0x00000955u, 0x0000095du, 0x000001eau, 0x0000095au, 0x00000958u, 0x000003bfu, 0x0000095au, 0x000001eau, 0x000003bfu, 0x00000958u, 0x00000201u, 0x00000959u, 0x0000095bu, 0x00000957u, 0x00000959u, 0x00000201u, 0x00000957u, 0x0000095bu, 0x0005002cu, 0x00000956u, 0x0000095eu, 0x0000095cu, 0x0000095du, 0x0003002eu, 0x00000009u, 0x000011ceu, 0x0003002eu, 0x00000006u, 0x000011d1u, 0x0003002eu, 0x00000008u, 0x000011d4u, 0x0003002eu, 0x0000000cu, 0x000011d5u, 0x00030001u, 0x0000001bu, 0x000012c0u, 0x00030001u, 0x00000008u, 0x000013b6u, 0x00030001u, 0x00000008u, 0x00001961u, 0x00030001u, 0x0000001bu, 0x00001977u, 0x00030001u, 0x0000001bu, 0x00001996u, 0x0006002cu, 0x000003acu, 0x000019c7u, 0x000003b7u, 0x000003b7u, 0x000003b7u, 0x0005002cu, 0x00000074u, 0x000019c8u, 0x000001c4u, 0x000001c4u, 0x0006002cu, 0x0000001bu, 0x000019c9u, 0x0000065bu, 0x0000065bu, 0x0000065bu, 0x0006002cu, 0x00000018u, 0x000019cau, 0x000000c7u, 0x000000c7u, 0x000000c7u, 0x0006002cu, 0x00000018u, 0x000019cbu, 0x00000107u, 0x00000107u, 0x00000107u, 0x0006002cu, 0x00000018u, 0x000019ccu, 0x000000cau, 0x000000cau, 0x000000cau, 0x0006002cu, 0x00000018u, 0x000019cdu, 0x0000011au, 0x0000011au, 0x0000011au, 0x0006002cu, 0x00000218u, 0x000019ceu, 0x00000236u, 0x00000236u, 0x00000236u, 0x0006002cu, 0x0000001bu, 0x000019cfu, 0x000001cfu, 0x000001cfu, 0x000001cfu, 0x0006002cu, 0x00000218u, 0x000019d0u, 0x00000247u, 0x00000247u, 0x00000247u, 0x0006002cu, 0x00000218u, 0x000019d1u, 0x0000024bu, 0x0000024bu, 0x0000024bu, 0x00040017u, 0x000019d3u, 0x00000034u, 0x00000004u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000046u, 0x00001222u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001221u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00001220u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000121fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001219u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001218u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00001217u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001216u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000120cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000120bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000120au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001209u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001208u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011feu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011fdu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011fcu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011fbu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011e8u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011e7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011e6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011e5u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011e4u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011deu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011dcu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011dbu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011dau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011d3u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000011d2u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011d0u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011cfu, 0x00000007u, 0x0004003bu, 0x000000ddu, 0x000011aeu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011adu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011acu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000011abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011aau, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a9u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a8u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a5u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a4u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a3u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a2u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a1u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a0u, 0x00000007u, 0x0004003bu, 0x000000ddu, 0x0000118fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000118eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000118du, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000118cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000118bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000118au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001189u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001188u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001187u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001186u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001185u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001184u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001183u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001182u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001181u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001171u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001170u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000116fu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000116eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000116du, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000116cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000116bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001162u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001161u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001160u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000115fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000115eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000115du, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000115cu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001133u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00001134u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001135u, 0x00000007u, 0x0004003bu, 0x000004ddu, 0x00001043u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001044u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001045u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00001046u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001047u, 0x00000007u, 0x0004003bu, 0x000004ddu, 0x00001048u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001049u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001006u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00001007u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001008u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100du, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000100eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000100fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fceu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa6u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f8cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f8du, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f8eu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f8fu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000f90u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f6bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f6cu, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f45u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f46u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f47u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f48u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000f49u, 0x00000007u, 0x0005003bu, 0x00000035u, 0x00000e62u, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000017au, 0x00000e63u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000e64u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000e65u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000e66u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000e67u, 0x00000007u, 0x0004003bu, 0x00000219u, 0x00000e68u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000e69u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000e6au, 0x00000007u, 0x0005003bu, 0x00000035u, 0x00000d7fu, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000017au, 0x00000d80u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000d81u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000d82u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d83u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d84u, 0x00000007u, 0x0004003bu, 0x00000219u, 0x00000d85u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d86u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000d87u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d7bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d72u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d6fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d57u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d58u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d59u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d5au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d5bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d5cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c94u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000c95u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c96u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c97u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c98u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000c99u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c9au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c9bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000c9cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000c9du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000c9eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000c9fu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000ca0u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000ca1u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca2u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000ca3u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca4u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca5u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000ca6u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000ca7u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c72u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c73u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000c74u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000c75u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b4au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b4bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b4cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b4du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b53u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b54u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b55u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b56u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b57u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b58u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b59u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b5au, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b5bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b5cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b5du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b5eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b5fu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b60u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b61u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b62u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b63u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b64u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b65u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000b66u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b67u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b68u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b69u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b6bu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b70u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b72u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b74u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b75u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b76u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b77u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b78u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b79u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7au, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000b7bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b7du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7fu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b80u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b81u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b82u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b83u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000b84u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b85u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b86u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b87u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b88u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b89u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b8au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b8bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b12u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000b13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b15u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000ad9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000adau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000adbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000adcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000addu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000adeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000aa1u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000aa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000aa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000aa4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a18u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1du, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a20u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a21u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a22u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000a00u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000099du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000099eu, 0x00000007u, 0x0004003bu, 0x000003adu, 0x0000099fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009a1u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000967u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000968u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000096du, 0x00000007u, 0x0005003bu, 0x00000035u, 0x00000961u, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000001au, 0x00000813u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000081au, 0x00000007u, 0x0004003bu, 0x0000081eu, 0x0000081fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000824u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000832u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000838u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000084cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000084fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000852u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000855u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000858u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000863u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000086cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000876u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000887u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000890u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000896u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000089fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c8u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000008f0u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000008f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f4u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x000008fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000901u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000904u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000907u, 0x00000007u, 0x000300f7u, 0x0000095fu, 0x00000000u, 0x000300fbu, 0x00000198u, 0x00000960u, 0x000200f8u, 0x00000960u, 0x0003003eu, 0x000000a4u, 0x000000a5u, 0x00050041u, 0x00000816u, 0x00000817u, 0x00000815u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000818u, 0x00000817u, 0x0004007cu, 0x00000017u, 0x00000819u, 0x00000818u, 0x0003003eu, 0x00000813u, 0x00000819u, 0x00050041u, 0x00000816u, 0x0000081bu, 0x00000815u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000081cu, 0x0000081bu, 0x0004007cu, 0x00000017u, 0x0000081du, 0x0000081cu, 0x0003003eu, 0x0000081au, 0x0000081du, 0x0004003du, 0x000003acu, 0x00000821u, 0x00000820u, 0x0007004fu, 0x00000074u, 0x00000822u, 0x00000821u, 0x00000821u, 0x00000000u, 0x00000001u, 0x0004007cu, 0x000005a6u, 0x00000823u, 0x00000822u, 0x0003003eu, 0x0000081fu, 0x00000823u, 0x00050041u, 0x0000001au, 0x00000825u, 0x0000081fu, 0x00000198u, 0x0004003du, 0x00000017u, 0x00000826u, 0x00000825u, 0x00050041u, 0x0000001au, 0x00000827u, 0x0000081fu, 0x000001bcu, 0x0004003du, 0x00000017u, 0x00000828u, 0x00000827u, 0x00050084u, 0x00000017u, 0x00000830u, 0x00000828u, 0x0000082fu, 0x00050080u, 0x00000017u, 0x00000831u, 0x00000826u, 0x00000830u, 0x0003003eu, 0x00000824u, 0x00000831u, 0x00050084u, 0x00000017u, 0x00000837u, 0x00000831u, 0x00000836u, 0x0003003eu, 0x00000832u, 0x00000837u, 0x00060041u, 0x000003f3u, 0x0000083eu, 0x0000083cu, 0x000000abu, 0x00000831u, 0x0004003du, 0x00000006u, 0x0000083fu, 0x0000083eu, 0x00050041u, 0x00000843u, 0x00000844u, 0x00000842u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000845u, 0x00000844u, 0x000500c7u, 0x00000006u, 0x00000846u, 0x0000083fu, 0x00000845u, 0x0003003eu, 0x00000838u, 0x00000846u, 0x000500aau, 0x00000034u, 0x00000848u, 0x00000846u, 0x00000198u, 0x000300f7u, 0x0000084au, 0x00000000u, 0x000400fau, 0x00000848u, 0x00000849u, 0x0000084au, 0x000200f8u, 0x00000849u, 0x0003003eu, 0x00000961u, 0x000002bcu, 0x000200f9u, 0x0000095fu, 0x000200f8u, 0x0000084au, 0x0004003du, 0x000003acu, 0x0000084du, 0x00000815u, 0x0007004fu, 0x00000074u, 0x0000084eu, 0x0000084du, 0x0000084du, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000084cu, 0x0000084eu, 0x00050041u, 0x00000843u, 0x00000850u, 0x00000842u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x00000851u, 0x00000850u, 0x0003003eu, 0x0000084fu, 0x00000851u, 0x00050041u, 0x00000843u, 0x00000853u, 0x00000842u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x00000854u, 0x00000853u, 0x0003003eu, 0x00000852u, 0x00000854u, 0x00050041u, 0x00000843u, 0x00000856u, 0x00000842u, 0x000000abu, 0x0004003du, 0x00000006u, 0x00000857u, 0x00000856u, 0x0003003eu, 0x00000855u, 0x00000857u, 0x00050041u, 0x00000843u, 0x00000859u, 0x00000842u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x0000085au, 0x00000859u, 0x0003003eu, 0x00000858u, 0x0000085au, 0x0003003eu, 0x00000471u, 0x00000299u, 0x0003003eu, 0x00000574u, 0x00000299u, 0x0004003du, 0x00000074u, 0x0000096eu, 0x0000084cu, 0x00050050u, 0x00000074u, 0x00000971u, 0x00000851u, 0x00000854u, 0x000500b0u, 0x00000599u, 0x00000972u, 0x0000096eu, 0x00000971u, 0x0004009bu, 0x00000034u, 0x00000973u, 0x00000972u, 0x000300f7u, 0x00000974u, 0x00000000u, 0x000400fau, 0x00000973u, 0x00000975u, 0x00000974u, 0x000200f8u, 0x00000975u, 0x0004003du, 0x00000074u, 0x00000976u, 0x0000084cu, 0x00050050u, 0x00000074u, 0x00000977u, 0x000005a2u, 0x000005a2u, 0x000500c7u, 0x00000074u, 0x00000978u, 0x00000976u, 0x00000977u, 0x0003003eu, 0x00000967u, 0x00000978u, 0x0004003du, 0x00000074u, 0x00000979u, 0x0000084cu, 0x00050050u, 0x000005a6u, 0x0000097au, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x0000097bu, 0x00000979u, 0x0000097au, 0x0003003eu, 0x0000084cu, 0x0000097bu, 0x00050041u, 0x00000007u, 0x0000097cu, 0x00000967u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000097du, 0x0000097cu, 0x00050084u, 0x00000006u, 0x0000097eu, 0x0000097du, 0x000005acu, 0x00050041u, 0x00000007u, 0x0000097fu, 0x00000967u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000980u, 0x0000097fu, 0x00050080u, 0x00000006u, 0x00000981u, 0x0000097eu, 0x00000980u, 0x0003003eu, 0x00000968u, 0x00000981u, 0x000500c2u, 0x00000006u, 0x00000984u, 0x00000851u, 0x000004a9u, 0x00050041u, 0x00000007u, 0x00000985u, 0x0000084cu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000986u, 0x00000985u, 0x00050084u, 0x00000006u, 0x00000987u, 0x00000984u, 0x00000986u, 0x00050080u, 0x00000006u, 0x00000988u, 0x00000857u, 0x00000987u, 0x00050041u, 0x00000007u, 0x00000989u, 0x0000084cu, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000098au, 0x00000989u, 0x00050080u, 0x00000006u, 0x0000098bu, 0x00000988u, 0x0000098au, 0x0003003eu, 0x00000969u, 0x0000098bu, 0x0003003eu, 0x000005bdu, 0x0000098bu, 0x0003003eu, 0x0000096au, 0x0000098bu, 0x0003003eu, 0x0000096bu, 0x00000981u, 0x000300f7u, 0x000009a2u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x000009a2u, 0x00000000u, 0x000009a3u, 0x00000001u, 0x000009a3u, 0x00000002u, 0x000009a4u, 0x00000003u, 0x000009a5u, 0x00000004u, 0x000009a6u, 0x000200f8u, 0x000009a6u, 0x000500c7u, 0x00000006u, 0x000009f3u, 0x0000098bu, 0x000003e5u, 0x0003003eu, 0x0000096au, 0x000009f3u, 0x00050084u, 0x00000006u, 0x000009f5u, 0x00000981u, 0x000003e9u, 0x00050080u, 0x00000006u, 0x000009f7u, 0x000009f3u, 0x000009f5u, 0x0003003eu, 0x0000096au, 0x000009f7u, 0x00060041u, 0x000003f3u, 0x000009f9u, 0x000003f1u, 0x000000abu, 0x000009f7u, 0x0004003du, 0x00000006u, 0x000009fau, 0x000009f9u, 0x0003003eu, 0x000009a1u, 0x000009fau, 0x00070050u, 0x0000025au, 0x000009fcu, 0x000009fau, 0x000009fau, 0x000009fau, 0x000009fau, 0x000500c2u, 0x0000025au, 0x000009fdu, 0x000009fcu, 0x000003fau, 0x000500c7u, 0x0000025au, 0x000009feu, 0x000009fdu, 0x000003fcu, 0x00040071u, 0x00000009u, 0x000009ffu, 0x000009feu, 0x0003003eu, 0x0000038bu, 0x000009ffu, 0x000200f9u, 0x000009a2u, 0x000200f8u, 0x000009a5u, 0x000500c7u, 0x00000006u, 0x000009ddu, 0x0000098bu, 0x00000399u, 0x0003003eu, 0x0000096au, 0x000009ddu, 0x00050084u, 0x00000006u, 0x000009dfu, 0x00000981u, 0x000003ceu, 0x00050080u, 0x00000006u, 0x000009e1u, 0x000009ddu, 0x000009dfu, 0x0003003eu, 0x0000096au, 0x000009e1u, 0x000500c6u, 0x00000006u, 0x000009e3u, 0x000009e1u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000009e4u, 0x000003a5u, 0x000000abu, 0x000009e3u, 0x0004003du, 0x0000000au, 0x000009e5u, 0x000009e4u, 0x00040071u, 0x00000006u, 0x000009e6u, 0x000009e5u, 0x0003003eu, 0x000009a0u, 0x000009e6u, 0x000500c2u, 0x00000006u, 0x000009e8u, 0x000009e6u, 0x000003b0u, 0x00040071u, 0x00000008u, 0x000009e9u, 0x000009e8u, 0x00060050u, 0x0000001bu, 0x000009eau, 0x000009e9u, 0x000009e9u, 0x000009e9u, 0x000500c7u, 0x00000006u, 0x000009ecu, 0x000009e6u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x000009edu, 0x000009ecu, 0x00070050u, 0x00000009u, 0x000009f1u, 0x000009e9u, 0x000009e9u, 0x000009e9u, 0x000009edu, 0x0003003eu, 0x0000038bu, 0x000009f1u, 0x000200f9u, 0x000009a2u, 0x000200f8u, 0x000009a4u, 0x000500c7u, 0x00000006u, 0x000009bau, 0x0000098bu, 0x00000399u, 0x0003003eu, 0x0000096au, 0x000009bau, 0x00050084u, 0x00000006u, 0x000009bcu, 0x00000981u, 0x0000039du, 0x00050080u, 0x00000006u, 0x000009beu, 0x000009bau, 0x000009bcu, 0x0003003eu, 0x0000096au, 0x000009beu, 0x000500c6u, 0x00000006u, 0x000009c0u, 0x000009beu, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000009c1u, 0x000003a5u, 0x000000abu, 0x000009c0u, 0x0004003du, 0x0000000au, 0x000009c2u, 0x000009c1u, 0x00040071u, 0x00000006u, 0x000009c3u, 0x000009c2u, 0x0003003eu, 0x0000099eu, 0x000009c3u, 0x000500c2u, 0x00000006u, 0x000009c5u, 0x000009c3u, 0x000003b0u, 0x000500c2u, 0x00000006u, 0x000009c7u, 0x000009c3u, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x000009c9u, 0x000009c3u, 0x00000170u, 0x00060050u, 0x000003acu, 0x000009cau, 0x000009c5u, 0x000009c7u, 0x000009c9u, 0x000500c7u, 0x000003acu, 0x000009ccu, 0x000009cau, 0x000019c7u, 0x0003003eu, 0x0000099fu, 0x000009ccu, 0x00040071u, 0x0000001bu, 0x000009ceu, 0x000009ccu, 0x00060041u, 0x00000387u, 0x000009d0u, 0x00000392u, 0x000000abu, 0x000009beu, 0x0004003du, 0x00000008u, 0x000009d1u, 0x000009d0u, 0x000500c4u, 0x00000008u, 0x000009d2u, 0x000009d1u, 0x000003bfu, 0x000500c7u, 0x00000006u, 0x000009d4u, 0x000009c3u, 0x000001bcu, 0x000500c4u, 0x00000006u, 0x000009d5u, 0x000009d4u, 0x000000c7u, 0x00040071u, 0x00000008u, 0x000009d6u, 0x000009d5u, 0x000500c5u, 0x00000008u, 0x000009d7u, 0x000009d2u, 0x000009d6u, 0x00050051u, 0x00000008u, 0x000009d8u, 0x000009ceu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000009d9u, 0x000009ceu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000009dau, 0x000009ceu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000009dbu, 0x000009d8u, 0x000009d9u, 0x000009dau, 0x000009d7u, 0x0003003eu, 0x0000038bu, 0x000009dbu, 0x000200f9u, 0x000009a2u, 0x000200f8u, 0x000009a3u, 0x000500c7u, 0x00000006u, 0x000009a8u, 0x0000098bu, 0x00000379u, 0x0003003eu, 0x0000096au, 0x000009a8u, 0x00050084u, 0x00000006u, 0x000009aau, 0x00000981u, 0x00000378u, 0x00050080u, 0x00000006u, 0x000009acu, 0x000009a8u, 0x000009aau, 0x0003003eu, 0x0000096au, 0x000009acu, 0x000500c6u, 0x00000006u, 0x000009aeu, 0x000009acu, 0x000001c4u, 0x00060041u, 0x00000387u, 0x000009afu, 0x00000384u, 0x000000abu, 0x000009aeu, 0x0004003du, 0x00000008u, 0x000009b0u, 0x000009afu, 0x0003003eu, 0x0000099du, 0x000009b0u, 0x000500c2u, 0x00000006u, 0x000009b5u, 0x000009acu, 0x000000b5u, 0x00060041u, 0x00000387u, 0x000009b6u, 0x00000392u, 0x000000abu, 0x000009b5u, 0x0004003du, 0x00000008u, 0x000009b7u, 0x000009b6u, 0x00070050u, 0x00000009u, 0x000009b8u, 0x000009b0u, 0x000009b0u, 0x000009b0u, 0x000009b7u, 0x0003003eu, 0x0000038bu, 0x000009b8u, 0x000200f9u, 0x000009a2u, 0x000200f8u, 0x000009a2u, 0x0004003du, 0x00000006u, 0x00000994u, 0x00000985u, 0x00050084u, 0x00000006u, 0x00000995u, 0x00000984u, 0x00000994u, 0x00050080u, 0x00000006u, 0x00000996u, 0x0000085au, 0x00000995u, 0x0004003du, 0x00000006u, 0x00000998u, 0x00000989u, 0x00050080u, 0x00000006u, 0x00000999u, 0x00000996u, 0x00000998u, 0x0003003eu, 0x00000969u, 0x00000999u, 0x0003003eu, 0x0000096cu, 0x00000999u, 0x0003003eu, 0x0000096du, 0x00000981u, 0x000500c7u, 0x00000006u, 0x00000a02u, 0x00000999u, 0x00000399u, 0x0003003eu, 0x0000096cu, 0x00000a02u, 0x00050084u, 0x00000006u, 0x00000a04u, 0x00000981u, 0x00000475u, 0x00050080u, 0x00000006u, 0x00000a06u, 0x00000a02u, 0x00000a04u, 0x0003003eu, 0x0000096cu, 0x00000a06u, 0x000500c6u, 0x00000006u, 0x00000a08u, 0x00000a06u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x00000a09u, 0x000003a5u, 0x000000abu, 0x00000a08u, 0x0004003du, 0x0000000au, 0x00000a0au, 0x00000a09u, 0x0003003eu, 0x00000a00u, 0x00000a0au, 0x000500c2u, 0x0000000au, 0x00000a0cu, 0x00000a0au, 0x0000047fu, 0x0003003eu, 0x00000424u, 0x00000a0cu, 0x00060041u, 0x00000387u, 0x00000a0eu, 0x00000392u, 0x000000abu, 0x00000a06u, 0x0004003du, 0x00000008u, 0x00000a0fu, 0x00000a0eu, 0x000500c7u, 0x0000000au, 0x00000a11u, 0x00000a0au, 0x00000485u, 0x000500c4u, 0x0000000au, 0x00000a12u, 0x00000a11u, 0x0000047fu, 0x00040071u, 0x00000008u, 0x00000a13u, 0x00000a12u, 0x000500c5u, 0x00000008u, 0x00000a14u, 0x00000a0fu, 0x00000a13u, 0x0003003eu, 0x00000405u, 0x00000a14u, 0x000200f9u, 0x00000974u, 0x000200f8u, 0x00000974u, 0x000200f9u, 0x0000085cu, 0x000200f8u, 0x0000085cu, 0x000700f5u, 0x00000006u, 0x00001285u, 0x00000846u, 0x00000974u, 0x0000086bu, 0x0000085fu, 0x000700f5u, 0x0000001bu, 0x00001522u, 0x000012c0u, 0x00000974u, 0x00001521u, 0x0000085fu, 0x000700f5u, 0x00000008u, 0x000014f7u, 0x000013b6u, 0x00000974u, 0x000014f6u, 0x0000085fu, 0x000700f5u, 0x00000008u, 0x000014cdu, 0x000013b6u, 0x00000974u, 0x000014ccu, 0x0000085fu, 0x000700f5u, 0x0000001bu, 0x000013f0u, 0x000012c0u, 0x00000974u, 0x000013efu, 0x0000085fu, 0x000700f5u, 0x00000008u, 0x000013d2u, 0x000013b6u, 0x00000974u, 0x000013d1u, 0x0000085fu, 0x000700f5u, 0x00000008u, 0x000013b4u, 0x000013b6u, 0x00000974u, 0x000013b3u, 0x0000085fu, 0x000700f5u, 0x0000001bu, 0x000012beu, 0x000012c0u, 0x00000974u, 0x000012bdu, 0x0000085fu, 0x000500abu, 0x00000034u, 0x00000862u, 0x00001285u, 0x00000198u, 0x000400f6u, 0x0000085eu, 0x0000085fu, 0x00000000u, 0x000400fau, 0x00000862u, 0x0000085du, 0x0000085eu, 0x000200f8u, 0x0000085du, 0x0006000cu, 0x00000017u, 0x00000865u, 0x00000001u, 0x00000049u, 0x00001285u, 0x0003003eu, 0x00000863u, 0x00000865u, 0x000500c4u, 0x00000017u, 0x00000867u, 0x000000b5u, 0x00000865u, 0x0004007cu, 0x00000006u, 0x00000868u, 0x00000867u, 0x000400c8u, 0x00000006u, 0x00000869u, 0x00000868u, 0x000500c7u, 0x00000006u, 0x0000086bu, 0x00001285u, 0x00000869u, 0x0003003eu, 0x00000838u, 0x0000086bu, 0x00050080u, 0x00000017u, 0x00000873u, 0x00000837u, 0x00000865u, 0x00060041u, 0x000003f3u, 0x00000874u, 0x00000870u, 0x000000abu, 0x00000873u, 0x0004003du, 0x00000006u, 0x00000875u, 0x00000874u, 0x0003003eu, 0x0000086cu, 0x00000875u, 0x00060041u, 0x000003f3u, 0x0000087eu, 0x0000087au, 0x000000abu, 0x00000873u, 0x0004003du, 0x00000006u, 0x0000087fu, 0x0000087eu, 0x0003003eu, 0x00000876u, 0x0000087fu, 0x000200f9u, 0x00000880u, 0x000200f8u, 0x00000880u, 0x000700f5u, 0x0000001bu, 0x00001521u, 0x00001522u, 0x0000085du, 0x00001941u, 0x00000883u, 0x000700f5u, 0x00000008u, 0x000014f6u, 0x000014f7u, 0x0000085du, 0x00001926u, 0x00000883u, 0x000700f5u, 0x00000008u, 0x000014ccu, 0x000014cdu, 0x0000085du, 0x0000190bu, 0x00000883u, 0x000700f5u, 0x0000001bu, 0x000013efu, 0x000013f0u, 0x0000085du, 0x000018e3u, 0x00000883u, 0x000700f5u, 0x00000008u, 0x000013d1u, 0x000013d2u, 0x0000085du, 0x000018bbu, 0x00000883u, 0x000700f5u, 0x00000008u, 0x000013b3u, 0x000013b4u, 0x0000085du, 0x00001893u, 0x00000883u, 0x000700f5u, 0x0000001bu, 0x000012bdu, 0x000012beu, 0x0000085du, 0x00001855u, 0x00000883u, 0x000700f5u, 0x00000006u, 0x000012afu, 0x00000875u, 0x0000085du, 0x000008fau, 0x00000883u, 0x000700f5u, 0x00000006u, 0x000012adu, 0x0000087fu, 0x0000085du, 0x0000088fu, 0x00000883u, 0x000500abu, 0x00000034u, 0x00000886u, 0x000012adu, 0x00000198u, 0x000400f6u, 0x00000882u, 0x00000883u, 0x00000000u, 0x000400fau, 0x00000886u, 0x00000881u, 0x00000882u, 0x000200f8u, 0x00000881u, 0x0006000cu, 0x00000017u, 0x00000889u, 0x00000001u, 0x00000049u, 0x000012adu, 0x0003003eu, 0x00000887u, 0x00000889u, 0x000500c4u, 0x00000017u, 0x0000088bu, 0x000000b5u, 0x00000889u, 0x0004007cu, 0x00000006u, 0x0000088cu, 0x0000088bu, 0x000400c8u, 0x00000006u, 0x0000088du, 0x0000088cu, 0x000500c7u, 0x00000006u, 0x0000088fu, 0x000012adu, 0x0000088du, 0x0003003eu, 0x00000876u, 0x0000088fu, 0x00050084u, 0x00000017u, 0x00000893u, 0x00000835u, 0x00000865u, 0x00050080u, 0x00000017u, 0x00000894u, 0x00000889u, 0x00000893u, 0x0004007cu, 0x00000006u, 0x00000895u, 0x00000894u, 0x0003003eu, 0x00000890u, 0x00000895u, 0x00050084u, 0x00000006u, 0x0000089bu, 0x000012afu, 0x0000089au, 0x0004003du, 0x00000006u, 0x0000089du, 0x0000089cu, 0x00050080u, 0x00000006u, 0x0000089eu, 0x0000089bu, 0x0000089du, 0x0003003eu, 0x00000896u, 0x0000089eu, 0x00060041u, 0x000008a5u, 0x000008a6u, 0x000008a3u, 0x000000abu, 0x0000089eu, 0x0004003du, 0x00000129u, 0x000008a7u, 0x000008a6u, 0x00040072u, 0x00000017u, 0x000008a8u, 0x000008a7u, 0x0003003eu, 0x0000089fu, 0x000008a8u, 0x000500afu, 0x00000034u, 0x000008aau, 0x000008a8u, 0x000000abu, 0x000300f7u, 0x000008acu, 0x00000000u, 0x000400fau, 0x000008aau, 0x000008abu, 0x000008acu, 0x000200f8u, 0x000008abu, 0x000500c7u, 0x00000017u, 0x000008afu, 0x000008a8u, 0x000008aeu, 0x000500abu, 0x00000034u, 0x000008b0u, 0x000008afu, 0x000000abu, 0x000300f7u, 0x000008b2u, 0x00000000u, 0x000400fau, 0x000008b0u, 0x000008b1u, 0x000008b8u, 0x000200f8u, 0x000008b8u, 0x000500c7u, 0x00000017u, 0x000008bau, 0x000008a8u, 0x00000835u, 0x000500abu, 0x00000034u, 0x000008bbu, 0x000008bau, 0x000000abu, 0x000300f7u, 0x000008bdu, 0x00000000u, 0x000400fau, 0x000008bbu, 0x000008bcu, 0x000008cbu, 0x000200f8u, 0x000008cbu, 0x00060041u, 0x000008d2u, 0x000008d3u, 0x000008d0u, 0x000000abu, 0x0000089eu, 0x0004003du, 0x00000009u, 0x000008d4u, 0x000008d3u, 0x00050051u, 0x00000008u, 0x000008d5u, 0x000008d4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000008d6u, 0x000008d4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000008d7u, 0x000008d4u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000008d8u, 0x000008d4u, 0x00000003u, 0x0003003eu, 0x00001216u, 0x000008d4u, 0x00060041u, 0x000008e0u, 0x000008e1u, 0x000008deu, 0x000000abu, 0x0000089eu, 0x0004003du, 0x00000017u, 0x000008e2u, 0x000008e1u, 0x0003003eu, 0x00001217u, 0x000008e2u, 0x00060041u, 0x00000387u, 0x000008e9u, 0x000008e7u, 0x000000abu, 0x0000089eu, 0x0004003du, 0x00000008u, 0x000008eau, 0x000008e9u, 0x0003003eu, 0x00001219u, 0x000008eau, 0x00040072u, 0x00000129u, 0x000008edu, 0x000008a8u, 0x0004007cu, 0x00000008u, 0x000008eeu, 0x000008edu, 0x0003003eu, 0x00001218u, 0x000008eeu, 0x0003003eu, 0x000008f0u, 0x00000819u, 0x0003003eu, 0x000008f2u, 0x0000081du, 0x0003003eu, 0x000008f4u, 0x00000895u, 0x00070050u, 0x0000009au, 0x0000121eu, 0x000008d4u, 0x000008e2u, 0x000008eeu, 0x000008eau, 0x0003003eu, 0x0000121fu, 0x000008d4u, 0x0003003eu, 0x00001220u, 0x000008e2u, 0x0003003eu, 0x00001221u, 0x000008eeu, 0x0003003eu, 0x00001222u, 0x000008eau, 0x000500c3u, 0x00000017u, 0x00000b8fu, 0x000008e2u, 0x000000cdu, 0x0003003eu, 0x00000b4au, 0x00000b8fu, 0x000500c7u, 0x00000017u, 0x00000b92u, 0x000008e2u, 0x0000071fu, 0x0003003eu, 0x00000b4bu, 0x00000b92u, 0x00040071u, 0x00000006u, 0x00000b95u, 0x000008eeu, 0x0004007cu, 0x00000017u, 0x00000b96u, 0x00000b95u, 0x0003003eu, 0x00000b4cu, 0x00000b96u, 0x0003003eu, 0x00000b4du, 0x000008d4u, 0x0003003eu, 0x00000b4eu, 0x000008eau, 0x00080041u, 0x00000387u, 0x00000b9cu, 0x00000732u, 0x000000abu, 0x00000895u, 0x000000abu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000b9du, 0x00000b9cu, 0x00040071u, 0x00000006u, 0x00000b9eu, 0x00000b9du, 0x0003003eu, 0x00000b4fu, 0x00000b9eu, 0x0003003eu, 0x00000b51u, 0x00000895u, 0x00060041u, 0x000000adu, 0x00000c3du, 0x000000aau, 0x000000abu, 0x00000895u, 0x0004003du, 0x000000a6u, 0x00000c3eu, 0x00000c3du, 0x00050051u, 0x00000009u, 0x00000c3fu, 0x00000c3eu, 0x00000000u, 0x0003003eu, 0x00001181u, 0x00000c3fu, 0x00050051u, 0x00000009u, 0x00000c41u, 0x00000c3eu, 0x00000001u, 0x0003003eu, 0x00001182u, 0x00000c41u, 0x00050051u, 0x00000009u, 0x00000c43u, 0x00000c3eu, 0x00000002u, 0x0003003eu, 0x00001183u, 0x00000c43u, 0x00050051u, 0x00000009u, 0x00000c45u, 0x00000c3eu, 0x00000003u, 0x0003003eu, 0x00001184u, 0x00000c45u, 0x00050051u, 0x00000009u, 0x00000c47u, 0x00000c3eu, 0x00000004u, 0x0003003eu, 0x00001185u, 0x00000c47u, 0x00050051u, 0x00000009u, 0x00000c49u, 0x00000c3eu, 0x00000005u, 0x0003003eu, 0x00001186u, 0x00000c49u, 0x00050051u, 0x00000009u, 0x00000c4bu, 0x00000c3eu, 0x00000006u, 0x0003003eu, 0x00001187u, 0x00000c4bu, 0x00050051u, 0x00000009u, 0x00000c4du, 0x00000c3eu, 0x00000007u, 0x0003003eu, 0x00001188u, 0x00000c4du, 0x00050051u, 0x00000009u, 0x00000c4fu, 0x00000c3eu, 0x00000008u, 0x0003003eu, 0x00001189u, 0x00000c4fu, 0x00050051u, 0x00000009u, 0x00000c51u, 0x00000c3eu, 0x00000009u, 0x0003003eu, 0x0000118au, 0x00000c51u, 0x00050051u, 0x00000006u, 0x00000c53u, 0x00000c3eu, 0x0000000au, 0x0003003eu, 0x0000118bu, 0x00000c53u, 0x00050051u, 0x0000000au, 0x00000c55u, 0x00000c3eu, 0x0000000bu, 0x0003003eu, 0x0000118cu, 0x00000c55u, 0x00050051u, 0x00000008u, 0x00000c57u, 0x00000c3eu, 0x0000000cu, 0x0003003eu, 0x0000118du, 0x00000c57u, 0x00050051u, 0x00000008u, 0x00000c59u, 0x00000c3eu, 0x0000000du, 0x0003003eu, 0x0000118eu, 0x00000c59u, 0x00050051u, 0x0000000cu, 0x00000c5bu, 0x00000c3eu, 0x0000000eu, 0x0003003eu, 0x0000118fu, 0x00000c5bu, 0x00120050u, 0x0000000du, 0x0000119fu, 0x00000c3fu, 0x00000c41u, 0x00000c43u, 0x00000c45u, 0x00000c47u, 0x00000c49u, 0x00000c4bu, 0x00000c4du, 0x00000c4fu, 0x00000c51u, 0x00000c53u, 0x00000c55u, 0x00000c57u, 0x00000c59u, 0x00000c5bu, 0x0003003eu, 0x000011a0u, 0x00000c3fu, 0x0003003eu, 0x000011a1u, 0x00000c41u, 0x0003003eu, 0x000011a2u, 0x00000c43u, 0x0003003eu, 0x000011a3u, 0x00000c45u, 0x0003003eu, 0x000011a4u, 0x00000c47u, 0x0003003eu, 0x000011a5u, 0x00000c49u, 0x0003003eu, 0x000011a6u, 0x00000c4bu, 0x0003003eu, 0x000011a7u, 0x00000c4du, 0x0003003eu, 0x000011a8u, 0x00000c4fu, 0x0003003eu, 0x000011a9u, 0x00000c51u, 0x0003003eu, 0x000011aau, 0x00000c53u, 0x0003003eu, 0x000011abu, 0x00000c55u, 0x0003003eu, 0x000011acu, 0x00000c57u, 0x0003003eu, 0x000011adu, 0x00000c59u, 0x0003003eu, 0x000011aeu, 0x00000c5bu, 0x0003003eu, 0x000011cfu, 0x00000c4fu, 0x0003003eu, 0x000011d0u, 0x00000c51u, 0x0003003eu, 0x000011d2u, 0x00000c55u, 0x0003003eu, 0x000011d3u, 0x00000c57u, 0x0003003eu, 0x00000b53u, 0x00000b9eu, 0x00060041u, 0x000000e8u, 0x00000c61u, 0x000000e6u, 0x000000abu, 0x00000b9eu, 0x0004003du, 0x000000e2u, 0x00000c62u, 0x00000c61u, 0x00050051u, 0x00000009u, 0x00000c63u, 0x00000c62u, 0x00000000u, 0x0003003eu, 0x0000115cu, 0x00000c63u, 0x00050051u, 0x00000009u, 0x00000c65u, 0x00000c62u, 0x00000001u, 0x0003003eu, 0x0000115du, 0x00000c65u, 0x00050051u, 0x00000006u, 0x00000c67u, 0x00000c62u, 0x00000002u, 0x0003003eu, 0x0000115eu, 0x00000c67u, 0x00050051u, 0x00000008u, 0x00000c69u, 0x00000c62u, 0x00000003u, 0x0003003eu, 0x0000115fu, 0x00000c69u, 0x00050051u, 0x00000008u, 0x00000c6bu, 0x00000c62u, 0x00000004u, 0x0003003eu, 0x00001160u, 0x00000c6bu, 0x00050051u, 0x00000008u, 0x00000c6du, 0x00000c62u, 0x00000005u, 0x0003003eu, 0x00001161u, 0x00000c6du, 0x00050051u, 0x00000008u, 0x00000c6fu, 0x00000c62u, 0x00000006u, 0x0003003eu, 0x00001162u, 0x00000c6fu, 0x000a0050u, 0x00000012u, 0x0000116au, 0x00000c63u, 0x00000c65u, 0x00000c67u, 0x00000c69u, 0x00000c6bu, 0x00000c6du, 0x00000c6fu, 0x0003003eu, 0x0000116bu, 0x00000c63u, 0x0003003eu, 0x0000116cu, 0x00000c65u, 0x0003003eu, 0x0000116du, 0x00000c67u, 0x0003003eu, 0x0000116eu, 0x00000c69u, 0x0003003eu, 0x0000116fu, 0x00000c6bu, 0x0003003eu, 0x00001170u, 0x00000c6du, 0x0003003eu, 0x00001171u, 0x00000c6fu, 0x0003003eu, 0x000011dau, 0x00000c63u, 0x0003003eu, 0x000011dbu, 0x00000c65u, 0x0003003eu, 0x000011dcu, 0x00000c67u, 0x0003003eu, 0x000011ddu, 0x00000c69u, 0x0003003eu, 0x000011deu, 0x00000c6bu, 0x000500c7u, 0x00000006u, 0x00000ba5u, 0x00000c67u, 0x000003b0u, 0x000500abu, 0x00000034u, 0x00000ba6u, 0x00000ba5u, 0x00000198u, 0x0003003eu, 0x00000b54u, 0x00000ba6u, 0x000500c7u, 0x00000006u, 0x00000ba9u, 0x00000c67u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x00000baau, 0x00000ba9u, 0x00000198u, 0x0003003eu, 0x00000b55u, 0x00000baau, 0x000500c7u, 0x00000006u, 0x00000badu, 0x00000c67u, 0x00000170u, 0x000500abu, 0x00000034u, 0x00000baeu, 0x00000badu, 0x00000198u, 0x0003003eu, 0x00000b56u, 0x00000baeu, 0x000500c7u, 0x00000006u, 0x00000bb1u, 0x00000c67u, 0x000003f9u, 0x000500abu, 0x00000034u, 0x00000bb2u, 0x00000bb1u, 0x00000198u, 0x0003003eu, 0x00000b57u, 0x00000bb2u, 0x000500c7u, 0x00000006u, 0x00000bb5u, 0x00000c67u, 0x00000756u, 0x000500abu, 0x00000034u, 0x00000bb6u, 0x00000bb5u, 0x00000198u, 0x0003003eu, 0x00000b58u, 0x00000bb6u, 0x000500c7u, 0x00000006u, 0x00000bb9u, 0x00000c67u, 0x0000075cu, 0x000500abu, 0x00000034u, 0x00000bbau, 0x00000bb9u, 0x00000198u, 0x0003003eu, 0x00000b59u, 0x00000bbau, 0x000500c7u, 0x00000006u, 0x00000bbdu, 0x00000c67u, 0x00000762u, 0x000500abu, 0x00000034u, 0x00000bbeu, 0x00000bbdu, 0x00000198u, 0x0003003eu, 0x00000b5au, 0x00000bbeu, 0x000500c7u, 0x00000006u, 0x00000bc1u, 0x00000c67u, 0x00000768u, 0x000500abu, 0x00000034u, 0x00000bc2u, 0x00000bc1u, 0x00000198u, 0x0003003eu, 0x00000b5bu, 0x00000bc2u, 0x0003003eu, 0x00000b5du, 0x00000bb2u, 0x000300f7u, 0x00000c77u, 0x00000000u, 0x000400fau, 0x00000bb2u, 0x00000c78u, 0x00000c79u, 0x000200f8u, 0x00000c79u, 0x0003003eu, 0x00000c73u, 0x00000649u, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c78u, 0x00050041u, 0x00000404u, 0x00000c7au, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000c7bu, 0x00000c7au, 0x000500c7u, 0x00000008u, 0x00000c7cu, 0x00000c7bu, 0x00000649u, 0x0003003eu, 0x00000c73u, 0x00000c7cu, 0x000200f9u, 0x00000c77u, 0x000200f8u, 0x00000c77u, 0x000700f5u, 0x00000008u, 0x000012bau, 0x00000c7cu, 0x00000c78u, 0x00000649u, 0x00000c79u, 0x0003003eu, 0x00000c72u, 0x000012bau, 0x000300f7u, 0x00000c7eu, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000c7eu, 0x00000000u, 0x00000c7fu, 0x00000001u, 0x00000c80u, 0x00000002u, 0x00000c81u, 0x00000003u, 0x00000c82u, 0x00000004u, 0x00000c83u, 0x000200f8u, 0x00000c83u, 0x0004003du, 0x00000009u, 0x00000c8cu, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c8du, 0x00000c8cu, 0x00000c8cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000c74u, 0x00000c8du, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c82u, 0x0004003du, 0x00000009u, 0x00000c8au, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c8bu, 0x00000c8au, 0x00000c8au, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c74u, 0x00000c8bu, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c81u, 0x0004003du, 0x00000009u, 0x00000c86u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c87u, 0x00000c86u, 0x00000c86u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000001bu, 0x00000c89u, 0x00000c87u, 0x000019c9u, 0x0003003eu, 0x00000c74u, 0x00000c89u, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c80u, 0x0004003du, 0x00000009u, 0x00000c84u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c85u, 0x00000c84u, 0x00000c84u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c74u, 0x00000c85u, 0x0003003eu, 0x00000c72u, 0x00000649u, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c7fu, 0x0003003eu, 0x00000c74u, 0x00000654u, 0x0003003eu, 0x00000c72u, 0x00000649u, 0x000200f9u, 0x00000c7eu, 0x000200f8u, 0x00000c7eu, 0x000f00f5u, 0x00000008u, 0x000012c3u, 0x000012bau, 0x00000c77u, 0x00000649u, 0x00000c7fu, 0x00000649u, 0x00000c80u, 0x000012bau, 0x00000c81u, 0x000012bau, 0x00000c82u, 0x000012bau, 0x00000c83u, 0x000f00f5u, 0x0000001bu, 0x000012bbu, 0x000012bdu, 0x00000c77u, 0x00000654u, 0x00000c7fu, 0x00000c85u, 0x00000c80u, 0x00000c89u, 0x00000c81u, 0x00000c8bu, 0x00000c82u, 0x00000c8du, 0x00000c83u, 0x00050051u, 0x00000008u, 0x00000c90u, 0x000012bbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c91u, 0x000012bbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c92u, 0x000012bbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000c93u, 0x00000c90u, 0x00000c91u, 0x00000c92u, 0x000012c3u, 0x0003003eu, 0x00000c75u, 0x00000c93u, 0x0003003eu, 0x00000b5cu, 0x00000c93u, 0x00050041u, 0x00000046u, 0x00000bc5u, 0x00000b5cu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000bc6u, 0x00000bc5u, 0x000500c2u, 0x00000008u, 0x00000bc7u, 0x00000bc6u, 0x000003bfu, 0x0003003eu, 0x00000b5eu, 0x00000bc7u, 0x00040071u, 0x00000006u, 0x00000bcau, 0x00000c55u, 0x0004007cu, 0x00000017u, 0x00000bcbu, 0x00000bcau, 0x00040071u, 0x00000006u, 0x00000bceu, 0x00000c57u, 0x0004007cu, 0x00000017u, 0x00000bcfu, 0x00000bceu, 0x00040071u, 0x00000006u, 0x00000bd1u, 0x00000bc7u, 0x0004007cu, 0x00000017u, 0x00000bd2u, 0x00000bd1u, 0x00040071u, 0x00000006u, 0x00000bd5u, 0x00000c6bu, 0x0004007cu, 0x00000017u, 0x00000bd6u, 0x00000bd5u, 0x0003003eu, 0x00000b63u, 0x00000b8fu, 0x0003003eu, 0x00000b64u, 0x00000bcbu, 0x0003003eu, 0x00000b65u, 0x00000bcfu, 0x0004003du, 0x0000000au, 0x00000bd8u, 0x00000424u, 0x0003003eu, 0x00000b66u, 0x00000bd8u, 0x0004003du, 0x00000008u, 0x00000bd9u, 0x00000405u, 0x0003003eu, 0x00000b67u, 0x00000bd9u, 0x0003003eu, 0x00000b68u, 0x00000b96u, 0x0003003eu, 0x00000b69u, 0x00000bd2u, 0x0003003eu, 0x00000b6au, 0x00000baau, 0x0003003eu, 0x00000b6bu, 0x00000bd6u, 0x0003003eu, 0x00000b6cu, 0x00000ba6u, 0x0003003eu, 0x00000b6du, 0x00000bbeu, 0x00050080u, 0x00000017u, 0x00000ceau, 0x00000b96u, 0x00000bd2u, 0x000500afu, 0x00000034u, 0x00000cebu, 0x00000ceau, 0x000000cau, 0x000300f7u, 0x00000ca9u, 0x00000000u, 0x000400fau, 0x00000baau, 0x00000caau, 0x00000cabu, 0x000200f8u, 0x00000cabu, 0x00050041u, 0x00000046u, 0x00000d41u, 0x00000b70u, 0x00000198u, 0x0003003eu, 0x00000d41u, 0x000001eau, 0x00050082u, 0x00000017u, 0x00000d43u, 0x00000296u, 0x00000bcfu, 0x0007000cu, 0x00000017u, 0x00000d44u, 0x00000001u, 0x00000027u, 0x00000d43u, 0x000000beu, 0x00040072u, 0x00000129u, 0x00000d45u, 0x00000d44u, 0x0004007cu, 0x00000008u, 0x00000d46u, 0x00000d45u, 0x00050041u, 0x00000046u, 0x00000d47u, 0x00000b70u, 0x000001bcu, 0x0003003eu, 0x00000d47u, 0x00000d46u, 0x0003003eu, 0x00000ca6u, 0x00000cebu, 0x000400a8u, 0x00000034u, 0x00000d4du, 0x00000ba6u, 0x000300f7u, 0x00000d4eu, 0x00000000u, 0x000400fau, 0x00000d4du, 0x00000d4fu, 0x00000d4eu, 0x000200f8u, 0x00000d4fu, 0x000400a8u, 0x00000034u, 0x00000d51u, 0x00000cebu, 0x000500a7u, 0x00000034u, 0x00000d53u, 0x00000d51u, 0x00000bbeu, 0x000200f9u, 0x00000d4eu, 0x000200f8u, 0x00000d4eu, 0x000700f5u, 0x00000034u, 0x00000d54u, 0x00000ba6u, 0x00000cabu, 0x00000d53u, 0x00000d4fu, 0x0003003eu, 0x00000b6eu, 0x00000d54u, 0x0003003eu, 0x00000b6fu, 0x00000cebu, 0x0003003eu, 0x00000c9fu, 0x000002bcu, 0x000200f9u, 0x00000ca9u, 0x000200f8u, 0x00000caau, 0x0003003eu, 0x00000c95u, 0x00000bd8u, 0x00040071u, 0x00000006u, 0x00000d5eu, 0x00000bd8u, 0x0004007cu, 0x00000017u, 0x00000d5fu, 0x00000d5eu, 0x0003003eu, 0x00000d57u, 0x00000d5fu, 0x000500c3u, 0x00000017u, 0x00000d61u, 0x00000d5fu, 0x000000d3u, 0x0003003eu, 0x00000d58u, 0x00000d61u, 0x000500c7u, 0x00000017u, 0x00000d63u, 0x00000d5fu, 0x00000138u, 0x0003003eu, 0x00000d59u, 0x00000d63u, 0x00050082u, 0x00000017u, 0x00000d65u, 0x000000c4u, 0x00000d61u, 0x0007000cu, 0x00000017u, 0x00000d66u, 0x00000001u, 0x0000002au, 0x00000d65u, 0x000000abu, 0x0003003eu, 0x00000d5au, 0x00000d66u, 0x000500c3u, 0x00000017u, 0x00000d68u, 0x0000013fu, 0x00000d61u, 0x00050082u, 0x00000017u, 0x00000d69u, 0x0000013fu, 0x00000d68u, 0x0003003eu, 0x00000d5bu, 0x00000d69u, 0x000500c4u, 0x00000017u, 0x00000d6cu, 0x00000d63u, 0x00000d66u, 0x00050080u, 0x00000017u, 0x00000d6eu, 0x00000d6cu, 0x00000d69u, 0x0003003eu, 0x00000d5cu, 0x00000d6eu, 0x0003003eu, 0x00000c94u, 0x00000d6eu, 0x00040071u, 0x00000006u, 0x00000cafu, 0x00000bd9u, 0x0004007cu, 0x00000017u, 0x00000cb0u, 0x00000cafu, 0x0003003eu, 0x00000c97u, 0x00000cb0u, 0x000500c4u, 0x00000017u, 0x00000d71u, 0x000000b5u, 0x00000cb0u, 0x0003003eu, 0x00000d6fu, 0x00000d71u, 0x0003003eu, 0x00000c96u, 0x00000d71u, 0x000500c7u, 0x00000017u, 0x00000cb6u, 0x00000d61u, 0x00000296u, 0x0003003eu, 0x00000c98u, 0x00000cb6u, 0x0003003eu, 0x00000c99u, 0x00000299u, 0x00050082u, 0x00000017u, 0x00000cbbu, 0x00000bcfu, 0x00000cb0u, 0x0008000cu, 0x00000017u, 0x00000cbcu, 0x00000001u, 0x0000002du, 0x00000cbbu, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x00000cbdu, 0x00000cbcu, 0x0004007cu, 0x00000008u, 0x00000cbeu, 0x00000cbdu, 0x00050041u, 0x00000046u, 0x00000cbfu, 0x00000b70u, 0x00000198u, 0x0003003eu, 0x00000cbfu, 0x00000cbeu, 0x00050082u, 0x00000017u, 0x00000cc4u, 0x00000cb0u, 0x00000bcfu, 0x0008000cu, 0x00000017u, 0x00000cc5u, 0x00000001u, 0x0000002du, 0x00000cc4u, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x00000cc6u, 0x00000cc5u, 0x0004007cu, 0x00000008u, 0x00000cc7u, 0x00000cc6u, 0x00050041u, 0x00000046u, 0x00000cc8u, 0x00000b70u, 0x000001bcu, 0x0003003eu, 0x00000cc8u, 0x00000cc7u, 0x000500b1u, 0x00000034u, 0x00000ccau, 0x00000cb6u, 0x000000bbu, 0x000300f7u, 0x00000ccbu, 0x00000000u, 0x000400fau, 0x00000ccau, 0x00000cccu, 0x00000ccbu, 0x000200f8u, 0x00000cccu, 0x000500abu, 0x00000034u, 0x00000cceu, 0x00000d71u, 0x000002b1u, 0x000300f7u, 0x00000ccfu, 0x00000000u, 0x000400fau, 0x00000cceu, 0x00000cd0u, 0x00000cd1u, 0x000200f8u, 0x00000cd1u, 0x0003003eu, 0x00000c99u, 0x000002bcu, 0x0003003eu, 0x00000c96u, 0x000002bdu, 0x000200f9u, 0x00000ccfu, 0x000200f8u, 0x00000cd0u, 0x000500c4u, 0x00000017u, 0x00000cd3u, 0x00000d71u, 0x000000b5u, 0x000500c3u, 0x00000017u, 0x00000cd5u, 0x000002b7u, 0x00000cb6u, 0x0007000cu, 0x00000017u, 0x00000cd6u, 0x00000001u, 0x0000002au, 0x00000cd3u, 0x00000cd5u, 0x0003003eu, 0x00000c96u, 0x00000cd6u, 0x000200f9u, 0x00000ccfu, 0x000200f8u, 0x00000ccfu, 0x000700f5u, 0x00000017u, 0x000012d8u, 0x00000cd6u, 0x00000cd0u, 0x000002bdu, 0x00000cd1u, 0x000600a9u, 0x00000034u, 0x000019d2u, 0x00000cceu, 0x00000299u, 0x000002bcu, 0x000200f9u, 0x00000ccbu, 0x000200f8u, 0x00000ccbu, 0x000700f5u, 0x00000034u, 0x000012dbu, 0x00000299u, 0x00000caau, 0x000019d2u, 0x00000ccfu, 0x000700f5u, 0x00000017u, 0x000012d7u, 0x00000d71u, 0x00000caau, 0x000012d8u, 0x00000ccfu, 0x000500c5u, 0x00000017u, 0x00000cd9u, 0x00000bcbu, 0x000012d7u, 0x0003003eu, 0x00000c9bu, 0x00000cd9u, 0x000500abu, 0x00000034u, 0x00000d74u, 0x00000cd9u, 0x000000abu, 0x000300f7u, 0x00000d75u, 0x00000000u, 0x000400fau, 0x00000d74u, 0x00000d76u, 0x00000d75u, 0x000200f8u, 0x00000d76u, 0x0006000cu, 0x00000017u, 0x00000d78u, 0x00000001u, 0x0000004au, 0x00000cd9u, 0x000500c4u, 0x00000017u, 0x00000d79u, 0x000000b5u, 0x00000d78u, 0x0003003eu, 0x00000c9bu, 0x00000d79u, 0x000200f9u, 0x00000d75u, 0x000200f8u, 0x00000d75u, 0x000700f5u, 0x00000017u, 0x000012d9u, 0x00000cd9u, 0x00000ccbu, 0x00000d79u, 0x00000d76u, 0x0003003eu, 0x00000d72u, 0x000012d9u, 0x0003003eu, 0x00000c9au, 0x000012d9u, 0x0003003eu, 0x00000c9cu, 0x000012d9u, 0x000500c4u, 0x00000017u, 0x00000cddu, 0x000012d9u, 0x000000bbu, 0x0003003eu, 0x00000c9au, 0x00000cddu, 0x000400a8u, 0x00000034u, 0x00000cdfu, 0x000012dbu, 0x000300f7u, 0x00000ce0u, 0x00000000u, 0x000400fau, 0x00000cdfu, 0x00000ce1u, 0x00000ce0u, 0x000200f8u, 0x00000ce1u, 0x00050080u, 0x00000017u, 0x00000ce4u, 0x00000b8fu, 0x00000cddu, 0x000500afu, 0x00000034u, 0x00000ce6u, 0x00000ce4u, 0x00000d6eu, 0x000200f9u, 0x00000ce0u, 0x000200f8u, 0x00000ce0u, 0x000700f5u, 0x00000034u, 0x00000ce7u, 0x000012dbu, 0x00000d75u, 0x00000ce6u, 0x00000ce1u, 0x0003003eu, 0x00000c9du, 0x00000ce7u, 0x0003003eu, 0x00000c9eu, 0x00000cebu, 0x000400a8u, 0x00000034u, 0x00000cedu, 0x00000ba6u, 0x000300f7u, 0x00000ceeu, 0x00000000u, 0x000400fau, 0x00000cedu, 0x00000cefu, 0x00000ceeu, 0x000200f8u, 0x00000cefu, 0x000400a8u, 0x00000034u, 0x00000cf1u, 0x00000cebu, 0x000500a7u, 0x00000034u, 0x00000cf3u, 0x00000cf1u, 0x00000bbeu, 0x000500a7u, 0x00000034u, 0x00000cf5u, 0x00000cf3u, 0x00000ce7u, 0x000200f9u, 0x00000ceeu, 0x000200f8u, 0x00000ceeu, 0x000700f5u, 0x00000034u, 0x00000cf6u, 0x00000ba6u, 0x00000ce0u, 0x00000cf5u, 0x00000cefu, 0x0003003eu, 0x00000b6eu, 0x00000cf6u, 0x0003003eu, 0x00000b6fu, 0x00000cebu, 0x0003003eu, 0x00000c9fu, 0x00000299u, 0x000500aau, 0x00000034u, 0x00000cf9u, 0x00000d6eu, 0x0000014bu, 0x0003003eu, 0x00000ca0u, 0x00000cf9u, 0x000500b1u, 0x00000034u, 0x00000cfcu, 0x00000b8fu, 0x00000d6eu, 0x0003003eu, 0x00000ca1u, 0x00000cfcu, 0x00050082u, 0x00000017u, 0x00000cffu, 0x00000b8fu, 0x00000cddu, 0x0003003eu, 0x00000ca2u, 0x00000cffu, 0x000500b3u, 0x00000034u, 0x00000d03u, 0x00000cffu, 0x00000d6eu, 0x000500a6u, 0x00000034u, 0x00000d04u, 0x000012dbu, 0x00000d03u, 0x0003003eu, 0x00000ca3u, 0x00000d04u, 0x000300f7u, 0x00000d06u, 0x00000000u, 0x000b00fbu, 0x00000bd6u, 0x00000d06u, 0x00000000u, 0x00000d07u, 0x00000001u, 0x00000d08u, 0x00000002u, 0x00000d09u, 0x00000003u, 0x00000d0au, 0x000200f8u, 0x00000d0au, 0x000500a7u, 0x00000034u, 0x00000d3du, 0x00000ce7u, 0x00000d04u, 0x000400a8u, 0x00000034u, 0x00000d3fu, 0x00000cf9u, 0x000500a7u, 0x00000034u, 0x00000d40u, 0x00000d3du, 0x00000d3fu, 0x0003003eu, 0x00000c9fu, 0x00000d40u, 0x000200f9u, 0x00000d06u, 0x000200f8u, 0x00000d09u, 0x000500a6u, 0x00000034u, 0x00000d3au, 0x00000cfcu, 0x00000cf9u, 0x0003003eu, 0x00000c9fu, 0x00000d3au, 0x000200f9u, 0x00000d06u, 0x000200f8u, 0x00000d08u, 0x000400a8u, 0x00000034u, 0x00000d15u, 0x00000cfcu, 0x000400a8u, 0x00000034u, 0x00000d17u, 0x00000ce7u, 0x000500a6u, 0x00000034u, 0x00000d18u, 0x00000d15u, 0x00000d17u, 0x000400a8u, 0x00000034u, 0x00000d1au, 0x00000cebu, 0x000500a6u, 0x00000034u, 0x00000d1bu, 0x00000d18u, 0x00000d1au, 0x000300f7u, 0x00000d1cu, 0x00000000u, 0x000400fau, 0x00000d1bu, 0x00000d1du, 0x00000d1eu, 0x000200f8u, 0x00000d1eu, 0x000500c7u, 0x00000017u, 0x00000d29u, 0x000012d9u, 0x000002bdu, 0x0003003eu, 0x00000ca4u, 0x00000d29u, 0x0006000cu, 0x00000017u, 0x00000d7du, 0x00000001u, 0x0000004au, 0x00000d29u, 0x0007000cu, 0x00000017u, 0x00000d7eu, 0x00000001u, 0x0000002au, 0x00000d7du, 0x000000abu, 0x0003003eu, 0x00000d7bu, 0x00000d7eu, 0x0003003eu, 0x00000c9cu, 0x00000d7eu, 0x000500c3u, 0x00000017u, 0x00000d2du, 0x00000d6eu, 0x00000d7eu, 0x000500c3u, 0x00000017u, 0x00000d30u, 0x00000b8fu, 0x00000d7eu, 0x00050082u, 0x00000017u, 0x00000d31u, 0x00000d2du, 0x00000d30u, 0x000500c7u, 0x00000017u, 0x00000d32u, 0x00000d31u, 0x00000296u, 0x0003003eu, 0x00000ca5u, 0x00000d32u, 0x00050084u, 0x00000017u, 0x00000d35u, 0x00000d32u, 0x00000b96u, 0x000500c3u, 0x00000017u, 0x00000d36u, 0x00000d35u, 0x000000bbu, 0x0007000cu, 0x00000017u, 0x00000d37u, 0x00000001u, 0x00000027u, 0x00000d36u, 0x000000cau, 0x0003003eu, 0x00000b68u, 0x00000d37u, 0x0003003eu, 0x00000c9fu, 0x000002bcu, 0x000200f9u, 0x00000d1cu, 0x000200f8u, 0x00000d1du, 0x000400a8u, 0x00000034u, 0x00000d20u, 0x00000cf9u, 0x000300f7u, 0x00000d21u, 0x00000000u, 0x000400fau, 0x00000d20u, 0x00000d22u, 0x00000d21u, 0x000200f8u, 0x00000d22u, 0x000600a9u, 0x00000034u, 0x00000d26u, 0x00000cebu, 0x00000cfcu, 0x00000d04u, 0x000200f9u, 0x00000d21u, 0x000200f8u, 0x00000d21u, 0x000700f5u, 0x00000034u, 0x00000d27u, 0x00000cf9u, 0x00000d1du, 0x00000d26u, 0x00000d22u, 0x0003003eu, 0x00000c9fu, 0x00000d27u, 0x000200f9u, 0x00000d1cu, 0x000200f8u, 0x00000d1cu, 0x000700f5u, 0x00000017u, 0x0000130bu, 0x00000b96u, 0x00000d21u, 0x00000d37u, 0x00000d1eu, 0x000700f5u, 0x00000034u, 0x00001307u, 0x00000d27u, 0x00000d21u, 0x000002bcu, 0x00000d1eu, 0x000200f9u, 0x00000d06u, 0x000200f8u, 0x00000d07u, 0x000400a8u, 0x00000034u, 0x00000d0cu, 0x00000cf9u, 0x000300f7u, 0x00000d0du, 0x00000000u, 0x000400fau, 0x00000d0cu, 0x00000d0eu, 0x00000d0du, 0x000200f8u, 0x00000d0eu, 0x000600a9u, 0x00000034u, 0x00000d12u, 0x00000cebu, 0x00000cfcu, 0x00000d04u, 0x000200f9u, 0x00000d0du, 0x000200f8u, 0x00000d0du, 0x000700f5u, 0x00000034u, 0x00000d13u, 0x00000cf9u, 0x00000d07u, 0x00000d12u, 0x00000d0eu, 0x0003003eu, 0x00000c9fu, 0x00000d13u, 0x000200f9u, 0x00000d06u, 0x000200f8u, 0x00000d06u, 0x000d00f5u, 0x00000017u, 0x00001309u, 0x00000b96u, 0x00000ceeu, 0x00000b96u, 0x00000d0du, 0x0000130bu, 0x00000d1cu, 0x00000b96u, 0x00000d09u, 0x00000b96u, 0x00000d0au, 0x000d00f5u, 0x00000034u, 0x00001306u, 0x00000299u, 0x00000ceeu, 0x00000d13u, 0x00000d0du, 0x00001307u, 0x00000d1cu, 0x00000d3au, 0x00000d09u, 0x00000d40u, 0x00000d0au, 0x000200f9u, 0x00000ca9u, 0x000200f8u, 0x00000ca9u, 0x000700f5u, 0x00000034u, 0x0000130eu, 0x00000cf6u, 0x00000d06u, 0x00000d54u, 0x00000d4eu, 0x000700f5u, 0x00000017u, 0x00001308u, 0x00001309u, 0x00000d06u, 0x00000b96u, 0x00000d4eu, 0x000700f5u, 0x00000034u, 0x00001305u, 0x00001306u, 0x00000d06u, 0x000002bcu, 0x00000d4eu, 0x0003003eu, 0x00000ca7u, 0x00001305u, 0x0003003eu, 0x00000b4cu, 0x00001308u, 0x0003003eu, 0x00000b60u, 0x0000130eu, 0x0003003eu, 0x00000b61u, 0x00000cebu, 0x0004003du, 0x00000036u, 0x00000be2u, 0x00000b70u, 0x0003003eu, 0x00000b62u, 0x00000be2u, 0x0003003eu, 0x00000b5fu, 0x00001305u, 0x000300f7u, 0x00000be4u, 0x00000000u, 0x000400fau, 0x00001305u, 0x00000be5u, 0x00000be4u, 0x000200f8u, 0x00000be5u, 0x000400a8u, 0x00000034u, 0x00000be7u, 0x00000bbeu, 0x000500abu, 0x00000034u, 0x00000be9u, 0x00001308u, 0x000000abu, 0x000500a6u, 0x00000034u, 0x00000beau, 0x00000be7u, 0x00000be9u, 0x000200f9u, 0x00000be4u, 0x000200f8u, 0x00000be4u, 0x000700f5u, 0x00000034u, 0x00000bebu, 0x00001305u, 0x00000ca9u, 0x00000beau, 0x00000be5u, 0x000300f7u, 0x00000becu, 0x00000000u, 0x000400fau, 0x00000bebu, 0x00000bedu, 0x00000becu, 0x000200f8u, 0x00000bedu, 0x0004003du, 0x00000009u, 0x00000befu, 0x00000b5cu, 0x00080050u, 0x00000031u, 0x00000bf5u, 0x000008d4u, 0x00000befu, 0x00000c4fu, 0x00000c51u, 0x000008eau, 0x0003003eu, 0x000011e4u, 0x000008d4u, 0x0003003eu, 0x000011e5u, 0x00000befu, 0x0003003eu, 0x000011e6u, 0x00000c4fu, 0x0003003eu, 0x000011e7u, 0x00000c51u, 0x0003003eu, 0x000011e8u, 0x000008eau, 0x0003003eu, 0x00000b72u, 0x00000c63u, 0x000300f7u, 0x00000bf9u, 0x00000000u, 0x000400fau, 0x00000bbau, 0x00000bfau, 0x00000bf9u, 0x000200f8u, 0x00000bfau, 0x0003003eu, 0x000011fau, 0x000008d4u, 0x0003003eu, 0x000011fbu, 0x00000befu, 0x0003003eu, 0x000011fcu, 0x00000c4fu, 0x0003003eu, 0x000011fdu, 0x00000c51u, 0x0003003eu, 0x000011feu, 0x000008eau, 0x0003003eu, 0x00000b74u, 0x00000c63u, 0x0003003eu, 0x00000b75u, 0x00000ba6u, 0x0003003eu, 0x00000b76u, 0x0000130eu, 0x0003003eu, 0x00000b77u, 0x00000bb6u, 0x0003003eu, 0x00000b78u, 0x00000cebu, 0x0003003eu, 0x00000b79u, 0x00000be2u, 0x0003003eu, 0x00000b7au, 0x00000299u, 0x0003003eu, 0x00000d7fu, 0x00000299u, 0x00050041u, 0x00000046u, 0x00000d8au, 0x00000b74u, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000d8bu, 0x00000d8au, 0x00040071u, 0x00000006u, 0x00000d8cu, 0x00000d8bu, 0x0004007cu, 0x00000017u, 0x00000d8du, 0x00000d8cu, 0x000300f7u, 0x00000d8eu, 0x00000000u, 0x000b00fbu, 0x00000d8du, 0x00000d8eu, 0x00000000u, 0x00000d8fu, 0x00000001u, 0x00000d90u, 0x00000002u, 0x00000d91u, 0x00000003u, 0x00000d92u, 0x000200f8u, 0x00000d92u, 0x0004003du, 0x00000009u, 0x00000d9du, 0x000011fcu, 0x0008004fu, 0x0000001bu, 0x00000d9eu, 0x00000d9du, 0x00000d9du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d81u, 0x00000d9eu, 0x000200f9u, 0x00000d8eu, 0x000200f8u, 0x00000d91u, 0x0008004fu, 0x0000001bu, 0x00000d9bu, 0x00000c51u, 0x00000c51u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d81u, 0x00000d9bu, 0x000200f9u, 0x00000d8eu, 0x000200f8u, 0x00000d90u, 0x0004003du, 0x00000009u, 0x00000d97u, 0x000011fbu, 0x0008004fu, 0x0000001bu, 0x00000d98u, 0x00000d97u, 0x00000d97u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d81u, 0x00000d98u, 0x000200f9u, 0x00000d8eu, 0x000200f8u, 0x00000d8fu, 0x0004003du, 0x00000009u, 0x00000d94u, 0x000011fau, 0x0008004fu, 0x0000001bu, 0x00000d95u, 0x00000d94u, 0x00000d94u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d81u, 0x00000d95u, 0x000200f9u, 0x00000d8eu, 0x000200f8u, 0x00000d8eu, 0x000d00f5u, 0x0000001bu, 0x000013e5u, 0x000013efu, 0x00000bfau, 0x00000d95u, 0x00000d8fu, 0x00000d98u, 0x00000d90u, 0x00000d9bu, 0x00000d91u, 0x00000d9eu, 0x00000d92u, 0x00050041u, 0x00000046u, 0x00000da9u, 0x00000b74u, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000daau, 0x00000da9u, 0x00040071u, 0x00000006u, 0x00000dabu, 0x00000daau, 0x0004007cu, 0x00000017u, 0x00000dacu, 0x00000dabu, 0x000300f7u, 0x00000dadu, 0x00000000u, 0x000b00fbu, 0x00000dacu, 0x00000dadu, 0x00000000u, 0x00000daeu, 0x00000001u, 0x00000dafu, 0x00000002u, 0x00000db0u, 0x00000003u, 0x00000db1u, 0x000200f8u, 0x00000db1u, 0x0004003du, 0x00000009u, 0x00000dbcu, 0x000011fcu, 0x0008004fu, 0x0000001bu, 0x00000dbdu, 0x00000dbcu, 0x00000dbcu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d82u, 0x00000dbdu, 0x000200f9u, 0x00000dadu, 0x000200f8u, 0x00000db0u, 0x0008004fu, 0x0000001bu, 0x00000dbau, 0x00000c51u, 0x00000c51u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d82u, 0x00000dbau, 0x000200f9u, 0x00000dadu, 0x000200f8u, 0x00000dafu, 0x0004003du, 0x00000009u, 0x00000db6u, 0x000011fbu, 0x0008004fu, 0x0000001bu, 0x00000db7u, 0x00000db6u, 0x00000db6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d82u, 0x00000db7u, 0x000200f9u, 0x00000dadu, 0x000200f8u, 0x00000daeu, 0x0004003du, 0x00000009u, 0x00000db3u, 0x000011fau, 0x0008004fu, 0x0000001bu, 0x00000db4u, 0x00000db3u, 0x00000db3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d82u, 0x00000db4u, 0x000200f9u, 0x00000dadu, 0x000200f8u, 0x00000dadu, 0x00050041u, 0x00000046u, 0x00000dddu, 0x00000b74u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000ddeu, 0x00000dddu, 0x00040071u, 0x00000006u, 0x00000ddfu, 0x00000ddeu, 0x0004007cu, 0x00000017u, 0x00000de0u, 0x00000ddfu, 0x000300f7u, 0x00000de1u, 0x00000000u, 0x000b00fbu, 0x00000de0u, 0x00000de1u, 0x00000000u, 0x00000de2u, 0x00000001u, 0x00000de3u, 0x00000002u, 0x00000de4u, 0x00000003u, 0x00000de5u, 0x000200f8u, 0x00000de5u, 0x0003003eu, 0x00000d83u, 0x000001eau, 0x000200f9u, 0x00000de1u, 0x000200f8u, 0x00000de4u, 0x0003003eu, 0x00000d83u, 0x000008eau, 0x000200f9u, 0x00000de1u, 0x000200f8u, 0x00000de3u, 0x00050041u, 0x00000046u, 0x00001206u, 0x000011fcu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000de9u, 0x00001206u, 0x0003003eu, 0x00000d83u, 0x00000de9u, 0x000200f9u, 0x00000de1u, 0x000200f8u, 0x00000de2u, 0x00050041u, 0x00000046u, 0x00001205u, 0x000011fau, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000de7u, 0x00001205u, 0x0003003eu, 0x00000d83u, 0x00000de7u, 0x000200f9u, 0x00000de1u, 0x000200f8u, 0x00000de1u, 0x000d00f5u, 0x00000008u, 0x000013a5u, 0x000013b3u, 0x00000dadu, 0x00000de7u, 0x00000de2u, 0x00000de9u, 0x00000de3u, 0x000008eau, 0x00000de4u, 0x000001eau, 0x00000de5u, 0x00050041u, 0x00000046u, 0x00000decu, 0x00000b74u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000dedu, 0x00000decu, 0x00040071u, 0x00000006u, 0x00000deeu, 0x00000dedu, 0x0004007cu, 0x00000017u, 0x00000defu, 0x00000deeu, 0x000300f7u, 0x00000df0u, 0x00000000u, 0x000b00fbu, 0x00000defu, 0x00000df0u, 0x00000000u, 0x00000df1u, 0x00000001u, 0x00000df2u, 0x00000002u, 0x00000df3u, 0x00000003u, 0x00000df4u, 0x000200f8u, 0x00000df4u, 0x0003003eu, 0x00000d84u, 0x000001eau, 0x000200f9u, 0x00000df0u, 0x000200f8u, 0x00000df3u, 0x0003003eu, 0x00000d84u, 0x000001cfu, 0x000200f9u, 0x00000df0u, 0x000200f8u, 0x00000df2u, 0x00050041u, 0x00000046u, 0x00001207u, 0x000011fbu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000df9u, 0x00001207u, 0x0003003eu, 0x00000d84u, 0x00000df9u, 0x000200f9u, 0x00000df0u, 0x000200f8u, 0x00000df1u, 0x000400c8u, 0x00000008u, 0x00000df6u, 0x000013a5u, 0x000500c7u, 0x00000008u, 0x00000df7u, 0x00000df6u, 0x000001cfu, 0x0003003eu, 0x00000d84u, 0x00000df7u, 0x000200f9u, 0x00000df0u, 0x000200f8u, 0x00000df0u, 0x000d00f5u, 0x00000008u, 0x000013c2u, 0x000013d1u, 0x00000de1u, 0x00000df7u, 0x00000df1u, 0x00000df9u, 0x00000df2u, 0x000001cfu, 0x00000df3u, 0x000001eau, 0x00000df4u, 0x000500c2u, 0x00000008u, 0x00000dfbu, 0x000013a5u, 0x00000201u, 0x0003003eu, 0x00000d83u, 0x00000dfbu, 0x000500c2u, 0x00000008u, 0x00000dfdu, 0x000013c2u, 0x00000201u, 0x0003003eu, 0x00000d84u, 0x00000dfdu, 0x0004003du, 0x00000008u, 0x00000dffu, 0x00000decu, 0x00040071u, 0x00000006u, 0x00000e00u, 0x00000dffu, 0x0004007cu, 0x00000017u, 0x00000e01u, 0x00000e00u, 0x000500aau, 0x00000034u, 0x00000e02u, 0x00000e01u, 0x000000b5u, 0x000300f7u, 0x00000e03u, 0x00000000u, 0x000400fau, 0x00000e02u, 0x00000e04u, 0x00000e03u, 0x000200f8u, 0x00000e04u, 0x00050041u, 0x00000046u, 0x00000e06u, 0x00000b79u, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000e07u, 0x00000e06u, 0x000500c2u, 0x00000008u, 0x00000e08u, 0x00000dfbu, 0x00000e07u, 0x000500c7u, 0x00000008u, 0x00000e09u, 0x00000e08u, 0x00000211u, 0x0003003eu, 0x00000d83u, 0x00000e09u, 0x00050041u, 0x00000046u, 0x00000e0bu, 0x00000b79u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000e0cu, 0x00000e0bu, 0x000500c2u, 0x00000008u, 0x00000e0du, 0x00000dfdu, 0x00000e0cu, 0x000500c5u, 0x00000008u, 0x00000e0eu, 0x00000e0du, 0x00000201u, 0x0003003eu, 0x00000d84u, 0x00000e0eu, 0x000200f9u, 0x00000e03u, 0x000200f8u, 0x00000e03u, 0x000700f5u, 0x00000008u, 0x000013fcu, 0x00000dfdu, 0x00000df0u, 0x00000e0eu, 0x00000e04u, 0x000700f5u, 0x00000008u, 0x000013deu, 0x00000dfbu, 0x00000df0u, 0x00000e09u, 0x00000e04u, 0x0004003du, 0x0000001bu, 0x00000e0fu, 0x00000d82u, 0x00040071u, 0x0000021cu, 0x00000e10u, 0x00000e0fu, 0x0004007cu, 0x00000218u, 0x00000e11u, 0x00000e10u, 0x00040071u, 0x0000000au, 0x00000e13u, 0x000013deu, 0x0004007cu, 0x0000000bu, 0x00000e14u, 0x00000e13u, 0x00060050u, 0x00000218u, 0x00000e15u, 0x00000e14u, 0x00000e14u, 0x00000e14u, 0x00050084u, 0x00000218u, 0x00000e16u, 0x00000e11u, 0x00000e15u, 0x00040071u, 0x0000021cu, 0x00000e18u, 0x000013e5u, 0x0004007cu, 0x00000218u, 0x00000e19u, 0x00000e18u, 0x00040071u, 0x0000000au, 0x00000e1bu, 0x000013fcu, 0x0004007cu, 0x0000000bu, 0x00000e1cu, 0x00000e1bu, 0x00050080u, 0x0000000bu, 0x00000e1du, 0x00000e1cu, 0x0000022au, 0x00060050u, 0x00000218u, 0x00000e1eu, 0x00000e1du, 0x00000e1du, 0x00000e1du, 0x00050084u, 0x00000218u, 0x00000e1fu, 0x00000e19u, 0x00000e1eu, 0x00050080u, 0x00000218u, 0x00000e20u, 0x00000e16u, 0x00000e1fu, 0x0003003eu, 0x00000d85u, 0x00000e20u, 0x0004003du, 0x00000218u, 0x00000e28u, 0x00000d85u, 0x000500c3u, 0x00000218u, 0x00000e2au, 0x00000e28u, 0x000019ceu, 0x00040072u, 0x0000012au, 0x00000e2bu, 0x00000e2au, 0x0004007cu, 0x0000001bu, 0x00000e2cu, 0x00000e2bu, 0x0003003eu, 0x00000d82u, 0x00000e2cu, 0x0004003du, 0x0000001bu, 0x00000e5eu, 0x00000d82u, 0x000500c7u, 0x0000001bu, 0x00000e60u, 0x00000e5eu, 0x000019cfu, 0x0003003eu, 0x00000d7fu, 0x000002bcu, 0x0003003eu, 0x00000d80u, 0x00000e60u, 0x0003003eu, 0x00000d87u, 0x00000e60u, 0x0009004fu, 0x00000009u, 0x00000c05u, 0x000008d4u, 0x00000e60u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000011e4u, 0x00000c05u, 0x0003003eu, 0x00000b72u, 0x00000c65u, 0x000200f9u, 0x00000bf9u, 0x000200f8u, 0x00000bf9u, 0x000700f5u, 0x0000001bu, 0x000018fau, 0x000013efu, 0x00000bedu, 0x000013e5u, 0x00000e03u, 0x000700f5u, 0x00000008u, 0x000018d2u, 0x000013d1u, 0x00000bedu, 0x000013fcu, 0x00000e03u, 0x000700f5u, 0x00000008u, 0x000018aau, 0x000013b3u, 0x00000bedu, 0x000013deu, 0x00000e03u, 0x000700f5u, 0x00000009u, 0x00001469u, 0x000008d4u, 0x00000bedu, 0x00000c05u, 0x00000e03u, 0x00070050u, 0x000019d3u, 0x000019d4u, 0x00000bbau, 0x00000bbau, 0x00000bbau, 0x00000bbau, 0x000600a9u, 0x00000009u, 0x000019d5u, 0x000019d4u, 0x00000c65u, 0x00000c63u, 0x00080050u, 0x00000031u, 0x000011f9u, 0x00001469u, 0x00000befu, 0x00000c4fu, 0x00000c51u, 0x000008eau, 0x0003003eu, 0x00001208u, 0x00001469u, 0x0003003eu, 0x00001209u, 0x00000befu, 0x0003003eu, 0x0000120au, 0x00000c4fu, 0x0003003eu, 0x0000120bu, 0x00000c51u, 0x0003003eu, 0x0000120cu, 0x000008eau, 0x0003003eu, 0x00000b7du, 0x000019d5u, 0x0003003eu, 0x00000b7eu, 0x00000ba6u, 0x0003003eu, 0x00000b7fu, 0x0000130eu, 0x0003003eu, 0x00000b80u, 0x00000bb6u, 0x0003003eu, 0x00000b81u, 0x00000cebu, 0x0003003eu, 0x00000b82u, 0x00000be2u, 0x0003003eu, 0x00000b83u, 0x000002bcu, 0x0003003eu, 0x00000e62u, 0x00000299u, 0x000300f7u, 0x00000e6bu, 0x00000000u, 0x000300fbu, 0x00000198u, 0x00000e6cu, 0x000200f8u, 0x00000e6cu, 0x00050041u, 0x00000046u, 0x00000e6du, 0x00000b7du, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000e6eu, 0x00000e6du, 0x00040071u, 0x00000006u, 0x00000e6fu, 0x00000e6eu, 0x0004007cu, 0x00000017u, 0x00000e70u, 0x00000e6fu, 0x000300f7u, 0x00000e71u, 0x00000000u, 0x000b00fbu, 0x00000e70u, 0x00000e71u, 0x00000000u, 0x00000e72u, 0x00000001u, 0x00000e73u, 0x00000002u, 0x00000e74u, 0x00000003u, 0x00000e75u, 0x000200f8u, 0x00000e75u, 0x0004003du, 0x00000009u, 0x00000e80u, 0x0000120au, 0x0008004fu, 0x0000001bu, 0x00000e81u, 0x00000e80u, 0x00000e80u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e64u, 0x00000e81u, 0x000200f9u, 0x00000e71u, 0x000200f8u, 0x00000e74u, 0x0008004fu, 0x0000001bu, 0x00000e7eu, 0x00000c51u, 0x00000c51u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e64u, 0x00000e7eu, 0x000200f9u, 0x00000e71u, 0x000200f8u, 0x00000e73u, 0x0004003du, 0x00000009u, 0x00000e7au, 0x00001209u, 0x0008004fu, 0x0000001bu, 0x00000e7bu, 0x00000e7au, 0x00000e7au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e64u, 0x00000e7bu, 0x000200f9u, 0x00000e71u, 0x000200f8u, 0x00000e72u, 0x0004003du, 0x00000009u, 0x00000e77u, 0x00001208u, 0x0008004fu, 0x0000001bu, 0x00000e78u, 0x00000e77u, 0x00000e77u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e64u, 0x00000e78u, 0x000200f9u, 0x00000e71u, 0x000200f8u, 0x00000e71u, 0x000d00f5u, 0x0000001bu, 0x00001516u, 0x00001521u, 0x00000e6cu, 0x00000e78u, 0x00000e72u, 0x00000e7bu, 0x00000e73u, 0x00000e7eu, 0x00000e74u, 0x00000e81u, 0x00000e75u, 0x000400a8u, 0x00000034u, 0x00000e87u, 0x00000cebu, 0x000500a7u, 0x00000034u, 0x00000e88u, 0x00000bb6u, 0x00000e87u, 0x000300f7u, 0x00000e89u, 0x00000000u, 0x000400fau, 0x00000e88u, 0x00000e8au, 0x00000e89u, 0x000200f8u, 0x00000e8au, 0x0003003eu, 0x00000e62u, 0x000002bcu, 0x0003003eu, 0x00000e63u, 0x00001516u, 0x000200f9u, 0x00000e6bu, 0x000200f8u, 0x00000e89u, 0x00050041u, 0x00000046u, 0x00000e8cu, 0x00000b7du, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000e8du, 0x00000e8cu, 0x00040071u, 0x00000006u, 0x00000e8eu, 0x00000e8du, 0x0004007cu, 0x00000017u, 0x00000e8fu, 0x00000e8eu, 0x000300f7u, 0x00000e90u, 0x00000000u, 0x000b00fbu, 0x00000e8fu, 0x00000e90u, 0x00000000u, 0x00000e91u, 0x00000001u, 0x00000e92u, 0x00000002u, 0x00000e93u, 0x00000003u, 0x00000e94u, 0x000200f8u, 0x00000e94u, 0x0004003du, 0x00000009u, 0x00000e9fu, 0x0000120au, 0x0008004fu, 0x0000001bu, 0x00000ea0u, 0x00000e9fu, 0x00000e9fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e65u, 0x00000ea0u, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e93u, 0x0008004fu, 0x0000001bu, 0x00000e9du, 0x00000c51u, 0x00000c51u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e65u, 0x00000e9du, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e92u, 0x0004003du, 0x00000009u, 0x00000e99u, 0x00001209u, 0x0008004fu, 0x0000001bu, 0x00000e9au, 0x00000e99u, 0x00000e99u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e65u, 0x00000e9au, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e91u, 0x0004003du, 0x00000009u, 0x00000e96u, 0x00001208u, 0x0008004fu, 0x0000001bu, 0x00000e97u, 0x00000e96u, 0x00000e96u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e65u, 0x00000e97u, 0x000200f9u, 0x00000e90u, 0x000200f8u, 0x00000e90u, 0x000400a8u, 0x00000034u, 0x00000ea5u, 0x0000130eu, 0x000400a8u, 0x00000034u, 0x00000ea6u, 0x00000ea5u, 0x000300f7u, 0x00000ea7u, 0x00000000u, 0x000400fau, 0x00000ea6u, 0x00000ea8u, 0x00000ea7u, 0x000200f8u, 0x00000ea8u, 0x00050041u, 0x00000046u, 0x00000ea9u, 0x00000b7du, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000eaau, 0x00000ea9u, 0x00040071u, 0x00000006u, 0x00000eabu, 0x00000eaau, 0x0004007cu, 0x00000017u, 0x00000eacu, 0x00000eabu, 0x000500aau, 0x00000034u, 0x00000eadu, 0x00000eacu, 0x000000abu, 0x000300f7u, 0x00000eaeu, 0x00000000u, 0x000400fau, 0x00000eadu, 0x00000eafu, 0x00000eaeu, 0x000200f8u, 0x00000eafu, 0x00050041u, 0x00000046u, 0x00000eb0u, 0x00000b7du, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000eb1u, 0x00000eb0u, 0x00040071u, 0x00000006u, 0x00000eb2u, 0x00000eb1u, 0x0004007cu, 0x00000017u, 0x00000eb3u, 0x00000eb2u, 0x000500aau, 0x00000034u, 0x00000eb4u, 0x00000eb3u, 0x000000abu, 0x000200f9u, 0x00000eaeu, 0x000200f8u, 0x00000eaeu, 0x000700f5u, 0x00000034u, 0x00000eb5u, 0x00000eadu, 0x00000ea8u, 0x00000eb4u, 0x00000eafu, 0x000300f7u, 0x00000eb6u, 0x00000000u, 0x000400fau, 0x00000eb5u, 0x00000eb7u, 0x00000eb6u, 0x000200f8u, 0x00000eb7u, 0x00050041u, 0x00000046u, 0x00001212u, 0x00001208u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000eb9u, 0x00001212u, 0x000500aau, 0x00000034u, 0x00000ebau, 0x00000eb9u, 0x000001cfu, 0x000200f9u, 0x00000eb6u, 0x000200f8u, 0x00000eb6u, 0x000700f5u, 0x00000034u, 0x00000ebbu, 0x00000eb5u, 0x00000eaeu, 0x00000ebau, 0x00000eb7u, 0x000200f9u, 0x00000ea7u, 0x000200f8u, 0x00000ea7u, 0x000700f5u, 0x00000034u, 0x00000ebcu, 0x00000ea5u, 0x00000e90u, 0x00000ebbu, 0x00000eb6u, 0x000300f7u, 0x00000ebdu, 0x00000000u, 0x000400fau, 0x00000ebcu, 0x00000ebeu, 0x00000ebdu, 0x000200f8u, 0x00000ebeu, 0x0004003du, 0x0000001bu, 0x00000ebfu, 0x00000e65u, 0x0003003eu, 0x00000e62u, 0x000002bcu, 0x0003003eu, 0x00000e63u, 0x00000ebfu, 0x000200f9u, 0x00000e6bu, 0x000200f8u, 0x00000ebdu, 0x00050041u, 0x00000046u, 0x00000ec0u, 0x00000b7du, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000ec1u, 0x00000ec0u, 0x00040071u, 0x00000006u, 0x00000ec2u, 0x00000ec1u, 0x0004007cu, 0x00000017u, 0x00000ec3u, 0x00000ec2u, 0x000300f7u, 0x00000ec4u, 0x00000000u, 0x000b00fbu, 0x00000ec3u, 0x00000ec4u, 0x00000000u, 0x00000ec5u, 0x00000001u, 0x00000ec6u, 0x00000002u, 0x00000ec7u, 0x00000003u, 0x00000ec8u, 0x000200f8u, 0x00000ec8u, 0x0003003eu, 0x00000e66u, 0x000001eau, 0x000200f9u, 0x00000ec4u, 0x000200f8u, 0x00000ec7u, 0x0003003eu, 0x00000e66u, 0x000008eau, 0x000200f9u, 0x00000ec4u, 0x000200f8u, 0x00000ec6u, 0x00050041u, 0x00000046u, 0x00001214u, 0x0000120au, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000eccu, 0x00001214u, 0x0003003eu, 0x00000e66u, 0x00000eccu, 0x000200f9u, 0x00000ec4u, 0x000200f8u, 0x00000ec5u, 0x00050041u, 0x00000046u, 0x00001213u, 0x00001208u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000ecau, 0x00001213u, 0x0003003eu, 0x00000e66u, 0x00000ecau, 0x000200f9u, 0x00000ec4u, 0x000200f8u, 0x00000ec4u, 0x000d00f5u, 0x00000008u, 0x000014bdu, 0x000014ccu, 0x00000ebdu, 0x00000ecau, 0x00000ec5u, 0x00000eccu, 0x00000ec6u, 0x000008eau, 0x00000ec7u, 0x000001eau, 0x00000ec8u, 0x00050041u, 0x00000046u, 0x00000ecfu, 0x00000b7du, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000ed0u, 0x00000ecfu, 0x00040071u, 0x00000006u, 0x00000ed1u, 0x00000ed0u, 0x0004007cu, 0x00000017u, 0x00000ed2u, 0x00000ed1u, 0x000300f7u, 0x00000ed3u, 0x00000000u, 0x000b00fbu, 0x00000ed2u, 0x00000ed3u, 0x00000000u, 0x00000ed4u, 0x00000001u, 0x00000ed5u, 0x00000002u, 0x00000ed6u, 0x00000003u, 0x00000ed7u, 0x000200f8u, 0x00000ed7u, 0x0003003eu, 0x00000e67u, 0x000001eau, 0x000200f9u, 0x00000ed3u, 0x000200f8u, 0x00000ed6u, 0x0003003eu, 0x00000e67u, 0x000001cfu, 0x000200f9u, 0x00000ed3u, 0x000200f8u, 0x00000ed5u, 0x00050041u, 0x00000046u, 0x00001215u, 0x00001209u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000edcu, 0x00001215u, 0x0003003eu, 0x00000e67u, 0x00000edcu, 0x000200f9u, 0x00000ed3u, 0x000200f8u, 0x00000ed4u, 0x000400c8u, 0x00000008u, 0x00000ed9u, 0x000014bdu, 0x000500c7u, 0x00000008u, 0x00000edau, 0x00000ed9u, 0x000001cfu, 0x0003003eu, 0x00000e67u, 0x00000edau, 0x000200f9u, 0x00000ed3u, 0x000200f8u, 0x00000ed3u, 0x000d00f5u, 0x00000008u, 0x000014e6u, 0x000014f6u, 0x00000ec4u, 0x00000edau, 0x00000ed4u, 0x00000edcu, 0x00000ed5u, 0x000001cfu, 0x00000ed6u, 0x000001eau, 0x00000ed7u, 0x000500c2u, 0x00000008u, 0x00000edeu, 0x000014bdu, 0x00000201u, 0x0003003eu, 0x00000e66u, 0x00000edeu, 0x000500c2u, 0x00000008u, 0x00000ee0u, 0x000014e6u, 0x00000201u, 0x0003003eu, 0x00000e67u, 0x00000ee0u, 0x0004003du, 0x00000008u, 0x00000ee2u, 0x00000ecfu, 0x00040071u, 0x00000006u, 0x00000ee3u, 0x00000ee2u, 0x0004007cu, 0x00000017u, 0x00000ee4u, 0x00000ee3u, 0x000500aau, 0x00000034u, 0x00000ee5u, 0x00000ee4u, 0x000000b5u, 0x000300f7u, 0x00000ee6u, 0x00000000u, 0x000400fau, 0x00000ee5u, 0x00000ee7u, 0x00000ee6u, 0x000200f8u, 0x00000ee7u, 0x00050041u, 0x00000046u, 0x00000ee9u, 0x00000b82u, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000eeau, 0x00000ee9u, 0x000500c2u, 0x00000008u, 0x00000eebu, 0x00000edeu, 0x00000eeau, 0x000500c7u, 0x00000008u, 0x00000eecu, 0x00000eebu, 0x00000211u, 0x0003003eu, 0x00000e66u, 0x00000eecu, 0x00050041u, 0x00000046u, 0x00000eeeu, 0x00000b82u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000eefu, 0x00000eeeu, 0x000500c2u, 0x00000008u, 0x00000ef0u, 0x00000ee0u, 0x00000eefu, 0x000500c5u, 0x00000008u, 0x00000ef1u, 0x00000ef0u, 0x00000201u, 0x0003003eu, 0x00000e67u, 0x00000ef1u, 0x000200f9u, 0x00000ee6u, 0x000200f8u, 0x00000ee6u, 0x000700f5u, 0x00000008u, 0x0000153au, 0x00000ee0u, 0x00000ed3u, 0x00000ef1u, 0x00000ee7u, 0x000700f5u, 0x00000008u, 0x0000150fu, 0x00000edeu, 0x00000ed3u, 0x00000eecu, 0x00000ee7u, 0x0004003du, 0x0000001bu, 0x00000ef2u, 0x00000e65u, 0x00040071u, 0x0000021cu, 0x00000ef3u, 0x00000ef2u, 0x0004007cu, 0x00000218u, 0x00000ef4u, 0x00000ef3u, 0x00040071u, 0x0000000au, 0x00000ef6u, 0x0000150fu, 0x0004007cu, 0x0000000bu, 0x00000ef7u, 0x00000ef6u, 0x00060050u, 0x00000218u, 0x00000ef8u, 0x00000ef7u, 0x00000ef7u, 0x00000ef7u, 0x00050084u, 0x00000218u, 0x00000ef9u, 0x00000ef4u, 0x00000ef8u, 0x00040071u, 0x0000021cu, 0x00000efbu, 0x00001516u, 0x0004007cu, 0x00000218u, 0x00000efcu, 0x00000efbu, 0x00040071u, 0x0000000au, 0x00000efeu, 0x0000153au, 0x0004007cu, 0x0000000bu, 0x00000effu, 0x00000efeu, 0x00050080u, 0x0000000bu, 0x00000f00u, 0x00000effu, 0x0000022au, 0x00060050u, 0x00000218u, 0x00000f01u, 0x00000f00u, 0x00000f00u, 0x00000f00u, 0x00050084u, 0x00000218u, 0x00000f02u, 0x00000efcu, 0x00000f01u, 0x00050080u, 0x00000218u, 0x00000f03u, 0x00000ef9u, 0x00000f02u, 0x0003003eu, 0x00000e68u, 0x00000f03u, 0x000500a6u, 0x00000034u, 0x00000f07u, 0x00000299u, 0x00000ba6u, 0x000300f7u, 0x00000f08u, 0x00000000u, 0x000400fau, 0x00000f07u, 0x00000f09u, 0x00000f0au, 0x000200f8u, 0x00000f0au, 0x00040071u, 0x00000006u, 0x00000f11u, 0x0000150fu, 0x0004007cu, 0x00000017u, 0x00000f12u, 0x00000f11u, 0x000500c3u, 0x00000017u, 0x00000f13u, 0x00000f12u, 0x000000b8u, 0x00040071u, 0x00000006u, 0x00000f15u, 0x0000153au, 0x0004007cu, 0x00000017u, 0x00000f16u, 0x00000f15u, 0x000500c3u, 0x00000017u, 0x00000f17u, 0x00000f16u, 0x000000b8u, 0x00050080u, 0x00000017u, 0x00000f18u, 0x00000f13u, 0x00000f17u, 0x00050080u, 0x00000017u, 0x00000f19u, 0x00000f18u, 0x000000b5u, 0x0003003eu, 0x00000e69u, 0x00000f19u, 0x0004003du, 0x00000218u, 0x00000f1au, 0x00000e68u, 0x000500c3u, 0x00000218u, 0x00000f1cu, 0x00000f1au, 0x000019d0u, 0x0003003eu, 0x00000e68u, 0x00000f1cu, 0x0004003du, 0x00000218u, 0x00000f1du, 0x00000e68u, 0x000500c7u, 0x00000218u, 0x00000f1fu, 0x00000f1du, 0x000019d1u, 0x0003003eu, 0x00000e68u, 0x00000f1fu, 0x0004003du, 0x0000024fu, 0x00000f20u, 0x00000251u, 0x000500c4u, 0x00000017u, 0x00000f22u, 0x00000f19u, 0x000000d3u, 0x00050041u, 0x00000255u, 0x00000f23u, 0x00000e68u, 0x00000198u, 0x0004003du, 0x0000000bu, 0x00000f24u, 0x00000f23u, 0x00040072u, 0x00000017u, 0x00000f25u, 0x00000f24u, 0x000500c5u, 0x00000017u, 0x00000f26u, 0x00000f22u, 0x00000f25u, 0x0005005fu, 0x0000025au, 0x00000f27u, 0x00000f20u, 0x00000f26u, 0x00050051u, 0x00000006u, 0x00000f28u, 0x00000f27u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000f29u, 0x00000f28u, 0x00050041u, 0x00000046u, 0x00000f2au, 0x00000e65u, 0x00000198u, 0x0003003eu, 0x00000f2au, 0x00000f29u, 0x00050041u, 0x00000255u, 0x00000f2eu, 0x00000e68u, 0x000001bcu, 0x0004003du, 0x0000000bu, 0x00000f2fu, 0x00000f2eu, 0x00040072u, 0x00000017u, 0x00000f30u, 0x00000f2fu, 0x000500c5u, 0x00000017u, 0x00000f31u, 0x00000f22u, 0x00000f30u, 0x0005005fu, 0x0000025au, 0x00000f32u, 0x00000f20u, 0x00000f31u, 0x00050051u, 0x00000006u, 0x00000f33u, 0x00000f32u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000f34u, 0x00000f33u, 0x00050041u, 0x00000046u, 0x00000f35u, 0x00000e65u, 0x000001bcu, 0x0003003eu, 0x00000f35u, 0x00000f34u, 0x00050041u, 0x00000255u, 0x00000f39u, 0x00000e68u, 0x00000170u, 0x0004003du, 0x0000000bu, 0x00000f3au, 0x00000f39u, 0x00040072u, 0x00000017u, 0x00000f3bu, 0x00000f3au, 0x000500c5u, 0x00000017u, 0x00000f3cu, 0x00000f22u, 0x00000f3bu, 0x0005005fu, 0x0000025au, 0x00000f3du, 0x00000f20u, 0x00000f3cu, 0x00050051u, 0x00000006u, 0x00000f3eu, 0x00000f3du, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000f3fu, 0x00000f3eu, 0x00050041u, 0x00000046u, 0x00000f40u, 0x00000e65u, 0x00000170u, 0x0003003eu, 0x00000f40u, 0x00000f3fu, 0x000200f9u, 0x00000f08u, 0x000200f8u, 0x00000f09u, 0x0004003du, 0x00000218u, 0x00000f0bu, 0x00000e68u, 0x000500c3u, 0x00000218u, 0x00000f0du, 0x00000f0bu, 0x000019ceu, 0x00040072u, 0x0000012au, 0x00000f0eu, 0x00000f0du, 0x0004007cu, 0x0000001bu, 0x00000f0fu, 0x00000f0eu, 0x0003003eu, 0x00000e65u, 0x00000f0fu, 0x000200f9u, 0x00000f08u, 0x000200f8u, 0x00000f08u, 0x0004003du, 0x0000001bu, 0x00000f41u, 0x00000e65u, 0x000500c7u, 0x0000001bu, 0x00000f43u, 0x00000f41u, 0x000019cfu, 0x0003003eu, 0x00000e62u, 0x000002bcu, 0x0003003eu, 0x00000e63u, 0x00000f43u, 0x000200f9u, 0x00000e6bu, 0x000200f8u, 0x00000e6bu, 0x000900f5u, 0x00000008u, 0x0000193bu, 0x000014f6u, 0x00000e8au, 0x000014f6u, 0x00000ebeu, 0x0000153au, 0x00000f08u, 0x000900f5u, 0x00000008u, 0x00001920u, 0x000014ccu, 0x00000e8au, 0x000014ccu, 0x00000ebeu, 0x0000150fu, 0x00000f08u, 0x000900f5u, 0x0000001bu, 0x0000154cu, 0x00001516u, 0x00000e8au, 0x00000ebfu, 0x00000ebeu, 0x00000f43u, 0x00000f08u, 0x0003003eu, 0x00000e6au, 0x0000154cu, 0x0003003eu, 0x00000b7bu, 0x0000154cu, 0x000300f7u, 0x00000c11u, 0x00000000u, 0x000400fau, 0x00000bc2u, 0x00000c12u, 0x00000c11u, 0x000200f8u, 0x00000c12u, 0x00040071u, 0x000003acu, 0x00000c14u, 0x0000154cu, 0x0004007cu, 0x00000018u, 0x00000c15u, 0x00000c14u, 0x0003003eu, 0x00000b84u, 0x00000c15u, 0x0003003eu, 0x00000b85u, 0x00000b92u, 0x00060050u, 0x00000018u, 0x00000f4bu, 0x00000b92u, 0x00000b92u, 0x00000b92u, 0x000500c3u, 0x00000018u, 0x00000f4cu, 0x00000f4bu, 0x00000101u, 0x000500c7u, 0x00000018u, 0x00000f4eu, 0x00000f4cu, 0x000019cau, 0x0003003eu, 0x00000f45u, 0x00000f4eu, 0x000500c7u, 0x00000018u, 0x00000f51u, 0x00000c15u, 0x000019cbu, 0x00050080u, 0x00000018u, 0x00000f53u, 0x00000f51u, 0x000019ccu, 0x000500adu, 0x00000111u, 0x00000f55u, 0x00000c15u, 0x00000110u, 0x000600a9u, 0x00000018u, 0x00000f56u, 0x00000f55u, 0x0000010du, 0x00000f53u, 0x0003003eu, 0x00000f46u, 0x00000f56u, 0x000500c7u, 0x00000018u, 0x00000f5au, 0x00000c15u, 0x000019cau, 0x00050082u, 0x00000018u, 0x00000f5bu, 0x00000f4eu, 0x00000f5au, 0x000500c3u, 0x00000018u, 0x00000f5du, 0x00000f5bu, 0x000019cdu, 0x0003003eu, 0x00000f47u, 0x00000f5du, 0x00050082u, 0x00000018u, 0x00000f60u, 0x00000f56u, 0x00000c15u, 0x0003003eu, 0x00000f48u, 0x00000f60u, 0x000500c7u, 0x00000018u, 0x00000f64u, 0x00000f60u, 0x00000f5du, 0x00050080u, 0x00000018u, 0x00000f65u, 0x00000c15u, 0x00000f64u, 0x0003003eu, 0x00000f46u, 0x00000f65u, 0x000500c7u, 0x00000018u, 0x00000f68u, 0x00000f65u, 0x0000010du, 0x00040072u, 0x0000012au, 0x00000f69u, 0x00000f68u, 0x0004007cu, 0x0000001bu, 0x00000f6au, 0x00000f69u, 0x0003003eu, 0x00000f49u, 0x00000f6au, 0x0003003eu, 0x00000b7bu, 0x00000f6au, 0x000200f9u, 0x00000c11u, 0x000200f8u, 0x00000c11u, 0x000700f5u, 0x0000001bu, 0x00001614u, 0x0000154cu, 0x00000e6bu, 0x00000f6au, 0x00000c12u, 0x00040071u, 0x00000006u, 0x00000c1du, 0x00000c69u, 0x0004007cu, 0x00000017u, 0x00000c1eu, 0x00000c1du, 0x0003003eu, 0x00000b87u, 0x00001308u, 0x0003003eu, 0x00000b88u, 0x00000bd2u, 0x0003003eu, 0x00000b89u, 0x0000130eu, 0x0003003eu, 0x00000b8au, 0x00000c1eu, 0x0003003eu, 0x00000f6bu, 0x000000abu, 0x000300f7u, 0x00000f6eu, 0x00000000u, 0x000b00fbu, 0x00000c1eu, 0x00000f6eu, 0x00000000u, 0x00000f6fu, 0x00000001u, 0x00000f70u, 0x00000002u, 0x00000f71u, 0x00000003u, 0x00000f72u, 0x000200f8u, 0x00000f72u, 0x0003003eu, 0x00000f6bu, 0x00000bd2u, 0x000200f9u, 0x00000f6eu, 0x000200f8u, 0x00000f71u, 0x0003003eu, 0x00000f6bu, 0x000000c7u, 0x000200f9u, 0x00000f6eu, 0x000200f8u, 0x00000f70u, 0x00050080u, 0x00000017u, 0x00000f80u, 0x00001308u, 0x00000bd2u, 0x000500c7u, 0x00000017u, 0x00000f81u, 0x00000f80u, 0x000000c7u, 0x0003003eu, 0x00000f6bu, 0x00000f81u, 0x000200f9u, 0x00000f6eu, 0x000200f8u, 0x00000f6fu, 0x000300f7u, 0x00000f74u, 0x00000000u, 0x000400fau, 0x0000130eu, 0x00000f75u, 0x00000f76u, 0x000200f8u, 0x00000f76u, 0x00050082u, 0x00000017u, 0x00000f7cu, 0x00001308u, 0x000000b5u, 0x000500c7u, 0x00000017u, 0x00000f7du, 0x00000f7cu, 0x000000c7u, 0x0003003eu, 0x00000f6bu, 0x00000f7du, 0x000200f9u, 0x00000f74u, 0x000200f8u, 0x00000f75u, 0x00050080u, 0x00000017u, 0x00000f79u, 0x00000bd2u, 0x00001308u, 0x0007000cu, 0x00000017u, 0x00000f7au, 0x00000001u, 0x00000027u, 0x000000c7u, 0x00000f79u, 0x0003003eu, 0x00000f6bu, 0x00000f7au, 0x000200f9u, 0x00000f74u, 0x000200f8u, 0x00000f74u, 0x000700f5u, 0x00000017u, 0x00001612u, 0x00000f7au, 0x00000f75u, 0x00000f7du, 0x00000f76u, 0x000200f9u, 0x00000f6eu, 0x000200f8u, 0x00000f6eu, 0x000d00f5u, 0x00000017u, 0x00001611u, 0x000000abu, 0x00000c11u, 0x00001612u, 0x00000f74u, 0x00000f81u, 0x00000f70u, 0x000000c7u, 0x00000f71u, 0x00000bd2u, 0x00000f72u, 0x0003003eu, 0x00000f6cu, 0x00001611u, 0x0003003eu, 0x00000b86u, 0x00001611u, 0x000500c4u, 0x00000017u, 0x00000c24u, 0x00001611u, 0x000000c1u, 0x00040072u, 0x00000129u, 0x00000c25u, 0x00000c24u, 0x0004007cu, 0x00000008u, 0x00000c26u, 0x00000c25u, 0x00050051u, 0x00000008u, 0x00000c27u, 0x00001614u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c28u, 0x00001614u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c29u, 0x00001614u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000c2au, 0x00000c27u, 0x00000c28u, 0x00000c29u, 0x00000c26u, 0x0003003eu, 0x00000b8bu, 0x00000c2au, 0x000300f7u, 0x00000f84u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000f85u, 0x00000f86u, 0x000200f8u, 0x00000f86u, 0x0003003eu, 0x0000038bu, 0x00000c2au, 0x000200f9u, 0x00000f84u, 0x000200f8u, 0x00000f85u, 0x0008004fu, 0x0000001bu, 0x00000f88u, 0x00000c2au, 0x00000c2au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000f89u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000f8au, 0x00000f89u, 0x00000c2au, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000f8au, 0x000200f9u, 0x00000f84u, 0x000200f8u, 0x00000f84u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000300f7u, 0x00000c2du, 0x00000000u, 0x000400fau, 0x00000baeu, 0x00000c2eu, 0x00000c2fu, 0x000200f8u, 0x00000c2fu, 0x000300f7u, 0x00000c37u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000c38u, 0x00000c37u, 0x000200f8u, 0x00000c38u, 0x000300f7u, 0x00000fd2u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000fd2u, 0x00000002u, 0x00000fd3u, 0x00000003u, 0x00000fd4u, 0x000200f8u, 0x00000fd4u, 0x0004003du, 0x00000009u, 0x00000ff1u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000ff2u, 0x00000ff1u, 0x00000ff1u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000ff3u, 0x00000ff2u, 0x0003003eu, 0x00000fcfu, 0x00000ff3u, 0x00050041u, 0x00000007u, 0x00000ff4u, 0x00000fcfu, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000ff5u, 0x00000ff4u, 0x000500c4u, 0x00000006u, 0x00000ff6u, 0x00000ff5u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000ff7u, 0x00000fcfu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000ff8u, 0x00000ff7u, 0x000500c5u, 0x00000006u, 0x00000ff9u, 0x00000ff6u, 0x00000ff8u, 0x0003003eu, 0x00000fd0u, 0x00000ff9u, 0x000500c7u, 0x00000006u, 0x00000ffbu, 0x00000ff9u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000ffcu, 0x00000ffbu, 0x000001c4u, 0x0003003eu, 0x00000fd1u, 0x00000ffcu, 0x000500c2u, 0x00000006u, 0x00000ffeu, 0x00000ff9u, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000fffu, 0x00000ffeu, 0x0003003eu, 0x00000424u, 0x00000fffu, 0x000500c7u, 0x00000006u, 0x00001001u, 0x00000ff9u, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x00001002u, 0x00001001u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x00001004u, 0x00001002u, 0x00000ffcu, 0x00040071u, 0x00000008u, 0x00001005u, 0x00001004u, 0x0003003eu, 0x00000405u, 0x00001005u, 0x000200f9u, 0x00000fd2u, 0x000200f8u, 0x00000fd3u, 0x00050041u, 0x00000404u, 0x00000fd5u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000fd6u, 0x00000fd5u, 0x000500c2u, 0x00000008u, 0x00000fd7u, 0x00000fd6u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000fd8u, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000fd9u, 0x00000fd8u, 0x000500c7u, 0x00000008u, 0x00000fdau, 0x00000fd9u, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x00000fdbu, 0x00000fd7u, 0x00000fdau, 0x0003003eu, 0x00000405u, 0x00000fdbu, 0x00050041u, 0x00000404u, 0x00000fdcu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000fddu, 0x00000fdcu, 0x00040071u, 0x00000006u, 0x00000fdeu, 0x00000fddu, 0x000500c7u, 0x00000006u, 0x00000fdfu, 0x00000fdeu, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000fe0u, 0x00000fdfu, 0x00000413u, 0x0003003eu, 0x00000fceu, 0x00000fe0u, 0x00050041u, 0x00000404u, 0x00000fe1u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000fe2u, 0x00000fe1u, 0x00040071u, 0x00000006u, 0x00000fe3u, 0x00000fe2u, 0x000500c7u, 0x00000006u, 0x00000fe4u, 0x00000fe3u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000fe5u, 0x00000fe4u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x00000fe7u, 0x00000fe0u, 0x00000fe5u, 0x0003003eu, 0x00000fceu, 0x00000fe7u, 0x0004003du, 0x00000008u, 0x00000fe9u, 0x00000fd8u, 0x00040071u, 0x00000006u, 0x00000feau, 0x00000fe9u, 0x000500c7u, 0x00000006u, 0x00000febu, 0x00000feau, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000fecu, 0x00000febu, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000feeu, 0x00000fe7u, 0x00000fecu, 0x0003003eu, 0x00000fceu, 0x00000feeu, 0x00040071u, 0x0000000au, 0x00000ff0u, 0x00000feeu, 0x0003003eu, 0x00000424u, 0x00000ff0u, 0x000200f9u, 0x00000fd2u, 0x000200f8u, 0x00000fd2u, 0x000200f9u, 0x00000c37u, 0x000200f8u, 0x00000c37u, 0x000200f9u, 0x00000c2du, 0x000200f8u, 0x00000c2eu, 0x0003003eu, 0x00000b8cu, 0x00000b8fu, 0x00050082u, 0x00000017u, 0x00000f92u, 0x0000014bu, 0x00000b8fu, 0x0007000cu, 0x00000017u, 0x00000f93u, 0x00000001u, 0x0000002au, 0x00000f92u, 0x000000b5u, 0x0003003eu, 0x00000f8cu, 0x00000f93u, 0x0006000cu, 0x00000017u, 0x00000f95u, 0x00000001u, 0x0000004au, 0x00000f93u, 0x00050082u, 0x00000017u, 0x00000f96u, 0x00000150u, 0x00000f95u, 0x0003003eu, 0x00000f8du, 0x00000f96u, 0x0008000cu, 0x00000017u, 0x00000f98u, 0x00000001u, 0x0000002du, 0x00000f96u, 0x000000abu, 0x000000c7u, 0x0003003eu, 0x00000f8du, 0x00000f98u, 0x00050082u, 0x00000017u, 0x00000f9au, 0x000000c4u, 0x00000f98u, 0x0007000cu, 0x00000017u, 0x00000f9bu, 0x00000001u, 0x0000002au, 0x00000f9au, 0x000000abu, 0x0003003eu, 0x00000f8eu, 0x00000f9bu, 0x000500c3u, 0x00000017u, 0x00000f9eu, 0x00000b8fu, 0x00000f9bu, 0x000500c7u, 0x00000017u, 0x00000f9fu, 0x00000f9eu, 0x00000138u, 0x0003003eu, 0x00000f8fu, 0x00000f9fu, 0x000500c4u, 0x00000017u, 0x00000fa1u, 0x00000f98u, 0x000000d3u, 0x00050080u, 0x00000017u, 0x00000fa3u, 0x00000fa1u, 0x00000f9fu, 0x00040072u, 0x0000000bu, 0x00000fa4u, 0x00000fa3u, 0x0004007cu, 0x0000000au, 0x00000fa5u, 0x00000fa4u, 0x0003003eu, 0x00000f90u, 0x00000fa5u, 0x0003003eu, 0x00000424u, 0x00000fa5u, 0x0003003eu, 0x00000405u, 0x00000c57u, 0x0003003eu, 0x00000574u, 0x000002bcu, 0x000300f7u, 0x00000c34u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000c35u, 0x00000c34u, 0x000200f8u, 0x00000c35u, 0x0004003du, 0x0000000au, 0x00000fa7u, 0x00000424u, 0x00040071u, 0x00000006u, 0x00000fa8u, 0x00000fa7u, 0x000500c4u, 0x00000006u, 0x00000fa9u, 0x00000fa8u, 0x00000420u, 0x0004003du, 0x00000008u, 0x00000faau, 0x00000405u, 0x00040071u, 0x00000006u, 0x00000fabu, 0x00000faau, 0x000500c5u, 0x00000006u, 0x00000facu, 0x00000fa9u, 0x00000fabu, 0x0003003eu, 0x00000fa6u, 0x00000facu, 0x000300f7u, 0x00000fadu, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000fadu, 0x00000002u, 0x00000faeu, 0x00000003u, 0x00000fafu, 0x000200f8u, 0x00000fafu, 0x000500c2u, 0x00000006u, 0x00000fc5u, 0x00000facu, 0x0000044du, 0x000500c7u, 0x00000006u, 0x00000fc6u, 0x00000fc5u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x00000fc7u, 0x00000fc6u, 0x00050041u, 0x00000404u, 0x00000fc8u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000fc8u, 0x00000fc7u, 0x000500c2u, 0x00000006u, 0x00000fcau, 0x00000facu, 0x00000170u, 0x000500c7u, 0x00000006u, 0x00000fcbu, 0x00000fcau, 0x000003ddu, 0x00040071u, 0x00000008u, 0x00000fccu, 0x00000fcbu, 0x00050041u, 0x00000404u, 0x00000fcdu, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x00000fcdu, 0x00000fccu, 0x000200f9u, 0x00000fadu, 0x000200f8u, 0x00000faeu, 0x000500c2u, 0x00000006u, 0x00000fb1u, 0x00000facu, 0x0000044du, 0x000500c7u, 0x00000006u, 0x00000fb2u, 0x00000fb1u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000fb3u, 0x00000fb2u, 0x00050041u, 0x00000404u, 0x00000fb4u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000fb4u, 0x00000fb3u, 0x000500c2u, 0x00000006u, 0x00000fb6u, 0x00000facu, 0x00000453u, 0x000500c7u, 0x00000006u, 0x00000fb7u, 0x00000fb6u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000fb8u, 0x00000fb7u, 0x00050041u, 0x00000404u, 0x00000fb9u, 0x0000038bu, 0x000001bcu, 0x0003003eu, 0x00000fb9u, 0x00000fb8u, 0x000500c2u, 0x00000006u, 0x00000fbbu, 0x00000facu, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000fbcu, 0x00000fbbu, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000fbdu, 0x00000fbcu, 0x00050041u, 0x00000404u, 0x00000fbeu, 0x0000038bu, 0x00000170u, 0x0003003eu, 0x00000fbeu, 0x00000fbdu, 0x000500c7u, 0x00000006u, 0x00000fc0u, 0x00000facu, 0x0000045eu, 0x000500c4u, 0x00000006u, 0x00000fc1u, 0x00000fc0u, 0x00000453u, 0x00040071u, 0x00000008u, 0x00000fc2u, 0x00000fc1u, 0x00050041u, 0x00000404u, 0x00000fc3u, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x00000fc3u, 0x00000fc2u, 0x000200f9u, 0x00000fadu, 0x000200f8u, 0x00000fadu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000c34u, 0x000200f8u, 0x00000c34u, 0x000200f9u, 0x00000c2du, 0x000200f8u, 0x00000c2du, 0x000200f9u, 0x00000becu, 0x000200f8u, 0x00000becu, 0x000700f5u, 0x0000001bu, 0x00001950u, 0x00001521u, 0x00000be4u, 0x00001516u, 0x00000c2du, 0x000700f5u, 0x00000008u, 0x00001935u, 0x000014f6u, 0x00000be4u, 0x0000193bu, 0x00000c2du, 0x000700f5u, 0x00000008u, 0x0000191au, 0x000014ccu, 0x00000be4u, 0x00001920u, 0x00000c2du, 0x000700f5u, 0x0000001bu, 0x000018f2u, 0x000013efu, 0x00000be4u, 0x000018fau, 0x00000c2du, 0x000700f5u, 0x00000008u, 0x000018cau, 0x000013d1u, 0x00000be4u, 0x000018d2u, 0x00000c2du, 0x000700f5u, 0x00000008u, 0x000018a2u, 0x000013b3u, 0x00000be4u, 0x000018aau, 0x00000c2du, 0x000200f9u, 0x000008bdu, 0x000200f8u, 0x000008bcu, 0x00060041u, 0x000003f3u, 0x000008c4u, 0x000008c2u, 0x000000abu, 0x0000089eu, 0x0004003du, 0x00000006u, 0x000008c5u, 0x000008c4u, 0x0003003eu, 0x000008beu, 0x000008c5u, 0x0003003eu, 0x000008c6u, 0x000008c5u, 0x0003003eu, 0x000008c8u, 0x00000895u, 0x000300f7u, 0x00000adfu, 0x00000000u, 0x000900fbu, 0x00000372u, 0x00000adfu, 0x00000000u, 0x00000ae0u, 0x00000001u, 0x00000ae1u, 0x00000002u, 0x00000ae2u, 0x000200f8u, 0x00000ae2u, 0x000500c2u, 0x00000006u, 0x00000aeau, 0x000008c5u, 0x000000cau, 0x000500c7u, 0x00000006u, 0x00000aebu, 0x00000aeau, 0x000003b7u, 0x0003003eu, 0x00000adau, 0x00000aebu, 0x000500c2u, 0x00000006u, 0x00000aedu, 0x000008c5u, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x00000aeeu, 0x00000aedu, 0x000003b7u, 0x0003003eu, 0x00000adbu, 0x00000aeeu, 0x000500c4u, 0x00000006u, 0x00000af0u, 0x000008c5u, 0x000000b8u, 0x000500c7u, 0x00000006u, 0x00000af1u, 0x00000af0u, 0x000003b7u, 0x0003003eu, 0x00000adcu, 0x00000af1u, 0x000500c7u, 0x00000006u, 0x00000af3u, 0x000008c5u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000af4u, 0x00000af3u, 0x00000694u, 0x0003003eu, 0x00000addu, 0x00000af4u, 0x00040071u, 0x00000008u, 0x00000af6u, 0x00000aebu, 0x00040071u, 0x00000008u, 0x00000af8u, 0x00000aeeu, 0x00040071u, 0x00000008u, 0x00000afau, 0x00000af1u, 0x00040071u, 0x00000008u, 0x00000afcu, 0x00000af4u, 0x00070050u, 0x00000009u, 0x00000afdu, 0x00000af6u, 0x00000af8u, 0x00000afau, 0x00000afcu, 0x0003003eu, 0x00000adeu, 0x00000afdu, 0x000300f7u, 0x00000b0au, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000b0bu, 0x00000b0cu, 0x000200f8u, 0x00000b0cu, 0x0003003eu, 0x0000038bu, 0x00000afdu, 0x000200f9u, 0x00000b0au, 0x000200f8u, 0x00000b0bu, 0x0008004fu, 0x0000001bu, 0x00000b0eu, 0x00000afdu, 0x00000afdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000b0fu, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000b10u, 0x00000b0fu, 0x00000afdu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000b10u, 0x000200f9u, 0x00000b0au, 0x000200f8u, 0x00000b0au, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000adfu, 0x000200f8u, 0x00000ae1u, 0x000500c7u, 0x00000006u, 0x00000ae4u, 0x000008c5u, 0x000003ddu, 0x0003003eu, 0x000008c6u, 0x00000ae4u, 0x00040071u, 0x00000008u, 0x00000ae6u, 0x00000ae4u, 0x00070050u, 0x00000009u, 0x00000ae7u, 0x00000ae6u, 0x00000ae6u, 0x00000ae6u, 0x00000ae6u, 0x0003003eu, 0x00000ad9u, 0x00000ae7u, 0x000300f7u, 0x00000b02u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000b03u, 0x00000b04u, 0x000200f8u, 0x00000b04u, 0x0003003eu, 0x0000038bu, 0x00000ae7u, 0x000200f9u, 0x00000b02u, 0x000200f8u, 0x00000b03u, 0x0008004fu, 0x0000001bu, 0x00000b06u, 0x00000ae7u, 0x00000ae7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000b07u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000b08u, 0x00000b07u, 0x00000ae7u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000b08u, 0x000200f9u, 0x00000b02u, 0x000200f8u, 0x00000b02u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000adfu, 0x000200f8u, 0x00000ae0u, 0x0003003eu, 0x0000038bu, 0x0000067bu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000adfu, 0x000200f8u, 0x00000adfu, 0x000300f7u, 0x00000affu, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000b00u, 0x00000affu, 0x000200f8u, 0x00000b00u, 0x000300f7u, 0x00000b16u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000b16u, 0x00000002u, 0x00000b17u, 0x00000003u, 0x00000b18u, 0x000200f8u, 0x00000b18u, 0x0004003du, 0x00000009u, 0x00000b35u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000b36u, 0x00000b35u, 0x00000b35u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000b37u, 0x00000b36u, 0x0003003eu, 0x00000b13u, 0x00000b37u, 0x00050041u, 0x00000007u, 0x00000b38u, 0x00000b13u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000b39u, 0x00000b38u, 0x000500c4u, 0x00000006u, 0x00000b3au, 0x00000b39u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000b3bu, 0x00000b13u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000b3cu, 0x00000b3bu, 0x000500c5u, 0x00000006u, 0x00000b3du, 0x00000b3au, 0x00000b3cu, 0x0003003eu, 0x00000b14u, 0x00000b3du, 0x000500c7u, 0x00000006u, 0x00000b3fu, 0x00000b3du, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000b40u, 0x00000b3fu, 0x000001c4u, 0x0003003eu, 0x00000b15u, 0x00000b40u, 0x000500c2u, 0x00000006u, 0x00000b42u, 0x00000b3du, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000b43u, 0x00000b42u, 0x0003003eu, 0x00000424u, 0x00000b43u, 0x000500c7u, 0x00000006u, 0x00000b45u, 0x00000b3du, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x00000b46u, 0x00000b45u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x00000b48u, 0x00000b46u, 0x00000b40u, 0x00040071u, 0x00000008u, 0x00000b49u, 0x00000b48u, 0x0003003eu, 0x00000405u, 0x00000b49u, 0x000200f9u, 0x00000b16u, 0x000200f8u, 0x00000b17u, 0x00050041u, 0x00000404u, 0x00000b19u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000b1au, 0x00000b19u, 0x000500c2u, 0x00000008u, 0x00000b1bu, 0x00000b1au, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000b1cu, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000b1du, 0x00000b1cu, 0x000500c7u, 0x00000008u, 0x00000b1eu, 0x00000b1du, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x00000b1fu, 0x00000b1bu, 0x00000b1eu, 0x0003003eu, 0x00000405u, 0x00000b1fu, 0x00050041u, 0x00000404u, 0x00000b20u, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000b21u, 0x00000b20u, 0x00040071u, 0x00000006u, 0x00000b22u, 0x00000b21u, 0x000500c7u, 0x00000006u, 0x00000b23u, 0x00000b22u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000b24u, 0x00000b23u, 0x00000413u, 0x0003003eu, 0x00000b12u, 0x00000b24u, 0x00050041u, 0x00000404u, 0x00000b25u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000b26u, 0x00000b25u, 0x00040071u, 0x00000006u, 0x00000b27u, 0x00000b26u, 0x000500c7u, 0x00000006u, 0x00000b28u, 0x00000b27u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000b29u, 0x00000b28u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x00000b2bu, 0x00000b24u, 0x00000b29u, 0x0003003eu, 0x00000b12u, 0x00000b2bu, 0x0004003du, 0x00000008u, 0x00000b2du, 0x00000b1cu, 0x00040071u, 0x00000006u, 0x00000b2eu, 0x00000b2du, 0x000500c7u, 0x00000006u, 0x00000b2fu, 0x00000b2eu, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000b30u, 0x00000b2fu, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000b32u, 0x00000b2bu, 0x00000b30u, 0x0003003eu, 0x00000b12u, 0x00000b32u, 0x00040071u, 0x0000000au, 0x00000b34u, 0x00000b32u, 0x0003003eu, 0x00000424u, 0x00000b34u, 0x000200f9u, 0x00000b16u, 0x000200f8u, 0x00000b16u, 0x000200f9u, 0x00000affu, 0x000200f8u, 0x00000affu, 0x000200f9u, 0x000008bdu, 0x000200f8u, 0x000008bdu, 0x000700f5u, 0x0000001bu, 0x0000194au, 0x00001521u, 0x00000affu, 0x00001950u, 0x00000becu, 0x000700f5u, 0x00000008u, 0x0000192fu, 0x000014f6u, 0x00000affu, 0x00001935u, 0x00000becu, 0x000700f5u, 0x00000008u, 0x00001914u, 0x000014ccu, 0x00000affu, 0x0000191au, 0x00000becu, 0x000700f5u, 0x0000001bu, 0x000018ecu, 0x000013efu, 0x00000affu, 0x000018f2u, 0x00000becu, 0x000700f5u, 0x00000008u, 0x000018c4u, 0x000013d1u, 0x00000affu, 0x000018cau, 0x00000becu, 0x000700f5u, 0x00000008u, 0x0000189cu, 0x000013b3u, 0x00000affu, 0x000018a2u, 0x00000becu, 0x000700f5u, 0x0000001bu, 0x0000185eu, 0x000012bdu, 0x00000affu, 0x000012bbu, 0x00000becu, 0x000200f9u, 0x000008b2u, 0x000200f8u, 0x000008b1u, 0x00070041u, 0x000003f3u, 0x000008b5u, 0x000000aau, 0x000000abu, 0x00000895u, 0x000000d0u, 0x0004003du, 0x00000006u, 0x000008b6u, 0x000008b5u, 0x0003003eu, 0x000008b4u, 0x000008b6u, 0x000300f7u, 0x00000a23u, 0x00000000u, 0x000b00fbu, 0x00000372u, 0x00000a23u, 0x00000004u, 0x00000a24u, 0x00000002u, 0x00000a25u, 0x00000003u, 0x00000a26u, 0x00000001u, 0x00000a27u, 0x000200f8u, 0x00000a27u, 0x0004003du, 0x00000006u, 0x00000a72u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000a73u, 0x00000a72u, 0x000001c4u, 0x000500c6u, 0x00000006u, 0x00000a74u, 0x00000a73u, 0x000001c4u, 0x00050084u, 0x00000006u, 0x00000a75u, 0x00000a74u, 0x000003b0u, 0x000500c2u, 0x00000006u, 0x00000a77u, 0x000008b6u, 0x00000a75u, 0x0003003eu, 0x000008b4u, 0x00000a77u, 0x000500c7u, 0x00000006u, 0x00000a79u, 0x00000a77u, 0x000003ddu, 0x0003003eu, 0x000008b4u, 0x00000a79u, 0x00040071u, 0x00000008u, 0x00000a7bu, 0x00000a79u, 0x00070050u, 0x00000009u, 0x00000a7cu, 0x00000a7bu, 0x00000a7bu, 0x00000a7bu, 0x00000a7bu, 0x0003003eu, 0x00000a22u, 0x00000a7cu, 0x000300f7u, 0x00000a99u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a9au, 0x00000a9bu, 0x000200f8u, 0x00000a9bu, 0x0003003eu, 0x0000038bu, 0x00000a7cu, 0x000200f9u, 0x00000a99u, 0x000200f8u, 0x00000a9au, 0x0008004fu, 0x0000001bu, 0x00000a9du, 0x00000a7cu, 0x00000a7cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a9eu, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000a9fu, 0x00000a9eu, 0x00000a7cu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000a9fu, 0x000200f9u, 0x00000a99u, 0x000200f8u, 0x00000a99u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a23u, 0x000200f8u, 0x00000a26u, 0x0004003du, 0x00000006u, 0x00000a5au, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000a5bu, 0x00000a5au, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x00000a5cu, 0x00000a5bu, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000a5du, 0x00000a5cu, 0x000003f9u, 0x000500c2u, 0x00000006u, 0x00000a5fu, 0x000008b6u, 0x00000a5du, 0x0003003eu, 0x000008b4u, 0x00000a5fu, 0x000500c7u, 0x00000006u, 0x00000a61u, 0x00000a5fu, 0x000006efu, 0x0003003eu, 0x000008b4u, 0x00000a61u, 0x000500c2u, 0x00000006u, 0x00000a63u, 0x00000a61u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000a64u, 0x00000a63u, 0x000003ddu, 0x0003003eu, 0x00000a1fu, 0x00000a64u, 0x000500c2u, 0x00000006u, 0x00000a66u, 0x00000a61u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000a67u, 0x00000a66u, 0x000003ddu, 0x0003003eu, 0x00000a20u, 0x00000a67u, 0x00040071u, 0x00000008u, 0x00000a69u, 0x00000a64u, 0x00040071u, 0x00000008u, 0x00000a6fu, 0x00000a67u, 0x00070050u, 0x00000009u, 0x00000a70u, 0x00000a69u, 0x00000a69u, 0x00000a69u, 0x00000a6fu, 0x0003003eu, 0x00000a21u, 0x00000a70u, 0x000300f7u, 0x00000a91u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a92u, 0x00000a93u, 0x000200f8u, 0x00000a93u, 0x0003003eu, 0x0000038bu, 0x00000a70u, 0x000200f9u, 0x00000a91u, 0x000200f8u, 0x00000a92u, 0x0008004fu, 0x0000001bu, 0x00000a95u, 0x00000a70u, 0x00000a70u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a96u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000a97u, 0x00000a96u, 0x00000a70u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000a97u, 0x000200f9u, 0x00000a91u, 0x000200f8u, 0x00000a91u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a23u, 0x000200f8u, 0x00000a25u, 0x0004003du, 0x00000006u, 0x00000a3eu, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000a3fu, 0x00000a3eu, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x00000a40u, 0x00000a3fu, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000a41u, 0x00000a40u, 0x000003f9u, 0x000500c2u, 0x00000006u, 0x00000a43u, 0x000008b6u, 0x00000a41u, 0x0003003eu, 0x000008b4u, 0x00000a43u, 0x000500c2u, 0x00000006u, 0x00000a45u, 0x00000a43u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000a46u, 0x00000a45u, 0x000003b7u, 0x0003003eu, 0x00000a1au, 0x00000a46u, 0x000500c2u, 0x00000006u, 0x00000a48u, 0x00000a43u, 0x000001c4u, 0x000500c7u, 0x00000006u, 0x00000a49u, 0x00000a48u, 0x000003b7u, 0x0003003eu, 0x00000a1bu, 0x00000a49u, 0x000500c4u, 0x00000006u, 0x00000a4bu, 0x00000a43u, 0x00000170u, 0x000500c7u, 0x00000006u, 0x00000a4cu, 0x00000a4bu, 0x000003b7u, 0x0003003eu, 0x00000a1cu, 0x00000a4cu, 0x000500c7u, 0x00000006u, 0x00000a4eu, 0x00000a43u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000a4fu, 0x00000a4eu, 0x00000694u, 0x0003003eu, 0x00000a1du, 0x00000a4fu, 0x00040071u, 0x00000008u, 0x00000a51u, 0x00000a46u, 0x00040071u, 0x00000008u, 0x00000a53u, 0x00000a49u, 0x00040071u, 0x00000008u, 0x00000a55u, 0x00000a4cu, 0x00040071u, 0x00000008u, 0x00000a57u, 0x00000a4fu, 0x00070050u, 0x00000009u, 0x00000a58u, 0x00000a51u, 0x00000a53u, 0x00000a55u, 0x00000a57u, 0x0003003eu, 0x00000a1eu, 0x00000a58u, 0x000300f7u, 0x00000a89u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a8au, 0x00000a8bu, 0x000200f8u, 0x00000a8bu, 0x0003003eu, 0x0000038bu, 0x00000a58u, 0x000200f9u, 0x00000a89u, 0x000200f8u, 0x00000a8au, 0x0008004fu, 0x0000001bu, 0x00000a8du, 0x00000a58u, 0x00000a58u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a8eu, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000a8fu, 0x00000a8eu, 0x00000a58u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000a8fu, 0x000200f9u, 0x00000a89u, 0x000200f8u, 0x00000a89u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a23u, 0x000200f8u, 0x00000a24u, 0x000500c2u, 0x00000006u, 0x00000a29u, 0x000008b6u, 0x000003f8u, 0x000500c7u, 0x00000006u, 0x00000a2au, 0x00000a29u, 0x000003ddu, 0x0003003eu, 0x00000a15u, 0x00000a2au, 0x000500c2u, 0x00000006u, 0x00000a2cu, 0x000008b6u, 0x000003f9u, 0x000500c7u, 0x00000006u, 0x00000a2du, 0x00000a2cu, 0x000003ddu, 0x0003003eu, 0x00000a16u, 0x00000a2du, 0x000500c2u, 0x00000006u, 0x00000a2fu, 0x000008b6u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000a30u, 0x00000a2fu, 0x000003ddu, 0x0003003eu, 0x00000a17u, 0x00000a30u, 0x000500c2u, 0x00000006u, 0x00000a32u, 0x000008b6u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000a33u, 0x00000a32u, 0x000003ddu, 0x0003003eu, 0x00000a18u, 0x00000a33u, 0x00040071u, 0x00000008u, 0x00000a35u, 0x00000a2au, 0x00040071u, 0x00000008u, 0x00000a37u, 0x00000a2du, 0x00040071u, 0x00000008u, 0x00000a39u, 0x00000a30u, 0x00040071u, 0x00000008u, 0x00000a3bu, 0x00000a33u, 0x00070050u, 0x00000009u, 0x00000a3cu, 0x00000a35u, 0x00000a37u, 0x00000a39u, 0x00000a3bu, 0x0003003eu, 0x00000a19u, 0x00000a3cu, 0x000300f7u, 0x00000a81u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x00000a82u, 0x00000a83u, 0x000200f8u, 0x00000a83u, 0x0003003eu, 0x0000038bu, 0x00000a3cu, 0x000200f9u, 0x00000a81u, 0x000200f8u, 0x00000a82u, 0x0008004fu, 0x0000001bu, 0x00000a85u, 0x00000a3cu, 0x00000a3cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a86u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000a87u, 0x00000a86u, 0x00000a3cu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000a87u, 0x000200f9u, 0x00000a81u, 0x000200f8u, 0x00000a81u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a23u, 0x000200f8u, 0x00000a23u, 0x000300f7u, 0x00000a7eu, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000a7fu, 0x00000a7eu, 0x000200f8u, 0x00000a7fu, 0x000300f7u, 0x00000aa5u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000aa5u, 0x00000002u, 0x00000aa6u, 0x00000003u, 0x00000aa7u, 0x000200f8u, 0x00000aa7u, 0x0004003du, 0x00000009u, 0x00000ac4u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000ac5u, 0x00000ac4u, 0x00000ac4u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000ac6u, 0x00000ac5u, 0x0003003eu, 0x00000aa2u, 0x00000ac6u, 0x00050041u, 0x00000007u, 0x00000ac7u, 0x00000aa2u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000ac8u, 0x00000ac7u, 0x000500c4u, 0x00000006u, 0x00000ac9u, 0x00000ac8u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000acau, 0x00000aa2u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000acbu, 0x00000acau, 0x000500c5u, 0x00000006u, 0x00000accu, 0x00000ac9u, 0x00000acbu, 0x0003003eu, 0x00000aa3u, 0x00000accu, 0x000500c7u, 0x00000006u, 0x00000aceu, 0x00000accu, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000acfu, 0x00000aceu, 0x000001c4u, 0x0003003eu, 0x00000aa4u, 0x00000acfu, 0x000500c2u, 0x00000006u, 0x00000ad1u, 0x00000accu, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000ad2u, 0x00000ad1u, 0x0003003eu, 0x00000424u, 0x00000ad2u, 0x000500c7u, 0x00000006u, 0x00000ad4u, 0x00000accu, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x00000ad5u, 0x00000ad4u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x00000ad7u, 0x00000ad5u, 0x00000acfu, 0x00040071u, 0x00000008u, 0x00000ad8u, 0x00000ad7u, 0x0003003eu, 0x00000405u, 0x00000ad8u, 0x000200f9u, 0x00000aa5u, 0x000200f8u, 0x00000aa6u, 0x00050041u, 0x00000404u, 0x00000aa8u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000aa9u, 0x00000aa8u, 0x000500c2u, 0x00000008u, 0x00000aaau, 0x00000aa9u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000aabu, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000aacu, 0x00000aabu, 0x000500c7u, 0x00000008u, 0x00000aadu, 0x00000aacu, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x00000aaeu, 0x00000aaau, 0x00000aadu, 0x0003003eu, 0x00000405u, 0x00000aaeu, 0x00050041u, 0x00000404u, 0x00000aafu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000ab0u, 0x00000aafu, 0x00040071u, 0x00000006u, 0x00000ab1u, 0x00000ab0u, 0x000500c7u, 0x00000006u, 0x00000ab2u, 0x00000ab1u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000ab3u, 0x00000ab2u, 0x00000413u, 0x0003003eu, 0x00000aa1u, 0x00000ab3u, 0x00050041u, 0x00000404u, 0x00000ab4u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000ab5u, 0x00000ab4u, 0x00040071u, 0x00000006u, 0x00000ab6u, 0x00000ab5u, 0x000500c7u, 0x00000006u, 0x00000ab7u, 0x00000ab6u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000ab8u, 0x00000ab7u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x00000abau, 0x00000ab3u, 0x00000ab8u, 0x0003003eu, 0x00000aa1u, 0x00000abau, 0x0004003du, 0x00000008u, 0x00000abcu, 0x00000aabu, 0x00040071u, 0x00000006u, 0x00000abdu, 0x00000abcu, 0x000500c7u, 0x00000006u, 0x00000abeu, 0x00000abdu, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000abfu, 0x00000abeu, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000ac1u, 0x00000abau, 0x00000abfu, 0x0003003eu, 0x00000aa1u, 0x00000ac1u, 0x00040071u, 0x0000000au, 0x00000ac3u, 0x00000ac1u, 0x0003003eu, 0x00000424u, 0x00000ac3u, 0x000200f9u, 0x00000aa5u, 0x000200f8u, 0x00000aa5u, 0x000200f9u, 0x00000a7eu, 0x000200f8u, 0x00000a7eu, 0x000200f9u, 0x000008b2u, 0x000200f8u, 0x000008b2u, 0x000700f5u, 0x0000001bu, 0x00001942u, 0x00001521u, 0x00000a7eu, 0x0000194au, 0x000008bdu, 0x000700f5u, 0x00000008u, 0x00001927u, 0x000014f6u, 0x00000a7eu, 0x0000192fu, 0x000008bdu, 0x000700f5u, 0x00000008u, 0x0000190cu, 0x000014ccu, 0x00000a7eu, 0x00001914u, 0x000008bdu, 0x000700f5u, 0x0000001bu, 0x000018e4u, 0x000013efu, 0x00000a7eu, 0x000018ecu, 0x000008bdu, 0x000700f5u, 0x00000008u, 0x000018bcu, 0x000013d1u, 0x00000a7eu, 0x000018c4u, 0x000008bdu, 0x000700f5u, 0x00000008u, 0x00001894u, 0x000013b3u, 0x00000a7eu, 0x0000189cu, 0x000008bdu, 0x000700f5u, 0x0000001bu, 0x00001856u, 0x000012bdu, 0x00000a7eu, 0x0000185eu, 0x000008bdu, 0x000200f9u, 0x000008acu, 0x000200f8u, 0x000008acu, 0x000700f5u, 0x0000001bu, 0x00001941u, 0x00001521u, 0x00000881u, 0x00001942u, 0x000008b2u, 0x000700f5u, 0x00000008u, 0x00001926u, 0x000014f6u, 0x00000881u, 0x00001927u, 0x000008b2u, 0x000700f5u, 0x00000008u, 0x0000190bu, 0x000014ccu, 0x00000881u, 0x0000190cu, 0x000008b2u, 0x000700f5u, 0x0000001bu, 0x000018e3u, 0x000013efu, 0x00000881u, 0x000018e4u, 0x000008b2u, 0x000700f5u, 0x00000008u, 0x000018bbu, 0x000013d1u, 0x00000881u, 0x000018bcu, 0x000008b2u, 0x000700f5u, 0x00000008u, 0x00001893u, 0x000013b3u, 0x00000881u, 0x00001894u, 0x000008b2u, 0x000700f5u, 0x0000001bu, 0x00001855u, 0x000012bdu, 0x00000881u, 0x00001856u, 0x000008b2u, 0x00050080u, 0x00000006u, 0x000008fau, 0x000012afu, 0x000000b5u, 0x0003003eu, 0x0000086cu, 0x000008fau, 0x000200f9u, 0x00000883u, 0x000200f8u, 0x00000883u, 0x000200f9u, 0x00000880u, 0x000200f8u, 0x00000882u, 0x000200f9u, 0x0000085fu, 0x000200f8u, 0x0000085fu, 0x000200f9u, 0x0000085cu, 0x000200f8u, 0x0000085eu, 0x0003003eu, 0x000008fbu, 0x0000084eu, 0x0003003eu, 0x000008feu, 0x00000851u, 0x0003003eu, 0x00000901u, 0x00000854u, 0x0003003eu, 0x00000904u, 0x00000857u, 0x0003003eu, 0x00000907u, 0x0000085au, 0x0004003du, 0x00000074u, 0x00001010u, 0x000008fbu, 0x000500b0u, 0x00000599u, 0x00001014u, 0x00001010u, 0x00000971u, 0x0004009bu, 0x00000034u, 0x00001015u, 0x00001014u, 0x000300f7u, 0x00001016u, 0x00000000u, 0x000400fau, 0x00001015u, 0x00001017u, 0x00001016u, 0x000200f8u, 0x00001017u, 0x000500c2u, 0x00000006u, 0x00001019u, 0x00000851u, 0x000004a9u, 0x0003003eu, 0x00001006u, 0x00001019u, 0x0004003du, 0x00000074u, 0x0000101au, 0x000008fbu, 0x00050050u, 0x00000074u, 0x0000101bu, 0x0000060eu, 0x0000060eu, 0x000500c7u, 0x00000074u, 0x0000101cu, 0x0000101au, 0x0000101bu, 0x0003003eu, 0x00001007u, 0x0000101cu, 0x0004003du, 0x00000074u, 0x0000101du, 0x000008fbu, 0x00050050u, 0x000005a6u, 0x0000101eu, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x0000101fu, 0x0000101du, 0x0000101eu, 0x0003003eu, 0x000008fbu, 0x0000101fu, 0x00050041u, 0x00000007u, 0x00001020u, 0x00001007u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00001021u, 0x00001020u, 0x00050084u, 0x00000006u, 0x00001022u, 0x00001021u, 0x00000617u, 0x00050041u, 0x00000007u, 0x00001023u, 0x00001007u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00001024u, 0x00001023u, 0x00050080u, 0x00000006u, 0x00001025u, 0x00001022u, 0x00001024u, 0x0003003eu, 0x00001008u, 0x00001025u, 0x00050041u, 0x00000007u, 0x00001028u, 0x000008fbu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00001029u, 0x00001028u, 0x00050084u, 0x00000006u, 0x0000102au, 0x00001019u, 0x00001029u, 0x00050080u, 0x00000006u, 0x0000102bu, 0x00000857u, 0x0000102au, 0x00050041u, 0x00000007u, 0x0000102cu, 0x000008fbu, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000102du, 0x0000102cu, 0x00050080u, 0x00000006u, 0x0000102eu, 0x0000102bu, 0x0000102du, 0x0003003eu, 0x00001009u, 0x0000102eu, 0x0003003eu, 0x0000100au, 0x0000102eu, 0x0003003eu, 0x0000100bu, 0x00001025u, 0x0004003du, 0x00000034u, 0x0000104au, 0x00000471u, 0x000300f7u, 0x0000104bu, 0x00000000u, 0x000400fau, 0x0000104au, 0x0000104cu, 0x0000104bu, 0x000200f8u, 0x0000104cu, 0x000300f7u, 0x0000104du, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x0000104du, 0x00000000u, 0x0000104eu, 0x00000001u, 0x0000104fu, 0x00000002u, 0x00001050u, 0x00000003u, 0x00001051u, 0x00000004u, 0x00001052u, 0x000200f8u, 0x00001052u, 0x000500c7u, 0x00000006u, 0x000010deu, 0x0000102eu, 0x000003e5u, 0x0003003eu, 0x0000100au, 0x000010deu, 0x00050084u, 0x00000006u, 0x000010e0u, 0x00001025u, 0x00000536u, 0x00050080u, 0x00000006u, 0x000010e2u, 0x000010deu, 0x000010e0u, 0x0003003eu, 0x0000100au, 0x000010e2u, 0x0004003du, 0x00000009u, 0x000010e3u, 0x0000038bu, 0x00040071u, 0x0000025au, 0x000010e4u, 0x000010e3u, 0x0003003eu, 0x00001048u, 0x000010e4u, 0x00050041u, 0x00000007u, 0x000010e5u, 0x00001048u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000010e6u, 0x000010e5u, 0x000500c4u, 0x00000006u, 0x000010e7u, 0x000010e6u, 0x000003f8u, 0x00050041u, 0x00000007u, 0x000010e8u, 0x00001048u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000010e9u, 0x000010e8u, 0x000500c4u, 0x00000006u, 0x000010eau, 0x000010e9u, 0x000003f9u, 0x000500c5u, 0x00000006u, 0x000010ebu, 0x000010e7u, 0x000010eau, 0x00050041u, 0x00000007u, 0x000010ecu, 0x00001048u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000010edu, 0x000010ecu, 0x000500c4u, 0x00000006u, 0x000010eeu, 0x000010edu, 0x000003b0u, 0x000500c5u, 0x00000006u, 0x000010efu, 0x000010ebu, 0x000010eeu, 0x00050041u, 0x00000007u, 0x000010f0u, 0x00001048u, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000010f1u, 0x000010f0u, 0x000500c4u, 0x00000006u, 0x000010f2u, 0x000010f1u, 0x00000198u, 0x000500c5u, 0x00000006u, 0x000010f3u, 0x000010efu, 0x000010f2u, 0x0003003eu, 0x00001049u, 0x000010f3u, 0x00060041u, 0x000003f3u, 0x000010f6u, 0x000003f1u, 0x000000abu, 0x000010e2u, 0x0003003eu, 0x000010f6u, 0x000010f3u, 0x00050084u, 0x00000006u, 0x000010f8u, 0x00000170u, 0x000010e2u, 0x00050041u, 0x00000404u, 0x000010f9u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000010fau, 0x000010f9u, 0x00040071u, 0x00000006u, 0x000010fbu, 0x000010fau, 0x0004007cu, 0x00000017u, 0x000010fcu, 0x000010fbu, 0x000500c7u, 0x00000017u, 0x000010fdu, 0x000010fcu, 0x000000b5u, 0x00050084u, 0x00000017u, 0x000010feu, 0x000010fdu, 0x000000bbu, 0x00040072u, 0x00000129u, 0x000010ffu, 0x000010feu, 0x0004007cu, 0x00000008u, 0x00001100u, 0x000010ffu, 0x00060041u, 0x00000387u, 0x00001101u, 0x00000392u, 0x000000abu, 0x000010f8u, 0x0003003eu, 0x00001101u, 0x00001100u, 0x00050080u, 0x00000006u, 0x00001104u, 0x000010f8u, 0x000001bcu, 0x00050041u, 0x00000404u, 0x00001105u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00001106u, 0x00001105u, 0x00040071u, 0x00000006u, 0x00001107u, 0x00001106u, 0x0004007cu, 0x00000017u, 0x00001108u, 0x00001107u, 0x000500c7u, 0x00000017u, 0x00001109u, 0x00001108u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x0000110au, 0x00001109u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x0000110bu, 0x0000110au, 0x0004007cu, 0x00000008u, 0x0000110cu, 0x0000110bu, 0x00060041u, 0x00000387u, 0x0000110du, 0x00000392u, 0x000000abu, 0x00001104u, 0x0003003eu, 0x0000110du, 0x0000110cu, 0x000300f7u, 0x0000110eu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000110fu, 0x0000110eu, 0x000200f8u, 0x0000110fu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x00001111u, 0x000010e2u, 0x0000056au, 0x00060041u, 0x000003f3u, 0x00001112u, 0x000003f1u, 0x000000abu, 0x00001111u, 0x0003003eu, 0x00001112u, 0x0000056cu, 0x000200f9u, 0x0000110eu, 0x000200f8u, 0x0000110eu, 0x000200f9u, 0x0000104du, 0x000200f8u, 0x00001051u, 0x000500c7u, 0x00000006u, 0x000010bdu, 0x0000102eu, 0x00000399u, 0x0003003eu, 0x0000100au, 0x000010bdu, 0x00050084u, 0x00000006u, 0x000010bfu, 0x00001025u, 0x00000510u, 0x00050080u, 0x00000006u, 0x000010c1u, 0x000010bdu, 0x000010bfu, 0x0003003eu, 0x0000100au, 0x000010c1u, 0x0004003du, 0x00000009u, 0x000010c2u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x000010c3u, 0x000010c2u, 0x000010c2u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x000010c4u, 0x000010c3u, 0x0003003eu, 0x00001046u, 0x000010c4u, 0x00050041u, 0x00000007u, 0x000010c5u, 0x00001046u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000010c6u, 0x000010c5u, 0x000500c4u, 0x00000006u, 0x000010c7u, 0x000010c6u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x000010c8u, 0x00001046u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000010c9u, 0x000010c8u, 0x000500c5u, 0x00000006u, 0x000010cau, 0x000010c7u, 0x000010c9u, 0x0003003eu, 0x00001047u, 0x000010cau, 0x000500c6u, 0x00000006u, 0x000010ccu, 0x000010c1u, 0x000001bcu, 0x00040071u, 0x0000000au, 0x000010ceu, 0x000010cau, 0x00060041u, 0x000003a8u, 0x000010cfu, 0x000003a5u, 0x000000abu, 0x000010ccu, 0x0003003eu, 0x000010cfu, 0x000010ceu, 0x0004003du, 0x00000006u, 0x000010d2u, 0x000010c8u, 0x000500c7u, 0x00000006u, 0x000010d3u, 0x000010d2u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000010d4u, 0x000010d3u, 0x000001c4u, 0x00040071u, 0x00000008u, 0x000010d5u, 0x000010d4u, 0x00060041u, 0x00000387u, 0x000010d6u, 0x00000392u, 0x000000abu, 0x000010c1u, 0x0003003eu, 0x000010d6u, 0x000010d5u, 0x000300f7u, 0x000010d7u, 0x00000000u, 0x000400fau, 0x000004abu, 0x000010d8u, 0x000010d7u, 0x000200f8u, 0x000010d8u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x000010dbu, 0x000010ccu, 0x0000052fu, 0x00060041u, 0x000003a8u, 0x000010dcu, 0x000003a5u, 0x000000abu, 0x000010dbu, 0x0003003eu, 0x000010dcu, 0x0000050au, 0x000200f9u, 0x000010d7u, 0x000200f8u, 0x000010d7u, 0x000200f9u, 0x0000104du, 0x000200f8u, 0x00001050u, 0x000500c7u, 0x00000006u, 0x0000108eu, 0x0000102eu, 0x00000399u, 0x0003003eu, 0x0000100au, 0x0000108eu, 0x00050084u, 0x00000006u, 0x00001090u, 0x00001025u, 0x000004d9u, 0x00050080u, 0x00000006u, 0x00001092u, 0x0000108eu, 0x00001090u, 0x0003003eu, 0x0000100au, 0x00001092u, 0x0004003du, 0x00000009u, 0x00001093u, 0x0000038bu, 0x00040071u, 0x0000025au, 0x00001094u, 0x00001093u, 0x0003003eu, 0x00001043u, 0x00001094u, 0x0004003du, 0x0000025au, 0x00001095u, 0x00001043u, 0x0008004fu, 0x000003acu, 0x00001096u, 0x00001095u, 0x00001095u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003acu, 0x00001098u, 0x00001096u, 0x000019c7u, 0x0004003du, 0x0000025au, 0x00001099u, 0x00001043u, 0x0009004fu, 0x0000025au, 0x0000109au, 0x00001099u, 0x00001098u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001043u, 0x0000109au, 0x00050041u, 0x00000007u, 0x0000109bu, 0x00001043u, 0x000001c4u, 0x0004003du, 0x00000006u, 0x0000109cu, 0x0000109bu, 0x000500c2u, 0x00000006u, 0x0000109du, 0x0000109cu, 0x00000453u, 0x0003003eu, 0x00001044u, 0x0000109du, 0x00050041u, 0x00000007u, 0x0000109eu, 0x00001043u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000109fu, 0x0000109eu, 0x000500c4u, 0x00000006u, 0x000010a0u, 0x0000109fu, 0x000003b0u, 0x00050041u, 0x00000007u, 0x000010a1u, 0x00001043u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000010a2u, 0x000010a1u, 0x000500c4u, 0x00000006u, 0x000010a3u, 0x000010a2u, 0x000001c4u, 0x000500c5u, 0x00000006u, 0x000010a4u, 0x000010a0u, 0x000010a3u, 0x00050041u, 0x00000007u, 0x000010a5u, 0x00001043u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000010a6u, 0x000010a5u, 0x000500c2u, 0x00000006u, 0x000010a7u, 0x000010a6u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000010a8u, 0x000010a4u, 0x000010a7u, 0x000500c2u, 0x00000006u, 0x000010aau, 0x0000109du, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000010abu, 0x000010a8u, 0x000010aau, 0x0003003eu, 0x00001045u, 0x000010abu, 0x000500c6u, 0x00000006u, 0x000010adu, 0x00001092u, 0x000001bcu, 0x00040071u, 0x0000000au, 0x000010afu, 0x000010abu, 0x00060041u, 0x000003a8u, 0x000010b0u, 0x000003a5u, 0x000000abu, 0x000010adu, 0x0003003eu, 0x000010b0u, 0x000010afu, 0x000500c7u, 0x00000006u, 0x000010b3u, 0x0000109du, 0x000001c4u, 0x00040071u, 0x00000008u, 0x000010b4u, 0x000010b3u, 0x00060041u, 0x00000387u, 0x000010b5u, 0x00000392u, 0x000000abu, 0x00001092u, 0x0003003eu, 0x000010b5u, 0x000010b4u, 0x000300f7u, 0x000010b6u, 0x00000000u, 0x000400fau, 0x000004abu, 0x000010b7u, 0x000010b6u, 0x000200f8u, 0x000010b7u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x000010bau, 0x000010adu, 0x00000508u, 0x00060041u, 0x000003a8u, 0x000010bbu, 0x000003a5u, 0x000000abu, 0x000010bau, 0x0003003eu, 0x000010bbu, 0x0000050au, 0x000200f9u, 0x000010b6u, 0x000200f8u, 0x000010b6u, 0x000200f9u, 0x0000104du, 0x000200f8u, 0x0000104fu, 0x000500c7u, 0x00000006u, 0x0000106du, 0x0000102eu, 0x00000379u, 0x0003003eu, 0x0000100au, 0x0000106du, 0x00050084u, 0x00000006u, 0x0000106fu, 0x00001025u, 0x00000378u, 0x00050080u, 0x00000006u, 0x00001071u, 0x0000106du, 0x0000106fu, 0x0003003eu, 0x0000100au, 0x00001071u, 0x000500c6u, 0x00000006u, 0x00001073u, 0x00001071u, 0x000001c4u, 0x00050041u, 0x00000404u, 0x00001074u, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00001075u, 0x00001074u, 0x00060041u, 0x00000387u, 0x00001076u, 0x00000384u, 0x000000abu, 0x00001073u, 0x0003003eu, 0x00001076u, 0x00001075u, 0x000500c7u, 0x00000006u, 0x00001078u, 0x00001071u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x00001079u, 0x00001078u, 0x00000198u, 0x000300f7u, 0x0000107au, 0x00000000u, 0x000400fau, 0x00001079u, 0x0000107bu, 0x0000107au, 0x000200f8u, 0x0000107bu, 0x000500c2u, 0x00000006u, 0x0000107du, 0x00001071u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x0000107fu, 0x00001074u, 0x00040071u, 0x00000006u, 0x00001080u, 0x0000107fu, 0x0004007cu, 0x00000017u, 0x00001081u, 0x00001080u, 0x000500c7u, 0x00000017u, 0x00001082u, 0x00001081u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00001083u, 0x00001082u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00001084u, 0x00001083u, 0x0004007cu, 0x00000008u, 0x00001085u, 0x00001084u, 0x00060041u, 0x00000387u, 0x00001086u, 0x00000392u, 0x000000abu, 0x0000107du, 0x0003003eu, 0x00001086u, 0x00001085u, 0x000200f9u, 0x0000107au, 0x000200f8u, 0x0000107au, 0x000300f7u, 0x00001087u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00001088u, 0x00001087u, 0x000200f8u, 0x00001088u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x0000108bu, 0x00001073u, 0x00000378u, 0x00060041u, 0x00000387u, 0x0000108cu, 0x00000384u, 0x000000abu, 0x0000108bu, 0x0003003eu, 0x0000108cu, 0x000001cfu, 0x000200f9u, 0x00001087u, 0x000200f8u, 0x00001087u, 0x000200f9u, 0x0000104du, 0x000200f8u, 0x0000104eu, 0x000500c7u, 0x00000006u, 0x00001054u, 0x0000102eu, 0x00000379u, 0x0003003eu, 0x0000100au, 0x00001054u, 0x00050084u, 0x00000006u, 0x00001056u, 0x00001025u, 0x00000378u, 0x00050080u, 0x00000006u, 0x00001058u, 0x00001054u, 0x00001056u, 0x0003003eu, 0x0000100au, 0x00001058u, 0x000500c6u, 0x00000006u, 0x0000105au, 0x00001058u, 0x000001c4u, 0x00060041u, 0x00000387u, 0x0000105bu, 0x00000384u, 0x000000abu, 0x0000105au, 0x0003003eu, 0x0000105bu, 0x000001eau, 0x000500c7u, 0x00000006u, 0x0000105du, 0x00001058u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x0000105eu, 0x0000105du, 0x00000198u, 0x000300f7u, 0x0000105fu, 0x00000000u, 0x000400fau, 0x0000105eu, 0x00001060u, 0x0000105fu, 0x000200f8u, 0x00001060u, 0x000500c2u, 0x00000006u, 0x00001062u, 0x00001058u, 0x000001bcu, 0x00050041u, 0x00000404u, 0x00001063u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00001064u, 0x00001063u, 0x00060041u, 0x00000387u, 0x00001065u, 0x00000392u, 0x000000abu, 0x00001062u, 0x0003003eu, 0x00001065u, 0x00001064u, 0x000200f9u, 0x0000105fu, 0x000200f8u, 0x0000105fu, 0x000300f7u, 0x00001066u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00001067u, 0x00001066u, 0x000200f8u, 0x00001067u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x0000106au, 0x0000105au, 0x00000378u, 0x00060041u, 0x00000387u, 0x0000106bu, 0x00000384u, 0x000000abu, 0x0000106au, 0x0003003eu, 0x0000106bu, 0x000001cfu, 0x000200f9u, 0x00001066u, 0x000200f8u, 0x00001066u, 0x000200f9u, 0x0000104du, 0x000200f8u, 0x0000104du, 0x000200f9u, 0x0000104bu, 0x000200f8u, 0x0000104bu, 0x0004003du, 0x00000006u, 0x00001035u, 0x00001028u, 0x00050084u, 0x00000006u, 0x00001036u, 0x00001019u, 0x00001035u, 0x00050080u, 0x00000006u, 0x00001037u, 0x0000085au, 0x00001036u, 0x0004003du, 0x00000006u, 0x00001039u, 0x0000102cu, 0x00050080u, 0x00000006u, 0x0000103au, 0x00001037u, 0x00001039u, 0x0003003eu, 0x00001009u, 0x0000103au, 0x0003003eu, 0x0000100cu, 0x0000103au, 0x0003003eu, 0x0000100du, 0x00001025u, 0x000300f7u, 0x00001113u, 0x00000000u, 0x000400fau, 0x00000571u, 0x00001114u, 0x00001113u, 0x000200f8u, 0x00001114u, 0x0004003du, 0x00000034u, 0x00001115u, 0x00000574u, 0x000300f7u, 0x00001116u, 0x00000000u, 0x000400fau, 0x00001115u, 0x00001117u, 0x00001116u, 0x000200f8u, 0x00001117u, 0x000500c7u, 0x00000006u, 0x00001119u, 0x0000103au, 0x00000399u, 0x0003003eu, 0x0000100cu, 0x00001119u, 0x00050084u, 0x00000006u, 0x0000111bu, 0x00001025u, 0x0000057bu, 0x00050080u, 0x00000006u, 0x0000111du, 0x00001119u, 0x0000111bu, 0x0003003eu, 0x0000100cu, 0x0000111du, 0x000500c6u, 0x00000006u, 0x0000111fu, 0x0000111du, 0x000001bcu, 0x0004003du, 0x0000000au, 0x00001120u, 0x00000424u, 0x000500c4u, 0x0000000au, 0x00001121u, 0x00001120u, 0x0000047fu, 0x0004003du, 0x00000008u, 0x00001122u, 0x00000405u, 0x000500c2u, 0x00000008u, 0x00001123u, 0x00001122u, 0x0000047fu, 0x00040071u, 0x0000000au, 0x00001124u, 0x00001123u, 0x000500c5u, 0x0000000au, 0x00001125u, 0x00001121u, 0x00001124u, 0x00060041u, 0x000003a8u, 0x00001126u, 0x000003a5u, 0x000000abu, 0x0000111fu, 0x0003003eu, 0x00001126u, 0x00001125u, 0x0004003du, 0x00000008u, 0x00001128u, 0x00000405u, 0x00040071u, 0x0000000au, 0x00001129u, 0x00001128u, 0x000500c7u, 0x0000000au, 0x0000112au, 0x00001129u, 0x00000485u, 0x00040071u, 0x00000008u, 0x0000112bu, 0x0000112au, 0x00060041u, 0x00000387u, 0x0000112cu, 0x00000392u, 0x000000abu, 0x0000111du, 0x0003003eu, 0x0000112cu, 0x0000112bu, 0x000300f7u, 0x0000112du, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000112eu, 0x0000112du, 0x000200f8u, 0x0000112eu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x00001131u, 0x0000111fu, 0x00000592u, 0x00060041u, 0x000003a8u, 0x00001132u, 0x000003a5u, 0x000000abu, 0x00001131u, 0x0003003eu, 0x00001132u, 0x0000050au, 0x000200f9u, 0x0000112du, 0x000200f8u, 0x0000112du, 0x000200f9u, 0x00001116u, 0x000200f8u, 0x00001116u, 0x000200f9u, 0x00001113u, 0x000200f8u, 0x00001113u, 0x000300f7u, 0x0000103eu, 0x00000000u, 0x000400fau, 0x0000063au, 0x0000103fu, 0x0000103eu, 0x000200f8u, 0x0000103fu, 0x0004003du, 0x00000074u, 0x00001040u, 0x000008fbu, 0x0003003eu, 0x0000100eu, 0x00001040u, 0x0003003eu, 0x0000100fu, 0x00001019u, 0x00050041u, 0x00000007u, 0x00001136u, 0x0000100eu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00001137u, 0x00001136u, 0x000500c2u, 0x00000006u, 0x00001138u, 0x00001137u, 0x00000170u, 0x00050080u, 0x00000006u, 0x0000113au, 0x00001019u, 0x000001c4u, 0x000500c2u, 0x00000006u, 0x0000113bu, 0x0000113au, 0x00000170u, 0x00050084u, 0x00000006u, 0x0000113cu, 0x00001138u, 0x0000113bu, 0x00050041u, 0x00000007u, 0x0000113du, 0x0000100eu, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000113eu, 0x0000113du, 0x000500c2u, 0x00000006u, 0x0000113fu, 0x0000113eu, 0x00000170u, 0x00050080u, 0x00000006u, 0x00001140u, 0x0000113cu, 0x0000113fu, 0x0003003eu, 0x00001133u, 0x00001140u, 0x0004003du, 0x00000074u, 0x00001141u, 0x0000100eu, 0x000500c7u, 0x00000074u, 0x00001143u, 0x00001141u, 0x000019c8u, 0x0003003eu, 0x00001134u, 0x00001143u, 0x0004003du, 0x00000034u, 0x00001144u, 0x00000471u, 0x000600a9u, 0x00000006u, 0x00001145u, 0x00001144u, 0x000001bcu, 0x00000198u, 0x0004003du, 0x00000034u, 0x00001146u, 0x00000574u, 0x000600a9u, 0x00000006u, 0x00001147u, 0x00001146u, 0x000001bcu, 0x00000198u, 0x00050084u, 0x00000006u, 0x00001148u, 0x00000170u, 0x00001147u, 0x00050080u, 0x00000006u, 0x00001149u, 0x00001145u, 0x00001148u, 0x0003003eu, 0x00001135u, 0x00001149u, 0x00050041u, 0x00000007u, 0x0000114au, 0x00001134u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000114bu, 0x0000114au, 0x00050041u, 0x00000007u, 0x0000114cu, 0x00001134u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000114du, 0x0000114cu, 0x00050084u, 0x00000006u, 0x0000114eu, 0x0000114du, 0x00000420u, 0x00050080u, 0x00000006u, 0x0000114fu, 0x0000114bu, 0x0000114eu, 0x00050084u, 0x00000006u, 0x00001150u, 0x00000170u, 0x0000114fu, 0x000500c4u, 0x00000006u, 0x00001152u, 0x00001149u, 0x00001150u, 0x0003003eu, 0x00001135u, 0x00001152u, 0x000500abu, 0x00000034u, 0x00001154u, 0x00001152u, 0x00000198u, 0x000300f7u, 0x00001155u, 0x00000000u, 0x000400fau, 0x00001154u, 0x00001156u, 0x00001155u, 0x000200f8u, 0x00001156u, 0x00050080u, 0x00000006u, 0x00001158u, 0x000005fau, 0x00001140u, 0x00060041u, 0x000003f3u, 0x00001159u, 0x000003f1u, 0x000000abu, 0x00001158u, 0x000700f1u, 0x00000006u, 0x0000115bu, 0x00001159u, 0x000001bcu, 0x00000198u, 0x00001152u, 0x000200f9u, 0x00001155u, 0x000200f8u, 0x00001155u, 0x000200f9u, 0x0000103eu, 0x000200f8u, 0x0000103eu, 0x000200f9u, 0x00001016u, 0x000200f8u, 0x00001016u, 0x0003003eu, 0x00000961u, 0x000002bcu, 0x000200f9u, 0x0000095fu, 0x000200f8u, 0x0000095fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000du, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x00000007u, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x000000ddu, 0x00001235u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001234u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001233u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00001232u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001231u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001230u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000122fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000122eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000122du, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000122cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000122bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000122au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001229u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001228u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001227u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000000acu, 0x0000000fu, 0x00060041u, 0x000000adu, 0x000000aeu, 0x000000aau, 0x000000abu, 0x000000acu, 0x0004003du, 0x000000a6u, 0x000000afu, 0x000000aeu, 0x00050051u, 0x00000009u, 0x000000b2u, 0x000000afu, 0x00000000u, 0x0003003eu, 0x00001227u, 0x000000b2u, 0x00050051u, 0x00000009u, 0x000000b4u, 0x000000afu, 0x00000001u, 0x0003003eu, 0x00001228u, 0x000000b4u, 0x00050051u, 0x00000009u, 0x000000b7u, 0x000000afu, 0x00000002u, 0x0003003eu, 0x00001229u, 0x000000b7u, 0x00050051u, 0x00000009u, 0x000000bau, 0x000000afu, 0x00000003u, 0x0003003eu, 0x0000122au, 0x000000bau, 0x00050051u, 0x00000009u, 0x000000bdu, 0x000000afu, 0x00000004u, 0x0003003eu, 0x0000122bu, 0x000000bdu, 0x00050051u, 0x00000009u, 0x000000c0u, 0x000000afu, 0x00000005u, 0x0003003eu, 0x0000122cu, 0x000000c0u, 0x00050051u, 0x00000009u, 0x000000c3u, 0x000000afu, 0x00000006u, 0x0003003eu, 0x0000122du, 0x000000c3u, 0x00050051u, 0x00000009u, 0x000000c6u, 0x000000afu, 0x00000007u, 0x0003003eu, 0x0000122eu, 0x000000c6u, 0x00050051u, 0x00000009u, 0x000000c9u, 0x000000afu, 0x00000008u, 0x0003003eu, 0x0000122fu, 0x000000c9u, 0x00050051u, 0x00000009u, 0x000000ccu, 0x000000afu, 0x00000009u, 0x0003003eu, 0x00001230u, 0x000000ccu, 0x00050051u, 0x00000006u, 0x000000cfu, 0x000000afu, 0x0000000au, 0x0003003eu, 0x00001231u, 0x000000cfu, 0x00050051u, 0x0000000au, 0x000000d2u, 0x000000afu, 0x0000000bu, 0x0003003eu, 0x00001232u, 0x000000d2u, 0x00050051u, 0x00000008u, 0x000000d5u, 0x000000afu, 0x0000000cu, 0x0003003eu, 0x00001233u, 0x000000d5u, 0x00050051u, 0x00000008u, 0x000000d8u, 0x000000afu, 0x0000000du, 0x0003003eu, 0x00001234u, 0x000000d8u, 0x00050051u, 0x0000000cu, 0x000000dbu, 0x000000afu, 0x0000000eu, 0x0003003eu, 0x00001235u, 0x000000dbu, 0x00120050u, 0x0000000du, 0x00001245u, 0x000000b2u, 0x000000b4u, 0x000000b7u, 0x000000bau, 0x000000bdu, 0x000000c0u, 0x000000c3u, 0x000000c6u, 0x000000c9u, 0x000000ccu, 0x000000cfu, 0x000000d2u, 0x000000d5u, 0x000000d8u, 0x000000dbu, 0x000200feu, 0x00001245u, 0x00010038u, 0x00050036u, 0x00000012u, 0x00000015u, 0x00000000u, 0x00000013u, 0x00030037u, 0x00000007u, 0x00000014u, 0x000200f8u, 0x00000016u, 0x0004003bu, 0x00000046u, 0x0000124cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000124bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000124au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001249u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001248u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001247u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001246u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x00000014u, 0x00060041u, 0x000000e8u, 0x000000e9u, 0x000000e6u, 0x000000abu, 0x000000e7u, 0x0004003du, 0x000000e2u, 0x000000eau, 0x000000e9u, 0x00050051u, 0x00000009u, 0x000000edu, 0x000000eau, 0x00000000u, 0x0003003eu, 0x00001246u, 0x000000edu, 0x00050051u, 0x00000009u, 0x000000efu, 0x000000eau, 0x00000001u, 0x0003003eu, 0x00001247u, 0x000000efu, 0x00050051u, 0x00000006u, 0x000000f1u, 0x000000eau, 0x00000002u, 0x0003003eu, 0x00001248u, 0x000000f1u, 0x00050051u, 0x00000008u, 0x000000f3u, 0x000000eau, 0x00000003u, 0x0003003eu, 0x00001249u, 0x000000f3u, 0x00050051u, 0x00000008u, 0x000000f5u, 0x000000eau, 0x00000004u, 0x0003003eu, 0x0000124au, 0x000000f5u, 0x00050051u, 0x00000008u, 0x000000f7u, 0x000000eau, 0x00000005u, 0x0003003eu, 0x0000124bu, 0x000000f7u, 0x00050051u, 0x00000008u, 0x000000f9u, 0x000000eau, 0x00000006u, 0x0003003eu, 0x0000124cu, 0x000000f9u, 0x000a0050u, 0x00000012u, 0x00001254u, 0x000000edu, 0x000000efu, 0x000000f1u, 0x000000f3u, 0x000000f5u, 0x000000f7u, 0x000000f9u, 0x000200feu, 0x00001254u, 0x00010038u, 0x00050036u, 0x0000001bu, 0x0000001fu, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000019u, 0x0000001du, 0x00030037u, 0x0000001au, 0x0000001eu, 0x000200f8u, 0x00000020u, 0x0004003bu, 0x00000019u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000105u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000114u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x0000011du, 0x00000007u, 0x0004003du, 0x00000017u, 0x000000ffu, 0x0000001eu, 0x00060050u, 0x00000018u, 0x00000100u, 0x000000ffu, 0x000000ffu, 0x000000ffu, 0x000500c3u, 0x00000018u, 0x00000102u, 0x00000100u, 0x00000101u, 0x000500c7u, 0x00000018u, 0x00000104u, 0x00000102u, 0x000019cau, 0x0003003eu, 0x000000feu, 0x00000104u, 0x0004003du, 0x00000018u, 0x00000106u, 0x0000001du, 0x000500c7u, 0x00000018u, 0x00000109u, 0x00000106u, 0x000019cbu, 0x00050080u, 0x00000018u, 0x0000010bu, 0x00000109u, 0x000019ccu, 0x0004003du, 0x00000018u, 0x0000010eu, 0x0000001du, 0x000500adu, 0x00000111u, 0x00000112u, 0x0000010eu, 0x00000110u, 0x000600a9u, 0x00000018u, 0x00000113u, 0x00000112u, 0x0000010du, 0x0000010bu, 0x0003003eu, 0x00000105u, 0x00000113u, 0x0004003du, 0x00000018u, 0x00000116u, 0x0000001du, 0x000500c7u, 0x00000018u, 0x00000118u, 0x00000116u, 0x000019cau, 0x00050082u, 0x00000018u, 0x00000119u, 0x00000104u, 0x00000118u, 0x000500c3u, 0x00000018u, 0x0000011cu, 0x00000119u, 0x000019cdu, 0x0003003eu, 0x00000114u, 0x0000011cu, 0x0004003du, 0x00000018u, 0x0000011fu, 0x0000001du, 0x00050082u, 0x00000018u, 0x00000120u, 0x00000113u, 0x0000011fu, 0x0003003eu, 0x0000011du, 0x00000120u, 0x0004003du, 0x00000018u, 0x00000121u, 0x0000001du, 0x000500c7u, 0x00000018u, 0x00000124u, 0x00000120u, 0x0000011cu, 0x00050080u, 0x00000018u, 0x00000125u, 0x00000121u, 0x00000124u, 0x0003003eu, 0x00000105u, 0x00000125u, 0x000500c7u, 0x00000018u, 0x00000128u, 0x00000125u, 0x0000010du, 0x00040072u, 0x0000012au, 0x0000012bu, 0x00000128u, 0x0004007cu, 0x0000001bu, 0x0000012cu, 0x0000012bu, 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000017u, 0x00000024u, 0x00000000u, 0x00000022u, 0x00030037u, 0x00000021u, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003bu, 0x0000001au, 0x0000012fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000133u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000136u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000013au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000013eu, 0x00000007u, 0x0004003du, 0x0000000au, 0x00000130u, 0x00000023u, 0x00040071u, 0x00000006u, 0x00000131u, 0x00000130u, 0x0004007cu, 0x00000017u, 0x00000132u, 0x00000131u, 0x0003003eu, 0x0000012fu, 0x00000132u, 0x000500c3u, 0x00000017u, 0x00000135u, 0x00000132u, 0x000000d3u, 0x0003003eu, 0x00000133u, 0x00000135u, 0x000500c7u, 0x00000017u, 0x00000139u, 0x00000132u, 0x00000138u, 0x0003003eu, 0x00000136u, 0x00000139u, 0x00050082u, 0x00000017u, 0x0000013cu, 0x000000c4u, 0x00000135u, 0x0007000cu, 0x00000017u, 0x0000013du, 0x00000001u, 0x0000002au, 0x0000013cu, 0x000000abu, 0x0003003eu, 0x0000013au, 0x0000013du, 0x000500c3u, 0x00000017u, 0x00000141u, 0x0000013fu, 0x00000135u, 0x00050082u, 0x00000017u, 0x00000142u, 0x0000013fu, 0x00000141u, 0x0003003eu, 0x0000013eu, 0x00000142u, 0x000500c4u, 0x00000017u, 0x00000145u, 0x00000139u, 0x0000013du, 0x00050080u, 0x00000017u, 0x00000147u, 0x00000145u, 0x00000142u, 0x000200feu, 0x00000147u, 0x00010038u, 0x00050036u, 0x0000000au, 0x00000028u, 0x00000000u, 0x00000026u, 0x00030037u, 0x0000001au, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x0000001au, 0x0000014au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000014fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000156u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000015au, 0x00000007u, 0x0004003du, 0x00000017u, 0x0000014cu, 0x00000027u, 0x00050082u, 0x00000017u, 0x0000014du, 0x0000014bu, 0x0000014cu, 0x0007000cu, 0x00000017u, 0x0000014eu, 0x00000001u, 0x0000002au, 0x0000014du, 0x000000b5u, 0x0003003eu, 0x0000014au, 0x0000014eu, 0x0006000cu, 0x00000017u, 0x00000152u, 0x00000001u, 0x0000004au, 0x0000014eu, 0x00050082u, 0x00000017u, 0x00000153u, 0x00000150u, 0x00000152u, 0x0003003eu, 0x0000014fu, 0x00000153u, 0x0008000cu, 0x00000017u, 0x00000155u, 0x00000001u, 0x0000002du, 0x00000153u, 0x000000abu, 0x000000c7u, 0x0003003eu, 0x0000014fu, 0x00000155u, 0x00050082u, 0x00000017u, 0x00000158u, 0x000000c4u, 0x00000155u, 0x0007000cu, 0x00000017u, 0x00000159u, 0x00000001u, 0x0000002au, 0x00000158u, 0x000000abu, 0x0003003eu, 0x00000156u, 0x00000159u, 0x0004003du, 0x00000017u, 0x0000015bu, 0x00000027u, 0x000500c3u, 0x00000017u, 0x0000015du, 0x0000015bu, 0x00000159u, 0x000500c7u, 0x00000017u, 0x0000015eu, 0x0000015du, 0x00000138u, 0x0003003eu, 0x0000015au, 0x0000015eu, 0x000500c4u, 0x00000017u, 0x00000160u, 0x00000155u, 0x000000d3u, 0x00050080u, 0x00000017u, 0x00000162u, 0x00000160u, 0x0000015eu, 0x00040072u, 0x0000000bu, 0x00000163u, 0x00000162u, 0x0004007cu, 0x0000000au, 0x00000164u, 0x00000163u, 0x000200feu, 0x00000164u, 0x00010038u, 0x00050036u, 0x00000017u, 0x0000002cu, 0x00000000u, 0x0000002au, 0x00030037u, 0x0000001au, 0x0000002bu, 0x000200f8u, 0x0000002du, 0x0004003du, 0x00000017u, 0x00000167u, 0x0000002bu, 0x000500c4u, 0x00000017u, 0x00000168u, 0x000000b5u, 0x00000167u, 0x000200feu, 0x00000168u, 0x00010038u, 0x00050036u, 0x00000017u, 0x0000002fu, 0x00000000u, 0x0000002au, 0x00030037u, 0x0000001au, 0x0000002eu, 0x000200f8u, 0x00000030u, 0x0004003du, 0x00000017u, 0x0000016bu, 0x0000002eu, 0x0006000cu, 0x00000017u, 0x0000016cu, 0x00000001u, 0x0000004au, 0x0000016bu, 0x0007000cu, 0x00000017u, 0x0000016du, 0x00000001u, 0x0000002au, 0x0000016cu, 0x000000abu, 0x000200feu, 0x0000016du, 0x00010038u, 0x00050036u, 0x0000001bu, 0x00000041u, 0x00000000u, 0x00000038u, 0x00030037u, 0x00000032u, 0x00000039u, 0x00030037u, 0x00000033u, 0x0000003au, 0x00030037u, 0x00000035u, 0x0000003bu, 0x00030037u, 0x00000035u, 0x0000003cu, 0x00030037u, 0x00000035u, 0x0000003du, 0x00030037u, 0x00000035u, 0x0000003eu, 0x00030037u, 0x00000037u, 0x0000003fu, 0x00030037u, 0x00000035u, 0x00000040u, 0x000200f8u, 0x00000042u, 0x0005003bu, 0x00000035u, 0x00000966u, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000017au, 0x00000963u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x0000017bu, 0x00000007u, 0x0004003bu, 0x0000017au, 0x000001a2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000001e0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000001f6u, 0x00000007u, 0x0004003bu, 0x00000219u, 0x0000021au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000023cu, 0x00000007u, 0x000300f7u, 0x00000962u, 0x00000000u, 0x000300fbu, 0x00000198u, 0x00000965u, 0x000200f8u, 0x00000965u, 0x00050041u, 0x00000046u, 0x00000171u, 0x0000003au, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000172u, 0x00000171u, 0x00040071u, 0x00000006u, 0x00000173u, 0x00000172u, 0x0004007cu, 0x00000017u, 0x00000174u, 0x00000173u, 0x000300f7u, 0x00000179u, 0x00000000u, 0x000b00fbu, 0x00000174u, 0x00000179u, 0x00000000u, 0x00000175u, 0x00000001u, 0x00000176u, 0x00000002u, 0x00000177u, 0x00000003u, 0x00000178u, 0x000200f8u, 0x00000175u, 0x00050041u, 0x00000033u, 0x0000017cu, 0x00000039u, 0x000000abu, 0x0004003du, 0x00000009u, 0x0000017du, 0x0000017cu, 0x0008004fu, 0x0000001bu, 0x0000017eu, 0x0000017du, 0x0000017du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x0000017eu, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000176u, 0x00050041u, 0x00000033u, 0x00000180u, 0x00000039u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x00000181u, 0x00000180u, 0x0008004fu, 0x0000001bu, 0x00000182u, 0x00000181u, 0x00000181u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x00000182u, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000177u, 0x00050041u, 0x00000033u, 0x00000184u, 0x00000039u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x00000185u, 0x00000184u, 0x0008004fu, 0x0000001bu, 0x00000186u, 0x00000185u, 0x00000185u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x00000186u, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000178u, 0x00050041u, 0x00000033u, 0x00000188u, 0x00000039u, 0x000000b8u, 0x0004003du, 0x00000009u, 0x00000189u, 0x00000188u, 0x0008004fu, 0x0000001bu, 0x0000018au, 0x00000189u, 0x00000189u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x0000018au, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000179u, 0x000d00f5u, 0x0000001bu, 0x00001976u, 0x00001977u, 0x00000965u, 0x0000017eu, 0x00000175u, 0x00000182u, 0x00000176u, 0x00000186u, 0x00000177u, 0x0000018au, 0x00000178u, 0x0004003du, 0x00000034u, 0x0000018du, 0x00000040u, 0x000300f7u, 0x0000018fu, 0x00000000u, 0x000400fau, 0x0000018du, 0x0000018eu, 0x0000018fu, 0x000200f8u, 0x0000018eu, 0x0004003du, 0x00000034u, 0x00000190u, 0x0000003du, 0x0004003du, 0x00000034u, 0x00000191u, 0x0000003eu, 0x000400a8u, 0x00000034u, 0x00000192u, 0x00000191u, 0x000500a7u, 0x00000034u, 0x00000193u, 0x00000190u, 0x00000192u, 0x000300f7u, 0x00000195u, 0x00000000u, 0x000400fau, 0x00000193u, 0x00000194u, 0x00000195u, 0x000200f8u, 0x00000194u, 0x0003003eu, 0x00000966u, 0x000002bcu, 0x0003003eu, 0x00000963u, 0x00001976u, 0x000200f9u, 0x00000962u, 0x000200f8u, 0x00000195u, 0x000200f9u, 0x0000018fu, 0x000200f8u, 0x0000018fu, 0x00050041u, 0x00000046u, 0x00000199u, 0x0000003au, 0x00000198u, 0x0004003du, 0x00000008u, 0x0000019au, 0x00000199u, 0x00040071u, 0x00000006u, 0x0000019bu, 0x0000019au, 0x0004007cu, 0x00000017u, 0x0000019cu, 0x0000019bu, 0x000300f7u, 0x000001a1u, 0x00000000u, 0x000b00fbu, 0x0000019cu, 0x000001a1u, 0x00000000u, 0x0000019du, 0x00000001u, 0x0000019eu, 0x00000002u, 0x0000019fu, 0x00000003u, 0x000001a0u, 0x000200f8u, 0x0000019du, 0x00050041u, 0x00000033u, 0x000001a3u, 0x00000039u, 0x000000abu, 0x0004003du, 0x00000009u, 0x000001a4u, 0x000001a3u, 0x0008004fu, 0x0000001bu, 0x000001a5u, 0x000001a4u, 0x000001a4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001a5u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x0000019eu, 0x00050041u, 0x00000033u, 0x000001a7u, 0x00000039u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000001a8u, 0x000001a7u, 0x0008004fu, 0x0000001bu, 0x000001a9u, 0x000001a8u, 0x000001a8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001a9u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x0000019fu, 0x00050041u, 0x00000033u, 0x000001abu, 0x00000039u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000001acu, 0x000001abu, 0x0008004fu, 0x0000001bu, 0x000001adu, 0x000001acu, 0x000001acu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001adu, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a0u, 0x00050041u, 0x00000033u, 0x000001afu, 0x00000039u, 0x000000b8u, 0x0004003du, 0x00000009u, 0x000001b0u, 0x000001afu, 0x0008004fu, 0x0000001bu, 0x000001b1u, 0x000001b0u, 0x000001b0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001b1u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a1u, 0x0004003du, 0x00000034u, 0x000001b4u, 0x00000040u, 0x000300f7u, 0x000001b6u, 0x00000000u, 0x000400fau, 0x000001b4u, 0x000001b5u, 0x000001b6u, 0x000200f8u, 0x000001b5u, 0x0004003du, 0x00000034u, 0x000001b7u, 0x0000003cu, 0x000400a8u, 0x00000034u, 0x000001b8u, 0x000001b7u, 0x000400a8u, 0x00000034u, 0x000001b9u, 0x000001b8u, 0x000300f7u, 0x000001bbu, 0x00000000u, 0x000400fau, 0x000001b9u, 0x000001bau, 0x000001bbu, 0x000200f8u, 0x000001bau, 0x00050041u, 0x00000046u, 0x000001bdu, 0x0000003au, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000001beu, 0x000001bdu, 0x00040071u, 0x00000006u, 0x000001bfu, 0x000001beu, 0x0004007cu, 0x00000017u, 0x000001c0u, 0x000001bfu, 0x000500aau, 0x00000034u, 0x000001c1u, 0x000001c0u, 0x000000abu, 0x000300f7u, 0x000001c3u, 0x00000000u, 0x000400fau, 0x000001c1u, 0x000001c2u, 0x000001c3u, 0x000200f8u, 0x000001c2u, 0x00050041u, 0x00000046u, 0x000001c5u, 0x0000003au, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001c6u, 0x000001c5u, 0x00040071u, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x0004007cu, 0x00000017u, 0x000001c8u, 0x000001c7u, 0x000500aau, 0x00000034u, 0x000001c9u, 0x000001c8u, 0x000000abu, 0x000200f9u, 0x000001c3u, 0x000200f8u, 0x000001c3u, 0x000700f5u, 0x00000034u, 0x000001cau, 0x000001c1u, 0x000001bau, 0x000001c9u, 0x000001c2u, 0x000300f7u, 0x000001ccu, 0x00000000u, 0x000400fau, 0x000001cau, 0x000001cbu, 0x000001ccu, 0x000200f8u, 0x000001cbu, 0x00060041u, 0x00000046u, 0x000001cdu, 0x00000039u, 0x000000abu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001ceu, 0x000001cdu, 0x000500aau, 0x00000034u, 0x000001d0u, 0x000001ceu, 0x000001cfu, 0x000200f9u, 0x000001ccu, 0x000200f8u, 0x000001ccu, 0x000700f5u, 0x00000034u, 0x000001d1u, 0x000001cau, 0x000001c3u, 0x000001d0u, 0x000001cbu, 0x000200f9u, 0x000001bbu, 0x000200f8u, 0x000001bbu, 0x000700f5u, 0x00000034u, 0x000001d2u, 0x000001b8u, 0x000001b5u, 0x000001d1u, 0x000001ccu, 0x000300f7u, 0x000001d4u, 0x00000000u, 0x000400fau, 0x000001d2u, 0x000001d3u, 0x000001d4u, 0x000200f8u, 0x000001d3u, 0x0004003du, 0x0000001bu, 0x000001d5u, 0x000001a2u, 0x0003003eu, 0x00000966u, 0x000002bcu, 0x0003003eu, 0x00000963u, 0x000001d5u, 0x000200f9u, 0x00000962u, 0x000200f8u, 0x000001d4u, 0x000200f9u, 0x000001b6u, 0x000200f8u, 0x000001b6u, 0x00050041u, 0x00000046u, 0x000001d7u, 0x0000003au, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000001d8u, 0x000001d7u, 0x00040071u, 0x00000006u, 0x000001d9u, 0x000001d8u, 0x0004007cu, 0x00000017u, 0x000001dau, 0x000001d9u, 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000b00fbu, 0x000001dau, 0x000001dfu, 0x00000000u, 0x000001dbu, 0x00000001u, 0x000001dcu, 0x00000002u, 0x000001ddu, 0x00000003u, 0x000001deu, 0x000200f8u, 0x000001dbu, 0x00060041u, 0x00000046u, 0x000001e1u, 0x00000039u, 0x000000abu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001e2u, 0x000001e1u, 0x0003003eu, 0x000001e0u, 0x000001e2u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dcu, 0x00060041u, 0x00000046u, 0x000001e4u, 0x00000039u, 0x000000b8u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001e5u, 0x000001e4u, 0x0003003eu, 0x000001e0u, 0x000001e5u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001ddu, 0x00050041u, 0x00000046u, 0x000001e7u, 0x00000039u, 0x000000beu, 0x0004003du, 0x00000008u, 0x000001e8u, 0x000001e7u, 0x0003003eu, 0x000001e0u, 0x000001e8u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001deu, 0x0003003eu, 0x000001e0u, 0x000001eau, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x000d00f5u, 0x00000008u, 0x0000195cu, 0x00001961u, 0x000001b6u, 0x000001e2u, 0x000001dbu, 0x000001e5u, 0x000001dcu, 0x000001e8u, 0x000001ddu, 0x000001eau, 0x000001deu, 0x00050041u, 0x00000046u, 0x000001edu, 0x0000003au, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001eeu, 0x000001edu, 0x00040071u, 0x00000006u, 0x000001efu, 0x000001eeu, 0x0004007cu, 0x00000017u, 0x000001f0u, 0x000001efu, 0x000300f7u, 0x000001f5u, 0x00000000u, 0x000b00fbu, 0x000001f0u, 0x000001f5u, 0x00000000u, 0x000001f1u, 0x00000001u, 0x000001f2u, 0x00000002u, 0x000001f3u, 0x00000003u, 0x000001f4u, 0x000200f8u, 0x000001f1u, 0x000400c8u, 0x00000008u, 0x000001f8u, 0x0000195cu, 0x000500c7u, 0x00000008u, 0x000001f9u, 0x000001f8u, 0x000001cfu, 0x0003003eu, 0x000001f6u, 0x000001f9u, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f2u, 0x00060041u, 0x00000046u, 0x000001fbu, 0x00000039u, 0x000000b5u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001fcu, 0x000001fbu, 0x0003003eu, 0x000001f6u, 0x000001fcu, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f3u, 0x0003003eu, 0x000001f6u, 0x000001cfu, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f4u, 0x0003003eu, 0x000001f6u, 0x000001eau, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f5u, 0x000d00f5u, 0x00000008u, 0x00001966u, 0x00001961u, 0x000001dfu, 0x000001f9u, 0x000001f1u, 0x000001fcu, 0x000001f2u, 0x000001cfu, 0x000001f3u, 0x000001eau, 0x000001f4u, 0x000500c2u, 0x00000008u, 0x00000203u, 0x0000195cu, 0x00000201u, 0x0003003eu, 0x000001e0u, 0x00000203u, 0x000500c2u, 0x00000008u, 0x00000205u, 0x00001966u, 0x00000201u, 0x0003003eu, 0x000001f6u, 0x00000205u, 0x0004003du, 0x00000008u, 0x00000207u, 0x000001edu, 0x00040071u, 0x00000006u, 0x00000208u, 0x00000207u, 0x0004007cu, 0x00000017u, 0x00000209u, 0x00000208u, 0x000500aau, 0x00000034u, 0x0000020au, 0x00000209u, 0x000000b5u, 0x000300f7u, 0x0000020cu, 0x00000000u, 0x000400fau, 0x0000020au, 0x0000020bu, 0x0000020cu, 0x000200f8u, 0x0000020bu, 0x00050041u, 0x00000046u, 0x0000020eu, 0x0000003fu, 0x00000198u, 0x0004003du, 0x00000008u, 0x0000020fu, 0x0000020eu, 0x000500c2u, 0x00000008u, 0x00000210u, 0x00000203u, 0x0000020fu, 0x000500c7u, 0x00000008u, 0x00000212u, 0x00000210u, 0x00000211u, 0x0003003eu, 0x000001e0u, 0x00000212u, 0x00050041u, 0x00000046u, 0x00000214u, 0x0000003fu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000215u, 0x00000214u, 0x000500c2u, 0x00000008u, 0x00000216u, 0x00000205u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x00000217u, 0x00000216u, 0x00000201u, 0x0003003eu, 0x000001f6u, 0x00000217u, 0x000200f9u, 0x0000020cu, 0x000200f8u, 0x0000020cu, 0x000700f5u, 0x00000008u, 0x0000197bu, 0x00000205u, 0x000001f5u, 0x00000217u, 0x0000020bu, 0x000700f5u, 0x00000008u, 0x0000196fu, 0x00000203u, 0x000001f5u, 0x00000212u, 0x0000020bu, 0x0004003du, 0x0000001bu, 0x0000021bu, 0x000001a2u, 0x00040071u, 0x0000021cu, 0x0000021du, 0x0000021bu, 0x0004007cu, 0x00000218u, 0x0000021eu, 0x0000021du, 0x00040071u, 0x0000000au, 0x00000220u, 0x0000196fu, 0x0004007cu, 0x0000000bu, 0x00000221u, 0x00000220u, 0x00060050u, 0x00000218u, 0x00000222u, 0x00000221u, 0x00000221u, 0x00000221u, 0x00050084u, 0x00000218u, 0x00000223u, 0x0000021eu, 0x00000222u, 0x00040071u, 0x0000021cu, 0x00000225u, 0x00001976u, 0x0004007cu, 0x00000218u, 0x00000226u, 0x00000225u, 0x00040071u, 0x0000000au, 0x00000228u, 0x0000197bu, 0x0004007cu, 0x0000000bu, 0x00000229u, 0x00000228u, 0x00050080u, 0x0000000bu, 0x0000022bu, 0x00000229u, 0x0000022au, 0x00060050u, 0x00000218u, 0x0000022cu, 0x0000022bu, 0x0000022bu, 0x0000022bu, 0x00050084u, 0x00000218u, 0x0000022du, 0x00000226u, 0x0000022cu, 0x00050080u, 0x00000218u, 0x0000022eu, 0x00000223u, 0x0000022du, 0x0003003eu, 0x0000021au, 0x0000022eu, 0x0004003du, 0x00000034u, 0x0000022fu, 0x00000040u, 0x000400a8u, 0x00000034u, 0x00000230u, 0x0000022fu, 0x0004003du, 0x00000034u, 0x00000231u, 0x0000003bu, 0x000500a6u, 0x00000034u, 0x00000232u, 0x00000230u, 0x00000231u, 0x000300f7u, 0x00000234u, 0x00000000u, 0x000400fau, 0x00000232u, 0x00000233u, 0x0000023bu, 0x000200f8u, 0x00000233u, 0x0004003du, 0x00000218u, 0x00000235u, 0x0000021au, 0x000500c3u, 0x00000218u, 0x00000238u, 0x00000235u, 0x000019ceu, 0x00040072u, 0x0000012au, 0x00000239u, 0x00000238u, 0x0004007cu, 0x0000001bu, 0x0000023au, 0x00000239u, 0x0003003eu, 0x000001a2u, 0x0000023au, 0x000200f9u, 0x00000234u, 0x000200f8u, 0x0000023bu, 0x00040071u, 0x00000006u, 0x0000023eu, 0x0000196fu, 0x0004007cu, 0x00000017u, 0x0000023fu, 0x0000023eu, 0x000500c3u, 0x00000017u, 0x00000240u, 0x0000023fu, 0x000000b8u, 0x00040071u, 0x00000006u, 0x00000242u, 0x0000197bu, 0x0004007cu, 0x00000017u, 0x00000243u, 0x00000242u, 0x000500c3u, 0x00000017u, 0x00000244u, 0x00000243u, 0x000000b8u, 0x00050080u, 0x00000017u, 0x00000245u, 0x00000240u, 0x00000244u, 0x00050080u, 0x00000017u, 0x00000246u, 0x00000245u, 0x000000b5u, 0x0003003eu, 0x0000023cu, 0x00000246u, 0x0004003du, 0x00000218u, 0x00000248u, 0x0000021au, 0x000500c3u, 0x00000218u, 0x0000024au, 0x00000248u, 0x000019d0u, 0x0003003eu, 0x0000021au, 0x0000024au, 0x0004003du, 0x00000218u, 0x0000024cu, 0x0000021au, 0x000500c7u, 0x00000218u, 0x0000024eu, 0x0000024cu, 0x000019d1u, 0x0003003eu, 0x0000021au, 0x0000024eu, 0x0004003du, 0x0000024fu, 0x00000252u, 0x00000251u, 0x000500c4u, 0x00000017u, 0x00000254u, 0x00000246u, 0x000000d3u, 0x00050041u, 0x00000255u, 0x00000256u, 0x0000021au, 0x00000198u, 0x0004003du, 0x0000000bu, 0x00000257u, 0x00000256u, 0x00040072u, 0x00000017u, 0x00000258u, 0x00000257u, 0x000500c5u, 0x00000017u, 0x00000259u, 0x00000254u, 0x00000258u, 0x0005005fu, 0x0000025au, 0x0000025bu, 0x00000252u, 0x00000259u, 0x00050051u, 0x00000006u, 0x0000025cu, 0x0000025bu, 0x00000000u, 0x00040071u, 0x00000008u, 0x0000025du, 0x0000025cu, 0x00050041u, 0x00000046u, 0x0000025eu, 0x000001a2u, 0x00000198u, 0x0003003eu, 0x0000025eu, 0x0000025du, 0x00050041u, 0x00000255u, 0x00000262u, 0x0000021au, 0x000001bcu, 0x0004003du, 0x0000000bu, 0x00000263u, 0x00000262u, 0x00040072u, 0x00000017u, 0x00000264u, 0x00000263u, 0x000500c5u, 0x00000017u, 0x00000265u, 0x00000254u, 0x00000264u, 0x0005005fu, 0x0000025au, 0x00000266u, 0x00000252u, 0x00000265u, 0x00050051u, 0x00000006u, 0x00000267u, 0x00000266u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000268u, 0x00000267u, 0x00050041u, 0x00000046u, 0x00000269u, 0x000001a2u, 0x000001bcu, 0x0003003eu, 0x00000269u, 0x00000268u, 0x00050041u, 0x00000255u, 0x0000026du, 0x0000021au, 0x00000170u, 0x0004003du, 0x0000000bu, 0x0000026eu, 0x0000026du, 0x00040072u, 0x00000017u, 0x0000026fu, 0x0000026eu, 0x000500c5u, 0x00000017u, 0x00000270u, 0x00000254u, 0x0000026fu, 0x0005005fu, 0x0000025au, 0x00000271u, 0x00000252u, 0x00000270u, 0x00050051u, 0x00000006u, 0x00000272u, 0x00000271u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000273u, 0x00000272u, 0x00050041u, 0x00000046u, 0x00000274u, 0x000001a2u, 0x00000170u, 0x0003003eu, 0x00000274u, 0x00000273u, 0x000200f9u, 0x00000234u, 0x000200f8u, 0x00000234u, 0x0004003du, 0x0000001bu, 0x00000275u, 0x000001a2u, 0x000500c7u, 0x0000001bu, 0x00000277u, 0x00000275u, 0x000019cfu, 0x0003003eu, 0x00000966u, 0x000002bcu, 0x0003003eu, 0x00000963u, 0x00000277u, 0x000200f9u, 0x00000962u, 0x000200f8u, 0x00000962u, 0x000900f5u, 0x0000001bu, 0x0000197cu, 0x00001976u, 0x00000194u, 0x000001d5u, 0x000001d3u, 0x00000277u, 0x00000234u, 0x000200feu, 0x0000197cu, 0x00010038u, 0x00050036u, 0x00000017u, 0x00000044u, 0x00000000u, 0x0000002au, 0x00030037u, 0x0000001au, 0x00000043u, 0x000200f8u, 0x00000045u, 0x0004003du, 0x00000017u, 0x0000027au, 0x00000043u, 0x000500abu, 0x00000034u, 0x0000027bu, 0x0000027au, 0x000000abu, 0x000300f7u, 0x0000027du, 0x00000000u, 0x000400fau, 0x0000027bu, 0x0000027cu, 0x0000027du, 0x000200f8u, 0x0000027cu, 0x0004003du, 0x00000017u, 0x0000027eu, 0x00000043u, 0x0006000cu, 0x00000017u, 0x0000027fu, 0x00000001u, 0x0000004au, 0x0000027eu, 0x000500c4u, 0x00000017u, 0x00000280u, 0x000000b5u, 0x0000027fu, 0x0003003eu, 0x00000043u, 0x00000280u, 0x000200f9u, 0x0000027du, 0x000200f8u, 0x0000027du, 0x0004003du, 0x00000017u, 0x00000281u, 0x00000043u, 0x000200feu, 0x00000281u, 0x00010038u, 0x00050036u, 0x00000034u, 0x00000056u, 0x00000000u, 0x00000047u, 0x00030037u, 0x0000001au, 0x00000048u, 0x00030037u, 0x0000001au, 0x00000049u, 0x00030037u, 0x0000001au, 0x0000004au, 0x00030037u, 0x00000021u, 0x0000004bu, 0x00030037u, 0x00000046u, 0x0000004cu, 0x00030037u, 0x0000001au, 0x0000004du, 0x00030037u, 0x0000001au, 0x0000004eu, 0x00030037u, 0x00000035u, 0x0000004fu, 0x00030037u, 0x0000001au, 0x00000050u, 0x00030037u, 0x00000035u, 0x00000051u, 0x00030037u, 0x00000035u, 0x00000052u, 0x00030037u, 0x00000035u, 0x00000053u, 0x00030037u, 0x00000035u, 0x00000054u, 0x00030037u, 0x00000037u, 0x00000055u, 0x000200f8u, 0x00000057u, 0x0004003bu, 0x0000001au, 0x00000287u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000288u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000028fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000291u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000298u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002beu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002c2u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002c4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002c8u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002d3u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002e4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002e5u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002e8u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002ecu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002f0u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000031cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000031eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000341u, 0x00000007u, 0x0004003du, 0x00000034u, 0x00000284u, 0x0000004fu, 0x000300f7u, 0x00000286u, 0x00000000u, 0x000400fau, 0x00000284u, 0x00000285u, 0x00000339u, 0x000200f8u, 0x00000285u, 0x0004003du, 0x0000000au, 0x00000289u, 0x0000004bu, 0x0003003eu, 0x00000288u, 0x00000289u, 0x00050039u, 0x00000017u, 0x0000028au, 0x00000024u, 0x00000288u, 0x0003003eu, 0x00000287u, 0x0000028au, 0x0004003du, 0x00000008u, 0x0000028cu, 0x0000004cu, 0x00040071u, 0x00000006u, 0x0000028du, 0x0000028cu, 0x0004007cu, 0x00000017u, 0x0000028eu, 0x0000028du, 0x0003003eu, 0x0000028fu, 0x0000028eu, 0x00050039u, 0x00000017u, 0x00000290u, 0x0000002cu, 0x0000028fu, 0x0003003eu, 0x0000028bu, 0x00000290u, 0x0004003du, 0x0000000au, 0x00000292u, 0x0000004bu, 0x00040071u, 0x00000006u, 0x00000293u, 0x00000292u, 0x0004007cu, 0x00000017u, 0x00000294u, 0x00000293u, 0x000500c3u, 0x00000017u, 0x00000295u, 0x00000294u, 0x000000d3u, 0x000500c7u, 0x00000017u, 0x00000297u, 0x00000295u, 0x00000296u, 0x0003003eu, 0x00000291u, 0x00000297u, 0x0003003eu, 0x00000298u, 0x00000299u, 0x0004003du, 0x00000017u, 0x0000029au, 0x0000004au, 0x0004003du, 0x00000008u, 0x0000029bu, 0x0000004cu, 0x00040071u, 0x00000006u, 0x0000029cu, 0x0000029bu, 0x0004007cu, 0x00000017u, 0x0000029du, 0x0000029cu, 0x00050082u, 0x00000017u, 0x0000029eu, 0x0000029au, 0x0000029du, 0x0008000cu, 0x00000017u, 0x0000029fu, 0x00000001u, 0x0000002du, 0x0000029eu, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x000002a0u, 0x0000029fu, 0x0004007cu, 0x00000008u, 0x000002a1u, 0x000002a0u, 0x00050041u, 0x00000046u, 0x000002a2u, 0x00000055u, 0x00000198u, 0x0003003eu, 0x000002a2u, 0x000002a1u, 0x0004003du, 0x00000008u, 0x000002a3u, 0x0000004cu, 0x00040071u, 0x00000006u, 0x000002a4u, 0x000002a3u, 0x0004007cu, 0x00000017u, 0x000002a5u, 0x000002a4u, 0x0004003du, 0x00000017u, 0x000002a6u, 0x0000004au, 0x00050082u, 0x00000017u, 0x000002a7u, 0x000002a5u, 0x000002a6u, 0x0008000cu, 0x00000017u, 0x000002a8u, 0x00000001u, 0x0000002du, 0x000002a7u, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x000002a9u, 0x000002a8u, 0x0004007cu, 0x00000008u, 0x000002aau, 0x000002a9u, 0x00050041u, 0x00000046u, 0x000002abu, 0x00000055u, 0x000001bcu, 0x0003003eu, 0x000002abu, 0x000002aau, 0x000500b1u, 0x00000034u, 0x000002adu, 0x00000297u, 0x000000bbu, 0x000300f7u, 0x000002afu, 0x00000000u, 0x000400fau, 0x000002adu, 0x000002aeu, 0x000002afu, 0x000200f8u, 0x000002aeu, 0x000500abu, 0x00000034u, 0x000002b2u, 0x00000290u, 0x000002b1u, 0x000300f7u, 0x000002b4u, 0x00000000u, 0x000400fau, 0x000002b2u, 0x000002b3u, 0x000002bbu, 0x000200f8u, 0x000002b3u, 0x000500c4u, 0x00000017u, 0x000002b6u, 0x00000290u, 0x000000b5u, 0x000500c3u, 0x00000017u, 0x000002b9u, 0x000002b7u, 0x00000297u, 0x0007000cu, 0x00000017u, 0x000002bau, 0x00000001u, 0x0000002au, 0x000002b6u, 0x000002b9u, 0x0003003eu, 0x0000028bu, 0x000002bau, 0x000200f9u, 0x000002b4u, 0x000200f8u, 0x000002bbu, 0x0003003eu, 0x00000298u, 0x000002bcu, 0x0003003eu, 0x0000028bu, 0x000002bdu, 0x000200f9u, 0x000002b4u, 0x000200f8u, 0x000002b4u, 0x000700f5u, 0x00000017u, 0x0000197fu, 0x000002bau, 0x000002b3u, 0x000002bdu, 0x000002bbu, 0x000600a9u, 0x00000034u, 0x000019d6u, 0x000002b2u, 0x00000299u, 0x000002bcu, 0x000200f9u, 0x000002afu, 0x000200f8u, 0x000002afu, 0x000700f5u, 0x00000034u, 0x00001980u, 0x00000299u, 0x00000285u, 0x000019d6u, 0x000002b4u, 0x000700f5u, 0x00000017u, 0x0000197eu, 0x00000290u, 0x00000285u, 0x0000197fu, 0x000002b4u, 0x0004003du, 0x00000017u, 0x000002bfu, 0x00000049u, 0x000500c5u, 0x00000017u, 0x000002c1u, 0x000002bfu, 0x0000197eu, 0x0003003eu, 0x000002c2u, 0x000002c1u, 0x00050039u, 0x00000017u, 0x000002c3u, 0x00000044u, 0x000002c2u, 0x0003003eu, 0x000002beu, 0x000002c3u, 0x0003003eu, 0x000002c4u, 0x000002c3u, 0x000500c4u, 0x00000017u, 0x000002c7u, 0x000002c3u, 0x000000bbu, 0x0003003eu, 0x000002beu, 0x000002c7u, 0x000400a8u, 0x00000034u, 0x000002cau, 0x00001980u, 0x000300f7u, 0x000002ccu, 0x00000000u, 0x000400fau, 0x000002cau, 0x000002cbu, 0x000002ccu, 0x000200f8u, 0x000002cbu, 0x0004003du, 0x00000017u, 0x000002cdu, 0x00000048u, 0x00050080u, 0x00000017u, 0x000002cfu, 0x000002cdu, 0x000002c7u, 0x000500afu, 0x00000034u, 0x000002d1u, 0x000002cfu, 0x0000028au, 0x000200f9u, 0x000002ccu, 0x000200f8u, 0x000002ccu, 0x000700f5u, 0x00000034u, 0x000002d2u, 0x00001980u, 0x000002afu, 0x000002d1u, 0x000002cbu, 0x0003003eu, 0x000002c8u, 0x000002d2u, 0x0004003du, 0x00000017u, 0x000002d4u, 0x0000004du, 0x0004003du, 0x00000017u, 0x000002d5u, 0x0000004eu, 0x00050080u, 0x00000017u, 0x000002d6u, 0x000002d4u, 0x000002d5u, 0x000500afu, 0x00000034u, 0x000002d7u, 0x000002d6u, 0x000000cau, 0x0003003eu, 0x000002d3u, 0x000002d7u, 0x0004003du, 0x00000034u, 0x000002d8u, 0x00000051u, 0x000400a8u, 0x00000034u, 0x000002d9u, 0x000002d8u, 0x000300f7u, 0x000002dbu, 0x00000000u, 0x000400fau, 0x000002d9u, 0x000002dau, 0x000002dbu, 0x000200f8u, 0x000002dau, 0x000400a8u, 0x00000034u, 0x000002ddu, 0x000002d7u, 0x0004003du, 0x00000034u, 0x000002deu, 0x00000052u, 0x000500a7u, 0x00000034u, 0x000002dfu, 0x000002ddu, 0x000002deu, 0x000500a7u, 0x00000034u, 0x000002e1u, 0x000002dfu, 0x000002d2u, 0x000200f9u, 0x000002dbu, 0x000200f8u, 0x000002dbu, 0x000700f5u, 0x00000034u, 0x000002e2u, 0x000002d8u, 0x000002ccu, 0x000002e1u, 0x000002dau, 0x0003003eu, 0x00000053u, 0x000002e2u, 0x0003003eu, 0x00000054u, 0x000002d7u, 0x0003003eu, 0x000002e4u, 0x00000299u, 0x000500aau, 0x00000034u, 0x000002e7u, 0x0000028au, 0x0000014bu, 0x0003003eu, 0x000002e5u, 0x000002e7u, 0x0004003du, 0x00000017u, 0x000002e9u, 0x00000048u, 0x000500b1u, 0x00000034u, 0x000002ebu, 0x000002e9u, 0x0000028au, 0x0003003eu, 0x000002e8u, 0x000002ebu, 0x0004003du, 0x00000017u, 0x000002edu, 0x00000048u, 0x00050082u, 0x00000017u, 0x000002efu, 0x000002edu, 0x000002c7u, 0x0003003eu, 0x000002ecu, 0x000002efu, 0x000500b3u, 0x00000034u, 0x000002f4u, 0x000002efu, 0x0000028au, 0x000500a6u, 0x00000034u, 0x000002f5u, 0x00001980u, 0x000002f4u, 0x0003003eu, 0x000002f0u, 0x000002f5u, 0x0004003du, 0x00000017u, 0x000002f6u, 0x00000050u, 0x000300f7u, 0x000002fbu, 0x00000000u, 0x000b00fbu, 0x000002f6u, 0x000002fbu, 0x00000000u, 0x000002f7u, 0x00000001u, 0x000002f8u, 0x00000002u, 0x000002f9u, 0x00000003u, 0x000002fau, 0x000200f8u, 0x000002f7u, 0x000400a8u, 0x00000034u, 0x000002fdu, 0x000002e7u, 0x000300f7u, 0x000002ffu, 0x00000000u, 0x000400fau, 0x000002fdu, 0x000002feu, 0x000002ffu, 0x000200f8u, 0x000002feu, 0x000600a9u, 0x00000034u, 0x00000303u, 0x000002d7u, 0x000002ebu, 0x000002f5u, 0x000200f9u, 0x000002ffu, 0x000200f8u, 0x000002ffu, 0x000700f5u, 0x00000034u, 0x00000304u, 0x000002e7u, 0x000002f7u, 0x00000303u, 0x000002feu, 0x0003003eu, 0x000002e4u, 0x00000304u, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002f8u, 0x000400a8u, 0x00000034u, 0x00000307u, 0x000002ebu, 0x000400a8u, 0x00000034u, 0x00000309u, 0x000002d2u, 0x000500a6u, 0x00000034u, 0x0000030au, 0x00000307u, 0x00000309u, 0x000400a8u, 0x00000034u, 0x0000030cu, 0x000002d7u, 0x000500a6u, 0x00000034u, 0x0000030du, 0x0000030au, 0x0000030cu, 0x000300f7u, 0x0000030fu, 0x00000000u, 0x000400fau, 0x0000030du, 0x0000030eu, 0x00000319u, 0x000200f8u, 0x0000030eu, 0x000400a8u, 0x00000034u, 0x00000311u, 0x000002e7u, 0x000300f7u, 0x00000313u, 0x00000000u, 0x000400fau, 0x00000311u, 0x00000312u, 0x00000313u, 0x000200f8u, 0x00000312u, 0x000600a9u, 0x00000034u, 0x00000317u, 0x000002d7u, 0x000002ebu, 0x000002f5u, 0x000200f9u, 0x00000313u, 0x000200f8u, 0x00000313u, 0x000700f5u, 0x00000034u, 0x00000318u, 0x000002e7u, 0x0000030eu, 0x00000317u, 0x00000312u, 0x0003003eu, 0x000002e4u, 0x00000318u, 0x000200f9u, 0x0000030fu, 0x000200f8u, 0x00000319u, 0x000500c7u, 0x00000017u, 0x0000031bu, 0x000002c3u, 0x000002bdu, 0x0003003eu, 0x0000031cu, 0x0000031bu, 0x00050039u, 0x00000017u, 0x0000031du, 0x0000002fu, 0x0000031cu, 0x0003003eu, 0x000002c4u, 0x0000031du, 0x000500c3u, 0x00000017u, 0x00000321u, 0x0000028au, 0x0000031du, 0x0004003du, 0x00000017u, 0x00000322u, 0x00000048u, 0x000500c3u, 0x00000017u, 0x00000324u, 0x00000322u, 0x0000031du, 0x00050082u, 0x00000017u, 0x00000325u, 0x00000321u, 0x00000324u, 0x000500c7u, 0x00000017u, 0x00000326u, 0x00000325u, 0x00000296u, 0x0003003eu, 0x0000031eu, 0x00000326u, 0x0004003du, 0x00000017u, 0x00000328u, 0x0000004du, 0x00050084u, 0x00000017u, 0x00000329u, 0x00000326u, 0x00000328u, 0x000500c3u, 0x00000017u, 0x0000032au, 0x00000329u, 0x000000bbu, 0x0007000cu, 0x00000017u, 0x0000032bu, 0x00000001u, 0x00000027u, 0x0000032au, 0x000000cau, 0x0003003eu, 0x0000004du, 0x0000032bu, 0x0003003eu, 0x000002e4u, 0x000002bcu, 0x000200f9u, 0x0000030fu, 0x000200f8u, 0x0000030fu, 0x000700f5u, 0x00000034u, 0x00001990u, 0x00000318u, 0x00000313u, 0x000002bcu, 0x00000319u, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002f9u, 0x000500a6u, 0x00000034u, 0x0000032fu, 0x000002ebu, 0x000002e7u, 0x0003003eu, 0x000002e4u, 0x0000032fu, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002fau, 0x000500a7u, 0x00000034u, 0x00000333u, 0x000002d2u, 0x000002f5u, 0x000400a8u, 0x00000034u, 0x00000335u, 0x000002e7u, 0x000500a7u, 0x00000034u, 0x00000336u, 0x00000333u, 0x00000335u, 0x0003003eu, 0x000002e4u, 0x00000336u, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002fbu, 0x000d00f5u, 0x00000034u, 0x0000198fu, 0x00000299u, 0x000002dbu, 0x00000304u, 0x000002ffu, 0x00001990u, 0x0000030fu, 0x0000032fu, 0x000002f9u, 0x00000336u, 0x000002fau, 0x000200f9u, 0x00000286u, 0x000200f8u, 0x00000339u, 0x00050041u, 0x00000046u, 0x0000033au, 0x00000055u, 0x00000198u, 0x0003003eu, 0x0000033au, 0x000001eau, 0x0004003du, 0x00000017u, 0x0000033bu, 0x0000004au, 0x00050082u, 0x00000017u, 0x0000033cu, 0x00000296u, 0x0000033bu, 0x0007000cu, 0x00000017u, 0x0000033du, 0x00000001u, 0x00000027u, 0x0000033cu, 0x000000beu, 0x00040072u, 0x00000129u, 0x0000033eu, 0x0000033du, 0x0004007cu, 0x00000008u, 0x0000033fu, 0x0000033eu, 0x00050041u, 0x00000046u, 0x00000340u, 0x00000055u, 0x000001bcu, 0x0003003eu, 0x00000340u, 0x0000033fu, 0x0004003du, 0x00000017u, 0x00000342u, 0x0000004du, 0x0004003du, 0x00000017u, 0x00000343u, 0x0000004eu, 0x00050080u, 0x00000017u, 0x00000344u, 0x00000342u, 0x00000343u, 0x000500afu, 0x00000034u, 0x00000345u, 0x00000344u, 0x000000cau, 0x0003003eu, 0x00000341u, 0x00000345u, 0x0004003du, 0x00000034u, 0x00000346u, 0x00000051u, 0x000400a8u, 0x00000034u, 0x00000347u, 0x00000346u, 0x000300f7u, 0x00000349u, 0x00000000u, 0x000400fau, 0x00000347u, 0x00000348u, 0x00000349u, 0x000200f8u, 0x00000348u, 0x000400a8u, 0x00000034u, 0x0000034bu, 0x00000345u, 0x0004003du, 0x00000034u, 0x0000034cu, 0x00000052u, 0x000500a7u, 0x00000034u, 0x0000034du, 0x0000034bu, 0x0000034cu, 0x000200f9u, 0x00000349u, 0x000200f8u, 0x00000349u, 0x000700f5u, 0x00000034u, 0x0000034eu, 0x00000346u, 0x00000339u, 0x0000034du, 0x00000348u, 0x0003003eu, 0x00000053u, 0x0000034eu, 0x0003003eu, 0x00000054u, 0x00000345u, 0x0003003eu, 0x000002e4u, 0x000002bcu, 0x000200f9u, 0x00000286u, 0x000200f8u, 0x00000286u, 0x000700f5u, 0x00000034u, 0x0000198eu, 0x0000198fu, 0x000002fbu, 0x000002bcu, 0x00000349u, 0x000200feu, 0x0000198eu, 0x00010038u, 0x00050036u, 0x00000017u, 0x0000005du, 0x00000000u, 0x00000058u, 0x00030037u, 0x0000001au, 0x00000059u, 0x00030037u, 0x0000001au, 0x0000005au, 0x00030037u, 0x00000035u, 0x0000005bu, 0x00030037u, 0x0000001au, 0x0000005cu, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x0000001au, 0x00000353u, 0x00000007u, 0x0003003eu, 0x00000353u, 0x000000abu, 0x0004003du, 0x00000017u, 0x00000354u, 0x0000005cu, 0x000300f7u, 0x00000359u, 0x00000000u, 0x000b00fbu, 0x00000354u, 0x00000359u, 0x00000000u, 0x00000355u, 0x00000001u, 0x00000356u, 0x00000002u, 0x00000357u, 0x00000003u, 0x00000358u, 0x000200f8u, 0x00000355u, 0x0004003du, 0x00000034u, 0x0000035au, 0x0000005bu, 0x000300f7u, 0x0000035cu, 0x00000000u, 0x000400fau, 0x0000035au, 0x0000035bu, 0x00000361u, 0x000200f8u, 0x0000035bu, 0x0004003du, 0x00000017u, 0x0000035du, 0x0000005au, 0x0004003du, 0x00000017u, 0x0000035eu, 0x00000059u, 0x00050080u, 0x00000017u, 0x0000035fu, 0x0000035du, 0x0000035eu, 0x0007000cu, 0x00000017u, 0x00000360u, 0x00000001u, 0x00000027u, 0x000000c7u, 0x0000035fu, 0x0003003eu, 0x00000353u, 0x00000360u, 0x000200f9u, 0x0000035cu, 0x000200f8u, 0x00000361u, 0x0004003du, 0x00000017u, 0x00000362u, 0x00000059u, 0x00050082u, 0x00000017u, 0x00000363u, 0x00000362u, 0x000000b5u, 0x000500c7u, 0x00000017u, 0x00000364u, 0x00000363u, 0x000000c7u, 0x0003003eu, 0x00000353u, 0x00000364u, 0x000200f9u, 0x0000035cu, 0x000200f8u, 0x0000035cu, 0x000700f5u, 0x00000017u, 0x00001992u, 0x00000360u, 0x0000035bu, 0x00000364u, 0x00000361u, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000356u, 0x0004003du, 0x00000017u, 0x00000366u, 0x00000059u, 0x0004003du, 0x00000017u, 0x00000367u, 0x0000005au, 0x00050080u, 0x00000017u, 0x00000368u, 0x00000366u, 0x00000367u, 0x000500c7u, 0x00000017u, 0x00000369u, 0x00000368u, 0x000000c7u, 0x0003003eu, 0x00000353u, 0x00000369u, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000357u, 0x0003003eu, 0x00000353u, 0x000000c7u, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000358u, 0x0004003du, 0x00000017u, 0x0000036cu, 0x0000005au, 0x0003003eu, 0x00000353u, 0x0000036cu, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000359u, 0x000d00f5u, 0x00000017u, 0x00001991u, 0x000000abu, 0x0000005eu, 0x00001992u, 0x0000035cu, 0x00000369u, 0x00000356u, 0x000000c7u, 0x00000357u, 0x0000036cu, 0x00000358u, 0x000200feu, 0x00001991u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000062u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000060u, 0x00030037u, 0x00000007u, 0x00000061u, 0x000200f8u, 0x00000063u, 0x0004003bu, 0x00000046u, 0x00000380u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a1u, 0x00000007u, 0x0004003bu, 0x000003adu, 0x000003aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003edu, 0x00000007u, 0x000300f7u, 0x00000377u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000377u, 0x00000000u, 0x00000373u, 0x00000001u, 0x00000373u, 0x00000002u, 0x00000374u, 0x00000003u, 0x00000375u, 0x00000004u, 0x00000376u, 0x000200f8u, 0x00000373u, 0x0004003du, 0x00000006u, 0x0000037au, 0x00000060u, 0x000500c7u, 0x00000006u, 0x0000037bu, 0x0000037au, 0x00000379u, 0x0003003eu, 0x00000060u, 0x0000037bu, 0x0004003du, 0x00000006u, 0x0000037cu, 0x00000061u, 0x00050084u, 0x00000006u, 0x0000037du, 0x0000037cu, 0x00000378u, 0x0004003du, 0x00000006u, 0x0000037eu, 0x00000060u, 0x00050080u, 0x00000006u, 0x0000037fu, 0x0000037eu, 0x0000037du, 0x0003003eu, 0x00000060u, 0x0000037fu, 0x0004003du, 0x00000006u, 0x00000385u, 0x00000060u, 0x000500c6u, 0x00000006u, 0x00000386u, 0x00000385u, 0x000001c4u, 0x00060041u, 0x00000387u, 0x00000388u, 0x00000384u, 0x000000abu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000389u, 0x00000388u, 0x0003003eu, 0x00000380u, 0x00000389u, 0x0004003du, 0x00000006u, 0x00000393u, 0x00000060u, 0x000500c2u, 0x00000006u, 0x00000394u, 0x00000393u, 0x000000b5u, 0x00060041u, 0x00000387u, 0x00000395u, 0x00000392u, 0x000000abu, 0x00000394u, 0x0004003du, 0x00000008u, 0x00000396u, 0x00000395u, 0x00070050u, 0x00000009u, 0x00000397u, 0x00000389u, 0x00000389u, 0x00000389u, 0x00000396u, 0x0003003eu, 0x0000038bu, 0x00000397u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000039au, 0x00000060u, 0x000500c7u, 0x00000006u, 0x0000039bu, 0x0000039au, 0x00000399u, 0x0003003eu, 0x00000060u, 0x0000039bu, 0x0004003du, 0x00000006u, 0x0000039cu, 0x00000061u, 0x00050084u, 0x00000006u, 0x0000039eu, 0x0000039cu, 0x0000039du, 0x0004003du, 0x00000006u, 0x0000039fu, 0x00000060u, 0x00050080u, 0x00000006u, 0x000003a0u, 0x0000039fu, 0x0000039eu, 0x0003003eu, 0x00000060u, 0x000003a0u, 0x0004003du, 0x00000006u, 0x000003a6u, 0x00000060u, 0x000500c6u, 0x00000006u, 0x000003a7u, 0x000003a6u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000003a9u, 0x000003a5u, 0x000000abu, 0x000003a7u, 0x0004003du, 0x0000000au, 0x000003aau, 0x000003a9u, 0x00040071u, 0x00000006u, 0x000003abu, 0x000003aau, 0x0003003eu, 0x000003a1u, 0x000003abu, 0x000500c2u, 0x00000006u, 0x000003b1u, 0x000003abu, 0x000003b0u, 0x000500c2u, 0x00000006u, 0x000003b3u, 0x000003abu, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x000003b5u, 0x000003abu, 0x00000170u, 0x00060050u, 0x000003acu, 0x000003b6u, 0x000003b1u, 0x000003b3u, 0x000003b5u, 0x000500c7u, 0x000003acu, 0x000003b9u, 0x000003b6u, 0x000019c7u, 0x0003003eu, 0x000003aeu, 0x000003b9u, 0x00040071u, 0x0000001bu, 0x000003bbu, 0x000003b9u, 0x0004003du, 0x00000006u, 0x000003bcu, 0x00000060u, 0x00060041u, 0x00000387u, 0x000003bdu, 0x00000392u, 0x000000abu, 0x000003bcu, 0x0004003du, 0x00000008u, 0x000003beu, 0x000003bdu, 0x000500c4u, 0x00000008u, 0x000003c0u, 0x000003beu, 0x000003bfu, 0x000500c7u, 0x00000006u, 0x000003c2u, 0x000003abu, 0x000001bcu, 0x000500c4u, 0x00000006u, 0x000003c3u, 0x000003c2u, 0x000000c7u, 0x00040071u, 0x00000008u, 0x000003c4u, 0x000003c3u, 0x000500c5u, 0x00000008u, 0x000003c5u, 0x000003c0u, 0x000003c4u, 0x00050051u, 0x00000008u, 0x000003c6u, 0x000003bbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003c7u, 0x000003bbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003c8u, 0x000003bbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000003c9u, 0x000003c6u, 0x000003c7u, 0x000003c8u, 0x000003c5u, 0x0003003eu, 0x0000038bu, 0x000003c9u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000375u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x00000060u, 0x000500c7u, 0x00000006u, 0x000003ccu, 0x000003cbu, 0x00000399u, 0x0003003eu, 0x00000060u, 0x000003ccu, 0x0004003du, 0x00000006u, 0x000003cdu, 0x00000061u, 0x00050084u, 0x00000006u, 0x000003cfu, 0x000003cdu, 0x000003ceu, 0x0004003du, 0x00000006u, 0x000003d0u, 0x00000060u, 0x00050080u, 0x00000006u, 0x000003d1u, 0x000003d0u, 0x000003cfu, 0x0003003eu, 0x00000060u, 0x000003d1u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x00000060u, 0x000500c6u, 0x00000006u, 0x000003d4u, 0x000003d3u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000003d5u, 0x000003a5u, 0x000000abu, 0x000003d4u, 0x0004003du, 0x0000000au, 0x000003d6u, 0x000003d5u, 0x00040071u, 0x00000006u, 0x000003d7u, 0x000003d6u, 0x0003003eu, 0x000003d2u, 0x000003d7u, 0x000500c2u, 0x00000006u, 0x000003d9u, 0x000003d7u, 0x000003b0u, 0x00040071u, 0x00000008u, 0x000003dau, 0x000003d9u, 0x00060050u, 0x0000001bu, 0x000003dbu, 0x000003dau, 0x000003dau, 0x000003dau, 0x000500c7u, 0x00000006u, 0x000003deu, 0x000003d7u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x000003dfu, 0x000003deu, 0x00070050u, 0x00000009u, 0x000003e3u, 0x000003dau, 0x000003dau, 0x000003dau, 0x000003dfu, 0x0003003eu, 0x0000038bu, 0x000003e3u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000376u, 0x0004003du, 0x00000006u, 0x000003e6u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x000003e7u, 0x000003e6u, 0x000003e5u, 0x0003003eu, 0x00000060u, 0x000003e7u, 0x0004003du, 0x00000006u, 0x000003e8u, 0x00000061u, 0x00050084u, 0x00000006u, 0x000003eau, 0x000003e8u, 0x000003e9u, 0x0004003du, 0x00000006u, 0x000003ebu, 0x00000060u, 0x00050080u, 0x00000006u, 0x000003ecu, 0x000003ebu, 0x000003eau, 0x0003003eu, 0x00000060u, 0x000003ecu, 0x0004003du, 0x00000006u, 0x000003f2u, 0x00000060u, 0x00060041u, 0x000003f3u, 0x000003f4u, 0x000003f1u, 0x000000abu, 0x000003f2u, 0x0004003du, 0x00000006u, 0x000003f5u, 0x000003f4u, 0x0003003eu, 0x000003edu, 0x000003f5u, 0x00070050u, 0x0000025au, 0x000003f7u, 0x000003f5u, 0x000003f5u, 0x000003f5u, 0x000003f5u, 0x000500c2u, 0x0000025au, 0x000003fbu, 0x000003f7u, 0x000003fau, 0x000500c7u, 0x0000025au, 0x000003fdu, 0x000003fbu, 0x000003fcu, 0x00040071u, 0x00000009u, 0x000003feu, 0x000003fdu, 0x0003003eu, 0x0000038bu, 0x000003feu, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000377u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000064u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000065u, 0x0004003bu, 0x00000007u, 0x0000040eu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000428u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000433u, 0x00000007u, 0x000300f7u, 0x00000403u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000403u, 0x00000002u, 0x00000401u, 0x00000003u, 0x00000402u, 0x000200f8u, 0x00000401u, 0x00050041u, 0x00000404u, 0x00000406u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000407u, 0x00000406u, 0x000500c2u, 0x00000008u, 0x00000408u, 0x00000407u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000409u, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x0000040au, 0x00000409u, 0x000500c7u, 0x00000008u, 0x0000040cu, 0x0000040au, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x0000040du, 0x00000408u, 0x0000040cu, 0x0003003eu, 0x00000405u, 0x0000040du, 0x00050041u, 0x00000404u, 0x0000040fu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000410u, 0x0000040fu, 0x00040071u, 0x00000006u, 0x00000411u, 0x00000410u, 0x000500c7u, 0x00000006u, 0x00000412u, 0x00000411u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000414u, 0x00000412u, 0x00000413u, 0x0003003eu, 0x0000040eu, 0x00000414u, 0x00050041u, 0x00000404u, 0x00000415u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000416u, 0x00000415u, 0x00040071u, 0x00000006u, 0x00000417u, 0x00000416u, 0x000500c7u, 0x00000006u, 0x00000418u, 0x00000417u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000419u, 0x00000418u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x0000041bu, 0x00000414u, 0x00000419u, 0x0003003eu, 0x0000040eu, 0x0000041bu, 0x0004003du, 0x00000008u, 0x0000041du, 0x00000409u, 0x00040071u, 0x00000006u, 0x0000041eu, 0x0000041du, 0x000500c7u, 0x00000006u, 0x0000041fu, 0x0000041eu, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000421u, 0x0000041fu, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000423u, 0x0000041bu, 0x00000421u, 0x0003003eu, 0x0000040eu, 0x00000423u, 0x00040071u, 0x0000000au, 0x00000426u, 0x00000423u, 0x0003003eu, 0x00000424u, 0x00000426u, 0x000200f9u, 0x00000403u, 0x000200f8u, 0x00000402u, 0x0004003du, 0x00000009u, 0x00000429u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x0000042au, 0x00000429u, 0x00000429u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x0000042bu, 0x0000042au, 0x0003003eu, 0x00000428u, 0x0000042bu, 0x00050041u, 0x00000007u, 0x0000042du, 0x00000428u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000042eu, 0x0000042du, 0x000500c4u, 0x00000006u, 0x0000042fu, 0x0000042eu, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000430u, 0x00000428u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000431u, 0x00000430u, 0x000500c5u, 0x00000006u, 0x00000432u, 0x0000042fu, 0x00000431u, 0x0003003eu, 0x0000042cu, 0x00000432u, 0x000500c7u, 0x00000006u, 0x00000435u, 0x00000432u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000436u, 0x00000435u, 0x000001c4u, 0x0003003eu, 0x00000433u, 0x00000436u, 0x000500c2u, 0x00000006u, 0x00000438u, 0x00000432u, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000439u, 0x00000438u, 0x0003003eu, 0x00000424u, 0x00000439u, 0x000500c7u, 0x00000006u, 0x0000043bu, 0x00000432u, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x0000043cu, 0x0000043bu, 0x00000170u, 0x000500c5u, 0x00000006u, 0x0000043eu, 0x0000043cu, 0x00000436u, 0x00040071u, 0x00000008u, 0x0000043fu, 0x0000043eu, 0x0003003eu, 0x00000405u, 0x0000043fu, 0x000200f9u, 0x00000403u, 0x000200f8u, 0x00000403u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000066u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000067u, 0x0004003bu, 0x00000007u, 0x00000442u, 0x00000007u, 0x0004003du, 0x0000000au, 0x00000443u, 0x00000424u, 0x00040071u, 0x00000006u, 0x00000444u, 0x00000443u, 0x000500c4u, 0x00000006u, 0x00000445u, 0x00000444u, 0x00000420u, 0x0004003du, 0x00000008u, 0x00000446u, 0x00000405u, 0x00040071u, 0x00000006u, 0x00000447u, 0x00000446u, 0x000500c5u, 0x00000006u, 0x00000448u, 0x00000445u, 0x00000447u, 0x0003003eu, 0x00000442u, 0x00000448u, 0x000300f7u, 0x0000044bu, 0x00000000u, 0x000700fbu, 0x00000372u, 0x0000044bu, 0x00000002u, 0x00000449u, 0x00000003u, 0x0000044au, 0x000200f8u, 0x00000449u, 0x000500c2u, 0x00000006u, 0x0000044eu, 0x00000448u, 0x0000044du, 0x000500c7u, 0x00000006u, 0x0000044fu, 0x0000044eu, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000450u, 0x0000044fu, 0x00050041u, 0x00000404u, 0x00000451u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000451u, 0x00000450u, 0x000500c2u, 0x00000006u, 0x00000454u, 0x00000448u, 0x00000453u, 0x000500c7u, 0x00000006u, 0x00000455u, 0x00000454u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000456u, 0x00000455u, 0x00050041u, 0x00000404u, 0x00000457u, 0x0000038bu, 0x000001bcu, 0x0003003eu, 0x00000457u, 0x00000456u, 0x000500c2u, 0x00000006u, 0x00000459u, 0x00000448u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x0000045au, 0x00000459u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x0000045bu, 0x0000045au, 0x00050041u, 0x00000404u, 0x0000045cu, 0x0000038bu, 0x00000170u, 0x0003003eu, 0x0000045cu, 0x0000045bu, 0x000500c7u, 0x00000006u, 0x0000045fu, 0x00000448u, 0x0000045eu, 0x000500c4u, 0x00000006u, 0x00000460u, 0x0000045fu, 0x00000453u, 0x00040071u, 0x00000008u, 0x00000461u, 0x00000460u, 0x00050041u, 0x00000404u, 0x00000462u, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x00000462u, 0x00000461u, 0x000200f9u, 0x0000044bu, 0x000200f8u, 0x0000044au, 0x000500c2u, 0x00000006u, 0x00000465u, 0x00000448u, 0x0000044du, 0x000500c7u, 0x00000006u, 0x00000466u, 0x00000465u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x00000467u, 0x00000466u, 0x00050041u, 0x00000404u, 0x00000468u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000468u, 0x00000467u, 0x000500c2u, 0x00000006u, 0x0000046au, 0x00000448u, 0x00000170u, 0x000500c7u, 0x00000006u, 0x0000046bu, 0x0000046au, 0x000003ddu, 0x00040071u, 0x00000008u, 0x0000046cu, 0x0000046bu, 0x00050041u, 0x00000404u, 0x0000046du, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x0000046du, 0x0000046cu, 0x000200f9u, 0x0000044bu, 0x000200f8u, 0x0000044bu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000006au, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000068u, 0x00030037u, 0x00000007u, 0x00000069u, 0x000200f8u, 0x0000006bu, 0x0004003bu, 0x00000021u, 0x00000479u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000472u, 0x00000068u, 0x000500c7u, 0x00000006u, 0x00000473u, 0x00000472u, 0x00000399u, 0x0003003eu, 0x00000068u, 0x00000473u, 0x0004003du, 0x00000006u, 0x00000474u, 0x00000069u, 0x00050084u, 0x00000006u, 0x00000476u, 0x00000474u, 0x00000475u, 0x0004003du, 0x00000006u, 0x00000477u, 0x00000068u, 0x00050080u, 0x00000006u, 0x00000478u, 0x00000477u, 0x00000476u, 0x0003003eu, 0x00000068u, 0x00000478u, 0x0004003du, 0x00000006u, 0x0000047au, 0x00000068u, 0x000500c6u, 0x00000006u, 0x0000047bu, 0x0000047au, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x0000047cu, 0x000003a5u, 0x000000abu, 0x0000047bu, 0x0004003du, 0x0000000au, 0x0000047du, 0x0000047cu, 0x0003003eu, 0x00000479u, 0x0000047du, 0x000500c2u, 0x0000000au, 0x00000480u, 0x0000047du, 0x0000047fu, 0x0003003eu, 0x00000424u, 0x00000480u, 0x0004003du, 0x00000006u, 0x00000481u, 0x00000068u, 0x00060041u, 0x00000387u, 0x00000482u, 0x00000392u, 0x000000abu, 0x00000481u, 0x0004003du, 0x00000008u, 0x00000483u, 0x00000482u, 0x000500c7u, 0x0000000au, 0x00000486u, 0x0000047du, 0x00000485u, 0x000500c4u, 0x0000000au, 0x00000487u, 0x00000486u, 0x0000047fu, 0x00040071u, 0x00000008u, 0x00000488u, 0x00000487u, 0x000500c5u, 0x00000008u, 0x00000489u, 0x00000483u, 0x00000488u, 0x0003003eu, 0x00000405u, 0x00000489u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000006eu, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x0000006cu, 0x00030037u, 0x00000007u, 0x0000006du, 0x000200f8u, 0x0000006fu, 0x0004003bu, 0x000004ddu, 0x000004deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004ebu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000518u, 0x00000007u, 0x0004003bu, 0x000004ddu, 0x0000053au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000053du, 0x00000007u, 0x0004003du, 0x00000034u, 0x0000048au, 0x00000471u, 0x000300f7u, 0x0000048cu, 0x00000000u, 0x000400fau, 0x0000048au, 0x0000048bu, 0x0000048cu, 0x000200f8u, 0x0000048bu, 0x000300f7u, 0x00000492u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000492u, 0x00000000u, 0x0000048du, 0x00000001u, 0x0000048eu, 0x00000002u, 0x0000048fu, 0x00000003u, 0x00000490u, 0x00000004u, 0x00000491u, 0x000200f8u, 0x0000048du, 0x0004003du, 0x00000006u, 0x00000493u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x00000494u, 0x00000493u, 0x00000379u, 0x0003003eu, 0x0000006cu, 0x00000494u, 0x0004003du, 0x00000006u, 0x00000495u, 0x0000006du, 0x00050084u, 0x00000006u, 0x00000496u, 0x00000495u, 0x00000378u, 0x0004003du, 0x00000006u, 0x00000497u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x00000498u, 0x00000497u, 0x00000496u, 0x0003003eu, 0x0000006cu, 0x00000498u, 0x0004003du, 0x00000006u, 0x00000499u, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x0000049au, 0x00000499u, 0x000001c4u, 0x00060041u, 0x00000387u, 0x0000049bu, 0x00000384u, 0x000000abu, 0x0000049au, 0x0003003eu, 0x0000049bu, 0x000001eau, 0x0004003du, 0x00000006u, 0x0000049cu, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x0000049du, 0x0000049cu, 0x000001bcu, 0x000500abu, 0x00000034u, 0x0000049eu, 0x0000049du, 0x00000198u, 0x000300f7u, 0x000004a0u, 0x00000000u, 0x000400fau, 0x0000049eu, 0x0000049fu, 0x000004a0u, 0x000200f8u, 0x0000049fu, 0x0004003du, 0x00000006u, 0x000004a1u, 0x0000006cu, 0x000500c2u, 0x00000006u, 0x000004a2u, 0x000004a1u, 0x000001bcu, 0x00050041u, 0x00000404u, 0x000004a3u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000004a4u, 0x000004a3u, 0x00060041u, 0x00000387u, 0x000004a5u, 0x00000392u, 0x000000abu, 0x000004a2u, 0x0003003eu, 0x000004a5u, 0x000004a4u, 0x000200f9u, 0x000004a0u, 0x000200f8u, 0x000004a0u, 0x000300f7u, 0x000004adu, 0x00000000u, 0x000400fau, 0x000004abu, 0x000004acu, 0x000004adu, 0x000200f8u, 0x000004acu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x000004afu, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004b0u, 0x000004afu, 0x000001c4u, 0x00050080u, 0x00000006u, 0x000004b1u, 0x000004b0u, 0x00000378u, 0x00060041u, 0x00000387u, 0x000004b2u, 0x00000384u, 0x000000abu, 0x000004b1u, 0x0003003eu, 0x000004b2u, 0x000001cfu, 0x000200f9u, 0x000004adu, 0x000200f8u, 0x000004adu, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x0000048eu, 0x0004003du, 0x00000006u, 0x000004b4u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x000004b5u, 0x000004b4u, 0x00000379u, 0x0003003eu, 0x0000006cu, 0x000004b5u, 0x0004003du, 0x00000006u, 0x000004b6u, 0x0000006du, 0x00050084u, 0x00000006u, 0x000004b7u, 0x000004b6u, 0x00000378u, 0x0004003du, 0x00000006u, 0x000004b8u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x000004b9u, 0x000004b8u, 0x000004b7u, 0x0003003eu, 0x0000006cu, 0x000004b9u, 0x0004003du, 0x00000006u, 0x000004bau, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004bbu, 0x000004bau, 0x000001c4u, 0x00050041u, 0x00000404u, 0x000004bcu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x000004bdu, 0x000004bcu, 0x00060041u, 0x00000387u, 0x000004beu, 0x00000384u, 0x000000abu, 0x000004bbu, 0x0003003eu, 0x000004beu, 0x000004bdu, 0x0004003du, 0x00000006u, 0x000004bfu, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x000004c0u, 0x000004bfu, 0x000001bcu, 0x000500abu, 0x00000034u, 0x000004c1u, 0x000004c0u, 0x00000198u, 0x000300f7u, 0x000004c3u, 0x00000000u, 0x000400fau, 0x000004c1u, 0x000004c2u, 0x000004c3u, 0x000200f8u, 0x000004c2u, 0x0004003du, 0x00000006u, 0x000004c4u, 0x0000006cu, 0x000500c2u, 0x00000006u, 0x000004c5u, 0x000004c4u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000004c7u, 0x000004bcu, 0x00040071u, 0x00000006u, 0x000004c8u, 0x000004c7u, 0x0004007cu, 0x00000017u, 0x000004c9u, 0x000004c8u, 0x000500c7u, 0x00000017u, 0x000004cau, 0x000004c9u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x000004cbu, 0x000004cau, 0x000000bbu, 0x00040072u, 0x00000129u, 0x000004ccu, 0x000004cbu, 0x0004007cu, 0x00000008u, 0x000004cdu, 0x000004ccu, 0x00060041u, 0x00000387u, 0x000004ceu, 0x00000392u, 0x000000abu, 0x000004c5u, 0x0003003eu, 0x000004ceu, 0x000004cdu, 0x000200f9u, 0x000004c3u, 0x000200f8u, 0x000004c3u, 0x000300f7u, 0x000004d0u, 0x00000000u, 0x000400fau, 0x000004abu, 0x000004cfu, 0x000004d0u, 0x000200f8u, 0x000004cfu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x000004d1u, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004d2u, 0x000004d1u, 0x000001c4u, 0x00050080u, 0x00000006u, 0x000004d3u, 0x000004d2u, 0x00000378u, 0x00060041u, 0x00000387u, 0x000004d4u, 0x00000384u, 0x000000abu, 0x000004d3u, 0x0003003eu, 0x000004d4u, 0x000001cfu, 0x000200f9u, 0x000004d0u, 0x000200f8u, 0x000004d0u, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x0000048fu, 0x0004003du, 0x00000006u, 0x000004d6u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x000004d7u, 0x000004d6u, 0x00000399u, 0x0003003eu, 0x0000006cu, 0x000004d7u, 0x0004003du, 0x00000006u, 0x000004d8u, 0x0000006du, 0x00050084u, 0x00000006u, 0x000004dau, 0x000004d8u, 0x000004d9u, 0x0004003du, 0x00000006u, 0x000004dbu, 0x0000006cu, 0x00050080u, 0x00000006u, 0x000004dcu, 0x000004dbu, 0x000004dau, 0x0003003eu, 0x0000006cu, 0x000004dcu, 0x0004003du, 0x00000009u, 0x000004dfu, 0x0000038bu, 0x00040071u, 0x0000025au, 0x000004e0u, 0x000004dfu, 0x0003003eu, 0x000004deu, 0x000004e0u, 0x0004003du, 0x0000025au, 0x000004e1u, 0x000004deu, 0x0008004fu, 0x000003acu, 0x000004e2u, 0x000004e1u, 0x000004e1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003acu, 0x000004e4u, 0x000004e2u, 0x000019c7u, 0x0004003du, 0x0000025au, 0x000004e5u, 0x000004deu, 0x0009004fu, 0x0000025au, 0x000004e6u, 0x000004e5u, 0x000004e4u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000004deu, 0x000004e6u, 0x00050041u, 0x00000007u, 0x000004e8u, 0x000004deu, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000004e9u, 0x000004e8u, 0x000500c2u, 0x00000006u, 0x000004eau, 0x000004e9u, 0x00000453u, 0x0003003eu, 0x000004e7u, 0x000004eau, 0x00050041u, 0x00000007u, 0x000004ecu, 0x000004deu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000004edu, 0x000004ecu, 0x000500c4u, 0x00000006u, 0x000004eeu, 0x000004edu, 0x000003b0u, 0x00050041u, 0x00000007u, 0x000004efu, 0x000004deu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000004f0u, 0x000004efu, 0x000500c4u, 0x00000006u, 0x000004f1u, 0x000004f0u, 0x000001c4u, 0x000500c5u, 0x00000006u, 0x000004f2u, 0x000004eeu, 0x000004f1u, 0x00050041u, 0x00000007u, 0x000004f3u, 0x000004deu, 0x00000170u, 0x0004003du, 0x00000006u, 0x000004f4u, 0x000004f3u, 0x000500c2u, 0x00000006u, 0x000004f5u, 0x000004f4u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000004f6u, 0x000004f2u, 0x000004f5u, 0x000500c2u, 0x00000006u, 0x000004f8u, 0x000004eau, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000004f9u, 0x000004f6u, 0x000004f8u, 0x0003003eu, 0x000004ebu, 0x000004f9u, 0x0004003du, 0x00000006u, 0x000004fau, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004fbu, 0x000004fau, 0x000001bcu, 0x00040071u, 0x0000000au, 0x000004fdu, 0x000004f9u, 0x00060041u, 0x000003a8u, 0x000004feu, 0x000003a5u, 0x000000abu, 0x000004fbu, 0x0003003eu, 0x000004feu, 0x000004fdu, 0x0004003du, 0x00000006u, 0x000004ffu, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x00000501u, 0x000004eau, 0x000001c4u, 0x00040071u, 0x00000008u, 0x00000502u, 0x00000501u, 0x00060041u, 0x00000387u, 0x00000503u, 0x00000392u, 0x000000abu, 0x000004ffu, 0x0003003eu, 0x00000503u, 0x00000502u, 0x000300f7u, 0x00000505u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00000504u, 0x00000505u, 0x000200f8u, 0x00000504u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x00000506u, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x00000507u, 0x00000506u, 0x000001bcu, 0x00050080u, 0x00000006u, 0x00000509u, 0x00000507u, 0x00000508u, 0x00060041u, 0x000003a8u, 0x0000050bu, 0x000003a5u, 0x000000abu, 0x00000509u, 0x0003003eu, 0x0000050bu, 0x0000050au, 0x000200f9u, 0x00000505u, 0x000200f8u, 0x00000505u, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x00000490u, 0x0004003du, 0x00000006u, 0x0000050du, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x0000050eu, 0x0000050du, 0x00000399u, 0x0003003eu, 0x0000006cu, 0x0000050eu, 0x0004003du, 0x00000006u, 0x0000050fu, 0x0000006du, 0x00050084u, 0x00000006u, 0x00000511u, 0x0000050fu, 0x00000510u, 0x0004003du, 0x00000006u, 0x00000512u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x00000513u, 0x00000512u, 0x00000511u, 0x0003003eu, 0x0000006cu, 0x00000513u, 0x0004003du, 0x00000009u, 0x00000515u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000516u, 0x00000515u, 0x00000515u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000517u, 0x00000516u, 0x0003003eu, 0x00000514u, 0x00000517u, 0x00050041u, 0x00000007u, 0x00000519u, 0x00000514u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000051au, 0x00000519u, 0x000500c4u, 0x00000006u, 0x0000051bu, 0x0000051au, 0x000003b0u, 0x00050041u, 0x00000007u, 0x0000051cu, 0x00000514u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000051du, 0x0000051cu, 0x000500c5u, 0x00000006u, 0x0000051eu, 0x0000051bu, 0x0000051du, 0x0003003eu, 0x00000518u, 0x0000051eu, 0x0004003du, 0x00000006u, 0x0000051fu, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x000001bcu, 0x00040071u, 0x0000000au, 0x00000522u, 0x0000051eu, 0x00060041u, 0x000003a8u, 0x00000523u, 0x000003a5u, 0x000000abu, 0x00000520u, 0x0003003eu, 0x00000523u, 0x00000522u, 0x0004003du, 0x00000006u, 0x00000524u, 0x0000006cu, 0x0004003du, 0x00000006u, 0x00000526u, 0x0000051cu, 0x000500c7u, 0x00000006u, 0x00000527u, 0x00000526u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000528u, 0x00000527u, 0x000001c4u, 0x00040071u, 0x00000008u, 0x00000529u, 0x00000528u, 0x00060041u, 0x00000387u, 0x0000052au, 0x00000392u, 0x000000abu, 0x00000524u, 0x0003003eu, 0x0000052au, 0x00000529u, 0x000300f7u, 0x0000052cu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000052bu, 0x0000052cu, 0x000200f8u, 0x0000052bu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x0000052du, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x0000052eu, 0x0000052du, 0x000001bcu, 0x00050080u, 0x00000006u, 0x00000530u, 0x0000052eu, 0x0000052fu, 0x00060041u, 0x000003a8u, 0x00000531u, 0x000003a5u, 0x000000abu, 0x00000530u, 0x0003003eu, 0x00000531u, 0x0000050au, 0x000200f9u, 0x0000052cu, 0x000200f8u, 0x0000052cu, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x00000491u, 0x0004003du, 0x00000006u, 0x00000533u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x00000534u, 0x00000533u, 0x000003e5u, 0x0003003eu, 0x0000006cu, 0x00000534u, 0x0004003du, 0x00000006u, 0x00000535u, 0x0000006du, 0x00050084u, 0x00000006u, 0x00000537u, 0x00000535u, 0x00000536u, 0x0004003du, 0x00000006u, 0x00000538u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x00000539u, 0x00000538u, 0x00000537u, 0x0003003eu, 0x0000006cu, 0x00000539u, 0x0004003du, 0x00000009u, 0x0000053bu, 0x0000038bu, 0x00040071u, 0x0000025au, 0x0000053cu, 0x0000053bu, 0x0003003eu, 0x0000053au, 0x0000053cu, 0x00050041u, 0x00000007u, 0x0000053eu, 0x0000053au, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000053fu, 0x0000053eu, 0x000500c4u, 0x00000006u, 0x00000540u, 0x0000053fu, 0x000003f8u, 0x00050041u, 0x00000007u, 0x00000541u, 0x0000053au, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000542u, 0x00000541u, 0x000500c4u, 0x00000006u, 0x00000543u, 0x00000542u, 0x000003f9u, 0x000500c5u, 0x00000006u, 0x00000544u, 0x00000540u, 0x00000543u, 0x00050041u, 0x00000007u, 0x00000545u, 0x0000053au, 0x00000170u, 0x0004003du, 0x00000006u, 0x00000546u, 0x00000545u, 0x000500c4u, 0x00000006u, 0x00000547u, 0x00000546u, 0x000003b0u, 0x000500c5u, 0x00000006u, 0x00000548u, 0x00000544u, 0x00000547u, 0x00050041u, 0x00000007u, 0x00000549u, 0x0000053au, 0x000001c4u, 0x0004003du, 0x00000006u, 0x0000054au, 0x00000549u, 0x000500c4u, 0x00000006u, 0x0000054bu, 0x0000054au, 0x00000198u, 0x000500c5u, 0x00000006u, 0x0000054cu, 0x00000548u, 0x0000054bu, 0x0003003eu, 0x0000053du, 0x0000054cu, 0x0004003du, 0x00000006u, 0x0000054du, 0x0000006cu, 0x00060041u, 0x000003f3u, 0x0000054fu, 0x000003f1u, 0x000000abu, 0x0000054du, 0x0003003eu, 0x0000054fu, 0x0000054cu, 0x0004003du, 0x00000006u, 0x00000550u, 0x0000006cu, 0x00050084u, 0x00000006u, 0x00000551u, 0x00000170u, 0x00000550u, 0x00050041u, 0x00000404u, 0x00000552u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000553u, 0x00000552u, 0x00040071u, 0x00000006u, 0x00000554u, 0x00000553u, 0x0004007cu, 0x00000017u, 0x00000555u, 0x00000554u, 0x000500c7u, 0x00000017u, 0x00000556u, 0x00000555u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00000557u, 0x00000556u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00000558u, 0x00000557u, 0x0004007cu, 0x00000008u, 0x00000559u, 0x00000558u, 0x00060041u, 0x00000387u, 0x0000055au, 0x00000392u, 0x000000abu, 0x00000551u, 0x0003003eu, 0x0000055au, 0x00000559u, 0x0004003du, 0x00000006u, 0x0000055bu, 0x0000006cu, 0x00050084u, 0x00000006u, 0x0000055cu, 0x00000170u, 0x0000055bu, 0x00050080u, 0x00000006u, 0x0000055du, 0x0000055cu, 0x000001bcu, 0x00050041u, 0x00000404u, 0x0000055eu, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x0000055fu, 0x0000055eu, 0x00040071u, 0x00000006u, 0x00000560u, 0x0000055fu, 0x0004007cu, 0x00000017u, 0x00000561u, 0x00000560u, 0x000500c7u, 0x00000017u, 0x00000562u, 0x00000561u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00000563u, 0x00000562u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00000564u, 0x00000563u, 0x0004007cu, 0x00000008u, 0x00000565u, 0x00000564u, 0x00060041u, 0x00000387u, 0x00000566u, 0x00000392u, 0x000000abu, 0x0000055du, 0x0003003eu, 0x00000566u, 0x00000565u, 0x000300f7u, 0x00000568u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00000567u, 0x00000568u, 0x000200f8u, 0x00000567u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x00000569u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x0000056bu, 0x00000569u, 0x0000056au, 0x00060041u, 0x000003f3u, 0x0000056du, 0x000003f1u, 0x000000abu, 0x0000056bu, 0x0003003eu, 0x0000056du, 0x0000056cu, 0x000200f9u, 0x00000568u, 0x000200f8u, 0x00000568u, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x00000492u, 0x000200f9u, 0x0000048cu, 0x000200f8u, 0x0000048cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000072u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000070u, 0x00030037u, 0x00000007u, 0x00000071u, 0x000200f8u, 0x00000073u, 0x000300f7u, 0x00000573u, 0x00000000u, 0x000400fau, 0x00000571u, 0x00000572u, 0x00000573u, 0x000200f8u, 0x00000572u, 0x0004003du, 0x00000034u, 0x00000575u, 0x00000574u, 0x000300f7u, 0x00000577u, 0x00000000u, 0x000400fau, 0x00000575u, 0x00000576u, 0x00000577u, 0x000200f8u, 0x00000576u, 0x0004003du, 0x00000006u, 0x00000578u, 0x00000070u, 0x000500c7u, 0x00000006u, 0x00000579u, 0x00000578u, 0x00000399u, 0x0003003eu, 0x00000070u, 0x00000579u, 0x0004003du, 0x00000006u, 0x0000057au, 0x00000071u, 0x00050084u, 0x00000006u, 0x0000057cu, 0x0000057au, 0x0000057bu, 0x0004003du, 0x00000006u, 0x0000057du, 0x00000070u, 0x00050080u, 0x00000006u, 0x0000057eu, 0x0000057du, 0x0000057cu, 0x0003003eu, 0x00000070u, 0x0000057eu, 0x0004003du, 0x00000006u, 0x0000057fu, 0x00000070u, 0x000500c6u, 0x00000006u, 0x00000580u, 0x0000057fu, 0x000001bcu, 0x0004003du, 0x0000000au, 0x00000581u, 0x00000424u, 0x000500c4u, 0x0000000au, 0x00000582u, 0x00000581u, 0x0000047fu, 0x0004003du, 0x00000008u, 0x00000583u, 0x00000405u, 0x000500c2u, 0x00000008u, 0x00000584u, 0x00000583u, 0x0000047fu, 0x00040071u, 0x0000000au, 0x00000585u, 0x00000584u, 0x000500c5u, 0x0000000au, 0x00000586u, 0x00000582u, 0x00000585u, 0x00060041u, 0x000003a8u, 0x00000587u, 0x000003a5u, 0x000000abu, 0x00000580u, 0x0003003eu, 0x00000587u, 0x00000586u, 0x0004003du, 0x00000006u, 0x00000588u, 0x00000070u, 0x0004003du, 0x00000008u, 0x00000589u, 0x00000405u, 0x00040071u, 0x0000000au, 0x0000058au, 0x00000589u, 0x000500c7u, 0x0000000au, 0x0000058bu, 0x0000058au, 0x00000485u, 0x00040071u, 0x00000008u, 0x0000058cu, 0x0000058bu, 0x00060041u, 0x00000387u, 0x0000058du, 0x00000392u, 0x000000abu, 0x00000588u, 0x0003003eu, 0x0000058du, 0x0000058cu, 0x000300f7u, 0x0000058fu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000058eu, 0x0000058fu, 0x000200f8u, 0x0000058eu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x00000590u, 0x00000070u, 0x000500c6u, 0x00000006u, 0x00000591u, 0x00000590u, 0x000001bcu, 0x00050080u, 0x00000006u, 0x00000593u, 0x00000591u, 0x00000592u, 0x00060041u, 0x000003a8u, 0x00000594u, 0x000003a5u, 0x000000abu, 0x00000593u, 0x0003003eu, 0x00000594u, 0x0000050au, 0x000200f9u, 0x0000058fu, 0x000200f8u, 0x0000058fu, 0x000200f9u, 0x00000577u, 0x000200f8u, 0x00000577u, 0x000200f9u, 0x00000573u, 0x000200f8u, 0x00000573u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000007cu, 0x00000000u, 0x00000076u, 0x00030037u, 0x00000075u, 0x00000077u, 0x00030037u, 0x00000007u, 0x00000078u, 0x00030037u, 0x00000007u, 0x00000079u, 0x00030037u, 0x00000007u, 0x0000007au, 0x00030037u, 0x00000007u, 0x0000007bu, 0x000200f8u, 0x0000007du, 0x0004003bu, 0x00000075u, 0x0000059eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005d0u, 0x00000007u, 0x0003003eu, 0x00000471u, 0x00000299u, 0x0003003eu, 0x00000574u, 0x00000299u, 0x0004003du, 0x00000074u, 0x00000595u, 0x00000077u, 0x0004003du, 0x00000006u, 0x00000596u, 0x00000078u, 0x0004003du, 0x00000006u, 0x00000597u, 0x00000079u, 0x00050050u, 0x00000074u, 0x00000598u, 0x00000596u, 0x00000597u, 0x000500b0u, 0x00000599u, 0x0000059au, 0x00000595u, 0x00000598u, 0x0004009bu, 0x00000034u, 0x0000059bu, 0x0000059au, 0x000300f7u, 0x0000059du, 0x00000000u, 0x000400fau, 0x0000059bu, 0x0000059cu, 0x0000059du, 0x000200f8u, 0x0000059cu, 0x0004003du, 0x00000074u, 0x0000059fu, 0x00000077u, 0x00050050u, 0x00000074u, 0x000005a3u, 0x000005a2u, 0x000005a2u, 0x000500c7u, 0x00000074u, 0x000005a4u, 0x0000059fu, 0x000005a3u, 0x0003003eu, 0x0000059eu, 0x000005a4u, 0x0004003du, 0x00000074u, 0x000005a5u, 0x00000077u, 0x00050050u, 0x000005a6u, 0x000005a7u, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x000005a8u, 0x000005a5u, 0x000005a7u, 0x0003003eu, 0x00000077u, 0x000005a8u, 0x00050041u, 0x00000007u, 0x000005aau, 0x0000059eu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005abu, 0x000005aau, 0x00050084u, 0x00000006u, 0x000005adu, 0x000005abu, 0x000005acu, 0x00050041u, 0x00000007u, 0x000005aeu, 0x0000059eu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005afu, 0x000005aeu, 0x00050080u, 0x00000006u, 0x000005b0u, 0x000005adu, 0x000005afu, 0x0003003eu, 0x000005a9u, 0x000005b0u, 0x0004003du, 0x00000006u, 0x000005b2u, 0x0000007au, 0x0004003du, 0x00000006u, 0x000005b3u, 0x00000078u, 0x000500c2u, 0x00000006u, 0x000005b4u, 0x000005b3u, 0x000004a9u, 0x00050041u, 0x00000007u, 0x000005b5u, 0x00000077u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005b6u, 0x000005b5u, 0x00050084u, 0x00000006u, 0x000005b7u, 0x000005b4u, 0x000005b6u, 0x00050080u, 0x00000006u, 0x000005b8u, 0x000005b2u, 0x000005b7u, 0x00050041u, 0x00000007u, 0x000005b9u, 0x00000077u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005bau, 0x000005b9u, 0x00050080u, 0x00000006u, 0x000005bbu, 0x000005b8u, 0x000005bau, 0x0003003eu, 0x000005b1u, 0x000005bbu, 0x0003003eu, 0x000005bdu, 0x000005bbu, 0x0003003eu, 0x000005bfu, 0x000005bbu, 0x0003003eu, 0x000005c1u, 0x000005b0u, 0x00060039u, 0x00000002u, 0x000005c3u, 0x00000062u, 0x000005bfu, 0x000005c1u, 0x0004003du, 0x00000006u, 0x000005c4u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x000005c5u, 0x00000078u, 0x000500c2u, 0x00000006u, 0x000005c6u, 0x000005c5u, 0x000004a9u, 0x0004003du, 0x00000006u, 0x000005c8u, 0x000005b5u, 0x00050084u, 0x00000006u, 0x000005c9u, 0x000005c6u, 0x000005c8u, 0x00050080u, 0x00000006u, 0x000005cau, 0x000005c4u, 0x000005c9u, 0x0004003du, 0x00000006u, 0x000005ccu, 0x000005b9u, 0x00050080u, 0x00000006u, 0x000005cdu, 0x000005cau, 0x000005ccu, 0x0003003eu, 0x000005b1u, 0x000005cdu, 0x0003003eu, 0x000005ceu, 0x000005cdu, 0x0003003eu, 0x000005d0u, 0x000005b0u, 0x00060039u, 0x00000002u, 0x000005d2u, 0x0000006au, 0x000005ceu, 0x000005d0u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000081u, 0x00000000u, 0x0000007eu, 0x00030037u, 0x00000075u, 0x0000007fu, 0x00030037u, 0x00000007u, 0x00000080u, 0x000200f8u, 0x00000082u, 0x0004003bu, 0x00000007u, 0x000005d3u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x000005dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005e3u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000005d4u, 0x0000007fu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005d5u, 0x000005d4u, 0x000500c2u, 0x00000006u, 0x000005d6u, 0x000005d5u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000005d7u, 0x00000080u, 0x00050080u, 0x00000006u, 0x000005d8u, 0x000005d7u, 0x000001c4u, 0x000500c2u, 0x00000006u, 0x000005d9u, 0x000005d8u, 0x00000170u, 0x00050084u, 0x00000006u, 0x000005dau, 0x000005d6u, 0x000005d9u, 0x00050041u, 0x00000007u, 0x000005dbu, 0x0000007fu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005dcu, 0x000005dbu, 0x000500c2u, 0x00000006u, 0x000005ddu, 0x000005dcu, 0x00000170u, 0x00050080u, 0x00000006u, 0x000005deu, 0x000005dau, 0x000005ddu, 0x0003003eu, 0x000005d3u, 0x000005deu, 0x0004003du, 0x00000074u, 0x000005e0u, 0x0000007fu, 0x000500c7u, 0x00000074u, 0x000005e2u, 0x000005e0u, 0x000019c8u, 0x0003003eu, 0x000005dfu, 0x000005e2u, 0x0004003du, 0x00000034u, 0x000005e4u, 0x00000471u, 0x000600a9u, 0x00000006u, 0x000005e5u, 0x000005e4u, 0x000001bcu, 0x00000198u, 0x0004003du, 0x00000034u, 0x000005e6u, 0x00000574u, 0x000600a9u, 0x00000006u, 0x000005e7u, 0x000005e6u, 0x000001bcu, 0x00000198u, 0x00050084u, 0x00000006u, 0x000005e8u, 0x00000170u, 0x000005e7u, 0x00050080u, 0x00000006u, 0x000005e9u, 0x000005e5u, 0x000005e8u, 0x0003003eu, 0x000005e3u, 0x000005e9u, 0x00050041u, 0x00000007u, 0x000005eau, 0x000005dfu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005ebu, 0x000005eau, 0x00050041u, 0x00000007u, 0x000005ecu, 0x000005dfu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005edu, 0x000005ecu, 0x00050084u, 0x00000006u, 0x000005eeu, 0x000005edu, 0x00000420u, 0x00050080u, 0x00000006u, 0x000005efu, 0x000005ebu, 0x000005eeu, 0x00050084u, 0x00000006u, 0x000005f0u, 0x00000170u, 0x000005efu, 0x000500c4u, 0x00000006u, 0x000005f2u, 0x000005e9u, 0x000005f0u, 0x0003003eu, 0x000005e3u, 0x000005f2u, 0x000500abu, 0x00000034u, 0x000005f4u, 0x000005f2u, 0x00000198u, 0x000300f7u, 0x000005f6u, 0x00000000u, 0x000400fau, 0x000005f4u, 0x000005f5u, 0x000005f6u, 0x000200f8u, 0x000005f5u, 0x00050080u, 0x00000006u, 0x000005fcu, 0x000005fau, 0x000005deu, 0x00060041u, 0x000003f3u, 0x000005fdu, 0x000003f1u, 0x000000abu, 0x000005fcu, 0x000700f1u, 0x00000006u, 0x000005ffu, 0x000005fdu, 0x000001bcu, 0x00000198u, 0x000005f2u, 0x000200f9u, 0x000005f6u, 0x000200f8u, 0x000005f6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000088u, 0x00000000u, 0x00000076u, 0x00030037u, 0x00000075u, 0x00000083u, 0x00030037u, 0x00000007u, 0x00000084u, 0x00030037u, 0x00000007u, 0x00000085u, 0x00030037u, 0x00000007u, 0x00000086u, 0x00030037u, 0x00000007u, 0x00000087u, 0x000200f8u, 0x00000089u, 0x0004003bu, 0x00000007u, 0x00000608u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000060bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000614u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000061cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000626u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000628u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000634u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000636u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000063du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000063fu, 0x00000007u, 0x0004003du, 0x00000074u, 0x00000600u, 0x00000083u, 0x0004003du, 0x00000006u, 0x00000601u, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000602u, 0x00000085u, 0x00050050u, 0x00000074u, 0x00000603u, 0x00000601u, 0x00000602u, 0x000500b0u, 0x00000599u, 0x00000604u, 0x00000600u, 0x00000603u, 0x0004009bu, 0x00000034u, 0x00000605u, 0x00000604u, 0x000300f7u, 0x00000607u, 0x00000000u, 0x000400fau, 0x00000605u, 0x00000606u, 0x00000607u, 0x000200f8u, 0x00000606u, 0x0004003du, 0x00000006u, 0x00000609u, 0x00000084u, 0x000500c2u, 0x00000006u, 0x0000060au, 0x00000609u, 0x000004a9u, 0x0003003eu, 0x00000608u, 0x0000060au, 0x0004003du, 0x00000074u, 0x0000060cu, 0x00000083u, 0x00050050u, 0x00000074u, 0x0000060fu, 0x0000060eu, 0x0000060eu, 0x000500c7u, 0x00000074u, 0x00000610u, 0x0000060cu, 0x0000060fu, 0x0003003eu, 0x0000060bu, 0x00000610u, 0x0004003du, 0x00000074u, 0x00000611u, 0x00000083u, 0x00050050u, 0x000005a6u, 0x00000612u, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x00000613u, 0x00000611u, 0x00000612u, 0x0003003eu, 0x00000083u, 0x00000613u, 0x00050041u, 0x00000007u, 0x00000615u, 0x0000060bu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000616u, 0x00000615u, 0x00050084u, 0x00000006u, 0x00000618u, 0x00000616u, 0x00000617u, 0x00050041u, 0x00000007u, 0x00000619u, 0x0000060bu, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000061au, 0x00000619u, 0x00050080u, 0x00000006u, 0x0000061bu, 0x00000618u, 0x0000061au, 0x0003003eu, 0x00000614u, 0x0000061bu, 0x0004003du, 0x00000006u, 0x0000061du, 0x00000086u, 0x00050041u, 0x00000007u, 0x0000061fu, 0x00000083u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000620u, 0x0000061fu, 0x00050084u, 0x00000006u, 0x00000621u, 0x0000060au, 0x00000620u, 0x00050080u, 0x00000006u, 0x00000622u, 0x0000061du, 0x00000621u, 0x00050041u, 0x00000007u, 0x00000623u, 0x00000083u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000624u, 0x00000623u, 0x00050080u, 0x00000006u, 0x00000625u, 0x00000622u, 0x00000624u, 0x0003003eu, 0x0000061cu, 0x00000625u, 0x0003003eu, 0x00000626u, 0x00000625u, 0x0003003eu, 0x00000628u, 0x0000061bu, 0x00060039u, 0x00000002u, 0x0000062au, 0x0000006eu, 0x00000626u, 0x00000628u, 0x0004003du, 0x00000006u, 0x0000062bu, 0x00000087u, 0x0004003du, 0x00000006u, 0x0000062eu, 0x0000061fu, 0x00050084u, 0x00000006u, 0x0000062fu, 0x0000060au, 0x0000062eu, 0x00050080u, 0x00000006u, 0x00000630u, 0x0000062bu, 0x0000062fu, 0x0004003du, 0x00000006u, 0x00000632u, 0x00000623u, 0x00050080u, 0x00000006u, 0x00000633u, 0x00000630u, 0x00000632u, 0x0003003eu, 0x0000061cu, 0x00000633u, 0x0003003eu, 0x00000634u, 0x00000633u, 0x0003003eu, 0x00000636u, 0x0000061bu, 0x00060039u, 0x00000002u, 0x00000638u, 0x00000072u, 0x00000634u, 0x00000636u, 0x000300f7u, 0x0000063cu, 0x00000000u, 0x000400fau, 0x0000063au, 0x0000063bu, 0x0000063cu, 0x000200f8u, 0x0000063bu, 0x0004003du, 0x00000074u, 0x0000063eu, 0x00000083u, 0x0003003eu, 0x0000063du, 0x0000063eu, 0x0003003eu, 0x0000063fu, 0x0000060au, 0x00060039u, 0x00000002u, 0x00000641u, 0x00000081u, 0x0000063du, 0x0000063fu, 0x000200f9u, 0x0000063cu, 0x000200f8u, 0x0000063cu, 0x000200f9u, 0x00000607u, 0x000200f8u, 0x00000607u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000008cu, 0x00000000u, 0x0000008au, 0x00030037u, 0x00000035u, 0x0000008bu, 0x000200f8u, 0x0000008du, 0x0004003bu, 0x00000046u, 0x00000642u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000644u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000653u, 0x00000007u, 0x0004003du, 0x00000034u, 0x00000643u, 0x0000008bu, 0x000300f7u, 0x00000646u, 0x00000000u, 0x000400fau, 0x00000643u, 0x00000645u, 0x0000064bu, 0x000200f8u, 0x00000645u, 0x00050041u, 0x00000404u, 0x00000647u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000648u, 0x00000647u, 0x000500c7u, 0x00000008u, 0x0000064au, 0x00000648u, 0x00000649u, 0x0003003eu, 0x00000644u, 0x0000064au, 0x000200f9u, 0x00000646u, 0x000200f8u, 0x0000064bu, 0x0003003eu, 0x00000644u, 0x00000649u, 0x000200f9u, 0x00000646u, 0x000200f8u, 0x00000646u, 0x000700f5u, 0x00000008u, 0x00001993u, 0x0000064au, 0x00000645u, 0x00000649u, 0x0000064bu, 0x0003003eu, 0x00000642u, 0x00001993u, 0x000300f7u, 0x00000652u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000652u, 0x00000000u, 0x0000064du, 0x00000001u, 0x0000064eu, 0x00000002u, 0x0000064fu, 0x00000003u, 0x00000650u, 0x00000004u, 0x00000651u, 0x000200f8u, 0x0000064du, 0x0003003eu, 0x00000653u, 0x00000654u, 0x0003003eu, 0x00000642u, 0x00000649u, 0x000200f9u, 0x00000652u, 0x000200f8u, 0x0000064eu, 0x0004003du, 0x00000009u, 0x00000656u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000657u, 0x00000656u, 0x00000656u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000653u, 0x00000657u, 0x0003003eu, 0x00000642u, 0x00000649u, 0x000200f9u, 0x00000652u, 0x000200f8u, 0x0000064fu, 0x0004003du, 0x00000009u, 0x00000659u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x0000065au, 0x00000659u, 0x00000659u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000001bu, 0x0000065du, 0x0000065au, 0x000019c9u, 0x0003003eu, 0x00000653u, 0x0000065du, 0x000200f9u, 0x00000652u, 0x000200f8u, 0x00000650u, 0x0004003du, 0x00000009u, 0x0000065fu, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000660u, 0x0000065fu, 0x0000065fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000653u, 0x00000660u, 0x000200f9u, 0x00000652u, 0x000200f8u, 0x00000651u, 0x0004003du, 0x00000009u, 0x00000662u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000663u, 0x00000662u, 0x00000662u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000653u, 0x00000663u, 0x000200f9u, 0x00000652u, 0x000200f8u, 0x00000652u, 0x000f00f5u, 0x00000008u, 0x00001997u, 0x00001993u, 0x00000646u, 0x00000649u, 0x0000064du, 0x00000649u, 0x0000064eu, 0x00001993u, 0x0000064fu, 0x00001993u, 0x00000650u, 0x00001993u, 0x00000651u, 0x000f00f5u, 0x0000001bu, 0x00001994u, 0x00001996u, 0x00000646u, 0x00000654u, 0x0000064du, 0x00000657u, 0x0000064eu, 0x0000065du, 0x0000064fu, 0x00000660u, 0x00000650u, 0x00000663u, 0x00000651u, 0x00050051u, 0x00000008u, 0x00000668u, 0x00001994u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000669u, 0x00001994u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000066au, 0x00001994u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000066bu, 0x00000668u, 0x00000669u, 0x0000066au, 0x00001997u, 0x000200feu, 0x0000066bu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000090u, 0x00000000u, 0x0000008eu, 0x00030037u, 0x00000033u, 0x0000008fu, 0x000200f8u, 0x00000091u, 0x000300f7u, 0x00000670u, 0x00000000u, 0x000400fau, 0x0000066eu, 0x0000066fu, 0x00000675u, 0x000200f8u, 0x0000066fu, 0x0004003du, 0x00000009u, 0x00000671u, 0x0000008fu, 0x0008004fu, 0x0000001bu, 0x00000672u, 0x00000671u, 0x00000671u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000673u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000674u, 0x00000673u, 0x00000671u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000674u, 0x000200f9u, 0x00000670u, 0x000200f8u, 0x00000675u, 0x0004003du, 0x00000009u, 0x00000676u, 0x0000008fu, 0x0003003eu, 0x0000038bu, 0x00000676u, 0x000200f9u, 0x00000670u, 0x000200f8u, 0x00000670u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000094u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000092u, 0x00030037u, 0x00000007u, 0x00000093u, 0x000200f8u, 0x00000095u, 0x0004003bu, 0x00000033u, 0x00000682u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000685u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000689u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000691u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000069fu, 0x00000007u, 0x000300f7u, 0x0000067au, 0x00000000u, 0x000900fbu, 0x00000372u, 0x0000067au, 0x00000000u, 0x00000677u, 0x00000001u, 0x00000678u, 0x00000002u, 0x00000679u, 0x000200f8u, 0x00000677u, 0x0003003eu, 0x0000038bu, 0x0000067bu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x0000067au, 0x000200f8u, 0x00000678u, 0x0004003du, 0x00000006u, 0x0000067du, 0x00000092u, 0x000500c7u, 0x00000006u, 0x0000067eu, 0x0000067du, 0x000003ddu, 0x0003003eu, 0x00000092u, 0x0000067eu, 0x0004003du, 0x00000006u, 0x0000067fu, 0x00000092u, 0x00040071u, 0x00000008u, 0x00000680u, 0x0000067fu, 0x00070050u, 0x00000009u, 0x00000681u, 0x00000680u, 0x00000680u, 0x00000680u, 0x00000680u, 0x0003003eu, 0x00000682u, 0x00000681u, 0x00050039u, 0x00000002u, 0x00000683u, 0x00000090u, 0x00000682u, 0x000200f9u, 0x0000067au, 0x000200f8u, 0x00000679u, 0x0004003du, 0x00000006u, 0x00000686u, 0x00000092u, 0x000500c2u, 0x00000006u, 0x00000687u, 0x00000686u, 0x000000cau, 0x000500c7u, 0x00000006u, 0x00000688u, 0x00000687u, 0x000003b7u, 0x0003003eu, 0x00000685u, 0x00000688u, 0x0004003du, 0x00000006u, 0x0000068au, 0x00000092u, 0x000500c2u, 0x00000006u, 0x0000068bu, 0x0000068au, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x0000068cu, 0x0000068bu, 0x000003b7u, 0x0003003eu, 0x00000689u, 0x0000068cu, 0x0004003du, 0x00000006u, 0x0000068eu, 0x00000092u, 0x000500c4u, 0x00000006u, 0x0000068fu, 0x0000068eu, 0x000000b8u, 0x000500c7u, 0x00000006u, 0x00000690u, 0x0000068fu, 0x000003b7u, 0x0003003eu, 0x0000068du, 0x00000690u, 0x0004003du, 0x00000006u, 0x00000692u, 0x00000092u, 0x000500c7u, 0x00000006u, 0x00000693u, 0x00000692u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000695u, 0x00000693u, 0x00000694u, 0x0003003eu, 0x00000691u, 0x00000695u, 0x00040071u, 0x00000008u, 0x00000697u, 0x00000688u, 0x00040071u, 0x00000008u, 0x00000699u, 0x0000068cu, 0x00040071u, 0x00000008u, 0x0000069bu, 0x00000690u, 0x00040071u, 0x00000008u, 0x0000069du, 0x00000695u, 0x00070050u, 0x00000009u, 0x0000069eu, 0x00000697u, 0x00000699u, 0x0000069bu, 0x0000069du, 0x0003003eu, 0x0000069fu, 0x0000069eu, 0x00050039u, 0x00000002u, 0x000006a0u, 0x00000090u, 0x0000069fu, 0x000200f9u, 0x0000067au, 0x000200f8u, 0x0000067au, 0x000300f7u, 0x000006a4u, 0x00000000u, 0x000400fau, 0x00000570u, 0x000006a3u, 0x000006a4u, 0x000200f8u, 0x000006a3u, 0x00040039u, 0x00000002u, 0x000006a5u, 0x00000064u, 0x000200f9u, 0x000006a4u, 0x000200f8u, 0x000006a4u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000098u, 0x00000000u, 0x00000096u, 0x00030037u, 0x00000007u, 0x00000097u, 0x000200f8u, 0x00000099u, 0x0004003bu, 0x00000007u, 0x000006abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d9u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006f6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000703u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000711u, 0x00000007u, 0x000300f7u, 0x000006aau, 0x00000000u, 0x000b00fbu, 0x00000372u, 0x000006aau, 0x00000004u, 0x000006a6u, 0x00000002u, 0x000006a7u, 0x00000003u, 0x000006a8u, 0x00000001u, 0x000006a9u, 0x000200f8u, 0x000006a6u, 0x0004003du, 0x00000006u, 0x000006acu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006adu, 0x000006acu, 0x000003f8u, 0x000500c7u, 0x00000006u, 0x000006aeu, 0x000006adu, 0x000003ddu, 0x0003003eu, 0x000006abu, 0x000006aeu, 0x0004003du, 0x00000006u, 0x000006b0u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006b1u, 0x000006b0u, 0x000003f9u, 0x000500c7u, 0x00000006u, 0x000006b2u, 0x000006b1u, 0x000003ddu, 0x0003003eu, 0x000006afu, 0x000006b2u, 0x0004003du, 0x00000006u, 0x000006b4u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006b5u, 0x000006b4u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x000006b6u, 0x000006b5u, 0x000003ddu, 0x0003003eu, 0x000006b3u, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006b8u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006b9u, 0x000006b8u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x000006bau, 0x000006b9u, 0x000003ddu, 0x0003003eu, 0x000006b7u, 0x000006bau, 0x00040071u, 0x00000008u, 0x000006bcu, 0x000006aeu, 0x00040071u, 0x00000008u, 0x000006beu, 0x000006b2u, 0x00040071u, 0x00000008u, 0x000006c0u, 0x000006b6u, 0x00040071u, 0x00000008u, 0x000006c2u, 0x000006bau, 0x00070050u, 0x00000009u, 0x000006c3u, 0x000006bcu, 0x000006beu, 0x000006c0u, 0x000006c2u, 0x0003003eu, 0x000006c4u, 0x000006c3u, 0x00050039u, 0x00000002u, 0x000006c5u, 0x00000090u, 0x000006c4u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006a7u, 0x0004003du, 0x00000006u, 0x000006c7u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x000006c8u, 0x000006c7u, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x000006c9u, 0x000006c8u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006cau, 0x000006c9u, 0x000003f9u, 0x0004003du, 0x00000006u, 0x000006cbu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006ccu, 0x000006cbu, 0x000006cau, 0x0003003eu, 0x00000097u, 0x000006ccu, 0x0004003du, 0x00000006u, 0x000006ceu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006cfu, 0x000006ceu, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x000006d0u, 0x000006cfu, 0x000003b7u, 0x0003003eu, 0x000006cdu, 0x000006d0u, 0x0004003du, 0x00000006u, 0x000006d2u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006d3u, 0x000006d2u, 0x000001c4u, 0x000500c7u, 0x00000006u, 0x000006d4u, 0x000006d3u, 0x000003b7u, 0x0003003eu, 0x000006d1u, 0x000006d4u, 0x0004003du, 0x00000006u, 0x000006d6u, 0x00000097u, 0x000500c4u, 0x00000006u, 0x000006d7u, 0x000006d6u, 0x00000170u, 0x000500c7u, 0x00000006u, 0x000006d8u, 0x000006d7u, 0x000003b7u, 0x0003003eu, 0x000006d5u, 0x000006d8u, 0x0004003du, 0x00000006u, 0x000006dau, 0x00000097u, 0x000500c7u, 0x00000006u, 0x000006dbu, 0x000006dau, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006dcu, 0x000006dbu, 0x00000694u, 0x0003003eu, 0x000006d9u, 0x000006dcu, 0x00040071u, 0x00000008u, 0x000006deu, 0x000006d0u, 0x00040071u, 0x00000008u, 0x000006e0u, 0x000006d4u, 0x00040071u, 0x00000008u, 0x000006e2u, 0x000006d8u, 0x00040071u, 0x00000008u, 0x000006e4u, 0x000006dcu, 0x00070050u, 0x00000009u, 0x000006e5u, 0x000006deu, 0x000006e0u, 0x000006e2u, 0x000006e4u, 0x0003003eu, 0x000006e6u, 0x000006e5u, 0x00050039u, 0x00000002u, 0x000006e7u, 0x00000090u, 0x000006e6u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006a8u, 0x0004003du, 0x00000006u, 0x000006e9u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x000006eau, 0x000006e9u, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x000006ebu, 0x000006eau, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006ecu, 0x000006ebu, 0x000003f9u, 0x0004003du, 0x00000006u, 0x000006edu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006eeu, 0x000006edu, 0x000006ecu, 0x0003003eu, 0x00000097u, 0x000006eeu, 0x0004003du, 0x00000006u, 0x000006f0u, 0x00000097u, 0x000500c7u, 0x00000006u, 0x000006f1u, 0x000006f0u, 0x000006efu, 0x0003003eu, 0x00000097u, 0x000006f1u, 0x0004003du, 0x00000006u, 0x000006f3u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006f4u, 0x000006f3u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x000006f5u, 0x000006f4u, 0x000003ddu, 0x0003003eu, 0x000006f2u, 0x000006f5u, 0x0004003du, 0x00000006u, 0x000006f7u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x000006f9u, 0x000006f8u, 0x000003ddu, 0x0003003eu, 0x000006f6u, 0x000006f9u, 0x00040071u, 0x00000008u, 0x000006fbu, 0x000006f5u, 0x00040071u, 0x00000008u, 0x00000701u, 0x000006f9u, 0x00070050u, 0x00000009u, 0x00000702u, 0x000006fbu, 0x000006fbu, 0x000006fbu, 0x00000701u, 0x0003003eu, 0x00000703u, 0x00000702u, 0x00050039u, 0x00000002u, 0x00000704u, 0x00000090u, 0x00000703u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006a9u, 0x0004003du, 0x00000006u, 0x00000706u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000707u, 0x00000706u, 0x000001c4u, 0x000500c6u, 0x00000006u, 0x00000708u, 0x00000707u, 0x000001c4u, 0x00050084u, 0x00000006u, 0x00000709u, 0x00000708u, 0x000003b0u, 0x0004003du, 0x00000006u, 0x0000070au, 0x00000097u, 0x000500c2u, 0x00000006u, 0x0000070bu, 0x0000070au, 0x00000709u, 0x0003003eu, 0x00000097u, 0x0000070bu, 0x0004003du, 0x00000006u, 0x0000070cu, 0x00000097u, 0x000500c7u, 0x00000006u, 0x0000070du, 0x0000070cu, 0x000003ddu, 0x0003003eu, 0x00000097u, 0x0000070du, 0x0004003du, 0x00000006u, 0x0000070eu, 0x00000097u, 0x00040071u, 0x00000008u, 0x0000070fu, 0x0000070eu, 0x00070050u, 0x00000009u, 0x00000710u, 0x0000070fu, 0x0000070fu, 0x0000070fu, 0x0000070fu, 0x0003003eu, 0x00000711u, 0x00000710u, 0x00050039u, 0x00000002u, 0x00000712u, 0x00000090u, 0x00000711u, 0x000200f9u, 0x000006aau, 0x000200f8u, 0x000006aau, 0x000300f7u, 0x00000716u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000715u, 0x00000716u, 0x000200f8u, 0x00000715u, 0x00040039u, 0x00000002u, 0x00000717u, 0x00000064u, 0x000200f9u, 0x00000716u, 0x000200f8u, 0x00000716u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a1u, 0x00000000u, 0x0000009cu, 0x00030037u, 0x0000001au, 0x0000009du, 0x00030037u, 0x0000001au, 0x0000009eu, 0x00030037u, 0x00000007u, 0x0000009fu, 0x00030037u, 0x0000009bu, 0x000000a0u, 0x000200f8u, 0x000000a2u, 0x0004003bu, 0x00000046u, 0x0000126bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000126au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001269u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001268u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001267u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001261u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001260u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000125fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000125eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000125du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001258u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00001257u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001256u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001255u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000718u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000071cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000721u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000726u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000729u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000072cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000738u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000073cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000073fu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000744u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000749u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000074eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000753u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000759u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000075fu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000765u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000076bu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000076cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000076fu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000773u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000783u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000784u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000785u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000786u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000788u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000789u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000078au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000078cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000078eu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000790u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000791u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000793u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000794u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000796u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000798u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000799u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000079au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000007b4u, 0x00000007u, 0x0004003bu, 0x00000032u, 0x000007bau, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000007bcu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007beu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007c0u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007c2u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007c4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000007c6u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007c8u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x000007cfu, 0x00000007u, 0x0004003bu, 0x00000032u, 0x000007d0u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000007d2u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007d4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007d6u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007d8u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007dau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000007dcu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007deu, 0x00000007u, 0x0004003bu, 0x00000019u, 0x000007e6u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007e7u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007eau, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007f2u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007f4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007f5u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007f7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000802u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000807u, 0x00000007u, 0x00050041u, 0x0000001au, 0x00000719u, 0x000000a0u, 0x000000b5u, 0x0004003du, 0x00000017u, 0x0000071au, 0x00000719u, 0x000500c3u, 0x00000017u, 0x0000071bu, 0x0000071au, 0x000000cdu, 0x0003003eu, 0x00000718u, 0x0000071bu, 0x0004003du, 0x00000017u, 0x0000071eu, 0x00000719u, 0x000500c7u, 0x00000017u, 0x00000720u, 0x0000071eu, 0x0000071fu, 0x0003003eu, 0x0000071cu, 0x00000720u, 0x00050041u, 0x00000046u, 0x00000722u, 0x000000a0u, 0x000000b8u, 0x0004003du, 0x00000008u, 0x00000723u, 0x00000722u, 0x00040071u, 0x00000006u, 0x00000724u, 0x00000723u, 0x0004007cu, 0x00000017u, 0x00000725u, 0x00000724u, 0x0003003eu, 0x00000721u, 0x00000725u, 0x00050041u, 0x00000033u, 0x00000727u, 0x000000a0u, 0x000000abu, 0x0004003du, 0x00000009u, 0x00000728u, 0x00000727u, 0x0003003eu, 0x00000726u, 0x00000728u, 0x00050041u, 0x00000046u, 0x0000072au, 0x000000a0u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x0000072bu, 0x0000072au, 0x0003003eu, 0x00000729u, 0x0000072bu, 0x0004003du, 0x00000006u, 0x00000733u, 0x0000009fu, 0x00080041u, 0x00000387u, 0x00000734u, 0x00000732u, 0x000000abu, 0x00000733u, 0x000000abu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000735u, 0x00000734u, 0x00040071u, 0x00000006u, 0x00000736u, 0x00000735u, 0x0003003eu, 0x0000072cu, 0x00000736u, 0x0004003du, 0x00000006u, 0x00000739u, 0x0000009fu, 0x0003003eu, 0x00000738u, 0x00000739u, 0x00050039u, 0x0000000du, 0x0000073au, 0x00000010u, 0x00000738u, 0x00050051u, 0x00000009u, 0x00001259u, 0x0000073au, 0x00000008u, 0x0003003eu, 0x00001255u, 0x00001259u, 0x00050051u, 0x00000009u, 0x0000125au, 0x0000073au, 0x00000009u, 0x0003003eu, 0x00001256u, 0x0000125au, 0x00050051u, 0x0000000au, 0x0000125bu, 0x0000073au, 0x0000000bu, 0x0003003eu, 0x00001257u, 0x0000125bu, 0x00050051u, 0x00000008u, 0x0000125cu, 0x0000073au, 0x0000000cu, 0x0003003eu, 0x00001258u, 0x0000125cu, 0x0003003eu, 0x0000073cu, 0x00000736u, 0x00050039u, 0x00000012u, 0x0000073eu, 0x00000015u, 0x0000073cu, 0x00050051u, 0x00000009u, 0x00001262u, 0x0000073eu, 0x00000000u, 0x0003003eu, 0x0000125du, 0x00001262u, 0x00050051u, 0x00000009u, 0x00001263u, 0x0000073eu, 0x00000001u, 0x0003003eu, 0x0000125eu, 0x00001263u, 0x00050051u, 0x00000006u, 0x00001264u, 0x0000073eu, 0x00000002u, 0x0003003eu, 0x0000125fu, 0x00001264u, 0x00050051u, 0x00000008u, 0x00001265u, 0x0000073eu, 0x00000003u, 0x0003003eu, 0x00001260u, 0x00001265u, 0x00050051u, 0x00000008u, 0x00001266u, 0x0000073eu, 0x00000004u, 0x0003003eu, 0x00001261u, 0x00001266u, 0x000500c7u, 0x00000006u, 0x00000742u, 0x00001264u, 0x000003b0u, 0x000500abu, 0x00000034u, 0x00000743u, 0x00000742u, 0x00000198u, 0x0003003eu, 0x0000073fu, 0x00000743u, 0x000500c7u, 0x00000006u, 0x00000747u, 0x00001264u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x00000748u, 0x00000747u, 0x00000198u, 0x0003003eu, 0x00000744u, 0x00000748u, 0x000500c7u, 0x00000006u, 0x0000074cu, 0x00001264u, 0x00000170u, 0x000500abu, 0x00000034u, 0x0000074du, 0x0000074cu, 0x00000198u, 0x0003003eu, 0x00000749u, 0x0000074du, 0x000500c7u, 0x00000006u, 0x00000751u, 0x00001264u, 0x000003f9u, 0x000500abu, 0x00000034u, 0x00000752u, 0x00000751u, 0x00000198u, 0x0003003eu, 0x0000074eu, 0x00000752u, 0x000500c7u, 0x00000006u, 0x00000757u, 0x00001264u, 0x00000756u, 0x000500abu, 0x00000034u, 0x00000758u, 0x00000757u, 0x00000198u, 0x0003003eu, 0x00000753u, 0x00000758u, 0x000500c7u, 0x00000006u, 0x0000075du, 0x00001264u, 0x0000075cu, 0x000500abu, 0x00000034u, 0x0000075eu, 0x0000075du, 0x00000198u, 0x0003003eu, 0x00000759u, 0x0000075eu, 0x000500c7u, 0x00000006u, 0x00000763u, 0x00001264u, 0x00000762u, 0x000500abu, 0x00000034u, 0x00000764u, 0x00000763u, 0x00000198u, 0x0003003eu, 0x0000075fu, 0x00000764u, 0x000500c7u, 0x00000006u, 0x00000769u, 0x00001264u, 0x00000768u, 0x000500abu, 0x00000034u, 0x0000076au, 0x00000769u, 0x00000198u, 0x0003003eu, 0x00000765u, 0x0000076au, 0x0003003eu, 0x0000076cu, 0x00000752u, 0x00050039u, 0x00000009u, 0x0000076eu, 0x0000008cu, 0x0000076cu, 0x0003003eu, 0x0000076bu, 0x0000076eu, 0x00050041u, 0x00000046u, 0x00000770u, 0x0000076bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000771u, 0x00000770u, 0x000500c2u, 0x00000008u, 0x00000772u, 0x00000771u, 0x000003bfu, 0x0003003eu, 0x0000076fu, 0x00000772u, 0x00040071u, 0x00000006u, 0x00000776u, 0x0000125bu, 0x0004007cu, 0x00000017u, 0x00000777u, 0x00000776u, 0x00040071u, 0x00000006u, 0x0000077au, 0x0000125cu, 0x0004007cu, 0x00000017u, 0x0000077bu, 0x0000077au, 0x00040071u, 0x00000006u, 0x0000077du, 0x00000772u, 0x0004007cu, 0x00000017u, 0x0000077eu, 0x0000077du, 0x00040071u, 0x00000006u, 0x00000781u, 0x00001266u, 0x0004007cu, 0x00000017u, 0x00000782u, 0x00000781u, 0x0003003eu, 0x00000786u, 0x0000071bu, 0x0003003eu, 0x00000788u, 0x00000777u, 0x0003003eu, 0x00000789u, 0x0000077bu, 0x0004003du, 0x0000000au, 0x0000078bu, 0x00000424u, 0x0003003eu, 0x0000078au, 0x0000078bu, 0x0004003du, 0x00000008u, 0x0000078du, 0x00000405u, 0x0003003eu, 0x0000078cu, 0x0000078du, 0x0003003eu, 0x0000078eu, 0x00000725u, 0x0003003eu, 0x00000790u, 0x0000077eu, 0x0003003eu, 0x00000791u, 0x00000748u, 0x0003003eu, 0x00000793u, 0x00000782u, 0x0003003eu, 0x00000794u, 0x00000743u, 0x0003003eu, 0x00000796u, 0x00000764u, 0x00120039u, 0x00000034u, 0x0000079bu, 0x00000056u, 0x00000786u, 0x00000788u, 0x00000789u, 0x0000078au, 0x0000078cu, 0x0000078eu, 0x00000790u, 0x00000791u, 0x00000793u, 0x00000794u, 0x00000796u, 0x00000798u, 0x00000799u, 0x0000079au, 0x0004003du, 0x00000017u, 0x0000079cu, 0x0000078eu, 0x0003003eu, 0x00000721u, 0x0000079cu, 0x0004003du, 0x00000034u, 0x0000079du, 0x00000798u, 0x0003003eu, 0x00000783u, 0x0000079du, 0x0004003du, 0x00000034u, 0x0000079eu, 0x00000799u, 0x0003003eu, 0x00000784u, 0x0000079eu, 0x0004003du, 0x00000036u, 0x0000079fu, 0x0000079au, 0x0003003eu, 0x00000785u, 0x0000079fu, 0x0003003eu, 0x00000773u, 0x0000079bu, 0x000300f7u, 0x000007a2u, 0x00000000u, 0x000400fau, 0x0000079bu, 0x000007a1u, 0x000007a2u, 0x000200f8u, 0x000007a1u, 0x000400a8u, 0x00000034u, 0x000007a4u, 0x00000764u, 0x000500abu, 0x00000034u, 0x000007a6u, 0x0000079cu, 0x000000abu, 0x000500a6u, 0x00000034u, 0x000007a7u, 0x000007a4u, 0x000007a6u, 0x000200f9u, 0x000007a2u, 0x000200f8u, 0x000007a2u, 0x000700f5u, 0x00000034u, 0x000007a8u, 0x0000079bu, 0x000000a2u, 0x000007a7u, 0x000007a1u, 0x000300f7u, 0x000007aau, 0x00000000u, 0x000400fau, 0x000007a8u, 0x000007a9u, 0x000007aau, 0x000200f8u, 0x000007a9u, 0x0004003du, 0x00000009u, 0x000007adu, 0x0000076bu, 0x00080050u, 0x00000031u, 0x000007b3u, 0x00000728u, 0x000007adu, 0x00001259u, 0x0000125au, 0x0000072bu, 0x0003003eu, 0x00001267u, 0x00000728u, 0x0003003eu, 0x00001268u, 0x000007adu, 0x0003003eu, 0x00001269u, 0x00001259u, 0x0003003eu, 0x0000126au, 0x0000125au, 0x0003003eu, 0x0000126bu, 0x0000072bu, 0x0003003eu, 0x000007b4u, 0x00001262u, 0x000300f7u, 0x000007b9u, 0x00000000u, 0x000400fau, 0x0000075eu, 0x000007b8u, 0x000007b9u, 0x000200f8u, 0x000007b8u, 0x0003003eu, 0x000007bau, 0x000007b3u, 0x0003003eu, 0x000007bcu, 0x00001262u, 0x0003003eu, 0x000007beu, 0x00000743u, 0x0003003eu, 0x000007c0u, 0x0000079du, 0x0003003eu, 0x000007c2u, 0x00000758u, 0x0003003eu, 0x000007c4u, 0x0000079eu, 0x0003003eu, 0x000007c6u, 0x0000079fu, 0x0003003eu, 0x000007c8u, 0x00000299u, 0x000c0039u, 0x0000001bu, 0x000007c9u, 0x00000041u, 0x000007bau, 0x000007bcu, 0x000007beu, 0x000007c0u, 0x000007c2u, 0x000007c4u, 0x000007c6u, 0x000007c8u, 0x0009004fu, 0x00000009u, 0x000007ccu, 0x00000728u, 0x000007c9u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001267u, 0x000007ccu, 0x0003003eu, 0x000007b4u, 0x00001263u, 0x000200f9u, 0x000007b9u, 0x000200f8u, 0x000007b9u, 0x000700f5u, 0x00000009u, 0x000019a8u, 0x00000728u, 0x000007a9u, 0x000007ccu, 0x000007b8u, 0x00070050u, 0x000019d3u, 0x000019d7u, 0x0000075eu, 0x0000075eu, 0x0000075eu, 0x0000075eu, 0x000600a9u, 0x00000009u, 0x000019d8u, 0x000019d7u, 0x00001263u, 0x00001262u, 0x00080050u, 0x00000031u, 0x0000127cu, 0x000019a8u, 0x000007adu, 0x00001259u, 0x0000125au, 0x0000072bu, 0x0003003eu, 0x000007d0u, 0x0000127cu, 0x0003003eu, 0x000007d2u, 0x000019d8u, 0x0003003eu, 0x000007d4u, 0x00000743u, 0x0003003eu, 0x000007d6u, 0x0000079du, 0x0003003eu, 0x000007d8u, 0x00000758u, 0x0003003eu, 0x000007dau, 0x0000079eu, 0x0003003eu, 0x000007dcu, 0x0000079fu, 0x0003003eu, 0x000007deu, 0x000002bcu, 0x000c0039u, 0x0000001bu, 0x000007dfu, 0x00000041u, 0x000007d0u, 0x000007d2u, 0x000007d4u, 0x000007d6u, 0x000007d8u, 0x000007dau, 0x000007dcu, 0x000007deu, 0x0003003eu, 0x000007cfu, 0x000007dfu, 0x000300f7u, 0x000007e2u, 0x00000000u, 0x000400fau, 0x0000076au, 0x000007e1u, 0x000007e2u, 0x000200f8u, 0x000007e1u, 0x00040071u, 0x000003acu, 0x000007e4u, 0x000007dfu, 0x0004007cu, 0x00000018u, 0x000007e5u, 0x000007e4u, 0x0003003eu, 0x000007e6u, 0x000007e5u, 0x0003003eu, 0x000007e7u, 0x00000720u, 0x00060039u, 0x0000001bu, 0x000007e9u, 0x0000001fu, 0x000007e6u, 0x000007e7u, 0x0003003eu, 0x000007cfu, 0x000007e9u, 0x000200f9u, 0x000007e2u, 0x000200f8u, 0x000007e2u, 0x000700f5u, 0x0000001bu, 0x000019bdu, 0x000007dfu, 0x000007b9u, 0x000007e9u, 0x000007e1u, 0x00040071u, 0x00000006u, 0x000007f0u, 0x00001265u, 0x0004007cu, 0x00000017u, 0x000007f1u, 0x000007f0u, 0x0003003eu, 0x000007f2u, 0x0000079cu, 0x0003003eu, 0x000007f4u, 0x0000077eu, 0x0003003eu, 0x000007f5u, 0x0000079du, 0x0003003eu, 0x000007f7u, 0x000007f1u, 0x00080039u, 0x00000017u, 0x000007f8u, 0x0000005du, 0x000007f2u, 0x000007f4u, 0x000007f5u, 0x000007f7u, 0x0003003eu, 0x000007eau, 0x000007f8u, 0x000500c4u, 0x00000017u, 0x000007fbu, 0x000007f8u, 0x000000c1u, 0x00040072u, 0x00000129u, 0x000007fcu, 0x000007fbu, 0x0004007cu, 0x00000008u, 0x000007fdu, 0x000007fcu, 0x00050051u, 0x00000008u, 0x000007feu, 0x000019bdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000007ffu, 0x000019bdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000800u, 0x000019bdu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000801u, 0x000007feu, 0x000007ffu, 0x00000800u, 0x000007fdu, 0x0003003eu, 0x00000802u, 0x00000801u, 0x00050039u, 0x00000002u, 0x00000803u, 0x00000090u, 0x00000802u, 0x000300f7u, 0x00000806u, 0x00000000u, 0x000400fau, 0x0000074du, 0x00000805u, 0x0000080fu, 0x000200f8u, 0x00000805u, 0x0003003eu, 0x00000807u, 0x0000071bu, 0x00050039u, 0x0000000au, 0x00000809u, 0x00000028u, 0x00000807u, 0x0003003eu, 0x00000424u, 0x00000809u, 0x0003003eu, 0x00000405u, 0x0000125cu, 0x0003003eu, 0x00000574u, 0x000002bcu, 0x000300f7u, 0x0000080du, 0x00000000u, 0x000400fau, 0x00000570u, 0x0000080cu, 0x0000080du, 0x000200f8u, 0x0000080cu, 0x00040039u, 0x00000002u, 0x0000080eu, 0x00000066u, 0x000200f9u, 0x0000080du, 0x000200f8u, 0x0000080du, 0x000200f9u, 0x00000806u, 0x000200f8u, 0x0000080fu, 0x000300f7u, 0x00000811u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000810u, 0x00000811u, 0x000200f8u, 0x00000810u, 0x00040039u, 0x00000002u, 0x00000812u, 0x00000064u, 0x000200f9u, 0x00000811u, 0x000200f8u, 0x00000811u, 0x000200f9u, 0x00000806u, 0x000200f8u, 0x00000806u, 0x000200f9u, 0x000007aau, 0x000200f8u, 0x000007aau, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00001a07u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x0000002eu, 0x00020011u, 0x0000003du, 0x00020011u, 0x0000003fu, 0x00020011u, 0x00000040u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000823u, 0x0000082eu, 0x000008aau, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x000000a6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000a6u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000a6u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000a6u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000a6u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000000a6u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000a6u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000000a6u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000000a6u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000a6u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000000a6u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000000a6u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000000a6u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x000000a6u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x000000a6u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000000a7u, 0x00000006u, 0x00000038u, 0x00040048u, 0x000000a8u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000a8u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000a8u, 0x00000002u, 0x00040047u, 0x000000aau, 0x00000022u, 0x00000001u, 0x00040047u, 0x000000aau, 0x00000021u, 0x00000002u, 0x00050048u, 0x000000e2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000e2u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000e2u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000e2u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000e2u, 0x00000004u, 0x00000023u, 0x0000000du, 0x00050048u, 0x000000e2u, 0x00000005u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x000000e2u, 0x00000006u, 0x00000023u, 0x0000000fu, 0x00040047u, 0x000000e3u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000000e4u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000e4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000e4u, 0x00000002u, 0x00040047u, 0x000000e6u, 0x00000022u, 0x00000001u, 0x00040047u, 0x000000e6u, 0x00000021u, 0x00000005u, 0x00040047u, 0x00000251u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000251u, 0x00000021u, 0x0000000au, 0x00040047u, 0x00000372u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000378u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000381u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000382u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000382u, 0x00000002u, 0x00040047u, 0x00000384u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000384u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000038fu, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000390u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000390u, 0x00000002u, 0x00040047u, 0x00000392u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000392u, 0x00000021u, 0x00000001u, 0x00040047u, 0x000003a2u, 0x00000006u, 0x00000002u, 0x00050048u, 0x000003a3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003a3u, 0x00000002u, 0x00040047u, 0x000003a5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003a5u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000003eeu, 0x00000006u, 0x00000004u, 0x00050048u, 0x000003efu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000003efu, 0x00000002u, 0x00040047u, 0x000003f1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000003f1u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000004a6u, 0x00000001u, 0x00000007u, 0x00040047u, 0x00000570u, 0x00000001u, 0x00000002u, 0x00040047u, 0x0000073bu, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000073cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000073cu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000073cu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x0000073du, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000073eu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000073eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000073eu, 0x00000002u, 0x00040047u, 0x00000740u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000740u, 0x00000021u, 0x00000006u, 0x00040047u, 0x00000823u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x0000082eu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000837u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00000838u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00000839u, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000083au, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00000842u, 0x00000001u, 0x00000005u, 0x00040047u, 0x00000847u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000848u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000848u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000848u, 0x00000002u, 0x00040047u, 0x0000084au, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000084au, 0x00000021u, 0x0000000cu, 0x00050048u, 0x0000084eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000084eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000084eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000084eu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000084eu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x0000084eu, 0x00000002u, 0x00040047u, 0x0000087bu, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000087cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000087cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000087cu, 0x00000002u, 0x00040047u, 0x0000087eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000087eu, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000885u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000886u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000886u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000886u, 0x00000002u, 0x00040047u, 0x00000888u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000888u, 0x00000021u, 0x0000000bu, 0x00040047u, 0x000008aau, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000008aeu, 0x00000006u, 0x00000001u, 0x00040048u, 0x000008afu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008afu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008afu, 0x00000002u, 0x00040047u, 0x000008b1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008b1u, 0x00000021u, 0x00000006u, 0x00040047u, 0x000008cdu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008ceu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008ceu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008ceu, 0x00000002u, 0x00040047u, 0x000008d0u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008d0u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008dbu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008dcu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008dcu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008dcu, 0x00000002u, 0x00040047u, 0x000008deu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008deu, 0x00000021u, 0x00000003u, 0x00040047u, 0x000008e9u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000008eau, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008eau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008eau, 0x00000002u, 0x00040047u, 0x000008ecu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008ecu, 0x00000021u, 0x00000004u, 0x00040047u, 0x000008f2u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000008f3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000008f3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000008f3u, 0x00000002u, 0x00040047u, 0x000008f5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000008f5u, 0x00000021u, 0x00000005u, 0x00040047u, 0x0000092eu, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000092fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000930u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000931u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000931u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000931u, 0x00000002u, 0x00040047u, 0x00000933u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000933u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000935u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000936u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000937u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000938u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000938u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000938u, 0x00000002u, 0x00040047u, 0x0000093au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000093au, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000093bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000093bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000093bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000093bu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000093bu, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x0000093bu, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000093bu, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000093bu, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000093bu, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000093bu, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000093bu, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x0000093cu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000093du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000093du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000093du, 0x00000002u, 0x00040047u, 0x0000093fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000093fu, 0x00000021u, 0x00000000u, 0x00050048u, 0x00000941u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000941u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000941u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000941u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000941u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000941u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000941u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000941u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000942u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000943u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000943u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000943u, 0x00000002u, 0x00040047u, 0x00000945u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000945u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000946u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000947u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000947u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000947u, 0x00000002u, 0x00040047u, 0x00000949u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000949u, 0x00000021u, 0x00000003u, 0x00050048u, 0x0000094au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000094au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000094au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000094au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000094au, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000094au, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000094au, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000094au, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000094bu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000094cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000094cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000094cu, 0x00000002u, 0x00040047u, 0x0000094eu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000094eu, 0x00000021u, 0x00000004u, 0x00050048u, 0x0000094fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000094fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000094fu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000094fu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000094fu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000094fu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000094fu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000094fu, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x0000094fu, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x0000094fu, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x0000094fu, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x0000094fu, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x0000094fu, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x0000094fu, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000950u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000951u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000951u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000951u, 0x00000002u, 0x00040047u, 0x00000953u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000953u, 0x00000021u, 0x00000007u, 0x00050048u, 0x00000955u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000955u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000955u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000955u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000955u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000955u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000955u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000955u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000955u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000956u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000957u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000957u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000957u, 0x00000002u, 0x00040047u, 0x00000959u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00000959u, 0x00000021u, 0x00000008u, 0x00050048u, 0x0000095au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000095au, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000095au, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000095au, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x0000095bu, 0x00000006u, 0x00000010u, 0x00040048u, 0x0000095cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000095cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000095cu, 0x00000002u, 0x00040047u, 0x0000095eu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000095eu, 0x00000021u, 0x00000009u, 0x00050048u, 0x0000095fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000095fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000095fu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000095fu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000960u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000960u, 0x00000002u, 0x00040047u, 0x00000962u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000962u, 0x00000021u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000008u, 0x00000000u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x00040015u, 0x0000000au, 0x00000010u, 0x00000000u, 0x00040015u, 0x0000000bu, 0x00000010u, 0x00000001u, 0x00040017u, 0x0000000cu, 0x0000000bu, 0x00000004u, 0x0011001eu, 0x0000000du, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x0000000au, 0x00000008u, 0x00000008u, 0x0000000cu, 0x00040021u, 0x0000000eu, 0x0000000du, 0x00000007u, 0x0009001eu, 0x00000012u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000013u, 0x00000012u, 0x00000007u, 0x00040015u, 0x00000017u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000018u, 0x00000017u, 0x00000003u, 0x00040020u, 0x00000019u, 0x00000007u, 0x00000018u, 0x00040020u, 0x0000001au, 0x00000007u, 0x00000017u, 0x00040017u, 0x0000001bu, 0x00000008u, 0x00000003u, 0x00050021u, 0x0000001cu, 0x0000001bu, 0x00000019u, 0x0000001au, 0x00040020u, 0x00000021u, 0x00000007u, 0x0000000au, 0x00040021u, 0x00000022u, 0x00000017u, 0x00000021u, 0x00040021u, 0x00000026u, 0x0000000au, 0x0000001au, 0x00040021u, 0x0000002au, 0x00000017u, 0x0000001au, 0x0007001eu, 0x00000031u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00040020u, 0x00000032u, 0x00000007u, 0x00000031u, 0x00040020u, 0x00000033u, 0x00000007u, 0x00000009u, 0x00020014u, 0x00000034u, 0x00040020u, 0x00000035u, 0x00000007u, 0x00000034u, 0x00040017u, 0x00000036u, 0x00000008u, 0x00000002u, 0x00040020u, 0x00000037u, 0x00000007u, 0x00000036u, 0x000b0021u, 0x00000038u, 0x0000001bu, 0x00000032u, 0x00000033u, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000037u, 0x00000035u, 0x00040020u, 0x00000046u, 0x00000007u, 0x00000008u, 0x00110021u, 0x00000047u, 0x00000034u, 0x0000001au, 0x0000001au, 0x0000001au, 0x00000021u, 0x00000046u, 0x0000001au, 0x0000001au, 0x00000035u, 0x0000001au, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000035u, 0x00000037u, 0x00070021u, 0x00000058u, 0x00000017u, 0x0000001au, 0x0000001au, 0x00000035u, 0x0000001au, 0x00050021u, 0x0000005fu, 0x00000002u, 0x00000007u, 0x00000007u, 0x00040017u, 0x00000074u, 0x00000006u, 0x00000002u, 0x00040020u, 0x00000075u, 0x00000007u, 0x00000074u, 0x00080021u, 0x00000076u, 0x00000002u, 0x00000075u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00050021u, 0x0000007eu, 0x00000002u, 0x00000075u, 0x00000007u, 0x00040021u, 0x0000008au, 0x00000009u, 0x00000035u, 0x00040021u, 0x0000008eu, 0x00000002u, 0x00000033u, 0x00040021u, 0x00000096u, 0x00000002u, 0x00000007u, 0x0006001eu, 0x0000009au, 0x00000009u, 0x00000017u, 0x00000008u, 0x00000008u, 0x00040020u, 0x0000009bu, 0x00000007u, 0x0000009au, 0x00070021u, 0x0000009cu, 0x00000002u, 0x0000001au, 0x0000001au, 0x00000007u, 0x0000009bu, 0x00040020u, 0x000000a3u, 0x00000006u, 0x0000000au, 0x0004002bu, 0x0000000au, 0x000000a5u, 0x00000000u, 0x0011001eu, 0x000000a6u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x0000000au, 0x00000008u, 0x00000008u, 0x0000000cu, 0x0003001du, 0x000000a7u, 0x000000a6u, 0x0003001eu, 0x000000a8u, 0x000000a7u, 0x00040020u, 0x000000a9u, 0x0000000cu, 0x000000a8u, 0x0004003bu, 0x000000a9u, 0x000000aau, 0x0000000cu, 0x0004002bu, 0x00000017u, 0x000000abu, 0x00000000u, 0x00040020u, 0x000000adu, 0x0000000cu, 0x000000a6u, 0x00040020u, 0x000000b0u, 0x00000007u, 0x0000000du, 0x0004002bu, 0x00000017u, 0x000000b5u, 0x00000001u, 0x0004002bu, 0x00000017u, 0x000000b8u, 0x00000002u, 0x0004002bu, 0x00000017u, 0x000000bbu, 0x00000003u, 0x0004002bu, 0x00000017u, 0x000000beu, 0x00000004u, 0x0004002bu, 0x00000017u, 0x000000c1u, 0x00000005u, 0x0004002bu, 0x00000017u, 0x000000c4u, 0x00000006u, 0x0004002bu, 0x00000017u, 0x000000c7u, 0x00000007u, 0x0004002bu, 0x00000017u, 0x000000cau, 0x00000008u, 0x0004002bu, 0x00000017u, 0x000000cdu, 0x00000009u, 0x0004002bu, 0x00000017u, 0x000000d0u, 0x0000000au, 0x0004002bu, 0x00000017u, 0x000000d3u, 0x0000000bu, 0x0004002bu, 0x00000017u, 0x000000d6u, 0x0000000cu, 0x0004002bu, 0x00000017u, 0x000000d9u, 0x0000000du, 0x0004002bu, 0x00000017u, 0x000000dcu, 0x0000000eu, 0x00040020u, 0x000000ddu, 0x00000007u, 0x0000000cu, 0x0009001eu, 0x000000e2u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x000000e3u, 0x000000e2u, 0x0003001eu, 0x000000e4u, 0x000000e3u, 0x00040020u, 0x000000e5u, 0x0000000cu, 0x000000e4u, 0x0004003bu, 0x000000e5u, 0x000000e6u, 0x0000000cu, 0x00040020u, 0x000000e8u, 0x0000000cu, 0x000000e2u, 0x00040020u, 0x000000ebu, 0x00000007u, 0x00000012u, 0x0006002cu, 0x00000018u, 0x00000101u, 0x000000abu, 0x000000bbu, 0x000000c4u, 0x0004002bu, 0x00000017u, 0x00000107u, 0x000000f8u, 0x0004002bu, 0x00000017u, 0x0000010cu, 0x000000ffu, 0x0006002cu, 0x00000018u, 0x0000010du, 0x0000010cu, 0x0000010cu, 0x0000010cu, 0x0004002bu, 0x00000017u, 0x0000010fu, 0x000000f7u, 0x0006002cu, 0x00000018u, 0x00000110u, 0x0000010fu, 0x0000010fu, 0x0000010fu, 0x00040017u, 0x00000111u, 0x00000034u, 0x00000003u, 0x0004002bu, 0x00000017u, 0x0000011au, 0x0000001fu, 0x00040015u, 0x00000129u, 0x00000008u, 0x00000001u, 0x00040017u, 0x0000012au, 0x00000129u, 0x00000003u, 0x0004002bu, 0x00000017u, 0x00000138u, 0x000007ffu, 0x0004002bu, 0x00000017u, 0x0000013fu, 0x00040000u, 0x0004002bu, 0x00000017u, 0x0000014bu, 0x0003ffffu, 0x0004002bu, 0x00000017u, 0x00000150u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000170u, 0x00000002u, 0x00040020u, 0x0000017au, 0x00000007u, 0x0000001bu, 0x0004002bu, 0x00000006u, 0x00000198u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000001bcu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000001c4u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000001cfu, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x000001eau, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000201u, 0x00000003u, 0x0004002bu, 0x00000008u, 0x00000211u, 0x0000003cu, 0x00040017u, 0x00000218u, 0x0000000bu, 0x00000003u, 0x00040020u, 0x00000219u, 0x00000007u, 0x00000218u, 0x00040017u, 0x0000021cu, 0x0000000au, 0x00000003u, 0x0004002bu, 0x0000000bu, 0x0000022au, 0x00000001u, 0x0004002bu, 0x0000000bu, 0x00000236u, 0x00000005u, 0x0004002bu, 0x0000000bu, 0x00000247u, 0x00000002u, 0x0004002bu, 0x0000000bu, 0x0000024bu, 0x000007ffu, 0x00090019u, 0x0000024fu, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000250u, 0x00000000u, 0x0000024fu, 0x0004003bu, 0x00000250u, 0x00000251u, 0x00000000u, 0x00040020u, 0x00000255u, 0x00000007u, 0x0000000bu, 0x00040017u, 0x0000025au, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000017u, 0x00000296u, 0x0000000fu, 0x0003002au, 0x00000034u, 0x00000299u, 0x0004002bu, 0x00000017u, 0x000002b1u, 0x00008000u, 0x0004002bu, 0x00000017u, 0x000002b7u, 0x00000010u, 0x00030029u, 0x00000034u, 0x000002bcu, 0x0004002bu, 0x00000017u, 0x000002bdu, 0x0000ffffu, 0x00040032u, 0x00000017u, 0x00000372u, 0x00000000u, 0x00040032u, 0x00000006u, 0x00000378u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000379u, 0x00000082u, 0x00000378u, 0x000001bcu, 0x0003001du, 0x00000381u, 0x00000008u, 0x0003001eu, 0x00000382u, 0x00000381u, 0x00040020u, 0x00000383u, 0x0000000cu, 0x00000382u, 0x0004003bu, 0x00000383u, 0x00000384u, 0x0000000cu, 0x00040020u, 0x00000387u, 0x0000000cu, 0x00000008u, 0x00040020u, 0x0000038au, 0x00000006u, 0x00000009u, 0x0004003bu, 0x0000038au, 0x0000038bu, 0x00000006u, 0x0003001du, 0x0000038fu, 0x00000008u, 0x0003001eu, 0x00000390u, 0x0000038fu, 0x00040020u, 0x00000391u, 0x0000000cu, 0x00000390u, 0x0004003bu, 0x00000391u, 0x00000392u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x00000399u, 0x000000c2u, 0x00000379u, 0x000001bcu, 0x00060034u, 0x00000006u, 0x0000039du, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x0003001du, 0x000003a2u, 0x0000000au, 0x0003001eu, 0x000003a3u, 0x000003a2u, 0x00040020u, 0x000003a4u, 0x0000000cu, 0x000003a3u, 0x0004003bu, 0x000003a4u, 0x000003a5u, 0x0000000cu, 0x00040020u, 0x000003a8u, 0x0000000cu, 0x0000000au, 0x00040017u, 0x000003acu, 0x00000006u, 0x00000003u, 0x00040020u, 0x000003adu, 0x00000007u, 0x000003acu, 0x0004002bu, 0x00000006u, 0x000003b0u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000003b7u, 0x000000f8u, 0x0004002bu, 0x00000008u, 0x000003bfu, 0x00000005u, 0x00060034u, 0x00000006u, 0x000003ceu, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x0004002bu, 0x00000006u, 0x000003ddu, 0x000000ffu, 0x00060034u, 0x00000006u, 0x000003e5u, 0x000000c2u, 0x00000379u, 0x00000170u, 0x00060034u, 0x00000006u, 0x000003e9u, 0x000000c2u, 0x00000378u, 0x000000b8u, 0x0003001du, 0x000003eeu, 0x00000006u, 0x0003001eu, 0x000003efu, 0x000003eeu, 0x00040020u, 0x000003f0u, 0x0000000cu, 0x000003efu, 0x0004003bu, 0x000003f0u, 0x000003f1u, 0x0000000cu, 0x00040020u, 0x000003f3u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x000003f8u, 0x00000018u, 0x0004002bu, 0x00000006u, 0x000003f9u, 0x00000010u, 0x0007002cu, 0x0000025au, 0x000003fau, 0x000003f8u, 0x000003f9u, 0x000003b0u, 0x00000198u, 0x0007002cu, 0x0000025au, 0x000003fcu, 0x000003ddu, 0x000003ddu, 0x000003ddu, 0x000003ddu, 0x00040020u, 0x00000404u, 0x00000006u, 0x00000008u, 0x0004003bu, 0x00000404u, 0x00000405u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x0000040bu, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000413u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000420u, 0x00000004u, 0x0004003bu, 0x000000a3u, 0x00000424u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x0000044du, 0x0000000au, 0x0004002bu, 0x00000006u, 0x00000453u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x0000045eu, 0x00000007u, 0x00040020u, 0x00000470u, 0x00000006u, 0x00000034u, 0x0004003bu, 0x00000470u, 0x00000471u, 0x00000006u, 0x00060034u, 0x00000006u, 0x00000475u, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x0004002bu, 0x0000000au, 0x0000047fu, 0x00000002u, 0x0004002bu, 0x0000000au, 0x00000485u, 0x00000003u, 0x00040032u, 0x00000017u, 0x000004a6u, 0x00000000u, 0x00060034u, 0x00000017u, 0x000004a7u, 0x000000c7u, 0x000004a6u, 0x000000b5u, 0x00060034u, 0x00000034u, 0x000004a8u, 0x000000abu, 0x000004a7u, 0x000000abu, 0x00060034u, 0x00000017u, 0x000004a9u, 0x000000c3u, 0x000004a6u, 0x000000b5u, 0x00060034u, 0x00000034u, 0x000004aau, 0x000000aau, 0x000004a9u, 0x000000abu, 0x00060034u, 0x00000034u, 0x000004abu, 0x000000a7u, 0x000004a8u, 0x000004aau, 0x0004002bu, 0x00000006u, 0x000004aeu, 0x00000048u, 0x00060034u, 0x00000006u, 0x000004d9u, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x00040020u, 0x000004ddu, 0x00000007u, 0x0000025au, 0x00060034u, 0x00000006u, 0x00000508u, 0x000000c2u, 0x00000378u, 0x000001bcu, 0x0004002bu, 0x0000000au, 0x0000050au, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x00000510u, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x0000052fu, 0x000000c2u, 0x00000378u, 0x000001bcu, 0x00060034u, 0x00000006u, 0x00000536u, 0x000000c2u, 0x00000378u, 0x000000b8u, 0x00060034u, 0x00000006u, 0x0000056au, 0x000000c2u, 0x00000378u, 0x00000170u, 0x0004002bu, 0x00000006u, 0x0000056cu, 0xffffffffu, 0x00030031u, 0x00000034u, 0x00000570u, 0x00050034u, 0x00000034u, 0x00000571u, 0x000000a8u, 0x00000570u, 0x0004003bu, 0x00000470u, 0x00000574u, 0x00000006u, 0x00060034u, 0x00000006u, 0x0000057bu, 0x000000c2u, 0x00000378u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x00000592u, 0x000000c2u, 0x00000378u, 0x000001bcu, 0x00040017u, 0x00000599u, 0x00000034u, 0x00000002u, 0x00060034u, 0x00000017u, 0x000005a0u, 0x000000c4u, 0x000000b5u, 0x000004a9u, 0x00060034u, 0x00000017u, 0x000005a1u, 0x00000082u, 0x000005a0u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x000005a2u, 0x00000080u, 0x000005a1u, 0x00000198u, 0x00040017u, 0x000005a6u, 0x00000017u, 0x00000002u, 0x00060034u, 0x00000006u, 0x000005acu, 0x00000080u, 0x000005a0u, 0x00000198u, 0x00040020u, 0x000005bcu, 0x00000006u, 0x00000006u, 0x0004003bu, 0x000005bcu, 0x000005bdu, 0x00000006u, 0x00060034u, 0x00000017u, 0x00000604u, 0x00000084u, 0x000005a0u, 0x000005a0u, 0x00060034u, 0x00000006u, 0x00000605u, 0x00000080u, 0x00000604u, 0x00000198u, 0x00060034u, 0x00000006u, 0x00000606u, 0x000000c2u, 0x00000378u, 0x000000b8u, 0x00060034u, 0x00000006u, 0x00000607u, 0x00000084u, 0x00000605u, 0x00000606u, 0x00060034u, 0x00000017u, 0x0000061bu, 0x00000082u, 0x000005a0u, 0x000000b5u, 0x00060034u, 0x00000006u, 0x0000061cu, 0x00000080u, 0x0000061bu, 0x00000198u, 0x00060034u, 0x00000006u, 0x00000625u, 0x00000080u, 0x000005a0u, 0x00000198u, 0x00060034u, 0x00000034u, 0x00000647u, 0x000000abu, 0x000004a9u, 0x000000abu, 0x00060034u, 0x00000034u, 0x00000648u, 0x000000a7u, 0x000004a8u, 0x00000647u, 0x0004002bu, 0x00000008u, 0x00000657u, 0x000000e0u, 0x0006002cu, 0x0000001bu, 0x00000662u, 0x000001eau, 0x000001eau, 0x000001eau, 0x0004002bu, 0x00000008u, 0x00000669u, 0x000000f8u, 0x00060034u, 0x00000034u, 0x0000067cu, 0x000000aau, 0x00000372u, 0x000000abu, 0x0007002cu, 0x00000009u, 0x00000689u, 0x000001eau, 0x000001eau, 0x000001eau, 0x000001eau, 0x0004002bu, 0x00000006u, 0x000006a2u, 0x000000e0u, 0x0004002bu, 0x00000006u, 0x000006fdu, 0x0000ffffu, 0x0004002bu, 0x00000017u, 0x0000072du, 0x000001ffu, 0x0004001cu, 0x0000073bu, 0x00000008u, 0x000003b0u, 0x0005001eu, 0x0000073cu, 0x00000009u, 0x00000009u, 0x0000073bu, 0x0003001du, 0x0000073du, 0x0000073cu, 0x0003001eu, 0x0000073eu, 0x0000073du, 0x00040020u, 0x0000073fu, 0x0000000cu, 0x0000073eu, 0x0004003bu, 0x0000073fu, 0x00000740u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000764u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x0000076au, 0x00000040u, 0x0004002bu, 0x00000006u, 0x00000770u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00000776u, 0x00000100u, 0x00040020u, 0x00000822u, 0x00000001u, 0x000003acu, 0x0004003bu, 0x00000822u, 0x00000823u, 0x00000001u, 0x00040020u, 0x00000824u, 0x00000001u, 0x00000006u, 0x00040020u, 0x0000082cu, 0x00000007u, 0x000005a6u, 0x0004003bu, 0x00000822u, 0x0000082eu, 0x00000001u, 0x00040032u, 0x00000017u, 0x00000837u, 0x00000400u, 0x00040032u, 0x00000006u, 0x00000838u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00000839u, 0x00000001u, 0x00060033u, 0x000003acu, 0x0000083au, 0x00000838u, 0x00000839u, 0x000001bcu, 0x00060034u, 0x00000006u, 0x0000083bu, 0x00000051u, 0x0000083au, 0x00000000u, 0x00060034u, 0x00000017u, 0x0000083cu, 0x00000080u, 0x0000083bu, 0x00000198u, 0x00060034u, 0x00000017u, 0x0000083du, 0x00000087u, 0x00000837u, 0x0000083cu, 0x00040032u, 0x00000017u, 0x00000842u, 0x00000100u, 0x0004002bu, 0x00000017u, 0x00000843u, 0x00000020u, 0x00060034u, 0x00000017u, 0x00000844u, 0x00000087u, 0x00000842u, 0x00000843u, 0x0003001du, 0x00000847u, 0x00000006u, 0x0003001eu, 0x00000848u, 0x00000847u, 0x00040020u, 0x00000849u, 0x0000000cu, 0x00000848u, 0x0004003bu, 0x00000849u, 0x0000084au, 0x0000000cu, 0x0007001eu, 0x0000084eu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000084fu, 0x00000009u, 0x0000084eu, 0x0004003bu, 0x0000084fu, 0x00000850u, 0x00000009u, 0x00040020u, 0x00000851u, 0x00000009u, 0x00000006u, 0x0003001du, 0x0000087bu, 0x00000006u, 0x0003001eu, 0x0000087cu, 0x0000087bu, 0x00040020u, 0x0000087du, 0x0000000cu, 0x0000087cu, 0x0004003bu, 0x0000087du, 0x0000087eu, 0x0000000cu, 0x0003001du, 0x00000885u, 0x00000006u, 0x0003001eu, 0x00000886u, 0x00000885u, 0x00040020u, 0x00000887u, 0x0000000cu, 0x00000886u, 0x0004003bu, 0x00000887u, 0x00000888u, 0x0000000cu, 0x00060034u, 0x00000006u, 0x000008a6u, 0x00000051u, 0x0000083au, 0x00000000u, 0x00060034u, 0x00000006u, 0x000008a7u, 0x00000051u, 0x0000083au, 0x00000001u, 0x00060034u, 0x00000006u, 0x000008a8u, 0x00000084u, 0x000008a6u, 0x000008a7u, 0x0004003bu, 0x00000824u, 0x000008aau, 0x00000001u, 0x0003001du, 0x000008aeu, 0x00000129u, 0x0003001eu, 0x000008afu, 0x000008aeu, 0x00040020u, 0x000008b0u, 0x0000000cu, 0x000008afu, 0x0004003bu, 0x000008b0u, 0x000008b1u, 0x0000000cu, 0x00040020u, 0x000008b3u, 0x0000000cu, 0x00000129u, 0x0004002bu, 0x00000017u, 0x000008bcu, 0x00000040u, 0x0003001du, 0x000008cdu, 0x00000006u, 0x0003001eu, 0x000008ceu, 0x000008cdu, 0x00040020u, 0x000008cfu, 0x0000000cu, 0x000008ceu, 0x0004003bu, 0x000008cfu, 0x000008d0u, 0x0000000cu, 0x0003001du, 0x000008dbu, 0x00000009u, 0x0003001eu, 0x000008dcu, 0x000008dbu, 0x00040020u, 0x000008ddu, 0x0000000cu, 0x000008dcu, 0x0004003bu, 0x000008ddu, 0x000008deu, 0x0000000cu, 0x00040020u, 0x000008e0u, 0x0000000cu, 0x00000009u, 0x0003001du, 0x000008e9u, 0x00000017u, 0x0003001eu, 0x000008eau, 0x000008e9u, 0x00040020u, 0x000008ebu, 0x0000000cu, 0x000008eau, 0x0004003bu, 0x000008ebu, 0x000008ecu, 0x0000000cu, 0x00040020u, 0x000008eeu, 0x0000000cu, 0x00000017u, 0x0003001du, 0x000008f2u, 0x00000008u, 0x0003001eu, 0x000008f3u, 0x000008f2u, 0x00040020u, 0x000008f4u, 0x0000000cu, 0x000008f3u, 0x0004003bu, 0x000008f4u, 0x000008f5u, 0x0000000cu, 0x0004002bu, 0x00000017u, 0x00000919u, 0x00000080u, 0x0004002bu, 0x00000017u, 0x0000091au, 0x00000100u, 0x0004002bu, 0x00000017u, 0x0000091bu, 0x00000200u, 0x0004002bu, 0x00000017u, 0x0000091cu, 0x00000400u, 0x0004002bu, 0x00000017u, 0x0000091du, 0x00000800u, 0x0004002bu, 0x00000017u, 0x0000091eu, 0x00001000u, 0x0004002bu, 0x00000017u, 0x0000091fu, 0x00002000u, 0x0004002bu, 0x00000017u, 0x00000920u, 0x00004000u, 0x0004002bu, 0x00000017u, 0x00000921u, 0x00010000u, 0x0004002bu, 0x00000017u, 0x00000922u, 0x00020000u, 0x0004002bu, 0x00000017u, 0x00000923u, 0x00080000u, 0x0004002bu, 0x00000017u, 0x00000924u, 0x00100000u, 0x0004002bu, 0x00000017u, 0x00000925u, 0x00200000u, 0x0004002bu, 0x00000017u, 0x00000926u, 0x00400000u, 0x0004002bu, 0x00000017u, 0x00000927u, 0x00800000u, 0x0004002bu, 0x00000017u, 0x00000928u, 0x01000000u, 0x0004002bu, 0x00000017u, 0x00000929u, 0x0000001au, 0x0004002bu, 0x00000017u, 0x0000092au, 0x10000000u, 0x0004002bu, 0x00000017u, 0x0000092bu, 0x20000000u, 0x0004002bu, 0x00000017u, 0x0000092cu, 0x40000000u, 0x0004002bu, 0x00000006u, 0x0000092du, 0x00000800u, 0x0004001cu, 0x0000092eu, 0x0000000au, 0x0000092du, 0x0003001eu, 0x0000092fu, 0x0000092eu, 0x0003001du, 0x00000930u, 0x0000092fu, 0x0003001eu, 0x00000931u, 0x00000930u, 0x00040020u, 0x00000932u, 0x0000000cu, 0x00000931u, 0x0004003bu, 0x00000932u, 0x00000933u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000934u, 0x00001000u, 0x0004001cu, 0x00000935u, 0x00000008u, 0x00000934u, 0x0003001eu, 0x00000936u, 0x00000935u, 0x0003001du, 0x00000937u, 0x00000936u, 0x0003001eu, 0x00000938u, 0x00000937u, 0x00040020u, 0x00000939u, 0x0000000cu, 0x00000938u, 0x0004003bu, 0x00000939u, 0x0000093au, 0x0000000cu, 0x000d001eu, 0x0000093bu, 0x00000017u, 0x00000017u, 0x00000017u, 0x0000000bu, 0x0000000bu, 0x00000017u, 0x00000017u, 0x00000017u, 0x0000000bu, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000093cu, 0x0000093bu, 0x0003001eu, 0x0000093du, 0x0000093cu, 0x00040020u, 0x0000093eu, 0x0000000cu, 0x0000093du, 0x0004003bu, 0x0000093eu, 0x0000093fu, 0x0000000cu, 0x00040017u, 0x00000940u, 0x00000017u, 0x00000004u, 0x000a001eu, 0x00000941u, 0x00000940u, 0x00000940u, 0x00000940u, 0x00000940u, 0x00000940u, 0x00000940u, 0x00000940u, 0x00000940u, 0x0003001du, 0x00000942u, 0x00000941u, 0x0003001eu, 0x00000943u, 0x00000942u, 0x00040020u, 0x00000944u, 0x0000000cu, 0x00000943u, 0x0004003bu, 0x00000944u, 0x00000945u, 0x0000000cu, 0x0003001du, 0x00000946u, 0x00000940u, 0x0003001eu, 0x00000947u, 0x00000946u, 0x00040020u, 0x00000948u, 0x0000000cu, 0x00000947u, 0x0004003bu, 0x00000948u, 0x00000949u, 0x0000000cu, 0x000a001eu, 0x0000094au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000017u, 0x00000017u, 0x00000017u, 0x0003001du, 0x0000094bu, 0x0000094au, 0x0003001eu, 0x0000094cu, 0x0000094bu, 0x00040020u, 0x0000094du, 0x0000000cu, 0x0000094cu, 0x0004003bu, 0x0000094du, 0x0000094eu, 0x0000000cu, 0x0010001eu, 0x0000094fu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000950u, 0x0000094fu, 0x0003001eu, 0x00000951u, 0x00000950u, 0x00040020u, 0x00000952u, 0x0000000cu, 0x00000951u, 0x0004003bu, 0x00000952u, 0x00000953u, 0x0000000cu, 0x00040017u, 0x00000954u, 0x0000000au, 0x00000004u, 0x000b001eu, 0x00000955u, 0x00000940u, 0x00000940u, 0x00000954u, 0x00000954u, 0x00000017u, 0x00000017u, 0x00000017u, 0x0000000bu, 0x0000000au, 0x0003001du, 0x00000956u, 0x00000955u, 0x0003001eu, 0x00000957u, 0x00000956u, 0x00040020u, 0x00000958u, 0x0000000cu, 0x00000957u, 0x0004003bu, 0x00000958u, 0x00000959u, 0x0000000cu, 0x0006001eu, 0x0000095au, 0x00000017u, 0x00000017u, 0x00000017u, 0x00000017u, 0x0003001du, 0x0000095bu, 0x0000095au, 0x0003001eu, 0x0000095cu, 0x0000095bu, 0x00040020u, 0x0000095du, 0x0000000cu, 0x0000095cu, 0x0004003bu, 0x0000095du, 0x0000095eu, 0x0000000cu, 0x0006001eu, 0x0000095fu, 0x00000017u, 0x00000017u, 0x00000017u, 0x00000006u, 0x0003001eu, 0x00000960u, 0x0000095fu, 0x00040020u, 0x00000961u, 0x00000002u, 0x00000960u, 0x0004003bu, 0x00000961u, 0x00000962u, 0x00000002u, 0x0004001cu, 0x00000963u, 0x00000008u, 0x000003f9u, 0x0004001cu, 0x00000964u, 0x00000963u, 0x00000170u, 0x0004002bu, 0x00000008u, 0x00000965u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000966u, 0x00000001u, 0x0004002bu, 0x00000008u, 0x00000967u, 0x00000007u, 0x0004002bu, 0x00000008u, 0x00000968u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000969u, 0x00000002u, 0x0013002cu, 0x00000963u, 0x0000096au, 0x000001eau, 0x00000965u, 0x00000966u, 0x00000967u, 0x00000968u, 0x00000969u, 0x000003bfu, 0x00000201u, 0x00000201u, 0x000003bfu, 0x00000969u, 0x00000968u, 0x00000967u, 0x00000966u, 0x00000965u, 0x000001eau, 0x0013002cu, 0x00000963u, 0x0000096bu, 0x000001eau, 0x00000968u, 0x00000966u, 0x000003bfu, 0x00000968u, 0x000001eau, 0x000003bfu, 0x00000966u, 0x00000201u, 0x00000967u, 0x00000969u, 0x00000965u, 0x00000967u, 0x00000201u, 0x00000965u, 0x00000969u, 0x0005002cu, 0x00000964u, 0x0000096cu, 0x0000096au, 0x0000096bu, 0x0003002eu, 0x00000009u, 0x000011eau, 0x0003002eu, 0x00000006u, 0x000011edu, 0x0003002eu, 0x00000008u, 0x000011f0u, 0x0003002eu, 0x0000000cu, 0x000011f1u, 0x00030001u, 0x0000001bu, 0x000012e0u, 0x00030001u, 0x00000008u, 0x000013d6u, 0x00030001u, 0x00000008u, 0x00001985u, 0x00030001u, 0x0000001bu, 0x0000199bu, 0x00030001u, 0x0000001bu, 0x000019c2u, 0x0006002cu, 0x000003acu, 0x000019f3u, 0x000003b7u, 0x000003b7u, 0x000003b7u, 0x0005002cu, 0x00000074u, 0x000019f4u, 0x000001c4u, 0x000001c4u, 0x0006002cu, 0x0000001bu, 0x000019f5u, 0x00000669u, 0x00000669u, 0x00000669u, 0x0006002cu, 0x00000018u, 0x000019f6u, 0x000000c7u, 0x000000c7u, 0x000000c7u, 0x0006002cu, 0x00000018u, 0x000019f7u, 0x00000107u, 0x00000107u, 0x00000107u, 0x0006002cu, 0x00000018u, 0x000019f8u, 0x000000cau, 0x000000cau, 0x000000cau, 0x0006002cu, 0x00000018u, 0x000019f9u, 0x0000011au, 0x0000011au, 0x0000011au, 0x0006002cu, 0x00000218u, 0x000019fau, 0x00000236u, 0x00000236u, 0x00000236u, 0x0006002cu, 0x0000001bu, 0x000019fbu, 0x000001cfu, 0x000001cfu, 0x000001cfu, 0x0006002cu, 0x00000218u, 0x000019fcu, 0x00000247u, 0x00000247u, 0x00000247u, 0x0006002cu, 0x00000218u, 0x000019fdu, 0x0000024bu, 0x0000024bu, 0x0000024bu, 0x00040017u, 0x000019ffu, 0x00000034u, 0x00000004u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000046u, 0x0000123eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000123du, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000123cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000123bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001235u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001234u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00001233u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001232u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001228u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001227u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001226u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001225u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001224u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000121au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001219u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001218u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001217u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001216u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001204u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001203u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001202u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001201u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001200u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011fau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011f8u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011f7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011f6u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011efu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000011eeu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011ecu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011ebu, 0x00000007u, 0x0004003bu, 0x000000ddu, 0x000011cau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011c9u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011c8u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000011c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011c6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011c5u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011c4u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011c3u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011c2u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011c1u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011c0u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011bfu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011beu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011bdu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011bcu, 0x00000007u, 0x0004003bu, 0x000000ddu, 0x000011abu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011aau, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000011a9u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000011a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000011a7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a6u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a5u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a4u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a3u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a2u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a1u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000011a0u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000119fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000119eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000119du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000118du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000118cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000118bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000118au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001189u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001188u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001187u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000117eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000117du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000117cu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000117bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000117au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001179u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001178u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x000000a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001141u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00001142u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001143u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00001144u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001145u, 0x00000007u, 0x0004003bu, 0x000004ddu, 0x00001051u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001052u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001053u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00001054u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001055u, 0x00000007u, 0x0004003bu, 0x000004ddu, 0x00001056u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001057u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001014u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00001015u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001016u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001017u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001018u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001019u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000101au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000101bu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000101cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000101du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdcu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000fddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fb4u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f9au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f9bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f9cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f9du, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000f9eu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f79u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000f7au, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f53u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f54u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f55u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000f56u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000f57u, 0x00000007u, 0x0005003bu, 0x00000035u, 0x00000e70u, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000017au, 0x00000e71u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000e72u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000e73u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000e74u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000e75u, 0x00000007u, 0x0004003bu, 0x00000219u, 0x00000e76u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000e77u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000e78u, 0x00000007u, 0x0005003bu, 0x00000035u, 0x00000d8du, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000017au, 0x00000d8eu, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000d8fu, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000d90u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d91u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000d92u, 0x00000007u, 0x0004003bu, 0x00000219u, 0x00000d93u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d94u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000d95u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d89u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d80u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d7du, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d65u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d66u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d67u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d68u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d69u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000d6au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca2u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000ca3u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca4u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca5u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca6u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000ca7u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca8u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000ca9u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000caau, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cabu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cacu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cadu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000caeu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cafu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000cb0u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cb1u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000cb2u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000cb3u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cb4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000cb5u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c80u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000c81u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000c82u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000c83u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b58u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b59u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b5au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b5bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b61u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b62u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b63u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b64u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b65u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b66u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b67u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b68u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b69u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b6au, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6bu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b6cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b6fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b70u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b71u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b72u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b73u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000b74u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000b75u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b76u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b77u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b78u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b79u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7au, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7bu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b7du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b7eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b80u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b82u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b83u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b84u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b85u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b86u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b87u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b88u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000b89u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b8bu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b8cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b8du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b8eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b8fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000b90u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b91u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000b92u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b93u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b94u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b95u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b96u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000b97u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b98u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000b99u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000b9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b20u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000b21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b23u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000ae7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ae8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ae9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000aeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000aebu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000aecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000aafu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000ab0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ab1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ab2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a26u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a2bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a2eu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a2fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000a30u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000a0eu, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000009abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009acu, 0x00000007u, 0x0004003bu, 0x000003adu, 0x000009adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009afu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000975u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000976u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000977u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000978u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000979u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000097au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000097bu, 0x00000007u, 0x0005003bu, 0x00000035u, 0x0000096fu, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000001au, 0x00000821u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000828u, 0x00000007u, 0x0004003bu, 0x0000082cu, 0x0000082du, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000832u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000840u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000846u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000085au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000085du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000860u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000863u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000866u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000871u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000087au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000884u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000895u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000089eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a4u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000008adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008d6u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000008feu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000900u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000902u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000909u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000090cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000090fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000912u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000915u, 0x00000007u, 0x000300f7u, 0x0000096du, 0x00000000u, 0x000300fbu, 0x00000198u, 0x0000096eu, 0x000200f8u, 0x0000096eu, 0x0003003eu, 0x000000a4u, 0x000000a5u, 0x00050041u, 0x00000824u, 0x00000825u, 0x00000823u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000826u, 0x00000825u, 0x0004007cu, 0x00000017u, 0x00000827u, 0x00000826u, 0x0003003eu, 0x00000821u, 0x00000827u, 0x00050041u, 0x00000824u, 0x00000829u, 0x00000823u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000082au, 0x00000829u, 0x0004007cu, 0x00000017u, 0x0000082bu, 0x0000082au, 0x0003003eu, 0x00000828u, 0x0000082bu, 0x0004003du, 0x000003acu, 0x0000082fu, 0x0000082eu, 0x0007004fu, 0x00000074u, 0x00000830u, 0x0000082fu, 0x0000082fu, 0x00000000u, 0x00000001u, 0x0004007cu, 0x000005a6u, 0x00000831u, 0x00000830u, 0x0003003eu, 0x0000082du, 0x00000831u, 0x00050041u, 0x0000001au, 0x00000833u, 0x0000082du, 0x00000198u, 0x0004003du, 0x00000017u, 0x00000834u, 0x00000833u, 0x00050041u, 0x0000001au, 0x00000835u, 0x0000082du, 0x000001bcu, 0x0004003du, 0x00000017u, 0x00000836u, 0x00000835u, 0x00050084u, 0x00000017u, 0x0000083eu, 0x00000836u, 0x0000083du, 0x00050080u, 0x00000017u, 0x0000083fu, 0x00000834u, 0x0000083eu, 0x0003003eu, 0x00000832u, 0x0000083fu, 0x00050084u, 0x00000017u, 0x00000845u, 0x0000083fu, 0x00000844u, 0x0003003eu, 0x00000840u, 0x00000845u, 0x00060041u, 0x000003f3u, 0x0000084cu, 0x0000084au, 0x000000abu, 0x0000083fu, 0x0004003du, 0x00000006u, 0x0000084du, 0x0000084cu, 0x00050041u, 0x00000851u, 0x00000852u, 0x00000850u, 0x000000beu, 0x0004003du, 0x00000006u, 0x00000853u, 0x00000852u, 0x000500c7u, 0x00000006u, 0x00000854u, 0x0000084du, 0x00000853u, 0x0003003eu, 0x00000846u, 0x00000854u, 0x000500aau, 0x00000034u, 0x00000856u, 0x00000854u, 0x00000198u, 0x000300f7u, 0x00000858u, 0x00000000u, 0x000400fau, 0x00000856u, 0x00000857u, 0x00000858u, 0x000200f8u, 0x00000857u, 0x0003003eu, 0x0000096fu, 0x000002bcu, 0x000200f9u, 0x0000096du, 0x000200f8u, 0x00000858u, 0x0004003du, 0x000003acu, 0x0000085bu, 0x00000823u, 0x0007004fu, 0x00000074u, 0x0000085cu, 0x0000085bu, 0x0000085bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000085au, 0x0000085cu, 0x00050041u, 0x00000851u, 0x0000085eu, 0x00000850u, 0x000000b8u, 0x0004003du, 0x00000006u, 0x0000085fu, 0x0000085eu, 0x0003003eu, 0x0000085du, 0x0000085fu, 0x00050041u, 0x00000851u, 0x00000861u, 0x00000850u, 0x000000bbu, 0x0004003du, 0x00000006u, 0x00000862u, 0x00000861u, 0x0003003eu, 0x00000860u, 0x00000862u, 0x00050041u, 0x00000851u, 0x00000864u, 0x00000850u, 0x000000abu, 0x0004003du, 0x00000006u, 0x00000865u, 0x00000864u, 0x0003003eu, 0x00000863u, 0x00000865u, 0x00050041u, 0x00000851u, 0x00000867u, 0x00000850u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x00000868u, 0x00000867u, 0x0003003eu, 0x00000866u, 0x00000868u, 0x0003003eu, 0x00000471u, 0x00000299u, 0x0003003eu, 0x00000574u, 0x00000299u, 0x0004003du, 0x00000074u, 0x0000097cu, 0x0000085au, 0x00050050u, 0x00000074u, 0x0000097fu, 0x0000085fu, 0x00000862u, 0x000500b0u, 0x00000599u, 0x00000980u, 0x0000097cu, 0x0000097fu, 0x0004009bu, 0x00000034u, 0x00000981u, 0x00000980u, 0x000300f7u, 0x00000982u, 0x00000000u, 0x000400fau, 0x00000981u, 0x00000983u, 0x00000982u, 0x000200f8u, 0x00000983u, 0x0004003du, 0x00000074u, 0x00000984u, 0x0000085au, 0x00050050u, 0x00000074u, 0x00000985u, 0x000005a2u, 0x000005a2u, 0x000500c7u, 0x00000074u, 0x00000986u, 0x00000984u, 0x00000985u, 0x0003003eu, 0x00000975u, 0x00000986u, 0x0004003du, 0x00000074u, 0x00000987u, 0x0000085au, 0x00050050u, 0x000005a6u, 0x00000988u, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x00000989u, 0x00000987u, 0x00000988u, 0x0003003eu, 0x0000085au, 0x00000989u, 0x00050041u, 0x00000007u, 0x0000098au, 0x00000975u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000098bu, 0x0000098au, 0x00050084u, 0x00000006u, 0x0000098cu, 0x0000098bu, 0x000005acu, 0x00050041u, 0x00000007u, 0x0000098du, 0x00000975u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000098eu, 0x0000098du, 0x00050080u, 0x00000006u, 0x0000098fu, 0x0000098cu, 0x0000098eu, 0x0003003eu, 0x00000976u, 0x0000098fu, 0x000500c2u, 0x00000006u, 0x00000992u, 0x0000085fu, 0x000004a9u, 0x00050041u, 0x00000007u, 0x00000993u, 0x0000085au, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000994u, 0x00000993u, 0x00050084u, 0x00000006u, 0x00000995u, 0x00000992u, 0x00000994u, 0x00050080u, 0x00000006u, 0x00000996u, 0x00000865u, 0x00000995u, 0x00050041u, 0x00000007u, 0x00000997u, 0x0000085au, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000998u, 0x00000997u, 0x00050080u, 0x00000006u, 0x00000999u, 0x00000996u, 0x00000998u, 0x0003003eu, 0x00000977u, 0x00000999u, 0x0003003eu, 0x000005bdu, 0x00000999u, 0x0003003eu, 0x00000978u, 0x00000999u, 0x0003003eu, 0x00000979u, 0x0000098fu, 0x000300f7u, 0x000009b0u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x000009b0u, 0x00000000u, 0x000009b1u, 0x00000001u, 0x000009b1u, 0x00000002u, 0x000009b2u, 0x00000003u, 0x000009b3u, 0x00000004u, 0x000009b4u, 0x000200f8u, 0x000009b4u, 0x000500c7u, 0x00000006u, 0x00000a01u, 0x00000999u, 0x000003e5u, 0x0003003eu, 0x00000978u, 0x00000a01u, 0x00050084u, 0x00000006u, 0x00000a03u, 0x0000098fu, 0x000003e9u, 0x00050080u, 0x00000006u, 0x00000a05u, 0x00000a01u, 0x00000a03u, 0x0003003eu, 0x00000978u, 0x00000a05u, 0x00060041u, 0x000003f3u, 0x00000a07u, 0x000003f1u, 0x000000abu, 0x00000a05u, 0x0004003du, 0x00000006u, 0x00000a08u, 0x00000a07u, 0x0003003eu, 0x000009afu, 0x00000a08u, 0x00070050u, 0x0000025au, 0x00000a0au, 0x00000a08u, 0x00000a08u, 0x00000a08u, 0x00000a08u, 0x000500c2u, 0x0000025au, 0x00000a0bu, 0x00000a0au, 0x000003fau, 0x000500c7u, 0x0000025au, 0x00000a0cu, 0x00000a0bu, 0x000003fcu, 0x00040071u, 0x00000009u, 0x00000a0du, 0x00000a0cu, 0x0003003eu, 0x0000038bu, 0x00000a0du, 0x000200f9u, 0x000009b0u, 0x000200f8u, 0x000009b3u, 0x000500c7u, 0x00000006u, 0x000009ebu, 0x00000999u, 0x00000399u, 0x0003003eu, 0x00000978u, 0x000009ebu, 0x00050084u, 0x00000006u, 0x000009edu, 0x0000098fu, 0x000003ceu, 0x00050080u, 0x00000006u, 0x000009efu, 0x000009ebu, 0x000009edu, 0x0003003eu, 0x00000978u, 0x000009efu, 0x000500c6u, 0x00000006u, 0x000009f1u, 0x000009efu, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000009f2u, 0x000003a5u, 0x000000abu, 0x000009f1u, 0x0004003du, 0x0000000au, 0x000009f3u, 0x000009f2u, 0x00040071u, 0x00000006u, 0x000009f4u, 0x000009f3u, 0x0003003eu, 0x000009aeu, 0x000009f4u, 0x000500c2u, 0x00000006u, 0x000009f6u, 0x000009f4u, 0x000003b0u, 0x00040071u, 0x00000008u, 0x000009f7u, 0x000009f6u, 0x00060050u, 0x0000001bu, 0x000009f8u, 0x000009f7u, 0x000009f7u, 0x000009f7u, 0x000500c7u, 0x00000006u, 0x000009fau, 0x000009f4u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x000009fbu, 0x000009fau, 0x00070050u, 0x00000009u, 0x000009ffu, 0x000009f7u, 0x000009f7u, 0x000009f7u, 0x000009fbu, 0x0003003eu, 0x0000038bu, 0x000009ffu, 0x000200f9u, 0x000009b0u, 0x000200f8u, 0x000009b2u, 0x000500c7u, 0x00000006u, 0x000009c8u, 0x00000999u, 0x00000399u, 0x0003003eu, 0x00000978u, 0x000009c8u, 0x00050084u, 0x00000006u, 0x000009cau, 0x0000098fu, 0x0000039du, 0x00050080u, 0x00000006u, 0x000009ccu, 0x000009c8u, 0x000009cau, 0x0003003eu, 0x00000978u, 0x000009ccu, 0x000500c6u, 0x00000006u, 0x000009ceu, 0x000009ccu, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000009cfu, 0x000003a5u, 0x000000abu, 0x000009ceu, 0x0004003du, 0x0000000au, 0x000009d0u, 0x000009cfu, 0x00040071u, 0x00000006u, 0x000009d1u, 0x000009d0u, 0x0003003eu, 0x000009acu, 0x000009d1u, 0x000500c2u, 0x00000006u, 0x000009d3u, 0x000009d1u, 0x000003b0u, 0x000500c2u, 0x00000006u, 0x000009d5u, 0x000009d1u, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x000009d7u, 0x000009d1u, 0x00000170u, 0x00060050u, 0x000003acu, 0x000009d8u, 0x000009d3u, 0x000009d5u, 0x000009d7u, 0x000500c7u, 0x000003acu, 0x000009dau, 0x000009d8u, 0x000019f3u, 0x0003003eu, 0x000009adu, 0x000009dau, 0x00040071u, 0x0000001bu, 0x000009dcu, 0x000009dau, 0x00060041u, 0x00000387u, 0x000009deu, 0x00000392u, 0x000000abu, 0x000009ccu, 0x0004003du, 0x00000008u, 0x000009dfu, 0x000009deu, 0x000500c4u, 0x00000008u, 0x000009e0u, 0x000009dfu, 0x000003bfu, 0x000500c7u, 0x00000006u, 0x000009e2u, 0x000009d1u, 0x000001bcu, 0x000500c4u, 0x00000006u, 0x000009e3u, 0x000009e2u, 0x000000c7u, 0x00040071u, 0x00000008u, 0x000009e4u, 0x000009e3u, 0x000500c5u, 0x00000008u, 0x000009e5u, 0x000009e0u, 0x000009e4u, 0x00050051u, 0x00000008u, 0x000009e6u, 0x000009dcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000009e7u, 0x000009dcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000009e8u, 0x000009dcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000009e9u, 0x000009e6u, 0x000009e7u, 0x000009e8u, 0x000009e5u, 0x0003003eu, 0x0000038bu, 0x000009e9u, 0x000200f9u, 0x000009b0u, 0x000200f8u, 0x000009b1u, 0x000500c7u, 0x00000006u, 0x000009b6u, 0x00000999u, 0x00000379u, 0x0003003eu, 0x00000978u, 0x000009b6u, 0x00050084u, 0x00000006u, 0x000009b8u, 0x0000098fu, 0x00000378u, 0x00050080u, 0x00000006u, 0x000009bau, 0x000009b6u, 0x000009b8u, 0x0003003eu, 0x00000978u, 0x000009bau, 0x000500c6u, 0x00000006u, 0x000009bcu, 0x000009bau, 0x000001c4u, 0x00060041u, 0x00000387u, 0x000009bdu, 0x00000384u, 0x000000abu, 0x000009bcu, 0x0004003du, 0x00000008u, 0x000009beu, 0x000009bdu, 0x0003003eu, 0x000009abu, 0x000009beu, 0x000500c2u, 0x00000006u, 0x000009c3u, 0x000009bau, 0x000000b5u, 0x00060041u, 0x00000387u, 0x000009c4u, 0x00000392u, 0x000000abu, 0x000009c3u, 0x0004003du, 0x00000008u, 0x000009c5u, 0x000009c4u, 0x00070050u, 0x00000009u, 0x000009c6u, 0x000009beu, 0x000009beu, 0x000009beu, 0x000009c5u, 0x0003003eu, 0x0000038bu, 0x000009c6u, 0x000200f9u, 0x000009b0u, 0x000200f8u, 0x000009b0u, 0x0004003du, 0x00000006u, 0x000009a2u, 0x00000993u, 0x00050084u, 0x00000006u, 0x000009a3u, 0x00000992u, 0x000009a2u, 0x00050080u, 0x00000006u, 0x000009a4u, 0x00000868u, 0x000009a3u, 0x0004003du, 0x00000006u, 0x000009a6u, 0x00000997u, 0x00050080u, 0x00000006u, 0x000009a7u, 0x000009a4u, 0x000009a6u, 0x0003003eu, 0x00000977u, 0x000009a7u, 0x0003003eu, 0x0000097au, 0x000009a7u, 0x0003003eu, 0x0000097bu, 0x0000098fu, 0x000500c7u, 0x00000006u, 0x00000a10u, 0x000009a7u, 0x00000399u, 0x0003003eu, 0x0000097au, 0x00000a10u, 0x00050084u, 0x00000006u, 0x00000a12u, 0x0000098fu, 0x00000475u, 0x00050080u, 0x00000006u, 0x00000a14u, 0x00000a10u, 0x00000a12u, 0x0003003eu, 0x0000097au, 0x00000a14u, 0x000500c6u, 0x00000006u, 0x00000a16u, 0x00000a14u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x00000a17u, 0x000003a5u, 0x000000abu, 0x00000a16u, 0x0004003du, 0x0000000au, 0x00000a18u, 0x00000a17u, 0x0003003eu, 0x00000a0eu, 0x00000a18u, 0x000500c2u, 0x0000000au, 0x00000a1au, 0x00000a18u, 0x0000047fu, 0x0003003eu, 0x00000424u, 0x00000a1au, 0x00060041u, 0x00000387u, 0x00000a1cu, 0x00000392u, 0x000000abu, 0x00000a14u, 0x0004003du, 0x00000008u, 0x00000a1du, 0x00000a1cu, 0x000500c7u, 0x0000000au, 0x00000a1fu, 0x00000a18u, 0x00000485u, 0x000500c4u, 0x0000000au, 0x00000a20u, 0x00000a1fu, 0x0000047fu, 0x00040071u, 0x00000008u, 0x00000a21u, 0x00000a20u, 0x000500c5u, 0x00000008u, 0x00000a22u, 0x00000a1du, 0x00000a21u, 0x0003003eu, 0x00000405u, 0x00000a22u, 0x000200f9u, 0x00000982u, 0x000200f8u, 0x00000982u, 0x000200f9u, 0x0000086au, 0x000200f8u, 0x0000086au, 0x000700f5u, 0x00000006u, 0x000012a1u, 0x00000854u, 0x00000982u, 0x00000879u, 0x0000086du, 0x000700f5u, 0x0000001bu, 0x00001542u, 0x000012e0u, 0x00000982u, 0x00001541u, 0x0000086du, 0x000700f5u, 0x00000008u, 0x00001517u, 0x000013d6u, 0x00000982u, 0x00001516u, 0x0000086du, 0x000700f5u, 0x00000008u, 0x000014edu, 0x000013d6u, 0x00000982u, 0x000014ecu, 0x0000086du, 0x000700f5u, 0x0000001bu, 0x00001410u, 0x000012e0u, 0x00000982u, 0x0000140fu, 0x0000086du, 0x000700f5u, 0x00000008u, 0x000013f2u, 0x000013d6u, 0x00000982u, 0x000013f1u, 0x0000086du, 0x000700f5u, 0x00000008u, 0x000013d4u, 0x000013d6u, 0x00000982u, 0x000013d3u, 0x0000086du, 0x000700f5u, 0x0000001bu, 0x000012deu, 0x000012e0u, 0x00000982u, 0x000012ddu, 0x0000086du, 0x000500abu, 0x00000034u, 0x00000870u, 0x000012a1u, 0x00000198u, 0x000400f6u, 0x0000086cu, 0x0000086du, 0x00000000u, 0x000400fau, 0x00000870u, 0x0000086bu, 0x0000086cu, 0x000200f8u, 0x0000086bu, 0x0006000cu, 0x00000017u, 0x00000873u, 0x00000001u, 0x00000049u, 0x000012a1u, 0x0003003eu, 0x00000871u, 0x00000873u, 0x000500c4u, 0x00000017u, 0x00000875u, 0x000000b5u, 0x00000873u, 0x0004007cu, 0x00000006u, 0x00000876u, 0x00000875u, 0x000400c8u, 0x00000006u, 0x00000877u, 0x00000876u, 0x000500c7u, 0x00000006u, 0x00000879u, 0x000012a1u, 0x00000877u, 0x0003003eu, 0x00000846u, 0x00000879u, 0x00050080u, 0x00000017u, 0x00000881u, 0x00000845u, 0x00000873u, 0x00060041u, 0x000003f3u, 0x00000882u, 0x0000087eu, 0x000000abu, 0x00000881u, 0x0004003du, 0x00000006u, 0x00000883u, 0x00000882u, 0x0003003eu, 0x0000087au, 0x00000883u, 0x00060041u, 0x000003f3u, 0x0000088cu, 0x00000888u, 0x000000abu, 0x00000881u, 0x0004003du, 0x00000006u, 0x0000088du, 0x0000088cu, 0x0003003eu, 0x00000884u, 0x0000088du, 0x000200f9u, 0x0000088eu, 0x000200f8u, 0x0000088eu, 0x000700f5u, 0x0000001bu, 0x00001541u, 0x00001542u, 0x0000086bu, 0x00001965u, 0x00000891u, 0x000700f5u, 0x00000008u, 0x00001516u, 0x00001517u, 0x0000086bu, 0x0000194au, 0x00000891u, 0x000700f5u, 0x00000008u, 0x000014ecu, 0x000014edu, 0x0000086bu, 0x0000192fu, 0x00000891u, 0x000700f5u, 0x0000001bu, 0x0000140fu, 0x00001410u, 0x0000086bu, 0x00001907u, 0x00000891u, 0x000700f5u, 0x00000008u, 0x000013f1u, 0x000013f2u, 0x0000086bu, 0x000018dfu, 0x00000891u, 0x000700f5u, 0x00000008u, 0x000013d3u, 0x000013d4u, 0x0000086bu, 0x000018b7u, 0x00000891u, 0x000700f5u, 0x0000001bu, 0x000012ddu, 0x000012deu, 0x0000086bu, 0x00001879u, 0x00000891u, 0x000700f5u, 0x00000006u, 0x000012cfu, 0x00000883u, 0x0000086bu, 0x00000908u, 0x00000891u, 0x000700f5u, 0x00000006u, 0x000012cdu, 0x0000088du, 0x0000086bu, 0x0000089du, 0x00000891u, 0x000500abu, 0x00000034u, 0x00000894u, 0x000012cdu, 0x00000198u, 0x000400f6u, 0x00000890u, 0x00000891u, 0x00000000u, 0x000400fau, 0x00000894u, 0x0000088fu, 0x00000890u, 0x000200f8u, 0x0000088fu, 0x0006000cu, 0x00000017u, 0x00000897u, 0x00000001u, 0x00000049u, 0x000012cdu, 0x0003003eu, 0x00000895u, 0x00000897u, 0x000500c4u, 0x00000017u, 0x00000899u, 0x000000b5u, 0x00000897u, 0x0004007cu, 0x00000006u, 0x0000089au, 0x00000899u, 0x000400c8u, 0x00000006u, 0x0000089bu, 0x0000089au, 0x000500c7u, 0x00000006u, 0x0000089du, 0x000012cdu, 0x0000089bu, 0x0003003eu, 0x00000884u, 0x0000089du, 0x00050084u, 0x00000017u, 0x000008a1u, 0x00000843u, 0x00000873u, 0x00050080u, 0x00000017u, 0x000008a2u, 0x00000897u, 0x000008a1u, 0x0004007cu, 0x00000006u, 0x000008a3u, 0x000008a2u, 0x0003003eu, 0x0000089eu, 0x000008a3u, 0x00050084u, 0x00000006u, 0x000008a9u, 0x000012cfu, 0x000008a8u, 0x0004003du, 0x00000006u, 0x000008abu, 0x000008aau, 0x00050080u, 0x00000006u, 0x000008acu, 0x000008a9u, 0x000008abu, 0x0003003eu, 0x000008a4u, 0x000008acu, 0x00060041u, 0x000008b3u, 0x000008b4u, 0x000008b1u, 0x000000abu, 0x000008acu, 0x0004003du, 0x00000129u, 0x000008b5u, 0x000008b4u, 0x00040072u, 0x00000017u, 0x000008b6u, 0x000008b5u, 0x0003003eu, 0x000008adu, 0x000008b6u, 0x000500afu, 0x00000034u, 0x000008b8u, 0x000008b6u, 0x000000abu, 0x000300f7u, 0x000008bau, 0x00000000u, 0x000400fau, 0x000008b8u, 0x000008b9u, 0x000008bau, 0x000200f8u, 0x000008b9u, 0x000500c7u, 0x00000017u, 0x000008bdu, 0x000008b6u, 0x000008bcu, 0x000500abu, 0x00000034u, 0x000008beu, 0x000008bdu, 0x000000abu, 0x000300f7u, 0x000008c0u, 0x00000000u, 0x000400fau, 0x000008beu, 0x000008bfu, 0x000008c6u, 0x000200f8u, 0x000008c6u, 0x000500c7u, 0x00000017u, 0x000008c8u, 0x000008b6u, 0x00000843u, 0x000500abu, 0x00000034u, 0x000008c9u, 0x000008c8u, 0x000000abu, 0x000300f7u, 0x000008cbu, 0x00000000u, 0x000400fau, 0x000008c9u, 0x000008cau, 0x000008d9u, 0x000200f8u, 0x000008d9u, 0x00060041u, 0x000008e0u, 0x000008e1u, 0x000008deu, 0x000000abu, 0x000008acu, 0x0004003du, 0x00000009u, 0x000008e2u, 0x000008e1u, 0x00050051u, 0x00000008u, 0x000008e3u, 0x000008e2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000008e4u, 0x000008e2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000008e5u, 0x000008e2u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000008e6u, 0x000008e2u, 0x00000003u, 0x0003003eu, 0x00001232u, 0x000008e2u, 0x00060041u, 0x000008eeu, 0x000008efu, 0x000008ecu, 0x000000abu, 0x000008acu, 0x0004003du, 0x00000017u, 0x000008f0u, 0x000008efu, 0x0003003eu, 0x00001233u, 0x000008f0u, 0x00060041u, 0x00000387u, 0x000008f7u, 0x000008f5u, 0x000000abu, 0x000008acu, 0x0004003du, 0x00000008u, 0x000008f8u, 0x000008f7u, 0x0003003eu, 0x00001235u, 0x000008f8u, 0x00040072u, 0x00000129u, 0x000008fbu, 0x000008b6u, 0x0004007cu, 0x00000008u, 0x000008fcu, 0x000008fbu, 0x0003003eu, 0x00001234u, 0x000008fcu, 0x0003003eu, 0x000008feu, 0x00000827u, 0x0003003eu, 0x00000900u, 0x0000082bu, 0x0003003eu, 0x00000902u, 0x000008a3u, 0x00070050u, 0x0000009au, 0x0000123au, 0x000008e2u, 0x000008f0u, 0x000008fcu, 0x000008f8u, 0x0003003eu, 0x0000123bu, 0x000008e2u, 0x0003003eu, 0x0000123cu, 0x000008f0u, 0x0003003eu, 0x0000123du, 0x000008fcu, 0x0003003eu, 0x0000123eu, 0x000008f8u, 0x000500c3u, 0x00000017u, 0x00000b9du, 0x000008f0u, 0x000000cdu, 0x0003003eu, 0x00000b58u, 0x00000b9du, 0x000500c7u, 0x00000017u, 0x00000ba0u, 0x000008f0u, 0x0000072du, 0x0003003eu, 0x00000b59u, 0x00000ba0u, 0x00040071u, 0x00000006u, 0x00000ba3u, 0x000008fcu, 0x0004007cu, 0x00000017u, 0x00000ba4u, 0x00000ba3u, 0x0003003eu, 0x00000b5au, 0x00000ba4u, 0x0003003eu, 0x00000b5bu, 0x000008e2u, 0x0003003eu, 0x00000b5cu, 0x000008f8u, 0x00080041u, 0x00000387u, 0x00000baau, 0x00000740u, 0x000000abu, 0x000008a3u, 0x000000abu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000babu, 0x00000baau, 0x00040071u, 0x00000006u, 0x00000bacu, 0x00000babu, 0x0003003eu, 0x00000b5du, 0x00000bacu, 0x0003003eu, 0x00000b5fu, 0x000008a3u, 0x00060041u, 0x000000adu, 0x00000c4bu, 0x000000aau, 0x000000abu, 0x000008a3u, 0x0004003du, 0x000000a6u, 0x00000c4cu, 0x00000c4bu, 0x00050051u, 0x00000009u, 0x00000c4du, 0x00000c4cu, 0x00000000u, 0x0003003eu, 0x0000119du, 0x00000c4du, 0x00050051u, 0x00000009u, 0x00000c4fu, 0x00000c4cu, 0x00000001u, 0x0003003eu, 0x0000119eu, 0x00000c4fu, 0x00050051u, 0x00000009u, 0x00000c51u, 0x00000c4cu, 0x00000002u, 0x0003003eu, 0x0000119fu, 0x00000c51u, 0x00050051u, 0x00000009u, 0x00000c53u, 0x00000c4cu, 0x00000003u, 0x0003003eu, 0x000011a0u, 0x00000c53u, 0x00050051u, 0x00000009u, 0x00000c55u, 0x00000c4cu, 0x00000004u, 0x0003003eu, 0x000011a1u, 0x00000c55u, 0x00050051u, 0x00000009u, 0x00000c57u, 0x00000c4cu, 0x00000005u, 0x0003003eu, 0x000011a2u, 0x00000c57u, 0x00050051u, 0x00000009u, 0x00000c59u, 0x00000c4cu, 0x00000006u, 0x0003003eu, 0x000011a3u, 0x00000c59u, 0x00050051u, 0x00000009u, 0x00000c5bu, 0x00000c4cu, 0x00000007u, 0x0003003eu, 0x000011a4u, 0x00000c5bu, 0x00050051u, 0x00000009u, 0x00000c5du, 0x00000c4cu, 0x00000008u, 0x0003003eu, 0x000011a5u, 0x00000c5du, 0x00050051u, 0x00000009u, 0x00000c5fu, 0x00000c4cu, 0x00000009u, 0x0003003eu, 0x000011a6u, 0x00000c5fu, 0x00050051u, 0x00000006u, 0x00000c61u, 0x00000c4cu, 0x0000000au, 0x0003003eu, 0x000011a7u, 0x00000c61u, 0x00050051u, 0x0000000au, 0x00000c63u, 0x00000c4cu, 0x0000000bu, 0x0003003eu, 0x000011a8u, 0x00000c63u, 0x00050051u, 0x00000008u, 0x00000c65u, 0x00000c4cu, 0x0000000cu, 0x0003003eu, 0x000011a9u, 0x00000c65u, 0x00050051u, 0x00000008u, 0x00000c67u, 0x00000c4cu, 0x0000000du, 0x0003003eu, 0x000011aau, 0x00000c67u, 0x00050051u, 0x0000000cu, 0x00000c69u, 0x00000c4cu, 0x0000000eu, 0x0003003eu, 0x000011abu, 0x00000c69u, 0x00120050u, 0x0000000du, 0x000011bbu, 0x00000c4du, 0x00000c4fu, 0x00000c51u, 0x00000c53u, 0x00000c55u, 0x00000c57u, 0x00000c59u, 0x00000c5bu, 0x00000c5du, 0x00000c5fu, 0x00000c61u, 0x00000c63u, 0x00000c65u, 0x00000c67u, 0x00000c69u, 0x0003003eu, 0x000011bcu, 0x00000c4du, 0x0003003eu, 0x000011bdu, 0x00000c4fu, 0x0003003eu, 0x000011beu, 0x00000c51u, 0x0003003eu, 0x000011bfu, 0x00000c53u, 0x0003003eu, 0x000011c0u, 0x00000c55u, 0x0003003eu, 0x000011c1u, 0x00000c57u, 0x0003003eu, 0x000011c2u, 0x00000c59u, 0x0003003eu, 0x000011c3u, 0x00000c5bu, 0x0003003eu, 0x000011c4u, 0x00000c5du, 0x0003003eu, 0x000011c5u, 0x00000c5fu, 0x0003003eu, 0x000011c6u, 0x00000c61u, 0x0003003eu, 0x000011c7u, 0x00000c63u, 0x0003003eu, 0x000011c8u, 0x00000c65u, 0x0003003eu, 0x000011c9u, 0x00000c67u, 0x0003003eu, 0x000011cau, 0x00000c69u, 0x0003003eu, 0x000011ebu, 0x00000c5du, 0x0003003eu, 0x000011ecu, 0x00000c5fu, 0x0003003eu, 0x000011eeu, 0x00000c63u, 0x0003003eu, 0x000011efu, 0x00000c65u, 0x0003003eu, 0x00000b61u, 0x00000bacu, 0x00060041u, 0x000000e8u, 0x00000c6fu, 0x000000e6u, 0x000000abu, 0x00000bacu, 0x0004003du, 0x000000e2u, 0x00000c70u, 0x00000c6fu, 0x00050051u, 0x00000009u, 0x00000c71u, 0x00000c70u, 0x00000000u, 0x0003003eu, 0x00001178u, 0x00000c71u, 0x00050051u, 0x00000009u, 0x00000c73u, 0x00000c70u, 0x00000001u, 0x0003003eu, 0x00001179u, 0x00000c73u, 0x00050051u, 0x00000006u, 0x00000c75u, 0x00000c70u, 0x00000002u, 0x0003003eu, 0x0000117au, 0x00000c75u, 0x00050051u, 0x00000008u, 0x00000c77u, 0x00000c70u, 0x00000003u, 0x0003003eu, 0x0000117bu, 0x00000c77u, 0x00050051u, 0x00000008u, 0x00000c79u, 0x00000c70u, 0x00000004u, 0x0003003eu, 0x0000117cu, 0x00000c79u, 0x00050051u, 0x00000008u, 0x00000c7bu, 0x00000c70u, 0x00000005u, 0x0003003eu, 0x0000117du, 0x00000c7bu, 0x00050051u, 0x00000008u, 0x00000c7du, 0x00000c70u, 0x00000006u, 0x0003003eu, 0x0000117eu, 0x00000c7du, 0x000a0050u, 0x00000012u, 0x00001186u, 0x00000c71u, 0x00000c73u, 0x00000c75u, 0x00000c77u, 0x00000c79u, 0x00000c7bu, 0x00000c7du, 0x0003003eu, 0x00001187u, 0x00000c71u, 0x0003003eu, 0x00001188u, 0x00000c73u, 0x0003003eu, 0x00001189u, 0x00000c75u, 0x0003003eu, 0x0000118au, 0x00000c77u, 0x0003003eu, 0x0000118bu, 0x00000c79u, 0x0003003eu, 0x0000118cu, 0x00000c7bu, 0x0003003eu, 0x0000118du, 0x00000c7du, 0x0003003eu, 0x000011f6u, 0x00000c71u, 0x0003003eu, 0x000011f7u, 0x00000c73u, 0x0003003eu, 0x000011f8u, 0x00000c75u, 0x0003003eu, 0x000011f9u, 0x00000c77u, 0x0003003eu, 0x000011fau, 0x00000c79u, 0x000500c7u, 0x00000006u, 0x00000bb3u, 0x00000c75u, 0x000003b0u, 0x000500abu, 0x00000034u, 0x00000bb4u, 0x00000bb3u, 0x00000198u, 0x0003003eu, 0x00000b62u, 0x00000bb4u, 0x000500c7u, 0x00000006u, 0x00000bb7u, 0x00000c75u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x00000bb8u, 0x00000bb7u, 0x00000198u, 0x0003003eu, 0x00000b63u, 0x00000bb8u, 0x000500c7u, 0x00000006u, 0x00000bbbu, 0x00000c75u, 0x00000170u, 0x000500abu, 0x00000034u, 0x00000bbcu, 0x00000bbbu, 0x00000198u, 0x0003003eu, 0x00000b64u, 0x00000bbcu, 0x000500c7u, 0x00000006u, 0x00000bbfu, 0x00000c75u, 0x000003f9u, 0x000500abu, 0x00000034u, 0x00000bc0u, 0x00000bbfu, 0x00000198u, 0x0003003eu, 0x00000b65u, 0x00000bc0u, 0x000500c7u, 0x00000006u, 0x00000bc3u, 0x00000c75u, 0x00000764u, 0x000500abu, 0x00000034u, 0x00000bc4u, 0x00000bc3u, 0x00000198u, 0x0003003eu, 0x00000b66u, 0x00000bc4u, 0x000500c7u, 0x00000006u, 0x00000bc7u, 0x00000c75u, 0x0000076au, 0x000500abu, 0x00000034u, 0x00000bc8u, 0x00000bc7u, 0x00000198u, 0x0003003eu, 0x00000b67u, 0x00000bc8u, 0x000500c7u, 0x00000006u, 0x00000bcbu, 0x00000c75u, 0x00000770u, 0x000500abu, 0x00000034u, 0x00000bccu, 0x00000bcbu, 0x00000198u, 0x0003003eu, 0x00000b68u, 0x00000bccu, 0x000500c7u, 0x00000006u, 0x00000bcfu, 0x00000c75u, 0x00000776u, 0x000500abu, 0x00000034u, 0x00000bd0u, 0x00000bcfu, 0x00000198u, 0x0003003eu, 0x00000b69u, 0x00000bd0u, 0x0003003eu, 0x00000b6bu, 0x00000bc0u, 0x000300f7u, 0x00000c85u, 0x00000000u, 0x000400fau, 0x00000bc0u, 0x00000c86u, 0x00000c87u, 0x000200f8u, 0x00000c87u, 0x0003003eu, 0x00000c81u, 0x00000657u, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c86u, 0x00050041u, 0x00000404u, 0x00000c88u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000c89u, 0x00000c88u, 0x000500c7u, 0x00000008u, 0x00000c8au, 0x00000c89u, 0x00000657u, 0x0003003eu, 0x00000c81u, 0x00000c8au, 0x000200f9u, 0x00000c85u, 0x000200f8u, 0x00000c85u, 0x000700f5u, 0x00000008u, 0x000012dau, 0x00000c8au, 0x00000c86u, 0x00000657u, 0x00000c87u, 0x0003003eu, 0x00000c80u, 0x000012dau, 0x000300f7u, 0x00000c8cu, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000c8cu, 0x00000000u, 0x00000c8du, 0x00000001u, 0x00000c8eu, 0x00000002u, 0x00000c8fu, 0x00000003u, 0x00000c90u, 0x00000004u, 0x00000c91u, 0x000200f8u, 0x00000c91u, 0x0004003du, 0x00000009u, 0x00000c9au, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c9bu, 0x00000c9au, 0x00000c9au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000c82u, 0x00000c9bu, 0x000200f9u, 0x00000c8cu, 0x000200f8u, 0x00000c90u, 0x0004003du, 0x00000009u, 0x00000c98u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c99u, 0x00000c98u, 0x00000c98u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c82u, 0x00000c99u, 0x000200f9u, 0x00000c8cu, 0x000200f8u, 0x00000c8fu, 0x0004003du, 0x00000009u, 0x00000c94u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c95u, 0x00000c94u, 0x00000c94u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000001bu, 0x00000c97u, 0x00000c95u, 0x000019f5u, 0x0003003eu, 0x00000c82u, 0x00000c97u, 0x000200f9u, 0x00000c8cu, 0x000200f8u, 0x00000c8eu, 0x0004003du, 0x00000009u, 0x00000c92u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000c93u, 0x00000c92u, 0x00000c92u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000c82u, 0x00000c93u, 0x0003003eu, 0x00000c80u, 0x00000657u, 0x000200f9u, 0x00000c8cu, 0x000200f8u, 0x00000c8du, 0x0003003eu, 0x00000c82u, 0x00000662u, 0x0003003eu, 0x00000c80u, 0x00000657u, 0x000200f9u, 0x00000c8cu, 0x000200f8u, 0x00000c8cu, 0x000f00f5u, 0x00000008u, 0x000012e3u, 0x000012dau, 0x00000c85u, 0x00000657u, 0x00000c8du, 0x00000657u, 0x00000c8eu, 0x000012dau, 0x00000c8fu, 0x000012dau, 0x00000c90u, 0x000012dau, 0x00000c91u, 0x000f00f5u, 0x0000001bu, 0x000012dbu, 0x000012ddu, 0x00000c85u, 0x00000662u, 0x00000c8du, 0x00000c93u, 0x00000c8eu, 0x00000c97u, 0x00000c8fu, 0x00000c99u, 0x00000c90u, 0x00000c9bu, 0x00000c91u, 0x00050051u, 0x00000008u, 0x00000c9eu, 0x000012dbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c9fu, 0x000012dbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000ca0u, 0x000012dbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000ca1u, 0x00000c9eu, 0x00000c9fu, 0x00000ca0u, 0x000012e3u, 0x0003003eu, 0x00000c83u, 0x00000ca1u, 0x0003003eu, 0x00000b6au, 0x00000ca1u, 0x00050041u, 0x00000046u, 0x00000bd3u, 0x00000b6au, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000bd4u, 0x00000bd3u, 0x000500c2u, 0x00000008u, 0x00000bd5u, 0x00000bd4u, 0x000003bfu, 0x0003003eu, 0x00000b6cu, 0x00000bd5u, 0x00040071u, 0x00000006u, 0x00000bd8u, 0x00000c63u, 0x0004007cu, 0x00000017u, 0x00000bd9u, 0x00000bd8u, 0x00040071u, 0x00000006u, 0x00000bdcu, 0x00000c65u, 0x0004007cu, 0x00000017u, 0x00000bddu, 0x00000bdcu, 0x00040071u, 0x00000006u, 0x00000bdfu, 0x00000bd5u, 0x0004007cu, 0x00000017u, 0x00000be0u, 0x00000bdfu, 0x00040071u, 0x00000006u, 0x00000be3u, 0x00000c79u, 0x0004007cu, 0x00000017u, 0x00000be4u, 0x00000be3u, 0x0003003eu, 0x00000b71u, 0x00000b9du, 0x0003003eu, 0x00000b72u, 0x00000bd9u, 0x0003003eu, 0x00000b73u, 0x00000bddu, 0x0004003du, 0x0000000au, 0x00000be6u, 0x00000424u, 0x0003003eu, 0x00000b74u, 0x00000be6u, 0x0004003du, 0x00000008u, 0x00000be7u, 0x00000405u, 0x0003003eu, 0x00000b75u, 0x00000be7u, 0x0003003eu, 0x00000b76u, 0x00000ba4u, 0x0003003eu, 0x00000b77u, 0x00000be0u, 0x0003003eu, 0x00000b78u, 0x00000bb8u, 0x0003003eu, 0x00000b79u, 0x00000be4u, 0x0003003eu, 0x00000b7au, 0x00000bb4u, 0x0003003eu, 0x00000b7bu, 0x00000bccu, 0x00050080u, 0x00000017u, 0x00000cf8u, 0x00000ba4u, 0x00000be0u, 0x000500afu, 0x00000034u, 0x00000cf9u, 0x00000cf8u, 0x000000cau, 0x000300f7u, 0x00000cb7u, 0x00000000u, 0x000400fau, 0x00000bb8u, 0x00000cb8u, 0x00000cb9u, 0x000200f8u, 0x00000cb9u, 0x00050041u, 0x00000046u, 0x00000d4fu, 0x00000b7eu, 0x00000198u, 0x0003003eu, 0x00000d4fu, 0x000001eau, 0x00050082u, 0x00000017u, 0x00000d51u, 0x00000296u, 0x00000bddu, 0x0007000cu, 0x00000017u, 0x00000d52u, 0x00000001u, 0x00000027u, 0x00000d51u, 0x000000beu, 0x00040072u, 0x00000129u, 0x00000d53u, 0x00000d52u, 0x0004007cu, 0x00000008u, 0x00000d54u, 0x00000d53u, 0x00050041u, 0x00000046u, 0x00000d55u, 0x00000b7eu, 0x000001bcu, 0x0003003eu, 0x00000d55u, 0x00000d54u, 0x0003003eu, 0x00000cb4u, 0x00000cf9u, 0x000400a8u, 0x00000034u, 0x00000d5bu, 0x00000bb4u, 0x000300f7u, 0x00000d5cu, 0x00000000u, 0x000400fau, 0x00000d5bu, 0x00000d5du, 0x00000d5cu, 0x000200f8u, 0x00000d5du, 0x000400a8u, 0x00000034u, 0x00000d5fu, 0x00000cf9u, 0x000500a7u, 0x00000034u, 0x00000d61u, 0x00000d5fu, 0x00000bccu, 0x000200f9u, 0x00000d5cu, 0x000200f8u, 0x00000d5cu, 0x000700f5u, 0x00000034u, 0x00000d62u, 0x00000bb4u, 0x00000cb9u, 0x00000d61u, 0x00000d5du, 0x0003003eu, 0x00000b7cu, 0x00000d62u, 0x0003003eu, 0x00000b7du, 0x00000cf9u, 0x0003003eu, 0x00000cadu, 0x000002bcu, 0x000200f9u, 0x00000cb7u, 0x000200f8u, 0x00000cb8u, 0x0003003eu, 0x00000ca3u, 0x00000be6u, 0x00040071u, 0x00000006u, 0x00000d6cu, 0x00000be6u, 0x0004007cu, 0x00000017u, 0x00000d6du, 0x00000d6cu, 0x0003003eu, 0x00000d65u, 0x00000d6du, 0x000500c3u, 0x00000017u, 0x00000d6fu, 0x00000d6du, 0x000000d3u, 0x0003003eu, 0x00000d66u, 0x00000d6fu, 0x000500c7u, 0x00000017u, 0x00000d71u, 0x00000d6du, 0x00000138u, 0x0003003eu, 0x00000d67u, 0x00000d71u, 0x00050082u, 0x00000017u, 0x00000d73u, 0x000000c4u, 0x00000d6fu, 0x0007000cu, 0x00000017u, 0x00000d74u, 0x00000001u, 0x0000002au, 0x00000d73u, 0x000000abu, 0x0003003eu, 0x00000d68u, 0x00000d74u, 0x000500c3u, 0x00000017u, 0x00000d76u, 0x0000013fu, 0x00000d6fu, 0x00050082u, 0x00000017u, 0x00000d77u, 0x0000013fu, 0x00000d76u, 0x0003003eu, 0x00000d69u, 0x00000d77u, 0x000500c4u, 0x00000017u, 0x00000d7au, 0x00000d71u, 0x00000d74u, 0x00050080u, 0x00000017u, 0x00000d7cu, 0x00000d7au, 0x00000d77u, 0x0003003eu, 0x00000d6au, 0x00000d7cu, 0x0003003eu, 0x00000ca2u, 0x00000d7cu, 0x00040071u, 0x00000006u, 0x00000cbdu, 0x00000be7u, 0x0004007cu, 0x00000017u, 0x00000cbeu, 0x00000cbdu, 0x0003003eu, 0x00000ca5u, 0x00000cbeu, 0x000500c4u, 0x00000017u, 0x00000d7fu, 0x000000b5u, 0x00000cbeu, 0x0003003eu, 0x00000d7du, 0x00000d7fu, 0x0003003eu, 0x00000ca4u, 0x00000d7fu, 0x000500c7u, 0x00000017u, 0x00000cc4u, 0x00000d6fu, 0x00000296u, 0x0003003eu, 0x00000ca6u, 0x00000cc4u, 0x0003003eu, 0x00000ca7u, 0x00000299u, 0x00050082u, 0x00000017u, 0x00000cc9u, 0x00000bddu, 0x00000cbeu, 0x0008000cu, 0x00000017u, 0x00000ccau, 0x00000001u, 0x0000002du, 0x00000cc9u, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x00000ccbu, 0x00000ccau, 0x0004007cu, 0x00000008u, 0x00000cccu, 0x00000ccbu, 0x00050041u, 0x00000046u, 0x00000ccdu, 0x00000b7eu, 0x00000198u, 0x0003003eu, 0x00000ccdu, 0x00000cccu, 0x00050082u, 0x00000017u, 0x00000cd2u, 0x00000cbeu, 0x00000bddu, 0x0008000cu, 0x00000017u, 0x00000cd3u, 0x00000001u, 0x0000002du, 0x00000cd2u, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x00000cd4u, 0x00000cd3u, 0x0004007cu, 0x00000008u, 0x00000cd5u, 0x00000cd4u, 0x00050041u, 0x00000046u, 0x00000cd6u, 0x00000b7eu, 0x000001bcu, 0x0003003eu, 0x00000cd6u, 0x00000cd5u, 0x000500b1u, 0x00000034u, 0x00000cd8u, 0x00000cc4u, 0x000000bbu, 0x000300f7u, 0x00000cd9u, 0x00000000u, 0x000400fau, 0x00000cd8u, 0x00000cdau, 0x00000cd9u, 0x000200f8u, 0x00000cdau, 0x000500abu, 0x00000034u, 0x00000cdcu, 0x00000d7fu, 0x000002b1u, 0x000300f7u, 0x00000cddu, 0x00000000u, 0x000400fau, 0x00000cdcu, 0x00000cdeu, 0x00000cdfu, 0x000200f8u, 0x00000cdfu, 0x0003003eu, 0x00000ca7u, 0x000002bcu, 0x0003003eu, 0x00000ca4u, 0x000002bdu, 0x000200f9u, 0x00000cddu, 0x000200f8u, 0x00000cdeu, 0x000500c4u, 0x00000017u, 0x00000ce1u, 0x00000d7fu, 0x000000b5u, 0x000500c3u, 0x00000017u, 0x00000ce3u, 0x000002b7u, 0x00000cc4u, 0x0007000cu, 0x00000017u, 0x00000ce4u, 0x00000001u, 0x0000002au, 0x00000ce1u, 0x00000ce3u, 0x0003003eu, 0x00000ca4u, 0x00000ce4u, 0x000200f9u, 0x00000cddu, 0x000200f8u, 0x00000cddu, 0x000700f5u, 0x00000017u, 0x000012f8u, 0x00000ce4u, 0x00000cdeu, 0x000002bdu, 0x00000cdfu, 0x000600a9u, 0x00000034u, 0x000019feu, 0x00000cdcu, 0x00000299u, 0x000002bcu, 0x000200f9u, 0x00000cd9u, 0x000200f8u, 0x00000cd9u, 0x000700f5u, 0x00000034u, 0x000012fbu, 0x00000299u, 0x00000cb8u, 0x000019feu, 0x00000cddu, 0x000700f5u, 0x00000017u, 0x000012f7u, 0x00000d7fu, 0x00000cb8u, 0x000012f8u, 0x00000cddu, 0x000500c5u, 0x00000017u, 0x00000ce7u, 0x00000bd9u, 0x000012f7u, 0x0003003eu, 0x00000ca9u, 0x00000ce7u, 0x000500abu, 0x00000034u, 0x00000d82u, 0x00000ce7u, 0x000000abu, 0x000300f7u, 0x00000d83u, 0x00000000u, 0x000400fau, 0x00000d82u, 0x00000d84u, 0x00000d83u, 0x000200f8u, 0x00000d84u, 0x0006000cu, 0x00000017u, 0x00000d86u, 0x00000001u, 0x0000004au, 0x00000ce7u, 0x000500c4u, 0x00000017u, 0x00000d87u, 0x000000b5u, 0x00000d86u, 0x0003003eu, 0x00000ca9u, 0x00000d87u, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d83u, 0x000700f5u, 0x00000017u, 0x000012f9u, 0x00000ce7u, 0x00000cd9u, 0x00000d87u, 0x00000d84u, 0x0003003eu, 0x00000d80u, 0x000012f9u, 0x0003003eu, 0x00000ca8u, 0x000012f9u, 0x0003003eu, 0x00000caau, 0x000012f9u, 0x000500c4u, 0x00000017u, 0x00000cebu, 0x000012f9u, 0x000000bbu, 0x0003003eu, 0x00000ca8u, 0x00000cebu, 0x000400a8u, 0x00000034u, 0x00000cedu, 0x000012fbu, 0x000300f7u, 0x00000ceeu, 0x00000000u, 0x000400fau, 0x00000cedu, 0x00000cefu, 0x00000ceeu, 0x000200f8u, 0x00000cefu, 0x00050080u, 0x00000017u, 0x00000cf2u, 0x00000b9du, 0x00000cebu, 0x000500afu, 0x00000034u, 0x00000cf4u, 0x00000cf2u, 0x00000d7cu, 0x000200f9u, 0x00000ceeu, 0x000200f8u, 0x00000ceeu, 0x000700f5u, 0x00000034u, 0x00000cf5u, 0x000012fbu, 0x00000d83u, 0x00000cf4u, 0x00000cefu, 0x0003003eu, 0x00000cabu, 0x00000cf5u, 0x0003003eu, 0x00000cacu, 0x00000cf9u, 0x000400a8u, 0x00000034u, 0x00000cfbu, 0x00000bb4u, 0x000300f7u, 0x00000cfcu, 0x00000000u, 0x000400fau, 0x00000cfbu, 0x00000cfdu, 0x00000cfcu, 0x000200f8u, 0x00000cfdu, 0x000400a8u, 0x00000034u, 0x00000cffu, 0x00000cf9u, 0x000500a7u, 0x00000034u, 0x00000d01u, 0x00000cffu, 0x00000bccu, 0x000500a7u, 0x00000034u, 0x00000d03u, 0x00000d01u, 0x00000cf5u, 0x000200f9u, 0x00000cfcu, 0x000200f8u, 0x00000cfcu, 0x000700f5u, 0x00000034u, 0x00000d04u, 0x00000bb4u, 0x00000ceeu, 0x00000d03u, 0x00000cfdu, 0x0003003eu, 0x00000b7cu, 0x00000d04u, 0x0003003eu, 0x00000b7du, 0x00000cf9u, 0x0003003eu, 0x00000cadu, 0x00000299u, 0x000500aau, 0x00000034u, 0x00000d07u, 0x00000d7cu, 0x0000014bu, 0x0003003eu, 0x00000caeu, 0x00000d07u, 0x000500b1u, 0x00000034u, 0x00000d0au, 0x00000b9du, 0x00000d7cu, 0x0003003eu, 0x00000cafu, 0x00000d0au, 0x00050082u, 0x00000017u, 0x00000d0du, 0x00000b9du, 0x00000cebu, 0x0003003eu, 0x00000cb0u, 0x00000d0du, 0x000500b3u, 0x00000034u, 0x00000d11u, 0x00000d0du, 0x00000d7cu, 0x000500a6u, 0x00000034u, 0x00000d12u, 0x000012fbu, 0x00000d11u, 0x0003003eu, 0x00000cb1u, 0x00000d12u, 0x000300f7u, 0x00000d14u, 0x00000000u, 0x000b00fbu, 0x00000be4u, 0x00000d14u, 0x00000000u, 0x00000d15u, 0x00000001u, 0x00000d16u, 0x00000002u, 0x00000d17u, 0x00000003u, 0x00000d18u, 0x000200f8u, 0x00000d18u, 0x000500a7u, 0x00000034u, 0x00000d4bu, 0x00000cf5u, 0x00000d12u, 0x000400a8u, 0x00000034u, 0x00000d4du, 0x00000d07u, 0x000500a7u, 0x00000034u, 0x00000d4eu, 0x00000d4bu, 0x00000d4du, 0x0003003eu, 0x00000cadu, 0x00000d4eu, 0x000200f9u, 0x00000d14u, 0x000200f8u, 0x00000d17u, 0x000500a6u, 0x00000034u, 0x00000d48u, 0x00000d0au, 0x00000d07u, 0x0003003eu, 0x00000cadu, 0x00000d48u, 0x000200f9u, 0x00000d14u, 0x000200f8u, 0x00000d16u, 0x000400a8u, 0x00000034u, 0x00000d23u, 0x00000d0au, 0x000400a8u, 0x00000034u, 0x00000d25u, 0x00000cf5u, 0x000500a6u, 0x00000034u, 0x00000d26u, 0x00000d23u, 0x00000d25u, 0x000400a8u, 0x00000034u, 0x00000d28u, 0x00000cf9u, 0x000500a6u, 0x00000034u, 0x00000d29u, 0x00000d26u, 0x00000d28u, 0x000300f7u, 0x00000d2au, 0x00000000u, 0x000400fau, 0x00000d29u, 0x00000d2bu, 0x00000d2cu, 0x000200f8u, 0x00000d2cu, 0x000500c7u, 0x00000017u, 0x00000d37u, 0x000012f9u, 0x000002bdu, 0x0003003eu, 0x00000cb2u, 0x00000d37u, 0x0006000cu, 0x00000017u, 0x00000d8bu, 0x00000001u, 0x0000004au, 0x00000d37u, 0x0007000cu, 0x00000017u, 0x00000d8cu, 0x00000001u, 0x0000002au, 0x00000d8bu, 0x000000abu, 0x0003003eu, 0x00000d89u, 0x00000d8cu, 0x0003003eu, 0x00000caau, 0x00000d8cu, 0x000500c3u, 0x00000017u, 0x00000d3bu, 0x00000d7cu, 0x00000d8cu, 0x000500c3u, 0x00000017u, 0x00000d3eu, 0x00000b9du, 0x00000d8cu, 0x00050082u, 0x00000017u, 0x00000d3fu, 0x00000d3bu, 0x00000d3eu, 0x000500c7u, 0x00000017u, 0x00000d40u, 0x00000d3fu, 0x00000296u, 0x0003003eu, 0x00000cb3u, 0x00000d40u, 0x00050084u, 0x00000017u, 0x00000d43u, 0x00000d40u, 0x00000ba4u, 0x000500c3u, 0x00000017u, 0x00000d44u, 0x00000d43u, 0x000000bbu, 0x0007000cu, 0x00000017u, 0x00000d45u, 0x00000001u, 0x00000027u, 0x00000d44u, 0x000000cau, 0x0003003eu, 0x00000b76u, 0x00000d45u, 0x0003003eu, 0x00000cadu, 0x000002bcu, 0x000200f9u, 0x00000d2au, 0x000200f8u, 0x00000d2bu, 0x000400a8u, 0x00000034u, 0x00000d2eu, 0x00000d07u, 0x000300f7u, 0x00000d2fu, 0x00000000u, 0x000400fau, 0x00000d2eu, 0x00000d30u, 0x00000d2fu, 0x000200f8u, 0x00000d30u, 0x000600a9u, 0x00000034u, 0x00000d34u, 0x00000cf9u, 0x00000d0au, 0x00000d12u, 0x000200f9u, 0x00000d2fu, 0x000200f8u, 0x00000d2fu, 0x000700f5u, 0x00000034u, 0x00000d35u, 0x00000d07u, 0x00000d2bu, 0x00000d34u, 0x00000d30u, 0x0003003eu, 0x00000cadu, 0x00000d35u, 0x000200f9u, 0x00000d2au, 0x000200f8u, 0x00000d2au, 0x000700f5u, 0x00000017u, 0x0000132bu, 0x00000ba4u, 0x00000d2fu, 0x00000d45u, 0x00000d2cu, 0x000700f5u, 0x00000034u, 0x00001327u, 0x00000d35u, 0x00000d2fu, 0x000002bcu, 0x00000d2cu, 0x000200f9u, 0x00000d14u, 0x000200f8u, 0x00000d15u, 0x000400a8u, 0x00000034u, 0x00000d1au, 0x00000d07u, 0x000300f7u, 0x00000d1bu, 0x00000000u, 0x000400fau, 0x00000d1au, 0x00000d1cu, 0x00000d1bu, 0x000200f8u, 0x00000d1cu, 0x000600a9u, 0x00000034u, 0x00000d20u, 0x00000cf9u, 0x00000d0au, 0x00000d12u, 0x000200f9u, 0x00000d1bu, 0x000200f8u, 0x00000d1bu, 0x000700f5u, 0x00000034u, 0x00000d21u, 0x00000d07u, 0x00000d15u, 0x00000d20u, 0x00000d1cu, 0x0003003eu, 0x00000cadu, 0x00000d21u, 0x000200f9u, 0x00000d14u, 0x000200f8u, 0x00000d14u, 0x000d00f5u, 0x00000017u, 0x00001329u, 0x00000ba4u, 0x00000cfcu, 0x00000ba4u, 0x00000d1bu, 0x0000132bu, 0x00000d2au, 0x00000ba4u, 0x00000d17u, 0x00000ba4u, 0x00000d18u, 0x000d00f5u, 0x00000034u, 0x00001326u, 0x00000299u, 0x00000cfcu, 0x00000d21u, 0x00000d1bu, 0x00001327u, 0x00000d2au, 0x00000d48u, 0x00000d17u, 0x00000d4eu, 0x00000d18u, 0x000200f9u, 0x00000cb7u, 0x000200f8u, 0x00000cb7u, 0x000700f5u, 0x00000034u, 0x0000132eu, 0x00000d04u, 0x00000d14u, 0x00000d62u, 0x00000d5cu, 0x000700f5u, 0x00000017u, 0x00001328u, 0x00001329u, 0x00000d14u, 0x00000ba4u, 0x00000d5cu, 0x000700f5u, 0x00000034u, 0x00001325u, 0x00001326u, 0x00000d14u, 0x000002bcu, 0x00000d5cu, 0x0003003eu, 0x00000cb5u, 0x00001325u, 0x0003003eu, 0x00000b5au, 0x00001328u, 0x0003003eu, 0x00000b6eu, 0x0000132eu, 0x0003003eu, 0x00000b6fu, 0x00000cf9u, 0x0004003du, 0x00000036u, 0x00000bf0u, 0x00000b7eu, 0x0003003eu, 0x00000b70u, 0x00000bf0u, 0x0003003eu, 0x00000b6du, 0x00001325u, 0x000300f7u, 0x00000bf2u, 0x00000000u, 0x000400fau, 0x00001325u, 0x00000bf3u, 0x00000bf2u, 0x000200f8u, 0x00000bf3u, 0x000400a8u, 0x00000034u, 0x00000bf5u, 0x00000bccu, 0x000500abu, 0x00000034u, 0x00000bf7u, 0x00001328u, 0x000000abu, 0x000500a6u, 0x00000034u, 0x00000bf8u, 0x00000bf5u, 0x00000bf7u, 0x000200f9u, 0x00000bf2u, 0x000200f8u, 0x00000bf2u, 0x000700f5u, 0x00000034u, 0x00000bf9u, 0x00001325u, 0x00000cb7u, 0x00000bf8u, 0x00000bf3u, 0x000300f7u, 0x00000bfau, 0x00000000u, 0x000400fau, 0x00000bf9u, 0x00000bfbu, 0x00000bfau, 0x000200f8u, 0x00000bfbu, 0x0004003du, 0x00000009u, 0x00000bfdu, 0x00000b6au, 0x00080050u, 0x00000031u, 0x00000c03u, 0x000008e2u, 0x00000bfdu, 0x00000c5du, 0x00000c5fu, 0x000008f8u, 0x0003003eu, 0x00001200u, 0x000008e2u, 0x0003003eu, 0x00001201u, 0x00000bfdu, 0x0003003eu, 0x00001202u, 0x00000c5du, 0x0003003eu, 0x00001203u, 0x00000c5fu, 0x0003003eu, 0x00001204u, 0x000008f8u, 0x0003003eu, 0x00000b80u, 0x00000c71u, 0x000300f7u, 0x00000c07u, 0x00000000u, 0x000400fau, 0x00000bc8u, 0x00000c08u, 0x00000c07u, 0x000200f8u, 0x00000c08u, 0x0003003eu, 0x00001216u, 0x000008e2u, 0x0003003eu, 0x00001217u, 0x00000bfdu, 0x0003003eu, 0x00001218u, 0x00000c5du, 0x0003003eu, 0x00001219u, 0x00000c5fu, 0x0003003eu, 0x0000121au, 0x000008f8u, 0x0003003eu, 0x00000b82u, 0x00000c71u, 0x0003003eu, 0x00000b83u, 0x00000bb4u, 0x0003003eu, 0x00000b84u, 0x0000132eu, 0x0003003eu, 0x00000b85u, 0x00000bc4u, 0x0003003eu, 0x00000b86u, 0x00000cf9u, 0x0003003eu, 0x00000b87u, 0x00000bf0u, 0x0003003eu, 0x00000b88u, 0x00000299u, 0x0003003eu, 0x00000d8du, 0x00000299u, 0x00050041u, 0x00000046u, 0x00000d98u, 0x00000b82u, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000d99u, 0x00000d98u, 0x00040071u, 0x00000006u, 0x00000d9au, 0x00000d99u, 0x0004007cu, 0x00000017u, 0x00000d9bu, 0x00000d9au, 0x000300f7u, 0x00000d9cu, 0x00000000u, 0x000b00fbu, 0x00000d9bu, 0x00000d9cu, 0x00000000u, 0x00000d9du, 0x00000001u, 0x00000d9eu, 0x00000002u, 0x00000d9fu, 0x00000003u, 0x00000da0u, 0x000200f8u, 0x00000da0u, 0x0004003du, 0x00000009u, 0x00000dabu, 0x00001218u, 0x0008004fu, 0x0000001bu, 0x00000dacu, 0x00000dabu, 0x00000dabu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d8fu, 0x00000dacu, 0x000200f9u, 0x00000d9cu, 0x000200f8u, 0x00000d9fu, 0x0008004fu, 0x0000001bu, 0x00000da9u, 0x00000c5fu, 0x00000c5fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d8fu, 0x00000da9u, 0x000200f9u, 0x00000d9cu, 0x000200f8u, 0x00000d9eu, 0x0004003du, 0x00000009u, 0x00000da5u, 0x00001217u, 0x0008004fu, 0x0000001bu, 0x00000da6u, 0x00000da5u, 0x00000da5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d8fu, 0x00000da6u, 0x000200f9u, 0x00000d9cu, 0x000200f8u, 0x00000d9du, 0x0004003du, 0x00000009u, 0x00000da2u, 0x00001216u, 0x0008004fu, 0x0000001bu, 0x00000da3u, 0x00000da2u, 0x00000da2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d8fu, 0x00000da3u, 0x000200f9u, 0x00000d9cu, 0x000200f8u, 0x00000d9cu, 0x000d00f5u, 0x0000001bu, 0x00001405u, 0x0000140fu, 0x00000c08u, 0x00000da3u, 0x00000d9du, 0x00000da6u, 0x00000d9eu, 0x00000da9u, 0x00000d9fu, 0x00000dacu, 0x00000da0u, 0x00050041u, 0x00000046u, 0x00000db7u, 0x00000b82u, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000db8u, 0x00000db7u, 0x00040071u, 0x00000006u, 0x00000db9u, 0x00000db8u, 0x0004007cu, 0x00000017u, 0x00000dbau, 0x00000db9u, 0x000300f7u, 0x00000dbbu, 0x00000000u, 0x000b00fbu, 0x00000dbau, 0x00000dbbu, 0x00000000u, 0x00000dbcu, 0x00000001u, 0x00000dbdu, 0x00000002u, 0x00000dbeu, 0x00000003u, 0x00000dbfu, 0x000200f8u, 0x00000dbfu, 0x0004003du, 0x00000009u, 0x00000dcau, 0x00001218u, 0x0008004fu, 0x0000001bu, 0x00000dcbu, 0x00000dcau, 0x00000dcau, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d90u, 0x00000dcbu, 0x000200f9u, 0x00000dbbu, 0x000200f8u, 0x00000dbeu, 0x0008004fu, 0x0000001bu, 0x00000dc8u, 0x00000c5fu, 0x00000c5fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d90u, 0x00000dc8u, 0x000200f9u, 0x00000dbbu, 0x000200f8u, 0x00000dbdu, 0x0004003du, 0x00000009u, 0x00000dc4u, 0x00001217u, 0x0008004fu, 0x0000001bu, 0x00000dc5u, 0x00000dc4u, 0x00000dc4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d90u, 0x00000dc5u, 0x000200f9u, 0x00000dbbu, 0x000200f8u, 0x00000dbcu, 0x0004003du, 0x00000009u, 0x00000dc1u, 0x00001216u, 0x0008004fu, 0x0000001bu, 0x00000dc2u, 0x00000dc1u, 0x00000dc1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000d90u, 0x00000dc2u, 0x000200f9u, 0x00000dbbu, 0x000200f8u, 0x00000dbbu, 0x00050041u, 0x00000046u, 0x00000debu, 0x00000b82u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000decu, 0x00000debu, 0x00040071u, 0x00000006u, 0x00000dedu, 0x00000decu, 0x0004007cu, 0x00000017u, 0x00000deeu, 0x00000dedu, 0x000300f7u, 0x00000defu, 0x00000000u, 0x000b00fbu, 0x00000deeu, 0x00000defu, 0x00000000u, 0x00000df0u, 0x00000001u, 0x00000df1u, 0x00000002u, 0x00000df2u, 0x00000003u, 0x00000df3u, 0x000200f8u, 0x00000df3u, 0x0003003eu, 0x00000d91u, 0x000001eau, 0x000200f9u, 0x00000defu, 0x000200f8u, 0x00000df2u, 0x0003003eu, 0x00000d91u, 0x000008f8u, 0x000200f9u, 0x00000defu, 0x000200f8u, 0x00000df1u, 0x00050041u, 0x00000046u, 0x00001222u, 0x00001218u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000df7u, 0x00001222u, 0x0003003eu, 0x00000d91u, 0x00000df7u, 0x000200f9u, 0x00000defu, 0x000200f8u, 0x00000df0u, 0x00050041u, 0x00000046u, 0x00001221u, 0x00001216u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000df5u, 0x00001221u, 0x0003003eu, 0x00000d91u, 0x00000df5u, 0x000200f9u, 0x00000defu, 0x000200f8u, 0x00000defu, 0x000d00f5u, 0x00000008u, 0x000013c5u, 0x000013d3u, 0x00000dbbu, 0x00000df5u, 0x00000df0u, 0x00000df7u, 0x00000df1u, 0x000008f8u, 0x00000df2u, 0x000001eau, 0x00000df3u, 0x00050041u, 0x00000046u, 0x00000dfau, 0x00000b82u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000dfbu, 0x00000dfau, 0x00040071u, 0x00000006u, 0x00000dfcu, 0x00000dfbu, 0x0004007cu, 0x00000017u, 0x00000dfdu, 0x00000dfcu, 0x000300f7u, 0x00000dfeu, 0x00000000u, 0x000b00fbu, 0x00000dfdu, 0x00000dfeu, 0x00000000u, 0x00000dffu, 0x00000001u, 0x00000e00u, 0x00000002u, 0x00000e01u, 0x00000003u, 0x00000e02u, 0x000200f8u, 0x00000e02u, 0x0003003eu, 0x00000d92u, 0x000001eau, 0x000200f9u, 0x00000dfeu, 0x000200f8u, 0x00000e01u, 0x0003003eu, 0x00000d92u, 0x000001cfu, 0x000200f9u, 0x00000dfeu, 0x000200f8u, 0x00000e00u, 0x00050041u, 0x00000046u, 0x00001223u, 0x00001217u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000e07u, 0x00001223u, 0x0003003eu, 0x00000d92u, 0x00000e07u, 0x000200f9u, 0x00000dfeu, 0x000200f8u, 0x00000dffu, 0x000400c8u, 0x00000008u, 0x00000e04u, 0x000013c5u, 0x000500c7u, 0x00000008u, 0x00000e05u, 0x00000e04u, 0x000001cfu, 0x0003003eu, 0x00000d92u, 0x00000e05u, 0x000200f9u, 0x00000dfeu, 0x000200f8u, 0x00000dfeu, 0x000d00f5u, 0x00000008u, 0x000013e2u, 0x000013f1u, 0x00000defu, 0x00000e05u, 0x00000dffu, 0x00000e07u, 0x00000e00u, 0x000001cfu, 0x00000e01u, 0x000001eau, 0x00000e02u, 0x000500c2u, 0x00000008u, 0x00000e09u, 0x000013c5u, 0x00000201u, 0x0003003eu, 0x00000d91u, 0x00000e09u, 0x000500c2u, 0x00000008u, 0x00000e0bu, 0x000013e2u, 0x00000201u, 0x0003003eu, 0x00000d92u, 0x00000e0bu, 0x0004003du, 0x00000008u, 0x00000e0du, 0x00000dfau, 0x00040071u, 0x00000006u, 0x00000e0eu, 0x00000e0du, 0x0004007cu, 0x00000017u, 0x00000e0fu, 0x00000e0eu, 0x000500aau, 0x00000034u, 0x00000e10u, 0x00000e0fu, 0x000000b5u, 0x000300f7u, 0x00000e11u, 0x00000000u, 0x000400fau, 0x00000e10u, 0x00000e12u, 0x00000e11u, 0x000200f8u, 0x00000e12u, 0x00050041u, 0x00000046u, 0x00000e14u, 0x00000b87u, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000e15u, 0x00000e14u, 0x000500c2u, 0x00000008u, 0x00000e16u, 0x00000e09u, 0x00000e15u, 0x000500c7u, 0x00000008u, 0x00000e17u, 0x00000e16u, 0x00000211u, 0x0003003eu, 0x00000d91u, 0x00000e17u, 0x00050041u, 0x00000046u, 0x00000e19u, 0x00000b87u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000e1au, 0x00000e19u, 0x000500c2u, 0x00000008u, 0x00000e1bu, 0x00000e0bu, 0x00000e1au, 0x000500c5u, 0x00000008u, 0x00000e1cu, 0x00000e1bu, 0x00000201u, 0x0003003eu, 0x00000d92u, 0x00000e1cu, 0x000200f9u, 0x00000e11u, 0x000200f8u, 0x00000e11u, 0x000700f5u, 0x00000008u, 0x0000141cu, 0x00000e0bu, 0x00000dfeu, 0x00000e1cu, 0x00000e12u, 0x000700f5u, 0x00000008u, 0x000013feu, 0x00000e09u, 0x00000dfeu, 0x00000e17u, 0x00000e12u, 0x0004003du, 0x0000001bu, 0x00000e1du, 0x00000d90u, 0x00040071u, 0x0000021cu, 0x00000e1eu, 0x00000e1du, 0x0004007cu, 0x00000218u, 0x00000e1fu, 0x00000e1eu, 0x00040071u, 0x0000000au, 0x00000e21u, 0x000013feu, 0x0004007cu, 0x0000000bu, 0x00000e22u, 0x00000e21u, 0x00060050u, 0x00000218u, 0x00000e23u, 0x00000e22u, 0x00000e22u, 0x00000e22u, 0x00050084u, 0x00000218u, 0x00000e24u, 0x00000e1fu, 0x00000e23u, 0x00040071u, 0x0000021cu, 0x00000e26u, 0x00001405u, 0x0004007cu, 0x00000218u, 0x00000e27u, 0x00000e26u, 0x00040071u, 0x0000000au, 0x00000e29u, 0x0000141cu, 0x0004007cu, 0x0000000bu, 0x00000e2au, 0x00000e29u, 0x00050080u, 0x0000000bu, 0x00000e2bu, 0x00000e2au, 0x0000022au, 0x00060050u, 0x00000218u, 0x00000e2cu, 0x00000e2bu, 0x00000e2bu, 0x00000e2bu, 0x00050084u, 0x00000218u, 0x00000e2du, 0x00000e27u, 0x00000e2cu, 0x00050080u, 0x00000218u, 0x00000e2eu, 0x00000e24u, 0x00000e2du, 0x0003003eu, 0x00000d93u, 0x00000e2eu, 0x0004003du, 0x00000218u, 0x00000e36u, 0x00000d93u, 0x000500c3u, 0x00000218u, 0x00000e38u, 0x00000e36u, 0x000019fau, 0x00040072u, 0x0000012au, 0x00000e39u, 0x00000e38u, 0x0004007cu, 0x0000001bu, 0x00000e3au, 0x00000e39u, 0x0003003eu, 0x00000d90u, 0x00000e3au, 0x0004003du, 0x0000001bu, 0x00000e6cu, 0x00000d90u, 0x000500c7u, 0x0000001bu, 0x00000e6eu, 0x00000e6cu, 0x000019fbu, 0x0003003eu, 0x00000d8du, 0x000002bcu, 0x0003003eu, 0x00000d8eu, 0x00000e6eu, 0x0003003eu, 0x00000d95u, 0x00000e6eu, 0x0009004fu, 0x00000009u, 0x00000c13u, 0x000008e2u, 0x00000e6eu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001200u, 0x00000c13u, 0x0003003eu, 0x00000b80u, 0x00000c73u, 0x000200f9u, 0x00000c07u, 0x000200f8u, 0x00000c07u, 0x000700f5u, 0x0000001bu, 0x0000191eu, 0x0000140fu, 0x00000bfbu, 0x00001405u, 0x00000e11u, 0x000700f5u, 0x00000008u, 0x000018f6u, 0x000013f1u, 0x00000bfbu, 0x0000141cu, 0x00000e11u, 0x000700f5u, 0x00000008u, 0x000018ceu, 0x000013d3u, 0x00000bfbu, 0x000013feu, 0x00000e11u, 0x000700f5u, 0x00000009u, 0x00001489u, 0x000008e2u, 0x00000bfbu, 0x00000c13u, 0x00000e11u, 0x00070050u, 0x000019ffu, 0x00001a00u, 0x00000bc8u, 0x00000bc8u, 0x00000bc8u, 0x00000bc8u, 0x000600a9u, 0x00000009u, 0x00001a01u, 0x00001a00u, 0x00000c73u, 0x00000c71u, 0x00080050u, 0x00000031u, 0x00001215u, 0x00001489u, 0x00000bfdu, 0x00000c5du, 0x00000c5fu, 0x000008f8u, 0x0003003eu, 0x00001224u, 0x00001489u, 0x0003003eu, 0x00001225u, 0x00000bfdu, 0x0003003eu, 0x00001226u, 0x00000c5du, 0x0003003eu, 0x00001227u, 0x00000c5fu, 0x0003003eu, 0x00001228u, 0x000008f8u, 0x0003003eu, 0x00000b8bu, 0x00001a01u, 0x0003003eu, 0x00000b8cu, 0x00000bb4u, 0x0003003eu, 0x00000b8du, 0x0000132eu, 0x0003003eu, 0x00000b8eu, 0x00000bc4u, 0x0003003eu, 0x00000b8fu, 0x00000cf9u, 0x0003003eu, 0x00000b90u, 0x00000bf0u, 0x0003003eu, 0x00000b91u, 0x000002bcu, 0x0003003eu, 0x00000e70u, 0x00000299u, 0x000300f7u, 0x00000e79u, 0x00000000u, 0x000300fbu, 0x00000198u, 0x00000e7au, 0x000200f8u, 0x00000e7au, 0x00050041u, 0x00000046u, 0x00000e7bu, 0x00000b8bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000e7cu, 0x00000e7bu, 0x00040071u, 0x00000006u, 0x00000e7du, 0x00000e7cu, 0x0004007cu, 0x00000017u, 0x00000e7eu, 0x00000e7du, 0x000300f7u, 0x00000e7fu, 0x00000000u, 0x000b00fbu, 0x00000e7eu, 0x00000e7fu, 0x00000000u, 0x00000e80u, 0x00000001u, 0x00000e81u, 0x00000002u, 0x00000e82u, 0x00000003u, 0x00000e83u, 0x000200f8u, 0x00000e83u, 0x0004003du, 0x00000009u, 0x00000e8eu, 0x00001226u, 0x0008004fu, 0x0000001bu, 0x00000e8fu, 0x00000e8eu, 0x00000e8eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e72u, 0x00000e8fu, 0x000200f9u, 0x00000e7fu, 0x000200f8u, 0x00000e82u, 0x0008004fu, 0x0000001bu, 0x00000e8cu, 0x00000c5fu, 0x00000c5fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e72u, 0x00000e8cu, 0x000200f9u, 0x00000e7fu, 0x000200f8u, 0x00000e81u, 0x0004003du, 0x00000009u, 0x00000e88u, 0x00001225u, 0x0008004fu, 0x0000001bu, 0x00000e89u, 0x00000e88u, 0x00000e88u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e72u, 0x00000e89u, 0x000200f9u, 0x00000e7fu, 0x000200f8u, 0x00000e80u, 0x0004003du, 0x00000009u, 0x00000e85u, 0x00001224u, 0x0008004fu, 0x0000001bu, 0x00000e86u, 0x00000e85u, 0x00000e85u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e72u, 0x00000e86u, 0x000200f9u, 0x00000e7fu, 0x000200f8u, 0x00000e7fu, 0x000d00f5u, 0x0000001bu, 0x00001536u, 0x00001541u, 0x00000e7au, 0x00000e86u, 0x00000e80u, 0x00000e89u, 0x00000e81u, 0x00000e8cu, 0x00000e82u, 0x00000e8fu, 0x00000e83u, 0x000400a8u, 0x00000034u, 0x00000e95u, 0x00000cf9u, 0x000500a7u, 0x00000034u, 0x00000e96u, 0x00000bc4u, 0x00000e95u, 0x000300f7u, 0x00000e97u, 0x00000000u, 0x000400fau, 0x00000e96u, 0x00000e98u, 0x00000e97u, 0x000200f8u, 0x00000e98u, 0x0003003eu, 0x00000e70u, 0x000002bcu, 0x0003003eu, 0x00000e71u, 0x00001536u, 0x000200f9u, 0x00000e79u, 0x000200f8u, 0x00000e97u, 0x00050041u, 0x00000046u, 0x00000e9au, 0x00000b8bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000e9bu, 0x00000e9au, 0x00040071u, 0x00000006u, 0x00000e9cu, 0x00000e9bu, 0x0004007cu, 0x00000017u, 0x00000e9du, 0x00000e9cu, 0x000300f7u, 0x00000e9eu, 0x00000000u, 0x000b00fbu, 0x00000e9du, 0x00000e9eu, 0x00000000u, 0x00000e9fu, 0x00000001u, 0x00000ea0u, 0x00000002u, 0x00000ea1u, 0x00000003u, 0x00000ea2u, 0x000200f8u, 0x00000ea2u, 0x0004003du, 0x00000009u, 0x00000eadu, 0x00001226u, 0x0008004fu, 0x0000001bu, 0x00000eaeu, 0x00000eadu, 0x00000eadu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e73u, 0x00000eaeu, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000ea1u, 0x0008004fu, 0x0000001bu, 0x00000eabu, 0x00000c5fu, 0x00000c5fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e73u, 0x00000eabu, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000ea0u, 0x0004003du, 0x00000009u, 0x00000ea7u, 0x00001225u, 0x0008004fu, 0x0000001bu, 0x00000ea8u, 0x00000ea7u, 0x00000ea7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e73u, 0x00000ea8u, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000e9fu, 0x0004003du, 0x00000009u, 0x00000ea4u, 0x00001224u, 0x0008004fu, 0x0000001bu, 0x00000ea5u, 0x00000ea4u, 0x00000ea4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000e73u, 0x00000ea5u, 0x000200f9u, 0x00000e9eu, 0x000200f8u, 0x00000e9eu, 0x000400a8u, 0x00000034u, 0x00000eb3u, 0x0000132eu, 0x000400a8u, 0x00000034u, 0x00000eb4u, 0x00000eb3u, 0x000300f7u, 0x00000eb5u, 0x00000000u, 0x000400fau, 0x00000eb4u, 0x00000eb6u, 0x00000eb5u, 0x000200f8u, 0x00000eb6u, 0x00050041u, 0x00000046u, 0x00000eb7u, 0x00000b8bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000eb8u, 0x00000eb7u, 0x00040071u, 0x00000006u, 0x00000eb9u, 0x00000eb8u, 0x0004007cu, 0x00000017u, 0x00000ebau, 0x00000eb9u, 0x000500aau, 0x00000034u, 0x00000ebbu, 0x00000ebau, 0x000000abu, 0x000300f7u, 0x00000ebcu, 0x00000000u, 0x000400fau, 0x00000ebbu, 0x00000ebdu, 0x00000ebcu, 0x000200f8u, 0x00000ebdu, 0x00050041u, 0x00000046u, 0x00000ebeu, 0x00000b8bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000ebfu, 0x00000ebeu, 0x00040071u, 0x00000006u, 0x00000ec0u, 0x00000ebfu, 0x0004007cu, 0x00000017u, 0x00000ec1u, 0x00000ec0u, 0x000500aau, 0x00000034u, 0x00000ec2u, 0x00000ec1u, 0x000000abu, 0x000200f9u, 0x00000ebcu, 0x000200f8u, 0x00000ebcu, 0x000700f5u, 0x00000034u, 0x00000ec3u, 0x00000ebbu, 0x00000eb6u, 0x00000ec2u, 0x00000ebdu, 0x000300f7u, 0x00000ec4u, 0x00000000u, 0x000400fau, 0x00000ec3u, 0x00000ec5u, 0x00000ec4u, 0x000200f8u, 0x00000ec5u, 0x00050041u, 0x00000046u, 0x0000122eu, 0x00001224u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000ec7u, 0x0000122eu, 0x000500aau, 0x00000034u, 0x00000ec8u, 0x00000ec7u, 0x000001cfu, 0x000200f9u, 0x00000ec4u, 0x000200f8u, 0x00000ec4u, 0x000700f5u, 0x00000034u, 0x00000ec9u, 0x00000ec3u, 0x00000ebcu, 0x00000ec8u, 0x00000ec5u, 0x000200f9u, 0x00000eb5u, 0x000200f8u, 0x00000eb5u, 0x000700f5u, 0x00000034u, 0x00000ecau, 0x00000eb3u, 0x00000e9eu, 0x00000ec9u, 0x00000ec4u, 0x000300f7u, 0x00000ecbu, 0x00000000u, 0x000400fau, 0x00000ecau, 0x00000eccu, 0x00000ecbu, 0x000200f8u, 0x00000eccu, 0x0004003du, 0x0000001bu, 0x00000ecdu, 0x00000e73u, 0x0003003eu, 0x00000e70u, 0x000002bcu, 0x0003003eu, 0x00000e71u, 0x00000ecdu, 0x000200f9u, 0x00000e79u, 0x000200f8u, 0x00000ecbu, 0x00050041u, 0x00000046u, 0x00000eceu, 0x00000b8bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000ecfu, 0x00000eceu, 0x00040071u, 0x00000006u, 0x00000ed0u, 0x00000ecfu, 0x0004007cu, 0x00000017u, 0x00000ed1u, 0x00000ed0u, 0x000300f7u, 0x00000ed2u, 0x00000000u, 0x000b00fbu, 0x00000ed1u, 0x00000ed2u, 0x00000000u, 0x00000ed3u, 0x00000001u, 0x00000ed4u, 0x00000002u, 0x00000ed5u, 0x00000003u, 0x00000ed6u, 0x000200f8u, 0x00000ed6u, 0x0003003eu, 0x00000e74u, 0x000001eau, 0x000200f9u, 0x00000ed2u, 0x000200f8u, 0x00000ed5u, 0x0003003eu, 0x00000e74u, 0x000008f8u, 0x000200f9u, 0x00000ed2u, 0x000200f8u, 0x00000ed4u, 0x00050041u, 0x00000046u, 0x00001230u, 0x00001226u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000edau, 0x00001230u, 0x0003003eu, 0x00000e74u, 0x00000edau, 0x000200f9u, 0x00000ed2u, 0x000200f8u, 0x00000ed3u, 0x00050041u, 0x00000046u, 0x0000122fu, 0x00001224u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000ed8u, 0x0000122fu, 0x0003003eu, 0x00000e74u, 0x00000ed8u, 0x000200f9u, 0x00000ed2u, 0x000200f8u, 0x00000ed2u, 0x000d00f5u, 0x00000008u, 0x000014ddu, 0x000014ecu, 0x00000ecbu, 0x00000ed8u, 0x00000ed3u, 0x00000edau, 0x00000ed4u, 0x000008f8u, 0x00000ed5u, 0x000001eau, 0x00000ed6u, 0x00050041u, 0x00000046u, 0x00000eddu, 0x00000b8bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000edeu, 0x00000eddu, 0x00040071u, 0x00000006u, 0x00000edfu, 0x00000edeu, 0x0004007cu, 0x00000017u, 0x00000ee0u, 0x00000edfu, 0x000300f7u, 0x00000ee1u, 0x00000000u, 0x000b00fbu, 0x00000ee0u, 0x00000ee1u, 0x00000000u, 0x00000ee2u, 0x00000001u, 0x00000ee3u, 0x00000002u, 0x00000ee4u, 0x00000003u, 0x00000ee5u, 0x000200f8u, 0x00000ee5u, 0x0003003eu, 0x00000e75u, 0x000001eau, 0x000200f9u, 0x00000ee1u, 0x000200f8u, 0x00000ee4u, 0x0003003eu, 0x00000e75u, 0x000001cfu, 0x000200f9u, 0x00000ee1u, 0x000200f8u, 0x00000ee3u, 0x00050041u, 0x00000046u, 0x00001231u, 0x00001225u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000eeau, 0x00001231u, 0x0003003eu, 0x00000e75u, 0x00000eeau, 0x000200f9u, 0x00000ee1u, 0x000200f8u, 0x00000ee2u, 0x000400c8u, 0x00000008u, 0x00000ee7u, 0x000014ddu, 0x000500c7u, 0x00000008u, 0x00000ee8u, 0x00000ee7u, 0x000001cfu, 0x0003003eu, 0x00000e75u, 0x00000ee8u, 0x000200f9u, 0x00000ee1u, 0x000200f8u, 0x00000ee1u, 0x000d00f5u, 0x00000008u, 0x00001506u, 0x00001516u, 0x00000ed2u, 0x00000ee8u, 0x00000ee2u, 0x00000eeau, 0x00000ee3u, 0x000001cfu, 0x00000ee4u, 0x000001eau, 0x00000ee5u, 0x000500c2u, 0x00000008u, 0x00000eecu, 0x000014ddu, 0x00000201u, 0x0003003eu, 0x00000e74u, 0x00000eecu, 0x000500c2u, 0x00000008u, 0x00000eeeu, 0x00001506u, 0x00000201u, 0x0003003eu, 0x00000e75u, 0x00000eeeu, 0x0004003du, 0x00000008u, 0x00000ef0u, 0x00000eddu, 0x00040071u, 0x00000006u, 0x00000ef1u, 0x00000ef0u, 0x0004007cu, 0x00000017u, 0x00000ef2u, 0x00000ef1u, 0x000500aau, 0x00000034u, 0x00000ef3u, 0x00000ef2u, 0x000000b5u, 0x000300f7u, 0x00000ef4u, 0x00000000u, 0x000400fau, 0x00000ef3u, 0x00000ef5u, 0x00000ef4u, 0x000200f8u, 0x00000ef5u, 0x00050041u, 0x00000046u, 0x00000ef7u, 0x00000b90u, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000ef8u, 0x00000ef7u, 0x000500c2u, 0x00000008u, 0x00000ef9u, 0x00000eecu, 0x00000ef8u, 0x000500c7u, 0x00000008u, 0x00000efau, 0x00000ef9u, 0x00000211u, 0x0003003eu, 0x00000e74u, 0x00000efau, 0x00050041u, 0x00000046u, 0x00000efcu, 0x00000b90u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000efdu, 0x00000efcu, 0x000500c2u, 0x00000008u, 0x00000efeu, 0x00000eeeu, 0x00000efdu, 0x000500c5u, 0x00000008u, 0x00000effu, 0x00000efeu, 0x00000201u, 0x0003003eu, 0x00000e75u, 0x00000effu, 0x000200f9u, 0x00000ef4u, 0x000200f8u, 0x00000ef4u, 0x000700f5u, 0x00000008u, 0x0000155au, 0x00000eeeu, 0x00000ee1u, 0x00000effu, 0x00000ef5u, 0x000700f5u, 0x00000008u, 0x0000152fu, 0x00000eecu, 0x00000ee1u, 0x00000efau, 0x00000ef5u, 0x0004003du, 0x0000001bu, 0x00000f00u, 0x00000e73u, 0x00040071u, 0x0000021cu, 0x00000f01u, 0x00000f00u, 0x0004007cu, 0x00000218u, 0x00000f02u, 0x00000f01u, 0x00040071u, 0x0000000au, 0x00000f04u, 0x0000152fu, 0x0004007cu, 0x0000000bu, 0x00000f05u, 0x00000f04u, 0x00060050u, 0x00000218u, 0x00000f06u, 0x00000f05u, 0x00000f05u, 0x00000f05u, 0x00050084u, 0x00000218u, 0x00000f07u, 0x00000f02u, 0x00000f06u, 0x00040071u, 0x0000021cu, 0x00000f09u, 0x00001536u, 0x0004007cu, 0x00000218u, 0x00000f0au, 0x00000f09u, 0x00040071u, 0x0000000au, 0x00000f0cu, 0x0000155au, 0x0004007cu, 0x0000000bu, 0x00000f0du, 0x00000f0cu, 0x00050080u, 0x0000000bu, 0x00000f0eu, 0x00000f0du, 0x0000022au, 0x00060050u, 0x00000218u, 0x00000f0fu, 0x00000f0eu, 0x00000f0eu, 0x00000f0eu, 0x00050084u, 0x00000218u, 0x00000f10u, 0x00000f0au, 0x00000f0fu, 0x00050080u, 0x00000218u, 0x00000f11u, 0x00000f07u, 0x00000f10u, 0x0003003eu, 0x00000e76u, 0x00000f11u, 0x000500a6u, 0x00000034u, 0x00000f15u, 0x00000299u, 0x00000bb4u, 0x000300f7u, 0x00000f16u, 0x00000000u, 0x000400fau, 0x00000f15u, 0x00000f17u, 0x00000f18u, 0x000200f8u, 0x00000f18u, 0x00040071u, 0x00000006u, 0x00000f1fu, 0x0000152fu, 0x0004007cu, 0x00000017u, 0x00000f20u, 0x00000f1fu, 0x000500c3u, 0x00000017u, 0x00000f21u, 0x00000f20u, 0x000000b8u, 0x00040071u, 0x00000006u, 0x00000f23u, 0x0000155au, 0x0004007cu, 0x00000017u, 0x00000f24u, 0x00000f23u, 0x000500c3u, 0x00000017u, 0x00000f25u, 0x00000f24u, 0x000000b8u, 0x00050080u, 0x00000017u, 0x00000f26u, 0x00000f21u, 0x00000f25u, 0x00050080u, 0x00000017u, 0x00000f27u, 0x00000f26u, 0x000000b5u, 0x0003003eu, 0x00000e77u, 0x00000f27u, 0x0004003du, 0x00000218u, 0x00000f28u, 0x00000e76u, 0x000500c3u, 0x00000218u, 0x00000f2au, 0x00000f28u, 0x000019fcu, 0x0003003eu, 0x00000e76u, 0x00000f2au, 0x0004003du, 0x00000218u, 0x00000f2bu, 0x00000e76u, 0x000500c7u, 0x00000218u, 0x00000f2du, 0x00000f2bu, 0x000019fdu, 0x0003003eu, 0x00000e76u, 0x00000f2du, 0x0004003du, 0x0000024fu, 0x00000f2eu, 0x00000251u, 0x000500c4u, 0x00000017u, 0x00000f30u, 0x00000f27u, 0x000000d3u, 0x00050041u, 0x00000255u, 0x00000f31u, 0x00000e76u, 0x00000198u, 0x0004003du, 0x0000000bu, 0x00000f32u, 0x00000f31u, 0x00040072u, 0x00000017u, 0x00000f33u, 0x00000f32u, 0x000500c5u, 0x00000017u, 0x00000f34u, 0x00000f30u, 0x00000f33u, 0x0005005fu, 0x0000025au, 0x00000f35u, 0x00000f2eu, 0x00000f34u, 0x00050051u, 0x00000006u, 0x00000f36u, 0x00000f35u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000f37u, 0x00000f36u, 0x00050041u, 0x00000046u, 0x00000f38u, 0x00000e73u, 0x00000198u, 0x0003003eu, 0x00000f38u, 0x00000f37u, 0x00050041u, 0x00000255u, 0x00000f3cu, 0x00000e76u, 0x000001bcu, 0x0004003du, 0x0000000bu, 0x00000f3du, 0x00000f3cu, 0x00040072u, 0x00000017u, 0x00000f3eu, 0x00000f3du, 0x000500c5u, 0x00000017u, 0x00000f3fu, 0x00000f30u, 0x00000f3eu, 0x0005005fu, 0x0000025au, 0x00000f40u, 0x00000f2eu, 0x00000f3fu, 0x00050051u, 0x00000006u, 0x00000f41u, 0x00000f40u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000f42u, 0x00000f41u, 0x00050041u, 0x00000046u, 0x00000f43u, 0x00000e73u, 0x000001bcu, 0x0003003eu, 0x00000f43u, 0x00000f42u, 0x00050041u, 0x00000255u, 0x00000f47u, 0x00000e76u, 0x00000170u, 0x0004003du, 0x0000000bu, 0x00000f48u, 0x00000f47u, 0x00040072u, 0x00000017u, 0x00000f49u, 0x00000f48u, 0x000500c5u, 0x00000017u, 0x00000f4au, 0x00000f30u, 0x00000f49u, 0x0005005fu, 0x0000025au, 0x00000f4bu, 0x00000f2eu, 0x00000f4au, 0x00050051u, 0x00000006u, 0x00000f4cu, 0x00000f4bu, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000f4du, 0x00000f4cu, 0x00050041u, 0x00000046u, 0x00000f4eu, 0x00000e73u, 0x00000170u, 0x0003003eu, 0x00000f4eu, 0x00000f4du, 0x000200f9u, 0x00000f16u, 0x000200f8u, 0x00000f17u, 0x0004003du, 0x00000218u, 0x00000f19u, 0x00000e76u, 0x000500c3u, 0x00000218u, 0x00000f1bu, 0x00000f19u, 0x000019fau, 0x00040072u, 0x0000012au, 0x00000f1cu, 0x00000f1bu, 0x0004007cu, 0x0000001bu, 0x00000f1du, 0x00000f1cu, 0x0003003eu, 0x00000e73u, 0x00000f1du, 0x000200f9u, 0x00000f16u, 0x000200f8u, 0x00000f16u, 0x0004003du, 0x0000001bu, 0x00000f4fu, 0x00000e73u, 0x000500c7u, 0x0000001bu, 0x00000f51u, 0x00000f4fu, 0x000019fbu, 0x0003003eu, 0x00000e70u, 0x000002bcu, 0x0003003eu, 0x00000e71u, 0x00000f51u, 0x000200f9u, 0x00000e79u, 0x000200f8u, 0x00000e79u, 0x000900f5u, 0x00000008u, 0x0000195fu, 0x00001516u, 0x00000e98u, 0x00001516u, 0x00000eccu, 0x0000155au, 0x00000f16u, 0x000900f5u, 0x00000008u, 0x00001944u, 0x000014ecu, 0x00000e98u, 0x000014ecu, 0x00000eccu, 0x0000152fu, 0x00000f16u, 0x000900f5u, 0x0000001bu, 0x0000156cu, 0x00001536u, 0x00000e98u, 0x00000ecdu, 0x00000eccu, 0x00000f51u, 0x00000f16u, 0x0003003eu, 0x00000e78u, 0x0000156cu, 0x0003003eu, 0x00000b89u, 0x0000156cu, 0x000300f7u, 0x00000c1fu, 0x00000000u, 0x000400fau, 0x00000bd0u, 0x00000c20u, 0x00000c1fu, 0x000200f8u, 0x00000c20u, 0x00040071u, 0x000003acu, 0x00000c22u, 0x0000156cu, 0x0004007cu, 0x00000018u, 0x00000c23u, 0x00000c22u, 0x0003003eu, 0x00000b92u, 0x00000c23u, 0x0003003eu, 0x00000b93u, 0x00000ba0u, 0x00060050u, 0x00000018u, 0x00000f59u, 0x00000ba0u, 0x00000ba0u, 0x00000ba0u, 0x000500c3u, 0x00000018u, 0x00000f5au, 0x00000f59u, 0x00000101u, 0x000500c7u, 0x00000018u, 0x00000f5cu, 0x00000f5au, 0x000019f6u, 0x0003003eu, 0x00000f53u, 0x00000f5cu, 0x000500c7u, 0x00000018u, 0x00000f5fu, 0x00000c23u, 0x000019f7u, 0x00050080u, 0x00000018u, 0x00000f61u, 0x00000f5fu, 0x000019f8u, 0x000500adu, 0x00000111u, 0x00000f63u, 0x00000c23u, 0x00000110u, 0x000600a9u, 0x00000018u, 0x00000f64u, 0x00000f63u, 0x0000010du, 0x00000f61u, 0x0003003eu, 0x00000f54u, 0x00000f64u, 0x000500c7u, 0x00000018u, 0x00000f68u, 0x00000c23u, 0x000019f6u, 0x00050082u, 0x00000018u, 0x00000f69u, 0x00000f5cu, 0x00000f68u, 0x000500c3u, 0x00000018u, 0x00000f6bu, 0x00000f69u, 0x000019f9u, 0x0003003eu, 0x00000f55u, 0x00000f6bu, 0x00050082u, 0x00000018u, 0x00000f6eu, 0x00000f64u, 0x00000c23u, 0x0003003eu, 0x00000f56u, 0x00000f6eu, 0x000500c7u, 0x00000018u, 0x00000f72u, 0x00000f6eu, 0x00000f6bu, 0x00050080u, 0x00000018u, 0x00000f73u, 0x00000c23u, 0x00000f72u, 0x0003003eu, 0x00000f54u, 0x00000f73u, 0x000500c7u, 0x00000018u, 0x00000f76u, 0x00000f73u, 0x0000010du, 0x00040072u, 0x0000012au, 0x00000f77u, 0x00000f76u, 0x0004007cu, 0x0000001bu, 0x00000f78u, 0x00000f77u, 0x0003003eu, 0x00000f57u, 0x00000f78u, 0x0003003eu, 0x00000b89u, 0x00000f78u, 0x000200f9u, 0x00000c1fu, 0x000200f8u, 0x00000c1fu, 0x000700f5u, 0x0000001bu, 0x00001634u, 0x0000156cu, 0x00000e79u, 0x00000f78u, 0x00000c20u, 0x00040071u, 0x00000006u, 0x00000c2bu, 0x00000c77u, 0x0004007cu, 0x00000017u, 0x00000c2cu, 0x00000c2bu, 0x0003003eu, 0x00000b95u, 0x00001328u, 0x0003003eu, 0x00000b96u, 0x00000be0u, 0x0003003eu, 0x00000b97u, 0x0000132eu, 0x0003003eu, 0x00000b98u, 0x00000c2cu, 0x0003003eu, 0x00000f79u, 0x000000abu, 0x000300f7u, 0x00000f7cu, 0x00000000u, 0x000b00fbu, 0x00000c2cu, 0x00000f7cu, 0x00000000u, 0x00000f7du, 0x00000001u, 0x00000f7eu, 0x00000002u, 0x00000f7fu, 0x00000003u, 0x00000f80u, 0x000200f8u, 0x00000f80u, 0x0003003eu, 0x00000f79u, 0x00000be0u, 0x000200f9u, 0x00000f7cu, 0x000200f8u, 0x00000f7fu, 0x0003003eu, 0x00000f79u, 0x000000c7u, 0x000200f9u, 0x00000f7cu, 0x000200f8u, 0x00000f7eu, 0x00050080u, 0x00000017u, 0x00000f8eu, 0x00001328u, 0x00000be0u, 0x000500c7u, 0x00000017u, 0x00000f8fu, 0x00000f8eu, 0x000000c7u, 0x0003003eu, 0x00000f79u, 0x00000f8fu, 0x000200f9u, 0x00000f7cu, 0x000200f8u, 0x00000f7du, 0x000300f7u, 0x00000f82u, 0x00000000u, 0x000400fau, 0x0000132eu, 0x00000f83u, 0x00000f84u, 0x000200f8u, 0x00000f84u, 0x00050082u, 0x00000017u, 0x00000f8au, 0x00001328u, 0x000000b5u, 0x000500c7u, 0x00000017u, 0x00000f8bu, 0x00000f8au, 0x000000c7u, 0x0003003eu, 0x00000f79u, 0x00000f8bu, 0x000200f9u, 0x00000f82u, 0x000200f8u, 0x00000f83u, 0x00050080u, 0x00000017u, 0x00000f87u, 0x00000be0u, 0x00001328u, 0x0007000cu, 0x00000017u, 0x00000f88u, 0x00000001u, 0x00000027u, 0x000000c7u, 0x00000f87u, 0x0003003eu, 0x00000f79u, 0x00000f88u, 0x000200f9u, 0x00000f82u, 0x000200f8u, 0x00000f82u, 0x000700f5u, 0x00000017u, 0x00001632u, 0x00000f88u, 0x00000f83u, 0x00000f8bu, 0x00000f84u, 0x000200f9u, 0x00000f7cu, 0x000200f8u, 0x00000f7cu, 0x000d00f5u, 0x00000017u, 0x00001631u, 0x000000abu, 0x00000c1fu, 0x00001632u, 0x00000f82u, 0x00000f8fu, 0x00000f7eu, 0x000000c7u, 0x00000f7fu, 0x00000be0u, 0x00000f80u, 0x0003003eu, 0x00000f7au, 0x00001631u, 0x0003003eu, 0x00000b94u, 0x00001631u, 0x000500c4u, 0x00000017u, 0x00000c32u, 0x00001631u, 0x000000c1u, 0x00040072u, 0x00000129u, 0x00000c33u, 0x00000c32u, 0x0004007cu, 0x00000008u, 0x00000c34u, 0x00000c33u, 0x00050051u, 0x00000008u, 0x00000c35u, 0x00001634u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000c36u, 0x00001634u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000c37u, 0x00001634u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000c38u, 0x00000c35u, 0x00000c36u, 0x00000c37u, 0x00000c34u, 0x0003003eu, 0x00000b99u, 0x00000c38u, 0x000300f7u, 0x00000f92u, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000f93u, 0x00000f94u, 0x000200f8u, 0x00000f94u, 0x0003003eu, 0x0000038bu, 0x00000c38u, 0x000200f9u, 0x00000f92u, 0x000200f8u, 0x00000f93u, 0x0008004fu, 0x0000001bu, 0x00000f96u, 0x00000c38u, 0x00000c38u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000f97u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000f98u, 0x00000f97u, 0x00000c38u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000f98u, 0x000200f9u, 0x00000f92u, 0x000200f8u, 0x00000f92u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000300f7u, 0x00000c3bu, 0x00000000u, 0x000400fau, 0x00000bbcu, 0x00000c3cu, 0x00000c3du, 0x000200f8u, 0x00000c3du, 0x000300f7u, 0x00000c45u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000c46u, 0x00000c45u, 0x000200f8u, 0x00000c46u, 0x000300f7u, 0x00000fe0u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000fe0u, 0x00000002u, 0x00000fe1u, 0x00000003u, 0x00000fe2u, 0x000200f8u, 0x00000fe2u, 0x0004003du, 0x00000009u, 0x00000fffu, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00001000u, 0x00000fffu, 0x00000fffu, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00001001u, 0x00001000u, 0x0003003eu, 0x00000fddu, 0x00001001u, 0x00050041u, 0x00000007u, 0x00001002u, 0x00000fddu, 0x00000198u, 0x0004003du, 0x00000006u, 0x00001003u, 0x00001002u, 0x000500c4u, 0x00000006u, 0x00001004u, 0x00001003u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00001005u, 0x00000fddu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00001006u, 0x00001005u, 0x000500c5u, 0x00000006u, 0x00001007u, 0x00001004u, 0x00001006u, 0x0003003eu, 0x00000fdeu, 0x00001007u, 0x000500c7u, 0x00000006u, 0x00001009u, 0x00001007u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x0000100au, 0x00001009u, 0x000001c4u, 0x0003003eu, 0x00000fdfu, 0x0000100au, 0x000500c2u, 0x00000006u, 0x0000100cu, 0x00001007u, 0x00000170u, 0x00040071u, 0x0000000au, 0x0000100du, 0x0000100cu, 0x0003003eu, 0x00000424u, 0x0000100du, 0x000500c7u, 0x00000006u, 0x0000100fu, 0x00001007u, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x00001010u, 0x0000100fu, 0x00000170u, 0x000500c5u, 0x00000006u, 0x00001012u, 0x00001010u, 0x0000100au, 0x00040071u, 0x00000008u, 0x00001013u, 0x00001012u, 0x0003003eu, 0x00000405u, 0x00001013u, 0x000200f9u, 0x00000fe0u, 0x000200f8u, 0x00000fe1u, 0x00050041u, 0x00000404u, 0x00000fe3u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000fe4u, 0x00000fe3u, 0x000500c2u, 0x00000008u, 0x00000fe5u, 0x00000fe4u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000fe6u, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000fe7u, 0x00000fe6u, 0x000500c7u, 0x00000008u, 0x00000fe8u, 0x00000fe7u, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x00000fe9u, 0x00000fe5u, 0x00000fe8u, 0x0003003eu, 0x00000405u, 0x00000fe9u, 0x00050041u, 0x00000404u, 0x00000feau, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000febu, 0x00000feau, 0x00040071u, 0x00000006u, 0x00000fecu, 0x00000febu, 0x000500c7u, 0x00000006u, 0x00000fedu, 0x00000fecu, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000feeu, 0x00000fedu, 0x00000413u, 0x0003003eu, 0x00000fdcu, 0x00000feeu, 0x00050041u, 0x00000404u, 0x00000fefu, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000ff0u, 0x00000fefu, 0x00040071u, 0x00000006u, 0x00000ff1u, 0x00000ff0u, 0x000500c7u, 0x00000006u, 0x00000ff2u, 0x00000ff1u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000ff3u, 0x00000ff2u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x00000ff5u, 0x00000feeu, 0x00000ff3u, 0x0003003eu, 0x00000fdcu, 0x00000ff5u, 0x0004003du, 0x00000008u, 0x00000ff7u, 0x00000fe6u, 0x00040071u, 0x00000006u, 0x00000ff8u, 0x00000ff7u, 0x000500c7u, 0x00000006u, 0x00000ff9u, 0x00000ff8u, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000ffau, 0x00000ff9u, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000ffcu, 0x00000ff5u, 0x00000ffau, 0x0003003eu, 0x00000fdcu, 0x00000ffcu, 0x00040071u, 0x0000000au, 0x00000ffeu, 0x00000ffcu, 0x0003003eu, 0x00000424u, 0x00000ffeu, 0x000200f9u, 0x00000fe0u, 0x000200f8u, 0x00000fe0u, 0x000200f9u, 0x00000c45u, 0x000200f8u, 0x00000c45u, 0x000200f9u, 0x00000c3bu, 0x000200f8u, 0x00000c3cu, 0x0003003eu, 0x00000b9au, 0x00000b9du, 0x00050082u, 0x00000017u, 0x00000fa0u, 0x0000014bu, 0x00000b9du, 0x0007000cu, 0x00000017u, 0x00000fa1u, 0x00000001u, 0x0000002au, 0x00000fa0u, 0x000000b5u, 0x0003003eu, 0x00000f9au, 0x00000fa1u, 0x0006000cu, 0x00000017u, 0x00000fa3u, 0x00000001u, 0x0000004au, 0x00000fa1u, 0x00050082u, 0x00000017u, 0x00000fa4u, 0x00000150u, 0x00000fa3u, 0x0003003eu, 0x00000f9bu, 0x00000fa4u, 0x0008000cu, 0x00000017u, 0x00000fa6u, 0x00000001u, 0x0000002du, 0x00000fa4u, 0x000000abu, 0x000000c7u, 0x0003003eu, 0x00000f9bu, 0x00000fa6u, 0x00050082u, 0x00000017u, 0x00000fa8u, 0x000000c4u, 0x00000fa6u, 0x0007000cu, 0x00000017u, 0x00000fa9u, 0x00000001u, 0x0000002au, 0x00000fa8u, 0x000000abu, 0x0003003eu, 0x00000f9cu, 0x00000fa9u, 0x000500c3u, 0x00000017u, 0x00000facu, 0x00000b9du, 0x00000fa9u, 0x000500c7u, 0x00000017u, 0x00000fadu, 0x00000facu, 0x00000138u, 0x0003003eu, 0x00000f9du, 0x00000fadu, 0x000500c4u, 0x00000017u, 0x00000fafu, 0x00000fa6u, 0x000000d3u, 0x00050080u, 0x00000017u, 0x00000fb1u, 0x00000fafu, 0x00000fadu, 0x00040072u, 0x0000000bu, 0x00000fb2u, 0x00000fb1u, 0x0004007cu, 0x0000000au, 0x00000fb3u, 0x00000fb2u, 0x0003003eu, 0x00000f9eu, 0x00000fb3u, 0x0003003eu, 0x00000424u, 0x00000fb3u, 0x0003003eu, 0x00000405u, 0x00000c65u, 0x0003003eu, 0x00000574u, 0x000002bcu, 0x000300f7u, 0x00000c42u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000c43u, 0x00000c42u, 0x000200f8u, 0x00000c43u, 0x0004003du, 0x0000000au, 0x00000fb5u, 0x00000424u, 0x00040071u, 0x00000006u, 0x00000fb6u, 0x00000fb5u, 0x000500c4u, 0x00000006u, 0x00000fb7u, 0x00000fb6u, 0x00000420u, 0x0004003du, 0x00000008u, 0x00000fb8u, 0x00000405u, 0x00040071u, 0x00000006u, 0x00000fb9u, 0x00000fb8u, 0x000500c5u, 0x00000006u, 0x00000fbau, 0x00000fb7u, 0x00000fb9u, 0x0003003eu, 0x00000fb4u, 0x00000fbau, 0x000300f7u, 0x00000fbbu, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000fbbu, 0x00000002u, 0x00000fbcu, 0x00000003u, 0x00000fbdu, 0x000200f8u, 0x00000fbdu, 0x000500c2u, 0x00000006u, 0x00000fd3u, 0x00000fbau, 0x0000044du, 0x000500c7u, 0x00000006u, 0x00000fd4u, 0x00000fd3u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x00000fd5u, 0x00000fd4u, 0x00050041u, 0x00000404u, 0x00000fd6u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000fd6u, 0x00000fd5u, 0x000500c2u, 0x00000006u, 0x00000fd8u, 0x00000fbau, 0x00000170u, 0x000500c7u, 0x00000006u, 0x00000fd9u, 0x00000fd8u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x00000fdau, 0x00000fd9u, 0x00050041u, 0x00000404u, 0x00000fdbu, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x00000fdbu, 0x00000fdau, 0x000200f9u, 0x00000fbbu, 0x000200f8u, 0x00000fbcu, 0x000500c2u, 0x00000006u, 0x00000fbfu, 0x00000fbau, 0x0000044du, 0x000500c7u, 0x00000006u, 0x00000fc0u, 0x00000fbfu, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000fc1u, 0x00000fc0u, 0x00050041u, 0x00000404u, 0x00000fc2u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000fc2u, 0x00000fc1u, 0x000500c2u, 0x00000006u, 0x00000fc4u, 0x00000fbau, 0x00000453u, 0x000500c7u, 0x00000006u, 0x00000fc5u, 0x00000fc4u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000fc6u, 0x00000fc5u, 0x00050041u, 0x00000404u, 0x00000fc7u, 0x0000038bu, 0x000001bcu, 0x0003003eu, 0x00000fc7u, 0x00000fc6u, 0x000500c2u, 0x00000006u, 0x00000fc9u, 0x00000fbau, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000fcau, 0x00000fc9u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000fcbu, 0x00000fcau, 0x00050041u, 0x00000404u, 0x00000fccu, 0x0000038bu, 0x00000170u, 0x0003003eu, 0x00000fccu, 0x00000fcbu, 0x000500c7u, 0x00000006u, 0x00000fceu, 0x00000fbau, 0x0000045eu, 0x000500c4u, 0x00000006u, 0x00000fcfu, 0x00000fceu, 0x00000453u, 0x00040071u, 0x00000008u, 0x00000fd0u, 0x00000fcfu, 0x00050041u, 0x00000404u, 0x00000fd1u, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x00000fd1u, 0x00000fd0u, 0x000200f9u, 0x00000fbbu, 0x000200f8u, 0x00000fbbu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000c42u, 0x000200f8u, 0x00000c42u, 0x000200f9u, 0x00000c3bu, 0x000200f8u, 0x00000c3bu, 0x000200f9u, 0x00000bfau, 0x000200f8u, 0x00000bfau, 0x000700f5u, 0x0000001bu, 0x00001974u, 0x00001541u, 0x00000bf2u, 0x00001536u, 0x00000c3bu, 0x000700f5u, 0x00000008u, 0x00001959u, 0x00001516u, 0x00000bf2u, 0x0000195fu, 0x00000c3bu, 0x000700f5u, 0x00000008u, 0x0000193eu, 0x000014ecu, 0x00000bf2u, 0x00001944u, 0x00000c3bu, 0x000700f5u, 0x0000001bu, 0x00001916u, 0x0000140fu, 0x00000bf2u, 0x0000191eu, 0x00000c3bu, 0x000700f5u, 0x00000008u, 0x000018eeu, 0x000013f1u, 0x00000bf2u, 0x000018f6u, 0x00000c3bu, 0x000700f5u, 0x00000008u, 0x000018c6u, 0x000013d3u, 0x00000bf2u, 0x000018ceu, 0x00000c3bu, 0x000200f9u, 0x000008cbu, 0x000200f8u, 0x000008cau, 0x00060041u, 0x000003f3u, 0x000008d2u, 0x000008d0u, 0x000000abu, 0x000008acu, 0x0004003du, 0x00000006u, 0x000008d3u, 0x000008d2u, 0x0003003eu, 0x000008ccu, 0x000008d3u, 0x0003003eu, 0x000008d4u, 0x000008d3u, 0x0003003eu, 0x000008d6u, 0x000008a3u, 0x000300f7u, 0x00000aedu, 0x00000000u, 0x000900fbu, 0x00000372u, 0x00000aedu, 0x00000000u, 0x00000aeeu, 0x00000001u, 0x00000aefu, 0x00000002u, 0x00000af0u, 0x000200f8u, 0x00000af0u, 0x000500c2u, 0x00000006u, 0x00000af8u, 0x000008d3u, 0x000000cau, 0x000500c7u, 0x00000006u, 0x00000af9u, 0x00000af8u, 0x000003b7u, 0x0003003eu, 0x00000ae8u, 0x00000af9u, 0x000500c2u, 0x00000006u, 0x00000afbu, 0x000008d3u, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x00000afcu, 0x00000afbu, 0x000003b7u, 0x0003003eu, 0x00000ae9u, 0x00000afcu, 0x000500c4u, 0x00000006u, 0x00000afeu, 0x000008d3u, 0x000000b8u, 0x000500c7u, 0x00000006u, 0x00000affu, 0x00000afeu, 0x000003b7u, 0x0003003eu, 0x00000aeau, 0x00000affu, 0x000500c7u, 0x00000006u, 0x00000b01u, 0x000008d3u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000b02u, 0x00000b01u, 0x000006a2u, 0x0003003eu, 0x00000aebu, 0x00000b02u, 0x00040071u, 0x00000008u, 0x00000b04u, 0x00000af9u, 0x00040071u, 0x00000008u, 0x00000b06u, 0x00000afcu, 0x00040071u, 0x00000008u, 0x00000b08u, 0x00000affu, 0x00040071u, 0x00000008u, 0x00000b0au, 0x00000b02u, 0x00070050u, 0x00000009u, 0x00000b0bu, 0x00000b04u, 0x00000b06u, 0x00000b08u, 0x00000b0au, 0x0003003eu, 0x00000aecu, 0x00000b0bu, 0x000300f7u, 0x00000b18u, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000b19u, 0x00000b1au, 0x000200f8u, 0x00000b1au, 0x0003003eu, 0x0000038bu, 0x00000b0bu, 0x000200f9u, 0x00000b18u, 0x000200f8u, 0x00000b19u, 0x0008004fu, 0x0000001bu, 0x00000b1cu, 0x00000b0bu, 0x00000b0bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000b1du, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000b1eu, 0x00000b1du, 0x00000b0bu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000b1eu, 0x000200f9u, 0x00000b18u, 0x000200f8u, 0x00000b18u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000aedu, 0x000200f8u, 0x00000aefu, 0x000500c7u, 0x00000006u, 0x00000af2u, 0x000008d3u, 0x000003ddu, 0x0003003eu, 0x000008d4u, 0x00000af2u, 0x00040071u, 0x00000008u, 0x00000af4u, 0x00000af2u, 0x00070050u, 0x00000009u, 0x00000af5u, 0x00000af4u, 0x00000af4u, 0x00000af4u, 0x00000af4u, 0x0003003eu, 0x00000ae7u, 0x00000af5u, 0x000300f7u, 0x00000b10u, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000b11u, 0x00000b12u, 0x000200f8u, 0x00000b12u, 0x0003003eu, 0x0000038bu, 0x00000af5u, 0x000200f9u, 0x00000b10u, 0x000200f8u, 0x00000b11u, 0x0008004fu, 0x0000001bu, 0x00000b14u, 0x00000af5u, 0x00000af5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000b15u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000b16u, 0x00000b15u, 0x00000af5u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000b16u, 0x000200f9u, 0x00000b10u, 0x000200f8u, 0x00000b10u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000aedu, 0x000200f8u, 0x00000aeeu, 0x0003003eu, 0x0000038bu, 0x00000689u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000aedu, 0x000200f8u, 0x00000aedu, 0x000300f7u, 0x00000b0du, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000b0eu, 0x00000b0du, 0x000200f8u, 0x00000b0eu, 0x000300f7u, 0x00000b24u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000b24u, 0x00000002u, 0x00000b25u, 0x00000003u, 0x00000b26u, 0x000200f8u, 0x00000b26u, 0x0004003du, 0x00000009u, 0x00000b43u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000b44u, 0x00000b43u, 0x00000b43u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000b45u, 0x00000b44u, 0x0003003eu, 0x00000b21u, 0x00000b45u, 0x00050041u, 0x00000007u, 0x00000b46u, 0x00000b21u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000b47u, 0x00000b46u, 0x000500c4u, 0x00000006u, 0x00000b48u, 0x00000b47u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000b49u, 0x00000b21u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000b4au, 0x00000b49u, 0x000500c5u, 0x00000006u, 0x00000b4bu, 0x00000b48u, 0x00000b4au, 0x0003003eu, 0x00000b22u, 0x00000b4bu, 0x000500c7u, 0x00000006u, 0x00000b4du, 0x00000b4bu, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000b4eu, 0x00000b4du, 0x000001c4u, 0x0003003eu, 0x00000b23u, 0x00000b4eu, 0x000500c2u, 0x00000006u, 0x00000b50u, 0x00000b4bu, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000b51u, 0x00000b50u, 0x0003003eu, 0x00000424u, 0x00000b51u, 0x000500c7u, 0x00000006u, 0x00000b53u, 0x00000b4bu, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x00000b54u, 0x00000b53u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x00000b56u, 0x00000b54u, 0x00000b4eu, 0x00040071u, 0x00000008u, 0x00000b57u, 0x00000b56u, 0x0003003eu, 0x00000405u, 0x00000b57u, 0x000200f9u, 0x00000b24u, 0x000200f8u, 0x00000b25u, 0x00050041u, 0x00000404u, 0x00000b27u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000b28u, 0x00000b27u, 0x000500c2u, 0x00000008u, 0x00000b29u, 0x00000b28u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000b2au, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000b2bu, 0x00000b2au, 0x000500c7u, 0x00000008u, 0x00000b2cu, 0x00000b2bu, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x00000b2du, 0x00000b29u, 0x00000b2cu, 0x0003003eu, 0x00000405u, 0x00000b2du, 0x00050041u, 0x00000404u, 0x00000b2eu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000b2fu, 0x00000b2eu, 0x00040071u, 0x00000006u, 0x00000b30u, 0x00000b2fu, 0x000500c7u, 0x00000006u, 0x00000b31u, 0x00000b30u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000b32u, 0x00000b31u, 0x00000413u, 0x0003003eu, 0x00000b20u, 0x00000b32u, 0x00050041u, 0x00000404u, 0x00000b33u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000b34u, 0x00000b33u, 0x00040071u, 0x00000006u, 0x00000b35u, 0x00000b34u, 0x000500c7u, 0x00000006u, 0x00000b36u, 0x00000b35u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000b37u, 0x00000b36u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x00000b39u, 0x00000b32u, 0x00000b37u, 0x0003003eu, 0x00000b20u, 0x00000b39u, 0x0004003du, 0x00000008u, 0x00000b3bu, 0x00000b2au, 0x00040071u, 0x00000006u, 0x00000b3cu, 0x00000b3bu, 0x000500c7u, 0x00000006u, 0x00000b3du, 0x00000b3cu, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000b3eu, 0x00000b3du, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000b40u, 0x00000b39u, 0x00000b3eu, 0x0003003eu, 0x00000b20u, 0x00000b40u, 0x00040071u, 0x0000000au, 0x00000b42u, 0x00000b40u, 0x0003003eu, 0x00000424u, 0x00000b42u, 0x000200f9u, 0x00000b24u, 0x000200f8u, 0x00000b24u, 0x000200f9u, 0x00000b0du, 0x000200f8u, 0x00000b0du, 0x000200f9u, 0x000008cbu, 0x000200f8u, 0x000008cbu, 0x000700f5u, 0x0000001bu, 0x0000196eu, 0x00001541u, 0x00000b0du, 0x00001974u, 0x00000bfau, 0x000700f5u, 0x00000008u, 0x00001953u, 0x00001516u, 0x00000b0du, 0x00001959u, 0x00000bfau, 0x000700f5u, 0x00000008u, 0x00001938u, 0x000014ecu, 0x00000b0du, 0x0000193eu, 0x00000bfau, 0x000700f5u, 0x0000001bu, 0x00001910u, 0x0000140fu, 0x00000b0du, 0x00001916u, 0x00000bfau, 0x000700f5u, 0x00000008u, 0x000018e8u, 0x000013f1u, 0x00000b0du, 0x000018eeu, 0x00000bfau, 0x000700f5u, 0x00000008u, 0x000018c0u, 0x000013d3u, 0x00000b0du, 0x000018c6u, 0x00000bfau, 0x000700f5u, 0x0000001bu, 0x00001882u, 0x000012ddu, 0x00000b0du, 0x000012dbu, 0x00000bfau, 0x000200f9u, 0x000008c0u, 0x000200f8u, 0x000008bfu, 0x00070041u, 0x000003f3u, 0x000008c3u, 0x000000aau, 0x000000abu, 0x000008a3u, 0x000000d0u, 0x0004003du, 0x00000006u, 0x000008c4u, 0x000008c3u, 0x0003003eu, 0x000008c2u, 0x000008c4u, 0x000300f7u, 0x00000a31u, 0x00000000u, 0x000b00fbu, 0x00000372u, 0x00000a31u, 0x00000004u, 0x00000a32u, 0x00000002u, 0x00000a33u, 0x00000003u, 0x00000a34u, 0x00000001u, 0x00000a35u, 0x000200f8u, 0x00000a35u, 0x0004003du, 0x00000006u, 0x00000a80u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000a81u, 0x00000a80u, 0x000001c4u, 0x000500c6u, 0x00000006u, 0x00000a82u, 0x00000a81u, 0x000001c4u, 0x00050084u, 0x00000006u, 0x00000a83u, 0x00000a82u, 0x000003b0u, 0x000500c2u, 0x00000006u, 0x00000a85u, 0x000008c4u, 0x00000a83u, 0x0003003eu, 0x000008c2u, 0x00000a85u, 0x000500c7u, 0x00000006u, 0x00000a87u, 0x00000a85u, 0x000003ddu, 0x0003003eu, 0x000008c2u, 0x00000a87u, 0x00040071u, 0x00000008u, 0x00000a89u, 0x00000a87u, 0x00070050u, 0x00000009u, 0x00000a8au, 0x00000a89u, 0x00000a89u, 0x00000a89u, 0x00000a89u, 0x0003003eu, 0x00000a30u, 0x00000a8au, 0x000300f7u, 0x00000aa7u, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000aa8u, 0x00000aa9u, 0x000200f8u, 0x00000aa9u, 0x0003003eu, 0x0000038bu, 0x00000a8au, 0x000200f9u, 0x00000aa7u, 0x000200f8u, 0x00000aa8u, 0x0008004fu, 0x0000001bu, 0x00000aabu, 0x00000a8au, 0x00000a8au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000aacu, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000aadu, 0x00000aacu, 0x00000a8au, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000aadu, 0x000200f9u, 0x00000aa7u, 0x000200f8u, 0x00000aa7u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a31u, 0x000200f8u, 0x00000a34u, 0x0004003du, 0x00000006u, 0x00000a68u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000a69u, 0x00000a68u, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x00000a6au, 0x00000a69u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000a6bu, 0x00000a6au, 0x000003f9u, 0x000500c2u, 0x00000006u, 0x00000a6du, 0x000008c4u, 0x00000a6bu, 0x0003003eu, 0x000008c2u, 0x00000a6du, 0x000500c7u, 0x00000006u, 0x00000a6fu, 0x00000a6du, 0x000006fdu, 0x0003003eu, 0x000008c2u, 0x00000a6fu, 0x000500c2u, 0x00000006u, 0x00000a71u, 0x00000a6fu, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000a72u, 0x00000a71u, 0x000003ddu, 0x0003003eu, 0x00000a2du, 0x00000a72u, 0x000500c2u, 0x00000006u, 0x00000a74u, 0x00000a6fu, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000a75u, 0x00000a74u, 0x000003ddu, 0x0003003eu, 0x00000a2eu, 0x00000a75u, 0x00040071u, 0x00000008u, 0x00000a77u, 0x00000a72u, 0x00040071u, 0x00000008u, 0x00000a7du, 0x00000a75u, 0x00070050u, 0x00000009u, 0x00000a7eu, 0x00000a77u, 0x00000a77u, 0x00000a77u, 0x00000a7du, 0x0003003eu, 0x00000a2fu, 0x00000a7eu, 0x000300f7u, 0x00000a9fu, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000aa0u, 0x00000aa1u, 0x000200f8u, 0x00000aa1u, 0x0003003eu, 0x0000038bu, 0x00000a7eu, 0x000200f9u, 0x00000a9fu, 0x000200f8u, 0x00000aa0u, 0x0008004fu, 0x0000001bu, 0x00000aa3u, 0x00000a7eu, 0x00000a7eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000aa4u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000aa5u, 0x00000aa4u, 0x00000a7eu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000aa5u, 0x000200f9u, 0x00000a9fu, 0x000200f8u, 0x00000a9fu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a31u, 0x000200f8u, 0x00000a33u, 0x0004003du, 0x00000006u, 0x00000a4cu, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000a4du, 0x00000a4cu, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x00000a4eu, 0x00000a4du, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000a4fu, 0x00000a4eu, 0x000003f9u, 0x000500c2u, 0x00000006u, 0x00000a51u, 0x000008c4u, 0x00000a4fu, 0x0003003eu, 0x000008c2u, 0x00000a51u, 0x000500c2u, 0x00000006u, 0x00000a53u, 0x00000a51u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000a54u, 0x00000a53u, 0x000003b7u, 0x0003003eu, 0x00000a28u, 0x00000a54u, 0x000500c2u, 0x00000006u, 0x00000a56u, 0x00000a51u, 0x000001c4u, 0x000500c7u, 0x00000006u, 0x00000a57u, 0x00000a56u, 0x000003b7u, 0x0003003eu, 0x00000a29u, 0x00000a57u, 0x000500c4u, 0x00000006u, 0x00000a59u, 0x00000a51u, 0x00000170u, 0x000500c7u, 0x00000006u, 0x00000a5au, 0x00000a59u, 0x000003b7u, 0x0003003eu, 0x00000a2au, 0x00000a5au, 0x000500c7u, 0x00000006u, 0x00000a5cu, 0x00000a51u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000a5du, 0x00000a5cu, 0x000006a2u, 0x0003003eu, 0x00000a2bu, 0x00000a5du, 0x00040071u, 0x00000008u, 0x00000a5fu, 0x00000a54u, 0x00040071u, 0x00000008u, 0x00000a61u, 0x00000a57u, 0x00040071u, 0x00000008u, 0x00000a63u, 0x00000a5au, 0x00040071u, 0x00000008u, 0x00000a65u, 0x00000a5du, 0x00070050u, 0x00000009u, 0x00000a66u, 0x00000a5fu, 0x00000a61u, 0x00000a63u, 0x00000a65u, 0x0003003eu, 0x00000a2cu, 0x00000a66u, 0x000300f7u, 0x00000a97u, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000a98u, 0x00000a99u, 0x000200f8u, 0x00000a99u, 0x0003003eu, 0x0000038bu, 0x00000a66u, 0x000200f9u, 0x00000a97u, 0x000200f8u, 0x00000a98u, 0x0008004fu, 0x0000001bu, 0x00000a9bu, 0x00000a66u, 0x00000a66u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a9cu, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000a9du, 0x00000a9cu, 0x00000a66u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000a9du, 0x000200f9u, 0x00000a97u, 0x000200f8u, 0x00000a97u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a31u, 0x000200f8u, 0x00000a32u, 0x000500c2u, 0x00000006u, 0x00000a37u, 0x000008c4u, 0x000003f8u, 0x000500c7u, 0x00000006u, 0x00000a38u, 0x00000a37u, 0x000003ddu, 0x0003003eu, 0x00000a23u, 0x00000a38u, 0x000500c2u, 0x00000006u, 0x00000a3au, 0x000008c4u, 0x000003f9u, 0x000500c7u, 0x00000006u, 0x00000a3bu, 0x00000a3au, 0x000003ddu, 0x0003003eu, 0x00000a24u, 0x00000a3bu, 0x000500c2u, 0x00000006u, 0x00000a3du, 0x000008c4u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000a3eu, 0x00000a3du, 0x000003ddu, 0x0003003eu, 0x00000a25u, 0x00000a3eu, 0x000500c2u, 0x00000006u, 0x00000a40u, 0x000008c4u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000a41u, 0x00000a40u, 0x000003ddu, 0x0003003eu, 0x00000a26u, 0x00000a41u, 0x00040071u, 0x00000008u, 0x00000a43u, 0x00000a38u, 0x00040071u, 0x00000008u, 0x00000a45u, 0x00000a3bu, 0x00040071u, 0x00000008u, 0x00000a47u, 0x00000a3eu, 0x00040071u, 0x00000008u, 0x00000a49u, 0x00000a41u, 0x00070050u, 0x00000009u, 0x00000a4au, 0x00000a43u, 0x00000a45u, 0x00000a47u, 0x00000a49u, 0x0003003eu, 0x00000a27u, 0x00000a4au, 0x000300f7u, 0x00000a8fu, 0x00000000u, 0x000400fau, 0x0000067cu, 0x00000a90u, 0x00000a91u, 0x000200f8u, 0x00000a91u, 0x0003003eu, 0x0000038bu, 0x00000a4au, 0x000200f9u, 0x00000a8fu, 0x000200f8u, 0x00000a90u, 0x0008004fu, 0x0000001bu, 0x00000a93u, 0x00000a4au, 0x00000a4au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000a94u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000a95u, 0x00000a94u, 0x00000a4au, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000a95u, 0x000200f9u, 0x00000a8fu, 0x000200f8u, 0x00000a8fu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000a31u, 0x000200f8u, 0x00000a31u, 0x000300f7u, 0x00000a8cu, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000a8du, 0x00000a8cu, 0x000200f8u, 0x00000a8du, 0x000300f7u, 0x00000ab3u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000ab3u, 0x00000002u, 0x00000ab4u, 0x00000003u, 0x00000ab5u, 0x000200f8u, 0x00000ab5u, 0x0004003du, 0x00000009u, 0x00000ad2u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000ad3u, 0x00000ad2u, 0x00000ad2u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000ad4u, 0x00000ad3u, 0x0003003eu, 0x00000ab0u, 0x00000ad4u, 0x00050041u, 0x00000007u, 0x00000ad5u, 0x00000ab0u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000ad6u, 0x00000ad5u, 0x000500c4u, 0x00000006u, 0x00000ad7u, 0x00000ad6u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000ad8u, 0x00000ab0u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000ad9u, 0x00000ad8u, 0x000500c5u, 0x00000006u, 0x00000adau, 0x00000ad7u, 0x00000ad9u, 0x0003003eu, 0x00000ab1u, 0x00000adau, 0x000500c7u, 0x00000006u, 0x00000adcu, 0x00000adau, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000addu, 0x00000adcu, 0x000001c4u, 0x0003003eu, 0x00000ab2u, 0x00000addu, 0x000500c2u, 0x00000006u, 0x00000adfu, 0x00000adau, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000ae0u, 0x00000adfu, 0x0003003eu, 0x00000424u, 0x00000ae0u, 0x000500c7u, 0x00000006u, 0x00000ae2u, 0x00000adau, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x00000ae3u, 0x00000ae2u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x00000ae5u, 0x00000ae3u, 0x00000addu, 0x00040071u, 0x00000008u, 0x00000ae6u, 0x00000ae5u, 0x0003003eu, 0x00000405u, 0x00000ae6u, 0x000200f9u, 0x00000ab3u, 0x000200f8u, 0x00000ab4u, 0x00050041u, 0x00000404u, 0x00000ab6u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000ab7u, 0x00000ab6u, 0x000500c2u, 0x00000008u, 0x00000ab8u, 0x00000ab7u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000ab9u, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000abau, 0x00000ab9u, 0x000500c7u, 0x00000008u, 0x00000abbu, 0x00000abau, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x00000abcu, 0x00000ab8u, 0x00000abbu, 0x0003003eu, 0x00000405u, 0x00000abcu, 0x00050041u, 0x00000404u, 0x00000abdu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000abeu, 0x00000abdu, 0x00040071u, 0x00000006u, 0x00000abfu, 0x00000abeu, 0x000500c7u, 0x00000006u, 0x00000ac0u, 0x00000abfu, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000ac1u, 0x00000ac0u, 0x00000413u, 0x0003003eu, 0x00000aafu, 0x00000ac1u, 0x00050041u, 0x00000404u, 0x00000ac2u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000ac3u, 0x00000ac2u, 0x00040071u, 0x00000006u, 0x00000ac4u, 0x00000ac3u, 0x000500c7u, 0x00000006u, 0x00000ac5u, 0x00000ac4u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000ac6u, 0x00000ac5u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x00000ac8u, 0x00000ac1u, 0x00000ac6u, 0x0003003eu, 0x00000aafu, 0x00000ac8u, 0x0004003du, 0x00000008u, 0x00000acau, 0x00000ab9u, 0x00040071u, 0x00000006u, 0x00000acbu, 0x00000acau, 0x000500c7u, 0x00000006u, 0x00000accu, 0x00000acbu, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000acdu, 0x00000accu, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000acfu, 0x00000ac8u, 0x00000acdu, 0x0003003eu, 0x00000aafu, 0x00000acfu, 0x00040071u, 0x0000000au, 0x00000ad1u, 0x00000acfu, 0x0003003eu, 0x00000424u, 0x00000ad1u, 0x000200f9u, 0x00000ab3u, 0x000200f8u, 0x00000ab3u, 0x000200f9u, 0x00000a8cu, 0x000200f8u, 0x00000a8cu, 0x000200f9u, 0x000008c0u, 0x000200f8u, 0x000008c0u, 0x000700f5u, 0x0000001bu, 0x00001966u, 0x00001541u, 0x00000a8cu, 0x0000196eu, 0x000008cbu, 0x000700f5u, 0x00000008u, 0x0000194bu, 0x00001516u, 0x00000a8cu, 0x00001953u, 0x000008cbu, 0x000700f5u, 0x00000008u, 0x00001930u, 0x000014ecu, 0x00000a8cu, 0x00001938u, 0x000008cbu, 0x000700f5u, 0x0000001bu, 0x00001908u, 0x0000140fu, 0x00000a8cu, 0x00001910u, 0x000008cbu, 0x000700f5u, 0x00000008u, 0x000018e0u, 0x000013f1u, 0x00000a8cu, 0x000018e8u, 0x000008cbu, 0x000700f5u, 0x00000008u, 0x000018b8u, 0x000013d3u, 0x00000a8cu, 0x000018c0u, 0x000008cbu, 0x000700f5u, 0x0000001bu, 0x0000187au, 0x000012ddu, 0x00000a8cu, 0x00001882u, 0x000008cbu, 0x000200f9u, 0x000008bau, 0x000200f8u, 0x000008bau, 0x000700f5u, 0x0000001bu, 0x00001965u, 0x00001541u, 0x0000088fu, 0x00001966u, 0x000008c0u, 0x000700f5u, 0x00000008u, 0x0000194au, 0x00001516u, 0x0000088fu, 0x0000194bu, 0x000008c0u, 0x000700f5u, 0x00000008u, 0x0000192fu, 0x000014ecu, 0x0000088fu, 0x00001930u, 0x000008c0u, 0x000700f5u, 0x0000001bu, 0x00001907u, 0x0000140fu, 0x0000088fu, 0x00001908u, 0x000008c0u, 0x000700f5u, 0x00000008u, 0x000018dfu, 0x000013f1u, 0x0000088fu, 0x000018e0u, 0x000008c0u, 0x000700f5u, 0x00000008u, 0x000018b7u, 0x000013d3u, 0x0000088fu, 0x000018b8u, 0x000008c0u, 0x000700f5u, 0x0000001bu, 0x00001879u, 0x000012ddu, 0x0000088fu, 0x0000187au, 0x000008c0u, 0x00050080u, 0x00000006u, 0x00000908u, 0x000012cfu, 0x000000b5u, 0x0003003eu, 0x0000087au, 0x00000908u, 0x000200f9u, 0x00000891u, 0x000200f8u, 0x00000891u, 0x000200f9u, 0x0000088eu, 0x000200f8u, 0x00000890u, 0x000200f9u, 0x0000086du, 0x000200f8u, 0x0000086du, 0x000200f9u, 0x0000086au, 0x000200f8u, 0x0000086cu, 0x0003003eu, 0x00000909u, 0x0000085cu, 0x0003003eu, 0x0000090cu, 0x0000085fu, 0x0003003eu, 0x0000090fu, 0x00000862u, 0x0003003eu, 0x00000912u, 0x00000865u, 0x0003003eu, 0x00000915u, 0x00000868u, 0x0004003du, 0x00000074u, 0x0000101eu, 0x00000909u, 0x000500b0u, 0x00000599u, 0x00001022u, 0x0000101eu, 0x0000097fu, 0x0004009bu, 0x00000034u, 0x00001023u, 0x00001022u, 0x000300f7u, 0x00001024u, 0x00000000u, 0x000400fau, 0x00001023u, 0x00001025u, 0x00001024u, 0x000200f8u, 0x00001025u, 0x000500c2u, 0x00000006u, 0x00001027u, 0x0000085fu, 0x000004a9u, 0x0003003eu, 0x00001014u, 0x00001027u, 0x0004003du, 0x00000074u, 0x00001028u, 0x00000909u, 0x00050050u, 0x00000074u, 0x00001029u, 0x0000061cu, 0x0000061cu, 0x000500c7u, 0x00000074u, 0x0000102au, 0x00001028u, 0x00001029u, 0x0003003eu, 0x00001015u, 0x0000102au, 0x0004003du, 0x00000074u, 0x0000102bu, 0x00000909u, 0x00050050u, 0x000005a6u, 0x0000102cu, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x0000102du, 0x0000102bu, 0x0000102cu, 0x0003003eu, 0x00000909u, 0x0000102du, 0x00050041u, 0x00000007u, 0x0000102eu, 0x00001015u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000102fu, 0x0000102eu, 0x00050084u, 0x00000006u, 0x00001030u, 0x0000102fu, 0x00000625u, 0x00050041u, 0x00000007u, 0x00001031u, 0x00001015u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00001032u, 0x00001031u, 0x00050080u, 0x00000006u, 0x00001033u, 0x00001030u, 0x00001032u, 0x0003003eu, 0x00001016u, 0x00001033u, 0x00050041u, 0x00000007u, 0x00001036u, 0x00000909u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00001037u, 0x00001036u, 0x00050084u, 0x00000006u, 0x00001038u, 0x00001027u, 0x00001037u, 0x00050080u, 0x00000006u, 0x00001039u, 0x00000865u, 0x00001038u, 0x00050041u, 0x00000007u, 0x0000103au, 0x00000909u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000103bu, 0x0000103au, 0x00050080u, 0x00000006u, 0x0000103cu, 0x00001039u, 0x0000103bu, 0x0003003eu, 0x00001017u, 0x0000103cu, 0x0003003eu, 0x00001018u, 0x0000103cu, 0x0003003eu, 0x00001019u, 0x00001033u, 0x0004003du, 0x00000034u, 0x00001058u, 0x00000471u, 0x000300f7u, 0x00001059u, 0x00000000u, 0x000400fau, 0x00001058u, 0x0000105au, 0x00001059u, 0x000200f8u, 0x0000105au, 0x000300f7u, 0x0000105bu, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x0000105bu, 0x00000000u, 0x0000105cu, 0x00000001u, 0x0000105du, 0x00000002u, 0x0000105eu, 0x00000003u, 0x0000105fu, 0x00000004u, 0x00001060u, 0x000200f8u, 0x00001060u, 0x000500c7u, 0x00000006u, 0x000010ecu, 0x0000103cu, 0x000003e5u, 0x0003003eu, 0x00001018u, 0x000010ecu, 0x00050084u, 0x00000006u, 0x000010eeu, 0x00001033u, 0x00000536u, 0x00050080u, 0x00000006u, 0x000010f0u, 0x000010ecu, 0x000010eeu, 0x0003003eu, 0x00001018u, 0x000010f0u, 0x0004003du, 0x00000009u, 0x000010f1u, 0x0000038bu, 0x00040071u, 0x0000025au, 0x000010f2u, 0x000010f1u, 0x0003003eu, 0x00001056u, 0x000010f2u, 0x00050041u, 0x00000007u, 0x000010f3u, 0x00001056u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000010f4u, 0x000010f3u, 0x000500c4u, 0x00000006u, 0x000010f5u, 0x000010f4u, 0x000003f8u, 0x00050041u, 0x00000007u, 0x000010f6u, 0x00001056u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000010f7u, 0x000010f6u, 0x000500c4u, 0x00000006u, 0x000010f8u, 0x000010f7u, 0x000003f9u, 0x000500c5u, 0x00000006u, 0x000010f9u, 0x000010f5u, 0x000010f8u, 0x00050041u, 0x00000007u, 0x000010fau, 0x00001056u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000010fbu, 0x000010fau, 0x000500c4u, 0x00000006u, 0x000010fcu, 0x000010fbu, 0x000003b0u, 0x000500c5u, 0x00000006u, 0x000010fdu, 0x000010f9u, 0x000010fcu, 0x00050041u, 0x00000007u, 0x000010feu, 0x00001056u, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000010ffu, 0x000010feu, 0x000500c4u, 0x00000006u, 0x00001100u, 0x000010ffu, 0x00000198u, 0x000500c5u, 0x00000006u, 0x00001101u, 0x000010fdu, 0x00001100u, 0x0003003eu, 0x00001057u, 0x00001101u, 0x00060041u, 0x000003f3u, 0x00001104u, 0x000003f1u, 0x000000abu, 0x000010f0u, 0x0003003eu, 0x00001104u, 0x00001101u, 0x00050084u, 0x00000006u, 0x00001106u, 0x00000170u, 0x000010f0u, 0x00050041u, 0x00000404u, 0x00001107u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00001108u, 0x00001107u, 0x00040071u, 0x00000006u, 0x00001109u, 0x00001108u, 0x0004007cu, 0x00000017u, 0x0000110au, 0x00001109u, 0x000500c7u, 0x00000017u, 0x0000110bu, 0x0000110au, 0x000000b5u, 0x00050084u, 0x00000017u, 0x0000110cu, 0x0000110bu, 0x000000bbu, 0x00040072u, 0x00000129u, 0x0000110du, 0x0000110cu, 0x0004007cu, 0x00000008u, 0x0000110eu, 0x0000110du, 0x00060041u, 0x00000387u, 0x0000110fu, 0x00000392u, 0x000000abu, 0x00001106u, 0x0003003eu, 0x0000110fu, 0x0000110eu, 0x00050080u, 0x00000006u, 0x00001112u, 0x00001106u, 0x000001bcu, 0x00050041u, 0x00000404u, 0x00001113u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00001114u, 0x00001113u, 0x00040071u, 0x00000006u, 0x00001115u, 0x00001114u, 0x0004007cu, 0x00000017u, 0x00001116u, 0x00001115u, 0x000500c7u, 0x00000017u, 0x00001117u, 0x00001116u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00001118u, 0x00001117u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00001119u, 0x00001118u, 0x0004007cu, 0x00000008u, 0x0000111au, 0x00001119u, 0x00060041u, 0x00000387u, 0x0000111bu, 0x00000392u, 0x000000abu, 0x00001112u, 0x0003003eu, 0x0000111bu, 0x0000111au, 0x000300f7u, 0x0000111cu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000111du, 0x0000111cu, 0x000200f8u, 0x0000111du, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x0000111fu, 0x000010f0u, 0x0000056au, 0x00060041u, 0x000003f3u, 0x00001120u, 0x000003f1u, 0x000000abu, 0x0000111fu, 0x0003003eu, 0x00001120u, 0x0000056cu, 0x000200f9u, 0x0000111cu, 0x000200f8u, 0x0000111cu, 0x000200f9u, 0x0000105bu, 0x000200f8u, 0x0000105fu, 0x000500c7u, 0x00000006u, 0x000010cbu, 0x0000103cu, 0x00000399u, 0x0003003eu, 0x00001018u, 0x000010cbu, 0x00050084u, 0x00000006u, 0x000010cdu, 0x00001033u, 0x00000510u, 0x00050080u, 0x00000006u, 0x000010cfu, 0x000010cbu, 0x000010cdu, 0x0003003eu, 0x00001018u, 0x000010cfu, 0x0004003du, 0x00000009u, 0x000010d0u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x000010d1u, 0x000010d0u, 0x000010d0u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x000010d2u, 0x000010d1u, 0x0003003eu, 0x00001054u, 0x000010d2u, 0x00050041u, 0x00000007u, 0x000010d3u, 0x00001054u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000010d4u, 0x000010d3u, 0x000500c4u, 0x00000006u, 0x000010d5u, 0x000010d4u, 0x000003b0u, 0x00050041u, 0x00000007u, 0x000010d6u, 0x00001054u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000010d7u, 0x000010d6u, 0x000500c5u, 0x00000006u, 0x000010d8u, 0x000010d5u, 0x000010d7u, 0x0003003eu, 0x00001055u, 0x000010d8u, 0x000500c6u, 0x00000006u, 0x000010dau, 0x000010cfu, 0x000001bcu, 0x00040071u, 0x0000000au, 0x000010dcu, 0x000010d8u, 0x00060041u, 0x000003a8u, 0x000010ddu, 0x000003a5u, 0x000000abu, 0x000010dau, 0x0003003eu, 0x000010ddu, 0x000010dcu, 0x0004003du, 0x00000006u, 0x000010e0u, 0x000010d6u, 0x000500c7u, 0x00000006u, 0x000010e1u, 0x000010e0u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000010e2u, 0x000010e1u, 0x000001c4u, 0x00040071u, 0x00000008u, 0x000010e3u, 0x000010e2u, 0x00060041u, 0x00000387u, 0x000010e4u, 0x00000392u, 0x000000abu, 0x000010cfu, 0x0003003eu, 0x000010e4u, 0x000010e3u, 0x000300f7u, 0x000010e5u, 0x00000000u, 0x000400fau, 0x000004abu, 0x000010e6u, 0x000010e5u, 0x000200f8u, 0x000010e6u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x000010e9u, 0x000010dau, 0x0000052fu, 0x00060041u, 0x000003a8u, 0x000010eau, 0x000003a5u, 0x000000abu, 0x000010e9u, 0x0003003eu, 0x000010eau, 0x0000050au, 0x000200f9u, 0x000010e5u, 0x000200f8u, 0x000010e5u, 0x000200f9u, 0x0000105bu, 0x000200f8u, 0x0000105eu, 0x000500c7u, 0x00000006u, 0x0000109cu, 0x0000103cu, 0x00000399u, 0x0003003eu, 0x00001018u, 0x0000109cu, 0x00050084u, 0x00000006u, 0x0000109eu, 0x00001033u, 0x000004d9u, 0x00050080u, 0x00000006u, 0x000010a0u, 0x0000109cu, 0x0000109eu, 0x0003003eu, 0x00001018u, 0x000010a0u, 0x0004003du, 0x00000009u, 0x000010a1u, 0x0000038bu, 0x00040071u, 0x0000025au, 0x000010a2u, 0x000010a1u, 0x0003003eu, 0x00001051u, 0x000010a2u, 0x0004003du, 0x0000025au, 0x000010a3u, 0x00001051u, 0x0008004fu, 0x000003acu, 0x000010a4u, 0x000010a3u, 0x000010a3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003acu, 0x000010a6u, 0x000010a4u, 0x000019f3u, 0x0004003du, 0x0000025au, 0x000010a7u, 0x00001051u, 0x0009004fu, 0x0000025au, 0x000010a8u, 0x000010a7u, 0x000010a6u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001051u, 0x000010a8u, 0x00050041u, 0x00000007u, 0x000010a9u, 0x00001051u, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000010aau, 0x000010a9u, 0x000500c2u, 0x00000006u, 0x000010abu, 0x000010aau, 0x00000453u, 0x0003003eu, 0x00001052u, 0x000010abu, 0x00050041u, 0x00000007u, 0x000010acu, 0x00001051u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000010adu, 0x000010acu, 0x000500c4u, 0x00000006u, 0x000010aeu, 0x000010adu, 0x000003b0u, 0x00050041u, 0x00000007u, 0x000010afu, 0x00001051u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000010b0u, 0x000010afu, 0x000500c4u, 0x00000006u, 0x000010b1u, 0x000010b0u, 0x000001c4u, 0x000500c5u, 0x00000006u, 0x000010b2u, 0x000010aeu, 0x000010b1u, 0x00050041u, 0x00000007u, 0x000010b3u, 0x00001051u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000010b4u, 0x000010b3u, 0x000500c2u, 0x00000006u, 0x000010b5u, 0x000010b4u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000010b6u, 0x000010b2u, 0x000010b5u, 0x000500c2u, 0x00000006u, 0x000010b8u, 0x000010abu, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000010b9u, 0x000010b6u, 0x000010b8u, 0x0003003eu, 0x00001053u, 0x000010b9u, 0x000500c6u, 0x00000006u, 0x000010bbu, 0x000010a0u, 0x000001bcu, 0x00040071u, 0x0000000au, 0x000010bdu, 0x000010b9u, 0x00060041u, 0x000003a8u, 0x000010beu, 0x000003a5u, 0x000000abu, 0x000010bbu, 0x0003003eu, 0x000010beu, 0x000010bdu, 0x000500c7u, 0x00000006u, 0x000010c1u, 0x000010abu, 0x000001c4u, 0x00040071u, 0x00000008u, 0x000010c2u, 0x000010c1u, 0x00060041u, 0x00000387u, 0x000010c3u, 0x00000392u, 0x000000abu, 0x000010a0u, 0x0003003eu, 0x000010c3u, 0x000010c2u, 0x000300f7u, 0x000010c4u, 0x00000000u, 0x000400fau, 0x000004abu, 0x000010c5u, 0x000010c4u, 0x000200f8u, 0x000010c5u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x000010c8u, 0x000010bbu, 0x00000508u, 0x00060041u, 0x000003a8u, 0x000010c9u, 0x000003a5u, 0x000000abu, 0x000010c8u, 0x0003003eu, 0x000010c9u, 0x0000050au, 0x000200f9u, 0x000010c4u, 0x000200f8u, 0x000010c4u, 0x000200f9u, 0x0000105bu, 0x000200f8u, 0x0000105du, 0x000500c7u, 0x00000006u, 0x0000107bu, 0x0000103cu, 0x00000379u, 0x0003003eu, 0x00001018u, 0x0000107bu, 0x00050084u, 0x00000006u, 0x0000107du, 0x00001033u, 0x00000378u, 0x00050080u, 0x00000006u, 0x0000107fu, 0x0000107bu, 0x0000107du, 0x0003003eu, 0x00001018u, 0x0000107fu, 0x000500c6u, 0x00000006u, 0x00001081u, 0x0000107fu, 0x000001c4u, 0x00050041u, 0x00000404u, 0x00001082u, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00001083u, 0x00001082u, 0x00060041u, 0x00000387u, 0x00001084u, 0x00000384u, 0x000000abu, 0x00001081u, 0x0003003eu, 0x00001084u, 0x00001083u, 0x000500c7u, 0x00000006u, 0x00001086u, 0x0000107fu, 0x000001bcu, 0x000500abu, 0x00000034u, 0x00001087u, 0x00001086u, 0x00000198u, 0x000300f7u, 0x00001088u, 0x00000000u, 0x000400fau, 0x00001087u, 0x00001089u, 0x00001088u, 0x000200f8u, 0x00001089u, 0x000500c2u, 0x00000006u, 0x0000108bu, 0x0000107fu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x0000108du, 0x00001082u, 0x00040071u, 0x00000006u, 0x0000108eu, 0x0000108du, 0x0004007cu, 0x00000017u, 0x0000108fu, 0x0000108eu, 0x000500c7u, 0x00000017u, 0x00001090u, 0x0000108fu, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00001091u, 0x00001090u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00001092u, 0x00001091u, 0x0004007cu, 0x00000008u, 0x00001093u, 0x00001092u, 0x00060041u, 0x00000387u, 0x00001094u, 0x00000392u, 0x000000abu, 0x0000108bu, 0x0003003eu, 0x00001094u, 0x00001093u, 0x000200f9u, 0x00001088u, 0x000200f8u, 0x00001088u, 0x000300f7u, 0x00001095u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00001096u, 0x00001095u, 0x000200f8u, 0x00001096u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x00001099u, 0x00001081u, 0x00000378u, 0x00060041u, 0x00000387u, 0x0000109au, 0x00000384u, 0x000000abu, 0x00001099u, 0x0003003eu, 0x0000109au, 0x000001cfu, 0x000200f9u, 0x00001095u, 0x000200f8u, 0x00001095u, 0x000200f9u, 0x0000105bu, 0x000200f8u, 0x0000105cu, 0x000500c7u, 0x00000006u, 0x00001062u, 0x0000103cu, 0x00000379u, 0x0003003eu, 0x00001018u, 0x00001062u, 0x00050084u, 0x00000006u, 0x00001064u, 0x00001033u, 0x00000378u, 0x00050080u, 0x00000006u, 0x00001066u, 0x00001062u, 0x00001064u, 0x0003003eu, 0x00001018u, 0x00001066u, 0x000500c6u, 0x00000006u, 0x00001068u, 0x00001066u, 0x000001c4u, 0x00060041u, 0x00000387u, 0x00001069u, 0x00000384u, 0x000000abu, 0x00001068u, 0x0003003eu, 0x00001069u, 0x000001eau, 0x000500c7u, 0x00000006u, 0x0000106bu, 0x00001066u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x0000106cu, 0x0000106bu, 0x00000198u, 0x000300f7u, 0x0000106du, 0x00000000u, 0x000400fau, 0x0000106cu, 0x0000106eu, 0x0000106du, 0x000200f8u, 0x0000106eu, 0x000500c2u, 0x00000006u, 0x00001070u, 0x00001066u, 0x000001bcu, 0x00050041u, 0x00000404u, 0x00001071u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00001072u, 0x00001071u, 0x00060041u, 0x00000387u, 0x00001073u, 0x00000392u, 0x000000abu, 0x00001070u, 0x0003003eu, 0x00001073u, 0x00001072u, 0x000200f9u, 0x0000106du, 0x000200f8u, 0x0000106du, 0x000300f7u, 0x00001074u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00001075u, 0x00001074u, 0x000200f8u, 0x00001075u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x00001078u, 0x00001068u, 0x00000378u, 0x00060041u, 0x00000387u, 0x00001079u, 0x00000384u, 0x000000abu, 0x00001078u, 0x0003003eu, 0x00001079u, 0x000001cfu, 0x000200f9u, 0x00001074u, 0x000200f8u, 0x00001074u, 0x000200f9u, 0x0000105bu, 0x000200f8u, 0x0000105bu, 0x000200f9u, 0x00001059u, 0x000200f8u, 0x00001059u, 0x0004003du, 0x00000006u, 0x00001043u, 0x00001036u, 0x00050084u, 0x00000006u, 0x00001044u, 0x00001027u, 0x00001043u, 0x00050080u, 0x00000006u, 0x00001045u, 0x00000868u, 0x00001044u, 0x0004003du, 0x00000006u, 0x00001047u, 0x0000103au, 0x00050080u, 0x00000006u, 0x00001048u, 0x00001045u, 0x00001047u, 0x0003003eu, 0x00001017u, 0x00001048u, 0x0003003eu, 0x0000101au, 0x00001048u, 0x0003003eu, 0x0000101bu, 0x00001033u, 0x000300f7u, 0x00001121u, 0x00000000u, 0x000400fau, 0x00000571u, 0x00001122u, 0x00001121u, 0x000200f8u, 0x00001122u, 0x0004003du, 0x00000034u, 0x00001123u, 0x00000574u, 0x000300f7u, 0x00001124u, 0x00000000u, 0x000400fau, 0x00001123u, 0x00001125u, 0x00001124u, 0x000200f8u, 0x00001125u, 0x000500c7u, 0x00000006u, 0x00001127u, 0x00001048u, 0x00000399u, 0x0003003eu, 0x0000101au, 0x00001127u, 0x00050084u, 0x00000006u, 0x00001129u, 0x00001033u, 0x0000057bu, 0x00050080u, 0x00000006u, 0x0000112bu, 0x00001127u, 0x00001129u, 0x0003003eu, 0x0000101au, 0x0000112bu, 0x000500c6u, 0x00000006u, 0x0000112du, 0x0000112bu, 0x000001bcu, 0x0004003du, 0x0000000au, 0x0000112eu, 0x00000424u, 0x000500c4u, 0x0000000au, 0x0000112fu, 0x0000112eu, 0x0000047fu, 0x0004003du, 0x00000008u, 0x00001130u, 0x00000405u, 0x000500c2u, 0x00000008u, 0x00001131u, 0x00001130u, 0x0000047fu, 0x00040071u, 0x0000000au, 0x00001132u, 0x00001131u, 0x000500c5u, 0x0000000au, 0x00001133u, 0x0000112fu, 0x00001132u, 0x00060041u, 0x000003a8u, 0x00001134u, 0x000003a5u, 0x000000abu, 0x0000112du, 0x0003003eu, 0x00001134u, 0x00001133u, 0x0004003du, 0x00000008u, 0x00001136u, 0x00000405u, 0x00040071u, 0x0000000au, 0x00001137u, 0x00001136u, 0x000500c7u, 0x0000000au, 0x00001138u, 0x00001137u, 0x00000485u, 0x00040071u, 0x00000008u, 0x00001139u, 0x00001138u, 0x00060041u, 0x00000387u, 0x0000113au, 0x00000392u, 0x000000abu, 0x0000112bu, 0x0003003eu, 0x0000113au, 0x00001139u, 0x000300f7u, 0x0000113bu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000113cu, 0x0000113bu, 0x000200f8u, 0x0000113cu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x00050080u, 0x00000006u, 0x0000113fu, 0x0000112du, 0x00000592u, 0x00060041u, 0x000003a8u, 0x00001140u, 0x000003a5u, 0x000000abu, 0x0000113fu, 0x0003003eu, 0x00001140u, 0x0000050au, 0x000200f9u, 0x0000113bu, 0x000200f8u, 0x0000113bu, 0x000200f9u, 0x00001124u, 0x000200f8u, 0x00001124u, 0x000200f9u, 0x00001121u, 0x000200f8u, 0x00001121u, 0x000300f7u, 0x0000104cu, 0x00000000u, 0x000400fau, 0x00000648u, 0x0000104du, 0x0000104cu, 0x000200f8u, 0x0000104du, 0x0004003du, 0x00000074u, 0x0000104eu, 0x00000909u, 0x0003003eu, 0x0000101cu, 0x0000104eu, 0x0003003eu, 0x0000101du, 0x00001027u, 0x00050041u, 0x00000007u, 0x00001146u, 0x0000101cu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00001147u, 0x00001146u, 0x000500c2u, 0x00000006u, 0x00001148u, 0x00001147u, 0x00000170u, 0x00050080u, 0x00000006u, 0x0000114au, 0x00001027u, 0x000001c4u, 0x000500c2u, 0x00000006u, 0x0000114bu, 0x0000114au, 0x00000170u, 0x00050084u, 0x00000006u, 0x0000114cu, 0x00001148u, 0x0000114bu, 0x00050041u, 0x00000007u, 0x0000114du, 0x0000101cu, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000114eu, 0x0000114du, 0x000500c2u, 0x00000006u, 0x0000114fu, 0x0000114eu, 0x00000170u, 0x00050080u, 0x00000006u, 0x00001150u, 0x0000114cu, 0x0000114fu, 0x0003003eu, 0x00001141u, 0x00001150u, 0x0004003du, 0x00000074u, 0x00001151u, 0x0000101cu, 0x000500c7u, 0x00000074u, 0x00001153u, 0x00001151u, 0x000019f4u, 0x0003003eu, 0x00001142u, 0x00001153u, 0x0004003du, 0x00000034u, 0x00001154u, 0x00000471u, 0x000600a9u, 0x00000006u, 0x00001155u, 0x00001154u, 0x000001bcu, 0x00000198u, 0x0004003du, 0x00000034u, 0x00001156u, 0x00000574u, 0x000600a9u, 0x00000006u, 0x00001157u, 0x00001156u, 0x000001bcu, 0x00000198u, 0x00050084u, 0x00000006u, 0x00001158u, 0x00000170u, 0x00001157u, 0x00050080u, 0x00000006u, 0x00001159u, 0x00001155u, 0x00001158u, 0x0003003eu, 0x00001143u, 0x00001159u, 0x00050041u, 0x00000007u, 0x0000115au, 0x00001142u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000115bu, 0x0000115au, 0x00050041u, 0x00000007u, 0x0000115cu, 0x00001142u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000115du, 0x0000115cu, 0x00050084u, 0x00000006u, 0x0000115eu, 0x0000115du, 0x00000420u, 0x00050080u, 0x00000006u, 0x0000115fu, 0x0000115bu, 0x0000115eu, 0x00050084u, 0x00000006u, 0x00001160u, 0x00000170u, 0x0000115fu, 0x000500c4u, 0x00000006u, 0x00001162u, 0x00001159u, 0x00001160u, 0x0003003eu, 0x00001143u, 0x00001162u, 0x0003003eu, 0x00001144u, 0x000002bcu, 0x000200f9u, 0x00001163u, 0x000200f8u, 0x00001163u, 0x000700f5u, 0x00000034u, 0x000012c8u, 0x000002bcu, 0x0000104du, 0x00001a02u, 0x00001165u, 0x000400f6u, 0x00001164u, 0x00001165u, 0x00000000u, 0x000200f9u, 0x00001166u, 0x000200f8u, 0x00001166u, 0x00050152u, 0x00000006u, 0x00001168u, 0x000001c4u, 0x00001150u, 0x000500aau, 0x00000034u, 0x0000116au, 0x00001168u, 0x00001150u, 0x000300f7u, 0x0000116bu, 0x00000000u, 0x000400fau, 0x0000116au, 0x0000116cu, 0x0000116bu, 0x000200f8u, 0x0000116cu, 0x00060168u, 0x00000006u, 0x0000116eu, 0x000001c4u, 0x00000000u, 0x00001162u, 0x0003003eu, 0x00001145u, 0x0000116eu, 0x0004014du, 0x00000034u, 0x0000116fu, 0x000001c4u, 0x000300f7u, 0x00001170u, 0x00000000u, 0x000400fau, 0x0000116fu, 0x00001171u, 0x00001170u, 0x000200f8u, 0x00001171u, 0x00050080u, 0x00000006u, 0x00001173u, 0x00000607u, 0x00001150u, 0x00060041u, 0x000003f3u, 0x00001174u, 0x000003f1u, 0x000000abu, 0x00001173u, 0x000700f1u, 0x00000006u, 0x00001176u, 0x00001174u, 0x000001bcu, 0x00000198u, 0x0000116eu, 0x000200f9u, 0x00001170u, 0x000200f8u, 0x00001170u, 0x0003003eu, 0x00001144u, 0x00000299u, 0x000200f9u, 0x0000116bu, 0x000200f8u, 0x0000116bu, 0x000600a9u, 0x00000034u, 0x00001a02u, 0x0000116au, 0x00000299u, 0x000012c8u, 0x000200f9u, 0x00001165u, 0x000200f8u, 0x00001165u, 0x000400fau, 0x00001a02u, 0x00001163u, 0x00001164u, 0x000200f8u, 0x00001164u, 0x000200f9u, 0x0000104cu, 0x000200f8u, 0x0000104cu, 0x000200f9u, 0x00001024u, 0x000200f8u, 0x00001024u, 0x0003003eu, 0x0000096fu, 0x000002bcu, 0x000200f9u, 0x0000096du, 0x000200f8u, 0x0000096du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000du, 0x00000010u, 0x00000000u, 0x0000000eu, 0x00030037u, 0x00000007u, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x000000ddu, 0x00001251u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001250u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000124fu, 0x00000007u, 0x0004003bu, 0x00000021u, 0x0000124eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000124du, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000124cu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000124bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000124au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001249u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001248u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001247u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001246u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001245u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001244u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001243u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000000acu, 0x0000000fu, 0x00060041u, 0x000000adu, 0x000000aeu, 0x000000aau, 0x000000abu, 0x000000acu, 0x0004003du, 0x000000a6u, 0x000000afu, 0x000000aeu, 0x00050051u, 0x00000009u, 0x000000b2u, 0x000000afu, 0x00000000u, 0x0003003eu, 0x00001243u, 0x000000b2u, 0x00050051u, 0x00000009u, 0x000000b4u, 0x000000afu, 0x00000001u, 0x0003003eu, 0x00001244u, 0x000000b4u, 0x00050051u, 0x00000009u, 0x000000b7u, 0x000000afu, 0x00000002u, 0x0003003eu, 0x00001245u, 0x000000b7u, 0x00050051u, 0x00000009u, 0x000000bau, 0x000000afu, 0x00000003u, 0x0003003eu, 0x00001246u, 0x000000bau, 0x00050051u, 0x00000009u, 0x000000bdu, 0x000000afu, 0x00000004u, 0x0003003eu, 0x00001247u, 0x000000bdu, 0x00050051u, 0x00000009u, 0x000000c0u, 0x000000afu, 0x00000005u, 0x0003003eu, 0x00001248u, 0x000000c0u, 0x00050051u, 0x00000009u, 0x000000c3u, 0x000000afu, 0x00000006u, 0x0003003eu, 0x00001249u, 0x000000c3u, 0x00050051u, 0x00000009u, 0x000000c6u, 0x000000afu, 0x00000007u, 0x0003003eu, 0x0000124au, 0x000000c6u, 0x00050051u, 0x00000009u, 0x000000c9u, 0x000000afu, 0x00000008u, 0x0003003eu, 0x0000124bu, 0x000000c9u, 0x00050051u, 0x00000009u, 0x000000ccu, 0x000000afu, 0x00000009u, 0x0003003eu, 0x0000124cu, 0x000000ccu, 0x00050051u, 0x00000006u, 0x000000cfu, 0x000000afu, 0x0000000au, 0x0003003eu, 0x0000124du, 0x000000cfu, 0x00050051u, 0x0000000au, 0x000000d2u, 0x000000afu, 0x0000000bu, 0x0003003eu, 0x0000124eu, 0x000000d2u, 0x00050051u, 0x00000008u, 0x000000d5u, 0x000000afu, 0x0000000cu, 0x0003003eu, 0x0000124fu, 0x000000d5u, 0x00050051u, 0x00000008u, 0x000000d8u, 0x000000afu, 0x0000000du, 0x0003003eu, 0x00001250u, 0x000000d8u, 0x00050051u, 0x0000000cu, 0x000000dbu, 0x000000afu, 0x0000000eu, 0x0003003eu, 0x00001251u, 0x000000dbu, 0x00120050u, 0x0000000du, 0x00001261u, 0x000000b2u, 0x000000b4u, 0x000000b7u, 0x000000bau, 0x000000bdu, 0x000000c0u, 0x000000c3u, 0x000000c6u, 0x000000c9u, 0x000000ccu, 0x000000cfu, 0x000000d2u, 0x000000d5u, 0x000000d8u, 0x000000dbu, 0x000200feu, 0x00001261u, 0x00010038u, 0x00050036u, 0x00000012u, 0x00000015u, 0x00000000u, 0x00000013u, 0x00030037u, 0x00000007u, 0x00000014u, 0x000200f8u, 0x00000016u, 0x0004003bu, 0x00000046u, 0x00001268u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001267u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001266u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001265u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001264u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001263u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001262u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x00000014u, 0x00060041u, 0x000000e8u, 0x000000e9u, 0x000000e6u, 0x000000abu, 0x000000e7u, 0x0004003du, 0x000000e2u, 0x000000eau, 0x000000e9u, 0x00050051u, 0x00000009u, 0x000000edu, 0x000000eau, 0x00000000u, 0x0003003eu, 0x00001262u, 0x000000edu, 0x00050051u, 0x00000009u, 0x000000efu, 0x000000eau, 0x00000001u, 0x0003003eu, 0x00001263u, 0x000000efu, 0x00050051u, 0x00000006u, 0x000000f1u, 0x000000eau, 0x00000002u, 0x0003003eu, 0x00001264u, 0x000000f1u, 0x00050051u, 0x00000008u, 0x000000f3u, 0x000000eau, 0x00000003u, 0x0003003eu, 0x00001265u, 0x000000f3u, 0x00050051u, 0x00000008u, 0x000000f5u, 0x000000eau, 0x00000004u, 0x0003003eu, 0x00001266u, 0x000000f5u, 0x00050051u, 0x00000008u, 0x000000f7u, 0x000000eau, 0x00000005u, 0x0003003eu, 0x00001267u, 0x000000f7u, 0x00050051u, 0x00000008u, 0x000000f9u, 0x000000eau, 0x00000006u, 0x0003003eu, 0x00001268u, 0x000000f9u, 0x000a0050u, 0x00000012u, 0x00001270u, 0x000000edu, 0x000000efu, 0x000000f1u, 0x000000f3u, 0x000000f5u, 0x000000f7u, 0x000000f9u, 0x000200feu, 0x00001270u, 0x00010038u, 0x00050036u, 0x0000001bu, 0x0000001fu, 0x00000000u, 0x0000001cu, 0x00030037u, 0x00000019u, 0x0000001du, 0x00030037u, 0x0000001au, 0x0000001eu, 0x000200f8u, 0x00000020u, 0x0004003bu, 0x00000019u, 0x000000feu, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000105u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x00000114u, 0x00000007u, 0x0004003bu, 0x00000019u, 0x0000011du, 0x00000007u, 0x0004003du, 0x00000017u, 0x000000ffu, 0x0000001eu, 0x00060050u, 0x00000018u, 0x00000100u, 0x000000ffu, 0x000000ffu, 0x000000ffu, 0x000500c3u, 0x00000018u, 0x00000102u, 0x00000100u, 0x00000101u, 0x000500c7u, 0x00000018u, 0x00000104u, 0x00000102u, 0x000019f6u, 0x0003003eu, 0x000000feu, 0x00000104u, 0x0004003du, 0x00000018u, 0x00000106u, 0x0000001du, 0x000500c7u, 0x00000018u, 0x00000109u, 0x00000106u, 0x000019f7u, 0x00050080u, 0x00000018u, 0x0000010bu, 0x00000109u, 0x000019f8u, 0x0004003du, 0x00000018u, 0x0000010eu, 0x0000001du, 0x000500adu, 0x00000111u, 0x00000112u, 0x0000010eu, 0x00000110u, 0x000600a9u, 0x00000018u, 0x00000113u, 0x00000112u, 0x0000010du, 0x0000010bu, 0x0003003eu, 0x00000105u, 0x00000113u, 0x0004003du, 0x00000018u, 0x00000116u, 0x0000001du, 0x000500c7u, 0x00000018u, 0x00000118u, 0x00000116u, 0x000019f6u, 0x00050082u, 0x00000018u, 0x00000119u, 0x00000104u, 0x00000118u, 0x000500c3u, 0x00000018u, 0x0000011cu, 0x00000119u, 0x000019f9u, 0x0003003eu, 0x00000114u, 0x0000011cu, 0x0004003du, 0x00000018u, 0x0000011fu, 0x0000001du, 0x00050082u, 0x00000018u, 0x00000120u, 0x00000113u, 0x0000011fu, 0x0003003eu, 0x0000011du, 0x00000120u, 0x0004003du, 0x00000018u, 0x00000121u, 0x0000001du, 0x000500c7u, 0x00000018u, 0x00000124u, 0x00000120u, 0x0000011cu, 0x00050080u, 0x00000018u, 0x00000125u, 0x00000121u, 0x00000124u, 0x0003003eu, 0x00000105u, 0x00000125u, 0x000500c7u, 0x00000018u, 0x00000128u, 0x00000125u, 0x0000010du, 0x00040072u, 0x0000012au, 0x0000012bu, 0x00000128u, 0x0004007cu, 0x0000001bu, 0x0000012cu, 0x0000012bu, 0x000200feu, 0x0000012cu, 0x00010038u, 0x00050036u, 0x00000017u, 0x00000024u, 0x00000000u, 0x00000022u, 0x00030037u, 0x00000021u, 0x00000023u, 0x000200f8u, 0x00000025u, 0x0004003bu, 0x0000001au, 0x0000012fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000133u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000136u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000013au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000013eu, 0x00000007u, 0x0004003du, 0x0000000au, 0x00000130u, 0x00000023u, 0x00040071u, 0x00000006u, 0x00000131u, 0x00000130u, 0x0004007cu, 0x00000017u, 0x00000132u, 0x00000131u, 0x0003003eu, 0x0000012fu, 0x00000132u, 0x000500c3u, 0x00000017u, 0x00000135u, 0x00000132u, 0x000000d3u, 0x0003003eu, 0x00000133u, 0x00000135u, 0x000500c7u, 0x00000017u, 0x00000139u, 0x00000132u, 0x00000138u, 0x0003003eu, 0x00000136u, 0x00000139u, 0x00050082u, 0x00000017u, 0x0000013cu, 0x000000c4u, 0x00000135u, 0x0007000cu, 0x00000017u, 0x0000013du, 0x00000001u, 0x0000002au, 0x0000013cu, 0x000000abu, 0x0003003eu, 0x0000013au, 0x0000013du, 0x000500c3u, 0x00000017u, 0x00000141u, 0x0000013fu, 0x00000135u, 0x00050082u, 0x00000017u, 0x00000142u, 0x0000013fu, 0x00000141u, 0x0003003eu, 0x0000013eu, 0x00000142u, 0x000500c4u, 0x00000017u, 0x00000145u, 0x00000139u, 0x0000013du, 0x00050080u, 0x00000017u, 0x00000147u, 0x00000145u, 0x00000142u, 0x000200feu, 0x00000147u, 0x00010038u, 0x00050036u, 0x0000000au, 0x00000028u, 0x00000000u, 0x00000026u, 0x00030037u, 0x0000001au, 0x00000027u, 0x000200f8u, 0x00000029u, 0x0004003bu, 0x0000001au, 0x0000014au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000014fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000156u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000015au, 0x00000007u, 0x0004003du, 0x00000017u, 0x0000014cu, 0x00000027u, 0x00050082u, 0x00000017u, 0x0000014du, 0x0000014bu, 0x0000014cu, 0x0007000cu, 0x00000017u, 0x0000014eu, 0x00000001u, 0x0000002au, 0x0000014du, 0x000000b5u, 0x0003003eu, 0x0000014au, 0x0000014eu, 0x0006000cu, 0x00000017u, 0x00000152u, 0x00000001u, 0x0000004au, 0x0000014eu, 0x00050082u, 0x00000017u, 0x00000153u, 0x00000150u, 0x00000152u, 0x0003003eu, 0x0000014fu, 0x00000153u, 0x0008000cu, 0x00000017u, 0x00000155u, 0x00000001u, 0x0000002du, 0x00000153u, 0x000000abu, 0x000000c7u, 0x0003003eu, 0x0000014fu, 0x00000155u, 0x00050082u, 0x00000017u, 0x00000158u, 0x000000c4u, 0x00000155u, 0x0007000cu, 0x00000017u, 0x00000159u, 0x00000001u, 0x0000002au, 0x00000158u, 0x000000abu, 0x0003003eu, 0x00000156u, 0x00000159u, 0x0004003du, 0x00000017u, 0x0000015bu, 0x00000027u, 0x000500c3u, 0x00000017u, 0x0000015du, 0x0000015bu, 0x00000159u, 0x000500c7u, 0x00000017u, 0x0000015eu, 0x0000015du, 0x00000138u, 0x0003003eu, 0x0000015au, 0x0000015eu, 0x000500c4u, 0x00000017u, 0x00000160u, 0x00000155u, 0x000000d3u, 0x00050080u, 0x00000017u, 0x00000162u, 0x00000160u, 0x0000015eu, 0x00040072u, 0x0000000bu, 0x00000163u, 0x00000162u, 0x0004007cu, 0x0000000au, 0x00000164u, 0x00000163u, 0x000200feu, 0x00000164u, 0x00010038u, 0x00050036u, 0x00000017u, 0x0000002cu, 0x00000000u, 0x0000002au, 0x00030037u, 0x0000001au, 0x0000002bu, 0x000200f8u, 0x0000002du, 0x0004003du, 0x00000017u, 0x00000167u, 0x0000002bu, 0x000500c4u, 0x00000017u, 0x00000168u, 0x000000b5u, 0x00000167u, 0x000200feu, 0x00000168u, 0x00010038u, 0x00050036u, 0x00000017u, 0x0000002fu, 0x00000000u, 0x0000002au, 0x00030037u, 0x0000001au, 0x0000002eu, 0x000200f8u, 0x00000030u, 0x0004003du, 0x00000017u, 0x0000016bu, 0x0000002eu, 0x0006000cu, 0x00000017u, 0x0000016cu, 0x00000001u, 0x0000004au, 0x0000016bu, 0x0007000cu, 0x00000017u, 0x0000016du, 0x00000001u, 0x0000002au, 0x0000016cu, 0x000000abu, 0x000200feu, 0x0000016du, 0x00010038u, 0x00050036u, 0x0000001bu, 0x00000041u, 0x00000000u, 0x00000038u, 0x00030037u, 0x00000032u, 0x00000039u, 0x00030037u, 0x00000033u, 0x0000003au, 0x00030037u, 0x00000035u, 0x0000003bu, 0x00030037u, 0x00000035u, 0x0000003cu, 0x00030037u, 0x00000035u, 0x0000003du, 0x00030037u, 0x00000035u, 0x0000003eu, 0x00030037u, 0x00000037u, 0x0000003fu, 0x00030037u, 0x00000035u, 0x00000040u, 0x000200f8u, 0x00000042u, 0x0005003bu, 0x00000035u, 0x00000974u, 0x00000007u, 0x00000299u, 0x0004003bu, 0x0000017au, 0x00000971u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x0000017bu, 0x00000007u, 0x0004003bu, 0x0000017au, 0x000001a2u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000001e0u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x000001f6u, 0x00000007u, 0x0004003bu, 0x00000219u, 0x0000021au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000023cu, 0x00000007u, 0x000300f7u, 0x00000970u, 0x00000000u, 0x000300fbu, 0x00000198u, 0x00000973u, 0x000200f8u, 0x00000973u, 0x00050041u, 0x00000046u, 0x00000171u, 0x0000003au, 0x00000170u, 0x0004003du, 0x00000008u, 0x00000172u, 0x00000171u, 0x00040071u, 0x00000006u, 0x00000173u, 0x00000172u, 0x0004007cu, 0x00000017u, 0x00000174u, 0x00000173u, 0x000300f7u, 0x00000179u, 0x00000000u, 0x000b00fbu, 0x00000174u, 0x00000179u, 0x00000000u, 0x00000175u, 0x00000001u, 0x00000176u, 0x00000002u, 0x00000177u, 0x00000003u, 0x00000178u, 0x000200f8u, 0x00000175u, 0x00050041u, 0x00000033u, 0x0000017cu, 0x00000039u, 0x000000abu, 0x0004003du, 0x00000009u, 0x0000017du, 0x0000017cu, 0x0008004fu, 0x0000001bu, 0x0000017eu, 0x0000017du, 0x0000017du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x0000017eu, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000176u, 0x00050041u, 0x00000033u, 0x00000180u, 0x00000039u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x00000181u, 0x00000180u, 0x0008004fu, 0x0000001bu, 0x00000182u, 0x00000181u, 0x00000181u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x00000182u, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000177u, 0x00050041u, 0x00000033u, 0x00000184u, 0x00000039u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x00000185u, 0x00000184u, 0x0008004fu, 0x0000001bu, 0x00000186u, 0x00000185u, 0x00000185u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x00000186u, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000178u, 0x00050041u, 0x00000033u, 0x00000188u, 0x00000039u, 0x000000b8u, 0x0004003du, 0x00000009u, 0x00000189u, 0x00000188u, 0x0008004fu, 0x0000001bu, 0x0000018au, 0x00000189u, 0x00000189u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000017bu, 0x0000018au, 0x000200f9u, 0x00000179u, 0x000200f8u, 0x00000179u, 0x000d00f5u, 0x0000001bu, 0x0000199au, 0x0000199bu, 0x00000973u, 0x0000017eu, 0x00000175u, 0x00000182u, 0x00000176u, 0x00000186u, 0x00000177u, 0x0000018au, 0x00000178u, 0x0004003du, 0x00000034u, 0x0000018du, 0x00000040u, 0x000300f7u, 0x0000018fu, 0x00000000u, 0x000400fau, 0x0000018du, 0x0000018eu, 0x0000018fu, 0x000200f8u, 0x0000018eu, 0x0004003du, 0x00000034u, 0x00000190u, 0x0000003du, 0x0004003du, 0x00000034u, 0x00000191u, 0x0000003eu, 0x000400a8u, 0x00000034u, 0x00000192u, 0x00000191u, 0x000500a7u, 0x00000034u, 0x00000193u, 0x00000190u, 0x00000192u, 0x000300f7u, 0x00000195u, 0x00000000u, 0x000400fau, 0x00000193u, 0x00000194u, 0x00000195u, 0x000200f8u, 0x00000194u, 0x0003003eu, 0x00000974u, 0x000002bcu, 0x0003003eu, 0x00000971u, 0x0000199au, 0x000200f9u, 0x00000970u, 0x000200f8u, 0x00000195u, 0x000200f9u, 0x0000018fu, 0x000200f8u, 0x0000018fu, 0x00050041u, 0x00000046u, 0x00000199u, 0x0000003au, 0x00000198u, 0x0004003du, 0x00000008u, 0x0000019au, 0x00000199u, 0x00040071u, 0x00000006u, 0x0000019bu, 0x0000019au, 0x0004007cu, 0x00000017u, 0x0000019cu, 0x0000019bu, 0x000300f7u, 0x000001a1u, 0x00000000u, 0x000b00fbu, 0x0000019cu, 0x000001a1u, 0x00000000u, 0x0000019du, 0x00000001u, 0x0000019eu, 0x00000002u, 0x0000019fu, 0x00000003u, 0x000001a0u, 0x000200f8u, 0x0000019du, 0x00050041u, 0x00000033u, 0x000001a3u, 0x00000039u, 0x000000abu, 0x0004003du, 0x00000009u, 0x000001a4u, 0x000001a3u, 0x0008004fu, 0x0000001bu, 0x000001a5u, 0x000001a4u, 0x000001a4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001a5u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x0000019eu, 0x00050041u, 0x00000033u, 0x000001a7u, 0x00000039u, 0x000000b5u, 0x0004003du, 0x00000009u, 0x000001a8u, 0x000001a7u, 0x0008004fu, 0x0000001bu, 0x000001a9u, 0x000001a8u, 0x000001a8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001a9u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x0000019fu, 0x00050041u, 0x00000033u, 0x000001abu, 0x00000039u, 0x000000bbu, 0x0004003du, 0x00000009u, 0x000001acu, 0x000001abu, 0x0008004fu, 0x0000001bu, 0x000001adu, 0x000001acu, 0x000001acu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001adu, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a0u, 0x00050041u, 0x00000033u, 0x000001afu, 0x00000039u, 0x000000b8u, 0x0004003du, 0x00000009u, 0x000001b0u, 0x000001afu, 0x0008004fu, 0x0000001bu, 0x000001b1u, 0x000001b0u, 0x000001b0u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000001a2u, 0x000001b1u, 0x000200f9u, 0x000001a1u, 0x000200f8u, 0x000001a1u, 0x0004003du, 0x00000034u, 0x000001b4u, 0x00000040u, 0x000300f7u, 0x000001b6u, 0x00000000u, 0x000400fau, 0x000001b4u, 0x000001b5u, 0x000001b6u, 0x000200f8u, 0x000001b5u, 0x0004003du, 0x00000034u, 0x000001b7u, 0x0000003cu, 0x000400a8u, 0x00000034u, 0x000001b8u, 0x000001b7u, 0x000400a8u, 0x00000034u, 0x000001b9u, 0x000001b8u, 0x000300f7u, 0x000001bbu, 0x00000000u, 0x000400fau, 0x000001b9u, 0x000001bau, 0x000001bbu, 0x000200f8u, 0x000001bau, 0x00050041u, 0x00000046u, 0x000001bdu, 0x0000003au, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000001beu, 0x000001bdu, 0x00040071u, 0x00000006u, 0x000001bfu, 0x000001beu, 0x0004007cu, 0x00000017u, 0x000001c0u, 0x000001bfu, 0x000500aau, 0x00000034u, 0x000001c1u, 0x000001c0u, 0x000000abu, 0x000300f7u, 0x000001c3u, 0x00000000u, 0x000400fau, 0x000001c1u, 0x000001c2u, 0x000001c3u, 0x000200f8u, 0x000001c2u, 0x00050041u, 0x00000046u, 0x000001c5u, 0x0000003au, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001c6u, 0x000001c5u, 0x00040071u, 0x00000006u, 0x000001c7u, 0x000001c6u, 0x0004007cu, 0x00000017u, 0x000001c8u, 0x000001c7u, 0x000500aau, 0x00000034u, 0x000001c9u, 0x000001c8u, 0x000000abu, 0x000200f9u, 0x000001c3u, 0x000200f8u, 0x000001c3u, 0x000700f5u, 0x00000034u, 0x000001cau, 0x000001c1u, 0x000001bau, 0x000001c9u, 0x000001c2u, 0x000300f7u, 0x000001ccu, 0x00000000u, 0x000400fau, 0x000001cau, 0x000001cbu, 0x000001ccu, 0x000200f8u, 0x000001cbu, 0x00060041u, 0x00000046u, 0x000001cdu, 0x00000039u, 0x000000abu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001ceu, 0x000001cdu, 0x000500aau, 0x00000034u, 0x000001d0u, 0x000001ceu, 0x000001cfu, 0x000200f9u, 0x000001ccu, 0x000200f8u, 0x000001ccu, 0x000700f5u, 0x00000034u, 0x000001d1u, 0x000001cau, 0x000001c3u, 0x000001d0u, 0x000001cbu, 0x000200f9u, 0x000001bbu, 0x000200f8u, 0x000001bbu, 0x000700f5u, 0x00000034u, 0x000001d2u, 0x000001b8u, 0x000001b5u, 0x000001d1u, 0x000001ccu, 0x000300f7u, 0x000001d4u, 0x00000000u, 0x000400fau, 0x000001d2u, 0x000001d3u, 0x000001d4u, 0x000200f8u, 0x000001d3u, 0x0004003du, 0x0000001bu, 0x000001d5u, 0x000001a2u, 0x0003003eu, 0x00000974u, 0x000002bcu, 0x0003003eu, 0x00000971u, 0x000001d5u, 0x000200f9u, 0x00000970u, 0x000200f8u, 0x000001d4u, 0x000200f9u, 0x000001b6u, 0x000200f8u, 0x000001b6u, 0x00050041u, 0x00000046u, 0x000001d7u, 0x0000003au, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000001d8u, 0x000001d7u, 0x00040071u, 0x00000006u, 0x000001d9u, 0x000001d8u, 0x0004007cu, 0x00000017u, 0x000001dau, 0x000001d9u, 0x000300f7u, 0x000001dfu, 0x00000000u, 0x000b00fbu, 0x000001dau, 0x000001dfu, 0x00000000u, 0x000001dbu, 0x00000001u, 0x000001dcu, 0x00000002u, 0x000001ddu, 0x00000003u, 0x000001deu, 0x000200f8u, 0x000001dbu, 0x00060041u, 0x00000046u, 0x000001e1u, 0x00000039u, 0x000000abu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001e2u, 0x000001e1u, 0x0003003eu, 0x000001e0u, 0x000001e2u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dcu, 0x00060041u, 0x00000046u, 0x000001e4u, 0x00000039u, 0x000000b8u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001e5u, 0x000001e4u, 0x0003003eu, 0x000001e0u, 0x000001e5u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001ddu, 0x00050041u, 0x00000046u, 0x000001e7u, 0x00000039u, 0x000000beu, 0x0004003du, 0x00000008u, 0x000001e8u, 0x000001e7u, 0x0003003eu, 0x000001e0u, 0x000001e8u, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001deu, 0x0003003eu, 0x000001e0u, 0x000001eau, 0x000200f9u, 0x000001dfu, 0x000200f8u, 0x000001dfu, 0x000d00f5u, 0x00000008u, 0x00001980u, 0x00001985u, 0x000001b6u, 0x000001e2u, 0x000001dbu, 0x000001e5u, 0x000001dcu, 0x000001e8u, 0x000001ddu, 0x000001eau, 0x000001deu, 0x00050041u, 0x00000046u, 0x000001edu, 0x0000003au, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001eeu, 0x000001edu, 0x00040071u, 0x00000006u, 0x000001efu, 0x000001eeu, 0x0004007cu, 0x00000017u, 0x000001f0u, 0x000001efu, 0x000300f7u, 0x000001f5u, 0x00000000u, 0x000b00fbu, 0x000001f0u, 0x000001f5u, 0x00000000u, 0x000001f1u, 0x00000001u, 0x000001f2u, 0x00000002u, 0x000001f3u, 0x00000003u, 0x000001f4u, 0x000200f8u, 0x000001f1u, 0x000400c8u, 0x00000008u, 0x000001f8u, 0x00001980u, 0x000500c7u, 0x00000008u, 0x000001f9u, 0x000001f8u, 0x000001cfu, 0x0003003eu, 0x000001f6u, 0x000001f9u, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f2u, 0x00060041u, 0x00000046u, 0x000001fbu, 0x00000039u, 0x000000b5u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000001fcu, 0x000001fbu, 0x0003003eu, 0x000001f6u, 0x000001fcu, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f3u, 0x0003003eu, 0x000001f6u, 0x000001cfu, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f4u, 0x0003003eu, 0x000001f6u, 0x000001eau, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f5u, 0x000d00f5u, 0x00000008u, 0x0000198au, 0x00001985u, 0x000001dfu, 0x000001f9u, 0x000001f1u, 0x000001fcu, 0x000001f2u, 0x000001cfu, 0x000001f3u, 0x000001eau, 0x000001f4u, 0x000500c2u, 0x00000008u, 0x00000203u, 0x00001980u, 0x00000201u, 0x0003003eu, 0x000001e0u, 0x00000203u, 0x000500c2u, 0x00000008u, 0x00000205u, 0x0000198au, 0x00000201u, 0x0003003eu, 0x000001f6u, 0x00000205u, 0x0004003du, 0x00000008u, 0x00000207u, 0x000001edu, 0x00040071u, 0x00000006u, 0x00000208u, 0x00000207u, 0x0004007cu, 0x00000017u, 0x00000209u, 0x00000208u, 0x000500aau, 0x00000034u, 0x0000020au, 0x00000209u, 0x000000b5u, 0x000300f7u, 0x0000020cu, 0x00000000u, 0x000400fau, 0x0000020au, 0x0000020bu, 0x0000020cu, 0x000200f8u, 0x0000020bu, 0x00050041u, 0x00000046u, 0x0000020eu, 0x0000003fu, 0x00000198u, 0x0004003du, 0x00000008u, 0x0000020fu, 0x0000020eu, 0x000500c2u, 0x00000008u, 0x00000210u, 0x00000203u, 0x0000020fu, 0x000500c7u, 0x00000008u, 0x00000212u, 0x00000210u, 0x00000211u, 0x0003003eu, 0x000001e0u, 0x00000212u, 0x00050041u, 0x00000046u, 0x00000214u, 0x0000003fu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000215u, 0x00000214u, 0x000500c2u, 0x00000008u, 0x00000216u, 0x00000205u, 0x00000215u, 0x000500c5u, 0x00000008u, 0x00000217u, 0x00000216u, 0x00000201u, 0x0003003eu, 0x000001f6u, 0x00000217u, 0x000200f9u, 0x0000020cu, 0x000200f8u, 0x0000020cu, 0x000700f5u, 0x00000008u, 0x0000199fu, 0x00000205u, 0x000001f5u, 0x00000217u, 0x0000020bu, 0x000700f5u, 0x00000008u, 0x00001993u, 0x00000203u, 0x000001f5u, 0x00000212u, 0x0000020bu, 0x0004003du, 0x0000001bu, 0x0000021bu, 0x000001a2u, 0x00040071u, 0x0000021cu, 0x0000021du, 0x0000021bu, 0x0004007cu, 0x00000218u, 0x0000021eu, 0x0000021du, 0x00040071u, 0x0000000au, 0x00000220u, 0x00001993u, 0x0004007cu, 0x0000000bu, 0x00000221u, 0x00000220u, 0x00060050u, 0x00000218u, 0x00000222u, 0x00000221u, 0x00000221u, 0x00000221u, 0x00050084u, 0x00000218u, 0x00000223u, 0x0000021eu, 0x00000222u, 0x00040071u, 0x0000021cu, 0x00000225u, 0x0000199au, 0x0004007cu, 0x00000218u, 0x00000226u, 0x00000225u, 0x00040071u, 0x0000000au, 0x00000228u, 0x0000199fu, 0x0004007cu, 0x0000000bu, 0x00000229u, 0x00000228u, 0x00050080u, 0x0000000bu, 0x0000022bu, 0x00000229u, 0x0000022au, 0x00060050u, 0x00000218u, 0x0000022cu, 0x0000022bu, 0x0000022bu, 0x0000022bu, 0x00050084u, 0x00000218u, 0x0000022du, 0x00000226u, 0x0000022cu, 0x00050080u, 0x00000218u, 0x0000022eu, 0x00000223u, 0x0000022du, 0x0003003eu, 0x0000021au, 0x0000022eu, 0x0004003du, 0x00000034u, 0x0000022fu, 0x00000040u, 0x000400a8u, 0x00000034u, 0x00000230u, 0x0000022fu, 0x0004003du, 0x00000034u, 0x00000231u, 0x0000003bu, 0x000500a6u, 0x00000034u, 0x00000232u, 0x00000230u, 0x00000231u, 0x000300f7u, 0x00000234u, 0x00000000u, 0x000400fau, 0x00000232u, 0x00000233u, 0x0000023bu, 0x000200f8u, 0x00000233u, 0x0004003du, 0x00000218u, 0x00000235u, 0x0000021au, 0x000500c3u, 0x00000218u, 0x00000238u, 0x00000235u, 0x000019fau, 0x00040072u, 0x0000012au, 0x00000239u, 0x00000238u, 0x0004007cu, 0x0000001bu, 0x0000023au, 0x00000239u, 0x0003003eu, 0x000001a2u, 0x0000023au, 0x000200f9u, 0x00000234u, 0x000200f8u, 0x0000023bu, 0x00040071u, 0x00000006u, 0x0000023eu, 0x00001993u, 0x0004007cu, 0x00000017u, 0x0000023fu, 0x0000023eu, 0x000500c3u, 0x00000017u, 0x00000240u, 0x0000023fu, 0x000000b8u, 0x00040071u, 0x00000006u, 0x00000242u, 0x0000199fu, 0x0004007cu, 0x00000017u, 0x00000243u, 0x00000242u, 0x000500c3u, 0x00000017u, 0x00000244u, 0x00000243u, 0x000000b8u, 0x00050080u, 0x00000017u, 0x00000245u, 0x00000240u, 0x00000244u, 0x00050080u, 0x00000017u, 0x00000246u, 0x00000245u, 0x000000b5u, 0x0003003eu, 0x0000023cu, 0x00000246u, 0x0004003du, 0x00000218u, 0x00000248u, 0x0000021au, 0x000500c3u, 0x00000218u, 0x0000024au, 0x00000248u, 0x000019fcu, 0x0003003eu, 0x0000021au, 0x0000024au, 0x0004003du, 0x00000218u, 0x0000024cu, 0x0000021au, 0x000500c7u, 0x00000218u, 0x0000024eu, 0x0000024cu, 0x000019fdu, 0x0003003eu, 0x0000021au, 0x0000024eu, 0x0004003du, 0x0000024fu, 0x00000252u, 0x00000251u, 0x000500c4u, 0x00000017u, 0x00000254u, 0x00000246u, 0x000000d3u, 0x00050041u, 0x00000255u, 0x00000256u, 0x0000021au, 0x00000198u, 0x0004003du, 0x0000000bu, 0x00000257u, 0x00000256u, 0x00040072u, 0x00000017u, 0x00000258u, 0x00000257u, 0x000500c5u, 0x00000017u, 0x00000259u, 0x00000254u, 0x00000258u, 0x0005005fu, 0x0000025au, 0x0000025bu, 0x00000252u, 0x00000259u, 0x00050051u, 0x00000006u, 0x0000025cu, 0x0000025bu, 0x00000000u, 0x00040071u, 0x00000008u, 0x0000025du, 0x0000025cu, 0x00050041u, 0x00000046u, 0x0000025eu, 0x000001a2u, 0x00000198u, 0x0003003eu, 0x0000025eu, 0x0000025du, 0x00050041u, 0x00000255u, 0x00000262u, 0x0000021au, 0x000001bcu, 0x0004003du, 0x0000000bu, 0x00000263u, 0x00000262u, 0x00040072u, 0x00000017u, 0x00000264u, 0x00000263u, 0x000500c5u, 0x00000017u, 0x00000265u, 0x00000254u, 0x00000264u, 0x0005005fu, 0x0000025au, 0x00000266u, 0x00000252u, 0x00000265u, 0x00050051u, 0x00000006u, 0x00000267u, 0x00000266u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000268u, 0x00000267u, 0x00050041u, 0x00000046u, 0x00000269u, 0x000001a2u, 0x000001bcu, 0x0003003eu, 0x00000269u, 0x00000268u, 0x00050041u, 0x00000255u, 0x0000026du, 0x0000021au, 0x00000170u, 0x0004003du, 0x0000000bu, 0x0000026eu, 0x0000026du, 0x00040072u, 0x00000017u, 0x0000026fu, 0x0000026eu, 0x000500c5u, 0x00000017u, 0x00000270u, 0x00000254u, 0x0000026fu, 0x0005005fu, 0x0000025au, 0x00000271u, 0x00000252u, 0x00000270u, 0x00050051u, 0x00000006u, 0x00000272u, 0x00000271u, 0x00000000u, 0x00040071u, 0x00000008u, 0x00000273u, 0x00000272u, 0x00050041u, 0x00000046u, 0x00000274u, 0x000001a2u, 0x00000170u, 0x0003003eu, 0x00000274u, 0x00000273u, 0x000200f9u, 0x00000234u, 0x000200f8u, 0x00000234u, 0x0004003du, 0x0000001bu, 0x00000275u, 0x000001a2u, 0x000500c7u, 0x0000001bu, 0x00000277u, 0x00000275u, 0x000019fbu, 0x0003003eu, 0x00000974u, 0x000002bcu, 0x0003003eu, 0x00000971u, 0x00000277u, 0x000200f9u, 0x00000970u, 0x000200f8u, 0x00000970u, 0x000900f5u, 0x0000001bu, 0x000019a0u, 0x0000199au, 0x00000194u, 0x000001d5u, 0x000001d3u, 0x00000277u, 0x00000234u, 0x000200feu, 0x000019a0u, 0x00010038u, 0x00050036u, 0x00000017u, 0x00000044u, 0x00000000u, 0x0000002au, 0x00030037u, 0x0000001au, 0x00000043u, 0x000200f8u, 0x00000045u, 0x0004003du, 0x00000017u, 0x0000027au, 0x00000043u, 0x000500abu, 0x00000034u, 0x0000027bu, 0x0000027au, 0x000000abu, 0x000300f7u, 0x0000027du, 0x00000000u, 0x000400fau, 0x0000027bu, 0x0000027cu, 0x0000027du, 0x000200f8u, 0x0000027cu, 0x0004003du, 0x00000017u, 0x0000027eu, 0x00000043u, 0x0006000cu, 0x00000017u, 0x0000027fu, 0x00000001u, 0x0000004au, 0x0000027eu, 0x000500c4u, 0x00000017u, 0x00000280u, 0x000000b5u, 0x0000027fu, 0x0003003eu, 0x00000043u, 0x00000280u, 0x000200f9u, 0x0000027du, 0x000200f8u, 0x0000027du, 0x0004003du, 0x00000017u, 0x00000281u, 0x00000043u, 0x000200feu, 0x00000281u, 0x00010038u, 0x00050036u, 0x00000034u, 0x00000056u, 0x00000000u, 0x00000047u, 0x00030037u, 0x0000001au, 0x00000048u, 0x00030037u, 0x0000001au, 0x00000049u, 0x00030037u, 0x0000001au, 0x0000004au, 0x00030037u, 0x00000021u, 0x0000004bu, 0x00030037u, 0x00000046u, 0x0000004cu, 0x00030037u, 0x0000001au, 0x0000004du, 0x00030037u, 0x0000001au, 0x0000004eu, 0x00030037u, 0x00000035u, 0x0000004fu, 0x00030037u, 0x0000001au, 0x00000050u, 0x00030037u, 0x00000035u, 0x00000051u, 0x00030037u, 0x00000035u, 0x00000052u, 0x00030037u, 0x00000035u, 0x00000053u, 0x00030037u, 0x00000035u, 0x00000054u, 0x00030037u, 0x00000037u, 0x00000055u, 0x000200f8u, 0x00000057u, 0x0004003bu, 0x0000001au, 0x00000287u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000288u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000028bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000028fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000291u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000298u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002beu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002c2u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002c4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002c8u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002d3u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002e4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002e5u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002e8u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000002ecu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000002f0u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000031cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000031eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000341u, 0x00000007u, 0x0004003du, 0x00000034u, 0x00000284u, 0x0000004fu, 0x000300f7u, 0x00000286u, 0x00000000u, 0x000400fau, 0x00000284u, 0x00000285u, 0x00000339u, 0x000200f8u, 0x00000285u, 0x0004003du, 0x0000000au, 0x00000289u, 0x0000004bu, 0x0003003eu, 0x00000288u, 0x00000289u, 0x00050039u, 0x00000017u, 0x0000028au, 0x00000024u, 0x00000288u, 0x0003003eu, 0x00000287u, 0x0000028au, 0x0004003du, 0x00000008u, 0x0000028cu, 0x0000004cu, 0x00040071u, 0x00000006u, 0x0000028du, 0x0000028cu, 0x0004007cu, 0x00000017u, 0x0000028eu, 0x0000028du, 0x0003003eu, 0x0000028fu, 0x0000028eu, 0x00050039u, 0x00000017u, 0x00000290u, 0x0000002cu, 0x0000028fu, 0x0003003eu, 0x0000028bu, 0x00000290u, 0x0004003du, 0x0000000au, 0x00000292u, 0x0000004bu, 0x00040071u, 0x00000006u, 0x00000293u, 0x00000292u, 0x0004007cu, 0x00000017u, 0x00000294u, 0x00000293u, 0x000500c3u, 0x00000017u, 0x00000295u, 0x00000294u, 0x000000d3u, 0x000500c7u, 0x00000017u, 0x00000297u, 0x00000295u, 0x00000296u, 0x0003003eu, 0x00000291u, 0x00000297u, 0x0003003eu, 0x00000298u, 0x00000299u, 0x0004003du, 0x00000017u, 0x0000029au, 0x0000004au, 0x0004003du, 0x00000008u, 0x0000029bu, 0x0000004cu, 0x00040071u, 0x00000006u, 0x0000029cu, 0x0000029bu, 0x0004007cu, 0x00000017u, 0x0000029du, 0x0000029cu, 0x00050082u, 0x00000017u, 0x0000029eu, 0x0000029au, 0x0000029du, 0x0008000cu, 0x00000017u, 0x0000029fu, 0x00000001u, 0x0000002du, 0x0000029eu, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x000002a0u, 0x0000029fu, 0x0004007cu, 0x00000008u, 0x000002a1u, 0x000002a0u, 0x00050041u, 0x00000046u, 0x000002a2u, 0x00000055u, 0x00000198u, 0x0003003eu, 0x000002a2u, 0x000002a1u, 0x0004003du, 0x00000008u, 0x000002a3u, 0x0000004cu, 0x00040071u, 0x00000006u, 0x000002a4u, 0x000002a3u, 0x0004007cu, 0x00000017u, 0x000002a5u, 0x000002a4u, 0x0004003du, 0x00000017u, 0x000002a6u, 0x0000004au, 0x00050082u, 0x00000017u, 0x000002a7u, 0x000002a5u, 0x000002a6u, 0x0008000cu, 0x00000017u, 0x000002a8u, 0x00000001u, 0x0000002du, 0x000002a7u, 0x000000abu, 0x000000beu, 0x00040072u, 0x00000129u, 0x000002a9u, 0x000002a8u, 0x0004007cu, 0x00000008u, 0x000002aau, 0x000002a9u, 0x00050041u, 0x00000046u, 0x000002abu, 0x00000055u, 0x000001bcu, 0x0003003eu, 0x000002abu, 0x000002aau, 0x000500b1u, 0x00000034u, 0x000002adu, 0x00000297u, 0x000000bbu, 0x000300f7u, 0x000002afu, 0x00000000u, 0x000400fau, 0x000002adu, 0x000002aeu, 0x000002afu, 0x000200f8u, 0x000002aeu, 0x000500abu, 0x00000034u, 0x000002b2u, 0x00000290u, 0x000002b1u, 0x000300f7u, 0x000002b4u, 0x00000000u, 0x000400fau, 0x000002b2u, 0x000002b3u, 0x000002bbu, 0x000200f8u, 0x000002b3u, 0x000500c4u, 0x00000017u, 0x000002b6u, 0x00000290u, 0x000000b5u, 0x000500c3u, 0x00000017u, 0x000002b9u, 0x000002b7u, 0x00000297u, 0x0007000cu, 0x00000017u, 0x000002bau, 0x00000001u, 0x0000002au, 0x000002b6u, 0x000002b9u, 0x0003003eu, 0x0000028bu, 0x000002bau, 0x000200f9u, 0x000002b4u, 0x000200f8u, 0x000002bbu, 0x0003003eu, 0x00000298u, 0x000002bcu, 0x0003003eu, 0x0000028bu, 0x000002bdu, 0x000200f9u, 0x000002b4u, 0x000200f8u, 0x000002b4u, 0x000700f5u, 0x00000017u, 0x000019a3u, 0x000002bau, 0x000002b3u, 0x000002bdu, 0x000002bbu, 0x000600a9u, 0x00000034u, 0x00001a03u, 0x000002b2u, 0x00000299u, 0x000002bcu, 0x000200f9u, 0x000002afu, 0x000200f8u, 0x000002afu, 0x000700f5u, 0x00000034u, 0x000019a4u, 0x00000299u, 0x00000285u, 0x00001a03u, 0x000002b4u, 0x000700f5u, 0x00000017u, 0x000019a2u, 0x00000290u, 0x00000285u, 0x000019a3u, 0x000002b4u, 0x0004003du, 0x00000017u, 0x000002bfu, 0x00000049u, 0x000500c5u, 0x00000017u, 0x000002c1u, 0x000002bfu, 0x000019a2u, 0x0003003eu, 0x000002c2u, 0x000002c1u, 0x00050039u, 0x00000017u, 0x000002c3u, 0x00000044u, 0x000002c2u, 0x0003003eu, 0x000002beu, 0x000002c3u, 0x0003003eu, 0x000002c4u, 0x000002c3u, 0x000500c4u, 0x00000017u, 0x000002c7u, 0x000002c3u, 0x000000bbu, 0x0003003eu, 0x000002beu, 0x000002c7u, 0x000400a8u, 0x00000034u, 0x000002cau, 0x000019a4u, 0x000300f7u, 0x000002ccu, 0x00000000u, 0x000400fau, 0x000002cau, 0x000002cbu, 0x000002ccu, 0x000200f8u, 0x000002cbu, 0x0004003du, 0x00000017u, 0x000002cdu, 0x00000048u, 0x00050080u, 0x00000017u, 0x000002cfu, 0x000002cdu, 0x000002c7u, 0x000500afu, 0x00000034u, 0x000002d1u, 0x000002cfu, 0x0000028au, 0x000200f9u, 0x000002ccu, 0x000200f8u, 0x000002ccu, 0x000700f5u, 0x00000034u, 0x000002d2u, 0x000019a4u, 0x000002afu, 0x000002d1u, 0x000002cbu, 0x0003003eu, 0x000002c8u, 0x000002d2u, 0x0004003du, 0x00000017u, 0x000002d4u, 0x0000004du, 0x0004003du, 0x00000017u, 0x000002d5u, 0x0000004eu, 0x00050080u, 0x00000017u, 0x000002d6u, 0x000002d4u, 0x000002d5u, 0x000500afu, 0x00000034u, 0x000002d7u, 0x000002d6u, 0x000000cau, 0x0003003eu, 0x000002d3u, 0x000002d7u, 0x0004003du, 0x00000034u, 0x000002d8u, 0x00000051u, 0x000400a8u, 0x00000034u, 0x000002d9u, 0x000002d8u, 0x000300f7u, 0x000002dbu, 0x00000000u, 0x000400fau, 0x000002d9u, 0x000002dau, 0x000002dbu, 0x000200f8u, 0x000002dau, 0x000400a8u, 0x00000034u, 0x000002ddu, 0x000002d7u, 0x0004003du, 0x00000034u, 0x000002deu, 0x00000052u, 0x000500a7u, 0x00000034u, 0x000002dfu, 0x000002ddu, 0x000002deu, 0x000500a7u, 0x00000034u, 0x000002e1u, 0x000002dfu, 0x000002d2u, 0x000200f9u, 0x000002dbu, 0x000200f8u, 0x000002dbu, 0x000700f5u, 0x00000034u, 0x000002e2u, 0x000002d8u, 0x000002ccu, 0x000002e1u, 0x000002dau, 0x0003003eu, 0x00000053u, 0x000002e2u, 0x0003003eu, 0x00000054u, 0x000002d7u, 0x0003003eu, 0x000002e4u, 0x00000299u, 0x000500aau, 0x00000034u, 0x000002e7u, 0x0000028au, 0x0000014bu, 0x0003003eu, 0x000002e5u, 0x000002e7u, 0x0004003du, 0x00000017u, 0x000002e9u, 0x00000048u, 0x000500b1u, 0x00000034u, 0x000002ebu, 0x000002e9u, 0x0000028au, 0x0003003eu, 0x000002e8u, 0x000002ebu, 0x0004003du, 0x00000017u, 0x000002edu, 0x00000048u, 0x00050082u, 0x00000017u, 0x000002efu, 0x000002edu, 0x000002c7u, 0x0003003eu, 0x000002ecu, 0x000002efu, 0x000500b3u, 0x00000034u, 0x000002f4u, 0x000002efu, 0x0000028au, 0x000500a6u, 0x00000034u, 0x000002f5u, 0x000019a4u, 0x000002f4u, 0x0003003eu, 0x000002f0u, 0x000002f5u, 0x0004003du, 0x00000017u, 0x000002f6u, 0x00000050u, 0x000300f7u, 0x000002fbu, 0x00000000u, 0x000b00fbu, 0x000002f6u, 0x000002fbu, 0x00000000u, 0x000002f7u, 0x00000001u, 0x000002f8u, 0x00000002u, 0x000002f9u, 0x00000003u, 0x000002fau, 0x000200f8u, 0x000002f7u, 0x000400a8u, 0x00000034u, 0x000002fdu, 0x000002e7u, 0x000300f7u, 0x000002ffu, 0x00000000u, 0x000400fau, 0x000002fdu, 0x000002feu, 0x000002ffu, 0x000200f8u, 0x000002feu, 0x000600a9u, 0x00000034u, 0x00000303u, 0x000002d7u, 0x000002ebu, 0x000002f5u, 0x000200f9u, 0x000002ffu, 0x000200f8u, 0x000002ffu, 0x000700f5u, 0x00000034u, 0x00000304u, 0x000002e7u, 0x000002f7u, 0x00000303u, 0x000002feu, 0x0003003eu, 0x000002e4u, 0x00000304u, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002f8u, 0x000400a8u, 0x00000034u, 0x00000307u, 0x000002ebu, 0x000400a8u, 0x00000034u, 0x00000309u, 0x000002d2u, 0x000500a6u, 0x00000034u, 0x0000030au, 0x00000307u, 0x00000309u, 0x000400a8u, 0x00000034u, 0x0000030cu, 0x000002d7u, 0x000500a6u, 0x00000034u, 0x0000030du, 0x0000030au, 0x0000030cu, 0x000300f7u, 0x0000030fu, 0x00000000u, 0x000400fau, 0x0000030du, 0x0000030eu, 0x00000319u, 0x000200f8u, 0x0000030eu, 0x000400a8u, 0x00000034u, 0x00000311u, 0x000002e7u, 0x000300f7u, 0x00000313u, 0x00000000u, 0x000400fau, 0x00000311u, 0x00000312u, 0x00000313u, 0x000200f8u, 0x00000312u, 0x000600a9u, 0x00000034u, 0x00000317u, 0x000002d7u, 0x000002ebu, 0x000002f5u, 0x000200f9u, 0x00000313u, 0x000200f8u, 0x00000313u, 0x000700f5u, 0x00000034u, 0x00000318u, 0x000002e7u, 0x0000030eu, 0x00000317u, 0x00000312u, 0x0003003eu, 0x000002e4u, 0x00000318u, 0x000200f9u, 0x0000030fu, 0x000200f8u, 0x00000319u, 0x000500c7u, 0x00000017u, 0x0000031bu, 0x000002c3u, 0x000002bdu, 0x0003003eu, 0x0000031cu, 0x0000031bu, 0x00050039u, 0x00000017u, 0x0000031du, 0x0000002fu, 0x0000031cu, 0x0003003eu, 0x000002c4u, 0x0000031du, 0x000500c3u, 0x00000017u, 0x00000321u, 0x0000028au, 0x0000031du, 0x0004003du, 0x00000017u, 0x00000322u, 0x00000048u, 0x000500c3u, 0x00000017u, 0x00000324u, 0x00000322u, 0x0000031du, 0x00050082u, 0x00000017u, 0x00000325u, 0x00000321u, 0x00000324u, 0x000500c7u, 0x00000017u, 0x00000326u, 0x00000325u, 0x00000296u, 0x0003003eu, 0x0000031eu, 0x00000326u, 0x0004003du, 0x00000017u, 0x00000328u, 0x0000004du, 0x00050084u, 0x00000017u, 0x00000329u, 0x00000326u, 0x00000328u, 0x000500c3u, 0x00000017u, 0x0000032au, 0x00000329u, 0x000000bbu, 0x0007000cu, 0x00000017u, 0x0000032bu, 0x00000001u, 0x00000027u, 0x0000032au, 0x000000cau, 0x0003003eu, 0x0000004du, 0x0000032bu, 0x0003003eu, 0x000002e4u, 0x000002bcu, 0x000200f9u, 0x0000030fu, 0x000200f8u, 0x0000030fu, 0x000700f5u, 0x00000034u, 0x000019b4u, 0x00000318u, 0x00000313u, 0x000002bcu, 0x00000319u, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002f9u, 0x000500a6u, 0x00000034u, 0x0000032fu, 0x000002ebu, 0x000002e7u, 0x0003003eu, 0x000002e4u, 0x0000032fu, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002fau, 0x000500a7u, 0x00000034u, 0x00000333u, 0x000002d2u, 0x000002f5u, 0x000400a8u, 0x00000034u, 0x00000335u, 0x000002e7u, 0x000500a7u, 0x00000034u, 0x00000336u, 0x00000333u, 0x00000335u, 0x0003003eu, 0x000002e4u, 0x00000336u, 0x000200f9u, 0x000002fbu, 0x000200f8u, 0x000002fbu, 0x000d00f5u, 0x00000034u, 0x000019b3u, 0x00000299u, 0x000002dbu, 0x00000304u, 0x000002ffu, 0x000019b4u, 0x0000030fu, 0x0000032fu, 0x000002f9u, 0x00000336u, 0x000002fau, 0x000200f9u, 0x00000286u, 0x000200f8u, 0x00000339u, 0x00050041u, 0x00000046u, 0x0000033au, 0x00000055u, 0x00000198u, 0x0003003eu, 0x0000033au, 0x000001eau, 0x0004003du, 0x00000017u, 0x0000033bu, 0x0000004au, 0x00050082u, 0x00000017u, 0x0000033cu, 0x00000296u, 0x0000033bu, 0x0007000cu, 0x00000017u, 0x0000033du, 0x00000001u, 0x00000027u, 0x0000033cu, 0x000000beu, 0x00040072u, 0x00000129u, 0x0000033eu, 0x0000033du, 0x0004007cu, 0x00000008u, 0x0000033fu, 0x0000033eu, 0x00050041u, 0x00000046u, 0x00000340u, 0x00000055u, 0x000001bcu, 0x0003003eu, 0x00000340u, 0x0000033fu, 0x0004003du, 0x00000017u, 0x00000342u, 0x0000004du, 0x0004003du, 0x00000017u, 0x00000343u, 0x0000004eu, 0x00050080u, 0x00000017u, 0x00000344u, 0x00000342u, 0x00000343u, 0x000500afu, 0x00000034u, 0x00000345u, 0x00000344u, 0x000000cau, 0x0003003eu, 0x00000341u, 0x00000345u, 0x0004003du, 0x00000034u, 0x00000346u, 0x00000051u, 0x000400a8u, 0x00000034u, 0x00000347u, 0x00000346u, 0x000300f7u, 0x00000349u, 0x00000000u, 0x000400fau, 0x00000347u, 0x00000348u, 0x00000349u, 0x000200f8u, 0x00000348u, 0x000400a8u, 0x00000034u, 0x0000034bu, 0x00000345u, 0x0004003du, 0x00000034u, 0x0000034cu, 0x00000052u, 0x000500a7u, 0x00000034u, 0x0000034du, 0x0000034bu, 0x0000034cu, 0x000200f9u, 0x00000349u, 0x000200f8u, 0x00000349u, 0x000700f5u, 0x00000034u, 0x0000034eu, 0x00000346u, 0x00000339u, 0x0000034du, 0x00000348u, 0x0003003eu, 0x00000053u, 0x0000034eu, 0x0003003eu, 0x00000054u, 0x00000345u, 0x0003003eu, 0x000002e4u, 0x000002bcu, 0x000200f9u, 0x00000286u, 0x000200f8u, 0x00000286u, 0x000700f5u, 0x00000034u, 0x000019b2u, 0x000019b3u, 0x000002fbu, 0x000002bcu, 0x00000349u, 0x000200feu, 0x000019b2u, 0x00010038u, 0x00050036u, 0x00000017u, 0x0000005du, 0x00000000u, 0x00000058u, 0x00030037u, 0x0000001au, 0x00000059u, 0x00030037u, 0x0000001au, 0x0000005au, 0x00030037u, 0x00000035u, 0x0000005bu, 0x00030037u, 0x0000001au, 0x0000005cu, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x0000001au, 0x00000353u, 0x00000007u, 0x0003003eu, 0x00000353u, 0x000000abu, 0x0004003du, 0x00000017u, 0x00000354u, 0x0000005cu, 0x000300f7u, 0x00000359u, 0x00000000u, 0x000b00fbu, 0x00000354u, 0x00000359u, 0x00000000u, 0x00000355u, 0x00000001u, 0x00000356u, 0x00000002u, 0x00000357u, 0x00000003u, 0x00000358u, 0x000200f8u, 0x00000355u, 0x0004003du, 0x00000034u, 0x0000035au, 0x0000005bu, 0x000300f7u, 0x0000035cu, 0x00000000u, 0x000400fau, 0x0000035au, 0x0000035bu, 0x00000361u, 0x000200f8u, 0x0000035bu, 0x0004003du, 0x00000017u, 0x0000035du, 0x0000005au, 0x0004003du, 0x00000017u, 0x0000035eu, 0x00000059u, 0x00050080u, 0x00000017u, 0x0000035fu, 0x0000035du, 0x0000035eu, 0x0007000cu, 0x00000017u, 0x00000360u, 0x00000001u, 0x00000027u, 0x000000c7u, 0x0000035fu, 0x0003003eu, 0x00000353u, 0x00000360u, 0x000200f9u, 0x0000035cu, 0x000200f8u, 0x00000361u, 0x0004003du, 0x00000017u, 0x00000362u, 0x00000059u, 0x00050082u, 0x00000017u, 0x00000363u, 0x00000362u, 0x000000b5u, 0x000500c7u, 0x00000017u, 0x00000364u, 0x00000363u, 0x000000c7u, 0x0003003eu, 0x00000353u, 0x00000364u, 0x000200f9u, 0x0000035cu, 0x000200f8u, 0x0000035cu, 0x000700f5u, 0x00000017u, 0x000019b6u, 0x00000360u, 0x0000035bu, 0x00000364u, 0x00000361u, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000356u, 0x0004003du, 0x00000017u, 0x00000366u, 0x00000059u, 0x0004003du, 0x00000017u, 0x00000367u, 0x0000005au, 0x00050080u, 0x00000017u, 0x00000368u, 0x00000366u, 0x00000367u, 0x000500c7u, 0x00000017u, 0x00000369u, 0x00000368u, 0x000000c7u, 0x0003003eu, 0x00000353u, 0x00000369u, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000357u, 0x0003003eu, 0x00000353u, 0x000000c7u, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000358u, 0x0004003du, 0x00000017u, 0x0000036cu, 0x0000005au, 0x0003003eu, 0x00000353u, 0x0000036cu, 0x000200f9u, 0x00000359u, 0x000200f8u, 0x00000359u, 0x000d00f5u, 0x00000017u, 0x000019b5u, 0x000000abu, 0x0000005eu, 0x000019b6u, 0x0000035cu, 0x00000369u, 0x00000356u, 0x000000c7u, 0x00000357u, 0x0000036cu, 0x00000358u, 0x000200feu, 0x000019b5u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000062u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000060u, 0x00030037u, 0x00000007u, 0x00000061u, 0x000200f8u, 0x00000063u, 0x0004003bu, 0x00000046u, 0x00000380u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003a1u, 0x00000007u, 0x0004003bu, 0x000003adu, 0x000003aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000003edu, 0x00000007u, 0x000300f7u, 0x00000377u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000377u, 0x00000000u, 0x00000373u, 0x00000001u, 0x00000373u, 0x00000002u, 0x00000374u, 0x00000003u, 0x00000375u, 0x00000004u, 0x00000376u, 0x000200f8u, 0x00000373u, 0x0004003du, 0x00000006u, 0x0000037au, 0x00000060u, 0x000500c7u, 0x00000006u, 0x0000037bu, 0x0000037au, 0x00000379u, 0x0003003eu, 0x00000060u, 0x0000037bu, 0x0004003du, 0x00000006u, 0x0000037cu, 0x00000061u, 0x00050084u, 0x00000006u, 0x0000037du, 0x0000037cu, 0x00000378u, 0x0004003du, 0x00000006u, 0x0000037eu, 0x00000060u, 0x00050080u, 0x00000006u, 0x0000037fu, 0x0000037eu, 0x0000037du, 0x0003003eu, 0x00000060u, 0x0000037fu, 0x0004003du, 0x00000006u, 0x00000385u, 0x00000060u, 0x000500c6u, 0x00000006u, 0x00000386u, 0x00000385u, 0x000001c4u, 0x00060041u, 0x00000387u, 0x00000388u, 0x00000384u, 0x000000abu, 0x00000386u, 0x0004003du, 0x00000008u, 0x00000389u, 0x00000388u, 0x0003003eu, 0x00000380u, 0x00000389u, 0x0004003du, 0x00000006u, 0x00000393u, 0x00000060u, 0x000500c2u, 0x00000006u, 0x00000394u, 0x00000393u, 0x000000b5u, 0x00060041u, 0x00000387u, 0x00000395u, 0x00000392u, 0x000000abu, 0x00000394u, 0x0004003du, 0x00000008u, 0x00000396u, 0x00000395u, 0x00070050u, 0x00000009u, 0x00000397u, 0x00000389u, 0x00000389u, 0x00000389u, 0x00000396u, 0x0003003eu, 0x0000038bu, 0x00000397u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000374u, 0x0004003du, 0x00000006u, 0x0000039au, 0x00000060u, 0x000500c7u, 0x00000006u, 0x0000039bu, 0x0000039au, 0x00000399u, 0x0003003eu, 0x00000060u, 0x0000039bu, 0x0004003du, 0x00000006u, 0x0000039cu, 0x00000061u, 0x00050084u, 0x00000006u, 0x0000039eu, 0x0000039cu, 0x0000039du, 0x0004003du, 0x00000006u, 0x0000039fu, 0x00000060u, 0x00050080u, 0x00000006u, 0x000003a0u, 0x0000039fu, 0x0000039eu, 0x0003003eu, 0x00000060u, 0x000003a0u, 0x0004003du, 0x00000006u, 0x000003a6u, 0x00000060u, 0x000500c6u, 0x00000006u, 0x000003a7u, 0x000003a6u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000003a9u, 0x000003a5u, 0x000000abu, 0x000003a7u, 0x0004003du, 0x0000000au, 0x000003aau, 0x000003a9u, 0x00040071u, 0x00000006u, 0x000003abu, 0x000003aau, 0x0003003eu, 0x000003a1u, 0x000003abu, 0x000500c2u, 0x00000006u, 0x000003b1u, 0x000003abu, 0x000003b0u, 0x000500c2u, 0x00000006u, 0x000003b3u, 0x000003abu, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x000003b5u, 0x000003abu, 0x00000170u, 0x00060050u, 0x000003acu, 0x000003b6u, 0x000003b1u, 0x000003b3u, 0x000003b5u, 0x000500c7u, 0x000003acu, 0x000003b9u, 0x000003b6u, 0x000019f3u, 0x0003003eu, 0x000003aeu, 0x000003b9u, 0x00040071u, 0x0000001bu, 0x000003bbu, 0x000003b9u, 0x0004003du, 0x00000006u, 0x000003bcu, 0x00000060u, 0x00060041u, 0x00000387u, 0x000003bdu, 0x00000392u, 0x000000abu, 0x000003bcu, 0x0004003du, 0x00000008u, 0x000003beu, 0x000003bdu, 0x000500c4u, 0x00000008u, 0x000003c0u, 0x000003beu, 0x000003bfu, 0x000500c7u, 0x00000006u, 0x000003c2u, 0x000003abu, 0x000001bcu, 0x000500c4u, 0x00000006u, 0x000003c3u, 0x000003c2u, 0x000000c7u, 0x00040071u, 0x00000008u, 0x000003c4u, 0x000003c3u, 0x000500c5u, 0x00000008u, 0x000003c5u, 0x000003c0u, 0x000003c4u, 0x00050051u, 0x00000008u, 0x000003c6u, 0x000003bbu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000003c7u, 0x000003bbu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000003c8u, 0x000003bbu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000003c9u, 0x000003c6u, 0x000003c7u, 0x000003c8u, 0x000003c5u, 0x0003003eu, 0x0000038bu, 0x000003c9u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000375u, 0x0004003du, 0x00000006u, 0x000003cbu, 0x00000060u, 0x000500c7u, 0x00000006u, 0x000003ccu, 0x000003cbu, 0x00000399u, 0x0003003eu, 0x00000060u, 0x000003ccu, 0x0004003du, 0x00000006u, 0x000003cdu, 0x00000061u, 0x00050084u, 0x00000006u, 0x000003cfu, 0x000003cdu, 0x000003ceu, 0x0004003du, 0x00000006u, 0x000003d0u, 0x00000060u, 0x00050080u, 0x00000006u, 0x000003d1u, 0x000003d0u, 0x000003cfu, 0x0003003eu, 0x00000060u, 0x000003d1u, 0x0004003du, 0x00000006u, 0x000003d3u, 0x00000060u, 0x000500c6u, 0x00000006u, 0x000003d4u, 0x000003d3u, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x000003d5u, 0x000003a5u, 0x000000abu, 0x000003d4u, 0x0004003du, 0x0000000au, 0x000003d6u, 0x000003d5u, 0x00040071u, 0x00000006u, 0x000003d7u, 0x000003d6u, 0x0003003eu, 0x000003d2u, 0x000003d7u, 0x000500c2u, 0x00000006u, 0x000003d9u, 0x000003d7u, 0x000003b0u, 0x00040071u, 0x00000008u, 0x000003dau, 0x000003d9u, 0x00060050u, 0x0000001bu, 0x000003dbu, 0x000003dau, 0x000003dau, 0x000003dau, 0x000500c7u, 0x00000006u, 0x000003deu, 0x000003d7u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x000003dfu, 0x000003deu, 0x00070050u, 0x00000009u, 0x000003e3u, 0x000003dau, 0x000003dau, 0x000003dau, 0x000003dfu, 0x0003003eu, 0x0000038bu, 0x000003e3u, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000376u, 0x0004003du, 0x00000006u, 0x000003e6u, 0x00000060u, 0x000500c7u, 0x00000006u, 0x000003e7u, 0x000003e6u, 0x000003e5u, 0x0003003eu, 0x00000060u, 0x000003e7u, 0x0004003du, 0x00000006u, 0x000003e8u, 0x00000061u, 0x00050084u, 0x00000006u, 0x000003eau, 0x000003e8u, 0x000003e9u, 0x0004003du, 0x00000006u, 0x000003ebu, 0x00000060u, 0x00050080u, 0x00000006u, 0x000003ecu, 0x000003ebu, 0x000003eau, 0x0003003eu, 0x00000060u, 0x000003ecu, 0x0004003du, 0x00000006u, 0x000003f2u, 0x00000060u, 0x00060041u, 0x000003f3u, 0x000003f4u, 0x000003f1u, 0x000000abu, 0x000003f2u, 0x0004003du, 0x00000006u, 0x000003f5u, 0x000003f4u, 0x0003003eu, 0x000003edu, 0x000003f5u, 0x00070050u, 0x0000025au, 0x000003f7u, 0x000003f5u, 0x000003f5u, 0x000003f5u, 0x000003f5u, 0x000500c2u, 0x0000025au, 0x000003fbu, 0x000003f7u, 0x000003fau, 0x000500c7u, 0x0000025au, 0x000003fdu, 0x000003fbu, 0x000003fcu, 0x00040071u, 0x00000009u, 0x000003feu, 0x000003fdu, 0x0003003eu, 0x0000038bu, 0x000003feu, 0x000200f9u, 0x00000377u, 0x000200f8u, 0x00000377u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000064u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000065u, 0x0004003bu, 0x00000007u, 0x0000040eu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000428u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000042cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000433u, 0x00000007u, 0x000300f7u, 0x00000403u, 0x00000000u, 0x000700fbu, 0x00000372u, 0x00000403u, 0x00000002u, 0x00000401u, 0x00000003u, 0x00000402u, 0x000200f8u, 0x00000401u, 0x00050041u, 0x00000404u, 0x00000406u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000407u, 0x00000406u, 0x000500c2u, 0x00000008u, 0x00000408u, 0x00000407u, 0x00000201u, 0x00050041u, 0x00000404u, 0x00000409u, 0x0000038bu, 0x00000170u, 0x0004003du, 0x00000008u, 0x0000040au, 0x00000409u, 0x000500c7u, 0x00000008u, 0x0000040cu, 0x0000040au, 0x0000040bu, 0x000500c5u, 0x00000008u, 0x0000040du, 0x00000408u, 0x0000040cu, 0x0003003eu, 0x00000405u, 0x0000040du, 0x00050041u, 0x00000404u, 0x0000040fu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x00000410u, 0x0000040fu, 0x00040071u, 0x00000006u, 0x00000411u, 0x00000410u, 0x000500c7u, 0x00000006u, 0x00000412u, 0x00000411u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000414u, 0x00000412u, 0x00000413u, 0x0003003eu, 0x0000040eu, 0x00000414u, 0x00050041u, 0x00000404u, 0x00000415u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000416u, 0x00000415u, 0x00040071u, 0x00000006u, 0x00000417u, 0x00000416u, 0x000500c7u, 0x00000006u, 0x00000418u, 0x00000417u, 0x000003b7u, 0x000500c4u, 0x00000006u, 0x00000419u, 0x00000418u, 0x000001bcu, 0x000500c5u, 0x00000006u, 0x0000041bu, 0x00000414u, 0x00000419u, 0x0003003eu, 0x0000040eu, 0x0000041bu, 0x0004003du, 0x00000008u, 0x0000041du, 0x00000409u, 0x00040071u, 0x00000006u, 0x0000041eu, 0x0000041du, 0x000500c7u, 0x00000006u, 0x0000041fu, 0x0000041eu, 0x000003b7u, 0x000500c2u, 0x00000006u, 0x00000421u, 0x0000041fu, 0x00000420u, 0x000500c5u, 0x00000006u, 0x00000423u, 0x0000041bu, 0x00000421u, 0x0003003eu, 0x0000040eu, 0x00000423u, 0x00040071u, 0x0000000au, 0x00000426u, 0x00000423u, 0x0003003eu, 0x00000424u, 0x00000426u, 0x000200f9u, 0x00000403u, 0x000200f8u, 0x00000402u, 0x0004003du, 0x00000009u, 0x00000429u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x0000042au, 0x00000429u, 0x00000429u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x0000042bu, 0x0000042au, 0x0003003eu, 0x00000428u, 0x0000042bu, 0x00050041u, 0x00000007u, 0x0000042du, 0x00000428u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000042eu, 0x0000042du, 0x000500c4u, 0x00000006u, 0x0000042fu, 0x0000042eu, 0x000003b0u, 0x00050041u, 0x00000007u, 0x00000430u, 0x00000428u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000431u, 0x00000430u, 0x000500c5u, 0x00000006u, 0x00000432u, 0x0000042fu, 0x00000431u, 0x0003003eu, 0x0000042cu, 0x00000432u, 0x000500c7u, 0x00000006u, 0x00000435u, 0x00000432u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000436u, 0x00000435u, 0x000001c4u, 0x0003003eu, 0x00000433u, 0x00000436u, 0x000500c2u, 0x00000006u, 0x00000438u, 0x00000432u, 0x00000170u, 0x00040071u, 0x0000000au, 0x00000439u, 0x00000438u, 0x0003003eu, 0x00000424u, 0x00000439u, 0x000500c7u, 0x00000006u, 0x0000043bu, 0x00000432u, 0x000001c4u, 0x000500c4u, 0x00000006u, 0x0000043cu, 0x0000043bu, 0x00000170u, 0x000500c5u, 0x00000006u, 0x0000043eu, 0x0000043cu, 0x00000436u, 0x00040071u, 0x00000008u, 0x0000043fu, 0x0000043eu, 0x0003003eu, 0x00000405u, 0x0000043fu, 0x000200f9u, 0x00000403u, 0x000200f8u, 0x00000403u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000066u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000067u, 0x0004003bu, 0x00000007u, 0x00000442u, 0x00000007u, 0x0004003du, 0x0000000au, 0x00000443u, 0x00000424u, 0x00040071u, 0x00000006u, 0x00000444u, 0x00000443u, 0x000500c4u, 0x00000006u, 0x00000445u, 0x00000444u, 0x00000420u, 0x0004003du, 0x00000008u, 0x00000446u, 0x00000405u, 0x00040071u, 0x00000006u, 0x00000447u, 0x00000446u, 0x000500c5u, 0x00000006u, 0x00000448u, 0x00000445u, 0x00000447u, 0x0003003eu, 0x00000442u, 0x00000448u, 0x000300f7u, 0x0000044bu, 0x00000000u, 0x000700fbu, 0x00000372u, 0x0000044bu, 0x00000002u, 0x00000449u, 0x00000003u, 0x0000044au, 0x000200f8u, 0x00000449u, 0x000500c2u, 0x00000006u, 0x0000044eu, 0x00000448u, 0x0000044du, 0x000500c7u, 0x00000006u, 0x0000044fu, 0x0000044eu, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000450u, 0x0000044fu, 0x00050041u, 0x00000404u, 0x00000451u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000451u, 0x00000450u, 0x000500c2u, 0x00000006u, 0x00000454u, 0x00000448u, 0x00000453u, 0x000500c7u, 0x00000006u, 0x00000455u, 0x00000454u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x00000456u, 0x00000455u, 0x00050041u, 0x00000404u, 0x00000457u, 0x0000038bu, 0x000001bcu, 0x0003003eu, 0x00000457u, 0x00000456u, 0x000500c2u, 0x00000006u, 0x00000459u, 0x00000448u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x0000045au, 0x00000459u, 0x000003b7u, 0x00040071u, 0x00000008u, 0x0000045bu, 0x0000045au, 0x00050041u, 0x00000404u, 0x0000045cu, 0x0000038bu, 0x00000170u, 0x0003003eu, 0x0000045cu, 0x0000045bu, 0x000500c7u, 0x00000006u, 0x0000045fu, 0x00000448u, 0x0000045eu, 0x000500c4u, 0x00000006u, 0x00000460u, 0x0000045fu, 0x00000453u, 0x00040071u, 0x00000008u, 0x00000461u, 0x00000460u, 0x00050041u, 0x00000404u, 0x00000462u, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x00000462u, 0x00000461u, 0x000200f9u, 0x0000044bu, 0x000200f8u, 0x0000044au, 0x000500c2u, 0x00000006u, 0x00000465u, 0x00000448u, 0x0000044du, 0x000500c7u, 0x00000006u, 0x00000466u, 0x00000465u, 0x000003ddu, 0x00040071u, 0x00000008u, 0x00000467u, 0x00000466u, 0x00050041u, 0x00000404u, 0x00000468u, 0x0000038bu, 0x00000198u, 0x0003003eu, 0x00000468u, 0x00000467u, 0x000500c2u, 0x00000006u, 0x0000046au, 0x00000448u, 0x00000170u, 0x000500c7u, 0x00000006u, 0x0000046bu, 0x0000046au, 0x000003ddu, 0x00040071u, 0x00000008u, 0x0000046cu, 0x0000046bu, 0x00050041u, 0x00000404u, 0x0000046du, 0x0000038bu, 0x000001c4u, 0x0003003eu, 0x0000046du, 0x0000046cu, 0x000200f9u, 0x0000044bu, 0x000200f8u, 0x0000044bu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000006au, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000068u, 0x00030037u, 0x00000007u, 0x00000069u, 0x000200f8u, 0x0000006bu, 0x0004003bu, 0x00000021u, 0x00000479u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000472u, 0x00000068u, 0x000500c7u, 0x00000006u, 0x00000473u, 0x00000472u, 0x00000399u, 0x0003003eu, 0x00000068u, 0x00000473u, 0x0004003du, 0x00000006u, 0x00000474u, 0x00000069u, 0x00050084u, 0x00000006u, 0x00000476u, 0x00000474u, 0x00000475u, 0x0004003du, 0x00000006u, 0x00000477u, 0x00000068u, 0x00050080u, 0x00000006u, 0x00000478u, 0x00000477u, 0x00000476u, 0x0003003eu, 0x00000068u, 0x00000478u, 0x0004003du, 0x00000006u, 0x0000047au, 0x00000068u, 0x000500c6u, 0x00000006u, 0x0000047bu, 0x0000047au, 0x000001bcu, 0x00060041u, 0x000003a8u, 0x0000047cu, 0x000003a5u, 0x000000abu, 0x0000047bu, 0x0004003du, 0x0000000au, 0x0000047du, 0x0000047cu, 0x0003003eu, 0x00000479u, 0x0000047du, 0x000500c2u, 0x0000000au, 0x00000480u, 0x0000047du, 0x0000047fu, 0x0003003eu, 0x00000424u, 0x00000480u, 0x0004003du, 0x00000006u, 0x00000481u, 0x00000068u, 0x00060041u, 0x00000387u, 0x00000482u, 0x00000392u, 0x000000abu, 0x00000481u, 0x0004003du, 0x00000008u, 0x00000483u, 0x00000482u, 0x000500c7u, 0x0000000au, 0x00000486u, 0x0000047du, 0x00000485u, 0x000500c4u, 0x0000000au, 0x00000487u, 0x00000486u, 0x0000047fu, 0x00040071u, 0x00000008u, 0x00000488u, 0x00000487u, 0x000500c5u, 0x00000008u, 0x00000489u, 0x00000483u, 0x00000488u, 0x0003003eu, 0x00000405u, 0x00000489u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000006eu, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x0000006cu, 0x00030037u, 0x00000007u, 0x0000006du, 0x000200f8u, 0x0000006fu, 0x0004003bu, 0x000004ddu, 0x000004deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000004ebu, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000518u, 0x00000007u, 0x0004003bu, 0x000004ddu, 0x0000053au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000053du, 0x00000007u, 0x0004003du, 0x00000034u, 0x0000048au, 0x00000471u, 0x000300f7u, 0x0000048cu, 0x00000000u, 0x000400fau, 0x0000048au, 0x0000048bu, 0x0000048cu, 0x000200f8u, 0x0000048bu, 0x000300f7u, 0x00000492u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000492u, 0x00000000u, 0x0000048du, 0x00000001u, 0x0000048eu, 0x00000002u, 0x0000048fu, 0x00000003u, 0x00000490u, 0x00000004u, 0x00000491u, 0x000200f8u, 0x0000048du, 0x0004003du, 0x00000006u, 0x00000493u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x00000494u, 0x00000493u, 0x00000379u, 0x0003003eu, 0x0000006cu, 0x00000494u, 0x0004003du, 0x00000006u, 0x00000495u, 0x0000006du, 0x00050084u, 0x00000006u, 0x00000496u, 0x00000495u, 0x00000378u, 0x0004003du, 0x00000006u, 0x00000497u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x00000498u, 0x00000497u, 0x00000496u, 0x0003003eu, 0x0000006cu, 0x00000498u, 0x0004003du, 0x00000006u, 0x00000499u, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x0000049au, 0x00000499u, 0x000001c4u, 0x00060041u, 0x00000387u, 0x0000049bu, 0x00000384u, 0x000000abu, 0x0000049au, 0x0003003eu, 0x0000049bu, 0x000001eau, 0x0004003du, 0x00000006u, 0x0000049cu, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x0000049du, 0x0000049cu, 0x000001bcu, 0x000500abu, 0x00000034u, 0x0000049eu, 0x0000049du, 0x00000198u, 0x000300f7u, 0x000004a0u, 0x00000000u, 0x000400fau, 0x0000049eu, 0x0000049fu, 0x000004a0u, 0x000200f8u, 0x0000049fu, 0x0004003du, 0x00000006u, 0x000004a1u, 0x0000006cu, 0x000500c2u, 0x00000006u, 0x000004a2u, 0x000004a1u, 0x000001bcu, 0x00050041u, 0x00000404u, 0x000004a3u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x000004a4u, 0x000004a3u, 0x00060041u, 0x00000387u, 0x000004a5u, 0x00000392u, 0x000000abu, 0x000004a2u, 0x0003003eu, 0x000004a5u, 0x000004a4u, 0x000200f9u, 0x000004a0u, 0x000200f8u, 0x000004a0u, 0x000300f7u, 0x000004adu, 0x00000000u, 0x000400fau, 0x000004abu, 0x000004acu, 0x000004adu, 0x000200f8u, 0x000004acu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x000004afu, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004b0u, 0x000004afu, 0x000001c4u, 0x00050080u, 0x00000006u, 0x000004b1u, 0x000004b0u, 0x00000378u, 0x00060041u, 0x00000387u, 0x000004b2u, 0x00000384u, 0x000000abu, 0x000004b1u, 0x0003003eu, 0x000004b2u, 0x000001cfu, 0x000200f9u, 0x000004adu, 0x000200f8u, 0x000004adu, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x0000048eu, 0x0004003du, 0x00000006u, 0x000004b4u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x000004b5u, 0x000004b4u, 0x00000379u, 0x0003003eu, 0x0000006cu, 0x000004b5u, 0x0004003du, 0x00000006u, 0x000004b6u, 0x0000006du, 0x00050084u, 0x00000006u, 0x000004b7u, 0x000004b6u, 0x00000378u, 0x0004003du, 0x00000006u, 0x000004b8u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x000004b9u, 0x000004b8u, 0x000004b7u, 0x0003003eu, 0x0000006cu, 0x000004b9u, 0x0004003du, 0x00000006u, 0x000004bau, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004bbu, 0x000004bau, 0x000001c4u, 0x00050041u, 0x00000404u, 0x000004bcu, 0x0000038bu, 0x00000198u, 0x0004003du, 0x00000008u, 0x000004bdu, 0x000004bcu, 0x00060041u, 0x00000387u, 0x000004beu, 0x00000384u, 0x000000abu, 0x000004bbu, 0x0003003eu, 0x000004beu, 0x000004bdu, 0x0004003du, 0x00000006u, 0x000004bfu, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x000004c0u, 0x000004bfu, 0x000001bcu, 0x000500abu, 0x00000034u, 0x000004c1u, 0x000004c0u, 0x00000198u, 0x000300f7u, 0x000004c3u, 0x00000000u, 0x000400fau, 0x000004c1u, 0x000004c2u, 0x000004c3u, 0x000200f8u, 0x000004c2u, 0x0004003du, 0x00000006u, 0x000004c4u, 0x0000006cu, 0x000500c2u, 0x00000006u, 0x000004c5u, 0x000004c4u, 0x000001bcu, 0x0004003du, 0x00000008u, 0x000004c7u, 0x000004bcu, 0x00040071u, 0x00000006u, 0x000004c8u, 0x000004c7u, 0x0004007cu, 0x00000017u, 0x000004c9u, 0x000004c8u, 0x000500c7u, 0x00000017u, 0x000004cau, 0x000004c9u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x000004cbu, 0x000004cau, 0x000000bbu, 0x00040072u, 0x00000129u, 0x000004ccu, 0x000004cbu, 0x0004007cu, 0x00000008u, 0x000004cdu, 0x000004ccu, 0x00060041u, 0x00000387u, 0x000004ceu, 0x00000392u, 0x000000abu, 0x000004c5u, 0x0003003eu, 0x000004ceu, 0x000004cdu, 0x000200f9u, 0x000004c3u, 0x000200f8u, 0x000004c3u, 0x000300f7u, 0x000004d0u, 0x00000000u, 0x000400fau, 0x000004abu, 0x000004cfu, 0x000004d0u, 0x000200f8u, 0x000004cfu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x000004d1u, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004d2u, 0x000004d1u, 0x000001c4u, 0x00050080u, 0x00000006u, 0x000004d3u, 0x000004d2u, 0x00000378u, 0x00060041u, 0x00000387u, 0x000004d4u, 0x00000384u, 0x000000abu, 0x000004d3u, 0x0003003eu, 0x000004d4u, 0x000001cfu, 0x000200f9u, 0x000004d0u, 0x000200f8u, 0x000004d0u, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x0000048fu, 0x0004003du, 0x00000006u, 0x000004d6u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x000004d7u, 0x000004d6u, 0x00000399u, 0x0003003eu, 0x0000006cu, 0x000004d7u, 0x0004003du, 0x00000006u, 0x000004d8u, 0x0000006du, 0x00050084u, 0x00000006u, 0x000004dau, 0x000004d8u, 0x000004d9u, 0x0004003du, 0x00000006u, 0x000004dbu, 0x0000006cu, 0x00050080u, 0x00000006u, 0x000004dcu, 0x000004dbu, 0x000004dau, 0x0003003eu, 0x0000006cu, 0x000004dcu, 0x0004003du, 0x00000009u, 0x000004dfu, 0x0000038bu, 0x00040071u, 0x0000025au, 0x000004e0u, 0x000004dfu, 0x0003003eu, 0x000004deu, 0x000004e0u, 0x0004003du, 0x0000025au, 0x000004e1u, 0x000004deu, 0x0008004fu, 0x000003acu, 0x000004e2u, 0x000004e1u, 0x000004e1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x000003acu, 0x000004e4u, 0x000004e2u, 0x000019f3u, 0x0004003du, 0x0000025au, 0x000004e5u, 0x000004deu, 0x0009004fu, 0x0000025au, 0x000004e6u, 0x000004e5u, 0x000004e4u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x000004deu, 0x000004e6u, 0x00050041u, 0x00000007u, 0x000004e8u, 0x000004deu, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000004e9u, 0x000004e8u, 0x000500c2u, 0x00000006u, 0x000004eau, 0x000004e9u, 0x00000453u, 0x0003003eu, 0x000004e7u, 0x000004eau, 0x00050041u, 0x00000007u, 0x000004ecu, 0x000004deu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000004edu, 0x000004ecu, 0x000500c4u, 0x00000006u, 0x000004eeu, 0x000004edu, 0x000003b0u, 0x00050041u, 0x00000007u, 0x000004efu, 0x000004deu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000004f0u, 0x000004efu, 0x000500c4u, 0x00000006u, 0x000004f1u, 0x000004f0u, 0x000001c4u, 0x000500c5u, 0x00000006u, 0x000004f2u, 0x000004eeu, 0x000004f1u, 0x00050041u, 0x00000007u, 0x000004f3u, 0x000004deu, 0x00000170u, 0x0004003du, 0x00000006u, 0x000004f4u, 0x000004f3u, 0x000500c2u, 0x00000006u, 0x000004f5u, 0x000004f4u, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000004f6u, 0x000004f2u, 0x000004f5u, 0x000500c2u, 0x00000006u, 0x000004f8u, 0x000004eau, 0x00000170u, 0x000500c5u, 0x00000006u, 0x000004f9u, 0x000004f6u, 0x000004f8u, 0x0003003eu, 0x000004ebu, 0x000004f9u, 0x0004003du, 0x00000006u, 0x000004fau, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x000004fbu, 0x000004fau, 0x000001bcu, 0x00040071u, 0x0000000au, 0x000004fdu, 0x000004f9u, 0x00060041u, 0x000003a8u, 0x000004feu, 0x000003a5u, 0x000000abu, 0x000004fbu, 0x0003003eu, 0x000004feu, 0x000004fdu, 0x0004003du, 0x00000006u, 0x000004ffu, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x00000501u, 0x000004eau, 0x000001c4u, 0x00040071u, 0x00000008u, 0x00000502u, 0x00000501u, 0x00060041u, 0x00000387u, 0x00000503u, 0x00000392u, 0x000000abu, 0x000004ffu, 0x0003003eu, 0x00000503u, 0x00000502u, 0x000300f7u, 0x00000505u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00000504u, 0x00000505u, 0x000200f8u, 0x00000504u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x00000506u, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x00000507u, 0x00000506u, 0x000001bcu, 0x00050080u, 0x00000006u, 0x00000509u, 0x00000507u, 0x00000508u, 0x00060041u, 0x000003a8u, 0x0000050bu, 0x000003a5u, 0x000000abu, 0x00000509u, 0x0003003eu, 0x0000050bu, 0x0000050au, 0x000200f9u, 0x00000505u, 0x000200f8u, 0x00000505u, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x00000490u, 0x0004003du, 0x00000006u, 0x0000050du, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x0000050eu, 0x0000050du, 0x00000399u, 0x0003003eu, 0x0000006cu, 0x0000050eu, 0x0004003du, 0x00000006u, 0x0000050fu, 0x0000006du, 0x00050084u, 0x00000006u, 0x00000511u, 0x0000050fu, 0x00000510u, 0x0004003du, 0x00000006u, 0x00000512u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x00000513u, 0x00000512u, 0x00000511u, 0x0003003eu, 0x0000006cu, 0x00000513u, 0x0004003du, 0x00000009u, 0x00000515u, 0x0000038bu, 0x0007004fu, 0x00000036u, 0x00000516u, 0x00000515u, 0x00000515u, 0x00000000u, 0x00000003u, 0x00040071u, 0x00000074u, 0x00000517u, 0x00000516u, 0x0003003eu, 0x00000514u, 0x00000517u, 0x00050041u, 0x00000007u, 0x00000519u, 0x00000514u, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000051au, 0x00000519u, 0x000500c4u, 0x00000006u, 0x0000051bu, 0x0000051au, 0x000003b0u, 0x00050041u, 0x00000007u, 0x0000051cu, 0x00000514u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000051du, 0x0000051cu, 0x000500c5u, 0x00000006u, 0x0000051eu, 0x0000051bu, 0x0000051du, 0x0003003eu, 0x00000518u, 0x0000051eu, 0x0004003du, 0x00000006u, 0x0000051fu, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x00000520u, 0x0000051fu, 0x000001bcu, 0x00040071u, 0x0000000au, 0x00000522u, 0x0000051eu, 0x00060041u, 0x000003a8u, 0x00000523u, 0x000003a5u, 0x000000abu, 0x00000520u, 0x0003003eu, 0x00000523u, 0x00000522u, 0x0004003du, 0x00000006u, 0x00000524u, 0x0000006cu, 0x0004003du, 0x00000006u, 0x00000526u, 0x0000051cu, 0x000500c7u, 0x00000006u, 0x00000527u, 0x00000526u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x00000528u, 0x00000527u, 0x000001c4u, 0x00040071u, 0x00000008u, 0x00000529u, 0x00000528u, 0x00060041u, 0x00000387u, 0x0000052au, 0x00000392u, 0x000000abu, 0x00000524u, 0x0003003eu, 0x0000052au, 0x00000529u, 0x000300f7u, 0x0000052cu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000052bu, 0x0000052cu, 0x000200f8u, 0x0000052bu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x0000052du, 0x0000006cu, 0x000500c6u, 0x00000006u, 0x0000052eu, 0x0000052du, 0x000001bcu, 0x00050080u, 0x00000006u, 0x00000530u, 0x0000052eu, 0x0000052fu, 0x00060041u, 0x000003a8u, 0x00000531u, 0x000003a5u, 0x000000abu, 0x00000530u, 0x0003003eu, 0x00000531u, 0x0000050au, 0x000200f9u, 0x0000052cu, 0x000200f8u, 0x0000052cu, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x00000491u, 0x0004003du, 0x00000006u, 0x00000533u, 0x0000006cu, 0x000500c7u, 0x00000006u, 0x00000534u, 0x00000533u, 0x000003e5u, 0x0003003eu, 0x0000006cu, 0x00000534u, 0x0004003du, 0x00000006u, 0x00000535u, 0x0000006du, 0x00050084u, 0x00000006u, 0x00000537u, 0x00000535u, 0x00000536u, 0x0004003du, 0x00000006u, 0x00000538u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x00000539u, 0x00000538u, 0x00000537u, 0x0003003eu, 0x0000006cu, 0x00000539u, 0x0004003du, 0x00000009u, 0x0000053bu, 0x0000038bu, 0x00040071u, 0x0000025au, 0x0000053cu, 0x0000053bu, 0x0003003eu, 0x0000053au, 0x0000053cu, 0x00050041u, 0x00000007u, 0x0000053eu, 0x0000053au, 0x00000198u, 0x0004003du, 0x00000006u, 0x0000053fu, 0x0000053eu, 0x000500c4u, 0x00000006u, 0x00000540u, 0x0000053fu, 0x000003f8u, 0x00050041u, 0x00000007u, 0x00000541u, 0x0000053au, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000542u, 0x00000541u, 0x000500c4u, 0x00000006u, 0x00000543u, 0x00000542u, 0x000003f9u, 0x000500c5u, 0x00000006u, 0x00000544u, 0x00000540u, 0x00000543u, 0x00050041u, 0x00000007u, 0x00000545u, 0x0000053au, 0x00000170u, 0x0004003du, 0x00000006u, 0x00000546u, 0x00000545u, 0x000500c4u, 0x00000006u, 0x00000547u, 0x00000546u, 0x000003b0u, 0x000500c5u, 0x00000006u, 0x00000548u, 0x00000544u, 0x00000547u, 0x00050041u, 0x00000007u, 0x00000549u, 0x0000053au, 0x000001c4u, 0x0004003du, 0x00000006u, 0x0000054au, 0x00000549u, 0x000500c4u, 0x00000006u, 0x0000054bu, 0x0000054au, 0x00000198u, 0x000500c5u, 0x00000006u, 0x0000054cu, 0x00000548u, 0x0000054bu, 0x0003003eu, 0x0000053du, 0x0000054cu, 0x0004003du, 0x00000006u, 0x0000054du, 0x0000006cu, 0x00060041u, 0x000003f3u, 0x0000054fu, 0x000003f1u, 0x000000abu, 0x0000054du, 0x0003003eu, 0x0000054fu, 0x0000054cu, 0x0004003du, 0x00000006u, 0x00000550u, 0x0000006cu, 0x00050084u, 0x00000006u, 0x00000551u, 0x00000170u, 0x00000550u, 0x00050041u, 0x00000404u, 0x00000552u, 0x0000038bu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000553u, 0x00000552u, 0x00040071u, 0x00000006u, 0x00000554u, 0x00000553u, 0x0004007cu, 0x00000017u, 0x00000555u, 0x00000554u, 0x000500c7u, 0x00000017u, 0x00000556u, 0x00000555u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00000557u, 0x00000556u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00000558u, 0x00000557u, 0x0004007cu, 0x00000008u, 0x00000559u, 0x00000558u, 0x00060041u, 0x00000387u, 0x0000055au, 0x00000392u, 0x000000abu, 0x00000551u, 0x0003003eu, 0x0000055au, 0x00000559u, 0x0004003du, 0x00000006u, 0x0000055bu, 0x0000006cu, 0x00050084u, 0x00000006u, 0x0000055cu, 0x00000170u, 0x0000055bu, 0x00050080u, 0x00000006u, 0x0000055du, 0x0000055cu, 0x000001bcu, 0x00050041u, 0x00000404u, 0x0000055eu, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x0000055fu, 0x0000055eu, 0x00040071u, 0x00000006u, 0x00000560u, 0x0000055fu, 0x0004007cu, 0x00000017u, 0x00000561u, 0x00000560u, 0x000500c7u, 0x00000017u, 0x00000562u, 0x00000561u, 0x000000b5u, 0x00050084u, 0x00000017u, 0x00000563u, 0x00000562u, 0x000000bbu, 0x00040072u, 0x00000129u, 0x00000564u, 0x00000563u, 0x0004007cu, 0x00000008u, 0x00000565u, 0x00000564u, 0x00060041u, 0x00000387u, 0x00000566u, 0x00000392u, 0x000000abu, 0x0000055du, 0x0003003eu, 0x00000566u, 0x00000565u, 0x000300f7u, 0x00000568u, 0x00000000u, 0x000400fau, 0x000004abu, 0x00000567u, 0x00000568u, 0x000200f8u, 0x00000567u, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x00000569u, 0x0000006cu, 0x00050080u, 0x00000006u, 0x0000056bu, 0x00000569u, 0x0000056au, 0x00060041u, 0x000003f3u, 0x0000056du, 0x000003f1u, 0x000000abu, 0x0000056bu, 0x0003003eu, 0x0000056du, 0x0000056cu, 0x000200f9u, 0x00000568u, 0x000200f8u, 0x00000568u, 0x000200f9u, 0x00000492u, 0x000200f8u, 0x00000492u, 0x000200f9u, 0x0000048cu, 0x000200f8u, 0x0000048cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000072u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000070u, 0x00030037u, 0x00000007u, 0x00000071u, 0x000200f8u, 0x00000073u, 0x000300f7u, 0x00000573u, 0x00000000u, 0x000400fau, 0x00000571u, 0x00000572u, 0x00000573u, 0x000200f8u, 0x00000572u, 0x0004003du, 0x00000034u, 0x00000575u, 0x00000574u, 0x000300f7u, 0x00000577u, 0x00000000u, 0x000400fau, 0x00000575u, 0x00000576u, 0x00000577u, 0x000200f8u, 0x00000576u, 0x0004003du, 0x00000006u, 0x00000578u, 0x00000070u, 0x000500c7u, 0x00000006u, 0x00000579u, 0x00000578u, 0x00000399u, 0x0003003eu, 0x00000070u, 0x00000579u, 0x0004003du, 0x00000006u, 0x0000057au, 0x00000071u, 0x00050084u, 0x00000006u, 0x0000057cu, 0x0000057au, 0x0000057bu, 0x0004003du, 0x00000006u, 0x0000057du, 0x00000070u, 0x00050080u, 0x00000006u, 0x0000057eu, 0x0000057du, 0x0000057cu, 0x0003003eu, 0x00000070u, 0x0000057eu, 0x0004003du, 0x00000006u, 0x0000057fu, 0x00000070u, 0x000500c6u, 0x00000006u, 0x00000580u, 0x0000057fu, 0x000001bcu, 0x0004003du, 0x0000000au, 0x00000581u, 0x00000424u, 0x000500c4u, 0x0000000au, 0x00000582u, 0x00000581u, 0x0000047fu, 0x0004003du, 0x00000008u, 0x00000583u, 0x00000405u, 0x000500c2u, 0x00000008u, 0x00000584u, 0x00000583u, 0x0000047fu, 0x00040071u, 0x0000000au, 0x00000585u, 0x00000584u, 0x000500c5u, 0x0000000au, 0x00000586u, 0x00000582u, 0x00000585u, 0x00060041u, 0x000003a8u, 0x00000587u, 0x000003a5u, 0x000000abu, 0x00000580u, 0x0003003eu, 0x00000587u, 0x00000586u, 0x0004003du, 0x00000006u, 0x00000588u, 0x00000070u, 0x0004003du, 0x00000008u, 0x00000589u, 0x00000405u, 0x00040071u, 0x0000000au, 0x0000058au, 0x00000589u, 0x000500c7u, 0x0000000au, 0x0000058bu, 0x0000058au, 0x00000485u, 0x00040071u, 0x00000008u, 0x0000058cu, 0x0000058bu, 0x00060041u, 0x00000387u, 0x0000058du, 0x00000392u, 0x000000abu, 0x00000588u, 0x0003003eu, 0x0000058du, 0x0000058cu, 0x000300f7u, 0x0000058fu, 0x00000000u, 0x000400fau, 0x000004abu, 0x0000058eu, 0x0000058fu, 0x000200f8u, 0x0000058eu, 0x000300e1u, 0x000001bcu, 0x000004aeu, 0x0004003du, 0x00000006u, 0x00000590u, 0x00000070u, 0x000500c6u, 0x00000006u, 0x00000591u, 0x00000590u, 0x000001bcu, 0x00050080u, 0x00000006u, 0x00000593u, 0x00000591u, 0x00000592u, 0x00060041u, 0x000003a8u, 0x00000594u, 0x000003a5u, 0x000000abu, 0x00000593u, 0x0003003eu, 0x00000594u, 0x0000050au, 0x000200f9u, 0x0000058fu, 0x000200f8u, 0x0000058fu, 0x000200f9u, 0x00000577u, 0x000200f8u, 0x00000577u, 0x000200f9u, 0x00000573u, 0x000200f8u, 0x00000573u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000007cu, 0x00000000u, 0x00000076u, 0x00030037u, 0x00000075u, 0x00000077u, 0x00030037u, 0x00000007u, 0x00000078u, 0x00030037u, 0x00000007u, 0x00000079u, 0x00030037u, 0x00000007u, 0x0000007au, 0x00030037u, 0x00000007u, 0x0000007bu, 0x000200f8u, 0x0000007du, 0x0004003bu, 0x00000075u, 0x0000059eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005d0u, 0x00000007u, 0x0003003eu, 0x00000471u, 0x00000299u, 0x0003003eu, 0x00000574u, 0x00000299u, 0x0004003du, 0x00000074u, 0x00000595u, 0x00000077u, 0x0004003du, 0x00000006u, 0x00000596u, 0x00000078u, 0x0004003du, 0x00000006u, 0x00000597u, 0x00000079u, 0x00050050u, 0x00000074u, 0x00000598u, 0x00000596u, 0x00000597u, 0x000500b0u, 0x00000599u, 0x0000059au, 0x00000595u, 0x00000598u, 0x0004009bu, 0x00000034u, 0x0000059bu, 0x0000059au, 0x000300f7u, 0x0000059du, 0x00000000u, 0x000400fau, 0x0000059bu, 0x0000059cu, 0x0000059du, 0x000200f8u, 0x0000059cu, 0x0004003du, 0x00000074u, 0x0000059fu, 0x00000077u, 0x00050050u, 0x00000074u, 0x000005a3u, 0x000005a2u, 0x000005a2u, 0x000500c7u, 0x00000074u, 0x000005a4u, 0x0000059fu, 0x000005a3u, 0x0003003eu, 0x0000059eu, 0x000005a4u, 0x0004003du, 0x00000074u, 0x000005a5u, 0x00000077u, 0x00050050u, 0x000005a6u, 0x000005a7u, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x000005a8u, 0x000005a5u, 0x000005a7u, 0x0003003eu, 0x00000077u, 0x000005a8u, 0x00050041u, 0x00000007u, 0x000005aau, 0x0000059eu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005abu, 0x000005aau, 0x00050084u, 0x00000006u, 0x000005adu, 0x000005abu, 0x000005acu, 0x00050041u, 0x00000007u, 0x000005aeu, 0x0000059eu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005afu, 0x000005aeu, 0x00050080u, 0x00000006u, 0x000005b0u, 0x000005adu, 0x000005afu, 0x0003003eu, 0x000005a9u, 0x000005b0u, 0x0004003du, 0x00000006u, 0x000005b2u, 0x0000007au, 0x0004003du, 0x00000006u, 0x000005b3u, 0x00000078u, 0x000500c2u, 0x00000006u, 0x000005b4u, 0x000005b3u, 0x000004a9u, 0x00050041u, 0x00000007u, 0x000005b5u, 0x00000077u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005b6u, 0x000005b5u, 0x00050084u, 0x00000006u, 0x000005b7u, 0x000005b4u, 0x000005b6u, 0x00050080u, 0x00000006u, 0x000005b8u, 0x000005b2u, 0x000005b7u, 0x00050041u, 0x00000007u, 0x000005b9u, 0x00000077u, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005bau, 0x000005b9u, 0x00050080u, 0x00000006u, 0x000005bbu, 0x000005b8u, 0x000005bau, 0x0003003eu, 0x000005b1u, 0x000005bbu, 0x0003003eu, 0x000005bdu, 0x000005bbu, 0x0003003eu, 0x000005bfu, 0x000005bbu, 0x0003003eu, 0x000005c1u, 0x000005b0u, 0x00060039u, 0x00000002u, 0x000005c3u, 0x00000062u, 0x000005bfu, 0x000005c1u, 0x0004003du, 0x00000006u, 0x000005c4u, 0x0000007bu, 0x0004003du, 0x00000006u, 0x000005c5u, 0x00000078u, 0x000500c2u, 0x00000006u, 0x000005c6u, 0x000005c5u, 0x000004a9u, 0x0004003du, 0x00000006u, 0x000005c8u, 0x000005b5u, 0x00050084u, 0x00000006u, 0x000005c9u, 0x000005c6u, 0x000005c8u, 0x00050080u, 0x00000006u, 0x000005cau, 0x000005c4u, 0x000005c9u, 0x0004003du, 0x00000006u, 0x000005ccu, 0x000005b9u, 0x00050080u, 0x00000006u, 0x000005cdu, 0x000005cau, 0x000005ccu, 0x0003003eu, 0x000005b1u, 0x000005cdu, 0x0003003eu, 0x000005ceu, 0x000005cdu, 0x0003003eu, 0x000005d0u, 0x000005b0u, 0x00060039u, 0x00000002u, 0x000005d2u, 0x0000006au, 0x000005ceu, 0x000005d0u, 0x000200f9u, 0x0000059du, 0x000200f8u, 0x0000059du, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000081u, 0x00000000u, 0x0000007eu, 0x00030037u, 0x00000075u, 0x0000007fu, 0x00030037u, 0x00000007u, 0x00000080u, 0x000200f8u, 0x00000082u, 0x0004003bu, 0x00000007u, 0x000005d3u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x000005dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005e3u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000005f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000005feu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000005d4u, 0x0000007fu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005d5u, 0x000005d4u, 0x000500c2u, 0x00000006u, 0x000005d6u, 0x000005d5u, 0x00000170u, 0x0004003du, 0x00000006u, 0x000005d7u, 0x00000080u, 0x00050080u, 0x00000006u, 0x000005d8u, 0x000005d7u, 0x000001c4u, 0x000500c2u, 0x00000006u, 0x000005d9u, 0x000005d8u, 0x00000170u, 0x00050084u, 0x00000006u, 0x000005dau, 0x000005d6u, 0x000005d9u, 0x00050041u, 0x00000007u, 0x000005dbu, 0x0000007fu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005dcu, 0x000005dbu, 0x000500c2u, 0x00000006u, 0x000005ddu, 0x000005dcu, 0x00000170u, 0x00050080u, 0x00000006u, 0x000005deu, 0x000005dau, 0x000005ddu, 0x0003003eu, 0x000005d3u, 0x000005deu, 0x0004003du, 0x00000074u, 0x000005e0u, 0x0000007fu, 0x000500c7u, 0x00000074u, 0x000005e2u, 0x000005e0u, 0x000019f4u, 0x0003003eu, 0x000005dfu, 0x000005e2u, 0x0004003du, 0x00000034u, 0x000005e4u, 0x00000471u, 0x000600a9u, 0x00000006u, 0x000005e5u, 0x000005e4u, 0x000001bcu, 0x00000198u, 0x0004003du, 0x00000034u, 0x000005e6u, 0x00000574u, 0x000600a9u, 0x00000006u, 0x000005e7u, 0x000005e6u, 0x000001bcu, 0x00000198u, 0x00050084u, 0x00000006u, 0x000005e8u, 0x00000170u, 0x000005e7u, 0x00050080u, 0x00000006u, 0x000005e9u, 0x000005e5u, 0x000005e8u, 0x0003003eu, 0x000005e3u, 0x000005e9u, 0x00050041u, 0x00000007u, 0x000005eau, 0x000005dfu, 0x00000198u, 0x0004003du, 0x00000006u, 0x000005ebu, 0x000005eau, 0x00050041u, 0x00000007u, 0x000005ecu, 0x000005dfu, 0x000001bcu, 0x0004003du, 0x00000006u, 0x000005edu, 0x000005ecu, 0x00050084u, 0x00000006u, 0x000005eeu, 0x000005edu, 0x00000420u, 0x00050080u, 0x00000006u, 0x000005efu, 0x000005ebu, 0x000005eeu, 0x00050084u, 0x00000006u, 0x000005f0u, 0x00000170u, 0x000005efu, 0x000500c4u, 0x00000006u, 0x000005f2u, 0x000005e9u, 0x000005f0u, 0x0003003eu, 0x000005e3u, 0x000005f2u, 0x0003003eu, 0x000005f3u, 0x000002bcu, 0x000200f9u, 0x000005f4u, 0x000200f8u, 0x000005f4u, 0x000700f5u, 0x00000034u, 0x000019bau, 0x000002bcu, 0x00000082u, 0x00001a04u, 0x000005f7u, 0x000400f6u, 0x000005f6u, 0x000005f7u, 0x00000000u, 0x000200f9u, 0x000005f5u, 0x000200f8u, 0x000005f5u, 0x00050152u, 0x00000006u, 0x000005f9u, 0x000001c4u, 0x000005deu, 0x000500aau, 0x00000034u, 0x000005fbu, 0x000005f9u, 0x000005deu, 0x000300f7u, 0x000005fdu, 0x00000000u, 0x000400fau, 0x000005fbu, 0x000005fcu, 0x000005fdu, 0x000200f8u, 0x000005fcu, 0x00060168u, 0x00000006u, 0x00000600u, 0x000001c4u, 0x00000000u, 0x000005f2u, 0x0003003eu, 0x000005feu, 0x00000600u, 0x0004014du, 0x00000034u, 0x00000601u, 0x000001c4u, 0x000300f7u, 0x00000603u, 0x00000000u, 0x000400fau, 0x00000601u, 0x00000602u, 0x00000603u, 0x000200f8u, 0x00000602u, 0x00050080u, 0x00000006u, 0x00000609u, 0x00000607u, 0x000005deu, 0x00060041u, 0x000003f3u, 0x0000060au, 0x000003f1u, 0x000000abu, 0x00000609u, 0x000700f1u, 0x00000006u, 0x0000060cu, 0x0000060au, 0x000001bcu, 0x00000198u, 0x00000600u, 0x000200f9u, 0x00000603u, 0x000200f8u, 0x00000603u, 0x0003003eu, 0x000005f3u, 0x00000299u, 0x000200f9u, 0x000005fdu, 0x000200f8u, 0x000005fdu, 0x000600a9u, 0x00000034u, 0x00001a04u, 0x000005fbu, 0x00000299u, 0x000019bau, 0x000200f9u, 0x000005f7u, 0x000200f8u, 0x000005f7u, 0x000400fau, 0x00001a04u, 0x000005f4u, 0x000005f6u, 0x000200f8u, 0x000005f6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000088u, 0x00000000u, 0x00000076u, 0x00030037u, 0x00000075u, 0x00000083u, 0x00030037u, 0x00000007u, 0x00000084u, 0x00030037u, 0x00000007u, 0x00000085u, 0x00030037u, 0x00000007u, 0x00000086u, 0x00030037u, 0x00000007u, 0x00000087u, 0x000200f8u, 0x00000089u, 0x0004003bu, 0x00000007u, 0x00000616u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x00000619u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000622u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000062au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000634u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000636u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000642u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000644u, 0x00000007u, 0x0004003bu, 0x00000075u, 0x0000064bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000064du, 0x00000007u, 0x0004003du, 0x00000074u, 0x0000060eu, 0x00000083u, 0x0004003du, 0x00000006u, 0x0000060fu, 0x00000084u, 0x0004003du, 0x00000006u, 0x00000610u, 0x00000085u, 0x00050050u, 0x00000074u, 0x00000611u, 0x0000060fu, 0x00000610u, 0x000500b0u, 0x00000599u, 0x00000612u, 0x0000060eu, 0x00000611u, 0x0004009bu, 0x00000034u, 0x00000613u, 0x00000612u, 0x000300f7u, 0x00000615u, 0x00000000u, 0x000400fau, 0x00000613u, 0x00000614u, 0x00000615u, 0x000200f8u, 0x00000614u, 0x0004003du, 0x00000006u, 0x00000617u, 0x00000084u, 0x000500c2u, 0x00000006u, 0x00000618u, 0x00000617u, 0x000004a9u, 0x0003003eu, 0x00000616u, 0x00000618u, 0x0004003du, 0x00000074u, 0x0000061au, 0x00000083u, 0x00050050u, 0x00000074u, 0x0000061du, 0x0000061cu, 0x0000061cu, 0x000500c7u, 0x00000074u, 0x0000061eu, 0x0000061au, 0x0000061du, 0x0003003eu, 0x00000619u, 0x0000061eu, 0x0004003du, 0x00000074u, 0x0000061fu, 0x00000083u, 0x00050050u, 0x000005a6u, 0x00000620u, 0x000004a9u, 0x000004a9u, 0x000500c2u, 0x00000074u, 0x00000621u, 0x0000061fu, 0x00000620u, 0x0003003eu, 0x00000083u, 0x00000621u, 0x00050041u, 0x00000007u, 0x00000623u, 0x00000619u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x00000624u, 0x00000623u, 0x00050084u, 0x00000006u, 0x00000626u, 0x00000624u, 0x00000625u, 0x00050041u, 0x00000007u, 0x00000627u, 0x00000619u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000628u, 0x00000627u, 0x00050080u, 0x00000006u, 0x00000629u, 0x00000626u, 0x00000628u, 0x0003003eu, 0x00000622u, 0x00000629u, 0x0004003du, 0x00000006u, 0x0000062bu, 0x00000086u, 0x00050041u, 0x00000007u, 0x0000062du, 0x00000083u, 0x000001bcu, 0x0004003du, 0x00000006u, 0x0000062eu, 0x0000062du, 0x00050084u, 0x00000006u, 0x0000062fu, 0x00000618u, 0x0000062eu, 0x00050080u, 0x00000006u, 0x00000630u, 0x0000062bu, 0x0000062fu, 0x00050041u, 0x00000007u, 0x00000631u, 0x00000083u, 0x00000198u, 0x0004003du, 0x00000006u, 0x00000632u, 0x00000631u, 0x00050080u, 0x00000006u, 0x00000633u, 0x00000630u, 0x00000632u, 0x0003003eu, 0x0000062au, 0x00000633u, 0x0003003eu, 0x00000634u, 0x00000633u, 0x0003003eu, 0x00000636u, 0x00000629u, 0x00060039u, 0x00000002u, 0x00000638u, 0x0000006eu, 0x00000634u, 0x00000636u, 0x0004003du, 0x00000006u, 0x00000639u, 0x00000087u, 0x0004003du, 0x00000006u, 0x0000063cu, 0x0000062du, 0x00050084u, 0x00000006u, 0x0000063du, 0x00000618u, 0x0000063cu, 0x00050080u, 0x00000006u, 0x0000063eu, 0x00000639u, 0x0000063du, 0x0004003du, 0x00000006u, 0x00000640u, 0x00000631u, 0x00050080u, 0x00000006u, 0x00000641u, 0x0000063eu, 0x00000640u, 0x0003003eu, 0x0000062au, 0x00000641u, 0x0003003eu, 0x00000642u, 0x00000641u, 0x0003003eu, 0x00000644u, 0x00000629u, 0x00060039u, 0x00000002u, 0x00000646u, 0x00000072u, 0x00000642u, 0x00000644u, 0x000300f7u, 0x0000064au, 0x00000000u, 0x000400fau, 0x00000648u, 0x00000649u, 0x0000064au, 0x000200f8u, 0x00000649u, 0x0004003du, 0x00000074u, 0x0000064cu, 0x00000083u, 0x0003003eu, 0x0000064bu, 0x0000064cu, 0x0003003eu, 0x0000064du, 0x00000618u, 0x00060039u, 0x00000002u, 0x0000064fu, 0x00000081u, 0x0000064bu, 0x0000064du, 0x000200f9u, 0x0000064au, 0x000200f8u, 0x0000064au, 0x000200f9u, 0x00000615u, 0x000200f8u, 0x00000615u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000008cu, 0x00000000u, 0x0000008au, 0x00030037u, 0x00000035u, 0x0000008bu, 0x000200f8u, 0x0000008du, 0x0004003bu, 0x00000046u, 0x00000650u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000652u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x00000661u, 0x00000007u, 0x0004003du, 0x00000034u, 0x00000651u, 0x0000008bu, 0x000300f7u, 0x00000654u, 0x00000000u, 0x000400fau, 0x00000651u, 0x00000653u, 0x00000659u, 0x000200f8u, 0x00000653u, 0x00050041u, 0x00000404u, 0x00000655u, 0x0000038bu, 0x000001c4u, 0x0004003du, 0x00000008u, 0x00000656u, 0x00000655u, 0x000500c7u, 0x00000008u, 0x00000658u, 0x00000656u, 0x00000657u, 0x0003003eu, 0x00000652u, 0x00000658u, 0x000200f9u, 0x00000654u, 0x000200f8u, 0x00000659u, 0x0003003eu, 0x00000652u, 0x00000657u, 0x000200f9u, 0x00000654u, 0x000200f8u, 0x00000654u, 0x000700f5u, 0x00000008u, 0x000019bfu, 0x00000658u, 0x00000653u, 0x00000657u, 0x00000659u, 0x0003003eu, 0x00000650u, 0x000019bfu, 0x000300f7u, 0x00000660u, 0x00000000u, 0x000d00fbu, 0x00000372u, 0x00000660u, 0x00000000u, 0x0000065bu, 0x00000001u, 0x0000065cu, 0x00000002u, 0x0000065du, 0x00000003u, 0x0000065eu, 0x00000004u, 0x0000065fu, 0x000200f8u, 0x0000065bu, 0x0003003eu, 0x00000661u, 0x00000662u, 0x0003003eu, 0x00000650u, 0x00000657u, 0x000200f9u, 0x00000660u, 0x000200f8u, 0x0000065cu, 0x0004003du, 0x00000009u, 0x00000664u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000665u, 0x00000664u, 0x00000664u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000661u, 0x00000665u, 0x0003003eu, 0x00000650u, 0x00000657u, 0x000200f9u, 0x00000660u, 0x000200f8u, 0x0000065du, 0x0004003du, 0x00000009u, 0x00000667u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000668u, 0x00000667u, 0x00000667u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c7u, 0x0000001bu, 0x0000066bu, 0x00000668u, 0x000019f5u, 0x0003003eu, 0x00000661u, 0x0000066bu, 0x000200f9u, 0x00000660u, 0x000200f8u, 0x0000065eu, 0x0004003du, 0x00000009u, 0x0000066du, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x0000066eu, 0x0000066du, 0x0000066du, 0x00000000u, 0x00000000u, 0x00000000u, 0x0003003eu, 0x00000661u, 0x0000066eu, 0x000200f9u, 0x00000660u, 0x000200f8u, 0x0000065fu, 0x0004003du, 0x00000009u, 0x00000670u, 0x0000038bu, 0x0008004fu, 0x0000001bu, 0x00000671u, 0x00000670u, 0x00000670u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00000661u, 0x00000671u, 0x000200f9u, 0x00000660u, 0x000200f8u, 0x00000660u, 0x000f00f5u, 0x00000008u, 0x000019c3u, 0x000019bfu, 0x00000654u, 0x00000657u, 0x0000065bu, 0x00000657u, 0x0000065cu, 0x000019bfu, 0x0000065du, 0x000019bfu, 0x0000065eu, 0x000019bfu, 0x0000065fu, 0x000f00f5u, 0x0000001bu, 0x000019c0u, 0x000019c2u, 0x00000654u, 0x00000662u, 0x0000065bu, 0x00000665u, 0x0000065cu, 0x0000066bu, 0x0000065du, 0x0000066eu, 0x0000065eu, 0x00000671u, 0x0000065fu, 0x00050051u, 0x00000008u, 0x00000676u, 0x000019c0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000677u, 0x000019c0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000678u, 0x000019c0u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000679u, 0x00000676u, 0x00000677u, 0x00000678u, 0x000019c3u, 0x000200feu, 0x00000679u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000090u, 0x00000000u, 0x0000008eu, 0x00030037u, 0x00000033u, 0x0000008fu, 0x000200f8u, 0x00000091u, 0x000300f7u, 0x0000067eu, 0x00000000u, 0x000400fau, 0x0000067cu, 0x0000067du, 0x00000683u, 0x000200f8u, 0x0000067du, 0x0004003du, 0x00000009u, 0x0000067fu, 0x0000008fu, 0x0008004fu, 0x0000001bu, 0x00000680u, 0x0000067fu, 0x0000067fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004003du, 0x00000009u, 0x00000681u, 0x0000038bu, 0x0009004fu, 0x00000009u, 0x00000682u, 0x00000681u, 0x0000067fu, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x0000038bu, 0x00000682u, 0x000200f9u, 0x0000067eu, 0x000200f8u, 0x00000683u, 0x0004003du, 0x00000009u, 0x00000684u, 0x0000008fu, 0x0003003eu, 0x0000038bu, 0x00000684u, 0x000200f9u, 0x0000067eu, 0x000200f8u, 0x0000067eu, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000094u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000007u, 0x00000092u, 0x00030037u, 0x00000007u, 0x00000093u, 0x000200f8u, 0x00000095u, 0x0004003bu, 0x00000033u, 0x00000690u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000693u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000697u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000069bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000069fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006adu, 0x00000007u, 0x000300f7u, 0x00000688u, 0x00000000u, 0x000900fbu, 0x00000372u, 0x00000688u, 0x00000000u, 0x00000685u, 0x00000001u, 0x00000686u, 0x00000002u, 0x00000687u, 0x000200f8u, 0x00000685u, 0x0003003eu, 0x0000038bu, 0x00000689u, 0x0003003eu, 0x00000471u, 0x000002bcu, 0x000200f9u, 0x00000688u, 0x000200f8u, 0x00000686u, 0x0004003du, 0x00000006u, 0x0000068bu, 0x00000092u, 0x000500c7u, 0x00000006u, 0x0000068cu, 0x0000068bu, 0x000003ddu, 0x0003003eu, 0x00000092u, 0x0000068cu, 0x0004003du, 0x00000006u, 0x0000068du, 0x00000092u, 0x00040071u, 0x00000008u, 0x0000068eu, 0x0000068du, 0x00070050u, 0x00000009u, 0x0000068fu, 0x0000068eu, 0x0000068eu, 0x0000068eu, 0x0000068eu, 0x0003003eu, 0x00000690u, 0x0000068fu, 0x00050039u, 0x00000002u, 0x00000691u, 0x00000090u, 0x00000690u, 0x000200f9u, 0x00000688u, 0x000200f8u, 0x00000687u, 0x0004003du, 0x00000006u, 0x00000694u, 0x00000092u, 0x000500c2u, 0x00000006u, 0x00000695u, 0x00000694u, 0x000000cau, 0x000500c7u, 0x00000006u, 0x00000696u, 0x00000695u, 0x000003b7u, 0x0003003eu, 0x00000693u, 0x00000696u, 0x0004003du, 0x00000006u, 0x00000698u, 0x00000092u, 0x000500c2u, 0x00000006u, 0x00000699u, 0x00000698u, 0x000000bbu, 0x000500c7u, 0x00000006u, 0x0000069au, 0x00000699u, 0x000003b7u, 0x0003003eu, 0x00000697u, 0x0000069au, 0x0004003du, 0x00000006u, 0x0000069cu, 0x00000092u, 0x000500c4u, 0x00000006u, 0x0000069du, 0x0000069cu, 0x000000b8u, 0x000500c7u, 0x00000006u, 0x0000069eu, 0x0000069du, 0x000003b7u, 0x0003003eu, 0x0000069bu, 0x0000069eu, 0x0004003du, 0x00000006u, 0x000006a0u, 0x00000092u, 0x000500c7u, 0x00000006u, 0x000006a1u, 0x000006a0u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006a3u, 0x000006a1u, 0x000006a2u, 0x0003003eu, 0x0000069fu, 0x000006a3u, 0x00040071u, 0x00000008u, 0x000006a5u, 0x00000696u, 0x00040071u, 0x00000008u, 0x000006a7u, 0x0000069au, 0x00040071u, 0x00000008u, 0x000006a9u, 0x0000069eu, 0x00040071u, 0x00000008u, 0x000006abu, 0x000006a3u, 0x00070050u, 0x00000009u, 0x000006acu, 0x000006a5u, 0x000006a7u, 0x000006a9u, 0x000006abu, 0x0003003eu, 0x000006adu, 0x000006acu, 0x00050039u, 0x00000002u, 0x000006aeu, 0x00000090u, 0x000006adu, 0x000200f9u, 0x00000688u, 0x000200f8u, 0x00000688u, 0x000300f7u, 0x000006b2u, 0x00000000u, 0x000400fau, 0x00000570u, 0x000006b1u, 0x000006b2u, 0x000200f8u, 0x000006b1u, 0x00040039u, 0x00000002u, 0x000006b3u, 0x00000064u, 0x000200f9u, 0x000006b2u, 0x000200f8u, 0x000006b2u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000098u, 0x00000000u, 0x00000096u, 0x00030037u, 0x00000007u, 0x00000097u, 0x000200f8u, 0x00000099u, 0x0004003bu, 0x00000007u, 0x000006b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c5u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006e7u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000006f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000700u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000704u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000711u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000071fu, 0x00000007u, 0x000300f7u, 0x000006b8u, 0x00000000u, 0x000b00fbu, 0x00000372u, 0x000006b8u, 0x00000004u, 0x000006b4u, 0x00000002u, 0x000006b5u, 0x00000003u, 0x000006b6u, 0x00000001u, 0x000006b7u, 0x000200f8u, 0x000006b4u, 0x0004003du, 0x00000006u, 0x000006bau, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006bbu, 0x000006bau, 0x000003f8u, 0x000500c7u, 0x00000006u, 0x000006bcu, 0x000006bbu, 0x000003ddu, 0x0003003eu, 0x000006b9u, 0x000006bcu, 0x0004003du, 0x00000006u, 0x000006beu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006bfu, 0x000006beu, 0x000003f9u, 0x000500c7u, 0x00000006u, 0x000006c0u, 0x000006bfu, 0x000003ddu, 0x0003003eu, 0x000006bdu, 0x000006c0u, 0x0004003du, 0x00000006u, 0x000006c2u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006c3u, 0x000006c2u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x000006c4u, 0x000006c3u, 0x000003ddu, 0x0003003eu, 0x000006c1u, 0x000006c4u, 0x0004003du, 0x00000006u, 0x000006c6u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006c7u, 0x000006c6u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x000006c8u, 0x000006c7u, 0x000003ddu, 0x0003003eu, 0x000006c5u, 0x000006c8u, 0x00040071u, 0x00000008u, 0x000006cau, 0x000006bcu, 0x00040071u, 0x00000008u, 0x000006ccu, 0x000006c0u, 0x00040071u, 0x00000008u, 0x000006ceu, 0x000006c4u, 0x00040071u, 0x00000008u, 0x000006d0u, 0x000006c8u, 0x00070050u, 0x00000009u, 0x000006d1u, 0x000006cau, 0x000006ccu, 0x000006ceu, 0x000006d0u, 0x0003003eu, 0x000006d2u, 0x000006d1u, 0x00050039u, 0x00000002u, 0x000006d3u, 0x00000090u, 0x000006d2u, 0x000200f9u, 0x000006b8u, 0x000200f8u, 0x000006b5u, 0x0004003du, 0x00000006u, 0x000006d5u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x000006d6u, 0x000006d5u, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x000006d7u, 0x000006d6u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006d8u, 0x000006d7u, 0x000003f9u, 0x0004003du, 0x00000006u, 0x000006d9u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006dau, 0x000006d9u, 0x000006d8u, 0x0003003eu, 0x00000097u, 0x000006dau, 0x0004003du, 0x00000006u, 0x000006dcu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006ddu, 0x000006dcu, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x000006deu, 0x000006ddu, 0x000003b7u, 0x0003003eu, 0x000006dbu, 0x000006deu, 0x0004003du, 0x00000006u, 0x000006e0u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006e1u, 0x000006e0u, 0x000001c4u, 0x000500c7u, 0x00000006u, 0x000006e2u, 0x000006e1u, 0x000003b7u, 0x0003003eu, 0x000006dfu, 0x000006e2u, 0x0004003du, 0x00000006u, 0x000006e4u, 0x00000097u, 0x000500c4u, 0x00000006u, 0x000006e5u, 0x000006e4u, 0x00000170u, 0x000500c7u, 0x00000006u, 0x000006e6u, 0x000006e5u, 0x000003b7u, 0x0003003eu, 0x000006e3u, 0x000006e6u, 0x0004003du, 0x00000006u, 0x000006e8u, 0x00000097u, 0x000500c7u, 0x00000006u, 0x000006e9u, 0x000006e8u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006eau, 0x000006e9u, 0x000006a2u, 0x0003003eu, 0x000006e7u, 0x000006eau, 0x00040071u, 0x00000008u, 0x000006ecu, 0x000006deu, 0x00040071u, 0x00000008u, 0x000006eeu, 0x000006e2u, 0x00040071u, 0x00000008u, 0x000006f0u, 0x000006e6u, 0x00040071u, 0x00000008u, 0x000006f2u, 0x000006eau, 0x00070050u, 0x00000009u, 0x000006f3u, 0x000006ecu, 0x000006eeu, 0x000006f0u, 0x000006f2u, 0x0003003eu, 0x000006f4u, 0x000006f3u, 0x00050039u, 0x00000002u, 0x000006f5u, 0x00000090u, 0x000006f4u, 0x000200f9u, 0x000006b8u, 0x000200f8u, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006f7u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x000001bcu, 0x000500c6u, 0x00000006u, 0x000006f9u, 0x000006f8u, 0x000001bcu, 0x00050084u, 0x00000006u, 0x000006fau, 0x000006f9u, 0x000003f9u, 0x0004003du, 0x00000006u, 0x000006fbu, 0x00000097u, 0x000500c2u, 0x00000006u, 0x000006fcu, 0x000006fbu, 0x000006fau, 0x0003003eu, 0x00000097u, 0x000006fcu, 0x0004003du, 0x00000006u, 0x000006feu, 0x00000097u, 0x000500c7u, 0x00000006u, 0x000006ffu, 0x000006feu, 0x000006fdu, 0x0003003eu, 0x00000097u, 0x000006ffu, 0x0004003du, 0x00000006u, 0x00000701u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x00000702u, 0x00000701u, 0x000003b0u, 0x000500c7u, 0x00000006u, 0x00000703u, 0x00000702u, 0x000003ddu, 0x0003003eu, 0x00000700u, 0x00000703u, 0x0004003du, 0x00000006u, 0x00000705u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x00000706u, 0x00000705u, 0x00000198u, 0x000500c7u, 0x00000006u, 0x00000707u, 0x00000706u, 0x000003ddu, 0x0003003eu, 0x00000704u, 0x00000707u, 0x00040071u, 0x00000008u, 0x00000709u, 0x00000703u, 0x00040071u, 0x00000008u, 0x0000070fu, 0x00000707u, 0x00070050u, 0x00000009u, 0x00000710u, 0x00000709u, 0x00000709u, 0x00000709u, 0x0000070fu, 0x0003003eu, 0x00000711u, 0x00000710u, 0x00050039u, 0x00000002u, 0x00000712u, 0x00000090u, 0x00000711u, 0x000200f9u, 0x000006b8u, 0x000200f8u, 0x000006b7u, 0x0004003du, 0x00000006u, 0x00000714u, 0x000005bdu, 0x000500c7u, 0x00000006u, 0x00000715u, 0x00000714u, 0x000001c4u, 0x000500c6u, 0x00000006u, 0x00000716u, 0x00000715u, 0x000001c4u, 0x00050084u, 0x00000006u, 0x00000717u, 0x00000716u, 0x000003b0u, 0x0004003du, 0x00000006u, 0x00000718u, 0x00000097u, 0x000500c2u, 0x00000006u, 0x00000719u, 0x00000718u, 0x00000717u, 0x0003003eu, 0x00000097u, 0x00000719u, 0x0004003du, 0x00000006u, 0x0000071au, 0x00000097u, 0x000500c7u, 0x00000006u, 0x0000071bu, 0x0000071au, 0x000003ddu, 0x0003003eu, 0x00000097u, 0x0000071bu, 0x0004003du, 0x00000006u, 0x0000071cu, 0x00000097u, 0x00040071u, 0x00000008u, 0x0000071du, 0x0000071cu, 0x00070050u, 0x00000009u, 0x0000071eu, 0x0000071du, 0x0000071du, 0x0000071du, 0x0000071du, 0x0003003eu, 0x0000071fu, 0x0000071eu, 0x00050039u, 0x00000002u, 0x00000720u, 0x00000090u, 0x0000071fu, 0x000200f9u, 0x000006b8u, 0x000200f8u, 0x000006b8u, 0x000300f7u, 0x00000724u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000723u, 0x00000724u, 0x000200f8u, 0x00000723u, 0x00040039u, 0x00000002u, 0x00000725u, 0x00000064u, 0x000200f9u, 0x00000724u, 0x000200f8u, 0x00000724u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x000000a1u, 0x00000000u, 0x0000009cu, 0x00030037u, 0x0000001au, 0x0000009du, 0x00030037u, 0x0000001au, 0x0000009eu, 0x00030037u, 0x00000007u, 0x0000009fu, 0x00030037u, 0x0000009bu, 0x000000a0u, 0x000200f8u, 0x000000a2u, 0x0004003bu, 0x00000046u, 0x00001287u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001286u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001285u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001284u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001283u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000127du, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000127cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000127bu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x0000127au, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001279u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00001274u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00001273u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001272u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00001271u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000726u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000072au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000072fu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000734u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x00000737u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000073au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000746u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000074au, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000074du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000752u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000757u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000075cu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000761u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000767u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000076du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000773u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000779u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000077au, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000077du, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000781u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000791u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000792u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000793u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000794u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000796u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000797u, 0x00000007u, 0x0004003bu, 0x00000021u, 0x00000798u, 0x00000007u, 0x0004003bu, 0x00000046u, 0x0000079au, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000079cu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000079eu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x0000079fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007a1u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007a2u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007a4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007a6u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007a7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000007a8u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000007c2u, 0x00000007u, 0x0004003bu, 0x00000032u, 0x000007c8u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000007cau, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007ccu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007ceu, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007d0u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007d2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000007d4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007d6u, 0x00000007u, 0x0004003bu, 0x0000017au, 0x000007ddu, 0x00000007u, 0x0004003bu, 0x00000032u, 0x000007deu, 0x00000007u, 0x0004003bu, 0x00000033u, 0x000007e0u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007e2u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007e4u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007e6u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007e8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000007eau, 0x00000007u, 0x0004003bu, 0x00000035u, 0x000007ecu, 0x00000007u, 0x0004003bu, 0x00000019u, 0x000007f4u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007f5u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000007f8u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000800u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000802u, 0x00000007u, 0x0004003bu, 0x00000035u, 0x00000803u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000805u, 0x00000007u, 0x0004003bu, 0x00000033u, 0x00000810u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000815u, 0x00000007u, 0x00050041u, 0x0000001au, 0x00000727u, 0x000000a0u, 0x000000b5u, 0x0004003du, 0x00000017u, 0x00000728u, 0x00000727u, 0x000500c3u, 0x00000017u, 0x00000729u, 0x00000728u, 0x000000cdu, 0x0003003eu, 0x00000726u, 0x00000729u, 0x0004003du, 0x00000017u, 0x0000072cu, 0x00000727u, 0x000500c7u, 0x00000017u, 0x0000072eu, 0x0000072cu, 0x0000072du, 0x0003003eu, 0x0000072au, 0x0000072eu, 0x00050041u, 0x00000046u, 0x00000730u, 0x000000a0u, 0x000000b8u, 0x0004003du, 0x00000008u, 0x00000731u, 0x00000730u, 0x00040071u, 0x00000006u, 0x00000732u, 0x00000731u, 0x0004007cu, 0x00000017u, 0x00000733u, 0x00000732u, 0x0003003eu, 0x0000072fu, 0x00000733u, 0x00050041u, 0x00000033u, 0x00000735u, 0x000000a0u, 0x000000abu, 0x0004003du, 0x00000009u, 0x00000736u, 0x00000735u, 0x0003003eu, 0x00000734u, 0x00000736u, 0x00050041u, 0x00000046u, 0x00000738u, 0x000000a0u, 0x000000bbu, 0x0004003du, 0x00000008u, 0x00000739u, 0x00000738u, 0x0003003eu, 0x00000737u, 0x00000739u, 0x0004003du, 0x00000006u, 0x00000741u, 0x0000009fu, 0x00080041u, 0x00000387u, 0x00000742u, 0x00000740u, 0x000000abu, 0x00000741u, 0x000000abu, 0x000001bcu, 0x0004003du, 0x00000008u, 0x00000743u, 0x00000742u, 0x00040071u, 0x00000006u, 0x00000744u, 0x00000743u, 0x0003003eu, 0x0000073au, 0x00000744u, 0x0004003du, 0x00000006u, 0x00000747u, 0x0000009fu, 0x0003003eu, 0x00000746u, 0x00000747u, 0x00050039u, 0x0000000du, 0x00000748u, 0x00000010u, 0x00000746u, 0x00050051u, 0x00000009u, 0x00001275u, 0x00000748u, 0x00000008u, 0x0003003eu, 0x00001271u, 0x00001275u, 0x00050051u, 0x00000009u, 0x00001276u, 0x00000748u, 0x00000009u, 0x0003003eu, 0x00001272u, 0x00001276u, 0x00050051u, 0x0000000au, 0x00001277u, 0x00000748u, 0x0000000bu, 0x0003003eu, 0x00001273u, 0x00001277u, 0x00050051u, 0x00000008u, 0x00001278u, 0x00000748u, 0x0000000cu, 0x0003003eu, 0x00001274u, 0x00001278u, 0x0003003eu, 0x0000074au, 0x00000744u, 0x00050039u, 0x00000012u, 0x0000074cu, 0x00000015u, 0x0000074au, 0x00050051u, 0x00000009u, 0x0000127eu, 0x0000074cu, 0x00000000u, 0x0003003eu, 0x00001279u, 0x0000127eu, 0x00050051u, 0x00000009u, 0x0000127fu, 0x0000074cu, 0x00000001u, 0x0003003eu, 0x0000127au, 0x0000127fu, 0x00050051u, 0x00000006u, 0x00001280u, 0x0000074cu, 0x00000002u, 0x0003003eu, 0x0000127bu, 0x00001280u, 0x00050051u, 0x00000008u, 0x00001281u, 0x0000074cu, 0x00000003u, 0x0003003eu, 0x0000127cu, 0x00001281u, 0x00050051u, 0x00000008u, 0x00001282u, 0x0000074cu, 0x00000004u, 0x0003003eu, 0x0000127du, 0x00001282u, 0x000500c7u, 0x00000006u, 0x00000750u, 0x00001280u, 0x000003b0u, 0x000500abu, 0x00000034u, 0x00000751u, 0x00000750u, 0x00000198u, 0x0003003eu, 0x0000074du, 0x00000751u, 0x000500c7u, 0x00000006u, 0x00000755u, 0x00001280u, 0x000001bcu, 0x000500abu, 0x00000034u, 0x00000756u, 0x00000755u, 0x00000198u, 0x0003003eu, 0x00000752u, 0x00000756u, 0x000500c7u, 0x00000006u, 0x0000075au, 0x00001280u, 0x00000170u, 0x000500abu, 0x00000034u, 0x0000075bu, 0x0000075au, 0x00000198u, 0x0003003eu, 0x00000757u, 0x0000075bu, 0x000500c7u, 0x00000006u, 0x0000075fu, 0x00001280u, 0x000003f9u, 0x000500abu, 0x00000034u, 0x00000760u, 0x0000075fu, 0x00000198u, 0x0003003eu, 0x0000075cu, 0x00000760u, 0x000500c7u, 0x00000006u, 0x00000765u, 0x00001280u, 0x00000764u, 0x000500abu, 0x00000034u, 0x00000766u, 0x00000765u, 0x00000198u, 0x0003003eu, 0x00000761u, 0x00000766u, 0x000500c7u, 0x00000006u, 0x0000076bu, 0x00001280u, 0x0000076au, 0x000500abu, 0x00000034u, 0x0000076cu, 0x0000076bu, 0x00000198u, 0x0003003eu, 0x00000767u, 0x0000076cu, 0x000500c7u, 0x00000006u, 0x00000771u, 0x00001280u, 0x00000770u, 0x000500abu, 0x00000034u, 0x00000772u, 0x00000771u, 0x00000198u, 0x0003003eu, 0x0000076du, 0x00000772u, 0x000500c7u, 0x00000006u, 0x00000777u, 0x00001280u, 0x00000776u, 0x000500abu, 0x00000034u, 0x00000778u, 0x00000777u, 0x00000198u, 0x0003003eu, 0x00000773u, 0x00000778u, 0x0003003eu, 0x0000077au, 0x00000760u, 0x00050039u, 0x00000009u, 0x0000077cu, 0x0000008cu, 0x0000077au, 0x0003003eu, 0x00000779u, 0x0000077cu, 0x00050041u, 0x00000046u, 0x0000077eu, 0x00000779u, 0x000001c4u, 0x0004003du, 0x00000008u, 0x0000077fu, 0x0000077eu, 0x000500c2u, 0x00000008u, 0x00000780u, 0x0000077fu, 0x000003bfu, 0x0003003eu, 0x0000077du, 0x00000780u, 0x00040071u, 0x00000006u, 0x00000784u, 0x00001277u, 0x0004007cu, 0x00000017u, 0x00000785u, 0x00000784u, 0x00040071u, 0x00000006u, 0x00000788u, 0x00001278u, 0x0004007cu, 0x00000017u, 0x00000789u, 0x00000788u, 0x00040071u, 0x00000006u, 0x0000078bu, 0x00000780u, 0x0004007cu, 0x00000017u, 0x0000078cu, 0x0000078bu, 0x00040071u, 0x00000006u, 0x0000078fu, 0x00001282u, 0x0004007cu, 0x00000017u, 0x00000790u, 0x0000078fu, 0x0003003eu, 0x00000794u, 0x00000729u, 0x0003003eu, 0x00000796u, 0x00000785u, 0x0003003eu, 0x00000797u, 0x00000789u, 0x0004003du, 0x0000000au, 0x00000799u, 0x00000424u, 0x0003003eu, 0x00000798u, 0x00000799u, 0x0004003du, 0x00000008u, 0x0000079bu, 0x00000405u, 0x0003003eu, 0x0000079au, 0x0000079bu, 0x0003003eu, 0x0000079cu, 0x00000733u, 0x0003003eu, 0x0000079eu, 0x0000078cu, 0x0003003eu, 0x0000079fu, 0x00000756u, 0x0003003eu, 0x000007a1u, 0x00000790u, 0x0003003eu, 0x000007a2u, 0x00000751u, 0x0003003eu, 0x000007a4u, 0x00000772u, 0x00120039u, 0x00000034u, 0x000007a9u, 0x00000056u, 0x00000794u, 0x00000796u, 0x00000797u, 0x00000798u, 0x0000079au, 0x0000079cu, 0x0000079eu, 0x0000079fu, 0x000007a1u, 0x000007a2u, 0x000007a4u, 0x000007a6u, 0x000007a7u, 0x000007a8u, 0x0004003du, 0x00000017u, 0x000007aau, 0x0000079cu, 0x0003003eu, 0x0000072fu, 0x000007aau, 0x0004003du, 0x00000034u, 0x000007abu, 0x000007a6u, 0x0003003eu, 0x00000791u, 0x000007abu, 0x0004003du, 0x00000034u, 0x000007acu, 0x000007a7u, 0x0003003eu, 0x00000792u, 0x000007acu, 0x0004003du, 0x00000036u, 0x000007adu, 0x000007a8u, 0x0003003eu, 0x00000793u, 0x000007adu, 0x0003003eu, 0x00000781u, 0x000007a9u, 0x000300f7u, 0x000007b0u, 0x00000000u, 0x000400fau, 0x000007a9u, 0x000007afu, 0x000007b0u, 0x000200f8u, 0x000007afu, 0x000400a8u, 0x00000034u, 0x000007b2u, 0x00000772u, 0x000500abu, 0x00000034u, 0x000007b4u, 0x000007aau, 0x000000abu, 0x000500a6u, 0x00000034u, 0x000007b5u, 0x000007b2u, 0x000007b4u, 0x000200f9u, 0x000007b0u, 0x000200f8u, 0x000007b0u, 0x000700f5u, 0x00000034u, 0x000007b6u, 0x000007a9u, 0x000000a2u, 0x000007b5u, 0x000007afu, 0x000300f7u, 0x000007b8u, 0x00000000u, 0x000400fau, 0x000007b6u, 0x000007b7u, 0x000007b8u, 0x000200f8u, 0x000007b7u, 0x0004003du, 0x00000009u, 0x000007bbu, 0x00000779u, 0x00080050u, 0x00000031u, 0x000007c1u, 0x00000736u, 0x000007bbu, 0x00001275u, 0x00001276u, 0x00000739u, 0x0003003eu, 0x00001283u, 0x00000736u, 0x0003003eu, 0x00001284u, 0x000007bbu, 0x0003003eu, 0x00001285u, 0x00001275u, 0x0003003eu, 0x00001286u, 0x00001276u, 0x0003003eu, 0x00001287u, 0x00000739u, 0x0003003eu, 0x000007c2u, 0x0000127eu, 0x000300f7u, 0x000007c7u, 0x00000000u, 0x000400fau, 0x0000076cu, 0x000007c6u, 0x000007c7u, 0x000200f8u, 0x000007c6u, 0x0003003eu, 0x000007c8u, 0x000007c1u, 0x0003003eu, 0x000007cau, 0x0000127eu, 0x0003003eu, 0x000007ccu, 0x00000751u, 0x0003003eu, 0x000007ceu, 0x000007abu, 0x0003003eu, 0x000007d0u, 0x00000766u, 0x0003003eu, 0x000007d2u, 0x000007acu, 0x0003003eu, 0x000007d4u, 0x000007adu, 0x0003003eu, 0x000007d6u, 0x00000299u, 0x000c0039u, 0x0000001bu, 0x000007d7u, 0x00000041u, 0x000007c8u, 0x000007cau, 0x000007ccu, 0x000007ceu, 0x000007d0u, 0x000007d2u, 0x000007d4u, 0x000007d6u, 0x0009004fu, 0x00000009u, 0x000007dau, 0x00000736u, 0x000007d7u, 0x00000004u, 0x00000005u, 0x00000006u, 0x00000003u, 0x0003003eu, 0x00001283u, 0x000007dau, 0x0003003eu, 0x000007c2u, 0x0000127fu, 0x000200f9u, 0x000007c7u, 0x000200f8u, 0x000007c7u, 0x000700f5u, 0x00000009u, 0x000019d4u, 0x00000736u, 0x000007b7u, 0x000007dau, 0x000007c6u, 0x00070050u, 0x000019ffu, 0x00001a05u, 0x0000076cu, 0x0000076cu, 0x0000076cu, 0x0000076cu, 0x000600a9u, 0x00000009u, 0x00001a06u, 0x00001a05u, 0x0000127fu, 0x0000127eu, 0x00080050u, 0x00000031u, 0x00001298u, 0x000019d4u, 0x000007bbu, 0x00001275u, 0x00001276u, 0x00000739u, 0x0003003eu, 0x000007deu, 0x00001298u, 0x0003003eu, 0x000007e0u, 0x00001a06u, 0x0003003eu, 0x000007e2u, 0x00000751u, 0x0003003eu, 0x000007e4u, 0x000007abu, 0x0003003eu, 0x000007e6u, 0x00000766u, 0x0003003eu, 0x000007e8u, 0x000007acu, 0x0003003eu, 0x000007eau, 0x000007adu, 0x0003003eu, 0x000007ecu, 0x000002bcu, 0x000c0039u, 0x0000001bu, 0x000007edu, 0x00000041u, 0x000007deu, 0x000007e0u, 0x000007e2u, 0x000007e4u, 0x000007e6u, 0x000007e8u, 0x000007eau, 0x000007ecu, 0x0003003eu, 0x000007ddu, 0x000007edu, 0x000300f7u, 0x000007f0u, 0x00000000u, 0x000400fau, 0x00000778u, 0x000007efu, 0x000007f0u, 0x000200f8u, 0x000007efu, 0x00040071u, 0x000003acu, 0x000007f2u, 0x000007edu, 0x0004007cu, 0x00000018u, 0x000007f3u, 0x000007f2u, 0x0003003eu, 0x000007f4u, 0x000007f3u, 0x0003003eu, 0x000007f5u, 0x0000072eu, 0x00060039u, 0x0000001bu, 0x000007f7u, 0x0000001fu, 0x000007f4u, 0x000007f5u, 0x0003003eu, 0x000007ddu, 0x000007f7u, 0x000200f9u, 0x000007f0u, 0x000200f8u, 0x000007f0u, 0x000700f5u, 0x0000001bu, 0x000019e9u, 0x000007edu, 0x000007c7u, 0x000007f7u, 0x000007efu, 0x00040071u, 0x00000006u, 0x000007feu, 0x00001281u, 0x0004007cu, 0x00000017u, 0x000007ffu, 0x000007feu, 0x0003003eu, 0x00000800u, 0x000007aau, 0x0003003eu, 0x00000802u, 0x0000078cu, 0x0003003eu, 0x00000803u, 0x000007abu, 0x0003003eu, 0x00000805u, 0x000007ffu, 0x00080039u, 0x00000017u, 0x00000806u, 0x0000005du, 0x00000800u, 0x00000802u, 0x00000803u, 0x00000805u, 0x0003003eu, 0x000007f8u, 0x00000806u, 0x000500c4u, 0x00000017u, 0x00000809u, 0x00000806u, 0x000000c1u, 0x00040072u, 0x00000129u, 0x0000080au, 0x00000809u, 0x0004007cu, 0x00000008u, 0x0000080bu, 0x0000080au, 0x00050051u, 0x00000008u, 0x0000080cu, 0x000019e9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000080du, 0x000019e9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000080eu, 0x000019e9u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000080fu, 0x0000080cu, 0x0000080du, 0x0000080eu, 0x0000080bu, 0x0003003eu, 0x00000810u, 0x0000080fu, 0x00050039u, 0x00000002u, 0x00000811u, 0x00000090u, 0x00000810u, 0x000300f7u, 0x00000814u, 0x00000000u, 0x000400fau, 0x0000075bu, 0x00000813u, 0x0000081du, 0x000200f8u, 0x00000813u, 0x0003003eu, 0x00000815u, 0x00000729u, 0x00050039u, 0x0000000au, 0x00000817u, 0x00000028u, 0x00000815u, 0x0003003eu, 0x00000424u, 0x00000817u, 0x0003003eu, 0x00000405u, 0x00001278u, 0x0003003eu, 0x00000574u, 0x000002bcu, 0x000300f7u, 0x0000081bu, 0x00000000u, 0x000400fau, 0x00000570u, 0x0000081au, 0x0000081bu, 0x000200f8u, 0x0000081au, 0x00040039u, 0x00000002u, 0x0000081cu, 0x00000066u, 0x000200f9u, 0x0000081bu, 0x000200f8u, 0x0000081bu, 0x000200f9u, 0x00000814u, 0x000200f8u, 0x0000081du, 0x000300f7u, 0x0000081fu, 0x00000000u, 0x000400fau, 0x00000570u, 0x0000081eu, 0x0000081fu, 0x000200f8u, 0x0000081eu, 0x00040039u, 0x00000002u, 0x00000820u, 0x00000064u, 0x000200f9u, 0x0000081fu, 0x000200f8u, 0x0000081fu, 0x000200f9u, 0x00000814u, 0x000200f8u, 0x00000814u, 0x000200f9u, 0x000007b8u, 0x000200f8u, 0x000007b8u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000b1fau, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000176au, 0x00001779u, 0x00001793u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000186u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000186u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000186u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000186u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000186u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000186u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000186u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000186u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000187u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000188u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000188u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000188u, 0x00000002u, 0x00040047u, 0x0000018au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000018au, 0x00000021u, 0x00000001u, 0x00050048u, 0x000001b0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000001b0u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000001b0u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000001b0u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000001b0u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000001b0u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000001b0u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000001b0u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000001b0u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000001b0u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000001b0u, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000001b0u, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000001b0u, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x000001b0u, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x000001b0u, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001b1u, 0x00000006u, 0x00000038u, 0x00040048u, 0x000001b2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001b2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001b2u, 0x00000002u, 0x00040047u, 0x000001b4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001b4u, 0x00000021u, 0x00000002u, 0x00050048u, 0x0000020du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000020du, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000020du, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000020du, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000020du, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x0000020du, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x0000020du, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x0000020du, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x0000020eu, 0x00000006u, 0x00000020u, 0x00040048u, 0x0000020fu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000020fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000020fu, 0x00000002u, 0x00040047u, 0x00000211u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000211u, 0x00000021u, 0x00000003u, 0x00050048u, 0x00000230u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000230u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000230u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000230u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000231u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000232u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000232u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000232u, 0x00000002u, 0x00040047u, 0x00000234u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000234u, 0x00000021u, 0x00000005u, 0x00050048u, 0x00000247u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000247u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000247u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000247u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000247u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000247u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000247u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000247u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000247u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000248u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000249u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000249u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000249u, 0x00000002u, 0x00040047u, 0x0000024bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000024bu, 0x00000021u, 0x00000006u, 0x00050048u, 0x00000274u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000274u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000274u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000274u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000274u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000274u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000274u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000274u, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x00000274u, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x00000274u, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x00000274u, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000274u, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x00000274u, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000274u, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000275u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000276u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000276u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000276u, 0x00000002u, 0x00040047u, 0x00000278u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000278u, 0x00000021u, 0x00000008u, 0x00040047u, 0x000004cau, 0x00000001u, 0x00000002u, 0x00050048u, 0x00000524u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000524u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000524u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000524u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000525u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000525u, 0x00000002u, 0x00040047u, 0x00000527u, 0x00000022u, 0x00000002u, 0x00040047u, 0x00000527u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000006cau, 0x00000006u, 0x00000001u, 0x00050048u, 0x000006cbu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000006ccu, 0x00000006u, 0x00001000u, 0x00040048u, 0x000006cdu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000006cdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000006cdu, 0x00000002u, 0x00040047u, 0x000006cfu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000006cfu, 0x00000021u, 0x00000007u, 0x00040047u, 0x00000791u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000792u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000793u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000794u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000794u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000794u, 0x00000002u, 0x00040047u, 0x00000796u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000796u, 0x00000021u, 0x00000007u, 0x00050048u, 0x000013b7u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000013b7u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000013b7u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000013b7u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000013b7u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x000013b7u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000013b7u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000013b7u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000013b7u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000013b7u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x000013b7u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x000013b8u, 0x00000006u, 0x00000020u, 0x00040048u, 0x000013b9u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000013b9u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000013b9u, 0x00000002u, 0x00040047u, 0x000013bbu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000013bbu, 0x00000021u, 0x00000000u, 0x00040047u, 0x000013efu, 0x00000006u, 0x00000001u, 0x00050048u, 0x000013f0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000013f0u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000013f0u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x000013f1u, 0x00000006u, 0x00000010u, 0x00040048u, 0x000013f2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000013f2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000013f2u, 0x00000002u, 0x00040047u, 0x000013f4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000013f4u, 0x00000021u, 0x00000004u, 0x00040047u, 0x0000141cu, 0x00000001u, 0x00000007u, 0x00040047u, 0x0000141fu, 0x00000001u, 0x00000003u, 0x00040047u, 0x0000142du, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000143au, 0x00000001u, 0x00000005u, 0x00040047u, 0x00001447u, 0x00000001u, 0x00000006u, 0x00040047u, 0x00001765u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001766u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001766u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001766u, 0x00000002u, 0x00040047u, 0x00001768u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001768u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000176au, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00001774u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00001775u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00001776u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00001779u, 0x0000000bu, 0x0000001bu, 0x00040047u, 0x00001793u, 0x0000000bu, 0x0000001du, 0x00040047u, 0x000017a9u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000017aau, 0x00000000u, 0x00000019u, 0x00050048u, 0x000017aau, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000017aau, 0x00000002u, 0x00040047u, 0x000017acu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000017acu, 0x00000021u, 0x00000009u, 0x00040047u, 0x000017b3u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000017b4u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000017b4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000017b4u, 0x00000002u, 0x00040047u, 0x000017b6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000017b6u, 0x00000021u, 0x0000000bu, 0x00040047u, 0x000017bcu, 0x00000006u, 0x00000004u, 0x00040048u, 0x000017bdu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000017bdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000017bdu, 0x00000002u, 0x00040047u, 0x000017bfu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000017bfu, 0x00000021u, 0x0000000au, 0x00040047u, 0x000017cau, 0x00000006u, 0x00000004u, 0x00040048u, 0x000017cbu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000017cbu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000017cbu, 0x00000002u, 0x00040047u, 0x000017cdu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000017cdu, 0x00000021u, 0x00000009u, 0x00040047u, 0x000017d5u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000017d6u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000017d6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000017d6u, 0x00000002u, 0x00040047u, 0x000017d8u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000017d8u, 0x00000021u, 0x0000000cu, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x0011001eu, 0x0000000fu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000009u, 0x00040021u, 0x00000010u, 0x0000000fu, 0x00000007u, 0x000a001eu, 0x00000014u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x0006001eu, 0x00000019u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001au, 0x00000019u, 0x00000007u, 0x000b001eu, 0x0000001eu, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001fu, 0x0000001eu, 0x00000007u, 0x0010001eu, 0x00000023u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x00000024u, 0x00000023u, 0x00000007u, 0x00060021u, 0x00000028u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030021u, 0x0000002eu, 0x00000008u, 0x00040020u, 0x00000037u, 0x00000007u, 0x00000009u, 0x00040020u, 0x00000038u, 0x00000007u, 0x00000008u, 0x00060021u, 0x00000039u, 0x00000008u, 0x00000037u, 0x00000037u, 0x00000038u, 0x00040021u, 0x0000003fu, 0x00000009u, 0x00000037u, 0x00040021u, 0x00000046u, 0x00000008u, 0x00000038u, 0x00040017u, 0x0000004du, 0x00000008u, 0x00000002u, 0x00040021u, 0x0000004eu, 0x0000004du, 0x00000038u, 0x00040017u, 0x00000052u, 0x00000008u, 0x00000003u, 0x00040020u, 0x00000053u, 0x00000007u, 0x00000052u, 0x00040021u, 0x00000054u, 0x0000004du, 0x00000053u, 0x00020014u, 0x00000058u, 0x00040020u, 0x00000059u, 0x00000007u, 0x00000058u, 0x00050021u, 0x0000005au, 0x0000004du, 0x00000053u, 0x00000059u, 0x00080021u, 0x0000005fu, 0x00000009u, 0x00000037u, 0x00000037u, 0x00000037u, 0x00000038u, 0x00000038u, 0x00040020u, 0x00000067u, 0x00000007u, 0x0000001eu, 0x00040020u, 0x00000068u, 0x00000007u, 0x0000004du, 0x000a0021u, 0x00000069u, 0x00000002u, 0x00000067u, 0x00000037u, 0x00000038u, 0x00000059u, 0x00000059u, 0x00000068u, 0x00000038u, 0x00070021u, 0x00000073u, 0x0000004du, 0x00000037u, 0x00000037u, 0x00000038u, 0x00000059u, 0x00100021u, 0x0000007au, 0x00000002u, 0x00000037u, 0x00000037u, 0x00000037u, 0x00000038u, 0x00000038u, 0x00000059u, 0x00000059u, 0x00000038u, 0x00000068u, 0x00000068u, 0x00000068u, 0x00000038u, 0x00000059u, 0x00040020u, 0x0000008au, 0x00000007u, 0x00000023u, 0x00050021u, 0x0000008bu, 0x00000008u, 0x0000008au, 0x00000038u, 0x00050021u, 0x00000090u, 0x0000004du, 0x0000008au, 0x00000038u, 0x00040021u, 0x00000099u, 0x00000009u, 0x00000007u, 0x00040017u, 0x000000a0u, 0x00000006u, 0x00000002u, 0x00040020u, 0x000000a1u, 0x00000007u, 0x000000a0u, 0x00060021u, 0x000000a2u, 0x00000009u, 0x0000008au, 0x00000007u, 0x000000a1u, 0x00070021u, 0x000000adu, 0x00000009u, 0x0000008au, 0x00000007u, 0x000000a1u, 0x00000007u, 0x000a0021u, 0x000000b4u, 0x00000009u, 0x0000008au, 0x00000007u, 0x000000a1u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000059u, 0x00090021u, 0x000000beu, 0x00000009u, 0x0000008au, 0x00000007u, 0x000000a1u, 0x00000007u, 0x00000007u, 0x00000059u, 0x00080021u, 0x000000f3u, 0x00000008u, 0x00000059u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00060021u, 0x000000fbu, 0x00000008u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00090021u, 0x00000101u, 0x00000008u, 0x0000008au, 0x00000007u, 0x00000068u, 0x00000038u, 0x00000059u, 0x00000059u, 0x00080021u, 0x00000112u, 0x0000004du, 0x00000068u, 0x00000068u, 0x00000068u, 0x00000068u, 0x00000068u, 0x000c0021u, 0x0000011au, 0x00000009u, 0x0000008au, 0x00000007u, 0x00000068u, 0x00000059u, 0x00000059u, 0x00000059u, 0x00000059u, 0x00000059u, 0x00000037u, 0x000f0021u, 0x00000126u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000038u, 0x00000007u, 0x00000038u, 0x00000068u, 0x00000068u, 0x00000068u, 0x00000059u, 0x00000059u, 0x00000059u, 0x00000059u, 0x00050021u, 0x00000135u, 0x00000009u, 0x00000037u, 0x00000037u, 0x00090021u, 0x0000013au, 0x00000002u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00000038u, 0x00070021u, 0x00000146u, 0x00000009u, 0x00000037u, 0x00000037u, 0x00000037u, 0x00000037u, 0x000c001eu, 0x0000014du, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000008u, 0x00000008u, 0x00040020u, 0x0000014eu, 0x00000007u, 0x0000014du, 0x00060021u, 0x0000014fu, 0x00000009u, 0x0000014eu, 0x00000038u, 0x00000038u, 0x000c0021u, 0x00000164u, 0x00000009u, 0x0000014eu, 0x00000037u, 0x00000037u, 0x00000038u, 0x00000038u, 0x00000059u, 0x00000059u, 0x00000059u, 0x00000038u, 0x000a0021u, 0x00000170u, 0x00000009u, 0x0000014eu, 0x00000037u, 0x00000037u, 0x00000038u, 0x00000038u, 0x00000059u, 0x00000059u, 0x0006001eu, 0x0000017au, 0x00000009u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040020u, 0x0000017bu, 0x00000007u, 0x0000017au, 0x00070021u, 0x0000017cu, 0x00000058u, 0x00000038u, 0x00000038u, 0x00000007u, 0x0000017bu, 0x00040020u, 0x00000183u, 0x00000006u, 0x00000008u, 0x0004003bu, 0x00000183u, 0x00000184u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x00000185u, 0x00000000u, 0x000a001eu, 0x00000186u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000187u, 0x00000186u, 0x0003001eu, 0x00000188u, 0x00000187u, 0x00040020u, 0x00000189u, 0x0000000cu, 0x00000188u, 0x0004003bu, 0x00000189u, 0x0000018au, 0x0000000cu, 0x00040020u, 0x0000018cu, 0x0000000cu, 0x00000186u, 0x00040020u, 0x0000018fu, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x00000194u, 0x00000001u, 0x0004002bu, 0x00000008u, 0x00000197u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x0000019au, 0x00000003u, 0x0004002bu, 0x00000008u, 0x0000019du, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000001a0u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x000001a3u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000001a6u, 0x00000007u, 0x00040015u, 0x000001abu, 0x00000008u, 0x00000000u, 0x00040017u, 0x000001acu, 0x000001abu, 0x00000004u, 0x00040015u, 0x000001adu, 0x00000010u, 0x00000000u, 0x00040015u, 0x000001aeu, 0x00000010u, 0x00000001u, 0x00040017u, 0x000001afu, 0x000001aeu, 0x00000004u, 0x0011001eu, 0x000001b0u, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x00000006u, 0x000001adu, 0x000001abu, 0x000001abu, 0x000001afu, 0x0003001du, 0x000001b1u, 0x000001b0u, 0x0003001eu, 0x000001b2u, 0x000001b1u, 0x00040020u, 0x000001b3u, 0x0000000cu, 0x000001b2u, 0x0004003bu, 0x000001b3u, 0x000001b4u, 0x0000000cu, 0x00040020u, 0x000001b6u, 0x0000000cu, 0x000001acu, 0x00040017u, 0x000001b9u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000001e0u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x000001e6u, 0x00000009u, 0x0004002bu, 0x00000008u, 0x000001ecu, 0x0000000au, 0x00040020u, 0x000001edu, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000001f1u, 0x0000000bu, 0x00040020u, 0x000001f2u, 0x0000000cu, 0x000001adu, 0x0004002bu, 0x00000008u, 0x000001f8u, 0x0000000cu, 0x00040020u, 0x000001f9u, 0x0000000cu, 0x000001abu, 0x0004002bu, 0x00000008u, 0x000001ffu, 0x0000000du, 0x0004002bu, 0x00000008u, 0x00000205u, 0x0000000eu, 0x00040020u, 0x00000206u, 0x0000000cu, 0x000001afu, 0x000a001eu, 0x0000020du, 0x000001acu, 0x000001acu, 0x000001acu, 0x000001acu, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x0000020eu, 0x0000020du, 0x0003001eu, 0x0000020fu, 0x0000020eu, 0x00040020u, 0x00000210u, 0x0000000cu, 0x0000020fu, 0x0004003bu, 0x00000210u, 0x00000211u, 0x0000000cu, 0x00040020u, 0x0000022au, 0x0000000cu, 0x00000008u, 0x0006001eu, 0x00000230u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000231u, 0x00000230u, 0x0003001eu, 0x00000232u, 0x00000231u, 0x00040020u, 0x00000233u, 0x0000000cu, 0x00000232u, 0x0004003bu, 0x00000233u, 0x00000234u, 0x0000000cu, 0x00040020u, 0x00000236u, 0x0000000cu, 0x00000230u, 0x00040020u, 0x00000239u, 0x00000007u, 0x00000019u, 0x00040017u, 0x00000246u, 0x000001adu, 0x00000004u, 0x000b001eu, 0x00000247u, 0x00000009u, 0x00000009u, 0x00000246u, 0x00000246u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000001aeu, 0x000001adu, 0x0003001du, 0x00000248u, 0x00000247u, 0x0003001eu, 0x00000249u, 0x00000248u, 0x00040020u, 0x0000024au, 0x0000000cu, 0x00000249u, 0x0004003bu, 0x0000024au, 0x0000024bu, 0x0000000cu, 0x00040020u, 0x0000024du, 0x0000000cu, 0x00000009u, 0x00040020u, 0x00000254u, 0x0000000cu, 0x00000246u, 0x00040020u, 0x00000268u, 0x0000000cu, 0x000001aeu, 0x0010001eu, 0x00000274u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x000001abu, 0x000001abu, 0x000001abu, 0x000001abu, 0x000001abu, 0x000001abu, 0x000001abu, 0x000001abu, 0x0003001du, 0x00000275u, 0x00000274u, 0x0003001eu, 0x00000276u, 0x00000275u, 0x00040020u, 0x00000277u, 0x0000000cu, 0x00000276u, 0x0004003bu, 0x00000277u, 0x00000278u, 0x0000000cu, 0x00040017u, 0x000002b6u, 0x00000006u, 0x00000003u, 0x00040020u, 0x000002b7u, 0x00000007u, 0x000002b6u, 0x0004002bu, 0x00000006u, 0x000002beu, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000002c4u, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x000002d7u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000002dau, 0x00000010u, 0x0004002bu, 0x00000008u, 0x000002e0u, 0x00000020u, 0x0004002bu, 0x00000008u, 0x000002e9u, 0x000001ffu, 0x0004002bu, 0x00000008u, 0x000002eeu, 0x000000ffu, 0x0007002cu, 0x00000009u, 0x000002f3u, 0x00000185u, 0x0000019du, 0x00000197u, 0x000001a3u, 0x00040017u, 0x000002f8u, 0x00000058u, 0x00000004u, 0x00040020u, 0x000002f9u, 0x00000007u, 0x000002f8u, 0x0007002cu, 0x00000009u, 0x00000310u, 0x00000185u, 0x00000185u, 0x00000185u, 0x00000185u, 0x0007002cu, 0x00000009u, 0x00000311u, 0x00000194u, 0x00000194u, 0x00000194u, 0x00000194u, 0x0007002cu, 0x00000009u, 0x0000031eu, 0x00000194u, 0x00000197u, 0x0000019du, 0x000001e0u, 0x0004002bu, 0x00000008u, 0x00000321u, 0x00000010u, 0x0004002bu, 0x00000008u, 0x00000322u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x00000323u, 0x00000080u, 0x0007002cu, 0x00000009u, 0x00000324u, 0x00000321u, 0x000002e0u, 0x00000322u, 0x00000323u, 0x0004002bu, 0x00000006u, 0x0000032au, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000032eu, 0x00000002u, 0x0004002bu, 0x00000006u, 0x00000331u, 0x00000003u, 0x0007002cu, 0x00000009u, 0x00000344u, 0x000002eeu, 0x000002eeu, 0x000002eeu, 0x000002eeu, 0x0004002bu, 0x00000008u, 0x0000035eu, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000368u, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x00000375u, 0x00003fffu, 0x0004002bu, 0x00000006u, 0x0000037bu, 0x00000040u, 0x0004001cu, 0x0000037cu, 0x0000004du, 0x0000037bu, 0x0004002bu, 0x00000008u, 0x0000037du, 0x00004000u, 0x0004002bu, 0x00000008u, 0x0000037eu, 0xfffffc10u, 0x0005002cu, 0x0000004du, 0x0000037fu, 0x0000037du, 0x0000037eu, 0x0004002bu, 0x00000008u, 0x00000380u, 0x00003f04u, 0x0004002bu, 0x00000008u, 0x00000381u, 0xfffffc30u, 0x0005002cu, 0x0000004du, 0x00000382u, 0x00000380u, 0x00000381u, 0x0004002bu, 0x00000008u, 0x00000383u, 0x00003e10u, 0x0004002bu, 0x00000008u, 0x00000384u, 0xfffffc48u, 0x0005002cu, 0x0000004du, 0x00000385u, 0x00000383u, 0x00000384u, 0x0004002bu, 0x00000008u, 0x00000386u, 0x00003d22u, 0x0004002bu, 0x00000008u, 0x00000387u, 0xfffffc68u, 0x0005002cu, 0x0000004du, 0x00000388u, 0x00000386u, 0x00000387u, 0x0004002bu, 0x00000008u, 0x00000389u, 0x00003c3cu, 0x0004002bu, 0x00000008u, 0x0000038au, 0xfffffc84u, 0x0005002cu, 0x0000004du, 0x0000038bu, 0x00000389u, 0x0000038au, 0x0004002bu, 0x00000008u, 0x0000038cu, 0x00003b5du, 0x0004002bu, 0x00000008u, 0x0000038du, 0xfffffc98u, 0x0005002cu, 0x0000004du, 0x0000038eu, 0x0000038cu, 0x0000038du, 0x0004002bu, 0x00000008u, 0x0000038fu, 0x00003a83u, 0x0004002bu, 0x00000008u, 0x00000390u, 0xfffffcb8u, 0x0005002cu, 0x0000004du, 0x00000391u, 0x0000038fu, 0x00000390u, 0x0004002bu, 0x00000008u, 0x00000392u, 0x000039b1u, 0x0004002bu, 0x00000008u, 0x00000393u, 0xfffffcccu, 0x0005002cu, 0x0000004du, 0x00000394u, 0x00000392u, 0x00000393u, 0x0004002bu, 0x00000008u, 0x00000395u, 0x000038e4u, 0x0004002bu, 0x00000008u, 0x00000396u, 0xfffffce0u, 0x0005002cu, 0x0000004du, 0x00000397u, 0x00000395u, 0x00000396u, 0x0004002bu, 0x00000008u, 0x00000398u, 0x0000381cu, 0x0004002bu, 0x00000008u, 0x00000399u, 0xfffffcf8u, 0x0005002cu, 0x0000004du, 0x0000039au, 0x00000398u, 0x00000399u, 0x0004002bu, 0x00000008u, 0x0000039bu, 0x0000375au, 0x0004002bu, 0x00000008u, 0x0000039cu, 0xfffffd0cu, 0x0005002cu, 0x0000004du, 0x0000039du, 0x0000039bu, 0x0000039cu, 0x0004002bu, 0x00000008u, 0x0000039eu, 0x0000369du, 0x0004002bu, 0x00000008u, 0x0000039fu, 0xfffffd20u, 0x0005002cu, 0x0000004du, 0x000003a0u, 0x0000039eu, 0x0000039fu, 0x0004002bu, 0x00000008u, 0x000003a1u, 0x000035e5u, 0x0004002bu, 0x00000008u, 0x000003a2u, 0xfffffd34u, 0x0005002cu, 0x0000004du, 0x000003a3u, 0x000003a1u, 0x000003a2u, 0x0004002bu, 0x00000008u, 0x000003a4u, 0x00003532u, 0x0004002bu, 0x00000008u, 0x000003a5u, 0xfffffd44u, 0x0005002cu, 0x0000004du, 0x000003a6u, 0x000003a4u, 0x000003a5u, 0x0004002bu, 0x00000008u, 0x000003a7u, 0x00003483u, 0x0004002bu, 0x00000008u, 0x000003a8u, 0xfffffd58u, 0x0005002cu, 0x0000004du, 0x000003a9u, 0x000003a7u, 0x000003a8u, 0x0004002bu, 0x00000008u, 0x000003aau, 0x000033d9u, 0x0004002bu, 0x00000008u, 0x000003abu, 0xfffffd68u, 0x0005002cu, 0x0000004du, 0x000003acu, 0x000003aau, 0x000003abu, 0x0004002bu, 0x00000008u, 0x000003adu, 0x00003333u, 0x0004002bu, 0x00000008u, 0x000003aeu, 0xfffffd78u, 0x0005002cu, 0x0000004du, 0x000003afu, 0x000003adu, 0x000003aeu, 0x0004002bu, 0x00000008u, 0x000003b0u, 0x00003291u, 0x0004002bu, 0x00000008u, 0x000003b1u, 0xfffffd8cu, 0x0005002cu, 0x0000004du, 0x000003b2u, 0x000003b0u, 0x000003b1u, 0x0004002bu, 0x00000008u, 0x000003b3u, 0x000031f4u, 0x0004002bu, 0x00000008u, 0x000003b4u, 0xfffffd94u, 0x0005002cu, 0x0000004du, 0x000003b5u, 0x000003b3u, 0x000003b4u, 0x0004002bu, 0x00000008u, 0x000003b6u, 0x00003159u, 0x0004002bu, 0x00000008u, 0x000003b7u, 0xfffffda8u, 0x0005002cu, 0x0000004du, 0x000003b8u, 0x000003b6u, 0x000003b7u, 0x0004002bu, 0x00000008u, 0x000003b9u, 0x000030c3u, 0x0004002bu, 0x00000008u, 0x000003bau, 0xfffffdb4u, 0x0005002cu, 0x0000004du, 0x000003bbu, 0x000003b9u, 0x000003bau, 0x0004002bu, 0x00000008u, 0x000003bcu, 0x00003030u, 0x0004002bu, 0x00000008u, 0x000003bdu, 0xfffffdc4u, 0x0005002cu, 0x0000004du, 0x000003beu, 0x000003bcu, 0x000003bdu, 0x0004002bu, 0x00000008u, 0x000003bfu, 0x00002fa1u, 0x0004002bu, 0x00000008u, 0x000003c0u, 0xfffffdd0u, 0x0005002cu, 0x0000004du, 0x000003c1u, 0x000003bfu, 0x000003c0u, 0x0004002bu, 0x00000008u, 0x000003c2u, 0x00002f15u, 0x0004002bu, 0x00000008u, 0x000003c3u, 0xfffffddcu, 0x0005002cu, 0x0000004du, 0x000003c4u, 0x000003c2u, 0x000003c3u, 0x0004002bu, 0x00000008u, 0x000003c5u, 0x00002e8cu, 0x0004002bu, 0x00000008u, 0x000003c6u, 0xfffffde8u, 0x0005002cu, 0x0000004du, 0x000003c7u, 0x000003c5u, 0x000003c6u, 0x0004002bu, 0x00000008u, 0x000003c8u, 0x00002e06u, 0x0004002bu, 0x00000008u, 0x000003c9u, 0xfffffdf4u, 0x0005002cu, 0x0000004du, 0x000003cau, 0x000003c8u, 0x000003c9u, 0x0004002bu, 0x00000008u, 0x000003cbu, 0x00002d83u, 0x0004002bu, 0x00000008u, 0x000003ccu, 0xfffffe00u, 0x0005002cu, 0x0000004du, 0x000003cdu, 0x000003cbu, 0x000003ccu, 0x0004002bu, 0x00000008u, 0x000003ceu, 0x00002d03u, 0x0004002bu, 0x00000008u, 0x000003cfu, 0xfffffe0cu, 0x0005002cu, 0x0000004du, 0x000003d0u, 0x000003ceu, 0x000003cfu, 0x0004002bu, 0x00000008u, 0x000003d1u, 0x00002c86u, 0x0004002bu, 0x00000008u, 0x000003d2u, 0xfffffe14u, 0x0005002cu, 0x0000004du, 0x000003d3u, 0x000003d1u, 0x000003d2u, 0x0004002bu, 0x00000008u, 0x000003d4u, 0x00002c0bu, 0x0004002bu, 0x00000008u, 0x000003d5u, 0xfffffe20u, 0x0005002cu, 0x0000004du, 0x000003d6u, 0x000003d4u, 0x000003d5u, 0x0004002bu, 0x00000008u, 0x000003d7u, 0x00002b93u, 0x0004002bu, 0x00000008u, 0x000003d8u, 0xfffffe2cu, 0x0005002cu, 0x0000004du, 0x000003d9u, 0x000003d7u, 0x000003d8u, 0x0004002bu, 0x00000008u, 0x000003dau, 0x00002b1eu, 0x0004002bu, 0x00000008u, 0x000003dbu, 0xfffffe34u, 0x0005002cu, 0x0000004du, 0x000003dcu, 0x000003dau, 0x000003dbu, 0x0004002bu, 0x00000008u, 0x000003ddu, 0x00002aabu, 0x0004002bu, 0x00000008u, 0x000003deu, 0xfffffe3cu, 0x0005002cu, 0x0000004du, 0x000003dfu, 0x000003ddu, 0x000003deu, 0x0004002bu, 0x00000008u, 0x000003e0u, 0x00002a3au, 0x0004002bu, 0x00000008u, 0x000003e1u, 0xfffffe48u, 0x0005002cu, 0x0000004du, 0x000003e2u, 0x000003e0u, 0x000003e1u, 0x0004002bu, 0x00000008u, 0x000003e3u, 0x000029ccu, 0x0004002bu, 0x00000008u, 0x000003e4u, 0xfffffe50u, 0x0005002cu, 0x0000004du, 0x000003e5u, 0x000003e3u, 0x000003e4u, 0x0004002bu, 0x00000008u, 0x000003e6u, 0x00002960u, 0x0004002bu, 0x00000008u, 0x000003e7u, 0xfffffe58u, 0x0005002cu, 0x0000004du, 0x000003e8u, 0x000003e6u, 0x000003e7u, 0x0004002bu, 0x00000008u, 0x000003e9u, 0x000028f6u, 0x0004002bu, 0x00000008u, 0x000003eau, 0xfffffe60u, 0x0005002cu, 0x0000004du, 0x000003ebu, 0x000003e9u, 0x000003eau, 0x0004002bu, 0x00000008u, 0x000003ecu, 0x0000288eu, 0x0004002bu, 0x00000008u, 0x000003edu, 0xfffffe68u, 0x0005002cu, 0x0000004du, 0x000003eeu, 0x000003ecu, 0x000003edu, 0x0004002bu, 0x00000008u, 0x000003efu, 0x00002828u, 0x0004002bu, 0x00000008u, 0x000003f0u, 0xfffffe70u, 0x0005002cu, 0x0000004du, 0x000003f1u, 0x000003efu, 0x000003f0u, 0x0004002bu, 0x00000008u, 0x000003f2u, 0x000027c4u, 0x0004002bu, 0x00000008u, 0x000003f3u, 0xfffffe78u, 0x0005002cu, 0x0000004du, 0x000003f4u, 0x000003f2u, 0x000003f3u, 0x0004002bu, 0x00000008u, 0x000003f5u, 0x00002762u, 0x0004002bu, 0x00000008u, 0x000003f6u, 0xfffffe80u, 0x0005002cu, 0x0000004du, 0x000003f7u, 0x000003f5u, 0x000003f6u, 0x0004002bu, 0x00000008u, 0x000003f8u, 0x00002702u, 0x0004002bu, 0x00000008u, 0x000003f9u, 0xfffffe88u, 0x0005002cu, 0x0000004du, 0x000003fau, 0x000003f8u, 0x000003f9u, 0x0004002bu, 0x00000008u, 0x000003fbu, 0x000026a4u, 0x0004002bu, 0x00000008u, 0x000003fcu, 0xfffffe90u, 0x0005002cu, 0x0000004du, 0x000003fdu, 0x000003fbu, 0x000003fcu, 0x0004002bu, 0x00000008u, 0x000003feu, 0x00002648u, 0x0004002bu, 0x00000008u, 0x000003ffu, 0xfffffe94u, 0x0005002cu, 0x0000004du, 0x00000400u, 0x000003feu, 0x000003ffu, 0x0004002bu, 0x00000008u, 0x00000401u, 0x000025edu, 0x0004002bu, 0x00000008u, 0x00000402u, 0xfffffe9cu, 0x0005002cu, 0x0000004du, 0x00000403u, 0x00000401u, 0x00000402u, 0x0004002bu, 0x00000008u, 0x00000404u, 0x00002594u, 0x0004002bu, 0x00000008u, 0x00000405u, 0xfffffea4u, 0x0005002cu, 0x0000004du, 0x00000406u, 0x00000404u, 0x00000405u, 0x0004002bu, 0x00000008u, 0x00000407u, 0x0000253du, 0x0004002bu, 0x00000008u, 0x00000408u, 0xfffffea8u, 0x0005002cu, 0x0000004du, 0x00000409u, 0x00000407u, 0x00000408u, 0x0004002bu, 0x00000008u, 0x0000040au, 0x000024e7u, 0x0004002bu, 0x00000008u, 0x0000040bu, 0xfffffeacu, 0x0005002cu, 0x0000004du, 0x0000040cu, 0x0000040au, 0x0000040bu, 0x0004002bu, 0x00000008u, 0x0000040du, 0x00002492u, 0x0004002bu, 0x00000008u, 0x0000040eu, 0xfffffeb4u, 0x0005002cu, 0x0000004du, 0x0000040fu, 0x0000040du, 0x0000040eu, 0x0004002bu, 0x00000008u, 0x00000410u, 0x0000243fu, 0x0004002bu, 0x00000008u, 0x00000411u, 0xfffffebcu, 0x0005002cu, 0x0000004du, 0x00000412u, 0x00000410u, 0x00000411u, 0x0004002bu, 0x00000008u, 0x00000413u, 0x000023eeu, 0x0004002bu, 0x00000008u, 0x00000414u, 0xfffffec0u, 0x0005002cu, 0x0000004du, 0x00000415u, 0x00000413u, 0x00000414u, 0x0004002bu, 0x00000008u, 0x00000416u, 0x0000239eu, 0x0004002bu, 0x00000008u, 0x00000417u, 0xfffffec4u, 0x0005002cu, 0x0000004du, 0x00000418u, 0x00000416u, 0x00000417u, 0x0004002bu, 0x00000008u, 0x00000419u, 0x0000234fu, 0x0004002bu, 0x00000008u, 0x0000041au, 0xfffffeccu, 0x0005002cu, 0x0000004du, 0x0000041bu, 0x00000419u, 0x0000041au, 0x0004002bu, 0x00000008u, 0x0000041cu, 0x00002302u, 0x0004002bu, 0x00000008u, 0x0000041du, 0xfffffed0u, 0x0005002cu, 0x0000004du, 0x0000041eu, 0x0000041cu, 0x0000041du, 0x0004002bu, 0x00000008u, 0x0000041fu, 0x000022b6u, 0x0004002bu, 0x00000008u, 0x00000420u, 0xfffffed8u, 0x0005002cu, 0x0000004du, 0x00000421u, 0x0000041fu, 0x00000420u, 0x0004002bu, 0x00000008u, 0x00000422u, 0x0000226cu, 0x0005002cu, 0x0000004du, 0x00000423u, 0x00000422u, 0x00000420u, 0x0004002bu, 0x00000008u, 0x00000424u, 0x00002222u, 0x0004002bu, 0x00000008u, 0x00000425u, 0xfffffee0u, 0x0005002cu, 0x0000004du, 0x00000426u, 0x00000424u, 0x00000425u, 0x0004002bu, 0x00000008u, 0x00000427u, 0x000021dau, 0x0004002bu, 0x00000008u, 0x00000428u, 0xfffffee4u, 0x0005002cu, 0x0000004du, 0x00000429u, 0x00000427u, 0x00000428u, 0x0004002bu, 0x00000008u, 0x0000042au, 0x00002193u, 0x0004002bu, 0x00000008u, 0x0000042bu, 0xfffffee8u, 0x0005002cu, 0x0000004du, 0x0000042cu, 0x0000042au, 0x0000042bu, 0x0004002bu, 0x00000008u, 0x0000042du, 0x0000214du, 0x0004002bu, 0x00000008u, 0x0000042eu, 0xfffffeecu, 0x0005002cu, 0x0000004du, 0x0000042fu, 0x0000042du, 0x0000042eu, 0x0004002bu, 0x00000008u, 0x00000430u, 0x00002108u, 0x0004002bu, 0x00000008u, 0x00000431u, 0xfffffef4u, 0x0005002cu, 0x0000004du, 0x00000432u, 0x00000430u, 0x00000431u, 0x0004002bu, 0x00000008u, 0x00000433u, 0x000020c5u, 0x0005002cu, 0x0000004du, 0x00000434u, 0x00000433u, 0x00000431u, 0x0004002bu, 0x00000008u, 0x00000435u, 0x00002082u, 0x0004002bu, 0x00000008u, 0x00000436u, 0xfffffefcu, 0x0005002cu, 0x0000004du, 0x00000437u, 0x00000435u, 0x00000436u, 0x0004002bu, 0x00000008u, 0x00000438u, 0x00002041u, 0x0005002cu, 0x0000004du, 0x00000439u, 0x00000438u, 0x00000436u, 0x0043002cu, 0x0000037cu, 0x0000043au, 0x0000037fu, 0x00000382u, 0x00000385u, 0x00000388u, 0x0000038bu, 0x0000038eu, 0x00000391u, 0x00000394u, 0x00000397u, 0x0000039au, 0x0000039du, 0x000003a0u, 0x000003a3u, 0x000003a6u, 0x000003a9u, 0x000003acu, 0x000003afu, 0x000003b2u, 0x000003b5u, 0x000003b8u, 0x000003bbu, 0x000003beu, 0x000003c1u, 0x000003c4u, 0x000003c7u, 0x000003cau, 0x000003cdu, 0x000003d0u, 0x000003d3u, 0x000003d6u, 0x000003d9u, 0x000003dcu, 0x000003dfu, 0x000003e2u, 0x000003e5u, 0x000003e8u, 0x000003ebu, 0x000003eeu, 0x000003f1u, 0x000003f4u, 0x000003f7u, 0x000003fau, 0x000003fdu, 0x00000400u, 0x00000403u, 0x00000406u, 0x00000409u, 0x0000040cu, 0x0000040fu, 0x00000412u, 0x00000415u, 0x00000418u, 0x0000041bu, 0x0000041eu, 0x00000421u, 0x00000423u, 0x00000426u, 0x00000429u, 0x0000042cu, 0x0000042fu, 0x00000432u, 0x00000434u, 0x00000437u, 0x00000439u, 0x00040020u, 0x0000043du, 0x00000007u, 0x0000037cu, 0x0004002bu, 0x00000008u, 0x0000045cu, 0x00007fffu, 0x0004002bu, 0x00000008u, 0x0000046eu, 0x3fffffffu, 0x0004002bu, 0x00000008u, 0x0000046fu, 0x20000000u, 0x0005002cu, 0x0000004du, 0x00000488u, 0x00000185u, 0x00000185u, 0x00040017u, 0x00000489u, 0x00000058u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x000004a2u, 0xffff8000u, 0x00030029u, 0x00000058u, 0x000004a4u, 0x0005002cu, 0x0000004du, 0x000004bdu, 0x0000045cu, 0x0000045cu, 0x0004002bu, 0x00000008u, 0x000004bfu, 0xffff0000u, 0x0005002cu, 0x0000004du, 0x000004c0u, 0x000004bfu, 0x000004bfu, 0x0004002bu, 0x00000008u, 0x000004c1u, 0x0000ffffu, 0x0005002cu, 0x0000004du, 0x000004c2u, 0x000004c1u, 0x000004c1u, 0x0004002bu, 0x00000008u, 0x000004c7u, 0xffffffe0u, 0x00040032u, 0x00000008u, 0x000004cau, 0x00000000u, 0x0004002bu, 0x00000008u, 0x000004cbu, 0x0000001au, 0x00060034u, 0x00000008u, 0x000004ccu, 0x000000c3u, 0x000004cau, 0x000004cbu, 0x00060034u, 0x00000008u, 0x000004cdu, 0x000000c7u, 0x000004ccu, 0x0000019au, 0x00060034u, 0x00000008u, 0x000004ebu, 0x00000080u, 0x00000197u, 0x000004cdu, 0x00060034u, 0x00000008u, 0x00000508u, 0x00000080u, 0x0000019du, 0x000004cdu, 0x0006001eu, 0x00000524u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x00000525u, 0x00000524u, 0x00040020u, 0x00000526u, 0x00000002u, 0x00000525u, 0x0004003bu, 0x00000526u, 0x00000527u, 0x00000002u, 0x00040020u, 0x00000528u, 0x00000002u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x00000535u, 0xffffffffu, 0x00060034u, 0x00000008u, 0x00000594u, 0x000000c4u, 0x00000194u, 0x000004cdu, 0x00060034u, 0x00000058u, 0x00000595u, 0x000000adu, 0x00000594u, 0x00000194u, 0x00060034u, 0x00000008u, 0x000005ebu, 0x00000082u, 0x00000594u, 0x00000194u, 0x00060034u, 0x00000008u, 0x000005ffu, 0x00000080u, 0x00000197u, 0x000004cdu, 0x00060034u, 0x00000008u, 0x0000060fu, 0x00000080u, 0x000001a0u, 0x000004cdu, 0x0005002cu, 0x0000004du, 0x00000634u, 0x00000185u, 0x00000194u, 0x0004002bu, 0x00000006u, 0x00000678u, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x00000679u, 0x00000006u, 0x0006002cu, 0x000002b6u, 0x0000067au, 0x00000678u, 0x00000679u, 0x0000032au, 0x0004002bu, 0x00000006u, 0x0000067cu, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000689u, 0x000000ffu, 0x0004002bu, 0x00000006u, 0x000006b4u, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x000006bcu, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000006c9u, 0x00001000u, 0x0004001cu, 0x000006cau, 0x000001abu, 0x000006c9u, 0x0003001eu, 0x000006cbu, 0x000006cau, 0x0003001du, 0x000006ccu, 0x000006cbu, 0x0003001eu, 0x000006cdu, 0x000006ccu, 0x00040020u, 0x000006ceu, 0x0000000cu, 0x000006cdu, 0x0004003bu, 0x000006ceu, 0x000006cfu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000006d8u, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x0000070fu, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000767u, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000790u, 0x00000800u, 0x0004001cu, 0x00000791u, 0x000001adu, 0x00000790u, 0x0003001eu, 0x00000792u, 0x00000791u, 0x0003001du, 0x00000793u, 0x00000792u, 0x0003001eu, 0x00000794u, 0x00000793u, 0x00040020u, 0x00000795u, 0x0000000cu, 0x00000794u, 0x0004003bu, 0x00000795u, 0x00000796u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000798u, 0x00000400u, 0x0004002bu, 0x00000006u, 0x00000836u, 0xfffffffcu, 0x0004002bu, 0x00000008u, 0x0000099cu, 0x000003ffu, 0x0004002bu, 0x00000008u, 0x000009deu, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000a0au, 0x00001fffu, 0x0004002bu, 0x00000008u, 0x00000a5fu, 0x0000000fu, 0x0004002bu, 0x00000008u, 0x00000a61u, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000ab2u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00000ad5u, 0x00000400u, 0x0004002bu, 0x00000008u, 0x00000b96u, 0x0000001fu, 0x0004002bu, 0x00000008u, 0x00000bc5u, 0xffffff01u, 0x0005002cu, 0x0000004du, 0x00000bcfu, 0x00000321u, 0x00000321u, 0x00040017u, 0x00000bd1u, 0x00000058u, 0x00000003u, 0x0003002au, 0x00000058u, 0x00001084u, 0x0004002bu, 0x00000008u, 0x000010c2u, 0xffffff00u, 0x0004002bu, 0x00000006u, 0x000010eeu, 0x00000007u, 0x0004001cu, 0x00001150u, 0x00000008u, 0x000002dau, 0x0004001cu, 0x00001151u, 0x00001150u, 0x0000032eu, 0x0013002cu, 0x00001150u, 0x00001152u, 0x00000185u, 0x000001a3u, 0x00000194u, 0x000001a6u, 0x0000019du, 0x00000197u, 0x000001a0u, 0x0000019au, 0x0000019au, 0x000001a0u, 0x00000197u, 0x0000019du, 0x000001a6u, 0x00000194u, 0x000001a3u, 0x00000185u, 0x0013002cu, 0x00001150u, 0x00001153u, 0x00000185u, 0x0000019du, 0x00000194u, 0x000001a0u, 0x0000019du, 0x00000185u, 0x000001a0u, 0x00000194u, 0x0000019au, 0x000001a6u, 0x00000197u, 0x000001a3u, 0x000001a6u, 0x0000019au, 0x000001a3u, 0x00000197u, 0x0005002cu, 0x00001151u, 0x00001154u, 0x00001152u, 0x00001153u, 0x00040020u, 0x0000115cu, 0x00000007u, 0x00001151u, 0x0004002bu, 0x00000008u, 0x00001160u, 0x00000049u, 0x0004002bu, 0x00000008u, 0x000011dau, 0x00000100u, 0x0006002cu, 0x00000052u, 0x000011dbu, 0x000011dau, 0x000011dau, 0x000011dau, 0x00060034u, 0x00000008u, 0x000013afu, 0x00000082u, 0x00000594u, 0x00000194u, 0x000d001eu, 0x000013b7u, 0x00000008u, 0x00000008u, 0x00000008u, 0x000001aeu, 0x000001aeu, 0x00000008u, 0x00000008u, 0x00000008u, 0x000001aeu, 0x000001abu, 0x000001abu, 0x0003001du, 0x000013b8u, 0x000013b7u, 0x0003001eu, 0x000013b9u, 0x000013b8u, 0x00040020u, 0x000013bau, 0x0000000cu, 0x000013b9u, 0x0004003bu, 0x000013bau, 0x000013bbu, 0x0000000cu, 0x00060034u, 0x00000058u, 0x000013c0u, 0x000000adu, 0x00000594u, 0x00000194u, 0x0004002bu, 0x00000006u, 0x000013c4u, 0x00000020u, 0x00060034u, 0x00000008u, 0x000013c9u, 0x00000082u, 0x00000594u, 0x00000194u, 0x00050034u, 0x00000008u, 0x000013cau, 0x000000c8u, 0x000013c9u, 0x00060034u, 0x00000008u, 0x000013cdu, 0x00000082u, 0x00000594u, 0x00000194u, 0x00050034u, 0x00000008u, 0x000013ceu, 0x000000c8u, 0x000013cdu, 0x00040020u, 0x000013edu, 0x00000007u, 0x000001b9u, 0x0004001cu, 0x000013efu, 0x000001abu, 0x000002beu, 0x0005001eu, 0x000013f0u, 0x000001acu, 0x000001acu, 0x000013efu, 0x0003001du, 0x000013f1u, 0x000013f0u, 0x0003001eu, 0x000013f2u, 0x000013f1u, 0x00040020u, 0x000013f3u, 0x0000000cu, 0x000013f2u, 0x0004003bu, 0x000013f3u, 0x000013f4u, 0x0000000cu, 0x00040020u, 0x000013ffu, 0x00000007u, 0x00000014u, 0x0004002bu, 0x00000008u, 0x00001416u, 0x40000000u, 0x00060034u, 0x00000008u, 0x00001417u, 0x000000c7u, 0x000004cau, 0x00001416u, 0x00060034u, 0x00000058u, 0x00001418u, 0x000000abu, 0x00001417u, 0x00000185u, 0x00060034u, 0x00000006u, 0x0000141bu, 0x00000080u, 0x000004cau, 0x000002d7u, 0x00040032u, 0x00000008u, 0x0000141cu, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000141du, 0x000000c3u, 0x0000141cu, 0x00000185u, 0x00060034u, 0x00000008u, 0x0000141eu, 0x000000c7u, 0x0000141du, 0x000002eeu, 0x00040032u, 0x00000008u, 0x0000141fu, 0x00000000u, 0x00060034u, 0x00000008u, 0x00001420u, 0x000000c3u, 0x0000141fu, 0x00000185u, 0x00060034u, 0x00000008u, 0x00001421u, 0x000000c7u, 0x00001420u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001423u, 0x000000c3u, 0x0000141fu, 0x000001e0u, 0x00060034u, 0x00000008u, 0x00001424u, 0x000000c7u, 0x00001423u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001426u, 0x000000c3u, 0x0000141fu, 0x00000321u, 0x00060034u, 0x00000008u, 0x00001427u, 0x000000c7u, 0x00001426u, 0x000002eeu, 0x0004002bu, 0x00000008u, 0x00001429u, 0x00000018u, 0x00060034u, 0x00000008u, 0x0000142au, 0x000000c3u, 0x0000141fu, 0x00001429u, 0x00060034u, 0x00000008u, 0x0000142bu, 0x000000c7u, 0x0000142au, 0x000002eeu, 0x00040032u, 0x00000008u, 0x0000142du, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000142eu, 0x000000c3u, 0x0000142du, 0x00000185u, 0x00060034u, 0x00000008u, 0x0000142fu, 0x000000c7u, 0x0000142eu, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001431u, 0x000000c3u, 0x0000142du, 0x000001e0u, 0x00060034u, 0x00000008u, 0x00001432u, 0x000000c7u, 0x00001431u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001434u, 0x000000c3u, 0x0000142du, 0x00000321u, 0x00060034u, 0x00000008u, 0x00001435u, 0x000000c7u, 0x00001434u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001437u, 0x000000c3u, 0x0000142du, 0x00001429u, 0x00060034u, 0x00000008u, 0x00001438u, 0x000000c7u, 0x00001437u, 0x000002eeu, 0x00040032u, 0x00000008u, 0x0000143au, 0x00000000u, 0x00060034u, 0x00000008u, 0x0000143bu, 0x000000c3u, 0x0000143au, 0x00000185u, 0x00060034u, 0x00000008u, 0x0000143cu, 0x000000c7u, 0x0000143bu, 0x000002eeu, 0x00060034u, 0x00000008u, 0x0000143eu, 0x000000c3u, 0x0000143au, 0x000001e0u, 0x00060034u, 0x00000008u, 0x0000143fu, 0x000000c7u, 0x0000143eu, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001441u, 0x000000c3u, 0x0000143au, 0x00000321u, 0x00060034u, 0x00000008u, 0x00001442u, 0x000000c7u, 0x00001441u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001444u, 0x000000c3u, 0x0000143au, 0x00001429u, 0x00060034u, 0x00000008u, 0x00001445u, 0x000000c7u, 0x00001444u, 0x000002eeu, 0x00040032u, 0x00000008u, 0x00001447u, 0x00000000u, 0x00060034u, 0x00000008u, 0x00001448u, 0x000000c3u, 0x00001447u, 0x00000185u, 0x00060034u, 0x00000008u, 0x00001449u, 0x000000c7u, 0x00001448u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x0000144bu, 0x000000c3u, 0x00001447u, 0x000001e0u, 0x00060034u, 0x00000008u, 0x0000144cu, 0x000000c7u, 0x0000144bu, 0x000002eeu, 0x00060034u, 0x00000008u, 0x0000144eu, 0x000000c3u, 0x00001447u, 0x00000321u, 0x00060034u, 0x00000008u, 0x0000144fu, 0x000000c7u, 0x0000144eu, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001451u, 0x000000c3u, 0x00001447u, 0x00001429u, 0x00060034u, 0x00000008u, 0x00001452u, 0x000000c7u, 0x00001451u, 0x000002eeu, 0x0004002bu, 0x00000006u, 0x0000145eu, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00001467u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x00001470u, 0x00000200u, 0x0004002bu, 0x00000006u, 0x00001481u, 0x00000100u, 0x0004002bu, 0x00000006u, 0x0000148eu, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00001493u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00001498u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x0000149du, 0x00020000u, 0x0004002bu, 0x00000006u, 0x000014a2u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x000014a7u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x000014acu, 0x00200000u, 0x0004002bu, 0x00000006u, 0x000014b1u, 0x00100000u, 0x0004002bu, 0x00000006u, 0x000014b6u, 0x00400000u, 0x0004002bu, 0x00000006u, 0x000014bbu, 0x00800000u, 0x0004002bu, 0x00000006u, 0x000014c0u, 0x01000000u, 0x0004002bu, 0x00000006u, 0x000014c4u, 0x10000000u, 0x00040020u, 0x000014ceu, 0x00000002u, 0x00000006u, 0x00060034u, 0x00000008u, 0x0000150du, 0x000000c7u, 0x000004cau, 0x0000046fu, 0x00060034u, 0x00000058u, 0x0000150eu, 0x000000abu, 0x0000150du, 0x00000185u, 0x00060034u, 0x00000008u, 0x00001511u, 0x000000c3u, 0x0000141cu, 0x00000321u, 0x00060034u, 0x00000008u, 0x00001512u, 0x000000c7u, 0x00001511u, 0x000002eeu, 0x00060034u, 0x00000008u, 0x00001514u, 0x000000c3u, 0x0000141cu, 0x000001e0u, 0x00060034u, 0x00000008u, 0x00001515u, 0x000000c7u, 0x00001514u, 0x000002eeu, 0x00040020u, 0x00001567u, 0x00000007u, 0x0000000fu, 0x00060034u, 0x00000058u, 0x00001586u, 0x000000adu, 0x00000594u, 0x00000194u, 0x00060034u, 0x00000008u, 0x000015eeu, 0x000000c7u, 0x000004cau, 0x0000046fu, 0x00060034u, 0x00000058u, 0x000015efu, 0x000000abu, 0x000015eeu, 0x00000185u, 0x00060034u, 0x00000008u, 0x00001686u, 0x000000c7u, 0x000004cau, 0x0000046fu, 0x00060034u, 0x00000058u, 0x00001687u, 0x000000abu, 0x00001686u, 0x00000185u, 0x0003001du, 0x00001765u, 0x000001b9u, 0x0003001eu, 0x00001766u, 0x00001765u, 0x00040020u, 0x00001767u, 0x0000000cu, 0x00001766u, 0x0004003bu, 0x00001767u, 0x00001768u, 0x0000000cu, 0x00040020u, 0x00001769u, 0x00000001u, 0x000002b6u, 0x0004003bu, 0x00001769u, 0x0000176au, 0x00000001u, 0x00040020u, 0x0000176bu, 0x00000001u, 0x00000006u, 0x00040020u, 0x0000176eu, 0x0000000cu, 0x000001b9u, 0x00040032u, 0x00000006u, 0x00001774u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00001775u, 0x00000001u, 0x00060033u, 0x000002b6u, 0x00001776u, 0x00001774u, 0x00001775u, 0x0000032au, 0x0004003bu, 0x00001769u, 0x00001779u, 0x00000001u, 0x00060034u, 0x00000006u, 0x0000178fu, 0x00000051u, 0x00001776u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00001790u, 0x00000051u, 0x00001776u, 0x00000001u, 0x00060034u, 0x00000006u, 0x00001791u, 0x00000084u, 0x0000178fu, 0x00001790u, 0x0004003bu, 0x0000176bu, 0x00001793u, 0x00000001u, 0x0003001du, 0x000017a9u, 0x000001acu, 0x0003001eu, 0x000017aau, 0x000017a9u, 0x00040020u, 0x000017abu, 0x0000000cu, 0x000017aau, 0x0004003bu, 0x000017abu, 0x000017acu, 0x0000000cu, 0x0003001du, 0x000017b3u, 0x000001abu, 0x0003001eu, 0x000017b4u, 0x000017b3u, 0x00040020u, 0x000017b5u, 0x0000000cu, 0x000017b4u, 0x0004003bu, 0x000017b5u, 0x000017b6u, 0x0000000cu, 0x0003001du, 0x000017bcu, 0x00000008u, 0x0003001eu, 0x000017bdu, 0x000017bcu, 0x00040020u, 0x000017beu, 0x0000000cu, 0x000017bdu, 0x0004003bu, 0x000017beu, 0x000017bfu, 0x0000000cu, 0x0003001du, 0x000017cau, 0x00000006u, 0x0003001eu, 0x000017cbu, 0x000017cau, 0x00040020u, 0x000017ccu, 0x0000000cu, 0x000017cbu, 0x0004003bu, 0x000017ccu, 0x000017cdu, 0x0000000cu, 0x00040015u, 0x000017d4u, 0x00000008u, 0x00000001u, 0x0003001du, 0x000017d5u, 0x000017d4u, 0x0003001eu, 0x000017d6u, 0x000017d5u, 0x00040020u, 0x000017d7u, 0x0000000cu, 0x000017d6u, 0x0004003bu, 0x000017d7u, 0x000017d8u, 0x0000000cu, 0x00040020u, 0x000017dcu, 0x0000000cu, 0x000017d4u, 0x0004002bu, 0x00000008u, 0x000017deu, 0x00000200u, 0x0004002bu, 0x00000008u, 0x000017dfu, 0x00000800u, 0x0004002bu, 0x00000008u, 0x000017e0u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x000017e1u, 0x00002000u, 0x0004002bu, 0x00000008u, 0x000017e2u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x000017e3u, 0x00010000u, 0x0004002bu, 0x00000008u, 0x000017e4u, 0x00040000u, 0x0004002bu, 0x00000008u, 0x000017e5u, 0x00080000u, 0x0004002bu, 0x00000008u, 0x000017e6u, 0x00100000u, 0x0004002bu, 0x00000008u, 0x000017e7u, 0x00200000u, 0x0004002bu, 0x00000008u, 0x000017e8u, 0x00400000u, 0x0004002bu, 0x00000008u, 0x000017e9u, 0x00800000u, 0x0004002bu, 0x00000008u, 0x000017eau, 0x01000000u, 0x0004002bu, 0x00000008u, 0x000017ebu, 0x10000000u, 0x0003002eu, 0x00000009u, 0x0000590fu, 0x0003002eu, 0x00000008u, 0x00005914u, 0x0003002eu, 0x00000006u, 0x000059d9u, 0x00030001u, 0x00000052u, 0x00006aa4u, 0x00030001u, 0x0000004du, 0x00006b72u, 0x00030001u, 0x00000009u, 0x000072a9u, 0x00030001u, 0x00000058u, 0x00007db7u, 0x00030001u, 0x00000008u, 0x000096feu, 0x00030001u, 0x00000058u, 0x0000ad08u, 0x00030001u, 0x00000058u, 0x0000ad09u, 0x00030001u, 0x00000052u, 0x0000ad0eu, 0x00030001u, 0x00000009u, 0x0000adbau, 0x00030001u, 0x00000058u, 0x0000afc0u, 0x00030001u, 0x00000009u, 0x0000b033u, 0x00030001u, 0x00000008u, 0x0000b0cbu, 0x0006002cu, 0x000002b6u, 0x0000b1b3u, 0x000002beu, 0x000002beu, 0x000002beu, 0x0006002cu, 0x000002b6u, 0x0000b1b4u, 0x000002c4u, 0x000002c4u, 0x000002c4u, 0x0006002cu, 0x00000052u, 0x0000b1b5u, 0x000004c7u, 0x000004c7u, 0x000004c7u, 0x0006002cu, 0x00000052u, 0x0000b1b6u, 0x00000321u, 0x00000321u, 0x00000321u, 0x0007002cu, 0x00000009u, 0x0000b1b7u, 0x000004c7u, 0x000004c7u, 0x000004c7u, 0x000004c7u, 0x0007002cu, 0x00000009u, 0x0000b1b8u, 0x00000205u, 0x00000205u, 0x00000205u, 0x00000205u, 0x0007002cu, 0x00000009u, 0x0000b1b9u, 0x00000323u, 0x00000323u, 0x00000323u, 0x00000323u, 0x0005002cu, 0x0000004du, 0x0000b1bau, 0x00000194u, 0x00000194u, 0x0006002cu, 0x00000052u, 0x0000b1bbu, 0x000004a2u, 0x000004a2u, 0x000004a2u, 0x0005002cu, 0x0000004du, 0x0000b1bcu, 0x000001a0u, 0x000001a0u, 0x0005002cu, 0x0000004du, 0x0000b1bdu, 0x00000b96u, 0x00000b96u, 0x0005002cu, 0x000000a0u, 0x0000b1beu, 0x00000a0au, 0x00000a0au, 0x0005002cu, 0x000000a0u, 0x0000b1bfu, 0x0000032eu, 0x0000032eu, 0x0006002cu, 0x000002b6u, 0x0000b1c0u, 0x0000067cu, 0x0000067cu, 0x0000067cu, 0x0006002cu, 0x000002b6u, 0x0000b1c1u, 0x00000331u, 0x00000331u, 0x00000331u, 0x0006002cu, 0x000002b6u, 0x0000b1c2u, 0x0000032eu, 0x0000032eu, 0x0000032eu, 0x0007002cu, 0x00000009u, 0x0000b1c3u, 0x000001e0u, 0x000001e0u, 0x000001e0u, 0x000001e0u, 0x0007002cu, 0x00000009u, 0x0000b1c4u, 0x00000197u, 0x00000197u, 0x00000197u, 0x00000197u, 0x0005002cu, 0x0000004du, 0x0000b1c5u, 0x000002e0u, 0x000002e0u, 0x0007002cu, 0x00000009u, 0x0000b1c6u, 0x00000321u, 0x00000321u, 0x00000321u, 0x00000321u, 0x0007002cu, 0x00000009u, 0x0000b1c7u, 0x000001a0u, 0x000001a0u, 0x000001a0u, 0x000001a0u, 0x0006002cu, 0x00000052u, 0x0000b1c8u, 0x00000185u, 0x00000185u, 0x00000185u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000038u, 0x00006910u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000690fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000690eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000690du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006908u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006907u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006906u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006905u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000068ceu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000068cdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068ccu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068cbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068cau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068c9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068c8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068c7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068c6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068c5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000068afu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000068aeu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068adu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068acu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068abu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068aau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068a9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068a8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068a7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000068a6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000686fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000686eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000686du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000686cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000686bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000686au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006869u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006868u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006867u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006866u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000682fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000682eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000682du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000682cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000682bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000682au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006829u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006828u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006827u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006826u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006805u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006804u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006803u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006802u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006801u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006800u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000067ffu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000067feu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000067fdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000067fcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006379u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006378u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006377u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006376u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006375u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006374u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006373u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006372u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006371u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006370u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000636fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000636eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000636du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000636cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000634eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000634du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000634cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000634bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000634au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006349u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006348u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006347u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006346u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006345u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006344u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006343u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006342u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006341u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ebeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ebdu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ebcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ebbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ebau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005eb9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005eb8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eb1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e93u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e92u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e91u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e90u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e8fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e8eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e8du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e86u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e79u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e78u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e77u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e76u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e75u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e74u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e73u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e72u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e71u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e70u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e6fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e4bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e4au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e49u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e48u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e47u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e46u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e41u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e23u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e22u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e21u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e20u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e1fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e1eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e1du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e16u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e12u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e11u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e10u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005e09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e08u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e07u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e06u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e05u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005e04u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005dffu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005dfeu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005dfdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005dfcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005de8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005de7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005de6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005de5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005de4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005de3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005de2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005de1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005de0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ddcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ddbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ddau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dd0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dcfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dceu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dcdu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dc7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dc6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dc5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dc4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005db0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dafu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005daeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dadu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005dacu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005dabu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005daau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005da9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005da8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d96u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d95u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d94u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d93u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d92u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d91u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d90u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d8fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d85u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d84u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d83u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d82u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d81u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d80u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d7fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d7eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d6cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d6bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d69u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d68u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d67u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d66u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005d65u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d47u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d46u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d45u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d44u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d43u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d42u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d41u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d3au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d12u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d11u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d10u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d0fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005d0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d0cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ce4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ce3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ce2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ce1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ce0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005cdeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cdbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cdau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cd7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cd6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cd3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cd2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ccfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cceu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ccbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005ccau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cc7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cc6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cc3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cc2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cbfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005cbeu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c9eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c9du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c9cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c9au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c99u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c98u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c97u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c96u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c95u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c94u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c93u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c92u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c91u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005c90u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c72u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c71u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c70u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c6fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c6eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c6du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c6cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005c6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005c01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bfdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bf1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005beeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005beau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005be9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005be6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005be5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005be2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005be1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005bb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005baeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005badu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005baau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ba1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b45u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b42u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b41u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b3eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b3du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b3au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b39u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b36u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b35u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b17u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b16u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b15u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b14u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b13u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b12u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b11u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005b10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005b02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005affu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005afau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005af7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005af6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005af3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005af2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ae2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005adfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005adeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005adbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005adau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ad2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005acfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005acbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005acau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ac2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005abfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005abeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005abbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005abau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ab2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005aa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a97u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005a02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000059eau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059e7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059e6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059e3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059e2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059dfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059deu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059dbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059dau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059ceu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059cdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059ccu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059cbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059cau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000059bdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059bcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059bbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059bau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059b9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059b8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059abu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059aau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059a9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059a8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000059a7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000599bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000599au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005999u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005998u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005997u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005996u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000598bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000598au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005989u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005988u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005987u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000597au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005979u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005978u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005977u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005976u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005975u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005968u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005967u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005966u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005965u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005964u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005958u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005957u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005956u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005955u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005954u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005953u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005948u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005947u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005946u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005945u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005944u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005937u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005936u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005935u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005934u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005933u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005932u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005925u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005924u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005923u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005922u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005921u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005915u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005913u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005912u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005911u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005910u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000590eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000590bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058fbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058f4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058edu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058e6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058c2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058c3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058c4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058c5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000058c6u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00005890u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005891u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005892u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00005844u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005845u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005846u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000580bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000580cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000580du, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000057d5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000057d6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000057d7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000577du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000577fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005780u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005781u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005783u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005784u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005785u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005787u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005788u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005789u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000578bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000578cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000578du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000578eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000578fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005790u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005791u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005792u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005793u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005794u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005795u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005778u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005768u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005761u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000575au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005753u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000572fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005730u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005731u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005732u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005733u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000056fdu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000056feu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000056ffu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000056b1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000056b2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000056b3u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00005678u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005679u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000567au, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00005642u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005643u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005644u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055eau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055ecu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055edu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055eeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055f0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055f1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055f2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055f4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055f5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055f6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055f8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055f9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055fau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055fbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055fcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055fdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055feu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055ffu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005600u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005601u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005602u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000055e4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055ddu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055d6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055cfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055abu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055acu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055adu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055aeu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000055afu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00005579u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000557au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000557bu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000552du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000552eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000552fu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000054f4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000054f5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000054f6u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000054beu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000054bfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000054c0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005465u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005467u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005468u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005469u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000546bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000546cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000546du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000546fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005470u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005471u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005473u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005474u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005475u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005476u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005477u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005478u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005479u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000547au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000547bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000547cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000547du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000547eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005460u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000545du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000545au, 0x00000007u, 0x0004003bu, 0x0000115cu, 0x0000541eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000541fu, 0x00000007u, 0x0004003bu, 0x0000115cu, 0x00005420u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000053e6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000053e7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000053e8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000053e9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000053eau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000053ebu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000053adu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000053aeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000053afu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000053b0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000053b1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000053b2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00005374u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00005375u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00005376u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00005377u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00005378u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00005379u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005351u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005352u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005353u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005354u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000532eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000532fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005330u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005331u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000530du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000530eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052eau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000052ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052b9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000052bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005284u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005285u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005286u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005287u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005288u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005252u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005253u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005254u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005255u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005256u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005220u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005221u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005222u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005223u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005224u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051f8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000051f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051ceu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000051cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051a4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000051a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005178u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005179u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000517au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000517bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005150u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005151u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005124u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005125u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005126u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005127u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050fcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000050fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050d2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000050d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000050c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000509eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000509fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000508bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000508cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000508du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005066u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005067u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005068u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005069u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000506au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005056u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005057u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005058u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005031u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005032u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005033u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005034u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005035u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005021u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005022u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005023u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ffcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ffdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ffeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fffu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00005000u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fc9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f92u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f5bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004f5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f24u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004f25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004edfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ee3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004ee4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ea2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004ea3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e61u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004e62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e20u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004e21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004df9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dfbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004dfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dd8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004dd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004db3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004db5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004db6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d92u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004d93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d5eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d61u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004d62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d2fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004d30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cfdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004cfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ccau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ccbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004cccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ca0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004ca1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c76u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004c77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c4cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004c4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c22u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004c23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bd9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004bdau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004bdbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004bdcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004bddu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004bdeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b8eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b8fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b90u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b91u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b92u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004b93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b43u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b44u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b45u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b46u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004b47u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004b48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004af4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004af5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004af6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004af7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004af8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004af9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004afau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004afbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004afcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004afdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004abeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004abfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ac0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ac1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004ac2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a8bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004a8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a55u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004a56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a1fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004a20u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004a02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a03u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004a04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049e0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000049e1u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000049c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049c4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000049c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000499eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000499fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049a1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000049a2u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004984u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004985u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004986u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000495fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004960u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004961u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004962u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004963u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004945u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004946u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004947u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004920u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004921u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004922u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004923u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004924u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048ffu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004900u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048dcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000048ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048b9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000048bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004894u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004895u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004896u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004897u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004862u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004863u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004864u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004865u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004866u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004830u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004831u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004832u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004833u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004834u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004800u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004801u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004802u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047cfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000047d0u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000047b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047b3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000047b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047a3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000047a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004768u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004769u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000476cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000476eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000476fu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x0000474eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004750u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000473eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000473fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004740u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004704u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004705u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004706u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004707u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004708u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004709u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000470bu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000046eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046ebu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000046ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046dbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000046dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000046a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046a6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000046a7u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004686u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004687u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004688u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004676u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004677u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004678u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000463cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000463du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000463eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000463fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004640u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004641u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004642u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004643u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004622u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004623u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004624u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004612u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004613u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004614u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045cdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000045ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045d0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000045d1u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000045afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045b0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000045b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000459fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000045a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004556u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004557u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004558u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004559u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000455bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000455du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000455eu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x0000453cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000453eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000452du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000452eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044e7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000044e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044eau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000044ebu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000044c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044cau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000044cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044bau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000044bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004470u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004471u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004472u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004473u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004474u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004475u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004476u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004477u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004478u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004456u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004457u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004458u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004446u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004447u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004448u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004409u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000440au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000440bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000440cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000440du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000440eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000440fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004410u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000043efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043f0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000043f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043e0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000043e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000043a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000043a8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000043a9u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004388u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004389u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000438au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004378u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004379u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000437au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000433bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000433cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000433du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000433eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000433fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004340u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004341u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004342u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00004321u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004322u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004323u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004311u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004312u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00004313u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042d7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000042d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000042dau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000042dbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000042b8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000042b9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000429cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000429du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004280u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004281u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004264u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004265u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00004235u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004236u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00004206u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00004207u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d0du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d0eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d0fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d10u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d11u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d12u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d13u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d14u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d15u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d16u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003d17u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d18u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d19u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d1bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d1cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d1eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d1fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d21u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d22u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d24u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003d25u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d26u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003d27u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003d28u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d2au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003d2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d2du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d31u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d32u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003d33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d35u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d39u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d3au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003d3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d3du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d41u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d42u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003d43u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d45u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d49u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d4cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d4fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d52u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d55u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d58u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d5bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d5eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d61u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d64u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d67u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d6au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d6du, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d70u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d73u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d76u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d79u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003d7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d7cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d7fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d82u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d85u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d88u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d8bu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d8eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d91u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d94u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d97u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d9au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d9bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003d9du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003d9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003da0u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003da1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003da3u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003da4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003da6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003da7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003da9u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003daau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003daeu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db2u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003db3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003db7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003db8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbau, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dbeu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc2u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dcau, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dceu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dd1u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dd4u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dd7u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ddau, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003ddbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dddu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003ddeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de0u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003de1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de3u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003de4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003de7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003de9u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003deau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003decu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003defu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003df0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df2u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003df3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df5u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003df6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003df8u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003df9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dfbu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003dfeu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003dffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e01u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e04u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e07u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e0au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e0du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e10u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e13u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e16u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e19u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e1cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e1fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e22u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e25u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e28u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e2bu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e2eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e2fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e31u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e34u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e37u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00003e38u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003e39u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e3au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e3bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003e3cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003e3du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003e3eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e3fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e40u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e41u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e42u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e43u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e44u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e45u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e46u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e47u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e48u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e49u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e4au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e4bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003e4cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003e4du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003c99u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c9au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c9bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c9cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c9du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003c9eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c96u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c73u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c74u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c75u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c76u, 0x00000007u, 0x0004003bu, 0x0000043du, 0x00003c77u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c78u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c79u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c10u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003c11u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c12u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c13u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c14u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c15u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003c16u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c17u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c18u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003c19u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00003befu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003bf0u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003bf1u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00003bf2u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003bf3u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00003bf4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003bf5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003becu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003bc9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003bcau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003bcbu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003bccu, 0x00000007u, 0x0004003bu, 0x0000043du, 0x00003bcdu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003bceu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003bcfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b66u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00003b67u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003b68u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b69u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b6au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003b6bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b6cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003b6du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003b6eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003b6fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003b2eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b2fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b30u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b31u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003b32u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003b33u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003af5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003af6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003af7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003af8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003af9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003afau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003abcu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003abdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003abeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003abfu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003ac0u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00003ac1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a9bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003a9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a78u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003a79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a55u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003a56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a32u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003a33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a01u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003a02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039cfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000039d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000399du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000399eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003968u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000396au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000396bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000396cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000393eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000393fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003940u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003941u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003914u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003915u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003916u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003917u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038ecu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000038edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000038c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003896u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003897u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003898u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003899u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000386cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000386du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000386eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000386fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003842u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003843u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003844u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003845u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003818u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003819u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000381au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000381bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003808u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003809u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000380au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037e6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000037e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037d4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000037d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000037b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000379eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000379fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000037a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003779u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000377cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000377du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003769u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000376au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000376bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003744u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003745u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003746u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003747u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003748u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000370du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000370eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000370fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003710u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003711u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003712u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036dau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000036dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000369fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000036a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003668u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003669u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000366au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000366bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000366cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000366du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003627u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003628u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003629u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000362au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000362bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000362cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035eau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000035ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035a9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000035aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003564u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003565u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003566u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003567u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003568u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003569u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003541u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003542u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003543u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003544u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000351eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000351fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003520u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003521u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034fdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000034feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034dau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000034dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034a9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000034aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003474u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003475u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003476u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003477u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003478u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003442u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003445u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003446u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003410u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003411u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003412u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003413u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003414u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033e8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000033e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033beu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000033bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003392u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003393u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003394u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003395u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003368u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003369u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000336au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000336bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000331du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000331eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000331fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003320u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003321u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003322u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003323u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003324u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003325u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003326u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032d6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000032d7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000032d8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000032d9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000032dau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000032dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003287u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003288u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003289u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000328au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000328bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000328cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000328du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000328eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000328fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003290u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000323cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000323du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000323eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000323fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003240u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003241u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003242u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003243u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00003244u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003245u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003206u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003207u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003208u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003209u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000320au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031d3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000031d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000319au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000319bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000319cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000319du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000319eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003164u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003165u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003166u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003167u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003168u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x0000314au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000314bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000314cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003125u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003126u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003127u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003128u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003129u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x0000310bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000310cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000310du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030e9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000030eau, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x000030ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030cdu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000030ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030aau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000030abu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x0000308du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000308eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000308fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003068u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003069u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000306au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000306bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000306cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003045u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003046u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003047u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003048u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003022u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003023u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003024u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003025u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003000u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003001u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00003002u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fdeu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002fdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fabu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002facu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fadu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002faeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f7au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f7bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002f7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f49u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002f4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f17u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002f18u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002efau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002efbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002efcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eebu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002eecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eb3u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eb6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002eb7u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002e96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e97u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002e98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e87u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002e88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e4fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002e50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e52u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002e53u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e33u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002e34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e23u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002e24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002deau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002debu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002decu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002deeu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002defu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002dceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dcfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002dd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dbfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d87u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d8au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002d8bu, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002d6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d5bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002d5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d15u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002d16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d18u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002d19u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002cf7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002cf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ce8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002ce9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002ca3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ca5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002ca6u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002c84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c85u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002c86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c75u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002c76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c2fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002c30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c32u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002c33u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002c11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c12u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002c13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c02u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002c03u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bbau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bbcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002bbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bbfu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002bc0u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002b9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b9fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002ba0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b8fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002b90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b53u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b54u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002b55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b57u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002b58u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002b37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b38u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002b39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b28u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002b29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002aeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002aebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002aecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002aedu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002aeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002aefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002af0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002af1u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002ad0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ad1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002ad2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ac0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ac1u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002ac2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a86u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002a87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a89u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002a8au, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00002a69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a6au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002a6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a5au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002a5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a1fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002a20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002a22u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002a23u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002a00u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002a01u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000029e4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000029e5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000029c8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000029c9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000029acu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000029adu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000297du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000297eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000294eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000294fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002455u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002456u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002457u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002458u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002459u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000245au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000245bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000245cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000245du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000245eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000245fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002460u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002461u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002463u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002464u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002466u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002467u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002469u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000246au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000246cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000246du, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000246eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000246fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002470u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002471u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002472u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002473u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002475u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002476u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002477u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002478u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002479u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000247au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000247bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000247du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000247eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000247fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002480u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002481u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002482u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002483u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002485u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002486u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002487u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002488u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002489u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000248au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000248bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000248du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000248eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000248fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002490u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002491u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002492u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002494u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002495u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002496u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002497u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002498u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000249au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000249bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000249cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000249du, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000249eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024a0u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024a3u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000024a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024a6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024a9u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000024aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024acu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024afu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000024b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024b2u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024b5u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000024b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024b8u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024bbu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000024bcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024beu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024bfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024c1u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000024c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024c4u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024c7u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024cau, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024cdu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024d0u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024d3u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024d6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024d9u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024dcu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024dfu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024e2u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024e5u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024e8u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024e9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024ebu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024eeu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024f1u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024f6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024fau, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024feu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x000024ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002500u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002502u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002503u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002504u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002506u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002507u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002508u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000250au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000250bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000250cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000250eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000250fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002510u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002512u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002513u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002516u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002517u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002519u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000251au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000251cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000251du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000251fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002520u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002522u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002523u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002525u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002526u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002528u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002529u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000252bu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000252cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000252eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000252fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002531u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002532u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002534u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002535u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002537u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000253bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000253eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002540u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002541u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002543u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002544u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002546u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002547u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002549u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000254au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000254cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000254du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000254fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002550u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002552u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002553u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002555u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002556u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002558u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002559u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000255bu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000255cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000255eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000255fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002561u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002562u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002564u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002565u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002567u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002568u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000256au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000256bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000256du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000256eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002570u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002571u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002573u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002574u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002576u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002577u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002579u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000257au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000257cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x0000257du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000257fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00002580u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002581u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002582u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002583u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002584u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002585u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002586u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002587u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002588u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002589u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000258au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000258bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000258cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000258du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000258eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000258fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002590u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002591u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002592u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002593u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002594u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002595u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000238cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000238du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000238eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000238fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002390u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002391u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002392u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002393u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002381u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000237eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000237bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002378u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002355u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002356u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002357u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002358u, 0x00000007u, 0x0004003bu, 0x0000043du, 0x00002359u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000235au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000235bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022f2u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000022f3u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022f4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022f5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022f6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022f7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022f8u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022f9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022fau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022fbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022cfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022d0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022d1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022d2u, 0x00000007u, 0x0004003bu, 0x0000043du, 0x000022d3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000022d4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000022d5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000226cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000226du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000226eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000226fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002270u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002271u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002272u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002273u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002274u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00002275u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002249u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000224au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000224bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000224cu, 0x00000007u, 0x0004003bu, 0x0000043du, 0x0000224du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000224eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000224fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000021e6u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000021e7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000021e8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000021e9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000021eau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000021ebu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000021ecu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000021edu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000021eeu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000021efu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000214eu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000214fu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002150u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002151u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002152u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002153u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002154u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002155u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00002156u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002157u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002158u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00002159u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000215au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000215bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000215cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000215du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000215eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000213eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002135u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002136u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000020f2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000020f3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000020f4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000020f5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000020f6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000020f7u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000206du, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x0000206eu, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x0000206fu, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x00002070u, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x00002071u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002072u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002073u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00002074u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002075u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002076u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002051u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002052u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002035u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002036u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00002019u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000201au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ff5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ff6u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ff7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001ee1u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001ee2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ee3u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001ee4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ee5u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ee6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ee8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ee9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001eebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001eecu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00001eedu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00001eeeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001eefu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ef0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ef1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ef2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ef4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ef5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ef7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ef8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ef9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001efau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001efbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ec5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ec6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ea9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001eaau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001e8du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001e8eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001e69u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001e6au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001e6bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001d55u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001d56u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d57u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001d58u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d59u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001d5au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d5cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d5du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d5fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d60u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00001d61u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00001d62u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d63u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d64u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d65u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d66u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d68u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d69u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d6eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d6fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d3fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001d29u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001cdcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001cddu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001cdeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001cdfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ce0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ce1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ce2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ce4u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001ce5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001ce6u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001ce7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001ceau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001cebu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001cecu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001cedu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001ceeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001cefu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c9du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c7au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c7bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c7cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c7du, 0x00000007u, 0x0004003bu, 0x0000043du, 0x00001c7eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c7fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c80u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c17u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001c18u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c19u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c1au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c1bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c1cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001c1du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c1eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c1fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001c20u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001bd8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001bd9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001bdau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001bdbu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00001bdcu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001bddu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00001bdeu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001bdfu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00001be0u, 0x00000007u, 0x0004003bu, 0x000002b7u, 0x00001bb7u, 0x00000007u, 0x0005003bu, 0x00000059u, 0x000017f1u, 0x00000007u, 0x00001084u, 0x0004003bu, 0x00000059u, 0x000017f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017fau, 0x00000007u, 0x0004003bu, 0x000013edu, 0x000017fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000017ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001800u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001801u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001802u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001803u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001804u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001805u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001806u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001807u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001808u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001809u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000180au, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000180bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000180cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000180du, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000180eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000180fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001810u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001811u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001812u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001813u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001814u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001815u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001816u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001817u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001818u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001819u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000181au, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000181bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000181cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000181du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000181eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000181fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001820u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001821u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001822u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001823u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001824u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001826u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001827u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001828u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001829u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000182au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000182bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000182cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000182du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000182fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001830u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001832u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001833u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001834u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001835u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001836u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001837u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001838u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001839u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000183au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000183bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000183du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000183eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000183fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001840u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001841u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001842u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001843u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001844u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001845u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001846u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001847u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001848u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001849u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000184au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000184bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000184cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000184du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000184eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000184fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001850u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001851u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001852u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001853u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001854u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001855u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001856u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001857u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001858u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001859u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000185au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000185bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000185cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000185du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000185eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000185fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001860u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001861u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001862u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001863u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001864u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001865u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001866u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001867u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001868u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001869u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000186au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000186cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000186du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000186fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001870u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001871u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001872u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001873u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001874u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001875u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001876u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001877u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001878u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001879u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000187au, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000187bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000187cu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000187du, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000187eu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000187fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001880u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00001881u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001882u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001883u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001884u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001885u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001886u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001887u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001888u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001889u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000188bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000188du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000188eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000188fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001890u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001891u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001892u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001893u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001894u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001895u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001896u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001897u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001898u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001899u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000189au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000189bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000189cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000189du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000189eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018a0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018a2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018a3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018a4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018a5u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018a6u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018a7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018a8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018a9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018aau, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018abu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018adu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018aeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018afu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018b0u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018b1u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018b2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018b5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000018b6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018b7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018b8u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018b9u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018bau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000018bbu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000018bcu, 0x00000007u, 0x0004003bu, 0x000013edu, 0x00001764u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001771u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000177eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001787u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000178au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000178du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001797u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001799u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000179bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000017a2u, 0x00000007u, 0x0003003eu, 0x00000184u, 0x00000185u, 0x00050041u, 0x0000176bu, 0x0000176cu, 0x0000176au, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000176du, 0x0000176cu, 0x00060041u, 0x0000176eu, 0x0000176fu, 0x00001768u, 0x00000185u, 0x0000176du, 0x0004003du, 0x000001b9u, 0x00001770u, 0x0000176fu, 0x0003003eu, 0x00001764u, 0x00001770u, 0x00050041u, 0x00000007u, 0x00001772u, 0x00001764u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001773u, 0x00001772u, 0x00050051u, 0x00000006u, 0x00001777u, 0x00001776u, 0x00000000u, 0x00050084u, 0x00000006u, 0x00001778u, 0x00001773u, 0x00001777u, 0x00050041u, 0x0000176bu, 0x0000177au, 0x00001779u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000177bu, 0x0000177au, 0x00050080u, 0x00000006u, 0x0000177cu, 0x00001778u, 0x0000177bu, 0x0004007cu, 0x00000008u, 0x0000177du, 0x0000177cu, 0x0003003eu, 0x00001771u, 0x0000177du, 0x00050041u, 0x00000007u, 0x0000177fu, 0x00001764u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001780u, 0x0000177fu, 0x00050051u, 0x00000006u, 0x00001781u, 0x00001776u, 0x00000001u, 0x00050084u, 0x00000006u, 0x00001782u, 0x00001780u, 0x00001781u, 0x00050041u, 0x0000176bu, 0x00001783u, 0x00001779u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001784u, 0x00001783u, 0x00050080u, 0x00000006u, 0x00001785u, 0x00001782u, 0x00001784u, 0x0004007cu, 0x00000008u, 0x00001786u, 0x00001785u, 0x0003003eu, 0x0000177eu, 0x00001786u, 0x00050041u, 0x00000007u, 0x00001788u, 0x00001764u, 0x0000032eu, 0x0004003du, 0x00000006u, 0x00001789u, 0x00001788u, 0x0003003eu, 0x00001787u, 0x00001789u, 0x00050041u, 0x00000007u, 0x0000178bu, 0x00001764u, 0x00000331u, 0x0004003du, 0x00000006u, 0x0000178cu, 0x0000178bu, 0x0003003eu, 0x0000178au, 0x0000178cu, 0x00050084u, 0x00000006u, 0x00001792u, 0x00001789u, 0x00001791u, 0x0004003du, 0x00000006u, 0x00001794u, 0x00001793u, 0x00050080u, 0x00000006u, 0x00001795u, 0x00001792u, 0x00001794u, 0x0003003eu, 0x0000178du, 0x00001795u, 0x0003003eu, 0x00001797u, 0x0000177du, 0x0003003eu, 0x00001799u, 0x00001786u, 0x0003003eu, 0x0000179bu, 0x0000178cu, 0x0003003eu, 0x000017f1u, 0x00001084u, 0x000300f7u, 0x000018bdu, 0x00000000u, 0x000300fbu, 0x000002d7u, 0x000018beu, 0x000200f8u, 0x000018beu, 0x0003003eu, 0x000017f4u, 0x0000178cu, 0x00060041u, 0x00000236u, 0x00001b56u, 0x00000234u, 0x00000185u, 0x0000178cu, 0x0004003du, 0x00000230u, 0x00001b57u, 0x00001b56u, 0x00050051u, 0x00000008u, 0x00001b58u, 0x00001b57u, 0x00000000u, 0x0003003eu, 0x00005dc4u, 0x00001b58u, 0x00050051u, 0x00000008u, 0x00001b5au, 0x00001b57u, 0x00000001u, 0x0003003eu, 0x00005dc5u, 0x00001b5au, 0x00050051u, 0x00000008u, 0x00001b5cu, 0x00001b57u, 0x00000002u, 0x0003003eu, 0x00005dc6u, 0x00001b5cu, 0x00050051u, 0x00000008u, 0x00001b5eu, 0x00001b57u, 0x00000003u, 0x0003003eu, 0x00005dc7u, 0x00001b5eu, 0x00070050u, 0x00000019u, 0x00005dccu, 0x00001b58u, 0x00001b5au, 0x00001b5cu, 0x00001b5eu, 0x0003003eu, 0x00005dcdu, 0x00001b58u, 0x0003003eu, 0x00005dceu, 0x00001b5au, 0x0003003eu, 0x00005dcfu, 0x00001b5cu, 0x0003003eu, 0x00005dd0u, 0x00001b5eu, 0x0003003eu, 0x00005ddau, 0x00001b58u, 0x0003003eu, 0x00005ddbu, 0x00001b5au, 0x0003003eu, 0x00005ddcu, 0x00001b5cu, 0x00050084u, 0x00000008u, 0x000018c4u, 0x00000594u, 0x00001b5au, 0x000500b1u, 0x00000058u, 0x000018c5u, 0x00001786u, 0x000018c4u, 0x000400a8u, 0x00000058u, 0x000018c6u, 0x000018c5u, 0x000300f7u, 0x000018c7u, 0x00000000u, 0x000400fau, 0x000018c6u, 0x000018c8u, 0x000018c7u, 0x000200f8u, 0x000018c8u, 0x00050084u, 0x00000008u, 0x000018ccu, 0x00001b5cu, 0x00000594u, 0x00050080u, 0x00000008u, 0x000018cdu, 0x000018ccu, 0x000013afu, 0x000500adu, 0x00000058u, 0x000018ceu, 0x00001786u, 0x000018cdu, 0x000200f9u, 0x000018c7u, 0x000200f8u, 0x000018c7u, 0x000700f5u, 0x00000058u, 0x000018cfu, 0x000018c5u, 0x000018beu, 0x000018ceu, 0x000018c8u, 0x000300f7u, 0x000018d0u, 0x00000000u, 0x000400fau, 0x000018cfu, 0x000018d1u, 0x000018d0u, 0x000200f8u, 0x000018d1u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000018d0u, 0x00070041u, 0x000001f9u, 0x000018d3u, 0x000013bbu, 0x00000185u, 0x0000178cu, 0x000001e6u, 0x0004003du, 0x000001abu, 0x000018d4u, 0x000018d3u, 0x00040071u, 0x00000006u, 0x000018d5u, 0x000018d4u, 0x0003003eu, 0x000017f5u, 0x000018d5u, 0x000300f7u, 0x000018d6u, 0x00000000u, 0x000400fau, 0x000013c0u, 0x000018d7u, 0x000018d6u, 0x000200f8u, 0x000018d7u, 0x000500c7u, 0x00000006u, 0x000018d9u, 0x000018d5u, 0x000013c4u, 0x000500abu, 0x00000058u, 0x000018dau, 0x000018d9u, 0x000002d7u, 0x000300f7u, 0x000018dbu, 0x00000000u, 0x000400fau, 0x000018dau, 0x000018dcu, 0x000018dbu, 0x000200f8u, 0x000018dcu, 0x000500c7u, 0x00000008u, 0x000018deu, 0x0000177du, 0x000013cau, 0x0003003eu, 0x00001797u, 0x000018deu, 0x000500c7u, 0x00000008u, 0x000018e0u, 0x00001786u, 0x000013ceu, 0x0003003eu, 0x00001799u, 0x000018e0u, 0x000200f9u, 0x000018dbu, 0x000200f8u, 0x000018dbu, 0x000700f5u, 0x00000008u, 0x00006a57u, 0x0000177du, 0x000018d7u, 0x000018deu, 0x000018dcu, 0x000700f5u, 0x00000008u, 0x00006a4eu, 0x00001786u, 0x000018d7u, 0x000018e0u, 0x000018dcu, 0x000200f9u, 0x000018d6u, 0x000200f8u, 0x000018d6u, 0x000700f5u, 0x00000008u, 0x00006a56u, 0x0000177du, 0x000018d0u, 0x00006a57u, 0x000018dbu, 0x000700f5u, 0x00000008u, 0x00006a4du, 0x00001786u, 0x000018d0u, 0x00006a4eu, 0x000018dbu, 0x00050084u, 0x00000008u, 0x000018e3u, 0x00000594u, 0x00001b58u, 0x00050082u, 0x00000008u, 0x000018e8u, 0x00006a4du, 0x000018c4u, 0x00050080u, 0x00000008u, 0x000018e9u, 0x000018e3u, 0x000018e8u, 0x0004007cu, 0x00000006u, 0x000018eau, 0x000018e9u, 0x0003003eu, 0x000017f7u, 0x000018eau, 0x00070041u, 0x0000024du, 0x00001b63u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x00000185u, 0x0004003du, 0x00000009u, 0x00001b64u, 0x00001b63u, 0x00070041u, 0x0000024du, 0x00001b66u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x00000194u, 0x0004003du, 0x00000009u, 0x00001b67u, 0x00001b66u, 0x00070041u, 0x00000254u, 0x00001b69u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x00000197u, 0x0004003du, 0x00000246u, 0x00001b6au, 0x00001b69u, 0x00040071u, 0x000001b9u, 0x00001b6bu, 0x00001b6au, 0x0004007cu, 0x00000009u, 0x00001b6cu, 0x00001b6bu, 0x00070041u, 0x00000254u, 0x00001b6eu, 0x0000024bu, 0x00000185u, 0x000018eau, 0x0000019au, 0x0004003du, 0x00000246u, 0x00001b6fu, 0x00001b6eu, 0x00040071u, 0x000001b9u, 0x00001b70u, 0x00001b6fu, 0x0004007cu, 0x00000009u, 0x00001b71u, 0x00001b70u, 0x00070041u, 0x0000022au, 0x00001b73u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x0000019du, 0x0004003du, 0x00000008u, 0x00001b74u, 0x00001b73u, 0x00070041u, 0x0000022au, 0x00001b76u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x000001a0u, 0x0004003du, 0x00000008u, 0x00001b77u, 0x00001b76u, 0x00070041u, 0x0000022au, 0x00001b79u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x000001a3u, 0x0004003du, 0x00000008u, 0x00001b7au, 0x00001b79u, 0x00070041u, 0x00000268u, 0x00001b7cu, 0x0000024bu, 0x00000185u, 0x000018eau, 0x000001a6u, 0x0004003du, 0x000001aeu, 0x00001b7du, 0x00001b7cu, 0x00040072u, 0x00000008u, 0x00001b7eu, 0x00001b7du, 0x00070041u, 0x000001f2u, 0x00001b80u, 0x0000024bu, 0x00000185u, 0x000018eau, 0x000001e0u, 0x0004003du, 0x000001adu, 0x00001b81u, 0x00001b80u, 0x00040071u, 0x00000006u, 0x00001b82u, 0x00001b81u, 0x0004007cu, 0x00000008u, 0x00001b83u, 0x00001b82u, 0x000c0050u, 0x0000001eu, 0x00001b84u, 0x00001b64u, 0x00001b67u, 0x00001b6cu, 0x00001b71u, 0x00001b74u, 0x00001b77u, 0x00001b7au, 0x00001b7eu, 0x00001b83u, 0x0003003eu, 0x00005da8u, 0x00001b64u, 0x0003003eu, 0x00005da9u, 0x00001b67u, 0x0003003eu, 0x00005daau, 0x00001b6cu, 0x0003003eu, 0x00005dabu, 0x00001b71u, 0x0003003eu, 0x00005dacu, 0x00001b74u, 0x0003003eu, 0x00005dadu, 0x00001b77u, 0x0003003eu, 0x00005daeu, 0x00001b7au, 0x0003003eu, 0x00005dafu, 0x00001b7eu, 0x0003003eu, 0x00005db0u, 0x00001b83u, 0x0003003eu, 0x00005de0u, 0x00001b64u, 0x0003003eu, 0x00005de1u, 0x00001b67u, 0x0003003eu, 0x00005de2u, 0x00001b6cu, 0x0003003eu, 0x00005de3u, 0x00001b71u, 0x0003003eu, 0x00005de4u, 0x00001b74u, 0x0003003eu, 0x00005de5u, 0x00001b77u, 0x0003003eu, 0x00005de6u, 0x00001b7au, 0x0003003eu, 0x00005de7u, 0x00001b7eu, 0x0003003eu, 0x00005de8u, 0x00001b83u, 0x000500aau, 0x00000058u, 0x000018eeu, 0x00001b83u, 0x00000185u, 0x000300f7u, 0x000018efu, 0x00000000u, 0x000400fau, 0x000018eeu, 0x000018f0u, 0x000018efu, 0x000200f8u, 0x000018f0u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000018efu, 0x00070041u, 0x000001f9u, 0x000018f2u, 0x000013bbu, 0x00000185u, 0x0000178cu, 0x000001ecu, 0x0004003du, 0x000001abu, 0x000018f3u, 0x000018f2u, 0x00040071u, 0x00000006u, 0x000018f4u, 0x000018f3u, 0x0003003eu, 0x000017f8u, 0x000018f4u, 0x0003003eu, 0x000017fau, 0x0000178cu, 0x00060041u, 0x0000018cu, 0x00001b88u, 0x0000018au, 0x00000185u, 0x0000178cu, 0x0004003du, 0x00000186u, 0x00001b89u, 0x00001b88u, 0x00050051u, 0x00000009u, 0x00001b8au, 0x00001b89u, 0x00000000u, 0x0003003eu, 0x00005d7eu, 0x00001b8au, 0x00050051u, 0x00000009u, 0x00001b8cu, 0x00001b89u, 0x00000001u, 0x0003003eu, 0x00005d7fu, 0x00001b8cu, 0x00050051u, 0x00000009u, 0x00001b8eu, 0x00001b89u, 0x00000002u, 0x0003003eu, 0x00005d80u, 0x00001b8eu, 0x00050051u, 0x00000009u, 0x00001b90u, 0x00001b89u, 0x00000003u, 0x0003003eu, 0x00005d81u, 0x00001b90u, 0x00050051u, 0x00000009u, 0x00001b92u, 0x00001b89u, 0x00000004u, 0x0003003eu, 0x00005d82u, 0x00001b92u, 0x00050051u, 0x00000009u, 0x00001b94u, 0x00001b89u, 0x00000005u, 0x0003003eu, 0x00005d83u, 0x00001b94u, 0x00050051u, 0x00000009u, 0x00001b96u, 0x00001b89u, 0x00000006u, 0x0003003eu, 0x00005d84u, 0x00001b96u, 0x00050051u, 0x00000009u, 0x00001b98u, 0x00001b89u, 0x00000007u, 0x0003003eu, 0x00005d85u, 0x00001b98u, 0x000b0050u, 0x0000000au, 0x00005d8eu, 0x00001b8au, 0x00001b8cu, 0x00001b8eu, 0x00001b90u, 0x00001b92u, 0x00001b94u, 0x00001b96u, 0x00001b98u, 0x0003003eu, 0x00005d8fu, 0x00001b8au, 0x0003003eu, 0x00005d90u, 0x00001b8cu, 0x0003003eu, 0x00005d91u, 0x00001b8eu, 0x0003003eu, 0x00005d92u, 0x00001b90u, 0x0003003eu, 0x00005d93u, 0x00001b92u, 0x0003003eu, 0x00005d94u, 0x00001b94u, 0x0003003eu, 0x00005d95u, 0x00001b96u, 0x0003003eu, 0x00005d96u, 0x00001b98u, 0x0003003eu, 0x00005dfcu, 0x00001b8cu, 0x0003003eu, 0x00005dfdu, 0x00001b90u, 0x0003003eu, 0x00005dfeu, 0x00001b94u, 0x0003003eu, 0x00005dffu, 0x00001b98u, 0x00070041u, 0x000001b6u, 0x000018f8u, 0x000013f4u, 0x00000185u, 0x0000178cu, 0x00000185u, 0x0004003du, 0x000001acu, 0x000018f9u, 0x000018f8u, 0x00040071u, 0x000001b9u, 0x000018fau, 0x000018f9u, 0x0003003eu, 0x000017fbu, 0x000018fau, 0x00050041u, 0x00000007u, 0x000018fbu, 0x000017fbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000018fcu, 0x000018fbu, 0x0003003eu, 0x000017fcu, 0x000018fcu, 0x00050041u, 0x00000007u, 0x000018fdu, 0x000017fbu, 0x0000032eu, 0x0004003du, 0x00000006u, 0x000018feu, 0x000018fdu, 0x0003003eu, 0x000017fdu, 0x000018feu, 0x0003003eu, 0x000017ffu, 0x000018fcu, 0x00070041u, 0x000001b6u, 0x00001b9du, 0x00000211u, 0x00000185u, 0x000018fcu, 0x00000185u, 0x0004003du, 0x000001acu, 0x00001b9eu, 0x00001b9du, 0x00040071u, 0x000001b9u, 0x00001b9fu, 0x00001b9eu, 0x0004007cu, 0x00000009u, 0x00001ba0u, 0x00001b9fu, 0x00070041u, 0x000001b6u, 0x00001ba2u, 0x00000211u, 0x00000185u, 0x000018fcu, 0x00000194u, 0x0004003du, 0x000001acu, 0x00001ba3u, 0x00001ba2u, 0x00040071u, 0x000001b9u, 0x00001ba4u, 0x00001ba3u, 0x0004007cu, 0x00000009u, 0x00001ba5u, 0x00001ba4u, 0x00070041u, 0x000001b6u, 0x00001ba7u, 0x00000211u, 0x00000185u, 0x000018fcu, 0x00000197u, 0x0004003du, 0x000001acu, 0x00001ba8u, 0x00001ba7u, 0x00040071u, 0x000001b9u, 0x00001ba9u, 0x00001ba8u, 0x0004007cu, 0x00000009u, 0x00001baau, 0x00001ba9u, 0x00070041u, 0x000001b6u, 0x00001bacu, 0x00000211u, 0x00000185u, 0x000018fcu, 0x0000019au, 0x0004003du, 0x000001acu, 0x00001badu, 0x00001bacu, 0x00040071u, 0x000001b9u, 0x00001baeu, 0x00001badu, 0x0004007cu, 0x00000009u, 0x00001bafu, 0x00001baeu, 0x00070041u, 0x000001edu, 0x00001bb1u, 0x00000211u, 0x00000185u, 0x000018fcu, 0x0000019du, 0x0004003du, 0x00000006u, 0x00001bb2u, 0x00001bb1u, 0x00070041u, 0x0000022au, 0x00001bb4u, 0x00000211u, 0x00000185u, 0x000018fcu, 0x000001a0u, 0x0004003du, 0x00000008u, 0x00001bb5u, 0x00001bb4u, 0x000b0050u, 0x00000014u, 0x00001bb6u, 0x00001ba0u, 0x00001ba5u, 0x00001baau, 0x00001bafu, 0x00001bb2u, 0x00001bb5u, 0x00000185u, 0x00000185u, 0x0003003eu, 0x00005d65u, 0x00001ba0u, 0x0003003eu, 0x00005d66u, 0x00001ba5u, 0x0003003eu, 0x00005d67u, 0x00001baau, 0x0003003eu, 0x00005d68u, 0x00001bafu, 0x0003003eu, 0x00005d69u, 0x00001bb2u, 0x0003003eu, 0x00005d6au, 0x00001bb5u, 0x0003003eu, 0x00005d6bu, 0x00000185u, 0x0003003eu, 0x00005d6cu, 0x00000185u, 0x0003003eu, 0x00005e04u, 0x00001ba0u, 0x0003003eu, 0x00005e05u, 0x00001ba5u, 0x0003003eu, 0x00005e06u, 0x00001baau, 0x0003003eu, 0x00005e07u, 0x00001bafu, 0x0003003eu, 0x00005e08u, 0x00001bb2u, 0x0003003eu, 0x00005e09u, 0x00001bb5u, 0x0003003eu, 0x00001800u, 0x00001bb2u, 0x0003003eu, 0x00001801u, 0x00001bb5u, 0x0003003eu, 0x00001802u, 0x00001ba0u, 0x0003003eu, 0x00001803u, 0x00001ba5u, 0x0003003eu, 0x00001804u, 0x00001baau, 0x0003003eu, 0x00001805u, 0x00001bafu, 0x000300f7u, 0x0000190du, 0x00000000u, 0x000400fau, 0x00001418u, 0x0000190eu, 0x0000190du, 0x000200f8u, 0x0000190eu, 0x0003003eu, 0x00001800u, 0x0000141bu, 0x0003003eu, 0x00001801u, 0x0000141eu, 0x00050041u, 0x00000038u, 0x0000190fu, 0x00001802u, 0x000002d7u, 0x0003003eu, 0x0000190fu, 0x00001421u, 0x00050041u, 0x00000038u, 0x00001910u, 0x00001802u, 0x0000032au, 0x0003003eu, 0x00001910u, 0x00001424u, 0x00050041u, 0x00000038u, 0x00001911u, 0x00001802u, 0x0000032eu, 0x0003003eu, 0x00001911u, 0x00001427u, 0x00050041u, 0x00000038u, 0x00001912u, 0x00001802u, 0x00000331u, 0x0003003eu, 0x00001912u, 0x0000142bu, 0x00050041u, 0x00000038u, 0x00001913u, 0x00001803u, 0x000002d7u, 0x0003003eu, 0x00001913u, 0x0000142fu, 0x00050041u, 0x00000038u, 0x00001914u, 0x00001803u, 0x0000032au, 0x0003003eu, 0x00001914u, 0x00001432u, 0x00050041u, 0x00000038u, 0x00001915u, 0x00001803u, 0x0000032eu, 0x0003003eu, 0x00001915u, 0x00001435u, 0x00050041u, 0x00000038u, 0x00001916u, 0x00001803u, 0x00000331u, 0x0003003eu, 0x00001916u, 0x00001438u, 0x00050041u, 0x00000038u, 0x00001917u, 0x00001804u, 0x000002d7u, 0x0003003eu, 0x00001917u, 0x0000143cu, 0x00050041u, 0x00000038u, 0x00001918u, 0x00001804u, 0x0000032au, 0x0003003eu, 0x00001918u, 0x0000143fu, 0x00050041u, 0x00000038u, 0x00001919u, 0x00001804u, 0x0000032eu, 0x0003003eu, 0x00001919u, 0x00001442u, 0x00050041u, 0x00000038u, 0x0000191au, 0x00001804u, 0x00000331u, 0x0003003eu, 0x0000191au, 0x00001445u, 0x00050041u, 0x00000038u, 0x0000191bu, 0x00001805u, 0x000002d7u, 0x0003003eu, 0x0000191bu, 0x00001449u, 0x00050041u, 0x00000038u, 0x0000191cu, 0x00001805u, 0x0000032au, 0x0003003eu, 0x0000191cu, 0x0000144cu, 0x00050041u, 0x00000038u, 0x0000191du, 0x00001805u, 0x0000032eu, 0x0003003eu, 0x0000191du, 0x0000144fu, 0x00050041u, 0x00000038u, 0x0000191eu, 0x00001805u, 0x00000331u, 0x0003003eu, 0x0000191eu, 0x00001452u, 0x000200f9u, 0x0000190du, 0x000200f8u, 0x0000190du, 0x000600a9u, 0x00000008u, 0x0000b1c9u, 0x00001418u, 0x0000141eu, 0x00001bb5u, 0x000600a9u, 0x00000006u, 0x0000b1cau, 0x00001418u, 0x0000141bu, 0x00001bb2u, 0x000500c7u, 0x00000006u, 0x00001920u, 0x0000b1cau, 0x000002dau, 0x000500abu, 0x00000058u, 0x00001921u, 0x00001920u, 0x000002d7u, 0x0003003eu, 0x00001806u, 0x00001921u, 0x000500c7u, 0x00000006u, 0x00001923u, 0x0000b1cau, 0x000013c4u, 0x000500abu, 0x00000058u, 0x00001924u, 0x00001923u, 0x000002d7u, 0x0003003eu, 0x00001807u, 0x00001924u, 0x000500c7u, 0x00000006u, 0x00001926u, 0x0000b1cau, 0x0000145eu, 0x000500abu, 0x00000058u, 0x00001927u, 0x00001926u, 0x000002d7u, 0x0003003eu, 0x00001808u, 0x00001927u, 0x000500c7u, 0x00000006u, 0x00001929u, 0x0000b1cau, 0x0000037bu, 0x000500abu, 0x00000058u, 0x0000192au, 0x00001929u, 0x000002d7u, 0x0003003eu, 0x00001809u, 0x0000192au, 0x000500c7u, 0x00000006u, 0x0000192cu, 0x0000b1cau, 0x00001467u, 0x000500abu, 0x00000058u, 0x0000192du, 0x0000192cu, 0x000002d7u, 0x0003003eu, 0x0000180au, 0x0000192du, 0x000500c7u, 0x00000006u, 0x0000192fu, 0x0000b1cau, 0x000002beu, 0x000500abu, 0x00000058u, 0x00001930u, 0x0000192fu, 0x000002d7u, 0x0003003eu, 0x0000180bu, 0x00001930u, 0x000500c7u, 0x00000006u, 0x00001932u, 0x0000b1cau, 0x00001470u, 0x000500abu, 0x00000058u, 0x00001933u, 0x00001932u, 0x000002d7u, 0x0003003eu, 0x0000180cu, 0x00001933u, 0x000500c7u, 0x00000006u, 0x00001935u, 0x0000b1cau, 0x00000798u, 0x000500abu, 0x00000058u, 0x00001936u, 0x00001935u, 0x000002d7u, 0x0003003eu, 0x0000180du, 0x00001936u, 0x000500c7u, 0x00000006u, 0x00001938u, 0x0000b1cau, 0x00000790u, 0x000500abu, 0x00000058u, 0x00001939u, 0x00001938u, 0x000002d7u, 0x0003003eu, 0x0000180eu, 0x00001939u, 0x000500c7u, 0x00000006u, 0x0000193bu, 0x0000b1cau, 0x000006bcu, 0x000500abu, 0x00000058u, 0x0000193cu, 0x0000193bu, 0x000002d7u, 0x0003003eu, 0x0000180fu, 0x0000193cu, 0x000500c7u, 0x00000006u, 0x0000193eu, 0x0000b1cau, 0x00001481u, 0x000500abu, 0x00000058u, 0x0000193fu, 0x0000193eu, 0x000002d7u, 0x0003003eu, 0x00001810u, 0x0000193fu, 0x000500c7u, 0x00000006u, 0x00001941u, 0x0000b1cau, 0x0000032au, 0x000500abu, 0x00000058u, 0x00001942u, 0x00001941u, 0x000002d7u, 0x0003003eu, 0x00001811u, 0x00001942u, 0x000500c7u, 0x00000006u, 0x00001944u, 0x0000b1cau, 0x000006c9u, 0x000500abu, 0x00000058u, 0x00001945u, 0x00001944u, 0x000002d7u, 0x0003003eu, 0x00001812u, 0x00001945u, 0x000500c7u, 0x00000006u, 0x00001947u, 0x0000b1cau, 0x0000148eu, 0x000500abu, 0x00000058u, 0x00001948u, 0x00001947u, 0x000002d7u, 0x0003003eu, 0x00001813u, 0x00001948u, 0x000500c7u, 0x00000006u, 0x0000194au, 0x0000b1cau, 0x00001493u, 0x000500abu, 0x00000058u, 0x0000194bu, 0x0000194au, 0x000002d7u, 0x0003003eu, 0x00001814u, 0x0000194bu, 0x000500c7u, 0x00000006u, 0x0000194du, 0x0000b1cau, 0x00001498u, 0x000500abu, 0x00000058u, 0x0000194eu, 0x0000194du, 0x000002d7u, 0x0003003eu, 0x00001815u, 0x0000194eu, 0x000500c7u, 0x00000006u, 0x00001950u, 0x0000b1cau, 0x0000149du, 0x000500abu, 0x00000058u, 0x00001951u, 0x00001950u, 0x000002d7u, 0x0003003eu, 0x00001816u, 0x00001951u, 0x000500c7u, 0x00000006u, 0x00001953u, 0x0000b1cau, 0x000014a2u, 0x000500abu, 0x00000058u, 0x00001954u, 0x00001953u, 0x000002d7u, 0x0003003eu, 0x00001817u, 0x00001954u, 0x000500c7u, 0x00000006u, 0x00001956u, 0x0000b1cau, 0x000014a7u, 0x000500abu, 0x00000058u, 0x00001957u, 0x00001956u, 0x000002d7u, 0x0003003eu, 0x00001818u, 0x00001957u, 0x000500c7u, 0x00000006u, 0x00001959u, 0x0000b1cau, 0x000014acu, 0x000500abu, 0x00000058u, 0x0000195au, 0x00001959u, 0x000002d7u, 0x0003003eu, 0x00001819u, 0x0000195au, 0x000500c7u, 0x00000006u, 0x0000195cu, 0x0000b1cau, 0x000014b1u, 0x000500abu, 0x00000058u, 0x0000195du, 0x0000195cu, 0x000002d7u, 0x0003003eu, 0x0000181au, 0x0000195du, 0x000500c7u, 0x00000006u, 0x0000195fu, 0x0000b1cau, 0x000014b6u, 0x000500abu, 0x00000058u, 0x00001960u, 0x0000195fu, 0x000002d7u, 0x0003003eu, 0x0000181bu, 0x00001960u, 0x000500c7u, 0x00000006u, 0x00001962u, 0x0000b1cau, 0x000014bbu, 0x000500abu, 0x00000058u, 0x00001963u, 0x00001962u, 0x000002d7u, 0x0003003eu, 0x0000181cu, 0x00001963u, 0x000500c7u, 0x00000006u, 0x00001965u, 0x0000b1cau, 0x000014c0u, 0x000500abu, 0x00000058u, 0x00001966u, 0x00001965u, 0x000002d7u, 0x0003003eu, 0x0000181du, 0x00001966u, 0x000500c7u, 0x00000006u, 0x00001968u, 0x0000b1cau, 0x000014c4u, 0x000500abu, 0x00000058u, 0x00001969u, 0x00001968u, 0x000002d7u, 0x000300f7u, 0x0000196au, 0x00000000u, 0x000400fau, 0x00001969u, 0x0000196bu, 0x0000196au, 0x000200f8u, 0x0000196bu, 0x0004007cu, 0x00000006u, 0x0000196du, 0x00006a56u, 0x0004007cu, 0x00000006u, 0x0000196fu, 0x00006a4du, 0x00060041u, 0x000014ceu, 0x00001971u, 0x00000527u, 0x00000185u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00001972u, 0x00001971u, 0x00050080u, 0x00000006u, 0x00001973u, 0x0000178cu, 0x00001972u, 0x0003003eu, 0x0000181eu, 0x0000196du, 0x0003003eu, 0x0000181fu, 0x0000196fu, 0x0003003eu, 0x00001820u, 0x00001973u, 0x00060050u, 0x000002b6u, 0x00001bbbu, 0x0000196du, 0x0000196fu, 0x00001973u, 0x0003003eu, 0x00001bb7u, 0x00001bbbu, 0x0004003du, 0x000002b6u, 0x00001bbcu, 0x00001bb7u, 0x000500c2u, 0x000002b6u, 0x00001bbeu, 0x00001bbcu, 0x0000b1b3u, 0x0004003du, 0x000002b6u, 0x00001bbfu, 0x00001bb7u, 0x0008004fu, 0x000002b6u, 0x00001bc0u, 0x00001bbfu, 0x00001bbfu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x000002b6u, 0x00001bc1u, 0x00001bbeu, 0x00001bc0u, 0x00050084u, 0x000002b6u, 0x00001bc3u, 0x00001bc1u, 0x0000b1b4u, 0x0003003eu, 0x00001bb7u, 0x00001bc3u, 0x0004003du, 0x000002b6u, 0x00001bc4u, 0x00001bb7u, 0x000500c2u, 0x000002b6u, 0x00001bc6u, 0x00001bc4u, 0x0000b1b3u, 0x0004003du, 0x000002b6u, 0x00001bc7u, 0x00001bb7u, 0x0008004fu, 0x000002b6u, 0x00001bc8u, 0x00001bc7u, 0x00001bc7u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x000002b6u, 0x00001bc9u, 0x00001bc6u, 0x00001bc8u, 0x00050084u, 0x000002b6u, 0x00001bcbu, 0x00001bc9u, 0x0000b1b4u, 0x0003003eu, 0x00001bb7u, 0x00001bcbu, 0x0004003du, 0x000002b6u, 0x00001bccu, 0x00001bb7u, 0x000500c2u, 0x000002b6u, 0x00001bceu, 0x00001bccu, 0x0000b1b3u, 0x0004003du, 0x000002b6u, 0x00001bcfu, 0x00001bb7u, 0x0008004fu, 0x000002b6u, 0x00001bd0u, 0x00001bcfu, 0x00001bcfu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x000002b6u, 0x00001bd1u, 0x00001bceu, 0x00001bd0u, 0x00050084u, 0x000002b6u, 0x00001bd3u, 0x00001bd1u, 0x0000b1b4u, 0x0003003eu, 0x00001bb7u, 0x00001bd3u, 0x00050041u, 0x00000007u, 0x00001bd4u, 0x00001bb7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001bd5u, 0x00001bd4u, 0x000500c2u, 0x00000006u, 0x00001bd6u, 0x00001bd5u, 0x000002dau, 0x0004007cu, 0x00000008u, 0x00001bd7u, 0x00001bd6u, 0x0003003eu, 0x00000184u, 0x00001bd7u, 0x000200f9u, 0x0000196au, 0x000200f8u, 0x0000196au, 0x000500c7u, 0x00000006u, 0x00001976u, 0x000018d5u, 0x0000032au, 0x000500abu, 0x00000058u, 0x00001977u, 0x00001976u, 0x000002d7u, 0x0003003eu, 0x00001821u, 0x00001977u, 0x000300f7u, 0x00001979u, 0x00000000u, 0x000400fau, 0x00001948u, 0x0000197au, 0x0000197bu, 0x000200f8u, 0x0000197bu, 0x000300f7u, 0x000019bbu, 0x00000000u, 0x000400fau, 0x00001945u, 0x000019bcu, 0x000019bbu, 0x000200f8u, 0x000019bcu, 0x0003003eu, 0x0000690fu, 0x00000322u, 0x000500afu, 0x00000058u, 0x000019c1u, 0x00006a56u, 0x00001b77u, 0x000300f7u, 0x000019c2u, 0x00000000u, 0x000400fau, 0x000019c1u, 0x000019c3u, 0x000019c2u, 0x000200f8u, 0x000019c3u, 0x000500b3u, 0x00000058u, 0x000019c7u, 0x00006a56u, 0x00001b7au, 0x000200f9u, 0x000019c2u, 0x000200f8u, 0x000019c2u, 0x000700f5u, 0x00000058u, 0x000019c8u, 0x000019c1u, 0x000019bcu, 0x000019c7u, 0x000019c3u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x000019c8u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000019bbu, 0x000200f9u, 0x00001979u, 0x000200f8u, 0x0000197au, 0x000500afu, 0x00000058u, 0x0000197fu, 0x00006a56u, 0x00001b77u, 0x000300f7u, 0x00001980u, 0x00000000u, 0x000400fau, 0x0000197fu, 0x00001981u, 0x00001980u, 0x000200f8u, 0x00001981u, 0x000500b3u, 0x00000058u, 0x00001985u, 0x00006a56u, 0x00001b7au, 0x000200f9u, 0x00001980u, 0x000200f8u, 0x00001980u, 0x000700f5u, 0x00000058u, 0x00001986u, 0x0000197fu, 0x0000197au, 0x00001985u, 0x00001981u, 0x0003003eu, 0x00001822u, 0x00001986u, 0x000400a8u, 0x00000058u, 0x00001988u, 0x00001986u, 0x000300f7u, 0x00001989u, 0x00000000u, 0x000400fau, 0x00001988u, 0x0000198au, 0x00001989u, 0x000200f8u, 0x0000198au, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x00001989u, 0x0003003eu, 0x00005e10u, 0x00001b67u, 0x0003003eu, 0x00005e11u, 0x00001b77u, 0x0003003eu, 0x00005e12u, 0x00001b7au, 0x0003003eu, 0x00001826u, 0x00001b94u, 0x0003003eu, 0x00001827u, 0x00006a56u, 0x0003003eu, 0x00001828u, 0x00001930u, 0x0003003eu, 0x00001829u, 0x00001977u, 0x000300f7u, 0x00001be2u, 0x00000000u, 0x000400fau, 0x00001977u, 0x00001be3u, 0x00001be4u, 0x000200f8u, 0x00001be4u, 0x00050082u, 0x00000008u, 0x00001becu, 0x00001b7au, 0x00006a56u, 0x0003003eu, 0x00001bd9u, 0x00001becu, 0x000200f9u, 0x00001be2u, 0x000200f8u, 0x00001be3u, 0x00050082u, 0x00000008u, 0x00001be8u, 0x00006a56u, 0x00001b77u, 0x0003003eu, 0x00001bd9u, 0x00001be8u, 0x000200f9u, 0x00001be2u, 0x000200f8u, 0x00001be2u, 0x000700f5u, 0x00000008u, 0x0000a522u, 0x00001be8u, 0x00001be3u, 0x00001becu, 0x00001be4u, 0x0003003eu, 0x00001bd8u, 0x0000a522u, 0x000500c3u, 0x00000008u, 0x00001befu, 0x0000a522u, 0x000004cdu, 0x0003003eu, 0x00001bd8u, 0x00001befu, 0x00060041u, 0x00000528u, 0x00001bf1u, 0x00000527u, 0x00000185u, 0x00000194u, 0x0004003du, 0x00000008u, 0x00001bf2u, 0x00001bf1u, 0x000500c7u, 0x00000008u, 0x00001bf3u, 0x00001befu, 0x00001bf2u, 0x0003003eu, 0x00001bdau, 0x00001bf3u, 0x00050082u, 0x00000008u, 0x00001bf6u, 0x00001befu, 0x00001bf3u, 0x0003003eu, 0x0000182bu, 0x00001bf6u, 0x00060041u, 0x00000528u, 0x00001bf8u, 0x00000527u, 0x00000185u, 0x00000185u, 0x0004003du, 0x00000008u, 0x00001bf9u, 0x00001bf8u, 0x000500c3u, 0x00000008u, 0x00001bfau, 0x00001befu, 0x00001bf9u, 0x000600a9u, 0x00000008u, 0x00001bfcu, 0x00001977u, 0x00000194u, 0x00000535u, 0x00050084u, 0x00000008u, 0x00001bfdu, 0x00001bfau, 0x00001bfcu, 0x0003003eu, 0x00001bdbu, 0x00001bfdu, 0x0008004fu, 0x00000052u, 0x00001c00u, 0x00001b67u, 0x00001b67u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x00000052u, 0x00001c02u, 0x00001b94u, 0x00001b94u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x00001c04u, 0x00001c02u, 0x0000b1b5u, 0x00060050u, 0x00000052u, 0x00001c06u, 0x00001bfdu, 0x00001bfdu, 0x00001bfdu, 0x00050084u, 0x00000052u, 0x00001c07u, 0x00001c04u, 0x00001c06u, 0x00050080u, 0x00000052u, 0x00001c08u, 0x00001c00u, 0x00001c07u, 0x0003003eu, 0x00001bdcu, 0x00001c08u, 0x000300f7u, 0x00001c0au, 0x00000000u, 0x000400fau, 0x00001930u, 0x00001c0bu, 0x00001c0cu, 0x000200f8u, 0x00001c0cu, 0x000500c3u, 0x00000052u, 0x00001c15u, 0x00001c08u, 0x0000b1b6u, 0x0003003eu, 0x00001be0u, 0x00001c15u, 0x0007004fu, 0x0000004du, 0x00001c9fu, 0x00001c15u, 0x00001c15u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001c9du, 0x00001c9fu, 0x0003003eu, 0x0000182au, 0x00001c9fu, 0x000200f9u, 0x00001c0au, 0x000200f8u, 0x00001c0bu, 0x000500c3u, 0x00000052u, 0x00001c0fu, 0x00001c08u, 0x0000b1b6u, 0x0003003eu, 0x00001bdeu, 0x00001c0fu, 0x00050041u, 0x00000038u, 0x00001c21u, 0x00001bdeu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001c22u, 0x00001c21u, 0x0003003eu, 0x00001c17u, 0x00001c22u, 0x000500b3u, 0x00000058u, 0x00001c24u, 0x00001c22u, 0x00000185u, 0x0003003eu, 0x00001c18u, 0x00001c24u, 0x000500c7u, 0x00000008u, 0x00001c26u, 0x00001c22u, 0x0000045cu, 0x0003003eu, 0x00001c17u, 0x00001c26u, 0x0003003eu, 0x00001c1au, 0x00001c26u, 0x0006000cu, 0x00000008u, 0x00001c82u, 0x00000001u, 0x0000004au, 0x00001c26u, 0x00050082u, 0x00000008u, 0x00001c83u, 0x00000205u, 0x00001c82u, 0x0007000cu, 0x00000008u, 0x00001c84u, 0x00000001u, 0x00000027u, 0x00001c83u, 0x00000205u, 0x0003003eu, 0x00001c7au, 0x00001c84u, 0x000500c4u, 0x00000008u, 0x00001c87u, 0x00001c26u, 0x00001c84u, 0x000500c7u, 0x00000008u, 0x00001c88u, 0x00001c87u, 0x00000375u, 0x0003003eu, 0x00001c7bu, 0x00001c88u, 0x000500c7u, 0x00000008u, 0x00001c8au, 0x00001c88u, 0x000002eeu, 0x0003003eu, 0x00001c7cu, 0x00001c8au, 0x000500c3u, 0x00000008u, 0x00001c8cu, 0x00001c88u, 0x000001e0u, 0x0003003eu, 0x00001c7eu, 0x0000043au, 0x00050041u, 0x00000068u, 0x00001c8du, 0x00001c7eu, 0x00001c8cu, 0x0004003du, 0x0000004du, 0x00001c8eu, 0x00001c8du, 0x00050051u, 0x00000008u, 0x00001c8fu, 0x00001c8eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001c90u, 0x00001c8eu, 0x00000001u, 0x0003003eu, 0x00001c7du, 0x00001c8eu, 0x00050041u, 0x00000038u, 0x00001c92u, 0x00001c7du, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001c93u, 0x00001c92u, 0x00050084u, 0x00000008u, 0x00001c95u, 0x00001c93u, 0x00001c8au, 0x000500c3u, 0x00000008u, 0x00001c96u, 0x00001c95u, 0x000001ecu, 0x00050041u, 0x00000038u, 0x00001c97u, 0x00001c7du, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001c98u, 0x00001c97u, 0x00050080u, 0x00000008u, 0x00001c99u, 0x00001c96u, 0x00001c98u, 0x0003003eu, 0x00001c7fu, 0x00001c99u, 0x00050050u, 0x0000004du, 0x00001c9cu, 0x00001c99u, 0x00001c84u, 0x0003003eu, 0x00001c80u, 0x00001c9cu, 0x0003003eu, 0x00001c19u, 0x00001c9cu, 0x00050041u, 0x00000038u, 0x00001c29u, 0x00001c19u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001c2au, 0x00001c29u, 0x0003003eu, 0x00001c1bu, 0x00001c2au, 0x0004003du, 0x00000052u, 0x00001c2bu, 0x00001bdeu, 0x0007004fu, 0x0000004du, 0x00001c2cu, 0x00001c2bu, 0x00001c2bu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x00001c2du, 0x00001c19u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001c2eu, 0x00001c2du, 0x00050050u, 0x0000004du, 0x00001c2fu, 0x00001c2eu, 0x00001c2eu, 0x00050084u, 0x0000004du, 0x00001c30u, 0x00001c2cu, 0x00001c2fu, 0x0003003eu, 0x00001c1cu, 0x00001c30u, 0x000500c3u, 0x00000008u, 0x00001c32u, 0x0000046fu, 0x00001c2au, 0x0004007eu, 0x00000008u, 0x00001c33u, 0x00001c32u, 0x000500c7u, 0x00000008u, 0x00001c34u, 0x0000046eu, 0x00001c33u, 0x0003003eu, 0x00001c1du, 0x00001c34u, 0x0004003du, 0x0000004du, 0x00001c35u, 0x00001c1cu, 0x00050050u, 0x0000004du, 0x00001c37u, 0x00001c34u, 0x00001c34u, 0x000500c7u, 0x0000004du, 0x00001c38u, 0x00001c35u, 0x00001c37u, 0x0003003eu, 0x00001c1eu, 0x00001c38u, 0x000500abu, 0x00000058u, 0x00001c3au, 0x00001c2au, 0x00000205u, 0x000300f7u, 0x00001c3bu, 0x00000000u, 0x000400fau, 0x00001c3au, 0x00001c3cu, 0x00001c3du, 0x000200f8u, 0x00001c3du, 0x0004003du, 0x0000004du, 0x00001c43u, 0x00001c1cu, 0x000500c4u, 0x0000004du, 0x00001c45u, 0x00001c43u, 0x0000b1bau, 0x0003003eu, 0x00001c1fu, 0x00001c45u, 0x000200f9u, 0x00001c3bu, 0x000200f8u, 0x00001c3cu, 0x0004003du, 0x0000004du, 0x00001c3eu, 0x00001c1cu, 0x00050082u, 0x00000008u, 0x00001c40u, 0x000001ffu, 0x00001c2au, 0x00050050u, 0x0000004du, 0x00001c41u, 0x00001c40u, 0x00001c40u, 0x000500c3u, 0x0000004du, 0x00001c42u, 0x00001c3eu, 0x00001c41u, 0x0003003eu, 0x00001c1cu, 0x00001c42u, 0x0003003eu, 0x00001c1fu, 0x00001c42u, 0x000200f9u, 0x00001c3bu, 0x000200f8u, 0x00001c3bu, 0x0004003du, 0x0000004du, 0x00001c46u, 0x00001c1eu, 0x000500abu, 0x00000489u, 0x00001c47u, 0x00001c46u, 0x00000488u, 0x0004009au, 0x00000058u, 0x00001c48u, 0x00001c47u, 0x000300f7u, 0x00001c49u, 0x00000000u, 0x000400fau, 0x00001c48u, 0x00001c4au, 0x00001c49u, 0x000200f8u, 0x00001c4au, 0x00050041u, 0x00000038u, 0x00001c4bu, 0x00001c1eu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001c4cu, 0x00001c4bu, 0x000500abu, 0x00000058u, 0x00001c4eu, 0x00001c4cu, 0x00001c34u, 0x000300f7u, 0x00001c4fu, 0x00000000u, 0x000400fau, 0x00001c4eu, 0x00001c50u, 0x00001c4fu, 0x000200f8u, 0x00001c50u, 0x0004003du, 0x00000008u, 0x00001c52u, 0x00001c4bu, 0x000500abu, 0x00000058u, 0x00001c53u, 0x00001c52u, 0x00000185u, 0x000200f9u, 0x00001c4fu, 0x000200f8u, 0x00001c4fu, 0x000700f5u, 0x00000058u, 0x00001c54u, 0x00001c4eu, 0x00001c4au, 0x00001c53u, 0x00001c50u, 0x000300f7u, 0x00001c55u, 0x00000000u, 0x000400fau, 0x00001c54u, 0x00001c56u, 0x00001c55u, 0x000200f8u, 0x00001c56u, 0x00050041u, 0x00000038u, 0x00001c57u, 0x00001c1cu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001c58u, 0x00001c57u, 0x000500c7u, 0x00000008u, 0x00001c59u, 0x00001c58u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00001c5au, 0x00001c59u, 0x00000185u, 0x000300f7u, 0x00001c5bu, 0x00000000u, 0x000400fau, 0x00001c5au, 0x00001c5cu, 0x00001c5du, 0x000200f8u, 0x00001c5du, 0x00050041u, 0x00000038u, 0x00001c5fu, 0x00001c1fu, 0x000002d7u, 0x0003003eu, 0x00001c5fu, 0x000004a2u, 0x000200f9u, 0x00001c5bu, 0x000200f8u, 0x00001c5cu, 0x00050041u, 0x00000038u, 0x00001c5eu, 0x00001c1fu, 0x000002d7u, 0x0003003eu, 0x00001c5eu, 0x0000045cu, 0x000200f9u, 0x00001c5bu, 0x000200f8u, 0x00001c5bu, 0x0003003eu, 0x00001bdfu, 0x000004a4u, 0x000200f9u, 0x00001c55u, 0x000200f8u, 0x00001c55u, 0x000600a9u, 0x00000058u, 0x0000b1cbu, 0x00001c54u, 0x000004a4u, 0x00007db7u, 0x00050041u, 0x00000038u, 0x00001c60u, 0x00001c1eu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001c61u, 0x00001c60u, 0x000500abu, 0x00000058u, 0x00001c63u, 0x00001c61u, 0x00001c34u, 0x000300f7u, 0x00001c64u, 0x00000000u, 0x000400fau, 0x00001c63u, 0x00001c65u, 0x00001c64u, 0x000200f8u, 0x00001c65u, 0x0004003du, 0x00000008u, 0x00001c67u, 0x00001c60u, 0x000500abu, 0x00000058u, 0x00001c68u, 0x00001c67u, 0x00000185u, 0x000200f9u, 0x00001c64u, 0x000200f8u, 0x00001c64u, 0x000700f5u, 0x00000058u, 0x00001c69u, 0x00001c63u, 0x00001c55u, 0x00001c68u, 0x00001c65u, 0x000300f7u, 0x00001c6au, 0x00000000u, 0x000400fau, 0x00001c69u, 0x00001c6bu, 0x00001c6au, 0x000200f8u, 0x00001c6bu, 0x00050041u, 0x00000038u, 0x00001c6cu, 0x00001c1cu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001c6du, 0x00001c6cu, 0x000500c7u, 0x00000008u, 0x00001c6eu, 0x00001c6du, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00001c6fu, 0x00001c6eu, 0x00000185u, 0x000300f7u, 0x00001c70u, 0x00000000u, 0x000400fau, 0x00001c6fu, 0x00001c71u, 0x00001c72u, 0x000200f8u, 0x00001c72u, 0x00050041u, 0x00000038u, 0x00001c74u, 0x00001c1fu, 0x0000032au, 0x0003003eu, 0x00001c74u, 0x000004a2u, 0x000200f9u, 0x00001c70u, 0x000200f8u, 0x00001c71u, 0x00050041u, 0x00000038u, 0x00001c73u, 0x00001c1fu, 0x0000032au, 0x0003003eu, 0x00001c73u, 0x0000045cu, 0x000200f9u, 0x00001c70u, 0x000200f8u, 0x00001c70u, 0x0003003eu, 0x00001bdfu, 0x000004a4u, 0x000200f9u, 0x00001c6au, 0x000200f8u, 0x00001c6au, 0x000600a9u, 0x00000058u, 0x0000b1ccu, 0x00001c69u, 0x000004a4u, 0x0000b1cbu, 0x000200f9u, 0x00001c49u, 0x000200f8u, 0x00001c49u, 0x000700f5u, 0x00000058u, 0x0000a53bu, 0x00007db7u, 0x00001c3bu, 0x0000b1ccu, 0x00001c6au, 0x000300f7u, 0x00001c76u, 0x00000000u, 0x000400fau, 0x00001c24u, 0x00001c77u, 0x00001c76u, 0x000200f8u, 0x00001c77u, 0x0003003eu, 0x00001c1fu, 0x000004bdu, 0x0003003eu, 0x00001bdfu, 0x000004a4u, 0x000200f9u, 0x00001c76u, 0x000200f8u, 0x00001c76u, 0x000600a9u, 0x00000058u, 0x0000b1cdu, 0x00001c24u, 0x000004a4u, 0x0000a53bu, 0x0004003du, 0x0000004du, 0x00001c78u, 0x00001c1fu, 0x0008000cu, 0x0000004du, 0x00001c79u, 0x00000001u, 0x0000002du, 0x00001c78u, 0x000004c0u, 0x000004c2u, 0x0003003eu, 0x00001c20u, 0x00001c79u, 0x0003003eu, 0x00001bddu, 0x0000b1cdu, 0x0003003eu, 0x0000182au, 0x00001c79u, 0x000200f9u, 0x00001c0au, 0x000200f8u, 0x00001c0au, 0x000700f5u, 0x0000004du, 0x0000a541u, 0x00001c79u, 0x00001c76u, 0x00001c9fu, 0x00001c0cu, 0x0003003eu, 0x00001823u, 0x0000a541u, 0x0003003eu, 0x00001824u, 0x00001bf6u, 0x000500c7u, 0x00000006u, 0x00001995u, 0x000018f4u, 0x000010eeu, 0x0003003eu, 0x0000182cu, 0x00001995u, 0x00080041u, 0x000001f9u, 0x00001998u, 0x000013f4u, 0x00000185u, 0x0000178cu, 0x00000197u, 0x00001995u, 0x0004003du, 0x000001abu, 0x00001999u, 0x00001998u, 0x00040071u, 0x00000006u, 0x0000199au, 0x00001999u, 0x0003003eu, 0x0000182du, 0x0000199au, 0x0003003eu, 0x0000182fu, 0x0000199au, 0x00070041u, 0x000001edu, 0x00001ca2u, 0x00000278u, 0x00000185u, 0x0000199au, 0x00000185u, 0x0004003du, 0x00000006u, 0x00001ca3u, 0x00001ca2u, 0x00070041u, 0x000001edu, 0x00001ca5u, 0x00000278u, 0x00000185u, 0x0000199au, 0x00000194u, 0x0004003du, 0x00000006u, 0x00001ca6u, 0x00001ca5u, 0x00070041u, 0x000001edu, 0x00001ca8u, 0x00000278u, 0x00000185u, 0x0000199au, 0x00000197u, 0x0004003du, 0x00000006u, 0x00001ca9u, 0x00001ca8u, 0x00070041u, 0x000001edu, 0x00001cabu, 0x00000278u, 0x00000185u, 0x0000199au, 0x0000019au, 0x0004003du, 0x00000006u, 0x00001cacu, 0x00001cabu, 0x00070041u, 0x000001edu, 0x00001caeu, 0x00000278u, 0x00000185u, 0x0000199au, 0x0000019du, 0x0004003du, 0x00000006u, 0x00001cafu, 0x00001caeu, 0x00070041u, 0x000001edu, 0x00001cb1u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00001cb2u, 0x00001cb1u, 0x00070041u, 0x000001f9u, 0x00001cb4u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001a3u, 0x0004003du, 0x000001abu, 0x00001cb5u, 0x00001cb4u, 0x00040071u, 0x00000006u, 0x00001cb6u, 0x00001cb5u, 0x0004007cu, 0x00000008u, 0x00001cb7u, 0x00001cb6u, 0x00070041u, 0x000001f9u, 0x00001cb9u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001a6u, 0x0004003du, 0x000001abu, 0x00001cbau, 0x00001cb9u, 0x00040071u, 0x00000006u, 0x00001cbbu, 0x00001cbau, 0x0004007cu, 0x00000008u, 0x00001cbcu, 0x00001cbbu, 0x00070041u, 0x000001f9u, 0x00001cbeu, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001e0u, 0x0004003du, 0x000001abu, 0x00001cbfu, 0x00001cbeu, 0x00040071u, 0x00000006u, 0x00001cc0u, 0x00001cbfu, 0x0004007cu, 0x00000008u, 0x00001cc1u, 0x00001cc0u, 0x00070041u, 0x000001f9u, 0x00001cc3u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001e6u, 0x0004003du, 0x000001abu, 0x00001cc4u, 0x00001cc3u, 0x00040071u, 0x00000006u, 0x00001cc5u, 0x00001cc4u, 0x0004007cu, 0x00000008u, 0x00001cc6u, 0x00001cc5u, 0x00070041u, 0x000001f9u, 0x00001cc8u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001ecu, 0x0004003du, 0x000001abu, 0x00001cc9u, 0x00001cc8u, 0x00040071u, 0x00000006u, 0x00001ccau, 0x00001cc9u, 0x0004007cu, 0x00000008u, 0x00001ccbu, 0x00001ccau, 0x00070041u, 0x000001f9u, 0x00001ccdu, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001f1u, 0x0004003du, 0x000001abu, 0x00001cceu, 0x00001ccdu, 0x00040071u, 0x00000006u, 0x00001ccfu, 0x00001cceu, 0x0004007cu, 0x00000008u, 0x00001cd0u, 0x00001ccfu, 0x00070041u, 0x000001f9u, 0x00001cd2u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001f8u, 0x0004003du, 0x000001abu, 0x00001cd3u, 0x00001cd2u, 0x00040071u, 0x00000006u, 0x00001cd4u, 0x00001cd3u, 0x0004007cu, 0x00000008u, 0x00001cd5u, 0x00001cd4u, 0x00070041u, 0x000001f9u, 0x00001cd7u, 0x00000278u, 0x00000185u, 0x0000199au, 0x000001ffu, 0x0004003du, 0x000001abu, 0x00001cd8u, 0x00001cd7u, 0x00040071u, 0x00000006u, 0x00001cd9u, 0x00001cd8u, 0x0004007cu, 0x00000008u, 0x00001cdau, 0x00001cd9u, 0x00110050u, 0x00000023u, 0x00001cdbu, 0x00001ca3u, 0x00001ca6u, 0x00001ca9u, 0x00001cacu, 0x00001cafu, 0x00001cb2u, 0x00001cb7u, 0x00001cbcu, 0x00001cc1u, 0x00001cc6u, 0x00001ccbu, 0x00001cd0u, 0x00001cd5u, 0x00001cdau, 0x0003003eu, 0x00005d3au, 0x00001ca3u, 0x0003003eu, 0x00005d3bu, 0x00001ca6u, 0x0003003eu, 0x00005d3cu, 0x00001ca9u, 0x0003003eu, 0x00005d3du, 0x00001cacu, 0x0003003eu, 0x00005d3eu, 0x00001cafu, 0x0003003eu, 0x00005d3fu, 0x00001cb2u, 0x0003003eu, 0x00005d40u, 0x00001cb7u, 0x0003003eu, 0x00005d41u, 0x00001cbcu, 0x0003003eu, 0x00005d42u, 0x00001cc1u, 0x0003003eu, 0x00005d43u, 0x00001cc6u, 0x0003003eu, 0x00005d44u, 0x00001ccbu, 0x0003003eu, 0x00005d45u, 0x00001cd0u, 0x0003003eu, 0x00005d46u, 0x00001cd5u, 0x0003003eu, 0x00005d47u, 0x00001cdau, 0x0003003eu, 0x00005e16u, 0x00001ca3u, 0x0003003eu, 0x00005e17u, 0x00001ca6u, 0x0003003eu, 0x00005e18u, 0x00001ca9u, 0x0003003eu, 0x00005e19u, 0x00001cacu, 0x0003003eu, 0x00005e1au, 0x00001cafu, 0x0003003eu, 0x00005e1bu, 0x00001cb2u, 0x0003003eu, 0x00005e1cu, 0x00001cb7u, 0x0003003eu, 0x00005e1du, 0x00001cbcu, 0x0003003eu, 0x00005e1eu, 0x00001cc1u, 0x0003003eu, 0x00005e1fu, 0x00001cc6u, 0x0003003eu, 0x00005e20u, 0x00001ccbu, 0x0003003eu, 0x00005e21u, 0x00001cd0u, 0x0003003eu, 0x00005e22u, 0x00001cd5u, 0x0003003eu, 0x00005e23u, 0x00001cdau, 0x000300f7u, 0x0000199du, 0x00000000u, 0x000400fau, 0x0000150eu, 0x0000199eu, 0x0000199du, 0x000200f8u, 0x0000199eu, 0x0003003eu, 0x00005e1cu, 0x00001512u, 0x0003003eu, 0x00005e1du, 0x00001515u, 0x000200f9u, 0x0000199du, 0x000200f8u, 0x0000199du, 0x000600a9u, 0x00000008u, 0x0000b1ceu, 0x0000150eu, 0x00001512u, 0x00001cb7u, 0x000600a9u, 0x00000008u, 0x0000b1cfu, 0x0000150eu, 0x00001515u, 0x00001cbcu, 0x00110050u, 0x00000023u, 0x00005e40u, 0x00001ca3u, 0x00001ca6u, 0x00001ca9u, 0x00001cacu, 0x00001cafu, 0x00001cb2u, 0x0000b1ceu, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00001ccbu, 0x00001cd0u, 0x00001cd5u, 0x00001cdau, 0x0003003eu, 0x00005e41u, 0x00001ca3u, 0x0003003eu, 0x00005e42u, 0x00001ca9u, 0x0003003eu, 0x00005e43u, 0x00001cafu, 0x0003003eu, 0x00005e44u, 0x00001cb2u, 0x0003003eu, 0x00005e45u, 0x0000b1cfu, 0x0003003eu, 0x00005e46u, 0x00001cc1u, 0x0003003eu, 0x00005e47u, 0x00001cc6u, 0x0003003eu, 0x00005e48u, 0x00001ccbu, 0x0003003eu, 0x00005e49u, 0x00001cd0u, 0x0003003eu, 0x00005e4au, 0x00001cd5u, 0x0003003eu, 0x00005e4bu, 0x00001cdau, 0x0003003eu, 0x00001832u, 0x000018feu, 0x0003003eu, 0x00001833u, 0x0000a541u, 0x0003003eu, 0x00001834u, 0x00001bf6u, 0x0003003eu, 0x00001835u, 0x00001921u, 0x0003003eu, 0x00001836u, 0x00001924u, 0x0004007cu, 0x00000008u, 0x00001cf2u, 0x00001ca3u, 0x00050041u, 0x00000038u, 0x00001cf5u, 0x00001833u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001cf6u, 0x00001cf5u, 0x0003003eu, 0x00001cdcu, 0x00001cf6u, 0x0003003eu, 0x00001cddu, 0x00001cf2u, 0x0003003eu, 0x00001cdeu, 0x00001ccbu, 0x0008000cu, 0x00000008u, 0x00001d2bu, 0x00000001u, 0x0000002du, 0x00001cf6u, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x00001cdcu, 0x00001d2bu, 0x000500b1u, 0x00000058u, 0x00001d2du, 0x00001ccbu, 0x000001f1u, 0x000300f7u, 0x00001d2eu, 0x00000000u, 0x000400fau, 0x00001d2du, 0x00001d2fu, 0x00001d30u, 0x000200f8u, 0x00001d30u, 0x00050082u, 0x00000008u, 0x00001d35u, 0x000002e0u, 0x00001ccbu, 0x000500c4u, 0x00000008u, 0x00001d37u, 0x00001d2bu, 0x00001d35u, 0x0003003eu, 0x00001cdcu, 0x00001d37u, 0x000500c3u, 0x00000008u, 0x00001d39u, 0x00001d37u, 0x00000321u, 0x0003003eu, 0x00001cdcu, 0x00001d39u, 0x000200f9u, 0x00001d2eu, 0x000200f8u, 0x00001d2fu, 0x000500c3u, 0x00000008u, 0x00001d33u, 0x00001d2bu, 0x00001ccbu, 0x0003003eu, 0x00001cdcu, 0x00001d33u, 0x000200f9u, 0x00001d2eu, 0x000200f8u, 0x00001d2eu, 0x000700f5u, 0x00000008u, 0x0000a59cu, 0x00001d33u, 0x00001d2fu, 0x00001d39u, 0x00001d30u, 0x000500c4u, 0x00000008u, 0x00001d3bu, 0x00001cf2u, 0x0000019au, 0x00050082u, 0x00000008u, 0x00001d3du, 0x0000a59cu, 0x00001d3bu, 0x0003003eu, 0x00001cdcu, 0x00001d3du, 0x0003003eu, 0x00001d29u, 0x00001d3du, 0x0003003eu, 0x00001cf5u, 0x00001d3du, 0x0004007cu, 0x00000008u, 0x00001cfbu, 0x00001ca9u, 0x00050041u, 0x00000038u, 0x00001cfeu, 0x00001833u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001cffu, 0x00001cfeu, 0x0003003eu, 0x00001cdfu, 0x00001cffu, 0x0003003eu, 0x00001ce0u, 0x00001cfbu, 0x0003003eu, 0x00001ce1u, 0x00001cd5u, 0x0008000cu, 0x00000008u, 0x00001d41u, 0x00000001u, 0x0000002du, 0x00001cffu, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x00001cdfu, 0x00001d41u, 0x000500b1u, 0x00000058u, 0x00001d43u, 0x00001cd5u, 0x000001f1u, 0x000300f7u, 0x00001d44u, 0x00000000u, 0x000400fau, 0x00001d43u, 0x00001d45u, 0x00001d46u, 0x000200f8u, 0x00001d46u, 0x00050082u, 0x00000008u, 0x00001d4bu, 0x000002e0u, 0x00001cd5u, 0x000500c4u, 0x00000008u, 0x00001d4du, 0x00001d41u, 0x00001d4bu, 0x0003003eu, 0x00001cdfu, 0x00001d4du, 0x000500c3u, 0x00000008u, 0x00001d4fu, 0x00001d4du, 0x00000321u, 0x0003003eu, 0x00001cdfu, 0x00001d4fu, 0x000200f9u, 0x00001d44u, 0x000200f8u, 0x00001d45u, 0x000500c3u, 0x00000008u, 0x00001d49u, 0x00001d41u, 0x00001cd5u, 0x0003003eu, 0x00001cdfu, 0x00001d49u, 0x000200f9u, 0x00001d44u, 0x000200f8u, 0x00001d44u, 0x000700f5u, 0x00000008u, 0x0000a5a0u, 0x00001d49u, 0x00001d45u, 0x00001d4fu, 0x00001d46u, 0x000500c4u, 0x00000008u, 0x00001d51u, 0x00001cfbu, 0x0000019au, 0x00050082u, 0x00000008u, 0x00001d53u, 0x0000a5a0u, 0x00001d51u, 0x0003003eu, 0x00001cdfu, 0x00001d53u, 0x0003003eu, 0x00001d3fu, 0x00001d53u, 0x0003003eu, 0x00001cfeu, 0x00001d53u, 0x0004003du, 0x0000004du, 0x00001d02u, 0x00001833u, 0x000500c3u, 0x0000004du, 0x00001d04u, 0x00001d02u, 0x0000b1bcu, 0x0003003eu, 0x00001833u, 0x00001d04u, 0x00060041u, 0x00000528u, 0x00001d05u, 0x00000527u, 0x00000185u, 0x00000197u, 0x0004003du, 0x00000008u, 0x00001d06u, 0x00001d05u, 0x000500aau, 0x00000058u, 0x00001d07u, 0x00001d06u, 0x00000185u, 0x000300f7u, 0x00001d08u, 0x00000000u, 0x000400fau, 0x00001d07u, 0x00001d09u, 0x00001d0au, 0x000200f8u, 0x00001d0au, 0x000500aau, 0x00000058u, 0x00001d0du, 0x00001d06u, 0x00000194u, 0x000300f7u, 0x00001d0eu, 0x00000000u, 0x000400fau, 0x00001d0du, 0x00001d0fu, 0x00001d10u, 0x000200f8u, 0x00001d10u, 0x00110050u, 0x00000023u, 0x00005e6eu, 0x00001ca3u, 0x000059d9u, 0x00001ca9u, 0x000059d9u, 0x00001cafu, 0x00001cb2u, 0x00005914u, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00001ccbu, 0x00001cd0u, 0x00001cd5u, 0x00001cdau, 0x0003003eu, 0x00005d0cu, 0x00001cafu, 0x0003003eu, 0x00005d0du, 0x00001cb2u, 0x0003003eu, 0x00005d0eu, 0x0000b1cfu, 0x0003003eu, 0x00005d0fu, 0x00001cc1u, 0x0003003eu, 0x00005d10u, 0x00001cc6u, 0x0003003eu, 0x00005d11u, 0x00001cd0u, 0x0003003eu, 0x00005d12u, 0x00001cdau, 0x0003003eu, 0x00001ceau, 0x000018feu, 0x0004003du, 0x0000004du, 0x00001d23u, 0x00001833u, 0x0003003eu, 0x00001cebu, 0x00001d23u, 0x0003003eu, 0x00001cecu, 0x00001bf6u, 0x0003003eu, 0x00001cedu, 0x00001921u, 0x0003003eu, 0x00001ceeu, 0x00001924u, 0x000500b1u, 0x00000058u, 0x00001efdu, 0x00001bf6u, 0x00000197u, 0x0003003eu, 0x00001ee1u, 0x00001efdu, 0x000300f7u, 0x00001effu, 0x00000000u, 0x000400fau, 0x00001efdu, 0x00001f00u, 0x00001effu, 0x000200f8u, 0x00001f00u, 0x000500abu, 0x00000058u, 0x00001f03u, 0x0000b1cfu, 0x00000197u, 0x000200f9u, 0x00001effu, 0x000200f8u, 0x00001effu, 0x000700f5u, 0x00000058u, 0x00001f04u, 0x00001efdu, 0x00001d10u, 0x00001f03u, 0x00001f00u, 0x000400a8u, 0x00000058u, 0x00001f06u, 0x00001921u, 0x000500a7u, 0x00000058u, 0x00001f07u, 0x00001f04u, 0x00001f06u, 0x0003003eu, 0x00001ee2u, 0x00001f07u, 0x0007000cu, 0x00000008u, 0x00001f0au, 0x00000001u, 0x00000027u, 0x0000b1cfu, 0x00000197u, 0x0003003eu, 0x00001ee3u, 0x00001f0au, 0x000500aau, 0x00000058u, 0x00001f0du, 0x0000b1cfu, 0x0000019au, 0x0003003eu, 0x00001ee4u, 0x00001f0du, 0x000500a6u, 0x00000058u, 0x00001f10u, 0x00001f0du, 0x00001921u, 0x000600a9u, 0x00000008u, 0x00001f11u, 0x00001f10u, 0x0000099cu, 0x000009deu, 0x0003003eu, 0x00001ee5u, 0x00001f11u, 0x000300f7u, 0x00001f13u, 0x00000000u, 0x000400fau, 0x00001f07u, 0x00001f14u, 0x00001f15u, 0x000200f8u, 0x00001f15u, 0x00050041u, 0x00000038u, 0x00001f95u, 0x00001cebu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001f96u, 0x00001f95u, 0x00050080u, 0x00000008u, 0x00001f97u, 0x00001f96u, 0x00001bf6u, 0x0003003eu, 0x00001f95u, 0x00001f97u, 0x00110050u, 0x00000023u, 0x00005d31u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x00001cafu, 0x00001cb2u, 0x00005914u, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00005914u, 0x00001cd0u, 0x00005914u, 0x00001cdau, 0x0003003eu, 0x00005cc6u, 0x00001cc6u, 0x0003003eu, 0x00005cc7u, 0x00001cdau, 0x0004003du, 0x00000008u, 0x00001f9bu, 0x00001f95u, 0x0003003eu, 0x00001ef4u, 0x00001f9bu, 0x000500abu, 0x00000058u, 0x00002039u, 0x00001cc6u, 0x00000185u, 0x000300f7u, 0x0000203au, 0x00000000u, 0x000400fau, 0x00002039u, 0x0000203bu, 0x0000203au, 0x000200f8u, 0x0000203bu, 0x000500c4u, 0x00000008u, 0x0000203eu, 0x00000194u, 0x00001cc6u, 0x0003003eu, 0x00002035u, 0x0000203eu, 0x000500c7u, 0x00000008u, 0x00002041u, 0x00001cdau, 0x00000197u, 0x000500abu, 0x00000058u, 0x00002042u, 0x00002041u, 0x00000185u, 0x000300f7u, 0x00002043u, 0x00000000u, 0x000400fau, 0x00002042u, 0x00002044u, 0x00002043u, 0x000200f8u, 0x00002044u, 0x000500c7u, 0x00000008u, 0x00002047u, 0x00001f9bu, 0x0000203eu, 0x00050082u, 0x00000008u, 0x00002048u, 0x00002047u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00002049u, 0x00000001u, 0x0000002au, 0x00002048u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x0000204bu, 0x00001f9bu, 0x00002049u, 0x0003003eu, 0x00001ef4u, 0x0000204bu, 0x000200f9u, 0x00002043u, 0x000200f8u, 0x00002043u, 0x000700f5u, 0x00000008u, 0x0000a5c7u, 0x00001f9bu, 0x0000203bu, 0x0000204bu, 0x00002044u, 0x00050082u, 0x00000008u, 0x0000204du, 0x0000203eu, 0x00000194u, 0x000500c7u, 0x00000008u, 0x0000204fu, 0x0000a5c7u, 0x0000204du, 0x0003003eu, 0x00001ef4u, 0x0000204fu, 0x000200f9u, 0x0000203au, 0x000200f8u, 0x0000203au, 0x000700f5u, 0x00000008u, 0x0000a5c8u, 0x00001f9bu, 0x00001f15u, 0x0000204fu, 0x00002043u, 0x0003003eu, 0x00002036u, 0x0000a5c8u, 0x0003003eu, 0x00001ef2u, 0x0000a5c8u, 0x0003003eu, 0x00005ccau, 0x00001cd0u, 0x0003003eu, 0x00005ccbu, 0x00001cdau, 0x00050041u, 0x00000038u, 0x00001f9eu, 0x00001cebu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001f9fu, 0x00001f9eu, 0x0003003eu, 0x00001ef7u, 0x00001f9fu, 0x000500abu, 0x00000058u, 0x00002055u, 0x00001cd0u, 0x00000185u, 0x000300f7u, 0x00002056u, 0x00000000u, 0x000400fau, 0x00002055u, 0x00002057u, 0x00002056u, 0x000200f8u, 0x00002057u, 0x000500c4u, 0x00000008u, 0x0000205au, 0x00000194u, 0x00001cd0u, 0x0003003eu, 0x00002051u, 0x0000205au, 0x000500c7u, 0x00000008u, 0x0000205du, 0x00001cdau, 0x000001e0u, 0x000500abu, 0x00000058u, 0x0000205eu, 0x0000205du, 0x00000185u, 0x000300f7u, 0x0000205fu, 0x00000000u, 0x000400fau, 0x0000205eu, 0x00002060u, 0x0000205fu, 0x000200f8u, 0x00002060u, 0x000500c7u, 0x00000008u, 0x00002063u, 0x00001f9fu, 0x0000205au, 0x00050082u, 0x00000008u, 0x00002064u, 0x00002063u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00002065u, 0x00000001u, 0x0000002au, 0x00002064u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x00002067u, 0x00001f9fu, 0x00002065u, 0x0003003eu, 0x00001ef7u, 0x00002067u, 0x000200f9u, 0x0000205fu, 0x000200f8u, 0x0000205fu, 0x000700f5u, 0x00000008u, 0x0000a5d8u, 0x00001f9fu, 0x00002057u, 0x00002067u, 0x00002060u, 0x00050082u, 0x00000008u, 0x00002069u, 0x0000205au, 0x00000194u, 0x000500c7u, 0x00000008u, 0x0000206bu, 0x0000a5d8u, 0x00002069u, 0x0003003eu, 0x00001ef7u, 0x0000206bu, 0x000200f9u, 0x00002056u, 0x000200f8u, 0x00002056u, 0x000700f5u, 0x00000008u, 0x0000a5d9u, 0x00001f9fu, 0x0000203au, 0x0000206bu, 0x0000205fu, 0x0003003eu, 0x00002052u, 0x0000a5d9u, 0x0003003eu, 0x00001ef5u, 0x0000a5d9u, 0x0004007cu, 0x00000006u, 0x00001fa6u, 0x0000a5d9u, 0x00050084u, 0x00000006u, 0x00001fa7u, 0x00001cb2u, 0x00001fa6u, 0x00050080u, 0x00000006u, 0x00001fa8u, 0x00001cafu, 0x00001fa7u, 0x0003003eu, 0x00001ef8u, 0x00001fa8u, 0x00050084u, 0x00000006u, 0x00001faau, 0x00001fa8u, 0x0000032eu, 0x000500c4u, 0x00000008u, 0x00001fadu, 0x0000a5c8u, 0x00001f0au, 0x0004007cu, 0x00000006u, 0x00001faeu, 0x00001fadu, 0x00050080u, 0x00000006u, 0x00001fafu, 0x00001faau, 0x00001faeu, 0x000500c7u, 0x00000006u, 0x00001fb0u, 0x00001fafu, 0x00000a0au, 0x0003003eu, 0x00001ef9u, 0x00001fb0u, 0x000500c7u, 0x00000006u, 0x00001fb3u, 0x00001fa6u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00001fb4u, 0x00001fb3u, 0x000002beu, 0x000500c6u, 0x00000006u, 0x00001fb6u, 0x00001fb0u, 0x00001fb4u, 0x0003003eu, 0x00001ef9u, 0x00001fb6u, 0x000500c2u, 0x00000006u, 0x00001fb8u, 0x00001fb6u, 0x0000032eu, 0x0003003eu, 0x00001efau, 0x00001fb8u, 0x0004007cu, 0x00000006u, 0x00001fbau, 0x00001f11u, 0x000500c7u, 0x00000006u, 0x00001fbcu, 0x00001fb8u, 0x00001fbau, 0x0003003eu, 0x00001efau, 0x00001fbcu, 0x000500c6u, 0x00000006u, 0x00001fbfu, 0x00001fbcu, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00001fc0u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001fbfu, 0x0004003du, 0x000001adu, 0x00001fc1u, 0x00001fc0u, 0x00040071u, 0x00000006u, 0x00001fc2u, 0x00001fc1u, 0x0004007cu, 0x00000008u, 0x00001fc3u, 0x00001fc2u, 0x0003003eu, 0x00001ef1u, 0x00001fc3u, 0x000300f7u, 0x00001fc5u, 0x00000000u, 0x000400fau, 0x00001921u, 0x00001fc6u, 0x00001fc5u, 0x000200f8u, 0x00001fc6u, 0x000500aau, 0x00000058u, 0x00001fc9u, 0x0000b1cfu, 0x00000185u, 0x000300f7u, 0x00001fcau, 0x00000000u, 0x000400fau, 0x00001fc9u, 0x00001fcbu, 0x00001fccu, 0x000200f8u, 0x00001fccu, 0x000500c7u, 0x00000006u, 0x00001fe0u, 0x00001fb6u, 0x0000032eu, 0x00050084u, 0x00000006u, 0x00001fe1u, 0x000006bcu, 0x00001fe0u, 0x00050082u, 0x00000006u, 0x00001fe2u, 0x000002beu, 0x00001fe1u, 0x000500c3u, 0x00000008u, 0x00001fe4u, 0x00001fc3u, 0x00001fe2u, 0x0003003eu, 0x00001ef1u, 0x00001fe4u, 0x000500c7u, 0x00000008u, 0x00001fe6u, 0x00001fe4u, 0x000002eeu, 0x0003003eu, 0x00001ef1u, 0x00001fe6u, 0x000500c4u, 0x00000008u, 0x00001fe8u, 0x00001fe6u, 0x00000197u, 0x0003003eu, 0x00001ef1u, 0x00001fe8u, 0x00050080u, 0x00000008u, 0x00001febu, 0x00001fe8u, 0x00001bf6u, 0x0003003eu, 0x00001ef1u, 0x00001febu, 0x000200f9u, 0x00001fcau, 0x000200f8u, 0x00001fcbu, 0x000500c7u, 0x00000006u, 0x00001fceu, 0x00001fb6u, 0x00000331u, 0x00050084u, 0x00000006u, 0x00001fcfu, 0x000006bcu, 0x00001fceu, 0x00050082u, 0x00000006u, 0x00001fd0u, 0x00000ab2u, 0x00001fcfu, 0x000500c3u, 0x00000008u, 0x00001fd2u, 0x00001fc3u, 0x00001fd0u, 0x0003003eu, 0x00001ef1u, 0x00001fd2u, 0x000500c7u, 0x00000008u, 0x00001fd4u, 0x00001fd2u, 0x00000a5fu, 0x0003003eu, 0x00001ef1u, 0x00001fd4u, 0x000500c4u, 0x00000008u, 0x00001fd7u, 0x00001cc1u, 0x0000019du, 0x000500c5u, 0x00000008u, 0x00001fd9u, 0x00001fd4u, 0x00001fd7u, 0x0003003eu, 0x00001ef1u, 0x00001fd9u, 0x000500c4u, 0x00000008u, 0x00001fdbu, 0x00001fd9u, 0x00000197u, 0x0003003eu, 0x00001ef1u, 0x00001fdbu, 0x00050080u, 0x00000008u, 0x00001fdeu, 0x00001fdbu, 0x00001bf6u, 0x0003003eu, 0x00001ef1u, 0x00001fdeu, 0x000200f9u, 0x00001fcau, 0x000200f8u, 0x00001fcau, 0x000700f5u, 0x00000008u, 0x0000a5fau, 0x00001fdeu, 0x00001fcbu, 0x00001febu, 0x00001fccu, 0x000500c5u, 0x00000008u, 0x00001feeu, 0x0000a5fau, 0x00000ad5u, 0x000500c6u, 0x00000008u, 0x00001fefu, 0x00001feeu, 0x00000194u, 0x00080041u, 0x000001f2u, 0x00001ff0u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001fefu, 0x0004003du, 0x000001adu, 0x00001ff1u, 0x00001ff0u, 0x00040071u, 0x00000006u, 0x00001ff2u, 0x00001ff1u, 0x0004007cu, 0x00000008u, 0x00001ff3u, 0x00001ff2u, 0x0003003eu, 0x00001ef1u, 0x00001ff3u, 0x000200f9u, 0x00001fc5u, 0x000200f8u, 0x00001fc5u, 0x000700f5u, 0x00000008u, 0x0000a628u, 0x00001fc3u, 0x00002056u, 0x00001ff3u, 0x00001fcau, 0x000200f9u, 0x00001f13u, 0x000200f8u, 0x00001f14u, 0x00050084u, 0x00000008u, 0x00001f17u, 0x00000197u, 0x00001bf6u, 0x00050041u, 0x00000038u, 0x00001f18u, 0x00001cebu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001f19u, 0x00001f18u, 0x00050080u, 0x00000008u, 0x00001f1au, 0x00001f19u, 0x00001f17u, 0x0003003eu, 0x00001f18u, 0x00001f1au, 0x00110050u, 0x00000023u, 0x00005d21u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x00001cafu, 0x00001cb2u, 0x00005914u, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00005914u, 0x00001cd0u, 0x00005914u, 0x00001cdau, 0x0003003eu, 0x00005cbeu, 0x00001cc6u, 0x0003003eu, 0x00005cbfu, 0x00001cdau, 0x0004003du, 0x00000008u, 0x00001f1eu, 0x00001f18u, 0x0003003eu, 0x00001ee8u, 0x00001f1eu, 0x00050050u, 0x0000004du, 0x00001ff9u, 0x00001f1eu, 0x00001f1eu, 0x00050080u, 0x0000004du, 0x00001ffau, 0x00001ff9u, 0x00000634u, 0x0003003eu, 0x00001ff5u, 0x00001ffau, 0x000500abu, 0x00000058u, 0x00001ffdu, 0x00001cc6u, 0x00000185u, 0x000300f7u, 0x00001ffeu, 0x00000000u, 0x000400fau, 0x00001ffdu, 0x00001fffu, 0x00001ffeu, 0x000200f8u, 0x00001fffu, 0x000500c4u, 0x00000008u, 0x00002002u, 0x00000194u, 0x00001cc6u, 0x0003003eu, 0x00001ff6u, 0x00002002u, 0x000500c7u, 0x00000008u, 0x00002005u, 0x00001cdau, 0x00000197u, 0x000500abu, 0x00000058u, 0x00002006u, 0x00002005u, 0x00000185u, 0x000300f7u, 0x00002007u, 0x00000000u, 0x000400fau, 0x00002006u, 0x00002008u, 0x00002007u, 0x000200f8u, 0x00002008u, 0x00050050u, 0x0000004du, 0x0000200bu, 0x00002002u, 0x00002002u, 0x000500c7u, 0x0000004du, 0x0000200cu, 0x00001ffau, 0x0000200bu, 0x00050082u, 0x0000004du, 0x0000200eu, 0x0000200cu, 0x0000b1bau, 0x0007000cu, 0x0000004du, 0x00002010u, 0x00000001u, 0x0000002au, 0x0000200eu, 0x00000488u, 0x000500c6u, 0x0000004du, 0x00002012u, 0x00001ffau, 0x00002010u, 0x0003003eu, 0x00001ff5u, 0x00002012u, 0x000200f9u, 0x00002007u, 0x000200f8u, 0x00002007u, 0x000700f5u, 0x0000004du, 0x0000a5fcu, 0x00001ffau, 0x00001fffu, 0x00002012u, 0x00002008u, 0x00050082u, 0x00000008u, 0x00002014u, 0x00002002u, 0x00000194u, 0x00050050u, 0x0000004du, 0x00002016u, 0x00002014u, 0x00002014u, 0x000500c7u, 0x0000004du, 0x00002017u, 0x0000a5fcu, 0x00002016u, 0x0003003eu, 0x00001ff5u, 0x00002017u, 0x000200f9u, 0x00001ffeu, 0x000200f8u, 0x00001ffeu, 0x000700f5u, 0x0000004du, 0x0000a5fdu, 0x00001ffau, 0x00001f14u, 0x00002017u, 0x00002007u, 0x0003003eu, 0x00001ff7u, 0x0000a5fdu, 0x0003003eu, 0x00001ee6u, 0x0000a5fdu, 0x0003003eu, 0x00005cc2u, 0x00001cd0u, 0x0003003eu, 0x00005cc3u, 0x00001cdau, 0x00050041u, 0x00000038u, 0x00001f21u, 0x00001cebu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001f22u, 0x00001f21u, 0x0003003eu, 0x00001eebu, 0x00001f22u, 0x000500abu, 0x00000058u, 0x0000201du, 0x00001cd0u, 0x00000185u, 0x000300f7u, 0x0000201eu, 0x00000000u, 0x000400fau, 0x0000201du, 0x0000201fu, 0x0000201eu, 0x000200f8u, 0x0000201fu, 0x000500c4u, 0x00000008u, 0x00002022u, 0x00000194u, 0x00001cd0u, 0x0003003eu, 0x00002019u, 0x00002022u, 0x000500c7u, 0x00000008u, 0x00002025u, 0x00001cdau, 0x000001e0u, 0x000500abu, 0x00000058u, 0x00002026u, 0x00002025u, 0x00000185u, 0x000300f7u, 0x00002027u, 0x00000000u, 0x000400fau, 0x00002026u, 0x00002028u, 0x00002027u, 0x000200f8u, 0x00002028u, 0x000500c7u, 0x00000008u, 0x0000202bu, 0x00001f22u, 0x00002022u, 0x00050082u, 0x00000008u, 0x0000202cu, 0x0000202bu, 0x00000194u, 0x0007000cu, 0x00000008u, 0x0000202du, 0x00000001u, 0x0000002au, 0x0000202cu, 0x00000185u, 0x000500c6u, 0x00000008u, 0x0000202fu, 0x00001f22u, 0x0000202du, 0x0003003eu, 0x00001eebu, 0x0000202fu, 0x000200f9u, 0x00002027u, 0x000200f8u, 0x00002027u, 0x000700f5u, 0x00000008u, 0x0000a60du, 0x00001f22u, 0x0000201fu, 0x0000202fu, 0x00002028u, 0x00050082u, 0x00000008u, 0x00002031u, 0x00002022u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00002033u, 0x0000a60du, 0x00002031u, 0x0003003eu, 0x00001eebu, 0x00002033u, 0x000200f9u, 0x0000201eu, 0x000200f8u, 0x0000201eu, 0x000700f5u, 0x00000008u, 0x0000a60eu, 0x00001f22u, 0x00001ffeu, 0x00002033u, 0x00002027u, 0x0003003eu, 0x0000201au, 0x0000a60eu, 0x0003003eu, 0x00001ee9u, 0x0000a60eu, 0x0004007cu, 0x00000006u, 0x00001f29u, 0x0000a60eu, 0x00050084u, 0x00000006u, 0x00001f2au, 0x00001cb2u, 0x00001f29u, 0x00050080u, 0x00000006u, 0x00001f2bu, 0x00001cafu, 0x00001f2au, 0x0003003eu, 0x00001eecu, 0x00001f2bu, 0x00050084u, 0x00000006u, 0x00001f2du, 0x00001f2bu, 0x0000032eu, 0x00050050u, 0x0000004du, 0x00001f30u, 0x00001f0au, 0x00001f0au, 0x000500c4u, 0x0000004du, 0x00001f31u, 0x0000a5fdu, 0x00001f30u, 0x0004007cu, 0x000000a0u, 0x00001f32u, 0x00001f31u, 0x00050050u, 0x000000a0u, 0x00001f33u, 0x00001f2du, 0x00001f2du, 0x00050080u, 0x000000a0u, 0x00001f34u, 0x00001f33u, 0x00001f32u, 0x000500c7u, 0x000000a0u, 0x00001f36u, 0x00001f34u, 0x0000b1beu, 0x0003003eu, 0x00001eedu, 0x00001f36u, 0x000500c7u, 0x00000006u, 0x00001f39u, 0x00001f29u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00001f3au, 0x00001f39u, 0x000002beu, 0x0004003du, 0x000000a0u, 0x00001f3bu, 0x00001eedu, 0x00050050u, 0x000000a0u, 0x00001f3cu, 0x00001f3au, 0x00001f3au, 0x000500c6u, 0x000000a0u, 0x00001f3du, 0x00001f3bu, 0x00001f3cu, 0x0003003eu, 0x00001eedu, 0x00001f3du, 0x0004003du, 0x000000a0u, 0x00001f3eu, 0x00001eedu, 0x000500c2u, 0x000000a0u, 0x00001f40u, 0x00001f3eu, 0x0000b1bfu, 0x0003003eu, 0x00001eeeu, 0x00001f40u, 0x0004007cu, 0x00000006u, 0x00001f42u, 0x00001f11u, 0x0004003du, 0x000000a0u, 0x00001f43u, 0x00001eeeu, 0x00050050u, 0x000000a0u, 0x00001f44u, 0x00001f42u, 0x00001f42u, 0x000500c7u, 0x000000a0u, 0x00001f45u, 0x00001f43u, 0x00001f44u, 0x0003003eu, 0x00001eeeu, 0x00001f45u, 0x00050041u, 0x00000007u, 0x00001f47u, 0x00001eeeu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001f48u, 0x00001f47u, 0x000500c6u, 0x00000006u, 0x00001f49u, 0x00001f48u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00001f4au, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001f49u, 0x0004003du, 0x000001adu, 0x00001f4bu, 0x00001f4au, 0x00040071u, 0x00000006u, 0x00001f4cu, 0x00001f4bu, 0x0004007cu, 0x00000008u, 0x00001f4du, 0x00001f4cu, 0x0003003eu, 0x00001eefu, 0x00001f4du, 0x00050041u, 0x00000007u, 0x00001f4fu, 0x00001eeeu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001f50u, 0x00001f4fu, 0x000500c6u, 0x00000006u, 0x00001f51u, 0x00001f50u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00001f52u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001f51u, 0x0004003du, 0x000001adu, 0x00001f53u, 0x00001f52u, 0x00040071u, 0x00000006u, 0x00001f54u, 0x00001f53u, 0x0004007cu, 0x00000008u, 0x00001f55u, 0x00001f54u, 0x0003003eu, 0x00001ef0u, 0x00001f55u, 0x000500aau, 0x00000058u, 0x00001f58u, 0x0000b1cfu, 0x00000194u, 0x000300f7u, 0x00001f59u, 0x00000000u, 0x000400fau, 0x00001f58u, 0x00001f5au, 0x00001f5bu, 0x000200f8u, 0x00001f5bu, 0x000500aau, 0x00000058u, 0x00001f72u, 0x0000b1cfu, 0x00000185u, 0x000300f7u, 0x00001f73u, 0x00000000u, 0x000400fau, 0x00001f72u, 0x00001f74u, 0x00001f75u, 0x000200f8u, 0x00001f75u, 0x000500c3u, 0x00000008u, 0x00001f8du, 0x00001f4du, 0x000001e0u, 0x0003003eu, 0x00001eefu, 0x00001f8du, 0x000500c3u, 0x00000008u, 0x00001f8fu, 0x00001f55u, 0x000001e0u, 0x0003003eu, 0x00001ef0u, 0x00001f8fu, 0x000200f9u, 0x00001f73u, 0x000200f8u, 0x00001f74u, 0x00050041u, 0x00000007u, 0x00001f76u, 0x00001eedu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001f77u, 0x00001f76u, 0x000500c7u, 0x00000006u, 0x00001f78u, 0x00001f77u, 0x00000331u, 0x0004007cu, 0x00000008u, 0x00001f79u, 0x00001f78u, 0x00050084u, 0x00000008u, 0x00001f7au, 0x0000019du, 0x00001f79u, 0x00050082u, 0x00000008u, 0x00001f7bu, 0x000001f8u, 0x00001f7au, 0x000500c3u, 0x00000008u, 0x00001f7du, 0x00001f4du, 0x00001f7bu, 0x0003003eu, 0x00001eefu, 0x00001f7du, 0x00050041u, 0x00000007u, 0x00001f7eu, 0x00001eedu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001f7fu, 0x00001f7eu, 0x000500c7u, 0x00000006u, 0x00001f80u, 0x00001f7fu, 0x00000331u, 0x0004007cu, 0x00000008u, 0x00001f81u, 0x00001f80u, 0x00050084u, 0x00000008u, 0x00001f82u, 0x0000019du, 0x00001f81u, 0x00050082u, 0x00000008u, 0x00001f83u, 0x000001f8u, 0x00001f82u, 0x000500c3u, 0x00000008u, 0x00001f85u, 0x00001f55u, 0x00001f83u, 0x0003003eu, 0x00001ef0u, 0x00001f85u, 0x000500c7u, 0x00000008u, 0x00001f87u, 0x00001f7du, 0x00000a5fu, 0x00050084u, 0x00000008u, 0x00001f88u, 0x00001f87u, 0x00000a61u, 0x0003003eu, 0x00001eefu, 0x00001f88u, 0x000500c7u, 0x00000008u, 0x00001f8au, 0x00001f85u, 0x00000a5fu, 0x00050084u, 0x00000008u, 0x00001f8bu, 0x00001f8au, 0x00000a61u, 0x0003003eu, 0x00001ef0u, 0x00001f8bu, 0x000200f9u, 0x00001f73u, 0x000200f8u, 0x00001f73u, 0x000700f5u, 0x00000008u, 0x0000a626u, 0x00001f8bu, 0x00001f74u, 0x00001f8fu, 0x00001f75u, 0x000700f5u, 0x00000008u, 0x0000a624u, 0x00001f88u, 0x00001f74u, 0x00001f8du, 0x00001f75u, 0x000200f9u, 0x00001f59u, 0x000200f8u, 0x00001f5au, 0x00050041u, 0x00000007u, 0x00001f5cu, 0x00001eedu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001f5du, 0x00001f5cu, 0x000500c7u, 0x00000006u, 0x00001f5eu, 0x00001f5du, 0x0000032eu, 0x0004007cu, 0x00000008u, 0x00001f5fu, 0x00001f5eu, 0x00050084u, 0x00000008u, 0x00001f60u, 0x0000019du, 0x00001f5fu, 0x00050082u, 0x00000008u, 0x00001f61u, 0x000001e0u, 0x00001f60u, 0x000500c3u, 0x00000008u, 0x00001f63u, 0x00001f4du, 0x00001f61u, 0x0003003eu, 0x00001eefu, 0x00001f63u, 0x00050041u, 0x00000007u, 0x00001f64u, 0x00001eedu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001f65u, 0x00001f64u, 0x000500c7u, 0x00000006u, 0x00001f66u, 0x00001f65u, 0x0000032eu, 0x0004007cu, 0x00000008u, 0x00001f67u, 0x00001f66u, 0x00050084u, 0x00000008u, 0x00001f68u, 0x0000019du, 0x00001f67u, 0x00050082u, 0x00000008u, 0x00001f69u, 0x000001e0u, 0x00001f68u, 0x000500c3u, 0x00000008u, 0x00001f6bu, 0x00001f55u, 0x00001f69u, 0x0003003eu, 0x00001ef0u, 0x00001f6bu, 0x000500c7u, 0x00000008u, 0x00001f6du, 0x00001f63u, 0x000002eeu, 0x0003003eu, 0x00001eefu, 0x00001f6du, 0x000500c7u, 0x00000008u, 0x00001f6fu, 0x00001f6bu, 0x000002eeu, 0x0003003eu, 0x00001ef0u, 0x00001f6fu, 0x000200f9u, 0x00001f59u, 0x000200f8u, 0x00001f59u, 0x000700f5u, 0x00000008u, 0x0000a625u, 0x00001f6fu, 0x00001f5au, 0x0000a626u, 0x00001f73u, 0x000700f5u, 0x00000008u, 0x0000a623u, 0x00001f6du, 0x00001f5au, 0x0000a624u, 0x00001f73u, 0x000500c4u, 0x00000008u, 0x00001f91u, 0x0000a623u, 0x000001e0u, 0x000500c5u, 0x00000008u, 0x00001f93u, 0x00001f91u, 0x0000a625u, 0x0003003eu, 0x00001ef1u, 0x00001f93u, 0x000200f9u, 0x00001f13u, 0x000200f8u, 0x00001f13u, 0x000700f5u, 0x00000008u, 0x0000a627u, 0x00001f93u, 0x00001f59u, 0x0000a628u, 0x00001fc5u, 0x0003003eu, 0x00001efbu, 0x0000a627u, 0x0003003eu, 0x00001ce2u, 0x0000a627u, 0x000200f9u, 0x00001d0eu, 0x000200f8u, 0x00001d0fu, 0x000500c3u, 0x00000008u, 0x00001d12u, 0x00001bf6u, 0x00000194u, 0x00110050u, 0x00000023u, 0x00005e62u, 0x00001ca3u, 0x000059d9u, 0x00001ca9u, 0x000059d9u, 0x00001cafu, 0x00001cb2u, 0x00005914u, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00001ccbu, 0x00001cd0u, 0x00001cd5u, 0x00001cdau, 0x0003003eu, 0x00005cdeu, 0x00001cafu, 0x0003003eu, 0x00005cdfu, 0x00001cb2u, 0x0003003eu, 0x00005ce0u, 0x0000b1cfu, 0x0003003eu, 0x00005ce1u, 0x00001cc1u, 0x0003003eu, 0x00005ce2u, 0x00001cc6u, 0x0003003eu, 0x00005ce3u, 0x00001cd0u, 0x0003003eu, 0x00005ce4u, 0x00001cdau, 0x0003003eu, 0x00001ce4u, 0x000018feu, 0x0004003du, 0x0000004du, 0x00001d15u, 0x00001833u, 0x0003003eu, 0x00001ce5u, 0x00001d15u, 0x0003003eu, 0x00001ce6u, 0x00001d12u, 0x0003003eu, 0x00001ce7u, 0x00001921u, 0x0003003eu, 0x00001ce8u, 0x00001924u, 0x000500b1u, 0x00000058u, 0x00001d71u, 0x00001d12u, 0x00000197u, 0x0003003eu, 0x00001d55u, 0x00001d71u, 0x000300f7u, 0x00001d73u, 0x00000000u, 0x000400fau, 0x00001d71u, 0x00001d74u, 0x00001d73u, 0x000200f8u, 0x00001d74u, 0x000500abu, 0x00000058u, 0x00001d77u, 0x0000b1cfu, 0x00000197u, 0x000200f9u, 0x00001d73u, 0x000200f8u, 0x00001d73u, 0x000700f5u, 0x00000058u, 0x00001d78u, 0x00001d71u, 0x00001d0fu, 0x00001d77u, 0x00001d74u, 0x000400a8u, 0x00000058u, 0x00001d7au, 0x00001921u, 0x000500a7u, 0x00000058u, 0x00001d7bu, 0x00001d78u, 0x00001d7au, 0x0003003eu, 0x00001d56u, 0x00001d7bu, 0x0007000cu, 0x00000008u, 0x00001d7eu, 0x00000001u, 0x00000027u, 0x0000b1cfu, 0x00000197u, 0x0003003eu, 0x00001d57u, 0x00001d7eu, 0x000500aau, 0x00000058u, 0x00001d81u, 0x0000b1cfu, 0x0000019au, 0x0003003eu, 0x00001d58u, 0x00001d81u, 0x000500a6u, 0x00000058u, 0x00001d84u, 0x00001d81u, 0x00001921u, 0x000600a9u, 0x00000008u, 0x00001d85u, 0x00001d84u, 0x0000099cu, 0x000009deu, 0x0003003eu, 0x00001d59u, 0x00001d85u, 0x000300f7u, 0x00001d87u, 0x00000000u, 0x000400fau, 0x00001d7bu, 0x00001d88u, 0x00001d89u, 0x000200f8u, 0x00001d89u, 0x00050041u, 0x00000038u, 0x00001e09u, 0x00001ce5u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001e0au, 0x00001e09u, 0x00050080u, 0x00000008u, 0x00001e0bu, 0x00001e0au, 0x00001d12u, 0x0003003eu, 0x00001e09u, 0x00001e0bu, 0x00110050u, 0x00000023u, 0x00005d03u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x00001cafu, 0x00001cb2u, 0x00005914u, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00005914u, 0x00001cd0u, 0x00005914u, 0x00001cdau, 0x0003003eu, 0x00005cd6u, 0x00001cc6u, 0x0003003eu, 0x00005cd7u, 0x00001cdau, 0x0004003du, 0x00000008u, 0x00001e0fu, 0x00001e09u, 0x0003003eu, 0x00001d68u, 0x00001e0fu, 0x000500abu, 0x00000058u, 0x00001eadu, 0x00001cc6u, 0x00000185u, 0x000300f7u, 0x00001eaeu, 0x00000000u, 0x000400fau, 0x00001eadu, 0x00001eafu, 0x00001eaeu, 0x000200f8u, 0x00001eafu, 0x000500c4u, 0x00000008u, 0x00001eb2u, 0x00000194u, 0x00001cc6u, 0x0003003eu, 0x00001ea9u, 0x00001eb2u, 0x000500c7u, 0x00000008u, 0x00001eb5u, 0x00001cdau, 0x00000197u, 0x000500abu, 0x00000058u, 0x00001eb6u, 0x00001eb5u, 0x00000185u, 0x000300f7u, 0x00001eb7u, 0x00000000u, 0x000400fau, 0x00001eb6u, 0x00001eb8u, 0x00001eb7u, 0x000200f8u, 0x00001eb8u, 0x000500c7u, 0x00000008u, 0x00001ebbu, 0x00001e0fu, 0x00001eb2u, 0x00050082u, 0x00000008u, 0x00001ebcu, 0x00001ebbu, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00001ebdu, 0x00000001u, 0x0000002au, 0x00001ebcu, 0x00000185u, 0x000500c6u, 0x00000008u, 0x00001ebfu, 0x00001e0fu, 0x00001ebdu, 0x0003003eu, 0x00001d68u, 0x00001ebfu, 0x000200f9u, 0x00001eb7u, 0x000200f8u, 0x00001eb7u, 0x000700f5u, 0x00000008u, 0x0000a633u, 0x00001e0fu, 0x00001eafu, 0x00001ebfu, 0x00001eb8u, 0x00050082u, 0x00000008u, 0x00001ec1u, 0x00001eb2u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00001ec3u, 0x0000a633u, 0x00001ec1u, 0x0003003eu, 0x00001d68u, 0x00001ec3u, 0x000200f9u, 0x00001eaeu, 0x000200f8u, 0x00001eaeu, 0x000700f5u, 0x00000008u, 0x0000a634u, 0x00001e0fu, 0x00001d89u, 0x00001ec3u, 0x00001eb7u, 0x0003003eu, 0x00001eaau, 0x0000a634u, 0x0003003eu, 0x00001d66u, 0x0000a634u, 0x0003003eu, 0x00005cdau, 0x00001cd0u, 0x0003003eu, 0x00005cdbu, 0x00001cdau, 0x00050041u, 0x00000038u, 0x00001e12u, 0x00001ce5u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001e13u, 0x00001e12u, 0x0003003eu, 0x00001d6bu, 0x00001e13u, 0x000500abu, 0x00000058u, 0x00001ec9u, 0x00001cd0u, 0x00000185u, 0x000300f7u, 0x00001ecau, 0x00000000u, 0x000400fau, 0x00001ec9u, 0x00001ecbu, 0x00001ecau, 0x000200f8u, 0x00001ecbu, 0x000500c4u, 0x00000008u, 0x00001eceu, 0x00000194u, 0x00001cd0u, 0x0003003eu, 0x00001ec5u, 0x00001eceu, 0x000500c7u, 0x00000008u, 0x00001ed1u, 0x00001cdau, 0x000001e0u, 0x000500abu, 0x00000058u, 0x00001ed2u, 0x00001ed1u, 0x00000185u, 0x000300f7u, 0x00001ed3u, 0x00000000u, 0x000400fau, 0x00001ed2u, 0x00001ed4u, 0x00001ed3u, 0x000200f8u, 0x00001ed4u, 0x000500c7u, 0x00000008u, 0x00001ed7u, 0x00001e13u, 0x00001eceu, 0x00050082u, 0x00000008u, 0x00001ed8u, 0x00001ed7u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00001ed9u, 0x00000001u, 0x0000002au, 0x00001ed8u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x00001edbu, 0x00001e13u, 0x00001ed9u, 0x0003003eu, 0x00001d6bu, 0x00001edbu, 0x000200f9u, 0x00001ed3u, 0x000200f8u, 0x00001ed3u, 0x000700f5u, 0x00000008u, 0x0000a644u, 0x00001e13u, 0x00001ecbu, 0x00001edbu, 0x00001ed4u, 0x00050082u, 0x00000008u, 0x00001eddu, 0x00001eceu, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00001edfu, 0x0000a644u, 0x00001eddu, 0x0003003eu, 0x00001d6bu, 0x00001edfu, 0x000200f9u, 0x00001ecau, 0x000200f8u, 0x00001ecau, 0x000700f5u, 0x00000008u, 0x0000a645u, 0x00001e13u, 0x00001eaeu, 0x00001edfu, 0x00001ed3u, 0x0003003eu, 0x00001ec6u, 0x0000a645u, 0x0003003eu, 0x00001d69u, 0x0000a645u, 0x0004007cu, 0x00000006u, 0x00001e1au, 0x0000a645u, 0x00050084u, 0x00000006u, 0x00001e1bu, 0x00001cb2u, 0x00001e1au, 0x00050080u, 0x00000006u, 0x00001e1cu, 0x00001cafu, 0x00001e1bu, 0x0003003eu, 0x00001d6cu, 0x00001e1cu, 0x00050084u, 0x00000006u, 0x00001e1eu, 0x00001e1cu, 0x0000032eu, 0x000500c4u, 0x00000008u, 0x00001e21u, 0x0000a634u, 0x00001d7eu, 0x0004007cu, 0x00000006u, 0x00001e22u, 0x00001e21u, 0x00050080u, 0x00000006u, 0x00001e23u, 0x00001e1eu, 0x00001e22u, 0x000500c7u, 0x00000006u, 0x00001e24u, 0x00001e23u, 0x00000a0au, 0x0003003eu, 0x00001d6du, 0x00001e24u, 0x000500c7u, 0x00000006u, 0x00001e27u, 0x00001e1au, 0x0000032au, 0x00050084u, 0x00000006u, 0x00001e28u, 0x00001e27u, 0x000002beu, 0x000500c6u, 0x00000006u, 0x00001e2au, 0x00001e24u, 0x00001e28u, 0x0003003eu, 0x00001d6du, 0x00001e2au, 0x000500c2u, 0x00000006u, 0x00001e2cu, 0x00001e2au, 0x0000032eu, 0x0003003eu, 0x00001d6eu, 0x00001e2cu, 0x0004007cu, 0x00000006u, 0x00001e2eu, 0x00001d85u, 0x000500c7u, 0x00000006u, 0x00001e30u, 0x00001e2cu, 0x00001e2eu, 0x0003003eu, 0x00001d6eu, 0x00001e30u, 0x000500c6u, 0x00000006u, 0x00001e33u, 0x00001e30u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00001e34u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001e33u, 0x0004003du, 0x000001adu, 0x00001e35u, 0x00001e34u, 0x00040071u, 0x00000006u, 0x00001e36u, 0x00001e35u, 0x0004007cu, 0x00000008u, 0x00001e37u, 0x00001e36u, 0x0003003eu, 0x00001d65u, 0x00001e37u, 0x000300f7u, 0x00001e39u, 0x00000000u, 0x000400fau, 0x00001921u, 0x00001e3au, 0x00001e39u, 0x000200f8u, 0x00001e3au, 0x000500aau, 0x00000058u, 0x00001e3du, 0x0000b1cfu, 0x00000185u, 0x000300f7u, 0x00001e3eu, 0x00000000u, 0x000400fau, 0x00001e3du, 0x00001e3fu, 0x00001e40u, 0x000200f8u, 0x00001e40u, 0x000500c7u, 0x00000006u, 0x00001e54u, 0x00001e2au, 0x0000032eu, 0x00050084u, 0x00000006u, 0x00001e55u, 0x000006bcu, 0x00001e54u, 0x00050082u, 0x00000006u, 0x00001e56u, 0x000002beu, 0x00001e55u, 0x000500c3u, 0x00000008u, 0x00001e58u, 0x00001e37u, 0x00001e56u, 0x0003003eu, 0x00001d65u, 0x00001e58u, 0x000500c7u, 0x00000008u, 0x00001e5au, 0x00001e58u, 0x000002eeu, 0x0003003eu, 0x00001d65u, 0x00001e5au, 0x000500c4u, 0x00000008u, 0x00001e5cu, 0x00001e5au, 0x00000197u, 0x0003003eu, 0x00001d65u, 0x00001e5cu, 0x00050080u, 0x00000008u, 0x00001e5fu, 0x00001e5cu, 0x00001d12u, 0x0003003eu, 0x00001d65u, 0x00001e5fu, 0x000200f9u, 0x00001e3eu, 0x000200f8u, 0x00001e3fu, 0x000500c7u, 0x00000006u, 0x00001e42u, 0x00001e2au, 0x00000331u, 0x00050084u, 0x00000006u, 0x00001e43u, 0x000006bcu, 0x00001e42u, 0x00050082u, 0x00000006u, 0x00001e44u, 0x00000ab2u, 0x00001e43u, 0x000500c3u, 0x00000008u, 0x00001e46u, 0x00001e37u, 0x00001e44u, 0x0003003eu, 0x00001d65u, 0x00001e46u, 0x000500c7u, 0x00000008u, 0x00001e48u, 0x00001e46u, 0x00000a5fu, 0x0003003eu, 0x00001d65u, 0x00001e48u, 0x000500c4u, 0x00000008u, 0x00001e4bu, 0x00001cc1u, 0x0000019du, 0x000500c5u, 0x00000008u, 0x00001e4du, 0x00001e48u, 0x00001e4bu, 0x0003003eu, 0x00001d65u, 0x00001e4du, 0x000500c4u, 0x00000008u, 0x00001e4fu, 0x00001e4du, 0x00000197u, 0x0003003eu, 0x00001d65u, 0x00001e4fu, 0x00050080u, 0x00000008u, 0x00001e52u, 0x00001e4fu, 0x00001d12u, 0x0003003eu, 0x00001d65u, 0x00001e52u, 0x000200f9u, 0x00001e3eu, 0x000200f8u, 0x00001e3eu, 0x000700f5u, 0x00000008u, 0x0000a666u, 0x00001e52u, 0x00001e3fu, 0x00001e5fu, 0x00001e40u, 0x000500c5u, 0x00000008u, 0x00001e62u, 0x0000a666u, 0x00000ad5u, 0x000500c6u, 0x00000008u, 0x00001e63u, 0x00001e62u, 0x00000194u, 0x00080041u, 0x000001f2u, 0x00001e64u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001e63u, 0x0004003du, 0x000001adu, 0x00001e65u, 0x00001e64u, 0x00040071u, 0x00000006u, 0x00001e66u, 0x00001e65u, 0x0004007cu, 0x00000008u, 0x00001e67u, 0x00001e66u, 0x0003003eu, 0x00001d65u, 0x00001e67u, 0x000200f9u, 0x00001e39u, 0x000200f8u, 0x00001e39u, 0x000700f5u, 0x00000008u, 0x0000a694u, 0x00001e37u, 0x00001ecau, 0x00001e67u, 0x00001e3eu, 0x000200f9u, 0x00001d87u, 0x000200f8u, 0x00001d88u, 0x00050084u, 0x00000008u, 0x00001d8bu, 0x00000197u, 0x00001d12u, 0x00050041u, 0x00000038u, 0x00001d8cu, 0x00001ce5u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00001d8du, 0x00001d8cu, 0x00050080u, 0x00000008u, 0x00001d8eu, 0x00001d8du, 0x00001d8bu, 0x0003003eu, 0x00001d8cu, 0x00001d8eu, 0x00110050u, 0x00000023u, 0x00005cf3u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x000059d9u, 0x00001cafu, 0x00001cb2u, 0x00005914u, 0x0000b1cfu, 0x00001cc1u, 0x00001cc6u, 0x00005914u, 0x00001cd0u, 0x00005914u, 0x00001cdau, 0x0003003eu, 0x00005cceu, 0x00001cc6u, 0x0003003eu, 0x00005ccfu, 0x00001cdau, 0x0004003du, 0x00000008u, 0x00001d92u, 0x00001d8cu, 0x0003003eu, 0x00001d5cu, 0x00001d92u, 0x00050050u, 0x0000004du, 0x00001e6du, 0x00001d92u, 0x00001d92u, 0x00050080u, 0x0000004du, 0x00001e6eu, 0x00001e6du, 0x00000634u, 0x0003003eu, 0x00001e69u, 0x00001e6eu, 0x000500abu, 0x00000058u, 0x00001e71u, 0x00001cc6u, 0x00000185u, 0x000300f7u, 0x00001e72u, 0x00000000u, 0x000400fau, 0x00001e71u, 0x00001e73u, 0x00001e72u, 0x000200f8u, 0x00001e73u, 0x000500c4u, 0x00000008u, 0x00001e76u, 0x00000194u, 0x00001cc6u, 0x0003003eu, 0x00001e6au, 0x00001e76u, 0x000500c7u, 0x00000008u, 0x00001e79u, 0x00001cdau, 0x00000197u, 0x000500abu, 0x00000058u, 0x00001e7au, 0x00001e79u, 0x00000185u, 0x000300f7u, 0x00001e7bu, 0x00000000u, 0x000400fau, 0x00001e7au, 0x00001e7cu, 0x00001e7bu, 0x000200f8u, 0x00001e7cu, 0x00050050u, 0x0000004du, 0x00001e7fu, 0x00001e76u, 0x00001e76u, 0x000500c7u, 0x0000004du, 0x00001e80u, 0x00001e6eu, 0x00001e7fu, 0x00050082u, 0x0000004du, 0x00001e82u, 0x00001e80u, 0x0000b1bau, 0x0007000cu, 0x0000004du, 0x00001e84u, 0x00000001u, 0x0000002au, 0x00001e82u, 0x00000488u, 0x000500c6u, 0x0000004du, 0x00001e86u, 0x00001e6eu, 0x00001e84u, 0x0003003eu, 0x00001e69u, 0x00001e86u, 0x000200f9u, 0x00001e7bu, 0x000200f8u, 0x00001e7bu, 0x000700f5u, 0x0000004du, 0x0000a668u, 0x00001e6eu, 0x00001e73u, 0x00001e86u, 0x00001e7cu, 0x00050082u, 0x00000008u, 0x00001e88u, 0x00001e76u, 0x00000194u, 0x00050050u, 0x0000004du, 0x00001e8au, 0x00001e88u, 0x00001e88u, 0x000500c7u, 0x0000004du, 0x00001e8bu, 0x0000a668u, 0x00001e8au, 0x0003003eu, 0x00001e69u, 0x00001e8bu, 0x000200f9u, 0x00001e72u, 0x000200f8u, 0x00001e72u, 0x000700f5u, 0x0000004du, 0x0000a669u, 0x00001e6eu, 0x00001d88u, 0x00001e8bu, 0x00001e7bu, 0x0003003eu, 0x00001e6bu, 0x0000a669u, 0x0003003eu, 0x00001d5au, 0x0000a669u, 0x0003003eu, 0x00005cd2u, 0x00001cd0u, 0x0003003eu, 0x00005cd3u, 0x00001cdau, 0x00050041u, 0x00000038u, 0x00001d95u, 0x00001ce5u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001d96u, 0x00001d95u, 0x0003003eu, 0x00001d5fu, 0x00001d96u, 0x000500abu, 0x00000058u, 0x00001e91u, 0x00001cd0u, 0x00000185u, 0x000300f7u, 0x00001e92u, 0x00000000u, 0x000400fau, 0x00001e91u, 0x00001e93u, 0x00001e92u, 0x000200f8u, 0x00001e93u, 0x000500c4u, 0x00000008u, 0x00001e96u, 0x00000194u, 0x00001cd0u, 0x0003003eu, 0x00001e8du, 0x00001e96u, 0x000500c7u, 0x00000008u, 0x00001e99u, 0x00001cdau, 0x000001e0u, 0x000500abu, 0x00000058u, 0x00001e9au, 0x00001e99u, 0x00000185u, 0x000300f7u, 0x00001e9bu, 0x00000000u, 0x000400fau, 0x00001e9au, 0x00001e9cu, 0x00001e9bu, 0x000200f8u, 0x00001e9cu, 0x000500c7u, 0x00000008u, 0x00001e9fu, 0x00001d96u, 0x00001e96u, 0x00050082u, 0x00000008u, 0x00001ea0u, 0x00001e9fu, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00001ea1u, 0x00000001u, 0x0000002au, 0x00001ea0u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x00001ea3u, 0x00001d96u, 0x00001ea1u, 0x0003003eu, 0x00001d5fu, 0x00001ea3u, 0x000200f9u, 0x00001e9bu, 0x000200f8u, 0x00001e9bu, 0x000700f5u, 0x00000008u, 0x0000a679u, 0x00001d96u, 0x00001e93u, 0x00001ea3u, 0x00001e9cu, 0x00050082u, 0x00000008u, 0x00001ea5u, 0x00001e96u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00001ea7u, 0x0000a679u, 0x00001ea5u, 0x0003003eu, 0x00001d5fu, 0x00001ea7u, 0x000200f9u, 0x00001e92u, 0x000200f8u, 0x00001e92u, 0x000700f5u, 0x00000008u, 0x0000a67au, 0x00001d96u, 0x00001e72u, 0x00001ea7u, 0x00001e9bu, 0x0003003eu, 0x00001e8eu, 0x0000a67au, 0x0003003eu, 0x00001d5du, 0x0000a67au, 0x0004007cu, 0x00000006u, 0x00001d9du, 0x0000a67au, 0x00050084u, 0x00000006u, 0x00001d9eu, 0x00001cb2u, 0x00001d9du, 0x00050080u, 0x00000006u, 0x00001d9fu, 0x00001cafu, 0x00001d9eu, 0x0003003eu, 0x00001d60u, 0x00001d9fu, 0x00050084u, 0x00000006u, 0x00001da1u, 0x00001d9fu, 0x0000032eu, 0x00050050u, 0x0000004du, 0x00001da4u, 0x00001d7eu, 0x00001d7eu, 0x000500c4u, 0x0000004du, 0x00001da5u, 0x0000a669u, 0x00001da4u, 0x0004007cu, 0x000000a0u, 0x00001da6u, 0x00001da5u, 0x00050050u, 0x000000a0u, 0x00001da7u, 0x00001da1u, 0x00001da1u, 0x00050080u, 0x000000a0u, 0x00001da8u, 0x00001da7u, 0x00001da6u, 0x000500c7u, 0x000000a0u, 0x00001daau, 0x00001da8u, 0x0000b1beu, 0x0003003eu, 0x00001d61u, 0x00001daau, 0x000500c7u, 0x00000006u, 0x00001dadu, 0x00001d9du, 0x0000032au, 0x00050084u, 0x00000006u, 0x00001daeu, 0x00001dadu, 0x000002beu, 0x0004003du, 0x000000a0u, 0x00001dafu, 0x00001d61u, 0x00050050u, 0x000000a0u, 0x00001db0u, 0x00001daeu, 0x00001daeu, 0x000500c6u, 0x000000a0u, 0x00001db1u, 0x00001dafu, 0x00001db0u, 0x0003003eu, 0x00001d61u, 0x00001db1u, 0x0004003du, 0x000000a0u, 0x00001db2u, 0x00001d61u, 0x000500c2u, 0x000000a0u, 0x00001db4u, 0x00001db2u, 0x0000b1bfu, 0x0003003eu, 0x00001d62u, 0x00001db4u, 0x0004007cu, 0x00000006u, 0x00001db6u, 0x00001d85u, 0x0004003du, 0x000000a0u, 0x00001db7u, 0x00001d62u, 0x00050050u, 0x000000a0u, 0x00001db8u, 0x00001db6u, 0x00001db6u, 0x000500c7u, 0x000000a0u, 0x00001db9u, 0x00001db7u, 0x00001db8u, 0x0003003eu, 0x00001d62u, 0x00001db9u, 0x00050041u, 0x00000007u, 0x00001dbbu, 0x00001d62u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001dbcu, 0x00001dbbu, 0x000500c6u, 0x00000006u, 0x00001dbdu, 0x00001dbcu, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00001dbeu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001dbdu, 0x0004003du, 0x000001adu, 0x00001dbfu, 0x00001dbeu, 0x00040071u, 0x00000006u, 0x00001dc0u, 0x00001dbfu, 0x0004007cu, 0x00000008u, 0x00001dc1u, 0x00001dc0u, 0x0003003eu, 0x00001d63u, 0x00001dc1u, 0x00050041u, 0x00000007u, 0x00001dc3u, 0x00001d62u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001dc4u, 0x00001dc3u, 0x000500c6u, 0x00000006u, 0x00001dc5u, 0x00001dc4u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00001dc6u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00001dc5u, 0x0004003du, 0x000001adu, 0x00001dc7u, 0x00001dc6u, 0x00040071u, 0x00000006u, 0x00001dc8u, 0x00001dc7u, 0x0004007cu, 0x00000008u, 0x00001dc9u, 0x00001dc8u, 0x0003003eu, 0x00001d64u, 0x00001dc9u, 0x000500aau, 0x00000058u, 0x00001dccu, 0x0000b1cfu, 0x00000194u, 0x000300f7u, 0x00001dcdu, 0x00000000u, 0x000400fau, 0x00001dccu, 0x00001dceu, 0x00001dcfu, 0x000200f8u, 0x00001dcfu, 0x000500aau, 0x00000058u, 0x00001de6u, 0x0000b1cfu, 0x00000185u, 0x000300f7u, 0x00001de7u, 0x00000000u, 0x000400fau, 0x00001de6u, 0x00001de8u, 0x00001de9u, 0x000200f8u, 0x00001de9u, 0x000500c3u, 0x00000008u, 0x00001e01u, 0x00001dc1u, 0x000001e0u, 0x0003003eu, 0x00001d63u, 0x00001e01u, 0x000500c3u, 0x00000008u, 0x00001e03u, 0x00001dc9u, 0x000001e0u, 0x0003003eu, 0x00001d64u, 0x00001e03u, 0x000200f9u, 0x00001de7u, 0x000200f8u, 0x00001de8u, 0x00050041u, 0x00000007u, 0x00001deau, 0x00001d61u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001debu, 0x00001deau, 0x000500c7u, 0x00000006u, 0x00001decu, 0x00001debu, 0x00000331u, 0x0004007cu, 0x00000008u, 0x00001dedu, 0x00001decu, 0x00050084u, 0x00000008u, 0x00001deeu, 0x0000019du, 0x00001dedu, 0x00050082u, 0x00000008u, 0x00001defu, 0x000001f8u, 0x00001deeu, 0x000500c3u, 0x00000008u, 0x00001df1u, 0x00001dc1u, 0x00001defu, 0x0003003eu, 0x00001d63u, 0x00001df1u, 0x00050041u, 0x00000007u, 0x00001df2u, 0x00001d61u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001df3u, 0x00001df2u, 0x000500c7u, 0x00000006u, 0x00001df4u, 0x00001df3u, 0x00000331u, 0x0004007cu, 0x00000008u, 0x00001df5u, 0x00001df4u, 0x00050084u, 0x00000008u, 0x00001df6u, 0x0000019du, 0x00001df5u, 0x00050082u, 0x00000008u, 0x00001df7u, 0x000001f8u, 0x00001df6u, 0x000500c3u, 0x00000008u, 0x00001df9u, 0x00001dc9u, 0x00001df7u, 0x0003003eu, 0x00001d64u, 0x00001df9u, 0x000500c7u, 0x00000008u, 0x00001dfbu, 0x00001df1u, 0x00000a5fu, 0x00050084u, 0x00000008u, 0x00001dfcu, 0x00001dfbu, 0x00000a61u, 0x0003003eu, 0x00001d63u, 0x00001dfcu, 0x000500c7u, 0x00000008u, 0x00001dfeu, 0x00001df9u, 0x00000a5fu, 0x00050084u, 0x00000008u, 0x00001dffu, 0x00001dfeu, 0x00000a61u, 0x0003003eu, 0x00001d64u, 0x00001dffu, 0x000200f9u, 0x00001de7u, 0x000200f8u, 0x00001de7u, 0x000700f5u, 0x00000008u, 0x0000a692u, 0x00001dffu, 0x00001de8u, 0x00001e03u, 0x00001de9u, 0x000700f5u, 0x00000008u, 0x0000a690u, 0x00001dfcu, 0x00001de8u, 0x00001e01u, 0x00001de9u, 0x000200f9u, 0x00001dcdu, 0x000200f8u, 0x00001dceu, 0x00050041u, 0x00000007u, 0x00001dd0u, 0x00001d61u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00001dd1u, 0x00001dd0u, 0x000500c7u, 0x00000006u, 0x00001dd2u, 0x00001dd1u, 0x0000032eu, 0x0004007cu, 0x00000008u, 0x00001dd3u, 0x00001dd2u, 0x00050084u, 0x00000008u, 0x00001dd4u, 0x0000019du, 0x00001dd3u, 0x00050082u, 0x00000008u, 0x00001dd5u, 0x000001e0u, 0x00001dd4u, 0x000500c3u, 0x00000008u, 0x00001dd7u, 0x00001dc1u, 0x00001dd5u, 0x0003003eu, 0x00001d63u, 0x00001dd7u, 0x00050041u, 0x00000007u, 0x00001dd8u, 0x00001d61u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00001dd9u, 0x00001dd8u, 0x000500c7u, 0x00000006u, 0x00001ddau, 0x00001dd9u, 0x0000032eu, 0x0004007cu, 0x00000008u, 0x00001ddbu, 0x00001ddau, 0x00050084u, 0x00000008u, 0x00001ddcu, 0x0000019du, 0x00001ddbu, 0x00050082u, 0x00000008u, 0x00001dddu, 0x000001e0u, 0x00001ddcu, 0x000500c3u, 0x00000008u, 0x00001ddfu, 0x00001dc9u, 0x00001dddu, 0x0003003eu, 0x00001d64u, 0x00001ddfu, 0x000500c7u, 0x00000008u, 0x00001de1u, 0x00001dd7u, 0x000002eeu, 0x0003003eu, 0x00001d63u, 0x00001de1u, 0x000500c7u, 0x00000008u, 0x00001de3u, 0x00001ddfu, 0x000002eeu, 0x0003003eu, 0x00001d64u, 0x00001de3u, 0x000200f9u, 0x00001dcdu, 0x000200f8u, 0x00001dcdu, 0x000700f5u, 0x00000008u, 0x0000a691u, 0x00001de3u, 0x00001dceu, 0x0000a692u, 0x00001de7u, 0x000700f5u, 0x00000008u, 0x0000a68fu, 0x00001de1u, 0x00001dceu, 0x0000a690u, 0x00001de7u, 0x000500c4u, 0x00000008u, 0x00001e05u, 0x0000a68fu, 0x000001e0u, 0x000500c5u, 0x00000008u, 0x00001e07u, 0x00001e05u, 0x0000a691u, 0x0003003eu, 0x00001d65u, 0x00001e07u, 0x000200f9u, 0x00001d87u, 0x000200f8u, 0x00001d87u, 0x000700f5u, 0x00000008u, 0x0000a693u, 0x00001e07u, 0x00001dcdu, 0x0000a694u, 0x00001e39u, 0x0003003eu, 0x00001d6fu, 0x0000a693u, 0x0003003eu, 0x00001ce2u, 0x0000a693u, 0x000500c7u, 0x00000008u, 0x00001d1au, 0x00001bf6u, 0x00000194u, 0x00050084u, 0x00000008u, 0x00001d1bu, 0x000001e0u, 0x00001d1au, 0x00050082u, 0x00000008u, 0x00001d1cu, 0x000001e0u, 0x00001d1bu, 0x000500c3u, 0x00000008u, 0x00001d1eu, 0x0000a693u, 0x00001d1cu, 0x0003003eu, 0x00001ce2u, 0x00001d1eu, 0x000500c7u, 0x00000008u, 0x00001d20u, 0x00001d1eu, 0x000002eeu, 0x0003003eu, 0x00001ce2u, 0x00001d20u, 0x000200f9u, 0x00001d0eu, 0x000200f8u, 0x00001d0eu, 0x000700f5u, 0x00000008u, 0x0000a6a4u, 0x00001d20u, 0x00001d87u, 0x0000a627u, 0x00001f13u, 0x000200f9u, 0x00001d08u, 0x000200f8u, 0x00001d09u, 0x0003003eu, 0x00001ce2u, 0x00000185u, 0x000200f9u, 0x00001d08u, 0x000200f8u, 0x00001d08u, 0x000700f5u, 0x00000008u, 0x0000a6a3u, 0x00000185u, 0x00001d09u, 0x0000a6a4u, 0x00001d0eu, 0x0003003eu, 0x00001cefu, 0x0000a6a3u, 0x0003003eu, 0x00001830u, 0x0000a6a3u, 0x0003003eu, 0x0000690eu, 0x0000a6a3u, 0x0003003eu, 0x0000690fu, 0x000002e0u, 0x000300f7u, 0x000019acu, 0x00000000u, 0x000400fau, 0x0000194bu, 0x000019adu, 0x000019acu, 0x000200f8u, 0x000019adu, 0x000500aau, 0x00000058u, 0x000019b0u, 0x00001d06u, 0x00000197u, 0x000200f9u, 0x000019acu, 0x000200f8u, 0x000019acu, 0x000700f5u, 0x00000058u, 0x000019b1u, 0x0000194bu, 0x00001d08u, 0x000019b0u, 0x000019adu, 0x000300f7u, 0x000019b2u, 0x00000000u, 0x000400fau, 0x000019b1u, 0x000019b3u, 0x000019b2u, 0x000200f8u, 0x000019b3u, 0x000500c7u, 0x00000008u, 0x000019b5u, 0x0000a6a3u, 0x00000194u, 0x000500aau, 0x00000058u, 0x000019b6u, 0x000019b5u, 0x00000185u, 0x000200f9u, 0x000019b2u, 0x000200f8u, 0x000019b2u, 0x000700f5u, 0x00000058u, 0x000019b7u, 0x000019b1u, 0x000019acu, 0x000019b6u, 0x000019b3u, 0x000300f7u, 0x000019b8u, 0x00000000u, 0x000400fau, 0x000019b7u, 0x000019b9u, 0x000019b8u, 0x000200f8u, 0x000019b9u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000019b8u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x000004a4u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x00001979u, 0x0003003eu, 0x00001838u, 0x00001b6cu, 0x0003003eu, 0x00001839u, 0x00001b71u, 0x0003003eu, 0x0000183au, 0x00006a56u, 0x000500c4u, 0x00000008u, 0x00002078u, 0x00006a56u, 0x0000019au, 0x00070050u, 0x00000009u, 0x00002079u, 0x00002078u, 0x00002078u, 0x00002078u, 0x00002078u, 0x00050080u, 0x00000009u, 0x0000207au, 0x000002f3u, 0x00002079u, 0x0003003eu, 0x0000206du, 0x0000207au, 0x0009004fu, 0x00000009u, 0x0000207du, 0x00001b6cu, 0x00001b6cu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b1u, 0x000002f8u, 0x0000207eu, 0x0000207au, 0x0000207du, 0x0003003eu, 0x0000206eu, 0x0000207eu, 0x0009004fu, 0x00000009u, 0x00002081u, 0x00001b6cu, 0x00001b6cu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b1u, 0x000002f8u, 0x00002082u, 0x0000207au, 0x00002081u, 0x0003003eu, 0x0000206fu, 0x00002082u, 0x0009004fu, 0x00000009u, 0x00002085u, 0x00001b71u, 0x00001b71u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500afu, 0x000002f8u, 0x00002086u, 0x0000207au, 0x00002085u, 0x0003003eu, 0x00002070u, 0x00002086u, 0x0009004fu, 0x00000009u, 0x00002089u, 0x00001b71u, 0x00001b71u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500afu, 0x000002f8u, 0x0000208au, 0x0000207au, 0x00002089u, 0x0003003eu, 0x00002071u, 0x0000208au, 0x000600a9u, 0x00000009u, 0x0000208cu, 0x0000207eu, 0x00000311u, 0x00000310u, 0x000600a9u, 0x00000009u, 0x0000208eu, 0x00002086u, 0x00000311u, 0x00000310u, 0x000500c5u, 0x00000009u, 0x0000208fu, 0x0000208cu, 0x0000208eu, 0x0003003eu, 0x00002072u, 0x0000208fu, 0x000600a9u, 0x00000009u, 0x00002091u, 0x00002082u, 0x00000311u, 0x00000310u, 0x000600a9u, 0x00000009u, 0x00002093u, 0x0000208au, 0x00000311u, 0x00000310u, 0x000500c5u, 0x00000009u, 0x00002094u, 0x00002091u, 0x00002093u, 0x0003003eu, 0x00002073u, 0x00002094u, 0x00050084u, 0x00000009u, 0x00002096u, 0x0000208fu, 0x0000031eu, 0x00050084u, 0x00000009u, 0x00002098u, 0x00002094u, 0x00000324u, 0x00050080u, 0x00000009u, 0x00002099u, 0x00002096u, 0x00002098u, 0x0003003eu, 0x00002074u, 0x00002099u, 0x00050041u, 0x00000038u, 0x0000209au, 0x00002074u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000209bu, 0x0000209au, 0x00050041u, 0x00000038u, 0x0000209cu, 0x00002074u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000209du, 0x0000209cu, 0x000500c5u, 0x00000008u, 0x0000209eu, 0x0000209bu, 0x0000209du, 0x00050041u, 0x00000038u, 0x0000209fu, 0x00002074u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000020a0u, 0x0000209fu, 0x00050041u, 0x00000038u, 0x000020a1u, 0x00002074u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000020a2u, 0x000020a1u, 0x000500c5u, 0x00000008u, 0x000020a3u, 0x000020a0u, 0x000020a2u, 0x000500c5u, 0x00000008u, 0x000020a4u, 0x0000209eu, 0x000020a3u, 0x0003003eu, 0x00002075u, 0x000020a4u, 0x000400c8u, 0x00000008u, 0x000020a6u, 0x000020a4u, 0x000500c7u, 0x00000008u, 0x000020a7u, 0x000020a6u, 0x000002eeu, 0x0003003eu, 0x00002076u, 0x000020a7u, 0x0003003eu, 0x00001837u, 0x000020a7u, 0x000500aau, 0x00000058u, 0x000019d0u, 0x000020a7u, 0x00000185u, 0x000300f7u, 0x000019d1u, 0x00000000u, 0x000400fau, 0x000019d0u, 0x000019d2u, 0x000019d1u, 0x000200f8u, 0x000019d2u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000019d1u, 0x000400cdu, 0x00000008u, 0x000019d4u, 0x000020a7u, 0x0003003eu, 0x0000183bu, 0x000019d4u, 0x000400a8u, 0x00000058u, 0x000019d6u, 0x0000193cu, 0x000300f7u, 0x000019d7u, 0x00000000u, 0x000400fau, 0x000019d6u, 0x000019d8u, 0x000019d7u, 0x000200f8u, 0x000019d8u, 0x000500c7u, 0x00000008u, 0x000019dau, 0x000020a7u, 0x00000194u, 0x000500aau, 0x00000058u, 0x000019dbu, 0x000019dau, 0x00000185u, 0x000200f9u, 0x000019d7u, 0x000200f8u, 0x000019d7u, 0x000700f5u, 0x00000058u, 0x000019dcu, 0x000019d6u, 0x000019d1u, 0x000019dbu, 0x000019d8u, 0x000300f7u, 0x000019ddu, 0x00000000u, 0x000400fau, 0x000019dcu, 0x000019deu, 0x000019ddu, 0x000200f8u, 0x000019deu, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000019ddu, 0x0003003eu, 0x0000183du, 0x0000178cu, 0x00070041u, 0x000001b6u, 0x000020aau, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x00000185u, 0x0004003du, 0x000001acu, 0x000020abu, 0x000020aau, 0x00040071u, 0x000001b9u, 0x000020acu, 0x000020abu, 0x0004007cu, 0x00000009u, 0x000020adu, 0x000020acu, 0x00070041u, 0x000001b6u, 0x000020afu, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x00000194u, 0x0004003du, 0x000001acu, 0x000020b0u, 0x000020afu, 0x00040071u, 0x000001b9u, 0x000020b1u, 0x000020b0u, 0x0004007cu, 0x00000009u, 0x000020b2u, 0x000020b1u, 0x00070041u, 0x000001b6u, 0x000020b4u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x00000197u, 0x0004003du, 0x000001acu, 0x000020b5u, 0x000020b4u, 0x00040071u, 0x000001b9u, 0x000020b6u, 0x000020b5u, 0x0004007cu, 0x00000009u, 0x000020b7u, 0x000020b6u, 0x00070041u, 0x000001b6u, 0x000020b9u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x0000019au, 0x0004003du, 0x000001acu, 0x000020bau, 0x000020b9u, 0x00040071u, 0x000001b9u, 0x000020bbu, 0x000020bau, 0x0004007cu, 0x00000009u, 0x000020bcu, 0x000020bbu, 0x00070041u, 0x000001b6u, 0x000020beu, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x0000019du, 0x0004003du, 0x000001acu, 0x000020bfu, 0x000020beu, 0x00040071u, 0x000001b9u, 0x000020c0u, 0x000020bfu, 0x0004007cu, 0x00000009u, 0x000020c1u, 0x000020c0u, 0x00070041u, 0x000001b6u, 0x000020c3u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001a0u, 0x0004003du, 0x000001acu, 0x000020c4u, 0x000020c3u, 0x00040071u, 0x000001b9u, 0x000020c5u, 0x000020c4u, 0x0004007cu, 0x00000009u, 0x000020c6u, 0x000020c5u, 0x00070041u, 0x000001b6u, 0x000020c8u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001a3u, 0x0004003du, 0x000001acu, 0x000020c9u, 0x000020c8u, 0x00040071u, 0x000001b9u, 0x000020cau, 0x000020c9u, 0x0004007cu, 0x00000009u, 0x000020cbu, 0x000020cau, 0x00070041u, 0x000001b6u, 0x000020cdu, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001a6u, 0x0004003du, 0x000001acu, 0x000020ceu, 0x000020cdu, 0x00040071u, 0x000001b9u, 0x000020cfu, 0x000020ceu, 0x0004007cu, 0x00000009u, 0x000020d0u, 0x000020cfu, 0x00070041u, 0x000001b6u, 0x000020d2u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001e0u, 0x0004003du, 0x000001acu, 0x000020d3u, 0x000020d2u, 0x00040071u, 0x000001b9u, 0x000020d4u, 0x000020d3u, 0x0004007cu, 0x00000009u, 0x000020d5u, 0x000020d4u, 0x00070041u, 0x000001b6u, 0x000020d7u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001e6u, 0x0004003du, 0x000001acu, 0x000020d8u, 0x000020d7u, 0x00040071u, 0x000001b9u, 0x000020d9u, 0x000020d8u, 0x0004007cu, 0x00000009u, 0x000020dau, 0x000020d9u, 0x00070041u, 0x000001edu, 0x000020dcu, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001ecu, 0x0004003du, 0x00000006u, 0x000020ddu, 0x000020dcu, 0x00070041u, 0x000001f2u, 0x000020dfu, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001f1u, 0x0004003du, 0x000001adu, 0x000020e0u, 0x000020dfu, 0x00040071u, 0x00000006u, 0x000020e1u, 0x000020e0u, 0x0004007cu, 0x00000008u, 0x000020e2u, 0x000020e1u, 0x00070041u, 0x000001f9u, 0x000020e4u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001f8u, 0x0004003du, 0x000001abu, 0x000020e5u, 0x000020e4u, 0x00040071u, 0x00000006u, 0x000020e6u, 0x000020e5u, 0x0004007cu, 0x00000008u, 0x000020e7u, 0x000020e6u, 0x00070041u, 0x000001f9u, 0x000020e9u, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x000001ffu, 0x0004003du, 0x000001abu, 0x000020eau, 0x000020e9u, 0x00040071u, 0x00000006u, 0x000020ebu, 0x000020eau, 0x0004007cu, 0x00000008u, 0x000020ecu, 0x000020ebu, 0x00070041u, 0x00000206u, 0x000020eeu, 0x000001b4u, 0x00000185u, 0x0000178cu, 0x00000205u, 0x0004003du, 0x000001afu, 0x000020efu, 0x000020eeu, 0x00040072u, 0x00000009u, 0x000020f0u, 0x000020efu, 0x00120050u, 0x0000000fu, 0x000020f1u, 0x000020adu, 0x000020b2u, 0x000020b7u, 0x000020bcu, 0x000020c1u, 0x000020c6u, 0x000020cbu, 0x000020d0u, 0x000020d5u, 0x000020dau, 0x000020ddu, 0x000020e2u, 0x000020e7u, 0x000020ecu, 0x000020f0u, 0x0003003eu, 0x00005c90u, 0x000020adu, 0x0003003eu, 0x00005c91u, 0x000020b2u, 0x0003003eu, 0x00005c92u, 0x000020b7u, 0x0003003eu, 0x00005c93u, 0x000020bcu, 0x0003003eu, 0x00005c94u, 0x000020c1u, 0x0003003eu, 0x00005c95u, 0x000020c6u, 0x0003003eu, 0x00005c96u, 0x000020cbu, 0x0003003eu, 0x00005c97u, 0x000020d0u, 0x0003003eu, 0x00005c98u, 0x000020d5u, 0x0003003eu, 0x00005c99u, 0x000020dau, 0x0003003eu, 0x00005c9au, 0x000020ddu, 0x0003003eu, 0x00005c9bu, 0x000020e2u, 0x0003003eu, 0x00005c9cu, 0x000020e7u, 0x0003003eu, 0x00005c9du, 0x000020ecu, 0x0003003eu, 0x00005c9eu, 0x000020f0u, 0x0003003eu, 0x00005e6fu, 0x000020adu, 0x0003003eu, 0x00005e70u, 0x000020b2u, 0x0003003eu, 0x00005e71u, 0x000020b7u, 0x0003003eu, 0x00005e72u, 0x000020bcu, 0x0003003eu, 0x00005e73u, 0x000020c1u, 0x0003003eu, 0x00005e74u, 0x000020c6u, 0x0003003eu, 0x00005e75u, 0x000020cbu, 0x0003003eu, 0x00005e76u, 0x000020d0u, 0x0003003eu, 0x00005e77u, 0x000020dau, 0x0003003eu, 0x00005e78u, 0x000020ecu, 0x0003003eu, 0x00005e79u, 0x000020f0u, 0x00050082u, 0x00000008u, 0x000019e4u, 0x00006a56u, 0x00001b74u, 0x0003003eu, 0x0000183eu, 0x000019e4u, 0x000600a9u, 0x00000008u, 0x000019e6u, 0x00001977u, 0x00000194u, 0x00000535u, 0x0003003eu, 0x0000183fu, 0x000019e6u, 0x0003003eu, 0x00001841u, 0x00001b64u, 0x0003003eu, 0x00001842u, 0x00001b8cu, 0x0003003eu, 0x00001843u, 0x00001b90u, 0x0003003eu, 0x00001844u, 0x000019e4u, 0x0003003eu, 0x00001845u, 0x000020a7u, 0x000500c7u, 0x00000009u, 0x000020fau, 0x00001b8cu, 0x0000b1b7u, 0x00070050u, 0x00000009u, 0x000020fbu, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000500c3u, 0x00000009u, 0x000020fcu, 0x000020fau, 0x000020fbu, 0x00070050u, 0x00000009u, 0x000020feu, 0x000019e4u, 0x000019e4u, 0x000019e4u, 0x000019e4u, 0x00050084u, 0x00000009u, 0x000020ffu, 0x000020fcu, 0x000020feu, 0x00050080u, 0x00000009u, 0x00002101u, 0x00001b64u, 0x000020ffu, 0x0003003eu, 0x00001841u, 0x00002101u, 0x000500c3u, 0x00000009u, 0x00002104u, 0x00002101u, 0x0000b1b8u, 0x00050051u, 0x00000008u, 0x00002105u, 0x00002104u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002106u, 0x00002104u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002107u, 0x00002104u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00002108u, 0x00002104u, 0x00000003u, 0x0003003eu, 0x000020f2u, 0x00002104u, 0x0006000cu, 0x00000008u, 0x0000210bu, 0x00000001u, 0x00000049u, 0x000020a7u, 0x0003003eu, 0x000020f3u, 0x0000210bu, 0x000500c3u, 0x00000008u, 0x0000210du, 0x0000210bu, 0x00000194u, 0x0003003eu, 0x000020f4u, 0x0000210du, 0x000500c7u, 0x00000008u, 0x0000210fu, 0x0000210bu, 0x00000194u, 0x000500c4u, 0x00000008u, 0x00002110u, 0x0000210fu, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00002112u, 0x0000210du, 0x00000194u, 0x00050080u, 0x00000008u, 0x00002113u, 0x00002110u, 0x00002112u, 0x0003003eu, 0x000020f5u, 0x00002113u, 0x00070050u, 0x00000009u, 0x00002115u, 0x000004ebu, 0x000004ebu, 0x000004ebu, 0x000004ebu, 0x000500c4u, 0x00000009u, 0x00002116u, 0x00002104u, 0x00002115u, 0x0003003eu, 0x000020f2u, 0x00002116u, 0x000500c3u, 0x00000009u, 0x0000211au, 0x00001b8cu, 0x0000b1b8u, 0x00050051u, 0x00000008u, 0x0000211bu, 0x0000211au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000211cu, 0x0000211au, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000211du, 0x0000211au, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000211eu, 0x0000211au, 0x00000003u, 0x00070050u, 0x00000009u, 0x00002120u, 0x00002113u, 0x00002113u, 0x00002113u, 0x00002113u, 0x00050084u, 0x00000009u, 0x00002121u, 0x00002120u, 0x0000211au, 0x000500c3u, 0x00000009u, 0x00002125u, 0x00001b90u, 0x0000b1b8u, 0x00050051u, 0x00000008u, 0x00002126u, 0x00002125u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002127u, 0x00002125u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002128u, 0x00002125u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00002129u, 0x00002125u, 0x00000003u, 0x00070050u, 0x00000009u, 0x0000212bu, 0x0000210du, 0x0000210du, 0x0000210du, 0x0000210du, 0x00050084u, 0x00000009u, 0x0000212cu, 0x0000212bu, 0x00002125u, 0x00050080u, 0x00000009u, 0x0000212du, 0x00002121u, 0x0000212cu, 0x00050080u, 0x00000009u, 0x0000212fu, 0x00002116u, 0x0000212du, 0x0003003eu, 0x000020f2u, 0x0000212fu, 0x00070050u, 0x00000009u, 0x00002131u, 0x00000508u, 0x00000508u, 0x00000508u, 0x00000508u, 0x000500c3u, 0x00000009u, 0x00002132u, 0x0000212fu, 0x00002131u, 0x0003003eu, 0x000020f2u, 0x00002132u, 0x0003003eu, 0x000020f6u, 0x00002132u, 0x0003003eu, 0x00002135u, 0x00002132u, 0x00050082u, 0x00000009u, 0x00002141u, 0x00002132u, 0x0000b1b9u, 0x0003003eu, 0x00002135u, 0x00002141u, 0x000600cau, 0x00000009u, 0x00002143u, 0x00002141u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00002135u, 0x00002143u, 0x00050080u, 0x00000009u, 0x00002146u, 0x00002143u, 0x0000b1b9u, 0x0003003eu, 0x00002135u, 0x00002146u, 0x0008000cu, 0x00000009u, 0x00002148u, 0x00000001u, 0x0000002du, 0x00002146u, 0x00000310u, 0x00000344u, 0x00050051u, 0x00000008u, 0x00002149u, 0x00002148u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000214au, 0x00002148u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000214bu, 0x00002148u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000214cu, 0x00002148u, 0x00000003u, 0x0003003eu, 0x0000213eu, 0x00002148u, 0x0003003eu, 0x00002136u, 0x00002148u, 0x0003003eu, 0x000020f7u, 0x00002148u, 0x0003003eu, 0x00001840u, 0x00002148u, 0x0003003eu, 0x00001846u, 0x00001084u, 0x0003003eu, 0x00001847u, 0x000019e6u, 0x000500a7u, 0x00000058u, 0x000019f2u, 0x00001586u, 0x0000195du, 0x000300f7u, 0x000019f3u, 0x00000000u, 0x000400fau, 0x000019f2u, 0x000019f4u, 0x000019f3u, 0x000200f8u, 0x000019f4u, 0x000500c7u, 0x00000006u, 0x000019f6u, 0x000018d5u, 0x0000037bu, 0x000500abu, 0x00000058u, 0x000019f7u, 0x000019f6u, 0x000002d7u, 0x000300f7u, 0x000019f8u, 0x00000000u, 0x000400fau, 0x000019f7u, 0x000019f9u, 0x000019f8u, 0x000200f8u, 0x000019f9u, 0x00050084u, 0x00000008u, 0x000019fbu, 0x000019e6u, 0x00000594u, 0x0003003eu, 0x00001847u, 0x000019fbu, 0x000200f9u, 0x000019f8u, 0x000200f8u, 0x000019f8u, 0x000700f5u, 0x00000008u, 0x00006a94u, 0x000019e6u, 0x000019f4u, 0x000019fbu, 0x000019f9u, 0x000200f9u, 0x000019f3u, 0x000200f8u, 0x000019f3u, 0x000700f5u, 0x00000008u, 0x00006a93u, 0x000019e6u, 0x000019ddu, 0x00006a94u, 0x000019f8u, 0x0003003eu, 0x0000184cu, 0x00001b67u, 0x0003003eu, 0x0000184du, 0x00001b94u, 0x0003003eu, 0x0000184eu, 0x00001b98u, 0x0003003eu, 0x0000184fu, 0x000019e4u, 0x0003003eu, 0x00001850u, 0x000020a7u, 0x0003003eu, 0x00001851u, 0x00001930u, 0x0003003eu, 0x00001852u, 0x0000195du, 0x0003003eu, 0x00001853u, 0x00006a93u, 0x0003003eu, 0x00001858u, 0x00001084u, 0x0004003du, 0x00000009u, 0x0000215fu, 0x0000184cu, 0x0008004fu, 0x00000052u, 0x00002160u, 0x0000215fu, 0x0000215fu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00002161u, 0x0000184du, 0x0008004fu, 0x00000052u, 0x00002162u, 0x00002161u, 0x00002161u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x00002164u, 0x00002162u, 0x0000b1b5u, 0x00060050u, 0x00000052u, 0x00002165u, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000500c3u, 0x00000052u, 0x00002166u, 0x00002164u, 0x00002165u, 0x00060050u, 0x00000052u, 0x00002168u, 0x000019e4u, 0x000019e4u, 0x000019e4u, 0x00050084u, 0x00000052u, 0x00002169u, 0x00002166u, 0x00002168u, 0x00050080u, 0x00000052u, 0x0000216au, 0x00002160u, 0x00002169u, 0x0003003eu, 0x0000214eu, 0x0000216au, 0x000300f7u, 0x0000216cu, 0x00000000u, 0x000400fau, 0x0000195du, 0x0000216du, 0x0000216cu, 0x000200f8u, 0x0000216du, 0x0004003du, 0x00000009u, 0x00002170u, 0x0000184du, 0x0008004fu, 0x00000052u, 0x00002171u, 0x00002170u, 0x00002170u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x00002173u, 0x00002171u, 0x0000b1b5u, 0x000500c3u, 0x00000052u, 0x00002175u, 0x00002173u, 0x00002165u, 0x00060050u, 0x00000052u, 0x00002176u, 0x00006a93u, 0x00006a93u, 0x00006a93u, 0x00050084u, 0x00000052u, 0x00002177u, 0x00002176u, 0x00002175u, 0x00050080u, 0x00000052u, 0x00002178u, 0x0000216au, 0x00002177u, 0x0003003eu, 0x0000214fu, 0x00002178u, 0x000300f7u, 0x00002179u, 0x00000000u, 0x000400fau, 0x00000595u, 0x0000217au, 0x0000217bu, 0x000200f8u, 0x0000217bu, 0x0004003du, 0x00000009u, 0x00002189u, 0x0000184eu, 0x0008004fu, 0x00000052u, 0x0000218au, 0x00002189u, 0x00002189u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x0000218cu, 0x0000218au, 0x0000b1bbu, 0x000500c3u, 0x00000052u, 0x0000218eu, 0x0000218cu, 0x00002165u, 0x00050080u, 0x00000052u, 0x0000218fu, 0x0000216au, 0x0000218eu, 0x0003003eu, 0x00002150u, 0x0000218fu, 0x000200f9u, 0x00002179u, 0x000200f8u, 0x0000217au, 0x0006000cu, 0x00000008u, 0x0000217eu, 0x00000001u, 0x00000005u, 0x00006a93u, 0x0004003du, 0x00000009u, 0x0000217fu, 0x0000184eu, 0x0008004fu, 0x00000052u, 0x00002180u, 0x0000217fu, 0x0000217fu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x00002182u, 0x00002180u, 0x0000b1bbu, 0x000500c3u, 0x00000052u, 0x00002184u, 0x00002182u, 0x00002165u, 0x00060050u, 0x00000052u, 0x00002185u, 0x0000217eu, 0x0000217eu, 0x0000217eu, 0x00050084u, 0x00000052u, 0x00002186u, 0x00002185u, 0x00002184u, 0x00050080u, 0x00000052u, 0x00002187u, 0x0000216au, 0x00002186u, 0x0003003eu, 0x00002150u, 0x00002187u, 0x000200f9u, 0x00002179u, 0x000200f8u, 0x00002179u, 0x000700f5u, 0x00000052u, 0x00006ab1u, 0x00002187u, 0x0000217au, 0x0000218fu, 0x0000217bu, 0x000200f9u, 0x0000216cu, 0x000200f8u, 0x0000216cu, 0x000700f5u, 0x00000052u, 0x00006aa8u, 0x00006aa4u, 0x000019f3u, 0x00006ab1u, 0x00002179u, 0x000700f5u, 0x00000052u, 0x00006a9du, 0x00006aa4u, 0x000019f3u, 0x00002178u, 0x00002179u, 0x000300f7u, 0x00002191u, 0x00000000u, 0x000400fau, 0x00001930u, 0x00002192u, 0x00002193u, 0x000200f8u, 0x00002193u, 0x000500c3u, 0x00000052u, 0x000021abu, 0x0000216au, 0x0000b1b6u, 0x0003003eu, 0x00002157u, 0x000021abu, 0x0007004fu, 0x0000004du, 0x0000237au, 0x000021abu, 0x000021abu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002378u, 0x0000237au, 0x0003003eu, 0x00001854u, 0x0000237au, 0x000300f7u, 0x000021aeu, 0x00000000u, 0x000400fau, 0x0000195du, 0x000021afu, 0x000021aeu, 0x000200f8u, 0x000021afu, 0x000500c3u, 0x00000052u, 0x000021b2u, 0x00006a9du, 0x0000b1b6u, 0x0003003eu, 0x00002158u, 0x000021b2u, 0x0007004fu, 0x0000004du, 0x0000237du, 0x000021b2u, 0x000021b2u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000237bu, 0x0000237du, 0x0003003eu, 0x00001855u, 0x0000237du, 0x000500c3u, 0x00000052u, 0x000021b6u, 0x00006aa8u, 0x0000b1b6u, 0x0003003eu, 0x00002159u, 0x000021b6u, 0x0007004fu, 0x0000004du, 0x00002380u, 0x000021b6u, 0x000021b6u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000237eu, 0x00002380u, 0x0003003eu, 0x00001856u, 0x00002380u, 0x000200f9u, 0x000021aeu, 0x000200f8u, 0x000021aeu, 0x000700f5u, 0x0000004du, 0x00006b9bu, 0x00006b72u, 0x00002193u, 0x00002380u, 0x000021afu, 0x000700f5u, 0x0000004du, 0x00006b85u, 0x00006b72u, 0x00002193u, 0x0000237du, 0x000021afu, 0x000200f9u, 0x00002191u, 0x000200f8u, 0x00002192u, 0x000500c3u, 0x00000052u, 0x00002196u, 0x0000216au, 0x0000b1b6u, 0x0003003eu, 0x00002151u, 0x00002196u, 0x0003003eu, 0x00002152u, 0x00001084u, 0x00050041u, 0x00000038u, 0x000021f0u, 0x00002151u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000021f1u, 0x000021f0u, 0x0003003eu, 0x000021e6u, 0x000021f1u, 0x000500b3u, 0x00000058u, 0x000021f3u, 0x000021f1u, 0x00000185u, 0x0003003eu, 0x000021e7u, 0x000021f3u, 0x000500c7u, 0x00000008u, 0x000021f5u, 0x000021f1u, 0x0000045cu, 0x0003003eu, 0x000021e6u, 0x000021f5u, 0x0003003eu, 0x000021e9u, 0x000021f5u, 0x0006000cu, 0x00000008u, 0x00002251u, 0x00000001u, 0x0000004au, 0x000021f5u, 0x00050082u, 0x00000008u, 0x00002252u, 0x00000205u, 0x00002251u, 0x0007000cu, 0x00000008u, 0x00002253u, 0x00000001u, 0x00000027u, 0x00002252u, 0x00000205u, 0x0003003eu, 0x00002249u, 0x00002253u, 0x000500c4u, 0x00000008u, 0x00002256u, 0x000021f5u, 0x00002253u, 0x000500c7u, 0x00000008u, 0x00002257u, 0x00002256u, 0x00000375u, 0x0003003eu, 0x0000224au, 0x00002257u, 0x000500c7u, 0x00000008u, 0x00002259u, 0x00002257u, 0x000002eeu, 0x0003003eu, 0x0000224bu, 0x00002259u, 0x000500c3u, 0x00000008u, 0x0000225bu, 0x00002257u, 0x000001e0u, 0x0003003eu, 0x0000224du, 0x0000043au, 0x00050041u, 0x00000068u, 0x0000225cu, 0x0000224du, 0x0000225bu, 0x0004003du, 0x0000004du, 0x0000225du, 0x0000225cu, 0x00050051u, 0x00000008u, 0x0000225eu, 0x0000225du, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000225fu, 0x0000225du, 0x00000001u, 0x0003003eu, 0x0000224cu, 0x0000225du, 0x00050041u, 0x00000038u, 0x00002261u, 0x0000224cu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00002262u, 0x00002261u, 0x00050084u, 0x00000008u, 0x00002264u, 0x00002262u, 0x00002259u, 0x000500c3u, 0x00000008u, 0x00002265u, 0x00002264u, 0x000001ecu, 0x00050041u, 0x00000038u, 0x00002266u, 0x0000224cu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002267u, 0x00002266u, 0x00050080u, 0x00000008u, 0x00002268u, 0x00002265u, 0x00002267u, 0x0003003eu, 0x0000224eu, 0x00002268u, 0x00050050u, 0x0000004du, 0x0000226bu, 0x00002268u, 0x00002253u, 0x0003003eu, 0x0000224fu, 0x0000226bu, 0x0003003eu, 0x000021e8u, 0x0000226bu, 0x00050041u, 0x00000038u, 0x000021f8u, 0x000021e8u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000021f9u, 0x000021f8u, 0x0003003eu, 0x000021eau, 0x000021f9u, 0x0004003du, 0x00000052u, 0x000021fau, 0x00002151u, 0x0007004fu, 0x0000004du, 0x000021fbu, 0x000021fau, 0x000021fau, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x000021fcu, 0x000021e8u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000021fdu, 0x000021fcu, 0x00050050u, 0x0000004du, 0x000021feu, 0x000021fdu, 0x000021fdu, 0x00050084u, 0x0000004du, 0x000021ffu, 0x000021fbu, 0x000021feu, 0x0003003eu, 0x000021ebu, 0x000021ffu, 0x000500c3u, 0x00000008u, 0x00002201u, 0x0000046fu, 0x000021f9u, 0x0004007eu, 0x00000008u, 0x00002202u, 0x00002201u, 0x000500c7u, 0x00000008u, 0x00002203u, 0x0000046eu, 0x00002202u, 0x0003003eu, 0x000021ecu, 0x00002203u, 0x0004003du, 0x0000004du, 0x00002204u, 0x000021ebu, 0x00050050u, 0x0000004du, 0x00002206u, 0x00002203u, 0x00002203u, 0x000500c7u, 0x0000004du, 0x00002207u, 0x00002204u, 0x00002206u, 0x0003003eu, 0x000021edu, 0x00002207u, 0x000500abu, 0x00000058u, 0x00002209u, 0x000021f9u, 0x00000205u, 0x000300f7u, 0x0000220au, 0x00000000u, 0x000400fau, 0x00002209u, 0x0000220bu, 0x0000220cu, 0x000200f8u, 0x0000220cu, 0x0004003du, 0x0000004du, 0x00002212u, 0x000021ebu, 0x000500c4u, 0x0000004du, 0x00002214u, 0x00002212u, 0x0000b1bau, 0x0003003eu, 0x000021eeu, 0x00002214u, 0x000200f9u, 0x0000220au, 0x000200f8u, 0x0000220bu, 0x0004003du, 0x0000004du, 0x0000220du, 0x000021ebu, 0x00050082u, 0x00000008u, 0x0000220fu, 0x000001ffu, 0x000021f9u, 0x00050050u, 0x0000004du, 0x00002210u, 0x0000220fu, 0x0000220fu, 0x000500c3u, 0x0000004du, 0x00002211u, 0x0000220du, 0x00002210u, 0x0003003eu, 0x000021ebu, 0x00002211u, 0x0003003eu, 0x000021eeu, 0x00002211u, 0x000200f9u, 0x0000220au, 0x000200f8u, 0x0000220au, 0x0004003du, 0x0000004du, 0x00002215u, 0x000021edu, 0x000500abu, 0x00000489u, 0x00002216u, 0x00002215u, 0x00000488u, 0x0004009au, 0x00000058u, 0x00002217u, 0x00002216u, 0x000300f7u, 0x00002218u, 0x00000000u, 0x000400fau, 0x00002217u, 0x00002219u, 0x00002218u, 0x000200f8u, 0x00002219u, 0x00050041u, 0x00000038u, 0x0000221au, 0x000021edu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000221bu, 0x0000221au, 0x000500abu, 0x00000058u, 0x0000221du, 0x0000221bu, 0x00002203u, 0x000300f7u, 0x0000221eu, 0x00000000u, 0x000400fau, 0x0000221du, 0x0000221fu, 0x0000221eu, 0x000200f8u, 0x0000221fu, 0x0004003du, 0x00000008u, 0x00002221u, 0x0000221au, 0x000500abu, 0x00000058u, 0x00002222u, 0x00002221u, 0x00000185u, 0x000200f9u, 0x0000221eu, 0x000200f8u, 0x0000221eu, 0x000700f5u, 0x00000058u, 0x00002223u, 0x0000221du, 0x00002219u, 0x00002222u, 0x0000221fu, 0x000300f7u, 0x00002224u, 0x00000000u, 0x000400fau, 0x00002223u, 0x00002225u, 0x00002224u, 0x000200f8u, 0x00002225u, 0x00050041u, 0x00000038u, 0x00002226u, 0x000021ebu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002227u, 0x00002226u, 0x000500c7u, 0x00000008u, 0x00002228u, 0x00002227u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00002229u, 0x00002228u, 0x00000185u, 0x000300f7u, 0x0000222au, 0x00000000u, 0x000400fau, 0x00002229u, 0x0000222bu, 0x0000222cu, 0x000200f8u, 0x0000222cu, 0x00050041u, 0x00000038u, 0x0000222eu, 0x000021eeu, 0x000002d7u, 0x0003003eu, 0x0000222eu, 0x000004a2u, 0x000200f9u, 0x0000222au, 0x000200f8u, 0x0000222bu, 0x00050041u, 0x00000038u, 0x0000222du, 0x000021eeu, 0x000002d7u, 0x0003003eu, 0x0000222du, 0x0000045cu, 0x000200f9u, 0x0000222au, 0x000200f8u, 0x0000222au, 0x0003003eu, 0x00002152u, 0x000004a4u, 0x000200f9u, 0x00002224u, 0x000200f8u, 0x00002224u, 0x000600a9u, 0x00000058u, 0x0000b1d0u, 0x00002223u, 0x000004a4u, 0x00001084u, 0x00050041u, 0x00000038u, 0x0000222fu, 0x000021edu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00002230u, 0x0000222fu, 0x000500abu, 0x00000058u, 0x00002232u, 0x00002230u, 0x00002203u, 0x000300f7u, 0x00002233u, 0x00000000u, 0x000400fau, 0x00002232u, 0x00002234u, 0x00002233u, 0x000200f8u, 0x00002234u, 0x0004003du, 0x00000008u, 0x00002236u, 0x0000222fu, 0x000500abu, 0x00000058u, 0x00002237u, 0x00002236u, 0x00000185u, 0x000200f9u, 0x00002233u, 0x000200f8u, 0x00002233u, 0x000700f5u, 0x00000058u, 0x00002238u, 0x00002232u, 0x00002224u, 0x00002237u, 0x00002234u, 0x000300f7u, 0x00002239u, 0x00000000u, 0x000400fau, 0x00002238u, 0x0000223au, 0x00002239u, 0x000200f8u, 0x0000223au, 0x00050041u, 0x00000038u, 0x0000223bu, 0x000021ebu, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000223cu, 0x0000223bu, 0x000500c7u, 0x00000008u, 0x0000223du, 0x0000223cu, 0x0000046fu, 0x000500aau, 0x00000058u, 0x0000223eu, 0x0000223du, 0x00000185u, 0x000300f7u, 0x0000223fu, 0x00000000u, 0x000400fau, 0x0000223eu, 0x00002240u, 0x00002241u, 0x000200f8u, 0x00002241u, 0x00050041u, 0x00000038u, 0x00002243u, 0x000021eeu, 0x0000032au, 0x0003003eu, 0x00002243u, 0x000004a2u, 0x000200f9u, 0x0000223fu, 0x000200f8u, 0x00002240u, 0x00050041u, 0x00000038u, 0x00002242u, 0x000021eeu, 0x0000032au, 0x0003003eu, 0x00002242u, 0x0000045cu, 0x000200f9u, 0x0000223fu, 0x000200f8u, 0x0000223fu, 0x0003003eu, 0x00002152u, 0x000004a4u, 0x000200f9u, 0x00002239u, 0x000200f8u, 0x00002239u, 0x000600a9u, 0x00000058u, 0x0000b1d1u, 0x00002238u, 0x000004a4u, 0x0000b1d0u, 0x000200f9u, 0x00002218u, 0x000200f8u, 0x00002218u, 0x000700f5u, 0x00000058u, 0x00006ac1u, 0x00001084u, 0x0000220au, 0x0000b1d1u, 0x00002239u, 0x000300f7u, 0x00002245u, 0x00000000u, 0x000400fau, 0x000021f3u, 0x00002246u, 0x00002245u, 0x000200f8u, 0x00002246u, 0x0003003eu, 0x000021eeu, 0x000004bdu, 0x0003003eu, 0x00002152u, 0x000004a4u, 0x000200f9u, 0x00002245u, 0x000200f8u, 0x00002245u, 0x000600a9u, 0x00000058u, 0x0000b1d2u, 0x000021f3u, 0x000004a4u, 0x00006ac1u, 0x0004003du, 0x0000004du, 0x00002247u, 0x000021eeu, 0x0008000cu, 0x0000004du, 0x00002248u, 0x00000001u, 0x0000002du, 0x00002247u, 0x000004c0u, 0x000004c2u, 0x0003003eu, 0x000021efu, 0x00002248u, 0x0003003eu, 0x00001858u, 0x0000b1d2u, 0x0003003eu, 0x00001854u, 0x00002248u, 0x000300f7u, 0x0000219bu, 0x00000000u, 0x000400fau, 0x0000195du, 0x0000219cu, 0x0000219bu, 0x000200f8u, 0x0000219cu, 0x000500c3u, 0x00000052u, 0x0000219fu, 0x00006a9du, 0x0000b1b6u, 0x0003003eu, 0x00002153u, 0x0000219fu, 0x0003003eu, 0x00002154u, 0x0000b1d2u, 0x00050041u, 0x00000038u, 0x00002276u, 0x00002153u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00002277u, 0x00002276u, 0x0003003eu, 0x0000226cu, 0x00002277u, 0x000500b3u, 0x00000058u, 0x00002279u, 0x00002277u, 0x00000185u, 0x0003003eu, 0x0000226du, 0x00002279u, 0x000500c7u, 0x00000008u, 0x0000227bu, 0x00002277u, 0x0000045cu, 0x0003003eu, 0x0000226cu, 0x0000227bu, 0x0003003eu, 0x0000226fu, 0x0000227bu, 0x0006000cu, 0x00000008u, 0x000022d7u, 0x00000001u, 0x0000004au, 0x0000227bu, 0x00050082u, 0x00000008u, 0x000022d8u, 0x00000205u, 0x000022d7u, 0x0007000cu, 0x00000008u, 0x000022d9u, 0x00000001u, 0x00000027u, 0x000022d8u, 0x00000205u, 0x0003003eu, 0x000022cfu, 0x000022d9u, 0x000500c4u, 0x00000008u, 0x000022dcu, 0x0000227bu, 0x000022d9u, 0x000500c7u, 0x00000008u, 0x000022ddu, 0x000022dcu, 0x00000375u, 0x0003003eu, 0x000022d0u, 0x000022ddu, 0x000500c7u, 0x00000008u, 0x000022dfu, 0x000022ddu, 0x000002eeu, 0x0003003eu, 0x000022d1u, 0x000022dfu, 0x000500c3u, 0x00000008u, 0x000022e1u, 0x000022ddu, 0x000001e0u, 0x0003003eu, 0x000022d3u, 0x0000043au, 0x00050041u, 0x00000068u, 0x000022e2u, 0x000022d3u, 0x000022e1u, 0x0004003du, 0x0000004du, 0x000022e3u, 0x000022e2u, 0x00050051u, 0x00000008u, 0x000022e4u, 0x000022e3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000022e5u, 0x000022e3u, 0x00000001u, 0x0003003eu, 0x000022d2u, 0x000022e3u, 0x00050041u, 0x00000038u, 0x000022e7u, 0x000022d2u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000022e8u, 0x000022e7u, 0x00050084u, 0x00000008u, 0x000022eau, 0x000022e8u, 0x000022dfu, 0x000500c3u, 0x00000008u, 0x000022ebu, 0x000022eau, 0x000001ecu, 0x00050041u, 0x00000038u, 0x000022ecu, 0x000022d2u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000022edu, 0x000022ecu, 0x00050080u, 0x00000008u, 0x000022eeu, 0x000022ebu, 0x000022edu, 0x0003003eu, 0x000022d4u, 0x000022eeu, 0x00050050u, 0x0000004du, 0x000022f1u, 0x000022eeu, 0x000022d9u, 0x0003003eu, 0x000022d5u, 0x000022f1u, 0x0003003eu, 0x0000226eu, 0x000022f1u, 0x00050041u, 0x00000038u, 0x0000227eu, 0x0000226eu, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000227fu, 0x0000227eu, 0x0003003eu, 0x00002270u, 0x0000227fu, 0x0004003du, 0x00000052u, 0x00002280u, 0x00002153u, 0x0007004fu, 0x0000004du, 0x00002281u, 0x00002280u, 0x00002280u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x00002282u, 0x0000226eu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002283u, 0x00002282u, 0x00050050u, 0x0000004du, 0x00002284u, 0x00002283u, 0x00002283u, 0x00050084u, 0x0000004du, 0x00002285u, 0x00002281u, 0x00002284u, 0x0003003eu, 0x00002271u, 0x00002285u, 0x000500c3u, 0x00000008u, 0x00002287u, 0x0000046fu, 0x0000227fu, 0x0004007eu, 0x00000008u, 0x00002288u, 0x00002287u, 0x000500c7u, 0x00000008u, 0x00002289u, 0x0000046eu, 0x00002288u, 0x0003003eu, 0x00002272u, 0x00002289u, 0x0004003du, 0x0000004du, 0x0000228au, 0x00002271u, 0x00050050u, 0x0000004du, 0x0000228cu, 0x00002289u, 0x00002289u, 0x000500c7u, 0x0000004du, 0x0000228du, 0x0000228au, 0x0000228cu, 0x0003003eu, 0x00002273u, 0x0000228du, 0x000500abu, 0x00000058u, 0x0000228fu, 0x0000227fu, 0x00000205u, 0x000300f7u, 0x00002290u, 0x00000000u, 0x000400fau, 0x0000228fu, 0x00002291u, 0x00002292u, 0x000200f8u, 0x00002292u, 0x0004003du, 0x0000004du, 0x00002298u, 0x00002271u, 0x000500c4u, 0x0000004du, 0x0000229au, 0x00002298u, 0x0000b1bau, 0x0003003eu, 0x00002274u, 0x0000229au, 0x000200f9u, 0x00002290u, 0x000200f8u, 0x00002291u, 0x0004003du, 0x0000004du, 0x00002293u, 0x00002271u, 0x00050082u, 0x00000008u, 0x00002295u, 0x000001ffu, 0x0000227fu, 0x00050050u, 0x0000004du, 0x00002296u, 0x00002295u, 0x00002295u, 0x000500c3u, 0x0000004du, 0x00002297u, 0x00002293u, 0x00002296u, 0x0003003eu, 0x00002271u, 0x00002297u, 0x0003003eu, 0x00002274u, 0x00002297u, 0x000200f9u, 0x00002290u, 0x000200f8u, 0x00002290u, 0x0004003du, 0x0000004du, 0x0000229bu, 0x00002273u, 0x000500abu, 0x00000489u, 0x0000229cu, 0x0000229bu, 0x00000488u, 0x0004009au, 0x00000058u, 0x0000229du, 0x0000229cu, 0x000300f7u, 0x0000229eu, 0x00000000u, 0x000400fau, 0x0000229du, 0x0000229fu, 0x0000229eu, 0x000200f8u, 0x0000229fu, 0x00050041u, 0x00000038u, 0x000022a0u, 0x00002273u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000022a1u, 0x000022a0u, 0x000500abu, 0x00000058u, 0x000022a3u, 0x000022a1u, 0x00002289u, 0x000300f7u, 0x000022a4u, 0x00000000u, 0x000400fau, 0x000022a3u, 0x000022a5u, 0x000022a4u, 0x000200f8u, 0x000022a5u, 0x0004003du, 0x00000008u, 0x000022a7u, 0x000022a0u, 0x000500abu, 0x00000058u, 0x000022a8u, 0x000022a7u, 0x00000185u, 0x000200f9u, 0x000022a4u, 0x000200f8u, 0x000022a4u, 0x000700f5u, 0x00000058u, 0x000022a9u, 0x000022a3u, 0x0000229fu, 0x000022a8u, 0x000022a5u, 0x000300f7u, 0x000022aau, 0x00000000u, 0x000400fau, 0x000022a9u, 0x000022abu, 0x000022aau, 0x000200f8u, 0x000022abu, 0x00050041u, 0x00000038u, 0x000022acu, 0x00002271u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000022adu, 0x000022acu, 0x000500c7u, 0x00000008u, 0x000022aeu, 0x000022adu, 0x0000046fu, 0x000500aau, 0x00000058u, 0x000022afu, 0x000022aeu, 0x00000185u, 0x000300f7u, 0x000022b0u, 0x00000000u, 0x000400fau, 0x000022afu, 0x000022b1u, 0x000022b2u, 0x000200f8u, 0x000022b2u, 0x00050041u, 0x00000038u, 0x000022b4u, 0x00002274u, 0x000002d7u, 0x0003003eu, 0x000022b4u, 0x000004a2u, 0x000200f9u, 0x000022b0u, 0x000200f8u, 0x000022b1u, 0x00050041u, 0x00000038u, 0x000022b3u, 0x00002274u, 0x000002d7u, 0x0003003eu, 0x000022b3u, 0x0000045cu, 0x000200f9u, 0x000022b0u, 0x000200f8u, 0x000022b0u, 0x0003003eu, 0x00002154u, 0x000004a4u, 0x000200f9u, 0x000022aau, 0x000200f8u, 0x000022aau, 0x000600a9u, 0x00000058u, 0x0000b1d3u, 0x000022a9u, 0x000004a4u, 0x0000b1d2u, 0x00050041u, 0x00000038u, 0x000022b5u, 0x00002273u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000022b6u, 0x000022b5u, 0x000500abu, 0x00000058u, 0x000022b8u, 0x000022b6u, 0x00002289u, 0x000300f7u, 0x000022b9u, 0x00000000u, 0x000400fau, 0x000022b8u, 0x000022bau, 0x000022b9u, 0x000200f8u, 0x000022bau, 0x0004003du, 0x00000008u, 0x000022bcu, 0x000022b5u, 0x000500abu, 0x00000058u, 0x000022bdu, 0x000022bcu, 0x00000185u, 0x000200f9u, 0x000022b9u, 0x000200f8u, 0x000022b9u, 0x000700f5u, 0x00000058u, 0x000022beu, 0x000022b8u, 0x000022aau, 0x000022bdu, 0x000022bau, 0x000300f7u, 0x000022bfu, 0x00000000u, 0x000400fau, 0x000022beu, 0x000022c0u, 0x000022bfu, 0x000200f8u, 0x000022c0u, 0x00050041u, 0x00000038u, 0x000022c1u, 0x00002271u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000022c2u, 0x000022c1u, 0x000500c7u, 0x00000008u, 0x000022c3u, 0x000022c2u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x000022c4u, 0x000022c3u, 0x00000185u, 0x000300f7u, 0x000022c5u, 0x00000000u, 0x000400fau, 0x000022c4u, 0x000022c6u, 0x000022c7u, 0x000200f8u, 0x000022c7u, 0x00050041u, 0x00000038u, 0x000022c9u, 0x00002274u, 0x0000032au, 0x0003003eu, 0x000022c9u, 0x000004a2u, 0x000200f9u, 0x000022c5u, 0x000200f8u, 0x000022c6u, 0x00050041u, 0x00000038u, 0x000022c8u, 0x00002274u, 0x0000032au, 0x0003003eu, 0x000022c8u, 0x0000045cu, 0x000200f9u, 0x000022c5u, 0x000200f8u, 0x000022c5u, 0x0003003eu, 0x00002154u, 0x000004a4u, 0x000200f9u, 0x000022bfu, 0x000200f8u, 0x000022bfu, 0x000600a9u, 0x00000058u, 0x0000b1d4u, 0x000022beu, 0x000004a4u, 0x0000b1d3u, 0x000200f9u, 0x0000229eu, 0x000200f8u, 0x0000229eu, 0x000700f5u, 0x00000058u, 0x00006ae6u, 0x0000b1d2u, 0x00002290u, 0x0000b1d4u, 0x000022bfu, 0x000300f7u, 0x000022cbu, 0x00000000u, 0x000400fau, 0x00002279u, 0x000022ccu, 0x000022cbu, 0x000200f8u, 0x000022ccu, 0x0003003eu, 0x00002274u, 0x000004bdu, 0x0003003eu, 0x00002154u, 0x000004a4u, 0x000200f9u, 0x000022cbu, 0x000200f8u, 0x000022cbu, 0x000600a9u, 0x00000058u, 0x0000b1d5u, 0x00002279u, 0x000004a4u, 0x00006ae6u, 0x0004003du, 0x0000004du, 0x000022cdu, 0x00002274u, 0x0008000cu, 0x0000004du, 0x000022ceu, 0x00000001u, 0x0000002du, 0x000022cdu, 0x000004c0u, 0x000004c2u, 0x0003003eu, 0x00002275u, 0x000022ceu, 0x0003003eu, 0x00001858u, 0x0000b1d5u, 0x0003003eu, 0x00001855u, 0x000022ceu, 0x000500c3u, 0x00000052u, 0x000021a5u, 0x00006aa8u, 0x0000b1b6u, 0x0003003eu, 0x00002155u, 0x000021a5u, 0x0003003eu, 0x00002156u, 0x0000b1d5u, 0x00050041u, 0x00000038u, 0x000022fcu, 0x00002155u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000022fdu, 0x000022fcu, 0x0003003eu, 0x000022f2u, 0x000022fdu, 0x000500b3u, 0x00000058u, 0x000022ffu, 0x000022fdu, 0x00000185u, 0x0003003eu, 0x000022f3u, 0x000022ffu, 0x000500c7u, 0x00000008u, 0x00002301u, 0x000022fdu, 0x0000045cu, 0x0003003eu, 0x000022f2u, 0x00002301u, 0x0003003eu, 0x000022f5u, 0x00002301u, 0x0006000cu, 0x00000008u, 0x0000235du, 0x00000001u, 0x0000004au, 0x00002301u, 0x00050082u, 0x00000008u, 0x0000235eu, 0x00000205u, 0x0000235du, 0x0007000cu, 0x00000008u, 0x0000235fu, 0x00000001u, 0x00000027u, 0x0000235eu, 0x00000205u, 0x0003003eu, 0x00002355u, 0x0000235fu, 0x000500c4u, 0x00000008u, 0x00002362u, 0x00002301u, 0x0000235fu, 0x000500c7u, 0x00000008u, 0x00002363u, 0x00002362u, 0x00000375u, 0x0003003eu, 0x00002356u, 0x00002363u, 0x000500c7u, 0x00000008u, 0x00002365u, 0x00002363u, 0x000002eeu, 0x0003003eu, 0x00002357u, 0x00002365u, 0x000500c3u, 0x00000008u, 0x00002367u, 0x00002363u, 0x000001e0u, 0x0003003eu, 0x00002359u, 0x0000043au, 0x00050041u, 0x00000068u, 0x00002368u, 0x00002359u, 0x00002367u, 0x0004003du, 0x0000004du, 0x00002369u, 0x00002368u, 0x00050051u, 0x00000008u, 0x0000236au, 0x00002369u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000236bu, 0x00002369u, 0x00000001u, 0x0003003eu, 0x00002358u, 0x00002369u, 0x00050041u, 0x00000038u, 0x0000236du, 0x00002358u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000236eu, 0x0000236du, 0x00050084u, 0x00000008u, 0x00002370u, 0x0000236eu, 0x00002365u, 0x000500c3u, 0x00000008u, 0x00002371u, 0x00002370u, 0x000001ecu, 0x00050041u, 0x00000038u, 0x00002372u, 0x00002358u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002373u, 0x00002372u, 0x00050080u, 0x00000008u, 0x00002374u, 0x00002371u, 0x00002373u, 0x0003003eu, 0x0000235au, 0x00002374u, 0x00050050u, 0x0000004du, 0x00002377u, 0x00002374u, 0x0000235fu, 0x0003003eu, 0x0000235bu, 0x00002377u, 0x0003003eu, 0x000022f4u, 0x00002377u, 0x00050041u, 0x00000038u, 0x00002304u, 0x000022f4u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00002305u, 0x00002304u, 0x0003003eu, 0x000022f6u, 0x00002305u, 0x0004003du, 0x00000052u, 0x00002306u, 0x00002155u, 0x0007004fu, 0x0000004du, 0x00002307u, 0x00002306u, 0x00002306u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x00002308u, 0x000022f4u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002309u, 0x00002308u, 0x00050050u, 0x0000004du, 0x0000230au, 0x00002309u, 0x00002309u, 0x00050084u, 0x0000004du, 0x0000230bu, 0x00002307u, 0x0000230au, 0x0003003eu, 0x000022f7u, 0x0000230bu, 0x000500c3u, 0x00000008u, 0x0000230du, 0x0000046fu, 0x00002305u, 0x0004007eu, 0x00000008u, 0x0000230eu, 0x0000230du, 0x000500c7u, 0x00000008u, 0x0000230fu, 0x0000046eu, 0x0000230eu, 0x0003003eu, 0x000022f8u, 0x0000230fu, 0x0004003du, 0x0000004du, 0x00002310u, 0x000022f7u, 0x00050050u, 0x0000004du, 0x00002312u, 0x0000230fu, 0x0000230fu, 0x000500c7u, 0x0000004du, 0x00002313u, 0x00002310u, 0x00002312u, 0x0003003eu, 0x000022f9u, 0x00002313u, 0x000500abu, 0x00000058u, 0x00002315u, 0x00002305u, 0x00000205u, 0x000300f7u, 0x00002316u, 0x00000000u, 0x000400fau, 0x00002315u, 0x00002317u, 0x00002318u, 0x000200f8u, 0x00002318u, 0x0004003du, 0x0000004du, 0x0000231eu, 0x000022f7u, 0x000500c4u, 0x0000004du, 0x00002320u, 0x0000231eu, 0x0000b1bau, 0x0003003eu, 0x000022fau, 0x00002320u, 0x000200f9u, 0x00002316u, 0x000200f8u, 0x00002317u, 0x0004003du, 0x0000004du, 0x00002319u, 0x000022f7u, 0x00050082u, 0x00000008u, 0x0000231bu, 0x000001ffu, 0x00002305u, 0x00050050u, 0x0000004du, 0x0000231cu, 0x0000231bu, 0x0000231bu, 0x000500c3u, 0x0000004du, 0x0000231du, 0x00002319u, 0x0000231cu, 0x0003003eu, 0x000022f7u, 0x0000231du, 0x0003003eu, 0x000022fau, 0x0000231du, 0x000200f9u, 0x00002316u, 0x000200f8u, 0x00002316u, 0x0004003du, 0x0000004du, 0x00002321u, 0x000022f9u, 0x000500abu, 0x00000489u, 0x00002322u, 0x00002321u, 0x00000488u, 0x0004009au, 0x00000058u, 0x00002323u, 0x00002322u, 0x000300f7u, 0x00002324u, 0x00000000u, 0x000400fau, 0x00002323u, 0x00002325u, 0x00002324u, 0x000200f8u, 0x00002325u, 0x00050041u, 0x00000038u, 0x00002326u, 0x000022f9u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002327u, 0x00002326u, 0x000500abu, 0x00000058u, 0x00002329u, 0x00002327u, 0x0000230fu, 0x000300f7u, 0x0000232au, 0x00000000u, 0x000400fau, 0x00002329u, 0x0000232bu, 0x0000232au, 0x000200f8u, 0x0000232bu, 0x0004003du, 0x00000008u, 0x0000232du, 0x00002326u, 0x000500abu, 0x00000058u, 0x0000232eu, 0x0000232du, 0x00000185u, 0x000200f9u, 0x0000232au, 0x000200f8u, 0x0000232au, 0x000700f5u, 0x00000058u, 0x0000232fu, 0x00002329u, 0x00002325u, 0x0000232eu, 0x0000232bu, 0x000300f7u, 0x00002330u, 0x00000000u, 0x000400fau, 0x0000232fu, 0x00002331u, 0x00002330u, 0x000200f8u, 0x00002331u, 0x00050041u, 0x00000038u, 0x00002332u, 0x000022f7u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002333u, 0x00002332u, 0x000500c7u, 0x00000008u, 0x00002334u, 0x00002333u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00002335u, 0x00002334u, 0x00000185u, 0x000300f7u, 0x00002336u, 0x00000000u, 0x000400fau, 0x00002335u, 0x00002337u, 0x00002338u, 0x000200f8u, 0x00002338u, 0x00050041u, 0x00000038u, 0x0000233au, 0x000022fau, 0x000002d7u, 0x0003003eu, 0x0000233au, 0x000004a2u, 0x000200f9u, 0x00002336u, 0x000200f8u, 0x00002337u, 0x00050041u, 0x00000038u, 0x00002339u, 0x000022fau, 0x000002d7u, 0x0003003eu, 0x00002339u, 0x0000045cu, 0x000200f9u, 0x00002336u, 0x000200f8u, 0x00002336u, 0x0003003eu, 0x00002156u, 0x000004a4u, 0x000200f9u, 0x00002330u, 0x000200f8u, 0x00002330u, 0x000600a9u, 0x00000058u, 0x0000b1d6u, 0x0000232fu, 0x000004a4u, 0x0000b1d5u, 0x00050041u, 0x00000038u, 0x0000233bu, 0x000022f9u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000233cu, 0x0000233bu, 0x000500abu, 0x00000058u, 0x0000233eu, 0x0000233cu, 0x0000230fu, 0x000300f7u, 0x0000233fu, 0x00000000u, 0x000400fau, 0x0000233eu, 0x00002340u, 0x0000233fu, 0x000200f8u, 0x00002340u, 0x0004003du, 0x00000008u, 0x00002342u, 0x0000233bu, 0x000500abu, 0x00000058u, 0x00002343u, 0x00002342u, 0x00000185u, 0x000200f9u, 0x0000233fu, 0x000200f8u, 0x0000233fu, 0x000700f5u, 0x00000058u, 0x00002344u, 0x0000233eu, 0x00002330u, 0x00002343u, 0x00002340u, 0x000300f7u, 0x00002345u, 0x00000000u, 0x000400fau, 0x00002344u, 0x00002346u, 0x00002345u, 0x000200f8u, 0x00002346u, 0x00050041u, 0x00000038u, 0x00002347u, 0x000022f7u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00002348u, 0x00002347u, 0x000500c7u, 0x00000008u, 0x00002349u, 0x00002348u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x0000234au, 0x00002349u, 0x00000185u, 0x000300f7u, 0x0000234bu, 0x00000000u, 0x000400fau, 0x0000234au, 0x0000234cu, 0x0000234du, 0x000200f8u, 0x0000234du, 0x00050041u, 0x00000038u, 0x0000234fu, 0x000022fau, 0x0000032au, 0x0003003eu, 0x0000234fu, 0x000004a2u, 0x000200f9u, 0x0000234bu, 0x000200f8u, 0x0000234cu, 0x00050041u, 0x00000038u, 0x0000234eu, 0x000022fau, 0x0000032au, 0x0003003eu, 0x0000234eu, 0x0000045cu, 0x000200f9u, 0x0000234bu, 0x000200f8u, 0x0000234bu, 0x0003003eu, 0x00002156u, 0x000004a4u, 0x000200f9u, 0x00002345u, 0x000200f8u, 0x00002345u, 0x000600a9u, 0x00000058u, 0x0000b1d7u, 0x00002344u, 0x000004a4u, 0x0000b1d6u, 0x000200f9u, 0x00002324u, 0x000200f8u, 0x00002324u, 0x000700f5u, 0x00000058u, 0x00006b0bu, 0x0000b1d5u, 0x00002316u, 0x0000b1d7u, 0x00002345u, 0x000300f7u, 0x00002351u, 0x00000000u, 0x000400fau, 0x000022ffu, 0x00002352u, 0x00002351u, 0x000200f8u, 0x00002352u, 0x0003003eu, 0x000022fau, 0x000004bdu, 0x0003003eu, 0x00002156u, 0x000004a4u, 0x000200f9u, 0x00002351u, 0x000200f8u, 0x00002351u, 0x000600a9u, 0x00000058u, 0x0000b1d8u, 0x000022ffu, 0x000004a4u, 0x00006b0bu, 0x0004003du, 0x0000004du, 0x00002353u, 0x000022fau, 0x0008000cu, 0x0000004du, 0x00002354u, 0x00000001u, 0x0000002du, 0x00002353u, 0x000004c0u, 0x000004c2u, 0x0003003eu, 0x000022fbu, 0x00002354u, 0x0003003eu, 0x00001858u, 0x0000b1d8u, 0x0003003eu, 0x00001856u, 0x00002354u, 0x000200f9u, 0x0000219bu, 0x000200f8u, 0x0000219bu, 0x000700f5u, 0x00000058u, 0x00006b9du, 0x0000b1d2u, 0x00002245u, 0x0000b1d8u, 0x00002351u, 0x000700f5u, 0x0000004du, 0x00006b87u, 0x00006b72u, 0x00002245u, 0x00002354u, 0x00002351u, 0x000700f5u, 0x0000004du, 0x00006b67u, 0x00006b72u, 0x00002245u, 0x000022ceu, 0x00002351u, 0x000200f9u, 0x00002191u, 0x000200f8u, 0x00002191u, 0x000700f5u, 0x00000058u, 0x00006b9cu, 0x00006b9du, 0x0000219bu, 0x00001084u, 0x000021aeu, 0x000700f5u, 0x0000004du, 0x00006b86u, 0x00006b87u, 0x0000219bu, 0x00006b9bu, 0x000021aeu, 0x000700f5u, 0x0000004du, 0x00006b66u, 0x00006b67u, 0x0000219bu, 0x00006b85u, 0x000021aeu, 0x000700f5u, 0x0000004du, 0x00006b51u, 0x00002248u, 0x0000219bu, 0x0000237au, 0x000021aeu, 0x00050041u, 0x00000038u, 0x000021b8u, 0x0000184cu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000021b9u, 0x000021b8u, 0x00050041u, 0x00000038u, 0x000021bau, 0x0000184du, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000021bbu, 0x000021bau, 0x000500c3u, 0x00000008u, 0x000021bdu, 0x000019e4u, 0x000004cdu, 0x00050084u, 0x00000008u, 0x000021beu, 0x000021bbu, 0x000021bdu, 0x00050080u, 0x00000008u, 0x000021bfu, 0x000021b9u, 0x000021beu, 0x0004003du, 0x00000008u, 0x000021c1u, 0x000021bau, 0x000500c3u, 0x00000008u, 0x000021c2u, 0x000021c1u, 0x000004cdu, 0x000500c7u, 0x00000008u, 0x000021c4u, 0x000019e4u, 0x000005ebu, 0x00050084u, 0x00000008u, 0x000021c5u, 0x000021c2u, 0x000021c4u, 0x00050080u, 0x00000008u, 0x000021c6u, 0x000021bfu, 0x000021c5u, 0x0003003eu, 0x00001857u, 0x000021c6u, 0x000500c3u, 0x00000008u, 0x000021c8u, 0x000021c6u, 0x000001ecu, 0x0003003eu, 0x0000215au, 0x000021c8u, 0x0003003eu, 0x0000215bu, 0x0000210bu, 0x0003003eu, 0x0000215cu, 0x0000210du, 0x0003003eu, 0x0000215du, 0x00002113u, 0x000500c4u, 0x00000008u, 0x000021d4u, 0x000021c8u, 0x000005ffu, 0x0003003eu, 0x0000215au, 0x000021d4u, 0x0004003du, 0x00000008u, 0x000021d7u, 0x000021bau, 0x000500c3u, 0x00000008u, 0x000021d8u, 0x000021d7u, 0x000001ecu, 0x00050084u, 0x00000008u, 0x000021d9u, 0x00002113u, 0x000021d8u, 0x00050041u, 0x00000038u, 0x000021dbu, 0x0000184eu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000021dcu, 0x000021dbu, 0x000500c3u, 0x00000008u, 0x000021ddu, 0x000021dcu, 0x000001ecu, 0x00050084u, 0x00000008u, 0x000021deu, 0x0000210du, 0x000021ddu, 0x00050080u, 0x00000008u, 0x000021dfu, 0x000021d9u, 0x000021deu, 0x00050080u, 0x00000008u, 0x000021e1u, 0x000021d4u, 0x000021dfu, 0x0003003eu, 0x0000215au, 0x000021e1u, 0x000500c3u, 0x00000008u, 0x000021e3u, 0x000021e1u, 0x0000060fu, 0x0003003eu, 0x0000215au, 0x000021e3u, 0x0003003eu, 0x0000215eu, 0x000021e3u, 0x00050082u, 0x00000008u, 0x00002383u, 0x000021e3u, 0x0000035eu, 0x0003003eu, 0x0000215eu, 0x00002383u, 0x000500c4u, 0x00000008u, 0x00002385u, 0x00002383u, 0x000001ffu, 0x0003003eu, 0x0000215eu, 0x00002385u, 0x000500c3u, 0x00000008u, 0x00002387u, 0x00002385u, 0x000001ffu, 0x0003003eu, 0x0000215eu, 0x00002387u, 0x00050080u, 0x00000008u, 0x00002389u, 0x00002387u, 0x0000035eu, 0x0003003eu, 0x0000215eu, 0x00002389u, 0x0008000cu, 0x00000008u, 0x0000238bu, 0x00000001u, 0x0000002du, 0x00002389u, 0x00000185u, 0x00000368u, 0x0003003eu, 0x00002381u, 0x0000238bu, 0x0003003eu, 0x00001857u, 0x0000238bu, 0x0003003eu, 0x00001848u, 0x00006b51u, 0x0003003eu, 0x00001849u, 0x00006b66u, 0x0003003eu, 0x0000184au, 0x00006b86u, 0x0003003eu, 0x0000184bu, 0x0000238bu, 0x0003003eu, 0x00001846u, 0x00006b9cu, 0x000500c7u, 0x00000006u, 0x00001a0fu, 0x000018f4u, 0x000010eeu, 0x0003003eu, 0x00001859u, 0x00001a0fu, 0x00050080u, 0x00000006u, 0x00001a11u, 0x00001a0fu, 0x0000032au, 0x000500c7u, 0x00000006u, 0x00001a12u, 0x00001a11u, 0x000010eeu, 0x0003003eu, 0x0000185au, 0x00001a12u, 0x000500c2u, 0x00000006u, 0x00001a14u, 0x000018f4u, 0x00000331u, 0x0003003eu, 0x0000185bu, 0x00001a14u, 0x0003003eu, 0x0000185cu, 0x000020ecu, 0x000300f7u, 0x00001a18u, 0x00000000u, 0x000400fau, 0x0000195du, 0x00001a19u, 0x00001a18u, 0x000200f8u, 0x00001a19u, 0x0003003eu, 0x0000185eu, 0x00001a0fu, 0x0003003eu, 0x0000185fu, 0x00001a12u, 0x0003003eu, 0x00001861u, 0x00001a14u, 0x0003003eu, 0x00001862u, 0x000020ecu, 0x0003003eu, 0x00001863u, 0x00006b51u, 0x0003003eu, 0x00001864u, 0x00006b66u, 0x0003003eu, 0x00001865u, 0x00006b86u, 0x0003003eu, 0x00001866u, 0x00006b9cu, 0x0003003eu, 0x00001867u, 0x00001933u, 0x0003003eu, 0x00001868u, 0x00001936u, 0x0003003eu, 0x00001869u, 0x00001939u, 0x0003003eu, 0x0000238cu, 0x00001084u, 0x0003003eu, 0x0000238du, 0x00001084u, 0x0003003eu, 0x0000238eu, 0x000002d7u, 0x000300f7u, 0x00002395u, 0x00000000u, 0x000400fau, 0x00006b9cu, 0x00002396u, 0x00002397u, 0x000200f8u, 0x00002397u, 0x00050082u, 0x0000004du, 0x0000239au, 0x00006b66u, 0x00006b51u, 0x0003003eu, 0x0000238fu, 0x0000239au, 0x000500c3u, 0x0000004du, 0x0000239du, 0x0000239au, 0x0000b1bdu, 0x000500c6u, 0x0000004du, 0x0000239fu, 0x0000239au, 0x0000239du, 0x0003003eu, 0x0000238fu, 0x0000239fu, 0x00050082u, 0x0000004du, 0x000023a2u, 0x00006b86u, 0x00006b51u, 0x0003003eu, 0x00002390u, 0x000023a2u, 0x000500c3u, 0x0000004du, 0x000023a5u, 0x000023a2u, 0x0000b1bdu, 0x000500c6u, 0x0000004du, 0x000023a7u, 0x000023a2u, 0x000023a5u, 0x0003003eu, 0x00002390u, 0x000023a7u, 0x0007000cu, 0x0000004du, 0x000023aau, 0x00000001u, 0x0000002au, 0x0000239fu, 0x000023a7u, 0x0003003eu, 0x00002391u, 0x000023aau, 0x00050041u, 0x00000038u, 0x000023abu, 0x00002391u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000023acu, 0x000023abu, 0x00050041u, 0x00000038u, 0x000023adu, 0x00002391u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000023aeu, 0x000023adu, 0x0007000cu, 0x00000008u, 0x000023afu, 0x00000001u, 0x0000002au, 0x000023acu, 0x000023aeu, 0x0003003eu, 0x00002392u, 0x000023afu, 0x000500afu, 0x00000058u, 0x000023b1u, 0x000023afu, 0x0000037du, 0x000300f7u, 0x000023b2u, 0x00000000u, 0x000400fau, 0x000023b1u, 0x000023b3u, 0x000023b4u, 0x000200f8u, 0x000023b4u, 0x000500b1u, 0x00000058u, 0x000023b7u, 0x000023afu, 0x000002e0u, 0x000300f7u, 0x000023b8u, 0x00000000u, 0x000400fau, 0x000023b7u, 0x000023b9u, 0x000023bau, 0x000200f8u, 0x000023bau, 0x000500c3u, 0x00000008u, 0x000023cfu, 0x000023afu, 0x000001a0u, 0x0006000cu, 0x00000008u, 0x000023d0u, 0x00000001u, 0x0000004au, 0x000023cfu, 0x0007000cu, 0x00000008u, 0x000023d1u, 0x00000001u, 0x0000002au, 0x000023d0u, 0x00000185u, 0x0003003eu, 0x00002393u, 0x000023d1u, 0x0004007cu, 0x00000006u, 0x000023d3u, 0x000023d1u, 0x000500aeu, 0x00000058u, 0x000023d5u, 0x000023d3u, 0x00001a14u, 0x0003003eu, 0x0000238du, 0x000023d5u, 0x000400a8u, 0x00000058u, 0x000023d8u, 0x00001936u, 0x000500a7u, 0x00000058u, 0x000023d9u, 0x000023d5u, 0x000023d8u, 0x000400a8u, 0x00000058u, 0x000023dbu, 0x00001939u, 0x000500a7u, 0x00000058u, 0x000023dcu, 0x000023d9u, 0x000023dbu, 0x000300f7u, 0x000023ddu, 0x00000000u, 0x000400fau, 0x000023dcu, 0x000023deu, 0x000023dfu, 0x000200f8u, 0x000023dfu, 0x000500c4u, 0x00000008u, 0x000023e1u, 0x000023afu, 0x0000019au, 0x000500c3u, 0x00000008u, 0x000023e3u, 0x000023e1u, 0x000023d1u, 0x000500c7u, 0x00000008u, 0x000023e4u, 0x000023e3u, 0x000002eeu, 0x0003003eu, 0x00001860u, 0x000023e4u, 0x0003003eu, 0x0000238eu, 0x000023d3u, 0x000200f9u, 0x000023ddu, 0x000200f8u, 0x000023deu, 0x0003003eu, 0x00001860u, 0x000002eeu, 0x000200f9u, 0x000023ddu, 0x000200f8u, 0x000023ddu, 0x000700f5u, 0x00000008u, 0x00006cb1u, 0x000002eeu, 0x000023deu, 0x000023e4u, 0x000023dfu, 0x000600a9u, 0x00000006u, 0x0000b1d9u, 0x000023dcu, 0x000002d7u, 0x000023d3u, 0x000200f9u, 0x000023b8u, 0x000200f8u, 0x000023b9u, 0x000500aau, 0x00000058u, 0x000023bcu, 0x00001a14u, 0x000002d7u, 0x0003003eu, 0x0000238du, 0x000023bcu, 0x0003003eu, 0x0000238cu, 0x000004a4u, 0x000400a8u, 0x00000058u, 0x000023beu, 0x00001936u, 0x000400a8u, 0x00000058u, 0x000023c0u, 0x00001939u, 0x000500a7u, 0x00000058u, 0x000023c1u, 0x000023beu, 0x000023c0u, 0x000300f7u, 0x000023c2u, 0x00000000u, 0x000400fau, 0x000023c1u, 0x000023c3u, 0x000023c4u, 0x000200f8u, 0x000023c4u, 0x0007000cu, 0x00000008u, 0x000023c9u, 0x00000001u, 0x0000002au, 0x000020ecu, 0x000023afu, 0x000500c4u, 0x00000008u, 0x000023cau, 0x000023c9u, 0x0000019au, 0x000600a9u, 0x00000008u, 0x000023ccu, 0x00001936u, 0x000010c2u, 0x00000185u, 0x00050080u, 0x00000008u, 0x000023cdu, 0x000023cau, 0x000023ccu, 0x0003003eu, 0x00001860u, 0x000023cdu, 0x000200f9u, 0x000023c2u, 0x000200f8u, 0x000023c3u, 0x000600a9u, 0x00000008u, 0x000023c6u, 0x000023bcu, 0x000002eeu, 0x00000185u, 0x0003003eu, 0x00001860u, 0x000023c6u, 0x000200f9u, 0x000023c2u, 0x000200f8u, 0x000023c2u, 0x000700f5u, 0x00000008u, 0x00006cb0u, 0x000023c6u, 0x000023c3u, 0x000023cdu, 0x000023c4u, 0x000200f9u, 0x000023b8u, 0x000200f8u, 0x000023b8u, 0x000700f5u, 0x00000008u, 0x00006cafu, 0x00006cb0u, 0x000023c2u, 0x00006cb1u, 0x000023ddu, 0x000700f5u, 0x00000006u, 0x00006c90u, 0x000002d7u, 0x000023c2u, 0x0000b1d9u, 0x000023ddu, 0x000700f5u, 0x00000058u, 0x00006c79u, 0x000023bcu, 0x000023c2u, 0x000023d5u, 0x000023ddu, 0x000600a9u, 0x00000058u, 0x0000b1dau, 0x000023b7u, 0x000004a4u, 0x00001084u, 0x000200f9u, 0x000023b2u, 0x000200f8u, 0x000023b3u, 0x0003003eu, 0x0000238du, 0x000004a4u, 0x0003003eu, 0x00001860u, 0x000002eeu, 0x0003003eu, 0x0000238eu, 0x00001a14u, 0x000200f9u, 0x000023b2u, 0x000200f8u, 0x000023b2u, 0x000700f5u, 0x00000008u, 0x00006caeu, 0x000002eeu, 0x000023b3u, 0x00006cafu, 0x000023b8u, 0x000700f5u, 0x00000058u, 0x00006c96u, 0x00001084u, 0x000023b3u, 0x0000b1dau, 0x000023b8u, 0x000700f5u, 0x00000006u, 0x00006c8fu, 0x00001a14u, 0x000023b3u, 0x00006c90u, 0x000023b8u, 0x000700f5u, 0x00000058u, 0x00006c78u, 0x000004a4u, 0x000023b3u, 0x00006c79u, 0x000023b8u, 0x000200f9u, 0x00002395u, 0x000200f8u, 0x00002396u, 0x0003003eu, 0x0000238du, 0x000004a4u, 0x0003003eu, 0x00001860u, 0x000002eeu, 0x000200f9u, 0x00002395u, 0x000200f8u, 0x00002395u, 0x000700f5u, 0x00000008u, 0x00006cadu, 0x000002eeu, 0x00002396u, 0x00006caeu, 0x000023b2u, 0x000700f5u, 0x00000058u, 0x00006c95u, 0x00001084u, 0x00002396u, 0x00006c96u, 0x000023b2u, 0x000700f5u, 0x00000006u, 0x00006c8eu, 0x000002d7u, 0x00002396u, 0x00006c8fu, 0x000023b2u, 0x000700f5u, 0x00000058u, 0x00006c77u, 0x000004a4u, 0x00002396u, 0x00006c78u, 0x000023b2u, 0x000300f7u, 0x000023e8u, 0x00000000u, 0x000400fau, 0x00001933u, 0x000023e9u, 0x000023e8u, 0x000200f8u, 0x000023e9u, 0x000300f7u, 0x000023ebu, 0x00000000u, 0x000400fau, 0x00006c77u, 0x000023ecu, 0x000023ebu, 0x000200f8u, 0x000023ecu, 0x0003003eu, 0x0000238eu, 0x00001a14u, 0x000200f9u, 0x000023ebu, 0x000200f8u, 0x000023ebu, 0x000600a9u, 0x00000006u, 0x0000b1dbu, 0x00006c77u, 0x00001a14u, 0x00006c8eu, 0x000400a8u, 0x00000058u, 0x000023efu, 0x00001939u, 0x000300f7u, 0x000023f0u, 0x00000000u, 0x000400fau, 0x000023efu, 0x000023f1u, 0x000023f2u, 0x000200f8u, 0x000023f2u, 0x00050080u, 0x00000006u, 0x00002409u, 0x00001a0fu, 0x0000b1dbu, 0x000500a6u, 0x00000058u, 0x0000240cu, 0x00006c77u, 0x00006c95u, 0x000600a9u, 0x00000008u, 0x0000240du, 0x0000240cu, 0x00000194u, 0x00000197u, 0x0004007cu, 0x00000006u, 0x0000240eu, 0x0000240du, 0x00050080u, 0x00000006u, 0x0000240fu, 0x00002409u, 0x0000240eu, 0x000500c7u, 0x00000006u, 0x00002410u, 0x0000240fu, 0x000010eeu, 0x0003003eu, 0x0000185fu, 0x00002410u, 0x000600a9u, 0x00000008u, 0x00002415u, 0x00006c95u, 0x00000185u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00002416u, 0x00002415u, 0x00050080u, 0x00000006u, 0x00002417u, 0x00002409u, 0x00002416u, 0x000500c7u, 0x00000006u, 0x00002418u, 0x00002417u, 0x000010eeu, 0x0003003eu, 0x0000185eu, 0x00002418u, 0x000200f9u, 0x000023f0u, 0x000200f8u, 0x000023f1u, 0x00050080u, 0x00000006u, 0x000023f5u, 0x00001a0fu, 0x0000b1dbu, 0x000500c7u, 0x00000006u, 0x000023f6u, 0x000023f5u, 0x000010eeu, 0x0003003eu, 0x0000185eu, 0x000023f6u, 0x000400a8u, 0x00000058u, 0x000023f8u, 0x00006c77u, 0x000300f7u, 0x000023f9u, 0x00000000u, 0x000400fau, 0x000023f8u, 0x000023fau, 0x000023f9u, 0x000200f8u, 0x000023fau, 0x000400a8u, 0x00000058u, 0x000023fcu, 0x00001936u, 0x000500a7u, 0x00000058u, 0x000023feu, 0x000023fcu, 0x00006c95u, 0x000200f9u, 0x000023f9u, 0x000200f8u, 0x000023f9u, 0x000700f5u, 0x00000058u, 0x000023ffu, 0x00006c77u, 0x000023f1u, 0x000023feu, 0x000023fau, 0x000300f7u, 0x00002400u, 0x00000000u, 0x000400fau, 0x000023ffu, 0x00002401u, 0x00002402u, 0x000200f8u, 0x00002402u, 0x00050080u, 0x00000006u, 0x00002405u, 0x000023f6u, 0x0000032au, 0x000500c7u, 0x00000006u, 0x00002406u, 0x00002405u, 0x000010eeu, 0x0003003eu, 0x0000185fu, 0x00002406u, 0x000200f9u, 0x00002400u, 0x000200f8u, 0x00002401u, 0x0003003eu, 0x0000185fu, 0x000023f6u, 0x000200f9u, 0x00002400u, 0x000200f8u, 0x00002400u, 0x000700f5u, 0x00000006u, 0x00006cabu, 0x000023f6u, 0x00002401u, 0x00002406u, 0x00002402u, 0x000200f9u, 0x000023f0u, 0x000200f8u, 0x000023f0u, 0x000700f5u, 0x00000006u, 0x00006caau, 0x00006cabu, 0x00002400u, 0x00002410u, 0x000023f2u, 0x000700f5u, 0x00000006u, 0x00006ca2u, 0x000023f6u, 0x00002400u, 0x00002418u, 0x000023f2u, 0x000200f9u, 0x000023e8u, 0x000200f8u, 0x000023e8u, 0x000700f5u, 0x00000006u, 0x00006ca4u, 0x00001a12u, 0x00002395u, 0x00006caau, 0x000023f0u, 0x000700f5u, 0x00000006u, 0x00006ca1u, 0x00001a0fu, 0x00002395u, 0x00006ca2u, 0x000023f0u, 0x0003003eu, 0x00001859u, 0x00006ca1u, 0x0003003eu, 0x0000185au, 0x00006ca4u, 0x0003003eu, 0x0000185du, 0x00006cadu, 0x000200f9u, 0x00001a18u, 0x000200f8u, 0x00001a18u, 0x000700f5u, 0x00000008u, 0x000096f1u, 0x000096feu, 0x00002191u, 0x00006cadu, 0x000023e8u, 0x000700f5u, 0x00000006u, 0x00008172u, 0x00001a12u, 0x00002191u, 0x00006ca4u, 0x000023e8u, 0x000700f5u, 0x00000006u, 0x00006d12u, 0x00001a0fu, 0x00002191u, 0x00006ca1u, 0x000023e8u, 0x000300f7u, 0x00001a2au, 0x00000000u, 0x000400fau, 0x00001954u, 0x00001a2bu, 0x00001a2au, 0x000200f8u, 0x00001a2bu, 0x00080041u, 0x000001f9u, 0x00001a2eu, 0x000013f4u, 0x00000185u, 0x0000178cu, 0x00000197u, 0x00006d12u, 0x0004003du, 0x000001abu, 0x00001a2fu, 0x00001a2eu, 0x00040071u, 0x00000006u, 0x00001a30u, 0x00001a2fu, 0x0003003eu, 0x0000186au, 0x00001a30u, 0x0003003eu, 0x0000186cu, 0x00001a30u, 0x00070041u, 0x000001edu, 0x0000241bu, 0x00000278u, 0x00000185u, 0x00001a30u, 0x00000185u, 0x0004003du, 0x00000006u, 0x0000241cu, 0x0000241bu, 0x00070041u, 0x000001edu, 0x0000241eu, 0x00000278u, 0x00000185u, 0x00001a30u, 0x00000194u, 0x0004003du, 0x00000006u, 0x0000241fu, 0x0000241eu, 0x00070041u, 0x000001edu, 0x00002421u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x00000197u, 0x0004003du, 0x00000006u, 0x00002422u, 0x00002421u, 0x00070041u, 0x000001edu, 0x00002424u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00002425u, 0x00002424u, 0x00070041u, 0x000001edu, 0x00002427u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00002428u, 0x00002427u, 0x00070041u, 0x000001edu, 0x0000242au, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000242bu, 0x0000242au, 0x00070041u, 0x000001f9u, 0x0000242du, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001a3u, 0x0004003du, 0x000001abu, 0x0000242eu, 0x0000242du, 0x00040071u, 0x00000006u, 0x0000242fu, 0x0000242eu, 0x0004007cu, 0x00000008u, 0x00002430u, 0x0000242fu, 0x00070041u, 0x000001f9u, 0x00002432u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001a6u, 0x0004003du, 0x000001abu, 0x00002433u, 0x00002432u, 0x00040071u, 0x00000006u, 0x00002434u, 0x00002433u, 0x0004007cu, 0x00000008u, 0x00002435u, 0x00002434u, 0x00070041u, 0x000001f9u, 0x00002437u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001e0u, 0x0004003du, 0x000001abu, 0x00002438u, 0x00002437u, 0x00040071u, 0x00000006u, 0x00002439u, 0x00002438u, 0x0004007cu, 0x00000008u, 0x0000243au, 0x00002439u, 0x00070041u, 0x000001f9u, 0x0000243cu, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001e6u, 0x0004003du, 0x000001abu, 0x0000243du, 0x0000243cu, 0x00040071u, 0x00000006u, 0x0000243eu, 0x0000243du, 0x0004007cu, 0x00000008u, 0x0000243fu, 0x0000243eu, 0x00070041u, 0x000001f9u, 0x00002441u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001ecu, 0x0004003du, 0x000001abu, 0x00002442u, 0x00002441u, 0x00040071u, 0x00000006u, 0x00002443u, 0x00002442u, 0x0004007cu, 0x00000008u, 0x00002444u, 0x00002443u, 0x00070041u, 0x000001f9u, 0x00002446u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001f1u, 0x0004003du, 0x000001abu, 0x00002447u, 0x00002446u, 0x00040071u, 0x00000006u, 0x00002448u, 0x00002447u, 0x0004007cu, 0x00000008u, 0x00002449u, 0x00002448u, 0x00070041u, 0x000001f9u, 0x0000244bu, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001f8u, 0x0004003du, 0x000001abu, 0x0000244cu, 0x0000244bu, 0x00040071u, 0x00000006u, 0x0000244du, 0x0000244cu, 0x0004007cu, 0x00000008u, 0x0000244eu, 0x0000244du, 0x00070041u, 0x000001f9u, 0x00002450u, 0x00000278u, 0x00000185u, 0x00001a30u, 0x000001ffu, 0x0004003du, 0x000001abu, 0x00002451u, 0x00002450u, 0x00040071u, 0x00000006u, 0x00002452u, 0x00002451u, 0x0004007cu, 0x00000008u, 0x00002453u, 0x00002452u, 0x00110050u, 0x00000023u, 0x00002454u, 0x0000241cu, 0x0000241fu, 0x00002422u, 0x00002425u, 0x00002428u, 0x0000242bu, 0x00002430u, 0x00002435u, 0x0000243au, 0x0000243fu, 0x00002444u, 0x00002449u, 0x0000244eu, 0x00002453u, 0x0003003eu, 0x00005c65u, 0x0000241cu, 0x0003003eu, 0x00005c66u, 0x0000241fu, 0x0003003eu, 0x00005c67u, 0x00002422u, 0x0003003eu, 0x00005c68u, 0x00002425u, 0x0003003eu, 0x00005c69u, 0x00002428u, 0x0003003eu, 0x00005c6au, 0x0000242bu, 0x0003003eu, 0x00005c6bu, 0x00002430u, 0x0003003eu, 0x00005c6cu, 0x00002435u, 0x0003003eu, 0x00005c6du, 0x0000243au, 0x0003003eu, 0x00005c6eu, 0x0000243fu, 0x0003003eu, 0x00005c6fu, 0x00002444u, 0x0003003eu, 0x00005c70u, 0x00002449u, 0x0003003eu, 0x00005c71u, 0x0000244eu, 0x0003003eu, 0x00005c72u, 0x00002453u, 0x0003003eu, 0x00005e86u, 0x0000241cu, 0x0003003eu, 0x00005e87u, 0x0000241fu, 0x0003003eu, 0x00005e88u, 0x00002422u, 0x0003003eu, 0x00005e89u, 0x00002425u, 0x0003003eu, 0x00005e8au, 0x00002428u, 0x0003003eu, 0x00005e8bu, 0x0000242bu, 0x0003003eu, 0x00005e8cu, 0x00002430u, 0x0003003eu, 0x00005e8du, 0x00002435u, 0x0003003eu, 0x00005e8eu, 0x0000243au, 0x0003003eu, 0x00005e8fu, 0x0000243fu, 0x0003003eu, 0x00005e90u, 0x00002444u, 0x0003003eu, 0x00005e91u, 0x00002449u, 0x0003003eu, 0x00005e92u, 0x0000244eu, 0x0003003eu, 0x00005e93u, 0x00002453u, 0x000300f7u, 0x00001a33u, 0x00000000u, 0x000400fau, 0x000015efu, 0x00001a34u, 0x00001a33u, 0x000200f8u, 0x00001a34u, 0x0003003eu, 0x00005e8cu, 0x00001512u, 0x0003003eu, 0x00005e8du, 0x00001515u, 0x000200f9u, 0x00001a33u, 0x000200f8u, 0x00001a33u, 0x000600a9u, 0x00000008u, 0x0000b1dcu, 0x000015efu, 0x00001512u, 0x00002430u, 0x000600a9u, 0x00000008u, 0x0000b1ddu, 0x000015efu, 0x00001515u, 0x00002435u, 0x00110050u, 0x00000023u, 0x00005eb0u, 0x0000241cu, 0x0000241fu, 0x00002422u, 0x00002425u, 0x00002428u, 0x0000242bu, 0x0000b1dcu, 0x0000b1ddu, 0x0000243au, 0x0000243fu, 0x00002444u, 0x00002449u, 0x0000244eu, 0x00002453u, 0x0003003eu, 0x00005eb1u, 0x0000241cu, 0x0003003eu, 0x00005eb2u, 0x0000241fu, 0x0003003eu, 0x00005eb3u, 0x00002422u, 0x0003003eu, 0x00005eb4u, 0x00002425u, 0x0003003eu, 0x00005eb5u, 0x00002428u, 0x0003003eu, 0x00005eb6u, 0x0000242bu, 0x0003003eu, 0x00005eb7u, 0x0000b1dcu, 0x0003003eu, 0x00005eb8u, 0x0000b1ddu, 0x0003003eu, 0x00005eb9u, 0x0000243au, 0x0003003eu, 0x00005ebau, 0x0000243fu, 0x0003003eu, 0x00005ebbu, 0x00002444u, 0x0003003eu, 0x00005ebcu, 0x00002449u, 0x0003003eu, 0x00005ebdu, 0x0000244eu, 0x0003003eu, 0x00005ebeu, 0x00002453u, 0x0003003eu, 0x0000186fu, 0x000018feu, 0x0003003eu, 0x00001870u, 0x00006b51u, 0x0003003eu, 0x00001871u, 0x00001921u, 0x0003003eu, 0x00001872u, 0x00001924u, 0x0003003eu, 0x00001873u, 0x00001927u, 0x0003003eu, 0x00001874u, 0x00001951u, 0x0003003eu, 0x00001875u, 0x00001084u, 0x0003003eu, 0x00001876u, 0x00000310u, 0x000500c7u, 0x00000008u, 0x00002598u, 0x00002453u, 0x00000194u, 0x000500abu, 0x00000058u, 0x00002599u, 0x00002598u, 0x00000185u, 0x0004007cu, 0x00000008u, 0x0000259cu, 0x0000241cu, 0x0004007cu, 0x00000008u, 0x0000259fu, 0x0000241fu, 0x0003003eu, 0x00002455u, 0x00002599u, 0x00050041u, 0x00000038u, 0x000025a2u, 0x00001870u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000025a3u, 0x000025a2u, 0x0003003eu, 0x00002456u, 0x000025a3u, 0x0003003eu, 0x00002457u, 0x0000259cu, 0x0003003eu, 0x00002458u, 0x0000259fu, 0x0003003eu, 0x00002459u, 0x00002444u, 0x0008000cu, 0x00000008u, 0x00002951u, 0x00000001u, 0x0000002du, 0x000025a3u, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x00002456u, 0x00002951u, 0x000500b1u, 0x00000058u, 0x00002953u, 0x00002444u, 0x000001f1u, 0x000300f7u, 0x00002954u, 0x00000000u, 0x000400fau, 0x00002953u, 0x00002955u, 0x00002956u, 0x000200f8u, 0x00002956u, 0x00050082u, 0x00000008u, 0x0000295bu, 0x000002e0u, 0x00002444u, 0x000500c4u, 0x00000008u, 0x0000295du, 0x00002951u, 0x0000295bu, 0x0003003eu, 0x00002456u, 0x0000295du, 0x000500c3u, 0x00000008u, 0x0000295fu, 0x0000295du, 0x00000321u, 0x0003003eu, 0x00002456u, 0x0000295fu, 0x000200f9u, 0x00002954u, 0x000200f8u, 0x00002955u, 0x000500c3u, 0x00000008u, 0x00002959u, 0x00002951u, 0x00002444u, 0x0003003eu, 0x00002456u, 0x00002959u, 0x000200f9u, 0x00002954u, 0x000200f8u, 0x00002954u, 0x000700f5u, 0x00000008u, 0x00006e20u, 0x00002959u, 0x00002955u, 0x0000295fu, 0x00002956u, 0x000300f7u, 0x00002961u, 0x00000000u, 0x000400fau, 0x00002599u, 0x00002962u, 0x00002963u, 0x000200f8u, 0x00002963u, 0x000500c4u, 0x00000008u, 0x00002979u, 0x0000259cu, 0x0000019au, 0x00050082u, 0x00000008u, 0x0000297bu, 0x00006e20u, 0x00002979u, 0x0003003eu, 0x00002456u, 0x0000297bu, 0x000200f9u, 0x00002961u, 0x000200f8u, 0x00002962u, 0x000500c3u, 0x00000008u, 0x00002965u, 0x00006e20u, 0x0000019au, 0x000500afu, 0x00000058u, 0x00002967u, 0x00002965u, 0x0000259fu, 0x0003003eu, 0x0000294eu, 0x00002967u, 0x000300f7u, 0x00002969u, 0x00000000u, 0x000400fau, 0x00002967u, 0x0000296au, 0x0000296bu, 0x000200f8u, 0x0000296bu, 0x000500c4u, 0x00000008u, 0x00002975u, 0x0000259cu, 0x0000019au, 0x00050082u, 0x00000008u, 0x00002976u, 0x00006e20u, 0x00002975u, 0x0007000cu, 0x00000008u, 0x00002977u, 0x00000001u, 0x0000002au, 0x00002976u, 0x00000185u, 0x0003003eu, 0x00002456u, 0x00002977u, 0x000200f9u, 0x00002969u, 0x000200f8u, 0x0000296au, 0x000500c3u, 0x00000008u, 0x0000296du, 0x0000259fu, 0x00000197u, 0x000500c3u, 0x00000008u, 0x0000296fu, 0x0000259cu, 0x00000197u, 0x00050082u, 0x00000008u, 0x00002970u, 0x0000296du, 0x0000296fu, 0x000500c7u, 0x00000008u, 0x00002971u, 0x00002970u, 0x0000099cu, 0x000500c4u, 0x00000008u, 0x00002972u, 0x00002971u, 0x000001a0u, 0x0003003eu, 0x00002456u, 0x00002972u, 0x000200f9u, 0x00002969u, 0x000200f8u, 0x00002969u, 0x000700f5u, 0x00000008u, 0x00006e23u, 0x00002972u, 0x0000296au, 0x00002977u, 0x0000296bu, 0x000200f9u, 0x00002961u, 0x000200f8u, 0x00002961u, 0x000700f5u, 0x00000008u, 0x00006e22u, 0x00006e23u, 0x00002969u, 0x0000297bu, 0x00002963u, 0x0003003eu, 0x0000294fu, 0x00006e22u, 0x0003003eu, 0x000025a2u, 0x00006e22u, 0x000500c7u, 0x00000008u, 0x000025a8u, 0x00002453u, 0x0000019du, 0x000500abu, 0x00000058u, 0x000025a9u, 0x000025a8u, 0x00000185u, 0x0004007cu, 0x00000008u, 0x000025acu, 0x00002422u, 0x0004007cu, 0x00000008u, 0x000025afu, 0x00002425u, 0x0003003eu, 0x0000245au, 0x000025a9u, 0x00050041u, 0x00000038u, 0x000025b2u, 0x00001870u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000025b3u, 0x000025b2u, 0x0003003eu, 0x0000245bu, 0x000025b3u, 0x0003003eu, 0x0000245cu, 0x000025acu, 0x0003003eu, 0x0000245du, 0x000025afu, 0x0003003eu, 0x0000245eu, 0x0000244eu, 0x0008000cu, 0x00000008u, 0x00002980u, 0x00000001u, 0x0000002du, 0x000025b3u, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x0000245bu, 0x00002980u, 0x000500b1u, 0x00000058u, 0x00002982u, 0x0000244eu, 0x000001f1u, 0x000300f7u, 0x00002983u, 0x00000000u, 0x000400fau, 0x00002982u, 0x00002984u, 0x00002985u, 0x000200f8u, 0x00002985u, 0x00050082u, 0x00000008u, 0x0000298au, 0x000002e0u, 0x0000244eu, 0x000500c4u, 0x00000008u, 0x0000298cu, 0x00002980u, 0x0000298au, 0x0003003eu, 0x0000245bu, 0x0000298cu, 0x000500c3u, 0x00000008u, 0x0000298eu, 0x0000298cu, 0x00000321u, 0x0003003eu, 0x0000245bu, 0x0000298eu, 0x000200f9u, 0x00002983u, 0x000200f8u, 0x00002984u, 0x000500c3u, 0x00000008u, 0x00002988u, 0x00002980u, 0x0000244eu, 0x0003003eu, 0x0000245bu, 0x00002988u, 0x000200f9u, 0x00002983u, 0x000200f8u, 0x00002983u, 0x000700f5u, 0x00000008u, 0x00006e32u, 0x00002988u, 0x00002984u, 0x0000298eu, 0x00002985u, 0x000300f7u, 0x00002990u, 0x00000000u, 0x000400fau, 0x000025a9u, 0x00002991u, 0x00002992u, 0x000200f8u, 0x00002992u, 0x000500c4u, 0x00000008u, 0x000029a8u, 0x000025acu, 0x0000019au, 0x00050082u, 0x00000008u, 0x000029aau, 0x00006e32u, 0x000029a8u, 0x0003003eu, 0x0000245bu, 0x000029aau, 0x000200f9u, 0x00002990u, 0x000200f8u, 0x00002991u, 0x000500c3u, 0x00000008u, 0x00002994u, 0x00006e32u, 0x0000019au, 0x000500afu, 0x00000058u, 0x00002996u, 0x00002994u, 0x000025afu, 0x0003003eu, 0x0000297du, 0x00002996u, 0x000300f7u, 0x00002998u, 0x00000000u, 0x000400fau, 0x00002996u, 0x00002999u, 0x0000299au, 0x000200f8u, 0x0000299au, 0x000500c4u, 0x00000008u, 0x000029a4u, 0x000025acu, 0x0000019au, 0x00050082u, 0x00000008u, 0x000029a5u, 0x00006e32u, 0x000029a4u, 0x0007000cu, 0x00000008u, 0x000029a6u, 0x00000001u, 0x0000002au, 0x000029a5u, 0x00000185u, 0x0003003eu, 0x0000245bu, 0x000029a6u, 0x000200f9u, 0x00002998u, 0x000200f8u, 0x00002999u, 0x000500c3u, 0x00000008u, 0x0000299cu, 0x000025afu, 0x00000197u, 0x000500c3u, 0x00000008u, 0x0000299eu, 0x000025acu, 0x00000197u, 0x00050082u, 0x00000008u, 0x0000299fu, 0x0000299cu, 0x0000299eu, 0x000500c7u, 0x00000008u, 0x000029a0u, 0x0000299fu, 0x0000099cu, 0x000500c4u, 0x00000008u, 0x000029a1u, 0x000029a0u, 0x000001a0u, 0x0003003eu, 0x0000245bu, 0x000029a1u, 0x000200f9u, 0x00002998u, 0x000200f8u, 0x00002998u, 0x000700f5u, 0x00000008u, 0x00006e35u, 0x000029a1u, 0x00002999u, 0x000029a6u, 0x0000299au, 0x000200f9u, 0x00002990u, 0x000200f8u, 0x00002990u, 0x000700f5u, 0x00000008u, 0x00006e34u, 0x00006e35u, 0x00002998u, 0x000029aau, 0x00002992u, 0x0003003eu, 0x0000297eu, 0x00006e34u, 0x0003003eu, 0x000025b2u, 0x00006e34u, 0x000300f7u, 0x000025b7u, 0x00000000u, 0x000400fau, 0x00001927u, 0x000025b8u, 0x000025b9u, 0x000200f8u, 0x000025b9u, 0x0003003eu, 0x0000245fu, 0x00000488u, 0x000200f9u, 0x000025b7u, 0x000200f8u, 0x000025b8u, 0x0004003du, 0x0000004du, 0x000025bau, 0x00001870u, 0x000500c7u, 0x0000004du, 0x000025bcu, 0x000025bau, 0x0000b1bdu, 0x0003003eu, 0x0000245fu, 0x000025bcu, 0x000200f9u, 0x000025b7u, 0x000200f8u, 0x000025b7u, 0x00050041u, 0x00000038u, 0x000025bdu, 0x0000245fu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000025beu, 0x000025bdu, 0x00050041u, 0x00000038u, 0x000025bfu, 0x0000245fu, 0x0000032au, 0x0004003du, 0x00000008u, 0x000025c0u, 0x000025bfu, 0x00050080u, 0x00000008u, 0x000025c1u, 0x000025beu, 0x000025c0u, 0x0003003eu, 0x00002460u, 0x000025c1u, 0x0004003du, 0x0000004du, 0x000025c2u, 0x00001870u, 0x000500c3u, 0x0000004du, 0x000025c4u, 0x000025c2u, 0x0000b1bcu, 0x0003003eu, 0x00001870u, 0x000025c4u, 0x0003003eu, 0x00005b35u, 0x0000243fu, 0x0003003eu, 0x00005b36u, 0x00002453u, 0x0004003du, 0x00000008u, 0x000025c7u, 0x000025a2u, 0x0003003eu, 0x00002463u, 0x000025c7u, 0x000500abu, 0x00000058u, 0x000029b0u, 0x0000243fu, 0x00000185u, 0x000300f7u, 0x000029b1u, 0x00000000u, 0x000400fau, 0x000029b0u, 0x000029b2u, 0x000029b1u, 0x000200f8u, 0x000029b2u, 0x000500c4u, 0x00000008u, 0x000029b5u, 0x00000194u, 0x0000243fu, 0x0003003eu, 0x000029acu, 0x000029b5u, 0x000500c7u, 0x00000008u, 0x000029b8u, 0x00002453u, 0x00000197u, 0x000500abu, 0x00000058u, 0x000029b9u, 0x000029b8u, 0x00000185u, 0x000300f7u, 0x000029bau, 0x00000000u, 0x000400fau, 0x000029b9u, 0x000029bbu, 0x000029bau, 0x000200f8u, 0x000029bbu, 0x000500c7u, 0x00000008u, 0x000029beu, 0x000025c7u, 0x000029b5u, 0x00050082u, 0x00000008u, 0x000029bfu, 0x000029beu, 0x00000194u, 0x0007000cu, 0x00000008u, 0x000029c0u, 0x00000001u, 0x0000002au, 0x000029bfu, 0x00000185u, 0x000500c6u, 0x00000008u, 0x000029c2u, 0x000025c7u, 0x000029c0u, 0x0003003eu, 0x00002463u, 0x000029c2u, 0x000200f9u, 0x000029bau, 0x000200f8u, 0x000029bau, 0x000700f5u, 0x00000008u, 0x00006e93u, 0x000025c7u, 0x000029b2u, 0x000029c2u, 0x000029bbu, 0x00050082u, 0x00000008u, 0x000029c4u, 0x000029b5u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000029c6u, 0x00006e93u, 0x000029c4u, 0x0003003eu, 0x00002463u, 0x000029c6u, 0x000200f9u, 0x000029b1u, 0x000200f8u, 0x000029b1u, 0x000700f5u, 0x00000008u, 0x00006e94u, 0x000025c7u, 0x000025b7u, 0x000029c6u, 0x000029bau, 0x0003003eu, 0x000029adu, 0x00006e94u, 0x0003003eu, 0x00002461u, 0x00006e94u, 0x0003003eu, 0x00005b39u, 0x00002449u, 0x0003003eu, 0x00005b3au, 0x00002453u, 0x0004003du, 0x00000008u, 0x000025cbu, 0x000025b2u, 0x0003003eu, 0x00002466u, 0x000025cbu, 0x000500abu, 0x00000058u, 0x000029ccu, 0x00002449u, 0x00000185u, 0x000300f7u, 0x000029cdu, 0x00000000u, 0x000400fau, 0x000029ccu, 0x000029ceu, 0x000029cdu, 0x000200f8u, 0x000029ceu, 0x000500c4u, 0x00000008u, 0x000029d1u, 0x00000194u, 0x00002449u, 0x0003003eu, 0x000029c8u, 0x000029d1u, 0x000500c7u, 0x00000008u, 0x000029d4u, 0x00002453u, 0x000001e0u, 0x000500abu, 0x00000058u, 0x000029d5u, 0x000029d4u, 0x00000185u, 0x000300f7u, 0x000029d6u, 0x00000000u, 0x000400fau, 0x000029d5u, 0x000029d7u, 0x000029d6u, 0x000200f8u, 0x000029d7u, 0x000500c7u, 0x00000008u, 0x000029dau, 0x000025cbu, 0x000029d1u, 0x00050082u, 0x00000008u, 0x000029dbu, 0x000029dau, 0x00000194u, 0x0007000cu, 0x00000008u, 0x000029dcu, 0x00000001u, 0x0000002au, 0x000029dbu, 0x00000185u, 0x000500c6u, 0x00000008u, 0x000029deu, 0x000025cbu, 0x000029dcu, 0x0003003eu, 0x00002466u, 0x000029deu, 0x000200f9u, 0x000029d6u, 0x000200f8u, 0x000029d6u, 0x000700f5u, 0x00000008u, 0x00006eb2u, 0x000025cbu, 0x000029ceu, 0x000029deu, 0x000029d7u, 0x00050082u, 0x00000008u, 0x000029e0u, 0x000029d1u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000029e2u, 0x00006eb2u, 0x000029e0u, 0x0003003eu, 0x00002466u, 0x000029e2u, 0x000200f9u, 0x000029cdu, 0x000200f8u, 0x000029cdu, 0x000700f5u, 0x00000008u, 0x00006eb3u, 0x000025cbu, 0x000029b1u, 0x000029e2u, 0x000029d6u, 0x0003003eu, 0x000029c9u, 0x00006eb3u, 0x0003003eu, 0x00002464u, 0x00006eb3u, 0x0004003du, 0x00000008u, 0x000025ceu, 0x000025a2u, 0x00050080u, 0x00000008u, 0x000025cfu, 0x000025ceu, 0x00000194u, 0x0003003eu, 0x00005b3du, 0x0000243fu, 0x0003003eu, 0x00005b3eu, 0x00002453u, 0x0003003eu, 0x00002469u, 0x000025cfu, 0x000300f7u, 0x000029e9u, 0x00000000u, 0x000400fau, 0x000029b0u, 0x000029eau, 0x000029e9u, 0x000200f8u, 0x000029eau, 0x000500c4u, 0x00000008u, 0x000029edu, 0x00000194u, 0x0000243fu, 0x0003003eu, 0x000029e4u, 0x000029edu, 0x000500c7u, 0x00000008u, 0x000029f0u, 0x00002453u, 0x00000197u, 0x000500abu, 0x00000058u, 0x000029f1u, 0x000029f0u, 0x00000185u, 0x000300f7u, 0x000029f2u, 0x00000000u, 0x000400fau, 0x000029f1u, 0x000029f3u, 0x000029f2u, 0x000200f8u, 0x000029f3u, 0x000500c7u, 0x00000008u, 0x000029f6u, 0x000025cfu, 0x000029edu, 0x00050082u, 0x00000008u, 0x000029f7u, 0x000029f6u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x000029f8u, 0x00000001u, 0x0000002au, 0x000029f7u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x000029fau, 0x000025cfu, 0x000029f8u, 0x0003003eu, 0x00002469u, 0x000029fau, 0x000200f9u, 0x000029f2u, 0x000200f8u, 0x000029f2u, 0x000700f5u, 0x00000008u, 0x00006ed1u, 0x000025cfu, 0x000029eau, 0x000029fau, 0x000029f3u, 0x00050082u, 0x00000008u, 0x000029fcu, 0x000029edu, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000029feu, 0x00006ed1u, 0x000029fcu, 0x0003003eu, 0x00002469u, 0x000029feu, 0x000200f9u, 0x000029e9u, 0x000200f8u, 0x000029e9u, 0x000700f5u, 0x00000008u, 0x00006ed2u, 0x000025cfu, 0x000029cdu, 0x000029feu, 0x000029f2u, 0x0003003eu, 0x000029e5u, 0x00006ed2u, 0x0003003eu, 0x00002467u, 0x00006ed2u, 0x0004003du, 0x00000008u, 0x000025d3u, 0x000025b2u, 0x00050080u, 0x00000008u, 0x000025d4u, 0x000025d3u, 0x00000194u, 0x0003003eu, 0x00005b41u, 0x00002449u, 0x0003003eu, 0x00005b42u, 0x00002453u, 0x0003003eu, 0x0000246cu, 0x000025d4u, 0x000300f7u, 0x00002a05u, 0x00000000u, 0x000400fau, 0x000029ccu, 0x00002a06u, 0x00002a05u, 0x000200f8u, 0x00002a06u, 0x000500c4u, 0x00000008u, 0x00002a09u, 0x00000194u, 0x00002449u, 0x0003003eu, 0x00002a00u, 0x00002a09u, 0x000500c7u, 0x00000008u, 0x00002a0cu, 0x00002453u, 0x000001e0u, 0x000500abu, 0x00000058u, 0x00002a0du, 0x00002a0cu, 0x00000185u, 0x000300f7u, 0x00002a0eu, 0x00000000u, 0x000400fau, 0x00002a0du, 0x00002a0fu, 0x00002a0eu, 0x000200f8u, 0x00002a0fu, 0x000500c7u, 0x00000008u, 0x00002a12u, 0x000025d4u, 0x00002a09u, 0x00050082u, 0x00000008u, 0x00002a13u, 0x00002a12u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00002a14u, 0x00000001u, 0x0000002au, 0x00002a13u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x00002a16u, 0x000025d4u, 0x00002a14u, 0x0003003eu, 0x0000246cu, 0x00002a16u, 0x000200f9u, 0x00002a0eu, 0x000200f8u, 0x00002a0eu, 0x000700f5u, 0x00000008u, 0x00006ef0u, 0x000025d4u, 0x00002a06u, 0x00002a16u, 0x00002a0fu, 0x00050082u, 0x00000008u, 0x00002a18u, 0x00002a09u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00002a1au, 0x00006ef0u, 0x00002a18u, 0x0003003eu, 0x0000246cu, 0x00002a1au, 0x000200f9u, 0x00002a05u, 0x000200f8u, 0x00002a05u, 0x000700f5u, 0x00000008u, 0x00006ef1u, 0x000025d4u, 0x000029e9u, 0x00002a1au, 0x00002a0eu, 0x0003003eu, 0x00002a01u, 0x00006ef1u, 0x0003003eu, 0x0000246au, 0x00006ef1u, 0x00050082u, 0x00000008u, 0x000025d9u, 0x00006ef1u, 0x00006eb3u, 0x0007000cu, 0x00000008u, 0x000025dau, 0x00000001u, 0x0000002au, 0x000025d9u, 0x00000bc5u, 0x0003003eu, 0x0000246du, 0x000025dau, 0x000500c7u, 0x00000008u, 0x000025dcu, 0x00006eb3u, 0x000002eeu, 0x00050080u, 0x00000008u, 0x000025deu, 0x000025dcu, 0x000025dau, 0x0003003eu, 0x0000246au, 0x000025deu, 0x0003003eu, 0x00002464u, 0x000025dcu, 0x0004003du, 0x0000004du, 0x000025e2u, 0x0000245fu, 0x000500aau, 0x00000489u, 0x000025e3u, 0x000025e2u, 0x00000bcfu, 0x00050051u, 0x00000058u, 0x000025e4u, 0x000025e3u, 0x00000000u, 0x00050051u, 0x00000058u, 0x000025e5u, 0x000025e3u, 0x00000001u, 0x00060050u, 0x00000bd1u, 0x000025e6u, 0x00001951u, 0x000025e4u, 0x000025e5u, 0x0004009bu, 0x00000058u, 0x000025e7u, 0x000025e6u, 0x0003003eu, 0x00001874u, 0x000025e7u, 0x000300f7u, 0x000025e9u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x000025eau, 0x000025e9u, 0x000200f8u, 0x000025eau, 0x0003003eu, 0x00002460u, 0x00000185u, 0x000200f9u, 0x000025e9u, 0x000200f8u, 0x000025e9u, 0x000600a9u, 0x00000008u, 0x0000b1deu, 0x000025e7u, 0x00000185u, 0x000025c1u, 0x000500aau, 0x00000058u, 0x000025edu, 0x0000b1dcu, 0x00000194u, 0x0003003eu, 0x0000246eu, 0x000025edu, 0x000500afu, 0x00000058u, 0x000025efu, 0x0000b1deu, 0x000002e0u, 0x000300f7u, 0x000025f0u, 0x00000000u, 0x000400fau, 0x000025efu, 0x000025f1u, 0x000025f2u, 0x000200f8u, 0x000025f2u, 0x00050050u, 0x0000004du, 0x000025f8u, 0x00006e94u, 0x000025dcu, 0x0003003eu, 0x00002470u, 0x000025f8u, 0x000200f9u, 0x000025f0u, 0x000200f8u, 0x000025f1u, 0x00050050u, 0x0000004du, 0x000025f5u, 0x00006ed2u, 0x000025deu, 0x0003003eu, 0x00002470u, 0x000025f5u, 0x000200f9u, 0x000025f0u, 0x000200f8u, 0x000025f0u, 0x000700f5u, 0x0000004du, 0x00006f1du, 0x000025f5u, 0x000025f1u, 0x000025f8u, 0x000025f2u, 0x0003003eu, 0x0000246fu, 0x00006f1du, 0x000300f7u, 0x000025fbu, 0x00000000u, 0x000400fau, 0x00001921u, 0x000025fcu, 0x000025fdu, 0x000200f8u, 0x000025fdu, 0x000300f7u, 0x0000269cu, 0x00000000u, 0x000d00fbu, 0x0000b1dcu, 0x0000269cu, 0x00000000u, 0x0000269du, 0x00000001u, 0x0000269eu, 0x00000002u, 0x0000269fu, 0x00000003u, 0x000026a0u, 0x00000004u, 0x000026a1u, 0x000200f8u, 0x000026a1u, 0x000300f7u, 0x00002851u, 0x00000000u, 0x000700fbu, 0x0000b1ddu, 0x00002852u, 0x00000000u, 0x00002853u, 0x00000001u, 0x00002854u, 0x000200f8u, 0x00002854u, 0x0004007cu, 0x000000a0u, 0x00002896u, 0x00006f1du, 0x0003003eu, 0x00005c45u, 0x00002428u, 0x0003003eu, 0x00005c46u, 0x0000242bu, 0x0003003eu, 0x0000256au, 0x000018feu, 0x0003003eu, 0x0000256bu, 0x00002896u, 0x00050041u, 0x00000007u, 0x00003a38u, 0x0000256bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003a39u, 0x00003a38u, 0x00050084u, 0x00000006u, 0x00003a3au, 0x0000242bu, 0x00003a39u, 0x00050080u, 0x00000006u, 0x00003a3bu, 0x00002428u, 0x00003a3au, 0x0003003eu, 0x00003a30u, 0x00003a3bu, 0x00050041u, 0x00000007u, 0x00003a3cu, 0x0000256bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003a3du, 0x00003a3cu, 0x00050080u, 0x00000006u, 0x00003a3fu, 0x00003a3bu, 0x00003a3du, 0x0003003eu, 0x00003a30u, 0x00003a3fu, 0x000500c7u, 0x00000006u, 0x00003a41u, 0x00003a3fu, 0x000006b4u, 0x0003003eu, 0x00003a30u, 0x00003a41u, 0x0003003eu, 0x00003a31u, 0x00003a41u, 0x0004003du, 0x00000006u, 0x00003a44u, 0x00003a38u, 0x000500c7u, 0x00000006u, 0x00003a45u, 0x00003a44u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003a46u, 0x00003a45u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003a48u, 0x00003a41u, 0x00003a46u, 0x0003003eu, 0x00003a31u, 0x00003a48u, 0x000500c6u, 0x00000006u, 0x00003a4au, 0x00003a48u, 0x00000331u, 0x0003003eu, 0x00003a31u, 0x00003a4au, 0x00080041u, 0x000001f9u, 0x00003a4du, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003a4au, 0x0004003du, 0x000001abu, 0x00003a4eu, 0x00003a4du, 0x00040071u, 0x00000006u, 0x00003a4fu, 0x00003a4eu, 0x0003003eu, 0x00003a32u, 0x00003a4fu, 0x0004007cu, 0x00000008u, 0x00003a51u, 0x00003a4fu, 0x00070050u, 0x00000009u, 0x00003a52u, 0x00003a51u, 0x00003a51u, 0x00003a51u, 0x00003a51u, 0x0003003eu, 0x00003a33u, 0x00003a52u, 0x0003003eu, 0x00002473u, 0x00003a52u, 0x000300f7u, 0x0000289bu, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000289cu, 0x0000289bu, 0x000200f8u, 0x0000289cu, 0x00050050u, 0x0000004du, 0x0000289fu, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000028a0u, 0x0000289fu, 0x0003003eu, 0x00005c49u, 0x00002428u, 0x0003003eu, 0x00005c4au, 0x0000242bu, 0x0003003eu, 0x0000256du, 0x000018feu, 0x0003003eu, 0x0000256eu, 0x000028a0u, 0x00050041u, 0x00000007u, 0x00003a5bu, 0x0000256eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003a5cu, 0x00003a5bu, 0x00050084u, 0x00000006u, 0x00003a5du, 0x0000242bu, 0x00003a5cu, 0x00050080u, 0x00000006u, 0x00003a5eu, 0x00002428u, 0x00003a5du, 0x0003003eu, 0x00003a53u, 0x00003a5eu, 0x00050041u, 0x00000007u, 0x00003a5fu, 0x0000256eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003a60u, 0x00003a5fu, 0x00050080u, 0x00000006u, 0x00003a62u, 0x00003a5eu, 0x00003a60u, 0x0003003eu, 0x00003a53u, 0x00003a62u, 0x000500c7u, 0x00000006u, 0x00003a64u, 0x00003a62u, 0x000006b4u, 0x0003003eu, 0x00003a53u, 0x00003a64u, 0x0003003eu, 0x00003a54u, 0x00003a64u, 0x0004003du, 0x00000006u, 0x00003a67u, 0x00003a5bu, 0x000500c7u, 0x00000006u, 0x00003a68u, 0x00003a67u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003a69u, 0x00003a68u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003a6bu, 0x00003a64u, 0x00003a69u, 0x0003003eu, 0x00003a54u, 0x00003a6bu, 0x000500c6u, 0x00000006u, 0x00003a6du, 0x00003a6bu, 0x00000331u, 0x0003003eu, 0x00003a54u, 0x00003a6du, 0x00080041u, 0x000001f9u, 0x00003a70u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003a6du, 0x0004003du, 0x000001abu, 0x00003a71u, 0x00003a70u, 0x00040071u, 0x00000006u, 0x00003a72u, 0x00003a71u, 0x0003003eu, 0x00003a55u, 0x00003a72u, 0x0004007cu, 0x00000008u, 0x00003a74u, 0x00003a72u, 0x00070050u, 0x00000009u, 0x00003a75u, 0x00003a74u, 0x00003a74u, 0x00003a74u, 0x00003a74u, 0x0003003eu, 0x00003a56u, 0x00003a75u, 0x0003003eu, 0x0000247bu, 0x00003a75u, 0x00050050u, 0x0000004du, 0x000028a6u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000028a7u, 0x000028a6u, 0x0003003eu, 0x00005c4du, 0x00002428u, 0x0003003eu, 0x00005c4eu, 0x0000242bu, 0x0003003eu, 0x00002570u, 0x000018feu, 0x0003003eu, 0x00002571u, 0x000028a7u, 0x00050041u, 0x00000007u, 0x00003a7eu, 0x00002571u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003a7fu, 0x00003a7eu, 0x00050084u, 0x00000006u, 0x00003a80u, 0x0000242bu, 0x00003a7fu, 0x00050080u, 0x00000006u, 0x00003a81u, 0x00002428u, 0x00003a80u, 0x0003003eu, 0x00003a76u, 0x00003a81u, 0x00050041u, 0x00000007u, 0x00003a82u, 0x00002571u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003a83u, 0x00003a82u, 0x00050080u, 0x00000006u, 0x00003a85u, 0x00003a81u, 0x00003a83u, 0x0003003eu, 0x00003a76u, 0x00003a85u, 0x000500c7u, 0x00000006u, 0x00003a87u, 0x00003a85u, 0x000006b4u, 0x0003003eu, 0x00003a76u, 0x00003a87u, 0x0003003eu, 0x00003a77u, 0x00003a87u, 0x0004003du, 0x00000006u, 0x00003a8au, 0x00003a7eu, 0x000500c7u, 0x00000006u, 0x00003a8bu, 0x00003a8au, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003a8cu, 0x00003a8bu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003a8eu, 0x00003a87u, 0x00003a8cu, 0x0003003eu, 0x00003a77u, 0x00003a8eu, 0x000500c6u, 0x00000006u, 0x00003a90u, 0x00003a8eu, 0x00000331u, 0x0003003eu, 0x00003a77u, 0x00003a90u, 0x00080041u, 0x000001f9u, 0x00003a93u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003a90u, 0x0004003du, 0x000001abu, 0x00003a94u, 0x00003a93u, 0x00040071u, 0x00000006u, 0x00003a95u, 0x00003a94u, 0x0003003eu, 0x00003a78u, 0x00003a95u, 0x0004007cu, 0x00000008u, 0x00003a97u, 0x00003a95u, 0x00070050u, 0x00000009u, 0x00003a98u, 0x00003a97u, 0x00003a97u, 0x00003a97u, 0x00003a97u, 0x0003003eu, 0x00003a79u, 0x00003a98u, 0x0003003eu, 0x00002483u, 0x00003a98u, 0x000200f9u, 0x0000289bu, 0x000200f8u, 0x0000289bu, 0x000700f5u, 0x00000009u, 0x000073f8u, 0x000072a9u, 0x00002854u, 0x00003a98u, 0x0000289cu, 0x000700f5u, 0x00000009u, 0x00007306u, 0x000072a9u, 0x00002854u, 0x00003a75u, 0x0000289cu, 0x000300f7u, 0x000028acu, 0x00000000u, 0x000400fau, 0x000025e7u, 0x000028adu, 0x000028acu, 0x000200f8u, 0x000028adu, 0x00050050u, 0x0000004du, 0x000028b0u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000028b1u, 0x000028b0u, 0x0003003eu, 0x00005c51u, 0x00002428u, 0x0003003eu, 0x00005c52u, 0x0000242bu, 0x0003003eu, 0x00002573u, 0x000018feu, 0x0003003eu, 0x00002574u, 0x000028b1u, 0x00050041u, 0x00000007u, 0x00003aa1u, 0x00002574u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003aa2u, 0x00003aa1u, 0x00050084u, 0x00000006u, 0x00003aa3u, 0x0000242bu, 0x00003aa2u, 0x00050080u, 0x00000006u, 0x00003aa4u, 0x00002428u, 0x00003aa3u, 0x0003003eu, 0x00003a99u, 0x00003aa4u, 0x00050041u, 0x00000007u, 0x00003aa5u, 0x00002574u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003aa6u, 0x00003aa5u, 0x00050080u, 0x00000006u, 0x00003aa8u, 0x00003aa4u, 0x00003aa6u, 0x0003003eu, 0x00003a99u, 0x00003aa8u, 0x000500c7u, 0x00000006u, 0x00003aaau, 0x00003aa8u, 0x000006b4u, 0x0003003eu, 0x00003a99u, 0x00003aaau, 0x0003003eu, 0x00003a9au, 0x00003aaau, 0x0004003du, 0x00000006u, 0x00003aadu, 0x00003aa1u, 0x000500c7u, 0x00000006u, 0x00003aaeu, 0x00003aadu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003aafu, 0x00003aaeu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003ab1u, 0x00003aaau, 0x00003aafu, 0x0003003eu, 0x00003a9au, 0x00003ab1u, 0x000500c6u, 0x00000006u, 0x00003ab3u, 0x00003ab1u, 0x00000331u, 0x0003003eu, 0x00003a9au, 0x00003ab3u, 0x00080041u, 0x000001f9u, 0x00003ab6u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003ab3u, 0x0004003du, 0x000001abu, 0x00003ab7u, 0x00003ab6u, 0x00040071u, 0x00000006u, 0x00003ab8u, 0x00003ab7u, 0x0003003eu, 0x00003a9bu, 0x00003ab8u, 0x0004007cu, 0x00000008u, 0x00003abau, 0x00003ab8u, 0x00070050u, 0x00000009u, 0x00003abbu, 0x00003abau, 0x00003abau, 0x00003abau, 0x00003abau, 0x0003003eu, 0x00003a9cu, 0x00003abbu, 0x0003003eu, 0x0000248bu, 0x00003abbu, 0x000200f9u, 0x000028acu, 0x000200f8u, 0x000028acu, 0x000700f5u, 0x00000009u, 0x00007471u, 0x000072a9u, 0x0000289bu, 0x00003abbu, 0x000028adu, 0x000200f9u, 0x00002851u, 0x000200f8u, 0x00002853u, 0x0004007cu, 0x000000a0u, 0x00002876u, 0x00006f1du, 0x0003003eu, 0x00005c35u, 0x00002428u, 0x0003003eu, 0x00005c36u, 0x0000242bu, 0x0003003eu, 0x0000255eu, 0x000018feu, 0x0003003eu, 0x0000255fu, 0x00002876u, 0x00050041u, 0x00000007u, 0x00003971u, 0x0000255fu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003972u, 0x00003971u, 0x00050084u, 0x00000006u, 0x00003973u, 0x0000242bu, 0x00003972u, 0x00050080u, 0x00000006u, 0x00003974u, 0x00002428u, 0x00003973u, 0x0003003eu, 0x00003968u, 0x00003974u, 0x00050041u, 0x00000007u, 0x00003975u, 0x0000255fu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003976u, 0x00003975u, 0x000500c2u, 0x00000006u, 0x00003977u, 0x00003976u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003979u, 0x00003974u, 0x00003977u, 0x0003003eu, 0x00003968u, 0x00003979u, 0x000500c7u, 0x00000006u, 0x0000397bu, 0x00003979u, 0x000006b4u, 0x0003003eu, 0x00003968u, 0x0000397bu, 0x0004003du, 0x00000006u, 0x0000397du, 0x00003975u, 0x000400c8u, 0x00000006u, 0x0000397eu, 0x0000397du, 0x000500c7u, 0x00000006u, 0x0000397fu, 0x0000397eu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00003980u, 0x0000397fu, 0x000006bcu, 0x0003003eu, 0x00003969u, 0x00003980u, 0x0003003eu, 0x0000396au, 0x0000397bu, 0x0004003du, 0x00000006u, 0x00003983u, 0x00003971u, 0x000500c7u, 0x00000006u, 0x00003984u, 0x00003983u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003985u, 0x00003984u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003987u, 0x0000397bu, 0x00003985u, 0x0003003eu, 0x0000396au, 0x00003987u, 0x000500c6u, 0x00000006u, 0x00003989u, 0x00003987u, 0x00000331u, 0x0003003eu, 0x0000396au, 0x00003989u, 0x00080041u, 0x000001f9u, 0x0000398cu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003989u, 0x0004003du, 0x000001abu, 0x0000398du, 0x0000398cu, 0x00040071u, 0x00000006u, 0x0000398eu, 0x0000398du, 0x0003003eu, 0x0000396bu, 0x0000398eu, 0x000500c2u, 0x00000006u, 0x00003991u, 0x0000398eu, 0x00003980u, 0x000500c7u, 0x00000006u, 0x00003992u, 0x00003991u, 0x000006d8u, 0x0003003eu, 0x0000396bu, 0x00003992u, 0x000500c4u, 0x00000006u, 0x00003994u, 0x00003992u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00003996u, 0x00003992u, 0x00003994u, 0x0003003eu, 0x0000396bu, 0x00003996u, 0x0004007cu, 0x00000008u, 0x00003998u, 0x00003996u, 0x00070050u, 0x00000009u, 0x00003999u, 0x00003998u, 0x00003998u, 0x00003998u, 0x00003998u, 0x0003003eu, 0x0000396cu, 0x00003999u, 0x0003003eu, 0x00002473u, 0x00003999u, 0x000300f7u, 0x0000287bu, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000287cu, 0x0000287bu, 0x000200f8u, 0x0000287cu, 0x00050050u, 0x0000004du, 0x0000287fu, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x00002880u, 0x0000287fu, 0x0003003eu, 0x00005c39u, 0x00002428u, 0x0003003eu, 0x00005c3au, 0x0000242bu, 0x0003003eu, 0x00002561u, 0x000018feu, 0x0003003eu, 0x00002562u, 0x00002880u, 0x00050041u, 0x00000007u, 0x000039a3u, 0x00002562u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000039a4u, 0x000039a3u, 0x00050084u, 0x00000006u, 0x000039a5u, 0x0000242bu, 0x000039a4u, 0x00050080u, 0x00000006u, 0x000039a6u, 0x00002428u, 0x000039a5u, 0x0003003eu, 0x0000399au, 0x000039a6u, 0x00050041u, 0x00000007u, 0x000039a7u, 0x00002562u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000039a8u, 0x000039a7u, 0x000500c2u, 0x00000006u, 0x000039a9u, 0x000039a8u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000039abu, 0x000039a6u, 0x000039a9u, 0x0003003eu, 0x0000399au, 0x000039abu, 0x000500c7u, 0x00000006u, 0x000039adu, 0x000039abu, 0x000006b4u, 0x0003003eu, 0x0000399au, 0x000039adu, 0x0004003du, 0x00000006u, 0x000039afu, 0x000039a7u, 0x000400c8u, 0x00000006u, 0x000039b0u, 0x000039afu, 0x000500c7u, 0x00000006u, 0x000039b1u, 0x000039b0u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000039b2u, 0x000039b1u, 0x000006bcu, 0x0003003eu, 0x0000399bu, 0x000039b2u, 0x0003003eu, 0x0000399cu, 0x000039adu, 0x0004003du, 0x00000006u, 0x000039b5u, 0x000039a3u, 0x000500c7u, 0x00000006u, 0x000039b6u, 0x000039b5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000039b7u, 0x000039b6u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000039b9u, 0x000039adu, 0x000039b7u, 0x0003003eu, 0x0000399cu, 0x000039b9u, 0x000500c6u, 0x00000006u, 0x000039bbu, 0x000039b9u, 0x00000331u, 0x0003003eu, 0x0000399cu, 0x000039bbu, 0x00080041u, 0x000001f9u, 0x000039beu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000039bbu, 0x0004003du, 0x000001abu, 0x000039bfu, 0x000039beu, 0x00040071u, 0x00000006u, 0x000039c0u, 0x000039bfu, 0x0003003eu, 0x0000399du, 0x000039c0u, 0x000500c2u, 0x00000006u, 0x000039c3u, 0x000039c0u, 0x000039b2u, 0x000500c7u, 0x00000006u, 0x000039c4u, 0x000039c3u, 0x000006d8u, 0x0003003eu, 0x0000399du, 0x000039c4u, 0x000500c4u, 0x00000006u, 0x000039c6u, 0x000039c4u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000039c8u, 0x000039c4u, 0x000039c6u, 0x0003003eu, 0x0000399du, 0x000039c8u, 0x0004007cu, 0x00000008u, 0x000039cau, 0x000039c8u, 0x00070050u, 0x00000009u, 0x000039cbu, 0x000039cau, 0x000039cau, 0x000039cau, 0x000039cau, 0x0003003eu, 0x0000399eu, 0x000039cbu, 0x0003003eu, 0x0000247bu, 0x000039cbu, 0x00050050u, 0x0000004du, 0x00002886u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002887u, 0x00002886u, 0x0003003eu, 0x00005c3du, 0x00002428u, 0x0003003eu, 0x00005c3eu, 0x0000242bu, 0x0003003eu, 0x00002564u, 0x000018feu, 0x0003003eu, 0x00002565u, 0x00002887u, 0x00050041u, 0x00000007u, 0x000039d5u, 0x00002565u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000039d6u, 0x000039d5u, 0x00050084u, 0x00000006u, 0x000039d7u, 0x0000242bu, 0x000039d6u, 0x00050080u, 0x00000006u, 0x000039d8u, 0x00002428u, 0x000039d7u, 0x0003003eu, 0x000039ccu, 0x000039d8u, 0x00050041u, 0x00000007u, 0x000039d9u, 0x00002565u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000039dau, 0x000039d9u, 0x000500c2u, 0x00000006u, 0x000039dbu, 0x000039dau, 0x00000194u, 0x00050080u, 0x00000006u, 0x000039ddu, 0x000039d8u, 0x000039dbu, 0x0003003eu, 0x000039ccu, 0x000039ddu, 0x000500c7u, 0x00000006u, 0x000039dfu, 0x000039ddu, 0x000006b4u, 0x0003003eu, 0x000039ccu, 0x000039dfu, 0x0004003du, 0x00000006u, 0x000039e1u, 0x000039d9u, 0x000400c8u, 0x00000006u, 0x000039e2u, 0x000039e1u, 0x000500c7u, 0x00000006u, 0x000039e3u, 0x000039e2u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000039e4u, 0x000039e3u, 0x000006bcu, 0x0003003eu, 0x000039cdu, 0x000039e4u, 0x0003003eu, 0x000039ceu, 0x000039dfu, 0x0004003du, 0x00000006u, 0x000039e7u, 0x000039d5u, 0x000500c7u, 0x00000006u, 0x000039e8u, 0x000039e7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000039e9u, 0x000039e8u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000039ebu, 0x000039dfu, 0x000039e9u, 0x0003003eu, 0x000039ceu, 0x000039ebu, 0x000500c6u, 0x00000006u, 0x000039edu, 0x000039ebu, 0x00000331u, 0x0003003eu, 0x000039ceu, 0x000039edu, 0x00080041u, 0x000001f9u, 0x000039f0u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000039edu, 0x0004003du, 0x000001abu, 0x000039f1u, 0x000039f0u, 0x00040071u, 0x00000006u, 0x000039f2u, 0x000039f1u, 0x0003003eu, 0x000039cfu, 0x000039f2u, 0x000500c2u, 0x00000006u, 0x000039f5u, 0x000039f2u, 0x000039e4u, 0x000500c7u, 0x00000006u, 0x000039f6u, 0x000039f5u, 0x000006d8u, 0x0003003eu, 0x000039cfu, 0x000039f6u, 0x000500c4u, 0x00000006u, 0x000039f8u, 0x000039f6u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000039fau, 0x000039f6u, 0x000039f8u, 0x0003003eu, 0x000039cfu, 0x000039fau, 0x0004007cu, 0x00000008u, 0x000039fcu, 0x000039fau, 0x00070050u, 0x00000009u, 0x000039fdu, 0x000039fcu, 0x000039fcu, 0x000039fcu, 0x000039fcu, 0x0003003eu, 0x000039d0u, 0x000039fdu, 0x0003003eu, 0x00002483u, 0x000039fdu, 0x000200f9u, 0x0000287bu, 0x000200f8u, 0x0000287bu, 0x000700f5u, 0x00000009u, 0x000073f6u, 0x000072a9u, 0x00002853u, 0x000039fdu, 0x0000287cu, 0x000700f5u, 0x00000009u, 0x00007304u, 0x000072a9u, 0x00002853u, 0x000039cbu, 0x0000287cu, 0x000300f7u, 0x0000288cu, 0x00000000u, 0x000400fau, 0x000025e7u, 0x0000288du, 0x0000288cu, 0x000200f8u, 0x0000288du, 0x00050050u, 0x0000004du, 0x00002890u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002891u, 0x00002890u, 0x0003003eu, 0x00005c41u, 0x00002428u, 0x0003003eu, 0x00005c42u, 0x0000242bu, 0x0003003eu, 0x00002567u, 0x000018feu, 0x0003003eu, 0x00002568u, 0x00002891u, 0x00050041u, 0x00000007u, 0x00003a07u, 0x00002568u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003a08u, 0x00003a07u, 0x00050084u, 0x00000006u, 0x00003a09u, 0x0000242bu, 0x00003a08u, 0x00050080u, 0x00000006u, 0x00003a0au, 0x00002428u, 0x00003a09u, 0x0003003eu, 0x000039feu, 0x00003a0au, 0x00050041u, 0x00000007u, 0x00003a0bu, 0x00002568u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003a0cu, 0x00003a0bu, 0x000500c2u, 0x00000006u, 0x00003a0du, 0x00003a0cu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003a0fu, 0x00003a0au, 0x00003a0du, 0x0003003eu, 0x000039feu, 0x00003a0fu, 0x000500c7u, 0x00000006u, 0x00003a11u, 0x00003a0fu, 0x000006b4u, 0x0003003eu, 0x000039feu, 0x00003a11u, 0x0004003du, 0x00000006u, 0x00003a13u, 0x00003a0bu, 0x000400c8u, 0x00000006u, 0x00003a14u, 0x00003a13u, 0x000500c7u, 0x00000006u, 0x00003a15u, 0x00003a14u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00003a16u, 0x00003a15u, 0x000006bcu, 0x0003003eu, 0x000039ffu, 0x00003a16u, 0x0003003eu, 0x00003a00u, 0x00003a11u, 0x0004003du, 0x00000006u, 0x00003a19u, 0x00003a07u, 0x000500c7u, 0x00000006u, 0x00003a1au, 0x00003a19u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003a1bu, 0x00003a1au, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003a1du, 0x00003a11u, 0x00003a1bu, 0x0003003eu, 0x00003a00u, 0x00003a1du, 0x000500c6u, 0x00000006u, 0x00003a1fu, 0x00003a1du, 0x00000331u, 0x0003003eu, 0x00003a00u, 0x00003a1fu, 0x00080041u, 0x000001f9u, 0x00003a22u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003a1fu, 0x0004003du, 0x000001abu, 0x00003a23u, 0x00003a22u, 0x00040071u, 0x00000006u, 0x00003a24u, 0x00003a23u, 0x0003003eu, 0x00003a01u, 0x00003a24u, 0x000500c2u, 0x00000006u, 0x00003a27u, 0x00003a24u, 0x00003a16u, 0x000500c7u, 0x00000006u, 0x00003a28u, 0x00003a27u, 0x000006d8u, 0x0003003eu, 0x00003a01u, 0x00003a28u, 0x000500c4u, 0x00000006u, 0x00003a2au, 0x00003a28u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00003a2cu, 0x00003a28u, 0x00003a2au, 0x0003003eu, 0x00003a01u, 0x00003a2cu, 0x0004007cu, 0x00000008u, 0x00003a2eu, 0x00003a2cu, 0x00070050u, 0x00000009u, 0x00003a2fu, 0x00003a2eu, 0x00003a2eu, 0x00003a2eu, 0x00003a2eu, 0x0003003eu, 0x00003a02u, 0x00003a2fu, 0x0003003eu, 0x0000248bu, 0x00003a2fu, 0x000200f9u, 0x0000288cu, 0x000200f8u, 0x0000288cu, 0x000700f5u, 0x00000009u, 0x0000746fu, 0x000072a9u, 0x0000287bu, 0x00003a2fu, 0x0000288du, 0x000200f9u, 0x00002851u, 0x000200f8u, 0x00002852u, 0x0004007cu, 0x000000a0u, 0x00002856u, 0x00006f1du, 0x0003003eu, 0x00005c55u, 0x00002428u, 0x0003003eu, 0x00005c56u, 0x0000242bu, 0x0003003eu, 0x00002576u, 0x000018feu, 0x0003003eu, 0x00002577u, 0x00002856u, 0x00050041u, 0x00000007u, 0x000038c8u, 0x00002577u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000038c9u, 0x000038c8u, 0x00050084u, 0x00000006u, 0x000038cau, 0x0000242bu, 0x000038c9u, 0x00050080u, 0x00000006u, 0x000038cbu, 0x00002428u, 0x000038cau, 0x0003003eu, 0x000038c0u, 0x000038cbu, 0x00050041u, 0x00000007u, 0x000038ccu, 0x00002577u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000038cdu, 0x000038ccu, 0x00050084u, 0x00000006u, 0x000038ceu, 0x000038cdu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000038d0u, 0x000038cbu, 0x000038ceu, 0x0003003eu, 0x000038c0u, 0x000038d0u, 0x000500c7u, 0x00000006u, 0x000038d2u, 0x000038d0u, 0x000006b4u, 0x0003003eu, 0x000038c0u, 0x000038d2u, 0x000500c2u, 0x00000006u, 0x000038d4u, 0x000038d2u, 0x00000194u, 0x0003003eu, 0x000038c1u, 0x000038d4u, 0x0004003du, 0x00000006u, 0x000038d6u, 0x000038c8u, 0x000500c7u, 0x00000006u, 0x000038d7u, 0x000038d6u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000038d8u, 0x000038d7u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000038dau, 0x000038d4u, 0x000038d8u, 0x0003003eu, 0x000038c1u, 0x000038dau, 0x000500c6u, 0x00000006u, 0x000038dcu, 0x000038dau, 0x0000032au, 0x0003003eu, 0x000038c1u, 0x000038dcu, 0x00080041u, 0x000001f2u, 0x000038dfu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000038dcu, 0x0004003du, 0x000001adu, 0x000038e0u, 0x000038dfu, 0x00040071u, 0x00000006u, 0x000038e1u, 0x000038e0u, 0x0003003eu, 0x000038c2u, 0x000038e1u, 0x000500c2u, 0x00000006u, 0x000038e3u, 0x000038e1u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000038e4u, 0x000038e3u, 0x000500c7u, 0x00000006u, 0x000038e6u, 0x000038e1u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000038e7u, 0x000038e6u, 0x00050050u, 0x0000004du, 0x000038e8u, 0x000038e4u, 0x000038e7u, 0x0009004fu, 0x00000009u, 0x000038e9u, 0x000038e8u, 0x000038e8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000038c3u, 0x000038e9u, 0x0003003eu, 0x00002473u, 0x000038e9u, 0x000300f7u, 0x0000285bu, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000285cu, 0x0000285bu, 0x000200f8u, 0x0000285cu, 0x00050050u, 0x0000004du, 0x0000285fu, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x00002860u, 0x0000285fu, 0x0003003eu, 0x00005c59u, 0x00002428u, 0x0003003eu, 0x00005c5au, 0x0000242bu, 0x0003003eu, 0x00002579u, 0x000018feu, 0x0003003eu, 0x0000257au, 0x00002860u, 0x00050041u, 0x00000007u, 0x000038f2u, 0x0000257au, 0x0000032au, 0x0004003du, 0x00000006u, 0x000038f3u, 0x000038f2u, 0x00050084u, 0x00000006u, 0x000038f4u, 0x0000242bu, 0x000038f3u, 0x00050080u, 0x00000006u, 0x000038f5u, 0x00002428u, 0x000038f4u, 0x0003003eu, 0x000038eau, 0x000038f5u, 0x00050041u, 0x00000007u, 0x000038f6u, 0x0000257au, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000038f7u, 0x000038f6u, 0x00050084u, 0x00000006u, 0x000038f8u, 0x000038f7u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000038fau, 0x000038f5u, 0x000038f8u, 0x0003003eu, 0x000038eau, 0x000038fau, 0x000500c7u, 0x00000006u, 0x000038fcu, 0x000038fau, 0x000006b4u, 0x0003003eu, 0x000038eau, 0x000038fcu, 0x000500c2u, 0x00000006u, 0x000038feu, 0x000038fcu, 0x00000194u, 0x0003003eu, 0x000038ebu, 0x000038feu, 0x0004003du, 0x00000006u, 0x00003900u, 0x000038f2u, 0x000500c7u, 0x00000006u, 0x00003901u, 0x00003900u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003902u, 0x00003901u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003904u, 0x000038feu, 0x00003902u, 0x0003003eu, 0x000038ebu, 0x00003904u, 0x000500c6u, 0x00000006u, 0x00003906u, 0x00003904u, 0x0000032au, 0x0003003eu, 0x000038ebu, 0x00003906u, 0x00080041u, 0x000001f2u, 0x00003909u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003906u, 0x0004003du, 0x000001adu, 0x0000390au, 0x00003909u, 0x00040071u, 0x00000006u, 0x0000390bu, 0x0000390au, 0x0003003eu, 0x000038ecu, 0x0000390bu, 0x000500c2u, 0x00000006u, 0x0000390du, 0x0000390bu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000390eu, 0x0000390du, 0x000500c7u, 0x00000006u, 0x00003910u, 0x0000390bu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003911u, 0x00003910u, 0x00050050u, 0x0000004du, 0x00003912u, 0x0000390eu, 0x00003911u, 0x0009004fu, 0x00000009u, 0x00003913u, 0x00003912u, 0x00003912u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000038edu, 0x00003913u, 0x0003003eu, 0x0000247bu, 0x00003913u, 0x00050050u, 0x0000004du, 0x00002866u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002867u, 0x00002866u, 0x0003003eu, 0x00005c5du, 0x00002428u, 0x0003003eu, 0x00005c5eu, 0x0000242bu, 0x0003003eu, 0x0000257cu, 0x000018feu, 0x0003003eu, 0x0000257du, 0x00002867u, 0x00050041u, 0x00000007u, 0x0000391cu, 0x0000257du, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000391du, 0x0000391cu, 0x00050084u, 0x00000006u, 0x0000391eu, 0x0000242bu, 0x0000391du, 0x00050080u, 0x00000006u, 0x0000391fu, 0x00002428u, 0x0000391eu, 0x0003003eu, 0x00003914u, 0x0000391fu, 0x00050041u, 0x00000007u, 0x00003920u, 0x0000257du, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003921u, 0x00003920u, 0x00050084u, 0x00000006u, 0x00003922u, 0x00003921u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003924u, 0x0000391fu, 0x00003922u, 0x0003003eu, 0x00003914u, 0x00003924u, 0x000500c7u, 0x00000006u, 0x00003926u, 0x00003924u, 0x000006b4u, 0x0003003eu, 0x00003914u, 0x00003926u, 0x000500c2u, 0x00000006u, 0x00003928u, 0x00003926u, 0x00000194u, 0x0003003eu, 0x00003915u, 0x00003928u, 0x0004003du, 0x00000006u, 0x0000392au, 0x0000391cu, 0x000500c7u, 0x00000006u, 0x0000392bu, 0x0000392au, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000392cu, 0x0000392bu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000392eu, 0x00003928u, 0x0000392cu, 0x0003003eu, 0x00003915u, 0x0000392eu, 0x000500c6u, 0x00000006u, 0x00003930u, 0x0000392eu, 0x0000032au, 0x0003003eu, 0x00003915u, 0x00003930u, 0x00080041u, 0x000001f2u, 0x00003933u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003930u, 0x0004003du, 0x000001adu, 0x00003934u, 0x00003933u, 0x00040071u, 0x00000006u, 0x00003935u, 0x00003934u, 0x0003003eu, 0x00003916u, 0x00003935u, 0x000500c2u, 0x00000006u, 0x00003937u, 0x00003935u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003938u, 0x00003937u, 0x000500c7u, 0x00000006u, 0x0000393au, 0x00003935u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000393bu, 0x0000393au, 0x00050050u, 0x0000004du, 0x0000393cu, 0x00003938u, 0x0000393bu, 0x0009004fu, 0x00000009u, 0x0000393du, 0x0000393cu, 0x0000393cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003917u, 0x0000393du, 0x0003003eu, 0x00002483u, 0x0000393du, 0x000200f9u, 0x0000285bu, 0x000200f8u, 0x0000285bu, 0x000700f5u, 0x00000009u, 0x000073f4u, 0x000072a9u, 0x00002852u, 0x0000393du, 0x0000285cu, 0x000700f5u, 0x00000009u, 0x00007302u, 0x000072a9u, 0x00002852u, 0x00003913u, 0x0000285cu, 0x000300f7u, 0x0000286cu, 0x00000000u, 0x000400fau, 0x000025e7u, 0x0000286du, 0x0000286cu, 0x000200f8u, 0x0000286du, 0x00050050u, 0x0000004du, 0x00002870u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002871u, 0x00002870u, 0x0003003eu, 0x00005c61u, 0x00002428u, 0x0003003eu, 0x00005c62u, 0x0000242bu, 0x0003003eu, 0x0000257fu, 0x000018feu, 0x0003003eu, 0x00002580u, 0x00002871u, 0x00050041u, 0x00000007u, 0x00003946u, 0x00002580u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003947u, 0x00003946u, 0x00050084u, 0x00000006u, 0x00003948u, 0x0000242bu, 0x00003947u, 0x00050080u, 0x00000006u, 0x00003949u, 0x00002428u, 0x00003948u, 0x0003003eu, 0x0000393eu, 0x00003949u, 0x00050041u, 0x00000007u, 0x0000394au, 0x00002580u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000394bu, 0x0000394au, 0x00050084u, 0x00000006u, 0x0000394cu, 0x0000394bu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000394eu, 0x00003949u, 0x0000394cu, 0x0003003eu, 0x0000393eu, 0x0000394eu, 0x000500c7u, 0x00000006u, 0x00003950u, 0x0000394eu, 0x000006b4u, 0x0003003eu, 0x0000393eu, 0x00003950u, 0x000500c2u, 0x00000006u, 0x00003952u, 0x00003950u, 0x00000194u, 0x0003003eu, 0x0000393fu, 0x00003952u, 0x0004003du, 0x00000006u, 0x00003954u, 0x00003946u, 0x000500c7u, 0x00000006u, 0x00003955u, 0x00003954u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003956u, 0x00003955u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003958u, 0x00003952u, 0x00003956u, 0x0003003eu, 0x0000393fu, 0x00003958u, 0x000500c6u, 0x00000006u, 0x0000395au, 0x00003958u, 0x0000032au, 0x0003003eu, 0x0000393fu, 0x0000395au, 0x00080041u, 0x000001f2u, 0x0000395du, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000395au, 0x0004003du, 0x000001adu, 0x0000395eu, 0x0000395du, 0x00040071u, 0x00000006u, 0x0000395fu, 0x0000395eu, 0x0003003eu, 0x00003940u, 0x0000395fu, 0x000500c2u, 0x00000006u, 0x00003961u, 0x0000395fu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003962u, 0x00003961u, 0x000500c7u, 0x00000006u, 0x00003964u, 0x0000395fu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003965u, 0x00003964u, 0x00050050u, 0x0000004du, 0x00003966u, 0x00003962u, 0x00003965u, 0x0009004fu, 0x00000009u, 0x00003967u, 0x00003966u, 0x00003966u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003941u, 0x00003967u, 0x0003003eu, 0x0000248bu, 0x00003967u, 0x000200f9u, 0x0000286cu, 0x000200f8u, 0x0000286cu, 0x000700f5u, 0x00000009u, 0x0000746du, 0x000072a9u, 0x0000285bu, 0x00003967u, 0x0000286du, 0x000200f9u, 0x00002851u, 0x000200f8u, 0x00002851u, 0x000900f5u, 0x00000009u, 0x0000746cu, 0x0000746du, 0x0000286cu, 0x0000746fu, 0x0000288cu, 0x00007471u, 0x000028acu, 0x000900f5u, 0x00000009u, 0x000073f2u, 0x000073f4u, 0x0000286cu, 0x000073f6u, 0x0000288cu, 0x000073f8u, 0x000028acu, 0x000900f5u, 0x00000009u, 0x0000737au, 0x000038e9u, 0x0000286cu, 0x00003999u, 0x0000288cu, 0x00003a52u, 0x000028acu, 0x000900f5u, 0x00000009u, 0x00007300u, 0x00007302u, 0x0000286cu, 0x00007304u, 0x0000288cu, 0x00007306u, 0x000028acu, 0x000200f9u, 0x0000269cu, 0x000200f8u, 0x000026a0u, 0x000300f7u, 0x000027cau, 0x00000000u, 0x000b00fbu, 0x0000b1ddu, 0x000027cau, 0x00000000u, 0x000027cbu, 0x00000001u, 0x000027ccu, 0x00000002u, 0x000027cdu, 0x00000003u, 0x000027ceu, 0x000200f8u, 0x000027ceu, 0x0004007cu, 0x000000a0u, 0x00002830u, 0x00006f1du, 0x0003003eu, 0x00005c25u, 0x00002428u, 0x0003003eu, 0x00005c26u, 0x0000242bu, 0x0003003eu, 0x00002552u, 0x000018feu, 0x0003003eu, 0x00002553u, 0x00002830u, 0x00050041u, 0x00000007u, 0x00003820u, 0x00002553u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003821u, 0x00003820u, 0x00050084u, 0x00000006u, 0x00003822u, 0x0000242bu, 0x00003821u, 0x00050080u, 0x00000006u, 0x00003823u, 0x00002428u, 0x00003822u, 0x0003003eu, 0x00003818u, 0x00003823u, 0x00050041u, 0x00000007u, 0x00003824u, 0x00002553u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003825u, 0x00003824u, 0x00050084u, 0x00000006u, 0x00003826u, 0x00003825u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003828u, 0x00003823u, 0x00003826u, 0x0003003eu, 0x00003818u, 0x00003828u, 0x000500c7u, 0x00000006u, 0x0000382au, 0x00003828u, 0x000006b4u, 0x0003003eu, 0x00003818u, 0x0000382au, 0x000500c2u, 0x00000006u, 0x0000382cu, 0x0000382au, 0x00000194u, 0x0003003eu, 0x00003819u, 0x0000382cu, 0x0004003du, 0x00000006u, 0x0000382eu, 0x00003820u, 0x000500c7u, 0x00000006u, 0x0000382fu, 0x0000382eu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003830u, 0x0000382fu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003832u, 0x0000382cu, 0x00003830u, 0x0003003eu, 0x00003819u, 0x00003832u, 0x000500c6u, 0x00000006u, 0x00003834u, 0x00003832u, 0x0000032au, 0x0003003eu, 0x00003819u, 0x00003834u, 0x00080041u, 0x000001f2u, 0x00003837u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003834u, 0x0004003du, 0x000001adu, 0x00003838u, 0x00003837u, 0x00040071u, 0x00000006u, 0x00003839u, 0x00003838u, 0x0003003eu, 0x0000381au, 0x00003839u, 0x000500c2u, 0x00000006u, 0x0000383bu, 0x00003839u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000383cu, 0x0000383bu, 0x000500c7u, 0x00000006u, 0x0000383eu, 0x00003839u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000383fu, 0x0000383eu, 0x00050050u, 0x0000004du, 0x00003840u, 0x0000383cu, 0x0000383fu, 0x0009004fu, 0x00000009u, 0x00003841u, 0x00003840u, 0x00003840u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000381bu, 0x00003841u, 0x0003003eu, 0x00002473u, 0x00003841u, 0x000300f7u, 0x00002835u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002836u, 0x00002835u, 0x000200f8u, 0x00002836u, 0x00050050u, 0x0000004du, 0x00002839u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x0000283au, 0x00002839u, 0x0003003eu, 0x00005c29u, 0x00002428u, 0x0003003eu, 0x00005c2au, 0x0000242bu, 0x0003003eu, 0x00002555u, 0x000018feu, 0x0003003eu, 0x00002556u, 0x0000283au, 0x00050041u, 0x00000007u, 0x0000384au, 0x00002556u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000384bu, 0x0000384au, 0x00050084u, 0x00000006u, 0x0000384cu, 0x0000242bu, 0x0000384bu, 0x00050080u, 0x00000006u, 0x0000384du, 0x00002428u, 0x0000384cu, 0x0003003eu, 0x00003842u, 0x0000384du, 0x00050041u, 0x00000007u, 0x0000384eu, 0x00002556u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000384fu, 0x0000384eu, 0x00050084u, 0x00000006u, 0x00003850u, 0x0000384fu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003852u, 0x0000384du, 0x00003850u, 0x0003003eu, 0x00003842u, 0x00003852u, 0x000500c7u, 0x00000006u, 0x00003854u, 0x00003852u, 0x000006b4u, 0x0003003eu, 0x00003842u, 0x00003854u, 0x000500c2u, 0x00000006u, 0x00003856u, 0x00003854u, 0x00000194u, 0x0003003eu, 0x00003843u, 0x00003856u, 0x0004003du, 0x00000006u, 0x00003858u, 0x0000384au, 0x000500c7u, 0x00000006u, 0x00003859u, 0x00003858u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000385au, 0x00003859u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000385cu, 0x00003856u, 0x0000385au, 0x0003003eu, 0x00003843u, 0x0000385cu, 0x000500c6u, 0x00000006u, 0x0000385eu, 0x0000385cu, 0x0000032au, 0x0003003eu, 0x00003843u, 0x0000385eu, 0x00080041u, 0x000001f2u, 0x00003861u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000385eu, 0x0004003du, 0x000001adu, 0x00003862u, 0x00003861u, 0x00040071u, 0x00000006u, 0x00003863u, 0x00003862u, 0x0003003eu, 0x00003844u, 0x00003863u, 0x000500c2u, 0x00000006u, 0x00003865u, 0x00003863u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003866u, 0x00003865u, 0x000500c7u, 0x00000006u, 0x00003868u, 0x00003863u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003869u, 0x00003868u, 0x00050050u, 0x0000004du, 0x0000386au, 0x00003866u, 0x00003869u, 0x0009004fu, 0x00000009u, 0x0000386bu, 0x0000386au, 0x0000386au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003845u, 0x0000386bu, 0x0003003eu, 0x0000247bu, 0x0000386bu, 0x00050050u, 0x0000004du, 0x00002840u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002841u, 0x00002840u, 0x0003003eu, 0x00005c2du, 0x00002428u, 0x0003003eu, 0x00005c2eu, 0x0000242bu, 0x0003003eu, 0x00002558u, 0x000018feu, 0x0003003eu, 0x00002559u, 0x00002841u, 0x00050041u, 0x00000007u, 0x00003874u, 0x00002559u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003875u, 0x00003874u, 0x00050084u, 0x00000006u, 0x00003876u, 0x0000242bu, 0x00003875u, 0x00050080u, 0x00000006u, 0x00003877u, 0x00002428u, 0x00003876u, 0x0003003eu, 0x0000386cu, 0x00003877u, 0x00050041u, 0x00000007u, 0x00003878u, 0x00002559u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003879u, 0x00003878u, 0x00050084u, 0x00000006u, 0x0000387au, 0x00003879u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000387cu, 0x00003877u, 0x0000387au, 0x0003003eu, 0x0000386cu, 0x0000387cu, 0x000500c7u, 0x00000006u, 0x0000387eu, 0x0000387cu, 0x000006b4u, 0x0003003eu, 0x0000386cu, 0x0000387eu, 0x000500c2u, 0x00000006u, 0x00003880u, 0x0000387eu, 0x00000194u, 0x0003003eu, 0x0000386du, 0x00003880u, 0x0004003du, 0x00000006u, 0x00003882u, 0x00003874u, 0x000500c7u, 0x00000006u, 0x00003883u, 0x00003882u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003884u, 0x00003883u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003886u, 0x00003880u, 0x00003884u, 0x0003003eu, 0x0000386du, 0x00003886u, 0x000500c6u, 0x00000006u, 0x00003888u, 0x00003886u, 0x0000032au, 0x0003003eu, 0x0000386du, 0x00003888u, 0x00080041u, 0x000001f2u, 0x0000388bu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003888u, 0x0004003du, 0x000001adu, 0x0000388cu, 0x0000388bu, 0x00040071u, 0x00000006u, 0x0000388du, 0x0000388cu, 0x0003003eu, 0x0000386eu, 0x0000388du, 0x000500c2u, 0x00000006u, 0x0000388fu, 0x0000388du, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003890u, 0x0000388fu, 0x000500c7u, 0x00000006u, 0x00003892u, 0x0000388du, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003893u, 0x00003892u, 0x00050050u, 0x0000004du, 0x00003894u, 0x00003890u, 0x00003893u, 0x0009004fu, 0x00000009u, 0x00003895u, 0x00003894u, 0x00003894u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000386fu, 0x00003895u, 0x0003003eu, 0x00002483u, 0x00003895u, 0x000200f9u, 0x00002835u, 0x000200f8u, 0x00002835u, 0x000700f5u, 0x00000009u, 0x000073f1u, 0x000072a9u, 0x000027ceu, 0x00003895u, 0x00002836u, 0x000700f5u, 0x00000009u, 0x000072ffu, 0x000072a9u, 0x000027ceu, 0x0000386bu, 0x00002836u, 0x000300f7u, 0x00002846u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002847u, 0x00002846u, 0x000200f8u, 0x00002847u, 0x00050050u, 0x0000004du, 0x0000284au, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x0000284bu, 0x0000284au, 0x0003003eu, 0x00005c31u, 0x00002428u, 0x0003003eu, 0x00005c32u, 0x0000242bu, 0x0003003eu, 0x0000255bu, 0x000018feu, 0x0003003eu, 0x0000255cu, 0x0000284bu, 0x00050041u, 0x00000007u, 0x0000389eu, 0x0000255cu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000389fu, 0x0000389eu, 0x00050084u, 0x00000006u, 0x000038a0u, 0x0000242bu, 0x0000389fu, 0x00050080u, 0x00000006u, 0x000038a1u, 0x00002428u, 0x000038a0u, 0x0003003eu, 0x00003896u, 0x000038a1u, 0x00050041u, 0x00000007u, 0x000038a2u, 0x0000255cu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000038a3u, 0x000038a2u, 0x00050084u, 0x00000006u, 0x000038a4u, 0x000038a3u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000038a6u, 0x000038a1u, 0x000038a4u, 0x0003003eu, 0x00003896u, 0x000038a6u, 0x000500c7u, 0x00000006u, 0x000038a8u, 0x000038a6u, 0x000006b4u, 0x0003003eu, 0x00003896u, 0x000038a8u, 0x000500c2u, 0x00000006u, 0x000038aau, 0x000038a8u, 0x00000194u, 0x0003003eu, 0x00003897u, 0x000038aau, 0x0004003du, 0x00000006u, 0x000038acu, 0x0000389eu, 0x000500c7u, 0x00000006u, 0x000038adu, 0x000038acu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000038aeu, 0x000038adu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000038b0u, 0x000038aau, 0x000038aeu, 0x0003003eu, 0x00003897u, 0x000038b0u, 0x000500c6u, 0x00000006u, 0x000038b2u, 0x000038b0u, 0x0000032au, 0x0003003eu, 0x00003897u, 0x000038b2u, 0x00080041u, 0x000001f2u, 0x000038b5u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000038b2u, 0x0004003du, 0x000001adu, 0x000038b6u, 0x000038b5u, 0x00040071u, 0x00000006u, 0x000038b7u, 0x000038b6u, 0x0003003eu, 0x00003898u, 0x000038b7u, 0x000500c2u, 0x00000006u, 0x000038b9u, 0x000038b7u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000038bau, 0x000038b9u, 0x000500c7u, 0x00000006u, 0x000038bcu, 0x000038b7u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000038bdu, 0x000038bcu, 0x00050050u, 0x0000004du, 0x000038beu, 0x000038bau, 0x000038bdu, 0x0009004fu, 0x00000009u, 0x000038bfu, 0x000038beu, 0x000038beu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003899u, 0x000038bfu, 0x0003003eu, 0x0000248bu, 0x000038bfu, 0x000200f9u, 0x00002846u, 0x000200f8u, 0x00002846u, 0x000700f5u, 0x00000009u, 0x0000746au, 0x000072a9u, 0x00002835u, 0x000038bfu, 0x00002847u, 0x000200f9u, 0x000027cau, 0x000200f8u, 0x000027cdu, 0x0004007cu, 0x000000a0u, 0x00002810u, 0x00006f1du, 0x0003003eu, 0x00005c15u, 0x00002428u, 0x0003003eu, 0x00005c16u, 0x0000242bu, 0x0003003eu, 0x00002546u, 0x000018feu, 0x0003003eu, 0x00002547u, 0x00002810u, 0x00050041u, 0x00000007u, 0x0000374du, 0x00002547u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000374eu, 0x0000374du, 0x00050084u, 0x00000006u, 0x0000374fu, 0x0000242bu, 0x0000374eu, 0x00050080u, 0x00000006u, 0x00003750u, 0x00002428u, 0x0000374fu, 0x0003003eu, 0x00003744u, 0x00003750u, 0x00050041u, 0x00000007u, 0x00003751u, 0x00002547u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003752u, 0x00003751u, 0x00050084u, 0x00000006u, 0x00003753u, 0x00003752u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003755u, 0x00003750u, 0x00003753u, 0x0003003eu, 0x00003744u, 0x00003755u, 0x000500c7u, 0x00000006u, 0x00003757u, 0x00003755u, 0x000006b4u, 0x0003003eu, 0x00003744u, 0x00003757u, 0x000500c2u, 0x00000006u, 0x00003759u, 0x00003757u, 0x00000194u, 0x0003003eu, 0x00003745u, 0x00003759u, 0x0004003du, 0x00000006u, 0x0000375bu, 0x0000374du, 0x000500c7u, 0x00000006u, 0x0000375cu, 0x0000375bu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000375du, 0x0000375cu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000375fu, 0x00003759u, 0x0000375du, 0x0003003eu, 0x00003745u, 0x0000375fu, 0x000500c6u, 0x00000006u, 0x00003761u, 0x0000375fu, 0x0000032au, 0x0003003eu, 0x00003745u, 0x00003761u, 0x00080041u, 0x000001f2u, 0x00003764u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003761u, 0x0004003du, 0x000001adu, 0x00003765u, 0x00003764u, 0x00040071u, 0x00000006u, 0x00003766u, 0x00003765u, 0x0003003eu, 0x00003746u, 0x00003766u, 0x0003003eu, 0x00003747u, 0x00003766u, 0x000500c2u, 0x00000006u, 0x0000376du, 0x00003766u, 0x000001e0u, 0x0003003eu, 0x00003769u, 0x0000376du, 0x000500c7u, 0x00000006u, 0x0000376fu, 0x00003766u, 0x00000689u, 0x0003003eu, 0x0000376au, 0x0000376fu, 0x0004007cu, 0x00000008u, 0x00003771u, 0x0000376du, 0x0004007cu, 0x00000008u, 0x00003777u, 0x0000376fu, 0x00070050u, 0x00000009u, 0x00003778u, 0x00003771u, 0x00003771u, 0x00003771u, 0x00003777u, 0x0003003eu, 0x0000376bu, 0x00003778u, 0x0003003eu, 0x00003748u, 0x00003778u, 0x0003003eu, 0x00002473u, 0x00003778u, 0x000300f7u, 0x00002815u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002816u, 0x00002815u, 0x000200f8u, 0x00002816u, 0x00050050u, 0x0000004du, 0x00002819u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x0000281au, 0x00002819u, 0x0003003eu, 0x00005c19u, 0x00002428u, 0x0003003eu, 0x00005c1au, 0x0000242bu, 0x0003003eu, 0x00002549u, 0x000018feu, 0x0003003eu, 0x0000254au, 0x0000281au, 0x00050041u, 0x00000007u, 0x00003782u, 0x0000254au, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003783u, 0x00003782u, 0x00050084u, 0x00000006u, 0x00003784u, 0x0000242bu, 0x00003783u, 0x00050080u, 0x00000006u, 0x00003785u, 0x00002428u, 0x00003784u, 0x0003003eu, 0x00003779u, 0x00003785u, 0x00050041u, 0x00000007u, 0x00003786u, 0x0000254au, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003787u, 0x00003786u, 0x00050084u, 0x00000006u, 0x00003788u, 0x00003787u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000378au, 0x00003785u, 0x00003788u, 0x0003003eu, 0x00003779u, 0x0000378au, 0x000500c7u, 0x00000006u, 0x0000378cu, 0x0000378au, 0x000006b4u, 0x0003003eu, 0x00003779u, 0x0000378cu, 0x000500c2u, 0x00000006u, 0x0000378eu, 0x0000378cu, 0x00000194u, 0x0003003eu, 0x0000377au, 0x0000378eu, 0x0004003du, 0x00000006u, 0x00003790u, 0x00003782u, 0x000500c7u, 0x00000006u, 0x00003791u, 0x00003790u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003792u, 0x00003791u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003794u, 0x0000378eu, 0x00003792u, 0x0003003eu, 0x0000377au, 0x00003794u, 0x000500c6u, 0x00000006u, 0x00003796u, 0x00003794u, 0x0000032au, 0x0003003eu, 0x0000377au, 0x00003796u, 0x00080041u, 0x000001f2u, 0x00003799u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003796u, 0x0004003du, 0x000001adu, 0x0000379au, 0x00003799u, 0x00040071u, 0x00000006u, 0x0000379bu, 0x0000379au, 0x0003003eu, 0x0000377bu, 0x0000379bu, 0x0003003eu, 0x0000377cu, 0x0000379bu, 0x000500c2u, 0x00000006u, 0x000037a2u, 0x0000379bu, 0x000001e0u, 0x0003003eu, 0x0000379eu, 0x000037a2u, 0x000500c7u, 0x00000006u, 0x000037a4u, 0x0000379bu, 0x00000689u, 0x0003003eu, 0x0000379fu, 0x000037a4u, 0x0004007cu, 0x00000008u, 0x000037a6u, 0x000037a2u, 0x0004007cu, 0x00000008u, 0x000037acu, 0x000037a4u, 0x00070050u, 0x00000009u, 0x000037adu, 0x000037a6u, 0x000037a6u, 0x000037a6u, 0x000037acu, 0x0003003eu, 0x000037a0u, 0x000037adu, 0x0003003eu, 0x0000377du, 0x000037adu, 0x0003003eu, 0x0000247bu, 0x000037adu, 0x00050050u, 0x0000004du, 0x00002820u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002821u, 0x00002820u, 0x0003003eu, 0x00005c1du, 0x00002428u, 0x0003003eu, 0x00005c1eu, 0x0000242bu, 0x0003003eu, 0x0000254cu, 0x000018feu, 0x0003003eu, 0x0000254du, 0x00002821u, 0x00050041u, 0x00000007u, 0x000037b7u, 0x0000254du, 0x0000032au, 0x0004003du, 0x00000006u, 0x000037b8u, 0x000037b7u, 0x00050084u, 0x00000006u, 0x000037b9u, 0x0000242bu, 0x000037b8u, 0x00050080u, 0x00000006u, 0x000037bau, 0x00002428u, 0x000037b9u, 0x0003003eu, 0x000037aeu, 0x000037bau, 0x00050041u, 0x00000007u, 0x000037bbu, 0x0000254du, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000037bcu, 0x000037bbu, 0x00050084u, 0x00000006u, 0x000037bdu, 0x000037bcu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000037bfu, 0x000037bau, 0x000037bdu, 0x0003003eu, 0x000037aeu, 0x000037bfu, 0x000500c7u, 0x00000006u, 0x000037c1u, 0x000037bfu, 0x000006b4u, 0x0003003eu, 0x000037aeu, 0x000037c1u, 0x000500c2u, 0x00000006u, 0x000037c3u, 0x000037c1u, 0x00000194u, 0x0003003eu, 0x000037afu, 0x000037c3u, 0x0004003du, 0x00000006u, 0x000037c5u, 0x000037b7u, 0x000500c7u, 0x00000006u, 0x000037c6u, 0x000037c5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000037c7u, 0x000037c6u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000037c9u, 0x000037c3u, 0x000037c7u, 0x0003003eu, 0x000037afu, 0x000037c9u, 0x000500c6u, 0x00000006u, 0x000037cbu, 0x000037c9u, 0x0000032au, 0x0003003eu, 0x000037afu, 0x000037cbu, 0x00080041u, 0x000001f2u, 0x000037ceu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000037cbu, 0x0004003du, 0x000001adu, 0x000037cfu, 0x000037ceu, 0x00040071u, 0x00000006u, 0x000037d0u, 0x000037cfu, 0x0003003eu, 0x000037b0u, 0x000037d0u, 0x0003003eu, 0x000037b1u, 0x000037d0u, 0x000500c2u, 0x00000006u, 0x000037d7u, 0x000037d0u, 0x000001e0u, 0x0003003eu, 0x000037d3u, 0x000037d7u, 0x000500c7u, 0x00000006u, 0x000037d9u, 0x000037d0u, 0x00000689u, 0x0003003eu, 0x000037d4u, 0x000037d9u, 0x0004007cu, 0x00000008u, 0x000037dbu, 0x000037d7u, 0x0004007cu, 0x00000008u, 0x000037e1u, 0x000037d9u, 0x00070050u, 0x00000009u, 0x000037e2u, 0x000037dbu, 0x000037dbu, 0x000037dbu, 0x000037e1u, 0x0003003eu, 0x000037d5u, 0x000037e2u, 0x0003003eu, 0x000037b2u, 0x000037e2u, 0x0003003eu, 0x00002483u, 0x000037e2u, 0x000200f9u, 0x00002815u, 0x000200f8u, 0x00002815u, 0x000700f5u, 0x00000009u, 0x000073efu, 0x000072a9u, 0x000027cdu, 0x000037e2u, 0x00002816u, 0x000700f5u, 0x00000009u, 0x000072fdu, 0x000072a9u, 0x000027cdu, 0x000037adu, 0x00002816u, 0x000300f7u, 0x00002826u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002827u, 0x00002826u, 0x000200f8u, 0x00002827u, 0x00050050u, 0x0000004du, 0x0000282au, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x0000282bu, 0x0000282au, 0x0003003eu, 0x00005c21u, 0x00002428u, 0x0003003eu, 0x00005c22u, 0x0000242bu, 0x0003003eu, 0x0000254fu, 0x000018feu, 0x0003003eu, 0x00002550u, 0x0000282bu, 0x00050041u, 0x00000007u, 0x000037ecu, 0x00002550u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000037edu, 0x000037ecu, 0x00050084u, 0x00000006u, 0x000037eeu, 0x0000242bu, 0x000037edu, 0x00050080u, 0x00000006u, 0x000037efu, 0x00002428u, 0x000037eeu, 0x0003003eu, 0x000037e3u, 0x000037efu, 0x00050041u, 0x00000007u, 0x000037f0u, 0x00002550u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000037f1u, 0x000037f0u, 0x00050084u, 0x00000006u, 0x000037f2u, 0x000037f1u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000037f4u, 0x000037efu, 0x000037f2u, 0x0003003eu, 0x000037e3u, 0x000037f4u, 0x000500c7u, 0x00000006u, 0x000037f6u, 0x000037f4u, 0x000006b4u, 0x0003003eu, 0x000037e3u, 0x000037f6u, 0x000500c2u, 0x00000006u, 0x000037f8u, 0x000037f6u, 0x00000194u, 0x0003003eu, 0x000037e4u, 0x000037f8u, 0x0004003du, 0x00000006u, 0x000037fau, 0x000037ecu, 0x000500c7u, 0x00000006u, 0x000037fbu, 0x000037fau, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000037fcu, 0x000037fbu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000037feu, 0x000037f8u, 0x000037fcu, 0x0003003eu, 0x000037e4u, 0x000037feu, 0x000500c6u, 0x00000006u, 0x00003800u, 0x000037feu, 0x0000032au, 0x0003003eu, 0x000037e4u, 0x00003800u, 0x00080041u, 0x000001f2u, 0x00003803u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003800u, 0x0004003du, 0x000001adu, 0x00003804u, 0x00003803u, 0x00040071u, 0x00000006u, 0x00003805u, 0x00003804u, 0x0003003eu, 0x000037e5u, 0x00003805u, 0x0003003eu, 0x000037e6u, 0x00003805u, 0x000500c2u, 0x00000006u, 0x0000380cu, 0x00003805u, 0x000001e0u, 0x0003003eu, 0x00003808u, 0x0000380cu, 0x000500c7u, 0x00000006u, 0x0000380eu, 0x00003805u, 0x00000689u, 0x0003003eu, 0x00003809u, 0x0000380eu, 0x0004007cu, 0x00000008u, 0x00003810u, 0x0000380cu, 0x0004007cu, 0x00000008u, 0x00003816u, 0x0000380eu, 0x00070050u, 0x00000009u, 0x00003817u, 0x00003810u, 0x00003810u, 0x00003810u, 0x00003816u, 0x0003003eu, 0x0000380au, 0x00003817u, 0x0003003eu, 0x000037e7u, 0x00003817u, 0x0003003eu, 0x0000248bu, 0x00003817u, 0x000200f9u, 0x00002826u, 0x000200f8u, 0x00002826u, 0x000700f5u, 0x00000009u, 0x00007468u, 0x000072a9u, 0x00002815u, 0x00003817u, 0x00002827u, 0x000200f9u, 0x000027cau, 0x000200f8u, 0x000027ccu, 0x0004007cu, 0x000000a0u, 0x000027f0u, 0x00006f1du, 0x0003003eu, 0x00005c05u, 0x00002428u, 0x0003003eu, 0x00005c06u, 0x0000242bu, 0x0003003eu, 0x0000253au, 0x000018feu, 0x0003003eu, 0x0000253bu, 0x000027f0u, 0x00050041u, 0x00000007u, 0x00003672u, 0x0000253bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003673u, 0x00003672u, 0x00050084u, 0x00000006u, 0x00003674u, 0x0000242bu, 0x00003673u, 0x00050080u, 0x00000006u, 0x00003675u, 0x00002428u, 0x00003674u, 0x0003003eu, 0x00003668u, 0x00003675u, 0x00050041u, 0x00000007u, 0x00003676u, 0x0000253bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003677u, 0x00003676u, 0x00050080u, 0x00000006u, 0x00003679u, 0x00003675u, 0x00003677u, 0x0003003eu, 0x00003668u, 0x00003679u, 0x000500c7u, 0x00000006u, 0x0000367bu, 0x00003679u, 0x000006b4u, 0x0003003eu, 0x00003668u, 0x0000367bu, 0x0003003eu, 0x00003669u, 0x0000367bu, 0x0004003du, 0x00000006u, 0x0000367eu, 0x00003672u, 0x000500c7u, 0x00000006u, 0x0000367fu, 0x0000367eu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003680u, 0x0000367fu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003682u, 0x0000367bu, 0x00003680u, 0x0003003eu, 0x00003669u, 0x00003682u, 0x000500c6u, 0x00000006u, 0x00003684u, 0x00003682u, 0x00000331u, 0x0003003eu, 0x00003669u, 0x00003684u, 0x00080041u, 0x000001f9u, 0x00003687u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003684u, 0x0004003du, 0x000001abu, 0x00003688u, 0x00003687u, 0x00040071u, 0x00000006u, 0x00003689u, 0x00003688u, 0x0003003eu, 0x0000366au, 0x00003689u, 0x000500c2u, 0x00000006u, 0x0000368bu, 0x00003689u, 0x0000019du, 0x0003003eu, 0x0000366bu, 0x0000368bu, 0x000500c7u, 0x00000006u, 0x0000368du, 0x00003689u, 0x000006d8u, 0x0003003eu, 0x0000366cu, 0x0000368du, 0x000500c4u, 0x00000006u, 0x0000368fu, 0x0000368du, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00003691u, 0x0000368du, 0x0000368fu, 0x0003003eu, 0x0000366cu, 0x00003691u, 0x000500c4u, 0x00000006u, 0x00003693u, 0x0000368bu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00003695u, 0x0000368bu, 0x00003693u, 0x0003003eu, 0x0000366bu, 0x00003695u, 0x0004007cu, 0x00000008u, 0x00003697u, 0x00003695u, 0x0004007cu, 0x00000008u, 0x0000369du, 0x00003691u, 0x00070050u, 0x00000009u, 0x0000369eu, 0x00003697u, 0x00003697u, 0x00003697u, 0x0000369du, 0x0003003eu, 0x0000366du, 0x0000369eu, 0x0003003eu, 0x00002473u, 0x0000369eu, 0x000300f7u, 0x000027f5u, 0x00000000u, 0x000400fau, 0x00001927u, 0x000027f6u, 0x000027f5u, 0x000200f8u, 0x000027f6u, 0x00050050u, 0x0000004du, 0x000027f9u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000027fau, 0x000027f9u, 0x0003003eu, 0x00005c09u, 0x00002428u, 0x0003003eu, 0x00005c0au, 0x0000242bu, 0x0003003eu, 0x0000253du, 0x000018feu, 0x0003003eu, 0x0000253eu, 0x000027fau, 0x00050041u, 0x00000007u, 0x000036a9u, 0x0000253eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000036aau, 0x000036a9u, 0x00050084u, 0x00000006u, 0x000036abu, 0x0000242bu, 0x000036aau, 0x00050080u, 0x00000006u, 0x000036acu, 0x00002428u, 0x000036abu, 0x0003003eu, 0x0000369fu, 0x000036acu, 0x00050041u, 0x00000007u, 0x000036adu, 0x0000253eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000036aeu, 0x000036adu, 0x00050080u, 0x00000006u, 0x000036b0u, 0x000036acu, 0x000036aeu, 0x0003003eu, 0x0000369fu, 0x000036b0u, 0x000500c7u, 0x00000006u, 0x000036b2u, 0x000036b0u, 0x000006b4u, 0x0003003eu, 0x0000369fu, 0x000036b2u, 0x0003003eu, 0x000036a0u, 0x000036b2u, 0x0004003du, 0x00000006u, 0x000036b5u, 0x000036a9u, 0x000500c7u, 0x00000006u, 0x000036b6u, 0x000036b5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000036b7u, 0x000036b6u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000036b9u, 0x000036b2u, 0x000036b7u, 0x0003003eu, 0x000036a0u, 0x000036b9u, 0x000500c6u, 0x00000006u, 0x000036bbu, 0x000036b9u, 0x00000331u, 0x0003003eu, 0x000036a0u, 0x000036bbu, 0x00080041u, 0x000001f9u, 0x000036beu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000036bbu, 0x0004003du, 0x000001abu, 0x000036bfu, 0x000036beu, 0x00040071u, 0x00000006u, 0x000036c0u, 0x000036bfu, 0x0003003eu, 0x000036a1u, 0x000036c0u, 0x000500c2u, 0x00000006u, 0x000036c2u, 0x000036c0u, 0x0000019du, 0x0003003eu, 0x000036a2u, 0x000036c2u, 0x000500c7u, 0x00000006u, 0x000036c4u, 0x000036c0u, 0x000006d8u, 0x0003003eu, 0x000036a3u, 0x000036c4u, 0x000500c4u, 0x00000006u, 0x000036c6u, 0x000036c4u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000036c8u, 0x000036c4u, 0x000036c6u, 0x0003003eu, 0x000036a3u, 0x000036c8u, 0x000500c4u, 0x00000006u, 0x000036cau, 0x000036c2u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000036ccu, 0x000036c2u, 0x000036cau, 0x0003003eu, 0x000036a2u, 0x000036ccu, 0x0004007cu, 0x00000008u, 0x000036ceu, 0x000036ccu, 0x0004007cu, 0x00000008u, 0x000036d4u, 0x000036c8u, 0x00070050u, 0x00000009u, 0x000036d5u, 0x000036ceu, 0x000036ceu, 0x000036ceu, 0x000036d4u, 0x0003003eu, 0x000036a4u, 0x000036d5u, 0x0003003eu, 0x0000247bu, 0x000036d5u, 0x00050050u, 0x0000004du, 0x00002800u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002801u, 0x00002800u, 0x0003003eu, 0x00005c0du, 0x00002428u, 0x0003003eu, 0x00005c0eu, 0x0000242bu, 0x0003003eu, 0x00002540u, 0x000018feu, 0x0003003eu, 0x00002541u, 0x00002801u, 0x00050041u, 0x00000007u, 0x000036e0u, 0x00002541u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000036e1u, 0x000036e0u, 0x00050084u, 0x00000006u, 0x000036e2u, 0x0000242bu, 0x000036e1u, 0x00050080u, 0x00000006u, 0x000036e3u, 0x00002428u, 0x000036e2u, 0x0003003eu, 0x000036d6u, 0x000036e3u, 0x00050041u, 0x00000007u, 0x000036e4u, 0x00002541u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000036e5u, 0x000036e4u, 0x00050080u, 0x00000006u, 0x000036e7u, 0x000036e3u, 0x000036e5u, 0x0003003eu, 0x000036d6u, 0x000036e7u, 0x000500c7u, 0x00000006u, 0x000036e9u, 0x000036e7u, 0x000006b4u, 0x0003003eu, 0x000036d6u, 0x000036e9u, 0x0003003eu, 0x000036d7u, 0x000036e9u, 0x0004003du, 0x00000006u, 0x000036ecu, 0x000036e0u, 0x000500c7u, 0x00000006u, 0x000036edu, 0x000036ecu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000036eeu, 0x000036edu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000036f0u, 0x000036e9u, 0x000036eeu, 0x0003003eu, 0x000036d7u, 0x000036f0u, 0x000500c6u, 0x00000006u, 0x000036f2u, 0x000036f0u, 0x00000331u, 0x0003003eu, 0x000036d7u, 0x000036f2u, 0x00080041u, 0x000001f9u, 0x000036f5u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000036f2u, 0x0004003du, 0x000001abu, 0x000036f6u, 0x000036f5u, 0x00040071u, 0x00000006u, 0x000036f7u, 0x000036f6u, 0x0003003eu, 0x000036d8u, 0x000036f7u, 0x000500c2u, 0x00000006u, 0x000036f9u, 0x000036f7u, 0x0000019du, 0x0003003eu, 0x000036d9u, 0x000036f9u, 0x000500c7u, 0x00000006u, 0x000036fbu, 0x000036f7u, 0x000006d8u, 0x0003003eu, 0x000036dau, 0x000036fbu, 0x000500c4u, 0x00000006u, 0x000036fdu, 0x000036fbu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000036ffu, 0x000036fbu, 0x000036fdu, 0x0003003eu, 0x000036dau, 0x000036ffu, 0x000500c4u, 0x00000006u, 0x00003701u, 0x000036f9u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00003703u, 0x000036f9u, 0x00003701u, 0x0003003eu, 0x000036d9u, 0x00003703u, 0x0004007cu, 0x00000008u, 0x00003705u, 0x00003703u, 0x0004007cu, 0x00000008u, 0x0000370bu, 0x000036ffu, 0x00070050u, 0x00000009u, 0x0000370cu, 0x00003705u, 0x00003705u, 0x00003705u, 0x0000370bu, 0x0003003eu, 0x000036dbu, 0x0000370cu, 0x0003003eu, 0x00002483u, 0x0000370cu, 0x000200f9u, 0x000027f5u, 0x000200f8u, 0x000027f5u, 0x000700f5u, 0x00000009u, 0x000073edu, 0x000072a9u, 0x000027ccu, 0x0000370cu, 0x000027f6u, 0x000700f5u, 0x00000009u, 0x000072fbu, 0x000072a9u, 0x000027ccu, 0x000036d5u, 0x000027f6u, 0x000300f7u, 0x00002806u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002807u, 0x00002806u, 0x000200f8u, 0x00002807u, 0x00050050u, 0x0000004du, 0x0000280au, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x0000280bu, 0x0000280au, 0x0003003eu, 0x00005c11u, 0x00002428u, 0x0003003eu, 0x00005c12u, 0x0000242bu, 0x0003003eu, 0x00002543u, 0x000018feu, 0x0003003eu, 0x00002544u, 0x0000280bu, 0x00050041u, 0x00000007u, 0x00003717u, 0x00002544u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003718u, 0x00003717u, 0x00050084u, 0x00000006u, 0x00003719u, 0x0000242bu, 0x00003718u, 0x00050080u, 0x00000006u, 0x0000371au, 0x00002428u, 0x00003719u, 0x0003003eu, 0x0000370du, 0x0000371au, 0x00050041u, 0x00000007u, 0x0000371bu, 0x00002544u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000371cu, 0x0000371bu, 0x00050080u, 0x00000006u, 0x0000371eu, 0x0000371au, 0x0000371cu, 0x0003003eu, 0x0000370du, 0x0000371eu, 0x000500c7u, 0x00000006u, 0x00003720u, 0x0000371eu, 0x000006b4u, 0x0003003eu, 0x0000370du, 0x00003720u, 0x0003003eu, 0x0000370eu, 0x00003720u, 0x0004003du, 0x00000006u, 0x00003723u, 0x00003717u, 0x000500c7u, 0x00000006u, 0x00003724u, 0x00003723u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003725u, 0x00003724u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003727u, 0x00003720u, 0x00003725u, 0x0003003eu, 0x0000370eu, 0x00003727u, 0x000500c6u, 0x00000006u, 0x00003729u, 0x00003727u, 0x00000331u, 0x0003003eu, 0x0000370eu, 0x00003729u, 0x00080041u, 0x000001f9u, 0x0000372cu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003729u, 0x0004003du, 0x000001abu, 0x0000372du, 0x0000372cu, 0x00040071u, 0x00000006u, 0x0000372eu, 0x0000372du, 0x0003003eu, 0x0000370fu, 0x0000372eu, 0x000500c2u, 0x00000006u, 0x00003730u, 0x0000372eu, 0x0000019du, 0x0003003eu, 0x00003710u, 0x00003730u, 0x000500c7u, 0x00000006u, 0x00003732u, 0x0000372eu, 0x000006d8u, 0x0003003eu, 0x00003711u, 0x00003732u, 0x000500c4u, 0x00000006u, 0x00003734u, 0x00003732u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00003736u, 0x00003732u, 0x00003734u, 0x0003003eu, 0x00003711u, 0x00003736u, 0x000500c4u, 0x00000006u, 0x00003738u, 0x00003730u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x0000373au, 0x00003730u, 0x00003738u, 0x0003003eu, 0x00003710u, 0x0000373au, 0x0004007cu, 0x00000008u, 0x0000373cu, 0x0000373au, 0x0004007cu, 0x00000008u, 0x00003742u, 0x00003736u, 0x00070050u, 0x00000009u, 0x00003743u, 0x0000373cu, 0x0000373cu, 0x0000373cu, 0x00003742u, 0x0003003eu, 0x00003712u, 0x00003743u, 0x0003003eu, 0x0000248bu, 0x00003743u, 0x000200f9u, 0x00002806u, 0x000200f8u, 0x00002806u, 0x000700f5u, 0x00000009u, 0x00007466u, 0x000072a9u, 0x000027f5u, 0x00003743u, 0x00002807u, 0x000200f9u, 0x000027cau, 0x000200f8u, 0x000027cbu, 0x0004007cu, 0x000000a0u, 0x000027d0u, 0x00006f1du, 0x0003003eu, 0x00005bf5u, 0x00002428u, 0x0003003eu, 0x00005bf6u, 0x0000242bu, 0x0003003eu, 0x0000252eu, 0x000018feu, 0x0003003eu, 0x0000252fu, 0x000027d0u, 0x00050041u, 0x00000007u, 0x0000356eu, 0x0000252fu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000356fu, 0x0000356eu, 0x00050084u, 0x00000006u, 0x00003570u, 0x0000242bu, 0x0000356fu, 0x00050080u, 0x00000006u, 0x00003571u, 0x00002428u, 0x00003570u, 0x0003003eu, 0x00003564u, 0x00003571u, 0x00050041u, 0x00000007u, 0x00003572u, 0x0000252fu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003573u, 0x00003572u, 0x000500c2u, 0x00000006u, 0x00003574u, 0x00003573u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003576u, 0x00003571u, 0x00003574u, 0x0003003eu, 0x00003564u, 0x00003576u, 0x000500c7u, 0x00000006u, 0x00003578u, 0x00003576u, 0x000006b4u, 0x0003003eu, 0x00003564u, 0x00003578u, 0x0004003du, 0x00000006u, 0x0000357au, 0x00003572u, 0x000400c8u, 0x00000006u, 0x0000357bu, 0x0000357au, 0x000500c7u, 0x00000006u, 0x0000357cu, 0x0000357bu, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000357du, 0x0000357cu, 0x000006bcu, 0x0003003eu, 0x00003565u, 0x0000357du, 0x0003003eu, 0x00003566u, 0x00003578u, 0x0004003du, 0x00000006u, 0x00003580u, 0x0000356eu, 0x000500c7u, 0x00000006u, 0x00003581u, 0x00003580u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003582u, 0x00003581u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003584u, 0x00003578u, 0x00003582u, 0x0003003eu, 0x00003566u, 0x00003584u, 0x000500c6u, 0x00000006u, 0x00003586u, 0x00003584u, 0x00000331u, 0x0003003eu, 0x00003566u, 0x00003586u, 0x00080041u, 0x000001f9u, 0x00003589u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003586u, 0x0004003du, 0x000001abu, 0x0000358au, 0x00003589u, 0x00040071u, 0x00000006u, 0x0000358bu, 0x0000358au, 0x0003003eu, 0x00003567u, 0x0000358bu, 0x000500c2u, 0x00000006u, 0x0000358eu, 0x0000358bu, 0x0000357du, 0x000500c7u, 0x00000006u, 0x0000358fu, 0x0000358eu, 0x000006d8u, 0x0003003eu, 0x00003567u, 0x0000358fu, 0x000500c7u, 0x00000006u, 0x00003591u, 0x0000358fu, 0x0000070fu, 0x0003003eu, 0x00003568u, 0x00003591u, 0x000500c4u, 0x00000006u, 0x00003593u, 0x00003591u, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00003595u, 0x00003591u, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00003596u, 0x00003593u, 0x00003595u, 0x000500c2u, 0x00000006u, 0x00003598u, 0x00003591u, 0x00000197u, 0x000500c5u, 0x00000006u, 0x00003599u, 0x00003596u, 0x00003598u, 0x0003003eu, 0x00003568u, 0x00003599u, 0x0004007cu, 0x00000008u, 0x0000359bu, 0x00003599u, 0x000500c7u, 0x00000006u, 0x000035a1u, 0x0000358fu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000035a2u, 0x000035a1u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000035a3u, 0x000035a2u, 0x00070050u, 0x00000009u, 0x000035a4u, 0x0000359bu, 0x0000359bu, 0x0000359bu, 0x000035a3u, 0x0003003eu, 0x00003569u, 0x000035a4u, 0x0003003eu, 0x00002473u, 0x000035a4u, 0x000300f7u, 0x000027d5u, 0x00000000u, 0x000400fau, 0x00001927u, 0x000027d6u, 0x000027d5u, 0x000200f8u, 0x000027d6u, 0x00050050u, 0x0000004du, 0x000027d9u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000027dau, 0x000027d9u, 0x0003003eu, 0x00005bf9u, 0x00002428u, 0x0003003eu, 0x00005bfau, 0x0000242bu, 0x0003003eu, 0x00002531u, 0x000018feu, 0x0003003eu, 0x00002532u, 0x000027dau, 0x00050041u, 0x00000007u, 0x000035afu, 0x00002532u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000035b0u, 0x000035afu, 0x00050084u, 0x00000006u, 0x000035b1u, 0x0000242bu, 0x000035b0u, 0x00050080u, 0x00000006u, 0x000035b2u, 0x00002428u, 0x000035b1u, 0x0003003eu, 0x000035a5u, 0x000035b2u, 0x00050041u, 0x00000007u, 0x000035b3u, 0x00002532u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000035b4u, 0x000035b3u, 0x000500c2u, 0x00000006u, 0x000035b5u, 0x000035b4u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000035b7u, 0x000035b2u, 0x000035b5u, 0x0003003eu, 0x000035a5u, 0x000035b7u, 0x000500c7u, 0x00000006u, 0x000035b9u, 0x000035b7u, 0x000006b4u, 0x0003003eu, 0x000035a5u, 0x000035b9u, 0x0004003du, 0x00000006u, 0x000035bbu, 0x000035b3u, 0x000400c8u, 0x00000006u, 0x000035bcu, 0x000035bbu, 0x000500c7u, 0x00000006u, 0x000035bdu, 0x000035bcu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000035beu, 0x000035bdu, 0x000006bcu, 0x0003003eu, 0x000035a6u, 0x000035beu, 0x0003003eu, 0x000035a7u, 0x000035b9u, 0x0004003du, 0x00000006u, 0x000035c1u, 0x000035afu, 0x000500c7u, 0x00000006u, 0x000035c2u, 0x000035c1u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000035c3u, 0x000035c2u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000035c5u, 0x000035b9u, 0x000035c3u, 0x0003003eu, 0x000035a7u, 0x000035c5u, 0x000500c6u, 0x00000006u, 0x000035c7u, 0x000035c5u, 0x00000331u, 0x0003003eu, 0x000035a7u, 0x000035c7u, 0x00080041u, 0x000001f9u, 0x000035cau, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000035c7u, 0x0004003du, 0x000001abu, 0x000035cbu, 0x000035cau, 0x00040071u, 0x00000006u, 0x000035ccu, 0x000035cbu, 0x0003003eu, 0x000035a8u, 0x000035ccu, 0x000500c2u, 0x00000006u, 0x000035cfu, 0x000035ccu, 0x000035beu, 0x000500c7u, 0x00000006u, 0x000035d0u, 0x000035cfu, 0x000006d8u, 0x0003003eu, 0x000035a8u, 0x000035d0u, 0x000500c7u, 0x00000006u, 0x000035d2u, 0x000035d0u, 0x0000070fu, 0x0003003eu, 0x000035a9u, 0x000035d2u, 0x000500c4u, 0x00000006u, 0x000035d4u, 0x000035d2u, 0x0000019du, 0x000500c4u, 0x00000006u, 0x000035d6u, 0x000035d2u, 0x00000194u, 0x000500c5u, 0x00000006u, 0x000035d7u, 0x000035d4u, 0x000035d6u, 0x000500c2u, 0x00000006u, 0x000035d9u, 0x000035d2u, 0x00000197u, 0x000500c5u, 0x00000006u, 0x000035dau, 0x000035d7u, 0x000035d9u, 0x0003003eu, 0x000035a9u, 0x000035dau, 0x0004007cu, 0x00000008u, 0x000035dcu, 0x000035dau, 0x000500c7u, 0x00000006u, 0x000035e2u, 0x000035d0u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000035e3u, 0x000035e2u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000035e4u, 0x000035e3u, 0x00070050u, 0x00000009u, 0x000035e5u, 0x000035dcu, 0x000035dcu, 0x000035dcu, 0x000035e4u, 0x0003003eu, 0x000035aau, 0x000035e5u, 0x0003003eu, 0x0000247bu, 0x000035e5u, 0x00050050u, 0x0000004du, 0x000027e0u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000027e1u, 0x000027e0u, 0x0003003eu, 0x00005bfdu, 0x00002428u, 0x0003003eu, 0x00005bfeu, 0x0000242bu, 0x0003003eu, 0x00002534u, 0x000018feu, 0x0003003eu, 0x00002535u, 0x000027e1u, 0x00050041u, 0x00000007u, 0x000035f0u, 0x00002535u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000035f1u, 0x000035f0u, 0x00050084u, 0x00000006u, 0x000035f2u, 0x0000242bu, 0x000035f1u, 0x00050080u, 0x00000006u, 0x000035f3u, 0x00002428u, 0x000035f2u, 0x0003003eu, 0x000035e6u, 0x000035f3u, 0x00050041u, 0x00000007u, 0x000035f4u, 0x00002535u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000035f5u, 0x000035f4u, 0x000500c2u, 0x00000006u, 0x000035f6u, 0x000035f5u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000035f8u, 0x000035f3u, 0x000035f6u, 0x0003003eu, 0x000035e6u, 0x000035f8u, 0x000500c7u, 0x00000006u, 0x000035fau, 0x000035f8u, 0x000006b4u, 0x0003003eu, 0x000035e6u, 0x000035fau, 0x0004003du, 0x00000006u, 0x000035fcu, 0x000035f4u, 0x000400c8u, 0x00000006u, 0x000035fdu, 0x000035fcu, 0x000500c7u, 0x00000006u, 0x000035feu, 0x000035fdu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000035ffu, 0x000035feu, 0x000006bcu, 0x0003003eu, 0x000035e7u, 0x000035ffu, 0x0003003eu, 0x000035e8u, 0x000035fau, 0x0004003du, 0x00000006u, 0x00003602u, 0x000035f0u, 0x000500c7u, 0x00000006u, 0x00003603u, 0x00003602u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003604u, 0x00003603u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003606u, 0x000035fau, 0x00003604u, 0x0003003eu, 0x000035e8u, 0x00003606u, 0x000500c6u, 0x00000006u, 0x00003608u, 0x00003606u, 0x00000331u, 0x0003003eu, 0x000035e8u, 0x00003608u, 0x00080041u, 0x000001f9u, 0x0000360bu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003608u, 0x0004003du, 0x000001abu, 0x0000360cu, 0x0000360bu, 0x00040071u, 0x00000006u, 0x0000360du, 0x0000360cu, 0x0003003eu, 0x000035e9u, 0x0000360du, 0x000500c2u, 0x00000006u, 0x00003610u, 0x0000360du, 0x000035ffu, 0x000500c7u, 0x00000006u, 0x00003611u, 0x00003610u, 0x000006d8u, 0x0003003eu, 0x000035e9u, 0x00003611u, 0x000500c7u, 0x00000006u, 0x00003613u, 0x00003611u, 0x0000070fu, 0x0003003eu, 0x000035eau, 0x00003613u, 0x000500c4u, 0x00000006u, 0x00003615u, 0x00003613u, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00003617u, 0x00003613u, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00003618u, 0x00003615u, 0x00003617u, 0x000500c2u, 0x00000006u, 0x0000361au, 0x00003613u, 0x00000197u, 0x000500c5u, 0x00000006u, 0x0000361bu, 0x00003618u, 0x0000361au, 0x0003003eu, 0x000035eau, 0x0000361bu, 0x0004007cu, 0x00000008u, 0x0000361du, 0x0000361bu, 0x000500c7u, 0x00000006u, 0x00003623u, 0x00003611u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00003624u, 0x00003623u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003625u, 0x00003624u, 0x00070050u, 0x00000009u, 0x00003626u, 0x0000361du, 0x0000361du, 0x0000361du, 0x00003625u, 0x0003003eu, 0x000035ebu, 0x00003626u, 0x0003003eu, 0x00002483u, 0x00003626u, 0x000200f9u, 0x000027d5u, 0x000200f8u, 0x000027d5u, 0x000700f5u, 0x00000009u, 0x000073ebu, 0x000072a9u, 0x000027cbu, 0x00003626u, 0x000027d6u, 0x000700f5u, 0x00000009u, 0x000072f9u, 0x000072a9u, 0x000027cbu, 0x000035e5u, 0x000027d6u, 0x000300f7u, 0x000027e6u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x000027e7u, 0x000027e6u, 0x000200f8u, 0x000027e7u, 0x00050050u, 0x0000004du, 0x000027eau, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000027ebu, 0x000027eau, 0x0003003eu, 0x00005c01u, 0x00002428u, 0x0003003eu, 0x00005c02u, 0x0000242bu, 0x0003003eu, 0x00002537u, 0x000018feu, 0x0003003eu, 0x00002538u, 0x000027ebu, 0x00050041u, 0x00000007u, 0x00003631u, 0x00002538u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003632u, 0x00003631u, 0x00050084u, 0x00000006u, 0x00003633u, 0x0000242bu, 0x00003632u, 0x00050080u, 0x00000006u, 0x00003634u, 0x00002428u, 0x00003633u, 0x0003003eu, 0x00003627u, 0x00003634u, 0x00050041u, 0x00000007u, 0x00003635u, 0x00002538u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003636u, 0x00003635u, 0x000500c2u, 0x00000006u, 0x00003637u, 0x00003636u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003639u, 0x00003634u, 0x00003637u, 0x0003003eu, 0x00003627u, 0x00003639u, 0x000500c7u, 0x00000006u, 0x0000363bu, 0x00003639u, 0x000006b4u, 0x0003003eu, 0x00003627u, 0x0000363bu, 0x0004003du, 0x00000006u, 0x0000363du, 0x00003635u, 0x000400c8u, 0x00000006u, 0x0000363eu, 0x0000363du, 0x000500c7u, 0x00000006u, 0x0000363fu, 0x0000363eu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00003640u, 0x0000363fu, 0x000006bcu, 0x0003003eu, 0x00003628u, 0x00003640u, 0x0003003eu, 0x00003629u, 0x0000363bu, 0x0004003du, 0x00000006u, 0x00003643u, 0x00003631u, 0x000500c7u, 0x00000006u, 0x00003644u, 0x00003643u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003645u, 0x00003644u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003647u, 0x0000363bu, 0x00003645u, 0x0003003eu, 0x00003629u, 0x00003647u, 0x000500c6u, 0x00000006u, 0x00003649u, 0x00003647u, 0x00000331u, 0x0003003eu, 0x00003629u, 0x00003649u, 0x00080041u, 0x000001f9u, 0x0000364cu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003649u, 0x0004003du, 0x000001abu, 0x0000364du, 0x0000364cu, 0x00040071u, 0x00000006u, 0x0000364eu, 0x0000364du, 0x0003003eu, 0x0000362au, 0x0000364eu, 0x000500c2u, 0x00000006u, 0x00003651u, 0x0000364eu, 0x00003640u, 0x000500c7u, 0x00000006u, 0x00003652u, 0x00003651u, 0x000006d8u, 0x0003003eu, 0x0000362au, 0x00003652u, 0x000500c7u, 0x00000006u, 0x00003654u, 0x00003652u, 0x0000070fu, 0x0003003eu, 0x0000362bu, 0x00003654u, 0x000500c4u, 0x00000006u, 0x00003656u, 0x00003654u, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00003658u, 0x00003654u, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00003659u, 0x00003656u, 0x00003658u, 0x000500c2u, 0x00000006u, 0x0000365bu, 0x00003654u, 0x00000197u, 0x000500c5u, 0x00000006u, 0x0000365cu, 0x00003659u, 0x0000365bu, 0x0003003eu, 0x0000362bu, 0x0000365cu, 0x0004007cu, 0x00000008u, 0x0000365eu, 0x0000365cu, 0x000500c7u, 0x00000006u, 0x00003664u, 0x00003652u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00003665u, 0x00003664u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003666u, 0x00003665u, 0x00070050u, 0x00000009u, 0x00003667u, 0x0000365eu, 0x0000365eu, 0x0000365eu, 0x00003666u, 0x0003003eu, 0x0000362cu, 0x00003667u, 0x0003003eu, 0x0000248bu, 0x00003667u, 0x000200f9u, 0x000027e6u, 0x000200f8u, 0x000027e6u, 0x000700f5u, 0x00000009u, 0x00007464u, 0x000072a9u, 0x000027d5u, 0x00003667u, 0x000027e7u, 0x000200f9u, 0x000027cau, 0x000200f8u, 0x000027cau, 0x000d00f5u, 0x00000009u, 0x00007463u, 0x000072a9u, 0x000026a0u, 0x00007464u, 0x000027e6u, 0x00007466u, 0x00002806u, 0x00007468u, 0x00002826u, 0x0000746au, 0x00002846u, 0x000d00f5u, 0x00000009u, 0x000073e9u, 0x000072a9u, 0x000026a0u, 0x000073ebu, 0x000027e6u, 0x000073edu, 0x00002806u, 0x000073efu, 0x00002826u, 0x000073f1u, 0x00002846u, 0x000d00f5u, 0x00000009u, 0x00007371u, 0x000072a9u, 0x000026a0u, 0x000035a4u, 0x000027e6u, 0x0000369eu, 0x00002806u, 0x00003778u, 0x00002826u, 0x00003841u, 0x00002846u, 0x000d00f5u, 0x00000009u, 0x000072f7u, 0x000072a9u, 0x000026a0u, 0x000072f9u, 0x000027e6u, 0x000072fbu, 0x00002806u, 0x000072fdu, 0x00002826u, 0x000072ffu, 0x00002846u, 0x000200f9u, 0x0000269cu, 0x000200f8u, 0x0000269fu, 0x000300f7u, 0x00002758u, 0x00000000u, 0x000700fbu, 0x0000b1ddu, 0x00002759u, 0x00000000u, 0x0000275au, 0x00000001u, 0x0000275bu, 0x000200f8u, 0x0000275bu, 0x0004007cu, 0x000000a0u, 0x000027a9u, 0x00006f1du, 0x0003003eu, 0x00005bd5u, 0x00002428u, 0x0003003eu, 0x00005bd6u, 0x0000242bu, 0x0003003eu, 0x00002516u, 0x000018feu, 0x0003003eu, 0x00002517u, 0x000027a9u, 0x00050041u, 0x00000007u, 0x000034e0u, 0x00002517u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000034e1u, 0x000034e0u, 0x00050084u, 0x00000006u, 0x000034e2u, 0x0000242bu, 0x000034e1u, 0x00050080u, 0x00000006u, 0x000034e3u, 0x00002428u, 0x000034e2u, 0x0003003eu, 0x000034d8u, 0x000034e3u, 0x00050041u, 0x00000007u, 0x000034e4u, 0x00002517u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000034e5u, 0x000034e4u, 0x00050080u, 0x00000006u, 0x000034e7u, 0x000034e3u, 0x000034e5u, 0x0003003eu, 0x000034d8u, 0x000034e7u, 0x000500c7u, 0x00000006u, 0x000034e9u, 0x000034e7u, 0x000006b4u, 0x0003003eu, 0x000034d8u, 0x000034e9u, 0x0003003eu, 0x000034d9u, 0x000034e9u, 0x0004003du, 0x00000006u, 0x000034ecu, 0x000034e0u, 0x000500c7u, 0x00000006u, 0x000034edu, 0x000034ecu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000034eeu, 0x000034edu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000034f0u, 0x000034e9u, 0x000034eeu, 0x0003003eu, 0x000034d9u, 0x000034f0u, 0x000500c6u, 0x00000006u, 0x000034f2u, 0x000034f0u, 0x00000331u, 0x0003003eu, 0x000034d9u, 0x000034f2u, 0x00080041u, 0x000001f9u, 0x000034f5u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000034f2u, 0x0004003du, 0x000001abu, 0x000034f6u, 0x000034f5u, 0x00040071u, 0x00000006u, 0x000034f7u, 0x000034f6u, 0x0003003eu, 0x000034dau, 0x000034f7u, 0x0004007cu, 0x00000008u, 0x000034f9u, 0x000034f7u, 0x00070050u, 0x00000009u, 0x000034fau, 0x000034f9u, 0x000034f9u, 0x000034f9u, 0x000034f9u, 0x0003003eu, 0x000034dbu, 0x000034fau, 0x0003003eu, 0x00002473u, 0x000034fau, 0x000300f7u, 0x000027aeu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000027afu, 0x000027aeu, 0x000200f8u, 0x000027afu, 0x00050050u, 0x0000004du, 0x000027b2u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000027b3u, 0x000027b2u, 0x0003003eu, 0x00005bd9u, 0x00002428u, 0x0003003eu, 0x00005bdau, 0x0000242bu, 0x0003003eu, 0x00002519u, 0x000018feu, 0x0003003eu, 0x0000251au, 0x000027b3u, 0x00050041u, 0x00000007u, 0x00003503u, 0x0000251au, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003504u, 0x00003503u, 0x00050084u, 0x00000006u, 0x00003505u, 0x0000242bu, 0x00003504u, 0x00050080u, 0x00000006u, 0x00003506u, 0x00002428u, 0x00003505u, 0x0003003eu, 0x000034fbu, 0x00003506u, 0x00050041u, 0x00000007u, 0x00003507u, 0x0000251au, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003508u, 0x00003507u, 0x00050080u, 0x00000006u, 0x0000350au, 0x00003506u, 0x00003508u, 0x0003003eu, 0x000034fbu, 0x0000350au, 0x000500c7u, 0x00000006u, 0x0000350cu, 0x0000350au, 0x000006b4u, 0x0003003eu, 0x000034fbu, 0x0000350cu, 0x0003003eu, 0x000034fcu, 0x0000350cu, 0x0004003du, 0x00000006u, 0x0000350fu, 0x00003503u, 0x000500c7u, 0x00000006u, 0x00003510u, 0x0000350fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003511u, 0x00003510u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003513u, 0x0000350cu, 0x00003511u, 0x0003003eu, 0x000034fcu, 0x00003513u, 0x000500c6u, 0x00000006u, 0x00003515u, 0x00003513u, 0x00000331u, 0x0003003eu, 0x000034fcu, 0x00003515u, 0x00080041u, 0x000001f9u, 0x00003518u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003515u, 0x0004003du, 0x000001abu, 0x00003519u, 0x00003518u, 0x00040071u, 0x00000006u, 0x0000351au, 0x00003519u, 0x0003003eu, 0x000034fdu, 0x0000351au, 0x0004007cu, 0x00000008u, 0x0000351cu, 0x0000351au, 0x00070050u, 0x00000009u, 0x0000351du, 0x0000351cu, 0x0000351cu, 0x0000351cu, 0x0000351cu, 0x0003003eu, 0x000034feu, 0x0000351du, 0x0003003eu, 0x0000247bu, 0x0000351du, 0x00050050u, 0x0000004du, 0x000027b9u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000027bau, 0x000027b9u, 0x0003003eu, 0x00005bddu, 0x00002428u, 0x0003003eu, 0x00005bdeu, 0x0000242bu, 0x0003003eu, 0x0000251cu, 0x000018feu, 0x0003003eu, 0x0000251du, 0x000027bau, 0x00050041u, 0x00000007u, 0x00003526u, 0x0000251du, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003527u, 0x00003526u, 0x00050084u, 0x00000006u, 0x00003528u, 0x0000242bu, 0x00003527u, 0x00050080u, 0x00000006u, 0x00003529u, 0x00002428u, 0x00003528u, 0x0003003eu, 0x0000351eu, 0x00003529u, 0x00050041u, 0x00000007u, 0x0000352au, 0x0000251du, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000352bu, 0x0000352au, 0x00050080u, 0x00000006u, 0x0000352du, 0x00003529u, 0x0000352bu, 0x0003003eu, 0x0000351eu, 0x0000352du, 0x000500c7u, 0x00000006u, 0x0000352fu, 0x0000352du, 0x000006b4u, 0x0003003eu, 0x0000351eu, 0x0000352fu, 0x0003003eu, 0x0000351fu, 0x0000352fu, 0x0004003du, 0x00000006u, 0x00003532u, 0x00003526u, 0x000500c7u, 0x00000006u, 0x00003533u, 0x00003532u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003534u, 0x00003533u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003536u, 0x0000352fu, 0x00003534u, 0x0003003eu, 0x0000351fu, 0x00003536u, 0x000500c6u, 0x00000006u, 0x00003538u, 0x00003536u, 0x00000331u, 0x0003003eu, 0x0000351fu, 0x00003538u, 0x00080041u, 0x000001f9u, 0x0000353bu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003538u, 0x0004003du, 0x000001abu, 0x0000353cu, 0x0000353bu, 0x00040071u, 0x00000006u, 0x0000353du, 0x0000353cu, 0x0003003eu, 0x00003520u, 0x0000353du, 0x0004007cu, 0x00000008u, 0x0000353fu, 0x0000353du, 0x00070050u, 0x00000009u, 0x00003540u, 0x0000353fu, 0x0000353fu, 0x0000353fu, 0x0000353fu, 0x0003003eu, 0x00003521u, 0x00003540u, 0x0003003eu, 0x00002483u, 0x00003540u, 0x000200f9u, 0x000027aeu, 0x000200f8u, 0x000027aeu, 0x000700f5u, 0x00000009u, 0x000073e8u, 0x000072a9u, 0x0000275bu, 0x00003540u, 0x000027afu, 0x000700f5u, 0x00000009u, 0x000072f6u, 0x000072a9u, 0x0000275bu, 0x0000351du, 0x000027afu, 0x000300f7u, 0x000027bfu, 0x00000000u, 0x000400fau, 0x000025e7u, 0x000027c0u, 0x000027bfu, 0x000200f8u, 0x000027c0u, 0x00050050u, 0x0000004du, 0x000027c3u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000027c4u, 0x000027c3u, 0x0003003eu, 0x00005be1u, 0x00002428u, 0x0003003eu, 0x00005be2u, 0x0000242bu, 0x0003003eu, 0x0000251fu, 0x000018feu, 0x0003003eu, 0x00002520u, 0x000027c4u, 0x00050041u, 0x00000007u, 0x00003549u, 0x00002520u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000354au, 0x00003549u, 0x00050084u, 0x00000006u, 0x0000354bu, 0x0000242bu, 0x0000354au, 0x00050080u, 0x00000006u, 0x0000354cu, 0x00002428u, 0x0000354bu, 0x0003003eu, 0x00003541u, 0x0000354cu, 0x00050041u, 0x00000007u, 0x0000354du, 0x00002520u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000354eu, 0x0000354du, 0x00050080u, 0x00000006u, 0x00003550u, 0x0000354cu, 0x0000354eu, 0x0003003eu, 0x00003541u, 0x00003550u, 0x000500c7u, 0x00000006u, 0x00003552u, 0x00003550u, 0x000006b4u, 0x0003003eu, 0x00003541u, 0x00003552u, 0x0003003eu, 0x00003542u, 0x00003552u, 0x0004003du, 0x00000006u, 0x00003555u, 0x00003549u, 0x000500c7u, 0x00000006u, 0x00003556u, 0x00003555u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003557u, 0x00003556u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003559u, 0x00003552u, 0x00003557u, 0x0003003eu, 0x00003542u, 0x00003559u, 0x000500c6u, 0x00000006u, 0x0000355bu, 0x00003559u, 0x00000331u, 0x0003003eu, 0x00003542u, 0x0000355bu, 0x00080041u, 0x000001f9u, 0x0000355eu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000355bu, 0x0004003du, 0x000001abu, 0x0000355fu, 0x0000355eu, 0x00040071u, 0x00000006u, 0x00003560u, 0x0000355fu, 0x0003003eu, 0x00003543u, 0x00003560u, 0x0004007cu, 0x00000008u, 0x00003562u, 0x00003560u, 0x00070050u, 0x00000009u, 0x00003563u, 0x00003562u, 0x00003562u, 0x00003562u, 0x00003562u, 0x0003003eu, 0x00003544u, 0x00003563u, 0x0003003eu, 0x0000248bu, 0x00003563u, 0x000200f9u, 0x000027bfu, 0x000200f8u, 0x000027bfu, 0x000700f5u, 0x00000009u, 0x00007461u, 0x000072a9u, 0x000027aeu, 0x00003563u, 0x000027c0u, 0x000200f9u, 0x00002758u, 0x000200f8u, 0x0000275au, 0x0004007cu, 0x000000a0u, 0x0000277du, 0x00006f1du, 0x0004007cu, 0x00000006u, 0x00002780u, 0x0000243au, 0x0003003eu, 0x00005bc5u, 0x00002428u, 0x0003003eu, 0x00005bc6u, 0x0000242bu, 0x0003003eu, 0x00002506u, 0x000018feu, 0x0003003eu, 0x00002507u, 0x0000277du, 0x0003003eu, 0x00002508u, 0x00002780u, 0x00050041u, 0x00000007u, 0x00003419u, 0x00002507u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000341au, 0x00003419u, 0x00050084u, 0x00000006u, 0x0000341bu, 0x0000242bu, 0x0000341au, 0x00050080u, 0x00000006u, 0x0000341cu, 0x00002428u, 0x0000341bu, 0x0003003eu, 0x00003410u, 0x0000341cu, 0x00050041u, 0x00000007u, 0x0000341du, 0x00002507u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000341eu, 0x0000341du, 0x000500c2u, 0x00000006u, 0x0000341fu, 0x0000341eu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003421u, 0x0000341cu, 0x0000341fu, 0x0003003eu, 0x00003410u, 0x00003421u, 0x000500c7u, 0x00000006u, 0x00003423u, 0x00003421u, 0x000006b4u, 0x0003003eu, 0x00003410u, 0x00003423u, 0x0004003du, 0x00000006u, 0x00003425u, 0x0000341du, 0x000400c8u, 0x00000006u, 0x00003426u, 0x00003425u, 0x000500c7u, 0x00000006u, 0x00003427u, 0x00003426u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00003428u, 0x00003427u, 0x000006bcu, 0x0003003eu, 0x00003411u, 0x00003428u, 0x0003003eu, 0x00003412u, 0x00003423u, 0x0004003du, 0x00000006u, 0x0000342bu, 0x00003419u, 0x000500c7u, 0x00000006u, 0x0000342cu, 0x0000342bu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000342du, 0x0000342cu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000342fu, 0x00003423u, 0x0000342du, 0x0003003eu, 0x00003412u, 0x0000342fu, 0x000500c6u, 0x00000006u, 0x00003431u, 0x0000342fu, 0x00000331u, 0x0003003eu, 0x00003412u, 0x00003431u, 0x00080041u, 0x000001f9u, 0x00003434u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003431u, 0x0004003du, 0x000001abu, 0x00003435u, 0x00003434u, 0x00040071u, 0x00000006u, 0x00003436u, 0x00003435u, 0x0003003eu, 0x00003413u, 0x00003436u, 0x000500c2u, 0x00000006u, 0x00003439u, 0x00003436u, 0x00003428u, 0x000500c7u, 0x00000006u, 0x0000343au, 0x00003439u, 0x000006d8u, 0x0003003eu, 0x00003413u, 0x0000343au, 0x000500c4u, 0x00000006u, 0x0000343cu, 0x00002780u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x0000343eu, 0x0000343au, 0x0000343cu, 0x0003003eu, 0x00003413u, 0x0000343eu, 0x0004007cu, 0x00000008u, 0x00003440u, 0x0000343eu, 0x00070050u, 0x00000009u, 0x00003441u, 0x00003440u, 0x00003440u, 0x00003440u, 0x00003440u, 0x0003003eu, 0x00003414u, 0x00003441u, 0x0003003eu, 0x00002473u, 0x00003441u, 0x000300f7u, 0x00002785u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002786u, 0x00002785u, 0x000200f8u, 0x00002786u, 0x00050050u, 0x0000004du, 0x00002789u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x0000278au, 0x00002789u, 0x0003003eu, 0x00005bc9u, 0x00002428u, 0x0003003eu, 0x00005bcau, 0x0000242bu, 0x0003003eu, 0x0000250au, 0x000018feu, 0x0003003eu, 0x0000250bu, 0x0000278au, 0x0003003eu, 0x0000250cu, 0x00002780u, 0x00050041u, 0x00000007u, 0x0000344bu, 0x0000250bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000344cu, 0x0000344bu, 0x00050084u, 0x00000006u, 0x0000344du, 0x0000242bu, 0x0000344cu, 0x00050080u, 0x00000006u, 0x0000344eu, 0x00002428u, 0x0000344du, 0x0003003eu, 0x00003442u, 0x0000344eu, 0x00050041u, 0x00000007u, 0x0000344fu, 0x0000250bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003450u, 0x0000344fu, 0x000500c2u, 0x00000006u, 0x00003451u, 0x00003450u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003453u, 0x0000344eu, 0x00003451u, 0x0003003eu, 0x00003442u, 0x00003453u, 0x000500c7u, 0x00000006u, 0x00003455u, 0x00003453u, 0x000006b4u, 0x0003003eu, 0x00003442u, 0x00003455u, 0x0004003du, 0x00000006u, 0x00003457u, 0x0000344fu, 0x000400c8u, 0x00000006u, 0x00003458u, 0x00003457u, 0x000500c7u, 0x00000006u, 0x00003459u, 0x00003458u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000345au, 0x00003459u, 0x000006bcu, 0x0003003eu, 0x00003443u, 0x0000345au, 0x0003003eu, 0x00003444u, 0x00003455u, 0x0004003du, 0x00000006u, 0x0000345du, 0x0000344bu, 0x000500c7u, 0x00000006u, 0x0000345eu, 0x0000345du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000345fu, 0x0000345eu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003461u, 0x00003455u, 0x0000345fu, 0x0003003eu, 0x00003444u, 0x00003461u, 0x000500c6u, 0x00000006u, 0x00003463u, 0x00003461u, 0x00000331u, 0x0003003eu, 0x00003444u, 0x00003463u, 0x00080041u, 0x000001f9u, 0x00003466u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003463u, 0x0004003du, 0x000001abu, 0x00003467u, 0x00003466u, 0x00040071u, 0x00000006u, 0x00003468u, 0x00003467u, 0x0003003eu, 0x00003445u, 0x00003468u, 0x000500c2u, 0x00000006u, 0x0000346bu, 0x00003468u, 0x0000345au, 0x000500c7u, 0x00000006u, 0x0000346cu, 0x0000346bu, 0x000006d8u, 0x0003003eu, 0x00003445u, 0x0000346cu, 0x000500c5u, 0x00000006u, 0x00003470u, 0x0000346cu, 0x0000343cu, 0x0003003eu, 0x00003445u, 0x00003470u, 0x0004007cu, 0x00000008u, 0x00003472u, 0x00003470u, 0x00070050u, 0x00000009u, 0x00003473u, 0x00003472u, 0x00003472u, 0x00003472u, 0x00003472u, 0x0003003eu, 0x00003446u, 0x00003473u, 0x0003003eu, 0x0000247bu, 0x00003473u, 0x00050050u, 0x0000004du, 0x00002793u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002794u, 0x00002793u, 0x0003003eu, 0x00005bcdu, 0x00002428u, 0x0003003eu, 0x00005bceu, 0x0000242bu, 0x0003003eu, 0x0000250eu, 0x000018feu, 0x0003003eu, 0x0000250fu, 0x00002794u, 0x0003003eu, 0x00002510u, 0x00002780u, 0x00050041u, 0x00000007u, 0x0000347du, 0x0000250fu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000347eu, 0x0000347du, 0x00050084u, 0x00000006u, 0x0000347fu, 0x0000242bu, 0x0000347eu, 0x00050080u, 0x00000006u, 0x00003480u, 0x00002428u, 0x0000347fu, 0x0003003eu, 0x00003474u, 0x00003480u, 0x00050041u, 0x00000007u, 0x00003481u, 0x0000250fu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003482u, 0x00003481u, 0x000500c2u, 0x00000006u, 0x00003483u, 0x00003482u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00003485u, 0x00003480u, 0x00003483u, 0x0003003eu, 0x00003474u, 0x00003485u, 0x000500c7u, 0x00000006u, 0x00003487u, 0x00003485u, 0x000006b4u, 0x0003003eu, 0x00003474u, 0x00003487u, 0x0004003du, 0x00000006u, 0x00003489u, 0x00003481u, 0x000400c8u, 0x00000006u, 0x0000348au, 0x00003489u, 0x000500c7u, 0x00000006u, 0x0000348bu, 0x0000348au, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000348cu, 0x0000348bu, 0x000006bcu, 0x0003003eu, 0x00003475u, 0x0000348cu, 0x0003003eu, 0x00003476u, 0x00003487u, 0x0004003du, 0x00000006u, 0x0000348fu, 0x0000347du, 0x000500c7u, 0x00000006u, 0x00003490u, 0x0000348fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003491u, 0x00003490u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003493u, 0x00003487u, 0x00003491u, 0x0003003eu, 0x00003476u, 0x00003493u, 0x000500c6u, 0x00000006u, 0x00003495u, 0x00003493u, 0x00000331u, 0x0003003eu, 0x00003476u, 0x00003495u, 0x00080041u, 0x000001f9u, 0x00003498u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003495u, 0x0004003du, 0x000001abu, 0x00003499u, 0x00003498u, 0x00040071u, 0x00000006u, 0x0000349au, 0x00003499u, 0x0003003eu, 0x00003477u, 0x0000349au, 0x000500c2u, 0x00000006u, 0x0000349du, 0x0000349au, 0x0000348cu, 0x000500c7u, 0x00000006u, 0x0000349eu, 0x0000349du, 0x000006d8u, 0x0003003eu, 0x00003477u, 0x0000349eu, 0x000500c5u, 0x00000006u, 0x000034a2u, 0x0000349eu, 0x0000343cu, 0x0003003eu, 0x00003477u, 0x000034a2u, 0x0004007cu, 0x00000008u, 0x000034a4u, 0x000034a2u, 0x00070050u, 0x00000009u, 0x000034a5u, 0x000034a4u, 0x000034a4u, 0x000034a4u, 0x000034a4u, 0x0003003eu, 0x00003478u, 0x000034a5u, 0x0003003eu, 0x00002483u, 0x000034a5u, 0x000200f9u, 0x00002785u, 0x000200f8u, 0x00002785u, 0x000700f5u, 0x00000009u, 0x000073e6u, 0x000072a9u, 0x0000275au, 0x000034a5u, 0x00002786u, 0x000700f5u, 0x00000009u, 0x000072f4u, 0x000072a9u, 0x0000275au, 0x00003473u, 0x00002786u, 0x000300f7u, 0x0000279cu, 0x00000000u, 0x000400fau, 0x000025e7u, 0x0000279du, 0x0000279cu, 0x000200f8u, 0x0000279du, 0x00050050u, 0x0000004du, 0x000027a0u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000027a1u, 0x000027a0u, 0x0003003eu, 0x00005bd1u, 0x00002428u, 0x0003003eu, 0x00005bd2u, 0x0000242bu, 0x0003003eu, 0x00002512u, 0x000018feu, 0x0003003eu, 0x00002513u, 0x000027a1u, 0x0003003eu, 0x00002514u, 0x00002780u, 0x00050041u, 0x00000007u, 0x000034afu, 0x00002513u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000034b0u, 0x000034afu, 0x00050084u, 0x00000006u, 0x000034b1u, 0x0000242bu, 0x000034b0u, 0x00050080u, 0x00000006u, 0x000034b2u, 0x00002428u, 0x000034b1u, 0x0003003eu, 0x000034a6u, 0x000034b2u, 0x00050041u, 0x00000007u, 0x000034b3u, 0x00002513u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000034b4u, 0x000034b3u, 0x000500c2u, 0x00000006u, 0x000034b5u, 0x000034b4u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000034b7u, 0x000034b2u, 0x000034b5u, 0x0003003eu, 0x000034a6u, 0x000034b7u, 0x000500c7u, 0x00000006u, 0x000034b9u, 0x000034b7u, 0x000006b4u, 0x0003003eu, 0x000034a6u, 0x000034b9u, 0x0004003du, 0x00000006u, 0x000034bbu, 0x000034b3u, 0x000400c8u, 0x00000006u, 0x000034bcu, 0x000034bbu, 0x000500c7u, 0x00000006u, 0x000034bdu, 0x000034bcu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000034beu, 0x000034bdu, 0x000006bcu, 0x0003003eu, 0x000034a7u, 0x000034beu, 0x0003003eu, 0x000034a8u, 0x000034b9u, 0x0004003du, 0x00000006u, 0x000034c1u, 0x000034afu, 0x000500c7u, 0x00000006u, 0x000034c2u, 0x000034c1u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000034c3u, 0x000034c2u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000034c5u, 0x000034b9u, 0x000034c3u, 0x0003003eu, 0x000034a8u, 0x000034c5u, 0x000500c6u, 0x00000006u, 0x000034c7u, 0x000034c5u, 0x00000331u, 0x0003003eu, 0x000034a8u, 0x000034c7u, 0x00080041u, 0x000001f9u, 0x000034cau, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000034c7u, 0x0004003du, 0x000001abu, 0x000034cbu, 0x000034cau, 0x00040071u, 0x00000006u, 0x000034ccu, 0x000034cbu, 0x0003003eu, 0x000034a9u, 0x000034ccu, 0x000500c2u, 0x00000006u, 0x000034cfu, 0x000034ccu, 0x000034beu, 0x000500c7u, 0x00000006u, 0x000034d0u, 0x000034cfu, 0x000006d8u, 0x0003003eu, 0x000034a9u, 0x000034d0u, 0x000500c5u, 0x00000006u, 0x000034d4u, 0x000034d0u, 0x0000343cu, 0x0003003eu, 0x000034a9u, 0x000034d4u, 0x0004007cu, 0x00000008u, 0x000034d6u, 0x000034d4u, 0x00070050u, 0x00000009u, 0x000034d7u, 0x000034d6u, 0x000034d6u, 0x000034d6u, 0x000034d6u, 0x0003003eu, 0x000034aau, 0x000034d7u, 0x0003003eu, 0x0000248bu, 0x000034d7u, 0x000200f9u, 0x0000279cu, 0x000200f8u, 0x0000279cu, 0x000700f5u, 0x00000009u, 0x0000745fu, 0x000072a9u, 0x00002785u, 0x000034d7u, 0x0000279du, 0x000200f9u, 0x00002758u, 0x000200f8u, 0x00002759u, 0x0004007cu, 0x000000a0u, 0x0000275du, 0x00006f1du, 0x0003003eu, 0x00005be5u, 0x00002428u, 0x0003003eu, 0x00005be6u, 0x0000242bu, 0x0003003eu, 0x00002522u, 0x000018feu, 0x0003003eu, 0x00002523u, 0x0000275du, 0x00050041u, 0x00000007u, 0x00003370u, 0x00002523u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003371u, 0x00003370u, 0x00050084u, 0x00000006u, 0x00003372u, 0x0000242bu, 0x00003371u, 0x00050080u, 0x00000006u, 0x00003373u, 0x00002428u, 0x00003372u, 0x0003003eu, 0x00003368u, 0x00003373u, 0x00050041u, 0x00000007u, 0x00003374u, 0x00002523u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003375u, 0x00003374u, 0x00050084u, 0x00000006u, 0x00003376u, 0x00003375u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003378u, 0x00003373u, 0x00003376u, 0x0003003eu, 0x00003368u, 0x00003378u, 0x000500c7u, 0x00000006u, 0x0000337au, 0x00003378u, 0x000006b4u, 0x0003003eu, 0x00003368u, 0x0000337au, 0x000500c2u, 0x00000006u, 0x0000337cu, 0x0000337au, 0x00000194u, 0x0003003eu, 0x00003369u, 0x0000337cu, 0x0004003du, 0x00000006u, 0x0000337eu, 0x00003370u, 0x000500c7u, 0x00000006u, 0x0000337fu, 0x0000337eu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003380u, 0x0000337fu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003382u, 0x0000337cu, 0x00003380u, 0x0003003eu, 0x00003369u, 0x00003382u, 0x000500c6u, 0x00000006u, 0x00003384u, 0x00003382u, 0x0000032au, 0x0003003eu, 0x00003369u, 0x00003384u, 0x00080041u, 0x000001f2u, 0x00003387u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003384u, 0x0004003du, 0x000001adu, 0x00003388u, 0x00003387u, 0x00040071u, 0x00000006u, 0x00003389u, 0x00003388u, 0x0003003eu, 0x0000336au, 0x00003389u, 0x000500c2u, 0x00000006u, 0x0000338bu, 0x00003389u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000338cu, 0x0000338bu, 0x000500c7u, 0x00000006u, 0x0000338eu, 0x00003389u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000338fu, 0x0000338eu, 0x00050050u, 0x0000004du, 0x00003390u, 0x0000338cu, 0x0000338fu, 0x0009004fu, 0x00000009u, 0x00003391u, 0x00003390u, 0x00003390u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000336bu, 0x00003391u, 0x0003003eu, 0x00002473u, 0x00003391u, 0x000300f7u, 0x00002762u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002763u, 0x00002762u, 0x000200f8u, 0x00002763u, 0x00050050u, 0x0000004du, 0x00002766u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x00002767u, 0x00002766u, 0x0003003eu, 0x00005be9u, 0x00002428u, 0x0003003eu, 0x00005beau, 0x0000242bu, 0x0003003eu, 0x00002525u, 0x000018feu, 0x0003003eu, 0x00002526u, 0x00002767u, 0x00050041u, 0x00000007u, 0x0000339au, 0x00002526u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000339bu, 0x0000339au, 0x00050084u, 0x00000006u, 0x0000339cu, 0x0000242bu, 0x0000339bu, 0x00050080u, 0x00000006u, 0x0000339du, 0x00002428u, 0x0000339cu, 0x0003003eu, 0x00003392u, 0x0000339du, 0x00050041u, 0x00000007u, 0x0000339eu, 0x00002526u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000339fu, 0x0000339eu, 0x00050084u, 0x00000006u, 0x000033a0u, 0x0000339fu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000033a2u, 0x0000339du, 0x000033a0u, 0x0003003eu, 0x00003392u, 0x000033a2u, 0x000500c7u, 0x00000006u, 0x000033a4u, 0x000033a2u, 0x000006b4u, 0x0003003eu, 0x00003392u, 0x000033a4u, 0x000500c2u, 0x00000006u, 0x000033a6u, 0x000033a4u, 0x00000194u, 0x0003003eu, 0x00003393u, 0x000033a6u, 0x0004003du, 0x00000006u, 0x000033a8u, 0x0000339au, 0x000500c7u, 0x00000006u, 0x000033a9u, 0x000033a8u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000033aau, 0x000033a9u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000033acu, 0x000033a6u, 0x000033aau, 0x0003003eu, 0x00003393u, 0x000033acu, 0x000500c6u, 0x00000006u, 0x000033aeu, 0x000033acu, 0x0000032au, 0x0003003eu, 0x00003393u, 0x000033aeu, 0x00080041u, 0x000001f2u, 0x000033b1u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000033aeu, 0x0004003du, 0x000001adu, 0x000033b2u, 0x000033b1u, 0x00040071u, 0x00000006u, 0x000033b3u, 0x000033b2u, 0x0003003eu, 0x00003394u, 0x000033b3u, 0x000500c2u, 0x00000006u, 0x000033b5u, 0x000033b3u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000033b6u, 0x000033b5u, 0x000500c7u, 0x00000006u, 0x000033b8u, 0x000033b3u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000033b9u, 0x000033b8u, 0x00050050u, 0x0000004du, 0x000033bau, 0x000033b6u, 0x000033b9u, 0x0009004fu, 0x00000009u, 0x000033bbu, 0x000033bau, 0x000033bau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003395u, 0x000033bbu, 0x0003003eu, 0x0000247bu, 0x000033bbu, 0x00050050u, 0x0000004du, 0x0000276du, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x0000276eu, 0x0000276du, 0x0003003eu, 0x00005bedu, 0x00002428u, 0x0003003eu, 0x00005beeu, 0x0000242bu, 0x0003003eu, 0x00002528u, 0x000018feu, 0x0003003eu, 0x00002529u, 0x0000276eu, 0x00050041u, 0x00000007u, 0x000033c4u, 0x00002529u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000033c5u, 0x000033c4u, 0x00050084u, 0x00000006u, 0x000033c6u, 0x0000242bu, 0x000033c5u, 0x00050080u, 0x00000006u, 0x000033c7u, 0x00002428u, 0x000033c6u, 0x0003003eu, 0x000033bcu, 0x000033c7u, 0x00050041u, 0x00000007u, 0x000033c8u, 0x00002529u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000033c9u, 0x000033c8u, 0x00050084u, 0x00000006u, 0x000033cau, 0x000033c9u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000033ccu, 0x000033c7u, 0x000033cau, 0x0003003eu, 0x000033bcu, 0x000033ccu, 0x000500c7u, 0x00000006u, 0x000033ceu, 0x000033ccu, 0x000006b4u, 0x0003003eu, 0x000033bcu, 0x000033ceu, 0x000500c2u, 0x00000006u, 0x000033d0u, 0x000033ceu, 0x00000194u, 0x0003003eu, 0x000033bdu, 0x000033d0u, 0x0004003du, 0x00000006u, 0x000033d2u, 0x000033c4u, 0x000500c7u, 0x00000006u, 0x000033d3u, 0x000033d2u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000033d4u, 0x000033d3u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000033d6u, 0x000033d0u, 0x000033d4u, 0x0003003eu, 0x000033bdu, 0x000033d6u, 0x000500c6u, 0x00000006u, 0x000033d8u, 0x000033d6u, 0x0000032au, 0x0003003eu, 0x000033bdu, 0x000033d8u, 0x00080041u, 0x000001f2u, 0x000033dbu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000033d8u, 0x0004003du, 0x000001adu, 0x000033dcu, 0x000033dbu, 0x00040071u, 0x00000006u, 0x000033ddu, 0x000033dcu, 0x0003003eu, 0x000033beu, 0x000033ddu, 0x000500c2u, 0x00000006u, 0x000033dfu, 0x000033ddu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000033e0u, 0x000033dfu, 0x000500c7u, 0x00000006u, 0x000033e2u, 0x000033ddu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000033e3u, 0x000033e2u, 0x00050050u, 0x0000004du, 0x000033e4u, 0x000033e0u, 0x000033e3u, 0x0009004fu, 0x00000009u, 0x000033e5u, 0x000033e4u, 0x000033e4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000033bfu, 0x000033e5u, 0x0003003eu, 0x00002483u, 0x000033e5u, 0x000200f9u, 0x00002762u, 0x000200f8u, 0x00002762u, 0x000700f5u, 0x00000009u, 0x000073e4u, 0x000072a9u, 0x00002759u, 0x000033e5u, 0x00002763u, 0x000700f5u, 0x00000009u, 0x000072f2u, 0x000072a9u, 0x00002759u, 0x000033bbu, 0x00002763u, 0x000300f7u, 0x00002773u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002774u, 0x00002773u, 0x000200f8u, 0x00002774u, 0x00050050u, 0x0000004du, 0x00002777u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002778u, 0x00002777u, 0x0003003eu, 0x00005bf1u, 0x00002428u, 0x0003003eu, 0x00005bf2u, 0x0000242bu, 0x0003003eu, 0x0000252bu, 0x000018feu, 0x0003003eu, 0x0000252cu, 0x00002778u, 0x00050041u, 0x00000007u, 0x000033eeu, 0x0000252cu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000033efu, 0x000033eeu, 0x00050084u, 0x00000006u, 0x000033f0u, 0x0000242bu, 0x000033efu, 0x00050080u, 0x00000006u, 0x000033f1u, 0x00002428u, 0x000033f0u, 0x0003003eu, 0x000033e6u, 0x000033f1u, 0x00050041u, 0x00000007u, 0x000033f2u, 0x0000252cu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000033f3u, 0x000033f2u, 0x00050084u, 0x00000006u, 0x000033f4u, 0x000033f3u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000033f6u, 0x000033f1u, 0x000033f4u, 0x0003003eu, 0x000033e6u, 0x000033f6u, 0x000500c7u, 0x00000006u, 0x000033f8u, 0x000033f6u, 0x000006b4u, 0x0003003eu, 0x000033e6u, 0x000033f8u, 0x000500c2u, 0x00000006u, 0x000033fau, 0x000033f8u, 0x00000194u, 0x0003003eu, 0x000033e7u, 0x000033fau, 0x0004003du, 0x00000006u, 0x000033fcu, 0x000033eeu, 0x000500c7u, 0x00000006u, 0x000033fdu, 0x000033fcu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000033feu, 0x000033fdu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003400u, 0x000033fau, 0x000033feu, 0x0003003eu, 0x000033e7u, 0x00003400u, 0x000500c6u, 0x00000006u, 0x00003402u, 0x00003400u, 0x0000032au, 0x0003003eu, 0x000033e7u, 0x00003402u, 0x00080041u, 0x000001f2u, 0x00003405u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003402u, 0x0004003du, 0x000001adu, 0x00003406u, 0x00003405u, 0x00040071u, 0x00000006u, 0x00003407u, 0x00003406u, 0x0003003eu, 0x000033e8u, 0x00003407u, 0x000500c2u, 0x00000006u, 0x00003409u, 0x00003407u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000340au, 0x00003409u, 0x000500c7u, 0x00000006u, 0x0000340cu, 0x00003407u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000340du, 0x0000340cu, 0x00050050u, 0x0000004du, 0x0000340eu, 0x0000340au, 0x0000340du, 0x0009004fu, 0x00000009u, 0x0000340fu, 0x0000340eu, 0x0000340eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000033e9u, 0x0000340fu, 0x0003003eu, 0x0000248bu, 0x0000340fu, 0x000200f9u, 0x00002773u, 0x000200f8u, 0x00002773u, 0x000700f5u, 0x00000009u, 0x0000745du, 0x000072a9u, 0x00002762u, 0x0000340fu, 0x00002774u, 0x000200f9u, 0x00002758u, 0x000200f8u, 0x00002758u, 0x000900f5u, 0x00000009u, 0x0000745cu, 0x0000745du, 0x00002773u, 0x0000745fu, 0x0000279cu, 0x00007461u, 0x000027bfu, 0x000900f5u, 0x00000009u, 0x000073e2u, 0x000073e4u, 0x00002773u, 0x000073e6u, 0x0000279cu, 0x000073e8u, 0x000027bfu, 0x000900f5u, 0x00000009u, 0x0000736au, 0x00003391u, 0x00002773u, 0x00003441u, 0x0000279cu, 0x000034fau, 0x000027bfu, 0x000900f5u, 0x00000009u, 0x000072f0u, 0x000072f2u, 0x00002773u, 0x000072f4u, 0x0000279cu, 0x000072f6u, 0x000027bfu, 0x000200f9u, 0x0000269cu, 0x000200f8u, 0x0000269eu, 0x000500c3u, 0x00000008u, 0x0000272au, 0x00006e94u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x0000272bu, 0x0000272au, 0x0003003eu, 0x000024f3u, 0x0000272bu, 0x00050082u, 0x00000008u, 0x0000272fu, 0x00006ed2u, 0x00006e94u, 0x00050080u, 0x00000008u, 0x00002730u, 0x00006ed2u, 0x0000272fu, 0x000500c3u, 0x00000008u, 0x00002731u, 0x00002730u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00002732u, 0x00002731u, 0x0003003eu, 0x000024f4u, 0x00002732u, 0x00050050u, 0x0000004du, 0x00002735u, 0x00006e94u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x00002736u, 0x00002735u, 0x0003003eu, 0x00005bb5u, 0x00002428u, 0x0003003eu, 0x00005bb6u, 0x0000242bu, 0x0003003eu, 0x000024f6u, 0x000018feu, 0x0003003eu, 0x000024f7u, 0x00002736u, 0x0003003eu, 0x000024f8u, 0x0000272bu, 0x00050041u, 0x00000007u, 0x0000324au, 0x000024f7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000324bu, 0x0000324au, 0x00050084u, 0x00000006u, 0x0000324cu, 0x0000242bu, 0x0000324bu, 0x00050080u, 0x00000006u, 0x0000324du, 0x00002428u, 0x0000324cu, 0x0003003eu, 0x0000323cu, 0x0000324du, 0x00050041u, 0x00000007u, 0x0000324fu, 0x000024f7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003250u, 0x0000324fu, 0x00050080u, 0x00000006u, 0x00003251u, 0x0000324du, 0x00003250u, 0x0003003eu, 0x0000323du, 0x00003251u, 0x000500c7u, 0x00000006u, 0x00003253u, 0x00003251u, 0x00000767u, 0x0003003eu, 0x0000323du, 0x00003253u, 0x00050084u, 0x00000006u, 0x00003256u, 0x0000272bu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003257u, 0x0000324du, 0x00003256u, 0x0003003eu, 0x0000323eu, 0x00003257u, 0x000500c7u, 0x00000006u, 0x00003259u, 0x00003257u, 0x00000767u, 0x0003003eu, 0x0000323eu, 0x00003259u, 0x0003003eu, 0x0000323fu, 0x00003253u, 0x0004003du, 0x00000006u, 0x0000325cu, 0x0000324au, 0x000500c7u, 0x00000006u, 0x0000325du, 0x0000325cu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000325eu, 0x0000325du, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003260u, 0x00003253u, 0x0000325eu, 0x0003003eu, 0x0000323fu, 0x00003260u, 0x000500c6u, 0x00000006u, 0x00003262u, 0x00003260u, 0x00000331u, 0x0003003eu, 0x0000323fu, 0x00003262u, 0x000500c2u, 0x00000006u, 0x00003264u, 0x00003259u, 0x00000194u, 0x0003003eu, 0x00003240u, 0x00003264u, 0x0004003du, 0x00000006u, 0x00003266u, 0x0000324au, 0x000500c7u, 0x00000006u, 0x00003267u, 0x00003266u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003268u, 0x00003267u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000326au, 0x00003264u, 0x00003268u, 0x0003003eu, 0x00003240u, 0x0000326au, 0x000500c6u, 0x00000006u, 0x0000326cu, 0x0000326au, 0x0000032au, 0x0003003eu, 0x00003240u, 0x0000326cu, 0x000500c5u, 0x00000006u, 0x0000326fu, 0x00003262u, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00003270u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000326fu, 0x0004003du, 0x000001abu, 0x00003271u, 0x00003270u, 0x00040071u, 0x00000006u, 0x00003272u, 0x00003271u, 0x0004007cu, 0x00000008u, 0x00003273u, 0x00003272u, 0x0003003eu, 0x00003241u, 0x00003273u, 0x00080041u, 0x000001f2u, 0x00003276u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000326cu, 0x0004003du, 0x000001adu, 0x00003277u, 0x00003276u, 0x00040071u, 0x00000006u, 0x00003278u, 0x00003277u, 0x0004007cu, 0x00000008u, 0x00003279u, 0x00003278u, 0x0003003eu, 0x00003242u, 0x00003279u, 0x000500c3u, 0x00000008u, 0x0000327bu, 0x00003279u, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x0000327cu, 0x0000327bu, 0x000002eeu, 0x0003003eu, 0x00003243u, 0x0000327cu, 0x000500c3u, 0x00000008u, 0x0000327eu, 0x00003279u, 0x00000185u, 0x000500c7u, 0x00000008u, 0x0000327fu, 0x0000327eu, 0x000002eeu, 0x0003003eu, 0x00003244u, 0x0000327fu, 0x00050082u, 0x00000008u, 0x00003281u, 0x0000327cu, 0x00000323u, 0x00050082u, 0x00000008u, 0x00003283u, 0x0000327fu, 0x00000323u, 0x00070050u, 0x00000009u, 0x00003286u, 0x00003281u, 0x00003283u, 0x00003273u, 0x00003273u, 0x0003003eu, 0x00003245u, 0x00003286u, 0x0003003eu, 0x00002473u, 0x00003286u, 0x000300f7u, 0x0000273cu, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000273du, 0x0000273cu, 0x000200f8u, 0x0000273du, 0x00050050u, 0x0000004du, 0x00002740u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x00002741u, 0x00002740u, 0x0003003eu, 0x00005bb9u, 0x00002428u, 0x0003003eu, 0x00005bbau, 0x0000242bu, 0x0003003eu, 0x000024fau, 0x000018feu, 0x0003003eu, 0x000024fbu, 0x00002741u, 0x0003003eu, 0x000024fcu, 0x00002732u, 0x00050041u, 0x00000007u, 0x00003295u, 0x000024fbu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003296u, 0x00003295u, 0x00050084u, 0x00000006u, 0x00003297u, 0x0000242bu, 0x00003296u, 0x00050080u, 0x00000006u, 0x00003298u, 0x00002428u, 0x00003297u, 0x0003003eu, 0x00003287u, 0x00003298u, 0x00050041u, 0x00000007u, 0x0000329au, 0x000024fbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000329bu, 0x0000329au, 0x00050080u, 0x00000006u, 0x0000329cu, 0x00003298u, 0x0000329bu, 0x0003003eu, 0x00003288u, 0x0000329cu, 0x000500c7u, 0x00000006u, 0x0000329eu, 0x0000329cu, 0x00000767u, 0x0003003eu, 0x00003288u, 0x0000329eu, 0x00050084u, 0x00000006u, 0x000032a1u, 0x00002732u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000032a2u, 0x00003298u, 0x000032a1u, 0x0003003eu, 0x00003289u, 0x000032a2u, 0x000500c7u, 0x00000006u, 0x000032a4u, 0x000032a2u, 0x00000767u, 0x0003003eu, 0x00003289u, 0x000032a4u, 0x0003003eu, 0x0000328au, 0x0000329eu, 0x0004003du, 0x00000006u, 0x000032a7u, 0x00003295u, 0x000500c7u, 0x00000006u, 0x000032a8u, 0x000032a7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000032a9u, 0x000032a8u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000032abu, 0x0000329eu, 0x000032a9u, 0x0003003eu, 0x0000328au, 0x000032abu, 0x000500c6u, 0x00000006u, 0x000032adu, 0x000032abu, 0x00000331u, 0x0003003eu, 0x0000328au, 0x000032adu, 0x000500c2u, 0x00000006u, 0x000032afu, 0x000032a4u, 0x00000194u, 0x0003003eu, 0x0000328bu, 0x000032afu, 0x0004003du, 0x00000006u, 0x000032b1u, 0x00003295u, 0x000500c7u, 0x00000006u, 0x000032b2u, 0x000032b1u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000032b3u, 0x000032b2u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000032b5u, 0x000032afu, 0x000032b3u, 0x0003003eu, 0x0000328bu, 0x000032b5u, 0x000500c6u, 0x00000006u, 0x000032b7u, 0x000032b5u, 0x0000032au, 0x0003003eu, 0x0000328bu, 0x000032b7u, 0x000500c5u, 0x00000006u, 0x000032bau, 0x000032adu, 0x00000790u, 0x00080041u, 0x000001f9u, 0x000032bbu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000032bau, 0x0004003du, 0x000001abu, 0x000032bcu, 0x000032bbu, 0x00040071u, 0x00000006u, 0x000032bdu, 0x000032bcu, 0x0004007cu, 0x00000008u, 0x000032beu, 0x000032bdu, 0x0003003eu, 0x0000328cu, 0x000032beu, 0x00080041u, 0x000001f2u, 0x000032c1u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000032b7u, 0x0004003du, 0x000001adu, 0x000032c2u, 0x000032c1u, 0x00040071u, 0x00000006u, 0x000032c3u, 0x000032c2u, 0x0004007cu, 0x00000008u, 0x000032c4u, 0x000032c3u, 0x0003003eu, 0x0000328du, 0x000032c4u, 0x000500c3u, 0x00000008u, 0x000032c6u, 0x000032c4u, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x000032c7u, 0x000032c6u, 0x000002eeu, 0x0003003eu, 0x0000328eu, 0x000032c7u, 0x000500c3u, 0x00000008u, 0x000032c9u, 0x000032c4u, 0x00000185u, 0x000500c7u, 0x00000008u, 0x000032cau, 0x000032c9u, 0x000002eeu, 0x0003003eu, 0x0000328fu, 0x000032cau, 0x00050082u, 0x00000008u, 0x000032ccu, 0x000032c7u, 0x00000323u, 0x00050082u, 0x00000008u, 0x000032ceu, 0x000032cau, 0x00000323u, 0x00070050u, 0x00000009u, 0x000032d1u, 0x000032ccu, 0x000032ceu, 0x000032beu, 0x000032beu, 0x0003003eu, 0x00003290u, 0x000032d1u, 0x0003003eu, 0x0000247bu, 0x000032d1u, 0x00050050u, 0x0000004du, 0x00002748u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002749u, 0x00002748u, 0x0003003eu, 0x00005bbdu, 0x00002428u, 0x0003003eu, 0x00005bbeu, 0x0000242bu, 0x0003003eu, 0x000024feu, 0x000018feu, 0x0003003eu, 0x000024ffu, 0x00002749u, 0x0003003eu, 0x00002500u, 0x0000272bu, 0x00050041u, 0x00000007u, 0x000032e0u, 0x000024ffu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000032e1u, 0x000032e0u, 0x00050084u, 0x00000006u, 0x000032e2u, 0x0000242bu, 0x000032e1u, 0x00050080u, 0x00000006u, 0x000032e3u, 0x00002428u, 0x000032e2u, 0x0003003eu, 0x000032d2u, 0x000032e3u, 0x00050041u, 0x00000007u, 0x000032e5u, 0x000024ffu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000032e6u, 0x000032e5u, 0x00050080u, 0x00000006u, 0x000032e7u, 0x000032e3u, 0x000032e6u, 0x0003003eu, 0x000032d3u, 0x000032e7u, 0x000500c7u, 0x00000006u, 0x000032e9u, 0x000032e7u, 0x00000767u, 0x0003003eu, 0x000032d3u, 0x000032e9u, 0x00050080u, 0x00000006u, 0x000032edu, 0x000032e3u, 0x00003256u, 0x0003003eu, 0x000032d4u, 0x000032edu, 0x000500c7u, 0x00000006u, 0x000032efu, 0x000032edu, 0x00000767u, 0x0003003eu, 0x000032d4u, 0x000032efu, 0x0003003eu, 0x000032d5u, 0x000032e9u, 0x0004003du, 0x00000006u, 0x000032f2u, 0x000032e0u, 0x000500c7u, 0x00000006u, 0x000032f3u, 0x000032f2u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000032f4u, 0x000032f3u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000032f6u, 0x000032e9u, 0x000032f4u, 0x0003003eu, 0x000032d5u, 0x000032f6u, 0x000500c6u, 0x00000006u, 0x000032f8u, 0x000032f6u, 0x00000331u, 0x0003003eu, 0x000032d5u, 0x000032f8u, 0x000500c2u, 0x00000006u, 0x000032fau, 0x000032efu, 0x00000194u, 0x0003003eu, 0x000032d6u, 0x000032fau, 0x0004003du, 0x00000006u, 0x000032fcu, 0x000032e0u, 0x000500c7u, 0x00000006u, 0x000032fdu, 0x000032fcu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000032feu, 0x000032fdu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003300u, 0x000032fau, 0x000032feu, 0x0003003eu, 0x000032d6u, 0x00003300u, 0x000500c6u, 0x00000006u, 0x00003302u, 0x00003300u, 0x0000032au, 0x0003003eu, 0x000032d6u, 0x00003302u, 0x000500c5u, 0x00000006u, 0x00003305u, 0x000032f8u, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00003306u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003305u, 0x0004003du, 0x000001abu, 0x00003307u, 0x00003306u, 0x00040071u, 0x00000006u, 0x00003308u, 0x00003307u, 0x0004007cu, 0x00000008u, 0x00003309u, 0x00003308u, 0x0003003eu, 0x000032d7u, 0x00003309u, 0x00080041u, 0x000001f2u, 0x0000330cu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003302u, 0x0004003du, 0x000001adu, 0x0000330du, 0x0000330cu, 0x00040071u, 0x00000006u, 0x0000330eu, 0x0000330du, 0x0004007cu, 0x00000008u, 0x0000330fu, 0x0000330eu, 0x0003003eu, 0x000032d8u, 0x0000330fu, 0x000500c3u, 0x00000008u, 0x00003311u, 0x0000330fu, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x00003312u, 0x00003311u, 0x000002eeu, 0x0003003eu, 0x000032d9u, 0x00003312u, 0x000500c3u, 0x00000008u, 0x00003314u, 0x0000330fu, 0x00000185u, 0x000500c7u, 0x00000008u, 0x00003315u, 0x00003314u, 0x000002eeu, 0x0003003eu, 0x000032dau, 0x00003315u, 0x00050082u, 0x00000008u, 0x00003317u, 0x00003312u, 0x00000323u, 0x00050082u, 0x00000008u, 0x00003319u, 0x00003315u, 0x00000323u, 0x00070050u, 0x00000009u, 0x0000331cu, 0x00003317u, 0x00003319u, 0x00003309u, 0x00003309u, 0x0003003eu, 0x000032dbu, 0x0000331cu, 0x0003003eu, 0x00002483u, 0x0000331cu, 0x00050050u, 0x0000004du, 0x00002750u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002751u, 0x00002750u, 0x0003003eu, 0x00005bc1u, 0x00002428u, 0x0003003eu, 0x00005bc2u, 0x0000242bu, 0x0003003eu, 0x00002502u, 0x000018feu, 0x0003003eu, 0x00002503u, 0x00002751u, 0x0003003eu, 0x00002504u, 0x00002732u, 0x00050041u, 0x00000007u, 0x0000332bu, 0x00002503u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000332cu, 0x0000332bu, 0x00050084u, 0x00000006u, 0x0000332du, 0x0000242bu, 0x0000332cu, 0x00050080u, 0x00000006u, 0x0000332eu, 0x00002428u, 0x0000332du, 0x0003003eu, 0x0000331du, 0x0000332eu, 0x00050041u, 0x00000007u, 0x00003330u, 0x00002503u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003331u, 0x00003330u, 0x00050080u, 0x00000006u, 0x00003332u, 0x0000332eu, 0x00003331u, 0x0003003eu, 0x0000331eu, 0x00003332u, 0x000500c7u, 0x00000006u, 0x00003334u, 0x00003332u, 0x00000767u, 0x0003003eu, 0x0000331eu, 0x00003334u, 0x00050080u, 0x00000006u, 0x00003338u, 0x0000332eu, 0x000032a1u, 0x0003003eu, 0x0000331fu, 0x00003338u, 0x000500c7u, 0x00000006u, 0x0000333au, 0x00003338u, 0x00000767u, 0x0003003eu, 0x0000331fu, 0x0000333au, 0x0003003eu, 0x00003320u, 0x00003334u, 0x0004003du, 0x00000006u, 0x0000333du, 0x0000332bu, 0x000500c7u, 0x00000006u, 0x0000333eu, 0x0000333du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000333fu, 0x0000333eu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003341u, 0x00003334u, 0x0000333fu, 0x0003003eu, 0x00003320u, 0x00003341u, 0x000500c6u, 0x00000006u, 0x00003343u, 0x00003341u, 0x00000331u, 0x0003003eu, 0x00003320u, 0x00003343u, 0x000500c2u, 0x00000006u, 0x00003345u, 0x0000333au, 0x00000194u, 0x0003003eu, 0x00003321u, 0x00003345u, 0x0004003du, 0x00000006u, 0x00003347u, 0x0000332bu, 0x000500c7u, 0x00000006u, 0x00003348u, 0x00003347u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003349u, 0x00003348u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000334bu, 0x00003345u, 0x00003349u, 0x0003003eu, 0x00003321u, 0x0000334bu, 0x000500c6u, 0x00000006u, 0x0000334du, 0x0000334bu, 0x0000032au, 0x0003003eu, 0x00003321u, 0x0000334du, 0x000500c5u, 0x00000006u, 0x00003350u, 0x00003343u, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00003351u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003350u, 0x0004003du, 0x000001abu, 0x00003352u, 0x00003351u, 0x00040071u, 0x00000006u, 0x00003353u, 0x00003352u, 0x0004007cu, 0x00000008u, 0x00003354u, 0x00003353u, 0x0003003eu, 0x00003322u, 0x00003354u, 0x00080041u, 0x000001f2u, 0x00003357u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000334du, 0x0004003du, 0x000001adu, 0x00003358u, 0x00003357u, 0x00040071u, 0x00000006u, 0x00003359u, 0x00003358u, 0x0004007cu, 0x00000008u, 0x0000335au, 0x00003359u, 0x0003003eu, 0x00003323u, 0x0000335au, 0x000500c3u, 0x00000008u, 0x0000335cu, 0x0000335au, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x0000335du, 0x0000335cu, 0x000002eeu, 0x0003003eu, 0x00003324u, 0x0000335du, 0x000500c3u, 0x00000008u, 0x0000335fu, 0x0000335au, 0x00000185u, 0x000500c7u, 0x00000008u, 0x00003360u, 0x0000335fu, 0x000002eeu, 0x0003003eu, 0x00003325u, 0x00003360u, 0x00050082u, 0x00000008u, 0x00003362u, 0x0000335du, 0x00000323u, 0x00050082u, 0x00000008u, 0x00003364u, 0x00003360u, 0x00000323u, 0x00070050u, 0x00000009u, 0x00003367u, 0x00003362u, 0x00003364u, 0x00003354u, 0x00003354u, 0x0003003eu, 0x00003326u, 0x00003367u, 0x0003003eu, 0x0000248bu, 0x00003367u, 0x000200f9u, 0x0000273cu, 0x000200f8u, 0x0000273cu, 0x000700f5u, 0x00000009u, 0x0000745bu, 0x000072a9u, 0x0000269eu, 0x00003367u, 0x0000273du, 0x000700f5u, 0x00000009u, 0x000073e1u, 0x000072a9u, 0x0000269eu, 0x0000331cu, 0x0000273du, 0x000700f5u, 0x00000009u, 0x000072efu, 0x000072a9u, 0x0000269eu, 0x000032d1u, 0x0000273du, 0x000200f9u, 0x0000269cu, 0x000200f8u, 0x0000269du, 0x000300f7u, 0x000026a4u, 0x00000000u, 0x000b00fbu, 0x0000b1ddu, 0x000026a4u, 0x00000000u, 0x000026a5u, 0x00000001u, 0x000026a6u, 0x00000002u, 0x000026a7u, 0x00000003u, 0x000026a8u, 0x000200f8u, 0x000026a8u, 0x0004007cu, 0x000000a0u, 0x0000270au, 0x00006f1du, 0x0003003eu, 0x00005ba5u, 0x00002428u, 0x0003003eu, 0x00005ba6u, 0x0000242bu, 0x0003003eu, 0x000024e8u, 0x000018feu, 0x0003003eu, 0x000024e9u, 0x0000270au, 0x00050041u, 0x00000007u, 0x0000316du, 0x000024e9u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000316eu, 0x0000316du, 0x00050084u, 0x00000006u, 0x0000316fu, 0x0000242bu, 0x0000316eu, 0x00050080u, 0x00000006u, 0x00003170u, 0x00002428u, 0x0000316fu, 0x0003003eu, 0x00003164u, 0x00003170u, 0x00050041u, 0x00000007u, 0x00003171u, 0x000024e9u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003172u, 0x00003171u, 0x00050084u, 0x00000006u, 0x00003173u, 0x00003172u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003175u, 0x00003170u, 0x00003173u, 0x0003003eu, 0x00003164u, 0x00003175u, 0x000500c7u, 0x00000006u, 0x00003177u, 0x00003175u, 0x00000767u, 0x0003003eu, 0x00003164u, 0x00003177u, 0x000500c2u, 0x00000006u, 0x00003179u, 0x00003177u, 0x00000194u, 0x0003003eu, 0x00003165u, 0x00003179u, 0x0004003du, 0x00000006u, 0x0000317bu, 0x0000316du, 0x000500c7u, 0x00000006u, 0x0000317cu, 0x0000317bu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000317du, 0x0000317cu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000317fu, 0x00003179u, 0x0000317du, 0x0003003eu, 0x00003165u, 0x0000317fu, 0x000500c6u, 0x00000006u, 0x00003181u, 0x0000317fu, 0x0000032au, 0x0003003eu, 0x00003165u, 0x00003181u, 0x00080041u, 0x000001f2u, 0x00003184u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003181u, 0x0004003du, 0x000001adu, 0x00003185u, 0x00003184u, 0x00040071u, 0x00000006u, 0x00003186u, 0x00003185u, 0x0003003eu, 0x00003166u, 0x00003186u, 0x000500c5u, 0x00000006u, 0x00003189u, 0x00003181u, 0x00000798u, 0x00080041u, 0x000001f2u, 0x0000318au, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003189u, 0x0004003du, 0x000001adu, 0x0000318bu, 0x0000318au, 0x00040071u, 0x00000006u, 0x0000318cu, 0x0000318bu, 0x0003003eu, 0x00003167u, 0x0000318cu, 0x000500c2u, 0x00000006u, 0x0000318eu, 0x00003186u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000318fu, 0x0000318eu, 0x000500c7u, 0x00000006u, 0x00003191u, 0x00003186u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003192u, 0x00003191u, 0x000500c2u, 0x00000006u, 0x00003194u, 0x0000318cu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003195u, 0x00003194u, 0x000500c7u, 0x00000006u, 0x00003197u, 0x0000318cu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003198u, 0x00003197u, 0x00070050u, 0x00000009u, 0x00003199u, 0x0000318fu, 0x00003192u, 0x00003195u, 0x00003198u, 0x0003003eu, 0x00003168u, 0x00003199u, 0x0003003eu, 0x00002473u, 0x00003199u, 0x000300f7u, 0x0000270fu, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002710u, 0x0000270fu, 0x000200f8u, 0x00002710u, 0x00050050u, 0x0000004du, 0x00002713u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x00002714u, 0x00002713u, 0x0003003eu, 0x00005ba9u, 0x00002428u, 0x0003003eu, 0x00005baau, 0x0000242bu, 0x0003003eu, 0x000024ebu, 0x000018feu, 0x0003003eu, 0x000024ecu, 0x00002714u, 0x00050041u, 0x00000007u, 0x000031a3u, 0x000024ecu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000031a4u, 0x000031a3u, 0x00050084u, 0x00000006u, 0x000031a5u, 0x0000242bu, 0x000031a4u, 0x00050080u, 0x00000006u, 0x000031a6u, 0x00002428u, 0x000031a5u, 0x0003003eu, 0x0000319au, 0x000031a6u, 0x00050041u, 0x00000007u, 0x000031a7u, 0x000024ecu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000031a8u, 0x000031a7u, 0x00050084u, 0x00000006u, 0x000031a9u, 0x000031a8u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000031abu, 0x000031a6u, 0x000031a9u, 0x0003003eu, 0x0000319au, 0x000031abu, 0x000500c7u, 0x00000006u, 0x000031adu, 0x000031abu, 0x00000767u, 0x0003003eu, 0x0000319au, 0x000031adu, 0x000500c2u, 0x00000006u, 0x000031afu, 0x000031adu, 0x00000194u, 0x0003003eu, 0x0000319bu, 0x000031afu, 0x0004003du, 0x00000006u, 0x000031b1u, 0x000031a3u, 0x000500c7u, 0x00000006u, 0x000031b2u, 0x000031b1u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000031b3u, 0x000031b2u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000031b5u, 0x000031afu, 0x000031b3u, 0x0003003eu, 0x0000319bu, 0x000031b5u, 0x000500c6u, 0x00000006u, 0x000031b7u, 0x000031b5u, 0x0000032au, 0x0003003eu, 0x0000319bu, 0x000031b7u, 0x00080041u, 0x000001f2u, 0x000031bau, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000031b7u, 0x0004003du, 0x000001adu, 0x000031bbu, 0x000031bau, 0x00040071u, 0x00000006u, 0x000031bcu, 0x000031bbu, 0x0003003eu, 0x0000319cu, 0x000031bcu, 0x000500c5u, 0x00000006u, 0x000031bfu, 0x000031b7u, 0x00000798u, 0x00080041u, 0x000001f2u, 0x000031c0u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000031bfu, 0x0004003du, 0x000001adu, 0x000031c1u, 0x000031c0u, 0x00040071u, 0x00000006u, 0x000031c2u, 0x000031c1u, 0x0003003eu, 0x0000319du, 0x000031c2u, 0x000500c2u, 0x00000006u, 0x000031c4u, 0x000031bcu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000031c5u, 0x000031c4u, 0x000500c7u, 0x00000006u, 0x000031c7u, 0x000031bcu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000031c8u, 0x000031c7u, 0x000500c2u, 0x00000006u, 0x000031cau, 0x000031c2u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000031cbu, 0x000031cau, 0x000500c7u, 0x00000006u, 0x000031cdu, 0x000031c2u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000031ceu, 0x000031cdu, 0x00070050u, 0x00000009u, 0x000031cfu, 0x000031c5u, 0x000031c8u, 0x000031cbu, 0x000031ceu, 0x0003003eu, 0x0000319eu, 0x000031cfu, 0x0003003eu, 0x0000247bu, 0x000031cfu, 0x00050050u, 0x0000004du, 0x0000271au, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x0000271bu, 0x0000271au, 0x0003003eu, 0x00005badu, 0x00002428u, 0x0003003eu, 0x00005baeu, 0x0000242bu, 0x0003003eu, 0x000024eeu, 0x000018feu, 0x0003003eu, 0x000024efu, 0x0000271bu, 0x00050041u, 0x00000007u, 0x000031d9u, 0x000024efu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000031dau, 0x000031d9u, 0x00050084u, 0x00000006u, 0x000031dbu, 0x0000242bu, 0x000031dau, 0x00050080u, 0x00000006u, 0x000031dcu, 0x00002428u, 0x000031dbu, 0x0003003eu, 0x000031d0u, 0x000031dcu, 0x00050041u, 0x00000007u, 0x000031ddu, 0x000024efu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000031deu, 0x000031ddu, 0x00050084u, 0x00000006u, 0x000031dfu, 0x000031deu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000031e1u, 0x000031dcu, 0x000031dfu, 0x0003003eu, 0x000031d0u, 0x000031e1u, 0x000500c7u, 0x00000006u, 0x000031e3u, 0x000031e1u, 0x00000767u, 0x0003003eu, 0x000031d0u, 0x000031e3u, 0x000500c2u, 0x00000006u, 0x000031e5u, 0x000031e3u, 0x00000194u, 0x0003003eu, 0x000031d1u, 0x000031e5u, 0x0004003du, 0x00000006u, 0x000031e7u, 0x000031d9u, 0x000500c7u, 0x00000006u, 0x000031e8u, 0x000031e7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000031e9u, 0x000031e8u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000031ebu, 0x000031e5u, 0x000031e9u, 0x0003003eu, 0x000031d1u, 0x000031ebu, 0x000500c6u, 0x00000006u, 0x000031edu, 0x000031ebu, 0x0000032au, 0x0003003eu, 0x000031d1u, 0x000031edu, 0x00080041u, 0x000001f2u, 0x000031f0u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000031edu, 0x0004003du, 0x000001adu, 0x000031f1u, 0x000031f0u, 0x00040071u, 0x00000006u, 0x000031f2u, 0x000031f1u, 0x0003003eu, 0x000031d2u, 0x000031f2u, 0x000500c5u, 0x00000006u, 0x000031f5u, 0x000031edu, 0x00000798u, 0x00080041u, 0x000001f2u, 0x000031f6u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000031f5u, 0x0004003du, 0x000001adu, 0x000031f7u, 0x000031f6u, 0x00040071u, 0x00000006u, 0x000031f8u, 0x000031f7u, 0x0003003eu, 0x000031d3u, 0x000031f8u, 0x000500c2u, 0x00000006u, 0x000031fau, 0x000031f2u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000031fbu, 0x000031fau, 0x000500c7u, 0x00000006u, 0x000031fdu, 0x000031f2u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000031feu, 0x000031fdu, 0x000500c2u, 0x00000006u, 0x00003200u, 0x000031f8u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003201u, 0x00003200u, 0x000500c7u, 0x00000006u, 0x00003203u, 0x000031f8u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003204u, 0x00003203u, 0x00070050u, 0x00000009u, 0x00003205u, 0x000031fbu, 0x000031feu, 0x00003201u, 0x00003204u, 0x0003003eu, 0x000031d4u, 0x00003205u, 0x0003003eu, 0x00002483u, 0x00003205u, 0x000200f9u, 0x0000270fu, 0x000200f8u, 0x0000270fu, 0x000700f5u, 0x00000009u, 0x000073e0u, 0x000072a9u, 0x000026a8u, 0x00003205u, 0x00002710u, 0x000700f5u, 0x00000009u, 0x000072eeu, 0x000072a9u, 0x000026a8u, 0x000031cfu, 0x00002710u, 0x000300f7u, 0x00002720u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002721u, 0x00002720u, 0x000200f8u, 0x00002721u, 0x00050050u, 0x0000004du, 0x00002724u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002725u, 0x00002724u, 0x0003003eu, 0x00005bb1u, 0x00002428u, 0x0003003eu, 0x00005bb2u, 0x0000242bu, 0x0003003eu, 0x000024f1u, 0x000018feu, 0x0003003eu, 0x000024f2u, 0x00002725u, 0x00050041u, 0x00000007u, 0x0000320fu, 0x000024f2u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003210u, 0x0000320fu, 0x00050084u, 0x00000006u, 0x00003211u, 0x0000242bu, 0x00003210u, 0x00050080u, 0x00000006u, 0x00003212u, 0x00002428u, 0x00003211u, 0x0003003eu, 0x00003206u, 0x00003212u, 0x00050041u, 0x00000007u, 0x00003213u, 0x000024f2u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003214u, 0x00003213u, 0x00050084u, 0x00000006u, 0x00003215u, 0x00003214u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003217u, 0x00003212u, 0x00003215u, 0x0003003eu, 0x00003206u, 0x00003217u, 0x000500c7u, 0x00000006u, 0x00003219u, 0x00003217u, 0x00000767u, 0x0003003eu, 0x00003206u, 0x00003219u, 0x000500c2u, 0x00000006u, 0x0000321bu, 0x00003219u, 0x00000194u, 0x0003003eu, 0x00003207u, 0x0000321bu, 0x0004003du, 0x00000006u, 0x0000321du, 0x0000320fu, 0x000500c7u, 0x00000006u, 0x0000321eu, 0x0000321du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000321fu, 0x0000321eu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003221u, 0x0000321bu, 0x0000321fu, 0x0003003eu, 0x00003207u, 0x00003221u, 0x000500c6u, 0x00000006u, 0x00003223u, 0x00003221u, 0x0000032au, 0x0003003eu, 0x00003207u, 0x00003223u, 0x00080041u, 0x000001f2u, 0x00003226u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003223u, 0x0004003du, 0x000001adu, 0x00003227u, 0x00003226u, 0x00040071u, 0x00000006u, 0x00003228u, 0x00003227u, 0x0003003eu, 0x00003208u, 0x00003228u, 0x000500c5u, 0x00000006u, 0x0000322bu, 0x00003223u, 0x00000798u, 0x00080041u, 0x000001f2u, 0x0000322cu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000322bu, 0x0004003du, 0x000001adu, 0x0000322du, 0x0000322cu, 0x00040071u, 0x00000006u, 0x0000322eu, 0x0000322du, 0x0003003eu, 0x00003209u, 0x0000322eu, 0x000500c2u, 0x00000006u, 0x00003230u, 0x00003228u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003231u, 0x00003230u, 0x000500c7u, 0x00000006u, 0x00003233u, 0x00003228u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00003234u, 0x00003233u, 0x000500c2u, 0x00000006u, 0x00003236u, 0x0000322eu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00003237u, 0x00003236u, 0x000500c7u, 0x00000006u, 0x00003239u, 0x0000322eu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000323au, 0x00003239u, 0x00070050u, 0x00000009u, 0x0000323bu, 0x00003231u, 0x00003234u, 0x00003237u, 0x0000323au, 0x0003003eu, 0x0000320au, 0x0000323bu, 0x0003003eu, 0x0000248bu, 0x0000323bu, 0x000200f9u, 0x00002720u, 0x000200f8u, 0x00002720u, 0x000700f5u, 0x00000009u, 0x00007459u, 0x000072a9u, 0x0000270fu, 0x0000323bu, 0x00002721u, 0x000200f9u, 0x000026a4u, 0x000200f8u, 0x000026a7u, 0x0004007cu, 0x000000a0u, 0x000026eau, 0x00006f1du, 0x0003003eu, 0x00005b95u, 0x00002428u, 0x0003003eu, 0x00005b96u, 0x0000242bu, 0x0003003eu, 0x000024dcu, 0x000018feu, 0x0003003eu, 0x000024ddu, 0x000026eau, 0x00050041u, 0x00000007u, 0x00003071u, 0x000024ddu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003072u, 0x00003071u, 0x00050084u, 0x00000006u, 0x00003073u, 0x0000242bu, 0x00003072u, 0x00050080u, 0x00000006u, 0x00003074u, 0x00002428u, 0x00003073u, 0x0003003eu, 0x00003068u, 0x00003074u, 0x00050041u, 0x00000007u, 0x00003075u, 0x000024ddu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003076u, 0x00003075u, 0x00050084u, 0x00000006u, 0x00003077u, 0x00003076u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003079u, 0x00003074u, 0x00003077u, 0x0003003eu, 0x00003068u, 0x00003079u, 0x000500c7u, 0x00000006u, 0x0000307bu, 0x00003079u, 0x000006b4u, 0x0003003eu, 0x00003068u, 0x0000307bu, 0x000500c2u, 0x00000006u, 0x0000307du, 0x0000307bu, 0x00000194u, 0x0003003eu, 0x00003069u, 0x0000307du, 0x0004003du, 0x00000006u, 0x0000307fu, 0x00003071u, 0x000500c7u, 0x00000006u, 0x00003080u, 0x0000307fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003081u, 0x00003080u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003083u, 0x0000307du, 0x00003081u, 0x0003003eu, 0x00003069u, 0x00003083u, 0x000500c6u, 0x00000006u, 0x00003085u, 0x00003083u, 0x0000032au, 0x0003003eu, 0x00003069u, 0x00003085u, 0x00080041u, 0x000001f2u, 0x00003088u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003085u, 0x0004003du, 0x000001adu, 0x00003089u, 0x00003088u, 0x00040071u, 0x00000006u, 0x0000308au, 0x00003089u, 0x0003003eu, 0x0000306au, 0x0000308au, 0x0003003eu, 0x0000306bu, 0x0000308au, 0x00060050u, 0x000002b6u, 0x00003091u, 0x0000308au, 0x0000308au, 0x0000308au, 0x000500c2u, 0x000002b6u, 0x00003092u, 0x00003091u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00003094u, 0x00003092u, 0x0000b1c0u, 0x0003003eu, 0x0000308du, 0x00003094u, 0x000500c4u, 0x000002b6u, 0x00003097u, 0x00003094u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x0000309au, 0x00003094u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x0000309bu, 0x00003097u, 0x0000309au, 0x0003003eu, 0x0000308du, 0x0000309bu, 0x000500c7u, 0x00000006u, 0x0000309du, 0x0000308au, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000309eu, 0x0000309du, 0x00000689u, 0x0003003eu, 0x0000308eu, 0x0000309eu, 0x0004007cu, 0x00000052u, 0x000030a0u, 0x0000309bu, 0x0004007cu, 0x00000008u, 0x000030a2u, 0x0000309eu, 0x00050051u, 0x00000008u, 0x000030a3u, 0x000030a0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000030a4u, 0x000030a0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000030a5u, 0x000030a0u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000030a6u, 0x000030a3u, 0x000030a4u, 0x000030a5u, 0x000030a2u, 0x0003003eu, 0x0000308fu, 0x000030a6u, 0x0003003eu, 0x0000306cu, 0x000030a6u, 0x0003003eu, 0x00002473u, 0x000030a6u, 0x000300f7u, 0x000026efu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000026f0u, 0x000026efu, 0x000200f8u, 0x000026f0u, 0x00050050u, 0x0000004du, 0x000026f3u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000026f4u, 0x000026f3u, 0x0003003eu, 0x00005b99u, 0x00002428u, 0x0003003eu, 0x00005b9au, 0x0000242bu, 0x0003003eu, 0x000024dfu, 0x000018feu, 0x0003003eu, 0x000024e0u, 0x000026f4u, 0x00050041u, 0x00000007u, 0x000030b0u, 0x000024e0u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000030b1u, 0x000030b0u, 0x00050084u, 0x00000006u, 0x000030b2u, 0x0000242bu, 0x000030b1u, 0x00050080u, 0x00000006u, 0x000030b3u, 0x00002428u, 0x000030b2u, 0x0003003eu, 0x000030a7u, 0x000030b3u, 0x00050041u, 0x00000007u, 0x000030b4u, 0x000024e0u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000030b5u, 0x000030b4u, 0x00050084u, 0x00000006u, 0x000030b6u, 0x000030b5u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000030b8u, 0x000030b3u, 0x000030b6u, 0x0003003eu, 0x000030a7u, 0x000030b8u, 0x000500c7u, 0x00000006u, 0x000030bau, 0x000030b8u, 0x000006b4u, 0x0003003eu, 0x000030a7u, 0x000030bau, 0x000500c2u, 0x00000006u, 0x000030bcu, 0x000030bau, 0x00000194u, 0x0003003eu, 0x000030a8u, 0x000030bcu, 0x0004003du, 0x00000006u, 0x000030beu, 0x000030b0u, 0x000500c7u, 0x00000006u, 0x000030bfu, 0x000030beu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000030c0u, 0x000030bfu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000030c2u, 0x000030bcu, 0x000030c0u, 0x0003003eu, 0x000030a8u, 0x000030c2u, 0x000500c6u, 0x00000006u, 0x000030c4u, 0x000030c2u, 0x0000032au, 0x0003003eu, 0x000030a8u, 0x000030c4u, 0x00080041u, 0x000001f2u, 0x000030c7u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000030c4u, 0x0004003du, 0x000001adu, 0x000030c8u, 0x000030c7u, 0x00040071u, 0x00000006u, 0x000030c9u, 0x000030c8u, 0x0003003eu, 0x000030a9u, 0x000030c9u, 0x0003003eu, 0x000030aau, 0x000030c9u, 0x00060050u, 0x000002b6u, 0x000030d0u, 0x000030c9u, 0x000030c9u, 0x000030c9u, 0x000500c2u, 0x000002b6u, 0x000030d1u, 0x000030d0u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000030d3u, 0x000030d1u, 0x0000b1c0u, 0x0003003eu, 0x000030ccu, 0x000030d3u, 0x000500c4u, 0x000002b6u, 0x000030d6u, 0x000030d3u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000030d9u, 0x000030d3u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000030dau, 0x000030d6u, 0x000030d9u, 0x0003003eu, 0x000030ccu, 0x000030dau, 0x000500c7u, 0x00000006u, 0x000030dcu, 0x000030c9u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000030ddu, 0x000030dcu, 0x00000689u, 0x0003003eu, 0x000030cdu, 0x000030ddu, 0x0004007cu, 0x00000052u, 0x000030dfu, 0x000030dau, 0x0004007cu, 0x00000008u, 0x000030e1u, 0x000030ddu, 0x00050051u, 0x00000008u, 0x000030e2u, 0x000030dfu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000030e3u, 0x000030dfu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000030e4u, 0x000030dfu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000030e5u, 0x000030e2u, 0x000030e3u, 0x000030e4u, 0x000030e1u, 0x0003003eu, 0x000030ceu, 0x000030e5u, 0x0003003eu, 0x000030abu, 0x000030e5u, 0x0003003eu, 0x0000247bu, 0x000030e5u, 0x00050050u, 0x0000004du, 0x000026fau, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000026fbu, 0x000026fau, 0x0003003eu, 0x00005b9du, 0x00002428u, 0x0003003eu, 0x00005b9eu, 0x0000242bu, 0x0003003eu, 0x000024e2u, 0x000018feu, 0x0003003eu, 0x000024e3u, 0x000026fbu, 0x00050041u, 0x00000007u, 0x000030efu, 0x000024e3u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000030f0u, 0x000030efu, 0x00050084u, 0x00000006u, 0x000030f1u, 0x0000242bu, 0x000030f0u, 0x00050080u, 0x00000006u, 0x000030f2u, 0x00002428u, 0x000030f1u, 0x0003003eu, 0x000030e6u, 0x000030f2u, 0x00050041u, 0x00000007u, 0x000030f3u, 0x000024e3u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000030f4u, 0x000030f3u, 0x00050084u, 0x00000006u, 0x000030f5u, 0x000030f4u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000030f7u, 0x000030f2u, 0x000030f5u, 0x0003003eu, 0x000030e6u, 0x000030f7u, 0x000500c7u, 0x00000006u, 0x000030f9u, 0x000030f7u, 0x000006b4u, 0x0003003eu, 0x000030e6u, 0x000030f9u, 0x000500c2u, 0x00000006u, 0x000030fbu, 0x000030f9u, 0x00000194u, 0x0003003eu, 0x000030e7u, 0x000030fbu, 0x0004003du, 0x00000006u, 0x000030fdu, 0x000030efu, 0x000500c7u, 0x00000006u, 0x000030feu, 0x000030fdu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000030ffu, 0x000030feu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003101u, 0x000030fbu, 0x000030ffu, 0x0003003eu, 0x000030e7u, 0x00003101u, 0x000500c6u, 0x00000006u, 0x00003103u, 0x00003101u, 0x0000032au, 0x0003003eu, 0x000030e7u, 0x00003103u, 0x00080041u, 0x000001f2u, 0x00003106u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003103u, 0x0004003du, 0x000001adu, 0x00003107u, 0x00003106u, 0x00040071u, 0x00000006u, 0x00003108u, 0x00003107u, 0x0003003eu, 0x000030e8u, 0x00003108u, 0x0003003eu, 0x000030e9u, 0x00003108u, 0x00060050u, 0x000002b6u, 0x0000310fu, 0x00003108u, 0x00003108u, 0x00003108u, 0x000500c2u, 0x000002b6u, 0x00003110u, 0x0000310fu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00003112u, 0x00003110u, 0x0000b1c0u, 0x0003003eu, 0x0000310bu, 0x00003112u, 0x000500c4u, 0x000002b6u, 0x00003115u, 0x00003112u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00003118u, 0x00003112u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00003119u, 0x00003115u, 0x00003118u, 0x0003003eu, 0x0000310bu, 0x00003119u, 0x000500c7u, 0x00000006u, 0x0000311bu, 0x00003108u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000311cu, 0x0000311bu, 0x00000689u, 0x0003003eu, 0x0000310cu, 0x0000311cu, 0x0004007cu, 0x00000052u, 0x0000311eu, 0x00003119u, 0x0004007cu, 0x00000008u, 0x00003120u, 0x0000311cu, 0x00050051u, 0x00000008u, 0x00003121u, 0x0000311eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003122u, 0x0000311eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003123u, 0x0000311eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003124u, 0x00003121u, 0x00003122u, 0x00003123u, 0x00003120u, 0x0003003eu, 0x0000310du, 0x00003124u, 0x0003003eu, 0x000030eau, 0x00003124u, 0x0003003eu, 0x00002483u, 0x00003124u, 0x000200f9u, 0x000026efu, 0x000200f8u, 0x000026efu, 0x000700f5u, 0x00000009u, 0x000073deu, 0x000072a9u, 0x000026a7u, 0x00003124u, 0x000026f0u, 0x000700f5u, 0x00000009u, 0x000072ecu, 0x000072a9u, 0x000026a7u, 0x000030e5u, 0x000026f0u, 0x000300f7u, 0x00002700u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002701u, 0x00002700u, 0x000200f8u, 0x00002701u, 0x00050050u, 0x0000004du, 0x00002704u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002705u, 0x00002704u, 0x0003003eu, 0x00005ba1u, 0x00002428u, 0x0003003eu, 0x00005ba2u, 0x0000242bu, 0x0003003eu, 0x000024e5u, 0x000018feu, 0x0003003eu, 0x000024e6u, 0x00002705u, 0x00050041u, 0x00000007u, 0x0000312eu, 0x000024e6u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000312fu, 0x0000312eu, 0x00050084u, 0x00000006u, 0x00003130u, 0x0000242bu, 0x0000312fu, 0x00050080u, 0x00000006u, 0x00003131u, 0x00002428u, 0x00003130u, 0x0003003eu, 0x00003125u, 0x00003131u, 0x00050041u, 0x00000007u, 0x00003132u, 0x000024e6u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003133u, 0x00003132u, 0x00050084u, 0x00000006u, 0x00003134u, 0x00003133u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00003136u, 0x00003131u, 0x00003134u, 0x0003003eu, 0x00003125u, 0x00003136u, 0x000500c7u, 0x00000006u, 0x00003138u, 0x00003136u, 0x000006b4u, 0x0003003eu, 0x00003125u, 0x00003138u, 0x000500c2u, 0x00000006u, 0x0000313au, 0x00003138u, 0x00000194u, 0x0003003eu, 0x00003126u, 0x0000313au, 0x0004003du, 0x00000006u, 0x0000313cu, 0x0000312eu, 0x000500c7u, 0x00000006u, 0x0000313du, 0x0000313cu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000313eu, 0x0000313du, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00003140u, 0x0000313au, 0x0000313eu, 0x0003003eu, 0x00003126u, 0x00003140u, 0x000500c6u, 0x00000006u, 0x00003142u, 0x00003140u, 0x0000032au, 0x0003003eu, 0x00003126u, 0x00003142u, 0x00080041u, 0x000001f2u, 0x00003145u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003142u, 0x0004003du, 0x000001adu, 0x00003146u, 0x00003145u, 0x00040071u, 0x00000006u, 0x00003147u, 0x00003146u, 0x0003003eu, 0x00003127u, 0x00003147u, 0x0003003eu, 0x00003128u, 0x00003147u, 0x00060050u, 0x000002b6u, 0x0000314eu, 0x00003147u, 0x00003147u, 0x00003147u, 0x000500c2u, 0x000002b6u, 0x0000314fu, 0x0000314eu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00003151u, 0x0000314fu, 0x0000b1c0u, 0x0003003eu, 0x0000314au, 0x00003151u, 0x000500c4u, 0x000002b6u, 0x00003154u, 0x00003151u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00003157u, 0x00003151u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00003158u, 0x00003154u, 0x00003157u, 0x0003003eu, 0x0000314au, 0x00003158u, 0x000500c7u, 0x00000006u, 0x0000315au, 0x00003147u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000315bu, 0x0000315au, 0x00000689u, 0x0003003eu, 0x0000314bu, 0x0000315bu, 0x0004007cu, 0x00000052u, 0x0000315du, 0x00003158u, 0x0004007cu, 0x00000008u, 0x0000315fu, 0x0000315bu, 0x00050051u, 0x00000008u, 0x00003160u, 0x0000315du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003161u, 0x0000315du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003162u, 0x0000315du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00003163u, 0x00003160u, 0x00003161u, 0x00003162u, 0x0000315fu, 0x0003003eu, 0x0000314cu, 0x00003163u, 0x0003003eu, 0x00003129u, 0x00003163u, 0x0003003eu, 0x0000248bu, 0x00003163u, 0x000200f9u, 0x00002700u, 0x000200f8u, 0x00002700u, 0x000700f5u, 0x00000009u, 0x00007457u, 0x000072a9u, 0x000026efu, 0x00003163u, 0x00002701u, 0x000200f9u, 0x000026a4u, 0x000200f8u, 0x000026a6u, 0x0004007cu, 0x000000a0u, 0x000026cau, 0x00006f1du, 0x0003003eu, 0x00005b85u, 0x00002428u, 0x0003003eu, 0x00005b86u, 0x0000242bu, 0x0003003eu, 0x000024d0u, 0x000018feu, 0x0003003eu, 0x000024d1u, 0x000026cau, 0x00050041u, 0x00000007u, 0x00002fe4u, 0x000024d1u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002fe5u, 0x00002fe4u, 0x00050084u, 0x00000006u, 0x00002fe6u, 0x0000242bu, 0x00002fe5u, 0x00050080u, 0x00000006u, 0x00002fe7u, 0x00002428u, 0x00002fe6u, 0x0003003eu, 0x00002fdcu, 0x00002fe7u, 0x00050041u, 0x00000007u, 0x00002fe8u, 0x000024d1u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002fe9u, 0x00002fe8u, 0x00050080u, 0x00000006u, 0x00002febu, 0x00002fe7u, 0x00002fe9u, 0x0003003eu, 0x00002fdcu, 0x00002febu, 0x000500c7u, 0x00000006u, 0x00002fedu, 0x00002febu, 0x000006b4u, 0x0003003eu, 0x00002fdcu, 0x00002fedu, 0x0003003eu, 0x00002fddu, 0x00002fedu, 0x0004003du, 0x00000006u, 0x00002ff0u, 0x00002fe4u, 0x000500c7u, 0x00000006u, 0x00002ff1u, 0x00002ff0u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002ff2u, 0x00002ff1u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002ff4u, 0x00002fedu, 0x00002ff2u, 0x0003003eu, 0x00002fddu, 0x00002ff4u, 0x000500c6u, 0x00000006u, 0x00002ff6u, 0x00002ff4u, 0x00000331u, 0x0003003eu, 0x00002fddu, 0x00002ff6u, 0x00080041u, 0x000001f9u, 0x00002ff9u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002ff6u, 0x0004003du, 0x000001abu, 0x00002ffau, 0x00002ff9u, 0x00040071u, 0x00000006u, 0x00002ffbu, 0x00002ffau, 0x0003003eu, 0x00002fdeu, 0x00002ffbu, 0x0004007cu, 0x00000008u, 0x00002ffdu, 0x00002ffbu, 0x00070050u, 0x00000009u, 0x00002ffeu, 0x00002ffdu, 0x00002ffdu, 0x00002ffdu, 0x00002ffdu, 0x0003003eu, 0x00002fdfu, 0x00002ffeu, 0x0003003eu, 0x00002473u, 0x00002ffeu, 0x000300f7u, 0x000026cfu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000026d0u, 0x000026cfu, 0x000200f8u, 0x000026d0u, 0x00050050u, 0x0000004du, 0x000026d3u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000026d4u, 0x000026d3u, 0x0003003eu, 0x00005b89u, 0x00002428u, 0x0003003eu, 0x00005b8au, 0x0000242bu, 0x0003003eu, 0x000024d3u, 0x000018feu, 0x0003003eu, 0x000024d4u, 0x000026d4u, 0x00050041u, 0x00000007u, 0x00003007u, 0x000024d4u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00003008u, 0x00003007u, 0x00050084u, 0x00000006u, 0x00003009u, 0x0000242bu, 0x00003008u, 0x00050080u, 0x00000006u, 0x0000300au, 0x00002428u, 0x00003009u, 0x0003003eu, 0x00002fffu, 0x0000300au, 0x00050041u, 0x00000007u, 0x0000300bu, 0x000024d4u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000300cu, 0x0000300bu, 0x00050080u, 0x00000006u, 0x0000300eu, 0x0000300au, 0x0000300cu, 0x0003003eu, 0x00002fffu, 0x0000300eu, 0x000500c7u, 0x00000006u, 0x00003010u, 0x0000300eu, 0x000006b4u, 0x0003003eu, 0x00002fffu, 0x00003010u, 0x0003003eu, 0x00003000u, 0x00003010u, 0x0004003du, 0x00000006u, 0x00003013u, 0x00003007u, 0x000500c7u, 0x00000006u, 0x00003014u, 0x00003013u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003015u, 0x00003014u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00003017u, 0x00003010u, 0x00003015u, 0x0003003eu, 0x00003000u, 0x00003017u, 0x000500c6u, 0x00000006u, 0x00003019u, 0x00003017u, 0x00000331u, 0x0003003eu, 0x00003000u, 0x00003019u, 0x00080041u, 0x000001f9u, 0x0000301cu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00003019u, 0x0004003du, 0x000001abu, 0x0000301du, 0x0000301cu, 0x00040071u, 0x00000006u, 0x0000301eu, 0x0000301du, 0x0003003eu, 0x00003001u, 0x0000301eu, 0x0004007cu, 0x00000008u, 0x00003020u, 0x0000301eu, 0x00070050u, 0x00000009u, 0x00003021u, 0x00003020u, 0x00003020u, 0x00003020u, 0x00003020u, 0x0003003eu, 0x00003002u, 0x00003021u, 0x0003003eu, 0x0000247bu, 0x00003021u, 0x00050050u, 0x0000004du, 0x000026dau, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000026dbu, 0x000026dau, 0x0003003eu, 0x00005b8du, 0x00002428u, 0x0003003eu, 0x00005b8eu, 0x0000242bu, 0x0003003eu, 0x000024d6u, 0x000018feu, 0x0003003eu, 0x000024d7u, 0x000026dbu, 0x00050041u, 0x00000007u, 0x0000302au, 0x000024d7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000302bu, 0x0000302au, 0x00050084u, 0x00000006u, 0x0000302cu, 0x0000242bu, 0x0000302bu, 0x00050080u, 0x00000006u, 0x0000302du, 0x00002428u, 0x0000302cu, 0x0003003eu, 0x00003022u, 0x0000302du, 0x00050041u, 0x00000007u, 0x0000302eu, 0x000024d7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000302fu, 0x0000302eu, 0x00050080u, 0x00000006u, 0x00003031u, 0x0000302du, 0x0000302fu, 0x0003003eu, 0x00003022u, 0x00003031u, 0x000500c7u, 0x00000006u, 0x00003033u, 0x00003031u, 0x000006b4u, 0x0003003eu, 0x00003022u, 0x00003033u, 0x0003003eu, 0x00003023u, 0x00003033u, 0x0004003du, 0x00000006u, 0x00003036u, 0x0000302au, 0x000500c7u, 0x00000006u, 0x00003037u, 0x00003036u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00003038u, 0x00003037u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000303au, 0x00003033u, 0x00003038u, 0x0003003eu, 0x00003023u, 0x0000303au, 0x000500c6u, 0x00000006u, 0x0000303cu, 0x0000303au, 0x00000331u, 0x0003003eu, 0x00003023u, 0x0000303cu, 0x00080041u, 0x000001f9u, 0x0000303fu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000303cu, 0x0004003du, 0x000001abu, 0x00003040u, 0x0000303fu, 0x00040071u, 0x00000006u, 0x00003041u, 0x00003040u, 0x0003003eu, 0x00003024u, 0x00003041u, 0x0004007cu, 0x00000008u, 0x00003043u, 0x00003041u, 0x00070050u, 0x00000009u, 0x00003044u, 0x00003043u, 0x00003043u, 0x00003043u, 0x00003043u, 0x0003003eu, 0x00003025u, 0x00003044u, 0x0003003eu, 0x00002483u, 0x00003044u, 0x000200f9u, 0x000026cfu, 0x000200f8u, 0x000026cfu, 0x000700f5u, 0x00000009u, 0x000073dcu, 0x000072a9u, 0x000026a6u, 0x00003044u, 0x000026d0u, 0x000700f5u, 0x00000009u, 0x000072eau, 0x000072a9u, 0x000026a6u, 0x00003021u, 0x000026d0u, 0x000300f7u, 0x000026e0u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x000026e1u, 0x000026e0u, 0x000200f8u, 0x000026e1u, 0x00050050u, 0x0000004du, 0x000026e4u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000026e5u, 0x000026e4u, 0x0003003eu, 0x00005b91u, 0x00002428u, 0x0003003eu, 0x00005b92u, 0x0000242bu, 0x0003003eu, 0x000024d9u, 0x000018feu, 0x0003003eu, 0x000024dau, 0x000026e5u, 0x00050041u, 0x00000007u, 0x0000304du, 0x000024dau, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000304eu, 0x0000304du, 0x00050084u, 0x00000006u, 0x0000304fu, 0x0000242bu, 0x0000304eu, 0x00050080u, 0x00000006u, 0x00003050u, 0x00002428u, 0x0000304fu, 0x0003003eu, 0x00003045u, 0x00003050u, 0x00050041u, 0x00000007u, 0x00003051u, 0x000024dau, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00003052u, 0x00003051u, 0x00050080u, 0x00000006u, 0x00003054u, 0x00003050u, 0x00003052u, 0x0003003eu, 0x00003045u, 0x00003054u, 0x000500c7u, 0x00000006u, 0x00003056u, 0x00003054u, 0x000006b4u, 0x0003003eu, 0x00003045u, 0x00003056u, 0x0003003eu, 0x00003046u, 0x00003056u, 0x0004003du, 0x00000006u, 0x00003059u, 0x0000304du, 0x000500c7u, 0x00000006u, 0x0000305au, 0x00003059u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000305bu, 0x0000305au, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000305du, 0x00003056u, 0x0000305bu, 0x0003003eu, 0x00003046u, 0x0000305du, 0x000500c6u, 0x00000006u, 0x0000305fu, 0x0000305du, 0x00000331u, 0x0003003eu, 0x00003046u, 0x0000305fu, 0x00080041u, 0x000001f9u, 0x00003062u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000305fu, 0x0004003du, 0x000001abu, 0x00003063u, 0x00003062u, 0x00040071u, 0x00000006u, 0x00003064u, 0x00003063u, 0x0003003eu, 0x00003047u, 0x00003064u, 0x0004007cu, 0x00000008u, 0x00003066u, 0x00003064u, 0x00070050u, 0x00000009u, 0x00003067u, 0x00003066u, 0x00003066u, 0x00003066u, 0x00003066u, 0x0003003eu, 0x00003048u, 0x00003067u, 0x0003003eu, 0x0000248bu, 0x00003067u, 0x000200f9u, 0x000026e0u, 0x000200f8u, 0x000026e0u, 0x000700f5u, 0x00000009u, 0x00007455u, 0x000072a9u, 0x000026cfu, 0x00003067u, 0x000026e1u, 0x000200f9u, 0x000026a4u, 0x000200f8u, 0x000026a5u, 0x0004007cu, 0x000000a0u, 0x000026aau, 0x00006f1du, 0x0003003eu, 0x00005b75u, 0x00002428u, 0x0003003eu, 0x00005b76u, 0x0000242bu, 0x0003003eu, 0x000024c4u, 0x000018feu, 0x0003003eu, 0x000024c5u, 0x000026aau, 0x00050041u, 0x00000007u, 0x00002f1du, 0x000024c5u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002f1eu, 0x00002f1du, 0x00050084u, 0x00000006u, 0x00002f1fu, 0x0000242bu, 0x00002f1eu, 0x00050080u, 0x00000006u, 0x00002f20u, 0x00002428u, 0x00002f1fu, 0x0003003eu, 0x00002f14u, 0x00002f20u, 0x00050041u, 0x00000007u, 0x00002f21u, 0x000024c5u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002f22u, 0x00002f21u, 0x000500c2u, 0x00000006u, 0x00002f23u, 0x00002f22u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002f25u, 0x00002f20u, 0x00002f23u, 0x0003003eu, 0x00002f14u, 0x00002f25u, 0x000500c7u, 0x00000006u, 0x00002f27u, 0x00002f25u, 0x000006b4u, 0x0003003eu, 0x00002f14u, 0x00002f27u, 0x0004003du, 0x00000006u, 0x00002f29u, 0x00002f21u, 0x000400c8u, 0x00000006u, 0x00002f2au, 0x00002f29u, 0x000500c7u, 0x00000006u, 0x00002f2bu, 0x00002f2au, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002f2cu, 0x00002f2bu, 0x000006bcu, 0x0003003eu, 0x00002f15u, 0x00002f2cu, 0x0003003eu, 0x00002f16u, 0x00002f27u, 0x0004003du, 0x00000006u, 0x00002f2fu, 0x00002f1du, 0x000500c7u, 0x00000006u, 0x00002f30u, 0x00002f2fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002f31u, 0x00002f30u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002f33u, 0x00002f27u, 0x00002f31u, 0x0003003eu, 0x00002f16u, 0x00002f33u, 0x000500c6u, 0x00000006u, 0x00002f35u, 0x00002f33u, 0x00000331u, 0x0003003eu, 0x00002f16u, 0x00002f35u, 0x00080041u, 0x000001f9u, 0x00002f38u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002f35u, 0x0004003du, 0x000001abu, 0x00002f39u, 0x00002f38u, 0x00040071u, 0x00000006u, 0x00002f3au, 0x00002f39u, 0x0003003eu, 0x00002f17u, 0x00002f3au, 0x000500c2u, 0x00000006u, 0x00002f3du, 0x00002f3au, 0x00002f2cu, 0x000500c7u, 0x00000006u, 0x00002f3eu, 0x00002f3du, 0x000006d8u, 0x0003003eu, 0x00002f17u, 0x00002f3eu, 0x000500c4u, 0x00000006u, 0x00002f40u, 0x00002f3eu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00002f42u, 0x00002f3eu, 0x00002f40u, 0x0003003eu, 0x00002f17u, 0x00002f42u, 0x0004007cu, 0x00000008u, 0x00002f44u, 0x00002f42u, 0x00070050u, 0x00000009u, 0x00002f45u, 0x00002f44u, 0x00002f44u, 0x00002f44u, 0x00002f44u, 0x0003003eu, 0x00002f18u, 0x00002f45u, 0x0003003eu, 0x00002473u, 0x00002f45u, 0x000300f7u, 0x000026afu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000026b0u, 0x000026afu, 0x000200f8u, 0x000026b0u, 0x00050050u, 0x0000004du, 0x000026b3u, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x000026b4u, 0x000026b3u, 0x0003003eu, 0x00005b79u, 0x00002428u, 0x0003003eu, 0x00005b7au, 0x0000242bu, 0x0003003eu, 0x000024c7u, 0x000018feu, 0x0003003eu, 0x000024c8u, 0x000026b4u, 0x00050041u, 0x00000007u, 0x00002f4fu, 0x000024c8u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002f50u, 0x00002f4fu, 0x00050084u, 0x00000006u, 0x00002f51u, 0x0000242bu, 0x00002f50u, 0x00050080u, 0x00000006u, 0x00002f52u, 0x00002428u, 0x00002f51u, 0x0003003eu, 0x00002f46u, 0x00002f52u, 0x00050041u, 0x00000007u, 0x00002f53u, 0x000024c8u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002f54u, 0x00002f53u, 0x000500c2u, 0x00000006u, 0x00002f55u, 0x00002f54u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002f57u, 0x00002f52u, 0x00002f55u, 0x0003003eu, 0x00002f46u, 0x00002f57u, 0x000500c7u, 0x00000006u, 0x00002f59u, 0x00002f57u, 0x000006b4u, 0x0003003eu, 0x00002f46u, 0x00002f59u, 0x0004003du, 0x00000006u, 0x00002f5bu, 0x00002f53u, 0x000400c8u, 0x00000006u, 0x00002f5cu, 0x00002f5bu, 0x000500c7u, 0x00000006u, 0x00002f5du, 0x00002f5cu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002f5eu, 0x00002f5du, 0x000006bcu, 0x0003003eu, 0x00002f47u, 0x00002f5eu, 0x0003003eu, 0x00002f48u, 0x00002f59u, 0x0004003du, 0x00000006u, 0x00002f61u, 0x00002f4fu, 0x000500c7u, 0x00000006u, 0x00002f62u, 0x00002f61u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002f63u, 0x00002f62u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002f65u, 0x00002f59u, 0x00002f63u, 0x0003003eu, 0x00002f48u, 0x00002f65u, 0x000500c6u, 0x00000006u, 0x00002f67u, 0x00002f65u, 0x00000331u, 0x0003003eu, 0x00002f48u, 0x00002f67u, 0x00080041u, 0x000001f9u, 0x00002f6au, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002f67u, 0x0004003du, 0x000001abu, 0x00002f6bu, 0x00002f6au, 0x00040071u, 0x00000006u, 0x00002f6cu, 0x00002f6bu, 0x0003003eu, 0x00002f49u, 0x00002f6cu, 0x000500c2u, 0x00000006u, 0x00002f6fu, 0x00002f6cu, 0x00002f5eu, 0x000500c7u, 0x00000006u, 0x00002f70u, 0x00002f6fu, 0x000006d8u, 0x0003003eu, 0x00002f49u, 0x00002f70u, 0x000500c4u, 0x00000006u, 0x00002f72u, 0x00002f70u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00002f74u, 0x00002f70u, 0x00002f72u, 0x0003003eu, 0x00002f49u, 0x00002f74u, 0x0004007cu, 0x00000008u, 0x00002f76u, 0x00002f74u, 0x00070050u, 0x00000009u, 0x00002f77u, 0x00002f76u, 0x00002f76u, 0x00002f76u, 0x00002f76u, 0x0003003eu, 0x00002f4au, 0x00002f77u, 0x0003003eu, 0x0000247bu, 0x00002f77u, 0x00050050u, 0x0000004du, 0x000026bau, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000026bbu, 0x000026bau, 0x0003003eu, 0x00005b7du, 0x00002428u, 0x0003003eu, 0x00005b7eu, 0x0000242bu, 0x0003003eu, 0x000024cau, 0x000018feu, 0x0003003eu, 0x000024cbu, 0x000026bbu, 0x00050041u, 0x00000007u, 0x00002f81u, 0x000024cbu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002f82u, 0x00002f81u, 0x00050084u, 0x00000006u, 0x00002f83u, 0x0000242bu, 0x00002f82u, 0x00050080u, 0x00000006u, 0x00002f84u, 0x00002428u, 0x00002f83u, 0x0003003eu, 0x00002f78u, 0x00002f84u, 0x00050041u, 0x00000007u, 0x00002f85u, 0x000024cbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002f86u, 0x00002f85u, 0x000500c2u, 0x00000006u, 0x00002f87u, 0x00002f86u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002f89u, 0x00002f84u, 0x00002f87u, 0x0003003eu, 0x00002f78u, 0x00002f89u, 0x000500c7u, 0x00000006u, 0x00002f8bu, 0x00002f89u, 0x000006b4u, 0x0003003eu, 0x00002f78u, 0x00002f8bu, 0x0004003du, 0x00000006u, 0x00002f8du, 0x00002f85u, 0x000400c8u, 0x00000006u, 0x00002f8eu, 0x00002f8du, 0x000500c7u, 0x00000006u, 0x00002f8fu, 0x00002f8eu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002f90u, 0x00002f8fu, 0x000006bcu, 0x0003003eu, 0x00002f79u, 0x00002f90u, 0x0003003eu, 0x00002f7au, 0x00002f8bu, 0x0004003du, 0x00000006u, 0x00002f93u, 0x00002f81u, 0x000500c7u, 0x00000006u, 0x00002f94u, 0x00002f93u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002f95u, 0x00002f94u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002f97u, 0x00002f8bu, 0x00002f95u, 0x0003003eu, 0x00002f7au, 0x00002f97u, 0x000500c6u, 0x00000006u, 0x00002f99u, 0x00002f97u, 0x00000331u, 0x0003003eu, 0x00002f7au, 0x00002f99u, 0x00080041u, 0x000001f9u, 0x00002f9cu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002f99u, 0x0004003du, 0x000001abu, 0x00002f9du, 0x00002f9cu, 0x00040071u, 0x00000006u, 0x00002f9eu, 0x00002f9du, 0x0003003eu, 0x00002f7bu, 0x00002f9eu, 0x000500c2u, 0x00000006u, 0x00002fa1u, 0x00002f9eu, 0x00002f90u, 0x000500c7u, 0x00000006u, 0x00002fa2u, 0x00002fa1u, 0x000006d8u, 0x0003003eu, 0x00002f7bu, 0x00002fa2u, 0x000500c4u, 0x00000006u, 0x00002fa4u, 0x00002fa2u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00002fa6u, 0x00002fa2u, 0x00002fa4u, 0x0003003eu, 0x00002f7bu, 0x00002fa6u, 0x0004007cu, 0x00000008u, 0x00002fa8u, 0x00002fa6u, 0x00070050u, 0x00000009u, 0x00002fa9u, 0x00002fa8u, 0x00002fa8u, 0x00002fa8u, 0x00002fa8u, 0x0003003eu, 0x00002f7cu, 0x00002fa9u, 0x0003003eu, 0x00002483u, 0x00002fa9u, 0x000200f9u, 0x000026afu, 0x000200f8u, 0x000026afu, 0x000700f5u, 0x00000009u, 0x000073dau, 0x000072a9u, 0x000026a5u, 0x00002fa9u, 0x000026b0u, 0x000700f5u, 0x00000009u, 0x000072e8u, 0x000072a9u, 0x000026a5u, 0x00002f77u, 0x000026b0u, 0x000300f7u, 0x000026c0u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x000026c1u, 0x000026c0u, 0x000200f8u, 0x000026c1u, 0x00050050u, 0x0000004du, 0x000026c4u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x000026c5u, 0x000026c4u, 0x0003003eu, 0x00005b81u, 0x00002428u, 0x0003003eu, 0x00005b82u, 0x0000242bu, 0x0003003eu, 0x000024cdu, 0x000018feu, 0x0003003eu, 0x000024ceu, 0x000026c5u, 0x00050041u, 0x00000007u, 0x00002fb3u, 0x000024ceu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002fb4u, 0x00002fb3u, 0x00050084u, 0x00000006u, 0x00002fb5u, 0x0000242bu, 0x00002fb4u, 0x00050080u, 0x00000006u, 0x00002fb6u, 0x00002428u, 0x00002fb5u, 0x0003003eu, 0x00002faau, 0x00002fb6u, 0x00050041u, 0x00000007u, 0x00002fb7u, 0x000024ceu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002fb8u, 0x00002fb7u, 0x000500c2u, 0x00000006u, 0x00002fb9u, 0x00002fb8u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002fbbu, 0x00002fb6u, 0x00002fb9u, 0x0003003eu, 0x00002faau, 0x00002fbbu, 0x000500c7u, 0x00000006u, 0x00002fbdu, 0x00002fbbu, 0x000006b4u, 0x0003003eu, 0x00002faau, 0x00002fbdu, 0x0004003du, 0x00000006u, 0x00002fbfu, 0x00002fb7u, 0x000400c8u, 0x00000006u, 0x00002fc0u, 0x00002fbfu, 0x000500c7u, 0x00000006u, 0x00002fc1u, 0x00002fc0u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002fc2u, 0x00002fc1u, 0x000006bcu, 0x0003003eu, 0x00002fabu, 0x00002fc2u, 0x0003003eu, 0x00002facu, 0x00002fbdu, 0x0004003du, 0x00000006u, 0x00002fc5u, 0x00002fb3u, 0x000500c7u, 0x00000006u, 0x00002fc6u, 0x00002fc5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002fc7u, 0x00002fc6u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002fc9u, 0x00002fbdu, 0x00002fc7u, 0x0003003eu, 0x00002facu, 0x00002fc9u, 0x000500c6u, 0x00000006u, 0x00002fcbu, 0x00002fc9u, 0x00000331u, 0x0003003eu, 0x00002facu, 0x00002fcbu, 0x00080041u, 0x000001f9u, 0x00002fceu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002fcbu, 0x0004003du, 0x000001abu, 0x00002fcfu, 0x00002fceu, 0x00040071u, 0x00000006u, 0x00002fd0u, 0x00002fcfu, 0x0003003eu, 0x00002fadu, 0x00002fd0u, 0x000500c2u, 0x00000006u, 0x00002fd3u, 0x00002fd0u, 0x00002fc2u, 0x000500c7u, 0x00000006u, 0x00002fd4u, 0x00002fd3u, 0x000006d8u, 0x0003003eu, 0x00002fadu, 0x00002fd4u, 0x000500c4u, 0x00000006u, 0x00002fd6u, 0x00002fd4u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00002fd8u, 0x00002fd4u, 0x00002fd6u, 0x0003003eu, 0x00002fadu, 0x00002fd8u, 0x0004007cu, 0x00000008u, 0x00002fdau, 0x00002fd8u, 0x00070050u, 0x00000009u, 0x00002fdbu, 0x00002fdau, 0x00002fdau, 0x00002fdau, 0x00002fdau, 0x0003003eu, 0x00002faeu, 0x00002fdbu, 0x0003003eu, 0x0000248bu, 0x00002fdbu, 0x000200f9u, 0x000026c0u, 0x000200f8u, 0x000026c0u, 0x000700f5u, 0x00000009u, 0x00007453u, 0x000072a9u, 0x000026afu, 0x00002fdbu, 0x000026c1u, 0x000200f9u, 0x000026a4u, 0x000200f8u, 0x000026a4u, 0x000d00f5u, 0x00000009u, 0x00007452u, 0x000072a9u, 0x0000269du, 0x00007453u, 0x000026c0u, 0x00007455u, 0x000026e0u, 0x00007457u, 0x00002700u, 0x00007459u, 0x00002720u, 0x000d00f5u, 0x00000009u, 0x000073d8u, 0x000072a9u, 0x0000269du, 0x000073dau, 0x000026c0u, 0x000073dcu, 0x000026e0u, 0x000073deu, 0x00002700u, 0x000073e0u, 0x00002720u, 0x000d00f5u, 0x00000009u, 0x00007360u, 0x000072a9u, 0x0000269du, 0x00002f45u, 0x000026c0u, 0x00002ffeu, 0x000026e0u, 0x000030a6u, 0x00002700u, 0x00003199u, 0x00002720u, 0x000d00f5u, 0x00000009u, 0x000072e6u, 0x000072a9u, 0x0000269du, 0x000072e8u, 0x000026c0u, 0x000072eau, 0x000026e0u, 0x000072ecu, 0x00002700u, 0x000072eeu, 0x00002720u, 0x000200f9u, 0x0000269cu, 0x000200f8u, 0x0000269cu, 0x000f00f5u, 0x00000009u, 0x00007451u, 0x000072a9u, 0x000025fdu, 0x00007452u, 0x000026a4u, 0x0000745bu, 0x0000273cu, 0x0000745cu, 0x00002758u, 0x00007463u, 0x000027cau, 0x0000746cu, 0x00002851u, 0x000f00f5u, 0x00000009u, 0x000073d7u, 0x000072a9u, 0x000025fdu, 0x000073d8u, 0x000026a4u, 0x000073e1u, 0x0000273cu, 0x000073e2u, 0x00002758u, 0x000073e9u, 0x000027cau, 0x000073f2u, 0x00002851u, 0x000f00f5u, 0x00000009u, 0x0000735fu, 0x000072a9u, 0x000025fdu, 0x00007360u, 0x000026a4u, 0x00003286u, 0x0000273cu, 0x0000736au, 0x00002758u, 0x00007371u, 0x000027cau, 0x0000737au, 0x00002851u, 0x000f00f5u, 0x00000009u, 0x000072e5u, 0x000072a9u, 0x000025fdu, 0x000072e6u, 0x000026a4u, 0x000072efu, 0x0000273cu, 0x000072f0u, 0x00002758u, 0x000072f7u, 0x000027cau, 0x00007300u, 0x00002851u, 0x000200f9u, 0x000025fbu, 0x000200f8u, 0x000025fcu, 0x000300f7u, 0x00002600u, 0x00000000u, 0x000b00fbu, 0x0000b1dcu, 0x00002600u, 0x00000000u, 0x00002601u, 0x00000002u, 0x00002601u, 0x00000003u, 0x00002601u, 0x00000004u, 0x00002601u, 0x000200f8u, 0x00002601u, 0x0003003eu, 0x00002471u, 0x000025efu, 0x000600a9u, 0x00000008u, 0x00002605u, 0x000025efu, 0x00000197u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00002606u, 0x00002605u, 0x0003003eu, 0x00002472u, 0x00002606u, 0x000300f7u, 0x00002609u, 0x00000000u, 0x000700fbu, 0x0000b1ddu, 0x0000260au, 0x00000000u, 0x0000260bu, 0x00000001u, 0x0000260cu, 0x000200f8u, 0x0000260cu, 0x0004007cu, 0x000000a0u, 0x00002670u, 0x00006f1du, 0x000600a9u, 0x00000008u, 0x00002672u, 0x000025efu, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00002673u, 0x00002672u, 0x0003003eu, 0x00005b55u, 0x00002428u, 0x0003003eu, 0x00005b56u, 0x0000242bu, 0x0003003eu, 0x00002494u, 0x000018feu, 0x0003003eu, 0x00002495u, 0x00002670u, 0x0003003eu, 0x00002496u, 0x00002673u, 0x0003003eu, 0x00002497u, 0x00002606u, 0x0003003eu, 0x00002498u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002d90u, 0x00002495u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002d91u, 0x00002d90u, 0x00050084u, 0x00000006u, 0x00002d92u, 0x0000242bu, 0x00002d91u, 0x00050080u, 0x00000006u, 0x00002d93u, 0x00002428u, 0x00002d92u, 0x0003003eu, 0x00002d84u, 0x00002d93u, 0x00050041u, 0x00000007u, 0x00002d94u, 0x00002495u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002d95u, 0x00002d94u, 0x00050080u, 0x00000006u, 0x00002d97u, 0x00002d93u, 0x00002d95u, 0x0003003eu, 0x00002d84u, 0x00002d97u, 0x000500c7u, 0x00000006u, 0x00002d99u, 0x00002d97u, 0x00000767u, 0x0003003eu, 0x00002d84u, 0x00002d99u, 0x0003003eu, 0x00002d85u, 0x00002d99u, 0x0004003du, 0x00000006u, 0x00002d9cu, 0x00002d90u, 0x000500c7u, 0x00000006u, 0x00002d9du, 0x00002d9cu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002d9eu, 0x00002d9du, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002da0u, 0x00002d99u, 0x00002d9eu, 0x0003003eu, 0x00002d85u, 0x00002da0u, 0x000500c6u, 0x00000006u, 0x00002da2u, 0x00002da0u, 0x00000331u, 0x0003003eu, 0x00002d85u, 0x00002da2u, 0x00080041u, 0x000001f9u, 0x00002da5u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002da2u, 0x0004003du, 0x000001abu, 0x00002da6u, 0x00002da5u, 0x00040071u, 0x00000006u, 0x00002da7u, 0x00002da6u, 0x0003003eu, 0x00002d86u, 0x00002da7u, 0x000500c4u, 0x00000006u, 0x00002da9u, 0x00002da7u, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002dabu, 0x00002da9u, 0x00002673u, 0x0003003eu, 0x00002d87u, 0x00002dabu, 0x000500c6u, 0x00000006u, 0x00002daeu, 0x00002dabu, 0x00002606u, 0x0003003eu, 0x00002d87u, 0x00002daeu, 0x000500c5u, 0x00000006u, 0x00002db1u, 0x00000798u, 0x00002daeu, 0x00080041u, 0x000001f2u, 0x00002db2u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002db1u, 0x0004003du, 0x000001adu, 0x00002db3u, 0x00002db2u, 0x00040071u, 0x00000006u, 0x00002db4u, 0x00002db3u, 0x0003003eu, 0x00002d86u, 0x00002db4u, 0x000300f7u, 0x00002db6u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002db7u, 0x00002db8u, 0x000200f8u, 0x00002db8u, 0x0003003eu, 0x00002d8au, 0x00002db4u, 0x00060050u, 0x000002b6u, 0x00002dd2u, 0x00002db4u, 0x00002db4u, 0x00002db4u, 0x000500c2u, 0x000002b6u, 0x00002dd3u, 0x00002dd2u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002dd5u, 0x00002dd3u, 0x0000b1c0u, 0x0003003eu, 0x00002dceu, 0x00002dd5u, 0x000500c4u, 0x000002b6u, 0x00002dd8u, 0x00002dd5u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002ddbu, 0x00002dd5u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002ddcu, 0x00002dd8u, 0x00002ddbu, 0x0003003eu, 0x00002dceu, 0x00002ddcu, 0x000500c7u, 0x00000006u, 0x00002ddeu, 0x00002db4u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002ddfu, 0x00002ddeu, 0x00000689u, 0x0003003eu, 0x00002dcfu, 0x00002ddfu, 0x0004007cu, 0x00000052u, 0x00002de1u, 0x00002ddcu, 0x0004007cu, 0x00000008u, 0x00002de3u, 0x00002ddfu, 0x00050051u, 0x00000008u, 0x00002de4u, 0x00002de1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002de5u, 0x00002de1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002de6u, 0x00002de1u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002de7u, 0x00002de4u, 0x00002de5u, 0x00002de6u, 0x00002de3u, 0x0003003eu, 0x00002dd0u, 0x00002de7u, 0x0003003eu, 0x00002d88u, 0x00002de7u, 0x000200f9u, 0x00002db6u, 0x000200f8u, 0x00002db7u, 0x0003003eu, 0x00002d89u, 0x00002db4u, 0x000500c2u, 0x00000006u, 0x00002dc2u, 0x00002db4u, 0x000001e0u, 0x0003003eu, 0x00002dbeu, 0x00002dc2u, 0x000500c7u, 0x00000006u, 0x00002dc4u, 0x00002db4u, 0x00000689u, 0x0003003eu, 0x00002dbfu, 0x00002dc4u, 0x0004007cu, 0x00000008u, 0x00002dc6u, 0x00002dc2u, 0x0004007cu, 0x00000008u, 0x00002dccu, 0x00002dc4u, 0x00070050u, 0x00000009u, 0x00002dcdu, 0x00002dc6u, 0x00002dc6u, 0x00002dc6u, 0x00002dccu, 0x0003003eu, 0x00002dc0u, 0x00002dcdu, 0x0003003eu, 0x00002d88u, 0x00002dcdu, 0x000200f9u, 0x00002db6u, 0x000200f8u, 0x00002db6u, 0x000700f5u, 0x00000009u, 0x000070a6u, 0x00002dcdu, 0x00002db7u, 0x00002de7u, 0x00002db8u, 0x0003003eu, 0x00002d8bu, 0x000070a6u, 0x0003003eu, 0x00002473u, 0x000070a6u, 0x000300f7u, 0x0000267au, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000267bu, 0x0000267au, 0x000200f8u, 0x0000267bu, 0x00050050u, 0x0000004du, 0x0000267eu, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x0000267fu, 0x0000267eu, 0x0003003eu, 0x00005b59u, 0x00002428u, 0x0003003eu, 0x00005b5au, 0x0000242bu, 0x0003003eu, 0x0000249au, 0x000018feu, 0x0003003eu, 0x0000249bu, 0x0000267fu, 0x0003003eu, 0x0000249cu, 0x0000032au, 0x0003003eu, 0x0000249du, 0x00002606u, 0x0003003eu, 0x0000249eu, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002df4u, 0x0000249bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002df5u, 0x00002df4u, 0x00050084u, 0x00000006u, 0x00002df6u, 0x0000242bu, 0x00002df5u, 0x00050080u, 0x00000006u, 0x00002df7u, 0x00002428u, 0x00002df6u, 0x0003003eu, 0x00002de8u, 0x00002df7u, 0x00050041u, 0x00000007u, 0x00002df8u, 0x0000249bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002df9u, 0x00002df8u, 0x00050080u, 0x00000006u, 0x00002dfbu, 0x00002df7u, 0x00002df9u, 0x0003003eu, 0x00002de8u, 0x00002dfbu, 0x000500c7u, 0x00000006u, 0x00002dfdu, 0x00002dfbu, 0x00000767u, 0x0003003eu, 0x00002de8u, 0x00002dfdu, 0x0003003eu, 0x00002de9u, 0x00002dfdu, 0x0004003du, 0x00000006u, 0x00002e00u, 0x00002df4u, 0x000500c7u, 0x00000006u, 0x00002e01u, 0x00002e00u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002e02u, 0x00002e01u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002e04u, 0x00002dfdu, 0x00002e02u, 0x0003003eu, 0x00002de9u, 0x00002e04u, 0x000500c6u, 0x00000006u, 0x00002e06u, 0x00002e04u, 0x00000331u, 0x0003003eu, 0x00002de9u, 0x00002e06u, 0x00080041u, 0x000001f9u, 0x00002e09u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002e06u, 0x0004003du, 0x000001abu, 0x00002e0au, 0x00002e09u, 0x00040071u, 0x00000006u, 0x00002e0bu, 0x00002e0au, 0x0003003eu, 0x00002deau, 0x00002e0bu, 0x000500c4u, 0x00000006u, 0x00002e0du, 0x00002e0bu, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002e0fu, 0x00002e0du, 0x0000032au, 0x0003003eu, 0x00002debu, 0x00002e0fu, 0x000500c6u, 0x00000006u, 0x00002e12u, 0x00002e0fu, 0x00002606u, 0x0003003eu, 0x00002debu, 0x00002e12u, 0x000500c5u, 0x00000006u, 0x00002e15u, 0x00000798u, 0x00002e12u, 0x00080041u, 0x000001f2u, 0x00002e16u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002e15u, 0x0004003du, 0x000001adu, 0x00002e17u, 0x00002e16u, 0x00040071u, 0x00000006u, 0x00002e18u, 0x00002e17u, 0x0003003eu, 0x00002deau, 0x00002e18u, 0x000300f7u, 0x00002e1au, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002e1bu, 0x00002e1cu, 0x000200f8u, 0x00002e1cu, 0x0003003eu, 0x00002deeu, 0x00002e18u, 0x00060050u, 0x000002b6u, 0x00002e36u, 0x00002e18u, 0x00002e18u, 0x00002e18u, 0x000500c2u, 0x000002b6u, 0x00002e37u, 0x00002e36u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002e39u, 0x00002e37u, 0x0000b1c0u, 0x0003003eu, 0x00002e32u, 0x00002e39u, 0x000500c4u, 0x000002b6u, 0x00002e3cu, 0x00002e39u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002e3fu, 0x00002e39u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002e40u, 0x00002e3cu, 0x00002e3fu, 0x0003003eu, 0x00002e32u, 0x00002e40u, 0x000500c7u, 0x00000006u, 0x00002e42u, 0x00002e18u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002e43u, 0x00002e42u, 0x00000689u, 0x0003003eu, 0x00002e33u, 0x00002e43u, 0x0004007cu, 0x00000052u, 0x00002e45u, 0x00002e40u, 0x0004007cu, 0x00000008u, 0x00002e47u, 0x00002e43u, 0x00050051u, 0x00000008u, 0x00002e48u, 0x00002e45u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002e49u, 0x00002e45u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002e4au, 0x00002e45u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002e4bu, 0x00002e48u, 0x00002e49u, 0x00002e4au, 0x00002e47u, 0x0003003eu, 0x00002e34u, 0x00002e4bu, 0x0003003eu, 0x00002decu, 0x00002e4bu, 0x000200f9u, 0x00002e1au, 0x000200f8u, 0x00002e1bu, 0x0003003eu, 0x00002dedu, 0x00002e18u, 0x000500c2u, 0x00000006u, 0x00002e26u, 0x00002e18u, 0x000001e0u, 0x0003003eu, 0x00002e22u, 0x00002e26u, 0x000500c7u, 0x00000006u, 0x00002e28u, 0x00002e18u, 0x00000689u, 0x0003003eu, 0x00002e23u, 0x00002e28u, 0x0004007cu, 0x00000008u, 0x00002e2au, 0x00002e26u, 0x0004007cu, 0x00000008u, 0x00002e30u, 0x00002e28u, 0x00070050u, 0x00000009u, 0x00002e31u, 0x00002e2au, 0x00002e2au, 0x00002e2au, 0x00002e30u, 0x0003003eu, 0x00002e24u, 0x00002e31u, 0x0003003eu, 0x00002decu, 0x00002e31u, 0x000200f9u, 0x00002e1au, 0x000200f8u, 0x00002e1au, 0x000700f5u, 0x00000009u, 0x000070beu, 0x00002e31u, 0x00002e1bu, 0x00002e4bu, 0x00002e1cu, 0x0003003eu, 0x00002defu, 0x000070beu, 0x0003003eu, 0x0000247bu, 0x000070beu, 0x00050050u, 0x0000004du, 0x00002687u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002688u, 0x00002687u, 0x0003003eu, 0x00005b5du, 0x00002428u, 0x0003003eu, 0x00005b5eu, 0x0000242bu, 0x0003003eu, 0x000024a0u, 0x000018feu, 0x0003003eu, 0x000024a1u, 0x00002688u, 0x0003003eu, 0x000024a2u, 0x0000032eu, 0x0003003eu, 0x000024a3u, 0x00002606u, 0x0003003eu, 0x000024a4u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002e58u, 0x000024a1u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002e59u, 0x00002e58u, 0x00050084u, 0x00000006u, 0x00002e5au, 0x0000242bu, 0x00002e59u, 0x00050080u, 0x00000006u, 0x00002e5bu, 0x00002428u, 0x00002e5au, 0x0003003eu, 0x00002e4cu, 0x00002e5bu, 0x00050041u, 0x00000007u, 0x00002e5cu, 0x000024a1u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002e5du, 0x00002e5cu, 0x00050080u, 0x00000006u, 0x00002e5fu, 0x00002e5bu, 0x00002e5du, 0x0003003eu, 0x00002e4cu, 0x00002e5fu, 0x000500c7u, 0x00000006u, 0x00002e61u, 0x00002e5fu, 0x00000767u, 0x0003003eu, 0x00002e4cu, 0x00002e61u, 0x0003003eu, 0x00002e4du, 0x00002e61u, 0x0004003du, 0x00000006u, 0x00002e64u, 0x00002e58u, 0x000500c7u, 0x00000006u, 0x00002e65u, 0x00002e64u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002e66u, 0x00002e65u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002e68u, 0x00002e61u, 0x00002e66u, 0x0003003eu, 0x00002e4du, 0x00002e68u, 0x000500c6u, 0x00000006u, 0x00002e6au, 0x00002e68u, 0x00000331u, 0x0003003eu, 0x00002e4du, 0x00002e6au, 0x00080041u, 0x000001f9u, 0x00002e6du, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002e6au, 0x0004003du, 0x000001abu, 0x00002e6eu, 0x00002e6du, 0x00040071u, 0x00000006u, 0x00002e6fu, 0x00002e6eu, 0x0003003eu, 0x00002e4eu, 0x00002e6fu, 0x000500c4u, 0x00000006u, 0x00002e71u, 0x00002e6fu, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002e73u, 0x00002e71u, 0x0000032eu, 0x0003003eu, 0x00002e4fu, 0x00002e73u, 0x000500c6u, 0x00000006u, 0x00002e76u, 0x00002e73u, 0x00002606u, 0x0003003eu, 0x00002e4fu, 0x00002e76u, 0x000500c5u, 0x00000006u, 0x00002e79u, 0x00000798u, 0x00002e76u, 0x00080041u, 0x000001f2u, 0x00002e7au, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002e79u, 0x0004003du, 0x000001adu, 0x00002e7bu, 0x00002e7au, 0x00040071u, 0x00000006u, 0x00002e7cu, 0x00002e7bu, 0x0003003eu, 0x00002e4eu, 0x00002e7cu, 0x000300f7u, 0x00002e7eu, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002e7fu, 0x00002e80u, 0x000200f8u, 0x00002e80u, 0x0003003eu, 0x00002e52u, 0x00002e7cu, 0x00060050u, 0x000002b6u, 0x00002e9au, 0x00002e7cu, 0x00002e7cu, 0x00002e7cu, 0x000500c2u, 0x000002b6u, 0x00002e9bu, 0x00002e9au, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002e9du, 0x00002e9bu, 0x0000b1c0u, 0x0003003eu, 0x00002e96u, 0x00002e9du, 0x000500c4u, 0x000002b6u, 0x00002ea0u, 0x00002e9du, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002ea3u, 0x00002e9du, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002ea4u, 0x00002ea0u, 0x00002ea3u, 0x0003003eu, 0x00002e96u, 0x00002ea4u, 0x000500c7u, 0x00000006u, 0x00002ea6u, 0x00002e7cu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002ea7u, 0x00002ea6u, 0x00000689u, 0x0003003eu, 0x00002e97u, 0x00002ea7u, 0x0004007cu, 0x00000052u, 0x00002ea9u, 0x00002ea4u, 0x0004007cu, 0x00000008u, 0x00002eabu, 0x00002ea7u, 0x00050051u, 0x00000008u, 0x00002eacu, 0x00002ea9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002eadu, 0x00002ea9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002eaeu, 0x00002ea9u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002eafu, 0x00002eacu, 0x00002eadu, 0x00002eaeu, 0x00002eabu, 0x0003003eu, 0x00002e98u, 0x00002eafu, 0x0003003eu, 0x00002e50u, 0x00002eafu, 0x000200f9u, 0x00002e7eu, 0x000200f8u, 0x00002e7fu, 0x0003003eu, 0x00002e51u, 0x00002e7cu, 0x000500c2u, 0x00000006u, 0x00002e8au, 0x00002e7cu, 0x000001e0u, 0x0003003eu, 0x00002e86u, 0x00002e8au, 0x000500c7u, 0x00000006u, 0x00002e8cu, 0x00002e7cu, 0x00000689u, 0x0003003eu, 0x00002e87u, 0x00002e8cu, 0x0004007cu, 0x00000008u, 0x00002e8eu, 0x00002e8au, 0x0004007cu, 0x00000008u, 0x00002e94u, 0x00002e8cu, 0x00070050u, 0x00000009u, 0x00002e95u, 0x00002e8eu, 0x00002e8eu, 0x00002e8eu, 0x00002e94u, 0x0003003eu, 0x00002e88u, 0x00002e95u, 0x0003003eu, 0x00002e50u, 0x00002e95u, 0x000200f9u, 0x00002e7eu, 0x000200f8u, 0x00002e7eu, 0x000700f5u, 0x00000009u, 0x000070d6u, 0x00002e95u, 0x00002e7fu, 0x00002eafu, 0x00002e80u, 0x0003003eu, 0x00002e53u, 0x000070d6u, 0x0003003eu, 0x00002483u, 0x000070d6u, 0x000200f9u, 0x0000267au, 0x000200f8u, 0x0000267au, 0x000700f5u, 0x00000009u, 0x000073d4u, 0x000072a9u, 0x00002db6u, 0x000070d6u, 0x00002e7eu, 0x000700f5u, 0x00000009u, 0x000072e1u, 0x000072a9u, 0x00002db6u, 0x000070beu, 0x00002e7eu, 0x000300f7u, 0x0000268fu, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002690u, 0x0000268fu, 0x000200f8u, 0x00002690u, 0x00050050u, 0x0000004du, 0x00002693u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002694u, 0x00002693u, 0x0003003eu, 0x00005b61u, 0x00002428u, 0x0003003eu, 0x00005b62u, 0x0000242bu, 0x0003003eu, 0x000024a6u, 0x000018feu, 0x0003003eu, 0x000024a7u, 0x00002694u, 0x0003003eu, 0x000024a8u, 0x00000331u, 0x0003003eu, 0x000024a9u, 0x00002606u, 0x0003003eu, 0x000024aau, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002ebcu, 0x000024a7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002ebdu, 0x00002ebcu, 0x00050084u, 0x00000006u, 0x00002ebeu, 0x0000242bu, 0x00002ebdu, 0x00050080u, 0x00000006u, 0x00002ebfu, 0x00002428u, 0x00002ebeu, 0x0003003eu, 0x00002eb0u, 0x00002ebfu, 0x00050041u, 0x00000007u, 0x00002ec0u, 0x000024a7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002ec1u, 0x00002ec0u, 0x00050080u, 0x00000006u, 0x00002ec3u, 0x00002ebfu, 0x00002ec1u, 0x0003003eu, 0x00002eb0u, 0x00002ec3u, 0x000500c7u, 0x00000006u, 0x00002ec5u, 0x00002ec3u, 0x00000767u, 0x0003003eu, 0x00002eb0u, 0x00002ec5u, 0x0003003eu, 0x00002eb1u, 0x00002ec5u, 0x0004003du, 0x00000006u, 0x00002ec8u, 0x00002ebcu, 0x000500c7u, 0x00000006u, 0x00002ec9u, 0x00002ec8u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002ecau, 0x00002ec9u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002eccu, 0x00002ec5u, 0x00002ecau, 0x0003003eu, 0x00002eb1u, 0x00002eccu, 0x000500c6u, 0x00000006u, 0x00002eceu, 0x00002eccu, 0x00000331u, 0x0003003eu, 0x00002eb1u, 0x00002eceu, 0x00080041u, 0x000001f9u, 0x00002ed1u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002eceu, 0x0004003du, 0x000001abu, 0x00002ed2u, 0x00002ed1u, 0x00040071u, 0x00000006u, 0x00002ed3u, 0x00002ed2u, 0x0003003eu, 0x00002eb2u, 0x00002ed3u, 0x000500c4u, 0x00000006u, 0x00002ed5u, 0x00002ed3u, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002ed7u, 0x00002ed5u, 0x00000331u, 0x0003003eu, 0x00002eb3u, 0x00002ed7u, 0x000500c6u, 0x00000006u, 0x00002edau, 0x00002ed7u, 0x00002606u, 0x0003003eu, 0x00002eb3u, 0x00002edau, 0x000500c5u, 0x00000006u, 0x00002eddu, 0x00000798u, 0x00002edau, 0x00080041u, 0x000001f2u, 0x00002edeu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002eddu, 0x0004003du, 0x000001adu, 0x00002edfu, 0x00002edeu, 0x00040071u, 0x00000006u, 0x00002ee0u, 0x00002edfu, 0x0003003eu, 0x00002eb2u, 0x00002ee0u, 0x000300f7u, 0x00002ee2u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002ee3u, 0x00002ee4u, 0x000200f8u, 0x00002ee4u, 0x0003003eu, 0x00002eb6u, 0x00002ee0u, 0x00060050u, 0x000002b6u, 0x00002efeu, 0x00002ee0u, 0x00002ee0u, 0x00002ee0u, 0x000500c2u, 0x000002b6u, 0x00002effu, 0x00002efeu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002f01u, 0x00002effu, 0x0000b1c0u, 0x0003003eu, 0x00002efau, 0x00002f01u, 0x000500c4u, 0x000002b6u, 0x00002f04u, 0x00002f01u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002f07u, 0x00002f01u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002f08u, 0x00002f04u, 0x00002f07u, 0x0003003eu, 0x00002efau, 0x00002f08u, 0x000500c7u, 0x00000006u, 0x00002f0au, 0x00002ee0u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002f0bu, 0x00002f0au, 0x00000689u, 0x0003003eu, 0x00002efbu, 0x00002f0bu, 0x0004007cu, 0x00000052u, 0x00002f0du, 0x00002f08u, 0x0004007cu, 0x00000008u, 0x00002f0fu, 0x00002f0bu, 0x00050051u, 0x00000008u, 0x00002f10u, 0x00002f0du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002f11u, 0x00002f0du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002f12u, 0x00002f0du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002f13u, 0x00002f10u, 0x00002f11u, 0x00002f12u, 0x00002f0fu, 0x0003003eu, 0x00002efcu, 0x00002f13u, 0x0003003eu, 0x00002eb4u, 0x00002f13u, 0x000200f9u, 0x00002ee2u, 0x000200f8u, 0x00002ee3u, 0x0003003eu, 0x00002eb5u, 0x00002ee0u, 0x000500c2u, 0x00000006u, 0x00002eeeu, 0x00002ee0u, 0x000001e0u, 0x0003003eu, 0x00002eeau, 0x00002eeeu, 0x000500c7u, 0x00000006u, 0x00002ef0u, 0x00002ee0u, 0x00000689u, 0x0003003eu, 0x00002eebu, 0x00002ef0u, 0x0004007cu, 0x00000008u, 0x00002ef2u, 0x00002eeeu, 0x0004007cu, 0x00000008u, 0x00002ef8u, 0x00002ef0u, 0x00070050u, 0x00000009u, 0x00002ef9u, 0x00002ef2u, 0x00002ef2u, 0x00002ef2u, 0x00002ef8u, 0x0003003eu, 0x00002eecu, 0x00002ef9u, 0x0003003eu, 0x00002eb4u, 0x00002ef9u, 0x000200f9u, 0x00002ee2u, 0x000200f8u, 0x00002ee2u, 0x000700f5u, 0x00000009u, 0x00007103u, 0x00002ef9u, 0x00002ee3u, 0x00002f13u, 0x00002ee4u, 0x0003003eu, 0x00002eb7u, 0x00007103u, 0x0003003eu, 0x0000248bu, 0x00007103u, 0x000200f9u, 0x0000268fu, 0x000200f8u, 0x0000268fu, 0x000700f5u, 0x00000009u, 0x0000744cu, 0x000072a9u, 0x0000267au, 0x00007103u, 0x00002ee2u, 0x000200f9u, 0x00002609u, 0x000200f8u, 0x0000260bu, 0x0004007cu, 0x000000a0u, 0x00002639u, 0x00006f1du, 0x0004007cu, 0x00000006u, 0x0000263cu, 0x0000243au, 0x000600a9u, 0x00000008u, 0x0000263eu, 0x000025efu, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x0000263fu, 0x0000263eu, 0x0003003eu, 0x00005b45u, 0x00002428u, 0x0003003eu, 0x00005b46u, 0x0000242bu, 0x0003003eu, 0x00002475u, 0x000018feu, 0x0003003eu, 0x00002476u, 0x00002639u, 0x0003003eu, 0x00002477u, 0x0000263cu, 0x0003003eu, 0x00002478u, 0x0000263fu, 0x0003003eu, 0x00002479u, 0x00002606u, 0x0003003eu, 0x0000247au, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002bc5u, 0x00002476u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002bc6u, 0x00002bc5u, 0x00050084u, 0x00000006u, 0x00002bc7u, 0x0000242bu, 0x00002bc6u, 0x00050080u, 0x00000006u, 0x00002bc8u, 0x00002428u, 0x00002bc7u, 0x0003003eu, 0x00002bb8u, 0x00002bc8u, 0x00050041u, 0x00000007u, 0x00002bc9u, 0x00002476u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002bcau, 0x00002bc9u, 0x000500c2u, 0x00000006u, 0x00002bcbu, 0x00002bcau, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002bcdu, 0x00002bc8u, 0x00002bcbu, 0x0003003eu, 0x00002bb8u, 0x00002bcdu, 0x000500c7u, 0x00000006u, 0x00002bcfu, 0x00002bcdu, 0x00000767u, 0x0003003eu, 0x00002bb8u, 0x00002bcfu, 0x0004003du, 0x00000006u, 0x00002bd1u, 0x00002bc9u, 0x000400c8u, 0x00000006u, 0x00002bd2u, 0x00002bd1u, 0x000500c7u, 0x00000006u, 0x00002bd3u, 0x00002bd2u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002bd4u, 0x00002bd3u, 0x000006bcu, 0x0003003eu, 0x00002bb9u, 0x00002bd4u, 0x0003003eu, 0x00002bbau, 0x00002bcfu, 0x0004003du, 0x00000006u, 0x00002bd7u, 0x00002bc5u, 0x000500c7u, 0x00000006u, 0x00002bd8u, 0x00002bd7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002bd9u, 0x00002bd8u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002bdbu, 0x00002bcfu, 0x00002bd9u, 0x0003003eu, 0x00002bbau, 0x00002bdbu, 0x000500c6u, 0x00000006u, 0x00002bddu, 0x00002bdbu, 0x00000331u, 0x0003003eu, 0x00002bbau, 0x00002bddu, 0x00080041u, 0x000001f9u, 0x00002be0u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002bddu, 0x0004003du, 0x000001abu, 0x00002be1u, 0x00002be0u, 0x00040071u, 0x00000006u, 0x00002be2u, 0x00002be1u, 0x0003003eu, 0x00002bbbu, 0x00002be2u, 0x000500c2u, 0x00000006u, 0x00002be5u, 0x00002be2u, 0x00002bd4u, 0x000500c7u, 0x00000006u, 0x00002be6u, 0x00002be5u, 0x000006d8u, 0x0003003eu, 0x00002bbbu, 0x00002be6u, 0x000500c4u, 0x00000006u, 0x00002be8u, 0x0000263cu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00002beau, 0x00002be6u, 0x00002be8u, 0x0003003eu, 0x00002bbbu, 0x00002beau, 0x000500c4u, 0x00000006u, 0x00002becu, 0x00002beau, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002beeu, 0x00002becu, 0x0000263fu, 0x0003003eu, 0x00002bbcu, 0x00002beeu, 0x000500c6u, 0x00000006u, 0x00002bf1u, 0x00002beeu, 0x00002606u, 0x0003003eu, 0x00002bbcu, 0x00002bf1u, 0x000500c5u, 0x00000006u, 0x00002bf4u, 0x00000798u, 0x00002bf1u, 0x00080041u, 0x000001f2u, 0x00002bf5u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002bf4u, 0x0004003du, 0x000001adu, 0x00002bf6u, 0x00002bf5u, 0x00040071u, 0x00000006u, 0x00002bf7u, 0x00002bf6u, 0x0003003eu, 0x00002bbbu, 0x00002bf7u, 0x000300f7u, 0x00002bf9u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002bfau, 0x00002bfbu, 0x000200f8u, 0x00002bfbu, 0x0003003eu, 0x00002bbfu, 0x00002bf7u, 0x00060050u, 0x000002b6u, 0x00002c15u, 0x00002bf7u, 0x00002bf7u, 0x00002bf7u, 0x000500c2u, 0x000002b6u, 0x00002c16u, 0x00002c15u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002c18u, 0x00002c16u, 0x0000b1c0u, 0x0003003eu, 0x00002c11u, 0x00002c18u, 0x000500c4u, 0x000002b6u, 0x00002c1bu, 0x00002c18u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002c1eu, 0x00002c18u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002c1fu, 0x00002c1bu, 0x00002c1eu, 0x0003003eu, 0x00002c11u, 0x00002c1fu, 0x000500c7u, 0x00000006u, 0x00002c21u, 0x00002bf7u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002c22u, 0x00002c21u, 0x00000689u, 0x0003003eu, 0x00002c12u, 0x00002c22u, 0x0004007cu, 0x00000052u, 0x00002c24u, 0x00002c1fu, 0x0004007cu, 0x00000008u, 0x00002c26u, 0x00002c22u, 0x00050051u, 0x00000008u, 0x00002c27u, 0x00002c24u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002c28u, 0x00002c24u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002c29u, 0x00002c24u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002c2au, 0x00002c27u, 0x00002c28u, 0x00002c29u, 0x00002c26u, 0x0003003eu, 0x00002c13u, 0x00002c2au, 0x0003003eu, 0x00002bbdu, 0x00002c2au, 0x000200f9u, 0x00002bf9u, 0x000200f8u, 0x00002bfau, 0x0003003eu, 0x00002bbeu, 0x00002bf7u, 0x000500c2u, 0x00000006u, 0x00002c05u, 0x00002bf7u, 0x000001e0u, 0x0003003eu, 0x00002c01u, 0x00002c05u, 0x000500c7u, 0x00000006u, 0x00002c07u, 0x00002bf7u, 0x00000689u, 0x0003003eu, 0x00002c02u, 0x00002c07u, 0x0004007cu, 0x00000008u, 0x00002c09u, 0x00002c05u, 0x0004007cu, 0x00000008u, 0x00002c0fu, 0x00002c07u, 0x00070050u, 0x00000009u, 0x00002c10u, 0x00002c09u, 0x00002c09u, 0x00002c09u, 0x00002c0fu, 0x0003003eu, 0x00002c03u, 0x00002c10u, 0x0003003eu, 0x00002bbdu, 0x00002c10u, 0x000200f9u, 0x00002bf9u, 0x000200f8u, 0x00002bf9u, 0x000700f5u, 0x00000009u, 0x00007104u, 0x00002c10u, 0x00002bfau, 0x00002c2au, 0x00002bfbu, 0x0003003eu, 0x00002bc0u, 0x00007104u, 0x0003003eu, 0x00002473u, 0x00007104u, 0x000300f7u, 0x00002646u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002647u, 0x00002646u, 0x000200f8u, 0x00002647u, 0x00050050u, 0x0000004du, 0x0000264au, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x0000264bu, 0x0000264au, 0x0003003eu, 0x00005b49u, 0x00002428u, 0x0003003eu, 0x00005b4au, 0x0000242bu, 0x0003003eu, 0x0000247du, 0x000018feu, 0x0003003eu, 0x0000247eu, 0x0000264bu, 0x0003003eu, 0x0000247fu, 0x0000263cu, 0x0003003eu, 0x00002480u, 0x0000032au, 0x0003003eu, 0x00002481u, 0x00002606u, 0x0003003eu, 0x00002482u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002c38u, 0x0000247eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002c39u, 0x00002c38u, 0x00050084u, 0x00000006u, 0x00002c3au, 0x0000242bu, 0x00002c39u, 0x00050080u, 0x00000006u, 0x00002c3bu, 0x00002428u, 0x00002c3au, 0x0003003eu, 0x00002c2bu, 0x00002c3bu, 0x00050041u, 0x00000007u, 0x00002c3cu, 0x0000247eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002c3du, 0x00002c3cu, 0x000500c2u, 0x00000006u, 0x00002c3eu, 0x00002c3du, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002c40u, 0x00002c3bu, 0x00002c3eu, 0x0003003eu, 0x00002c2bu, 0x00002c40u, 0x000500c7u, 0x00000006u, 0x00002c42u, 0x00002c40u, 0x00000767u, 0x0003003eu, 0x00002c2bu, 0x00002c42u, 0x0004003du, 0x00000006u, 0x00002c44u, 0x00002c3cu, 0x000400c8u, 0x00000006u, 0x00002c45u, 0x00002c44u, 0x000500c7u, 0x00000006u, 0x00002c46u, 0x00002c45u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002c47u, 0x00002c46u, 0x000006bcu, 0x0003003eu, 0x00002c2cu, 0x00002c47u, 0x0003003eu, 0x00002c2du, 0x00002c42u, 0x0004003du, 0x00000006u, 0x00002c4au, 0x00002c38u, 0x000500c7u, 0x00000006u, 0x00002c4bu, 0x00002c4au, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002c4cu, 0x00002c4bu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002c4eu, 0x00002c42u, 0x00002c4cu, 0x0003003eu, 0x00002c2du, 0x00002c4eu, 0x000500c6u, 0x00000006u, 0x00002c50u, 0x00002c4eu, 0x00000331u, 0x0003003eu, 0x00002c2du, 0x00002c50u, 0x00080041u, 0x000001f9u, 0x00002c53u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002c50u, 0x0004003du, 0x000001abu, 0x00002c54u, 0x00002c53u, 0x00040071u, 0x00000006u, 0x00002c55u, 0x00002c54u, 0x0003003eu, 0x00002c2eu, 0x00002c55u, 0x000500c2u, 0x00000006u, 0x00002c58u, 0x00002c55u, 0x00002c47u, 0x000500c7u, 0x00000006u, 0x00002c59u, 0x00002c58u, 0x000006d8u, 0x0003003eu, 0x00002c2eu, 0x00002c59u, 0x000500c5u, 0x00000006u, 0x00002c5du, 0x00002c59u, 0x00002be8u, 0x0003003eu, 0x00002c2eu, 0x00002c5du, 0x000500c4u, 0x00000006u, 0x00002c5fu, 0x00002c5du, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002c61u, 0x00002c5fu, 0x0000032au, 0x0003003eu, 0x00002c2fu, 0x00002c61u, 0x000500c6u, 0x00000006u, 0x00002c64u, 0x00002c61u, 0x00002606u, 0x0003003eu, 0x00002c2fu, 0x00002c64u, 0x000500c5u, 0x00000006u, 0x00002c67u, 0x00000798u, 0x00002c64u, 0x00080041u, 0x000001f2u, 0x00002c68u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002c67u, 0x0004003du, 0x000001adu, 0x00002c69u, 0x00002c68u, 0x00040071u, 0x00000006u, 0x00002c6au, 0x00002c69u, 0x0003003eu, 0x00002c2eu, 0x00002c6au, 0x000300f7u, 0x00002c6cu, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002c6du, 0x00002c6eu, 0x000200f8u, 0x00002c6eu, 0x0003003eu, 0x00002c32u, 0x00002c6au, 0x00060050u, 0x000002b6u, 0x00002c88u, 0x00002c6au, 0x00002c6au, 0x00002c6au, 0x000500c2u, 0x000002b6u, 0x00002c89u, 0x00002c88u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002c8bu, 0x00002c89u, 0x0000b1c0u, 0x0003003eu, 0x00002c84u, 0x00002c8bu, 0x000500c4u, 0x000002b6u, 0x00002c8eu, 0x00002c8bu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002c91u, 0x00002c8bu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002c92u, 0x00002c8eu, 0x00002c91u, 0x0003003eu, 0x00002c84u, 0x00002c92u, 0x000500c7u, 0x00000006u, 0x00002c94u, 0x00002c6au, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002c95u, 0x00002c94u, 0x00000689u, 0x0003003eu, 0x00002c85u, 0x00002c95u, 0x0004007cu, 0x00000052u, 0x00002c97u, 0x00002c92u, 0x0004007cu, 0x00000008u, 0x00002c99u, 0x00002c95u, 0x00050051u, 0x00000008u, 0x00002c9au, 0x00002c97u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002c9bu, 0x00002c97u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002c9cu, 0x00002c97u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002c9du, 0x00002c9au, 0x00002c9bu, 0x00002c9cu, 0x00002c99u, 0x0003003eu, 0x00002c86u, 0x00002c9du, 0x0003003eu, 0x00002c30u, 0x00002c9du, 0x000200f9u, 0x00002c6cu, 0x000200f8u, 0x00002c6du, 0x0003003eu, 0x00002c31u, 0x00002c6au, 0x000500c2u, 0x00000006u, 0x00002c78u, 0x00002c6au, 0x000001e0u, 0x0003003eu, 0x00002c74u, 0x00002c78u, 0x000500c7u, 0x00000006u, 0x00002c7au, 0x00002c6au, 0x00000689u, 0x0003003eu, 0x00002c75u, 0x00002c7au, 0x0004007cu, 0x00000008u, 0x00002c7cu, 0x00002c78u, 0x0004007cu, 0x00000008u, 0x00002c82u, 0x00002c7au, 0x00070050u, 0x00000009u, 0x00002c83u, 0x00002c7cu, 0x00002c7cu, 0x00002c7cu, 0x00002c82u, 0x0003003eu, 0x00002c76u, 0x00002c83u, 0x0003003eu, 0x00002c30u, 0x00002c83u, 0x000200f9u, 0x00002c6cu, 0x000200f8u, 0x00002c6cu, 0x000700f5u, 0x00000009u, 0x00007119u, 0x00002c83u, 0x00002c6du, 0x00002c9du, 0x00002c6eu, 0x0003003eu, 0x00002c33u, 0x00007119u, 0x0003003eu, 0x0000247bu, 0x00007119u, 0x00050050u, 0x0000004du, 0x00002656u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002657u, 0x00002656u, 0x0003003eu, 0x00005b4du, 0x00002428u, 0x0003003eu, 0x00005b4eu, 0x0000242bu, 0x0003003eu, 0x00002485u, 0x000018feu, 0x0003003eu, 0x00002486u, 0x00002657u, 0x0003003eu, 0x00002487u, 0x0000263cu, 0x0003003eu, 0x00002488u, 0x0000032eu, 0x0003003eu, 0x00002489u, 0x00002606u, 0x0003003eu, 0x0000248au, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002cabu, 0x00002486u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002cacu, 0x00002cabu, 0x00050084u, 0x00000006u, 0x00002cadu, 0x0000242bu, 0x00002cacu, 0x00050080u, 0x00000006u, 0x00002caeu, 0x00002428u, 0x00002cadu, 0x0003003eu, 0x00002c9eu, 0x00002caeu, 0x00050041u, 0x00000007u, 0x00002cafu, 0x00002486u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002cb0u, 0x00002cafu, 0x000500c2u, 0x00000006u, 0x00002cb1u, 0x00002cb0u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002cb3u, 0x00002caeu, 0x00002cb1u, 0x0003003eu, 0x00002c9eu, 0x00002cb3u, 0x000500c7u, 0x00000006u, 0x00002cb5u, 0x00002cb3u, 0x00000767u, 0x0003003eu, 0x00002c9eu, 0x00002cb5u, 0x0004003du, 0x00000006u, 0x00002cb7u, 0x00002cafu, 0x000400c8u, 0x00000006u, 0x00002cb8u, 0x00002cb7u, 0x000500c7u, 0x00000006u, 0x00002cb9u, 0x00002cb8u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002cbau, 0x00002cb9u, 0x000006bcu, 0x0003003eu, 0x00002c9fu, 0x00002cbau, 0x0003003eu, 0x00002ca0u, 0x00002cb5u, 0x0004003du, 0x00000006u, 0x00002cbdu, 0x00002cabu, 0x000500c7u, 0x00000006u, 0x00002cbeu, 0x00002cbdu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002cbfu, 0x00002cbeu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002cc1u, 0x00002cb5u, 0x00002cbfu, 0x0003003eu, 0x00002ca0u, 0x00002cc1u, 0x000500c6u, 0x00000006u, 0x00002cc3u, 0x00002cc1u, 0x00000331u, 0x0003003eu, 0x00002ca0u, 0x00002cc3u, 0x00080041u, 0x000001f9u, 0x00002cc6u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002cc3u, 0x0004003du, 0x000001abu, 0x00002cc7u, 0x00002cc6u, 0x00040071u, 0x00000006u, 0x00002cc8u, 0x00002cc7u, 0x0003003eu, 0x00002ca1u, 0x00002cc8u, 0x000500c2u, 0x00000006u, 0x00002ccbu, 0x00002cc8u, 0x00002cbau, 0x000500c7u, 0x00000006u, 0x00002cccu, 0x00002ccbu, 0x000006d8u, 0x0003003eu, 0x00002ca1u, 0x00002cccu, 0x000500c5u, 0x00000006u, 0x00002cd0u, 0x00002cccu, 0x00002be8u, 0x0003003eu, 0x00002ca1u, 0x00002cd0u, 0x000500c4u, 0x00000006u, 0x00002cd2u, 0x00002cd0u, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002cd4u, 0x00002cd2u, 0x0000032eu, 0x0003003eu, 0x00002ca2u, 0x00002cd4u, 0x000500c6u, 0x00000006u, 0x00002cd7u, 0x00002cd4u, 0x00002606u, 0x0003003eu, 0x00002ca2u, 0x00002cd7u, 0x000500c5u, 0x00000006u, 0x00002cdau, 0x00000798u, 0x00002cd7u, 0x00080041u, 0x000001f2u, 0x00002cdbu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002cdau, 0x0004003du, 0x000001adu, 0x00002cdcu, 0x00002cdbu, 0x00040071u, 0x00000006u, 0x00002cddu, 0x00002cdcu, 0x0003003eu, 0x00002ca1u, 0x00002cddu, 0x000300f7u, 0x00002cdfu, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002ce0u, 0x00002ce1u, 0x000200f8u, 0x00002ce1u, 0x0003003eu, 0x00002ca5u, 0x00002cddu, 0x00060050u, 0x000002b6u, 0x00002cfbu, 0x00002cddu, 0x00002cddu, 0x00002cddu, 0x000500c2u, 0x000002b6u, 0x00002cfcu, 0x00002cfbu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002cfeu, 0x00002cfcu, 0x0000b1c0u, 0x0003003eu, 0x00002cf7u, 0x00002cfeu, 0x000500c4u, 0x000002b6u, 0x00002d01u, 0x00002cfeu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002d04u, 0x00002cfeu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002d05u, 0x00002d01u, 0x00002d04u, 0x0003003eu, 0x00002cf7u, 0x00002d05u, 0x000500c7u, 0x00000006u, 0x00002d07u, 0x00002cddu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002d08u, 0x00002d07u, 0x00000689u, 0x0003003eu, 0x00002cf8u, 0x00002d08u, 0x0004007cu, 0x00000052u, 0x00002d0au, 0x00002d05u, 0x0004007cu, 0x00000008u, 0x00002d0cu, 0x00002d08u, 0x00050051u, 0x00000008u, 0x00002d0du, 0x00002d0au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002d0eu, 0x00002d0au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002d0fu, 0x00002d0au, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002d10u, 0x00002d0du, 0x00002d0eu, 0x00002d0fu, 0x00002d0cu, 0x0003003eu, 0x00002cf9u, 0x00002d10u, 0x0003003eu, 0x00002ca3u, 0x00002d10u, 0x000200f9u, 0x00002cdfu, 0x000200f8u, 0x00002ce0u, 0x0003003eu, 0x00002ca4u, 0x00002cddu, 0x000500c2u, 0x00000006u, 0x00002cebu, 0x00002cddu, 0x000001e0u, 0x0003003eu, 0x00002ce7u, 0x00002cebu, 0x000500c7u, 0x00000006u, 0x00002cedu, 0x00002cddu, 0x00000689u, 0x0003003eu, 0x00002ce8u, 0x00002cedu, 0x0004007cu, 0x00000008u, 0x00002cefu, 0x00002cebu, 0x0004007cu, 0x00000008u, 0x00002cf5u, 0x00002cedu, 0x00070050u, 0x00000009u, 0x00002cf6u, 0x00002cefu, 0x00002cefu, 0x00002cefu, 0x00002cf5u, 0x0003003eu, 0x00002ce9u, 0x00002cf6u, 0x0003003eu, 0x00002ca3u, 0x00002cf6u, 0x000200f9u, 0x00002cdfu, 0x000200f8u, 0x00002cdfu, 0x000700f5u, 0x00000009u, 0x0000712fu, 0x00002cf6u, 0x00002ce0u, 0x00002d10u, 0x00002ce1u, 0x0003003eu, 0x00002ca6u, 0x0000712fu, 0x0003003eu, 0x00002483u, 0x0000712fu, 0x000200f9u, 0x00002646u, 0x000200f8u, 0x00002646u, 0x000700f5u, 0x00000009u, 0x000073d0u, 0x000072a9u, 0x00002bf9u, 0x0000712fu, 0x00002cdfu, 0x000700f5u, 0x00000009u, 0x000072dcu, 0x000072a9u, 0x00002bf9u, 0x00007119u, 0x00002cdfu, 0x000300f7u, 0x00002661u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002662u, 0x00002661u, 0x000200f8u, 0x00002662u, 0x00050050u, 0x0000004du, 0x00002665u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002666u, 0x00002665u, 0x0003003eu, 0x00005b51u, 0x00002428u, 0x0003003eu, 0x00005b52u, 0x0000242bu, 0x0003003eu, 0x0000248du, 0x000018feu, 0x0003003eu, 0x0000248eu, 0x00002666u, 0x0003003eu, 0x0000248fu, 0x0000263cu, 0x0003003eu, 0x00002490u, 0x00000331u, 0x0003003eu, 0x00002491u, 0x00002606u, 0x0003003eu, 0x00002492u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002d1eu, 0x0000248eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002d1fu, 0x00002d1eu, 0x00050084u, 0x00000006u, 0x00002d20u, 0x0000242bu, 0x00002d1fu, 0x00050080u, 0x00000006u, 0x00002d21u, 0x00002428u, 0x00002d20u, 0x0003003eu, 0x00002d11u, 0x00002d21u, 0x00050041u, 0x00000007u, 0x00002d22u, 0x0000248eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002d23u, 0x00002d22u, 0x000500c2u, 0x00000006u, 0x00002d24u, 0x00002d23u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00002d26u, 0x00002d21u, 0x00002d24u, 0x0003003eu, 0x00002d11u, 0x00002d26u, 0x000500c7u, 0x00000006u, 0x00002d28u, 0x00002d26u, 0x00000767u, 0x0003003eu, 0x00002d11u, 0x00002d28u, 0x0004003du, 0x00000006u, 0x00002d2au, 0x00002d22u, 0x000400c8u, 0x00000006u, 0x00002d2bu, 0x00002d2au, 0x000500c7u, 0x00000006u, 0x00002d2cu, 0x00002d2bu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002d2du, 0x00002d2cu, 0x000006bcu, 0x0003003eu, 0x00002d12u, 0x00002d2du, 0x0003003eu, 0x00002d13u, 0x00002d28u, 0x0004003du, 0x00000006u, 0x00002d30u, 0x00002d1eu, 0x000500c7u, 0x00000006u, 0x00002d31u, 0x00002d30u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002d32u, 0x00002d31u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00002d34u, 0x00002d28u, 0x00002d32u, 0x0003003eu, 0x00002d13u, 0x00002d34u, 0x000500c6u, 0x00000006u, 0x00002d36u, 0x00002d34u, 0x00000331u, 0x0003003eu, 0x00002d13u, 0x00002d36u, 0x00080041u, 0x000001f9u, 0x00002d39u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002d36u, 0x0004003du, 0x000001abu, 0x00002d3au, 0x00002d39u, 0x00040071u, 0x00000006u, 0x00002d3bu, 0x00002d3au, 0x0003003eu, 0x00002d14u, 0x00002d3bu, 0x000500c2u, 0x00000006u, 0x00002d3eu, 0x00002d3bu, 0x00002d2du, 0x000500c7u, 0x00000006u, 0x00002d3fu, 0x00002d3eu, 0x000006d8u, 0x0003003eu, 0x00002d14u, 0x00002d3fu, 0x000500c5u, 0x00000006u, 0x00002d43u, 0x00002d3fu, 0x00002be8u, 0x0003003eu, 0x00002d14u, 0x00002d43u, 0x000500c4u, 0x00000006u, 0x00002d45u, 0x00002d43u, 0x00000197u, 0x00050080u, 0x00000006u, 0x00002d47u, 0x00002d45u, 0x00000331u, 0x0003003eu, 0x00002d15u, 0x00002d47u, 0x000500c6u, 0x00000006u, 0x00002d4au, 0x00002d47u, 0x00002606u, 0x0003003eu, 0x00002d15u, 0x00002d4au, 0x000500c5u, 0x00000006u, 0x00002d4du, 0x00000798u, 0x00002d4au, 0x00080041u, 0x000001f2u, 0x00002d4eu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002d4du, 0x0004003du, 0x000001adu, 0x00002d4fu, 0x00002d4eu, 0x00040071u, 0x00000006u, 0x00002d50u, 0x00002d4fu, 0x0003003eu, 0x00002d14u, 0x00002d50u, 0x000300f7u, 0x00002d52u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002d53u, 0x00002d54u, 0x000200f8u, 0x00002d54u, 0x0003003eu, 0x00002d18u, 0x00002d50u, 0x00060050u, 0x000002b6u, 0x00002d6eu, 0x00002d50u, 0x00002d50u, 0x00002d50u, 0x000500c2u, 0x000002b6u, 0x00002d6fu, 0x00002d6eu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002d71u, 0x00002d6fu, 0x0000b1c0u, 0x0003003eu, 0x00002d6au, 0x00002d71u, 0x000500c4u, 0x000002b6u, 0x00002d74u, 0x00002d71u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002d77u, 0x00002d71u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002d78u, 0x00002d74u, 0x00002d77u, 0x0003003eu, 0x00002d6au, 0x00002d78u, 0x000500c7u, 0x00000006u, 0x00002d7au, 0x00002d50u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002d7bu, 0x00002d7au, 0x00000689u, 0x0003003eu, 0x00002d6bu, 0x00002d7bu, 0x0004007cu, 0x00000052u, 0x00002d7du, 0x00002d78u, 0x0004007cu, 0x00000008u, 0x00002d7fu, 0x00002d7bu, 0x00050051u, 0x00000008u, 0x00002d80u, 0x00002d7du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002d81u, 0x00002d7du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002d82u, 0x00002d7du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002d83u, 0x00002d80u, 0x00002d81u, 0x00002d82u, 0x00002d7fu, 0x0003003eu, 0x00002d6cu, 0x00002d83u, 0x0003003eu, 0x00002d16u, 0x00002d83u, 0x000200f9u, 0x00002d52u, 0x000200f8u, 0x00002d53u, 0x0003003eu, 0x00002d17u, 0x00002d50u, 0x000500c2u, 0x00000006u, 0x00002d5eu, 0x00002d50u, 0x000001e0u, 0x0003003eu, 0x00002d5au, 0x00002d5eu, 0x000500c7u, 0x00000006u, 0x00002d60u, 0x00002d50u, 0x00000689u, 0x0003003eu, 0x00002d5bu, 0x00002d60u, 0x0004007cu, 0x00000008u, 0x00002d62u, 0x00002d5eu, 0x0004007cu, 0x00000008u, 0x00002d68u, 0x00002d60u, 0x00070050u, 0x00000009u, 0x00002d69u, 0x00002d62u, 0x00002d62u, 0x00002d62u, 0x00002d68u, 0x0003003eu, 0x00002d5cu, 0x00002d69u, 0x0003003eu, 0x00002d16u, 0x00002d69u, 0x000200f9u, 0x00002d52u, 0x000200f8u, 0x00002d52u, 0x000700f5u, 0x00000009u, 0x0000715bu, 0x00002d69u, 0x00002d53u, 0x00002d83u, 0x00002d54u, 0x0003003eu, 0x00002d19u, 0x0000715bu, 0x0003003eu, 0x0000248bu, 0x0000715bu, 0x000200f9u, 0x00002661u, 0x000200f8u, 0x00002661u, 0x000700f5u, 0x00000009u, 0x00007447u, 0x000072a9u, 0x00002646u, 0x0000715bu, 0x00002d52u, 0x000200f9u, 0x00002609u, 0x000200f8u, 0x0000260au, 0x0004007cu, 0x000000a0u, 0x0000260eu, 0x00006f1du, 0x000600a9u, 0x00000008u, 0x00002610u, 0x000025efu, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00002611u, 0x00002610u, 0x0003003eu, 0x00005b65u, 0x00002428u, 0x0003003eu, 0x00005b66u, 0x0000242bu, 0x0003003eu, 0x000024acu, 0x000018feu, 0x0003003eu, 0x000024adu, 0x0000260eu, 0x0003003eu, 0x000024aeu, 0x00002611u, 0x0003003eu, 0x000024afu, 0x00002606u, 0x0003003eu, 0x000024b0u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002a28u, 0x000024adu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002a29u, 0x00002a28u, 0x00050084u, 0x00000006u, 0x00002a2au, 0x0000242bu, 0x00002a29u, 0x00050080u, 0x00000006u, 0x00002a2bu, 0x00002428u, 0x00002a2au, 0x0003003eu, 0x00002a1cu, 0x00002a2bu, 0x00050041u, 0x00000007u, 0x00002a2cu, 0x000024adu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002a2du, 0x00002a2cu, 0x00050084u, 0x00000006u, 0x00002a2eu, 0x00002a2du, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00002a30u, 0x00002a2bu, 0x00002a2eu, 0x0003003eu, 0x00002a1cu, 0x00002a30u, 0x000500c7u, 0x00000006u, 0x00002a32u, 0x00002a30u, 0x00000767u, 0x0003003eu, 0x00002a1cu, 0x00002a32u, 0x000500c2u, 0x00000006u, 0x00002a34u, 0x00002a32u, 0x00000194u, 0x0003003eu, 0x00002a1du, 0x00002a34u, 0x0004003du, 0x00000006u, 0x00002a36u, 0x00002a28u, 0x000500c7u, 0x00000006u, 0x00002a37u, 0x00002a36u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002a38u, 0x00002a37u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00002a3au, 0x00002a34u, 0x00002a38u, 0x0003003eu, 0x00002a1du, 0x00002a3au, 0x000500c6u, 0x00000006u, 0x00002a3cu, 0x00002a3au, 0x0000032au, 0x0003003eu, 0x00002a1du, 0x00002a3cu, 0x00080041u, 0x000001f2u, 0x00002a3fu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002a3cu, 0x0004003du, 0x000001adu, 0x00002a40u, 0x00002a3fu, 0x00040071u, 0x00000006u, 0x00002a41u, 0x00002a40u, 0x0003003eu, 0x00002a1eu, 0x00002a41u, 0x000500c2u, 0x00000006u, 0x00002a43u, 0x00002a41u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00002a44u, 0x00002a43u, 0x00000836u, 0x00050080u, 0x00000006u, 0x00002a46u, 0x00002a44u, 0x00002611u, 0x0003003eu, 0x00002a1fu, 0x00002a46u, 0x000500c6u, 0x00000006u, 0x00002a49u, 0x00002a46u, 0x00002606u, 0x0003003eu, 0x00002a1fu, 0x00002a49u, 0x000500c5u, 0x00000006u, 0x00002a4cu, 0x00000798u, 0x00002a49u, 0x00080041u, 0x000001f2u, 0x00002a4du, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002a4cu, 0x0004003du, 0x000001adu, 0x00002a4eu, 0x00002a4du, 0x00040071u, 0x00000006u, 0x00002a4fu, 0x00002a4eu, 0x0003003eu, 0x00002a1eu, 0x00002a4fu, 0x000300f7u, 0x00002a51u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002a52u, 0x00002a53u, 0x000200f8u, 0x00002a53u, 0x0003003eu, 0x00002a22u, 0x00002a4fu, 0x00060050u, 0x000002b6u, 0x00002a6du, 0x00002a4fu, 0x00002a4fu, 0x00002a4fu, 0x000500c2u, 0x000002b6u, 0x00002a6eu, 0x00002a6du, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002a70u, 0x00002a6eu, 0x0000b1c0u, 0x0003003eu, 0x00002a69u, 0x00002a70u, 0x000500c4u, 0x000002b6u, 0x00002a73u, 0x00002a70u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002a76u, 0x00002a70u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002a77u, 0x00002a73u, 0x00002a76u, 0x0003003eu, 0x00002a69u, 0x00002a77u, 0x000500c7u, 0x00000006u, 0x00002a79u, 0x00002a4fu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002a7au, 0x00002a79u, 0x00000689u, 0x0003003eu, 0x00002a6au, 0x00002a7au, 0x0004007cu, 0x00000052u, 0x00002a7cu, 0x00002a77u, 0x0004007cu, 0x00000008u, 0x00002a7eu, 0x00002a7au, 0x00050051u, 0x00000008u, 0x00002a7fu, 0x00002a7cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002a80u, 0x00002a7cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002a81u, 0x00002a7cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002a82u, 0x00002a7fu, 0x00002a80u, 0x00002a81u, 0x00002a7eu, 0x0003003eu, 0x00002a6bu, 0x00002a82u, 0x0003003eu, 0x00002a20u, 0x00002a82u, 0x000200f9u, 0x00002a51u, 0x000200f8u, 0x00002a52u, 0x0003003eu, 0x00002a21u, 0x00002a4fu, 0x000500c2u, 0x00000006u, 0x00002a5du, 0x00002a4fu, 0x000001e0u, 0x0003003eu, 0x00002a59u, 0x00002a5du, 0x000500c7u, 0x00000006u, 0x00002a5fu, 0x00002a4fu, 0x00000689u, 0x0003003eu, 0x00002a5au, 0x00002a5fu, 0x0004007cu, 0x00000008u, 0x00002a61u, 0x00002a5du, 0x0004007cu, 0x00000008u, 0x00002a67u, 0x00002a5fu, 0x00070050u, 0x00000009u, 0x00002a68u, 0x00002a61u, 0x00002a61u, 0x00002a61u, 0x00002a67u, 0x0003003eu, 0x00002a5bu, 0x00002a68u, 0x0003003eu, 0x00002a20u, 0x00002a68u, 0x000200f9u, 0x00002a51u, 0x000200f8u, 0x00002a51u, 0x000700f5u, 0x00000009u, 0x0000715cu, 0x00002a68u, 0x00002a52u, 0x00002a82u, 0x00002a53u, 0x0003003eu, 0x00002a23u, 0x0000715cu, 0x0003003eu, 0x00002473u, 0x0000715cu, 0x000300f7u, 0x00002618u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00002619u, 0x00002618u, 0x000200f8u, 0x00002619u, 0x00050050u, 0x0000004du, 0x0000261cu, 0x00006ed2u, 0x000025dcu, 0x0004007cu, 0x000000a0u, 0x0000261du, 0x0000261cu, 0x0003003eu, 0x00005b69u, 0x00002428u, 0x0003003eu, 0x00005b6au, 0x0000242bu, 0x0003003eu, 0x000024b2u, 0x000018feu, 0x0003003eu, 0x000024b3u, 0x0000261du, 0x0003003eu, 0x000024b4u, 0x0000032au, 0x0003003eu, 0x000024b5u, 0x00002606u, 0x0003003eu, 0x000024b6u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002a8fu, 0x000024b3u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002a90u, 0x00002a8fu, 0x00050084u, 0x00000006u, 0x00002a91u, 0x0000242bu, 0x00002a90u, 0x00050080u, 0x00000006u, 0x00002a92u, 0x00002428u, 0x00002a91u, 0x0003003eu, 0x00002a83u, 0x00002a92u, 0x00050041u, 0x00000007u, 0x00002a93u, 0x000024b3u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002a94u, 0x00002a93u, 0x00050084u, 0x00000006u, 0x00002a95u, 0x00002a94u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00002a97u, 0x00002a92u, 0x00002a95u, 0x0003003eu, 0x00002a83u, 0x00002a97u, 0x000500c7u, 0x00000006u, 0x00002a99u, 0x00002a97u, 0x00000767u, 0x0003003eu, 0x00002a83u, 0x00002a99u, 0x000500c2u, 0x00000006u, 0x00002a9bu, 0x00002a99u, 0x00000194u, 0x0003003eu, 0x00002a84u, 0x00002a9bu, 0x0004003du, 0x00000006u, 0x00002a9du, 0x00002a8fu, 0x000500c7u, 0x00000006u, 0x00002a9eu, 0x00002a9du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002a9fu, 0x00002a9eu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00002aa1u, 0x00002a9bu, 0x00002a9fu, 0x0003003eu, 0x00002a84u, 0x00002aa1u, 0x000500c6u, 0x00000006u, 0x00002aa3u, 0x00002aa1u, 0x0000032au, 0x0003003eu, 0x00002a84u, 0x00002aa3u, 0x00080041u, 0x000001f2u, 0x00002aa6u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002aa3u, 0x0004003du, 0x000001adu, 0x00002aa7u, 0x00002aa6u, 0x00040071u, 0x00000006u, 0x00002aa8u, 0x00002aa7u, 0x0003003eu, 0x00002a85u, 0x00002aa8u, 0x000500c2u, 0x00000006u, 0x00002aaau, 0x00002aa8u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00002aabu, 0x00002aaau, 0x00000836u, 0x00050080u, 0x00000006u, 0x00002aadu, 0x00002aabu, 0x0000032au, 0x0003003eu, 0x00002a86u, 0x00002aadu, 0x000500c6u, 0x00000006u, 0x00002ab0u, 0x00002aadu, 0x00002606u, 0x0003003eu, 0x00002a86u, 0x00002ab0u, 0x000500c5u, 0x00000006u, 0x00002ab3u, 0x00000798u, 0x00002ab0u, 0x00080041u, 0x000001f2u, 0x00002ab4u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002ab3u, 0x0004003du, 0x000001adu, 0x00002ab5u, 0x00002ab4u, 0x00040071u, 0x00000006u, 0x00002ab6u, 0x00002ab5u, 0x0003003eu, 0x00002a85u, 0x00002ab6u, 0x000300f7u, 0x00002ab8u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002ab9u, 0x00002abau, 0x000200f8u, 0x00002abau, 0x0003003eu, 0x00002a89u, 0x00002ab6u, 0x00060050u, 0x000002b6u, 0x00002ad4u, 0x00002ab6u, 0x00002ab6u, 0x00002ab6u, 0x000500c2u, 0x000002b6u, 0x00002ad5u, 0x00002ad4u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002ad7u, 0x00002ad5u, 0x0000b1c0u, 0x0003003eu, 0x00002ad0u, 0x00002ad7u, 0x000500c4u, 0x000002b6u, 0x00002adau, 0x00002ad7u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002addu, 0x00002ad7u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002adeu, 0x00002adau, 0x00002addu, 0x0003003eu, 0x00002ad0u, 0x00002adeu, 0x000500c7u, 0x00000006u, 0x00002ae0u, 0x00002ab6u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002ae1u, 0x00002ae0u, 0x00000689u, 0x0003003eu, 0x00002ad1u, 0x00002ae1u, 0x0004007cu, 0x00000052u, 0x00002ae3u, 0x00002adeu, 0x0004007cu, 0x00000008u, 0x00002ae5u, 0x00002ae1u, 0x00050051u, 0x00000008u, 0x00002ae6u, 0x00002ae3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002ae7u, 0x00002ae3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002ae8u, 0x00002ae3u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002ae9u, 0x00002ae6u, 0x00002ae7u, 0x00002ae8u, 0x00002ae5u, 0x0003003eu, 0x00002ad2u, 0x00002ae9u, 0x0003003eu, 0x00002a87u, 0x00002ae9u, 0x000200f9u, 0x00002ab8u, 0x000200f8u, 0x00002ab9u, 0x0003003eu, 0x00002a88u, 0x00002ab6u, 0x000500c2u, 0x00000006u, 0x00002ac4u, 0x00002ab6u, 0x000001e0u, 0x0003003eu, 0x00002ac0u, 0x00002ac4u, 0x000500c7u, 0x00000006u, 0x00002ac6u, 0x00002ab6u, 0x00000689u, 0x0003003eu, 0x00002ac1u, 0x00002ac6u, 0x0004007cu, 0x00000008u, 0x00002ac8u, 0x00002ac4u, 0x0004007cu, 0x00000008u, 0x00002aceu, 0x00002ac6u, 0x00070050u, 0x00000009u, 0x00002acfu, 0x00002ac8u, 0x00002ac8u, 0x00002ac8u, 0x00002aceu, 0x0003003eu, 0x00002ac2u, 0x00002acfu, 0x0003003eu, 0x00002a87u, 0x00002acfu, 0x000200f9u, 0x00002ab8u, 0x000200f8u, 0x00002ab8u, 0x000700f5u, 0x00000009u, 0x00007171u, 0x00002acfu, 0x00002ab9u, 0x00002ae9u, 0x00002abau, 0x0003003eu, 0x00002a8au, 0x00007171u, 0x0003003eu, 0x0000247bu, 0x00007171u, 0x00050050u, 0x0000004du, 0x00002625u, 0x00006e94u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002626u, 0x00002625u, 0x0003003eu, 0x00005b6du, 0x00002428u, 0x0003003eu, 0x00005b6eu, 0x0000242bu, 0x0003003eu, 0x000024b8u, 0x000018feu, 0x0003003eu, 0x000024b9u, 0x00002626u, 0x0003003eu, 0x000024bau, 0x0000032eu, 0x0003003eu, 0x000024bbu, 0x00002606u, 0x0003003eu, 0x000024bcu, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002af6u, 0x000024b9u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002af7u, 0x00002af6u, 0x00050084u, 0x00000006u, 0x00002af8u, 0x0000242bu, 0x00002af7u, 0x00050080u, 0x00000006u, 0x00002af9u, 0x00002428u, 0x00002af8u, 0x0003003eu, 0x00002aeau, 0x00002af9u, 0x00050041u, 0x00000007u, 0x00002afau, 0x000024b9u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002afbu, 0x00002afau, 0x00050084u, 0x00000006u, 0x00002afcu, 0x00002afbu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00002afeu, 0x00002af9u, 0x00002afcu, 0x0003003eu, 0x00002aeau, 0x00002afeu, 0x000500c7u, 0x00000006u, 0x00002b00u, 0x00002afeu, 0x00000767u, 0x0003003eu, 0x00002aeau, 0x00002b00u, 0x000500c2u, 0x00000006u, 0x00002b02u, 0x00002b00u, 0x00000194u, 0x0003003eu, 0x00002aebu, 0x00002b02u, 0x0004003du, 0x00000006u, 0x00002b04u, 0x00002af6u, 0x000500c7u, 0x00000006u, 0x00002b05u, 0x00002b04u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002b06u, 0x00002b05u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00002b08u, 0x00002b02u, 0x00002b06u, 0x0003003eu, 0x00002aebu, 0x00002b08u, 0x000500c6u, 0x00000006u, 0x00002b0au, 0x00002b08u, 0x0000032au, 0x0003003eu, 0x00002aebu, 0x00002b0au, 0x00080041u, 0x000001f2u, 0x00002b0du, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002b0au, 0x0004003du, 0x000001adu, 0x00002b0eu, 0x00002b0du, 0x00040071u, 0x00000006u, 0x00002b0fu, 0x00002b0eu, 0x0003003eu, 0x00002aecu, 0x00002b0fu, 0x000500c2u, 0x00000006u, 0x00002b11u, 0x00002b0fu, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00002b12u, 0x00002b11u, 0x00000836u, 0x00050080u, 0x00000006u, 0x00002b14u, 0x00002b12u, 0x0000032eu, 0x0003003eu, 0x00002aedu, 0x00002b14u, 0x000500c6u, 0x00000006u, 0x00002b17u, 0x00002b14u, 0x00002606u, 0x0003003eu, 0x00002aedu, 0x00002b17u, 0x000500c5u, 0x00000006u, 0x00002b1au, 0x00000798u, 0x00002b17u, 0x00080041u, 0x000001f2u, 0x00002b1bu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002b1au, 0x0004003du, 0x000001adu, 0x00002b1cu, 0x00002b1bu, 0x00040071u, 0x00000006u, 0x00002b1du, 0x00002b1cu, 0x0003003eu, 0x00002aecu, 0x00002b1du, 0x000300f7u, 0x00002b1fu, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002b20u, 0x00002b21u, 0x000200f8u, 0x00002b21u, 0x0003003eu, 0x00002af0u, 0x00002b1du, 0x00060050u, 0x000002b6u, 0x00002b3bu, 0x00002b1du, 0x00002b1du, 0x00002b1du, 0x000500c2u, 0x000002b6u, 0x00002b3cu, 0x00002b3bu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002b3eu, 0x00002b3cu, 0x0000b1c0u, 0x0003003eu, 0x00002b37u, 0x00002b3eu, 0x000500c4u, 0x000002b6u, 0x00002b41u, 0x00002b3eu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002b44u, 0x00002b3eu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002b45u, 0x00002b41u, 0x00002b44u, 0x0003003eu, 0x00002b37u, 0x00002b45u, 0x000500c7u, 0x00000006u, 0x00002b47u, 0x00002b1du, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002b48u, 0x00002b47u, 0x00000689u, 0x0003003eu, 0x00002b38u, 0x00002b48u, 0x0004007cu, 0x00000052u, 0x00002b4au, 0x00002b45u, 0x0004007cu, 0x00000008u, 0x00002b4cu, 0x00002b48u, 0x00050051u, 0x00000008u, 0x00002b4du, 0x00002b4au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002b4eu, 0x00002b4au, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002b4fu, 0x00002b4au, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002b50u, 0x00002b4du, 0x00002b4eu, 0x00002b4fu, 0x00002b4cu, 0x0003003eu, 0x00002b39u, 0x00002b50u, 0x0003003eu, 0x00002aeeu, 0x00002b50u, 0x000200f9u, 0x00002b1fu, 0x000200f8u, 0x00002b20u, 0x0003003eu, 0x00002aefu, 0x00002b1du, 0x000500c2u, 0x00000006u, 0x00002b2bu, 0x00002b1du, 0x000001e0u, 0x0003003eu, 0x00002b27u, 0x00002b2bu, 0x000500c7u, 0x00000006u, 0x00002b2du, 0x00002b1du, 0x00000689u, 0x0003003eu, 0x00002b28u, 0x00002b2du, 0x0004007cu, 0x00000008u, 0x00002b2fu, 0x00002b2bu, 0x0004007cu, 0x00000008u, 0x00002b35u, 0x00002b2du, 0x00070050u, 0x00000009u, 0x00002b36u, 0x00002b2fu, 0x00002b2fu, 0x00002b2fu, 0x00002b35u, 0x0003003eu, 0x00002b29u, 0x00002b36u, 0x0003003eu, 0x00002aeeu, 0x00002b36u, 0x000200f9u, 0x00002b1fu, 0x000200f8u, 0x00002b1fu, 0x000700f5u, 0x00000009u, 0x00007187u, 0x00002b36u, 0x00002b20u, 0x00002b50u, 0x00002b21u, 0x0003003eu, 0x00002af1u, 0x00007187u, 0x0003003eu, 0x00002483u, 0x00007187u, 0x000200f9u, 0x00002618u, 0x000200f8u, 0x00002618u, 0x000700f5u, 0x00000009u, 0x000073cbu, 0x000072a9u, 0x00002a51u, 0x00007187u, 0x00002b1fu, 0x000700f5u, 0x00000009u, 0x000072d6u, 0x000072a9u, 0x00002a51u, 0x00007171u, 0x00002b1fu, 0x000300f7u, 0x0000262du, 0x00000000u, 0x000400fau, 0x000025e7u, 0x0000262eu, 0x0000262du, 0x000200f8u, 0x0000262eu, 0x00050050u, 0x0000004du, 0x00002631u, 0x00006ed2u, 0x000025deu, 0x0004007cu, 0x000000a0u, 0x00002632u, 0x00002631u, 0x0003003eu, 0x00005b71u, 0x00002428u, 0x0003003eu, 0x00005b72u, 0x0000242bu, 0x0003003eu, 0x000024beu, 0x000018feu, 0x0003003eu, 0x000024bfu, 0x00002632u, 0x0003003eu, 0x000024c0u, 0x00000331u, 0x0003003eu, 0x000024c1u, 0x00002606u, 0x0003003eu, 0x000024c2u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00002b5du, 0x000024bfu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00002b5eu, 0x00002b5du, 0x00050084u, 0x00000006u, 0x00002b5fu, 0x0000242bu, 0x00002b5eu, 0x00050080u, 0x00000006u, 0x00002b60u, 0x00002428u, 0x00002b5fu, 0x0003003eu, 0x00002b51u, 0x00002b60u, 0x00050041u, 0x00000007u, 0x00002b61u, 0x000024bfu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00002b62u, 0x00002b61u, 0x00050084u, 0x00000006u, 0x00002b63u, 0x00002b62u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00002b65u, 0x00002b60u, 0x00002b63u, 0x0003003eu, 0x00002b51u, 0x00002b65u, 0x000500c7u, 0x00000006u, 0x00002b67u, 0x00002b65u, 0x00000767u, 0x0003003eu, 0x00002b51u, 0x00002b67u, 0x000500c2u, 0x00000006u, 0x00002b69u, 0x00002b67u, 0x00000194u, 0x0003003eu, 0x00002b52u, 0x00002b69u, 0x0004003du, 0x00000006u, 0x00002b6bu, 0x00002b5du, 0x000500c7u, 0x00000006u, 0x00002b6cu, 0x00002b6bu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00002b6du, 0x00002b6cu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00002b6fu, 0x00002b69u, 0x00002b6du, 0x0003003eu, 0x00002b52u, 0x00002b6fu, 0x000500c6u, 0x00000006u, 0x00002b71u, 0x00002b6fu, 0x0000032au, 0x0003003eu, 0x00002b52u, 0x00002b71u, 0x00080041u, 0x000001f2u, 0x00002b74u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002b71u, 0x0004003du, 0x000001adu, 0x00002b75u, 0x00002b74u, 0x00040071u, 0x00000006u, 0x00002b76u, 0x00002b75u, 0x0003003eu, 0x00002b53u, 0x00002b76u, 0x000500c2u, 0x00000006u, 0x00002b78u, 0x00002b76u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00002b79u, 0x00002b78u, 0x00000836u, 0x00050080u, 0x00000006u, 0x00002b7bu, 0x00002b79u, 0x00000331u, 0x0003003eu, 0x00002b54u, 0x00002b7bu, 0x000500c6u, 0x00000006u, 0x00002b7eu, 0x00002b7bu, 0x00002606u, 0x0003003eu, 0x00002b54u, 0x00002b7eu, 0x000500c5u, 0x00000006u, 0x00002b81u, 0x00000798u, 0x00002b7eu, 0x00080041u, 0x000001f2u, 0x00002b82u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00002b81u, 0x0004003du, 0x000001adu, 0x00002b83u, 0x00002b82u, 0x00040071u, 0x00000006u, 0x00002b84u, 0x00002b83u, 0x0003003eu, 0x00002b53u, 0x00002b84u, 0x000300f7u, 0x00002b86u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00002b87u, 0x00002b88u, 0x000200f8u, 0x00002b88u, 0x0003003eu, 0x00002b57u, 0x00002b84u, 0x00060050u, 0x000002b6u, 0x00002ba2u, 0x00002b84u, 0x00002b84u, 0x00002b84u, 0x000500c2u, 0x000002b6u, 0x00002ba3u, 0x00002ba2u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00002ba5u, 0x00002ba3u, 0x0000b1c0u, 0x0003003eu, 0x00002b9eu, 0x00002ba5u, 0x000500c4u, 0x000002b6u, 0x00002ba8u, 0x00002ba5u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00002babu, 0x00002ba5u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00002bacu, 0x00002ba8u, 0x00002babu, 0x0003003eu, 0x00002b9eu, 0x00002bacu, 0x000500c7u, 0x00000006u, 0x00002baeu, 0x00002b84u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00002bafu, 0x00002baeu, 0x00000689u, 0x0003003eu, 0x00002b9fu, 0x00002bafu, 0x0004007cu, 0x00000052u, 0x00002bb1u, 0x00002bacu, 0x0004007cu, 0x00000008u, 0x00002bb3u, 0x00002bafu, 0x00050051u, 0x00000008u, 0x00002bb4u, 0x00002bb1u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002bb5u, 0x00002bb1u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002bb6u, 0x00002bb1u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00002bb7u, 0x00002bb4u, 0x00002bb5u, 0x00002bb6u, 0x00002bb3u, 0x0003003eu, 0x00002ba0u, 0x00002bb7u, 0x0003003eu, 0x00002b55u, 0x00002bb7u, 0x000200f9u, 0x00002b86u, 0x000200f8u, 0x00002b87u, 0x0003003eu, 0x00002b56u, 0x00002b84u, 0x000500c2u, 0x00000006u, 0x00002b92u, 0x00002b84u, 0x000001e0u, 0x0003003eu, 0x00002b8eu, 0x00002b92u, 0x000500c7u, 0x00000006u, 0x00002b94u, 0x00002b84u, 0x00000689u, 0x0003003eu, 0x00002b8fu, 0x00002b94u, 0x0004007cu, 0x00000008u, 0x00002b96u, 0x00002b92u, 0x0004007cu, 0x00000008u, 0x00002b9cu, 0x00002b94u, 0x00070050u, 0x00000009u, 0x00002b9du, 0x00002b96u, 0x00002b96u, 0x00002b96u, 0x00002b9cu, 0x0003003eu, 0x00002b90u, 0x00002b9du, 0x0003003eu, 0x00002b55u, 0x00002b9du, 0x000200f9u, 0x00002b86u, 0x000200f8u, 0x00002b86u, 0x000700f5u, 0x00000009u, 0x000071b3u, 0x00002b9du, 0x00002b87u, 0x00002bb7u, 0x00002b88u, 0x0003003eu, 0x00002b58u, 0x000071b3u, 0x0003003eu, 0x0000248bu, 0x000071b3u, 0x000200f9u, 0x0000262du, 0x000200f8u, 0x0000262du, 0x000700f5u, 0x00000009u, 0x00007441u, 0x000072a9u, 0x00002618u, 0x000071b3u, 0x00002b86u, 0x000200f9u, 0x00002609u, 0x000200f8u, 0x00002609u, 0x000900f5u, 0x00000009u, 0x00007440u, 0x00007441u, 0x0000262du, 0x00007447u, 0x00002661u, 0x0000744cu, 0x0000268fu, 0x000900f5u, 0x00000009u, 0x000073c9u, 0x000073cbu, 0x0000262du, 0x000073d0u, 0x00002661u, 0x000073d4u, 0x0000268fu, 0x000900f5u, 0x00000009u, 0x0000734fu, 0x0000715cu, 0x0000262du, 0x00007104u, 0x00002661u, 0x000070a6u, 0x0000268fu, 0x000900f5u, 0x00000009u, 0x000072d4u, 0x000072d6u, 0x0000262du, 0x000072dcu, 0x00002661u, 0x000072e1u, 0x0000268fu, 0x000200f9u, 0x00002600u, 0x000200f8u, 0x00002600u, 0x000700f5u, 0x00000009u, 0x000073fau, 0x000072a9u, 0x000025fcu, 0x00007440u, 0x00002609u, 0x000700f5u, 0x00000009u, 0x00007383u, 0x000072a9u, 0x000025fcu, 0x000073c9u, 0x00002609u, 0x000700f5u, 0x00000009u, 0x00007309u, 0x000072a9u, 0x000025fcu, 0x0000734fu, 0x00002609u, 0x000700f5u, 0x00000009u, 0x0000728du, 0x000072a9u, 0x000025fcu, 0x000072d4u, 0x00002609u, 0x000200f9u, 0x000025fbu, 0x000200f8u, 0x000025fbu, 0x000700f5u, 0x00000009u, 0x000073f9u, 0x000073fau, 0x00002600u, 0x00007451u, 0x0000269cu, 0x000700f5u, 0x00000009u, 0x00007382u, 0x00007383u, 0x00002600u, 0x000073d7u, 0x0000269cu, 0x000700f5u, 0x00000009u, 0x00007308u, 0x00007309u, 0x00002600u, 0x0000735fu, 0x0000269cu, 0x000700f5u, 0x00000009u, 0x0000728cu, 0x0000728du, 0x00002600u, 0x000072e5u, 0x0000269cu, 0x000300f7u, 0x000028eau, 0x00000000u, 0x000400fau, 0x000025edu, 0x000028ebu, 0x000028ecu, 0x000200f8u, 0x000028ecu, 0x000300f7u, 0x00002918u, 0x00000000u, 0x000400fau, 0x000025e7u, 0x00002919u, 0x0000291au, 0x000200f8u, 0x0000291au, 0x000300f7u, 0x00002928u, 0x00000000u, 0x000400fau, 0x000025efu, 0x00002929u, 0x0000292au, 0x000200f8u, 0x0000292au, 0x0004003du, 0x0000004du, 0x0000292fu, 0x0000245fu, 0x0003003eu, 0x00002594u, 0x0000292fu, 0x000200f9u, 0x00002928u, 0x000200f8u, 0x00002929u, 0x0004003du, 0x0000004du, 0x0000292bu, 0x0000245fu, 0x0007004fu, 0x0000004du, 0x0000292cu, 0x0000292bu, 0x0000292bu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x0000292eu, 0x0000b1c5u, 0x0000292cu, 0x0003003eu, 0x00002594u, 0x0000292eu, 0x000200f9u, 0x00002928u, 0x000200f8u, 0x00002928u, 0x000700f5u, 0x0000004du, 0x0000728au, 0x0000292eu, 0x00002929u, 0x0000292fu, 0x0000292au, 0x00050051u, 0x00000008u, 0x00002931u, 0x0000728au, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002932u, 0x0000728au, 0x00000001u, 0x0003003eu, 0x00002593u, 0x0000728au, 0x00050082u, 0x00000009u, 0x00002936u, 0x0000728cu, 0x00007308u, 0x00050041u, 0x00000038u, 0x00002937u, 0x00002593u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00002938u, 0x00002937u, 0x00070050u, 0x00000009u, 0x00002939u, 0x00002938u, 0x00002938u, 0x00002938u, 0x00002938u, 0x00050084u, 0x00000009u, 0x0000293au, 0x00002936u, 0x00002939u, 0x0003003eu, 0x00002585u, 0x0000293au, 0x00050082u, 0x00000009u, 0x0000293du, 0x00007382u, 0x00007308u, 0x00050041u, 0x00000038u, 0x0000293eu, 0x00002593u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000293fu, 0x0000293eu, 0x00070050u, 0x00000009u, 0x00002940u, 0x0000293fu, 0x0000293fu, 0x0000293fu, 0x0000293fu, 0x00050084u, 0x00000009u, 0x00002941u, 0x0000293du, 0x00002940u, 0x00050080u, 0x00000009u, 0x00002943u, 0x0000293au, 0x00002941u, 0x0003003eu, 0x00002585u, 0x00002943u, 0x00050080u, 0x00000009u, 0x00002946u, 0x00002943u, 0x0000b1c6u, 0x0003003eu, 0x00002585u, 0x00002946u, 0x000500c3u, 0x00000009u, 0x00002949u, 0x00002946u, 0x0000b1c7u, 0x0003003eu, 0x00002585u, 0x00002949u, 0x00050080u, 0x00000009u, 0x0000294cu, 0x00002949u, 0x00007308u, 0x0003003eu, 0x00002585u, 0x0000294cu, 0x000200f9u, 0x00002918u, 0x000200f8u, 0x00002919u, 0x00050080u, 0x00000009u, 0x0000291du, 0x00007308u, 0x00007382u, 0x00050080u, 0x00000009u, 0x0000291fu, 0x0000291du, 0x0000728cu, 0x00050080u, 0x00000009u, 0x00002921u, 0x0000291fu, 0x000073f9u, 0x00050080u, 0x00000009u, 0x00002923u, 0x00002921u, 0x0000b1c4u, 0x000500c3u, 0x00000009u, 0x00002925u, 0x00002923u, 0x0000b1c4u, 0x0003003eu, 0x00002585u, 0x00002925u, 0x000200f9u, 0x00002918u, 0x000200f8u, 0x00002918u, 0x000700f5u, 0x00000009u, 0x00007535u, 0x00002925u, 0x00002919u, 0x0000294cu, 0x00002928u, 0x000200f9u, 0x000028eau, 0x000200f8u, 0x000028ebu, 0x000300f7u, 0x000028eeu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000028efu, 0x000028f0u, 0x000200f8u, 0x000028f0u, 0x0003003eu, 0x00002585u, 0x00007308u, 0x000200f9u, 0x000028eeu, 0x000200f8u, 0x000028efu, 0x000500c7u, 0x00000008u, 0x000028f2u, 0x00006e94u, 0x00000194u, 0x000500c4u, 0x00000008u, 0x000028f3u, 0x000028f2u, 0x0000019du, 0x0004003du, 0x00000008u, 0x000028f5u, 0x000025bdu, 0x000500c3u, 0x00000008u, 0x000028f6u, 0x000028f5u, 0x00000194u, 0x000500c5u, 0x00000008u, 0x000028f7u, 0x000028f3u, 0x000028f6u, 0x0003003eu, 0x00002586u, 0x000028f7u, 0x0004003du, 0x00000008u, 0x000028fau, 0x000025bfu, 0x00050050u, 0x0000004du, 0x000028fbu, 0x000028f7u, 0x000028fau, 0x0007004fu, 0x0000004du, 0x000028fdu, 0x00007308u, 0x00007308u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002588u, 0x000028fdu, 0x0007004fu, 0x0000004du, 0x000028ffu, 0x0000728cu, 0x0000728cu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002589u, 0x000028ffu, 0x0007004fu, 0x0000004du, 0x00002901u, 0x00007382u, 0x00007382u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000258au, 0x00002901u, 0x0007004fu, 0x0000004du, 0x00002903u, 0x000073f9u, 0x000073f9u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000258bu, 0x00002903u, 0x0003003eu, 0x0000258cu, 0x000028fbu, 0x00050041u, 0x00000038u, 0x00003ac2u, 0x0000258cu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003ac3u, 0x00003ac2u, 0x00050041u, 0x00000038u, 0x00003ac4u, 0x0000258cu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003ac5u, 0x00003ac4u, 0x00050080u, 0x00000008u, 0x00003ac6u, 0x00003ac3u, 0x00003ac5u, 0x0003003eu, 0x00003abcu, 0x00003ac6u, 0x000500afu, 0x00000058u, 0x00003ac8u, 0x00003ac6u, 0x000002e0u, 0x00050050u, 0x00000489u, 0x00003acbu, 0x00003ac8u, 0x00003ac8u, 0x000600a9u, 0x0000004du, 0x00003accu, 0x00003acbu, 0x00002903u, 0x000028fdu, 0x0003003eu, 0x00003abdu, 0x00003accu, 0x000300f7u, 0x00003acfu, 0x00000000u, 0x000400fau, 0x00003ac8u, 0x00003ad0u, 0x00003ad1u, 0x000200f8u, 0x00003ad1u, 0x0004003du, 0x0000004du, 0x00003ad6u, 0x0000258cu, 0x0003003eu, 0x00003abfu, 0x00003ad6u, 0x000200f9u, 0x00003acfu, 0x000200f8u, 0x00003ad0u, 0x0004003du, 0x0000004du, 0x00003ad2u, 0x0000258cu, 0x0007004fu, 0x0000004du, 0x00003ad3u, 0x00003ad2u, 0x00003ad2u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x00003ad5u, 0x0000b1c5u, 0x00003ad3u, 0x0003003eu, 0x00003abfu, 0x00003ad5u, 0x000200f9u, 0x00003acfu, 0x000200f8u, 0x00003acfu, 0x000700f5u, 0x0000004du, 0x000074d8u, 0x00003ad5u, 0x00003ad0u, 0x00003ad6u, 0x00003ad1u, 0x00050051u, 0x00000008u, 0x00003ad8u, 0x000074d8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003ad9u, 0x000074d8u, 0x00000001u, 0x0003003eu, 0x00003abeu, 0x000074d8u, 0x00050082u, 0x0000004du, 0x00003addu, 0x000028ffu, 0x00003accu, 0x00050041u, 0x00000038u, 0x00003adeu, 0x00003abeu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003adfu, 0x00003adeu, 0x00050050u, 0x0000004du, 0x00003ae0u, 0x00003adfu, 0x00003adfu, 0x00050084u, 0x0000004du, 0x00003ae1u, 0x00003addu, 0x00003ae0u, 0x0003003eu, 0x00003ac0u, 0x00003ae1u, 0x00050082u, 0x0000004du, 0x00003ae4u, 0x00002901u, 0x00003accu, 0x00050041u, 0x00000038u, 0x00003ae5u, 0x00003abeu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003ae6u, 0x00003ae5u, 0x00050050u, 0x0000004du, 0x00003ae7u, 0x00003ae6u, 0x00003ae6u, 0x00050084u, 0x0000004du, 0x00003ae8u, 0x00003ae4u, 0x00003ae7u, 0x00050080u, 0x0000004du, 0x00003aeau, 0x00003ae1u, 0x00003ae8u, 0x0003003eu, 0x00003ac0u, 0x00003aeau, 0x00050080u, 0x0000004du, 0x00003aedu, 0x00003aeau, 0x00000bcfu, 0x0003003eu, 0x00003ac0u, 0x00003aedu, 0x000500c3u, 0x0000004du, 0x00003af0u, 0x00003aedu, 0x0000b1bcu, 0x0003003eu, 0x00003ac0u, 0x00003af0u, 0x00050080u, 0x0000004du, 0x00003af3u, 0x00003af0u, 0x00003accu, 0x0003003eu, 0x00003ac0u, 0x00003af3u, 0x0003003eu, 0x00003ac1u, 0x00003af3u, 0x0003003eu, 0x00002587u, 0x00003af3u, 0x0007004fu, 0x0000004du, 0x00002906u, 0x00007308u, 0x00007308u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000258eu, 0x00002906u, 0x0007004fu, 0x0000004du, 0x00002908u, 0x0000728cu, 0x0000728cu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000258fu, 0x00002908u, 0x0007004fu, 0x0000004du, 0x0000290au, 0x00007382u, 0x00007382u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002590u, 0x0000290au, 0x0007004fu, 0x0000004du, 0x0000290cu, 0x000073f9u, 0x000073f9u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00002591u, 0x0000290cu, 0x0004003du, 0x0000004du, 0x0000290du, 0x0000245fu, 0x0003003eu, 0x00002592u, 0x0000290du, 0x00050041u, 0x00000038u, 0x00003afbu, 0x00002592u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003afcu, 0x00003afbu, 0x00050041u, 0x00000038u, 0x00003afdu, 0x00002592u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003afeu, 0x00003afdu, 0x00050080u, 0x00000008u, 0x00003affu, 0x00003afcu, 0x00003afeu, 0x0003003eu, 0x00003af5u, 0x00003affu, 0x000500afu, 0x00000058u, 0x00003b01u, 0x00003affu, 0x000002e0u, 0x00050050u, 0x00000489u, 0x00003b04u, 0x00003b01u, 0x00003b01u, 0x000600a9u, 0x0000004du, 0x00003b05u, 0x00003b04u, 0x0000290cu, 0x00002906u, 0x0003003eu, 0x00003af6u, 0x00003b05u, 0x000300f7u, 0x00003b08u, 0x00000000u, 0x000400fau, 0x00003b01u, 0x00003b09u, 0x00003b0au, 0x000200f8u, 0x00003b0au, 0x0004003du, 0x0000004du, 0x00003b0fu, 0x00002592u, 0x0003003eu, 0x00003af8u, 0x00003b0fu, 0x000200f9u, 0x00003b08u, 0x000200f8u, 0x00003b09u, 0x0004003du, 0x0000004du, 0x00003b0bu, 0x00002592u, 0x0007004fu, 0x0000004du, 0x00003b0cu, 0x00003b0bu, 0x00003b0bu, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x00003b0eu, 0x0000b1c5u, 0x00003b0cu, 0x0003003eu, 0x00003af8u, 0x00003b0eu, 0x000200f9u, 0x00003b08u, 0x000200f8u, 0x00003b08u, 0x000700f5u, 0x0000004du, 0x000074e0u, 0x00003b0eu, 0x00003b09u, 0x00003b0fu, 0x00003b0au, 0x00050051u, 0x00000008u, 0x00003b11u, 0x000074e0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003b12u, 0x000074e0u, 0x00000001u, 0x0003003eu, 0x00003af7u, 0x000074e0u, 0x00050082u, 0x0000004du, 0x00003b16u, 0x00002908u, 0x00003b05u, 0x00050041u, 0x00000038u, 0x00003b17u, 0x00003af7u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003b18u, 0x00003b17u, 0x00050050u, 0x0000004du, 0x00003b19u, 0x00003b18u, 0x00003b18u, 0x00050084u, 0x0000004du, 0x00003b1au, 0x00003b16u, 0x00003b19u, 0x0003003eu, 0x00003af9u, 0x00003b1au, 0x00050082u, 0x0000004du, 0x00003b1du, 0x0000290au, 0x00003b05u, 0x00050041u, 0x00000038u, 0x00003b1eu, 0x00003af7u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003b1fu, 0x00003b1eu, 0x00050050u, 0x0000004du, 0x00003b20u, 0x00003b1fu, 0x00003b1fu, 0x00050084u, 0x0000004du, 0x00003b21u, 0x00003b1du, 0x00003b20u, 0x00050080u, 0x0000004du, 0x00003b23u, 0x00003b1au, 0x00003b21u, 0x0003003eu, 0x00003af9u, 0x00003b23u, 0x00050080u, 0x0000004du, 0x00003b26u, 0x00003b23u, 0x00000bcfu, 0x0003003eu, 0x00003af9u, 0x00003b26u, 0x000500c3u, 0x0000004du, 0x00003b29u, 0x00003b26u, 0x0000b1bcu, 0x0003003eu, 0x00003af9u, 0x00003b29u, 0x00050080u, 0x0000004du, 0x00003b2cu, 0x00003b29u, 0x00003b05u, 0x0003003eu, 0x00003af9u, 0x00003b2cu, 0x0003003eu, 0x00003afau, 0x00003b2cu, 0x0003003eu, 0x0000258du, 0x00003b2cu, 0x00050051u, 0x00000008u, 0x00002911u, 0x00003af3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002912u, 0x00003af3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00002913u, 0x00003b2cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00002914u, 0x00003b2cu, 0x00000001u, 0x00070050u, 0x00000009u, 0x00002915u, 0x00002911u, 0x00002912u, 0x00002913u, 0x00002914u, 0x0003003eu, 0x00002585u, 0x00002915u, 0x000200f9u, 0x000028eeu, 0x000200f8u, 0x000028eeu, 0x000700f5u, 0x00000009u, 0x00007534u, 0x00002915u, 0x00003b08u, 0x00007308u, 0x000028f0u, 0x000200f9u, 0x000028eau, 0x000200f8u, 0x000028eau, 0x000700f5u, 0x00000009u, 0x00007533u, 0x00007534u, 0x000028eeu, 0x00007535u, 0x00002918u, 0x0003003eu, 0x00002595u, 0x00007533u, 0x0003003eu, 0x0000186du, 0x00007533u, 0x000400a8u, 0x00000058u, 0x00001a40u, 0x00001927u, 0x000400a8u, 0x00000058u, 0x00001a42u, 0x00001963u, 0x000500a7u, 0x00000058u, 0x00001a43u, 0x00001a40u, 0x00001a42u, 0x000300f7u, 0x00001a44u, 0x00000000u, 0x000400fau, 0x00001a43u, 0x00001a45u, 0x00001a44u, 0x000200f8u, 0x00001a45u, 0x0003003eu, 0x00001877u, 0x00007533u, 0x0003003eu, 0x00001878u, 0x000020f0u, 0x00050051u, 0x00000008u, 0x00003b35u, 0x00007533u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003b36u, 0x00007533u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003b37u, 0x00007533u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00003b38u, 0x00007533u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00003b3au, 0x00007533u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00003b2eu, 0x00003b3au, 0x00050041u, 0x00000038u, 0x00003b3bu, 0x00003b2eu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00003b3cu, 0x00003b3bu, 0x00050041u, 0x00000038u, 0x00003b3du, 0x00001878u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003b3eu, 0x00003b3du, 0x00050041u, 0x00000038u, 0x00003b3fu, 0x00003b2eu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003b40u, 0x00003b3fu, 0x00050084u, 0x00000008u, 0x00003b41u, 0x00003b3eu, 0x00003b40u, 0x00050080u, 0x00000008u, 0x00003b42u, 0x00003b41u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00003b43u, 0x00003b42u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00003b44u, 0x00003b3cu, 0x00003b43u, 0x0003003eu, 0x00003b2fu, 0x00003b44u, 0x0004003du, 0x00000008u, 0x00003b46u, 0x00003b3bu, 0x00050041u, 0x00000038u, 0x00003b47u, 0x00001878u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003b48u, 0x00003b47u, 0x00050041u, 0x00000038u, 0x00003b49u, 0x00003b2eu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003b4au, 0x00003b49u, 0x00050084u, 0x00000008u, 0x00003b4bu, 0x00003b48u, 0x00003b4au, 0x00050041u, 0x00000038u, 0x00003b4cu, 0x00001878u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00003b4du, 0x00003b4cu, 0x0004003du, 0x00000008u, 0x00003b4fu, 0x00003b3fu, 0x00050084u, 0x00000008u, 0x00003b50u, 0x00003b4du, 0x00003b4fu, 0x00050080u, 0x00000008u, 0x00003b51u, 0x00003b4bu, 0x00003b50u, 0x00050080u, 0x00000008u, 0x00003b52u, 0x00003b51u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00003b53u, 0x00003b52u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00003b54u, 0x00003b46u, 0x00003b53u, 0x0003003eu, 0x00003b30u, 0x00003b54u, 0x0004003du, 0x00000008u, 0x00003b56u, 0x00003b3bu, 0x00050041u, 0x00000038u, 0x00003b57u, 0x00001878u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00003b58u, 0x00003b57u, 0x0004003du, 0x00000008u, 0x00003b5au, 0x00003b49u, 0x00050084u, 0x00000008u, 0x00003b5bu, 0x00003b58u, 0x00003b5au, 0x00050080u, 0x00000008u, 0x00003b5cu, 0x00003b5bu, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00003b5du, 0x00003b5cu, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00003b5eu, 0x00003b56u, 0x00003b5du, 0x0003003eu, 0x00003b31u, 0x00003b5eu, 0x0004003du, 0x00000008u, 0x00003b60u, 0x00003b3bu, 0x0003003eu, 0x00003b32u, 0x00003b60u, 0x00070050u, 0x00000009u, 0x00003b65u, 0x00003b44u, 0x00003b54u, 0x00003b5eu, 0x00003b60u, 0x0003003eu, 0x00003b33u, 0x00003b65u, 0x0003003eu, 0x0000186du, 0x00003b65u, 0x000200f9u, 0x00001a44u, 0x000200f8u, 0x00001a44u, 0x000700f5u, 0x00000009u, 0x00008428u, 0x00007533u, 0x000028eau, 0x00003b65u, 0x00001a45u, 0x000200f9u, 0x00001a2au, 0x000200f8u, 0x00001a2au, 0x000700f5u, 0x00000009u, 0x000083f4u, 0x000072a9u, 0x00001a18u, 0x00008428u, 0x00001a44u, 0x000300f7u, 0x00001a4bu, 0x00000000u, 0x000400fau, 0x0000195au, 0x00001a4cu, 0x00001a4bu, 0x000200f8u, 0x00001a4cu, 0x00050080u, 0x00000008u, 0x00001a55u, 0x000018e8u, 0x00000194u, 0x00050080u, 0x00000008u, 0x00001a56u, 0x000018e3u, 0x00001a55u, 0x00070041u, 0x000001f2u, 0x00001a57u, 0x0000024bu, 0x00000185u, 0x00001a56u, 0x000001e0u, 0x0004003du, 0x000001adu, 0x00001a58u, 0x00001a57u, 0x00040071u, 0x00000006u, 0x00001a59u, 0x00001a58u, 0x000500abu, 0x00000058u, 0x00001a5au, 0x00001a59u, 0x000002d7u, 0x0003003eu, 0x00001879u, 0x00001a5au, 0x000500afu, 0x00000058u, 0x00001a5du, 0x00001b7eu, 0x000001e0u, 0x0003003eu, 0x0000187au, 0x00001a5du, 0x000300f7u, 0x00001a60u, 0x00000000u, 0x000400fau, 0x00001977u, 0x00001a61u, 0x00001a62u, 0x000200f8u, 0x00001a62u, 0x0003003eu, 0x0000187cu, 0x00001b77u, 0x000200f9u, 0x00001a60u, 0x000200f8u, 0x00001a61u, 0x0003003eu, 0x0000187cu, 0x00001b7au, 0x000200f9u, 0x00001a60u, 0x000200f8u, 0x00001a60u, 0x000600a9u, 0x00000008u, 0x0000b1dfu, 0x00001977u, 0x00001b7au, 0x00001b77u, 0x000500aau, 0x00000058u, 0x00001a68u, 0x00006a56u, 0x0000b1dfu, 0x0003003eu, 0x0000187bu, 0x00001a68u, 0x000500a7u, 0x00000058u, 0x00001a6bu, 0x00001a68u, 0x00001a5du, 0x000500a7u, 0x00000058u, 0x00001a6du, 0x00001a6bu, 0x00001a5au, 0x000300f7u, 0x00001a6eu, 0x00000000u, 0x000400fau, 0x00001a6du, 0x00001a6fu, 0x00001a70u, 0x000200f8u, 0x00001a70u, 0x00050084u, 0x00000008u, 0x00001a8cu, 0x000019e6u, 0x00000594u, 0x00050080u, 0x00000008u, 0x00001a8du, 0x000019e4u, 0x00001a8cu, 0x0003003eu, 0x00001882u, 0x00001b67u, 0x0003003eu, 0x00001883u, 0x00001b94u, 0x0003003eu, 0x00001884u, 0x00001a8du, 0x0003003eu, 0x00001885u, 0x00001930u, 0x0008004fu, 0x00000052u, 0x00003bf7u, 0x00001b67u, 0x00001b67u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x00000052u, 0x00003bf9u, 0x00001b94u, 0x00001b94u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x00003bfbu, 0x00003bf9u, 0x0000b1b5u, 0x000500c3u, 0x00000052u, 0x00003bfdu, 0x00003bfbu, 0x00002165u, 0x00060050u, 0x00000052u, 0x00003bffu, 0x00001a8du, 0x00001a8du, 0x00001a8du, 0x00050084u, 0x00000052u, 0x00003c00u, 0x00003bfdu, 0x00003bffu, 0x00050080u, 0x00000052u, 0x00003c01u, 0x00003bf7u, 0x00003c00u, 0x0003003eu, 0x00003befu, 0x00003c01u, 0x000500c3u, 0x00000052u, 0x00003c04u, 0x00003c01u, 0x0000b1b6u, 0x0003003eu, 0x00003befu, 0x00003c04u, 0x000300f7u, 0x00003c06u, 0x00000000u, 0x000400fau, 0x00001930u, 0x00003c07u, 0x00003c08u, 0x000200f8u, 0x00003c08u, 0x0003003eu, 0x00003bf4u, 0x00003c04u, 0x0007004fu, 0x0000004du, 0x00003c98u, 0x00003c04u, 0x00003c04u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003c96u, 0x00003c98u, 0x0003003eu, 0x00003bf0u, 0x00003c98u, 0x000200f9u, 0x00003c06u, 0x000200f8u, 0x00003c07u, 0x0003003eu, 0x00003bf2u, 0x00003c04u, 0x00050041u, 0x00000038u, 0x00003c1au, 0x00003bf2u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00003c1bu, 0x00003c1au, 0x0003003eu, 0x00003c10u, 0x00003c1bu, 0x000500b3u, 0x00000058u, 0x00003c1du, 0x00003c1bu, 0x00000185u, 0x0003003eu, 0x00003c11u, 0x00003c1du, 0x000500c7u, 0x00000008u, 0x00003c1fu, 0x00003c1bu, 0x0000045cu, 0x0003003eu, 0x00003c10u, 0x00003c1fu, 0x0003003eu, 0x00003c13u, 0x00003c1fu, 0x0006000cu, 0x00000008u, 0x00003c7bu, 0x00000001u, 0x0000004au, 0x00003c1fu, 0x00050082u, 0x00000008u, 0x00003c7cu, 0x00000205u, 0x00003c7bu, 0x0007000cu, 0x00000008u, 0x00003c7du, 0x00000001u, 0x00000027u, 0x00003c7cu, 0x00000205u, 0x0003003eu, 0x00003c73u, 0x00003c7du, 0x000500c4u, 0x00000008u, 0x00003c80u, 0x00003c1fu, 0x00003c7du, 0x000500c7u, 0x00000008u, 0x00003c81u, 0x00003c80u, 0x00000375u, 0x0003003eu, 0x00003c74u, 0x00003c81u, 0x000500c7u, 0x00000008u, 0x00003c83u, 0x00003c81u, 0x000002eeu, 0x0003003eu, 0x00003c75u, 0x00003c83u, 0x000500c3u, 0x00000008u, 0x00003c85u, 0x00003c81u, 0x000001e0u, 0x0003003eu, 0x00003c77u, 0x0000043au, 0x00050041u, 0x00000068u, 0x00003c86u, 0x00003c77u, 0x00003c85u, 0x0004003du, 0x0000004du, 0x00003c87u, 0x00003c86u, 0x00050051u, 0x00000008u, 0x00003c88u, 0x00003c87u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003c89u, 0x00003c87u, 0x00000001u, 0x0003003eu, 0x00003c76u, 0x00003c87u, 0x00050041u, 0x00000038u, 0x00003c8bu, 0x00003c76u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003c8cu, 0x00003c8bu, 0x00050084u, 0x00000008u, 0x00003c8eu, 0x00003c8cu, 0x00003c83u, 0x000500c3u, 0x00000008u, 0x00003c8fu, 0x00003c8eu, 0x000001ecu, 0x00050041u, 0x00000038u, 0x00003c90u, 0x00003c76u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003c91u, 0x00003c90u, 0x00050080u, 0x00000008u, 0x00003c92u, 0x00003c8fu, 0x00003c91u, 0x0003003eu, 0x00003c78u, 0x00003c92u, 0x00050050u, 0x0000004du, 0x00003c95u, 0x00003c92u, 0x00003c7du, 0x0003003eu, 0x00003c79u, 0x00003c95u, 0x0003003eu, 0x00003c12u, 0x00003c95u, 0x00050041u, 0x00000038u, 0x00003c22u, 0x00003c12u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003c23u, 0x00003c22u, 0x0003003eu, 0x00003c14u, 0x00003c23u, 0x0004003du, 0x00000052u, 0x00003c24u, 0x00003bf2u, 0x0007004fu, 0x0000004du, 0x00003c25u, 0x00003c24u, 0x00003c24u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x00003c26u, 0x00003c12u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003c27u, 0x00003c26u, 0x00050050u, 0x0000004du, 0x00003c28u, 0x00003c27u, 0x00003c27u, 0x00050084u, 0x0000004du, 0x00003c29u, 0x00003c25u, 0x00003c28u, 0x0003003eu, 0x00003c15u, 0x00003c29u, 0x000500c3u, 0x00000008u, 0x00003c2bu, 0x0000046fu, 0x00003c23u, 0x0004007eu, 0x00000008u, 0x00003c2cu, 0x00003c2bu, 0x000500c7u, 0x00000008u, 0x00003c2du, 0x0000046eu, 0x00003c2cu, 0x0003003eu, 0x00003c16u, 0x00003c2du, 0x0004003du, 0x0000004du, 0x00003c2eu, 0x00003c15u, 0x00050050u, 0x0000004du, 0x00003c30u, 0x00003c2du, 0x00003c2du, 0x000500c7u, 0x0000004du, 0x00003c31u, 0x00003c2eu, 0x00003c30u, 0x0003003eu, 0x00003c17u, 0x00003c31u, 0x000500abu, 0x00000058u, 0x00003c33u, 0x00003c23u, 0x00000205u, 0x000300f7u, 0x00003c34u, 0x00000000u, 0x000400fau, 0x00003c33u, 0x00003c35u, 0x00003c36u, 0x000200f8u, 0x00003c36u, 0x0004003du, 0x0000004du, 0x00003c3cu, 0x00003c15u, 0x000500c4u, 0x0000004du, 0x00003c3eu, 0x00003c3cu, 0x0000b1bau, 0x0003003eu, 0x00003c18u, 0x00003c3eu, 0x000200f9u, 0x00003c34u, 0x000200f8u, 0x00003c35u, 0x0004003du, 0x0000004du, 0x00003c37u, 0x00003c15u, 0x00050082u, 0x00000008u, 0x00003c39u, 0x000001ffu, 0x00003c23u, 0x00050050u, 0x0000004du, 0x00003c3au, 0x00003c39u, 0x00003c39u, 0x000500c3u, 0x0000004du, 0x00003c3bu, 0x00003c37u, 0x00003c3au, 0x0003003eu, 0x00003c15u, 0x00003c3bu, 0x0003003eu, 0x00003c18u, 0x00003c3bu, 0x000200f9u, 0x00003c34u, 0x000200f8u, 0x00003c34u, 0x0004003du, 0x0000004du, 0x00003c3fu, 0x00003c17u, 0x000500abu, 0x00000489u, 0x00003c40u, 0x00003c3fu, 0x00000488u, 0x0004009au, 0x00000058u, 0x00003c41u, 0x00003c40u, 0x000300f7u, 0x00003c42u, 0x00000000u, 0x000400fau, 0x00003c41u, 0x00003c43u, 0x00003c42u, 0x000200f8u, 0x00003c43u, 0x00050041u, 0x00000038u, 0x00003c44u, 0x00003c17u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003c45u, 0x00003c44u, 0x000500abu, 0x00000058u, 0x00003c47u, 0x00003c45u, 0x00003c2du, 0x000300f7u, 0x00003c48u, 0x00000000u, 0x000400fau, 0x00003c47u, 0x00003c49u, 0x00003c48u, 0x000200f8u, 0x00003c49u, 0x0004003du, 0x00000008u, 0x00003c4bu, 0x00003c44u, 0x000500abu, 0x00000058u, 0x00003c4cu, 0x00003c4bu, 0x00000185u, 0x000200f9u, 0x00003c48u, 0x000200f8u, 0x00003c48u, 0x000700f5u, 0x00000058u, 0x00003c4du, 0x00003c47u, 0x00003c43u, 0x00003c4cu, 0x00003c49u, 0x000300f7u, 0x00003c4eu, 0x00000000u, 0x000400fau, 0x00003c4du, 0x00003c4fu, 0x00003c4eu, 0x000200f8u, 0x00003c4fu, 0x00050041u, 0x00000038u, 0x00003c50u, 0x00003c15u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003c51u, 0x00003c50u, 0x000500c7u, 0x00000008u, 0x00003c52u, 0x00003c51u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00003c53u, 0x00003c52u, 0x00000185u, 0x000300f7u, 0x00003c54u, 0x00000000u, 0x000400fau, 0x00003c53u, 0x00003c55u, 0x00003c56u, 0x000200f8u, 0x00003c56u, 0x00050041u, 0x00000038u, 0x00003c58u, 0x00003c18u, 0x000002d7u, 0x0003003eu, 0x00003c58u, 0x000004a2u, 0x000200f9u, 0x00003c54u, 0x000200f8u, 0x00003c55u, 0x00050041u, 0x00000038u, 0x00003c57u, 0x00003c18u, 0x000002d7u, 0x0003003eu, 0x00003c57u, 0x0000045cu, 0x000200f9u, 0x00003c54u, 0x000200f8u, 0x00003c54u, 0x0003003eu, 0x00003bf3u, 0x000004a4u, 0x000200f9u, 0x00003c4eu, 0x000200f8u, 0x00003c4eu, 0x000600a9u, 0x00000058u, 0x0000b1e0u, 0x00003c4du, 0x000004a4u, 0x00007db7u, 0x00050041u, 0x00000038u, 0x00003c59u, 0x00003c17u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003c5au, 0x00003c59u, 0x000500abu, 0x00000058u, 0x00003c5cu, 0x00003c5au, 0x00003c2du, 0x000300f7u, 0x00003c5du, 0x00000000u, 0x000400fau, 0x00003c5cu, 0x00003c5eu, 0x00003c5du, 0x000200f8u, 0x00003c5eu, 0x0004003du, 0x00000008u, 0x00003c60u, 0x00003c59u, 0x000500abu, 0x00000058u, 0x00003c61u, 0x00003c60u, 0x00000185u, 0x000200f9u, 0x00003c5du, 0x000200f8u, 0x00003c5du, 0x000700f5u, 0x00000058u, 0x00003c62u, 0x00003c5cu, 0x00003c4eu, 0x00003c61u, 0x00003c5eu, 0x000300f7u, 0x00003c63u, 0x00000000u, 0x000400fau, 0x00003c62u, 0x00003c64u, 0x00003c63u, 0x000200f8u, 0x00003c64u, 0x00050041u, 0x00000038u, 0x00003c65u, 0x00003c15u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003c66u, 0x00003c65u, 0x000500c7u, 0x00000008u, 0x00003c67u, 0x00003c66u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00003c68u, 0x00003c67u, 0x00000185u, 0x000300f7u, 0x00003c69u, 0x00000000u, 0x000400fau, 0x00003c68u, 0x00003c6au, 0x00003c6bu, 0x000200f8u, 0x00003c6bu, 0x00050041u, 0x00000038u, 0x00003c6du, 0x00003c18u, 0x0000032au, 0x0003003eu, 0x00003c6du, 0x000004a2u, 0x000200f9u, 0x00003c69u, 0x000200f8u, 0x00003c6au, 0x00050041u, 0x00000038u, 0x00003c6cu, 0x00003c18u, 0x0000032au, 0x0003003eu, 0x00003c6cu, 0x0000045cu, 0x000200f9u, 0x00003c69u, 0x000200f8u, 0x00003c69u, 0x0003003eu, 0x00003bf3u, 0x000004a4u, 0x000200f9u, 0x00003c63u, 0x000200f8u, 0x00003c63u, 0x000600a9u, 0x00000058u, 0x0000b1e1u, 0x00003c62u, 0x000004a4u, 0x0000b1e0u, 0x000200f9u, 0x00003c42u, 0x000200f8u, 0x00003c42u, 0x000700f5u, 0x00000058u, 0x00007e3eu, 0x00007db7u, 0x00003c34u, 0x0000b1e1u, 0x00003c63u, 0x000300f7u, 0x00003c6fu, 0x00000000u, 0x000400fau, 0x00003c1du, 0x00003c70u, 0x00003c6fu, 0x000200f8u, 0x00003c70u, 0x0003003eu, 0x00003c18u, 0x000004bdu, 0x0003003eu, 0x00003bf3u, 0x000004a4u, 0x000200f9u, 0x00003c6fu, 0x000200f8u, 0x00003c6fu, 0x000600a9u, 0x00000058u, 0x0000b1e2u, 0x00003c1du, 0x000004a4u, 0x00007e3eu, 0x0004003du, 0x0000004du, 0x00003c71u, 0x00003c18u, 0x0008000cu, 0x0000004du, 0x00003c72u, 0x00000001u, 0x0000002du, 0x00003c71u, 0x000004c0u, 0x000004c2u, 0x0003003eu, 0x00003c19u, 0x00003c72u, 0x0003003eu, 0x00003bf1u, 0x0000b1e2u, 0x0003003eu, 0x00003bf0u, 0x00003c72u, 0x000200f9u, 0x00003c06u, 0x000200f8u, 0x00003c06u, 0x000700f5u, 0x0000004du, 0x00007e44u, 0x00003c72u, 0x00003c6fu, 0x00003c98u, 0x00003c08u, 0x0003003eu, 0x00003bf5u, 0x00007e44u, 0x0003003eu, 0x00001848u, 0x00007e44u, 0x000200f9u, 0x00001a6eu, 0x000200f8u, 0x00001a6fu, 0x00070041u, 0x0000024du, 0x00001a7bu, 0x0000024bu, 0x00000185u, 0x00001a56u, 0x00000194u, 0x0004003du, 0x00000009u, 0x00001a7cu, 0x00001a7bu, 0x0008004fu, 0x00000052u, 0x00001a7du, 0x00001a7cu, 0x00001a7cu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x00000052u, 0x00001a7fu, 0x00001a7du, 0x0000b1b6u, 0x0003003eu, 0x0000187du, 0x00001a7fu, 0x000300f7u, 0x00001a81u, 0x00000000u, 0x000400fau, 0x00001930u, 0x00001a82u, 0x00001a83u, 0x000200f8u, 0x00001a83u, 0x0003003eu, 0x00001881u, 0x00001a7fu, 0x0007004fu, 0x0000004du, 0x00003beeu, 0x00001a7fu, 0x00001a7fu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003becu, 0x00003beeu, 0x0003003eu, 0x00001848u, 0x00003beeu, 0x000200f9u, 0x00001a81u, 0x000200f8u, 0x00001a82u, 0x0003003eu, 0x0000187fu, 0x00001a7fu, 0x00050041u, 0x00000038u, 0x00003b70u, 0x0000187fu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00003b71u, 0x00003b70u, 0x0003003eu, 0x00003b66u, 0x00003b71u, 0x000500b3u, 0x00000058u, 0x00003b73u, 0x00003b71u, 0x00000185u, 0x0003003eu, 0x00003b67u, 0x00003b73u, 0x000500c7u, 0x00000008u, 0x00003b75u, 0x00003b71u, 0x0000045cu, 0x0003003eu, 0x00003b66u, 0x00003b75u, 0x0003003eu, 0x00003b69u, 0x00003b75u, 0x0006000cu, 0x00000008u, 0x00003bd1u, 0x00000001u, 0x0000004au, 0x00003b75u, 0x00050082u, 0x00000008u, 0x00003bd2u, 0x00000205u, 0x00003bd1u, 0x0007000cu, 0x00000008u, 0x00003bd3u, 0x00000001u, 0x00000027u, 0x00003bd2u, 0x00000205u, 0x0003003eu, 0x00003bc9u, 0x00003bd3u, 0x000500c4u, 0x00000008u, 0x00003bd6u, 0x00003b75u, 0x00003bd3u, 0x000500c7u, 0x00000008u, 0x00003bd7u, 0x00003bd6u, 0x00000375u, 0x0003003eu, 0x00003bcau, 0x00003bd7u, 0x000500c7u, 0x00000008u, 0x00003bd9u, 0x00003bd7u, 0x000002eeu, 0x0003003eu, 0x00003bcbu, 0x00003bd9u, 0x000500c3u, 0x00000008u, 0x00003bdbu, 0x00003bd7u, 0x000001e0u, 0x0003003eu, 0x00003bcdu, 0x0000043au, 0x00050041u, 0x00000068u, 0x00003bdcu, 0x00003bcdu, 0x00003bdbu, 0x0004003du, 0x0000004du, 0x00003bddu, 0x00003bdcu, 0x00050051u, 0x00000008u, 0x00003bdeu, 0x00003bddu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003bdfu, 0x00003bddu, 0x00000001u, 0x0003003eu, 0x00003bccu, 0x00003bddu, 0x00050041u, 0x00000038u, 0x00003be1u, 0x00003bccu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003be2u, 0x00003be1u, 0x00050084u, 0x00000008u, 0x00003be4u, 0x00003be2u, 0x00003bd9u, 0x000500c3u, 0x00000008u, 0x00003be5u, 0x00003be4u, 0x000001ecu, 0x00050041u, 0x00000038u, 0x00003be6u, 0x00003bccu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003be7u, 0x00003be6u, 0x00050080u, 0x00000008u, 0x00003be8u, 0x00003be5u, 0x00003be7u, 0x0003003eu, 0x00003bceu, 0x00003be8u, 0x00050050u, 0x0000004du, 0x00003bebu, 0x00003be8u, 0x00003bd3u, 0x0003003eu, 0x00003bcfu, 0x00003bebu, 0x0003003eu, 0x00003b68u, 0x00003bebu, 0x00050041u, 0x00000038u, 0x00003b78u, 0x00003b68u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003b79u, 0x00003b78u, 0x0003003eu, 0x00003b6au, 0x00003b79u, 0x0004003du, 0x00000052u, 0x00003b7au, 0x0000187fu, 0x0007004fu, 0x0000004du, 0x00003b7bu, 0x00003b7au, 0x00003b7au, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x00003b7cu, 0x00003b68u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003b7du, 0x00003b7cu, 0x00050050u, 0x0000004du, 0x00003b7eu, 0x00003b7du, 0x00003b7du, 0x00050084u, 0x0000004du, 0x00003b7fu, 0x00003b7bu, 0x00003b7eu, 0x0003003eu, 0x00003b6bu, 0x00003b7fu, 0x000500c3u, 0x00000008u, 0x00003b81u, 0x0000046fu, 0x00003b79u, 0x0004007eu, 0x00000008u, 0x00003b82u, 0x00003b81u, 0x000500c7u, 0x00000008u, 0x00003b83u, 0x0000046eu, 0x00003b82u, 0x0003003eu, 0x00003b6cu, 0x00003b83u, 0x0004003du, 0x0000004du, 0x00003b84u, 0x00003b6bu, 0x00050050u, 0x0000004du, 0x00003b86u, 0x00003b83u, 0x00003b83u, 0x000500c7u, 0x0000004du, 0x00003b87u, 0x00003b84u, 0x00003b86u, 0x0003003eu, 0x00003b6du, 0x00003b87u, 0x000500abu, 0x00000058u, 0x00003b89u, 0x00003b79u, 0x00000205u, 0x000300f7u, 0x00003b8au, 0x00000000u, 0x000400fau, 0x00003b89u, 0x00003b8bu, 0x00003b8cu, 0x000200f8u, 0x00003b8cu, 0x0004003du, 0x0000004du, 0x00003b92u, 0x00003b6bu, 0x000500c4u, 0x0000004du, 0x00003b94u, 0x00003b92u, 0x0000b1bau, 0x0003003eu, 0x00003b6eu, 0x00003b94u, 0x000200f9u, 0x00003b8au, 0x000200f8u, 0x00003b8bu, 0x0004003du, 0x0000004du, 0x00003b8du, 0x00003b6bu, 0x00050082u, 0x00000008u, 0x00003b8fu, 0x000001ffu, 0x00003b79u, 0x00050050u, 0x0000004du, 0x00003b90u, 0x00003b8fu, 0x00003b8fu, 0x000500c3u, 0x0000004du, 0x00003b91u, 0x00003b8du, 0x00003b90u, 0x0003003eu, 0x00003b6bu, 0x00003b91u, 0x0003003eu, 0x00003b6eu, 0x00003b91u, 0x000200f9u, 0x00003b8au, 0x000200f8u, 0x00003b8au, 0x0004003du, 0x0000004du, 0x00003b95u, 0x00003b6du, 0x000500abu, 0x00000489u, 0x00003b96u, 0x00003b95u, 0x00000488u, 0x0004009au, 0x00000058u, 0x00003b97u, 0x00003b96u, 0x000300f7u, 0x00003b98u, 0x00000000u, 0x000400fau, 0x00003b97u, 0x00003b99u, 0x00003b98u, 0x000200f8u, 0x00003b99u, 0x00050041u, 0x00000038u, 0x00003b9au, 0x00003b6du, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003b9bu, 0x00003b9au, 0x000500abu, 0x00000058u, 0x00003b9du, 0x00003b9bu, 0x00003b83u, 0x000300f7u, 0x00003b9eu, 0x00000000u, 0x000400fau, 0x00003b9du, 0x00003b9fu, 0x00003b9eu, 0x000200f8u, 0x00003b9fu, 0x0004003du, 0x00000008u, 0x00003ba1u, 0x00003b9au, 0x000500abu, 0x00000058u, 0x00003ba2u, 0x00003ba1u, 0x00000185u, 0x000200f9u, 0x00003b9eu, 0x000200f8u, 0x00003b9eu, 0x000700f5u, 0x00000058u, 0x00003ba3u, 0x00003b9du, 0x00003b99u, 0x00003ba2u, 0x00003b9fu, 0x000300f7u, 0x00003ba4u, 0x00000000u, 0x000400fau, 0x00003ba3u, 0x00003ba5u, 0x00003ba4u, 0x000200f8u, 0x00003ba5u, 0x00050041u, 0x00000038u, 0x00003ba6u, 0x00003b6bu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003ba7u, 0x00003ba6u, 0x000500c7u, 0x00000008u, 0x00003ba8u, 0x00003ba7u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00003ba9u, 0x00003ba8u, 0x00000185u, 0x000300f7u, 0x00003baau, 0x00000000u, 0x000400fau, 0x00003ba9u, 0x00003babu, 0x00003bacu, 0x000200f8u, 0x00003bacu, 0x00050041u, 0x00000038u, 0x00003baeu, 0x00003b6eu, 0x000002d7u, 0x0003003eu, 0x00003baeu, 0x000004a2u, 0x000200f9u, 0x00003baau, 0x000200f8u, 0x00003babu, 0x00050041u, 0x00000038u, 0x00003badu, 0x00003b6eu, 0x000002d7u, 0x0003003eu, 0x00003badu, 0x0000045cu, 0x000200f9u, 0x00003baau, 0x000200f8u, 0x00003baau, 0x0003003eu, 0x00001880u, 0x000004a4u, 0x000200f9u, 0x00003ba4u, 0x000200f8u, 0x00003ba4u, 0x000600a9u, 0x00000058u, 0x0000b1e3u, 0x00003ba3u, 0x000004a4u, 0x00007db7u, 0x00050041u, 0x00000038u, 0x00003bafu, 0x00003b6du, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003bb0u, 0x00003bafu, 0x000500abu, 0x00000058u, 0x00003bb2u, 0x00003bb0u, 0x00003b83u, 0x000300f7u, 0x00003bb3u, 0x00000000u, 0x000400fau, 0x00003bb2u, 0x00003bb4u, 0x00003bb3u, 0x000200f8u, 0x00003bb4u, 0x0004003du, 0x00000008u, 0x00003bb6u, 0x00003bafu, 0x000500abu, 0x00000058u, 0x00003bb7u, 0x00003bb6u, 0x00000185u, 0x000200f9u, 0x00003bb3u, 0x000200f8u, 0x00003bb3u, 0x000700f5u, 0x00000058u, 0x00003bb8u, 0x00003bb2u, 0x00003ba4u, 0x00003bb7u, 0x00003bb4u, 0x000300f7u, 0x00003bb9u, 0x00000000u, 0x000400fau, 0x00003bb8u, 0x00003bbau, 0x00003bb9u, 0x000200f8u, 0x00003bbau, 0x00050041u, 0x00000038u, 0x00003bbbu, 0x00003b6bu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003bbcu, 0x00003bbbu, 0x000500c7u, 0x00000008u, 0x00003bbdu, 0x00003bbcu, 0x0000046fu, 0x000500aau, 0x00000058u, 0x00003bbeu, 0x00003bbdu, 0x00000185u, 0x000300f7u, 0x00003bbfu, 0x00000000u, 0x000400fau, 0x00003bbeu, 0x00003bc0u, 0x00003bc1u, 0x000200f8u, 0x00003bc1u, 0x00050041u, 0x00000038u, 0x00003bc3u, 0x00003b6eu, 0x0000032au, 0x0003003eu, 0x00003bc3u, 0x000004a2u, 0x000200f9u, 0x00003bbfu, 0x000200f8u, 0x00003bc0u, 0x00050041u, 0x00000038u, 0x00003bc2u, 0x00003b6eu, 0x0000032au, 0x0003003eu, 0x00003bc2u, 0x0000045cu, 0x000200f9u, 0x00003bbfu, 0x000200f8u, 0x00003bbfu, 0x0003003eu, 0x00001880u, 0x000004a4u, 0x000200f9u, 0x00003bb9u, 0x000200f8u, 0x00003bb9u, 0x000600a9u, 0x00000058u, 0x0000b1e4u, 0x00003bb8u, 0x000004a4u, 0x0000b1e3u, 0x000200f9u, 0x00003b98u, 0x000200f8u, 0x00003b98u, 0x000700f5u, 0x00000058u, 0x00007eddu, 0x00007db7u, 0x00003b8au, 0x0000b1e4u, 0x00003bb9u, 0x000300f7u, 0x00003bc5u, 0x00000000u, 0x000400fau, 0x00003b73u, 0x00003bc6u, 0x00003bc5u, 0x000200f8u, 0x00003bc6u, 0x0003003eu, 0x00003b6eu, 0x000004bdu, 0x0003003eu, 0x00001880u, 0x000004a4u, 0x000200f9u, 0x00003bc5u, 0x000200f8u, 0x00003bc5u, 0x000600a9u, 0x00000058u, 0x0000b1e5u, 0x00003b73u, 0x000004a4u, 0x00007eddu, 0x0004003du, 0x0000004du, 0x00003bc7u, 0x00003b6eu, 0x0008000cu, 0x0000004du, 0x00003bc8u, 0x00000001u, 0x0000002du, 0x00003bc7u, 0x000004c0u, 0x000004c2u, 0x0003003eu, 0x00003b6fu, 0x00003bc8u, 0x0003003eu, 0x0000187eu, 0x0000b1e5u, 0x0003003eu, 0x00001848u, 0x00003bc8u, 0x000200f9u, 0x00001a81u, 0x000200f8u, 0x00001a81u, 0x000700f5u, 0x0000004du, 0x00008295u, 0x00003bc8u, 0x00003bc5u, 0x00003beeu, 0x00001a83u, 0x000200f9u, 0x00001a6eu, 0x000200f8u, 0x00001a6eu, 0x000700f5u, 0x0000004du, 0x00008294u, 0x00008295u, 0x00001a81u, 0x00007e44u, 0x00003c06u, 0x0003003eu, 0x0000185au, 0x00006d12u, 0x0003003eu, 0x00001818u, 0x000004a4u, 0x000200f9u, 0x00001a4bu, 0x000200f8u, 0x00001a4bu, 0x000700f5u, 0x0000004du, 0x00008240u, 0x00006b51u, 0x00001a2au, 0x00008294u, 0x00001a6eu, 0x000600a9u, 0x00000006u, 0x0000b1e6u, 0x0000195au, 0x00006d12u, 0x00008172u, 0x000600a9u, 0x00000058u, 0x0000b1e7u, 0x0000195au, 0x000004a4u, 0x00001957u, 0x000300f7u, 0x00001a96u, 0x00000000u, 0x000400fau, 0x0000b1e7u, 0x00001a97u, 0x00001a96u, 0x000200f8u, 0x00001a97u, 0x000400a8u, 0x00000058u, 0x00001a9au, 0x00001966u, 0x000500a7u, 0x00000058u, 0x00001a9bu, 0x00001960u, 0x00001a9au, 0x000300f7u, 0x00001a9cu, 0x00000000u, 0x000400fau, 0x00001a9bu, 0x00001a9du, 0x00001a9eu, 0x000200f8u, 0x00001a9eu, 0x00080041u, 0x000001f9u, 0x00001aa5u, 0x000013f4u, 0x00000185u, 0x0000178cu, 0x00000197u, 0x0000b1e6u, 0x0004003du, 0x000001abu, 0x00001aa6u, 0x00001aa5u, 0x00040071u, 0x00000006u, 0x00001aa7u, 0x00001aa6u, 0x0003003eu, 0x00001889u, 0x00001aa7u, 0x0003003eu, 0x0000188bu, 0x00001aa7u, 0x00070041u, 0x000001edu, 0x00003cd3u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x00000185u, 0x0004003du, 0x00000006u, 0x00003cd4u, 0x00003cd3u, 0x00070041u, 0x000001edu, 0x00003cd6u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x00000194u, 0x0004003du, 0x00000006u, 0x00003cd7u, 0x00003cd6u, 0x00070041u, 0x000001edu, 0x00003cd9u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x00000197u, 0x0004003du, 0x00000006u, 0x00003cdau, 0x00003cd9u, 0x00070041u, 0x000001edu, 0x00003cdcu, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00003cddu, 0x00003cdcu, 0x00070041u, 0x000001edu, 0x00003cdfu, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00003ce0u, 0x00003cdfu, 0x00070041u, 0x000001edu, 0x00003ce2u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00003ce3u, 0x00003ce2u, 0x00070041u, 0x000001f9u, 0x00003ce5u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001a3u, 0x0004003du, 0x000001abu, 0x00003ce6u, 0x00003ce5u, 0x00040071u, 0x00000006u, 0x00003ce7u, 0x00003ce6u, 0x0004007cu, 0x00000008u, 0x00003ce8u, 0x00003ce7u, 0x00070041u, 0x000001f9u, 0x00003ceau, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001a6u, 0x0004003du, 0x000001abu, 0x00003cebu, 0x00003ceau, 0x00040071u, 0x00000006u, 0x00003cecu, 0x00003cebu, 0x0004007cu, 0x00000008u, 0x00003cedu, 0x00003cecu, 0x00070041u, 0x000001f9u, 0x00003cefu, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001e0u, 0x0004003du, 0x000001abu, 0x00003cf0u, 0x00003cefu, 0x00040071u, 0x00000006u, 0x00003cf1u, 0x00003cf0u, 0x0004007cu, 0x00000008u, 0x00003cf2u, 0x00003cf1u, 0x00070041u, 0x000001f9u, 0x00003cf4u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001e6u, 0x0004003du, 0x000001abu, 0x00003cf5u, 0x00003cf4u, 0x00040071u, 0x00000006u, 0x00003cf6u, 0x00003cf5u, 0x0004007cu, 0x00000008u, 0x00003cf7u, 0x00003cf6u, 0x00070041u, 0x000001f9u, 0x00003cf9u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001ecu, 0x0004003du, 0x000001abu, 0x00003cfau, 0x00003cf9u, 0x00040071u, 0x00000006u, 0x00003cfbu, 0x00003cfau, 0x0004007cu, 0x00000008u, 0x00003cfcu, 0x00003cfbu, 0x00070041u, 0x000001f9u, 0x00003cfeu, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001f1u, 0x0004003du, 0x000001abu, 0x00003cffu, 0x00003cfeu, 0x00040071u, 0x00000006u, 0x00003d00u, 0x00003cffu, 0x0004007cu, 0x00000008u, 0x00003d01u, 0x00003d00u, 0x00070041u, 0x000001f9u, 0x00003d03u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001f8u, 0x0004003du, 0x000001abu, 0x00003d04u, 0x00003d03u, 0x00040071u, 0x00000006u, 0x00003d05u, 0x00003d04u, 0x0004007cu, 0x00000008u, 0x00003d06u, 0x00003d05u, 0x00070041u, 0x000001f9u, 0x00003d08u, 0x00000278u, 0x00000185u, 0x00001aa7u, 0x000001ffu, 0x0004003du, 0x000001abu, 0x00003d09u, 0x00003d08u, 0x00040071u, 0x00000006u, 0x00003d0au, 0x00003d09u, 0x0004007cu, 0x00000008u, 0x00003d0bu, 0x00003d0au, 0x00110050u, 0x00000023u, 0x00003d0cu, 0x00003cd4u, 0x00003cd7u, 0x00003cdau, 0x00003cddu, 0x00003ce0u, 0x00003ce3u, 0x00003ce8u, 0x00003cedu, 0x00003cf2u, 0x00003cf7u, 0x00003cfcu, 0x00003d01u, 0x00003d06u, 0x00003d0bu, 0x0003003eu, 0x00005b0au, 0x00003cd4u, 0x0003003eu, 0x00005b0bu, 0x00003cd7u, 0x0003003eu, 0x00005b0cu, 0x00003cdau, 0x0003003eu, 0x00005b0du, 0x00003cddu, 0x0003003eu, 0x00005b0eu, 0x00003ce0u, 0x0003003eu, 0x00005b0fu, 0x00003ce3u, 0x0003003eu, 0x00005b10u, 0x00003ce8u, 0x0003003eu, 0x00005b11u, 0x00003cedu, 0x0003003eu, 0x00005b12u, 0x00003cf2u, 0x0003003eu, 0x00005b13u, 0x00003cf7u, 0x0003003eu, 0x00005b14u, 0x00003cfcu, 0x0003003eu, 0x00005b15u, 0x00003d01u, 0x0003003eu, 0x00005b16u, 0x00003d06u, 0x0003003eu, 0x00005b17u, 0x00003d0bu, 0x0003003eu, 0x00006341u, 0x00003cd4u, 0x0003003eu, 0x00006342u, 0x00003cd7u, 0x0003003eu, 0x00006343u, 0x00003cdau, 0x0003003eu, 0x00006344u, 0x00003cddu, 0x0003003eu, 0x00006345u, 0x00003ce0u, 0x0003003eu, 0x00006346u, 0x00003ce3u, 0x0003003eu, 0x00006347u, 0x00003ce8u, 0x0003003eu, 0x00006348u, 0x00003cedu, 0x0003003eu, 0x00006349u, 0x00003cf2u, 0x0003003eu, 0x0000634au, 0x00003cf7u, 0x0003003eu, 0x0000634bu, 0x00003cfcu, 0x0003003eu, 0x0000634cu, 0x00003d01u, 0x0003003eu, 0x0000634du, 0x00003d06u, 0x0003003eu, 0x0000634eu, 0x00003d0bu, 0x000300f7u, 0x00001aaau, 0x00000000u, 0x000400fau, 0x00001687u, 0x00001aabu, 0x00001aaau, 0x000200f8u, 0x00001aabu, 0x0003003eu, 0x00006347u, 0x00001512u, 0x0003003eu, 0x00006348u, 0x00001515u, 0x000200f9u, 0x00001aaau, 0x000200f8u, 0x00001aaau, 0x000600a9u, 0x00000008u, 0x0000b1e8u, 0x00001687u, 0x00001512u, 0x00003ce8u, 0x000600a9u, 0x00000008u, 0x0000b1e9u, 0x00001687u, 0x00001515u, 0x00003cedu, 0x00110050u, 0x00000023u, 0x0000636bu, 0x00003cd4u, 0x00003cd7u, 0x00003cdau, 0x00003cddu, 0x00003ce0u, 0x00003ce3u, 0x0000b1e8u, 0x0000b1e9u, 0x00003cf2u, 0x00003cf7u, 0x00003cfcu, 0x00003d01u, 0x00003d06u, 0x00003d0bu, 0x0003003eu, 0x0000636cu, 0x00003cd4u, 0x0003003eu, 0x0000636du, 0x00003cd7u, 0x0003003eu, 0x0000636eu, 0x00003cdau, 0x0003003eu, 0x0000636fu, 0x00003cddu, 0x0003003eu, 0x00006370u, 0x00003ce0u, 0x0003003eu, 0x00006371u, 0x00003ce3u, 0x0003003eu, 0x00006372u, 0x0000b1e8u, 0x0003003eu, 0x00006373u, 0x0000b1e9u, 0x0003003eu, 0x00006374u, 0x00003cf2u, 0x0003003eu, 0x00006375u, 0x00003cf7u, 0x0003003eu, 0x00006376u, 0x00003cfcu, 0x0003003eu, 0x00006377u, 0x00003d01u, 0x0003003eu, 0x00006378u, 0x00003d06u, 0x0003003eu, 0x00006379u, 0x00003d0bu, 0x0003003eu, 0x0000188du, 0x000018feu, 0x0003003eu, 0x0000188eu, 0x00008240u, 0x0003003eu, 0x0000188fu, 0x00001921u, 0x0003003eu, 0x00001890u, 0x00001924u, 0x0003003eu, 0x00001891u, 0x00001927u, 0x0003003eu, 0x00001892u, 0x00001951u, 0x0003003eu, 0x00001893u, 0x00001960u, 0x0003003eu, 0x00001894u, 0x000083f4u, 0x000500c7u, 0x00000008u, 0x00003e50u, 0x00003d0bu, 0x00000194u, 0x000500abu, 0x00000058u, 0x00003e51u, 0x00003e50u, 0x00000185u, 0x0004007cu, 0x00000008u, 0x00003e54u, 0x00003cd4u, 0x0004007cu, 0x00000008u, 0x00003e57u, 0x00003cd7u, 0x0003003eu, 0x00003d0du, 0x00003e51u, 0x00050041u, 0x00000038u, 0x00003e5au, 0x0000188eu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003e5bu, 0x00003e5au, 0x0003003eu, 0x00003d0eu, 0x00003e5bu, 0x0003003eu, 0x00003d0fu, 0x00003e54u, 0x0003003eu, 0x00003d10u, 0x00003e57u, 0x0003003eu, 0x00003d11u, 0x00003cfcu, 0x0008000cu, 0x00000008u, 0x00004209u, 0x00000001u, 0x0000002du, 0x00003e5bu, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x00003d0eu, 0x00004209u, 0x000500b1u, 0x00000058u, 0x0000420bu, 0x00003cfcu, 0x000001f1u, 0x000300f7u, 0x0000420cu, 0x00000000u, 0x000400fau, 0x0000420bu, 0x0000420du, 0x0000420eu, 0x000200f8u, 0x0000420eu, 0x00050082u, 0x00000008u, 0x00004213u, 0x000002e0u, 0x00003cfcu, 0x000500c4u, 0x00000008u, 0x00004215u, 0x00004209u, 0x00004213u, 0x0003003eu, 0x00003d0eu, 0x00004215u, 0x000500c3u, 0x00000008u, 0x00004217u, 0x00004215u, 0x00000321u, 0x0003003eu, 0x00003d0eu, 0x00004217u, 0x000200f9u, 0x0000420cu, 0x000200f8u, 0x0000420du, 0x000500c3u, 0x00000008u, 0x00004211u, 0x00004209u, 0x00003cfcu, 0x0003003eu, 0x00003d0eu, 0x00004211u, 0x000200f9u, 0x0000420cu, 0x000200f8u, 0x0000420cu, 0x000700f5u, 0x00000008u, 0x00008441u, 0x00004211u, 0x0000420du, 0x00004217u, 0x0000420eu, 0x000300f7u, 0x00004219u, 0x00000000u, 0x000400fau, 0x00003e51u, 0x0000421au, 0x0000421bu, 0x000200f8u, 0x0000421bu, 0x000500c4u, 0x00000008u, 0x00004231u, 0x00003e54u, 0x0000019au, 0x00050082u, 0x00000008u, 0x00004233u, 0x00008441u, 0x00004231u, 0x0003003eu, 0x00003d0eu, 0x00004233u, 0x000200f9u, 0x00004219u, 0x000200f8u, 0x0000421au, 0x000500c3u, 0x00000008u, 0x0000421du, 0x00008441u, 0x0000019au, 0x000500afu, 0x00000058u, 0x0000421fu, 0x0000421du, 0x00003e57u, 0x0003003eu, 0x00004206u, 0x0000421fu, 0x000300f7u, 0x00004221u, 0x00000000u, 0x000400fau, 0x0000421fu, 0x00004222u, 0x00004223u, 0x000200f8u, 0x00004223u, 0x000500c4u, 0x00000008u, 0x0000422du, 0x00003e54u, 0x0000019au, 0x00050082u, 0x00000008u, 0x0000422eu, 0x00008441u, 0x0000422du, 0x0007000cu, 0x00000008u, 0x0000422fu, 0x00000001u, 0x0000002au, 0x0000422eu, 0x00000185u, 0x0003003eu, 0x00003d0eu, 0x0000422fu, 0x000200f9u, 0x00004221u, 0x000200f8u, 0x00004222u, 0x000500c3u, 0x00000008u, 0x00004225u, 0x00003e57u, 0x00000197u, 0x000500c3u, 0x00000008u, 0x00004227u, 0x00003e54u, 0x00000197u, 0x00050082u, 0x00000008u, 0x00004228u, 0x00004225u, 0x00004227u, 0x000500c7u, 0x00000008u, 0x00004229u, 0x00004228u, 0x0000099cu, 0x000500c4u, 0x00000008u, 0x0000422au, 0x00004229u, 0x000001a0u, 0x0003003eu, 0x00003d0eu, 0x0000422au, 0x000200f9u, 0x00004221u, 0x000200f8u, 0x00004221u, 0x000700f5u, 0x00000008u, 0x00008444u, 0x0000422au, 0x00004222u, 0x0000422fu, 0x00004223u, 0x000200f9u, 0x00004219u, 0x000200f8u, 0x00004219u, 0x000700f5u, 0x00000008u, 0x00008443u, 0x00008444u, 0x00004221u, 0x00004233u, 0x0000421bu, 0x0003003eu, 0x00004207u, 0x00008443u, 0x0003003eu, 0x00003e5au, 0x00008443u, 0x000500c7u, 0x00000008u, 0x00003e60u, 0x00003d0bu, 0x0000019du, 0x000500abu, 0x00000058u, 0x00003e61u, 0x00003e60u, 0x00000185u, 0x0004007cu, 0x00000008u, 0x00003e64u, 0x00003cdau, 0x0004007cu, 0x00000008u, 0x00003e67u, 0x00003cddu, 0x0003003eu, 0x00003d12u, 0x00003e61u, 0x00050041u, 0x00000038u, 0x00003e6au, 0x0000188eu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003e6bu, 0x00003e6au, 0x0003003eu, 0x00003d13u, 0x00003e6bu, 0x0003003eu, 0x00003d14u, 0x00003e64u, 0x0003003eu, 0x00003d15u, 0x00003e67u, 0x0003003eu, 0x00003d16u, 0x00003d06u, 0x0008000cu, 0x00000008u, 0x00004238u, 0x00000001u, 0x0000002du, 0x00003e6bu, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x00003d13u, 0x00004238u, 0x000500b1u, 0x00000058u, 0x0000423au, 0x00003d06u, 0x000001f1u, 0x000300f7u, 0x0000423bu, 0x00000000u, 0x000400fau, 0x0000423au, 0x0000423cu, 0x0000423du, 0x000200f8u, 0x0000423du, 0x00050082u, 0x00000008u, 0x00004242u, 0x000002e0u, 0x00003d06u, 0x000500c4u, 0x00000008u, 0x00004244u, 0x00004238u, 0x00004242u, 0x0003003eu, 0x00003d13u, 0x00004244u, 0x000500c3u, 0x00000008u, 0x00004246u, 0x00004244u, 0x00000321u, 0x0003003eu, 0x00003d13u, 0x00004246u, 0x000200f9u, 0x0000423bu, 0x000200f8u, 0x0000423cu, 0x000500c3u, 0x00000008u, 0x00004240u, 0x00004238u, 0x00003d06u, 0x0003003eu, 0x00003d13u, 0x00004240u, 0x000200f9u, 0x0000423bu, 0x000200f8u, 0x0000423bu, 0x000700f5u, 0x00000008u, 0x00008453u, 0x00004240u, 0x0000423cu, 0x00004246u, 0x0000423du, 0x000300f7u, 0x00004248u, 0x00000000u, 0x000400fau, 0x00003e61u, 0x00004249u, 0x0000424au, 0x000200f8u, 0x0000424au, 0x000500c4u, 0x00000008u, 0x00004260u, 0x00003e64u, 0x0000019au, 0x00050082u, 0x00000008u, 0x00004262u, 0x00008453u, 0x00004260u, 0x0003003eu, 0x00003d13u, 0x00004262u, 0x000200f9u, 0x00004248u, 0x000200f8u, 0x00004249u, 0x000500c3u, 0x00000008u, 0x0000424cu, 0x00008453u, 0x0000019au, 0x000500afu, 0x00000058u, 0x0000424eu, 0x0000424cu, 0x00003e67u, 0x0003003eu, 0x00004235u, 0x0000424eu, 0x000300f7u, 0x00004250u, 0x00000000u, 0x000400fau, 0x0000424eu, 0x00004251u, 0x00004252u, 0x000200f8u, 0x00004252u, 0x000500c4u, 0x00000008u, 0x0000425cu, 0x00003e64u, 0x0000019au, 0x00050082u, 0x00000008u, 0x0000425du, 0x00008453u, 0x0000425cu, 0x0007000cu, 0x00000008u, 0x0000425eu, 0x00000001u, 0x0000002au, 0x0000425du, 0x00000185u, 0x0003003eu, 0x00003d13u, 0x0000425eu, 0x000200f9u, 0x00004250u, 0x000200f8u, 0x00004251u, 0x000500c3u, 0x00000008u, 0x00004254u, 0x00003e67u, 0x00000197u, 0x000500c3u, 0x00000008u, 0x00004256u, 0x00003e64u, 0x00000197u, 0x00050082u, 0x00000008u, 0x00004257u, 0x00004254u, 0x00004256u, 0x000500c7u, 0x00000008u, 0x00004258u, 0x00004257u, 0x0000099cu, 0x000500c4u, 0x00000008u, 0x00004259u, 0x00004258u, 0x000001a0u, 0x0003003eu, 0x00003d13u, 0x00004259u, 0x000200f9u, 0x00004250u, 0x000200f8u, 0x00004250u, 0x000700f5u, 0x00000008u, 0x00008456u, 0x00004259u, 0x00004251u, 0x0000425eu, 0x00004252u, 0x000200f9u, 0x00004248u, 0x000200f8u, 0x00004248u, 0x000700f5u, 0x00000008u, 0x00008455u, 0x00008456u, 0x00004250u, 0x00004262u, 0x0000424au, 0x0003003eu, 0x00004236u, 0x00008455u, 0x0003003eu, 0x00003e6au, 0x00008455u, 0x000300f7u, 0x00003e6fu, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003e70u, 0x00003e71u, 0x000200f8u, 0x00003e71u, 0x0003003eu, 0x00003d17u, 0x00000488u, 0x000200f9u, 0x00003e6fu, 0x000200f8u, 0x00003e70u, 0x0004003du, 0x0000004du, 0x00003e72u, 0x0000188eu, 0x000500c7u, 0x0000004du, 0x00003e74u, 0x00003e72u, 0x0000b1bdu, 0x0003003eu, 0x00003d17u, 0x00003e74u, 0x000200f9u, 0x00003e6fu, 0x000200f8u, 0x00003e6fu, 0x00050041u, 0x00000038u, 0x00003e75u, 0x00003d17u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003e76u, 0x00003e75u, 0x00050041u, 0x00000038u, 0x00003e77u, 0x00003d17u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003e78u, 0x00003e77u, 0x00050080u, 0x00000008u, 0x00003e79u, 0x00003e76u, 0x00003e78u, 0x0003003eu, 0x00003d18u, 0x00003e79u, 0x0004003du, 0x0000004du, 0x00003e7au, 0x0000188eu, 0x000500c3u, 0x0000004du, 0x00003e7cu, 0x00003e7au, 0x0000b1bcu, 0x0003003eu, 0x0000188eu, 0x00003e7cu, 0x0003003eu, 0x000059dau, 0x00003cf7u, 0x0003003eu, 0x000059dbu, 0x00003d0bu, 0x0004003du, 0x00000008u, 0x00003e7fu, 0x00003e5au, 0x0003003eu, 0x00003d1bu, 0x00003e7fu, 0x000500abu, 0x00000058u, 0x00004268u, 0x00003cf7u, 0x00000185u, 0x000300f7u, 0x00004269u, 0x00000000u, 0x000400fau, 0x00004268u, 0x0000426au, 0x00004269u, 0x000200f8u, 0x0000426au, 0x000500c4u, 0x00000008u, 0x0000426du, 0x00000194u, 0x00003cf7u, 0x0003003eu, 0x00004264u, 0x0000426du, 0x000500c7u, 0x00000008u, 0x00004270u, 0x00003d0bu, 0x00000197u, 0x000500abu, 0x00000058u, 0x00004271u, 0x00004270u, 0x00000185u, 0x000300f7u, 0x00004272u, 0x00000000u, 0x000400fau, 0x00004271u, 0x00004273u, 0x00004272u, 0x000200f8u, 0x00004273u, 0x000500c7u, 0x00000008u, 0x00004276u, 0x00003e7fu, 0x0000426du, 0x00050082u, 0x00000008u, 0x00004277u, 0x00004276u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00004278u, 0x00000001u, 0x0000002au, 0x00004277u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x0000427au, 0x00003e7fu, 0x00004278u, 0x0003003eu, 0x00003d1bu, 0x0000427au, 0x000200f9u, 0x00004272u, 0x000200f8u, 0x00004272u, 0x000700f5u, 0x00000008u, 0x000084b4u, 0x00003e7fu, 0x0000426au, 0x0000427au, 0x00004273u, 0x00050082u, 0x00000008u, 0x0000427cu, 0x0000426du, 0x00000194u, 0x000500c7u, 0x00000008u, 0x0000427eu, 0x000084b4u, 0x0000427cu, 0x0003003eu, 0x00003d1bu, 0x0000427eu, 0x000200f9u, 0x00004269u, 0x000200f8u, 0x00004269u, 0x000700f5u, 0x00000008u, 0x000084b5u, 0x00003e7fu, 0x00003e6fu, 0x0000427eu, 0x00004272u, 0x0003003eu, 0x00004265u, 0x000084b5u, 0x0003003eu, 0x00003d19u, 0x000084b5u, 0x0003003eu, 0x000059deu, 0x00003d01u, 0x0003003eu, 0x000059dfu, 0x00003d0bu, 0x0004003du, 0x00000008u, 0x00003e83u, 0x00003e6au, 0x0003003eu, 0x00003d1eu, 0x00003e83u, 0x000500abu, 0x00000058u, 0x00004284u, 0x00003d01u, 0x00000185u, 0x000300f7u, 0x00004285u, 0x00000000u, 0x000400fau, 0x00004284u, 0x00004286u, 0x00004285u, 0x000200f8u, 0x00004286u, 0x000500c4u, 0x00000008u, 0x00004289u, 0x00000194u, 0x00003d01u, 0x0003003eu, 0x00004280u, 0x00004289u, 0x000500c7u, 0x00000008u, 0x0000428cu, 0x00003d0bu, 0x000001e0u, 0x000500abu, 0x00000058u, 0x0000428du, 0x0000428cu, 0x00000185u, 0x000300f7u, 0x0000428eu, 0x00000000u, 0x000400fau, 0x0000428du, 0x0000428fu, 0x0000428eu, 0x000200f8u, 0x0000428fu, 0x000500c7u, 0x00000008u, 0x00004292u, 0x00003e83u, 0x00004289u, 0x00050082u, 0x00000008u, 0x00004293u, 0x00004292u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00004294u, 0x00000001u, 0x0000002au, 0x00004293u, 0x00000185u, 0x000500c6u, 0x00000008u, 0x00004296u, 0x00003e83u, 0x00004294u, 0x0003003eu, 0x00003d1eu, 0x00004296u, 0x000200f9u, 0x0000428eu, 0x000200f8u, 0x0000428eu, 0x000700f5u, 0x00000008u, 0x000084d3u, 0x00003e83u, 0x00004286u, 0x00004296u, 0x0000428fu, 0x00050082u, 0x00000008u, 0x00004298u, 0x00004289u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x0000429au, 0x000084d3u, 0x00004298u, 0x0003003eu, 0x00003d1eu, 0x0000429au, 0x000200f9u, 0x00004285u, 0x000200f8u, 0x00004285u, 0x000700f5u, 0x00000008u, 0x000084d4u, 0x00003e83u, 0x00004269u, 0x0000429au, 0x0000428eu, 0x0003003eu, 0x00004281u, 0x000084d4u, 0x0003003eu, 0x00003d1cu, 0x000084d4u, 0x0004003du, 0x00000008u, 0x00003e86u, 0x00003e5au, 0x00050080u, 0x00000008u, 0x00003e87u, 0x00003e86u, 0x00000194u, 0x0003003eu, 0x000059e2u, 0x00003cf7u, 0x0003003eu, 0x000059e3u, 0x00003d0bu, 0x0003003eu, 0x00003d21u, 0x00003e87u, 0x000300f7u, 0x000042a1u, 0x00000000u, 0x000400fau, 0x00004268u, 0x000042a2u, 0x000042a1u, 0x000200f8u, 0x000042a2u, 0x000500c4u, 0x00000008u, 0x000042a5u, 0x00000194u, 0x00003cf7u, 0x0003003eu, 0x0000429cu, 0x000042a5u, 0x000500c7u, 0x00000008u, 0x000042a8u, 0x00003d0bu, 0x00000197u, 0x000500abu, 0x00000058u, 0x000042a9u, 0x000042a8u, 0x00000185u, 0x000300f7u, 0x000042aau, 0x00000000u, 0x000400fau, 0x000042a9u, 0x000042abu, 0x000042aau, 0x000200f8u, 0x000042abu, 0x000500c7u, 0x00000008u, 0x000042aeu, 0x00003e87u, 0x000042a5u, 0x00050082u, 0x00000008u, 0x000042afu, 0x000042aeu, 0x00000194u, 0x0007000cu, 0x00000008u, 0x000042b0u, 0x00000001u, 0x0000002au, 0x000042afu, 0x00000185u, 0x000500c6u, 0x00000008u, 0x000042b2u, 0x00003e87u, 0x000042b0u, 0x0003003eu, 0x00003d21u, 0x000042b2u, 0x000200f9u, 0x000042aau, 0x000200f8u, 0x000042aau, 0x000700f5u, 0x00000008u, 0x000084f2u, 0x00003e87u, 0x000042a2u, 0x000042b2u, 0x000042abu, 0x00050082u, 0x00000008u, 0x000042b4u, 0x000042a5u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000042b6u, 0x000084f2u, 0x000042b4u, 0x0003003eu, 0x00003d21u, 0x000042b6u, 0x000200f9u, 0x000042a1u, 0x000200f8u, 0x000042a1u, 0x000700f5u, 0x00000008u, 0x000084f3u, 0x00003e87u, 0x00004285u, 0x000042b6u, 0x000042aau, 0x0003003eu, 0x0000429du, 0x000084f3u, 0x0003003eu, 0x00003d1fu, 0x000084f3u, 0x0004003du, 0x00000008u, 0x00003e8bu, 0x00003e6au, 0x00050080u, 0x00000008u, 0x00003e8cu, 0x00003e8bu, 0x00000194u, 0x0003003eu, 0x000059e6u, 0x00003d01u, 0x0003003eu, 0x000059e7u, 0x00003d0bu, 0x0003003eu, 0x00003d24u, 0x00003e8cu, 0x000300f7u, 0x000042bdu, 0x00000000u, 0x000400fau, 0x00004284u, 0x000042beu, 0x000042bdu, 0x000200f8u, 0x000042beu, 0x000500c4u, 0x00000008u, 0x000042c1u, 0x00000194u, 0x00003d01u, 0x0003003eu, 0x000042b8u, 0x000042c1u, 0x000500c7u, 0x00000008u, 0x000042c4u, 0x00003d0bu, 0x000001e0u, 0x000500abu, 0x00000058u, 0x000042c5u, 0x000042c4u, 0x00000185u, 0x000300f7u, 0x000042c6u, 0x00000000u, 0x000400fau, 0x000042c5u, 0x000042c7u, 0x000042c6u, 0x000200f8u, 0x000042c7u, 0x000500c7u, 0x00000008u, 0x000042cau, 0x00003e8cu, 0x000042c1u, 0x00050082u, 0x00000008u, 0x000042cbu, 0x000042cau, 0x00000194u, 0x0007000cu, 0x00000008u, 0x000042ccu, 0x00000001u, 0x0000002au, 0x000042cbu, 0x00000185u, 0x000500c6u, 0x00000008u, 0x000042ceu, 0x00003e8cu, 0x000042ccu, 0x0003003eu, 0x00003d24u, 0x000042ceu, 0x000200f9u, 0x000042c6u, 0x000200f8u, 0x000042c6u, 0x000700f5u, 0x00000008u, 0x00008511u, 0x00003e8cu, 0x000042beu, 0x000042ceu, 0x000042c7u, 0x00050082u, 0x00000008u, 0x000042d0u, 0x000042c1u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000042d2u, 0x00008511u, 0x000042d0u, 0x0003003eu, 0x00003d24u, 0x000042d2u, 0x000200f9u, 0x000042bdu, 0x000200f8u, 0x000042bdu, 0x000700f5u, 0x00000008u, 0x00008512u, 0x00003e8cu, 0x000042a1u, 0x000042d2u, 0x000042c6u, 0x0003003eu, 0x000042b9u, 0x00008512u, 0x0003003eu, 0x00003d22u, 0x00008512u, 0x00050082u, 0x00000008u, 0x00003e91u, 0x00008512u, 0x000084d4u, 0x0007000cu, 0x00000008u, 0x00003e92u, 0x00000001u, 0x0000002au, 0x00003e91u, 0x00000bc5u, 0x0003003eu, 0x00003d25u, 0x00003e92u, 0x000500c7u, 0x00000008u, 0x00003e94u, 0x000084d4u, 0x000002eeu, 0x00050080u, 0x00000008u, 0x00003e96u, 0x00003e94u, 0x00003e92u, 0x0003003eu, 0x00003d22u, 0x00003e96u, 0x0003003eu, 0x00003d1cu, 0x00003e94u, 0x0004003du, 0x0000004du, 0x00003e9au, 0x00003d17u, 0x000500aau, 0x00000489u, 0x00003e9bu, 0x00003e9au, 0x00000bcfu, 0x00050051u, 0x00000058u, 0x00003e9cu, 0x00003e9bu, 0x00000000u, 0x00050051u, 0x00000058u, 0x00003e9du, 0x00003e9bu, 0x00000001u, 0x00060050u, 0x00000bd1u, 0x00003e9eu, 0x00001951u, 0x00003e9cu, 0x00003e9du, 0x0004009bu, 0x00000058u, 0x00003e9fu, 0x00003e9eu, 0x0003003eu, 0x00001892u, 0x00003e9fu, 0x000300f7u, 0x00003ea1u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003ea2u, 0x00003ea1u, 0x000200f8u, 0x00003ea2u, 0x0003003eu, 0x00003d18u, 0x00000185u, 0x000200f9u, 0x00003ea1u, 0x000200f8u, 0x00003ea1u, 0x000600a9u, 0x00000008u, 0x0000b1eau, 0x00003e9fu, 0x00000185u, 0x00003e79u, 0x000500aau, 0x00000058u, 0x00003ea5u, 0x0000b1e8u, 0x00000194u, 0x0003003eu, 0x00003d26u, 0x00003ea5u, 0x000500afu, 0x00000058u, 0x00003ea7u, 0x0000b1eau, 0x000002e0u, 0x000300f7u, 0x00003ea8u, 0x00000000u, 0x000400fau, 0x00003ea7u, 0x00003ea9u, 0x00003eaau, 0x000200f8u, 0x00003eaau, 0x00050050u, 0x0000004du, 0x00003eb0u, 0x000084b5u, 0x00003e94u, 0x0003003eu, 0x00003d28u, 0x00003eb0u, 0x000200f9u, 0x00003ea8u, 0x000200f8u, 0x00003ea9u, 0x00050050u, 0x0000004du, 0x00003eadu, 0x000084f3u, 0x00003e96u, 0x0003003eu, 0x00003d28u, 0x00003eadu, 0x000200f9u, 0x00003ea8u, 0x000200f8u, 0x00003ea8u, 0x000700f5u, 0x0000004du, 0x0000853eu, 0x00003eadu, 0x00003ea9u, 0x00003eb0u, 0x00003eaau, 0x0003003eu, 0x00003d27u, 0x0000853eu, 0x000300f7u, 0x00003eb3u, 0x00000000u, 0x000400fau, 0x00001921u, 0x00003eb4u, 0x00003eb5u, 0x000200f8u, 0x00003eb5u, 0x000300f7u, 0x00003f54u, 0x00000000u, 0x000d00fbu, 0x0000b1e8u, 0x00003f54u, 0x00000000u, 0x00003f55u, 0x00000001u, 0x00003f56u, 0x00000002u, 0x00003f57u, 0x00000003u, 0x00003f58u, 0x00000004u, 0x00003f59u, 0x000200f8u, 0x00003f59u, 0x000300f7u, 0x00004109u, 0x00000000u, 0x000700fbu, 0x0000b1e9u, 0x0000410au, 0x00000000u, 0x0000410bu, 0x00000001u, 0x0000410cu, 0x000200f8u, 0x0000410cu, 0x0004007cu, 0x000000a0u, 0x0000414eu, 0x0000853eu, 0x0003003eu, 0x00005aeau, 0x00003ce0u, 0x0003003eu, 0x00005aebu, 0x00003ce3u, 0x0003003eu, 0x00003e22u, 0x000018feu, 0x0003003eu, 0x00003e23u, 0x0000414eu, 0x00050041u, 0x00000007u, 0x000052f0u, 0x00003e23u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000052f1u, 0x000052f0u, 0x00050084u, 0x00000006u, 0x000052f2u, 0x00003ce3u, 0x000052f1u, 0x00050080u, 0x00000006u, 0x000052f3u, 0x00003ce0u, 0x000052f2u, 0x0003003eu, 0x000052e8u, 0x000052f3u, 0x00050041u, 0x00000007u, 0x000052f4u, 0x00003e23u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000052f5u, 0x000052f4u, 0x00050080u, 0x00000006u, 0x000052f7u, 0x000052f3u, 0x000052f5u, 0x0003003eu, 0x000052e8u, 0x000052f7u, 0x000500c7u, 0x00000006u, 0x000052f9u, 0x000052f7u, 0x000006b4u, 0x0003003eu, 0x000052e8u, 0x000052f9u, 0x0003003eu, 0x000052e9u, 0x000052f9u, 0x0004003du, 0x00000006u, 0x000052fcu, 0x000052f0u, 0x000500c7u, 0x00000006u, 0x000052fdu, 0x000052fcu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000052feu, 0x000052fdu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00005300u, 0x000052f9u, 0x000052feu, 0x0003003eu, 0x000052e9u, 0x00005300u, 0x000500c6u, 0x00000006u, 0x00005302u, 0x00005300u, 0x00000331u, 0x0003003eu, 0x000052e9u, 0x00005302u, 0x00080041u, 0x000001f9u, 0x00005305u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005302u, 0x0004003du, 0x000001abu, 0x00005306u, 0x00005305u, 0x00040071u, 0x00000006u, 0x00005307u, 0x00005306u, 0x0003003eu, 0x000052eau, 0x00005307u, 0x0004007cu, 0x00000008u, 0x00005309u, 0x00005307u, 0x00070050u, 0x00000009u, 0x0000530au, 0x00005309u, 0x00005309u, 0x00005309u, 0x00005309u, 0x0003003eu, 0x000052ebu, 0x0000530au, 0x0003003eu, 0x00003d2bu, 0x0000530au, 0x000300f7u, 0x00004153u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00004154u, 0x00004153u, 0x000200f8u, 0x00004154u, 0x00050050u, 0x0000004du, 0x00004157u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00004158u, 0x00004157u, 0x0003003eu, 0x00005aeeu, 0x00003ce0u, 0x0003003eu, 0x00005aefu, 0x00003ce3u, 0x0003003eu, 0x00003e25u, 0x000018feu, 0x0003003eu, 0x00003e26u, 0x00004158u, 0x00050041u, 0x00000007u, 0x00005313u, 0x00003e26u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005314u, 0x00005313u, 0x00050084u, 0x00000006u, 0x00005315u, 0x00003ce3u, 0x00005314u, 0x00050080u, 0x00000006u, 0x00005316u, 0x00003ce0u, 0x00005315u, 0x0003003eu, 0x0000530bu, 0x00005316u, 0x00050041u, 0x00000007u, 0x00005317u, 0x00003e26u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005318u, 0x00005317u, 0x00050080u, 0x00000006u, 0x0000531au, 0x00005316u, 0x00005318u, 0x0003003eu, 0x0000530bu, 0x0000531au, 0x000500c7u, 0x00000006u, 0x0000531cu, 0x0000531au, 0x000006b4u, 0x0003003eu, 0x0000530bu, 0x0000531cu, 0x0003003eu, 0x0000530cu, 0x0000531cu, 0x0004003du, 0x00000006u, 0x0000531fu, 0x00005313u, 0x000500c7u, 0x00000006u, 0x00005320u, 0x0000531fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005321u, 0x00005320u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00005323u, 0x0000531cu, 0x00005321u, 0x0003003eu, 0x0000530cu, 0x00005323u, 0x000500c6u, 0x00000006u, 0x00005325u, 0x00005323u, 0x00000331u, 0x0003003eu, 0x0000530cu, 0x00005325u, 0x00080041u, 0x000001f9u, 0x00005328u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005325u, 0x0004003du, 0x000001abu, 0x00005329u, 0x00005328u, 0x00040071u, 0x00000006u, 0x0000532au, 0x00005329u, 0x0003003eu, 0x0000530du, 0x0000532au, 0x0004007cu, 0x00000008u, 0x0000532cu, 0x0000532au, 0x00070050u, 0x00000009u, 0x0000532du, 0x0000532cu, 0x0000532cu, 0x0000532cu, 0x0000532cu, 0x0003003eu, 0x0000530eu, 0x0000532du, 0x0003003eu, 0x00003d33u, 0x0000532du, 0x00050050u, 0x0000004du, 0x0000415eu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x0000415fu, 0x0000415eu, 0x0003003eu, 0x00005af2u, 0x00003ce0u, 0x0003003eu, 0x00005af3u, 0x00003ce3u, 0x0003003eu, 0x00003e28u, 0x000018feu, 0x0003003eu, 0x00003e29u, 0x0000415fu, 0x00050041u, 0x00000007u, 0x00005336u, 0x00003e29u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005337u, 0x00005336u, 0x00050084u, 0x00000006u, 0x00005338u, 0x00003ce3u, 0x00005337u, 0x00050080u, 0x00000006u, 0x00005339u, 0x00003ce0u, 0x00005338u, 0x0003003eu, 0x0000532eu, 0x00005339u, 0x00050041u, 0x00000007u, 0x0000533au, 0x00003e29u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000533bu, 0x0000533au, 0x00050080u, 0x00000006u, 0x0000533du, 0x00005339u, 0x0000533bu, 0x0003003eu, 0x0000532eu, 0x0000533du, 0x000500c7u, 0x00000006u, 0x0000533fu, 0x0000533du, 0x000006b4u, 0x0003003eu, 0x0000532eu, 0x0000533fu, 0x0003003eu, 0x0000532fu, 0x0000533fu, 0x0004003du, 0x00000006u, 0x00005342u, 0x00005336u, 0x000500c7u, 0x00000006u, 0x00005343u, 0x00005342u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005344u, 0x00005343u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00005346u, 0x0000533fu, 0x00005344u, 0x0003003eu, 0x0000532fu, 0x00005346u, 0x000500c6u, 0x00000006u, 0x00005348u, 0x00005346u, 0x00000331u, 0x0003003eu, 0x0000532fu, 0x00005348u, 0x00080041u, 0x000001f9u, 0x0000534bu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005348u, 0x0004003du, 0x000001abu, 0x0000534cu, 0x0000534bu, 0x00040071u, 0x00000006u, 0x0000534du, 0x0000534cu, 0x0003003eu, 0x00005330u, 0x0000534du, 0x0004007cu, 0x00000008u, 0x0000534fu, 0x0000534du, 0x00070050u, 0x00000009u, 0x00005350u, 0x0000534fu, 0x0000534fu, 0x0000534fu, 0x0000534fu, 0x0003003eu, 0x00005331u, 0x00005350u, 0x0003003eu, 0x00003d3bu, 0x00005350u, 0x000200f9u, 0x00004153u, 0x000200f8u, 0x00004153u, 0x000700f5u, 0x00000009u, 0x00008b59u, 0x000072a9u, 0x0000410cu, 0x00005350u, 0x00004154u, 0x000700f5u, 0x00000009u, 0x00008991u, 0x000072a9u, 0x0000410cu, 0x0000532du, 0x00004154u, 0x000300f7u, 0x00004164u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00004165u, 0x00004164u, 0x000200f8u, 0x00004165u, 0x00050050u, 0x0000004du, 0x00004168u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004169u, 0x00004168u, 0x0003003eu, 0x00005af6u, 0x00003ce0u, 0x0003003eu, 0x00005af7u, 0x00003ce3u, 0x0003003eu, 0x00003e2bu, 0x000018feu, 0x0003003eu, 0x00003e2cu, 0x00004169u, 0x00050041u, 0x00000007u, 0x00005359u, 0x00003e2cu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000535au, 0x00005359u, 0x00050084u, 0x00000006u, 0x0000535bu, 0x00003ce3u, 0x0000535au, 0x00050080u, 0x00000006u, 0x0000535cu, 0x00003ce0u, 0x0000535bu, 0x0003003eu, 0x00005351u, 0x0000535cu, 0x00050041u, 0x00000007u, 0x0000535du, 0x00003e2cu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000535eu, 0x0000535du, 0x00050080u, 0x00000006u, 0x00005360u, 0x0000535cu, 0x0000535eu, 0x0003003eu, 0x00005351u, 0x00005360u, 0x000500c7u, 0x00000006u, 0x00005362u, 0x00005360u, 0x000006b4u, 0x0003003eu, 0x00005351u, 0x00005362u, 0x0003003eu, 0x00005352u, 0x00005362u, 0x0004003du, 0x00000006u, 0x00005365u, 0x00005359u, 0x000500c7u, 0x00000006u, 0x00005366u, 0x00005365u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005367u, 0x00005366u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00005369u, 0x00005362u, 0x00005367u, 0x0003003eu, 0x00005352u, 0x00005369u, 0x000500c6u, 0x00000006u, 0x0000536bu, 0x00005369u, 0x00000331u, 0x0003003eu, 0x00005352u, 0x0000536bu, 0x00080041u, 0x000001f9u, 0x0000536eu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000536bu, 0x0004003du, 0x000001abu, 0x0000536fu, 0x0000536eu, 0x00040071u, 0x00000006u, 0x00005370u, 0x0000536fu, 0x0003003eu, 0x00005353u, 0x00005370u, 0x0004007cu, 0x00000008u, 0x00005372u, 0x00005370u, 0x00070050u, 0x00000009u, 0x00005373u, 0x00005372u, 0x00005372u, 0x00005372u, 0x00005372u, 0x0003003eu, 0x00005354u, 0x00005373u, 0x0003003eu, 0x00003d43u, 0x00005373u, 0x000200f9u, 0x00004164u, 0x000200f8u, 0x00004164u, 0x000700f5u, 0x00000009u, 0x00008c3du, 0x000072a9u, 0x00004153u, 0x00005373u, 0x00004165u, 0x000200f9u, 0x00004109u, 0x000200f8u, 0x0000410bu, 0x0004007cu, 0x000000a0u, 0x0000412eu, 0x0000853eu, 0x0003003eu, 0x00005adau, 0x00003ce0u, 0x0003003eu, 0x00005adbu, 0x00003ce3u, 0x0003003eu, 0x00003e16u, 0x000018feu, 0x0003003eu, 0x00003e17u, 0x0000412eu, 0x00050041u, 0x00000007u, 0x00005229u, 0x00003e17u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000522au, 0x00005229u, 0x00050084u, 0x00000006u, 0x0000522bu, 0x00003ce3u, 0x0000522au, 0x00050080u, 0x00000006u, 0x0000522cu, 0x00003ce0u, 0x0000522bu, 0x0003003eu, 0x00005220u, 0x0000522cu, 0x00050041u, 0x00000007u, 0x0000522du, 0x00003e17u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000522eu, 0x0000522du, 0x000500c2u, 0x00000006u, 0x0000522fu, 0x0000522eu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00005231u, 0x0000522cu, 0x0000522fu, 0x0003003eu, 0x00005220u, 0x00005231u, 0x000500c7u, 0x00000006u, 0x00005233u, 0x00005231u, 0x000006b4u, 0x0003003eu, 0x00005220u, 0x00005233u, 0x0004003du, 0x00000006u, 0x00005235u, 0x0000522du, 0x000400c8u, 0x00000006u, 0x00005236u, 0x00005235u, 0x000500c7u, 0x00000006u, 0x00005237u, 0x00005236u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00005238u, 0x00005237u, 0x000006bcu, 0x0003003eu, 0x00005221u, 0x00005238u, 0x0003003eu, 0x00005222u, 0x00005233u, 0x0004003du, 0x00000006u, 0x0000523bu, 0x00005229u, 0x000500c7u, 0x00000006u, 0x0000523cu, 0x0000523bu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000523du, 0x0000523cu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000523fu, 0x00005233u, 0x0000523du, 0x0003003eu, 0x00005222u, 0x0000523fu, 0x000500c6u, 0x00000006u, 0x00005241u, 0x0000523fu, 0x00000331u, 0x0003003eu, 0x00005222u, 0x00005241u, 0x00080041u, 0x000001f9u, 0x00005244u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005241u, 0x0004003du, 0x000001abu, 0x00005245u, 0x00005244u, 0x00040071u, 0x00000006u, 0x00005246u, 0x00005245u, 0x0003003eu, 0x00005223u, 0x00005246u, 0x000500c2u, 0x00000006u, 0x00005249u, 0x00005246u, 0x00005238u, 0x000500c7u, 0x00000006u, 0x0000524au, 0x00005249u, 0x000006d8u, 0x0003003eu, 0x00005223u, 0x0000524au, 0x000500c4u, 0x00000006u, 0x0000524cu, 0x0000524au, 0x0000019du, 0x000500c5u, 0x00000006u, 0x0000524eu, 0x0000524au, 0x0000524cu, 0x0003003eu, 0x00005223u, 0x0000524eu, 0x0004007cu, 0x00000008u, 0x00005250u, 0x0000524eu, 0x00070050u, 0x00000009u, 0x00005251u, 0x00005250u, 0x00005250u, 0x00005250u, 0x00005250u, 0x0003003eu, 0x00005224u, 0x00005251u, 0x0003003eu, 0x00003d2bu, 0x00005251u, 0x000300f7u, 0x00004133u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00004134u, 0x00004133u, 0x000200f8u, 0x00004134u, 0x00050050u, 0x0000004du, 0x00004137u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00004138u, 0x00004137u, 0x0003003eu, 0x00005adeu, 0x00003ce0u, 0x0003003eu, 0x00005adfu, 0x00003ce3u, 0x0003003eu, 0x00003e19u, 0x000018feu, 0x0003003eu, 0x00003e1au, 0x00004138u, 0x00050041u, 0x00000007u, 0x0000525bu, 0x00003e1au, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000525cu, 0x0000525bu, 0x00050084u, 0x00000006u, 0x0000525du, 0x00003ce3u, 0x0000525cu, 0x00050080u, 0x00000006u, 0x0000525eu, 0x00003ce0u, 0x0000525du, 0x0003003eu, 0x00005252u, 0x0000525eu, 0x00050041u, 0x00000007u, 0x0000525fu, 0x00003e1au, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005260u, 0x0000525fu, 0x000500c2u, 0x00000006u, 0x00005261u, 0x00005260u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00005263u, 0x0000525eu, 0x00005261u, 0x0003003eu, 0x00005252u, 0x00005263u, 0x000500c7u, 0x00000006u, 0x00005265u, 0x00005263u, 0x000006b4u, 0x0003003eu, 0x00005252u, 0x00005265u, 0x0004003du, 0x00000006u, 0x00005267u, 0x0000525fu, 0x000400c8u, 0x00000006u, 0x00005268u, 0x00005267u, 0x000500c7u, 0x00000006u, 0x00005269u, 0x00005268u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000526au, 0x00005269u, 0x000006bcu, 0x0003003eu, 0x00005253u, 0x0000526au, 0x0003003eu, 0x00005254u, 0x00005265u, 0x0004003du, 0x00000006u, 0x0000526du, 0x0000525bu, 0x000500c7u, 0x00000006u, 0x0000526eu, 0x0000526du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000526fu, 0x0000526eu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00005271u, 0x00005265u, 0x0000526fu, 0x0003003eu, 0x00005254u, 0x00005271u, 0x000500c6u, 0x00000006u, 0x00005273u, 0x00005271u, 0x00000331u, 0x0003003eu, 0x00005254u, 0x00005273u, 0x00080041u, 0x000001f9u, 0x00005276u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005273u, 0x0004003du, 0x000001abu, 0x00005277u, 0x00005276u, 0x00040071u, 0x00000006u, 0x00005278u, 0x00005277u, 0x0003003eu, 0x00005255u, 0x00005278u, 0x000500c2u, 0x00000006u, 0x0000527bu, 0x00005278u, 0x0000526au, 0x000500c7u, 0x00000006u, 0x0000527cu, 0x0000527bu, 0x000006d8u, 0x0003003eu, 0x00005255u, 0x0000527cu, 0x000500c4u, 0x00000006u, 0x0000527eu, 0x0000527cu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00005280u, 0x0000527cu, 0x0000527eu, 0x0003003eu, 0x00005255u, 0x00005280u, 0x0004007cu, 0x00000008u, 0x00005282u, 0x00005280u, 0x00070050u, 0x00000009u, 0x00005283u, 0x00005282u, 0x00005282u, 0x00005282u, 0x00005282u, 0x0003003eu, 0x00005256u, 0x00005283u, 0x0003003eu, 0x00003d33u, 0x00005283u, 0x00050050u, 0x0000004du, 0x0000413eu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x0000413fu, 0x0000413eu, 0x0003003eu, 0x00005ae2u, 0x00003ce0u, 0x0003003eu, 0x00005ae3u, 0x00003ce3u, 0x0003003eu, 0x00003e1cu, 0x000018feu, 0x0003003eu, 0x00003e1du, 0x0000413fu, 0x00050041u, 0x00000007u, 0x0000528du, 0x00003e1du, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000528eu, 0x0000528du, 0x00050084u, 0x00000006u, 0x0000528fu, 0x00003ce3u, 0x0000528eu, 0x00050080u, 0x00000006u, 0x00005290u, 0x00003ce0u, 0x0000528fu, 0x0003003eu, 0x00005284u, 0x00005290u, 0x00050041u, 0x00000007u, 0x00005291u, 0x00003e1du, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005292u, 0x00005291u, 0x000500c2u, 0x00000006u, 0x00005293u, 0x00005292u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00005295u, 0x00005290u, 0x00005293u, 0x0003003eu, 0x00005284u, 0x00005295u, 0x000500c7u, 0x00000006u, 0x00005297u, 0x00005295u, 0x000006b4u, 0x0003003eu, 0x00005284u, 0x00005297u, 0x0004003du, 0x00000006u, 0x00005299u, 0x00005291u, 0x000400c8u, 0x00000006u, 0x0000529au, 0x00005299u, 0x000500c7u, 0x00000006u, 0x0000529bu, 0x0000529au, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000529cu, 0x0000529bu, 0x000006bcu, 0x0003003eu, 0x00005285u, 0x0000529cu, 0x0003003eu, 0x00005286u, 0x00005297u, 0x0004003du, 0x00000006u, 0x0000529fu, 0x0000528du, 0x000500c7u, 0x00000006u, 0x000052a0u, 0x0000529fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000052a1u, 0x000052a0u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000052a3u, 0x00005297u, 0x000052a1u, 0x0003003eu, 0x00005286u, 0x000052a3u, 0x000500c6u, 0x00000006u, 0x000052a5u, 0x000052a3u, 0x00000331u, 0x0003003eu, 0x00005286u, 0x000052a5u, 0x00080041u, 0x000001f9u, 0x000052a8u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000052a5u, 0x0004003du, 0x000001abu, 0x000052a9u, 0x000052a8u, 0x00040071u, 0x00000006u, 0x000052aau, 0x000052a9u, 0x0003003eu, 0x00005287u, 0x000052aau, 0x000500c2u, 0x00000006u, 0x000052adu, 0x000052aau, 0x0000529cu, 0x000500c7u, 0x00000006u, 0x000052aeu, 0x000052adu, 0x000006d8u, 0x0003003eu, 0x00005287u, 0x000052aeu, 0x000500c4u, 0x00000006u, 0x000052b0u, 0x000052aeu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000052b2u, 0x000052aeu, 0x000052b0u, 0x0003003eu, 0x00005287u, 0x000052b2u, 0x0004007cu, 0x00000008u, 0x000052b4u, 0x000052b2u, 0x00070050u, 0x00000009u, 0x000052b5u, 0x000052b4u, 0x000052b4u, 0x000052b4u, 0x000052b4u, 0x0003003eu, 0x00005288u, 0x000052b5u, 0x0003003eu, 0x00003d3bu, 0x000052b5u, 0x000200f9u, 0x00004133u, 0x000200f8u, 0x00004133u, 0x000700f5u, 0x00000009u, 0x00008b57u, 0x000072a9u, 0x0000410bu, 0x000052b5u, 0x00004134u, 0x000700f5u, 0x00000009u, 0x0000898fu, 0x000072a9u, 0x0000410bu, 0x00005283u, 0x00004134u, 0x000300f7u, 0x00004144u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00004145u, 0x00004144u, 0x000200f8u, 0x00004145u, 0x00050050u, 0x0000004du, 0x00004148u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004149u, 0x00004148u, 0x0003003eu, 0x00005ae6u, 0x00003ce0u, 0x0003003eu, 0x00005ae7u, 0x00003ce3u, 0x0003003eu, 0x00003e1fu, 0x000018feu, 0x0003003eu, 0x00003e20u, 0x00004149u, 0x00050041u, 0x00000007u, 0x000052bfu, 0x00003e20u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000052c0u, 0x000052bfu, 0x00050084u, 0x00000006u, 0x000052c1u, 0x00003ce3u, 0x000052c0u, 0x00050080u, 0x00000006u, 0x000052c2u, 0x00003ce0u, 0x000052c1u, 0x0003003eu, 0x000052b6u, 0x000052c2u, 0x00050041u, 0x00000007u, 0x000052c3u, 0x00003e20u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000052c4u, 0x000052c3u, 0x000500c2u, 0x00000006u, 0x000052c5u, 0x000052c4u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000052c7u, 0x000052c2u, 0x000052c5u, 0x0003003eu, 0x000052b6u, 0x000052c7u, 0x000500c7u, 0x00000006u, 0x000052c9u, 0x000052c7u, 0x000006b4u, 0x0003003eu, 0x000052b6u, 0x000052c9u, 0x0004003du, 0x00000006u, 0x000052cbu, 0x000052c3u, 0x000400c8u, 0x00000006u, 0x000052ccu, 0x000052cbu, 0x000500c7u, 0x00000006u, 0x000052cdu, 0x000052ccu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000052ceu, 0x000052cdu, 0x000006bcu, 0x0003003eu, 0x000052b7u, 0x000052ceu, 0x0003003eu, 0x000052b8u, 0x000052c9u, 0x0004003du, 0x00000006u, 0x000052d1u, 0x000052bfu, 0x000500c7u, 0x00000006u, 0x000052d2u, 0x000052d1u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000052d3u, 0x000052d2u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000052d5u, 0x000052c9u, 0x000052d3u, 0x0003003eu, 0x000052b8u, 0x000052d5u, 0x000500c6u, 0x00000006u, 0x000052d7u, 0x000052d5u, 0x00000331u, 0x0003003eu, 0x000052b8u, 0x000052d7u, 0x00080041u, 0x000001f9u, 0x000052dau, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000052d7u, 0x0004003du, 0x000001abu, 0x000052dbu, 0x000052dau, 0x00040071u, 0x00000006u, 0x000052dcu, 0x000052dbu, 0x0003003eu, 0x000052b9u, 0x000052dcu, 0x000500c2u, 0x00000006u, 0x000052dfu, 0x000052dcu, 0x000052ceu, 0x000500c7u, 0x00000006u, 0x000052e0u, 0x000052dfu, 0x000006d8u, 0x0003003eu, 0x000052b9u, 0x000052e0u, 0x000500c4u, 0x00000006u, 0x000052e2u, 0x000052e0u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000052e4u, 0x000052e0u, 0x000052e2u, 0x0003003eu, 0x000052b9u, 0x000052e4u, 0x0004007cu, 0x00000008u, 0x000052e6u, 0x000052e4u, 0x00070050u, 0x00000009u, 0x000052e7u, 0x000052e6u, 0x000052e6u, 0x000052e6u, 0x000052e6u, 0x0003003eu, 0x000052bau, 0x000052e7u, 0x0003003eu, 0x00003d43u, 0x000052e7u, 0x000200f9u, 0x00004144u, 0x000200f8u, 0x00004144u, 0x000700f5u, 0x00000009u, 0x00008c3bu, 0x000072a9u, 0x00004133u, 0x000052e7u, 0x00004145u, 0x000200f9u, 0x00004109u, 0x000200f8u, 0x0000410au, 0x0004007cu, 0x000000a0u, 0x0000410eu, 0x0000853eu, 0x0003003eu, 0x00005afau, 0x00003ce0u, 0x0003003eu, 0x00005afbu, 0x00003ce3u, 0x0003003eu, 0x00003e2eu, 0x000018feu, 0x0003003eu, 0x00003e2fu, 0x0000410eu, 0x00050041u, 0x00000007u, 0x00005180u, 0x00003e2fu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005181u, 0x00005180u, 0x00050084u, 0x00000006u, 0x00005182u, 0x00003ce3u, 0x00005181u, 0x00050080u, 0x00000006u, 0x00005183u, 0x00003ce0u, 0x00005182u, 0x0003003eu, 0x00005178u, 0x00005183u, 0x00050041u, 0x00000007u, 0x00005184u, 0x00003e2fu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005185u, 0x00005184u, 0x00050084u, 0x00000006u, 0x00005186u, 0x00005185u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00005188u, 0x00005183u, 0x00005186u, 0x0003003eu, 0x00005178u, 0x00005188u, 0x000500c7u, 0x00000006u, 0x0000518au, 0x00005188u, 0x000006b4u, 0x0003003eu, 0x00005178u, 0x0000518au, 0x000500c2u, 0x00000006u, 0x0000518cu, 0x0000518au, 0x00000194u, 0x0003003eu, 0x00005179u, 0x0000518cu, 0x0004003du, 0x00000006u, 0x0000518eu, 0x00005180u, 0x000500c7u, 0x00000006u, 0x0000518fu, 0x0000518eu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005190u, 0x0000518fu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00005192u, 0x0000518cu, 0x00005190u, 0x0003003eu, 0x00005179u, 0x00005192u, 0x000500c6u, 0x00000006u, 0x00005194u, 0x00005192u, 0x0000032au, 0x0003003eu, 0x00005179u, 0x00005194u, 0x00080041u, 0x000001f2u, 0x00005197u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005194u, 0x0004003du, 0x000001adu, 0x00005198u, 0x00005197u, 0x00040071u, 0x00000006u, 0x00005199u, 0x00005198u, 0x0003003eu, 0x0000517au, 0x00005199u, 0x000500c2u, 0x00000006u, 0x0000519bu, 0x00005199u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000519cu, 0x0000519bu, 0x000500c7u, 0x00000006u, 0x0000519eu, 0x00005199u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000519fu, 0x0000519eu, 0x00050050u, 0x0000004du, 0x000051a0u, 0x0000519cu, 0x0000519fu, 0x0009004fu, 0x00000009u, 0x000051a1u, 0x000051a0u, 0x000051a0u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000517bu, 0x000051a1u, 0x0003003eu, 0x00003d2bu, 0x000051a1u, 0x000300f7u, 0x00004113u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00004114u, 0x00004113u, 0x000200f8u, 0x00004114u, 0x00050050u, 0x0000004du, 0x00004117u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00004118u, 0x00004117u, 0x0003003eu, 0x00005afeu, 0x00003ce0u, 0x0003003eu, 0x00005affu, 0x00003ce3u, 0x0003003eu, 0x00003e31u, 0x000018feu, 0x0003003eu, 0x00003e32u, 0x00004118u, 0x00050041u, 0x00000007u, 0x000051aau, 0x00003e32u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000051abu, 0x000051aau, 0x00050084u, 0x00000006u, 0x000051acu, 0x00003ce3u, 0x000051abu, 0x00050080u, 0x00000006u, 0x000051adu, 0x00003ce0u, 0x000051acu, 0x0003003eu, 0x000051a2u, 0x000051adu, 0x00050041u, 0x00000007u, 0x000051aeu, 0x00003e32u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000051afu, 0x000051aeu, 0x00050084u, 0x00000006u, 0x000051b0u, 0x000051afu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000051b2u, 0x000051adu, 0x000051b0u, 0x0003003eu, 0x000051a2u, 0x000051b2u, 0x000500c7u, 0x00000006u, 0x000051b4u, 0x000051b2u, 0x000006b4u, 0x0003003eu, 0x000051a2u, 0x000051b4u, 0x000500c2u, 0x00000006u, 0x000051b6u, 0x000051b4u, 0x00000194u, 0x0003003eu, 0x000051a3u, 0x000051b6u, 0x0004003du, 0x00000006u, 0x000051b8u, 0x000051aau, 0x000500c7u, 0x00000006u, 0x000051b9u, 0x000051b8u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000051bau, 0x000051b9u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000051bcu, 0x000051b6u, 0x000051bau, 0x0003003eu, 0x000051a3u, 0x000051bcu, 0x000500c6u, 0x00000006u, 0x000051beu, 0x000051bcu, 0x0000032au, 0x0003003eu, 0x000051a3u, 0x000051beu, 0x00080041u, 0x000001f2u, 0x000051c1u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000051beu, 0x0004003du, 0x000001adu, 0x000051c2u, 0x000051c1u, 0x00040071u, 0x00000006u, 0x000051c3u, 0x000051c2u, 0x0003003eu, 0x000051a4u, 0x000051c3u, 0x000500c2u, 0x00000006u, 0x000051c5u, 0x000051c3u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000051c6u, 0x000051c5u, 0x000500c7u, 0x00000006u, 0x000051c8u, 0x000051c3u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000051c9u, 0x000051c8u, 0x00050050u, 0x0000004du, 0x000051cau, 0x000051c6u, 0x000051c9u, 0x0009004fu, 0x00000009u, 0x000051cbu, 0x000051cau, 0x000051cau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000051a5u, 0x000051cbu, 0x0003003eu, 0x00003d33u, 0x000051cbu, 0x00050050u, 0x0000004du, 0x0000411eu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x0000411fu, 0x0000411eu, 0x0003003eu, 0x00005b02u, 0x00003ce0u, 0x0003003eu, 0x00005b03u, 0x00003ce3u, 0x0003003eu, 0x00003e34u, 0x000018feu, 0x0003003eu, 0x00003e35u, 0x0000411fu, 0x00050041u, 0x00000007u, 0x000051d4u, 0x00003e35u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000051d5u, 0x000051d4u, 0x00050084u, 0x00000006u, 0x000051d6u, 0x00003ce3u, 0x000051d5u, 0x00050080u, 0x00000006u, 0x000051d7u, 0x00003ce0u, 0x000051d6u, 0x0003003eu, 0x000051ccu, 0x000051d7u, 0x00050041u, 0x00000007u, 0x000051d8u, 0x00003e35u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000051d9u, 0x000051d8u, 0x00050084u, 0x00000006u, 0x000051dau, 0x000051d9u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000051dcu, 0x000051d7u, 0x000051dau, 0x0003003eu, 0x000051ccu, 0x000051dcu, 0x000500c7u, 0x00000006u, 0x000051deu, 0x000051dcu, 0x000006b4u, 0x0003003eu, 0x000051ccu, 0x000051deu, 0x000500c2u, 0x00000006u, 0x000051e0u, 0x000051deu, 0x00000194u, 0x0003003eu, 0x000051cdu, 0x000051e0u, 0x0004003du, 0x00000006u, 0x000051e2u, 0x000051d4u, 0x000500c7u, 0x00000006u, 0x000051e3u, 0x000051e2u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000051e4u, 0x000051e3u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000051e6u, 0x000051e0u, 0x000051e4u, 0x0003003eu, 0x000051cdu, 0x000051e6u, 0x000500c6u, 0x00000006u, 0x000051e8u, 0x000051e6u, 0x0000032au, 0x0003003eu, 0x000051cdu, 0x000051e8u, 0x00080041u, 0x000001f2u, 0x000051ebu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000051e8u, 0x0004003du, 0x000001adu, 0x000051ecu, 0x000051ebu, 0x00040071u, 0x00000006u, 0x000051edu, 0x000051ecu, 0x0003003eu, 0x000051ceu, 0x000051edu, 0x000500c2u, 0x00000006u, 0x000051efu, 0x000051edu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000051f0u, 0x000051efu, 0x000500c7u, 0x00000006u, 0x000051f2u, 0x000051edu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000051f3u, 0x000051f2u, 0x00050050u, 0x0000004du, 0x000051f4u, 0x000051f0u, 0x000051f3u, 0x0009004fu, 0x00000009u, 0x000051f5u, 0x000051f4u, 0x000051f4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000051cfu, 0x000051f5u, 0x0003003eu, 0x00003d3bu, 0x000051f5u, 0x000200f9u, 0x00004113u, 0x000200f8u, 0x00004113u, 0x000700f5u, 0x00000009u, 0x00008b55u, 0x000072a9u, 0x0000410au, 0x000051f5u, 0x00004114u, 0x000700f5u, 0x00000009u, 0x0000898du, 0x000072a9u, 0x0000410au, 0x000051cbu, 0x00004114u, 0x000300f7u, 0x00004124u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00004125u, 0x00004124u, 0x000200f8u, 0x00004125u, 0x00050050u, 0x0000004du, 0x00004128u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004129u, 0x00004128u, 0x0003003eu, 0x00005b06u, 0x00003ce0u, 0x0003003eu, 0x00005b07u, 0x00003ce3u, 0x0003003eu, 0x00003e37u, 0x000018feu, 0x0003003eu, 0x00003e38u, 0x00004129u, 0x00050041u, 0x00000007u, 0x000051feu, 0x00003e38u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000051ffu, 0x000051feu, 0x00050084u, 0x00000006u, 0x00005200u, 0x00003ce3u, 0x000051ffu, 0x00050080u, 0x00000006u, 0x00005201u, 0x00003ce0u, 0x00005200u, 0x0003003eu, 0x000051f6u, 0x00005201u, 0x00050041u, 0x00000007u, 0x00005202u, 0x00003e38u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005203u, 0x00005202u, 0x00050084u, 0x00000006u, 0x00005204u, 0x00005203u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00005206u, 0x00005201u, 0x00005204u, 0x0003003eu, 0x000051f6u, 0x00005206u, 0x000500c7u, 0x00000006u, 0x00005208u, 0x00005206u, 0x000006b4u, 0x0003003eu, 0x000051f6u, 0x00005208u, 0x000500c2u, 0x00000006u, 0x0000520au, 0x00005208u, 0x00000194u, 0x0003003eu, 0x000051f7u, 0x0000520au, 0x0004003du, 0x00000006u, 0x0000520cu, 0x000051feu, 0x000500c7u, 0x00000006u, 0x0000520du, 0x0000520cu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000520eu, 0x0000520du, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00005210u, 0x0000520au, 0x0000520eu, 0x0003003eu, 0x000051f7u, 0x00005210u, 0x000500c6u, 0x00000006u, 0x00005212u, 0x00005210u, 0x0000032au, 0x0003003eu, 0x000051f7u, 0x00005212u, 0x00080041u, 0x000001f2u, 0x00005215u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005212u, 0x0004003du, 0x000001adu, 0x00005216u, 0x00005215u, 0x00040071u, 0x00000006u, 0x00005217u, 0x00005216u, 0x0003003eu, 0x000051f8u, 0x00005217u, 0x000500c2u, 0x00000006u, 0x00005219u, 0x00005217u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000521au, 0x00005219u, 0x000500c7u, 0x00000006u, 0x0000521cu, 0x00005217u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000521du, 0x0000521cu, 0x00050050u, 0x0000004du, 0x0000521eu, 0x0000521au, 0x0000521du, 0x0009004fu, 0x00000009u, 0x0000521fu, 0x0000521eu, 0x0000521eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000051f9u, 0x0000521fu, 0x0003003eu, 0x00003d43u, 0x0000521fu, 0x000200f9u, 0x00004124u, 0x000200f8u, 0x00004124u, 0x000700f5u, 0x00000009u, 0x00008c39u, 0x000072a9u, 0x00004113u, 0x0000521fu, 0x00004125u, 0x000200f9u, 0x00004109u, 0x000200f8u, 0x00004109u, 0x000900f5u, 0x00000009u, 0x00008c38u, 0x00008c39u, 0x00004124u, 0x00008c3bu, 0x00004144u, 0x00008c3du, 0x00004164u, 0x000900f5u, 0x00000009u, 0x00008b53u, 0x00008b55u, 0x00004124u, 0x00008b57u, 0x00004144u, 0x00008b59u, 0x00004164u, 0x000900f5u, 0x00000009u, 0x00008a70u, 0x000051a1u, 0x00004124u, 0x00005251u, 0x00004144u, 0x0000530au, 0x00004164u, 0x000900f5u, 0x00000009u, 0x0000898bu, 0x0000898du, 0x00004124u, 0x0000898fu, 0x00004144u, 0x00008991u, 0x00004164u, 0x000200f9u, 0x00003f54u, 0x000200f8u, 0x00003f58u, 0x000300f7u, 0x00004082u, 0x00000000u, 0x000b00fbu, 0x0000b1e9u, 0x00004082u, 0x00000000u, 0x00004083u, 0x00000001u, 0x00004084u, 0x00000002u, 0x00004085u, 0x00000003u, 0x00004086u, 0x000200f8u, 0x00004086u, 0x0004007cu, 0x000000a0u, 0x000040e8u, 0x0000853eu, 0x0003003eu, 0x00005acau, 0x00003ce0u, 0x0003003eu, 0x00005acbu, 0x00003ce3u, 0x0003003eu, 0x00003e0au, 0x000018feu, 0x0003003eu, 0x00003e0bu, 0x000040e8u, 0x00050041u, 0x00000007u, 0x000050d8u, 0x00003e0bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000050d9u, 0x000050d8u, 0x00050084u, 0x00000006u, 0x000050dau, 0x00003ce3u, 0x000050d9u, 0x00050080u, 0x00000006u, 0x000050dbu, 0x00003ce0u, 0x000050dau, 0x0003003eu, 0x000050d0u, 0x000050dbu, 0x00050041u, 0x00000007u, 0x000050dcu, 0x00003e0bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000050ddu, 0x000050dcu, 0x00050084u, 0x00000006u, 0x000050deu, 0x000050ddu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000050e0u, 0x000050dbu, 0x000050deu, 0x0003003eu, 0x000050d0u, 0x000050e0u, 0x000500c7u, 0x00000006u, 0x000050e2u, 0x000050e0u, 0x000006b4u, 0x0003003eu, 0x000050d0u, 0x000050e2u, 0x000500c2u, 0x00000006u, 0x000050e4u, 0x000050e2u, 0x00000194u, 0x0003003eu, 0x000050d1u, 0x000050e4u, 0x0004003du, 0x00000006u, 0x000050e6u, 0x000050d8u, 0x000500c7u, 0x00000006u, 0x000050e7u, 0x000050e6u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000050e8u, 0x000050e7u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000050eau, 0x000050e4u, 0x000050e8u, 0x0003003eu, 0x000050d1u, 0x000050eau, 0x000500c6u, 0x00000006u, 0x000050ecu, 0x000050eau, 0x0000032au, 0x0003003eu, 0x000050d1u, 0x000050ecu, 0x00080041u, 0x000001f2u, 0x000050efu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000050ecu, 0x0004003du, 0x000001adu, 0x000050f0u, 0x000050efu, 0x00040071u, 0x00000006u, 0x000050f1u, 0x000050f0u, 0x0003003eu, 0x000050d2u, 0x000050f1u, 0x000500c2u, 0x00000006u, 0x000050f3u, 0x000050f1u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x000050f4u, 0x000050f3u, 0x000500c7u, 0x00000006u, 0x000050f6u, 0x000050f1u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x000050f7u, 0x000050f6u, 0x00050050u, 0x0000004du, 0x000050f8u, 0x000050f4u, 0x000050f7u, 0x0009004fu, 0x00000009u, 0x000050f9u, 0x000050f8u, 0x000050f8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000050d3u, 0x000050f9u, 0x0003003eu, 0x00003d2bu, 0x000050f9u, 0x000300f7u, 0x000040edu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000040eeu, 0x000040edu, 0x000200f8u, 0x000040eeu, 0x00050050u, 0x0000004du, 0x000040f1u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x000040f2u, 0x000040f1u, 0x0003003eu, 0x00005aceu, 0x00003ce0u, 0x0003003eu, 0x00005acfu, 0x00003ce3u, 0x0003003eu, 0x00003e0du, 0x000018feu, 0x0003003eu, 0x00003e0eu, 0x000040f2u, 0x00050041u, 0x00000007u, 0x00005102u, 0x00003e0eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005103u, 0x00005102u, 0x00050084u, 0x00000006u, 0x00005104u, 0x00003ce3u, 0x00005103u, 0x00050080u, 0x00000006u, 0x00005105u, 0x00003ce0u, 0x00005104u, 0x0003003eu, 0x000050fau, 0x00005105u, 0x00050041u, 0x00000007u, 0x00005106u, 0x00003e0eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005107u, 0x00005106u, 0x00050084u, 0x00000006u, 0x00005108u, 0x00005107u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000510au, 0x00005105u, 0x00005108u, 0x0003003eu, 0x000050fau, 0x0000510au, 0x000500c7u, 0x00000006u, 0x0000510cu, 0x0000510au, 0x000006b4u, 0x0003003eu, 0x000050fau, 0x0000510cu, 0x000500c2u, 0x00000006u, 0x0000510eu, 0x0000510cu, 0x00000194u, 0x0003003eu, 0x000050fbu, 0x0000510eu, 0x0004003du, 0x00000006u, 0x00005110u, 0x00005102u, 0x000500c7u, 0x00000006u, 0x00005111u, 0x00005110u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005112u, 0x00005111u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00005114u, 0x0000510eu, 0x00005112u, 0x0003003eu, 0x000050fbu, 0x00005114u, 0x000500c6u, 0x00000006u, 0x00005116u, 0x00005114u, 0x0000032au, 0x0003003eu, 0x000050fbu, 0x00005116u, 0x00080041u, 0x000001f2u, 0x00005119u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005116u, 0x0004003du, 0x000001adu, 0x0000511au, 0x00005119u, 0x00040071u, 0x00000006u, 0x0000511bu, 0x0000511au, 0x0003003eu, 0x000050fcu, 0x0000511bu, 0x000500c2u, 0x00000006u, 0x0000511du, 0x0000511bu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000511eu, 0x0000511du, 0x000500c7u, 0x00000006u, 0x00005120u, 0x0000511bu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00005121u, 0x00005120u, 0x00050050u, 0x0000004du, 0x00005122u, 0x0000511eu, 0x00005121u, 0x0009004fu, 0x00000009u, 0x00005123u, 0x00005122u, 0x00005122u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000050fdu, 0x00005123u, 0x0003003eu, 0x00003d33u, 0x00005123u, 0x00050050u, 0x0000004du, 0x000040f8u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x000040f9u, 0x000040f8u, 0x0003003eu, 0x00005ad2u, 0x00003ce0u, 0x0003003eu, 0x00005ad3u, 0x00003ce3u, 0x0003003eu, 0x00003e10u, 0x000018feu, 0x0003003eu, 0x00003e11u, 0x000040f9u, 0x00050041u, 0x00000007u, 0x0000512cu, 0x00003e11u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000512du, 0x0000512cu, 0x00050084u, 0x00000006u, 0x0000512eu, 0x00003ce3u, 0x0000512du, 0x00050080u, 0x00000006u, 0x0000512fu, 0x00003ce0u, 0x0000512eu, 0x0003003eu, 0x00005124u, 0x0000512fu, 0x00050041u, 0x00000007u, 0x00005130u, 0x00003e11u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005131u, 0x00005130u, 0x00050084u, 0x00000006u, 0x00005132u, 0x00005131u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00005134u, 0x0000512fu, 0x00005132u, 0x0003003eu, 0x00005124u, 0x00005134u, 0x000500c7u, 0x00000006u, 0x00005136u, 0x00005134u, 0x000006b4u, 0x0003003eu, 0x00005124u, 0x00005136u, 0x000500c2u, 0x00000006u, 0x00005138u, 0x00005136u, 0x00000194u, 0x0003003eu, 0x00005125u, 0x00005138u, 0x0004003du, 0x00000006u, 0x0000513au, 0x0000512cu, 0x000500c7u, 0x00000006u, 0x0000513bu, 0x0000513au, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000513cu, 0x0000513bu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000513eu, 0x00005138u, 0x0000513cu, 0x0003003eu, 0x00005125u, 0x0000513eu, 0x000500c6u, 0x00000006u, 0x00005140u, 0x0000513eu, 0x0000032au, 0x0003003eu, 0x00005125u, 0x00005140u, 0x00080041u, 0x000001f2u, 0x00005143u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005140u, 0x0004003du, 0x000001adu, 0x00005144u, 0x00005143u, 0x00040071u, 0x00000006u, 0x00005145u, 0x00005144u, 0x0003003eu, 0x00005126u, 0x00005145u, 0x000500c2u, 0x00000006u, 0x00005147u, 0x00005145u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00005148u, 0x00005147u, 0x000500c7u, 0x00000006u, 0x0000514au, 0x00005145u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000514bu, 0x0000514au, 0x00050050u, 0x0000004du, 0x0000514cu, 0x00005148u, 0x0000514bu, 0x0009004fu, 0x00000009u, 0x0000514du, 0x0000514cu, 0x0000514cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005127u, 0x0000514du, 0x0003003eu, 0x00003d3bu, 0x0000514du, 0x000200f9u, 0x000040edu, 0x000200f8u, 0x000040edu, 0x000700f5u, 0x00000009u, 0x00008b52u, 0x000072a9u, 0x00004086u, 0x0000514du, 0x000040eeu, 0x000700f5u, 0x00000009u, 0x0000898au, 0x000072a9u, 0x00004086u, 0x00005123u, 0x000040eeu, 0x000300f7u, 0x000040feu, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x000040ffu, 0x000040feu, 0x000200f8u, 0x000040ffu, 0x00050050u, 0x0000004du, 0x00004102u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004103u, 0x00004102u, 0x0003003eu, 0x00005ad6u, 0x00003ce0u, 0x0003003eu, 0x00005ad7u, 0x00003ce3u, 0x0003003eu, 0x00003e13u, 0x000018feu, 0x0003003eu, 0x00003e14u, 0x00004103u, 0x00050041u, 0x00000007u, 0x00005156u, 0x00003e14u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005157u, 0x00005156u, 0x00050084u, 0x00000006u, 0x00005158u, 0x00003ce3u, 0x00005157u, 0x00050080u, 0x00000006u, 0x00005159u, 0x00003ce0u, 0x00005158u, 0x0003003eu, 0x0000514eu, 0x00005159u, 0x00050041u, 0x00000007u, 0x0000515au, 0x00003e14u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000515bu, 0x0000515au, 0x00050084u, 0x00000006u, 0x0000515cu, 0x0000515bu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000515eu, 0x00005159u, 0x0000515cu, 0x0003003eu, 0x0000514eu, 0x0000515eu, 0x000500c7u, 0x00000006u, 0x00005160u, 0x0000515eu, 0x000006b4u, 0x0003003eu, 0x0000514eu, 0x00005160u, 0x000500c2u, 0x00000006u, 0x00005162u, 0x00005160u, 0x00000194u, 0x0003003eu, 0x0000514fu, 0x00005162u, 0x0004003du, 0x00000006u, 0x00005164u, 0x00005156u, 0x000500c7u, 0x00000006u, 0x00005165u, 0x00005164u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005166u, 0x00005165u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00005168u, 0x00005162u, 0x00005166u, 0x0003003eu, 0x0000514fu, 0x00005168u, 0x000500c6u, 0x00000006u, 0x0000516au, 0x00005168u, 0x0000032au, 0x0003003eu, 0x0000514fu, 0x0000516au, 0x00080041u, 0x000001f2u, 0x0000516du, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000516au, 0x0004003du, 0x000001adu, 0x0000516eu, 0x0000516du, 0x00040071u, 0x00000006u, 0x0000516fu, 0x0000516eu, 0x0003003eu, 0x00005150u, 0x0000516fu, 0x000500c2u, 0x00000006u, 0x00005171u, 0x0000516fu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00005172u, 0x00005171u, 0x000500c7u, 0x00000006u, 0x00005174u, 0x0000516fu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00005175u, 0x00005174u, 0x00050050u, 0x0000004du, 0x00005176u, 0x00005172u, 0x00005175u, 0x0009004fu, 0x00000009u, 0x00005177u, 0x00005176u, 0x00005176u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005151u, 0x00005177u, 0x0003003eu, 0x00003d43u, 0x00005177u, 0x000200f9u, 0x000040feu, 0x000200f8u, 0x000040feu, 0x000700f5u, 0x00000009u, 0x00008c36u, 0x000072a9u, 0x000040edu, 0x00005177u, 0x000040ffu, 0x000200f9u, 0x00004082u, 0x000200f8u, 0x00004085u, 0x0004007cu, 0x000000a0u, 0x000040c8u, 0x0000853eu, 0x0003003eu, 0x00005abau, 0x00003ce0u, 0x0003003eu, 0x00005abbu, 0x00003ce3u, 0x0003003eu, 0x00003dfeu, 0x000018feu, 0x0003003eu, 0x00003dffu, 0x000040c8u, 0x00050041u, 0x00000007u, 0x00005005u, 0x00003dffu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005006u, 0x00005005u, 0x00050084u, 0x00000006u, 0x00005007u, 0x00003ce3u, 0x00005006u, 0x00050080u, 0x00000006u, 0x00005008u, 0x00003ce0u, 0x00005007u, 0x0003003eu, 0x00004ffcu, 0x00005008u, 0x00050041u, 0x00000007u, 0x00005009u, 0x00003dffu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000500au, 0x00005009u, 0x00050084u, 0x00000006u, 0x0000500bu, 0x0000500au, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000500du, 0x00005008u, 0x0000500bu, 0x0003003eu, 0x00004ffcu, 0x0000500du, 0x000500c7u, 0x00000006u, 0x0000500fu, 0x0000500du, 0x000006b4u, 0x0003003eu, 0x00004ffcu, 0x0000500fu, 0x000500c2u, 0x00000006u, 0x00005011u, 0x0000500fu, 0x00000194u, 0x0003003eu, 0x00004ffdu, 0x00005011u, 0x0004003du, 0x00000006u, 0x00005013u, 0x00005005u, 0x000500c7u, 0x00000006u, 0x00005014u, 0x00005013u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00005015u, 0x00005014u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00005017u, 0x00005011u, 0x00005015u, 0x0003003eu, 0x00004ffdu, 0x00005017u, 0x000500c6u, 0x00000006u, 0x00005019u, 0x00005017u, 0x0000032au, 0x0003003eu, 0x00004ffdu, 0x00005019u, 0x00080041u, 0x000001f2u, 0x0000501cu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005019u, 0x0004003du, 0x000001adu, 0x0000501du, 0x0000501cu, 0x00040071u, 0x00000006u, 0x0000501eu, 0x0000501du, 0x0003003eu, 0x00004ffeu, 0x0000501eu, 0x0003003eu, 0x00004fffu, 0x0000501eu, 0x000500c2u, 0x00000006u, 0x00005025u, 0x0000501eu, 0x000001e0u, 0x0003003eu, 0x00005021u, 0x00005025u, 0x000500c7u, 0x00000006u, 0x00005027u, 0x0000501eu, 0x00000689u, 0x0003003eu, 0x00005022u, 0x00005027u, 0x0004007cu, 0x00000008u, 0x00005029u, 0x00005025u, 0x0004007cu, 0x00000008u, 0x0000502fu, 0x00005027u, 0x00070050u, 0x00000009u, 0x00005030u, 0x00005029u, 0x00005029u, 0x00005029u, 0x0000502fu, 0x0003003eu, 0x00005023u, 0x00005030u, 0x0003003eu, 0x00005000u, 0x00005030u, 0x0003003eu, 0x00003d2bu, 0x00005030u, 0x000300f7u, 0x000040cdu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000040ceu, 0x000040cdu, 0x000200f8u, 0x000040ceu, 0x00050050u, 0x0000004du, 0x000040d1u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x000040d2u, 0x000040d1u, 0x0003003eu, 0x00005abeu, 0x00003ce0u, 0x0003003eu, 0x00005abfu, 0x00003ce3u, 0x0003003eu, 0x00003e01u, 0x000018feu, 0x0003003eu, 0x00003e02u, 0x000040d2u, 0x00050041u, 0x00000007u, 0x0000503au, 0x00003e02u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000503bu, 0x0000503au, 0x00050084u, 0x00000006u, 0x0000503cu, 0x00003ce3u, 0x0000503bu, 0x00050080u, 0x00000006u, 0x0000503du, 0x00003ce0u, 0x0000503cu, 0x0003003eu, 0x00005031u, 0x0000503du, 0x00050041u, 0x00000007u, 0x0000503eu, 0x00003e02u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000503fu, 0x0000503eu, 0x00050084u, 0x00000006u, 0x00005040u, 0x0000503fu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00005042u, 0x0000503du, 0x00005040u, 0x0003003eu, 0x00005031u, 0x00005042u, 0x000500c7u, 0x00000006u, 0x00005044u, 0x00005042u, 0x000006b4u, 0x0003003eu, 0x00005031u, 0x00005044u, 0x000500c2u, 0x00000006u, 0x00005046u, 0x00005044u, 0x00000194u, 0x0003003eu, 0x00005032u, 0x00005046u, 0x0004003du, 0x00000006u, 0x00005048u, 0x0000503au, 0x000500c7u, 0x00000006u, 0x00005049u, 0x00005048u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000504au, 0x00005049u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000504cu, 0x00005046u, 0x0000504au, 0x0003003eu, 0x00005032u, 0x0000504cu, 0x000500c6u, 0x00000006u, 0x0000504eu, 0x0000504cu, 0x0000032au, 0x0003003eu, 0x00005032u, 0x0000504eu, 0x00080041u, 0x000001f2u, 0x00005051u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000504eu, 0x0004003du, 0x000001adu, 0x00005052u, 0x00005051u, 0x00040071u, 0x00000006u, 0x00005053u, 0x00005052u, 0x0003003eu, 0x00005033u, 0x00005053u, 0x0003003eu, 0x00005034u, 0x00005053u, 0x000500c2u, 0x00000006u, 0x0000505au, 0x00005053u, 0x000001e0u, 0x0003003eu, 0x00005056u, 0x0000505au, 0x000500c7u, 0x00000006u, 0x0000505cu, 0x00005053u, 0x00000689u, 0x0003003eu, 0x00005057u, 0x0000505cu, 0x0004007cu, 0x00000008u, 0x0000505eu, 0x0000505au, 0x0004007cu, 0x00000008u, 0x00005064u, 0x0000505cu, 0x00070050u, 0x00000009u, 0x00005065u, 0x0000505eu, 0x0000505eu, 0x0000505eu, 0x00005064u, 0x0003003eu, 0x00005058u, 0x00005065u, 0x0003003eu, 0x00005035u, 0x00005065u, 0x0003003eu, 0x00003d33u, 0x00005065u, 0x00050050u, 0x0000004du, 0x000040d8u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x000040d9u, 0x000040d8u, 0x0003003eu, 0x00005ac2u, 0x00003ce0u, 0x0003003eu, 0x00005ac3u, 0x00003ce3u, 0x0003003eu, 0x00003e04u, 0x000018feu, 0x0003003eu, 0x00003e05u, 0x000040d9u, 0x00050041u, 0x00000007u, 0x0000506fu, 0x00003e05u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00005070u, 0x0000506fu, 0x00050084u, 0x00000006u, 0x00005071u, 0x00003ce3u, 0x00005070u, 0x00050080u, 0x00000006u, 0x00005072u, 0x00003ce0u, 0x00005071u, 0x0003003eu, 0x00005066u, 0x00005072u, 0x00050041u, 0x00000007u, 0x00005073u, 0x00003e05u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00005074u, 0x00005073u, 0x00050084u, 0x00000006u, 0x00005075u, 0x00005074u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00005077u, 0x00005072u, 0x00005075u, 0x0003003eu, 0x00005066u, 0x00005077u, 0x000500c7u, 0x00000006u, 0x00005079u, 0x00005077u, 0x000006b4u, 0x0003003eu, 0x00005066u, 0x00005079u, 0x000500c2u, 0x00000006u, 0x0000507bu, 0x00005079u, 0x00000194u, 0x0003003eu, 0x00005067u, 0x0000507bu, 0x0004003du, 0x00000006u, 0x0000507du, 0x0000506fu, 0x000500c7u, 0x00000006u, 0x0000507eu, 0x0000507du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000507fu, 0x0000507eu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00005081u, 0x0000507bu, 0x0000507fu, 0x0003003eu, 0x00005067u, 0x00005081u, 0x000500c6u, 0x00000006u, 0x00005083u, 0x00005081u, 0x0000032au, 0x0003003eu, 0x00005067u, 0x00005083u, 0x00080041u, 0x000001f2u, 0x00005086u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00005083u, 0x0004003du, 0x000001adu, 0x00005087u, 0x00005086u, 0x00040071u, 0x00000006u, 0x00005088u, 0x00005087u, 0x0003003eu, 0x00005068u, 0x00005088u, 0x0003003eu, 0x00005069u, 0x00005088u, 0x000500c2u, 0x00000006u, 0x0000508fu, 0x00005088u, 0x000001e0u, 0x0003003eu, 0x0000508bu, 0x0000508fu, 0x000500c7u, 0x00000006u, 0x00005091u, 0x00005088u, 0x00000689u, 0x0003003eu, 0x0000508cu, 0x00005091u, 0x0004007cu, 0x00000008u, 0x00005093u, 0x0000508fu, 0x0004007cu, 0x00000008u, 0x00005099u, 0x00005091u, 0x00070050u, 0x00000009u, 0x0000509au, 0x00005093u, 0x00005093u, 0x00005093u, 0x00005099u, 0x0003003eu, 0x0000508du, 0x0000509au, 0x0003003eu, 0x0000506au, 0x0000509au, 0x0003003eu, 0x00003d3bu, 0x0000509au, 0x000200f9u, 0x000040cdu, 0x000200f8u, 0x000040cdu, 0x000700f5u, 0x00000009u, 0x00008b50u, 0x000072a9u, 0x00004085u, 0x0000509au, 0x000040ceu, 0x000700f5u, 0x00000009u, 0x00008988u, 0x000072a9u, 0x00004085u, 0x00005065u, 0x000040ceu, 0x000300f7u, 0x000040deu, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x000040dfu, 0x000040deu, 0x000200f8u, 0x000040dfu, 0x00050050u, 0x0000004du, 0x000040e2u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x000040e3u, 0x000040e2u, 0x0003003eu, 0x00005ac6u, 0x00003ce0u, 0x0003003eu, 0x00005ac7u, 0x00003ce3u, 0x0003003eu, 0x00003e07u, 0x000018feu, 0x0003003eu, 0x00003e08u, 0x000040e3u, 0x00050041u, 0x00000007u, 0x000050a4u, 0x00003e08u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000050a5u, 0x000050a4u, 0x00050084u, 0x00000006u, 0x000050a6u, 0x00003ce3u, 0x000050a5u, 0x00050080u, 0x00000006u, 0x000050a7u, 0x00003ce0u, 0x000050a6u, 0x0003003eu, 0x0000509bu, 0x000050a7u, 0x00050041u, 0x00000007u, 0x000050a8u, 0x00003e08u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000050a9u, 0x000050a8u, 0x00050084u, 0x00000006u, 0x000050aau, 0x000050a9u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000050acu, 0x000050a7u, 0x000050aau, 0x0003003eu, 0x0000509bu, 0x000050acu, 0x000500c7u, 0x00000006u, 0x000050aeu, 0x000050acu, 0x000006b4u, 0x0003003eu, 0x0000509bu, 0x000050aeu, 0x000500c2u, 0x00000006u, 0x000050b0u, 0x000050aeu, 0x00000194u, 0x0003003eu, 0x0000509cu, 0x000050b0u, 0x0004003du, 0x00000006u, 0x000050b2u, 0x000050a4u, 0x000500c7u, 0x00000006u, 0x000050b3u, 0x000050b2u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000050b4u, 0x000050b3u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000050b6u, 0x000050b0u, 0x000050b4u, 0x0003003eu, 0x0000509cu, 0x000050b6u, 0x000500c6u, 0x00000006u, 0x000050b8u, 0x000050b6u, 0x0000032au, 0x0003003eu, 0x0000509cu, 0x000050b8u, 0x00080041u, 0x000001f2u, 0x000050bbu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000050b8u, 0x0004003du, 0x000001adu, 0x000050bcu, 0x000050bbu, 0x00040071u, 0x00000006u, 0x000050bdu, 0x000050bcu, 0x0003003eu, 0x0000509du, 0x000050bdu, 0x0003003eu, 0x0000509eu, 0x000050bdu, 0x000500c2u, 0x00000006u, 0x000050c4u, 0x000050bdu, 0x000001e0u, 0x0003003eu, 0x000050c0u, 0x000050c4u, 0x000500c7u, 0x00000006u, 0x000050c6u, 0x000050bdu, 0x00000689u, 0x0003003eu, 0x000050c1u, 0x000050c6u, 0x0004007cu, 0x00000008u, 0x000050c8u, 0x000050c4u, 0x0004007cu, 0x00000008u, 0x000050ceu, 0x000050c6u, 0x00070050u, 0x00000009u, 0x000050cfu, 0x000050c8u, 0x000050c8u, 0x000050c8u, 0x000050ceu, 0x0003003eu, 0x000050c2u, 0x000050cfu, 0x0003003eu, 0x0000509fu, 0x000050cfu, 0x0003003eu, 0x00003d43u, 0x000050cfu, 0x000200f9u, 0x000040deu, 0x000200f8u, 0x000040deu, 0x000700f5u, 0x00000009u, 0x00008c34u, 0x000072a9u, 0x000040cdu, 0x000050cfu, 0x000040dfu, 0x000200f9u, 0x00004082u, 0x000200f8u, 0x00004084u, 0x0004007cu, 0x000000a0u, 0x000040a8u, 0x0000853eu, 0x0003003eu, 0x00005aaau, 0x00003ce0u, 0x0003003eu, 0x00005aabu, 0x00003ce3u, 0x0003003eu, 0x00003df2u, 0x000018feu, 0x0003003eu, 0x00003df3u, 0x000040a8u, 0x00050041u, 0x00000007u, 0x00004f2au, 0x00003df3u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004f2bu, 0x00004f2au, 0x00050084u, 0x00000006u, 0x00004f2cu, 0x00003ce3u, 0x00004f2bu, 0x00050080u, 0x00000006u, 0x00004f2du, 0x00003ce0u, 0x00004f2cu, 0x0003003eu, 0x00004f20u, 0x00004f2du, 0x00050041u, 0x00000007u, 0x00004f2eu, 0x00003df3u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004f2fu, 0x00004f2eu, 0x00050080u, 0x00000006u, 0x00004f31u, 0x00004f2du, 0x00004f2fu, 0x0003003eu, 0x00004f20u, 0x00004f31u, 0x000500c7u, 0x00000006u, 0x00004f33u, 0x00004f31u, 0x000006b4u, 0x0003003eu, 0x00004f20u, 0x00004f33u, 0x0003003eu, 0x00004f21u, 0x00004f33u, 0x0004003du, 0x00000006u, 0x00004f36u, 0x00004f2au, 0x000500c7u, 0x00000006u, 0x00004f37u, 0x00004f36u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004f38u, 0x00004f37u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004f3au, 0x00004f33u, 0x00004f38u, 0x0003003eu, 0x00004f21u, 0x00004f3au, 0x000500c6u, 0x00000006u, 0x00004f3cu, 0x00004f3au, 0x00000331u, 0x0003003eu, 0x00004f21u, 0x00004f3cu, 0x00080041u, 0x000001f9u, 0x00004f3fu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004f3cu, 0x0004003du, 0x000001abu, 0x00004f40u, 0x00004f3fu, 0x00040071u, 0x00000006u, 0x00004f41u, 0x00004f40u, 0x0003003eu, 0x00004f22u, 0x00004f41u, 0x000500c2u, 0x00000006u, 0x00004f43u, 0x00004f41u, 0x0000019du, 0x0003003eu, 0x00004f23u, 0x00004f43u, 0x000500c7u, 0x00000006u, 0x00004f45u, 0x00004f41u, 0x000006d8u, 0x0003003eu, 0x00004f24u, 0x00004f45u, 0x000500c4u, 0x00000006u, 0x00004f47u, 0x00004f45u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004f49u, 0x00004f45u, 0x00004f47u, 0x0003003eu, 0x00004f24u, 0x00004f49u, 0x000500c4u, 0x00000006u, 0x00004f4bu, 0x00004f43u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004f4du, 0x00004f43u, 0x00004f4bu, 0x0003003eu, 0x00004f23u, 0x00004f4du, 0x0004007cu, 0x00000008u, 0x00004f4fu, 0x00004f4du, 0x0004007cu, 0x00000008u, 0x00004f55u, 0x00004f49u, 0x00070050u, 0x00000009u, 0x00004f56u, 0x00004f4fu, 0x00004f4fu, 0x00004f4fu, 0x00004f55u, 0x0003003eu, 0x00004f25u, 0x00004f56u, 0x0003003eu, 0x00003d2bu, 0x00004f56u, 0x000300f7u, 0x000040adu, 0x00000000u, 0x000400fau, 0x00001927u, 0x000040aeu, 0x000040adu, 0x000200f8u, 0x000040aeu, 0x00050050u, 0x0000004du, 0x000040b1u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x000040b2u, 0x000040b1u, 0x0003003eu, 0x00005aaeu, 0x00003ce0u, 0x0003003eu, 0x00005aafu, 0x00003ce3u, 0x0003003eu, 0x00003df5u, 0x000018feu, 0x0003003eu, 0x00003df6u, 0x000040b2u, 0x00050041u, 0x00000007u, 0x00004f61u, 0x00003df6u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004f62u, 0x00004f61u, 0x00050084u, 0x00000006u, 0x00004f63u, 0x00003ce3u, 0x00004f62u, 0x00050080u, 0x00000006u, 0x00004f64u, 0x00003ce0u, 0x00004f63u, 0x0003003eu, 0x00004f57u, 0x00004f64u, 0x00050041u, 0x00000007u, 0x00004f65u, 0x00003df6u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004f66u, 0x00004f65u, 0x00050080u, 0x00000006u, 0x00004f68u, 0x00004f64u, 0x00004f66u, 0x0003003eu, 0x00004f57u, 0x00004f68u, 0x000500c7u, 0x00000006u, 0x00004f6au, 0x00004f68u, 0x000006b4u, 0x0003003eu, 0x00004f57u, 0x00004f6au, 0x0003003eu, 0x00004f58u, 0x00004f6au, 0x0004003du, 0x00000006u, 0x00004f6du, 0x00004f61u, 0x000500c7u, 0x00000006u, 0x00004f6eu, 0x00004f6du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004f6fu, 0x00004f6eu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004f71u, 0x00004f6au, 0x00004f6fu, 0x0003003eu, 0x00004f58u, 0x00004f71u, 0x000500c6u, 0x00000006u, 0x00004f73u, 0x00004f71u, 0x00000331u, 0x0003003eu, 0x00004f58u, 0x00004f73u, 0x00080041u, 0x000001f9u, 0x00004f76u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004f73u, 0x0004003du, 0x000001abu, 0x00004f77u, 0x00004f76u, 0x00040071u, 0x00000006u, 0x00004f78u, 0x00004f77u, 0x0003003eu, 0x00004f59u, 0x00004f78u, 0x000500c2u, 0x00000006u, 0x00004f7au, 0x00004f78u, 0x0000019du, 0x0003003eu, 0x00004f5au, 0x00004f7au, 0x000500c7u, 0x00000006u, 0x00004f7cu, 0x00004f78u, 0x000006d8u, 0x0003003eu, 0x00004f5bu, 0x00004f7cu, 0x000500c4u, 0x00000006u, 0x00004f7eu, 0x00004f7cu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004f80u, 0x00004f7cu, 0x00004f7eu, 0x0003003eu, 0x00004f5bu, 0x00004f80u, 0x000500c4u, 0x00000006u, 0x00004f82u, 0x00004f7au, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004f84u, 0x00004f7au, 0x00004f82u, 0x0003003eu, 0x00004f5au, 0x00004f84u, 0x0004007cu, 0x00000008u, 0x00004f86u, 0x00004f84u, 0x0004007cu, 0x00000008u, 0x00004f8cu, 0x00004f80u, 0x00070050u, 0x00000009u, 0x00004f8du, 0x00004f86u, 0x00004f86u, 0x00004f86u, 0x00004f8cu, 0x0003003eu, 0x00004f5cu, 0x00004f8du, 0x0003003eu, 0x00003d33u, 0x00004f8du, 0x00050050u, 0x0000004du, 0x000040b8u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x000040b9u, 0x000040b8u, 0x0003003eu, 0x00005ab2u, 0x00003ce0u, 0x0003003eu, 0x00005ab3u, 0x00003ce3u, 0x0003003eu, 0x00003df8u, 0x000018feu, 0x0003003eu, 0x00003df9u, 0x000040b9u, 0x00050041u, 0x00000007u, 0x00004f98u, 0x00003df9u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004f99u, 0x00004f98u, 0x00050084u, 0x00000006u, 0x00004f9au, 0x00003ce3u, 0x00004f99u, 0x00050080u, 0x00000006u, 0x00004f9bu, 0x00003ce0u, 0x00004f9au, 0x0003003eu, 0x00004f8eu, 0x00004f9bu, 0x00050041u, 0x00000007u, 0x00004f9cu, 0x00003df9u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004f9du, 0x00004f9cu, 0x00050080u, 0x00000006u, 0x00004f9fu, 0x00004f9bu, 0x00004f9du, 0x0003003eu, 0x00004f8eu, 0x00004f9fu, 0x000500c7u, 0x00000006u, 0x00004fa1u, 0x00004f9fu, 0x000006b4u, 0x0003003eu, 0x00004f8eu, 0x00004fa1u, 0x0003003eu, 0x00004f8fu, 0x00004fa1u, 0x0004003du, 0x00000006u, 0x00004fa4u, 0x00004f98u, 0x000500c7u, 0x00000006u, 0x00004fa5u, 0x00004fa4u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004fa6u, 0x00004fa5u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004fa8u, 0x00004fa1u, 0x00004fa6u, 0x0003003eu, 0x00004f8fu, 0x00004fa8u, 0x000500c6u, 0x00000006u, 0x00004faau, 0x00004fa8u, 0x00000331u, 0x0003003eu, 0x00004f8fu, 0x00004faau, 0x00080041u, 0x000001f9u, 0x00004fadu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004faau, 0x0004003du, 0x000001abu, 0x00004faeu, 0x00004fadu, 0x00040071u, 0x00000006u, 0x00004fafu, 0x00004faeu, 0x0003003eu, 0x00004f90u, 0x00004fafu, 0x000500c2u, 0x00000006u, 0x00004fb1u, 0x00004fafu, 0x0000019du, 0x0003003eu, 0x00004f91u, 0x00004fb1u, 0x000500c7u, 0x00000006u, 0x00004fb3u, 0x00004fafu, 0x000006d8u, 0x0003003eu, 0x00004f92u, 0x00004fb3u, 0x000500c4u, 0x00000006u, 0x00004fb5u, 0x00004fb3u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004fb7u, 0x00004fb3u, 0x00004fb5u, 0x0003003eu, 0x00004f92u, 0x00004fb7u, 0x000500c4u, 0x00000006u, 0x00004fb9u, 0x00004fb1u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004fbbu, 0x00004fb1u, 0x00004fb9u, 0x0003003eu, 0x00004f91u, 0x00004fbbu, 0x0004007cu, 0x00000008u, 0x00004fbdu, 0x00004fbbu, 0x0004007cu, 0x00000008u, 0x00004fc3u, 0x00004fb7u, 0x00070050u, 0x00000009u, 0x00004fc4u, 0x00004fbdu, 0x00004fbdu, 0x00004fbdu, 0x00004fc3u, 0x0003003eu, 0x00004f93u, 0x00004fc4u, 0x0003003eu, 0x00003d3bu, 0x00004fc4u, 0x000200f9u, 0x000040adu, 0x000200f8u, 0x000040adu, 0x000700f5u, 0x00000009u, 0x00008b4eu, 0x000072a9u, 0x00004084u, 0x00004fc4u, 0x000040aeu, 0x000700f5u, 0x00000009u, 0x00008986u, 0x000072a9u, 0x00004084u, 0x00004f8du, 0x000040aeu, 0x000300f7u, 0x000040beu, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x000040bfu, 0x000040beu, 0x000200f8u, 0x000040bfu, 0x00050050u, 0x0000004du, 0x000040c2u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x000040c3u, 0x000040c2u, 0x0003003eu, 0x00005ab6u, 0x00003ce0u, 0x0003003eu, 0x00005ab7u, 0x00003ce3u, 0x0003003eu, 0x00003dfbu, 0x000018feu, 0x0003003eu, 0x00003dfcu, 0x000040c3u, 0x00050041u, 0x00000007u, 0x00004fcfu, 0x00003dfcu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004fd0u, 0x00004fcfu, 0x00050084u, 0x00000006u, 0x00004fd1u, 0x00003ce3u, 0x00004fd0u, 0x00050080u, 0x00000006u, 0x00004fd2u, 0x00003ce0u, 0x00004fd1u, 0x0003003eu, 0x00004fc5u, 0x00004fd2u, 0x00050041u, 0x00000007u, 0x00004fd3u, 0x00003dfcu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004fd4u, 0x00004fd3u, 0x00050080u, 0x00000006u, 0x00004fd6u, 0x00004fd2u, 0x00004fd4u, 0x0003003eu, 0x00004fc5u, 0x00004fd6u, 0x000500c7u, 0x00000006u, 0x00004fd8u, 0x00004fd6u, 0x000006b4u, 0x0003003eu, 0x00004fc5u, 0x00004fd8u, 0x0003003eu, 0x00004fc6u, 0x00004fd8u, 0x0004003du, 0x00000006u, 0x00004fdbu, 0x00004fcfu, 0x000500c7u, 0x00000006u, 0x00004fdcu, 0x00004fdbu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004fddu, 0x00004fdcu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004fdfu, 0x00004fd8u, 0x00004fddu, 0x0003003eu, 0x00004fc6u, 0x00004fdfu, 0x000500c6u, 0x00000006u, 0x00004fe1u, 0x00004fdfu, 0x00000331u, 0x0003003eu, 0x00004fc6u, 0x00004fe1u, 0x00080041u, 0x000001f9u, 0x00004fe4u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004fe1u, 0x0004003du, 0x000001abu, 0x00004fe5u, 0x00004fe4u, 0x00040071u, 0x00000006u, 0x00004fe6u, 0x00004fe5u, 0x0003003eu, 0x00004fc7u, 0x00004fe6u, 0x000500c2u, 0x00000006u, 0x00004fe8u, 0x00004fe6u, 0x0000019du, 0x0003003eu, 0x00004fc8u, 0x00004fe8u, 0x000500c7u, 0x00000006u, 0x00004feau, 0x00004fe6u, 0x000006d8u, 0x0003003eu, 0x00004fc9u, 0x00004feau, 0x000500c4u, 0x00000006u, 0x00004fecu, 0x00004feau, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004feeu, 0x00004feau, 0x00004fecu, 0x0003003eu, 0x00004fc9u, 0x00004feeu, 0x000500c4u, 0x00000006u, 0x00004ff0u, 0x00004fe8u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004ff2u, 0x00004fe8u, 0x00004ff0u, 0x0003003eu, 0x00004fc8u, 0x00004ff2u, 0x0004007cu, 0x00000008u, 0x00004ff4u, 0x00004ff2u, 0x0004007cu, 0x00000008u, 0x00004ffau, 0x00004feeu, 0x00070050u, 0x00000009u, 0x00004ffbu, 0x00004ff4u, 0x00004ff4u, 0x00004ff4u, 0x00004ffau, 0x0003003eu, 0x00004fcau, 0x00004ffbu, 0x0003003eu, 0x00003d43u, 0x00004ffbu, 0x000200f9u, 0x000040beu, 0x000200f8u, 0x000040beu, 0x000700f5u, 0x00000009u, 0x00008c32u, 0x000072a9u, 0x000040adu, 0x00004ffbu, 0x000040bfu, 0x000200f9u, 0x00004082u, 0x000200f8u, 0x00004083u, 0x0004007cu, 0x000000a0u, 0x00004088u, 0x0000853eu, 0x0003003eu, 0x00005a9au, 0x00003ce0u, 0x0003003eu, 0x00005a9bu, 0x00003ce3u, 0x0003003eu, 0x00003de6u, 0x000018feu, 0x0003003eu, 0x00003de7u, 0x00004088u, 0x00050041u, 0x00000007u, 0x00004e26u, 0x00003de7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004e27u, 0x00004e26u, 0x00050084u, 0x00000006u, 0x00004e28u, 0x00003ce3u, 0x00004e27u, 0x00050080u, 0x00000006u, 0x00004e29u, 0x00003ce0u, 0x00004e28u, 0x0003003eu, 0x00004e1cu, 0x00004e29u, 0x00050041u, 0x00000007u, 0x00004e2au, 0x00003de7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004e2bu, 0x00004e2au, 0x000500c2u, 0x00000006u, 0x00004e2cu, 0x00004e2bu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004e2eu, 0x00004e29u, 0x00004e2cu, 0x0003003eu, 0x00004e1cu, 0x00004e2eu, 0x000500c7u, 0x00000006u, 0x00004e30u, 0x00004e2eu, 0x000006b4u, 0x0003003eu, 0x00004e1cu, 0x00004e30u, 0x0004003du, 0x00000006u, 0x00004e32u, 0x00004e2au, 0x000400c8u, 0x00000006u, 0x00004e33u, 0x00004e32u, 0x000500c7u, 0x00000006u, 0x00004e34u, 0x00004e33u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004e35u, 0x00004e34u, 0x000006bcu, 0x0003003eu, 0x00004e1du, 0x00004e35u, 0x0003003eu, 0x00004e1eu, 0x00004e30u, 0x0004003du, 0x00000006u, 0x00004e38u, 0x00004e26u, 0x000500c7u, 0x00000006u, 0x00004e39u, 0x00004e38u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004e3au, 0x00004e39u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004e3cu, 0x00004e30u, 0x00004e3au, 0x0003003eu, 0x00004e1eu, 0x00004e3cu, 0x000500c6u, 0x00000006u, 0x00004e3eu, 0x00004e3cu, 0x00000331u, 0x0003003eu, 0x00004e1eu, 0x00004e3eu, 0x00080041u, 0x000001f9u, 0x00004e41u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004e3eu, 0x0004003du, 0x000001abu, 0x00004e42u, 0x00004e41u, 0x00040071u, 0x00000006u, 0x00004e43u, 0x00004e42u, 0x0003003eu, 0x00004e1fu, 0x00004e43u, 0x000500c2u, 0x00000006u, 0x00004e46u, 0x00004e43u, 0x00004e35u, 0x000500c7u, 0x00000006u, 0x00004e47u, 0x00004e46u, 0x000006d8u, 0x0003003eu, 0x00004e1fu, 0x00004e47u, 0x000500c7u, 0x00000006u, 0x00004e49u, 0x00004e47u, 0x0000070fu, 0x0003003eu, 0x00004e20u, 0x00004e49u, 0x000500c4u, 0x00000006u, 0x00004e4bu, 0x00004e49u, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00004e4du, 0x00004e49u, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00004e4eu, 0x00004e4bu, 0x00004e4du, 0x000500c2u, 0x00000006u, 0x00004e50u, 0x00004e49u, 0x00000197u, 0x000500c5u, 0x00000006u, 0x00004e51u, 0x00004e4eu, 0x00004e50u, 0x0003003eu, 0x00004e20u, 0x00004e51u, 0x0004007cu, 0x00000008u, 0x00004e53u, 0x00004e51u, 0x000500c7u, 0x00000006u, 0x00004e59u, 0x00004e47u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004e5au, 0x00004e59u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004e5bu, 0x00004e5au, 0x00070050u, 0x00000009u, 0x00004e5cu, 0x00004e53u, 0x00004e53u, 0x00004e53u, 0x00004e5bu, 0x0003003eu, 0x00004e21u, 0x00004e5cu, 0x0003003eu, 0x00003d2bu, 0x00004e5cu, 0x000300f7u, 0x0000408du, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000408eu, 0x0000408du, 0x000200f8u, 0x0000408eu, 0x00050050u, 0x0000004du, 0x00004091u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00004092u, 0x00004091u, 0x0003003eu, 0x00005a9eu, 0x00003ce0u, 0x0003003eu, 0x00005a9fu, 0x00003ce3u, 0x0003003eu, 0x00003de9u, 0x000018feu, 0x0003003eu, 0x00003deau, 0x00004092u, 0x00050041u, 0x00000007u, 0x00004e67u, 0x00003deau, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004e68u, 0x00004e67u, 0x00050084u, 0x00000006u, 0x00004e69u, 0x00003ce3u, 0x00004e68u, 0x00050080u, 0x00000006u, 0x00004e6au, 0x00003ce0u, 0x00004e69u, 0x0003003eu, 0x00004e5du, 0x00004e6au, 0x00050041u, 0x00000007u, 0x00004e6bu, 0x00003deau, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004e6cu, 0x00004e6bu, 0x000500c2u, 0x00000006u, 0x00004e6du, 0x00004e6cu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004e6fu, 0x00004e6au, 0x00004e6du, 0x0003003eu, 0x00004e5du, 0x00004e6fu, 0x000500c7u, 0x00000006u, 0x00004e71u, 0x00004e6fu, 0x000006b4u, 0x0003003eu, 0x00004e5du, 0x00004e71u, 0x0004003du, 0x00000006u, 0x00004e73u, 0x00004e6bu, 0x000400c8u, 0x00000006u, 0x00004e74u, 0x00004e73u, 0x000500c7u, 0x00000006u, 0x00004e75u, 0x00004e74u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004e76u, 0x00004e75u, 0x000006bcu, 0x0003003eu, 0x00004e5eu, 0x00004e76u, 0x0003003eu, 0x00004e5fu, 0x00004e71u, 0x0004003du, 0x00000006u, 0x00004e79u, 0x00004e67u, 0x000500c7u, 0x00000006u, 0x00004e7au, 0x00004e79u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004e7bu, 0x00004e7au, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004e7du, 0x00004e71u, 0x00004e7bu, 0x0003003eu, 0x00004e5fu, 0x00004e7du, 0x000500c6u, 0x00000006u, 0x00004e7fu, 0x00004e7du, 0x00000331u, 0x0003003eu, 0x00004e5fu, 0x00004e7fu, 0x00080041u, 0x000001f9u, 0x00004e82u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004e7fu, 0x0004003du, 0x000001abu, 0x00004e83u, 0x00004e82u, 0x00040071u, 0x00000006u, 0x00004e84u, 0x00004e83u, 0x0003003eu, 0x00004e60u, 0x00004e84u, 0x000500c2u, 0x00000006u, 0x00004e87u, 0x00004e84u, 0x00004e76u, 0x000500c7u, 0x00000006u, 0x00004e88u, 0x00004e87u, 0x000006d8u, 0x0003003eu, 0x00004e60u, 0x00004e88u, 0x000500c7u, 0x00000006u, 0x00004e8au, 0x00004e88u, 0x0000070fu, 0x0003003eu, 0x00004e61u, 0x00004e8au, 0x000500c4u, 0x00000006u, 0x00004e8cu, 0x00004e8au, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00004e8eu, 0x00004e8au, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00004e8fu, 0x00004e8cu, 0x00004e8eu, 0x000500c2u, 0x00000006u, 0x00004e91u, 0x00004e8au, 0x00000197u, 0x000500c5u, 0x00000006u, 0x00004e92u, 0x00004e8fu, 0x00004e91u, 0x0003003eu, 0x00004e61u, 0x00004e92u, 0x0004007cu, 0x00000008u, 0x00004e94u, 0x00004e92u, 0x000500c7u, 0x00000006u, 0x00004e9au, 0x00004e88u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004e9bu, 0x00004e9au, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004e9cu, 0x00004e9bu, 0x00070050u, 0x00000009u, 0x00004e9du, 0x00004e94u, 0x00004e94u, 0x00004e94u, 0x00004e9cu, 0x0003003eu, 0x00004e62u, 0x00004e9du, 0x0003003eu, 0x00003d33u, 0x00004e9du, 0x00050050u, 0x0000004du, 0x00004098u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004099u, 0x00004098u, 0x0003003eu, 0x00005aa2u, 0x00003ce0u, 0x0003003eu, 0x00005aa3u, 0x00003ce3u, 0x0003003eu, 0x00003decu, 0x000018feu, 0x0003003eu, 0x00003dedu, 0x00004099u, 0x00050041u, 0x00000007u, 0x00004ea8u, 0x00003dedu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004ea9u, 0x00004ea8u, 0x00050084u, 0x00000006u, 0x00004eaau, 0x00003ce3u, 0x00004ea9u, 0x00050080u, 0x00000006u, 0x00004eabu, 0x00003ce0u, 0x00004eaau, 0x0003003eu, 0x00004e9eu, 0x00004eabu, 0x00050041u, 0x00000007u, 0x00004eacu, 0x00003dedu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004eadu, 0x00004eacu, 0x000500c2u, 0x00000006u, 0x00004eaeu, 0x00004eadu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004eb0u, 0x00004eabu, 0x00004eaeu, 0x0003003eu, 0x00004e9eu, 0x00004eb0u, 0x000500c7u, 0x00000006u, 0x00004eb2u, 0x00004eb0u, 0x000006b4u, 0x0003003eu, 0x00004e9eu, 0x00004eb2u, 0x0004003du, 0x00000006u, 0x00004eb4u, 0x00004eacu, 0x000400c8u, 0x00000006u, 0x00004eb5u, 0x00004eb4u, 0x000500c7u, 0x00000006u, 0x00004eb6u, 0x00004eb5u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004eb7u, 0x00004eb6u, 0x000006bcu, 0x0003003eu, 0x00004e9fu, 0x00004eb7u, 0x0003003eu, 0x00004ea0u, 0x00004eb2u, 0x0004003du, 0x00000006u, 0x00004ebau, 0x00004ea8u, 0x000500c7u, 0x00000006u, 0x00004ebbu, 0x00004ebau, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004ebcu, 0x00004ebbu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004ebeu, 0x00004eb2u, 0x00004ebcu, 0x0003003eu, 0x00004ea0u, 0x00004ebeu, 0x000500c6u, 0x00000006u, 0x00004ec0u, 0x00004ebeu, 0x00000331u, 0x0003003eu, 0x00004ea0u, 0x00004ec0u, 0x00080041u, 0x000001f9u, 0x00004ec3u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004ec0u, 0x0004003du, 0x000001abu, 0x00004ec4u, 0x00004ec3u, 0x00040071u, 0x00000006u, 0x00004ec5u, 0x00004ec4u, 0x0003003eu, 0x00004ea1u, 0x00004ec5u, 0x000500c2u, 0x00000006u, 0x00004ec8u, 0x00004ec5u, 0x00004eb7u, 0x000500c7u, 0x00000006u, 0x00004ec9u, 0x00004ec8u, 0x000006d8u, 0x0003003eu, 0x00004ea1u, 0x00004ec9u, 0x000500c7u, 0x00000006u, 0x00004ecbu, 0x00004ec9u, 0x0000070fu, 0x0003003eu, 0x00004ea2u, 0x00004ecbu, 0x000500c4u, 0x00000006u, 0x00004ecdu, 0x00004ecbu, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00004ecfu, 0x00004ecbu, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00004ed0u, 0x00004ecdu, 0x00004ecfu, 0x000500c2u, 0x00000006u, 0x00004ed2u, 0x00004ecbu, 0x00000197u, 0x000500c5u, 0x00000006u, 0x00004ed3u, 0x00004ed0u, 0x00004ed2u, 0x0003003eu, 0x00004ea2u, 0x00004ed3u, 0x0004007cu, 0x00000008u, 0x00004ed5u, 0x00004ed3u, 0x000500c7u, 0x00000006u, 0x00004edbu, 0x00004ec9u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004edcu, 0x00004edbu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004eddu, 0x00004edcu, 0x00070050u, 0x00000009u, 0x00004edeu, 0x00004ed5u, 0x00004ed5u, 0x00004ed5u, 0x00004eddu, 0x0003003eu, 0x00004ea3u, 0x00004edeu, 0x0003003eu, 0x00003d3bu, 0x00004edeu, 0x000200f9u, 0x0000408du, 0x000200f8u, 0x0000408du, 0x000700f5u, 0x00000009u, 0x00008b4cu, 0x000072a9u, 0x00004083u, 0x00004edeu, 0x0000408eu, 0x000700f5u, 0x00000009u, 0x00008984u, 0x000072a9u, 0x00004083u, 0x00004e9du, 0x0000408eu, 0x000300f7u, 0x0000409eu, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x0000409fu, 0x0000409eu, 0x000200f8u, 0x0000409fu, 0x00050050u, 0x0000004du, 0x000040a2u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x000040a3u, 0x000040a2u, 0x0003003eu, 0x00005aa6u, 0x00003ce0u, 0x0003003eu, 0x00005aa7u, 0x00003ce3u, 0x0003003eu, 0x00003defu, 0x000018feu, 0x0003003eu, 0x00003df0u, 0x000040a3u, 0x00050041u, 0x00000007u, 0x00004ee9u, 0x00003df0u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004eeau, 0x00004ee9u, 0x00050084u, 0x00000006u, 0x00004eebu, 0x00003ce3u, 0x00004eeau, 0x00050080u, 0x00000006u, 0x00004eecu, 0x00003ce0u, 0x00004eebu, 0x0003003eu, 0x00004edfu, 0x00004eecu, 0x00050041u, 0x00000007u, 0x00004eedu, 0x00003df0u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004eeeu, 0x00004eedu, 0x000500c2u, 0x00000006u, 0x00004eefu, 0x00004eeeu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004ef1u, 0x00004eecu, 0x00004eefu, 0x0003003eu, 0x00004edfu, 0x00004ef1u, 0x000500c7u, 0x00000006u, 0x00004ef3u, 0x00004ef1u, 0x000006b4u, 0x0003003eu, 0x00004edfu, 0x00004ef3u, 0x0004003du, 0x00000006u, 0x00004ef5u, 0x00004eedu, 0x000400c8u, 0x00000006u, 0x00004ef6u, 0x00004ef5u, 0x000500c7u, 0x00000006u, 0x00004ef7u, 0x00004ef6u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004ef8u, 0x00004ef7u, 0x000006bcu, 0x0003003eu, 0x00004ee0u, 0x00004ef8u, 0x0003003eu, 0x00004ee1u, 0x00004ef3u, 0x0004003du, 0x00000006u, 0x00004efbu, 0x00004ee9u, 0x000500c7u, 0x00000006u, 0x00004efcu, 0x00004efbu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004efdu, 0x00004efcu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004effu, 0x00004ef3u, 0x00004efdu, 0x0003003eu, 0x00004ee1u, 0x00004effu, 0x000500c6u, 0x00000006u, 0x00004f01u, 0x00004effu, 0x00000331u, 0x0003003eu, 0x00004ee1u, 0x00004f01u, 0x00080041u, 0x000001f9u, 0x00004f04u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004f01u, 0x0004003du, 0x000001abu, 0x00004f05u, 0x00004f04u, 0x00040071u, 0x00000006u, 0x00004f06u, 0x00004f05u, 0x0003003eu, 0x00004ee2u, 0x00004f06u, 0x000500c2u, 0x00000006u, 0x00004f09u, 0x00004f06u, 0x00004ef8u, 0x000500c7u, 0x00000006u, 0x00004f0au, 0x00004f09u, 0x000006d8u, 0x0003003eu, 0x00004ee2u, 0x00004f0au, 0x000500c7u, 0x00000006u, 0x00004f0cu, 0x00004f0au, 0x0000070fu, 0x0003003eu, 0x00004ee3u, 0x00004f0cu, 0x000500c4u, 0x00000006u, 0x00004f0eu, 0x00004f0cu, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00004f10u, 0x00004f0cu, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00004f11u, 0x00004f0eu, 0x00004f10u, 0x000500c2u, 0x00000006u, 0x00004f13u, 0x00004f0cu, 0x00000197u, 0x000500c5u, 0x00000006u, 0x00004f14u, 0x00004f11u, 0x00004f13u, 0x0003003eu, 0x00004ee3u, 0x00004f14u, 0x0004007cu, 0x00000008u, 0x00004f16u, 0x00004f14u, 0x000500c7u, 0x00000006u, 0x00004f1cu, 0x00004f0au, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004f1du, 0x00004f1cu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004f1eu, 0x00004f1du, 0x00070050u, 0x00000009u, 0x00004f1fu, 0x00004f16u, 0x00004f16u, 0x00004f16u, 0x00004f1eu, 0x0003003eu, 0x00004ee4u, 0x00004f1fu, 0x0003003eu, 0x00003d43u, 0x00004f1fu, 0x000200f9u, 0x0000409eu, 0x000200f8u, 0x0000409eu, 0x000700f5u, 0x00000009u, 0x00008c30u, 0x000072a9u, 0x0000408du, 0x00004f1fu, 0x0000409fu, 0x000200f9u, 0x00004082u, 0x000200f8u, 0x00004082u, 0x000d00f5u, 0x00000009u, 0x00008c2fu, 0x000072a9u, 0x00003f58u, 0x00008c30u, 0x0000409eu, 0x00008c32u, 0x000040beu, 0x00008c34u, 0x000040deu, 0x00008c36u, 0x000040feu, 0x000d00f5u, 0x00000009u, 0x00008b4au, 0x000072a9u, 0x00003f58u, 0x00008b4cu, 0x0000409eu, 0x00008b4eu, 0x000040beu, 0x00008b50u, 0x000040deu, 0x00008b52u, 0x000040feu, 0x000d00f5u, 0x00000009u, 0x00008a67u, 0x000072a9u, 0x00003f58u, 0x00004e5cu, 0x0000409eu, 0x00004f56u, 0x000040beu, 0x00005030u, 0x000040deu, 0x000050f9u, 0x000040feu, 0x000d00f5u, 0x00000009u, 0x00008982u, 0x000072a9u, 0x00003f58u, 0x00008984u, 0x0000409eu, 0x00008986u, 0x000040beu, 0x00008988u, 0x000040deu, 0x0000898au, 0x000040feu, 0x000200f9u, 0x00003f54u, 0x000200f8u, 0x00003f57u, 0x000300f7u, 0x00004010u, 0x00000000u, 0x000700fbu, 0x0000b1e9u, 0x00004011u, 0x00000000u, 0x00004012u, 0x00000001u, 0x00004013u, 0x000200f8u, 0x00004013u, 0x0004007cu, 0x000000a0u, 0x00004061u, 0x0000853eu, 0x0003003eu, 0x00005a7au, 0x00003ce0u, 0x0003003eu, 0x00005a7bu, 0x00003ce3u, 0x0003003eu, 0x00003dceu, 0x000018feu, 0x0003003eu, 0x00003dcfu, 0x00004061u, 0x00050041u, 0x00000007u, 0x00004d98u, 0x00003dcfu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004d99u, 0x00004d98u, 0x00050084u, 0x00000006u, 0x00004d9au, 0x00003ce3u, 0x00004d99u, 0x00050080u, 0x00000006u, 0x00004d9bu, 0x00003ce0u, 0x00004d9au, 0x0003003eu, 0x00004d90u, 0x00004d9bu, 0x00050041u, 0x00000007u, 0x00004d9cu, 0x00003dcfu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004d9du, 0x00004d9cu, 0x00050080u, 0x00000006u, 0x00004d9fu, 0x00004d9bu, 0x00004d9du, 0x0003003eu, 0x00004d90u, 0x00004d9fu, 0x000500c7u, 0x00000006u, 0x00004da1u, 0x00004d9fu, 0x000006b4u, 0x0003003eu, 0x00004d90u, 0x00004da1u, 0x0003003eu, 0x00004d91u, 0x00004da1u, 0x0004003du, 0x00000006u, 0x00004da4u, 0x00004d98u, 0x000500c7u, 0x00000006u, 0x00004da5u, 0x00004da4u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004da6u, 0x00004da5u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004da8u, 0x00004da1u, 0x00004da6u, 0x0003003eu, 0x00004d91u, 0x00004da8u, 0x000500c6u, 0x00000006u, 0x00004daau, 0x00004da8u, 0x00000331u, 0x0003003eu, 0x00004d91u, 0x00004daau, 0x00080041u, 0x000001f9u, 0x00004dadu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004daau, 0x0004003du, 0x000001abu, 0x00004daeu, 0x00004dadu, 0x00040071u, 0x00000006u, 0x00004dafu, 0x00004daeu, 0x0003003eu, 0x00004d92u, 0x00004dafu, 0x0004007cu, 0x00000008u, 0x00004db1u, 0x00004dafu, 0x00070050u, 0x00000009u, 0x00004db2u, 0x00004db1u, 0x00004db1u, 0x00004db1u, 0x00004db1u, 0x0003003eu, 0x00004d93u, 0x00004db2u, 0x0003003eu, 0x00003d2bu, 0x00004db2u, 0x000300f7u, 0x00004066u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00004067u, 0x00004066u, 0x000200f8u, 0x00004067u, 0x00050050u, 0x0000004du, 0x0000406au, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x0000406bu, 0x0000406au, 0x0003003eu, 0x00005a7eu, 0x00003ce0u, 0x0003003eu, 0x00005a7fu, 0x00003ce3u, 0x0003003eu, 0x00003dd1u, 0x000018feu, 0x0003003eu, 0x00003dd2u, 0x0000406bu, 0x00050041u, 0x00000007u, 0x00004dbbu, 0x00003dd2u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004dbcu, 0x00004dbbu, 0x00050084u, 0x00000006u, 0x00004dbdu, 0x00003ce3u, 0x00004dbcu, 0x00050080u, 0x00000006u, 0x00004dbeu, 0x00003ce0u, 0x00004dbdu, 0x0003003eu, 0x00004db3u, 0x00004dbeu, 0x00050041u, 0x00000007u, 0x00004dbfu, 0x00003dd2u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004dc0u, 0x00004dbfu, 0x00050080u, 0x00000006u, 0x00004dc2u, 0x00004dbeu, 0x00004dc0u, 0x0003003eu, 0x00004db3u, 0x00004dc2u, 0x000500c7u, 0x00000006u, 0x00004dc4u, 0x00004dc2u, 0x000006b4u, 0x0003003eu, 0x00004db3u, 0x00004dc4u, 0x0003003eu, 0x00004db4u, 0x00004dc4u, 0x0004003du, 0x00000006u, 0x00004dc7u, 0x00004dbbu, 0x000500c7u, 0x00000006u, 0x00004dc8u, 0x00004dc7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004dc9u, 0x00004dc8u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004dcbu, 0x00004dc4u, 0x00004dc9u, 0x0003003eu, 0x00004db4u, 0x00004dcbu, 0x000500c6u, 0x00000006u, 0x00004dcdu, 0x00004dcbu, 0x00000331u, 0x0003003eu, 0x00004db4u, 0x00004dcdu, 0x00080041u, 0x000001f9u, 0x00004dd0u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004dcdu, 0x0004003du, 0x000001abu, 0x00004dd1u, 0x00004dd0u, 0x00040071u, 0x00000006u, 0x00004dd2u, 0x00004dd1u, 0x0003003eu, 0x00004db5u, 0x00004dd2u, 0x0004007cu, 0x00000008u, 0x00004dd4u, 0x00004dd2u, 0x00070050u, 0x00000009u, 0x00004dd5u, 0x00004dd4u, 0x00004dd4u, 0x00004dd4u, 0x00004dd4u, 0x0003003eu, 0x00004db6u, 0x00004dd5u, 0x0003003eu, 0x00003d33u, 0x00004dd5u, 0x00050050u, 0x0000004du, 0x00004071u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004072u, 0x00004071u, 0x0003003eu, 0x00005a82u, 0x00003ce0u, 0x0003003eu, 0x00005a83u, 0x00003ce3u, 0x0003003eu, 0x00003dd4u, 0x000018feu, 0x0003003eu, 0x00003dd5u, 0x00004072u, 0x00050041u, 0x00000007u, 0x00004ddeu, 0x00003dd5u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004ddfu, 0x00004ddeu, 0x00050084u, 0x00000006u, 0x00004de0u, 0x00003ce3u, 0x00004ddfu, 0x00050080u, 0x00000006u, 0x00004de1u, 0x00003ce0u, 0x00004de0u, 0x0003003eu, 0x00004dd6u, 0x00004de1u, 0x00050041u, 0x00000007u, 0x00004de2u, 0x00003dd5u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004de3u, 0x00004de2u, 0x00050080u, 0x00000006u, 0x00004de5u, 0x00004de1u, 0x00004de3u, 0x0003003eu, 0x00004dd6u, 0x00004de5u, 0x000500c7u, 0x00000006u, 0x00004de7u, 0x00004de5u, 0x000006b4u, 0x0003003eu, 0x00004dd6u, 0x00004de7u, 0x0003003eu, 0x00004dd7u, 0x00004de7u, 0x0004003du, 0x00000006u, 0x00004deau, 0x00004ddeu, 0x000500c7u, 0x00000006u, 0x00004debu, 0x00004deau, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004decu, 0x00004debu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004deeu, 0x00004de7u, 0x00004decu, 0x0003003eu, 0x00004dd7u, 0x00004deeu, 0x000500c6u, 0x00000006u, 0x00004df0u, 0x00004deeu, 0x00000331u, 0x0003003eu, 0x00004dd7u, 0x00004df0u, 0x00080041u, 0x000001f9u, 0x00004df3u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004df0u, 0x0004003du, 0x000001abu, 0x00004df4u, 0x00004df3u, 0x00040071u, 0x00000006u, 0x00004df5u, 0x00004df4u, 0x0003003eu, 0x00004dd8u, 0x00004df5u, 0x0004007cu, 0x00000008u, 0x00004df7u, 0x00004df5u, 0x00070050u, 0x00000009u, 0x00004df8u, 0x00004df7u, 0x00004df7u, 0x00004df7u, 0x00004df7u, 0x0003003eu, 0x00004dd9u, 0x00004df8u, 0x0003003eu, 0x00003d3bu, 0x00004df8u, 0x000200f9u, 0x00004066u, 0x000200f8u, 0x00004066u, 0x000700f5u, 0x00000009u, 0x00008b49u, 0x000072a9u, 0x00004013u, 0x00004df8u, 0x00004067u, 0x000700f5u, 0x00000009u, 0x00008981u, 0x000072a9u, 0x00004013u, 0x00004dd5u, 0x00004067u, 0x000300f7u, 0x00004077u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00004078u, 0x00004077u, 0x000200f8u, 0x00004078u, 0x00050050u, 0x0000004du, 0x0000407bu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x0000407cu, 0x0000407bu, 0x0003003eu, 0x00005a86u, 0x00003ce0u, 0x0003003eu, 0x00005a87u, 0x00003ce3u, 0x0003003eu, 0x00003dd7u, 0x000018feu, 0x0003003eu, 0x00003dd8u, 0x0000407cu, 0x00050041u, 0x00000007u, 0x00004e01u, 0x00003dd8u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004e02u, 0x00004e01u, 0x00050084u, 0x00000006u, 0x00004e03u, 0x00003ce3u, 0x00004e02u, 0x00050080u, 0x00000006u, 0x00004e04u, 0x00003ce0u, 0x00004e03u, 0x0003003eu, 0x00004df9u, 0x00004e04u, 0x00050041u, 0x00000007u, 0x00004e05u, 0x00003dd8u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004e06u, 0x00004e05u, 0x00050080u, 0x00000006u, 0x00004e08u, 0x00004e04u, 0x00004e06u, 0x0003003eu, 0x00004df9u, 0x00004e08u, 0x000500c7u, 0x00000006u, 0x00004e0au, 0x00004e08u, 0x000006b4u, 0x0003003eu, 0x00004df9u, 0x00004e0au, 0x0003003eu, 0x00004dfau, 0x00004e0au, 0x0004003du, 0x00000006u, 0x00004e0du, 0x00004e01u, 0x000500c7u, 0x00000006u, 0x00004e0eu, 0x00004e0du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004e0fu, 0x00004e0eu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004e11u, 0x00004e0au, 0x00004e0fu, 0x0003003eu, 0x00004dfau, 0x00004e11u, 0x000500c6u, 0x00000006u, 0x00004e13u, 0x00004e11u, 0x00000331u, 0x0003003eu, 0x00004dfau, 0x00004e13u, 0x00080041u, 0x000001f9u, 0x00004e16u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004e13u, 0x0004003du, 0x000001abu, 0x00004e17u, 0x00004e16u, 0x00040071u, 0x00000006u, 0x00004e18u, 0x00004e17u, 0x0003003eu, 0x00004dfbu, 0x00004e18u, 0x0004007cu, 0x00000008u, 0x00004e1au, 0x00004e18u, 0x00070050u, 0x00000009u, 0x00004e1bu, 0x00004e1au, 0x00004e1au, 0x00004e1au, 0x00004e1au, 0x0003003eu, 0x00004dfcu, 0x00004e1bu, 0x0003003eu, 0x00003d43u, 0x00004e1bu, 0x000200f9u, 0x00004077u, 0x000200f8u, 0x00004077u, 0x000700f5u, 0x00000009u, 0x00008c2du, 0x000072a9u, 0x00004066u, 0x00004e1bu, 0x00004078u, 0x000200f9u, 0x00004010u, 0x000200f8u, 0x00004012u, 0x0004007cu, 0x000000a0u, 0x00004035u, 0x0000853eu, 0x0004007cu, 0x00000006u, 0x00004038u, 0x00003cf2u, 0x0003003eu, 0x00005a6au, 0x00003ce0u, 0x0003003eu, 0x00005a6bu, 0x00003ce3u, 0x0003003eu, 0x00003dbeu, 0x000018feu, 0x0003003eu, 0x00003dbfu, 0x00004035u, 0x0003003eu, 0x00003dc0u, 0x00004038u, 0x00050041u, 0x00000007u, 0x00004cd1u, 0x00003dbfu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004cd2u, 0x00004cd1u, 0x00050084u, 0x00000006u, 0x00004cd3u, 0x00003ce3u, 0x00004cd2u, 0x00050080u, 0x00000006u, 0x00004cd4u, 0x00003ce0u, 0x00004cd3u, 0x0003003eu, 0x00004cc8u, 0x00004cd4u, 0x00050041u, 0x00000007u, 0x00004cd5u, 0x00003dbfu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004cd6u, 0x00004cd5u, 0x000500c2u, 0x00000006u, 0x00004cd7u, 0x00004cd6u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004cd9u, 0x00004cd4u, 0x00004cd7u, 0x0003003eu, 0x00004cc8u, 0x00004cd9u, 0x000500c7u, 0x00000006u, 0x00004cdbu, 0x00004cd9u, 0x000006b4u, 0x0003003eu, 0x00004cc8u, 0x00004cdbu, 0x0004003du, 0x00000006u, 0x00004cddu, 0x00004cd5u, 0x000400c8u, 0x00000006u, 0x00004cdeu, 0x00004cddu, 0x000500c7u, 0x00000006u, 0x00004cdfu, 0x00004cdeu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004ce0u, 0x00004cdfu, 0x000006bcu, 0x0003003eu, 0x00004cc9u, 0x00004ce0u, 0x0003003eu, 0x00004ccau, 0x00004cdbu, 0x0004003du, 0x00000006u, 0x00004ce3u, 0x00004cd1u, 0x000500c7u, 0x00000006u, 0x00004ce4u, 0x00004ce3u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004ce5u, 0x00004ce4u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004ce7u, 0x00004cdbu, 0x00004ce5u, 0x0003003eu, 0x00004ccau, 0x00004ce7u, 0x000500c6u, 0x00000006u, 0x00004ce9u, 0x00004ce7u, 0x00000331u, 0x0003003eu, 0x00004ccau, 0x00004ce9u, 0x00080041u, 0x000001f9u, 0x00004cecu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004ce9u, 0x0004003du, 0x000001abu, 0x00004cedu, 0x00004cecu, 0x00040071u, 0x00000006u, 0x00004ceeu, 0x00004cedu, 0x0003003eu, 0x00004ccbu, 0x00004ceeu, 0x000500c2u, 0x00000006u, 0x00004cf1u, 0x00004ceeu, 0x00004ce0u, 0x000500c7u, 0x00000006u, 0x00004cf2u, 0x00004cf1u, 0x000006d8u, 0x0003003eu, 0x00004ccbu, 0x00004cf2u, 0x000500c4u, 0x00000006u, 0x00004cf4u, 0x00004038u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004cf6u, 0x00004cf2u, 0x00004cf4u, 0x0003003eu, 0x00004ccbu, 0x00004cf6u, 0x0004007cu, 0x00000008u, 0x00004cf8u, 0x00004cf6u, 0x00070050u, 0x00000009u, 0x00004cf9u, 0x00004cf8u, 0x00004cf8u, 0x00004cf8u, 0x00004cf8u, 0x0003003eu, 0x00004cccu, 0x00004cf9u, 0x0003003eu, 0x00003d2bu, 0x00004cf9u, 0x000300f7u, 0x0000403du, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000403eu, 0x0000403du, 0x000200f8u, 0x0000403eu, 0x00050050u, 0x0000004du, 0x00004041u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00004042u, 0x00004041u, 0x0003003eu, 0x00005a6eu, 0x00003ce0u, 0x0003003eu, 0x00005a6fu, 0x00003ce3u, 0x0003003eu, 0x00003dc2u, 0x000018feu, 0x0003003eu, 0x00003dc3u, 0x00004042u, 0x0003003eu, 0x00003dc4u, 0x00004038u, 0x00050041u, 0x00000007u, 0x00004d03u, 0x00003dc3u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004d04u, 0x00004d03u, 0x00050084u, 0x00000006u, 0x00004d05u, 0x00003ce3u, 0x00004d04u, 0x00050080u, 0x00000006u, 0x00004d06u, 0x00003ce0u, 0x00004d05u, 0x0003003eu, 0x00004cfau, 0x00004d06u, 0x00050041u, 0x00000007u, 0x00004d07u, 0x00003dc3u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004d08u, 0x00004d07u, 0x000500c2u, 0x00000006u, 0x00004d09u, 0x00004d08u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004d0bu, 0x00004d06u, 0x00004d09u, 0x0003003eu, 0x00004cfau, 0x00004d0bu, 0x000500c7u, 0x00000006u, 0x00004d0du, 0x00004d0bu, 0x000006b4u, 0x0003003eu, 0x00004cfau, 0x00004d0du, 0x0004003du, 0x00000006u, 0x00004d0fu, 0x00004d07u, 0x000400c8u, 0x00000006u, 0x00004d10u, 0x00004d0fu, 0x000500c7u, 0x00000006u, 0x00004d11u, 0x00004d10u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004d12u, 0x00004d11u, 0x000006bcu, 0x0003003eu, 0x00004cfbu, 0x00004d12u, 0x0003003eu, 0x00004cfcu, 0x00004d0du, 0x0004003du, 0x00000006u, 0x00004d15u, 0x00004d03u, 0x000500c7u, 0x00000006u, 0x00004d16u, 0x00004d15u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004d17u, 0x00004d16u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004d19u, 0x00004d0du, 0x00004d17u, 0x0003003eu, 0x00004cfcu, 0x00004d19u, 0x000500c6u, 0x00000006u, 0x00004d1bu, 0x00004d19u, 0x00000331u, 0x0003003eu, 0x00004cfcu, 0x00004d1bu, 0x00080041u, 0x000001f9u, 0x00004d1eu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004d1bu, 0x0004003du, 0x000001abu, 0x00004d1fu, 0x00004d1eu, 0x00040071u, 0x00000006u, 0x00004d20u, 0x00004d1fu, 0x0003003eu, 0x00004cfdu, 0x00004d20u, 0x000500c2u, 0x00000006u, 0x00004d23u, 0x00004d20u, 0x00004d12u, 0x000500c7u, 0x00000006u, 0x00004d24u, 0x00004d23u, 0x000006d8u, 0x0003003eu, 0x00004cfdu, 0x00004d24u, 0x000500c5u, 0x00000006u, 0x00004d28u, 0x00004d24u, 0x00004cf4u, 0x0003003eu, 0x00004cfdu, 0x00004d28u, 0x0004007cu, 0x00000008u, 0x00004d2au, 0x00004d28u, 0x00070050u, 0x00000009u, 0x00004d2bu, 0x00004d2au, 0x00004d2au, 0x00004d2au, 0x00004d2au, 0x0003003eu, 0x00004cfeu, 0x00004d2bu, 0x0003003eu, 0x00003d33u, 0x00004d2bu, 0x00050050u, 0x0000004du, 0x0000404bu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x0000404cu, 0x0000404bu, 0x0003003eu, 0x00005a72u, 0x00003ce0u, 0x0003003eu, 0x00005a73u, 0x00003ce3u, 0x0003003eu, 0x00003dc6u, 0x000018feu, 0x0003003eu, 0x00003dc7u, 0x0000404cu, 0x0003003eu, 0x00003dc8u, 0x00004038u, 0x00050041u, 0x00000007u, 0x00004d35u, 0x00003dc7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004d36u, 0x00004d35u, 0x00050084u, 0x00000006u, 0x00004d37u, 0x00003ce3u, 0x00004d36u, 0x00050080u, 0x00000006u, 0x00004d38u, 0x00003ce0u, 0x00004d37u, 0x0003003eu, 0x00004d2cu, 0x00004d38u, 0x00050041u, 0x00000007u, 0x00004d39u, 0x00003dc7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004d3au, 0x00004d39u, 0x000500c2u, 0x00000006u, 0x00004d3bu, 0x00004d3au, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004d3du, 0x00004d38u, 0x00004d3bu, 0x0003003eu, 0x00004d2cu, 0x00004d3du, 0x000500c7u, 0x00000006u, 0x00004d3fu, 0x00004d3du, 0x000006b4u, 0x0003003eu, 0x00004d2cu, 0x00004d3fu, 0x0004003du, 0x00000006u, 0x00004d41u, 0x00004d39u, 0x000400c8u, 0x00000006u, 0x00004d42u, 0x00004d41u, 0x000500c7u, 0x00000006u, 0x00004d43u, 0x00004d42u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004d44u, 0x00004d43u, 0x000006bcu, 0x0003003eu, 0x00004d2du, 0x00004d44u, 0x0003003eu, 0x00004d2eu, 0x00004d3fu, 0x0004003du, 0x00000006u, 0x00004d47u, 0x00004d35u, 0x000500c7u, 0x00000006u, 0x00004d48u, 0x00004d47u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004d49u, 0x00004d48u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004d4bu, 0x00004d3fu, 0x00004d49u, 0x0003003eu, 0x00004d2eu, 0x00004d4bu, 0x000500c6u, 0x00000006u, 0x00004d4du, 0x00004d4bu, 0x00000331u, 0x0003003eu, 0x00004d2eu, 0x00004d4du, 0x00080041u, 0x000001f9u, 0x00004d50u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004d4du, 0x0004003du, 0x000001abu, 0x00004d51u, 0x00004d50u, 0x00040071u, 0x00000006u, 0x00004d52u, 0x00004d51u, 0x0003003eu, 0x00004d2fu, 0x00004d52u, 0x000500c2u, 0x00000006u, 0x00004d55u, 0x00004d52u, 0x00004d44u, 0x000500c7u, 0x00000006u, 0x00004d56u, 0x00004d55u, 0x000006d8u, 0x0003003eu, 0x00004d2fu, 0x00004d56u, 0x000500c5u, 0x00000006u, 0x00004d5au, 0x00004d56u, 0x00004cf4u, 0x0003003eu, 0x00004d2fu, 0x00004d5au, 0x0004007cu, 0x00000008u, 0x00004d5cu, 0x00004d5au, 0x00070050u, 0x00000009u, 0x00004d5du, 0x00004d5cu, 0x00004d5cu, 0x00004d5cu, 0x00004d5cu, 0x0003003eu, 0x00004d30u, 0x00004d5du, 0x0003003eu, 0x00003d3bu, 0x00004d5du, 0x000200f9u, 0x0000403du, 0x000200f8u, 0x0000403du, 0x000700f5u, 0x00000009u, 0x00008b47u, 0x000072a9u, 0x00004012u, 0x00004d5du, 0x0000403eu, 0x000700f5u, 0x00000009u, 0x0000897fu, 0x000072a9u, 0x00004012u, 0x00004d2bu, 0x0000403eu, 0x000300f7u, 0x00004054u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00004055u, 0x00004054u, 0x000200f8u, 0x00004055u, 0x00050050u, 0x0000004du, 0x00004058u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004059u, 0x00004058u, 0x0003003eu, 0x00005a76u, 0x00003ce0u, 0x0003003eu, 0x00005a77u, 0x00003ce3u, 0x0003003eu, 0x00003dcau, 0x000018feu, 0x0003003eu, 0x00003dcbu, 0x00004059u, 0x0003003eu, 0x00003dccu, 0x00004038u, 0x00050041u, 0x00000007u, 0x00004d67u, 0x00003dcbu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004d68u, 0x00004d67u, 0x00050084u, 0x00000006u, 0x00004d69u, 0x00003ce3u, 0x00004d68u, 0x00050080u, 0x00000006u, 0x00004d6au, 0x00003ce0u, 0x00004d69u, 0x0003003eu, 0x00004d5eu, 0x00004d6au, 0x00050041u, 0x00000007u, 0x00004d6bu, 0x00003dcbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004d6cu, 0x00004d6bu, 0x000500c2u, 0x00000006u, 0x00004d6du, 0x00004d6cu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004d6fu, 0x00004d6au, 0x00004d6du, 0x0003003eu, 0x00004d5eu, 0x00004d6fu, 0x000500c7u, 0x00000006u, 0x00004d71u, 0x00004d6fu, 0x000006b4u, 0x0003003eu, 0x00004d5eu, 0x00004d71u, 0x0004003du, 0x00000006u, 0x00004d73u, 0x00004d6bu, 0x000400c8u, 0x00000006u, 0x00004d74u, 0x00004d73u, 0x000500c7u, 0x00000006u, 0x00004d75u, 0x00004d74u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004d76u, 0x00004d75u, 0x000006bcu, 0x0003003eu, 0x00004d5fu, 0x00004d76u, 0x0003003eu, 0x00004d60u, 0x00004d71u, 0x0004003du, 0x00000006u, 0x00004d79u, 0x00004d67u, 0x000500c7u, 0x00000006u, 0x00004d7au, 0x00004d79u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004d7bu, 0x00004d7au, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004d7du, 0x00004d71u, 0x00004d7bu, 0x0003003eu, 0x00004d60u, 0x00004d7du, 0x000500c6u, 0x00000006u, 0x00004d7fu, 0x00004d7du, 0x00000331u, 0x0003003eu, 0x00004d60u, 0x00004d7fu, 0x00080041u, 0x000001f9u, 0x00004d82u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004d7fu, 0x0004003du, 0x000001abu, 0x00004d83u, 0x00004d82u, 0x00040071u, 0x00000006u, 0x00004d84u, 0x00004d83u, 0x0003003eu, 0x00004d61u, 0x00004d84u, 0x000500c2u, 0x00000006u, 0x00004d87u, 0x00004d84u, 0x00004d76u, 0x000500c7u, 0x00000006u, 0x00004d88u, 0x00004d87u, 0x000006d8u, 0x0003003eu, 0x00004d61u, 0x00004d88u, 0x000500c5u, 0x00000006u, 0x00004d8cu, 0x00004d88u, 0x00004cf4u, 0x0003003eu, 0x00004d61u, 0x00004d8cu, 0x0004007cu, 0x00000008u, 0x00004d8eu, 0x00004d8cu, 0x00070050u, 0x00000009u, 0x00004d8fu, 0x00004d8eu, 0x00004d8eu, 0x00004d8eu, 0x00004d8eu, 0x0003003eu, 0x00004d62u, 0x00004d8fu, 0x0003003eu, 0x00003d43u, 0x00004d8fu, 0x000200f9u, 0x00004054u, 0x000200f8u, 0x00004054u, 0x000700f5u, 0x00000009u, 0x00008c2bu, 0x000072a9u, 0x0000403du, 0x00004d8fu, 0x00004055u, 0x000200f9u, 0x00004010u, 0x000200f8u, 0x00004011u, 0x0004007cu, 0x000000a0u, 0x00004015u, 0x0000853eu, 0x0003003eu, 0x00005a8au, 0x00003ce0u, 0x0003003eu, 0x00005a8bu, 0x00003ce3u, 0x0003003eu, 0x00003ddau, 0x000018feu, 0x0003003eu, 0x00003ddbu, 0x00004015u, 0x00050041u, 0x00000007u, 0x00004c28u, 0x00003ddbu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004c29u, 0x00004c28u, 0x00050084u, 0x00000006u, 0x00004c2au, 0x00003ce3u, 0x00004c29u, 0x00050080u, 0x00000006u, 0x00004c2bu, 0x00003ce0u, 0x00004c2au, 0x0003003eu, 0x00004c20u, 0x00004c2bu, 0x00050041u, 0x00000007u, 0x00004c2cu, 0x00003ddbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004c2du, 0x00004c2cu, 0x00050084u, 0x00000006u, 0x00004c2eu, 0x00004c2du, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004c30u, 0x00004c2bu, 0x00004c2eu, 0x0003003eu, 0x00004c20u, 0x00004c30u, 0x000500c7u, 0x00000006u, 0x00004c32u, 0x00004c30u, 0x000006b4u, 0x0003003eu, 0x00004c20u, 0x00004c32u, 0x000500c2u, 0x00000006u, 0x00004c34u, 0x00004c32u, 0x00000194u, 0x0003003eu, 0x00004c21u, 0x00004c34u, 0x0004003du, 0x00000006u, 0x00004c36u, 0x00004c28u, 0x000500c7u, 0x00000006u, 0x00004c37u, 0x00004c36u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004c38u, 0x00004c37u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004c3au, 0x00004c34u, 0x00004c38u, 0x0003003eu, 0x00004c21u, 0x00004c3au, 0x000500c6u, 0x00000006u, 0x00004c3cu, 0x00004c3au, 0x0000032au, 0x0003003eu, 0x00004c21u, 0x00004c3cu, 0x00080041u, 0x000001f2u, 0x00004c3fu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004c3cu, 0x0004003du, 0x000001adu, 0x00004c40u, 0x00004c3fu, 0x00040071u, 0x00000006u, 0x00004c41u, 0x00004c40u, 0x0003003eu, 0x00004c22u, 0x00004c41u, 0x000500c2u, 0x00000006u, 0x00004c43u, 0x00004c41u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004c44u, 0x00004c43u, 0x000500c7u, 0x00000006u, 0x00004c46u, 0x00004c41u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004c47u, 0x00004c46u, 0x00050050u, 0x0000004du, 0x00004c48u, 0x00004c44u, 0x00004c47u, 0x0009004fu, 0x00000009u, 0x00004c49u, 0x00004c48u, 0x00004c48u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004c23u, 0x00004c49u, 0x0003003eu, 0x00003d2bu, 0x00004c49u, 0x000300f7u, 0x0000401au, 0x00000000u, 0x000400fau, 0x00001927u, 0x0000401bu, 0x0000401au, 0x000200f8u, 0x0000401bu, 0x00050050u, 0x0000004du, 0x0000401eu, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x0000401fu, 0x0000401eu, 0x0003003eu, 0x00005a8eu, 0x00003ce0u, 0x0003003eu, 0x00005a8fu, 0x00003ce3u, 0x0003003eu, 0x00003dddu, 0x000018feu, 0x0003003eu, 0x00003ddeu, 0x0000401fu, 0x00050041u, 0x00000007u, 0x00004c52u, 0x00003ddeu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004c53u, 0x00004c52u, 0x00050084u, 0x00000006u, 0x00004c54u, 0x00003ce3u, 0x00004c53u, 0x00050080u, 0x00000006u, 0x00004c55u, 0x00003ce0u, 0x00004c54u, 0x0003003eu, 0x00004c4au, 0x00004c55u, 0x00050041u, 0x00000007u, 0x00004c56u, 0x00003ddeu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004c57u, 0x00004c56u, 0x00050084u, 0x00000006u, 0x00004c58u, 0x00004c57u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004c5au, 0x00004c55u, 0x00004c58u, 0x0003003eu, 0x00004c4au, 0x00004c5au, 0x000500c7u, 0x00000006u, 0x00004c5cu, 0x00004c5au, 0x000006b4u, 0x0003003eu, 0x00004c4au, 0x00004c5cu, 0x000500c2u, 0x00000006u, 0x00004c5eu, 0x00004c5cu, 0x00000194u, 0x0003003eu, 0x00004c4bu, 0x00004c5eu, 0x0004003du, 0x00000006u, 0x00004c60u, 0x00004c52u, 0x000500c7u, 0x00000006u, 0x00004c61u, 0x00004c60u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004c62u, 0x00004c61u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004c64u, 0x00004c5eu, 0x00004c62u, 0x0003003eu, 0x00004c4bu, 0x00004c64u, 0x000500c6u, 0x00000006u, 0x00004c66u, 0x00004c64u, 0x0000032au, 0x0003003eu, 0x00004c4bu, 0x00004c66u, 0x00080041u, 0x000001f2u, 0x00004c69u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004c66u, 0x0004003du, 0x000001adu, 0x00004c6au, 0x00004c69u, 0x00040071u, 0x00000006u, 0x00004c6bu, 0x00004c6au, 0x0003003eu, 0x00004c4cu, 0x00004c6bu, 0x000500c2u, 0x00000006u, 0x00004c6du, 0x00004c6bu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004c6eu, 0x00004c6du, 0x000500c7u, 0x00000006u, 0x00004c70u, 0x00004c6bu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004c71u, 0x00004c70u, 0x00050050u, 0x0000004du, 0x00004c72u, 0x00004c6eu, 0x00004c71u, 0x0009004fu, 0x00000009u, 0x00004c73u, 0x00004c72u, 0x00004c72u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004c4du, 0x00004c73u, 0x0003003eu, 0x00003d33u, 0x00004c73u, 0x00050050u, 0x0000004du, 0x00004025u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004026u, 0x00004025u, 0x0003003eu, 0x00005a92u, 0x00003ce0u, 0x0003003eu, 0x00005a93u, 0x00003ce3u, 0x0003003eu, 0x00003de0u, 0x000018feu, 0x0003003eu, 0x00003de1u, 0x00004026u, 0x00050041u, 0x00000007u, 0x00004c7cu, 0x00003de1u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004c7du, 0x00004c7cu, 0x00050084u, 0x00000006u, 0x00004c7eu, 0x00003ce3u, 0x00004c7du, 0x00050080u, 0x00000006u, 0x00004c7fu, 0x00003ce0u, 0x00004c7eu, 0x0003003eu, 0x00004c74u, 0x00004c7fu, 0x00050041u, 0x00000007u, 0x00004c80u, 0x00003de1u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004c81u, 0x00004c80u, 0x00050084u, 0x00000006u, 0x00004c82u, 0x00004c81u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004c84u, 0x00004c7fu, 0x00004c82u, 0x0003003eu, 0x00004c74u, 0x00004c84u, 0x000500c7u, 0x00000006u, 0x00004c86u, 0x00004c84u, 0x000006b4u, 0x0003003eu, 0x00004c74u, 0x00004c86u, 0x000500c2u, 0x00000006u, 0x00004c88u, 0x00004c86u, 0x00000194u, 0x0003003eu, 0x00004c75u, 0x00004c88u, 0x0004003du, 0x00000006u, 0x00004c8au, 0x00004c7cu, 0x000500c7u, 0x00000006u, 0x00004c8bu, 0x00004c8au, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004c8cu, 0x00004c8bu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004c8eu, 0x00004c88u, 0x00004c8cu, 0x0003003eu, 0x00004c75u, 0x00004c8eu, 0x000500c6u, 0x00000006u, 0x00004c90u, 0x00004c8eu, 0x0000032au, 0x0003003eu, 0x00004c75u, 0x00004c90u, 0x00080041u, 0x000001f2u, 0x00004c93u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004c90u, 0x0004003du, 0x000001adu, 0x00004c94u, 0x00004c93u, 0x00040071u, 0x00000006u, 0x00004c95u, 0x00004c94u, 0x0003003eu, 0x00004c76u, 0x00004c95u, 0x000500c2u, 0x00000006u, 0x00004c97u, 0x00004c95u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004c98u, 0x00004c97u, 0x000500c7u, 0x00000006u, 0x00004c9au, 0x00004c95u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004c9bu, 0x00004c9au, 0x00050050u, 0x0000004du, 0x00004c9cu, 0x00004c98u, 0x00004c9bu, 0x0009004fu, 0x00000009u, 0x00004c9du, 0x00004c9cu, 0x00004c9cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004c77u, 0x00004c9du, 0x0003003eu, 0x00003d3bu, 0x00004c9du, 0x000200f9u, 0x0000401au, 0x000200f8u, 0x0000401au, 0x000700f5u, 0x00000009u, 0x00008b45u, 0x000072a9u, 0x00004011u, 0x00004c9du, 0x0000401bu, 0x000700f5u, 0x00000009u, 0x0000897du, 0x000072a9u, 0x00004011u, 0x00004c73u, 0x0000401bu, 0x000300f7u, 0x0000402bu, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x0000402cu, 0x0000402bu, 0x000200f8u, 0x0000402cu, 0x00050050u, 0x0000004du, 0x0000402fu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004030u, 0x0000402fu, 0x0003003eu, 0x00005a96u, 0x00003ce0u, 0x0003003eu, 0x00005a97u, 0x00003ce3u, 0x0003003eu, 0x00003de3u, 0x000018feu, 0x0003003eu, 0x00003de4u, 0x00004030u, 0x00050041u, 0x00000007u, 0x00004ca6u, 0x00003de4u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004ca7u, 0x00004ca6u, 0x00050084u, 0x00000006u, 0x00004ca8u, 0x00003ce3u, 0x00004ca7u, 0x00050080u, 0x00000006u, 0x00004ca9u, 0x00003ce0u, 0x00004ca8u, 0x0003003eu, 0x00004c9eu, 0x00004ca9u, 0x00050041u, 0x00000007u, 0x00004caau, 0x00003de4u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004cabu, 0x00004caau, 0x00050084u, 0x00000006u, 0x00004cacu, 0x00004cabu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004caeu, 0x00004ca9u, 0x00004cacu, 0x0003003eu, 0x00004c9eu, 0x00004caeu, 0x000500c7u, 0x00000006u, 0x00004cb0u, 0x00004caeu, 0x000006b4u, 0x0003003eu, 0x00004c9eu, 0x00004cb0u, 0x000500c2u, 0x00000006u, 0x00004cb2u, 0x00004cb0u, 0x00000194u, 0x0003003eu, 0x00004c9fu, 0x00004cb2u, 0x0004003du, 0x00000006u, 0x00004cb4u, 0x00004ca6u, 0x000500c7u, 0x00000006u, 0x00004cb5u, 0x00004cb4u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004cb6u, 0x00004cb5u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004cb8u, 0x00004cb2u, 0x00004cb6u, 0x0003003eu, 0x00004c9fu, 0x00004cb8u, 0x000500c6u, 0x00000006u, 0x00004cbau, 0x00004cb8u, 0x0000032au, 0x0003003eu, 0x00004c9fu, 0x00004cbau, 0x00080041u, 0x000001f2u, 0x00004cbdu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004cbau, 0x0004003du, 0x000001adu, 0x00004cbeu, 0x00004cbdu, 0x00040071u, 0x00000006u, 0x00004cbfu, 0x00004cbeu, 0x0003003eu, 0x00004ca0u, 0x00004cbfu, 0x000500c2u, 0x00000006u, 0x00004cc1u, 0x00004cbfu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004cc2u, 0x00004cc1u, 0x000500c7u, 0x00000006u, 0x00004cc4u, 0x00004cbfu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004cc5u, 0x00004cc4u, 0x00050050u, 0x0000004du, 0x00004cc6u, 0x00004cc2u, 0x00004cc5u, 0x0009004fu, 0x00000009u, 0x00004cc7u, 0x00004cc6u, 0x00004cc6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004ca1u, 0x00004cc7u, 0x0003003eu, 0x00003d43u, 0x00004cc7u, 0x000200f9u, 0x0000402bu, 0x000200f8u, 0x0000402bu, 0x000700f5u, 0x00000009u, 0x00008c29u, 0x000072a9u, 0x0000401au, 0x00004cc7u, 0x0000402cu, 0x000200f9u, 0x00004010u, 0x000200f8u, 0x00004010u, 0x000900f5u, 0x00000009u, 0x00008c28u, 0x00008c29u, 0x0000402bu, 0x00008c2bu, 0x00004054u, 0x00008c2du, 0x00004077u, 0x000900f5u, 0x00000009u, 0x00008b43u, 0x00008b45u, 0x0000402bu, 0x00008b47u, 0x00004054u, 0x00008b49u, 0x00004077u, 0x000900f5u, 0x00000009u, 0x00008a60u, 0x00004c49u, 0x0000402bu, 0x00004cf9u, 0x00004054u, 0x00004db2u, 0x00004077u, 0x000900f5u, 0x00000009u, 0x0000897bu, 0x0000897du, 0x0000402bu, 0x0000897fu, 0x00004054u, 0x00008981u, 0x00004077u, 0x000200f9u, 0x00003f54u, 0x000200f8u, 0x00003f56u, 0x000500c3u, 0x00000008u, 0x00003fe2u, 0x000084b5u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00003fe3u, 0x00003fe2u, 0x0003003eu, 0x00003dabu, 0x00003fe3u, 0x00050082u, 0x00000008u, 0x00003fe7u, 0x000084f3u, 0x000084b5u, 0x00050080u, 0x00000008u, 0x00003fe8u, 0x000084f3u, 0x00003fe7u, 0x000500c3u, 0x00000008u, 0x00003fe9u, 0x00003fe8u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00003feau, 0x00003fe9u, 0x0003003eu, 0x00003dacu, 0x00003feau, 0x00050050u, 0x0000004du, 0x00003fedu, 0x000084b5u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003feeu, 0x00003fedu, 0x0003003eu, 0x00005a5au, 0x00003ce0u, 0x0003003eu, 0x00005a5bu, 0x00003ce3u, 0x0003003eu, 0x00003daeu, 0x000018feu, 0x0003003eu, 0x00003dafu, 0x00003feeu, 0x0003003eu, 0x00003db0u, 0x00003fe3u, 0x00050041u, 0x00000007u, 0x00004b02u, 0x00003dafu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004b03u, 0x00004b02u, 0x00050084u, 0x00000006u, 0x00004b04u, 0x00003ce3u, 0x00004b03u, 0x00050080u, 0x00000006u, 0x00004b05u, 0x00003ce0u, 0x00004b04u, 0x0003003eu, 0x00004af4u, 0x00004b05u, 0x00050041u, 0x00000007u, 0x00004b07u, 0x00003dafu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004b08u, 0x00004b07u, 0x00050080u, 0x00000006u, 0x00004b09u, 0x00004b05u, 0x00004b08u, 0x0003003eu, 0x00004af5u, 0x00004b09u, 0x000500c7u, 0x00000006u, 0x00004b0bu, 0x00004b09u, 0x00000767u, 0x0003003eu, 0x00004af5u, 0x00004b0bu, 0x00050084u, 0x00000006u, 0x00004b0eu, 0x00003fe3u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004b0fu, 0x00004b05u, 0x00004b0eu, 0x0003003eu, 0x00004af6u, 0x00004b0fu, 0x000500c7u, 0x00000006u, 0x00004b11u, 0x00004b0fu, 0x00000767u, 0x0003003eu, 0x00004af6u, 0x00004b11u, 0x0003003eu, 0x00004af7u, 0x00004b0bu, 0x0004003du, 0x00000006u, 0x00004b14u, 0x00004b02u, 0x000500c7u, 0x00000006u, 0x00004b15u, 0x00004b14u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004b16u, 0x00004b15u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004b18u, 0x00004b0bu, 0x00004b16u, 0x0003003eu, 0x00004af7u, 0x00004b18u, 0x000500c6u, 0x00000006u, 0x00004b1au, 0x00004b18u, 0x00000331u, 0x0003003eu, 0x00004af7u, 0x00004b1au, 0x000500c2u, 0x00000006u, 0x00004b1cu, 0x00004b11u, 0x00000194u, 0x0003003eu, 0x00004af8u, 0x00004b1cu, 0x0004003du, 0x00000006u, 0x00004b1eu, 0x00004b02u, 0x000500c7u, 0x00000006u, 0x00004b1fu, 0x00004b1eu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004b20u, 0x00004b1fu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004b22u, 0x00004b1cu, 0x00004b20u, 0x0003003eu, 0x00004af8u, 0x00004b22u, 0x000500c6u, 0x00000006u, 0x00004b24u, 0x00004b22u, 0x0000032au, 0x0003003eu, 0x00004af8u, 0x00004b24u, 0x000500c5u, 0x00000006u, 0x00004b27u, 0x00004b1au, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00004b28u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004b27u, 0x0004003du, 0x000001abu, 0x00004b29u, 0x00004b28u, 0x00040071u, 0x00000006u, 0x00004b2au, 0x00004b29u, 0x0004007cu, 0x00000008u, 0x00004b2bu, 0x00004b2au, 0x0003003eu, 0x00004af9u, 0x00004b2bu, 0x00080041u, 0x000001f2u, 0x00004b2eu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004b24u, 0x0004003du, 0x000001adu, 0x00004b2fu, 0x00004b2eu, 0x00040071u, 0x00000006u, 0x00004b30u, 0x00004b2fu, 0x0004007cu, 0x00000008u, 0x00004b31u, 0x00004b30u, 0x0003003eu, 0x00004afau, 0x00004b31u, 0x000500c3u, 0x00000008u, 0x00004b33u, 0x00004b31u, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x00004b34u, 0x00004b33u, 0x000002eeu, 0x0003003eu, 0x00004afbu, 0x00004b34u, 0x000500c3u, 0x00000008u, 0x00004b36u, 0x00004b31u, 0x00000185u, 0x000500c7u, 0x00000008u, 0x00004b37u, 0x00004b36u, 0x000002eeu, 0x0003003eu, 0x00004afcu, 0x00004b37u, 0x00050082u, 0x00000008u, 0x00004b39u, 0x00004b34u, 0x00000323u, 0x00050082u, 0x00000008u, 0x00004b3bu, 0x00004b37u, 0x00000323u, 0x00070050u, 0x00000009u, 0x00004b3eu, 0x00004b39u, 0x00004b3bu, 0x00004b2bu, 0x00004b2bu, 0x0003003eu, 0x00004afdu, 0x00004b3eu, 0x0003003eu, 0x00003d2bu, 0x00004b3eu, 0x000300f7u, 0x00003ff4u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003ff5u, 0x00003ff4u, 0x000200f8u, 0x00003ff5u, 0x00050050u, 0x0000004du, 0x00003ff8u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003ff9u, 0x00003ff8u, 0x0003003eu, 0x00005a5eu, 0x00003ce0u, 0x0003003eu, 0x00005a5fu, 0x00003ce3u, 0x0003003eu, 0x00003db2u, 0x000018feu, 0x0003003eu, 0x00003db3u, 0x00003ff9u, 0x0003003eu, 0x00003db4u, 0x00003feau, 0x00050041u, 0x00000007u, 0x00004b4du, 0x00003db3u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004b4eu, 0x00004b4du, 0x00050084u, 0x00000006u, 0x00004b4fu, 0x00003ce3u, 0x00004b4eu, 0x00050080u, 0x00000006u, 0x00004b50u, 0x00003ce0u, 0x00004b4fu, 0x0003003eu, 0x00004b3fu, 0x00004b50u, 0x00050041u, 0x00000007u, 0x00004b52u, 0x00003db3u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004b53u, 0x00004b52u, 0x00050080u, 0x00000006u, 0x00004b54u, 0x00004b50u, 0x00004b53u, 0x0003003eu, 0x00004b40u, 0x00004b54u, 0x000500c7u, 0x00000006u, 0x00004b56u, 0x00004b54u, 0x00000767u, 0x0003003eu, 0x00004b40u, 0x00004b56u, 0x00050084u, 0x00000006u, 0x00004b59u, 0x00003feau, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004b5au, 0x00004b50u, 0x00004b59u, 0x0003003eu, 0x00004b41u, 0x00004b5au, 0x000500c7u, 0x00000006u, 0x00004b5cu, 0x00004b5au, 0x00000767u, 0x0003003eu, 0x00004b41u, 0x00004b5cu, 0x0003003eu, 0x00004b42u, 0x00004b56u, 0x0004003du, 0x00000006u, 0x00004b5fu, 0x00004b4du, 0x000500c7u, 0x00000006u, 0x00004b60u, 0x00004b5fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004b61u, 0x00004b60u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004b63u, 0x00004b56u, 0x00004b61u, 0x0003003eu, 0x00004b42u, 0x00004b63u, 0x000500c6u, 0x00000006u, 0x00004b65u, 0x00004b63u, 0x00000331u, 0x0003003eu, 0x00004b42u, 0x00004b65u, 0x000500c2u, 0x00000006u, 0x00004b67u, 0x00004b5cu, 0x00000194u, 0x0003003eu, 0x00004b43u, 0x00004b67u, 0x0004003du, 0x00000006u, 0x00004b69u, 0x00004b4du, 0x000500c7u, 0x00000006u, 0x00004b6au, 0x00004b69u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004b6bu, 0x00004b6au, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004b6du, 0x00004b67u, 0x00004b6bu, 0x0003003eu, 0x00004b43u, 0x00004b6du, 0x000500c6u, 0x00000006u, 0x00004b6fu, 0x00004b6du, 0x0000032au, 0x0003003eu, 0x00004b43u, 0x00004b6fu, 0x000500c5u, 0x00000006u, 0x00004b72u, 0x00004b65u, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00004b73u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004b72u, 0x0004003du, 0x000001abu, 0x00004b74u, 0x00004b73u, 0x00040071u, 0x00000006u, 0x00004b75u, 0x00004b74u, 0x0004007cu, 0x00000008u, 0x00004b76u, 0x00004b75u, 0x0003003eu, 0x00004b44u, 0x00004b76u, 0x00080041u, 0x000001f2u, 0x00004b79u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004b6fu, 0x0004003du, 0x000001adu, 0x00004b7au, 0x00004b79u, 0x00040071u, 0x00000006u, 0x00004b7bu, 0x00004b7au, 0x0004007cu, 0x00000008u, 0x00004b7cu, 0x00004b7bu, 0x0003003eu, 0x00004b45u, 0x00004b7cu, 0x000500c3u, 0x00000008u, 0x00004b7eu, 0x00004b7cu, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x00004b7fu, 0x00004b7eu, 0x000002eeu, 0x0003003eu, 0x00004b46u, 0x00004b7fu, 0x000500c3u, 0x00000008u, 0x00004b81u, 0x00004b7cu, 0x00000185u, 0x000500c7u, 0x00000008u, 0x00004b82u, 0x00004b81u, 0x000002eeu, 0x0003003eu, 0x00004b47u, 0x00004b82u, 0x00050082u, 0x00000008u, 0x00004b84u, 0x00004b7fu, 0x00000323u, 0x00050082u, 0x00000008u, 0x00004b86u, 0x00004b82u, 0x00000323u, 0x00070050u, 0x00000009u, 0x00004b89u, 0x00004b84u, 0x00004b86u, 0x00004b76u, 0x00004b76u, 0x0003003eu, 0x00004b48u, 0x00004b89u, 0x0003003eu, 0x00003d33u, 0x00004b89u, 0x00050050u, 0x0000004du, 0x00004000u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004001u, 0x00004000u, 0x0003003eu, 0x00005a62u, 0x00003ce0u, 0x0003003eu, 0x00005a63u, 0x00003ce3u, 0x0003003eu, 0x00003db6u, 0x000018feu, 0x0003003eu, 0x00003db7u, 0x00004001u, 0x0003003eu, 0x00003db8u, 0x00003fe3u, 0x00050041u, 0x00000007u, 0x00004b98u, 0x00003db7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004b99u, 0x00004b98u, 0x00050084u, 0x00000006u, 0x00004b9au, 0x00003ce3u, 0x00004b99u, 0x00050080u, 0x00000006u, 0x00004b9bu, 0x00003ce0u, 0x00004b9au, 0x0003003eu, 0x00004b8au, 0x00004b9bu, 0x00050041u, 0x00000007u, 0x00004b9du, 0x00003db7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004b9eu, 0x00004b9du, 0x00050080u, 0x00000006u, 0x00004b9fu, 0x00004b9bu, 0x00004b9eu, 0x0003003eu, 0x00004b8bu, 0x00004b9fu, 0x000500c7u, 0x00000006u, 0x00004ba1u, 0x00004b9fu, 0x00000767u, 0x0003003eu, 0x00004b8bu, 0x00004ba1u, 0x00050080u, 0x00000006u, 0x00004ba5u, 0x00004b9bu, 0x00004b0eu, 0x0003003eu, 0x00004b8cu, 0x00004ba5u, 0x000500c7u, 0x00000006u, 0x00004ba7u, 0x00004ba5u, 0x00000767u, 0x0003003eu, 0x00004b8cu, 0x00004ba7u, 0x0003003eu, 0x00004b8du, 0x00004ba1u, 0x0004003du, 0x00000006u, 0x00004baau, 0x00004b98u, 0x000500c7u, 0x00000006u, 0x00004babu, 0x00004baau, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004bacu, 0x00004babu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004baeu, 0x00004ba1u, 0x00004bacu, 0x0003003eu, 0x00004b8du, 0x00004baeu, 0x000500c6u, 0x00000006u, 0x00004bb0u, 0x00004baeu, 0x00000331u, 0x0003003eu, 0x00004b8du, 0x00004bb0u, 0x000500c2u, 0x00000006u, 0x00004bb2u, 0x00004ba7u, 0x00000194u, 0x0003003eu, 0x00004b8eu, 0x00004bb2u, 0x0004003du, 0x00000006u, 0x00004bb4u, 0x00004b98u, 0x000500c7u, 0x00000006u, 0x00004bb5u, 0x00004bb4u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004bb6u, 0x00004bb5u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004bb8u, 0x00004bb2u, 0x00004bb6u, 0x0003003eu, 0x00004b8eu, 0x00004bb8u, 0x000500c6u, 0x00000006u, 0x00004bbau, 0x00004bb8u, 0x0000032au, 0x0003003eu, 0x00004b8eu, 0x00004bbau, 0x000500c5u, 0x00000006u, 0x00004bbdu, 0x00004bb0u, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00004bbeu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004bbdu, 0x0004003du, 0x000001abu, 0x00004bbfu, 0x00004bbeu, 0x00040071u, 0x00000006u, 0x00004bc0u, 0x00004bbfu, 0x0004007cu, 0x00000008u, 0x00004bc1u, 0x00004bc0u, 0x0003003eu, 0x00004b8fu, 0x00004bc1u, 0x00080041u, 0x000001f2u, 0x00004bc4u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004bbau, 0x0004003du, 0x000001adu, 0x00004bc5u, 0x00004bc4u, 0x00040071u, 0x00000006u, 0x00004bc6u, 0x00004bc5u, 0x0004007cu, 0x00000008u, 0x00004bc7u, 0x00004bc6u, 0x0003003eu, 0x00004b90u, 0x00004bc7u, 0x000500c3u, 0x00000008u, 0x00004bc9u, 0x00004bc7u, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x00004bcau, 0x00004bc9u, 0x000002eeu, 0x0003003eu, 0x00004b91u, 0x00004bcau, 0x000500c3u, 0x00000008u, 0x00004bccu, 0x00004bc7u, 0x00000185u, 0x000500c7u, 0x00000008u, 0x00004bcdu, 0x00004bccu, 0x000002eeu, 0x0003003eu, 0x00004b92u, 0x00004bcdu, 0x00050082u, 0x00000008u, 0x00004bcfu, 0x00004bcau, 0x00000323u, 0x00050082u, 0x00000008u, 0x00004bd1u, 0x00004bcdu, 0x00000323u, 0x00070050u, 0x00000009u, 0x00004bd4u, 0x00004bcfu, 0x00004bd1u, 0x00004bc1u, 0x00004bc1u, 0x0003003eu, 0x00004b93u, 0x00004bd4u, 0x0003003eu, 0x00003d3bu, 0x00004bd4u, 0x00050050u, 0x0000004du, 0x00004008u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00004009u, 0x00004008u, 0x0003003eu, 0x00005a66u, 0x00003ce0u, 0x0003003eu, 0x00005a67u, 0x00003ce3u, 0x0003003eu, 0x00003dbau, 0x000018feu, 0x0003003eu, 0x00003dbbu, 0x00004009u, 0x0003003eu, 0x00003dbcu, 0x00003feau, 0x00050041u, 0x00000007u, 0x00004be3u, 0x00003dbbu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004be4u, 0x00004be3u, 0x00050084u, 0x00000006u, 0x00004be5u, 0x00003ce3u, 0x00004be4u, 0x00050080u, 0x00000006u, 0x00004be6u, 0x00003ce0u, 0x00004be5u, 0x0003003eu, 0x00004bd5u, 0x00004be6u, 0x00050041u, 0x00000007u, 0x00004be8u, 0x00003dbbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004be9u, 0x00004be8u, 0x00050080u, 0x00000006u, 0x00004beau, 0x00004be6u, 0x00004be9u, 0x0003003eu, 0x00004bd6u, 0x00004beau, 0x000500c7u, 0x00000006u, 0x00004becu, 0x00004beau, 0x00000767u, 0x0003003eu, 0x00004bd6u, 0x00004becu, 0x00050080u, 0x00000006u, 0x00004bf0u, 0x00004be6u, 0x00004b59u, 0x0003003eu, 0x00004bd7u, 0x00004bf0u, 0x000500c7u, 0x00000006u, 0x00004bf2u, 0x00004bf0u, 0x00000767u, 0x0003003eu, 0x00004bd7u, 0x00004bf2u, 0x0003003eu, 0x00004bd8u, 0x00004becu, 0x0004003du, 0x00000006u, 0x00004bf5u, 0x00004be3u, 0x000500c7u, 0x00000006u, 0x00004bf6u, 0x00004bf5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004bf7u, 0x00004bf6u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004bf9u, 0x00004becu, 0x00004bf7u, 0x0003003eu, 0x00004bd8u, 0x00004bf9u, 0x000500c6u, 0x00000006u, 0x00004bfbu, 0x00004bf9u, 0x00000331u, 0x0003003eu, 0x00004bd8u, 0x00004bfbu, 0x000500c2u, 0x00000006u, 0x00004bfdu, 0x00004bf2u, 0x00000194u, 0x0003003eu, 0x00004bd9u, 0x00004bfdu, 0x0004003du, 0x00000006u, 0x00004bffu, 0x00004be3u, 0x000500c7u, 0x00000006u, 0x00004c00u, 0x00004bffu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004c01u, 0x00004c00u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004c03u, 0x00004bfdu, 0x00004c01u, 0x0003003eu, 0x00004bd9u, 0x00004c03u, 0x000500c6u, 0x00000006u, 0x00004c05u, 0x00004c03u, 0x0000032au, 0x0003003eu, 0x00004bd9u, 0x00004c05u, 0x000500c5u, 0x00000006u, 0x00004c08u, 0x00004bfbu, 0x00000790u, 0x00080041u, 0x000001f9u, 0x00004c09u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004c08u, 0x0004003du, 0x000001abu, 0x00004c0au, 0x00004c09u, 0x00040071u, 0x00000006u, 0x00004c0bu, 0x00004c0au, 0x0004007cu, 0x00000008u, 0x00004c0cu, 0x00004c0bu, 0x0003003eu, 0x00004bdau, 0x00004c0cu, 0x00080041u, 0x000001f2u, 0x00004c0fu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004c05u, 0x0004003du, 0x000001adu, 0x00004c10u, 0x00004c0fu, 0x00040071u, 0x00000006u, 0x00004c11u, 0x00004c10u, 0x0004007cu, 0x00000008u, 0x00004c12u, 0x00004c11u, 0x0003003eu, 0x00004bdbu, 0x00004c12u, 0x000500c3u, 0x00000008u, 0x00004c14u, 0x00004c12u, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x00004c15u, 0x00004c14u, 0x000002eeu, 0x0003003eu, 0x00004bdcu, 0x00004c15u, 0x000500c3u, 0x00000008u, 0x00004c17u, 0x00004c12u, 0x00000185u, 0x000500c7u, 0x00000008u, 0x00004c18u, 0x00004c17u, 0x000002eeu, 0x0003003eu, 0x00004bddu, 0x00004c18u, 0x00050082u, 0x00000008u, 0x00004c1au, 0x00004c15u, 0x00000323u, 0x00050082u, 0x00000008u, 0x00004c1cu, 0x00004c18u, 0x00000323u, 0x00070050u, 0x00000009u, 0x00004c1fu, 0x00004c1au, 0x00004c1cu, 0x00004c0cu, 0x00004c0cu, 0x0003003eu, 0x00004bdeu, 0x00004c1fu, 0x0003003eu, 0x00003d43u, 0x00004c1fu, 0x000200f9u, 0x00003ff4u, 0x000200f8u, 0x00003ff4u, 0x000700f5u, 0x00000009u, 0x00008c27u, 0x000072a9u, 0x00003f56u, 0x00004c1fu, 0x00003ff5u, 0x000700f5u, 0x00000009u, 0x00008b42u, 0x000072a9u, 0x00003f56u, 0x00004bd4u, 0x00003ff5u, 0x000700f5u, 0x00000009u, 0x0000897au, 0x000072a9u, 0x00003f56u, 0x00004b89u, 0x00003ff5u, 0x000200f9u, 0x00003f54u, 0x000200f8u, 0x00003f55u, 0x000300f7u, 0x00003f5cu, 0x00000000u, 0x000b00fbu, 0x0000b1e9u, 0x00003f5cu, 0x00000000u, 0x00003f5du, 0x00000001u, 0x00003f5eu, 0x00000002u, 0x00003f5fu, 0x00000003u, 0x00003f60u, 0x000200f8u, 0x00003f60u, 0x0004007cu, 0x000000a0u, 0x00003fc2u, 0x0000853eu, 0x0003003eu, 0x00005a4au, 0x00003ce0u, 0x0003003eu, 0x00005a4bu, 0x00003ce3u, 0x0003003eu, 0x00003da0u, 0x000018feu, 0x0003003eu, 0x00003da1u, 0x00003fc2u, 0x00050041u, 0x00000007u, 0x00004a25u, 0x00003da1u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004a26u, 0x00004a25u, 0x00050084u, 0x00000006u, 0x00004a27u, 0x00003ce3u, 0x00004a26u, 0x00050080u, 0x00000006u, 0x00004a28u, 0x00003ce0u, 0x00004a27u, 0x0003003eu, 0x00004a1cu, 0x00004a28u, 0x00050041u, 0x00000007u, 0x00004a29u, 0x00003da1u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004a2au, 0x00004a29u, 0x00050084u, 0x00000006u, 0x00004a2bu, 0x00004a2au, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004a2du, 0x00004a28u, 0x00004a2bu, 0x0003003eu, 0x00004a1cu, 0x00004a2du, 0x000500c7u, 0x00000006u, 0x00004a2fu, 0x00004a2du, 0x00000767u, 0x0003003eu, 0x00004a1cu, 0x00004a2fu, 0x000500c2u, 0x00000006u, 0x00004a31u, 0x00004a2fu, 0x00000194u, 0x0003003eu, 0x00004a1du, 0x00004a31u, 0x0004003du, 0x00000006u, 0x00004a33u, 0x00004a25u, 0x000500c7u, 0x00000006u, 0x00004a34u, 0x00004a33u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004a35u, 0x00004a34u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004a37u, 0x00004a31u, 0x00004a35u, 0x0003003eu, 0x00004a1du, 0x00004a37u, 0x000500c6u, 0x00000006u, 0x00004a39u, 0x00004a37u, 0x0000032au, 0x0003003eu, 0x00004a1du, 0x00004a39u, 0x00080041u, 0x000001f2u, 0x00004a3cu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004a39u, 0x0004003du, 0x000001adu, 0x00004a3du, 0x00004a3cu, 0x00040071u, 0x00000006u, 0x00004a3eu, 0x00004a3du, 0x0003003eu, 0x00004a1eu, 0x00004a3eu, 0x000500c5u, 0x00000006u, 0x00004a41u, 0x00004a39u, 0x00000798u, 0x00080041u, 0x000001f2u, 0x00004a42u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004a41u, 0x0004003du, 0x000001adu, 0x00004a43u, 0x00004a42u, 0x00040071u, 0x00000006u, 0x00004a44u, 0x00004a43u, 0x0003003eu, 0x00004a1fu, 0x00004a44u, 0x000500c2u, 0x00000006u, 0x00004a46u, 0x00004a3eu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004a47u, 0x00004a46u, 0x000500c7u, 0x00000006u, 0x00004a49u, 0x00004a3eu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004a4au, 0x00004a49u, 0x000500c2u, 0x00000006u, 0x00004a4cu, 0x00004a44u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004a4du, 0x00004a4cu, 0x000500c7u, 0x00000006u, 0x00004a4fu, 0x00004a44u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004a50u, 0x00004a4fu, 0x00070050u, 0x00000009u, 0x00004a51u, 0x00004a47u, 0x00004a4au, 0x00004a4du, 0x00004a50u, 0x0003003eu, 0x00004a20u, 0x00004a51u, 0x0003003eu, 0x00003d2bu, 0x00004a51u, 0x000300f7u, 0x00003fc7u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003fc8u, 0x00003fc7u, 0x000200f8u, 0x00003fc8u, 0x00050050u, 0x0000004du, 0x00003fcbu, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003fccu, 0x00003fcbu, 0x0003003eu, 0x00005a4eu, 0x00003ce0u, 0x0003003eu, 0x00005a4fu, 0x00003ce3u, 0x0003003eu, 0x00003da3u, 0x000018feu, 0x0003003eu, 0x00003da4u, 0x00003fccu, 0x00050041u, 0x00000007u, 0x00004a5bu, 0x00003da4u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004a5cu, 0x00004a5bu, 0x00050084u, 0x00000006u, 0x00004a5du, 0x00003ce3u, 0x00004a5cu, 0x00050080u, 0x00000006u, 0x00004a5eu, 0x00003ce0u, 0x00004a5du, 0x0003003eu, 0x00004a52u, 0x00004a5eu, 0x00050041u, 0x00000007u, 0x00004a5fu, 0x00003da4u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004a60u, 0x00004a5fu, 0x00050084u, 0x00000006u, 0x00004a61u, 0x00004a60u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004a63u, 0x00004a5eu, 0x00004a61u, 0x0003003eu, 0x00004a52u, 0x00004a63u, 0x000500c7u, 0x00000006u, 0x00004a65u, 0x00004a63u, 0x00000767u, 0x0003003eu, 0x00004a52u, 0x00004a65u, 0x000500c2u, 0x00000006u, 0x00004a67u, 0x00004a65u, 0x00000194u, 0x0003003eu, 0x00004a53u, 0x00004a67u, 0x0004003du, 0x00000006u, 0x00004a69u, 0x00004a5bu, 0x000500c7u, 0x00000006u, 0x00004a6au, 0x00004a69u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004a6bu, 0x00004a6au, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004a6du, 0x00004a67u, 0x00004a6bu, 0x0003003eu, 0x00004a53u, 0x00004a6du, 0x000500c6u, 0x00000006u, 0x00004a6fu, 0x00004a6du, 0x0000032au, 0x0003003eu, 0x00004a53u, 0x00004a6fu, 0x00080041u, 0x000001f2u, 0x00004a72u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004a6fu, 0x0004003du, 0x000001adu, 0x00004a73u, 0x00004a72u, 0x00040071u, 0x00000006u, 0x00004a74u, 0x00004a73u, 0x0003003eu, 0x00004a54u, 0x00004a74u, 0x000500c5u, 0x00000006u, 0x00004a77u, 0x00004a6fu, 0x00000798u, 0x00080041u, 0x000001f2u, 0x00004a78u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004a77u, 0x0004003du, 0x000001adu, 0x00004a79u, 0x00004a78u, 0x00040071u, 0x00000006u, 0x00004a7au, 0x00004a79u, 0x0003003eu, 0x00004a55u, 0x00004a7au, 0x000500c2u, 0x00000006u, 0x00004a7cu, 0x00004a74u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004a7du, 0x00004a7cu, 0x000500c7u, 0x00000006u, 0x00004a7fu, 0x00004a74u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004a80u, 0x00004a7fu, 0x000500c2u, 0x00000006u, 0x00004a82u, 0x00004a7au, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004a83u, 0x00004a82u, 0x000500c7u, 0x00000006u, 0x00004a85u, 0x00004a7au, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004a86u, 0x00004a85u, 0x00070050u, 0x00000009u, 0x00004a87u, 0x00004a7du, 0x00004a80u, 0x00004a83u, 0x00004a86u, 0x0003003eu, 0x00004a56u, 0x00004a87u, 0x0003003eu, 0x00003d33u, 0x00004a87u, 0x00050050u, 0x0000004du, 0x00003fd2u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003fd3u, 0x00003fd2u, 0x0003003eu, 0x00005a52u, 0x00003ce0u, 0x0003003eu, 0x00005a53u, 0x00003ce3u, 0x0003003eu, 0x00003da6u, 0x000018feu, 0x0003003eu, 0x00003da7u, 0x00003fd3u, 0x00050041u, 0x00000007u, 0x00004a91u, 0x00003da7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004a92u, 0x00004a91u, 0x00050084u, 0x00000006u, 0x00004a93u, 0x00003ce3u, 0x00004a92u, 0x00050080u, 0x00000006u, 0x00004a94u, 0x00003ce0u, 0x00004a93u, 0x0003003eu, 0x00004a88u, 0x00004a94u, 0x00050041u, 0x00000007u, 0x00004a95u, 0x00003da7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004a96u, 0x00004a95u, 0x00050084u, 0x00000006u, 0x00004a97u, 0x00004a96u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004a99u, 0x00004a94u, 0x00004a97u, 0x0003003eu, 0x00004a88u, 0x00004a99u, 0x000500c7u, 0x00000006u, 0x00004a9bu, 0x00004a99u, 0x00000767u, 0x0003003eu, 0x00004a88u, 0x00004a9bu, 0x000500c2u, 0x00000006u, 0x00004a9du, 0x00004a9bu, 0x00000194u, 0x0003003eu, 0x00004a89u, 0x00004a9du, 0x0004003du, 0x00000006u, 0x00004a9fu, 0x00004a91u, 0x000500c7u, 0x00000006u, 0x00004aa0u, 0x00004a9fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004aa1u, 0x00004aa0u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004aa3u, 0x00004a9du, 0x00004aa1u, 0x0003003eu, 0x00004a89u, 0x00004aa3u, 0x000500c6u, 0x00000006u, 0x00004aa5u, 0x00004aa3u, 0x0000032au, 0x0003003eu, 0x00004a89u, 0x00004aa5u, 0x00080041u, 0x000001f2u, 0x00004aa8u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004aa5u, 0x0004003du, 0x000001adu, 0x00004aa9u, 0x00004aa8u, 0x00040071u, 0x00000006u, 0x00004aaau, 0x00004aa9u, 0x0003003eu, 0x00004a8au, 0x00004aaau, 0x000500c5u, 0x00000006u, 0x00004aadu, 0x00004aa5u, 0x00000798u, 0x00080041u, 0x000001f2u, 0x00004aaeu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004aadu, 0x0004003du, 0x000001adu, 0x00004aafu, 0x00004aaeu, 0x00040071u, 0x00000006u, 0x00004ab0u, 0x00004aafu, 0x0003003eu, 0x00004a8bu, 0x00004ab0u, 0x000500c2u, 0x00000006u, 0x00004ab2u, 0x00004aaau, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004ab3u, 0x00004ab2u, 0x000500c7u, 0x00000006u, 0x00004ab5u, 0x00004aaau, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004ab6u, 0x00004ab5u, 0x000500c2u, 0x00000006u, 0x00004ab8u, 0x00004ab0u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004ab9u, 0x00004ab8u, 0x000500c7u, 0x00000006u, 0x00004abbu, 0x00004ab0u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004abcu, 0x00004abbu, 0x00070050u, 0x00000009u, 0x00004abdu, 0x00004ab3u, 0x00004ab6u, 0x00004ab9u, 0x00004abcu, 0x0003003eu, 0x00004a8cu, 0x00004abdu, 0x0003003eu, 0x00003d3bu, 0x00004abdu, 0x000200f9u, 0x00003fc7u, 0x000200f8u, 0x00003fc7u, 0x000700f5u, 0x00000009u, 0x00008b41u, 0x000072a9u, 0x00003f60u, 0x00004abdu, 0x00003fc8u, 0x000700f5u, 0x00000009u, 0x00008979u, 0x000072a9u, 0x00003f60u, 0x00004a87u, 0x00003fc8u, 0x000300f7u, 0x00003fd8u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003fd9u, 0x00003fd8u, 0x000200f8u, 0x00003fd9u, 0x00050050u, 0x0000004du, 0x00003fdcu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003fddu, 0x00003fdcu, 0x0003003eu, 0x00005a56u, 0x00003ce0u, 0x0003003eu, 0x00005a57u, 0x00003ce3u, 0x0003003eu, 0x00003da9u, 0x000018feu, 0x0003003eu, 0x00003daau, 0x00003fddu, 0x00050041u, 0x00000007u, 0x00004ac7u, 0x00003daau, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004ac8u, 0x00004ac7u, 0x00050084u, 0x00000006u, 0x00004ac9u, 0x00003ce3u, 0x00004ac8u, 0x00050080u, 0x00000006u, 0x00004acau, 0x00003ce0u, 0x00004ac9u, 0x0003003eu, 0x00004abeu, 0x00004acau, 0x00050041u, 0x00000007u, 0x00004acbu, 0x00003daau, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004accu, 0x00004acbu, 0x00050084u, 0x00000006u, 0x00004acdu, 0x00004accu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004acfu, 0x00004acau, 0x00004acdu, 0x0003003eu, 0x00004abeu, 0x00004acfu, 0x000500c7u, 0x00000006u, 0x00004ad1u, 0x00004acfu, 0x00000767u, 0x0003003eu, 0x00004abeu, 0x00004ad1u, 0x000500c2u, 0x00000006u, 0x00004ad3u, 0x00004ad1u, 0x00000194u, 0x0003003eu, 0x00004abfu, 0x00004ad3u, 0x0004003du, 0x00000006u, 0x00004ad5u, 0x00004ac7u, 0x000500c7u, 0x00000006u, 0x00004ad6u, 0x00004ad5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004ad7u, 0x00004ad6u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004ad9u, 0x00004ad3u, 0x00004ad7u, 0x0003003eu, 0x00004abfu, 0x00004ad9u, 0x000500c6u, 0x00000006u, 0x00004adbu, 0x00004ad9u, 0x0000032au, 0x0003003eu, 0x00004abfu, 0x00004adbu, 0x00080041u, 0x000001f2u, 0x00004adeu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004adbu, 0x0004003du, 0x000001adu, 0x00004adfu, 0x00004adeu, 0x00040071u, 0x00000006u, 0x00004ae0u, 0x00004adfu, 0x0003003eu, 0x00004ac0u, 0x00004ae0u, 0x000500c5u, 0x00000006u, 0x00004ae3u, 0x00004adbu, 0x00000798u, 0x00080041u, 0x000001f2u, 0x00004ae4u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004ae3u, 0x0004003du, 0x000001adu, 0x00004ae5u, 0x00004ae4u, 0x00040071u, 0x00000006u, 0x00004ae6u, 0x00004ae5u, 0x0003003eu, 0x00004ac1u, 0x00004ae6u, 0x000500c2u, 0x00000006u, 0x00004ae8u, 0x00004ae0u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004ae9u, 0x00004ae8u, 0x000500c7u, 0x00000006u, 0x00004aebu, 0x00004ae0u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004aecu, 0x00004aebu, 0x000500c2u, 0x00000006u, 0x00004aeeu, 0x00004ae6u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00004aefu, 0x00004aeeu, 0x000500c7u, 0x00000006u, 0x00004af1u, 0x00004ae6u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00004af2u, 0x00004af1u, 0x00070050u, 0x00000009u, 0x00004af3u, 0x00004ae9u, 0x00004aecu, 0x00004aefu, 0x00004af2u, 0x0003003eu, 0x00004ac2u, 0x00004af3u, 0x0003003eu, 0x00003d43u, 0x00004af3u, 0x000200f9u, 0x00003fd8u, 0x000200f8u, 0x00003fd8u, 0x000700f5u, 0x00000009u, 0x00008c25u, 0x000072a9u, 0x00003fc7u, 0x00004af3u, 0x00003fd9u, 0x000200f9u, 0x00003f5cu, 0x000200f8u, 0x00003f5fu, 0x0004007cu, 0x000000a0u, 0x00003fa2u, 0x0000853eu, 0x0003003eu, 0x00005a3au, 0x00003ce0u, 0x0003003eu, 0x00005a3bu, 0x00003ce3u, 0x0003003eu, 0x00003d94u, 0x000018feu, 0x0003003eu, 0x00003d95u, 0x00003fa2u, 0x00050041u, 0x00000007u, 0x00004929u, 0x00003d95u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000492au, 0x00004929u, 0x00050084u, 0x00000006u, 0x0000492bu, 0x00003ce3u, 0x0000492au, 0x00050080u, 0x00000006u, 0x0000492cu, 0x00003ce0u, 0x0000492bu, 0x0003003eu, 0x00004920u, 0x0000492cu, 0x00050041u, 0x00000007u, 0x0000492du, 0x00003d95u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000492eu, 0x0000492du, 0x00050084u, 0x00000006u, 0x0000492fu, 0x0000492eu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004931u, 0x0000492cu, 0x0000492fu, 0x0003003eu, 0x00004920u, 0x00004931u, 0x000500c7u, 0x00000006u, 0x00004933u, 0x00004931u, 0x000006b4u, 0x0003003eu, 0x00004920u, 0x00004933u, 0x000500c2u, 0x00000006u, 0x00004935u, 0x00004933u, 0x00000194u, 0x0003003eu, 0x00004921u, 0x00004935u, 0x0004003du, 0x00000006u, 0x00004937u, 0x00004929u, 0x000500c7u, 0x00000006u, 0x00004938u, 0x00004937u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004939u, 0x00004938u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000493bu, 0x00004935u, 0x00004939u, 0x0003003eu, 0x00004921u, 0x0000493bu, 0x000500c6u, 0x00000006u, 0x0000493du, 0x0000493bu, 0x0000032au, 0x0003003eu, 0x00004921u, 0x0000493du, 0x00080041u, 0x000001f2u, 0x00004940u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000493du, 0x0004003du, 0x000001adu, 0x00004941u, 0x00004940u, 0x00040071u, 0x00000006u, 0x00004942u, 0x00004941u, 0x0003003eu, 0x00004922u, 0x00004942u, 0x0003003eu, 0x00004923u, 0x00004942u, 0x00060050u, 0x000002b6u, 0x00004949u, 0x00004942u, 0x00004942u, 0x00004942u, 0x000500c2u, 0x000002b6u, 0x0000494au, 0x00004949u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x0000494cu, 0x0000494au, 0x0000b1c0u, 0x0003003eu, 0x00004945u, 0x0000494cu, 0x000500c4u, 0x000002b6u, 0x0000494fu, 0x0000494cu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004952u, 0x0000494cu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004953u, 0x0000494fu, 0x00004952u, 0x0003003eu, 0x00004945u, 0x00004953u, 0x000500c7u, 0x00000006u, 0x00004955u, 0x00004942u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004956u, 0x00004955u, 0x00000689u, 0x0003003eu, 0x00004946u, 0x00004956u, 0x0004007cu, 0x00000052u, 0x00004958u, 0x00004953u, 0x0004007cu, 0x00000008u, 0x0000495au, 0x00004956u, 0x00050051u, 0x00000008u, 0x0000495bu, 0x00004958u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000495cu, 0x00004958u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000495du, 0x00004958u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000495eu, 0x0000495bu, 0x0000495cu, 0x0000495du, 0x0000495au, 0x0003003eu, 0x00004947u, 0x0000495eu, 0x0003003eu, 0x00004924u, 0x0000495eu, 0x0003003eu, 0x00003d2bu, 0x0000495eu, 0x000300f7u, 0x00003fa7u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003fa8u, 0x00003fa7u, 0x000200f8u, 0x00003fa8u, 0x00050050u, 0x0000004du, 0x00003fabu, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003facu, 0x00003fabu, 0x0003003eu, 0x00005a3eu, 0x00003ce0u, 0x0003003eu, 0x00005a3fu, 0x00003ce3u, 0x0003003eu, 0x00003d97u, 0x000018feu, 0x0003003eu, 0x00003d98u, 0x00003facu, 0x00050041u, 0x00000007u, 0x00004968u, 0x00003d98u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004969u, 0x00004968u, 0x00050084u, 0x00000006u, 0x0000496au, 0x00003ce3u, 0x00004969u, 0x00050080u, 0x00000006u, 0x0000496bu, 0x00003ce0u, 0x0000496au, 0x0003003eu, 0x0000495fu, 0x0000496bu, 0x00050041u, 0x00000007u, 0x0000496cu, 0x00003d98u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000496du, 0x0000496cu, 0x00050084u, 0x00000006u, 0x0000496eu, 0x0000496du, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00004970u, 0x0000496bu, 0x0000496eu, 0x0003003eu, 0x0000495fu, 0x00004970u, 0x000500c7u, 0x00000006u, 0x00004972u, 0x00004970u, 0x000006b4u, 0x0003003eu, 0x0000495fu, 0x00004972u, 0x000500c2u, 0x00000006u, 0x00004974u, 0x00004972u, 0x00000194u, 0x0003003eu, 0x00004960u, 0x00004974u, 0x0004003du, 0x00000006u, 0x00004976u, 0x00004968u, 0x000500c7u, 0x00000006u, 0x00004977u, 0x00004976u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004978u, 0x00004977u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000497au, 0x00004974u, 0x00004978u, 0x0003003eu, 0x00004960u, 0x0000497au, 0x000500c6u, 0x00000006u, 0x0000497cu, 0x0000497au, 0x0000032au, 0x0003003eu, 0x00004960u, 0x0000497cu, 0x00080041u, 0x000001f2u, 0x0000497fu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000497cu, 0x0004003du, 0x000001adu, 0x00004980u, 0x0000497fu, 0x00040071u, 0x00000006u, 0x00004981u, 0x00004980u, 0x0003003eu, 0x00004961u, 0x00004981u, 0x0003003eu, 0x00004962u, 0x00004981u, 0x00060050u, 0x000002b6u, 0x00004988u, 0x00004981u, 0x00004981u, 0x00004981u, 0x000500c2u, 0x000002b6u, 0x00004989u, 0x00004988u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x0000498bu, 0x00004989u, 0x0000b1c0u, 0x0003003eu, 0x00004984u, 0x0000498bu, 0x000500c4u, 0x000002b6u, 0x0000498eu, 0x0000498bu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004991u, 0x0000498bu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004992u, 0x0000498eu, 0x00004991u, 0x0003003eu, 0x00004984u, 0x00004992u, 0x000500c7u, 0x00000006u, 0x00004994u, 0x00004981u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004995u, 0x00004994u, 0x00000689u, 0x0003003eu, 0x00004985u, 0x00004995u, 0x0004007cu, 0x00000052u, 0x00004997u, 0x00004992u, 0x0004007cu, 0x00000008u, 0x00004999u, 0x00004995u, 0x00050051u, 0x00000008u, 0x0000499au, 0x00004997u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000499bu, 0x00004997u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000499cu, 0x00004997u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000499du, 0x0000499au, 0x0000499bu, 0x0000499cu, 0x00004999u, 0x0003003eu, 0x00004986u, 0x0000499du, 0x0003003eu, 0x00004963u, 0x0000499du, 0x0003003eu, 0x00003d33u, 0x0000499du, 0x00050050u, 0x0000004du, 0x00003fb2u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003fb3u, 0x00003fb2u, 0x0003003eu, 0x00005a42u, 0x00003ce0u, 0x0003003eu, 0x00005a43u, 0x00003ce3u, 0x0003003eu, 0x00003d9au, 0x000018feu, 0x0003003eu, 0x00003d9bu, 0x00003fb3u, 0x00050041u, 0x00000007u, 0x000049a7u, 0x00003d9bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000049a8u, 0x000049a7u, 0x00050084u, 0x00000006u, 0x000049a9u, 0x00003ce3u, 0x000049a8u, 0x00050080u, 0x00000006u, 0x000049aau, 0x00003ce0u, 0x000049a9u, 0x0003003eu, 0x0000499eu, 0x000049aau, 0x00050041u, 0x00000007u, 0x000049abu, 0x00003d9bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000049acu, 0x000049abu, 0x00050084u, 0x00000006u, 0x000049adu, 0x000049acu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000049afu, 0x000049aau, 0x000049adu, 0x0003003eu, 0x0000499eu, 0x000049afu, 0x000500c7u, 0x00000006u, 0x000049b1u, 0x000049afu, 0x000006b4u, 0x0003003eu, 0x0000499eu, 0x000049b1u, 0x000500c2u, 0x00000006u, 0x000049b3u, 0x000049b1u, 0x00000194u, 0x0003003eu, 0x0000499fu, 0x000049b3u, 0x0004003du, 0x00000006u, 0x000049b5u, 0x000049a7u, 0x000500c7u, 0x00000006u, 0x000049b6u, 0x000049b5u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000049b7u, 0x000049b6u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000049b9u, 0x000049b3u, 0x000049b7u, 0x0003003eu, 0x0000499fu, 0x000049b9u, 0x000500c6u, 0x00000006u, 0x000049bbu, 0x000049b9u, 0x0000032au, 0x0003003eu, 0x0000499fu, 0x000049bbu, 0x00080041u, 0x000001f2u, 0x000049beu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000049bbu, 0x0004003du, 0x000001adu, 0x000049bfu, 0x000049beu, 0x00040071u, 0x00000006u, 0x000049c0u, 0x000049bfu, 0x0003003eu, 0x000049a0u, 0x000049c0u, 0x0003003eu, 0x000049a1u, 0x000049c0u, 0x00060050u, 0x000002b6u, 0x000049c7u, 0x000049c0u, 0x000049c0u, 0x000049c0u, 0x000500c2u, 0x000002b6u, 0x000049c8u, 0x000049c7u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000049cau, 0x000049c8u, 0x0000b1c0u, 0x0003003eu, 0x000049c3u, 0x000049cau, 0x000500c4u, 0x000002b6u, 0x000049cdu, 0x000049cau, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000049d0u, 0x000049cau, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000049d1u, 0x000049cdu, 0x000049d0u, 0x0003003eu, 0x000049c3u, 0x000049d1u, 0x000500c7u, 0x00000006u, 0x000049d3u, 0x000049c0u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000049d4u, 0x000049d3u, 0x00000689u, 0x0003003eu, 0x000049c4u, 0x000049d4u, 0x0004007cu, 0x00000052u, 0x000049d6u, 0x000049d1u, 0x0004007cu, 0x00000008u, 0x000049d8u, 0x000049d4u, 0x00050051u, 0x00000008u, 0x000049d9u, 0x000049d6u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000049dau, 0x000049d6u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000049dbu, 0x000049d6u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000049dcu, 0x000049d9u, 0x000049dau, 0x000049dbu, 0x000049d8u, 0x0003003eu, 0x000049c5u, 0x000049dcu, 0x0003003eu, 0x000049a2u, 0x000049dcu, 0x0003003eu, 0x00003d3bu, 0x000049dcu, 0x000200f9u, 0x00003fa7u, 0x000200f8u, 0x00003fa7u, 0x000700f5u, 0x00000009u, 0x00008b3fu, 0x000072a9u, 0x00003f5fu, 0x000049dcu, 0x00003fa8u, 0x000700f5u, 0x00000009u, 0x00008977u, 0x000072a9u, 0x00003f5fu, 0x0000499du, 0x00003fa8u, 0x000300f7u, 0x00003fb8u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003fb9u, 0x00003fb8u, 0x000200f8u, 0x00003fb9u, 0x00050050u, 0x0000004du, 0x00003fbcu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003fbdu, 0x00003fbcu, 0x0003003eu, 0x00005a46u, 0x00003ce0u, 0x0003003eu, 0x00005a47u, 0x00003ce3u, 0x0003003eu, 0x00003d9du, 0x000018feu, 0x0003003eu, 0x00003d9eu, 0x00003fbdu, 0x00050041u, 0x00000007u, 0x000049e6u, 0x00003d9eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000049e7u, 0x000049e6u, 0x00050084u, 0x00000006u, 0x000049e8u, 0x00003ce3u, 0x000049e7u, 0x00050080u, 0x00000006u, 0x000049e9u, 0x00003ce0u, 0x000049e8u, 0x0003003eu, 0x000049ddu, 0x000049e9u, 0x00050041u, 0x00000007u, 0x000049eau, 0x00003d9eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000049ebu, 0x000049eau, 0x00050084u, 0x00000006u, 0x000049ecu, 0x000049ebu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000049eeu, 0x000049e9u, 0x000049ecu, 0x0003003eu, 0x000049ddu, 0x000049eeu, 0x000500c7u, 0x00000006u, 0x000049f0u, 0x000049eeu, 0x000006b4u, 0x0003003eu, 0x000049ddu, 0x000049f0u, 0x000500c2u, 0x00000006u, 0x000049f2u, 0x000049f0u, 0x00000194u, 0x0003003eu, 0x000049deu, 0x000049f2u, 0x0004003du, 0x00000006u, 0x000049f4u, 0x000049e6u, 0x000500c7u, 0x00000006u, 0x000049f5u, 0x000049f4u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000049f6u, 0x000049f5u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000049f8u, 0x000049f2u, 0x000049f6u, 0x0003003eu, 0x000049deu, 0x000049f8u, 0x000500c6u, 0x00000006u, 0x000049fau, 0x000049f8u, 0x0000032au, 0x0003003eu, 0x000049deu, 0x000049fau, 0x00080041u, 0x000001f2u, 0x000049fdu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000049fau, 0x0004003du, 0x000001adu, 0x000049feu, 0x000049fdu, 0x00040071u, 0x00000006u, 0x000049ffu, 0x000049feu, 0x0003003eu, 0x000049dfu, 0x000049ffu, 0x0003003eu, 0x000049e0u, 0x000049ffu, 0x00060050u, 0x000002b6u, 0x00004a06u, 0x000049ffu, 0x000049ffu, 0x000049ffu, 0x000500c2u, 0x000002b6u, 0x00004a07u, 0x00004a06u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00004a09u, 0x00004a07u, 0x0000b1c0u, 0x0003003eu, 0x00004a02u, 0x00004a09u, 0x000500c4u, 0x000002b6u, 0x00004a0cu, 0x00004a09u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004a0fu, 0x00004a09u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004a10u, 0x00004a0cu, 0x00004a0fu, 0x0003003eu, 0x00004a02u, 0x00004a10u, 0x000500c7u, 0x00000006u, 0x00004a12u, 0x000049ffu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004a13u, 0x00004a12u, 0x00000689u, 0x0003003eu, 0x00004a03u, 0x00004a13u, 0x0004007cu, 0x00000052u, 0x00004a15u, 0x00004a10u, 0x0004007cu, 0x00000008u, 0x00004a17u, 0x00004a13u, 0x00050051u, 0x00000008u, 0x00004a18u, 0x00004a15u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004a19u, 0x00004a15u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004a1au, 0x00004a15u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004a1bu, 0x00004a18u, 0x00004a19u, 0x00004a1au, 0x00004a17u, 0x0003003eu, 0x00004a04u, 0x00004a1bu, 0x0003003eu, 0x000049e1u, 0x00004a1bu, 0x0003003eu, 0x00003d43u, 0x00004a1bu, 0x000200f9u, 0x00003fb8u, 0x000200f8u, 0x00003fb8u, 0x000700f5u, 0x00000009u, 0x00008c23u, 0x000072a9u, 0x00003fa7u, 0x00004a1bu, 0x00003fb9u, 0x000200f9u, 0x00003f5cu, 0x000200f8u, 0x00003f5eu, 0x0004007cu, 0x000000a0u, 0x00003f82u, 0x0000853eu, 0x0003003eu, 0x00005a2au, 0x00003ce0u, 0x0003003eu, 0x00005a2bu, 0x00003ce3u, 0x0003003eu, 0x00003d88u, 0x000018feu, 0x0003003eu, 0x00003d89u, 0x00003f82u, 0x00050041u, 0x00000007u, 0x0000489cu, 0x00003d89u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000489du, 0x0000489cu, 0x00050084u, 0x00000006u, 0x0000489eu, 0x00003ce3u, 0x0000489du, 0x00050080u, 0x00000006u, 0x0000489fu, 0x00003ce0u, 0x0000489eu, 0x0003003eu, 0x00004894u, 0x0000489fu, 0x00050041u, 0x00000007u, 0x000048a0u, 0x00003d89u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000048a1u, 0x000048a0u, 0x00050080u, 0x00000006u, 0x000048a3u, 0x0000489fu, 0x000048a1u, 0x0003003eu, 0x00004894u, 0x000048a3u, 0x000500c7u, 0x00000006u, 0x000048a5u, 0x000048a3u, 0x000006b4u, 0x0003003eu, 0x00004894u, 0x000048a5u, 0x0003003eu, 0x00004895u, 0x000048a5u, 0x0004003du, 0x00000006u, 0x000048a8u, 0x0000489cu, 0x000500c7u, 0x00000006u, 0x000048a9u, 0x000048a8u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000048aau, 0x000048a9u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000048acu, 0x000048a5u, 0x000048aau, 0x0003003eu, 0x00004895u, 0x000048acu, 0x000500c6u, 0x00000006u, 0x000048aeu, 0x000048acu, 0x00000331u, 0x0003003eu, 0x00004895u, 0x000048aeu, 0x00080041u, 0x000001f9u, 0x000048b1u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000048aeu, 0x0004003du, 0x000001abu, 0x000048b2u, 0x000048b1u, 0x00040071u, 0x00000006u, 0x000048b3u, 0x000048b2u, 0x0003003eu, 0x00004896u, 0x000048b3u, 0x0004007cu, 0x00000008u, 0x000048b5u, 0x000048b3u, 0x00070050u, 0x00000009u, 0x000048b6u, 0x000048b5u, 0x000048b5u, 0x000048b5u, 0x000048b5u, 0x0003003eu, 0x00004897u, 0x000048b6u, 0x0003003eu, 0x00003d2bu, 0x000048b6u, 0x000300f7u, 0x00003f87u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003f88u, 0x00003f87u, 0x000200f8u, 0x00003f88u, 0x00050050u, 0x0000004du, 0x00003f8bu, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003f8cu, 0x00003f8bu, 0x0003003eu, 0x00005a2eu, 0x00003ce0u, 0x0003003eu, 0x00005a2fu, 0x00003ce3u, 0x0003003eu, 0x00003d8bu, 0x000018feu, 0x0003003eu, 0x00003d8cu, 0x00003f8cu, 0x00050041u, 0x00000007u, 0x000048bfu, 0x00003d8cu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000048c0u, 0x000048bfu, 0x00050084u, 0x00000006u, 0x000048c1u, 0x00003ce3u, 0x000048c0u, 0x00050080u, 0x00000006u, 0x000048c2u, 0x00003ce0u, 0x000048c1u, 0x0003003eu, 0x000048b7u, 0x000048c2u, 0x00050041u, 0x00000007u, 0x000048c3u, 0x00003d8cu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000048c4u, 0x000048c3u, 0x00050080u, 0x00000006u, 0x000048c6u, 0x000048c2u, 0x000048c4u, 0x0003003eu, 0x000048b7u, 0x000048c6u, 0x000500c7u, 0x00000006u, 0x000048c8u, 0x000048c6u, 0x000006b4u, 0x0003003eu, 0x000048b7u, 0x000048c8u, 0x0003003eu, 0x000048b8u, 0x000048c8u, 0x0004003du, 0x00000006u, 0x000048cbu, 0x000048bfu, 0x000500c7u, 0x00000006u, 0x000048ccu, 0x000048cbu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000048cdu, 0x000048ccu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000048cfu, 0x000048c8u, 0x000048cdu, 0x0003003eu, 0x000048b8u, 0x000048cfu, 0x000500c6u, 0x00000006u, 0x000048d1u, 0x000048cfu, 0x00000331u, 0x0003003eu, 0x000048b8u, 0x000048d1u, 0x00080041u, 0x000001f9u, 0x000048d4u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000048d1u, 0x0004003du, 0x000001abu, 0x000048d5u, 0x000048d4u, 0x00040071u, 0x00000006u, 0x000048d6u, 0x000048d5u, 0x0003003eu, 0x000048b9u, 0x000048d6u, 0x0004007cu, 0x00000008u, 0x000048d8u, 0x000048d6u, 0x00070050u, 0x00000009u, 0x000048d9u, 0x000048d8u, 0x000048d8u, 0x000048d8u, 0x000048d8u, 0x0003003eu, 0x000048bau, 0x000048d9u, 0x0003003eu, 0x00003d33u, 0x000048d9u, 0x00050050u, 0x0000004du, 0x00003f92u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f93u, 0x00003f92u, 0x0003003eu, 0x00005a32u, 0x00003ce0u, 0x0003003eu, 0x00005a33u, 0x00003ce3u, 0x0003003eu, 0x00003d8eu, 0x000018feu, 0x0003003eu, 0x00003d8fu, 0x00003f93u, 0x00050041u, 0x00000007u, 0x000048e2u, 0x00003d8fu, 0x0000032au, 0x0004003du, 0x00000006u, 0x000048e3u, 0x000048e2u, 0x00050084u, 0x00000006u, 0x000048e4u, 0x00003ce3u, 0x000048e3u, 0x00050080u, 0x00000006u, 0x000048e5u, 0x00003ce0u, 0x000048e4u, 0x0003003eu, 0x000048dau, 0x000048e5u, 0x00050041u, 0x00000007u, 0x000048e6u, 0x00003d8fu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000048e7u, 0x000048e6u, 0x00050080u, 0x00000006u, 0x000048e9u, 0x000048e5u, 0x000048e7u, 0x0003003eu, 0x000048dau, 0x000048e9u, 0x000500c7u, 0x00000006u, 0x000048ebu, 0x000048e9u, 0x000006b4u, 0x0003003eu, 0x000048dau, 0x000048ebu, 0x0003003eu, 0x000048dbu, 0x000048ebu, 0x0004003du, 0x00000006u, 0x000048eeu, 0x000048e2u, 0x000500c7u, 0x00000006u, 0x000048efu, 0x000048eeu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000048f0u, 0x000048efu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000048f2u, 0x000048ebu, 0x000048f0u, 0x0003003eu, 0x000048dbu, 0x000048f2u, 0x000500c6u, 0x00000006u, 0x000048f4u, 0x000048f2u, 0x00000331u, 0x0003003eu, 0x000048dbu, 0x000048f4u, 0x00080041u, 0x000001f9u, 0x000048f7u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000048f4u, 0x0004003du, 0x000001abu, 0x000048f8u, 0x000048f7u, 0x00040071u, 0x00000006u, 0x000048f9u, 0x000048f8u, 0x0003003eu, 0x000048dcu, 0x000048f9u, 0x0004007cu, 0x00000008u, 0x000048fbu, 0x000048f9u, 0x00070050u, 0x00000009u, 0x000048fcu, 0x000048fbu, 0x000048fbu, 0x000048fbu, 0x000048fbu, 0x0003003eu, 0x000048ddu, 0x000048fcu, 0x0003003eu, 0x00003d3bu, 0x000048fcu, 0x000200f9u, 0x00003f87u, 0x000200f8u, 0x00003f87u, 0x000700f5u, 0x00000009u, 0x00008b3du, 0x000072a9u, 0x00003f5eu, 0x000048fcu, 0x00003f88u, 0x000700f5u, 0x00000009u, 0x00008975u, 0x000072a9u, 0x00003f5eu, 0x000048d9u, 0x00003f88u, 0x000300f7u, 0x00003f98u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003f99u, 0x00003f98u, 0x000200f8u, 0x00003f99u, 0x00050050u, 0x0000004du, 0x00003f9cu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f9du, 0x00003f9cu, 0x0003003eu, 0x00005a36u, 0x00003ce0u, 0x0003003eu, 0x00005a37u, 0x00003ce3u, 0x0003003eu, 0x00003d91u, 0x000018feu, 0x0003003eu, 0x00003d92u, 0x00003f9du, 0x00050041u, 0x00000007u, 0x00004905u, 0x00003d92u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004906u, 0x00004905u, 0x00050084u, 0x00000006u, 0x00004907u, 0x00003ce3u, 0x00004906u, 0x00050080u, 0x00000006u, 0x00004908u, 0x00003ce0u, 0x00004907u, 0x0003003eu, 0x000048fdu, 0x00004908u, 0x00050041u, 0x00000007u, 0x00004909u, 0x00003d92u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000490au, 0x00004909u, 0x00050080u, 0x00000006u, 0x0000490cu, 0x00004908u, 0x0000490au, 0x0003003eu, 0x000048fdu, 0x0000490cu, 0x000500c7u, 0x00000006u, 0x0000490eu, 0x0000490cu, 0x000006b4u, 0x0003003eu, 0x000048fdu, 0x0000490eu, 0x0003003eu, 0x000048feu, 0x0000490eu, 0x0004003du, 0x00000006u, 0x00004911u, 0x00004905u, 0x000500c7u, 0x00000006u, 0x00004912u, 0x00004911u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004913u, 0x00004912u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004915u, 0x0000490eu, 0x00004913u, 0x0003003eu, 0x000048feu, 0x00004915u, 0x000500c6u, 0x00000006u, 0x00004917u, 0x00004915u, 0x00000331u, 0x0003003eu, 0x000048feu, 0x00004917u, 0x00080041u, 0x000001f9u, 0x0000491au, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004917u, 0x0004003du, 0x000001abu, 0x0000491bu, 0x0000491au, 0x00040071u, 0x00000006u, 0x0000491cu, 0x0000491bu, 0x0003003eu, 0x000048ffu, 0x0000491cu, 0x0004007cu, 0x00000008u, 0x0000491eu, 0x0000491cu, 0x00070050u, 0x00000009u, 0x0000491fu, 0x0000491eu, 0x0000491eu, 0x0000491eu, 0x0000491eu, 0x0003003eu, 0x00004900u, 0x0000491fu, 0x0003003eu, 0x00003d43u, 0x0000491fu, 0x000200f9u, 0x00003f98u, 0x000200f8u, 0x00003f98u, 0x000700f5u, 0x00000009u, 0x00008c21u, 0x000072a9u, 0x00003f87u, 0x0000491fu, 0x00003f99u, 0x000200f9u, 0x00003f5cu, 0x000200f8u, 0x00003f5du, 0x0004007cu, 0x000000a0u, 0x00003f62u, 0x0000853eu, 0x0003003eu, 0x00005a1au, 0x00003ce0u, 0x0003003eu, 0x00005a1bu, 0x00003ce3u, 0x0003003eu, 0x00003d7cu, 0x000018feu, 0x0003003eu, 0x00003d7du, 0x00003f62u, 0x00050041u, 0x00000007u, 0x000047d5u, 0x00003d7du, 0x0000032au, 0x0004003du, 0x00000006u, 0x000047d6u, 0x000047d5u, 0x00050084u, 0x00000006u, 0x000047d7u, 0x00003ce3u, 0x000047d6u, 0x00050080u, 0x00000006u, 0x000047d8u, 0x00003ce0u, 0x000047d7u, 0x0003003eu, 0x000047ccu, 0x000047d8u, 0x00050041u, 0x00000007u, 0x000047d9u, 0x00003d7du, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000047dau, 0x000047d9u, 0x000500c2u, 0x00000006u, 0x000047dbu, 0x000047dau, 0x00000194u, 0x00050080u, 0x00000006u, 0x000047ddu, 0x000047d8u, 0x000047dbu, 0x0003003eu, 0x000047ccu, 0x000047ddu, 0x000500c7u, 0x00000006u, 0x000047dfu, 0x000047ddu, 0x000006b4u, 0x0003003eu, 0x000047ccu, 0x000047dfu, 0x0004003du, 0x00000006u, 0x000047e1u, 0x000047d9u, 0x000400c8u, 0x00000006u, 0x000047e2u, 0x000047e1u, 0x000500c7u, 0x00000006u, 0x000047e3u, 0x000047e2u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000047e4u, 0x000047e3u, 0x000006bcu, 0x0003003eu, 0x000047cdu, 0x000047e4u, 0x0003003eu, 0x000047ceu, 0x000047dfu, 0x0004003du, 0x00000006u, 0x000047e7u, 0x000047d5u, 0x000500c7u, 0x00000006u, 0x000047e8u, 0x000047e7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000047e9u, 0x000047e8u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000047ebu, 0x000047dfu, 0x000047e9u, 0x0003003eu, 0x000047ceu, 0x000047ebu, 0x000500c6u, 0x00000006u, 0x000047edu, 0x000047ebu, 0x00000331u, 0x0003003eu, 0x000047ceu, 0x000047edu, 0x00080041u, 0x000001f9u, 0x000047f0u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000047edu, 0x0004003du, 0x000001abu, 0x000047f1u, 0x000047f0u, 0x00040071u, 0x00000006u, 0x000047f2u, 0x000047f1u, 0x0003003eu, 0x000047cfu, 0x000047f2u, 0x000500c2u, 0x00000006u, 0x000047f5u, 0x000047f2u, 0x000047e4u, 0x000500c7u, 0x00000006u, 0x000047f6u, 0x000047f5u, 0x000006d8u, 0x0003003eu, 0x000047cfu, 0x000047f6u, 0x000500c4u, 0x00000006u, 0x000047f8u, 0x000047f6u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000047fau, 0x000047f6u, 0x000047f8u, 0x0003003eu, 0x000047cfu, 0x000047fau, 0x0004007cu, 0x00000008u, 0x000047fcu, 0x000047fau, 0x00070050u, 0x00000009u, 0x000047fdu, 0x000047fcu, 0x000047fcu, 0x000047fcu, 0x000047fcu, 0x0003003eu, 0x000047d0u, 0x000047fdu, 0x0003003eu, 0x00003d2bu, 0x000047fdu, 0x000300f7u, 0x00003f67u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003f68u, 0x00003f67u, 0x000200f8u, 0x00003f68u, 0x00050050u, 0x0000004du, 0x00003f6bu, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003f6cu, 0x00003f6bu, 0x0003003eu, 0x00005a1eu, 0x00003ce0u, 0x0003003eu, 0x00005a1fu, 0x00003ce3u, 0x0003003eu, 0x00003d7fu, 0x000018feu, 0x0003003eu, 0x00003d80u, 0x00003f6cu, 0x00050041u, 0x00000007u, 0x00004807u, 0x00003d80u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004808u, 0x00004807u, 0x00050084u, 0x00000006u, 0x00004809u, 0x00003ce3u, 0x00004808u, 0x00050080u, 0x00000006u, 0x0000480au, 0x00003ce0u, 0x00004809u, 0x0003003eu, 0x000047feu, 0x0000480au, 0x00050041u, 0x00000007u, 0x0000480bu, 0x00003d80u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000480cu, 0x0000480bu, 0x000500c2u, 0x00000006u, 0x0000480du, 0x0000480cu, 0x00000194u, 0x00050080u, 0x00000006u, 0x0000480fu, 0x0000480au, 0x0000480du, 0x0003003eu, 0x000047feu, 0x0000480fu, 0x000500c7u, 0x00000006u, 0x00004811u, 0x0000480fu, 0x000006b4u, 0x0003003eu, 0x000047feu, 0x00004811u, 0x0004003du, 0x00000006u, 0x00004813u, 0x0000480bu, 0x000400c8u, 0x00000006u, 0x00004814u, 0x00004813u, 0x000500c7u, 0x00000006u, 0x00004815u, 0x00004814u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004816u, 0x00004815u, 0x000006bcu, 0x0003003eu, 0x000047ffu, 0x00004816u, 0x0003003eu, 0x00004800u, 0x00004811u, 0x0004003du, 0x00000006u, 0x00004819u, 0x00004807u, 0x000500c7u, 0x00000006u, 0x0000481au, 0x00004819u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000481bu, 0x0000481au, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000481du, 0x00004811u, 0x0000481bu, 0x0003003eu, 0x00004800u, 0x0000481du, 0x000500c6u, 0x00000006u, 0x0000481fu, 0x0000481du, 0x00000331u, 0x0003003eu, 0x00004800u, 0x0000481fu, 0x00080041u, 0x000001f9u, 0x00004822u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000481fu, 0x0004003du, 0x000001abu, 0x00004823u, 0x00004822u, 0x00040071u, 0x00000006u, 0x00004824u, 0x00004823u, 0x0003003eu, 0x00004801u, 0x00004824u, 0x000500c2u, 0x00000006u, 0x00004827u, 0x00004824u, 0x00004816u, 0x000500c7u, 0x00000006u, 0x00004828u, 0x00004827u, 0x000006d8u, 0x0003003eu, 0x00004801u, 0x00004828u, 0x000500c4u, 0x00000006u, 0x0000482au, 0x00004828u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x0000482cu, 0x00004828u, 0x0000482au, 0x0003003eu, 0x00004801u, 0x0000482cu, 0x0004007cu, 0x00000008u, 0x0000482eu, 0x0000482cu, 0x00070050u, 0x00000009u, 0x0000482fu, 0x0000482eu, 0x0000482eu, 0x0000482eu, 0x0000482eu, 0x0003003eu, 0x00004802u, 0x0000482fu, 0x0003003eu, 0x00003d33u, 0x0000482fu, 0x00050050u, 0x0000004du, 0x00003f72u, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f73u, 0x00003f72u, 0x0003003eu, 0x00005a22u, 0x00003ce0u, 0x0003003eu, 0x00005a23u, 0x00003ce3u, 0x0003003eu, 0x00003d82u, 0x000018feu, 0x0003003eu, 0x00003d83u, 0x00003f73u, 0x00050041u, 0x00000007u, 0x00004839u, 0x00003d83u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000483au, 0x00004839u, 0x00050084u, 0x00000006u, 0x0000483bu, 0x00003ce3u, 0x0000483au, 0x00050080u, 0x00000006u, 0x0000483cu, 0x00003ce0u, 0x0000483bu, 0x0003003eu, 0x00004830u, 0x0000483cu, 0x00050041u, 0x00000007u, 0x0000483du, 0x00003d83u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000483eu, 0x0000483du, 0x000500c2u, 0x00000006u, 0x0000483fu, 0x0000483eu, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004841u, 0x0000483cu, 0x0000483fu, 0x0003003eu, 0x00004830u, 0x00004841u, 0x000500c7u, 0x00000006u, 0x00004843u, 0x00004841u, 0x000006b4u, 0x0003003eu, 0x00004830u, 0x00004843u, 0x0004003du, 0x00000006u, 0x00004845u, 0x0000483du, 0x000400c8u, 0x00000006u, 0x00004846u, 0x00004845u, 0x000500c7u, 0x00000006u, 0x00004847u, 0x00004846u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004848u, 0x00004847u, 0x000006bcu, 0x0003003eu, 0x00004831u, 0x00004848u, 0x0003003eu, 0x00004832u, 0x00004843u, 0x0004003du, 0x00000006u, 0x0000484bu, 0x00004839u, 0x000500c7u, 0x00000006u, 0x0000484cu, 0x0000484bu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000484du, 0x0000484cu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000484fu, 0x00004843u, 0x0000484du, 0x0003003eu, 0x00004832u, 0x0000484fu, 0x000500c6u, 0x00000006u, 0x00004851u, 0x0000484fu, 0x00000331u, 0x0003003eu, 0x00004832u, 0x00004851u, 0x00080041u, 0x000001f9u, 0x00004854u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004851u, 0x0004003du, 0x000001abu, 0x00004855u, 0x00004854u, 0x00040071u, 0x00000006u, 0x00004856u, 0x00004855u, 0x0003003eu, 0x00004833u, 0x00004856u, 0x000500c2u, 0x00000006u, 0x00004859u, 0x00004856u, 0x00004848u, 0x000500c7u, 0x00000006u, 0x0000485au, 0x00004859u, 0x000006d8u, 0x0003003eu, 0x00004833u, 0x0000485au, 0x000500c4u, 0x00000006u, 0x0000485cu, 0x0000485au, 0x0000019du, 0x000500c5u, 0x00000006u, 0x0000485eu, 0x0000485au, 0x0000485cu, 0x0003003eu, 0x00004833u, 0x0000485eu, 0x0004007cu, 0x00000008u, 0x00004860u, 0x0000485eu, 0x00070050u, 0x00000009u, 0x00004861u, 0x00004860u, 0x00004860u, 0x00004860u, 0x00004860u, 0x0003003eu, 0x00004834u, 0x00004861u, 0x0003003eu, 0x00003d3bu, 0x00004861u, 0x000200f9u, 0x00003f67u, 0x000200f8u, 0x00003f67u, 0x000700f5u, 0x00000009u, 0x00008b3bu, 0x000072a9u, 0x00003f5du, 0x00004861u, 0x00003f68u, 0x000700f5u, 0x00000009u, 0x00008973u, 0x000072a9u, 0x00003f5du, 0x0000482fu, 0x00003f68u, 0x000300f7u, 0x00003f78u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003f79u, 0x00003f78u, 0x000200f8u, 0x00003f79u, 0x00050050u, 0x0000004du, 0x00003f7cu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f7du, 0x00003f7cu, 0x0003003eu, 0x00005a26u, 0x00003ce0u, 0x0003003eu, 0x00005a27u, 0x00003ce3u, 0x0003003eu, 0x00003d85u, 0x000018feu, 0x0003003eu, 0x00003d86u, 0x00003f7du, 0x00050041u, 0x00000007u, 0x0000486bu, 0x00003d86u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000486cu, 0x0000486bu, 0x00050084u, 0x00000006u, 0x0000486du, 0x00003ce3u, 0x0000486cu, 0x00050080u, 0x00000006u, 0x0000486eu, 0x00003ce0u, 0x0000486du, 0x0003003eu, 0x00004862u, 0x0000486eu, 0x00050041u, 0x00000007u, 0x0000486fu, 0x00003d86u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004870u, 0x0000486fu, 0x000500c2u, 0x00000006u, 0x00004871u, 0x00004870u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004873u, 0x0000486eu, 0x00004871u, 0x0003003eu, 0x00004862u, 0x00004873u, 0x000500c7u, 0x00000006u, 0x00004875u, 0x00004873u, 0x000006b4u, 0x0003003eu, 0x00004862u, 0x00004875u, 0x0004003du, 0x00000006u, 0x00004877u, 0x0000486fu, 0x000400c8u, 0x00000006u, 0x00004878u, 0x00004877u, 0x000500c7u, 0x00000006u, 0x00004879u, 0x00004878u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000487au, 0x00004879u, 0x000006bcu, 0x0003003eu, 0x00004863u, 0x0000487au, 0x0003003eu, 0x00004864u, 0x00004875u, 0x0004003du, 0x00000006u, 0x0000487du, 0x0000486bu, 0x000500c7u, 0x00000006u, 0x0000487eu, 0x0000487du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000487fu, 0x0000487eu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004881u, 0x00004875u, 0x0000487fu, 0x0003003eu, 0x00004864u, 0x00004881u, 0x000500c6u, 0x00000006u, 0x00004883u, 0x00004881u, 0x00000331u, 0x0003003eu, 0x00004864u, 0x00004883u, 0x00080041u, 0x000001f9u, 0x00004886u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004883u, 0x0004003du, 0x000001abu, 0x00004887u, 0x00004886u, 0x00040071u, 0x00000006u, 0x00004888u, 0x00004887u, 0x0003003eu, 0x00004865u, 0x00004888u, 0x000500c2u, 0x00000006u, 0x0000488bu, 0x00004888u, 0x0000487au, 0x000500c7u, 0x00000006u, 0x0000488cu, 0x0000488bu, 0x000006d8u, 0x0003003eu, 0x00004865u, 0x0000488cu, 0x000500c4u, 0x00000006u, 0x0000488eu, 0x0000488cu, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00004890u, 0x0000488cu, 0x0000488eu, 0x0003003eu, 0x00004865u, 0x00004890u, 0x0004007cu, 0x00000008u, 0x00004892u, 0x00004890u, 0x00070050u, 0x00000009u, 0x00004893u, 0x00004892u, 0x00004892u, 0x00004892u, 0x00004892u, 0x0003003eu, 0x00004866u, 0x00004893u, 0x0003003eu, 0x00003d43u, 0x00004893u, 0x000200f9u, 0x00003f78u, 0x000200f8u, 0x00003f78u, 0x000700f5u, 0x00000009u, 0x00008c1fu, 0x000072a9u, 0x00003f67u, 0x00004893u, 0x00003f79u, 0x000200f9u, 0x00003f5cu, 0x000200f8u, 0x00003f5cu, 0x000d00f5u, 0x00000009u, 0x00008c1eu, 0x000072a9u, 0x00003f55u, 0x00008c1fu, 0x00003f78u, 0x00008c21u, 0x00003f98u, 0x00008c23u, 0x00003fb8u, 0x00008c25u, 0x00003fd8u, 0x000d00f5u, 0x00000009u, 0x00008b39u, 0x000072a9u, 0x00003f55u, 0x00008b3bu, 0x00003f78u, 0x00008b3du, 0x00003f98u, 0x00008b3fu, 0x00003fb8u, 0x00008b41u, 0x00003fd8u, 0x000d00f5u, 0x00000009u, 0x00008a56u, 0x000072a9u, 0x00003f55u, 0x000047fdu, 0x00003f78u, 0x000048b6u, 0x00003f98u, 0x0000495eu, 0x00003fb8u, 0x00004a51u, 0x00003fd8u, 0x000d00f5u, 0x00000009u, 0x00008971u, 0x000072a9u, 0x00003f55u, 0x00008973u, 0x00003f78u, 0x00008975u, 0x00003f98u, 0x00008977u, 0x00003fb8u, 0x00008979u, 0x00003fd8u, 0x000200f9u, 0x00003f54u, 0x000200f8u, 0x00003f54u, 0x000f00f5u, 0x00000009u, 0x00008c1du, 0x000072a9u, 0x00003eb5u, 0x00008c1eu, 0x00003f5cu, 0x00008c27u, 0x00003ff4u, 0x00008c28u, 0x00004010u, 0x00008c2fu, 0x00004082u, 0x00008c38u, 0x00004109u, 0x000f00f5u, 0x00000009u, 0x00008b38u, 0x000072a9u, 0x00003eb5u, 0x00008b39u, 0x00003f5cu, 0x00008b42u, 0x00003ff4u, 0x00008b43u, 0x00004010u, 0x00008b4au, 0x00004082u, 0x00008b53u, 0x00004109u, 0x000f00f5u, 0x00000009u, 0x00008a55u, 0x000072a9u, 0x00003eb5u, 0x00008a56u, 0x00003f5cu, 0x00004b3eu, 0x00003ff4u, 0x00008a60u, 0x00004010u, 0x00008a67u, 0x00004082u, 0x00008a70u, 0x00004109u, 0x000f00f5u, 0x00000009u, 0x00008970u, 0x000072a9u, 0x00003eb5u, 0x00008971u, 0x00003f5cu, 0x0000897au, 0x00003ff4u, 0x0000897bu, 0x00004010u, 0x00008982u, 0x00004082u, 0x0000898bu, 0x00004109u, 0x000200f9u, 0x00003eb3u, 0x000200f8u, 0x00003eb4u, 0x000300f7u, 0x00003eb8u, 0x00000000u, 0x000b00fbu, 0x0000b1e8u, 0x00003eb8u, 0x00000000u, 0x00003eb9u, 0x00000002u, 0x00003eb9u, 0x00000003u, 0x00003eb9u, 0x00000004u, 0x00003eb9u, 0x000200f8u, 0x00003eb9u, 0x0003003eu, 0x00003d29u, 0x00003ea7u, 0x000600a9u, 0x00000008u, 0x00003ebdu, 0x00003ea7u, 0x00000197u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00003ebeu, 0x00003ebdu, 0x0003003eu, 0x00003d2au, 0x00003ebeu, 0x000300f7u, 0x00003ec1u, 0x00000000u, 0x000700fbu, 0x0000b1e9u, 0x00003ec2u, 0x00000000u, 0x00003ec3u, 0x00000001u, 0x00003ec4u, 0x000200f8u, 0x00003ec4u, 0x0004007cu, 0x000000a0u, 0x00003f28u, 0x0000853eu, 0x000600a9u, 0x00000008u, 0x00003f2au, 0x00003ea7u, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00003f2bu, 0x00003f2au, 0x0003003eu, 0x000059fau, 0x00003ce0u, 0x0003003eu, 0x000059fbu, 0x00003ce3u, 0x0003003eu, 0x00003d4cu, 0x000018feu, 0x0003003eu, 0x00003d4du, 0x00003f28u, 0x0003003eu, 0x00003d4eu, 0x00003f2bu, 0x0003003eu, 0x00003d4fu, 0x00003ebeu, 0x0003003eu, 0x00003d50u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00004648u, 0x00003d4du, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004649u, 0x00004648u, 0x00050084u, 0x00000006u, 0x0000464au, 0x00003ce3u, 0x00004649u, 0x00050080u, 0x00000006u, 0x0000464bu, 0x00003ce0u, 0x0000464au, 0x0003003eu, 0x0000463cu, 0x0000464bu, 0x00050041u, 0x00000007u, 0x0000464cu, 0x00003d4du, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000464du, 0x0000464cu, 0x00050080u, 0x00000006u, 0x0000464fu, 0x0000464bu, 0x0000464du, 0x0003003eu, 0x0000463cu, 0x0000464fu, 0x000500c7u, 0x00000006u, 0x00004651u, 0x0000464fu, 0x00000767u, 0x0003003eu, 0x0000463cu, 0x00004651u, 0x0003003eu, 0x0000463du, 0x00004651u, 0x0004003du, 0x00000006u, 0x00004654u, 0x00004648u, 0x000500c7u, 0x00000006u, 0x00004655u, 0x00004654u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004656u, 0x00004655u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004658u, 0x00004651u, 0x00004656u, 0x0003003eu, 0x0000463du, 0x00004658u, 0x000500c6u, 0x00000006u, 0x0000465au, 0x00004658u, 0x00000331u, 0x0003003eu, 0x0000463du, 0x0000465au, 0x00080041u, 0x000001f9u, 0x0000465du, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000465au, 0x0004003du, 0x000001abu, 0x0000465eu, 0x0000465du, 0x00040071u, 0x00000006u, 0x0000465fu, 0x0000465eu, 0x0003003eu, 0x0000463eu, 0x0000465fu, 0x000500c4u, 0x00000006u, 0x00004661u, 0x0000465fu, 0x00000197u, 0x00050080u, 0x00000006u, 0x00004663u, 0x00004661u, 0x00003f2bu, 0x0003003eu, 0x0000463fu, 0x00004663u, 0x000500c6u, 0x00000006u, 0x00004666u, 0x00004663u, 0x00003ebeu, 0x0003003eu, 0x0000463fu, 0x00004666u, 0x000500c5u, 0x00000006u, 0x00004669u, 0x00000798u, 0x00004666u, 0x00080041u, 0x000001f2u, 0x0000466au, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004669u, 0x0004003du, 0x000001adu, 0x0000466bu, 0x0000466au, 0x00040071u, 0x00000006u, 0x0000466cu, 0x0000466bu, 0x0003003eu, 0x0000463eu, 0x0000466cu, 0x000300f7u, 0x0000466eu, 0x00000000u, 0x000400fau, 0x00001924u, 0x0000466fu, 0x00004670u, 0x000200f8u, 0x00004670u, 0x0003003eu, 0x00004642u, 0x0000466cu, 0x00060050u, 0x000002b6u, 0x0000468au, 0x0000466cu, 0x0000466cu, 0x0000466cu, 0x000500c2u, 0x000002b6u, 0x0000468bu, 0x0000468au, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x0000468du, 0x0000468bu, 0x0000b1c0u, 0x0003003eu, 0x00004686u, 0x0000468du, 0x000500c4u, 0x000002b6u, 0x00004690u, 0x0000468du, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004693u, 0x0000468du, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004694u, 0x00004690u, 0x00004693u, 0x0003003eu, 0x00004686u, 0x00004694u, 0x000500c7u, 0x00000006u, 0x00004696u, 0x0000466cu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004697u, 0x00004696u, 0x00000689u, 0x0003003eu, 0x00004687u, 0x00004697u, 0x0004007cu, 0x00000052u, 0x00004699u, 0x00004694u, 0x0004007cu, 0x00000008u, 0x0000469bu, 0x00004697u, 0x00050051u, 0x00000008u, 0x0000469cu, 0x00004699u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000469du, 0x00004699u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000469eu, 0x00004699u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000469fu, 0x0000469cu, 0x0000469du, 0x0000469eu, 0x0000469bu, 0x0003003eu, 0x00004688u, 0x0000469fu, 0x0003003eu, 0x00004640u, 0x0000469fu, 0x000200f9u, 0x0000466eu, 0x000200f8u, 0x0000466fu, 0x0003003eu, 0x00004641u, 0x0000466cu, 0x000500c2u, 0x00000006u, 0x0000467au, 0x0000466cu, 0x000001e0u, 0x0003003eu, 0x00004676u, 0x0000467au, 0x000500c7u, 0x00000006u, 0x0000467cu, 0x0000466cu, 0x00000689u, 0x0003003eu, 0x00004677u, 0x0000467cu, 0x0004007cu, 0x00000008u, 0x0000467eu, 0x0000467au, 0x0004007cu, 0x00000008u, 0x00004684u, 0x0000467cu, 0x00070050u, 0x00000009u, 0x00004685u, 0x0000467eu, 0x0000467eu, 0x0000467eu, 0x00004684u, 0x0003003eu, 0x00004678u, 0x00004685u, 0x0003003eu, 0x00004640u, 0x00004685u, 0x000200f9u, 0x0000466eu, 0x000200f8u, 0x0000466eu, 0x000700f5u, 0x00000009u, 0x000086c7u, 0x00004685u, 0x0000466fu, 0x0000469fu, 0x00004670u, 0x0003003eu, 0x00004643u, 0x000086c7u, 0x0003003eu, 0x00003d2bu, 0x000086c7u, 0x000300f7u, 0x00003f32u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003f33u, 0x00003f32u, 0x000200f8u, 0x00003f33u, 0x00050050u, 0x0000004du, 0x00003f36u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003f37u, 0x00003f36u, 0x0003003eu, 0x000059feu, 0x00003ce0u, 0x0003003eu, 0x000059ffu, 0x00003ce3u, 0x0003003eu, 0x00003d52u, 0x000018feu, 0x0003003eu, 0x00003d53u, 0x00003f37u, 0x0003003eu, 0x00003d54u, 0x0000032au, 0x0003003eu, 0x00003d55u, 0x00003ebeu, 0x0003003eu, 0x00003d56u, 0x00001924u, 0x00050041u, 0x00000007u, 0x000046acu, 0x00003d53u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000046adu, 0x000046acu, 0x00050084u, 0x00000006u, 0x000046aeu, 0x00003ce3u, 0x000046adu, 0x00050080u, 0x00000006u, 0x000046afu, 0x00003ce0u, 0x000046aeu, 0x0003003eu, 0x000046a0u, 0x000046afu, 0x00050041u, 0x00000007u, 0x000046b0u, 0x00003d53u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000046b1u, 0x000046b0u, 0x00050080u, 0x00000006u, 0x000046b3u, 0x000046afu, 0x000046b1u, 0x0003003eu, 0x000046a0u, 0x000046b3u, 0x000500c7u, 0x00000006u, 0x000046b5u, 0x000046b3u, 0x00000767u, 0x0003003eu, 0x000046a0u, 0x000046b5u, 0x0003003eu, 0x000046a1u, 0x000046b5u, 0x0004003du, 0x00000006u, 0x000046b8u, 0x000046acu, 0x000500c7u, 0x00000006u, 0x000046b9u, 0x000046b8u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000046bau, 0x000046b9u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000046bcu, 0x000046b5u, 0x000046bau, 0x0003003eu, 0x000046a1u, 0x000046bcu, 0x000500c6u, 0x00000006u, 0x000046beu, 0x000046bcu, 0x00000331u, 0x0003003eu, 0x000046a1u, 0x000046beu, 0x00080041u, 0x000001f9u, 0x000046c1u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000046beu, 0x0004003du, 0x000001abu, 0x000046c2u, 0x000046c1u, 0x00040071u, 0x00000006u, 0x000046c3u, 0x000046c2u, 0x0003003eu, 0x000046a2u, 0x000046c3u, 0x000500c4u, 0x00000006u, 0x000046c5u, 0x000046c3u, 0x00000197u, 0x00050080u, 0x00000006u, 0x000046c7u, 0x000046c5u, 0x0000032au, 0x0003003eu, 0x000046a3u, 0x000046c7u, 0x000500c6u, 0x00000006u, 0x000046cau, 0x000046c7u, 0x00003ebeu, 0x0003003eu, 0x000046a3u, 0x000046cau, 0x000500c5u, 0x00000006u, 0x000046cdu, 0x00000798u, 0x000046cau, 0x00080041u, 0x000001f2u, 0x000046ceu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000046cdu, 0x0004003du, 0x000001adu, 0x000046cfu, 0x000046ceu, 0x00040071u, 0x00000006u, 0x000046d0u, 0x000046cfu, 0x0003003eu, 0x000046a2u, 0x000046d0u, 0x000300f7u, 0x000046d2u, 0x00000000u, 0x000400fau, 0x00001924u, 0x000046d3u, 0x000046d4u, 0x000200f8u, 0x000046d4u, 0x0003003eu, 0x000046a6u, 0x000046d0u, 0x00060050u, 0x000002b6u, 0x000046eeu, 0x000046d0u, 0x000046d0u, 0x000046d0u, 0x000500c2u, 0x000002b6u, 0x000046efu, 0x000046eeu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000046f1u, 0x000046efu, 0x0000b1c0u, 0x0003003eu, 0x000046eau, 0x000046f1u, 0x000500c4u, 0x000002b6u, 0x000046f4u, 0x000046f1u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000046f7u, 0x000046f1u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000046f8u, 0x000046f4u, 0x000046f7u, 0x0003003eu, 0x000046eau, 0x000046f8u, 0x000500c7u, 0x00000006u, 0x000046fau, 0x000046d0u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000046fbu, 0x000046fau, 0x00000689u, 0x0003003eu, 0x000046ebu, 0x000046fbu, 0x0004007cu, 0x00000052u, 0x000046fdu, 0x000046f8u, 0x0004007cu, 0x00000008u, 0x000046ffu, 0x000046fbu, 0x00050051u, 0x00000008u, 0x00004700u, 0x000046fdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004701u, 0x000046fdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004702u, 0x000046fdu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004703u, 0x00004700u, 0x00004701u, 0x00004702u, 0x000046ffu, 0x0003003eu, 0x000046ecu, 0x00004703u, 0x0003003eu, 0x000046a4u, 0x00004703u, 0x000200f9u, 0x000046d2u, 0x000200f8u, 0x000046d3u, 0x0003003eu, 0x000046a5u, 0x000046d0u, 0x000500c2u, 0x00000006u, 0x000046deu, 0x000046d0u, 0x000001e0u, 0x0003003eu, 0x000046dau, 0x000046deu, 0x000500c7u, 0x00000006u, 0x000046e0u, 0x000046d0u, 0x00000689u, 0x0003003eu, 0x000046dbu, 0x000046e0u, 0x0004007cu, 0x00000008u, 0x000046e2u, 0x000046deu, 0x0004007cu, 0x00000008u, 0x000046e8u, 0x000046e0u, 0x00070050u, 0x00000009u, 0x000046e9u, 0x000046e2u, 0x000046e2u, 0x000046e2u, 0x000046e8u, 0x0003003eu, 0x000046dcu, 0x000046e9u, 0x0003003eu, 0x000046a4u, 0x000046e9u, 0x000200f9u, 0x000046d2u, 0x000200f8u, 0x000046d2u, 0x000700f5u, 0x00000009u, 0x000086dfu, 0x000046e9u, 0x000046d3u, 0x00004703u, 0x000046d4u, 0x0003003eu, 0x000046a7u, 0x000086dfu, 0x0003003eu, 0x00003d33u, 0x000086dfu, 0x00050050u, 0x0000004du, 0x00003f3fu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f40u, 0x00003f3fu, 0x0003003eu, 0x00005a02u, 0x00003ce0u, 0x0003003eu, 0x00005a03u, 0x00003ce3u, 0x0003003eu, 0x00003d58u, 0x000018feu, 0x0003003eu, 0x00003d59u, 0x00003f40u, 0x0003003eu, 0x00003d5au, 0x0000032eu, 0x0003003eu, 0x00003d5bu, 0x00003ebeu, 0x0003003eu, 0x00003d5cu, 0x00001924u, 0x00050041u, 0x00000007u, 0x00004710u, 0x00003d59u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004711u, 0x00004710u, 0x00050084u, 0x00000006u, 0x00004712u, 0x00003ce3u, 0x00004711u, 0x00050080u, 0x00000006u, 0x00004713u, 0x00003ce0u, 0x00004712u, 0x0003003eu, 0x00004704u, 0x00004713u, 0x00050041u, 0x00000007u, 0x00004714u, 0x00003d59u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004715u, 0x00004714u, 0x00050080u, 0x00000006u, 0x00004717u, 0x00004713u, 0x00004715u, 0x0003003eu, 0x00004704u, 0x00004717u, 0x000500c7u, 0x00000006u, 0x00004719u, 0x00004717u, 0x00000767u, 0x0003003eu, 0x00004704u, 0x00004719u, 0x0003003eu, 0x00004705u, 0x00004719u, 0x0004003du, 0x00000006u, 0x0000471cu, 0x00004710u, 0x000500c7u, 0x00000006u, 0x0000471du, 0x0000471cu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000471eu, 0x0000471du, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004720u, 0x00004719u, 0x0000471eu, 0x0003003eu, 0x00004705u, 0x00004720u, 0x000500c6u, 0x00000006u, 0x00004722u, 0x00004720u, 0x00000331u, 0x0003003eu, 0x00004705u, 0x00004722u, 0x00080041u, 0x000001f9u, 0x00004725u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004722u, 0x0004003du, 0x000001abu, 0x00004726u, 0x00004725u, 0x00040071u, 0x00000006u, 0x00004727u, 0x00004726u, 0x0003003eu, 0x00004706u, 0x00004727u, 0x000500c4u, 0x00000006u, 0x00004729u, 0x00004727u, 0x00000197u, 0x00050080u, 0x00000006u, 0x0000472bu, 0x00004729u, 0x0000032eu, 0x0003003eu, 0x00004707u, 0x0000472bu, 0x000500c6u, 0x00000006u, 0x0000472eu, 0x0000472bu, 0x00003ebeu, 0x0003003eu, 0x00004707u, 0x0000472eu, 0x000500c5u, 0x00000006u, 0x00004731u, 0x00000798u, 0x0000472eu, 0x00080041u, 0x000001f2u, 0x00004732u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004731u, 0x0004003du, 0x000001adu, 0x00004733u, 0x00004732u, 0x00040071u, 0x00000006u, 0x00004734u, 0x00004733u, 0x0003003eu, 0x00004706u, 0x00004734u, 0x000300f7u, 0x00004736u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00004737u, 0x00004738u, 0x000200f8u, 0x00004738u, 0x0003003eu, 0x0000470au, 0x00004734u, 0x00060050u, 0x000002b6u, 0x00004752u, 0x00004734u, 0x00004734u, 0x00004734u, 0x000500c2u, 0x000002b6u, 0x00004753u, 0x00004752u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00004755u, 0x00004753u, 0x0000b1c0u, 0x0003003eu, 0x0000474eu, 0x00004755u, 0x000500c4u, 0x000002b6u, 0x00004758u, 0x00004755u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x0000475bu, 0x00004755u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x0000475cu, 0x00004758u, 0x0000475bu, 0x0003003eu, 0x0000474eu, 0x0000475cu, 0x000500c7u, 0x00000006u, 0x0000475eu, 0x00004734u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000475fu, 0x0000475eu, 0x00000689u, 0x0003003eu, 0x0000474fu, 0x0000475fu, 0x0004007cu, 0x00000052u, 0x00004761u, 0x0000475cu, 0x0004007cu, 0x00000008u, 0x00004763u, 0x0000475fu, 0x00050051u, 0x00000008u, 0x00004764u, 0x00004761u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004765u, 0x00004761u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004766u, 0x00004761u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004767u, 0x00004764u, 0x00004765u, 0x00004766u, 0x00004763u, 0x0003003eu, 0x00004750u, 0x00004767u, 0x0003003eu, 0x00004708u, 0x00004767u, 0x000200f9u, 0x00004736u, 0x000200f8u, 0x00004737u, 0x0003003eu, 0x00004709u, 0x00004734u, 0x000500c2u, 0x00000006u, 0x00004742u, 0x00004734u, 0x000001e0u, 0x0003003eu, 0x0000473eu, 0x00004742u, 0x000500c7u, 0x00000006u, 0x00004744u, 0x00004734u, 0x00000689u, 0x0003003eu, 0x0000473fu, 0x00004744u, 0x0004007cu, 0x00000008u, 0x00004746u, 0x00004742u, 0x0004007cu, 0x00000008u, 0x0000474cu, 0x00004744u, 0x00070050u, 0x00000009u, 0x0000474du, 0x00004746u, 0x00004746u, 0x00004746u, 0x0000474cu, 0x0003003eu, 0x00004740u, 0x0000474du, 0x0003003eu, 0x00004708u, 0x0000474du, 0x000200f9u, 0x00004736u, 0x000200f8u, 0x00004736u, 0x000700f5u, 0x00000009u, 0x000086f7u, 0x0000474du, 0x00004737u, 0x00004767u, 0x00004738u, 0x0003003eu, 0x0000470bu, 0x000086f7u, 0x0003003eu, 0x00003d3bu, 0x000086f7u, 0x000200f9u, 0x00003f32u, 0x000200f8u, 0x00003f32u, 0x000700f5u, 0x00000009u, 0x00008b35u, 0x000072a9u, 0x0000466eu, 0x000086f7u, 0x00004736u, 0x000700f5u, 0x00000009u, 0x0000896cu, 0x000072a9u, 0x0000466eu, 0x000086dfu, 0x00004736u, 0x000300f7u, 0x00003f47u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003f48u, 0x00003f47u, 0x000200f8u, 0x00003f48u, 0x00050050u, 0x0000004du, 0x00003f4bu, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f4cu, 0x00003f4bu, 0x0003003eu, 0x00005a06u, 0x00003ce0u, 0x0003003eu, 0x00005a07u, 0x00003ce3u, 0x0003003eu, 0x00003d5eu, 0x000018feu, 0x0003003eu, 0x00003d5fu, 0x00003f4cu, 0x0003003eu, 0x00003d60u, 0x00000331u, 0x0003003eu, 0x00003d61u, 0x00003ebeu, 0x0003003eu, 0x00003d62u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00004774u, 0x00003d5fu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004775u, 0x00004774u, 0x00050084u, 0x00000006u, 0x00004776u, 0x00003ce3u, 0x00004775u, 0x00050080u, 0x00000006u, 0x00004777u, 0x00003ce0u, 0x00004776u, 0x0003003eu, 0x00004768u, 0x00004777u, 0x00050041u, 0x00000007u, 0x00004778u, 0x00003d5fu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004779u, 0x00004778u, 0x00050080u, 0x00000006u, 0x0000477bu, 0x00004777u, 0x00004779u, 0x0003003eu, 0x00004768u, 0x0000477bu, 0x000500c7u, 0x00000006u, 0x0000477du, 0x0000477bu, 0x00000767u, 0x0003003eu, 0x00004768u, 0x0000477du, 0x0003003eu, 0x00004769u, 0x0000477du, 0x0004003du, 0x00000006u, 0x00004780u, 0x00004774u, 0x000500c7u, 0x00000006u, 0x00004781u, 0x00004780u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004782u, 0x00004781u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004784u, 0x0000477du, 0x00004782u, 0x0003003eu, 0x00004769u, 0x00004784u, 0x000500c6u, 0x00000006u, 0x00004786u, 0x00004784u, 0x00000331u, 0x0003003eu, 0x00004769u, 0x00004786u, 0x00080041u, 0x000001f9u, 0x00004789u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004786u, 0x0004003du, 0x000001abu, 0x0000478au, 0x00004789u, 0x00040071u, 0x00000006u, 0x0000478bu, 0x0000478au, 0x0003003eu, 0x0000476au, 0x0000478bu, 0x000500c4u, 0x00000006u, 0x0000478du, 0x0000478bu, 0x00000197u, 0x00050080u, 0x00000006u, 0x0000478fu, 0x0000478du, 0x00000331u, 0x0003003eu, 0x0000476bu, 0x0000478fu, 0x000500c6u, 0x00000006u, 0x00004792u, 0x0000478fu, 0x00003ebeu, 0x0003003eu, 0x0000476bu, 0x00004792u, 0x000500c5u, 0x00000006u, 0x00004795u, 0x00000798u, 0x00004792u, 0x00080041u, 0x000001f2u, 0x00004796u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004795u, 0x0004003du, 0x000001adu, 0x00004797u, 0x00004796u, 0x00040071u, 0x00000006u, 0x00004798u, 0x00004797u, 0x0003003eu, 0x0000476au, 0x00004798u, 0x000300f7u, 0x0000479au, 0x00000000u, 0x000400fau, 0x00001924u, 0x0000479bu, 0x0000479cu, 0x000200f8u, 0x0000479cu, 0x0003003eu, 0x0000476eu, 0x00004798u, 0x00060050u, 0x000002b6u, 0x000047b6u, 0x00004798u, 0x00004798u, 0x00004798u, 0x000500c2u, 0x000002b6u, 0x000047b7u, 0x000047b6u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000047b9u, 0x000047b7u, 0x0000b1c0u, 0x0003003eu, 0x000047b2u, 0x000047b9u, 0x000500c4u, 0x000002b6u, 0x000047bcu, 0x000047b9u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000047bfu, 0x000047b9u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000047c0u, 0x000047bcu, 0x000047bfu, 0x0003003eu, 0x000047b2u, 0x000047c0u, 0x000500c7u, 0x00000006u, 0x000047c2u, 0x00004798u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000047c3u, 0x000047c2u, 0x00000689u, 0x0003003eu, 0x000047b3u, 0x000047c3u, 0x0004007cu, 0x00000052u, 0x000047c5u, 0x000047c0u, 0x0004007cu, 0x00000008u, 0x000047c7u, 0x000047c3u, 0x00050051u, 0x00000008u, 0x000047c8u, 0x000047c5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000047c9u, 0x000047c5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000047cau, 0x000047c5u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000047cbu, 0x000047c8u, 0x000047c9u, 0x000047cau, 0x000047c7u, 0x0003003eu, 0x000047b4u, 0x000047cbu, 0x0003003eu, 0x0000476cu, 0x000047cbu, 0x000200f9u, 0x0000479au, 0x000200f8u, 0x0000479bu, 0x0003003eu, 0x0000476du, 0x00004798u, 0x000500c2u, 0x00000006u, 0x000047a6u, 0x00004798u, 0x000001e0u, 0x0003003eu, 0x000047a2u, 0x000047a6u, 0x000500c7u, 0x00000006u, 0x000047a8u, 0x00004798u, 0x00000689u, 0x0003003eu, 0x000047a3u, 0x000047a8u, 0x0004007cu, 0x00000008u, 0x000047aau, 0x000047a6u, 0x0004007cu, 0x00000008u, 0x000047b0u, 0x000047a8u, 0x00070050u, 0x00000009u, 0x000047b1u, 0x000047aau, 0x000047aau, 0x000047aau, 0x000047b0u, 0x0003003eu, 0x000047a4u, 0x000047b1u, 0x0003003eu, 0x0000476cu, 0x000047b1u, 0x000200f9u, 0x0000479au, 0x000200f8u, 0x0000479au, 0x000700f5u, 0x00000009u, 0x00008724u, 0x000047b1u, 0x0000479bu, 0x000047cbu, 0x0000479cu, 0x0003003eu, 0x0000476fu, 0x00008724u, 0x0003003eu, 0x00003d43u, 0x00008724u, 0x000200f9u, 0x00003f47u, 0x000200f8u, 0x00003f47u, 0x000700f5u, 0x00000009u, 0x00008c18u, 0x000072a9u, 0x00003f32u, 0x00008724u, 0x0000479au, 0x000200f9u, 0x00003ec1u, 0x000200f8u, 0x00003ec3u, 0x0004007cu, 0x000000a0u, 0x00003ef1u, 0x0000853eu, 0x0004007cu, 0x00000006u, 0x00003ef4u, 0x00003cf2u, 0x000600a9u, 0x00000008u, 0x00003ef6u, 0x00003ea7u, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00003ef7u, 0x00003ef6u, 0x0003003eu, 0x000059eau, 0x00003ce0u, 0x0003003eu, 0x000059ebu, 0x00003ce3u, 0x0003003eu, 0x00003d2du, 0x000018feu, 0x0003003eu, 0x00003d2eu, 0x00003ef1u, 0x0003003eu, 0x00003d2fu, 0x00003ef4u, 0x0003003eu, 0x00003d30u, 0x00003ef7u, 0x0003003eu, 0x00003d31u, 0x00003ebeu, 0x0003003eu, 0x00003d32u, 0x00001924u, 0x00050041u, 0x00000007u, 0x0000447du, 0x00003d2eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000447eu, 0x0000447du, 0x00050084u, 0x00000006u, 0x0000447fu, 0x00003ce3u, 0x0000447eu, 0x00050080u, 0x00000006u, 0x00004480u, 0x00003ce0u, 0x0000447fu, 0x0003003eu, 0x00004470u, 0x00004480u, 0x00050041u, 0x00000007u, 0x00004481u, 0x00003d2eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004482u, 0x00004481u, 0x000500c2u, 0x00000006u, 0x00004483u, 0x00004482u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00004485u, 0x00004480u, 0x00004483u, 0x0003003eu, 0x00004470u, 0x00004485u, 0x000500c7u, 0x00000006u, 0x00004487u, 0x00004485u, 0x00000767u, 0x0003003eu, 0x00004470u, 0x00004487u, 0x0004003du, 0x00000006u, 0x00004489u, 0x00004481u, 0x000400c8u, 0x00000006u, 0x0000448au, 0x00004489u, 0x000500c7u, 0x00000006u, 0x0000448bu, 0x0000448au, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000448cu, 0x0000448bu, 0x000006bcu, 0x0003003eu, 0x00004471u, 0x0000448cu, 0x0003003eu, 0x00004472u, 0x00004487u, 0x0004003du, 0x00000006u, 0x0000448fu, 0x0000447du, 0x000500c7u, 0x00000006u, 0x00004490u, 0x0000448fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004491u, 0x00004490u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004493u, 0x00004487u, 0x00004491u, 0x0003003eu, 0x00004472u, 0x00004493u, 0x000500c6u, 0x00000006u, 0x00004495u, 0x00004493u, 0x00000331u, 0x0003003eu, 0x00004472u, 0x00004495u, 0x00080041u, 0x000001f9u, 0x00004498u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004495u, 0x0004003du, 0x000001abu, 0x00004499u, 0x00004498u, 0x00040071u, 0x00000006u, 0x0000449au, 0x00004499u, 0x0003003eu, 0x00004473u, 0x0000449au, 0x000500c2u, 0x00000006u, 0x0000449du, 0x0000449au, 0x0000448cu, 0x000500c7u, 0x00000006u, 0x0000449eu, 0x0000449du, 0x000006d8u, 0x0003003eu, 0x00004473u, 0x0000449eu, 0x000500c4u, 0x00000006u, 0x000044a0u, 0x00003ef4u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000044a2u, 0x0000449eu, 0x000044a0u, 0x0003003eu, 0x00004473u, 0x000044a2u, 0x000500c4u, 0x00000006u, 0x000044a4u, 0x000044a2u, 0x00000197u, 0x00050080u, 0x00000006u, 0x000044a6u, 0x000044a4u, 0x00003ef7u, 0x0003003eu, 0x00004474u, 0x000044a6u, 0x000500c6u, 0x00000006u, 0x000044a9u, 0x000044a6u, 0x00003ebeu, 0x0003003eu, 0x00004474u, 0x000044a9u, 0x000500c5u, 0x00000006u, 0x000044acu, 0x00000798u, 0x000044a9u, 0x00080041u, 0x000001f2u, 0x000044adu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000044acu, 0x0004003du, 0x000001adu, 0x000044aeu, 0x000044adu, 0x00040071u, 0x00000006u, 0x000044afu, 0x000044aeu, 0x0003003eu, 0x00004473u, 0x000044afu, 0x000300f7u, 0x000044b1u, 0x00000000u, 0x000400fau, 0x00001924u, 0x000044b2u, 0x000044b3u, 0x000200f8u, 0x000044b3u, 0x0003003eu, 0x00004477u, 0x000044afu, 0x00060050u, 0x000002b6u, 0x000044cdu, 0x000044afu, 0x000044afu, 0x000044afu, 0x000500c2u, 0x000002b6u, 0x000044ceu, 0x000044cdu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000044d0u, 0x000044ceu, 0x0000b1c0u, 0x0003003eu, 0x000044c9u, 0x000044d0u, 0x000500c4u, 0x000002b6u, 0x000044d3u, 0x000044d0u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000044d6u, 0x000044d0u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000044d7u, 0x000044d3u, 0x000044d6u, 0x0003003eu, 0x000044c9u, 0x000044d7u, 0x000500c7u, 0x00000006u, 0x000044d9u, 0x000044afu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000044dau, 0x000044d9u, 0x00000689u, 0x0003003eu, 0x000044cau, 0x000044dau, 0x0004007cu, 0x00000052u, 0x000044dcu, 0x000044d7u, 0x0004007cu, 0x00000008u, 0x000044deu, 0x000044dau, 0x00050051u, 0x00000008u, 0x000044dfu, 0x000044dcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000044e0u, 0x000044dcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000044e1u, 0x000044dcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000044e2u, 0x000044dfu, 0x000044e0u, 0x000044e1u, 0x000044deu, 0x0003003eu, 0x000044cbu, 0x000044e2u, 0x0003003eu, 0x00004475u, 0x000044e2u, 0x000200f9u, 0x000044b1u, 0x000200f8u, 0x000044b2u, 0x0003003eu, 0x00004476u, 0x000044afu, 0x000500c2u, 0x00000006u, 0x000044bdu, 0x000044afu, 0x000001e0u, 0x0003003eu, 0x000044b9u, 0x000044bdu, 0x000500c7u, 0x00000006u, 0x000044bfu, 0x000044afu, 0x00000689u, 0x0003003eu, 0x000044bau, 0x000044bfu, 0x0004007cu, 0x00000008u, 0x000044c1u, 0x000044bdu, 0x0004007cu, 0x00000008u, 0x000044c7u, 0x000044bfu, 0x00070050u, 0x00000009u, 0x000044c8u, 0x000044c1u, 0x000044c1u, 0x000044c1u, 0x000044c7u, 0x0003003eu, 0x000044bbu, 0x000044c8u, 0x0003003eu, 0x00004475u, 0x000044c8u, 0x000200f9u, 0x000044b1u, 0x000200f8u, 0x000044b1u, 0x000700f5u, 0x00000009u, 0x00008725u, 0x000044c8u, 0x000044b2u, 0x000044e2u, 0x000044b3u, 0x0003003eu, 0x00004478u, 0x00008725u, 0x0003003eu, 0x00003d2bu, 0x00008725u, 0x000300f7u, 0x00003efeu, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003effu, 0x00003efeu, 0x000200f8u, 0x00003effu, 0x00050050u, 0x0000004du, 0x00003f02u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003f03u, 0x00003f02u, 0x0003003eu, 0x000059eeu, 0x00003ce0u, 0x0003003eu, 0x000059efu, 0x00003ce3u, 0x0003003eu, 0x00003d35u, 0x000018feu, 0x0003003eu, 0x00003d36u, 0x00003f03u, 0x0003003eu, 0x00003d37u, 0x00003ef4u, 0x0003003eu, 0x00003d38u, 0x0000032au, 0x0003003eu, 0x00003d39u, 0x00003ebeu, 0x0003003eu, 0x00003d3au, 0x00001924u, 0x00050041u, 0x00000007u, 0x000044f0u, 0x00003d36u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000044f1u, 0x000044f0u, 0x00050084u, 0x00000006u, 0x000044f2u, 0x00003ce3u, 0x000044f1u, 0x00050080u, 0x00000006u, 0x000044f3u, 0x00003ce0u, 0x000044f2u, 0x0003003eu, 0x000044e3u, 0x000044f3u, 0x00050041u, 0x00000007u, 0x000044f4u, 0x00003d36u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000044f5u, 0x000044f4u, 0x000500c2u, 0x00000006u, 0x000044f6u, 0x000044f5u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000044f8u, 0x000044f3u, 0x000044f6u, 0x0003003eu, 0x000044e3u, 0x000044f8u, 0x000500c7u, 0x00000006u, 0x000044fau, 0x000044f8u, 0x00000767u, 0x0003003eu, 0x000044e3u, 0x000044fau, 0x0004003du, 0x00000006u, 0x000044fcu, 0x000044f4u, 0x000400c8u, 0x00000006u, 0x000044fdu, 0x000044fcu, 0x000500c7u, 0x00000006u, 0x000044feu, 0x000044fdu, 0x0000032au, 0x00050084u, 0x00000006u, 0x000044ffu, 0x000044feu, 0x000006bcu, 0x0003003eu, 0x000044e4u, 0x000044ffu, 0x0003003eu, 0x000044e5u, 0x000044fau, 0x0004003du, 0x00000006u, 0x00004502u, 0x000044f0u, 0x000500c7u, 0x00000006u, 0x00004503u, 0x00004502u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004504u, 0x00004503u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004506u, 0x000044fau, 0x00004504u, 0x0003003eu, 0x000044e5u, 0x00004506u, 0x000500c6u, 0x00000006u, 0x00004508u, 0x00004506u, 0x00000331u, 0x0003003eu, 0x000044e5u, 0x00004508u, 0x00080041u, 0x000001f9u, 0x0000450bu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004508u, 0x0004003du, 0x000001abu, 0x0000450cu, 0x0000450bu, 0x00040071u, 0x00000006u, 0x0000450du, 0x0000450cu, 0x0003003eu, 0x000044e6u, 0x0000450du, 0x000500c2u, 0x00000006u, 0x00004510u, 0x0000450du, 0x000044ffu, 0x000500c7u, 0x00000006u, 0x00004511u, 0x00004510u, 0x000006d8u, 0x0003003eu, 0x000044e6u, 0x00004511u, 0x000500c5u, 0x00000006u, 0x00004515u, 0x00004511u, 0x000044a0u, 0x0003003eu, 0x000044e6u, 0x00004515u, 0x000500c4u, 0x00000006u, 0x00004517u, 0x00004515u, 0x00000197u, 0x00050080u, 0x00000006u, 0x00004519u, 0x00004517u, 0x0000032au, 0x0003003eu, 0x000044e7u, 0x00004519u, 0x000500c6u, 0x00000006u, 0x0000451cu, 0x00004519u, 0x00003ebeu, 0x0003003eu, 0x000044e7u, 0x0000451cu, 0x000500c5u, 0x00000006u, 0x0000451fu, 0x00000798u, 0x0000451cu, 0x00080041u, 0x000001f2u, 0x00004520u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000451fu, 0x0004003du, 0x000001adu, 0x00004521u, 0x00004520u, 0x00040071u, 0x00000006u, 0x00004522u, 0x00004521u, 0x0003003eu, 0x000044e6u, 0x00004522u, 0x000300f7u, 0x00004524u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00004525u, 0x00004526u, 0x000200f8u, 0x00004526u, 0x0003003eu, 0x000044eau, 0x00004522u, 0x00060050u, 0x000002b6u, 0x00004540u, 0x00004522u, 0x00004522u, 0x00004522u, 0x000500c2u, 0x000002b6u, 0x00004541u, 0x00004540u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00004543u, 0x00004541u, 0x0000b1c0u, 0x0003003eu, 0x0000453cu, 0x00004543u, 0x000500c4u, 0x000002b6u, 0x00004546u, 0x00004543u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004549u, 0x00004543u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x0000454au, 0x00004546u, 0x00004549u, 0x0003003eu, 0x0000453cu, 0x0000454au, 0x000500c7u, 0x00000006u, 0x0000454cu, 0x00004522u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000454du, 0x0000454cu, 0x00000689u, 0x0003003eu, 0x0000453du, 0x0000454du, 0x0004007cu, 0x00000052u, 0x0000454fu, 0x0000454au, 0x0004007cu, 0x00000008u, 0x00004551u, 0x0000454du, 0x00050051u, 0x00000008u, 0x00004552u, 0x0000454fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004553u, 0x0000454fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004554u, 0x0000454fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004555u, 0x00004552u, 0x00004553u, 0x00004554u, 0x00004551u, 0x0003003eu, 0x0000453eu, 0x00004555u, 0x0003003eu, 0x000044e8u, 0x00004555u, 0x000200f9u, 0x00004524u, 0x000200f8u, 0x00004525u, 0x0003003eu, 0x000044e9u, 0x00004522u, 0x000500c2u, 0x00000006u, 0x00004530u, 0x00004522u, 0x000001e0u, 0x0003003eu, 0x0000452cu, 0x00004530u, 0x000500c7u, 0x00000006u, 0x00004532u, 0x00004522u, 0x00000689u, 0x0003003eu, 0x0000452du, 0x00004532u, 0x0004007cu, 0x00000008u, 0x00004534u, 0x00004530u, 0x0004007cu, 0x00000008u, 0x0000453au, 0x00004532u, 0x00070050u, 0x00000009u, 0x0000453bu, 0x00004534u, 0x00004534u, 0x00004534u, 0x0000453au, 0x0003003eu, 0x0000452eu, 0x0000453bu, 0x0003003eu, 0x000044e8u, 0x0000453bu, 0x000200f9u, 0x00004524u, 0x000200f8u, 0x00004524u, 0x000700f5u, 0x00000009u, 0x0000873au, 0x0000453bu, 0x00004525u, 0x00004555u, 0x00004526u, 0x0003003eu, 0x000044ebu, 0x0000873au, 0x0003003eu, 0x00003d33u, 0x0000873au, 0x00050050u, 0x0000004du, 0x00003f0eu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f0fu, 0x00003f0eu, 0x0003003eu, 0x000059f2u, 0x00003ce0u, 0x0003003eu, 0x000059f3u, 0x00003ce3u, 0x0003003eu, 0x00003d3du, 0x000018feu, 0x0003003eu, 0x00003d3eu, 0x00003f0fu, 0x0003003eu, 0x00003d3fu, 0x00003ef4u, 0x0003003eu, 0x00003d40u, 0x0000032eu, 0x0003003eu, 0x00003d41u, 0x00003ebeu, 0x0003003eu, 0x00003d42u, 0x00001924u, 0x00050041u, 0x00000007u, 0x00004563u, 0x00003d3eu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004564u, 0x00004563u, 0x00050084u, 0x00000006u, 0x00004565u, 0x00003ce3u, 0x00004564u, 0x00050080u, 0x00000006u, 0x00004566u, 0x00003ce0u, 0x00004565u, 0x0003003eu, 0x00004556u, 0x00004566u, 0x00050041u, 0x00000007u, 0x00004567u, 0x00003d3eu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00004568u, 0x00004567u, 0x000500c2u, 0x00000006u, 0x00004569u, 0x00004568u, 0x00000194u, 0x00050080u, 0x00000006u, 0x0000456bu, 0x00004566u, 0x00004569u, 0x0003003eu, 0x00004556u, 0x0000456bu, 0x000500c7u, 0x00000006u, 0x0000456du, 0x0000456bu, 0x00000767u, 0x0003003eu, 0x00004556u, 0x0000456du, 0x0004003du, 0x00000006u, 0x0000456fu, 0x00004567u, 0x000400c8u, 0x00000006u, 0x00004570u, 0x0000456fu, 0x000500c7u, 0x00000006u, 0x00004571u, 0x00004570u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004572u, 0x00004571u, 0x000006bcu, 0x0003003eu, 0x00004557u, 0x00004572u, 0x0003003eu, 0x00004558u, 0x0000456du, 0x0004003du, 0x00000006u, 0x00004575u, 0x00004563u, 0x000500c7u, 0x00000006u, 0x00004576u, 0x00004575u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004577u, 0x00004576u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00004579u, 0x0000456du, 0x00004577u, 0x0003003eu, 0x00004558u, 0x00004579u, 0x000500c6u, 0x00000006u, 0x0000457bu, 0x00004579u, 0x00000331u, 0x0003003eu, 0x00004558u, 0x0000457bu, 0x00080041u, 0x000001f9u, 0x0000457eu, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000457bu, 0x0004003du, 0x000001abu, 0x0000457fu, 0x0000457eu, 0x00040071u, 0x00000006u, 0x00004580u, 0x0000457fu, 0x0003003eu, 0x00004559u, 0x00004580u, 0x000500c2u, 0x00000006u, 0x00004583u, 0x00004580u, 0x00004572u, 0x000500c7u, 0x00000006u, 0x00004584u, 0x00004583u, 0x000006d8u, 0x0003003eu, 0x00004559u, 0x00004584u, 0x000500c5u, 0x00000006u, 0x00004588u, 0x00004584u, 0x000044a0u, 0x0003003eu, 0x00004559u, 0x00004588u, 0x000500c4u, 0x00000006u, 0x0000458au, 0x00004588u, 0x00000197u, 0x00050080u, 0x00000006u, 0x0000458cu, 0x0000458au, 0x0000032eu, 0x0003003eu, 0x0000455au, 0x0000458cu, 0x000500c6u, 0x00000006u, 0x0000458fu, 0x0000458cu, 0x00003ebeu, 0x0003003eu, 0x0000455au, 0x0000458fu, 0x000500c5u, 0x00000006u, 0x00004592u, 0x00000798u, 0x0000458fu, 0x00080041u, 0x000001f2u, 0x00004593u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004592u, 0x0004003du, 0x000001adu, 0x00004594u, 0x00004593u, 0x00040071u, 0x00000006u, 0x00004595u, 0x00004594u, 0x0003003eu, 0x00004559u, 0x00004595u, 0x000300f7u, 0x00004597u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00004598u, 0x00004599u, 0x000200f8u, 0x00004599u, 0x0003003eu, 0x0000455du, 0x00004595u, 0x00060050u, 0x000002b6u, 0x000045b3u, 0x00004595u, 0x00004595u, 0x00004595u, 0x000500c2u, 0x000002b6u, 0x000045b4u, 0x000045b3u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000045b6u, 0x000045b4u, 0x0000b1c0u, 0x0003003eu, 0x000045afu, 0x000045b6u, 0x000500c4u, 0x000002b6u, 0x000045b9u, 0x000045b6u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000045bcu, 0x000045b6u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000045bdu, 0x000045b9u, 0x000045bcu, 0x0003003eu, 0x000045afu, 0x000045bdu, 0x000500c7u, 0x00000006u, 0x000045bfu, 0x00004595u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000045c0u, 0x000045bfu, 0x00000689u, 0x0003003eu, 0x000045b0u, 0x000045c0u, 0x0004007cu, 0x00000052u, 0x000045c2u, 0x000045bdu, 0x0004007cu, 0x00000008u, 0x000045c4u, 0x000045c0u, 0x00050051u, 0x00000008u, 0x000045c5u, 0x000045c2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000045c6u, 0x000045c2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000045c7u, 0x000045c2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000045c8u, 0x000045c5u, 0x000045c6u, 0x000045c7u, 0x000045c4u, 0x0003003eu, 0x000045b1u, 0x000045c8u, 0x0003003eu, 0x0000455bu, 0x000045c8u, 0x000200f9u, 0x00004597u, 0x000200f8u, 0x00004598u, 0x0003003eu, 0x0000455cu, 0x00004595u, 0x000500c2u, 0x00000006u, 0x000045a3u, 0x00004595u, 0x000001e0u, 0x0003003eu, 0x0000459fu, 0x000045a3u, 0x000500c7u, 0x00000006u, 0x000045a5u, 0x00004595u, 0x00000689u, 0x0003003eu, 0x000045a0u, 0x000045a5u, 0x0004007cu, 0x00000008u, 0x000045a7u, 0x000045a3u, 0x0004007cu, 0x00000008u, 0x000045adu, 0x000045a5u, 0x00070050u, 0x00000009u, 0x000045aeu, 0x000045a7u, 0x000045a7u, 0x000045a7u, 0x000045adu, 0x0003003eu, 0x000045a1u, 0x000045aeu, 0x0003003eu, 0x0000455bu, 0x000045aeu, 0x000200f9u, 0x00004597u, 0x000200f8u, 0x00004597u, 0x000700f5u, 0x00000009u, 0x00008750u, 0x000045aeu, 0x00004598u, 0x000045c8u, 0x00004599u, 0x0003003eu, 0x0000455eu, 0x00008750u, 0x0003003eu, 0x00003d3bu, 0x00008750u, 0x000200f9u, 0x00003efeu, 0x000200f8u, 0x00003efeu, 0x000700f5u, 0x00000009u, 0x00008b31u, 0x000072a9u, 0x000044b1u, 0x00008750u, 0x00004597u, 0x000700f5u, 0x00000009u, 0x00008967u, 0x000072a9u, 0x000044b1u, 0x0000873au, 0x00004597u, 0x000300f7u, 0x00003f19u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003f1au, 0x00003f19u, 0x000200f8u, 0x00003f1au, 0x00050050u, 0x0000004du, 0x00003f1du, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003f1eu, 0x00003f1du, 0x0003003eu, 0x000059f6u, 0x00003ce0u, 0x0003003eu, 0x000059f7u, 0x00003ce3u, 0x0003003eu, 0x00003d45u, 0x000018feu, 0x0003003eu, 0x00003d46u, 0x00003f1eu, 0x0003003eu, 0x00003d47u, 0x00003ef4u, 0x0003003eu, 0x00003d48u, 0x00000331u, 0x0003003eu, 0x00003d49u, 0x00003ebeu, 0x0003003eu, 0x00003d4au, 0x00001924u, 0x00050041u, 0x00000007u, 0x000045d6u, 0x00003d46u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000045d7u, 0x000045d6u, 0x00050084u, 0x00000006u, 0x000045d8u, 0x00003ce3u, 0x000045d7u, 0x00050080u, 0x00000006u, 0x000045d9u, 0x00003ce0u, 0x000045d8u, 0x0003003eu, 0x000045c9u, 0x000045d9u, 0x00050041u, 0x00000007u, 0x000045dau, 0x00003d46u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000045dbu, 0x000045dau, 0x000500c2u, 0x00000006u, 0x000045dcu, 0x000045dbu, 0x00000194u, 0x00050080u, 0x00000006u, 0x000045deu, 0x000045d9u, 0x000045dcu, 0x0003003eu, 0x000045c9u, 0x000045deu, 0x000500c7u, 0x00000006u, 0x000045e0u, 0x000045deu, 0x00000767u, 0x0003003eu, 0x000045c9u, 0x000045e0u, 0x0004003du, 0x00000006u, 0x000045e2u, 0x000045dau, 0x000400c8u, 0x00000006u, 0x000045e3u, 0x000045e2u, 0x000500c7u, 0x00000006u, 0x000045e4u, 0x000045e3u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000045e5u, 0x000045e4u, 0x000006bcu, 0x0003003eu, 0x000045cau, 0x000045e5u, 0x0003003eu, 0x000045cbu, 0x000045e0u, 0x0004003du, 0x00000006u, 0x000045e8u, 0x000045d6u, 0x000500c7u, 0x00000006u, 0x000045e9u, 0x000045e8u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000045eau, 0x000045e9u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000045ecu, 0x000045e0u, 0x000045eau, 0x0003003eu, 0x000045cbu, 0x000045ecu, 0x000500c6u, 0x00000006u, 0x000045eeu, 0x000045ecu, 0x00000331u, 0x0003003eu, 0x000045cbu, 0x000045eeu, 0x00080041u, 0x000001f9u, 0x000045f1u, 0x000006cfu, 0x00000185u, 0x000018feu, 0x00000185u, 0x000045eeu, 0x0004003du, 0x000001abu, 0x000045f2u, 0x000045f1u, 0x00040071u, 0x00000006u, 0x000045f3u, 0x000045f2u, 0x0003003eu, 0x000045ccu, 0x000045f3u, 0x000500c2u, 0x00000006u, 0x000045f6u, 0x000045f3u, 0x000045e5u, 0x000500c7u, 0x00000006u, 0x000045f7u, 0x000045f6u, 0x000006d8u, 0x0003003eu, 0x000045ccu, 0x000045f7u, 0x000500c5u, 0x00000006u, 0x000045fbu, 0x000045f7u, 0x000044a0u, 0x0003003eu, 0x000045ccu, 0x000045fbu, 0x000500c4u, 0x00000006u, 0x000045fdu, 0x000045fbu, 0x00000197u, 0x00050080u, 0x00000006u, 0x000045ffu, 0x000045fdu, 0x00000331u, 0x0003003eu, 0x000045cdu, 0x000045ffu, 0x000500c6u, 0x00000006u, 0x00004602u, 0x000045ffu, 0x00003ebeu, 0x0003003eu, 0x000045cdu, 0x00004602u, 0x000500c5u, 0x00000006u, 0x00004605u, 0x00000798u, 0x00004602u, 0x00080041u, 0x000001f2u, 0x00004606u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004605u, 0x0004003du, 0x000001adu, 0x00004607u, 0x00004606u, 0x00040071u, 0x00000006u, 0x00004608u, 0x00004607u, 0x0003003eu, 0x000045ccu, 0x00004608u, 0x000300f7u, 0x0000460au, 0x00000000u, 0x000400fau, 0x00001924u, 0x0000460bu, 0x0000460cu, 0x000200f8u, 0x0000460cu, 0x0003003eu, 0x000045d0u, 0x00004608u, 0x00060050u, 0x000002b6u, 0x00004626u, 0x00004608u, 0x00004608u, 0x00004608u, 0x000500c2u, 0x000002b6u, 0x00004627u, 0x00004626u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00004629u, 0x00004627u, 0x0000b1c0u, 0x0003003eu, 0x00004622u, 0x00004629u, 0x000500c4u, 0x000002b6u, 0x0000462cu, 0x00004629u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x0000462fu, 0x00004629u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004630u, 0x0000462cu, 0x0000462fu, 0x0003003eu, 0x00004622u, 0x00004630u, 0x000500c7u, 0x00000006u, 0x00004632u, 0x00004608u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004633u, 0x00004632u, 0x00000689u, 0x0003003eu, 0x00004623u, 0x00004633u, 0x0004007cu, 0x00000052u, 0x00004635u, 0x00004630u, 0x0004007cu, 0x00000008u, 0x00004637u, 0x00004633u, 0x00050051u, 0x00000008u, 0x00004638u, 0x00004635u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004639u, 0x00004635u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000463au, 0x00004635u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000463bu, 0x00004638u, 0x00004639u, 0x0000463au, 0x00004637u, 0x0003003eu, 0x00004624u, 0x0000463bu, 0x0003003eu, 0x000045ceu, 0x0000463bu, 0x000200f9u, 0x0000460au, 0x000200f8u, 0x0000460bu, 0x0003003eu, 0x000045cfu, 0x00004608u, 0x000500c2u, 0x00000006u, 0x00004616u, 0x00004608u, 0x000001e0u, 0x0003003eu, 0x00004612u, 0x00004616u, 0x000500c7u, 0x00000006u, 0x00004618u, 0x00004608u, 0x00000689u, 0x0003003eu, 0x00004613u, 0x00004618u, 0x0004007cu, 0x00000008u, 0x0000461au, 0x00004616u, 0x0004007cu, 0x00000008u, 0x00004620u, 0x00004618u, 0x00070050u, 0x00000009u, 0x00004621u, 0x0000461au, 0x0000461au, 0x0000461au, 0x00004620u, 0x0003003eu, 0x00004614u, 0x00004621u, 0x0003003eu, 0x000045ceu, 0x00004621u, 0x000200f9u, 0x0000460au, 0x000200f8u, 0x0000460au, 0x000700f5u, 0x00000009u, 0x0000877cu, 0x00004621u, 0x0000460bu, 0x0000463bu, 0x0000460cu, 0x0003003eu, 0x000045d1u, 0x0000877cu, 0x0003003eu, 0x00003d43u, 0x0000877cu, 0x000200f9u, 0x00003f19u, 0x000200f8u, 0x00003f19u, 0x000700f5u, 0x00000009u, 0x00008c13u, 0x000072a9u, 0x00003efeu, 0x0000877cu, 0x0000460au, 0x000200f9u, 0x00003ec1u, 0x000200f8u, 0x00003ec2u, 0x0004007cu, 0x000000a0u, 0x00003ec6u, 0x0000853eu, 0x000600a9u, 0x00000008u, 0x00003ec8u, 0x00003ea7u, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00003ec9u, 0x00003ec8u, 0x0003003eu, 0x00005a0au, 0x00003ce0u, 0x0003003eu, 0x00005a0bu, 0x00003ce3u, 0x0003003eu, 0x00003d64u, 0x000018feu, 0x0003003eu, 0x00003d65u, 0x00003ec6u, 0x0003003eu, 0x00003d66u, 0x00003ec9u, 0x0003003eu, 0x00003d67u, 0x00003ebeu, 0x0003003eu, 0x00003d68u, 0x00001924u, 0x00050041u, 0x00000007u, 0x000042e0u, 0x00003d65u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000042e1u, 0x000042e0u, 0x00050084u, 0x00000006u, 0x000042e2u, 0x00003ce3u, 0x000042e1u, 0x00050080u, 0x00000006u, 0x000042e3u, 0x00003ce0u, 0x000042e2u, 0x0003003eu, 0x000042d4u, 0x000042e3u, 0x00050041u, 0x00000007u, 0x000042e4u, 0x00003d65u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000042e5u, 0x000042e4u, 0x00050084u, 0x00000006u, 0x000042e6u, 0x000042e5u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000042e8u, 0x000042e3u, 0x000042e6u, 0x0003003eu, 0x000042d4u, 0x000042e8u, 0x000500c7u, 0x00000006u, 0x000042eau, 0x000042e8u, 0x00000767u, 0x0003003eu, 0x000042d4u, 0x000042eau, 0x000500c2u, 0x00000006u, 0x000042ecu, 0x000042eau, 0x00000194u, 0x0003003eu, 0x000042d5u, 0x000042ecu, 0x0004003du, 0x00000006u, 0x000042eeu, 0x000042e0u, 0x000500c7u, 0x00000006u, 0x000042efu, 0x000042eeu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000042f0u, 0x000042efu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000042f2u, 0x000042ecu, 0x000042f0u, 0x0003003eu, 0x000042d5u, 0x000042f2u, 0x000500c6u, 0x00000006u, 0x000042f4u, 0x000042f2u, 0x0000032au, 0x0003003eu, 0x000042d5u, 0x000042f4u, 0x00080041u, 0x000001f2u, 0x000042f7u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000042f4u, 0x0004003du, 0x000001adu, 0x000042f8u, 0x000042f7u, 0x00040071u, 0x00000006u, 0x000042f9u, 0x000042f8u, 0x0003003eu, 0x000042d6u, 0x000042f9u, 0x000500c2u, 0x00000006u, 0x000042fbu, 0x000042f9u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x000042fcu, 0x000042fbu, 0x00000836u, 0x00050080u, 0x00000006u, 0x000042feu, 0x000042fcu, 0x00003ec9u, 0x0003003eu, 0x000042d7u, 0x000042feu, 0x000500c6u, 0x00000006u, 0x00004301u, 0x000042feu, 0x00003ebeu, 0x0003003eu, 0x000042d7u, 0x00004301u, 0x000500c5u, 0x00000006u, 0x00004304u, 0x00000798u, 0x00004301u, 0x00080041u, 0x000001f2u, 0x00004305u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004304u, 0x0004003du, 0x000001adu, 0x00004306u, 0x00004305u, 0x00040071u, 0x00000006u, 0x00004307u, 0x00004306u, 0x0003003eu, 0x000042d6u, 0x00004307u, 0x000300f7u, 0x00004309u, 0x00000000u, 0x000400fau, 0x00001924u, 0x0000430au, 0x0000430bu, 0x000200f8u, 0x0000430bu, 0x0003003eu, 0x000042dau, 0x00004307u, 0x00060050u, 0x000002b6u, 0x00004325u, 0x00004307u, 0x00004307u, 0x00004307u, 0x000500c2u, 0x000002b6u, 0x00004326u, 0x00004325u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x00004328u, 0x00004326u, 0x0000b1c0u, 0x0003003eu, 0x00004321u, 0x00004328u, 0x000500c4u, 0x000002b6u, 0x0000432bu, 0x00004328u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x0000432eu, 0x00004328u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x0000432fu, 0x0000432bu, 0x0000432eu, 0x0003003eu, 0x00004321u, 0x0000432fu, 0x000500c7u, 0x00000006u, 0x00004331u, 0x00004307u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004332u, 0x00004331u, 0x00000689u, 0x0003003eu, 0x00004322u, 0x00004332u, 0x0004007cu, 0x00000052u, 0x00004334u, 0x0000432fu, 0x0004007cu, 0x00000008u, 0x00004336u, 0x00004332u, 0x00050051u, 0x00000008u, 0x00004337u, 0x00004334u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004338u, 0x00004334u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004339u, 0x00004334u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000433au, 0x00004337u, 0x00004338u, 0x00004339u, 0x00004336u, 0x0003003eu, 0x00004323u, 0x0000433au, 0x0003003eu, 0x000042d8u, 0x0000433au, 0x000200f9u, 0x00004309u, 0x000200f8u, 0x0000430au, 0x0003003eu, 0x000042d9u, 0x00004307u, 0x000500c2u, 0x00000006u, 0x00004315u, 0x00004307u, 0x000001e0u, 0x0003003eu, 0x00004311u, 0x00004315u, 0x000500c7u, 0x00000006u, 0x00004317u, 0x00004307u, 0x00000689u, 0x0003003eu, 0x00004312u, 0x00004317u, 0x0004007cu, 0x00000008u, 0x00004319u, 0x00004315u, 0x0004007cu, 0x00000008u, 0x0000431fu, 0x00004317u, 0x00070050u, 0x00000009u, 0x00004320u, 0x00004319u, 0x00004319u, 0x00004319u, 0x0000431fu, 0x0003003eu, 0x00004313u, 0x00004320u, 0x0003003eu, 0x000042d8u, 0x00004320u, 0x000200f9u, 0x00004309u, 0x000200f8u, 0x00004309u, 0x000700f5u, 0x00000009u, 0x0000877du, 0x00004320u, 0x0000430au, 0x0000433au, 0x0000430bu, 0x0003003eu, 0x000042dbu, 0x0000877du, 0x0003003eu, 0x00003d2bu, 0x0000877du, 0x000300f7u, 0x00003ed0u, 0x00000000u, 0x000400fau, 0x00001927u, 0x00003ed1u, 0x00003ed0u, 0x000200f8u, 0x00003ed1u, 0x00050050u, 0x0000004du, 0x00003ed4u, 0x000084f3u, 0x00003e94u, 0x0004007cu, 0x000000a0u, 0x00003ed5u, 0x00003ed4u, 0x0003003eu, 0x00005a0eu, 0x00003ce0u, 0x0003003eu, 0x00005a0fu, 0x00003ce3u, 0x0003003eu, 0x00003d6au, 0x000018feu, 0x0003003eu, 0x00003d6bu, 0x00003ed5u, 0x0003003eu, 0x00003d6cu, 0x0000032au, 0x0003003eu, 0x00003d6du, 0x00003ebeu, 0x0003003eu, 0x00003d6eu, 0x00001924u, 0x00050041u, 0x00000007u, 0x00004347u, 0x00003d6bu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004348u, 0x00004347u, 0x00050084u, 0x00000006u, 0x00004349u, 0x00003ce3u, 0x00004348u, 0x00050080u, 0x00000006u, 0x0000434au, 0x00003ce0u, 0x00004349u, 0x0003003eu, 0x0000433bu, 0x0000434au, 0x00050041u, 0x00000007u, 0x0000434bu, 0x00003d6bu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000434cu, 0x0000434bu, 0x00050084u, 0x00000006u, 0x0000434du, 0x0000434cu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000434fu, 0x0000434au, 0x0000434du, 0x0003003eu, 0x0000433bu, 0x0000434fu, 0x000500c7u, 0x00000006u, 0x00004351u, 0x0000434fu, 0x00000767u, 0x0003003eu, 0x0000433bu, 0x00004351u, 0x000500c2u, 0x00000006u, 0x00004353u, 0x00004351u, 0x00000194u, 0x0003003eu, 0x0000433cu, 0x00004353u, 0x0004003du, 0x00000006u, 0x00004355u, 0x00004347u, 0x000500c7u, 0x00000006u, 0x00004356u, 0x00004355u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004357u, 0x00004356u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004359u, 0x00004353u, 0x00004357u, 0x0003003eu, 0x0000433cu, 0x00004359u, 0x000500c6u, 0x00000006u, 0x0000435bu, 0x00004359u, 0x0000032au, 0x0003003eu, 0x0000433cu, 0x0000435bu, 0x00080041u, 0x000001f2u, 0x0000435eu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000435bu, 0x0004003du, 0x000001adu, 0x0000435fu, 0x0000435eu, 0x00040071u, 0x00000006u, 0x00004360u, 0x0000435fu, 0x0003003eu, 0x0000433du, 0x00004360u, 0x000500c2u, 0x00000006u, 0x00004362u, 0x00004360u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00004363u, 0x00004362u, 0x00000836u, 0x00050080u, 0x00000006u, 0x00004365u, 0x00004363u, 0x0000032au, 0x0003003eu, 0x0000433eu, 0x00004365u, 0x000500c6u, 0x00000006u, 0x00004368u, 0x00004365u, 0x00003ebeu, 0x0003003eu, 0x0000433eu, 0x00004368u, 0x000500c5u, 0x00000006u, 0x0000436bu, 0x00000798u, 0x00004368u, 0x00080041u, 0x000001f2u, 0x0000436cu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x0000436bu, 0x0004003du, 0x000001adu, 0x0000436du, 0x0000436cu, 0x00040071u, 0x00000006u, 0x0000436eu, 0x0000436du, 0x0003003eu, 0x0000433du, 0x0000436eu, 0x000300f7u, 0x00004370u, 0x00000000u, 0x000400fau, 0x00001924u, 0x00004371u, 0x00004372u, 0x000200f8u, 0x00004372u, 0x0003003eu, 0x00004341u, 0x0000436eu, 0x00060050u, 0x000002b6u, 0x0000438cu, 0x0000436eu, 0x0000436eu, 0x0000436eu, 0x000500c2u, 0x000002b6u, 0x0000438du, 0x0000438cu, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x0000438fu, 0x0000438du, 0x0000b1c0u, 0x0003003eu, 0x00004388u, 0x0000438fu, 0x000500c4u, 0x000002b6u, 0x00004392u, 0x0000438fu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004395u, 0x0000438fu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004396u, 0x00004392u, 0x00004395u, 0x0003003eu, 0x00004388u, 0x00004396u, 0x000500c7u, 0x00000006u, 0x00004398u, 0x0000436eu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004399u, 0x00004398u, 0x00000689u, 0x0003003eu, 0x00004389u, 0x00004399u, 0x0004007cu, 0x00000052u, 0x0000439bu, 0x00004396u, 0x0004007cu, 0x00000008u, 0x0000439du, 0x00004399u, 0x00050051u, 0x00000008u, 0x0000439eu, 0x0000439bu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000439fu, 0x0000439bu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000043a0u, 0x0000439bu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000043a1u, 0x0000439eu, 0x0000439fu, 0x000043a0u, 0x0000439du, 0x0003003eu, 0x0000438au, 0x000043a1u, 0x0003003eu, 0x0000433fu, 0x000043a1u, 0x000200f9u, 0x00004370u, 0x000200f8u, 0x00004371u, 0x0003003eu, 0x00004340u, 0x0000436eu, 0x000500c2u, 0x00000006u, 0x0000437cu, 0x0000436eu, 0x000001e0u, 0x0003003eu, 0x00004378u, 0x0000437cu, 0x000500c7u, 0x00000006u, 0x0000437eu, 0x0000436eu, 0x00000689u, 0x0003003eu, 0x00004379u, 0x0000437eu, 0x0004007cu, 0x00000008u, 0x00004380u, 0x0000437cu, 0x0004007cu, 0x00000008u, 0x00004386u, 0x0000437eu, 0x00070050u, 0x00000009u, 0x00004387u, 0x00004380u, 0x00004380u, 0x00004380u, 0x00004386u, 0x0003003eu, 0x0000437au, 0x00004387u, 0x0003003eu, 0x0000433fu, 0x00004387u, 0x000200f9u, 0x00004370u, 0x000200f8u, 0x00004370u, 0x000700f5u, 0x00000009u, 0x00008792u, 0x00004387u, 0x00004371u, 0x000043a1u, 0x00004372u, 0x0003003eu, 0x00004342u, 0x00008792u, 0x0003003eu, 0x00003d33u, 0x00008792u, 0x00050050u, 0x0000004du, 0x00003eddu, 0x000084b5u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003edeu, 0x00003eddu, 0x0003003eu, 0x00005a12u, 0x00003ce0u, 0x0003003eu, 0x00005a13u, 0x00003ce3u, 0x0003003eu, 0x00003d70u, 0x000018feu, 0x0003003eu, 0x00003d71u, 0x00003edeu, 0x0003003eu, 0x00003d72u, 0x0000032eu, 0x0003003eu, 0x00003d73u, 0x00003ebeu, 0x0003003eu, 0x00003d74u, 0x00001924u, 0x00050041u, 0x00000007u, 0x000043aeu, 0x00003d71u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000043afu, 0x000043aeu, 0x00050084u, 0x00000006u, 0x000043b0u, 0x00003ce3u, 0x000043afu, 0x00050080u, 0x00000006u, 0x000043b1u, 0x00003ce0u, 0x000043b0u, 0x0003003eu, 0x000043a2u, 0x000043b1u, 0x00050041u, 0x00000007u, 0x000043b2u, 0x00003d71u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000043b3u, 0x000043b2u, 0x00050084u, 0x00000006u, 0x000043b4u, 0x000043b3u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000043b6u, 0x000043b1u, 0x000043b4u, 0x0003003eu, 0x000043a2u, 0x000043b6u, 0x000500c7u, 0x00000006u, 0x000043b8u, 0x000043b6u, 0x00000767u, 0x0003003eu, 0x000043a2u, 0x000043b8u, 0x000500c2u, 0x00000006u, 0x000043bau, 0x000043b8u, 0x00000194u, 0x0003003eu, 0x000043a3u, 0x000043bau, 0x0004003du, 0x00000006u, 0x000043bcu, 0x000043aeu, 0x000500c7u, 0x00000006u, 0x000043bdu, 0x000043bcu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000043beu, 0x000043bdu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000043c0u, 0x000043bau, 0x000043beu, 0x0003003eu, 0x000043a3u, 0x000043c0u, 0x000500c6u, 0x00000006u, 0x000043c2u, 0x000043c0u, 0x0000032au, 0x0003003eu, 0x000043a3u, 0x000043c2u, 0x00080041u, 0x000001f2u, 0x000043c5u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000043c2u, 0x0004003du, 0x000001adu, 0x000043c6u, 0x000043c5u, 0x00040071u, 0x00000006u, 0x000043c7u, 0x000043c6u, 0x0003003eu, 0x000043a4u, 0x000043c7u, 0x000500c2u, 0x00000006u, 0x000043c9u, 0x000043c7u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x000043cau, 0x000043c9u, 0x00000836u, 0x00050080u, 0x00000006u, 0x000043ccu, 0x000043cau, 0x0000032eu, 0x0003003eu, 0x000043a5u, 0x000043ccu, 0x000500c6u, 0x00000006u, 0x000043cfu, 0x000043ccu, 0x00003ebeu, 0x0003003eu, 0x000043a5u, 0x000043cfu, 0x000500c5u, 0x00000006u, 0x000043d2u, 0x00000798u, 0x000043cfu, 0x00080041u, 0x000001f2u, 0x000043d3u, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x000043d2u, 0x0004003du, 0x000001adu, 0x000043d4u, 0x000043d3u, 0x00040071u, 0x00000006u, 0x000043d5u, 0x000043d4u, 0x0003003eu, 0x000043a4u, 0x000043d5u, 0x000300f7u, 0x000043d7u, 0x00000000u, 0x000400fau, 0x00001924u, 0x000043d8u, 0x000043d9u, 0x000200f8u, 0x000043d9u, 0x0003003eu, 0x000043a8u, 0x000043d5u, 0x00060050u, 0x000002b6u, 0x000043f3u, 0x000043d5u, 0x000043d5u, 0x000043d5u, 0x000500c2u, 0x000002b6u, 0x000043f4u, 0x000043f3u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x000043f6u, 0x000043f4u, 0x0000b1c0u, 0x0003003eu, 0x000043efu, 0x000043f6u, 0x000500c4u, 0x000002b6u, 0x000043f9u, 0x000043f6u, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x000043fcu, 0x000043f6u, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x000043fdu, 0x000043f9u, 0x000043fcu, 0x0003003eu, 0x000043efu, 0x000043fdu, 0x000500c7u, 0x00000006u, 0x000043ffu, 0x000043d5u, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004400u, 0x000043ffu, 0x00000689u, 0x0003003eu, 0x000043f0u, 0x00004400u, 0x0004007cu, 0x00000052u, 0x00004402u, 0x000043fdu, 0x0004007cu, 0x00000008u, 0x00004404u, 0x00004400u, 0x00050051u, 0x00000008u, 0x00004405u, 0x00004402u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004406u, 0x00004402u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004407u, 0x00004402u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00004408u, 0x00004405u, 0x00004406u, 0x00004407u, 0x00004404u, 0x0003003eu, 0x000043f1u, 0x00004408u, 0x0003003eu, 0x000043a6u, 0x00004408u, 0x000200f9u, 0x000043d7u, 0x000200f8u, 0x000043d8u, 0x0003003eu, 0x000043a7u, 0x000043d5u, 0x000500c2u, 0x00000006u, 0x000043e3u, 0x000043d5u, 0x000001e0u, 0x0003003eu, 0x000043dfu, 0x000043e3u, 0x000500c7u, 0x00000006u, 0x000043e5u, 0x000043d5u, 0x00000689u, 0x0003003eu, 0x000043e0u, 0x000043e5u, 0x0004007cu, 0x00000008u, 0x000043e7u, 0x000043e3u, 0x0004007cu, 0x00000008u, 0x000043edu, 0x000043e5u, 0x00070050u, 0x00000009u, 0x000043eeu, 0x000043e7u, 0x000043e7u, 0x000043e7u, 0x000043edu, 0x0003003eu, 0x000043e1u, 0x000043eeu, 0x0003003eu, 0x000043a6u, 0x000043eeu, 0x000200f9u, 0x000043d7u, 0x000200f8u, 0x000043d7u, 0x000700f5u, 0x00000009u, 0x000087a8u, 0x000043eeu, 0x000043d8u, 0x00004408u, 0x000043d9u, 0x0003003eu, 0x000043a9u, 0x000087a8u, 0x0003003eu, 0x00003d3bu, 0x000087a8u, 0x000200f9u, 0x00003ed0u, 0x000200f8u, 0x00003ed0u, 0x000700f5u, 0x00000009u, 0x00008b2cu, 0x000072a9u, 0x00004309u, 0x000087a8u, 0x000043d7u, 0x000700f5u, 0x00000009u, 0x00008961u, 0x000072a9u, 0x00004309u, 0x00008792u, 0x000043d7u, 0x000300f7u, 0x00003ee5u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x00003ee6u, 0x00003ee5u, 0x000200f8u, 0x00003ee6u, 0x00050050u, 0x0000004du, 0x00003ee9u, 0x000084f3u, 0x00003e96u, 0x0004007cu, 0x000000a0u, 0x00003eeau, 0x00003ee9u, 0x0003003eu, 0x00005a16u, 0x00003ce0u, 0x0003003eu, 0x00005a17u, 0x00003ce3u, 0x0003003eu, 0x00003d76u, 0x000018feu, 0x0003003eu, 0x00003d77u, 0x00003eeau, 0x0003003eu, 0x00003d78u, 0x00000331u, 0x0003003eu, 0x00003d79u, 0x00003ebeu, 0x0003003eu, 0x00003d7au, 0x00001924u, 0x00050041u, 0x00000007u, 0x00004415u, 0x00003d77u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00004416u, 0x00004415u, 0x00050084u, 0x00000006u, 0x00004417u, 0x00003ce3u, 0x00004416u, 0x00050080u, 0x00000006u, 0x00004418u, 0x00003ce0u, 0x00004417u, 0x0003003eu, 0x00004409u, 0x00004418u, 0x00050041u, 0x00000007u, 0x00004419u, 0x00003d77u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000441au, 0x00004419u, 0x00050084u, 0x00000006u, 0x0000441bu, 0x0000441au, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000441du, 0x00004418u, 0x0000441bu, 0x0003003eu, 0x00004409u, 0x0000441du, 0x000500c7u, 0x00000006u, 0x0000441fu, 0x0000441du, 0x00000767u, 0x0003003eu, 0x00004409u, 0x0000441fu, 0x000500c2u, 0x00000006u, 0x00004421u, 0x0000441fu, 0x00000194u, 0x0003003eu, 0x0000440au, 0x00004421u, 0x0004003du, 0x00000006u, 0x00004423u, 0x00004415u, 0x000500c7u, 0x00000006u, 0x00004424u, 0x00004423u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00004425u, 0x00004424u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00004427u, 0x00004421u, 0x00004425u, 0x0003003eu, 0x0000440au, 0x00004427u, 0x000500c6u, 0x00000006u, 0x00004429u, 0x00004427u, 0x0000032au, 0x0003003eu, 0x0000440au, 0x00004429u, 0x00080041u, 0x000001f2u, 0x0000442cu, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004429u, 0x0004003du, 0x000001adu, 0x0000442du, 0x0000442cu, 0x00040071u, 0x00000006u, 0x0000442eu, 0x0000442du, 0x0003003eu, 0x0000440bu, 0x0000442eu, 0x000500c2u, 0x00000006u, 0x00004430u, 0x0000442eu, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00004431u, 0x00004430u, 0x00000836u, 0x00050080u, 0x00000006u, 0x00004433u, 0x00004431u, 0x00000331u, 0x0003003eu, 0x0000440cu, 0x00004433u, 0x000500c6u, 0x00000006u, 0x00004436u, 0x00004433u, 0x00003ebeu, 0x0003003eu, 0x0000440cu, 0x00004436u, 0x000500c5u, 0x00000006u, 0x00004439u, 0x00000798u, 0x00004436u, 0x00080041u, 0x000001f2u, 0x0000443au, 0x00000796u, 0x00000185u, 0x000018feu, 0x00000185u, 0x00004439u, 0x0004003du, 0x000001adu, 0x0000443bu, 0x0000443au, 0x00040071u, 0x00000006u, 0x0000443cu, 0x0000443bu, 0x0003003eu, 0x0000440bu, 0x0000443cu, 0x000300f7u, 0x0000443eu, 0x00000000u, 0x000400fau, 0x00001924u, 0x0000443fu, 0x00004440u, 0x000200f8u, 0x00004440u, 0x0003003eu, 0x0000440fu, 0x0000443cu, 0x00060050u, 0x000002b6u, 0x0000445au, 0x0000443cu, 0x0000443cu, 0x0000443cu, 0x000500c2u, 0x000002b6u, 0x0000445bu, 0x0000445au, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x0000445du, 0x0000445bu, 0x0000b1c0u, 0x0003003eu, 0x00004456u, 0x0000445du, 0x000500c4u, 0x000002b6u, 0x00004460u, 0x0000445du, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00004463u, 0x0000445du, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00004464u, 0x00004460u, 0x00004463u, 0x0003003eu, 0x00004456u, 0x00004464u, 0x000500c7u, 0x00000006u, 0x00004466u, 0x0000443cu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00004467u, 0x00004466u, 0x00000689u, 0x0003003eu, 0x00004457u, 0x00004467u, 0x0004007cu, 0x00000052u, 0x00004469u, 0x00004464u, 0x0004007cu, 0x00000008u, 0x0000446bu, 0x00004467u, 0x00050051u, 0x00000008u, 0x0000446cu, 0x00004469u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000446du, 0x00004469u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000446eu, 0x00004469u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000446fu, 0x0000446cu, 0x0000446du, 0x0000446eu, 0x0000446bu, 0x0003003eu, 0x00004458u, 0x0000446fu, 0x0003003eu, 0x0000440du, 0x0000446fu, 0x000200f9u, 0x0000443eu, 0x000200f8u, 0x0000443fu, 0x0003003eu, 0x0000440eu, 0x0000443cu, 0x000500c2u, 0x00000006u, 0x0000444au, 0x0000443cu, 0x000001e0u, 0x0003003eu, 0x00004446u, 0x0000444au, 0x000500c7u, 0x00000006u, 0x0000444cu, 0x0000443cu, 0x00000689u, 0x0003003eu, 0x00004447u, 0x0000444cu, 0x0004007cu, 0x00000008u, 0x0000444eu, 0x0000444au, 0x0004007cu, 0x00000008u, 0x00004454u, 0x0000444cu, 0x00070050u, 0x00000009u, 0x00004455u, 0x0000444eu, 0x0000444eu, 0x0000444eu, 0x00004454u, 0x0003003eu, 0x00004448u, 0x00004455u, 0x0003003eu, 0x0000440du, 0x00004455u, 0x000200f9u, 0x0000443eu, 0x000200f8u, 0x0000443eu, 0x000700f5u, 0x00000009u, 0x000087d4u, 0x00004455u, 0x0000443fu, 0x0000446fu, 0x00004440u, 0x0003003eu, 0x00004410u, 0x000087d4u, 0x0003003eu, 0x00003d43u, 0x000087d4u, 0x000200f9u, 0x00003ee5u, 0x000200f8u, 0x00003ee5u, 0x000700f5u, 0x00000009u, 0x00008c0du, 0x000072a9u, 0x00003ed0u, 0x000087d4u, 0x0000443eu, 0x000200f9u, 0x00003ec1u, 0x000200f8u, 0x00003ec1u, 0x000900f5u, 0x00000009u, 0x00008c0cu, 0x00008c0du, 0x00003ee5u, 0x00008c13u, 0x00003f19u, 0x00008c18u, 0x00003f47u, 0x000900f5u, 0x00000009u, 0x00008b2au, 0x00008b2cu, 0x00003ee5u, 0x00008b31u, 0x00003f19u, 0x00008b35u, 0x00003f47u, 0x000900f5u, 0x00000009u, 0x00008a45u, 0x0000877du, 0x00003ee5u, 0x00008725u, 0x00003f19u, 0x000086c7u, 0x00003f47u, 0x000900f5u, 0x00000009u, 0x0000895fu, 0x00008961u, 0x00003ee5u, 0x00008967u, 0x00003f19u, 0x0000896cu, 0x00003f47u, 0x000200f9u, 0x00003eb8u, 0x000200f8u, 0x00003eb8u, 0x000700f5u, 0x00000009u, 0x00008b5bu, 0x000072a9u, 0x00003eb4u, 0x00008c0cu, 0x00003ec1u, 0x000700f5u, 0x00000009u, 0x00008a79u, 0x000072a9u, 0x00003eb4u, 0x00008b2au, 0x00003ec1u, 0x000700f5u, 0x00000009u, 0x00008994u, 0x000072a9u, 0x00003eb4u, 0x00008a45u, 0x00003ec1u, 0x000700f5u, 0x00000009u, 0x000088aeu, 0x000072a9u, 0x00003eb4u, 0x0000895fu, 0x00003ec1u, 0x000200f9u, 0x00003eb3u, 0x000200f8u, 0x00003eb3u, 0x000700f5u, 0x00000009u, 0x00008b5au, 0x00008b5bu, 0x00003eb8u, 0x00008c1du, 0x00003f54u, 0x000700f5u, 0x00000009u, 0x00008a78u, 0x00008a79u, 0x00003eb8u, 0x00008b38u, 0x00003f54u, 0x000700f5u, 0x00000009u, 0x00008993u, 0x00008994u, 0x00003eb8u, 0x00008a55u, 0x00003f54u, 0x000700f5u, 0x00000009u, 0x000088adu, 0x000088aeu, 0x00003eb8u, 0x00008970u, 0x00003f54u, 0x000300f7u, 0x0000416eu, 0x00000000u, 0x000400fau, 0x00001960u, 0x0000416fu, 0x00004170u, 0x000200f8u, 0x00004170u, 0x000300f7u, 0x000041a2u, 0x00000000u, 0x000400fau, 0x00003ea5u, 0x000041a3u, 0x000041a4u, 0x000200f8u, 0x000041a4u, 0x000300f7u, 0x000041d0u, 0x00000000u, 0x000400fau, 0x00003e9fu, 0x000041d1u, 0x000041d2u, 0x000200f8u, 0x000041d2u, 0x000300f7u, 0x000041e0u, 0x00000000u, 0x000400fau, 0x00003ea7u, 0x000041e1u, 0x000041e2u, 0x000200f8u, 0x000041e2u, 0x0004003du, 0x0000004du, 0x000041e7u, 0x00003d17u, 0x0003003eu, 0x00003e4cu, 0x000041e7u, 0x000200f9u, 0x000041e0u, 0x000200f8u, 0x000041e1u, 0x0004003du, 0x0000004du, 0x000041e3u, 0x00003d17u, 0x0007004fu, 0x0000004du, 0x000041e4u, 0x000041e3u, 0x000041e3u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x000041e6u, 0x0000b1c5u, 0x000041e4u, 0x0003003eu, 0x00003e4cu, 0x000041e6u, 0x000200f9u, 0x000041e0u, 0x000200f8u, 0x000041e0u, 0x000700f5u, 0x0000004du, 0x000088abu, 0x000041e6u, 0x000041e1u, 0x000041e7u, 0x000041e2u, 0x00050051u, 0x00000008u, 0x000041e9u, 0x000088abu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000041eau, 0x000088abu, 0x00000001u, 0x0003003eu, 0x00003e4bu, 0x000088abu, 0x00050082u, 0x00000009u, 0x000041eeu, 0x000088adu, 0x00008993u, 0x00050041u, 0x00000038u, 0x000041efu, 0x00003e4bu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000041f0u, 0x000041efu, 0x00070050u, 0x00000009u, 0x000041f1u, 0x000041f0u, 0x000041f0u, 0x000041f0u, 0x000041f0u, 0x00050084u, 0x00000009u, 0x000041f2u, 0x000041eeu, 0x000041f1u, 0x0003003eu, 0x00003e3du, 0x000041f2u, 0x00050082u, 0x00000009u, 0x000041f5u, 0x00008a78u, 0x00008993u, 0x00050041u, 0x00000038u, 0x000041f6u, 0x00003e4bu, 0x0000032au, 0x0004003du, 0x00000008u, 0x000041f7u, 0x000041f6u, 0x00070050u, 0x00000009u, 0x000041f8u, 0x000041f7u, 0x000041f7u, 0x000041f7u, 0x000041f7u, 0x00050084u, 0x00000009u, 0x000041f9u, 0x000041f5u, 0x000041f8u, 0x00050080u, 0x00000009u, 0x000041fbu, 0x000041f2u, 0x000041f9u, 0x0003003eu, 0x00003e3du, 0x000041fbu, 0x00050080u, 0x00000009u, 0x000041feu, 0x000041fbu, 0x0000b1c6u, 0x0003003eu, 0x00003e3du, 0x000041feu, 0x000500c3u, 0x00000009u, 0x00004201u, 0x000041feu, 0x0000b1c7u, 0x0003003eu, 0x00003e3du, 0x00004201u, 0x00050080u, 0x00000009u, 0x00004204u, 0x00004201u, 0x00008993u, 0x0003003eu, 0x00003e3du, 0x00004204u, 0x000200f9u, 0x000041d0u, 0x000200f8u, 0x000041d1u, 0x00050080u, 0x00000009u, 0x000041d5u, 0x00008993u, 0x00008a78u, 0x00050080u, 0x00000009u, 0x000041d7u, 0x000041d5u, 0x000088adu, 0x00050080u, 0x00000009u, 0x000041d9u, 0x000041d7u, 0x00008b5au, 0x00050080u, 0x00000009u, 0x000041dbu, 0x000041d9u, 0x0000b1c4u, 0x000500c3u, 0x00000009u, 0x000041ddu, 0x000041dbu, 0x0000b1c4u, 0x0003003eu, 0x00003e3du, 0x000041ddu, 0x000200f9u, 0x000041d0u, 0x000200f8u, 0x000041d0u, 0x000700f5u, 0x00000009u, 0x00008d01u, 0x000041ddu, 0x000041d1u, 0x00004204u, 0x000041e0u, 0x000200f9u, 0x000041a2u, 0x000200f8u, 0x000041a3u, 0x000300f7u, 0x000041a6u, 0x00000000u, 0x000400fau, 0x00001927u, 0x000041a7u, 0x000041a8u, 0x000200f8u, 0x000041a8u, 0x0003003eu, 0x00003e3du, 0x00008993u, 0x000200f9u, 0x000041a6u, 0x000200f8u, 0x000041a7u, 0x000500c7u, 0x00000008u, 0x000041aau, 0x000084b5u, 0x00000194u, 0x000500c4u, 0x00000008u, 0x000041abu, 0x000041aau, 0x0000019du, 0x0004003du, 0x00000008u, 0x000041adu, 0x00003e75u, 0x000500c3u, 0x00000008u, 0x000041aeu, 0x000041adu, 0x00000194u, 0x000500c5u, 0x00000008u, 0x000041afu, 0x000041abu, 0x000041aeu, 0x0003003eu, 0x00003e3eu, 0x000041afu, 0x0004003du, 0x00000008u, 0x000041b2u, 0x00003e77u, 0x00050050u, 0x0000004du, 0x000041b3u, 0x000041afu, 0x000041b2u, 0x0007004fu, 0x0000004du, 0x000041b5u, 0x00008993u, 0x00008993u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003e40u, 0x000041b5u, 0x0007004fu, 0x0000004du, 0x000041b7u, 0x000088adu, 0x000088adu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003e41u, 0x000041b7u, 0x0007004fu, 0x0000004du, 0x000041b9u, 0x00008a78u, 0x00008a78u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003e42u, 0x000041b9u, 0x0007004fu, 0x0000004du, 0x000041bbu, 0x00008b5au, 0x00008b5au, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003e43u, 0x000041bbu, 0x0003003eu, 0x00003e44u, 0x000041b3u, 0x00050041u, 0x00000038u, 0x0000537au, 0x00003e44u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000537bu, 0x0000537au, 0x00050041u, 0x00000038u, 0x0000537cu, 0x00003e44u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000537du, 0x0000537cu, 0x00050080u, 0x00000008u, 0x0000537eu, 0x0000537bu, 0x0000537du, 0x0003003eu, 0x00005374u, 0x0000537eu, 0x000500afu, 0x00000058u, 0x00005380u, 0x0000537eu, 0x000002e0u, 0x00050050u, 0x00000489u, 0x00005383u, 0x00005380u, 0x00005380u, 0x000600a9u, 0x0000004du, 0x00005384u, 0x00005383u, 0x000041bbu, 0x000041b5u, 0x0003003eu, 0x00005375u, 0x00005384u, 0x000300f7u, 0x00005387u, 0x00000000u, 0x000400fau, 0x00005380u, 0x00005388u, 0x00005389u, 0x000200f8u, 0x00005389u, 0x0004003du, 0x0000004du, 0x0000538eu, 0x00003e44u, 0x0003003eu, 0x00005377u, 0x0000538eu, 0x000200f9u, 0x00005387u, 0x000200f8u, 0x00005388u, 0x0004003du, 0x0000004du, 0x0000538au, 0x00003e44u, 0x0007004fu, 0x0000004du, 0x0000538bu, 0x0000538au, 0x0000538au, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x0000538du, 0x0000b1c5u, 0x0000538bu, 0x0003003eu, 0x00005377u, 0x0000538du, 0x000200f9u, 0x00005387u, 0x000200f8u, 0x00005387u, 0x000700f5u, 0x0000004du, 0x00008ca4u, 0x0000538du, 0x00005388u, 0x0000538eu, 0x00005389u, 0x00050051u, 0x00000008u, 0x00005390u, 0x00008ca4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005391u, 0x00008ca4u, 0x00000001u, 0x0003003eu, 0x00005376u, 0x00008ca4u, 0x00050082u, 0x0000004du, 0x00005395u, 0x000041b7u, 0x00005384u, 0x00050041u, 0x00000038u, 0x00005396u, 0x00005376u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005397u, 0x00005396u, 0x00050050u, 0x0000004du, 0x00005398u, 0x00005397u, 0x00005397u, 0x00050084u, 0x0000004du, 0x00005399u, 0x00005395u, 0x00005398u, 0x0003003eu, 0x00005378u, 0x00005399u, 0x00050082u, 0x0000004du, 0x0000539cu, 0x000041b9u, 0x00005384u, 0x00050041u, 0x00000038u, 0x0000539du, 0x00005376u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000539eu, 0x0000539du, 0x00050050u, 0x0000004du, 0x0000539fu, 0x0000539eu, 0x0000539eu, 0x00050084u, 0x0000004du, 0x000053a0u, 0x0000539cu, 0x0000539fu, 0x00050080u, 0x0000004du, 0x000053a2u, 0x00005399u, 0x000053a0u, 0x0003003eu, 0x00005378u, 0x000053a2u, 0x00050080u, 0x0000004du, 0x000053a5u, 0x000053a2u, 0x00000bcfu, 0x0003003eu, 0x00005378u, 0x000053a5u, 0x000500c3u, 0x0000004du, 0x000053a8u, 0x000053a5u, 0x0000b1bcu, 0x0003003eu, 0x00005378u, 0x000053a8u, 0x00050080u, 0x0000004du, 0x000053abu, 0x000053a8u, 0x00005384u, 0x0003003eu, 0x00005378u, 0x000053abu, 0x0003003eu, 0x00005379u, 0x000053abu, 0x0003003eu, 0x00003e3fu, 0x000053abu, 0x0007004fu, 0x0000004du, 0x000041beu, 0x00008993u, 0x00008993u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003e46u, 0x000041beu, 0x0007004fu, 0x0000004du, 0x000041c0u, 0x000088adu, 0x000088adu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003e47u, 0x000041c0u, 0x0007004fu, 0x0000004du, 0x000041c2u, 0x00008a78u, 0x00008a78u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003e48u, 0x000041c2u, 0x0007004fu, 0x0000004du, 0x000041c4u, 0x00008b5au, 0x00008b5au, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003e49u, 0x000041c4u, 0x0004003du, 0x0000004du, 0x000041c5u, 0x00003d17u, 0x0003003eu, 0x00003e4au, 0x000041c5u, 0x00050041u, 0x00000038u, 0x000053b3u, 0x00003e4au, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000053b4u, 0x000053b3u, 0x00050041u, 0x00000038u, 0x000053b5u, 0x00003e4au, 0x0000032au, 0x0004003du, 0x00000008u, 0x000053b6u, 0x000053b5u, 0x00050080u, 0x00000008u, 0x000053b7u, 0x000053b4u, 0x000053b6u, 0x0003003eu, 0x000053adu, 0x000053b7u, 0x000500afu, 0x00000058u, 0x000053b9u, 0x000053b7u, 0x000002e0u, 0x00050050u, 0x00000489u, 0x000053bcu, 0x000053b9u, 0x000053b9u, 0x000600a9u, 0x0000004du, 0x000053bdu, 0x000053bcu, 0x000041c4u, 0x000041beu, 0x0003003eu, 0x000053aeu, 0x000053bdu, 0x000300f7u, 0x000053c0u, 0x00000000u, 0x000400fau, 0x000053b9u, 0x000053c1u, 0x000053c2u, 0x000200f8u, 0x000053c2u, 0x0004003du, 0x0000004du, 0x000053c7u, 0x00003e4au, 0x0003003eu, 0x000053b0u, 0x000053c7u, 0x000200f9u, 0x000053c0u, 0x000200f8u, 0x000053c1u, 0x0004003du, 0x0000004du, 0x000053c3u, 0x00003e4au, 0x0007004fu, 0x0000004du, 0x000053c4u, 0x000053c3u, 0x000053c3u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x000053c6u, 0x0000b1c5u, 0x000053c4u, 0x0003003eu, 0x000053b0u, 0x000053c6u, 0x000200f9u, 0x000053c0u, 0x000200f8u, 0x000053c0u, 0x000700f5u, 0x0000004du, 0x00008cacu, 0x000053c6u, 0x000053c1u, 0x000053c7u, 0x000053c2u, 0x00050051u, 0x00000008u, 0x000053c9u, 0x00008cacu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000053cau, 0x00008cacu, 0x00000001u, 0x0003003eu, 0x000053afu, 0x00008cacu, 0x00050082u, 0x0000004du, 0x000053ceu, 0x000041c0u, 0x000053bdu, 0x00050041u, 0x00000038u, 0x000053cfu, 0x000053afu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000053d0u, 0x000053cfu, 0x00050050u, 0x0000004du, 0x000053d1u, 0x000053d0u, 0x000053d0u, 0x00050084u, 0x0000004du, 0x000053d2u, 0x000053ceu, 0x000053d1u, 0x0003003eu, 0x000053b1u, 0x000053d2u, 0x00050082u, 0x0000004du, 0x000053d5u, 0x000041c2u, 0x000053bdu, 0x00050041u, 0x00000038u, 0x000053d6u, 0x000053afu, 0x0000032au, 0x0004003du, 0x00000008u, 0x000053d7u, 0x000053d6u, 0x00050050u, 0x0000004du, 0x000053d8u, 0x000053d7u, 0x000053d7u, 0x00050084u, 0x0000004du, 0x000053d9u, 0x000053d5u, 0x000053d8u, 0x00050080u, 0x0000004du, 0x000053dbu, 0x000053d2u, 0x000053d9u, 0x0003003eu, 0x000053b1u, 0x000053dbu, 0x00050080u, 0x0000004du, 0x000053deu, 0x000053dbu, 0x00000bcfu, 0x0003003eu, 0x000053b1u, 0x000053deu, 0x000500c3u, 0x0000004du, 0x000053e1u, 0x000053deu, 0x0000b1bcu, 0x0003003eu, 0x000053b1u, 0x000053e1u, 0x00050080u, 0x0000004du, 0x000053e4u, 0x000053e1u, 0x000053bdu, 0x0003003eu, 0x000053b1u, 0x000053e4u, 0x0003003eu, 0x000053b2u, 0x000053e4u, 0x0003003eu, 0x00003e45u, 0x000053e4u, 0x00050051u, 0x00000008u, 0x000041c9u, 0x000053abu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000041cau, 0x000053abu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000041cbu, 0x000053e4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000041ccu, 0x000053e4u, 0x00000001u, 0x00070050u, 0x00000009u, 0x000041cdu, 0x000041c9u, 0x000041cau, 0x000041cbu, 0x000041ccu, 0x0003003eu, 0x00003e3du, 0x000041cdu, 0x000200f9u, 0x000041a6u, 0x000200f8u, 0x000041a6u, 0x000700f5u, 0x00000009u, 0x00008d00u, 0x000041cdu, 0x000053c0u, 0x00008993u, 0x000041a8u, 0x000200f9u, 0x000041a2u, 0x000200f8u, 0x000041a2u, 0x000700f5u, 0x00000009u, 0x00008cffu, 0x00008d00u, 0x000041a6u, 0x00008d01u, 0x000041d0u, 0x000200f9u, 0x0000416eu, 0x000200f8u, 0x0000416fu, 0x00050051u, 0x00000008u, 0x00004172u, 0x000083f4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00004173u, 0x000083f4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00004174u, 0x000083f4u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00004175u, 0x000083f4u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00004177u, 0x000083f4u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00003e39u, 0x00004177u, 0x000300f7u, 0x0000417au, 0x00000000u, 0x000400fau, 0x00003ea7u, 0x0000417bu, 0x0000417cu, 0x000200f8u, 0x0000417cu, 0x0004003du, 0x00000009u, 0x0000417fu, 0x00003e39u, 0x0007004fu, 0x0000004du, 0x00004180u, 0x0000417fu, 0x0000417fu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003e3bu, 0x00004180u, 0x000200f9u, 0x0000417au, 0x000200f8u, 0x0000417bu, 0x0004003du, 0x00000009u, 0x0000417du, 0x00003e39u, 0x0007004fu, 0x0000004du, 0x0000417eu, 0x0000417du, 0x0000417du, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00003e3bu, 0x0000417eu, 0x000200f9u, 0x0000417au, 0x000200f8u, 0x0000417au, 0x000700f5u, 0x0000004du, 0x00008cfau, 0x0000417eu, 0x0000417bu, 0x00004180u, 0x0000417cu, 0x0003003eu, 0x00003e3au, 0x00008cfau, 0x00050041u, 0x00000038u, 0x00004182u, 0x00003e3au, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00004183u, 0x00004182u, 0x00050082u, 0x00000009u, 0x00004186u, 0x000088adu, 0x00008993u, 0x00070050u, 0x00000009u, 0x00004187u, 0x00004183u, 0x00004183u, 0x00004183u, 0x00004183u, 0x00050084u, 0x00000009u, 0x00004188u, 0x00004187u, 0x00004186u, 0x00050041u, 0x00000038u, 0x00004189u, 0x00003e3au, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000418au, 0x00004189u, 0x00050082u, 0x00000009u, 0x0000418du, 0x00008a78u, 0x00008993u, 0x00070050u, 0x00000009u, 0x0000418eu, 0x0000418au, 0x0000418au, 0x0000418au, 0x0000418au, 0x00050084u, 0x00000009u, 0x0000418fu, 0x0000418eu, 0x0000418du, 0x00050080u, 0x00000009u, 0x00004190u, 0x00004188u, 0x0000418fu, 0x00050080u, 0x00000009u, 0x00004192u, 0x00004190u, 0x0000b1b9u, 0x0003003eu, 0x00003e3cu, 0x00004192u, 0x000500c3u, 0x00000009u, 0x00004195u, 0x00004192u, 0x0000b1c3u, 0x0003003eu, 0x00003e3cu, 0x00004195u, 0x00050041u, 0x00000038u, 0x00004196u, 0x00003e39u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00004197u, 0x00004196u, 0x00070050u, 0x00000009u, 0x00004199u, 0x00004197u, 0x00004197u, 0x00004197u, 0x00004197u, 0x00050080u, 0x00000009u, 0x0000419au, 0x00004195u, 0x00004199u, 0x0003003eu, 0x00003e3cu, 0x0000419au, 0x00050051u, 0x00000008u, 0x0000419cu, 0x0000419au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000419du, 0x0000419au, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000419eu, 0x0000419au, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000419fu, 0x0000419au, 0x00000003u, 0x0003003eu, 0x00003e3du, 0x0000419au, 0x000200f9u, 0x0000416eu, 0x000200f8u, 0x0000416eu, 0x000700f5u, 0x00000009u, 0x00008cfeu, 0x0000419au, 0x0000417au, 0x00008cffu, 0x000041a2u, 0x0003003eu, 0x00003e4du, 0x00008cfeu, 0x0003003eu, 0x00001886u, 0x00008cfeu, 0x000400a8u, 0x00000058u, 0x00001ab9u, 0x00001927u, 0x000400a8u, 0x00000058u, 0x00001abbu, 0x00001921u, 0x000500a7u, 0x00000058u, 0x00001abcu, 0x00001ab9u, 0x00001abbu, 0x000500a7u, 0x00000058u, 0x00001abfu, 0x00001abcu, 0x00001a9au, 0x000300f7u, 0x00001ac0u, 0x00000000u, 0x000400fau, 0x00001abfu, 0x00001ac1u, 0x00001ac0u, 0x000200f8u, 0x00001ac1u, 0x0003003eu, 0x00001895u, 0x00008cfeu, 0x0003003eu, 0x00001896u, 0x000020f0u, 0x00050051u, 0x00000008u, 0x000053edu, 0x00008cfeu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000053eeu, 0x00008cfeu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000053efu, 0x00008cfeu, 0x00000002u, 0x00050051u, 0x00000008u, 0x000053f0u, 0x00008cfeu, 0x00000003u, 0x000600cau, 0x00000009u, 0x000053f2u, 0x00008cfeu, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x000053e6u, 0x000053f2u, 0x00050041u, 0x00000038u, 0x000053f3u, 0x000053e6u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000053f4u, 0x000053f3u, 0x00050041u, 0x00000038u, 0x000053f5u, 0x00001896u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000053f6u, 0x000053f5u, 0x00050041u, 0x00000038u, 0x000053f7u, 0x000053e6u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000053f8u, 0x000053f7u, 0x00050084u, 0x00000008u, 0x000053f9u, 0x000053f6u, 0x000053f8u, 0x00050080u, 0x00000008u, 0x000053fau, 0x000053f9u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x000053fbu, 0x000053fau, 0x000001e0u, 0x00050080u, 0x00000008u, 0x000053fcu, 0x000053f4u, 0x000053fbu, 0x0003003eu, 0x000053e7u, 0x000053fcu, 0x0004003du, 0x00000008u, 0x000053feu, 0x000053f3u, 0x00050041u, 0x00000038u, 0x000053ffu, 0x00001896u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00005400u, 0x000053ffu, 0x00050041u, 0x00000038u, 0x00005401u, 0x000053e6u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005402u, 0x00005401u, 0x00050084u, 0x00000008u, 0x00005403u, 0x00005400u, 0x00005402u, 0x00050041u, 0x00000038u, 0x00005404u, 0x00001896u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005405u, 0x00005404u, 0x0004003du, 0x00000008u, 0x00005407u, 0x000053f7u, 0x00050084u, 0x00000008u, 0x00005408u, 0x00005405u, 0x00005407u, 0x00050080u, 0x00000008u, 0x00005409u, 0x00005403u, 0x00005408u, 0x00050080u, 0x00000008u, 0x0000540au, 0x00005409u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x0000540bu, 0x0000540au, 0x000001e0u, 0x00050080u, 0x00000008u, 0x0000540cu, 0x000053feu, 0x0000540bu, 0x0003003eu, 0x000053e8u, 0x0000540cu, 0x0004003du, 0x00000008u, 0x0000540eu, 0x000053f3u, 0x00050041u, 0x00000038u, 0x0000540fu, 0x00001896u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005410u, 0x0000540fu, 0x0004003du, 0x00000008u, 0x00005412u, 0x00005401u, 0x00050084u, 0x00000008u, 0x00005413u, 0x00005410u, 0x00005412u, 0x00050080u, 0x00000008u, 0x00005414u, 0x00005413u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00005415u, 0x00005414u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00005416u, 0x0000540eu, 0x00005415u, 0x0003003eu, 0x000053e9u, 0x00005416u, 0x0004003du, 0x00000008u, 0x00005418u, 0x000053f3u, 0x0003003eu, 0x000053eau, 0x00005418u, 0x00070050u, 0x00000009u, 0x0000541du, 0x000053fcu, 0x0000540cu, 0x00005416u, 0x00005418u, 0x0003003eu, 0x000053ebu, 0x0000541du, 0x0003003eu, 0x00001886u, 0x0000541du, 0x000200f9u, 0x00001ac0u, 0x000200f8u, 0x00001ac0u, 0x000700f5u, 0x00000009u, 0x000096e7u, 0x00008cfeu, 0x0000416eu, 0x0000541du, 0x00001ac1u, 0x000200f9u, 0x00001a9cu, 0x000200f8u, 0x00001a9du, 0x0003003eu, 0x00001887u, 0x000083f4u, 0x0003003eu, 0x00001888u, 0x000020f0u, 0x00050051u, 0x00000008u, 0x00003ca0u, 0x000083f4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00003ca1u, 0x000083f4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00003ca2u, 0x000083f4u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00003ca3u, 0x000083f4u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00003ca5u, 0x000083f4u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00003c99u, 0x00003ca5u, 0x00050041u, 0x00000038u, 0x00003ca6u, 0x00003c99u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00003ca7u, 0x00003ca6u, 0x00050041u, 0x00000038u, 0x00003ca8u, 0x00001888u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003ca9u, 0x00003ca8u, 0x00050041u, 0x00000038u, 0x00003caau, 0x00003c99u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003cabu, 0x00003caau, 0x00050084u, 0x00000008u, 0x00003cacu, 0x00003ca9u, 0x00003cabu, 0x00050080u, 0x00000008u, 0x00003cadu, 0x00003cacu, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00003caeu, 0x00003cadu, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00003cafu, 0x00003ca7u, 0x00003caeu, 0x0003003eu, 0x00003c9au, 0x00003cafu, 0x0004003du, 0x00000008u, 0x00003cb1u, 0x00003ca6u, 0x00050041u, 0x00000038u, 0x00003cb2u, 0x00001888u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00003cb3u, 0x00003cb2u, 0x00050041u, 0x00000038u, 0x00003cb4u, 0x00003c99u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00003cb5u, 0x00003cb4u, 0x00050084u, 0x00000008u, 0x00003cb6u, 0x00003cb3u, 0x00003cb5u, 0x00050041u, 0x00000038u, 0x00003cb7u, 0x00001888u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00003cb8u, 0x00003cb7u, 0x0004003du, 0x00000008u, 0x00003cbau, 0x00003caau, 0x00050084u, 0x00000008u, 0x00003cbbu, 0x00003cb8u, 0x00003cbau, 0x00050080u, 0x00000008u, 0x00003cbcu, 0x00003cb6u, 0x00003cbbu, 0x00050080u, 0x00000008u, 0x00003cbdu, 0x00003cbcu, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00003cbeu, 0x00003cbdu, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00003cbfu, 0x00003cb1u, 0x00003cbeu, 0x0003003eu, 0x00003c9bu, 0x00003cbfu, 0x0004003du, 0x00000008u, 0x00003cc1u, 0x00003ca6u, 0x00050041u, 0x00000038u, 0x00003cc2u, 0x00001888u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00003cc3u, 0x00003cc2u, 0x0004003du, 0x00000008u, 0x00003cc5u, 0x00003cb4u, 0x00050084u, 0x00000008u, 0x00003cc6u, 0x00003cc3u, 0x00003cc5u, 0x00050080u, 0x00000008u, 0x00003cc7u, 0x00003cc6u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00003cc8u, 0x00003cc7u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00003cc9u, 0x00003cc1u, 0x00003cc8u, 0x0003003eu, 0x00003c9cu, 0x00003cc9u, 0x0004003du, 0x00000008u, 0x00003ccbu, 0x00003ca6u, 0x0003003eu, 0x00003c9du, 0x00003ccbu, 0x00070050u, 0x00000009u, 0x00003cd0u, 0x00003cafu, 0x00003cbfu, 0x00003cc9u, 0x00003ccbu, 0x0003003eu, 0x00003c9eu, 0x00003cd0u, 0x0003003eu, 0x00001886u, 0x00003cd0u, 0x000200f9u, 0x00001a9cu, 0x000200f8u, 0x00001a9cu, 0x000700f5u, 0x00000009u, 0x000096e6u, 0x00003cd0u, 0x00001a9du, 0x000096e7u, 0x00001ac0u, 0x000200f9u, 0x00001a96u, 0x000200f8u, 0x00001a96u, 0x000700f5u, 0x00000009u, 0x00009647u, 0x000072a9u, 0x00001a4bu, 0x000096e6u, 0x00001a9cu, 0x000600a9u, 0x00000008u, 0x00001ac8u, 0x00001942u, 0x00000194u, 0x00000185u, 0x000500c3u, 0x00000008u, 0x00001ac9u, 0x00006a4du, 0x00001ac8u, 0x000500c3u, 0x00000008u, 0x00001acbu, 0x0000b1c9u, 0x00000197u, 0x000500c7u, 0x00000008u, 0x00001acdu, 0x0000b1c9u, 0x0000019au, 0x0003003eu, 0x00001899u, 0x00006a56u, 0x0003003eu, 0x0000189au, 0x00001ac9u, 0x0003003eu, 0x0000189bu, 0x00001acbu, 0x0003003eu, 0x0000189cu, 0x00001acdu, 0x000500b1u, 0x00000058u, 0x00005422u, 0x00001acbu, 0x00000197u, 0x000300f7u, 0x00005423u, 0x00000000u, 0x000400fau, 0x00005422u, 0x00005424u, 0x00005425u, 0x000200f8u, 0x00005425u, 0x000500aau, 0x00000058u, 0x00005431u, 0x00001acbu, 0x00000197u, 0x000300f7u, 0x00005432u, 0x00000000u, 0x000400fau, 0x00005431u, 0x00005433u, 0x00005434u, 0x000200f8u, 0x00005434u, 0x0003003eu, 0x0000189du, 0x00000185u, 0x000200f9u, 0x00005432u, 0x000200f8u, 0x00005433u, 0x0004003du, 0x00000008u, 0x0000545bu, 0x00000184u, 0x000500c7u, 0x00000008u, 0x0000545cu, 0x0000545bu, 0x000002e9u, 0x0003003eu, 0x0000545au, 0x0000545cu, 0x0003003eu, 0x0000189du, 0x0000545cu, 0x000200f9u, 0x00005432u, 0x000200f8u, 0x00005432u, 0x000700f5u, 0x00000008u, 0x0000911cu, 0x0000545cu, 0x00005433u, 0x00000185u, 0x00005434u, 0x000200f9u, 0x00005423u, 0x000200f8u, 0x00005424u, 0x000500c7u, 0x00000008u, 0x00005428u, 0x00001ac9u, 0x0000019au, 0x00050084u, 0x00000008u, 0x00005429u, 0x00005428u, 0x0000019du, 0x000500c7u, 0x00000008u, 0x0000542bu, 0x00006a56u, 0x0000019au, 0x00050080u, 0x00000008u, 0x0000542cu, 0x00005429u, 0x0000542bu, 0x0003003eu, 0x0000541eu, 0x00001154u, 0x00060041u, 0x00000038u, 0x0000542du, 0x0000541eu, 0x00001acbu, 0x0000542cu, 0x0004003du, 0x00000008u, 0x0000542eu, 0x0000542du, 0x00050084u, 0x00000008u, 0x0000542fu, 0x0000542eu, 0x00001160u, 0x0003003eu, 0x0000189du, 0x0000542fu, 0x000200f9u, 0x00005423u, 0x000200f8u, 0x00005423u, 0x000700f5u, 0x00000008u, 0x0000911bu, 0x0000542fu, 0x00005424u, 0x0000911cu, 0x00005432u, 0x000500aau, 0x00000058u, 0x00005437u, 0x00001acdu, 0x0000019au, 0x000300f7u, 0x00005438u, 0x00000000u, 0x000400fau, 0x00005437u, 0x00005439u, 0x0000543au, 0x000200f8u, 0x0000543au, 0x000500aau, 0x00000058u, 0x0000543cu, 0x00001acdu, 0x00000197u, 0x000300f7u, 0x0000543du, 0x00000000u, 0x000400fau, 0x0000543cu, 0x0000543eu, 0x0000543fu, 0x000200f8u, 0x0000543fu, 0x000500afu, 0x00000058u, 0x00005442u, 0x00001acbu, 0x00000197u, 0x000300f7u, 0x00005443u, 0x00000000u, 0x000400fau, 0x00005442u, 0x00005444u, 0x00005445u, 0x000200f8u, 0x00005445u, 0x000500c7u, 0x00000008u, 0x00005451u, 0x0000911bu, 0x000001a6u, 0x0003003eu, 0x0000541fu, 0x00005451u, 0x000200f9u, 0x00005443u, 0x000200f8u, 0x00005444u, 0x000500c7u, 0x00000008u, 0x00005447u, 0x00001acbu, 0x00000194u, 0x000500c7u, 0x00000008u, 0x00005449u, 0x00001ac9u, 0x0000019au, 0x00050084u, 0x00000008u, 0x0000544au, 0x00005449u, 0x0000019du, 0x000500c7u, 0x00000008u, 0x0000544cu, 0x00006a56u, 0x0000019au, 0x00050080u, 0x00000008u, 0x0000544du, 0x0000544au, 0x0000544cu, 0x0003003eu, 0x00005420u, 0x00001154u, 0x00060041u, 0x00000038u, 0x0000544eu, 0x00005420u, 0x00005447u, 0x0000544du, 0x0004003du, 0x00000008u, 0x0000544fu, 0x0000544eu, 0x0003003eu, 0x0000541fu, 0x0000544fu, 0x000200f9u, 0x00005443u, 0x000200f8u, 0x00005443u, 0x000700f5u, 0x00000008u, 0x00009121u, 0x0000544fu, 0x00005444u, 0x00005451u, 0x00005445u, 0x0003003eu, 0x0000189eu, 0x00009121u, 0x000500aau, 0x00000058u, 0x00005454u, 0x00001acdu, 0x00000194u, 0x000300f7u, 0x00005455u, 0x00000000u, 0x000400fau, 0x00005454u, 0x00005456u, 0x00005455u, 0x000200f8u, 0x00005456u, 0x000400c8u, 0x00000008u, 0x00005458u, 0x00009121u, 0x000500c7u, 0x00000008u, 0x00005459u, 0x00005458u, 0x000001a6u, 0x0003003eu, 0x0000189eu, 0x00005459u, 0x000200f9u, 0x00005455u, 0x000200f8u, 0x00005455u, 0x000700f5u, 0x00000008u, 0x00009129u, 0x00009121u, 0x00005443u, 0x00005459u, 0x00005456u, 0x000200f9u, 0x0000543du, 0x000200f8u, 0x0000543eu, 0x0004003du, 0x00000008u, 0x0000545eu, 0x00000184u, 0x000500c7u, 0x00000008u, 0x0000545fu, 0x0000545eu, 0x000001a6u, 0x0003003eu, 0x0000545du, 0x0000545fu, 0x0003003eu, 0x0000189eu, 0x0000545fu, 0x000200f9u, 0x0000543du, 0x000200f8u, 0x0000543du, 0x000700f5u, 0x00000008u, 0x00009128u, 0x0000545fu, 0x0000543eu, 0x00009129u, 0x00005455u, 0x000200f9u, 0x00005438u, 0x000200f8u, 0x00005439u, 0x0003003eu, 0x0000189eu, 0x00000185u, 0x000200f9u, 0x00005438u, 0x000200f8u, 0x00005438u, 0x000700f5u, 0x00000008u, 0x00009127u, 0x00000185u, 0x00005439u, 0x00009128u, 0x0000543du, 0x0003003eu, 0x00001897u, 0x0000911bu, 0x0003003eu, 0x00001898u, 0x00009127u, 0x000300f7u, 0x00001ad3u, 0x00000000u, 0x000400fau, 0x0000193fu, 0x00001ad4u, 0x00001ad5u, 0x000200f8u, 0x00001ad5u, 0x0004003du, 0x00000009u, 0x00001b18u, 0x00001840u, 0x0004003du, 0x00000008u, 0x00005779u, 0x00000184u, 0x000500c7u, 0x00000008u, 0x0000577au, 0x00005779u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x0000577bu, 0x0000577au, 0x000001a3u, 0x000500c5u, 0x00000008u, 0x0000577cu, 0x0000577bu, 0x000002e0u, 0x0003003eu, 0x00005778u, 0x0000577cu, 0x000d0050u, 0x0000014du, 0x00001b1du, 0x000020c1u, 0x000020c6u, 0x000020cbu, 0x000020d0u, 0x00001b18u, 0x00000310u, 0x000083f4u, 0x00009647u, 0x000096f1u, 0x0000577cu, 0x0003003eu, 0x000068a6u, 0x000020c1u, 0x0003003eu, 0x000068a7u, 0x000020c6u, 0x0003003eu, 0x000068a8u, 0x000020cbu, 0x0003003eu, 0x000068a9u, 0x000020d0u, 0x0003003eu, 0x000068aau, 0x00001b18u, 0x0003003eu, 0x000068abu, 0x00000310u, 0x0003003eu, 0x000068acu, 0x000083f4u, 0x0003003eu, 0x000068adu, 0x00009647u, 0x0003003eu, 0x000068aeu, 0x000096f1u, 0x0003003eu, 0x000068afu, 0x0000577cu, 0x0003003eu, 0x000068c5u, 0x000020c1u, 0x0003003eu, 0x000068c6u, 0x000020c6u, 0x0003003eu, 0x000068c7u, 0x000020cbu, 0x0003003eu, 0x000068c8u, 0x000020d0u, 0x0003003eu, 0x000068c9u, 0x00001b18u, 0x0003003eu, 0x000068cau, 0x00000310u, 0x0003003eu, 0x000068cbu, 0x000083f4u, 0x0003003eu, 0x000068ccu, 0x00009647u, 0x0003003eu, 0x000068cdu, 0x000096f1u, 0x0003003eu, 0x000068ceu, 0x0000577cu, 0x0004003du, 0x00000009u, 0x00001b1fu, 0x00001804u, 0x0003003eu, 0x000018b5u, 0x00001b1fu, 0x0004003du, 0x00000009u, 0x00001b20u, 0x00001805u, 0x0003003eu, 0x000018b6u, 0x00001b20u, 0x0003003eu, 0x000018b7u, 0x00009127u, 0x0003003eu, 0x000018b8u, 0x000019d4u, 0x0003003eu, 0x000018b9u, 0x0000192au, 0x0003003eu, 0x000018bau, 0x0000192du, 0x0003003eu, 0x0000590eu, 0x000020c1u, 0x0003003eu, 0x00005910u, 0x00001b18u, 0x0003003eu, 0x00005911u, 0x00000310u, 0x0003003eu, 0x00005912u, 0x000083f4u, 0x0003003eu, 0x00005913u, 0x00009647u, 0x0003003eu, 0x00005915u, 0x0000577cu, 0x00050041u, 0x00000038u, 0x00005797u, 0x000018b5u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005798u, 0x00005797u, 0x0003003eu, 0x0000577fu, 0x00005798u, 0x00050041u, 0x00000038u, 0x00005799u, 0x000018b6u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000579au, 0x00005799u, 0x0003003eu, 0x00005780u, 0x0000579au, 0x000300f7u, 0x000057d9u, 0x00000000u, 0x000f00fbu, 0x00005798u, 0x000057dau, 0x00000000u, 0x000057dbu, 0x00000001u, 0x000057dcu, 0x00000002u, 0x000057ddu, 0x00000004u, 0x000057deu, 0x00000007u, 0x000057dfu, 0x00000006u, 0x000057e0u, 0x000200f8u, 0x000057e0u, 0x0003003eu, 0x000057d5u, 0x000011dbu, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057dfu, 0x00060050u, 0x00000052u, 0x000057f2u, 0x0000577cu, 0x0000577cu, 0x0000577cu, 0x0003003eu, 0x000057d5u, 0x000057f2u, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057deu, 0x0004003du, 0x00000009u, 0x000057eeu, 0x00005910u, 0x0008004fu, 0x00000052u, 0x000057efu, 0x000057eeu, 0x000057eeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000057d5u, 0x000057efu, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057ddu, 0x0004003du, 0x00000009u, 0x000057ebu, 0x00005913u, 0x0008004fu, 0x00000052u, 0x000057ecu, 0x000057ebu, 0x000057ebu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000057d5u, 0x000057ecu, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057dcu, 0x0004003du, 0x00000009u, 0x000057e8u, 0x00005912u, 0x0008004fu, 0x00000052u, 0x000057e9u, 0x000057e8u, 0x000057e8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000057d5u, 0x000057e9u, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057dbu, 0x0004003du, 0x00000009u, 0x000057e5u, 0x00005911u, 0x0008004fu, 0x00000052u, 0x000057e6u, 0x000057e5u, 0x000057e5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000057d5u, 0x000057e6u, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057dau, 0x0004003du, 0x00000009u, 0x000057e2u, 0x0000590eu, 0x0008004fu, 0x00000052u, 0x000057e3u, 0x000057e2u, 0x000057e2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000057d5u, 0x000057e3u, 0x000200f9u, 0x000057d9u, 0x000200f8u, 0x000057d9u, 0x001100f5u, 0x00000052u, 0x00009abcu, 0x000057e3u, 0x000057dau, 0x000057e6u, 0x000057dbu, 0x000057e9u, 0x000057dcu, 0x000057ecu, 0x000057ddu, 0x000057efu, 0x000057deu, 0x000057f2u, 0x000057dfu, 0x000011dbu, 0x000057e0u, 0x000300f7u, 0x000057f4u, 0x00000000u, 0x000d00fbu, 0x0000579au, 0x000057f5u, 0x00000000u, 0x000057f6u, 0x00000001u, 0x000057f7u, 0x00000002u, 0x000057f8u, 0x00000004u, 0x000057f9u, 0x00000006u, 0x000057fau, 0x000200f8u, 0x000057fau, 0x0003003eu, 0x000057d6u, 0x000011dau, 0x000200f9u, 0x000057f4u, 0x000200f8u, 0x000057f9u, 0x00050041u, 0x00000038u, 0x00005920u, 0x00005910u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005804u, 0x00005920u, 0x0003003eu, 0x000057d6u, 0x00005804u, 0x000200f9u, 0x000057f4u, 0x000200f8u, 0x000057f8u, 0x00050041u, 0x00000038u, 0x0000591fu, 0x00005913u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005802u, 0x0000591fu, 0x0003003eu, 0x000057d6u, 0x00005802u, 0x000200f9u, 0x000057f4u, 0x000200f8u, 0x000057f7u, 0x00050041u, 0x00000038u, 0x0000591eu, 0x00005912u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005800u, 0x0000591eu, 0x0003003eu, 0x000057d6u, 0x00005800u, 0x000200f9u, 0x000057f4u, 0x000200f8u, 0x000057f6u, 0x00050041u, 0x00000038u, 0x0000591du, 0x00005911u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000057feu, 0x0000591du, 0x0003003eu, 0x000057d6u, 0x000057feu, 0x000200f9u, 0x000057f4u, 0x000200f8u, 0x000057f5u, 0x00050041u, 0x00000038u, 0x0000591cu, 0x0000590eu, 0x00000331u, 0x0004003du, 0x00000008u, 0x000057fcu, 0x0000591cu, 0x0003003eu, 0x000057d6u, 0x000057fcu, 0x000200f9u, 0x000057f4u, 0x000200f8u, 0x000057f4u, 0x000f00f5u, 0x00000008u, 0x00009abdu, 0x000057fcu, 0x000057f5u, 0x000057feu, 0x000057f6u, 0x00005800u, 0x000057f7u, 0x00005802u, 0x000057f8u, 0x00005804u, 0x000057f9u, 0x000011dau, 0x000057fau, 0x00050051u, 0x00000008u, 0x00005807u, 0x00009abcu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005808u, 0x00009abcu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005809u, 0x00009abcu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000580au, 0x00005807u, 0x00005808u, 0x00005809u, 0x00009abdu, 0x0003003eu, 0x000057d7u, 0x0000580au, 0x0003003eu, 0x0000577du, 0x0000580au, 0x0003003eu, 0x00005921u, 0x000020c6u, 0x0003003eu, 0x00005922u, 0x00001b18u, 0x0003003eu, 0x00005923u, 0x00000310u, 0x0003003eu, 0x00005924u, 0x000083f4u, 0x0003003eu, 0x00005925u, 0x00009647u, 0x00050041u, 0x00000038u, 0x0000579du, 0x000018b5u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000579eu, 0x0000579du, 0x0003003eu, 0x00005783u, 0x0000579eu, 0x00050041u, 0x00000038u, 0x0000579fu, 0x000018b6u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000057a0u, 0x0000579fu, 0x0003003eu, 0x00005784u, 0x000057a0u, 0x000300f7u, 0x0000580fu, 0x00000000u, 0x000d00fbu, 0x0000579eu, 0x00005810u, 0x00000000u, 0x00005811u, 0x00000001u, 0x00005812u, 0x00000002u, 0x00005813u, 0x00000004u, 0x00005814u, 0x00000007u, 0x00005815u, 0x000200f8u, 0x00005815u, 0x00050041u, 0x00000038u, 0x0000592bu, 0x00005921u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00005826u, 0x0000592bu, 0x000500c4u, 0x00000008u, 0x00005827u, 0x00005826u, 0x000001e0u, 0x00050041u, 0x00000038u, 0x0000592cu, 0x00005921u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005829u, 0x0000592cu, 0x000500c5u, 0x00000008u, 0x0000582au, 0x00005827u, 0x00005829u, 0x00060050u, 0x00000052u, 0x0000582bu, 0x0000582au, 0x0000582au, 0x0000582au, 0x0003003eu, 0x0000580bu, 0x0000582bu, 0x000200f9u, 0x0000580fu, 0x000200f8u, 0x00005814u, 0x0004003du, 0x00000009u, 0x00005823u, 0x00005922u, 0x0008004fu, 0x00000052u, 0x00005824u, 0x00005823u, 0x00005823u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000580bu, 0x00005824u, 0x000200f9u, 0x0000580fu, 0x000200f8u, 0x00005813u, 0x0004003du, 0x00000009u, 0x00005820u, 0x00005925u, 0x0008004fu, 0x00000052u, 0x00005821u, 0x00005820u, 0x00005820u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000580bu, 0x00005821u, 0x000200f9u, 0x0000580fu, 0x000200f8u, 0x00005812u, 0x0004003du, 0x00000009u, 0x0000581du, 0x00005924u, 0x0008004fu, 0x00000052u, 0x0000581eu, 0x0000581du, 0x0000581du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000580bu, 0x0000581eu, 0x000200f9u, 0x0000580fu, 0x000200f8u, 0x00005811u, 0x0004003du, 0x00000009u, 0x0000581au, 0x00005923u, 0x0008004fu, 0x00000052u, 0x0000581bu, 0x0000581au, 0x0000581au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000580bu, 0x0000581bu, 0x000200f9u, 0x0000580fu, 0x000200f8u, 0x00005810u, 0x0004003du, 0x00000009u, 0x00005817u, 0x00005921u, 0x0008004fu, 0x00000052u, 0x00005818u, 0x00005817u, 0x00005817u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000580bu, 0x00005818u, 0x000200f9u, 0x0000580fu, 0x000200f8u, 0x0000580fu, 0x000f00f5u, 0x00000052u, 0x00009ad4u, 0x00005818u, 0x00005810u, 0x0000581bu, 0x00005811u, 0x0000581eu, 0x00005812u, 0x00005821u, 0x00005813u, 0x00005824u, 0x00005814u, 0x0000582bu, 0x00005815u, 0x000300f7u, 0x0000582du, 0x00000000u, 0x000d00fbu, 0x000057a0u, 0x0000582eu, 0x00000000u, 0x0000582fu, 0x00000001u, 0x00005830u, 0x00000002u, 0x00005831u, 0x00000004u, 0x00005832u, 0x00000006u, 0x00005833u, 0x000200f8u, 0x00005833u, 0x0003003eu, 0x0000580cu, 0x000011dau, 0x000200f9u, 0x0000582du, 0x000200f8u, 0x00005832u, 0x00050041u, 0x00000038u, 0x00005931u, 0x00005922u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000583du, 0x00005931u, 0x0003003eu, 0x0000580cu, 0x0000583du, 0x000200f9u, 0x0000582du, 0x000200f8u, 0x00005831u, 0x00050041u, 0x00000038u, 0x00005930u, 0x00005925u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000583bu, 0x00005930u, 0x0003003eu, 0x0000580cu, 0x0000583bu, 0x000200f9u, 0x0000582du, 0x000200f8u, 0x00005830u, 0x00050041u, 0x00000038u, 0x0000592fu, 0x00005924u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005839u, 0x0000592fu, 0x0003003eu, 0x0000580cu, 0x00005839u, 0x000200f9u, 0x0000582du, 0x000200f8u, 0x0000582fu, 0x00050041u, 0x00000038u, 0x0000592eu, 0x00005923u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005837u, 0x0000592eu, 0x0003003eu, 0x0000580cu, 0x00005837u, 0x000200f9u, 0x0000582du, 0x000200f8u, 0x0000582eu, 0x00050041u, 0x00000038u, 0x0000592du, 0x00005921u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005835u, 0x0000592du, 0x0003003eu, 0x0000580cu, 0x00005835u, 0x000200f9u, 0x0000582du, 0x000200f8u, 0x0000582du, 0x000f00f5u, 0x00000008u, 0x00009ad5u, 0x00005835u, 0x0000582eu, 0x00005837u, 0x0000582fu, 0x00005839u, 0x00005830u, 0x0000583bu, 0x00005831u, 0x0000583du, 0x00005832u, 0x000011dau, 0x00005833u, 0x00050051u, 0x00000008u, 0x00005840u, 0x00009ad4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005841u, 0x00009ad4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005842u, 0x00009ad4u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005843u, 0x00005840u, 0x00005841u, 0x00005842u, 0x00009ad5u, 0x0003003eu, 0x0000580du, 0x00005843u, 0x0003003eu, 0x00005781u, 0x00005843u, 0x0003003eu, 0x00005932u, 0x000020cbu, 0x0003003eu, 0x00005933u, 0x00001b18u, 0x0003003eu, 0x00005934u, 0x00000310u, 0x0003003eu, 0x00005935u, 0x000083f4u, 0x0003003eu, 0x00005936u, 0x00009647u, 0x0003003eu, 0x00005937u, 0x000096f1u, 0x00050041u, 0x00000038u, 0x000057a3u, 0x000018b5u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000057a4u, 0x000057a3u, 0x0003003eu, 0x00005787u, 0x000057a4u, 0x00050041u, 0x00000038u, 0x000057a5u, 0x000018b6u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000057a6u, 0x000057a5u, 0x0003003eu, 0x00005788u, 0x000057a6u, 0x000300f7u, 0x00005848u, 0x00000000u, 0x001700fbu, 0x000057a4u, 0x00005849u, 0x00000000u, 0x0000584au, 0x00000007u, 0x0000584bu, 0x00000001u, 0x0000584cu, 0x00000002u, 0x0000584du, 0x00000004u, 0x0000584eu, 0x00000008u, 0x0000584fu, 0x00000009u, 0x00005850u, 0x0000000bu, 0x00005851u, 0x0000000du, 0x00005852u, 0x0000000fu, 0x00005853u, 0x000200f8u, 0x00005853u, 0x00050041u, 0x00000038u, 0x0000593eu, 0x00005932u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00005873u, 0x0000593eu, 0x000500c4u, 0x00000008u, 0x00005874u, 0x00005873u, 0x000001e0u, 0x00050041u, 0x00000038u, 0x0000593fu, 0x00005932u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005876u, 0x0000593fu, 0x000500c5u, 0x00000008u, 0x00005877u, 0x00005874u, 0x00005876u, 0x00060050u, 0x00000052u, 0x00005878u, 0x00005877u, 0x00005877u, 0x00005877u, 0x0003003eu, 0x00005844u, 0x00005878u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x00005852u, 0x00060050u, 0x00000052u, 0x00005871u, 0x000096f1u, 0x000096f1u, 0x000096f1u, 0x0003003eu, 0x00005844u, 0x00005871u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x00005851u, 0x0004003du, 0x00000009u, 0x0000586du, 0x00005933u, 0x0008004fu, 0x00000052u, 0x0000586eu, 0x0000586du, 0x0000586du, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005844u, 0x0000586eu, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x00005850u, 0x0004003du, 0x00000009u, 0x0000586au, 0x00005936u, 0x0008004fu, 0x00000052u, 0x0000586bu, 0x0000586au, 0x0000586au, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005844u, 0x0000586bu, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x0000584fu, 0x0004003du, 0x00000009u, 0x00005867u, 0x00005935u, 0x0008004fu, 0x00000052u, 0x00005868u, 0x00005867u, 0x00005867u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00005844u, 0x00005868u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x0000584eu, 0x0004003du, 0x00000009u, 0x00005864u, 0x00005933u, 0x0008004fu, 0x00000052u, 0x00005865u, 0x00005864u, 0x00005864u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005844u, 0x00005865u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x0000584du, 0x0004003du, 0x00000009u, 0x00005861u, 0x00005936u, 0x0008004fu, 0x00000052u, 0x00005862u, 0x00005861u, 0x00005861u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005844u, 0x00005862u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x0000584cu, 0x0004003du, 0x00000009u, 0x0000585eu, 0x00005935u, 0x0008004fu, 0x00000052u, 0x0000585fu, 0x0000585eu, 0x0000585eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005844u, 0x0000585fu, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x0000584bu, 0x0003003eu, 0x00005844u, 0x0000b1c8u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x0000584au, 0x0003003eu, 0x00005844u, 0x0000b1c8u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x00005849u, 0x0004003du, 0x00000009u, 0x00005855u, 0x00005932u, 0x0008004fu, 0x00000052u, 0x00005856u, 0x00005855u, 0x00005855u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005844u, 0x00005856u, 0x000200f9u, 0x00005848u, 0x000200f8u, 0x00005848u, 0x001900f5u, 0x00000052u, 0x00009aedu, 0x00005856u, 0x00005849u, 0x0000b1c8u, 0x0000584au, 0x0000b1c8u, 0x0000584bu, 0x0000585fu, 0x0000584cu, 0x00005862u, 0x0000584du, 0x00005865u, 0x0000584eu, 0x00005868u, 0x0000584fu, 0x0000586bu, 0x00005850u, 0x0000586eu, 0x00005851u, 0x00005871u, 0x00005852u, 0x00005878u, 0x00005853u, 0x000300f7u, 0x0000587au, 0x00000000u, 0x000b00fbu, 0x000057a6u, 0x0000587bu, 0x00000000u, 0x0000587cu, 0x00000001u, 0x0000587du, 0x00000002u, 0x0000587eu, 0x00000004u, 0x0000587fu, 0x000200f8u, 0x0000587fu, 0x00050041u, 0x00000038u, 0x00005943u, 0x00005933u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005889u, 0x00005943u, 0x0003003eu, 0x00005845u, 0x00005889u, 0x000200f9u, 0x0000587au, 0x000200f8u, 0x0000587eu, 0x00050041u, 0x00000038u, 0x00005942u, 0x00005936u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005887u, 0x00005942u, 0x0003003eu, 0x00005845u, 0x00005887u, 0x000200f9u, 0x0000587au, 0x000200f8u, 0x0000587du, 0x00050041u, 0x00000038u, 0x00005941u, 0x00005935u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005885u, 0x00005941u, 0x0003003eu, 0x00005845u, 0x00005885u, 0x000200f9u, 0x0000587au, 0x000200f8u, 0x0000587cu, 0x0003003eu, 0x00005845u, 0x000096f1u, 0x000200f9u, 0x0000587au, 0x000200f8u, 0x0000587bu, 0x00050041u, 0x00000038u, 0x00005940u, 0x00005932u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005881u, 0x00005940u, 0x0003003eu, 0x00005845u, 0x00005881u, 0x000200f9u, 0x0000587au, 0x000200f8u, 0x0000587au, 0x000d00f5u, 0x00000008u, 0x00009aeeu, 0x00005881u, 0x0000587bu, 0x000096f1u, 0x0000587cu, 0x00005885u, 0x0000587du, 0x00005887u, 0x0000587eu, 0x00005889u, 0x0000587fu, 0x00050051u, 0x00000008u, 0x0000588cu, 0x00009aedu, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000588du, 0x00009aedu, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000588eu, 0x00009aedu, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000588fu, 0x0000588cu, 0x0000588du, 0x0000588eu, 0x00009aeeu, 0x0003003eu, 0x00005846u, 0x0000588fu, 0x0003003eu, 0x00005785u, 0x0000588fu, 0x0003003eu, 0x00005944u, 0x000020d0u, 0x0003003eu, 0x00005945u, 0x00001b18u, 0x0003003eu, 0x00005946u, 0x00000310u, 0x0003003eu, 0x00005947u, 0x000083f4u, 0x0003003eu, 0x00005948u, 0x00009647u, 0x00050041u, 0x00000038u, 0x000057a9u, 0x000018b5u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000057aau, 0x000057a9u, 0x0003003eu, 0x0000578bu, 0x000057aau, 0x00050041u, 0x00000038u, 0x000057abu, 0x000018b6u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000057acu, 0x000057abu, 0x0003003eu, 0x0000578cu, 0x000057acu, 0x000300f7u, 0x00005894u, 0x00000000u, 0x000d00fbu, 0x000057aau, 0x00005895u, 0x00000000u, 0x00005896u, 0x00000001u, 0x00005897u, 0x00000002u, 0x00005898u, 0x00000004u, 0x00005899u, 0x00000006u, 0x0000589au, 0x000200f8u, 0x0000589au, 0x0003003eu, 0x00005890u, 0x000011dbu, 0x000200f9u, 0x00005894u, 0x000200f8u, 0x00005899u, 0x0004003du, 0x00000009u, 0x000058a8u, 0x00005945u, 0x0008004fu, 0x00000052u, 0x000058a9u, 0x000058a8u, 0x000058a8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005890u, 0x000058a9u, 0x000200f9u, 0x00005894u, 0x000200f8u, 0x00005898u, 0x0004003du, 0x00000009u, 0x000058a5u, 0x00005948u, 0x0008004fu, 0x00000052u, 0x000058a6u, 0x000058a5u, 0x000058a5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005890u, 0x000058a6u, 0x000200f9u, 0x00005894u, 0x000200f8u, 0x00005897u, 0x0004003du, 0x00000009u, 0x000058a2u, 0x00005947u, 0x0008004fu, 0x00000052u, 0x000058a3u, 0x000058a2u, 0x000058a2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005890u, 0x000058a3u, 0x000200f9u, 0x00005894u, 0x000200f8u, 0x00005896u, 0x0004003du, 0x00000009u, 0x0000589fu, 0x00005946u, 0x0008004fu, 0x00000052u, 0x000058a0u, 0x0000589fu, 0x0000589fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005890u, 0x000058a0u, 0x000200f9u, 0x00005894u, 0x000200f8u, 0x00005895u, 0x0004003du, 0x00000009u, 0x0000589cu, 0x00005944u, 0x0008004fu, 0x00000052u, 0x0000589du, 0x0000589cu, 0x0000589cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005890u, 0x0000589du, 0x000200f9u, 0x00005894u, 0x000200f8u, 0x00005894u, 0x000f00f5u, 0x00000052u, 0x00009b05u, 0x0000589du, 0x00005895u, 0x000058a0u, 0x00005896u, 0x000058a3u, 0x00005897u, 0x000058a6u, 0x00005898u, 0x000058a9u, 0x00005899u, 0x000011dbu, 0x0000589au, 0x000300f7u, 0x000058abu, 0x00000000u, 0x000d00fbu, 0x000057acu, 0x000058acu, 0x00000000u, 0x000058adu, 0x00000001u, 0x000058aeu, 0x00000002u, 0x000058afu, 0x00000004u, 0x000058b0u, 0x00000006u, 0x000058b1u, 0x000200f8u, 0x000058b1u, 0x0003003eu, 0x00005891u, 0x000011dau, 0x000200f9u, 0x000058abu, 0x000200f8u, 0x000058b0u, 0x00050041u, 0x00000038u, 0x00005952u, 0x00005945u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000058bbu, 0x00005952u, 0x0003003eu, 0x00005891u, 0x000058bbu, 0x000200f9u, 0x000058abu, 0x000200f8u, 0x000058afu, 0x00050041u, 0x00000038u, 0x00005951u, 0x00005948u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000058b9u, 0x00005951u, 0x0003003eu, 0x00005891u, 0x000058b9u, 0x000200f9u, 0x000058abu, 0x000200f8u, 0x000058aeu, 0x00050041u, 0x00000038u, 0x00005950u, 0x00005947u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000058b7u, 0x00005950u, 0x0003003eu, 0x00005891u, 0x000058b7u, 0x000200f9u, 0x000058abu, 0x000200f8u, 0x000058adu, 0x00050041u, 0x00000038u, 0x0000594fu, 0x00005946u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000058b5u, 0x0000594fu, 0x0003003eu, 0x00005891u, 0x000058b5u, 0x000200f9u, 0x000058abu, 0x000200f8u, 0x000058acu, 0x00050041u, 0x00000038u, 0x0000594eu, 0x00005944u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000058b3u, 0x0000594eu, 0x0003003eu, 0x00005891u, 0x000058b3u, 0x000200f9u, 0x000058abu, 0x000200f8u, 0x000058abu, 0x000f00f5u, 0x00000008u, 0x00009b06u, 0x000058b3u, 0x000058acu, 0x000058b5u, 0x000058adu, 0x000058b7u, 0x000058aeu, 0x000058b9u, 0x000058afu, 0x000058bbu, 0x000058b0u, 0x000011dau, 0x000058b1u, 0x00050051u, 0x00000008u, 0x000058beu, 0x00009b05u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000058bfu, 0x00009b05u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000058c0u, 0x00009b05u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000058c1u, 0x000058beu, 0x000058bfu, 0x000058c0u, 0x00009b06u, 0x0003003eu, 0x00005892u, 0x000058c1u, 0x0003003eu, 0x00005789u, 0x000058c1u, 0x0003003eu, 0x0000578eu, 0x0000580au, 0x0003003eu, 0x0000578fu, 0x00005843u, 0x0003003eu, 0x00005790u, 0x0000588fu, 0x0003003eu, 0x00005791u, 0x000058c1u, 0x000600cau, 0x00000009u, 0x000058c8u, 0x0000588fu, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00005790u, 0x000058c8u, 0x0003003eu, 0x000058c2u, 0x0000580au, 0x00050082u, 0x00000009u, 0x000058e9u, 0x0000580au, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x000058eau, 0x000058e9u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x000058ecu, 0x000058eau, 0x0000b1b9u, 0x0003003eu, 0x000058e6u, 0x000058ecu, 0x0003003eu, 0x0000578eu, 0x000058ecu, 0x0003003eu, 0x000058c3u, 0x00005843u, 0x00050082u, 0x00000009u, 0x000058f0u, 0x00005843u, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x000058f1u, 0x000058f0u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x000058f3u, 0x000058f1u, 0x0000b1b9u, 0x0003003eu, 0x000058edu, 0x000058f3u, 0x0003003eu, 0x0000578fu, 0x000058f3u, 0x0003003eu, 0x000058c4u, 0x000058c1u, 0x00050082u, 0x00000009u, 0x000058f7u, 0x000058c1u, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x000058f8u, 0x000058f7u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x000058fau, 0x000058f8u, 0x0000b1b9u, 0x0003003eu, 0x000058f4u, 0x000058fau, 0x0003003eu, 0x00005791u, 0x000058fau, 0x00050082u, 0x00000009u, 0x000058d1u, 0x000058ecu, 0x000058f3u, 0x00050084u, 0x00000009u, 0x000058d3u, 0x000058d1u, 0x000058c8u, 0x0003003eu, 0x000058c5u, 0x000058d3u, 0x00050080u, 0x00000009u, 0x000058d6u, 0x000058d3u, 0x0000b1b9u, 0x0003003eu, 0x000058c5u, 0x000058d6u, 0x000500c3u, 0x00000009u, 0x000058d9u, 0x000058d6u, 0x0000b1c3u, 0x00050051u, 0x00000008u, 0x000058dau, 0x000058d9u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000058dbu, 0x000058d9u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000058dcu, 0x000058d9u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000058ddu, 0x000058d9u, 0x00000003u, 0x00050051u, 0x00000008u, 0x000058e0u, 0x000058fau, 0x00000000u, 0x00050051u, 0x00000008u, 0x000058e1u, 0x000058fau, 0x00000001u, 0x00050051u, 0x00000008u, 0x000058e2u, 0x000058fau, 0x00000002u, 0x00050051u, 0x00000008u, 0x000058e3u, 0x000058fau, 0x00000003u, 0x00050080u, 0x00000009u, 0x000058e5u, 0x000058d9u, 0x000058fau, 0x0003003eu, 0x000058c6u, 0x000058e5u, 0x0003003eu, 0x0000578du, 0x000058e5u, 0x0004003du, 0x00000009u, 0x000057b3u, 0x0000578du, 0x0003003eu, 0x00005792u, 0x000057b3u, 0x00050082u, 0x00000009u, 0x000058feu, 0x000057b3u, 0x0000b1b9u, 0x0003003eu, 0x00005792u, 0x000058feu, 0x000600cau, 0x00000009u, 0x00005900u, 0x000058feu, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00005792u, 0x00005900u, 0x00050080u, 0x00000009u, 0x00005903u, 0x00005900u, 0x0000b1b9u, 0x0003003eu, 0x00005792u, 0x00005903u, 0x0008000cu, 0x00000009u, 0x00005905u, 0x00000001u, 0x0000002du, 0x00005903u, 0x00000310u, 0x00000344u, 0x00050051u, 0x00000008u, 0x00005906u, 0x00005905u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005907u, 0x00005905u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005908u, 0x00005905u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005909u, 0x00005905u, 0x00000003u, 0x0003003eu, 0x000058fbu, 0x00005905u, 0x0003003eu, 0x0000578du, 0x00005905u, 0x00050041u, 0x00000038u, 0x000057b5u, 0x0000578du, 0x00000331u, 0x0004003du, 0x00000008u, 0x000057b6u, 0x000057b5u, 0x0004003du, 0x00000008u, 0x000057b8u, 0x000057b5u, 0x00050080u, 0x00000008u, 0x000057b9u, 0x000057b8u, 0x00000194u, 0x000500c3u, 0x00000008u, 0x000057bau, 0x000057b9u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x000057bbu, 0x000057b6u, 0x000057bau, 0x0003003eu, 0x00005793u, 0x000057bbu, 0x000300f7u, 0x000057bdu, 0x00000000u, 0x000400fau, 0x0000192au, 0x000057beu, 0x000057bfu, 0x000200f8u, 0x000057bfu, 0x000500c4u, 0x00000008u, 0x000057c8u, 0x000019d4u, 0x000001a0u, 0x0003003eu, 0x00005794u, 0x000057c8u, 0x000200f9u, 0x000057bdu, 0x000200f8u, 0x000057beu, 0x00050084u, 0x00000008u, 0x000057c2u, 0x000057bbu, 0x000019d4u, 0x00050080u, 0x00000008u, 0x000057c3u, 0x000057c2u, 0x0000019du, 0x000500c3u, 0x00000008u, 0x000057c4u, 0x000057c3u, 0x0000019au, 0x0003003eu, 0x00005794u, 0x000057c4u, 0x000500c3u, 0x00000008u, 0x000057c6u, 0x000057c4u, 0x000001a0u, 0x0003003eu, 0x000018b8u, 0x000057c6u, 0x000200f9u, 0x000057bdu, 0x000200f8u, 0x000057bdu, 0x000700f5u, 0x00000008u, 0x00009b39u, 0x000057c6u, 0x000057beu, 0x000019d4u, 0x000057bfu, 0x000700f5u, 0x00000008u, 0x00009b36u, 0x000057c4u, 0x000057beu, 0x000057c8u, 0x000057bfu, 0x000300f7u, 0x000057cau, 0x00000000u, 0x000400fau, 0x0000192du, 0x000057cbu, 0x000057ccu, 0x000200f8u, 0x000057ccu, 0x00050080u, 0x00000008u, 0x000057d0u, 0x000057bbu, 0x00009127u, 0x0003003eu, 0x00005793u, 0x000057d0u, 0x000200f9u, 0x000057cau, 0x000200f8u, 0x000057cbu, 0x0003003eu, 0x00005793u, 0x00009b36u, 0x000200f9u, 0x000057cau, 0x000200f8u, 0x000057cau, 0x000700f5u, 0x00000008u, 0x00009b37u, 0x00009b36u, 0x000057cbu, 0x000057d0u, 0x000057ccu, 0x0008000cu, 0x00000008u, 0x000057d2u, 0x00000001u, 0x0000002du, 0x00009b37u, 0x00000185u, 0x000002eeu, 0x0003003eu, 0x000057b5u, 0x000057d2u, 0x0004003du, 0x00000009u, 0x000057d4u, 0x0000578du, 0x0003003eu, 0x00005795u, 0x000057d4u, 0x0003003eu, 0x0000183bu, 0x00009b39u, 0x00050051u, 0x00000008u, 0x00001b27u, 0x000057d4u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001b28u, 0x000057d4u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001b29u, 0x000057d4u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001b2au, 0x000057d4u, 0x00000003u, 0x0003003eu, 0x000018abu, 0x000057d4u, 0x00050041u, 0x00000038u, 0x00001b2cu, 0x000018abu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001b2du, 0x00001b2cu, 0x0003003eu, 0x000018a0u, 0x00001b2du, 0x000200f9u, 0x00001ad3u, 0x000200f8u, 0x00001ad4u, 0x0004003du, 0x00000009u, 0x00001adeu, 0x00001840u, 0x0004003du, 0x00000008u, 0x00005461u, 0x00000184u, 0x000500c7u, 0x00000008u, 0x00005462u, 0x00005461u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x00005463u, 0x00005462u, 0x000001a3u, 0x000500c5u, 0x00000008u, 0x00005464u, 0x00005463u, 0x000002e0u, 0x0003003eu, 0x00005460u, 0x00005464u, 0x000d0050u, 0x0000014du, 0x00001ae3u, 0x000020adu, 0x000020b2u, 0x000020b7u, 0x000020bcu, 0x00001adeu, 0x00000310u, 0x000083f4u, 0x00009647u, 0x000096f1u, 0x00005464u, 0x0003003eu, 0x000067fcu, 0x000020adu, 0x0003003eu, 0x000067fdu, 0x000020b2u, 0x0003003eu, 0x000067feu, 0x000020b7u, 0x0003003eu, 0x000067ffu, 0x000020bcu, 0x0003003eu, 0x00006800u, 0x00001adeu, 0x0003003eu, 0x00006801u, 0x00000310u, 0x0003003eu, 0x00006802u, 0x000083f4u, 0x0003003eu, 0x00006803u, 0x00009647u, 0x0003003eu, 0x00006804u, 0x000096f1u, 0x0003003eu, 0x00006805u, 0x00005464u, 0x0003003eu, 0x00006826u, 0x000020adu, 0x0003003eu, 0x00006827u, 0x000020b2u, 0x0003003eu, 0x00006828u, 0x000020b7u, 0x0003003eu, 0x00006829u, 0x000020bcu, 0x0003003eu, 0x0000682au, 0x00001adeu, 0x0003003eu, 0x0000682bu, 0x00000310u, 0x0003003eu, 0x0000682cu, 0x000083f4u, 0x0003003eu, 0x0000682du, 0x00009647u, 0x0003003eu, 0x0000682eu, 0x000096f1u, 0x0003003eu, 0x0000682fu, 0x00005464u, 0x0004003du, 0x00000009u, 0x00001ae5u, 0x00001802u, 0x0003003eu, 0x000018a2u, 0x00001ae5u, 0x0004003du, 0x00000009u, 0x00001ae6u, 0x00001803u, 0x0003003eu, 0x000018a3u, 0x00001ae6u, 0x0003003eu, 0x000018a4u, 0x00009127u, 0x0003003eu, 0x000018a5u, 0x000019d4u, 0x0003003eu, 0x000018a6u, 0x0000192au, 0x0003003eu, 0x000018a7u, 0x0000192du, 0x0003003eu, 0x000018a8u, 0x0000194bu, 0x0003003eu, 0x00005996u, 0x000020adu, 0x0003003eu, 0x00005997u, 0x00001adeu, 0x0003003eu, 0x00005998u, 0x00000310u, 0x0003003eu, 0x00005999u, 0x000083f4u, 0x0003003eu, 0x0000599au, 0x00009647u, 0x0003003eu, 0x0000599bu, 0x00005464u, 0x00050041u, 0x00000038u, 0x00005480u, 0x000018a2u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005481u, 0x00005480u, 0x0003003eu, 0x00005467u, 0x00005481u, 0x00050041u, 0x00000038u, 0x00005482u, 0x000018a3u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005483u, 0x00005482u, 0x0003003eu, 0x00005468u, 0x00005483u, 0x000300f7u, 0x000054c2u, 0x00000000u, 0x000f00fbu, 0x00005481u, 0x000054c3u, 0x00000000u, 0x000054c4u, 0x00000001u, 0x000054c5u, 0x00000002u, 0x000054c6u, 0x00000004u, 0x000054c7u, 0x00000007u, 0x000054c8u, 0x00000006u, 0x000054c9u, 0x000200f8u, 0x000054c9u, 0x0003003eu, 0x000054beu, 0x000011dbu, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c8u, 0x00060050u, 0x00000052u, 0x000054dbu, 0x00005464u, 0x00005464u, 0x00005464u, 0x0003003eu, 0x000054beu, 0x000054dbu, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c7u, 0x0004003du, 0x00000009u, 0x000054d7u, 0x00005997u, 0x0008004fu, 0x00000052u, 0x000054d8u, 0x000054d7u, 0x000054d7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054beu, 0x000054d8u, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c6u, 0x0004003du, 0x00000009u, 0x000054d4u, 0x0000599au, 0x0008004fu, 0x00000052u, 0x000054d5u, 0x000054d4u, 0x000054d4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054beu, 0x000054d5u, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c5u, 0x0004003du, 0x00000009u, 0x000054d1u, 0x00005999u, 0x0008004fu, 0x00000052u, 0x000054d2u, 0x000054d1u, 0x000054d1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054beu, 0x000054d2u, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c4u, 0x0004003du, 0x00000009u, 0x000054ceu, 0x00005998u, 0x0008004fu, 0x00000052u, 0x000054cfu, 0x000054ceu, 0x000054ceu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054beu, 0x000054cfu, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c3u, 0x0004003du, 0x00000009u, 0x000054cbu, 0x00005996u, 0x0008004fu, 0x00000052u, 0x000054ccu, 0x000054cbu, 0x000054cbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054beu, 0x000054ccu, 0x000200f9u, 0x000054c2u, 0x000200f8u, 0x000054c2u, 0x001100f5u, 0x00000052u, 0x00009ffdu, 0x000054ccu, 0x000054c3u, 0x000054cfu, 0x000054c4u, 0x000054d2u, 0x000054c5u, 0x000054d5u, 0x000054c6u, 0x000054d8u, 0x000054c7u, 0x000054dbu, 0x000054c8u, 0x000011dbu, 0x000054c9u, 0x000300f7u, 0x000054ddu, 0x00000000u, 0x000d00fbu, 0x00005483u, 0x000054deu, 0x00000000u, 0x000054dfu, 0x00000001u, 0x000054e0u, 0x00000002u, 0x000054e1u, 0x00000004u, 0x000054e2u, 0x00000006u, 0x000054e3u, 0x000200f8u, 0x000054e3u, 0x0003003eu, 0x000054bfu, 0x000011dau, 0x000200f9u, 0x000054ddu, 0x000200f8u, 0x000054e2u, 0x00050041u, 0x00000038u, 0x000059a6u, 0x00005997u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000054edu, 0x000059a6u, 0x0003003eu, 0x000054bfu, 0x000054edu, 0x000200f9u, 0x000054ddu, 0x000200f8u, 0x000054e1u, 0x00050041u, 0x00000038u, 0x000059a5u, 0x0000599au, 0x00000331u, 0x0004003du, 0x00000008u, 0x000054ebu, 0x000059a5u, 0x0003003eu, 0x000054bfu, 0x000054ebu, 0x000200f9u, 0x000054ddu, 0x000200f8u, 0x000054e0u, 0x00050041u, 0x00000038u, 0x000059a4u, 0x00005999u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000054e9u, 0x000059a4u, 0x0003003eu, 0x000054bfu, 0x000054e9u, 0x000200f9u, 0x000054ddu, 0x000200f8u, 0x000054dfu, 0x00050041u, 0x00000038u, 0x000059a3u, 0x00005998u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000054e7u, 0x000059a3u, 0x0003003eu, 0x000054bfu, 0x000054e7u, 0x000200f9u, 0x000054ddu, 0x000200f8u, 0x000054deu, 0x00050041u, 0x00000038u, 0x000059a2u, 0x00005996u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000054e5u, 0x000059a2u, 0x0003003eu, 0x000054bfu, 0x000054e5u, 0x000200f9u, 0x000054ddu, 0x000200f8u, 0x000054ddu, 0x000f00f5u, 0x00000008u, 0x00009ffeu, 0x000054e5u, 0x000054deu, 0x000054e7u, 0x000054dfu, 0x000054e9u, 0x000054e0u, 0x000054ebu, 0x000054e1u, 0x000054edu, 0x000054e2u, 0x000011dau, 0x000054e3u, 0x00050051u, 0x00000008u, 0x000054f0u, 0x00009ffdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000054f1u, 0x00009ffdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000054f2u, 0x00009ffdu, 0x00000002u, 0x00070050u, 0x00000009u, 0x000054f3u, 0x000054f0u, 0x000054f1u, 0x000054f2u, 0x00009ffeu, 0x0003003eu, 0x000054c0u, 0x000054f3u, 0x0003003eu, 0x00005465u, 0x000054f3u, 0x0003003eu, 0x000059a7u, 0x000020b2u, 0x0003003eu, 0x000059a8u, 0x00001adeu, 0x0003003eu, 0x000059a9u, 0x00000310u, 0x0003003eu, 0x000059aau, 0x000083f4u, 0x0003003eu, 0x000059abu, 0x00009647u, 0x00050041u, 0x00000038u, 0x00005486u, 0x000018a2u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00005487u, 0x00005486u, 0x0003003eu, 0x0000546bu, 0x00005487u, 0x00050041u, 0x00000038u, 0x00005488u, 0x000018a3u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00005489u, 0x00005488u, 0x0003003eu, 0x0000546cu, 0x00005489u, 0x000300f7u, 0x000054f8u, 0x00000000u, 0x000d00fbu, 0x00005487u, 0x000054f9u, 0x00000000u, 0x000054fau, 0x00000001u, 0x000054fbu, 0x00000002u, 0x000054fcu, 0x00000004u, 0x000054fdu, 0x00000007u, 0x000054feu, 0x000200f8u, 0x000054feu, 0x00050041u, 0x00000038u, 0x000059b1u, 0x000059a7u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000550fu, 0x000059b1u, 0x000500c4u, 0x00000008u, 0x00005510u, 0x0000550fu, 0x000001e0u, 0x00050041u, 0x00000038u, 0x000059b2u, 0x000059a7u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005512u, 0x000059b2u, 0x000500c5u, 0x00000008u, 0x00005513u, 0x00005510u, 0x00005512u, 0x00060050u, 0x00000052u, 0x00005514u, 0x00005513u, 0x00005513u, 0x00005513u, 0x0003003eu, 0x000054f4u, 0x00005514u, 0x000200f9u, 0x000054f8u, 0x000200f8u, 0x000054fdu, 0x0004003du, 0x00000009u, 0x0000550cu, 0x000059a8u, 0x0008004fu, 0x00000052u, 0x0000550du, 0x0000550cu, 0x0000550cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054f4u, 0x0000550du, 0x000200f9u, 0x000054f8u, 0x000200f8u, 0x000054fcu, 0x0004003du, 0x00000009u, 0x00005509u, 0x000059abu, 0x0008004fu, 0x00000052u, 0x0000550au, 0x00005509u, 0x00005509u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054f4u, 0x0000550au, 0x000200f9u, 0x000054f8u, 0x000200f8u, 0x000054fbu, 0x0004003du, 0x00000009u, 0x00005506u, 0x000059aau, 0x0008004fu, 0x00000052u, 0x00005507u, 0x00005506u, 0x00005506u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054f4u, 0x00005507u, 0x000200f9u, 0x000054f8u, 0x000200f8u, 0x000054fau, 0x0004003du, 0x00000009u, 0x00005503u, 0x000059a9u, 0x0008004fu, 0x00000052u, 0x00005504u, 0x00005503u, 0x00005503u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054f4u, 0x00005504u, 0x000200f9u, 0x000054f8u, 0x000200f8u, 0x000054f9u, 0x0004003du, 0x00000009u, 0x00005500u, 0x000059a7u, 0x0008004fu, 0x00000052u, 0x00005501u, 0x00005500u, 0x00005500u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000054f4u, 0x00005501u, 0x000200f9u, 0x000054f8u, 0x000200f8u, 0x000054f8u, 0x000f00f5u, 0x00000052u, 0x0000a015u, 0x00005501u, 0x000054f9u, 0x00005504u, 0x000054fau, 0x00005507u, 0x000054fbu, 0x0000550au, 0x000054fcu, 0x0000550du, 0x000054fdu, 0x00005514u, 0x000054feu, 0x000300f7u, 0x00005516u, 0x00000000u, 0x000d00fbu, 0x00005489u, 0x00005517u, 0x00000000u, 0x00005518u, 0x00000001u, 0x00005519u, 0x00000002u, 0x0000551au, 0x00000004u, 0x0000551bu, 0x00000006u, 0x0000551cu, 0x000200f8u, 0x0000551cu, 0x0003003eu, 0x000054f5u, 0x000011dau, 0x000200f9u, 0x00005516u, 0x000200f8u, 0x0000551bu, 0x00050041u, 0x00000038u, 0x000059b7u, 0x000059a8u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005526u, 0x000059b7u, 0x0003003eu, 0x000054f5u, 0x00005526u, 0x000200f9u, 0x00005516u, 0x000200f8u, 0x0000551au, 0x00050041u, 0x00000038u, 0x000059b6u, 0x000059abu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005524u, 0x000059b6u, 0x0003003eu, 0x000054f5u, 0x00005524u, 0x000200f9u, 0x00005516u, 0x000200f8u, 0x00005519u, 0x00050041u, 0x00000038u, 0x000059b5u, 0x000059aau, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005522u, 0x000059b5u, 0x0003003eu, 0x000054f5u, 0x00005522u, 0x000200f9u, 0x00005516u, 0x000200f8u, 0x00005518u, 0x00050041u, 0x00000038u, 0x000059b4u, 0x000059a9u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005520u, 0x000059b4u, 0x0003003eu, 0x000054f5u, 0x00005520u, 0x000200f9u, 0x00005516u, 0x000200f8u, 0x00005517u, 0x00050041u, 0x00000038u, 0x000059b3u, 0x000059a7u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000551eu, 0x000059b3u, 0x0003003eu, 0x000054f5u, 0x0000551eu, 0x000200f9u, 0x00005516u, 0x000200f8u, 0x00005516u, 0x000f00f5u, 0x00000008u, 0x0000a016u, 0x0000551eu, 0x00005517u, 0x00005520u, 0x00005518u, 0x00005522u, 0x00005519u, 0x00005524u, 0x0000551au, 0x00005526u, 0x0000551bu, 0x000011dau, 0x0000551cu, 0x00050051u, 0x00000008u, 0x00005529u, 0x0000a015u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000552au, 0x0000a015u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000552bu, 0x0000a015u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000552cu, 0x00005529u, 0x0000552au, 0x0000552bu, 0x0000a016u, 0x0003003eu, 0x000054f6u, 0x0000552cu, 0x0003003eu, 0x00005469u, 0x0000552cu, 0x0003003eu, 0x000059b8u, 0x000020b7u, 0x0003003eu, 0x000059b9u, 0x00001adeu, 0x0003003eu, 0x000059bau, 0x00000310u, 0x0003003eu, 0x000059bbu, 0x000083f4u, 0x0003003eu, 0x000059bcu, 0x00009647u, 0x0003003eu, 0x000059bdu, 0x000096f1u, 0x00050041u, 0x00000038u, 0x0000548cu, 0x000018a2u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000548du, 0x0000548cu, 0x0003003eu, 0x0000546fu, 0x0000548du, 0x00050041u, 0x00000038u, 0x0000548eu, 0x000018a3u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000548fu, 0x0000548eu, 0x0003003eu, 0x00005470u, 0x0000548fu, 0x000300f7u, 0x00005531u, 0x00000000u, 0x001700fbu, 0x0000548du, 0x00005532u, 0x00000000u, 0x00005533u, 0x00000007u, 0x00005534u, 0x00000001u, 0x00005535u, 0x00000002u, 0x00005536u, 0x00000004u, 0x00005537u, 0x00000008u, 0x00005538u, 0x00000009u, 0x00005539u, 0x0000000bu, 0x0000553au, 0x0000000du, 0x0000553bu, 0x0000000fu, 0x0000553cu, 0x000200f8u, 0x0000553cu, 0x00050041u, 0x00000038u, 0x000059c4u, 0x000059b8u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000555cu, 0x000059c4u, 0x000500c4u, 0x00000008u, 0x0000555du, 0x0000555cu, 0x000001e0u, 0x00050041u, 0x00000038u, 0x000059c5u, 0x000059b8u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000555fu, 0x000059c5u, 0x000500c5u, 0x00000008u, 0x00005560u, 0x0000555du, 0x0000555fu, 0x00060050u, 0x00000052u, 0x00005561u, 0x00005560u, 0x00005560u, 0x00005560u, 0x0003003eu, 0x0000552du, 0x00005561u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x0000553bu, 0x00060050u, 0x00000052u, 0x0000555au, 0x000096f1u, 0x000096f1u, 0x000096f1u, 0x0003003eu, 0x0000552du, 0x0000555au, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x0000553au, 0x0004003du, 0x00000009u, 0x00005556u, 0x000059b9u, 0x0008004fu, 0x00000052u, 0x00005557u, 0x00005556u, 0x00005556u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x0000552du, 0x00005557u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005539u, 0x0004003du, 0x00000009u, 0x00005553u, 0x000059bcu, 0x0008004fu, 0x00000052u, 0x00005554u, 0x00005553u, 0x00005553u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x0000552du, 0x00005554u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005538u, 0x0004003du, 0x00000009u, 0x00005550u, 0x000059bbu, 0x0008004fu, 0x00000052u, 0x00005551u, 0x00005550u, 0x00005550u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x0000552du, 0x00005551u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005537u, 0x0004003du, 0x00000009u, 0x0000554du, 0x000059b9u, 0x0008004fu, 0x00000052u, 0x0000554eu, 0x0000554du, 0x0000554du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000552du, 0x0000554eu, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005536u, 0x0004003du, 0x00000009u, 0x0000554au, 0x000059bcu, 0x0008004fu, 0x00000052u, 0x0000554bu, 0x0000554au, 0x0000554au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000552du, 0x0000554bu, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005535u, 0x0004003du, 0x00000009u, 0x00005547u, 0x000059bbu, 0x0008004fu, 0x00000052u, 0x00005548u, 0x00005547u, 0x00005547u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000552du, 0x00005548u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005534u, 0x0003003eu, 0x0000552du, 0x0000b1c8u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005533u, 0x0003003eu, 0x0000552du, 0x0000b1c8u, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005532u, 0x0004003du, 0x00000009u, 0x0000553eu, 0x000059b8u, 0x0008004fu, 0x00000052u, 0x0000553fu, 0x0000553eu, 0x0000553eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000552du, 0x0000553fu, 0x000200f9u, 0x00005531u, 0x000200f8u, 0x00005531u, 0x001900f5u, 0x00000052u, 0x0000a02eu, 0x0000553fu, 0x00005532u, 0x0000b1c8u, 0x00005533u, 0x0000b1c8u, 0x00005534u, 0x00005548u, 0x00005535u, 0x0000554bu, 0x00005536u, 0x0000554eu, 0x00005537u, 0x00005551u, 0x00005538u, 0x00005554u, 0x00005539u, 0x00005557u, 0x0000553au, 0x0000555au, 0x0000553bu, 0x00005561u, 0x0000553cu, 0x000300f7u, 0x00005563u, 0x00000000u, 0x000b00fbu, 0x0000548fu, 0x00005564u, 0x00000000u, 0x00005565u, 0x00000001u, 0x00005566u, 0x00000002u, 0x00005567u, 0x00000004u, 0x00005568u, 0x000200f8u, 0x00005568u, 0x00050041u, 0x00000038u, 0x000059c9u, 0x000059b9u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005572u, 0x000059c9u, 0x0003003eu, 0x0000552eu, 0x00005572u, 0x000200f9u, 0x00005563u, 0x000200f8u, 0x00005567u, 0x00050041u, 0x00000038u, 0x000059c8u, 0x000059bcu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005570u, 0x000059c8u, 0x0003003eu, 0x0000552eu, 0x00005570u, 0x000200f9u, 0x00005563u, 0x000200f8u, 0x00005566u, 0x00050041u, 0x00000038u, 0x000059c7u, 0x000059bbu, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000556eu, 0x000059c7u, 0x0003003eu, 0x0000552eu, 0x0000556eu, 0x000200f9u, 0x00005563u, 0x000200f8u, 0x00005565u, 0x0003003eu, 0x0000552eu, 0x000096f1u, 0x000200f9u, 0x00005563u, 0x000200f8u, 0x00005564u, 0x00050041u, 0x00000038u, 0x000059c6u, 0x000059b8u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000556au, 0x000059c6u, 0x0003003eu, 0x0000552eu, 0x0000556au, 0x000200f9u, 0x00005563u, 0x000200f8u, 0x00005563u, 0x000d00f5u, 0x00000008u, 0x0000a02fu, 0x0000556au, 0x00005564u, 0x000096f1u, 0x00005565u, 0x0000556eu, 0x00005566u, 0x00005570u, 0x00005567u, 0x00005572u, 0x00005568u, 0x00050051u, 0x00000008u, 0x00005575u, 0x0000a02eu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005576u, 0x0000a02eu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005577u, 0x0000a02eu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005578u, 0x00005575u, 0x00005576u, 0x00005577u, 0x0000a02fu, 0x0003003eu, 0x0000552fu, 0x00005578u, 0x0003003eu, 0x0000546du, 0x00005578u, 0x0003003eu, 0x000059cau, 0x000020bcu, 0x0003003eu, 0x000059cbu, 0x00001adeu, 0x0003003eu, 0x000059ccu, 0x00000310u, 0x0003003eu, 0x000059cdu, 0x000083f4u, 0x0003003eu, 0x000059ceu, 0x00009647u, 0x00050041u, 0x00000038u, 0x00005492u, 0x000018a2u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005493u, 0x00005492u, 0x0003003eu, 0x00005473u, 0x00005493u, 0x00050041u, 0x00000038u, 0x00005494u, 0x000018a3u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005495u, 0x00005494u, 0x0003003eu, 0x00005474u, 0x00005495u, 0x000300f7u, 0x0000557du, 0x00000000u, 0x000d00fbu, 0x00005493u, 0x0000557eu, 0x00000000u, 0x0000557fu, 0x00000001u, 0x00005580u, 0x00000002u, 0x00005581u, 0x00000004u, 0x00005582u, 0x00000006u, 0x00005583u, 0x000200f8u, 0x00005583u, 0x0003003eu, 0x00005579u, 0x000011dbu, 0x000200f9u, 0x0000557du, 0x000200f8u, 0x00005582u, 0x0004003du, 0x00000009u, 0x00005591u, 0x000059cbu, 0x0008004fu, 0x00000052u, 0x00005592u, 0x00005591u, 0x00005591u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005579u, 0x00005592u, 0x000200f9u, 0x0000557du, 0x000200f8u, 0x00005581u, 0x0004003du, 0x00000009u, 0x0000558eu, 0x000059ceu, 0x0008004fu, 0x00000052u, 0x0000558fu, 0x0000558eu, 0x0000558eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005579u, 0x0000558fu, 0x000200f9u, 0x0000557du, 0x000200f8u, 0x00005580u, 0x0004003du, 0x00000009u, 0x0000558bu, 0x000059cdu, 0x0008004fu, 0x00000052u, 0x0000558cu, 0x0000558bu, 0x0000558bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005579u, 0x0000558cu, 0x000200f9u, 0x0000557du, 0x000200f8u, 0x0000557fu, 0x0004003du, 0x00000009u, 0x00005588u, 0x000059ccu, 0x0008004fu, 0x00000052u, 0x00005589u, 0x00005588u, 0x00005588u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005579u, 0x00005589u, 0x000200f9u, 0x0000557du, 0x000200f8u, 0x0000557eu, 0x0004003du, 0x00000009u, 0x00005585u, 0x000059cau, 0x0008004fu, 0x00000052u, 0x00005586u, 0x00005585u, 0x00005585u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005579u, 0x00005586u, 0x000200f9u, 0x0000557du, 0x000200f8u, 0x0000557du, 0x000f00f5u, 0x00000052u, 0x0000a046u, 0x00005586u, 0x0000557eu, 0x00005589u, 0x0000557fu, 0x0000558cu, 0x00005580u, 0x0000558fu, 0x00005581u, 0x00005592u, 0x00005582u, 0x000011dbu, 0x00005583u, 0x000300f7u, 0x00005594u, 0x00000000u, 0x000d00fbu, 0x00005495u, 0x00005595u, 0x00000000u, 0x00005596u, 0x00000001u, 0x00005597u, 0x00000002u, 0x00005598u, 0x00000004u, 0x00005599u, 0x00000006u, 0x0000559au, 0x000200f8u, 0x0000559au, 0x0003003eu, 0x0000557au, 0x000011dau, 0x000200f9u, 0x00005594u, 0x000200f8u, 0x00005599u, 0x00050041u, 0x00000038u, 0x000059d8u, 0x000059cbu, 0x00000331u, 0x0004003du, 0x00000008u, 0x000055a4u, 0x000059d8u, 0x0003003eu, 0x0000557au, 0x000055a4u, 0x000200f9u, 0x00005594u, 0x000200f8u, 0x00005598u, 0x00050041u, 0x00000038u, 0x000059d7u, 0x000059ceu, 0x00000331u, 0x0004003du, 0x00000008u, 0x000055a2u, 0x000059d7u, 0x0003003eu, 0x0000557au, 0x000055a2u, 0x000200f9u, 0x00005594u, 0x000200f8u, 0x00005597u, 0x00050041u, 0x00000038u, 0x000059d6u, 0x000059cdu, 0x00000331u, 0x0004003du, 0x00000008u, 0x000055a0u, 0x000059d6u, 0x0003003eu, 0x0000557au, 0x000055a0u, 0x000200f9u, 0x00005594u, 0x000200f8u, 0x00005596u, 0x00050041u, 0x00000038u, 0x000059d5u, 0x000059ccu, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000559eu, 0x000059d5u, 0x0003003eu, 0x0000557au, 0x0000559eu, 0x000200f9u, 0x00005594u, 0x000200f8u, 0x00005595u, 0x00050041u, 0x00000038u, 0x000059d4u, 0x000059cau, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000559cu, 0x000059d4u, 0x0003003eu, 0x0000557au, 0x0000559cu, 0x000200f9u, 0x00005594u, 0x000200f8u, 0x00005594u, 0x000f00f5u, 0x00000008u, 0x0000a047u, 0x0000559cu, 0x00005595u, 0x0000559eu, 0x00005596u, 0x000055a0u, 0x00005597u, 0x000055a2u, 0x00005598u, 0x000055a4u, 0x00005599u, 0x000011dau, 0x0000559au, 0x00050051u, 0x00000008u, 0x000055a7u, 0x0000a046u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000055a8u, 0x0000a046u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000055a9u, 0x0000a046u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000055aau, 0x000055a7u, 0x000055a8u, 0x000055a9u, 0x0000a047u, 0x0003003eu, 0x0000557bu, 0x000055aau, 0x0003003eu, 0x00005471u, 0x000055aau, 0x0003003eu, 0x00005476u, 0x000054f3u, 0x0003003eu, 0x00005477u, 0x0000552cu, 0x0003003eu, 0x00005478u, 0x00005578u, 0x0003003eu, 0x00005479u, 0x000055aau, 0x000600cau, 0x00000009u, 0x000055b1u, 0x00005578u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00005478u, 0x000055b1u, 0x0003003eu, 0x000055abu, 0x000054f3u, 0x00050082u, 0x00000009u, 0x000055d2u, 0x000054f3u, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x000055d3u, 0x000055d2u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x000055d5u, 0x000055d3u, 0x0000b1b9u, 0x0003003eu, 0x000055cfu, 0x000055d5u, 0x0003003eu, 0x00005476u, 0x000055d5u, 0x0003003eu, 0x000055acu, 0x0000552cu, 0x00050082u, 0x00000009u, 0x000055d9u, 0x0000552cu, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x000055dau, 0x000055d9u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x000055dcu, 0x000055dau, 0x0000b1b9u, 0x0003003eu, 0x000055d6u, 0x000055dcu, 0x0003003eu, 0x00005477u, 0x000055dcu, 0x0003003eu, 0x000055adu, 0x000055aau, 0x00050082u, 0x00000009u, 0x000055e0u, 0x000055aau, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x000055e1u, 0x000055e0u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x000055e3u, 0x000055e1u, 0x0000b1b9u, 0x0003003eu, 0x000055ddu, 0x000055e3u, 0x0003003eu, 0x00005479u, 0x000055e3u, 0x00050082u, 0x00000009u, 0x000055bau, 0x000055d5u, 0x000055dcu, 0x00050084u, 0x00000009u, 0x000055bcu, 0x000055bau, 0x000055b1u, 0x0003003eu, 0x000055aeu, 0x000055bcu, 0x00050080u, 0x00000009u, 0x000055bfu, 0x000055bcu, 0x0000b1b9u, 0x0003003eu, 0x000055aeu, 0x000055bfu, 0x000500c3u, 0x00000009u, 0x000055c2u, 0x000055bfu, 0x0000b1c3u, 0x00050051u, 0x00000008u, 0x000055c3u, 0x000055c2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000055c4u, 0x000055c2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000055c5u, 0x000055c2u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000055c6u, 0x000055c2u, 0x00000003u, 0x00050051u, 0x00000008u, 0x000055c9u, 0x000055e3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000055cau, 0x000055e3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000055cbu, 0x000055e3u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000055ccu, 0x000055e3u, 0x00000003u, 0x00050080u, 0x00000009u, 0x000055ceu, 0x000055c2u, 0x000055e3u, 0x0003003eu, 0x000055afu, 0x000055ceu, 0x0003003eu, 0x00005475u, 0x000055ceu, 0x000300f7u, 0x0000549du, 0x00000000u, 0x000400fau, 0x0000194bu, 0x0000549eu, 0x0000549fu, 0x000200f8u, 0x0000549fu, 0x0003003eu, 0x000018a9u, 0x00000185u, 0x000200f9u, 0x0000549du, 0x000200f8u, 0x0000549eu, 0x00050041u, 0x00000038u, 0x000054a0u, 0x00005475u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000054a1u, 0x000054a0u, 0x0003003eu, 0x0000547bu, 0x000054a1u, 0x00050082u, 0x00000008u, 0x000055e6u, 0x000054a1u, 0x00000323u, 0x000600cau, 0x00000008u, 0x000055e7u, 0x000055e6u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000008u, 0x000055e8u, 0x000055e7u, 0x00000323u, 0x0008000cu, 0x00000008u, 0x000055e9u, 0x00000001u, 0x0000002du, 0x000055e8u, 0x00000185u, 0x000002eeu, 0x0003003eu, 0x000055e4u, 0x000055e9u, 0x0003003eu, 0x0000547au, 0x000055e9u, 0x00050080u, 0x00000008u, 0x000054a5u, 0x000055e9u, 0x00000194u, 0x000500c3u, 0x00000008u, 0x000054a6u, 0x000054a5u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x000054a7u, 0x000055e9u, 0x000054a6u, 0x0003003eu, 0x0000547cu, 0x000054a7u, 0x000300f7u, 0x000054a9u, 0x00000000u, 0x000400fau, 0x0000192du, 0x000054aau, 0x000054abu, 0x000200f8u, 0x000054abu, 0x00050080u, 0x00000008u, 0x000054bau, 0x000054a7u, 0x00009127u, 0x0003003eu, 0x0000547cu, 0x000054bau, 0x000200f9u, 0x000054a9u, 0x000200f8u, 0x000054aau, 0x000300f7u, 0x000054adu, 0x00000000u, 0x000400fau, 0x0000192au, 0x000054aeu, 0x000054afu, 0x000200f8u, 0x000054afu, 0x000500c4u, 0x00000008u, 0x000054b6u, 0x000019d4u, 0x000001a0u, 0x0003003eu, 0x0000547du, 0x000054b6u, 0x000200f9u, 0x000054adu, 0x000200f8u, 0x000054aeu, 0x00050084u, 0x00000008u, 0x000054b2u, 0x000054a7u, 0x000019d4u, 0x00050080u, 0x00000008u, 0x000054b3u, 0x000054b2u, 0x0000019du, 0x000500c3u, 0x00000008u, 0x000054b4u, 0x000054b3u, 0x0000019au, 0x0003003eu, 0x0000547du, 0x000054b4u, 0x000200f9u, 0x000054adu, 0x000200f8u, 0x000054adu, 0x000700f5u, 0x00000008u, 0x0000a07cu, 0x000054b4u, 0x000054aeu, 0x000054b6u, 0x000054afu, 0x0003003eu, 0x0000547cu, 0x0000a07cu, 0x000200f9u, 0x000054a9u, 0x000200f8u, 0x000054a9u, 0x000700f5u, 0x00000008u, 0x0000a07du, 0x0000a07cu, 0x000054adu, 0x000054bau, 0x000054abu, 0x0008000cu, 0x00000008u, 0x000054bcu, 0x00000001u, 0x0000002du, 0x0000a07du, 0x00000185u, 0x000002eeu, 0x0003003eu, 0x000018a9u, 0x000054bcu, 0x000200f9u, 0x0000549du, 0x000200f8u, 0x0000549du, 0x000700f5u, 0x00000008u, 0x0000a07eu, 0x000054bcu, 0x000054a9u, 0x00000185u, 0x0000549fu, 0x0004003du, 0x00000009u, 0x000054bdu, 0x00005475u, 0x0003003eu, 0x0000547eu, 0x000054bdu, 0x0003003eu, 0x000018a0u, 0x0000a07eu, 0x0003003eu, 0x00006801u, 0x000054bdu, 0x0003003eu, 0x000067fcu, 0x000020c1u, 0x0003003eu, 0x000067fdu, 0x000020c6u, 0x0003003eu, 0x000067feu, 0x000020cbu, 0x0003003eu, 0x000067ffu, 0x000020d0u, 0x0003003eu, 0x000018aau, 0x000083f4u, 0x0003003eu, 0x00006802u, 0x00009647u, 0x0003003eu, 0x00006803u, 0x000083f4u, 0x000d0050u, 0x0000014du, 0x00006825u, 0x000020c1u, 0x000020c6u, 0x000020cbu, 0x000020d0u, 0x00001adeu, 0x000054bdu, 0x00009647u, 0x000083f4u, 0x000096f1u, 0x00005464u, 0x0003003eu, 0x00006866u, 0x000020c1u, 0x0003003eu, 0x00006867u, 0x000020c6u, 0x0003003eu, 0x00006868u, 0x000020cbu, 0x0003003eu, 0x00006869u, 0x000020d0u, 0x0003003eu, 0x0000686au, 0x00001adeu, 0x0003003eu, 0x0000686bu, 0x000054bdu, 0x0003003eu, 0x0000686cu, 0x00009647u, 0x0003003eu, 0x0000686du, 0x000083f4u, 0x0003003eu, 0x0000686eu, 0x000096f1u, 0x0003003eu, 0x0000686fu, 0x00005464u, 0x0004003du, 0x00000009u, 0x00001b03u, 0x00001804u, 0x0003003eu, 0x000018adu, 0x00001b03u, 0x0004003du, 0x00000009u, 0x00001b04u, 0x00001805u, 0x0003003eu, 0x000018aeu, 0x00001b04u, 0x0003003eu, 0x000018afu, 0x00009127u, 0x0003003eu, 0x000018b0u, 0x000019d4u, 0x0003003eu, 0x000018b1u, 0x0000192au, 0x0003003eu, 0x000018b2u, 0x0000192du, 0x0003003eu, 0x00005953u, 0x000020c1u, 0x0003003eu, 0x00005954u, 0x00001adeu, 0x0003003eu, 0x00005955u, 0x000054bdu, 0x0003003eu, 0x00005956u, 0x00009647u, 0x0003003eu, 0x00005957u, 0x000083f4u, 0x0003003eu, 0x00005958u, 0x00005464u, 0x00050041u, 0x00000038u, 0x00005604u, 0x000018adu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005605u, 0x00005604u, 0x0003003eu, 0x000055ecu, 0x00005605u, 0x00050041u, 0x00000038u, 0x00005606u, 0x000018aeu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00005607u, 0x00005606u, 0x0003003eu, 0x000055edu, 0x00005607u, 0x000300f7u, 0x00005646u, 0x00000000u, 0x000f00fbu, 0x00005605u, 0x00005647u, 0x00000000u, 0x00005648u, 0x00000001u, 0x00005649u, 0x00000002u, 0x0000564au, 0x00000004u, 0x0000564bu, 0x00000007u, 0x0000564cu, 0x00000006u, 0x0000564du, 0x000200f8u, 0x0000564du, 0x0003003eu, 0x00005642u, 0x000011dbu, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x0000564cu, 0x00060050u, 0x00000052u, 0x0000565fu, 0x00005464u, 0x00005464u, 0x00005464u, 0x0003003eu, 0x00005642u, 0x0000565fu, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x0000564bu, 0x0004003du, 0x00000009u, 0x0000565bu, 0x00005954u, 0x0008004fu, 0x00000052u, 0x0000565cu, 0x0000565bu, 0x0000565bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005642u, 0x0000565cu, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x0000564au, 0x0004003du, 0x00000009u, 0x00005658u, 0x00005957u, 0x0008004fu, 0x00000052u, 0x00005659u, 0x00005658u, 0x00005658u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005642u, 0x00005659u, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x00005649u, 0x0004003du, 0x00000009u, 0x00005655u, 0x00005956u, 0x0008004fu, 0x00000052u, 0x00005656u, 0x00005655u, 0x00005655u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005642u, 0x00005656u, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x00005648u, 0x0004003du, 0x00000009u, 0x00005652u, 0x00005955u, 0x0008004fu, 0x00000052u, 0x00005653u, 0x00005652u, 0x00005652u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005642u, 0x00005653u, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x00005647u, 0x0004003du, 0x00000009u, 0x0000564fu, 0x00005953u, 0x0008004fu, 0x00000052u, 0x00005650u, 0x0000564fu, 0x0000564fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005642u, 0x00005650u, 0x000200f9u, 0x00005646u, 0x000200f8u, 0x00005646u, 0x001100f5u, 0x00000052u, 0x0000a110u, 0x00005650u, 0x00005647u, 0x00005653u, 0x00005648u, 0x00005656u, 0x00005649u, 0x00005659u, 0x0000564au, 0x0000565cu, 0x0000564bu, 0x0000565fu, 0x0000564cu, 0x000011dbu, 0x0000564du, 0x000300f7u, 0x00005661u, 0x00000000u, 0x000d00fbu, 0x00005607u, 0x00005662u, 0x00000000u, 0x00005663u, 0x00000001u, 0x00005664u, 0x00000002u, 0x00005665u, 0x00000004u, 0x00005666u, 0x00000006u, 0x00005667u, 0x000200f8u, 0x00005667u, 0x0003003eu, 0x00005643u, 0x000011dau, 0x000200f9u, 0x00005661u, 0x000200f8u, 0x00005666u, 0x00050041u, 0x00000038u, 0x00005963u, 0x00005954u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005671u, 0x00005963u, 0x0003003eu, 0x00005643u, 0x00005671u, 0x000200f9u, 0x00005661u, 0x000200f8u, 0x00005665u, 0x00050041u, 0x00000038u, 0x00005962u, 0x00005957u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000566fu, 0x00005962u, 0x0003003eu, 0x00005643u, 0x0000566fu, 0x000200f9u, 0x00005661u, 0x000200f8u, 0x00005664u, 0x00050041u, 0x00000038u, 0x00005961u, 0x00005956u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000566du, 0x00005961u, 0x0003003eu, 0x00005643u, 0x0000566du, 0x000200f9u, 0x00005661u, 0x000200f8u, 0x00005663u, 0x00050041u, 0x00000038u, 0x00005960u, 0x00005955u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000566bu, 0x00005960u, 0x0003003eu, 0x00005643u, 0x0000566bu, 0x000200f9u, 0x00005661u, 0x000200f8u, 0x00005662u, 0x00050041u, 0x00000038u, 0x0000595fu, 0x00005953u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005669u, 0x0000595fu, 0x0003003eu, 0x00005643u, 0x00005669u, 0x000200f9u, 0x00005661u, 0x000200f8u, 0x00005661u, 0x000f00f5u, 0x00000008u, 0x0000a111u, 0x00005669u, 0x00005662u, 0x0000566bu, 0x00005663u, 0x0000566du, 0x00005664u, 0x0000566fu, 0x00005665u, 0x00005671u, 0x00005666u, 0x000011dau, 0x00005667u, 0x00050051u, 0x00000008u, 0x00005674u, 0x0000a110u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005675u, 0x0000a110u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005676u, 0x0000a110u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005677u, 0x00005674u, 0x00005675u, 0x00005676u, 0x0000a111u, 0x0003003eu, 0x00005644u, 0x00005677u, 0x0003003eu, 0x000055eau, 0x00005677u, 0x0003003eu, 0x00005964u, 0x000020c6u, 0x0003003eu, 0x00005965u, 0x00001adeu, 0x0003003eu, 0x00005966u, 0x000054bdu, 0x0003003eu, 0x00005967u, 0x00009647u, 0x0003003eu, 0x00005968u, 0x000083f4u, 0x00050041u, 0x00000038u, 0x0000560au, 0x000018adu, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000560bu, 0x0000560au, 0x0003003eu, 0x000055f0u, 0x0000560bu, 0x00050041u, 0x00000038u, 0x0000560cu, 0x000018aeu, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000560du, 0x0000560cu, 0x0003003eu, 0x000055f1u, 0x0000560du, 0x000300f7u, 0x0000567cu, 0x00000000u, 0x000d00fbu, 0x0000560bu, 0x0000567du, 0x00000000u, 0x0000567eu, 0x00000001u, 0x0000567fu, 0x00000002u, 0x00005680u, 0x00000004u, 0x00005681u, 0x00000007u, 0x00005682u, 0x000200f8u, 0x00005682u, 0x00050041u, 0x00000038u, 0x0000596eu, 0x00005964u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00005693u, 0x0000596eu, 0x000500c4u, 0x00000008u, 0x00005694u, 0x00005693u, 0x000001e0u, 0x00050041u, 0x00000038u, 0x0000596fu, 0x00005964u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005696u, 0x0000596fu, 0x000500c5u, 0x00000008u, 0x00005697u, 0x00005694u, 0x00005696u, 0x00060050u, 0x00000052u, 0x00005698u, 0x00005697u, 0x00005697u, 0x00005697u, 0x0003003eu, 0x00005678u, 0x00005698u, 0x000200f9u, 0x0000567cu, 0x000200f8u, 0x00005681u, 0x0004003du, 0x00000009u, 0x00005690u, 0x00005965u, 0x0008004fu, 0x00000052u, 0x00005691u, 0x00005690u, 0x00005690u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005678u, 0x00005691u, 0x000200f9u, 0x0000567cu, 0x000200f8u, 0x00005680u, 0x0004003du, 0x00000009u, 0x0000568du, 0x00005968u, 0x0008004fu, 0x00000052u, 0x0000568eu, 0x0000568du, 0x0000568du, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005678u, 0x0000568eu, 0x000200f9u, 0x0000567cu, 0x000200f8u, 0x0000567fu, 0x0004003du, 0x00000009u, 0x0000568au, 0x00005967u, 0x0008004fu, 0x00000052u, 0x0000568bu, 0x0000568au, 0x0000568au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005678u, 0x0000568bu, 0x000200f9u, 0x0000567cu, 0x000200f8u, 0x0000567eu, 0x0004003du, 0x00000009u, 0x00005687u, 0x00005966u, 0x0008004fu, 0x00000052u, 0x00005688u, 0x00005687u, 0x00005687u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005678u, 0x00005688u, 0x000200f9u, 0x0000567cu, 0x000200f8u, 0x0000567du, 0x0004003du, 0x00000009u, 0x00005684u, 0x00005964u, 0x0008004fu, 0x00000052u, 0x00005685u, 0x00005684u, 0x00005684u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00005678u, 0x00005685u, 0x000200f9u, 0x0000567cu, 0x000200f8u, 0x0000567cu, 0x000f00f5u, 0x00000052u, 0x0000a128u, 0x00005685u, 0x0000567du, 0x00005688u, 0x0000567eu, 0x0000568bu, 0x0000567fu, 0x0000568eu, 0x00005680u, 0x00005691u, 0x00005681u, 0x00005698u, 0x00005682u, 0x000300f7u, 0x0000569au, 0x00000000u, 0x000d00fbu, 0x0000560du, 0x0000569bu, 0x00000000u, 0x0000569cu, 0x00000001u, 0x0000569du, 0x00000002u, 0x0000569eu, 0x00000004u, 0x0000569fu, 0x00000006u, 0x000056a0u, 0x000200f8u, 0x000056a0u, 0x0003003eu, 0x00005679u, 0x000011dau, 0x000200f9u, 0x0000569au, 0x000200f8u, 0x0000569fu, 0x00050041u, 0x00000038u, 0x00005974u, 0x00005965u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056aau, 0x00005974u, 0x0003003eu, 0x00005679u, 0x000056aau, 0x000200f9u, 0x0000569au, 0x000200f8u, 0x0000569eu, 0x00050041u, 0x00000038u, 0x00005973u, 0x00005968u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056a8u, 0x00005973u, 0x0003003eu, 0x00005679u, 0x000056a8u, 0x000200f9u, 0x0000569au, 0x000200f8u, 0x0000569du, 0x00050041u, 0x00000038u, 0x00005972u, 0x00005967u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056a6u, 0x00005972u, 0x0003003eu, 0x00005679u, 0x000056a6u, 0x000200f9u, 0x0000569au, 0x000200f8u, 0x0000569cu, 0x00050041u, 0x00000038u, 0x00005971u, 0x00005966u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056a4u, 0x00005971u, 0x0003003eu, 0x00005679u, 0x000056a4u, 0x000200f9u, 0x0000569au, 0x000200f8u, 0x0000569bu, 0x00050041u, 0x00000038u, 0x00005970u, 0x00005964u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056a2u, 0x00005970u, 0x0003003eu, 0x00005679u, 0x000056a2u, 0x000200f9u, 0x0000569au, 0x000200f8u, 0x0000569au, 0x000f00f5u, 0x00000008u, 0x0000a129u, 0x000056a2u, 0x0000569bu, 0x000056a4u, 0x0000569cu, 0x000056a6u, 0x0000569du, 0x000056a8u, 0x0000569eu, 0x000056aau, 0x0000569fu, 0x000011dau, 0x000056a0u, 0x00050051u, 0x00000008u, 0x000056adu, 0x0000a128u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000056aeu, 0x0000a128u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000056afu, 0x0000a128u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000056b0u, 0x000056adu, 0x000056aeu, 0x000056afu, 0x0000a129u, 0x0003003eu, 0x0000567au, 0x000056b0u, 0x0003003eu, 0x000055eeu, 0x000056b0u, 0x0003003eu, 0x00005975u, 0x000020cbu, 0x0003003eu, 0x00005976u, 0x00001adeu, 0x0003003eu, 0x00005977u, 0x000054bdu, 0x0003003eu, 0x00005978u, 0x00009647u, 0x0003003eu, 0x00005979u, 0x000083f4u, 0x0003003eu, 0x0000597au, 0x000096f1u, 0x00050041u, 0x00000038u, 0x00005610u, 0x000018adu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005611u, 0x00005610u, 0x0003003eu, 0x000055f4u, 0x00005611u, 0x00050041u, 0x00000038u, 0x00005612u, 0x000018aeu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00005613u, 0x00005612u, 0x0003003eu, 0x000055f5u, 0x00005613u, 0x000300f7u, 0x000056b5u, 0x00000000u, 0x001700fbu, 0x00005611u, 0x000056b6u, 0x00000000u, 0x000056b7u, 0x00000007u, 0x000056b8u, 0x00000001u, 0x000056b9u, 0x00000002u, 0x000056bau, 0x00000004u, 0x000056bbu, 0x00000008u, 0x000056bcu, 0x00000009u, 0x000056bdu, 0x0000000bu, 0x000056beu, 0x0000000du, 0x000056bfu, 0x0000000fu, 0x000056c0u, 0x000200f8u, 0x000056c0u, 0x00050041u, 0x00000038u, 0x00005981u, 0x00005975u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000056e0u, 0x00005981u, 0x000500c4u, 0x00000008u, 0x000056e1u, 0x000056e0u, 0x000001e0u, 0x00050041u, 0x00000038u, 0x00005982u, 0x00005975u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000056e3u, 0x00005982u, 0x000500c5u, 0x00000008u, 0x000056e4u, 0x000056e1u, 0x000056e3u, 0x00060050u, 0x00000052u, 0x000056e5u, 0x000056e4u, 0x000056e4u, 0x000056e4u, 0x0003003eu, 0x000056b1u, 0x000056e5u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056bfu, 0x00060050u, 0x00000052u, 0x000056deu, 0x000096f1u, 0x000096f1u, 0x000096f1u, 0x0003003eu, 0x000056b1u, 0x000056deu, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056beu, 0x0004003du, 0x00000009u, 0x000056dau, 0x00005976u, 0x0008004fu, 0x00000052u, 0x000056dbu, 0x000056dau, 0x000056dau, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000056b1u, 0x000056dbu, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056bdu, 0x0004003du, 0x00000009u, 0x000056d7u, 0x00005979u, 0x0008004fu, 0x00000052u, 0x000056d8u, 0x000056d7u, 0x000056d7u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000056b1u, 0x000056d8u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056bcu, 0x0004003du, 0x00000009u, 0x000056d4u, 0x00005978u, 0x0008004fu, 0x00000052u, 0x000056d5u, 0x000056d4u, 0x000056d4u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000056b1u, 0x000056d5u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056bbu, 0x0004003du, 0x00000009u, 0x000056d1u, 0x00005976u, 0x0008004fu, 0x00000052u, 0x000056d2u, 0x000056d1u, 0x000056d1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056b1u, 0x000056d2u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056bau, 0x0004003du, 0x00000009u, 0x000056ceu, 0x00005979u, 0x0008004fu, 0x00000052u, 0x000056cfu, 0x000056ceu, 0x000056ceu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056b1u, 0x000056cfu, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056b9u, 0x0004003du, 0x00000009u, 0x000056cbu, 0x00005978u, 0x0008004fu, 0x00000052u, 0x000056ccu, 0x000056cbu, 0x000056cbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056b1u, 0x000056ccu, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056b8u, 0x0008004fu, 0x00000052u, 0x000056c9u, 0x000054bdu, 0x000054bdu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x000056b1u, 0x000056c9u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056b7u, 0x0008004fu, 0x00000052u, 0x000056c6u, 0x000054bdu, 0x000054bdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056b1u, 0x000056c6u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056b6u, 0x0004003du, 0x00000009u, 0x000056c2u, 0x00005975u, 0x0008004fu, 0x00000052u, 0x000056c3u, 0x000056c2u, 0x000056c2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056b1u, 0x000056c3u, 0x000200f9u, 0x000056b5u, 0x000200f8u, 0x000056b5u, 0x001900f5u, 0x00000052u, 0x0000a141u, 0x000056c3u, 0x000056b6u, 0x000056c6u, 0x000056b7u, 0x000056c9u, 0x000056b8u, 0x000056ccu, 0x000056b9u, 0x000056cfu, 0x000056bau, 0x000056d2u, 0x000056bbu, 0x000056d5u, 0x000056bcu, 0x000056d8u, 0x000056bdu, 0x000056dbu, 0x000056beu, 0x000056deu, 0x000056bfu, 0x000056e5u, 0x000056c0u, 0x000300f7u, 0x000056e7u, 0x00000000u, 0x000b00fbu, 0x00005613u, 0x000056e8u, 0x00000000u, 0x000056e9u, 0x00000001u, 0x000056eau, 0x00000002u, 0x000056ebu, 0x00000004u, 0x000056ecu, 0x000200f8u, 0x000056ecu, 0x00050041u, 0x00000038u, 0x00005986u, 0x00005976u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056f6u, 0x00005986u, 0x0003003eu, 0x000056b2u, 0x000056f6u, 0x000200f9u, 0x000056e7u, 0x000200f8u, 0x000056ebu, 0x00050041u, 0x00000038u, 0x00005985u, 0x00005979u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056f4u, 0x00005985u, 0x0003003eu, 0x000056b2u, 0x000056f4u, 0x000200f9u, 0x000056e7u, 0x000200f8u, 0x000056eau, 0x00050041u, 0x00000038u, 0x00005984u, 0x00005978u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056f2u, 0x00005984u, 0x0003003eu, 0x000056b2u, 0x000056f2u, 0x000200f9u, 0x000056e7u, 0x000200f8u, 0x000056e9u, 0x0003003eu, 0x000056b2u, 0x000096f1u, 0x000200f9u, 0x000056e7u, 0x000200f8u, 0x000056e8u, 0x00050041u, 0x00000038u, 0x00005983u, 0x00005975u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000056eeu, 0x00005983u, 0x0003003eu, 0x000056b2u, 0x000056eeu, 0x000200f9u, 0x000056e7u, 0x000200f8u, 0x000056e7u, 0x000d00f5u, 0x00000008u, 0x0000a142u, 0x000056eeu, 0x000056e8u, 0x000096f1u, 0x000056e9u, 0x000056f2u, 0x000056eau, 0x000056f4u, 0x000056ebu, 0x000056f6u, 0x000056ecu, 0x00050051u, 0x00000008u, 0x000056f9u, 0x0000a141u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000056fau, 0x0000a141u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000056fbu, 0x0000a141u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000056fcu, 0x000056f9u, 0x000056fau, 0x000056fbu, 0x0000a142u, 0x0003003eu, 0x000056b3u, 0x000056fcu, 0x0003003eu, 0x000055f2u, 0x000056fcu, 0x0003003eu, 0x00005987u, 0x000020d0u, 0x0003003eu, 0x00005988u, 0x00001adeu, 0x0003003eu, 0x00005989u, 0x000054bdu, 0x0003003eu, 0x0000598au, 0x00009647u, 0x0003003eu, 0x0000598bu, 0x000083f4u, 0x00050041u, 0x00000038u, 0x00005616u, 0x000018adu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005617u, 0x00005616u, 0x0003003eu, 0x000055f8u, 0x00005617u, 0x00050041u, 0x00000038u, 0x00005618u, 0x000018aeu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005619u, 0x00005618u, 0x0003003eu, 0x000055f9u, 0x00005619u, 0x000300f7u, 0x00005701u, 0x00000000u, 0x000d00fbu, 0x00005617u, 0x00005702u, 0x00000000u, 0x00005703u, 0x00000001u, 0x00005704u, 0x00000002u, 0x00005705u, 0x00000004u, 0x00005706u, 0x00000006u, 0x00005707u, 0x000200f8u, 0x00005707u, 0x0003003eu, 0x000056fdu, 0x000011dbu, 0x000200f9u, 0x00005701u, 0x000200f8u, 0x00005706u, 0x0004003du, 0x00000009u, 0x00005715u, 0x00005988u, 0x0008004fu, 0x00000052u, 0x00005716u, 0x00005715u, 0x00005715u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056fdu, 0x00005716u, 0x000200f9u, 0x00005701u, 0x000200f8u, 0x00005705u, 0x0004003du, 0x00000009u, 0x00005712u, 0x0000598bu, 0x0008004fu, 0x00000052u, 0x00005713u, 0x00005712u, 0x00005712u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056fdu, 0x00005713u, 0x000200f9u, 0x00005701u, 0x000200f8u, 0x00005704u, 0x0004003du, 0x00000009u, 0x0000570fu, 0x0000598au, 0x0008004fu, 0x00000052u, 0x00005710u, 0x0000570fu, 0x0000570fu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056fdu, 0x00005710u, 0x000200f9u, 0x00005701u, 0x000200f8u, 0x00005703u, 0x0004003du, 0x00000009u, 0x0000570cu, 0x00005989u, 0x0008004fu, 0x00000052u, 0x0000570du, 0x0000570cu, 0x0000570cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056fdu, 0x0000570du, 0x000200f9u, 0x00005701u, 0x000200f8u, 0x00005702u, 0x0004003du, 0x00000009u, 0x00005709u, 0x00005987u, 0x0008004fu, 0x00000052u, 0x0000570au, 0x00005709u, 0x00005709u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000056fdu, 0x0000570au, 0x000200f9u, 0x00005701u, 0x000200f8u, 0x00005701u, 0x000f00f5u, 0x00000052u, 0x0000a159u, 0x0000570au, 0x00005702u, 0x0000570du, 0x00005703u, 0x00005710u, 0x00005704u, 0x00005713u, 0x00005705u, 0x00005716u, 0x00005706u, 0x000011dbu, 0x00005707u, 0x000300f7u, 0x00005718u, 0x00000000u, 0x000d00fbu, 0x00005619u, 0x00005719u, 0x00000000u, 0x0000571au, 0x00000001u, 0x0000571bu, 0x00000002u, 0x0000571cu, 0x00000004u, 0x0000571du, 0x00000006u, 0x0000571eu, 0x000200f8u, 0x0000571eu, 0x0003003eu, 0x000056feu, 0x000011dau, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x0000571du, 0x00050041u, 0x00000038u, 0x00005995u, 0x00005988u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005728u, 0x00005995u, 0x0003003eu, 0x000056feu, 0x00005728u, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x0000571cu, 0x00050041u, 0x00000038u, 0x00005994u, 0x0000598bu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005726u, 0x00005994u, 0x0003003eu, 0x000056feu, 0x00005726u, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x0000571bu, 0x00050041u, 0x00000038u, 0x00005993u, 0x0000598au, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005724u, 0x00005993u, 0x0003003eu, 0x000056feu, 0x00005724u, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x0000571au, 0x00050041u, 0x00000038u, 0x00005992u, 0x00005989u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005722u, 0x00005992u, 0x0003003eu, 0x000056feu, 0x00005722u, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x00005719u, 0x00050041u, 0x00000038u, 0x00005991u, 0x00005987u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005720u, 0x00005991u, 0x0003003eu, 0x000056feu, 0x00005720u, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x00005718u, 0x000f00f5u, 0x00000008u, 0x0000a15au, 0x00005720u, 0x00005719u, 0x00005722u, 0x0000571au, 0x00005724u, 0x0000571bu, 0x00005726u, 0x0000571cu, 0x00005728u, 0x0000571du, 0x000011dau, 0x0000571eu, 0x00050051u, 0x00000008u, 0x0000572bu, 0x0000a159u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000572cu, 0x0000a159u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000572du, 0x0000a159u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000572eu, 0x0000572bu, 0x0000572cu, 0x0000572du, 0x0000a15au, 0x0003003eu, 0x000056ffu, 0x0000572eu, 0x0003003eu, 0x000055f6u, 0x0000572eu, 0x0003003eu, 0x000055fbu, 0x00005677u, 0x0003003eu, 0x000055fcu, 0x000056b0u, 0x0003003eu, 0x000055fdu, 0x000056fcu, 0x0003003eu, 0x000055feu, 0x0000572eu, 0x000600cau, 0x00000009u, 0x00005735u, 0x000056fcu, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x000055fdu, 0x00005735u, 0x0003003eu, 0x0000572fu, 0x00005677u, 0x00050082u, 0x00000009u, 0x00005756u, 0x00005677u, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x00005757u, 0x00005756u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x00005759u, 0x00005757u, 0x0000b1b9u, 0x0003003eu, 0x00005753u, 0x00005759u, 0x0003003eu, 0x000055fbu, 0x00005759u, 0x0003003eu, 0x00005730u, 0x000056b0u, 0x00050082u, 0x00000009u, 0x0000575du, 0x000056b0u, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x0000575eu, 0x0000575du, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x00005760u, 0x0000575eu, 0x0000b1b9u, 0x0003003eu, 0x0000575au, 0x00005760u, 0x0003003eu, 0x000055fcu, 0x00005760u, 0x0003003eu, 0x00005731u, 0x0000572eu, 0x00050082u, 0x00000009u, 0x00005764u, 0x0000572eu, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x00005765u, 0x00005764u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x00005767u, 0x00005765u, 0x0000b1b9u, 0x0003003eu, 0x00005761u, 0x00005767u, 0x0003003eu, 0x000055feu, 0x00005767u, 0x00050082u, 0x00000009u, 0x0000573eu, 0x00005759u, 0x00005760u, 0x00050084u, 0x00000009u, 0x00005740u, 0x0000573eu, 0x00005735u, 0x0003003eu, 0x00005732u, 0x00005740u, 0x00050080u, 0x00000009u, 0x00005743u, 0x00005740u, 0x0000b1b9u, 0x0003003eu, 0x00005732u, 0x00005743u, 0x000500c3u, 0x00000009u, 0x00005746u, 0x00005743u, 0x0000b1c3u, 0x00050051u, 0x00000008u, 0x00005747u, 0x00005746u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005748u, 0x00005746u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005749u, 0x00005746u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000574au, 0x00005746u, 0x00000003u, 0x00050051u, 0x00000008u, 0x0000574du, 0x00005767u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000574eu, 0x00005767u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000574fu, 0x00005767u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005750u, 0x00005767u, 0x00000003u, 0x00050080u, 0x00000009u, 0x00005752u, 0x00005746u, 0x00005767u, 0x0003003eu, 0x00005733u, 0x00005752u, 0x0003003eu, 0x000055fau, 0x00005752u, 0x0004003du, 0x00000009u, 0x00005620u, 0x000055fau, 0x0003003eu, 0x000055ffu, 0x00005620u, 0x00050082u, 0x00000009u, 0x0000576bu, 0x00005620u, 0x0000b1b9u, 0x0003003eu, 0x000055ffu, 0x0000576bu, 0x000600cau, 0x00000009u, 0x0000576du, 0x0000576bu, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x000055ffu, 0x0000576du, 0x00050080u, 0x00000009u, 0x00005770u, 0x0000576du, 0x0000b1b9u, 0x0003003eu, 0x000055ffu, 0x00005770u, 0x0008000cu, 0x00000009u, 0x00005772u, 0x00000001u, 0x0000002du, 0x00005770u, 0x00000310u, 0x00000344u, 0x00050051u, 0x00000008u, 0x00005773u, 0x00005772u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005774u, 0x00005772u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005775u, 0x00005772u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00005776u, 0x00005772u, 0x00000003u, 0x0003003eu, 0x00005768u, 0x00005772u, 0x0003003eu, 0x000055fau, 0x00005772u, 0x00050041u, 0x00000038u, 0x00005622u, 0x000055fau, 0x00000331u, 0x0004003du, 0x00000008u, 0x00005623u, 0x00005622u, 0x0004003du, 0x00000008u, 0x00005625u, 0x00005622u, 0x00050080u, 0x00000008u, 0x00005626u, 0x00005625u, 0x00000194u, 0x000500c3u, 0x00000008u, 0x00005627u, 0x00005626u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00005628u, 0x00005623u, 0x00005627u, 0x0003003eu, 0x00005600u, 0x00005628u, 0x000300f7u, 0x0000562au, 0x00000000u, 0x000400fau, 0x0000192au, 0x0000562bu, 0x0000562cu, 0x000200f8u, 0x0000562cu, 0x000500c4u, 0x00000008u, 0x00005635u, 0x000019d4u, 0x000001a0u, 0x0003003eu, 0x00005601u, 0x00005635u, 0x000200f9u, 0x0000562au, 0x000200f8u, 0x0000562bu, 0x00050084u, 0x00000008u, 0x0000562fu, 0x00005628u, 0x000019d4u, 0x00050080u, 0x00000008u, 0x00005630u, 0x0000562fu, 0x0000019du, 0x000500c3u, 0x00000008u, 0x00005631u, 0x00005630u, 0x0000019au, 0x0003003eu, 0x00005601u, 0x00005631u, 0x000500c3u, 0x00000008u, 0x00005633u, 0x00005631u, 0x000001a0u, 0x0003003eu, 0x000018b0u, 0x00005633u, 0x000200f9u, 0x0000562au, 0x000200f8u, 0x0000562au, 0x000700f5u, 0x00000008u, 0x0000a18du, 0x00005633u, 0x0000562bu, 0x000019d4u, 0x0000562cu, 0x000700f5u, 0x00000008u, 0x0000a18au, 0x00005631u, 0x0000562bu, 0x00005635u, 0x0000562cu, 0x000300f7u, 0x00005637u, 0x00000000u, 0x000400fau, 0x0000192du, 0x00005638u, 0x00005639u, 0x000200f8u, 0x00005639u, 0x00050080u, 0x00000008u, 0x0000563du, 0x00005628u, 0x00009127u, 0x0003003eu, 0x00005600u, 0x0000563du, 0x000200f9u, 0x00005637u, 0x000200f8u, 0x00005638u, 0x0003003eu, 0x00005600u, 0x0000a18au, 0x000200f9u, 0x00005637u, 0x000200f8u, 0x00005637u, 0x000700f5u, 0x00000008u, 0x0000a18bu, 0x0000a18au, 0x00005638u, 0x0000563du, 0x00005639u, 0x0008000cu, 0x00000008u, 0x0000563fu, 0x00000001u, 0x0000002du, 0x0000a18bu, 0x00000185u, 0x000002eeu, 0x0003003eu, 0x00005622u, 0x0000563fu, 0x0004003du, 0x00000009u, 0x00005641u, 0x000055fau, 0x0003003eu, 0x00005602u, 0x00005641u, 0x0003003eu, 0x0000183bu, 0x0000a18du, 0x00050051u, 0x00000008u, 0x00001b0bu, 0x00005641u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001b0cu, 0x00005641u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001b0du, 0x00005641u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001b0eu, 0x00005641u, 0x00000003u, 0x0003003eu, 0x000018abu, 0x00005641u, 0x000200f9u, 0x00001ad3u, 0x000200f8u, 0x00001ad3u, 0x000700f5u, 0x00000008u, 0x0000a3d9u, 0x0000a07eu, 0x00005637u, 0x00001b2du, 0x000057cau, 0x000700f5u, 0x00000008u, 0x0000a2a2u, 0x0000a18du, 0x00005637u, 0x00009b39u, 0x000057cau, 0x000500aau, 0x00000058u, 0x00001b30u, 0x0000a2a2u, 0x00000185u, 0x000500a7u, 0x00000058u, 0x00001b31u, 0x0000193cu, 0x00001b30u, 0x000300f7u, 0x00001b32u, 0x00000000u, 0x000400fau, 0x00001b31u, 0x00001b33u, 0x00001b32u, 0x000200f8u, 0x00001b33u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x00001b32u, 0x000300f7u, 0x00001b35u, 0x00000000u, 0x000400fau, 0x0000194bu, 0x00001b36u, 0x00001b35u, 0x000200f8u, 0x00001b36u, 0x000300f7u, 0x00001b38u, 0x00000000u, 0x000400fau, 0x0000194eu, 0x00001b39u, 0x00001b3au, 0x000200f8u, 0x00001b3au, 0x00050041u, 0x00000038u, 0x00005e85u, 0x00005e77u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001b3du, 0x00005e85u, 0x0003003eu, 0x000018bbu, 0x00001b3du, 0x000200f9u, 0x00001b38u, 0x000200f8u, 0x00001b39u, 0x0004003du, 0x00000008u, 0x0000590cu, 0x00000184u, 0x000500c7u, 0x00000008u, 0x0000590du, 0x0000590cu, 0x000002eeu, 0x0003003eu, 0x0000590bu, 0x0000590du, 0x0003003eu, 0x000018bbu, 0x0000590du, 0x000200f9u, 0x00001b38u, 0x000200f8u, 0x00001b38u, 0x000700f5u, 0x00000008u, 0x0000a3e4u, 0x0000590du, 0x00001b39u, 0x00001b3du, 0x00001b3au, 0x000500b1u, 0x00000058u, 0x00001b40u, 0x0000a3d9u, 0x0000a3e4u, 0x000300f7u, 0x00001b41u, 0x00000000u, 0x000400fau, 0x00001b40u, 0x00001b42u, 0x00001b41u, 0x000200f8u, 0x00001b42u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x00001084u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x00001b41u, 0x000200f9u, 0x00001b35u, 0x000200f8u, 0x00001b35u, 0x0004003du, 0x00000009u, 0x00001b43u, 0x000018abu, 0x0003003eu, 0x0000690du, 0x00001b43u, 0x000500c4u, 0x00000008u, 0x00001b46u, 0x0000238bu, 0x000001e6u, 0x000500c5u, 0x00000008u, 0x00001b48u, 0x00001b46u, 0x0000911bu, 0x0003003eu, 0x0000690eu, 0x00001b48u, 0x0003003eu, 0x0000690fu, 0x0000a2a2u, 0x00050041u, 0x00000038u, 0x00001b4cu, 0x00001840u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001b4du, 0x00001b4cu, 0x00050080u, 0x00000008u, 0x00001b4fu, 0x00001b4du, 0x00009127u, 0x0007000cu, 0x00000008u, 0x00001b50u, 0x00000001u, 0x00000027u, 0x00001b4fu, 0x000002eeu, 0x0003003eu, 0x00006910u, 0x00001b50u, 0x0003003eu, 0x000017f1u, 0x000004a4u, 0x0003003eu, 0x000017f2u, 0x000004a4u, 0x000200f9u, 0x000018bdu, 0x000200f8u, 0x000018bdu, 0x001900f5u, 0x00000009u, 0x0000aa5du, 0x000072a9u, 0x000018d1u, 0x000072a9u, 0x000018f0u, 0x000072a9u, 0x0000198au, 0x000072a9u, 0x000019b9u, 0x000072a9u, 0x000019b8u, 0x000072a9u, 0x000019c2u, 0x000072a9u, 0x000019d2u, 0x000072a9u, 0x000019deu, 0x000072a9u, 0x00001b33u, 0x000072a9u, 0x00001b42u, 0x00001b43u, 0x00001b35u, 0x001900f5u, 0x00000008u, 0x0000a93eu, 0x000096feu, 0x000018d1u, 0x000096feu, 0x000018f0u, 0x000096feu, 0x0000198au, 0x0000a6a3u, 0x000019b9u, 0x0000a6a3u, 0x000019b8u, 0x000096feu, 0x000019c2u, 0x000096feu, 0x000019d2u, 0x000096feu, 0x000019deu, 0x000096feu, 0x00001b33u, 0x000096feu, 0x00001b42u, 0x00001b48u, 0x00001b35u, 0x001900f5u, 0x00000008u, 0x0000a81fu, 0x000096feu, 0x000018d1u, 0x000096feu, 0x000018f0u, 0x000096feu, 0x0000198au, 0x000002e0u, 0x000019b9u, 0x000002e0u, 0x000019b8u, 0x00000322u, 0x000019c2u, 0x000096feu, 0x000019d2u, 0x000096feu, 0x000019deu, 0x000096feu, 0x00001b33u, 0x000096feu, 0x00001b42u, 0x0000a2a2u, 0x00001b35u, 0x001900f5u, 0x00000008u, 0x0000a6d4u, 0x000096feu, 0x000018d1u, 0x000096feu, 0x000018f0u, 0x000096feu, 0x0000198au, 0x000096feu, 0x000019b9u, 0x000096feu, 0x000019b8u, 0x000096feu, 0x000019c2u, 0x000096feu, 0x000019d2u, 0x000096feu, 0x000019deu, 0x000096feu, 0x00001b33u, 0x000096feu, 0x00001b42u, 0x00001b50u, 0x00001b35u, 0x001900f5u, 0x00000058u, 0x0000a6d3u, 0x00001084u, 0x000018d1u, 0x00001084u, 0x000018f0u, 0x00001084u, 0x0000198au, 0x00001084u, 0x000019b9u, 0x000004a4u, 0x000019b8u, 0x000019c8u, 0x000019c2u, 0x00001084u, 0x000019d2u, 0x00001084u, 0x000019deu, 0x00001084u, 0x00001b33u, 0x00001084u, 0x00001b42u, 0x000004a4u, 0x00001b35u, 0x0003003eu, 0x000018bcu, 0x0000a6d3u, 0x00070050u, 0x0000017au, 0x00006915u, 0x0000aa5du, 0x0000a93eu, 0x0000a81fu, 0x0000a6d4u, 0x0003003eu, 0x00006905u, 0x0000aa5du, 0x0003003eu, 0x00006906u, 0x0000a93eu, 0x0003003eu, 0x00006907u, 0x0000a81fu, 0x0003003eu, 0x00006908u, 0x0000a6d4u, 0x000300f7u, 0x000017a1u, 0x00000000u, 0x000400fau, 0x0000a6d3u, 0x000017a0u, 0x000017d3u, 0x000200f8u, 0x000017d3u, 0x0003003eu, 0x000017a2u, 0x00000535u, 0x000200f9u, 0x000017a1u, 0x000200f8u, 0x000017a0u, 0x0003003eu, 0x000017a2u, 0x0000a81fu, 0x000500b3u, 0x00000058u, 0x000017a6u, 0x0000a81fu, 0x000001e0u, 0x000300f7u, 0x000017a8u, 0x00000000u, 0x000400fau, 0x000017a6u, 0x000017a7u, 0x000017c4u, 0x000200f8u, 0x000017c4u, 0x000500c7u, 0x00000008u, 0x000017c6u, 0x0000a81fu, 0x000002e0u, 0x000500abu, 0x00000058u, 0x000017c7u, 0x000017c6u, 0x00000185u, 0x000300f7u, 0x000017c9u, 0x00000000u, 0x000400fau, 0x000017c7u, 0x000017c8u, 0x000017c9u, 0x000200f8u, 0x000017c8u, 0x0004007cu, 0x00000006u, 0x000017d1u, 0x0000a93eu, 0x00060041u, 0x000001edu, 0x000017d2u, 0x000017cdu, 0x00000185u, 0x00001795u, 0x0003003eu, 0x000017d2u, 0x000017d1u, 0x000200f9u, 0x000017c9u, 0x000200f8u, 0x000017c9u, 0x000200f9u, 0x000017a8u, 0x000200f8u, 0x000017a7u, 0x0004007cu, 0x000001b9u, 0x000017b0u, 0x0000aa5du, 0x00040071u, 0x000001acu, 0x000017b1u, 0x000017b0u, 0x00060041u, 0x000001b6u, 0x000017b2u, 0x000017acu, 0x00000185u, 0x00001795u, 0x0003003eu, 0x000017b2u, 0x000017b1u, 0x00040071u, 0x000001abu, 0x000017bau, 0x0000a6d4u, 0x00060041u, 0x000001f9u, 0x000017bbu, 0x000017b6u, 0x00000185u, 0x00001795u, 0x0003003eu, 0x000017bbu, 0x000017bau, 0x00060041u, 0x0000022au, 0x000017c3u, 0x000017bfu, 0x00000185u, 0x00001795u, 0x0003003eu, 0x000017c3u, 0x0000a93eu, 0x000200f9u, 0x000017a8u, 0x000200f8u, 0x000017a8u, 0x000200f9u, 0x000017a1u, 0x000200f8u, 0x000017a1u, 0x000600a9u, 0x00000008u, 0x0000b1ebu, 0x0000a6d3u, 0x0000a81fu, 0x00000535u, 0x00040072u, 0x000017d4u, 0x000017dbu, 0x0000b1ebu, 0x00060041u, 0x000017dcu, 0x000017ddu, 0x000017d8u, 0x00000185u, 0x00001795u, 0x0003003eu, 0x000017ddu, 0x000017dbu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x00000037u, 0x0000691du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000691cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000691bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000691au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006919u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006918u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006917u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006916u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000018bu, 0x0000000cu, 0x00060041u, 0x0000018cu, 0x0000018du, 0x0000018au, 0x00000185u, 0x0000018bu, 0x0004003du, 0x00000186u, 0x0000018eu, 0x0000018du, 0x00050051u, 0x00000009u, 0x00000191u, 0x0000018eu, 0x00000000u, 0x0003003eu, 0x00006916u, 0x00000191u, 0x00050051u, 0x00000009u, 0x00000193u, 0x0000018eu, 0x00000001u, 0x0003003eu, 0x00006917u, 0x00000193u, 0x00050051u, 0x00000009u, 0x00000196u, 0x0000018eu, 0x00000002u, 0x0003003eu, 0x00006918u, 0x00000196u, 0x00050051u, 0x00000009u, 0x00000199u, 0x0000018eu, 0x00000003u, 0x0003003eu, 0x00006919u, 0x00000199u, 0x00050051u, 0x00000009u, 0x0000019cu, 0x0000018eu, 0x00000004u, 0x0003003eu, 0x0000691au, 0x0000019cu, 0x00050051u, 0x00000009u, 0x0000019fu, 0x0000018eu, 0x00000005u, 0x0003003eu, 0x0000691bu, 0x0000019fu, 0x00050051u, 0x00000009u, 0x000001a2u, 0x0000018eu, 0x00000006u, 0x0003003eu, 0x0000691cu, 0x000001a2u, 0x00050051u, 0x00000009u, 0x000001a5u, 0x0000018eu, 0x00000007u, 0x0003003eu, 0x0000691du, 0x000001a5u, 0x000b0050u, 0x0000000au, 0x00006926u, 0x00000191u, 0x00000193u, 0x00000196u, 0x00000199u, 0x0000019cu, 0x0000019fu, 0x000001a2u, 0x000001a5u, 0x000200feu, 0x00006926u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000012u, 0x00000000u, 0x00000010u, 0x00030037u, 0x00000007u, 0x00000011u, 0x000200f8u, 0x00000013u, 0x0004003du, 0x00000006u, 0x000001b5u, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001b7u, 0x000001b4u, 0x00000185u, 0x000001b5u, 0x00000185u, 0x0004003du, 0x000001acu, 0x000001b8u, 0x000001b7u, 0x00040071u, 0x000001b9u, 0x000001bau, 0x000001b8u, 0x0004007cu, 0x00000009u, 0x000001bbu, 0x000001bau, 0x0004003du, 0x00000006u, 0x000001bcu, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001bdu, 0x000001b4u, 0x00000185u, 0x000001bcu, 0x00000194u, 0x0004003du, 0x000001acu, 0x000001beu, 0x000001bdu, 0x00040071u, 0x000001b9u, 0x000001bfu, 0x000001beu, 0x0004007cu, 0x00000009u, 0x000001c0u, 0x000001bfu, 0x0004003du, 0x00000006u, 0x000001c1u, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001c2u, 0x000001b4u, 0x00000185u, 0x000001c1u, 0x00000197u, 0x0004003du, 0x000001acu, 0x000001c3u, 0x000001c2u, 0x00040071u, 0x000001b9u, 0x000001c4u, 0x000001c3u, 0x0004007cu, 0x00000009u, 0x000001c5u, 0x000001c4u, 0x0004003du, 0x00000006u, 0x000001c6u, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001c7u, 0x000001b4u, 0x00000185u, 0x000001c6u, 0x0000019au, 0x0004003du, 0x000001acu, 0x000001c8u, 0x000001c7u, 0x00040071u, 0x000001b9u, 0x000001c9u, 0x000001c8u, 0x0004007cu, 0x00000009u, 0x000001cau, 0x000001c9u, 0x0004003du, 0x00000006u, 0x000001cbu, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001ccu, 0x000001b4u, 0x00000185u, 0x000001cbu, 0x0000019du, 0x0004003du, 0x000001acu, 0x000001cdu, 0x000001ccu, 0x00040071u, 0x000001b9u, 0x000001ceu, 0x000001cdu, 0x0004007cu, 0x00000009u, 0x000001cfu, 0x000001ceu, 0x0004003du, 0x00000006u, 0x000001d0u, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001d1u, 0x000001b4u, 0x00000185u, 0x000001d0u, 0x000001a0u, 0x0004003du, 0x000001acu, 0x000001d2u, 0x000001d1u, 0x00040071u, 0x000001b9u, 0x000001d3u, 0x000001d2u, 0x0004007cu, 0x00000009u, 0x000001d4u, 0x000001d3u, 0x0004003du, 0x00000006u, 0x000001d5u, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001d6u, 0x000001b4u, 0x00000185u, 0x000001d5u, 0x000001a3u, 0x0004003du, 0x000001acu, 0x000001d7u, 0x000001d6u, 0x00040071u, 0x000001b9u, 0x000001d8u, 0x000001d7u, 0x0004007cu, 0x00000009u, 0x000001d9u, 0x000001d8u, 0x0004003du, 0x00000006u, 0x000001dau, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001dbu, 0x000001b4u, 0x00000185u, 0x000001dau, 0x000001a6u, 0x0004003du, 0x000001acu, 0x000001dcu, 0x000001dbu, 0x00040071u, 0x000001b9u, 0x000001ddu, 0x000001dcu, 0x0004007cu, 0x00000009u, 0x000001deu, 0x000001ddu, 0x0004003du, 0x00000006u, 0x000001dfu, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001e1u, 0x000001b4u, 0x00000185u, 0x000001dfu, 0x000001e0u, 0x0004003du, 0x000001acu, 0x000001e2u, 0x000001e1u, 0x00040071u, 0x000001b9u, 0x000001e3u, 0x000001e2u, 0x0004007cu, 0x00000009u, 0x000001e4u, 0x000001e3u, 0x0004003du, 0x00000006u, 0x000001e5u, 0x00000011u, 0x00070041u, 0x000001b6u, 0x000001e7u, 0x000001b4u, 0x00000185u, 0x000001e5u, 0x000001e6u, 0x0004003du, 0x000001acu, 0x000001e8u, 0x000001e7u, 0x00040071u, 0x000001b9u, 0x000001e9u, 0x000001e8u, 0x0004007cu, 0x00000009u, 0x000001eau, 0x000001e9u, 0x0004003du, 0x00000006u, 0x000001ebu, 0x00000011u, 0x00070041u, 0x000001edu, 0x000001eeu, 0x000001b4u, 0x00000185u, 0x000001ebu, 0x000001ecu, 0x0004003du, 0x00000006u, 0x000001efu, 0x000001eeu, 0x0004003du, 0x00000006u, 0x000001f0u, 0x00000011u, 0x00070041u, 0x000001f2u, 0x000001f3u, 0x000001b4u, 0x00000185u, 0x000001f0u, 0x000001f1u, 0x0004003du, 0x000001adu, 0x000001f4u, 0x000001f3u, 0x00040071u, 0x00000006u, 0x000001f5u, 0x000001f4u, 0x0004007cu, 0x00000008u, 0x000001f6u, 0x000001f5u, 0x0004003du, 0x00000006u, 0x000001f7u, 0x00000011u, 0x00070041u, 0x000001f9u, 0x000001fau, 0x000001b4u, 0x00000185u, 0x000001f7u, 0x000001f8u, 0x0004003du, 0x000001abu, 0x000001fbu, 0x000001fau, 0x00040071u, 0x00000006u, 0x000001fcu, 0x000001fbu, 0x0004007cu, 0x00000008u, 0x000001fdu, 0x000001fcu, 0x0004003du, 0x00000006u, 0x000001feu, 0x00000011u, 0x00070041u, 0x000001f9u, 0x00000200u, 0x000001b4u, 0x00000185u, 0x000001feu, 0x000001ffu, 0x0004003du, 0x000001abu, 0x00000201u, 0x00000200u, 0x00040071u, 0x00000006u, 0x00000202u, 0x00000201u, 0x0004007cu, 0x00000008u, 0x00000203u, 0x00000202u, 0x0004003du, 0x00000006u, 0x00000204u, 0x00000011u, 0x00070041u, 0x00000206u, 0x00000207u, 0x000001b4u, 0x00000185u, 0x00000204u, 0x00000205u, 0x0004003du, 0x000001afu, 0x00000208u, 0x00000207u, 0x00040072u, 0x00000009u, 0x00000209u, 0x00000208u, 0x00120050u, 0x0000000fu, 0x0000020au, 0x000001bbu, 0x000001c0u, 0x000001c5u, 0x000001cau, 0x000001cfu, 0x000001d4u, 0x000001d9u, 0x000001deu, 0x000001e4u, 0x000001eau, 0x000001efu, 0x000001f6u, 0x000001fdu, 0x00000203u, 0x00000209u, 0x000200feu, 0x0000020au, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003du, 0x00000006u, 0x00000212u, 0x00000016u, 0x00070041u, 0x000001b6u, 0x00000213u, 0x00000211u, 0x00000185u, 0x00000212u, 0x00000185u, 0x0004003du, 0x000001acu, 0x00000214u, 0x00000213u, 0x00040071u, 0x000001b9u, 0x00000215u, 0x00000214u, 0x0004007cu, 0x00000009u, 0x00000216u, 0x00000215u, 0x0004003du, 0x00000006u, 0x00000217u, 0x00000016u, 0x00070041u, 0x000001b6u, 0x00000218u, 0x00000211u, 0x00000185u, 0x00000217u, 0x00000194u, 0x0004003du, 0x000001acu, 0x00000219u, 0x00000218u, 0x00040071u, 0x000001b9u, 0x0000021au, 0x00000219u, 0x0004007cu, 0x00000009u, 0x0000021bu, 0x0000021au, 0x0004003du, 0x00000006u, 0x0000021cu, 0x00000016u, 0x00070041u, 0x000001b6u, 0x0000021du, 0x00000211u, 0x00000185u, 0x0000021cu, 0x00000197u, 0x0004003du, 0x000001acu, 0x0000021eu, 0x0000021du, 0x00040071u, 0x000001b9u, 0x0000021fu, 0x0000021eu, 0x0004007cu, 0x00000009u, 0x00000220u, 0x0000021fu, 0x0004003du, 0x00000006u, 0x00000221u, 0x00000016u, 0x00070041u, 0x000001b6u, 0x00000222u, 0x00000211u, 0x00000185u, 0x00000221u, 0x0000019au, 0x0004003du, 0x000001acu, 0x00000223u, 0x00000222u, 0x00040071u, 0x000001b9u, 0x00000224u, 0x00000223u, 0x0004007cu, 0x00000009u, 0x00000225u, 0x00000224u, 0x0004003du, 0x00000006u, 0x00000226u, 0x00000016u, 0x00070041u, 0x000001edu, 0x00000227u, 0x00000211u, 0x00000185u, 0x00000226u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000228u, 0x00000227u, 0x0004003du, 0x00000006u, 0x00000229u, 0x00000016u, 0x00070041u, 0x0000022au, 0x0000022bu, 0x00000211u, 0x00000185u, 0x00000229u, 0x000001a0u, 0x0004003du, 0x00000008u, 0x0000022cu, 0x0000022bu, 0x000b0050u, 0x00000014u, 0x0000022du, 0x00000216u, 0x0000021bu, 0x00000220u, 0x00000225u, 0x00000228u, 0x0000022cu, 0x00000185u, 0x00000185u, 0x000200feu, 0x0000022du, 0x00010038u, 0x00050036u, 0x00000019u, 0x0000001cu, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000007u, 0x0000001bu, 0x000200f8u, 0x0000001du, 0x0004003bu, 0x00000038u, 0x0000692au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006929u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006928u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006927u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000235u, 0x0000001bu, 0x00060041u, 0x00000236u, 0x00000237u, 0x00000234u, 0x00000185u, 0x00000235u, 0x0004003du, 0x00000230u, 0x00000238u, 0x00000237u, 0x00050051u, 0x00000008u, 0x0000023bu, 0x00000238u, 0x00000000u, 0x0003003eu, 0x00006927u, 0x0000023bu, 0x00050051u, 0x00000008u, 0x0000023du, 0x00000238u, 0x00000001u, 0x0003003eu, 0x00006928u, 0x0000023du, 0x00050051u, 0x00000008u, 0x0000023fu, 0x00000238u, 0x00000002u, 0x0003003eu, 0x00006929u, 0x0000023fu, 0x00050051u, 0x00000008u, 0x00000241u, 0x00000238u, 0x00000003u, 0x0003003eu, 0x0000692au, 0x00000241u, 0x00070050u, 0x00000019u, 0x0000692fu, 0x0000023bu, 0x0000023du, 0x0000023fu, 0x00000241u, 0x000200feu, 0x0000692fu, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000021u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003du, 0x00000006u, 0x0000024cu, 0x00000020u, 0x00070041u, 0x0000024du, 0x0000024eu, 0x0000024bu, 0x00000185u, 0x0000024cu, 0x00000185u, 0x0004003du, 0x00000009u, 0x0000024fu, 0x0000024eu, 0x0004003du, 0x00000006u, 0x00000250u, 0x00000020u, 0x00070041u, 0x0000024du, 0x00000251u, 0x0000024bu, 0x00000185u, 0x00000250u, 0x00000194u, 0x0004003du, 0x00000009u, 0x00000252u, 0x00000251u, 0x0004003du, 0x00000006u, 0x00000253u, 0x00000020u, 0x00070041u, 0x00000254u, 0x00000255u, 0x0000024bu, 0x00000185u, 0x00000253u, 0x00000197u, 0x0004003du, 0x00000246u, 0x00000256u, 0x00000255u, 0x00040071u, 0x000001b9u, 0x00000257u, 0x00000256u, 0x0004007cu, 0x00000009u, 0x00000258u, 0x00000257u, 0x0004003du, 0x00000006u, 0x00000259u, 0x00000020u, 0x00070041u, 0x00000254u, 0x0000025au, 0x0000024bu, 0x00000185u, 0x00000259u, 0x0000019au, 0x0004003du, 0x00000246u, 0x0000025bu, 0x0000025au, 0x00040071u, 0x000001b9u, 0x0000025cu, 0x0000025bu, 0x0004007cu, 0x00000009u, 0x0000025du, 0x0000025cu, 0x0004003du, 0x00000006u, 0x0000025eu, 0x00000020u, 0x00070041u, 0x0000022au, 0x0000025fu, 0x0000024bu, 0x00000185u, 0x0000025eu, 0x0000019du, 0x0004003du, 0x00000008u, 0x00000260u, 0x0000025fu, 0x0004003du, 0x00000006u, 0x00000261u, 0x00000020u, 0x00070041u, 0x0000022au, 0x00000262u, 0x0000024bu, 0x00000185u, 0x00000261u, 0x000001a0u, 0x0004003du, 0x00000008u, 0x00000263u, 0x00000262u, 0x0004003du, 0x00000006u, 0x00000264u, 0x00000020u, 0x00070041u, 0x0000022au, 0x00000265u, 0x0000024bu, 0x00000185u, 0x00000264u, 0x000001a3u, 0x0004003du, 0x00000008u, 0x00000266u, 0x00000265u, 0x0004003du, 0x00000006u, 0x00000267u, 0x00000020u, 0x00070041u, 0x00000268u, 0x00000269u, 0x0000024bu, 0x00000185u, 0x00000267u, 0x000001a6u, 0x0004003du, 0x000001aeu, 0x0000026au, 0x00000269u, 0x00040072u, 0x00000008u, 0x0000026bu, 0x0000026au, 0x0004003du, 0x00000006u, 0x0000026cu, 0x00000020u, 0x00070041u, 0x000001f2u, 0x0000026du, 0x0000024bu, 0x00000185u, 0x0000026cu, 0x000001e0u, 0x0004003du, 0x000001adu, 0x0000026eu, 0x0000026du, 0x00040071u, 0x00000006u, 0x0000026fu, 0x0000026eu, 0x0004007cu, 0x00000008u, 0x00000270u, 0x0000026fu, 0x000c0050u, 0x0000001eu, 0x00000271u, 0x0000024fu, 0x00000252u, 0x00000258u, 0x0000025du, 0x00000260u, 0x00000263u, 0x00000266u, 0x0000026bu, 0x00000270u, 0x000200feu, 0x00000271u, 0x00010038u, 0x00050036u, 0x00000023u, 0x00000026u, 0x00000000u, 0x00000024u, 0x00030037u, 0x00000007u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003du, 0x00000006u, 0x00000279u, 0x00000025u, 0x00070041u, 0x000001edu, 0x0000027au, 0x00000278u, 0x00000185u, 0x00000279u, 0x00000185u, 0x0004003du, 0x00000006u, 0x0000027bu, 0x0000027au, 0x0004003du, 0x00000006u, 0x0000027cu, 0x00000025u, 0x00070041u, 0x000001edu, 0x0000027du, 0x00000278u, 0x00000185u, 0x0000027cu, 0x00000194u, 0x0004003du, 0x00000006u, 0x0000027eu, 0x0000027du, 0x0004003du, 0x00000006u, 0x0000027fu, 0x00000025u, 0x00070041u, 0x000001edu, 0x00000280u, 0x00000278u, 0x00000185u, 0x0000027fu, 0x00000197u, 0x0004003du, 0x00000006u, 0x00000281u, 0x00000280u, 0x0004003du, 0x00000006u, 0x00000282u, 0x00000025u, 0x00070041u, 0x000001edu, 0x00000283u, 0x00000278u, 0x00000185u, 0x00000282u, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000284u, 0x00000283u, 0x0004003du, 0x00000006u, 0x00000285u, 0x00000025u, 0x00070041u, 0x000001edu, 0x00000286u, 0x00000278u, 0x00000185u, 0x00000285u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000287u, 0x00000286u, 0x0004003du, 0x00000006u, 0x00000288u, 0x00000025u, 0x00070041u, 0x000001edu, 0x00000289u, 0x00000278u, 0x00000185u, 0x00000288u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000028au, 0x00000289u, 0x0004003du, 0x00000006u, 0x0000028bu, 0x00000025u, 0x00070041u, 0x000001f9u, 0x0000028cu, 0x00000278u, 0x00000185u, 0x0000028bu, 0x000001a3u, 0x0004003du, 0x000001abu, 0x0000028du, 0x0000028cu, 0x00040071u, 0x00000006u, 0x0000028eu, 0x0000028du, 0x0004007cu, 0x00000008u, 0x0000028fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000290u, 0x00000025u, 0x00070041u, 0x000001f9u, 0x00000291u, 0x00000278u, 0x00000185u, 0x00000290u, 0x000001a6u, 0x0004003du, 0x000001abu, 0x00000292u, 0x00000291u, 0x00040071u, 0x00000006u, 0x00000293u, 0x00000292u, 0x0004007cu, 0x00000008u, 0x00000294u, 0x00000293u, 0x0004003du, 0x00000006u, 0x00000295u, 0x00000025u, 0x00070041u, 0x000001f9u, 0x00000296u, 0x00000278u, 0x00000185u, 0x00000295u, 0x000001e0u, 0x0004003du, 0x000001abu, 0x00000297u, 0x00000296u, 0x00040071u, 0x00000006u, 0x00000298u, 0x00000297u, 0x0004007cu, 0x00000008u, 0x00000299u, 0x00000298u, 0x0004003du, 0x00000006u, 0x0000029au, 0x00000025u, 0x00070041u, 0x000001f9u, 0x0000029bu, 0x00000278u, 0x00000185u, 0x0000029au, 0x000001e6u, 0x0004003du, 0x000001abu, 0x0000029cu, 0x0000029bu, 0x00040071u, 0x00000006u, 0x0000029du, 0x0000029cu, 0x0004007cu, 0x00000008u, 0x0000029eu, 0x0000029du, 0x0004003du, 0x00000006u, 0x0000029fu, 0x00000025u, 0x00070041u, 0x000001f9u, 0x000002a0u, 0x00000278u, 0x00000185u, 0x0000029fu, 0x000001ecu, 0x0004003du, 0x000001abu, 0x000002a1u, 0x000002a0u, 0x00040071u, 0x00000006u, 0x000002a2u, 0x000002a1u, 0x0004007cu, 0x00000008u, 0x000002a3u, 0x000002a2u, 0x0004003du, 0x00000006u, 0x000002a4u, 0x00000025u, 0x00070041u, 0x000001f9u, 0x000002a5u, 0x00000278u, 0x00000185u, 0x000002a4u, 0x000001f1u, 0x0004003du, 0x000001abu, 0x000002a6u, 0x000002a5u, 0x00040071u, 0x00000006u, 0x000002a7u, 0x000002a6u, 0x0004007cu, 0x00000008u, 0x000002a8u, 0x000002a7u, 0x0004003du, 0x00000006u, 0x000002a9u, 0x00000025u, 0x00070041u, 0x000001f9u, 0x000002aau, 0x00000278u, 0x00000185u, 0x000002a9u, 0x000001f8u, 0x0004003du, 0x000001abu, 0x000002abu, 0x000002aau, 0x00040071u, 0x00000006u, 0x000002acu, 0x000002abu, 0x0004007cu, 0x00000008u, 0x000002adu, 0x000002acu, 0x0004003du, 0x00000006u, 0x000002aeu, 0x00000025u, 0x00070041u, 0x000001f9u, 0x000002afu, 0x00000278u, 0x00000185u, 0x000002aeu, 0x000001ffu, 0x0004003du, 0x000001abu, 0x000002b0u, 0x000002afu, 0x00040071u, 0x00000006u, 0x000002b1u, 0x000002b0u, 0x0004007cu, 0x00000008u, 0x000002b2u, 0x000002b1u, 0x00110050u, 0x00000023u, 0x000002b3u, 0x0000027bu, 0x0000027eu, 0x00000281u, 0x00000284u, 0x00000287u, 0x0000028au, 0x0000028fu, 0x00000294u, 0x00000299u, 0x0000029eu, 0x000002a3u, 0x000002a8u, 0x000002adu, 0x000002b2u, 0x000200feu, 0x000002b3u, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000002cu, 0x00000000u, 0x00000028u, 0x00030037u, 0x00000007u, 0x00000029u, 0x00030037u, 0x00000007u, 0x0000002au, 0x00030037u, 0x00000007u, 0x0000002bu, 0x000200f8u, 0x0000002du, 0x0004003bu, 0x000002b7u, 0x000002b8u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000002b9u, 0x00000029u, 0x0004003du, 0x00000006u, 0x000002bau, 0x0000002au, 0x0004003du, 0x00000006u, 0x000002bbu, 0x0000002bu, 0x00060050u, 0x000002b6u, 0x000002bcu, 0x000002b9u, 0x000002bau, 0x000002bbu, 0x0003003eu, 0x000002b8u, 0x000002bcu, 0x0004003du, 0x000002b6u, 0x000002bdu, 0x000002b8u, 0x000500c2u, 0x000002b6u, 0x000002c0u, 0x000002bdu, 0x0000b1b3u, 0x0004003du, 0x000002b6u, 0x000002c1u, 0x000002b8u, 0x0008004fu, 0x000002b6u, 0x000002c2u, 0x000002c1u, 0x000002c1u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x000002b6u, 0x000002c3u, 0x000002c0u, 0x000002c2u, 0x00050084u, 0x000002b6u, 0x000002c6u, 0x000002c3u, 0x0000b1b4u, 0x0003003eu, 0x000002b8u, 0x000002c6u, 0x0004003du, 0x000002b6u, 0x000002c7u, 0x000002b8u, 0x000500c2u, 0x000002b6u, 0x000002c9u, 0x000002c7u, 0x0000b1b3u, 0x0004003du, 0x000002b6u, 0x000002cau, 0x000002b8u, 0x0008004fu, 0x000002b6u, 0x000002cbu, 0x000002cau, 0x000002cau, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x000002b6u, 0x000002ccu, 0x000002c9u, 0x000002cbu, 0x00050084u, 0x000002b6u, 0x000002ceu, 0x000002ccu, 0x0000b1b4u, 0x0003003eu, 0x000002b8u, 0x000002ceu, 0x0004003du, 0x000002b6u, 0x000002cfu, 0x000002b8u, 0x000500c2u, 0x000002b6u, 0x000002d1u, 0x000002cfu, 0x0000b1b3u, 0x0004003du, 0x000002b6u, 0x000002d2u, 0x000002b8u, 0x0008004fu, 0x000002b6u, 0x000002d3u, 0x000002d2u, 0x000002d2u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x000002b6u, 0x000002d4u, 0x000002d1u, 0x000002d3u, 0x00050084u, 0x000002b6u, 0x000002d6u, 0x000002d4u, 0x0000b1b4u, 0x0003003eu, 0x000002b8u, 0x000002d6u, 0x00050041u, 0x00000007u, 0x000002d8u, 0x000002b8u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000002d9u, 0x000002d8u, 0x000500c2u, 0x00000006u, 0x000002dbu, 0x000002d9u, 0x000002dau, 0x0004007cu, 0x00000008u, 0x000002dcu, 0x000002dbu, 0x0003003eu, 0x00000184u, 0x000002dcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000002fu, 0x00000000u, 0x0000002eu, 0x000200f8u, 0x00000030u, 0x0004003du, 0x00000008u, 0x000002ddu, 0x00000184u, 0x000500c7u, 0x00000008u, 0x000002deu, 0x000002ddu, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x000002dfu, 0x000002deu, 0x000001a3u, 0x000500c5u, 0x00000008u, 0x000002e1u, 0x000002dfu, 0x000002e0u, 0x000200feu, 0x000002e1u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000031u, 0x00000000u, 0x0000002eu, 0x000200f8u, 0x00000032u, 0x0004003du, 0x00000008u, 0x000002e4u, 0x00000184u, 0x000500c7u, 0x00000008u, 0x000002e5u, 0x000002e4u, 0x000001a6u, 0x000200feu, 0x000002e5u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000033u, 0x00000000u, 0x0000002eu, 0x000200f8u, 0x00000034u, 0x0004003du, 0x00000008u, 0x000002e8u, 0x00000184u, 0x000500c7u, 0x00000008u, 0x000002eau, 0x000002e8u, 0x000002e9u, 0x000200feu, 0x000002eau, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000035u, 0x00000000u, 0x0000002eu, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000008u, 0x000002edu, 0x00000184u, 0x000500c7u, 0x00000008u, 0x000002efu, 0x000002edu, 0x000002eeu, 0x000200feu, 0x000002efu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003du, 0x00000000u, 0x00000039u, 0x00030037u, 0x00000037u, 0x0000003au, 0x00030037u, 0x00000037u, 0x0000003bu, 0x00030037u, 0x00000038u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003bu, 0x00000037u, 0x000002f2u, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x000002fau, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x000002ffu, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x00000304u, 0x00000007u, 0x0004003bu, 0x000002f9u, 0x00000309u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000030eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000316u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000031cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000327u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000002f4u, 0x0000003cu, 0x000500c4u, 0x00000008u, 0x000002f5u, 0x000002f4u, 0x0000019au, 0x00070050u, 0x00000009u, 0x000002f6u, 0x000002f5u, 0x000002f5u, 0x000002f5u, 0x000002f5u, 0x00050080u, 0x00000009u, 0x000002f7u, 0x000002f3u, 0x000002f6u, 0x0003003eu, 0x000002f2u, 0x000002f7u, 0x0004003du, 0x00000009u, 0x000002fcu, 0x0000003au, 0x0009004fu, 0x00000009u, 0x000002fdu, 0x000002fcu, 0x000002fcu, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b1u, 0x000002f8u, 0x000002feu, 0x000002f7u, 0x000002fdu, 0x0003003eu, 0x000002fau, 0x000002feu, 0x0004003du, 0x00000009u, 0x00000301u, 0x0000003au, 0x0009004fu, 0x00000009u, 0x00000302u, 0x00000301u, 0x00000301u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b1u, 0x000002f8u, 0x00000303u, 0x000002f7u, 0x00000302u, 0x0003003eu, 0x000002ffu, 0x00000303u, 0x0004003du, 0x00000009u, 0x00000306u, 0x0000003bu, 0x0009004fu, 0x00000009u, 0x00000307u, 0x00000306u, 0x00000306u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500afu, 0x000002f8u, 0x00000308u, 0x000002f7u, 0x00000307u, 0x0003003eu, 0x00000304u, 0x00000308u, 0x0004003du, 0x00000009u, 0x0000030bu, 0x0000003bu, 0x0009004fu, 0x00000009u, 0x0000030cu, 0x0000030bu, 0x0000030bu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500afu, 0x000002f8u, 0x0000030du, 0x000002f7u, 0x0000030cu, 0x0003003eu, 0x00000309u, 0x0000030du, 0x000600a9u, 0x00000009u, 0x00000312u, 0x000002feu, 0x00000311u, 0x00000310u, 0x000600a9u, 0x00000009u, 0x00000314u, 0x00000308u, 0x00000311u, 0x00000310u, 0x000500c5u, 0x00000009u, 0x00000315u, 0x00000312u, 0x00000314u, 0x0003003eu, 0x0000030eu, 0x00000315u, 0x000600a9u, 0x00000009u, 0x00000318u, 0x00000303u, 0x00000311u, 0x00000310u, 0x000600a9u, 0x00000009u, 0x0000031au, 0x0000030du, 0x00000311u, 0x00000310u, 0x000500c5u, 0x00000009u, 0x0000031bu, 0x00000318u, 0x0000031au, 0x0003003eu, 0x00000316u, 0x0000031bu, 0x00050084u, 0x00000009u, 0x0000031fu, 0x00000315u, 0x0000031eu, 0x00050084u, 0x00000009u, 0x00000325u, 0x0000031bu, 0x00000324u, 0x00050080u, 0x00000009u, 0x00000326u, 0x0000031fu, 0x00000325u, 0x0003003eu, 0x0000031cu, 0x00000326u, 0x00050041u, 0x00000038u, 0x00000328u, 0x0000031cu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000329u, 0x00000328u, 0x00050041u, 0x00000038u, 0x0000032bu, 0x0000031cu, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000032cu, 0x0000032bu, 0x000500c5u, 0x00000008u, 0x0000032du, 0x00000329u, 0x0000032cu, 0x00050041u, 0x00000038u, 0x0000032fu, 0x0000031cu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00000330u, 0x0000032fu, 0x00050041u, 0x00000038u, 0x00000332u, 0x0000031cu, 0x00000331u, 0x0004003du, 0x00000008u, 0x00000333u, 0x00000332u, 0x000500c5u, 0x00000008u, 0x00000334u, 0x00000330u, 0x00000333u, 0x000500c5u, 0x00000008u, 0x00000335u, 0x0000032du, 0x00000334u, 0x0003003eu, 0x00000327u, 0x00000335u, 0x000400c8u, 0x00000008u, 0x00000337u, 0x00000335u, 0x000500c7u, 0x00000008u, 0x00000338u, 0x00000337u, 0x000002eeu, 0x000200feu, 0x00000338u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000041u, 0x00000000u, 0x0000003fu, 0x00030037u, 0x00000037u, 0x00000040u, 0x000200f8u, 0x00000042u, 0x0004003du, 0x00000009u, 0x0000033bu, 0x00000040u, 0x00050082u, 0x00000009u, 0x0000033du, 0x0000033bu, 0x0000b1b9u, 0x0003003eu, 0x00000040u, 0x0000033du, 0x0004003du, 0x00000009u, 0x0000033eu, 0x00000040u, 0x000600cau, 0x00000009u, 0x0000033fu, 0x0000033eu, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00000040u, 0x0000033fu, 0x0004003du, 0x00000009u, 0x00000340u, 0x00000040u, 0x00050080u, 0x00000009u, 0x00000342u, 0x00000340u, 0x0000b1b9u, 0x0003003eu, 0x00000040u, 0x00000342u, 0x0004003du, 0x00000009u, 0x00000343u, 0x00000040u, 0x0008000cu, 0x00000009u, 0x00000345u, 0x00000001u, 0x0000002du, 0x00000343u, 0x00000310u, 0x00000344u, 0x00050051u, 0x00000008u, 0x00000346u, 0x00000345u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000347u, 0x00000345u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000348u, 0x00000345u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000349u, 0x00000345u, 0x00000003u, 0x000200feu, 0x00000345u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000044u, 0x00000000u, 0x0000003fu, 0x00030037u, 0x00000037u, 0x00000043u, 0x000200f8u, 0x00000045u, 0x0004003bu, 0x00000037u, 0x0000034du, 0x00000007u, 0x0004003du, 0x00000009u, 0x0000034eu, 0x00000043u, 0x0003003eu, 0x0000034du, 0x0000034eu, 0x00050039u, 0x00000009u, 0x0000034fu, 0x00000041u, 0x0000034du, 0x00050051u, 0x00000008u, 0x00000350u, 0x0000034fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000351u, 0x0000034fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000352u, 0x0000034fu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000353u, 0x0000034fu, 0x00000003u, 0x000200feu, 0x0000034fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000048u, 0x00000000u, 0x00000046u, 0x00030037u, 0x00000038u, 0x00000047u, 0x000200f8u, 0x00000049u, 0x0004003du, 0x00000008u, 0x00000357u, 0x00000047u, 0x00050082u, 0x00000008u, 0x00000358u, 0x00000357u, 0x00000323u, 0x000600cau, 0x00000008u, 0x00000359u, 0x00000358u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000008u, 0x0000035au, 0x00000359u, 0x00000323u, 0x0008000cu, 0x00000008u, 0x0000035bu, 0x00000001u, 0x0000002du, 0x0000035au, 0x00000185u, 0x000002eeu, 0x000200feu, 0x0000035bu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000004bu, 0x00000000u, 0x00000046u, 0x00030037u, 0x00000038u, 0x0000004au, 0x000200f8u, 0x0000004cu, 0x0004003du, 0x00000008u, 0x0000035fu, 0x0000004au, 0x00050082u, 0x00000008u, 0x00000360u, 0x0000035fu, 0x0000035eu, 0x0003003eu, 0x0000004au, 0x00000360u, 0x0004003du, 0x00000008u, 0x00000361u, 0x0000004au, 0x000500c4u, 0x00000008u, 0x00000362u, 0x00000361u, 0x000001ffu, 0x0003003eu, 0x0000004au, 0x00000362u, 0x0004003du, 0x00000008u, 0x00000363u, 0x0000004au, 0x000500c3u, 0x00000008u, 0x00000364u, 0x00000363u, 0x000001ffu, 0x0003003eu, 0x0000004au, 0x00000364u, 0x0004003du, 0x00000008u, 0x00000365u, 0x0000004au, 0x00050080u, 0x00000008u, 0x00000366u, 0x00000365u, 0x0000035eu, 0x0003003eu, 0x0000004au, 0x00000366u, 0x0004003du, 0x00000008u, 0x00000367u, 0x0000004au, 0x0008000cu, 0x00000008u, 0x00000369u, 0x00000001u, 0x0000002du, 0x00000367u, 0x00000185u, 0x00000368u, 0x000200feu, 0x00000369u, 0x00010038u, 0x00050036u, 0x0000004du, 0x00000050u, 0x00000000u, 0x0000004eu, 0x00030037u, 0x00000038u, 0x0000004fu, 0x000200f8u, 0x00000051u, 0x0004003bu, 0x00000038u, 0x0000036cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000371u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000377u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000037au, 0x00000007u, 0x0004003bu, 0x0000043du, 0x0000043eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000444u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000036du, 0x0000004fu, 0x0006000cu, 0x00000008u, 0x0000036eu, 0x00000001u, 0x0000004au, 0x0000036du, 0x00050082u, 0x00000008u, 0x0000036fu, 0x00000205u, 0x0000036eu, 0x0007000cu, 0x00000008u, 0x00000370u, 0x00000001u, 0x00000027u, 0x0000036fu, 0x00000205u, 0x0003003eu, 0x0000036cu, 0x00000370u, 0x0004003du, 0x00000008u, 0x00000372u, 0x0000004fu, 0x000500c4u, 0x00000008u, 0x00000374u, 0x00000372u, 0x00000370u, 0x000500c7u, 0x00000008u, 0x00000376u, 0x00000374u, 0x00000375u, 0x0003003eu, 0x00000371u, 0x00000376u, 0x000500c7u, 0x00000008u, 0x00000379u, 0x00000376u, 0x000002eeu, 0x0003003eu, 0x00000377u, 0x00000379u, 0x000500c3u, 0x00000008u, 0x0000043cu, 0x00000376u, 0x000001e0u, 0x0003003eu, 0x0000043eu, 0x0000043au, 0x00050041u, 0x00000068u, 0x0000043fu, 0x0000043eu, 0x0000043cu, 0x0004003du, 0x0000004du, 0x00000440u, 0x0000043fu, 0x00050051u, 0x00000008u, 0x00000441u, 0x00000440u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000442u, 0x00000440u, 0x00000001u, 0x0003003eu, 0x0000037au, 0x00000440u, 0x00050041u, 0x00000038u, 0x00000445u, 0x0000037au, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000446u, 0x00000445u, 0x00050084u, 0x00000008u, 0x00000448u, 0x00000446u, 0x00000379u, 0x000500c3u, 0x00000008u, 0x00000449u, 0x00000448u, 0x000001ecu, 0x00050041u, 0x00000038u, 0x0000044au, 0x0000037au, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000044bu, 0x0000044au, 0x00050080u, 0x00000008u, 0x0000044cu, 0x00000449u, 0x0000044bu, 0x0003003eu, 0x00000444u, 0x0000044cu, 0x00050050u, 0x0000004du, 0x0000044fu, 0x0000044cu, 0x00000370u, 0x000200feu, 0x0000044fu, 0x00010038u, 0x00050036u, 0x0000004du, 0x00000056u, 0x00000000u, 0x00000054u, 0x00030037u, 0x00000053u, 0x00000055u, 0x000200f8u, 0x00000057u, 0x0004003du, 0x00000052u, 0x00000452u, 0x00000055u, 0x0007004fu, 0x0000004du, 0x00000453u, 0x00000452u, 0x00000452u, 0x00000000u, 0x00000001u, 0x000200feu, 0x00000453u, 0x00010038u, 0x00050036u, 0x0000004du, 0x0000005du, 0x00000000u, 0x0000005au, 0x00030037u, 0x00000053u, 0x0000005bu, 0x00030037u, 0x00000059u, 0x0000005cu, 0x000200f8u, 0x0000005eu, 0x0004003bu, 0x00000038u, 0x00000456u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000459u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000045fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000460u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000463u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000466u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000046du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000474u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000047du, 0x00000007u, 0x00050041u, 0x00000038u, 0x00000457u, 0x0000005bu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00000458u, 0x00000457u, 0x0003003eu, 0x00000456u, 0x00000458u, 0x000500b3u, 0x00000058u, 0x0000045bu, 0x00000458u, 0x00000185u, 0x0003003eu, 0x00000459u, 0x0000045bu, 0x000500c7u, 0x00000008u, 0x0000045eu, 0x00000458u, 0x0000045cu, 0x0003003eu, 0x00000456u, 0x0000045eu, 0x0003003eu, 0x00000460u, 0x0000045eu, 0x00050039u, 0x0000004du, 0x00000462u, 0x00000050u, 0x00000460u, 0x0003003eu, 0x0000045fu, 0x00000462u, 0x00050041u, 0x00000038u, 0x00000464u, 0x0000045fu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000465u, 0x00000464u, 0x0003003eu, 0x00000463u, 0x00000465u, 0x0004003du, 0x00000052u, 0x00000467u, 0x0000005bu, 0x0007004fu, 0x0000004du, 0x00000468u, 0x00000467u, 0x00000467u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000038u, 0x00000469u, 0x0000045fu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000046au, 0x00000469u, 0x00050050u, 0x0000004du, 0x0000046bu, 0x0000046au, 0x0000046au, 0x00050084u, 0x0000004du, 0x0000046cu, 0x00000468u, 0x0000046bu, 0x0003003eu, 0x00000466u, 0x0000046cu, 0x000500c3u, 0x00000008u, 0x00000471u, 0x0000046fu, 0x00000465u, 0x0004007eu, 0x00000008u, 0x00000472u, 0x00000471u, 0x000500c7u, 0x00000008u, 0x00000473u, 0x0000046eu, 0x00000472u, 0x0003003eu, 0x0000046du, 0x00000473u, 0x0004003du, 0x0000004du, 0x00000475u, 0x00000466u, 0x00050050u, 0x0000004du, 0x00000477u, 0x00000473u, 0x00000473u, 0x000500c7u, 0x0000004du, 0x00000478u, 0x00000475u, 0x00000477u, 0x0003003eu, 0x00000474u, 0x00000478u, 0x000500abu, 0x00000058u, 0x0000047au, 0x00000465u, 0x00000205u, 0x000300f7u, 0x0000047cu, 0x00000000u, 0x000400fau, 0x0000047au, 0x0000047bu, 0x00000483u, 0x000200f8u, 0x0000047bu, 0x0004003du, 0x0000004du, 0x0000047eu, 0x00000466u, 0x00050082u, 0x00000008u, 0x00000480u, 0x000001ffu, 0x00000465u, 0x00050050u, 0x0000004du, 0x00000481u, 0x00000480u, 0x00000480u, 0x000500c3u, 0x0000004du, 0x00000482u, 0x0000047eu, 0x00000481u, 0x0003003eu, 0x00000466u, 0x00000482u, 0x0003003eu, 0x0000047du, 0x00000482u, 0x000200f9u, 0x0000047cu, 0x000200f8u, 0x00000483u, 0x0004003du, 0x0000004du, 0x00000484u, 0x00000466u, 0x000500c4u, 0x0000004du, 0x00000486u, 0x00000484u, 0x0000b1bau, 0x0003003eu, 0x0000047du, 0x00000486u, 0x000200f9u, 0x0000047cu, 0x000200f8u, 0x0000047cu, 0x0004003du, 0x0000004du, 0x00000487u, 0x00000474u, 0x000500abu, 0x00000489u, 0x0000048au, 0x00000487u, 0x00000488u, 0x0004009au, 0x00000058u, 0x0000048bu, 0x0000048au, 0x000300f7u, 0x0000048du, 0x00000000u, 0x000400fau, 0x0000048bu, 0x0000048cu, 0x0000048du, 0x000200f8u, 0x0000048cu, 0x00050041u, 0x00000038u, 0x0000048eu, 0x00000474u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000048fu, 0x0000048eu, 0x000500abu, 0x00000058u, 0x00000491u, 0x0000048fu, 0x00000473u, 0x000300f7u, 0x00000493u, 0x00000000u, 0x000400fau, 0x00000491u, 0x00000492u, 0x00000493u, 0x000200f8u, 0x00000492u, 0x0004003du, 0x00000008u, 0x00000495u, 0x0000048eu, 0x000500abu, 0x00000058u, 0x00000496u, 0x00000495u, 0x00000185u, 0x000200f9u, 0x00000493u, 0x000200f8u, 0x00000493u, 0x000700f5u, 0x00000058u, 0x00000497u, 0x00000491u, 0x0000048cu, 0x00000496u, 0x00000492u, 0x000300f7u, 0x00000499u, 0x00000000u, 0x000400fau, 0x00000497u, 0x00000498u, 0x00000499u, 0x000200f8u, 0x00000498u, 0x00050041u, 0x00000038u, 0x0000049au, 0x00000466u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000049bu, 0x0000049au, 0x000500c7u, 0x00000008u, 0x0000049cu, 0x0000049bu, 0x0000046fu, 0x000500aau, 0x00000058u, 0x0000049du, 0x0000049cu, 0x00000185u, 0x000300f7u, 0x0000049fu, 0x00000000u, 0x000400fau, 0x0000049du, 0x0000049eu, 0x000004a1u, 0x000200f8u, 0x0000049eu, 0x00050041u, 0x00000038u, 0x000004a0u, 0x0000047du, 0x000002d7u, 0x0003003eu, 0x000004a0u, 0x0000045cu, 0x000200f9u, 0x0000049fu, 0x000200f8u, 0x000004a1u, 0x00050041u, 0x00000038u, 0x000004a3u, 0x0000047du, 0x000002d7u, 0x0003003eu, 0x000004a3u, 0x000004a2u, 0x000200f9u, 0x0000049fu, 0x000200f8u, 0x0000049fu, 0x0003003eu, 0x0000005cu, 0x000004a4u, 0x000200f9u, 0x00000499u, 0x000200f8u, 0x00000499u, 0x00050041u, 0x00000038u, 0x000004a5u, 0x00000474u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000004a6u, 0x000004a5u, 0x000500abu, 0x00000058u, 0x000004a8u, 0x000004a6u, 0x00000473u, 0x000300f7u, 0x000004aau, 0x00000000u, 0x000400fau, 0x000004a8u, 0x000004a9u, 0x000004aau, 0x000200f8u, 0x000004a9u, 0x0004003du, 0x00000008u, 0x000004acu, 0x000004a5u, 0x000500abu, 0x00000058u, 0x000004adu, 0x000004acu, 0x00000185u, 0x000200f9u, 0x000004aau, 0x000200f8u, 0x000004aau, 0x000700f5u, 0x00000058u, 0x000004aeu, 0x000004a8u, 0x00000499u, 0x000004adu, 0x000004a9u, 0x000300f7u, 0x000004b0u, 0x00000000u, 0x000400fau, 0x000004aeu, 0x000004afu, 0x000004b0u, 0x000200f8u, 0x000004afu, 0x00050041u, 0x00000038u, 0x000004b1u, 0x00000466u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000004b2u, 0x000004b1u, 0x000500c7u, 0x00000008u, 0x000004b3u, 0x000004b2u, 0x0000046fu, 0x000500aau, 0x00000058u, 0x000004b4u, 0x000004b3u, 0x00000185u, 0x000300f7u, 0x000004b6u, 0x00000000u, 0x000400fau, 0x000004b4u, 0x000004b5u, 0x000004b8u, 0x000200f8u, 0x000004b5u, 0x00050041u, 0x00000038u, 0x000004b7u, 0x0000047du, 0x0000032au, 0x0003003eu, 0x000004b7u, 0x0000045cu, 0x000200f9u, 0x000004b6u, 0x000200f8u, 0x000004b8u, 0x00050041u, 0x00000038u, 0x000004b9u, 0x0000047du, 0x0000032au, 0x0003003eu, 0x000004b9u, 0x000004a2u, 0x000200f9u, 0x000004b6u, 0x000200f8u, 0x000004b6u, 0x0003003eu, 0x0000005cu, 0x000004a4u, 0x000200f9u, 0x000004b0u, 0x000200f8u, 0x000004b0u, 0x000200f9u, 0x0000048du, 0x000200f8u, 0x0000048du, 0x000300f7u, 0x000004bcu, 0x00000000u, 0x000400fau, 0x0000045bu, 0x000004bbu, 0x000004bcu, 0x000200f8u, 0x000004bbu, 0x0003003eu, 0x0000047du, 0x000004bdu, 0x0003003eu, 0x0000005cu, 0x000004a4u, 0x000200f9u, 0x000004bcu, 0x000200f8u, 0x000004bcu, 0x0004003du, 0x0000004du, 0x000004beu, 0x0000047du, 0x0008000cu, 0x0000004du, 0x000004c3u, 0x00000001u, 0x0000002du, 0x000004beu, 0x000004c0u, 0x000004c2u, 0x000200feu, 0x000004c3u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000065u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x00000037u, 0x00000060u, 0x00030037u, 0x00000037u, 0x00000061u, 0x00030037u, 0x00000037u, 0x00000062u, 0x00030037u, 0x00000038u, 0x00000063u, 0x00030037u, 0x00000038u, 0x00000064u, 0x000200f8u, 0x00000066u, 0x0004003bu, 0x00000037u, 0x000004d5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000004deu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000004e1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000004e4u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000050cu, 0x00000007u, 0x0004003du, 0x00000009u, 0x000004c6u, 0x00000061u, 0x000500c7u, 0x00000009u, 0x000004c9u, 0x000004c6u, 0x0000b1b7u, 0x00070050u, 0x00000009u, 0x000004ceu, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000500c3u, 0x00000009u, 0x000004cfu, 0x000004c9u, 0x000004ceu, 0x0004003du, 0x00000008u, 0x000004d0u, 0x00000063u, 0x00070050u, 0x00000009u, 0x000004d1u, 0x000004d0u, 0x000004d0u, 0x000004d0u, 0x000004d0u, 0x00050084u, 0x00000009u, 0x000004d2u, 0x000004cfu, 0x000004d1u, 0x0004003du, 0x00000009u, 0x000004d3u, 0x00000060u, 0x00050080u, 0x00000009u, 0x000004d4u, 0x000004d3u, 0x000004d2u, 0x0003003eu, 0x00000060u, 0x000004d4u, 0x0004003du, 0x00000009u, 0x000004d6u, 0x00000060u, 0x000500c3u, 0x00000009u, 0x000004d8u, 0x000004d6u, 0x0000b1b8u, 0x00050051u, 0x00000008u, 0x000004d9u, 0x000004d8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004dau, 0x000004d8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004dbu, 0x000004d8u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000004dcu, 0x000004d8u, 0x00000003u, 0x0003003eu, 0x000004d5u, 0x000004d8u, 0x0004003du, 0x00000008u, 0x000004dfu, 0x00000064u, 0x0006000cu, 0x00000008u, 0x000004e0u, 0x00000001u, 0x00000049u, 0x000004dfu, 0x0003003eu, 0x000004deu, 0x000004e0u, 0x000500c3u, 0x00000008u, 0x000004e3u, 0x000004e0u, 0x00000194u, 0x0003003eu, 0x000004e1u, 0x000004e3u, 0x000500c7u, 0x00000008u, 0x000004e6u, 0x000004e0u, 0x00000194u, 0x000500c4u, 0x00000008u, 0x000004e7u, 0x000004e6u, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000004e9u, 0x000004e3u, 0x00000194u, 0x00050080u, 0x00000008u, 0x000004eau, 0x000004e7u, 0x000004e9u, 0x0003003eu, 0x000004e4u, 0x000004eau, 0x00070050u, 0x00000009u, 0x000004edu, 0x000004ebu, 0x000004ebu, 0x000004ebu, 0x000004ebu, 0x000500c4u, 0x00000009u, 0x000004eeu, 0x000004d8u, 0x000004edu, 0x0003003eu, 0x000004d5u, 0x000004eeu, 0x0004003du, 0x00000009u, 0x000004f0u, 0x00000061u, 0x000500c3u, 0x00000009u, 0x000004f2u, 0x000004f0u, 0x0000b1b8u, 0x00050051u, 0x00000008u, 0x000004f3u, 0x000004f2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004f4u, 0x000004f2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000004f5u, 0x000004f2u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000004f6u, 0x000004f2u, 0x00000003u, 0x00070050u, 0x00000009u, 0x000004f8u, 0x000004eau, 0x000004eau, 0x000004eau, 0x000004eau, 0x00050084u, 0x00000009u, 0x000004f9u, 0x000004f8u, 0x000004f2u, 0x0004003du, 0x00000009u, 0x000004fbu, 0x00000062u, 0x000500c3u, 0x00000009u, 0x000004fdu, 0x000004fbu, 0x0000b1b8u, 0x00050051u, 0x00000008u, 0x000004feu, 0x000004fdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000004ffu, 0x000004fdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000500u, 0x000004fdu, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000501u, 0x000004fdu, 0x00000003u, 0x00070050u, 0x00000009u, 0x00000503u, 0x000004e3u, 0x000004e3u, 0x000004e3u, 0x000004e3u, 0x00050084u, 0x00000009u, 0x00000504u, 0x00000503u, 0x000004fdu, 0x00050080u, 0x00000009u, 0x00000505u, 0x000004f9u, 0x00000504u, 0x00050080u, 0x00000009u, 0x00000507u, 0x000004eeu, 0x00000505u, 0x0003003eu, 0x000004d5u, 0x00000507u, 0x00070050u, 0x00000009u, 0x0000050au, 0x00000508u, 0x00000508u, 0x00000508u, 0x00000508u, 0x000500c3u, 0x00000009u, 0x0000050bu, 0x00000507u, 0x0000050au, 0x0003003eu, 0x000004d5u, 0x0000050bu, 0x0003003eu, 0x0000050cu, 0x0000050bu, 0x00050039u, 0x00000009u, 0x0000050eu, 0x00000044u, 0x0000050cu, 0x000200feu, 0x0000050eu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000071u, 0x00000000u, 0x00000069u, 0x00030037u, 0x00000067u, 0x0000006au, 0x00030037u, 0x00000037u, 0x0000006bu, 0x00030037u, 0x00000038u, 0x0000006cu, 0x00030037u, 0x00000059u, 0x0000006du, 0x00030037u, 0x00000059u, 0x0000006eu, 0x00030037u, 0x00000068u, 0x0000006fu, 0x00030037u, 0x00000038u, 0x00000070u, 0x000200f8u, 0x00000072u, 0x0004003bu, 0x00000038u, 0x00000511u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000513u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000522u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000052fu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00000538u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000054au, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000054bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000054cu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00000554u, 0x00000007u, 0x0004003du, 0x00000058u, 0x00000512u, 0x0000006eu, 0x000300f7u, 0x00000515u, 0x00000000u, 0x000400fau, 0x00000512u, 0x00000514u, 0x0000051au, 0x000200f8u, 0x00000514u, 0x0004003du, 0x00000008u, 0x00000516u, 0x0000006cu, 0x00050041u, 0x00000038u, 0x00000517u, 0x0000006au, 0x000001a0u, 0x0004003du, 0x00000008u, 0x00000518u, 0x00000517u, 0x00050082u, 0x00000008u, 0x00000519u, 0x00000516u, 0x00000518u, 0x0003003eu, 0x00000513u, 0x00000519u, 0x000200f9u, 0x00000515u, 0x000200f8u, 0x0000051au, 0x00050041u, 0x00000038u, 0x0000051bu, 0x0000006au, 0x000001a3u, 0x0004003du, 0x00000008u, 0x0000051cu, 0x0000051bu, 0x0004003du, 0x00000008u, 0x0000051du, 0x0000006cu, 0x00050082u, 0x00000008u, 0x0000051eu, 0x0000051cu, 0x0000051du, 0x0003003eu, 0x00000513u, 0x0000051eu, 0x000200f9u, 0x00000515u, 0x000200f8u, 0x00000515u, 0x000700f5u, 0x00000008u, 0x0000ad06u, 0x00000519u, 0x00000514u, 0x0000051eu, 0x0000051au, 0x0003003eu, 0x00000511u, 0x0000ad06u, 0x000500c3u, 0x00000008u, 0x00000521u, 0x0000ad06u, 0x000004cdu, 0x0003003eu, 0x00000511u, 0x00000521u, 0x00060041u, 0x00000528u, 0x00000529u, 0x00000527u, 0x00000185u, 0x00000194u, 0x0004003du, 0x00000008u, 0x0000052au, 0x00000529u, 0x000500c7u, 0x00000008u, 0x0000052bu, 0x00000521u, 0x0000052au, 0x0003003eu, 0x00000522u, 0x0000052bu, 0x00050082u, 0x00000008u, 0x0000052eu, 0x00000521u, 0x0000052bu, 0x0003003eu, 0x00000070u, 0x0000052eu, 0x00060041u, 0x00000528u, 0x00000531u, 0x00000527u, 0x00000185u, 0x00000185u, 0x0004003du, 0x00000008u, 0x00000532u, 0x00000531u, 0x000500c3u, 0x00000008u, 0x00000533u, 0x00000521u, 0x00000532u, 0x0004003du, 0x00000058u, 0x00000534u, 0x0000006eu, 0x000600a9u, 0x00000008u, 0x00000536u, 0x00000534u, 0x00000194u, 0x00000535u, 0x00050084u, 0x00000008u, 0x00000537u, 0x00000533u, 0x00000536u, 0x0003003eu, 0x0000052fu, 0x00000537u, 0x00050041u, 0x00000037u, 0x00000539u, 0x0000006au, 0x00000194u, 0x0004003du, 0x00000009u, 0x0000053au, 0x00000539u, 0x0008004fu, 0x00000052u, 0x0000053bu, 0x0000053au, 0x0000053au, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000053cu, 0x0000006bu, 0x0008004fu, 0x00000052u, 0x0000053du, 0x0000053cu, 0x0000053cu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x0000053fu, 0x0000053du, 0x0000b1b5u, 0x00060050u, 0x00000052u, 0x00000541u, 0x00000537u, 0x00000537u, 0x00000537u, 0x00050084u, 0x00000052u, 0x00000542u, 0x0000053fu, 0x00000541u, 0x00050080u, 0x00000052u, 0x00000543u, 0x0000053bu, 0x00000542u, 0x0003003eu, 0x00000538u, 0x00000543u, 0x0004003du, 0x00000058u, 0x00000544u, 0x0000006du, 0x000300f7u, 0x00000546u, 0x00000000u, 0x000400fau, 0x00000544u, 0x00000545u, 0x00000550u, 0x000200f8u, 0x00000545u, 0x000500c3u, 0x00000052u, 0x00000549u, 0x00000543u, 0x0000b1b6u, 0x0003003eu, 0x0000054bu, 0x00000549u, 0x00060039u, 0x0000004du, 0x0000054eu, 0x0000005du, 0x0000054bu, 0x0000054cu, 0x0004003du, 0x00000058u, 0x0000054fu, 0x0000054cu, 0x0003003eu, 0x0000054au, 0x0000054fu, 0x0003003eu, 0x0000006fu, 0x0000054eu, 0x000200f9u, 0x00000546u, 0x000200f8u, 0x00000550u, 0x000500c3u, 0x00000052u, 0x00000553u, 0x00000543u, 0x0000b1b6u, 0x0003003eu, 0x00000554u, 0x00000553u, 0x00050039u, 0x0000004du, 0x00000555u, 0x00000056u, 0x00000554u, 0x0003003eu, 0x0000006fu, 0x00000555u, 0x000200f9u, 0x00000546u, 0x000200f8u, 0x00000546u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000004du, 0x00000078u, 0x00000000u, 0x00000073u, 0x00030037u, 0x00000037u, 0x00000074u, 0x00030037u, 0x00000037u, 0x00000075u, 0x00030037u, 0x00000038u, 0x00000076u, 0x00030037u, 0x00000059u, 0x00000077u, 0x000200f8u, 0x00000079u, 0x0004003bu, 0x00000053u, 0x00000556u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000569u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000056au, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000056bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000056du, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00000572u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000557u, 0x00000074u, 0x0008004fu, 0x00000052u, 0x00000558u, 0x00000557u, 0x00000557u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x00000559u, 0x00000075u, 0x0008004fu, 0x00000052u, 0x0000055au, 0x00000559u, 0x00000559u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x0000055cu, 0x0000055au, 0x0000b1b5u, 0x00060050u, 0x00000052u, 0x0000055du, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000500c3u, 0x00000052u, 0x0000055eu, 0x0000055cu, 0x0000055du, 0x0004003du, 0x00000008u, 0x0000055fu, 0x00000076u, 0x00060050u, 0x00000052u, 0x00000560u, 0x0000055fu, 0x0000055fu, 0x0000055fu, 0x00050084u, 0x00000052u, 0x00000561u, 0x0000055eu, 0x00000560u, 0x00050080u, 0x00000052u, 0x00000562u, 0x00000558u, 0x00000561u, 0x0003003eu, 0x00000556u, 0x00000562u, 0x000500c3u, 0x00000052u, 0x00000565u, 0x00000562u, 0x0000b1b6u, 0x0003003eu, 0x00000556u, 0x00000565u, 0x0004003du, 0x00000058u, 0x00000566u, 0x00000077u, 0x000300f7u, 0x00000568u, 0x00000000u, 0x000400fau, 0x00000566u, 0x00000567u, 0x00000571u, 0x000200f8u, 0x00000567u, 0x0003003eu, 0x0000056bu, 0x00000565u, 0x00060039u, 0x0000004du, 0x0000056fu, 0x0000005du, 0x0000056bu, 0x0000056du, 0x0004003du, 0x00000058u, 0x00000570u, 0x0000056du, 0x0003003eu, 0x0000056au, 0x00000570u, 0x0003003eu, 0x00000569u, 0x0000056fu, 0x000200f9u, 0x00000568u, 0x000200f8u, 0x00000571u, 0x0003003eu, 0x00000572u, 0x00000565u, 0x00050039u, 0x0000004du, 0x00000574u, 0x00000056u, 0x00000572u, 0x0003003eu, 0x00000569u, 0x00000574u, 0x000200f9u, 0x00000568u, 0x000200f8u, 0x00000568u, 0x000700f5u, 0x0000004du, 0x0000ad0au, 0x0000056fu, 0x00000567u, 0x00000574u, 0x00000571u, 0x000200feu, 0x0000ad0au, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000088u, 0x00000000u, 0x0000007au, 0x00030037u, 0x00000037u, 0x0000007bu, 0x00030037u, 0x00000037u, 0x0000007cu, 0x00030037u, 0x00000037u, 0x0000007du, 0x00030037u, 0x00000038u, 0x0000007eu, 0x00030037u, 0x00000038u, 0x0000007fu, 0x00030037u, 0x00000059u, 0x00000080u, 0x00030037u, 0x00000059u, 0x00000081u, 0x00030037u, 0x00000038u, 0x00000082u, 0x00030037u, 0x00000068u, 0x00000083u, 0x00030037u, 0x00000068u, 0x00000084u, 0x00030037u, 0x00000068u, 0x00000085u, 0x00030037u, 0x00000038u, 0x00000086u, 0x00030037u, 0x00000059u, 0x00000087u, 0x000200f8u, 0x00000089u, 0x0004003bu, 0x00000053u, 0x00000578u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00000588u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00000598u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000005b5u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000005bfu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000005c0u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000005c7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000005c8u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000005d0u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000005d8u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x000005ddu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000005efu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000005f2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000005f5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000005f8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000612u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000579u, 0x0000007bu, 0x0008004fu, 0x00000052u, 0x0000057au, 0x00000579u, 0x00000579u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000057bu, 0x0000007cu, 0x0008004fu, 0x00000052u, 0x0000057cu, 0x0000057bu, 0x0000057bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x0000057eu, 0x0000057cu, 0x0000b1b5u, 0x00060050u, 0x00000052u, 0x0000057fu, 0x000004cdu, 0x000004cdu, 0x000004cdu, 0x000500c3u, 0x00000052u, 0x00000580u, 0x0000057eu, 0x0000057fu, 0x0004003du, 0x00000008u, 0x00000581u, 0x0000007eu, 0x00060050u, 0x00000052u, 0x00000582u, 0x00000581u, 0x00000581u, 0x00000581u, 0x00050084u, 0x00000052u, 0x00000583u, 0x00000580u, 0x00000582u, 0x00050080u, 0x00000052u, 0x00000584u, 0x0000057au, 0x00000583u, 0x0003003eu, 0x00000578u, 0x00000584u, 0x0004003du, 0x00000058u, 0x00000585u, 0x00000081u, 0x000300f7u, 0x00000587u, 0x00000000u, 0x000400fau, 0x00000585u, 0x00000586u, 0x00000587u, 0x000200f8u, 0x00000586u, 0x0004003du, 0x00000008u, 0x0000058au, 0x00000082u, 0x0004003du, 0x00000009u, 0x0000058bu, 0x0000007cu, 0x0008004fu, 0x00000052u, 0x0000058cu, 0x0000058bu, 0x0000058bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x0000058eu, 0x0000058cu, 0x0000b1b5u, 0x000500c3u, 0x00000052u, 0x00000590u, 0x0000058eu, 0x0000057fu, 0x00060050u, 0x00000052u, 0x00000591u, 0x0000058au, 0x0000058au, 0x0000058au, 0x00050084u, 0x00000052u, 0x00000592u, 0x00000591u, 0x00000590u, 0x00050080u, 0x00000052u, 0x00000593u, 0x00000584u, 0x00000592u, 0x0003003eu, 0x00000588u, 0x00000593u, 0x000300f7u, 0x00000597u, 0x00000000u, 0x000400fau, 0x00000595u, 0x00000596u, 0x000005a5u, 0x000200f8u, 0x00000596u, 0x0004003du, 0x00000008u, 0x0000059au, 0x00000082u, 0x0006000cu, 0x00000008u, 0x0000059bu, 0x00000001u, 0x00000005u, 0x0000059au, 0x0004003du, 0x00000009u, 0x0000059cu, 0x0000007du, 0x0008004fu, 0x00000052u, 0x0000059du, 0x0000059cu, 0x0000059cu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x0000059fu, 0x0000059du, 0x0000b1bbu, 0x000500c3u, 0x00000052u, 0x000005a1u, 0x0000059fu, 0x0000057fu, 0x00060050u, 0x00000052u, 0x000005a2u, 0x0000059bu, 0x0000059bu, 0x0000059bu, 0x00050084u, 0x00000052u, 0x000005a3u, 0x000005a2u, 0x000005a1u, 0x00050080u, 0x00000052u, 0x000005a4u, 0x00000584u, 0x000005a3u, 0x0003003eu, 0x00000598u, 0x000005a4u, 0x000200f9u, 0x00000597u, 0x000200f8u, 0x000005a5u, 0x0004003du, 0x00000009u, 0x000005a7u, 0x0000007du, 0x0008004fu, 0x00000052u, 0x000005a8u, 0x000005a7u, 0x000005a7u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x00000052u, 0x000005aau, 0x000005a8u, 0x0000b1bbu, 0x000500c3u, 0x00000052u, 0x000005acu, 0x000005aau, 0x0000057fu, 0x00050080u, 0x00000052u, 0x000005adu, 0x00000584u, 0x000005acu, 0x0003003eu, 0x00000598u, 0x000005adu, 0x000200f9u, 0x00000597u, 0x000200f8u, 0x00000597u, 0x000700f5u, 0x00000052u, 0x0000ad11u, 0x000005a4u, 0x00000596u, 0x000005adu, 0x000005a5u, 0x000200f9u, 0x00000587u, 0x000200f8u, 0x00000587u, 0x000700f5u, 0x00000052u, 0x0000ad10u, 0x0000ad0eu, 0x00000089u, 0x0000ad11u, 0x00000597u, 0x000700f5u, 0x00000052u, 0x0000ad0du, 0x0000ad0eu, 0x00000089u, 0x00000593u, 0x00000597u, 0x0004003du, 0x00000058u, 0x000005aeu, 0x00000080u, 0x000300f7u, 0x000005b0u, 0x00000000u, 0x000400fau, 0x000005aeu, 0x000005afu, 0x000005ccu, 0x000200f8u, 0x000005afu, 0x000500c3u, 0x00000052u, 0x000005b3u, 0x00000584u, 0x0000b1b6u, 0x0003003eu, 0x000005b4u, 0x000005b3u, 0x0004003du, 0x00000058u, 0x000005b6u, 0x00000087u, 0x0003003eu, 0x000005b5u, 0x000005b6u, 0x00060039u, 0x0000004du, 0x000005b7u, 0x0000005du, 0x000005b4u, 0x000005b5u, 0x0004003du, 0x00000058u, 0x000005b8u, 0x000005b5u, 0x0003003eu, 0x00000087u, 0x000005b8u, 0x0003003eu, 0x00000083u, 0x000005b7u, 0x0004003du, 0x00000058u, 0x000005b9u, 0x00000081u, 0x000300f7u, 0x000005bbu, 0x00000000u, 0x000400fau, 0x000005b9u, 0x000005bau, 0x000005bbu, 0x000200f8u, 0x000005bau, 0x000500c3u, 0x00000052u, 0x000005beu, 0x0000ad0du, 0x0000b1b6u, 0x0003003eu, 0x000005bfu, 0x000005beu, 0x0004003du, 0x00000058u, 0x000005c1u, 0x00000087u, 0x0003003eu, 0x000005c0u, 0x000005c1u, 0x00060039u, 0x0000004du, 0x000005c2u, 0x0000005du, 0x000005bfu, 0x000005c0u, 0x0004003du, 0x00000058u, 0x000005c3u, 0x000005c0u, 0x0003003eu, 0x00000087u, 0x000005c3u, 0x0003003eu, 0x00000084u, 0x000005c2u, 0x000500c3u, 0x00000052u, 0x000005c6u, 0x0000ad10u, 0x0000b1b6u, 0x0003003eu, 0x000005c7u, 0x000005c6u, 0x0004003du, 0x00000058u, 0x000005c9u, 0x00000087u, 0x0003003eu, 0x000005c8u, 0x000005c9u, 0x00060039u, 0x0000004du, 0x000005cau, 0x0000005du, 0x000005c7u, 0x000005c8u, 0x0004003du, 0x00000058u, 0x000005cbu, 0x000005c8u, 0x0003003eu, 0x00000087u, 0x000005cbu, 0x0003003eu, 0x00000085u, 0x000005cau, 0x000200f9u, 0x000005bbu, 0x000200f8u, 0x000005bbu, 0x000200f9u, 0x000005b0u, 0x000200f8u, 0x000005ccu, 0x000500c3u, 0x00000052u, 0x000005cfu, 0x00000584u, 0x0000b1b6u, 0x0003003eu, 0x000005d0u, 0x000005cfu, 0x00050039u, 0x0000004du, 0x000005d1u, 0x00000056u, 0x000005d0u, 0x0003003eu, 0x00000083u, 0x000005d1u, 0x0004003du, 0x00000058u, 0x000005d2u, 0x00000081u, 0x000300f7u, 0x000005d4u, 0x00000000u, 0x000400fau, 0x000005d2u, 0x000005d3u, 0x000005d4u, 0x000200f8u, 0x000005d3u, 0x000500c3u, 0x00000052u, 0x000005d7u, 0x0000ad0du, 0x0000b1b6u, 0x0003003eu, 0x000005d8u, 0x000005d7u, 0x00050039u, 0x0000004du, 0x000005d9u, 0x00000056u, 0x000005d8u, 0x0003003eu, 0x00000084u, 0x000005d9u, 0x000500c3u, 0x00000052u, 0x000005dcu, 0x0000ad10u, 0x0000b1b6u, 0x0003003eu, 0x000005ddu, 0x000005dcu, 0x00050039u, 0x0000004du, 0x000005deu, 0x00000056u, 0x000005ddu, 0x0003003eu, 0x00000085u, 0x000005deu, 0x000200f9u, 0x000005d4u, 0x000200f8u, 0x000005d4u, 0x000200f9u, 0x000005b0u, 0x000200f8u, 0x000005b0u, 0x00050041u, 0x00000038u, 0x000005dfu, 0x0000007bu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000005e0u, 0x000005dfu, 0x00050041u, 0x00000038u, 0x000005e1u, 0x0000007cu, 0x0000032eu, 0x0004003du, 0x00000008u, 0x000005e2u, 0x000005e1u, 0x0004003du, 0x00000008u, 0x000005e3u, 0x0000007eu, 0x000500c3u, 0x00000008u, 0x000005e4u, 0x000005e3u, 0x000004cdu, 0x00050084u, 0x00000008u, 0x000005e5u, 0x000005e2u, 0x000005e4u, 0x00050080u, 0x00000008u, 0x000005e6u, 0x000005e0u, 0x000005e5u, 0x0004003du, 0x00000008u, 0x000005e8u, 0x000005e1u, 0x000500c3u, 0x00000008u, 0x000005e9u, 0x000005e8u, 0x000004cdu, 0x0004003du, 0x00000008u, 0x000005eau, 0x0000007eu, 0x000500c7u, 0x00000008u, 0x000005ecu, 0x000005eau, 0x000005ebu, 0x00050084u, 0x00000008u, 0x000005edu, 0x000005e9u, 0x000005ecu, 0x00050080u, 0x00000008u, 0x000005eeu, 0x000005e6u, 0x000005edu, 0x0003003eu, 0x00000086u, 0x000005eeu, 0x0004003du, 0x00000008u, 0x000005f0u, 0x00000086u, 0x000500c3u, 0x00000008u, 0x000005f1u, 0x000005f0u, 0x000001ecu, 0x0003003eu, 0x000005efu, 0x000005f1u, 0x0004003du, 0x00000008u, 0x000005f3u, 0x0000007fu, 0x0006000cu, 0x00000008u, 0x000005f4u, 0x00000001u, 0x00000049u, 0x000005f3u, 0x0003003eu, 0x000005f2u, 0x000005f4u, 0x000500c3u, 0x00000008u, 0x000005f7u, 0x000005f4u, 0x00000194u, 0x0003003eu, 0x000005f5u, 0x000005f7u, 0x000500c7u, 0x00000008u, 0x000005fau, 0x000005f4u, 0x00000194u, 0x000500c4u, 0x00000008u, 0x000005fbu, 0x000005fau, 0x00000194u, 0x000500c7u, 0x00000008u, 0x000005fdu, 0x000005f7u, 0x00000194u, 0x00050080u, 0x00000008u, 0x000005feu, 0x000005fbu, 0x000005fdu, 0x0003003eu, 0x000005f8u, 0x000005feu, 0x000500c4u, 0x00000008u, 0x00000601u, 0x000005f1u, 0x000005ffu, 0x0003003eu, 0x000005efu, 0x00000601u, 0x0004003du, 0x00000008u, 0x00000604u, 0x000005e1u, 0x000500c3u, 0x00000008u, 0x00000605u, 0x00000604u, 0x000001ecu, 0x00050084u, 0x00000008u, 0x00000606u, 0x000005feu, 0x00000605u, 0x00050041u, 0x00000038u, 0x00000608u, 0x0000007du, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00000609u, 0x00000608u, 0x000500c3u, 0x00000008u, 0x0000060au, 0x00000609u, 0x000001ecu, 0x00050084u, 0x00000008u, 0x0000060bu, 0x000005f7u, 0x0000060au, 0x00050080u, 0x00000008u, 0x0000060cu, 0x00000606u, 0x0000060bu, 0x00050080u, 0x00000008u, 0x0000060eu, 0x00000601u, 0x0000060cu, 0x0003003eu, 0x000005efu, 0x0000060eu, 0x000500c3u, 0x00000008u, 0x00000611u, 0x0000060eu, 0x0000060fu, 0x0003003eu, 0x000005efu, 0x00000611u, 0x0003003eu, 0x00000612u, 0x00000611u, 0x00050039u, 0x00000008u, 0x00000614u, 0x0000004bu, 0x00000612u, 0x0003003eu, 0x00000086u, 0x00000614u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000008eu, 0x00000000u, 0x0000008bu, 0x00030037u, 0x0000008au, 0x0000008cu, 0x00030037u, 0x00000038u, 0x0000008du, 0x000200f8u, 0x0000008fu, 0x0004003bu, 0x00000038u, 0x0000061au, 0x00000007u, 0x00050041u, 0x00000038u, 0x00000615u, 0x0000008cu, 0x000001e6u, 0x0004003du, 0x00000008u, 0x00000616u, 0x00000615u, 0x000500abu, 0x00000058u, 0x00000617u, 0x00000616u, 0x00000185u, 0x000300f7u, 0x00000619u, 0x00000000u, 0x000400fau, 0x00000617u, 0x00000618u, 0x00000619u, 0x000200f8u, 0x00000618u, 0x0004003du, 0x00000008u, 0x0000061cu, 0x00000615u, 0x000500c4u, 0x00000008u, 0x0000061du, 0x00000194u, 0x0000061cu, 0x0003003eu, 0x0000061au, 0x0000061du, 0x00050041u, 0x00000038u, 0x0000061eu, 0x0000008cu, 0x000001ffu, 0x0004003du, 0x00000008u, 0x0000061fu, 0x0000061eu, 0x000500c7u, 0x00000008u, 0x00000620u, 0x0000061fu, 0x00000197u, 0x000500abu, 0x00000058u, 0x00000621u, 0x00000620u, 0x00000185u, 0x000300f7u, 0x00000623u, 0x00000000u, 0x000400fau, 0x00000621u, 0x00000622u, 0x00000623u, 0x000200f8u, 0x00000622u, 0x0004003du, 0x00000008u, 0x00000624u, 0x0000008du, 0x000500c7u, 0x00000008u, 0x00000626u, 0x00000624u, 0x0000061du, 0x00050082u, 0x00000008u, 0x00000627u, 0x00000626u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x00000628u, 0x00000001u, 0x0000002au, 0x00000627u, 0x00000185u, 0x0004003du, 0x00000008u, 0x00000629u, 0x0000008du, 0x000500c6u, 0x00000008u, 0x0000062au, 0x00000629u, 0x00000628u, 0x0003003eu, 0x0000008du, 0x0000062au, 0x000200f9u, 0x00000623u, 0x000200f8u, 0x00000623u, 0x00050082u, 0x00000008u, 0x0000062cu, 0x0000061du, 0x00000194u, 0x0004003du, 0x00000008u, 0x0000062du, 0x0000008du, 0x000500c7u, 0x00000008u, 0x0000062eu, 0x0000062du, 0x0000062cu, 0x0003003eu, 0x0000008du, 0x0000062eu, 0x000200f9u, 0x00000619u, 0x000200f8u, 0x00000619u, 0x0004003du, 0x00000008u, 0x0000062fu, 0x0000008du, 0x000200feu, 0x0000062fu, 0x00010038u, 0x00050036u, 0x0000004du, 0x00000093u, 0x00000000u, 0x00000090u, 0x00030037u, 0x0000008au, 0x00000091u, 0x00030037u, 0x00000038u, 0x00000092u, 0x000200f8u, 0x00000094u, 0x0004003bu, 0x00000068u, 0x00000632u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000063cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000633u, 0x00000092u, 0x00050050u, 0x0000004du, 0x00000635u, 0x00000633u, 0x00000633u, 0x00050080u, 0x0000004du, 0x00000636u, 0x00000635u, 0x00000634u, 0x0003003eu, 0x00000632u, 0x00000636u, 0x00050041u, 0x00000038u, 0x00000637u, 0x00000091u, 0x000001e6u, 0x0004003du, 0x00000008u, 0x00000638u, 0x00000637u, 0x000500abu, 0x00000058u, 0x00000639u, 0x00000638u, 0x00000185u, 0x000300f7u, 0x0000063bu, 0x00000000u, 0x000400fau, 0x00000639u, 0x0000063au, 0x0000063bu, 0x000200f8u, 0x0000063au, 0x0004003du, 0x00000008u, 0x0000063eu, 0x00000637u, 0x000500c4u, 0x00000008u, 0x0000063fu, 0x00000194u, 0x0000063eu, 0x0003003eu, 0x0000063cu, 0x0000063fu, 0x00050041u, 0x00000038u, 0x00000640u, 0x00000091u, 0x000001ffu, 0x0004003du, 0x00000008u, 0x00000641u, 0x00000640u, 0x000500c7u, 0x00000008u, 0x00000642u, 0x00000641u, 0x00000197u, 0x000500abu, 0x00000058u, 0x00000643u, 0x00000642u, 0x00000185u, 0x000300f7u, 0x00000645u, 0x00000000u, 0x000400fau, 0x00000643u, 0x00000644u, 0x00000645u, 0x000200f8u, 0x00000644u, 0x00050050u, 0x0000004du, 0x00000648u, 0x0000063fu, 0x0000063fu, 0x000500c7u, 0x0000004du, 0x00000649u, 0x00000636u, 0x00000648u, 0x00050082u, 0x0000004du, 0x0000064bu, 0x00000649u, 0x0000b1bau, 0x0007000cu, 0x0000004du, 0x0000064du, 0x00000001u, 0x0000002au, 0x0000064bu, 0x00000488u, 0x000500c6u, 0x0000004du, 0x0000064fu, 0x00000636u, 0x0000064du, 0x0003003eu, 0x00000632u, 0x0000064fu, 0x000200f9u, 0x00000645u, 0x000200f8u, 0x00000645u, 0x000700f5u, 0x0000004du, 0x0000ad14u, 0x00000636u, 0x0000063au, 0x0000064fu, 0x00000644u, 0x00050082u, 0x00000008u, 0x00000651u, 0x0000063fu, 0x00000194u, 0x00050050u, 0x0000004du, 0x00000653u, 0x00000651u, 0x00000651u, 0x000500c7u, 0x0000004du, 0x00000654u, 0x0000ad14u, 0x00000653u, 0x0003003eu, 0x00000632u, 0x00000654u, 0x000200f9u, 0x0000063bu, 0x000200f8u, 0x0000063bu, 0x000700f5u, 0x0000004du, 0x0000ad15u, 0x00000636u, 0x00000094u, 0x00000654u, 0x00000645u, 0x000200feu, 0x0000ad15u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000097u, 0x00000000u, 0x0000008bu, 0x00030037u, 0x0000008au, 0x00000095u, 0x00030037u, 0x00000038u, 0x00000096u, 0x000200f8u, 0x00000098u, 0x0004003bu, 0x00000038u, 0x0000065du, 0x00000007u, 0x00050041u, 0x00000038u, 0x00000658u, 0x00000095u, 0x000001f1u, 0x0004003du, 0x00000008u, 0x00000659u, 0x00000658u, 0x000500abu, 0x00000058u, 0x0000065au, 0x00000659u, 0x00000185u, 0x000300f7u, 0x0000065cu, 0x00000000u, 0x000400fau, 0x0000065au, 0x0000065bu, 0x0000065cu, 0x000200f8u, 0x0000065bu, 0x0004003du, 0x00000008u, 0x0000065fu, 0x00000658u, 0x000500c4u, 0x00000008u, 0x00000660u, 0x00000194u, 0x0000065fu, 0x0003003eu, 0x0000065du, 0x00000660u, 0x00050041u, 0x00000038u, 0x00000661u, 0x00000095u, 0x000001ffu, 0x0004003du, 0x00000008u, 0x00000662u, 0x00000661u, 0x000500c7u, 0x00000008u, 0x00000663u, 0x00000662u, 0x000001e0u, 0x000500abu, 0x00000058u, 0x00000664u, 0x00000663u, 0x00000185u, 0x000300f7u, 0x00000666u, 0x00000000u, 0x000400fau, 0x00000664u, 0x00000665u, 0x00000666u, 0x000200f8u, 0x00000665u, 0x0004003du, 0x00000008u, 0x00000667u, 0x00000096u, 0x000500c7u, 0x00000008u, 0x00000669u, 0x00000667u, 0x00000660u, 0x00050082u, 0x00000008u, 0x0000066au, 0x00000669u, 0x00000194u, 0x0007000cu, 0x00000008u, 0x0000066bu, 0x00000001u, 0x0000002au, 0x0000066au, 0x00000185u, 0x0004003du, 0x00000008u, 0x0000066cu, 0x00000096u, 0x000500c6u, 0x00000008u, 0x0000066du, 0x0000066cu, 0x0000066bu, 0x0003003eu, 0x00000096u, 0x0000066du, 0x000200f9u, 0x00000666u, 0x000200f8u, 0x00000666u, 0x00050082u, 0x00000008u, 0x0000066fu, 0x00000660u, 0x00000194u, 0x0004003du, 0x00000008u, 0x00000670u, 0x00000096u, 0x000500c7u, 0x00000008u, 0x00000671u, 0x00000670u, 0x0000066fu, 0x0003003eu, 0x00000096u, 0x00000671u, 0x000200f9u, 0x0000065cu, 0x000200f8u, 0x0000065cu, 0x0004003du, 0x00000008u, 0x00000672u, 0x00000096u, 0x000200feu, 0x00000672u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000009bu, 0x00000000u, 0x00000099u, 0x00030037u, 0x00000007u, 0x0000009au, 0x000200f8u, 0x0000009cu, 0x0004003bu, 0x000002b7u, 0x00000675u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000686u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000676u, 0x0000009au, 0x00060050u, 0x000002b6u, 0x00000677u, 0x00000676u, 0x00000676u, 0x00000676u, 0x000500c2u, 0x000002b6u, 0x0000067bu, 0x00000677u, 0x0000067au, 0x000500c7u, 0x000002b6u, 0x0000067eu, 0x0000067bu, 0x0000b1c0u, 0x0003003eu, 0x00000675u, 0x0000067eu, 0x000500c4u, 0x000002b6u, 0x00000681u, 0x0000067eu, 0x0000b1c1u, 0x000500c2u, 0x000002b6u, 0x00000684u, 0x0000067eu, 0x0000b1c2u, 0x000500c5u, 0x000002b6u, 0x00000685u, 0x00000681u, 0x00000684u, 0x0003003eu, 0x00000675u, 0x00000685u, 0x0004003du, 0x00000006u, 0x00000687u, 0x0000009au, 0x000500c7u, 0x00000006u, 0x00000688u, 0x00000687u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000068au, 0x00000688u, 0x00000689u, 0x0003003eu, 0x00000686u, 0x0000068au, 0x0004007cu, 0x00000052u, 0x0000068cu, 0x00000685u, 0x0004007cu, 0x00000008u, 0x0000068eu, 0x0000068au, 0x00050051u, 0x00000008u, 0x0000068fu, 0x0000068cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000690u, 0x0000068cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000691u, 0x0000068cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00000692u, 0x0000068fu, 0x00000690u, 0x00000691u, 0x0000068eu, 0x000200feu, 0x00000692u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000009eu, 0x00000000u, 0x00000099u, 0x00030037u, 0x00000007u, 0x0000009du, 0x000200f8u, 0x0000009fu, 0x0004003bu, 0x00000007u, 0x00000695u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000698u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000696u, 0x0000009du, 0x000500c2u, 0x00000006u, 0x00000697u, 0x00000696u, 0x000001e0u, 0x0003003eu, 0x00000695u, 0x00000697u, 0x0004003du, 0x00000006u, 0x00000699u, 0x0000009du, 0x000500c7u, 0x00000006u, 0x0000069au, 0x00000699u, 0x00000689u, 0x0003003eu, 0x00000698u, 0x0000069au, 0x0004007cu, 0x00000008u, 0x0000069cu, 0x00000697u, 0x0004007cu, 0x00000008u, 0x000006a2u, 0x0000069au, 0x00070050u, 0x00000009u, 0x000006a3u, 0x0000069cu, 0x0000069cu, 0x0000069cu, 0x000006a2u, 0x000200feu, 0x000006a3u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000a6u, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000a3u, 0x00030037u, 0x00000007u, 0x000000a4u, 0x00030037u, 0x000000a1u, 0x000000a5u, 0x000200f8u, 0x000000a7u, 0x0004003bu, 0x00000007u, 0x000006a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006c8u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000006a7u, 0x000000a3u, 0x0000019du, 0x0004003du, 0x00000006u, 0x000006a8u, 0x000006a7u, 0x00050041u, 0x00000007u, 0x000006a9u, 0x000000a3u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000006aau, 0x000006a9u, 0x00050041u, 0x00000007u, 0x000006abu, 0x000000a5u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000006acu, 0x000006abu, 0x00050084u, 0x00000006u, 0x000006adu, 0x000006aau, 0x000006acu, 0x00050080u, 0x00000006u, 0x000006aeu, 0x000006a8u, 0x000006adu, 0x0003003eu, 0x000006a6u, 0x000006aeu, 0x00050041u, 0x00000007u, 0x000006afu, 0x000000a5u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000006b0u, 0x000006afu, 0x000500c2u, 0x00000006u, 0x000006b1u, 0x000006b0u, 0x00000194u, 0x00050080u, 0x00000006u, 0x000006b3u, 0x000006aeu, 0x000006b1u, 0x0003003eu, 0x000006a6u, 0x000006b3u, 0x000500c7u, 0x00000006u, 0x000006b6u, 0x000006b3u, 0x000006b4u, 0x0003003eu, 0x000006a6u, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006b9u, 0x000006afu, 0x000400c8u, 0x00000006u, 0x000006bau, 0x000006b9u, 0x000500c7u, 0x00000006u, 0x000006bbu, 0x000006bau, 0x0000032au, 0x00050084u, 0x00000006u, 0x000006bdu, 0x000006bbu, 0x000006bcu, 0x0003003eu, 0x000006b7u, 0x000006bdu, 0x0003003eu, 0x000006beu, 0x000006b6u, 0x0004003du, 0x00000006u, 0x000006c1u, 0x000006abu, 0x000500c7u, 0x00000006u, 0x000006c2u, 0x000006c1u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000006c3u, 0x000006c2u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000006c5u, 0x000006b6u, 0x000006c3u, 0x0003003eu, 0x000006beu, 0x000006c5u, 0x000500c6u, 0x00000006u, 0x000006c7u, 0x000006c5u, 0x00000331u, 0x0003003eu, 0x000006beu, 0x000006c7u, 0x0004003du, 0x00000006u, 0x000006d0u, 0x000000a4u, 0x00080041u, 0x000001f9u, 0x000006d2u, 0x000006cfu, 0x00000185u, 0x000006d0u, 0x00000185u, 0x000006c7u, 0x0004003du, 0x000001abu, 0x000006d3u, 0x000006d2u, 0x00040071u, 0x00000006u, 0x000006d4u, 0x000006d3u, 0x0003003eu, 0x000006c8u, 0x000006d4u, 0x000500c2u, 0x00000006u, 0x000006d7u, 0x000006d4u, 0x000006bdu, 0x000500c7u, 0x00000006u, 0x000006d9u, 0x000006d7u, 0x000006d8u, 0x0003003eu, 0x000006c8u, 0x000006d9u, 0x000500c4u, 0x00000006u, 0x000006dbu, 0x000006d9u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000006ddu, 0x000006d9u, 0x000006dbu, 0x0003003eu, 0x000006c8u, 0x000006ddu, 0x0004007cu, 0x00000008u, 0x000006dfu, 0x000006ddu, 0x00070050u, 0x00000009u, 0x000006e0u, 0x000006dfu, 0x000006dfu, 0x000006dfu, 0x000006dfu, 0x000200feu, 0x000006e0u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000abu, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000a8u, 0x00030037u, 0x00000007u, 0x000000a9u, 0x00030037u, 0x000000a1u, 0x000000aau, 0x000200f8u, 0x000000acu, 0x0004003bu, 0x00000007u, 0x000006e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000703u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000070du, 0x00000007u, 0x00050041u, 0x00000007u, 0x000006e4u, 0x000000a8u, 0x0000019du, 0x0004003du, 0x00000006u, 0x000006e5u, 0x000006e4u, 0x00050041u, 0x00000007u, 0x000006e6u, 0x000000a8u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000006e7u, 0x000006e6u, 0x00050041u, 0x00000007u, 0x000006e8u, 0x000000aau, 0x0000032au, 0x0004003du, 0x00000006u, 0x000006e9u, 0x000006e8u, 0x00050084u, 0x00000006u, 0x000006eau, 0x000006e7u, 0x000006e9u, 0x00050080u, 0x00000006u, 0x000006ebu, 0x000006e5u, 0x000006eau, 0x0003003eu, 0x000006e3u, 0x000006ebu, 0x00050041u, 0x00000007u, 0x000006ecu, 0x000000aau, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000006edu, 0x000006ecu, 0x000500c2u, 0x00000006u, 0x000006eeu, 0x000006edu, 0x00000194u, 0x00050080u, 0x00000006u, 0x000006f0u, 0x000006ebu, 0x000006eeu, 0x0003003eu, 0x000006e3u, 0x000006f0u, 0x000500c7u, 0x00000006u, 0x000006f2u, 0x000006f0u, 0x000006b4u, 0x0003003eu, 0x000006e3u, 0x000006f2u, 0x0004003du, 0x00000006u, 0x000006f5u, 0x000006ecu, 0x000400c8u, 0x00000006u, 0x000006f6u, 0x000006f5u, 0x000500c7u, 0x00000006u, 0x000006f7u, 0x000006f6u, 0x0000032au, 0x00050084u, 0x00000006u, 0x000006f8u, 0x000006f7u, 0x000006bcu, 0x0003003eu, 0x000006f3u, 0x000006f8u, 0x0003003eu, 0x000006f9u, 0x000006f2u, 0x0004003du, 0x00000006u, 0x000006fcu, 0x000006e8u, 0x000500c7u, 0x00000006u, 0x000006fdu, 0x000006fcu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000006feu, 0x000006fdu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00000700u, 0x000006f2u, 0x000006feu, 0x0003003eu, 0x000006f9u, 0x00000700u, 0x000500c6u, 0x00000006u, 0x00000702u, 0x00000700u, 0x00000331u, 0x0003003eu, 0x000006f9u, 0x00000702u, 0x0004003du, 0x00000006u, 0x00000704u, 0x000000a9u, 0x00080041u, 0x000001f9u, 0x00000706u, 0x000006cfu, 0x00000185u, 0x00000704u, 0x00000185u, 0x00000702u, 0x0004003du, 0x000001abu, 0x00000707u, 0x00000706u, 0x00040071u, 0x00000006u, 0x00000708u, 0x00000707u, 0x0003003eu, 0x00000703u, 0x00000708u, 0x000500c2u, 0x00000006u, 0x0000070bu, 0x00000708u, 0x000006f8u, 0x000500c7u, 0x00000006u, 0x0000070cu, 0x0000070bu, 0x000006d8u, 0x0003003eu, 0x00000703u, 0x0000070cu, 0x000500c7u, 0x00000006u, 0x00000710u, 0x0000070cu, 0x0000070fu, 0x0003003eu, 0x0000070du, 0x00000710u, 0x000500c4u, 0x00000006u, 0x00000712u, 0x00000710u, 0x0000019du, 0x000500c4u, 0x00000006u, 0x00000714u, 0x00000710u, 0x00000194u, 0x000500c5u, 0x00000006u, 0x00000715u, 0x00000712u, 0x00000714u, 0x000500c2u, 0x00000006u, 0x00000717u, 0x00000710u, 0x00000197u, 0x000500c5u, 0x00000006u, 0x00000718u, 0x00000715u, 0x00000717u, 0x0003003eu, 0x0000070du, 0x00000718u, 0x0004007cu, 0x00000008u, 0x0000071au, 0x00000718u, 0x000500c7u, 0x00000006u, 0x00000720u, 0x0000070cu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00000721u, 0x00000720u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00000722u, 0x00000721u, 0x00070050u, 0x00000009u, 0x00000723u, 0x0000071au, 0x0000071au, 0x0000071au, 0x00000722u, 0x000200feu, 0x00000723u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000b2u, 0x00000000u, 0x000000adu, 0x00030037u, 0x0000008au, 0x000000aeu, 0x00030037u, 0x00000007u, 0x000000afu, 0x00030037u, 0x000000a1u, 0x000000b0u, 0x00030037u, 0x00000007u, 0x000000b1u, 0x000200f8u, 0x000000b3u, 0x0004003bu, 0x00000007u, 0x00000726u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000736u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000073cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000746u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000727u, 0x000000aeu, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000728u, 0x00000727u, 0x00050041u, 0x00000007u, 0x00000729u, 0x000000aeu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000072au, 0x00000729u, 0x00050041u, 0x00000007u, 0x0000072bu, 0x000000b0u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000072cu, 0x0000072bu, 0x00050084u, 0x00000006u, 0x0000072du, 0x0000072au, 0x0000072cu, 0x00050080u, 0x00000006u, 0x0000072eu, 0x00000728u, 0x0000072du, 0x0003003eu, 0x00000726u, 0x0000072eu, 0x00050041u, 0x00000007u, 0x0000072fu, 0x000000b0u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000730u, 0x0000072fu, 0x000500c2u, 0x00000006u, 0x00000731u, 0x00000730u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00000733u, 0x0000072eu, 0x00000731u, 0x0003003eu, 0x00000726u, 0x00000733u, 0x000500c7u, 0x00000006u, 0x00000735u, 0x00000733u, 0x000006b4u, 0x0003003eu, 0x00000726u, 0x00000735u, 0x0004003du, 0x00000006u, 0x00000738u, 0x0000072fu, 0x000400c8u, 0x00000006u, 0x00000739u, 0x00000738u, 0x000500c7u, 0x00000006u, 0x0000073au, 0x00000739u, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000073bu, 0x0000073au, 0x000006bcu, 0x0003003eu, 0x00000736u, 0x0000073bu, 0x0003003eu, 0x0000073cu, 0x00000735u, 0x0004003du, 0x00000006u, 0x0000073fu, 0x0000072bu, 0x000500c7u, 0x00000006u, 0x00000740u, 0x0000073fu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00000741u, 0x00000740u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00000743u, 0x00000735u, 0x00000741u, 0x0003003eu, 0x0000073cu, 0x00000743u, 0x000500c6u, 0x00000006u, 0x00000745u, 0x00000743u, 0x00000331u, 0x0003003eu, 0x0000073cu, 0x00000745u, 0x0004003du, 0x00000006u, 0x00000747u, 0x000000afu, 0x00080041u, 0x000001f9u, 0x00000749u, 0x000006cfu, 0x00000185u, 0x00000747u, 0x00000185u, 0x00000745u, 0x0004003du, 0x000001abu, 0x0000074au, 0x00000749u, 0x00040071u, 0x00000006u, 0x0000074bu, 0x0000074au, 0x0003003eu, 0x00000746u, 0x0000074bu, 0x000500c2u, 0x00000006u, 0x0000074eu, 0x0000074bu, 0x0000073bu, 0x000500c7u, 0x00000006u, 0x0000074fu, 0x0000074eu, 0x000006d8u, 0x0003003eu, 0x00000746u, 0x0000074fu, 0x0004003du, 0x00000006u, 0x00000750u, 0x000000b1u, 0x000500c4u, 0x00000006u, 0x00000751u, 0x00000750u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00000753u, 0x0000074fu, 0x00000751u, 0x0003003eu, 0x00000746u, 0x00000753u, 0x0004007cu, 0x00000008u, 0x00000755u, 0x00000753u, 0x00070050u, 0x00000009u, 0x00000756u, 0x00000755u, 0x00000755u, 0x00000755u, 0x00000755u, 0x000200feu, 0x00000756u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000bcu, 0x00000000u, 0x000000b4u, 0x00030037u, 0x0000008au, 0x000000b5u, 0x00030037u, 0x00000007u, 0x000000b6u, 0x00030037u, 0x000000a1u, 0x000000b7u, 0x00030037u, 0x00000007u, 0x000000b8u, 0x00030037u, 0x00000007u, 0x000000b9u, 0x00030037u, 0x00000007u, 0x000000bau, 0x00030037u, 0x00000059u, 0x000000bbu, 0x000200f8u, 0x000000bdu, 0x0004003bu, 0x00000007u, 0x00000759u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000076au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000770u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000077au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000788u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000079fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007a6u, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000075au, 0x000000b5u, 0x0000019du, 0x0004003du, 0x00000006u, 0x0000075bu, 0x0000075au, 0x00050041u, 0x00000007u, 0x0000075cu, 0x000000b5u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x0000075du, 0x0000075cu, 0x00050041u, 0x00000007u, 0x0000075eu, 0x000000b7u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000075fu, 0x0000075eu, 0x00050084u, 0x00000006u, 0x00000760u, 0x0000075du, 0x0000075fu, 0x00050080u, 0x00000006u, 0x00000761u, 0x0000075bu, 0x00000760u, 0x0003003eu, 0x00000759u, 0x00000761u, 0x00050041u, 0x00000007u, 0x00000762u, 0x000000b7u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000763u, 0x00000762u, 0x000500c2u, 0x00000006u, 0x00000764u, 0x00000763u, 0x00000194u, 0x00050080u, 0x00000006u, 0x00000766u, 0x00000761u, 0x00000764u, 0x0003003eu, 0x00000759u, 0x00000766u, 0x000500c7u, 0x00000006u, 0x00000769u, 0x00000766u, 0x00000767u, 0x0003003eu, 0x00000759u, 0x00000769u, 0x0004003du, 0x00000006u, 0x0000076cu, 0x00000762u, 0x000400c8u, 0x00000006u, 0x0000076du, 0x0000076cu, 0x000500c7u, 0x00000006u, 0x0000076eu, 0x0000076du, 0x0000032au, 0x00050084u, 0x00000006u, 0x0000076fu, 0x0000076eu, 0x000006bcu, 0x0003003eu, 0x0000076au, 0x0000076fu, 0x0003003eu, 0x00000770u, 0x00000769u, 0x0004003du, 0x00000006u, 0x00000773u, 0x0000075eu, 0x000500c7u, 0x00000006u, 0x00000774u, 0x00000773u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00000775u, 0x00000774u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00000777u, 0x00000769u, 0x00000775u, 0x0003003eu, 0x00000770u, 0x00000777u, 0x000500c6u, 0x00000006u, 0x00000779u, 0x00000777u, 0x00000331u, 0x0003003eu, 0x00000770u, 0x00000779u, 0x0004003du, 0x00000006u, 0x0000077bu, 0x000000b6u, 0x00080041u, 0x000001f9u, 0x0000077du, 0x000006cfu, 0x00000185u, 0x0000077bu, 0x00000185u, 0x00000779u, 0x0004003du, 0x000001abu, 0x0000077eu, 0x0000077du, 0x00040071u, 0x00000006u, 0x0000077fu, 0x0000077eu, 0x0003003eu, 0x0000077au, 0x0000077fu, 0x000500c2u, 0x00000006u, 0x00000782u, 0x0000077fu, 0x0000076fu, 0x000500c7u, 0x00000006u, 0x00000783u, 0x00000782u, 0x000006d8u, 0x0003003eu, 0x0000077au, 0x00000783u, 0x0004003du, 0x00000006u, 0x00000784u, 0x000000b8u, 0x000500c4u, 0x00000006u, 0x00000785u, 0x00000784u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x00000787u, 0x00000783u, 0x00000785u, 0x0003003eu, 0x0000077au, 0x00000787u, 0x000500c4u, 0x00000006u, 0x0000078au, 0x00000787u, 0x00000197u, 0x0004003du, 0x00000006u, 0x0000078bu, 0x000000b9u, 0x00050080u, 0x00000006u, 0x0000078cu, 0x0000078au, 0x0000078bu, 0x0003003eu, 0x00000788u, 0x0000078cu, 0x0004003du, 0x00000006u, 0x0000078du, 0x000000bau, 0x000500c6u, 0x00000006u, 0x0000078fu, 0x0000078cu, 0x0000078du, 0x0003003eu, 0x00000788u, 0x0000078fu, 0x0004003du, 0x00000006u, 0x00000797u, 0x000000b6u, 0x000500c5u, 0x00000006u, 0x0000079au, 0x00000798u, 0x0000078fu, 0x00080041u, 0x000001f2u, 0x0000079bu, 0x00000796u, 0x00000185u, 0x00000797u, 0x00000185u, 0x0000079au, 0x0004003du, 0x000001adu, 0x0000079cu, 0x0000079bu, 0x00040071u, 0x00000006u, 0x0000079du, 0x0000079cu, 0x0003003eu, 0x0000077au, 0x0000079du, 0x0004003du, 0x00000058u, 0x0000079eu, 0x000000bbu, 0x000300f7u, 0x000007a1u, 0x00000000u, 0x000400fau, 0x0000079eu, 0x000007a0u, 0x000007a5u, 0x000200f8u, 0x000007a0u, 0x0003003eu, 0x000007a2u, 0x0000079du, 0x00050039u, 0x00000009u, 0x000007a4u, 0x0000009eu, 0x000007a2u, 0x0003003eu, 0x0000079fu, 0x000007a4u, 0x000200f9u, 0x000007a1u, 0x000200f8u, 0x000007a5u, 0x0003003eu, 0x000007a6u, 0x0000079du, 0x00050039u, 0x00000009u, 0x000007a8u, 0x0000009bu, 0x000007a6u, 0x0003003eu, 0x0000079fu, 0x000007a8u, 0x000200f9u, 0x000007a1u, 0x000200f8u, 0x000007a1u, 0x000700f5u, 0x00000009u, 0x0000ad17u, 0x000007a4u, 0x000007a0u, 0x000007a8u, 0x000007a5u, 0x000200feu, 0x0000ad17u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000c5u, 0x00000000u, 0x000000beu, 0x00030037u, 0x0000008au, 0x000000bfu, 0x00030037u, 0x00000007u, 0x000000c0u, 0x00030037u, 0x000000a1u, 0x000000c1u, 0x00030037u, 0x00000007u, 0x000000c2u, 0x00030037u, 0x00000007u, 0x000000c3u, 0x00030037u, 0x00000059u, 0x000000c4u, 0x000200f8u, 0x000000c6u, 0x0004003bu, 0x00000007u, 0x000007acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007cbu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000007dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007e1u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000007adu, 0x000000bfu, 0x0000019du, 0x0004003du, 0x00000006u, 0x000007aeu, 0x000007adu, 0x00050041u, 0x00000007u, 0x000007afu, 0x000000bfu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000007b0u, 0x000007afu, 0x00050041u, 0x00000007u, 0x000007b1u, 0x000000c1u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000007b2u, 0x000007b1u, 0x00050084u, 0x00000006u, 0x000007b3u, 0x000007b0u, 0x000007b2u, 0x00050080u, 0x00000006u, 0x000007b4u, 0x000007aeu, 0x000007b3u, 0x0003003eu, 0x000007acu, 0x000007b4u, 0x00050041u, 0x00000007u, 0x000007b5u, 0x000000c1u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000007b6u, 0x000007b5u, 0x00050080u, 0x00000006u, 0x000007b8u, 0x000007b4u, 0x000007b6u, 0x0003003eu, 0x000007acu, 0x000007b8u, 0x000500c7u, 0x00000006u, 0x000007bau, 0x000007b8u, 0x00000767u, 0x0003003eu, 0x000007acu, 0x000007bau, 0x0003003eu, 0x000007bbu, 0x000007bau, 0x0004003du, 0x00000006u, 0x000007beu, 0x000007b1u, 0x000500c7u, 0x00000006u, 0x000007bfu, 0x000007beu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000007c0u, 0x000007bfu, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000007c2u, 0x000007bau, 0x000007c0u, 0x0003003eu, 0x000007bbu, 0x000007c2u, 0x000500c6u, 0x00000006u, 0x000007c4u, 0x000007c2u, 0x00000331u, 0x0003003eu, 0x000007bbu, 0x000007c4u, 0x0004003du, 0x00000006u, 0x000007c6u, 0x000000c0u, 0x00080041u, 0x000001f9u, 0x000007c8u, 0x000006cfu, 0x00000185u, 0x000007c6u, 0x00000185u, 0x000007c4u, 0x0004003du, 0x000001abu, 0x000007c9u, 0x000007c8u, 0x00040071u, 0x00000006u, 0x000007cau, 0x000007c9u, 0x0003003eu, 0x000007c5u, 0x000007cau, 0x000500c4u, 0x00000006u, 0x000007cdu, 0x000007cau, 0x00000197u, 0x0004003du, 0x00000006u, 0x000007ceu, 0x000000c2u, 0x00050080u, 0x00000006u, 0x000007cfu, 0x000007cdu, 0x000007ceu, 0x0003003eu, 0x000007cbu, 0x000007cfu, 0x0004003du, 0x00000006u, 0x000007d0u, 0x000000c3u, 0x000500c6u, 0x00000006u, 0x000007d2u, 0x000007cfu, 0x000007d0u, 0x0003003eu, 0x000007cbu, 0x000007d2u, 0x0004003du, 0x00000006u, 0x000007d3u, 0x000000c0u, 0x000500c5u, 0x00000006u, 0x000007d5u, 0x00000798u, 0x000007d2u, 0x00080041u, 0x000001f2u, 0x000007d6u, 0x00000796u, 0x00000185u, 0x000007d3u, 0x00000185u, 0x000007d5u, 0x0004003du, 0x000001adu, 0x000007d7u, 0x000007d6u, 0x00040071u, 0x00000006u, 0x000007d8u, 0x000007d7u, 0x0003003eu, 0x000007c5u, 0x000007d8u, 0x0004003du, 0x00000058u, 0x000007d9u, 0x000000c4u, 0x000300f7u, 0x000007dcu, 0x00000000u, 0x000400fau, 0x000007d9u, 0x000007dbu, 0x000007e0u, 0x000200f8u, 0x000007dbu, 0x0003003eu, 0x000007ddu, 0x000007d8u, 0x00050039u, 0x00000009u, 0x000007dfu, 0x0000009eu, 0x000007ddu, 0x0003003eu, 0x000007dau, 0x000007dfu, 0x000200f9u, 0x000007dcu, 0x000200f8u, 0x000007e0u, 0x0003003eu, 0x000007e1u, 0x000007d8u, 0x00050039u, 0x00000009u, 0x000007e3u, 0x0000009bu, 0x000007e1u, 0x0003003eu, 0x000007dau, 0x000007e3u, 0x000200f9u, 0x000007dcu, 0x000200f8u, 0x000007dcu, 0x000700f5u, 0x00000009u, 0x0000ad18u, 0x000007dfu, 0x000007dbu, 0x000007e3u, 0x000007e0u, 0x000200feu, 0x0000ad18u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000cau, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000c7u, 0x00030037u, 0x00000007u, 0x000000c8u, 0x00030037u, 0x000000a1u, 0x000000c9u, 0x000200f8u, 0x000000cbu, 0x0004003bu, 0x00000007u, 0x000007e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000802u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000007e8u, 0x000000c7u, 0x0000019du, 0x0004003du, 0x00000006u, 0x000007e9u, 0x000007e8u, 0x00050041u, 0x00000007u, 0x000007eau, 0x000000c7u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000007ebu, 0x000007eau, 0x00050041u, 0x00000007u, 0x000007ecu, 0x000000c9u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000007edu, 0x000007ecu, 0x00050084u, 0x00000006u, 0x000007eeu, 0x000007ebu, 0x000007edu, 0x00050080u, 0x00000006u, 0x000007efu, 0x000007e9u, 0x000007eeu, 0x0003003eu, 0x000007e7u, 0x000007efu, 0x00050041u, 0x00000007u, 0x000007f0u, 0x000000c9u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000007f1u, 0x000007f0u, 0x00050084u, 0x00000006u, 0x000007f2u, 0x000007f1u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000007f4u, 0x000007efu, 0x000007f2u, 0x0003003eu, 0x000007e7u, 0x000007f4u, 0x000500c7u, 0x00000006u, 0x000007f6u, 0x000007f4u, 0x000006b4u, 0x0003003eu, 0x000007e7u, 0x000007f6u, 0x000500c2u, 0x00000006u, 0x000007f9u, 0x000007f6u, 0x00000194u, 0x0003003eu, 0x000007f7u, 0x000007f9u, 0x0004003du, 0x00000006u, 0x000007fbu, 0x000007ecu, 0x000500c7u, 0x00000006u, 0x000007fcu, 0x000007fbu, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000007fdu, 0x000007fcu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000007ffu, 0x000007f9u, 0x000007fdu, 0x0003003eu, 0x000007f7u, 0x000007ffu, 0x000500c6u, 0x00000006u, 0x00000801u, 0x000007ffu, 0x0000032au, 0x0003003eu, 0x000007f7u, 0x00000801u, 0x0004003du, 0x00000006u, 0x00000803u, 0x000000c8u, 0x00080041u, 0x000001f2u, 0x00000805u, 0x00000796u, 0x00000185u, 0x00000803u, 0x00000185u, 0x00000801u, 0x0004003du, 0x000001adu, 0x00000806u, 0x00000805u, 0x00040071u, 0x00000006u, 0x00000807u, 0x00000806u, 0x0003003eu, 0x00000802u, 0x00000807u, 0x000500c2u, 0x00000006u, 0x00000809u, 0x00000807u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000080au, 0x00000809u, 0x000500c7u, 0x00000006u, 0x0000080cu, 0x00000807u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x0000080du, 0x0000080cu, 0x00050050u, 0x0000004du, 0x0000080eu, 0x0000080au, 0x0000080du, 0x0009004fu, 0x00000009u, 0x0000080fu, 0x0000080eu, 0x0000080eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x000200feu, 0x0000080fu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000d2u, 0x00000000u, 0x000000beu, 0x00030037u, 0x0000008au, 0x000000ccu, 0x00030037u, 0x00000007u, 0x000000cdu, 0x00030037u, 0x000000a1u, 0x000000ceu, 0x00030037u, 0x00000007u, 0x000000cfu, 0x00030037u, 0x00000007u, 0x000000d0u, 0x00030037u, 0x00000059u, 0x000000d1u, 0x000200f8u, 0x000000d3u, 0x0004003bu, 0x00000007u, 0x00000812u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000822u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000082du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000833u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000844u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000847u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000084bu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000813u, 0x000000ccu, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000814u, 0x00000813u, 0x00050041u, 0x00000007u, 0x00000815u, 0x000000ccu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000816u, 0x00000815u, 0x00050041u, 0x00000007u, 0x00000817u, 0x000000ceu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00000818u, 0x00000817u, 0x00050084u, 0x00000006u, 0x00000819u, 0x00000816u, 0x00000818u, 0x00050080u, 0x00000006u, 0x0000081au, 0x00000814u, 0x00000819u, 0x0003003eu, 0x00000812u, 0x0000081au, 0x00050041u, 0x00000007u, 0x0000081bu, 0x000000ceu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000081cu, 0x0000081bu, 0x00050084u, 0x00000006u, 0x0000081du, 0x0000081cu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000081fu, 0x0000081au, 0x0000081du, 0x0003003eu, 0x00000812u, 0x0000081fu, 0x000500c7u, 0x00000006u, 0x00000821u, 0x0000081fu, 0x00000767u, 0x0003003eu, 0x00000812u, 0x00000821u, 0x000500c2u, 0x00000006u, 0x00000824u, 0x00000821u, 0x00000194u, 0x0003003eu, 0x00000822u, 0x00000824u, 0x0004003du, 0x00000006u, 0x00000826u, 0x00000817u, 0x000500c7u, 0x00000006u, 0x00000827u, 0x00000826u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00000828u, 0x00000827u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000082au, 0x00000824u, 0x00000828u, 0x0003003eu, 0x00000822u, 0x0000082au, 0x000500c6u, 0x00000006u, 0x0000082cu, 0x0000082au, 0x0000032au, 0x0003003eu, 0x00000822u, 0x0000082cu, 0x0004003du, 0x00000006u, 0x0000082eu, 0x000000cdu, 0x00080041u, 0x000001f2u, 0x00000830u, 0x00000796u, 0x00000185u, 0x0000082eu, 0x00000185u, 0x0000082cu, 0x0004003du, 0x000001adu, 0x00000831u, 0x00000830u, 0x00040071u, 0x00000006u, 0x00000832u, 0x00000831u, 0x0003003eu, 0x0000082du, 0x00000832u, 0x000500c2u, 0x00000006u, 0x00000835u, 0x00000832u, 0x000001a3u, 0x000500c7u, 0x00000006u, 0x00000837u, 0x00000835u, 0x00000836u, 0x0004003du, 0x00000006u, 0x00000838u, 0x000000cfu, 0x00050080u, 0x00000006u, 0x00000839u, 0x00000837u, 0x00000838u, 0x0003003eu, 0x00000833u, 0x00000839u, 0x0004003du, 0x00000006u, 0x0000083au, 0x000000d0u, 0x000500c6u, 0x00000006u, 0x0000083cu, 0x00000839u, 0x0000083au, 0x0003003eu, 0x00000833u, 0x0000083cu, 0x0004003du, 0x00000006u, 0x0000083du, 0x000000cdu, 0x000500c5u, 0x00000006u, 0x0000083fu, 0x00000798u, 0x0000083cu, 0x00080041u, 0x000001f2u, 0x00000840u, 0x00000796u, 0x00000185u, 0x0000083du, 0x00000185u, 0x0000083fu, 0x0004003du, 0x000001adu, 0x00000841u, 0x00000840u, 0x00040071u, 0x00000006u, 0x00000842u, 0x00000841u, 0x0003003eu, 0x0000082du, 0x00000842u, 0x0004003du, 0x00000058u, 0x00000843u, 0x000000d1u, 0x000300f7u, 0x00000846u, 0x00000000u, 0x000400fau, 0x00000843u, 0x00000845u, 0x0000084au, 0x000200f8u, 0x00000845u, 0x0003003eu, 0x00000847u, 0x00000842u, 0x00050039u, 0x00000009u, 0x00000849u, 0x0000009eu, 0x00000847u, 0x0003003eu, 0x00000844u, 0x00000849u, 0x000200f9u, 0x00000846u, 0x000200f8u, 0x0000084au, 0x0003003eu, 0x0000084bu, 0x00000842u, 0x00050039u, 0x00000009u, 0x0000084du, 0x0000009bu, 0x0000084bu, 0x0003003eu, 0x00000844u, 0x0000084du, 0x000200f9u, 0x00000846u, 0x000200f8u, 0x00000846u, 0x000700f5u, 0x00000009u, 0x0000ad19u, 0x00000849u, 0x00000845u, 0x0000084du, 0x0000084au, 0x000200feu, 0x0000ad19u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000d7u, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000d4u, 0x00030037u, 0x00000007u, 0x000000d5u, 0x00030037u, 0x000000a1u, 0x000000d6u, 0x000200f8u, 0x000000d8u, 0x0004003bu, 0x00000007u, 0x00000851u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000860u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000086au, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000852u, 0x000000d4u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000853u, 0x00000852u, 0x00050041u, 0x00000007u, 0x00000854u, 0x000000d4u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000855u, 0x00000854u, 0x00050041u, 0x00000007u, 0x00000856u, 0x000000d6u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00000857u, 0x00000856u, 0x00050084u, 0x00000006u, 0x00000858u, 0x00000855u, 0x00000857u, 0x00050080u, 0x00000006u, 0x00000859u, 0x00000853u, 0x00000858u, 0x0003003eu, 0x00000851u, 0x00000859u, 0x00050041u, 0x00000007u, 0x0000085au, 0x000000d6u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000085bu, 0x0000085au, 0x00050080u, 0x00000006u, 0x0000085du, 0x00000859u, 0x0000085bu, 0x0003003eu, 0x00000851u, 0x0000085du, 0x000500c7u, 0x00000006u, 0x0000085fu, 0x0000085du, 0x000006b4u, 0x0003003eu, 0x00000851u, 0x0000085fu, 0x0003003eu, 0x00000860u, 0x0000085fu, 0x0004003du, 0x00000006u, 0x00000863u, 0x00000856u, 0x000500c7u, 0x00000006u, 0x00000864u, 0x00000863u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00000865u, 0x00000864u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x00000867u, 0x0000085fu, 0x00000865u, 0x0003003eu, 0x00000860u, 0x00000867u, 0x000500c6u, 0x00000006u, 0x00000869u, 0x00000867u, 0x00000331u, 0x0003003eu, 0x00000860u, 0x00000869u, 0x0004003du, 0x00000006u, 0x0000086bu, 0x000000d5u, 0x00080041u, 0x000001f9u, 0x0000086du, 0x000006cfu, 0x00000185u, 0x0000086bu, 0x00000185u, 0x00000869u, 0x0004003du, 0x000001abu, 0x0000086eu, 0x0000086du, 0x00040071u, 0x00000006u, 0x0000086fu, 0x0000086eu, 0x0003003eu, 0x0000086au, 0x0000086fu, 0x0004007cu, 0x00000008u, 0x00000871u, 0x0000086fu, 0x00070050u, 0x00000009u, 0x00000872u, 0x00000871u, 0x00000871u, 0x00000871u, 0x00000871u, 0x000200feu, 0x00000872u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000dcu, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000d9u, 0x00030037u, 0x00000007u, 0x000000dau, 0x00030037u, 0x000000a1u, 0x000000dbu, 0x000200f8u, 0x000000ddu, 0x0004003bu, 0x00000007u, 0x00000875u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000884u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000088eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000894u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000897u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000876u, 0x000000d9u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000877u, 0x00000876u, 0x00050041u, 0x00000007u, 0x00000878u, 0x000000d9u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000879u, 0x00000878u, 0x00050041u, 0x00000007u, 0x0000087au, 0x000000dbu, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000087bu, 0x0000087au, 0x00050084u, 0x00000006u, 0x0000087cu, 0x00000879u, 0x0000087bu, 0x00050080u, 0x00000006u, 0x0000087du, 0x00000877u, 0x0000087cu, 0x0003003eu, 0x00000875u, 0x0000087du, 0x00050041u, 0x00000007u, 0x0000087eu, 0x000000dbu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000087fu, 0x0000087eu, 0x00050080u, 0x00000006u, 0x00000881u, 0x0000087du, 0x0000087fu, 0x0003003eu, 0x00000875u, 0x00000881u, 0x000500c7u, 0x00000006u, 0x00000883u, 0x00000881u, 0x000006b4u, 0x0003003eu, 0x00000875u, 0x00000883u, 0x0003003eu, 0x00000884u, 0x00000883u, 0x0004003du, 0x00000006u, 0x00000887u, 0x0000087au, 0x000500c7u, 0x00000006u, 0x00000888u, 0x00000887u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00000889u, 0x00000888u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x0000088bu, 0x00000883u, 0x00000889u, 0x0003003eu, 0x00000884u, 0x0000088bu, 0x000500c6u, 0x00000006u, 0x0000088du, 0x0000088bu, 0x00000331u, 0x0003003eu, 0x00000884u, 0x0000088du, 0x0004003du, 0x00000006u, 0x0000088fu, 0x000000dau, 0x00080041u, 0x000001f9u, 0x00000891u, 0x000006cfu, 0x00000185u, 0x0000088fu, 0x00000185u, 0x0000088du, 0x0004003du, 0x000001abu, 0x00000892u, 0x00000891u, 0x00040071u, 0x00000006u, 0x00000893u, 0x00000892u, 0x0003003eu, 0x0000088eu, 0x00000893u, 0x000500c2u, 0x00000006u, 0x00000896u, 0x00000893u, 0x0000019du, 0x0003003eu, 0x00000894u, 0x00000896u, 0x000500c7u, 0x00000006u, 0x00000899u, 0x00000893u, 0x000006d8u, 0x0003003eu, 0x00000897u, 0x00000899u, 0x000500c4u, 0x00000006u, 0x0000089bu, 0x00000899u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x0000089du, 0x00000899u, 0x0000089bu, 0x0003003eu, 0x00000897u, 0x0000089du, 0x000500c4u, 0x00000006u, 0x0000089fu, 0x00000896u, 0x0000019du, 0x000500c5u, 0x00000006u, 0x000008a1u, 0x00000896u, 0x0000089fu, 0x0003003eu, 0x00000894u, 0x000008a1u, 0x0004007cu, 0x00000008u, 0x000008a3u, 0x000008a1u, 0x0004007cu, 0x00000008u, 0x000008a9u, 0x0000089du, 0x00070050u, 0x00000009u, 0x000008aau, 0x000008a3u, 0x000008a3u, 0x000008a3u, 0x000008a9u, 0x000200feu, 0x000008aau, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000e2u, 0x00000000u, 0x000000adu, 0x00030037u, 0x0000008au, 0x000000deu, 0x00030037u, 0x00000007u, 0x000000dfu, 0x00030037u, 0x000000a1u, 0x000000e0u, 0x00030037u, 0x00000007u, 0x000000e1u, 0x000200f8u, 0x000000e3u, 0x0004003bu, 0x00000007u, 0x000008adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008ceu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000008d9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000008e1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000008e8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000008ecu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008aeu, 0x000000deu, 0x0000019du, 0x0004003du, 0x00000006u, 0x000008afu, 0x000008aeu, 0x00050041u, 0x00000007u, 0x000008b0u, 0x000000deu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000008b1u, 0x000008b0u, 0x00050041u, 0x00000007u, 0x000008b2u, 0x000000e0u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000008b3u, 0x000008b2u, 0x00050084u, 0x00000006u, 0x000008b4u, 0x000008b1u, 0x000008b3u, 0x00050080u, 0x00000006u, 0x000008b5u, 0x000008afu, 0x000008b4u, 0x0003003eu, 0x000008adu, 0x000008b5u, 0x00050041u, 0x00000007u, 0x000008b8u, 0x000000e0u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000008b9u, 0x000008b8u, 0x00050080u, 0x00000006u, 0x000008bau, 0x000008b5u, 0x000008b9u, 0x0003003eu, 0x000008b6u, 0x000008bau, 0x000500c7u, 0x00000006u, 0x000008bcu, 0x000008bau, 0x00000767u, 0x0003003eu, 0x000008b6u, 0x000008bcu, 0x0004003du, 0x00000006u, 0x000008bfu, 0x000000e1u, 0x00050084u, 0x00000006u, 0x000008c0u, 0x000008bfu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x000008c1u, 0x000008b5u, 0x000008c0u, 0x0003003eu, 0x000008bdu, 0x000008c1u, 0x000500c7u, 0x00000006u, 0x000008c3u, 0x000008c1u, 0x00000767u, 0x0003003eu, 0x000008bdu, 0x000008c3u, 0x0003003eu, 0x000008c4u, 0x000008bcu, 0x0004003du, 0x00000006u, 0x000008c7u, 0x000008b2u, 0x000500c7u, 0x00000006u, 0x000008c8u, 0x000008c7u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000008c9u, 0x000008c8u, 0x00000197u, 0x000500c6u, 0x00000006u, 0x000008cbu, 0x000008bcu, 0x000008c9u, 0x0003003eu, 0x000008c4u, 0x000008cbu, 0x000500c6u, 0x00000006u, 0x000008cdu, 0x000008cbu, 0x00000331u, 0x0003003eu, 0x000008c4u, 0x000008cdu, 0x000500c2u, 0x00000006u, 0x000008d0u, 0x000008c3u, 0x00000194u, 0x0003003eu, 0x000008ceu, 0x000008d0u, 0x0004003du, 0x00000006u, 0x000008d2u, 0x000008b2u, 0x000500c7u, 0x00000006u, 0x000008d3u, 0x000008d2u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x000008d4u, 0x000008d3u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x000008d6u, 0x000008d0u, 0x000008d4u, 0x0003003eu, 0x000008ceu, 0x000008d6u, 0x000500c6u, 0x00000006u, 0x000008d8u, 0x000008d6u, 0x0000032au, 0x0003003eu, 0x000008ceu, 0x000008d8u, 0x0004003du, 0x00000006u, 0x000008dau, 0x000000dfu, 0x000500c5u, 0x00000006u, 0x000008dcu, 0x000008cdu, 0x00000790u, 0x00080041u, 0x000001f9u, 0x000008ddu, 0x000006cfu, 0x00000185u, 0x000008dau, 0x00000185u, 0x000008dcu, 0x0004003du, 0x000001abu, 0x000008deu, 0x000008ddu, 0x00040071u, 0x00000006u, 0x000008dfu, 0x000008deu, 0x0004007cu, 0x00000008u, 0x000008e0u, 0x000008dfu, 0x0003003eu, 0x000008d9u, 0x000008e0u, 0x0004003du, 0x00000006u, 0x000008e2u, 0x000000dfu, 0x00080041u, 0x000001f2u, 0x000008e4u, 0x00000796u, 0x00000185u, 0x000008e2u, 0x00000185u, 0x000008d8u, 0x0004003du, 0x000001adu, 0x000008e5u, 0x000008e4u, 0x00040071u, 0x00000006u, 0x000008e6u, 0x000008e5u, 0x0004007cu, 0x00000008u, 0x000008e7u, 0x000008e6u, 0x0003003eu, 0x000008e1u, 0x000008e7u, 0x000500c3u, 0x00000008u, 0x000008eau, 0x000008e7u, 0x000001e0u, 0x000500c7u, 0x00000008u, 0x000008ebu, 0x000008eau, 0x000002eeu, 0x0003003eu, 0x000008e8u, 0x000008ebu, 0x000500c3u, 0x00000008u, 0x000008eeu, 0x000008e7u, 0x00000185u, 0x000500c7u, 0x00000008u, 0x000008efu, 0x000008eeu, 0x000002eeu, 0x0003003eu, 0x000008ecu, 0x000008efu, 0x00050082u, 0x00000008u, 0x000008f1u, 0x000008ebu, 0x00000323u, 0x00050082u, 0x00000008u, 0x000008f3u, 0x000008efu, 0x00000323u, 0x00070050u, 0x00000009u, 0x000008f6u, 0x000008f1u, 0x000008f3u, 0x000008e0u, 0x000008e0u, 0x000200feu, 0x000008f6u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000e7u, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000e4u, 0x00030037u, 0x00000007u, 0x000000e5u, 0x00030037u, 0x000000a1u, 0x000000e6u, 0x000200f8u, 0x000000e8u, 0x0004003bu, 0x00000007u, 0x000008f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000909u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000914u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091au, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008fau, 0x000000e4u, 0x0000019du, 0x0004003du, 0x00000006u, 0x000008fbu, 0x000008fau, 0x00050041u, 0x00000007u, 0x000008fcu, 0x000000e4u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000008fdu, 0x000008fcu, 0x00050041u, 0x00000007u, 0x000008feu, 0x000000e6u, 0x0000032au, 0x0004003du, 0x00000006u, 0x000008ffu, 0x000008feu, 0x00050084u, 0x00000006u, 0x00000900u, 0x000008fdu, 0x000008ffu, 0x00050080u, 0x00000006u, 0x00000901u, 0x000008fbu, 0x00000900u, 0x0003003eu, 0x000008f9u, 0x00000901u, 0x00050041u, 0x00000007u, 0x00000902u, 0x000000e6u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000903u, 0x00000902u, 0x00050084u, 0x00000006u, 0x00000904u, 0x00000903u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00000906u, 0x00000901u, 0x00000904u, 0x0003003eu, 0x000008f9u, 0x00000906u, 0x000500c7u, 0x00000006u, 0x00000908u, 0x00000906u, 0x000006b4u, 0x0003003eu, 0x000008f9u, 0x00000908u, 0x000500c2u, 0x00000006u, 0x0000090bu, 0x00000908u, 0x00000194u, 0x0003003eu, 0x00000909u, 0x0000090bu, 0x0004003du, 0x00000006u, 0x0000090du, 0x000008feu, 0x000500c7u, 0x00000006u, 0x0000090eu, 0x0000090du, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000090fu, 0x0000090eu, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00000911u, 0x0000090bu, 0x0000090fu, 0x0003003eu, 0x00000909u, 0x00000911u, 0x000500c6u, 0x00000006u, 0x00000913u, 0x00000911u, 0x0000032au, 0x0003003eu, 0x00000909u, 0x00000913u, 0x0004003du, 0x00000006u, 0x00000915u, 0x000000e5u, 0x00080041u, 0x000001f2u, 0x00000917u, 0x00000796u, 0x00000185u, 0x00000915u, 0x00000185u, 0x00000913u, 0x0004003du, 0x000001adu, 0x00000918u, 0x00000917u, 0x00040071u, 0x00000006u, 0x00000919u, 0x00000918u, 0x0003003eu, 0x00000914u, 0x00000919u, 0x0003003eu, 0x0000091au, 0x00000919u, 0x00050039u, 0x00000009u, 0x0000091cu, 0x0000009bu, 0x0000091au, 0x000200feu, 0x0000091cu, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000ecu, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000e9u, 0x00030037u, 0x00000007u, 0x000000eau, 0x00030037u, 0x000000a1u, 0x000000ebu, 0x000200f8u, 0x000000edu, 0x0004003bu, 0x00000007u, 0x0000091fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000092fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000093au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000940u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000920u, 0x000000e9u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000921u, 0x00000920u, 0x00050041u, 0x00000007u, 0x00000922u, 0x000000e9u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000923u, 0x00000922u, 0x00050041u, 0x00000007u, 0x00000924u, 0x000000ebu, 0x0000032au, 0x0004003du, 0x00000006u, 0x00000925u, 0x00000924u, 0x00050084u, 0x00000006u, 0x00000926u, 0x00000923u, 0x00000925u, 0x00050080u, 0x00000006u, 0x00000927u, 0x00000921u, 0x00000926u, 0x0003003eu, 0x0000091fu, 0x00000927u, 0x00050041u, 0x00000007u, 0x00000928u, 0x000000ebu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000929u, 0x00000928u, 0x00050084u, 0x00000006u, 0x0000092au, 0x00000929u, 0x0000032eu, 0x00050080u, 0x00000006u, 0x0000092cu, 0x00000927u, 0x0000092au, 0x0003003eu, 0x0000091fu, 0x0000092cu, 0x000500c7u, 0x00000006u, 0x0000092eu, 0x0000092cu, 0x000006b4u, 0x0003003eu, 0x0000091fu, 0x0000092eu, 0x000500c2u, 0x00000006u, 0x00000931u, 0x0000092eu, 0x00000194u, 0x0003003eu, 0x0000092fu, 0x00000931u, 0x0004003du, 0x00000006u, 0x00000933u, 0x00000924u, 0x000500c7u, 0x00000006u, 0x00000934u, 0x00000933u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x00000935u, 0x00000934u, 0x00000194u, 0x000500c6u, 0x00000006u, 0x00000937u, 0x00000931u, 0x00000935u, 0x0003003eu, 0x0000092fu, 0x00000937u, 0x000500c6u, 0x00000006u, 0x00000939u, 0x00000937u, 0x0000032au, 0x0003003eu, 0x0000092fu, 0x00000939u, 0x0004003du, 0x00000006u, 0x0000093bu, 0x000000eau, 0x00080041u, 0x000001f2u, 0x0000093du, 0x00000796u, 0x00000185u, 0x0000093bu, 0x00000185u, 0x00000939u, 0x0004003du, 0x000001adu, 0x0000093eu, 0x0000093du, 0x00040071u, 0x00000006u, 0x0000093fu, 0x0000093eu, 0x0003003eu, 0x0000093au, 0x0000093fu, 0x0003003eu, 0x00000940u, 0x0000093fu, 0x00050039u, 0x00000009u, 0x00000942u, 0x0000009eu, 0x00000940u, 0x000200feu, 0x00000942u, 0x00010038u, 0x00050036u, 0x00000009u, 0x000000f1u, 0x00000000u, 0x000000a2u, 0x00030037u, 0x0000008au, 0x000000eeu, 0x00030037u, 0x00000007u, 0x000000efu, 0x00030037u, 0x000000a1u, 0x000000f0u, 0x000200f8u, 0x000000f2u, 0x0004003bu, 0x00000007u, 0x00000945u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000955u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000960u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000966u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000946u, 0x000000eeu, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000947u, 0x00000946u, 0x00050041u, 0x00000007u, 0x00000948u, 0x000000eeu, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000949u, 0x00000948u, 0x00050041u, 0x00000007u, 0x0000094au, 0x000000f0u, 0x0000032au, 0x0004003du, 0x00000006u, 0x0000094bu, 0x0000094au, 0x00050084u, 0x00000006u, 0x0000094cu, 0x00000949u, 0x0000094bu, 0x00050080u, 0x00000006u, 0x0000094du, 0x00000947u, 0x0000094cu, 0x0003003eu, 0x00000945u, 0x0000094du, 0x00050041u, 0x00000007u, 0x0000094eu, 0x000000f0u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x0000094fu, 0x0000094eu, 0x00050084u, 0x00000006u, 0x00000950u, 0x0000094fu, 0x0000032eu, 0x00050080u, 0x00000006u, 0x00000952u, 0x0000094du, 0x00000950u, 0x0003003eu, 0x00000945u, 0x00000952u, 0x000500c7u, 0x00000006u, 0x00000954u, 0x00000952u, 0x00000767u, 0x0003003eu, 0x00000945u, 0x00000954u, 0x000500c2u, 0x00000006u, 0x00000957u, 0x00000954u, 0x00000194u, 0x0003003eu, 0x00000955u, 0x00000957u, 0x0004003du, 0x00000006u, 0x00000959u, 0x0000094au, 0x000500c7u, 0x00000006u, 0x0000095au, 0x00000959u, 0x0000032au, 0x000500c4u, 0x00000006u, 0x0000095bu, 0x0000095au, 0x00000194u, 0x000500c6u, 0x00000006u, 0x0000095du, 0x00000957u, 0x0000095bu, 0x0003003eu, 0x00000955u, 0x0000095du, 0x000500c6u, 0x00000006u, 0x0000095fu, 0x0000095du, 0x0000032au, 0x0003003eu, 0x00000955u, 0x0000095fu, 0x0004003du, 0x00000006u, 0x00000961u, 0x000000efu, 0x00080041u, 0x000001f2u, 0x00000963u, 0x00000796u, 0x00000185u, 0x00000961u, 0x00000185u, 0x0000095fu, 0x0004003du, 0x000001adu, 0x00000964u, 0x00000963u, 0x00040071u, 0x00000006u, 0x00000965u, 0x00000964u, 0x0003003eu, 0x00000960u, 0x00000965u, 0x0004003du, 0x00000006u, 0x00000967u, 0x000000efu, 0x000500c5u, 0x00000006u, 0x00000969u, 0x0000095fu, 0x00000798u, 0x00080041u, 0x000001f2u, 0x0000096au, 0x00000796u, 0x00000185u, 0x00000967u, 0x00000185u, 0x00000969u, 0x0004003du, 0x000001adu, 0x0000096bu, 0x0000096au, 0x00040071u, 0x00000006u, 0x0000096cu, 0x0000096bu, 0x0003003eu, 0x00000966u, 0x0000096cu, 0x000500c2u, 0x00000006u, 0x0000096eu, 0x00000965u, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x0000096fu, 0x0000096eu, 0x000500c7u, 0x00000006u, 0x00000971u, 0x00000965u, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00000972u, 0x00000971u, 0x000500c2u, 0x00000006u, 0x00000974u, 0x0000096cu, 0x000001e0u, 0x0004007cu, 0x00000008u, 0x00000975u, 0x00000974u, 0x000500c7u, 0x00000006u, 0x00000977u, 0x0000096cu, 0x00000689u, 0x0004007cu, 0x00000008u, 0x00000978u, 0x00000977u, 0x00070050u, 0x00000009u, 0x00000979u, 0x0000096fu, 0x00000972u, 0x00000975u, 0x00000978u, 0x000200feu, 0x00000979u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000f9u, 0x00000000u, 0x000000f3u, 0x00030037u, 0x00000059u, 0x000000f4u, 0x00030037u, 0x00000038u, 0x000000f5u, 0x00030037u, 0x00000038u, 0x000000f6u, 0x00030037u, 0x00000038u, 0x000000f7u, 0x00030037u, 0x00000038u, 0x000000f8u, 0x000200f8u, 0x000000fau, 0x0004003bu, 0x00000059u, 0x0000098fu, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000097cu, 0x000000f5u, 0x0008000cu, 0x00000008u, 0x0000097du, 0x00000001u, 0x0000002du, 0x0000097cu, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x000000f5u, 0x0000097du, 0x0004003du, 0x00000008u, 0x0000097eu, 0x000000f8u, 0x000500b1u, 0x00000058u, 0x0000097fu, 0x0000097eu, 0x000001f1u, 0x000300f7u, 0x00000981u, 0x00000000u, 0x000400fau, 0x0000097fu, 0x00000980u, 0x00000985u, 0x000200f8u, 0x00000980u, 0x0004003du, 0x00000008u, 0x00000982u, 0x000000f8u, 0x0004003du, 0x00000008u, 0x00000983u, 0x000000f5u, 0x000500c3u, 0x00000008u, 0x00000984u, 0x00000983u, 0x00000982u, 0x0003003eu, 0x000000f5u, 0x00000984u, 0x000200f9u, 0x00000981u, 0x000200f8u, 0x00000985u, 0x0004003du, 0x00000008u, 0x00000986u, 0x000000f8u, 0x00050082u, 0x00000008u, 0x00000987u, 0x000002e0u, 0x00000986u, 0x0004003du, 0x00000008u, 0x00000988u, 0x000000f5u, 0x000500c4u, 0x00000008u, 0x00000989u, 0x00000988u, 0x00000987u, 0x0003003eu, 0x000000f5u, 0x00000989u, 0x0004003du, 0x00000008u, 0x0000098au, 0x000000f5u, 0x000500c3u, 0x00000008u, 0x0000098bu, 0x0000098au, 0x00000321u, 0x0003003eu, 0x000000f5u, 0x0000098bu, 0x000200f9u, 0x00000981u, 0x000200f8u, 0x00000981u, 0x0004003du, 0x00000058u, 0x0000098cu, 0x000000f4u, 0x000300f7u, 0x0000098eu, 0x00000000u, 0x000400fau, 0x0000098cu, 0x0000098du, 0x000009a5u, 0x000200f8u, 0x0000098du, 0x0004003du, 0x00000008u, 0x00000990u, 0x000000f5u, 0x000500c3u, 0x00000008u, 0x00000991u, 0x00000990u, 0x0000019au, 0x0004003du, 0x00000008u, 0x00000992u, 0x000000f7u, 0x000500afu, 0x00000058u, 0x00000993u, 0x00000991u, 0x00000992u, 0x0003003eu, 0x0000098fu, 0x00000993u, 0x000300f7u, 0x00000996u, 0x00000000u, 0x000400fau, 0x00000993u, 0x00000995u, 0x0000099fu, 0x000200f8u, 0x00000995u, 0x0004003du, 0x00000008u, 0x00000997u, 0x000000f7u, 0x000500c3u, 0x00000008u, 0x00000998u, 0x00000997u, 0x00000197u, 0x0004003du, 0x00000008u, 0x00000999u, 0x000000f6u, 0x000500c3u, 0x00000008u, 0x0000099au, 0x00000999u, 0x00000197u, 0x00050082u, 0x00000008u, 0x0000099bu, 0x00000998u, 0x0000099au, 0x000500c7u, 0x00000008u, 0x0000099du, 0x0000099bu, 0x0000099cu, 0x000500c4u, 0x00000008u, 0x0000099eu, 0x0000099du, 0x000001a0u, 0x0003003eu, 0x000000f5u, 0x0000099eu, 0x000200f9u, 0x00000996u, 0x000200f8u, 0x0000099fu, 0x0004003du, 0x00000008u, 0x000009a0u, 0x000000f5u, 0x0004003du, 0x00000008u, 0x000009a1u, 0x000000f6u, 0x000500c4u, 0x00000008u, 0x000009a2u, 0x000009a1u, 0x0000019au, 0x00050082u, 0x00000008u, 0x000009a3u, 0x000009a0u, 0x000009a2u, 0x0007000cu, 0x00000008u, 0x000009a4u, 0x00000001u, 0x0000002au, 0x000009a3u, 0x00000185u, 0x0003003eu, 0x000000f5u, 0x000009a4u, 0x000200f9u, 0x00000996u, 0x000200f8u, 0x00000996u, 0x000200f9u, 0x0000098eu, 0x000200f8u, 0x000009a5u, 0x0004003du, 0x00000008u, 0x000009a6u, 0x000000f6u, 0x000500c4u, 0x00000008u, 0x000009a7u, 0x000009a6u, 0x0000019au, 0x0004003du, 0x00000008u, 0x000009a8u, 0x000000f5u, 0x00050082u, 0x00000008u, 0x000009a9u, 0x000009a8u, 0x000009a7u, 0x0003003eu, 0x000000f5u, 0x000009a9u, 0x000200f9u, 0x0000098eu, 0x000200f8u, 0x0000098eu, 0x0004003du, 0x00000008u, 0x000009aau, 0x000000f5u, 0x000200feu, 0x000009aau, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000ffu, 0x00000000u, 0x000000fbu, 0x00030037u, 0x00000038u, 0x000000fcu, 0x00030037u, 0x00000038u, 0x000000fdu, 0x00030037u, 0x00000038u, 0x000000feu, 0x000200f8u, 0x00000100u, 0x0004003du, 0x00000008u, 0x000009adu, 0x000000fcu, 0x0008000cu, 0x00000008u, 0x000009aeu, 0x00000001u, 0x0000002du, 0x000009adu, 0x000004a2u, 0x0000045cu, 0x0003003eu, 0x000000fcu, 0x000009aeu, 0x0004003du, 0x00000008u, 0x000009afu, 0x000000feu, 0x000500b1u, 0x00000058u, 0x000009b0u, 0x000009afu, 0x000001f1u, 0x000300f7u, 0x000009b2u, 0x00000000u, 0x000400fau, 0x000009b0u, 0x000009b1u, 0x000009b6u, 0x000200f8u, 0x000009b1u, 0x0004003du, 0x00000008u, 0x000009b3u, 0x000000feu, 0x0004003du, 0x00000008u, 0x000009b4u, 0x000000fcu, 0x000500c3u, 0x00000008u, 0x000009b5u, 0x000009b4u, 0x000009b3u, 0x0003003eu, 0x000000fcu, 0x000009b5u, 0x000200f9u, 0x000009b2u, 0x000200f8u, 0x000009b6u, 0x0004003du, 0x00000008u, 0x000009b7u, 0x000000feu, 0x00050082u, 0x00000008u, 0x000009b8u, 0x000002e0u, 0x000009b7u, 0x0004003du, 0x00000008u, 0x000009b9u, 0x000000fcu, 0x000500c4u, 0x00000008u, 0x000009bau, 0x000009b9u, 0x000009b8u, 0x0003003eu, 0x000000fcu, 0x000009bau, 0x0004003du, 0x00000008u, 0x000009bbu, 0x000000fcu, 0x000500c3u, 0x00000008u, 0x000009bcu, 0x000009bbu, 0x00000321u, 0x0003003eu, 0x000000fcu, 0x000009bcu, 0x000200f9u, 0x000009b2u, 0x000200f8u, 0x000009b2u, 0x0004003du, 0x00000008u, 0x000009bdu, 0x000000fdu, 0x000500c4u, 0x00000008u, 0x000009beu, 0x000009bdu, 0x0000019au, 0x0004003du, 0x00000008u, 0x000009bfu, 0x000000fcu, 0x00050082u, 0x00000008u, 0x000009c0u, 0x000009bfu, 0x000009beu, 0x0003003eu, 0x000000fcu, 0x000009c0u, 0x0004003du, 0x00000008u, 0x000009c1u, 0x000000fcu, 0x000200feu, 0x000009c1u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000108u, 0x00000000u, 0x00000101u, 0x00030037u, 0x0000008au, 0x00000102u, 0x00030037u, 0x00000007u, 0x00000103u, 0x00030037u, 0x00000068u, 0x00000104u, 0x00030037u, 0x00000038u, 0x00000105u, 0x00030037u, 0x00000059u, 0x00000106u, 0x00030037u, 0x00000059u, 0x00000107u, 0x000200f8u, 0x00000109u, 0x0004003bu, 0x00000059u, 0x000009c4u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000009c7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000009d2u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000009d6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000009dau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000009e9u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x000009eau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000009ecu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000009f0u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x000009f1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000009f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009f7u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000a00u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000a14u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a1du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a26u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a6bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a76u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000a77u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a79u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a7du, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000a7eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000a80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a9cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x000009c5u, 0x00000105u, 0x000500b1u, 0x00000058u, 0x000009c6u, 0x000009c5u, 0x00000197u, 0x0003003eu, 0x000009c4u, 0x000009c6u, 0x000300f7u, 0x000009cau, 0x00000000u, 0x000400fau, 0x000009c6u, 0x000009c9u, 0x000009cau, 0x000200f8u, 0x000009c9u, 0x00050041u, 0x00000038u, 0x000009cbu, 0x00000102u, 0x000001a6u, 0x0004003du, 0x00000008u, 0x000009ccu, 0x000009cbu, 0x000500abu, 0x00000058u, 0x000009cdu, 0x000009ccu, 0x00000197u, 0x000200f9u, 0x000009cau, 0x000200f8u, 0x000009cau, 0x000700f5u, 0x00000058u, 0x000009ceu, 0x000009c6u, 0x00000109u, 0x000009cdu, 0x000009c9u, 0x0004003du, 0x00000058u, 0x000009cfu, 0x00000106u, 0x000400a8u, 0x00000058u, 0x000009d0u, 0x000009cfu, 0x000500a7u, 0x00000058u, 0x000009d1u, 0x000009ceu, 0x000009d0u, 0x0003003eu, 0x000009c7u, 0x000009d1u, 0x00050041u, 0x00000038u, 0x000009d3u, 0x00000102u, 0x000001a6u, 0x0004003du, 0x00000008u, 0x000009d4u, 0x000009d3u, 0x0007000cu, 0x00000008u, 0x000009d5u, 0x00000001u, 0x00000027u, 0x000009d4u, 0x00000197u, 0x0003003eu, 0x000009d2u, 0x000009d5u, 0x0004003du, 0x00000008u, 0x000009d8u, 0x000009d3u, 0x000500aau, 0x00000058u, 0x000009d9u, 0x000009d8u, 0x0000019au, 0x0003003eu, 0x000009d6u, 0x000009d9u, 0x0004003du, 0x00000058u, 0x000009dcu, 0x00000106u, 0x000500a6u, 0x00000058u, 0x000009ddu, 0x000009d9u, 0x000009dcu, 0x000600a9u, 0x00000008u, 0x000009dfu, 0x000009ddu, 0x0000099cu, 0x000009deu, 0x0003003eu, 0x000009dau, 0x000009dfu, 0x000300f7u, 0x000009e2u, 0x00000000u, 0x000400fau, 0x000009d1u, 0x000009e1u, 0x00000a70u, 0x000200f8u, 0x000009e1u, 0x0004003du, 0x00000008u, 0x000009e3u, 0x00000105u, 0x00050084u, 0x00000008u, 0x000009e4u, 0x00000197u, 0x000009e3u, 0x00050041u, 0x00000038u, 0x000009e5u, 0x00000104u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000009e6u, 0x000009e5u, 0x00050080u, 0x00000008u, 0x000009e7u, 0x000009e6u, 0x000009e4u, 0x0003003eu, 0x000009e5u, 0x000009e7u, 0x0004003du, 0x00000023u, 0x000009ebu, 0x00000102u, 0x0003003eu, 0x000009eau, 0x000009ebu, 0x0004003du, 0x00000008u, 0x000009eeu, 0x000009e5u, 0x0003003eu, 0x000009ecu, 0x000009eeu, 0x00060039u, 0x0000004du, 0x000009efu, 0x00000093u, 0x000009eau, 0x000009ecu, 0x0003003eu, 0x000009e9u, 0x000009efu, 0x0004003du, 0x00000023u, 0x000009f2u, 0x00000102u, 0x0003003eu, 0x000009f1u, 0x000009f2u, 0x00050041u, 0x00000038u, 0x000009f4u, 0x00000104u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000009f5u, 0x000009f4u, 0x0003003eu, 0x000009f3u, 0x000009f5u, 0x00060039u, 0x00000008u, 0x000009f6u, 0x00000097u, 0x000009f1u, 0x000009f3u, 0x0003003eu, 0x000009f0u, 0x000009f6u, 0x00050041u, 0x00000007u, 0x000009f8u, 0x00000102u, 0x0000019du, 0x0004003du, 0x00000006u, 0x000009f9u, 0x000009f8u, 0x00050041u, 0x00000007u, 0x000009fau, 0x00000102u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x000009fbu, 0x000009fau, 0x0004007cu, 0x00000006u, 0x000009fdu, 0x000009f6u, 0x00050084u, 0x00000006u, 0x000009feu, 0x000009fbu, 0x000009fdu, 0x00050080u, 0x00000006u, 0x000009ffu, 0x000009f9u, 0x000009feu, 0x0003003eu, 0x000009f7u, 0x000009ffu, 0x00050084u, 0x00000006u, 0x00000a02u, 0x000009ffu, 0x0000032eu, 0x00050050u, 0x0000004du, 0x00000a05u, 0x000009d5u, 0x000009d5u, 0x000500c4u, 0x0000004du, 0x00000a06u, 0x000009efu, 0x00000a05u, 0x0004007cu, 0x000000a0u, 0x00000a07u, 0x00000a06u, 0x00050050u, 0x000000a0u, 0x00000a08u, 0x00000a02u, 0x00000a02u, 0x00050080u, 0x000000a0u, 0x00000a09u, 0x00000a08u, 0x00000a07u, 0x000500c7u, 0x000000a0u, 0x00000a0cu, 0x00000a09u, 0x0000b1beu, 0x0003003eu, 0x00000a00u, 0x00000a0cu, 0x000500c7u, 0x00000006u, 0x00000a0fu, 0x000009fdu, 0x0000032au, 0x00050084u, 0x00000006u, 0x00000a10u, 0x00000a0fu, 0x000002beu, 0x0004003du, 0x000000a0u, 0x00000a11u, 0x00000a00u, 0x00050050u, 0x000000a0u, 0x00000a12u, 0x00000a10u, 0x00000a10u, 0x000500c6u, 0x000000a0u, 0x00000a13u, 0x00000a11u, 0x00000a12u, 0x0003003eu, 0x00000a00u, 0x00000a13u, 0x0004003du, 0x000000a0u, 0x00000a15u, 0x00000a00u, 0x000500c2u, 0x000000a0u, 0x00000a17u, 0x00000a15u, 0x0000b1bfu, 0x0003003eu, 0x00000a14u, 0x00000a17u, 0x0004007cu, 0x00000006u, 0x00000a19u, 0x000009dfu, 0x0004003du, 0x000000a0u, 0x00000a1au, 0x00000a14u, 0x00050050u, 0x000000a0u, 0x00000a1bu, 0x00000a19u, 0x00000a19u, 0x000500c7u, 0x000000a0u, 0x00000a1cu, 0x00000a1au, 0x00000a1bu, 0x0003003eu, 0x00000a14u, 0x00000a1cu, 0x0004003du, 0x00000006u, 0x00000a1eu, 0x00000103u, 0x00050041u, 0x00000007u, 0x00000a1fu, 0x00000a14u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000a20u, 0x00000a1fu, 0x000500c6u, 0x00000006u, 0x00000a21u, 0x00000a20u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00000a22u, 0x00000796u, 0x00000185u, 0x00000a1eu, 0x00000185u, 0x00000a21u, 0x0004003du, 0x000001adu, 0x00000a23u, 0x00000a22u, 0x00040071u, 0x00000006u, 0x00000a24u, 0x00000a23u, 0x0004007cu, 0x00000008u, 0x00000a25u, 0x00000a24u, 0x0003003eu, 0x00000a1du, 0x00000a25u, 0x0004003du, 0x00000006u, 0x00000a27u, 0x00000103u, 0x00050041u, 0x00000007u, 0x00000a28u, 0x00000a14u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00000a29u, 0x00000a28u, 0x000500c6u, 0x00000006u, 0x00000a2au, 0x00000a29u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00000a2bu, 0x00000796u, 0x00000185u, 0x00000a27u, 0x00000185u, 0x00000a2au, 0x0004003du, 0x000001adu, 0x00000a2cu, 0x00000a2bu, 0x00040071u, 0x00000006u, 0x00000a2du, 0x00000a2cu, 0x0004007cu, 0x00000008u, 0x00000a2eu, 0x00000a2du, 0x0003003eu, 0x00000a26u, 0x00000a2eu, 0x0004003du, 0x00000008u, 0x00000a30u, 0x000009d3u, 0x000500aau, 0x00000058u, 0x00000a31u, 0x00000a30u, 0x00000194u, 0x000300f7u, 0x00000a33u, 0x00000000u, 0x000400fau, 0x00000a31u, 0x00000a32u, 0x00000a48u, 0x000200f8u, 0x00000a32u, 0x00050041u, 0x00000007u, 0x00000a34u, 0x00000a00u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000a35u, 0x00000a34u, 0x000500c7u, 0x00000006u, 0x00000a36u, 0x00000a35u, 0x0000032eu, 0x0004007cu, 0x00000008u, 0x00000a37u, 0x00000a36u, 0x00050084u, 0x00000008u, 0x00000a38u, 0x0000019du, 0x00000a37u, 0x00050082u, 0x00000008u, 0x00000a39u, 0x000001e0u, 0x00000a38u, 0x000500c3u, 0x00000008u, 0x00000a3bu, 0x00000a25u, 0x00000a39u, 0x0003003eu, 0x00000a1du, 0x00000a3bu, 0x00050041u, 0x00000007u, 0x00000a3cu, 0x00000a00u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00000a3du, 0x00000a3cu, 0x000500c7u, 0x00000006u, 0x00000a3eu, 0x00000a3du, 0x0000032eu, 0x0004007cu, 0x00000008u, 0x00000a3fu, 0x00000a3eu, 0x00050084u, 0x00000008u, 0x00000a40u, 0x0000019du, 0x00000a3fu, 0x00050082u, 0x00000008u, 0x00000a41u, 0x000001e0u, 0x00000a40u, 0x000500c3u, 0x00000008u, 0x00000a43u, 0x00000a2eu, 0x00000a41u, 0x0003003eu, 0x00000a26u, 0x00000a43u, 0x000500c7u, 0x00000008u, 0x00000a45u, 0x00000a3bu, 0x000002eeu, 0x0003003eu, 0x00000a1du, 0x00000a45u, 0x000500c7u, 0x00000008u, 0x00000a47u, 0x00000a43u, 0x000002eeu, 0x0003003eu, 0x00000a26u, 0x00000a47u, 0x000200f9u, 0x00000a33u, 0x000200f8u, 0x00000a48u, 0x0004003du, 0x00000008u, 0x00000a4au, 0x000009d3u, 0x000500aau, 0x00000058u, 0x00000a4bu, 0x00000a4au, 0x00000185u, 0x000300f7u, 0x00000a4du, 0x00000000u, 0x000400fau, 0x00000a4bu, 0x00000a4cu, 0x00000a66u, 0x000200f8u, 0x00000a4cu, 0x00050041u, 0x00000007u, 0x00000a4eu, 0x00000a00u, 0x000002d7u, 0x0004003du, 0x00000006u, 0x00000a4fu, 0x00000a4eu, 0x000500c7u, 0x00000006u, 0x00000a50u, 0x00000a4fu, 0x00000331u, 0x0004007cu, 0x00000008u, 0x00000a51u, 0x00000a50u, 0x00050084u, 0x00000008u, 0x00000a52u, 0x0000019du, 0x00000a51u, 0x00050082u, 0x00000008u, 0x00000a53u, 0x000001f8u, 0x00000a52u, 0x000500c3u, 0x00000008u, 0x00000a55u, 0x00000a25u, 0x00000a53u, 0x0003003eu, 0x00000a1du, 0x00000a55u, 0x00050041u, 0x00000007u, 0x00000a56u, 0x00000a00u, 0x0000032au, 0x0004003du, 0x00000006u, 0x00000a57u, 0x00000a56u, 0x000500c7u, 0x00000006u, 0x00000a58u, 0x00000a57u, 0x00000331u, 0x0004007cu, 0x00000008u, 0x00000a59u, 0x00000a58u, 0x00050084u, 0x00000008u, 0x00000a5au, 0x0000019du, 0x00000a59u, 0x00050082u, 0x00000008u, 0x00000a5bu, 0x000001f8u, 0x00000a5au, 0x000500c3u, 0x00000008u, 0x00000a5du, 0x00000a2eu, 0x00000a5bu, 0x0003003eu, 0x00000a26u, 0x00000a5du, 0x000500c7u, 0x00000008u, 0x00000a60u, 0x00000a55u, 0x00000a5fu, 0x00050084u, 0x00000008u, 0x00000a62u, 0x00000a60u, 0x00000a61u, 0x0003003eu, 0x00000a1du, 0x00000a62u, 0x000500c7u, 0x00000008u, 0x00000a64u, 0x00000a5du, 0x00000a5fu, 0x00050084u, 0x00000008u, 0x00000a65u, 0x00000a64u, 0x00000a61u, 0x0003003eu, 0x00000a26u, 0x00000a65u, 0x000200f9u, 0x00000a4du, 0x000200f8u, 0x00000a66u, 0x000500c3u, 0x00000008u, 0x00000a68u, 0x00000a25u, 0x000001e0u, 0x0003003eu, 0x00000a1du, 0x00000a68u, 0x000500c3u, 0x00000008u, 0x00000a6au, 0x00000a2eu, 0x000001e0u, 0x0003003eu, 0x00000a26u, 0x00000a6au, 0x000200f9u, 0x00000a4du, 0x000200f8u, 0x00000a4du, 0x000700f5u, 0x00000008u, 0x0000ad1eu, 0x00000a65u, 0x00000a4cu, 0x00000a6au, 0x00000a66u, 0x000700f5u, 0x00000008u, 0x0000ad1cu, 0x00000a62u, 0x00000a4cu, 0x00000a68u, 0x00000a66u, 0x000200f9u, 0x00000a33u, 0x000200f8u, 0x00000a33u, 0x000700f5u, 0x00000008u, 0x0000ad1du, 0x00000a47u, 0x00000a32u, 0x0000ad1eu, 0x00000a4du, 0x000700f5u, 0x00000008u, 0x0000ad1bu, 0x00000a45u, 0x00000a32u, 0x0000ad1cu, 0x00000a4du, 0x000500c4u, 0x00000008u, 0x00000a6du, 0x0000ad1bu, 0x000001e0u, 0x000500c5u, 0x00000008u, 0x00000a6fu, 0x00000a6du, 0x0000ad1du, 0x0003003eu, 0x00000a6bu, 0x00000a6fu, 0x000200f9u, 0x000009e2u, 0x000200f8u, 0x00000a70u, 0x0004003du, 0x00000008u, 0x00000a71u, 0x00000105u, 0x00050041u, 0x00000038u, 0x00000a72u, 0x00000104u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000a73u, 0x00000a72u, 0x00050080u, 0x00000008u, 0x00000a74u, 0x00000a73u, 0x00000a71u, 0x0003003eu, 0x00000a72u, 0x00000a74u, 0x0004003du, 0x00000023u, 0x00000a78u, 0x00000102u, 0x0003003eu, 0x00000a77u, 0x00000a78u, 0x0004003du, 0x00000008u, 0x00000a7bu, 0x00000a72u, 0x0003003eu, 0x00000a79u, 0x00000a7bu, 0x00060039u, 0x00000008u, 0x00000a7cu, 0x0000008eu, 0x00000a77u, 0x00000a79u, 0x0003003eu, 0x00000a76u, 0x00000a7cu, 0x0004003du, 0x00000023u, 0x00000a7fu, 0x00000102u, 0x0003003eu, 0x00000a7eu, 0x00000a7fu, 0x00050041u, 0x00000038u, 0x00000a81u, 0x00000104u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000a82u, 0x00000a81u, 0x0003003eu, 0x00000a80u, 0x00000a82u, 0x00060039u, 0x00000008u, 0x00000a83u, 0x00000097u, 0x00000a7eu, 0x00000a80u, 0x0003003eu, 0x00000a7du, 0x00000a83u, 0x00050041u, 0x00000007u, 0x00000a85u, 0x00000102u, 0x0000019du, 0x0004003du, 0x00000006u, 0x00000a86u, 0x00000a85u, 0x00050041u, 0x00000007u, 0x00000a87u, 0x00000102u, 0x000001a0u, 0x0004003du, 0x00000006u, 0x00000a88u, 0x00000a87u, 0x0004007cu, 0x00000006u, 0x00000a8au, 0x00000a83u, 0x00050084u, 0x00000006u, 0x00000a8bu, 0x00000a88u, 0x00000a8au, 0x00050080u, 0x00000006u, 0x00000a8cu, 0x00000a86u, 0x00000a8bu, 0x0003003eu, 0x00000a84u, 0x00000a8cu, 0x00050084u, 0x00000006u, 0x00000a8fu, 0x00000a8cu, 0x0000032eu, 0x000500c4u, 0x00000008u, 0x00000a92u, 0x00000a7cu, 0x000009d5u, 0x0004007cu, 0x00000006u, 0x00000a93u, 0x00000a92u, 0x00050080u, 0x00000006u, 0x00000a94u, 0x00000a8fu, 0x00000a93u, 0x000500c7u, 0x00000006u, 0x00000a95u, 0x00000a94u, 0x00000a0au, 0x0003003eu, 0x00000a8du, 0x00000a95u, 0x000500c7u, 0x00000006u, 0x00000a98u, 0x00000a8au, 0x0000032au, 0x00050084u, 0x00000006u, 0x00000a99u, 0x00000a98u, 0x000002beu, 0x000500c6u, 0x00000006u, 0x00000a9bu, 0x00000a95u, 0x00000a99u, 0x0003003eu, 0x00000a8du, 0x00000a9bu, 0x000500c2u, 0x00000006u, 0x00000a9eu, 0x00000a9bu, 0x0000032eu, 0x0003003eu, 0x00000a9cu, 0x00000a9eu, 0x0004007cu, 0x00000006u, 0x00000aa0u, 0x000009dfu, 0x000500c7u, 0x00000006u, 0x00000aa2u, 0x00000a9eu, 0x00000aa0u, 0x0003003eu, 0x00000a9cu, 0x00000aa2u, 0x0004003du, 0x00000006u, 0x00000aa3u, 0x00000103u, 0x000500c6u, 0x00000006u, 0x00000aa5u, 0x00000aa2u, 0x0000032au, 0x00080041u, 0x000001f2u, 0x00000aa6u, 0x00000796u, 0x00000185u, 0x00000aa3u, 0x00000185u, 0x00000aa5u, 0x0004003du, 0x000001adu, 0x00000aa7u, 0x00000aa6u, 0x00040071u, 0x00000006u, 0x00000aa8u, 0x00000aa7u, 0x0004007cu, 0x00000008u, 0x00000aa9u, 0x00000aa8u, 0x0003003eu, 0x00000a6bu, 0x00000aa9u, 0x0004003du, 0x00000058u, 0x00000aaau, 0x00000106u, 0x000300f7u, 0x00000aacu, 0x00000000u, 0x000400fau, 0x00000aaau, 0x00000aabu, 0x00000aacu, 0x000200f8u, 0x00000aabu, 0x0004003du, 0x00000008u, 0x00000aaeu, 0x000009d3u, 0x000500aau, 0x00000058u, 0x00000aafu, 0x00000aaeu, 0x00000185u, 0x000300f7u, 0x00000ab1u, 0x00000000u, 0x000400fau, 0x00000aafu, 0x00000ab0u, 0x00000ac5u, 0x000200f8u, 0x00000ab0u, 0x000500c7u, 0x00000006u, 0x00000ab4u, 0x00000a9bu, 0x00000331u, 0x00050084u, 0x00000006u, 0x00000ab5u, 0x000006bcu, 0x00000ab4u, 0x00050082u, 0x00000006u, 0x00000ab6u, 0x00000ab2u, 0x00000ab5u, 0x000500c3u, 0x00000008u, 0x00000ab8u, 0x00000aa9u, 0x00000ab6u, 0x0003003eu, 0x00000a6bu, 0x00000ab8u, 0x000500c7u, 0x00000008u, 0x00000abau, 0x00000ab8u, 0x00000a5fu, 0x0003003eu, 0x00000a6bu, 0x00000abau, 0x00050041u, 0x00000038u, 0x00000abbu, 0x00000102u, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000abcu, 0x00000abbu, 0x000500c4u, 0x00000008u, 0x00000abdu, 0x00000abcu, 0x0000019du, 0x000500c5u, 0x00000008u, 0x00000abfu, 0x00000abau, 0x00000abdu, 0x0003003eu, 0x00000a6bu, 0x00000abfu, 0x000500c4u, 0x00000008u, 0x00000ac1u, 0x00000abfu, 0x00000197u, 0x0003003eu, 0x00000a6bu, 0x00000ac1u, 0x0004003du, 0x00000008u, 0x00000ac2u, 0x00000105u, 0x00050080u, 0x00000008u, 0x00000ac4u, 0x00000ac1u, 0x00000ac2u, 0x0003003eu, 0x00000a6bu, 0x00000ac4u, 0x000200f9u, 0x00000ab1u, 0x000200f8u, 0x00000ac5u, 0x000500c7u, 0x00000006u, 0x00000ac7u, 0x00000a9bu, 0x0000032eu, 0x00050084u, 0x00000006u, 0x00000ac8u, 0x000006bcu, 0x00000ac7u, 0x00050082u, 0x00000006u, 0x00000ac9u, 0x000002beu, 0x00000ac8u, 0x000500c3u, 0x00000008u, 0x00000acbu, 0x00000aa9u, 0x00000ac9u, 0x0003003eu, 0x00000a6bu, 0x00000acbu, 0x000500c7u, 0x00000008u, 0x00000acdu, 0x00000acbu, 0x000002eeu, 0x0003003eu, 0x00000a6bu, 0x00000acdu, 0x000500c4u, 0x00000008u, 0x00000acfu, 0x00000acdu, 0x00000197u, 0x0003003eu, 0x00000a6bu, 0x00000acfu, 0x0004003du, 0x00000008u, 0x00000ad0u, 0x00000105u, 0x00050080u, 0x00000008u, 0x00000ad2u, 0x00000acfu, 0x00000ad0u, 0x0003003eu, 0x00000a6bu, 0x00000ad2u, 0x000200f9u, 0x00000ab1u, 0x000200f8u, 0x00000ab1u, 0x000700f5u, 0x00000008u, 0x0000ad1au, 0x00000ac4u, 0x00000ab0u, 0x00000ad2u, 0x00000ac5u, 0x0004003du, 0x00000006u, 0x00000ad3u, 0x00000103u, 0x000500c5u, 0x00000008u, 0x00000ad6u, 0x0000ad1au, 0x00000ad5u, 0x000500c6u, 0x00000008u, 0x00000ad7u, 0x00000ad6u, 0x00000194u, 0x00080041u, 0x000001f2u, 0x00000ad8u, 0x00000796u, 0x00000185u, 0x00000ad3u, 0x00000185u, 0x00000ad7u, 0x0004003du, 0x000001adu, 0x00000ad9u, 0x00000ad8u, 0x00040071u, 0x00000006u, 0x00000adau, 0x00000ad9u, 0x0004007cu, 0x00000008u, 0x00000adbu, 0x00000adau, 0x0003003eu, 0x00000a6bu, 0x00000adbu, 0x000200f9u, 0x00000aacu, 0x000200f8u, 0x00000aacu, 0x000700f5u, 0x00000008u, 0x0000ad20u, 0x00000aa9u, 0x00000a70u, 0x00000adbu, 0x00000ab1u, 0x000200f9u, 0x000009e2u, 0x000200f8u, 0x000009e2u, 0x000700f5u, 0x00000008u, 0x0000ad1fu, 0x00000a6fu, 0x00000a33u, 0x0000ad20u, 0x00000aacu, 0x000200feu, 0x0000ad1fu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000110u, 0x00000000u, 0x00000101u, 0x00030037u, 0x0000008au, 0x0000010au, 0x00030037u, 0x00000007u, 0x0000010bu, 0x00030037u, 0x00000068u, 0x0000010cu, 0x00030037u, 0x00000038u, 0x0000010du, 0x00030037u, 0x00000059u, 0x0000010eu, 0x00030037u, 0x00000059u, 0x0000010fu, 0x000200f8u, 0x00000111u, 0x0004003bu, 0x00000038u, 0x00000ae4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000ae7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000ae8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000af0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000af3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000af4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000affu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000b08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b0au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b0cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b0eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000b0fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000b11u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000b1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b1fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b21u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b23u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000b25u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000b27u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000adfu, 0x0000010au, 0x00000185u, 0x0004003du, 0x00000006u, 0x00000ae0u, 0x00000adfu, 0x0004007cu, 0x00000008u, 0x00000ae1u, 0x00000ae0u, 0x00050041u, 0x00000038u, 0x00000ae2u, 0x0000010au, 0x000001ecu, 0x0004003du, 0x00000008u, 0x00000ae3u, 0x00000ae2u, 0x00050041u, 0x00000038u, 0x00000ae5u, 0x0000010cu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000ae6u, 0x00000ae5u, 0x0003003eu, 0x00000ae4u, 0x00000ae6u, 0x0003003eu, 0x00000ae7u, 0x00000ae1u, 0x0003003eu, 0x00000ae8u, 0x00000ae3u, 0x00070039u, 0x00000008u, 0x00000ae9u, 0x000000ffu, 0x00000ae4u, 0x00000ae7u, 0x00000ae8u, 0x0003003eu, 0x00000ae5u, 0x00000ae9u, 0x00050041u, 0x00000007u, 0x00000aebu, 0x0000010au, 0x00000197u, 0x0004003du, 0x00000006u, 0x00000aecu, 0x00000aebu, 0x0004007cu, 0x00000008u, 0x00000aedu, 0x00000aecu, 0x00050041u, 0x00000038u, 0x00000aeeu, 0x0000010au, 0x000001f8u, 0x0004003du, 0x00000008u, 0x00000aefu, 0x00000aeeu, 0x00050041u, 0x00000038u, 0x00000af1u, 0x0000010cu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000af2u, 0x00000af1u, 0x0003003eu, 0x00000af0u, 0x00000af2u, 0x0003003eu, 0x00000af3u, 0x00000aedu, 0x0003003eu, 0x00000af4u, 0x00000aefu, 0x00070039u, 0x00000008u, 0x00000af5u, 0x000000ffu, 0x00000af0u, 0x00000af3u, 0x00000af4u, 0x0003003eu, 0x00000af1u, 0x00000af5u, 0x0004003du, 0x0000004du, 0x00000af7u, 0x0000010cu, 0x000500c3u, 0x0000004du, 0x00000af9u, 0x00000af7u, 0x0000b1bcu, 0x0003003eu, 0x0000010cu, 0x00000af9u, 0x00060041u, 0x00000528u, 0x00000afau, 0x00000527u, 0x00000185u, 0x00000197u, 0x0004003du, 0x00000008u, 0x00000afbu, 0x00000afau, 0x000500aau, 0x00000058u, 0x00000afcu, 0x00000afbu, 0x00000185u, 0x000300f7u, 0x00000afeu, 0x00000000u, 0x000400fau, 0x00000afcu, 0x00000afdu, 0x00000b00u, 0x000200f8u, 0x00000afdu, 0x0003003eu, 0x00000affu, 0x00000185u, 0x000200f9u, 0x00000afeu, 0x000200f8u, 0x00000b00u, 0x000500aau, 0x00000058u, 0x00000b03u, 0x00000afbu, 0x00000194u, 0x000300f7u, 0x00000b05u, 0x00000000u, 0x000400fau, 0x00000b03u, 0x00000b04u, 0x00000b1cu, 0x000200f8u, 0x00000b04u, 0x0004003du, 0x00000008u, 0x00000b06u, 0x0000010du, 0x000500c3u, 0x00000008u, 0x00000b07u, 0x00000b06u, 0x00000194u, 0x0004003du, 0x00000023u, 0x00000b09u, 0x0000010au, 0x0003003eu, 0x00000b08u, 0x00000b09u, 0x0004003du, 0x00000006u, 0x00000b0bu, 0x0000010bu, 0x0003003eu, 0x00000b0au, 0x00000b0bu, 0x0004003du, 0x0000004du, 0x00000b0du, 0x0000010cu, 0x0003003eu, 0x00000b0cu, 0x00000b0du, 0x0003003eu, 0x00000b0eu, 0x00000b07u, 0x0004003du, 0x00000058u, 0x00000b10u, 0x0000010eu, 0x0003003eu, 0x00000b0fu, 0x00000b10u, 0x0004003du, 0x00000058u, 0x00000b12u, 0x0000010fu, 0x0003003eu, 0x00000b11u, 0x00000b12u, 0x000a0039u, 0x00000008u, 0x00000b13u, 0x00000108u, 0x00000b08u, 0x00000b0au, 0x00000b0cu, 0x00000b0eu, 0x00000b0fu, 0x00000b11u, 0x0003003eu, 0x00000affu, 0x00000b13u, 0x0004003du, 0x00000008u, 0x00000b14u, 0x0000010du, 0x000500c7u, 0x00000008u, 0x00000b15u, 0x00000b14u, 0x00000194u, 0x00050084u, 0x00000008u, 0x00000b16u, 0x000001e0u, 0x00000b15u, 0x00050082u, 0x00000008u, 0x00000b17u, 0x000001e0u, 0x00000b16u, 0x000500c3u, 0x00000008u, 0x00000b19u, 0x00000b13u, 0x00000b17u, 0x0003003eu, 0x00000affu, 0x00000b19u, 0x000500c7u, 0x00000008u, 0x00000b1bu, 0x00000b19u, 0x000002eeu, 0x0003003eu, 0x00000affu, 0x00000b1bu, 0x000200f9u, 0x00000b05u, 0x000200f8u, 0x00000b1cu, 0x0004003du, 0x00000023u, 0x00000b1eu, 0x0000010au, 0x0003003eu, 0x00000b1du, 0x00000b1eu, 0x0004003du, 0x00000006u, 0x00000b20u, 0x0000010bu, 0x0003003eu, 0x00000b1fu, 0x00000b20u, 0x0004003du, 0x0000004du, 0x00000b22u, 0x0000010cu, 0x0003003eu, 0x00000b21u, 0x00000b22u, 0x0004003du, 0x00000008u, 0x00000b24u, 0x0000010du, 0x0003003eu, 0x00000b23u, 0x00000b24u, 0x0004003du, 0x00000058u, 0x00000b26u, 0x0000010eu, 0x0003003eu, 0x00000b25u, 0x00000b26u, 0x0004003du, 0x00000058u, 0x00000b28u, 0x0000010fu, 0x0003003eu, 0x00000b27u, 0x00000b28u, 0x000a0039u, 0x00000008u, 0x00000b29u, 0x00000108u, 0x00000b1du, 0x00000b1fu, 0x00000b21u, 0x00000b23u, 0x00000b25u, 0x00000b27u, 0x0003003eu, 0x00000affu, 0x00000b29u, 0x000200f9u, 0x00000b05u, 0x000200f8u, 0x00000b05u, 0x000700f5u, 0x00000008u, 0x0000ad22u, 0x00000b1bu, 0x00000b04u, 0x00000b29u, 0x00000b1cu, 0x000200f9u, 0x00000afeu, 0x000200f8u, 0x00000afeu, 0x000700f5u, 0x00000008u, 0x0000ad21u, 0x00000185u, 0x00000afdu, 0x0000ad22u, 0x00000b05u, 0x000200feu, 0x0000ad21u, 0x00010038u, 0x00050036u, 0x0000004du, 0x00000118u, 0x00000000u, 0x00000112u, 0x00030037u, 0x00000068u, 0x00000113u, 0x00030037u, 0x00000068u, 0x00000114u, 0x00030037u, 0x00000068u, 0x00000115u, 0x00030037u, 0x00000068u, 0x00000116u, 0x00030037u, 0x00000068u, 0x00000117u, 0x000200f8u, 0x00000119u, 0x0004003bu, 0x00000038u, 0x00000b2du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b33u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b3au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b3du, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b4au, 0x00000007u, 0x00050041u, 0x00000038u, 0x00000b2eu, 0x00000117u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000b2fu, 0x00000b2eu, 0x00050041u, 0x00000038u, 0x00000b30u, 0x00000117u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000b31u, 0x00000b30u, 0x00050080u, 0x00000008u, 0x00000b32u, 0x00000b2fu, 0x00000b31u, 0x0003003eu, 0x00000b2du, 0x00000b32u, 0x000500afu, 0x00000058u, 0x00000b35u, 0x00000b32u, 0x000002e0u, 0x0004003du, 0x0000004du, 0x00000b36u, 0x00000116u, 0x0004003du, 0x0000004du, 0x00000b37u, 0x00000113u, 0x00050050u, 0x00000489u, 0x00000b38u, 0x00000b35u, 0x00000b35u, 0x000600a9u, 0x0000004du, 0x00000b39u, 0x00000b38u, 0x00000b36u, 0x00000b37u, 0x0003003eu, 0x00000b33u, 0x00000b39u, 0x000300f7u, 0x00000b3fu, 0x00000000u, 0x000400fau, 0x00000b35u, 0x00000b3eu, 0x00000b44u, 0x000200f8u, 0x00000b3eu, 0x0004003du, 0x0000004du, 0x00000b40u, 0x00000117u, 0x0007004fu, 0x0000004du, 0x00000b41u, 0x00000b40u, 0x00000b40u, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x00000b43u, 0x0000b1c5u, 0x00000b41u, 0x0003003eu, 0x00000b3du, 0x00000b43u, 0x000200f9u, 0x00000b3fu, 0x000200f8u, 0x00000b44u, 0x0004003du, 0x0000004du, 0x00000b45u, 0x00000117u, 0x0003003eu, 0x00000b3du, 0x00000b45u, 0x000200f9u, 0x00000b3fu, 0x000200f8u, 0x00000b3fu, 0x000700f5u, 0x0000004du, 0x0000ad23u, 0x00000b43u, 0x00000b3eu, 0x00000b45u, 0x00000b44u, 0x00050051u, 0x00000008u, 0x00000b47u, 0x0000ad23u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000b48u, 0x0000ad23u, 0x00000001u, 0x0003003eu, 0x00000b3au, 0x0000ad23u, 0x0004003du, 0x0000004du, 0x00000b4bu, 0x00000114u, 0x00050082u, 0x0000004du, 0x00000b4du, 0x00000b4bu, 0x00000b39u, 0x00050041u, 0x00000038u, 0x00000b4eu, 0x00000b3au, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000b4fu, 0x00000b4eu, 0x00050050u, 0x0000004du, 0x00000b50u, 0x00000b4fu, 0x00000b4fu, 0x00050084u, 0x0000004du, 0x00000b51u, 0x00000b4du, 0x00000b50u, 0x0003003eu, 0x00000b4au, 0x00000b51u, 0x0004003du, 0x0000004du, 0x00000b52u, 0x00000115u, 0x00050082u, 0x0000004du, 0x00000b54u, 0x00000b52u, 0x00000b39u, 0x00050041u, 0x00000038u, 0x00000b55u, 0x00000b3au, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000b56u, 0x00000b55u, 0x00050050u, 0x0000004du, 0x00000b57u, 0x00000b56u, 0x00000b56u, 0x00050084u, 0x0000004du, 0x00000b58u, 0x00000b54u, 0x00000b57u, 0x00050080u, 0x0000004du, 0x00000b5au, 0x00000b51u, 0x00000b58u, 0x0003003eu, 0x00000b4au, 0x00000b5au, 0x00050080u, 0x0000004du, 0x00000b5du, 0x00000b5au, 0x00000bcfu, 0x0003003eu, 0x00000b4au, 0x00000b5du, 0x000500c3u, 0x0000004du, 0x00000b60u, 0x00000b5du, 0x0000b1bcu, 0x0003003eu, 0x00000b4au, 0x00000b60u, 0x00050080u, 0x0000004du, 0x00000b63u, 0x00000b60u, 0x00000b39u, 0x0003003eu, 0x00000b4au, 0x00000b63u, 0x000200feu, 0x00000b63u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000124u, 0x00000000u, 0x0000011au, 0x00030037u, 0x0000008au, 0x0000011bu, 0x00030037u, 0x00000007u, 0x0000011cu, 0x00030037u, 0x00000068u, 0x0000011du, 0x00030037u, 0x00000059u, 0x0000011eu, 0x00030037u, 0x00000059u, 0x0000011fu, 0x00030037u, 0x00000059u, 0x00000120u, 0x00030037u, 0x00000059u, 0x00000121u, 0x00030037u, 0x00000059u, 0x00000122u, 0x00030037u, 0x00000037u, 0x00000123u, 0x000200f8u, 0x00000125u, 0x0004003bu, 0x00000059u, 0x00000b73u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b74u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b77u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b78u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b79u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000b88u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b89u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b8cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b8du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b8eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000b94u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000b9au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000ba3u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ba4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000ba6u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000baau, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000babu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000badu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000bb1u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000bb5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000bb7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000bb9u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000bbdu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000bbfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00000bc1u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000bd9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000bddu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000be0u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000bf2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000bf5u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000bffu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c0au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c0fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c11u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000c17u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c21u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c26u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c28u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000c2bu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c35u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c3au, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c3cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000c42u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c4cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c4fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c51u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c53u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c5eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c62u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c64u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c70u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c74u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c76u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c7fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c83u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c85u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000c8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c91u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000c93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c95u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000c97u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ca0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ca2u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000ca4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ca5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ca6u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000ca8u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000cb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cb4u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000cb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cb8u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000cbau, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000cc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cc3u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000cc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cc7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000cc9u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000cd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cd5u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000cd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cd9u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00000cdbu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000cf4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cf6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000cf8u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d03u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d05u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d0du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d0fu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d1au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d1cu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d23u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d25u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d30u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d32u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d3au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d3cu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d47u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d49u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d50u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d52u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d5du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d5fu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d67u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d69u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d74u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d76u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d7du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d7fu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d8au, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d8cu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d92u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d94u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000d96u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000d9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000da1u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000da3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000da8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dacu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000db8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dbau, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000dbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dbdu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dc9u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000dcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dccu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000dd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dd5u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000dd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dd8u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ddfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000de1u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000de3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000de4u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000df3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000df5u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000df7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000df8u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e06u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e09u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e12u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e14u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e17u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e23u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e25u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e27u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e28u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e2fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e31u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e3cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e3eu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e46u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e48u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e53u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e55u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e5cu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e5eu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e67u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e69u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e6bu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e73u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e75u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e80u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e82u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e92u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000e94u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000e9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e9fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000ea1u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ea7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ea9u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000eabu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eb6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000eb8u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ebdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ebfu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000ec1u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ecau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eccu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000eceu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ed4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ed6u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000ed8u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ee1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ee3u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000ee5u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000eeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eecu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000eeeu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000ef7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ef9u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000efbu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f03u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f05u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f10u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f12u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f19u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f1bu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f26u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f28u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f30u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f32u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f3du, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f3fu, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f4eu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f50u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f5bu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f5du, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f65u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f67u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f72u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f74u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f7bu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f7du, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f88u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f8au, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f92u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000f94u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000f9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f9fu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000fa1u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000fa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa8u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000faau, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000fb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fb5u, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000fb7u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000fbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fbfu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000fc1u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00000fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fccu, 0x00000007u, 0x0004003bu, 0x000000a1u, 0x00000fceu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000fd7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000fdfu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00000fe2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00000febu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001005u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001013u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000101bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001020u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001023u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001026u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001029u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000102cu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000102eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000102fu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001032u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001035u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001038u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000103bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001057u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000105au, 0x00000007u, 0x00050041u, 0x00000038u, 0x00000b67u, 0x0000011bu, 0x000001ffu, 0x0004003du, 0x00000008u, 0x00000b68u, 0x00000b67u, 0x000500c7u, 0x00000008u, 0x00000b69u, 0x00000b68u, 0x00000194u, 0x000500abu, 0x00000058u, 0x00000b6au, 0x00000b69u, 0x00000185u, 0x00050041u, 0x00000007u, 0x00000b6bu, 0x0000011bu, 0x00000185u, 0x0004003du, 0x00000006u, 0x00000b6cu, 0x00000b6bu, 0x0004007cu, 0x00000008u, 0x00000b6du, 0x00000b6cu, 0x00050041u, 0x00000007u, 0x00000b6eu, 0x0000011bu, 0x00000194u, 0x0004003du, 0x00000006u, 0x00000b6fu, 0x00000b6eu, 0x0004007cu, 0x00000008u, 0x00000b70u, 0x00000b6fu, 0x00050041u, 0x00000038u, 0x00000b71u, 0x0000011bu, 0x000001ecu, 0x0004003du, 0x00000008u, 0x00000b72u, 0x00000b71u, 0x0003003eu, 0x00000b73u, 0x00000b6au, 0x00050041u, 0x00000038u, 0x00000b75u, 0x0000011du, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000b76u, 0x00000b75u, 0x0003003eu, 0x00000b74u, 0x00000b76u, 0x0003003eu, 0x00000b77u, 0x00000b6du, 0x0003003eu, 0x00000b78u, 0x00000b70u, 0x0003003eu, 0x00000b79u, 0x00000b72u, 0x00090039u, 0x00000008u, 0x00000b7au, 0x000000f9u, 0x00000b73u, 0x00000b74u, 0x00000b77u, 0x00000b78u, 0x00000b79u, 0x0003003eu, 0x00000b75u, 0x00000b7au, 0x0004003du, 0x00000008u, 0x00000b7du, 0x00000b67u, 0x000500c7u, 0x00000008u, 0x00000b7eu, 0x00000b7du, 0x0000019du, 0x000500abu, 0x00000058u, 0x00000b7fu, 0x00000b7eu, 0x00000185u, 0x00050041u, 0x00000007u, 0x00000b80u, 0x0000011bu, 0x00000197u, 0x0004003du, 0x00000006u, 0x00000b81u, 0x00000b80u, 0x0004007cu, 0x00000008u, 0x00000b82u, 0x00000b81u, 0x00050041u, 0x00000007u, 0x00000b83u, 0x0000011bu, 0x0000019au, 0x0004003du, 0x00000006u, 0x00000b84u, 0x00000b83u, 0x0004007cu, 0x00000008u, 0x00000b85u, 0x00000b84u, 0x00050041u, 0x00000038u, 0x00000b86u, 0x0000011bu, 0x000001f8u, 0x0004003du, 0x00000008u, 0x00000b87u, 0x00000b86u, 0x0003003eu, 0x00000b88u, 0x00000b7fu, 0x00050041u, 0x00000038u, 0x00000b8au, 0x0000011du, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000b8bu, 0x00000b8au, 0x0003003eu, 0x00000b89u, 0x00000b8bu, 0x0003003eu, 0x00000b8cu, 0x00000b82u, 0x0003003eu, 0x00000b8du, 0x00000b85u, 0x0003003eu, 0x00000b8eu, 0x00000b87u, 0x00090039u, 0x00000008u, 0x00000b8fu, 0x000000f9u, 0x00000b88u, 0x00000b89u, 0x00000b8cu, 0x00000b8du, 0x00000b8eu, 0x0003003eu, 0x00000b8au, 0x00000b8fu, 0x0004003du, 0x00000058u, 0x00000b91u, 0x00000120u, 0x000300f7u, 0x00000b93u, 0x00000000u, 0x000400fau, 0x00000b91u, 0x00000b92u, 0x00000b99u, 0x000200f8u, 0x00000b92u, 0x0004003du, 0x0000004du, 0x00000b95u, 0x0000011du, 0x000500c7u, 0x0000004du, 0x00000b98u, 0x00000b95u, 0x0000b1bdu, 0x0003003eu, 0x00000b94u, 0x00000b98u, 0x000200f9u, 0x00000b93u, 0x000200f8u, 0x00000b99u, 0x0003003eu, 0x00000b94u, 0x00000488u, 0x000200f9u, 0x00000b93u, 0x000200f8u, 0x00000b93u, 0x00050041u, 0x00000038u, 0x00000b9bu, 0x00000b94u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000b9cu, 0x00000b9bu, 0x00050041u, 0x00000038u, 0x00000b9du, 0x00000b94u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000b9eu, 0x00000b9du, 0x00050080u, 0x00000008u, 0x00000b9fu, 0x00000b9cu, 0x00000b9eu, 0x0003003eu, 0x00000b9au, 0x00000b9fu, 0x0004003du, 0x0000004du, 0x00000ba0u, 0x0000011du, 0x000500c3u, 0x0000004du, 0x00000ba2u, 0x00000ba0u, 0x0000b1bcu, 0x0003003eu, 0x0000011du, 0x00000ba2u, 0x0004003du, 0x00000023u, 0x00000ba5u, 0x0000011bu, 0x0003003eu, 0x00000ba4u, 0x00000ba5u, 0x0004003du, 0x00000008u, 0x00000ba8u, 0x00000b75u, 0x0003003eu, 0x00000ba6u, 0x00000ba8u, 0x00060039u, 0x00000008u, 0x00000ba9u, 0x0000008eu, 0x00000ba4u, 0x00000ba6u, 0x0003003eu, 0x00000ba3u, 0x00000ba9u, 0x0004003du, 0x00000023u, 0x00000bacu, 0x0000011bu, 0x0003003eu, 0x00000babu, 0x00000bacu, 0x0004003du, 0x00000008u, 0x00000bafu, 0x00000b8au, 0x0003003eu, 0x00000badu, 0x00000bafu, 0x00060039u, 0x00000008u, 0x00000bb0u, 0x00000097u, 0x00000babu, 0x00000badu, 0x0003003eu, 0x00000baau, 0x00000bb0u, 0x0004003du, 0x00000008u, 0x00000bb3u, 0x00000b75u, 0x00050080u, 0x00000008u, 0x00000bb4u, 0x00000bb3u, 0x00000194u, 0x0004003du, 0x00000023u, 0x00000bb6u, 0x0000011bu, 0x0003003eu, 0x00000bb5u, 0x00000bb6u, 0x0003003eu, 0x00000bb7u, 0x00000bb4u, 0x00060039u, 0x00000008u, 0x00000bb8u, 0x0000008eu, 0x00000bb5u, 0x00000bb7u, 0x0003003eu, 0x00000bb1u, 0x00000bb8u, 0x0004003du, 0x00000008u, 0x00000bbbu, 0x00000b8au, 0x00050080u, 0x00000008u, 0x00000bbcu, 0x00000bbbu, 0x00000194u, 0x0004003du, 0x00000023u, 0x00000bbeu, 0x0000011bu, 0x0003003eu, 0x00000bbdu, 0x00000bbeu, 0x0003003eu, 0x00000bbfu, 0x00000bbcu, 0x00060039u, 0x00000008u, 0x00000bc0u, 0x00000097u, 0x00000bbdu, 0x00000bbfu, 0x0003003eu, 0x00000bb9u, 0x00000bc0u, 0x00050082u, 0x00000008u, 0x00000bc4u, 0x00000bc0u, 0x00000bb0u, 0x0007000cu, 0x00000008u, 0x00000bc6u, 0x00000001u, 0x0000002au, 0x00000bc4u, 0x00000bc5u, 0x0003003eu, 0x00000bc1u, 0x00000bc6u, 0x000500c7u, 0x00000008u, 0x00000bc8u, 0x00000bb0u, 0x000002eeu, 0x00050080u, 0x00000008u, 0x00000bcau, 0x00000bc8u, 0x00000bc6u, 0x0003003eu, 0x00000bb9u, 0x00000bcau, 0x0003003eu, 0x00000baau, 0x00000bc8u, 0x0004003du, 0x00000058u, 0x00000bcdu, 0x00000121u, 0x0004003du, 0x0000004du, 0x00000bceu, 0x00000b94u, 0x000500aau, 0x00000489u, 0x00000bd0u, 0x00000bceu, 0x00000bcfu, 0x00050051u, 0x00000058u, 0x00000bd2u, 0x00000bd0u, 0x00000000u, 0x00050051u, 0x00000058u, 0x00000bd3u, 0x00000bd0u, 0x00000001u, 0x00060050u, 0x00000bd1u, 0x00000bd4u, 0x00000bcdu, 0x00000bd2u, 0x00000bd3u, 0x0004009bu, 0x00000058u, 0x00000bd5u, 0x00000bd4u, 0x0003003eu, 0x00000121u, 0x00000bd5u, 0x0004003du, 0x00000058u, 0x00000bd6u, 0x00000121u, 0x000300f7u, 0x00000bd8u, 0x00000000u, 0x000400fau, 0x00000bd6u, 0x00000bd7u, 0x00000bd8u, 0x000200f8u, 0x00000bd7u, 0x0003003eu, 0x00000b9au, 0x00000185u, 0x000200f9u, 0x00000bd8u, 0x000200f8u, 0x00000bd8u, 0x000600a9u, 0x00000008u, 0x0000b1ecu, 0x00000bd6u, 0x00000185u, 0x00000b9fu, 0x00050041u, 0x00000038u, 0x00000bdau, 0x0000011bu, 0x000001a3u, 0x0004003du, 0x00000008u, 0x00000bdbu, 0x00000bdau, 0x000500aau, 0x00000058u, 0x00000bdcu, 0x00000bdbu, 0x00000194u, 0x0003003eu, 0x00000bd9u, 0x00000bdcu, 0x000500afu, 0x00000058u, 0x00000bdfu, 0x0000b1ecu, 0x000002e0u, 0x000300f7u, 0x00000be2u, 0x00000000u, 0x000400fau, 0x00000bdfu, 0x00000be1u, 0x00000be6u, 0x000200f8u, 0x00000be1u, 0x00050050u, 0x0000004du, 0x00000be5u, 0x00000bb8u, 0x00000bcau, 0x0003003eu, 0x00000be0u, 0x00000be5u, 0x000200f9u, 0x00000be2u, 0x000200f8u, 0x00000be6u, 0x00050050u, 0x0000004du, 0x00000be9u, 0x00000ba9u, 0x00000bc8u, 0x0003003eu, 0x00000be0u, 0x00000be9u, 0x000200f9u, 0x00000be2u, 0x000200f8u, 0x00000be2u, 0x000700f5u, 0x0000004du, 0x0000ad2au, 0x00000be5u, 0x00000be1u, 0x00000be9u, 0x00000be6u, 0x0003003eu, 0x00000bddu, 0x0000ad2au, 0x0004003du, 0x00000058u, 0x00000bebu, 0x0000011eu, 0x000300f7u, 0x00000bedu, 0x00000000u, 0x000400fau, 0x00000bebu, 0x00000becu, 0x00000ce2u, 0x000200f8u, 0x00000becu, 0x0004003du, 0x00000008u, 0x00000befu, 0x00000bdau, 0x000300f7u, 0x00000bf1u, 0x00000000u, 0x000b00fbu, 0x00000befu, 0x00000bf1u, 0x00000000u, 0x00000bf0u, 0x00000002u, 0x00000bf0u, 0x00000003u, 0x00000bf0u, 0x00000004u, 0x00000bf0u, 0x000200f8u, 0x00000bf0u, 0x0003003eu, 0x00000bf2u, 0x00000bdfu, 0x000600a9u, 0x00000008u, 0x00000bf7u, 0x00000bdfu, 0x00000197u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00000bf8u, 0x00000bf7u, 0x0003003eu, 0x00000bf5u, 0x00000bf8u, 0x00050041u, 0x00000038u, 0x00000bf9u, 0x0000011bu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x00000bfau, 0x00000bf9u, 0x000300f7u, 0x00000bfeu, 0x00000000u, 0x000700fbu, 0x00000bfau, 0x00000bfdu, 0x00000000u, 0x00000bfbu, 0x00000001u, 0x00000bfcu, 0x000200f8u, 0x00000bfdu, 0x0004007cu, 0x000000a0u, 0x00000c9cu, 0x0000ad2au, 0x000600a9u, 0x00000008u, 0x00000c9eu, 0x00000bdfu, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00000c9fu, 0x00000c9eu, 0x0004003du, 0x00000023u, 0x00000ca1u, 0x0000011bu, 0x0003003eu, 0x00000ca0u, 0x00000ca1u, 0x0004003du, 0x00000006u, 0x00000ca3u, 0x0000011cu, 0x0003003eu, 0x00000ca2u, 0x00000ca3u, 0x0003003eu, 0x00000ca4u, 0x00000c9cu, 0x0003003eu, 0x00000ca5u, 0x00000c9fu, 0x0003003eu, 0x00000ca6u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000ca9u, 0x0000011fu, 0x0003003eu, 0x00000ca8u, 0x00000ca9u, 0x000a0039u, 0x00000009u, 0x00000caau, 0x000000d2u, 0x00000ca0u, 0x00000ca2u, 0x00000ca4u, 0x00000ca5u, 0x00000ca6u, 0x00000ca8u, 0x0003003eu, 0x00000bffu, 0x00000caau, 0x0004003du, 0x00000058u, 0x00000cabu, 0x00000120u, 0x000300f7u, 0x00000cadu, 0x00000000u, 0x000400fau, 0x00000cabu, 0x00000cacu, 0x00000cadu, 0x000200f8u, 0x00000cacu, 0x00050050u, 0x0000004du, 0x00000cb0u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000cb1u, 0x00000cb0u, 0x0004003du, 0x00000023u, 0x00000cb3u, 0x0000011bu, 0x0003003eu, 0x00000cb2u, 0x00000cb3u, 0x0004003du, 0x00000006u, 0x00000cb5u, 0x0000011cu, 0x0003003eu, 0x00000cb4u, 0x00000cb5u, 0x0003003eu, 0x00000cb6u, 0x00000cb1u, 0x0003003eu, 0x00000cb7u, 0x0000032au, 0x0003003eu, 0x00000cb8u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000cbbu, 0x0000011fu, 0x0003003eu, 0x00000cbau, 0x00000cbbu, 0x000a0039u, 0x00000009u, 0x00000cbcu, 0x000000d2u, 0x00000cb2u, 0x00000cb4u, 0x00000cb6u, 0x00000cb7u, 0x00000cb8u, 0x00000cbau, 0x0003003eu, 0x00000c17u, 0x00000cbcu, 0x00050050u, 0x0000004du, 0x00000cbfu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000cc0u, 0x00000cbfu, 0x0004003du, 0x00000023u, 0x00000cc2u, 0x0000011bu, 0x0003003eu, 0x00000cc1u, 0x00000cc2u, 0x0004003du, 0x00000006u, 0x00000cc4u, 0x0000011cu, 0x0003003eu, 0x00000cc3u, 0x00000cc4u, 0x0003003eu, 0x00000cc5u, 0x00000cc0u, 0x0003003eu, 0x00000cc6u, 0x0000032eu, 0x0003003eu, 0x00000cc7u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000ccau, 0x0000011fu, 0x0003003eu, 0x00000cc9u, 0x00000ccau, 0x000a0039u, 0x00000009u, 0x00000ccbu, 0x000000d2u, 0x00000cc1u, 0x00000cc3u, 0x00000cc5u, 0x00000cc6u, 0x00000cc7u, 0x00000cc9u, 0x0003003eu, 0x00000c2bu, 0x00000ccbu, 0x000200f9u, 0x00000cadu, 0x000200f8u, 0x00000cadu, 0x000700f5u, 0x00000009u, 0x0000ae1cu, 0x0000adbau, 0x00000bfdu, 0x00000ccbu, 0x00000cacu, 0x000700f5u, 0x00000009u, 0x0000adbdu, 0x0000adbau, 0x00000bfdu, 0x00000cbcu, 0x00000cacu, 0x0004003du, 0x00000058u, 0x00000cccu, 0x00000121u, 0x000300f7u, 0x00000cceu, 0x00000000u, 0x000400fau, 0x00000cccu, 0x00000ccdu, 0x00000cceu, 0x000200f8u, 0x00000ccdu, 0x00050050u, 0x0000004du, 0x00000cd1u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000cd2u, 0x00000cd1u, 0x0004003du, 0x00000023u, 0x00000cd4u, 0x0000011bu, 0x0003003eu, 0x00000cd3u, 0x00000cd4u, 0x0004003du, 0x00000006u, 0x00000cd6u, 0x0000011cu, 0x0003003eu, 0x00000cd5u, 0x00000cd6u, 0x0003003eu, 0x00000cd7u, 0x00000cd2u, 0x0003003eu, 0x00000cd8u, 0x00000331u, 0x0003003eu, 0x00000cd9u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000cdcu, 0x0000011fu, 0x0003003eu, 0x00000cdbu, 0x00000cdcu, 0x000a0039u, 0x00000009u, 0x00000cddu, 0x000000d2u, 0x00000cd3u, 0x00000cd5u, 0x00000cd7u, 0x00000cd8u, 0x00000cd9u, 0x00000cdbu, 0x0003003eu, 0x00000c42u, 0x00000cddu, 0x000200f9u, 0x00000cceu, 0x000200f8u, 0x00000cceu, 0x000700f5u, 0x00000009u, 0x0000ae4au, 0x0000adbau, 0x00000cadu, 0x00000cddu, 0x00000ccdu, 0x000200f9u, 0x00000bfeu, 0x000200f8u, 0x00000bfbu, 0x0004007cu, 0x000000a0u, 0x00000c01u, 0x0000ad2au, 0x00050041u, 0x00000038u, 0x00000c02u, 0x0000011bu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000c03u, 0x00000c02u, 0x0004007cu, 0x00000006u, 0x00000c04u, 0x00000c03u, 0x000600a9u, 0x00000008u, 0x00000c06u, 0x00000bdfu, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00000c07u, 0x00000c06u, 0x0004003du, 0x00000023u, 0x00000c09u, 0x0000011bu, 0x0003003eu, 0x00000c08u, 0x00000c09u, 0x0004003du, 0x00000006u, 0x00000c0bu, 0x0000011cu, 0x0003003eu, 0x00000c0au, 0x00000c0bu, 0x0003003eu, 0x00000c0cu, 0x00000c01u, 0x0003003eu, 0x00000c0du, 0x00000c04u, 0x0003003eu, 0x00000c0eu, 0x00000c07u, 0x0003003eu, 0x00000c0fu, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c12u, 0x0000011fu, 0x0003003eu, 0x00000c11u, 0x00000c12u, 0x000b0039u, 0x00000009u, 0x00000c13u, 0x000000bcu, 0x00000c08u, 0x00000c0au, 0x00000c0cu, 0x00000c0du, 0x00000c0eu, 0x00000c0fu, 0x00000c11u, 0x0003003eu, 0x00000bffu, 0x00000c13u, 0x0004003du, 0x00000058u, 0x00000c14u, 0x00000120u, 0x000300f7u, 0x00000c16u, 0x00000000u, 0x000400fau, 0x00000c14u, 0x00000c15u, 0x00000c16u, 0x000200f8u, 0x00000c15u, 0x00050050u, 0x0000004du, 0x00000c1au, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000c1bu, 0x00000c1au, 0x0004003du, 0x00000008u, 0x00000c1du, 0x00000c02u, 0x0004007cu, 0x00000006u, 0x00000c1eu, 0x00000c1du, 0x0004003du, 0x00000023u, 0x00000c20u, 0x0000011bu, 0x0003003eu, 0x00000c1fu, 0x00000c20u, 0x0004003du, 0x00000006u, 0x00000c22u, 0x0000011cu, 0x0003003eu, 0x00000c21u, 0x00000c22u, 0x0003003eu, 0x00000c23u, 0x00000c1bu, 0x0003003eu, 0x00000c24u, 0x00000c1eu, 0x0003003eu, 0x00000c25u, 0x0000032au, 0x0003003eu, 0x00000c26u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c29u, 0x0000011fu, 0x0003003eu, 0x00000c28u, 0x00000c29u, 0x000b0039u, 0x00000009u, 0x00000c2au, 0x000000bcu, 0x00000c1fu, 0x00000c21u, 0x00000c23u, 0x00000c24u, 0x00000c25u, 0x00000c26u, 0x00000c28u, 0x0003003eu, 0x00000c17u, 0x00000c2au, 0x00050050u, 0x0000004du, 0x00000c2eu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000c2fu, 0x00000c2eu, 0x0004003du, 0x00000008u, 0x00000c31u, 0x00000c02u, 0x0004007cu, 0x00000006u, 0x00000c32u, 0x00000c31u, 0x0004003du, 0x00000023u, 0x00000c34u, 0x0000011bu, 0x0003003eu, 0x00000c33u, 0x00000c34u, 0x0004003du, 0x00000006u, 0x00000c36u, 0x0000011cu, 0x0003003eu, 0x00000c35u, 0x00000c36u, 0x0003003eu, 0x00000c37u, 0x00000c2fu, 0x0003003eu, 0x00000c38u, 0x00000c32u, 0x0003003eu, 0x00000c39u, 0x0000032eu, 0x0003003eu, 0x00000c3au, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c3du, 0x0000011fu, 0x0003003eu, 0x00000c3cu, 0x00000c3du, 0x000b0039u, 0x00000009u, 0x00000c3eu, 0x000000bcu, 0x00000c33u, 0x00000c35u, 0x00000c37u, 0x00000c38u, 0x00000c39u, 0x00000c3au, 0x00000c3cu, 0x0003003eu, 0x00000c2bu, 0x00000c3eu, 0x000200f9u, 0x00000c16u, 0x000200f8u, 0x00000c16u, 0x000700f5u, 0x00000009u, 0x0000ae1fu, 0x0000adbau, 0x00000bfbu, 0x00000c3eu, 0x00000c15u, 0x000700f5u, 0x00000009u, 0x0000adc0u, 0x0000adbau, 0x00000bfbu, 0x00000c2au, 0x00000c15u, 0x0004003du, 0x00000058u, 0x00000c3fu, 0x00000121u, 0x000300f7u, 0x00000c41u, 0x00000000u, 0x000400fau, 0x00000c3fu, 0x00000c40u, 0x00000c41u, 0x000200f8u, 0x00000c40u, 0x00050050u, 0x0000004du, 0x00000c45u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000c46u, 0x00000c45u, 0x0004003du, 0x00000008u, 0x00000c48u, 0x00000c02u, 0x0004007cu, 0x00000006u, 0x00000c49u, 0x00000c48u, 0x0004003du, 0x00000023u, 0x00000c4bu, 0x0000011bu, 0x0003003eu, 0x00000c4au, 0x00000c4bu, 0x0004003du, 0x00000006u, 0x00000c4du, 0x0000011cu, 0x0003003eu, 0x00000c4cu, 0x00000c4du, 0x0003003eu, 0x00000c4eu, 0x00000c46u, 0x0003003eu, 0x00000c4fu, 0x00000c49u, 0x0003003eu, 0x00000c50u, 0x00000331u, 0x0003003eu, 0x00000c51u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c54u, 0x0000011fu, 0x0003003eu, 0x00000c53u, 0x00000c54u, 0x000b0039u, 0x00000009u, 0x00000c55u, 0x000000bcu, 0x00000c4au, 0x00000c4cu, 0x00000c4eu, 0x00000c4fu, 0x00000c50u, 0x00000c51u, 0x00000c53u, 0x0003003eu, 0x00000c42u, 0x00000c55u, 0x000200f9u, 0x00000c41u, 0x000200f8u, 0x00000c41u, 0x000700f5u, 0x00000009u, 0x0000ae4du, 0x0000adbau, 0x00000c16u, 0x00000c55u, 0x00000c40u, 0x000200f9u, 0x00000bfeu, 0x000200f8u, 0x00000bfcu, 0x0004007cu, 0x000000a0u, 0x00000c58u, 0x0000ad2au, 0x000600a9u, 0x00000008u, 0x00000c5au, 0x00000bdfu, 0x0000019au, 0x00000185u, 0x0004007cu, 0x00000006u, 0x00000c5bu, 0x00000c5au, 0x0004003du, 0x00000023u, 0x00000c5du, 0x0000011bu, 0x0003003eu, 0x00000c5cu, 0x00000c5du, 0x0004003du, 0x00000006u, 0x00000c5fu, 0x0000011cu, 0x0003003eu, 0x00000c5eu, 0x00000c5fu, 0x0003003eu, 0x00000c60u, 0x00000c58u, 0x0003003eu, 0x00000c61u, 0x00000c5bu, 0x0003003eu, 0x00000c62u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c65u, 0x0000011fu, 0x0003003eu, 0x00000c64u, 0x00000c65u, 0x000a0039u, 0x00000009u, 0x00000c66u, 0x000000c5u, 0x00000c5cu, 0x00000c5eu, 0x00000c60u, 0x00000c61u, 0x00000c62u, 0x00000c64u, 0x0003003eu, 0x00000bffu, 0x00000c66u, 0x0004003du, 0x00000058u, 0x00000c67u, 0x00000120u, 0x000300f7u, 0x00000c69u, 0x00000000u, 0x000400fau, 0x00000c67u, 0x00000c68u, 0x00000c69u, 0x000200f8u, 0x00000c68u, 0x00050050u, 0x0000004du, 0x00000c6cu, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000c6du, 0x00000c6cu, 0x0004003du, 0x00000023u, 0x00000c6fu, 0x0000011bu, 0x0003003eu, 0x00000c6eu, 0x00000c6fu, 0x0004003du, 0x00000006u, 0x00000c71u, 0x0000011cu, 0x0003003eu, 0x00000c70u, 0x00000c71u, 0x0003003eu, 0x00000c72u, 0x00000c6du, 0x0003003eu, 0x00000c73u, 0x0000032au, 0x0003003eu, 0x00000c74u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c77u, 0x0000011fu, 0x0003003eu, 0x00000c76u, 0x00000c77u, 0x000a0039u, 0x00000009u, 0x00000c78u, 0x000000c5u, 0x00000c6eu, 0x00000c70u, 0x00000c72u, 0x00000c73u, 0x00000c74u, 0x00000c76u, 0x0003003eu, 0x00000c17u, 0x00000c78u, 0x00050050u, 0x0000004du, 0x00000c7bu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000c7cu, 0x00000c7bu, 0x0004003du, 0x00000023u, 0x00000c7eu, 0x0000011bu, 0x0003003eu, 0x00000c7du, 0x00000c7eu, 0x0004003du, 0x00000006u, 0x00000c80u, 0x0000011cu, 0x0003003eu, 0x00000c7fu, 0x00000c80u, 0x0003003eu, 0x00000c81u, 0x00000c7cu, 0x0003003eu, 0x00000c82u, 0x0000032eu, 0x0003003eu, 0x00000c83u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c86u, 0x0000011fu, 0x0003003eu, 0x00000c85u, 0x00000c86u, 0x000a0039u, 0x00000009u, 0x00000c87u, 0x000000c5u, 0x00000c7du, 0x00000c7fu, 0x00000c81u, 0x00000c82u, 0x00000c83u, 0x00000c85u, 0x0003003eu, 0x00000c2bu, 0x00000c87u, 0x000200f9u, 0x00000c69u, 0x000200f8u, 0x00000c69u, 0x000700f5u, 0x00000009u, 0x0000ae21u, 0x0000adbau, 0x00000bfcu, 0x00000c87u, 0x00000c68u, 0x000700f5u, 0x00000009u, 0x0000adc2u, 0x0000adbau, 0x00000bfcu, 0x00000c78u, 0x00000c68u, 0x0004003du, 0x00000058u, 0x00000c88u, 0x00000121u, 0x000300f7u, 0x00000c8au, 0x00000000u, 0x000400fau, 0x00000c88u, 0x00000c89u, 0x00000c8au, 0x000200f8u, 0x00000c89u, 0x00050050u, 0x0000004du, 0x00000c8du, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000c8eu, 0x00000c8du, 0x0004003du, 0x00000023u, 0x00000c90u, 0x0000011bu, 0x0003003eu, 0x00000c8fu, 0x00000c90u, 0x0004003du, 0x00000006u, 0x00000c92u, 0x0000011cu, 0x0003003eu, 0x00000c91u, 0x00000c92u, 0x0003003eu, 0x00000c93u, 0x00000c8eu, 0x0003003eu, 0x00000c94u, 0x00000331u, 0x0003003eu, 0x00000c95u, 0x00000bf8u, 0x0004003du, 0x00000058u, 0x00000c98u, 0x0000011fu, 0x0003003eu, 0x00000c97u, 0x00000c98u, 0x000a0039u, 0x00000009u, 0x00000c99u, 0x000000c5u, 0x00000c8fu, 0x00000c91u, 0x00000c93u, 0x00000c94u, 0x00000c95u, 0x00000c97u, 0x0003003eu, 0x00000c42u, 0x00000c99u, 0x000200f9u, 0x00000c8au, 0x000200f8u, 0x00000c8au, 0x000700f5u, 0x00000009u, 0x0000ae4fu, 0x0000adbau, 0x00000c69u, 0x00000c99u, 0x00000c89u, 0x000200f9u, 0x00000bfeu, 0x000200f8u, 0x00000bfeu, 0x000900f5u, 0x00000009u, 0x0000ae49u, 0x0000ae4au, 0x00000cceu, 0x0000ae4du, 0x00000c41u, 0x0000ae4fu, 0x00000c8au, 0x000900f5u, 0x00000009u, 0x0000ae1au, 0x0000ae1cu, 0x00000cceu, 0x0000ae1fu, 0x00000c41u, 0x0000ae21u, 0x00000c8au, 0x000900f5u, 0x00000009u, 0x0000adebu, 0x00000caau, 0x00000cceu, 0x00000c13u, 0x00000c41u, 0x00000c66u, 0x00000c8au, 0x000900f5u, 0x00000009u, 0x0000adbbu, 0x0000adbdu, 0x00000cceu, 0x0000adc0u, 0x00000c41u, 0x0000adc2u, 0x00000c8au, 0x000200f9u, 0x00000bf1u, 0x000200f8u, 0x00000bf1u, 0x000700f5u, 0x00000009u, 0x0000ae45u, 0x0000adbau, 0x00000becu, 0x0000ae49u, 0x00000bfeu, 0x000700f5u, 0x00000009u, 0x0000ae16u, 0x0000adbau, 0x00000becu, 0x0000ae1au, 0x00000bfeu, 0x000700f5u, 0x00000009u, 0x0000ade7u, 0x0000adbau, 0x00000becu, 0x0000adebu, 0x00000bfeu, 0x000700f5u, 0x00000009u, 0x0000adb6u, 0x0000adbau, 0x00000becu, 0x0000adbbu, 0x00000bfeu, 0x000200f9u, 0x00000bedu, 0x000200f8u, 0x00000ce2u, 0x0004003du, 0x00000008u, 0x00000ce4u, 0x00000bdau, 0x000300f7u, 0x00000ceau, 0x00000000u, 0x000d00fbu, 0x00000ce4u, 0x00000ceau, 0x00000000u, 0x00000ce5u, 0x00000001u, 0x00000ce6u, 0x00000002u, 0x00000ce7u, 0x00000003u, 0x00000ce8u, 0x00000004u, 0x00000ce9u, 0x000200f8u, 0x00000ce5u, 0x00050041u, 0x00000038u, 0x00000cebu, 0x0000011bu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x00000cecu, 0x00000cebu, 0x000300f7u, 0x00000cf1u, 0x00000000u, 0x000b00fbu, 0x00000cecu, 0x00000cf1u, 0x00000000u, 0x00000cedu, 0x00000001u, 0x00000ceeu, 0x00000002u, 0x00000cefu, 0x00000003u, 0x00000cf0u, 0x000200f8u, 0x00000cedu, 0x0004007cu, 0x000000a0u, 0x00000cf3u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000cf5u, 0x0000011bu, 0x0003003eu, 0x00000cf4u, 0x00000cf5u, 0x0004003du, 0x00000006u, 0x00000cf7u, 0x0000011cu, 0x0003003eu, 0x00000cf6u, 0x00000cf7u, 0x0003003eu, 0x00000cf8u, 0x00000cf3u, 0x00070039u, 0x00000009u, 0x00000cf9u, 0x000000a6u, 0x00000cf4u, 0x00000cf6u, 0x00000cf8u, 0x0003003eu, 0x00000bffu, 0x00000cf9u, 0x0004003du, 0x00000058u, 0x00000cfau, 0x00000120u, 0x000300f7u, 0x00000cfcu, 0x00000000u, 0x000400fau, 0x00000cfau, 0x00000cfbu, 0x00000cfcu, 0x000200f8u, 0x00000cfbu, 0x00050050u, 0x0000004du, 0x00000cffu, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000d00u, 0x00000cffu, 0x0004003du, 0x00000023u, 0x00000d02u, 0x0000011bu, 0x0003003eu, 0x00000d01u, 0x00000d02u, 0x0004003du, 0x00000006u, 0x00000d04u, 0x0000011cu, 0x0003003eu, 0x00000d03u, 0x00000d04u, 0x0003003eu, 0x00000d05u, 0x00000d00u, 0x00070039u, 0x00000009u, 0x00000d06u, 0x000000a6u, 0x00000d01u, 0x00000d03u, 0x00000d05u, 0x0003003eu, 0x00000c17u, 0x00000d06u, 0x00050050u, 0x0000004du, 0x00000d09u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d0au, 0x00000d09u, 0x0004003du, 0x00000023u, 0x00000d0cu, 0x0000011bu, 0x0003003eu, 0x00000d0bu, 0x00000d0cu, 0x0004003du, 0x00000006u, 0x00000d0eu, 0x0000011cu, 0x0003003eu, 0x00000d0du, 0x00000d0eu, 0x0003003eu, 0x00000d0fu, 0x00000d0au, 0x00070039u, 0x00000009u, 0x00000d10u, 0x000000a6u, 0x00000d0bu, 0x00000d0du, 0x00000d0fu, 0x0003003eu, 0x00000c2bu, 0x00000d10u, 0x000200f9u, 0x00000cfcu, 0x000200f8u, 0x00000cfcu, 0x000700f5u, 0x00000009u, 0x0000ae25u, 0x0000adbau, 0x00000cedu, 0x00000d10u, 0x00000cfbu, 0x000700f5u, 0x00000009u, 0x0000adc6u, 0x0000adbau, 0x00000cedu, 0x00000d06u, 0x00000cfbu, 0x0004003du, 0x00000058u, 0x00000d11u, 0x00000121u, 0x000300f7u, 0x00000d13u, 0x00000000u, 0x000400fau, 0x00000d11u, 0x00000d12u, 0x00000d13u, 0x000200f8u, 0x00000d12u, 0x00050050u, 0x0000004du, 0x00000d16u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d17u, 0x00000d16u, 0x0004003du, 0x00000023u, 0x00000d19u, 0x0000011bu, 0x0003003eu, 0x00000d18u, 0x00000d19u, 0x0004003du, 0x00000006u, 0x00000d1bu, 0x0000011cu, 0x0003003eu, 0x00000d1au, 0x00000d1bu, 0x0003003eu, 0x00000d1cu, 0x00000d17u, 0x00070039u, 0x00000009u, 0x00000d1du, 0x000000a6u, 0x00000d18u, 0x00000d1au, 0x00000d1cu, 0x0003003eu, 0x00000c42u, 0x00000d1du, 0x000200f9u, 0x00000d13u, 0x000200f8u, 0x00000d13u, 0x000700f5u, 0x00000009u, 0x0000ae53u, 0x0000adbau, 0x00000cfcu, 0x00000d1du, 0x00000d12u, 0x000200f9u, 0x00000cf1u, 0x000200f8u, 0x00000ceeu, 0x0004007cu, 0x000000a0u, 0x00000d20u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000d22u, 0x0000011bu, 0x0003003eu, 0x00000d21u, 0x00000d22u, 0x0004003du, 0x00000006u, 0x00000d24u, 0x0000011cu, 0x0003003eu, 0x00000d23u, 0x00000d24u, 0x0003003eu, 0x00000d25u, 0x00000d20u, 0x00070039u, 0x00000009u, 0x00000d26u, 0x000000d7u, 0x00000d21u, 0x00000d23u, 0x00000d25u, 0x0003003eu, 0x00000bffu, 0x00000d26u, 0x0004003du, 0x00000058u, 0x00000d27u, 0x00000120u, 0x000300f7u, 0x00000d29u, 0x00000000u, 0x000400fau, 0x00000d27u, 0x00000d28u, 0x00000d29u, 0x000200f8u, 0x00000d28u, 0x00050050u, 0x0000004du, 0x00000d2cu, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000d2du, 0x00000d2cu, 0x0004003du, 0x00000023u, 0x00000d2fu, 0x0000011bu, 0x0003003eu, 0x00000d2eu, 0x00000d2fu, 0x0004003du, 0x00000006u, 0x00000d31u, 0x0000011cu, 0x0003003eu, 0x00000d30u, 0x00000d31u, 0x0003003eu, 0x00000d32u, 0x00000d2du, 0x00070039u, 0x00000009u, 0x00000d33u, 0x000000d7u, 0x00000d2eu, 0x00000d30u, 0x00000d32u, 0x0003003eu, 0x00000c17u, 0x00000d33u, 0x00050050u, 0x0000004du, 0x00000d36u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d37u, 0x00000d36u, 0x0004003du, 0x00000023u, 0x00000d39u, 0x0000011bu, 0x0003003eu, 0x00000d38u, 0x00000d39u, 0x0004003du, 0x00000006u, 0x00000d3bu, 0x0000011cu, 0x0003003eu, 0x00000d3au, 0x00000d3bu, 0x0003003eu, 0x00000d3cu, 0x00000d37u, 0x00070039u, 0x00000009u, 0x00000d3du, 0x000000d7u, 0x00000d38u, 0x00000d3au, 0x00000d3cu, 0x0003003eu, 0x00000c2bu, 0x00000d3du, 0x000200f9u, 0x00000d29u, 0x000200f8u, 0x00000d29u, 0x000700f5u, 0x00000009u, 0x0000ae27u, 0x0000adbau, 0x00000ceeu, 0x00000d3du, 0x00000d28u, 0x000700f5u, 0x00000009u, 0x0000adc8u, 0x0000adbau, 0x00000ceeu, 0x00000d33u, 0x00000d28u, 0x0004003du, 0x00000058u, 0x00000d3eu, 0x00000121u, 0x000300f7u, 0x00000d40u, 0x00000000u, 0x000400fau, 0x00000d3eu, 0x00000d3fu, 0x00000d40u, 0x000200f8u, 0x00000d3fu, 0x00050050u, 0x0000004du, 0x00000d43u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d44u, 0x00000d43u, 0x0004003du, 0x00000023u, 0x00000d46u, 0x0000011bu, 0x0003003eu, 0x00000d45u, 0x00000d46u, 0x0004003du, 0x00000006u, 0x00000d48u, 0x0000011cu, 0x0003003eu, 0x00000d47u, 0x00000d48u, 0x0003003eu, 0x00000d49u, 0x00000d44u, 0x00070039u, 0x00000009u, 0x00000d4au, 0x000000d7u, 0x00000d45u, 0x00000d47u, 0x00000d49u, 0x0003003eu, 0x00000c42u, 0x00000d4au, 0x000200f9u, 0x00000d40u, 0x000200f8u, 0x00000d40u, 0x000700f5u, 0x00000009u, 0x0000ae55u, 0x0000adbau, 0x00000d29u, 0x00000d4au, 0x00000d3fu, 0x000200f9u, 0x00000cf1u, 0x000200f8u, 0x00000cefu, 0x0004007cu, 0x000000a0u, 0x00000d4du, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000d4fu, 0x0000011bu, 0x0003003eu, 0x00000d4eu, 0x00000d4fu, 0x0004003du, 0x00000006u, 0x00000d51u, 0x0000011cu, 0x0003003eu, 0x00000d50u, 0x00000d51u, 0x0003003eu, 0x00000d52u, 0x00000d4du, 0x00070039u, 0x00000009u, 0x00000d53u, 0x000000e7u, 0x00000d4eu, 0x00000d50u, 0x00000d52u, 0x0003003eu, 0x00000bffu, 0x00000d53u, 0x0004003du, 0x00000058u, 0x00000d54u, 0x00000120u, 0x000300f7u, 0x00000d56u, 0x00000000u, 0x000400fau, 0x00000d54u, 0x00000d55u, 0x00000d56u, 0x000200f8u, 0x00000d55u, 0x00050050u, 0x0000004du, 0x00000d59u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000d5au, 0x00000d59u, 0x0004003du, 0x00000023u, 0x00000d5cu, 0x0000011bu, 0x0003003eu, 0x00000d5bu, 0x00000d5cu, 0x0004003du, 0x00000006u, 0x00000d5eu, 0x0000011cu, 0x0003003eu, 0x00000d5du, 0x00000d5eu, 0x0003003eu, 0x00000d5fu, 0x00000d5au, 0x00070039u, 0x00000009u, 0x00000d60u, 0x000000e7u, 0x00000d5bu, 0x00000d5du, 0x00000d5fu, 0x0003003eu, 0x00000c17u, 0x00000d60u, 0x00050050u, 0x0000004du, 0x00000d63u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d64u, 0x00000d63u, 0x0004003du, 0x00000023u, 0x00000d66u, 0x0000011bu, 0x0003003eu, 0x00000d65u, 0x00000d66u, 0x0004003du, 0x00000006u, 0x00000d68u, 0x0000011cu, 0x0003003eu, 0x00000d67u, 0x00000d68u, 0x0003003eu, 0x00000d69u, 0x00000d64u, 0x00070039u, 0x00000009u, 0x00000d6au, 0x000000e7u, 0x00000d65u, 0x00000d67u, 0x00000d69u, 0x0003003eu, 0x00000c2bu, 0x00000d6au, 0x000200f9u, 0x00000d56u, 0x000200f8u, 0x00000d56u, 0x000700f5u, 0x00000009u, 0x0000ae29u, 0x0000adbau, 0x00000cefu, 0x00000d6au, 0x00000d55u, 0x000700f5u, 0x00000009u, 0x0000adcau, 0x0000adbau, 0x00000cefu, 0x00000d60u, 0x00000d55u, 0x0004003du, 0x00000058u, 0x00000d6bu, 0x00000121u, 0x000300f7u, 0x00000d6du, 0x00000000u, 0x000400fau, 0x00000d6bu, 0x00000d6cu, 0x00000d6du, 0x000200f8u, 0x00000d6cu, 0x00050050u, 0x0000004du, 0x00000d70u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d71u, 0x00000d70u, 0x0004003du, 0x00000023u, 0x00000d73u, 0x0000011bu, 0x0003003eu, 0x00000d72u, 0x00000d73u, 0x0004003du, 0x00000006u, 0x00000d75u, 0x0000011cu, 0x0003003eu, 0x00000d74u, 0x00000d75u, 0x0003003eu, 0x00000d76u, 0x00000d71u, 0x00070039u, 0x00000009u, 0x00000d77u, 0x000000e7u, 0x00000d72u, 0x00000d74u, 0x00000d76u, 0x0003003eu, 0x00000c42u, 0x00000d77u, 0x000200f9u, 0x00000d6du, 0x000200f8u, 0x00000d6du, 0x000700f5u, 0x00000009u, 0x0000ae57u, 0x0000adbau, 0x00000d56u, 0x00000d77u, 0x00000d6cu, 0x000200f9u, 0x00000cf1u, 0x000200f8u, 0x00000cf0u, 0x0004007cu, 0x000000a0u, 0x00000d7au, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000d7cu, 0x0000011bu, 0x0003003eu, 0x00000d7bu, 0x00000d7cu, 0x0004003du, 0x00000006u, 0x00000d7eu, 0x0000011cu, 0x0003003eu, 0x00000d7du, 0x00000d7eu, 0x0003003eu, 0x00000d7fu, 0x00000d7au, 0x00070039u, 0x00000009u, 0x00000d80u, 0x000000f1u, 0x00000d7bu, 0x00000d7du, 0x00000d7fu, 0x0003003eu, 0x00000bffu, 0x00000d80u, 0x0004003du, 0x00000058u, 0x00000d81u, 0x00000120u, 0x000300f7u, 0x00000d83u, 0x00000000u, 0x000400fau, 0x00000d81u, 0x00000d82u, 0x00000d83u, 0x000200f8u, 0x00000d82u, 0x00050050u, 0x0000004du, 0x00000d86u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000d87u, 0x00000d86u, 0x0004003du, 0x00000023u, 0x00000d89u, 0x0000011bu, 0x0003003eu, 0x00000d88u, 0x00000d89u, 0x0004003du, 0x00000006u, 0x00000d8bu, 0x0000011cu, 0x0003003eu, 0x00000d8au, 0x00000d8bu, 0x0003003eu, 0x00000d8cu, 0x00000d87u, 0x00070039u, 0x00000009u, 0x00000d8du, 0x000000f1u, 0x00000d88u, 0x00000d8au, 0x00000d8cu, 0x0003003eu, 0x00000c17u, 0x00000d8du, 0x00050050u, 0x0000004du, 0x00000d90u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d91u, 0x00000d90u, 0x0004003du, 0x00000023u, 0x00000d93u, 0x0000011bu, 0x0003003eu, 0x00000d92u, 0x00000d93u, 0x0004003du, 0x00000006u, 0x00000d95u, 0x0000011cu, 0x0003003eu, 0x00000d94u, 0x00000d95u, 0x0003003eu, 0x00000d96u, 0x00000d91u, 0x00070039u, 0x00000009u, 0x00000d97u, 0x000000f1u, 0x00000d92u, 0x00000d94u, 0x00000d96u, 0x0003003eu, 0x00000c2bu, 0x00000d97u, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d83u, 0x000700f5u, 0x00000009u, 0x0000ae2bu, 0x0000adbau, 0x00000cf0u, 0x00000d97u, 0x00000d82u, 0x000700f5u, 0x00000009u, 0x0000adccu, 0x0000adbau, 0x00000cf0u, 0x00000d8du, 0x00000d82u, 0x0004003du, 0x00000058u, 0x00000d98u, 0x00000121u, 0x000300f7u, 0x00000d9au, 0x00000000u, 0x000400fau, 0x00000d98u, 0x00000d99u, 0x00000d9au, 0x000200f8u, 0x00000d99u, 0x00050050u, 0x0000004du, 0x00000d9du, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000d9eu, 0x00000d9du, 0x0004003du, 0x00000023u, 0x00000da0u, 0x0000011bu, 0x0003003eu, 0x00000d9fu, 0x00000da0u, 0x0004003du, 0x00000006u, 0x00000da2u, 0x0000011cu, 0x0003003eu, 0x00000da1u, 0x00000da2u, 0x0003003eu, 0x00000da3u, 0x00000d9eu, 0x00070039u, 0x00000009u, 0x00000da4u, 0x000000f1u, 0x00000d9fu, 0x00000da1u, 0x00000da3u, 0x0003003eu, 0x00000c42u, 0x00000da4u, 0x000200f9u, 0x00000d9au, 0x000200f8u, 0x00000d9au, 0x000700f5u, 0x00000009u, 0x0000ae59u, 0x0000adbau, 0x00000d83u, 0x00000da4u, 0x00000d99u, 0x000200f9u, 0x00000cf1u, 0x000200f8u, 0x00000cf1u, 0x000d00f5u, 0x00000009u, 0x0000ae52u, 0x0000adbau, 0x00000ce5u, 0x0000ae53u, 0x00000d13u, 0x0000ae55u, 0x00000d40u, 0x0000ae57u, 0x00000d6du, 0x0000ae59u, 0x00000d9au, 0x000d00f5u, 0x00000009u, 0x0000ae23u, 0x0000adbau, 0x00000ce5u, 0x0000ae25u, 0x00000d13u, 0x0000ae27u, 0x00000d40u, 0x0000ae29u, 0x00000d6du, 0x0000ae2bu, 0x00000d9au, 0x000d00f5u, 0x00000009u, 0x0000adf3u, 0x0000adbau, 0x00000ce5u, 0x00000cf9u, 0x00000d13u, 0x00000d26u, 0x00000d40u, 0x00000d53u, 0x00000d6du, 0x00000d80u, 0x00000d9au, 0x000d00f5u, 0x00000009u, 0x0000adc4u, 0x0000adbau, 0x00000ce5u, 0x0000adc6u, 0x00000d13u, 0x0000adc8u, 0x00000d40u, 0x0000adcau, 0x00000d6du, 0x0000adccu, 0x00000d9au, 0x000200f9u, 0x00000ceau, 0x000200f8u, 0x00000ce6u, 0x000500c3u, 0x00000008u, 0x00000daau, 0x00000ba9u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00000dabu, 0x00000daau, 0x0003003eu, 0x00000da8u, 0x00000dabu, 0x00050082u, 0x00000008u, 0x00000db0u, 0x00000bb8u, 0x00000ba9u, 0x00050080u, 0x00000008u, 0x00000db1u, 0x00000bb8u, 0x00000db0u, 0x000500c3u, 0x00000008u, 0x00000db2u, 0x00000db1u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00000db3u, 0x00000db2u, 0x0003003eu, 0x00000dacu, 0x00000db3u, 0x00050050u, 0x0000004du, 0x00000db6u, 0x00000ba9u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000db7u, 0x00000db6u, 0x0004003du, 0x00000023u, 0x00000db9u, 0x0000011bu, 0x0003003eu, 0x00000db8u, 0x00000db9u, 0x0004003du, 0x00000006u, 0x00000dbbu, 0x0000011cu, 0x0003003eu, 0x00000dbau, 0x00000dbbu, 0x0003003eu, 0x00000dbcu, 0x00000db7u, 0x0003003eu, 0x00000dbdu, 0x00000dabu, 0x00080039u, 0x00000009u, 0x00000dbfu, 0x000000e2u, 0x00000db8u, 0x00000dbau, 0x00000dbcu, 0x00000dbdu, 0x0003003eu, 0x00000bffu, 0x00000dbfu, 0x0004003du, 0x00000058u, 0x00000dc0u, 0x00000120u, 0x000300f7u, 0x00000dc2u, 0x00000000u, 0x000400fau, 0x00000dc0u, 0x00000dc1u, 0x00000dc2u, 0x000200f8u, 0x00000dc1u, 0x00050050u, 0x0000004du, 0x00000dc5u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000dc6u, 0x00000dc5u, 0x0004003du, 0x00000023u, 0x00000dc8u, 0x0000011bu, 0x0003003eu, 0x00000dc7u, 0x00000dc8u, 0x0004003du, 0x00000006u, 0x00000dcau, 0x0000011cu, 0x0003003eu, 0x00000dc9u, 0x00000dcau, 0x0003003eu, 0x00000dcbu, 0x00000dc6u, 0x0003003eu, 0x00000dccu, 0x00000db3u, 0x00080039u, 0x00000009u, 0x00000dceu, 0x000000e2u, 0x00000dc7u, 0x00000dc9u, 0x00000dcbu, 0x00000dccu, 0x0003003eu, 0x00000c17u, 0x00000dceu, 0x00050050u, 0x0000004du, 0x00000dd1u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000dd2u, 0x00000dd1u, 0x0004003du, 0x00000023u, 0x00000dd4u, 0x0000011bu, 0x0003003eu, 0x00000dd3u, 0x00000dd4u, 0x0004003du, 0x00000006u, 0x00000dd6u, 0x0000011cu, 0x0003003eu, 0x00000dd5u, 0x00000dd6u, 0x0003003eu, 0x00000dd7u, 0x00000dd2u, 0x0003003eu, 0x00000dd8u, 0x00000dabu, 0x00080039u, 0x00000009u, 0x00000ddau, 0x000000e2u, 0x00000dd3u, 0x00000dd5u, 0x00000dd7u, 0x00000dd8u, 0x0003003eu, 0x00000c2bu, 0x00000ddau, 0x00050050u, 0x0000004du, 0x00000dddu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000ddeu, 0x00000dddu, 0x0004003du, 0x00000023u, 0x00000de0u, 0x0000011bu, 0x0003003eu, 0x00000ddfu, 0x00000de0u, 0x0004003du, 0x00000006u, 0x00000de2u, 0x0000011cu, 0x0003003eu, 0x00000de1u, 0x00000de2u, 0x0003003eu, 0x00000de3u, 0x00000ddeu, 0x0003003eu, 0x00000de4u, 0x00000db3u, 0x00080039u, 0x00000009u, 0x00000de6u, 0x000000e2u, 0x00000ddfu, 0x00000de1u, 0x00000de3u, 0x00000de4u, 0x0003003eu, 0x00000c42u, 0x00000de6u, 0x000200f9u, 0x00000dc2u, 0x000200f8u, 0x00000dc2u, 0x000700f5u, 0x00000009u, 0x0000ae5bu, 0x0000adbau, 0x00000ce6u, 0x00000de6u, 0x00000dc1u, 0x000700f5u, 0x00000009u, 0x0000ae2cu, 0x0000adbau, 0x00000ce6u, 0x00000ddau, 0x00000dc1u, 0x000700f5u, 0x00000009u, 0x0000adcdu, 0x0000adbau, 0x00000ce6u, 0x00000dceu, 0x00000dc1u, 0x000200f9u, 0x00000ceau, 0x000200f8u, 0x00000ce7u, 0x00050041u, 0x00000038u, 0x00000de8u, 0x0000011bu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x00000de9u, 0x00000de8u, 0x000300f7u, 0x00000dedu, 0x00000000u, 0x000700fbu, 0x00000de9u, 0x00000decu, 0x00000000u, 0x00000deau, 0x00000001u, 0x00000debu, 0x000200f8u, 0x00000decu, 0x0004007cu, 0x000000a0u, 0x00000e59u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000e5bu, 0x0000011bu, 0x0003003eu, 0x00000e5au, 0x00000e5bu, 0x0004003du, 0x00000006u, 0x00000e5du, 0x0000011cu, 0x0003003eu, 0x00000e5cu, 0x00000e5du, 0x0003003eu, 0x00000e5eu, 0x00000e59u, 0x00070039u, 0x00000009u, 0x00000e5fu, 0x000000cau, 0x00000e5au, 0x00000e5cu, 0x00000e5eu, 0x0003003eu, 0x00000bffu, 0x00000e5fu, 0x0004003du, 0x00000058u, 0x00000e60u, 0x00000120u, 0x000300f7u, 0x00000e62u, 0x00000000u, 0x000400fau, 0x00000e60u, 0x00000e61u, 0x00000e62u, 0x000200f8u, 0x00000e61u, 0x00050050u, 0x0000004du, 0x00000e65u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000e66u, 0x00000e65u, 0x0004003du, 0x00000023u, 0x00000e68u, 0x0000011bu, 0x0003003eu, 0x00000e67u, 0x00000e68u, 0x0004003du, 0x00000006u, 0x00000e6au, 0x0000011cu, 0x0003003eu, 0x00000e69u, 0x00000e6au, 0x0003003eu, 0x00000e6bu, 0x00000e66u, 0x00070039u, 0x00000009u, 0x00000e6cu, 0x000000cau, 0x00000e67u, 0x00000e69u, 0x00000e6bu, 0x0003003eu, 0x00000c17u, 0x00000e6cu, 0x00050050u, 0x0000004du, 0x00000e6fu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000e70u, 0x00000e6fu, 0x0004003du, 0x00000023u, 0x00000e72u, 0x0000011bu, 0x0003003eu, 0x00000e71u, 0x00000e72u, 0x0004003du, 0x00000006u, 0x00000e74u, 0x0000011cu, 0x0003003eu, 0x00000e73u, 0x00000e74u, 0x0003003eu, 0x00000e75u, 0x00000e70u, 0x00070039u, 0x00000009u, 0x00000e76u, 0x000000cau, 0x00000e71u, 0x00000e73u, 0x00000e75u, 0x0003003eu, 0x00000c2bu, 0x00000e76u, 0x000200f9u, 0x00000e62u, 0x000200f8u, 0x00000e62u, 0x000700f5u, 0x00000009u, 0x0000ae2fu, 0x0000adbau, 0x00000decu, 0x00000e76u, 0x00000e61u, 0x000700f5u, 0x00000009u, 0x0000add0u, 0x0000adbau, 0x00000decu, 0x00000e6cu, 0x00000e61u, 0x0004003du, 0x00000058u, 0x00000e77u, 0x00000121u, 0x000300f7u, 0x00000e79u, 0x00000000u, 0x000400fau, 0x00000e77u, 0x00000e78u, 0x00000e79u, 0x000200f8u, 0x00000e78u, 0x00050050u, 0x0000004du, 0x00000e7cu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000e7du, 0x00000e7cu, 0x0004003du, 0x00000023u, 0x00000e7fu, 0x0000011bu, 0x0003003eu, 0x00000e7eu, 0x00000e7fu, 0x0004003du, 0x00000006u, 0x00000e81u, 0x0000011cu, 0x0003003eu, 0x00000e80u, 0x00000e81u, 0x0003003eu, 0x00000e82u, 0x00000e7du, 0x00070039u, 0x00000009u, 0x00000e83u, 0x000000cau, 0x00000e7eu, 0x00000e80u, 0x00000e82u, 0x0003003eu, 0x00000c42u, 0x00000e83u, 0x000200f9u, 0x00000e79u, 0x000200f8u, 0x00000e79u, 0x000700f5u, 0x00000009u, 0x0000ae5du, 0x0000adbau, 0x00000e62u, 0x00000e83u, 0x00000e78u, 0x000200f9u, 0x00000dedu, 0x000200f8u, 0x00000deau, 0x0004007cu, 0x000000a0u, 0x00000defu, 0x0000ad2au, 0x00050041u, 0x00000038u, 0x00000df0u, 0x0000011bu, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00000df1u, 0x00000df0u, 0x0004007cu, 0x00000006u, 0x00000df2u, 0x00000df1u, 0x0004003du, 0x00000023u, 0x00000df4u, 0x0000011bu, 0x0003003eu, 0x00000df3u, 0x00000df4u, 0x0004003du, 0x00000006u, 0x00000df6u, 0x0000011cu, 0x0003003eu, 0x00000df5u, 0x00000df6u, 0x0003003eu, 0x00000df7u, 0x00000defu, 0x0003003eu, 0x00000df8u, 0x00000df2u, 0x00080039u, 0x00000009u, 0x00000df9u, 0x000000b2u, 0x00000df3u, 0x00000df5u, 0x00000df7u, 0x00000df8u, 0x0003003eu, 0x00000bffu, 0x00000df9u, 0x0004003du, 0x00000058u, 0x00000dfau, 0x00000120u, 0x000300f7u, 0x00000dfcu, 0x00000000u, 0x000400fau, 0x00000dfau, 0x00000dfbu, 0x00000dfcu, 0x000200f8u, 0x00000dfbu, 0x00050050u, 0x0000004du, 0x00000dffu, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000e00u, 0x00000dffu, 0x0004003du, 0x00000008u, 0x00000e02u, 0x00000df0u, 0x0004007cu, 0x00000006u, 0x00000e03u, 0x00000e02u, 0x0004003du, 0x00000023u, 0x00000e05u, 0x0000011bu, 0x0003003eu, 0x00000e04u, 0x00000e05u, 0x0004003du, 0x00000006u, 0x00000e07u, 0x0000011cu, 0x0003003eu, 0x00000e06u, 0x00000e07u, 0x0003003eu, 0x00000e08u, 0x00000e00u, 0x0003003eu, 0x00000e09u, 0x00000e03u, 0x00080039u, 0x00000009u, 0x00000e0au, 0x000000b2u, 0x00000e04u, 0x00000e06u, 0x00000e08u, 0x00000e09u, 0x0003003eu, 0x00000c17u, 0x00000e0au, 0x00050050u, 0x0000004du, 0x00000e0du, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000e0eu, 0x00000e0du, 0x0004003du, 0x00000008u, 0x00000e10u, 0x00000df0u, 0x0004007cu, 0x00000006u, 0x00000e11u, 0x00000e10u, 0x0004003du, 0x00000023u, 0x00000e13u, 0x0000011bu, 0x0003003eu, 0x00000e12u, 0x00000e13u, 0x0004003du, 0x00000006u, 0x00000e15u, 0x0000011cu, 0x0003003eu, 0x00000e14u, 0x00000e15u, 0x0003003eu, 0x00000e16u, 0x00000e0eu, 0x0003003eu, 0x00000e17u, 0x00000e11u, 0x00080039u, 0x00000009u, 0x00000e18u, 0x000000b2u, 0x00000e12u, 0x00000e14u, 0x00000e16u, 0x00000e17u, 0x0003003eu, 0x00000c2bu, 0x00000e18u, 0x000200f9u, 0x00000dfcu, 0x000200f8u, 0x00000dfcu, 0x000700f5u, 0x00000009u, 0x0000ae31u, 0x0000adbau, 0x00000deau, 0x00000e18u, 0x00000dfbu, 0x000700f5u, 0x00000009u, 0x0000add2u, 0x0000adbau, 0x00000deau, 0x00000e0au, 0x00000dfbu, 0x0004003du, 0x00000058u, 0x00000e19u, 0x00000121u, 0x000300f7u, 0x00000e1bu, 0x00000000u, 0x000400fau, 0x00000e19u, 0x00000e1au, 0x00000e1bu, 0x000200f8u, 0x00000e1au, 0x00050050u, 0x0000004du, 0x00000e1eu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000e1fu, 0x00000e1eu, 0x0004003du, 0x00000008u, 0x00000e21u, 0x00000df0u, 0x0004007cu, 0x00000006u, 0x00000e22u, 0x00000e21u, 0x0004003du, 0x00000023u, 0x00000e24u, 0x0000011bu, 0x0003003eu, 0x00000e23u, 0x00000e24u, 0x0004003du, 0x00000006u, 0x00000e26u, 0x0000011cu, 0x0003003eu, 0x00000e25u, 0x00000e26u, 0x0003003eu, 0x00000e27u, 0x00000e1fu, 0x0003003eu, 0x00000e28u, 0x00000e22u, 0x00080039u, 0x00000009u, 0x00000e29u, 0x000000b2u, 0x00000e23u, 0x00000e25u, 0x00000e27u, 0x00000e28u, 0x0003003eu, 0x00000c42u, 0x00000e29u, 0x000200f9u, 0x00000e1bu, 0x000200f8u, 0x00000e1bu, 0x000700f5u, 0x00000009u, 0x0000ae5fu, 0x0000adbau, 0x00000dfcu, 0x00000e29u, 0x00000e1au, 0x000200f9u, 0x00000dedu, 0x000200f8u, 0x00000debu, 0x0004007cu, 0x000000a0u, 0x00000e2cu, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000e2eu, 0x0000011bu, 0x0003003eu, 0x00000e2du, 0x00000e2eu, 0x0004003du, 0x00000006u, 0x00000e30u, 0x0000011cu, 0x0003003eu, 0x00000e2fu, 0x00000e30u, 0x0003003eu, 0x00000e31u, 0x00000e2cu, 0x00070039u, 0x00000009u, 0x00000e32u, 0x000000d7u, 0x00000e2du, 0x00000e2fu, 0x00000e31u, 0x0003003eu, 0x00000bffu, 0x00000e32u, 0x0004003du, 0x00000058u, 0x00000e33u, 0x00000120u, 0x000300f7u, 0x00000e35u, 0x00000000u, 0x000400fau, 0x00000e33u, 0x00000e34u, 0x00000e35u, 0x000200f8u, 0x00000e34u, 0x00050050u, 0x0000004du, 0x00000e38u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000e39u, 0x00000e38u, 0x0004003du, 0x00000023u, 0x00000e3bu, 0x0000011bu, 0x0003003eu, 0x00000e3au, 0x00000e3bu, 0x0004003du, 0x00000006u, 0x00000e3du, 0x0000011cu, 0x0003003eu, 0x00000e3cu, 0x00000e3du, 0x0003003eu, 0x00000e3eu, 0x00000e39u, 0x00070039u, 0x00000009u, 0x00000e3fu, 0x000000d7u, 0x00000e3au, 0x00000e3cu, 0x00000e3eu, 0x0003003eu, 0x00000c17u, 0x00000e3fu, 0x00050050u, 0x0000004du, 0x00000e42u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000e43u, 0x00000e42u, 0x0004003du, 0x00000023u, 0x00000e45u, 0x0000011bu, 0x0003003eu, 0x00000e44u, 0x00000e45u, 0x0004003du, 0x00000006u, 0x00000e47u, 0x0000011cu, 0x0003003eu, 0x00000e46u, 0x00000e47u, 0x0003003eu, 0x00000e48u, 0x00000e43u, 0x00070039u, 0x00000009u, 0x00000e49u, 0x000000d7u, 0x00000e44u, 0x00000e46u, 0x00000e48u, 0x0003003eu, 0x00000c2bu, 0x00000e49u, 0x000200f9u, 0x00000e35u, 0x000200f8u, 0x00000e35u, 0x000700f5u, 0x00000009u, 0x0000ae33u, 0x0000adbau, 0x00000debu, 0x00000e49u, 0x00000e34u, 0x000700f5u, 0x00000009u, 0x0000add4u, 0x0000adbau, 0x00000debu, 0x00000e3fu, 0x00000e34u, 0x0004003du, 0x00000058u, 0x00000e4au, 0x00000121u, 0x000300f7u, 0x00000e4cu, 0x00000000u, 0x000400fau, 0x00000e4au, 0x00000e4bu, 0x00000e4cu, 0x000200f8u, 0x00000e4bu, 0x00050050u, 0x0000004du, 0x00000e4fu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000e50u, 0x00000e4fu, 0x0004003du, 0x00000023u, 0x00000e52u, 0x0000011bu, 0x0003003eu, 0x00000e51u, 0x00000e52u, 0x0004003du, 0x00000006u, 0x00000e54u, 0x0000011cu, 0x0003003eu, 0x00000e53u, 0x00000e54u, 0x0003003eu, 0x00000e55u, 0x00000e50u, 0x00070039u, 0x00000009u, 0x00000e56u, 0x000000d7u, 0x00000e51u, 0x00000e53u, 0x00000e55u, 0x0003003eu, 0x00000c42u, 0x00000e56u, 0x000200f9u, 0x00000e4cu, 0x000200f8u, 0x00000e4cu, 0x000700f5u, 0x00000009u, 0x0000ae61u, 0x0000adbau, 0x00000e35u, 0x00000e56u, 0x00000e4bu, 0x000200f9u, 0x00000dedu, 0x000200f8u, 0x00000dedu, 0x000900f5u, 0x00000009u, 0x0000ae5cu, 0x0000ae5du, 0x00000e79u, 0x0000ae5fu, 0x00000e1bu, 0x0000ae61u, 0x00000e4cu, 0x000900f5u, 0x00000009u, 0x0000ae2du, 0x0000ae2fu, 0x00000e79u, 0x0000ae31u, 0x00000e1bu, 0x0000ae33u, 0x00000e4cu, 0x000900f5u, 0x00000009u, 0x0000adfdu, 0x00000e5fu, 0x00000e79u, 0x00000df9u, 0x00000e1bu, 0x00000e32u, 0x00000e4cu, 0x000900f5u, 0x00000009u, 0x0000adceu, 0x0000add0u, 0x00000e79u, 0x0000add2u, 0x00000e1bu, 0x0000add4u, 0x00000e4cu, 0x000200f9u, 0x00000ceau, 0x000200f8u, 0x00000ce8u, 0x00050041u, 0x00000038u, 0x00000e87u, 0x0000011bu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x00000e88u, 0x00000e87u, 0x000300f7u, 0x00000e8du, 0x00000000u, 0x000b00fbu, 0x00000e88u, 0x00000e8du, 0x00000000u, 0x00000e89u, 0x00000001u, 0x00000e8au, 0x00000002u, 0x00000e8bu, 0x00000003u, 0x00000e8cu, 0x000200f8u, 0x00000e89u, 0x0004007cu, 0x000000a0u, 0x00000e8fu, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000e91u, 0x0000011bu, 0x0003003eu, 0x00000e90u, 0x00000e91u, 0x0004003du, 0x00000006u, 0x00000e93u, 0x0000011cu, 0x0003003eu, 0x00000e92u, 0x00000e93u, 0x0003003eu, 0x00000e94u, 0x00000e8fu, 0x00070039u, 0x00000009u, 0x00000e95u, 0x000000abu, 0x00000e90u, 0x00000e92u, 0x00000e94u, 0x0003003eu, 0x00000bffu, 0x00000e95u, 0x0004003du, 0x00000058u, 0x00000e96u, 0x00000120u, 0x000300f7u, 0x00000e98u, 0x00000000u, 0x000400fau, 0x00000e96u, 0x00000e97u, 0x00000e98u, 0x000200f8u, 0x00000e97u, 0x00050050u, 0x0000004du, 0x00000e9bu, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000e9cu, 0x00000e9bu, 0x0004003du, 0x00000023u, 0x00000e9eu, 0x0000011bu, 0x0003003eu, 0x00000e9du, 0x00000e9eu, 0x0004003du, 0x00000006u, 0x00000ea0u, 0x0000011cu, 0x0003003eu, 0x00000e9fu, 0x00000ea0u, 0x0003003eu, 0x00000ea1u, 0x00000e9cu, 0x00070039u, 0x00000009u, 0x00000ea2u, 0x000000abu, 0x00000e9du, 0x00000e9fu, 0x00000ea1u, 0x0003003eu, 0x00000c17u, 0x00000ea2u, 0x00050050u, 0x0000004du, 0x00000ea5u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000ea6u, 0x00000ea5u, 0x0004003du, 0x00000023u, 0x00000ea8u, 0x0000011bu, 0x0003003eu, 0x00000ea7u, 0x00000ea8u, 0x0004003du, 0x00000006u, 0x00000eaau, 0x0000011cu, 0x0003003eu, 0x00000ea9u, 0x00000eaau, 0x0003003eu, 0x00000eabu, 0x00000ea6u, 0x00070039u, 0x00000009u, 0x00000eacu, 0x000000abu, 0x00000ea7u, 0x00000ea9u, 0x00000eabu, 0x0003003eu, 0x00000c2bu, 0x00000eacu, 0x000200f9u, 0x00000e98u, 0x000200f8u, 0x00000e98u, 0x000700f5u, 0x00000009u, 0x0000ae36u, 0x0000adbau, 0x00000e89u, 0x00000eacu, 0x00000e97u, 0x000700f5u, 0x00000009u, 0x0000add7u, 0x0000adbau, 0x00000e89u, 0x00000ea2u, 0x00000e97u, 0x0004003du, 0x00000058u, 0x00000eadu, 0x00000121u, 0x000300f7u, 0x00000eafu, 0x00000000u, 0x000400fau, 0x00000eadu, 0x00000eaeu, 0x00000eafu, 0x000200f8u, 0x00000eaeu, 0x00050050u, 0x0000004du, 0x00000eb2u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000eb3u, 0x00000eb2u, 0x0004003du, 0x00000023u, 0x00000eb5u, 0x0000011bu, 0x0003003eu, 0x00000eb4u, 0x00000eb5u, 0x0004003du, 0x00000006u, 0x00000eb7u, 0x0000011cu, 0x0003003eu, 0x00000eb6u, 0x00000eb7u, 0x0003003eu, 0x00000eb8u, 0x00000eb3u, 0x00070039u, 0x00000009u, 0x00000eb9u, 0x000000abu, 0x00000eb4u, 0x00000eb6u, 0x00000eb8u, 0x0003003eu, 0x00000c42u, 0x00000eb9u, 0x000200f9u, 0x00000eafu, 0x000200f8u, 0x00000eafu, 0x000700f5u, 0x00000009u, 0x0000ae64u, 0x0000adbau, 0x00000e98u, 0x00000eb9u, 0x00000eaeu, 0x000200f9u, 0x00000e8du, 0x000200f8u, 0x00000e8au, 0x0004007cu, 0x000000a0u, 0x00000ebcu, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000ebeu, 0x0000011bu, 0x0003003eu, 0x00000ebdu, 0x00000ebeu, 0x0004003du, 0x00000006u, 0x00000ec0u, 0x0000011cu, 0x0003003eu, 0x00000ebfu, 0x00000ec0u, 0x0003003eu, 0x00000ec1u, 0x00000ebcu, 0x00070039u, 0x00000009u, 0x00000ec2u, 0x000000dcu, 0x00000ebdu, 0x00000ebfu, 0x00000ec1u, 0x0003003eu, 0x00000bffu, 0x00000ec2u, 0x0004003du, 0x00000058u, 0x00000ec3u, 0x00000120u, 0x000300f7u, 0x00000ec5u, 0x00000000u, 0x000400fau, 0x00000ec3u, 0x00000ec4u, 0x00000ec5u, 0x000200f8u, 0x00000ec4u, 0x00050050u, 0x0000004du, 0x00000ec8u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000ec9u, 0x00000ec8u, 0x0004003du, 0x00000023u, 0x00000ecbu, 0x0000011bu, 0x0003003eu, 0x00000ecau, 0x00000ecbu, 0x0004003du, 0x00000006u, 0x00000ecdu, 0x0000011cu, 0x0003003eu, 0x00000eccu, 0x00000ecdu, 0x0003003eu, 0x00000eceu, 0x00000ec9u, 0x00070039u, 0x00000009u, 0x00000ecfu, 0x000000dcu, 0x00000ecau, 0x00000eccu, 0x00000eceu, 0x0003003eu, 0x00000c17u, 0x00000ecfu, 0x00050050u, 0x0000004du, 0x00000ed2u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000ed3u, 0x00000ed2u, 0x0004003du, 0x00000023u, 0x00000ed5u, 0x0000011bu, 0x0003003eu, 0x00000ed4u, 0x00000ed5u, 0x0004003du, 0x00000006u, 0x00000ed7u, 0x0000011cu, 0x0003003eu, 0x00000ed6u, 0x00000ed7u, 0x0003003eu, 0x00000ed8u, 0x00000ed3u, 0x00070039u, 0x00000009u, 0x00000ed9u, 0x000000dcu, 0x00000ed4u, 0x00000ed6u, 0x00000ed8u, 0x0003003eu, 0x00000c2bu, 0x00000ed9u, 0x000200f9u, 0x00000ec5u, 0x000200f8u, 0x00000ec5u, 0x000700f5u, 0x00000009u, 0x0000ae38u, 0x0000adbau, 0x00000e8au, 0x00000ed9u, 0x00000ec4u, 0x000700f5u, 0x00000009u, 0x0000add9u, 0x0000adbau, 0x00000e8au, 0x00000ecfu, 0x00000ec4u, 0x0004003du, 0x00000058u, 0x00000edau, 0x00000121u, 0x000300f7u, 0x00000edcu, 0x00000000u, 0x000400fau, 0x00000edau, 0x00000edbu, 0x00000edcu, 0x000200f8u, 0x00000edbu, 0x00050050u, 0x0000004du, 0x00000edfu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000ee0u, 0x00000edfu, 0x0004003du, 0x00000023u, 0x00000ee2u, 0x0000011bu, 0x0003003eu, 0x00000ee1u, 0x00000ee2u, 0x0004003du, 0x00000006u, 0x00000ee4u, 0x0000011cu, 0x0003003eu, 0x00000ee3u, 0x00000ee4u, 0x0003003eu, 0x00000ee5u, 0x00000ee0u, 0x00070039u, 0x00000009u, 0x00000ee6u, 0x000000dcu, 0x00000ee1u, 0x00000ee3u, 0x00000ee5u, 0x0003003eu, 0x00000c42u, 0x00000ee6u, 0x000200f9u, 0x00000edcu, 0x000200f8u, 0x00000edcu, 0x000700f5u, 0x00000009u, 0x0000ae66u, 0x0000adbau, 0x00000ec5u, 0x00000ee6u, 0x00000edbu, 0x000200f9u, 0x00000e8du, 0x000200f8u, 0x00000e8bu, 0x0004007cu, 0x000000a0u, 0x00000ee9u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000eebu, 0x0000011bu, 0x0003003eu, 0x00000eeau, 0x00000eebu, 0x0004003du, 0x00000006u, 0x00000eedu, 0x0000011cu, 0x0003003eu, 0x00000eecu, 0x00000eedu, 0x0003003eu, 0x00000eeeu, 0x00000ee9u, 0x00070039u, 0x00000009u, 0x00000eefu, 0x000000ecu, 0x00000eeau, 0x00000eecu, 0x00000eeeu, 0x0003003eu, 0x00000bffu, 0x00000eefu, 0x0004003du, 0x00000058u, 0x00000ef0u, 0x00000120u, 0x000300f7u, 0x00000ef2u, 0x00000000u, 0x000400fau, 0x00000ef0u, 0x00000ef1u, 0x00000ef2u, 0x000200f8u, 0x00000ef1u, 0x00050050u, 0x0000004du, 0x00000ef5u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000ef6u, 0x00000ef5u, 0x0004003du, 0x00000023u, 0x00000ef8u, 0x0000011bu, 0x0003003eu, 0x00000ef7u, 0x00000ef8u, 0x0004003du, 0x00000006u, 0x00000efau, 0x0000011cu, 0x0003003eu, 0x00000ef9u, 0x00000efau, 0x0003003eu, 0x00000efbu, 0x00000ef6u, 0x00070039u, 0x00000009u, 0x00000efcu, 0x000000ecu, 0x00000ef7u, 0x00000ef9u, 0x00000efbu, 0x0003003eu, 0x00000c17u, 0x00000efcu, 0x00050050u, 0x0000004du, 0x00000effu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f00u, 0x00000effu, 0x0004003du, 0x00000023u, 0x00000f02u, 0x0000011bu, 0x0003003eu, 0x00000f01u, 0x00000f02u, 0x0004003du, 0x00000006u, 0x00000f04u, 0x0000011cu, 0x0003003eu, 0x00000f03u, 0x00000f04u, 0x0003003eu, 0x00000f05u, 0x00000f00u, 0x00070039u, 0x00000009u, 0x00000f06u, 0x000000ecu, 0x00000f01u, 0x00000f03u, 0x00000f05u, 0x0003003eu, 0x00000c2bu, 0x00000f06u, 0x000200f9u, 0x00000ef2u, 0x000200f8u, 0x00000ef2u, 0x000700f5u, 0x00000009u, 0x0000ae3au, 0x0000adbau, 0x00000e8bu, 0x00000f06u, 0x00000ef1u, 0x000700f5u, 0x00000009u, 0x0000addbu, 0x0000adbau, 0x00000e8bu, 0x00000efcu, 0x00000ef1u, 0x0004003du, 0x00000058u, 0x00000f07u, 0x00000121u, 0x000300f7u, 0x00000f09u, 0x00000000u, 0x000400fau, 0x00000f07u, 0x00000f08u, 0x00000f09u, 0x000200f8u, 0x00000f08u, 0x00050050u, 0x0000004du, 0x00000f0cu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f0du, 0x00000f0cu, 0x0004003du, 0x00000023u, 0x00000f0fu, 0x0000011bu, 0x0003003eu, 0x00000f0eu, 0x00000f0fu, 0x0004003du, 0x00000006u, 0x00000f11u, 0x0000011cu, 0x0003003eu, 0x00000f10u, 0x00000f11u, 0x0003003eu, 0x00000f12u, 0x00000f0du, 0x00070039u, 0x00000009u, 0x00000f13u, 0x000000ecu, 0x00000f0eu, 0x00000f10u, 0x00000f12u, 0x0003003eu, 0x00000c42u, 0x00000f13u, 0x000200f9u, 0x00000f09u, 0x000200f8u, 0x00000f09u, 0x000700f5u, 0x00000009u, 0x0000ae68u, 0x0000adbau, 0x00000ef2u, 0x00000f13u, 0x00000f08u, 0x000200f9u, 0x00000e8du, 0x000200f8u, 0x00000e8cu, 0x0004007cu, 0x000000a0u, 0x00000f16u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000f18u, 0x0000011bu, 0x0003003eu, 0x00000f17u, 0x00000f18u, 0x0004003du, 0x00000006u, 0x00000f1au, 0x0000011cu, 0x0003003eu, 0x00000f19u, 0x00000f1au, 0x0003003eu, 0x00000f1bu, 0x00000f16u, 0x00070039u, 0x00000009u, 0x00000f1cu, 0x000000cau, 0x00000f17u, 0x00000f19u, 0x00000f1bu, 0x0003003eu, 0x00000bffu, 0x00000f1cu, 0x0004003du, 0x00000058u, 0x00000f1du, 0x00000120u, 0x000300f7u, 0x00000f1fu, 0x00000000u, 0x000400fau, 0x00000f1du, 0x00000f1eu, 0x00000f1fu, 0x000200f8u, 0x00000f1eu, 0x00050050u, 0x0000004du, 0x00000f22u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000f23u, 0x00000f22u, 0x0004003du, 0x00000023u, 0x00000f25u, 0x0000011bu, 0x0003003eu, 0x00000f24u, 0x00000f25u, 0x0004003du, 0x00000006u, 0x00000f27u, 0x0000011cu, 0x0003003eu, 0x00000f26u, 0x00000f27u, 0x0003003eu, 0x00000f28u, 0x00000f23u, 0x00070039u, 0x00000009u, 0x00000f29u, 0x000000cau, 0x00000f24u, 0x00000f26u, 0x00000f28u, 0x0003003eu, 0x00000c17u, 0x00000f29u, 0x00050050u, 0x0000004du, 0x00000f2cu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f2du, 0x00000f2cu, 0x0004003du, 0x00000023u, 0x00000f2fu, 0x0000011bu, 0x0003003eu, 0x00000f2eu, 0x00000f2fu, 0x0004003du, 0x00000006u, 0x00000f31u, 0x0000011cu, 0x0003003eu, 0x00000f30u, 0x00000f31u, 0x0003003eu, 0x00000f32u, 0x00000f2du, 0x00070039u, 0x00000009u, 0x00000f33u, 0x000000cau, 0x00000f2eu, 0x00000f30u, 0x00000f32u, 0x0003003eu, 0x00000c2bu, 0x00000f33u, 0x000200f9u, 0x00000f1fu, 0x000200f8u, 0x00000f1fu, 0x000700f5u, 0x00000009u, 0x0000ae3cu, 0x0000adbau, 0x00000e8cu, 0x00000f33u, 0x00000f1eu, 0x000700f5u, 0x00000009u, 0x0000adddu, 0x0000adbau, 0x00000e8cu, 0x00000f29u, 0x00000f1eu, 0x0004003du, 0x00000058u, 0x00000f34u, 0x00000121u, 0x000300f7u, 0x00000f36u, 0x00000000u, 0x000400fau, 0x00000f34u, 0x00000f35u, 0x00000f36u, 0x000200f8u, 0x00000f35u, 0x00050050u, 0x0000004du, 0x00000f39u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f3au, 0x00000f39u, 0x0004003du, 0x00000023u, 0x00000f3cu, 0x0000011bu, 0x0003003eu, 0x00000f3bu, 0x00000f3cu, 0x0004003du, 0x00000006u, 0x00000f3eu, 0x0000011cu, 0x0003003eu, 0x00000f3du, 0x00000f3eu, 0x0003003eu, 0x00000f3fu, 0x00000f3au, 0x00070039u, 0x00000009u, 0x00000f40u, 0x000000cau, 0x00000f3bu, 0x00000f3du, 0x00000f3fu, 0x0003003eu, 0x00000c42u, 0x00000f40u, 0x000200f9u, 0x00000f36u, 0x000200f8u, 0x00000f36u, 0x000700f5u, 0x00000009u, 0x0000ae6au, 0x0000adbau, 0x00000f1fu, 0x00000f40u, 0x00000f35u, 0x000200f9u, 0x00000e8du, 0x000200f8u, 0x00000e8du, 0x000d00f5u, 0x00000009u, 0x0000ae63u, 0x0000adbau, 0x00000ce8u, 0x0000ae64u, 0x00000eafu, 0x0000ae66u, 0x00000edcu, 0x0000ae68u, 0x00000f09u, 0x0000ae6au, 0x00000f36u, 0x000d00f5u, 0x00000009u, 0x0000ae34u, 0x0000adbau, 0x00000ce8u, 0x0000ae36u, 0x00000eafu, 0x0000ae38u, 0x00000edcu, 0x0000ae3au, 0x00000f09u, 0x0000ae3cu, 0x00000f36u, 0x000d00f5u, 0x00000009u, 0x0000ae04u, 0x0000adbau, 0x00000ce8u, 0x00000e95u, 0x00000eafu, 0x00000ec2u, 0x00000edcu, 0x00000eefu, 0x00000f09u, 0x00000f1cu, 0x00000f36u, 0x000d00f5u, 0x00000009u, 0x0000add5u, 0x0000adbau, 0x00000ce8u, 0x0000add7u, 0x00000eafu, 0x0000add9u, 0x00000edcu, 0x0000addbu, 0x00000f09u, 0x0000adddu, 0x00000f36u, 0x000200f9u, 0x00000ceau, 0x000200f8u, 0x00000ce9u, 0x00050041u, 0x00000038u, 0x00000f44u, 0x0000011bu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x00000f45u, 0x00000f44u, 0x000300f7u, 0x00000f49u, 0x00000000u, 0x000700fbu, 0x00000f45u, 0x00000f48u, 0x00000000u, 0x00000f46u, 0x00000001u, 0x00000f47u, 0x000200f8u, 0x00000f48u, 0x0004007cu, 0x000000a0u, 0x00000fa5u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000fa7u, 0x0000011bu, 0x0003003eu, 0x00000fa6u, 0x00000fa7u, 0x0004003du, 0x00000006u, 0x00000fa9u, 0x0000011cu, 0x0003003eu, 0x00000fa8u, 0x00000fa9u, 0x0003003eu, 0x00000faau, 0x00000fa5u, 0x00070039u, 0x00000009u, 0x00000fabu, 0x000000cau, 0x00000fa6u, 0x00000fa8u, 0x00000faau, 0x0003003eu, 0x00000bffu, 0x00000fabu, 0x0004003du, 0x00000058u, 0x00000facu, 0x00000120u, 0x000300f7u, 0x00000faeu, 0x00000000u, 0x000400fau, 0x00000facu, 0x00000fadu, 0x00000faeu, 0x000200f8u, 0x00000fadu, 0x00050050u, 0x0000004du, 0x00000fb1u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000fb2u, 0x00000fb1u, 0x0004003du, 0x00000023u, 0x00000fb4u, 0x0000011bu, 0x0003003eu, 0x00000fb3u, 0x00000fb4u, 0x0004003du, 0x00000006u, 0x00000fb6u, 0x0000011cu, 0x0003003eu, 0x00000fb5u, 0x00000fb6u, 0x0003003eu, 0x00000fb7u, 0x00000fb2u, 0x00070039u, 0x00000009u, 0x00000fb8u, 0x000000cau, 0x00000fb3u, 0x00000fb5u, 0x00000fb7u, 0x0003003eu, 0x00000c17u, 0x00000fb8u, 0x00050050u, 0x0000004du, 0x00000fbbu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000fbcu, 0x00000fbbu, 0x0004003du, 0x00000023u, 0x00000fbeu, 0x0000011bu, 0x0003003eu, 0x00000fbdu, 0x00000fbeu, 0x0004003du, 0x00000006u, 0x00000fc0u, 0x0000011cu, 0x0003003eu, 0x00000fbfu, 0x00000fc0u, 0x0003003eu, 0x00000fc1u, 0x00000fbcu, 0x00070039u, 0x00000009u, 0x00000fc2u, 0x000000cau, 0x00000fbdu, 0x00000fbfu, 0x00000fc1u, 0x0003003eu, 0x00000c2bu, 0x00000fc2u, 0x000200f9u, 0x00000faeu, 0x000200f8u, 0x00000faeu, 0x000700f5u, 0x00000009u, 0x0000ae3fu, 0x0000adbau, 0x00000f48u, 0x00000fc2u, 0x00000fadu, 0x000700f5u, 0x00000009u, 0x0000ade0u, 0x0000adbau, 0x00000f48u, 0x00000fb8u, 0x00000fadu, 0x0004003du, 0x00000058u, 0x00000fc3u, 0x00000121u, 0x000300f7u, 0x00000fc5u, 0x00000000u, 0x000400fau, 0x00000fc3u, 0x00000fc4u, 0x00000fc5u, 0x000200f8u, 0x00000fc4u, 0x00050050u, 0x0000004du, 0x00000fc8u, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000fc9u, 0x00000fc8u, 0x0004003du, 0x00000023u, 0x00000fcbu, 0x0000011bu, 0x0003003eu, 0x00000fcau, 0x00000fcbu, 0x0004003du, 0x00000006u, 0x00000fcdu, 0x0000011cu, 0x0003003eu, 0x00000fccu, 0x00000fcdu, 0x0003003eu, 0x00000fceu, 0x00000fc9u, 0x00070039u, 0x00000009u, 0x00000fcfu, 0x000000cau, 0x00000fcau, 0x00000fccu, 0x00000fceu, 0x0003003eu, 0x00000c42u, 0x00000fcfu, 0x000200f9u, 0x00000fc5u, 0x000200f8u, 0x00000fc5u, 0x000700f5u, 0x00000009u, 0x0000ae6du, 0x0000adbau, 0x00000faeu, 0x00000fcfu, 0x00000fc4u, 0x000200f9u, 0x00000f49u, 0x000200f8u, 0x00000f46u, 0x0004007cu, 0x000000a0u, 0x00000f4bu, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000f4du, 0x0000011bu, 0x0003003eu, 0x00000f4cu, 0x00000f4du, 0x0004003du, 0x00000006u, 0x00000f4fu, 0x0000011cu, 0x0003003eu, 0x00000f4eu, 0x00000f4fu, 0x0003003eu, 0x00000f50u, 0x00000f4bu, 0x00070039u, 0x00000009u, 0x00000f51u, 0x000000a6u, 0x00000f4cu, 0x00000f4eu, 0x00000f50u, 0x0003003eu, 0x00000bffu, 0x00000f51u, 0x0004003du, 0x00000058u, 0x00000f52u, 0x00000120u, 0x000300f7u, 0x00000f54u, 0x00000000u, 0x000400fau, 0x00000f52u, 0x00000f53u, 0x00000f54u, 0x000200f8u, 0x00000f53u, 0x00050050u, 0x0000004du, 0x00000f57u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000f58u, 0x00000f57u, 0x0004003du, 0x00000023u, 0x00000f5au, 0x0000011bu, 0x0003003eu, 0x00000f59u, 0x00000f5au, 0x0004003du, 0x00000006u, 0x00000f5cu, 0x0000011cu, 0x0003003eu, 0x00000f5bu, 0x00000f5cu, 0x0003003eu, 0x00000f5du, 0x00000f58u, 0x00070039u, 0x00000009u, 0x00000f5eu, 0x000000a6u, 0x00000f59u, 0x00000f5bu, 0x00000f5du, 0x0003003eu, 0x00000c17u, 0x00000f5eu, 0x00050050u, 0x0000004du, 0x00000f61u, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f62u, 0x00000f61u, 0x0004003du, 0x00000023u, 0x00000f64u, 0x0000011bu, 0x0003003eu, 0x00000f63u, 0x00000f64u, 0x0004003du, 0x00000006u, 0x00000f66u, 0x0000011cu, 0x0003003eu, 0x00000f65u, 0x00000f66u, 0x0003003eu, 0x00000f67u, 0x00000f62u, 0x00070039u, 0x00000009u, 0x00000f68u, 0x000000a6u, 0x00000f63u, 0x00000f65u, 0x00000f67u, 0x0003003eu, 0x00000c2bu, 0x00000f68u, 0x000200f9u, 0x00000f54u, 0x000200f8u, 0x00000f54u, 0x000700f5u, 0x00000009u, 0x0000ae41u, 0x0000adbau, 0x00000f46u, 0x00000f68u, 0x00000f53u, 0x000700f5u, 0x00000009u, 0x0000ade2u, 0x0000adbau, 0x00000f46u, 0x00000f5eu, 0x00000f53u, 0x0004003du, 0x00000058u, 0x00000f69u, 0x00000121u, 0x000300f7u, 0x00000f6bu, 0x00000000u, 0x000400fau, 0x00000f69u, 0x00000f6au, 0x00000f6bu, 0x000200f8u, 0x00000f6au, 0x00050050u, 0x0000004du, 0x00000f6eu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f6fu, 0x00000f6eu, 0x0004003du, 0x00000023u, 0x00000f71u, 0x0000011bu, 0x0003003eu, 0x00000f70u, 0x00000f71u, 0x0004003du, 0x00000006u, 0x00000f73u, 0x0000011cu, 0x0003003eu, 0x00000f72u, 0x00000f73u, 0x0003003eu, 0x00000f74u, 0x00000f6fu, 0x00070039u, 0x00000009u, 0x00000f75u, 0x000000a6u, 0x00000f70u, 0x00000f72u, 0x00000f74u, 0x0003003eu, 0x00000c42u, 0x00000f75u, 0x000200f9u, 0x00000f6bu, 0x000200f8u, 0x00000f6bu, 0x000700f5u, 0x00000009u, 0x0000ae6fu, 0x0000adbau, 0x00000f54u, 0x00000f75u, 0x00000f6au, 0x000200f9u, 0x00000f49u, 0x000200f8u, 0x00000f47u, 0x0004007cu, 0x000000a0u, 0x00000f78u, 0x0000ad2au, 0x0004003du, 0x00000023u, 0x00000f7au, 0x0000011bu, 0x0003003eu, 0x00000f79u, 0x00000f7au, 0x0004003du, 0x00000006u, 0x00000f7cu, 0x0000011cu, 0x0003003eu, 0x00000f7bu, 0x00000f7cu, 0x0003003eu, 0x00000f7du, 0x00000f78u, 0x00070039u, 0x00000009u, 0x00000f7eu, 0x000000d7u, 0x00000f79u, 0x00000f7bu, 0x00000f7du, 0x0003003eu, 0x00000bffu, 0x00000f7eu, 0x0004003du, 0x00000058u, 0x00000f7fu, 0x00000120u, 0x000300f7u, 0x00000f81u, 0x00000000u, 0x000400fau, 0x00000f7fu, 0x00000f80u, 0x00000f81u, 0x000200f8u, 0x00000f80u, 0x00050050u, 0x0000004du, 0x00000f84u, 0x00000bb8u, 0x00000bc8u, 0x0004007cu, 0x000000a0u, 0x00000f85u, 0x00000f84u, 0x0004003du, 0x00000023u, 0x00000f87u, 0x0000011bu, 0x0003003eu, 0x00000f86u, 0x00000f87u, 0x0004003du, 0x00000006u, 0x00000f89u, 0x0000011cu, 0x0003003eu, 0x00000f88u, 0x00000f89u, 0x0003003eu, 0x00000f8au, 0x00000f85u, 0x00070039u, 0x00000009u, 0x00000f8bu, 0x000000d7u, 0x00000f86u, 0x00000f88u, 0x00000f8au, 0x0003003eu, 0x00000c17u, 0x00000f8bu, 0x00050050u, 0x0000004du, 0x00000f8eu, 0x00000ba9u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f8fu, 0x00000f8eu, 0x0004003du, 0x00000023u, 0x00000f91u, 0x0000011bu, 0x0003003eu, 0x00000f90u, 0x00000f91u, 0x0004003du, 0x00000006u, 0x00000f93u, 0x0000011cu, 0x0003003eu, 0x00000f92u, 0x00000f93u, 0x0003003eu, 0x00000f94u, 0x00000f8fu, 0x00070039u, 0x00000009u, 0x00000f95u, 0x000000d7u, 0x00000f90u, 0x00000f92u, 0x00000f94u, 0x0003003eu, 0x00000c2bu, 0x00000f95u, 0x000200f9u, 0x00000f81u, 0x000200f8u, 0x00000f81u, 0x000700f5u, 0x00000009u, 0x0000ae43u, 0x0000adbau, 0x00000f47u, 0x00000f95u, 0x00000f80u, 0x000700f5u, 0x00000009u, 0x0000ade4u, 0x0000adbau, 0x00000f47u, 0x00000f8bu, 0x00000f80u, 0x0004003du, 0x00000058u, 0x00000f96u, 0x00000121u, 0x000300f7u, 0x00000f98u, 0x00000000u, 0x000400fau, 0x00000f96u, 0x00000f97u, 0x00000f98u, 0x000200f8u, 0x00000f97u, 0x00050050u, 0x0000004du, 0x00000f9bu, 0x00000bb8u, 0x00000bcau, 0x0004007cu, 0x000000a0u, 0x00000f9cu, 0x00000f9bu, 0x0004003du, 0x00000023u, 0x00000f9eu, 0x0000011bu, 0x0003003eu, 0x00000f9du, 0x00000f9eu, 0x0004003du, 0x00000006u, 0x00000fa0u, 0x0000011cu, 0x0003003eu, 0x00000f9fu, 0x00000fa0u, 0x0003003eu, 0x00000fa1u, 0x00000f9cu, 0x00070039u, 0x00000009u, 0x00000fa2u, 0x000000d7u, 0x00000f9du, 0x00000f9fu, 0x00000fa1u, 0x0003003eu, 0x00000c42u, 0x00000fa2u, 0x000200f9u, 0x00000f98u, 0x000200f8u, 0x00000f98u, 0x000700f5u, 0x00000009u, 0x0000ae71u, 0x0000adbau, 0x00000f81u, 0x00000fa2u, 0x00000f97u, 0x000200f9u, 0x00000f49u, 0x000200f8u, 0x00000f49u, 0x000900f5u, 0x00000009u, 0x0000ae6cu, 0x0000ae6du, 0x00000fc5u, 0x0000ae6fu, 0x00000f6bu, 0x0000ae71u, 0x00000f98u, 0x000900f5u, 0x00000009u, 0x0000ae3du, 0x0000ae3fu, 0x00000fc5u, 0x0000ae41u, 0x00000f6bu, 0x0000ae43u, 0x00000f98u, 0x000900f5u, 0x00000009u, 0x0000ae0du, 0x00000fabu, 0x00000fc5u, 0x00000f51u, 0x00000f6bu, 0x00000f7eu, 0x00000f98u, 0x000900f5u, 0x00000009u, 0x0000addeu, 0x0000ade0u, 0x00000fc5u, 0x0000ade2u, 0x00000f6bu, 0x0000ade4u, 0x00000f98u, 0x000200f9u, 0x00000ceau, 0x000200f8u, 0x00000ceau, 0x000f00f5u, 0x00000009u, 0x0000ae51u, 0x0000adbau, 0x00000ce2u, 0x0000ae52u, 0x00000cf1u, 0x0000ae5bu, 0x00000dc2u, 0x0000ae5cu, 0x00000dedu, 0x0000ae63u, 0x00000e8du, 0x0000ae6cu, 0x00000f49u, 0x000f00f5u, 0x00000009u, 0x0000ae22u, 0x0000adbau, 0x00000ce2u, 0x0000ae23u, 0x00000cf1u, 0x0000ae2cu, 0x00000dc2u, 0x0000ae2du, 0x00000dedu, 0x0000ae34u, 0x00000e8du, 0x0000ae3du, 0x00000f49u, 0x000f00f5u, 0x00000009u, 0x0000adf2u, 0x0000adbau, 0x00000ce2u, 0x0000adf3u, 0x00000cf1u, 0x00000dbfu, 0x00000dc2u, 0x0000adfdu, 0x00000dedu, 0x0000ae04u, 0x00000e8du, 0x0000ae0du, 0x00000f49u, 0x000f00f5u, 0x00000009u, 0x0000adc3u, 0x0000adbau, 0x00000ce2u, 0x0000adc4u, 0x00000cf1u, 0x0000adcdu, 0x00000dc2u, 0x0000adceu, 0x00000dedu, 0x0000add5u, 0x00000e8du, 0x0000addeu, 0x00000f49u, 0x000200f9u, 0x00000bedu, 0x000200f8u, 0x00000bedu, 0x000700f5u, 0x00000009u, 0x0000ae44u, 0x0000ae45u, 0x00000bf1u, 0x0000ae51u, 0x00000ceau, 0x000700f5u, 0x00000009u, 0x0000ae15u, 0x0000ae16u, 0x00000bf1u, 0x0000ae22u, 0x00000ceau, 0x000700f5u, 0x00000009u, 0x0000ade6u, 0x0000ade7u, 0x00000bf1u, 0x0000adf2u, 0x00000ceau, 0x000700f5u, 0x00000009u, 0x0000adb5u, 0x0000adb6u, 0x00000bf1u, 0x0000adc3u, 0x00000ceau, 0x0004003du, 0x00000058u, 0x00000fd4u, 0x00000122u, 0x000300f7u, 0x00000fd6u, 0x00000000u, 0x000400fau, 0x00000fd4u, 0x00000fd5u, 0x0000100cu, 0x000200f8u, 0x00000fd5u, 0x0004003du, 0x00000009u, 0x00000fd8u, 0x00000123u, 0x00050051u, 0x00000008u, 0x00000fd9u, 0x00000fd8u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00000fdau, 0x00000fd8u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00000fdbu, 0x00000fd8u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00000fdcu, 0x00000fd8u, 0x00000003u, 0x000600cau, 0x00000009u, 0x00000fdeu, 0x00000fd8u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00000fd7u, 0x00000fdeu, 0x000300f7u, 0x00000fe4u, 0x00000000u, 0x000400fau, 0x00000bdfu, 0x00000fe3u, 0x00000fe7u, 0x000200f8u, 0x00000fe3u, 0x0004003du, 0x00000009u, 0x00000fe5u, 0x00000fd7u, 0x0007004fu, 0x0000004du, 0x00000fe6u, 0x00000fe5u, 0x00000fe5u, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00000fe2u, 0x00000fe6u, 0x000200f9u, 0x00000fe4u, 0x000200f8u, 0x00000fe7u, 0x0004003du, 0x00000009u, 0x00000fe8u, 0x00000fd7u, 0x0007004fu, 0x0000004du, 0x00000fe9u, 0x00000fe8u, 0x00000fe8u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00000fe2u, 0x00000fe9u, 0x000200f9u, 0x00000fe4u, 0x000200f8u, 0x00000fe4u, 0x000700f5u, 0x0000004du, 0x0000ae9eu, 0x00000fe6u, 0x00000fe3u, 0x00000fe9u, 0x00000fe7u, 0x0003003eu, 0x00000fdfu, 0x0000ae9eu, 0x00050041u, 0x00000038u, 0x00000fecu, 0x00000fdfu, 0x000002d7u, 0x0004003du, 0x00000008u, 0x00000fedu, 0x00000fecu, 0x00050082u, 0x00000009u, 0x00000ff0u, 0x0000adb5u, 0x0000ade6u, 0x00070050u, 0x00000009u, 0x00000ff1u, 0x00000fedu, 0x00000fedu, 0x00000fedu, 0x00000fedu, 0x00050084u, 0x00000009u, 0x00000ff2u, 0x00000ff1u, 0x00000ff0u, 0x00050041u, 0x00000038u, 0x00000ff3u, 0x00000fdfu, 0x0000032au, 0x0004003du, 0x00000008u, 0x00000ff4u, 0x00000ff3u, 0x00050082u, 0x00000009u, 0x00000ff7u, 0x0000ae15u, 0x0000ade6u, 0x00070050u, 0x00000009u, 0x00000ff8u, 0x00000ff4u, 0x00000ff4u, 0x00000ff4u, 0x00000ff4u, 0x00050084u, 0x00000009u, 0x00000ff9u, 0x00000ff8u, 0x00000ff7u, 0x00050080u, 0x00000009u, 0x00000ffau, 0x00000ff2u, 0x00000ff9u, 0x00050080u, 0x00000009u, 0x00000ffcu, 0x00000ffau, 0x0000b1b9u, 0x0003003eu, 0x00000febu, 0x00000ffcu, 0x000500c3u, 0x00000009u, 0x00000fffu, 0x00000ffcu, 0x0000b1c3u, 0x0003003eu, 0x00000febu, 0x00000fffu, 0x00050041u, 0x00000038u, 0x00001000u, 0x00000fd7u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001001u, 0x00001000u, 0x00070050u, 0x00000009u, 0x00001003u, 0x00001001u, 0x00001001u, 0x00001001u, 0x00001001u, 0x00050080u, 0x00000009u, 0x00001004u, 0x00000fffu, 0x00001003u, 0x0003003eu, 0x00000febu, 0x00001004u, 0x00050051u, 0x00000008u, 0x00001007u, 0x00001004u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001008u, 0x00001004u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001009u, 0x00001004u, 0x00000002u, 0x00050051u, 0x00000008u, 0x0000100au, 0x00001004u, 0x00000003u, 0x0003003eu, 0x00001005u, 0x00001004u, 0x000200f9u, 0x00000fd6u, 0x000200f8u, 0x0000100cu, 0x000300f7u, 0x0000100fu, 0x00000000u, 0x000400fau, 0x00000bdcu, 0x0000100eu, 0x00001047u, 0x000200f8u, 0x0000100eu, 0x0004003du, 0x00000058u, 0x00001010u, 0x00000120u, 0x000300f7u, 0x00001012u, 0x00000000u, 0x000400fau, 0x00001010u, 0x00001011u, 0x00001045u, 0x000200f8u, 0x00001011u, 0x000500c7u, 0x00000008u, 0x00001015u, 0x00000ba9u, 0x00000194u, 0x000500c4u, 0x00000008u, 0x00001016u, 0x00001015u, 0x0000019du, 0x0004003du, 0x00000008u, 0x00001018u, 0x00000b9bu, 0x000500c3u, 0x00000008u, 0x00001019u, 0x00001018u, 0x00000194u, 0x000500c5u, 0x00000008u, 0x0000101au, 0x00001016u, 0x00001019u, 0x0003003eu, 0x00001013u, 0x0000101au, 0x0004003du, 0x00000008u, 0x0000101eu, 0x00000b9du, 0x00050050u, 0x0000004du, 0x0000101fu, 0x0000101au, 0x0000101eu, 0x0007004fu, 0x0000004du, 0x00001022u, 0x0000ade6u, 0x0000ade6u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001020u, 0x00001022u, 0x0007004fu, 0x0000004du, 0x00001025u, 0x0000adb5u, 0x0000adb5u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001023u, 0x00001025u, 0x0007004fu, 0x0000004du, 0x00001028u, 0x0000ae15u, 0x0000ae15u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001026u, 0x00001028u, 0x0007004fu, 0x0000004du, 0x0000102bu, 0x0000ae44u, 0x0000ae44u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001029u, 0x0000102bu, 0x0003003eu, 0x0000102cu, 0x0000101fu, 0x00090039u, 0x0000004du, 0x0000102du, 0x00000118u, 0x00001020u, 0x00001023u, 0x00001026u, 0x00001029u, 0x0000102cu, 0x0003003eu, 0x0000101bu, 0x0000102du, 0x0007004fu, 0x0000004du, 0x00001031u, 0x0000ade6u, 0x0000ade6u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000102fu, 0x00001031u, 0x0007004fu, 0x0000004du, 0x00001034u, 0x0000adb5u, 0x0000adb5u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001032u, 0x00001034u, 0x0007004fu, 0x0000004du, 0x00001037u, 0x0000ae15u, 0x0000ae15u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001035u, 0x00001037u, 0x0007004fu, 0x0000004du, 0x0000103au, 0x0000ae44u, 0x0000ae44u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001038u, 0x0000103au, 0x0004003du, 0x0000004du, 0x0000103cu, 0x00000b94u, 0x0003003eu, 0x0000103bu, 0x0000103cu, 0x00090039u, 0x0000004du, 0x0000103du, 0x00000118u, 0x0000102fu, 0x00001032u, 0x00001035u, 0x00001038u, 0x0000103bu, 0x0003003eu, 0x0000102eu, 0x0000103du, 0x00050051u, 0x00000008u, 0x00001040u, 0x0000102du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001041u, 0x0000102du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001042u, 0x0000103du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001043u, 0x0000103du, 0x00000001u, 0x00070050u, 0x00000009u, 0x00001044u, 0x00001040u, 0x00001041u, 0x00001042u, 0x00001043u, 0x0003003eu, 0x00001005u, 0x00001044u, 0x000200f9u, 0x00001012u, 0x000200f8u, 0x00001045u, 0x0003003eu, 0x00001005u, 0x0000ade6u, 0x000200f9u, 0x00001012u, 0x000200f8u, 0x00001012u, 0x000700f5u, 0x00000009u, 0x0000aea4u, 0x00001044u, 0x00001011u, 0x0000ade6u, 0x00001045u, 0x000200f9u, 0x0000100fu, 0x000200f8u, 0x00001047u, 0x0004003du, 0x00000058u, 0x00001048u, 0x00000121u, 0x000300f7u, 0x0000104au, 0x00000000u, 0x000400fau, 0x00001048u, 0x00001049u, 0x00001056u, 0x000200f8u, 0x00001049u, 0x00050080u, 0x00000009u, 0x0000104du, 0x0000ade6u, 0x0000ae15u, 0x00050080u, 0x00000009u, 0x0000104fu, 0x0000104du, 0x0000adb5u, 0x00050080u, 0x00000009u, 0x00001051u, 0x0000104fu, 0x0000ae44u, 0x00050080u, 0x00000009u, 0x00001053u, 0x00001051u, 0x0000b1c4u, 0x000500c3u, 0x00000009u, 0x00001055u, 0x00001053u, 0x0000b1c4u, 0x0003003eu, 0x00001005u, 0x00001055u, 0x000200f9u, 0x0000104au, 0x000200f8u, 0x00001056u, 0x000300f7u, 0x0000105cu, 0x00000000u, 0x000400fau, 0x00000bdfu, 0x0000105bu, 0x00001061u, 0x000200f8u, 0x0000105bu, 0x0004003du, 0x0000004du, 0x0000105du, 0x00000b94u, 0x0007004fu, 0x0000004du, 0x0000105eu, 0x0000105du, 0x0000105du, 0x00000001u, 0x00000000u, 0x00050082u, 0x0000004du, 0x00001060u, 0x0000b1c5u, 0x0000105eu, 0x0003003eu, 0x0000105au, 0x00001060u, 0x000200f9u, 0x0000105cu, 0x000200f8u, 0x00001061u, 0x0004003du, 0x0000004du, 0x00001062u, 0x00000b94u, 0x0003003eu, 0x0000105au, 0x00001062u, 0x000200f9u, 0x0000105cu, 0x000200f8u, 0x0000105cu, 0x000700f5u, 0x0000004du, 0x0000adb3u, 0x00001060u, 0x0000105bu, 0x00001062u, 0x00001061u, 0x00050051u, 0x00000008u, 0x00001064u, 0x0000adb3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001065u, 0x0000adb3u, 0x00000001u, 0x0003003eu, 0x00001057u, 0x0000adb3u, 0x00050082u, 0x00000009u, 0x00001069u, 0x0000adb5u, 0x0000ade6u, 0x00050041u, 0x00000038u, 0x0000106au, 0x00001057u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000106bu, 0x0000106au, 0x00070050u, 0x00000009u, 0x0000106cu, 0x0000106bu, 0x0000106bu, 0x0000106bu, 0x0000106bu, 0x00050084u, 0x00000009u, 0x0000106du, 0x00001069u, 0x0000106cu, 0x0003003eu, 0x00001005u, 0x0000106du, 0x00050082u, 0x00000009u, 0x00001070u, 0x0000ae15u, 0x0000ade6u, 0x00050041u, 0x00000038u, 0x00001071u, 0x00001057u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001072u, 0x00001071u, 0x00070050u, 0x00000009u, 0x00001073u, 0x00001072u, 0x00001072u, 0x00001072u, 0x00001072u, 0x00050084u, 0x00000009u, 0x00001074u, 0x00001070u, 0x00001073u, 0x00050080u, 0x00000009u, 0x00001076u, 0x0000106du, 0x00001074u, 0x0003003eu, 0x00001005u, 0x00001076u, 0x00050080u, 0x00000009u, 0x00001079u, 0x00001076u, 0x0000b1c6u, 0x0003003eu, 0x00001005u, 0x00001079u, 0x000500c3u, 0x00000009u, 0x0000107cu, 0x00001079u, 0x0000b1c7u, 0x0003003eu, 0x00001005u, 0x0000107cu, 0x00050080u, 0x00000009u, 0x0000107fu, 0x0000107cu, 0x0000ade6u, 0x0003003eu, 0x00001005u, 0x0000107fu, 0x000200f9u, 0x0000104au, 0x000200f8u, 0x0000104au, 0x000700f5u, 0x00000009u, 0x0000aea5u, 0x00001055u, 0x00001049u, 0x0000107fu, 0x0000105cu, 0x000200f9u, 0x0000100fu, 0x000200f8u, 0x0000100fu, 0x000700f5u, 0x00000009u, 0x0000aea3u, 0x0000aea4u, 0x00001012u, 0x0000aea5u, 0x0000104au, 0x000200f9u, 0x00000fd6u, 0x000200f8u, 0x00000fd6u, 0x000700f5u, 0x00000009u, 0x0000aea2u, 0x00001004u, 0x00000fe4u, 0x0000aea3u, 0x0000100fu, 0x000200feu, 0x0000aea2u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000133u, 0x00000000u, 0x00000126u, 0x00030037u, 0x00000007u, 0x00000127u, 0x00030037u, 0x00000007u, 0x00000128u, 0x00030037u, 0x00000038u, 0x00000129u, 0x00030037u, 0x00000007u, 0x0000012au, 0x00030037u, 0x00000038u, 0x0000012bu, 0x00030037u, 0x00000068u, 0x0000012cu, 0x00030037u, 0x00000068u, 0x0000012du, 0x00030037u, 0x00000068u, 0x0000012eu, 0x00030037u, 0x00000059u, 0x0000012fu, 0x00030037u, 0x00000059u, 0x00000130u, 0x00030037u, 0x00000059u, 0x00000131u, 0x00030037u, 0x00000059u, 0x00000132u, 0x000200f8u, 0x00000134u, 0x0004003bu, 0x00000059u, 0x00001083u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001085u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001086u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000108bu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001094u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000109du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000010a1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000010c6u, 0x00000007u, 0x0003003eu, 0x00001083u, 0x00001084u, 0x0003003eu, 0x00001085u, 0x00001084u, 0x0003003eu, 0x00001086u, 0x000002d7u, 0x0004003du, 0x00000058u, 0x00001087u, 0x0000012fu, 0x000300f7u, 0x00001089u, 0x00000000u, 0x000400fau, 0x00001087u, 0x00001088u, 0x0000108au, 0x000200f8u, 0x00001088u, 0x0003003eu, 0x00001085u, 0x000004a4u, 0x0003003eu, 0x00000129u, 0x000002eeu, 0x000200f9u, 0x00001089u, 0x000200f8u, 0x0000108au, 0x0004003du, 0x0000004du, 0x0000108cu, 0x0000012du, 0x0004003du, 0x0000004du, 0x0000108du, 0x0000012cu, 0x00050082u, 0x0000004du, 0x0000108eu, 0x0000108cu, 0x0000108du, 0x0003003eu, 0x0000108bu, 0x0000108eu, 0x000500c3u, 0x0000004du, 0x00001091u, 0x0000108eu, 0x0000b1bdu, 0x000500c6u, 0x0000004du, 0x00001093u, 0x0000108eu, 0x00001091u, 0x0003003eu, 0x0000108bu, 0x00001093u, 0x0004003du, 0x0000004du, 0x00001095u, 0x0000012eu, 0x0004003du, 0x0000004du, 0x00001096u, 0x0000012cu, 0x00050082u, 0x0000004du, 0x00001097u, 0x00001095u, 0x00001096u, 0x0003003eu, 0x00001094u, 0x00001097u, 0x000500c3u, 0x0000004du, 0x0000109au, 0x00001097u, 0x0000b1bdu, 0x000500c6u, 0x0000004du, 0x0000109cu, 0x00001097u, 0x0000109au, 0x0003003eu, 0x00001094u, 0x0000109cu, 0x0007000cu, 0x0000004du, 0x000010a0u, 0x00000001u, 0x0000002au, 0x00001093u, 0x0000109cu, 0x0003003eu, 0x0000109du, 0x000010a0u, 0x00050041u, 0x00000038u, 0x000010a2u, 0x0000109du, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000010a3u, 0x000010a2u, 0x00050041u, 0x00000038u, 0x000010a4u, 0x0000109du, 0x0000032au, 0x0004003du, 0x00000008u, 0x000010a5u, 0x000010a4u, 0x0007000cu, 0x00000008u, 0x000010a6u, 0x00000001u, 0x0000002au, 0x000010a3u, 0x000010a5u, 0x0003003eu, 0x000010a1u, 0x000010a6u, 0x000500afu, 0x00000058u, 0x000010a8u, 0x000010a6u, 0x0000037du, 0x000300f7u, 0x000010aau, 0x00000000u, 0x000400fau, 0x000010a8u, 0x000010a9u, 0x000010acu, 0x000200f8u, 0x000010a9u, 0x0003003eu, 0x00001085u, 0x000004a4u, 0x0003003eu, 0x00000129u, 0x000002eeu, 0x0004003du, 0x00000006u, 0x000010abu, 0x0000012au, 0x0003003eu, 0x00001086u, 0x000010abu, 0x000200f9u, 0x000010aau, 0x000200f8u, 0x000010acu, 0x000500b1u, 0x00000058u, 0x000010aeu, 0x000010a6u, 0x000002e0u, 0x000300f7u, 0x000010b0u, 0x00000000u, 0x000400fau, 0x000010aeu, 0x000010afu, 0x000010c5u, 0x000200f8u, 0x000010afu, 0x0004003du, 0x00000006u, 0x000010b1u, 0x0000012au, 0x000500aau, 0x00000058u, 0x000010b2u, 0x000010b1u, 0x000002d7u, 0x0003003eu, 0x00001085u, 0x000010b2u, 0x0003003eu, 0x00001083u, 0x000004a4u, 0x0004003du, 0x00000058u, 0x000010b3u, 0x00000131u, 0x000400a8u, 0x00000058u, 0x000010b4u, 0x000010b3u, 0x0004003du, 0x00000058u, 0x000010b5u, 0x00000132u, 0x000400a8u, 0x00000058u, 0x000010b6u, 0x000010b5u, 0x000500a7u, 0x00000058u, 0x000010b7u, 0x000010b4u, 0x000010b6u, 0x000300f7u, 0x000010b9u, 0x00000000u, 0x000400fau, 0x000010b7u, 0x000010b8u, 0x000010bcu, 0x000200f8u, 0x000010b8u, 0x000600a9u, 0x00000008u, 0x000010bbu, 0x000010b2u, 0x000002eeu, 0x00000185u, 0x0003003eu, 0x00000129u, 0x000010bbu, 0x000200f9u, 0x000010b9u, 0x000200f8u, 0x000010bcu, 0x0004003du, 0x00000008u, 0x000010bdu, 0x0000012bu, 0x0007000cu, 0x00000008u, 0x000010bfu, 0x00000001u, 0x0000002au, 0x000010bdu, 0x000010a6u, 0x000500c4u, 0x00000008u, 0x000010c0u, 0x000010bfu, 0x0000019au, 0x0004003du, 0x00000058u, 0x000010c1u, 0x00000131u, 0x000600a9u, 0x00000008u, 0x000010c3u, 0x000010c1u, 0x000010c2u, 0x00000185u, 0x00050080u, 0x00000008u, 0x000010c4u, 0x000010c0u, 0x000010c3u, 0x0003003eu, 0x00000129u, 0x000010c4u, 0x000200f9u, 0x000010b9u, 0x000200f8u, 0x000010b9u, 0x000200f9u, 0x000010b0u, 0x000200f8u, 0x000010c5u, 0x000500c3u, 0x00000008u, 0x000010c8u, 0x000010a6u, 0x000001a0u, 0x0006000cu, 0x00000008u, 0x000010c9u, 0x00000001u, 0x0000004au, 0x000010c8u, 0x0007000cu, 0x00000008u, 0x000010cau, 0x00000001u, 0x0000002au, 0x000010c9u, 0x00000185u, 0x0003003eu, 0x000010c6u, 0x000010cau, 0x0004007cu, 0x00000006u, 0x000010ccu, 0x000010cau, 0x0004003du, 0x00000006u, 0x000010cdu, 0x0000012au, 0x000500aeu, 0x00000058u, 0x000010ceu, 0x000010ccu, 0x000010cdu, 0x0003003eu, 0x00001085u, 0x000010ceu, 0x0004003du, 0x00000058u, 0x000010d0u, 0x00000131u, 0x000400a8u, 0x00000058u, 0x000010d1u, 0x000010d0u, 0x000500a7u, 0x00000058u, 0x000010d2u, 0x000010ceu, 0x000010d1u, 0x0004003du, 0x00000058u, 0x000010d3u, 0x00000132u, 0x000400a8u, 0x00000058u, 0x000010d4u, 0x000010d3u, 0x000500a7u, 0x00000058u, 0x000010d5u, 0x000010d2u, 0x000010d4u, 0x000300f7u, 0x000010d7u, 0x00000000u, 0x000400fau, 0x000010d5u, 0x000010d6u, 0x000010d8u, 0x000200f8u, 0x000010d6u, 0x0003003eu, 0x00000129u, 0x000002eeu, 0x000200f9u, 0x000010d7u, 0x000200f8u, 0x000010d8u, 0x000500c4u, 0x00000008u, 0x000010dau, 0x000010a6u, 0x0000019au, 0x000500c3u, 0x00000008u, 0x000010dcu, 0x000010dau, 0x000010cau, 0x000500c7u, 0x00000008u, 0x000010ddu, 0x000010dcu, 0x000002eeu, 0x0003003eu, 0x00000129u, 0x000010ddu, 0x0003003eu, 0x00001086u, 0x000010ccu, 0x000200f9u, 0x000010d7u, 0x000200f8u, 0x000010d7u, 0x000600a9u, 0x00000006u, 0x0000b1edu, 0x000010d5u, 0x000002d7u, 0x000010ccu, 0x000200f9u, 0x000010b0u, 0x000200f8u, 0x000010b0u, 0x000700f5u, 0x00000006u, 0x0000aeaeu, 0x000002d7u, 0x000010b9u, 0x0000b1edu, 0x000010d7u, 0x000700f5u, 0x00000058u, 0x0000aea8u, 0x000010b2u, 0x000010b9u, 0x000010ceu, 0x000010d7u, 0x000600a9u, 0x00000058u, 0x0000b1eeu, 0x000010aeu, 0x000004a4u, 0x00001084u, 0x000200f9u, 0x000010aau, 0x000200f8u, 0x000010aau, 0x000700f5u, 0x00000058u, 0x0000aeb4u, 0x00001084u, 0x000010a9u, 0x0000b1eeu, 0x000010b0u, 0x000700f5u, 0x00000006u, 0x0000aeadu, 0x000010abu, 0x000010a9u, 0x0000aeaeu, 0x000010b0u, 0x000700f5u, 0x00000058u, 0x0000aea7u, 0x000004a4u, 0x000010a9u, 0x0000aea8u, 0x000010b0u, 0x000200f9u, 0x00001089u, 0x000200f8u, 0x00001089u, 0x000700f5u, 0x00000058u, 0x0000aeb3u, 0x00001084u, 0x00001088u, 0x0000aeb4u, 0x000010aau, 0x000700f5u, 0x00000006u, 0x0000aeacu, 0x000002d7u, 0x00001088u, 0x0000aeadu, 0x000010aau, 0x000700f5u, 0x00000058u, 0x0000aea6u, 0x000004a4u, 0x00001088u, 0x0000aea7u, 0x000010aau, 0x0004003du, 0x00000058u, 0x000010e0u, 0x00000130u, 0x000300f7u, 0x000010e2u, 0x00000000u, 0x000400fau, 0x000010e0u, 0x000010e1u, 0x000010e2u, 0x000200f8u, 0x000010e1u, 0x000300f7u, 0x000010e5u, 0x00000000u, 0x000400fau, 0x0000aea6u, 0x000010e4u, 0x000010e5u, 0x000200f8u, 0x000010e4u, 0x0004003du, 0x00000006u, 0x000010e6u, 0x0000012au, 0x0003003eu, 0x00001086u, 0x000010e6u, 0x000200f9u, 0x000010e5u, 0x000200f8u, 0x000010e5u, 0x000700f5u, 0x00000006u, 0x0000aeabu, 0x0000aeacu, 0x000010e1u, 0x000010e6u, 0x000010e4u, 0x0004003du, 0x00000058u, 0x000010e7u, 0x00000132u, 0x000400a8u, 0x00000058u, 0x000010e8u, 0x000010e7u, 0x000300f7u, 0x000010eau, 0x00000000u, 0x000400fau, 0x000010e8u, 0x000010e9u, 0x00001100u, 0x000200f8u, 0x000010e9u, 0x0004003du, 0x00000006u, 0x000010ebu, 0x00000127u, 0x00050080u, 0x00000006u, 0x000010edu, 0x000010ebu, 0x0000aeabu, 0x000500c7u, 0x00000006u, 0x000010efu, 0x000010edu, 0x000010eeu, 0x0003003eu, 0x00000127u, 0x000010efu, 0x000400a8u, 0x00000058u, 0x000010f1u, 0x0000aea6u, 0x000300f7u, 0x000010f3u, 0x00000000u, 0x000400fau, 0x000010f1u, 0x000010f2u, 0x000010f3u, 0x000200f8u, 0x000010f2u, 0x0004003du, 0x00000058u, 0x000010f4u, 0x00000131u, 0x000400a8u, 0x00000058u, 0x000010f5u, 0x000010f4u, 0x000500a7u, 0x00000058u, 0x000010f7u, 0x000010f5u, 0x0000aeb3u, 0x000200f9u, 0x000010f3u, 0x000200f8u, 0x000010f3u, 0x000700f5u, 0x00000058u, 0x000010f8u, 0x0000aea6u, 0x000010e9u, 0x000010f7u, 0x000010f2u, 0x000300f7u, 0x000010fau, 0x00000000u, 0x000400fau, 0x000010f8u, 0x000010f9u, 0x000010fcu, 0x000200f8u, 0x000010f9u, 0x0004003du, 0x00000006u, 0x000010fbu, 0x00000127u, 0x0003003eu, 0x00000128u, 0x000010fbu, 0x000200f9u, 0x000010fau, 0x000200f8u, 0x000010fcu, 0x0004003du, 0x00000006u, 0x000010fdu, 0x00000127u, 0x00050080u, 0x00000006u, 0x000010feu, 0x000010fdu, 0x0000032au, 0x000500c7u, 0x00000006u, 0x000010ffu, 0x000010feu, 0x000010eeu, 0x0003003eu, 0x00000128u, 0x000010ffu, 0x000200f9u, 0x000010fau, 0x000200f8u, 0x000010fau, 0x000200f9u, 0x000010eau, 0x000200f8u, 0x00001100u, 0x0004003du, 0x00000006u, 0x00001101u, 0x00000127u, 0x00050080u, 0x00000006u, 0x00001103u, 0x00001101u, 0x0000aeabu, 0x000500a6u, 0x00000058u, 0x00001106u, 0x0000aea6u, 0x0000aeb3u, 0x000600a9u, 0x00000008u, 0x00001107u, 0x00001106u, 0x00000194u, 0x00000197u, 0x0004007cu, 0x00000006u, 0x00001108u, 0x00001107u, 0x00050080u, 0x00000006u, 0x00001109u, 0x00001103u, 0x00001108u, 0x000500c7u, 0x00000006u, 0x0000110au, 0x00001109u, 0x000010eeu, 0x0003003eu, 0x00000128u, 0x0000110au, 0x0004003du, 0x00000006u, 0x0000110bu, 0x00000127u, 0x00050080u, 0x00000006u, 0x0000110du, 0x0000110bu, 0x0000aeabu, 0x000600a9u, 0x00000008u, 0x0000110fu, 0x0000aeb3u, 0x00000185u, 0x00000194u, 0x0004007cu, 0x00000006u, 0x00001110u, 0x0000110fu, 0x00050080u, 0x00000006u, 0x00001111u, 0x0000110du, 0x00001110u, 0x000500c7u, 0x00000006u, 0x00001112u, 0x00001111u, 0x000010eeu, 0x0003003eu, 0x00000127u, 0x00001112u, 0x000200f9u, 0x000010eau, 0x000200f8u, 0x000010eau, 0x000200f9u, 0x000010e2u, 0x000200f8u, 0x000010e2u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000138u, 0x00000000u, 0x00000135u, 0x00030037u, 0x00000037u, 0x00000136u, 0x00030037u, 0x00000037u, 0x00000137u, 0x000200f8u, 0x00000139u, 0x0004003bu, 0x00000037u, 0x00001113u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000111bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001126u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001137u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001142u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00001114u, 0x00000136u, 0x00050051u, 0x00000008u, 0x00001115u, 0x00001114u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001116u, 0x00001114u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001117u, 0x00001114u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001118u, 0x00001114u, 0x00000003u, 0x000600cau, 0x00000009u, 0x0000111au, 0x00001114u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00001113u, 0x0000111au, 0x00050041u, 0x00000038u, 0x0000111cu, 0x00001113u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000111du, 0x0000111cu, 0x00050041u, 0x00000038u, 0x0000111eu, 0x00000137u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000111fu, 0x0000111eu, 0x00050041u, 0x00000038u, 0x00001120u, 0x00001113u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001121u, 0x00001120u, 0x00050084u, 0x00000008u, 0x00001122u, 0x0000111fu, 0x00001121u, 0x00050080u, 0x00000008u, 0x00001123u, 0x00001122u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00001124u, 0x00001123u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00001125u, 0x0000111du, 0x00001124u, 0x0003003eu, 0x0000111bu, 0x00001125u, 0x0004003du, 0x00000008u, 0x00001128u, 0x0000111cu, 0x00050041u, 0x00000038u, 0x00001129u, 0x00000137u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000112au, 0x00001129u, 0x00050041u, 0x00000038u, 0x0000112bu, 0x00001113u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000112cu, 0x0000112bu, 0x00050084u, 0x00000008u, 0x0000112du, 0x0000112au, 0x0000112cu, 0x00050041u, 0x00000038u, 0x0000112eu, 0x00000137u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000112fu, 0x0000112eu, 0x0004003du, 0x00000008u, 0x00001131u, 0x00001120u, 0x00050084u, 0x00000008u, 0x00001132u, 0x0000112fu, 0x00001131u, 0x00050080u, 0x00000008u, 0x00001133u, 0x0000112du, 0x00001132u, 0x00050080u, 0x00000008u, 0x00001134u, 0x00001133u, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00001135u, 0x00001134u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00001136u, 0x00001128u, 0x00001135u, 0x0003003eu, 0x00001126u, 0x00001136u, 0x0004003du, 0x00000008u, 0x00001139u, 0x0000111cu, 0x00050041u, 0x00000038u, 0x0000113au, 0x00000137u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000113bu, 0x0000113au, 0x0004003du, 0x00000008u, 0x0000113du, 0x0000112bu, 0x00050084u, 0x00000008u, 0x0000113eu, 0x0000113bu, 0x0000113du, 0x00050080u, 0x00000008u, 0x0000113fu, 0x0000113eu, 0x00000323u, 0x000500c3u, 0x00000008u, 0x00001140u, 0x0000113fu, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00001141u, 0x00001139u, 0x00001140u, 0x0003003eu, 0x00001137u, 0x00001141u, 0x0004003du, 0x00000008u, 0x00001144u, 0x0000111cu, 0x0003003eu, 0x00001142u, 0x00001144u, 0x00070050u, 0x00000009u, 0x00001149u, 0x00001125u, 0x00001136u, 0x00001141u, 0x00001144u, 0x000200feu, 0x00001149u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000141u, 0x00000000u, 0x0000013au, 0x00030037u, 0x00000038u, 0x0000013bu, 0x00030037u, 0x00000038u, 0x0000013cu, 0x00030037u, 0x00000038u, 0x0000013du, 0x00030037u, 0x00000038u, 0x0000013eu, 0x00030037u, 0x00000038u, 0x0000013fu, 0x00030037u, 0x00000038u, 0x00000140u, 0x000200f8u, 0x00000142u, 0x0004003bu, 0x0000115cu, 0x0000115du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001176u, 0x00000007u, 0x0004003bu, 0x0000115cu, 0x00001181u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000114cu, 0x0000013du, 0x000500b1u, 0x00000058u, 0x0000114du, 0x0000114cu, 0x00000197u, 0x000300f7u, 0x0000114fu, 0x00000000u, 0x000400fau, 0x0000114du, 0x0000114eu, 0x00001162u, 0x000200f8u, 0x0000114eu, 0x0004003du, 0x00000008u, 0x00001155u, 0x0000013du, 0x0004003du, 0x00000008u, 0x00001156u, 0x0000013cu, 0x000500c7u, 0x00000008u, 0x00001157u, 0x00001156u, 0x0000019au, 0x00050084u, 0x00000008u, 0x00001158u, 0x00001157u, 0x0000019du, 0x0004003du, 0x00000008u, 0x00001159u, 0x0000013bu, 0x000500c7u, 0x00000008u, 0x0000115au, 0x00001159u, 0x0000019au, 0x00050080u, 0x00000008u, 0x0000115bu, 0x00001158u, 0x0000115au, 0x0003003eu, 0x0000115du, 0x00001154u, 0x00060041u, 0x00000038u, 0x0000115eu, 0x0000115du, 0x00001155u, 0x0000115bu, 0x0004003du, 0x00000008u, 0x0000115fu, 0x0000115eu, 0x00050084u, 0x00000008u, 0x00001161u, 0x0000115fu, 0x00001160u, 0x0003003eu, 0x0000013fu, 0x00001161u, 0x000200f9u, 0x0000114fu, 0x000200f8u, 0x00001162u, 0x0004003du, 0x00000008u, 0x00001163u, 0x0000013du, 0x000500aau, 0x00000058u, 0x00001164u, 0x00001163u, 0x00000197u, 0x000300f7u, 0x00001166u, 0x00000000u, 0x000400fau, 0x00001164u, 0x00001165u, 0x00001168u, 0x000200f8u, 0x00001165u, 0x00040039u, 0x00000008u, 0x00001167u, 0x00000033u, 0x0003003eu, 0x0000013fu, 0x00001167u, 0x000200f9u, 0x00001166u, 0x000200f8u, 0x00001168u, 0x0003003eu, 0x0000013fu, 0x00000185u, 0x000200f9u, 0x00001166u, 0x000200f8u, 0x00001166u, 0x000200f9u, 0x0000114fu, 0x000200f8u, 0x0000114fu, 0x0004003du, 0x00000008u, 0x00001169u, 0x0000013eu, 0x000500aau, 0x00000058u, 0x0000116au, 0x00001169u, 0x0000019au, 0x000300f7u, 0x0000116cu, 0x00000000u, 0x000400fau, 0x0000116au, 0x0000116bu, 0x0000116du, 0x000200f8u, 0x0000116bu, 0x0003003eu, 0x00000140u, 0x00000185u, 0x000200f9u, 0x0000116cu, 0x000200f8u, 0x0000116du, 0x0004003du, 0x00000008u, 0x0000116eu, 0x0000013eu, 0x000500aau, 0x00000058u, 0x0000116fu, 0x0000116eu, 0x00000197u, 0x000300f7u, 0x00001171u, 0x00000000u, 0x000400fau, 0x0000116fu, 0x00001170u, 0x00001173u, 0x000200f8u, 0x00001170u, 0x00040039u, 0x00000008u, 0x00001172u, 0x00000031u, 0x0003003eu, 0x00000140u, 0x00001172u, 0x000200f9u, 0x00001171u, 0x000200f8u, 0x00001173u, 0x0004003du, 0x00000008u, 0x00001174u, 0x0000013du, 0x000500afu, 0x00000058u, 0x00001175u, 0x00001174u, 0x00000197u, 0x000300f7u, 0x00001178u, 0x00000000u, 0x000400fau, 0x00001175u, 0x00001177u, 0x00001184u, 0x000200f8u, 0x00001177u, 0x0004003du, 0x00000008u, 0x00001179u, 0x0000013du, 0x000500c7u, 0x00000008u, 0x0000117au, 0x00001179u, 0x00000194u, 0x0004003du, 0x00000008u, 0x0000117bu, 0x0000013cu, 0x000500c7u, 0x00000008u, 0x0000117cu, 0x0000117bu, 0x0000019au, 0x00050084u, 0x00000008u, 0x0000117du, 0x0000117cu, 0x0000019du, 0x0004003du, 0x00000008u, 0x0000117eu, 0x0000013bu, 0x000500c7u, 0x00000008u, 0x0000117fu, 0x0000117eu, 0x0000019au, 0x00050080u, 0x00000008u, 0x00001180u, 0x0000117du, 0x0000117fu, 0x0003003eu, 0x00001181u, 0x00001154u, 0x00060041u, 0x00000038u, 0x00001182u, 0x00001181u, 0x0000117au, 0x00001180u, 0x0004003du, 0x00000008u, 0x00001183u, 0x00001182u, 0x0003003eu, 0x00001176u, 0x00001183u, 0x000200f9u, 0x00001178u, 0x000200f8u, 0x00001184u, 0x0004003du, 0x00000008u, 0x00001185u, 0x0000013fu, 0x000500c7u, 0x00000008u, 0x00001186u, 0x00001185u, 0x000001a6u, 0x0003003eu, 0x00001176u, 0x00001186u, 0x000200f9u, 0x00001178u, 0x000200f8u, 0x00001178u, 0x000700f5u, 0x00000008u, 0x0000aeb8u, 0x00001183u, 0x00001177u, 0x00001186u, 0x00001184u, 0x0003003eu, 0x00000140u, 0x0000aeb8u, 0x0004003du, 0x00000008u, 0x00001188u, 0x0000013eu, 0x000500aau, 0x00000058u, 0x00001189u, 0x00001188u, 0x00000194u, 0x000300f7u, 0x0000118bu, 0x00000000u, 0x000400fau, 0x00001189u, 0x0000118au, 0x0000118bu, 0x000200f8u, 0x0000118au, 0x0004003du, 0x00000008u, 0x0000118cu, 0x00000140u, 0x000400c8u, 0x00000008u, 0x0000118du, 0x0000118cu, 0x000500c7u, 0x00000008u, 0x0000118eu, 0x0000118du, 0x000001a6u, 0x0003003eu, 0x00000140u, 0x0000118eu, 0x000200f9u, 0x0000118bu, 0x000200f8u, 0x0000118bu, 0x000200f9u, 0x00001171u, 0x000200f8u, 0x00001171u, 0x000200f9u, 0x0000116cu, 0x000200f8u, 0x0000116cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000144u, 0x00000000u, 0x0000003fu, 0x00030037u, 0x00000037u, 0x00000143u, 0x000200f8u, 0x00000145u, 0x0004003du, 0x00000009u, 0x0000118fu, 0x00000143u, 0x00050082u, 0x00000009u, 0x00001191u, 0x0000118fu, 0x0000b1b9u, 0x000600cau, 0x00000009u, 0x00001192u, 0x00001191u, 0x00000185u, 0x000001e6u, 0x00050080u, 0x00000009u, 0x00001194u, 0x00001192u, 0x0000b1b9u, 0x000200feu, 0x00001194u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000014bu, 0x00000000u, 0x00000146u, 0x00030037u, 0x00000037u, 0x00000147u, 0x00030037u, 0x00000037u, 0x00000148u, 0x00030037u, 0x00000037u, 0x00000149u, 0x00030037u, 0x00000037u, 0x0000014au, 0x000200f8u, 0x0000014cu, 0x0004003bu, 0x00000037u, 0x00001199u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000119cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000119fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000011a2u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00001197u, 0x00000149u, 0x000600cau, 0x00000009u, 0x00001198u, 0x00001197u, 0x00000185u, 0x000001e6u, 0x0003003eu, 0x00000149u, 0x00001198u, 0x0004003du, 0x00000009u, 0x0000119au, 0x00000147u, 0x0003003eu, 0x00001199u, 0x0000119au, 0x00050039u, 0x00000009u, 0x0000119bu, 0x00000144u, 0x00001199u, 0x0003003eu, 0x00000147u, 0x0000119bu, 0x0004003du, 0x00000009u, 0x0000119du, 0x00000148u, 0x0003003eu, 0x0000119cu, 0x0000119du, 0x00050039u, 0x00000009u, 0x0000119eu, 0x00000144u, 0x0000119cu, 0x0003003eu, 0x00000148u, 0x0000119eu, 0x0004003du, 0x00000009u, 0x000011a0u, 0x0000014au, 0x0003003eu, 0x0000119fu, 0x000011a0u, 0x00050039u, 0x00000009u, 0x000011a1u, 0x00000144u, 0x0000119fu, 0x0003003eu, 0x0000014au, 0x000011a1u, 0x0004003du, 0x00000009u, 0x000011a3u, 0x00000147u, 0x0004003du, 0x00000009u, 0x000011a4u, 0x00000148u, 0x00050082u, 0x00000009u, 0x000011a5u, 0x000011a3u, 0x000011a4u, 0x0004003du, 0x00000009u, 0x000011a6u, 0x00000149u, 0x00050084u, 0x00000009u, 0x000011a7u, 0x000011a5u, 0x000011a6u, 0x0003003eu, 0x000011a2u, 0x000011a7u, 0x00050080u, 0x00000009u, 0x000011aau, 0x000011a7u, 0x0000b1b9u, 0x0003003eu, 0x000011a2u, 0x000011aau, 0x000500c3u, 0x00000009u, 0x000011adu, 0x000011aau, 0x0000b1c3u, 0x00050051u, 0x00000008u, 0x000011aeu, 0x000011adu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000011afu, 0x000011adu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000011b0u, 0x000011adu, 0x00000002u, 0x00050051u, 0x00000008u, 0x000011b1u, 0x000011adu, 0x00000003u, 0x0004003du, 0x00000009u, 0x000011b3u, 0x0000014au, 0x00050051u, 0x00000008u, 0x000011b4u, 0x000011b3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000011b5u, 0x000011b3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000011b6u, 0x000011b3u, 0x00000002u, 0x00050051u, 0x00000008u, 0x000011b7u, 0x000011b3u, 0x00000003u, 0x00050080u, 0x00000009u, 0x000011b9u, 0x000011adu, 0x000011b3u, 0x000200feu, 0x000011b9u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000153u, 0x00000000u, 0x0000014fu, 0x00030037u, 0x0000014eu, 0x00000150u, 0x00030037u, 0x00000038u, 0x00000151u, 0x00030037u, 0x00000038u, 0x00000152u, 0x000200f8u, 0x00000154u, 0x0004003bu, 0x00000053u, 0x000011c5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000011eau, 0x00000007u, 0x0004003du, 0x00000008u, 0x000011bcu, 0x00000151u, 0x000300f7u, 0x000011c4u, 0x00000000u, 0x000f00fbu, 0x000011bcu, 0x000011c3u, 0x00000000u, 0x000011bdu, 0x00000001u, 0x000011beu, 0x00000002u, 0x000011bfu, 0x00000004u, 0x000011c0u, 0x00000007u, 0x000011c1u, 0x00000006u, 0x000011c2u, 0x000200f8u, 0x000011c3u, 0x00050041u, 0x00000037u, 0x000011ddu, 0x00000150u, 0x00000185u, 0x0004003du, 0x00000009u, 0x000011deu, 0x000011ddu, 0x0008004fu, 0x00000052u, 0x000011dfu, 0x000011deu, 0x000011deu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000011c5u, 0x000011dfu, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011bdu, 0x00050041u, 0x00000037u, 0x000011c6u, 0x00000150u, 0x000001a0u, 0x0004003du, 0x00000009u, 0x000011c7u, 0x000011c6u, 0x0008004fu, 0x00000052u, 0x000011c8u, 0x000011c7u, 0x000011c7u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000011c5u, 0x000011c8u, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011beu, 0x00050041u, 0x00000037u, 0x000011cau, 0x00000150u, 0x000001a3u, 0x0004003du, 0x00000009u, 0x000011cbu, 0x000011cau, 0x0008004fu, 0x00000052u, 0x000011ccu, 0x000011cbu, 0x000011cbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000011c5u, 0x000011ccu, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011bfu, 0x00050041u, 0x00000037u, 0x000011ceu, 0x00000150u, 0x000001a6u, 0x0004003du, 0x00000009u, 0x000011cfu, 0x000011ceu, 0x0008004fu, 0x00000052u, 0x000011d0u, 0x000011cfu, 0x000011cfu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000011c5u, 0x000011d0u, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011c0u, 0x00050041u, 0x00000037u, 0x000011d2u, 0x00000150u, 0x0000019du, 0x0004003du, 0x00000009u, 0x000011d3u, 0x000011d2u, 0x0008004fu, 0x00000052u, 0x000011d4u, 0x000011d3u, 0x000011d3u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000011c5u, 0x000011d4u, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011c1u, 0x00050041u, 0x00000038u, 0x000011d6u, 0x00000150u, 0x000001e6u, 0x0004003du, 0x00000008u, 0x000011d7u, 0x000011d6u, 0x00060050u, 0x00000052u, 0x000011d8u, 0x000011d7u, 0x000011d7u, 0x000011d7u, 0x0003003eu, 0x000011c5u, 0x000011d8u, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011c2u, 0x0003003eu, 0x000011c5u, 0x000011dbu, 0x000200f9u, 0x000011c4u, 0x000200f8u, 0x000011c4u, 0x001100f5u, 0x00000052u, 0x0000aebau, 0x000011dfu, 0x000011c3u, 0x000011c8u, 0x000011bdu, 0x000011ccu, 0x000011beu, 0x000011d0u, 0x000011bfu, 0x000011d4u, 0x000011c0u, 0x000011d8u, 0x000011c1u, 0x000011dbu, 0x000011c2u, 0x0004003du, 0x00000008u, 0x000011e2u, 0x00000152u, 0x000300f7u, 0x000011e9u, 0x00000000u, 0x000d00fbu, 0x000011e2u, 0x000011e8u, 0x00000000u, 0x000011e3u, 0x00000001u, 0x000011e4u, 0x00000002u, 0x000011e5u, 0x00000004u, 0x000011e6u, 0x00000006u, 0x000011e7u, 0x000200f8u, 0x000011e8u, 0x00060041u, 0x00000038u, 0x000011f8u, 0x00000150u, 0x00000185u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000011f9u, 0x000011f8u, 0x0003003eu, 0x000011eau, 0x000011f9u, 0x000200f9u, 0x000011e9u, 0x000200f8u, 0x000011e3u, 0x00060041u, 0x00000038u, 0x000011ebu, 0x00000150u, 0x000001a0u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000011ecu, 0x000011ebu, 0x0003003eu, 0x000011eau, 0x000011ecu, 0x000200f9u, 0x000011e9u, 0x000200f8u, 0x000011e4u, 0x00060041u, 0x00000038u, 0x000011eeu, 0x00000150u, 0x000001a3u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000011efu, 0x000011eeu, 0x0003003eu, 0x000011eau, 0x000011efu, 0x000200f9u, 0x000011e9u, 0x000200f8u, 0x000011e5u, 0x00060041u, 0x00000038u, 0x000011f1u, 0x00000150u, 0x000001a6u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000011f2u, 0x000011f1u, 0x0003003eu, 0x000011eau, 0x000011f2u, 0x000200f9u, 0x000011e9u, 0x000200f8u, 0x000011e6u, 0x00060041u, 0x00000038u, 0x000011f4u, 0x00000150u, 0x0000019du, 0x00000331u, 0x0004003du, 0x00000008u, 0x000011f5u, 0x000011f4u, 0x0003003eu, 0x000011eau, 0x000011f5u, 0x000200f9u, 0x000011e9u, 0x000200f8u, 0x000011e7u, 0x0003003eu, 0x000011eau, 0x000011dau, 0x000200f9u, 0x000011e9u, 0x000200f8u, 0x000011e9u, 0x000f00f5u, 0x00000008u, 0x0000aebbu, 0x000011f9u, 0x000011e8u, 0x000011ecu, 0x000011e3u, 0x000011efu, 0x000011e4u, 0x000011f2u, 0x000011e5u, 0x000011f5u, 0x000011e6u, 0x000011dau, 0x000011e7u, 0x00050051u, 0x00000008u, 0x000011feu, 0x0000aebau, 0x00000000u, 0x00050051u, 0x00000008u, 0x000011ffu, 0x0000aebau, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001200u, 0x0000aebau, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001201u, 0x000011feu, 0x000011ffu, 0x00001200u, 0x0000aebbu, 0x000200feu, 0x00001201u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000158u, 0x00000000u, 0x0000014fu, 0x00030037u, 0x0000014eu, 0x00000155u, 0x00030037u, 0x00000038u, 0x00000156u, 0x00030037u, 0x00000038u, 0x00000157u, 0x000200f8u, 0x00000159u, 0x0004003bu, 0x00000053u, 0x0000120cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001232u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001204u, 0x00000156u, 0x000300f7u, 0x0000120bu, 0x00000000u, 0x000d00fbu, 0x00001204u, 0x0000120au, 0x00000000u, 0x00001205u, 0x00000001u, 0x00001206u, 0x00000002u, 0x00001207u, 0x00000004u, 0x00001208u, 0x00000007u, 0x00001209u, 0x000200f8u, 0x0000120au, 0x00050041u, 0x00000037u, 0x00001225u, 0x00000155u, 0x00000194u, 0x0004003du, 0x00000009u, 0x00001226u, 0x00001225u, 0x0008004fu, 0x00000052u, 0x00001227u, 0x00001226u, 0x00001226u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000120cu, 0x00001227u, 0x000200f9u, 0x0000120bu, 0x000200f8u, 0x00001205u, 0x00050041u, 0x00000037u, 0x0000120du, 0x00000155u, 0x000001a0u, 0x0004003du, 0x00000009u, 0x0000120eu, 0x0000120du, 0x0008004fu, 0x00000052u, 0x0000120fu, 0x0000120eu, 0x0000120eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000120cu, 0x0000120fu, 0x000200f9u, 0x0000120bu, 0x000200f8u, 0x00001206u, 0x00050041u, 0x00000037u, 0x00001211u, 0x00000155u, 0x000001a3u, 0x0004003du, 0x00000009u, 0x00001212u, 0x00001211u, 0x0008004fu, 0x00000052u, 0x00001213u, 0x00001212u, 0x00001212u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000120cu, 0x00001213u, 0x000200f9u, 0x0000120bu, 0x000200f8u, 0x00001207u, 0x00050041u, 0x00000037u, 0x00001215u, 0x00000155u, 0x000001a6u, 0x0004003du, 0x00000009u, 0x00001216u, 0x00001215u, 0x0008004fu, 0x00000052u, 0x00001217u, 0x00001216u, 0x00001216u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000120cu, 0x00001217u, 0x000200f9u, 0x0000120bu, 0x000200f8u, 0x00001208u, 0x00050041u, 0x00000037u, 0x00001219u, 0x00000155u, 0x0000019du, 0x0004003du, 0x00000009u, 0x0000121au, 0x00001219u, 0x0008004fu, 0x00000052u, 0x0000121bu, 0x0000121au, 0x0000121au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x0000120cu, 0x0000121bu, 0x000200f9u, 0x0000120bu, 0x000200f8u, 0x00001209u, 0x00060041u, 0x00000038u, 0x0000121du, 0x00000155u, 0x00000194u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000121eu, 0x0000121du, 0x000500c4u, 0x00000008u, 0x0000121fu, 0x0000121eu, 0x000001e0u, 0x00060041u, 0x00000038u, 0x00001220u, 0x00000155u, 0x00000194u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001221u, 0x00001220u, 0x000500c5u, 0x00000008u, 0x00001222u, 0x0000121fu, 0x00001221u, 0x00060050u, 0x00000052u, 0x00001223u, 0x00001222u, 0x00001222u, 0x00001222u, 0x0003003eu, 0x0000120cu, 0x00001223u, 0x000200f9u, 0x0000120bu, 0x000200f8u, 0x0000120bu, 0x000f00f5u, 0x00000052u, 0x0000aebdu, 0x00001227u, 0x0000120au, 0x0000120fu, 0x00001205u, 0x00001213u, 0x00001206u, 0x00001217u, 0x00001207u, 0x0000121bu, 0x00001208u, 0x00001223u, 0x00001209u, 0x0004003du, 0x00000008u, 0x0000122au, 0x00000157u, 0x000300f7u, 0x00001231u, 0x00000000u, 0x000d00fbu, 0x0000122au, 0x00001230u, 0x00000000u, 0x0000122bu, 0x00000001u, 0x0000122cu, 0x00000002u, 0x0000122du, 0x00000004u, 0x0000122eu, 0x00000006u, 0x0000122fu, 0x000200f8u, 0x00001230u, 0x00060041u, 0x00000038u, 0x00001240u, 0x00000155u, 0x00000194u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001241u, 0x00001240u, 0x0003003eu, 0x00001232u, 0x00001241u, 0x000200f9u, 0x00001231u, 0x000200f8u, 0x0000122bu, 0x00060041u, 0x00000038u, 0x00001233u, 0x00000155u, 0x000001a0u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001234u, 0x00001233u, 0x0003003eu, 0x00001232u, 0x00001234u, 0x000200f9u, 0x00001231u, 0x000200f8u, 0x0000122cu, 0x00060041u, 0x00000038u, 0x00001236u, 0x00000155u, 0x000001a3u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001237u, 0x00001236u, 0x0003003eu, 0x00001232u, 0x00001237u, 0x000200f9u, 0x00001231u, 0x000200f8u, 0x0000122du, 0x00060041u, 0x00000038u, 0x00001239u, 0x00000155u, 0x000001a6u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000123au, 0x00001239u, 0x0003003eu, 0x00001232u, 0x0000123au, 0x000200f9u, 0x00001231u, 0x000200f8u, 0x0000122eu, 0x00060041u, 0x00000038u, 0x0000123cu, 0x00000155u, 0x0000019du, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000123du, 0x0000123cu, 0x0003003eu, 0x00001232u, 0x0000123du, 0x000200f9u, 0x00001231u, 0x000200f8u, 0x0000122fu, 0x0003003eu, 0x00001232u, 0x000011dau, 0x000200f9u, 0x00001231u, 0x000200f8u, 0x00001231u, 0x000f00f5u, 0x00000008u, 0x0000aebeu, 0x00001241u, 0x00001230u, 0x00001234u, 0x0000122bu, 0x00001237u, 0x0000122cu, 0x0000123au, 0x0000122du, 0x0000123du, 0x0000122eu, 0x000011dau, 0x0000122fu, 0x00050051u, 0x00000008u, 0x00001246u, 0x0000aebdu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001247u, 0x0000aebdu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001248u, 0x0000aebdu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001249u, 0x00001246u, 0x00001247u, 0x00001248u, 0x0000aebeu, 0x000200feu, 0x00001249u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000015du, 0x00000000u, 0x0000014fu, 0x00030037u, 0x0000014eu, 0x0000015au, 0x00030037u, 0x00000038u, 0x0000015bu, 0x00030037u, 0x00000038u, 0x0000015cu, 0x000200f8u, 0x0000015eu, 0x0004003bu, 0x00000053u, 0x00001259u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001292u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000124cu, 0x0000015bu, 0x000300f7u, 0x00001258u, 0x00000000u, 0x001700fbu, 0x0000124cu, 0x00001257u, 0x00000000u, 0x0000124du, 0x00000007u, 0x0000124eu, 0x00000001u, 0x0000124fu, 0x00000002u, 0x00001250u, 0x00000004u, 0x00001251u, 0x00000008u, 0x00001252u, 0x00000009u, 0x00001253u, 0x0000000bu, 0x00001254u, 0x0000000du, 0x00001255u, 0x0000000fu, 0x00001256u, 0x000200f8u, 0x00001257u, 0x00050041u, 0x00000037u, 0x00001286u, 0x0000015au, 0x00000197u, 0x0004003du, 0x00000009u, 0x00001287u, 0x00001286u, 0x0008004fu, 0x00000052u, 0x00001288u, 0x00001287u, 0x00001287u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001259u, 0x00001288u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x0000124du, 0x00050041u, 0x00000037u, 0x0000125au, 0x0000015au, 0x000001a0u, 0x0004003du, 0x00000009u, 0x0000125bu, 0x0000125au, 0x0008004fu, 0x00000052u, 0x0000125cu, 0x0000125bu, 0x0000125bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001259u, 0x0000125cu, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x0000124eu, 0x00050041u, 0x00000037u, 0x0000125eu, 0x0000015au, 0x000001a0u, 0x0004003du, 0x00000009u, 0x0000125fu, 0x0000125eu, 0x0008004fu, 0x00000052u, 0x00001260u, 0x0000125fu, 0x0000125fu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00001259u, 0x00001260u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x0000124fu, 0x00050041u, 0x00000037u, 0x00001262u, 0x0000015au, 0x000001a3u, 0x0004003du, 0x00000009u, 0x00001263u, 0x00001262u, 0x0008004fu, 0x00000052u, 0x00001264u, 0x00001263u, 0x00001263u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001259u, 0x00001264u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001250u, 0x00050041u, 0x00000037u, 0x00001266u, 0x0000015au, 0x000001a6u, 0x0004003du, 0x00000009u, 0x00001267u, 0x00001266u, 0x0008004fu, 0x00000052u, 0x00001268u, 0x00001267u, 0x00001267u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001259u, 0x00001268u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001251u, 0x00050041u, 0x00000037u, 0x0000126au, 0x0000015au, 0x0000019du, 0x0004003du, 0x00000009u, 0x0000126bu, 0x0000126au, 0x0008004fu, 0x00000052u, 0x0000126cu, 0x0000126bu, 0x0000126bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x00001259u, 0x0000126cu, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001252u, 0x00050041u, 0x00000037u, 0x0000126eu, 0x0000015au, 0x000001a3u, 0x0004003du, 0x00000009u, 0x0000126fu, 0x0000126eu, 0x0008004fu, 0x00000052u, 0x00001270u, 0x0000126fu, 0x0000126fu, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00001259u, 0x00001270u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001253u, 0x00050041u, 0x00000037u, 0x00001272u, 0x0000015au, 0x000001a6u, 0x0004003du, 0x00000009u, 0x00001273u, 0x00001272u, 0x0008004fu, 0x00000052u, 0x00001274u, 0x00001273u, 0x00001273u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00001259u, 0x00001274u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001254u, 0x00050041u, 0x00000037u, 0x00001276u, 0x0000015au, 0x0000019du, 0x0004003du, 0x00000009u, 0x00001277u, 0x00001276u, 0x0008004fu, 0x00000052u, 0x00001278u, 0x00001277u, 0x00001277u, 0x00000003u, 0x00000003u, 0x00000003u, 0x0003003eu, 0x00001259u, 0x00001278u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001255u, 0x00050041u, 0x00000038u, 0x0000127au, 0x0000015au, 0x000001e0u, 0x0004003du, 0x00000008u, 0x0000127bu, 0x0000127au, 0x00060050u, 0x00000052u, 0x0000127cu, 0x0000127bu, 0x0000127bu, 0x0000127bu, 0x0003003eu, 0x00001259u, 0x0000127cu, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001256u, 0x00060041u, 0x00000038u, 0x0000127eu, 0x0000015au, 0x00000197u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000127fu, 0x0000127eu, 0x000500c4u, 0x00000008u, 0x00001280u, 0x0000127fu, 0x000001e0u, 0x00060041u, 0x00000038u, 0x00001281u, 0x0000015au, 0x00000197u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001282u, 0x00001281u, 0x000500c5u, 0x00000008u, 0x00001283u, 0x00001280u, 0x00001282u, 0x00060050u, 0x00000052u, 0x00001284u, 0x00001283u, 0x00001283u, 0x00001283u, 0x0003003eu, 0x00001259u, 0x00001284u, 0x000200f9u, 0x00001258u, 0x000200f8u, 0x00001258u, 0x001900f5u, 0x00000052u, 0x0000aec0u, 0x00001288u, 0x00001257u, 0x0000125cu, 0x0000124du, 0x00001260u, 0x0000124eu, 0x00001264u, 0x0000124fu, 0x00001268u, 0x00001250u, 0x0000126cu, 0x00001251u, 0x00001270u, 0x00001252u, 0x00001274u, 0x00001253u, 0x00001278u, 0x00001254u, 0x0000127cu, 0x00001255u, 0x00001284u, 0x00001256u, 0x0004003du, 0x00000008u, 0x0000128bu, 0x0000015cu, 0x000300f7u, 0x00001291u, 0x00000000u, 0x000b00fbu, 0x0000128bu, 0x00001290u, 0x00000000u, 0x0000128cu, 0x00000001u, 0x0000128du, 0x00000002u, 0x0000128eu, 0x00000004u, 0x0000128fu, 0x000200f8u, 0x00001290u, 0x00060041u, 0x00000038u, 0x0000129fu, 0x0000015au, 0x00000197u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000012a0u, 0x0000129fu, 0x0003003eu, 0x00001292u, 0x000012a0u, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x0000128cu, 0x00050041u, 0x00000038u, 0x00001293u, 0x0000015au, 0x000001e0u, 0x0004003du, 0x00000008u, 0x00001294u, 0x00001293u, 0x0003003eu, 0x00001292u, 0x00001294u, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x0000128du, 0x00060041u, 0x00000038u, 0x00001296u, 0x0000015au, 0x000001a3u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001297u, 0x00001296u, 0x0003003eu, 0x00001292u, 0x00001297u, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x0000128eu, 0x00060041u, 0x00000038u, 0x00001299u, 0x0000015au, 0x000001a6u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000129au, 0x00001299u, 0x0003003eu, 0x00001292u, 0x0000129au, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x0000128fu, 0x00060041u, 0x00000038u, 0x0000129cu, 0x0000015au, 0x0000019du, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000129du, 0x0000129cu, 0x0003003eu, 0x00001292u, 0x0000129du, 0x000200f9u, 0x00001291u, 0x000200f8u, 0x00001291u, 0x000d00f5u, 0x00000008u, 0x0000aec1u, 0x000012a0u, 0x00001290u, 0x00001294u, 0x0000128cu, 0x00001297u, 0x0000128du, 0x0000129au, 0x0000128eu, 0x0000129du, 0x0000128fu, 0x00050051u, 0x00000008u, 0x000012a5u, 0x0000aec0u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000012a6u, 0x0000aec0u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000012a7u, 0x0000aec0u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000012a8u, 0x000012a5u, 0x000012a6u, 0x000012a7u, 0x0000aec1u, 0x000200feu, 0x000012a8u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000162u, 0x00000000u, 0x0000014fu, 0x00030037u, 0x0000014eu, 0x0000015fu, 0x00030037u, 0x00000038u, 0x00000160u, 0x00030037u, 0x00000038u, 0x00000161u, 0x000200f8u, 0x00000163u, 0x0004003bu, 0x00000053u, 0x000012b3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000012d2u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000012abu, 0x00000160u, 0x000300f7u, 0x000012b2u, 0x00000000u, 0x000d00fbu, 0x000012abu, 0x000012b1u, 0x00000000u, 0x000012acu, 0x00000001u, 0x000012adu, 0x00000002u, 0x000012aeu, 0x00000004u, 0x000012afu, 0x00000006u, 0x000012b0u, 0x000200f8u, 0x000012b1u, 0x00050041u, 0x00000037u, 0x000012c5u, 0x0000015fu, 0x0000019au, 0x0004003du, 0x00000009u, 0x000012c6u, 0x000012c5u, 0x0008004fu, 0x00000052u, 0x000012c7u, 0x000012c6u, 0x000012c6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000012b3u, 0x000012c7u, 0x000200f9u, 0x000012b2u, 0x000200f8u, 0x000012acu, 0x00050041u, 0x00000037u, 0x000012b4u, 0x0000015fu, 0x000001a0u, 0x0004003du, 0x00000009u, 0x000012b5u, 0x000012b4u, 0x0008004fu, 0x00000052u, 0x000012b6u, 0x000012b5u, 0x000012b5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000012b3u, 0x000012b6u, 0x000200f9u, 0x000012b2u, 0x000200f8u, 0x000012adu, 0x00050041u, 0x00000037u, 0x000012b8u, 0x0000015fu, 0x000001a3u, 0x0004003du, 0x00000009u, 0x000012b9u, 0x000012b8u, 0x0008004fu, 0x00000052u, 0x000012bau, 0x000012b9u, 0x000012b9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000012b3u, 0x000012bau, 0x000200f9u, 0x000012b2u, 0x000200f8u, 0x000012aeu, 0x00050041u, 0x00000037u, 0x000012bcu, 0x0000015fu, 0x000001a6u, 0x0004003du, 0x00000009u, 0x000012bdu, 0x000012bcu, 0x0008004fu, 0x00000052u, 0x000012beu, 0x000012bdu, 0x000012bdu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000012b3u, 0x000012beu, 0x000200f9u, 0x000012b2u, 0x000200f8u, 0x000012afu, 0x00050041u, 0x00000037u, 0x000012c0u, 0x0000015fu, 0x0000019du, 0x0004003du, 0x00000009u, 0x000012c1u, 0x000012c0u, 0x0008004fu, 0x00000052u, 0x000012c2u, 0x000012c1u, 0x000012c1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0003003eu, 0x000012b3u, 0x000012c2u, 0x000200f9u, 0x000012b2u, 0x000200f8u, 0x000012b0u, 0x0003003eu, 0x000012b3u, 0x000011dbu, 0x000200f9u, 0x000012b2u, 0x000200f8u, 0x000012b2u, 0x000f00f5u, 0x00000052u, 0x0000aec3u, 0x000012c7u, 0x000012b1u, 0x000012b6u, 0x000012acu, 0x000012bau, 0x000012adu, 0x000012beu, 0x000012aeu, 0x000012c2u, 0x000012afu, 0x000011dbu, 0x000012b0u, 0x0004003du, 0x00000008u, 0x000012cau, 0x00000161u, 0x000300f7u, 0x000012d1u, 0x00000000u, 0x000d00fbu, 0x000012cau, 0x000012d0u, 0x00000000u, 0x000012cbu, 0x00000001u, 0x000012ccu, 0x00000002u, 0x000012cdu, 0x00000004u, 0x000012ceu, 0x00000006u, 0x000012cfu, 0x000200f8u, 0x000012d0u, 0x00060041u, 0x00000038u, 0x000012e0u, 0x0000015fu, 0x0000019au, 0x00000331u, 0x0004003du, 0x00000008u, 0x000012e1u, 0x000012e0u, 0x0003003eu, 0x000012d2u, 0x000012e1u, 0x000200f9u, 0x000012d1u, 0x000200f8u, 0x000012cbu, 0x00060041u, 0x00000038u, 0x000012d3u, 0x0000015fu, 0x000001a0u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000012d4u, 0x000012d3u, 0x0003003eu, 0x000012d2u, 0x000012d4u, 0x000200f9u, 0x000012d1u, 0x000200f8u, 0x000012ccu, 0x00060041u, 0x00000038u, 0x000012d6u, 0x0000015fu, 0x000001a3u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000012d7u, 0x000012d6u, 0x0003003eu, 0x000012d2u, 0x000012d7u, 0x000200f9u, 0x000012d1u, 0x000200f8u, 0x000012cdu, 0x00060041u, 0x00000038u, 0x000012d9u, 0x0000015fu, 0x000001a6u, 0x00000331u, 0x0004003du, 0x00000008u, 0x000012dau, 0x000012d9u, 0x0003003eu, 0x000012d2u, 0x000012dau, 0x000200f9u, 0x000012d1u, 0x000200f8u, 0x000012ceu, 0x00060041u, 0x00000038u, 0x000012dcu, 0x0000015fu, 0x0000019du, 0x00000331u, 0x0004003du, 0x00000008u, 0x000012ddu, 0x000012dcu, 0x0003003eu, 0x000012d2u, 0x000012ddu, 0x000200f9u, 0x000012d1u, 0x000200f8u, 0x000012cfu, 0x0003003eu, 0x000012d2u, 0x000011dau, 0x000200f9u, 0x000012d1u, 0x000200f8u, 0x000012d1u, 0x000f00f5u, 0x00000008u, 0x0000aec4u, 0x000012e1u, 0x000012d0u, 0x000012d4u, 0x000012cbu, 0x000012d7u, 0x000012ccu, 0x000012dau, 0x000012cdu, 0x000012ddu, 0x000012ceu, 0x000011dau, 0x000012cfu, 0x00050051u, 0x00000008u, 0x000012e6u, 0x0000aec3u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000012e7u, 0x0000aec3u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000012e8u, 0x0000aec3u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000012e9u, 0x000012e6u, 0x000012e7u, 0x000012e8u, 0x0000aec4u, 0x000200feu, 0x000012e9u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000016eu, 0x00000000u, 0x00000164u, 0x00030037u, 0x0000014eu, 0x00000165u, 0x00030037u, 0x00000037u, 0x00000166u, 0x00030037u, 0x00000037u, 0x00000167u, 0x00030037u, 0x00000038u, 0x00000168u, 0x00030037u, 0x00000038u, 0x00000169u, 0x00030037u, 0x00000059u, 0x0000016au, 0x00030037u, 0x00000059u, 0x0000016bu, 0x00030037u, 0x00000059u, 0x0000016cu, 0x00030037u, 0x00000038u, 0x0000016du, 0x000200f8u, 0x0000016fu, 0x0004003bu, 0x00000037u, 0x000012ecu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000012edu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000012efu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000012f2u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000012f6u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000012f7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000012f9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000012fcu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001300u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00001301u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001303u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001306u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000130au, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000130bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000130du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001310u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001314u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001315u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001317u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001319u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000131bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001321u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001322u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001326u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001332u, 0x00000007u, 0x0004003du, 0x0000014du, 0x000012eeu, 0x00000165u, 0x0003003eu, 0x000012edu, 0x000012eeu, 0x00050041u, 0x00000038u, 0x000012f0u, 0x00000166u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000012f1u, 0x000012f0u, 0x0003003eu, 0x000012efu, 0x000012f1u, 0x00050041u, 0x00000038u, 0x000012f3u, 0x00000167u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x000012f4u, 0x000012f3u, 0x0003003eu, 0x000012f2u, 0x000012f4u, 0x00070039u, 0x00000009u, 0x000012f5u, 0x00000153u, 0x000012edu, 0x000012efu, 0x000012f2u, 0x0003003eu, 0x000012ecu, 0x000012f5u, 0x0004003du, 0x0000014du, 0x000012f8u, 0x00000165u, 0x0003003eu, 0x000012f7u, 0x000012f8u, 0x00050041u, 0x00000038u, 0x000012fau, 0x00000166u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000012fbu, 0x000012fau, 0x0003003eu, 0x000012f9u, 0x000012fbu, 0x00050041u, 0x00000038u, 0x000012fdu, 0x00000167u, 0x0000032au, 0x0004003du, 0x00000008u, 0x000012feu, 0x000012fdu, 0x0003003eu, 0x000012fcu, 0x000012feu, 0x00070039u, 0x00000009u, 0x000012ffu, 0x00000158u, 0x000012f7u, 0x000012f9u, 0x000012fcu, 0x0003003eu, 0x000012f6u, 0x000012ffu, 0x0004003du, 0x0000014du, 0x00001302u, 0x00000165u, 0x0003003eu, 0x00001301u, 0x00001302u, 0x00050041u, 0x00000038u, 0x00001304u, 0x00000166u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001305u, 0x00001304u, 0x0003003eu, 0x00001303u, 0x00001305u, 0x00050041u, 0x00000038u, 0x00001307u, 0x00000167u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001308u, 0x00001307u, 0x0003003eu, 0x00001306u, 0x00001308u, 0x00070039u, 0x00000009u, 0x00001309u, 0x0000015du, 0x00001301u, 0x00001303u, 0x00001306u, 0x0003003eu, 0x00001300u, 0x00001309u, 0x0004003du, 0x0000014du, 0x0000130cu, 0x00000165u, 0x0003003eu, 0x0000130bu, 0x0000130cu, 0x00050041u, 0x00000038u, 0x0000130eu, 0x00000166u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000130fu, 0x0000130eu, 0x0003003eu, 0x0000130du, 0x0000130fu, 0x00050041u, 0x00000038u, 0x00001311u, 0x00000167u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001312u, 0x00001311u, 0x0003003eu, 0x00001310u, 0x00001312u, 0x00070039u, 0x00000009u, 0x00001313u, 0x00000162u, 0x0000130bu, 0x0000130du, 0x00001310u, 0x0003003eu, 0x0000130au, 0x00001313u, 0x0003003eu, 0x00001315u, 0x000012f5u, 0x0003003eu, 0x00001317u, 0x000012ffu, 0x0003003eu, 0x00001319u, 0x00001309u, 0x0003003eu, 0x0000131bu, 0x00001313u, 0x00080039u, 0x00000009u, 0x0000131du, 0x0000014bu, 0x00001315u, 0x00001317u, 0x00001319u, 0x0000131bu, 0x0003003eu, 0x00001314u, 0x0000131du, 0x0004003du, 0x00000058u, 0x0000131eu, 0x0000016cu, 0x000300f7u, 0x00001320u, 0x00000000u, 0x000400fau, 0x0000131eu, 0x0000131fu, 0x00001342u, 0x000200f8u, 0x0000131fu, 0x00050041u, 0x00000038u, 0x00001323u, 0x00001314u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001324u, 0x00001323u, 0x0003003eu, 0x00001322u, 0x00001324u, 0x00050039u, 0x00000008u, 0x00001325u, 0x00000048u, 0x00001322u, 0x0003003eu, 0x00001321u, 0x00001325u, 0x00050080u, 0x00000008u, 0x00001329u, 0x00001325u, 0x00000194u, 0x000500c3u, 0x00000008u, 0x0000132au, 0x00001329u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x0000132bu, 0x00001325u, 0x0000132au, 0x0003003eu, 0x00001326u, 0x0000132bu, 0x0004003du, 0x00000058u, 0x0000132cu, 0x0000016bu, 0x000300f7u, 0x0000132eu, 0x00000000u, 0x000400fau, 0x0000132cu, 0x0000132du, 0x0000133cu, 0x000200f8u, 0x0000132du, 0x0004003du, 0x00000058u, 0x0000132fu, 0x0000016au, 0x000300f7u, 0x00001331u, 0x00000000u, 0x000400fau, 0x0000132fu, 0x00001330u, 0x00001338u, 0x000200f8u, 0x00001330u, 0x0004003du, 0x00000008u, 0x00001334u, 0x00000169u, 0x00050084u, 0x00000008u, 0x00001335u, 0x0000132bu, 0x00001334u, 0x00050080u, 0x00000008u, 0x00001336u, 0x00001335u, 0x0000019du, 0x000500c3u, 0x00000008u, 0x00001337u, 0x00001336u, 0x0000019au, 0x0003003eu, 0x00001332u, 0x00001337u, 0x000200f9u, 0x00001331u, 0x000200f8u, 0x00001338u, 0x0004003du, 0x00000008u, 0x00001339u, 0x00000169u, 0x000500c4u, 0x00000008u, 0x0000133au, 0x00001339u, 0x000001a0u, 0x0003003eu, 0x00001332u, 0x0000133au, 0x000200f9u, 0x00001331u, 0x000200f8u, 0x00001331u, 0x000700f5u, 0x00000008u, 0x0000aec5u, 0x00001337u, 0x00001330u, 0x0000133au, 0x00001338u, 0x0003003eu, 0x00001326u, 0x0000aec5u, 0x000200f9u, 0x0000132eu, 0x000200f8u, 0x0000133cu, 0x0004003du, 0x00000008u, 0x0000133du, 0x00000168u, 0x00050080u, 0x00000008u, 0x0000133fu, 0x0000132bu, 0x0000133du, 0x0003003eu, 0x00001326u, 0x0000133fu, 0x000200f9u, 0x0000132eu, 0x000200f8u, 0x0000132eu, 0x000700f5u, 0x00000008u, 0x0000aec6u, 0x0000aec5u, 0x00001331u, 0x0000133fu, 0x0000133cu, 0x0008000cu, 0x00000008u, 0x00001341u, 0x00000001u, 0x0000002du, 0x0000aec6u, 0x00000185u, 0x000002eeu, 0x0003003eu, 0x0000016du, 0x00001341u, 0x000200f9u, 0x00001320u, 0x000200f8u, 0x00001342u, 0x0003003eu, 0x0000016du, 0x00000185u, 0x000200f9u, 0x00001320u, 0x000200f8u, 0x00001320u, 0x0004003du, 0x00000009u, 0x00001343u, 0x00001314u, 0x000200feu, 0x00001343u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000178u, 0x00000000u, 0x00000170u, 0x00030037u, 0x0000014eu, 0x00000171u, 0x00030037u, 0x00000037u, 0x00000172u, 0x00030037u, 0x00000037u, 0x00000173u, 0x00030037u, 0x00000038u, 0x00000174u, 0x00030037u, 0x00000038u, 0x00000175u, 0x00030037u, 0x00000059u, 0x00000176u, 0x00030037u, 0x00000059u, 0x00000177u, 0x000200f8u, 0x00000179u, 0x0004003bu, 0x00000037u, 0x00001346u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00001347u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001349u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000134cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001350u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00001351u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001353u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001356u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000135au, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x0000135bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000135du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001360u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001364u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00001365u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001367u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000136au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000136eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000136fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001371u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001373u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001375u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001378u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000137bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001386u, 0x00000007u, 0x0004003du, 0x0000014du, 0x00001348u, 0x00000171u, 0x0003003eu, 0x00001347u, 0x00001348u, 0x00050041u, 0x00000038u, 0x0000134au, 0x00000172u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000134bu, 0x0000134au, 0x0003003eu, 0x00001349u, 0x0000134bu, 0x00050041u, 0x00000038u, 0x0000134du, 0x00000173u, 0x000002d7u, 0x0004003du, 0x00000008u, 0x0000134eu, 0x0000134du, 0x0003003eu, 0x0000134cu, 0x0000134eu, 0x00070039u, 0x00000009u, 0x0000134fu, 0x00000153u, 0x00001347u, 0x00001349u, 0x0000134cu, 0x0003003eu, 0x00001346u, 0x0000134fu, 0x0004003du, 0x0000014du, 0x00001352u, 0x00000171u, 0x0003003eu, 0x00001351u, 0x00001352u, 0x00050041u, 0x00000038u, 0x00001354u, 0x00000172u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001355u, 0x00001354u, 0x0003003eu, 0x00001353u, 0x00001355u, 0x00050041u, 0x00000038u, 0x00001357u, 0x00000173u, 0x0000032au, 0x0004003du, 0x00000008u, 0x00001358u, 0x00001357u, 0x0003003eu, 0x00001356u, 0x00001358u, 0x00070039u, 0x00000009u, 0x00001359u, 0x00000158u, 0x00001351u, 0x00001353u, 0x00001356u, 0x0003003eu, 0x00001350u, 0x00001359u, 0x0004003du, 0x0000014du, 0x0000135cu, 0x00000171u, 0x0003003eu, 0x0000135bu, 0x0000135cu, 0x00050041u, 0x00000038u, 0x0000135eu, 0x00000172u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000135fu, 0x0000135eu, 0x0003003eu, 0x0000135du, 0x0000135fu, 0x00050041u, 0x00000038u, 0x00001361u, 0x00000173u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x00001362u, 0x00001361u, 0x0003003eu, 0x00001360u, 0x00001362u, 0x00070039u, 0x00000009u, 0x00001363u, 0x0000015du, 0x0000135bu, 0x0000135du, 0x00001360u, 0x0003003eu, 0x0000135au, 0x00001363u, 0x0004003du, 0x0000014du, 0x00001366u, 0x00000171u, 0x0003003eu, 0x00001365u, 0x00001366u, 0x00050041u, 0x00000038u, 0x00001368u, 0x00000172u, 0x00000331u, 0x0004003du, 0x00000008u, 0x00001369u, 0x00001368u, 0x0003003eu, 0x00001367u, 0x00001369u, 0x00050041u, 0x00000038u, 0x0000136bu, 0x00000173u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000136cu, 0x0000136bu, 0x0003003eu, 0x0000136au, 0x0000136cu, 0x00070039u, 0x00000009u, 0x0000136du, 0x00000162u, 0x00001365u, 0x00001367u, 0x0000136au, 0x0003003eu, 0x00001364u, 0x0000136du, 0x0003003eu, 0x0000136fu, 0x0000134fu, 0x0003003eu, 0x00001371u, 0x00001359u, 0x0003003eu, 0x00001373u, 0x00001363u, 0x0003003eu, 0x00001375u, 0x0000136du, 0x00080039u, 0x00000009u, 0x00001377u, 0x0000014bu, 0x0000136fu, 0x00001371u, 0x00001373u, 0x00001375u, 0x0003003eu, 0x0000136eu, 0x00001377u, 0x0004003du, 0x00000009u, 0x00001379u, 0x0000136eu, 0x0003003eu, 0x00001378u, 0x00001379u, 0x00050039u, 0x00000009u, 0x0000137au, 0x00000041u, 0x00001378u, 0x0003003eu, 0x0000136eu, 0x0000137au, 0x00050041u, 0x00000038u, 0x0000137cu, 0x0000136eu, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000137du, 0x0000137cu, 0x0004003du, 0x00000008u, 0x0000137fu, 0x0000137cu, 0x00050080u, 0x00000008u, 0x00001380u, 0x0000137fu, 0x00000194u, 0x000500c3u, 0x00000008u, 0x00001381u, 0x00001380u, 0x000001e0u, 0x00050080u, 0x00000008u, 0x00001382u, 0x0000137du, 0x00001381u, 0x0003003eu, 0x0000137bu, 0x00001382u, 0x0004003du, 0x00000058u, 0x00001383u, 0x00000176u, 0x000300f7u, 0x00001385u, 0x00000000u, 0x000400fau, 0x00001383u, 0x00001384u, 0x0000138eu, 0x000200f8u, 0x00001384u, 0x0004003du, 0x00000008u, 0x00001388u, 0x00000175u, 0x00050084u, 0x00000008u, 0x00001389u, 0x00001382u, 0x00001388u, 0x00050080u, 0x00000008u, 0x0000138au, 0x00001389u, 0x0000019du, 0x000500c3u, 0x00000008u, 0x0000138bu, 0x0000138au, 0x0000019au, 0x0003003eu, 0x00001386u, 0x0000138bu, 0x000500c3u, 0x00000008u, 0x0000138du, 0x0000138bu, 0x000001a0u, 0x0003003eu, 0x00000175u, 0x0000138du, 0x000200f9u, 0x00001385u, 0x000200f8u, 0x0000138eu, 0x0004003du, 0x00000008u, 0x0000138fu, 0x00000175u, 0x000500c4u, 0x00000008u, 0x00001390u, 0x0000138fu, 0x000001a0u, 0x0003003eu, 0x00001386u, 0x00001390u, 0x000200f9u, 0x00001385u, 0x000200f8u, 0x00001385u, 0x000700f5u, 0x00000008u, 0x0000aec8u, 0x0000138bu, 0x00001384u, 0x00001390u, 0x0000138eu, 0x0004003du, 0x00000058u, 0x00001391u, 0x00000177u, 0x000300f7u, 0x00001393u, 0x00000000u, 0x000400fau, 0x00001391u, 0x00001392u, 0x00001395u, 0x000200f8u, 0x00001392u, 0x0003003eu, 0x0000137bu, 0x0000aec8u, 0x000200f9u, 0x00001393u, 0x000200f8u, 0x00001395u, 0x0004003du, 0x00000008u, 0x00001396u, 0x00000174u, 0x00050080u, 0x00000008u, 0x00001398u, 0x00001382u, 0x00001396u, 0x0003003eu, 0x0000137bu, 0x00001398u, 0x000200f9u, 0x00001393u, 0x000200f8u, 0x00001393u, 0x000700f5u, 0x00000008u, 0x0000aec9u, 0x0000aec8u, 0x00001392u, 0x00001398u, 0x00001395u, 0x0008000cu, 0x00000008u, 0x0000139au, 0x00000001u, 0x0000002du, 0x0000aec9u, 0x00000185u, 0x000002eeu, 0x0003003eu, 0x0000137cu, 0x0000139au, 0x0004003du, 0x00000009u, 0x0000139cu, 0x0000136eu, 0x000200feu, 0x0000139cu, 0x00010038u, 0x00050036u, 0x00000058u, 0x00000181u, 0x00000000u, 0x0000017cu, 0x00030037u, 0x00000038u, 0x0000017du, 0x00030037u, 0x00000038u, 0x0000017eu, 0x00030037u, 0x00000007u, 0x0000017fu, 0x00030037u, 0x0000017bu, 0x00000180u, 0x000200f8u, 0x00000182u, 0x0004003bu, 0x00000038u, 0x00006a31u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006a30u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a2fu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a2eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a2du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a2cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a2bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a2au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a29u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a28u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006a07u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006a06u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a05u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a04u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a03u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a02u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a01u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006a00u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000069ffu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000069feu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069e0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069dfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069deu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069ddu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069dcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069dbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069dau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069d3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069b5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069b4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069b3u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069b2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069b1u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069b0u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069afu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000069aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000069a8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000699bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000699au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006999u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006998u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006997u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006996u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006995u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006994u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006993u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006992u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006991u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006973u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006972u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006971u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006970u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000696fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000696eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000696du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000696cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000696bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000696au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006969u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006968u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006967u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006966u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000695fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000695eu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000695du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000695cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000695bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000695au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006955u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006954u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006953u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006952u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000693eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000693du, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000693cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000693bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000693au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006939u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006938u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006937u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00006936u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006932u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006931u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00006930u, 0x00000007u, 0x0005003bu, 0x00000059u, 0x000017f0u, 0x00000007u, 0x00001084u, 0x0004003bu, 0x00000059u, 0x000017edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013eau, 0x00000007u, 0x0004003bu, 0x000013edu, 0x000013eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000013fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001401u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001404u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001407u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000140au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000140du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001410u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001413u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001454u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001458u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000145cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001461u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001465u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000146au, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000146eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001473u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001477u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000147bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000147fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001484u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001488u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000148cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001491u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001496u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000149bu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014a0u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014a5u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014aau, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014afu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014b4u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014b9u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000014d4u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014d6u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014ddu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000014eeu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000014efu, 0x00000007u, 0x0004003bu, 0x00000067u, 0x000014f0u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000014f2u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000014f5u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014f7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000014f9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000014fbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000014fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001500u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001503u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000150au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001517u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x00001518u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000151au, 0x00000007u, 0x0004003bu, 0x00000068u, 0x0000151cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000151eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001520u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001522u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000154au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000154bu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000154eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001551u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001559u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001569u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000156cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001571u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001574u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001575u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001578u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000157bu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000157eu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001580u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001583u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001584u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001592u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001593u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001594u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001595u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001596u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001599u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000159cu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000159fu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015a1u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015a3u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015a5u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015a7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015a9u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015aau, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015abu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015acu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015bcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015bfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015c8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015cbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000015cdu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015cfu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015d1u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015d3u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015d5u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015d7u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015d9u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015ebu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000015f4u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x000015f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015f7u, 0x00000007u, 0x0004003bu, 0x00000068u, 0x000015f9u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015fbu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015fdu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000015ffu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001601u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001603u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001604u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000160du, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000160fu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001616u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001625u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001629u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000162cu, 0x00000007u, 0x0004003bu, 0x00000053u, 0x0000163du, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001650u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00001651u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001653u, 0x00000007u, 0x0004003bu, 0x00000053u, 0x00001658u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001660u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001663u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001666u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001667u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001674u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001675u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001677u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000167cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001683u, 0x00000007u, 0x0004003bu, 0x0000008au, 0x0000168cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000168eu, 0x00000007u, 0x0004003bu, 0x00000068u, 0x00001690u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001692u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001694u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001696u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001698u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000169au, 0x00000007u, 0x0004003bu, 0x00000037u, 0x0000169cu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000016a9u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000016abu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016b7u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016b8u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016b9u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016bbu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016bcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016bdu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016beu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016bfu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016d5u, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000016d6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000016d8u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000016dau, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016dcu, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016deu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000016e0u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000016e2u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x000016e4u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x000016e6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000016f6u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x000016feu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x000016ffu, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001701u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001703u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001705u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001707u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001709u, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000170bu, 0x00000007u, 0x0004003bu, 0x0000014eu, 0x00001724u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001726u, 0x00000007u, 0x0004003bu, 0x00000037u, 0x00001728u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000172au, 0x00000007u, 0x0004003bu, 0x00000038u, 0x0000172cu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x0000172eu, 0x00000007u, 0x0004003bu, 0x00000059u, 0x00001730u, 0x00000007u, 0x0004003bu, 0x00000038u, 0x00001748u, 0x00000007u, 0x000300f7u, 0x000017ecu, 0x00000000u, 0x000300fbu, 0x000002d7u, 0x000017efu, 0x000200f8u, 0x000017efu, 0x0004003du, 0x00000006u, 0x000013a1u, 0x0000017fu, 0x0003003eu, 0x000013a0u, 0x000013a1u, 0x00050039u, 0x00000019u, 0x000013a2u, 0x0000001cu, 0x000013a0u, 0x00050051u, 0x00000008u, 0x00006933u, 0x000013a2u, 0x00000000u, 0x0003003eu, 0x00006930u, 0x00006933u, 0x00050051u, 0x00000008u, 0x00006934u, 0x000013a2u, 0x00000001u, 0x0003003eu, 0x00006931u, 0x00006934u, 0x00050051u, 0x00000008u, 0x00006935u, 0x000013a2u, 0x00000002u, 0x0003003eu, 0x00006932u, 0x00006935u, 0x0004003du, 0x00000008u, 0x000013a3u, 0x0000017eu, 0x00050084u, 0x00000008u, 0x000013a6u, 0x00000594u, 0x00006934u, 0x000500b1u, 0x00000058u, 0x000013a7u, 0x000013a3u, 0x000013a6u, 0x000400a8u, 0x00000058u, 0x000013a8u, 0x000013a7u, 0x000300f7u, 0x000013aau, 0x00000000u, 0x000400fau, 0x000013a8u, 0x000013a9u, 0x000013aau, 0x000200f8u, 0x000013a9u, 0x0004003du, 0x00000008u, 0x000013abu, 0x0000017eu, 0x00050084u, 0x00000008u, 0x000013aeu, 0x00006935u, 0x00000594u, 0x00050080u, 0x00000008u, 0x000013b0u, 0x000013aeu, 0x000013afu, 0x000500adu, 0x00000058u, 0x000013b1u, 0x000013abu, 0x000013b0u, 0x000200f9u, 0x000013aau, 0x000200f8u, 0x000013aau, 0x000700f5u, 0x00000058u, 0x000013b2u, 0x000013a7u, 0x000017efu, 0x000013b1u, 0x000013a9u, 0x000300f7u, 0x000013b4u, 0x00000000u, 0x000400fau, 0x000013b2u, 0x000013b3u, 0x000013b4u, 0x000200f8u, 0x000013b3u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x000013b4u, 0x0004003du, 0x00000006u, 0x000013bcu, 0x0000017fu, 0x00070041u, 0x000001f9u, 0x000013bdu, 0x000013bbu, 0x00000185u, 0x000013bcu, 0x000001e6u, 0x0004003du, 0x000001abu, 0x000013beu, 0x000013bdu, 0x00040071u, 0x00000006u, 0x000013bfu, 0x000013beu, 0x0003003eu, 0x000013b6u, 0x000013bfu, 0x000300f7u, 0x000013c2u, 0x00000000u, 0x000400fau, 0x000013c0u, 0x000013c1u, 0x000013c2u, 0x000200f8u, 0x000013c1u, 0x000500c7u, 0x00000006u, 0x000013c5u, 0x000013bfu, 0x000013c4u, 0x000500abu, 0x00000058u, 0x000013c6u, 0x000013c5u, 0x000002d7u, 0x000300f7u, 0x000013c8u, 0x00000000u, 0x000400fau, 0x000013c6u, 0x000013c7u, 0x000013c8u, 0x000200f8u, 0x000013c7u, 0x0004003du, 0x00000008u, 0x000013cbu, 0x0000017du, 0x000500c7u, 0x00000008u, 0x000013ccu, 0x000013cbu, 0x000013cau, 0x0003003eu, 0x0000017du, 0x000013ccu, 0x0004003du, 0x00000008u, 0x000013cfu, 0x0000017eu, 0x000500c7u, 0x00000008u, 0x000013d0u, 0x000013cfu, 0x000013ceu, 0x0003003eu, 0x0000017eu, 0x000013d0u, 0x000200f9u, 0x000013c8u, 0x000200f8u, 0x000013c8u, 0x000200f9u, 0x000013c2u, 0x000200f8u, 0x000013c2u, 0x00050084u, 0x00000008u, 0x000013d4u, 0x00000594u, 0x00006933u, 0x0004003du, 0x00000008u, 0x000013d5u, 0x0000017eu, 0x00050082u, 0x00000008u, 0x000013d9u, 0x000013d5u, 0x000013a6u, 0x00050080u, 0x00000008u, 0x000013dau, 0x000013d4u, 0x000013d9u, 0x0004007cu, 0x00000006u, 0x000013dbu, 0x000013dau, 0x0003003eu, 0x000013dcu, 0x000013dbu, 0x00050039u, 0x0000001eu, 0x000013ddu, 0x00000021u, 0x000013dcu, 0x00050051u, 0x00000009u, 0x0000693fu, 0x000013ddu, 0x00000000u, 0x0003003eu, 0x00006936u, 0x0000693fu, 0x00050051u, 0x00000009u, 0x00006940u, 0x000013ddu, 0x00000001u, 0x0003003eu, 0x00006937u, 0x00006940u, 0x00050051u, 0x00000009u, 0x00006941u, 0x000013ddu, 0x00000002u, 0x0003003eu, 0x00006938u, 0x00006941u, 0x00050051u, 0x00000009u, 0x00006942u, 0x000013ddu, 0x00000003u, 0x0003003eu, 0x00006939u, 0x00006942u, 0x00050051u, 0x00000008u, 0x00006943u, 0x000013ddu, 0x00000004u, 0x0003003eu, 0x0000693au, 0x00006943u, 0x00050051u, 0x00000008u, 0x00006944u, 0x000013ddu, 0x00000005u, 0x0003003eu, 0x0000693bu, 0x00006944u, 0x00050051u, 0x00000008u, 0x00006945u, 0x000013ddu, 0x00000006u, 0x0003003eu, 0x0000693cu, 0x00006945u, 0x00050051u, 0x00000008u, 0x00006946u, 0x000013ddu, 0x00000007u, 0x0003003eu, 0x0000693du, 0x00006946u, 0x00050051u, 0x00000008u, 0x00006947u, 0x000013ddu, 0x00000008u, 0x0003003eu, 0x0000693eu, 0x00006947u, 0x000500aau, 0x00000058u, 0x000013e0u, 0x00006947u, 0x00000185u, 0x000300f7u, 0x000013e2u, 0x00000000u, 0x000400fau, 0x000013e0u, 0x000013e1u, 0x000013e2u, 0x000200f8u, 0x000013e1u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x000013e2u, 0x0004003du, 0x00000006u, 0x000013e5u, 0x0000017fu, 0x00070041u, 0x000001f9u, 0x000013e6u, 0x000013bbu, 0x00000185u, 0x000013e5u, 0x000001ecu, 0x0004003du, 0x000001abu, 0x000013e7u, 0x000013e6u, 0x00040071u, 0x00000006u, 0x000013e8u, 0x000013e7u, 0x0003003eu, 0x000013e4u, 0x000013e8u, 0x0004003du, 0x00000006u, 0x000013ebu, 0x0000017fu, 0x0003003eu, 0x000013eau, 0x000013ebu, 0x00050039u, 0x0000000au, 0x000013ecu, 0x0000000du, 0x000013eau, 0x00050051u, 0x00000009u, 0x00006956u, 0x000013ecu, 0x00000001u, 0x0003003eu, 0x00006952u, 0x00006956u, 0x00050051u, 0x00000009u, 0x00006957u, 0x000013ecu, 0x00000003u, 0x0003003eu, 0x00006953u, 0x00006957u, 0x00050051u, 0x00000009u, 0x00006958u, 0x000013ecu, 0x00000005u, 0x0003003eu, 0x00006954u, 0x00006958u, 0x00050051u, 0x00000009u, 0x00006959u, 0x000013ecu, 0x00000007u, 0x0003003eu, 0x00006955u, 0x00006959u, 0x0004003du, 0x00000006u, 0x000013f5u, 0x0000017fu, 0x00070041u, 0x000001b6u, 0x000013f6u, 0x000013f4u, 0x00000185u, 0x000013f5u, 0x00000185u, 0x0004003du, 0x000001acu, 0x000013f7u, 0x000013f6u, 0x00040071u, 0x000001b9u, 0x000013f8u, 0x000013f7u, 0x0003003eu, 0x000013eeu, 0x000013f8u, 0x00050041u, 0x00000007u, 0x000013fau, 0x000013eeu, 0x000002d7u, 0x0004003du, 0x00000006u, 0x000013fbu, 0x000013fau, 0x0003003eu, 0x000013f9u, 0x000013fbu, 0x00050041u, 0x00000007u, 0x000013fdu, 0x000013eeu, 0x0000032eu, 0x0004003du, 0x00000006u, 0x000013feu, 0x000013fdu, 0x0003003eu, 0x000013fcu, 0x000013feu, 0x0003003eu, 0x00001401u, 0x000013fbu, 0x00050039u, 0x00000014u, 0x00001403u, 0x00000017u, 0x00001401u, 0x00050051u, 0x00000009u, 0x00006960u, 0x00001403u, 0x00000000u, 0x0003003eu, 0x0000695au, 0x00006960u, 0x00050051u, 0x00000009u, 0x00006961u, 0x00001403u, 0x00000001u, 0x0003003eu, 0x0000695bu, 0x00006961u, 0x00050051u, 0x00000009u, 0x00006962u, 0x00001403u, 0x00000002u, 0x0003003eu, 0x0000695cu, 0x00006962u, 0x00050051u, 0x00000009u, 0x00006963u, 0x00001403u, 0x00000003u, 0x0003003eu, 0x0000695du, 0x00006963u, 0x00050051u, 0x00000006u, 0x00006964u, 0x00001403u, 0x00000004u, 0x0003003eu, 0x0000695eu, 0x00006964u, 0x00050051u, 0x00000008u, 0x00006965u, 0x00001403u, 0x00000005u, 0x0003003eu, 0x0000695fu, 0x00006965u, 0x0003003eu, 0x00001404u, 0x00006964u, 0x0003003eu, 0x00001407u, 0x00006965u, 0x0003003eu, 0x0000140au, 0x00006960u, 0x0003003eu, 0x0000140du, 0x00006961u, 0x0003003eu, 0x00001410u, 0x00006962u, 0x0003003eu, 0x00001413u, 0x00006963u, 0x000300f7u, 0x0000141au, 0x00000000u, 0x000400fau, 0x00001418u, 0x00001419u, 0x0000141au, 0x000200f8u, 0x00001419u, 0x0003003eu, 0x00001404u, 0x0000141bu, 0x0003003eu, 0x00001407u, 0x0000141eu, 0x00050041u, 0x00000038u, 0x00001422u, 0x0000140au, 0x000002d7u, 0x0003003eu, 0x00001422u, 0x00001421u, 0x00050041u, 0x00000038u, 0x00001425u, 0x0000140au, 0x0000032au, 0x0003003eu, 0x00001425u, 0x00001424u, 0x00050041u, 0x00000038u, 0x00001428u, 0x0000140au, 0x0000032eu, 0x0003003eu, 0x00001428u, 0x00001427u, 0x00050041u, 0x00000038u, 0x0000142cu, 0x0000140au, 0x00000331u, 0x0003003eu, 0x0000142cu, 0x0000142bu, 0x00050041u, 0x00000038u, 0x00001430u, 0x0000140du, 0x000002d7u, 0x0003003eu, 0x00001430u, 0x0000142fu, 0x00050041u, 0x00000038u, 0x00001433u, 0x0000140du, 0x0000032au, 0x0003003eu, 0x00001433u, 0x00001432u, 0x00050041u, 0x00000038u, 0x00001436u, 0x0000140du, 0x0000032eu, 0x0003003eu, 0x00001436u, 0x00001435u, 0x00050041u, 0x00000038u, 0x00001439u, 0x0000140du, 0x00000331u, 0x0003003eu, 0x00001439u, 0x00001438u, 0x00050041u, 0x00000038u, 0x0000143du, 0x00001410u, 0x000002d7u, 0x0003003eu, 0x0000143du, 0x0000143cu, 0x00050041u, 0x00000038u, 0x00001440u, 0x00001410u, 0x0000032au, 0x0003003eu, 0x00001440u, 0x0000143fu, 0x00050041u, 0x00000038u, 0x00001443u, 0x00001410u, 0x0000032eu, 0x0003003eu, 0x00001443u, 0x00001442u, 0x00050041u, 0x00000038u, 0x00001446u, 0x00001410u, 0x00000331u, 0x0003003eu, 0x00001446u, 0x00001445u, 0x00050041u, 0x00000038u, 0x0000144au, 0x00001413u, 0x000002d7u, 0x0003003eu, 0x0000144au, 0x00001449u, 0x00050041u, 0x00000038u, 0x0000144du, 0x00001413u, 0x0000032au, 0x0003003eu, 0x0000144du, 0x0000144cu, 0x00050041u, 0x00000038u, 0x00001450u, 0x00001413u, 0x0000032eu, 0x0003003eu, 0x00001450u, 0x0000144fu, 0x00050041u, 0x00000038u, 0x00001453u, 0x00001413u, 0x00000331u, 0x0003003eu, 0x00001453u, 0x00001452u, 0x000200f9u, 0x0000141au, 0x000200f8u, 0x0000141au, 0x000600a9u, 0x00000008u, 0x0000b1efu, 0x00001418u, 0x0000141eu, 0x00006965u, 0x000600a9u, 0x00000006u, 0x0000b1f0u, 0x00001418u, 0x0000141bu, 0x00006964u, 0x000500c7u, 0x00000006u, 0x00001456u, 0x0000b1f0u, 0x000002dau, 0x000500abu, 0x00000058u, 0x00001457u, 0x00001456u, 0x000002d7u, 0x0003003eu, 0x00001454u, 0x00001457u, 0x000500c7u, 0x00000006u, 0x0000145au, 0x0000b1f0u, 0x000013c4u, 0x000500abu, 0x00000058u, 0x0000145bu, 0x0000145au, 0x000002d7u, 0x0003003eu, 0x00001458u, 0x0000145bu, 0x000500c7u, 0x00000006u, 0x0000145fu, 0x0000b1f0u, 0x0000145eu, 0x000500abu, 0x00000058u, 0x00001460u, 0x0000145fu, 0x000002d7u, 0x0003003eu, 0x0000145cu, 0x00001460u, 0x000500c7u, 0x00000006u, 0x00001463u, 0x0000b1f0u, 0x0000037bu, 0x000500abu, 0x00000058u, 0x00001464u, 0x00001463u, 0x000002d7u, 0x0003003eu, 0x00001461u, 0x00001464u, 0x000500c7u, 0x00000006u, 0x00001468u, 0x0000b1f0u, 0x00001467u, 0x000500abu, 0x00000058u, 0x00001469u, 0x00001468u, 0x000002d7u, 0x0003003eu, 0x00001465u, 0x00001469u, 0x000500c7u, 0x00000006u, 0x0000146cu, 0x0000b1f0u, 0x000002beu, 0x000500abu, 0x00000058u, 0x0000146du, 0x0000146cu, 0x000002d7u, 0x0003003eu, 0x0000146au, 0x0000146du, 0x000500c7u, 0x00000006u, 0x00001471u, 0x0000b1f0u, 0x00001470u, 0x000500abu, 0x00000058u, 0x00001472u, 0x00001471u, 0x000002d7u, 0x0003003eu, 0x0000146eu, 0x00001472u, 0x000500c7u, 0x00000006u, 0x00001475u, 0x0000b1f0u, 0x00000798u, 0x000500abu, 0x00000058u, 0x00001476u, 0x00001475u, 0x000002d7u, 0x0003003eu, 0x00001473u, 0x00001476u, 0x000500c7u, 0x00000006u, 0x00001479u, 0x0000b1f0u, 0x00000790u, 0x000500abu, 0x00000058u, 0x0000147au, 0x00001479u, 0x000002d7u, 0x0003003eu, 0x00001477u, 0x0000147au, 0x000500c7u, 0x00000006u, 0x0000147du, 0x0000b1f0u, 0x000006bcu, 0x000500abu, 0x00000058u, 0x0000147eu, 0x0000147du, 0x000002d7u, 0x0003003eu, 0x0000147bu, 0x0000147eu, 0x000500c7u, 0x00000006u, 0x00001482u, 0x0000b1f0u, 0x00001481u, 0x000500abu, 0x00000058u, 0x00001483u, 0x00001482u, 0x000002d7u, 0x0003003eu, 0x0000147fu, 0x00001483u, 0x000500c7u, 0x00000006u, 0x00001486u, 0x0000b1f0u, 0x0000032au, 0x000500abu, 0x00000058u, 0x00001487u, 0x00001486u, 0x000002d7u, 0x0003003eu, 0x00001484u, 0x00001487u, 0x000500c7u, 0x00000006u, 0x0000148au, 0x0000b1f0u, 0x000006c9u, 0x000500abu, 0x00000058u, 0x0000148bu, 0x0000148au, 0x000002d7u, 0x0003003eu, 0x00001488u, 0x0000148bu, 0x000500c7u, 0x00000006u, 0x0000148fu, 0x0000b1f0u, 0x0000148eu, 0x000500abu, 0x00000058u, 0x00001490u, 0x0000148fu, 0x000002d7u, 0x0003003eu, 0x0000148cu, 0x00001490u, 0x000500c7u, 0x00000006u, 0x00001494u, 0x0000b1f0u, 0x00001493u, 0x000500abu, 0x00000058u, 0x00001495u, 0x00001494u, 0x000002d7u, 0x0003003eu, 0x00001491u, 0x00001495u, 0x000500c7u, 0x00000006u, 0x00001499u, 0x0000b1f0u, 0x00001498u, 0x000500abu, 0x00000058u, 0x0000149au, 0x00001499u, 0x000002d7u, 0x0003003eu, 0x00001496u, 0x0000149au, 0x000500c7u, 0x00000006u, 0x0000149eu, 0x0000b1f0u, 0x0000149du, 0x000500abu, 0x00000058u, 0x0000149fu, 0x0000149eu, 0x000002d7u, 0x0003003eu, 0x0000149bu, 0x0000149fu, 0x000500c7u, 0x00000006u, 0x000014a3u, 0x0000b1f0u, 0x000014a2u, 0x000500abu, 0x00000058u, 0x000014a4u, 0x000014a3u, 0x000002d7u, 0x0003003eu, 0x000014a0u, 0x000014a4u, 0x000500c7u, 0x00000006u, 0x000014a8u, 0x0000b1f0u, 0x000014a7u, 0x000500abu, 0x00000058u, 0x000014a9u, 0x000014a8u, 0x000002d7u, 0x0003003eu, 0x000014a5u, 0x000014a9u, 0x000500c7u, 0x00000006u, 0x000014adu, 0x0000b1f0u, 0x000014acu, 0x000500abu, 0x00000058u, 0x000014aeu, 0x000014adu, 0x000002d7u, 0x0003003eu, 0x000014aau, 0x000014aeu, 0x000500c7u, 0x00000006u, 0x000014b2u, 0x0000b1f0u, 0x000014b1u, 0x000500abu, 0x00000058u, 0x000014b3u, 0x000014b2u, 0x000002d7u, 0x0003003eu, 0x000014afu, 0x000014b3u, 0x000500c7u, 0x00000006u, 0x000014b7u, 0x0000b1f0u, 0x000014b6u, 0x000500abu, 0x00000058u, 0x000014b8u, 0x000014b7u, 0x000002d7u, 0x0003003eu, 0x000014b4u, 0x000014b8u, 0x000500c7u, 0x00000006u, 0x000014bcu, 0x0000b1f0u, 0x000014bbu, 0x000500abu, 0x00000058u, 0x000014bdu, 0x000014bcu, 0x000002d7u, 0x0003003eu, 0x000014b9u, 0x000014bdu, 0x000500c7u, 0x00000006u, 0x000014c1u, 0x0000b1f0u, 0x000014c0u, 0x000500abu, 0x00000058u, 0x000014c2u, 0x000014c1u, 0x000002d7u, 0x0003003eu, 0x000014beu, 0x000014c2u, 0x000500c7u, 0x00000006u, 0x000014c5u, 0x0000b1f0u, 0x000014c4u, 0x000500abu, 0x00000058u, 0x000014c6u, 0x000014c5u, 0x000002d7u, 0x000300f7u, 0x000014c8u, 0x00000000u, 0x000400fau, 0x000014c6u, 0x000014c7u, 0x000014c8u, 0x000200f8u, 0x000014c7u, 0x0004003du, 0x00000008u, 0x000014c9u, 0x0000017du, 0x0004007cu, 0x00000006u, 0x000014cau, 0x000014c9u, 0x0004003du, 0x00000008u, 0x000014cbu, 0x0000017eu, 0x0004007cu, 0x00000006u, 0x000014ccu, 0x000014cbu, 0x0004003du, 0x00000006u, 0x000014cdu, 0x0000017fu, 0x00060041u, 0x000014ceu, 0x000014cfu, 0x00000527u, 0x00000185u, 0x0000019au, 0x0004003du, 0x00000006u, 0x000014d0u, 0x000014cfu, 0x00050080u, 0x00000006u, 0x000014d1u, 0x000014cdu, 0x000014d0u, 0x0003003eu, 0x000014d2u, 0x000014cau, 0x0003003eu, 0x000014d3u, 0x000014ccu, 0x0003003eu, 0x000014d4u, 0x000014d1u, 0x00070039u, 0x00000002u, 0x000014d5u, 0x0000002cu, 0x000014d2u, 0x000014d3u, 0x000014d4u, 0x000200f9u, 0x000014c8u, 0x000200f8u, 0x000014c8u, 0x000500c7u, 0x00000006u, 0x000014d8u, 0x000013bfu, 0x0000032au, 0x000500abu, 0x00000058u, 0x000014d9u, 0x000014d8u, 0x000002d7u, 0x0003003eu, 0x000014d6u, 0x000014d9u, 0x000300f7u, 0x000014dcu, 0x00000000u, 0x000400fau, 0x00001490u, 0x000014dbu, 0x00001539u, 0x000200f8u, 0x000014dbu, 0x0004003du, 0x00000008u, 0x000014deu, 0x0000017du, 0x000500afu, 0x00000058u, 0x000014e1u, 0x000014deu, 0x00006944u, 0x000300f7u, 0x000014e3u, 0x00000000u, 0x000400fau, 0x000014e1u, 0x000014e2u, 0x000014e3u, 0x000200f8u, 0x000014e2u, 0x0004003du, 0x00000008u, 0x000014e4u, 0x0000017du, 0x000500b3u, 0x00000058u, 0x000014e7u, 0x000014e4u, 0x00006945u, 0x000200f9u, 0x000014e3u, 0x000200f8u, 0x000014e3u, 0x000700f5u, 0x00000058u, 0x000014e8u, 0x000014e1u, 0x000014dbu, 0x000014e7u, 0x000014e2u, 0x0003003eu, 0x000014ddu, 0x000014e8u, 0x000400a8u, 0x00000058u, 0x000014eau, 0x000014e8u, 0x000300f7u, 0x000014ecu, 0x00000000u, 0x000400fau, 0x000014eau, 0x000014ebu, 0x000014ecu, 0x000200f8u, 0x000014ebu, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x000014ecu, 0x0003003eu, 0x000014f0u, 0x000013ddu, 0x0003003eu, 0x000014f2u, 0x00006958u, 0x0004003du, 0x00000008u, 0x000014f6u, 0x0000017du, 0x0003003eu, 0x000014f5u, 0x000014f6u, 0x0003003eu, 0x000014f7u, 0x0000146du, 0x0003003eu, 0x000014f9u, 0x000014d9u, 0x000b0039u, 0x00000002u, 0x000014fdu, 0x00000071u, 0x000014f0u, 0x000014f2u, 0x000014f5u, 0x000014f7u, 0x000014f9u, 0x000014fbu, 0x000014fcu, 0x0004003du, 0x0000004du, 0x000014feu, 0x000014fbu, 0x0003003eu, 0x000014eeu, 0x000014feu, 0x0004003du, 0x00000008u, 0x000014ffu, 0x000014fcu, 0x0003003eu, 0x000014efu, 0x000014ffu, 0x000500c7u, 0x00000006u, 0x00001502u, 0x000013e8u, 0x000010eeu, 0x0003003eu, 0x00001500u, 0x00001502u, 0x0004003du, 0x00000006u, 0x00001504u, 0x0000017fu, 0x00080041u, 0x000001f9u, 0x00001506u, 0x000013f4u, 0x00000185u, 0x00001504u, 0x00000197u, 0x00001502u, 0x0004003du, 0x000001abu, 0x00001507u, 0x00001506u, 0x00040071u, 0x00000006u, 0x00001508u, 0x00001507u, 0x0003003eu, 0x00001503u, 0x00001508u, 0x0003003eu, 0x0000150au, 0x00001508u, 0x00050039u, 0x00000023u, 0x0000150cu, 0x00000026u, 0x0000150au, 0x00050051u, 0x00000006u, 0x00006974u, 0x0000150cu, 0x00000000u, 0x0003003eu, 0x00006966u, 0x00006974u, 0x00050051u, 0x00000006u, 0x00006975u, 0x0000150cu, 0x00000001u, 0x0003003eu, 0x00006967u, 0x00006975u, 0x00050051u, 0x00000006u, 0x00006976u, 0x0000150cu, 0x00000002u, 0x0003003eu, 0x00006968u, 0x00006976u, 0x00050051u, 0x00000006u, 0x00006977u, 0x0000150cu, 0x00000003u, 0x0003003eu, 0x00006969u, 0x00006977u, 0x00050051u, 0x00000006u, 0x00006978u, 0x0000150cu, 0x00000004u, 0x0003003eu, 0x0000696au, 0x00006978u, 0x00050051u, 0x00000006u, 0x00006979u, 0x0000150cu, 0x00000005u, 0x0003003eu, 0x0000696bu, 0x00006979u, 0x00050051u, 0x00000008u, 0x0000697au, 0x0000150cu, 0x00000006u, 0x0003003eu, 0x0000696cu, 0x0000697au, 0x00050051u, 0x00000008u, 0x0000697bu, 0x0000150cu, 0x00000007u, 0x0003003eu, 0x0000696du, 0x0000697bu, 0x00050051u, 0x00000008u, 0x0000697cu, 0x0000150cu, 0x00000008u, 0x0003003eu, 0x0000696eu, 0x0000697cu, 0x00050051u, 0x00000008u, 0x0000697du, 0x0000150cu, 0x00000009u, 0x0003003eu, 0x0000696fu, 0x0000697du, 0x00050051u, 0x00000008u, 0x0000697eu, 0x0000150cu, 0x0000000au, 0x0003003eu, 0x00006970u, 0x0000697eu, 0x00050051u, 0x00000008u, 0x0000697fu, 0x0000150cu, 0x0000000bu, 0x0003003eu, 0x00006971u, 0x0000697fu, 0x00050051u, 0x00000008u, 0x00006980u, 0x0000150cu, 0x0000000cu, 0x0003003eu, 0x00006972u, 0x00006980u, 0x00050051u, 0x00000008u, 0x00006981u, 0x0000150cu, 0x0000000du, 0x0003003eu, 0x00006973u, 0x00006981u, 0x000300f7u, 0x00001510u, 0x00000000u, 0x000400fau, 0x0000150eu, 0x0000150fu, 0x00001510u, 0x000200f8u, 0x0000150fu, 0x0003003eu, 0x0000696cu, 0x00001512u, 0x0003003eu, 0x0000696du, 0x00001515u, 0x000200f9u, 0x00001510u, 0x000200f8u, 0x00001510u, 0x000600a9u, 0x00000008u, 0x0000b1f1u, 0x0000150eu, 0x00001512u, 0x0000697au, 0x000600a9u, 0x00000008u, 0x0000b1f2u, 0x0000150eu, 0x00001515u, 0x0000697bu, 0x00110050u, 0x00000023u, 0x00006990u, 0x00006974u, 0x00006975u, 0x00006976u, 0x00006977u, 0x00006978u, 0x00006979u, 0x0000b1f1u, 0x0000b1f2u, 0x0000697cu, 0x0000697du, 0x0000697eu, 0x0000697fu, 0x00006980u, 0x00006981u, 0x0003003eu, 0x00001518u, 0x00006990u, 0x0003003eu, 0x0000151au, 0x000013feu, 0x0003003eu, 0x0000151cu, 0x000014feu, 0x0003003eu, 0x0000151eu, 0x000014ffu, 0x0003003eu, 0x00001520u, 0x00001457u, 0x0003003eu, 0x00001522u, 0x0000145bu, 0x000a0039u, 0x00000008u, 0x00001524u, 0x00000110u, 0x00001518u, 0x0000151au, 0x0000151cu, 0x0000151eu, 0x00001520u, 0x00001522u, 0x0003003eu, 0x00001517u, 0x00001524u, 0x00050041u, 0x00000038u, 0x00001526u, 0x00000180u, 0x00000194u, 0x0003003eu, 0x00001526u, 0x00001524u, 0x00050041u, 0x00000038u, 0x00001527u, 0x00000180u, 0x00000197u, 0x0003003eu, 0x00001527u, 0x000002e0u, 0x000300f7u, 0x0000152au, 0x00000000u, 0x000400fau, 0x00001495u, 0x00001529u, 0x0000152au, 0x000200f8u, 0x00001529u, 0x00060041u, 0x00000528u, 0x0000152bu, 0x00000527u, 0x00000185u, 0x00000197u, 0x0004003du, 0x00000008u, 0x0000152cu, 0x0000152bu, 0x000500aau, 0x00000058u, 0x0000152du, 0x0000152cu, 0x00000197u, 0x000200f9u, 0x0000152au, 0x000200f8u, 0x0000152au, 0x000700f5u, 0x00000058u, 0x0000152eu, 0x00001495u, 0x00001510u, 0x0000152du, 0x00001529u, 0x000300f7u, 0x00001530u, 0x00000000u, 0x000400fau, 0x0000152eu, 0x0000152fu, 0x00001530u, 0x000200f8u, 0x0000152fu, 0x000500c7u, 0x00000008u, 0x00001532u, 0x00001524u, 0x00000194u, 0x000500aau, 0x00000058u, 0x00001533u, 0x00001532u, 0x00000185u, 0x000200f9u, 0x00001530u, 0x000200f8u, 0x00001530u, 0x000700f5u, 0x00000058u, 0x00001534u, 0x0000152eu, 0x0000152au, 0x00001533u, 0x0000152fu, 0x000300f7u, 0x00001536u, 0x00000000u, 0x000400fau, 0x00001534u, 0x00001535u, 0x00001536u, 0x000200f8u, 0x00001535u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x00001536u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x000004a4u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x00001539u, 0x000300f7u, 0x0000153cu, 0x00000000u, 0x000400fau, 0x0000148bu, 0x0000153bu, 0x0000153cu, 0x000200f8u, 0x0000153bu, 0x00050041u, 0x00000038u, 0x0000153du, 0x00000180u, 0x00000197u, 0x0003003eu, 0x0000153du, 0x00000322u, 0x0004003du, 0x00000008u, 0x0000153eu, 0x0000017du, 0x000500afu, 0x00000058u, 0x00001541u, 0x0000153eu, 0x00006944u, 0x000300f7u, 0x00001543u, 0x00000000u, 0x000400fau, 0x00001541u, 0x00001542u, 0x00001543u, 0x000200f8u, 0x00001542u, 0x0004003du, 0x00000008u, 0x00001544u, 0x0000017du, 0x000500b3u, 0x00000058u, 0x00001547u, 0x00001544u, 0x00006945u, 0x000200f9u, 0x00001543u, 0x000200f8u, 0x00001543u, 0x000700f5u, 0x00000058u, 0x00001548u, 0x00001541u, 0x0000153bu, 0x00001547u, 0x00001542u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001548u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x0000153cu, 0x000200f9u, 0x000014dcu, 0x000200f8u, 0x000014dcu, 0x0003003eu, 0x0000154bu, 0x00006941u, 0x0003003eu, 0x0000154eu, 0x00006942u, 0x0004003du, 0x00000008u, 0x00001552u, 0x0000017du, 0x0003003eu, 0x00001551u, 0x00001552u, 0x00070039u, 0x00000008u, 0x00001553u, 0x0000003du, 0x0000154bu, 0x0000154eu, 0x00001551u, 0x0003003eu, 0x0000154au, 0x00001553u, 0x000500aau, 0x00000058u, 0x00001555u, 0x00001553u, 0x00000185u, 0x000300f7u, 0x00001557u, 0x00000000u, 0x000400fau, 0x00001555u, 0x00001556u, 0x00001557u, 0x000200f8u, 0x00001556u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x00001557u, 0x000400cdu, 0x00000008u, 0x0000155bu, 0x00001553u, 0x0003003eu, 0x00001559u, 0x0000155bu, 0x000400a8u, 0x00000058u, 0x0000155du, 0x0000147eu, 0x000300f7u, 0x0000155fu, 0x00000000u, 0x000400fau, 0x0000155du, 0x0000155eu, 0x0000155fu, 0x000200f8u, 0x0000155eu, 0x000500c7u, 0x00000008u, 0x00001561u, 0x00001553u, 0x00000194u, 0x000500aau, 0x00000058u, 0x00001562u, 0x00001561u, 0x00000185u, 0x000200f9u, 0x0000155fu, 0x000200f8u, 0x0000155fu, 0x000700f5u, 0x00000058u, 0x00001563u, 0x0000155du, 0x00001557u, 0x00001562u, 0x0000155eu, 0x000300f7u, 0x00001565u, 0x00000000u, 0x000400fau, 0x00001563u, 0x00001564u, 0x00001565u, 0x000200f8u, 0x00001564u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x00001565u, 0x0004003du, 0x00000006u, 0x0000156au, 0x0000017fu, 0x0003003eu, 0x00001569u, 0x0000156au, 0x00050039u, 0x0000000fu, 0x0000156bu, 0x00000012u, 0x00001569u, 0x00050051u, 0x00000009u, 0x0000699cu, 0x0000156bu, 0x00000000u, 0x0003003eu, 0x00006991u, 0x0000699cu, 0x00050051u, 0x00000009u, 0x0000699du, 0x0000156bu, 0x00000001u, 0x0003003eu, 0x00006992u, 0x0000699du, 0x00050051u, 0x00000009u, 0x0000699eu, 0x0000156bu, 0x00000002u, 0x0003003eu, 0x00006993u, 0x0000699eu, 0x00050051u, 0x00000009u, 0x0000699fu, 0x0000156bu, 0x00000003u, 0x0003003eu, 0x00006994u, 0x0000699fu, 0x00050051u, 0x00000009u, 0x000069a0u, 0x0000156bu, 0x00000004u, 0x0003003eu, 0x00006995u, 0x000069a0u, 0x00050051u, 0x00000009u, 0x000069a1u, 0x0000156bu, 0x00000005u, 0x0003003eu, 0x00006996u, 0x000069a1u, 0x00050051u, 0x00000009u, 0x000069a2u, 0x0000156bu, 0x00000006u, 0x0003003eu, 0x00006997u, 0x000069a2u, 0x00050051u, 0x00000009u, 0x000069a3u, 0x0000156bu, 0x00000007u, 0x0003003eu, 0x00006998u, 0x000069a3u, 0x00050051u, 0x00000009u, 0x000069a4u, 0x0000156bu, 0x00000009u, 0x0003003eu, 0x00006999u, 0x000069a4u, 0x00050051u, 0x00000008u, 0x000069a5u, 0x0000156bu, 0x0000000du, 0x0003003eu, 0x0000699au, 0x000069a5u, 0x00050051u, 0x00000009u, 0x000069a6u, 0x0000156bu, 0x0000000eu, 0x0003003eu, 0x0000699bu, 0x000069a6u, 0x0004003du, 0x00000008u, 0x0000156du, 0x0000017du, 0x00050082u, 0x00000008u, 0x00001570u, 0x0000156du, 0x00006943u, 0x0003003eu, 0x0000156cu, 0x00001570u, 0x000600a9u, 0x00000008u, 0x00001573u, 0x000014d9u, 0x00000194u, 0x00000535u, 0x0003003eu, 0x00001571u, 0x00001573u, 0x0003003eu, 0x00001575u, 0x0000693fu, 0x0003003eu, 0x00001578u, 0x00006956u, 0x0003003eu, 0x0000157bu, 0x00006957u, 0x0003003eu, 0x0000157eu, 0x00001570u, 0x0003003eu, 0x00001580u, 0x00001553u, 0x00090039u, 0x00000009u, 0x00001582u, 0x00000065u, 0x00001575u, 0x00001578u, 0x0000157bu, 0x0000157eu, 0x00001580u, 0x0003003eu, 0x00001574u, 0x00001582u, 0x0003003eu, 0x00001583u, 0x00001084u, 0x0003003eu, 0x00001584u, 0x00001573u, 0x000500a7u, 0x00000058u, 0x00001588u, 0x00001586u, 0x000014b3u, 0x000300f7u, 0x0000158au, 0x00000000u, 0x000400fau, 0x00001588u, 0x00001589u, 0x0000158au, 0x000200f8u, 0x00001589u, 0x000500c7u, 0x00000006u, 0x0000158cu, 0x000013bfu, 0x0000037bu, 0x000500abu, 0x00000058u, 0x0000158du, 0x0000158cu, 0x000002d7u, 0x000300f7u, 0x0000158fu, 0x00000000u, 0x000400fau, 0x0000158du, 0x0000158eu, 0x0000158fu, 0x000200f8u, 0x0000158eu, 0x00050084u, 0x00000008u, 0x00001591u, 0x00001573u, 0x00000594u, 0x0003003eu, 0x00001584u, 0x00001591u, 0x000200f9u, 0x0000158fu, 0x000200f8u, 0x0000158fu, 0x000700f5u, 0x00000008u, 0x0000af07u, 0x00001573u, 0x00001589u, 0x00001591u, 0x0000158eu, 0x000200f9u, 0x0000158au, 0x000200f8u, 0x0000158au, 0x000700f5u, 0x00000008u, 0x0000af06u, 0x00001573u, 0x00001565u, 0x0000af07u, 0x0000158fu, 0x0003003eu, 0x00001596u, 0x00006940u, 0x0003003eu, 0x00001599u, 0x00006958u, 0x0003003eu, 0x0000159cu, 0x00006959u, 0x0003003eu, 0x0000159fu, 0x00001570u, 0x0003003eu, 0x000015a1u, 0x00001553u, 0x0003003eu, 0x000015a3u, 0x0000146du, 0x0003003eu, 0x000015a5u, 0x000014b3u, 0x0003003eu, 0x000015a7u, 0x0000af06u, 0x0003003eu, 0x000015adu, 0x00001084u, 0x00110039u, 0x00000002u, 0x000015afu, 0x00000088u, 0x00001596u, 0x00001599u, 0x0000159cu, 0x0000159fu, 0x000015a1u, 0x000015a3u, 0x000015a5u, 0x000015a7u, 0x000015a9u, 0x000015aau, 0x000015abu, 0x000015acu, 0x000015adu, 0x0004003du, 0x0000004du, 0x000015b0u, 0x000015a9u, 0x0003003eu, 0x00001592u, 0x000015b0u, 0x0004003du, 0x0000004du, 0x000015b1u, 0x000015aau, 0x0003003eu, 0x00001593u, 0x000015b1u, 0x0004003du, 0x0000004du, 0x000015b2u, 0x000015abu, 0x0003003eu, 0x00001594u, 0x000015b2u, 0x0004003du, 0x00000008u, 0x000015b3u, 0x000015acu, 0x0003003eu, 0x00001595u, 0x000015b3u, 0x0004003du, 0x00000058u, 0x000015b4u, 0x000015adu, 0x0003003eu, 0x00001583u, 0x000015b4u, 0x000500c7u, 0x00000006u, 0x000015b7u, 0x000013e8u, 0x000010eeu, 0x0003003eu, 0x000015b5u, 0x000015b7u, 0x00050080u, 0x00000006u, 0x000015bau, 0x000015b7u, 0x0000032au, 0x000500c7u, 0x00000006u, 0x000015bbu, 0x000015bau, 0x000010eeu, 0x0003003eu, 0x000015b8u, 0x000015bbu, 0x000500c2u, 0x00000006u, 0x000015beu, 0x000013e8u, 0x00000331u, 0x0003003eu, 0x000015bcu, 0x000015beu, 0x0003003eu, 0x000015bfu, 0x000069a5u, 0x000300f7u, 0x000015c4u, 0x00000000u, 0x000400fau, 0x000014b3u, 0x000015c3u, 0x000015c4u, 0x000200f8u, 0x000015c3u, 0x0003003eu, 0x000015c6u, 0x000015b7u, 0x0003003eu, 0x000015c8u, 0x000015bbu, 0x0003003eu, 0x000015cbu, 0x000015beu, 0x0003003eu, 0x000015cdu, 0x000069a5u, 0x0003003eu, 0x000015cfu, 0x000015b0u, 0x0003003eu, 0x000015d1u, 0x000015b1u, 0x0003003eu, 0x000015d3u, 0x000015b2u, 0x0003003eu, 0x000015d5u, 0x000015b4u, 0x0003003eu, 0x000015d7u, 0x00001472u, 0x0003003eu, 0x000015d9u, 0x00001476u, 0x0003003eu, 0x000015dbu, 0x0000147au, 0x00100039u, 0x00000002u, 0x000015ddu, 0x00000133u, 0x000015c6u, 0x000015c8u, 0x000015cau, 0x000015cbu, 0x000015cdu, 0x000015cfu, 0x000015d1u, 0x000015d3u, 0x000015d5u, 0x000015d7u, 0x000015d9u, 0x000015dbu, 0x0004003du, 0x00000006u, 0x000015deu, 0x000015c6u, 0x0003003eu, 0x000015b5u, 0x000015deu, 0x0004003du, 0x00000006u, 0x000015dfu, 0x000015c8u, 0x0003003eu, 0x000015b8u, 0x000015dfu, 0x0004003du, 0x00000008u, 0x000015e0u, 0x000015cau, 0x0003003eu, 0x000015c5u, 0x000015e0u, 0x000200f9u, 0x000015c4u, 0x000200f8u, 0x000015c4u, 0x000700f5u, 0x00000008u, 0x0000b0c4u, 0x0000b0cbu, 0x0000158au, 0x000015e0u, 0x000015c3u, 0x000700f5u, 0x00000006u, 0x0000afeeu, 0x000015bbu, 0x0000158au, 0x000015dfu, 0x000015c3u, 0x000700f5u, 0x00000006u, 0x0000af22u, 0x000015b7u, 0x0000158au, 0x000015deu, 0x000015c3u, 0x000300f7u, 0x000015e3u, 0x00000000u, 0x000400fau, 0x000014a4u, 0x000015e2u, 0x000015e3u, 0x000200f8u, 0x000015e2u, 0x0004003du, 0x00000006u, 0x000015e5u, 0x0000017fu, 0x00080041u, 0x000001f9u, 0x000015e7u, 0x000013f4u, 0x00000185u, 0x000015e5u, 0x00000197u, 0x0000af22u, 0x0004003du, 0x000001abu, 0x000015e8u, 0x000015e7u, 0x00040071u, 0x00000006u, 0x000015e9u, 0x000015e8u, 0x0003003eu, 0x000015e4u, 0x000015e9u, 0x0003003eu, 0x000015ebu, 0x000015e9u, 0x00050039u, 0x00000023u, 0x000015edu, 0x00000026u, 0x000015ebu, 0x00050051u, 0x00000006u, 0x000069b6u, 0x000015edu, 0x00000000u, 0x0003003eu, 0x000069a8u, 0x000069b6u, 0x00050051u, 0x00000006u, 0x000069b7u, 0x000015edu, 0x00000001u, 0x0003003eu, 0x000069a9u, 0x000069b7u, 0x00050051u, 0x00000006u, 0x000069b8u, 0x000015edu, 0x00000002u, 0x0003003eu, 0x000069aau, 0x000069b8u, 0x00050051u, 0x00000006u, 0x000069b9u, 0x000015edu, 0x00000003u, 0x0003003eu, 0x000069abu, 0x000069b9u, 0x00050051u, 0x00000006u, 0x000069bau, 0x000015edu, 0x00000004u, 0x0003003eu, 0x000069acu, 0x000069bau, 0x00050051u, 0x00000006u, 0x000069bbu, 0x000015edu, 0x00000005u, 0x0003003eu, 0x000069adu, 0x000069bbu, 0x00050051u, 0x00000008u, 0x000069bcu, 0x000015edu, 0x00000006u, 0x0003003eu, 0x000069aeu, 0x000069bcu, 0x00050051u, 0x00000008u, 0x000069bdu, 0x000015edu, 0x00000007u, 0x0003003eu, 0x000069afu, 0x000069bdu, 0x00050051u, 0x00000008u, 0x000069beu, 0x000015edu, 0x00000008u, 0x0003003eu, 0x000069b0u, 0x000069beu, 0x00050051u, 0x00000008u, 0x000069bfu, 0x000015edu, 0x00000009u, 0x0003003eu, 0x000069b1u, 0x000069bfu, 0x00050051u, 0x00000008u, 0x000069c0u, 0x000015edu, 0x0000000au, 0x0003003eu, 0x000069b2u, 0x000069c0u, 0x00050051u, 0x00000008u, 0x000069c1u, 0x000015edu, 0x0000000bu, 0x0003003eu, 0x000069b3u, 0x000069c1u, 0x00050051u, 0x00000008u, 0x000069c2u, 0x000015edu, 0x0000000cu, 0x0003003eu, 0x000069b4u, 0x000069c2u, 0x00050051u, 0x00000008u, 0x000069c3u, 0x000015edu, 0x0000000du, 0x0003003eu, 0x000069b5u, 0x000069c3u, 0x000300f7u, 0x000015f1u, 0x00000000u, 0x000400fau, 0x000015efu, 0x000015f0u, 0x000015f1u, 0x000200f8u, 0x000015f0u, 0x0003003eu, 0x000069aeu, 0x00001512u, 0x0003003eu, 0x000069afu, 0x00001515u, 0x000200f9u, 0x000015f1u, 0x000200f8u, 0x000015f1u, 0x000600a9u, 0x00000008u, 0x0000b1f3u, 0x000015efu, 0x00001512u, 0x000069bcu, 0x000600a9u, 0x00000008u, 0x0000b1f4u, 0x000015efu, 0x00001515u, 0x000069bdu, 0x00110050u, 0x00000023u, 0x000069d2u, 0x000069b6u, 0x000069b7u, 0x000069b8u, 0x000069b9u, 0x000069bau, 0x000069bbu, 0x0000b1f3u, 0x0000b1f4u, 0x000069beu, 0x000069bfu, 0x000069c0u, 0x000069c1u, 0x000069c2u, 0x000069c3u, 0x0003003eu, 0x000015f5u, 0x000069d2u, 0x0003003eu, 0x000015f7u, 0x000013feu, 0x0003003eu, 0x000015f9u, 0x000015b0u, 0x0003003eu, 0x000015fbu, 0x00001457u, 0x0003003eu, 0x000015fdu, 0x0000145bu, 0x0003003eu, 0x000015ffu, 0x00001460u, 0x0003003eu, 0x00001601u, 0x0000149fu, 0x0003003eu, 0x00001603u, 0x00001084u, 0x0003003eu, 0x00001604u, 0x00000310u, 0x000d0039u, 0x00000009u, 0x00001605u, 0x00000124u, 0x000015f5u, 0x000015f7u, 0x000015f9u, 0x000015fbu, 0x000015fdu, 0x000015ffu, 0x00001601u, 0x00001603u, 0x00001604u, 0x0003003eu, 0x000015f4u, 0x00001605u, 0x000400a8u, 0x00000058u, 0x00001607u, 0x00001460u, 0x000400a8u, 0x00000058u, 0x00001609u, 0x000014bdu, 0x000500a7u, 0x00000058u, 0x0000160au, 0x00001607u, 0x00001609u, 0x000300f7u, 0x0000160cu, 0x00000000u, 0x000400fau, 0x0000160au, 0x0000160bu, 0x0000160cu, 0x000200f8u, 0x0000160bu, 0x0003003eu, 0x0000160du, 0x00001605u, 0x0003003eu, 0x0000160fu, 0x000069a6u, 0x00060039u, 0x00000009u, 0x00001612u, 0x00000138u, 0x0000160du, 0x0000160fu, 0x0003003eu, 0x000015f4u, 0x00001612u, 0x000200f9u, 0x0000160cu, 0x000200f8u, 0x0000160cu, 0x000700f5u, 0x00000009u, 0x0000b036u, 0x00001605u, 0x000015f1u, 0x00001612u, 0x0000160bu, 0x000200f9u, 0x000015e3u, 0x000200f8u, 0x000015e3u, 0x000700f5u, 0x00000009u, 0x0000b02bu, 0x0000b033u, 0x000015c4u, 0x0000b036u, 0x0000160cu, 0x000300f7u, 0x00001615u, 0x00000000u, 0x000400fau, 0x000014aeu, 0x00001614u, 0x00001615u, 0x000200f8u, 0x00001614u, 0x0004003du, 0x00000008u, 0x0000161au, 0x0000017eu, 0x00050082u, 0x00000008u, 0x0000161eu, 0x0000161au, 0x000013a6u, 0x00050080u, 0x00000008u, 0x0000161fu, 0x0000161eu, 0x00000194u, 0x00050080u, 0x00000008u, 0x00001620u, 0x000013d4u, 0x0000161fu, 0x00070041u, 0x000001f2u, 0x00001621u, 0x0000024bu, 0x00000185u, 0x00001620u, 0x000001e0u, 0x0004003du, 0x000001adu, 0x00001622u, 0x00001621u, 0x00040071u, 0x00000006u, 0x00001623u, 0x00001622u, 0x000500abu, 0x00000058u, 0x00001624u, 0x00001623u, 0x000002d7u, 0x0003003eu, 0x00001616u, 0x00001624u, 0x000500afu, 0x00000058u, 0x00001628u, 0x00006946u, 0x000001e0u, 0x0003003eu, 0x00001625u, 0x00001628u, 0x0004003du, 0x00000008u, 0x0000162au, 0x0000017du, 0x000300f7u, 0x0000162eu, 0x00000000u, 0x000400fau, 0x000014d9u, 0x0000162du, 0x00001631u, 0x000200f8u, 0x0000162du, 0x0003003eu, 0x0000162cu, 0x00006945u, 0x000200f9u, 0x0000162eu, 0x000200f8u, 0x00001631u, 0x0003003eu, 0x0000162cu, 0x00006944u, 0x000200f9u, 0x0000162eu, 0x000200f8u, 0x0000162eu, 0x000600a9u, 0x00000008u, 0x0000b1f5u, 0x000014d9u, 0x00006945u, 0x00006944u, 0x000500aau, 0x00000058u, 0x00001635u, 0x0000162au, 0x0000b1f5u, 0x0003003eu, 0x00001629u, 0x00001635u, 0x000500a7u, 0x00000058u, 0x00001638u, 0x00001635u, 0x00001628u, 0x000500a7u, 0x00000058u, 0x0000163au, 0x00001638u, 0x00001624u, 0x000300f7u, 0x0000163cu, 0x00000000u, 0x000400fau, 0x0000163au, 0x0000163bu, 0x0000165bu, 0x000200f8u, 0x0000163bu, 0x0004003du, 0x00000008u, 0x00001641u, 0x0000017eu, 0x00050082u, 0x00000008u, 0x00001645u, 0x00001641u, 0x000013a6u, 0x00050080u, 0x00000008u, 0x00001646u, 0x00001645u, 0x00000194u, 0x00050080u, 0x00000008u, 0x00001647u, 0x000013d4u, 0x00001646u, 0x00070041u, 0x0000024du, 0x00001648u, 0x0000024bu, 0x00000185u, 0x00001647u, 0x00000194u, 0x0004003du, 0x00000009u, 0x00001649u, 0x00001648u, 0x0008004fu, 0x00000052u, 0x0000164au, 0x00001649u, 0x00001649u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x00000052u, 0x0000164cu, 0x0000164au, 0x0000b1b6u, 0x0003003eu, 0x0000163du, 0x0000164cu, 0x000300f7u, 0x0000164fu, 0x00000000u, 0x000400fau, 0x0000146du, 0x0000164eu, 0x00001657u, 0x000200f8u, 0x0000164eu, 0x0003003eu, 0x00001651u, 0x0000164cu, 0x00060039u, 0x0000004du, 0x00001655u, 0x0000005du, 0x00001651u, 0x00001653u, 0x0004003du, 0x00000058u, 0x00001656u, 0x00001653u, 0x0003003eu, 0x00001650u, 0x00001656u, 0x0003003eu, 0x00001592u, 0x00001655u, 0x000200f9u, 0x0000164fu, 0x000200f8u, 0x00001657u, 0x0003003eu, 0x00001658u, 0x0000164cu, 0x00050039u, 0x0000004du, 0x0000165au, 0x00000056u, 0x00001658u, 0x0003003eu, 0x00001592u, 0x0000165au, 0x000200f9u, 0x0000164fu, 0x000200f8u, 0x0000164fu, 0x000700f5u, 0x0000004du, 0x0000b00bu, 0x00001655u, 0x0000164eu, 0x0000165au, 0x00001657u, 0x000200f9u, 0x0000163cu, 0x000200f8u, 0x0000165bu, 0x00050084u, 0x00000008u, 0x0000165eu, 0x00001573u, 0x00000594u, 0x00050080u, 0x00000008u, 0x0000165fu, 0x00001570u, 0x0000165eu, 0x0003003eu, 0x00001660u, 0x00006940u, 0x0003003eu, 0x00001663u, 0x00006958u, 0x0003003eu, 0x00001666u, 0x0000165fu, 0x0003003eu, 0x00001667u, 0x0000146du, 0x00080039u, 0x0000004du, 0x00001669u, 0x00000078u, 0x00001660u, 0x00001663u, 0x00001666u, 0x00001667u, 0x0003003eu, 0x00001592u, 0x00001669u, 0x000200f9u, 0x0000163cu, 0x000200f8u, 0x0000163cu, 0x000700f5u, 0x0000004du, 0x0000b00au, 0x0000b00bu, 0x0000164fu, 0x00001669u, 0x0000165bu, 0x0003003eu, 0x000015b8u, 0x0000af22u, 0x0003003eu, 0x000014a5u, 0x000004a4u, 0x000200f9u, 0x00001615u, 0x000200f8u, 0x00001615u, 0x000700f5u, 0x0000004du, 0x0000b007u, 0x000015b0u, 0x000015e3u, 0x0000b00au, 0x0000163cu, 0x000600a9u, 0x00000006u, 0x0000b1f6u, 0x000014aeu, 0x0000af22u, 0x0000afeeu, 0x000600a9u, 0x00000058u, 0x0000b1f7u, 0x000014aeu, 0x000004a4u, 0x000014a9u, 0x000300f7u, 0x0000166du, 0x00000000u, 0x000400fau, 0x0000b1f7u, 0x0000166cu, 0x0000166du, 0x000200f8u, 0x0000166cu, 0x000400a8u, 0x00000058u, 0x00001670u, 0x000014c2u, 0x000500a7u, 0x00000058u, 0x00001671u, 0x000014b8u, 0x00001670u, 0x000300f7u, 0x00001673u, 0x00000000u, 0x000400fau, 0x00001671u, 0x00001672u, 0x0000167bu, 0x000200f8u, 0x00001672u, 0x0003003eu, 0x00001675u, 0x0000b02bu, 0x0003003eu, 0x00001677u, 0x000069a6u, 0x00060039u, 0x00000009u, 0x0000167au, 0x00000138u, 0x00001675u, 0x00001677u, 0x0003003eu, 0x00001674u, 0x0000167au, 0x000200f9u, 0x00001673u, 0x000200f8u, 0x0000167bu, 0x0004003du, 0x00000006u, 0x0000167du, 0x0000017fu, 0x00080041u, 0x000001f9u, 0x0000167fu, 0x000013f4u, 0x00000185u, 0x0000167du, 0x00000197u, 0x0000b1f6u, 0x0004003du, 0x000001abu, 0x00001680u, 0x0000167fu, 0x00040071u, 0x00000006u, 0x00001681u, 0x00001680u, 0x0003003eu, 0x0000167cu, 0x00001681u, 0x0003003eu, 0x00001683u, 0x00001681u, 0x00050039u, 0x00000023u, 0x00001685u, 0x00000026u, 0x00001683u, 0x00050051u, 0x00000006u, 0x000069e1u, 0x00001685u, 0x00000000u, 0x0003003eu, 0x000069d3u, 0x000069e1u, 0x00050051u, 0x00000006u, 0x000069e2u, 0x00001685u, 0x00000001u, 0x0003003eu, 0x000069d4u, 0x000069e2u, 0x00050051u, 0x00000006u, 0x000069e3u, 0x00001685u, 0x00000002u, 0x0003003eu, 0x000069d5u, 0x000069e3u, 0x00050051u, 0x00000006u, 0x000069e4u, 0x00001685u, 0x00000003u, 0x0003003eu, 0x000069d6u, 0x000069e4u, 0x00050051u, 0x00000006u, 0x000069e5u, 0x00001685u, 0x00000004u, 0x0003003eu, 0x000069d7u, 0x000069e5u, 0x00050051u, 0x00000006u, 0x000069e6u, 0x00001685u, 0x00000005u, 0x0003003eu, 0x000069d8u, 0x000069e6u, 0x00050051u, 0x00000008u, 0x000069e7u, 0x00001685u, 0x00000006u, 0x0003003eu, 0x000069d9u, 0x000069e7u, 0x00050051u, 0x00000008u, 0x000069e8u, 0x00001685u, 0x00000007u, 0x0003003eu, 0x000069dau, 0x000069e8u, 0x00050051u, 0x00000008u, 0x000069e9u, 0x00001685u, 0x00000008u, 0x0003003eu, 0x000069dbu, 0x000069e9u, 0x00050051u, 0x00000008u, 0x000069eau, 0x00001685u, 0x00000009u, 0x0003003eu, 0x000069dcu, 0x000069eau, 0x00050051u, 0x00000008u, 0x000069ebu, 0x00001685u, 0x0000000au, 0x0003003eu, 0x000069ddu, 0x000069ebu, 0x00050051u, 0x00000008u, 0x000069ecu, 0x00001685u, 0x0000000bu, 0x0003003eu, 0x000069deu, 0x000069ecu, 0x00050051u, 0x00000008u, 0x000069edu, 0x00001685u, 0x0000000cu, 0x0003003eu, 0x000069dfu, 0x000069edu, 0x00050051u, 0x00000008u, 0x000069eeu, 0x00001685u, 0x0000000du, 0x0003003eu, 0x000069e0u, 0x000069eeu, 0x000300f7u, 0x00001689u, 0x00000000u, 0x000400fau, 0x00001687u, 0x00001688u, 0x00001689u, 0x000200f8u, 0x00001688u, 0x0003003eu, 0x000069d9u, 0x00001512u, 0x0003003eu, 0x000069dau, 0x00001515u, 0x000200f9u, 0x00001689u, 0x000200f8u, 0x00001689u, 0x000600a9u, 0x00000008u, 0x0000b1f8u, 0x00001687u, 0x00001512u, 0x000069e7u, 0x000600a9u, 0x00000008u, 0x0000b1f9u, 0x00001687u, 0x00001515u, 0x000069e8u, 0x00110050u, 0x00000023u, 0x000069fdu, 0x000069e1u, 0x000069e2u, 0x000069e3u, 0x000069e4u, 0x000069e5u, 0x000069e6u, 0x0000b1f8u, 0x0000b1f9u, 0x000069e9u, 0x000069eau, 0x000069ebu, 0x000069ecu, 0x000069edu, 0x000069eeu, 0x0003003eu, 0x0000168cu, 0x000069fdu, 0x0003003eu, 0x0000168eu, 0x000013feu, 0x0003003eu, 0x00001690u, 0x0000b007u, 0x0003003eu, 0x00001692u, 0x00001457u, 0x0003003eu, 0x00001694u, 0x0000145bu, 0x0003003eu, 0x00001696u, 0x00001460u, 0x0003003eu, 0x00001698u, 0x0000149fu, 0x0003003eu, 0x0000169au, 0x000014b8u, 0x0003003eu, 0x0000169cu, 0x0000b02bu, 0x000d0039u, 0x00000009u, 0x0000169eu, 0x00000124u, 0x0000168cu, 0x0000168eu, 0x00001690u, 0x00001692u, 0x00001694u, 0x00001696u, 0x00001698u, 0x0000169au, 0x0000169cu, 0x0003003eu, 0x00001674u, 0x0000169eu, 0x000400a8u, 0x00000058u, 0x000016a0u, 0x00001460u, 0x000400a8u, 0x00000058u, 0x000016a2u, 0x00001457u, 0x000500a7u, 0x00000058u, 0x000016a3u, 0x000016a0u, 0x000016a2u, 0x000500a7u, 0x00000058u, 0x000016a6u, 0x000016a3u, 0x00001670u, 0x000300f7u, 0x000016a8u, 0x00000000u, 0x000400fau, 0x000016a6u, 0x000016a7u, 0x000016a8u, 0x000200f8u, 0x000016a7u, 0x0003003eu, 0x000016a9u, 0x0000169eu, 0x0003003eu, 0x000016abu, 0x000069a6u, 0x00060039u, 0x00000009u, 0x000016aeu, 0x00000138u, 0x000016a9u, 0x000016abu, 0x0003003eu, 0x00001674u, 0x000016aeu, 0x000200f9u, 0x000016a8u, 0x000200f8u, 0x000016a8u, 0x000700f5u, 0x00000009u, 0x0000b0c0u, 0x0000169eu, 0x00001689u, 0x000016aeu, 0x000016a7u, 0x000200f9u, 0x00001673u, 0x000200f8u, 0x00001673u, 0x000700f5u, 0x00000009u, 0x0000b0bfu, 0x0000167au, 0x00001672u, 0x0000b0c0u, 0x000016a8u, 0x000200f9u, 0x0000166du, 0x000200f8u, 0x0000166du, 0x000700f5u, 0x00000009u, 0x0000b0aeu, 0x0000b033u, 0x00001615u, 0x0000b0bfu, 0x00001673u, 0x0004003du, 0x00000008u, 0x000016afu, 0x0000017eu, 0x000600a9u, 0x00000008u, 0x000016b1u, 0x00001487u, 0x00000194u, 0x00000185u, 0x000500c3u, 0x00000008u, 0x000016b2u, 0x000016afu, 0x000016b1u, 0x000500c3u, 0x00000008u, 0x000016b4u, 0x0000b1efu, 0x00000197u, 0x000500c7u, 0x00000008u, 0x000016b6u, 0x0000b1efu, 0x0000019au, 0x0004003du, 0x00000008u, 0x000016bau, 0x0000017du, 0x0003003eu, 0x000016b9u, 0x000016bau, 0x0003003eu, 0x000016bbu, 0x000016b2u, 0x0003003eu, 0x000016bcu, 0x000016b4u, 0x0003003eu, 0x000016bdu, 0x000016b6u, 0x000a0039u, 0x00000002u, 0x000016c0u, 0x00000141u, 0x000016b9u, 0x000016bbu, 0x000016bcu, 0x000016bdu, 0x000016beu, 0x000016bfu, 0x0004003du, 0x00000008u, 0x000016c1u, 0x000016beu, 0x0003003eu, 0x000016b7u, 0x000016c1u, 0x0004003du, 0x00000008u, 0x000016c2u, 0x000016bfu, 0x0003003eu, 0x000016b8u, 0x000016c2u, 0x000300f7u, 0x000016c5u, 0x00000000u, 0x000400fau, 0x00001483u, 0x000016c4u, 0x00001714u, 0x000200f8u, 0x000016c4u, 0x0004003du, 0x00000009u, 0x000016cfu, 0x00001574u, 0x00040039u, 0x00000008u, 0x000016d3u, 0x0000002fu, 0x000d0050u, 0x0000014du, 0x000016d4u, 0x0000699cu, 0x0000699du, 0x0000699eu, 0x0000699fu, 0x000016cfu, 0x00000310u, 0x0000b02bu, 0x0000b0aeu, 0x0000b0c4u, 0x000016d3u, 0x0003003eu, 0x000069feu, 0x0000699cu, 0x0003003eu, 0x000069ffu, 0x0000699du, 0x0003003eu, 0x00006a00u, 0x0000699eu, 0x0003003eu, 0x00006a01u, 0x0000699fu, 0x0003003eu, 0x00006a02u, 0x000016cfu, 0x0003003eu, 0x00006a03u, 0x00000310u, 0x0003003eu, 0x00006a04u, 0x0000b02bu, 0x0003003eu, 0x00006a05u, 0x0000b0aeu, 0x0003003eu, 0x00006a06u, 0x0000b0c4u, 0x0003003eu, 0x00006a07u, 0x000016d3u, 0x0003003eu, 0x000016d6u, 0x000016d4u, 0x0004003du, 0x00000009u, 0x000016d9u, 0x0000140au, 0x0003003eu, 0x000016d8u, 0x000016d9u, 0x0004003du, 0x00000009u, 0x000016dbu, 0x0000140du, 0x0003003eu, 0x000016dau, 0x000016dbu, 0x0003003eu, 0x000016dcu, 0x000016c2u, 0x0003003eu, 0x000016deu, 0x0000155bu, 0x0003003eu, 0x000016e0u, 0x00001464u, 0x0003003eu, 0x000016e2u, 0x00001469u, 0x0003003eu, 0x000016e4u, 0x00001495u, 0x000d0039u, 0x00000009u, 0x000016e7u, 0x0000016eu, 0x000016d6u, 0x000016d8u, 0x000016dau, 0x000016dcu, 0x000016deu, 0x000016e0u, 0x000016e2u, 0x000016e4u, 0x000016e6u, 0x0004003du, 0x00000008u, 0x000016e8u, 0x000016e6u, 0x0003003eu, 0x000016d5u, 0x000016e8u, 0x0003003eu, 0x00006a03u, 0x000016e7u, 0x0003003eu, 0x000069feu, 0x000069a0u, 0x0003003eu, 0x000069ffu, 0x000069a1u, 0x0003003eu, 0x00006a00u, 0x000069a2u, 0x0003003eu, 0x00006a01u, 0x000069a3u, 0x0003003eu, 0x000016f6u, 0x0000b02bu, 0x0003003eu, 0x00006a04u, 0x0000b0aeu, 0x0003003eu, 0x00006a05u, 0x0000b02bu, 0x000d0050u, 0x0000014du, 0x00006a27u, 0x000069a0u, 0x000069a1u, 0x000069a2u, 0x000069a3u, 0x000016cfu, 0x000016e7u, 0x0000b0aeu, 0x0000b02bu, 0x0000b0c4u, 0x000016d3u, 0x0003003eu, 0x000016ffu, 0x00006a27u, 0x0004003du, 0x00000009u, 0x00001702u, 0x00001410u, 0x0003003eu, 0x00001701u, 0x00001702u, 0x0004003du, 0x00000009u, 0x00001704u, 0x00001413u, 0x0003003eu, 0x00001703u, 0x00001704u, 0x0003003eu, 0x00001705u, 0x000016c2u, 0x0003003eu, 0x00001707u, 0x0000155bu, 0x0003003eu, 0x00001709u, 0x00001464u, 0x0003003eu, 0x0000170bu, 0x00001469u, 0x000b0039u, 0x00000009u, 0x0000170du, 0x00000178u, 0x000016ffu, 0x00001701u, 0x00001703u, 0x00001705u, 0x00001707u, 0x00001709u, 0x0000170bu, 0x0004003du, 0x00000008u, 0x0000170eu, 0x00001707u, 0x0003003eu, 0x00001559u, 0x0000170eu, 0x00050051u, 0x00000008u, 0x0000170fu, 0x0000170du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001710u, 0x0000170du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001711u, 0x0000170du, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001712u, 0x0000170du, 0x00000003u, 0x0003003eu, 0x000016feu, 0x0000170du, 0x000200f9u, 0x000016c5u, 0x000200f8u, 0x00001714u, 0x0004003du, 0x00000009u, 0x0000171eu, 0x00001574u, 0x00040039u, 0x00000008u, 0x00001722u, 0x0000002fu, 0x000d0050u, 0x0000014du, 0x00001723u, 0x000069a0u, 0x000069a1u, 0x000069a2u, 0x000069a3u, 0x0000171eu, 0x00000310u, 0x0000b02bu, 0x0000b0aeu, 0x0000b0c4u, 0x00001722u, 0x0003003eu, 0x00006a28u, 0x000069a0u, 0x0003003eu, 0x00006a29u, 0x000069a1u, 0x0003003eu, 0x00006a2au, 0x000069a2u, 0x0003003eu, 0x00006a2bu, 0x000069a3u, 0x0003003eu, 0x00006a2cu, 0x0000171eu, 0x0003003eu, 0x00006a2du, 0x00000310u, 0x0003003eu, 0x00006a2eu, 0x0000b02bu, 0x0003003eu, 0x00006a2fu, 0x0000b0aeu, 0x0003003eu, 0x00006a30u, 0x0000b0c4u, 0x0003003eu, 0x00006a31u, 0x00001722u, 0x0003003eu, 0x00001724u, 0x00001723u, 0x0004003du, 0x00000009u, 0x00001727u, 0x00001410u, 0x0003003eu, 0x00001726u, 0x00001727u, 0x0004003du, 0x00000009u, 0x00001729u, 0x00001413u, 0x0003003eu, 0x00001728u, 0x00001729u, 0x0003003eu, 0x0000172au, 0x000016c2u, 0x0003003eu, 0x0000172cu, 0x0000155bu, 0x0003003eu, 0x0000172eu, 0x00001464u, 0x0003003eu, 0x00001730u, 0x00001469u, 0x000b0039u, 0x00000009u, 0x00001732u, 0x00000178u, 0x00001724u, 0x00001726u, 0x00001728u, 0x0000172au, 0x0000172cu, 0x0000172eu, 0x00001730u, 0x0004003du, 0x00000008u, 0x00001733u, 0x0000172cu, 0x0003003eu, 0x00001559u, 0x00001733u, 0x00050051u, 0x00000008u, 0x00001734u, 0x00001732u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001735u, 0x00001732u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001736u, 0x00001732u, 0x00000002u, 0x00050051u, 0x00000008u, 0x00001737u, 0x00001732u, 0x00000003u, 0x0003003eu, 0x000016feu, 0x00001732u, 0x00050041u, 0x00000038u, 0x00001739u, 0x000016feu, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000173au, 0x00001739u, 0x0003003eu, 0x000016d5u, 0x0000173au, 0x000200f9u, 0x000016c5u, 0x000200f8u, 0x000016c5u, 0x000700f5u, 0x00000008u, 0x0000b171u, 0x000016e8u, 0x000016c4u, 0x0000173au, 0x00001714u, 0x000700f5u, 0x00000008u, 0x0000b15du, 0x0000170eu, 0x000016c4u, 0x00001733u, 0x00001714u, 0x000500aau, 0x00000058u, 0x0000173du, 0x0000b15du, 0x00000185u, 0x000500a7u, 0x00000058u, 0x0000173eu, 0x0000147eu, 0x0000173du, 0x000300f7u, 0x00001740u, 0x00000000u, 0x000400fau, 0x0000173eu, 0x0000173fu, 0x00001740u, 0x000200f8u, 0x0000173fu, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x00001740u, 0x000300f7u, 0x00001744u, 0x00000000u, 0x000400fau, 0x00001495u, 0x00001743u, 0x00001744u, 0x000200f8u, 0x00001743u, 0x000300f7u, 0x00001747u, 0x00000000u, 0x000400fau, 0x0000149au, 0x00001746u, 0x0000174au, 0x000200f8u, 0x00001746u, 0x00040039u, 0x00000008u, 0x00001749u, 0x00000035u, 0x0003003eu, 0x00001748u, 0x00001749u, 0x000200f9u, 0x00001747u, 0x000200f8u, 0x0000174au, 0x00050041u, 0x00000038u, 0x000069a7u, 0x00006999u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000174cu, 0x000069a7u, 0x0003003eu, 0x00001748u, 0x0000174cu, 0x000200f9u, 0x00001747u, 0x000200f8u, 0x00001747u, 0x000700f5u, 0x00000008u, 0x0000b172u, 0x00001749u, 0x00001746u, 0x0000174cu, 0x0000174au, 0x000500b1u, 0x00000058u, 0x0000174fu, 0x0000b171u, 0x0000b172u, 0x000300f7u, 0x00001751u, 0x00000000u, 0x000400fau, 0x0000174fu, 0x00001750u, 0x00001751u, 0x000200f8u, 0x00001750u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x00001084u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x00001751u, 0x000200f9u, 0x00001744u, 0x000200f8u, 0x00001744u, 0x0004003du, 0x00000009u, 0x00001753u, 0x000016feu, 0x00050041u, 0x00000037u, 0x00001754u, 0x00000180u, 0x00000185u, 0x0003003eu, 0x00001754u, 0x00001753u, 0x000500c4u, 0x00000008u, 0x00001756u, 0x000015b3u, 0x000001e6u, 0x000500c5u, 0x00000008u, 0x00001758u, 0x00001756u, 0x000016c1u, 0x00050041u, 0x00000038u, 0x00001759u, 0x00000180u, 0x00000194u, 0x0003003eu, 0x00001759u, 0x00001758u, 0x00050041u, 0x00000038u, 0x0000175bu, 0x00000180u, 0x00000197u, 0x0003003eu, 0x0000175bu, 0x0000b15du, 0x00050041u, 0x00000038u, 0x0000175cu, 0x00001574u, 0x00000331u, 0x0004003du, 0x00000008u, 0x0000175du, 0x0000175cu, 0x00050080u, 0x00000008u, 0x0000175fu, 0x0000175du, 0x000016c2u, 0x0007000cu, 0x00000008u, 0x00001760u, 0x00000001u, 0x00000027u, 0x0000175fu, 0x000002eeu, 0x00050041u, 0x00000038u, 0x00001761u, 0x00000180u, 0x0000019au, 0x0003003eu, 0x00001761u, 0x00001760u, 0x0003003eu, 0x000017f0u, 0x000004a4u, 0x0003003eu, 0x000017edu, 0x000004a4u, 0x000200f9u, 0x000017ecu, 0x000200f8u, 0x000017ecu, 0x001900f5u, 0x00000058u, 0x0000b1b2u, 0x00001084u, 0x000013b3u, 0x00001084u, 0x000013e1u, 0x00001084u, 0x000014ebu, 0x00001084u, 0x00001535u, 0x000004a4u, 0x00001536u, 0x00001548u, 0x00001543u, 0x00001084u, 0x00001556u, 0x00001084u, 0x00001564u, 0x00001084u, 0x0000173fu, 0x00001084u, 0x00001750u, 0x000004a4u, 0x00001744u, 0x000200feu, 0x0000b1b2u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000b65au, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00000016u, 0x00020011u, 0x00000027u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000182bu, 0x0000183au, 0x00001854u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00050048u, 0x00000197u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000197u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000197u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000197u, 0x00000003u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000197u, 0x00000004u, 0x00000023u, 0x00000040u, 0x00050048u, 0x00000197u, 0x00000005u, 0x00000023u, 0x00000050u, 0x00050048u, 0x00000197u, 0x00000006u, 0x00000023u, 0x00000060u, 0x00050048u, 0x00000197u, 0x00000007u, 0x00000023u, 0x00000070u, 0x00040047u, 0x00000198u, 0x00000006u, 0x00000080u, 0x00040048u, 0x00000199u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000199u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000199u, 0x00000002u, 0x00040047u, 0x0000019bu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000019bu, 0x00000021u, 0x00000001u, 0x00050048u, 0x000001bdu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000001bdu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000001bdu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000001bdu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000001bdu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000001bdu, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000001bdu, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000001bdu, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000001bdu, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000001bdu, 0x00000009u, 0x00000023u, 0x00000024u, 0x00050048u, 0x000001bdu, 0x0000000au, 0x00000023u, 0x00000028u, 0x00050048u, 0x000001bdu, 0x0000000bu, 0x00000023u, 0x0000002cu, 0x00050048u, 0x000001bdu, 0x0000000cu, 0x00000023u, 0x0000002eu, 0x00050048u, 0x000001bdu, 0x0000000du, 0x00000023u, 0x0000002fu, 0x00050048u, 0x000001bdu, 0x0000000eu, 0x00000023u, 0x00000030u, 0x00040047u, 0x000001beu, 0x00000006u, 0x00000038u, 0x00040048u, 0x000001bfu, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001bfu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001bfu, 0x00000002u, 0x00040047u, 0x000001c1u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001c1u, 0x00000021u, 0x00000002u, 0x00050048u, 0x000001f1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000001f1u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000001f1u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000001f1u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000001f1u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000001f1u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000001f1u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000001f1u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00040047u, 0x000001f2u, 0x00000006u, 0x00000020u, 0x00040048u, 0x000001f3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001f3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001f3u, 0x00000002u, 0x00040047u, 0x000001f5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001f5u, 0x00000021u, 0x00000003u, 0x00050048u, 0x0000020fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000020fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000020fu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000020fu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00040047u, 0x00000210u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00000211u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000211u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000211u, 0x00000002u, 0x00040047u, 0x00000213u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000213u, 0x00000021u, 0x00000005u, 0x00050048u, 0x00000225u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000225u, 0x00000001u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000225u, 0x00000002u, 0x00000023u, 0x00000020u, 0x00050048u, 0x00000225u, 0x00000003u, 0x00000023u, 0x00000028u, 0x00050048u, 0x00000225u, 0x00000004u, 0x00000023u, 0x00000030u, 0x00050048u, 0x00000225u, 0x00000005u, 0x00000023u, 0x00000034u, 0x00050048u, 0x00000225u, 0x00000006u, 0x00000023u, 0x00000038u, 0x00050048u, 0x00000225u, 0x00000007u, 0x00000023u, 0x0000003cu, 0x00050048u, 0x00000225u, 0x00000008u, 0x00000023u, 0x0000003eu, 0x00040047u, 0x00000226u, 0x00000006u, 0x00000040u, 0x00040048u, 0x00000227u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000227u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000227u, 0x00000002u, 0x00040047u, 0x00000229u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000229u, 0x00000021u, 0x00000006u, 0x00050048u, 0x00000244u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000244u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000244u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00000244u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00000244u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00000244u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00000244u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00000244u, 0x00000007u, 0x00000023u, 0x00000019u, 0x00050048u, 0x00000244u, 0x00000008u, 0x00000023u, 0x0000001au, 0x00050048u, 0x00000244u, 0x00000009u, 0x00000023u, 0x0000001bu, 0x00050048u, 0x00000244u, 0x0000000au, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00000244u, 0x0000000bu, 0x00000023u, 0x0000001du, 0x00050048u, 0x00000244u, 0x0000000cu, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00000244u, 0x0000000du, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00000245u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00000246u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000246u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000246u, 0x00000002u, 0x00040047u, 0x00000248u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000248u, 0x00000021u, 0x00000008u, 0x00040047u, 0x00000492u, 0x00000001u, 0x00000002u, 0x00050048u, 0x000004e5u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000004e5u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000004e5u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000004e5u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000004e6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000004e6u, 0x00000002u, 0x00040047u, 0x000004e8u, 0x00000022u, 0x00000002u, 0x00040047u, 0x000004e8u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000006a0u, 0x00000006u, 0x00000001u, 0x00050048u, 0x000006a1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x000006a2u, 0x00000006u, 0x00001000u, 0x00040048u, 0x000006a3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000006a3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000006a3u, 0x00000002u, 0x00040047u, 0x000006a5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000006a5u, 0x00000021u, 0x00000007u, 0x00040047u, 0x0000076eu, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000076fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00040047u, 0x00000770u, 0x00000006u, 0x00001000u, 0x00040048u, 0x00000771u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000771u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000771u, 0x00000002u, 0x00040047u, 0x00000773u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000773u, 0x00000021u, 0x00000007u, 0x00050048u, 0x00001444u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00001444u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00001444u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x00001444u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x00001444u, 0x00000004u, 0x00000023u, 0x0000000eu, 0x00050048u, 0x00001444u, 0x00000005u, 0x00000023u, 0x00000010u, 0x00050048u, 0x00001444u, 0x00000006u, 0x00000023u, 0x00000014u, 0x00050048u, 0x00001444u, 0x00000007u, 0x00000023u, 0x00000018u, 0x00050048u, 0x00001444u, 0x00000008u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x00001444u, 0x00000009u, 0x00000023u, 0x0000001eu, 0x00050048u, 0x00001444u, 0x0000000au, 0x00000023u, 0x0000001fu, 0x00040047u, 0x00001445u, 0x00000006u, 0x00000020u, 0x00040048u, 0x00001446u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001446u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001446u, 0x00000002u, 0x00040047u, 0x00001448u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00001448u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000147du, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000147eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000147eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000147eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00040047u, 0x0000147fu, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001480u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001480u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001480u, 0x00000002u, 0x00040047u, 0x00001482u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00001482u, 0x00000021u, 0x00000004u, 0x00040047u, 0x000014aau, 0x00000001u, 0x00000007u, 0x00040047u, 0x000014adu, 0x00000001u, 0x00000003u, 0x00040047u, 0x000014c3u, 0x00000001u, 0x00000004u, 0x00040047u, 0x000014d8u, 0x00000001u, 0x00000005u, 0x00040047u, 0x000014edu, 0x00000001u, 0x00000006u, 0x00040047u, 0x00001826u, 0x00000006u, 0x00000010u, 0x00040048u, 0x00001827u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00001827u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001827u, 0x00000002u, 0x00040047u, 0x00001829u, 0x00000022u, 0x00000001u, 0x00040047u, 0x00001829u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000182bu, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00001835u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00001836u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00001837u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x0000183au, 0x0000000bu, 0x0000001bu, 0x00040047u, 0x00001854u, 0x0000000bu, 0x0000001du, 0x00040047u, 0x0000186du, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000186eu, 0x00000000u, 0x00000019u, 0x00050048u, 0x0000186eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000186eu, 0x00000002u, 0x00040047u, 0x00001870u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00001870u, 0x00000021u, 0x00000009u, 0x00040047u, 0x00001877u, 0x00000006u, 0x00000001u, 0x00040048u, 0x00001878u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00001878u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001878u, 0x00000002u, 0x00040047u, 0x0000187au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000187au, 0x00000021u, 0x0000000bu, 0x00040047u, 0x0000187fu, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001880u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00001880u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001880u, 0x00000002u, 0x00040047u, 0x00001882u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00001882u, 0x00000021u, 0x0000000au, 0x00040047u, 0x0000188fu, 0x00000006u, 0x00000004u, 0x00040048u, 0x00001890u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00001890u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00001890u, 0x00000002u, 0x00040047u, 0x00001892u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00001892u, 0x00000021u, 0x00000009u, 0x00040047u, 0x0000189bu, 0x00000006u, 0x00000001u, 0x00040048u, 0x0000189cu, 0x00000000u, 0x00000019u, 0x00050048u, 0x0000189cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000189cu, 0x00000002u, 0x00040047u, 0x0000189eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000189eu, 0x00000021u, 0x0000000cu, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040015u, 0x00000008u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000009u, 0x00000008u, 0x00000004u, 0x000a001eu, 0x0000000au, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000007u, 0x00040015u, 0x0000000fu, 0x00000008u, 0x00000000u, 0x00040017u, 0x00000010u, 0x0000000fu, 0x00000004u, 0x00040015u, 0x00000011u, 0x00000010u, 0x00000000u, 0x00040015u, 0x00000012u, 0x00000010u, 0x00000001u, 0x00040017u, 0x00000013u, 0x00000012u, 0x00000004u, 0x0011001eu, 0x00000014u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000011u, 0x0000000fu, 0x0000000fu, 0x00000013u, 0x00040021u, 0x00000015u, 0x00000014u, 0x00000007u, 0x000a001eu, 0x00000019u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001au, 0x00000019u, 0x00000007u, 0x0006001eu, 0x0000001eu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00040021u, 0x0000001fu, 0x0000001eu, 0x00000007u, 0x00040017u, 0x00000023u, 0x00000011u, 0x00000004u, 0x000b001eu, 0x00000024u, 0x00000009u, 0x00000009u, 0x00000023u, 0x00000023u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000011u, 0x00040021u, 0x00000025u, 0x00000024u, 0x00000007u, 0x0010001eu, 0x00000029u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x00040021u, 0x0000002au, 0x00000029u, 0x00000007u, 0x00060021u, 0x0000002eu, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00030021u, 0x00000034u, 0x00000012u, 0x00030021u, 0x00000037u, 0x00000008u, 0x00030021u, 0x0000003cu, 0x0000000fu, 0x00040020u, 0x0000003fu, 0x00000007u, 0x00000023u, 0x00040020u, 0x00000040u, 0x00000007u, 0x00000008u, 0x00060021u, 0x00000041u, 0x0000000fu, 0x0000003fu, 0x0000003fu, 0x00000040u, 0x00040020u, 0x00000047u, 0x00000007u, 0x00000009u, 0x00040021u, 0x00000048u, 0x00000013u, 0x00000047u, 0x00040020u, 0x0000004cu, 0x00000007u, 0x00000013u, 0x00040021u, 0x0000004du, 0x00000010u, 0x0000004cu, 0x00040021u, 0x00000051u, 0x00000008u, 0x00000040u, 0x00040017u, 0x00000058u, 0x00000008u, 0x00000002u, 0x00040021u, 0x00000059u, 0x00000058u, 0x00000040u, 0x00040017u, 0x0000005du, 0x00000008u, 0x00000003u, 0x00040020u, 0x0000005eu, 0x00000007u, 0x0000005du, 0x00040021u, 0x0000005fu, 0x00000058u, 0x0000005eu, 0x00020014u, 0x00000063u, 0x00040020u, 0x00000064u, 0x00000007u, 0x00000063u, 0x00050021u, 0x00000065u, 0x00000058u, 0x0000005eu, 0x00000064u, 0x00080021u, 0x0000006au, 0x00000010u, 0x00000047u, 0x00000047u, 0x00000047u, 0x00000040u, 0x00000040u, 0x00040020u, 0x00000072u, 0x00000007u, 0x00000024u, 0x00040020u, 0x00000073u, 0x00000007u, 0x00000058u, 0x000a0021u, 0x00000074u, 0x00000002u, 0x00000072u, 0x00000047u, 0x00000040u, 0x00000064u, 0x00000064u, 0x00000073u, 0x00000040u, 0x00070021u, 0x0000007eu, 0x00000058u, 0x00000047u, 0x00000047u, 0x00000040u, 0x00000064u, 0x00100021u, 0x00000085u, 0x00000002u, 0x00000047u, 0x00000047u, 0x00000047u, 0x00000040u, 0x00000040u, 0x00000064u, 0x00000064u, 0x00000040u, 0x00000073u, 0x00000073u, 0x00000073u, 0x00000040u, 0x00000064u, 0x00040020u, 0x00000095u, 0x00000007u, 0x00000029u, 0x00050021u, 0x00000096u, 0x00000008u, 0x00000095u, 0x00000040u, 0x00050021u, 0x0000009bu, 0x00000058u, 0x00000095u, 0x00000040u, 0x00040021u, 0x000000a4u, 0x00000013u, 0x00000007u, 0x00040017u, 0x000000abu, 0x00000006u, 0x00000002u, 0x00040020u, 0x000000acu, 0x00000007u, 0x000000abu, 0x00060021u, 0x000000adu, 0x00000013u, 0x00000095u, 0x00000007u, 0x000000acu, 0x00070021u, 0x000000b8u, 0x00000013u, 0x00000095u, 0x00000007u, 0x000000acu, 0x00000007u, 0x000a0021u, 0x000000bfu, 0x00000013u, 0x00000095u, 0x00000007u, 0x000000acu, 0x00000007u, 0x00000007u, 0x00000007u, 0x00000064u, 0x00090021u, 0x000000c9u, 0x00000013u, 0x00000095u, 0x00000007u, 0x000000acu, 0x00000007u, 0x00000007u, 0x00000064u, 0x00080021u, 0x000000feu, 0x00000008u, 0x00000064u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00060021u, 0x00000106u, 0x00000008u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00090021u, 0x0000010cu, 0x00000008u, 0x00000095u, 0x00000007u, 0x00000073u, 0x00000040u, 0x00000064u, 0x00000064u, 0x00040017u, 0x0000011du, 0x00000012u, 0x00000002u, 0x00040020u, 0x0000011eu, 0x00000007u, 0x0000011du, 0x00080021u, 0x0000011fu, 0x0000011du, 0x0000011eu, 0x0000011eu, 0x0000011eu, 0x0000011eu, 0x00000073u, 0x000c0021u, 0x00000127u, 0x00000013u, 0x00000095u, 0x00000007u, 0x00000073u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00000064u, 0x0000004cu, 0x00040020u, 0x00000133u, 0x00000007u, 0x00000012u, 0x000f0021u, 0x00000134u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000133u, 0x00000007u, 0x00000040u, 0x00000073u, 0x00000073u, 0x00000073u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00050021u, 0x00000143u, 0x00000013u, 0x0000004cu, 0x0000004cu, 0x00090021u, 0x00000148u, 0x00000002u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00000040u, 0x00040021u, 0x00000151u, 0x00000009u, 0x00000047u, 0x00070021u, 0x00000155u, 0x00000013u, 0x00000047u, 0x00000047u, 0x00000047u, 0x00000047u, 0x000c001eu, 0x0000015cu, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000013u, 0x00000013u, 0x00000013u, 0x00000012u, 0x00000012u, 0x00040020u, 0x0000015du, 0x00000007u, 0x0000015cu, 0x00060021u, 0x0000015eu, 0x00000009u, 0x0000015du, 0x00000040u, 0x00000040u, 0x00040020u, 0x00000173u, 0x00000007u, 0x00000010u, 0x00040020u, 0x00000174u, 0x00000007u, 0x0000000fu, 0x000c0021u, 0x00000175u, 0x00000013u, 0x0000015du, 0x00000173u, 0x00000173u, 0x00000040u, 0x00000040u, 0x00000064u, 0x00000064u, 0x00000064u, 0x00000174u, 0x000a0021u, 0x00000181u, 0x00000013u, 0x0000015du, 0x00000173u, 0x00000173u, 0x00000040u, 0x00000040u, 0x00000064u, 0x00000064u, 0x0006001eu, 0x0000018bu, 0x00000010u, 0x00000008u, 0x0000000fu, 0x0000000fu, 0x00040020u, 0x0000018cu, 0x00000007u, 0x0000018bu, 0x00070021u, 0x0000018du, 0x00000063u, 0x00000040u, 0x00000040u, 0x00000007u, 0x0000018cu, 0x00040020u, 0x00000194u, 0x00000006u, 0x00000011u, 0x0004003bu, 0x00000194u, 0x00000195u, 0x00000006u, 0x0004002bu, 0x00000011u, 0x00000196u, 0x00000000u, 0x000a001eu, 0x00000197u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x00000009u, 0x0003001du, 0x00000198u, 0x00000197u, 0x0003001eu, 0x00000199u, 0x00000198u, 0x00040020u, 0x0000019au, 0x0000000cu, 0x00000199u, 0x0004003bu, 0x0000019au, 0x0000019bu, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x0000019cu, 0x00000000u, 0x00040020u, 0x0000019eu, 0x0000000cu, 0x00000197u, 0x00040020u, 0x000001a1u, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000008u, 0x000001a6u, 0x00000001u, 0x0004002bu, 0x00000008u, 0x000001a9u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x000001acu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000001afu, 0x00000004u, 0x0004002bu, 0x00000008u, 0x000001b2u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x000001b5u, 0x00000006u, 0x0004002bu, 0x00000008u, 0x000001b8u, 0x00000007u, 0x0011001eu, 0x000001bdu, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000011u, 0x0000000fu, 0x0000000fu, 0x00000013u, 0x0003001du, 0x000001beu, 0x000001bdu, 0x0003001eu, 0x000001bfu, 0x000001beu, 0x00040020u, 0x000001c0u, 0x0000000cu, 0x000001bfu, 0x0004003bu, 0x000001c0u, 0x000001c1u, 0x0000000cu, 0x00040020u, 0x000001c3u, 0x0000000cu, 0x000001bdu, 0x00040020u, 0x000001c6u, 0x00000007u, 0x00000014u, 0x0004002bu, 0x00000008u, 0x000001d9u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x000001dcu, 0x00000009u, 0x0004002bu, 0x00000008u, 0x000001dfu, 0x0000000au, 0x0004002bu, 0x00000008u, 0x000001e2u, 0x0000000bu, 0x00040020u, 0x000001e3u, 0x00000007u, 0x00000011u, 0x0004002bu, 0x00000008u, 0x000001e6u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x000001e9u, 0x0000000du, 0x0004002bu, 0x00000008u, 0x000001ecu, 0x0000000eu, 0x000a001eu, 0x000001f1u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000010u, 0x00000006u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x000001f2u, 0x000001f1u, 0x0003001eu, 0x000001f3u, 0x000001f2u, 0x00040020u, 0x000001f4u, 0x0000000cu, 0x000001f3u, 0x0004003bu, 0x000001f4u, 0x000001f5u, 0x0000000cu, 0x00040020u, 0x000001f7u, 0x0000000cu, 0x000001f1u, 0x00040020u, 0x000001fau, 0x00000007u, 0x00000019u, 0x0006001eu, 0x0000020fu, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000008u, 0x0003001du, 0x00000210u, 0x0000020fu, 0x0003001eu, 0x00000211u, 0x00000210u, 0x00040020u, 0x00000212u, 0x0000000cu, 0x00000211u, 0x0004003bu, 0x00000212u, 0x00000213u, 0x0000000cu, 0x00040020u, 0x00000215u, 0x0000000cu, 0x0000020fu, 0x00040020u, 0x00000218u, 0x00000007u, 0x0000001eu, 0x000b001eu, 0x00000225u, 0x00000009u, 0x00000009u, 0x00000023u, 0x00000023u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000011u, 0x0003001du, 0x00000226u, 0x00000225u, 0x0003001eu, 0x00000227u, 0x00000226u, 0x00040020u, 0x00000228u, 0x0000000cu, 0x00000227u, 0x0004003bu, 0x00000228u, 0x00000229u, 0x0000000cu, 0x00040020u, 0x0000022bu, 0x0000000cu, 0x00000225u, 0x0010001eu, 0x00000244u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x00000245u, 0x00000244u, 0x0003001eu, 0x00000246u, 0x00000245u, 0x00040020u, 0x00000247u, 0x0000000cu, 0x00000246u, 0x0004003bu, 0x00000247u, 0x00000248u, 0x0000000cu, 0x00040020u, 0x0000024au, 0x0000000cu, 0x00000244u, 0x00040017u, 0x0000026du, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000026eu, 0x00000007u, 0x0000026du, 0x0004002bu, 0x00000006u, 0x00000275u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x0000027bu, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x0000028eu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000291u, 0x00000010u, 0x0004002bu, 0x00000011u, 0x00000295u, 0x00000007u, 0x0004002bu, 0x00000011u, 0x00000297u, 0x00000006u, 0x0004002bu, 0x00000011u, 0x00000299u, 0x00000020u, 0x0004002bu, 0x00000011u, 0x000002a5u, 0x000001ffu, 0x0004002bu, 0x00000011u, 0x000002acu, 0x000000ffu, 0x0004002bu, 0x00000011u, 0x000002b2u, 0x00000004u, 0x0004002bu, 0x00000011u, 0x000002b3u, 0x00000002u, 0x0007002cu, 0x00000023u, 0x000002b4u, 0x00000196u, 0x000002b2u, 0x000002b3u, 0x00000297u, 0x0004002bu, 0x00000011u, 0x000002b8u, 0x00000003u, 0x00040017u, 0x000002bcu, 0x00000063u, 0x00000004u, 0x00040020u, 0x000002bdu, 0x00000007u, 0x000002bcu, 0x0004002bu, 0x0000000fu, 0x000002d4u, 0x00000000u, 0x0004002bu, 0x0000000fu, 0x000002d5u, 0x00000001u, 0x0007002cu, 0x00000010u, 0x000002d6u, 0x000002d4u, 0x000002d4u, 0x000002d4u, 0x000002d4u, 0x0007002cu, 0x00000010u, 0x000002d7u, 0x000002d5u, 0x000002d5u, 0x000002d5u, 0x000002d5u, 0x0004002bu, 0x0000000fu, 0x000002e4u, 0x00000002u, 0x0004002bu, 0x0000000fu, 0x000002e5u, 0x00000004u, 0x0004002bu, 0x0000000fu, 0x000002e6u, 0x00000008u, 0x0007002cu, 0x00000010u, 0x000002e7u, 0x000002d5u, 0x000002e4u, 0x000002e5u, 0x000002e6u, 0x0004002bu, 0x0000000fu, 0x000002eau, 0x00000010u, 0x0004002bu, 0x0000000fu, 0x000002ebu, 0x00000020u, 0x0004002bu, 0x0000000fu, 0x000002ecu, 0x00000040u, 0x0004002bu, 0x0000000fu, 0x000002edu, 0x00000080u, 0x0007002cu, 0x00000010u, 0x000002eeu, 0x000002eau, 0x000002ebu, 0x000002ecu, 0x000002edu, 0x0004002bu, 0x00000006u, 0x000002f4u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x000002f8u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x000002fbu, 0x00000003u, 0x0004002bu, 0x0000000fu, 0x00000302u, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x00000306u, 0x00000080u, 0x0007002cu, 0x00000009u, 0x00000310u, 0x0000019cu, 0x0000019cu, 0x0000019cu, 0x0000019cu, 0x0004002bu, 0x00000008u, 0x00000311u, 0x000000ffu, 0x0007002cu, 0x00000009u, 0x00000312u, 0x00000311u, 0x00000311u, 0x00000311u, 0x00000311u, 0x00040015u, 0x0000031bu, 0x00000008u, 0x00000001u, 0x00040017u, 0x0000031cu, 0x0000031bu, 0x00000004u, 0x0004002bu, 0x00000008u, 0x00000328u, 0x00020000u, 0x0004002bu, 0x00000008u, 0x00000332u, 0x0003ffffu, 0x0004002bu, 0x00000008u, 0x0000033fu, 0x00003fffu, 0x0004002bu, 0x00000006u, 0x00000345u, 0x00000040u, 0x0004001cu, 0x00000346u, 0x0000011du, 0x00000345u, 0x0004002bu, 0x00000012u, 0x00000347u, 0x00004000u, 0x0004002bu, 0x00000012u, 0x00000348u, 0xfffffc10u, 0x0005002cu, 0x0000011du, 0x00000349u, 0x00000347u, 0x00000348u, 0x0004002bu, 0x00000012u, 0x0000034au, 0x00003f04u, 0x0004002bu, 0x00000012u, 0x0000034bu, 0xfffffc30u, 0x0005002cu, 0x0000011du, 0x0000034cu, 0x0000034au, 0x0000034bu, 0x0004002bu, 0x00000012u, 0x0000034du, 0x00003e10u, 0x0004002bu, 0x00000012u, 0x0000034eu, 0xfffffc48u, 0x0005002cu, 0x0000011du, 0x0000034fu, 0x0000034du, 0x0000034eu, 0x0004002bu, 0x00000012u, 0x00000350u, 0x00003d22u, 0x0004002bu, 0x00000012u, 0x00000351u, 0xfffffc68u, 0x0005002cu, 0x0000011du, 0x00000352u, 0x00000350u, 0x00000351u, 0x0004002bu, 0x00000012u, 0x00000353u, 0x00003c3cu, 0x0004002bu, 0x00000012u, 0x00000354u, 0xfffffc84u, 0x0005002cu, 0x0000011du, 0x00000355u, 0x00000353u, 0x00000354u, 0x0004002bu, 0x00000012u, 0x00000356u, 0x00003b5du, 0x0004002bu, 0x00000012u, 0x00000357u, 0xfffffc98u, 0x0005002cu, 0x0000011du, 0x00000358u, 0x00000356u, 0x00000357u, 0x0004002bu, 0x00000012u, 0x00000359u, 0x00003a83u, 0x0004002bu, 0x00000012u, 0x0000035au, 0xfffffcb8u, 0x0005002cu, 0x0000011du, 0x0000035bu, 0x00000359u, 0x0000035au, 0x0004002bu, 0x00000012u, 0x0000035cu, 0x000039b1u, 0x0004002bu, 0x00000012u, 0x0000035du, 0xfffffcccu, 0x0005002cu, 0x0000011du, 0x0000035eu, 0x0000035cu, 0x0000035du, 0x0004002bu, 0x00000012u, 0x0000035fu, 0x000038e4u, 0x0004002bu, 0x00000012u, 0x00000360u, 0xfffffce0u, 0x0005002cu, 0x0000011du, 0x00000361u, 0x0000035fu, 0x00000360u, 0x0004002bu, 0x00000012u, 0x00000362u, 0x0000381cu, 0x0004002bu, 0x00000012u, 0x00000363u, 0xfffffcf8u, 0x0005002cu, 0x0000011du, 0x00000364u, 0x00000362u, 0x00000363u, 0x0004002bu, 0x00000012u, 0x00000365u, 0x0000375au, 0x0004002bu, 0x00000012u, 0x00000366u, 0xfffffd0cu, 0x0005002cu, 0x0000011du, 0x00000367u, 0x00000365u, 0x00000366u, 0x0004002bu, 0x00000012u, 0x00000368u, 0x0000369du, 0x0004002bu, 0x00000012u, 0x00000369u, 0xfffffd20u, 0x0005002cu, 0x0000011du, 0x0000036au, 0x00000368u, 0x00000369u, 0x0004002bu, 0x00000012u, 0x0000036bu, 0x000035e5u, 0x0004002bu, 0x00000012u, 0x0000036cu, 0xfffffd34u, 0x0005002cu, 0x0000011du, 0x0000036du, 0x0000036bu, 0x0000036cu, 0x0004002bu, 0x00000012u, 0x0000036eu, 0x00003532u, 0x0004002bu, 0x00000012u, 0x0000036fu, 0xfffffd44u, 0x0005002cu, 0x0000011du, 0x00000370u, 0x0000036eu, 0x0000036fu, 0x0004002bu, 0x00000012u, 0x00000371u, 0x00003483u, 0x0004002bu, 0x00000012u, 0x00000372u, 0xfffffd58u, 0x0005002cu, 0x0000011du, 0x00000373u, 0x00000371u, 0x00000372u, 0x0004002bu, 0x00000012u, 0x00000374u, 0x000033d9u, 0x0004002bu, 0x00000012u, 0x00000375u, 0xfffffd68u, 0x0005002cu, 0x0000011du, 0x00000376u, 0x00000374u, 0x00000375u, 0x0004002bu, 0x00000012u, 0x00000377u, 0x00003333u, 0x0004002bu, 0x00000012u, 0x00000378u, 0xfffffd78u, 0x0005002cu, 0x0000011du, 0x00000379u, 0x00000377u, 0x00000378u, 0x0004002bu, 0x00000012u, 0x0000037au, 0x00003291u, 0x0004002bu, 0x00000012u, 0x0000037bu, 0xfffffd8cu, 0x0005002cu, 0x0000011du, 0x0000037cu, 0x0000037au, 0x0000037bu, 0x0004002bu, 0x00000012u, 0x0000037du, 0x000031f4u, 0x0004002bu, 0x00000012u, 0x0000037eu, 0xfffffd94u, 0x0005002cu, 0x0000011du, 0x0000037fu, 0x0000037du, 0x0000037eu, 0x0004002bu, 0x00000012u, 0x00000380u, 0x00003159u, 0x0004002bu, 0x00000012u, 0x00000381u, 0xfffffda8u, 0x0005002cu, 0x0000011du, 0x00000382u, 0x00000380u, 0x00000381u, 0x0004002bu, 0x00000012u, 0x00000383u, 0x000030c3u, 0x0004002bu, 0x00000012u, 0x00000384u, 0xfffffdb4u, 0x0005002cu, 0x0000011du, 0x00000385u, 0x00000383u, 0x00000384u, 0x0004002bu, 0x00000012u, 0x00000386u, 0x00003030u, 0x0004002bu, 0x00000012u, 0x00000387u, 0xfffffdc4u, 0x0005002cu, 0x0000011du, 0x00000388u, 0x00000386u, 0x00000387u, 0x0004002bu, 0x00000012u, 0x00000389u, 0x00002fa1u, 0x0004002bu, 0x00000012u, 0x0000038au, 0xfffffdd0u, 0x0005002cu, 0x0000011du, 0x0000038bu, 0x00000389u, 0x0000038au, 0x0004002bu, 0x00000012u, 0x0000038cu, 0x00002f15u, 0x0004002bu, 0x00000012u, 0x0000038du, 0xfffffddcu, 0x0005002cu, 0x0000011du, 0x0000038eu, 0x0000038cu, 0x0000038du, 0x0004002bu, 0x00000012u, 0x0000038fu, 0x00002e8cu, 0x0004002bu, 0x00000012u, 0x00000390u, 0xfffffde8u, 0x0005002cu, 0x0000011du, 0x00000391u, 0x0000038fu, 0x00000390u, 0x0004002bu, 0x00000012u, 0x00000392u, 0x00002e06u, 0x0004002bu, 0x00000012u, 0x00000393u, 0xfffffdf4u, 0x0005002cu, 0x0000011du, 0x00000394u, 0x00000392u, 0x00000393u, 0x0004002bu, 0x00000012u, 0x00000395u, 0x00002d83u, 0x0004002bu, 0x00000012u, 0x00000396u, 0xfffffe00u, 0x0005002cu, 0x0000011du, 0x00000397u, 0x00000395u, 0x00000396u, 0x0004002bu, 0x00000012u, 0x00000398u, 0x00002d03u, 0x0004002bu, 0x00000012u, 0x00000399u, 0xfffffe0cu, 0x0005002cu, 0x0000011du, 0x0000039au, 0x00000398u, 0x00000399u, 0x0004002bu, 0x00000012u, 0x0000039bu, 0x00002c86u, 0x0004002bu, 0x00000012u, 0x0000039cu, 0xfffffe14u, 0x0005002cu, 0x0000011du, 0x0000039du, 0x0000039bu, 0x0000039cu, 0x0004002bu, 0x00000012u, 0x0000039eu, 0x00002c0bu, 0x0004002bu, 0x00000012u, 0x0000039fu, 0xfffffe20u, 0x0005002cu, 0x0000011du, 0x000003a0u, 0x0000039eu, 0x0000039fu, 0x0004002bu, 0x00000012u, 0x000003a1u, 0x00002b93u, 0x0004002bu, 0x00000012u, 0x000003a2u, 0xfffffe2cu, 0x0005002cu, 0x0000011du, 0x000003a3u, 0x000003a1u, 0x000003a2u, 0x0004002bu, 0x00000012u, 0x000003a4u, 0x00002b1eu, 0x0004002bu, 0x00000012u, 0x000003a5u, 0xfffffe34u, 0x0005002cu, 0x0000011du, 0x000003a6u, 0x000003a4u, 0x000003a5u, 0x0004002bu, 0x00000012u, 0x000003a7u, 0x00002aabu, 0x0004002bu, 0x00000012u, 0x000003a8u, 0xfffffe3cu, 0x0005002cu, 0x0000011du, 0x000003a9u, 0x000003a7u, 0x000003a8u, 0x0004002bu, 0x00000012u, 0x000003aau, 0x00002a3au, 0x0004002bu, 0x00000012u, 0x000003abu, 0xfffffe48u, 0x0005002cu, 0x0000011du, 0x000003acu, 0x000003aau, 0x000003abu, 0x0004002bu, 0x00000012u, 0x000003adu, 0x000029ccu, 0x0004002bu, 0x00000012u, 0x000003aeu, 0xfffffe50u, 0x0005002cu, 0x0000011du, 0x000003afu, 0x000003adu, 0x000003aeu, 0x0004002bu, 0x00000012u, 0x000003b0u, 0x00002960u, 0x0004002bu, 0x00000012u, 0x000003b1u, 0xfffffe58u, 0x0005002cu, 0x0000011du, 0x000003b2u, 0x000003b0u, 0x000003b1u, 0x0004002bu, 0x00000012u, 0x000003b3u, 0x000028f6u, 0x0004002bu, 0x00000012u, 0x000003b4u, 0xfffffe60u, 0x0005002cu, 0x0000011du, 0x000003b5u, 0x000003b3u, 0x000003b4u, 0x0004002bu, 0x00000012u, 0x000003b6u, 0x0000288eu, 0x0004002bu, 0x00000012u, 0x000003b7u, 0xfffffe68u, 0x0005002cu, 0x0000011du, 0x000003b8u, 0x000003b6u, 0x000003b7u, 0x0004002bu, 0x00000012u, 0x000003b9u, 0x00002828u, 0x0004002bu, 0x00000012u, 0x000003bau, 0xfffffe70u, 0x0005002cu, 0x0000011du, 0x000003bbu, 0x000003b9u, 0x000003bau, 0x0004002bu, 0x00000012u, 0x000003bcu, 0x000027c4u, 0x0004002bu, 0x00000012u, 0x000003bdu, 0xfffffe78u, 0x0005002cu, 0x0000011du, 0x000003beu, 0x000003bcu, 0x000003bdu, 0x0004002bu, 0x00000012u, 0x000003bfu, 0x00002762u, 0x0004002bu, 0x00000012u, 0x000003c0u, 0xfffffe80u, 0x0005002cu, 0x0000011du, 0x000003c1u, 0x000003bfu, 0x000003c0u, 0x0004002bu, 0x00000012u, 0x000003c2u, 0x00002702u, 0x0004002bu, 0x00000012u, 0x000003c3u, 0xfffffe88u, 0x0005002cu, 0x0000011du, 0x000003c4u, 0x000003c2u, 0x000003c3u, 0x0004002bu, 0x00000012u, 0x000003c5u, 0x000026a4u, 0x0004002bu, 0x00000012u, 0x000003c6u, 0xfffffe90u, 0x0005002cu, 0x0000011du, 0x000003c7u, 0x000003c5u, 0x000003c6u, 0x0004002bu, 0x00000012u, 0x000003c8u, 0x00002648u, 0x0004002bu, 0x00000012u, 0x000003c9u, 0xfffffe94u, 0x0005002cu, 0x0000011du, 0x000003cau, 0x000003c8u, 0x000003c9u, 0x0004002bu, 0x00000012u, 0x000003cbu, 0x000025edu, 0x0004002bu, 0x00000012u, 0x000003ccu, 0xfffffe9cu, 0x0005002cu, 0x0000011du, 0x000003cdu, 0x000003cbu, 0x000003ccu, 0x0004002bu, 0x00000012u, 0x000003ceu, 0x00002594u, 0x0004002bu, 0x00000012u, 0x000003cfu, 0xfffffea4u, 0x0005002cu, 0x0000011du, 0x000003d0u, 0x000003ceu, 0x000003cfu, 0x0004002bu, 0x00000012u, 0x000003d1u, 0x0000253du, 0x0004002bu, 0x00000012u, 0x000003d2u, 0xfffffea8u, 0x0005002cu, 0x0000011du, 0x000003d3u, 0x000003d1u, 0x000003d2u, 0x0004002bu, 0x00000012u, 0x000003d4u, 0x000024e7u, 0x0004002bu, 0x00000012u, 0x000003d5u, 0xfffffeacu, 0x0005002cu, 0x0000011du, 0x000003d6u, 0x000003d4u, 0x000003d5u, 0x0004002bu, 0x00000012u, 0x000003d7u, 0x00002492u, 0x0004002bu, 0x00000012u, 0x000003d8u, 0xfffffeb4u, 0x0005002cu, 0x0000011du, 0x000003d9u, 0x000003d7u, 0x000003d8u, 0x0004002bu, 0x00000012u, 0x000003dau, 0x0000243fu, 0x0004002bu, 0x00000012u, 0x000003dbu, 0xfffffebcu, 0x0005002cu, 0x0000011du, 0x000003dcu, 0x000003dau, 0x000003dbu, 0x0004002bu, 0x00000012u, 0x000003ddu, 0x000023eeu, 0x0004002bu, 0x00000012u, 0x000003deu, 0xfffffec0u, 0x0005002cu, 0x0000011du, 0x000003dfu, 0x000003ddu, 0x000003deu, 0x0004002bu, 0x00000012u, 0x000003e0u, 0x0000239eu, 0x0004002bu, 0x00000012u, 0x000003e1u, 0xfffffec4u, 0x0005002cu, 0x0000011du, 0x000003e2u, 0x000003e0u, 0x000003e1u, 0x0004002bu, 0x00000012u, 0x000003e3u, 0x0000234fu, 0x0004002bu, 0x00000012u, 0x000003e4u, 0xfffffeccu, 0x0005002cu, 0x0000011du, 0x000003e5u, 0x000003e3u, 0x000003e4u, 0x0004002bu, 0x00000012u, 0x000003e6u, 0x00002302u, 0x0004002bu, 0x00000012u, 0x000003e7u, 0xfffffed0u, 0x0005002cu, 0x0000011du, 0x000003e8u, 0x000003e6u, 0x000003e7u, 0x0004002bu, 0x00000012u, 0x000003e9u, 0x000022b6u, 0x0004002bu, 0x00000012u, 0x000003eau, 0xfffffed8u, 0x0005002cu, 0x0000011du, 0x000003ebu, 0x000003e9u, 0x000003eau, 0x0004002bu, 0x00000012u, 0x000003ecu, 0x0000226cu, 0x0005002cu, 0x0000011du, 0x000003edu, 0x000003ecu, 0x000003eau, 0x0004002bu, 0x00000012u, 0x000003eeu, 0x00002222u, 0x0004002bu, 0x00000012u, 0x000003efu, 0xfffffee0u, 0x0005002cu, 0x0000011du, 0x000003f0u, 0x000003eeu, 0x000003efu, 0x0004002bu, 0x00000012u, 0x000003f1u, 0x000021dau, 0x0004002bu, 0x00000012u, 0x000003f2u, 0xfffffee4u, 0x0005002cu, 0x0000011du, 0x000003f3u, 0x000003f1u, 0x000003f2u, 0x0004002bu, 0x00000012u, 0x000003f4u, 0x00002193u, 0x0004002bu, 0x00000012u, 0x000003f5u, 0xfffffee8u, 0x0005002cu, 0x0000011du, 0x000003f6u, 0x000003f4u, 0x000003f5u, 0x0004002bu, 0x00000012u, 0x000003f7u, 0x0000214du, 0x0004002bu, 0x00000012u, 0x000003f8u, 0xfffffeecu, 0x0005002cu, 0x0000011du, 0x000003f9u, 0x000003f7u, 0x000003f8u, 0x0004002bu, 0x00000012u, 0x000003fau, 0x00002108u, 0x0004002bu, 0x00000012u, 0x000003fbu, 0xfffffef4u, 0x0005002cu, 0x0000011du, 0x000003fcu, 0x000003fau, 0x000003fbu, 0x0004002bu, 0x00000012u, 0x000003fdu, 0x000020c5u, 0x0005002cu, 0x0000011du, 0x000003feu, 0x000003fdu, 0x000003fbu, 0x0004002bu, 0x00000012u, 0x000003ffu, 0x00002082u, 0x0004002bu, 0x00000012u, 0x00000400u, 0xfffffefcu, 0x0005002cu, 0x0000011du, 0x00000401u, 0x000003ffu, 0x00000400u, 0x0004002bu, 0x00000012u, 0x00000402u, 0x00002041u, 0x0005002cu, 0x0000011du, 0x00000403u, 0x00000402u, 0x00000400u, 0x0043002cu, 0x00000346u, 0x00000404u, 0x00000349u, 0x0000034cu, 0x0000034fu, 0x00000352u, 0x00000355u, 0x00000358u, 0x0000035bu, 0x0000035eu, 0x00000361u, 0x00000364u, 0x00000367u, 0x0000036au, 0x0000036du, 0x00000370u, 0x00000373u, 0x00000376u, 0x00000379u, 0x0000037cu, 0x0000037fu, 0x00000382u, 0x00000385u, 0x00000388u, 0x0000038bu, 0x0000038eu, 0x00000391u, 0x00000394u, 0x00000397u, 0x0000039au, 0x0000039du, 0x000003a0u, 0x000003a3u, 0x000003a6u, 0x000003a9u, 0x000003acu, 0x000003afu, 0x000003b2u, 0x000003b5u, 0x000003b8u, 0x000003bbu, 0x000003beu, 0x000003c1u, 0x000003c4u, 0x000003c7u, 0x000003cau, 0x000003cdu, 0x000003d0u, 0x000003d3u, 0x000003d6u, 0x000003d9u, 0x000003dcu, 0x000003dfu, 0x000003e2u, 0x000003e5u, 0x000003e8u, 0x000003ebu, 0x000003edu, 0x000003f0u, 0x000003f3u, 0x000003f6u, 0x000003f9u, 0x000003fcu, 0x000003feu, 0x00000401u, 0x00000403u, 0x00040020u, 0x00000407u, 0x00000007u, 0x00000346u, 0x0004002bu, 0x00000008u, 0x00000424u, 0x00007fffu, 0x0004002bu, 0x00000008u, 0x00000436u, 0x3fffffffu, 0x0004002bu, 0x00000008u, 0x00000437u, 0x20000000u, 0x0005002cu, 0x00000058u, 0x00000450u, 0x0000019cu, 0x0000019cu, 0x00040017u, 0x00000451u, 0x00000063u, 0x00000002u, 0x0004002bu, 0x00000008u, 0x0000046au, 0xffff8000u, 0x00030029u, 0x00000063u, 0x0000046cu, 0x0005002cu, 0x00000058u, 0x00000485u, 0x00000424u, 0x00000424u, 0x0004002bu, 0x00000008u, 0x00000487u, 0xffff0000u, 0x0005002cu, 0x00000058u, 0x00000488u, 0x00000487u, 0x00000487u, 0x0004002bu, 0x00000008u, 0x00000489u, 0x0000ffffu, 0x0005002cu, 0x00000058u, 0x0000048au, 0x00000489u, 0x00000489u, 0x0004002bu, 0x00000008u, 0x0000048fu, 0xffffffe0u, 0x00040032u, 0x00000008u, 0x00000492u, 0x00000000u, 0x0004002bu, 0x00000008u, 0x00000493u, 0x0000001au, 0x00060034u, 0x00000008u, 0x00000494u, 0x000000c3u, 0x00000492u, 0x00000493u, 0x00060034u, 0x00000008u, 0x00000495u, 0x000000c7u, 0x00000494u, 0x000001acu, 0x0004002bu, 0x00000012u, 0x000004afu, 0x00000001u, 0x00060034u, 0x00000008u, 0x000004b2u, 0x00000080u, 0x000001a9u, 0x00000495u, 0x00050034u, 0x00000012u, 0x000004b3u, 0x00000072u, 0x000004b2u, 0x00060034u, 0x00000008u, 0x000004c8u, 0x00000080u, 0x000001afu, 0x00000495u, 0x00050034u, 0x00000012u, 0x000004c9u, 0x00000072u, 0x000004c8u, 0x0006001eu, 0x000004e5u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000006u, 0x0003001eu, 0x000004e6u, 0x000004e5u, 0x00040020u, 0x000004e7u, 0x00000002u, 0x000004e6u, 0x0004003bu, 0x000004e7u, 0x000004e8u, 0x00000002u, 0x00040020u, 0x000004e9u, 0x00000002u, 0x00000008u, 0x0004002bu, 0x00000008u, 0x000004f6u, 0xffffffffu, 0x0004002bu, 0x00000008u, 0x00000509u, 0x00000010u, 0x00060034u, 0x00000008u, 0x00000556u, 0x000000c4u, 0x000001a6u, 0x00000495u, 0x00060034u, 0x00000063u, 0x00000557u, 0x000000adu, 0x00000556u, 0x000001a6u, 0x00060034u, 0x00000008u, 0x000005adu, 0x00000082u, 0x00000556u, 0x000001a6u, 0x00060034u, 0x00000008u, 0x000005c1u, 0x00000080u, 0x000001a9u, 0x00000495u, 0x00060034u, 0x00000008u, 0x000005d1u, 0x00000080u, 0x000001b2u, 0x00000495u, 0x0005002cu, 0x00000058u, 0x000005fau, 0x0000019cu, 0x000001a6u, 0x0004002bu, 0x00000006u, 0x00000646u, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x00000647u, 0x00000006u, 0x0006002cu, 0x0000026du, 0x00000648u, 0x00000646u, 0x00000647u, 0x000002f4u, 0x0004002bu, 0x00000006u, 0x0000064au, 0x0000001fu, 0x0004002bu, 0x00000006u, 0x00000657u, 0x000000ffu, 0x00040017u, 0x0000065au, 0x00000012u, 0x00000003u, 0x00040017u, 0x0000065bu, 0x00000011u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x0000068au, 0x00000fffu, 0x0004002bu, 0x00000006u, 0x00000692u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x0000069fu, 0x00001000u, 0x0004001cu, 0x000006a0u, 0x0000000fu, 0x0000069fu, 0x0003001eu, 0x000006a1u, 0x000006a0u, 0x0003001du, 0x000006a2u, 0x000006a1u, 0x0003001eu, 0x000006a3u, 0x000006a2u, 0x00040020u, 0x000006a4u, 0x0000000cu, 0x000006a3u, 0x0004003bu, 0x000006a4u, 0x000006a5u, 0x0000000cu, 0x00040020u, 0x000006a8u, 0x0000000cu, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000006afu, 0x0000000fu, 0x0004002bu, 0x00000006u, 0x000006e7u, 0x0000000eu, 0x0004002bu, 0x00000006u, 0x00000744u, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x0000076du, 0x00000800u, 0x0004001cu, 0x0000076eu, 0x00000011u, 0x0000076du, 0x0003001eu, 0x0000076fu, 0x0000076eu, 0x0003001du, 0x00000770u, 0x0000076fu, 0x0003001eu, 0x00000771u, 0x00000770u, 0x00040020u, 0x00000772u, 0x0000000cu, 0x00000771u, 0x0004003bu, 0x00000772u, 0x00000773u, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x00000775u, 0x00000400u, 0x00040020u, 0x00000778u, 0x0000000cu, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000816u, 0xfffffffcu, 0x0004002bu, 0x00000011u, 0x000008cbu, 0x00000008u, 0x0004002bu, 0x00000012u, 0x000008d7u, 0x00000080u, 0x0004002bu, 0x00000008u, 0x00000977u, 0x00000020u, 0x0004002bu, 0x00000008u, 0x0000098eu, 0x000003ffu, 0x0004002bu, 0x00000008u, 0x000009d6u, 0x000007ffu, 0x0004002bu, 0x00000006u, 0x00000a02u, 0x00001fffu, 0x0004002bu, 0x00000008u, 0x00000a5bu, 0x0000000fu, 0x0004002bu, 0x00000008u, 0x00000a5du, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000ab0u, 0x0000000cu, 0x0004002bu, 0x00000008u, 0x00000ad5u, 0x00000400u, 0x0004002bu, 0x00000012u, 0x00000b5du, 0x00000010u, 0x0004002bu, 0x00000012u, 0x00000b61u, 0x00000005u, 0x0004002bu, 0x00000008u, 0x00000ba2u, 0x0000001fu, 0x0004002bu, 0x00000008u, 0x00000bd1u, 0xffffff01u, 0x0005002cu, 0x00000058u, 0x00000bdbu, 0x00000509u, 0x00000509u, 0x00040017u, 0x00000bddu, 0x00000063u, 0x00000003u, 0x0004002bu, 0x00000012u, 0x00001068u, 0x00000002u, 0x0003002au, 0x00000063u, 0x00001099u, 0x0004002bu, 0x00000012u, 0x0000109fu, 0x000000ffu, 0x0004002bu, 0x00000008u, 0x000010beu, 0x00004000u, 0x0004002bu, 0x00000008u, 0x000010dau, 0xffffff00u, 0x0004002bu, 0x00000006u, 0x00001108u, 0x00000007u, 0x0004001cu, 0x0000116eu, 0x0000000fu, 0x00000291u, 0x0004001cu, 0x0000116fu, 0x0000116eu, 0x000002f8u, 0x0004002bu, 0x0000000fu, 0x00001170u, 0x00000006u, 0x0004002bu, 0x0000000fu, 0x00001171u, 0x00000007u, 0x0004002bu, 0x0000000fu, 0x00001172u, 0x00000005u, 0x0004002bu, 0x0000000fu, 0x00001173u, 0x00000003u, 0x0013002cu, 0x0000116eu, 0x00001174u, 0x000002d4u, 0x00001170u, 0x000002d5u, 0x00001171u, 0x000002e5u, 0x000002e4u, 0x00001172u, 0x00001173u, 0x00001173u, 0x00001172u, 0x000002e4u, 0x000002e5u, 0x00001171u, 0x000002d5u, 0x00001170u, 0x000002d4u, 0x0013002cu, 0x0000116eu, 0x00001175u, 0x000002d4u, 0x000002e5u, 0x000002d5u, 0x00001172u, 0x000002e5u, 0x000002d4u, 0x00001172u, 0x000002d5u, 0x00001173u, 0x00001171u, 0x000002e4u, 0x00001170u, 0x00001171u, 0x00001173u, 0x00001170u, 0x000002e4u, 0x0005002cu, 0x0000116fu, 0x00001176u, 0x00001174u, 0x00001175u, 0x00040020u, 0x0000117eu, 0x00000007u, 0x0000116fu, 0x0004002bu, 0x00000008u, 0x00001184u, 0x00000049u, 0x00040017u, 0x000011f3u, 0x0000000fu, 0x00000003u, 0x0004002bu, 0x00000008u, 0x000011ffu, 0x00000100u, 0x0006002cu, 0x0000005du, 0x00001200u, 0x000011ffu, 0x000011ffu, 0x000011ffu, 0x00060034u, 0x00000008u, 0x0000143cu, 0x00000082u, 0x00000556u, 0x000001a6u, 0x000d001eu, 0x00001444u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x00000012u, 0x00000008u, 0x00000008u, 0x00000008u, 0x00000012u, 0x0000000fu, 0x0000000fu, 0x0003001du, 0x00001445u, 0x00001444u, 0x0003001eu, 0x00001446u, 0x00001445u, 0x00040020u, 0x00001447u, 0x0000000cu, 0x00001446u, 0x0004003bu, 0x00001447u, 0x00001448u, 0x0000000cu, 0x00060034u, 0x00000063u, 0x0000144du, 0x000000adu, 0x00000556u, 0x000001a6u, 0x0004002bu, 0x00000006u, 0x00001451u, 0x00000020u, 0x00060034u, 0x00000008u, 0x00001456u, 0x00000082u, 0x00000556u, 0x000001a6u, 0x00050034u, 0x00000008u, 0x00001457u, 0x000000c8u, 0x00001456u, 0x00060034u, 0x00000008u, 0x0000145au, 0x00000082u, 0x00000556u, 0x000001a6u, 0x00050034u, 0x00000008u, 0x0000145bu, 0x000000c8u, 0x0000145au, 0x00040017u, 0x0000147au, 0x00000006u, 0x00000004u, 0x00040020u, 0x0000147bu, 0x00000007u, 0x0000147au, 0x0004001cu, 0x0000147du, 0x0000000fu, 0x00000275u, 0x0005001eu, 0x0000147eu, 0x00000010u, 0x00000010u, 0x0000147du, 0x0003001du, 0x0000147fu, 0x0000147eu, 0x0003001eu, 0x00001480u, 0x0000147fu, 0x00040020u, 0x00001481u, 0x0000000cu, 0x00001480u, 0x0004003bu, 0x00001481u, 0x00001482u, 0x0000000cu, 0x00040020u, 0x00001484u, 0x0000000cu, 0x00000010u, 0x0004002bu, 0x00000008u, 0x000014a4u, 0x40000000u, 0x00060034u, 0x00000008u, 0x000014a5u, 0x000000c7u, 0x00000492u, 0x000014a4u, 0x00060034u, 0x00000063u, 0x000014a6u, 0x000000abu, 0x000014a5u, 0x0000019cu, 0x00060034u, 0x00000006u, 0x000014a9u, 0x00000080u, 0x00000492u, 0x0000028eu, 0x00040032u, 0x00000008u, 0x000014aau, 0x00000000u, 0x00060034u, 0x00000008u, 0x000014abu, 0x000000c3u, 0x000014aau, 0x0000019cu, 0x00060034u, 0x00000008u, 0x000014acu, 0x000000c7u, 0x000014abu, 0x00000311u, 0x00040032u, 0x00000008u, 0x000014adu, 0x00000000u, 0x00060034u, 0x00000008u, 0x000014aeu, 0x000000c3u, 0x000014adu, 0x0000019cu, 0x00060034u, 0x00000008u, 0x000014afu, 0x000000c7u, 0x000014aeu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014b0u, 0x00000072u, 0x000014afu, 0x00060034u, 0x0000000fu, 0x000014b1u, 0x00000080u, 0x000014b0u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014b3u, 0x000000c3u, 0x000014adu, 0x000001d9u, 0x00060034u, 0x00000008u, 0x000014b4u, 0x000000c7u, 0x000014b3u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014b5u, 0x00000072u, 0x000014b4u, 0x00060034u, 0x0000000fu, 0x000014b6u, 0x00000080u, 0x000014b5u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014b8u, 0x000000c3u, 0x000014adu, 0x00000509u, 0x00060034u, 0x00000008u, 0x000014b9u, 0x000000c7u, 0x000014b8u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014bau, 0x00000072u, 0x000014b9u, 0x00060034u, 0x0000000fu, 0x000014bbu, 0x00000080u, 0x000014bau, 0x000002d4u, 0x0004002bu, 0x00000008u, 0x000014bdu, 0x00000018u, 0x00060034u, 0x00000008u, 0x000014beu, 0x000000c3u, 0x000014adu, 0x000014bdu, 0x00060034u, 0x00000008u, 0x000014bfu, 0x000000c7u, 0x000014beu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014c0u, 0x00000072u, 0x000014bfu, 0x00060034u, 0x0000000fu, 0x000014c1u, 0x00000080u, 0x000014c0u, 0x000002d4u, 0x00040032u, 0x00000008u, 0x000014c3u, 0x00000000u, 0x00060034u, 0x00000008u, 0x000014c4u, 0x000000c3u, 0x000014c3u, 0x0000019cu, 0x00060034u, 0x00000008u, 0x000014c5u, 0x000000c7u, 0x000014c4u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014c6u, 0x00000072u, 0x000014c5u, 0x00060034u, 0x0000000fu, 0x000014c7u, 0x00000080u, 0x000014c6u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014c9u, 0x000000c3u, 0x000014c3u, 0x000001d9u, 0x00060034u, 0x00000008u, 0x000014cau, 0x000000c7u, 0x000014c9u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014cbu, 0x00000072u, 0x000014cau, 0x00060034u, 0x0000000fu, 0x000014ccu, 0x00000080u, 0x000014cbu, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014ceu, 0x000000c3u, 0x000014c3u, 0x00000509u, 0x00060034u, 0x00000008u, 0x000014cfu, 0x000000c7u, 0x000014ceu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014d0u, 0x00000072u, 0x000014cfu, 0x00060034u, 0x0000000fu, 0x000014d1u, 0x00000080u, 0x000014d0u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014d3u, 0x000000c3u, 0x000014c3u, 0x000014bdu, 0x00060034u, 0x00000008u, 0x000014d4u, 0x000000c7u, 0x000014d3u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014d5u, 0x00000072u, 0x000014d4u, 0x00060034u, 0x0000000fu, 0x000014d6u, 0x00000080u, 0x000014d5u, 0x000002d4u, 0x00040032u, 0x00000008u, 0x000014d8u, 0x00000000u, 0x00060034u, 0x00000008u, 0x000014d9u, 0x000000c3u, 0x000014d8u, 0x0000019cu, 0x00060034u, 0x00000008u, 0x000014dau, 0x000000c7u, 0x000014d9u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014dbu, 0x00000072u, 0x000014dau, 0x00060034u, 0x0000000fu, 0x000014dcu, 0x00000080u, 0x000014dbu, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014deu, 0x000000c3u, 0x000014d8u, 0x000001d9u, 0x00060034u, 0x00000008u, 0x000014dfu, 0x000000c7u, 0x000014deu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014e0u, 0x00000072u, 0x000014dfu, 0x00060034u, 0x0000000fu, 0x000014e1u, 0x00000080u, 0x000014e0u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014e3u, 0x000000c3u, 0x000014d8u, 0x00000509u, 0x00060034u, 0x00000008u, 0x000014e4u, 0x000000c7u, 0x000014e3u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014e5u, 0x00000072u, 0x000014e4u, 0x00060034u, 0x0000000fu, 0x000014e6u, 0x00000080u, 0x000014e5u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014e8u, 0x000000c3u, 0x000014d8u, 0x000014bdu, 0x00060034u, 0x00000008u, 0x000014e9u, 0x000000c7u, 0x000014e8u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014eau, 0x00000072u, 0x000014e9u, 0x00060034u, 0x0000000fu, 0x000014ebu, 0x00000080u, 0x000014eau, 0x000002d4u, 0x00040032u, 0x00000008u, 0x000014edu, 0x00000000u, 0x00060034u, 0x00000008u, 0x000014eeu, 0x000000c3u, 0x000014edu, 0x0000019cu, 0x00060034u, 0x00000008u, 0x000014efu, 0x000000c7u, 0x000014eeu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014f0u, 0x00000072u, 0x000014efu, 0x00060034u, 0x0000000fu, 0x000014f1u, 0x00000080u, 0x000014f0u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014f3u, 0x000000c3u, 0x000014edu, 0x000001d9u, 0x00060034u, 0x00000008u, 0x000014f4u, 0x000000c7u, 0x000014f3u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014f5u, 0x00000072u, 0x000014f4u, 0x00060034u, 0x0000000fu, 0x000014f6u, 0x00000080u, 0x000014f5u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014f8u, 0x000000c3u, 0x000014edu, 0x00000509u, 0x00060034u, 0x00000008u, 0x000014f9u, 0x000000c7u, 0x000014f8u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014fau, 0x00000072u, 0x000014f9u, 0x00060034u, 0x0000000fu, 0x000014fbu, 0x00000080u, 0x000014fau, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000014fdu, 0x000000c3u, 0x000014edu, 0x000014bdu, 0x00060034u, 0x00000008u, 0x000014feu, 0x000000c7u, 0x000014fdu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000014ffu, 0x00000072u, 0x000014feu, 0x00060034u, 0x0000000fu, 0x00001500u, 0x00000080u, 0x000014ffu, 0x000002d4u, 0x0004002bu, 0x00000006u, 0x0000150cu, 0x00004000u, 0x0004002bu, 0x00000006u, 0x00001515u, 0x00000080u, 0x0004002bu, 0x00000006u, 0x0000151eu, 0x00000200u, 0x0004002bu, 0x00000006u, 0x0000152fu, 0x00000100u, 0x0004002bu, 0x00000006u, 0x0000153cu, 0x00002000u, 0x0004002bu, 0x00000006u, 0x00001541u, 0x00008000u, 0x0004002bu, 0x00000006u, 0x00001546u, 0x00010000u, 0x0004002bu, 0x00000006u, 0x0000154bu, 0x00020000u, 0x0004002bu, 0x00000006u, 0x00001550u, 0x00040000u, 0x0004002bu, 0x00000006u, 0x00001555u, 0x00080000u, 0x0004002bu, 0x00000006u, 0x0000155au, 0x00200000u, 0x0004002bu, 0x00000006u, 0x0000155fu, 0x00100000u, 0x0004002bu, 0x00000006u, 0x00001564u, 0x00400000u, 0x0004002bu, 0x00000006u, 0x00001569u, 0x00800000u, 0x0004002bu, 0x00000006u, 0x0000156eu, 0x01000000u, 0x0004002bu, 0x00000006u, 0x00001572u, 0x10000000u, 0x00040020u, 0x0000157cu, 0x00000002u, 0x00000006u, 0x00060034u, 0x00000008u, 0x000015bbu, 0x000000c7u, 0x00000492u, 0x00000437u, 0x00060034u, 0x00000063u, 0x000015bcu, 0x000000abu, 0x000015bbu, 0x0000019cu, 0x00060034u, 0x00000008u, 0x000015bfu, 0x000000c3u, 0x000014aau, 0x00000509u, 0x00060034u, 0x00000008u, 0x000015c0u, 0x000000c7u, 0x000015bfu, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000015c1u, 0x00000072u, 0x000015c0u, 0x00060034u, 0x0000000fu, 0x000015c2u, 0x00000080u, 0x000015c1u, 0x000002d4u, 0x00060034u, 0x00000008u, 0x000015c4u, 0x000000c3u, 0x000014aau, 0x000001d9u, 0x00060034u, 0x00000008u, 0x000015c5u, 0x000000c7u, 0x000015c4u, 0x00000311u, 0x00050034u, 0x0000031bu, 0x000015c6u, 0x00000072u, 0x000015c5u, 0x00060034u, 0x0000000fu, 0x000015c7u, 0x00000080u, 0x000015c6u, 0x000002d4u, 0x00060034u, 0x00000063u, 0x00001639u, 0x000000adu, 0x00000556u, 0x000001a6u, 0x00060034u, 0x00000008u, 0x000016a3u, 0x000000c7u, 0x00000492u, 0x00000437u, 0x00060034u, 0x00000063u, 0x000016a4u, 0x000000abu, 0x000016a3u, 0x0000019cu, 0x00050034u, 0x0000031bu, 0x000016a7u, 0x00000072u, 0x000015c0u, 0x00060034u, 0x0000000fu, 0x000016a8u, 0x00000080u, 0x000016a7u, 0x000002d4u, 0x00050034u, 0x0000031bu, 0x000016aau, 0x00000072u, 0x000015c5u, 0x00060034u, 0x0000000fu, 0x000016abu, 0x00000080u, 0x000016aau, 0x000002d4u, 0x0004002bu, 0x00000012u, 0x000016aeu, 0x00000000u, 0x0007002cu, 0x00000013u, 0x000016afu, 0x000016aeu, 0x000016aeu, 0x000016aeu, 0x000016aeu, 0x00040020u, 0x00001704u, 0x0000000cu, 0x00000009u, 0x00060034u, 0x00000008u, 0x00001743u, 0x000000c7u, 0x00000492u, 0x00000437u, 0x00060034u, 0x00000063u, 0x00001744u, 0x000000abu, 0x00001743u, 0x0000019cu, 0x00050034u, 0x0000031bu, 0x00001747u, 0x00000072u, 0x000015c0u, 0x00060034u, 0x0000000fu, 0x00001748u, 0x00000080u, 0x00001747u, 0x000002d4u, 0x00050034u, 0x0000031bu, 0x0000174au, 0x00000072u, 0x000015c5u, 0x00060034u, 0x0000000fu, 0x0000174bu, 0x00000080u, 0x0000174au, 0x000002d4u, 0x0003001du, 0x00001826u, 0x0000147au, 0x0003001eu, 0x00001827u, 0x00001826u, 0x00040020u, 0x00001828u, 0x0000000cu, 0x00001827u, 0x0004003bu, 0x00001828u, 0x00001829u, 0x0000000cu, 0x00040020u, 0x0000182au, 0x00000001u, 0x0000026du, 0x0004003bu, 0x0000182au, 0x0000182bu, 0x00000001u, 0x00040020u, 0x0000182cu, 0x00000001u, 0x00000006u, 0x00040020u, 0x0000182fu, 0x0000000cu, 0x0000147au, 0x00040032u, 0x00000006u, 0x00001835u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00001836u, 0x00000001u, 0x00060033u, 0x0000026du, 0x00001837u, 0x00001835u, 0x00001836u, 0x000002f4u, 0x0004003bu, 0x0000182au, 0x0000183au, 0x00000001u, 0x00060034u, 0x00000006u, 0x00001850u, 0x00000051u, 0x00001837u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00001851u, 0x00000051u, 0x00001837u, 0x00000001u, 0x00060034u, 0x00000006u, 0x00001852u, 0x00000084u, 0x00001850u, 0x00001851u, 0x0004003bu, 0x0000182cu, 0x00001854u, 0x00000001u, 0x00040020u, 0x00001863u, 0x00000007u, 0x0000031bu, 0x0004002bu, 0x0000031bu, 0x00001869u, 0x00000008u, 0x0003001du, 0x0000186du, 0x00000010u, 0x0003001eu, 0x0000186eu, 0x0000186du, 0x00040020u, 0x0000186fu, 0x0000000cu, 0x0000186eu, 0x0004003bu, 0x0000186fu, 0x00001870u, 0x0000000cu, 0x0003001du, 0x00001877u, 0x0000000fu, 0x0003001eu, 0x00001878u, 0x00001877u, 0x00040020u, 0x00001879u, 0x0000000cu, 0x00001878u, 0x0004003bu, 0x00001879u, 0x0000187au, 0x0000000cu, 0x0003001du, 0x0000187fu, 0x00000008u, 0x0003001eu, 0x00001880u, 0x0000187fu, 0x00040020u, 0x00001881u, 0x0000000cu, 0x00001880u, 0x0004003bu, 0x00001881u, 0x00001882u, 0x0000000cu, 0x00040020u, 0x00001886u, 0x0000000cu, 0x00000008u, 0x0003001du, 0x0000188fu, 0x00000006u, 0x0003001eu, 0x00001890u, 0x0000188fu, 0x00040020u, 0x00001891u, 0x0000000cu, 0x00001890u, 0x0004003bu, 0x00001891u, 0x00001892u, 0x0000000cu, 0x00040020u, 0x00001897u, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x0000031bu, 0x0000189au, 0xffffffffu, 0x0003001du, 0x0000189bu, 0x0000031bu, 0x0003001eu, 0x0000189cu, 0x0000189bu, 0x00040020u, 0x0000189du, 0x0000000cu, 0x0000189cu, 0x0004003bu, 0x0000189du, 0x0000189eu, 0x0000000cu, 0x00040020u, 0x000018a1u, 0x0000000cu, 0x0000031bu, 0x0004002bu, 0x00000008u, 0x000018a3u, 0x00000040u, 0x0004002bu, 0x00000008u, 0x000018a4u, 0x00000200u, 0x0004002bu, 0x00000008u, 0x000018a5u, 0x00000800u, 0x0004002bu, 0x00000008u, 0x000018a6u, 0x00001000u, 0x0004002bu, 0x00000008u, 0x000018a7u, 0x00002000u, 0x0004002bu, 0x00000008u, 0x000018a8u, 0x00008000u, 0x0004002bu, 0x00000008u, 0x000018a9u, 0x00010000u, 0x0004002bu, 0x00000008u, 0x000018aau, 0x00040000u, 0x0004002bu, 0x00000008u, 0x000018abu, 0x00080000u, 0x0004002bu, 0x00000008u, 0x000018acu, 0x00100000u, 0x0004002bu, 0x00000008u, 0x000018adu, 0x00200000u, 0x0004002bu, 0x00000008u, 0x000018aeu, 0x00400000u, 0x0004002bu, 0x00000008u, 0x000018afu, 0x00800000u, 0x0004002bu, 0x00000008u, 0x000018b0u, 0x01000000u, 0x0004002bu, 0x00000008u, 0x000018b1u, 0x10000000u, 0x0003002eu, 0x00000010u, 0x00005c6cu, 0x0003002eu, 0x00000012u, 0x00005c71u, 0x0003002eu, 0x00000006u, 0x00005d36u, 0x0003002eu, 0x0000000fu, 0x00005d37u, 0x0003002eu, 0x00000008u, 0x000061d5u, 0x0003002eu, 0x00000009u, 0x000061f5u, 0x0003002eu, 0x00000023u, 0x0000620bu, 0x0003002eu, 0x00000011u, 0x0000620eu, 0x00030001u, 0x0000005du, 0x00006f00u, 0x00030001u, 0x00000058u, 0x00006fceu, 0x00030001u, 0x00000013u, 0x00007705u, 0x00030001u, 0x00000063u, 0x00008213u, 0x00030001u, 0x00000012u, 0x00009b5au, 0x00030001u, 0x0000000fu, 0x0000ab32u, 0x00030001u, 0x00000008u, 0x0000ad9du, 0x00030001u, 0x00000010u, 0x0000aebdu, 0x00030001u, 0x00000063u, 0x0000b167u, 0x00030001u, 0x00000063u, 0x0000b168u, 0x00030001u, 0x0000005du, 0x0000b16du, 0x00030001u, 0x00000013u, 0x0000b219u, 0x00030001u, 0x00000063u, 0x0000b41fu, 0x00030001u, 0x00000013u, 0x0000b492u, 0x00030001u, 0x00000012u, 0x0000b52au, 0x0006002cu, 0x0000026du, 0x0000b612u, 0x00000275u, 0x00000275u, 0x00000275u, 0x0006002cu, 0x0000026du, 0x0000b613u, 0x0000027bu, 0x0000027bu, 0x0000027bu, 0x0006002cu, 0x0000005du, 0x0000b614u, 0x0000048fu, 0x0000048fu, 0x0000048fu, 0x0006002cu, 0x0000005du, 0x0000b615u, 0x00000509u, 0x00000509u, 0x00000509u, 0x0007002cu, 0x00000009u, 0x0000b616u, 0x0000048fu, 0x0000048fu, 0x0000048fu, 0x0000048fu, 0x0007002cu, 0x00000009u, 0x0000b617u, 0x000001ecu, 0x000001ecu, 0x000001ecu, 0x000001ecu, 0x0007002cu, 0x00000009u, 0x0000b618u, 0x00000306u, 0x00000306u, 0x00000306u, 0x00000306u, 0x0005002cu, 0x00000058u, 0x0000b619u, 0x000001a6u, 0x000001a6u, 0x0006002cu, 0x0000005du, 0x0000b61au, 0x0000046au, 0x0000046au, 0x0000046au, 0x0005002cu, 0x00000058u, 0x0000b61bu, 0x000001b2u, 0x000001b2u, 0x0005002cu, 0x00000058u, 0x0000b61cu, 0x00000ba2u, 0x00000ba2u, 0x0005002cu, 0x000000abu, 0x0000b61du, 0x00000a02u, 0x00000a02u, 0x0005002cu, 0x000000abu, 0x0000b61eu, 0x000002f8u, 0x000002f8u, 0x0006002cu, 0x0000026du, 0x0000b61fu, 0x0000064au, 0x0000064au, 0x0000064au, 0x0006002cu, 0x0000026du, 0x0000b620u, 0x000002fbu, 0x000002fbu, 0x000002fbu, 0x0006002cu, 0x0000026du, 0x0000b621u, 0x000002f8u, 0x000002f8u, 0x000002f8u, 0x0007002cu, 0x00000009u, 0x0000b622u, 0x000001d9u, 0x000001d9u, 0x000001d9u, 0x000001d9u, 0x0007002cu, 0x00000013u, 0x0000b623u, 0x00001068u, 0x00001068u, 0x00001068u, 0x00001068u, 0x0005002cu, 0x00000058u, 0x0000b624u, 0x00000977u, 0x00000977u, 0x0005002cu, 0x0000011du, 0x0000b625u, 0x00000b5du, 0x00000b5du, 0x0005002cu, 0x0000011du, 0x0000b626u, 0x00000b61u, 0x00000b61u, 0x0007002cu, 0x00000013u, 0x0000b627u, 0x00000b5du, 0x00000b5du, 0x00000b5du, 0x00000b5du, 0x0007002cu, 0x00000013u, 0x0000b628u, 0x00000b61u, 0x00000b61u, 0x00000b61u, 0x00000b61u, 0x0006002cu, 0x0000065au, 0x0000b629u, 0x000016aeu, 0x000016aeu, 0x000016aeu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000174u, 0x00006d0cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d0bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d0au, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d09u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d04u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d03u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d02u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d01u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006ccau, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006cc9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006cc8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006cc7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006cc6u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006cc5u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006cc4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006cc3u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006cc2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006cc1u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006cabu, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006caau, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006ca9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006ca8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006ca7u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006ca6u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006ca5u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006ca4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006ca3u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006ca2u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006c6bu, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006c6au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006c69u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006c68u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006c67u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c66u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c65u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c64u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c63u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c62u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006c2bu, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006c2au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006c29u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006c28u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006c27u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c26u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c25u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c24u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c23u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006c22u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006c01u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006c00u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006bffu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006bfeu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006bfdu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006bfcu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006bfbu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006bfau, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006bf9u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006bf8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006775u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006774u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006773u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006772u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006771u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006770u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000676fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000676eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000676du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000676cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000676bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000676au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006769u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006768u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000674au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006749u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006748u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006747u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006746u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006745u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006744u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006743u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006742u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006741u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006740u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000673fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000673eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000673du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062bau, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b7u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b6u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b5u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b4u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000062b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000062b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000062b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000062b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000062afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000062aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000062adu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000628fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000628eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000628du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000628cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000628bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000628au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006289u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006288u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006287u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006286u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006285u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006284u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006283u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006282u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006275u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006274u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006273u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006272u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006271u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006270u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000626fu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000626eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000626du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000626cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000626bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006247u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006246u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006245u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006244u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006243u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006242u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006241u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006240u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000623fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000623eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000623du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000621fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000621eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000621du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000621cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000621bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000621au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006219u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006218u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006217u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006216u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006215u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006214u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006213u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006212u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000620du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000620cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000620au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006203u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006202u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006201u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006200u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000061ffu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000061feu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061f9u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061f8u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061f7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061f6u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x000061e1u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000061e0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061dfu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061deu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061ddu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000061dcu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000061dbu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061dau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061d9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061d4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061d3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061d2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061c8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061c7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061c6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061c5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061bfu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061beu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061bdu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061bcu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x000061a8u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000061a7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061a6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061a5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000061a4u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000061a3u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000061a2u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061a1u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000061a0u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00006195u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006194u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006193u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006192u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006191u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x00006190u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x0000618fu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000618eu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000618du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000617bu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000617au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006179u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006178u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006177u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006176u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006175u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006174u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000616au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006169u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006168u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006167u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006166u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006165u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006164u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006163u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006151u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006150u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000614fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000614eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000614du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000614cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000614bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000614au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006140u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000613fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000613eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000613du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000613cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000613bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000613au, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006139u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000611bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000611au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006119u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006118u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006117u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006116u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006115u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006114u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006113u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006112u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006111u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006110u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000610fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000610eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060feu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060fdu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060fcu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060fbu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060fau, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060f9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060f8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060f1u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060c9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060c8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060c7u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060c6u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000060c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000060c3u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000609bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000609au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006099u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006098u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006097u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006096u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006095u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006092u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006091u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000608eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000608du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000608au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006089u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006086u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006085u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006082u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006081u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000607eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000607du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000607au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006079u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006076u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006075u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006055u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006054u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006053u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00006052u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006051u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006050u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000604fu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000604eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000604du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000604cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000604bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000604au, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006049u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006048u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006047u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006036u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006035u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006034u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00006033u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006032u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006031u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006030u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000602fu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000602eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000602du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000602cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000602bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000602au, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006029u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006028u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000600au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006009u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006008u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006007u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006006u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006005u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006004u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006003u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006002u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006001u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006000u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ffeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ffdu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005fedu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005fecu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005febu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005feau, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005fe9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005fe8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005fe7u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005fe6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fe5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fe4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fe3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fe2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fe1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fe0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fdcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fb5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005facu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fa9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fa8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fa5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fa4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fa1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005fa0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005f00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005efdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005efcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ef9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ef8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ef5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ef4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ef1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ef0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ee9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ee8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ee5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ee4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ee1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ee0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005edcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ed9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ed8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ed5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ed4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ed1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ed0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ecdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005eccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ec9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ec8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ec5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ec4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ec1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ec0u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005ebdu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005ebcu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005eb9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005eb8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005eb5u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005eb4u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005eb1u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005eb0u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e92u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e91u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e90u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e8fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e8eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e8du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e8cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e85u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e75u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e74u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e73u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e72u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e71u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e70u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e6fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005e6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e2cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e24u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e01u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005e00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dfdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dfcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005df9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005df8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005df5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005df4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005df1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005df0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005decu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005de9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005de8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005de5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005de4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005de1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005de0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005ddcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dd1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dd0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dc1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dc0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dbcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005db9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005db8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005db5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005db4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005db1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005db0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005dacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005da9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005da8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005da5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005da4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005da1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005da0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d79u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d58u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d50u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d4du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005d48u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d45u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d44u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d41u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d40u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d3du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d3cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d39u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005d38u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d2bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d2au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d29u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005d28u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005d27u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005d1au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d19u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d18u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d17u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005d16u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005d15u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d08u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d07u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005d06u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005d05u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005d04u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005cf8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cf7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cf6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cf5u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cf4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cf3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005ce8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005ce7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005ce6u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005ce5u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005ce4u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005cd7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cd6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cd5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cd4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cd3u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cd2u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cc5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cc4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cc3u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cc2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cc1u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005cb5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cb4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cb3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005cb2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cb1u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005cb0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005ca5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005ca4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005ca3u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005ca2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005ca1u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005c94u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c93u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c92u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c91u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005c90u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005c8fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c82u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c81u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c80u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005c7fu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005c7eu, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005c72u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c70u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c6fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c6eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005c6du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00005c6bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00005c67u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c5bu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c54u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c4du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c46u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c2au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c2bu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c2cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005c2du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005c2eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005beau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005bebu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005becu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005b86u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005b87u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005b88u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005b3bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005b3cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005b3du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005af6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005af7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005af8u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a8au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a8cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a8du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a8eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a90u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a91u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a92u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a94u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a95u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a96u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a98u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a99u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005a9au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a9bu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a9cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a9du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a9eu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a9fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005aa0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005aa1u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005aa2u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00005a84u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005a78u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a71u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a6au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a63u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a47u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a48u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a49u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a4au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005a4bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005a07u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005a08u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005a09u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000059a3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000059a4u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000059a5u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005958u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005959u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000595au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005913u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005914u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005915u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058a7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058a9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058aau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058abu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058adu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058aeu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058afu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058b1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058b2u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058b3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058b5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058b6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000058b7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058b8u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058b9u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058bau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058bbu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000058bcu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058bdu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058beu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000058bfu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000058a1u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000589au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005893u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000588cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005870u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005871u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005872u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005873u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005874u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005830u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005831u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005832u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000057ccu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000057cdu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000057ceu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00005781u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005782u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005783u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000573cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000573du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000573eu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056d0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056d2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056d3u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056d4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056d6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056d7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056d8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056dau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056dbu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056dcu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056deu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056dfu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000056e0u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056e1u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056e2u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056e3u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000056e4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056e5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056e6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056e7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056e8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000056e9u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000056cau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056c5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000056c0u, 0x00000007u, 0x0004003bu, 0x0000117eu, 0x00005680u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005681u, 0x00000007u, 0x0004003bu, 0x0000117eu, 0x00005682u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00005644u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005645u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005646u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005647u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00005648u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005649u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000560du, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000560eu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000560fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00005610u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00005611u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00005612u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000055d6u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x000055d7u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x000055d8u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000055d9u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x000055dau, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x000055dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000055b4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000055b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000558eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000558fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005590u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005591u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000556cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000556du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005546u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005547u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005548u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005549u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005513u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005515u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005516u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005517u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054e3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000054e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000054b0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000054b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000547du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000547eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000544eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000544fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005450u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005451u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005422u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005423u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005424u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005425u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053f8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000053f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053ccu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000053cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000539eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000539fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000053a0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000053a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005372u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005373u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005374u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005375u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005346u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005347u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005348u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005349u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000531cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000531du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005306u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005307u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005308u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052e4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000052e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052ceu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000052cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052a8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000052abu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000052acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005294u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005295u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005296u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000526fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005270u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005271u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005272u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005273u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000525bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000525cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000525du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005236u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005237u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005238u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005239u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000523au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051fcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051ffu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005200u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000051c4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000051c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005185u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005186u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005187u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005188u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005189u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000518au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000514eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000514fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005105u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005106u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005107u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005108u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005109u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000510au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000050c4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000050c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000507bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000507cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000507du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000507eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000507fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005080u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005036u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005037u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005038u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005039u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000503au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000503bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005012u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005013u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00005014u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00005015u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004feeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ff0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004ff1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fcau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fccu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004fcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004fa8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004fa9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f76u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004f77u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f41u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f43u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004f44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004f10u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004f11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004edau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004edcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eddu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004edeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eafu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004eb0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004eb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e83u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e84u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004e85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e56u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e58u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004e59u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e2bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004e2cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004e2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ddau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ddbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ddcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004dddu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004ddeu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00004ddfu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004de0u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004de1u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004de2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d8bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d8cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004d8du, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00004d8eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004d8fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004d90u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004d91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004d3bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004d3cu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00004d3du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004d3eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004d3fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004d40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ce6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ce7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ce8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ce9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ceau, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004cebu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00004cecu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004cedu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00004ceeu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004cefu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cacu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004caeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004cafu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004cb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c75u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004c76u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c3bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004c3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bfeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004c01u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004c02u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004be2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004be3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004be4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bbdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bbfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004bc0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004bc1u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004ba1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ba2u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004ba3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b7fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004b80u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004b60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b61u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004b62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b3du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b3eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004b3fu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004b1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004b20u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004b21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004afau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004afbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004afcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004afdu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004afeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ad6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ad7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ad8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004ad9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004ab4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004ab5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a8eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a90u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004a91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a6au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a6bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a6cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004a6du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a3au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004a3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004a07u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004a08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049d4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000049d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000499eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000499fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000049a1u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000049a2u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004982u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004983u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004984u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000496eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000496fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004970u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004934u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004935u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004936u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004937u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004938u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004939u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000493au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000493bu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004918u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004919u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000491au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004904u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004905u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004906u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048cdu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000048ceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048d0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000048d1u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x000048aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000048afu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000048b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000489au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000489bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000489cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004860u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004861u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004862u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004863u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004864u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004865u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004866u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004867u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004844u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004845u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004846u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004830u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004831u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004832u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047f9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000047fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047fcu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000047fdu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x000047dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047dbu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000047dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000047c7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000047c8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000477du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000477eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000477fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004780u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004781u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004782u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004783u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004784u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004785u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004761u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004762u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004763u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000474eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000474fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004704u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004705u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004706u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004707u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004708u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004709u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000470bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000470cu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x000046e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046e9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000046eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000046d5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000046d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000468fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004690u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004691u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004692u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004693u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x0000466fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004670u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004671u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000465bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000465cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000465du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004612u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004613u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004614u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004615u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004616u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004617u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004618u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004619u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000461au, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x000045f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045f7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000045f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045e3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000045e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045a8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000045a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000045abu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000045acu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00004589u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000458au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000458bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004575u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004576u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004577u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004538u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004539u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000453cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000453eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000453fu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x0000451cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000451du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000451eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004508u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004509u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000450au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044ceu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000044cfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044d1u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000044d2u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x000044afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000044b0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000044b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000449bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000449cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000449du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000445eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000445fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004460u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004461u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004462u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004463u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00004464u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00004465u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000443eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000443fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000441eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000441fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000043feu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000043ffu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000043deu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000043dfu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000043afu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000043b0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00004380u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00004381u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003e77u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e78u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e79u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e7au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e7bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003e7cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e7du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e7eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e7fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e80u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003e81u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e82u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e83u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e85u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e86u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e88u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e89u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e8bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e8cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e8eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e8fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003e90u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003e91u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003e92u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003e93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e94u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003e95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e97u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003e98u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e9bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003e9cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003e9du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003e9fu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ea0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea3u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ea4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003ea5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea7u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ea8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ea9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eabu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003eacu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003eadu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eafu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003eb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb3u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003eb4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb6u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eb9u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ebau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ebcu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ebdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ebeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ebfu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ec0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec2u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ec3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec5u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ec6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ec8u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ec9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ecau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ecbu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003eccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eceu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ecfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ed0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ed1u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ed2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ed4u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ed5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ed6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ed7u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ed8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003edau, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003edbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003edcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eddu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003edeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ee0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ee1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ee2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ee3u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003ee4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ee6u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ee7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ee9u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003eeau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eecu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003eedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003eefu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ef0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ef2u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ef3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ef5u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ef6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ef8u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003ef9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efbu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003efcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003efeu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003effu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f01u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f04u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f07u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f0au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f0du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f10u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f13u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f15u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f16u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f18u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f1cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f20u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f22u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f24u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f25u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f26u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f28u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f29u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f2cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f2du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f30u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f34u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f38u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f3bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f3cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f3eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f41u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f42u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f44u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f47u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f4au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f4du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f50u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f51u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f53u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f56u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f57u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f59u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f5au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f5cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f5du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f5fu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f62u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f65u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f66u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f68u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f6bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f6cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f6eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f71u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f74u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f77u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f78u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f7du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f80u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f83u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f86u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f87u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f89u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f8au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f8cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f8fu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f90u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f92u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f95u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f98u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f99u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f9bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003f9eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003f9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003fa1u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00003fa2u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00003fa3u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003fa4u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003fa5u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00003fa6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003fa7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003fa8u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fa9u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003faau, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fabu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003facu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fadu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003faeu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fafu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fb0u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fb1u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fb2u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fb3u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003fb4u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003fb5u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003fb6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003fb7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00003e19u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e1au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e1bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e1cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003e1du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003e1eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003e16u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003df5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003df6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003df7u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003df8u, 0x00000007u, 0x0004003bu, 0x00000407u, 0x00003df9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003dfau, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003dfbu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d92u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003d93u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d94u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d95u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d96u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d97u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d98u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d99u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d9au, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d9bu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00003d71u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d72u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003d73u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00003d74u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003d75u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00003d76u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d77u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d6eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d4du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d4eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d4fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d50u, 0x00000007u, 0x0004003bu, 0x00000407u, 0x00003d51u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003d52u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003d53u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003ceau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00003cebu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003cecu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003cedu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003ceeu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003cefu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003cf0u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003cf1u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003cf2u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003cf3u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00003caeu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003cafu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003cb0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003cb1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003cb2u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003cb3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003c77u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c78u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c79u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003c7au, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c7bu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c7cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00003c40u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c41u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c42u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00003c43u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c44u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00003c45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c1du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003c1eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003c1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bf8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bf9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bfau, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003bfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bd6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003bd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bb1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003bb2u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003bb3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b80u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003b81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b4du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003b4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003b1au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003b1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ae7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003ae8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ab8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003ab9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003abau, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003abbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a8du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a8eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003a8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a62u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003a63u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a36u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003a37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003a0au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003a0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039deu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000039dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000039b2u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000039b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003984u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003985u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003986u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003987u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003970u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003971u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003972u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000394bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000394cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000394du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000394eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000394fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003937u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003938u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003939u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003912u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003913u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003914u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003915u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003916u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038feu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038ffu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003900u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038dau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038dcu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000038ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038c6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000038c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000038a3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000038a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003865u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003866u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003867u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003868u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003869u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000386au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000382au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000382bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000382cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000382du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000382eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000382fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037f3u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000037f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000037b8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000037b9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000376fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003770u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003771u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003772u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003773u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003774u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000372au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000372bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000372cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000372du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000372eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000372fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036e9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000036eau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000036a4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000036a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000367cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000367du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000367eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000367fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003658u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003659u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000365au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000365bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003634u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003635u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003636u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003637u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003610u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003611u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003612u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003613u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035e0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000035e1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035abu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000035adu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000035aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003577u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003578u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003579u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000357au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000357bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003544u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003545u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003546u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003547u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003518u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003519u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000351au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000351bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034ecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034edu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034eeu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000034efu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000034c2u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000034c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003494u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003495u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003496u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003497u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003444u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003445u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003446u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003447u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00003448u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00003449u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000344au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000344bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000344cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033f6u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000033f7u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x000033f8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000033f9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000033fau, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000033fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000033a5u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000033a6u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x000033a7u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000033a8u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000033a9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000033aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003350u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003351u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003352u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003353u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003354u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00003355u, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00003356u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00003357u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00003358u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003359u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003316u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003317u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003318u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003319u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000331au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032ddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032deu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032dfu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000032e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000032a5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000032a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003268u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003269u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000326au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000326bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000326cu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x0000324cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000324du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000324eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003227u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003228u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003229u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000322au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000322bu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x0000320bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000320cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000320du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031e7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031e9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000031eau, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x000031cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031cbu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000031ccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000031a8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000031a9u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00003189u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000318au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000318bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003164u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003165u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003166u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003167u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003168u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003140u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003141u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003142u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003143u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000311cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000311du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000311eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000311fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030f8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030f9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030fau, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000030fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030d4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030d6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000030d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000030a4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000030a5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000306eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000306fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003070u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003071u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00003072u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000303bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000303cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000303du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000303eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000303fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003008u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00003009u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000300au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000300bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000300cu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002fecu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fedu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002feeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fd9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002fdau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f9fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fa0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fa1u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002fa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fa3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002fa4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002fa5u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002f82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f83u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002f84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f6fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002f70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f37u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002f38u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f3au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002f3bu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002f18u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f19u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002f1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002f05u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002f06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ecau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ecbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eccu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ecdu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002eceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ecfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ed0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002ed1u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002eaeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002eafu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002eb0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e9au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e9bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002e9cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e63u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002e64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e65u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e66u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002e67u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002e44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e45u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002e46u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002e31u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002de9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002deau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002debu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002decu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002deeu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002defu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002dcbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002dccu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002dcdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002db8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002db9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d6fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d72u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002d73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d75u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002d76u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002d52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d53u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002d54u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002d3fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002d40u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cf9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002cfau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cfcu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002cfdu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002cd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cdau, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002cdbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002cc6u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002cc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c80u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002c81u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c82u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c83u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002c84u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002c60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c61u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002c62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c4du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002c4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c10u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c12u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002c13u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c14u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002c15u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002c16u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002bf3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bf4u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002bf5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002bdfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002be0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002be1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ba2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ba3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ba4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ba5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002ba6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ba7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ba8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002ba9u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002b86u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b87u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002b88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b73u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002b74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b38u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002b39u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b3au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b3bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002b3cu, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00002b19u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b1au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002b1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002b06u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002b07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ac8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002ac9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002acau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002acbu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002accu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002acdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002aceu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002acfu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002aa8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002aa9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a88u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a89u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a68u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a69u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a48u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a49u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002a19u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002a1au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000029eau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000029ebu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000024e1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e5u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000024e6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024e9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024eau, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000024ebu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024ecu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024edu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024efu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000024f9u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000024fau, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000024fbu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000024fcu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000024fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000024feu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000024ffu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002501u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002502u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002503u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002504u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002505u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002506u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002507u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002509u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000250au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000250bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000250cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000250du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000250eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000250fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002511u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002512u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002513u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002514u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002515u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002516u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002517u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002519u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000251au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000251bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000251cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000251du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000251eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002520u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002521u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002522u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002523u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002524u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002526u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002527u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002528u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002529u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000252au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000252cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000252du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000252eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000252fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002530u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002532u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002533u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002534u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002535u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002536u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002538u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002539u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000253cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000253eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000253fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002540u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002541u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002542u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002544u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002545u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002546u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002547u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002548u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000254au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000254bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000254cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000254du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000254eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002550u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002551u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002553u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002554u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002556u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002557u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002559u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000255au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000255cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000255du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000255fu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002560u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002562u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002563u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002565u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002566u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002568u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002569u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000256bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000256cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000256eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000256fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002571u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002572u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002574u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002575u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002577u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002578u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000257au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000257bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000257du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000257eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000257fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002580u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002582u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002583u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002584u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002586u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002587u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002588u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000258au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000258bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000258cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000258eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000258fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002590u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002592u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002593u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002594u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002596u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002597u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002598u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000259au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000259bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000259cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000259eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000259fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025a0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025a2u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025a5u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025a6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025a8u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025abu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025aeu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025afu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025b1u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025b4u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025b5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025b7u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025bau, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025bdu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025c0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025c3u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025c4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025c6u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025c9u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025ccu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025cdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025cfu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025d0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025d2u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025d3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025d5u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025d8u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025d9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025dbu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025dcu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025deu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025dfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025e1u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025e2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025e4u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025e7u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025e8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025eau, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025edu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025eeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025f0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025f3u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025f4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025f6u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025f7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025f9u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025fau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025fcu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000025fdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000025ffu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002600u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002602u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002603u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002605u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002606u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002608u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00002609u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000260bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x0000260cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000260du, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000260eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000260fu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00002610u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002611u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002612u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00002613u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00002614u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00002615u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00002616u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00002617u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002618u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00002619u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000261au, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000261bu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000261cu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000261du, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000261eu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000261fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002620u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00002621u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000242fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002430u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00002431u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002432u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002433u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002434u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002435u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002436u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002424u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002421u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000241eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000241bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000023fau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000023fbu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000023fcu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000023fdu, 0x00000007u, 0x0004003bu, 0x00000407u, 0x000023feu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000023ffu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002400u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002397u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002398u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002399u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000239au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000239bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000239cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000239du, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000239eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000239fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000023a0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002376u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002377u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002378u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002379u, 0x00000007u, 0x0004003bu, 0x00000407u, 0x0000237au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000237bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000237cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002313u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002314u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002315u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002316u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002317u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002318u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002319u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000231au, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000231bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000231cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000022f2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000022f3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000022f4u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000022f5u, 0x00000007u, 0x0004003bu, 0x00000407u, 0x000022f6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000022f7u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000022f8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000228fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00002290u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002291u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002292u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002293u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002294u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002295u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002296u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002297u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00002298u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000021f7u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000021f8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000021f9u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000021fau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000021fbu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000021fcu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000021fdu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000021feu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000021ffu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002200u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002201u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00002202u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002203u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002204u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002205u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002206u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00002207u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000021ebu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000021e4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000021e5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000021abu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000021acu, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000021adu, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000021aeu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000021afu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000021b0u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x0000214au, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x0000214bu, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x0000214cu, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x0000214du, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x0000214eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000214fu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00002150u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00002151u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00002152u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00002153u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000212au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000212bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000210au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000210bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000020eau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000020ebu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000020c2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000020c3u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000020c4u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001fa0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001fa1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fa2u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001fa3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fa4u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001fa5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fa7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fa8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001faau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fabu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00001facu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00001fadu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001faeu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fafu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fb0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fb1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fb3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fb4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fb8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001fb9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001fbau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f80u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f81u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f60u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f61u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f40u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f41u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001f18u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001f19u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001f1au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001df6u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001df7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001df8u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001df9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001dfau, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001dfbu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001dfdu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001dfeu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e00u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e01u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00001e02u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00001e03u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e04u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e05u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e06u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e07u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e09u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e0au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e0du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e0eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001e0fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001e10u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001de0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001dcau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d79u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d7au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d7bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d7cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d7du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d7eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d81u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001d82u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d83u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001d84u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001d85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001d87u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001d88u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d89u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001d8au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001d8bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d8cu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001d54u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d33u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d34u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d35u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001d36u, 0x00000007u, 0x0004003bu, 0x00000407u, 0x00001d37u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001d38u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001d39u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001cd0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001cd1u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001cd2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001cd3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001cd4u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001cd5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001cd6u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001cd7u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001cd8u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001cd9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001c91u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001c92u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001c93u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001c94u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c95u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001c96u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c97u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001c98u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001c99u, 0x00000007u, 0x0004003bu, 0x0000026eu, 0x00001c70u, 0x00000007u, 0x0005003bu, 0x00000064u, 0x000018b7u, 0x00000007u, 0x00001099u, 0x0004003bu, 0x00000064u, 0x000018b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018bau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018bdu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018beu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018c0u, 0x00000007u, 0x0004003bu, 0x0000147bu, 0x000018c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018c2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018c6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018c7u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000018c8u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000018c9u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000018cau, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000018cbu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018ccu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018cdu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018ceu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018cfu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d1u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d2u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d3u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d4u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d5u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d6u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d7u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d8u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018d9u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018dau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018dbu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018dcu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018ddu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018deu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018dfu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018e0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018e1u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018e2u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018e3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018e4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018e5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018e6u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018e7u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018e8u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000018e9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018eau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000018ecu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018edu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018eeu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018efu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000018f0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018f1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018f3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018f5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000018f8u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000018f9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018fau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018fbu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000018fcu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000018fdu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000018feu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000018ffu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001900u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001901u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001903u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001904u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001905u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001906u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001907u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001908u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001909u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000190au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000190bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000190cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000190du, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000190eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000190fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001910u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001911u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001912u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001913u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001914u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001915u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001916u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001917u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001918u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001919u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000191au, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000191bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000191cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000191du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000191eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000191fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001920u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001921u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001922u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00001923u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001924u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001925u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00001926u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001927u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001928u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001929u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000192au, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000192bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000192cu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000192du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000192eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000192fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001930u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001932u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00001933u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001935u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001936u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001937u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001938u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001939u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000193au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000193bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000193cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000193du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000193eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000193fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001940u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001941u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001942u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001943u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001944u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001945u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001946u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001947u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001948u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001949u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000194au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000194bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000194cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000194du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000194eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000194fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001951u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001953u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001954u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001955u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001956u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001957u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001958u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001959u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000195au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000195bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000195cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000195du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000195eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000195fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001960u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001961u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001962u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001963u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001964u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00001966u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001968u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001969u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000196au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000196bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000196cu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000196du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000196eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x0000196fu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00001970u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001971u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001973u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001974u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001975u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001976u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001977u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001978u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000197bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000197cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000197du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000197eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000197fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001980u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00001981u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001982u, 0x00000007u, 0x0004003bu, 0x0000147bu, 0x00001825u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001832u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000183fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001848u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000184bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000184eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001858u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000185au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000185cu, 0x00000007u, 0x0004003bu, 0x00001863u, 0x00001864u, 0x00000007u, 0x0003003eu, 0x00000195u, 0x00000196u, 0x00050041u, 0x0000182cu, 0x0000182du, 0x0000182bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000182eu, 0x0000182du, 0x00060041u, 0x0000182fu, 0x00001830u, 0x00001829u, 0x0000019cu, 0x0000182eu, 0x0004003du, 0x0000147au, 0x00001831u, 0x00001830u, 0x0003003eu, 0x00001825u, 0x00001831u, 0x00050041u, 0x00000007u, 0x00001833u, 0x00001825u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00001834u, 0x00001833u, 0x00050051u, 0x00000006u, 0x00001838u, 0x00001837u, 0x00000000u, 0x00050084u, 0x00000006u, 0x00001839u, 0x00001834u, 0x00001838u, 0x00050041u, 0x0000182cu, 0x0000183bu, 0x0000183au, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000183cu, 0x0000183bu, 0x00050080u, 0x00000006u, 0x0000183du, 0x00001839u, 0x0000183cu, 0x0004007cu, 0x00000008u, 0x0000183eu, 0x0000183du, 0x0003003eu, 0x00001832u, 0x0000183eu, 0x00050041u, 0x00000007u, 0x00001840u, 0x00001825u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00001841u, 0x00001840u, 0x00050051u, 0x00000006u, 0x00001842u, 0x00001837u, 0x00000001u, 0x00050084u, 0x00000006u, 0x00001843u, 0x00001841u, 0x00001842u, 0x00050041u, 0x0000182cu, 0x00001844u, 0x0000183au, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00001845u, 0x00001844u, 0x00050080u, 0x00000006u, 0x00001846u, 0x00001843u, 0x00001845u, 0x0004007cu, 0x00000008u, 0x00001847u, 0x00001846u, 0x0003003eu, 0x0000183fu, 0x00001847u, 0x00050041u, 0x00000007u, 0x00001849u, 0x00001825u, 0x000002f8u, 0x0004003du, 0x00000006u, 0x0000184au, 0x00001849u, 0x0003003eu, 0x00001848u, 0x0000184au, 0x00050041u, 0x00000007u, 0x0000184cu, 0x00001825u, 0x000002fbu, 0x0004003du, 0x00000006u, 0x0000184du, 0x0000184cu, 0x0003003eu, 0x0000184bu, 0x0000184du, 0x00050084u, 0x00000006u, 0x00001853u, 0x0000184au, 0x00001852u, 0x0004003du, 0x00000006u, 0x00001855u, 0x00001854u, 0x00050080u, 0x00000006u, 0x00001856u, 0x00001853u, 0x00001855u, 0x0003003eu, 0x0000184eu, 0x00001856u, 0x0003003eu, 0x00001858u, 0x0000183eu, 0x0003003eu, 0x0000185au, 0x00001847u, 0x0003003eu, 0x0000185cu, 0x0000184du, 0x0003003eu, 0x000018b7u, 0x00001099u, 0x000300f7u, 0x00001983u, 0x00000000u, 0x000300fbu, 0x0000028eu, 0x00001984u, 0x000200f8u, 0x00001984u, 0x0003003eu, 0x000018bau, 0x0000184du, 0x00060041u, 0x00000215u, 0x00001c21u, 0x00000213u, 0x0000019cu, 0x0000184du, 0x0004003du, 0x0000020fu, 0x00001c22u, 0x00001c21u, 0x00050051u, 0x00000008u, 0x00001c23u, 0x00001c22u, 0x00000000u, 0x0003003eu, 0x000061bcu, 0x00001c23u, 0x00050051u, 0x00000008u, 0x00001c25u, 0x00001c22u, 0x00000001u, 0x0003003eu, 0x000061bdu, 0x00001c25u, 0x00050051u, 0x00000008u, 0x00001c27u, 0x00001c22u, 0x00000002u, 0x0003003eu, 0x000061beu, 0x00001c27u, 0x00050051u, 0x00000008u, 0x00001c29u, 0x00001c22u, 0x00000003u, 0x0003003eu, 0x000061bfu, 0x00001c29u, 0x00070050u, 0x0000001eu, 0x000061c4u, 0x00001c23u, 0x00001c25u, 0x00001c27u, 0x00001c29u, 0x0003003eu, 0x000061c5u, 0x00001c23u, 0x0003003eu, 0x000061c6u, 0x00001c25u, 0x0003003eu, 0x000061c7u, 0x00001c27u, 0x0003003eu, 0x000061c8u, 0x00001c29u, 0x0003003eu, 0x000061d2u, 0x00001c23u, 0x0003003eu, 0x000061d3u, 0x00001c25u, 0x0003003eu, 0x000061d4u, 0x00001c27u, 0x00050084u, 0x00000008u, 0x0000198au, 0x00000556u, 0x00001c25u, 0x000500b1u, 0x00000063u, 0x0000198bu, 0x00001847u, 0x0000198au, 0x000400a8u, 0x00000063u, 0x0000198cu, 0x0000198bu, 0x000300f7u, 0x0000198du, 0x00000000u, 0x000400fau, 0x0000198cu, 0x0000198eu, 0x0000198du, 0x000200f8u, 0x0000198eu, 0x00050084u, 0x00000008u, 0x00001992u, 0x00001c27u, 0x00000556u, 0x00050080u, 0x00000008u, 0x00001993u, 0x00001992u, 0x0000143cu, 0x000500adu, 0x00000063u, 0x00001994u, 0x00001847u, 0x00001993u, 0x000200f9u, 0x0000198du, 0x000200f8u, 0x0000198du, 0x000700f5u, 0x00000063u, 0x00001995u, 0x0000198bu, 0x00001984u, 0x00001994u, 0x0000198eu, 0x000300f7u, 0x00001996u, 0x00000000u, 0x000400fau, 0x00001995u, 0x00001997u, 0x00001996u, 0x000200f8u, 0x00001997u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001996u, 0x00070041u, 0x000006a8u, 0x00001999u, 0x00001448u, 0x0000019cu, 0x0000184du, 0x000001dcu, 0x0004003du, 0x0000000fu, 0x0000199au, 0x00001999u, 0x00040071u, 0x00000006u, 0x0000199bu, 0x0000199au, 0x0003003eu, 0x000018bbu, 0x0000199bu, 0x000300f7u, 0x0000199cu, 0x00000000u, 0x000400fau, 0x0000144du, 0x0000199du, 0x0000199cu, 0x000200f8u, 0x0000199du, 0x000500c7u, 0x00000006u, 0x0000199fu, 0x0000199bu, 0x00001451u, 0x000500abu, 0x00000063u, 0x000019a0u, 0x0000199fu, 0x0000028eu, 0x000300f7u, 0x000019a1u, 0x00000000u, 0x000400fau, 0x000019a0u, 0x000019a2u, 0x000019a1u, 0x000200f8u, 0x000019a2u, 0x000500c7u, 0x00000008u, 0x000019a4u, 0x0000183eu, 0x00001457u, 0x0003003eu, 0x00001858u, 0x000019a4u, 0x000500c7u, 0x00000008u, 0x000019a6u, 0x00001847u, 0x0000145bu, 0x0003003eu, 0x0000185au, 0x000019a6u, 0x000200f9u, 0x000019a1u, 0x000200f8u, 0x000019a1u, 0x000700f5u, 0x00000008u, 0x00006eb3u, 0x0000183eu, 0x0000199du, 0x000019a4u, 0x000019a2u, 0x000700f5u, 0x00000008u, 0x00006eaau, 0x00001847u, 0x0000199du, 0x000019a6u, 0x000019a2u, 0x000200f9u, 0x0000199cu, 0x000200f8u, 0x0000199cu, 0x000700f5u, 0x00000008u, 0x00006eb2u, 0x0000183eu, 0x00001996u, 0x00006eb3u, 0x000019a1u, 0x000700f5u, 0x00000008u, 0x00006ea9u, 0x00001847u, 0x00001996u, 0x00006eaau, 0x000019a1u, 0x00050084u, 0x00000008u, 0x000019a9u, 0x00000556u, 0x00001c23u, 0x00050082u, 0x00000008u, 0x000019aeu, 0x00006ea9u, 0x0000198au, 0x00050080u, 0x00000008u, 0x000019afu, 0x000019a9u, 0x000019aeu, 0x0004007cu, 0x00000006u, 0x000019b0u, 0x000019afu, 0x0003003eu, 0x000018bdu, 0x000019b0u, 0x00060041u, 0x0000022bu, 0x00001c2fu, 0x00000229u, 0x0000019cu, 0x000019b0u, 0x0004003du, 0x00000225u, 0x00001c30u, 0x00001c2fu, 0x00050051u, 0x00000009u, 0x00001c31u, 0x00001c30u, 0x00000000u, 0x0003003eu, 0x0000618du, 0x00001c31u, 0x00050051u, 0x00000009u, 0x00001c33u, 0x00001c30u, 0x00000001u, 0x0003003eu, 0x0000618eu, 0x00001c33u, 0x00050051u, 0x00000023u, 0x00001c35u, 0x00001c30u, 0x00000002u, 0x0003003eu, 0x0000618fu, 0x00001c35u, 0x00050051u, 0x00000023u, 0x00001c37u, 0x00001c30u, 0x00000003u, 0x0003003eu, 0x00006190u, 0x00001c37u, 0x00050051u, 0x00000008u, 0x00001c39u, 0x00001c30u, 0x00000004u, 0x0003003eu, 0x00006191u, 0x00001c39u, 0x00050051u, 0x00000008u, 0x00001c3bu, 0x00001c30u, 0x00000005u, 0x0003003eu, 0x00006192u, 0x00001c3bu, 0x00050051u, 0x00000008u, 0x00001c3du, 0x00001c30u, 0x00000006u, 0x0003003eu, 0x00006193u, 0x00001c3du, 0x00050051u, 0x00000012u, 0x00001c3fu, 0x00001c30u, 0x00000007u, 0x0003003eu, 0x00006194u, 0x00001c3fu, 0x00050051u, 0x00000011u, 0x00001c41u, 0x00001c30u, 0x00000008u, 0x0003003eu, 0x00006195u, 0x00001c41u, 0x000c0050u, 0x00000024u, 0x0000619fu, 0x00001c31u, 0x00001c33u, 0x00001c35u, 0x00001c37u, 0x00001c39u, 0x00001c3bu, 0x00001c3du, 0x00001c3fu, 0x00001c41u, 0x0003003eu, 0x000061a0u, 0x00001c31u, 0x0003003eu, 0x000061a1u, 0x00001c33u, 0x0003003eu, 0x000061a2u, 0x00001c35u, 0x0003003eu, 0x000061a3u, 0x00001c37u, 0x0003003eu, 0x000061a4u, 0x00001c39u, 0x0003003eu, 0x000061a5u, 0x00001c3bu, 0x0003003eu, 0x000061a6u, 0x00001c3du, 0x0003003eu, 0x000061a7u, 0x00001c3fu, 0x0003003eu, 0x000061a8u, 0x00001c41u, 0x0003003eu, 0x000061d9u, 0x00001c31u, 0x0003003eu, 0x000061dau, 0x00001c33u, 0x0003003eu, 0x000061dbu, 0x00001c35u, 0x0003003eu, 0x000061dcu, 0x00001c37u, 0x0003003eu, 0x000061ddu, 0x00001c39u, 0x0003003eu, 0x000061deu, 0x00001c3bu, 0x0003003eu, 0x000061dfu, 0x00001c3du, 0x0003003eu, 0x000061e0u, 0x00001c3fu, 0x0003003eu, 0x000061e1u, 0x00001c41u, 0x000500aau, 0x00000063u, 0x000019b4u, 0x00001c41u, 0x00000196u, 0x000300f7u, 0x000019b5u, 0x00000000u, 0x000400fau, 0x000019b4u, 0x000019b6u, 0x000019b5u, 0x000200f8u, 0x000019b6u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x000019b5u, 0x00070041u, 0x000006a8u, 0x000019b8u, 0x00001448u, 0x0000019cu, 0x0000184du, 0x000001dfu, 0x0004003du, 0x0000000fu, 0x000019b9u, 0x000019b8u, 0x00040071u, 0x00000006u, 0x000019bau, 0x000019b9u, 0x0003003eu, 0x000018beu, 0x000019bau, 0x0003003eu, 0x000018c0u, 0x0000184du, 0x00060041u, 0x0000019eu, 0x00001c47u, 0x0000019bu, 0x0000019cu, 0x0000184du, 0x0004003du, 0x00000197u, 0x00001c48u, 0x00001c47u, 0x00050051u, 0x00000009u, 0x00001c49u, 0x00001c48u, 0x00000000u, 0x0003003eu, 0x00006163u, 0x00001c49u, 0x00050051u, 0x00000009u, 0x00001c4bu, 0x00001c48u, 0x00000001u, 0x0003003eu, 0x00006164u, 0x00001c4bu, 0x00050051u, 0x00000009u, 0x00001c4du, 0x00001c48u, 0x00000002u, 0x0003003eu, 0x00006165u, 0x00001c4du, 0x00050051u, 0x00000009u, 0x00001c4fu, 0x00001c48u, 0x00000003u, 0x0003003eu, 0x00006166u, 0x00001c4fu, 0x00050051u, 0x00000009u, 0x00001c51u, 0x00001c48u, 0x00000004u, 0x0003003eu, 0x00006167u, 0x00001c51u, 0x00050051u, 0x00000009u, 0x00001c53u, 0x00001c48u, 0x00000005u, 0x0003003eu, 0x00006168u, 0x00001c53u, 0x00050051u, 0x00000009u, 0x00001c55u, 0x00001c48u, 0x00000006u, 0x0003003eu, 0x00006169u, 0x00001c55u, 0x00050051u, 0x00000009u, 0x00001c57u, 0x00001c48u, 0x00000007u, 0x0003003eu, 0x0000616au, 0x00001c57u, 0x000b0050u, 0x0000000au, 0x00006173u, 0x00001c49u, 0x00001c4bu, 0x00001c4du, 0x00001c4fu, 0x00001c51u, 0x00001c53u, 0x00001c55u, 0x00001c57u, 0x0003003eu, 0x00006174u, 0x00001c49u, 0x0003003eu, 0x00006175u, 0x00001c4bu, 0x0003003eu, 0x00006176u, 0x00001c4du, 0x0003003eu, 0x00006177u, 0x00001c4fu, 0x0003003eu, 0x00006178u, 0x00001c51u, 0x0003003eu, 0x00006179u, 0x00001c53u, 0x0003003eu, 0x0000617au, 0x00001c55u, 0x0003003eu, 0x0000617bu, 0x00001c57u, 0x0003003eu, 0x000061f6u, 0x00001c4bu, 0x0003003eu, 0x000061f7u, 0x00001c4fu, 0x0003003eu, 0x000061f8u, 0x00001c53u, 0x0003003eu, 0x000061f9u, 0x00001c57u, 0x00070041u, 0x00001484u, 0x000019beu, 0x00001482u, 0x0000019cu, 0x0000184du, 0x0000019cu, 0x0004003du, 0x00000010u, 0x000019bfu, 0x000019beu, 0x00040071u, 0x0000147au, 0x000019c0u, 0x000019bfu, 0x0003003eu, 0x000018c1u, 0x000019c0u, 0x00050041u, 0x00000007u, 0x000019c1u, 0x000018c1u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000019c2u, 0x000019c1u, 0x0003003eu, 0x000018c2u, 0x000019c2u, 0x00050041u, 0x00000007u, 0x000019c3u, 0x000018c1u, 0x000002f8u, 0x0004003du, 0x00000006u, 0x000019c4u, 0x000019c3u, 0x0003003eu, 0x000018c3u, 0x000019c4u, 0x0003003eu, 0x000018c5u, 0x000019c2u, 0x00060041u, 0x000001f7u, 0x00001c5du, 0x000001f5u, 0x0000019cu, 0x000019c2u, 0x0004003du, 0x000001f1u, 0x00001c5eu, 0x00001c5du, 0x00050051u, 0x00000010u, 0x00001c5fu, 0x00001c5eu, 0x00000000u, 0x0003003eu, 0x00006139u, 0x00001c5fu, 0x00050051u, 0x00000010u, 0x00001c61u, 0x00001c5eu, 0x00000001u, 0x0003003eu, 0x0000613au, 0x00001c61u, 0x00050051u, 0x00000010u, 0x00001c63u, 0x00001c5eu, 0x00000002u, 0x0003003eu, 0x0000613bu, 0x00001c63u, 0x00050051u, 0x00000010u, 0x00001c65u, 0x00001c5eu, 0x00000003u, 0x0003003eu, 0x0000613cu, 0x00001c65u, 0x00050051u, 0x00000006u, 0x00001c67u, 0x00001c5eu, 0x00000004u, 0x0003003eu, 0x0000613du, 0x00001c67u, 0x00050051u, 0x00000008u, 0x00001c69u, 0x00001c5eu, 0x00000005u, 0x0003003eu, 0x0000613eu, 0x00001c69u, 0x00050051u, 0x00000008u, 0x00001c6bu, 0x00001c5eu, 0x00000006u, 0x0003003eu, 0x0000613fu, 0x00001c6bu, 0x00050051u, 0x00000008u, 0x00001c6du, 0x00001c5eu, 0x00000007u, 0x0003003eu, 0x00006140u, 0x00001c6du, 0x000b0050u, 0x00000019u, 0x00006149u, 0x00001c5fu, 0x00001c61u, 0x00001c63u, 0x00001c65u, 0x00001c67u, 0x00001c69u, 0x00001c6bu, 0x00001c6du, 0x0003003eu, 0x0000614au, 0x00001c5fu, 0x0003003eu, 0x0000614bu, 0x00001c61u, 0x0003003eu, 0x0000614cu, 0x00001c63u, 0x0003003eu, 0x0000614du, 0x00001c65u, 0x0003003eu, 0x0000614eu, 0x00001c67u, 0x0003003eu, 0x0000614fu, 0x00001c69u, 0x0003003eu, 0x00006150u, 0x00001c6bu, 0x0003003eu, 0x00006151u, 0x00001c6du, 0x0003003eu, 0x000061feu, 0x00001c5fu, 0x0003003eu, 0x000061ffu, 0x00001c61u, 0x0003003eu, 0x00006200u, 0x00001c63u, 0x0003003eu, 0x00006201u, 0x00001c65u, 0x0003003eu, 0x00006202u, 0x00001c67u, 0x0003003eu, 0x00006203u, 0x00001c69u, 0x0003003eu, 0x000018c6u, 0x00001c67u, 0x0003003eu, 0x000018c7u, 0x00001c69u, 0x0003003eu, 0x000018c8u, 0x00001c5fu, 0x0003003eu, 0x000018c9u, 0x00001c61u, 0x0003003eu, 0x000018cau, 0x00001c63u, 0x0003003eu, 0x000018cbu, 0x00001c65u, 0x000300f7u, 0x000019d3u, 0x00000000u, 0x000400fau, 0x000014a6u, 0x000019d4u, 0x000019d3u, 0x000200f8u, 0x000019d4u, 0x0003003eu, 0x000018c6u, 0x000014a9u, 0x0003003eu, 0x000018c7u, 0x000014acu, 0x00050041u, 0x00000174u, 0x000019d5u, 0x000018c8u, 0x0000028eu, 0x0003003eu, 0x000019d5u, 0x000014b1u, 0x00050041u, 0x00000174u, 0x000019d6u, 0x000018c8u, 0x000002f4u, 0x0003003eu, 0x000019d6u, 0x000014b6u, 0x00050041u, 0x00000174u, 0x000019d7u, 0x000018c8u, 0x000002f8u, 0x0003003eu, 0x000019d7u, 0x000014bbu, 0x00050041u, 0x00000174u, 0x000019d8u, 0x000018c8u, 0x000002fbu, 0x0003003eu, 0x000019d8u, 0x000014c1u, 0x00050041u, 0x00000174u, 0x000019d9u, 0x000018c9u, 0x0000028eu, 0x0003003eu, 0x000019d9u, 0x000014c7u, 0x00050041u, 0x00000174u, 0x000019dau, 0x000018c9u, 0x000002f4u, 0x0003003eu, 0x000019dau, 0x000014ccu, 0x00050041u, 0x00000174u, 0x000019dbu, 0x000018c9u, 0x000002f8u, 0x0003003eu, 0x000019dbu, 0x000014d1u, 0x00050041u, 0x00000174u, 0x000019dcu, 0x000018c9u, 0x000002fbu, 0x0003003eu, 0x000019dcu, 0x000014d6u, 0x00050041u, 0x00000174u, 0x000019ddu, 0x000018cau, 0x0000028eu, 0x0003003eu, 0x000019ddu, 0x000014dcu, 0x00050041u, 0x00000174u, 0x000019deu, 0x000018cau, 0x000002f4u, 0x0003003eu, 0x000019deu, 0x000014e1u, 0x00050041u, 0x00000174u, 0x000019dfu, 0x000018cau, 0x000002f8u, 0x0003003eu, 0x000019dfu, 0x000014e6u, 0x00050041u, 0x00000174u, 0x000019e0u, 0x000018cau, 0x000002fbu, 0x0003003eu, 0x000019e0u, 0x000014ebu, 0x00050041u, 0x00000174u, 0x000019e1u, 0x000018cbu, 0x0000028eu, 0x0003003eu, 0x000019e1u, 0x000014f1u, 0x00050041u, 0x00000174u, 0x000019e2u, 0x000018cbu, 0x000002f4u, 0x0003003eu, 0x000019e2u, 0x000014f6u, 0x00050041u, 0x00000174u, 0x000019e3u, 0x000018cbu, 0x000002f8u, 0x0003003eu, 0x000019e3u, 0x000014fbu, 0x00050041u, 0x00000174u, 0x000019e4u, 0x000018cbu, 0x000002fbu, 0x0003003eu, 0x000019e4u, 0x00001500u, 0x000200f9u, 0x000019d3u, 0x000200f8u, 0x000019d3u, 0x000600a9u, 0x00000008u, 0x0000b62au, 0x000014a6u, 0x000014acu, 0x00001c69u, 0x000600a9u, 0x00000006u, 0x0000b62bu, 0x000014a6u, 0x000014a9u, 0x00001c67u, 0x000500c7u, 0x00000006u, 0x000019e6u, 0x0000b62bu, 0x00000291u, 0x000500abu, 0x00000063u, 0x000019e7u, 0x000019e6u, 0x0000028eu, 0x0003003eu, 0x000018ccu, 0x000019e7u, 0x000500c7u, 0x00000006u, 0x000019e9u, 0x0000b62bu, 0x00001451u, 0x000500abu, 0x00000063u, 0x000019eau, 0x000019e9u, 0x0000028eu, 0x0003003eu, 0x000018cdu, 0x000019eau, 0x000500c7u, 0x00000006u, 0x000019ecu, 0x0000b62bu, 0x0000150cu, 0x000500abu, 0x00000063u, 0x000019edu, 0x000019ecu, 0x0000028eu, 0x0003003eu, 0x000018ceu, 0x000019edu, 0x000500c7u, 0x00000006u, 0x000019efu, 0x0000b62bu, 0x00000345u, 0x000500abu, 0x00000063u, 0x000019f0u, 0x000019efu, 0x0000028eu, 0x0003003eu, 0x000018cfu, 0x000019f0u, 0x000500c7u, 0x00000006u, 0x000019f2u, 0x0000b62bu, 0x00001515u, 0x000500abu, 0x00000063u, 0x000019f3u, 0x000019f2u, 0x0000028eu, 0x0003003eu, 0x000018d0u, 0x000019f3u, 0x000500c7u, 0x00000006u, 0x000019f5u, 0x0000b62bu, 0x00000275u, 0x000500abu, 0x00000063u, 0x000019f6u, 0x000019f5u, 0x0000028eu, 0x0003003eu, 0x000018d1u, 0x000019f6u, 0x000500c7u, 0x00000006u, 0x000019f8u, 0x0000b62bu, 0x0000151eu, 0x000500abu, 0x00000063u, 0x000019f9u, 0x000019f8u, 0x0000028eu, 0x0003003eu, 0x000018d2u, 0x000019f9u, 0x000500c7u, 0x00000006u, 0x000019fbu, 0x0000b62bu, 0x00000775u, 0x000500abu, 0x00000063u, 0x000019fcu, 0x000019fbu, 0x0000028eu, 0x0003003eu, 0x000018d3u, 0x000019fcu, 0x000500c7u, 0x00000006u, 0x000019feu, 0x0000b62bu, 0x0000076du, 0x000500abu, 0x00000063u, 0x000019ffu, 0x000019feu, 0x0000028eu, 0x0003003eu, 0x000018d4u, 0x000019ffu, 0x000500c7u, 0x00000006u, 0x00001a01u, 0x0000b62bu, 0x00000692u, 0x000500abu, 0x00000063u, 0x00001a02u, 0x00001a01u, 0x0000028eu, 0x0003003eu, 0x000018d5u, 0x00001a02u, 0x000500c7u, 0x00000006u, 0x00001a04u, 0x0000b62bu, 0x0000152fu, 0x000500abu, 0x00000063u, 0x00001a05u, 0x00001a04u, 0x0000028eu, 0x0003003eu, 0x000018d6u, 0x00001a05u, 0x000500c7u, 0x00000006u, 0x00001a07u, 0x0000b62bu, 0x000002f4u, 0x000500abu, 0x00000063u, 0x00001a08u, 0x00001a07u, 0x0000028eu, 0x0003003eu, 0x000018d7u, 0x00001a08u, 0x000500c7u, 0x00000006u, 0x00001a0au, 0x0000b62bu, 0x0000069fu, 0x000500abu, 0x00000063u, 0x00001a0bu, 0x00001a0au, 0x0000028eu, 0x0003003eu, 0x000018d8u, 0x00001a0bu, 0x000500c7u, 0x00000006u, 0x00001a0du, 0x0000b62bu, 0x0000153cu, 0x000500abu, 0x00000063u, 0x00001a0eu, 0x00001a0du, 0x0000028eu, 0x0003003eu, 0x000018d9u, 0x00001a0eu, 0x000500c7u, 0x00000006u, 0x00001a10u, 0x0000b62bu, 0x00001541u, 0x000500abu, 0x00000063u, 0x00001a11u, 0x00001a10u, 0x0000028eu, 0x0003003eu, 0x000018dau, 0x00001a11u, 0x000500c7u, 0x00000006u, 0x00001a13u, 0x0000b62bu, 0x00001546u, 0x000500abu, 0x00000063u, 0x00001a14u, 0x00001a13u, 0x0000028eu, 0x0003003eu, 0x000018dbu, 0x00001a14u, 0x000500c7u, 0x00000006u, 0x00001a16u, 0x0000b62bu, 0x0000154bu, 0x000500abu, 0x00000063u, 0x00001a17u, 0x00001a16u, 0x0000028eu, 0x0003003eu, 0x000018dcu, 0x00001a17u, 0x000500c7u, 0x00000006u, 0x00001a19u, 0x0000b62bu, 0x00001550u, 0x000500abu, 0x00000063u, 0x00001a1au, 0x00001a19u, 0x0000028eu, 0x0003003eu, 0x000018ddu, 0x00001a1au, 0x000500c7u, 0x00000006u, 0x00001a1cu, 0x0000b62bu, 0x00001555u, 0x000500abu, 0x00000063u, 0x00001a1du, 0x00001a1cu, 0x0000028eu, 0x0003003eu, 0x000018deu, 0x00001a1du, 0x000500c7u, 0x00000006u, 0x00001a1fu, 0x0000b62bu, 0x0000155au, 0x000500abu, 0x00000063u, 0x00001a20u, 0x00001a1fu, 0x0000028eu, 0x0003003eu, 0x000018dfu, 0x00001a20u, 0x000500c7u, 0x00000006u, 0x00001a22u, 0x0000b62bu, 0x0000155fu, 0x000500abu, 0x00000063u, 0x00001a23u, 0x00001a22u, 0x0000028eu, 0x0003003eu, 0x000018e0u, 0x00001a23u, 0x000500c7u, 0x00000006u, 0x00001a25u, 0x0000b62bu, 0x00001564u, 0x000500abu, 0x00000063u, 0x00001a26u, 0x00001a25u, 0x0000028eu, 0x0003003eu, 0x000018e1u, 0x00001a26u, 0x000500c7u, 0x00000006u, 0x00001a28u, 0x0000b62bu, 0x00001569u, 0x000500abu, 0x00000063u, 0x00001a29u, 0x00001a28u, 0x0000028eu, 0x0003003eu, 0x000018e2u, 0x00001a29u, 0x000500c7u, 0x00000006u, 0x00001a2bu, 0x0000b62bu, 0x0000156eu, 0x000500abu, 0x00000063u, 0x00001a2cu, 0x00001a2bu, 0x0000028eu, 0x0003003eu, 0x000018e3u, 0x00001a2cu, 0x000500c7u, 0x00000006u, 0x00001a2eu, 0x0000b62bu, 0x00001572u, 0x000500abu, 0x00000063u, 0x00001a2fu, 0x00001a2eu, 0x0000028eu, 0x000300f7u, 0x00001a30u, 0x00000000u, 0x000400fau, 0x00001a2fu, 0x00001a31u, 0x00001a30u, 0x000200f8u, 0x00001a31u, 0x0004007cu, 0x00000006u, 0x00001a33u, 0x00006eb2u, 0x0004007cu, 0x00000006u, 0x00001a35u, 0x00006ea9u, 0x00060041u, 0x0000157cu, 0x00001a37u, 0x000004e8u, 0x0000019cu, 0x000001acu, 0x0004003du, 0x00000006u, 0x00001a38u, 0x00001a37u, 0x00050080u, 0x00000006u, 0x00001a39u, 0x0000184du, 0x00001a38u, 0x0003003eu, 0x000018e4u, 0x00001a33u, 0x0003003eu, 0x000018e5u, 0x00001a35u, 0x0003003eu, 0x000018e6u, 0x00001a39u, 0x00060050u, 0x0000026du, 0x00001c74u, 0x00001a33u, 0x00001a35u, 0x00001a39u, 0x0003003eu, 0x00001c70u, 0x00001c74u, 0x0004003du, 0x0000026du, 0x00001c75u, 0x00001c70u, 0x000500c2u, 0x0000026du, 0x00001c77u, 0x00001c75u, 0x0000b612u, 0x0004003du, 0x0000026du, 0x00001c78u, 0x00001c70u, 0x0008004fu, 0x0000026du, 0x00001c79u, 0x00001c78u, 0x00001c78u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000026du, 0x00001c7au, 0x00001c77u, 0x00001c79u, 0x00050084u, 0x0000026du, 0x00001c7cu, 0x00001c7au, 0x0000b613u, 0x0003003eu, 0x00001c70u, 0x00001c7cu, 0x0004003du, 0x0000026du, 0x00001c7du, 0x00001c70u, 0x000500c2u, 0x0000026du, 0x00001c7fu, 0x00001c7du, 0x0000b612u, 0x0004003du, 0x0000026du, 0x00001c80u, 0x00001c70u, 0x0008004fu, 0x0000026du, 0x00001c81u, 0x00001c80u, 0x00001c80u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000026du, 0x00001c82u, 0x00001c7fu, 0x00001c81u, 0x00050084u, 0x0000026du, 0x00001c84u, 0x00001c82u, 0x0000b613u, 0x0003003eu, 0x00001c70u, 0x00001c84u, 0x0004003du, 0x0000026du, 0x00001c85u, 0x00001c70u, 0x000500c2u, 0x0000026du, 0x00001c87u, 0x00001c85u, 0x0000b612u, 0x0004003du, 0x0000026du, 0x00001c88u, 0x00001c70u, 0x0008004fu, 0x0000026du, 0x00001c89u, 0x00001c88u, 0x00001c88u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000026du, 0x00001c8au, 0x00001c87u, 0x00001c89u, 0x00050084u, 0x0000026du, 0x00001c8cu, 0x00001c8au, 0x0000b613u, 0x0003003eu, 0x00001c70u, 0x00001c8cu, 0x00050041u, 0x00000007u, 0x00001c8du, 0x00001c70u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00001c8eu, 0x00001c8du, 0x000500c2u, 0x00000006u, 0x00001c8fu, 0x00001c8eu, 0x00000291u, 0x00040071u, 0x00000011u, 0x00001c90u, 0x00001c8fu, 0x0003003eu, 0x00000195u, 0x00001c90u, 0x000200f9u, 0x00001a30u, 0x000200f8u, 0x00001a30u, 0x000500c7u, 0x00000006u, 0x00001a3cu, 0x0000199bu, 0x000002f4u, 0x000500abu, 0x00000063u, 0x00001a3du, 0x00001a3cu, 0x0000028eu, 0x0003003eu, 0x000018e7u, 0x00001a3du, 0x000300f7u, 0x00001a3fu, 0x00000000u, 0x000400fau, 0x00001a0eu, 0x00001a40u, 0x00001a41u, 0x000200f8u, 0x00001a41u, 0x000300f7u, 0x00001a81u, 0x00000000u, 0x000400fau, 0x00001a0bu, 0x00001a82u, 0x00001a81u, 0x000200f8u, 0x00001a82u, 0x0003003eu, 0x00006d0bu, 0x000002ecu, 0x000500afu, 0x00000063u, 0x00001a87u, 0x00006eb2u, 0x00001c3bu, 0x000300f7u, 0x00001a88u, 0x00000000u, 0x000400fau, 0x00001a87u, 0x00001a89u, 0x00001a88u, 0x000200f8u, 0x00001a89u, 0x000500b3u, 0x00000063u, 0x00001a8du, 0x00006eb2u, 0x00001c3du, 0x000200f9u, 0x00001a88u, 0x000200f8u, 0x00001a88u, 0x000700f5u, 0x00000063u, 0x00001a8eu, 0x00001a87u, 0x00001a82u, 0x00001a8du, 0x00001a89u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001a8eu, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001a81u, 0x000200f9u, 0x00001a3fu, 0x000200f8u, 0x00001a40u, 0x000500afu, 0x00000063u, 0x00001a45u, 0x00006eb2u, 0x00001c3bu, 0x000300f7u, 0x00001a46u, 0x00000000u, 0x000400fau, 0x00001a45u, 0x00001a47u, 0x00001a46u, 0x000200f8u, 0x00001a47u, 0x000500b3u, 0x00000063u, 0x00001a4bu, 0x00006eb2u, 0x00001c3du, 0x000200f9u, 0x00001a46u, 0x000200f8u, 0x00001a46u, 0x000700f5u, 0x00000063u, 0x00001a4cu, 0x00001a45u, 0x00001a40u, 0x00001a4bu, 0x00001a47u, 0x0003003eu, 0x000018e8u, 0x00001a4cu, 0x000400a8u, 0x00000063u, 0x00001a4eu, 0x00001a4cu, 0x000300f7u, 0x00001a4fu, 0x00000000u, 0x000400fau, 0x00001a4eu, 0x00001a50u, 0x00001a4fu, 0x000200f8u, 0x00001a50u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001a4fu, 0x0003003eu, 0x0000620au, 0x00001c33u, 0x0003003eu, 0x0000620cu, 0x00001c3bu, 0x0003003eu, 0x0000620du, 0x00001c3du, 0x0003003eu, 0x000018ecu, 0x00001c53u, 0x0003003eu, 0x000018edu, 0x00006eb2u, 0x0003003eu, 0x000018eeu, 0x000019f6u, 0x0003003eu, 0x000018efu, 0x00001a3du, 0x000300f7u, 0x00001c9bu, 0x00000000u, 0x000400fau, 0x00001a3du, 0x00001c9cu, 0x00001c9du, 0x000200f8u, 0x00001c9du, 0x00050082u, 0x00000008u, 0x00001ca5u, 0x00001c3du, 0x00006eb2u, 0x0003003eu, 0x00001c92u, 0x00001ca5u, 0x000200f9u, 0x00001c9bu, 0x000200f8u, 0x00001c9cu, 0x00050082u, 0x00000008u, 0x00001ca1u, 0x00006eb2u, 0x00001c3bu, 0x0003003eu, 0x00001c92u, 0x00001ca1u, 0x000200f9u, 0x00001c9bu, 0x000200f8u, 0x00001c9bu, 0x000700f5u, 0x00000008u, 0x0000a97eu, 0x00001ca1u, 0x00001c9cu, 0x00001ca5u, 0x00001c9du, 0x0003003eu, 0x00001c91u, 0x0000a97eu, 0x000500c3u, 0x00000008u, 0x00001ca8u, 0x0000a97eu, 0x00000495u, 0x0003003eu, 0x00001c91u, 0x00001ca8u, 0x00060041u, 0x000004e9u, 0x00001caau, 0x000004e8u, 0x0000019cu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x00001cabu, 0x00001caau, 0x000500c7u, 0x00000008u, 0x00001cacu, 0x00001ca8u, 0x00001cabu, 0x0003003eu, 0x00001c93u, 0x00001cacu, 0x00050082u, 0x00000008u, 0x00001cafu, 0x00001ca8u, 0x00001cacu, 0x0003003eu, 0x000018f1u, 0x00001cafu, 0x00060041u, 0x000004e9u, 0x00001cb1u, 0x000004e8u, 0x0000019cu, 0x0000019cu, 0x0004003du, 0x00000008u, 0x00001cb2u, 0x00001cb1u, 0x000500c3u, 0x00000008u, 0x00001cb3u, 0x00001ca8u, 0x00001cb2u, 0x000600a9u, 0x00000008u, 0x00001cb5u, 0x00001a3du, 0x000001a6u, 0x000004f6u, 0x00050084u, 0x00000008u, 0x00001cb6u, 0x00001cb3u, 0x00001cb5u, 0x0003003eu, 0x00001c94u, 0x00001cb6u, 0x0008004fu, 0x0000005du, 0x00001cb9u, 0x00001c33u, 0x00001c33u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x0000005du, 0x00001cbbu, 0x00001c53u, 0x00001c53u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00001cbdu, 0x00001cbbu, 0x0000b614u, 0x00060050u, 0x0000005du, 0x00001cbfu, 0x00001cb6u, 0x00001cb6u, 0x00001cb6u, 0x00050084u, 0x0000005du, 0x00001cc0u, 0x00001cbdu, 0x00001cbfu, 0x00050080u, 0x0000005du, 0x00001cc1u, 0x00001cb9u, 0x00001cc0u, 0x0003003eu, 0x00001c95u, 0x00001cc1u, 0x000300f7u, 0x00001cc3u, 0x00000000u, 0x000400fau, 0x000019f6u, 0x00001cc4u, 0x00001cc5u, 0x000200f8u, 0x00001cc5u, 0x000500c3u, 0x0000005du, 0x00001cceu, 0x00001cc1u, 0x0000b615u, 0x0003003eu, 0x00001c99u, 0x00001cceu, 0x0007004fu, 0x00000058u, 0x00001d56u, 0x00001cceu, 0x00001cceu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001d54u, 0x00001d56u, 0x0003003eu, 0x000018f0u, 0x00001d56u, 0x000200f9u, 0x00001cc3u, 0x000200f8u, 0x00001cc4u, 0x000500c3u, 0x0000005du, 0x00001cc8u, 0x00001cc1u, 0x0000b615u, 0x0003003eu, 0x00001c97u, 0x00001cc8u, 0x00050041u, 0x00000040u, 0x00001cdau, 0x00001c97u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00001cdbu, 0x00001cdau, 0x0003003eu, 0x00001cd0u, 0x00001cdbu, 0x000500b3u, 0x00000063u, 0x00001cddu, 0x00001cdbu, 0x0000019cu, 0x0003003eu, 0x00001cd1u, 0x00001cddu, 0x000500c7u, 0x00000008u, 0x00001cdfu, 0x00001cdbu, 0x00000424u, 0x0003003eu, 0x00001cd0u, 0x00001cdfu, 0x0003003eu, 0x00001cd3u, 0x00001cdfu, 0x0006000cu, 0x00000008u, 0x00001d3bu, 0x00000001u, 0x0000004au, 0x00001cdfu, 0x00050082u, 0x00000008u, 0x00001d3cu, 0x000001ecu, 0x00001d3bu, 0x0007000cu, 0x00000008u, 0x00001d3du, 0x00000001u, 0x00000027u, 0x00001d3cu, 0x000001ecu, 0x0003003eu, 0x00001d33u, 0x00001d3du, 0x000500c4u, 0x00000008u, 0x00001d40u, 0x00001cdfu, 0x00001d3du, 0x000500c7u, 0x00000008u, 0x00001d41u, 0x00001d40u, 0x0000033fu, 0x0003003eu, 0x00001d34u, 0x00001d41u, 0x000500c7u, 0x00000008u, 0x00001d43u, 0x00001d41u, 0x00000311u, 0x0003003eu, 0x00001d35u, 0x00001d43u, 0x000500c3u, 0x00000008u, 0x00001d45u, 0x00001d41u, 0x000001d9u, 0x0003003eu, 0x00001d37u, 0x00000404u, 0x00050041u, 0x0000011eu, 0x00001d46u, 0x00001d37u, 0x00001d45u, 0x0004003du, 0x0000011du, 0x00001d47u, 0x00001d46u, 0x00040072u, 0x00000058u, 0x00001d48u, 0x00001d47u, 0x0003003eu, 0x00001d36u, 0x00001d48u, 0x00050041u, 0x00000040u, 0x00001d49u, 0x00001d36u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001d4au, 0x00001d49u, 0x00050084u, 0x00000008u, 0x00001d4cu, 0x00001d4au, 0x00001d43u, 0x000500c3u, 0x00000008u, 0x00001d4du, 0x00001d4cu, 0x000001dfu, 0x00050041u, 0x00000040u, 0x00001d4eu, 0x00001d36u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001d4fu, 0x00001d4eu, 0x00050080u, 0x00000008u, 0x00001d50u, 0x00001d4du, 0x00001d4fu, 0x0003003eu, 0x00001d38u, 0x00001d50u, 0x00050050u, 0x00000058u, 0x00001d53u, 0x00001d50u, 0x00001d3du, 0x0003003eu, 0x00001d39u, 0x00001d53u, 0x0003003eu, 0x00001cd2u, 0x00001d53u, 0x00050041u, 0x00000040u, 0x00001ce2u, 0x00001cd2u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001ce3u, 0x00001ce2u, 0x0003003eu, 0x00001cd4u, 0x00001ce3u, 0x0004003du, 0x0000005du, 0x00001ce4u, 0x00001c97u, 0x0007004fu, 0x00000058u, 0x00001ce5u, 0x00001ce4u, 0x00001ce4u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x00001ce6u, 0x00001cd2u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001ce7u, 0x00001ce6u, 0x00050050u, 0x00000058u, 0x00001ce8u, 0x00001ce7u, 0x00001ce7u, 0x00050084u, 0x00000058u, 0x00001ce9u, 0x00001ce5u, 0x00001ce8u, 0x0003003eu, 0x00001cd5u, 0x00001ce9u, 0x000500c3u, 0x00000008u, 0x00001cebu, 0x00000437u, 0x00001ce3u, 0x0004007eu, 0x00000008u, 0x00001cecu, 0x00001cebu, 0x000500c7u, 0x00000008u, 0x00001cedu, 0x00000436u, 0x00001cecu, 0x0003003eu, 0x00001cd6u, 0x00001cedu, 0x0004003du, 0x00000058u, 0x00001ceeu, 0x00001cd5u, 0x00050050u, 0x00000058u, 0x00001cf0u, 0x00001cedu, 0x00001cedu, 0x000500c7u, 0x00000058u, 0x00001cf1u, 0x00001ceeu, 0x00001cf0u, 0x0003003eu, 0x00001cd7u, 0x00001cf1u, 0x000500abu, 0x00000063u, 0x00001cf3u, 0x00001ce3u, 0x000001ecu, 0x000300f7u, 0x00001cf4u, 0x00000000u, 0x000400fau, 0x00001cf3u, 0x00001cf5u, 0x00001cf6u, 0x000200f8u, 0x00001cf6u, 0x0004003du, 0x00000058u, 0x00001cfcu, 0x00001cd5u, 0x000500c4u, 0x00000058u, 0x00001cfeu, 0x00001cfcu, 0x0000b619u, 0x0003003eu, 0x00001cd8u, 0x00001cfeu, 0x000200f9u, 0x00001cf4u, 0x000200f8u, 0x00001cf5u, 0x0004003du, 0x00000058u, 0x00001cf7u, 0x00001cd5u, 0x00050082u, 0x00000008u, 0x00001cf9u, 0x000001e9u, 0x00001ce3u, 0x00050050u, 0x00000058u, 0x00001cfau, 0x00001cf9u, 0x00001cf9u, 0x000500c3u, 0x00000058u, 0x00001cfbu, 0x00001cf7u, 0x00001cfau, 0x0003003eu, 0x00001cd5u, 0x00001cfbu, 0x0003003eu, 0x00001cd8u, 0x00001cfbu, 0x000200f9u, 0x00001cf4u, 0x000200f8u, 0x00001cf4u, 0x0004003du, 0x00000058u, 0x00001cffu, 0x00001cd7u, 0x000500abu, 0x00000451u, 0x00001d00u, 0x00001cffu, 0x00000450u, 0x0004009au, 0x00000063u, 0x00001d01u, 0x00001d00u, 0x000300f7u, 0x00001d02u, 0x00000000u, 0x000400fau, 0x00001d01u, 0x00001d03u, 0x00001d02u, 0x000200f8u, 0x00001d03u, 0x00050041u, 0x00000040u, 0x00001d04u, 0x00001cd7u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001d05u, 0x00001d04u, 0x000500abu, 0x00000063u, 0x00001d07u, 0x00001d05u, 0x00001cedu, 0x000300f7u, 0x00001d08u, 0x00000000u, 0x000400fau, 0x00001d07u, 0x00001d09u, 0x00001d08u, 0x000200f8u, 0x00001d09u, 0x0004003du, 0x00000008u, 0x00001d0bu, 0x00001d04u, 0x000500abu, 0x00000063u, 0x00001d0cu, 0x00001d0bu, 0x0000019cu, 0x000200f9u, 0x00001d08u, 0x000200f8u, 0x00001d08u, 0x000700f5u, 0x00000063u, 0x00001d0du, 0x00001d07u, 0x00001d03u, 0x00001d0cu, 0x00001d09u, 0x000300f7u, 0x00001d0eu, 0x00000000u, 0x000400fau, 0x00001d0du, 0x00001d0fu, 0x00001d0eu, 0x000200f8u, 0x00001d0fu, 0x00050041u, 0x00000040u, 0x00001d10u, 0x00001cd5u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001d11u, 0x00001d10u, 0x000500c7u, 0x00000008u, 0x00001d12u, 0x00001d11u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00001d13u, 0x00001d12u, 0x0000019cu, 0x000300f7u, 0x00001d14u, 0x00000000u, 0x000400fau, 0x00001d13u, 0x00001d15u, 0x00001d16u, 0x000200f8u, 0x00001d16u, 0x00050041u, 0x00000040u, 0x00001d18u, 0x00001cd8u, 0x0000028eu, 0x0003003eu, 0x00001d18u, 0x0000046au, 0x000200f9u, 0x00001d14u, 0x000200f8u, 0x00001d15u, 0x00050041u, 0x00000040u, 0x00001d17u, 0x00001cd8u, 0x0000028eu, 0x0003003eu, 0x00001d17u, 0x00000424u, 0x000200f9u, 0x00001d14u, 0x000200f8u, 0x00001d14u, 0x0003003eu, 0x00001c98u, 0x0000046cu, 0x000200f9u, 0x00001d0eu, 0x000200f8u, 0x00001d0eu, 0x000600a9u, 0x00000063u, 0x0000b62cu, 0x00001d0du, 0x0000046cu, 0x00008213u, 0x00050041u, 0x00000040u, 0x00001d19u, 0x00001cd7u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001d1au, 0x00001d19u, 0x000500abu, 0x00000063u, 0x00001d1cu, 0x00001d1au, 0x00001cedu, 0x000300f7u, 0x00001d1du, 0x00000000u, 0x000400fau, 0x00001d1cu, 0x00001d1eu, 0x00001d1du, 0x000200f8u, 0x00001d1eu, 0x0004003du, 0x00000008u, 0x00001d20u, 0x00001d19u, 0x000500abu, 0x00000063u, 0x00001d21u, 0x00001d20u, 0x0000019cu, 0x000200f9u, 0x00001d1du, 0x000200f8u, 0x00001d1du, 0x000700f5u, 0x00000063u, 0x00001d22u, 0x00001d1cu, 0x00001d0eu, 0x00001d21u, 0x00001d1eu, 0x000300f7u, 0x00001d23u, 0x00000000u, 0x000400fau, 0x00001d22u, 0x00001d24u, 0x00001d23u, 0x000200f8u, 0x00001d24u, 0x00050041u, 0x00000040u, 0x00001d25u, 0x00001cd5u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001d26u, 0x00001d25u, 0x000500c7u, 0x00000008u, 0x00001d27u, 0x00001d26u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00001d28u, 0x00001d27u, 0x0000019cu, 0x000300f7u, 0x00001d29u, 0x00000000u, 0x000400fau, 0x00001d28u, 0x00001d2au, 0x00001d2bu, 0x000200f8u, 0x00001d2bu, 0x00050041u, 0x00000040u, 0x00001d2du, 0x00001cd8u, 0x000002f4u, 0x0003003eu, 0x00001d2du, 0x0000046au, 0x000200f9u, 0x00001d29u, 0x000200f8u, 0x00001d2au, 0x00050041u, 0x00000040u, 0x00001d2cu, 0x00001cd8u, 0x000002f4u, 0x0003003eu, 0x00001d2cu, 0x00000424u, 0x000200f9u, 0x00001d29u, 0x000200f8u, 0x00001d29u, 0x0003003eu, 0x00001c98u, 0x0000046cu, 0x000200f9u, 0x00001d23u, 0x000200f8u, 0x00001d23u, 0x000600a9u, 0x00000063u, 0x0000b62du, 0x00001d22u, 0x0000046cu, 0x0000b62cu, 0x000200f9u, 0x00001d02u, 0x000200f8u, 0x00001d02u, 0x000700f5u, 0x00000063u, 0x0000a997u, 0x00008213u, 0x00001cf4u, 0x0000b62du, 0x00001d23u, 0x000300f7u, 0x00001d2fu, 0x00000000u, 0x000400fau, 0x00001cddu, 0x00001d30u, 0x00001d2fu, 0x000200f8u, 0x00001d30u, 0x0003003eu, 0x00001cd8u, 0x00000485u, 0x0003003eu, 0x00001c98u, 0x0000046cu, 0x000200f9u, 0x00001d2fu, 0x000200f8u, 0x00001d2fu, 0x000600a9u, 0x00000063u, 0x0000b62eu, 0x00001cddu, 0x0000046cu, 0x0000a997u, 0x0004003du, 0x00000058u, 0x00001d31u, 0x00001cd8u, 0x0008000cu, 0x00000058u, 0x00001d32u, 0x00000001u, 0x0000002du, 0x00001d31u, 0x00000488u, 0x0000048au, 0x0003003eu, 0x00001cd9u, 0x00001d32u, 0x0003003eu, 0x00001c96u, 0x0000b62eu, 0x0003003eu, 0x000018f0u, 0x00001d32u, 0x000200f9u, 0x00001cc3u, 0x000200f8u, 0x00001cc3u, 0x000700f5u, 0x00000058u, 0x0000a99du, 0x00001d32u, 0x00001d2fu, 0x00001d56u, 0x00001cc5u, 0x0003003eu, 0x000018e9u, 0x0000a99du, 0x0003003eu, 0x000018eau, 0x00001cafu, 0x000500c7u, 0x00000006u, 0x00001a5bu, 0x000019bau, 0x00001108u, 0x0003003eu, 0x000018f2u, 0x00001a5bu, 0x00080041u, 0x000006a8u, 0x00001a5eu, 0x00001482u, 0x0000019cu, 0x0000184du, 0x000001a9u, 0x00001a5bu, 0x0004003du, 0x0000000fu, 0x00001a5fu, 0x00001a5eu, 0x00040071u, 0x00000006u, 0x00001a60u, 0x00001a5fu, 0x0003003eu, 0x000018f3u, 0x00001a60u, 0x0003003eu, 0x000018f5u, 0x00001a60u, 0x00060041u, 0x0000024au, 0x00001d5au, 0x00000248u, 0x0000019cu, 0x00001a60u, 0x0004003du, 0x00000244u, 0x00001d5bu, 0x00001d5au, 0x00050051u, 0x00000006u, 0x00001d5cu, 0x00001d5bu, 0x00000000u, 0x0003003eu, 0x000060f1u, 0x00001d5cu, 0x00050051u, 0x00000006u, 0x00001d5eu, 0x00001d5bu, 0x00000001u, 0x0003003eu, 0x000060f2u, 0x00001d5eu, 0x00050051u, 0x00000006u, 0x00001d60u, 0x00001d5bu, 0x00000002u, 0x0003003eu, 0x000060f3u, 0x00001d60u, 0x00050051u, 0x00000006u, 0x00001d62u, 0x00001d5bu, 0x00000003u, 0x0003003eu, 0x000060f4u, 0x00001d62u, 0x00050051u, 0x00000006u, 0x00001d64u, 0x00001d5bu, 0x00000004u, 0x0003003eu, 0x000060f5u, 0x00001d64u, 0x00050051u, 0x00000006u, 0x00001d66u, 0x00001d5bu, 0x00000005u, 0x0003003eu, 0x000060f6u, 0x00001d66u, 0x00050051u, 0x0000000fu, 0x00001d68u, 0x00001d5bu, 0x00000006u, 0x0003003eu, 0x000060f7u, 0x00001d68u, 0x00050051u, 0x0000000fu, 0x00001d6au, 0x00001d5bu, 0x00000007u, 0x0003003eu, 0x000060f8u, 0x00001d6au, 0x00050051u, 0x0000000fu, 0x00001d6cu, 0x00001d5bu, 0x00000008u, 0x0003003eu, 0x000060f9u, 0x00001d6cu, 0x00050051u, 0x0000000fu, 0x00001d6eu, 0x00001d5bu, 0x00000009u, 0x0003003eu, 0x000060fau, 0x00001d6eu, 0x00050051u, 0x0000000fu, 0x00001d70u, 0x00001d5bu, 0x0000000au, 0x0003003eu, 0x000060fbu, 0x00001d70u, 0x00050051u, 0x0000000fu, 0x00001d72u, 0x00001d5bu, 0x0000000bu, 0x0003003eu, 0x000060fcu, 0x00001d72u, 0x00050051u, 0x0000000fu, 0x00001d74u, 0x00001d5bu, 0x0000000cu, 0x0003003eu, 0x000060fdu, 0x00001d74u, 0x00050051u, 0x0000000fu, 0x00001d76u, 0x00001d5bu, 0x0000000du, 0x0003003eu, 0x000060feu, 0x00001d76u, 0x00110050u, 0x00000029u, 0x0000610du, 0x00001d5cu, 0x00001d5eu, 0x00001d60u, 0x00001d62u, 0x00001d64u, 0x00001d66u, 0x00001d68u, 0x00001d6au, 0x00001d6cu, 0x00001d6eu, 0x00001d70u, 0x00001d72u, 0x00001d74u, 0x00001d76u, 0x0003003eu, 0x0000610eu, 0x00001d5cu, 0x0003003eu, 0x0000610fu, 0x00001d5eu, 0x0003003eu, 0x00006110u, 0x00001d60u, 0x0003003eu, 0x00006111u, 0x00001d62u, 0x0003003eu, 0x00006112u, 0x00001d64u, 0x0003003eu, 0x00006113u, 0x00001d66u, 0x0003003eu, 0x00006114u, 0x00001d68u, 0x0003003eu, 0x00006115u, 0x00001d6au, 0x0003003eu, 0x00006116u, 0x00001d6cu, 0x0003003eu, 0x00006117u, 0x00001d6eu, 0x0003003eu, 0x00006118u, 0x00001d70u, 0x0003003eu, 0x00006119u, 0x00001d72u, 0x0003003eu, 0x0000611au, 0x00001d74u, 0x0003003eu, 0x0000611bu, 0x00001d76u, 0x0003003eu, 0x00006212u, 0x00001d5cu, 0x0003003eu, 0x00006213u, 0x00001d5eu, 0x0003003eu, 0x00006214u, 0x00001d60u, 0x0003003eu, 0x00006215u, 0x00001d62u, 0x0003003eu, 0x00006216u, 0x00001d64u, 0x0003003eu, 0x00006217u, 0x00001d66u, 0x0003003eu, 0x00006218u, 0x00001d68u, 0x0003003eu, 0x00006219u, 0x00001d6au, 0x0003003eu, 0x0000621au, 0x00001d6cu, 0x0003003eu, 0x0000621bu, 0x00001d6eu, 0x0003003eu, 0x0000621cu, 0x00001d70u, 0x0003003eu, 0x0000621du, 0x00001d72u, 0x0003003eu, 0x0000621eu, 0x00001d74u, 0x0003003eu, 0x0000621fu, 0x00001d76u, 0x000300f7u, 0x00001a63u, 0x00000000u, 0x000400fau, 0x000015bcu, 0x00001a64u, 0x00001a63u, 0x000200f8u, 0x00001a64u, 0x0003003eu, 0x00006218u, 0x000015c2u, 0x0003003eu, 0x00006219u, 0x000015c7u, 0x000200f9u, 0x00001a63u, 0x000200f8u, 0x00001a63u, 0x000600a9u, 0x0000000fu, 0x0000b62fu, 0x000015bcu, 0x000015c2u, 0x00001d68u, 0x000600a9u, 0x0000000fu, 0x0000b630u, 0x000015bcu, 0x000015c7u, 0x00001d6au, 0x00110050u, 0x00000029u, 0x0000623cu, 0x00001d5cu, 0x00001d5eu, 0x00001d60u, 0x00001d62u, 0x00001d64u, 0x00001d66u, 0x0000b62fu, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00001d70u, 0x00001d72u, 0x00001d74u, 0x00001d76u, 0x0003003eu, 0x0000623du, 0x00001d5cu, 0x0003003eu, 0x0000623eu, 0x00001d60u, 0x0003003eu, 0x0000623fu, 0x00001d64u, 0x0003003eu, 0x00006240u, 0x00001d66u, 0x0003003eu, 0x00006241u, 0x0000b630u, 0x0003003eu, 0x00006242u, 0x00001d6cu, 0x0003003eu, 0x00006243u, 0x00001d6eu, 0x0003003eu, 0x00006244u, 0x00001d70u, 0x0003003eu, 0x00006245u, 0x00001d72u, 0x0003003eu, 0x00006246u, 0x00001d74u, 0x0003003eu, 0x00006247u, 0x00001d76u, 0x0003003eu, 0x000018f8u, 0x000019c4u, 0x0003003eu, 0x000018f9u, 0x0000a99du, 0x0003003eu, 0x000018fau, 0x00001cafu, 0x0003003eu, 0x000018fbu, 0x000019e7u, 0x0003003eu, 0x000018fcu, 0x000019eau, 0x0004007cu, 0x00000008u, 0x00001d8fu, 0x00001d5cu, 0x00040071u, 0x00000006u, 0x00001d92u, 0x00001d70u, 0x0004007cu, 0x00000008u, 0x00001d93u, 0x00001d92u, 0x00050041u, 0x00000040u, 0x00001d94u, 0x000018f9u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001d95u, 0x00001d94u, 0x0003003eu, 0x00001d79u, 0x00001d95u, 0x0003003eu, 0x00001d7au, 0x00001d8fu, 0x0003003eu, 0x00001d7bu, 0x00001d93u, 0x0008000cu, 0x00000008u, 0x00001dccu, 0x00000001u, 0x0000002du, 0x00001d95u, 0x0000046au, 0x00000424u, 0x0003003eu, 0x00001d79u, 0x00001dccu, 0x000500b1u, 0x00000063u, 0x00001dceu, 0x00001d93u, 0x000001e2u, 0x000300f7u, 0x00001dcfu, 0x00000000u, 0x000400fau, 0x00001dceu, 0x00001dd0u, 0x00001dd1u, 0x000200f8u, 0x00001dd1u, 0x00050082u, 0x00000008u, 0x00001dd6u, 0x00000977u, 0x00001d93u, 0x000500c4u, 0x00000008u, 0x00001dd8u, 0x00001dccu, 0x00001dd6u, 0x0003003eu, 0x00001d79u, 0x00001dd8u, 0x000500c3u, 0x00000008u, 0x00001ddau, 0x00001dd8u, 0x00000509u, 0x0003003eu, 0x00001d79u, 0x00001ddau, 0x000200f9u, 0x00001dcfu, 0x000200f8u, 0x00001dd0u, 0x000500c3u, 0x00000008u, 0x00001dd4u, 0x00001dccu, 0x00001d93u, 0x0003003eu, 0x00001d79u, 0x00001dd4u, 0x000200f9u, 0x00001dcfu, 0x000200f8u, 0x00001dcfu, 0x000700f5u, 0x00000008u, 0x0000a9f8u, 0x00001dd4u, 0x00001dd0u, 0x00001ddau, 0x00001dd1u, 0x000500c4u, 0x00000008u, 0x00001ddcu, 0x00001d8fu, 0x000001acu, 0x00050082u, 0x00000008u, 0x00001ddeu, 0x0000a9f8u, 0x00001ddcu, 0x0003003eu, 0x00001d79u, 0x00001ddeu, 0x0003003eu, 0x00001dcau, 0x00001ddeu, 0x0003003eu, 0x00001d94u, 0x00001ddeu, 0x0004007cu, 0x00000008u, 0x00001d9au, 0x00001d60u, 0x00040071u, 0x00000006u, 0x00001d9du, 0x00001d74u, 0x0004007cu, 0x00000008u, 0x00001d9eu, 0x00001d9du, 0x00050041u, 0x00000040u, 0x00001d9fu, 0x000018f9u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001da0u, 0x00001d9fu, 0x0003003eu, 0x00001d7cu, 0x00001da0u, 0x0003003eu, 0x00001d7du, 0x00001d9au, 0x0003003eu, 0x00001d7eu, 0x00001d9eu, 0x0008000cu, 0x00000008u, 0x00001de2u, 0x00000001u, 0x0000002du, 0x00001da0u, 0x0000046au, 0x00000424u, 0x0003003eu, 0x00001d7cu, 0x00001de2u, 0x000500b1u, 0x00000063u, 0x00001de4u, 0x00001d9eu, 0x000001e2u, 0x000300f7u, 0x00001de5u, 0x00000000u, 0x000400fau, 0x00001de4u, 0x00001de6u, 0x00001de7u, 0x000200f8u, 0x00001de7u, 0x00050082u, 0x00000008u, 0x00001decu, 0x00000977u, 0x00001d9eu, 0x000500c4u, 0x00000008u, 0x00001deeu, 0x00001de2u, 0x00001decu, 0x0003003eu, 0x00001d7cu, 0x00001deeu, 0x000500c3u, 0x00000008u, 0x00001df0u, 0x00001deeu, 0x00000509u, 0x0003003eu, 0x00001d7cu, 0x00001df0u, 0x000200f9u, 0x00001de5u, 0x000200f8u, 0x00001de6u, 0x000500c3u, 0x00000008u, 0x00001deau, 0x00001de2u, 0x00001d9eu, 0x0003003eu, 0x00001d7cu, 0x00001deau, 0x000200f9u, 0x00001de5u, 0x000200f8u, 0x00001de5u, 0x000700f5u, 0x00000008u, 0x0000a9fcu, 0x00001deau, 0x00001de6u, 0x00001df0u, 0x00001de7u, 0x000500c4u, 0x00000008u, 0x00001df2u, 0x00001d9au, 0x000001acu, 0x00050082u, 0x00000008u, 0x00001df4u, 0x0000a9fcu, 0x00001df2u, 0x0003003eu, 0x00001d7cu, 0x00001df4u, 0x0003003eu, 0x00001de0u, 0x00001df4u, 0x0003003eu, 0x00001d9fu, 0x00001df4u, 0x0004003du, 0x00000058u, 0x00001da3u, 0x000018f9u, 0x000500c3u, 0x00000058u, 0x00001da5u, 0x00001da3u, 0x0000b61bu, 0x0003003eu, 0x000018f9u, 0x00001da5u, 0x00060041u, 0x000004e9u, 0x00001da6u, 0x000004e8u, 0x0000019cu, 0x000001a9u, 0x0004003du, 0x00000008u, 0x00001da7u, 0x00001da6u, 0x000500aau, 0x00000063u, 0x00001da8u, 0x00001da7u, 0x0000019cu, 0x000300f7u, 0x00001da9u, 0x00000000u, 0x000400fau, 0x00001da8u, 0x00001daau, 0x00001dabu, 0x000200f8u, 0x00001dabu, 0x000500aau, 0x00000063u, 0x00001daeu, 0x00001da7u, 0x000001a6u, 0x000300f7u, 0x00001dafu, 0x00000000u, 0x000400fau, 0x00001daeu, 0x00001db0u, 0x00001db1u, 0x000200f8u, 0x00001db1u, 0x00110050u, 0x00000029u, 0x0000626au, 0x00001d5cu, 0x00005d36u, 0x00001d60u, 0x00005d36u, 0x00001d64u, 0x00001d66u, 0x00005d37u, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00001d70u, 0x00001d72u, 0x00001d74u, 0x00001d76u, 0x0003003eu, 0x000060c3u, 0x00001d64u, 0x0003003eu, 0x000060c4u, 0x00001d66u, 0x0003003eu, 0x000060c5u, 0x0000b630u, 0x0003003eu, 0x000060c6u, 0x00001d6cu, 0x0003003eu, 0x000060c7u, 0x00001d6eu, 0x0003003eu, 0x000060c8u, 0x00001d72u, 0x0003003eu, 0x000060c9u, 0x00001d76u, 0x0003003eu, 0x00001d87u, 0x000019c4u, 0x0004003du, 0x00000058u, 0x00001dc4u, 0x000018f9u, 0x0003003eu, 0x00001d88u, 0x00001dc4u, 0x0003003eu, 0x00001d89u, 0x00001cafu, 0x0003003eu, 0x00001d8au, 0x000019e7u, 0x0003003eu, 0x00001d8bu, 0x000019eau, 0x000500b1u, 0x00000063u, 0x00001fbcu, 0x00001cafu, 0x000001a9u, 0x0003003eu, 0x00001fa0u, 0x00001fbcu, 0x000300f7u, 0x00001fbeu, 0x00000000u, 0x000400fau, 0x00001fbcu, 0x00001fbfu, 0x00001fbeu, 0x000200f8u, 0x00001fbfu, 0x00040071u, 0x00000006u, 0x00001fc2u, 0x0000b630u, 0x0004007cu, 0x00000008u, 0x00001fc3u, 0x00001fc2u, 0x000500abu, 0x00000063u, 0x00001fc4u, 0x00001fc3u, 0x000001a9u, 0x000200f9u, 0x00001fbeu, 0x000200f8u, 0x00001fbeu, 0x000700f5u, 0x00000063u, 0x00001fc5u, 0x00001fbcu, 0x00001db1u, 0x00001fc4u, 0x00001fbfu, 0x000400a8u, 0x00000063u, 0x00001fc7u, 0x000019e7u, 0x000500a7u, 0x00000063u, 0x00001fc8u, 0x00001fc5u, 0x00001fc7u, 0x0003003eu, 0x00001fa1u, 0x00001fc8u, 0x00040071u, 0x00000006u, 0x00001fcbu, 0x0000b630u, 0x0004007cu, 0x00000008u, 0x00001fccu, 0x00001fcbu, 0x0007000cu, 0x00000008u, 0x00001fcdu, 0x00000001u, 0x00000027u, 0x00001fccu, 0x000001a9u, 0x0003003eu, 0x00001fa2u, 0x00001fcdu, 0x000500aau, 0x00000063u, 0x00001fd2u, 0x00001fccu, 0x000001acu, 0x0003003eu, 0x00001fa3u, 0x00001fd2u, 0x000500a6u, 0x00000063u, 0x00001fd5u, 0x00001fd2u, 0x000019e7u, 0x000600a9u, 0x00000008u, 0x00001fd6u, 0x00001fd5u, 0x0000098eu, 0x000009d6u, 0x0003003eu, 0x00001fa4u, 0x00001fd6u, 0x000300f7u, 0x00001fd8u, 0x00000000u, 0x000400fau, 0x00001fc8u, 0x00001fd9u, 0x00001fdau, 0x000200f8u, 0x00001fdau, 0x00050041u, 0x00000040u, 0x0000205eu, 0x00001d88u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x0000205fu, 0x0000205eu, 0x00050080u, 0x00000008u, 0x00002060u, 0x0000205fu, 0x00001cafu, 0x0003003eu, 0x0000205eu, 0x00002060u, 0x00110050u, 0x00000029u, 0x000060e8u, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00001d64u, 0x00001d66u, 0x00005d37u, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00005d37u, 0x00001d72u, 0x00005d37u, 0x00001d76u, 0x0003003eu, 0x0000607du, 0x00001d6eu, 0x0003003eu, 0x0000607eu, 0x00001d76u, 0x0004003du, 0x00000008u, 0x00002064u, 0x0000205eu, 0x0003003eu, 0x00001fb3u, 0x00002064u, 0x00040071u, 0x00000006u, 0x0000210eu, 0x00001d6eu, 0x0004007cu, 0x00000008u, 0x0000210fu, 0x0000210eu, 0x000500abu, 0x00000063u, 0x00002110u, 0x0000210fu, 0x0000019cu, 0x000300f7u, 0x00002111u, 0x00000000u, 0x000400fau, 0x00002110u, 0x00002112u, 0x00002111u, 0x000200f8u, 0x00002112u, 0x000500c4u, 0x00000008u, 0x00002115u, 0x000001a6u, 0x00001d6eu, 0x0003003eu, 0x0000210au, 0x00002115u, 0x00040071u, 0x00000006u, 0x00002118u, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x00002119u, 0x00002118u, 0x000500c7u, 0x00000008u, 0x0000211au, 0x00002119u, 0x000001a9u, 0x000500abu, 0x00000063u, 0x0000211bu, 0x0000211au, 0x0000019cu, 0x000300f7u, 0x0000211cu, 0x00000000u, 0x000400fau, 0x0000211bu, 0x0000211du, 0x0000211cu, 0x000200f8u, 0x0000211du, 0x000500c7u, 0x00000008u, 0x00002120u, 0x00002064u, 0x00002115u, 0x00050082u, 0x00000008u, 0x00002121u, 0x00002120u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002122u, 0x00000001u, 0x0000002au, 0x00002121u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002124u, 0x00002064u, 0x00002122u, 0x0003003eu, 0x00001fb3u, 0x00002124u, 0x000200f9u, 0x0000211cu, 0x000200f8u, 0x0000211cu, 0x000700f5u, 0x00000008u, 0x0000aa23u, 0x00002064u, 0x00002112u, 0x00002124u, 0x0000211du, 0x00050082u, 0x00000008u, 0x00002126u, 0x00002115u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002128u, 0x0000aa23u, 0x00002126u, 0x0003003eu, 0x00001fb3u, 0x00002128u, 0x000200f9u, 0x00002111u, 0x000200f8u, 0x00002111u, 0x000700f5u, 0x00000008u, 0x0000aa24u, 0x00002064u, 0x00001fdau, 0x00002128u, 0x0000211cu, 0x0003003eu, 0x0000210bu, 0x0000aa24u, 0x0003003eu, 0x00001fb1u, 0x0000aa24u, 0x0003003eu, 0x00006081u, 0x00001d72u, 0x0003003eu, 0x00006082u, 0x00001d76u, 0x00050041u, 0x00000040u, 0x00002067u, 0x00001d88u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002068u, 0x00002067u, 0x0003003eu, 0x00001fb6u, 0x00002068u, 0x00040071u, 0x00000006u, 0x0000212eu, 0x00001d72u, 0x0004007cu, 0x00000008u, 0x0000212fu, 0x0000212eu, 0x000500abu, 0x00000063u, 0x00002130u, 0x0000212fu, 0x0000019cu, 0x000300f7u, 0x00002131u, 0x00000000u, 0x000400fau, 0x00002130u, 0x00002132u, 0x00002131u, 0x000200f8u, 0x00002132u, 0x000500c4u, 0x00000008u, 0x00002135u, 0x000001a6u, 0x00001d72u, 0x0003003eu, 0x0000212au, 0x00002135u, 0x00040071u, 0x00000006u, 0x00002138u, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x00002139u, 0x00002138u, 0x000500c7u, 0x00000008u, 0x0000213au, 0x00002139u, 0x000001d9u, 0x000500abu, 0x00000063u, 0x0000213bu, 0x0000213au, 0x0000019cu, 0x000300f7u, 0x0000213cu, 0x00000000u, 0x000400fau, 0x0000213bu, 0x0000213du, 0x0000213cu, 0x000200f8u, 0x0000213du, 0x000500c7u, 0x00000008u, 0x00002140u, 0x00002068u, 0x00002135u, 0x00050082u, 0x00000008u, 0x00002141u, 0x00002140u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002142u, 0x00000001u, 0x0000002au, 0x00002141u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002144u, 0x00002068u, 0x00002142u, 0x0003003eu, 0x00001fb6u, 0x00002144u, 0x000200f9u, 0x0000213cu, 0x000200f8u, 0x0000213cu, 0x000700f5u, 0x00000008u, 0x0000aa34u, 0x00002068u, 0x00002132u, 0x00002144u, 0x0000213du, 0x00050082u, 0x00000008u, 0x00002146u, 0x00002135u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002148u, 0x0000aa34u, 0x00002146u, 0x0003003eu, 0x00001fb6u, 0x00002148u, 0x000200f9u, 0x00002131u, 0x000200f8u, 0x00002131u, 0x000700f5u, 0x00000008u, 0x0000aa35u, 0x00002068u, 0x00002111u, 0x00002148u, 0x0000213cu, 0x0003003eu, 0x0000212bu, 0x0000aa35u, 0x0003003eu, 0x00001fb4u, 0x0000aa35u, 0x0004007cu, 0x00000006u, 0x0000206fu, 0x0000aa35u, 0x00050084u, 0x00000006u, 0x00002070u, 0x00001d66u, 0x0000206fu, 0x00050080u, 0x00000006u, 0x00002071u, 0x00001d64u, 0x00002070u, 0x0003003eu, 0x00001fb7u, 0x00002071u, 0x00050084u, 0x00000006u, 0x00002073u, 0x00002071u, 0x000002f8u, 0x000500c4u, 0x00000008u, 0x00002076u, 0x0000aa24u, 0x00001fcdu, 0x0004007cu, 0x00000006u, 0x00002077u, 0x00002076u, 0x00050080u, 0x00000006u, 0x00002078u, 0x00002073u, 0x00002077u, 0x000500c7u, 0x00000006u, 0x00002079u, 0x00002078u, 0x00000a02u, 0x0003003eu, 0x00001fb8u, 0x00002079u, 0x000500c7u, 0x00000006u, 0x0000207cu, 0x0000206fu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000207du, 0x0000207cu, 0x00000275u, 0x000500c6u, 0x00000006u, 0x0000207fu, 0x00002079u, 0x0000207du, 0x0003003eu, 0x00001fb8u, 0x0000207fu, 0x000500c2u, 0x00000006u, 0x00002081u, 0x0000207fu, 0x000002f8u, 0x0003003eu, 0x00001fb9u, 0x00002081u, 0x0004007cu, 0x00000006u, 0x00002083u, 0x00001fd6u, 0x000500c7u, 0x00000006u, 0x00002085u, 0x00002081u, 0x00002083u, 0x0003003eu, 0x00001fb9u, 0x00002085u, 0x000500c6u, 0x00000006u, 0x00002088u, 0x00002085u, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00002089u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002088u, 0x0004003du, 0x00000011u, 0x0000208au, 0x00002089u, 0x00040071u, 0x00000006u, 0x0000208bu, 0x0000208au, 0x0004007cu, 0x00000008u, 0x0000208cu, 0x0000208bu, 0x0003003eu, 0x00001fb0u, 0x0000208cu, 0x000300f7u, 0x0000208eu, 0x00000000u, 0x000400fau, 0x000019e7u, 0x0000208fu, 0x0000208eu, 0x000200f8u, 0x0000208fu, 0x000500aau, 0x00000063u, 0x00002094u, 0x00001fccu, 0x0000019cu, 0x000300f7u, 0x00002095u, 0x00000000u, 0x000400fau, 0x00002094u, 0x00002096u, 0x00002097u, 0x000200f8u, 0x00002097u, 0x000500c7u, 0x00000006u, 0x000020adu, 0x0000207fu, 0x000002f8u, 0x00050084u, 0x00000006u, 0x000020aeu, 0x00000692u, 0x000020adu, 0x00050082u, 0x00000006u, 0x000020afu, 0x00000275u, 0x000020aeu, 0x000500c3u, 0x00000008u, 0x000020b1u, 0x0000208cu, 0x000020afu, 0x0003003eu, 0x00001fb0u, 0x000020b1u, 0x000500c7u, 0x00000008u, 0x000020b3u, 0x000020b1u, 0x00000311u, 0x0003003eu, 0x00001fb0u, 0x000020b3u, 0x000500c4u, 0x00000008u, 0x000020b5u, 0x000020b3u, 0x000001a9u, 0x0003003eu, 0x00001fb0u, 0x000020b5u, 0x00050080u, 0x00000008u, 0x000020b8u, 0x000020b5u, 0x00001cafu, 0x0003003eu, 0x00001fb0u, 0x000020b8u, 0x000200f9u, 0x00002095u, 0x000200f8u, 0x00002096u, 0x000500c7u, 0x00000006u, 0x00002099u, 0x0000207fu, 0x000002fbu, 0x00050084u, 0x00000006u, 0x0000209au, 0x00000692u, 0x00002099u, 0x00050082u, 0x00000006u, 0x0000209bu, 0x00000ab0u, 0x0000209au, 0x000500c3u, 0x00000008u, 0x0000209du, 0x0000208cu, 0x0000209bu, 0x0003003eu, 0x00001fb0u, 0x0000209du, 0x000500c7u, 0x00000008u, 0x0000209fu, 0x0000209du, 0x00000a5bu, 0x0003003eu, 0x00001fb0u, 0x0000209fu, 0x000500c4u, 0x0000000fu, 0x000020a2u, 0x00001d6cu, 0x000001afu, 0x00040071u, 0x00000006u, 0x000020a3u, 0x000020a2u, 0x0004007cu, 0x00000008u, 0x000020a4u, 0x000020a3u, 0x000500c5u, 0x00000008u, 0x000020a6u, 0x0000209fu, 0x000020a4u, 0x0003003eu, 0x00001fb0u, 0x000020a6u, 0x000500c4u, 0x00000008u, 0x000020a8u, 0x000020a6u, 0x000001a9u, 0x0003003eu, 0x00001fb0u, 0x000020a8u, 0x00050080u, 0x00000008u, 0x000020abu, 0x000020a8u, 0x00001cafu, 0x0003003eu, 0x00001fb0u, 0x000020abu, 0x000200f9u, 0x00002095u, 0x000200f8u, 0x00002095u, 0x000700f5u, 0x00000008u, 0x0000aa56u, 0x000020abu, 0x00002096u, 0x000020b8u, 0x00002097u, 0x000500c5u, 0x00000008u, 0x000020bbu, 0x0000aa56u, 0x00000ad5u, 0x000500c6u, 0x00000008u, 0x000020bcu, 0x000020bbu, 0x000001a6u, 0x00080041u, 0x00000778u, 0x000020bdu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000020bcu, 0x0004003du, 0x00000011u, 0x000020beu, 0x000020bdu, 0x00040071u, 0x00000006u, 0x000020bfu, 0x000020beu, 0x0004007cu, 0x00000008u, 0x000020c0u, 0x000020bfu, 0x0003003eu, 0x00001fb0u, 0x000020c0u, 0x000200f9u, 0x0000208eu, 0x000200f8u, 0x0000208eu, 0x000700f5u, 0x00000008u, 0x0000aa84u, 0x0000208cu, 0x00002131u, 0x000020c0u, 0x00002095u, 0x000200f9u, 0x00001fd8u, 0x000200f8u, 0x00001fd9u, 0x00050084u, 0x00000008u, 0x00001fdcu, 0x000001a9u, 0x00001cafu, 0x00050041u, 0x00000040u, 0x00001fddu, 0x00001d88u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001fdeu, 0x00001fddu, 0x00050080u, 0x00000008u, 0x00001fdfu, 0x00001fdeu, 0x00001fdcu, 0x0003003eu, 0x00001fddu, 0x00001fdfu, 0x00110050u, 0x00000029u, 0x000060d8u, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00001d64u, 0x00001d66u, 0x00005d37u, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00005d37u, 0x00001d72u, 0x00005d37u, 0x00001d76u, 0x0003003eu, 0x00006075u, 0x00001d6eu, 0x0003003eu, 0x00006076u, 0x00001d76u, 0x0004003du, 0x00000008u, 0x00001fe3u, 0x00001fddu, 0x0003003eu, 0x00001fa7u, 0x00001fe3u, 0x00050050u, 0x00000058u, 0x000020c6u, 0x00001fe3u, 0x00001fe3u, 0x00050080u, 0x00000058u, 0x000020c7u, 0x000020c6u, 0x000005fau, 0x0003003eu, 0x000020c2u, 0x000020c7u, 0x00040071u, 0x00000006u, 0x000020cau, 0x00001d6eu, 0x0004007cu, 0x00000008u, 0x000020cbu, 0x000020cau, 0x000500abu, 0x00000063u, 0x000020ccu, 0x000020cbu, 0x0000019cu, 0x000300f7u, 0x000020cdu, 0x00000000u, 0x000400fau, 0x000020ccu, 0x000020ceu, 0x000020cdu, 0x000200f8u, 0x000020ceu, 0x000500c4u, 0x00000008u, 0x000020d1u, 0x000001a6u, 0x00001d6eu, 0x0003003eu, 0x000020c3u, 0x000020d1u, 0x00040071u, 0x00000006u, 0x000020d4u, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x000020d5u, 0x000020d4u, 0x000500c7u, 0x00000008u, 0x000020d6u, 0x000020d5u, 0x000001a9u, 0x000500abu, 0x00000063u, 0x000020d7u, 0x000020d6u, 0x0000019cu, 0x000300f7u, 0x000020d8u, 0x00000000u, 0x000400fau, 0x000020d7u, 0x000020d9u, 0x000020d8u, 0x000200f8u, 0x000020d9u, 0x00050050u, 0x00000058u, 0x000020dcu, 0x000020d1u, 0x000020d1u, 0x000500c7u, 0x00000058u, 0x000020ddu, 0x000020c7u, 0x000020dcu, 0x00050082u, 0x00000058u, 0x000020dfu, 0x000020ddu, 0x0000b619u, 0x0007000cu, 0x00000058u, 0x000020e1u, 0x00000001u, 0x0000002au, 0x000020dfu, 0x00000450u, 0x000500c6u, 0x00000058u, 0x000020e3u, 0x000020c7u, 0x000020e1u, 0x0003003eu, 0x000020c2u, 0x000020e3u, 0x000200f9u, 0x000020d8u, 0x000200f8u, 0x000020d8u, 0x000700f5u, 0x00000058u, 0x0000aa58u, 0x000020c7u, 0x000020ceu, 0x000020e3u, 0x000020d9u, 0x00050082u, 0x00000008u, 0x000020e5u, 0x000020d1u, 0x000001a6u, 0x00050050u, 0x00000058u, 0x000020e7u, 0x000020e5u, 0x000020e5u, 0x000500c7u, 0x00000058u, 0x000020e8u, 0x0000aa58u, 0x000020e7u, 0x0003003eu, 0x000020c2u, 0x000020e8u, 0x000200f9u, 0x000020cdu, 0x000200f8u, 0x000020cdu, 0x000700f5u, 0x00000058u, 0x0000aa59u, 0x000020c7u, 0x00001fd9u, 0x000020e8u, 0x000020d8u, 0x0003003eu, 0x000020c4u, 0x0000aa59u, 0x0003003eu, 0x00001fa5u, 0x0000aa59u, 0x0003003eu, 0x00006079u, 0x00001d72u, 0x0003003eu, 0x0000607au, 0x00001d76u, 0x00050041u, 0x00000040u, 0x00001fe6u, 0x00001d88u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001fe7u, 0x00001fe6u, 0x0003003eu, 0x00001faau, 0x00001fe7u, 0x00040071u, 0x00000006u, 0x000020eeu, 0x00001d72u, 0x0004007cu, 0x00000008u, 0x000020efu, 0x000020eeu, 0x000500abu, 0x00000063u, 0x000020f0u, 0x000020efu, 0x0000019cu, 0x000300f7u, 0x000020f1u, 0x00000000u, 0x000400fau, 0x000020f0u, 0x000020f2u, 0x000020f1u, 0x000200f8u, 0x000020f2u, 0x000500c4u, 0x00000008u, 0x000020f5u, 0x000001a6u, 0x00001d72u, 0x0003003eu, 0x000020eau, 0x000020f5u, 0x00040071u, 0x00000006u, 0x000020f8u, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x000020f9u, 0x000020f8u, 0x000500c7u, 0x00000008u, 0x000020fau, 0x000020f9u, 0x000001d9u, 0x000500abu, 0x00000063u, 0x000020fbu, 0x000020fau, 0x0000019cu, 0x000300f7u, 0x000020fcu, 0x00000000u, 0x000400fau, 0x000020fbu, 0x000020fdu, 0x000020fcu, 0x000200f8u, 0x000020fdu, 0x000500c7u, 0x00000008u, 0x00002100u, 0x00001fe7u, 0x000020f5u, 0x00050082u, 0x00000008u, 0x00002101u, 0x00002100u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002102u, 0x00000001u, 0x0000002au, 0x00002101u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002104u, 0x00001fe7u, 0x00002102u, 0x0003003eu, 0x00001faau, 0x00002104u, 0x000200f9u, 0x000020fcu, 0x000200f8u, 0x000020fcu, 0x000700f5u, 0x00000008u, 0x0000aa69u, 0x00001fe7u, 0x000020f2u, 0x00002104u, 0x000020fdu, 0x00050082u, 0x00000008u, 0x00002106u, 0x000020f5u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002108u, 0x0000aa69u, 0x00002106u, 0x0003003eu, 0x00001faau, 0x00002108u, 0x000200f9u, 0x000020f1u, 0x000200f8u, 0x000020f1u, 0x000700f5u, 0x00000008u, 0x0000aa6au, 0x00001fe7u, 0x000020cdu, 0x00002108u, 0x000020fcu, 0x0003003eu, 0x000020ebu, 0x0000aa6au, 0x0003003eu, 0x00001fa8u, 0x0000aa6au, 0x0004007cu, 0x00000006u, 0x00001feeu, 0x0000aa6au, 0x00050084u, 0x00000006u, 0x00001fefu, 0x00001d66u, 0x00001feeu, 0x00050080u, 0x00000006u, 0x00001ff0u, 0x00001d64u, 0x00001fefu, 0x0003003eu, 0x00001fabu, 0x00001ff0u, 0x00050084u, 0x00000006u, 0x00001ff2u, 0x00001ff0u, 0x000002f8u, 0x00050050u, 0x00000058u, 0x00001ff5u, 0x00001fcdu, 0x00001fcdu, 0x000500c4u, 0x00000058u, 0x00001ff6u, 0x0000aa59u, 0x00001ff5u, 0x0004007cu, 0x000000abu, 0x00001ff7u, 0x00001ff6u, 0x00050050u, 0x000000abu, 0x00001ff8u, 0x00001ff2u, 0x00001ff2u, 0x00050080u, 0x000000abu, 0x00001ff9u, 0x00001ff8u, 0x00001ff7u, 0x000500c7u, 0x000000abu, 0x00001ffbu, 0x00001ff9u, 0x0000b61du, 0x0003003eu, 0x00001facu, 0x00001ffbu, 0x000500c7u, 0x00000006u, 0x00001ffeu, 0x00001feeu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00001fffu, 0x00001ffeu, 0x00000275u, 0x0004003du, 0x000000abu, 0x00002000u, 0x00001facu, 0x00050050u, 0x000000abu, 0x00002001u, 0x00001fffu, 0x00001fffu, 0x000500c6u, 0x000000abu, 0x00002002u, 0x00002000u, 0x00002001u, 0x0003003eu, 0x00001facu, 0x00002002u, 0x0004003du, 0x000000abu, 0x00002003u, 0x00001facu, 0x000500c2u, 0x000000abu, 0x00002005u, 0x00002003u, 0x0000b61eu, 0x0003003eu, 0x00001fadu, 0x00002005u, 0x0004007cu, 0x00000006u, 0x00002007u, 0x00001fd6u, 0x0004003du, 0x000000abu, 0x00002008u, 0x00001fadu, 0x00050050u, 0x000000abu, 0x00002009u, 0x00002007u, 0x00002007u, 0x000500c7u, 0x000000abu, 0x0000200au, 0x00002008u, 0x00002009u, 0x0003003eu, 0x00001fadu, 0x0000200au, 0x00050041u, 0x00000007u, 0x0000200cu, 0x00001fadu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000200du, 0x0000200cu, 0x000500c6u, 0x00000006u, 0x0000200eu, 0x0000200du, 0x000002f4u, 0x00080041u, 0x00000778u, 0x0000200fu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000200eu, 0x0004003du, 0x00000011u, 0x00002010u, 0x0000200fu, 0x00040071u, 0x00000006u, 0x00002011u, 0x00002010u, 0x0004007cu, 0x00000008u, 0x00002012u, 0x00002011u, 0x0003003eu, 0x00001faeu, 0x00002012u, 0x00050041u, 0x00000007u, 0x00002014u, 0x00001fadu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002015u, 0x00002014u, 0x000500c6u, 0x00000006u, 0x00002016u, 0x00002015u, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00002017u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002016u, 0x0004003du, 0x00000011u, 0x00002018u, 0x00002017u, 0x00040071u, 0x00000006u, 0x00002019u, 0x00002018u, 0x0004007cu, 0x00000008u, 0x0000201au, 0x00002019u, 0x0003003eu, 0x00001fafu, 0x0000201au, 0x000500aau, 0x00000063u, 0x0000201fu, 0x00001fccu, 0x000001a6u, 0x000300f7u, 0x00002020u, 0x00000000u, 0x000400fau, 0x0000201fu, 0x00002021u, 0x00002022u, 0x000200f8u, 0x00002022u, 0x000500aau, 0x00000063u, 0x0000203bu, 0x00001fccu, 0x0000019cu, 0x000300f7u, 0x0000203cu, 0x00000000u, 0x000400fau, 0x0000203bu, 0x0000203du, 0x0000203eu, 0x000200f8u, 0x0000203eu, 0x000500c3u, 0x00000008u, 0x00002056u, 0x00002012u, 0x000001d9u, 0x0003003eu, 0x00001faeu, 0x00002056u, 0x000500c3u, 0x00000008u, 0x00002058u, 0x0000201au, 0x000001d9u, 0x0003003eu, 0x00001fafu, 0x00002058u, 0x000200f9u, 0x0000203cu, 0x000200f8u, 0x0000203du, 0x00050041u, 0x00000007u, 0x0000203fu, 0x00001facu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002040u, 0x0000203fu, 0x000500c7u, 0x00000006u, 0x00002041u, 0x00002040u, 0x000002fbu, 0x0004007cu, 0x00000008u, 0x00002042u, 0x00002041u, 0x00050084u, 0x00000008u, 0x00002043u, 0x000001afu, 0x00002042u, 0x00050082u, 0x00000008u, 0x00002044u, 0x000001e6u, 0x00002043u, 0x000500c3u, 0x00000008u, 0x00002046u, 0x00002012u, 0x00002044u, 0x0003003eu, 0x00001faeu, 0x00002046u, 0x00050041u, 0x00000007u, 0x00002047u, 0x00001facu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002048u, 0x00002047u, 0x000500c7u, 0x00000006u, 0x00002049u, 0x00002048u, 0x000002fbu, 0x0004007cu, 0x00000008u, 0x0000204au, 0x00002049u, 0x00050084u, 0x00000008u, 0x0000204bu, 0x000001afu, 0x0000204au, 0x00050082u, 0x00000008u, 0x0000204cu, 0x000001e6u, 0x0000204bu, 0x000500c3u, 0x00000008u, 0x0000204eu, 0x0000201au, 0x0000204cu, 0x0003003eu, 0x00001fafu, 0x0000204eu, 0x000500c7u, 0x00000008u, 0x00002050u, 0x00002046u, 0x00000a5bu, 0x00050084u, 0x00000008u, 0x00002051u, 0x00002050u, 0x00000a5du, 0x0003003eu, 0x00001faeu, 0x00002051u, 0x000500c7u, 0x00000008u, 0x00002053u, 0x0000204eu, 0x00000a5bu, 0x00050084u, 0x00000008u, 0x00002054u, 0x00002053u, 0x00000a5du, 0x0003003eu, 0x00001fafu, 0x00002054u, 0x000200f9u, 0x0000203cu, 0x000200f8u, 0x0000203cu, 0x000700f5u, 0x00000008u, 0x0000aa82u, 0x00002054u, 0x0000203du, 0x00002058u, 0x0000203eu, 0x000700f5u, 0x00000008u, 0x0000aa80u, 0x00002051u, 0x0000203du, 0x00002056u, 0x0000203eu, 0x000200f9u, 0x00002020u, 0x000200f8u, 0x00002021u, 0x00050041u, 0x00000007u, 0x00002023u, 0x00001facu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002024u, 0x00002023u, 0x000500c7u, 0x00000006u, 0x00002025u, 0x00002024u, 0x000002f8u, 0x0004007cu, 0x00000008u, 0x00002026u, 0x00002025u, 0x00050084u, 0x00000008u, 0x00002027u, 0x000001afu, 0x00002026u, 0x00050082u, 0x00000008u, 0x00002028u, 0x000001d9u, 0x00002027u, 0x000500c3u, 0x00000008u, 0x0000202au, 0x00002012u, 0x00002028u, 0x0003003eu, 0x00001faeu, 0x0000202au, 0x00050041u, 0x00000007u, 0x0000202bu, 0x00001facu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000202cu, 0x0000202bu, 0x000500c7u, 0x00000006u, 0x0000202du, 0x0000202cu, 0x000002f8u, 0x0004007cu, 0x00000008u, 0x0000202eu, 0x0000202du, 0x00050084u, 0x00000008u, 0x0000202fu, 0x000001afu, 0x0000202eu, 0x00050082u, 0x00000008u, 0x00002030u, 0x000001d9u, 0x0000202fu, 0x000500c3u, 0x00000008u, 0x00002032u, 0x0000201au, 0x00002030u, 0x0003003eu, 0x00001fafu, 0x00002032u, 0x000500c7u, 0x00000008u, 0x00002034u, 0x0000202au, 0x00000311u, 0x0003003eu, 0x00001faeu, 0x00002034u, 0x000500c7u, 0x00000008u, 0x00002036u, 0x00002032u, 0x00000311u, 0x0003003eu, 0x00001fafu, 0x00002036u, 0x000200f9u, 0x00002020u, 0x000200f8u, 0x00002020u, 0x000700f5u, 0x00000008u, 0x0000aa81u, 0x00002036u, 0x00002021u, 0x0000aa82u, 0x0000203cu, 0x000700f5u, 0x00000008u, 0x0000aa7fu, 0x00002034u, 0x00002021u, 0x0000aa80u, 0x0000203cu, 0x000500c4u, 0x00000008u, 0x0000205au, 0x0000aa7fu, 0x000001d9u, 0x000500c5u, 0x00000008u, 0x0000205cu, 0x0000205au, 0x0000aa81u, 0x0003003eu, 0x00001fb0u, 0x0000205cu, 0x000200f9u, 0x00001fd8u, 0x000200f8u, 0x00001fd8u, 0x000700f5u, 0x00000008u, 0x0000aa83u, 0x0000205cu, 0x00002020u, 0x0000aa84u, 0x0000208eu, 0x0003003eu, 0x00001fbau, 0x0000aa83u, 0x0003003eu, 0x00001d7fu, 0x0000aa83u, 0x000200f9u, 0x00001dafu, 0x000200f8u, 0x00001db0u, 0x000500c3u, 0x00000008u, 0x00001db3u, 0x00001cafu, 0x000001a6u, 0x00110050u, 0x00000029u, 0x0000625eu, 0x00001d5cu, 0x00005d36u, 0x00001d60u, 0x00005d36u, 0x00001d64u, 0x00001d66u, 0x00005d37u, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00001d70u, 0x00001d72u, 0x00001d74u, 0x00001d76u, 0x0003003eu, 0x00006095u, 0x00001d64u, 0x0003003eu, 0x00006096u, 0x00001d66u, 0x0003003eu, 0x00006097u, 0x0000b630u, 0x0003003eu, 0x00006098u, 0x00001d6cu, 0x0003003eu, 0x00006099u, 0x00001d6eu, 0x0003003eu, 0x0000609au, 0x00001d72u, 0x0003003eu, 0x0000609bu, 0x00001d76u, 0x0003003eu, 0x00001d81u, 0x000019c4u, 0x0004003du, 0x00000058u, 0x00001db6u, 0x000018f9u, 0x0003003eu, 0x00001d82u, 0x00001db6u, 0x0003003eu, 0x00001d83u, 0x00001db3u, 0x0003003eu, 0x00001d84u, 0x000019e7u, 0x0003003eu, 0x00001d85u, 0x000019eau, 0x000500b1u, 0x00000063u, 0x00001e12u, 0x00001db3u, 0x000001a9u, 0x0003003eu, 0x00001df6u, 0x00001e12u, 0x000300f7u, 0x00001e14u, 0x00000000u, 0x000400fau, 0x00001e12u, 0x00001e15u, 0x00001e14u, 0x000200f8u, 0x00001e15u, 0x00040071u, 0x00000006u, 0x00001e18u, 0x0000b630u, 0x0004007cu, 0x00000008u, 0x00001e19u, 0x00001e18u, 0x000500abu, 0x00000063u, 0x00001e1au, 0x00001e19u, 0x000001a9u, 0x000200f9u, 0x00001e14u, 0x000200f8u, 0x00001e14u, 0x000700f5u, 0x00000063u, 0x00001e1bu, 0x00001e12u, 0x00001db0u, 0x00001e1au, 0x00001e15u, 0x000400a8u, 0x00000063u, 0x00001e1du, 0x000019e7u, 0x000500a7u, 0x00000063u, 0x00001e1eu, 0x00001e1bu, 0x00001e1du, 0x0003003eu, 0x00001df7u, 0x00001e1eu, 0x00040071u, 0x00000006u, 0x00001e21u, 0x0000b630u, 0x0004007cu, 0x00000008u, 0x00001e22u, 0x00001e21u, 0x0007000cu, 0x00000008u, 0x00001e23u, 0x00000001u, 0x00000027u, 0x00001e22u, 0x000001a9u, 0x0003003eu, 0x00001df8u, 0x00001e23u, 0x000500aau, 0x00000063u, 0x00001e28u, 0x00001e22u, 0x000001acu, 0x0003003eu, 0x00001df9u, 0x00001e28u, 0x000500a6u, 0x00000063u, 0x00001e2bu, 0x00001e28u, 0x000019e7u, 0x000600a9u, 0x00000008u, 0x00001e2cu, 0x00001e2bu, 0x0000098eu, 0x000009d6u, 0x0003003eu, 0x00001dfau, 0x00001e2cu, 0x000300f7u, 0x00001e2eu, 0x00000000u, 0x000400fau, 0x00001e1eu, 0x00001e2fu, 0x00001e30u, 0x000200f8u, 0x00001e30u, 0x00050041u, 0x00000040u, 0x00001eb4u, 0x00001d82u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001eb5u, 0x00001eb4u, 0x00050080u, 0x00000008u, 0x00001eb6u, 0x00001eb5u, 0x00001db3u, 0x0003003eu, 0x00001eb4u, 0x00001eb6u, 0x00110050u, 0x00000029u, 0x000060bau, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00001d64u, 0x00001d66u, 0x00005d37u, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00005d37u, 0x00001d72u, 0x00005d37u, 0x00001d76u, 0x0003003eu, 0x0000608du, 0x00001d6eu, 0x0003003eu, 0x0000608eu, 0x00001d76u, 0x0004003du, 0x00000008u, 0x00001ebau, 0x00001eb4u, 0x0003003eu, 0x00001e09u, 0x00001ebau, 0x00040071u, 0x00000006u, 0x00001f64u, 0x00001d6eu, 0x0004007cu, 0x00000008u, 0x00001f65u, 0x00001f64u, 0x000500abu, 0x00000063u, 0x00001f66u, 0x00001f65u, 0x0000019cu, 0x000300f7u, 0x00001f67u, 0x00000000u, 0x000400fau, 0x00001f66u, 0x00001f68u, 0x00001f67u, 0x000200f8u, 0x00001f68u, 0x000500c4u, 0x00000008u, 0x00001f6bu, 0x000001a6u, 0x00001d6eu, 0x0003003eu, 0x00001f60u, 0x00001f6bu, 0x00040071u, 0x00000006u, 0x00001f6eu, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x00001f6fu, 0x00001f6eu, 0x000500c7u, 0x00000008u, 0x00001f70u, 0x00001f6fu, 0x000001a9u, 0x000500abu, 0x00000063u, 0x00001f71u, 0x00001f70u, 0x0000019cu, 0x000300f7u, 0x00001f72u, 0x00000000u, 0x000400fau, 0x00001f71u, 0x00001f73u, 0x00001f72u, 0x000200f8u, 0x00001f73u, 0x000500c7u, 0x00000008u, 0x00001f76u, 0x00001ebau, 0x00001f6bu, 0x00050082u, 0x00000008u, 0x00001f77u, 0x00001f76u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00001f78u, 0x00000001u, 0x0000002au, 0x00001f77u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00001f7au, 0x00001ebau, 0x00001f78u, 0x0003003eu, 0x00001e09u, 0x00001f7au, 0x000200f9u, 0x00001f72u, 0x000200f8u, 0x00001f72u, 0x000700f5u, 0x00000008u, 0x0000aa8fu, 0x00001ebau, 0x00001f68u, 0x00001f7au, 0x00001f73u, 0x00050082u, 0x00000008u, 0x00001f7cu, 0x00001f6bu, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00001f7eu, 0x0000aa8fu, 0x00001f7cu, 0x0003003eu, 0x00001e09u, 0x00001f7eu, 0x000200f9u, 0x00001f67u, 0x000200f8u, 0x00001f67u, 0x000700f5u, 0x00000008u, 0x0000aa90u, 0x00001ebau, 0x00001e30u, 0x00001f7eu, 0x00001f72u, 0x0003003eu, 0x00001f61u, 0x0000aa90u, 0x0003003eu, 0x00001e07u, 0x0000aa90u, 0x0003003eu, 0x00006091u, 0x00001d72u, 0x0003003eu, 0x00006092u, 0x00001d76u, 0x00050041u, 0x00000040u, 0x00001ebdu, 0x00001d82u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001ebeu, 0x00001ebdu, 0x0003003eu, 0x00001e0cu, 0x00001ebeu, 0x00040071u, 0x00000006u, 0x00001f84u, 0x00001d72u, 0x0004007cu, 0x00000008u, 0x00001f85u, 0x00001f84u, 0x000500abu, 0x00000063u, 0x00001f86u, 0x00001f85u, 0x0000019cu, 0x000300f7u, 0x00001f87u, 0x00000000u, 0x000400fau, 0x00001f86u, 0x00001f88u, 0x00001f87u, 0x000200f8u, 0x00001f88u, 0x000500c4u, 0x00000008u, 0x00001f8bu, 0x000001a6u, 0x00001d72u, 0x0003003eu, 0x00001f80u, 0x00001f8bu, 0x00040071u, 0x00000006u, 0x00001f8eu, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x00001f8fu, 0x00001f8eu, 0x000500c7u, 0x00000008u, 0x00001f90u, 0x00001f8fu, 0x000001d9u, 0x000500abu, 0x00000063u, 0x00001f91u, 0x00001f90u, 0x0000019cu, 0x000300f7u, 0x00001f92u, 0x00000000u, 0x000400fau, 0x00001f91u, 0x00001f93u, 0x00001f92u, 0x000200f8u, 0x00001f93u, 0x000500c7u, 0x00000008u, 0x00001f96u, 0x00001ebeu, 0x00001f8bu, 0x00050082u, 0x00000008u, 0x00001f97u, 0x00001f96u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00001f98u, 0x00000001u, 0x0000002au, 0x00001f97u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00001f9au, 0x00001ebeu, 0x00001f98u, 0x0003003eu, 0x00001e0cu, 0x00001f9au, 0x000200f9u, 0x00001f92u, 0x000200f8u, 0x00001f92u, 0x000700f5u, 0x00000008u, 0x0000aaa0u, 0x00001ebeu, 0x00001f88u, 0x00001f9au, 0x00001f93u, 0x00050082u, 0x00000008u, 0x00001f9cu, 0x00001f8bu, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00001f9eu, 0x0000aaa0u, 0x00001f9cu, 0x0003003eu, 0x00001e0cu, 0x00001f9eu, 0x000200f9u, 0x00001f87u, 0x000200f8u, 0x00001f87u, 0x000700f5u, 0x00000008u, 0x0000aaa1u, 0x00001ebeu, 0x00001f67u, 0x00001f9eu, 0x00001f92u, 0x0003003eu, 0x00001f81u, 0x0000aaa1u, 0x0003003eu, 0x00001e0au, 0x0000aaa1u, 0x0004007cu, 0x00000006u, 0x00001ec5u, 0x0000aaa1u, 0x00050084u, 0x00000006u, 0x00001ec6u, 0x00001d66u, 0x00001ec5u, 0x00050080u, 0x00000006u, 0x00001ec7u, 0x00001d64u, 0x00001ec6u, 0x0003003eu, 0x00001e0du, 0x00001ec7u, 0x00050084u, 0x00000006u, 0x00001ec9u, 0x00001ec7u, 0x000002f8u, 0x000500c4u, 0x00000008u, 0x00001eccu, 0x0000aa90u, 0x00001e23u, 0x0004007cu, 0x00000006u, 0x00001ecdu, 0x00001eccu, 0x00050080u, 0x00000006u, 0x00001eceu, 0x00001ec9u, 0x00001ecdu, 0x000500c7u, 0x00000006u, 0x00001ecfu, 0x00001eceu, 0x00000a02u, 0x0003003eu, 0x00001e0eu, 0x00001ecfu, 0x000500c7u, 0x00000006u, 0x00001ed2u, 0x00001ec5u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00001ed3u, 0x00001ed2u, 0x00000275u, 0x000500c6u, 0x00000006u, 0x00001ed5u, 0x00001ecfu, 0x00001ed3u, 0x0003003eu, 0x00001e0eu, 0x00001ed5u, 0x000500c2u, 0x00000006u, 0x00001ed7u, 0x00001ed5u, 0x000002f8u, 0x0003003eu, 0x00001e0fu, 0x00001ed7u, 0x0004007cu, 0x00000006u, 0x00001ed9u, 0x00001e2cu, 0x000500c7u, 0x00000006u, 0x00001edbu, 0x00001ed7u, 0x00001ed9u, 0x0003003eu, 0x00001e0fu, 0x00001edbu, 0x000500c6u, 0x00000006u, 0x00001edeu, 0x00001edbu, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00001edfu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00001edeu, 0x0004003du, 0x00000011u, 0x00001ee0u, 0x00001edfu, 0x00040071u, 0x00000006u, 0x00001ee1u, 0x00001ee0u, 0x0004007cu, 0x00000008u, 0x00001ee2u, 0x00001ee1u, 0x0003003eu, 0x00001e06u, 0x00001ee2u, 0x000300f7u, 0x00001ee4u, 0x00000000u, 0x000400fau, 0x000019e7u, 0x00001ee5u, 0x00001ee4u, 0x000200f8u, 0x00001ee5u, 0x000500aau, 0x00000063u, 0x00001eeau, 0x00001e22u, 0x0000019cu, 0x000300f7u, 0x00001eebu, 0x00000000u, 0x000400fau, 0x00001eeau, 0x00001eecu, 0x00001eedu, 0x000200f8u, 0x00001eedu, 0x000500c7u, 0x00000006u, 0x00001f03u, 0x00001ed5u, 0x000002f8u, 0x00050084u, 0x00000006u, 0x00001f04u, 0x00000692u, 0x00001f03u, 0x00050082u, 0x00000006u, 0x00001f05u, 0x00000275u, 0x00001f04u, 0x000500c3u, 0x00000008u, 0x00001f07u, 0x00001ee2u, 0x00001f05u, 0x0003003eu, 0x00001e06u, 0x00001f07u, 0x000500c7u, 0x00000008u, 0x00001f09u, 0x00001f07u, 0x00000311u, 0x0003003eu, 0x00001e06u, 0x00001f09u, 0x000500c4u, 0x00000008u, 0x00001f0bu, 0x00001f09u, 0x000001a9u, 0x0003003eu, 0x00001e06u, 0x00001f0bu, 0x00050080u, 0x00000008u, 0x00001f0eu, 0x00001f0bu, 0x00001db3u, 0x0003003eu, 0x00001e06u, 0x00001f0eu, 0x000200f9u, 0x00001eebu, 0x000200f8u, 0x00001eecu, 0x000500c7u, 0x00000006u, 0x00001eefu, 0x00001ed5u, 0x000002fbu, 0x00050084u, 0x00000006u, 0x00001ef0u, 0x00000692u, 0x00001eefu, 0x00050082u, 0x00000006u, 0x00001ef1u, 0x00000ab0u, 0x00001ef0u, 0x000500c3u, 0x00000008u, 0x00001ef3u, 0x00001ee2u, 0x00001ef1u, 0x0003003eu, 0x00001e06u, 0x00001ef3u, 0x000500c7u, 0x00000008u, 0x00001ef5u, 0x00001ef3u, 0x00000a5bu, 0x0003003eu, 0x00001e06u, 0x00001ef5u, 0x000500c4u, 0x0000000fu, 0x00001ef8u, 0x00001d6cu, 0x000001afu, 0x00040071u, 0x00000006u, 0x00001ef9u, 0x00001ef8u, 0x0004007cu, 0x00000008u, 0x00001efau, 0x00001ef9u, 0x000500c5u, 0x00000008u, 0x00001efcu, 0x00001ef5u, 0x00001efau, 0x0003003eu, 0x00001e06u, 0x00001efcu, 0x000500c4u, 0x00000008u, 0x00001efeu, 0x00001efcu, 0x000001a9u, 0x0003003eu, 0x00001e06u, 0x00001efeu, 0x00050080u, 0x00000008u, 0x00001f01u, 0x00001efeu, 0x00001db3u, 0x0003003eu, 0x00001e06u, 0x00001f01u, 0x000200f9u, 0x00001eebu, 0x000200f8u, 0x00001eebu, 0x000700f5u, 0x00000008u, 0x0000aac2u, 0x00001f01u, 0x00001eecu, 0x00001f0eu, 0x00001eedu, 0x000500c5u, 0x00000008u, 0x00001f11u, 0x0000aac2u, 0x00000ad5u, 0x000500c6u, 0x00000008u, 0x00001f12u, 0x00001f11u, 0x000001a6u, 0x00080041u, 0x00000778u, 0x00001f13u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00001f12u, 0x0004003du, 0x00000011u, 0x00001f14u, 0x00001f13u, 0x00040071u, 0x00000006u, 0x00001f15u, 0x00001f14u, 0x0004007cu, 0x00000008u, 0x00001f16u, 0x00001f15u, 0x0003003eu, 0x00001e06u, 0x00001f16u, 0x000200f9u, 0x00001ee4u, 0x000200f8u, 0x00001ee4u, 0x000700f5u, 0x00000008u, 0x0000aaf0u, 0x00001ee2u, 0x00001f87u, 0x00001f16u, 0x00001eebu, 0x000200f9u, 0x00001e2eu, 0x000200f8u, 0x00001e2fu, 0x00050084u, 0x00000008u, 0x00001e32u, 0x000001a9u, 0x00001db3u, 0x00050041u, 0x00000040u, 0x00001e33u, 0x00001d82u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001e34u, 0x00001e33u, 0x00050080u, 0x00000008u, 0x00001e35u, 0x00001e34u, 0x00001e32u, 0x0003003eu, 0x00001e33u, 0x00001e35u, 0x00110050u, 0x00000029u, 0x000060aau, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00005d36u, 0x00001d64u, 0x00001d66u, 0x00005d37u, 0x0000b630u, 0x00001d6cu, 0x00001d6eu, 0x00005d37u, 0x00001d72u, 0x00005d37u, 0x00001d76u, 0x0003003eu, 0x00006085u, 0x00001d6eu, 0x0003003eu, 0x00006086u, 0x00001d76u, 0x0004003du, 0x00000008u, 0x00001e39u, 0x00001e33u, 0x0003003eu, 0x00001dfdu, 0x00001e39u, 0x00050050u, 0x00000058u, 0x00001f1cu, 0x00001e39u, 0x00001e39u, 0x00050080u, 0x00000058u, 0x00001f1du, 0x00001f1cu, 0x000005fau, 0x0003003eu, 0x00001f18u, 0x00001f1du, 0x00040071u, 0x00000006u, 0x00001f20u, 0x00001d6eu, 0x0004007cu, 0x00000008u, 0x00001f21u, 0x00001f20u, 0x000500abu, 0x00000063u, 0x00001f22u, 0x00001f21u, 0x0000019cu, 0x000300f7u, 0x00001f23u, 0x00000000u, 0x000400fau, 0x00001f22u, 0x00001f24u, 0x00001f23u, 0x000200f8u, 0x00001f24u, 0x000500c4u, 0x00000008u, 0x00001f27u, 0x000001a6u, 0x00001d6eu, 0x0003003eu, 0x00001f19u, 0x00001f27u, 0x00040071u, 0x00000006u, 0x00001f2au, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x00001f2bu, 0x00001f2au, 0x000500c7u, 0x00000008u, 0x00001f2cu, 0x00001f2bu, 0x000001a9u, 0x000500abu, 0x00000063u, 0x00001f2du, 0x00001f2cu, 0x0000019cu, 0x000300f7u, 0x00001f2eu, 0x00000000u, 0x000400fau, 0x00001f2du, 0x00001f2fu, 0x00001f2eu, 0x000200f8u, 0x00001f2fu, 0x00050050u, 0x00000058u, 0x00001f32u, 0x00001f27u, 0x00001f27u, 0x000500c7u, 0x00000058u, 0x00001f33u, 0x00001f1du, 0x00001f32u, 0x00050082u, 0x00000058u, 0x00001f35u, 0x00001f33u, 0x0000b619u, 0x0007000cu, 0x00000058u, 0x00001f37u, 0x00000001u, 0x0000002au, 0x00001f35u, 0x00000450u, 0x000500c6u, 0x00000058u, 0x00001f39u, 0x00001f1du, 0x00001f37u, 0x0003003eu, 0x00001f18u, 0x00001f39u, 0x000200f9u, 0x00001f2eu, 0x000200f8u, 0x00001f2eu, 0x000700f5u, 0x00000058u, 0x0000aac4u, 0x00001f1du, 0x00001f24u, 0x00001f39u, 0x00001f2fu, 0x00050082u, 0x00000008u, 0x00001f3bu, 0x00001f27u, 0x000001a6u, 0x00050050u, 0x00000058u, 0x00001f3du, 0x00001f3bu, 0x00001f3bu, 0x000500c7u, 0x00000058u, 0x00001f3eu, 0x0000aac4u, 0x00001f3du, 0x0003003eu, 0x00001f18u, 0x00001f3eu, 0x000200f9u, 0x00001f23u, 0x000200f8u, 0x00001f23u, 0x000700f5u, 0x00000058u, 0x0000aac5u, 0x00001f1du, 0x00001e2fu, 0x00001f3eu, 0x00001f2eu, 0x0003003eu, 0x00001f1au, 0x0000aac5u, 0x0003003eu, 0x00001dfbu, 0x0000aac5u, 0x0003003eu, 0x00006089u, 0x00001d72u, 0x0003003eu, 0x0000608au, 0x00001d76u, 0x00050041u, 0x00000040u, 0x00001e3cu, 0x00001d82u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001e3du, 0x00001e3cu, 0x0003003eu, 0x00001e00u, 0x00001e3du, 0x00040071u, 0x00000006u, 0x00001f44u, 0x00001d72u, 0x0004007cu, 0x00000008u, 0x00001f45u, 0x00001f44u, 0x000500abu, 0x00000063u, 0x00001f46u, 0x00001f45u, 0x0000019cu, 0x000300f7u, 0x00001f47u, 0x00000000u, 0x000400fau, 0x00001f46u, 0x00001f48u, 0x00001f47u, 0x000200f8u, 0x00001f48u, 0x000500c4u, 0x00000008u, 0x00001f4bu, 0x000001a6u, 0x00001d72u, 0x0003003eu, 0x00001f40u, 0x00001f4bu, 0x00040071u, 0x00000006u, 0x00001f4eu, 0x00001d76u, 0x0004007cu, 0x00000008u, 0x00001f4fu, 0x00001f4eu, 0x000500c7u, 0x00000008u, 0x00001f50u, 0x00001f4fu, 0x000001d9u, 0x000500abu, 0x00000063u, 0x00001f51u, 0x00001f50u, 0x0000019cu, 0x000300f7u, 0x00001f52u, 0x00000000u, 0x000400fau, 0x00001f51u, 0x00001f53u, 0x00001f52u, 0x000200f8u, 0x00001f53u, 0x000500c7u, 0x00000008u, 0x00001f56u, 0x00001e3du, 0x00001f4bu, 0x00050082u, 0x00000008u, 0x00001f57u, 0x00001f56u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00001f58u, 0x00000001u, 0x0000002au, 0x00001f57u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00001f5au, 0x00001e3du, 0x00001f58u, 0x0003003eu, 0x00001e00u, 0x00001f5au, 0x000200f9u, 0x00001f52u, 0x000200f8u, 0x00001f52u, 0x000700f5u, 0x00000008u, 0x0000aad5u, 0x00001e3du, 0x00001f48u, 0x00001f5au, 0x00001f53u, 0x00050082u, 0x00000008u, 0x00001f5cu, 0x00001f4bu, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00001f5eu, 0x0000aad5u, 0x00001f5cu, 0x0003003eu, 0x00001e00u, 0x00001f5eu, 0x000200f9u, 0x00001f47u, 0x000200f8u, 0x00001f47u, 0x000700f5u, 0x00000008u, 0x0000aad6u, 0x00001e3du, 0x00001f23u, 0x00001f5eu, 0x00001f52u, 0x0003003eu, 0x00001f41u, 0x0000aad6u, 0x0003003eu, 0x00001dfeu, 0x0000aad6u, 0x0004007cu, 0x00000006u, 0x00001e44u, 0x0000aad6u, 0x00050084u, 0x00000006u, 0x00001e45u, 0x00001d66u, 0x00001e44u, 0x00050080u, 0x00000006u, 0x00001e46u, 0x00001d64u, 0x00001e45u, 0x0003003eu, 0x00001e01u, 0x00001e46u, 0x00050084u, 0x00000006u, 0x00001e48u, 0x00001e46u, 0x000002f8u, 0x00050050u, 0x00000058u, 0x00001e4bu, 0x00001e23u, 0x00001e23u, 0x000500c4u, 0x00000058u, 0x00001e4cu, 0x0000aac5u, 0x00001e4bu, 0x0004007cu, 0x000000abu, 0x00001e4du, 0x00001e4cu, 0x00050050u, 0x000000abu, 0x00001e4eu, 0x00001e48u, 0x00001e48u, 0x00050080u, 0x000000abu, 0x00001e4fu, 0x00001e4eu, 0x00001e4du, 0x000500c7u, 0x000000abu, 0x00001e51u, 0x00001e4fu, 0x0000b61du, 0x0003003eu, 0x00001e02u, 0x00001e51u, 0x000500c7u, 0x00000006u, 0x00001e54u, 0x00001e44u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00001e55u, 0x00001e54u, 0x00000275u, 0x0004003du, 0x000000abu, 0x00001e56u, 0x00001e02u, 0x00050050u, 0x000000abu, 0x00001e57u, 0x00001e55u, 0x00001e55u, 0x000500c6u, 0x000000abu, 0x00001e58u, 0x00001e56u, 0x00001e57u, 0x0003003eu, 0x00001e02u, 0x00001e58u, 0x0004003du, 0x000000abu, 0x00001e59u, 0x00001e02u, 0x000500c2u, 0x000000abu, 0x00001e5bu, 0x00001e59u, 0x0000b61eu, 0x0003003eu, 0x00001e03u, 0x00001e5bu, 0x0004007cu, 0x00000006u, 0x00001e5du, 0x00001e2cu, 0x0004003du, 0x000000abu, 0x00001e5eu, 0x00001e03u, 0x00050050u, 0x000000abu, 0x00001e5fu, 0x00001e5du, 0x00001e5du, 0x000500c7u, 0x000000abu, 0x00001e60u, 0x00001e5eu, 0x00001e5fu, 0x0003003eu, 0x00001e03u, 0x00001e60u, 0x00050041u, 0x00000007u, 0x00001e62u, 0x00001e03u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00001e63u, 0x00001e62u, 0x000500c6u, 0x00000006u, 0x00001e64u, 0x00001e63u, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00001e65u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00001e64u, 0x0004003du, 0x00000011u, 0x00001e66u, 0x00001e65u, 0x00040071u, 0x00000006u, 0x00001e67u, 0x00001e66u, 0x0004007cu, 0x00000008u, 0x00001e68u, 0x00001e67u, 0x0003003eu, 0x00001e04u, 0x00001e68u, 0x00050041u, 0x00000007u, 0x00001e6au, 0x00001e03u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00001e6bu, 0x00001e6au, 0x000500c6u, 0x00000006u, 0x00001e6cu, 0x00001e6bu, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00001e6du, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00001e6cu, 0x0004003du, 0x00000011u, 0x00001e6eu, 0x00001e6du, 0x00040071u, 0x00000006u, 0x00001e6fu, 0x00001e6eu, 0x0004007cu, 0x00000008u, 0x00001e70u, 0x00001e6fu, 0x0003003eu, 0x00001e05u, 0x00001e70u, 0x000500aau, 0x00000063u, 0x00001e75u, 0x00001e22u, 0x000001a6u, 0x000300f7u, 0x00001e76u, 0x00000000u, 0x000400fau, 0x00001e75u, 0x00001e77u, 0x00001e78u, 0x000200f8u, 0x00001e78u, 0x000500aau, 0x00000063u, 0x00001e91u, 0x00001e22u, 0x0000019cu, 0x000300f7u, 0x00001e92u, 0x00000000u, 0x000400fau, 0x00001e91u, 0x00001e93u, 0x00001e94u, 0x000200f8u, 0x00001e94u, 0x000500c3u, 0x00000008u, 0x00001eacu, 0x00001e68u, 0x000001d9u, 0x0003003eu, 0x00001e04u, 0x00001eacu, 0x000500c3u, 0x00000008u, 0x00001eaeu, 0x00001e70u, 0x000001d9u, 0x0003003eu, 0x00001e05u, 0x00001eaeu, 0x000200f9u, 0x00001e92u, 0x000200f8u, 0x00001e93u, 0x00050041u, 0x00000007u, 0x00001e95u, 0x00001e02u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00001e96u, 0x00001e95u, 0x000500c7u, 0x00000006u, 0x00001e97u, 0x00001e96u, 0x000002fbu, 0x0004007cu, 0x00000008u, 0x00001e98u, 0x00001e97u, 0x00050084u, 0x00000008u, 0x00001e99u, 0x000001afu, 0x00001e98u, 0x00050082u, 0x00000008u, 0x00001e9au, 0x000001e6u, 0x00001e99u, 0x000500c3u, 0x00000008u, 0x00001e9cu, 0x00001e68u, 0x00001e9au, 0x0003003eu, 0x00001e04u, 0x00001e9cu, 0x00050041u, 0x00000007u, 0x00001e9du, 0x00001e02u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00001e9eu, 0x00001e9du, 0x000500c7u, 0x00000006u, 0x00001e9fu, 0x00001e9eu, 0x000002fbu, 0x0004007cu, 0x00000008u, 0x00001ea0u, 0x00001e9fu, 0x00050084u, 0x00000008u, 0x00001ea1u, 0x000001afu, 0x00001ea0u, 0x00050082u, 0x00000008u, 0x00001ea2u, 0x000001e6u, 0x00001ea1u, 0x000500c3u, 0x00000008u, 0x00001ea4u, 0x00001e70u, 0x00001ea2u, 0x0003003eu, 0x00001e05u, 0x00001ea4u, 0x000500c7u, 0x00000008u, 0x00001ea6u, 0x00001e9cu, 0x00000a5bu, 0x00050084u, 0x00000008u, 0x00001ea7u, 0x00001ea6u, 0x00000a5du, 0x0003003eu, 0x00001e04u, 0x00001ea7u, 0x000500c7u, 0x00000008u, 0x00001ea9u, 0x00001ea4u, 0x00000a5bu, 0x00050084u, 0x00000008u, 0x00001eaau, 0x00001ea9u, 0x00000a5du, 0x0003003eu, 0x00001e05u, 0x00001eaau, 0x000200f9u, 0x00001e92u, 0x000200f8u, 0x00001e92u, 0x000700f5u, 0x00000008u, 0x0000aaeeu, 0x00001eaau, 0x00001e93u, 0x00001eaeu, 0x00001e94u, 0x000700f5u, 0x00000008u, 0x0000aaecu, 0x00001ea7u, 0x00001e93u, 0x00001eacu, 0x00001e94u, 0x000200f9u, 0x00001e76u, 0x000200f8u, 0x00001e77u, 0x00050041u, 0x00000007u, 0x00001e79u, 0x00001e02u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00001e7au, 0x00001e79u, 0x000500c7u, 0x00000006u, 0x00001e7bu, 0x00001e7au, 0x000002f8u, 0x0004007cu, 0x00000008u, 0x00001e7cu, 0x00001e7bu, 0x00050084u, 0x00000008u, 0x00001e7du, 0x000001afu, 0x00001e7cu, 0x00050082u, 0x00000008u, 0x00001e7eu, 0x000001d9u, 0x00001e7du, 0x000500c3u, 0x00000008u, 0x00001e80u, 0x00001e68u, 0x00001e7eu, 0x0003003eu, 0x00001e04u, 0x00001e80u, 0x00050041u, 0x00000007u, 0x00001e81u, 0x00001e02u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00001e82u, 0x00001e81u, 0x000500c7u, 0x00000006u, 0x00001e83u, 0x00001e82u, 0x000002f8u, 0x0004007cu, 0x00000008u, 0x00001e84u, 0x00001e83u, 0x00050084u, 0x00000008u, 0x00001e85u, 0x000001afu, 0x00001e84u, 0x00050082u, 0x00000008u, 0x00001e86u, 0x000001d9u, 0x00001e85u, 0x000500c3u, 0x00000008u, 0x00001e88u, 0x00001e70u, 0x00001e86u, 0x0003003eu, 0x00001e05u, 0x00001e88u, 0x000500c7u, 0x00000008u, 0x00001e8au, 0x00001e80u, 0x00000311u, 0x0003003eu, 0x00001e04u, 0x00001e8au, 0x000500c7u, 0x00000008u, 0x00001e8cu, 0x00001e88u, 0x00000311u, 0x0003003eu, 0x00001e05u, 0x00001e8cu, 0x000200f9u, 0x00001e76u, 0x000200f8u, 0x00001e76u, 0x000700f5u, 0x00000008u, 0x0000aaedu, 0x00001e8cu, 0x00001e77u, 0x0000aaeeu, 0x00001e92u, 0x000700f5u, 0x00000008u, 0x0000aaebu, 0x00001e8au, 0x00001e77u, 0x0000aaecu, 0x00001e92u, 0x000500c4u, 0x00000008u, 0x00001eb0u, 0x0000aaebu, 0x000001d9u, 0x000500c5u, 0x00000008u, 0x00001eb2u, 0x00001eb0u, 0x0000aaedu, 0x0003003eu, 0x00001e06u, 0x00001eb2u, 0x000200f9u, 0x00001e2eu, 0x000200f8u, 0x00001e2eu, 0x000700f5u, 0x00000008u, 0x0000aaefu, 0x00001eb2u, 0x00001e76u, 0x0000aaf0u, 0x00001ee4u, 0x0003003eu, 0x00001e10u, 0x0000aaefu, 0x0003003eu, 0x00001d7fu, 0x0000aaefu, 0x000500c7u, 0x00000008u, 0x00001dbbu, 0x00001cafu, 0x000001a6u, 0x00050084u, 0x00000008u, 0x00001dbcu, 0x000001d9u, 0x00001dbbu, 0x00050082u, 0x00000008u, 0x00001dbdu, 0x000001d9u, 0x00001dbcu, 0x000500c3u, 0x00000008u, 0x00001dbfu, 0x0000aaefu, 0x00001dbdu, 0x0003003eu, 0x00001d7fu, 0x00001dbfu, 0x000500c7u, 0x00000008u, 0x00001dc1u, 0x00001dbfu, 0x00000311u, 0x0003003eu, 0x00001d7fu, 0x00001dc1u, 0x000200f9u, 0x00001dafu, 0x000200f8u, 0x00001dafu, 0x000700f5u, 0x00000008u, 0x0000ab00u, 0x00001dc1u, 0x00001e2eu, 0x0000aa83u, 0x00001fd8u, 0x000200f9u, 0x00001da9u, 0x000200f8u, 0x00001daau, 0x0003003eu, 0x00001d7fu, 0x0000019cu, 0x000200f9u, 0x00001da9u, 0x000200f8u, 0x00001da9u, 0x000700f5u, 0x00000008u, 0x0000aaffu, 0x0000019cu, 0x00001daau, 0x0000ab00u, 0x00001dafu, 0x0003003eu, 0x00001d8cu, 0x0000aaffu, 0x0003003eu, 0x000018f6u, 0x0000aaffu, 0x0003003eu, 0x00006d0au, 0x0000aaffu, 0x0003003eu, 0x00006d0bu, 0x000002ebu, 0x000300f7u, 0x00001a72u, 0x00000000u, 0x000400fau, 0x00001a11u, 0x00001a73u, 0x00001a72u, 0x000200f8u, 0x00001a73u, 0x000500aau, 0x00000063u, 0x00001a76u, 0x00001da7u, 0x000001a9u, 0x000200f9u, 0x00001a72u, 0x000200f8u, 0x00001a72u, 0x000700f5u, 0x00000063u, 0x00001a77u, 0x00001a11u, 0x00001da9u, 0x00001a76u, 0x00001a73u, 0x000300f7u, 0x00001a78u, 0x00000000u, 0x000400fau, 0x00001a77u, 0x00001a79u, 0x00001a78u, 0x000200f8u, 0x00001a79u, 0x000500c7u, 0x00000008u, 0x00001a7bu, 0x0000aaffu, 0x000001a6u, 0x000500aau, 0x00000063u, 0x00001a7cu, 0x00001a7bu, 0x0000019cu, 0x000200f9u, 0x00001a78u, 0x000200f8u, 0x00001a78u, 0x000700f5u, 0x00000063u, 0x00001a7du, 0x00001a77u, 0x00001a72u, 0x00001a7cu, 0x00001a79u, 0x000300f7u, 0x00001a7eu, 0x00000000u, 0x000400fau, 0x00001a7du, 0x00001a7fu, 0x00001a7eu, 0x000200f8u, 0x00001a7fu, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001a7eu, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x0000046cu, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001a3fu, 0x0003003eu, 0x000018feu, 0x00001c35u, 0x0003003eu, 0x000018ffu, 0x00001c37u, 0x0003003eu, 0x00001900u, 0x00006eb2u, 0x00040072u, 0x00000012u, 0x00002155u, 0x00006eb2u, 0x0004007cu, 0x00000011u, 0x00002156u, 0x00002155u, 0x000500c4u, 0x00000011u, 0x00002157u, 0x00002156u, 0x000002b8u, 0x00070050u, 0x00000023u, 0x00002158u, 0x00002157u, 0x00002157u, 0x00002157u, 0x00002157u, 0x00050080u, 0x00000023u, 0x00002159u, 0x000002b4u, 0x00002158u, 0x0003003eu, 0x0000214au, 0x00002159u, 0x0009004fu, 0x00000023u, 0x0000215cu, 0x00001c35u, 0x00001c35u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b0u, 0x000002bcu, 0x0000215du, 0x00002159u, 0x0000215cu, 0x0003003eu, 0x0000214bu, 0x0000215du, 0x0009004fu, 0x00000023u, 0x00002160u, 0x00001c35u, 0x00001c35u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b0u, 0x000002bcu, 0x00002161u, 0x00002159u, 0x00002160u, 0x0003003eu, 0x0000214cu, 0x00002161u, 0x0009004fu, 0x00000023u, 0x00002164u, 0x00001c37u, 0x00001c37u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500aeu, 0x000002bcu, 0x00002165u, 0x00002159u, 0x00002164u, 0x0003003eu, 0x0000214du, 0x00002165u, 0x0009004fu, 0x00000023u, 0x00002168u, 0x00001c37u, 0x00001c37u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500aeu, 0x000002bcu, 0x00002169u, 0x00002159u, 0x00002168u, 0x0003003eu, 0x0000214eu, 0x00002169u, 0x000600a9u, 0x00000010u, 0x0000216bu, 0x0000215du, 0x000002d7u, 0x000002d6u, 0x000600a9u, 0x00000010u, 0x0000216du, 0x00002165u, 0x000002d7u, 0x000002d6u, 0x000500c5u, 0x00000010u, 0x0000216eu, 0x0000216bu, 0x0000216du, 0x0003003eu, 0x0000214fu, 0x0000216eu, 0x000600a9u, 0x00000010u, 0x00002170u, 0x00002161u, 0x000002d7u, 0x000002d6u, 0x000600a9u, 0x00000010u, 0x00002172u, 0x00002169u, 0x000002d7u, 0x000002d6u, 0x000500c5u, 0x00000010u, 0x00002173u, 0x00002170u, 0x00002172u, 0x0003003eu, 0x00002150u, 0x00002173u, 0x00050084u, 0x00000010u, 0x00002175u, 0x0000216eu, 0x000002e7u, 0x00050084u, 0x00000010u, 0x00002177u, 0x00002173u, 0x000002eeu, 0x00050080u, 0x00000010u, 0x00002178u, 0x00002175u, 0x00002177u, 0x0003003eu, 0x00002151u, 0x00002178u, 0x00050041u, 0x00000174u, 0x00002179u, 0x00002151u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x0000217au, 0x00002179u, 0x00050041u, 0x00000174u, 0x0000217bu, 0x00002151u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x0000217cu, 0x0000217bu, 0x000500c5u, 0x0000000fu, 0x0000217du, 0x0000217au, 0x0000217cu, 0x00050041u, 0x00000174u, 0x0000217eu, 0x00002151u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x0000217fu, 0x0000217eu, 0x00050041u, 0x00000174u, 0x00002180u, 0x00002151u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00002181u, 0x00002180u, 0x000500c5u, 0x0000000fu, 0x00002182u, 0x0000217fu, 0x00002181u, 0x000500c5u, 0x0000000fu, 0x00002183u, 0x0000217du, 0x00002182u, 0x0003003eu, 0x00002152u, 0x00002183u, 0x000400c8u, 0x0000000fu, 0x00002185u, 0x00002183u, 0x000500c7u, 0x0000000fu, 0x00002186u, 0x00002185u, 0x00000302u, 0x0003003eu, 0x00002153u, 0x00002186u, 0x00040071u, 0x00000006u, 0x00001a95u, 0x00002186u, 0x0004007cu, 0x00000008u, 0x00001a96u, 0x00001a95u, 0x0003003eu, 0x000018fdu, 0x00001a96u, 0x000500aau, 0x00000063u, 0x00001a98u, 0x00001a96u, 0x0000019cu, 0x000300f7u, 0x00001a99u, 0x00000000u, 0x000400fau, 0x00001a98u, 0x00001a9au, 0x00001a99u, 0x000200f8u, 0x00001a9au, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001a99u, 0x000400cdu, 0x00000008u, 0x00001a9cu, 0x00001a96u, 0x0003003eu, 0x00001901u, 0x00001a9cu, 0x000400a8u, 0x00000063u, 0x00001a9eu, 0x00001a02u, 0x000300f7u, 0x00001a9fu, 0x00000000u, 0x000400fau, 0x00001a9eu, 0x00001aa0u, 0x00001a9fu, 0x000200f8u, 0x00001aa0u, 0x000500c7u, 0x00000008u, 0x00001aa2u, 0x00001a96u, 0x000001a6u, 0x000500aau, 0x00000063u, 0x00001aa3u, 0x00001aa2u, 0x0000019cu, 0x000200f9u, 0x00001a9fu, 0x000200f8u, 0x00001a9fu, 0x000700f5u, 0x00000063u, 0x00001aa4u, 0x00001a9eu, 0x00001a99u, 0x00001aa3u, 0x00001aa0u, 0x000300f7u, 0x00001aa5u, 0x00000000u, 0x000400fau, 0x00001aa4u, 0x00001aa6u, 0x00001aa5u, 0x000200f8u, 0x00001aa6u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001aa5u, 0x0003003eu, 0x00001903u, 0x0000184du, 0x00060041u, 0x000001c3u, 0x0000218au, 0x000001c1u, 0x0000019cu, 0x0000184du, 0x0004003du, 0x000001bdu, 0x0000218bu, 0x0000218au, 0x00050051u, 0x00000010u, 0x0000218cu, 0x0000218bu, 0x00000000u, 0x0003003eu, 0x00006028u, 0x0000218cu, 0x00050051u, 0x00000010u, 0x0000218eu, 0x0000218bu, 0x00000001u, 0x0003003eu, 0x00006029u, 0x0000218eu, 0x00050051u, 0x00000010u, 0x00002190u, 0x0000218bu, 0x00000002u, 0x0003003eu, 0x0000602au, 0x00002190u, 0x00050051u, 0x00000010u, 0x00002192u, 0x0000218bu, 0x00000003u, 0x0003003eu, 0x0000602bu, 0x00002192u, 0x00050051u, 0x00000010u, 0x00002194u, 0x0000218bu, 0x00000004u, 0x0003003eu, 0x0000602cu, 0x00002194u, 0x00050051u, 0x00000010u, 0x00002196u, 0x0000218bu, 0x00000005u, 0x0003003eu, 0x0000602du, 0x00002196u, 0x00050051u, 0x00000010u, 0x00002198u, 0x0000218bu, 0x00000006u, 0x0003003eu, 0x0000602eu, 0x00002198u, 0x00050051u, 0x00000010u, 0x0000219au, 0x0000218bu, 0x00000007u, 0x0003003eu, 0x0000602fu, 0x0000219au, 0x00050051u, 0x00000010u, 0x0000219cu, 0x0000218bu, 0x00000008u, 0x0003003eu, 0x00006030u, 0x0000219cu, 0x00050051u, 0x00000010u, 0x0000219eu, 0x0000218bu, 0x00000009u, 0x0003003eu, 0x00006031u, 0x0000219eu, 0x00050051u, 0x00000006u, 0x000021a0u, 0x0000218bu, 0x0000000au, 0x0003003eu, 0x00006032u, 0x000021a0u, 0x00050051u, 0x00000011u, 0x000021a2u, 0x0000218bu, 0x0000000bu, 0x0003003eu, 0x00006033u, 0x000021a2u, 0x00050051u, 0x0000000fu, 0x000021a4u, 0x0000218bu, 0x0000000cu, 0x0003003eu, 0x00006034u, 0x000021a4u, 0x00050051u, 0x0000000fu, 0x000021a6u, 0x0000218bu, 0x0000000du, 0x0003003eu, 0x00006035u, 0x000021a6u, 0x00050051u, 0x00000013u, 0x000021a8u, 0x0000218bu, 0x0000000eu, 0x0003003eu, 0x00006036u, 0x000021a8u, 0x00120050u, 0x00000014u, 0x00006046u, 0x0000218cu, 0x0000218eu, 0x00002190u, 0x00002192u, 0x00002194u, 0x00002196u, 0x00002198u, 0x0000219au, 0x0000219cu, 0x0000219eu, 0x000021a0u, 0x000021a2u, 0x000021a4u, 0x000021a6u, 0x000021a8u, 0x0003003eu, 0x00006047u, 0x0000218cu, 0x0003003eu, 0x00006048u, 0x0000218eu, 0x0003003eu, 0x00006049u, 0x00002190u, 0x0003003eu, 0x0000604au, 0x00002192u, 0x0003003eu, 0x0000604bu, 0x00002194u, 0x0003003eu, 0x0000604cu, 0x00002196u, 0x0003003eu, 0x0000604du, 0x00002198u, 0x0003003eu, 0x0000604eu, 0x0000219au, 0x0003003eu, 0x0000604fu, 0x0000219cu, 0x0003003eu, 0x00006050u, 0x0000219eu, 0x0003003eu, 0x00006051u, 0x000021a0u, 0x0003003eu, 0x00006052u, 0x000021a2u, 0x0003003eu, 0x00006053u, 0x000021a4u, 0x0003003eu, 0x00006054u, 0x000021a6u, 0x0003003eu, 0x00006055u, 0x000021a8u, 0x0003003eu, 0x0000626bu, 0x0000218cu, 0x0003003eu, 0x0000626cu, 0x0000218eu, 0x0003003eu, 0x0000626du, 0x00002190u, 0x0003003eu, 0x0000626eu, 0x00002192u, 0x0003003eu, 0x0000626fu, 0x00002194u, 0x0003003eu, 0x00006270u, 0x00002196u, 0x0003003eu, 0x00006271u, 0x00002198u, 0x0003003eu, 0x00006272u, 0x0000219au, 0x0003003eu, 0x00006273u, 0x0000219eu, 0x0003003eu, 0x00006274u, 0x000021a6u, 0x0003003eu, 0x00006275u, 0x000021a8u, 0x00050082u, 0x00000008u, 0x00001aacu, 0x00006eb2u, 0x00001c39u, 0x0003003eu, 0x00001904u, 0x00001aacu, 0x000600a9u, 0x00000008u, 0x00001aaeu, 0x00001a3du, 0x000001a6u, 0x000004f6u, 0x0003003eu, 0x00001905u, 0x00001aaeu, 0x0003003eu, 0x00001907u, 0x00001c31u, 0x0003003eu, 0x00001908u, 0x00001c4bu, 0x0003003eu, 0x00001909u, 0x00001c4fu, 0x0003003eu, 0x0000190au, 0x00001aacu, 0x0003003eu, 0x0000190bu, 0x00001a96u, 0x000500c7u, 0x00000009u, 0x000021b3u, 0x00001c4bu, 0x0000b616u, 0x00070050u, 0x00000009u, 0x000021b4u, 0x00000495u, 0x00000495u, 0x00000495u, 0x00000495u, 0x000500c3u, 0x00000009u, 0x000021b5u, 0x000021b3u, 0x000021b4u, 0x00070050u, 0x00000009u, 0x000021b7u, 0x00001aacu, 0x00001aacu, 0x00001aacu, 0x00001aacu, 0x00050084u, 0x00000009u, 0x000021b8u, 0x000021b5u, 0x000021b7u, 0x00050080u, 0x00000009u, 0x000021bau, 0x00001c31u, 0x000021b8u, 0x0003003eu, 0x00001907u, 0x000021bau, 0x000500c3u, 0x00000009u, 0x000021bdu, 0x000021bau, 0x0000b617u, 0x00040072u, 0x00000013u, 0x000021beu, 0x000021bdu, 0x0003003eu, 0x000021abu, 0x000021beu, 0x0006000cu, 0x00000008u, 0x000021c0u, 0x00000001u, 0x00000049u, 0x00001a96u, 0x0003003eu, 0x000021acu, 0x000021c0u, 0x000500c3u, 0x00000008u, 0x000021c2u, 0x000021c0u, 0x000001a6u, 0x00040072u, 0x00000012u, 0x000021c3u, 0x000021c2u, 0x0003003eu, 0x000021adu, 0x000021c3u, 0x000500c7u, 0x00000008u, 0x000021c5u, 0x000021c0u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x000021c6u, 0x000021c5u, 0x000001a6u, 0x00040072u, 0x00000012u, 0x000021c7u, 0x000021c6u, 0x000500c7u, 0x00000012u, 0x000021c9u, 0x000021c3u, 0x000004afu, 0x00050080u, 0x00000012u, 0x000021cau, 0x000021c7u, 0x000021c9u, 0x0003003eu, 0x000021aeu, 0x000021cau, 0x00070050u, 0x00000013u, 0x000021ccu, 0x000004b3u, 0x000004b3u, 0x000004b3u, 0x000004b3u, 0x000500c4u, 0x00000013u, 0x000021cdu, 0x000021beu, 0x000021ccu, 0x0003003eu, 0x000021abu, 0x000021cdu, 0x000500c3u, 0x00000009u, 0x000021d1u, 0x00001c4bu, 0x0000b617u, 0x00040072u, 0x00000013u, 0x000021d2u, 0x000021d1u, 0x00070050u, 0x00000013u, 0x000021d3u, 0x000021cau, 0x000021cau, 0x000021cau, 0x000021cau, 0x00050084u, 0x00000013u, 0x000021d4u, 0x000021d3u, 0x000021d2u, 0x000500c3u, 0x00000009u, 0x000021d8u, 0x00001c4fu, 0x0000b617u, 0x00040072u, 0x00000013u, 0x000021d9u, 0x000021d8u, 0x00070050u, 0x00000013u, 0x000021dau, 0x000021c3u, 0x000021c3u, 0x000021c3u, 0x000021c3u, 0x00050084u, 0x00000013u, 0x000021dbu, 0x000021dau, 0x000021d9u, 0x00050080u, 0x00000013u, 0x000021dcu, 0x000021d4u, 0x000021dbu, 0x00050080u, 0x00000013u, 0x000021deu, 0x000021cdu, 0x000021dcu, 0x0003003eu, 0x000021abu, 0x000021deu, 0x00070050u, 0x00000013u, 0x000021e0u, 0x000004c9u, 0x000004c9u, 0x000004c9u, 0x000004c9u, 0x000500c3u, 0x00000013u, 0x000021e1u, 0x000021deu, 0x000021e0u, 0x0003003eu, 0x000021abu, 0x000021e1u, 0x0003003eu, 0x000021afu, 0x000021e1u, 0x00040072u, 0x00000009u, 0x000021e7u, 0x000021e1u, 0x0003003eu, 0x000021e4u, 0x000021e7u, 0x00050082u, 0x00000009u, 0x000021eeu, 0x000021e7u, 0x0000b618u, 0x0003003eu, 0x000021e4u, 0x000021eeu, 0x000600cau, 0x00000009u, 0x000021f0u, 0x000021eeu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x000021e4u, 0x000021f0u, 0x00050080u, 0x00000009u, 0x000021f3u, 0x000021f0u, 0x0000b618u, 0x0003003eu, 0x000021e4u, 0x000021f3u, 0x0008000cu, 0x00000009u, 0x000021f5u, 0x00000001u, 0x0000002du, 0x000021f3u, 0x00000310u, 0x00000312u, 0x00040072u, 0x00000013u, 0x000021f6u, 0x000021f5u, 0x0003003eu, 0x000021ebu, 0x000021f6u, 0x00040072u, 0x0000031cu, 0x000021e9u, 0x000021f6u, 0x0004007cu, 0x00000010u, 0x000021eau, 0x000021e9u, 0x0003003eu, 0x000021e5u, 0x000021eau, 0x0003003eu, 0x000021b0u, 0x000021eau, 0x0003003eu, 0x00001906u, 0x000021eau, 0x0003003eu, 0x0000190cu, 0x00001099u, 0x0003003eu, 0x0000190du, 0x00001aaeu, 0x000500a7u, 0x00000063u, 0x00001abau, 0x00001639u, 0x00001a23u, 0x000300f7u, 0x00001abbu, 0x00000000u, 0x000400fau, 0x00001abau, 0x00001abcu, 0x00001abbu, 0x000200f8u, 0x00001abcu, 0x000500c7u, 0x00000006u, 0x00001abeu, 0x0000199bu, 0x00000345u, 0x000500abu, 0x00000063u, 0x00001abfu, 0x00001abeu, 0x0000028eu, 0x000300f7u, 0x00001ac0u, 0x00000000u, 0x000400fau, 0x00001abfu, 0x00001ac1u, 0x00001ac0u, 0x000200f8u, 0x00001ac1u, 0x00050084u, 0x00000008u, 0x00001ac3u, 0x00001aaeu, 0x00000556u, 0x0003003eu, 0x0000190du, 0x00001ac3u, 0x000200f9u, 0x00001ac0u, 0x000200f8u, 0x00001ac0u, 0x000700f5u, 0x00000008u, 0x00006ef0u, 0x00001aaeu, 0x00001abcu, 0x00001ac3u, 0x00001ac1u, 0x000200f9u, 0x00001abbu, 0x000200f8u, 0x00001abbu, 0x000700f5u, 0x00000008u, 0x00006eefu, 0x00001aaeu, 0x00001aa5u, 0x00006ef0u, 0x00001ac0u, 0x0003003eu, 0x00001912u, 0x00001c33u, 0x0003003eu, 0x00001913u, 0x00001c53u, 0x0003003eu, 0x00001914u, 0x00001c57u, 0x0003003eu, 0x00001915u, 0x00001aacu, 0x0003003eu, 0x00001916u, 0x00001a96u, 0x0003003eu, 0x00001917u, 0x000019f6u, 0x0003003eu, 0x00001918u, 0x00001a23u, 0x0003003eu, 0x00001919u, 0x00006eefu, 0x0003003eu, 0x0000191eu, 0x00001099u, 0x0004003du, 0x00000009u, 0x00002208u, 0x00001912u, 0x0008004fu, 0x0000005du, 0x00002209u, 0x00002208u, 0x00002208u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000220au, 0x00001913u, 0x0008004fu, 0x0000005du, 0x0000220bu, 0x0000220au, 0x0000220au, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x0000220du, 0x0000220bu, 0x0000b614u, 0x00060050u, 0x0000005du, 0x0000220eu, 0x00000495u, 0x00000495u, 0x00000495u, 0x000500c3u, 0x0000005du, 0x0000220fu, 0x0000220du, 0x0000220eu, 0x00060050u, 0x0000005du, 0x00002211u, 0x00001aacu, 0x00001aacu, 0x00001aacu, 0x00050084u, 0x0000005du, 0x00002212u, 0x0000220fu, 0x00002211u, 0x00050080u, 0x0000005du, 0x00002213u, 0x00002209u, 0x00002212u, 0x0003003eu, 0x000021f7u, 0x00002213u, 0x000300f7u, 0x00002215u, 0x00000000u, 0x000400fau, 0x00001a23u, 0x00002216u, 0x00002215u, 0x000200f8u, 0x00002216u, 0x0004003du, 0x00000009u, 0x00002219u, 0x00001913u, 0x0008004fu, 0x0000005du, 0x0000221au, 0x00002219u, 0x00002219u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x0000221cu, 0x0000221au, 0x0000b614u, 0x000500c3u, 0x0000005du, 0x0000221eu, 0x0000221cu, 0x0000220eu, 0x00060050u, 0x0000005du, 0x0000221fu, 0x00006eefu, 0x00006eefu, 0x00006eefu, 0x00050084u, 0x0000005du, 0x00002220u, 0x0000221fu, 0x0000221eu, 0x00050080u, 0x0000005du, 0x00002221u, 0x00002213u, 0x00002220u, 0x0003003eu, 0x000021f8u, 0x00002221u, 0x000300f7u, 0x00002222u, 0x00000000u, 0x000400fau, 0x00000557u, 0x00002223u, 0x00002224u, 0x000200f8u, 0x00002224u, 0x0004003du, 0x00000009u, 0x00002232u, 0x00001914u, 0x0008004fu, 0x0000005du, 0x00002233u, 0x00002232u, 0x00002232u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00002235u, 0x00002233u, 0x0000b61au, 0x000500c3u, 0x0000005du, 0x00002237u, 0x00002235u, 0x0000220eu, 0x00050080u, 0x0000005du, 0x00002238u, 0x00002213u, 0x00002237u, 0x0003003eu, 0x000021f9u, 0x00002238u, 0x000200f9u, 0x00002222u, 0x000200f8u, 0x00002223u, 0x0006000cu, 0x00000008u, 0x00002227u, 0x00000001u, 0x00000005u, 0x00006eefu, 0x0004003du, 0x00000009u, 0x00002228u, 0x00001914u, 0x0008004fu, 0x0000005du, 0x00002229u, 0x00002228u, 0x00002228u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x0000222bu, 0x00002229u, 0x0000b61au, 0x000500c3u, 0x0000005du, 0x0000222du, 0x0000222bu, 0x0000220eu, 0x00060050u, 0x0000005du, 0x0000222eu, 0x00002227u, 0x00002227u, 0x00002227u, 0x00050084u, 0x0000005du, 0x0000222fu, 0x0000222eu, 0x0000222du, 0x00050080u, 0x0000005du, 0x00002230u, 0x00002213u, 0x0000222fu, 0x0003003eu, 0x000021f9u, 0x00002230u, 0x000200f9u, 0x00002222u, 0x000200f8u, 0x00002222u, 0x000700f5u, 0x0000005du, 0x00006f0du, 0x00002230u, 0x00002223u, 0x00002238u, 0x00002224u, 0x000200f9u, 0x00002215u, 0x000200f8u, 0x00002215u, 0x000700f5u, 0x0000005du, 0x00006f04u, 0x00006f00u, 0x00001abbu, 0x00006f0du, 0x00002222u, 0x000700f5u, 0x0000005du, 0x00006ef9u, 0x00006f00u, 0x00001abbu, 0x00002221u, 0x00002222u, 0x000300f7u, 0x0000223au, 0x00000000u, 0x000400fau, 0x000019f6u, 0x0000223bu, 0x0000223cu, 0x000200f8u, 0x0000223cu, 0x000500c3u, 0x0000005du, 0x00002254u, 0x00002213u, 0x0000b615u, 0x0003003eu, 0x00002200u, 0x00002254u, 0x0007004fu, 0x00000058u, 0x0000241du, 0x00002254u, 0x00002254u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000241bu, 0x0000241du, 0x0003003eu, 0x0000191au, 0x0000241du, 0x000300f7u, 0x00002257u, 0x00000000u, 0x000400fau, 0x00001a23u, 0x00002258u, 0x00002257u, 0x000200f8u, 0x00002258u, 0x000500c3u, 0x0000005du, 0x0000225bu, 0x00006ef9u, 0x0000b615u, 0x0003003eu, 0x00002201u, 0x0000225bu, 0x0007004fu, 0x00000058u, 0x00002420u, 0x0000225bu, 0x0000225bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000241eu, 0x00002420u, 0x0003003eu, 0x0000191bu, 0x00002420u, 0x000500c3u, 0x0000005du, 0x0000225fu, 0x00006f04u, 0x0000b615u, 0x0003003eu, 0x00002202u, 0x0000225fu, 0x0007004fu, 0x00000058u, 0x00002423u, 0x0000225fu, 0x0000225fu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002421u, 0x00002423u, 0x0003003eu, 0x0000191cu, 0x00002423u, 0x000200f9u, 0x00002257u, 0x000200f8u, 0x00002257u, 0x000700f5u, 0x00000058u, 0x00006ff7u, 0x00006fceu, 0x0000223cu, 0x00002423u, 0x00002258u, 0x000700f5u, 0x00000058u, 0x00006fe1u, 0x00006fceu, 0x0000223cu, 0x00002420u, 0x00002258u, 0x000200f9u, 0x0000223au, 0x000200f8u, 0x0000223bu, 0x000500c3u, 0x0000005du, 0x0000223fu, 0x00002213u, 0x0000b615u, 0x0003003eu, 0x000021fau, 0x0000223fu, 0x0003003eu, 0x000021fbu, 0x00001099u, 0x00050041u, 0x00000040u, 0x00002299u, 0x000021fau, 0x000002f8u, 0x0004003du, 0x00000008u, 0x0000229au, 0x00002299u, 0x0003003eu, 0x0000228fu, 0x0000229au, 0x000500b3u, 0x00000063u, 0x0000229cu, 0x0000229au, 0x0000019cu, 0x0003003eu, 0x00002290u, 0x0000229cu, 0x000500c7u, 0x00000008u, 0x0000229eu, 0x0000229au, 0x00000424u, 0x0003003eu, 0x0000228fu, 0x0000229eu, 0x0003003eu, 0x00002292u, 0x0000229eu, 0x0006000cu, 0x00000008u, 0x000022fau, 0x00000001u, 0x0000004au, 0x0000229eu, 0x00050082u, 0x00000008u, 0x000022fbu, 0x000001ecu, 0x000022fau, 0x0007000cu, 0x00000008u, 0x000022fcu, 0x00000001u, 0x00000027u, 0x000022fbu, 0x000001ecu, 0x0003003eu, 0x000022f2u, 0x000022fcu, 0x000500c4u, 0x00000008u, 0x000022ffu, 0x0000229eu, 0x000022fcu, 0x000500c7u, 0x00000008u, 0x00002300u, 0x000022ffu, 0x0000033fu, 0x0003003eu, 0x000022f3u, 0x00002300u, 0x000500c7u, 0x00000008u, 0x00002302u, 0x00002300u, 0x00000311u, 0x0003003eu, 0x000022f4u, 0x00002302u, 0x000500c3u, 0x00000008u, 0x00002304u, 0x00002300u, 0x000001d9u, 0x0003003eu, 0x000022f6u, 0x00000404u, 0x00050041u, 0x0000011eu, 0x00002305u, 0x000022f6u, 0x00002304u, 0x0004003du, 0x0000011du, 0x00002306u, 0x00002305u, 0x00040072u, 0x00000058u, 0x00002307u, 0x00002306u, 0x0003003eu, 0x000022f5u, 0x00002307u, 0x00050041u, 0x00000040u, 0x00002308u, 0x000022f5u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002309u, 0x00002308u, 0x00050084u, 0x00000008u, 0x0000230bu, 0x00002309u, 0x00002302u, 0x000500c3u, 0x00000008u, 0x0000230cu, 0x0000230bu, 0x000001dfu, 0x00050041u, 0x00000040u, 0x0000230du, 0x000022f5u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x0000230eu, 0x0000230du, 0x00050080u, 0x00000008u, 0x0000230fu, 0x0000230cu, 0x0000230eu, 0x0003003eu, 0x000022f7u, 0x0000230fu, 0x00050050u, 0x00000058u, 0x00002312u, 0x0000230fu, 0x000022fcu, 0x0003003eu, 0x000022f8u, 0x00002312u, 0x0003003eu, 0x00002291u, 0x00002312u, 0x00050041u, 0x00000040u, 0x000022a1u, 0x00002291u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000022a2u, 0x000022a1u, 0x0003003eu, 0x00002293u, 0x000022a2u, 0x0004003du, 0x0000005du, 0x000022a3u, 0x000021fau, 0x0007004fu, 0x00000058u, 0x000022a4u, 0x000022a3u, 0x000022a3u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x000022a5u, 0x00002291u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000022a6u, 0x000022a5u, 0x00050050u, 0x00000058u, 0x000022a7u, 0x000022a6u, 0x000022a6u, 0x00050084u, 0x00000058u, 0x000022a8u, 0x000022a4u, 0x000022a7u, 0x0003003eu, 0x00002294u, 0x000022a8u, 0x000500c3u, 0x00000008u, 0x000022aau, 0x00000437u, 0x000022a2u, 0x0004007eu, 0x00000008u, 0x000022abu, 0x000022aau, 0x000500c7u, 0x00000008u, 0x000022acu, 0x00000436u, 0x000022abu, 0x0003003eu, 0x00002295u, 0x000022acu, 0x0004003du, 0x00000058u, 0x000022adu, 0x00002294u, 0x00050050u, 0x00000058u, 0x000022afu, 0x000022acu, 0x000022acu, 0x000500c7u, 0x00000058u, 0x000022b0u, 0x000022adu, 0x000022afu, 0x0003003eu, 0x00002296u, 0x000022b0u, 0x000500abu, 0x00000063u, 0x000022b2u, 0x000022a2u, 0x000001ecu, 0x000300f7u, 0x000022b3u, 0x00000000u, 0x000400fau, 0x000022b2u, 0x000022b4u, 0x000022b5u, 0x000200f8u, 0x000022b5u, 0x0004003du, 0x00000058u, 0x000022bbu, 0x00002294u, 0x000500c4u, 0x00000058u, 0x000022bdu, 0x000022bbu, 0x0000b619u, 0x0003003eu, 0x00002297u, 0x000022bdu, 0x000200f9u, 0x000022b3u, 0x000200f8u, 0x000022b4u, 0x0004003du, 0x00000058u, 0x000022b6u, 0x00002294u, 0x00050082u, 0x00000008u, 0x000022b8u, 0x000001e9u, 0x000022a2u, 0x00050050u, 0x00000058u, 0x000022b9u, 0x000022b8u, 0x000022b8u, 0x000500c3u, 0x00000058u, 0x000022bau, 0x000022b6u, 0x000022b9u, 0x0003003eu, 0x00002294u, 0x000022bau, 0x0003003eu, 0x00002297u, 0x000022bau, 0x000200f9u, 0x000022b3u, 0x000200f8u, 0x000022b3u, 0x0004003du, 0x00000058u, 0x000022beu, 0x00002296u, 0x000500abu, 0x00000451u, 0x000022bfu, 0x000022beu, 0x00000450u, 0x0004009au, 0x00000063u, 0x000022c0u, 0x000022bfu, 0x000300f7u, 0x000022c1u, 0x00000000u, 0x000400fau, 0x000022c0u, 0x000022c2u, 0x000022c1u, 0x000200f8u, 0x000022c2u, 0x00050041u, 0x00000040u, 0x000022c3u, 0x00002296u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000022c4u, 0x000022c3u, 0x000500abu, 0x00000063u, 0x000022c6u, 0x000022c4u, 0x000022acu, 0x000300f7u, 0x000022c7u, 0x00000000u, 0x000400fau, 0x000022c6u, 0x000022c8u, 0x000022c7u, 0x000200f8u, 0x000022c8u, 0x0004003du, 0x00000008u, 0x000022cau, 0x000022c3u, 0x000500abu, 0x00000063u, 0x000022cbu, 0x000022cau, 0x0000019cu, 0x000200f9u, 0x000022c7u, 0x000200f8u, 0x000022c7u, 0x000700f5u, 0x00000063u, 0x000022ccu, 0x000022c6u, 0x000022c2u, 0x000022cbu, 0x000022c8u, 0x000300f7u, 0x000022cdu, 0x00000000u, 0x000400fau, 0x000022ccu, 0x000022ceu, 0x000022cdu, 0x000200f8u, 0x000022ceu, 0x00050041u, 0x00000040u, 0x000022cfu, 0x00002294u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000022d0u, 0x000022cfu, 0x000500c7u, 0x00000008u, 0x000022d1u, 0x000022d0u, 0x00000437u, 0x000500aau, 0x00000063u, 0x000022d2u, 0x000022d1u, 0x0000019cu, 0x000300f7u, 0x000022d3u, 0x00000000u, 0x000400fau, 0x000022d2u, 0x000022d4u, 0x000022d5u, 0x000200f8u, 0x000022d5u, 0x00050041u, 0x00000040u, 0x000022d7u, 0x00002297u, 0x0000028eu, 0x0003003eu, 0x000022d7u, 0x0000046au, 0x000200f9u, 0x000022d3u, 0x000200f8u, 0x000022d4u, 0x00050041u, 0x00000040u, 0x000022d6u, 0x00002297u, 0x0000028eu, 0x0003003eu, 0x000022d6u, 0x00000424u, 0x000200f9u, 0x000022d3u, 0x000200f8u, 0x000022d3u, 0x0003003eu, 0x000021fbu, 0x0000046cu, 0x000200f9u, 0x000022cdu, 0x000200f8u, 0x000022cdu, 0x000600a9u, 0x00000063u, 0x0000b631u, 0x000022ccu, 0x0000046cu, 0x00001099u, 0x00050041u, 0x00000040u, 0x000022d8u, 0x00002296u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000022d9u, 0x000022d8u, 0x000500abu, 0x00000063u, 0x000022dbu, 0x000022d9u, 0x000022acu, 0x000300f7u, 0x000022dcu, 0x00000000u, 0x000400fau, 0x000022dbu, 0x000022ddu, 0x000022dcu, 0x000200f8u, 0x000022ddu, 0x0004003du, 0x00000008u, 0x000022dfu, 0x000022d8u, 0x000500abu, 0x00000063u, 0x000022e0u, 0x000022dfu, 0x0000019cu, 0x000200f9u, 0x000022dcu, 0x000200f8u, 0x000022dcu, 0x000700f5u, 0x00000063u, 0x000022e1u, 0x000022dbu, 0x000022cdu, 0x000022e0u, 0x000022ddu, 0x000300f7u, 0x000022e2u, 0x00000000u, 0x000400fau, 0x000022e1u, 0x000022e3u, 0x000022e2u, 0x000200f8u, 0x000022e3u, 0x00050041u, 0x00000040u, 0x000022e4u, 0x00002294u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000022e5u, 0x000022e4u, 0x000500c7u, 0x00000008u, 0x000022e6u, 0x000022e5u, 0x00000437u, 0x000500aau, 0x00000063u, 0x000022e7u, 0x000022e6u, 0x0000019cu, 0x000300f7u, 0x000022e8u, 0x00000000u, 0x000400fau, 0x000022e7u, 0x000022e9u, 0x000022eau, 0x000200f8u, 0x000022eau, 0x00050041u, 0x00000040u, 0x000022ecu, 0x00002297u, 0x000002f4u, 0x0003003eu, 0x000022ecu, 0x0000046au, 0x000200f9u, 0x000022e8u, 0x000200f8u, 0x000022e9u, 0x00050041u, 0x00000040u, 0x000022ebu, 0x00002297u, 0x000002f4u, 0x0003003eu, 0x000022ebu, 0x00000424u, 0x000200f9u, 0x000022e8u, 0x000200f8u, 0x000022e8u, 0x0003003eu, 0x000021fbu, 0x0000046cu, 0x000200f9u, 0x000022e2u, 0x000200f8u, 0x000022e2u, 0x000600a9u, 0x00000063u, 0x0000b632u, 0x000022e1u, 0x0000046cu, 0x0000b631u, 0x000200f9u, 0x000022c1u, 0x000200f8u, 0x000022c1u, 0x000700f5u, 0x00000063u, 0x00006f1du, 0x00001099u, 0x000022b3u, 0x0000b632u, 0x000022e2u, 0x000300f7u, 0x000022eeu, 0x00000000u, 0x000400fau, 0x0000229cu, 0x000022efu, 0x000022eeu, 0x000200f8u, 0x000022efu, 0x0003003eu, 0x00002297u, 0x00000485u, 0x0003003eu, 0x000021fbu, 0x0000046cu, 0x000200f9u, 0x000022eeu, 0x000200f8u, 0x000022eeu, 0x000600a9u, 0x00000063u, 0x0000b633u, 0x0000229cu, 0x0000046cu, 0x00006f1du, 0x0004003du, 0x00000058u, 0x000022f0u, 0x00002297u, 0x0008000cu, 0x00000058u, 0x000022f1u, 0x00000001u, 0x0000002du, 0x000022f0u, 0x00000488u, 0x0000048au, 0x0003003eu, 0x00002298u, 0x000022f1u, 0x0003003eu, 0x0000191eu, 0x0000b633u, 0x0003003eu, 0x0000191au, 0x000022f1u, 0x000300f7u, 0x00002244u, 0x00000000u, 0x000400fau, 0x00001a23u, 0x00002245u, 0x00002244u, 0x000200f8u, 0x00002245u, 0x000500c3u, 0x0000005du, 0x00002248u, 0x00006ef9u, 0x0000b615u, 0x0003003eu, 0x000021fcu, 0x00002248u, 0x0003003eu, 0x000021fdu, 0x0000b633u, 0x00050041u, 0x00000040u, 0x0000231du, 0x000021fcu, 0x000002f8u, 0x0004003du, 0x00000008u, 0x0000231eu, 0x0000231du, 0x0003003eu, 0x00002313u, 0x0000231eu, 0x000500b3u, 0x00000063u, 0x00002320u, 0x0000231eu, 0x0000019cu, 0x0003003eu, 0x00002314u, 0x00002320u, 0x000500c7u, 0x00000008u, 0x00002322u, 0x0000231eu, 0x00000424u, 0x0003003eu, 0x00002313u, 0x00002322u, 0x0003003eu, 0x00002316u, 0x00002322u, 0x0006000cu, 0x00000008u, 0x0000237eu, 0x00000001u, 0x0000004au, 0x00002322u, 0x00050082u, 0x00000008u, 0x0000237fu, 0x000001ecu, 0x0000237eu, 0x0007000cu, 0x00000008u, 0x00002380u, 0x00000001u, 0x00000027u, 0x0000237fu, 0x000001ecu, 0x0003003eu, 0x00002376u, 0x00002380u, 0x000500c4u, 0x00000008u, 0x00002383u, 0x00002322u, 0x00002380u, 0x000500c7u, 0x00000008u, 0x00002384u, 0x00002383u, 0x0000033fu, 0x0003003eu, 0x00002377u, 0x00002384u, 0x000500c7u, 0x00000008u, 0x00002386u, 0x00002384u, 0x00000311u, 0x0003003eu, 0x00002378u, 0x00002386u, 0x000500c3u, 0x00000008u, 0x00002388u, 0x00002384u, 0x000001d9u, 0x0003003eu, 0x0000237au, 0x00000404u, 0x00050041u, 0x0000011eu, 0x00002389u, 0x0000237au, 0x00002388u, 0x0004003du, 0x0000011du, 0x0000238au, 0x00002389u, 0x00040072u, 0x00000058u, 0x0000238bu, 0x0000238au, 0x0003003eu, 0x00002379u, 0x0000238bu, 0x00050041u, 0x00000040u, 0x0000238cu, 0x00002379u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000238du, 0x0000238cu, 0x00050084u, 0x00000008u, 0x0000238fu, 0x0000238du, 0x00002386u, 0x000500c3u, 0x00000008u, 0x00002390u, 0x0000238fu, 0x000001dfu, 0x00050041u, 0x00000040u, 0x00002391u, 0x00002379u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00002392u, 0x00002391u, 0x00050080u, 0x00000008u, 0x00002393u, 0x00002390u, 0x00002392u, 0x0003003eu, 0x0000237bu, 0x00002393u, 0x00050050u, 0x00000058u, 0x00002396u, 0x00002393u, 0x00002380u, 0x0003003eu, 0x0000237cu, 0x00002396u, 0x0003003eu, 0x00002315u, 0x00002396u, 0x00050041u, 0x00000040u, 0x00002325u, 0x00002315u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002326u, 0x00002325u, 0x0003003eu, 0x00002317u, 0x00002326u, 0x0004003du, 0x0000005du, 0x00002327u, 0x000021fcu, 0x0007004fu, 0x00000058u, 0x00002328u, 0x00002327u, 0x00002327u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x00002329u, 0x00002315u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x0000232au, 0x00002329u, 0x00050050u, 0x00000058u, 0x0000232bu, 0x0000232au, 0x0000232au, 0x00050084u, 0x00000058u, 0x0000232cu, 0x00002328u, 0x0000232bu, 0x0003003eu, 0x00002318u, 0x0000232cu, 0x000500c3u, 0x00000008u, 0x0000232eu, 0x00000437u, 0x00002326u, 0x0004007eu, 0x00000008u, 0x0000232fu, 0x0000232eu, 0x000500c7u, 0x00000008u, 0x00002330u, 0x00000436u, 0x0000232fu, 0x0003003eu, 0x00002319u, 0x00002330u, 0x0004003du, 0x00000058u, 0x00002331u, 0x00002318u, 0x00050050u, 0x00000058u, 0x00002333u, 0x00002330u, 0x00002330u, 0x000500c7u, 0x00000058u, 0x00002334u, 0x00002331u, 0x00002333u, 0x0003003eu, 0x0000231au, 0x00002334u, 0x000500abu, 0x00000063u, 0x00002336u, 0x00002326u, 0x000001ecu, 0x000300f7u, 0x00002337u, 0x00000000u, 0x000400fau, 0x00002336u, 0x00002338u, 0x00002339u, 0x000200f8u, 0x00002339u, 0x0004003du, 0x00000058u, 0x0000233fu, 0x00002318u, 0x000500c4u, 0x00000058u, 0x00002341u, 0x0000233fu, 0x0000b619u, 0x0003003eu, 0x0000231bu, 0x00002341u, 0x000200f9u, 0x00002337u, 0x000200f8u, 0x00002338u, 0x0004003du, 0x00000058u, 0x0000233au, 0x00002318u, 0x00050082u, 0x00000008u, 0x0000233cu, 0x000001e9u, 0x00002326u, 0x00050050u, 0x00000058u, 0x0000233du, 0x0000233cu, 0x0000233cu, 0x000500c3u, 0x00000058u, 0x0000233eu, 0x0000233au, 0x0000233du, 0x0003003eu, 0x00002318u, 0x0000233eu, 0x0003003eu, 0x0000231bu, 0x0000233eu, 0x000200f9u, 0x00002337u, 0x000200f8u, 0x00002337u, 0x0004003du, 0x00000058u, 0x00002342u, 0x0000231au, 0x000500abu, 0x00000451u, 0x00002343u, 0x00002342u, 0x00000450u, 0x0004009au, 0x00000063u, 0x00002344u, 0x00002343u, 0x000300f7u, 0x00002345u, 0x00000000u, 0x000400fau, 0x00002344u, 0x00002346u, 0x00002345u, 0x000200f8u, 0x00002346u, 0x00050041u, 0x00000040u, 0x00002347u, 0x0000231au, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00002348u, 0x00002347u, 0x000500abu, 0x00000063u, 0x0000234au, 0x00002348u, 0x00002330u, 0x000300f7u, 0x0000234bu, 0x00000000u, 0x000400fau, 0x0000234au, 0x0000234cu, 0x0000234bu, 0x000200f8u, 0x0000234cu, 0x0004003du, 0x00000008u, 0x0000234eu, 0x00002347u, 0x000500abu, 0x00000063u, 0x0000234fu, 0x0000234eu, 0x0000019cu, 0x000200f9u, 0x0000234bu, 0x000200f8u, 0x0000234bu, 0x000700f5u, 0x00000063u, 0x00002350u, 0x0000234au, 0x00002346u, 0x0000234fu, 0x0000234cu, 0x000300f7u, 0x00002351u, 0x00000000u, 0x000400fau, 0x00002350u, 0x00002352u, 0x00002351u, 0x000200f8u, 0x00002352u, 0x00050041u, 0x00000040u, 0x00002353u, 0x00002318u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00002354u, 0x00002353u, 0x000500c7u, 0x00000008u, 0x00002355u, 0x00002354u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00002356u, 0x00002355u, 0x0000019cu, 0x000300f7u, 0x00002357u, 0x00000000u, 0x000400fau, 0x00002356u, 0x00002358u, 0x00002359u, 0x000200f8u, 0x00002359u, 0x00050041u, 0x00000040u, 0x0000235bu, 0x0000231bu, 0x0000028eu, 0x0003003eu, 0x0000235bu, 0x0000046au, 0x000200f9u, 0x00002357u, 0x000200f8u, 0x00002358u, 0x00050041u, 0x00000040u, 0x0000235au, 0x0000231bu, 0x0000028eu, 0x0003003eu, 0x0000235au, 0x00000424u, 0x000200f9u, 0x00002357u, 0x000200f8u, 0x00002357u, 0x0003003eu, 0x000021fdu, 0x0000046cu, 0x000200f9u, 0x00002351u, 0x000200f8u, 0x00002351u, 0x000600a9u, 0x00000063u, 0x0000b634u, 0x00002350u, 0x0000046cu, 0x0000b633u, 0x00050041u, 0x00000040u, 0x0000235cu, 0x0000231au, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000235du, 0x0000235cu, 0x000500abu, 0x00000063u, 0x0000235fu, 0x0000235du, 0x00002330u, 0x000300f7u, 0x00002360u, 0x00000000u, 0x000400fau, 0x0000235fu, 0x00002361u, 0x00002360u, 0x000200f8u, 0x00002361u, 0x0004003du, 0x00000008u, 0x00002363u, 0x0000235cu, 0x000500abu, 0x00000063u, 0x00002364u, 0x00002363u, 0x0000019cu, 0x000200f9u, 0x00002360u, 0x000200f8u, 0x00002360u, 0x000700f5u, 0x00000063u, 0x00002365u, 0x0000235fu, 0x00002351u, 0x00002364u, 0x00002361u, 0x000300f7u, 0x00002366u, 0x00000000u, 0x000400fau, 0x00002365u, 0x00002367u, 0x00002366u, 0x000200f8u, 0x00002367u, 0x00050041u, 0x00000040u, 0x00002368u, 0x00002318u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002369u, 0x00002368u, 0x000500c7u, 0x00000008u, 0x0000236au, 0x00002369u, 0x00000437u, 0x000500aau, 0x00000063u, 0x0000236bu, 0x0000236au, 0x0000019cu, 0x000300f7u, 0x0000236cu, 0x00000000u, 0x000400fau, 0x0000236bu, 0x0000236du, 0x0000236eu, 0x000200f8u, 0x0000236eu, 0x00050041u, 0x00000040u, 0x00002370u, 0x0000231bu, 0x000002f4u, 0x0003003eu, 0x00002370u, 0x0000046au, 0x000200f9u, 0x0000236cu, 0x000200f8u, 0x0000236du, 0x00050041u, 0x00000040u, 0x0000236fu, 0x0000231bu, 0x000002f4u, 0x0003003eu, 0x0000236fu, 0x00000424u, 0x000200f9u, 0x0000236cu, 0x000200f8u, 0x0000236cu, 0x0003003eu, 0x000021fdu, 0x0000046cu, 0x000200f9u, 0x00002366u, 0x000200f8u, 0x00002366u, 0x000600a9u, 0x00000063u, 0x0000b635u, 0x00002365u, 0x0000046cu, 0x0000b634u, 0x000200f9u, 0x00002345u, 0x000200f8u, 0x00002345u, 0x000700f5u, 0x00000063u, 0x00006f42u, 0x0000b633u, 0x00002337u, 0x0000b635u, 0x00002366u, 0x000300f7u, 0x00002372u, 0x00000000u, 0x000400fau, 0x00002320u, 0x00002373u, 0x00002372u, 0x000200f8u, 0x00002373u, 0x0003003eu, 0x0000231bu, 0x00000485u, 0x0003003eu, 0x000021fdu, 0x0000046cu, 0x000200f9u, 0x00002372u, 0x000200f8u, 0x00002372u, 0x000600a9u, 0x00000063u, 0x0000b636u, 0x00002320u, 0x0000046cu, 0x00006f42u, 0x0004003du, 0x00000058u, 0x00002374u, 0x0000231bu, 0x0008000cu, 0x00000058u, 0x00002375u, 0x00000001u, 0x0000002du, 0x00002374u, 0x00000488u, 0x0000048au, 0x0003003eu, 0x0000231cu, 0x00002375u, 0x0003003eu, 0x0000191eu, 0x0000b636u, 0x0003003eu, 0x0000191bu, 0x00002375u, 0x000500c3u, 0x0000005du, 0x0000224eu, 0x00006f04u, 0x0000b615u, 0x0003003eu, 0x000021feu, 0x0000224eu, 0x0003003eu, 0x000021ffu, 0x0000b636u, 0x00050041u, 0x00000040u, 0x000023a1u, 0x000021feu, 0x000002f8u, 0x0004003du, 0x00000008u, 0x000023a2u, 0x000023a1u, 0x0003003eu, 0x00002397u, 0x000023a2u, 0x000500b3u, 0x00000063u, 0x000023a4u, 0x000023a2u, 0x0000019cu, 0x0003003eu, 0x00002398u, 0x000023a4u, 0x000500c7u, 0x00000008u, 0x000023a6u, 0x000023a2u, 0x00000424u, 0x0003003eu, 0x00002397u, 0x000023a6u, 0x0003003eu, 0x0000239au, 0x000023a6u, 0x0006000cu, 0x00000008u, 0x00002402u, 0x00000001u, 0x0000004au, 0x000023a6u, 0x00050082u, 0x00000008u, 0x00002403u, 0x000001ecu, 0x00002402u, 0x0007000cu, 0x00000008u, 0x00002404u, 0x00000001u, 0x00000027u, 0x00002403u, 0x000001ecu, 0x0003003eu, 0x000023fau, 0x00002404u, 0x000500c4u, 0x00000008u, 0x00002407u, 0x000023a6u, 0x00002404u, 0x000500c7u, 0x00000008u, 0x00002408u, 0x00002407u, 0x0000033fu, 0x0003003eu, 0x000023fbu, 0x00002408u, 0x000500c7u, 0x00000008u, 0x0000240au, 0x00002408u, 0x00000311u, 0x0003003eu, 0x000023fcu, 0x0000240au, 0x000500c3u, 0x00000008u, 0x0000240cu, 0x00002408u, 0x000001d9u, 0x0003003eu, 0x000023feu, 0x00000404u, 0x00050041u, 0x0000011eu, 0x0000240du, 0x000023feu, 0x0000240cu, 0x0004003du, 0x0000011du, 0x0000240eu, 0x0000240du, 0x00040072u, 0x00000058u, 0x0000240fu, 0x0000240eu, 0x0003003eu, 0x000023fdu, 0x0000240fu, 0x00050041u, 0x00000040u, 0x00002410u, 0x000023fdu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002411u, 0x00002410u, 0x00050084u, 0x00000008u, 0x00002413u, 0x00002411u, 0x0000240au, 0x000500c3u, 0x00000008u, 0x00002414u, 0x00002413u, 0x000001dfu, 0x00050041u, 0x00000040u, 0x00002415u, 0x000023fdu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00002416u, 0x00002415u, 0x00050080u, 0x00000008u, 0x00002417u, 0x00002414u, 0x00002416u, 0x0003003eu, 0x000023ffu, 0x00002417u, 0x00050050u, 0x00000058u, 0x0000241au, 0x00002417u, 0x00002404u, 0x0003003eu, 0x00002400u, 0x0000241au, 0x0003003eu, 0x00002399u, 0x0000241au, 0x00050041u, 0x00000040u, 0x000023a9u, 0x00002399u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000023aau, 0x000023a9u, 0x0003003eu, 0x0000239bu, 0x000023aau, 0x0004003du, 0x0000005du, 0x000023abu, 0x000021feu, 0x0007004fu, 0x00000058u, 0x000023acu, 0x000023abu, 0x000023abu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x000023adu, 0x00002399u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000023aeu, 0x000023adu, 0x00050050u, 0x00000058u, 0x000023afu, 0x000023aeu, 0x000023aeu, 0x00050084u, 0x00000058u, 0x000023b0u, 0x000023acu, 0x000023afu, 0x0003003eu, 0x0000239cu, 0x000023b0u, 0x000500c3u, 0x00000008u, 0x000023b2u, 0x00000437u, 0x000023aau, 0x0004007eu, 0x00000008u, 0x000023b3u, 0x000023b2u, 0x000500c7u, 0x00000008u, 0x000023b4u, 0x00000436u, 0x000023b3u, 0x0003003eu, 0x0000239du, 0x000023b4u, 0x0004003du, 0x00000058u, 0x000023b5u, 0x0000239cu, 0x00050050u, 0x00000058u, 0x000023b7u, 0x000023b4u, 0x000023b4u, 0x000500c7u, 0x00000058u, 0x000023b8u, 0x000023b5u, 0x000023b7u, 0x0003003eu, 0x0000239eu, 0x000023b8u, 0x000500abu, 0x00000063u, 0x000023bau, 0x000023aau, 0x000001ecu, 0x000300f7u, 0x000023bbu, 0x00000000u, 0x000400fau, 0x000023bau, 0x000023bcu, 0x000023bdu, 0x000200f8u, 0x000023bdu, 0x0004003du, 0x00000058u, 0x000023c3u, 0x0000239cu, 0x000500c4u, 0x00000058u, 0x000023c5u, 0x000023c3u, 0x0000b619u, 0x0003003eu, 0x0000239fu, 0x000023c5u, 0x000200f9u, 0x000023bbu, 0x000200f8u, 0x000023bcu, 0x0004003du, 0x00000058u, 0x000023beu, 0x0000239cu, 0x00050082u, 0x00000008u, 0x000023c0u, 0x000001e9u, 0x000023aau, 0x00050050u, 0x00000058u, 0x000023c1u, 0x000023c0u, 0x000023c0u, 0x000500c3u, 0x00000058u, 0x000023c2u, 0x000023beu, 0x000023c1u, 0x0003003eu, 0x0000239cu, 0x000023c2u, 0x0003003eu, 0x0000239fu, 0x000023c2u, 0x000200f9u, 0x000023bbu, 0x000200f8u, 0x000023bbu, 0x0004003du, 0x00000058u, 0x000023c6u, 0x0000239eu, 0x000500abu, 0x00000451u, 0x000023c7u, 0x000023c6u, 0x00000450u, 0x0004009au, 0x00000063u, 0x000023c8u, 0x000023c7u, 0x000300f7u, 0x000023c9u, 0x00000000u, 0x000400fau, 0x000023c8u, 0x000023cau, 0x000023c9u, 0x000200f8u, 0x000023cau, 0x00050041u, 0x00000040u, 0x000023cbu, 0x0000239eu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000023ccu, 0x000023cbu, 0x000500abu, 0x00000063u, 0x000023ceu, 0x000023ccu, 0x000023b4u, 0x000300f7u, 0x000023cfu, 0x00000000u, 0x000400fau, 0x000023ceu, 0x000023d0u, 0x000023cfu, 0x000200f8u, 0x000023d0u, 0x0004003du, 0x00000008u, 0x000023d2u, 0x000023cbu, 0x000500abu, 0x00000063u, 0x000023d3u, 0x000023d2u, 0x0000019cu, 0x000200f9u, 0x000023cfu, 0x000200f8u, 0x000023cfu, 0x000700f5u, 0x00000063u, 0x000023d4u, 0x000023ceu, 0x000023cau, 0x000023d3u, 0x000023d0u, 0x000300f7u, 0x000023d5u, 0x00000000u, 0x000400fau, 0x000023d4u, 0x000023d6u, 0x000023d5u, 0x000200f8u, 0x000023d6u, 0x00050041u, 0x00000040u, 0x000023d7u, 0x0000239cu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000023d8u, 0x000023d7u, 0x000500c7u, 0x00000008u, 0x000023d9u, 0x000023d8u, 0x00000437u, 0x000500aau, 0x00000063u, 0x000023dau, 0x000023d9u, 0x0000019cu, 0x000300f7u, 0x000023dbu, 0x00000000u, 0x000400fau, 0x000023dau, 0x000023dcu, 0x000023ddu, 0x000200f8u, 0x000023ddu, 0x00050041u, 0x00000040u, 0x000023dfu, 0x0000239fu, 0x0000028eu, 0x0003003eu, 0x000023dfu, 0x0000046au, 0x000200f9u, 0x000023dbu, 0x000200f8u, 0x000023dcu, 0x00050041u, 0x00000040u, 0x000023deu, 0x0000239fu, 0x0000028eu, 0x0003003eu, 0x000023deu, 0x00000424u, 0x000200f9u, 0x000023dbu, 0x000200f8u, 0x000023dbu, 0x0003003eu, 0x000021ffu, 0x0000046cu, 0x000200f9u, 0x000023d5u, 0x000200f8u, 0x000023d5u, 0x000600a9u, 0x00000063u, 0x0000b637u, 0x000023d4u, 0x0000046cu, 0x0000b636u, 0x00050041u, 0x00000040u, 0x000023e0u, 0x0000239eu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000023e1u, 0x000023e0u, 0x000500abu, 0x00000063u, 0x000023e3u, 0x000023e1u, 0x000023b4u, 0x000300f7u, 0x000023e4u, 0x00000000u, 0x000400fau, 0x000023e3u, 0x000023e5u, 0x000023e4u, 0x000200f8u, 0x000023e5u, 0x0004003du, 0x00000008u, 0x000023e7u, 0x000023e0u, 0x000500abu, 0x00000063u, 0x000023e8u, 0x000023e7u, 0x0000019cu, 0x000200f9u, 0x000023e4u, 0x000200f8u, 0x000023e4u, 0x000700f5u, 0x00000063u, 0x000023e9u, 0x000023e3u, 0x000023d5u, 0x000023e8u, 0x000023e5u, 0x000300f7u, 0x000023eau, 0x00000000u, 0x000400fau, 0x000023e9u, 0x000023ebu, 0x000023eau, 0x000200f8u, 0x000023ebu, 0x00050041u, 0x00000040u, 0x000023ecu, 0x0000239cu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000023edu, 0x000023ecu, 0x000500c7u, 0x00000008u, 0x000023eeu, 0x000023edu, 0x00000437u, 0x000500aau, 0x00000063u, 0x000023efu, 0x000023eeu, 0x0000019cu, 0x000300f7u, 0x000023f0u, 0x00000000u, 0x000400fau, 0x000023efu, 0x000023f1u, 0x000023f2u, 0x000200f8u, 0x000023f2u, 0x00050041u, 0x00000040u, 0x000023f4u, 0x0000239fu, 0x000002f4u, 0x0003003eu, 0x000023f4u, 0x0000046au, 0x000200f9u, 0x000023f0u, 0x000200f8u, 0x000023f1u, 0x00050041u, 0x00000040u, 0x000023f3u, 0x0000239fu, 0x000002f4u, 0x0003003eu, 0x000023f3u, 0x00000424u, 0x000200f9u, 0x000023f0u, 0x000200f8u, 0x000023f0u, 0x0003003eu, 0x000021ffu, 0x0000046cu, 0x000200f9u, 0x000023eau, 0x000200f8u, 0x000023eau, 0x000600a9u, 0x00000063u, 0x0000b638u, 0x000023e9u, 0x0000046cu, 0x0000b637u, 0x000200f9u, 0x000023c9u, 0x000200f8u, 0x000023c9u, 0x000700f5u, 0x00000063u, 0x00006f67u, 0x0000b636u, 0x000023bbu, 0x0000b638u, 0x000023eau, 0x000300f7u, 0x000023f6u, 0x00000000u, 0x000400fau, 0x000023a4u, 0x000023f7u, 0x000023f6u, 0x000200f8u, 0x000023f7u, 0x0003003eu, 0x0000239fu, 0x00000485u, 0x0003003eu, 0x000021ffu, 0x0000046cu, 0x000200f9u, 0x000023f6u, 0x000200f8u, 0x000023f6u, 0x000600a9u, 0x00000063u, 0x0000b639u, 0x000023a4u, 0x0000046cu, 0x00006f67u, 0x0004003du, 0x00000058u, 0x000023f8u, 0x0000239fu, 0x0008000cu, 0x00000058u, 0x000023f9u, 0x00000001u, 0x0000002du, 0x000023f8u, 0x00000488u, 0x0000048au, 0x0003003eu, 0x000023a0u, 0x000023f9u, 0x0003003eu, 0x0000191eu, 0x0000b639u, 0x0003003eu, 0x0000191cu, 0x000023f9u, 0x000200f9u, 0x00002244u, 0x000200f8u, 0x00002244u, 0x000700f5u, 0x00000063u, 0x00006ff9u, 0x0000b633u, 0x000022eeu, 0x0000b639u, 0x000023f6u, 0x000700f5u, 0x00000058u, 0x00006fe3u, 0x00006fceu, 0x000022eeu, 0x000023f9u, 0x000023f6u, 0x000700f5u, 0x00000058u, 0x00006fc3u, 0x00006fceu, 0x000022eeu, 0x00002375u, 0x000023f6u, 0x000200f9u, 0x0000223au, 0x000200f8u, 0x0000223au, 0x000700f5u, 0x00000063u, 0x00006ff8u, 0x00006ff9u, 0x00002244u, 0x00001099u, 0x00002257u, 0x000700f5u, 0x00000058u, 0x00006fe2u, 0x00006fe3u, 0x00002244u, 0x00006ff7u, 0x00002257u, 0x000700f5u, 0x00000058u, 0x00006fc2u, 0x00006fc3u, 0x00002244u, 0x00006fe1u, 0x00002257u, 0x000700f5u, 0x00000058u, 0x00006fadu, 0x000022f1u, 0x00002244u, 0x0000241du, 0x00002257u, 0x00050041u, 0x00000040u, 0x00002261u, 0x00001912u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00002262u, 0x00002261u, 0x00050041u, 0x00000040u, 0x00002263u, 0x00001913u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00002264u, 0x00002263u, 0x000500c3u, 0x00000008u, 0x00002266u, 0x00001aacu, 0x00000495u, 0x00050084u, 0x00000008u, 0x00002267u, 0x00002264u, 0x00002266u, 0x00050080u, 0x00000008u, 0x00002268u, 0x00002262u, 0x00002267u, 0x0004003du, 0x00000008u, 0x0000226au, 0x00002263u, 0x000500c3u, 0x00000008u, 0x0000226bu, 0x0000226au, 0x00000495u, 0x000500c7u, 0x00000008u, 0x0000226du, 0x00001aacu, 0x000005adu, 0x00050084u, 0x00000008u, 0x0000226eu, 0x0000226bu, 0x0000226du, 0x00050080u, 0x00000008u, 0x0000226fu, 0x00002268u, 0x0000226eu, 0x0003003eu, 0x0000191du, 0x0000226fu, 0x000500c3u, 0x00000008u, 0x00002271u, 0x0000226fu, 0x000001dfu, 0x0003003eu, 0x00002203u, 0x00002271u, 0x0003003eu, 0x00002204u, 0x000021c0u, 0x0003003eu, 0x00002205u, 0x000021c2u, 0x000500c7u, 0x00000008u, 0x0000227au, 0x000021c2u, 0x000001a6u, 0x00050080u, 0x00000008u, 0x0000227bu, 0x000021c6u, 0x0000227au, 0x0003003eu, 0x00002206u, 0x0000227bu, 0x000500c4u, 0x00000008u, 0x0000227du, 0x00002271u, 0x000005c1u, 0x0003003eu, 0x00002203u, 0x0000227du, 0x0004003du, 0x00000008u, 0x00002280u, 0x00002263u, 0x000500c3u, 0x00000008u, 0x00002281u, 0x00002280u, 0x000001dfu, 0x00050084u, 0x00000008u, 0x00002282u, 0x0000227bu, 0x00002281u, 0x00050041u, 0x00000040u, 0x00002284u, 0x00001914u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00002285u, 0x00002284u, 0x000500c3u, 0x00000008u, 0x00002286u, 0x00002285u, 0x000001dfu, 0x00050084u, 0x00000008u, 0x00002287u, 0x000021c2u, 0x00002286u, 0x00050080u, 0x00000008u, 0x00002288u, 0x00002282u, 0x00002287u, 0x00050080u, 0x00000008u, 0x0000228au, 0x0000227du, 0x00002288u, 0x0003003eu, 0x00002203u, 0x0000228au, 0x000500c3u, 0x00000008u, 0x0000228cu, 0x0000228au, 0x000005d1u, 0x0003003eu, 0x00002203u, 0x0000228cu, 0x0003003eu, 0x00002207u, 0x0000228cu, 0x00050082u, 0x00000008u, 0x00002426u, 0x0000228cu, 0x00000328u, 0x0003003eu, 0x00002207u, 0x00002426u, 0x000500c4u, 0x00000008u, 0x00002428u, 0x00002426u, 0x000001e9u, 0x0003003eu, 0x00002207u, 0x00002428u, 0x000500c3u, 0x00000008u, 0x0000242au, 0x00002428u, 0x000001e9u, 0x0003003eu, 0x00002207u, 0x0000242au, 0x00050080u, 0x00000008u, 0x0000242cu, 0x0000242au, 0x00000328u, 0x0003003eu, 0x00002207u, 0x0000242cu, 0x0008000cu, 0x00000008u, 0x0000242eu, 0x00000001u, 0x0000002du, 0x0000242cu, 0x0000019cu, 0x00000332u, 0x0003003eu, 0x00002424u, 0x0000242eu, 0x0003003eu, 0x0000191du, 0x0000242eu, 0x0003003eu, 0x0000190eu, 0x00006fadu, 0x0003003eu, 0x0000190fu, 0x00006fc2u, 0x0003003eu, 0x00001910u, 0x00006fe2u, 0x0003003eu, 0x00001911u, 0x0000242eu, 0x0003003eu, 0x0000190cu, 0x00006ff8u, 0x000500c7u, 0x00000006u, 0x00001ad7u, 0x000019bau, 0x00001108u, 0x0003003eu, 0x0000191fu, 0x00001ad7u, 0x00050080u, 0x00000006u, 0x00001ad9u, 0x00001ad7u, 0x000002f4u, 0x000500c7u, 0x00000006u, 0x00001adau, 0x00001ad9u, 0x00001108u, 0x0003003eu, 0x00001920u, 0x00001adau, 0x000500c2u, 0x00000006u, 0x00001adcu, 0x000019bau, 0x000002fbu, 0x0003003eu, 0x00001921u, 0x00001adcu, 0x00040071u, 0x00000006u, 0x00001adfu, 0x000021a6u, 0x0004007cu, 0x00000008u, 0x00001ae0u, 0x00001adfu, 0x0003003eu, 0x00001922u, 0x00001ae0u, 0x000300f7u, 0x00001ae2u, 0x00000000u, 0x000400fau, 0x00001a23u, 0x00001ae3u, 0x00001ae2u, 0x000200f8u, 0x00001ae3u, 0x0003003eu, 0x00001924u, 0x00001ad7u, 0x0003003eu, 0x00001925u, 0x00001adau, 0x0003003eu, 0x00001927u, 0x00001adcu, 0x0003003eu, 0x00001928u, 0x00001ae0u, 0x0003003eu, 0x00001929u, 0x00006fadu, 0x0003003eu, 0x0000192au, 0x00006fc2u, 0x0003003eu, 0x0000192bu, 0x00006fe2u, 0x0003003eu, 0x0000192cu, 0x00006ff8u, 0x0003003eu, 0x0000192du, 0x000019f9u, 0x0003003eu, 0x0000192eu, 0x000019fcu, 0x0003003eu, 0x0000192fu, 0x000019ffu, 0x0003003eu, 0x0000242fu, 0x00001099u, 0x0003003eu, 0x00002430u, 0x00001099u, 0x0003003eu, 0x00002431u, 0x0000028eu, 0x000300f7u, 0x00002438u, 0x00000000u, 0x000400fau, 0x00006ff8u, 0x00002439u, 0x0000243au, 0x000200f8u, 0x0000243au, 0x00050082u, 0x00000058u, 0x0000243du, 0x00006fc2u, 0x00006fadu, 0x0003003eu, 0x00002432u, 0x0000243du, 0x000500c3u, 0x00000058u, 0x00002440u, 0x0000243du, 0x0000b61cu, 0x000500c6u, 0x00000058u, 0x00002442u, 0x0000243du, 0x00002440u, 0x0003003eu, 0x00002432u, 0x00002442u, 0x00050082u, 0x00000058u, 0x00002445u, 0x00006fe2u, 0x00006fadu, 0x0003003eu, 0x00002433u, 0x00002445u, 0x000500c3u, 0x00000058u, 0x00002448u, 0x00002445u, 0x0000b61cu, 0x000500c6u, 0x00000058u, 0x0000244au, 0x00002445u, 0x00002448u, 0x0003003eu, 0x00002433u, 0x0000244au, 0x0007000cu, 0x00000058u, 0x0000244du, 0x00000001u, 0x0000002au, 0x00002442u, 0x0000244au, 0x0003003eu, 0x00002434u, 0x0000244du, 0x00050041u, 0x00000040u, 0x0000244eu, 0x00002434u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x0000244fu, 0x0000244eu, 0x00050041u, 0x00000040u, 0x00002450u, 0x00002434u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002451u, 0x00002450u, 0x0007000cu, 0x00000008u, 0x00002452u, 0x00000001u, 0x0000002au, 0x0000244fu, 0x00002451u, 0x0003003eu, 0x00002435u, 0x00002452u, 0x000500afu, 0x00000063u, 0x00002454u, 0x00002452u, 0x000010beu, 0x000300f7u, 0x00002455u, 0x00000000u, 0x000400fau, 0x00002454u, 0x00002456u, 0x00002457u, 0x000200f8u, 0x00002457u, 0x000500b1u, 0x00000063u, 0x0000245au, 0x00002452u, 0x00000977u, 0x000300f7u, 0x0000245bu, 0x00000000u, 0x000400fau, 0x0000245au, 0x0000245cu, 0x0000245du, 0x000200f8u, 0x0000245du, 0x000500c3u, 0x00000008u, 0x00002474u, 0x00002452u, 0x000001b2u, 0x0006000cu, 0x00000008u, 0x00002475u, 0x00000001u, 0x0000004au, 0x00002474u, 0x0007000cu, 0x00000008u, 0x00002476u, 0x00000001u, 0x0000002au, 0x00002475u, 0x0000019cu, 0x0003003eu, 0x00002436u, 0x00002476u, 0x0004007cu, 0x00000006u, 0x00002478u, 0x00002476u, 0x000500aeu, 0x00000063u, 0x0000247au, 0x00002478u, 0x00001adcu, 0x0003003eu, 0x00002430u, 0x0000247au, 0x000400a8u, 0x00000063u, 0x0000247du, 0x000019fcu, 0x000500a7u, 0x00000063u, 0x0000247eu, 0x0000247au, 0x0000247du, 0x000400a8u, 0x00000063u, 0x00002480u, 0x000019ffu, 0x000500a7u, 0x00000063u, 0x00002481u, 0x0000247eu, 0x00002480u, 0x000300f7u, 0x00002482u, 0x00000000u, 0x000400fau, 0x00002481u, 0x00002483u, 0x00002484u, 0x000200f8u, 0x00002484u, 0x000500c4u, 0x00000008u, 0x00002486u, 0x00002452u, 0x000001acu, 0x000500c3u, 0x00000008u, 0x00002488u, 0x00002486u, 0x00002476u, 0x000500c7u, 0x00000008u, 0x00002489u, 0x00002488u, 0x00000311u, 0x00040072u, 0x00000012u, 0x0000248au, 0x00002489u, 0x0003003eu, 0x00001926u, 0x0000248au, 0x0003003eu, 0x00002431u, 0x00002478u, 0x000200f9u, 0x00002482u, 0x000200f8u, 0x00002483u, 0x0003003eu, 0x00001926u, 0x0000109fu, 0x000200f9u, 0x00002482u, 0x000200f8u, 0x00002482u, 0x000700f5u, 0x00000012u, 0x0000710du, 0x0000109fu, 0x00002483u, 0x0000248au, 0x00002484u, 0x000600a9u, 0x00000006u, 0x0000b63au, 0x00002481u, 0x0000028eu, 0x00002478u, 0x000200f9u, 0x0000245bu, 0x000200f8u, 0x0000245cu, 0x000500aau, 0x00000063u, 0x0000245fu, 0x00001adcu, 0x0000028eu, 0x0003003eu, 0x00002430u, 0x0000245fu, 0x0003003eu, 0x0000242fu, 0x0000046cu, 0x000400a8u, 0x00000063u, 0x00002461u, 0x000019fcu, 0x000400a8u, 0x00000063u, 0x00002463u, 0x000019ffu, 0x000500a7u, 0x00000063u, 0x00002464u, 0x00002461u, 0x00002463u, 0x000300f7u, 0x00002465u, 0x00000000u, 0x000400fau, 0x00002464u, 0x00002466u, 0x00002467u, 0x000200f8u, 0x00002467u, 0x0007000cu, 0x00000008u, 0x0000246du, 0x00000001u, 0x0000002au, 0x00001ae0u, 0x00002452u, 0x000500c4u, 0x00000008u, 0x0000246eu, 0x0000246du, 0x000001acu, 0x000600a9u, 0x00000008u, 0x00002470u, 0x000019fcu, 0x000010dau, 0x0000019cu, 0x00050080u, 0x00000008u, 0x00002471u, 0x0000246eu, 0x00002470u, 0x00040072u, 0x00000012u, 0x00002472u, 0x00002471u, 0x0003003eu, 0x00001926u, 0x00002472u, 0x000200f9u, 0x00002465u, 0x000200f8u, 0x00002466u, 0x000600a9u, 0x00000008u, 0x00002469u, 0x0000245fu, 0x00000311u, 0x0000019cu, 0x00040072u, 0x00000012u, 0x0000246au, 0x00002469u, 0x0003003eu, 0x00001926u, 0x0000246au, 0x000200f9u, 0x00002465u, 0x000200f8u, 0x00002465u, 0x000700f5u, 0x00000012u, 0x0000710cu, 0x0000246au, 0x00002466u, 0x00002472u, 0x00002467u, 0x000200f9u, 0x0000245bu, 0x000200f8u, 0x0000245bu, 0x000700f5u, 0x00000012u, 0x0000710bu, 0x0000710cu, 0x00002465u, 0x0000710du, 0x00002482u, 0x000700f5u, 0x00000006u, 0x000070ecu, 0x0000028eu, 0x00002465u, 0x0000b63au, 0x00002482u, 0x000700f5u, 0x00000063u, 0x000070d5u, 0x0000245fu, 0x00002465u, 0x0000247au, 0x00002482u, 0x000600a9u, 0x00000063u, 0x0000b63bu, 0x0000245au, 0x0000046cu, 0x00001099u, 0x000200f9u, 0x00002455u, 0x000200f8u, 0x00002456u, 0x0003003eu, 0x00002430u, 0x0000046cu, 0x0003003eu, 0x00001926u, 0x0000109fu, 0x0003003eu, 0x00002431u, 0x00001adcu, 0x000200f9u, 0x00002455u, 0x000200f8u, 0x00002455u, 0x000700f5u, 0x00000012u, 0x0000710au, 0x0000109fu, 0x00002456u, 0x0000710bu, 0x0000245bu, 0x000700f5u, 0x00000063u, 0x000070f2u, 0x00001099u, 0x00002456u, 0x0000b63bu, 0x0000245bu, 0x000700f5u, 0x00000006u, 0x000070ebu, 0x00001adcu, 0x00002456u, 0x000070ecu, 0x0000245bu, 0x000700f5u, 0x00000063u, 0x000070d4u, 0x0000046cu, 0x00002456u, 0x000070d5u, 0x0000245bu, 0x000200f9u, 0x00002438u, 0x000200f8u, 0x00002439u, 0x0003003eu, 0x00002430u, 0x0000046cu, 0x0003003eu, 0x00001926u, 0x0000109fu, 0x000200f9u, 0x00002438u, 0x000200f8u, 0x00002438u, 0x000700f5u, 0x00000012u, 0x00007109u, 0x0000109fu, 0x00002439u, 0x0000710au, 0x00002455u, 0x000700f5u, 0x00000063u, 0x000070f1u, 0x00001099u, 0x00002439u, 0x000070f2u, 0x00002455u, 0x000700f5u, 0x00000006u, 0x000070eau, 0x0000028eu, 0x00002439u, 0x000070ebu, 0x00002455u, 0x000700f5u, 0x00000063u, 0x000070d3u, 0x0000046cu, 0x00002439u, 0x000070d4u, 0x00002455u, 0x000300f7u, 0x0000248eu, 0x00000000u, 0x000400fau, 0x000019f9u, 0x0000248fu, 0x0000248eu, 0x000200f8u, 0x0000248fu, 0x000300f7u, 0x00002491u, 0x00000000u, 0x000400fau, 0x000070d3u, 0x00002492u, 0x00002491u, 0x000200f8u, 0x00002492u, 0x0003003eu, 0x00002431u, 0x00001adcu, 0x000200f9u, 0x00002491u, 0x000200f8u, 0x00002491u, 0x000600a9u, 0x00000006u, 0x0000b63cu, 0x000070d3u, 0x00001adcu, 0x000070eau, 0x000400a8u, 0x00000063u, 0x00002495u, 0x000019ffu, 0x000300f7u, 0x00002496u, 0x00000000u, 0x000400fau, 0x00002495u, 0x00002497u, 0x00002498u, 0x000200f8u, 0x00002498u, 0x00050080u, 0x00000006u, 0x000024afu, 0x00001ad7u, 0x0000b63cu, 0x000500a6u, 0x00000063u, 0x000024b2u, 0x000070d3u, 0x000070f1u, 0x000600a9u, 0x00000008u, 0x000024b3u, 0x000024b2u, 0x000001a6u, 0x000001a9u, 0x0004007cu, 0x00000006u, 0x000024b4u, 0x000024b3u, 0x00050080u, 0x00000006u, 0x000024b5u, 0x000024afu, 0x000024b4u, 0x000500c7u, 0x00000006u, 0x000024b6u, 0x000024b5u, 0x00001108u, 0x0003003eu, 0x00001925u, 0x000024b6u, 0x000600a9u, 0x00000008u, 0x000024bbu, 0x000070f1u, 0x0000019cu, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x000024bcu, 0x000024bbu, 0x00050080u, 0x00000006u, 0x000024bdu, 0x000024afu, 0x000024bcu, 0x000500c7u, 0x00000006u, 0x000024beu, 0x000024bdu, 0x00001108u, 0x0003003eu, 0x00001924u, 0x000024beu, 0x000200f9u, 0x00002496u, 0x000200f8u, 0x00002497u, 0x00050080u, 0x00000006u, 0x0000249bu, 0x00001ad7u, 0x0000b63cu, 0x000500c7u, 0x00000006u, 0x0000249cu, 0x0000249bu, 0x00001108u, 0x0003003eu, 0x00001924u, 0x0000249cu, 0x000400a8u, 0x00000063u, 0x0000249eu, 0x000070d3u, 0x000300f7u, 0x0000249fu, 0x00000000u, 0x000400fau, 0x0000249eu, 0x000024a0u, 0x0000249fu, 0x000200f8u, 0x000024a0u, 0x000400a8u, 0x00000063u, 0x000024a2u, 0x000019fcu, 0x000500a7u, 0x00000063u, 0x000024a4u, 0x000024a2u, 0x000070f1u, 0x000200f9u, 0x0000249fu, 0x000200f8u, 0x0000249fu, 0x000700f5u, 0x00000063u, 0x000024a5u, 0x000070d3u, 0x00002497u, 0x000024a4u, 0x000024a0u, 0x000300f7u, 0x000024a6u, 0x00000000u, 0x000400fau, 0x000024a5u, 0x000024a7u, 0x000024a8u, 0x000200f8u, 0x000024a8u, 0x00050080u, 0x00000006u, 0x000024abu, 0x0000249cu, 0x000002f4u, 0x000500c7u, 0x00000006u, 0x000024acu, 0x000024abu, 0x00001108u, 0x0003003eu, 0x00001925u, 0x000024acu, 0x000200f9u, 0x000024a6u, 0x000200f8u, 0x000024a7u, 0x0003003eu, 0x00001925u, 0x0000249cu, 0x000200f9u, 0x000024a6u, 0x000200f8u, 0x000024a6u, 0x000700f5u, 0x00000006u, 0x00007107u, 0x0000249cu, 0x000024a7u, 0x000024acu, 0x000024a8u, 0x000200f9u, 0x00002496u, 0x000200f8u, 0x00002496u, 0x000700f5u, 0x00000006u, 0x00007106u, 0x00007107u, 0x000024a6u, 0x000024b6u, 0x00002498u, 0x000700f5u, 0x00000006u, 0x000070feu, 0x0000249cu, 0x000024a6u, 0x000024beu, 0x00002498u, 0x000200f9u, 0x0000248eu, 0x000200f8u, 0x0000248eu, 0x000700f5u, 0x00000006u, 0x00007100u, 0x00001adau, 0x00002438u, 0x00007106u, 0x00002496u, 0x000700f5u, 0x00000006u, 0x000070fdu, 0x00001ad7u, 0x00002438u, 0x000070feu, 0x00002496u, 0x0003003eu, 0x0000191fu, 0x000070fdu, 0x0003003eu, 0x00001920u, 0x00007100u, 0x0003003eu, 0x00001923u, 0x00007109u, 0x000200f9u, 0x00001ae2u, 0x000200f8u, 0x00001ae2u, 0x000700f5u, 0x00000012u, 0x00009b4du, 0x00009b5au, 0x0000223au, 0x00007109u, 0x0000248eu, 0x000700f5u, 0x00000006u, 0x000085ceu, 0x00001adau, 0x0000223au, 0x00007100u, 0x0000248eu, 0x000700f5u, 0x00000006u, 0x0000716eu, 0x00001ad7u, 0x0000223au, 0x000070fdu, 0x0000248eu, 0x000300f7u, 0x00001af4u, 0x00000000u, 0x000400fau, 0x00001a1au, 0x00001af5u, 0x00001af4u, 0x000200f8u, 0x00001af5u, 0x00080041u, 0x000006a8u, 0x00001af8u, 0x00001482u, 0x0000019cu, 0x0000184du, 0x000001a9u, 0x0000716eu, 0x0004003du, 0x0000000fu, 0x00001af9u, 0x00001af8u, 0x00040071u, 0x00000006u, 0x00001afau, 0x00001af9u, 0x0003003eu, 0x00001930u, 0x00001afau, 0x0003003eu, 0x00001932u, 0x00001afau, 0x00060041u, 0x0000024au, 0x000024c2u, 0x00000248u, 0x0000019cu, 0x00001afau, 0x0004003du, 0x00000244u, 0x000024c3u, 0x000024c2u, 0x00050051u, 0x00000006u, 0x000024c4u, 0x000024c3u, 0x00000000u, 0x0003003eu, 0x00005fe0u, 0x000024c4u, 0x00050051u, 0x00000006u, 0x000024c6u, 0x000024c3u, 0x00000001u, 0x0003003eu, 0x00005fe1u, 0x000024c6u, 0x00050051u, 0x00000006u, 0x000024c8u, 0x000024c3u, 0x00000002u, 0x0003003eu, 0x00005fe2u, 0x000024c8u, 0x00050051u, 0x00000006u, 0x000024cau, 0x000024c3u, 0x00000003u, 0x0003003eu, 0x00005fe3u, 0x000024cau, 0x00050051u, 0x00000006u, 0x000024ccu, 0x000024c3u, 0x00000004u, 0x0003003eu, 0x00005fe4u, 0x000024ccu, 0x00050051u, 0x00000006u, 0x000024ceu, 0x000024c3u, 0x00000005u, 0x0003003eu, 0x00005fe5u, 0x000024ceu, 0x00050051u, 0x0000000fu, 0x000024d0u, 0x000024c3u, 0x00000006u, 0x0003003eu, 0x00005fe6u, 0x000024d0u, 0x00050051u, 0x0000000fu, 0x000024d2u, 0x000024c3u, 0x00000007u, 0x0003003eu, 0x00005fe7u, 0x000024d2u, 0x00050051u, 0x0000000fu, 0x000024d4u, 0x000024c3u, 0x00000008u, 0x0003003eu, 0x00005fe8u, 0x000024d4u, 0x00050051u, 0x0000000fu, 0x000024d6u, 0x000024c3u, 0x00000009u, 0x0003003eu, 0x00005fe9u, 0x000024d6u, 0x00050051u, 0x0000000fu, 0x000024d8u, 0x000024c3u, 0x0000000au, 0x0003003eu, 0x00005feau, 0x000024d8u, 0x00050051u, 0x0000000fu, 0x000024dau, 0x000024c3u, 0x0000000bu, 0x0003003eu, 0x00005febu, 0x000024dau, 0x00050051u, 0x0000000fu, 0x000024dcu, 0x000024c3u, 0x0000000cu, 0x0003003eu, 0x00005fecu, 0x000024dcu, 0x00050051u, 0x0000000fu, 0x000024deu, 0x000024c3u, 0x0000000du, 0x0003003eu, 0x00005fedu, 0x000024deu, 0x00110050u, 0x00000029u, 0x00005ffcu, 0x000024c4u, 0x000024c6u, 0x000024c8u, 0x000024cau, 0x000024ccu, 0x000024ceu, 0x000024d0u, 0x000024d2u, 0x000024d4u, 0x000024d6u, 0x000024d8u, 0x000024dau, 0x000024dcu, 0x000024deu, 0x0003003eu, 0x00005ffdu, 0x000024c4u, 0x0003003eu, 0x00005ffeu, 0x000024c6u, 0x0003003eu, 0x00005fffu, 0x000024c8u, 0x0003003eu, 0x00006000u, 0x000024cau, 0x0003003eu, 0x00006001u, 0x000024ccu, 0x0003003eu, 0x00006002u, 0x000024ceu, 0x0003003eu, 0x00006003u, 0x000024d0u, 0x0003003eu, 0x00006004u, 0x000024d2u, 0x0003003eu, 0x00006005u, 0x000024d4u, 0x0003003eu, 0x00006006u, 0x000024d6u, 0x0003003eu, 0x00006007u, 0x000024d8u, 0x0003003eu, 0x00006008u, 0x000024dau, 0x0003003eu, 0x00006009u, 0x000024dcu, 0x0003003eu, 0x0000600au, 0x000024deu, 0x0003003eu, 0x00006282u, 0x000024c4u, 0x0003003eu, 0x00006283u, 0x000024c6u, 0x0003003eu, 0x00006284u, 0x000024c8u, 0x0003003eu, 0x00006285u, 0x000024cau, 0x0003003eu, 0x00006286u, 0x000024ccu, 0x0003003eu, 0x00006287u, 0x000024ceu, 0x0003003eu, 0x00006288u, 0x000024d0u, 0x0003003eu, 0x00006289u, 0x000024d2u, 0x0003003eu, 0x0000628au, 0x000024d4u, 0x0003003eu, 0x0000628bu, 0x000024d6u, 0x0003003eu, 0x0000628cu, 0x000024d8u, 0x0003003eu, 0x0000628du, 0x000024dau, 0x0003003eu, 0x0000628eu, 0x000024dcu, 0x0003003eu, 0x0000628fu, 0x000024deu, 0x000300f7u, 0x00001afdu, 0x00000000u, 0x000400fau, 0x000016a4u, 0x00001afeu, 0x00001afdu, 0x000200f8u, 0x00001afeu, 0x0003003eu, 0x00006288u, 0x000016a8u, 0x0003003eu, 0x00006289u, 0x000016abu, 0x000200f9u, 0x00001afdu, 0x000200f8u, 0x00001afdu, 0x000600a9u, 0x0000000fu, 0x0000b63du, 0x000016a4u, 0x000016a8u, 0x000024d0u, 0x000600a9u, 0x0000000fu, 0x0000b63eu, 0x000016a4u, 0x000016abu, 0x000024d2u, 0x00110050u, 0x00000029u, 0x000062acu, 0x000024c4u, 0x000024c6u, 0x000024c8u, 0x000024cau, 0x000024ccu, 0x000024ceu, 0x0000b63du, 0x0000b63eu, 0x000024d4u, 0x000024d6u, 0x000024d8u, 0x000024dau, 0x000024dcu, 0x000024deu, 0x0003003eu, 0x000062adu, 0x000024c4u, 0x0003003eu, 0x000062aeu, 0x000024c6u, 0x0003003eu, 0x000062afu, 0x000024c8u, 0x0003003eu, 0x000062b0u, 0x000024cau, 0x0003003eu, 0x000062b1u, 0x000024ccu, 0x0003003eu, 0x000062b2u, 0x000024ceu, 0x0003003eu, 0x000062b3u, 0x0000b63du, 0x0003003eu, 0x000062b4u, 0x0000b63eu, 0x0003003eu, 0x000062b5u, 0x000024d4u, 0x0003003eu, 0x000062b6u, 0x000024d6u, 0x0003003eu, 0x000062b7u, 0x000024d8u, 0x0003003eu, 0x000062b8u, 0x000024dau, 0x0003003eu, 0x000062b9u, 0x000024dcu, 0x0003003eu, 0x000062bau, 0x000024deu, 0x0003003eu, 0x00001935u, 0x000019c4u, 0x0003003eu, 0x00001936u, 0x00006fadu, 0x0003003eu, 0x00001937u, 0x000019e7u, 0x0003003eu, 0x00001938u, 0x000019eau, 0x0003003eu, 0x00001939u, 0x000019edu, 0x0003003eu, 0x0000193au, 0x00001a17u, 0x0003003eu, 0x0000193bu, 0x00001099u, 0x0003003eu, 0x0000193cu, 0x000016afu, 0x00040071u, 0x00000006u, 0x00002624u, 0x000024deu, 0x0004007cu, 0x00000008u, 0x00002625u, 0x00002624u, 0x000500c7u, 0x00000008u, 0x00002626u, 0x00002625u, 0x000001a6u, 0x000500abu, 0x00000063u, 0x00002627u, 0x00002626u, 0x0000019cu, 0x0004007cu, 0x00000008u, 0x0000262au, 0x000024c4u, 0x0004007cu, 0x00000008u, 0x0000262du, 0x000024c6u, 0x00040071u, 0x00000006u, 0x00002630u, 0x000024d8u, 0x0004007cu, 0x00000008u, 0x00002631u, 0x00002630u, 0x0003003eu, 0x000024e1u, 0x00002627u, 0x00050041u, 0x00000040u, 0x00002632u, 0x00001936u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00002633u, 0x00002632u, 0x0003003eu, 0x000024e2u, 0x00002633u, 0x0003003eu, 0x000024e3u, 0x0000262au, 0x0003003eu, 0x000024e4u, 0x0000262du, 0x0003003eu, 0x000024e5u, 0x00002631u, 0x0008000cu, 0x00000008u, 0x000029edu, 0x00000001u, 0x0000002du, 0x00002633u, 0x0000046au, 0x00000424u, 0x0003003eu, 0x000024e2u, 0x000029edu, 0x000500b1u, 0x00000063u, 0x000029efu, 0x00002631u, 0x000001e2u, 0x000300f7u, 0x000029f0u, 0x00000000u, 0x000400fau, 0x000029efu, 0x000029f1u, 0x000029f2u, 0x000200f8u, 0x000029f2u, 0x00050082u, 0x00000008u, 0x000029f7u, 0x00000977u, 0x00002631u, 0x000500c4u, 0x00000008u, 0x000029f9u, 0x000029edu, 0x000029f7u, 0x0003003eu, 0x000024e2u, 0x000029f9u, 0x000500c3u, 0x00000008u, 0x000029fbu, 0x000029f9u, 0x00000509u, 0x0003003eu, 0x000024e2u, 0x000029fbu, 0x000200f9u, 0x000029f0u, 0x000200f8u, 0x000029f1u, 0x000500c3u, 0x00000008u, 0x000029f5u, 0x000029edu, 0x00002631u, 0x0003003eu, 0x000024e2u, 0x000029f5u, 0x000200f9u, 0x000029f0u, 0x000200f8u, 0x000029f0u, 0x000700f5u, 0x00000008u, 0x0000727cu, 0x000029f5u, 0x000029f1u, 0x000029fbu, 0x000029f2u, 0x000300f7u, 0x000029fdu, 0x00000000u, 0x000400fau, 0x00002627u, 0x000029feu, 0x000029ffu, 0x000200f8u, 0x000029ffu, 0x000500c4u, 0x00000008u, 0x00002a15u, 0x0000262au, 0x000001acu, 0x00050082u, 0x00000008u, 0x00002a17u, 0x0000727cu, 0x00002a15u, 0x0003003eu, 0x000024e2u, 0x00002a17u, 0x000200f9u, 0x000029fdu, 0x000200f8u, 0x000029feu, 0x000500c3u, 0x00000008u, 0x00002a01u, 0x0000727cu, 0x000001acu, 0x000500afu, 0x00000063u, 0x00002a03u, 0x00002a01u, 0x0000262du, 0x0003003eu, 0x000029eau, 0x00002a03u, 0x000300f7u, 0x00002a05u, 0x00000000u, 0x000400fau, 0x00002a03u, 0x00002a06u, 0x00002a07u, 0x000200f8u, 0x00002a07u, 0x000500c4u, 0x00000008u, 0x00002a11u, 0x0000262au, 0x000001acu, 0x00050082u, 0x00000008u, 0x00002a12u, 0x0000727cu, 0x00002a11u, 0x0007000cu, 0x00000008u, 0x00002a13u, 0x00000001u, 0x0000002au, 0x00002a12u, 0x0000019cu, 0x0003003eu, 0x000024e2u, 0x00002a13u, 0x000200f9u, 0x00002a05u, 0x000200f8u, 0x00002a06u, 0x000500c3u, 0x00000008u, 0x00002a09u, 0x0000262du, 0x000001a9u, 0x000500c3u, 0x00000008u, 0x00002a0bu, 0x0000262au, 0x000001a9u, 0x00050082u, 0x00000008u, 0x00002a0cu, 0x00002a09u, 0x00002a0bu, 0x000500c7u, 0x00000008u, 0x00002a0du, 0x00002a0cu, 0x0000098eu, 0x000500c4u, 0x00000008u, 0x00002a0eu, 0x00002a0du, 0x000001b2u, 0x0003003eu, 0x000024e2u, 0x00002a0eu, 0x000200f9u, 0x00002a05u, 0x000200f8u, 0x00002a05u, 0x000700f5u, 0x00000008u, 0x0000727fu, 0x00002a0eu, 0x00002a06u, 0x00002a13u, 0x00002a07u, 0x000200f9u, 0x000029fdu, 0x000200f8u, 0x000029fdu, 0x000700f5u, 0x00000008u, 0x0000727eu, 0x0000727fu, 0x00002a05u, 0x00002a17u, 0x000029ffu, 0x0003003eu, 0x000029ebu, 0x0000727eu, 0x0003003eu, 0x00002632u, 0x0000727eu, 0x000500c7u, 0x00000008u, 0x0000263au, 0x00002625u, 0x000001afu, 0x000500abu, 0x00000063u, 0x0000263bu, 0x0000263au, 0x0000019cu, 0x0004007cu, 0x00000008u, 0x0000263eu, 0x000024c8u, 0x0004007cu, 0x00000008u, 0x00002641u, 0x000024cau, 0x00040071u, 0x00000006u, 0x00002644u, 0x000024dcu, 0x0004007cu, 0x00000008u, 0x00002645u, 0x00002644u, 0x0003003eu, 0x000024e6u, 0x0000263bu, 0x00050041u, 0x00000040u, 0x00002646u, 0x00001936u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002647u, 0x00002646u, 0x0003003eu, 0x000024e7u, 0x00002647u, 0x0003003eu, 0x000024e8u, 0x0000263eu, 0x0003003eu, 0x000024e9u, 0x00002641u, 0x0003003eu, 0x000024eau, 0x00002645u, 0x0008000cu, 0x00000008u, 0x00002a1cu, 0x00000001u, 0x0000002du, 0x00002647u, 0x0000046au, 0x00000424u, 0x0003003eu, 0x000024e7u, 0x00002a1cu, 0x000500b1u, 0x00000063u, 0x00002a1eu, 0x00002645u, 0x000001e2u, 0x000300f7u, 0x00002a1fu, 0x00000000u, 0x000400fau, 0x00002a1eu, 0x00002a20u, 0x00002a21u, 0x000200f8u, 0x00002a21u, 0x00050082u, 0x00000008u, 0x00002a26u, 0x00000977u, 0x00002645u, 0x000500c4u, 0x00000008u, 0x00002a28u, 0x00002a1cu, 0x00002a26u, 0x0003003eu, 0x000024e7u, 0x00002a28u, 0x000500c3u, 0x00000008u, 0x00002a2au, 0x00002a28u, 0x00000509u, 0x0003003eu, 0x000024e7u, 0x00002a2au, 0x000200f9u, 0x00002a1fu, 0x000200f8u, 0x00002a20u, 0x000500c3u, 0x00000008u, 0x00002a24u, 0x00002a1cu, 0x00002645u, 0x0003003eu, 0x000024e7u, 0x00002a24u, 0x000200f9u, 0x00002a1fu, 0x000200f8u, 0x00002a1fu, 0x000700f5u, 0x00000008u, 0x0000728eu, 0x00002a24u, 0x00002a20u, 0x00002a2au, 0x00002a21u, 0x000300f7u, 0x00002a2cu, 0x00000000u, 0x000400fau, 0x0000263bu, 0x00002a2du, 0x00002a2eu, 0x000200f8u, 0x00002a2eu, 0x000500c4u, 0x00000008u, 0x00002a44u, 0x0000263eu, 0x000001acu, 0x00050082u, 0x00000008u, 0x00002a46u, 0x0000728eu, 0x00002a44u, 0x0003003eu, 0x000024e7u, 0x00002a46u, 0x000200f9u, 0x00002a2cu, 0x000200f8u, 0x00002a2du, 0x000500c3u, 0x00000008u, 0x00002a30u, 0x0000728eu, 0x000001acu, 0x000500afu, 0x00000063u, 0x00002a32u, 0x00002a30u, 0x00002641u, 0x0003003eu, 0x00002a19u, 0x00002a32u, 0x000300f7u, 0x00002a34u, 0x00000000u, 0x000400fau, 0x00002a32u, 0x00002a35u, 0x00002a36u, 0x000200f8u, 0x00002a36u, 0x000500c4u, 0x00000008u, 0x00002a40u, 0x0000263eu, 0x000001acu, 0x00050082u, 0x00000008u, 0x00002a41u, 0x0000728eu, 0x00002a40u, 0x0007000cu, 0x00000008u, 0x00002a42u, 0x00000001u, 0x0000002au, 0x00002a41u, 0x0000019cu, 0x0003003eu, 0x000024e7u, 0x00002a42u, 0x000200f9u, 0x00002a34u, 0x000200f8u, 0x00002a35u, 0x000500c3u, 0x00000008u, 0x00002a38u, 0x00002641u, 0x000001a9u, 0x000500c3u, 0x00000008u, 0x00002a3au, 0x0000263eu, 0x000001a9u, 0x00050082u, 0x00000008u, 0x00002a3bu, 0x00002a38u, 0x00002a3au, 0x000500c7u, 0x00000008u, 0x00002a3cu, 0x00002a3bu, 0x0000098eu, 0x000500c4u, 0x00000008u, 0x00002a3du, 0x00002a3cu, 0x000001b2u, 0x0003003eu, 0x000024e7u, 0x00002a3du, 0x000200f9u, 0x00002a34u, 0x000200f8u, 0x00002a34u, 0x000700f5u, 0x00000008u, 0x00007291u, 0x00002a3du, 0x00002a35u, 0x00002a42u, 0x00002a36u, 0x000200f9u, 0x00002a2cu, 0x000200f8u, 0x00002a2cu, 0x000700f5u, 0x00000008u, 0x00007290u, 0x00007291u, 0x00002a34u, 0x00002a46u, 0x00002a2eu, 0x0003003eu, 0x00002a1au, 0x00007290u, 0x0003003eu, 0x00002646u, 0x00007290u, 0x000300f7u, 0x0000264bu, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000264cu, 0x0000264du, 0x000200f8u, 0x0000264du, 0x0003003eu, 0x000024ebu, 0x00000450u, 0x000200f9u, 0x0000264bu, 0x000200f8u, 0x0000264cu, 0x0004003du, 0x00000058u, 0x0000264eu, 0x00001936u, 0x000500c7u, 0x00000058u, 0x00002650u, 0x0000264eu, 0x0000b61cu, 0x0003003eu, 0x000024ebu, 0x00002650u, 0x000200f9u, 0x0000264bu, 0x000200f8u, 0x0000264bu, 0x00050041u, 0x00000040u, 0x00002651u, 0x000024ebu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00002652u, 0x00002651u, 0x00050041u, 0x00000040u, 0x00002653u, 0x000024ebu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00002654u, 0x00002653u, 0x00050080u, 0x00000008u, 0x00002655u, 0x00002652u, 0x00002654u, 0x0003003eu, 0x000024ecu, 0x00002655u, 0x0004003du, 0x00000058u, 0x00002656u, 0x00001936u, 0x000500c3u, 0x00000058u, 0x00002658u, 0x00002656u, 0x0000b61bu, 0x0003003eu, 0x00001936u, 0x00002658u, 0x0003003eu, 0x00005eb0u, 0x000024d6u, 0x0003003eu, 0x00005eb1u, 0x000024deu, 0x0004003du, 0x00000008u, 0x0000265bu, 0x00002632u, 0x0003003eu, 0x000024efu, 0x0000265bu, 0x00040071u, 0x00000006u, 0x00002a4cu, 0x000024d6u, 0x0004007cu, 0x00000008u, 0x00002a4du, 0x00002a4cu, 0x000500abu, 0x00000063u, 0x00002a4eu, 0x00002a4du, 0x0000019cu, 0x000300f7u, 0x00002a4fu, 0x00000000u, 0x000400fau, 0x00002a4eu, 0x00002a50u, 0x00002a4fu, 0x000200f8u, 0x00002a50u, 0x000500c4u, 0x00000008u, 0x00002a53u, 0x000001a6u, 0x000024d6u, 0x0003003eu, 0x00002a48u, 0x00002a53u, 0x000500c7u, 0x00000008u, 0x00002a58u, 0x00002625u, 0x000001a9u, 0x000500abu, 0x00000063u, 0x00002a59u, 0x00002a58u, 0x0000019cu, 0x000300f7u, 0x00002a5au, 0x00000000u, 0x000400fau, 0x00002a59u, 0x00002a5bu, 0x00002a5au, 0x000200f8u, 0x00002a5bu, 0x000500c7u, 0x00000008u, 0x00002a5eu, 0x0000265bu, 0x00002a53u, 0x00050082u, 0x00000008u, 0x00002a5fu, 0x00002a5eu, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002a60u, 0x00000001u, 0x0000002au, 0x00002a5fu, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002a62u, 0x0000265bu, 0x00002a60u, 0x0003003eu, 0x000024efu, 0x00002a62u, 0x000200f9u, 0x00002a5au, 0x000200f8u, 0x00002a5au, 0x000700f5u, 0x00000008u, 0x000072efu, 0x0000265bu, 0x00002a50u, 0x00002a62u, 0x00002a5bu, 0x00050082u, 0x00000008u, 0x00002a64u, 0x00002a53u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002a66u, 0x000072efu, 0x00002a64u, 0x0003003eu, 0x000024efu, 0x00002a66u, 0x000200f9u, 0x00002a4fu, 0x000200f8u, 0x00002a4fu, 0x000700f5u, 0x00000008u, 0x000072f0u, 0x0000265bu, 0x0000264bu, 0x00002a66u, 0x00002a5au, 0x0003003eu, 0x00002a49u, 0x000072f0u, 0x0003003eu, 0x000024edu, 0x000072f0u, 0x0003003eu, 0x00005eb4u, 0x000024dau, 0x0003003eu, 0x00005eb5u, 0x000024deu, 0x0004003du, 0x00000008u, 0x0000265fu, 0x00002646u, 0x0003003eu, 0x000024f2u, 0x0000265fu, 0x00040071u, 0x00000006u, 0x00002a6cu, 0x000024dau, 0x0004007cu, 0x00000008u, 0x00002a6du, 0x00002a6cu, 0x000500abu, 0x00000063u, 0x00002a6eu, 0x00002a6du, 0x0000019cu, 0x000300f7u, 0x00002a6fu, 0x00000000u, 0x000400fau, 0x00002a6eu, 0x00002a70u, 0x00002a6fu, 0x000200f8u, 0x00002a70u, 0x000500c4u, 0x00000008u, 0x00002a73u, 0x000001a6u, 0x000024dau, 0x0003003eu, 0x00002a68u, 0x00002a73u, 0x000500c7u, 0x00000008u, 0x00002a78u, 0x00002625u, 0x000001d9u, 0x000500abu, 0x00000063u, 0x00002a79u, 0x00002a78u, 0x0000019cu, 0x000300f7u, 0x00002a7au, 0x00000000u, 0x000400fau, 0x00002a79u, 0x00002a7bu, 0x00002a7au, 0x000200f8u, 0x00002a7bu, 0x000500c7u, 0x00000008u, 0x00002a7eu, 0x0000265fu, 0x00002a73u, 0x00050082u, 0x00000008u, 0x00002a7fu, 0x00002a7eu, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002a80u, 0x00000001u, 0x0000002au, 0x00002a7fu, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002a82u, 0x0000265fu, 0x00002a80u, 0x0003003eu, 0x000024f2u, 0x00002a82u, 0x000200f9u, 0x00002a7au, 0x000200f8u, 0x00002a7au, 0x000700f5u, 0x00000008u, 0x0000730eu, 0x0000265fu, 0x00002a70u, 0x00002a82u, 0x00002a7bu, 0x00050082u, 0x00000008u, 0x00002a84u, 0x00002a73u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002a86u, 0x0000730eu, 0x00002a84u, 0x0003003eu, 0x000024f2u, 0x00002a86u, 0x000200f9u, 0x00002a6fu, 0x000200f8u, 0x00002a6fu, 0x000700f5u, 0x00000008u, 0x0000730fu, 0x0000265fu, 0x00002a4fu, 0x00002a86u, 0x00002a7au, 0x0003003eu, 0x00002a69u, 0x0000730fu, 0x0003003eu, 0x000024f0u, 0x0000730fu, 0x0004003du, 0x00000008u, 0x00002662u, 0x00002632u, 0x00050080u, 0x00000008u, 0x00002663u, 0x00002662u, 0x000001a6u, 0x0003003eu, 0x00005eb8u, 0x000024d6u, 0x0003003eu, 0x00005eb9u, 0x000024deu, 0x0003003eu, 0x000024f5u, 0x00002663u, 0x000300f7u, 0x00002a8fu, 0x00000000u, 0x000400fau, 0x00002a4eu, 0x00002a90u, 0x00002a8fu, 0x000200f8u, 0x00002a90u, 0x000500c4u, 0x00000008u, 0x00002a93u, 0x000001a6u, 0x000024d6u, 0x0003003eu, 0x00002a88u, 0x00002a93u, 0x000500c7u, 0x00000008u, 0x00002a98u, 0x00002625u, 0x000001a9u, 0x000500abu, 0x00000063u, 0x00002a99u, 0x00002a98u, 0x0000019cu, 0x000300f7u, 0x00002a9au, 0x00000000u, 0x000400fau, 0x00002a99u, 0x00002a9bu, 0x00002a9au, 0x000200f8u, 0x00002a9bu, 0x000500c7u, 0x00000008u, 0x00002a9eu, 0x00002663u, 0x00002a93u, 0x00050082u, 0x00000008u, 0x00002a9fu, 0x00002a9eu, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002aa0u, 0x00000001u, 0x0000002au, 0x00002a9fu, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002aa2u, 0x00002663u, 0x00002aa0u, 0x0003003eu, 0x000024f5u, 0x00002aa2u, 0x000200f9u, 0x00002a9au, 0x000200f8u, 0x00002a9au, 0x000700f5u, 0x00000008u, 0x0000732du, 0x00002663u, 0x00002a90u, 0x00002aa2u, 0x00002a9bu, 0x00050082u, 0x00000008u, 0x00002aa4u, 0x00002a93u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002aa6u, 0x0000732du, 0x00002aa4u, 0x0003003eu, 0x000024f5u, 0x00002aa6u, 0x000200f9u, 0x00002a8fu, 0x000200f8u, 0x00002a8fu, 0x000700f5u, 0x00000008u, 0x0000732eu, 0x00002663u, 0x00002a6fu, 0x00002aa6u, 0x00002a9au, 0x0003003eu, 0x00002a89u, 0x0000732eu, 0x0003003eu, 0x000024f3u, 0x0000732eu, 0x0004003du, 0x00000008u, 0x00002667u, 0x00002646u, 0x00050080u, 0x00000008u, 0x00002668u, 0x00002667u, 0x000001a6u, 0x0003003eu, 0x00005ebcu, 0x000024dau, 0x0003003eu, 0x00005ebdu, 0x000024deu, 0x0003003eu, 0x000024f8u, 0x00002668u, 0x000300f7u, 0x00002aafu, 0x00000000u, 0x000400fau, 0x00002a6eu, 0x00002ab0u, 0x00002aafu, 0x000200f8u, 0x00002ab0u, 0x000500c4u, 0x00000008u, 0x00002ab3u, 0x000001a6u, 0x000024dau, 0x0003003eu, 0x00002aa8u, 0x00002ab3u, 0x000500c7u, 0x00000008u, 0x00002ab8u, 0x00002625u, 0x000001d9u, 0x000500abu, 0x00000063u, 0x00002ab9u, 0x00002ab8u, 0x0000019cu, 0x000300f7u, 0x00002abau, 0x00000000u, 0x000400fau, 0x00002ab9u, 0x00002abbu, 0x00002abau, 0x000200f8u, 0x00002abbu, 0x000500c7u, 0x00000008u, 0x00002abeu, 0x00002668u, 0x00002ab3u, 0x00050082u, 0x00000008u, 0x00002abfu, 0x00002abeu, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00002ac0u, 0x00000001u, 0x0000002au, 0x00002abfu, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00002ac2u, 0x00002668u, 0x00002ac0u, 0x0003003eu, 0x000024f8u, 0x00002ac2u, 0x000200f9u, 0x00002abau, 0x000200f8u, 0x00002abau, 0x000700f5u, 0x00000008u, 0x0000734cu, 0x00002668u, 0x00002ab0u, 0x00002ac2u, 0x00002abbu, 0x00050082u, 0x00000008u, 0x00002ac4u, 0x00002ab3u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x00002ac6u, 0x0000734cu, 0x00002ac4u, 0x0003003eu, 0x000024f8u, 0x00002ac6u, 0x000200f9u, 0x00002aafu, 0x000200f8u, 0x00002aafu, 0x000700f5u, 0x00000008u, 0x0000734du, 0x00002668u, 0x00002a8fu, 0x00002ac6u, 0x00002abau, 0x0003003eu, 0x00002aa9u, 0x0000734du, 0x0003003eu, 0x000024f6u, 0x0000734du, 0x00050082u, 0x00000008u, 0x0000266du, 0x0000734du, 0x0000730fu, 0x0007000cu, 0x00000008u, 0x0000266eu, 0x00000001u, 0x0000002au, 0x0000266du, 0x00000bd1u, 0x0003003eu, 0x000024f9u, 0x0000266eu, 0x000500c7u, 0x00000008u, 0x00002670u, 0x0000730fu, 0x00000311u, 0x00050080u, 0x00000008u, 0x00002672u, 0x00002670u, 0x0000266eu, 0x0003003eu, 0x000024f6u, 0x00002672u, 0x0003003eu, 0x000024f0u, 0x00002670u, 0x0004003du, 0x00000058u, 0x00002676u, 0x000024ebu, 0x000500aau, 0x00000451u, 0x00002677u, 0x00002676u, 0x00000bdbu, 0x00050051u, 0x00000063u, 0x00002678u, 0x00002677u, 0x00000000u, 0x00050051u, 0x00000063u, 0x00002679u, 0x00002677u, 0x00000001u, 0x00060050u, 0x00000bddu, 0x0000267au, 0x00001a17u, 0x00002678u, 0x00002679u, 0x0004009bu, 0x00000063u, 0x0000267bu, 0x0000267au, 0x0003003eu, 0x0000193au, 0x0000267bu, 0x000300f7u, 0x0000267du, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000267eu, 0x0000267du, 0x000200f8u, 0x0000267eu, 0x0003003eu, 0x000024ecu, 0x0000019cu, 0x000200f9u, 0x0000267du, 0x000200f8u, 0x0000267du, 0x000600a9u, 0x00000008u, 0x0000b63fu, 0x0000267bu, 0x0000019cu, 0x00002655u, 0x00040071u, 0x00000006u, 0x00002681u, 0x0000b63du, 0x0004007cu, 0x00000008u, 0x00002682u, 0x00002681u, 0x000500aau, 0x00000063u, 0x00002683u, 0x00002682u, 0x000001a6u, 0x0003003eu, 0x000024fau, 0x00002683u, 0x000500afu, 0x00000063u, 0x00002685u, 0x0000b63fu, 0x00000977u, 0x000300f7u, 0x00002686u, 0x00000000u, 0x000400fau, 0x00002685u, 0x00002687u, 0x00002688u, 0x000200f8u, 0x00002688u, 0x00050050u, 0x00000058u, 0x0000268eu, 0x000072f0u, 0x00002670u, 0x0003003eu, 0x000024fcu, 0x0000268eu, 0x000200f9u, 0x00002686u, 0x000200f8u, 0x00002687u, 0x00050050u, 0x00000058u, 0x0000268bu, 0x0000732eu, 0x00002672u, 0x0003003eu, 0x000024fcu, 0x0000268bu, 0x000200f9u, 0x00002686u, 0x000200f8u, 0x00002686u, 0x000700f5u, 0x00000058u, 0x00007379u, 0x0000268bu, 0x00002687u, 0x0000268eu, 0x00002688u, 0x0003003eu, 0x000024fbu, 0x00007379u, 0x000300f7u, 0x00002691u, 0x00000000u, 0x000400fau, 0x000019e7u, 0x00002692u, 0x00002693u, 0x000200f8u, 0x00002693u, 0x000300f7u, 0x00002738u, 0x00000000u, 0x000d00fbu, 0x00002682u, 0x00002738u, 0x00000000u, 0x00002739u, 0x00000001u, 0x0000273au, 0x00000002u, 0x0000273bu, 0x00000003u, 0x0000273cu, 0x00000004u, 0x0000273du, 0x000200f8u, 0x0000273du, 0x00040071u, 0x00000006u, 0x000028f3u, 0x0000b63eu, 0x0004007cu, 0x00000008u, 0x000028f4u, 0x000028f3u, 0x000300f7u, 0x000028f5u, 0x00000000u, 0x000700fbu, 0x000028f4u, 0x000028f6u, 0x00000000u, 0x000028f7u, 0x00000001u, 0x000028f8u, 0x000200f8u, 0x000028f8u, 0x0004007cu, 0x000000abu, 0x0000293au, 0x00007379u, 0x0003003eu, 0x00005fc0u, 0x000024ccu, 0x0003003eu, 0x00005fc1u, 0x000024ceu, 0x0003003eu, 0x000025f6u, 0x000019c4u, 0x0003003eu, 0x000025f7u, 0x0000293au, 0x00050041u, 0x00000007u, 0x00003bb8u, 0x000025f7u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003bb9u, 0x00003bb8u, 0x00050084u, 0x00000006u, 0x00003bbau, 0x000024ceu, 0x00003bb9u, 0x00050080u, 0x00000006u, 0x00003bbbu, 0x000024ccu, 0x00003bbau, 0x0003003eu, 0x00003bb0u, 0x00003bbbu, 0x00050041u, 0x00000007u, 0x00003bbcu, 0x000025f7u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003bbdu, 0x00003bbcu, 0x00050080u, 0x00000006u, 0x00003bbfu, 0x00003bbbu, 0x00003bbdu, 0x0003003eu, 0x00003bb0u, 0x00003bbfu, 0x000500c7u, 0x00000006u, 0x00003bc1u, 0x00003bbfu, 0x0000068au, 0x0003003eu, 0x00003bb0u, 0x00003bc1u, 0x0003003eu, 0x00003bb1u, 0x00003bc1u, 0x0004003du, 0x00000006u, 0x00003bc4u, 0x00003bb8u, 0x000500c7u, 0x00000006u, 0x00003bc5u, 0x00003bc4u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003bc6u, 0x00003bc5u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003bc8u, 0x00003bc1u, 0x00003bc6u, 0x0003003eu, 0x00003bb1u, 0x00003bc8u, 0x000500c6u, 0x00000006u, 0x00003bcau, 0x00003bc8u, 0x000002fbu, 0x0003003eu, 0x00003bb1u, 0x00003bcau, 0x00080041u, 0x000006a8u, 0x00003bcdu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003bcau, 0x0004003du, 0x0000000fu, 0x00003bceu, 0x00003bcdu, 0x00040071u, 0x00000006u, 0x00003bcfu, 0x00003bceu, 0x0003003eu, 0x00003bb2u, 0x00003bcfu, 0x00040071u, 0x00000011u, 0x00003bd1u, 0x00003bcfu, 0x0004007cu, 0x00000012u, 0x00003bd2u, 0x00003bd1u, 0x00070050u, 0x00000013u, 0x00003bd3u, 0x00003bd2u, 0x00003bd2u, 0x00003bd2u, 0x00003bd2u, 0x0003003eu, 0x00003bb3u, 0x00003bd3u, 0x0003003eu, 0x000024ffu, 0x00003bd3u, 0x000300f7u, 0x0000293fu, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002940u, 0x0000293fu, 0x000200f8u, 0x00002940u, 0x00050050u, 0x00000058u, 0x00002943u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002944u, 0x00002943u, 0x0003003eu, 0x00005fc4u, 0x000024ccu, 0x0003003eu, 0x00005fc5u, 0x000024ceu, 0x0003003eu, 0x000025f9u, 0x000019c4u, 0x0003003eu, 0x000025fau, 0x00002944u, 0x00050041u, 0x00000007u, 0x00003bdcu, 0x000025fau, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003bddu, 0x00003bdcu, 0x00050084u, 0x00000006u, 0x00003bdeu, 0x000024ceu, 0x00003bddu, 0x00050080u, 0x00000006u, 0x00003bdfu, 0x000024ccu, 0x00003bdeu, 0x0003003eu, 0x00003bd4u, 0x00003bdfu, 0x00050041u, 0x00000007u, 0x00003be0u, 0x000025fau, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003be1u, 0x00003be0u, 0x00050080u, 0x00000006u, 0x00003be3u, 0x00003bdfu, 0x00003be1u, 0x0003003eu, 0x00003bd4u, 0x00003be3u, 0x000500c7u, 0x00000006u, 0x00003be5u, 0x00003be3u, 0x0000068au, 0x0003003eu, 0x00003bd4u, 0x00003be5u, 0x0003003eu, 0x00003bd5u, 0x00003be5u, 0x0004003du, 0x00000006u, 0x00003be8u, 0x00003bdcu, 0x000500c7u, 0x00000006u, 0x00003be9u, 0x00003be8u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003beau, 0x00003be9u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003becu, 0x00003be5u, 0x00003beau, 0x0003003eu, 0x00003bd5u, 0x00003becu, 0x000500c6u, 0x00000006u, 0x00003beeu, 0x00003becu, 0x000002fbu, 0x0003003eu, 0x00003bd5u, 0x00003beeu, 0x00080041u, 0x000006a8u, 0x00003bf1u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003beeu, 0x0004003du, 0x0000000fu, 0x00003bf2u, 0x00003bf1u, 0x00040071u, 0x00000006u, 0x00003bf3u, 0x00003bf2u, 0x0003003eu, 0x00003bd6u, 0x00003bf3u, 0x00040071u, 0x00000011u, 0x00003bf5u, 0x00003bf3u, 0x0004007cu, 0x00000012u, 0x00003bf6u, 0x00003bf5u, 0x00070050u, 0x00000013u, 0x00003bf7u, 0x00003bf6u, 0x00003bf6u, 0x00003bf6u, 0x00003bf6u, 0x0003003eu, 0x00003bd7u, 0x00003bf7u, 0x0003003eu, 0x00002507u, 0x00003bf7u, 0x00050050u, 0x00000058u, 0x0000294au, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000294bu, 0x0000294au, 0x0003003eu, 0x00005fc8u, 0x000024ccu, 0x0003003eu, 0x00005fc9u, 0x000024ceu, 0x0003003eu, 0x000025fcu, 0x000019c4u, 0x0003003eu, 0x000025fdu, 0x0000294bu, 0x00050041u, 0x00000007u, 0x00003c00u, 0x000025fdu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003c01u, 0x00003c00u, 0x00050084u, 0x00000006u, 0x00003c02u, 0x000024ceu, 0x00003c01u, 0x00050080u, 0x00000006u, 0x00003c03u, 0x000024ccu, 0x00003c02u, 0x0003003eu, 0x00003bf8u, 0x00003c03u, 0x00050041u, 0x00000007u, 0x00003c04u, 0x000025fdu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003c05u, 0x00003c04u, 0x00050080u, 0x00000006u, 0x00003c07u, 0x00003c03u, 0x00003c05u, 0x0003003eu, 0x00003bf8u, 0x00003c07u, 0x000500c7u, 0x00000006u, 0x00003c09u, 0x00003c07u, 0x0000068au, 0x0003003eu, 0x00003bf8u, 0x00003c09u, 0x0003003eu, 0x00003bf9u, 0x00003c09u, 0x0004003du, 0x00000006u, 0x00003c0cu, 0x00003c00u, 0x000500c7u, 0x00000006u, 0x00003c0du, 0x00003c0cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003c0eu, 0x00003c0du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003c10u, 0x00003c09u, 0x00003c0eu, 0x0003003eu, 0x00003bf9u, 0x00003c10u, 0x000500c6u, 0x00000006u, 0x00003c12u, 0x00003c10u, 0x000002fbu, 0x0003003eu, 0x00003bf9u, 0x00003c12u, 0x00080041u, 0x000006a8u, 0x00003c15u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003c12u, 0x0004003du, 0x0000000fu, 0x00003c16u, 0x00003c15u, 0x00040071u, 0x00000006u, 0x00003c17u, 0x00003c16u, 0x0003003eu, 0x00003bfau, 0x00003c17u, 0x00040071u, 0x00000011u, 0x00003c19u, 0x00003c17u, 0x0004007cu, 0x00000012u, 0x00003c1au, 0x00003c19u, 0x00070050u, 0x00000013u, 0x00003c1bu, 0x00003c1au, 0x00003c1au, 0x00003c1au, 0x00003c1au, 0x0003003eu, 0x00003bfbu, 0x00003c1bu, 0x0003003eu, 0x0000250fu, 0x00003c1bu, 0x000200f9u, 0x0000293fu, 0x000200f8u, 0x0000293fu, 0x000700f5u, 0x00000013u, 0x00007854u, 0x00007705u, 0x000028f8u, 0x00003c1bu, 0x00002940u, 0x000700f5u, 0x00000013u, 0x00007762u, 0x00007705u, 0x000028f8u, 0x00003bf7u, 0x00002940u, 0x000300f7u, 0x00002950u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x00002951u, 0x00002950u, 0x000200f8u, 0x00002951u, 0x00050050u, 0x00000058u, 0x00002954u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002955u, 0x00002954u, 0x0003003eu, 0x00005fccu, 0x000024ccu, 0x0003003eu, 0x00005fcdu, 0x000024ceu, 0x0003003eu, 0x000025ffu, 0x000019c4u, 0x0003003eu, 0x00002600u, 0x00002955u, 0x00050041u, 0x00000007u, 0x00003c24u, 0x00002600u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003c25u, 0x00003c24u, 0x00050084u, 0x00000006u, 0x00003c26u, 0x000024ceu, 0x00003c25u, 0x00050080u, 0x00000006u, 0x00003c27u, 0x000024ccu, 0x00003c26u, 0x0003003eu, 0x00003c1cu, 0x00003c27u, 0x00050041u, 0x00000007u, 0x00003c28u, 0x00002600u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003c29u, 0x00003c28u, 0x00050080u, 0x00000006u, 0x00003c2bu, 0x00003c27u, 0x00003c29u, 0x0003003eu, 0x00003c1cu, 0x00003c2bu, 0x000500c7u, 0x00000006u, 0x00003c2du, 0x00003c2bu, 0x0000068au, 0x0003003eu, 0x00003c1cu, 0x00003c2du, 0x0003003eu, 0x00003c1du, 0x00003c2du, 0x0004003du, 0x00000006u, 0x00003c30u, 0x00003c24u, 0x000500c7u, 0x00000006u, 0x00003c31u, 0x00003c30u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003c32u, 0x00003c31u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003c34u, 0x00003c2du, 0x00003c32u, 0x0003003eu, 0x00003c1du, 0x00003c34u, 0x000500c6u, 0x00000006u, 0x00003c36u, 0x00003c34u, 0x000002fbu, 0x0003003eu, 0x00003c1du, 0x00003c36u, 0x00080041u, 0x000006a8u, 0x00003c39u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003c36u, 0x0004003du, 0x0000000fu, 0x00003c3au, 0x00003c39u, 0x00040071u, 0x00000006u, 0x00003c3bu, 0x00003c3au, 0x0003003eu, 0x00003c1eu, 0x00003c3bu, 0x00040071u, 0x00000011u, 0x00003c3du, 0x00003c3bu, 0x0004007cu, 0x00000012u, 0x00003c3eu, 0x00003c3du, 0x00070050u, 0x00000013u, 0x00003c3fu, 0x00003c3eu, 0x00003c3eu, 0x00003c3eu, 0x00003c3eu, 0x0003003eu, 0x00003c1fu, 0x00003c3fu, 0x0003003eu, 0x00002517u, 0x00003c3fu, 0x000200f9u, 0x00002950u, 0x000200f8u, 0x00002950u, 0x000700f5u, 0x00000013u, 0x000078cdu, 0x00007705u, 0x0000293fu, 0x00003c3fu, 0x00002951u, 0x000200f9u, 0x000028f5u, 0x000200f8u, 0x000028f7u, 0x0004007cu, 0x000000abu, 0x0000291au, 0x00007379u, 0x0003003eu, 0x00005fb0u, 0x000024ccu, 0x0003003eu, 0x00005fb1u, 0x000024ceu, 0x0003003eu, 0x000025eau, 0x000019c4u, 0x0003003eu, 0x000025ebu, 0x0000291au, 0x00050041u, 0x00000007u, 0x00003aedu, 0x000025ebu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003aeeu, 0x00003aedu, 0x00050084u, 0x00000006u, 0x00003aefu, 0x000024ceu, 0x00003aeeu, 0x00050080u, 0x00000006u, 0x00003af0u, 0x000024ccu, 0x00003aefu, 0x0003003eu, 0x00003ae4u, 0x00003af0u, 0x00050041u, 0x00000007u, 0x00003af1u, 0x000025ebu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003af2u, 0x00003af1u, 0x000500c2u, 0x00000006u, 0x00003af3u, 0x00003af2u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003af5u, 0x00003af0u, 0x00003af3u, 0x0003003eu, 0x00003ae4u, 0x00003af5u, 0x000500c7u, 0x00000006u, 0x00003af7u, 0x00003af5u, 0x0000068au, 0x0003003eu, 0x00003ae4u, 0x00003af7u, 0x0004003du, 0x00000006u, 0x00003af9u, 0x00003af1u, 0x000400c8u, 0x00000006u, 0x00003afau, 0x00003af9u, 0x000500c7u, 0x00000006u, 0x00003afbu, 0x00003afau, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003afcu, 0x00003afbu, 0x00000692u, 0x0003003eu, 0x00003ae5u, 0x00003afcu, 0x0003003eu, 0x00003ae6u, 0x00003af7u, 0x0004003du, 0x00000006u, 0x00003affu, 0x00003aedu, 0x000500c7u, 0x00000006u, 0x00003b00u, 0x00003affu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003b01u, 0x00003b00u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003b03u, 0x00003af7u, 0x00003b01u, 0x0003003eu, 0x00003ae6u, 0x00003b03u, 0x000500c6u, 0x00000006u, 0x00003b05u, 0x00003b03u, 0x000002fbu, 0x0003003eu, 0x00003ae6u, 0x00003b05u, 0x00080041u, 0x000006a8u, 0x00003b08u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003b05u, 0x0004003du, 0x0000000fu, 0x00003b09u, 0x00003b08u, 0x00040071u, 0x00000006u, 0x00003b0au, 0x00003b09u, 0x0003003eu, 0x00003ae7u, 0x00003b0au, 0x000500c2u, 0x00000006u, 0x00003b0du, 0x00003b0au, 0x00003afcu, 0x000500c7u, 0x00000006u, 0x00003b0eu, 0x00003b0du, 0x000006afu, 0x0003003eu, 0x00003ae7u, 0x00003b0eu, 0x000500c4u, 0x00000006u, 0x00003b10u, 0x00003b0eu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003b12u, 0x00003b0eu, 0x00003b10u, 0x0003003eu, 0x00003ae7u, 0x00003b12u, 0x00040071u, 0x00000011u, 0x00003b14u, 0x00003b12u, 0x0004007cu, 0x00000012u, 0x00003b15u, 0x00003b14u, 0x00070050u, 0x00000013u, 0x00003b16u, 0x00003b15u, 0x00003b15u, 0x00003b15u, 0x00003b15u, 0x0003003eu, 0x00003ae8u, 0x00003b16u, 0x0003003eu, 0x000024ffu, 0x00003b16u, 0x000300f7u, 0x0000291fu, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002920u, 0x0000291fu, 0x000200f8u, 0x00002920u, 0x00050050u, 0x00000058u, 0x00002923u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002924u, 0x00002923u, 0x0003003eu, 0x00005fb4u, 0x000024ccu, 0x0003003eu, 0x00005fb5u, 0x000024ceu, 0x0003003eu, 0x000025edu, 0x000019c4u, 0x0003003eu, 0x000025eeu, 0x00002924u, 0x00050041u, 0x00000007u, 0x00003b20u, 0x000025eeu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003b21u, 0x00003b20u, 0x00050084u, 0x00000006u, 0x00003b22u, 0x000024ceu, 0x00003b21u, 0x00050080u, 0x00000006u, 0x00003b23u, 0x000024ccu, 0x00003b22u, 0x0003003eu, 0x00003b17u, 0x00003b23u, 0x00050041u, 0x00000007u, 0x00003b24u, 0x000025eeu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003b25u, 0x00003b24u, 0x000500c2u, 0x00000006u, 0x00003b26u, 0x00003b25u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003b28u, 0x00003b23u, 0x00003b26u, 0x0003003eu, 0x00003b17u, 0x00003b28u, 0x000500c7u, 0x00000006u, 0x00003b2au, 0x00003b28u, 0x0000068au, 0x0003003eu, 0x00003b17u, 0x00003b2au, 0x0004003du, 0x00000006u, 0x00003b2cu, 0x00003b24u, 0x000400c8u, 0x00000006u, 0x00003b2du, 0x00003b2cu, 0x000500c7u, 0x00000006u, 0x00003b2eu, 0x00003b2du, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003b2fu, 0x00003b2eu, 0x00000692u, 0x0003003eu, 0x00003b18u, 0x00003b2fu, 0x0003003eu, 0x00003b19u, 0x00003b2au, 0x0004003du, 0x00000006u, 0x00003b32u, 0x00003b20u, 0x000500c7u, 0x00000006u, 0x00003b33u, 0x00003b32u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003b34u, 0x00003b33u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003b36u, 0x00003b2au, 0x00003b34u, 0x0003003eu, 0x00003b19u, 0x00003b36u, 0x000500c6u, 0x00000006u, 0x00003b38u, 0x00003b36u, 0x000002fbu, 0x0003003eu, 0x00003b19u, 0x00003b38u, 0x00080041u, 0x000006a8u, 0x00003b3bu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003b38u, 0x0004003du, 0x0000000fu, 0x00003b3cu, 0x00003b3bu, 0x00040071u, 0x00000006u, 0x00003b3du, 0x00003b3cu, 0x0003003eu, 0x00003b1au, 0x00003b3du, 0x000500c2u, 0x00000006u, 0x00003b40u, 0x00003b3du, 0x00003b2fu, 0x000500c7u, 0x00000006u, 0x00003b41u, 0x00003b40u, 0x000006afu, 0x0003003eu, 0x00003b1au, 0x00003b41u, 0x000500c4u, 0x00000006u, 0x00003b43u, 0x00003b41u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003b45u, 0x00003b41u, 0x00003b43u, 0x0003003eu, 0x00003b1au, 0x00003b45u, 0x00040071u, 0x00000011u, 0x00003b47u, 0x00003b45u, 0x0004007cu, 0x00000012u, 0x00003b48u, 0x00003b47u, 0x00070050u, 0x00000013u, 0x00003b49u, 0x00003b48u, 0x00003b48u, 0x00003b48u, 0x00003b48u, 0x0003003eu, 0x00003b1bu, 0x00003b49u, 0x0003003eu, 0x00002507u, 0x00003b49u, 0x00050050u, 0x00000058u, 0x0000292au, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000292bu, 0x0000292au, 0x0003003eu, 0x00005fb8u, 0x000024ccu, 0x0003003eu, 0x00005fb9u, 0x000024ceu, 0x0003003eu, 0x000025f0u, 0x000019c4u, 0x0003003eu, 0x000025f1u, 0x0000292bu, 0x00050041u, 0x00000007u, 0x00003b53u, 0x000025f1u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003b54u, 0x00003b53u, 0x00050084u, 0x00000006u, 0x00003b55u, 0x000024ceu, 0x00003b54u, 0x00050080u, 0x00000006u, 0x00003b56u, 0x000024ccu, 0x00003b55u, 0x0003003eu, 0x00003b4au, 0x00003b56u, 0x00050041u, 0x00000007u, 0x00003b57u, 0x000025f1u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003b58u, 0x00003b57u, 0x000500c2u, 0x00000006u, 0x00003b59u, 0x00003b58u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003b5bu, 0x00003b56u, 0x00003b59u, 0x0003003eu, 0x00003b4au, 0x00003b5bu, 0x000500c7u, 0x00000006u, 0x00003b5du, 0x00003b5bu, 0x0000068au, 0x0003003eu, 0x00003b4au, 0x00003b5du, 0x0004003du, 0x00000006u, 0x00003b5fu, 0x00003b57u, 0x000400c8u, 0x00000006u, 0x00003b60u, 0x00003b5fu, 0x000500c7u, 0x00000006u, 0x00003b61u, 0x00003b60u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003b62u, 0x00003b61u, 0x00000692u, 0x0003003eu, 0x00003b4bu, 0x00003b62u, 0x0003003eu, 0x00003b4cu, 0x00003b5du, 0x0004003du, 0x00000006u, 0x00003b65u, 0x00003b53u, 0x000500c7u, 0x00000006u, 0x00003b66u, 0x00003b65u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003b67u, 0x00003b66u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003b69u, 0x00003b5du, 0x00003b67u, 0x0003003eu, 0x00003b4cu, 0x00003b69u, 0x000500c6u, 0x00000006u, 0x00003b6bu, 0x00003b69u, 0x000002fbu, 0x0003003eu, 0x00003b4cu, 0x00003b6bu, 0x00080041u, 0x000006a8u, 0x00003b6eu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003b6bu, 0x0004003du, 0x0000000fu, 0x00003b6fu, 0x00003b6eu, 0x00040071u, 0x00000006u, 0x00003b70u, 0x00003b6fu, 0x0003003eu, 0x00003b4du, 0x00003b70u, 0x000500c2u, 0x00000006u, 0x00003b73u, 0x00003b70u, 0x00003b62u, 0x000500c7u, 0x00000006u, 0x00003b74u, 0x00003b73u, 0x000006afu, 0x0003003eu, 0x00003b4du, 0x00003b74u, 0x000500c4u, 0x00000006u, 0x00003b76u, 0x00003b74u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003b78u, 0x00003b74u, 0x00003b76u, 0x0003003eu, 0x00003b4du, 0x00003b78u, 0x00040071u, 0x00000011u, 0x00003b7au, 0x00003b78u, 0x0004007cu, 0x00000012u, 0x00003b7bu, 0x00003b7au, 0x00070050u, 0x00000013u, 0x00003b7cu, 0x00003b7bu, 0x00003b7bu, 0x00003b7bu, 0x00003b7bu, 0x0003003eu, 0x00003b4eu, 0x00003b7cu, 0x0003003eu, 0x0000250fu, 0x00003b7cu, 0x000200f9u, 0x0000291fu, 0x000200f8u, 0x0000291fu, 0x000700f5u, 0x00000013u, 0x00007852u, 0x00007705u, 0x000028f7u, 0x00003b7cu, 0x00002920u, 0x000700f5u, 0x00000013u, 0x00007760u, 0x00007705u, 0x000028f7u, 0x00003b49u, 0x00002920u, 0x000300f7u, 0x00002930u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x00002931u, 0x00002930u, 0x000200f8u, 0x00002931u, 0x00050050u, 0x00000058u, 0x00002934u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002935u, 0x00002934u, 0x0003003eu, 0x00005fbcu, 0x000024ccu, 0x0003003eu, 0x00005fbdu, 0x000024ceu, 0x0003003eu, 0x000025f3u, 0x000019c4u, 0x0003003eu, 0x000025f4u, 0x00002935u, 0x00050041u, 0x00000007u, 0x00003b86u, 0x000025f4u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003b87u, 0x00003b86u, 0x00050084u, 0x00000006u, 0x00003b88u, 0x000024ceu, 0x00003b87u, 0x00050080u, 0x00000006u, 0x00003b89u, 0x000024ccu, 0x00003b88u, 0x0003003eu, 0x00003b7du, 0x00003b89u, 0x00050041u, 0x00000007u, 0x00003b8au, 0x000025f4u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003b8bu, 0x00003b8au, 0x000500c2u, 0x00000006u, 0x00003b8cu, 0x00003b8bu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003b8eu, 0x00003b89u, 0x00003b8cu, 0x0003003eu, 0x00003b7du, 0x00003b8eu, 0x000500c7u, 0x00000006u, 0x00003b90u, 0x00003b8eu, 0x0000068au, 0x0003003eu, 0x00003b7du, 0x00003b90u, 0x0004003du, 0x00000006u, 0x00003b92u, 0x00003b8au, 0x000400c8u, 0x00000006u, 0x00003b93u, 0x00003b92u, 0x000500c7u, 0x00000006u, 0x00003b94u, 0x00003b93u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003b95u, 0x00003b94u, 0x00000692u, 0x0003003eu, 0x00003b7eu, 0x00003b95u, 0x0003003eu, 0x00003b7fu, 0x00003b90u, 0x0004003du, 0x00000006u, 0x00003b98u, 0x00003b86u, 0x000500c7u, 0x00000006u, 0x00003b99u, 0x00003b98u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003b9au, 0x00003b99u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003b9cu, 0x00003b90u, 0x00003b9au, 0x0003003eu, 0x00003b7fu, 0x00003b9cu, 0x000500c6u, 0x00000006u, 0x00003b9eu, 0x00003b9cu, 0x000002fbu, 0x0003003eu, 0x00003b7fu, 0x00003b9eu, 0x00080041u, 0x000006a8u, 0x00003ba1u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003b9eu, 0x0004003du, 0x0000000fu, 0x00003ba2u, 0x00003ba1u, 0x00040071u, 0x00000006u, 0x00003ba3u, 0x00003ba2u, 0x0003003eu, 0x00003b80u, 0x00003ba3u, 0x000500c2u, 0x00000006u, 0x00003ba6u, 0x00003ba3u, 0x00003b95u, 0x000500c7u, 0x00000006u, 0x00003ba7u, 0x00003ba6u, 0x000006afu, 0x0003003eu, 0x00003b80u, 0x00003ba7u, 0x000500c4u, 0x00000006u, 0x00003ba9u, 0x00003ba7u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003babu, 0x00003ba7u, 0x00003ba9u, 0x0003003eu, 0x00003b80u, 0x00003babu, 0x00040071u, 0x00000011u, 0x00003badu, 0x00003babu, 0x0004007cu, 0x00000012u, 0x00003baeu, 0x00003badu, 0x00070050u, 0x00000013u, 0x00003bafu, 0x00003baeu, 0x00003baeu, 0x00003baeu, 0x00003baeu, 0x0003003eu, 0x00003b81u, 0x00003bafu, 0x0003003eu, 0x00002517u, 0x00003bafu, 0x000200f9u, 0x00002930u, 0x000200f8u, 0x00002930u, 0x000700f5u, 0x00000013u, 0x000078cbu, 0x00007705u, 0x0000291fu, 0x00003bafu, 0x00002931u, 0x000200f9u, 0x000028f5u, 0x000200f8u, 0x000028f6u, 0x0004007cu, 0x000000abu, 0x000028fau, 0x00007379u, 0x0003003eu, 0x00005fd0u, 0x000024ccu, 0x0003003eu, 0x00005fd1u, 0x000024ceu, 0x0003003eu, 0x00002602u, 0x000019c4u, 0x0003003eu, 0x00002603u, 0x000028fau, 0x00050041u, 0x00000007u, 0x00003a3cu, 0x00002603u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003a3du, 0x00003a3cu, 0x00050084u, 0x00000006u, 0x00003a3eu, 0x000024ceu, 0x00003a3du, 0x00050080u, 0x00000006u, 0x00003a3fu, 0x000024ccu, 0x00003a3eu, 0x0003003eu, 0x00003a34u, 0x00003a3fu, 0x00050041u, 0x00000007u, 0x00003a40u, 0x00002603u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003a41u, 0x00003a40u, 0x00050084u, 0x00000006u, 0x00003a42u, 0x00003a41u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003a44u, 0x00003a3fu, 0x00003a42u, 0x0003003eu, 0x00003a34u, 0x00003a44u, 0x000500c7u, 0x00000006u, 0x00003a46u, 0x00003a44u, 0x0000068au, 0x0003003eu, 0x00003a34u, 0x00003a46u, 0x000500c2u, 0x00000006u, 0x00003a48u, 0x00003a46u, 0x000001a6u, 0x0003003eu, 0x00003a35u, 0x00003a48u, 0x0004003du, 0x00000006u, 0x00003a4au, 0x00003a3cu, 0x000500c7u, 0x00000006u, 0x00003a4bu, 0x00003a4au, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003a4cu, 0x00003a4bu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003a4eu, 0x00003a48u, 0x00003a4cu, 0x0003003eu, 0x00003a35u, 0x00003a4eu, 0x000500c6u, 0x00000006u, 0x00003a50u, 0x00003a4eu, 0x000002f4u, 0x0003003eu, 0x00003a35u, 0x00003a50u, 0x00080041u, 0x00000778u, 0x00003a53u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003a50u, 0x0004003du, 0x00000011u, 0x00003a54u, 0x00003a53u, 0x00040071u, 0x00000006u, 0x00003a55u, 0x00003a54u, 0x0003003eu, 0x00003a36u, 0x00003a55u, 0x000500c2u, 0x00000006u, 0x00003a57u, 0x00003a55u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003a58u, 0x00003a57u, 0x0004007cu, 0x00000012u, 0x00003a59u, 0x00003a58u, 0x000500c7u, 0x00000006u, 0x00003a5bu, 0x00003a55u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003a5cu, 0x00003a5bu, 0x0004007cu, 0x00000012u, 0x00003a5du, 0x00003a5cu, 0x00050050u, 0x0000011du, 0x00003a5eu, 0x00003a59u, 0x00003a5du, 0x0009004fu, 0x00000013u, 0x00003a5fu, 0x00003a5eu, 0x00003a5eu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003a37u, 0x00003a5fu, 0x0003003eu, 0x000024ffu, 0x00003a5fu, 0x000300f7u, 0x000028ffu, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002900u, 0x000028ffu, 0x000200f8u, 0x00002900u, 0x00050050u, 0x00000058u, 0x00002903u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002904u, 0x00002903u, 0x0003003eu, 0x00005fd4u, 0x000024ccu, 0x0003003eu, 0x00005fd5u, 0x000024ceu, 0x0003003eu, 0x00002605u, 0x000019c4u, 0x0003003eu, 0x00002606u, 0x00002904u, 0x00050041u, 0x00000007u, 0x00003a68u, 0x00002606u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003a69u, 0x00003a68u, 0x00050084u, 0x00000006u, 0x00003a6au, 0x000024ceu, 0x00003a69u, 0x00050080u, 0x00000006u, 0x00003a6bu, 0x000024ccu, 0x00003a6au, 0x0003003eu, 0x00003a60u, 0x00003a6bu, 0x00050041u, 0x00000007u, 0x00003a6cu, 0x00002606u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003a6du, 0x00003a6cu, 0x00050084u, 0x00000006u, 0x00003a6eu, 0x00003a6du, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003a70u, 0x00003a6bu, 0x00003a6eu, 0x0003003eu, 0x00003a60u, 0x00003a70u, 0x000500c7u, 0x00000006u, 0x00003a72u, 0x00003a70u, 0x0000068au, 0x0003003eu, 0x00003a60u, 0x00003a72u, 0x000500c2u, 0x00000006u, 0x00003a74u, 0x00003a72u, 0x000001a6u, 0x0003003eu, 0x00003a61u, 0x00003a74u, 0x0004003du, 0x00000006u, 0x00003a76u, 0x00003a68u, 0x000500c7u, 0x00000006u, 0x00003a77u, 0x00003a76u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003a78u, 0x00003a77u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003a7au, 0x00003a74u, 0x00003a78u, 0x0003003eu, 0x00003a61u, 0x00003a7au, 0x000500c6u, 0x00000006u, 0x00003a7cu, 0x00003a7au, 0x000002f4u, 0x0003003eu, 0x00003a61u, 0x00003a7cu, 0x00080041u, 0x00000778u, 0x00003a7fu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003a7cu, 0x0004003du, 0x00000011u, 0x00003a80u, 0x00003a7fu, 0x00040071u, 0x00000006u, 0x00003a81u, 0x00003a80u, 0x0003003eu, 0x00003a62u, 0x00003a81u, 0x000500c2u, 0x00000006u, 0x00003a83u, 0x00003a81u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003a84u, 0x00003a83u, 0x0004007cu, 0x00000012u, 0x00003a85u, 0x00003a84u, 0x000500c7u, 0x00000006u, 0x00003a87u, 0x00003a81u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003a88u, 0x00003a87u, 0x0004007cu, 0x00000012u, 0x00003a89u, 0x00003a88u, 0x00050050u, 0x0000011du, 0x00003a8au, 0x00003a85u, 0x00003a89u, 0x0009004fu, 0x00000013u, 0x00003a8bu, 0x00003a8au, 0x00003a8au, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003a63u, 0x00003a8bu, 0x0003003eu, 0x00002507u, 0x00003a8bu, 0x00050050u, 0x00000058u, 0x0000290au, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000290bu, 0x0000290au, 0x0003003eu, 0x00005fd8u, 0x000024ccu, 0x0003003eu, 0x00005fd9u, 0x000024ceu, 0x0003003eu, 0x00002608u, 0x000019c4u, 0x0003003eu, 0x00002609u, 0x0000290bu, 0x00050041u, 0x00000007u, 0x00003a94u, 0x00002609u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003a95u, 0x00003a94u, 0x00050084u, 0x00000006u, 0x00003a96u, 0x000024ceu, 0x00003a95u, 0x00050080u, 0x00000006u, 0x00003a97u, 0x000024ccu, 0x00003a96u, 0x0003003eu, 0x00003a8cu, 0x00003a97u, 0x00050041u, 0x00000007u, 0x00003a98u, 0x00002609u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003a99u, 0x00003a98u, 0x00050084u, 0x00000006u, 0x00003a9au, 0x00003a99u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003a9cu, 0x00003a97u, 0x00003a9au, 0x0003003eu, 0x00003a8cu, 0x00003a9cu, 0x000500c7u, 0x00000006u, 0x00003a9eu, 0x00003a9cu, 0x0000068au, 0x0003003eu, 0x00003a8cu, 0x00003a9eu, 0x000500c2u, 0x00000006u, 0x00003aa0u, 0x00003a9eu, 0x000001a6u, 0x0003003eu, 0x00003a8du, 0x00003aa0u, 0x0004003du, 0x00000006u, 0x00003aa2u, 0x00003a94u, 0x000500c7u, 0x00000006u, 0x00003aa3u, 0x00003aa2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003aa4u, 0x00003aa3u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003aa6u, 0x00003aa0u, 0x00003aa4u, 0x0003003eu, 0x00003a8du, 0x00003aa6u, 0x000500c6u, 0x00000006u, 0x00003aa8u, 0x00003aa6u, 0x000002f4u, 0x0003003eu, 0x00003a8du, 0x00003aa8u, 0x00080041u, 0x00000778u, 0x00003aabu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003aa8u, 0x0004003du, 0x00000011u, 0x00003aacu, 0x00003aabu, 0x00040071u, 0x00000006u, 0x00003aadu, 0x00003aacu, 0x0003003eu, 0x00003a8eu, 0x00003aadu, 0x000500c2u, 0x00000006u, 0x00003aafu, 0x00003aadu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003ab0u, 0x00003aafu, 0x0004007cu, 0x00000012u, 0x00003ab1u, 0x00003ab0u, 0x000500c7u, 0x00000006u, 0x00003ab3u, 0x00003aadu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003ab4u, 0x00003ab3u, 0x0004007cu, 0x00000012u, 0x00003ab5u, 0x00003ab4u, 0x00050050u, 0x0000011du, 0x00003ab6u, 0x00003ab1u, 0x00003ab5u, 0x0009004fu, 0x00000013u, 0x00003ab7u, 0x00003ab6u, 0x00003ab6u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003a8fu, 0x00003ab7u, 0x0003003eu, 0x0000250fu, 0x00003ab7u, 0x000200f9u, 0x000028ffu, 0x000200f8u, 0x000028ffu, 0x000700f5u, 0x00000013u, 0x00007850u, 0x00007705u, 0x000028f6u, 0x00003ab7u, 0x00002900u, 0x000700f5u, 0x00000013u, 0x0000775eu, 0x00007705u, 0x000028f6u, 0x00003a8bu, 0x00002900u, 0x000300f7u, 0x00002910u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x00002911u, 0x00002910u, 0x000200f8u, 0x00002911u, 0x00050050u, 0x00000058u, 0x00002914u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002915u, 0x00002914u, 0x0003003eu, 0x00005fdcu, 0x000024ccu, 0x0003003eu, 0x00005fddu, 0x000024ceu, 0x0003003eu, 0x0000260bu, 0x000019c4u, 0x0003003eu, 0x0000260cu, 0x00002915u, 0x00050041u, 0x00000007u, 0x00003ac0u, 0x0000260cu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003ac1u, 0x00003ac0u, 0x00050084u, 0x00000006u, 0x00003ac2u, 0x000024ceu, 0x00003ac1u, 0x00050080u, 0x00000006u, 0x00003ac3u, 0x000024ccu, 0x00003ac2u, 0x0003003eu, 0x00003ab8u, 0x00003ac3u, 0x00050041u, 0x00000007u, 0x00003ac4u, 0x0000260cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003ac5u, 0x00003ac4u, 0x00050084u, 0x00000006u, 0x00003ac6u, 0x00003ac5u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003ac8u, 0x00003ac3u, 0x00003ac6u, 0x0003003eu, 0x00003ab8u, 0x00003ac8u, 0x000500c7u, 0x00000006u, 0x00003acau, 0x00003ac8u, 0x0000068au, 0x0003003eu, 0x00003ab8u, 0x00003acau, 0x000500c2u, 0x00000006u, 0x00003accu, 0x00003acau, 0x000001a6u, 0x0003003eu, 0x00003ab9u, 0x00003accu, 0x0004003du, 0x00000006u, 0x00003aceu, 0x00003ac0u, 0x000500c7u, 0x00000006u, 0x00003acfu, 0x00003aceu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003ad0u, 0x00003acfu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003ad2u, 0x00003accu, 0x00003ad0u, 0x0003003eu, 0x00003ab9u, 0x00003ad2u, 0x000500c6u, 0x00000006u, 0x00003ad4u, 0x00003ad2u, 0x000002f4u, 0x0003003eu, 0x00003ab9u, 0x00003ad4u, 0x00080041u, 0x00000778u, 0x00003ad7u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003ad4u, 0x0004003du, 0x00000011u, 0x00003ad8u, 0x00003ad7u, 0x00040071u, 0x00000006u, 0x00003ad9u, 0x00003ad8u, 0x0003003eu, 0x00003abau, 0x00003ad9u, 0x000500c2u, 0x00000006u, 0x00003adbu, 0x00003ad9u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003adcu, 0x00003adbu, 0x0004007cu, 0x00000012u, 0x00003addu, 0x00003adcu, 0x000500c7u, 0x00000006u, 0x00003adfu, 0x00003ad9u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003ae0u, 0x00003adfu, 0x0004007cu, 0x00000012u, 0x00003ae1u, 0x00003ae0u, 0x00050050u, 0x0000011du, 0x00003ae2u, 0x00003addu, 0x00003ae1u, 0x0009004fu, 0x00000013u, 0x00003ae3u, 0x00003ae2u, 0x00003ae2u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003abbu, 0x00003ae3u, 0x0003003eu, 0x00002517u, 0x00003ae3u, 0x000200f9u, 0x00002910u, 0x000200f8u, 0x00002910u, 0x000700f5u, 0x00000013u, 0x000078c9u, 0x00007705u, 0x000028ffu, 0x00003ae3u, 0x00002911u, 0x000200f9u, 0x000028f5u, 0x000200f8u, 0x000028f5u, 0x000900f5u, 0x00000013u, 0x000078c8u, 0x000078c9u, 0x00002910u, 0x000078cbu, 0x00002930u, 0x000078cdu, 0x00002950u, 0x000900f5u, 0x00000013u, 0x0000784eu, 0x00007850u, 0x00002910u, 0x00007852u, 0x00002930u, 0x00007854u, 0x00002950u, 0x000900f5u, 0x00000013u, 0x000077d6u, 0x00003a5fu, 0x00002910u, 0x00003b16u, 0x00002930u, 0x00003bd3u, 0x00002950u, 0x000900f5u, 0x00000013u, 0x0000775cu, 0x0000775eu, 0x00002910u, 0x00007760u, 0x00002930u, 0x00007762u, 0x00002950u, 0x000200f9u, 0x00002738u, 0x000200f8u, 0x0000273cu, 0x00040071u, 0x00000006u, 0x0000286au, 0x0000b63eu, 0x0004007cu, 0x00000008u, 0x0000286bu, 0x0000286au, 0x000300f7u, 0x0000286cu, 0x00000000u, 0x000b00fbu, 0x0000286bu, 0x0000286cu, 0x00000000u, 0x0000286du, 0x00000001u, 0x0000286eu, 0x00000002u, 0x0000286fu, 0x00000003u, 0x00002870u, 0x000200f8u, 0x00002870u, 0x0004007cu, 0x000000abu, 0x000028d2u, 0x00007379u, 0x0003003eu, 0x00005fa0u, 0x000024ccu, 0x0003003eu, 0x00005fa1u, 0x000024ceu, 0x0003003eu, 0x000025deu, 0x000019c4u, 0x0003003eu, 0x000025dfu, 0x000028d2u, 0x00050041u, 0x00000007u, 0x0000398cu, 0x000025dfu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000398du, 0x0000398cu, 0x00050084u, 0x00000006u, 0x0000398eu, 0x000024ceu, 0x0000398du, 0x00050080u, 0x00000006u, 0x0000398fu, 0x000024ccu, 0x0000398eu, 0x0003003eu, 0x00003984u, 0x0000398fu, 0x00050041u, 0x00000007u, 0x00003990u, 0x000025dfu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003991u, 0x00003990u, 0x00050084u, 0x00000006u, 0x00003992u, 0x00003991u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003994u, 0x0000398fu, 0x00003992u, 0x0003003eu, 0x00003984u, 0x00003994u, 0x000500c7u, 0x00000006u, 0x00003996u, 0x00003994u, 0x0000068au, 0x0003003eu, 0x00003984u, 0x00003996u, 0x000500c2u, 0x00000006u, 0x00003998u, 0x00003996u, 0x000001a6u, 0x0003003eu, 0x00003985u, 0x00003998u, 0x0004003du, 0x00000006u, 0x0000399au, 0x0000398cu, 0x000500c7u, 0x00000006u, 0x0000399bu, 0x0000399au, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000399cu, 0x0000399bu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000399eu, 0x00003998u, 0x0000399cu, 0x0003003eu, 0x00003985u, 0x0000399eu, 0x000500c6u, 0x00000006u, 0x000039a0u, 0x0000399eu, 0x000002f4u, 0x0003003eu, 0x00003985u, 0x000039a0u, 0x00080041u, 0x00000778u, 0x000039a3u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000039a0u, 0x0004003du, 0x00000011u, 0x000039a4u, 0x000039a3u, 0x00040071u, 0x00000006u, 0x000039a5u, 0x000039a4u, 0x0003003eu, 0x00003986u, 0x000039a5u, 0x000500c2u, 0x00000006u, 0x000039a7u, 0x000039a5u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000039a8u, 0x000039a7u, 0x0004007cu, 0x00000012u, 0x000039a9u, 0x000039a8u, 0x000500c7u, 0x00000006u, 0x000039abu, 0x000039a5u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000039acu, 0x000039abu, 0x0004007cu, 0x00000012u, 0x000039adu, 0x000039acu, 0x00050050u, 0x0000011du, 0x000039aeu, 0x000039a9u, 0x000039adu, 0x0009004fu, 0x00000013u, 0x000039afu, 0x000039aeu, 0x000039aeu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003987u, 0x000039afu, 0x0003003eu, 0x000024ffu, 0x000039afu, 0x000300f7u, 0x000028d7u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000028d8u, 0x000028d7u, 0x000200f8u, 0x000028d8u, 0x00050050u, 0x00000058u, 0x000028dbu, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000028dcu, 0x000028dbu, 0x0003003eu, 0x00005fa4u, 0x000024ccu, 0x0003003eu, 0x00005fa5u, 0x000024ceu, 0x0003003eu, 0x000025e1u, 0x000019c4u, 0x0003003eu, 0x000025e2u, 0x000028dcu, 0x00050041u, 0x00000007u, 0x000039b8u, 0x000025e2u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000039b9u, 0x000039b8u, 0x00050084u, 0x00000006u, 0x000039bau, 0x000024ceu, 0x000039b9u, 0x00050080u, 0x00000006u, 0x000039bbu, 0x000024ccu, 0x000039bau, 0x0003003eu, 0x000039b0u, 0x000039bbu, 0x00050041u, 0x00000007u, 0x000039bcu, 0x000025e2u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000039bdu, 0x000039bcu, 0x00050084u, 0x00000006u, 0x000039beu, 0x000039bdu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000039c0u, 0x000039bbu, 0x000039beu, 0x0003003eu, 0x000039b0u, 0x000039c0u, 0x000500c7u, 0x00000006u, 0x000039c2u, 0x000039c0u, 0x0000068au, 0x0003003eu, 0x000039b0u, 0x000039c2u, 0x000500c2u, 0x00000006u, 0x000039c4u, 0x000039c2u, 0x000001a6u, 0x0003003eu, 0x000039b1u, 0x000039c4u, 0x0004003du, 0x00000006u, 0x000039c6u, 0x000039b8u, 0x000500c7u, 0x00000006u, 0x000039c7u, 0x000039c6u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000039c8u, 0x000039c7u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000039cau, 0x000039c4u, 0x000039c8u, 0x0003003eu, 0x000039b1u, 0x000039cau, 0x000500c6u, 0x00000006u, 0x000039ccu, 0x000039cau, 0x000002f4u, 0x0003003eu, 0x000039b1u, 0x000039ccu, 0x00080041u, 0x00000778u, 0x000039cfu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000039ccu, 0x0004003du, 0x00000011u, 0x000039d0u, 0x000039cfu, 0x00040071u, 0x00000006u, 0x000039d1u, 0x000039d0u, 0x0003003eu, 0x000039b2u, 0x000039d1u, 0x000500c2u, 0x00000006u, 0x000039d3u, 0x000039d1u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000039d4u, 0x000039d3u, 0x0004007cu, 0x00000012u, 0x000039d5u, 0x000039d4u, 0x000500c7u, 0x00000006u, 0x000039d7u, 0x000039d1u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000039d8u, 0x000039d7u, 0x0004007cu, 0x00000012u, 0x000039d9u, 0x000039d8u, 0x00050050u, 0x0000011du, 0x000039dau, 0x000039d5u, 0x000039d9u, 0x0009004fu, 0x00000013u, 0x000039dbu, 0x000039dau, 0x000039dau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000039b3u, 0x000039dbu, 0x0003003eu, 0x00002507u, 0x000039dbu, 0x00050050u, 0x00000058u, 0x000028e2u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000028e3u, 0x000028e2u, 0x0003003eu, 0x00005fa8u, 0x000024ccu, 0x0003003eu, 0x00005fa9u, 0x000024ceu, 0x0003003eu, 0x000025e4u, 0x000019c4u, 0x0003003eu, 0x000025e5u, 0x000028e3u, 0x00050041u, 0x00000007u, 0x000039e4u, 0x000025e5u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000039e5u, 0x000039e4u, 0x00050084u, 0x00000006u, 0x000039e6u, 0x000024ceu, 0x000039e5u, 0x00050080u, 0x00000006u, 0x000039e7u, 0x000024ccu, 0x000039e6u, 0x0003003eu, 0x000039dcu, 0x000039e7u, 0x00050041u, 0x00000007u, 0x000039e8u, 0x000025e5u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000039e9u, 0x000039e8u, 0x00050084u, 0x00000006u, 0x000039eau, 0x000039e9u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000039ecu, 0x000039e7u, 0x000039eau, 0x0003003eu, 0x000039dcu, 0x000039ecu, 0x000500c7u, 0x00000006u, 0x000039eeu, 0x000039ecu, 0x0000068au, 0x0003003eu, 0x000039dcu, 0x000039eeu, 0x000500c2u, 0x00000006u, 0x000039f0u, 0x000039eeu, 0x000001a6u, 0x0003003eu, 0x000039ddu, 0x000039f0u, 0x0004003du, 0x00000006u, 0x000039f2u, 0x000039e4u, 0x000500c7u, 0x00000006u, 0x000039f3u, 0x000039f2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000039f4u, 0x000039f3u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000039f6u, 0x000039f0u, 0x000039f4u, 0x0003003eu, 0x000039ddu, 0x000039f6u, 0x000500c6u, 0x00000006u, 0x000039f8u, 0x000039f6u, 0x000002f4u, 0x0003003eu, 0x000039ddu, 0x000039f8u, 0x00080041u, 0x00000778u, 0x000039fbu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000039f8u, 0x0004003du, 0x00000011u, 0x000039fcu, 0x000039fbu, 0x00040071u, 0x00000006u, 0x000039fdu, 0x000039fcu, 0x0003003eu, 0x000039deu, 0x000039fdu, 0x000500c2u, 0x00000006u, 0x000039ffu, 0x000039fdu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003a00u, 0x000039ffu, 0x0004007cu, 0x00000012u, 0x00003a01u, 0x00003a00u, 0x000500c7u, 0x00000006u, 0x00003a03u, 0x000039fdu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003a04u, 0x00003a03u, 0x0004007cu, 0x00000012u, 0x00003a05u, 0x00003a04u, 0x00050050u, 0x0000011du, 0x00003a06u, 0x00003a01u, 0x00003a05u, 0x0009004fu, 0x00000013u, 0x00003a07u, 0x00003a06u, 0x00003a06u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000039dfu, 0x00003a07u, 0x0003003eu, 0x0000250fu, 0x00003a07u, 0x000200f9u, 0x000028d7u, 0x000200f8u, 0x000028d7u, 0x000700f5u, 0x00000013u, 0x0000784du, 0x00007705u, 0x00002870u, 0x00003a07u, 0x000028d8u, 0x000700f5u, 0x00000013u, 0x0000775bu, 0x00007705u, 0x00002870u, 0x000039dbu, 0x000028d8u, 0x000300f7u, 0x000028e8u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000028e9u, 0x000028e8u, 0x000200f8u, 0x000028e9u, 0x00050050u, 0x00000058u, 0x000028ecu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000028edu, 0x000028ecu, 0x0003003eu, 0x00005facu, 0x000024ccu, 0x0003003eu, 0x00005fadu, 0x000024ceu, 0x0003003eu, 0x000025e7u, 0x000019c4u, 0x0003003eu, 0x000025e8u, 0x000028edu, 0x00050041u, 0x00000007u, 0x00003a10u, 0x000025e8u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003a11u, 0x00003a10u, 0x00050084u, 0x00000006u, 0x00003a12u, 0x000024ceu, 0x00003a11u, 0x00050080u, 0x00000006u, 0x00003a13u, 0x000024ccu, 0x00003a12u, 0x0003003eu, 0x00003a08u, 0x00003a13u, 0x00050041u, 0x00000007u, 0x00003a14u, 0x000025e8u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003a15u, 0x00003a14u, 0x00050084u, 0x00000006u, 0x00003a16u, 0x00003a15u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003a18u, 0x00003a13u, 0x00003a16u, 0x0003003eu, 0x00003a08u, 0x00003a18u, 0x000500c7u, 0x00000006u, 0x00003a1au, 0x00003a18u, 0x0000068au, 0x0003003eu, 0x00003a08u, 0x00003a1au, 0x000500c2u, 0x00000006u, 0x00003a1cu, 0x00003a1au, 0x000001a6u, 0x0003003eu, 0x00003a09u, 0x00003a1cu, 0x0004003du, 0x00000006u, 0x00003a1eu, 0x00003a10u, 0x000500c7u, 0x00000006u, 0x00003a1fu, 0x00003a1eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003a20u, 0x00003a1fu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003a22u, 0x00003a1cu, 0x00003a20u, 0x0003003eu, 0x00003a09u, 0x00003a22u, 0x000500c6u, 0x00000006u, 0x00003a24u, 0x00003a22u, 0x000002f4u, 0x0003003eu, 0x00003a09u, 0x00003a24u, 0x00080041u, 0x00000778u, 0x00003a27u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003a24u, 0x0004003du, 0x00000011u, 0x00003a28u, 0x00003a27u, 0x00040071u, 0x00000006u, 0x00003a29u, 0x00003a28u, 0x0003003eu, 0x00003a0au, 0x00003a29u, 0x000500c2u, 0x00000006u, 0x00003a2bu, 0x00003a29u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003a2cu, 0x00003a2bu, 0x0004007cu, 0x00000012u, 0x00003a2du, 0x00003a2cu, 0x000500c7u, 0x00000006u, 0x00003a2fu, 0x00003a29u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003a30u, 0x00003a2fu, 0x0004007cu, 0x00000012u, 0x00003a31u, 0x00003a30u, 0x00050050u, 0x0000011du, 0x00003a32u, 0x00003a2du, 0x00003a31u, 0x0009004fu, 0x00000013u, 0x00003a33u, 0x00003a32u, 0x00003a32u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003a0bu, 0x00003a33u, 0x0003003eu, 0x00002517u, 0x00003a33u, 0x000200f9u, 0x000028e8u, 0x000200f8u, 0x000028e8u, 0x000700f5u, 0x00000013u, 0x000078c6u, 0x00007705u, 0x000028d7u, 0x00003a33u, 0x000028e9u, 0x000200f9u, 0x0000286cu, 0x000200f8u, 0x0000286fu, 0x0004007cu, 0x000000abu, 0x000028b2u, 0x00007379u, 0x0003003eu, 0x00005f90u, 0x000024ccu, 0x0003003eu, 0x00005f91u, 0x000024ceu, 0x0003003eu, 0x000025d2u, 0x000019c4u, 0x0003003eu, 0x000025d3u, 0x000028b2u, 0x00050041u, 0x00000007u, 0x000038a9u, 0x000025d3u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000038aau, 0x000038a9u, 0x00050084u, 0x00000006u, 0x000038abu, 0x000024ceu, 0x000038aau, 0x00050080u, 0x00000006u, 0x000038acu, 0x000024ccu, 0x000038abu, 0x0003003eu, 0x000038a0u, 0x000038acu, 0x00050041u, 0x00000007u, 0x000038adu, 0x000025d3u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000038aeu, 0x000038adu, 0x00050084u, 0x00000006u, 0x000038afu, 0x000038aeu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000038b1u, 0x000038acu, 0x000038afu, 0x0003003eu, 0x000038a0u, 0x000038b1u, 0x000500c7u, 0x00000006u, 0x000038b3u, 0x000038b1u, 0x0000068au, 0x0003003eu, 0x000038a0u, 0x000038b3u, 0x000500c2u, 0x00000006u, 0x000038b5u, 0x000038b3u, 0x000001a6u, 0x0003003eu, 0x000038a1u, 0x000038b5u, 0x0004003du, 0x00000006u, 0x000038b7u, 0x000038a9u, 0x000500c7u, 0x00000006u, 0x000038b8u, 0x000038b7u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000038b9u, 0x000038b8u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000038bbu, 0x000038b5u, 0x000038b9u, 0x0003003eu, 0x000038a1u, 0x000038bbu, 0x000500c6u, 0x00000006u, 0x000038bdu, 0x000038bbu, 0x000002f4u, 0x0003003eu, 0x000038a1u, 0x000038bdu, 0x00080041u, 0x00000778u, 0x000038c0u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000038bdu, 0x0004003du, 0x00000011u, 0x000038c1u, 0x000038c0u, 0x00040071u, 0x00000006u, 0x000038c2u, 0x000038c1u, 0x0003003eu, 0x000038a2u, 0x000038c2u, 0x0003003eu, 0x000038a3u, 0x000038c2u, 0x000500c2u, 0x00000006u, 0x000038c9u, 0x000038c2u, 0x000001d9u, 0x0003003eu, 0x000038c5u, 0x000038c9u, 0x000500c7u, 0x00000006u, 0x000038cbu, 0x000038c2u, 0x00000657u, 0x0003003eu, 0x000038c6u, 0x000038cbu, 0x00040071u, 0x00000011u, 0x000038cdu, 0x000038c9u, 0x0004007cu, 0x00000012u, 0x000038ceu, 0x000038cdu, 0x00040071u, 0x00000011u, 0x000038d6u, 0x000038cbu, 0x0004007cu, 0x00000012u, 0x000038d7u, 0x000038d6u, 0x00070050u, 0x00000013u, 0x000038d8u, 0x000038ceu, 0x000038ceu, 0x000038ceu, 0x000038d7u, 0x0003003eu, 0x000038c7u, 0x000038d8u, 0x0003003eu, 0x000038a4u, 0x000038d8u, 0x0003003eu, 0x000024ffu, 0x000038d8u, 0x000300f7u, 0x000028b7u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000028b8u, 0x000028b7u, 0x000200f8u, 0x000028b8u, 0x00050050u, 0x00000058u, 0x000028bbu, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000028bcu, 0x000028bbu, 0x0003003eu, 0x00005f94u, 0x000024ccu, 0x0003003eu, 0x00005f95u, 0x000024ceu, 0x0003003eu, 0x000025d5u, 0x000019c4u, 0x0003003eu, 0x000025d6u, 0x000028bcu, 0x00050041u, 0x00000007u, 0x000038e2u, 0x000025d6u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000038e3u, 0x000038e2u, 0x00050084u, 0x00000006u, 0x000038e4u, 0x000024ceu, 0x000038e3u, 0x00050080u, 0x00000006u, 0x000038e5u, 0x000024ccu, 0x000038e4u, 0x0003003eu, 0x000038d9u, 0x000038e5u, 0x00050041u, 0x00000007u, 0x000038e6u, 0x000025d6u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000038e7u, 0x000038e6u, 0x00050084u, 0x00000006u, 0x000038e8u, 0x000038e7u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000038eau, 0x000038e5u, 0x000038e8u, 0x0003003eu, 0x000038d9u, 0x000038eau, 0x000500c7u, 0x00000006u, 0x000038ecu, 0x000038eau, 0x0000068au, 0x0003003eu, 0x000038d9u, 0x000038ecu, 0x000500c2u, 0x00000006u, 0x000038eeu, 0x000038ecu, 0x000001a6u, 0x0003003eu, 0x000038dau, 0x000038eeu, 0x0004003du, 0x00000006u, 0x000038f0u, 0x000038e2u, 0x000500c7u, 0x00000006u, 0x000038f1u, 0x000038f0u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000038f2u, 0x000038f1u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000038f4u, 0x000038eeu, 0x000038f2u, 0x0003003eu, 0x000038dau, 0x000038f4u, 0x000500c6u, 0x00000006u, 0x000038f6u, 0x000038f4u, 0x000002f4u, 0x0003003eu, 0x000038dau, 0x000038f6u, 0x00080041u, 0x00000778u, 0x000038f9u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000038f6u, 0x0004003du, 0x00000011u, 0x000038fau, 0x000038f9u, 0x00040071u, 0x00000006u, 0x000038fbu, 0x000038fau, 0x0003003eu, 0x000038dbu, 0x000038fbu, 0x0003003eu, 0x000038dcu, 0x000038fbu, 0x000500c2u, 0x00000006u, 0x00003902u, 0x000038fbu, 0x000001d9u, 0x0003003eu, 0x000038feu, 0x00003902u, 0x000500c7u, 0x00000006u, 0x00003904u, 0x000038fbu, 0x00000657u, 0x0003003eu, 0x000038ffu, 0x00003904u, 0x00040071u, 0x00000011u, 0x00003906u, 0x00003902u, 0x0004007cu, 0x00000012u, 0x00003907u, 0x00003906u, 0x00040071u, 0x00000011u, 0x0000390fu, 0x00003904u, 0x0004007cu, 0x00000012u, 0x00003910u, 0x0000390fu, 0x00070050u, 0x00000013u, 0x00003911u, 0x00003907u, 0x00003907u, 0x00003907u, 0x00003910u, 0x0003003eu, 0x00003900u, 0x00003911u, 0x0003003eu, 0x000038ddu, 0x00003911u, 0x0003003eu, 0x00002507u, 0x00003911u, 0x00050050u, 0x00000058u, 0x000028c2u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000028c3u, 0x000028c2u, 0x0003003eu, 0x00005f98u, 0x000024ccu, 0x0003003eu, 0x00005f99u, 0x000024ceu, 0x0003003eu, 0x000025d8u, 0x000019c4u, 0x0003003eu, 0x000025d9u, 0x000028c3u, 0x00050041u, 0x00000007u, 0x0000391bu, 0x000025d9u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000391cu, 0x0000391bu, 0x00050084u, 0x00000006u, 0x0000391du, 0x000024ceu, 0x0000391cu, 0x00050080u, 0x00000006u, 0x0000391eu, 0x000024ccu, 0x0000391du, 0x0003003eu, 0x00003912u, 0x0000391eu, 0x00050041u, 0x00000007u, 0x0000391fu, 0x000025d9u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003920u, 0x0000391fu, 0x00050084u, 0x00000006u, 0x00003921u, 0x00003920u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003923u, 0x0000391eu, 0x00003921u, 0x0003003eu, 0x00003912u, 0x00003923u, 0x000500c7u, 0x00000006u, 0x00003925u, 0x00003923u, 0x0000068au, 0x0003003eu, 0x00003912u, 0x00003925u, 0x000500c2u, 0x00000006u, 0x00003927u, 0x00003925u, 0x000001a6u, 0x0003003eu, 0x00003913u, 0x00003927u, 0x0004003du, 0x00000006u, 0x00003929u, 0x0000391bu, 0x000500c7u, 0x00000006u, 0x0000392au, 0x00003929u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000392bu, 0x0000392au, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000392du, 0x00003927u, 0x0000392bu, 0x0003003eu, 0x00003913u, 0x0000392du, 0x000500c6u, 0x00000006u, 0x0000392fu, 0x0000392du, 0x000002f4u, 0x0003003eu, 0x00003913u, 0x0000392fu, 0x00080041u, 0x00000778u, 0x00003932u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000392fu, 0x0004003du, 0x00000011u, 0x00003933u, 0x00003932u, 0x00040071u, 0x00000006u, 0x00003934u, 0x00003933u, 0x0003003eu, 0x00003914u, 0x00003934u, 0x0003003eu, 0x00003915u, 0x00003934u, 0x000500c2u, 0x00000006u, 0x0000393bu, 0x00003934u, 0x000001d9u, 0x0003003eu, 0x00003937u, 0x0000393bu, 0x000500c7u, 0x00000006u, 0x0000393du, 0x00003934u, 0x00000657u, 0x0003003eu, 0x00003938u, 0x0000393du, 0x00040071u, 0x00000011u, 0x0000393fu, 0x0000393bu, 0x0004007cu, 0x00000012u, 0x00003940u, 0x0000393fu, 0x00040071u, 0x00000011u, 0x00003948u, 0x0000393du, 0x0004007cu, 0x00000012u, 0x00003949u, 0x00003948u, 0x00070050u, 0x00000013u, 0x0000394au, 0x00003940u, 0x00003940u, 0x00003940u, 0x00003949u, 0x0003003eu, 0x00003939u, 0x0000394au, 0x0003003eu, 0x00003916u, 0x0000394au, 0x0003003eu, 0x0000250fu, 0x0000394au, 0x000200f9u, 0x000028b7u, 0x000200f8u, 0x000028b7u, 0x000700f5u, 0x00000013u, 0x0000784bu, 0x00007705u, 0x0000286fu, 0x0000394au, 0x000028b8u, 0x000700f5u, 0x00000013u, 0x00007759u, 0x00007705u, 0x0000286fu, 0x00003911u, 0x000028b8u, 0x000300f7u, 0x000028c8u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000028c9u, 0x000028c8u, 0x000200f8u, 0x000028c9u, 0x00050050u, 0x00000058u, 0x000028ccu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000028cdu, 0x000028ccu, 0x0003003eu, 0x00005f9cu, 0x000024ccu, 0x0003003eu, 0x00005f9du, 0x000024ceu, 0x0003003eu, 0x000025dbu, 0x000019c4u, 0x0003003eu, 0x000025dcu, 0x000028cdu, 0x00050041u, 0x00000007u, 0x00003954u, 0x000025dcu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003955u, 0x00003954u, 0x00050084u, 0x00000006u, 0x00003956u, 0x000024ceu, 0x00003955u, 0x00050080u, 0x00000006u, 0x00003957u, 0x000024ccu, 0x00003956u, 0x0003003eu, 0x0000394bu, 0x00003957u, 0x00050041u, 0x00000007u, 0x00003958u, 0x000025dcu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003959u, 0x00003958u, 0x00050084u, 0x00000006u, 0x0000395au, 0x00003959u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x0000395cu, 0x00003957u, 0x0000395au, 0x0003003eu, 0x0000394bu, 0x0000395cu, 0x000500c7u, 0x00000006u, 0x0000395eu, 0x0000395cu, 0x0000068au, 0x0003003eu, 0x0000394bu, 0x0000395eu, 0x000500c2u, 0x00000006u, 0x00003960u, 0x0000395eu, 0x000001a6u, 0x0003003eu, 0x0000394cu, 0x00003960u, 0x0004003du, 0x00000006u, 0x00003962u, 0x00003954u, 0x000500c7u, 0x00000006u, 0x00003963u, 0x00003962u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003964u, 0x00003963u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003966u, 0x00003960u, 0x00003964u, 0x0003003eu, 0x0000394cu, 0x00003966u, 0x000500c6u, 0x00000006u, 0x00003968u, 0x00003966u, 0x000002f4u, 0x0003003eu, 0x0000394cu, 0x00003968u, 0x00080041u, 0x00000778u, 0x0000396bu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003968u, 0x0004003du, 0x00000011u, 0x0000396cu, 0x0000396bu, 0x00040071u, 0x00000006u, 0x0000396du, 0x0000396cu, 0x0003003eu, 0x0000394du, 0x0000396du, 0x0003003eu, 0x0000394eu, 0x0000396du, 0x000500c2u, 0x00000006u, 0x00003974u, 0x0000396du, 0x000001d9u, 0x0003003eu, 0x00003970u, 0x00003974u, 0x000500c7u, 0x00000006u, 0x00003976u, 0x0000396du, 0x00000657u, 0x0003003eu, 0x00003971u, 0x00003976u, 0x00040071u, 0x00000011u, 0x00003978u, 0x00003974u, 0x0004007cu, 0x00000012u, 0x00003979u, 0x00003978u, 0x00040071u, 0x00000011u, 0x00003981u, 0x00003976u, 0x0004007cu, 0x00000012u, 0x00003982u, 0x00003981u, 0x00070050u, 0x00000013u, 0x00003983u, 0x00003979u, 0x00003979u, 0x00003979u, 0x00003982u, 0x0003003eu, 0x00003972u, 0x00003983u, 0x0003003eu, 0x0000394fu, 0x00003983u, 0x0003003eu, 0x00002517u, 0x00003983u, 0x000200f9u, 0x000028c8u, 0x000200f8u, 0x000028c8u, 0x000700f5u, 0x00000013u, 0x000078c4u, 0x00007705u, 0x000028b7u, 0x00003983u, 0x000028c9u, 0x000200f9u, 0x0000286cu, 0x000200f8u, 0x0000286eu, 0x0004007cu, 0x000000abu, 0x00002892u, 0x00007379u, 0x0003003eu, 0x00005f80u, 0x000024ccu, 0x0003003eu, 0x00005f81u, 0x000024ceu, 0x0003003eu, 0x000025c6u, 0x000019c4u, 0x0003003eu, 0x000025c7u, 0x00002892u, 0x00050041u, 0x00000007u, 0x000037beu, 0x000025c7u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000037bfu, 0x000037beu, 0x00050084u, 0x00000006u, 0x000037c0u, 0x000024ceu, 0x000037bfu, 0x00050080u, 0x00000006u, 0x000037c1u, 0x000024ccu, 0x000037c0u, 0x0003003eu, 0x000037b4u, 0x000037c1u, 0x00050041u, 0x00000007u, 0x000037c2u, 0x000025c7u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000037c3u, 0x000037c2u, 0x00050080u, 0x00000006u, 0x000037c5u, 0x000037c1u, 0x000037c3u, 0x0003003eu, 0x000037b4u, 0x000037c5u, 0x000500c7u, 0x00000006u, 0x000037c7u, 0x000037c5u, 0x0000068au, 0x0003003eu, 0x000037b4u, 0x000037c7u, 0x0003003eu, 0x000037b5u, 0x000037c7u, 0x0004003du, 0x00000006u, 0x000037cau, 0x000037beu, 0x000500c7u, 0x00000006u, 0x000037cbu, 0x000037cau, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000037ccu, 0x000037cbu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000037ceu, 0x000037c7u, 0x000037ccu, 0x0003003eu, 0x000037b5u, 0x000037ceu, 0x000500c6u, 0x00000006u, 0x000037d0u, 0x000037ceu, 0x000002fbu, 0x0003003eu, 0x000037b5u, 0x000037d0u, 0x00080041u, 0x000006a8u, 0x000037d3u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000037d0u, 0x0004003du, 0x0000000fu, 0x000037d4u, 0x000037d3u, 0x00040071u, 0x00000006u, 0x000037d5u, 0x000037d4u, 0x0003003eu, 0x000037b6u, 0x000037d5u, 0x000500c2u, 0x00000006u, 0x000037d7u, 0x000037d5u, 0x000001afu, 0x0003003eu, 0x000037b7u, 0x000037d7u, 0x000500c7u, 0x00000006u, 0x000037d9u, 0x000037d5u, 0x000006afu, 0x0003003eu, 0x000037b8u, 0x000037d9u, 0x000500c4u, 0x00000006u, 0x000037dbu, 0x000037d9u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000037ddu, 0x000037d9u, 0x000037dbu, 0x0003003eu, 0x000037b8u, 0x000037ddu, 0x000500c4u, 0x00000006u, 0x000037dfu, 0x000037d7u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000037e1u, 0x000037d7u, 0x000037dfu, 0x0003003eu, 0x000037b7u, 0x000037e1u, 0x00040071u, 0x00000011u, 0x000037e3u, 0x000037e1u, 0x0004007cu, 0x00000012u, 0x000037e4u, 0x000037e3u, 0x00040071u, 0x00000011u, 0x000037ecu, 0x000037ddu, 0x0004007cu, 0x00000012u, 0x000037edu, 0x000037ecu, 0x00070050u, 0x00000013u, 0x000037eeu, 0x000037e4u, 0x000037e4u, 0x000037e4u, 0x000037edu, 0x0003003eu, 0x000037b9u, 0x000037eeu, 0x0003003eu, 0x000024ffu, 0x000037eeu, 0x000300f7u, 0x00002897u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002898u, 0x00002897u, 0x000200f8u, 0x00002898u, 0x00050050u, 0x00000058u, 0x0000289bu, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x0000289cu, 0x0000289bu, 0x0003003eu, 0x00005f84u, 0x000024ccu, 0x0003003eu, 0x00005f85u, 0x000024ceu, 0x0003003eu, 0x000025c9u, 0x000019c4u, 0x0003003eu, 0x000025cau, 0x0000289cu, 0x00050041u, 0x00000007u, 0x000037f9u, 0x000025cau, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000037fau, 0x000037f9u, 0x00050084u, 0x00000006u, 0x000037fbu, 0x000024ceu, 0x000037fau, 0x00050080u, 0x00000006u, 0x000037fcu, 0x000024ccu, 0x000037fbu, 0x0003003eu, 0x000037efu, 0x000037fcu, 0x00050041u, 0x00000007u, 0x000037fdu, 0x000025cau, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000037feu, 0x000037fdu, 0x00050080u, 0x00000006u, 0x00003800u, 0x000037fcu, 0x000037feu, 0x0003003eu, 0x000037efu, 0x00003800u, 0x000500c7u, 0x00000006u, 0x00003802u, 0x00003800u, 0x0000068au, 0x0003003eu, 0x000037efu, 0x00003802u, 0x0003003eu, 0x000037f0u, 0x00003802u, 0x0004003du, 0x00000006u, 0x00003805u, 0x000037f9u, 0x000500c7u, 0x00000006u, 0x00003806u, 0x00003805u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003807u, 0x00003806u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003809u, 0x00003802u, 0x00003807u, 0x0003003eu, 0x000037f0u, 0x00003809u, 0x000500c6u, 0x00000006u, 0x0000380bu, 0x00003809u, 0x000002fbu, 0x0003003eu, 0x000037f0u, 0x0000380bu, 0x00080041u, 0x000006a8u, 0x0000380eu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000380bu, 0x0004003du, 0x0000000fu, 0x0000380fu, 0x0000380eu, 0x00040071u, 0x00000006u, 0x00003810u, 0x0000380fu, 0x0003003eu, 0x000037f1u, 0x00003810u, 0x000500c2u, 0x00000006u, 0x00003812u, 0x00003810u, 0x000001afu, 0x0003003eu, 0x000037f2u, 0x00003812u, 0x000500c7u, 0x00000006u, 0x00003814u, 0x00003810u, 0x000006afu, 0x0003003eu, 0x000037f3u, 0x00003814u, 0x000500c4u, 0x00000006u, 0x00003816u, 0x00003814u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003818u, 0x00003814u, 0x00003816u, 0x0003003eu, 0x000037f3u, 0x00003818u, 0x000500c4u, 0x00000006u, 0x0000381au, 0x00003812u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x0000381cu, 0x00003812u, 0x0000381au, 0x0003003eu, 0x000037f2u, 0x0000381cu, 0x00040071u, 0x00000011u, 0x0000381eu, 0x0000381cu, 0x0004007cu, 0x00000012u, 0x0000381fu, 0x0000381eu, 0x00040071u, 0x00000011u, 0x00003827u, 0x00003818u, 0x0004007cu, 0x00000012u, 0x00003828u, 0x00003827u, 0x00070050u, 0x00000013u, 0x00003829u, 0x0000381fu, 0x0000381fu, 0x0000381fu, 0x00003828u, 0x0003003eu, 0x000037f4u, 0x00003829u, 0x0003003eu, 0x00002507u, 0x00003829u, 0x00050050u, 0x00000058u, 0x000028a2u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000028a3u, 0x000028a2u, 0x0003003eu, 0x00005f88u, 0x000024ccu, 0x0003003eu, 0x00005f89u, 0x000024ceu, 0x0003003eu, 0x000025ccu, 0x000019c4u, 0x0003003eu, 0x000025cdu, 0x000028a3u, 0x00050041u, 0x00000007u, 0x00003834u, 0x000025cdu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003835u, 0x00003834u, 0x00050084u, 0x00000006u, 0x00003836u, 0x000024ceu, 0x00003835u, 0x00050080u, 0x00000006u, 0x00003837u, 0x000024ccu, 0x00003836u, 0x0003003eu, 0x0000382au, 0x00003837u, 0x00050041u, 0x00000007u, 0x00003838u, 0x000025cdu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003839u, 0x00003838u, 0x00050080u, 0x00000006u, 0x0000383bu, 0x00003837u, 0x00003839u, 0x0003003eu, 0x0000382au, 0x0000383bu, 0x000500c7u, 0x00000006u, 0x0000383du, 0x0000383bu, 0x0000068au, 0x0003003eu, 0x0000382au, 0x0000383du, 0x0003003eu, 0x0000382bu, 0x0000383du, 0x0004003du, 0x00000006u, 0x00003840u, 0x00003834u, 0x000500c7u, 0x00000006u, 0x00003841u, 0x00003840u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003842u, 0x00003841u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003844u, 0x0000383du, 0x00003842u, 0x0003003eu, 0x0000382bu, 0x00003844u, 0x000500c6u, 0x00000006u, 0x00003846u, 0x00003844u, 0x000002fbu, 0x0003003eu, 0x0000382bu, 0x00003846u, 0x00080041u, 0x000006a8u, 0x00003849u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003846u, 0x0004003du, 0x0000000fu, 0x0000384au, 0x00003849u, 0x00040071u, 0x00000006u, 0x0000384bu, 0x0000384au, 0x0003003eu, 0x0000382cu, 0x0000384bu, 0x000500c2u, 0x00000006u, 0x0000384du, 0x0000384bu, 0x000001afu, 0x0003003eu, 0x0000382du, 0x0000384du, 0x000500c7u, 0x00000006u, 0x0000384fu, 0x0000384bu, 0x000006afu, 0x0003003eu, 0x0000382eu, 0x0000384fu, 0x000500c4u, 0x00000006u, 0x00003851u, 0x0000384fu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003853u, 0x0000384fu, 0x00003851u, 0x0003003eu, 0x0000382eu, 0x00003853u, 0x000500c4u, 0x00000006u, 0x00003855u, 0x0000384du, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003857u, 0x0000384du, 0x00003855u, 0x0003003eu, 0x0000382du, 0x00003857u, 0x00040071u, 0x00000011u, 0x00003859u, 0x00003857u, 0x0004007cu, 0x00000012u, 0x0000385au, 0x00003859u, 0x00040071u, 0x00000011u, 0x00003862u, 0x00003853u, 0x0004007cu, 0x00000012u, 0x00003863u, 0x00003862u, 0x00070050u, 0x00000013u, 0x00003864u, 0x0000385au, 0x0000385au, 0x0000385au, 0x00003863u, 0x0003003eu, 0x0000382fu, 0x00003864u, 0x0003003eu, 0x0000250fu, 0x00003864u, 0x000200f9u, 0x00002897u, 0x000200f8u, 0x00002897u, 0x000700f5u, 0x00000013u, 0x00007849u, 0x00007705u, 0x0000286eu, 0x00003864u, 0x00002898u, 0x000700f5u, 0x00000013u, 0x00007757u, 0x00007705u, 0x0000286eu, 0x00003829u, 0x00002898u, 0x000300f7u, 0x000028a8u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000028a9u, 0x000028a8u, 0x000200f8u, 0x000028a9u, 0x00050050u, 0x00000058u, 0x000028acu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000028adu, 0x000028acu, 0x0003003eu, 0x00005f8cu, 0x000024ccu, 0x0003003eu, 0x00005f8du, 0x000024ceu, 0x0003003eu, 0x000025cfu, 0x000019c4u, 0x0003003eu, 0x000025d0u, 0x000028adu, 0x00050041u, 0x00000007u, 0x0000386fu, 0x000025d0u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003870u, 0x0000386fu, 0x00050084u, 0x00000006u, 0x00003871u, 0x000024ceu, 0x00003870u, 0x00050080u, 0x00000006u, 0x00003872u, 0x000024ccu, 0x00003871u, 0x0003003eu, 0x00003865u, 0x00003872u, 0x00050041u, 0x00000007u, 0x00003873u, 0x000025d0u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003874u, 0x00003873u, 0x00050080u, 0x00000006u, 0x00003876u, 0x00003872u, 0x00003874u, 0x0003003eu, 0x00003865u, 0x00003876u, 0x000500c7u, 0x00000006u, 0x00003878u, 0x00003876u, 0x0000068au, 0x0003003eu, 0x00003865u, 0x00003878u, 0x0003003eu, 0x00003866u, 0x00003878u, 0x0004003du, 0x00000006u, 0x0000387bu, 0x0000386fu, 0x000500c7u, 0x00000006u, 0x0000387cu, 0x0000387bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000387du, 0x0000387cu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000387fu, 0x00003878u, 0x0000387du, 0x0003003eu, 0x00003866u, 0x0000387fu, 0x000500c6u, 0x00000006u, 0x00003881u, 0x0000387fu, 0x000002fbu, 0x0003003eu, 0x00003866u, 0x00003881u, 0x00080041u, 0x000006a8u, 0x00003884u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003881u, 0x0004003du, 0x0000000fu, 0x00003885u, 0x00003884u, 0x00040071u, 0x00000006u, 0x00003886u, 0x00003885u, 0x0003003eu, 0x00003867u, 0x00003886u, 0x000500c2u, 0x00000006u, 0x00003888u, 0x00003886u, 0x000001afu, 0x0003003eu, 0x00003868u, 0x00003888u, 0x000500c7u, 0x00000006u, 0x0000388au, 0x00003886u, 0x000006afu, 0x0003003eu, 0x00003869u, 0x0000388au, 0x000500c4u, 0x00000006u, 0x0000388cu, 0x0000388au, 0x000001afu, 0x000500c5u, 0x00000006u, 0x0000388eu, 0x0000388au, 0x0000388cu, 0x0003003eu, 0x00003869u, 0x0000388eu, 0x000500c4u, 0x00000006u, 0x00003890u, 0x00003888u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003892u, 0x00003888u, 0x00003890u, 0x0003003eu, 0x00003868u, 0x00003892u, 0x00040071u, 0x00000011u, 0x00003894u, 0x00003892u, 0x0004007cu, 0x00000012u, 0x00003895u, 0x00003894u, 0x00040071u, 0x00000011u, 0x0000389du, 0x0000388eu, 0x0004007cu, 0x00000012u, 0x0000389eu, 0x0000389du, 0x00070050u, 0x00000013u, 0x0000389fu, 0x00003895u, 0x00003895u, 0x00003895u, 0x0000389eu, 0x0003003eu, 0x0000386au, 0x0000389fu, 0x0003003eu, 0x00002517u, 0x0000389fu, 0x000200f9u, 0x000028a8u, 0x000200f8u, 0x000028a8u, 0x000700f5u, 0x00000013u, 0x000078c2u, 0x00007705u, 0x00002897u, 0x0000389fu, 0x000028a9u, 0x000200f9u, 0x0000286cu, 0x000200f8u, 0x0000286du, 0x0004007cu, 0x000000abu, 0x00002872u, 0x00007379u, 0x0003003eu, 0x00005f70u, 0x000024ccu, 0x0003003eu, 0x00005f71u, 0x000024ceu, 0x0003003eu, 0x000025bau, 0x000019c4u, 0x0003003eu, 0x000025bbu, 0x00002872u, 0x00050041u, 0x00000007u, 0x000036aau, 0x000025bbu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000036abu, 0x000036aau, 0x00050084u, 0x00000006u, 0x000036acu, 0x000024ceu, 0x000036abu, 0x00050080u, 0x00000006u, 0x000036adu, 0x000024ccu, 0x000036acu, 0x0003003eu, 0x000036a0u, 0x000036adu, 0x00050041u, 0x00000007u, 0x000036aeu, 0x000025bbu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000036afu, 0x000036aeu, 0x000500c2u, 0x00000006u, 0x000036b0u, 0x000036afu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000036b2u, 0x000036adu, 0x000036b0u, 0x0003003eu, 0x000036a0u, 0x000036b2u, 0x000500c7u, 0x00000006u, 0x000036b4u, 0x000036b2u, 0x0000068au, 0x0003003eu, 0x000036a0u, 0x000036b4u, 0x0004003du, 0x00000006u, 0x000036b6u, 0x000036aeu, 0x000400c8u, 0x00000006u, 0x000036b7u, 0x000036b6u, 0x000500c7u, 0x00000006u, 0x000036b8u, 0x000036b7u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000036b9u, 0x000036b8u, 0x00000692u, 0x0003003eu, 0x000036a1u, 0x000036b9u, 0x0003003eu, 0x000036a2u, 0x000036b4u, 0x0004003du, 0x00000006u, 0x000036bcu, 0x000036aau, 0x000500c7u, 0x00000006u, 0x000036bdu, 0x000036bcu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000036beu, 0x000036bdu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000036c0u, 0x000036b4u, 0x000036beu, 0x0003003eu, 0x000036a2u, 0x000036c0u, 0x000500c6u, 0x00000006u, 0x000036c2u, 0x000036c0u, 0x000002fbu, 0x0003003eu, 0x000036a2u, 0x000036c2u, 0x00080041u, 0x000006a8u, 0x000036c5u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000036c2u, 0x0004003du, 0x0000000fu, 0x000036c6u, 0x000036c5u, 0x00040071u, 0x00000006u, 0x000036c7u, 0x000036c6u, 0x0003003eu, 0x000036a3u, 0x000036c7u, 0x000500c2u, 0x00000006u, 0x000036cau, 0x000036c7u, 0x000036b9u, 0x000500c7u, 0x00000006u, 0x000036cbu, 0x000036cau, 0x000006afu, 0x0003003eu, 0x000036a3u, 0x000036cbu, 0x000500c7u, 0x00000006u, 0x000036cdu, 0x000036cbu, 0x000006e7u, 0x0003003eu, 0x000036a4u, 0x000036cdu, 0x000500c4u, 0x00000006u, 0x000036cfu, 0x000036cdu, 0x000001afu, 0x000500c4u, 0x00000006u, 0x000036d1u, 0x000036cdu, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x000036d2u, 0x000036cfu, 0x000036d1u, 0x000500c2u, 0x00000006u, 0x000036d4u, 0x000036cdu, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x000036d5u, 0x000036d2u, 0x000036d4u, 0x0003003eu, 0x000036a4u, 0x000036d5u, 0x00040071u, 0x00000011u, 0x000036d7u, 0x000036d5u, 0x0004007cu, 0x00000012u, 0x000036d8u, 0x000036d7u, 0x000500c7u, 0x00000006u, 0x000036e0u, 0x000036cbu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000036e1u, 0x000036e0u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000036e2u, 0x000036e1u, 0x0004007cu, 0x00000012u, 0x000036e3u, 0x000036e2u, 0x00070050u, 0x00000013u, 0x000036e4u, 0x000036d8u, 0x000036d8u, 0x000036d8u, 0x000036e3u, 0x0003003eu, 0x000036a5u, 0x000036e4u, 0x0003003eu, 0x000024ffu, 0x000036e4u, 0x000300f7u, 0x00002877u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002878u, 0x00002877u, 0x000200f8u, 0x00002878u, 0x00050050u, 0x00000058u, 0x0000287bu, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x0000287cu, 0x0000287bu, 0x0003003eu, 0x00005f74u, 0x000024ccu, 0x0003003eu, 0x00005f75u, 0x000024ceu, 0x0003003eu, 0x000025bdu, 0x000019c4u, 0x0003003eu, 0x000025beu, 0x0000287cu, 0x00050041u, 0x00000007u, 0x000036efu, 0x000025beu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000036f0u, 0x000036efu, 0x00050084u, 0x00000006u, 0x000036f1u, 0x000024ceu, 0x000036f0u, 0x00050080u, 0x00000006u, 0x000036f2u, 0x000024ccu, 0x000036f1u, 0x0003003eu, 0x000036e5u, 0x000036f2u, 0x00050041u, 0x00000007u, 0x000036f3u, 0x000025beu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000036f4u, 0x000036f3u, 0x000500c2u, 0x00000006u, 0x000036f5u, 0x000036f4u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000036f7u, 0x000036f2u, 0x000036f5u, 0x0003003eu, 0x000036e5u, 0x000036f7u, 0x000500c7u, 0x00000006u, 0x000036f9u, 0x000036f7u, 0x0000068au, 0x0003003eu, 0x000036e5u, 0x000036f9u, 0x0004003du, 0x00000006u, 0x000036fbu, 0x000036f3u, 0x000400c8u, 0x00000006u, 0x000036fcu, 0x000036fbu, 0x000500c7u, 0x00000006u, 0x000036fdu, 0x000036fcu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000036feu, 0x000036fdu, 0x00000692u, 0x0003003eu, 0x000036e6u, 0x000036feu, 0x0003003eu, 0x000036e7u, 0x000036f9u, 0x0004003du, 0x00000006u, 0x00003701u, 0x000036efu, 0x000500c7u, 0x00000006u, 0x00003702u, 0x00003701u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003703u, 0x00003702u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003705u, 0x000036f9u, 0x00003703u, 0x0003003eu, 0x000036e7u, 0x00003705u, 0x000500c6u, 0x00000006u, 0x00003707u, 0x00003705u, 0x000002fbu, 0x0003003eu, 0x000036e7u, 0x00003707u, 0x00080041u, 0x000006a8u, 0x0000370au, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003707u, 0x0004003du, 0x0000000fu, 0x0000370bu, 0x0000370au, 0x00040071u, 0x00000006u, 0x0000370cu, 0x0000370bu, 0x0003003eu, 0x000036e8u, 0x0000370cu, 0x000500c2u, 0x00000006u, 0x0000370fu, 0x0000370cu, 0x000036feu, 0x000500c7u, 0x00000006u, 0x00003710u, 0x0000370fu, 0x000006afu, 0x0003003eu, 0x000036e8u, 0x00003710u, 0x000500c7u, 0x00000006u, 0x00003712u, 0x00003710u, 0x000006e7u, 0x0003003eu, 0x000036e9u, 0x00003712u, 0x000500c4u, 0x00000006u, 0x00003714u, 0x00003712u, 0x000001afu, 0x000500c4u, 0x00000006u, 0x00003716u, 0x00003712u, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x00003717u, 0x00003714u, 0x00003716u, 0x000500c2u, 0x00000006u, 0x00003719u, 0x00003712u, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x0000371au, 0x00003717u, 0x00003719u, 0x0003003eu, 0x000036e9u, 0x0000371au, 0x00040071u, 0x00000011u, 0x0000371cu, 0x0000371au, 0x0004007cu, 0x00000012u, 0x0000371du, 0x0000371cu, 0x000500c7u, 0x00000006u, 0x00003725u, 0x00003710u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003726u, 0x00003725u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003727u, 0x00003726u, 0x0004007cu, 0x00000012u, 0x00003728u, 0x00003727u, 0x00070050u, 0x00000013u, 0x00003729u, 0x0000371du, 0x0000371du, 0x0000371du, 0x00003728u, 0x0003003eu, 0x000036eau, 0x00003729u, 0x0003003eu, 0x00002507u, 0x00003729u, 0x00050050u, 0x00000058u, 0x00002882u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002883u, 0x00002882u, 0x0003003eu, 0x00005f78u, 0x000024ccu, 0x0003003eu, 0x00005f79u, 0x000024ceu, 0x0003003eu, 0x000025c0u, 0x000019c4u, 0x0003003eu, 0x000025c1u, 0x00002883u, 0x00050041u, 0x00000007u, 0x00003734u, 0x000025c1u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003735u, 0x00003734u, 0x00050084u, 0x00000006u, 0x00003736u, 0x000024ceu, 0x00003735u, 0x00050080u, 0x00000006u, 0x00003737u, 0x000024ccu, 0x00003736u, 0x0003003eu, 0x0000372au, 0x00003737u, 0x00050041u, 0x00000007u, 0x00003738u, 0x000025c1u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003739u, 0x00003738u, 0x000500c2u, 0x00000006u, 0x0000373au, 0x00003739u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x0000373cu, 0x00003737u, 0x0000373au, 0x0003003eu, 0x0000372au, 0x0000373cu, 0x000500c7u, 0x00000006u, 0x0000373eu, 0x0000373cu, 0x0000068au, 0x0003003eu, 0x0000372au, 0x0000373eu, 0x0004003du, 0x00000006u, 0x00003740u, 0x00003738u, 0x000400c8u, 0x00000006u, 0x00003741u, 0x00003740u, 0x000500c7u, 0x00000006u, 0x00003742u, 0x00003741u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003743u, 0x00003742u, 0x00000692u, 0x0003003eu, 0x0000372bu, 0x00003743u, 0x0003003eu, 0x0000372cu, 0x0000373eu, 0x0004003du, 0x00000006u, 0x00003746u, 0x00003734u, 0x000500c7u, 0x00000006u, 0x00003747u, 0x00003746u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003748u, 0x00003747u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000374au, 0x0000373eu, 0x00003748u, 0x0003003eu, 0x0000372cu, 0x0000374au, 0x000500c6u, 0x00000006u, 0x0000374cu, 0x0000374au, 0x000002fbu, 0x0003003eu, 0x0000372cu, 0x0000374cu, 0x00080041u, 0x000006a8u, 0x0000374fu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000374cu, 0x0004003du, 0x0000000fu, 0x00003750u, 0x0000374fu, 0x00040071u, 0x00000006u, 0x00003751u, 0x00003750u, 0x0003003eu, 0x0000372du, 0x00003751u, 0x000500c2u, 0x00000006u, 0x00003754u, 0x00003751u, 0x00003743u, 0x000500c7u, 0x00000006u, 0x00003755u, 0x00003754u, 0x000006afu, 0x0003003eu, 0x0000372du, 0x00003755u, 0x000500c7u, 0x00000006u, 0x00003757u, 0x00003755u, 0x000006e7u, 0x0003003eu, 0x0000372eu, 0x00003757u, 0x000500c4u, 0x00000006u, 0x00003759u, 0x00003757u, 0x000001afu, 0x000500c4u, 0x00000006u, 0x0000375bu, 0x00003757u, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x0000375cu, 0x00003759u, 0x0000375bu, 0x000500c2u, 0x00000006u, 0x0000375eu, 0x00003757u, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x0000375fu, 0x0000375cu, 0x0000375eu, 0x0003003eu, 0x0000372eu, 0x0000375fu, 0x00040071u, 0x00000011u, 0x00003761u, 0x0000375fu, 0x0004007cu, 0x00000012u, 0x00003762u, 0x00003761u, 0x000500c7u, 0x00000006u, 0x0000376au, 0x00003755u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000376bu, 0x0000376au, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000376cu, 0x0000376bu, 0x0004007cu, 0x00000012u, 0x0000376du, 0x0000376cu, 0x00070050u, 0x00000013u, 0x0000376eu, 0x00003762u, 0x00003762u, 0x00003762u, 0x0000376du, 0x0003003eu, 0x0000372fu, 0x0000376eu, 0x0003003eu, 0x0000250fu, 0x0000376eu, 0x000200f9u, 0x00002877u, 0x000200f8u, 0x00002877u, 0x000700f5u, 0x00000013u, 0x00007847u, 0x00007705u, 0x0000286du, 0x0000376eu, 0x00002878u, 0x000700f5u, 0x00000013u, 0x00007755u, 0x00007705u, 0x0000286du, 0x00003729u, 0x00002878u, 0x000300f7u, 0x00002888u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x00002889u, 0x00002888u, 0x000200f8u, 0x00002889u, 0x00050050u, 0x00000058u, 0x0000288cu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000288du, 0x0000288cu, 0x0003003eu, 0x00005f7cu, 0x000024ccu, 0x0003003eu, 0x00005f7du, 0x000024ceu, 0x0003003eu, 0x000025c3u, 0x000019c4u, 0x0003003eu, 0x000025c4u, 0x0000288du, 0x00050041u, 0x00000007u, 0x00003779u, 0x000025c4u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000377au, 0x00003779u, 0x00050084u, 0x00000006u, 0x0000377bu, 0x000024ceu, 0x0000377au, 0x00050080u, 0x00000006u, 0x0000377cu, 0x000024ccu, 0x0000377bu, 0x0003003eu, 0x0000376fu, 0x0000377cu, 0x00050041u, 0x00000007u, 0x0000377du, 0x000025c4u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000377eu, 0x0000377du, 0x000500c2u, 0x00000006u, 0x0000377fu, 0x0000377eu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003781u, 0x0000377cu, 0x0000377fu, 0x0003003eu, 0x0000376fu, 0x00003781u, 0x000500c7u, 0x00000006u, 0x00003783u, 0x00003781u, 0x0000068au, 0x0003003eu, 0x0000376fu, 0x00003783u, 0x0004003du, 0x00000006u, 0x00003785u, 0x0000377du, 0x000400c8u, 0x00000006u, 0x00003786u, 0x00003785u, 0x000500c7u, 0x00000006u, 0x00003787u, 0x00003786u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003788u, 0x00003787u, 0x00000692u, 0x0003003eu, 0x00003770u, 0x00003788u, 0x0003003eu, 0x00003771u, 0x00003783u, 0x0004003du, 0x00000006u, 0x0000378bu, 0x00003779u, 0x000500c7u, 0x00000006u, 0x0000378cu, 0x0000378bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000378du, 0x0000378cu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000378fu, 0x00003783u, 0x0000378du, 0x0003003eu, 0x00003771u, 0x0000378fu, 0x000500c6u, 0x00000006u, 0x00003791u, 0x0000378fu, 0x000002fbu, 0x0003003eu, 0x00003771u, 0x00003791u, 0x00080041u, 0x000006a8u, 0x00003794u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003791u, 0x0004003du, 0x0000000fu, 0x00003795u, 0x00003794u, 0x00040071u, 0x00000006u, 0x00003796u, 0x00003795u, 0x0003003eu, 0x00003772u, 0x00003796u, 0x000500c2u, 0x00000006u, 0x00003799u, 0x00003796u, 0x00003788u, 0x000500c7u, 0x00000006u, 0x0000379au, 0x00003799u, 0x000006afu, 0x0003003eu, 0x00003772u, 0x0000379au, 0x000500c7u, 0x00000006u, 0x0000379cu, 0x0000379au, 0x000006e7u, 0x0003003eu, 0x00003773u, 0x0000379cu, 0x000500c4u, 0x00000006u, 0x0000379eu, 0x0000379cu, 0x000001afu, 0x000500c4u, 0x00000006u, 0x000037a0u, 0x0000379cu, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x000037a1u, 0x0000379eu, 0x000037a0u, 0x000500c2u, 0x00000006u, 0x000037a3u, 0x0000379cu, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x000037a4u, 0x000037a1u, 0x000037a3u, 0x0003003eu, 0x00003773u, 0x000037a4u, 0x00040071u, 0x00000011u, 0x000037a6u, 0x000037a4u, 0x0004007cu, 0x00000012u, 0x000037a7u, 0x000037a6u, 0x000500c7u, 0x00000006u, 0x000037afu, 0x0000379au, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000037b0u, 0x000037afu, 0x00000657u, 0x00040071u, 0x00000011u, 0x000037b1u, 0x000037b0u, 0x0004007cu, 0x00000012u, 0x000037b2u, 0x000037b1u, 0x00070050u, 0x00000013u, 0x000037b3u, 0x000037a7u, 0x000037a7u, 0x000037a7u, 0x000037b2u, 0x0003003eu, 0x00003774u, 0x000037b3u, 0x0003003eu, 0x00002517u, 0x000037b3u, 0x000200f9u, 0x00002888u, 0x000200f8u, 0x00002888u, 0x000700f5u, 0x00000013u, 0x000078c0u, 0x00007705u, 0x00002877u, 0x000037b3u, 0x00002889u, 0x000200f9u, 0x0000286cu, 0x000200f8u, 0x0000286cu, 0x000d00f5u, 0x00000013u, 0x000078bfu, 0x00007705u, 0x0000273cu, 0x000078c0u, 0x00002888u, 0x000078c2u, 0x000028a8u, 0x000078c4u, 0x000028c8u, 0x000078c6u, 0x000028e8u, 0x000d00f5u, 0x00000013u, 0x00007845u, 0x00007705u, 0x0000273cu, 0x00007847u, 0x00002888u, 0x00007849u, 0x000028a8u, 0x0000784bu, 0x000028c8u, 0x0000784du, 0x000028e8u, 0x000d00f5u, 0x00000013u, 0x000077cdu, 0x00007705u, 0x0000273cu, 0x000036e4u, 0x00002888u, 0x000037eeu, 0x000028a8u, 0x000038d8u, 0x000028c8u, 0x000039afu, 0x000028e8u, 0x000d00f5u, 0x00000013u, 0x00007753u, 0x00007705u, 0x0000273cu, 0x00007755u, 0x00002888u, 0x00007757u, 0x000028a8u, 0x00007759u, 0x000028c8u, 0x0000775bu, 0x000028e8u, 0x000200f9u, 0x00002738u, 0x000200f8u, 0x0000273bu, 0x00040071u, 0x00000006u, 0x000027f6u, 0x0000b63eu, 0x0004007cu, 0x00000008u, 0x000027f7u, 0x000027f6u, 0x000300f7u, 0x000027f8u, 0x00000000u, 0x000700fbu, 0x000027f7u, 0x000027f9u, 0x00000000u, 0x000027fau, 0x00000001u, 0x000027fbu, 0x000200f8u, 0x000027fbu, 0x0004007cu, 0x000000abu, 0x00002849u, 0x00007379u, 0x0003003eu, 0x00005f50u, 0x000024ccu, 0x0003003eu, 0x00005f51u, 0x000024ceu, 0x0003003eu, 0x000025a2u, 0x000019c4u, 0x0003003eu, 0x000025a3u, 0x00002849u, 0x00050041u, 0x00000007u, 0x00003618u, 0x000025a3u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003619u, 0x00003618u, 0x00050084u, 0x00000006u, 0x0000361au, 0x000024ceu, 0x00003619u, 0x00050080u, 0x00000006u, 0x0000361bu, 0x000024ccu, 0x0000361au, 0x0003003eu, 0x00003610u, 0x0000361bu, 0x00050041u, 0x00000007u, 0x0000361cu, 0x000025a3u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000361du, 0x0000361cu, 0x00050080u, 0x00000006u, 0x0000361fu, 0x0000361bu, 0x0000361du, 0x0003003eu, 0x00003610u, 0x0000361fu, 0x000500c7u, 0x00000006u, 0x00003621u, 0x0000361fu, 0x0000068au, 0x0003003eu, 0x00003610u, 0x00003621u, 0x0003003eu, 0x00003611u, 0x00003621u, 0x0004003du, 0x00000006u, 0x00003624u, 0x00003618u, 0x000500c7u, 0x00000006u, 0x00003625u, 0x00003624u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003626u, 0x00003625u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003628u, 0x00003621u, 0x00003626u, 0x0003003eu, 0x00003611u, 0x00003628u, 0x000500c6u, 0x00000006u, 0x0000362au, 0x00003628u, 0x000002fbu, 0x0003003eu, 0x00003611u, 0x0000362au, 0x00080041u, 0x000006a8u, 0x0000362du, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000362au, 0x0004003du, 0x0000000fu, 0x0000362eu, 0x0000362du, 0x00040071u, 0x00000006u, 0x0000362fu, 0x0000362eu, 0x0003003eu, 0x00003612u, 0x0000362fu, 0x00040071u, 0x00000011u, 0x00003631u, 0x0000362fu, 0x0004007cu, 0x00000012u, 0x00003632u, 0x00003631u, 0x00070050u, 0x00000013u, 0x00003633u, 0x00003632u, 0x00003632u, 0x00003632u, 0x00003632u, 0x0003003eu, 0x00003613u, 0x00003633u, 0x0003003eu, 0x000024ffu, 0x00003633u, 0x000300f7u, 0x0000284eu, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000284fu, 0x0000284eu, 0x000200f8u, 0x0000284fu, 0x00050050u, 0x00000058u, 0x00002852u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002853u, 0x00002852u, 0x0003003eu, 0x00005f54u, 0x000024ccu, 0x0003003eu, 0x00005f55u, 0x000024ceu, 0x0003003eu, 0x000025a5u, 0x000019c4u, 0x0003003eu, 0x000025a6u, 0x00002853u, 0x00050041u, 0x00000007u, 0x0000363cu, 0x000025a6u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000363du, 0x0000363cu, 0x00050084u, 0x00000006u, 0x0000363eu, 0x000024ceu, 0x0000363du, 0x00050080u, 0x00000006u, 0x0000363fu, 0x000024ccu, 0x0000363eu, 0x0003003eu, 0x00003634u, 0x0000363fu, 0x00050041u, 0x00000007u, 0x00003640u, 0x000025a6u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003641u, 0x00003640u, 0x00050080u, 0x00000006u, 0x00003643u, 0x0000363fu, 0x00003641u, 0x0003003eu, 0x00003634u, 0x00003643u, 0x000500c7u, 0x00000006u, 0x00003645u, 0x00003643u, 0x0000068au, 0x0003003eu, 0x00003634u, 0x00003645u, 0x0003003eu, 0x00003635u, 0x00003645u, 0x0004003du, 0x00000006u, 0x00003648u, 0x0000363cu, 0x000500c7u, 0x00000006u, 0x00003649u, 0x00003648u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000364au, 0x00003649u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000364cu, 0x00003645u, 0x0000364au, 0x0003003eu, 0x00003635u, 0x0000364cu, 0x000500c6u, 0x00000006u, 0x0000364eu, 0x0000364cu, 0x000002fbu, 0x0003003eu, 0x00003635u, 0x0000364eu, 0x00080041u, 0x000006a8u, 0x00003651u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000364eu, 0x0004003du, 0x0000000fu, 0x00003652u, 0x00003651u, 0x00040071u, 0x00000006u, 0x00003653u, 0x00003652u, 0x0003003eu, 0x00003636u, 0x00003653u, 0x00040071u, 0x00000011u, 0x00003655u, 0x00003653u, 0x0004007cu, 0x00000012u, 0x00003656u, 0x00003655u, 0x00070050u, 0x00000013u, 0x00003657u, 0x00003656u, 0x00003656u, 0x00003656u, 0x00003656u, 0x0003003eu, 0x00003637u, 0x00003657u, 0x0003003eu, 0x00002507u, 0x00003657u, 0x00050050u, 0x00000058u, 0x00002859u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000285au, 0x00002859u, 0x0003003eu, 0x00005f58u, 0x000024ccu, 0x0003003eu, 0x00005f59u, 0x000024ceu, 0x0003003eu, 0x000025a8u, 0x000019c4u, 0x0003003eu, 0x000025a9u, 0x0000285au, 0x00050041u, 0x00000007u, 0x00003660u, 0x000025a9u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003661u, 0x00003660u, 0x00050084u, 0x00000006u, 0x00003662u, 0x000024ceu, 0x00003661u, 0x00050080u, 0x00000006u, 0x00003663u, 0x000024ccu, 0x00003662u, 0x0003003eu, 0x00003658u, 0x00003663u, 0x00050041u, 0x00000007u, 0x00003664u, 0x000025a9u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003665u, 0x00003664u, 0x00050080u, 0x00000006u, 0x00003667u, 0x00003663u, 0x00003665u, 0x0003003eu, 0x00003658u, 0x00003667u, 0x000500c7u, 0x00000006u, 0x00003669u, 0x00003667u, 0x0000068au, 0x0003003eu, 0x00003658u, 0x00003669u, 0x0003003eu, 0x00003659u, 0x00003669u, 0x0004003du, 0x00000006u, 0x0000366cu, 0x00003660u, 0x000500c7u, 0x00000006u, 0x0000366du, 0x0000366cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000366eu, 0x0000366du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003670u, 0x00003669u, 0x0000366eu, 0x0003003eu, 0x00003659u, 0x00003670u, 0x000500c6u, 0x00000006u, 0x00003672u, 0x00003670u, 0x000002fbu, 0x0003003eu, 0x00003659u, 0x00003672u, 0x00080041u, 0x000006a8u, 0x00003675u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003672u, 0x0004003du, 0x0000000fu, 0x00003676u, 0x00003675u, 0x00040071u, 0x00000006u, 0x00003677u, 0x00003676u, 0x0003003eu, 0x0000365au, 0x00003677u, 0x00040071u, 0x00000011u, 0x00003679u, 0x00003677u, 0x0004007cu, 0x00000012u, 0x0000367au, 0x00003679u, 0x00070050u, 0x00000013u, 0x0000367bu, 0x0000367au, 0x0000367au, 0x0000367au, 0x0000367au, 0x0003003eu, 0x0000365bu, 0x0000367bu, 0x0003003eu, 0x0000250fu, 0x0000367bu, 0x000200f9u, 0x0000284eu, 0x000200f8u, 0x0000284eu, 0x000700f5u, 0x00000013u, 0x00007844u, 0x00007705u, 0x000027fbu, 0x0000367bu, 0x0000284fu, 0x000700f5u, 0x00000013u, 0x00007752u, 0x00007705u, 0x000027fbu, 0x00003657u, 0x0000284fu, 0x000300f7u, 0x0000285fu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x00002860u, 0x0000285fu, 0x000200f8u, 0x00002860u, 0x00050050u, 0x00000058u, 0x00002863u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002864u, 0x00002863u, 0x0003003eu, 0x00005f5cu, 0x000024ccu, 0x0003003eu, 0x00005f5du, 0x000024ceu, 0x0003003eu, 0x000025abu, 0x000019c4u, 0x0003003eu, 0x000025acu, 0x00002864u, 0x00050041u, 0x00000007u, 0x00003684u, 0x000025acu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003685u, 0x00003684u, 0x00050084u, 0x00000006u, 0x00003686u, 0x000024ceu, 0x00003685u, 0x00050080u, 0x00000006u, 0x00003687u, 0x000024ccu, 0x00003686u, 0x0003003eu, 0x0000367cu, 0x00003687u, 0x00050041u, 0x00000007u, 0x00003688u, 0x000025acu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003689u, 0x00003688u, 0x00050080u, 0x00000006u, 0x0000368bu, 0x00003687u, 0x00003689u, 0x0003003eu, 0x0000367cu, 0x0000368bu, 0x000500c7u, 0x00000006u, 0x0000368du, 0x0000368bu, 0x0000068au, 0x0003003eu, 0x0000367cu, 0x0000368du, 0x0003003eu, 0x0000367du, 0x0000368du, 0x0004003du, 0x00000006u, 0x00003690u, 0x00003684u, 0x000500c7u, 0x00000006u, 0x00003691u, 0x00003690u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003692u, 0x00003691u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003694u, 0x0000368du, 0x00003692u, 0x0003003eu, 0x0000367du, 0x00003694u, 0x000500c6u, 0x00000006u, 0x00003696u, 0x00003694u, 0x000002fbu, 0x0003003eu, 0x0000367du, 0x00003696u, 0x00080041u, 0x000006a8u, 0x00003699u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003696u, 0x0004003du, 0x0000000fu, 0x0000369au, 0x00003699u, 0x00040071u, 0x00000006u, 0x0000369bu, 0x0000369au, 0x0003003eu, 0x0000367eu, 0x0000369bu, 0x00040071u, 0x00000011u, 0x0000369du, 0x0000369bu, 0x0004007cu, 0x00000012u, 0x0000369eu, 0x0000369du, 0x00070050u, 0x00000013u, 0x0000369fu, 0x0000369eu, 0x0000369eu, 0x0000369eu, 0x0000369eu, 0x0003003eu, 0x0000367fu, 0x0000369fu, 0x0003003eu, 0x00002517u, 0x0000369fu, 0x000200f9u, 0x0000285fu, 0x000200f8u, 0x0000285fu, 0x000700f5u, 0x00000013u, 0x000078bdu, 0x00007705u, 0x0000284eu, 0x0000369fu, 0x00002860u, 0x000200f9u, 0x000027f8u, 0x000200f8u, 0x000027fau, 0x0004007cu, 0x000000abu, 0x0000281du, 0x00007379u, 0x00040071u, 0x00000006u, 0x00002820u, 0x000024d4u, 0x0003003eu, 0x00005f40u, 0x000024ccu, 0x0003003eu, 0x00005f41u, 0x000024ceu, 0x0003003eu, 0x00002592u, 0x000019c4u, 0x0003003eu, 0x00002593u, 0x0000281du, 0x0003003eu, 0x00002594u, 0x00002820u, 0x00050041u, 0x00000007u, 0x0000354du, 0x00002593u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000354eu, 0x0000354du, 0x00050084u, 0x00000006u, 0x0000354fu, 0x000024ceu, 0x0000354eu, 0x00050080u, 0x00000006u, 0x00003550u, 0x000024ccu, 0x0000354fu, 0x0003003eu, 0x00003544u, 0x00003550u, 0x00050041u, 0x00000007u, 0x00003551u, 0x00002593u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003552u, 0x00003551u, 0x000500c2u, 0x00000006u, 0x00003553u, 0x00003552u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003555u, 0x00003550u, 0x00003553u, 0x0003003eu, 0x00003544u, 0x00003555u, 0x000500c7u, 0x00000006u, 0x00003557u, 0x00003555u, 0x0000068au, 0x0003003eu, 0x00003544u, 0x00003557u, 0x0004003du, 0x00000006u, 0x00003559u, 0x00003551u, 0x000400c8u, 0x00000006u, 0x0000355au, 0x00003559u, 0x000500c7u, 0x00000006u, 0x0000355bu, 0x0000355au, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000355cu, 0x0000355bu, 0x00000692u, 0x0003003eu, 0x00003545u, 0x0000355cu, 0x0003003eu, 0x00003546u, 0x00003557u, 0x0004003du, 0x00000006u, 0x0000355fu, 0x0000354du, 0x000500c7u, 0x00000006u, 0x00003560u, 0x0000355fu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003561u, 0x00003560u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003563u, 0x00003557u, 0x00003561u, 0x0003003eu, 0x00003546u, 0x00003563u, 0x000500c6u, 0x00000006u, 0x00003565u, 0x00003563u, 0x000002fbu, 0x0003003eu, 0x00003546u, 0x00003565u, 0x00080041u, 0x000006a8u, 0x00003568u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003565u, 0x0004003du, 0x0000000fu, 0x00003569u, 0x00003568u, 0x00040071u, 0x00000006u, 0x0000356au, 0x00003569u, 0x0003003eu, 0x00003547u, 0x0000356au, 0x000500c2u, 0x00000006u, 0x0000356du, 0x0000356au, 0x0000355cu, 0x000500c7u, 0x00000006u, 0x0000356eu, 0x0000356du, 0x000006afu, 0x0003003eu, 0x00003547u, 0x0000356eu, 0x000500c4u, 0x00000006u, 0x00003570u, 0x00002820u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003572u, 0x0000356eu, 0x00003570u, 0x0003003eu, 0x00003547u, 0x00003572u, 0x00040071u, 0x00000011u, 0x00003574u, 0x00003572u, 0x0004007cu, 0x00000012u, 0x00003575u, 0x00003574u, 0x00070050u, 0x00000013u, 0x00003576u, 0x00003575u, 0x00003575u, 0x00003575u, 0x00003575u, 0x0003003eu, 0x00003548u, 0x00003576u, 0x0003003eu, 0x000024ffu, 0x00003576u, 0x000300f7u, 0x00002825u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002826u, 0x00002825u, 0x000200f8u, 0x00002826u, 0x00050050u, 0x00000058u, 0x00002829u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x0000282au, 0x00002829u, 0x0003003eu, 0x00005f44u, 0x000024ccu, 0x0003003eu, 0x00005f45u, 0x000024ceu, 0x0003003eu, 0x00002596u, 0x000019c4u, 0x0003003eu, 0x00002597u, 0x0000282au, 0x0003003eu, 0x00002598u, 0x00002820u, 0x00050041u, 0x00000007u, 0x00003580u, 0x00002597u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003581u, 0x00003580u, 0x00050084u, 0x00000006u, 0x00003582u, 0x000024ceu, 0x00003581u, 0x00050080u, 0x00000006u, 0x00003583u, 0x000024ccu, 0x00003582u, 0x0003003eu, 0x00003577u, 0x00003583u, 0x00050041u, 0x00000007u, 0x00003584u, 0x00002597u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003585u, 0x00003584u, 0x000500c2u, 0x00000006u, 0x00003586u, 0x00003585u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003588u, 0x00003583u, 0x00003586u, 0x0003003eu, 0x00003577u, 0x00003588u, 0x000500c7u, 0x00000006u, 0x0000358au, 0x00003588u, 0x0000068au, 0x0003003eu, 0x00003577u, 0x0000358au, 0x0004003du, 0x00000006u, 0x0000358cu, 0x00003584u, 0x000400c8u, 0x00000006u, 0x0000358du, 0x0000358cu, 0x000500c7u, 0x00000006u, 0x0000358eu, 0x0000358du, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000358fu, 0x0000358eu, 0x00000692u, 0x0003003eu, 0x00003578u, 0x0000358fu, 0x0003003eu, 0x00003579u, 0x0000358au, 0x0004003du, 0x00000006u, 0x00003592u, 0x00003580u, 0x000500c7u, 0x00000006u, 0x00003593u, 0x00003592u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003594u, 0x00003593u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003596u, 0x0000358au, 0x00003594u, 0x0003003eu, 0x00003579u, 0x00003596u, 0x000500c6u, 0x00000006u, 0x00003598u, 0x00003596u, 0x000002fbu, 0x0003003eu, 0x00003579u, 0x00003598u, 0x00080041u, 0x000006a8u, 0x0000359bu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003598u, 0x0004003du, 0x0000000fu, 0x0000359cu, 0x0000359bu, 0x00040071u, 0x00000006u, 0x0000359du, 0x0000359cu, 0x0003003eu, 0x0000357au, 0x0000359du, 0x000500c2u, 0x00000006u, 0x000035a0u, 0x0000359du, 0x0000358fu, 0x000500c7u, 0x00000006u, 0x000035a1u, 0x000035a0u, 0x000006afu, 0x0003003eu, 0x0000357au, 0x000035a1u, 0x000500c5u, 0x00000006u, 0x000035a5u, 0x000035a1u, 0x00003570u, 0x0003003eu, 0x0000357au, 0x000035a5u, 0x00040071u, 0x00000011u, 0x000035a7u, 0x000035a5u, 0x0004007cu, 0x00000012u, 0x000035a8u, 0x000035a7u, 0x00070050u, 0x00000013u, 0x000035a9u, 0x000035a8u, 0x000035a8u, 0x000035a8u, 0x000035a8u, 0x0003003eu, 0x0000357bu, 0x000035a9u, 0x0003003eu, 0x00002507u, 0x000035a9u, 0x00050050u, 0x00000058u, 0x00002833u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002834u, 0x00002833u, 0x0003003eu, 0x00005f48u, 0x000024ccu, 0x0003003eu, 0x00005f49u, 0x000024ceu, 0x0003003eu, 0x0000259au, 0x000019c4u, 0x0003003eu, 0x0000259bu, 0x00002834u, 0x0003003eu, 0x0000259cu, 0x00002820u, 0x00050041u, 0x00000007u, 0x000035b3u, 0x0000259bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000035b4u, 0x000035b3u, 0x00050084u, 0x00000006u, 0x000035b5u, 0x000024ceu, 0x000035b4u, 0x00050080u, 0x00000006u, 0x000035b6u, 0x000024ccu, 0x000035b5u, 0x0003003eu, 0x000035aau, 0x000035b6u, 0x00050041u, 0x00000007u, 0x000035b7u, 0x0000259bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000035b8u, 0x000035b7u, 0x000500c2u, 0x00000006u, 0x000035b9u, 0x000035b8u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000035bbu, 0x000035b6u, 0x000035b9u, 0x0003003eu, 0x000035aau, 0x000035bbu, 0x000500c7u, 0x00000006u, 0x000035bdu, 0x000035bbu, 0x0000068au, 0x0003003eu, 0x000035aau, 0x000035bdu, 0x0004003du, 0x00000006u, 0x000035bfu, 0x000035b7u, 0x000400c8u, 0x00000006u, 0x000035c0u, 0x000035bfu, 0x000500c7u, 0x00000006u, 0x000035c1u, 0x000035c0u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000035c2u, 0x000035c1u, 0x00000692u, 0x0003003eu, 0x000035abu, 0x000035c2u, 0x0003003eu, 0x000035acu, 0x000035bdu, 0x0004003du, 0x00000006u, 0x000035c5u, 0x000035b3u, 0x000500c7u, 0x00000006u, 0x000035c6u, 0x000035c5u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000035c7u, 0x000035c6u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000035c9u, 0x000035bdu, 0x000035c7u, 0x0003003eu, 0x000035acu, 0x000035c9u, 0x000500c6u, 0x00000006u, 0x000035cbu, 0x000035c9u, 0x000002fbu, 0x0003003eu, 0x000035acu, 0x000035cbu, 0x00080041u, 0x000006a8u, 0x000035ceu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000035cbu, 0x0004003du, 0x0000000fu, 0x000035cfu, 0x000035ceu, 0x00040071u, 0x00000006u, 0x000035d0u, 0x000035cfu, 0x0003003eu, 0x000035adu, 0x000035d0u, 0x000500c2u, 0x00000006u, 0x000035d3u, 0x000035d0u, 0x000035c2u, 0x000500c7u, 0x00000006u, 0x000035d4u, 0x000035d3u, 0x000006afu, 0x0003003eu, 0x000035adu, 0x000035d4u, 0x000500c5u, 0x00000006u, 0x000035d8u, 0x000035d4u, 0x00003570u, 0x0003003eu, 0x000035adu, 0x000035d8u, 0x00040071u, 0x00000011u, 0x000035dau, 0x000035d8u, 0x0004007cu, 0x00000012u, 0x000035dbu, 0x000035dau, 0x00070050u, 0x00000013u, 0x000035dcu, 0x000035dbu, 0x000035dbu, 0x000035dbu, 0x000035dbu, 0x0003003eu, 0x000035aeu, 0x000035dcu, 0x0003003eu, 0x0000250fu, 0x000035dcu, 0x000200f9u, 0x00002825u, 0x000200f8u, 0x00002825u, 0x000700f5u, 0x00000013u, 0x00007842u, 0x00007705u, 0x000027fau, 0x000035dcu, 0x00002826u, 0x000700f5u, 0x00000013u, 0x00007750u, 0x00007705u, 0x000027fau, 0x000035a9u, 0x00002826u, 0x000300f7u, 0x0000283cu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000283du, 0x0000283cu, 0x000200f8u, 0x0000283du, 0x00050050u, 0x00000058u, 0x00002840u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002841u, 0x00002840u, 0x0003003eu, 0x00005f4cu, 0x000024ccu, 0x0003003eu, 0x00005f4du, 0x000024ceu, 0x0003003eu, 0x0000259eu, 0x000019c4u, 0x0003003eu, 0x0000259fu, 0x00002841u, 0x0003003eu, 0x000025a0u, 0x00002820u, 0x00050041u, 0x00000007u, 0x000035e6u, 0x0000259fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000035e7u, 0x000035e6u, 0x00050084u, 0x00000006u, 0x000035e8u, 0x000024ceu, 0x000035e7u, 0x00050080u, 0x00000006u, 0x000035e9u, 0x000024ccu, 0x000035e8u, 0x0003003eu, 0x000035ddu, 0x000035e9u, 0x00050041u, 0x00000007u, 0x000035eau, 0x0000259fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000035ebu, 0x000035eau, 0x000500c2u, 0x00000006u, 0x000035ecu, 0x000035ebu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000035eeu, 0x000035e9u, 0x000035ecu, 0x0003003eu, 0x000035ddu, 0x000035eeu, 0x000500c7u, 0x00000006u, 0x000035f0u, 0x000035eeu, 0x0000068au, 0x0003003eu, 0x000035ddu, 0x000035f0u, 0x0004003du, 0x00000006u, 0x000035f2u, 0x000035eau, 0x000400c8u, 0x00000006u, 0x000035f3u, 0x000035f2u, 0x000500c7u, 0x00000006u, 0x000035f4u, 0x000035f3u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000035f5u, 0x000035f4u, 0x00000692u, 0x0003003eu, 0x000035deu, 0x000035f5u, 0x0003003eu, 0x000035dfu, 0x000035f0u, 0x0004003du, 0x00000006u, 0x000035f8u, 0x000035e6u, 0x000500c7u, 0x00000006u, 0x000035f9u, 0x000035f8u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000035fau, 0x000035f9u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000035fcu, 0x000035f0u, 0x000035fau, 0x0003003eu, 0x000035dfu, 0x000035fcu, 0x000500c6u, 0x00000006u, 0x000035feu, 0x000035fcu, 0x000002fbu, 0x0003003eu, 0x000035dfu, 0x000035feu, 0x00080041u, 0x000006a8u, 0x00003601u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000035feu, 0x0004003du, 0x0000000fu, 0x00003602u, 0x00003601u, 0x00040071u, 0x00000006u, 0x00003603u, 0x00003602u, 0x0003003eu, 0x000035e0u, 0x00003603u, 0x000500c2u, 0x00000006u, 0x00003606u, 0x00003603u, 0x000035f5u, 0x000500c7u, 0x00000006u, 0x00003607u, 0x00003606u, 0x000006afu, 0x0003003eu, 0x000035e0u, 0x00003607u, 0x000500c5u, 0x00000006u, 0x0000360bu, 0x00003607u, 0x00003570u, 0x0003003eu, 0x000035e0u, 0x0000360bu, 0x00040071u, 0x00000011u, 0x0000360du, 0x0000360bu, 0x0004007cu, 0x00000012u, 0x0000360eu, 0x0000360du, 0x00070050u, 0x00000013u, 0x0000360fu, 0x0000360eu, 0x0000360eu, 0x0000360eu, 0x0000360eu, 0x0003003eu, 0x000035e1u, 0x0000360fu, 0x0003003eu, 0x00002517u, 0x0000360fu, 0x000200f9u, 0x0000283cu, 0x000200f8u, 0x0000283cu, 0x000700f5u, 0x00000013u, 0x000078bbu, 0x00007705u, 0x00002825u, 0x0000360fu, 0x0000283du, 0x000200f9u, 0x000027f8u, 0x000200f8u, 0x000027f9u, 0x0004007cu, 0x000000abu, 0x000027fdu, 0x00007379u, 0x0003003eu, 0x00005f60u, 0x000024ccu, 0x0003003eu, 0x00005f61u, 0x000024ceu, 0x0003003eu, 0x000025aeu, 0x000019c4u, 0x0003003eu, 0x000025afu, 0x000027fdu, 0x00050041u, 0x00000007u, 0x0000349cu, 0x000025afu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000349du, 0x0000349cu, 0x00050084u, 0x00000006u, 0x0000349eu, 0x000024ceu, 0x0000349du, 0x00050080u, 0x00000006u, 0x0000349fu, 0x000024ccu, 0x0000349eu, 0x0003003eu, 0x00003494u, 0x0000349fu, 0x00050041u, 0x00000007u, 0x000034a0u, 0x000025afu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000034a1u, 0x000034a0u, 0x00050084u, 0x00000006u, 0x000034a2u, 0x000034a1u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000034a4u, 0x0000349fu, 0x000034a2u, 0x0003003eu, 0x00003494u, 0x000034a4u, 0x000500c7u, 0x00000006u, 0x000034a6u, 0x000034a4u, 0x0000068au, 0x0003003eu, 0x00003494u, 0x000034a6u, 0x000500c2u, 0x00000006u, 0x000034a8u, 0x000034a6u, 0x000001a6u, 0x0003003eu, 0x00003495u, 0x000034a8u, 0x0004003du, 0x00000006u, 0x000034aau, 0x0000349cu, 0x000500c7u, 0x00000006u, 0x000034abu, 0x000034aau, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000034acu, 0x000034abu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000034aeu, 0x000034a8u, 0x000034acu, 0x0003003eu, 0x00003495u, 0x000034aeu, 0x000500c6u, 0x00000006u, 0x000034b0u, 0x000034aeu, 0x000002f4u, 0x0003003eu, 0x00003495u, 0x000034b0u, 0x00080041u, 0x00000778u, 0x000034b3u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000034b0u, 0x0004003du, 0x00000011u, 0x000034b4u, 0x000034b3u, 0x00040071u, 0x00000006u, 0x000034b5u, 0x000034b4u, 0x0003003eu, 0x00003496u, 0x000034b5u, 0x000500c2u, 0x00000006u, 0x000034b7u, 0x000034b5u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000034b8u, 0x000034b7u, 0x0004007cu, 0x00000012u, 0x000034b9u, 0x000034b8u, 0x000500c7u, 0x00000006u, 0x000034bbu, 0x000034b5u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000034bcu, 0x000034bbu, 0x0004007cu, 0x00000012u, 0x000034bdu, 0x000034bcu, 0x00050050u, 0x0000011du, 0x000034beu, 0x000034b9u, 0x000034bdu, 0x0009004fu, 0x00000013u, 0x000034bfu, 0x000034beu, 0x000034beu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003497u, 0x000034bfu, 0x0003003eu, 0x000024ffu, 0x000034bfu, 0x000300f7u, 0x00002802u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002803u, 0x00002802u, 0x000200f8u, 0x00002803u, 0x00050050u, 0x00000058u, 0x00002806u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002807u, 0x00002806u, 0x0003003eu, 0x00005f64u, 0x000024ccu, 0x0003003eu, 0x00005f65u, 0x000024ceu, 0x0003003eu, 0x000025b1u, 0x000019c4u, 0x0003003eu, 0x000025b2u, 0x00002807u, 0x00050041u, 0x00000007u, 0x000034c8u, 0x000025b2u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000034c9u, 0x000034c8u, 0x00050084u, 0x00000006u, 0x000034cau, 0x000024ceu, 0x000034c9u, 0x00050080u, 0x00000006u, 0x000034cbu, 0x000024ccu, 0x000034cau, 0x0003003eu, 0x000034c0u, 0x000034cbu, 0x00050041u, 0x00000007u, 0x000034ccu, 0x000025b2u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000034cdu, 0x000034ccu, 0x00050084u, 0x00000006u, 0x000034ceu, 0x000034cdu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000034d0u, 0x000034cbu, 0x000034ceu, 0x0003003eu, 0x000034c0u, 0x000034d0u, 0x000500c7u, 0x00000006u, 0x000034d2u, 0x000034d0u, 0x0000068au, 0x0003003eu, 0x000034c0u, 0x000034d2u, 0x000500c2u, 0x00000006u, 0x000034d4u, 0x000034d2u, 0x000001a6u, 0x0003003eu, 0x000034c1u, 0x000034d4u, 0x0004003du, 0x00000006u, 0x000034d6u, 0x000034c8u, 0x000500c7u, 0x00000006u, 0x000034d7u, 0x000034d6u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000034d8u, 0x000034d7u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000034dau, 0x000034d4u, 0x000034d8u, 0x0003003eu, 0x000034c1u, 0x000034dau, 0x000500c6u, 0x00000006u, 0x000034dcu, 0x000034dau, 0x000002f4u, 0x0003003eu, 0x000034c1u, 0x000034dcu, 0x00080041u, 0x00000778u, 0x000034dfu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000034dcu, 0x0004003du, 0x00000011u, 0x000034e0u, 0x000034dfu, 0x00040071u, 0x00000006u, 0x000034e1u, 0x000034e0u, 0x0003003eu, 0x000034c2u, 0x000034e1u, 0x000500c2u, 0x00000006u, 0x000034e3u, 0x000034e1u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000034e4u, 0x000034e3u, 0x0004007cu, 0x00000012u, 0x000034e5u, 0x000034e4u, 0x000500c7u, 0x00000006u, 0x000034e7u, 0x000034e1u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000034e8u, 0x000034e7u, 0x0004007cu, 0x00000012u, 0x000034e9u, 0x000034e8u, 0x00050050u, 0x0000011du, 0x000034eau, 0x000034e5u, 0x000034e9u, 0x0009004fu, 0x00000013u, 0x000034ebu, 0x000034eau, 0x000034eau, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000034c3u, 0x000034ebu, 0x0003003eu, 0x00002507u, 0x000034ebu, 0x00050050u, 0x00000058u, 0x0000280du, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000280eu, 0x0000280du, 0x0003003eu, 0x00005f68u, 0x000024ccu, 0x0003003eu, 0x00005f69u, 0x000024ceu, 0x0003003eu, 0x000025b4u, 0x000019c4u, 0x0003003eu, 0x000025b5u, 0x0000280eu, 0x00050041u, 0x00000007u, 0x000034f4u, 0x000025b5u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000034f5u, 0x000034f4u, 0x00050084u, 0x00000006u, 0x000034f6u, 0x000024ceu, 0x000034f5u, 0x00050080u, 0x00000006u, 0x000034f7u, 0x000024ccu, 0x000034f6u, 0x0003003eu, 0x000034ecu, 0x000034f7u, 0x00050041u, 0x00000007u, 0x000034f8u, 0x000025b5u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000034f9u, 0x000034f8u, 0x00050084u, 0x00000006u, 0x000034fau, 0x000034f9u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000034fcu, 0x000034f7u, 0x000034fau, 0x0003003eu, 0x000034ecu, 0x000034fcu, 0x000500c7u, 0x00000006u, 0x000034feu, 0x000034fcu, 0x0000068au, 0x0003003eu, 0x000034ecu, 0x000034feu, 0x000500c2u, 0x00000006u, 0x00003500u, 0x000034feu, 0x000001a6u, 0x0003003eu, 0x000034edu, 0x00003500u, 0x0004003du, 0x00000006u, 0x00003502u, 0x000034f4u, 0x000500c7u, 0x00000006u, 0x00003503u, 0x00003502u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003504u, 0x00003503u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003506u, 0x00003500u, 0x00003504u, 0x0003003eu, 0x000034edu, 0x00003506u, 0x000500c6u, 0x00000006u, 0x00003508u, 0x00003506u, 0x000002f4u, 0x0003003eu, 0x000034edu, 0x00003508u, 0x00080041u, 0x00000778u, 0x0000350bu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003508u, 0x0004003du, 0x00000011u, 0x0000350cu, 0x0000350bu, 0x00040071u, 0x00000006u, 0x0000350du, 0x0000350cu, 0x0003003eu, 0x000034eeu, 0x0000350du, 0x000500c2u, 0x00000006u, 0x0000350fu, 0x0000350du, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003510u, 0x0000350fu, 0x0004007cu, 0x00000012u, 0x00003511u, 0x00003510u, 0x000500c7u, 0x00000006u, 0x00003513u, 0x0000350du, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003514u, 0x00003513u, 0x0004007cu, 0x00000012u, 0x00003515u, 0x00003514u, 0x00050050u, 0x0000011du, 0x00003516u, 0x00003511u, 0x00003515u, 0x0009004fu, 0x00000013u, 0x00003517u, 0x00003516u, 0x00003516u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000034efu, 0x00003517u, 0x0003003eu, 0x0000250fu, 0x00003517u, 0x000200f9u, 0x00002802u, 0x000200f8u, 0x00002802u, 0x000700f5u, 0x00000013u, 0x00007840u, 0x00007705u, 0x000027f9u, 0x00003517u, 0x00002803u, 0x000700f5u, 0x00000013u, 0x0000774eu, 0x00007705u, 0x000027f9u, 0x000034ebu, 0x00002803u, 0x000300f7u, 0x00002813u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x00002814u, 0x00002813u, 0x000200f8u, 0x00002814u, 0x00050050u, 0x00000058u, 0x00002817u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002818u, 0x00002817u, 0x0003003eu, 0x00005f6cu, 0x000024ccu, 0x0003003eu, 0x00005f6du, 0x000024ceu, 0x0003003eu, 0x000025b7u, 0x000019c4u, 0x0003003eu, 0x000025b8u, 0x00002818u, 0x00050041u, 0x00000007u, 0x00003520u, 0x000025b8u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003521u, 0x00003520u, 0x00050084u, 0x00000006u, 0x00003522u, 0x000024ceu, 0x00003521u, 0x00050080u, 0x00000006u, 0x00003523u, 0x000024ccu, 0x00003522u, 0x0003003eu, 0x00003518u, 0x00003523u, 0x00050041u, 0x00000007u, 0x00003524u, 0x000025b8u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003525u, 0x00003524u, 0x00050084u, 0x00000006u, 0x00003526u, 0x00003525u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003528u, 0x00003523u, 0x00003526u, 0x0003003eu, 0x00003518u, 0x00003528u, 0x000500c7u, 0x00000006u, 0x0000352au, 0x00003528u, 0x0000068au, 0x0003003eu, 0x00003518u, 0x0000352au, 0x000500c2u, 0x00000006u, 0x0000352cu, 0x0000352au, 0x000001a6u, 0x0003003eu, 0x00003519u, 0x0000352cu, 0x0004003du, 0x00000006u, 0x0000352eu, 0x00003520u, 0x000500c7u, 0x00000006u, 0x0000352fu, 0x0000352eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003530u, 0x0000352fu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003532u, 0x0000352cu, 0x00003530u, 0x0003003eu, 0x00003519u, 0x00003532u, 0x000500c6u, 0x00000006u, 0x00003534u, 0x00003532u, 0x000002f4u, 0x0003003eu, 0x00003519u, 0x00003534u, 0x00080041u, 0x00000778u, 0x00003537u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003534u, 0x0004003du, 0x00000011u, 0x00003538u, 0x00003537u, 0x00040071u, 0x00000006u, 0x00003539u, 0x00003538u, 0x0003003eu, 0x0000351au, 0x00003539u, 0x000500c2u, 0x00000006u, 0x0000353bu, 0x00003539u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000353cu, 0x0000353bu, 0x0004007cu, 0x00000012u, 0x0000353du, 0x0000353cu, 0x000500c7u, 0x00000006u, 0x0000353fu, 0x00003539u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003540u, 0x0000353fu, 0x0004007cu, 0x00000012u, 0x00003541u, 0x00003540u, 0x00050050u, 0x0000011du, 0x00003542u, 0x0000353du, 0x00003541u, 0x0009004fu, 0x00000013u, 0x00003543u, 0x00003542u, 0x00003542u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000351bu, 0x00003543u, 0x0003003eu, 0x00002517u, 0x00003543u, 0x000200f9u, 0x00002813u, 0x000200f8u, 0x00002813u, 0x000700f5u, 0x00000013u, 0x000078b9u, 0x00007705u, 0x00002802u, 0x00003543u, 0x00002814u, 0x000200f9u, 0x000027f8u, 0x000200f8u, 0x000027f8u, 0x000900f5u, 0x00000013u, 0x000078b8u, 0x000078b9u, 0x00002813u, 0x000078bbu, 0x0000283cu, 0x000078bdu, 0x0000285fu, 0x000900f5u, 0x00000013u, 0x0000783eu, 0x00007840u, 0x00002813u, 0x00007842u, 0x0000283cu, 0x00007844u, 0x0000285fu, 0x000900f5u, 0x00000013u, 0x000077c6u, 0x000034bfu, 0x00002813u, 0x00003576u, 0x0000283cu, 0x00003633u, 0x0000285fu, 0x000900f5u, 0x00000013u, 0x0000774cu, 0x0000774eu, 0x00002813u, 0x00007750u, 0x0000283cu, 0x00007752u, 0x0000285fu, 0x000200f9u, 0x00002738u, 0x000200f8u, 0x0000273au, 0x000500c3u, 0x00000008u, 0x000027c8u, 0x000072f0u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x000027c9u, 0x000027c8u, 0x0003003eu, 0x0000257fu, 0x000027c9u, 0x00050082u, 0x00000008u, 0x000027cdu, 0x0000732eu, 0x000072f0u, 0x00050080u, 0x00000008u, 0x000027ceu, 0x0000732eu, 0x000027cdu, 0x000500c3u, 0x00000008u, 0x000027cfu, 0x000027ceu, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x000027d0u, 0x000027cfu, 0x0003003eu, 0x00002580u, 0x000027d0u, 0x00050050u, 0x00000058u, 0x000027d3u, 0x000072f0u, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000027d4u, 0x000027d3u, 0x0003003eu, 0x00005f30u, 0x000024ccu, 0x0003003eu, 0x00005f31u, 0x000024ceu, 0x0003003eu, 0x00002582u, 0x000019c4u, 0x0003003eu, 0x00002583u, 0x000027d4u, 0x0003003eu, 0x00002584u, 0x000027c9u, 0x00050041u, 0x00000007u, 0x0000335eu, 0x00002583u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000335fu, 0x0000335eu, 0x00050084u, 0x00000006u, 0x00003360u, 0x000024ceu, 0x0000335fu, 0x00050080u, 0x00000006u, 0x00003361u, 0x000024ccu, 0x00003360u, 0x0003003eu, 0x00003350u, 0x00003361u, 0x00050041u, 0x00000007u, 0x00003363u, 0x00002583u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003364u, 0x00003363u, 0x00050080u, 0x00000006u, 0x00003365u, 0x00003361u, 0x00003364u, 0x0003003eu, 0x00003351u, 0x00003365u, 0x000500c7u, 0x00000006u, 0x00003367u, 0x00003365u, 0x00000744u, 0x0003003eu, 0x00003351u, 0x00003367u, 0x00050084u, 0x00000006u, 0x0000336au, 0x000027c9u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x0000336bu, 0x00003361u, 0x0000336au, 0x0003003eu, 0x00003352u, 0x0000336bu, 0x000500c7u, 0x00000006u, 0x0000336du, 0x0000336bu, 0x00000744u, 0x0003003eu, 0x00003352u, 0x0000336du, 0x0003003eu, 0x00003353u, 0x00003367u, 0x0004003du, 0x00000006u, 0x00003370u, 0x0000335eu, 0x000500c7u, 0x00000006u, 0x00003371u, 0x00003370u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003372u, 0x00003371u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003374u, 0x00003367u, 0x00003372u, 0x0003003eu, 0x00003353u, 0x00003374u, 0x000500c6u, 0x00000006u, 0x00003376u, 0x00003374u, 0x000002fbu, 0x0003003eu, 0x00003353u, 0x00003376u, 0x000500c2u, 0x00000006u, 0x00003378u, 0x0000336du, 0x000001a6u, 0x0003003eu, 0x00003354u, 0x00003378u, 0x0004003du, 0x00000006u, 0x0000337au, 0x0000335eu, 0x000500c7u, 0x00000006u, 0x0000337bu, 0x0000337au, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000337cu, 0x0000337bu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000337eu, 0x00003378u, 0x0000337cu, 0x0003003eu, 0x00003354u, 0x0000337eu, 0x000500c6u, 0x00000006u, 0x00003380u, 0x0000337eu, 0x000002f4u, 0x0003003eu, 0x00003354u, 0x00003380u, 0x000500c5u, 0x00000006u, 0x00003383u, 0x00003376u, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00003384u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003383u, 0x0004003du, 0x0000000fu, 0x00003385u, 0x00003384u, 0x0003003eu, 0x00003355u, 0x00003385u, 0x00080041u, 0x00000778u, 0x00003388u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003380u, 0x0004003du, 0x00000011u, 0x00003389u, 0x00003388u, 0x0003003eu, 0x00003356u, 0x00003389u, 0x000500c2u, 0x00000011u, 0x0000338bu, 0x00003389u, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x0000338cu, 0x0000338bu, 0x000002acu, 0x00040071u, 0x0000000fu, 0x0000338du, 0x0000338cu, 0x0003003eu, 0x00003357u, 0x0000338du, 0x000500c2u, 0x00000011u, 0x0000338fu, 0x00003389u, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00003390u, 0x0000338fu, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00003391u, 0x00003390u, 0x0003003eu, 0x00003358u, 0x00003391u, 0x00040071u, 0x00000011u, 0x00003393u, 0x0000338du, 0x0004007cu, 0x00000012u, 0x00003394u, 0x00003393u, 0x00050082u, 0x00000012u, 0x00003395u, 0x00003394u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00003397u, 0x00003391u, 0x0004007cu, 0x00000012u, 0x00003398u, 0x00003397u, 0x00050082u, 0x00000012u, 0x00003399u, 0x00003398u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x0000339bu, 0x00003385u, 0x0004007cu, 0x00000012u, 0x0000339cu, 0x0000339bu, 0x00070050u, 0x00000013u, 0x000033a0u, 0x00003395u, 0x00003399u, 0x0000339cu, 0x0000339cu, 0x0003003eu, 0x00003359u, 0x000033a0u, 0x0003003eu, 0x000024ffu, 0x000033a0u, 0x000300f7u, 0x000027dau, 0x00000000u, 0x000400fau, 0x000019edu, 0x000027dbu, 0x000027dau, 0x000200f8u, 0x000027dbu, 0x00050050u, 0x00000058u, 0x000027deu, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000027dfu, 0x000027deu, 0x0003003eu, 0x00005f34u, 0x000024ccu, 0x0003003eu, 0x00005f35u, 0x000024ceu, 0x0003003eu, 0x00002586u, 0x000019c4u, 0x0003003eu, 0x00002587u, 0x000027dfu, 0x0003003eu, 0x00002588u, 0x000027d0u, 0x00050041u, 0x00000007u, 0x000033afu, 0x00002587u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000033b0u, 0x000033afu, 0x00050084u, 0x00000006u, 0x000033b1u, 0x000024ceu, 0x000033b0u, 0x00050080u, 0x00000006u, 0x000033b2u, 0x000024ccu, 0x000033b1u, 0x0003003eu, 0x000033a1u, 0x000033b2u, 0x00050041u, 0x00000007u, 0x000033b4u, 0x00002587u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000033b5u, 0x000033b4u, 0x00050080u, 0x00000006u, 0x000033b6u, 0x000033b2u, 0x000033b5u, 0x0003003eu, 0x000033a2u, 0x000033b6u, 0x000500c7u, 0x00000006u, 0x000033b8u, 0x000033b6u, 0x00000744u, 0x0003003eu, 0x000033a2u, 0x000033b8u, 0x00050084u, 0x00000006u, 0x000033bbu, 0x000027d0u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000033bcu, 0x000033b2u, 0x000033bbu, 0x0003003eu, 0x000033a3u, 0x000033bcu, 0x000500c7u, 0x00000006u, 0x000033beu, 0x000033bcu, 0x00000744u, 0x0003003eu, 0x000033a3u, 0x000033beu, 0x0003003eu, 0x000033a4u, 0x000033b8u, 0x0004003du, 0x00000006u, 0x000033c1u, 0x000033afu, 0x000500c7u, 0x00000006u, 0x000033c2u, 0x000033c1u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000033c3u, 0x000033c2u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000033c5u, 0x000033b8u, 0x000033c3u, 0x0003003eu, 0x000033a4u, 0x000033c5u, 0x000500c6u, 0x00000006u, 0x000033c7u, 0x000033c5u, 0x000002fbu, 0x0003003eu, 0x000033a4u, 0x000033c7u, 0x000500c2u, 0x00000006u, 0x000033c9u, 0x000033beu, 0x000001a6u, 0x0003003eu, 0x000033a5u, 0x000033c9u, 0x0004003du, 0x00000006u, 0x000033cbu, 0x000033afu, 0x000500c7u, 0x00000006u, 0x000033ccu, 0x000033cbu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000033cdu, 0x000033ccu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000033cfu, 0x000033c9u, 0x000033cdu, 0x0003003eu, 0x000033a5u, 0x000033cfu, 0x000500c6u, 0x00000006u, 0x000033d1u, 0x000033cfu, 0x000002f4u, 0x0003003eu, 0x000033a5u, 0x000033d1u, 0x000500c5u, 0x00000006u, 0x000033d4u, 0x000033c7u, 0x0000076du, 0x00080041u, 0x000006a8u, 0x000033d5u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000033d4u, 0x0004003du, 0x0000000fu, 0x000033d6u, 0x000033d5u, 0x0003003eu, 0x000033a6u, 0x000033d6u, 0x00080041u, 0x00000778u, 0x000033d9u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000033d1u, 0x0004003du, 0x00000011u, 0x000033dau, 0x000033d9u, 0x0003003eu, 0x000033a7u, 0x000033dau, 0x000500c2u, 0x00000011u, 0x000033dcu, 0x000033dau, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x000033ddu, 0x000033dcu, 0x000002acu, 0x00040071u, 0x0000000fu, 0x000033deu, 0x000033ddu, 0x0003003eu, 0x000033a8u, 0x000033deu, 0x000500c2u, 0x00000011u, 0x000033e0u, 0x000033dau, 0x00000196u, 0x000500c7u, 0x00000011u, 0x000033e1u, 0x000033e0u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x000033e2u, 0x000033e1u, 0x0003003eu, 0x000033a9u, 0x000033e2u, 0x00040071u, 0x00000011u, 0x000033e4u, 0x000033deu, 0x0004007cu, 0x00000012u, 0x000033e5u, 0x000033e4u, 0x00050082u, 0x00000012u, 0x000033e6u, 0x000033e5u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x000033e8u, 0x000033e2u, 0x0004007cu, 0x00000012u, 0x000033e9u, 0x000033e8u, 0x00050082u, 0x00000012u, 0x000033eau, 0x000033e9u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x000033ecu, 0x000033d6u, 0x0004007cu, 0x00000012u, 0x000033edu, 0x000033ecu, 0x00070050u, 0x00000013u, 0x000033f1u, 0x000033e6u, 0x000033eau, 0x000033edu, 0x000033edu, 0x0003003eu, 0x000033aau, 0x000033f1u, 0x0003003eu, 0x00002507u, 0x000033f1u, 0x00050050u, 0x00000058u, 0x000027e6u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000027e7u, 0x000027e6u, 0x0003003eu, 0x00005f38u, 0x000024ccu, 0x0003003eu, 0x00005f39u, 0x000024ceu, 0x0003003eu, 0x0000258au, 0x000019c4u, 0x0003003eu, 0x0000258bu, 0x000027e7u, 0x0003003eu, 0x0000258cu, 0x000027c9u, 0x00050041u, 0x00000007u, 0x00003400u, 0x0000258bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003401u, 0x00003400u, 0x00050084u, 0x00000006u, 0x00003402u, 0x000024ceu, 0x00003401u, 0x00050080u, 0x00000006u, 0x00003403u, 0x000024ccu, 0x00003402u, 0x0003003eu, 0x000033f2u, 0x00003403u, 0x00050041u, 0x00000007u, 0x00003405u, 0x0000258bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003406u, 0x00003405u, 0x00050080u, 0x00000006u, 0x00003407u, 0x00003403u, 0x00003406u, 0x0003003eu, 0x000033f3u, 0x00003407u, 0x000500c7u, 0x00000006u, 0x00003409u, 0x00003407u, 0x00000744u, 0x0003003eu, 0x000033f3u, 0x00003409u, 0x00050080u, 0x00000006u, 0x0000340du, 0x00003403u, 0x0000336au, 0x0003003eu, 0x000033f4u, 0x0000340du, 0x000500c7u, 0x00000006u, 0x0000340fu, 0x0000340du, 0x00000744u, 0x0003003eu, 0x000033f4u, 0x0000340fu, 0x0003003eu, 0x000033f5u, 0x00003409u, 0x0004003du, 0x00000006u, 0x00003412u, 0x00003400u, 0x000500c7u, 0x00000006u, 0x00003413u, 0x00003412u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003414u, 0x00003413u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003416u, 0x00003409u, 0x00003414u, 0x0003003eu, 0x000033f5u, 0x00003416u, 0x000500c6u, 0x00000006u, 0x00003418u, 0x00003416u, 0x000002fbu, 0x0003003eu, 0x000033f5u, 0x00003418u, 0x000500c2u, 0x00000006u, 0x0000341au, 0x0000340fu, 0x000001a6u, 0x0003003eu, 0x000033f6u, 0x0000341au, 0x0004003du, 0x00000006u, 0x0000341cu, 0x00003400u, 0x000500c7u, 0x00000006u, 0x0000341du, 0x0000341cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000341eu, 0x0000341du, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003420u, 0x0000341au, 0x0000341eu, 0x0003003eu, 0x000033f6u, 0x00003420u, 0x000500c6u, 0x00000006u, 0x00003422u, 0x00003420u, 0x000002f4u, 0x0003003eu, 0x000033f6u, 0x00003422u, 0x000500c5u, 0x00000006u, 0x00003425u, 0x00003418u, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00003426u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003425u, 0x0004003du, 0x0000000fu, 0x00003427u, 0x00003426u, 0x0003003eu, 0x000033f7u, 0x00003427u, 0x00080041u, 0x00000778u, 0x0000342au, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003422u, 0x0004003du, 0x00000011u, 0x0000342bu, 0x0000342au, 0x0003003eu, 0x000033f8u, 0x0000342bu, 0x000500c2u, 0x00000011u, 0x0000342du, 0x0000342bu, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x0000342eu, 0x0000342du, 0x000002acu, 0x00040071u, 0x0000000fu, 0x0000342fu, 0x0000342eu, 0x0003003eu, 0x000033f9u, 0x0000342fu, 0x000500c2u, 0x00000011u, 0x00003431u, 0x0000342bu, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00003432u, 0x00003431u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00003433u, 0x00003432u, 0x0003003eu, 0x000033fau, 0x00003433u, 0x00040071u, 0x00000011u, 0x00003435u, 0x0000342fu, 0x0004007cu, 0x00000012u, 0x00003436u, 0x00003435u, 0x00050082u, 0x00000012u, 0x00003437u, 0x00003436u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00003439u, 0x00003433u, 0x0004007cu, 0x00000012u, 0x0000343au, 0x00003439u, 0x00050082u, 0x00000012u, 0x0000343bu, 0x0000343au, 0x000008d7u, 0x00040071u, 0x00000011u, 0x0000343du, 0x00003427u, 0x0004007cu, 0x00000012u, 0x0000343eu, 0x0000343du, 0x00070050u, 0x00000013u, 0x00003442u, 0x00003437u, 0x0000343bu, 0x0000343eu, 0x0000343eu, 0x0003003eu, 0x000033fbu, 0x00003442u, 0x0003003eu, 0x0000250fu, 0x00003442u, 0x00050050u, 0x00000058u, 0x000027eeu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000027efu, 0x000027eeu, 0x0003003eu, 0x00005f3cu, 0x000024ccu, 0x0003003eu, 0x00005f3du, 0x000024ceu, 0x0003003eu, 0x0000258eu, 0x000019c4u, 0x0003003eu, 0x0000258fu, 0x000027efu, 0x0003003eu, 0x00002590u, 0x000027d0u, 0x00050041u, 0x00000007u, 0x00003451u, 0x0000258fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003452u, 0x00003451u, 0x00050084u, 0x00000006u, 0x00003453u, 0x000024ceu, 0x00003452u, 0x00050080u, 0x00000006u, 0x00003454u, 0x000024ccu, 0x00003453u, 0x0003003eu, 0x00003443u, 0x00003454u, 0x00050041u, 0x00000007u, 0x00003456u, 0x0000258fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003457u, 0x00003456u, 0x00050080u, 0x00000006u, 0x00003458u, 0x00003454u, 0x00003457u, 0x0003003eu, 0x00003444u, 0x00003458u, 0x000500c7u, 0x00000006u, 0x0000345au, 0x00003458u, 0x00000744u, 0x0003003eu, 0x00003444u, 0x0000345au, 0x00050080u, 0x00000006u, 0x0000345eu, 0x00003454u, 0x000033bbu, 0x0003003eu, 0x00003445u, 0x0000345eu, 0x000500c7u, 0x00000006u, 0x00003460u, 0x0000345eu, 0x00000744u, 0x0003003eu, 0x00003445u, 0x00003460u, 0x0003003eu, 0x00003446u, 0x0000345au, 0x0004003du, 0x00000006u, 0x00003463u, 0x00003451u, 0x000500c7u, 0x00000006u, 0x00003464u, 0x00003463u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003465u, 0x00003464u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003467u, 0x0000345au, 0x00003465u, 0x0003003eu, 0x00003446u, 0x00003467u, 0x000500c6u, 0x00000006u, 0x00003469u, 0x00003467u, 0x000002fbu, 0x0003003eu, 0x00003446u, 0x00003469u, 0x000500c2u, 0x00000006u, 0x0000346bu, 0x00003460u, 0x000001a6u, 0x0003003eu, 0x00003447u, 0x0000346bu, 0x0004003du, 0x00000006u, 0x0000346du, 0x00003451u, 0x000500c7u, 0x00000006u, 0x0000346eu, 0x0000346du, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000346fu, 0x0000346eu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003471u, 0x0000346bu, 0x0000346fu, 0x0003003eu, 0x00003447u, 0x00003471u, 0x000500c6u, 0x00000006u, 0x00003473u, 0x00003471u, 0x000002f4u, 0x0003003eu, 0x00003447u, 0x00003473u, 0x000500c5u, 0x00000006u, 0x00003476u, 0x00003469u, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00003477u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003476u, 0x0004003du, 0x0000000fu, 0x00003478u, 0x00003477u, 0x0003003eu, 0x00003448u, 0x00003478u, 0x00080041u, 0x00000778u, 0x0000347bu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003473u, 0x0004003du, 0x00000011u, 0x0000347cu, 0x0000347bu, 0x0003003eu, 0x00003449u, 0x0000347cu, 0x000500c2u, 0x00000011u, 0x0000347eu, 0x0000347cu, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x0000347fu, 0x0000347eu, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00003480u, 0x0000347fu, 0x0003003eu, 0x0000344au, 0x00003480u, 0x000500c2u, 0x00000011u, 0x00003482u, 0x0000347cu, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00003483u, 0x00003482u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00003484u, 0x00003483u, 0x0003003eu, 0x0000344bu, 0x00003484u, 0x00040071u, 0x00000011u, 0x00003486u, 0x00003480u, 0x0004007cu, 0x00000012u, 0x00003487u, 0x00003486u, 0x00050082u, 0x00000012u, 0x00003488u, 0x00003487u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x0000348au, 0x00003484u, 0x0004007cu, 0x00000012u, 0x0000348bu, 0x0000348au, 0x00050082u, 0x00000012u, 0x0000348cu, 0x0000348bu, 0x000008d7u, 0x00040071u, 0x00000011u, 0x0000348eu, 0x00003478u, 0x0004007cu, 0x00000012u, 0x0000348fu, 0x0000348eu, 0x00070050u, 0x00000013u, 0x00003493u, 0x00003488u, 0x0000348cu, 0x0000348fu, 0x0000348fu, 0x0003003eu, 0x0000344cu, 0x00003493u, 0x0003003eu, 0x00002517u, 0x00003493u, 0x000200f9u, 0x000027dau, 0x000200f8u, 0x000027dau, 0x000700f5u, 0x00000013u, 0x000078b7u, 0x00007705u, 0x0000273au, 0x00003493u, 0x000027dbu, 0x000700f5u, 0x00000013u, 0x0000783du, 0x00007705u, 0x0000273au, 0x00003442u, 0x000027dbu, 0x000700f5u, 0x00000013u, 0x0000774bu, 0x00007705u, 0x0000273au, 0x000033f1u, 0x000027dbu, 0x000200f9u, 0x00002738u, 0x000200f8u, 0x00002739u, 0x00040071u, 0x00000006u, 0x00002740u, 0x0000b63eu, 0x0004007cu, 0x00000008u, 0x00002741u, 0x00002740u, 0x000300f7u, 0x00002742u, 0x00000000u, 0x000b00fbu, 0x00002741u, 0x00002742u, 0x00000000u, 0x00002743u, 0x00000001u, 0x00002744u, 0x00000002u, 0x00002745u, 0x00000003u, 0x00002746u, 0x000200f8u, 0x00002746u, 0x0004007cu, 0x000000abu, 0x000027a8u, 0x00007379u, 0x0003003eu, 0x00005f20u, 0x000024ccu, 0x0003003eu, 0x00005f21u, 0x000024ceu, 0x0003003eu, 0x00002574u, 0x000019c4u, 0x0003003eu, 0x00002575u, 0x000027a8u, 0x00050041u, 0x00000007u, 0x00003271u, 0x00002575u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003272u, 0x00003271u, 0x00050084u, 0x00000006u, 0x00003273u, 0x000024ceu, 0x00003272u, 0x00050080u, 0x00000006u, 0x00003274u, 0x000024ccu, 0x00003273u, 0x0003003eu, 0x00003268u, 0x00003274u, 0x00050041u, 0x00000007u, 0x00003275u, 0x00002575u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003276u, 0x00003275u, 0x00050084u, 0x00000006u, 0x00003277u, 0x00003276u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003279u, 0x00003274u, 0x00003277u, 0x0003003eu, 0x00003268u, 0x00003279u, 0x000500c7u, 0x00000006u, 0x0000327bu, 0x00003279u, 0x00000744u, 0x0003003eu, 0x00003268u, 0x0000327bu, 0x000500c2u, 0x00000006u, 0x0000327du, 0x0000327bu, 0x000001a6u, 0x0003003eu, 0x00003269u, 0x0000327du, 0x0004003du, 0x00000006u, 0x0000327fu, 0x00003271u, 0x000500c7u, 0x00000006u, 0x00003280u, 0x0000327fu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003281u, 0x00003280u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003283u, 0x0000327du, 0x00003281u, 0x0003003eu, 0x00003269u, 0x00003283u, 0x000500c6u, 0x00000006u, 0x00003285u, 0x00003283u, 0x000002f4u, 0x0003003eu, 0x00003269u, 0x00003285u, 0x00080041u, 0x00000778u, 0x00003288u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003285u, 0x0004003du, 0x00000011u, 0x00003289u, 0x00003288u, 0x00040071u, 0x00000006u, 0x0000328au, 0x00003289u, 0x0003003eu, 0x0000326au, 0x0000328au, 0x000500c5u, 0x00000006u, 0x0000328du, 0x00003285u, 0x00000775u, 0x00080041u, 0x00000778u, 0x0000328eu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000328du, 0x0004003du, 0x00000011u, 0x0000328fu, 0x0000328eu, 0x00040071u, 0x00000006u, 0x00003290u, 0x0000328fu, 0x0003003eu, 0x0000326bu, 0x00003290u, 0x000500c2u, 0x00000006u, 0x00003292u, 0x0000328au, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003293u, 0x00003292u, 0x0004007cu, 0x00000012u, 0x00003294u, 0x00003293u, 0x000500c7u, 0x00000006u, 0x00003296u, 0x0000328au, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003297u, 0x00003296u, 0x0004007cu, 0x00000012u, 0x00003298u, 0x00003297u, 0x000500c2u, 0x00000006u, 0x0000329au, 0x00003290u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000329bu, 0x0000329au, 0x0004007cu, 0x00000012u, 0x0000329cu, 0x0000329bu, 0x000500c7u, 0x00000006u, 0x0000329eu, 0x00003290u, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000329fu, 0x0000329eu, 0x0004007cu, 0x00000012u, 0x000032a0u, 0x0000329fu, 0x00070050u, 0x00000013u, 0x000032a1u, 0x00003294u, 0x00003298u, 0x0000329cu, 0x000032a0u, 0x0003003eu, 0x0000326cu, 0x000032a1u, 0x0003003eu, 0x000024ffu, 0x000032a1u, 0x000300f7u, 0x000027adu, 0x00000000u, 0x000400fau, 0x000019edu, 0x000027aeu, 0x000027adu, 0x000200f8u, 0x000027aeu, 0x00050050u, 0x00000058u, 0x000027b1u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000027b2u, 0x000027b1u, 0x0003003eu, 0x00005f24u, 0x000024ccu, 0x0003003eu, 0x00005f25u, 0x000024ceu, 0x0003003eu, 0x00002577u, 0x000019c4u, 0x0003003eu, 0x00002578u, 0x000027b2u, 0x00050041u, 0x00000007u, 0x000032abu, 0x00002578u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000032acu, 0x000032abu, 0x00050084u, 0x00000006u, 0x000032adu, 0x000024ceu, 0x000032acu, 0x00050080u, 0x00000006u, 0x000032aeu, 0x000024ccu, 0x000032adu, 0x0003003eu, 0x000032a2u, 0x000032aeu, 0x00050041u, 0x00000007u, 0x000032afu, 0x00002578u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000032b0u, 0x000032afu, 0x00050084u, 0x00000006u, 0x000032b1u, 0x000032b0u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000032b3u, 0x000032aeu, 0x000032b1u, 0x0003003eu, 0x000032a2u, 0x000032b3u, 0x000500c7u, 0x00000006u, 0x000032b5u, 0x000032b3u, 0x00000744u, 0x0003003eu, 0x000032a2u, 0x000032b5u, 0x000500c2u, 0x00000006u, 0x000032b7u, 0x000032b5u, 0x000001a6u, 0x0003003eu, 0x000032a3u, 0x000032b7u, 0x0004003du, 0x00000006u, 0x000032b9u, 0x000032abu, 0x000500c7u, 0x00000006u, 0x000032bau, 0x000032b9u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000032bbu, 0x000032bau, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000032bdu, 0x000032b7u, 0x000032bbu, 0x0003003eu, 0x000032a3u, 0x000032bdu, 0x000500c6u, 0x00000006u, 0x000032bfu, 0x000032bdu, 0x000002f4u, 0x0003003eu, 0x000032a3u, 0x000032bfu, 0x00080041u, 0x00000778u, 0x000032c2u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000032bfu, 0x0004003du, 0x00000011u, 0x000032c3u, 0x000032c2u, 0x00040071u, 0x00000006u, 0x000032c4u, 0x000032c3u, 0x0003003eu, 0x000032a4u, 0x000032c4u, 0x000500c5u, 0x00000006u, 0x000032c7u, 0x000032bfu, 0x00000775u, 0x00080041u, 0x00000778u, 0x000032c8u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000032c7u, 0x0004003du, 0x00000011u, 0x000032c9u, 0x000032c8u, 0x00040071u, 0x00000006u, 0x000032cau, 0x000032c9u, 0x0003003eu, 0x000032a5u, 0x000032cau, 0x000500c2u, 0x00000006u, 0x000032ccu, 0x000032c4u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000032cdu, 0x000032ccu, 0x0004007cu, 0x00000012u, 0x000032ceu, 0x000032cdu, 0x000500c7u, 0x00000006u, 0x000032d0u, 0x000032c4u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000032d1u, 0x000032d0u, 0x0004007cu, 0x00000012u, 0x000032d2u, 0x000032d1u, 0x000500c2u, 0x00000006u, 0x000032d4u, 0x000032cau, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000032d5u, 0x000032d4u, 0x0004007cu, 0x00000012u, 0x000032d6u, 0x000032d5u, 0x000500c7u, 0x00000006u, 0x000032d8u, 0x000032cau, 0x00000657u, 0x00040071u, 0x00000011u, 0x000032d9u, 0x000032d8u, 0x0004007cu, 0x00000012u, 0x000032dau, 0x000032d9u, 0x00070050u, 0x00000013u, 0x000032dbu, 0x000032ceu, 0x000032d2u, 0x000032d6u, 0x000032dau, 0x0003003eu, 0x000032a6u, 0x000032dbu, 0x0003003eu, 0x00002507u, 0x000032dbu, 0x00050050u, 0x00000058u, 0x000027b8u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000027b9u, 0x000027b8u, 0x0003003eu, 0x00005f28u, 0x000024ccu, 0x0003003eu, 0x00005f29u, 0x000024ceu, 0x0003003eu, 0x0000257au, 0x000019c4u, 0x0003003eu, 0x0000257bu, 0x000027b9u, 0x00050041u, 0x00000007u, 0x000032e5u, 0x0000257bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000032e6u, 0x000032e5u, 0x00050084u, 0x00000006u, 0x000032e7u, 0x000024ceu, 0x000032e6u, 0x00050080u, 0x00000006u, 0x000032e8u, 0x000024ccu, 0x000032e7u, 0x0003003eu, 0x000032dcu, 0x000032e8u, 0x00050041u, 0x00000007u, 0x000032e9u, 0x0000257bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000032eau, 0x000032e9u, 0x00050084u, 0x00000006u, 0x000032ebu, 0x000032eau, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000032edu, 0x000032e8u, 0x000032ebu, 0x0003003eu, 0x000032dcu, 0x000032edu, 0x000500c7u, 0x00000006u, 0x000032efu, 0x000032edu, 0x00000744u, 0x0003003eu, 0x000032dcu, 0x000032efu, 0x000500c2u, 0x00000006u, 0x000032f1u, 0x000032efu, 0x000001a6u, 0x0003003eu, 0x000032ddu, 0x000032f1u, 0x0004003du, 0x00000006u, 0x000032f3u, 0x000032e5u, 0x000500c7u, 0x00000006u, 0x000032f4u, 0x000032f3u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000032f5u, 0x000032f4u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000032f7u, 0x000032f1u, 0x000032f5u, 0x0003003eu, 0x000032ddu, 0x000032f7u, 0x000500c6u, 0x00000006u, 0x000032f9u, 0x000032f7u, 0x000002f4u, 0x0003003eu, 0x000032ddu, 0x000032f9u, 0x00080041u, 0x00000778u, 0x000032fcu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000032f9u, 0x0004003du, 0x00000011u, 0x000032fdu, 0x000032fcu, 0x00040071u, 0x00000006u, 0x000032feu, 0x000032fdu, 0x0003003eu, 0x000032deu, 0x000032feu, 0x000500c5u, 0x00000006u, 0x00003301u, 0x000032f9u, 0x00000775u, 0x00080041u, 0x00000778u, 0x00003302u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003301u, 0x0004003du, 0x00000011u, 0x00003303u, 0x00003302u, 0x00040071u, 0x00000006u, 0x00003304u, 0x00003303u, 0x0003003eu, 0x000032dfu, 0x00003304u, 0x000500c2u, 0x00000006u, 0x00003306u, 0x000032feu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003307u, 0x00003306u, 0x0004007cu, 0x00000012u, 0x00003308u, 0x00003307u, 0x000500c7u, 0x00000006u, 0x0000330au, 0x000032feu, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000330bu, 0x0000330au, 0x0004007cu, 0x00000012u, 0x0000330cu, 0x0000330bu, 0x000500c2u, 0x00000006u, 0x0000330eu, 0x00003304u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000330fu, 0x0000330eu, 0x0004007cu, 0x00000012u, 0x00003310u, 0x0000330fu, 0x000500c7u, 0x00000006u, 0x00003312u, 0x00003304u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003313u, 0x00003312u, 0x0004007cu, 0x00000012u, 0x00003314u, 0x00003313u, 0x00070050u, 0x00000013u, 0x00003315u, 0x00003308u, 0x0000330cu, 0x00003310u, 0x00003314u, 0x0003003eu, 0x000032e0u, 0x00003315u, 0x0003003eu, 0x0000250fu, 0x00003315u, 0x000200f9u, 0x000027adu, 0x000200f8u, 0x000027adu, 0x000700f5u, 0x00000013u, 0x0000783cu, 0x00007705u, 0x00002746u, 0x00003315u, 0x000027aeu, 0x000700f5u, 0x00000013u, 0x0000774au, 0x00007705u, 0x00002746u, 0x000032dbu, 0x000027aeu, 0x000300f7u, 0x000027beu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000027bfu, 0x000027beu, 0x000200f8u, 0x000027bfu, 0x00050050u, 0x00000058u, 0x000027c2u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000027c3u, 0x000027c2u, 0x0003003eu, 0x00005f2cu, 0x000024ccu, 0x0003003eu, 0x00005f2du, 0x000024ceu, 0x0003003eu, 0x0000257du, 0x000019c4u, 0x0003003eu, 0x0000257eu, 0x000027c3u, 0x00050041u, 0x00000007u, 0x0000331fu, 0x0000257eu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003320u, 0x0000331fu, 0x00050084u, 0x00000006u, 0x00003321u, 0x000024ceu, 0x00003320u, 0x00050080u, 0x00000006u, 0x00003322u, 0x000024ccu, 0x00003321u, 0x0003003eu, 0x00003316u, 0x00003322u, 0x00050041u, 0x00000007u, 0x00003323u, 0x0000257eu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003324u, 0x00003323u, 0x00050084u, 0x00000006u, 0x00003325u, 0x00003324u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003327u, 0x00003322u, 0x00003325u, 0x0003003eu, 0x00003316u, 0x00003327u, 0x000500c7u, 0x00000006u, 0x00003329u, 0x00003327u, 0x00000744u, 0x0003003eu, 0x00003316u, 0x00003329u, 0x000500c2u, 0x00000006u, 0x0000332bu, 0x00003329u, 0x000001a6u, 0x0003003eu, 0x00003317u, 0x0000332bu, 0x0004003du, 0x00000006u, 0x0000332du, 0x0000331fu, 0x000500c7u, 0x00000006u, 0x0000332eu, 0x0000332du, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000332fu, 0x0000332eu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003331u, 0x0000332bu, 0x0000332fu, 0x0003003eu, 0x00003317u, 0x00003331u, 0x000500c6u, 0x00000006u, 0x00003333u, 0x00003331u, 0x000002f4u, 0x0003003eu, 0x00003317u, 0x00003333u, 0x00080041u, 0x00000778u, 0x00003336u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003333u, 0x0004003du, 0x00000011u, 0x00003337u, 0x00003336u, 0x00040071u, 0x00000006u, 0x00003338u, 0x00003337u, 0x0003003eu, 0x00003318u, 0x00003338u, 0x000500c5u, 0x00000006u, 0x0000333bu, 0x00003333u, 0x00000775u, 0x00080041u, 0x00000778u, 0x0000333cu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000333bu, 0x0004003du, 0x00000011u, 0x0000333du, 0x0000333cu, 0x00040071u, 0x00000006u, 0x0000333eu, 0x0000333du, 0x0003003eu, 0x00003319u, 0x0000333eu, 0x000500c2u, 0x00000006u, 0x00003340u, 0x00003338u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003341u, 0x00003340u, 0x0004007cu, 0x00000012u, 0x00003342u, 0x00003341u, 0x000500c7u, 0x00000006u, 0x00003344u, 0x00003338u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00003345u, 0x00003344u, 0x0004007cu, 0x00000012u, 0x00003346u, 0x00003345u, 0x000500c2u, 0x00000006u, 0x00003348u, 0x0000333eu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00003349u, 0x00003348u, 0x0004007cu, 0x00000012u, 0x0000334au, 0x00003349u, 0x000500c7u, 0x00000006u, 0x0000334cu, 0x0000333eu, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000334du, 0x0000334cu, 0x0004007cu, 0x00000012u, 0x0000334eu, 0x0000334du, 0x00070050u, 0x00000013u, 0x0000334fu, 0x00003342u, 0x00003346u, 0x0000334au, 0x0000334eu, 0x0003003eu, 0x0000331au, 0x0000334fu, 0x0003003eu, 0x00002517u, 0x0000334fu, 0x000200f9u, 0x000027beu, 0x000200f8u, 0x000027beu, 0x000700f5u, 0x00000013u, 0x000078b5u, 0x00007705u, 0x000027adu, 0x0000334fu, 0x000027bfu, 0x000200f9u, 0x00002742u, 0x000200f8u, 0x00002745u, 0x0004007cu, 0x000000abu, 0x00002788u, 0x00007379u, 0x0003003eu, 0x00005f10u, 0x000024ccu, 0x0003003eu, 0x00005f11u, 0x000024ceu, 0x0003003eu, 0x00002568u, 0x000019c4u, 0x0003003eu, 0x00002569u, 0x00002788u, 0x00050041u, 0x00000007u, 0x0000316du, 0x00002569u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000316eu, 0x0000316du, 0x00050084u, 0x00000006u, 0x0000316fu, 0x000024ceu, 0x0000316eu, 0x00050080u, 0x00000006u, 0x00003170u, 0x000024ccu, 0x0000316fu, 0x0003003eu, 0x00003164u, 0x00003170u, 0x00050041u, 0x00000007u, 0x00003171u, 0x00002569u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003172u, 0x00003171u, 0x00050084u, 0x00000006u, 0x00003173u, 0x00003172u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003175u, 0x00003170u, 0x00003173u, 0x0003003eu, 0x00003164u, 0x00003175u, 0x000500c7u, 0x00000006u, 0x00003177u, 0x00003175u, 0x0000068au, 0x0003003eu, 0x00003164u, 0x00003177u, 0x000500c2u, 0x00000006u, 0x00003179u, 0x00003177u, 0x000001a6u, 0x0003003eu, 0x00003165u, 0x00003179u, 0x0004003du, 0x00000006u, 0x0000317bu, 0x0000316du, 0x000500c7u, 0x00000006u, 0x0000317cu, 0x0000317bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000317du, 0x0000317cu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000317fu, 0x00003179u, 0x0000317du, 0x0003003eu, 0x00003165u, 0x0000317fu, 0x000500c6u, 0x00000006u, 0x00003181u, 0x0000317fu, 0x000002f4u, 0x0003003eu, 0x00003165u, 0x00003181u, 0x00080041u, 0x00000778u, 0x00003184u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003181u, 0x0004003du, 0x00000011u, 0x00003185u, 0x00003184u, 0x00040071u, 0x00000006u, 0x00003186u, 0x00003185u, 0x0003003eu, 0x00003166u, 0x00003186u, 0x0003003eu, 0x00003167u, 0x00003186u, 0x00060050u, 0x0000026du, 0x0000318du, 0x00003186u, 0x00003186u, 0x00003186u, 0x000500c2u, 0x0000026du, 0x0000318eu, 0x0000318du, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00003190u, 0x0000318eu, 0x0000b61fu, 0x0003003eu, 0x00003189u, 0x00003190u, 0x000500c4u, 0x0000026du, 0x00003193u, 0x00003190u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00003196u, 0x00003190u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00003197u, 0x00003193u, 0x00003196u, 0x0003003eu, 0x00003189u, 0x00003197u, 0x000500c7u, 0x00000006u, 0x00003199u, 0x00003186u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000319au, 0x00003199u, 0x00000657u, 0x0003003eu, 0x0000318au, 0x0000319au, 0x00040071u, 0x0000065bu, 0x0000319cu, 0x00003197u, 0x0004007cu, 0x0000065au, 0x0000319du, 0x0000319cu, 0x00040071u, 0x00000011u, 0x0000319fu, 0x0000319au, 0x0004007cu, 0x00000012u, 0x000031a0u, 0x0000319fu, 0x00050051u, 0x00000012u, 0x000031a1u, 0x0000319du, 0x00000000u, 0x00050051u, 0x00000012u, 0x000031a2u, 0x0000319du, 0x00000001u, 0x00050051u, 0x00000012u, 0x000031a3u, 0x0000319du, 0x00000002u, 0x00070050u, 0x00000013u, 0x000031a4u, 0x000031a1u, 0x000031a2u, 0x000031a3u, 0x000031a0u, 0x0003003eu, 0x0000318bu, 0x000031a4u, 0x0003003eu, 0x00003168u, 0x000031a4u, 0x0003003eu, 0x000024ffu, 0x000031a4u, 0x000300f7u, 0x0000278du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000278eu, 0x0000278du, 0x000200f8u, 0x0000278eu, 0x00050050u, 0x00000058u, 0x00002791u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002792u, 0x00002791u, 0x0003003eu, 0x00005f14u, 0x000024ccu, 0x0003003eu, 0x00005f15u, 0x000024ceu, 0x0003003eu, 0x0000256bu, 0x000019c4u, 0x0003003eu, 0x0000256cu, 0x00002792u, 0x00050041u, 0x00000007u, 0x000031aeu, 0x0000256cu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000031afu, 0x000031aeu, 0x00050084u, 0x00000006u, 0x000031b0u, 0x000024ceu, 0x000031afu, 0x00050080u, 0x00000006u, 0x000031b1u, 0x000024ccu, 0x000031b0u, 0x0003003eu, 0x000031a5u, 0x000031b1u, 0x00050041u, 0x00000007u, 0x000031b2u, 0x0000256cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000031b3u, 0x000031b2u, 0x00050084u, 0x00000006u, 0x000031b4u, 0x000031b3u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000031b6u, 0x000031b1u, 0x000031b4u, 0x0003003eu, 0x000031a5u, 0x000031b6u, 0x000500c7u, 0x00000006u, 0x000031b8u, 0x000031b6u, 0x0000068au, 0x0003003eu, 0x000031a5u, 0x000031b8u, 0x000500c2u, 0x00000006u, 0x000031bau, 0x000031b8u, 0x000001a6u, 0x0003003eu, 0x000031a6u, 0x000031bau, 0x0004003du, 0x00000006u, 0x000031bcu, 0x000031aeu, 0x000500c7u, 0x00000006u, 0x000031bdu, 0x000031bcu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000031beu, 0x000031bdu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000031c0u, 0x000031bau, 0x000031beu, 0x0003003eu, 0x000031a6u, 0x000031c0u, 0x000500c6u, 0x00000006u, 0x000031c2u, 0x000031c0u, 0x000002f4u, 0x0003003eu, 0x000031a6u, 0x000031c2u, 0x00080041u, 0x00000778u, 0x000031c5u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000031c2u, 0x0004003du, 0x00000011u, 0x000031c6u, 0x000031c5u, 0x00040071u, 0x00000006u, 0x000031c7u, 0x000031c6u, 0x0003003eu, 0x000031a7u, 0x000031c7u, 0x0003003eu, 0x000031a8u, 0x000031c7u, 0x00060050u, 0x0000026du, 0x000031ceu, 0x000031c7u, 0x000031c7u, 0x000031c7u, 0x000500c2u, 0x0000026du, 0x000031cfu, 0x000031ceu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x000031d1u, 0x000031cfu, 0x0000b61fu, 0x0003003eu, 0x000031cau, 0x000031d1u, 0x000500c4u, 0x0000026du, 0x000031d4u, 0x000031d1u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x000031d7u, 0x000031d1u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x000031d8u, 0x000031d4u, 0x000031d7u, 0x0003003eu, 0x000031cau, 0x000031d8u, 0x000500c7u, 0x00000006u, 0x000031dau, 0x000031c7u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000031dbu, 0x000031dau, 0x00000657u, 0x0003003eu, 0x000031cbu, 0x000031dbu, 0x00040071u, 0x0000065bu, 0x000031ddu, 0x000031d8u, 0x0004007cu, 0x0000065au, 0x000031deu, 0x000031ddu, 0x00040071u, 0x00000011u, 0x000031e0u, 0x000031dbu, 0x0004007cu, 0x00000012u, 0x000031e1u, 0x000031e0u, 0x00050051u, 0x00000012u, 0x000031e2u, 0x000031deu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000031e3u, 0x000031deu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000031e4u, 0x000031deu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000031e5u, 0x000031e2u, 0x000031e3u, 0x000031e4u, 0x000031e1u, 0x0003003eu, 0x000031ccu, 0x000031e5u, 0x0003003eu, 0x000031a9u, 0x000031e5u, 0x0003003eu, 0x00002507u, 0x000031e5u, 0x00050050u, 0x00000058u, 0x00002798u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002799u, 0x00002798u, 0x0003003eu, 0x00005f18u, 0x000024ccu, 0x0003003eu, 0x00005f19u, 0x000024ceu, 0x0003003eu, 0x0000256eu, 0x000019c4u, 0x0003003eu, 0x0000256fu, 0x00002799u, 0x00050041u, 0x00000007u, 0x000031efu, 0x0000256fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000031f0u, 0x000031efu, 0x00050084u, 0x00000006u, 0x000031f1u, 0x000024ceu, 0x000031f0u, 0x00050080u, 0x00000006u, 0x000031f2u, 0x000024ccu, 0x000031f1u, 0x0003003eu, 0x000031e6u, 0x000031f2u, 0x00050041u, 0x00000007u, 0x000031f3u, 0x0000256fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000031f4u, 0x000031f3u, 0x00050084u, 0x00000006u, 0x000031f5u, 0x000031f4u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000031f7u, 0x000031f2u, 0x000031f5u, 0x0003003eu, 0x000031e6u, 0x000031f7u, 0x000500c7u, 0x00000006u, 0x000031f9u, 0x000031f7u, 0x0000068au, 0x0003003eu, 0x000031e6u, 0x000031f9u, 0x000500c2u, 0x00000006u, 0x000031fbu, 0x000031f9u, 0x000001a6u, 0x0003003eu, 0x000031e7u, 0x000031fbu, 0x0004003du, 0x00000006u, 0x000031fdu, 0x000031efu, 0x000500c7u, 0x00000006u, 0x000031feu, 0x000031fdu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000031ffu, 0x000031feu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003201u, 0x000031fbu, 0x000031ffu, 0x0003003eu, 0x000031e7u, 0x00003201u, 0x000500c6u, 0x00000006u, 0x00003203u, 0x00003201u, 0x000002f4u, 0x0003003eu, 0x000031e7u, 0x00003203u, 0x00080041u, 0x00000778u, 0x00003206u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003203u, 0x0004003du, 0x00000011u, 0x00003207u, 0x00003206u, 0x00040071u, 0x00000006u, 0x00003208u, 0x00003207u, 0x0003003eu, 0x000031e8u, 0x00003208u, 0x0003003eu, 0x000031e9u, 0x00003208u, 0x00060050u, 0x0000026du, 0x0000320fu, 0x00003208u, 0x00003208u, 0x00003208u, 0x000500c2u, 0x0000026du, 0x00003210u, 0x0000320fu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00003212u, 0x00003210u, 0x0000b61fu, 0x0003003eu, 0x0000320bu, 0x00003212u, 0x000500c4u, 0x0000026du, 0x00003215u, 0x00003212u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00003218u, 0x00003212u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00003219u, 0x00003215u, 0x00003218u, 0x0003003eu, 0x0000320bu, 0x00003219u, 0x000500c7u, 0x00000006u, 0x0000321bu, 0x00003208u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000321cu, 0x0000321bu, 0x00000657u, 0x0003003eu, 0x0000320cu, 0x0000321cu, 0x00040071u, 0x0000065bu, 0x0000321eu, 0x00003219u, 0x0004007cu, 0x0000065au, 0x0000321fu, 0x0000321eu, 0x00040071u, 0x00000011u, 0x00003221u, 0x0000321cu, 0x0004007cu, 0x00000012u, 0x00003222u, 0x00003221u, 0x00050051u, 0x00000012u, 0x00003223u, 0x0000321fu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003224u, 0x0000321fu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003225u, 0x0000321fu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003226u, 0x00003223u, 0x00003224u, 0x00003225u, 0x00003222u, 0x0003003eu, 0x0000320du, 0x00003226u, 0x0003003eu, 0x000031eau, 0x00003226u, 0x0003003eu, 0x0000250fu, 0x00003226u, 0x000200f9u, 0x0000278du, 0x000200f8u, 0x0000278du, 0x000700f5u, 0x00000013u, 0x0000783au, 0x00007705u, 0x00002745u, 0x00003226u, 0x0000278eu, 0x000700f5u, 0x00000013u, 0x00007748u, 0x00007705u, 0x00002745u, 0x000031e5u, 0x0000278eu, 0x000300f7u, 0x0000279eu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000279fu, 0x0000279eu, 0x000200f8u, 0x0000279fu, 0x00050050u, 0x00000058u, 0x000027a2u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000027a3u, 0x000027a2u, 0x0003003eu, 0x00005f1cu, 0x000024ccu, 0x0003003eu, 0x00005f1du, 0x000024ceu, 0x0003003eu, 0x00002571u, 0x000019c4u, 0x0003003eu, 0x00002572u, 0x000027a3u, 0x00050041u, 0x00000007u, 0x00003230u, 0x00002572u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003231u, 0x00003230u, 0x00050084u, 0x00000006u, 0x00003232u, 0x000024ceu, 0x00003231u, 0x00050080u, 0x00000006u, 0x00003233u, 0x000024ccu, 0x00003232u, 0x0003003eu, 0x00003227u, 0x00003233u, 0x00050041u, 0x00000007u, 0x00003234u, 0x00002572u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003235u, 0x00003234u, 0x00050084u, 0x00000006u, 0x00003236u, 0x00003235u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00003238u, 0x00003233u, 0x00003236u, 0x0003003eu, 0x00003227u, 0x00003238u, 0x000500c7u, 0x00000006u, 0x0000323au, 0x00003238u, 0x0000068au, 0x0003003eu, 0x00003227u, 0x0000323au, 0x000500c2u, 0x00000006u, 0x0000323cu, 0x0000323au, 0x000001a6u, 0x0003003eu, 0x00003228u, 0x0000323cu, 0x0004003du, 0x00000006u, 0x0000323eu, 0x00003230u, 0x000500c7u, 0x00000006u, 0x0000323fu, 0x0000323eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003240u, 0x0000323fu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00003242u, 0x0000323cu, 0x00003240u, 0x0003003eu, 0x00003228u, 0x00003242u, 0x000500c6u, 0x00000006u, 0x00003244u, 0x00003242u, 0x000002f4u, 0x0003003eu, 0x00003228u, 0x00003244u, 0x00080041u, 0x00000778u, 0x00003247u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003244u, 0x0004003du, 0x00000011u, 0x00003248u, 0x00003247u, 0x00040071u, 0x00000006u, 0x00003249u, 0x00003248u, 0x0003003eu, 0x00003229u, 0x00003249u, 0x0003003eu, 0x0000322au, 0x00003249u, 0x00060050u, 0x0000026du, 0x00003250u, 0x00003249u, 0x00003249u, 0x00003249u, 0x000500c2u, 0x0000026du, 0x00003251u, 0x00003250u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00003253u, 0x00003251u, 0x0000b61fu, 0x0003003eu, 0x0000324cu, 0x00003253u, 0x000500c4u, 0x0000026du, 0x00003256u, 0x00003253u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00003259u, 0x00003253u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x0000325au, 0x00003256u, 0x00003259u, 0x0003003eu, 0x0000324cu, 0x0000325au, 0x000500c7u, 0x00000006u, 0x0000325cu, 0x00003249u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000325du, 0x0000325cu, 0x00000657u, 0x0003003eu, 0x0000324du, 0x0000325du, 0x00040071u, 0x0000065bu, 0x0000325fu, 0x0000325au, 0x0004007cu, 0x0000065au, 0x00003260u, 0x0000325fu, 0x00040071u, 0x00000011u, 0x00003262u, 0x0000325du, 0x0004007cu, 0x00000012u, 0x00003263u, 0x00003262u, 0x00050051u, 0x00000012u, 0x00003264u, 0x00003260u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003265u, 0x00003260u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003266u, 0x00003260u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003267u, 0x00003264u, 0x00003265u, 0x00003266u, 0x00003263u, 0x0003003eu, 0x0000324eu, 0x00003267u, 0x0003003eu, 0x0000322bu, 0x00003267u, 0x0003003eu, 0x00002517u, 0x00003267u, 0x000200f9u, 0x0000279eu, 0x000200f8u, 0x0000279eu, 0x000700f5u, 0x00000013u, 0x000078b3u, 0x00007705u, 0x0000278du, 0x00003267u, 0x0000279fu, 0x000200f9u, 0x00002742u, 0x000200f8u, 0x00002744u, 0x0004007cu, 0x000000abu, 0x00002768u, 0x00007379u, 0x0003003eu, 0x00005f00u, 0x000024ccu, 0x0003003eu, 0x00005f01u, 0x000024ceu, 0x0003003eu, 0x0000255cu, 0x000019c4u, 0x0003003eu, 0x0000255du, 0x00002768u, 0x00050041u, 0x00000007u, 0x000030dcu, 0x0000255du, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000030ddu, 0x000030dcu, 0x00050084u, 0x00000006u, 0x000030deu, 0x000024ceu, 0x000030ddu, 0x00050080u, 0x00000006u, 0x000030dfu, 0x000024ccu, 0x000030deu, 0x0003003eu, 0x000030d4u, 0x000030dfu, 0x00050041u, 0x00000007u, 0x000030e0u, 0x0000255du, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000030e1u, 0x000030e0u, 0x00050080u, 0x00000006u, 0x000030e3u, 0x000030dfu, 0x000030e1u, 0x0003003eu, 0x000030d4u, 0x000030e3u, 0x000500c7u, 0x00000006u, 0x000030e5u, 0x000030e3u, 0x0000068au, 0x0003003eu, 0x000030d4u, 0x000030e5u, 0x0003003eu, 0x000030d5u, 0x000030e5u, 0x0004003du, 0x00000006u, 0x000030e8u, 0x000030dcu, 0x000500c7u, 0x00000006u, 0x000030e9u, 0x000030e8u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000030eau, 0x000030e9u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000030ecu, 0x000030e5u, 0x000030eau, 0x0003003eu, 0x000030d5u, 0x000030ecu, 0x000500c6u, 0x00000006u, 0x000030eeu, 0x000030ecu, 0x000002fbu, 0x0003003eu, 0x000030d5u, 0x000030eeu, 0x00080041u, 0x000006a8u, 0x000030f1u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000030eeu, 0x0004003du, 0x0000000fu, 0x000030f2u, 0x000030f1u, 0x00040071u, 0x00000006u, 0x000030f3u, 0x000030f2u, 0x0003003eu, 0x000030d6u, 0x000030f3u, 0x00040071u, 0x00000011u, 0x000030f5u, 0x000030f3u, 0x0004007cu, 0x00000012u, 0x000030f6u, 0x000030f5u, 0x00070050u, 0x00000013u, 0x000030f7u, 0x000030f6u, 0x000030f6u, 0x000030f6u, 0x000030f6u, 0x0003003eu, 0x000030d7u, 0x000030f7u, 0x0003003eu, 0x000024ffu, 0x000030f7u, 0x000300f7u, 0x0000276du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000276eu, 0x0000276du, 0x000200f8u, 0x0000276eu, 0x00050050u, 0x00000058u, 0x00002771u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002772u, 0x00002771u, 0x0003003eu, 0x00005f04u, 0x000024ccu, 0x0003003eu, 0x00005f05u, 0x000024ceu, 0x0003003eu, 0x0000255fu, 0x000019c4u, 0x0003003eu, 0x00002560u, 0x00002772u, 0x00050041u, 0x00000007u, 0x00003100u, 0x00002560u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003101u, 0x00003100u, 0x00050084u, 0x00000006u, 0x00003102u, 0x000024ceu, 0x00003101u, 0x00050080u, 0x00000006u, 0x00003103u, 0x000024ccu, 0x00003102u, 0x0003003eu, 0x000030f8u, 0x00003103u, 0x00050041u, 0x00000007u, 0x00003104u, 0x00002560u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003105u, 0x00003104u, 0x00050080u, 0x00000006u, 0x00003107u, 0x00003103u, 0x00003105u, 0x0003003eu, 0x000030f8u, 0x00003107u, 0x000500c7u, 0x00000006u, 0x00003109u, 0x00003107u, 0x0000068au, 0x0003003eu, 0x000030f8u, 0x00003109u, 0x0003003eu, 0x000030f9u, 0x00003109u, 0x0004003du, 0x00000006u, 0x0000310cu, 0x00003100u, 0x000500c7u, 0x00000006u, 0x0000310du, 0x0000310cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000310eu, 0x0000310du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003110u, 0x00003109u, 0x0000310eu, 0x0003003eu, 0x000030f9u, 0x00003110u, 0x000500c6u, 0x00000006u, 0x00003112u, 0x00003110u, 0x000002fbu, 0x0003003eu, 0x000030f9u, 0x00003112u, 0x00080041u, 0x000006a8u, 0x00003115u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003112u, 0x0004003du, 0x0000000fu, 0x00003116u, 0x00003115u, 0x00040071u, 0x00000006u, 0x00003117u, 0x00003116u, 0x0003003eu, 0x000030fau, 0x00003117u, 0x00040071u, 0x00000011u, 0x00003119u, 0x00003117u, 0x0004007cu, 0x00000012u, 0x0000311au, 0x00003119u, 0x00070050u, 0x00000013u, 0x0000311bu, 0x0000311au, 0x0000311au, 0x0000311au, 0x0000311au, 0x0003003eu, 0x000030fbu, 0x0000311bu, 0x0003003eu, 0x00002507u, 0x0000311bu, 0x00050050u, 0x00000058u, 0x00002778u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002779u, 0x00002778u, 0x0003003eu, 0x00005f08u, 0x000024ccu, 0x0003003eu, 0x00005f09u, 0x000024ceu, 0x0003003eu, 0x00002562u, 0x000019c4u, 0x0003003eu, 0x00002563u, 0x00002779u, 0x00050041u, 0x00000007u, 0x00003124u, 0x00002563u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003125u, 0x00003124u, 0x00050084u, 0x00000006u, 0x00003126u, 0x000024ceu, 0x00003125u, 0x00050080u, 0x00000006u, 0x00003127u, 0x000024ccu, 0x00003126u, 0x0003003eu, 0x0000311cu, 0x00003127u, 0x00050041u, 0x00000007u, 0x00003128u, 0x00002563u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003129u, 0x00003128u, 0x00050080u, 0x00000006u, 0x0000312bu, 0x00003127u, 0x00003129u, 0x0003003eu, 0x0000311cu, 0x0000312bu, 0x000500c7u, 0x00000006u, 0x0000312du, 0x0000312bu, 0x0000068au, 0x0003003eu, 0x0000311cu, 0x0000312du, 0x0003003eu, 0x0000311du, 0x0000312du, 0x0004003du, 0x00000006u, 0x00003130u, 0x00003124u, 0x000500c7u, 0x00000006u, 0x00003131u, 0x00003130u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003132u, 0x00003131u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003134u, 0x0000312du, 0x00003132u, 0x0003003eu, 0x0000311du, 0x00003134u, 0x000500c6u, 0x00000006u, 0x00003136u, 0x00003134u, 0x000002fbu, 0x0003003eu, 0x0000311du, 0x00003136u, 0x00080041u, 0x000006a8u, 0x00003139u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003136u, 0x0004003du, 0x0000000fu, 0x0000313au, 0x00003139u, 0x00040071u, 0x00000006u, 0x0000313bu, 0x0000313au, 0x0003003eu, 0x0000311eu, 0x0000313bu, 0x00040071u, 0x00000011u, 0x0000313du, 0x0000313bu, 0x0004007cu, 0x00000012u, 0x0000313eu, 0x0000313du, 0x00070050u, 0x00000013u, 0x0000313fu, 0x0000313eu, 0x0000313eu, 0x0000313eu, 0x0000313eu, 0x0003003eu, 0x0000311fu, 0x0000313fu, 0x0003003eu, 0x0000250fu, 0x0000313fu, 0x000200f9u, 0x0000276du, 0x000200f8u, 0x0000276du, 0x000700f5u, 0x00000013u, 0x00007838u, 0x00007705u, 0x00002744u, 0x0000313fu, 0x0000276eu, 0x000700f5u, 0x00000013u, 0x00007746u, 0x00007705u, 0x00002744u, 0x0000311bu, 0x0000276eu, 0x000300f7u, 0x0000277eu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000277fu, 0x0000277eu, 0x000200f8u, 0x0000277fu, 0x00050050u, 0x00000058u, 0x00002782u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002783u, 0x00002782u, 0x0003003eu, 0x00005f0cu, 0x000024ccu, 0x0003003eu, 0x00005f0du, 0x000024ceu, 0x0003003eu, 0x00002565u, 0x000019c4u, 0x0003003eu, 0x00002566u, 0x00002783u, 0x00050041u, 0x00000007u, 0x00003148u, 0x00002566u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003149u, 0x00003148u, 0x00050084u, 0x00000006u, 0x0000314au, 0x000024ceu, 0x00003149u, 0x00050080u, 0x00000006u, 0x0000314bu, 0x000024ccu, 0x0000314au, 0x0003003eu, 0x00003140u, 0x0000314bu, 0x00050041u, 0x00000007u, 0x0000314cu, 0x00002566u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000314du, 0x0000314cu, 0x00050080u, 0x00000006u, 0x0000314fu, 0x0000314bu, 0x0000314du, 0x0003003eu, 0x00003140u, 0x0000314fu, 0x000500c7u, 0x00000006u, 0x00003151u, 0x0000314fu, 0x0000068au, 0x0003003eu, 0x00003140u, 0x00003151u, 0x0003003eu, 0x00003141u, 0x00003151u, 0x0004003du, 0x00000006u, 0x00003154u, 0x00003148u, 0x000500c7u, 0x00000006u, 0x00003155u, 0x00003154u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003156u, 0x00003155u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003158u, 0x00003151u, 0x00003156u, 0x0003003eu, 0x00003141u, 0x00003158u, 0x000500c6u, 0x00000006u, 0x0000315au, 0x00003158u, 0x000002fbu, 0x0003003eu, 0x00003141u, 0x0000315au, 0x00080041u, 0x000006a8u, 0x0000315du, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000315au, 0x0004003du, 0x0000000fu, 0x0000315eu, 0x0000315du, 0x00040071u, 0x00000006u, 0x0000315fu, 0x0000315eu, 0x0003003eu, 0x00003142u, 0x0000315fu, 0x00040071u, 0x00000011u, 0x00003161u, 0x0000315fu, 0x0004007cu, 0x00000012u, 0x00003162u, 0x00003161u, 0x00070050u, 0x00000013u, 0x00003163u, 0x00003162u, 0x00003162u, 0x00003162u, 0x00003162u, 0x0003003eu, 0x00003143u, 0x00003163u, 0x0003003eu, 0x00002517u, 0x00003163u, 0x000200f9u, 0x0000277eu, 0x000200f8u, 0x0000277eu, 0x000700f5u, 0x00000013u, 0x000078b1u, 0x00007705u, 0x0000276du, 0x00003163u, 0x0000277fu, 0x000200f9u, 0x00002742u, 0x000200f8u, 0x00002743u, 0x0004007cu, 0x000000abu, 0x00002748u, 0x00007379u, 0x0003003eu, 0x00005ef0u, 0x000024ccu, 0x0003003eu, 0x00005ef1u, 0x000024ceu, 0x0003003eu, 0x00002550u, 0x000019c4u, 0x0003003eu, 0x00002551u, 0x00002748u, 0x00050041u, 0x00000007u, 0x00003011u, 0x00002551u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003012u, 0x00003011u, 0x00050084u, 0x00000006u, 0x00003013u, 0x000024ceu, 0x00003012u, 0x00050080u, 0x00000006u, 0x00003014u, 0x000024ccu, 0x00003013u, 0x0003003eu, 0x00003008u, 0x00003014u, 0x00050041u, 0x00000007u, 0x00003015u, 0x00002551u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003016u, 0x00003015u, 0x000500c2u, 0x00000006u, 0x00003017u, 0x00003016u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00003019u, 0x00003014u, 0x00003017u, 0x0003003eu, 0x00003008u, 0x00003019u, 0x000500c7u, 0x00000006u, 0x0000301bu, 0x00003019u, 0x0000068au, 0x0003003eu, 0x00003008u, 0x0000301bu, 0x0004003du, 0x00000006u, 0x0000301du, 0x00003015u, 0x000400c8u, 0x00000006u, 0x0000301eu, 0x0000301du, 0x000500c7u, 0x00000006u, 0x0000301fu, 0x0000301eu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003020u, 0x0000301fu, 0x00000692u, 0x0003003eu, 0x00003009u, 0x00003020u, 0x0003003eu, 0x0000300au, 0x0000301bu, 0x0004003du, 0x00000006u, 0x00003023u, 0x00003011u, 0x000500c7u, 0x00000006u, 0x00003024u, 0x00003023u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003025u, 0x00003024u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00003027u, 0x0000301bu, 0x00003025u, 0x0003003eu, 0x0000300au, 0x00003027u, 0x000500c6u, 0x00000006u, 0x00003029u, 0x00003027u, 0x000002fbu, 0x0003003eu, 0x0000300au, 0x00003029u, 0x00080041u, 0x000006a8u, 0x0000302cu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00003029u, 0x0004003du, 0x0000000fu, 0x0000302du, 0x0000302cu, 0x00040071u, 0x00000006u, 0x0000302eu, 0x0000302du, 0x0003003eu, 0x0000300bu, 0x0000302eu, 0x000500c2u, 0x00000006u, 0x00003031u, 0x0000302eu, 0x00003020u, 0x000500c7u, 0x00000006u, 0x00003032u, 0x00003031u, 0x000006afu, 0x0003003eu, 0x0000300bu, 0x00003032u, 0x000500c4u, 0x00000006u, 0x00003034u, 0x00003032u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003036u, 0x00003032u, 0x00003034u, 0x0003003eu, 0x0000300bu, 0x00003036u, 0x00040071u, 0x00000011u, 0x00003038u, 0x00003036u, 0x0004007cu, 0x00000012u, 0x00003039u, 0x00003038u, 0x00070050u, 0x00000013u, 0x0000303au, 0x00003039u, 0x00003039u, 0x00003039u, 0x00003039u, 0x0003003eu, 0x0000300cu, 0x0000303au, 0x0003003eu, 0x000024ffu, 0x0000303au, 0x000300f7u, 0x0000274du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000274eu, 0x0000274du, 0x000200f8u, 0x0000274eu, 0x00050050u, 0x00000058u, 0x00002751u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002752u, 0x00002751u, 0x0003003eu, 0x00005ef4u, 0x000024ccu, 0x0003003eu, 0x00005ef5u, 0x000024ceu, 0x0003003eu, 0x00002553u, 0x000019c4u, 0x0003003eu, 0x00002554u, 0x00002752u, 0x00050041u, 0x00000007u, 0x00003044u, 0x00002554u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003045u, 0x00003044u, 0x00050084u, 0x00000006u, 0x00003046u, 0x000024ceu, 0x00003045u, 0x00050080u, 0x00000006u, 0x00003047u, 0x000024ccu, 0x00003046u, 0x0003003eu, 0x0000303bu, 0x00003047u, 0x00050041u, 0x00000007u, 0x00003048u, 0x00002554u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00003049u, 0x00003048u, 0x000500c2u, 0x00000006u, 0x0000304au, 0x00003049u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x0000304cu, 0x00003047u, 0x0000304au, 0x0003003eu, 0x0000303bu, 0x0000304cu, 0x000500c7u, 0x00000006u, 0x0000304eu, 0x0000304cu, 0x0000068au, 0x0003003eu, 0x0000303bu, 0x0000304eu, 0x0004003du, 0x00000006u, 0x00003050u, 0x00003048u, 0x000400c8u, 0x00000006u, 0x00003051u, 0x00003050u, 0x000500c7u, 0x00000006u, 0x00003052u, 0x00003051u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003053u, 0x00003052u, 0x00000692u, 0x0003003eu, 0x0000303cu, 0x00003053u, 0x0003003eu, 0x0000303du, 0x0000304eu, 0x0004003du, 0x00000006u, 0x00003056u, 0x00003044u, 0x000500c7u, 0x00000006u, 0x00003057u, 0x00003056u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00003058u, 0x00003057u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000305au, 0x0000304eu, 0x00003058u, 0x0003003eu, 0x0000303du, 0x0000305au, 0x000500c6u, 0x00000006u, 0x0000305cu, 0x0000305au, 0x000002fbu, 0x0003003eu, 0x0000303du, 0x0000305cu, 0x00080041u, 0x000006a8u, 0x0000305fu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000305cu, 0x0004003du, 0x0000000fu, 0x00003060u, 0x0000305fu, 0x00040071u, 0x00000006u, 0x00003061u, 0x00003060u, 0x0003003eu, 0x0000303eu, 0x00003061u, 0x000500c2u, 0x00000006u, 0x00003064u, 0x00003061u, 0x00003053u, 0x000500c7u, 0x00000006u, 0x00003065u, 0x00003064u, 0x000006afu, 0x0003003eu, 0x0000303eu, 0x00003065u, 0x000500c4u, 0x00000006u, 0x00003067u, 0x00003065u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00003069u, 0x00003065u, 0x00003067u, 0x0003003eu, 0x0000303eu, 0x00003069u, 0x00040071u, 0x00000011u, 0x0000306bu, 0x00003069u, 0x0004007cu, 0x00000012u, 0x0000306cu, 0x0000306bu, 0x00070050u, 0x00000013u, 0x0000306du, 0x0000306cu, 0x0000306cu, 0x0000306cu, 0x0000306cu, 0x0003003eu, 0x0000303fu, 0x0000306du, 0x0003003eu, 0x00002507u, 0x0000306du, 0x00050050u, 0x00000058u, 0x00002758u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002759u, 0x00002758u, 0x0003003eu, 0x00005ef8u, 0x000024ccu, 0x0003003eu, 0x00005ef9u, 0x000024ceu, 0x0003003eu, 0x00002556u, 0x000019c4u, 0x0003003eu, 0x00002557u, 0x00002759u, 0x00050041u, 0x00000007u, 0x00003077u, 0x00002557u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00003078u, 0x00003077u, 0x00050084u, 0x00000006u, 0x00003079u, 0x000024ceu, 0x00003078u, 0x00050080u, 0x00000006u, 0x0000307au, 0x000024ccu, 0x00003079u, 0x0003003eu, 0x0000306eu, 0x0000307au, 0x00050041u, 0x00000007u, 0x0000307bu, 0x00002557u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000307cu, 0x0000307bu, 0x000500c2u, 0x00000006u, 0x0000307du, 0x0000307cu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x0000307fu, 0x0000307au, 0x0000307du, 0x0003003eu, 0x0000306eu, 0x0000307fu, 0x000500c7u, 0x00000006u, 0x00003081u, 0x0000307fu, 0x0000068au, 0x0003003eu, 0x0000306eu, 0x00003081u, 0x0004003du, 0x00000006u, 0x00003083u, 0x0000307bu, 0x000400c8u, 0x00000006u, 0x00003084u, 0x00003083u, 0x000500c7u, 0x00000006u, 0x00003085u, 0x00003084u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00003086u, 0x00003085u, 0x00000692u, 0x0003003eu, 0x0000306fu, 0x00003086u, 0x0003003eu, 0x00003070u, 0x00003081u, 0x0004003du, 0x00000006u, 0x00003089u, 0x00003077u, 0x000500c7u, 0x00000006u, 0x0000308au, 0x00003089u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000308bu, 0x0000308au, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000308du, 0x00003081u, 0x0000308bu, 0x0003003eu, 0x00003070u, 0x0000308du, 0x000500c6u, 0x00000006u, 0x0000308fu, 0x0000308du, 0x000002fbu, 0x0003003eu, 0x00003070u, 0x0000308fu, 0x00080041u, 0x000006a8u, 0x00003092u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000308fu, 0x0004003du, 0x0000000fu, 0x00003093u, 0x00003092u, 0x00040071u, 0x00000006u, 0x00003094u, 0x00003093u, 0x0003003eu, 0x00003071u, 0x00003094u, 0x000500c2u, 0x00000006u, 0x00003097u, 0x00003094u, 0x00003086u, 0x000500c7u, 0x00000006u, 0x00003098u, 0x00003097u, 0x000006afu, 0x0003003eu, 0x00003071u, 0x00003098u, 0x000500c4u, 0x00000006u, 0x0000309au, 0x00003098u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x0000309cu, 0x00003098u, 0x0000309au, 0x0003003eu, 0x00003071u, 0x0000309cu, 0x00040071u, 0x00000011u, 0x0000309eu, 0x0000309cu, 0x0004007cu, 0x00000012u, 0x0000309fu, 0x0000309eu, 0x00070050u, 0x00000013u, 0x000030a0u, 0x0000309fu, 0x0000309fu, 0x0000309fu, 0x0000309fu, 0x0003003eu, 0x00003072u, 0x000030a0u, 0x0003003eu, 0x0000250fu, 0x000030a0u, 0x000200f9u, 0x0000274du, 0x000200f8u, 0x0000274du, 0x000700f5u, 0x00000013u, 0x00007836u, 0x00007705u, 0x00002743u, 0x000030a0u, 0x0000274eu, 0x000700f5u, 0x00000013u, 0x00007744u, 0x00007705u, 0x00002743u, 0x0000306du, 0x0000274eu, 0x000300f7u, 0x0000275eu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000275fu, 0x0000275eu, 0x000200f8u, 0x0000275fu, 0x00050050u, 0x00000058u, 0x00002762u, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002763u, 0x00002762u, 0x0003003eu, 0x00005efcu, 0x000024ccu, 0x0003003eu, 0x00005efdu, 0x000024ceu, 0x0003003eu, 0x00002559u, 0x000019c4u, 0x0003003eu, 0x0000255au, 0x00002763u, 0x00050041u, 0x00000007u, 0x000030aau, 0x0000255au, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000030abu, 0x000030aau, 0x00050084u, 0x00000006u, 0x000030acu, 0x000024ceu, 0x000030abu, 0x00050080u, 0x00000006u, 0x000030adu, 0x000024ccu, 0x000030acu, 0x0003003eu, 0x000030a1u, 0x000030adu, 0x00050041u, 0x00000007u, 0x000030aeu, 0x0000255au, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000030afu, 0x000030aeu, 0x000500c2u, 0x00000006u, 0x000030b0u, 0x000030afu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000030b2u, 0x000030adu, 0x000030b0u, 0x0003003eu, 0x000030a1u, 0x000030b2u, 0x000500c7u, 0x00000006u, 0x000030b4u, 0x000030b2u, 0x0000068au, 0x0003003eu, 0x000030a1u, 0x000030b4u, 0x0004003du, 0x00000006u, 0x000030b6u, 0x000030aeu, 0x000400c8u, 0x00000006u, 0x000030b7u, 0x000030b6u, 0x000500c7u, 0x00000006u, 0x000030b8u, 0x000030b7u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000030b9u, 0x000030b8u, 0x00000692u, 0x0003003eu, 0x000030a2u, 0x000030b9u, 0x0003003eu, 0x000030a3u, 0x000030b4u, 0x0004003du, 0x00000006u, 0x000030bcu, 0x000030aau, 0x000500c7u, 0x00000006u, 0x000030bdu, 0x000030bcu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000030beu, 0x000030bdu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000030c0u, 0x000030b4u, 0x000030beu, 0x0003003eu, 0x000030a3u, 0x000030c0u, 0x000500c6u, 0x00000006u, 0x000030c2u, 0x000030c0u, 0x000002fbu, 0x0003003eu, 0x000030a3u, 0x000030c2u, 0x00080041u, 0x000006a8u, 0x000030c5u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000030c2u, 0x0004003du, 0x0000000fu, 0x000030c6u, 0x000030c5u, 0x00040071u, 0x00000006u, 0x000030c7u, 0x000030c6u, 0x0003003eu, 0x000030a4u, 0x000030c7u, 0x000500c2u, 0x00000006u, 0x000030cau, 0x000030c7u, 0x000030b9u, 0x000500c7u, 0x00000006u, 0x000030cbu, 0x000030cau, 0x000006afu, 0x0003003eu, 0x000030a4u, 0x000030cbu, 0x000500c4u, 0x00000006u, 0x000030cdu, 0x000030cbu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000030cfu, 0x000030cbu, 0x000030cdu, 0x0003003eu, 0x000030a4u, 0x000030cfu, 0x00040071u, 0x00000011u, 0x000030d1u, 0x000030cfu, 0x0004007cu, 0x00000012u, 0x000030d2u, 0x000030d1u, 0x00070050u, 0x00000013u, 0x000030d3u, 0x000030d2u, 0x000030d2u, 0x000030d2u, 0x000030d2u, 0x0003003eu, 0x000030a5u, 0x000030d3u, 0x0003003eu, 0x00002517u, 0x000030d3u, 0x000200f9u, 0x0000275eu, 0x000200f8u, 0x0000275eu, 0x000700f5u, 0x00000013u, 0x000078afu, 0x00007705u, 0x0000274du, 0x000030d3u, 0x0000275fu, 0x000200f9u, 0x00002742u, 0x000200f8u, 0x00002742u, 0x000d00f5u, 0x00000013u, 0x000078aeu, 0x00007705u, 0x00002739u, 0x000078afu, 0x0000275eu, 0x000078b1u, 0x0000277eu, 0x000078b3u, 0x0000279eu, 0x000078b5u, 0x000027beu, 0x000d00f5u, 0x00000013u, 0x00007834u, 0x00007705u, 0x00002739u, 0x00007836u, 0x0000275eu, 0x00007838u, 0x0000277eu, 0x0000783au, 0x0000279eu, 0x0000783cu, 0x000027beu, 0x000d00f5u, 0x00000013u, 0x000077bcu, 0x00007705u, 0x00002739u, 0x0000303au, 0x0000275eu, 0x000030f7u, 0x0000277eu, 0x000031a4u, 0x0000279eu, 0x000032a1u, 0x000027beu, 0x000d00f5u, 0x00000013u, 0x00007742u, 0x00007705u, 0x00002739u, 0x00007744u, 0x0000275eu, 0x00007746u, 0x0000277eu, 0x00007748u, 0x0000279eu, 0x0000774au, 0x000027beu, 0x000200f9u, 0x00002738u, 0x000200f8u, 0x00002738u, 0x000f00f5u, 0x00000013u, 0x000078adu, 0x00007705u, 0x00002693u, 0x000078aeu, 0x00002742u, 0x000078b7u, 0x000027dau, 0x000078b8u, 0x000027f8u, 0x000078bfu, 0x0000286cu, 0x000078c8u, 0x000028f5u, 0x000f00f5u, 0x00000013u, 0x00007833u, 0x00007705u, 0x00002693u, 0x00007834u, 0x00002742u, 0x0000783du, 0x000027dau, 0x0000783eu, 0x000027f8u, 0x00007845u, 0x0000286cu, 0x0000784eu, 0x000028f5u, 0x000f00f5u, 0x00000013u, 0x000077bbu, 0x00007705u, 0x00002693u, 0x000077bcu, 0x00002742u, 0x000033a0u, 0x000027dau, 0x000077c6u, 0x000027f8u, 0x000077cdu, 0x0000286cu, 0x000077d6u, 0x000028f5u, 0x000f00f5u, 0x00000013u, 0x00007741u, 0x00007705u, 0x00002693u, 0x00007742u, 0x00002742u, 0x0000774bu, 0x000027dau, 0x0000774cu, 0x000027f8u, 0x00007753u, 0x0000286cu, 0x0000775cu, 0x000028f5u, 0x000200f9u, 0x00002691u, 0x000200f8u, 0x00002692u, 0x000300f7u, 0x00002698u, 0x00000000u, 0x000b00fbu, 0x00002682u, 0x00002698u, 0x00000000u, 0x00002699u, 0x00000002u, 0x00002699u, 0x00000003u, 0x00002699u, 0x00000004u, 0x00002699u, 0x000200f8u, 0x00002699u, 0x0003003eu, 0x000024fdu, 0x00002685u, 0x000600a9u, 0x00000008u, 0x0000269du, 0x00002685u, 0x000001a9u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x0000269eu, 0x0000269du, 0x0003003eu, 0x000024feu, 0x0000269eu, 0x00040071u, 0x00000006u, 0x000026a1u, 0x0000b63eu, 0x0004007cu, 0x00000008u, 0x000026a2u, 0x000026a1u, 0x000300f7u, 0x000026a3u, 0x00000000u, 0x000700fbu, 0x000026a2u, 0x000026a4u, 0x00000000u, 0x000026a5u, 0x00000001u, 0x000026a6u, 0x000200f8u, 0x000026a6u, 0x0004007cu, 0x000000abu, 0x0000270au, 0x00007379u, 0x000600a9u, 0x00000008u, 0x0000270cu, 0x00002685u, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x0000270du, 0x0000270cu, 0x0003003eu, 0x00005ed0u, 0x000024ccu, 0x0003003eu, 0x00005ed1u, 0x000024ceu, 0x0003003eu, 0x00002520u, 0x000019c4u, 0x0003003eu, 0x00002521u, 0x0000270au, 0x0003003eu, 0x00002522u, 0x0000270du, 0x0003003eu, 0x00002523u, 0x0000269eu, 0x0003003eu, 0x00002524u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002e6cu, 0x00002521u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002e6du, 0x00002e6cu, 0x00050084u, 0x00000006u, 0x00002e6eu, 0x000024ceu, 0x00002e6du, 0x00050080u, 0x00000006u, 0x00002e6fu, 0x000024ccu, 0x00002e6eu, 0x0003003eu, 0x00002e60u, 0x00002e6fu, 0x00050041u, 0x00000007u, 0x00002e70u, 0x00002521u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002e71u, 0x00002e70u, 0x00050080u, 0x00000006u, 0x00002e73u, 0x00002e6fu, 0x00002e71u, 0x0003003eu, 0x00002e60u, 0x00002e73u, 0x000500c7u, 0x00000006u, 0x00002e75u, 0x00002e73u, 0x00000744u, 0x0003003eu, 0x00002e60u, 0x00002e75u, 0x0003003eu, 0x00002e61u, 0x00002e75u, 0x0004003du, 0x00000006u, 0x00002e78u, 0x00002e6cu, 0x000500c7u, 0x00000006u, 0x00002e79u, 0x00002e78u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002e7au, 0x00002e79u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002e7cu, 0x00002e75u, 0x00002e7au, 0x0003003eu, 0x00002e61u, 0x00002e7cu, 0x000500c6u, 0x00000006u, 0x00002e7eu, 0x00002e7cu, 0x000002fbu, 0x0003003eu, 0x00002e61u, 0x00002e7eu, 0x00080041u, 0x000006a8u, 0x00002e81u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002e7eu, 0x0004003du, 0x0000000fu, 0x00002e82u, 0x00002e81u, 0x00040071u, 0x00000006u, 0x00002e83u, 0x00002e82u, 0x0003003eu, 0x00002e62u, 0x00002e83u, 0x000500c4u, 0x00000006u, 0x00002e85u, 0x00002e83u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002e87u, 0x00002e85u, 0x0000270du, 0x0003003eu, 0x00002e63u, 0x00002e87u, 0x000500c6u, 0x00000006u, 0x00002e8au, 0x00002e87u, 0x0000269eu, 0x0003003eu, 0x00002e63u, 0x00002e8au, 0x000500c5u, 0x00000006u, 0x00002e8du, 0x00000775u, 0x00002e8au, 0x00080041u, 0x00000778u, 0x00002e8eu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002e8du, 0x0004003du, 0x00000011u, 0x00002e8fu, 0x00002e8eu, 0x00040071u, 0x00000006u, 0x00002e90u, 0x00002e8fu, 0x0003003eu, 0x00002e62u, 0x00002e90u, 0x000300f7u, 0x00002e92u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002e93u, 0x00002e94u, 0x000200f8u, 0x00002e94u, 0x0003003eu, 0x00002e66u, 0x00002e90u, 0x00060050u, 0x0000026du, 0x00002eb2u, 0x00002e90u, 0x00002e90u, 0x00002e90u, 0x000500c2u, 0x0000026du, 0x00002eb3u, 0x00002eb2u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002eb5u, 0x00002eb3u, 0x0000b61fu, 0x0003003eu, 0x00002eaeu, 0x00002eb5u, 0x000500c4u, 0x0000026du, 0x00002eb8u, 0x00002eb5u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002ebbu, 0x00002eb5u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002ebcu, 0x00002eb8u, 0x00002ebbu, 0x0003003eu, 0x00002eaeu, 0x00002ebcu, 0x000500c7u, 0x00000006u, 0x00002ebeu, 0x00002e90u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002ebfu, 0x00002ebeu, 0x00000657u, 0x0003003eu, 0x00002eafu, 0x00002ebfu, 0x00040071u, 0x0000065bu, 0x00002ec1u, 0x00002ebcu, 0x0004007cu, 0x0000065au, 0x00002ec2u, 0x00002ec1u, 0x00040071u, 0x00000011u, 0x00002ec4u, 0x00002ebfu, 0x0004007cu, 0x00000012u, 0x00002ec5u, 0x00002ec4u, 0x00050051u, 0x00000012u, 0x00002ec6u, 0x00002ec2u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002ec7u, 0x00002ec2u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002ec8u, 0x00002ec2u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002ec9u, 0x00002ec6u, 0x00002ec7u, 0x00002ec8u, 0x00002ec5u, 0x0003003eu, 0x00002eb0u, 0x00002ec9u, 0x0003003eu, 0x00002e64u, 0x00002ec9u, 0x000200f9u, 0x00002e92u, 0x000200f8u, 0x00002e93u, 0x0003003eu, 0x00002e65u, 0x00002e90u, 0x000500c2u, 0x00000006u, 0x00002e9eu, 0x00002e90u, 0x000001d9u, 0x0003003eu, 0x00002e9au, 0x00002e9eu, 0x000500c7u, 0x00000006u, 0x00002ea0u, 0x00002e90u, 0x00000657u, 0x0003003eu, 0x00002e9bu, 0x00002ea0u, 0x00040071u, 0x00000011u, 0x00002ea2u, 0x00002e9eu, 0x0004007cu, 0x00000012u, 0x00002ea3u, 0x00002ea2u, 0x00040071u, 0x00000011u, 0x00002eabu, 0x00002ea0u, 0x0004007cu, 0x00000012u, 0x00002eacu, 0x00002eabu, 0x00070050u, 0x00000013u, 0x00002eadu, 0x00002ea3u, 0x00002ea3u, 0x00002ea3u, 0x00002eacu, 0x0003003eu, 0x00002e9cu, 0x00002eadu, 0x0003003eu, 0x00002e64u, 0x00002eadu, 0x000200f9u, 0x00002e92u, 0x000200f8u, 0x00002e92u, 0x000700f5u, 0x00000013u, 0x00007502u, 0x00002eadu, 0x00002e93u, 0x00002ec9u, 0x00002e94u, 0x0003003eu, 0x00002e67u, 0x00007502u, 0x0003003eu, 0x000024ffu, 0x00007502u, 0x000300f7u, 0x00002714u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00002715u, 0x00002714u, 0x000200f8u, 0x00002715u, 0x00050050u, 0x00000058u, 0x00002718u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x00002719u, 0x00002718u, 0x0003003eu, 0x00005ed4u, 0x000024ccu, 0x0003003eu, 0x00005ed5u, 0x000024ceu, 0x0003003eu, 0x00002526u, 0x000019c4u, 0x0003003eu, 0x00002527u, 0x00002719u, 0x0003003eu, 0x00002528u, 0x000002f4u, 0x0003003eu, 0x00002529u, 0x0000269eu, 0x0003003eu, 0x0000252au, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002ed6u, 0x00002527u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002ed7u, 0x00002ed6u, 0x00050084u, 0x00000006u, 0x00002ed8u, 0x000024ceu, 0x00002ed7u, 0x00050080u, 0x00000006u, 0x00002ed9u, 0x000024ccu, 0x00002ed8u, 0x0003003eu, 0x00002ecau, 0x00002ed9u, 0x00050041u, 0x00000007u, 0x00002edau, 0x00002527u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002edbu, 0x00002edau, 0x00050080u, 0x00000006u, 0x00002eddu, 0x00002ed9u, 0x00002edbu, 0x0003003eu, 0x00002ecau, 0x00002eddu, 0x000500c7u, 0x00000006u, 0x00002edfu, 0x00002eddu, 0x00000744u, 0x0003003eu, 0x00002ecau, 0x00002edfu, 0x0003003eu, 0x00002ecbu, 0x00002edfu, 0x0004003du, 0x00000006u, 0x00002ee2u, 0x00002ed6u, 0x000500c7u, 0x00000006u, 0x00002ee3u, 0x00002ee2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002ee4u, 0x00002ee3u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002ee6u, 0x00002edfu, 0x00002ee4u, 0x0003003eu, 0x00002ecbu, 0x00002ee6u, 0x000500c6u, 0x00000006u, 0x00002ee8u, 0x00002ee6u, 0x000002fbu, 0x0003003eu, 0x00002ecbu, 0x00002ee8u, 0x00080041u, 0x000006a8u, 0x00002eebu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002ee8u, 0x0004003du, 0x0000000fu, 0x00002eecu, 0x00002eebu, 0x00040071u, 0x00000006u, 0x00002eedu, 0x00002eecu, 0x0003003eu, 0x00002eccu, 0x00002eedu, 0x000500c4u, 0x00000006u, 0x00002eefu, 0x00002eedu, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002ef1u, 0x00002eefu, 0x000002f4u, 0x0003003eu, 0x00002ecdu, 0x00002ef1u, 0x000500c6u, 0x00000006u, 0x00002ef4u, 0x00002ef1u, 0x0000269eu, 0x0003003eu, 0x00002ecdu, 0x00002ef4u, 0x000500c5u, 0x00000006u, 0x00002ef7u, 0x00000775u, 0x00002ef4u, 0x00080041u, 0x00000778u, 0x00002ef8u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002ef7u, 0x0004003du, 0x00000011u, 0x00002ef9u, 0x00002ef8u, 0x00040071u, 0x00000006u, 0x00002efau, 0x00002ef9u, 0x0003003eu, 0x00002eccu, 0x00002efau, 0x000300f7u, 0x00002efcu, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002efdu, 0x00002efeu, 0x000200f8u, 0x00002efeu, 0x0003003eu, 0x00002ed0u, 0x00002efau, 0x00060050u, 0x0000026du, 0x00002f1cu, 0x00002efau, 0x00002efau, 0x00002efau, 0x000500c2u, 0x0000026du, 0x00002f1du, 0x00002f1cu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002f1fu, 0x00002f1du, 0x0000b61fu, 0x0003003eu, 0x00002f18u, 0x00002f1fu, 0x000500c4u, 0x0000026du, 0x00002f22u, 0x00002f1fu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002f25u, 0x00002f1fu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002f26u, 0x00002f22u, 0x00002f25u, 0x0003003eu, 0x00002f18u, 0x00002f26u, 0x000500c7u, 0x00000006u, 0x00002f28u, 0x00002efau, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002f29u, 0x00002f28u, 0x00000657u, 0x0003003eu, 0x00002f19u, 0x00002f29u, 0x00040071u, 0x0000065bu, 0x00002f2bu, 0x00002f26u, 0x0004007cu, 0x0000065au, 0x00002f2cu, 0x00002f2bu, 0x00040071u, 0x00000011u, 0x00002f2eu, 0x00002f29u, 0x0004007cu, 0x00000012u, 0x00002f2fu, 0x00002f2eu, 0x00050051u, 0x00000012u, 0x00002f30u, 0x00002f2cu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002f31u, 0x00002f2cu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002f32u, 0x00002f2cu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002f33u, 0x00002f30u, 0x00002f31u, 0x00002f32u, 0x00002f2fu, 0x0003003eu, 0x00002f1au, 0x00002f33u, 0x0003003eu, 0x00002eceu, 0x00002f33u, 0x000200f9u, 0x00002efcu, 0x000200f8u, 0x00002efdu, 0x0003003eu, 0x00002ecfu, 0x00002efau, 0x000500c2u, 0x00000006u, 0x00002f08u, 0x00002efau, 0x000001d9u, 0x0003003eu, 0x00002f04u, 0x00002f08u, 0x000500c7u, 0x00000006u, 0x00002f0au, 0x00002efau, 0x00000657u, 0x0003003eu, 0x00002f05u, 0x00002f0au, 0x00040071u, 0x00000011u, 0x00002f0cu, 0x00002f08u, 0x0004007cu, 0x00000012u, 0x00002f0du, 0x00002f0cu, 0x00040071u, 0x00000011u, 0x00002f15u, 0x00002f0au, 0x0004007cu, 0x00000012u, 0x00002f16u, 0x00002f15u, 0x00070050u, 0x00000013u, 0x00002f17u, 0x00002f0du, 0x00002f0du, 0x00002f0du, 0x00002f16u, 0x0003003eu, 0x00002f06u, 0x00002f17u, 0x0003003eu, 0x00002eceu, 0x00002f17u, 0x000200f9u, 0x00002efcu, 0x000200f8u, 0x00002efcu, 0x000700f5u, 0x00000013u, 0x0000751au, 0x00002f17u, 0x00002efdu, 0x00002f33u, 0x00002efeu, 0x0003003eu, 0x00002ed1u, 0x0000751au, 0x0003003eu, 0x00002507u, 0x0000751au, 0x00050050u, 0x00000058u, 0x00002721u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002722u, 0x00002721u, 0x0003003eu, 0x00005ed8u, 0x000024ccu, 0x0003003eu, 0x00005ed9u, 0x000024ceu, 0x0003003eu, 0x0000252cu, 0x000019c4u, 0x0003003eu, 0x0000252du, 0x00002722u, 0x0003003eu, 0x0000252eu, 0x000002f8u, 0x0003003eu, 0x0000252fu, 0x0000269eu, 0x0003003eu, 0x00002530u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002f40u, 0x0000252du, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002f41u, 0x00002f40u, 0x00050084u, 0x00000006u, 0x00002f42u, 0x000024ceu, 0x00002f41u, 0x00050080u, 0x00000006u, 0x00002f43u, 0x000024ccu, 0x00002f42u, 0x0003003eu, 0x00002f34u, 0x00002f43u, 0x00050041u, 0x00000007u, 0x00002f44u, 0x0000252du, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002f45u, 0x00002f44u, 0x00050080u, 0x00000006u, 0x00002f47u, 0x00002f43u, 0x00002f45u, 0x0003003eu, 0x00002f34u, 0x00002f47u, 0x000500c7u, 0x00000006u, 0x00002f49u, 0x00002f47u, 0x00000744u, 0x0003003eu, 0x00002f34u, 0x00002f49u, 0x0003003eu, 0x00002f35u, 0x00002f49u, 0x0004003du, 0x00000006u, 0x00002f4cu, 0x00002f40u, 0x000500c7u, 0x00000006u, 0x00002f4du, 0x00002f4cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002f4eu, 0x00002f4du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002f50u, 0x00002f49u, 0x00002f4eu, 0x0003003eu, 0x00002f35u, 0x00002f50u, 0x000500c6u, 0x00000006u, 0x00002f52u, 0x00002f50u, 0x000002fbu, 0x0003003eu, 0x00002f35u, 0x00002f52u, 0x00080041u, 0x000006a8u, 0x00002f55u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002f52u, 0x0004003du, 0x0000000fu, 0x00002f56u, 0x00002f55u, 0x00040071u, 0x00000006u, 0x00002f57u, 0x00002f56u, 0x0003003eu, 0x00002f36u, 0x00002f57u, 0x000500c4u, 0x00000006u, 0x00002f59u, 0x00002f57u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002f5bu, 0x00002f59u, 0x000002f8u, 0x0003003eu, 0x00002f37u, 0x00002f5bu, 0x000500c6u, 0x00000006u, 0x00002f5eu, 0x00002f5bu, 0x0000269eu, 0x0003003eu, 0x00002f37u, 0x00002f5eu, 0x000500c5u, 0x00000006u, 0x00002f61u, 0x00000775u, 0x00002f5eu, 0x00080041u, 0x00000778u, 0x00002f62u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002f61u, 0x0004003du, 0x00000011u, 0x00002f63u, 0x00002f62u, 0x00040071u, 0x00000006u, 0x00002f64u, 0x00002f63u, 0x0003003eu, 0x00002f36u, 0x00002f64u, 0x000300f7u, 0x00002f66u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002f67u, 0x00002f68u, 0x000200f8u, 0x00002f68u, 0x0003003eu, 0x00002f3au, 0x00002f64u, 0x00060050u, 0x0000026du, 0x00002f86u, 0x00002f64u, 0x00002f64u, 0x00002f64u, 0x000500c2u, 0x0000026du, 0x00002f87u, 0x00002f86u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002f89u, 0x00002f87u, 0x0000b61fu, 0x0003003eu, 0x00002f82u, 0x00002f89u, 0x000500c4u, 0x0000026du, 0x00002f8cu, 0x00002f89u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002f8fu, 0x00002f89u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002f90u, 0x00002f8cu, 0x00002f8fu, 0x0003003eu, 0x00002f82u, 0x00002f90u, 0x000500c7u, 0x00000006u, 0x00002f92u, 0x00002f64u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002f93u, 0x00002f92u, 0x00000657u, 0x0003003eu, 0x00002f83u, 0x00002f93u, 0x00040071u, 0x0000065bu, 0x00002f95u, 0x00002f90u, 0x0004007cu, 0x0000065au, 0x00002f96u, 0x00002f95u, 0x00040071u, 0x00000011u, 0x00002f98u, 0x00002f93u, 0x0004007cu, 0x00000012u, 0x00002f99u, 0x00002f98u, 0x00050051u, 0x00000012u, 0x00002f9au, 0x00002f96u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002f9bu, 0x00002f96u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002f9cu, 0x00002f96u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002f9du, 0x00002f9au, 0x00002f9bu, 0x00002f9cu, 0x00002f99u, 0x0003003eu, 0x00002f84u, 0x00002f9du, 0x0003003eu, 0x00002f38u, 0x00002f9du, 0x000200f9u, 0x00002f66u, 0x000200f8u, 0x00002f67u, 0x0003003eu, 0x00002f39u, 0x00002f64u, 0x000500c2u, 0x00000006u, 0x00002f72u, 0x00002f64u, 0x000001d9u, 0x0003003eu, 0x00002f6eu, 0x00002f72u, 0x000500c7u, 0x00000006u, 0x00002f74u, 0x00002f64u, 0x00000657u, 0x0003003eu, 0x00002f6fu, 0x00002f74u, 0x00040071u, 0x00000011u, 0x00002f76u, 0x00002f72u, 0x0004007cu, 0x00000012u, 0x00002f77u, 0x00002f76u, 0x00040071u, 0x00000011u, 0x00002f7fu, 0x00002f74u, 0x0004007cu, 0x00000012u, 0x00002f80u, 0x00002f7fu, 0x00070050u, 0x00000013u, 0x00002f81u, 0x00002f77u, 0x00002f77u, 0x00002f77u, 0x00002f80u, 0x0003003eu, 0x00002f70u, 0x00002f81u, 0x0003003eu, 0x00002f38u, 0x00002f81u, 0x000200f9u, 0x00002f66u, 0x000200f8u, 0x00002f66u, 0x000700f5u, 0x00000013u, 0x00007532u, 0x00002f81u, 0x00002f67u, 0x00002f9du, 0x00002f68u, 0x0003003eu, 0x00002f3bu, 0x00007532u, 0x0003003eu, 0x0000250fu, 0x00007532u, 0x000200f9u, 0x00002714u, 0x000200f8u, 0x00002714u, 0x000700f5u, 0x00000013u, 0x00007830u, 0x00007705u, 0x00002e92u, 0x00007532u, 0x00002f66u, 0x000700f5u, 0x00000013u, 0x0000773du, 0x00007705u, 0x00002e92u, 0x0000751au, 0x00002f66u, 0x000300f7u, 0x00002729u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x0000272au, 0x00002729u, 0x000200f8u, 0x0000272au, 0x00050050u, 0x00000058u, 0x0000272du, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x0000272eu, 0x0000272du, 0x0003003eu, 0x00005edcu, 0x000024ccu, 0x0003003eu, 0x00005eddu, 0x000024ceu, 0x0003003eu, 0x00002532u, 0x000019c4u, 0x0003003eu, 0x00002533u, 0x0000272eu, 0x0003003eu, 0x00002534u, 0x000002fbu, 0x0003003eu, 0x00002535u, 0x0000269eu, 0x0003003eu, 0x00002536u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002faau, 0x00002533u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002fabu, 0x00002faau, 0x00050084u, 0x00000006u, 0x00002facu, 0x000024ceu, 0x00002fabu, 0x00050080u, 0x00000006u, 0x00002fadu, 0x000024ccu, 0x00002facu, 0x0003003eu, 0x00002f9eu, 0x00002fadu, 0x00050041u, 0x00000007u, 0x00002faeu, 0x00002533u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002fafu, 0x00002faeu, 0x00050080u, 0x00000006u, 0x00002fb1u, 0x00002fadu, 0x00002fafu, 0x0003003eu, 0x00002f9eu, 0x00002fb1u, 0x000500c7u, 0x00000006u, 0x00002fb3u, 0x00002fb1u, 0x00000744u, 0x0003003eu, 0x00002f9eu, 0x00002fb3u, 0x0003003eu, 0x00002f9fu, 0x00002fb3u, 0x0004003du, 0x00000006u, 0x00002fb6u, 0x00002faau, 0x000500c7u, 0x00000006u, 0x00002fb7u, 0x00002fb6u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002fb8u, 0x00002fb7u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002fbau, 0x00002fb3u, 0x00002fb8u, 0x0003003eu, 0x00002f9fu, 0x00002fbau, 0x000500c6u, 0x00000006u, 0x00002fbcu, 0x00002fbau, 0x000002fbu, 0x0003003eu, 0x00002f9fu, 0x00002fbcu, 0x00080041u, 0x000006a8u, 0x00002fbfu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002fbcu, 0x0004003du, 0x0000000fu, 0x00002fc0u, 0x00002fbfu, 0x00040071u, 0x00000006u, 0x00002fc1u, 0x00002fc0u, 0x0003003eu, 0x00002fa0u, 0x00002fc1u, 0x000500c4u, 0x00000006u, 0x00002fc3u, 0x00002fc1u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002fc5u, 0x00002fc3u, 0x000002fbu, 0x0003003eu, 0x00002fa1u, 0x00002fc5u, 0x000500c6u, 0x00000006u, 0x00002fc8u, 0x00002fc5u, 0x0000269eu, 0x0003003eu, 0x00002fa1u, 0x00002fc8u, 0x000500c5u, 0x00000006u, 0x00002fcbu, 0x00000775u, 0x00002fc8u, 0x00080041u, 0x00000778u, 0x00002fccu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002fcbu, 0x0004003du, 0x00000011u, 0x00002fcdu, 0x00002fccu, 0x00040071u, 0x00000006u, 0x00002fceu, 0x00002fcdu, 0x0003003eu, 0x00002fa0u, 0x00002fceu, 0x000300f7u, 0x00002fd0u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002fd1u, 0x00002fd2u, 0x000200f8u, 0x00002fd2u, 0x0003003eu, 0x00002fa4u, 0x00002fceu, 0x00060050u, 0x0000026du, 0x00002ff0u, 0x00002fceu, 0x00002fceu, 0x00002fceu, 0x000500c2u, 0x0000026du, 0x00002ff1u, 0x00002ff0u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002ff3u, 0x00002ff1u, 0x0000b61fu, 0x0003003eu, 0x00002fecu, 0x00002ff3u, 0x000500c4u, 0x0000026du, 0x00002ff6u, 0x00002ff3u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002ff9u, 0x00002ff3u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002ffau, 0x00002ff6u, 0x00002ff9u, 0x0003003eu, 0x00002fecu, 0x00002ffau, 0x000500c7u, 0x00000006u, 0x00002ffcu, 0x00002fceu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002ffdu, 0x00002ffcu, 0x00000657u, 0x0003003eu, 0x00002fedu, 0x00002ffdu, 0x00040071u, 0x0000065bu, 0x00002fffu, 0x00002ffau, 0x0004007cu, 0x0000065au, 0x00003000u, 0x00002fffu, 0x00040071u, 0x00000011u, 0x00003002u, 0x00002ffdu, 0x0004007cu, 0x00000012u, 0x00003003u, 0x00003002u, 0x00050051u, 0x00000012u, 0x00003004u, 0x00003000u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00003005u, 0x00003000u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00003006u, 0x00003000u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00003007u, 0x00003004u, 0x00003005u, 0x00003006u, 0x00003003u, 0x0003003eu, 0x00002feeu, 0x00003007u, 0x0003003eu, 0x00002fa2u, 0x00003007u, 0x000200f9u, 0x00002fd0u, 0x000200f8u, 0x00002fd1u, 0x0003003eu, 0x00002fa3u, 0x00002fceu, 0x000500c2u, 0x00000006u, 0x00002fdcu, 0x00002fceu, 0x000001d9u, 0x0003003eu, 0x00002fd8u, 0x00002fdcu, 0x000500c7u, 0x00000006u, 0x00002fdeu, 0x00002fceu, 0x00000657u, 0x0003003eu, 0x00002fd9u, 0x00002fdeu, 0x00040071u, 0x00000011u, 0x00002fe0u, 0x00002fdcu, 0x0004007cu, 0x00000012u, 0x00002fe1u, 0x00002fe0u, 0x00040071u, 0x00000011u, 0x00002fe9u, 0x00002fdeu, 0x0004007cu, 0x00000012u, 0x00002feau, 0x00002fe9u, 0x00070050u, 0x00000013u, 0x00002febu, 0x00002fe1u, 0x00002fe1u, 0x00002fe1u, 0x00002feau, 0x0003003eu, 0x00002fdau, 0x00002febu, 0x0003003eu, 0x00002fa2u, 0x00002febu, 0x000200f9u, 0x00002fd0u, 0x000200f8u, 0x00002fd0u, 0x000700f5u, 0x00000013u, 0x0000755fu, 0x00002febu, 0x00002fd1u, 0x00003007u, 0x00002fd2u, 0x0003003eu, 0x00002fa5u, 0x0000755fu, 0x0003003eu, 0x00002517u, 0x0000755fu, 0x000200f9u, 0x00002729u, 0x000200f8u, 0x00002729u, 0x000700f5u, 0x00000013u, 0x000078a8u, 0x00007705u, 0x00002714u, 0x0000755fu, 0x00002fd0u, 0x000200f9u, 0x000026a3u, 0x000200f8u, 0x000026a5u, 0x0004007cu, 0x000000abu, 0x000026d3u, 0x00007379u, 0x00040071u, 0x00000006u, 0x000026d6u, 0x000024d4u, 0x000600a9u, 0x00000008u, 0x000026d8u, 0x00002685u, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x000026d9u, 0x000026d8u, 0x0003003eu, 0x00005ec0u, 0x000024ccu, 0x0003003eu, 0x00005ec1u, 0x000024ceu, 0x0003003eu, 0x00002501u, 0x000019c4u, 0x0003003eu, 0x00002502u, 0x000026d3u, 0x0003003eu, 0x00002503u, 0x000026d6u, 0x0003003eu, 0x00002504u, 0x000026d9u, 0x0003003eu, 0x00002505u, 0x0000269eu, 0x0003003eu, 0x00002506u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002c89u, 0x00002502u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002c8au, 0x00002c89u, 0x00050084u, 0x00000006u, 0x00002c8bu, 0x000024ceu, 0x00002c8au, 0x00050080u, 0x00000006u, 0x00002c8cu, 0x000024ccu, 0x00002c8bu, 0x0003003eu, 0x00002c7cu, 0x00002c8cu, 0x00050041u, 0x00000007u, 0x00002c8du, 0x00002502u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002c8eu, 0x00002c8du, 0x000500c2u, 0x00000006u, 0x00002c8fu, 0x00002c8eu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00002c91u, 0x00002c8cu, 0x00002c8fu, 0x0003003eu, 0x00002c7cu, 0x00002c91u, 0x000500c7u, 0x00000006u, 0x00002c93u, 0x00002c91u, 0x00000744u, 0x0003003eu, 0x00002c7cu, 0x00002c93u, 0x0004003du, 0x00000006u, 0x00002c95u, 0x00002c8du, 0x000400c8u, 0x00000006u, 0x00002c96u, 0x00002c95u, 0x000500c7u, 0x00000006u, 0x00002c97u, 0x00002c96u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002c98u, 0x00002c97u, 0x00000692u, 0x0003003eu, 0x00002c7du, 0x00002c98u, 0x0003003eu, 0x00002c7eu, 0x00002c93u, 0x0004003du, 0x00000006u, 0x00002c9bu, 0x00002c89u, 0x000500c7u, 0x00000006u, 0x00002c9cu, 0x00002c9bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002c9du, 0x00002c9cu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002c9fu, 0x00002c93u, 0x00002c9du, 0x0003003eu, 0x00002c7eu, 0x00002c9fu, 0x000500c6u, 0x00000006u, 0x00002ca1u, 0x00002c9fu, 0x000002fbu, 0x0003003eu, 0x00002c7eu, 0x00002ca1u, 0x00080041u, 0x000006a8u, 0x00002ca4u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002ca1u, 0x0004003du, 0x0000000fu, 0x00002ca5u, 0x00002ca4u, 0x00040071u, 0x00000006u, 0x00002ca6u, 0x00002ca5u, 0x0003003eu, 0x00002c7fu, 0x00002ca6u, 0x000500c2u, 0x00000006u, 0x00002ca9u, 0x00002ca6u, 0x00002c98u, 0x000500c7u, 0x00000006u, 0x00002caau, 0x00002ca9u, 0x000006afu, 0x0003003eu, 0x00002c7fu, 0x00002caau, 0x000500c4u, 0x00000006u, 0x00002cacu, 0x000026d6u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00002caeu, 0x00002caau, 0x00002cacu, 0x0003003eu, 0x00002c7fu, 0x00002caeu, 0x000500c4u, 0x00000006u, 0x00002cb0u, 0x00002caeu, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002cb2u, 0x00002cb0u, 0x000026d9u, 0x0003003eu, 0x00002c80u, 0x00002cb2u, 0x000500c6u, 0x00000006u, 0x00002cb5u, 0x00002cb2u, 0x0000269eu, 0x0003003eu, 0x00002c80u, 0x00002cb5u, 0x000500c5u, 0x00000006u, 0x00002cb8u, 0x00000775u, 0x00002cb5u, 0x00080041u, 0x00000778u, 0x00002cb9u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002cb8u, 0x0004003du, 0x00000011u, 0x00002cbau, 0x00002cb9u, 0x00040071u, 0x00000006u, 0x00002cbbu, 0x00002cbau, 0x0003003eu, 0x00002c7fu, 0x00002cbbu, 0x000300f7u, 0x00002cbdu, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002cbeu, 0x00002cbfu, 0x000200f8u, 0x00002cbfu, 0x0003003eu, 0x00002c83u, 0x00002cbbu, 0x00060050u, 0x0000026du, 0x00002cddu, 0x00002cbbu, 0x00002cbbu, 0x00002cbbu, 0x000500c2u, 0x0000026du, 0x00002cdeu, 0x00002cddu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002ce0u, 0x00002cdeu, 0x0000b61fu, 0x0003003eu, 0x00002cd9u, 0x00002ce0u, 0x000500c4u, 0x0000026du, 0x00002ce3u, 0x00002ce0u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002ce6u, 0x00002ce0u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002ce7u, 0x00002ce3u, 0x00002ce6u, 0x0003003eu, 0x00002cd9u, 0x00002ce7u, 0x000500c7u, 0x00000006u, 0x00002ce9u, 0x00002cbbu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002ceau, 0x00002ce9u, 0x00000657u, 0x0003003eu, 0x00002cdau, 0x00002ceau, 0x00040071u, 0x0000065bu, 0x00002cecu, 0x00002ce7u, 0x0004007cu, 0x0000065au, 0x00002cedu, 0x00002cecu, 0x00040071u, 0x00000011u, 0x00002cefu, 0x00002ceau, 0x0004007cu, 0x00000012u, 0x00002cf0u, 0x00002cefu, 0x00050051u, 0x00000012u, 0x00002cf1u, 0x00002cedu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002cf2u, 0x00002cedu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002cf3u, 0x00002cedu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002cf4u, 0x00002cf1u, 0x00002cf2u, 0x00002cf3u, 0x00002cf0u, 0x0003003eu, 0x00002cdbu, 0x00002cf4u, 0x0003003eu, 0x00002c81u, 0x00002cf4u, 0x000200f9u, 0x00002cbdu, 0x000200f8u, 0x00002cbeu, 0x0003003eu, 0x00002c82u, 0x00002cbbu, 0x000500c2u, 0x00000006u, 0x00002cc9u, 0x00002cbbu, 0x000001d9u, 0x0003003eu, 0x00002cc5u, 0x00002cc9u, 0x000500c7u, 0x00000006u, 0x00002ccbu, 0x00002cbbu, 0x00000657u, 0x0003003eu, 0x00002cc6u, 0x00002ccbu, 0x00040071u, 0x00000011u, 0x00002ccdu, 0x00002cc9u, 0x0004007cu, 0x00000012u, 0x00002cceu, 0x00002ccdu, 0x00040071u, 0x00000011u, 0x00002cd6u, 0x00002ccbu, 0x0004007cu, 0x00000012u, 0x00002cd7u, 0x00002cd6u, 0x00070050u, 0x00000013u, 0x00002cd8u, 0x00002cceu, 0x00002cceu, 0x00002cceu, 0x00002cd7u, 0x0003003eu, 0x00002cc7u, 0x00002cd8u, 0x0003003eu, 0x00002c81u, 0x00002cd8u, 0x000200f9u, 0x00002cbdu, 0x000200f8u, 0x00002cbdu, 0x000700f5u, 0x00000013u, 0x00007560u, 0x00002cd8u, 0x00002cbeu, 0x00002cf4u, 0x00002cbfu, 0x0003003eu, 0x00002c84u, 0x00007560u, 0x0003003eu, 0x000024ffu, 0x00007560u, 0x000300f7u, 0x000026e0u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000026e1u, 0x000026e0u, 0x000200f8u, 0x000026e1u, 0x00050050u, 0x00000058u, 0x000026e4u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000026e5u, 0x000026e4u, 0x0003003eu, 0x00005ec4u, 0x000024ccu, 0x0003003eu, 0x00005ec5u, 0x000024ceu, 0x0003003eu, 0x00002509u, 0x000019c4u, 0x0003003eu, 0x0000250au, 0x000026e5u, 0x0003003eu, 0x0000250bu, 0x000026d6u, 0x0003003eu, 0x0000250cu, 0x000002f4u, 0x0003003eu, 0x0000250du, 0x0000269eu, 0x0003003eu, 0x0000250eu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002d02u, 0x0000250au, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002d03u, 0x00002d02u, 0x00050084u, 0x00000006u, 0x00002d04u, 0x000024ceu, 0x00002d03u, 0x00050080u, 0x00000006u, 0x00002d05u, 0x000024ccu, 0x00002d04u, 0x0003003eu, 0x00002cf5u, 0x00002d05u, 0x00050041u, 0x00000007u, 0x00002d06u, 0x0000250au, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002d07u, 0x00002d06u, 0x000500c2u, 0x00000006u, 0x00002d08u, 0x00002d07u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00002d0au, 0x00002d05u, 0x00002d08u, 0x0003003eu, 0x00002cf5u, 0x00002d0au, 0x000500c7u, 0x00000006u, 0x00002d0cu, 0x00002d0au, 0x00000744u, 0x0003003eu, 0x00002cf5u, 0x00002d0cu, 0x0004003du, 0x00000006u, 0x00002d0eu, 0x00002d06u, 0x000400c8u, 0x00000006u, 0x00002d0fu, 0x00002d0eu, 0x000500c7u, 0x00000006u, 0x00002d10u, 0x00002d0fu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002d11u, 0x00002d10u, 0x00000692u, 0x0003003eu, 0x00002cf6u, 0x00002d11u, 0x0003003eu, 0x00002cf7u, 0x00002d0cu, 0x0004003du, 0x00000006u, 0x00002d14u, 0x00002d02u, 0x000500c7u, 0x00000006u, 0x00002d15u, 0x00002d14u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002d16u, 0x00002d15u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002d18u, 0x00002d0cu, 0x00002d16u, 0x0003003eu, 0x00002cf7u, 0x00002d18u, 0x000500c6u, 0x00000006u, 0x00002d1au, 0x00002d18u, 0x000002fbu, 0x0003003eu, 0x00002cf7u, 0x00002d1au, 0x00080041u, 0x000006a8u, 0x00002d1du, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002d1au, 0x0004003du, 0x0000000fu, 0x00002d1eu, 0x00002d1du, 0x00040071u, 0x00000006u, 0x00002d1fu, 0x00002d1eu, 0x0003003eu, 0x00002cf8u, 0x00002d1fu, 0x000500c2u, 0x00000006u, 0x00002d22u, 0x00002d1fu, 0x00002d11u, 0x000500c7u, 0x00000006u, 0x00002d23u, 0x00002d22u, 0x000006afu, 0x0003003eu, 0x00002cf8u, 0x00002d23u, 0x000500c5u, 0x00000006u, 0x00002d27u, 0x00002d23u, 0x00002cacu, 0x0003003eu, 0x00002cf8u, 0x00002d27u, 0x000500c4u, 0x00000006u, 0x00002d29u, 0x00002d27u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002d2bu, 0x00002d29u, 0x000002f4u, 0x0003003eu, 0x00002cf9u, 0x00002d2bu, 0x000500c6u, 0x00000006u, 0x00002d2eu, 0x00002d2bu, 0x0000269eu, 0x0003003eu, 0x00002cf9u, 0x00002d2eu, 0x000500c5u, 0x00000006u, 0x00002d31u, 0x00000775u, 0x00002d2eu, 0x00080041u, 0x00000778u, 0x00002d32u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002d31u, 0x0004003du, 0x00000011u, 0x00002d33u, 0x00002d32u, 0x00040071u, 0x00000006u, 0x00002d34u, 0x00002d33u, 0x0003003eu, 0x00002cf8u, 0x00002d34u, 0x000300f7u, 0x00002d36u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002d37u, 0x00002d38u, 0x000200f8u, 0x00002d38u, 0x0003003eu, 0x00002cfcu, 0x00002d34u, 0x00060050u, 0x0000026du, 0x00002d56u, 0x00002d34u, 0x00002d34u, 0x00002d34u, 0x000500c2u, 0x0000026du, 0x00002d57u, 0x00002d56u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002d59u, 0x00002d57u, 0x0000b61fu, 0x0003003eu, 0x00002d52u, 0x00002d59u, 0x000500c4u, 0x0000026du, 0x00002d5cu, 0x00002d59u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002d5fu, 0x00002d59u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002d60u, 0x00002d5cu, 0x00002d5fu, 0x0003003eu, 0x00002d52u, 0x00002d60u, 0x000500c7u, 0x00000006u, 0x00002d62u, 0x00002d34u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002d63u, 0x00002d62u, 0x00000657u, 0x0003003eu, 0x00002d53u, 0x00002d63u, 0x00040071u, 0x0000065bu, 0x00002d65u, 0x00002d60u, 0x0004007cu, 0x0000065au, 0x00002d66u, 0x00002d65u, 0x00040071u, 0x00000011u, 0x00002d68u, 0x00002d63u, 0x0004007cu, 0x00000012u, 0x00002d69u, 0x00002d68u, 0x00050051u, 0x00000012u, 0x00002d6au, 0x00002d66u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002d6bu, 0x00002d66u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002d6cu, 0x00002d66u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002d6du, 0x00002d6au, 0x00002d6bu, 0x00002d6cu, 0x00002d69u, 0x0003003eu, 0x00002d54u, 0x00002d6du, 0x0003003eu, 0x00002cfau, 0x00002d6du, 0x000200f9u, 0x00002d36u, 0x000200f8u, 0x00002d37u, 0x0003003eu, 0x00002cfbu, 0x00002d34u, 0x000500c2u, 0x00000006u, 0x00002d42u, 0x00002d34u, 0x000001d9u, 0x0003003eu, 0x00002d3eu, 0x00002d42u, 0x000500c7u, 0x00000006u, 0x00002d44u, 0x00002d34u, 0x00000657u, 0x0003003eu, 0x00002d3fu, 0x00002d44u, 0x00040071u, 0x00000011u, 0x00002d46u, 0x00002d42u, 0x0004007cu, 0x00000012u, 0x00002d47u, 0x00002d46u, 0x00040071u, 0x00000011u, 0x00002d4fu, 0x00002d44u, 0x0004007cu, 0x00000012u, 0x00002d50u, 0x00002d4fu, 0x00070050u, 0x00000013u, 0x00002d51u, 0x00002d47u, 0x00002d47u, 0x00002d47u, 0x00002d50u, 0x0003003eu, 0x00002d40u, 0x00002d51u, 0x0003003eu, 0x00002cfau, 0x00002d51u, 0x000200f9u, 0x00002d36u, 0x000200f8u, 0x00002d36u, 0x000700f5u, 0x00000013u, 0x00007575u, 0x00002d51u, 0x00002d37u, 0x00002d6du, 0x00002d38u, 0x0003003eu, 0x00002cfdu, 0x00007575u, 0x0003003eu, 0x00002507u, 0x00007575u, 0x00050050u, 0x00000058u, 0x000026f0u, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000026f1u, 0x000026f0u, 0x0003003eu, 0x00005ec8u, 0x000024ccu, 0x0003003eu, 0x00005ec9u, 0x000024ceu, 0x0003003eu, 0x00002511u, 0x000019c4u, 0x0003003eu, 0x00002512u, 0x000026f1u, 0x0003003eu, 0x00002513u, 0x000026d6u, 0x0003003eu, 0x00002514u, 0x000002f8u, 0x0003003eu, 0x00002515u, 0x0000269eu, 0x0003003eu, 0x00002516u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002d7bu, 0x00002512u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002d7cu, 0x00002d7bu, 0x00050084u, 0x00000006u, 0x00002d7du, 0x000024ceu, 0x00002d7cu, 0x00050080u, 0x00000006u, 0x00002d7eu, 0x000024ccu, 0x00002d7du, 0x0003003eu, 0x00002d6eu, 0x00002d7eu, 0x00050041u, 0x00000007u, 0x00002d7fu, 0x00002512u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002d80u, 0x00002d7fu, 0x000500c2u, 0x00000006u, 0x00002d81u, 0x00002d80u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00002d83u, 0x00002d7eu, 0x00002d81u, 0x0003003eu, 0x00002d6eu, 0x00002d83u, 0x000500c7u, 0x00000006u, 0x00002d85u, 0x00002d83u, 0x00000744u, 0x0003003eu, 0x00002d6eu, 0x00002d85u, 0x0004003du, 0x00000006u, 0x00002d87u, 0x00002d7fu, 0x000400c8u, 0x00000006u, 0x00002d88u, 0x00002d87u, 0x000500c7u, 0x00000006u, 0x00002d89u, 0x00002d88u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002d8au, 0x00002d89u, 0x00000692u, 0x0003003eu, 0x00002d6fu, 0x00002d8au, 0x0003003eu, 0x00002d70u, 0x00002d85u, 0x0004003du, 0x00000006u, 0x00002d8du, 0x00002d7bu, 0x000500c7u, 0x00000006u, 0x00002d8eu, 0x00002d8du, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002d8fu, 0x00002d8eu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002d91u, 0x00002d85u, 0x00002d8fu, 0x0003003eu, 0x00002d70u, 0x00002d91u, 0x000500c6u, 0x00000006u, 0x00002d93u, 0x00002d91u, 0x000002fbu, 0x0003003eu, 0x00002d70u, 0x00002d93u, 0x00080041u, 0x000006a8u, 0x00002d96u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002d93u, 0x0004003du, 0x0000000fu, 0x00002d97u, 0x00002d96u, 0x00040071u, 0x00000006u, 0x00002d98u, 0x00002d97u, 0x0003003eu, 0x00002d71u, 0x00002d98u, 0x000500c2u, 0x00000006u, 0x00002d9bu, 0x00002d98u, 0x00002d8au, 0x000500c7u, 0x00000006u, 0x00002d9cu, 0x00002d9bu, 0x000006afu, 0x0003003eu, 0x00002d71u, 0x00002d9cu, 0x000500c5u, 0x00000006u, 0x00002da0u, 0x00002d9cu, 0x00002cacu, 0x0003003eu, 0x00002d71u, 0x00002da0u, 0x000500c4u, 0x00000006u, 0x00002da2u, 0x00002da0u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002da4u, 0x00002da2u, 0x000002f8u, 0x0003003eu, 0x00002d72u, 0x00002da4u, 0x000500c6u, 0x00000006u, 0x00002da7u, 0x00002da4u, 0x0000269eu, 0x0003003eu, 0x00002d72u, 0x00002da7u, 0x000500c5u, 0x00000006u, 0x00002daau, 0x00000775u, 0x00002da7u, 0x00080041u, 0x00000778u, 0x00002dabu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002daau, 0x0004003du, 0x00000011u, 0x00002dacu, 0x00002dabu, 0x00040071u, 0x00000006u, 0x00002dadu, 0x00002dacu, 0x0003003eu, 0x00002d71u, 0x00002dadu, 0x000300f7u, 0x00002dafu, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002db0u, 0x00002db1u, 0x000200f8u, 0x00002db1u, 0x0003003eu, 0x00002d75u, 0x00002dadu, 0x00060050u, 0x0000026du, 0x00002dcfu, 0x00002dadu, 0x00002dadu, 0x00002dadu, 0x000500c2u, 0x0000026du, 0x00002dd0u, 0x00002dcfu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002dd2u, 0x00002dd0u, 0x0000b61fu, 0x0003003eu, 0x00002dcbu, 0x00002dd2u, 0x000500c4u, 0x0000026du, 0x00002dd5u, 0x00002dd2u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002dd8u, 0x00002dd2u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002dd9u, 0x00002dd5u, 0x00002dd8u, 0x0003003eu, 0x00002dcbu, 0x00002dd9u, 0x000500c7u, 0x00000006u, 0x00002ddbu, 0x00002dadu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002ddcu, 0x00002ddbu, 0x00000657u, 0x0003003eu, 0x00002dccu, 0x00002ddcu, 0x00040071u, 0x0000065bu, 0x00002ddeu, 0x00002dd9u, 0x0004007cu, 0x0000065au, 0x00002ddfu, 0x00002ddeu, 0x00040071u, 0x00000011u, 0x00002de1u, 0x00002ddcu, 0x0004007cu, 0x00000012u, 0x00002de2u, 0x00002de1u, 0x00050051u, 0x00000012u, 0x00002de3u, 0x00002ddfu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002de4u, 0x00002ddfu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002de5u, 0x00002ddfu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002de6u, 0x00002de3u, 0x00002de4u, 0x00002de5u, 0x00002de2u, 0x0003003eu, 0x00002dcdu, 0x00002de6u, 0x0003003eu, 0x00002d73u, 0x00002de6u, 0x000200f9u, 0x00002dafu, 0x000200f8u, 0x00002db0u, 0x0003003eu, 0x00002d74u, 0x00002dadu, 0x000500c2u, 0x00000006u, 0x00002dbbu, 0x00002dadu, 0x000001d9u, 0x0003003eu, 0x00002db7u, 0x00002dbbu, 0x000500c7u, 0x00000006u, 0x00002dbdu, 0x00002dadu, 0x00000657u, 0x0003003eu, 0x00002db8u, 0x00002dbdu, 0x00040071u, 0x00000011u, 0x00002dbfu, 0x00002dbbu, 0x0004007cu, 0x00000012u, 0x00002dc0u, 0x00002dbfu, 0x00040071u, 0x00000011u, 0x00002dc8u, 0x00002dbdu, 0x0004007cu, 0x00000012u, 0x00002dc9u, 0x00002dc8u, 0x00070050u, 0x00000013u, 0x00002dcau, 0x00002dc0u, 0x00002dc0u, 0x00002dc0u, 0x00002dc9u, 0x0003003eu, 0x00002db9u, 0x00002dcau, 0x0003003eu, 0x00002d73u, 0x00002dcau, 0x000200f9u, 0x00002dafu, 0x000200f8u, 0x00002dafu, 0x000700f5u, 0x00000013u, 0x0000758bu, 0x00002dcau, 0x00002db0u, 0x00002de6u, 0x00002db1u, 0x0003003eu, 0x00002d76u, 0x0000758bu, 0x0003003eu, 0x0000250fu, 0x0000758bu, 0x000200f9u, 0x000026e0u, 0x000200f8u, 0x000026e0u, 0x000700f5u, 0x00000013u, 0x0000782cu, 0x00007705u, 0x00002cbdu, 0x0000758bu, 0x00002dafu, 0x000700f5u, 0x00000013u, 0x00007738u, 0x00007705u, 0x00002cbdu, 0x00007575u, 0x00002dafu, 0x000300f7u, 0x000026fbu, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000026fcu, 0x000026fbu, 0x000200f8u, 0x000026fcu, 0x00050050u, 0x00000058u, 0x000026ffu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x00002700u, 0x000026ffu, 0x0003003eu, 0x00005eccu, 0x000024ccu, 0x0003003eu, 0x00005ecdu, 0x000024ceu, 0x0003003eu, 0x00002519u, 0x000019c4u, 0x0003003eu, 0x0000251au, 0x00002700u, 0x0003003eu, 0x0000251bu, 0x000026d6u, 0x0003003eu, 0x0000251cu, 0x000002fbu, 0x0003003eu, 0x0000251du, 0x0000269eu, 0x0003003eu, 0x0000251eu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002df4u, 0x0000251au, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002df5u, 0x00002df4u, 0x00050084u, 0x00000006u, 0x00002df6u, 0x000024ceu, 0x00002df5u, 0x00050080u, 0x00000006u, 0x00002df7u, 0x000024ccu, 0x00002df6u, 0x0003003eu, 0x00002de7u, 0x00002df7u, 0x00050041u, 0x00000007u, 0x00002df8u, 0x0000251au, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002df9u, 0x00002df8u, 0x000500c2u, 0x00000006u, 0x00002dfau, 0x00002df9u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00002dfcu, 0x00002df7u, 0x00002dfau, 0x0003003eu, 0x00002de7u, 0x00002dfcu, 0x000500c7u, 0x00000006u, 0x00002dfeu, 0x00002dfcu, 0x00000744u, 0x0003003eu, 0x00002de7u, 0x00002dfeu, 0x0004003du, 0x00000006u, 0x00002e00u, 0x00002df8u, 0x000400c8u, 0x00000006u, 0x00002e01u, 0x00002e00u, 0x000500c7u, 0x00000006u, 0x00002e02u, 0x00002e01u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002e03u, 0x00002e02u, 0x00000692u, 0x0003003eu, 0x00002de8u, 0x00002e03u, 0x0003003eu, 0x00002de9u, 0x00002dfeu, 0x0004003du, 0x00000006u, 0x00002e06u, 0x00002df4u, 0x000500c7u, 0x00000006u, 0x00002e07u, 0x00002e06u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002e08u, 0x00002e07u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00002e0au, 0x00002dfeu, 0x00002e08u, 0x0003003eu, 0x00002de9u, 0x00002e0au, 0x000500c6u, 0x00000006u, 0x00002e0cu, 0x00002e0au, 0x000002fbu, 0x0003003eu, 0x00002de9u, 0x00002e0cu, 0x00080041u, 0x000006a8u, 0x00002e0fu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002e0cu, 0x0004003du, 0x0000000fu, 0x00002e10u, 0x00002e0fu, 0x00040071u, 0x00000006u, 0x00002e11u, 0x00002e10u, 0x0003003eu, 0x00002deau, 0x00002e11u, 0x000500c2u, 0x00000006u, 0x00002e14u, 0x00002e11u, 0x00002e03u, 0x000500c7u, 0x00000006u, 0x00002e15u, 0x00002e14u, 0x000006afu, 0x0003003eu, 0x00002deau, 0x00002e15u, 0x000500c5u, 0x00000006u, 0x00002e19u, 0x00002e15u, 0x00002cacu, 0x0003003eu, 0x00002deau, 0x00002e19u, 0x000500c4u, 0x00000006u, 0x00002e1bu, 0x00002e19u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00002e1du, 0x00002e1bu, 0x000002fbu, 0x0003003eu, 0x00002debu, 0x00002e1du, 0x000500c6u, 0x00000006u, 0x00002e20u, 0x00002e1du, 0x0000269eu, 0x0003003eu, 0x00002debu, 0x00002e20u, 0x000500c5u, 0x00000006u, 0x00002e23u, 0x00000775u, 0x00002e20u, 0x00080041u, 0x00000778u, 0x00002e24u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002e23u, 0x0004003du, 0x00000011u, 0x00002e25u, 0x00002e24u, 0x00040071u, 0x00000006u, 0x00002e26u, 0x00002e25u, 0x0003003eu, 0x00002deau, 0x00002e26u, 0x000300f7u, 0x00002e28u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002e29u, 0x00002e2au, 0x000200f8u, 0x00002e2au, 0x0003003eu, 0x00002deeu, 0x00002e26u, 0x00060050u, 0x0000026du, 0x00002e48u, 0x00002e26u, 0x00002e26u, 0x00002e26u, 0x000500c2u, 0x0000026du, 0x00002e49u, 0x00002e48u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002e4bu, 0x00002e49u, 0x0000b61fu, 0x0003003eu, 0x00002e44u, 0x00002e4bu, 0x000500c4u, 0x0000026du, 0x00002e4eu, 0x00002e4bu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002e51u, 0x00002e4bu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002e52u, 0x00002e4eu, 0x00002e51u, 0x0003003eu, 0x00002e44u, 0x00002e52u, 0x000500c7u, 0x00000006u, 0x00002e54u, 0x00002e26u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002e55u, 0x00002e54u, 0x00000657u, 0x0003003eu, 0x00002e45u, 0x00002e55u, 0x00040071u, 0x0000065bu, 0x00002e57u, 0x00002e52u, 0x0004007cu, 0x0000065au, 0x00002e58u, 0x00002e57u, 0x00040071u, 0x00000011u, 0x00002e5au, 0x00002e55u, 0x0004007cu, 0x00000012u, 0x00002e5bu, 0x00002e5au, 0x00050051u, 0x00000012u, 0x00002e5cu, 0x00002e58u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002e5du, 0x00002e58u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002e5eu, 0x00002e58u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002e5fu, 0x00002e5cu, 0x00002e5du, 0x00002e5eu, 0x00002e5bu, 0x0003003eu, 0x00002e46u, 0x00002e5fu, 0x0003003eu, 0x00002decu, 0x00002e5fu, 0x000200f9u, 0x00002e28u, 0x000200f8u, 0x00002e29u, 0x0003003eu, 0x00002dedu, 0x00002e26u, 0x000500c2u, 0x00000006u, 0x00002e34u, 0x00002e26u, 0x000001d9u, 0x0003003eu, 0x00002e30u, 0x00002e34u, 0x000500c7u, 0x00000006u, 0x00002e36u, 0x00002e26u, 0x00000657u, 0x0003003eu, 0x00002e31u, 0x00002e36u, 0x00040071u, 0x00000011u, 0x00002e38u, 0x00002e34u, 0x0004007cu, 0x00000012u, 0x00002e39u, 0x00002e38u, 0x00040071u, 0x00000011u, 0x00002e41u, 0x00002e36u, 0x0004007cu, 0x00000012u, 0x00002e42u, 0x00002e41u, 0x00070050u, 0x00000013u, 0x00002e43u, 0x00002e39u, 0x00002e39u, 0x00002e39u, 0x00002e42u, 0x0003003eu, 0x00002e32u, 0x00002e43u, 0x0003003eu, 0x00002decu, 0x00002e43u, 0x000200f9u, 0x00002e28u, 0x000200f8u, 0x00002e28u, 0x000700f5u, 0x00000013u, 0x000075b7u, 0x00002e43u, 0x00002e29u, 0x00002e5fu, 0x00002e2au, 0x0003003eu, 0x00002defu, 0x000075b7u, 0x0003003eu, 0x00002517u, 0x000075b7u, 0x000200f9u, 0x000026fbu, 0x000200f8u, 0x000026fbu, 0x000700f5u, 0x00000013u, 0x000078a3u, 0x00007705u, 0x000026e0u, 0x000075b7u, 0x00002e28u, 0x000200f9u, 0x000026a3u, 0x000200f8u, 0x000026a4u, 0x0004007cu, 0x000000abu, 0x000026a8u, 0x00007379u, 0x000600a9u, 0x00000008u, 0x000026aau, 0x00002685u, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x000026abu, 0x000026aau, 0x0003003eu, 0x00005ee0u, 0x000024ccu, 0x0003003eu, 0x00005ee1u, 0x000024ceu, 0x0003003eu, 0x00002538u, 0x000019c4u, 0x0003003eu, 0x00002539u, 0x000026a8u, 0x0003003eu, 0x0000253au, 0x000026abu, 0x0003003eu, 0x0000253bu, 0x0000269eu, 0x0003003eu, 0x0000253cu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002ad4u, 0x00002539u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002ad5u, 0x00002ad4u, 0x00050084u, 0x00000006u, 0x00002ad6u, 0x000024ceu, 0x00002ad5u, 0x00050080u, 0x00000006u, 0x00002ad7u, 0x000024ccu, 0x00002ad6u, 0x0003003eu, 0x00002ac8u, 0x00002ad7u, 0x00050041u, 0x00000007u, 0x00002ad8u, 0x00002539u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002ad9u, 0x00002ad8u, 0x00050084u, 0x00000006u, 0x00002adau, 0x00002ad9u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00002adcu, 0x00002ad7u, 0x00002adau, 0x0003003eu, 0x00002ac8u, 0x00002adcu, 0x000500c7u, 0x00000006u, 0x00002adeu, 0x00002adcu, 0x00000744u, 0x0003003eu, 0x00002ac8u, 0x00002adeu, 0x000500c2u, 0x00000006u, 0x00002ae0u, 0x00002adeu, 0x000001a6u, 0x0003003eu, 0x00002ac9u, 0x00002ae0u, 0x0004003du, 0x00000006u, 0x00002ae2u, 0x00002ad4u, 0x000500c7u, 0x00000006u, 0x00002ae3u, 0x00002ae2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002ae4u, 0x00002ae3u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00002ae6u, 0x00002ae0u, 0x00002ae4u, 0x0003003eu, 0x00002ac9u, 0x00002ae6u, 0x000500c6u, 0x00000006u, 0x00002ae8u, 0x00002ae6u, 0x000002f4u, 0x0003003eu, 0x00002ac9u, 0x00002ae8u, 0x00080041u, 0x00000778u, 0x00002aebu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002ae8u, 0x0004003du, 0x00000011u, 0x00002aecu, 0x00002aebu, 0x00040071u, 0x00000006u, 0x00002aedu, 0x00002aecu, 0x0003003eu, 0x00002acau, 0x00002aedu, 0x000500c2u, 0x00000006u, 0x00002aefu, 0x00002aedu, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00002af0u, 0x00002aefu, 0x00000816u, 0x00050080u, 0x00000006u, 0x00002af2u, 0x00002af0u, 0x000026abu, 0x0003003eu, 0x00002acbu, 0x00002af2u, 0x000500c6u, 0x00000006u, 0x00002af5u, 0x00002af2u, 0x0000269eu, 0x0003003eu, 0x00002acbu, 0x00002af5u, 0x000500c5u, 0x00000006u, 0x00002af8u, 0x00000775u, 0x00002af5u, 0x00080041u, 0x00000778u, 0x00002af9u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002af8u, 0x0004003du, 0x00000011u, 0x00002afau, 0x00002af9u, 0x00040071u, 0x00000006u, 0x00002afbu, 0x00002afau, 0x0003003eu, 0x00002acau, 0x00002afbu, 0x000300f7u, 0x00002afdu, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002afeu, 0x00002affu, 0x000200f8u, 0x00002affu, 0x0003003eu, 0x00002aceu, 0x00002afbu, 0x00060050u, 0x0000026du, 0x00002b1du, 0x00002afbu, 0x00002afbu, 0x00002afbu, 0x000500c2u, 0x0000026du, 0x00002b1eu, 0x00002b1du, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002b20u, 0x00002b1eu, 0x0000b61fu, 0x0003003eu, 0x00002b19u, 0x00002b20u, 0x000500c4u, 0x0000026du, 0x00002b23u, 0x00002b20u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002b26u, 0x00002b20u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002b27u, 0x00002b23u, 0x00002b26u, 0x0003003eu, 0x00002b19u, 0x00002b27u, 0x000500c7u, 0x00000006u, 0x00002b29u, 0x00002afbu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002b2au, 0x00002b29u, 0x00000657u, 0x0003003eu, 0x00002b1au, 0x00002b2au, 0x00040071u, 0x0000065bu, 0x00002b2cu, 0x00002b27u, 0x0004007cu, 0x0000065au, 0x00002b2du, 0x00002b2cu, 0x00040071u, 0x00000011u, 0x00002b2fu, 0x00002b2au, 0x0004007cu, 0x00000012u, 0x00002b30u, 0x00002b2fu, 0x00050051u, 0x00000012u, 0x00002b31u, 0x00002b2du, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002b32u, 0x00002b2du, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002b33u, 0x00002b2du, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002b34u, 0x00002b31u, 0x00002b32u, 0x00002b33u, 0x00002b30u, 0x0003003eu, 0x00002b1bu, 0x00002b34u, 0x0003003eu, 0x00002accu, 0x00002b34u, 0x000200f9u, 0x00002afdu, 0x000200f8u, 0x00002afeu, 0x0003003eu, 0x00002acdu, 0x00002afbu, 0x000500c2u, 0x00000006u, 0x00002b09u, 0x00002afbu, 0x000001d9u, 0x0003003eu, 0x00002b05u, 0x00002b09u, 0x000500c7u, 0x00000006u, 0x00002b0bu, 0x00002afbu, 0x00000657u, 0x0003003eu, 0x00002b06u, 0x00002b0bu, 0x00040071u, 0x00000011u, 0x00002b0du, 0x00002b09u, 0x0004007cu, 0x00000012u, 0x00002b0eu, 0x00002b0du, 0x00040071u, 0x00000011u, 0x00002b16u, 0x00002b0bu, 0x0004007cu, 0x00000012u, 0x00002b17u, 0x00002b16u, 0x00070050u, 0x00000013u, 0x00002b18u, 0x00002b0eu, 0x00002b0eu, 0x00002b0eu, 0x00002b17u, 0x0003003eu, 0x00002b07u, 0x00002b18u, 0x0003003eu, 0x00002accu, 0x00002b18u, 0x000200f9u, 0x00002afdu, 0x000200f8u, 0x00002afdu, 0x000700f5u, 0x00000013u, 0x000075b8u, 0x00002b18u, 0x00002afeu, 0x00002b34u, 0x00002affu, 0x0003003eu, 0x00002acfu, 0x000075b8u, 0x0003003eu, 0x000024ffu, 0x000075b8u, 0x000300f7u, 0x000026b2u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000026b3u, 0x000026b2u, 0x000200f8u, 0x000026b3u, 0x00050050u, 0x00000058u, 0x000026b6u, 0x0000732eu, 0x00002670u, 0x0004007cu, 0x000000abu, 0x000026b7u, 0x000026b6u, 0x0003003eu, 0x00005ee4u, 0x000024ccu, 0x0003003eu, 0x00005ee5u, 0x000024ceu, 0x0003003eu, 0x0000253eu, 0x000019c4u, 0x0003003eu, 0x0000253fu, 0x000026b7u, 0x0003003eu, 0x00002540u, 0x000002f4u, 0x0003003eu, 0x00002541u, 0x0000269eu, 0x0003003eu, 0x00002542u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002b41u, 0x0000253fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002b42u, 0x00002b41u, 0x00050084u, 0x00000006u, 0x00002b43u, 0x000024ceu, 0x00002b42u, 0x00050080u, 0x00000006u, 0x00002b44u, 0x000024ccu, 0x00002b43u, 0x0003003eu, 0x00002b35u, 0x00002b44u, 0x00050041u, 0x00000007u, 0x00002b45u, 0x0000253fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002b46u, 0x00002b45u, 0x00050084u, 0x00000006u, 0x00002b47u, 0x00002b46u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00002b49u, 0x00002b44u, 0x00002b47u, 0x0003003eu, 0x00002b35u, 0x00002b49u, 0x000500c7u, 0x00000006u, 0x00002b4bu, 0x00002b49u, 0x00000744u, 0x0003003eu, 0x00002b35u, 0x00002b4bu, 0x000500c2u, 0x00000006u, 0x00002b4du, 0x00002b4bu, 0x000001a6u, 0x0003003eu, 0x00002b36u, 0x00002b4du, 0x0004003du, 0x00000006u, 0x00002b4fu, 0x00002b41u, 0x000500c7u, 0x00000006u, 0x00002b50u, 0x00002b4fu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002b51u, 0x00002b50u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00002b53u, 0x00002b4du, 0x00002b51u, 0x0003003eu, 0x00002b36u, 0x00002b53u, 0x000500c6u, 0x00000006u, 0x00002b55u, 0x00002b53u, 0x000002f4u, 0x0003003eu, 0x00002b36u, 0x00002b55u, 0x00080041u, 0x00000778u, 0x00002b58u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002b55u, 0x0004003du, 0x00000011u, 0x00002b59u, 0x00002b58u, 0x00040071u, 0x00000006u, 0x00002b5au, 0x00002b59u, 0x0003003eu, 0x00002b37u, 0x00002b5au, 0x000500c2u, 0x00000006u, 0x00002b5cu, 0x00002b5au, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00002b5du, 0x00002b5cu, 0x00000816u, 0x00050080u, 0x00000006u, 0x00002b5fu, 0x00002b5du, 0x000002f4u, 0x0003003eu, 0x00002b38u, 0x00002b5fu, 0x000500c6u, 0x00000006u, 0x00002b62u, 0x00002b5fu, 0x0000269eu, 0x0003003eu, 0x00002b38u, 0x00002b62u, 0x000500c5u, 0x00000006u, 0x00002b65u, 0x00000775u, 0x00002b62u, 0x00080041u, 0x00000778u, 0x00002b66u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002b65u, 0x0004003du, 0x00000011u, 0x00002b67u, 0x00002b66u, 0x00040071u, 0x00000006u, 0x00002b68u, 0x00002b67u, 0x0003003eu, 0x00002b37u, 0x00002b68u, 0x000300f7u, 0x00002b6au, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002b6bu, 0x00002b6cu, 0x000200f8u, 0x00002b6cu, 0x0003003eu, 0x00002b3bu, 0x00002b68u, 0x00060050u, 0x0000026du, 0x00002b8au, 0x00002b68u, 0x00002b68u, 0x00002b68u, 0x000500c2u, 0x0000026du, 0x00002b8bu, 0x00002b8au, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002b8du, 0x00002b8bu, 0x0000b61fu, 0x0003003eu, 0x00002b86u, 0x00002b8du, 0x000500c4u, 0x0000026du, 0x00002b90u, 0x00002b8du, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002b93u, 0x00002b8du, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002b94u, 0x00002b90u, 0x00002b93u, 0x0003003eu, 0x00002b86u, 0x00002b94u, 0x000500c7u, 0x00000006u, 0x00002b96u, 0x00002b68u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002b97u, 0x00002b96u, 0x00000657u, 0x0003003eu, 0x00002b87u, 0x00002b97u, 0x00040071u, 0x0000065bu, 0x00002b99u, 0x00002b94u, 0x0004007cu, 0x0000065au, 0x00002b9au, 0x00002b99u, 0x00040071u, 0x00000011u, 0x00002b9cu, 0x00002b97u, 0x0004007cu, 0x00000012u, 0x00002b9du, 0x00002b9cu, 0x00050051u, 0x00000012u, 0x00002b9eu, 0x00002b9au, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002b9fu, 0x00002b9au, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002ba0u, 0x00002b9au, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002ba1u, 0x00002b9eu, 0x00002b9fu, 0x00002ba0u, 0x00002b9du, 0x0003003eu, 0x00002b88u, 0x00002ba1u, 0x0003003eu, 0x00002b39u, 0x00002ba1u, 0x000200f9u, 0x00002b6au, 0x000200f8u, 0x00002b6bu, 0x0003003eu, 0x00002b3au, 0x00002b68u, 0x000500c2u, 0x00000006u, 0x00002b76u, 0x00002b68u, 0x000001d9u, 0x0003003eu, 0x00002b72u, 0x00002b76u, 0x000500c7u, 0x00000006u, 0x00002b78u, 0x00002b68u, 0x00000657u, 0x0003003eu, 0x00002b73u, 0x00002b78u, 0x00040071u, 0x00000011u, 0x00002b7au, 0x00002b76u, 0x0004007cu, 0x00000012u, 0x00002b7bu, 0x00002b7au, 0x00040071u, 0x00000011u, 0x00002b83u, 0x00002b78u, 0x0004007cu, 0x00000012u, 0x00002b84u, 0x00002b83u, 0x00070050u, 0x00000013u, 0x00002b85u, 0x00002b7bu, 0x00002b7bu, 0x00002b7bu, 0x00002b84u, 0x0003003eu, 0x00002b74u, 0x00002b85u, 0x0003003eu, 0x00002b39u, 0x00002b85u, 0x000200f9u, 0x00002b6au, 0x000200f8u, 0x00002b6au, 0x000700f5u, 0x00000013u, 0x000075cdu, 0x00002b85u, 0x00002b6bu, 0x00002ba1u, 0x00002b6cu, 0x0003003eu, 0x00002b3cu, 0x000075cdu, 0x0003003eu, 0x00002507u, 0x000075cdu, 0x00050050u, 0x00000058u, 0x000026bfu, 0x000072f0u, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000026c0u, 0x000026bfu, 0x0003003eu, 0x00005ee8u, 0x000024ccu, 0x0003003eu, 0x00005ee9u, 0x000024ceu, 0x0003003eu, 0x00002544u, 0x000019c4u, 0x0003003eu, 0x00002545u, 0x000026c0u, 0x0003003eu, 0x00002546u, 0x000002f8u, 0x0003003eu, 0x00002547u, 0x0000269eu, 0x0003003eu, 0x00002548u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002baeu, 0x00002545u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002bafu, 0x00002baeu, 0x00050084u, 0x00000006u, 0x00002bb0u, 0x000024ceu, 0x00002bafu, 0x00050080u, 0x00000006u, 0x00002bb1u, 0x000024ccu, 0x00002bb0u, 0x0003003eu, 0x00002ba2u, 0x00002bb1u, 0x00050041u, 0x00000007u, 0x00002bb2u, 0x00002545u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002bb3u, 0x00002bb2u, 0x00050084u, 0x00000006u, 0x00002bb4u, 0x00002bb3u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00002bb6u, 0x00002bb1u, 0x00002bb4u, 0x0003003eu, 0x00002ba2u, 0x00002bb6u, 0x000500c7u, 0x00000006u, 0x00002bb8u, 0x00002bb6u, 0x00000744u, 0x0003003eu, 0x00002ba2u, 0x00002bb8u, 0x000500c2u, 0x00000006u, 0x00002bbau, 0x00002bb8u, 0x000001a6u, 0x0003003eu, 0x00002ba3u, 0x00002bbau, 0x0004003du, 0x00000006u, 0x00002bbcu, 0x00002baeu, 0x000500c7u, 0x00000006u, 0x00002bbdu, 0x00002bbcu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002bbeu, 0x00002bbdu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00002bc0u, 0x00002bbau, 0x00002bbeu, 0x0003003eu, 0x00002ba3u, 0x00002bc0u, 0x000500c6u, 0x00000006u, 0x00002bc2u, 0x00002bc0u, 0x000002f4u, 0x0003003eu, 0x00002ba3u, 0x00002bc2u, 0x00080041u, 0x00000778u, 0x00002bc5u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002bc2u, 0x0004003du, 0x00000011u, 0x00002bc6u, 0x00002bc5u, 0x00040071u, 0x00000006u, 0x00002bc7u, 0x00002bc6u, 0x0003003eu, 0x00002ba4u, 0x00002bc7u, 0x000500c2u, 0x00000006u, 0x00002bc9u, 0x00002bc7u, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00002bcau, 0x00002bc9u, 0x00000816u, 0x00050080u, 0x00000006u, 0x00002bccu, 0x00002bcau, 0x000002f8u, 0x0003003eu, 0x00002ba5u, 0x00002bccu, 0x000500c6u, 0x00000006u, 0x00002bcfu, 0x00002bccu, 0x0000269eu, 0x0003003eu, 0x00002ba5u, 0x00002bcfu, 0x000500c5u, 0x00000006u, 0x00002bd2u, 0x00000775u, 0x00002bcfu, 0x00080041u, 0x00000778u, 0x00002bd3u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002bd2u, 0x0004003du, 0x00000011u, 0x00002bd4u, 0x00002bd3u, 0x00040071u, 0x00000006u, 0x00002bd5u, 0x00002bd4u, 0x0003003eu, 0x00002ba4u, 0x00002bd5u, 0x000300f7u, 0x00002bd7u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002bd8u, 0x00002bd9u, 0x000200f8u, 0x00002bd9u, 0x0003003eu, 0x00002ba8u, 0x00002bd5u, 0x00060050u, 0x0000026du, 0x00002bf7u, 0x00002bd5u, 0x00002bd5u, 0x00002bd5u, 0x000500c2u, 0x0000026du, 0x00002bf8u, 0x00002bf7u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002bfau, 0x00002bf8u, 0x0000b61fu, 0x0003003eu, 0x00002bf3u, 0x00002bfau, 0x000500c4u, 0x0000026du, 0x00002bfdu, 0x00002bfau, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002c00u, 0x00002bfau, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002c01u, 0x00002bfdu, 0x00002c00u, 0x0003003eu, 0x00002bf3u, 0x00002c01u, 0x000500c7u, 0x00000006u, 0x00002c03u, 0x00002bd5u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002c04u, 0x00002c03u, 0x00000657u, 0x0003003eu, 0x00002bf4u, 0x00002c04u, 0x00040071u, 0x0000065bu, 0x00002c06u, 0x00002c01u, 0x0004007cu, 0x0000065au, 0x00002c07u, 0x00002c06u, 0x00040071u, 0x00000011u, 0x00002c09u, 0x00002c04u, 0x0004007cu, 0x00000012u, 0x00002c0au, 0x00002c09u, 0x00050051u, 0x00000012u, 0x00002c0bu, 0x00002c07u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002c0cu, 0x00002c07u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002c0du, 0x00002c07u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002c0eu, 0x00002c0bu, 0x00002c0cu, 0x00002c0du, 0x00002c0au, 0x0003003eu, 0x00002bf5u, 0x00002c0eu, 0x0003003eu, 0x00002ba6u, 0x00002c0eu, 0x000200f9u, 0x00002bd7u, 0x000200f8u, 0x00002bd8u, 0x0003003eu, 0x00002ba7u, 0x00002bd5u, 0x000500c2u, 0x00000006u, 0x00002be3u, 0x00002bd5u, 0x000001d9u, 0x0003003eu, 0x00002bdfu, 0x00002be3u, 0x000500c7u, 0x00000006u, 0x00002be5u, 0x00002bd5u, 0x00000657u, 0x0003003eu, 0x00002be0u, 0x00002be5u, 0x00040071u, 0x00000011u, 0x00002be7u, 0x00002be3u, 0x0004007cu, 0x00000012u, 0x00002be8u, 0x00002be7u, 0x00040071u, 0x00000011u, 0x00002bf0u, 0x00002be5u, 0x0004007cu, 0x00000012u, 0x00002bf1u, 0x00002bf0u, 0x00070050u, 0x00000013u, 0x00002bf2u, 0x00002be8u, 0x00002be8u, 0x00002be8u, 0x00002bf1u, 0x0003003eu, 0x00002be1u, 0x00002bf2u, 0x0003003eu, 0x00002ba6u, 0x00002bf2u, 0x000200f9u, 0x00002bd7u, 0x000200f8u, 0x00002bd7u, 0x000700f5u, 0x00000013u, 0x000075e3u, 0x00002bf2u, 0x00002bd8u, 0x00002c0eu, 0x00002bd9u, 0x0003003eu, 0x00002ba9u, 0x000075e3u, 0x0003003eu, 0x0000250fu, 0x000075e3u, 0x000200f9u, 0x000026b2u, 0x000200f8u, 0x000026b2u, 0x000700f5u, 0x00000013u, 0x00007827u, 0x00007705u, 0x00002afdu, 0x000075e3u, 0x00002bd7u, 0x000700f5u, 0x00000013u, 0x00007732u, 0x00007705u, 0x00002afdu, 0x000075cdu, 0x00002bd7u, 0x000300f7u, 0x000026c7u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000026c8u, 0x000026c7u, 0x000200f8u, 0x000026c8u, 0x00050050u, 0x00000058u, 0x000026cbu, 0x0000732eu, 0x00002672u, 0x0004007cu, 0x000000abu, 0x000026ccu, 0x000026cbu, 0x0003003eu, 0x00005eecu, 0x000024ccu, 0x0003003eu, 0x00005eedu, 0x000024ceu, 0x0003003eu, 0x0000254au, 0x000019c4u, 0x0003003eu, 0x0000254bu, 0x000026ccu, 0x0003003eu, 0x0000254cu, 0x000002fbu, 0x0003003eu, 0x0000254du, 0x0000269eu, 0x0003003eu, 0x0000254eu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00002c1bu, 0x0000254bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00002c1cu, 0x00002c1bu, 0x00050084u, 0x00000006u, 0x00002c1du, 0x000024ceu, 0x00002c1cu, 0x00050080u, 0x00000006u, 0x00002c1eu, 0x000024ccu, 0x00002c1du, 0x0003003eu, 0x00002c0fu, 0x00002c1eu, 0x00050041u, 0x00000007u, 0x00002c1fu, 0x0000254bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00002c20u, 0x00002c1fu, 0x00050084u, 0x00000006u, 0x00002c21u, 0x00002c20u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00002c23u, 0x00002c1eu, 0x00002c21u, 0x0003003eu, 0x00002c0fu, 0x00002c23u, 0x000500c7u, 0x00000006u, 0x00002c25u, 0x00002c23u, 0x00000744u, 0x0003003eu, 0x00002c0fu, 0x00002c25u, 0x000500c2u, 0x00000006u, 0x00002c27u, 0x00002c25u, 0x000001a6u, 0x0003003eu, 0x00002c10u, 0x00002c27u, 0x0004003du, 0x00000006u, 0x00002c29u, 0x00002c1bu, 0x000500c7u, 0x00000006u, 0x00002c2au, 0x00002c29u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00002c2bu, 0x00002c2au, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00002c2du, 0x00002c27u, 0x00002c2bu, 0x0003003eu, 0x00002c10u, 0x00002c2du, 0x000500c6u, 0x00000006u, 0x00002c2fu, 0x00002c2du, 0x000002f4u, 0x0003003eu, 0x00002c10u, 0x00002c2fu, 0x00080041u, 0x00000778u, 0x00002c32u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002c2fu, 0x0004003du, 0x00000011u, 0x00002c33u, 0x00002c32u, 0x00040071u, 0x00000006u, 0x00002c34u, 0x00002c33u, 0x0003003eu, 0x00002c11u, 0x00002c34u, 0x000500c2u, 0x00000006u, 0x00002c36u, 0x00002c34u, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00002c37u, 0x00002c36u, 0x00000816u, 0x00050080u, 0x00000006u, 0x00002c39u, 0x00002c37u, 0x000002fbu, 0x0003003eu, 0x00002c12u, 0x00002c39u, 0x000500c6u, 0x00000006u, 0x00002c3cu, 0x00002c39u, 0x0000269eu, 0x0003003eu, 0x00002c12u, 0x00002c3cu, 0x000500c5u, 0x00000006u, 0x00002c3fu, 0x00000775u, 0x00002c3cu, 0x00080041u, 0x00000778u, 0x00002c40u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00002c3fu, 0x0004003du, 0x00000011u, 0x00002c41u, 0x00002c40u, 0x00040071u, 0x00000006u, 0x00002c42u, 0x00002c41u, 0x0003003eu, 0x00002c11u, 0x00002c42u, 0x000300f7u, 0x00002c44u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00002c45u, 0x00002c46u, 0x000200f8u, 0x00002c46u, 0x0003003eu, 0x00002c15u, 0x00002c42u, 0x00060050u, 0x0000026du, 0x00002c64u, 0x00002c42u, 0x00002c42u, 0x00002c42u, 0x000500c2u, 0x0000026du, 0x00002c65u, 0x00002c64u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00002c67u, 0x00002c65u, 0x0000b61fu, 0x0003003eu, 0x00002c60u, 0x00002c67u, 0x000500c4u, 0x0000026du, 0x00002c6au, 0x00002c67u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00002c6du, 0x00002c67u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00002c6eu, 0x00002c6au, 0x00002c6du, 0x0003003eu, 0x00002c60u, 0x00002c6eu, 0x000500c7u, 0x00000006u, 0x00002c70u, 0x00002c42u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00002c71u, 0x00002c70u, 0x00000657u, 0x0003003eu, 0x00002c61u, 0x00002c71u, 0x00040071u, 0x0000065bu, 0x00002c73u, 0x00002c6eu, 0x0004007cu, 0x0000065au, 0x00002c74u, 0x00002c73u, 0x00040071u, 0x00000011u, 0x00002c76u, 0x00002c71u, 0x0004007cu, 0x00000012u, 0x00002c77u, 0x00002c76u, 0x00050051u, 0x00000012u, 0x00002c78u, 0x00002c74u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00002c79u, 0x00002c74u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00002c7au, 0x00002c74u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00002c7bu, 0x00002c78u, 0x00002c79u, 0x00002c7au, 0x00002c77u, 0x0003003eu, 0x00002c62u, 0x00002c7bu, 0x0003003eu, 0x00002c13u, 0x00002c7bu, 0x000200f9u, 0x00002c44u, 0x000200f8u, 0x00002c45u, 0x0003003eu, 0x00002c14u, 0x00002c42u, 0x000500c2u, 0x00000006u, 0x00002c50u, 0x00002c42u, 0x000001d9u, 0x0003003eu, 0x00002c4cu, 0x00002c50u, 0x000500c7u, 0x00000006u, 0x00002c52u, 0x00002c42u, 0x00000657u, 0x0003003eu, 0x00002c4du, 0x00002c52u, 0x00040071u, 0x00000011u, 0x00002c54u, 0x00002c50u, 0x0004007cu, 0x00000012u, 0x00002c55u, 0x00002c54u, 0x00040071u, 0x00000011u, 0x00002c5du, 0x00002c52u, 0x0004007cu, 0x00000012u, 0x00002c5eu, 0x00002c5du, 0x00070050u, 0x00000013u, 0x00002c5fu, 0x00002c55u, 0x00002c55u, 0x00002c55u, 0x00002c5eu, 0x0003003eu, 0x00002c4eu, 0x00002c5fu, 0x0003003eu, 0x00002c13u, 0x00002c5fu, 0x000200f9u, 0x00002c44u, 0x000200f8u, 0x00002c44u, 0x000700f5u, 0x00000013u, 0x0000760fu, 0x00002c5fu, 0x00002c45u, 0x00002c7bu, 0x00002c46u, 0x0003003eu, 0x00002c16u, 0x0000760fu, 0x0003003eu, 0x00002517u, 0x0000760fu, 0x000200f9u, 0x000026c7u, 0x000200f8u, 0x000026c7u, 0x000700f5u, 0x00000013u, 0x0000789du, 0x00007705u, 0x000026b2u, 0x0000760fu, 0x00002c44u, 0x000200f9u, 0x000026a3u, 0x000200f8u, 0x000026a3u, 0x000900f5u, 0x00000013u, 0x0000789cu, 0x0000789du, 0x000026c7u, 0x000078a3u, 0x000026fbu, 0x000078a8u, 0x00002729u, 0x000900f5u, 0x00000013u, 0x00007825u, 0x00007827u, 0x000026c7u, 0x0000782cu, 0x000026fbu, 0x00007830u, 0x00002729u, 0x000900f5u, 0x00000013u, 0x000077abu, 0x000075b8u, 0x000026c7u, 0x00007560u, 0x000026fbu, 0x00007502u, 0x00002729u, 0x000900f5u, 0x00000013u, 0x00007730u, 0x00007732u, 0x000026c7u, 0x00007738u, 0x000026fbu, 0x0000773du, 0x00002729u, 0x000200f9u, 0x00002698u, 0x000200f8u, 0x00002698u, 0x000700f5u, 0x00000013u, 0x00007856u, 0x00007705u, 0x00002692u, 0x0000789cu, 0x000026a3u, 0x000700f5u, 0x00000013u, 0x000077dfu, 0x00007705u, 0x00002692u, 0x00007825u, 0x000026a3u, 0x000700f5u, 0x00000013u, 0x00007765u, 0x00007705u, 0x00002692u, 0x000077abu, 0x000026a3u, 0x000700f5u, 0x00000013u, 0x000076e9u, 0x00007705u, 0x00002692u, 0x00007730u, 0x000026a3u, 0x000200f9u, 0x00002691u, 0x000200f8u, 0x00002691u, 0x000700f5u, 0x00000013u, 0x00007855u, 0x00007856u, 0x00002698u, 0x000078adu, 0x00002738u, 0x000700f5u, 0x00000013u, 0x000077deu, 0x000077dfu, 0x00002698u, 0x00007833u, 0x00002738u, 0x000700f5u, 0x00000013u, 0x00007764u, 0x00007765u, 0x00002698u, 0x000077bbu, 0x00002738u, 0x000700f5u, 0x00000013u, 0x000076e8u, 0x000076e9u, 0x00002698u, 0x00007741u, 0x00002738u, 0x000300f7u, 0x00002988u, 0x00000000u, 0x000400fau, 0x00002683u, 0x00002989u, 0x0000298au, 0x000200f8u, 0x0000298au, 0x000300f7u, 0x000029b6u, 0x00000000u, 0x000400fau, 0x0000267bu, 0x000029b7u, 0x000029b8u, 0x000200f8u, 0x000029b8u, 0x000300f7u, 0x000029c6u, 0x00000000u, 0x000400fau, 0x00002685u, 0x000029c7u, 0x000029c8u, 0x000200f8u, 0x000029c8u, 0x0004003du, 0x00000058u, 0x000029cdu, 0x000024ebu, 0x0003003eu, 0x00002620u, 0x000029cdu, 0x000200f9u, 0x000029c6u, 0x000200f8u, 0x000029c7u, 0x0004003du, 0x00000058u, 0x000029c9u, 0x000024ebu, 0x0007004fu, 0x00000058u, 0x000029cau, 0x000029c9u, 0x000029c9u, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x000029ccu, 0x0000b624u, 0x000029cau, 0x0003003eu, 0x00002620u, 0x000029ccu, 0x000200f9u, 0x000029c6u, 0x000200f8u, 0x000029c6u, 0x000700f5u, 0x00000058u, 0x000076e6u, 0x000029ccu, 0x000029c7u, 0x000029cdu, 0x000029c8u, 0x00040072u, 0x0000011du, 0x000029cfu, 0x000076e6u, 0x0003003eu, 0x0000261fu, 0x000029cfu, 0x00050082u, 0x00000013u, 0x000029d2u, 0x000076e8u, 0x00007764u, 0x00050041u, 0x00000133u, 0x000029d3u, 0x0000261fu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x000029d4u, 0x000029d3u, 0x00070050u, 0x00000013u, 0x000029d5u, 0x000029d4u, 0x000029d4u, 0x000029d4u, 0x000029d4u, 0x00050084u, 0x00000013u, 0x000029d6u, 0x000029d2u, 0x000029d5u, 0x0003003eu, 0x00002611u, 0x000029d6u, 0x00050082u, 0x00000013u, 0x000029d9u, 0x000077deu, 0x00007764u, 0x00050041u, 0x00000133u, 0x000029dau, 0x0000261fu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x000029dbu, 0x000029dau, 0x00070050u, 0x00000013u, 0x000029dcu, 0x000029dbu, 0x000029dbu, 0x000029dbu, 0x000029dbu, 0x00050084u, 0x00000013u, 0x000029ddu, 0x000029d9u, 0x000029dcu, 0x00050080u, 0x00000013u, 0x000029dfu, 0x000029d6u, 0x000029ddu, 0x0003003eu, 0x00002611u, 0x000029dfu, 0x00050080u, 0x00000013u, 0x000029e2u, 0x000029dfu, 0x0000b627u, 0x0003003eu, 0x00002611u, 0x000029e2u, 0x000500c3u, 0x00000013u, 0x000029e5u, 0x000029e2u, 0x0000b628u, 0x0003003eu, 0x00002611u, 0x000029e5u, 0x00050080u, 0x00000013u, 0x000029e8u, 0x000029e5u, 0x00007764u, 0x0003003eu, 0x00002611u, 0x000029e8u, 0x000200f9u, 0x000029b6u, 0x000200f8u, 0x000029b7u, 0x00050080u, 0x00000013u, 0x000029bbu, 0x00007764u, 0x000077deu, 0x00050080u, 0x00000013u, 0x000029bdu, 0x000029bbu, 0x000076e8u, 0x00050080u, 0x00000013u, 0x000029bfu, 0x000029bdu, 0x00007855u, 0x00050080u, 0x00000013u, 0x000029c1u, 0x000029bfu, 0x0000b623u, 0x000500c3u, 0x00000013u, 0x000029c3u, 0x000029c1u, 0x0000b623u, 0x0003003eu, 0x00002611u, 0x000029c3u, 0x000200f9u, 0x000029b6u, 0x000200f8u, 0x000029b6u, 0x000700f5u, 0x00000013u, 0x00007991u, 0x000029c3u, 0x000029b7u, 0x000029e8u, 0x000029c6u, 0x000200f9u, 0x00002988u, 0x000200f8u, 0x00002989u, 0x000300f7u, 0x0000298cu, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000298du, 0x0000298eu, 0x000200f8u, 0x0000298eu, 0x0003003eu, 0x00002611u, 0x00007764u, 0x000200f9u, 0x0000298cu, 0x000200f8u, 0x0000298du, 0x000500c7u, 0x00000008u, 0x00002990u, 0x000072f0u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x00002991u, 0x00002990u, 0x000001afu, 0x0004003du, 0x00000008u, 0x00002993u, 0x00002651u, 0x000500c3u, 0x00000008u, 0x00002994u, 0x00002993u, 0x000001a6u, 0x000500c5u, 0x00000008u, 0x00002995u, 0x00002991u, 0x00002994u, 0x0003003eu, 0x00002612u, 0x00002995u, 0x0004003du, 0x00000008u, 0x00002998u, 0x00002653u, 0x00050050u, 0x00000058u, 0x00002999u, 0x00002995u, 0x00002998u, 0x0007004fu, 0x0000011du, 0x0000299bu, 0x00007764u, 0x00007764u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002614u, 0x0000299bu, 0x0007004fu, 0x0000011du, 0x0000299du, 0x000076e8u, 0x000076e8u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002615u, 0x0000299du, 0x0007004fu, 0x0000011du, 0x0000299fu, 0x000077deu, 0x000077deu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002616u, 0x0000299fu, 0x0007004fu, 0x0000011du, 0x000029a1u, 0x00007855u, 0x00007855u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00002617u, 0x000029a1u, 0x0003003eu, 0x00002618u, 0x00002999u, 0x00050041u, 0x00000040u, 0x00003c46u, 0x00002618u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003c47u, 0x00003c46u, 0x00050041u, 0x00000040u, 0x00003c48u, 0x00002618u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003c49u, 0x00003c48u, 0x00050080u, 0x00000008u, 0x00003c4au, 0x00003c47u, 0x00003c49u, 0x0003003eu, 0x00003c40u, 0x00003c4au, 0x000500afu, 0x00000063u, 0x00003c4cu, 0x00003c4au, 0x00000977u, 0x00050050u, 0x00000451u, 0x00003c4fu, 0x00003c4cu, 0x00003c4cu, 0x000600a9u, 0x0000011du, 0x00003c50u, 0x00003c4fu, 0x000029a1u, 0x0000299bu, 0x0003003eu, 0x00003c41u, 0x00003c50u, 0x000300f7u, 0x00003c53u, 0x00000000u, 0x000400fau, 0x00003c4cu, 0x00003c54u, 0x00003c55u, 0x000200f8u, 0x00003c55u, 0x0004003du, 0x00000058u, 0x00003c5au, 0x00002618u, 0x0003003eu, 0x00003c43u, 0x00003c5au, 0x000200f9u, 0x00003c53u, 0x000200f8u, 0x00003c54u, 0x0004003du, 0x00000058u, 0x00003c56u, 0x00002618u, 0x0007004fu, 0x00000058u, 0x00003c57u, 0x00003c56u, 0x00003c56u, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x00003c59u, 0x0000b624u, 0x00003c57u, 0x0003003eu, 0x00003c43u, 0x00003c59u, 0x000200f9u, 0x00003c53u, 0x000200f8u, 0x00003c53u, 0x000700f5u, 0x00000058u, 0x00007934u, 0x00003c59u, 0x00003c54u, 0x00003c5au, 0x00003c55u, 0x00040072u, 0x0000011du, 0x00003c5cu, 0x00007934u, 0x0003003eu, 0x00003c42u, 0x00003c5cu, 0x00050082u, 0x0000011du, 0x00003c5fu, 0x0000299du, 0x00003c50u, 0x00050041u, 0x00000133u, 0x00003c60u, 0x00003c42u, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00003c61u, 0x00003c60u, 0x00050050u, 0x0000011du, 0x00003c62u, 0x00003c61u, 0x00003c61u, 0x00050084u, 0x0000011du, 0x00003c63u, 0x00003c5fu, 0x00003c62u, 0x0003003eu, 0x00003c44u, 0x00003c63u, 0x00050082u, 0x0000011du, 0x00003c66u, 0x0000299fu, 0x00003c50u, 0x00050041u, 0x00000133u, 0x00003c67u, 0x00003c42u, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00003c68u, 0x00003c67u, 0x00050050u, 0x0000011du, 0x00003c69u, 0x00003c68u, 0x00003c68u, 0x00050084u, 0x0000011du, 0x00003c6au, 0x00003c66u, 0x00003c69u, 0x00050080u, 0x0000011du, 0x00003c6cu, 0x00003c63u, 0x00003c6au, 0x0003003eu, 0x00003c44u, 0x00003c6cu, 0x00050080u, 0x0000011du, 0x00003c6fu, 0x00003c6cu, 0x0000b625u, 0x0003003eu, 0x00003c44u, 0x00003c6fu, 0x000500c3u, 0x0000011du, 0x00003c72u, 0x00003c6fu, 0x0000b626u, 0x0003003eu, 0x00003c44u, 0x00003c72u, 0x00050080u, 0x0000011du, 0x00003c75u, 0x00003c72u, 0x00003c50u, 0x0003003eu, 0x00003c44u, 0x00003c75u, 0x0003003eu, 0x00003c45u, 0x00003c75u, 0x0003003eu, 0x00002613u, 0x00003c75u, 0x0007004fu, 0x0000011du, 0x000029a4u, 0x00007764u, 0x00007764u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000261au, 0x000029a4u, 0x0007004fu, 0x0000011du, 0x000029a6u, 0x000076e8u, 0x000076e8u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000261bu, 0x000029a6u, 0x0007004fu, 0x0000011du, 0x000029a8u, 0x000077deu, 0x000077deu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000261cu, 0x000029a8u, 0x0007004fu, 0x0000011du, 0x000029aau, 0x00007855u, 0x00007855u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000261du, 0x000029aau, 0x0004003du, 0x00000058u, 0x000029abu, 0x000024ebu, 0x0003003eu, 0x0000261eu, 0x000029abu, 0x00050041u, 0x00000040u, 0x00003c7du, 0x0000261eu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003c7eu, 0x00003c7du, 0x00050041u, 0x00000040u, 0x00003c7fu, 0x0000261eu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003c80u, 0x00003c7fu, 0x00050080u, 0x00000008u, 0x00003c81u, 0x00003c7eu, 0x00003c80u, 0x0003003eu, 0x00003c77u, 0x00003c81u, 0x000500afu, 0x00000063u, 0x00003c83u, 0x00003c81u, 0x00000977u, 0x00050050u, 0x00000451u, 0x00003c86u, 0x00003c83u, 0x00003c83u, 0x000600a9u, 0x0000011du, 0x00003c87u, 0x00003c86u, 0x000029aau, 0x000029a4u, 0x0003003eu, 0x00003c78u, 0x00003c87u, 0x000300f7u, 0x00003c8au, 0x00000000u, 0x000400fau, 0x00003c83u, 0x00003c8bu, 0x00003c8cu, 0x000200f8u, 0x00003c8cu, 0x0004003du, 0x00000058u, 0x00003c91u, 0x0000261eu, 0x0003003eu, 0x00003c7au, 0x00003c91u, 0x000200f9u, 0x00003c8au, 0x000200f8u, 0x00003c8bu, 0x0004003du, 0x00000058u, 0x00003c8du, 0x0000261eu, 0x0007004fu, 0x00000058u, 0x00003c8eu, 0x00003c8du, 0x00003c8du, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x00003c90u, 0x0000b624u, 0x00003c8eu, 0x0003003eu, 0x00003c7au, 0x00003c90u, 0x000200f9u, 0x00003c8au, 0x000200f8u, 0x00003c8au, 0x000700f5u, 0x00000058u, 0x0000793cu, 0x00003c90u, 0x00003c8bu, 0x00003c91u, 0x00003c8cu, 0x00040072u, 0x0000011du, 0x00003c93u, 0x0000793cu, 0x0003003eu, 0x00003c79u, 0x00003c93u, 0x00050082u, 0x0000011du, 0x00003c96u, 0x000029a6u, 0x00003c87u, 0x00050041u, 0x00000133u, 0x00003c97u, 0x00003c79u, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00003c98u, 0x00003c97u, 0x00050050u, 0x0000011du, 0x00003c99u, 0x00003c98u, 0x00003c98u, 0x00050084u, 0x0000011du, 0x00003c9au, 0x00003c96u, 0x00003c99u, 0x0003003eu, 0x00003c7bu, 0x00003c9au, 0x00050082u, 0x0000011du, 0x00003c9du, 0x000029a8u, 0x00003c87u, 0x00050041u, 0x00000133u, 0x00003c9eu, 0x00003c79u, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00003c9fu, 0x00003c9eu, 0x00050050u, 0x0000011du, 0x00003ca0u, 0x00003c9fu, 0x00003c9fu, 0x00050084u, 0x0000011du, 0x00003ca1u, 0x00003c9du, 0x00003ca0u, 0x00050080u, 0x0000011du, 0x00003ca3u, 0x00003c9au, 0x00003ca1u, 0x0003003eu, 0x00003c7bu, 0x00003ca3u, 0x00050080u, 0x0000011du, 0x00003ca6u, 0x00003ca3u, 0x0000b625u, 0x0003003eu, 0x00003c7bu, 0x00003ca6u, 0x000500c3u, 0x0000011du, 0x00003ca9u, 0x00003ca6u, 0x0000b626u, 0x0003003eu, 0x00003c7bu, 0x00003ca9u, 0x00050080u, 0x0000011du, 0x00003cacu, 0x00003ca9u, 0x00003c87u, 0x0003003eu, 0x00003c7bu, 0x00003cacu, 0x0003003eu, 0x00003c7cu, 0x00003cacu, 0x0003003eu, 0x00002619u, 0x00003cacu, 0x00050051u, 0x00000012u, 0x000029afu, 0x00003c75u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000029b0u, 0x00003c75u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000029b1u, 0x00003cacu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000029b2u, 0x00003cacu, 0x00000001u, 0x00070050u, 0x00000013u, 0x000029b3u, 0x000029afu, 0x000029b0u, 0x000029b1u, 0x000029b2u, 0x0003003eu, 0x00002611u, 0x000029b3u, 0x000200f9u, 0x0000298cu, 0x000200f8u, 0x0000298cu, 0x000700f5u, 0x00000013u, 0x00007990u, 0x000029b3u, 0x00003c8au, 0x00007764u, 0x0000298eu, 0x000200f9u, 0x00002988u, 0x000200f8u, 0x00002988u, 0x000700f5u, 0x00000013u, 0x0000798fu, 0x00007990u, 0x0000298cu, 0x00007991u, 0x000029b6u, 0x0003003eu, 0x00002621u, 0x0000798fu, 0x0003003eu, 0x00001933u, 0x0000798fu, 0x000400a8u, 0x00000063u, 0x00001b0au, 0x000019edu, 0x000400a8u, 0x00000063u, 0x00001b0cu, 0x00001a29u, 0x000500a7u, 0x00000063u, 0x00001b0du, 0x00001b0au, 0x00001b0cu, 0x000300f7u, 0x00001b0eu, 0x00000000u, 0x000400fau, 0x00001b0du, 0x00001b0fu, 0x00001b0eu, 0x000200f8u, 0x00001b0fu, 0x0003003eu, 0x0000193du, 0x0000798fu, 0x0003003eu, 0x0000193eu, 0x000021a8u, 0x00040072u, 0x00000009u, 0x00003cb5u, 0x0000798fu, 0x000600cau, 0x00000009u, 0x00003cb6u, 0x00003cb5u, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00003caeu, 0x00003cb6u, 0x00050041u, 0x00000040u, 0x00003cb7u, 0x00003caeu, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00003cb8u, 0x00003cb7u, 0x00050041u, 0x00000133u, 0x00003cb9u, 0x0000193eu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00003cbau, 0x00003cb9u, 0x00040072u, 0x00000008u, 0x00003cbbu, 0x00003cbau, 0x00050041u, 0x00000040u, 0x00003cbcu, 0x00003caeu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003cbdu, 0x00003cbcu, 0x00050084u, 0x00000008u, 0x00003cbeu, 0x00003cbbu, 0x00003cbdu, 0x00050080u, 0x00000008u, 0x00003cbfu, 0x00003cbeu, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00003cc0u, 0x00003cbfu, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00003cc1u, 0x00003cb8u, 0x00003cc0u, 0x0003003eu, 0x00003cafu, 0x00003cc1u, 0x0004003du, 0x00000008u, 0x00003cc3u, 0x00003cb7u, 0x00050041u, 0x00000133u, 0x00003cc4u, 0x0000193eu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00003cc5u, 0x00003cc4u, 0x00040072u, 0x00000008u, 0x00003cc6u, 0x00003cc5u, 0x00050041u, 0x00000040u, 0x00003cc7u, 0x00003caeu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003cc8u, 0x00003cc7u, 0x00050084u, 0x00000008u, 0x00003cc9u, 0x00003cc6u, 0x00003cc8u, 0x00050041u, 0x00000133u, 0x00003ccau, 0x0000193eu, 0x000002f8u, 0x0004003du, 0x00000012u, 0x00003ccbu, 0x00003ccau, 0x00040072u, 0x00000008u, 0x00003cccu, 0x00003ccbu, 0x0004003du, 0x00000008u, 0x00003cceu, 0x00003cbcu, 0x00050084u, 0x00000008u, 0x00003ccfu, 0x00003cccu, 0x00003cceu, 0x00050080u, 0x00000008u, 0x00003cd0u, 0x00003cc9u, 0x00003ccfu, 0x00050080u, 0x00000008u, 0x00003cd1u, 0x00003cd0u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00003cd2u, 0x00003cd1u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00003cd3u, 0x00003cc3u, 0x00003cd2u, 0x0003003eu, 0x00003cb0u, 0x00003cd3u, 0x0004003du, 0x00000008u, 0x00003cd5u, 0x00003cb7u, 0x00050041u, 0x00000133u, 0x00003cd6u, 0x0000193eu, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00003cd7u, 0x00003cd6u, 0x00040072u, 0x00000008u, 0x00003cd8u, 0x00003cd7u, 0x0004003du, 0x00000008u, 0x00003cdau, 0x00003cc7u, 0x00050084u, 0x00000008u, 0x00003cdbu, 0x00003cd8u, 0x00003cdau, 0x00050080u, 0x00000008u, 0x00003cdcu, 0x00003cdbu, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00003cddu, 0x00003cdcu, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00003cdeu, 0x00003cd5u, 0x00003cddu, 0x0003003eu, 0x00003cb1u, 0x00003cdeu, 0x0004003du, 0x00000008u, 0x00003ce0u, 0x00003cb7u, 0x0003003eu, 0x00003cb2u, 0x00003ce0u, 0x00040072u, 0x00000012u, 0x00003ce2u, 0x00003cc1u, 0x00040072u, 0x00000012u, 0x00003ce4u, 0x00003cd3u, 0x00040072u, 0x00000012u, 0x00003ce6u, 0x00003cdeu, 0x00040072u, 0x00000012u, 0x00003ce8u, 0x00003ce0u, 0x00070050u, 0x00000013u, 0x00003ce9u, 0x00003ce2u, 0x00003ce4u, 0x00003ce6u, 0x00003ce8u, 0x0003003eu, 0x00003cb3u, 0x00003ce9u, 0x0003003eu, 0x00001933u, 0x00003ce9u, 0x000200f9u, 0x00001b0eu, 0x000200f8u, 0x00001b0eu, 0x000700f5u, 0x00000013u, 0x00008884u, 0x0000798fu, 0x00002988u, 0x00003ce9u, 0x00001b0fu, 0x000200f9u, 0x00001af4u, 0x000200f8u, 0x00001af4u, 0x000700f5u, 0x00000013u, 0x00008850u, 0x00007705u, 0x00001ae2u, 0x00008884u, 0x00001b0eu, 0x000300f7u, 0x00001b15u, 0x00000000u, 0x000400fau, 0x00001a20u, 0x00001b16u, 0x00001b15u, 0x000200f8u, 0x00001b16u, 0x00050080u, 0x00000008u, 0x00001b1fu, 0x000019aeu, 0x000001a6u, 0x00050080u, 0x00000008u, 0x00001b20u, 0x000019a9u, 0x00001b1fu, 0x00070041u, 0x00000778u, 0x00001b21u, 0x00000229u, 0x0000019cu, 0x00001b20u, 0x000001d9u, 0x0004003du, 0x00000011u, 0x00001b22u, 0x00001b21u, 0x00040071u, 0x00000006u, 0x00001b23u, 0x00001b22u, 0x000500abu, 0x00000063u, 0x00001b24u, 0x00001b23u, 0x0000028eu, 0x0003003eu, 0x0000193fu, 0x00001b24u, 0x00040072u, 0x00000008u, 0x00001b27u, 0x00001c3fu, 0x000500afu, 0x00000063u, 0x00001b28u, 0x00001b27u, 0x000001d9u, 0x0003003eu, 0x00001940u, 0x00001b28u, 0x000300f7u, 0x00001b2bu, 0x00000000u, 0x000400fau, 0x00001a3du, 0x00001b2cu, 0x00001b2du, 0x000200f8u, 0x00001b2du, 0x0003003eu, 0x00001942u, 0x00001c3bu, 0x000200f9u, 0x00001b2bu, 0x000200f8u, 0x00001b2cu, 0x0003003eu, 0x00001942u, 0x00001c3du, 0x000200f9u, 0x00001b2bu, 0x000200f8u, 0x00001b2bu, 0x000600a9u, 0x00000008u, 0x0000b640u, 0x00001a3du, 0x00001c3du, 0x00001c3bu, 0x000500aau, 0x00000063u, 0x00001b33u, 0x00006eb2u, 0x0000b640u, 0x0003003eu, 0x00001941u, 0x00001b33u, 0x000500a7u, 0x00000063u, 0x00001b36u, 0x00001b33u, 0x00001b28u, 0x000500a7u, 0x00000063u, 0x00001b38u, 0x00001b36u, 0x00001b24u, 0x000300f7u, 0x00001b39u, 0x00000000u, 0x000400fau, 0x00001b38u, 0x00001b3au, 0x00001b3bu, 0x000200f8u, 0x00001b3bu, 0x00050084u, 0x00000008u, 0x00001b57u, 0x00001aaeu, 0x00000556u, 0x00050080u, 0x00000008u, 0x00001b58u, 0x00001aacu, 0x00001b57u, 0x0003003eu, 0x00001948u, 0x00001c33u, 0x0003003eu, 0x00001949u, 0x00001c53u, 0x0003003eu, 0x0000194au, 0x00001b58u, 0x0003003eu, 0x0000194bu, 0x000019f6u, 0x0008004fu, 0x0000005du, 0x00003d79u, 0x00001c33u, 0x00001c33u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0008004fu, 0x0000005du, 0x00003d7bu, 0x00001c53u, 0x00001c53u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00003d7du, 0x00003d7bu, 0x0000b614u, 0x000500c3u, 0x0000005du, 0x00003d7fu, 0x00003d7du, 0x0000220eu, 0x00060050u, 0x0000005du, 0x00003d81u, 0x00001b58u, 0x00001b58u, 0x00001b58u, 0x00050084u, 0x0000005du, 0x00003d82u, 0x00003d7fu, 0x00003d81u, 0x00050080u, 0x0000005du, 0x00003d83u, 0x00003d79u, 0x00003d82u, 0x0003003eu, 0x00003d71u, 0x00003d83u, 0x000500c3u, 0x0000005du, 0x00003d86u, 0x00003d83u, 0x0000b615u, 0x0003003eu, 0x00003d71u, 0x00003d86u, 0x000300f7u, 0x00003d88u, 0x00000000u, 0x000400fau, 0x000019f6u, 0x00003d89u, 0x00003d8au, 0x000200f8u, 0x00003d8au, 0x0003003eu, 0x00003d76u, 0x00003d86u, 0x0007004fu, 0x00000058u, 0x00003e18u, 0x00003d86u, 0x00003d86u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003e16u, 0x00003e18u, 0x0003003eu, 0x00003d72u, 0x00003e18u, 0x000200f9u, 0x00003d88u, 0x000200f8u, 0x00003d89u, 0x0003003eu, 0x00003d74u, 0x00003d86u, 0x00050041u, 0x00000040u, 0x00003d9cu, 0x00003d74u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00003d9du, 0x00003d9cu, 0x0003003eu, 0x00003d92u, 0x00003d9du, 0x000500b3u, 0x00000063u, 0x00003d9fu, 0x00003d9du, 0x0000019cu, 0x0003003eu, 0x00003d93u, 0x00003d9fu, 0x000500c7u, 0x00000008u, 0x00003da1u, 0x00003d9du, 0x00000424u, 0x0003003eu, 0x00003d92u, 0x00003da1u, 0x0003003eu, 0x00003d95u, 0x00003da1u, 0x0006000cu, 0x00000008u, 0x00003dfdu, 0x00000001u, 0x0000004au, 0x00003da1u, 0x00050082u, 0x00000008u, 0x00003dfeu, 0x000001ecu, 0x00003dfdu, 0x0007000cu, 0x00000008u, 0x00003dffu, 0x00000001u, 0x00000027u, 0x00003dfeu, 0x000001ecu, 0x0003003eu, 0x00003df5u, 0x00003dffu, 0x000500c4u, 0x00000008u, 0x00003e02u, 0x00003da1u, 0x00003dffu, 0x000500c7u, 0x00000008u, 0x00003e03u, 0x00003e02u, 0x0000033fu, 0x0003003eu, 0x00003df6u, 0x00003e03u, 0x000500c7u, 0x00000008u, 0x00003e05u, 0x00003e03u, 0x00000311u, 0x0003003eu, 0x00003df7u, 0x00003e05u, 0x000500c3u, 0x00000008u, 0x00003e07u, 0x00003e03u, 0x000001d9u, 0x0003003eu, 0x00003df9u, 0x00000404u, 0x00050041u, 0x0000011eu, 0x00003e08u, 0x00003df9u, 0x00003e07u, 0x0004003du, 0x0000011du, 0x00003e09u, 0x00003e08u, 0x00040072u, 0x00000058u, 0x00003e0au, 0x00003e09u, 0x0003003eu, 0x00003df8u, 0x00003e0au, 0x00050041u, 0x00000040u, 0x00003e0bu, 0x00003df8u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003e0cu, 0x00003e0bu, 0x00050084u, 0x00000008u, 0x00003e0eu, 0x00003e0cu, 0x00003e05u, 0x000500c3u, 0x00000008u, 0x00003e0fu, 0x00003e0eu, 0x000001dfu, 0x00050041u, 0x00000040u, 0x00003e10u, 0x00003df8u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003e11u, 0x00003e10u, 0x00050080u, 0x00000008u, 0x00003e12u, 0x00003e0fu, 0x00003e11u, 0x0003003eu, 0x00003dfau, 0x00003e12u, 0x00050050u, 0x00000058u, 0x00003e15u, 0x00003e12u, 0x00003dffu, 0x0003003eu, 0x00003dfbu, 0x00003e15u, 0x0003003eu, 0x00003d94u, 0x00003e15u, 0x00050041u, 0x00000040u, 0x00003da4u, 0x00003d94u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003da5u, 0x00003da4u, 0x0003003eu, 0x00003d96u, 0x00003da5u, 0x0004003du, 0x0000005du, 0x00003da6u, 0x00003d74u, 0x0007004fu, 0x00000058u, 0x00003da7u, 0x00003da6u, 0x00003da6u, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x00003da8u, 0x00003d94u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003da9u, 0x00003da8u, 0x00050050u, 0x00000058u, 0x00003daau, 0x00003da9u, 0x00003da9u, 0x00050084u, 0x00000058u, 0x00003dabu, 0x00003da7u, 0x00003daau, 0x0003003eu, 0x00003d97u, 0x00003dabu, 0x000500c3u, 0x00000008u, 0x00003dadu, 0x00000437u, 0x00003da5u, 0x0004007eu, 0x00000008u, 0x00003daeu, 0x00003dadu, 0x000500c7u, 0x00000008u, 0x00003dafu, 0x00000436u, 0x00003daeu, 0x0003003eu, 0x00003d98u, 0x00003dafu, 0x0004003du, 0x00000058u, 0x00003db0u, 0x00003d97u, 0x00050050u, 0x00000058u, 0x00003db2u, 0x00003dafu, 0x00003dafu, 0x000500c7u, 0x00000058u, 0x00003db3u, 0x00003db0u, 0x00003db2u, 0x0003003eu, 0x00003d99u, 0x00003db3u, 0x000500abu, 0x00000063u, 0x00003db5u, 0x00003da5u, 0x000001ecu, 0x000300f7u, 0x00003db6u, 0x00000000u, 0x000400fau, 0x00003db5u, 0x00003db7u, 0x00003db8u, 0x000200f8u, 0x00003db8u, 0x0004003du, 0x00000058u, 0x00003dbeu, 0x00003d97u, 0x000500c4u, 0x00000058u, 0x00003dc0u, 0x00003dbeu, 0x0000b619u, 0x0003003eu, 0x00003d9au, 0x00003dc0u, 0x000200f9u, 0x00003db6u, 0x000200f8u, 0x00003db7u, 0x0004003du, 0x00000058u, 0x00003db9u, 0x00003d97u, 0x00050082u, 0x00000008u, 0x00003dbbu, 0x000001e9u, 0x00003da5u, 0x00050050u, 0x00000058u, 0x00003dbcu, 0x00003dbbu, 0x00003dbbu, 0x000500c3u, 0x00000058u, 0x00003dbdu, 0x00003db9u, 0x00003dbcu, 0x0003003eu, 0x00003d97u, 0x00003dbdu, 0x0003003eu, 0x00003d9au, 0x00003dbdu, 0x000200f9u, 0x00003db6u, 0x000200f8u, 0x00003db6u, 0x0004003du, 0x00000058u, 0x00003dc1u, 0x00003d99u, 0x000500abu, 0x00000451u, 0x00003dc2u, 0x00003dc1u, 0x00000450u, 0x0004009au, 0x00000063u, 0x00003dc3u, 0x00003dc2u, 0x000300f7u, 0x00003dc4u, 0x00000000u, 0x000400fau, 0x00003dc3u, 0x00003dc5u, 0x00003dc4u, 0x000200f8u, 0x00003dc5u, 0x00050041u, 0x00000040u, 0x00003dc6u, 0x00003d99u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003dc7u, 0x00003dc6u, 0x000500abu, 0x00000063u, 0x00003dc9u, 0x00003dc7u, 0x00003dafu, 0x000300f7u, 0x00003dcau, 0x00000000u, 0x000400fau, 0x00003dc9u, 0x00003dcbu, 0x00003dcau, 0x000200f8u, 0x00003dcbu, 0x0004003du, 0x00000008u, 0x00003dcdu, 0x00003dc6u, 0x000500abu, 0x00000063u, 0x00003dceu, 0x00003dcdu, 0x0000019cu, 0x000200f9u, 0x00003dcau, 0x000200f8u, 0x00003dcau, 0x000700f5u, 0x00000063u, 0x00003dcfu, 0x00003dc9u, 0x00003dc5u, 0x00003dceu, 0x00003dcbu, 0x000300f7u, 0x00003dd0u, 0x00000000u, 0x000400fau, 0x00003dcfu, 0x00003dd1u, 0x00003dd0u, 0x000200f8u, 0x00003dd1u, 0x00050041u, 0x00000040u, 0x00003dd2u, 0x00003d97u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003dd3u, 0x00003dd2u, 0x000500c7u, 0x00000008u, 0x00003dd4u, 0x00003dd3u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00003dd5u, 0x00003dd4u, 0x0000019cu, 0x000300f7u, 0x00003dd6u, 0x00000000u, 0x000400fau, 0x00003dd5u, 0x00003dd7u, 0x00003dd8u, 0x000200f8u, 0x00003dd8u, 0x00050041u, 0x00000040u, 0x00003ddau, 0x00003d9au, 0x0000028eu, 0x0003003eu, 0x00003ddau, 0x0000046au, 0x000200f9u, 0x00003dd6u, 0x000200f8u, 0x00003dd7u, 0x00050041u, 0x00000040u, 0x00003dd9u, 0x00003d9au, 0x0000028eu, 0x0003003eu, 0x00003dd9u, 0x00000424u, 0x000200f9u, 0x00003dd6u, 0x000200f8u, 0x00003dd6u, 0x0003003eu, 0x00003d75u, 0x0000046cu, 0x000200f9u, 0x00003dd0u, 0x000200f8u, 0x00003dd0u, 0x000600a9u, 0x00000063u, 0x0000b641u, 0x00003dcfu, 0x0000046cu, 0x00008213u, 0x00050041u, 0x00000040u, 0x00003ddbu, 0x00003d99u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003ddcu, 0x00003ddbu, 0x000500abu, 0x00000063u, 0x00003ddeu, 0x00003ddcu, 0x00003dafu, 0x000300f7u, 0x00003ddfu, 0x00000000u, 0x000400fau, 0x00003ddeu, 0x00003de0u, 0x00003ddfu, 0x000200f8u, 0x00003de0u, 0x0004003du, 0x00000008u, 0x00003de2u, 0x00003ddbu, 0x000500abu, 0x00000063u, 0x00003de3u, 0x00003de2u, 0x0000019cu, 0x000200f9u, 0x00003ddfu, 0x000200f8u, 0x00003ddfu, 0x000700f5u, 0x00000063u, 0x00003de4u, 0x00003ddeu, 0x00003dd0u, 0x00003de3u, 0x00003de0u, 0x000300f7u, 0x00003de5u, 0x00000000u, 0x000400fau, 0x00003de4u, 0x00003de6u, 0x00003de5u, 0x000200f8u, 0x00003de6u, 0x00050041u, 0x00000040u, 0x00003de7u, 0x00003d97u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003de8u, 0x00003de7u, 0x000500c7u, 0x00000008u, 0x00003de9u, 0x00003de8u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00003deau, 0x00003de9u, 0x0000019cu, 0x000300f7u, 0x00003debu, 0x00000000u, 0x000400fau, 0x00003deau, 0x00003decu, 0x00003dedu, 0x000200f8u, 0x00003dedu, 0x00050041u, 0x00000040u, 0x00003defu, 0x00003d9au, 0x000002f4u, 0x0003003eu, 0x00003defu, 0x0000046au, 0x000200f9u, 0x00003debu, 0x000200f8u, 0x00003decu, 0x00050041u, 0x00000040u, 0x00003deeu, 0x00003d9au, 0x000002f4u, 0x0003003eu, 0x00003deeu, 0x00000424u, 0x000200f9u, 0x00003debu, 0x000200f8u, 0x00003debu, 0x0003003eu, 0x00003d75u, 0x0000046cu, 0x000200f9u, 0x00003de5u, 0x000200f8u, 0x00003de5u, 0x000600a9u, 0x00000063u, 0x0000b642u, 0x00003de4u, 0x0000046cu, 0x0000b641u, 0x000200f9u, 0x00003dc4u, 0x000200f8u, 0x00003dc4u, 0x000700f5u, 0x00000063u, 0x0000829au, 0x00008213u, 0x00003db6u, 0x0000b642u, 0x00003de5u, 0x000300f7u, 0x00003df1u, 0x00000000u, 0x000400fau, 0x00003d9fu, 0x00003df2u, 0x00003df1u, 0x000200f8u, 0x00003df2u, 0x0003003eu, 0x00003d9au, 0x00000485u, 0x0003003eu, 0x00003d75u, 0x0000046cu, 0x000200f9u, 0x00003df1u, 0x000200f8u, 0x00003df1u, 0x000600a9u, 0x00000063u, 0x0000b643u, 0x00003d9fu, 0x0000046cu, 0x0000829au, 0x0004003du, 0x00000058u, 0x00003df3u, 0x00003d9au, 0x0008000cu, 0x00000058u, 0x00003df4u, 0x00000001u, 0x0000002du, 0x00003df3u, 0x00000488u, 0x0000048au, 0x0003003eu, 0x00003d9bu, 0x00003df4u, 0x0003003eu, 0x00003d73u, 0x0000b643u, 0x0003003eu, 0x00003d72u, 0x00003df4u, 0x000200f9u, 0x00003d88u, 0x000200f8u, 0x00003d88u, 0x000700f5u, 0x00000058u, 0x000082a0u, 0x00003df4u, 0x00003df1u, 0x00003e18u, 0x00003d8au, 0x0003003eu, 0x00003d77u, 0x000082a0u, 0x0003003eu, 0x0000190eu, 0x000082a0u, 0x000200f9u, 0x00001b39u, 0x000200f8u, 0x00001b3au, 0x00070041u, 0x00001704u, 0x00001b46u, 0x00000229u, 0x0000019cu, 0x00001b20u, 0x000001a6u, 0x0004003du, 0x00000009u, 0x00001b47u, 0x00001b46u, 0x0008004fu, 0x0000005du, 0x00001b48u, 0x00001b47u, 0x00001b47u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x0000005du, 0x00001b4au, 0x00001b48u, 0x0000b615u, 0x0003003eu, 0x00001943u, 0x00001b4au, 0x000300f7u, 0x00001b4cu, 0x00000000u, 0x000400fau, 0x000019f6u, 0x00001b4du, 0x00001b4eu, 0x000200f8u, 0x00001b4eu, 0x0003003eu, 0x00001947u, 0x00001b4au, 0x0007004fu, 0x00000058u, 0x00003d70u, 0x00001b4au, 0x00001b4au, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003d6eu, 0x00003d70u, 0x0003003eu, 0x0000190eu, 0x00003d70u, 0x000200f9u, 0x00001b4cu, 0x000200f8u, 0x00001b4du, 0x0003003eu, 0x00001945u, 0x00001b4au, 0x00050041u, 0x00000040u, 0x00003cf4u, 0x00001945u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00003cf5u, 0x00003cf4u, 0x0003003eu, 0x00003ceau, 0x00003cf5u, 0x000500b3u, 0x00000063u, 0x00003cf7u, 0x00003cf5u, 0x0000019cu, 0x0003003eu, 0x00003cebu, 0x00003cf7u, 0x000500c7u, 0x00000008u, 0x00003cf9u, 0x00003cf5u, 0x00000424u, 0x0003003eu, 0x00003ceau, 0x00003cf9u, 0x0003003eu, 0x00003cedu, 0x00003cf9u, 0x0006000cu, 0x00000008u, 0x00003d55u, 0x00000001u, 0x0000004au, 0x00003cf9u, 0x00050082u, 0x00000008u, 0x00003d56u, 0x000001ecu, 0x00003d55u, 0x0007000cu, 0x00000008u, 0x00003d57u, 0x00000001u, 0x00000027u, 0x00003d56u, 0x000001ecu, 0x0003003eu, 0x00003d4du, 0x00003d57u, 0x000500c4u, 0x00000008u, 0x00003d5au, 0x00003cf9u, 0x00003d57u, 0x000500c7u, 0x00000008u, 0x00003d5bu, 0x00003d5au, 0x0000033fu, 0x0003003eu, 0x00003d4eu, 0x00003d5bu, 0x000500c7u, 0x00000008u, 0x00003d5du, 0x00003d5bu, 0x00000311u, 0x0003003eu, 0x00003d4fu, 0x00003d5du, 0x000500c3u, 0x00000008u, 0x00003d5fu, 0x00003d5bu, 0x000001d9u, 0x0003003eu, 0x00003d51u, 0x00000404u, 0x00050041u, 0x0000011eu, 0x00003d60u, 0x00003d51u, 0x00003d5fu, 0x0004003du, 0x0000011du, 0x00003d61u, 0x00003d60u, 0x00040072u, 0x00000058u, 0x00003d62u, 0x00003d61u, 0x0003003eu, 0x00003d50u, 0x00003d62u, 0x00050041u, 0x00000040u, 0x00003d63u, 0x00003d50u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003d64u, 0x00003d63u, 0x00050084u, 0x00000008u, 0x00003d66u, 0x00003d64u, 0x00003d5du, 0x000500c3u, 0x00000008u, 0x00003d67u, 0x00003d66u, 0x000001dfu, 0x00050041u, 0x00000040u, 0x00003d68u, 0x00003d50u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003d69u, 0x00003d68u, 0x00050080u, 0x00000008u, 0x00003d6au, 0x00003d67u, 0x00003d69u, 0x0003003eu, 0x00003d52u, 0x00003d6au, 0x00050050u, 0x00000058u, 0x00003d6du, 0x00003d6au, 0x00003d57u, 0x0003003eu, 0x00003d53u, 0x00003d6du, 0x0003003eu, 0x00003cecu, 0x00003d6du, 0x00050041u, 0x00000040u, 0x00003cfcu, 0x00003cecu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003cfdu, 0x00003cfcu, 0x0003003eu, 0x00003ceeu, 0x00003cfdu, 0x0004003du, 0x0000005du, 0x00003cfeu, 0x00001945u, 0x0007004fu, 0x00000058u, 0x00003cffu, 0x00003cfeu, 0x00003cfeu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x00003d00u, 0x00003cecu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003d01u, 0x00003d00u, 0x00050050u, 0x00000058u, 0x00003d02u, 0x00003d01u, 0x00003d01u, 0x00050084u, 0x00000058u, 0x00003d03u, 0x00003cffu, 0x00003d02u, 0x0003003eu, 0x00003cefu, 0x00003d03u, 0x000500c3u, 0x00000008u, 0x00003d05u, 0x00000437u, 0x00003cfdu, 0x0004007eu, 0x00000008u, 0x00003d06u, 0x00003d05u, 0x000500c7u, 0x00000008u, 0x00003d07u, 0x00000436u, 0x00003d06u, 0x0003003eu, 0x00003cf0u, 0x00003d07u, 0x0004003du, 0x00000058u, 0x00003d08u, 0x00003cefu, 0x00050050u, 0x00000058u, 0x00003d0au, 0x00003d07u, 0x00003d07u, 0x000500c7u, 0x00000058u, 0x00003d0bu, 0x00003d08u, 0x00003d0au, 0x0003003eu, 0x00003cf1u, 0x00003d0bu, 0x000500abu, 0x00000063u, 0x00003d0du, 0x00003cfdu, 0x000001ecu, 0x000300f7u, 0x00003d0eu, 0x00000000u, 0x000400fau, 0x00003d0du, 0x00003d0fu, 0x00003d10u, 0x000200f8u, 0x00003d10u, 0x0004003du, 0x00000058u, 0x00003d16u, 0x00003cefu, 0x000500c4u, 0x00000058u, 0x00003d18u, 0x00003d16u, 0x0000b619u, 0x0003003eu, 0x00003cf2u, 0x00003d18u, 0x000200f9u, 0x00003d0eu, 0x000200f8u, 0x00003d0fu, 0x0004003du, 0x00000058u, 0x00003d11u, 0x00003cefu, 0x00050082u, 0x00000008u, 0x00003d13u, 0x000001e9u, 0x00003cfdu, 0x00050050u, 0x00000058u, 0x00003d14u, 0x00003d13u, 0x00003d13u, 0x000500c3u, 0x00000058u, 0x00003d15u, 0x00003d11u, 0x00003d14u, 0x0003003eu, 0x00003cefu, 0x00003d15u, 0x0003003eu, 0x00003cf2u, 0x00003d15u, 0x000200f9u, 0x00003d0eu, 0x000200f8u, 0x00003d0eu, 0x0004003du, 0x00000058u, 0x00003d19u, 0x00003cf1u, 0x000500abu, 0x00000451u, 0x00003d1au, 0x00003d19u, 0x00000450u, 0x0004009au, 0x00000063u, 0x00003d1bu, 0x00003d1au, 0x000300f7u, 0x00003d1cu, 0x00000000u, 0x000400fau, 0x00003d1bu, 0x00003d1du, 0x00003d1cu, 0x000200f8u, 0x00003d1du, 0x00050041u, 0x00000040u, 0x00003d1eu, 0x00003cf1u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003d1fu, 0x00003d1eu, 0x000500abu, 0x00000063u, 0x00003d21u, 0x00003d1fu, 0x00003d07u, 0x000300f7u, 0x00003d22u, 0x00000000u, 0x000400fau, 0x00003d21u, 0x00003d23u, 0x00003d22u, 0x000200f8u, 0x00003d23u, 0x0004003du, 0x00000008u, 0x00003d25u, 0x00003d1eu, 0x000500abu, 0x00000063u, 0x00003d26u, 0x00003d25u, 0x0000019cu, 0x000200f9u, 0x00003d22u, 0x000200f8u, 0x00003d22u, 0x000700f5u, 0x00000063u, 0x00003d27u, 0x00003d21u, 0x00003d1du, 0x00003d26u, 0x00003d23u, 0x000300f7u, 0x00003d28u, 0x00000000u, 0x000400fau, 0x00003d27u, 0x00003d29u, 0x00003d28u, 0x000200f8u, 0x00003d29u, 0x00050041u, 0x00000040u, 0x00003d2au, 0x00003cefu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003d2bu, 0x00003d2au, 0x000500c7u, 0x00000008u, 0x00003d2cu, 0x00003d2bu, 0x00000437u, 0x000500aau, 0x00000063u, 0x00003d2du, 0x00003d2cu, 0x0000019cu, 0x000300f7u, 0x00003d2eu, 0x00000000u, 0x000400fau, 0x00003d2du, 0x00003d2fu, 0x00003d30u, 0x000200f8u, 0x00003d30u, 0x00050041u, 0x00000040u, 0x00003d32u, 0x00003cf2u, 0x0000028eu, 0x0003003eu, 0x00003d32u, 0x0000046au, 0x000200f9u, 0x00003d2eu, 0x000200f8u, 0x00003d2fu, 0x00050041u, 0x00000040u, 0x00003d31u, 0x00003cf2u, 0x0000028eu, 0x0003003eu, 0x00003d31u, 0x00000424u, 0x000200f9u, 0x00003d2eu, 0x000200f8u, 0x00003d2eu, 0x0003003eu, 0x00001946u, 0x0000046cu, 0x000200f9u, 0x00003d28u, 0x000200f8u, 0x00003d28u, 0x000600a9u, 0x00000063u, 0x0000b644u, 0x00003d27u, 0x0000046cu, 0x00008213u, 0x00050041u, 0x00000040u, 0x00003d33u, 0x00003cf1u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003d34u, 0x00003d33u, 0x000500abu, 0x00000063u, 0x00003d36u, 0x00003d34u, 0x00003d07u, 0x000300f7u, 0x00003d37u, 0x00000000u, 0x000400fau, 0x00003d36u, 0x00003d38u, 0x00003d37u, 0x000200f8u, 0x00003d38u, 0x0004003du, 0x00000008u, 0x00003d3au, 0x00003d33u, 0x000500abu, 0x00000063u, 0x00003d3bu, 0x00003d3au, 0x0000019cu, 0x000200f9u, 0x00003d37u, 0x000200f8u, 0x00003d37u, 0x000700f5u, 0x00000063u, 0x00003d3cu, 0x00003d36u, 0x00003d28u, 0x00003d3bu, 0x00003d38u, 0x000300f7u, 0x00003d3du, 0x00000000u, 0x000400fau, 0x00003d3cu, 0x00003d3eu, 0x00003d3du, 0x000200f8u, 0x00003d3eu, 0x00050041u, 0x00000040u, 0x00003d3fu, 0x00003cefu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003d40u, 0x00003d3fu, 0x000500c7u, 0x00000008u, 0x00003d41u, 0x00003d40u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00003d42u, 0x00003d41u, 0x0000019cu, 0x000300f7u, 0x00003d43u, 0x00000000u, 0x000400fau, 0x00003d42u, 0x00003d44u, 0x00003d45u, 0x000200f8u, 0x00003d45u, 0x00050041u, 0x00000040u, 0x00003d47u, 0x00003cf2u, 0x000002f4u, 0x0003003eu, 0x00003d47u, 0x0000046au, 0x000200f9u, 0x00003d43u, 0x000200f8u, 0x00003d44u, 0x00050041u, 0x00000040u, 0x00003d46u, 0x00003cf2u, 0x000002f4u, 0x0003003eu, 0x00003d46u, 0x00000424u, 0x000200f9u, 0x00003d43u, 0x000200f8u, 0x00003d43u, 0x0003003eu, 0x00001946u, 0x0000046cu, 0x000200f9u, 0x00003d3du, 0x000200f8u, 0x00003d3du, 0x000600a9u, 0x00000063u, 0x0000b645u, 0x00003d3cu, 0x0000046cu, 0x0000b644u, 0x000200f9u, 0x00003d1cu, 0x000200f8u, 0x00003d1cu, 0x000700f5u, 0x00000063u, 0x00008339u, 0x00008213u, 0x00003d0eu, 0x0000b645u, 0x00003d3du, 0x000300f7u, 0x00003d49u, 0x00000000u, 0x000400fau, 0x00003cf7u, 0x00003d4au, 0x00003d49u, 0x000200f8u, 0x00003d4au, 0x0003003eu, 0x00003cf2u, 0x00000485u, 0x0003003eu, 0x00001946u, 0x0000046cu, 0x000200f9u, 0x00003d49u, 0x000200f8u, 0x00003d49u, 0x000600a9u, 0x00000063u, 0x0000b646u, 0x00003cf7u, 0x0000046cu, 0x00008339u, 0x0004003du, 0x00000058u, 0x00003d4bu, 0x00003cf2u, 0x0008000cu, 0x00000058u, 0x00003d4cu, 0x00000001u, 0x0000002du, 0x00003d4bu, 0x00000488u, 0x0000048au, 0x0003003eu, 0x00003cf3u, 0x00003d4cu, 0x0003003eu, 0x00001944u, 0x0000b646u, 0x0003003eu, 0x0000190eu, 0x00003d4cu, 0x000200f9u, 0x00001b4cu, 0x000200f8u, 0x00001b4cu, 0x000700f5u, 0x00000058u, 0x000086f1u, 0x00003d4cu, 0x00003d49u, 0x00003d70u, 0x00001b4eu, 0x000200f9u, 0x00001b39u, 0x000200f8u, 0x00001b39u, 0x000700f5u, 0x00000058u, 0x000086f0u, 0x000086f1u, 0x00001b4cu, 0x000082a0u, 0x00003d88u, 0x0003003eu, 0x00001920u, 0x0000716eu, 0x0003003eu, 0x000018deu, 0x0000046cu, 0x000200f9u, 0x00001b15u, 0x000200f8u, 0x00001b15u, 0x000700f5u, 0x00000058u, 0x0000869cu, 0x00006fadu, 0x00001af4u, 0x000086f0u, 0x00001b39u, 0x000600a9u, 0x00000006u, 0x0000b647u, 0x00001a20u, 0x0000716eu, 0x000085ceu, 0x000600a9u, 0x00000063u, 0x0000b648u, 0x00001a20u, 0x0000046cu, 0x00001a1du, 0x000300f7u, 0x00001b61u, 0x00000000u, 0x000400fau, 0x0000b648u, 0x00001b62u, 0x00001b61u, 0x000200f8u, 0x00001b62u, 0x000400a8u, 0x00000063u, 0x00001b65u, 0x00001a2cu, 0x000500a7u, 0x00000063u, 0x00001b66u, 0x00001a26u, 0x00001b65u, 0x000300f7u, 0x00001b67u, 0x00000000u, 0x000400fau, 0x00001b66u, 0x00001b68u, 0x00001b69u, 0x000200f8u, 0x00001b69u, 0x00080041u, 0x000006a8u, 0x00001b70u, 0x00001482u, 0x0000019cu, 0x0000184du, 0x000001a9u, 0x0000b647u, 0x0004003du, 0x0000000fu, 0x00001b71u, 0x00001b70u, 0x00040071u, 0x00000006u, 0x00001b72u, 0x00001b71u, 0x0003003eu, 0x0000194fu, 0x00001b72u, 0x0003003eu, 0x00001951u, 0x00001b72u, 0x00060041u, 0x0000024au, 0x00003e58u, 0x00000248u, 0x0000019cu, 0x00001b72u, 0x0004003du, 0x00000244u, 0x00003e59u, 0x00003e58u, 0x00050051u, 0x00000006u, 0x00003e5au, 0x00003e59u, 0x00000000u, 0x0003003eu, 0x00005e68u, 0x00003e5au, 0x00050051u, 0x00000006u, 0x00003e5cu, 0x00003e59u, 0x00000001u, 0x0003003eu, 0x00005e69u, 0x00003e5cu, 0x00050051u, 0x00000006u, 0x00003e5eu, 0x00003e59u, 0x00000002u, 0x0003003eu, 0x00005e6au, 0x00003e5eu, 0x00050051u, 0x00000006u, 0x00003e60u, 0x00003e59u, 0x00000003u, 0x0003003eu, 0x00005e6bu, 0x00003e60u, 0x00050051u, 0x00000006u, 0x00003e62u, 0x00003e59u, 0x00000004u, 0x0003003eu, 0x00005e6cu, 0x00003e62u, 0x00050051u, 0x00000006u, 0x00003e64u, 0x00003e59u, 0x00000005u, 0x0003003eu, 0x00005e6du, 0x00003e64u, 0x00050051u, 0x0000000fu, 0x00003e66u, 0x00003e59u, 0x00000006u, 0x0003003eu, 0x00005e6eu, 0x00003e66u, 0x00050051u, 0x0000000fu, 0x00003e68u, 0x00003e59u, 0x00000007u, 0x0003003eu, 0x00005e6fu, 0x00003e68u, 0x00050051u, 0x0000000fu, 0x00003e6au, 0x00003e59u, 0x00000008u, 0x0003003eu, 0x00005e70u, 0x00003e6au, 0x00050051u, 0x0000000fu, 0x00003e6cu, 0x00003e59u, 0x00000009u, 0x0003003eu, 0x00005e71u, 0x00003e6cu, 0x00050051u, 0x0000000fu, 0x00003e6eu, 0x00003e59u, 0x0000000au, 0x0003003eu, 0x00005e72u, 0x00003e6eu, 0x00050051u, 0x0000000fu, 0x00003e70u, 0x00003e59u, 0x0000000bu, 0x0003003eu, 0x00005e73u, 0x00003e70u, 0x00050051u, 0x0000000fu, 0x00003e72u, 0x00003e59u, 0x0000000cu, 0x0003003eu, 0x00005e74u, 0x00003e72u, 0x00050051u, 0x0000000fu, 0x00003e74u, 0x00003e59u, 0x0000000du, 0x0003003eu, 0x00005e75u, 0x00003e74u, 0x00110050u, 0x00000029u, 0x00005e84u, 0x00003e5au, 0x00003e5cu, 0x00003e5eu, 0x00003e60u, 0x00003e62u, 0x00003e64u, 0x00003e66u, 0x00003e68u, 0x00003e6au, 0x00003e6cu, 0x00003e6eu, 0x00003e70u, 0x00003e72u, 0x00003e74u, 0x0003003eu, 0x00005e85u, 0x00003e5au, 0x0003003eu, 0x00005e86u, 0x00003e5cu, 0x0003003eu, 0x00005e87u, 0x00003e5eu, 0x0003003eu, 0x00005e88u, 0x00003e60u, 0x0003003eu, 0x00005e89u, 0x00003e62u, 0x0003003eu, 0x00005e8au, 0x00003e64u, 0x0003003eu, 0x00005e8bu, 0x00003e66u, 0x0003003eu, 0x00005e8cu, 0x00003e68u, 0x0003003eu, 0x00005e8du, 0x00003e6au, 0x0003003eu, 0x00005e8eu, 0x00003e6cu, 0x0003003eu, 0x00005e8fu, 0x00003e6eu, 0x0003003eu, 0x00005e90u, 0x00003e70u, 0x0003003eu, 0x00005e91u, 0x00003e72u, 0x0003003eu, 0x00005e92u, 0x00003e74u, 0x0003003eu, 0x0000673du, 0x00003e5au, 0x0003003eu, 0x0000673eu, 0x00003e5cu, 0x0003003eu, 0x0000673fu, 0x00003e5eu, 0x0003003eu, 0x00006740u, 0x00003e60u, 0x0003003eu, 0x00006741u, 0x00003e62u, 0x0003003eu, 0x00006742u, 0x00003e64u, 0x0003003eu, 0x00006743u, 0x00003e66u, 0x0003003eu, 0x00006744u, 0x00003e68u, 0x0003003eu, 0x00006745u, 0x00003e6au, 0x0003003eu, 0x00006746u, 0x00003e6cu, 0x0003003eu, 0x00006747u, 0x00003e6eu, 0x0003003eu, 0x00006748u, 0x00003e70u, 0x0003003eu, 0x00006749u, 0x00003e72u, 0x0003003eu, 0x0000674au, 0x00003e74u, 0x000300f7u, 0x00001b75u, 0x00000000u, 0x000400fau, 0x00001744u, 0x00001b76u, 0x00001b75u, 0x000200f8u, 0x00001b76u, 0x0003003eu, 0x00006743u, 0x00001748u, 0x0003003eu, 0x00006744u, 0x0000174bu, 0x000200f9u, 0x00001b75u, 0x000200f8u, 0x00001b75u, 0x000600a9u, 0x0000000fu, 0x0000b649u, 0x00001744u, 0x00001748u, 0x00003e66u, 0x000600a9u, 0x0000000fu, 0x0000b64au, 0x00001744u, 0x0000174bu, 0x00003e68u, 0x00110050u, 0x00000029u, 0x00006767u, 0x00003e5au, 0x00003e5cu, 0x00003e5eu, 0x00003e60u, 0x00003e62u, 0x00003e64u, 0x0000b649u, 0x0000b64au, 0x00003e6au, 0x00003e6cu, 0x00003e6eu, 0x00003e70u, 0x00003e72u, 0x00003e74u, 0x0003003eu, 0x00006768u, 0x00003e5au, 0x0003003eu, 0x00006769u, 0x00003e5cu, 0x0003003eu, 0x0000676au, 0x00003e5eu, 0x0003003eu, 0x0000676bu, 0x00003e60u, 0x0003003eu, 0x0000676cu, 0x00003e62u, 0x0003003eu, 0x0000676du, 0x00003e64u, 0x0003003eu, 0x0000676eu, 0x0000b649u, 0x0003003eu, 0x0000676fu, 0x0000b64au, 0x0003003eu, 0x00006770u, 0x00003e6au, 0x0003003eu, 0x00006771u, 0x00003e6cu, 0x0003003eu, 0x00006772u, 0x00003e6eu, 0x0003003eu, 0x00006773u, 0x00003e70u, 0x0003003eu, 0x00006774u, 0x00003e72u, 0x0003003eu, 0x00006775u, 0x00003e74u, 0x0003003eu, 0x00001953u, 0x000019c4u, 0x0003003eu, 0x00001954u, 0x0000869cu, 0x0003003eu, 0x00001955u, 0x000019e7u, 0x0003003eu, 0x00001956u, 0x000019eau, 0x0003003eu, 0x00001957u, 0x000019edu, 0x0003003eu, 0x00001958u, 0x00001a17u, 0x0003003eu, 0x00001959u, 0x00001a26u, 0x0003003eu, 0x0000195au, 0x00008850u, 0x00040071u, 0x00000006u, 0x00003fbau, 0x00003e74u, 0x0004007cu, 0x00000008u, 0x00003fbbu, 0x00003fbau, 0x000500c7u, 0x00000008u, 0x00003fbcu, 0x00003fbbu, 0x000001a6u, 0x000500abu, 0x00000063u, 0x00003fbdu, 0x00003fbcu, 0x0000019cu, 0x0004007cu, 0x00000008u, 0x00003fc0u, 0x00003e5au, 0x0004007cu, 0x00000008u, 0x00003fc3u, 0x00003e5cu, 0x00040071u, 0x00000006u, 0x00003fc6u, 0x00003e6eu, 0x0004007cu, 0x00000008u, 0x00003fc7u, 0x00003fc6u, 0x0003003eu, 0x00003e77u, 0x00003fbdu, 0x00050041u, 0x00000040u, 0x00003fc8u, 0x00001954u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003fc9u, 0x00003fc8u, 0x0003003eu, 0x00003e78u, 0x00003fc9u, 0x0003003eu, 0x00003e79u, 0x00003fc0u, 0x0003003eu, 0x00003e7au, 0x00003fc3u, 0x0003003eu, 0x00003e7bu, 0x00003fc7u, 0x0008000cu, 0x00000008u, 0x00004383u, 0x00000001u, 0x0000002du, 0x00003fc9u, 0x0000046au, 0x00000424u, 0x0003003eu, 0x00003e78u, 0x00004383u, 0x000500b1u, 0x00000063u, 0x00004385u, 0x00003fc7u, 0x000001e2u, 0x000300f7u, 0x00004386u, 0x00000000u, 0x000400fau, 0x00004385u, 0x00004387u, 0x00004388u, 0x000200f8u, 0x00004388u, 0x00050082u, 0x00000008u, 0x0000438du, 0x00000977u, 0x00003fc7u, 0x000500c4u, 0x00000008u, 0x0000438fu, 0x00004383u, 0x0000438du, 0x0003003eu, 0x00003e78u, 0x0000438fu, 0x000500c3u, 0x00000008u, 0x00004391u, 0x0000438fu, 0x00000509u, 0x0003003eu, 0x00003e78u, 0x00004391u, 0x000200f9u, 0x00004386u, 0x000200f8u, 0x00004387u, 0x000500c3u, 0x00000008u, 0x0000438bu, 0x00004383u, 0x00003fc7u, 0x0003003eu, 0x00003e78u, 0x0000438bu, 0x000200f9u, 0x00004386u, 0x000200f8u, 0x00004386u, 0x000700f5u, 0x00000008u, 0x0000889du, 0x0000438bu, 0x00004387u, 0x00004391u, 0x00004388u, 0x000300f7u, 0x00004393u, 0x00000000u, 0x000400fau, 0x00003fbdu, 0x00004394u, 0x00004395u, 0x000200f8u, 0x00004395u, 0x000500c4u, 0x00000008u, 0x000043abu, 0x00003fc0u, 0x000001acu, 0x00050082u, 0x00000008u, 0x000043adu, 0x0000889du, 0x000043abu, 0x0003003eu, 0x00003e78u, 0x000043adu, 0x000200f9u, 0x00004393u, 0x000200f8u, 0x00004394u, 0x000500c3u, 0x00000008u, 0x00004397u, 0x0000889du, 0x000001acu, 0x000500afu, 0x00000063u, 0x00004399u, 0x00004397u, 0x00003fc3u, 0x0003003eu, 0x00004380u, 0x00004399u, 0x000300f7u, 0x0000439bu, 0x00000000u, 0x000400fau, 0x00004399u, 0x0000439cu, 0x0000439du, 0x000200f8u, 0x0000439du, 0x000500c4u, 0x00000008u, 0x000043a7u, 0x00003fc0u, 0x000001acu, 0x00050082u, 0x00000008u, 0x000043a8u, 0x0000889du, 0x000043a7u, 0x0007000cu, 0x00000008u, 0x000043a9u, 0x00000001u, 0x0000002au, 0x000043a8u, 0x0000019cu, 0x0003003eu, 0x00003e78u, 0x000043a9u, 0x000200f9u, 0x0000439bu, 0x000200f8u, 0x0000439cu, 0x000500c3u, 0x00000008u, 0x0000439fu, 0x00003fc3u, 0x000001a9u, 0x000500c3u, 0x00000008u, 0x000043a1u, 0x00003fc0u, 0x000001a9u, 0x00050082u, 0x00000008u, 0x000043a2u, 0x0000439fu, 0x000043a1u, 0x000500c7u, 0x00000008u, 0x000043a3u, 0x000043a2u, 0x0000098eu, 0x000500c4u, 0x00000008u, 0x000043a4u, 0x000043a3u, 0x000001b2u, 0x0003003eu, 0x00003e78u, 0x000043a4u, 0x000200f9u, 0x0000439bu, 0x000200f8u, 0x0000439bu, 0x000700f5u, 0x00000008u, 0x000088a0u, 0x000043a4u, 0x0000439cu, 0x000043a9u, 0x0000439du, 0x000200f9u, 0x00004393u, 0x000200f8u, 0x00004393u, 0x000700f5u, 0x00000008u, 0x0000889fu, 0x000088a0u, 0x0000439bu, 0x000043adu, 0x00004395u, 0x0003003eu, 0x00004381u, 0x0000889fu, 0x0003003eu, 0x00003fc8u, 0x0000889fu, 0x000500c7u, 0x00000008u, 0x00003fd0u, 0x00003fbbu, 0x000001afu, 0x000500abu, 0x00000063u, 0x00003fd1u, 0x00003fd0u, 0x0000019cu, 0x0004007cu, 0x00000008u, 0x00003fd4u, 0x00003e5eu, 0x0004007cu, 0x00000008u, 0x00003fd7u, 0x00003e60u, 0x00040071u, 0x00000006u, 0x00003fdau, 0x00003e72u, 0x0004007cu, 0x00000008u, 0x00003fdbu, 0x00003fdau, 0x0003003eu, 0x00003e7cu, 0x00003fd1u, 0x00050041u, 0x00000040u, 0x00003fdcu, 0x00001954u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003fddu, 0x00003fdcu, 0x0003003eu, 0x00003e7du, 0x00003fddu, 0x0003003eu, 0x00003e7eu, 0x00003fd4u, 0x0003003eu, 0x00003e7fu, 0x00003fd7u, 0x0003003eu, 0x00003e80u, 0x00003fdbu, 0x0008000cu, 0x00000008u, 0x000043b2u, 0x00000001u, 0x0000002du, 0x00003fddu, 0x0000046au, 0x00000424u, 0x0003003eu, 0x00003e7du, 0x000043b2u, 0x000500b1u, 0x00000063u, 0x000043b4u, 0x00003fdbu, 0x000001e2u, 0x000300f7u, 0x000043b5u, 0x00000000u, 0x000400fau, 0x000043b4u, 0x000043b6u, 0x000043b7u, 0x000200f8u, 0x000043b7u, 0x00050082u, 0x00000008u, 0x000043bcu, 0x00000977u, 0x00003fdbu, 0x000500c4u, 0x00000008u, 0x000043beu, 0x000043b2u, 0x000043bcu, 0x0003003eu, 0x00003e7du, 0x000043beu, 0x000500c3u, 0x00000008u, 0x000043c0u, 0x000043beu, 0x00000509u, 0x0003003eu, 0x00003e7du, 0x000043c0u, 0x000200f9u, 0x000043b5u, 0x000200f8u, 0x000043b6u, 0x000500c3u, 0x00000008u, 0x000043bau, 0x000043b2u, 0x00003fdbu, 0x0003003eu, 0x00003e7du, 0x000043bau, 0x000200f9u, 0x000043b5u, 0x000200f8u, 0x000043b5u, 0x000700f5u, 0x00000008u, 0x000088afu, 0x000043bau, 0x000043b6u, 0x000043c0u, 0x000043b7u, 0x000300f7u, 0x000043c2u, 0x00000000u, 0x000400fau, 0x00003fd1u, 0x000043c3u, 0x000043c4u, 0x000200f8u, 0x000043c4u, 0x000500c4u, 0x00000008u, 0x000043dau, 0x00003fd4u, 0x000001acu, 0x00050082u, 0x00000008u, 0x000043dcu, 0x000088afu, 0x000043dau, 0x0003003eu, 0x00003e7du, 0x000043dcu, 0x000200f9u, 0x000043c2u, 0x000200f8u, 0x000043c3u, 0x000500c3u, 0x00000008u, 0x000043c6u, 0x000088afu, 0x000001acu, 0x000500afu, 0x00000063u, 0x000043c8u, 0x000043c6u, 0x00003fd7u, 0x0003003eu, 0x000043afu, 0x000043c8u, 0x000300f7u, 0x000043cau, 0x00000000u, 0x000400fau, 0x000043c8u, 0x000043cbu, 0x000043ccu, 0x000200f8u, 0x000043ccu, 0x000500c4u, 0x00000008u, 0x000043d6u, 0x00003fd4u, 0x000001acu, 0x00050082u, 0x00000008u, 0x000043d7u, 0x000088afu, 0x000043d6u, 0x0007000cu, 0x00000008u, 0x000043d8u, 0x00000001u, 0x0000002au, 0x000043d7u, 0x0000019cu, 0x0003003eu, 0x00003e7du, 0x000043d8u, 0x000200f9u, 0x000043cau, 0x000200f8u, 0x000043cbu, 0x000500c3u, 0x00000008u, 0x000043ceu, 0x00003fd7u, 0x000001a9u, 0x000500c3u, 0x00000008u, 0x000043d0u, 0x00003fd4u, 0x000001a9u, 0x00050082u, 0x00000008u, 0x000043d1u, 0x000043ceu, 0x000043d0u, 0x000500c7u, 0x00000008u, 0x000043d2u, 0x000043d1u, 0x0000098eu, 0x000500c4u, 0x00000008u, 0x000043d3u, 0x000043d2u, 0x000001b2u, 0x0003003eu, 0x00003e7du, 0x000043d3u, 0x000200f9u, 0x000043cau, 0x000200f8u, 0x000043cau, 0x000700f5u, 0x00000008u, 0x000088b2u, 0x000043d3u, 0x000043cbu, 0x000043d8u, 0x000043ccu, 0x000200f9u, 0x000043c2u, 0x000200f8u, 0x000043c2u, 0x000700f5u, 0x00000008u, 0x000088b1u, 0x000088b2u, 0x000043cau, 0x000043dcu, 0x000043c4u, 0x0003003eu, 0x000043b0u, 0x000088b1u, 0x0003003eu, 0x00003fdcu, 0x000088b1u, 0x000300f7u, 0x00003fe1u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00003fe2u, 0x00003fe3u, 0x000200f8u, 0x00003fe3u, 0x0003003eu, 0x00003e81u, 0x00000450u, 0x000200f9u, 0x00003fe1u, 0x000200f8u, 0x00003fe2u, 0x0004003du, 0x00000058u, 0x00003fe4u, 0x00001954u, 0x000500c7u, 0x00000058u, 0x00003fe6u, 0x00003fe4u, 0x0000b61cu, 0x0003003eu, 0x00003e81u, 0x00003fe6u, 0x000200f9u, 0x00003fe1u, 0x000200f8u, 0x00003fe1u, 0x00050041u, 0x00000040u, 0x00003fe7u, 0x00003e81u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003fe8u, 0x00003fe7u, 0x00050041u, 0x00000040u, 0x00003fe9u, 0x00003e81u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003feau, 0x00003fe9u, 0x00050080u, 0x00000008u, 0x00003febu, 0x00003fe8u, 0x00003feau, 0x0003003eu, 0x00003e82u, 0x00003febu, 0x0004003du, 0x00000058u, 0x00003fecu, 0x00001954u, 0x000500c3u, 0x00000058u, 0x00003feeu, 0x00003fecu, 0x0000b61bu, 0x0003003eu, 0x00001954u, 0x00003feeu, 0x0003003eu, 0x00005d38u, 0x00003e6cu, 0x0003003eu, 0x00005d39u, 0x00003e74u, 0x0004003du, 0x00000008u, 0x00003ff1u, 0x00003fc8u, 0x0003003eu, 0x00003e85u, 0x00003ff1u, 0x00040071u, 0x00000006u, 0x000043e2u, 0x00003e6cu, 0x0004007cu, 0x00000008u, 0x000043e3u, 0x000043e2u, 0x000500abu, 0x00000063u, 0x000043e4u, 0x000043e3u, 0x0000019cu, 0x000300f7u, 0x000043e5u, 0x00000000u, 0x000400fau, 0x000043e4u, 0x000043e6u, 0x000043e5u, 0x000200f8u, 0x000043e6u, 0x000500c4u, 0x00000008u, 0x000043e9u, 0x000001a6u, 0x00003e6cu, 0x0003003eu, 0x000043deu, 0x000043e9u, 0x000500c7u, 0x00000008u, 0x000043eeu, 0x00003fbbu, 0x000001a9u, 0x000500abu, 0x00000063u, 0x000043efu, 0x000043eeu, 0x0000019cu, 0x000300f7u, 0x000043f0u, 0x00000000u, 0x000400fau, 0x000043efu, 0x000043f1u, 0x000043f0u, 0x000200f8u, 0x000043f1u, 0x000500c7u, 0x00000008u, 0x000043f4u, 0x00003ff1u, 0x000043e9u, 0x00050082u, 0x00000008u, 0x000043f5u, 0x000043f4u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x000043f6u, 0x00000001u, 0x0000002au, 0x000043f5u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x000043f8u, 0x00003ff1u, 0x000043f6u, 0x0003003eu, 0x00003e85u, 0x000043f8u, 0x000200f9u, 0x000043f0u, 0x000200f8u, 0x000043f0u, 0x000700f5u, 0x00000008u, 0x00008910u, 0x00003ff1u, 0x000043e6u, 0x000043f8u, 0x000043f1u, 0x00050082u, 0x00000008u, 0x000043fau, 0x000043e9u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x000043fcu, 0x00008910u, 0x000043fau, 0x0003003eu, 0x00003e85u, 0x000043fcu, 0x000200f9u, 0x000043e5u, 0x000200f8u, 0x000043e5u, 0x000700f5u, 0x00000008u, 0x00008911u, 0x00003ff1u, 0x00003fe1u, 0x000043fcu, 0x000043f0u, 0x0003003eu, 0x000043dfu, 0x00008911u, 0x0003003eu, 0x00003e83u, 0x00008911u, 0x0003003eu, 0x00005d3cu, 0x00003e70u, 0x0003003eu, 0x00005d3du, 0x00003e74u, 0x0004003du, 0x00000008u, 0x00003ff5u, 0x00003fdcu, 0x0003003eu, 0x00003e88u, 0x00003ff5u, 0x00040071u, 0x00000006u, 0x00004402u, 0x00003e70u, 0x0004007cu, 0x00000008u, 0x00004403u, 0x00004402u, 0x000500abu, 0x00000063u, 0x00004404u, 0x00004403u, 0x0000019cu, 0x000300f7u, 0x00004405u, 0x00000000u, 0x000400fau, 0x00004404u, 0x00004406u, 0x00004405u, 0x000200f8u, 0x00004406u, 0x000500c4u, 0x00000008u, 0x00004409u, 0x000001a6u, 0x00003e70u, 0x0003003eu, 0x000043feu, 0x00004409u, 0x000500c7u, 0x00000008u, 0x0000440eu, 0x00003fbbu, 0x000001d9u, 0x000500abu, 0x00000063u, 0x0000440fu, 0x0000440eu, 0x0000019cu, 0x000300f7u, 0x00004410u, 0x00000000u, 0x000400fau, 0x0000440fu, 0x00004411u, 0x00004410u, 0x000200f8u, 0x00004411u, 0x000500c7u, 0x00000008u, 0x00004414u, 0x00003ff5u, 0x00004409u, 0x00050082u, 0x00000008u, 0x00004415u, 0x00004414u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00004416u, 0x00000001u, 0x0000002au, 0x00004415u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00004418u, 0x00003ff5u, 0x00004416u, 0x0003003eu, 0x00003e88u, 0x00004418u, 0x000200f9u, 0x00004410u, 0x000200f8u, 0x00004410u, 0x000700f5u, 0x00000008u, 0x0000892fu, 0x00003ff5u, 0x00004406u, 0x00004418u, 0x00004411u, 0x00050082u, 0x00000008u, 0x0000441au, 0x00004409u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x0000441cu, 0x0000892fu, 0x0000441au, 0x0003003eu, 0x00003e88u, 0x0000441cu, 0x000200f9u, 0x00004405u, 0x000200f8u, 0x00004405u, 0x000700f5u, 0x00000008u, 0x00008930u, 0x00003ff5u, 0x000043e5u, 0x0000441cu, 0x00004410u, 0x0003003eu, 0x000043ffu, 0x00008930u, 0x0003003eu, 0x00003e86u, 0x00008930u, 0x0004003du, 0x00000008u, 0x00003ff8u, 0x00003fc8u, 0x00050080u, 0x00000008u, 0x00003ff9u, 0x00003ff8u, 0x000001a6u, 0x0003003eu, 0x00005d40u, 0x00003e6cu, 0x0003003eu, 0x00005d41u, 0x00003e74u, 0x0003003eu, 0x00003e8bu, 0x00003ff9u, 0x000300f7u, 0x00004425u, 0x00000000u, 0x000400fau, 0x000043e4u, 0x00004426u, 0x00004425u, 0x000200f8u, 0x00004426u, 0x000500c4u, 0x00000008u, 0x00004429u, 0x000001a6u, 0x00003e6cu, 0x0003003eu, 0x0000441eu, 0x00004429u, 0x000500c7u, 0x00000008u, 0x0000442eu, 0x00003fbbu, 0x000001a9u, 0x000500abu, 0x00000063u, 0x0000442fu, 0x0000442eu, 0x0000019cu, 0x000300f7u, 0x00004430u, 0x00000000u, 0x000400fau, 0x0000442fu, 0x00004431u, 0x00004430u, 0x000200f8u, 0x00004431u, 0x000500c7u, 0x00000008u, 0x00004434u, 0x00003ff9u, 0x00004429u, 0x00050082u, 0x00000008u, 0x00004435u, 0x00004434u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00004436u, 0x00000001u, 0x0000002au, 0x00004435u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00004438u, 0x00003ff9u, 0x00004436u, 0x0003003eu, 0x00003e8bu, 0x00004438u, 0x000200f9u, 0x00004430u, 0x000200f8u, 0x00004430u, 0x000700f5u, 0x00000008u, 0x0000894eu, 0x00003ff9u, 0x00004426u, 0x00004438u, 0x00004431u, 0x00050082u, 0x00000008u, 0x0000443au, 0x00004429u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x0000443cu, 0x0000894eu, 0x0000443au, 0x0003003eu, 0x00003e8bu, 0x0000443cu, 0x000200f9u, 0x00004425u, 0x000200f8u, 0x00004425u, 0x000700f5u, 0x00000008u, 0x0000894fu, 0x00003ff9u, 0x00004405u, 0x0000443cu, 0x00004430u, 0x0003003eu, 0x0000441fu, 0x0000894fu, 0x0003003eu, 0x00003e89u, 0x0000894fu, 0x0004003du, 0x00000008u, 0x00003ffdu, 0x00003fdcu, 0x00050080u, 0x00000008u, 0x00003ffeu, 0x00003ffdu, 0x000001a6u, 0x0003003eu, 0x00005d44u, 0x00003e70u, 0x0003003eu, 0x00005d45u, 0x00003e74u, 0x0003003eu, 0x00003e8eu, 0x00003ffeu, 0x000300f7u, 0x00004445u, 0x00000000u, 0x000400fau, 0x00004404u, 0x00004446u, 0x00004445u, 0x000200f8u, 0x00004446u, 0x000500c4u, 0x00000008u, 0x00004449u, 0x000001a6u, 0x00003e70u, 0x0003003eu, 0x0000443eu, 0x00004449u, 0x000500c7u, 0x00000008u, 0x0000444eu, 0x00003fbbu, 0x000001d9u, 0x000500abu, 0x00000063u, 0x0000444fu, 0x0000444eu, 0x0000019cu, 0x000300f7u, 0x00004450u, 0x00000000u, 0x000400fau, 0x0000444fu, 0x00004451u, 0x00004450u, 0x000200f8u, 0x00004451u, 0x000500c7u, 0x00000008u, 0x00004454u, 0x00003ffeu, 0x00004449u, 0x00050082u, 0x00000008u, 0x00004455u, 0x00004454u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00004456u, 0x00000001u, 0x0000002au, 0x00004455u, 0x0000019cu, 0x000500c6u, 0x00000008u, 0x00004458u, 0x00003ffeu, 0x00004456u, 0x0003003eu, 0x00003e8eu, 0x00004458u, 0x000200f9u, 0x00004450u, 0x000200f8u, 0x00004450u, 0x000700f5u, 0x00000008u, 0x0000896du, 0x00003ffeu, 0x00004446u, 0x00004458u, 0x00004451u, 0x00050082u, 0x00000008u, 0x0000445au, 0x00004449u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x0000445cu, 0x0000896du, 0x0000445au, 0x0003003eu, 0x00003e8eu, 0x0000445cu, 0x000200f9u, 0x00004445u, 0x000200f8u, 0x00004445u, 0x000700f5u, 0x00000008u, 0x0000896eu, 0x00003ffeu, 0x00004425u, 0x0000445cu, 0x00004450u, 0x0003003eu, 0x0000443fu, 0x0000896eu, 0x0003003eu, 0x00003e8cu, 0x0000896eu, 0x00050082u, 0x00000008u, 0x00004003u, 0x0000896eu, 0x00008930u, 0x0007000cu, 0x00000008u, 0x00004004u, 0x00000001u, 0x0000002au, 0x00004003u, 0x00000bd1u, 0x0003003eu, 0x00003e8fu, 0x00004004u, 0x000500c7u, 0x00000008u, 0x00004006u, 0x00008930u, 0x00000311u, 0x00050080u, 0x00000008u, 0x00004008u, 0x00004006u, 0x00004004u, 0x0003003eu, 0x00003e8cu, 0x00004008u, 0x0003003eu, 0x00003e86u, 0x00004006u, 0x0004003du, 0x00000058u, 0x0000400cu, 0x00003e81u, 0x000500aau, 0x00000451u, 0x0000400du, 0x0000400cu, 0x00000bdbu, 0x00050051u, 0x00000063u, 0x0000400eu, 0x0000400du, 0x00000000u, 0x00050051u, 0x00000063u, 0x0000400fu, 0x0000400du, 0x00000001u, 0x00060050u, 0x00000bddu, 0x00004010u, 0x00001a17u, 0x0000400eu, 0x0000400fu, 0x0004009bu, 0x00000063u, 0x00004011u, 0x00004010u, 0x0003003eu, 0x00001958u, 0x00004011u, 0x000300f7u, 0x00004013u, 0x00000000u, 0x000400fau, 0x00004011u, 0x00004014u, 0x00004013u, 0x000200f8u, 0x00004014u, 0x0003003eu, 0x00003e82u, 0x0000019cu, 0x000200f9u, 0x00004013u, 0x000200f8u, 0x00004013u, 0x000600a9u, 0x00000008u, 0x0000b64bu, 0x00004011u, 0x0000019cu, 0x00003febu, 0x00040071u, 0x00000006u, 0x00004017u, 0x0000b649u, 0x0004007cu, 0x00000008u, 0x00004018u, 0x00004017u, 0x000500aau, 0x00000063u, 0x00004019u, 0x00004018u, 0x000001a6u, 0x0003003eu, 0x00003e90u, 0x00004019u, 0x000500afu, 0x00000063u, 0x0000401bu, 0x0000b64bu, 0x00000977u, 0x000300f7u, 0x0000401cu, 0x00000000u, 0x000400fau, 0x0000401bu, 0x0000401du, 0x0000401eu, 0x000200f8u, 0x0000401eu, 0x00050050u, 0x00000058u, 0x00004024u, 0x00008911u, 0x00004006u, 0x0003003eu, 0x00003e92u, 0x00004024u, 0x000200f9u, 0x0000401cu, 0x000200f8u, 0x0000401du, 0x00050050u, 0x00000058u, 0x00004021u, 0x0000894fu, 0x00004008u, 0x0003003eu, 0x00003e92u, 0x00004021u, 0x000200f9u, 0x0000401cu, 0x000200f8u, 0x0000401cu, 0x000700f5u, 0x00000058u, 0x0000899au, 0x00004021u, 0x0000401du, 0x00004024u, 0x0000401eu, 0x0003003eu, 0x00003e91u, 0x0000899au, 0x000300f7u, 0x00004027u, 0x00000000u, 0x000400fau, 0x000019e7u, 0x00004028u, 0x00004029u, 0x000200f8u, 0x00004029u, 0x000300f7u, 0x000040ceu, 0x00000000u, 0x000d00fbu, 0x00004018u, 0x000040ceu, 0x00000000u, 0x000040cfu, 0x00000001u, 0x000040d0u, 0x00000002u, 0x000040d1u, 0x00000003u, 0x000040d2u, 0x00000004u, 0x000040d3u, 0x000200f8u, 0x000040d3u, 0x00040071u, 0x00000006u, 0x00004289u, 0x0000b64au, 0x0004007cu, 0x00000008u, 0x0000428au, 0x00004289u, 0x000300f7u, 0x0000428bu, 0x00000000u, 0x000700fbu, 0x0000428au, 0x0000428cu, 0x00000000u, 0x0000428du, 0x00000001u, 0x0000428eu, 0x000200f8u, 0x0000428eu, 0x0004007cu, 0x000000abu, 0x000042d0u, 0x0000899au, 0x0003003eu, 0x00005e48u, 0x00003e62u, 0x0003003eu, 0x00005e49u, 0x00003e64u, 0x0003003eu, 0x00003f8cu, 0x000019c4u, 0x0003003eu, 0x00003f8du, 0x000042d0u, 0x00050041u, 0x00000007u, 0x0000554eu, 0x00003f8du, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000554fu, 0x0000554eu, 0x00050084u, 0x00000006u, 0x00005550u, 0x00003e64u, 0x0000554fu, 0x00050080u, 0x00000006u, 0x00005551u, 0x00003e62u, 0x00005550u, 0x0003003eu, 0x00005546u, 0x00005551u, 0x00050041u, 0x00000007u, 0x00005552u, 0x00003f8du, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005553u, 0x00005552u, 0x00050080u, 0x00000006u, 0x00005555u, 0x00005551u, 0x00005553u, 0x0003003eu, 0x00005546u, 0x00005555u, 0x000500c7u, 0x00000006u, 0x00005557u, 0x00005555u, 0x0000068au, 0x0003003eu, 0x00005546u, 0x00005557u, 0x0003003eu, 0x00005547u, 0x00005557u, 0x0004003du, 0x00000006u, 0x0000555au, 0x0000554eu, 0x000500c7u, 0x00000006u, 0x0000555bu, 0x0000555au, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000555cu, 0x0000555bu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000555eu, 0x00005557u, 0x0000555cu, 0x0003003eu, 0x00005547u, 0x0000555eu, 0x000500c6u, 0x00000006u, 0x00005560u, 0x0000555eu, 0x000002fbu, 0x0003003eu, 0x00005547u, 0x00005560u, 0x00080041u, 0x000006a8u, 0x00005563u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005560u, 0x0004003du, 0x0000000fu, 0x00005564u, 0x00005563u, 0x00040071u, 0x00000006u, 0x00005565u, 0x00005564u, 0x0003003eu, 0x00005548u, 0x00005565u, 0x00040071u, 0x00000011u, 0x00005567u, 0x00005565u, 0x0004007cu, 0x00000012u, 0x00005568u, 0x00005567u, 0x00070050u, 0x00000013u, 0x00005569u, 0x00005568u, 0x00005568u, 0x00005568u, 0x00005568u, 0x0003003eu, 0x00005549u, 0x00005569u, 0x0003003eu, 0x00003e95u, 0x00005569u, 0x000300f7u, 0x000042d5u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000042d6u, 0x000042d5u, 0x000200f8u, 0x000042d6u, 0x00050050u, 0x00000058u, 0x000042d9u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x000042dau, 0x000042d9u, 0x0003003eu, 0x00005e4cu, 0x00003e62u, 0x0003003eu, 0x00005e4du, 0x00003e64u, 0x0003003eu, 0x00003f8fu, 0x000019c4u, 0x0003003eu, 0x00003f90u, 0x000042dau, 0x00050041u, 0x00000007u, 0x00005572u, 0x00003f90u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005573u, 0x00005572u, 0x00050084u, 0x00000006u, 0x00005574u, 0x00003e64u, 0x00005573u, 0x00050080u, 0x00000006u, 0x00005575u, 0x00003e62u, 0x00005574u, 0x0003003eu, 0x0000556au, 0x00005575u, 0x00050041u, 0x00000007u, 0x00005576u, 0x00003f90u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005577u, 0x00005576u, 0x00050080u, 0x00000006u, 0x00005579u, 0x00005575u, 0x00005577u, 0x0003003eu, 0x0000556au, 0x00005579u, 0x000500c7u, 0x00000006u, 0x0000557bu, 0x00005579u, 0x0000068au, 0x0003003eu, 0x0000556au, 0x0000557bu, 0x0003003eu, 0x0000556bu, 0x0000557bu, 0x0004003du, 0x00000006u, 0x0000557eu, 0x00005572u, 0x000500c7u, 0x00000006u, 0x0000557fu, 0x0000557eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005580u, 0x0000557fu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005582u, 0x0000557bu, 0x00005580u, 0x0003003eu, 0x0000556bu, 0x00005582u, 0x000500c6u, 0x00000006u, 0x00005584u, 0x00005582u, 0x000002fbu, 0x0003003eu, 0x0000556bu, 0x00005584u, 0x00080041u, 0x000006a8u, 0x00005587u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005584u, 0x0004003du, 0x0000000fu, 0x00005588u, 0x00005587u, 0x00040071u, 0x00000006u, 0x00005589u, 0x00005588u, 0x0003003eu, 0x0000556cu, 0x00005589u, 0x00040071u, 0x00000011u, 0x0000558bu, 0x00005589u, 0x0004007cu, 0x00000012u, 0x0000558cu, 0x0000558bu, 0x00070050u, 0x00000013u, 0x0000558du, 0x0000558cu, 0x0000558cu, 0x0000558cu, 0x0000558cu, 0x0003003eu, 0x0000556du, 0x0000558du, 0x0003003eu, 0x00003e9du, 0x0000558du, 0x00050050u, 0x00000058u, 0x000042e0u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000042e1u, 0x000042e0u, 0x0003003eu, 0x00005e50u, 0x00003e62u, 0x0003003eu, 0x00005e51u, 0x00003e64u, 0x0003003eu, 0x00003f92u, 0x000019c4u, 0x0003003eu, 0x00003f93u, 0x000042e1u, 0x00050041u, 0x00000007u, 0x00005596u, 0x00003f93u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005597u, 0x00005596u, 0x00050084u, 0x00000006u, 0x00005598u, 0x00003e64u, 0x00005597u, 0x00050080u, 0x00000006u, 0x00005599u, 0x00003e62u, 0x00005598u, 0x0003003eu, 0x0000558eu, 0x00005599u, 0x00050041u, 0x00000007u, 0x0000559au, 0x00003f93u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000559bu, 0x0000559au, 0x00050080u, 0x00000006u, 0x0000559du, 0x00005599u, 0x0000559bu, 0x0003003eu, 0x0000558eu, 0x0000559du, 0x000500c7u, 0x00000006u, 0x0000559fu, 0x0000559du, 0x0000068au, 0x0003003eu, 0x0000558eu, 0x0000559fu, 0x0003003eu, 0x0000558fu, 0x0000559fu, 0x0004003du, 0x00000006u, 0x000055a2u, 0x00005596u, 0x000500c7u, 0x00000006u, 0x000055a3u, 0x000055a2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000055a4u, 0x000055a3u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000055a6u, 0x0000559fu, 0x000055a4u, 0x0003003eu, 0x0000558fu, 0x000055a6u, 0x000500c6u, 0x00000006u, 0x000055a8u, 0x000055a6u, 0x000002fbu, 0x0003003eu, 0x0000558fu, 0x000055a8u, 0x00080041u, 0x000006a8u, 0x000055abu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000055a8u, 0x0004003du, 0x0000000fu, 0x000055acu, 0x000055abu, 0x00040071u, 0x00000006u, 0x000055adu, 0x000055acu, 0x0003003eu, 0x00005590u, 0x000055adu, 0x00040071u, 0x00000011u, 0x000055afu, 0x000055adu, 0x0004007cu, 0x00000012u, 0x000055b0u, 0x000055afu, 0x00070050u, 0x00000013u, 0x000055b1u, 0x000055b0u, 0x000055b0u, 0x000055b0u, 0x000055b0u, 0x0003003eu, 0x00005591u, 0x000055b1u, 0x0003003eu, 0x00003ea5u, 0x000055b1u, 0x000200f9u, 0x000042d5u, 0x000200f8u, 0x000042d5u, 0x000700f5u, 0x00000013u, 0x00008fb5u, 0x00007705u, 0x0000428eu, 0x000055b1u, 0x000042d6u, 0x000700f5u, 0x00000013u, 0x00008dedu, 0x00007705u, 0x0000428eu, 0x0000558du, 0x000042d6u, 0x000300f7u, 0x000042e6u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000042e7u, 0x000042e6u, 0x000200f8u, 0x000042e7u, 0x00050050u, 0x00000058u, 0x000042eau, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000042ebu, 0x000042eau, 0x0003003eu, 0x00005e54u, 0x00003e62u, 0x0003003eu, 0x00005e55u, 0x00003e64u, 0x0003003eu, 0x00003f95u, 0x000019c4u, 0x0003003eu, 0x00003f96u, 0x000042ebu, 0x00050041u, 0x00000007u, 0x000055bau, 0x00003f96u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000055bbu, 0x000055bau, 0x00050084u, 0x00000006u, 0x000055bcu, 0x00003e64u, 0x000055bbu, 0x00050080u, 0x00000006u, 0x000055bdu, 0x00003e62u, 0x000055bcu, 0x0003003eu, 0x000055b2u, 0x000055bdu, 0x00050041u, 0x00000007u, 0x000055beu, 0x00003f96u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000055bfu, 0x000055beu, 0x00050080u, 0x00000006u, 0x000055c1u, 0x000055bdu, 0x000055bfu, 0x0003003eu, 0x000055b2u, 0x000055c1u, 0x000500c7u, 0x00000006u, 0x000055c3u, 0x000055c1u, 0x0000068au, 0x0003003eu, 0x000055b2u, 0x000055c3u, 0x0003003eu, 0x000055b3u, 0x000055c3u, 0x0004003du, 0x00000006u, 0x000055c6u, 0x000055bau, 0x000500c7u, 0x00000006u, 0x000055c7u, 0x000055c6u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000055c8u, 0x000055c7u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000055cau, 0x000055c3u, 0x000055c8u, 0x0003003eu, 0x000055b3u, 0x000055cau, 0x000500c6u, 0x00000006u, 0x000055ccu, 0x000055cau, 0x000002fbu, 0x0003003eu, 0x000055b3u, 0x000055ccu, 0x00080041u, 0x000006a8u, 0x000055cfu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000055ccu, 0x0004003du, 0x0000000fu, 0x000055d0u, 0x000055cfu, 0x00040071u, 0x00000006u, 0x000055d1u, 0x000055d0u, 0x0003003eu, 0x000055b4u, 0x000055d1u, 0x00040071u, 0x00000011u, 0x000055d3u, 0x000055d1u, 0x0004007cu, 0x00000012u, 0x000055d4u, 0x000055d3u, 0x00070050u, 0x00000013u, 0x000055d5u, 0x000055d4u, 0x000055d4u, 0x000055d4u, 0x000055d4u, 0x0003003eu, 0x000055b5u, 0x000055d5u, 0x0003003eu, 0x00003eadu, 0x000055d5u, 0x000200f9u, 0x000042e6u, 0x000200f8u, 0x000042e6u, 0x000700f5u, 0x00000013u, 0x00009099u, 0x00007705u, 0x000042d5u, 0x000055d5u, 0x000042e7u, 0x000200f9u, 0x0000428bu, 0x000200f8u, 0x0000428du, 0x0004007cu, 0x000000abu, 0x000042b0u, 0x0000899au, 0x0003003eu, 0x00005e38u, 0x00003e62u, 0x0003003eu, 0x00005e39u, 0x00003e64u, 0x0003003eu, 0x00003f80u, 0x000019c4u, 0x0003003eu, 0x00003f81u, 0x000042b0u, 0x00050041u, 0x00000007u, 0x00005483u, 0x00003f81u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005484u, 0x00005483u, 0x00050084u, 0x00000006u, 0x00005485u, 0x00003e64u, 0x00005484u, 0x00050080u, 0x00000006u, 0x00005486u, 0x00003e62u, 0x00005485u, 0x0003003eu, 0x0000547au, 0x00005486u, 0x00050041u, 0x00000007u, 0x00005487u, 0x00003f81u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005488u, 0x00005487u, 0x000500c2u, 0x00000006u, 0x00005489u, 0x00005488u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x0000548bu, 0x00005486u, 0x00005489u, 0x0003003eu, 0x0000547au, 0x0000548bu, 0x000500c7u, 0x00000006u, 0x0000548du, 0x0000548bu, 0x0000068au, 0x0003003eu, 0x0000547au, 0x0000548du, 0x0004003du, 0x00000006u, 0x0000548fu, 0x00005487u, 0x000400c8u, 0x00000006u, 0x00005490u, 0x0000548fu, 0x000500c7u, 0x00000006u, 0x00005491u, 0x00005490u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00005492u, 0x00005491u, 0x00000692u, 0x0003003eu, 0x0000547bu, 0x00005492u, 0x0003003eu, 0x0000547cu, 0x0000548du, 0x0004003du, 0x00000006u, 0x00005495u, 0x00005483u, 0x000500c7u, 0x00000006u, 0x00005496u, 0x00005495u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005497u, 0x00005496u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005499u, 0x0000548du, 0x00005497u, 0x0003003eu, 0x0000547cu, 0x00005499u, 0x000500c6u, 0x00000006u, 0x0000549bu, 0x00005499u, 0x000002fbu, 0x0003003eu, 0x0000547cu, 0x0000549bu, 0x00080041u, 0x000006a8u, 0x0000549eu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000549bu, 0x0004003du, 0x0000000fu, 0x0000549fu, 0x0000549eu, 0x00040071u, 0x00000006u, 0x000054a0u, 0x0000549fu, 0x0003003eu, 0x0000547du, 0x000054a0u, 0x000500c2u, 0x00000006u, 0x000054a3u, 0x000054a0u, 0x00005492u, 0x000500c7u, 0x00000006u, 0x000054a4u, 0x000054a3u, 0x000006afu, 0x0003003eu, 0x0000547du, 0x000054a4u, 0x000500c4u, 0x00000006u, 0x000054a6u, 0x000054a4u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000054a8u, 0x000054a4u, 0x000054a6u, 0x0003003eu, 0x0000547du, 0x000054a8u, 0x00040071u, 0x00000011u, 0x000054aau, 0x000054a8u, 0x0004007cu, 0x00000012u, 0x000054abu, 0x000054aau, 0x00070050u, 0x00000013u, 0x000054acu, 0x000054abu, 0x000054abu, 0x000054abu, 0x000054abu, 0x0003003eu, 0x0000547eu, 0x000054acu, 0x0003003eu, 0x00003e95u, 0x000054acu, 0x000300f7u, 0x000042b5u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000042b6u, 0x000042b5u, 0x000200f8u, 0x000042b6u, 0x00050050u, 0x00000058u, 0x000042b9u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x000042bau, 0x000042b9u, 0x0003003eu, 0x00005e3cu, 0x00003e62u, 0x0003003eu, 0x00005e3du, 0x00003e64u, 0x0003003eu, 0x00003f83u, 0x000019c4u, 0x0003003eu, 0x00003f84u, 0x000042bau, 0x00050041u, 0x00000007u, 0x000054b6u, 0x00003f84u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000054b7u, 0x000054b6u, 0x00050084u, 0x00000006u, 0x000054b8u, 0x00003e64u, 0x000054b7u, 0x00050080u, 0x00000006u, 0x000054b9u, 0x00003e62u, 0x000054b8u, 0x0003003eu, 0x000054adu, 0x000054b9u, 0x00050041u, 0x00000007u, 0x000054bau, 0x00003f84u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000054bbu, 0x000054bau, 0x000500c2u, 0x00000006u, 0x000054bcu, 0x000054bbu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000054beu, 0x000054b9u, 0x000054bcu, 0x0003003eu, 0x000054adu, 0x000054beu, 0x000500c7u, 0x00000006u, 0x000054c0u, 0x000054beu, 0x0000068au, 0x0003003eu, 0x000054adu, 0x000054c0u, 0x0004003du, 0x00000006u, 0x000054c2u, 0x000054bau, 0x000400c8u, 0x00000006u, 0x000054c3u, 0x000054c2u, 0x000500c7u, 0x00000006u, 0x000054c4u, 0x000054c3u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000054c5u, 0x000054c4u, 0x00000692u, 0x0003003eu, 0x000054aeu, 0x000054c5u, 0x0003003eu, 0x000054afu, 0x000054c0u, 0x0004003du, 0x00000006u, 0x000054c8u, 0x000054b6u, 0x000500c7u, 0x00000006u, 0x000054c9u, 0x000054c8u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000054cau, 0x000054c9u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000054ccu, 0x000054c0u, 0x000054cau, 0x0003003eu, 0x000054afu, 0x000054ccu, 0x000500c6u, 0x00000006u, 0x000054ceu, 0x000054ccu, 0x000002fbu, 0x0003003eu, 0x000054afu, 0x000054ceu, 0x00080041u, 0x000006a8u, 0x000054d1u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000054ceu, 0x0004003du, 0x0000000fu, 0x000054d2u, 0x000054d1u, 0x00040071u, 0x00000006u, 0x000054d3u, 0x000054d2u, 0x0003003eu, 0x000054b0u, 0x000054d3u, 0x000500c2u, 0x00000006u, 0x000054d6u, 0x000054d3u, 0x000054c5u, 0x000500c7u, 0x00000006u, 0x000054d7u, 0x000054d6u, 0x000006afu, 0x0003003eu, 0x000054b0u, 0x000054d7u, 0x000500c4u, 0x00000006u, 0x000054d9u, 0x000054d7u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000054dbu, 0x000054d7u, 0x000054d9u, 0x0003003eu, 0x000054b0u, 0x000054dbu, 0x00040071u, 0x00000011u, 0x000054ddu, 0x000054dbu, 0x0004007cu, 0x00000012u, 0x000054deu, 0x000054ddu, 0x00070050u, 0x00000013u, 0x000054dfu, 0x000054deu, 0x000054deu, 0x000054deu, 0x000054deu, 0x0003003eu, 0x000054b1u, 0x000054dfu, 0x0003003eu, 0x00003e9du, 0x000054dfu, 0x00050050u, 0x00000058u, 0x000042c0u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000042c1u, 0x000042c0u, 0x0003003eu, 0x00005e40u, 0x00003e62u, 0x0003003eu, 0x00005e41u, 0x00003e64u, 0x0003003eu, 0x00003f86u, 0x000019c4u, 0x0003003eu, 0x00003f87u, 0x000042c1u, 0x00050041u, 0x00000007u, 0x000054e9u, 0x00003f87u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000054eau, 0x000054e9u, 0x00050084u, 0x00000006u, 0x000054ebu, 0x00003e64u, 0x000054eau, 0x00050080u, 0x00000006u, 0x000054ecu, 0x00003e62u, 0x000054ebu, 0x0003003eu, 0x000054e0u, 0x000054ecu, 0x00050041u, 0x00000007u, 0x000054edu, 0x00003f87u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000054eeu, 0x000054edu, 0x000500c2u, 0x00000006u, 0x000054efu, 0x000054eeu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000054f1u, 0x000054ecu, 0x000054efu, 0x0003003eu, 0x000054e0u, 0x000054f1u, 0x000500c7u, 0x00000006u, 0x000054f3u, 0x000054f1u, 0x0000068au, 0x0003003eu, 0x000054e0u, 0x000054f3u, 0x0004003du, 0x00000006u, 0x000054f5u, 0x000054edu, 0x000400c8u, 0x00000006u, 0x000054f6u, 0x000054f5u, 0x000500c7u, 0x00000006u, 0x000054f7u, 0x000054f6u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000054f8u, 0x000054f7u, 0x00000692u, 0x0003003eu, 0x000054e1u, 0x000054f8u, 0x0003003eu, 0x000054e2u, 0x000054f3u, 0x0004003du, 0x00000006u, 0x000054fbu, 0x000054e9u, 0x000500c7u, 0x00000006u, 0x000054fcu, 0x000054fbu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000054fdu, 0x000054fcu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000054ffu, 0x000054f3u, 0x000054fdu, 0x0003003eu, 0x000054e2u, 0x000054ffu, 0x000500c6u, 0x00000006u, 0x00005501u, 0x000054ffu, 0x000002fbu, 0x0003003eu, 0x000054e2u, 0x00005501u, 0x00080041u, 0x000006a8u, 0x00005504u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005501u, 0x0004003du, 0x0000000fu, 0x00005505u, 0x00005504u, 0x00040071u, 0x00000006u, 0x00005506u, 0x00005505u, 0x0003003eu, 0x000054e3u, 0x00005506u, 0x000500c2u, 0x00000006u, 0x00005509u, 0x00005506u, 0x000054f8u, 0x000500c7u, 0x00000006u, 0x0000550au, 0x00005509u, 0x000006afu, 0x0003003eu, 0x000054e3u, 0x0000550au, 0x000500c4u, 0x00000006u, 0x0000550cu, 0x0000550au, 0x000001afu, 0x000500c5u, 0x00000006u, 0x0000550eu, 0x0000550au, 0x0000550cu, 0x0003003eu, 0x000054e3u, 0x0000550eu, 0x00040071u, 0x00000011u, 0x00005510u, 0x0000550eu, 0x0004007cu, 0x00000012u, 0x00005511u, 0x00005510u, 0x00070050u, 0x00000013u, 0x00005512u, 0x00005511u, 0x00005511u, 0x00005511u, 0x00005511u, 0x0003003eu, 0x000054e4u, 0x00005512u, 0x0003003eu, 0x00003ea5u, 0x00005512u, 0x000200f9u, 0x000042b5u, 0x000200f8u, 0x000042b5u, 0x000700f5u, 0x00000013u, 0x00008fb3u, 0x00007705u, 0x0000428du, 0x00005512u, 0x000042b6u, 0x000700f5u, 0x00000013u, 0x00008debu, 0x00007705u, 0x0000428du, 0x000054dfu, 0x000042b6u, 0x000300f7u, 0x000042c6u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000042c7u, 0x000042c6u, 0x000200f8u, 0x000042c7u, 0x00050050u, 0x00000058u, 0x000042cau, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000042cbu, 0x000042cau, 0x0003003eu, 0x00005e44u, 0x00003e62u, 0x0003003eu, 0x00005e45u, 0x00003e64u, 0x0003003eu, 0x00003f89u, 0x000019c4u, 0x0003003eu, 0x00003f8au, 0x000042cbu, 0x00050041u, 0x00000007u, 0x0000551cu, 0x00003f8au, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000551du, 0x0000551cu, 0x00050084u, 0x00000006u, 0x0000551eu, 0x00003e64u, 0x0000551du, 0x00050080u, 0x00000006u, 0x0000551fu, 0x00003e62u, 0x0000551eu, 0x0003003eu, 0x00005513u, 0x0000551fu, 0x00050041u, 0x00000007u, 0x00005520u, 0x00003f8au, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005521u, 0x00005520u, 0x000500c2u, 0x00000006u, 0x00005522u, 0x00005521u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00005524u, 0x0000551fu, 0x00005522u, 0x0003003eu, 0x00005513u, 0x00005524u, 0x000500c7u, 0x00000006u, 0x00005526u, 0x00005524u, 0x0000068au, 0x0003003eu, 0x00005513u, 0x00005526u, 0x0004003du, 0x00000006u, 0x00005528u, 0x00005520u, 0x000400c8u, 0x00000006u, 0x00005529u, 0x00005528u, 0x000500c7u, 0x00000006u, 0x0000552au, 0x00005529u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000552bu, 0x0000552au, 0x00000692u, 0x0003003eu, 0x00005514u, 0x0000552bu, 0x0003003eu, 0x00005515u, 0x00005526u, 0x0004003du, 0x00000006u, 0x0000552eu, 0x0000551cu, 0x000500c7u, 0x00000006u, 0x0000552fu, 0x0000552eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005530u, 0x0000552fu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005532u, 0x00005526u, 0x00005530u, 0x0003003eu, 0x00005515u, 0x00005532u, 0x000500c6u, 0x00000006u, 0x00005534u, 0x00005532u, 0x000002fbu, 0x0003003eu, 0x00005515u, 0x00005534u, 0x00080041u, 0x000006a8u, 0x00005537u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005534u, 0x0004003du, 0x0000000fu, 0x00005538u, 0x00005537u, 0x00040071u, 0x00000006u, 0x00005539u, 0x00005538u, 0x0003003eu, 0x00005516u, 0x00005539u, 0x000500c2u, 0x00000006u, 0x0000553cu, 0x00005539u, 0x0000552bu, 0x000500c7u, 0x00000006u, 0x0000553du, 0x0000553cu, 0x000006afu, 0x0003003eu, 0x00005516u, 0x0000553du, 0x000500c4u, 0x00000006u, 0x0000553fu, 0x0000553du, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00005541u, 0x0000553du, 0x0000553fu, 0x0003003eu, 0x00005516u, 0x00005541u, 0x00040071u, 0x00000011u, 0x00005543u, 0x00005541u, 0x0004007cu, 0x00000012u, 0x00005544u, 0x00005543u, 0x00070050u, 0x00000013u, 0x00005545u, 0x00005544u, 0x00005544u, 0x00005544u, 0x00005544u, 0x0003003eu, 0x00005517u, 0x00005545u, 0x0003003eu, 0x00003eadu, 0x00005545u, 0x000200f9u, 0x000042c6u, 0x000200f8u, 0x000042c6u, 0x000700f5u, 0x00000013u, 0x00009097u, 0x00007705u, 0x000042b5u, 0x00005545u, 0x000042c7u, 0x000200f9u, 0x0000428bu, 0x000200f8u, 0x0000428cu, 0x0004007cu, 0x000000abu, 0x00004290u, 0x0000899au, 0x0003003eu, 0x00005e58u, 0x00003e62u, 0x0003003eu, 0x00005e59u, 0x00003e64u, 0x0003003eu, 0x00003f98u, 0x000019c4u, 0x0003003eu, 0x00003f99u, 0x00004290u, 0x00050041u, 0x00000007u, 0x000053d2u, 0x00003f99u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000053d3u, 0x000053d2u, 0x00050084u, 0x00000006u, 0x000053d4u, 0x00003e64u, 0x000053d3u, 0x00050080u, 0x00000006u, 0x000053d5u, 0x00003e62u, 0x000053d4u, 0x0003003eu, 0x000053cau, 0x000053d5u, 0x00050041u, 0x00000007u, 0x000053d6u, 0x00003f99u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000053d7u, 0x000053d6u, 0x00050084u, 0x00000006u, 0x000053d8u, 0x000053d7u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000053dau, 0x000053d5u, 0x000053d8u, 0x0003003eu, 0x000053cau, 0x000053dau, 0x000500c7u, 0x00000006u, 0x000053dcu, 0x000053dau, 0x0000068au, 0x0003003eu, 0x000053cau, 0x000053dcu, 0x000500c2u, 0x00000006u, 0x000053deu, 0x000053dcu, 0x000001a6u, 0x0003003eu, 0x000053cbu, 0x000053deu, 0x0004003du, 0x00000006u, 0x000053e0u, 0x000053d2u, 0x000500c7u, 0x00000006u, 0x000053e1u, 0x000053e0u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000053e2u, 0x000053e1u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000053e4u, 0x000053deu, 0x000053e2u, 0x0003003eu, 0x000053cbu, 0x000053e4u, 0x000500c6u, 0x00000006u, 0x000053e6u, 0x000053e4u, 0x000002f4u, 0x0003003eu, 0x000053cbu, 0x000053e6u, 0x00080041u, 0x00000778u, 0x000053e9u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000053e6u, 0x0004003du, 0x00000011u, 0x000053eau, 0x000053e9u, 0x00040071u, 0x00000006u, 0x000053ebu, 0x000053eau, 0x0003003eu, 0x000053ccu, 0x000053ebu, 0x000500c2u, 0x00000006u, 0x000053edu, 0x000053ebu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000053eeu, 0x000053edu, 0x0004007cu, 0x00000012u, 0x000053efu, 0x000053eeu, 0x000500c7u, 0x00000006u, 0x000053f1u, 0x000053ebu, 0x00000657u, 0x00040071u, 0x00000011u, 0x000053f2u, 0x000053f1u, 0x0004007cu, 0x00000012u, 0x000053f3u, 0x000053f2u, 0x00050050u, 0x0000011du, 0x000053f4u, 0x000053efu, 0x000053f3u, 0x0009004fu, 0x00000013u, 0x000053f5u, 0x000053f4u, 0x000053f4u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000053cdu, 0x000053f5u, 0x0003003eu, 0x00003e95u, 0x000053f5u, 0x000300f7u, 0x00004295u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004296u, 0x00004295u, 0x000200f8u, 0x00004296u, 0x00050050u, 0x00000058u, 0x00004299u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x0000429au, 0x00004299u, 0x0003003eu, 0x00005e5cu, 0x00003e62u, 0x0003003eu, 0x00005e5du, 0x00003e64u, 0x0003003eu, 0x00003f9bu, 0x000019c4u, 0x0003003eu, 0x00003f9cu, 0x0000429au, 0x00050041u, 0x00000007u, 0x000053feu, 0x00003f9cu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000053ffu, 0x000053feu, 0x00050084u, 0x00000006u, 0x00005400u, 0x00003e64u, 0x000053ffu, 0x00050080u, 0x00000006u, 0x00005401u, 0x00003e62u, 0x00005400u, 0x0003003eu, 0x000053f6u, 0x00005401u, 0x00050041u, 0x00000007u, 0x00005402u, 0x00003f9cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005403u, 0x00005402u, 0x00050084u, 0x00000006u, 0x00005404u, 0x00005403u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00005406u, 0x00005401u, 0x00005404u, 0x0003003eu, 0x000053f6u, 0x00005406u, 0x000500c7u, 0x00000006u, 0x00005408u, 0x00005406u, 0x0000068au, 0x0003003eu, 0x000053f6u, 0x00005408u, 0x000500c2u, 0x00000006u, 0x0000540au, 0x00005408u, 0x000001a6u, 0x0003003eu, 0x000053f7u, 0x0000540au, 0x0004003du, 0x00000006u, 0x0000540cu, 0x000053feu, 0x000500c7u, 0x00000006u, 0x0000540du, 0x0000540cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000540eu, 0x0000540du, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00005410u, 0x0000540au, 0x0000540eu, 0x0003003eu, 0x000053f7u, 0x00005410u, 0x000500c6u, 0x00000006u, 0x00005412u, 0x00005410u, 0x000002f4u, 0x0003003eu, 0x000053f7u, 0x00005412u, 0x00080041u, 0x00000778u, 0x00005415u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005412u, 0x0004003du, 0x00000011u, 0x00005416u, 0x00005415u, 0x00040071u, 0x00000006u, 0x00005417u, 0x00005416u, 0x0003003eu, 0x000053f8u, 0x00005417u, 0x000500c2u, 0x00000006u, 0x00005419u, 0x00005417u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000541au, 0x00005419u, 0x0004007cu, 0x00000012u, 0x0000541bu, 0x0000541au, 0x000500c7u, 0x00000006u, 0x0000541du, 0x00005417u, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000541eu, 0x0000541du, 0x0004007cu, 0x00000012u, 0x0000541fu, 0x0000541eu, 0x00050050u, 0x0000011du, 0x00005420u, 0x0000541bu, 0x0000541fu, 0x0009004fu, 0x00000013u, 0x00005421u, 0x00005420u, 0x00005420u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000053f9u, 0x00005421u, 0x0003003eu, 0x00003e9du, 0x00005421u, 0x00050050u, 0x00000058u, 0x000042a0u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000042a1u, 0x000042a0u, 0x0003003eu, 0x00005e60u, 0x00003e62u, 0x0003003eu, 0x00005e61u, 0x00003e64u, 0x0003003eu, 0x00003f9eu, 0x000019c4u, 0x0003003eu, 0x00003f9fu, 0x000042a1u, 0x00050041u, 0x00000007u, 0x0000542au, 0x00003f9fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000542bu, 0x0000542au, 0x00050084u, 0x00000006u, 0x0000542cu, 0x00003e64u, 0x0000542bu, 0x00050080u, 0x00000006u, 0x0000542du, 0x00003e62u, 0x0000542cu, 0x0003003eu, 0x00005422u, 0x0000542du, 0x00050041u, 0x00000007u, 0x0000542eu, 0x00003f9fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000542fu, 0x0000542eu, 0x00050084u, 0x00000006u, 0x00005430u, 0x0000542fu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00005432u, 0x0000542du, 0x00005430u, 0x0003003eu, 0x00005422u, 0x00005432u, 0x000500c7u, 0x00000006u, 0x00005434u, 0x00005432u, 0x0000068au, 0x0003003eu, 0x00005422u, 0x00005434u, 0x000500c2u, 0x00000006u, 0x00005436u, 0x00005434u, 0x000001a6u, 0x0003003eu, 0x00005423u, 0x00005436u, 0x0004003du, 0x00000006u, 0x00005438u, 0x0000542au, 0x000500c7u, 0x00000006u, 0x00005439u, 0x00005438u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000543au, 0x00005439u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000543cu, 0x00005436u, 0x0000543au, 0x0003003eu, 0x00005423u, 0x0000543cu, 0x000500c6u, 0x00000006u, 0x0000543eu, 0x0000543cu, 0x000002f4u, 0x0003003eu, 0x00005423u, 0x0000543eu, 0x00080041u, 0x00000778u, 0x00005441u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000543eu, 0x0004003du, 0x00000011u, 0x00005442u, 0x00005441u, 0x00040071u, 0x00000006u, 0x00005443u, 0x00005442u, 0x0003003eu, 0x00005424u, 0x00005443u, 0x000500c2u, 0x00000006u, 0x00005445u, 0x00005443u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00005446u, 0x00005445u, 0x0004007cu, 0x00000012u, 0x00005447u, 0x00005446u, 0x000500c7u, 0x00000006u, 0x00005449u, 0x00005443u, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000544au, 0x00005449u, 0x0004007cu, 0x00000012u, 0x0000544bu, 0x0000544au, 0x00050050u, 0x0000011du, 0x0000544cu, 0x00005447u, 0x0000544bu, 0x0009004fu, 0x00000013u, 0x0000544du, 0x0000544cu, 0x0000544cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005425u, 0x0000544du, 0x0003003eu, 0x00003ea5u, 0x0000544du, 0x000200f9u, 0x00004295u, 0x000200f8u, 0x00004295u, 0x000700f5u, 0x00000013u, 0x00008fb1u, 0x00007705u, 0x0000428cu, 0x0000544du, 0x00004296u, 0x000700f5u, 0x00000013u, 0x00008de9u, 0x00007705u, 0x0000428cu, 0x00005421u, 0x00004296u, 0x000300f7u, 0x000042a6u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000042a7u, 0x000042a6u, 0x000200f8u, 0x000042a7u, 0x00050050u, 0x00000058u, 0x000042aau, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000042abu, 0x000042aau, 0x0003003eu, 0x00005e64u, 0x00003e62u, 0x0003003eu, 0x00005e65u, 0x00003e64u, 0x0003003eu, 0x00003fa1u, 0x000019c4u, 0x0003003eu, 0x00003fa2u, 0x000042abu, 0x00050041u, 0x00000007u, 0x00005456u, 0x00003fa2u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005457u, 0x00005456u, 0x00050084u, 0x00000006u, 0x00005458u, 0x00003e64u, 0x00005457u, 0x00050080u, 0x00000006u, 0x00005459u, 0x00003e62u, 0x00005458u, 0x0003003eu, 0x0000544eu, 0x00005459u, 0x00050041u, 0x00000007u, 0x0000545au, 0x00003fa2u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000545bu, 0x0000545au, 0x00050084u, 0x00000006u, 0x0000545cu, 0x0000545bu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x0000545eu, 0x00005459u, 0x0000545cu, 0x0003003eu, 0x0000544eu, 0x0000545eu, 0x000500c7u, 0x00000006u, 0x00005460u, 0x0000545eu, 0x0000068au, 0x0003003eu, 0x0000544eu, 0x00005460u, 0x000500c2u, 0x00000006u, 0x00005462u, 0x00005460u, 0x000001a6u, 0x0003003eu, 0x0000544fu, 0x00005462u, 0x0004003du, 0x00000006u, 0x00005464u, 0x00005456u, 0x000500c7u, 0x00000006u, 0x00005465u, 0x00005464u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005466u, 0x00005465u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00005468u, 0x00005462u, 0x00005466u, 0x0003003eu, 0x0000544fu, 0x00005468u, 0x000500c6u, 0x00000006u, 0x0000546au, 0x00005468u, 0x000002f4u, 0x0003003eu, 0x0000544fu, 0x0000546au, 0x00080041u, 0x00000778u, 0x0000546du, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000546au, 0x0004003du, 0x00000011u, 0x0000546eu, 0x0000546du, 0x00040071u, 0x00000006u, 0x0000546fu, 0x0000546eu, 0x0003003eu, 0x00005450u, 0x0000546fu, 0x000500c2u, 0x00000006u, 0x00005471u, 0x0000546fu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00005472u, 0x00005471u, 0x0004007cu, 0x00000012u, 0x00005473u, 0x00005472u, 0x000500c7u, 0x00000006u, 0x00005475u, 0x0000546fu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00005476u, 0x00005475u, 0x0004007cu, 0x00000012u, 0x00005477u, 0x00005476u, 0x00050050u, 0x0000011du, 0x00005478u, 0x00005473u, 0x00005477u, 0x0009004fu, 0x00000013u, 0x00005479u, 0x00005478u, 0x00005478u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005451u, 0x00005479u, 0x0003003eu, 0x00003eadu, 0x00005479u, 0x000200f9u, 0x000042a6u, 0x000200f8u, 0x000042a6u, 0x000700f5u, 0x00000013u, 0x00009095u, 0x00007705u, 0x00004295u, 0x00005479u, 0x000042a7u, 0x000200f9u, 0x0000428bu, 0x000200f8u, 0x0000428bu, 0x000900f5u, 0x00000013u, 0x00009094u, 0x00009095u, 0x000042a6u, 0x00009097u, 0x000042c6u, 0x00009099u, 0x000042e6u, 0x000900f5u, 0x00000013u, 0x00008fafu, 0x00008fb1u, 0x000042a6u, 0x00008fb3u, 0x000042c6u, 0x00008fb5u, 0x000042e6u, 0x000900f5u, 0x00000013u, 0x00008eccu, 0x000053f5u, 0x000042a6u, 0x000054acu, 0x000042c6u, 0x00005569u, 0x000042e6u, 0x000900f5u, 0x00000013u, 0x00008de7u, 0x00008de9u, 0x000042a6u, 0x00008debu, 0x000042c6u, 0x00008dedu, 0x000042e6u, 0x000200f9u, 0x000040ceu, 0x000200f8u, 0x000040d2u, 0x00040071u, 0x00000006u, 0x00004200u, 0x0000b64au, 0x0004007cu, 0x00000008u, 0x00004201u, 0x00004200u, 0x000300f7u, 0x00004202u, 0x00000000u, 0x000b00fbu, 0x00004201u, 0x00004202u, 0x00000000u, 0x00004203u, 0x00000001u, 0x00004204u, 0x00000002u, 0x00004205u, 0x00000003u, 0x00004206u, 0x000200f8u, 0x00004206u, 0x0004007cu, 0x000000abu, 0x00004268u, 0x0000899au, 0x0003003eu, 0x00005e28u, 0x00003e62u, 0x0003003eu, 0x00005e29u, 0x00003e64u, 0x0003003eu, 0x00003f74u, 0x000019c4u, 0x0003003eu, 0x00003f75u, 0x00004268u, 0x00050041u, 0x00000007u, 0x00005322u, 0x00003f75u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005323u, 0x00005322u, 0x00050084u, 0x00000006u, 0x00005324u, 0x00003e64u, 0x00005323u, 0x00050080u, 0x00000006u, 0x00005325u, 0x00003e62u, 0x00005324u, 0x0003003eu, 0x0000531au, 0x00005325u, 0x00050041u, 0x00000007u, 0x00005326u, 0x00003f75u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005327u, 0x00005326u, 0x00050084u, 0x00000006u, 0x00005328u, 0x00005327u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x0000532au, 0x00005325u, 0x00005328u, 0x0003003eu, 0x0000531au, 0x0000532au, 0x000500c7u, 0x00000006u, 0x0000532cu, 0x0000532au, 0x0000068au, 0x0003003eu, 0x0000531au, 0x0000532cu, 0x000500c2u, 0x00000006u, 0x0000532eu, 0x0000532cu, 0x000001a6u, 0x0003003eu, 0x0000531bu, 0x0000532eu, 0x0004003du, 0x00000006u, 0x00005330u, 0x00005322u, 0x000500c7u, 0x00000006u, 0x00005331u, 0x00005330u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005332u, 0x00005331u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00005334u, 0x0000532eu, 0x00005332u, 0x0003003eu, 0x0000531bu, 0x00005334u, 0x000500c6u, 0x00000006u, 0x00005336u, 0x00005334u, 0x000002f4u, 0x0003003eu, 0x0000531bu, 0x00005336u, 0x00080041u, 0x00000778u, 0x00005339u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005336u, 0x0004003du, 0x00000011u, 0x0000533au, 0x00005339u, 0x00040071u, 0x00000006u, 0x0000533bu, 0x0000533au, 0x0003003eu, 0x0000531cu, 0x0000533bu, 0x000500c2u, 0x00000006u, 0x0000533du, 0x0000533bu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000533eu, 0x0000533du, 0x0004007cu, 0x00000012u, 0x0000533fu, 0x0000533eu, 0x000500c7u, 0x00000006u, 0x00005341u, 0x0000533bu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00005342u, 0x00005341u, 0x0004007cu, 0x00000012u, 0x00005343u, 0x00005342u, 0x00050050u, 0x0000011du, 0x00005344u, 0x0000533fu, 0x00005343u, 0x0009004fu, 0x00000013u, 0x00005345u, 0x00005344u, 0x00005344u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000531du, 0x00005345u, 0x0003003eu, 0x00003e95u, 0x00005345u, 0x000300f7u, 0x0000426du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000426eu, 0x0000426du, 0x000200f8u, 0x0000426eu, 0x00050050u, 0x00000058u, 0x00004271u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004272u, 0x00004271u, 0x0003003eu, 0x00005e2cu, 0x00003e62u, 0x0003003eu, 0x00005e2du, 0x00003e64u, 0x0003003eu, 0x00003f77u, 0x000019c4u, 0x0003003eu, 0x00003f78u, 0x00004272u, 0x00050041u, 0x00000007u, 0x0000534eu, 0x00003f78u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000534fu, 0x0000534eu, 0x00050084u, 0x00000006u, 0x00005350u, 0x00003e64u, 0x0000534fu, 0x00050080u, 0x00000006u, 0x00005351u, 0x00003e62u, 0x00005350u, 0x0003003eu, 0x00005346u, 0x00005351u, 0x00050041u, 0x00000007u, 0x00005352u, 0x00003f78u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005353u, 0x00005352u, 0x00050084u, 0x00000006u, 0x00005354u, 0x00005353u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00005356u, 0x00005351u, 0x00005354u, 0x0003003eu, 0x00005346u, 0x00005356u, 0x000500c7u, 0x00000006u, 0x00005358u, 0x00005356u, 0x0000068au, 0x0003003eu, 0x00005346u, 0x00005358u, 0x000500c2u, 0x00000006u, 0x0000535au, 0x00005358u, 0x000001a6u, 0x0003003eu, 0x00005347u, 0x0000535au, 0x0004003du, 0x00000006u, 0x0000535cu, 0x0000534eu, 0x000500c7u, 0x00000006u, 0x0000535du, 0x0000535cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000535eu, 0x0000535du, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00005360u, 0x0000535au, 0x0000535eu, 0x0003003eu, 0x00005347u, 0x00005360u, 0x000500c6u, 0x00000006u, 0x00005362u, 0x00005360u, 0x000002f4u, 0x0003003eu, 0x00005347u, 0x00005362u, 0x00080041u, 0x00000778u, 0x00005365u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005362u, 0x0004003du, 0x00000011u, 0x00005366u, 0x00005365u, 0x00040071u, 0x00000006u, 0x00005367u, 0x00005366u, 0x0003003eu, 0x00005348u, 0x00005367u, 0x000500c2u, 0x00000006u, 0x00005369u, 0x00005367u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000536au, 0x00005369u, 0x0004007cu, 0x00000012u, 0x0000536bu, 0x0000536au, 0x000500c7u, 0x00000006u, 0x0000536du, 0x00005367u, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000536eu, 0x0000536du, 0x0004007cu, 0x00000012u, 0x0000536fu, 0x0000536eu, 0x00050050u, 0x0000011du, 0x00005370u, 0x0000536bu, 0x0000536fu, 0x0009004fu, 0x00000013u, 0x00005371u, 0x00005370u, 0x00005370u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005349u, 0x00005371u, 0x0003003eu, 0x00003e9du, 0x00005371u, 0x00050050u, 0x00000058u, 0x00004278u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004279u, 0x00004278u, 0x0003003eu, 0x00005e30u, 0x00003e62u, 0x0003003eu, 0x00005e31u, 0x00003e64u, 0x0003003eu, 0x00003f7au, 0x000019c4u, 0x0003003eu, 0x00003f7bu, 0x00004279u, 0x00050041u, 0x00000007u, 0x0000537au, 0x00003f7bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000537bu, 0x0000537au, 0x00050084u, 0x00000006u, 0x0000537cu, 0x00003e64u, 0x0000537bu, 0x00050080u, 0x00000006u, 0x0000537du, 0x00003e62u, 0x0000537cu, 0x0003003eu, 0x00005372u, 0x0000537du, 0x00050041u, 0x00000007u, 0x0000537eu, 0x00003f7bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000537fu, 0x0000537eu, 0x00050084u, 0x00000006u, 0x00005380u, 0x0000537fu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00005382u, 0x0000537du, 0x00005380u, 0x0003003eu, 0x00005372u, 0x00005382u, 0x000500c7u, 0x00000006u, 0x00005384u, 0x00005382u, 0x0000068au, 0x0003003eu, 0x00005372u, 0x00005384u, 0x000500c2u, 0x00000006u, 0x00005386u, 0x00005384u, 0x000001a6u, 0x0003003eu, 0x00005373u, 0x00005386u, 0x0004003du, 0x00000006u, 0x00005388u, 0x0000537au, 0x000500c7u, 0x00000006u, 0x00005389u, 0x00005388u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000538au, 0x00005389u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000538cu, 0x00005386u, 0x0000538au, 0x0003003eu, 0x00005373u, 0x0000538cu, 0x000500c6u, 0x00000006u, 0x0000538eu, 0x0000538cu, 0x000002f4u, 0x0003003eu, 0x00005373u, 0x0000538eu, 0x00080041u, 0x00000778u, 0x00005391u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000538eu, 0x0004003du, 0x00000011u, 0x00005392u, 0x00005391u, 0x00040071u, 0x00000006u, 0x00005393u, 0x00005392u, 0x0003003eu, 0x00005374u, 0x00005393u, 0x000500c2u, 0x00000006u, 0x00005395u, 0x00005393u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00005396u, 0x00005395u, 0x0004007cu, 0x00000012u, 0x00005397u, 0x00005396u, 0x000500c7u, 0x00000006u, 0x00005399u, 0x00005393u, 0x00000657u, 0x00040071u, 0x00000011u, 0x0000539au, 0x00005399u, 0x0004007cu, 0x00000012u, 0x0000539bu, 0x0000539au, 0x00050050u, 0x0000011du, 0x0000539cu, 0x00005397u, 0x0000539bu, 0x0009004fu, 0x00000013u, 0x0000539du, 0x0000539cu, 0x0000539cu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00005375u, 0x0000539du, 0x0003003eu, 0x00003ea5u, 0x0000539du, 0x000200f9u, 0x0000426du, 0x000200f8u, 0x0000426du, 0x000700f5u, 0x00000013u, 0x00008faeu, 0x00007705u, 0x00004206u, 0x0000539du, 0x0000426eu, 0x000700f5u, 0x00000013u, 0x00008de6u, 0x00007705u, 0x00004206u, 0x00005371u, 0x0000426eu, 0x000300f7u, 0x0000427eu, 0x00000000u, 0x000400fau, 0x00004011u, 0x0000427fu, 0x0000427eu, 0x000200f8u, 0x0000427fu, 0x00050050u, 0x00000058u, 0x00004282u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004283u, 0x00004282u, 0x0003003eu, 0x00005e34u, 0x00003e62u, 0x0003003eu, 0x00005e35u, 0x00003e64u, 0x0003003eu, 0x00003f7du, 0x000019c4u, 0x0003003eu, 0x00003f7eu, 0x00004283u, 0x00050041u, 0x00000007u, 0x000053a6u, 0x00003f7eu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000053a7u, 0x000053a6u, 0x00050084u, 0x00000006u, 0x000053a8u, 0x00003e64u, 0x000053a7u, 0x00050080u, 0x00000006u, 0x000053a9u, 0x00003e62u, 0x000053a8u, 0x0003003eu, 0x0000539eu, 0x000053a9u, 0x00050041u, 0x00000007u, 0x000053aau, 0x00003f7eu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000053abu, 0x000053aau, 0x00050084u, 0x00000006u, 0x000053acu, 0x000053abu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000053aeu, 0x000053a9u, 0x000053acu, 0x0003003eu, 0x0000539eu, 0x000053aeu, 0x000500c7u, 0x00000006u, 0x000053b0u, 0x000053aeu, 0x0000068au, 0x0003003eu, 0x0000539eu, 0x000053b0u, 0x000500c2u, 0x00000006u, 0x000053b2u, 0x000053b0u, 0x000001a6u, 0x0003003eu, 0x0000539fu, 0x000053b2u, 0x0004003du, 0x00000006u, 0x000053b4u, 0x000053a6u, 0x000500c7u, 0x00000006u, 0x000053b5u, 0x000053b4u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000053b6u, 0x000053b5u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000053b8u, 0x000053b2u, 0x000053b6u, 0x0003003eu, 0x0000539fu, 0x000053b8u, 0x000500c6u, 0x00000006u, 0x000053bau, 0x000053b8u, 0x000002f4u, 0x0003003eu, 0x0000539fu, 0x000053bau, 0x00080041u, 0x00000778u, 0x000053bdu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000053bau, 0x0004003du, 0x00000011u, 0x000053beu, 0x000053bdu, 0x00040071u, 0x00000006u, 0x000053bfu, 0x000053beu, 0x0003003eu, 0x000053a0u, 0x000053bfu, 0x000500c2u, 0x00000006u, 0x000053c1u, 0x000053bfu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000053c2u, 0x000053c1u, 0x0004007cu, 0x00000012u, 0x000053c3u, 0x000053c2u, 0x000500c7u, 0x00000006u, 0x000053c5u, 0x000053bfu, 0x00000657u, 0x00040071u, 0x00000011u, 0x000053c6u, 0x000053c5u, 0x0004007cu, 0x00000012u, 0x000053c7u, 0x000053c6u, 0x00050050u, 0x0000011du, 0x000053c8u, 0x000053c3u, 0x000053c7u, 0x0009004fu, 0x00000013u, 0x000053c9u, 0x000053c8u, 0x000053c8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x000053a1u, 0x000053c9u, 0x0003003eu, 0x00003eadu, 0x000053c9u, 0x000200f9u, 0x0000427eu, 0x000200f8u, 0x0000427eu, 0x000700f5u, 0x00000013u, 0x00009092u, 0x00007705u, 0x0000426du, 0x000053c9u, 0x0000427fu, 0x000200f9u, 0x00004202u, 0x000200f8u, 0x00004205u, 0x0004007cu, 0x000000abu, 0x00004248u, 0x0000899au, 0x0003003eu, 0x00005e18u, 0x00003e62u, 0x0003003eu, 0x00005e19u, 0x00003e64u, 0x0003003eu, 0x00003f68u, 0x000019c4u, 0x0003003eu, 0x00003f69u, 0x00004248u, 0x00050041u, 0x00000007u, 0x0000523fu, 0x00003f69u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005240u, 0x0000523fu, 0x00050084u, 0x00000006u, 0x00005241u, 0x00003e64u, 0x00005240u, 0x00050080u, 0x00000006u, 0x00005242u, 0x00003e62u, 0x00005241u, 0x0003003eu, 0x00005236u, 0x00005242u, 0x00050041u, 0x00000007u, 0x00005243u, 0x00003f69u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005244u, 0x00005243u, 0x00050084u, 0x00000006u, 0x00005245u, 0x00005244u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00005247u, 0x00005242u, 0x00005245u, 0x0003003eu, 0x00005236u, 0x00005247u, 0x000500c7u, 0x00000006u, 0x00005249u, 0x00005247u, 0x0000068au, 0x0003003eu, 0x00005236u, 0x00005249u, 0x000500c2u, 0x00000006u, 0x0000524bu, 0x00005249u, 0x000001a6u, 0x0003003eu, 0x00005237u, 0x0000524bu, 0x0004003du, 0x00000006u, 0x0000524du, 0x0000523fu, 0x000500c7u, 0x00000006u, 0x0000524eu, 0x0000524du, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000524fu, 0x0000524eu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00005251u, 0x0000524bu, 0x0000524fu, 0x0003003eu, 0x00005237u, 0x00005251u, 0x000500c6u, 0x00000006u, 0x00005253u, 0x00005251u, 0x000002f4u, 0x0003003eu, 0x00005237u, 0x00005253u, 0x00080041u, 0x00000778u, 0x00005256u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005253u, 0x0004003du, 0x00000011u, 0x00005257u, 0x00005256u, 0x00040071u, 0x00000006u, 0x00005258u, 0x00005257u, 0x0003003eu, 0x00005238u, 0x00005258u, 0x0003003eu, 0x00005239u, 0x00005258u, 0x000500c2u, 0x00000006u, 0x0000525fu, 0x00005258u, 0x000001d9u, 0x0003003eu, 0x0000525bu, 0x0000525fu, 0x000500c7u, 0x00000006u, 0x00005261u, 0x00005258u, 0x00000657u, 0x0003003eu, 0x0000525cu, 0x00005261u, 0x00040071u, 0x00000011u, 0x00005263u, 0x0000525fu, 0x0004007cu, 0x00000012u, 0x00005264u, 0x00005263u, 0x00040071u, 0x00000011u, 0x0000526cu, 0x00005261u, 0x0004007cu, 0x00000012u, 0x0000526du, 0x0000526cu, 0x00070050u, 0x00000013u, 0x0000526eu, 0x00005264u, 0x00005264u, 0x00005264u, 0x0000526du, 0x0003003eu, 0x0000525du, 0x0000526eu, 0x0003003eu, 0x0000523au, 0x0000526eu, 0x0003003eu, 0x00003e95u, 0x0000526eu, 0x000300f7u, 0x0000424du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000424eu, 0x0000424du, 0x000200f8u, 0x0000424eu, 0x00050050u, 0x00000058u, 0x00004251u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004252u, 0x00004251u, 0x0003003eu, 0x00005e1cu, 0x00003e62u, 0x0003003eu, 0x00005e1du, 0x00003e64u, 0x0003003eu, 0x00003f6bu, 0x000019c4u, 0x0003003eu, 0x00003f6cu, 0x00004252u, 0x00050041u, 0x00000007u, 0x00005278u, 0x00003f6cu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005279u, 0x00005278u, 0x00050084u, 0x00000006u, 0x0000527au, 0x00003e64u, 0x00005279u, 0x00050080u, 0x00000006u, 0x0000527bu, 0x00003e62u, 0x0000527au, 0x0003003eu, 0x0000526fu, 0x0000527bu, 0x00050041u, 0x00000007u, 0x0000527cu, 0x00003f6cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000527du, 0x0000527cu, 0x00050084u, 0x00000006u, 0x0000527eu, 0x0000527du, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00005280u, 0x0000527bu, 0x0000527eu, 0x0003003eu, 0x0000526fu, 0x00005280u, 0x000500c7u, 0x00000006u, 0x00005282u, 0x00005280u, 0x0000068au, 0x0003003eu, 0x0000526fu, 0x00005282u, 0x000500c2u, 0x00000006u, 0x00005284u, 0x00005282u, 0x000001a6u, 0x0003003eu, 0x00005270u, 0x00005284u, 0x0004003du, 0x00000006u, 0x00005286u, 0x00005278u, 0x000500c7u, 0x00000006u, 0x00005287u, 0x00005286u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005288u, 0x00005287u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000528au, 0x00005284u, 0x00005288u, 0x0003003eu, 0x00005270u, 0x0000528au, 0x000500c6u, 0x00000006u, 0x0000528cu, 0x0000528au, 0x000002f4u, 0x0003003eu, 0x00005270u, 0x0000528cu, 0x00080041u, 0x00000778u, 0x0000528fu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000528cu, 0x0004003du, 0x00000011u, 0x00005290u, 0x0000528fu, 0x00040071u, 0x00000006u, 0x00005291u, 0x00005290u, 0x0003003eu, 0x00005271u, 0x00005291u, 0x0003003eu, 0x00005272u, 0x00005291u, 0x000500c2u, 0x00000006u, 0x00005298u, 0x00005291u, 0x000001d9u, 0x0003003eu, 0x00005294u, 0x00005298u, 0x000500c7u, 0x00000006u, 0x0000529au, 0x00005291u, 0x00000657u, 0x0003003eu, 0x00005295u, 0x0000529au, 0x00040071u, 0x00000011u, 0x0000529cu, 0x00005298u, 0x0004007cu, 0x00000012u, 0x0000529du, 0x0000529cu, 0x00040071u, 0x00000011u, 0x000052a5u, 0x0000529au, 0x0004007cu, 0x00000012u, 0x000052a6u, 0x000052a5u, 0x00070050u, 0x00000013u, 0x000052a7u, 0x0000529du, 0x0000529du, 0x0000529du, 0x000052a6u, 0x0003003eu, 0x00005296u, 0x000052a7u, 0x0003003eu, 0x00005273u, 0x000052a7u, 0x0003003eu, 0x00003e9du, 0x000052a7u, 0x00050050u, 0x00000058u, 0x00004258u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004259u, 0x00004258u, 0x0003003eu, 0x00005e20u, 0x00003e62u, 0x0003003eu, 0x00005e21u, 0x00003e64u, 0x0003003eu, 0x00003f6eu, 0x000019c4u, 0x0003003eu, 0x00003f6fu, 0x00004259u, 0x00050041u, 0x00000007u, 0x000052b1u, 0x00003f6fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000052b2u, 0x000052b1u, 0x00050084u, 0x00000006u, 0x000052b3u, 0x00003e64u, 0x000052b2u, 0x00050080u, 0x00000006u, 0x000052b4u, 0x00003e62u, 0x000052b3u, 0x0003003eu, 0x000052a8u, 0x000052b4u, 0x00050041u, 0x00000007u, 0x000052b5u, 0x00003f6fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000052b6u, 0x000052b5u, 0x00050084u, 0x00000006u, 0x000052b7u, 0x000052b6u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000052b9u, 0x000052b4u, 0x000052b7u, 0x0003003eu, 0x000052a8u, 0x000052b9u, 0x000500c7u, 0x00000006u, 0x000052bbu, 0x000052b9u, 0x0000068au, 0x0003003eu, 0x000052a8u, 0x000052bbu, 0x000500c2u, 0x00000006u, 0x000052bdu, 0x000052bbu, 0x000001a6u, 0x0003003eu, 0x000052a9u, 0x000052bdu, 0x0004003du, 0x00000006u, 0x000052bfu, 0x000052b1u, 0x000500c7u, 0x00000006u, 0x000052c0u, 0x000052bfu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000052c1u, 0x000052c0u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000052c3u, 0x000052bdu, 0x000052c1u, 0x0003003eu, 0x000052a9u, 0x000052c3u, 0x000500c6u, 0x00000006u, 0x000052c5u, 0x000052c3u, 0x000002f4u, 0x0003003eu, 0x000052a9u, 0x000052c5u, 0x00080041u, 0x00000778u, 0x000052c8u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000052c5u, 0x0004003du, 0x00000011u, 0x000052c9u, 0x000052c8u, 0x00040071u, 0x00000006u, 0x000052cau, 0x000052c9u, 0x0003003eu, 0x000052aau, 0x000052cau, 0x0003003eu, 0x000052abu, 0x000052cau, 0x000500c2u, 0x00000006u, 0x000052d1u, 0x000052cau, 0x000001d9u, 0x0003003eu, 0x000052cdu, 0x000052d1u, 0x000500c7u, 0x00000006u, 0x000052d3u, 0x000052cau, 0x00000657u, 0x0003003eu, 0x000052ceu, 0x000052d3u, 0x00040071u, 0x00000011u, 0x000052d5u, 0x000052d1u, 0x0004007cu, 0x00000012u, 0x000052d6u, 0x000052d5u, 0x00040071u, 0x00000011u, 0x000052deu, 0x000052d3u, 0x0004007cu, 0x00000012u, 0x000052dfu, 0x000052deu, 0x00070050u, 0x00000013u, 0x000052e0u, 0x000052d6u, 0x000052d6u, 0x000052d6u, 0x000052dfu, 0x0003003eu, 0x000052cfu, 0x000052e0u, 0x0003003eu, 0x000052acu, 0x000052e0u, 0x0003003eu, 0x00003ea5u, 0x000052e0u, 0x000200f9u, 0x0000424du, 0x000200f8u, 0x0000424du, 0x000700f5u, 0x00000013u, 0x00008facu, 0x00007705u, 0x00004205u, 0x000052e0u, 0x0000424eu, 0x000700f5u, 0x00000013u, 0x00008de4u, 0x00007705u, 0x00004205u, 0x000052a7u, 0x0000424eu, 0x000300f7u, 0x0000425eu, 0x00000000u, 0x000400fau, 0x00004011u, 0x0000425fu, 0x0000425eu, 0x000200f8u, 0x0000425fu, 0x00050050u, 0x00000058u, 0x00004262u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004263u, 0x00004262u, 0x0003003eu, 0x00005e24u, 0x00003e62u, 0x0003003eu, 0x00005e25u, 0x00003e64u, 0x0003003eu, 0x00003f71u, 0x000019c4u, 0x0003003eu, 0x00003f72u, 0x00004263u, 0x00050041u, 0x00000007u, 0x000052eau, 0x00003f72u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000052ebu, 0x000052eau, 0x00050084u, 0x00000006u, 0x000052ecu, 0x00003e64u, 0x000052ebu, 0x00050080u, 0x00000006u, 0x000052edu, 0x00003e62u, 0x000052ecu, 0x0003003eu, 0x000052e1u, 0x000052edu, 0x00050041u, 0x00000007u, 0x000052eeu, 0x00003f72u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000052efu, 0x000052eeu, 0x00050084u, 0x00000006u, 0x000052f0u, 0x000052efu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000052f2u, 0x000052edu, 0x000052f0u, 0x0003003eu, 0x000052e1u, 0x000052f2u, 0x000500c7u, 0x00000006u, 0x000052f4u, 0x000052f2u, 0x0000068au, 0x0003003eu, 0x000052e1u, 0x000052f4u, 0x000500c2u, 0x00000006u, 0x000052f6u, 0x000052f4u, 0x000001a6u, 0x0003003eu, 0x000052e2u, 0x000052f6u, 0x0004003du, 0x00000006u, 0x000052f8u, 0x000052eau, 0x000500c7u, 0x00000006u, 0x000052f9u, 0x000052f8u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000052fau, 0x000052f9u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000052fcu, 0x000052f6u, 0x000052fau, 0x0003003eu, 0x000052e2u, 0x000052fcu, 0x000500c6u, 0x00000006u, 0x000052feu, 0x000052fcu, 0x000002f4u, 0x0003003eu, 0x000052e2u, 0x000052feu, 0x00080041u, 0x00000778u, 0x00005301u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000052feu, 0x0004003du, 0x00000011u, 0x00005302u, 0x00005301u, 0x00040071u, 0x00000006u, 0x00005303u, 0x00005302u, 0x0003003eu, 0x000052e3u, 0x00005303u, 0x0003003eu, 0x000052e4u, 0x00005303u, 0x000500c2u, 0x00000006u, 0x0000530au, 0x00005303u, 0x000001d9u, 0x0003003eu, 0x00005306u, 0x0000530au, 0x000500c7u, 0x00000006u, 0x0000530cu, 0x00005303u, 0x00000657u, 0x0003003eu, 0x00005307u, 0x0000530cu, 0x00040071u, 0x00000011u, 0x0000530eu, 0x0000530au, 0x0004007cu, 0x00000012u, 0x0000530fu, 0x0000530eu, 0x00040071u, 0x00000011u, 0x00005317u, 0x0000530cu, 0x0004007cu, 0x00000012u, 0x00005318u, 0x00005317u, 0x00070050u, 0x00000013u, 0x00005319u, 0x0000530fu, 0x0000530fu, 0x0000530fu, 0x00005318u, 0x0003003eu, 0x00005308u, 0x00005319u, 0x0003003eu, 0x000052e5u, 0x00005319u, 0x0003003eu, 0x00003eadu, 0x00005319u, 0x000200f9u, 0x0000425eu, 0x000200f8u, 0x0000425eu, 0x000700f5u, 0x00000013u, 0x00009090u, 0x00007705u, 0x0000424du, 0x00005319u, 0x0000425fu, 0x000200f9u, 0x00004202u, 0x000200f8u, 0x00004204u, 0x0004007cu, 0x000000abu, 0x00004228u, 0x0000899au, 0x0003003eu, 0x00005e08u, 0x00003e62u, 0x0003003eu, 0x00005e09u, 0x00003e64u, 0x0003003eu, 0x00003f5cu, 0x000019c4u, 0x0003003eu, 0x00003f5du, 0x00004228u, 0x00050041u, 0x00000007u, 0x00005154u, 0x00003f5du, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005155u, 0x00005154u, 0x00050084u, 0x00000006u, 0x00005156u, 0x00003e64u, 0x00005155u, 0x00050080u, 0x00000006u, 0x00005157u, 0x00003e62u, 0x00005156u, 0x0003003eu, 0x0000514au, 0x00005157u, 0x00050041u, 0x00000007u, 0x00005158u, 0x00003f5du, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005159u, 0x00005158u, 0x00050080u, 0x00000006u, 0x0000515bu, 0x00005157u, 0x00005159u, 0x0003003eu, 0x0000514au, 0x0000515bu, 0x000500c7u, 0x00000006u, 0x0000515du, 0x0000515bu, 0x0000068au, 0x0003003eu, 0x0000514au, 0x0000515du, 0x0003003eu, 0x0000514bu, 0x0000515du, 0x0004003du, 0x00000006u, 0x00005160u, 0x00005154u, 0x000500c7u, 0x00000006u, 0x00005161u, 0x00005160u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005162u, 0x00005161u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005164u, 0x0000515du, 0x00005162u, 0x0003003eu, 0x0000514bu, 0x00005164u, 0x000500c6u, 0x00000006u, 0x00005166u, 0x00005164u, 0x000002fbu, 0x0003003eu, 0x0000514bu, 0x00005166u, 0x00080041u, 0x000006a8u, 0x00005169u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005166u, 0x0004003du, 0x0000000fu, 0x0000516au, 0x00005169u, 0x00040071u, 0x00000006u, 0x0000516bu, 0x0000516au, 0x0003003eu, 0x0000514cu, 0x0000516bu, 0x000500c2u, 0x00000006u, 0x0000516du, 0x0000516bu, 0x000001afu, 0x0003003eu, 0x0000514du, 0x0000516du, 0x000500c7u, 0x00000006u, 0x0000516fu, 0x0000516bu, 0x000006afu, 0x0003003eu, 0x0000514eu, 0x0000516fu, 0x000500c4u, 0x00000006u, 0x00005171u, 0x0000516fu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00005173u, 0x0000516fu, 0x00005171u, 0x0003003eu, 0x0000514eu, 0x00005173u, 0x000500c4u, 0x00000006u, 0x00005175u, 0x0000516du, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00005177u, 0x0000516du, 0x00005175u, 0x0003003eu, 0x0000514du, 0x00005177u, 0x00040071u, 0x00000011u, 0x00005179u, 0x00005177u, 0x0004007cu, 0x00000012u, 0x0000517au, 0x00005179u, 0x00040071u, 0x00000011u, 0x00005182u, 0x00005173u, 0x0004007cu, 0x00000012u, 0x00005183u, 0x00005182u, 0x00070050u, 0x00000013u, 0x00005184u, 0x0000517au, 0x0000517au, 0x0000517au, 0x00005183u, 0x0003003eu, 0x0000514fu, 0x00005184u, 0x0003003eu, 0x00003e95u, 0x00005184u, 0x000300f7u, 0x0000422du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000422eu, 0x0000422du, 0x000200f8u, 0x0000422eu, 0x00050050u, 0x00000058u, 0x00004231u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004232u, 0x00004231u, 0x0003003eu, 0x00005e0cu, 0x00003e62u, 0x0003003eu, 0x00005e0du, 0x00003e64u, 0x0003003eu, 0x00003f5fu, 0x000019c4u, 0x0003003eu, 0x00003f60u, 0x00004232u, 0x00050041u, 0x00000007u, 0x0000518fu, 0x00003f60u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005190u, 0x0000518fu, 0x00050084u, 0x00000006u, 0x00005191u, 0x00003e64u, 0x00005190u, 0x00050080u, 0x00000006u, 0x00005192u, 0x00003e62u, 0x00005191u, 0x0003003eu, 0x00005185u, 0x00005192u, 0x00050041u, 0x00000007u, 0x00005193u, 0x00003f60u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005194u, 0x00005193u, 0x00050080u, 0x00000006u, 0x00005196u, 0x00005192u, 0x00005194u, 0x0003003eu, 0x00005185u, 0x00005196u, 0x000500c7u, 0x00000006u, 0x00005198u, 0x00005196u, 0x0000068au, 0x0003003eu, 0x00005185u, 0x00005198u, 0x0003003eu, 0x00005186u, 0x00005198u, 0x0004003du, 0x00000006u, 0x0000519bu, 0x0000518fu, 0x000500c7u, 0x00000006u, 0x0000519cu, 0x0000519bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000519du, 0x0000519cu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000519fu, 0x00005198u, 0x0000519du, 0x0003003eu, 0x00005186u, 0x0000519fu, 0x000500c6u, 0x00000006u, 0x000051a1u, 0x0000519fu, 0x000002fbu, 0x0003003eu, 0x00005186u, 0x000051a1u, 0x00080041u, 0x000006a8u, 0x000051a4u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000051a1u, 0x0004003du, 0x0000000fu, 0x000051a5u, 0x000051a4u, 0x00040071u, 0x00000006u, 0x000051a6u, 0x000051a5u, 0x0003003eu, 0x00005187u, 0x000051a6u, 0x000500c2u, 0x00000006u, 0x000051a8u, 0x000051a6u, 0x000001afu, 0x0003003eu, 0x00005188u, 0x000051a8u, 0x000500c7u, 0x00000006u, 0x000051aau, 0x000051a6u, 0x000006afu, 0x0003003eu, 0x00005189u, 0x000051aau, 0x000500c4u, 0x00000006u, 0x000051acu, 0x000051aau, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000051aeu, 0x000051aau, 0x000051acu, 0x0003003eu, 0x00005189u, 0x000051aeu, 0x000500c4u, 0x00000006u, 0x000051b0u, 0x000051a8u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000051b2u, 0x000051a8u, 0x000051b0u, 0x0003003eu, 0x00005188u, 0x000051b2u, 0x00040071u, 0x00000011u, 0x000051b4u, 0x000051b2u, 0x0004007cu, 0x00000012u, 0x000051b5u, 0x000051b4u, 0x00040071u, 0x00000011u, 0x000051bdu, 0x000051aeu, 0x0004007cu, 0x00000012u, 0x000051beu, 0x000051bdu, 0x00070050u, 0x00000013u, 0x000051bfu, 0x000051b5u, 0x000051b5u, 0x000051b5u, 0x000051beu, 0x0003003eu, 0x0000518au, 0x000051bfu, 0x0003003eu, 0x00003e9du, 0x000051bfu, 0x00050050u, 0x00000058u, 0x00004238u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004239u, 0x00004238u, 0x0003003eu, 0x00005e10u, 0x00003e62u, 0x0003003eu, 0x00005e11u, 0x00003e64u, 0x0003003eu, 0x00003f62u, 0x000019c4u, 0x0003003eu, 0x00003f63u, 0x00004239u, 0x00050041u, 0x00000007u, 0x000051cau, 0x00003f63u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000051cbu, 0x000051cau, 0x00050084u, 0x00000006u, 0x000051ccu, 0x00003e64u, 0x000051cbu, 0x00050080u, 0x00000006u, 0x000051cdu, 0x00003e62u, 0x000051ccu, 0x0003003eu, 0x000051c0u, 0x000051cdu, 0x00050041u, 0x00000007u, 0x000051ceu, 0x00003f63u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000051cfu, 0x000051ceu, 0x00050080u, 0x00000006u, 0x000051d1u, 0x000051cdu, 0x000051cfu, 0x0003003eu, 0x000051c0u, 0x000051d1u, 0x000500c7u, 0x00000006u, 0x000051d3u, 0x000051d1u, 0x0000068au, 0x0003003eu, 0x000051c0u, 0x000051d3u, 0x0003003eu, 0x000051c1u, 0x000051d3u, 0x0004003du, 0x00000006u, 0x000051d6u, 0x000051cau, 0x000500c7u, 0x00000006u, 0x000051d7u, 0x000051d6u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000051d8u, 0x000051d7u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000051dau, 0x000051d3u, 0x000051d8u, 0x0003003eu, 0x000051c1u, 0x000051dau, 0x000500c6u, 0x00000006u, 0x000051dcu, 0x000051dau, 0x000002fbu, 0x0003003eu, 0x000051c1u, 0x000051dcu, 0x00080041u, 0x000006a8u, 0x000051dfu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000051dcu, 0x0004003du, 0x0000000fu, 0x000051e0u, 0x000051dfu, 0x00040071u, 0x00000006u, 0x000051e1u, 0x000051e0u, 0x0003003eu, 0x000051c2u, 0x000051e1u, 0x000500c2u, 0x00000006u, 0x000051e3u, 0x000051e1u, 0x000001afu, 0x0003003eu, 0x000051c3u, 0x000051e3u, 0x000500c7u, 0x00000006u, 0x000051e5u, 0x000051e1u, 0x000006afu, 0x0003003eu, 0x000051c4u, 0x000051e5u, 0x000500c4u, 0x00000006u, 0x000051e7u, 0x000051e5u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000051e9u, 0x000051e5u, 0x000051e7u, 0x0003003eu, 0x000051c4u, 0x000051e9u, 0x000500c4u, 0x00000006u, 0x000051ebu, 0x000051e3u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000051edu, 0x000051e3u, 0x000051ebu, 0x0003003eu, 0x000051c3u, 0x000051edu, 0x00040071u, 0x00000011u, 0x000051efu, 0x000051edu, 0x0004007cu, 0x00000012u, 0x000051f0u, 0x000051efu, 0x00040071u, 0x00000011u, 0x000051f8u, 0x000051e9u, 0x0004007cu, 0x00000012u, 0x000051f9u, 0x000051f8u, 0x00070050u, 0x00000013u, 0x000051fau, 0x000051f0u, 0x000051f0u, 0x000051f0u, 0x000051f9u, 0x0003003eu, 0x000051c5u, 0x000051fau, 0x0003003eu, 0x00003ea5u, 0x000051fau, 0x000200f9u, 0x0000422du, 0x000200f8u, 0x0000422du, 0x000700f5u, 0x00000013u, 0x00008faau, 0x00007705u, 0x00004204u, 0x000051fau, 0x0000422eu, 0x000700f5u, 0x00000013u, 0x00008de2u, 0x00007705u, 0x00004204u, 0x000051bfu, 0x0000422eu, 0x000300f7u, 0x0000423eu, 0x00000000u, 0x000400fau, 0x00004011u, 0x0000423fu, 0x0000423eu, 0x000200f8u, 0x0000423fu, 0x00050050u, 0x00000058u, 0x00004242u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004243u, 0x00004242u, 0x0003003eu, 0x00005e14u, 0x00003e62u, 0x0003003eu, 0x00005e15u, 0x00003e64u, 0x0003003eu, 0x00003f65u, 0x000019c4u, 0x0003003eu, 0x00003f66u, 0x00004243u, 0x00050041u, 0x00000007u, 0x00005205u, 0x00003f66u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005206u, 0x00005205u, 0x00050084u, 0x00000006u, 0x00005207u, 0x00003e64u, 0x00005206u, 0x00050080u, 0x00000006u, 0x00005208u, 0x00003e62u, 0x00005207u, 0x0003003eu, 0x000051fbu, 0x00005208u, 0x00050041u, 0x00000007u, 0x00005209u, 0x00003f66u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000520au, 0x00005209u, 0x00050080u, 0x00000006u, 0x0000520cu, 0x00005208u, 0x0000520au, 0x0003003eu, 0x000051fbu, 0x0000520cu, 0x000500c7u, 0x00000006u, 0x0000520eu, 0x0000520cu, 0x0000068au, 0x0003003eu, 0x000051fbu, 0x0000520eu, 0x0003003eu, 0x000051fcu, 0x0000520eu, 0x0004003du, 0x00000006u, 0x00005211u, 0x00005205u, 0x000500c7u, 0x00000006u, 0x00005212u, 0x00005211u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005213u, 0x00005212u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005215u, 0x0000520eu, 0x00005213u, 0x0003003eu, 0x000051fcu, 0x00005215u, 0x000500c6u, 0x00000006u, 0x00005217u, 0x00005215u, 0x000002fbu, 0x0003003eu, 0x000051fcu, 0x00005217u, 0x00080041u, 0x000006a8u, 0x0000521au, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005217u, 0x0004003du, 0x0000000fu, 0x0000521bu, 0x0000521au, 0x00040071u, 0x00000006u, 0x0000521cu, 0x0000521bu, 0x0003003eu, 0x000051fdu, 0x0000521cu, 0x000500c2u, 0x00000006u, 0x0000521eu, 0x0000521cu, 0x000001afu, 0x0003003eu, 0x000051feu, 0x0000521eu, 0x000500c7u, 0x00000006u, 0x00005220u, 0x0000521cu, 0x000006afu, 0x0003003eu, 0x000051ffu, 0x00005220u, 0x000500c4u, 0x00000006u, 0x00005222u, 0x00005220u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00005224u, 0x00005220u, 0x00005222u, 0x0003003eu, 0x000051ffu, 0x00005224u, 0x000500c4u, 0x00000006u, 0x00005226u, 0x0000521eu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00005228u, 0x0000521eu, 0x00005226u, 0x0003003eu, 0x000051feu, 0x00005228u, 0x00040071u, 0x00000011u, 0x0000522au, 0x00005228u, 0x0004007cu, 0x00000012u, 0x0000522bu, 0x0000522au, 0x00040071u, 0x00000011u, 0x00005233u, 0x00005224u, 0x0004007cu, 0x00000012u, 0x00005234u, 0x00005233u, 0x00070050u, 0x00000013u, 0x00005235u, 0x0000522bu, 0x0000522bu, 0x0000522bu, 0x00005234u, 0x0003003eu, 0x00005200u, 0x00005235u, 0x0003003eu, 0x00003eadu, 0x00005235u, 0x000200f9u, 0x0000423eu, 0x000200f8u, 0x0000423eu, 0x000700f5u, 0x00000013u, 0x0000908eu, 0x00007705u, 0x0000422du, 0x00005235u, 0x0000423fu, 0x000200f9u, 0x00004202u, 0x000200f8u, 0x00004203u, 0x0004007cu, 0x000000abu, 0x00004208u, 0x0000899au, 0x0003003eu, 0x00005df8u, 0x00003e62u, 0x0003003eu, 0x00005df9u, 0x00003e64u, 0x0003003eu, 0x00003f50u, 0x000019c4u, 0x0003003eu, 0x00003f51u, 0x00004208u, 0x00050041u, 0x00000007u, 0x00005040u, 0x00003f51u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005041u, 0x00005040u, 0x00050084u, 0x00000006u, 0x00005042u, 0x00003e64u, 0x00005041u, 0x00050080u, 0x00000006u, 0x00005043u, 0x00003e62u, 0x00005042u, 0x0003003eu, 0x00005036u, 0x00005043u, 0x00050041u, 0x00000007u, 0x00005044u, 0x00003f51u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005045u, 0x00005044u, 0x000500c2u, 0x00000006u, 0x00005046u, 0x00005045u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00005048u, 0x00005043u, 0x00005046u, 0x0003003eu, 0x00005036u, 0x00005048u, 0x000500c7u, 0x00000006u, 0x0000504au, 0x00005048u, 0x0000068au, 0x0003003eu, 0x00005036u, 0x0000504au, 0x0004003du, 0x00000006u, 0x0000504cu, 0x00005044u, 0x000400c8u, 0x00000006u, 0x0000504du, 0x0000504cu, 0x000500c7u, 0x00000006u, 0x0000504eu, 0x0000504du, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000504fu, 0x0000504eu, 0x00000692u, 0x0003003eu, 0x00005037u, 0x0000504fu, 0x0003003eu, 0x00005038u, 0x0000504au, 0x0004003du, 0x00000006u, 0x00005052u, 0x00005040u, 0x000500c7u, 0x00000006u, 0x00005053u, 0x00005052u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005054u, 0x00005053u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005056u, 0x0000504au, 0x00005054u, 0x0003003eu, 0x00005038u, 0x00005056u, 0x000500c6u, 0x00000006u, 0x00005058u, 0x00005056u, 0x000002fbu, 0x0003003eu, 0x00005038u, 0x00005058u, 0x00080041u, 0x000006a8u, 0x0000505bu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005058u, 0x0004003du, 0x0000000fu, 0x0000505cu, 0x0000505bu, 0x00040071u, 0x00000006u, 0x0000505du, 0x0000505cu, 0x0003003eu, 0x00005039u, 0x0000505du, 0x000500c2u, 0x00000006u, 0x00005060u, 0x0000505du, 0x0000504fu, 0x000500c7u, 0x00000006u, 0x00005061u, 0x00005060u, 0x000006afu, 0x0003003eu, 0x00005039u, 0x00005061u, 0x000500c7u, 0x00000006u, 0x00005063u, 0x00005061u, 0x000006e7u, 0x0003003eu, 0x0000503au, 0x00005063u, 0x000500c4u, 0x00000006u, 0x00005065u, 0x00005063u, 0x000001afu, 0x000500c4u, 0x00000006u, 0x00005067u, 0x00005063u, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x00005068u, 0x00005065u, 0x00005067u, 0x000500c2u, 0x00000006u, 0x0000506au, 0x00005063u, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x0000506bu, 0x00005068u, 0x0000506au, 0x0003003eu, 0x0000503au, 0x0000506bu, 0x00040071u, 0x00000011u, 0x0000506du, 0x0000506bu, 0x0004007cu, 0x00000012u, 0x0000506eu, 0x0000506du, 0x000500c7u, 0x00000006u, 0x00005076u, 0x00005061u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00005077u, 0x00005076u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00005078u, 0x00005077u, 0x0004007cu, 0x00000012u, 0x00005079u, 0x00005078u, 0x00070050u, 0x00000013u, 0x0000507au, 0x0000506eu, 0x0000506eu, 0x0000506eu, 0x00005079u, 0x0003003eu, 0x0000503bu, 0x0000507au, 0x0003003eu, 0x00003e95u, 0x0000507au, 0x000300f7u, 0x0000420du, 0x00000000u, 0x000400fau, 0x000019edu, 0x0000420eu, 0x0000420du, 0x000200f8u, 0x0000420eu, 0x00050050u, 0x00000058u, 0x00004211u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004212u, 0x00004211u, 0x0003003eu, 0x00005dfcu, 0x00003e62u, 0x0003003eu, 0x00005dfdu, 0x00003e64u, 0x0003003eu, 0x00003f53u, 0x000019c4u, 0x0003003eu, 0x00003f54u, 0x00004212u, 0x00050041u, 0x00000007u, 0x00005085u, 0x00003f54u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005086u, 0x00005085u, 0x00050084u, 0x00000006u, 0x00005087u, 0x00003e64u, 0x00005086u, 0x00050080u, 0x00000006u, 0x00005088u, 0x00003e62u, 0x00005087u, 0x0003003eu, 0x0000507bu, 0x00005088u, 0x00050041u, 0x00000007u, 0x00005089u, 0x00003f54u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000508au, 0x00005089u, 0x000500c2u, 0x00000006u, 0x0000508bu, 0x0000508au, 0x000001a6u, 0x00050080u, 0x00000006u, 0x0000508du, 0x00005088u, 0x0000508bu, 0x0003003eu, 0x0000507bu, 0x0000508du, 0x000500c7u, 0x00000006u, 0x0000508fu, 0x0000508du, 0x0000068au, 0x0003003eu, 0x0000507bu, 0x0000508fu, 0x0004003du, 0x00000006u, 0x00005091u, 0x00005089u, 0x000400c8u, 0x00000006u, 0x00005092u, 0x00005091u, 0x000500c7u, 0x00000006u, 0x00005093u, 0x00005092u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00005094u, 0x00005093u, 0x00000692u, 0x0003003eu, 0x0000507cu, 0x00005094u, 0x0003003eu, 0x0000507du, 0x0000508fu, 0x0004003du, 0x00000006u, 0x00005097u, 0x00005085u, 0x000500c7u, 0x00000006u, 0x00005098u, 0x00005097u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005099u, 0x00005098u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000509bu, 0x0000508fu, 0x00005099u, 0x0003003eu, 0x0000507du, 0x0000509bu, 0x000500c6u, 0x00000006u, 0x0000509du, 0x0000509bu, 0x000002fbu, 0x0003003eu, 0x0000507du, 0x0000509du, 0x00080041u, 0x000006a8u, 0x000050a0u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000509du, 0x0004003du, 0x0000000fu, 0x000050a1u, 0x000050a0u, 0x00040071u, 0x00000006u, 0x000050a2u, 0x000050a1u, 0x0003003eu, 0x0000507eu, 0x000050a2u, 0x000500c2u, 0x00000006u, 0x000050a5u, 0x000050a2u, 0x00005094u, 0x000500c7u, 0x00000006u, 0x000050a6u, 0x000050a5u, 0x000006afu, 0x0003003eu, 0x0000507eu, 0x000050a6u, 0x000500c7u, 0x00000006u, 0x000050a8u, 0x000050a6u, 0x000006e7u, 0x0003003eu, 0x0000507fu, 0x000050a8u, 0x000500c4u, 0x00000006u, 0x000050aau, 0x000050a8u, 0x000001afu, 0x000500c4u, 0x00000006u, 0x000050acu, 0x000050a8u, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x000050adu, 0x000050aau, 0x000050acu, 0x000500c2u, 0x00000006u, 0x000050afu, 0x000050a8u, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x000050b0u, 0x000050adu, 0x000050afu, 0x0003003eu, 0x0000507fu, 0x000050b0u, 0x00040071u, 0x00000011u, 0x000050b2u, 0x000050b0u, 0x0004007cu, 0x00000012u, 0x000050b3u, 0x000050b2u, 0x000500c7u, 0x00000006u, 0x000050bbu, 0x000050a6u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000050bcu, 0x000050bbu, 0x00000657u, 0x00040071u, 0x00000011u, 0x000050bdu, 0x000050bcu, 0x0004007cu, 0x00000012u, 0x000050beu, 0x000050bdu, 0x00070050u, 0x00000013u, 0x000050bfu, 0x000050b3u, 0x000050b3u, 0x000050b3u, 0x000050beu, 0x0003003eu, 0x00005080u, 0x000050bfu, 0x0003003eu, 0x00003e9du, 0x000050bfu, 0x00050050u, 0x00000058u, 0x00004218u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004219u, 0x00004218u, 0x0003003eu, 0x00005e00u, 0x00003e62u, 0x0003003eu, 0x00005e01u, 0x00003e64u, 0x0003003eu, 0x00003f56u, 0x000019c4u, 0x0003003eu, 0x00003f57u, 0x00004219u, 0x00050041u, 0x00000007u, 0x000050cau, 0x00003f57u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000050cbu, 0x000050cau, 0x00050084u, 0x00000006u, 0x000050ccu, 0x00003e64u, 0x000050cbu, 0x00050080u, 0x00000006u, 0x000050cdu, 0x00003e62u, 0x000050ccu, 0x0003003eu, 0x000050c0u, 0x000050cdu, 0x00050041u, 0x00000007u, 0x000050ceu, 0x00003f57u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000050cfu, 0x000050ceu, 0x000500c2u, 0x00000006u, 0x000050d0u, 0x000050cfu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000050d2u, 0x000050cdu, 0x000050d0u, 0x0003003eu, 0x000050c0u, 0x000050d2u, 0x000500c7u, 0x00000006u, 0x000050d4u, 0x000050d2u, 0x0000068au, 0x0003003eu, 0x000050c0u, 0x000050d4u, 0x0004003du, 0x00000006u, 0x000050d6u, 0x000050ceu, 0x000400c8u, 0x00000006u, 0x000050d7u, 0x000050d6u, 0x000500c7u, 0x00000006u, 0x000050d8u, 0x000050d7u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000050d9u, 0x000050d8u, 0x00000692u, 0x0003003eu, 0x000050c1u, 0x000050d9u, 0x0003003eu, 0x000050c2u, 0x000050d4u, 0x0004003du, 0x00000006u, 0x000050dcu, 0x000050cau, 0x000500c7u, 0x00000006u, 0x000050ddu, 0x000050dcu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000050deu, 0x000050ddu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000050e0u, 0x000050d4u, 0x000050deu, 0x0003003eu, 0x000050c2u, 0x000050e0u, 0x000500c6u, 0x00000006u, 0x000050e2u, 0x000050e0u, 0x000002fbu, 0x0003003eu, 0x000050c2u, 0x000050e2u, 0x00080041u, 0x000006a8u, 0x000050e5u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000050e2u, 0x0004003du, 0x0000000fu, 0x000050e6u, 0x000050e5u, 0x00040071u, 0x00000006u, 0x000050e7u, 0x000050e6u, 0x0003003eu, 0x000050c3u, 0x000050e7u, 0x000500c2u, 0x00000006u, 0x000050eau, 0x000050e7u, 0x000050d9u, 0x000500c7u, 0x00000006u, 0x000050ebu, 0x000050eau, 0x000006afu, 0x0003003eu, 0x000050c3u, 0x000050ebu, 0x000500c7u, 0x00000006u, 0x000050edu, 0x000050ebu, 0x000006e7u, 0x0003003eu, 0x000050c4u, 0x000050edu, 0x000500c4u, 0x00000006u, 0x000050efu, 0x000050edu, 0x000001afu, 0x000500c4u, 0x00000006u, 0x000050f1u, 0x000050edu, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x000050f2u, 0x000050efu, 0x000050f1u, 0x000500c2u, 0x00000006u, 0x000050f4u, 0x000050edu, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x000050f5u, 0x000050f2u, 0x000050f4u, 0x0003003eu, 0x000050c4u, 0x000050f5u, 0x00040071u, 0x00000011u, 0x000050f7u, 0x000050f5u, 0x0004007cu, 0x00000012u, 0x000050f8u, 0x000050f7u, 0x000500c7u, 0x00000006u, 0x00005100u, 0x000050ebu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00005101u, 0x00005100u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00005102u, 0x00005101u, 0x0004007cu, 0x00000012u, 0x00005103u, 0x00005102u, 0x00070050u, 0x00000013u, 0x00005104u, 0x000050f8u, 0x000050f8u, 0x000050f8u, 0x00005103u, 0x0003003eu, 0x000050c5u, 0x00005104u, 0x0003003eu, 0x00003ea5u, 0x00005104u, 0x000200f9u, 0x0000420du, 0x000200f8u, 0x0000420du, 0x000700f5u, 0x00000013u, 0x00008fa8u, 0x00007705u, 0x00004203u, 0x00005104u, 0x0000420eu, 0x000700f5u, 0x00000013u, 0x00008de0u, 0x00007705u, 0x00004203u, 0x000050bfu, 0x0000420eu, 0x000300f7u, 0x0000421eu, 0x00000000u, 0x000400fau, 0x00004011u, 0x0000421fu, 0x0000421eu, 0x000200f8u, 0x0000421fu, 0x00050050u, 0x00000058u, 0x00004222u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004223u, 0x00004222u, 0x0003003eu, 0x00005e04u, 0x00003e62u, 0x0003003eu, 0x00005e05u, 0x00003e64u, 0x0003003eu, 0x00003f59u, 0x000019c4u, 0x0003003eu, 0x00003f5au, 0x00004223u, 0x00050041u, 0x00000007u, 0x0000510fu, 0x00003f5au, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00005110u, 0x0000510fu, 0x00050084u, 0x00000006u, 0x00005111u, 0x00003e64u, 0x00005110u, 0x00050080u, 0x00000006u, 0x00005112u, 0x00003e62u, 0x00005111u, 0x0003003eu, 0x00005105u, 0x00005112u, 0x00050041u, 0x00000007u, 0x00005113u, 0x00003f5au, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00005114u, 0x00005113u, 0x000500c2u, 0x00000006u, 0x00005115u, 0x00005114u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00005117u, 0x00005112u, 0x00005115u, 0x0003003eu, 0x00005105u, 0x00005117u, 0x000500c7u, 0x00000006u, 0x00005119u, 0x00005117u, 0x0000068au, 0x0003003eu, 0x00005105u, 0x00005119u, 0x0004003du, 0x00000006u, 0x0000511bu, 0x00005113u, 0x000400c8u, 0x00000006u, 0x0000511cu, 0x0000511bu, 0x000500c7u, 0x00000006u, 0x0000511du, 0x0000511cu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000511eu, 0x0000511du, 0x00000692u, 0x0003003eu, 0x00005106u, 0x0000511eu, 0x0003003eu, 0x00005107u, 0x00005119u, 0x0004003du, 0x00000006u, 0x00005121u, 0x0000510fu, 0x000500c7u, 0x00000006u, 0x00005122u, 0x00005121u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005123u, 0x00005122u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005125u, 0x00005119u, 0x00005123u, 0x0003003eu, 0x00005107u, 0x00005125u, 0x000500c6u, 0x00000006u, 0x00005127u, 0x00005125u, 0x000002fbu, 0x0003003eu, 0x00005107u, 0x00005127u, 0x00080041u, 0x000006a8u, 0x0000512au, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005127u, 0x0004003du, 0x0000000fu, 0x0000512bu, 0x0000512au, 0x00040071u, 0x00000006u, 0x0000512cu, 0x0000512bu, 0x0003003eu, 0x00005108u, 0x0000512cu, 0x000500c2u, 0x00000006u, 0x0000512fu, 0x0000512cu, 0x0000511eu, 0x000500c7u, 0x00000006u, 0x00005130u, 0x0000512fu, 0x000006afu, 0x0003003eu, 0x00005108u, 0x00005130u, 0x000500c7u, 0x00000006u, 0x00005132u, 0x00005130u, 0x000006e7u, 0x0003003eu, 0x00005109u, 0x00005132u, 0x000500c4u, 0x00000006u, 0x00005134u, 0x00005132u, 0x000001afu, 0x000500c4u, 0x00000006u, 0x00005136u, 0x00005132u, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x00005137u, 0x00005134u, 0x00005136u, 0x000500c2u, 0x00000006u, 0x00005139u, 0x00005132u, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x0000513au, 0x00005137u, 0x00005139u, 0x0003003eu, 0x00005109u, 0x0000513au, 0x00040071u, 0x00000011u, 0x0000513cu, 0x0000513au, 0x0004007cu, 0x00000012u, 0x0000513du, 0x0000513cu, 0x000500c7u, 0x00000006u, 0x00005145u, 0x00005130u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00005146u, 0x00005145u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00005147u, 0x00005146u, 0x0004007cu, 0x00000012u, 0x00005148u, 0x00005147u, 0x00070050u, 0x00000013u, 0x00005149u, 0x0000513du, 0x0000513du, 0x0000513du, 0x00005148u, 0x0003003eu, 0x0000510au, 0x00005149u, 0x0003003eu, 0x00003eadu, 0x00005149u, 0x000200f9u, 0x0000421eu, 0x000200f8u, 0x0000421eu, 0x000700f5u, 0x00000013u, 0x0000908cu, 0x00007705u, 0x0000420du, 0x00005149u, 0x0000421fu, 0x000200f9u, 0x00004202u, 0x000200f8u, 0x00004202u, 0x000d00f5u, 0x00000013u, 0x0000908bu, 0x00007705u, 0x000040d2u, 0x0000908cu, 0x0000421eu, 0x0000908eu, 0x0000423eu, 0x00009090u, 0x0000425eu, 0x00009092u, 0x0000427eu, 0x000d00f5u, 0x00000013u, 0x00008fa6u, 0x00007705u, 0x000040d2u, 0x00008fa8u, 0x0000421eu, 0x00008faau, 0x0000423eu, 0x00008facu, 0x0000425eu, 0x00008faeu, 0x0000427eu, 0x000d00f5u, 0x00000013u, 0x00008ec3u, 0x00007705u, 0x000040d2u, 0x0000507au, 0x0000421eu, 0x00005184u, 0x0000423eu, 0x0000526eu, 0x0000425eu, 0x00005345u, 0x0000427eu, 0x000d00f5u, 0x00000013u, 0x00008ddeu, 0x00007705u, 0x000040d2u, 0x00008de0u, 0x0000421eu, 0x00008de2u, 0x0000423eu, 0x00008de4u, 0x0000425eu, 0x00008de6u, 0x0000427eu, 0x000200f9u, 0x000040ceu, 0x000200f8u, 0x000040d1u, 0x00040071u, 0x00000006u, 0x0000418cu, 0x0000b64au, 0x0004007cu, 0x00000008u, 0x0000418du, 0x0000418cu, 0x000300f7u, 0x0000418eu, 0x00000000u, 0x000700fbu, 0x0000418du, 0x0000418fu, 0x00000000u, 0x00004190u, 0x00000001u, 0x00004191u, 0x000200f8u, 0x00004191u, 0x0004007cu, 0x000000abu, 0x000041dfu, 0x0000899au, 0x0003003eu, 0x00005dd8u, 0x00003e62u, 0x0003003eu, 0x00005dd9u, 0x00003e64u, 0x0003003eu, 0x00003f38u, 0x000019c4u, 0x0003003eu, 0x00003f39u, 0x000041dfu, 0x00050041u, 0x00000007u, 0x00004faeu, 0x00003f39u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004fafu, 0x00004faeu, 0x00050084u, 0x00000006u, 0x00004fb0u, 0x00003e64u, 0x00004fafu, 0x00050080u, 0x00000006u, 0x00004fb1u, 0x00003e62u, 0x00004fb0u, 0x0003003eu, 0x00004fa6u, 0x00004fb1u, 0x00050041u, 0x00000007u, 0x00004fb2u, 0x00003f39u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004fb3u, 0x00004fb2u, 0x00050080u, 0x00000006u, 0x00004fb5u, 0x00004fb1u, 0x00004fb3u, 0x0003003eu, 0x00004fa6u, 0x00004fb5u, 0x000500c7u, 0x00000006u, 0x00004fb7u, 0x00004fb5u, 0x0000068au, 0x0003003eu, 0x00004fa6u, 0x00004fb7u, 0x0003003eu, 0x00004fa7u, 0x00004fb7u, 0x0004003du, 0x00000006u, 0x00004fbau, 0x00004faeu, 0x000500c7u, 0x00000006u, 0x00004fbbu, 0x00004fbau, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004fbcu, 0x00004fbbu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004fbeu, 0x00004fb7u, 0x00004fbcu, 0x0003003eu, 0x00004fa7u, 0x00004fbeu, 0x000500c6u, 0x00000006u, 0x00004fc0u, 0x00004fbeu, 0x000002fbu, 0x0003003eu, 0x00004fa7u, 0x00004fc0u, 0x00080041u, 0x000006a8u, 0x00004fc3u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004fc0u, 0x0004003du, 0x0000000fu, 0x00004fc4u, 0x00004fc3u, 0x00040071u, 0x00000006u, 0x00004fc5u, 0x00004fc4u, 0x0003003eu, 0x00004fa8u, 0x00004fc5u, 0x00040071u, 0x00000011u, 0x00004fc7u, 0x00004fc5u, 0x0004007cu, 0x00000012u, 0x00004fc8u, 0x00004fc7u, 0x00070050u, 0x00000013u, 0x00004fc9u, 0x00004fc8u, 0x00004fc8u, 0x00004fc8u, 0x00004fc8u, 0x0003003eu, 0x00004fa9u, 0x00004fc9u, 0x0003003eu, 0x00003e95u, 0x00004fc9u, 0x000300f7u, 0x000041e4u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000041e5u, 0x000041e4u, 0x000200f8u, 0x000041e5u, 0x00050050u, 0x00000058u, 0x000041e8u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x000041e9u, 0x000041e8u, 0x0003003eu, 0x00005ddcu, 0x00003e62u, 0x0003003eu, 0x00005dddu, 0x00003e64u, 0x0003003eu, 0x00003f3bu, 0x000019c4u, 0x0003003eu, 0x00003f3cu, 0x000041e9u, 0x00050041u, 0x00000007u, 0x00004fd2u, 0x00003f3cu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004fd3u, 0x00004fd2u, 0x00050084u, 0x00000006u, 0x00004fd4u, 0x00003e64u, 0x00004fd3u, 0x00050080u, 0x00000006u, 0x00004fd5u, 0x00003e62u, 0x00004fd4u, 0x0003003eu, 0x00004fcau, 0x00004fd5u, 0x00050041u, 0x00000007u, 0x00004fd6u, 0x00003f3cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004fd7u, 0x00004fd6u, 0x00050080u, 0x00000006u, 0x00004fd9u, 0x00004fd5u, 0x00004fd7u, 0x0003003eu, 0x00004fcau, 0x00004fd9u, 0x000500c7u, 0x00000006u, 0x00004fdbu, 0x00004fd9u, 0x0000068au, 0x0003003eu, 0x00004fcau, 0x00004fdbu, 0x0003003eu, 0x00004fcbu, 0x00004fdbu, 0x0004003du, 0x00000006u, 0x00004fdeu, 0x00004fd2u, 0x000500c7u, 0x00000006u, 0x00004fdfu, 0x00004fdeu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004fe0u, 0x00004fdfu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004fe2u, 0x00004fdbu, 0x00004fe0u, 0x0003003eu, 0x00004fcbu, 0x00004fe2u, 0x000500c6u, 0x00000006u, 0x00004fe4u, 0x00004fe2u, 0x000002fbu, 0x0003003eu, 0x00004fcbu, 0x00004fe4u, 0x00080041u, 0x000006a8u, 0x00004fe7u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004fe4u, 0x0004003du, 0x0000000fu, 0x00004fe8u, 0x00004fe7u, 0x00040071u, 0x00000006u, 0x00004fe9u, 0x00004fe8u, 0x0003003eu, 0x00004fccu, 0x00004fe9u, 0x00040071u, 0x00000011u, 0x00004febu, 0x00004fe9u, 0x0004007cu, 0x00000012u, 0x00004fecu, 0x00004febu, 0x00070050u, 0x00000013u, 0x00004fedu, 0x00004fecu, 0x00004fecu, 0x00004fecu, 0x00004fecu, 0x0003003eu, 0x00004fcdu, 0x00004fedu, 0x0003003eu, 0x00003e9du, 0x00004fedu, 0x00050050u, 0x00000058u, 0x000041efu, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000041f0u, 0x000041efu, 0x0003003eu, 0x00005de0u, 0x00003e62u, 0x0003003eu, 0x00005de1u, 0x00003e64u, 0x0003003eu, 0x00003f3eu, 0x000019c4u, 0x0003003eu, 0x00003f3fu, 0x000041f0u, 0x00050041u, 0x00000007u, 0x00004ff6u, 0x00003f3fu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004ff7u, 0x00004ff6u, 0x00050084u, 0x00000006u, 0x00004ff8u, 0x00003e64u, 0x00004ff7u, 0x00050080u, 0x00000006u, 0x00004ff9u, 0x00003e62u, 0x00004ff8u, 0x0003003eu, 0x00004feeu, 0x00004ff9u, 0x00050041u, 0x00000007u, 0x00004ffau, 0x00003f3fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004ffbu, 0x00004ffau, 0x00050080u, 0x00000006u, 0x00004ffdu, 0x00004ff9u, 0x00004ffbu, 0x0003003eu, 0x00004feeu, 0x00004ffdu, 0x000500c7u, 0x00000006u, 0x00004fffu, 0x00004ffdu, 0x0000068au, 0x0003003eu, 0x00004feeu, 0x00004fffu, 0x0003003eu, 0x00004fefu, 0x00004fffu, 0x0004003du, 0x00000006u, 0x00005002u, 0x00004ff6u, 0x000500c7u, 0x00000006u, 0x00005003u, 0x00005002u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005004u, 0x00005003u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00005006u, 0x00004fffu, 0x00005004u, 0x0003003eu, 0x00004fefu, 0x00005006u, 0x000500c6u, 0x00000006u, 0x00005008u, 0x00005006u, 0x000002fbu, 0x0003003eu, 0x00004fefu, 0x00005008u, 0x00080041u, 0x000006a8u, 0x0000500bu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00005008u, 0x0004003du, 0x0000000fu, 0x0000500cu, 0x0000500bu, 0x00040071u, 0x00000006u, 0x0000500du, 0x0000500cu, 0x0003003eu, 0x00004ff0u, 0x0000500du, 0x00040071u, 0x00000011u, 0x0000500fu, 0x0000500du, 0x0004007cu, 0x00000012u, 0x00005010u, 0x0000500fu, 0x00070050u, 0x00000013u, 0x00005011u, 0x00005010u, 0x00005010u, 0x00005010u, 0x00005010u, 0x0003003eu, 0x00004ff1u, 0x00005011u, 0x0003003eu, 0x00003ea5u, 0x00005011u, 0x000200f9u, 0x000041e4u, 0x000200f8u, 0x000041e4u, 0x000700f5u, 0x00000013u, 0x00008fa5u, 0x00007705u, 0x00004191u, 0x00005011u, 0x000041e5u, 0x000700f5u, 0x00000013u, 0x00008dddu, 0x00007705u, 0x00004191u, 0x00004fedu, 0x000041e5u, 0x000300f7u, 0x000041f5u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000041f6u, 0x000041f5u, 0x000200f8u, 0x000041f6u, 0x00050050u, 0x00000058u, 0x000041f9u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000041fau, 0x000041f9u, 0x0003003eu, 0x00005de4u, 0x00003e62u, 0x0003003eu, 0x00005de5u, 0x00003e64u, 0x0003003eu, 0x00003f41u, 0x000019c4u, 0x0003003eu, 0x00003f42u, 0x000041fau, 0x00050041u, 0x00000007u, 0x0000501au, 0x00003f42u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000501bu, 0x0000501au, 0x00050084u, 0x00000006u, 0x0000501cu, 0x00003e64u, 0x0000501bu, 0x00050080u, 0x00000006u, 0x0000501du, 0x00003e62u, 0x0000501cu, 0x0003003eu, 0x00005012u, 0x0000501du, 0x00050041u, 0x00000007u, 0x0000501eu, 0x00003f42u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000501fu, 0x0000501eu, 0x00050080u, 0x00000006u, 0x00005021u, 0x0000501du, 0x0000501fu, 0x0003003eu, 0x00005012u, 0x00005021u, 0x000500c7u, 0x00000006u, 0x00005023u, 0x00005021u, 0x0000068au, 0x0003003eu, 0x00005012u, 0x00005023u, 0x0003003eu, 0x00005013u, 0x00005023u, 0x0004003du, 0x00000006u, 0x00005026u, 0x0000501au, 0x000500c7u, 0x00000006u, 0x00005027u, 0x00005026u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00005028u, 0x00005027u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000502au, 0x00005023u, 0x00005028u, 0x0003003eu, 0x00005013u, 0x0000502au, 0x000500c6u, 0x00000006u, 0x0000502cu, 0x0000502au, 0x000002fbu, 0x0003003eu, 0x00005013u, 0x0000502cu, 0x00080041u, 0x000006a8u, 0x0000502fu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000502cu, 0x0004003du, 0x0000000fu, 0x00005030u, 0x0000502fu, 0x00040071u, 0x00000006u, 0x00005031u, 0x00005030u, 0x0003003eu, 0x00005014u, 0x00005031u, 0x00040071u, 0x00000011u, 0x00005033u, 0x00005031u, 0x0004007cu, 0x00000012u, 0x00005034u, 0x00005033u, 0x00070050u, 0x00000013u, 0x00005035u, 0x00005034u, 0x00005034u, 0x00005034u, 0x00005034u, 0x0003003eu, 0x00005015u, 0x00005035u, 0x0003003eu, 0x00003eadu, 0x00005035u, 0x000200f9u, 0x000041f5u, 0x000200f8u, 0x000041f5u, 0x000700f5u, 0x00000013u, 0x00009089u, 0x00007705u, 0x000041e4u, 0x00005035u, 0x000041f6u, 0x000200f9u, 0x0000418eu, 0x000200f8u, 0x00004190u, 0x0004007cu, 0x000000abu, 0x000041b3u, 0x0000899au, 0x00040071u, 0x00000006u, 0x000041b6u, 0x00003e6au, 0x0003003eu, 0x00005dc8u, 0x00003e62u, 0x0003003eu, 0x00005dc9u, 0x00003e64u, 0x0003003eu, 0x00003f28u, 0x000019c4u, 0x0003003eu, 0x00003f29u, 0x000041b3u, 0x0003003eu, 0x00003f2au, 0x000041b6u, 0x00050041u, 0x00000007u, 0x00004ee3u, 0x00003f29u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004ee4u, 0x00004ee3u, 0x00050084u, 0x00000006u, 0x00004ee5u, 0x00003e64u, 0x00004ee4u, 0x00050080u, 0x00000006u, 0x00004ee6u, 0x00003e62u, 0x00004ee5u, 0x0003003eu, 0x00004edau, 0x00004ee6u, 0x00050041u, 0x00000007u, 0x00004ee7u, 0x00003f29u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004ee8u, 0x00004ee7u, 0x000500c2u, 0x00000006u, 0x00004ee9u, 0x00004ee8u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004eebu, 0x00004ee6u, 0x00004ee9u, 0x0003003eu, 0x00004edau, 0x00004eebu, 0x000500c7u, 0x00000006u, 0x00004eedu, 0x00004eebu, 0x0000068au, 0x0003003eu, 0x00004edau, 0x00004eedu, 0x0004003du, 0x00000006u, 0x00004eefu, 0x00004ee7u, 0x000400c8u, 0x00000006u, 0x00004ef0u, 0x00004eefu, 0x000500c7u, 0x00000006u, 0x00004ef1u, 0x00004ef0u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004ef2u, 0x00004ef1u, 0x00000692u, 0x0003003eu, 0x00004edbu, 0x00004ef2u, 0x0003003eu, 0x00004edcu, 0x00004eedu, 0x0004003du, 0x00000006u, 0x00004ef5u, 0x00004ee3u, 0x000500c7u, 0x00000006u, 0x00004ef6u, 0x00004ef5u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004ef7u, 0x00004ef6u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004ef9u, 0x00004eedu, 0x00004ef7u, 0x0003003eu, 0x00004edcu, 0x00004ef9u, 0x000500c6u, 0x00000006u, 0x00004efbu, 0x00004ef9u, 0x000002fbu, 0x0003003eu, 0x00004edcu, 0x00004efbu, 0x00080041u, 0x000006a8u, 0x00004efeu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004efbu, 0x0004003du, 0x0000000fu, 0x00004effu, 0x00004efeu, 0x00040071u, 0x00000006u, 0x00004f00u, 0x00004effu, 0x0003003eu, 0x00004eddu, 0x00004f00u, 0x000500c2u, 0x00000006u, 0x00004f03u, 0x00004f00u, 0x00004ef2u, 0x000500c7u, 0x00000006u, 0x00004f04u, 0x00004f03u, 0x000006afu, 0x0003003eu, 0x00004eddu, 0x00004f04u, 0x000500c4u, 0x00000006u, 0x00004f06u, 0x000041b6u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00004f08u, 0x00004f04u, 0x00004f06u, 0x0003003eu, 0x00004eddu, 0x00004f08u, 0x00040071u, 0x00000011u, 0x00004f0au, 0x00004f08u, 0x0004007cu, 0x00000012u, 0x00004f0bu, 0x00004f0au, 0x00070050u, 0x00000013u, 0x00004f0cu, 0x00004f0bu, 0x00004f0bu, 0x00004f0bu, 0x00004f0bu, 0x0003003eu, 0x00004edeu, 0x00004f0cu, 0x0003003eu, 0x00003e95u, 0x00004f0cu, 0x000300f7u, 0x000041bbu, 0x00000000u, 0x000400fau, 0x000019edu, 0x000041bcu, 0x000041bbu, 0x000200f8u, 0x000041bcu, 0x00050050u, 0x00000058u, 0x000041bfu, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x000041c0u, 0x000041bfu, 0x0003003eu, 0x00005dccu, 0x00003e62u, 0x0003003eu, 0x00005dcdu, 0x00003e64u, 0x0003003eu, 0x00003f2cu, 0x000019c4u, 0x0003003eu, 0x00003f2du, 0x000041c0u, 0x0003003eu, 0x00003f2eu, 0x000041b6u, 0x00050041u, 0x00000007u, 0x00004f16u, 0x00003f2du, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004f17u, 0x00004f16u, 0x00050084u, 0x00000006u, 0x00004f18u, 0x00003e64u, 0x00004f17u, 0x00050080u, 0x00000006u, 0x00004f19u, 0x00003e62u, 0x00004f18u, 0x0003003eu, 0x00004f0du, 0x00004f19u, 0x00050041u, 0x00000007u, 0x00004f1au, 0x00003f2du, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004f1bu, 0x00004f1au, 0x000500c2u, 0x00000006u, 0x00004f1cu, 0x00004f1bu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004f1eu, 0x00004f19u, 0x00004f1cu, 0x0003003eu, 0x00004f0du, 0x00004f1eu, 0x000500c7u, 0x00000006u, 0x00004f20u, 0x00004f1eu, 0x0000068au, 0x0003003eu, 0x00004f0du, 0x00004f20u, 0x0004003du, 0x00000006u, 0x00004f22u, 0x00004f1au, 0x000400c8u, 0x00000006u, 0x00004f23u, 0x00004f22u, 0x000500c7u, 0x00000006u, 0x00004f24u, 0x00004f23u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004f25u, 0x00004f24u, 0x00000692u, 0x0003003eu, 0x00004f0eu, 0x00004f25u, 0x0003003eu, 0x00004f0fu, 0x00004f20u, 0x0004003du, 0x00000006u, 0x00004f28u, 0x00004f16u, 0x000500c7u, 0x00000006u, 0x00004f29u, 0x00004f28u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004f2au, 0x00004f29u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004f2cu, 0x00004f20u, 0x00004f2au, 0x0003003eu, 0x00004f0fu, 0x00004f2cu, 0x000500c6u, 0x00000006u, 0x00004f2eu, 0x00004f2cu, 0x000002fbu, 0x0003003eu, 0x00004f0fu, 0x00004f2eu, 0x00080041u, 0x000006a8u, 0x00004f31u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004f2eu, 0x0004003du, 0x0000000fu, 0x00004f32u, 0x00004f31u, 0x00040071u, 0x00000006u, 0x00004f33u, 0x00004f32u, 0x0003003eu, 0x00004f10u, 0x00004f33u, 0x000500c2u, 0x00000006u, 0x00004f36u, 0x00004f33u, 0x00004f25u, 0x000500c7u, 0x00000006u, 0x00004f37u, 0x00004f36u, 0x000006afu, 0x0003003eu, 0x00004f10u, 0x00004f37u, 0x000500c5u, 0x00000006u, 0x00004f3bu, 0x00004f37u, 0x00004f06u, 0x0003003eu, 0x00004f10u, 0x00004f3bu, 0x00040071u, 0x00000011u, 0x00004f3du, 0x00004f3bu, 0x0004007cu, 0x00000012u, 0x00004f3eu, 0x00004f3du, 0x00070050u, 0x00000013u, 0x00004f3fu, 0x00004f3eu, 0x00004f3eu, 0x00004f3eu, 0x00004f3eu, 0x0003003eu, 0x00004f11u, 0x00004f3fu, 0x0003003eu, 0x00003e9du, 0x00004f3fu, 0x00050050u, 0x00000058u, 0x000041c9u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000041cau, 0x000041c9u, 0x0003003eu, 0x00005dd0u, 0x00003e62u, 0x0003003eu, 0x00005dd1u, 0x00003e64u, 0x0003003eu, 0x00003f30u, 0x000019c4u, 0x0003003eu, 0x00003f31u, 0x000041cau, 0x0003003eu, 0x00003f32u, 0x000041b6u, 0x00050041u, 0x00000007u, 0x00004f49u, 0x00003f31u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004f4au, 0x00004f49u, 0x00050084u, 0x00000006u, 0x00004f4bu, 0x00003e64u, 0x00004f4au, 0x00050080u, 0x00000006u, 0x00004f4cu, 0x00003e62u, 0x00004f4bu, 0x0003003eu, 0x00004f40u, 0x00004f4cu, 0x00050041u, 0x00000007u, 0x00004f4du, 0x00003f31u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004f4eu, 0x00004f4du, 0x000500c2u, 0x00000006u, 0x00004f4fu, 0x00004f4eu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004f51u, 0x00004f4cu, 0x00004f4fu, 0x0003003eu, 0x00004f40u, 0x00004f51u, 0x000500c7u, 0x00000006u, 0x00004f53u, 0x00004f51u, 0x0000068au, 0x0003003eu, 0x00004f40u, 0x00004f53u, 0x0004003du, 0x00000006u, 0x00004f55u, 0x00004f4du, 0x000400c8u, 0x00000006u, 0x00004f56u, 0x00004f55u, 0x000500c7u, 0x00000006u, 0x00004f57u, 0x00004f56u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004f58u, 0x00004f57u, 0x00000692u, 0x0003003eu, 0x00004f41u, 0x00004f58u, 0x0003003eu, 0x00004f42u, 0x00004f53u, 0x0004003du, 0x00000006u, 0x00004f5bu, 0x00004f49u, 0x000500c7u, 0x00000006u, 0x00004f5cu, 0x00004f5bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004f5du, 0x00004f5cu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004f5fu, 0x00004f53u, 0x00004f5du, 0x0003003eu, 0x00004f42u, 0x00004f5fu, 0x000500c6u, 0x00000006u, 0x00004f61u, 0x00004f5fu, 0x000002fbu, 0x0003003eu, 0x00004f42u, 0x00004f61u, 0x00080041u, 0x000006a8u, 0x00004f64u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004f61u, 0x0004003du, 0x0000000fu, 0x00004f65u, 0x00004f64u, 0x00040071u, 0x00000006u, 0x00004f66u, 0x00004f65u, 0x0003003eu, 0x00004f43u, 0x00004f66u, 0x000500c2u, 0x00000006u, 0x00004f69u, 0x00004f66u, 0x00004f58u, 0x000500c7u, 0x00000006u, 0x00004f6au, 0x00004f69u, 0x000006afu, 0x0003003eu, 0x00004f43u, 0x00004f6au, 0x000500c5u, 0x00000006u, 0x00004f6eu, 0x00004f6au, 0x00004f06u, 0x0003003eu, 0x00004f43u, 0x00004f6eu, 0x00040071u, 0x00000011u, 0x00004f70u, 0x00004f6eu, 0x0004007cu, 0x00000012u, 0x00004f71u, 0x00004f70u, 0x00070050u, 0x00000013u, 0x00004f72u, 0x00004f71u, 0x00004f71u, 0x00004f71u, 0x00004f71u, 0x0003003eu, 0x00004f44u, 0x00004f72u, 0x0003003eu, 0x00003ea5u, 0x00004f72u, 0x000200f9u, 0x000041bbu, 0x000200f8u, 0x000041bbu, 0x000700f5u, 0x00000013u, 0x00008fa3u, 0x00007705u, 0x00004190u, 0x00004f72u, 0x000041bcu, 0x000700f5u, 0x00000013u, 0x00008ddbu, 0x00007705u, 0x00004190u, 0x00004f3fu, 0x000041bcu, 0x000300f7u, 0x000041d2u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000041d3u, 0x000041d2u, 0x000200f8u, 0x000041d3u, 0x00050050u, 0x00000058u, 0x000041d6u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000041d7u, 0x000041d6u, 0x0003003eu, 0x00005dd4u, 0x00003e62u, 0x0003003eu, 0x00005dd5u, 0x00003e64u, 0x0003003eu, 0x00003f34u, 0x000019c4u, 0x0003003eu, 0x00003f35u, 0x000041d7u, 0x0003003eu, 0x00003f36u, 0x000041b6u, 0x00050041u, 0x00000007u, 0x00004f7cu, 0x00003f35u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004f7du, 0x00004f7cu, 0x00050084u, 0x00000006u, 0x00004f7eu, 0x00003e64u, 0x00004f7du, 0x00050080u, 0x00000006u, 0x00004f7fu, 0x00003e62u, 0x00004f7eu, 0x0003003eu, 0x00004f73u, 0x00004f7fu, 0x00050041u, 0x00000007u, 0x00004f80u, 0x00003f35u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004f81u, 0x00004f80u, 0x000500c2u, 0x00000006u, 0x00004f82u, 0x00004f81u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004f84u, 0x00004f7fu, 0x00004f82u, 0x0003003eu, 0x00004f73u, 0x00004f84u, 0x000500c7u, 0x00000006u, 0x00004f86u, 0x00004f84u, 0x0000068au, 0x0003003eu, 0x00004f73u, 0x00004f86u, 0x0004003du, 0x00000006u, 0x00004f88u, 0x00004f80u, 0x000400c8u, 0x00000006u, 0x00004f89u, 0x00004f88u, 0x000500c7u, 0x00000006u, 0x00004f8au, 0x00004f89u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004f8bu, 0x00004f8au, 0x00000692u, 0x0003003eu, 0x00004f74u, 0x00004f8bu, 0x0003003eu, 0x00004f75u, 0x00004f86u, 0x0004003du, 0x00000006u, 0x00004f8eu, 0x00004f7cu, 0x000500c7u, 0x00000006u, 0x00004f8fu, 0x00004f8eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004f90u, 0x00004f8fu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004f92u, 0x00004f86u, 0x00004f90u, 0x0003003eu, 0x00004f75u, 0x00004f92u, 0x000500c6u, 0x00000006u, 0x00004f94u, 0x00004f92u, 0x000002fbu, 0x0003003eu, 0x00004f75u, 0x00004f94u, 0x00080041u, 0x000006a8u, 0x00004f97u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004f94u, 0x0004003du, 0x0000000fu, 0x00004f98u, 0x00004f97u, 0x00040071u, 0x00000006u, 0x00004f99u, 0x00004f98u, 0x0003003eu, 0x00004f76u, 0x00004f99u, 0x000500c2u, 0x00000006u, 0x00004f9cu, 0x00004f99u, 0x00004f8bu, 0x000500c7u, 0x00000006u, 0x00004f9du, 0x00004f9cu, 0x000006afu, 0x0003003eu, 0x00004f76u, 0x00004f9du, 0x000500c5u, 0x00000006u, 0x00004fa1u, 0x00004f9du, 0x00004f06u, 0x0003003eu, 0x00004f76u, 0x00004fa1u, 0x00040071u, 0x00000011u, 0x00004fa3u, 0x00004fa1u, 0x0004007cu, 0x00000012u, 0x00004fa4u, 0x00004fa3u, 0x00070050u, 0x00000013u, 0x00004fa5u, 0x00004fa4u, 0x00004fa4u, 0x00004fa4u, 0x00004fa4u, 0x0003003eu, 0x00004f77u, 0x00004fa5u, 0x0003003eu, 0x00003eadu, 0x00004fa5u, 0x000200f9u, 0x000041d2u, 0x000200f8u, 0x000041d2u, 0x000700f5u, 0x00000013u, 0x00009087u, 0x00007705u, 0x000041bbu, 0x00004fa5u, 0x000041d3u, 0x000200f9u, 0x0000418eu, 0x000200f8u, 0x0000418fu, 0x0004007cu, 0x000000abu, 0x00004193u, 0x0000899au, 0x0003003eu, 0x00005de8u, 0x00003e62u, 0x0003003eu, 0x00005de9u, 0x00003e64u, 0x0003003eu, 0x00003f44u, 0x000019c4u, 0x0003003eu, 0x00003f45u, 0x00004193u, 0x00050041u, 0x00000007u, 0x00004e32u, 0x00003f45u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004e33u, 0x00004e32u, 0x00050084u, 0x00000006u, 0x00004e34u, 0x00003e64u, 0x00004e33u, 0x00050080u, 0x00000006u, 0x00004e35u, 0x00003e62u, 0x00004e34u, 0x0003003eu, 0x00004e2au, 0x00004e35u, 0x00050041u, 0x00000007u, 0x00004e36u, 0x00003f45u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004e37u, 0x00004e36u, 0x00050084u, 0x00000006u, 0x00004e38u, 0x00004e37u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004e3au, 0x00004e35u, 0x00004e38u, 0x0003003eu, 0x00004e2au, 0x00004e3au, 0x000500c7u, 0x00000006u, 0x00004e3cu, 0x00004e3au, 0x0000068au, 0x0003003eu, 0x00004e2au, 0x00004e3cu, 0x000500c2u, 0x00000006u, 0x00004e3eu, 0x00004e3cu, 0x000001a6u, 0x0003003eu, 0x00004e2bu, 0x00004e3eu, 0x0004003du, 0x00000006u, 0x00004e40u, 0x00004e32u, 0x000500c7u, 0x00000006u, 0x00004e41u, 0x00004e40u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004e42u, 0x00004e41u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004e44u, 0x00004e3eu, 0x00004e42u, 0x0003003eu, 0x00004e2bu, 0x00004e44u, 0x000500c6u, 0x00000006u, 0x00004e46u, 0x00004e44u, 0x000002f4u, 0x0003003eu, 0x00004e2bu, 0x00004e46u, 0x00080041u, 0x00000778u, 0x00004e49u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004e46u, 0x0004003du, 0x00000011u, 0x00004e4au, 0x00004e49u, 0x00040071u, 0x00000006u, 0x00004e4bu, 0x00004e4au, 0x0003003eu, 0x00004e2cu, 0x00004e4bu, 0x000500c2u, 0x00000006u, 0x00004e4du, 0x00004e4bu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004e4eu, 0x00004e4du, 0x0004007cu, 0x00000012u, 0x00004e4fu, 0x00004e4eu, 0x000500c7u, 0x00000006u, 0x00004e51u, 0x00004e4bu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004e52u, 0x00004e51u, 0x0004007cu, 0x00000012u, 0x00004e53u, 0x00004e52u, 0x00050050u, 0x0000011du, 0x00004e54u, 0x00004e4fu, 0x00004e53u, 0x0009004fu, 0x00000013u, 0x00004e55u, 0x00004e54u, 0x00004e54u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004e2du, 0x00004e55u, 0x0003003eu, 0x00003e95u, 0x00004e55u, 0x000300f7u, 0x00004198u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004199u, 0x00004198u, 0x000200f8u, 0x00004199u, 0x00050050u, 0x00000058u, 0x0000419cu, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x0000419du, 0x0000419cu, 0x0003003eu, 0x00005decu, 0x00003e62u, 0x0003003eu, 0x00005dedu, 0x00003e64u, 0x0003003eu, 0x00003f47u, 0x000019c4u, 0x0003003eu, 0x00003f48u, 0x0000419du, 0x00050041u, 0x00000007u, 0x00004e5eu, 0x00003f48u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004e5fu, 0x00004e5eu, 0x00050084u, 0x00000006u, 0x00004e60u, 0x00003e64u, 0x00004e5fu, 0x00050080u, 0x00000006u, 0x00004e61u, 0x00003e62u, 0x00004e60u, 0x0003003eu, 0x00004e56u, 0x00004e61u, 0x00050041u, 0x00000007u, 0x00004e62u, 0x00003f48u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004e63u, 0x00004e62u, 0x00050084u, 0x00000006u, 0x00004e64u, 0x00004e63u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004e66u, 0x00004e61u, 0x00004e64u, 0x0003003eu, 0x00004e56u, 0x00004e66u, 0x000500c7u, 0x00000006u, 0x00004e68u, 0x00004e66u, 0x0000068au, 0x0003003eu, 0x00004e56u, 0x00004e68u, 0x000500c2u, 0x00000006u, 0x00004e6au, 0x00004e68u, 0x000001a6u, 0x0003003eu, 0x00004e57u, 0x00004e6au, 0x0004003du, 0x00000006u, 0x00004e6cu, 0x00004e5eu, 0x000500c7u, 0x00000006u, 0x00004e6du, 0x00004e6cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004e6eu, 0x00004e6du, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004e70u, 0x00004e6au, 0x00004e6eu, 0x0003003eu, 0x00004e57u, 0x00004e70u, 0x000500c6u, 0x00000006u, 0x00004e72u, 0x00004e70u, 0x000002f4u, 0x0003003eu, 0x00004e57u, 0x00004e72u, 0x00080041u, 0x00000778u, 0x00004e75u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004e72u, 0x0004003du, 0x00000011u, 0x00004e76u, 0x00004e75u, 0x00040071u, 0x00000006u, 0x00004e77u, 0x00004e76u, 0x0003003eu, 0x00004e58u, 0x00004e77u, 0x000500c2u, 0x00000006u, 0x00004e79u, 0x00004e77u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004e7au, 0x00004e79u, 0x0004007cu, 0x00000012u, 0x00004e7bu, 0x00004e7au, 0x000500c7u, 0x00000006u, 0x00004e7du, 0x00004e77u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004e7eu, 0x00004e7du, 0x0004007cu, 0x00000012u, 0x00004e7fu, 0x00004e7eu, 0x00050050u, 0x0000011du, 0x00004e80u, 0x00004e7bu, 0x00004e7fu, 0x0009004fu, 0x00000013u, 0x00004e81u, 0x00004e80u, 0x00004e80u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004e59u, 0x00004e81u, 0x0003003eu, 0x00003e9du, 0x00004e81u, 0x00050050u, 0x00000058u, 0x000041a3u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000041a4u, 0x000041a3u, 0x0003003eu, 0x00005df0u, 0x00003e62u, 0x0003003eu, 0x00005df1u, 0x00003e64u, 0x0003003eu, 0x00003f4au, 0x000019c4u, 0x0003003eu, 0x00003f4bu, 0x000041a4u, 0x00050041u, 0x00000007u, 0x00004e8au, 0x00003f4bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004e8bu, 0x00004e8au, 0x00050084u, 0x00000006u, 0x00004e8cu, 0x00003e64u, 0x00004e8bu, 0x00050080u, 0x00000006u, 0x00004e8du, 0x00003e62u, 0x00004e8cu, 0x0003003eu, 0x00004e82u, 0x00004e8du, 0x00050041u, 0x00000007u, 0x00004e8eu, 0x00003f4bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004e8fu, 0x00004e8eu, 0x00050084u, 0x00000006u, 0x00004e90u, 0x00004e8fu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004e92u, 0x00004e8du, 0x00004e90u, 0x0003003eu, 0x00004e82u, 0x00004e92u, 0x000500c7u, 0x00000006u, 0x00004e94u, 0x00004e92u, 0x0000068au, 0x0003003eu, 0x00004e82u, 0x00004e94u, 0x000500c2u, 0x00000006u, 0x00004e96u, 0x00004e94u, 0x000001a6u, 0x0003003eu, 0x00004e83u, 0x00004e96u, 0x0004003du, 0x00000006u, 0x00004e98u, 0x00004e8au, 0x000500c7u, 0x00000006u, 0x00004e99u, 0x00004e98u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004e9au, 0x00004e99u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004e9cu, 0x00004e96u, 0x00004e9au, 0x0003003eu, 0x00004e83u, 0x00004e9cu, 0x000500c6u, 0x00000006u, 0x00004e9eu, 0x00004e9cu, 0x000002f4u, 0x0003003eu, 0x00004e83u, 0x00004e9eu, 0x00080041u, 0x00000778u, 0x00004ea1u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004e9eu, 0x0004003du, 0x00000011u, 0x00004ea2u, 0x00004ea1u, 0x00040071u, 0x00000006u, 0x00004ea3u, 0x00004ea2u, 0x0003003eu, 0x00004e84u, 0x00004ea3u, 0x000500c2u, 0x00000006u, 0x00004ea5u, 0x00004ea3u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004ea6u, 0x00004ea5u, 0x0004007cu, 0x00000012u, 0x00004ea7u, 0x00004ea6u, 0x000500c7u, 0x00000006u, 0x00004ea9u, 0x00004ea3u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004eaau, 0x00004ea9u, 0x0004007cu, 0x00000012u, 0x00004eabu, 0x00004eaau, 0x00050050u, 0x0000011du, 0x00004eacu, 0x00004ea7u, 0x00004eabu, 0x0009004fu, 0x00000013u, 0x00004eadu, 0x00004eacu, 0x00004eacu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004e85u, 0x00004eadu, 0x0003003eu, 0x00003ea5u, 0x00004eadu, 0x000200f9u, 0x00004198u, 0x000200f8u, 0x00004198u, 0x000700f5u, 0x00000013u, 0x00008fa1u, 0x00007705u, 0x0000418fu, 0x00004eadu, 0x00004199u, 0x000700f5u, 0x00000013u, 0x00008dd9u, 0x00007705u, 0x0000418fu, 0x00004e81u, 0x00004199u, 0x000300f7u, 0x000041a9u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000041aau, 0x000041a9u, 0x000200f8u, 0x000041aau, 0x00050050u, 0x00000058u, 0x000041adu, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000041aeu, 0x000041adu, 0x0003003eu, 0x00005df4u, 0x00003e62u, 0x0003003eu, 0x00005df5u, 0x00003e64u, 0x0003003eu, 0x00003f4du, 0x000019c4u, 0x0003003eu, 0x00003f4eu, 0x000041aeu, 0x00050041u, 0x00000007u, 0x00004eb6u, 0x00003f4eu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004eb7u, 0x00004eb6u, 0x00050084u, 0x00000006u, 0x00004eb8u, 0x00003e64u, 0x00004eb7u, 0x00050080u, 0x00000006u, 0x00004eb9u, 0x00003e62u, 0x00004eb8u, 0x0003003eu, 0x00004eaeu, 0x00004eb9u, 0x00050041u, 0x00000007u, 0x00004ebau, 0x00003f4eu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004ebbu, 0x00004ebau, 0x00050084u, 0x00000006u, 0x00004ebcu, 0x00004ebbu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004ebeu, 0x00004eb9u, 0x00004ebcu, 0x0003003eu, 0x00004eaeu, 0x00004ebeu, 0x000500c7u, 0x00000006u, 0x00004ec0u, 0x00004ebeu, 0x0000068au, 0x0003003eu, 0x00004eaeu, 0x00004ec0u, 0x000500c2u, 0x00000006u, 0x00004ec2u, 0x00004ec0u, 0x000001a6u, 0x0003003eu, 0x00004eafu, 0x00004ec2u, 0x0004003du, 0x00000006u, 0x00004ec4u, 0x00004eb6u, 0x000500c7u, 0x00000006u, 0x00004ec5u, 0x00004ec4u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004ec6u, 0x00004ec5u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004ec8u, 0x00004ec2u, 0x00004ec6u, 0x0003003eu, 0x00004eafu, 0x00004ec8u, 0x000500c6u, 0x00000006u, 0x00004ecau, 0x00004ec8u, 0x000002f4u, 0x0003003eu, 0x00004eafu, 0x00004ecau, 0x00080041u, 0x00000778u, 0x00004ecdu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004ecau, 0x0004003du, 0x00000011u, 0x00004eceu, 0x00004ecdu, 0x00040071u, 0x00000006u, 0x00004ecfu, 0x00004eceu, 0x0003003eu, 0x00004eb0u, 0x00004ecfu, 0x000500c2u, 0x00000006u, 0x00004ed1u, 0x00004ecfu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004ed2u, 0x00004ed1u, 0x0004007cu, 0x00000012u, 0x00004ed3u, 0x00004ed2u, 0x000500c7u, 0x00000006u, 0x00004ed5u, 0x00004ecfu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004ed6u, 0x00004ed5u, 0x0004007cu, 0x00000012u, 0x00004ed7u, 0x00004ed6u, 0x00050050u, 0x0000011du, 0x00004ed8u, 0x00004ed3u, 0x00004ed7u, 0x0009004fu, 0x00000013u, 0x00004ed9u, 0x00004ed8u, 0x00004ed8u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00004eb1u, 0x00004ed9u, 0x0003003eu, 0x00003eadu, 0x00004ed9u, 0x000200f9u, 0x000041a9u, 0x000200f8u, 0x000041a9u, 0x000700f5u, 0x00000013u, 0x00009085u, 0x00007705u, 0x00004198u, 0x00004ed9u, 0x000041aau, 0x000200f9u, 0x0000418eu, 0x000200f8u, 0x0000418eu, 0x000900f5u, 0x00000013u, 0x00009084u, 0x00009085u, 0x000041a9u, 0x00009087u, 0x000041d2u, 0x00009089u, 0x000041f5u, 0x000900f5u, 0x00000013u, 0x00008f9fu, 0x00008fa1u, 0x000041a9u, 0x00008fa3u, 0x000041d2u, 0x00008fa5u, 0x000041f5u, 0x000900f5u, 0x00000013u, 0x00008ebcu, 0x00004e55u, 0x000041a9u, 0x00004f0cu, 0x000041d2u, 0x00004fc9u, 0x000041f5u, 0x000900f5u, 0x00000013u, 0x00008dd7u, 0x00008dd9u, 0x000041a9u, 0x00008ddbu, 0x000041d2u, 0x00008dddu, 0x000041f5u, 0x000200f9u, 0x000040ceu, 0x000200f8u, 0x000040d0u, 0x000500c3u, 0x00000008u, 0x0000415eu, 0x00008911u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x0000415fu, 0x0000415eu, 0x0003003eu, 0x00003f15u, 0x0000415fu, 0x00050082u, 0x00000008u, 0x00004163u, 0x0000894fu, 0x00008911u, 0x00050080u, 0x00000008u, 0x00004164u, 0x0000894fu, 0x00004163u, 0x000500c3u, 0x00000008u, 0x00004165u, 0x00004164u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x00004166u, 0x00004165u, 0x0003003eu, 0x00003f16u, 0x00004166u, 0x00050050u, 0x00000058u, 0x00004169u, 0x00008911u, 0x00004006u, 0x0004007cu, 0x000000abu, 0x0000416au, 0x00004169u, 0x0003003eu, 0x00005db8u, 0x00003e62u, 0x0003003eu, 0x00005db9u, 0x00003e64u, 0x0003003eu, 0x00003f18u, 0x000019c4u, 0x0003003eu, 0x00003f19u, 0x0000416au, 0x0003003eu, 0x00003f1au, 0x0000415fu, 0x00050041u, 0x00000007u, 0x00004cf4u, 0x00003f19u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004cf5u, 0x00004cf4u, 0x00050084u, 0x00000006u, 0x00004cf6u, 0x00003e64u, 0x00004cf5u, 0x00050080u, 0x00000006u, 0x00004cf7u, 0x00003e62u, 0x00004cf6u, 0x0003003eu, 0x00004ce6u, 0x00004cf7u, 0x00050041u, 0x00000007u, 0x00004cf9u, 0x00003f19u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004cfau, 0x00004cf9u, 0x00050080u, 0x00000006u, 0x00004cfbu, 0x00004cf7u, 0x00004cfau, 0x0003003eu, 0x00004ce7u, 0x00004cfbu, 0x000500c7u, 0x00000006u, 0x00004cfdu, 0x00004cfbu, 0x00000744u, 0x0003003eu, 0x00004ce7u, 0x00004cfdu, 0x00050084u, 0x00000006u, 0x00004d00u, 0x0000415fu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004d01u, 0x00004cf7u, 0x00004d00u, 0x0003003eu, 0x00004ce8u, 0x00004d01u, 0x000500c7u, 0x00000006u, 0x00004d03u, 0x00004d01u, 0x00000744u, 0x0003003eu, 0x00004ce8u, 0x00004d03u, 0x0003003eu, 0x00004ce9u, 0x00004cfdu, 0x0004003du, 0x00000006u, 0x00004d06u, 0x00004cf4u, 0x000500c7u, 0x00000006u, 0x00004d07u, 0x00004d06u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004d08u, 0x00004d07u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004d0au, 0x00004cfdu, 0x00004d08u, 0x0003003eu, 0x00004ce9u, 0x00004d0au, 0x000500c6u, 0x00000006u, 0x00004d0cu, 0x00004d0au, 0x000002fbu, 0x0003003eu, 0x00004ce9u, 0x00004d0cu, 0x000500c2u, 0x00000006u, 0x00004d0eu, 0x00004d03u, 0x000001a6u, 0x0003003eu, 0x00004ceau, 0x00004d0eu, 0x0004003du, 0x00000006u, 0x00004d10u, 0x00004cf4u, 0x000500c7u, 0x00000006u, 0x00004d11u, 0x00004d10u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004d12u, 0x00004d11u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004d14u, 0x00004d0eu, 0x00004d12u, 0x0003003eu, 0x00004ceau, 0x00004d14u, 0x000500c6u, 0x00000006u, 0x00004d16u, 0x00004d14u, 0x000002f4u, 0x0003003eu, 0x00004ceau, 0x00004d16u, 0x000500c5u, 0x00000006u, 0x00004d19u, 0x00004d0cu, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00004d1au, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004d19u, 0x0004003du, 0x0000000fu, 0x00004d1bu, 0x00004d1au, 0x0003003eu, 0x00004cebu, 0x00004d1bu, 0x00080041u, 0x00000778u, 0x00004d1eu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004d16u, 0x0004003du, 0x00000011u, 0x00004d1fu, 0x00004d1eu, 0x0003003eu, 0x00004cecu, 0x00004d1fu, 0x000500c2u, 0x00000011u, 0x00004d21u, 0x00004d1fu, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x00004d22u, 0x00004d21u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004d23u, 0x00004d22u, 0x0003003eu, 0x00004cedu, 0x00004d23u, 0x000500c2u, 0x00000011u, 0x00004d25u, 0x00004d1fu, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00004d26u, 0x00004d25u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004d27u, 0x00004d26u, 0x0003003eu, 0x00004ceeu, 0x00004d27u, 0x00040071u, 0x00000011u, 0x00004d29u, 0x00004d23u, 0x0004007cu, 0x00000012u, 0x00004d2au, 0x00004d29u, 0x00050082u, 0x00000012u, 0x00004d2bu, 0x00004d2au, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004d2du, 0x00004d27u, 0x0004007cu, 0x00000012u, 0x00004d2eu, 0x00004d2du, 0x00050082u, 0x00000012u, 0x00004d2fu, 0x00004d2eu, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004d31u, 0x00004d1bu, 0x0004007cu, 0x00000012u, 0x00004d32u, 0x00004d31u, 0x00070050u, 0x00000013u, 0x00004d36u, 0x00004d2bu, 0x00004d2fu, 0x00004d32u, 0x00004d32u, 0x0003003eu, 0x00004cefu, 0x00004d36u, 0x0003003eu, 0x00003e95u, 0x00004d36u, 0x000300f7u, 0x00004170u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004171u, 0x00004170u, 0x000200f8u, 0x00004171u, 0x00050050u, 0x00000058u, 0x00004174u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004175u, 0x00004174u, 0x0003003eu, 0x00005dbcu, 0x00003e62u, 0x0003003eu, 0x00005dbdu, 0x00003e64u, 0x0003003eu, 0x00003f1cu, 0x000019c4u, 0x0003003eu, 0x00003f1du, 0x00004175u, 0x0003003eu, 0x00003f1eu, 0x00004166u, 0x00050041u, 0x00000007u, 0x00004d45u, 0x00003f1du, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004d46u, 0x00004d45u, 0x00050084u, 0x00000006u, 0x00004d47u, 0x00003e64u, 0x00004d46u, 0x00050080u, 0x00000006u, 0x00004d48u, 0x00003e62u, 0x00004d47u, 0x0003003eu, 0x00004d37u, 0x00004d48u, 0x00050041u, 0x00000007u, 0x00004d4au, 0x00003f1du, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004d4bu, 0x00004d4au, 0x00050080u, 0x00000006u, 0x00004d4cu, 0x00004d48u, 0x00004d4bu, 0x0003003eu, 0x00004d38u, 0x00004d4cu, 0x000500c7u, 0x00000006u, 0x00004d4eu, 0x00004d4cu, 0x00000744u, 0x0003003eu, 0x00004d38u, 0x00004d4eu, 0x00050084u, 0x00000006u, 0x00004d51u, 0x00004166u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004d52u, 0x00004d48u, 0x00004d51u, 0x0003003eu, 0x00004d39u, 0x00004d52u, 0x000500c7u, 0x00000006u, 0x00004d54u, 0x00004d52u, 0x00000744u, 0x0003003eu, 0x00004d39u, 0x00004d54u, 0x0003003eu, 0x00004d3au, 0x00004d4eu, 0x0004003du, 0x00000006u, 0x00004d57u, 0x00004d45u, 0x000500c7u, 0x00000006u, 0x00004d58u, 0x00004d57u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004d59u, 0x00004d58u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004d5bu, 0x00004d4eu, 0x00004d59u, 0x0003003eu, 0x00004d3au, 0x00004d5bu, 0x000500c6u, 0x00000006u, 0x00004d5du, 0x00004d5bu, 0x000002fbu, 0x0003003eu, 0x00004d3au, 0x00004d5du, 0x000500c2u, 0x00000006u, 0x00004d5fu, 0x00004d54u, 0x000001a6u, 0x0003003eu, 0x00004d3bu, 0x00004d5fu, 0x0004003du, 0x00000006u, 0x00004d61u, 0x00004d45u, 0x000500c7u, 0x00000006u, 0x00004d62u, 0x00004d61u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004d63u, 0x00004d62u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004d65u, 0x00004d5fu, 0x00004d63u, 0x0003003eu, 0x00004d3bu, 0x00004d65u, 0x000500c6u, 0x00000006u, 0x00004d67u, 0x00004d65u, 0x000002f4u, 0x0003003eu, 0x00004d3bu, 0x00004d67u, 0x000500c5u, 0x00000006u, 0x00004d6au, 0x00004d5du, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00004d6bu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004d6au, 0x0004003du, 0x0000000fu, 0x00004d6cu, 0x00004d6bu, 0x0003003eu, 0x00004d3cu, 0x00004d6cu, 0x00080041u, 0x00000778u, 0x00004d6fu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004d67u, 0x0004003du, 0x00000011u, 0x00004d70u, 0x00004d6fu, 0x0003003eu, 0x00004d3du, 0x00004d70u, 0x000500c2u, 0x00000011u, 0x00004d72u, 0x00004d70u, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x00004d73u, 0x00004d72u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004d74u, 0x00004d73u, 0x0003003eu, 0x00004d3eu, 0x00004d74u, 0x000500c2u, 0x00000011u, 0x00004d76u, 0x00004d70u, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00004d77u, 0x00004d76u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004d78u, 0x00004d77u, 0x0003003eu, 0x00004d3fu, 0x00004d78u, 0x00040071u, 0x00000011u, 0x00004d7au, 0x00004d74u, 0x0004007cu, 0x00000012u, 0x00004d7bu, 0x00004d7au, 0x00050082u, 0x00000012u, 0x00004d7cu, 0x00004d7bu, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004d7eu, 0x00004d78u, 0x0004007cu, 0x00000012u, 0x00004d7fu, 0x00004d7eu, 0x00050082u, 0x00000012u, 0x00004d80u, 0x00004d7fu, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004d82u, 0x00004d6cu, 0x0004007cu, 0x00000012u, 0x00004d83u, 0x00004d82u, 0x00070050u, 0x00000013u, 0x00004d87u, 0x00004d7cu, 0x00004d80u, 0x00004d83u, 0x00004d83u, 0x0003003eu, 0x00004d40u, 0x00004d87u, 0x0003003eu, 0x00003e9du, 0x00004d87u, 0x00050050u, 0x00000058u, 0x0000417cu, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x0000417du, 0x0000417cu, 0x0003003eu, 0x00005dc0u, 0x00003e62u, 0x0003003eu, 0x00005dc1u, 0x00003e64u, 0x0003003eu, 0x00003f20u, 0x000019c4u, 0x0003003eu, 0x00003f21u, 0x0000417du, 0x0003003eu, 0x00003f22u, 0x0000415fu, 0x00050041u, 0x00000007u, 0x00004d96u, 0x00003f21u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004d97u, 0x00004d96u, 0x00050084u, 0x00000006u, 0x00004d98u, 0x00003e64u, 0x00004d97u, 0x00050080u, 0x00000006u, 0x00004d99u, 0x00003e62u, 0x00004d98u, 0x0003003eu, 0x00004d88u, 0x00004d99u, 0x00050041u, 0x00000007u, 0x00004d9bu, 0x00003f21u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004d9cu, 0x00004d9bu, 0x00050080u, 0x00000006u, 0x00004d9du, 0x00004d99u, 0x00004d9cu, 0x0003003eu, 0x00004d89u, 0x00004d9du, 0x000500c7u, 0x00000006u, 0x00004d9fu, 0x00004d9du, 0x00000744u, 0x0003003eu, 0x00004d89u, 0x00004d9fu, 0x00050080u, 0x00000006u, 0x00004da3u, 0x00004d99u, 0x00004d00u, 0x0003003eu, 0x00004d8au, 0x00004da3u, 0x000500c7u, 0x00000006u, 0x00004da5u, 0x00004da3u, 0x00000744u, 0x0003003eu, 0x00004d8au, 0x00004da5u, 0x0003003eu, 0x00004d8bu, 0x00004d9fu, 0x0004003du, 0x00000006u, 0x00004da8u, 0x00004d96u, 0x000500c7u, 0x00000006u, 0x00004da9u, 0x00004da8u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004daau, 0x00004da9u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004dacu, 0x00004d9fu, 0x00004daau, 0x0003003eu, 0x00004d8bu, 0x00004dacu, 0x000500c6u, 0x00000006u, 0x00004daeu, 0x00004dacu, 0x000002fbu, 0x0003003eu, 0x00004d8bu, 0x00004daeu, 0x000500c2u, 0x00000006u, 0x00004db0u, 0x00004da5u, 0x000001a6u, 0x0003003eu, 0x00004d8cu, 0x00004db0u, 0x0004003du, 0x00000006u, 0x00004db2u, 0x00004d96u, 0x000500c7u, 0x00000006u, 0x00004db3u, 0x00004db2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004db4u, 0x00004db3u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004db6u, 0x00004db0u, 0x00004db4u, 0x0003003eu, 0x00004d8cu, 0x00004db6u, 0x000500c6u, 0x00000006u, 0x00004db8u, 0x00004db6u, 0x000002f4u, 0x0003003eu, 0x00004d8cu, 0x00004db8u, 0x000500c5u, 0x00000006u, 0x00004dbbu, 0x00004daeu, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00004dbcu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004dbbu, 0x0004003du, 0x0000000fu, 0x00004dbdu, 0x00004dbcu, 0x0003003eu, 0x00004d8du, 0x00004dbdu, 0x00080041u, 0x00000778u, 0x00004dc0u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004db8u, 0x0004003du, 0x00000011u, 0x00004dc1u, 0x00004dc0u, 0x0003003eu, 0x00004d8eu, 0x00004dc1u, 0x000500c2u, 0x00000011u, 0x00004dc3u, 0x00004dc1u, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x00004dc4u, 0x00004dc3u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004dc5u, 0x00004dc4u, 0x0003003eu, 0x00004d8fu, 0x00004dc5u, 0x000500c2u, 0x00000011u, 0x00004dc7u, 0x00004dc1u, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00004dc8u, 0x00004dc7u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004dc9u, 0x00004dc8u, 0x0003003eu, 0x00004d90u, 0x00004dc9u, 0x00040071u, 0x00000011u, 0x00004dcbu, 0x00004dc5u, 0x0004007cu, 0x00000012u, 0x00004dccu, 0x00004dcbu, 0x00050082u, 0x00000012u, 0x00004dcdu, 0x00004dccu, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004dcfu, 0x00004dc9u, 0x0004007cu, 0x00000012u, 0x00004dd0u, 0x00004dcfu, 0x00050082u, 0x00000012u, 0x00004dd1u, 0x00004dd0u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004dd3u, 0x00004dbdu, 0x0004007cu, 0x00000012u, 0x00004dd4u, 0x00004dd3u, 0x00070050u, 0x00000013u, 0x00004dd8u, 0x00004dcdu, 0x00004dd1u, 0x00004dd4u, 0x00004dd4u, 0x0003003eu, 0x00004d91u, 0x00004dd8u, 0x0003003eu, 0x00003ea5u, 0x00004dd8u, 0x00050050u, 0x00000058u, 0x00004184u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004185u, 0x00004184u, 0x0003003eu, 0x00005dc4u, 0x00003e62u, 0x0003003eu, 0x00005dc5u, 0x00003e64u, 0x0003003eu, 0x00003f24u, 0x000019c4u, 0x0003003eu, 0x00003f25u, 0x00004185u, 0x0003003eu, 0x00003f26u, 0x00004166u, 0x00050041u, 0x00000007u, 0x00004de7u, 0x00003f25u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004de8u, 0x00004de7u, 0x00050084u, 0x00000006u, 0x00004de9u, 0x00003e64u, 0x00004de8u, 0x00050080u, 0x00000006u, 0x00004deau, 0x00003e62u, 0x00004de9u, 0x0003003eu, 0x00004dd9u, 0x00004deau, 0x00050041u, 0x00000007u, 0x00004decu, 0x00003f25u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004dedu, 0x00004decu, 0x00050080u, 0x00000006u, 0x00004deeu, 0x00004deau, 0x00004dedu, 0x0003003eu, 0x00004ddau, 0x00004deeu, 0x000500c7u, 0x00000006u, 0x00004df0u, 0x00004deeu, 0x00000744u, 0x0003003eu, 0x00004ddau, 0x00004df0u, 0x00050080u, 0x00000006u, 0x00004df4u, 0x00004deau, 0x00004d51u, 0x0003003eu, 0x00004ddbu, 0x00004df4u, 0x000500c7u, 0x00000006u, 0x00004df6u, 0x00004df4u, 0x00000744u, 0x0003003eu, 0x00004ddbu, 0x00004df6u, 0x0003003eu, 0x00004ddcu, 0x00004df0u, 0x0004003du, 0x00000006u, 0x00004df9u, 0x00004de7u, 0x000500c7u, 0x00000006u, 0x00004dfau, 0x00004df9u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004dfbu, 0x00004dfau, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004dfdu, 0x00004df0u, 0x00004dfbu, 0x0003003eu, 0x00004ddcu, 0x00004dfdu, 0x000500c6u, 0x00000006u, 0x00004dffu, 0x00004dfdu, 0x000002fbu, 0x0003003eu, 0x00004ddcu, 0x00004dffu, 0x000500c2u, 0x00000006u, 0x00004e01u, 0x00004df6u, 0x000001a6u, 0x0003003eu, 0x00004dddu, 0x00004e01u, 0x0004003du, 0x00000006u, 0x00004e03u, 0x00004de7u, 0x000500c7u, 0x00000006u, 0x00004e04u, 0x00004e03u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004e05u, 0x00004e04u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004e07u, 0x00004e01u, 0x00004e05u, 0x0003003eu, 0x00004dddu, 0x00004e07u, 0x000500c6u, 0x00000006u, 0x00004e09u, 0x00004e07u, 0x000002f4u, 0x0003003eu, 0x00004dddu, 0x00004e09u, 0x000500c5u, 0x00000006u, 0x00004e0cu, 0x00004dffu, 0x0000076du, 0x00080041u, 0x000006a8u, 0x00004e0du, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004e0cu, 0x0004003du, 0x0000000fu, 0x00004e0eu, 0x00004e0du, 0x0003003eu, 0x00004ddeu, 0x00004e0eu, 0x00080041u, 0x00000778u, 0x00004e11u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004e09u, 0x0004003du, 0x00000011u, 0x00004e12u, 0x00004e11u, 0x0003003eu, 0x00004ddfu, 0x00004e12u, 0x000500c2u, 0x00000011u, 0x00004e14u, 0x00004e12u, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x00004e15u, 0x00004e14u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004e16u, 0x00004e15u, 0x0003003eu, 0x00004de0u, 0x00004e16u, 0x000500c2u, 0x00000011u, 0x00004e18u, 0x00004e12u, 0x00000196u, 0x000500c7u, 0x00000011u, 0x00004e19u, 0x00004e18u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00004e1au, 0x00004e19u, 0x0003003eu, 0x00004de1u, 0x00004e1au, 0x00040071u, 0x00000011u, 0x00004e1cu, 0x00004e16u, 0x0004007cu, 0x00000012u, 0x00004e1du, 0x00004e1cu, 0x00050082u, 0x00000012u, 0x00004e1eu, 0x00004e1du, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004e20u, 0x00004e1au, 0x0004007cu, 0x00000012u, 0x00004e21u, 0x00004e20u, 0x00050082u, 0x00000012u, 0x00004e22u, 0x00004e21u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x00004e24u, 0x00004e0eu, 0x0004007cu, 0x00000012u, 0x00004e25u, 0x00004e24u, 0x00070050u, 0x00000013u, 0x00004e29u, 0x00004e1eu, 0x00004e22u, 0x00004e25u, 0x00004e25u, 0x0003003eu, 0x00004de2u, 0x00004e29u, 0x0003003eu, 0x00003eadu, 0x00004e29u, 0x000200f9u, 0x00004170u, 0x000200f8u, 0x00004170u, 0x000700f5u, 0x00000013u, 0x00009083u, 0x00007705u, 0x000040d0u, 0x00004e29u, 0x00004171u, 0x000700f5u, 0x00000013u, 0x00008f9eu, 0x00007705u, 0x000040d0u, 0x00004dd8u, 0x00004171u, 0x000700f5u, 0x00000013u, 0x00008dd6u, 0x00007705u, 0x000040d0u, 0x00004d87u, 0x00004171u, 0x000200f9u, 0x000040ceu, 0x000200f8u, 0x000040cfu, 0x00040071u, 0x00000006u, 0x000040d6u, 0x0000b64au, 0x0004007cu, 0x00000008u, 0x000040d7u, 0x000040d6u, 0x000300f7u, 0x000040d8u, 0x00000000u, 0x000b00fbu, 0x000040d7u, 0x000040d8u, 0x00000000u, 0x000040d9u, 0x00000001u, 0x000040dau, 0x00000002u, 0x000040dbu, 0x00000003u, 0x000040dcu, 0x000200f8u, 0x000040dcu, 0x0004007cu, 0x000000abu, 0x0000413eu, 0x0000899au, 0x0003003eu, 0x00005da8u, 0x00003e62u, 0x0003003eu, 0x00005da9u, 0x00003e64u, 0x0003003eu, 0x00003f0au, 0x000019c4u, 0x0003003eu, 0x00003f0bu, 0x0000413eu, 0x00050041u, 0x00000007u, 0x00004c07u, 0x00003f0bu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004c08u, 0x00004c07u, 0x00050084u, 0x00000006u, 0x00004c09u, 0x00003e64u, 0x00004c08u, 0x00050080u, 0x00000006u, 0x00004c0au, 0x00003e62u, 0x00004c09u, 0x0003003eu, 0x00004bfeu, 0x00004c0au, 0x00050041u, 0x00000007u, 0x00004c0bu, 0x00003f0bu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004c0cu, 0x00004c0bu, 0x00050084u, 0x00000006u, 0x00004c0du, 0x00004c0cu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004c0fu, 0x00004c0au, 0x00004c0du, 0x0003003eu, 0x00004bfeu, 0x00004c0fu, 0x000500c7u, 0x00000006u, 0x00004c11u, 0x00004c0fu, 0x00000744u, 0x0003003eu, 0x00004bfeu, 0x00004c11u, 0x000500c2u, 0x00000006u, 0x00004c13u, 0x00004c11u, 0x000001a6u, 0x0003003eu, 0x00004bffu, 0x00004c13u, 0x0004003du, 0x00000006u, 0x00004c15u, 0x00004c07u, 0x000500c7u, 0x00000006u, 0x00004c16u, 0x00004c15u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004c17u, 0x00004c16u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004c19u, 0x00004c13u, 0x00004c17u, 0x0003003eu, 0x00004bffu, 0x00004c19u, 0x000500c6u, 0x00000006u, 0x00004c1bu, 0x00004c19u, 0x000002f4u, 0x0003003eu, 0x00004bffu, 0x00004c1bu, 0x00080041u, 0x00000778u, 0x00004c1eu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004c1bu, 0x0004003du, 0x00000011u, 0x00004c1fu, 0x00004c1eu, 0x00040071u, 0x00000006u, 0x00004c20u, 0x00004c1fu, 0x0003003eu, 0x00004c00u, 0x00004c20u, 0x000500c5u, 0x00000006u, 0x00004c23u, 0x00004c1bu, 0x00000775u, 0x00080041u, 0x00000778u, 0x00004c24u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004c23u, 0x0004003du, 0x00000011u, 0x00004c25u, 0x00004c24u, 0x00040071u, 0x00000006u, 0x00004c26u, 0x00004c25u, 0x0003003eu, 0x00004c01u, 0x00004c26u, 0x000500c2u, 0x00000006u, 0x00004c28u, 0x00004c20u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004c29u, 0x00004c28u, 0x0004007cu, 0x00000012u, 0x00004c2au, 0x00004c29u, 0x000500c7u, 0x00000006u, 0x00004c2cu, 0x00004c20u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004c2du, 0x00004c2cu, 0x0004007cu, 0x00000012u, 0x00004c2eu, 0x00004c2du, 0x000500c2u, 0x00000006u, 0x00004c30u, 0x00004c26u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004c31u, 0x00004c30u, 0x0004007cu, 0x00000012u, 0x00004c32u, 0x00004c31u, 0x000500c7u, 0x00000006u, 0x00004c34u, 0x00004c26u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004c35u, 0x00004c34u, 0x0004007cu, 0x00000012u, 0x00004c36u, 0x00004c35u, 0x00070050u, 0x00000013u, 0x00004c37u, 0x00004c2au, 0x00004c2eu, 0x00004c32u, 0x00004c36u, 0x0003003eu, 0x00004c02u, 0x00004c37u, 0x0003003eu, 0x00003e95u, 0x00004c37u, 0x000300f7u, 0x00004143u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004144u, 0x00004143u, 0x000200f8u, 0x00004144u, 0x00050050u, 0x00000058u, 0x00004147u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004148u, 0x00004147u, 0x0003003eu, 0x00005dacu, 0x00003e62u, 0x0003003eu, 0x00005dadu, 0x00003e64u, 0x0003003eu, 0x00003f0du, 0x000019c4u, 0x0003003eu, 0x00003f0eu, 0x00004148u, 0x00050041u, 0x00000007u, 0x00004c41u, 0x00003f0eu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004c42u, 0x00004c41u, 0x00050084u, 0x00000006u, 0x00004c43u, 0x00003e64u, 0x00004c42u, 0x00050080u, 0x00000006u, 0x00004c44u, 0x00003e62u, 0x00004c43u, 0x0003003eu, 0x00004c38u, 0x00004c44u, 0x00050041u, 0x00000007u, 0x00004c45u, 0x00003f0eu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004c46u, 0x00004c45u, 0x00050084u, 0x00000006u, 0x00004c47u, 0x00004c46u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004c49u, 0x00004c44u, 0x00004c47u, 0x0003003eu, 0x00004c38u, 0x00004c49u, 0x000500c7u, 0x00000006u, 0x00004c4bu, 0x00004c49u, 0x00000744u, 0x0003003eu, 0x00004c38u, 0x00004c4bu, 0x000500c2u, 0x00000006u, 0x00004c4du, 0x00004c4bu, 0x000001a6u, 0x0003003eu, 0x00004c39u, 0x00004c4du, 0x0004003du, 0x00000006u, 0x00004c4fu, 0x00004c41u, 0x000500c7u, 0x00000006u, 0x00004c50u, 0x00004c4fu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004c51u, 0x00004c50u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004c53u, 0x00004c4du, 0x00004c51u, 0x0003003eu, 0x00004c39u, 0x00004c53u, 0x000500c6u, 0x00000006u, 0x00004c55u, 0x00004c53u, 0x000002f4u, 0x0003003eu, 0x00004c39u, 0x00004c55u, 0x00080041u, 0x00000778u, 0x00004c58u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004c55u, 0x0004003du, 0x00000011u, 0x00004c59u, 0x00004c58u, 0x00040071u, 0x00000006u, 0x00004c5au, 0x00004c59u, 0x0003003eu, 0x00004c3au, 0x00004c5au, 0x000500c5u, 0x00000006u, 0x00004c5du, 0x00004c55u, 0x00000775u, 0x00080041u, 0x00000778u, 0x00004c5eu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004c5du, 0x0004003du, 0x00000011u, 0x00004c5fu, 0x00004c5eu, 0x00040071u, 0x00000006u, 0x00004c60u, 0x00004c5fu, 0x0003003eu, 0x00004c3bu, 0x00004c60u, 0x000500c2u, 0x00000006u, 0x00004c62u, 0x00004c5au, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004c63u, 0x00004c62u, 0x0004007cu, 0x00000012u, 0x00004c64u, 0x00004c63u, 0x000500c7u, 0x00000006u, 0x00004c66u, 0x00004c5au, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004c67u, 0x00004c66u, 0x0004007cu, 0x00000012u, 0x00004c68u, 0x00004c67u, 0x000500c2u, 0x00000006u, 0x00004c6au, 0x00004c60u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004c6bu, 0x00004c6au, 0x0004007cu, 0x00000012u, 0x00004c6cu, 0x00004c6bu, 0x000500c7u, 0x00000006u, 0x00004c6eu, 0x00004c60u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004c6fu, 0x00004c6eu, 0x0004007cu, 0x00000012u, 0x00004c70u, 0x00004c6fu, 0x00070050u, 0x00000013u, 0x00004c71u, 0x00004c64u, 0x00004c68u, 0x00004c6cu, 0x00004c70u, 0x0003003eu, 0x00004c3cu, 0x00004c71u, 0x0003003eu, 0x00003e9du, 0x00004c71u, 0x00050050u, 0x00000058u, 0x0000414eu, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x0000414fu, 0x0000414eu, 0x0003003eu, 0x00005db0u, 0x00003e62u, 0x0003003eu, 0x00005db1u, 0x00003e64u, 0x0003003eu, 0x00003f10u, 0x000019c4u, 0x0003003eu, 0x00003f11u, 0x0000414fu, 0x00050041u, 0x00000007u, 0x00004c7bu, 0x00003f11u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004c7cu, 0x00004c7bu, 0x00050084u, 0x00000006u, 0x00004c7du, 0x00003e64u, 0x00004c7cu, 0x00050080u, 0x00000006u, 0x00004c7eu, 0x00003e62u, 0x00004c7du, 0x0003003eu, 0x00004c72u, 0x00004c7eu, 0x00050041u, 0x00000007u, 0x00004c7fu, 0x00003f11u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004c80u, 0x00004c7fu, 0x00050084u, 0x00000006u, 0x00004c81u, 0x00004c80u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004c83u, 0x00004c7eu, 0x00004c81u, 0x0003003eu, 0x00004c72u, 0x00004c83u, 0x000500c7u, 0x00000006u, 0x00004c85u, 0x00004c83u, 0x00000744u, 0x0003003eu, 0x00004c72u, 0x00004c85u, 0x000500c2u, 0x00000006u, 0x00004c87u, 0x00004c85u, 0x000001a6u, 0x0003003eu, 0x00004c73u, 0x00004c87u, 0x0004003du, 0x00000006u, 0x00004c89u, 0x00004c7bu, 0x000500c7u, 0x00000006u, 0x00004c8au, 0x00004c89u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004c8bu, 0x00004c8au, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004c8du, 0x00004c87u, 0x00004c8bu, 0x0003003eu, 0x00004c73u, 0x00004c8du, 0x000500c6u, 0x00000006u, 0x00004c8fu, 0x00004c8du, 0x000002f4u, 0x0003003eu, 0x00004c73u, 0x00004c8fu, 0x00080041u, 0x00000778u, 0x00004c92u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004c8fu, 0x0004003du, 0x00000011u, 0x00004c93u, 0x00004c92u, 0x00040071u, 0x00000006u, 0x00004c94u, 0x00004c93u, 0x0003003eu, 0x00004c74u, 0x00004c94u, 0x000500c5u, 0x00000006u, 0x00004c97u, 0x00004c8fu, 0x00000775u, 0x00080041u, 0x00000778u, 0x00004c98u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004c97u, 0x0004003du, 0x00000011u, 0x00004c99u, 0x00004c98u, 0x00040071u, 0x00000006u, 0x00004c9au, 0x00004c99u, 0x0003003eu, 0x00004c75u, 0x00004c9au, 0x000500c2u, 0x00000006u, 0x00004c9cu, 0x00004c94u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004c9du, 0x00004c9cu, 0x0004007cu, 0x00000012u, 0x00004c9eu, 0x00004c9du, 0x000500c7u, 0x00000006u, 0x00004ca0u, 0x00004c94u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004ca1u, 0x00004ca0u, 0x0004007cu, 0x00000012u, 0x00004ca2u, 0x00004ca1u, 0x000500c2u, 0x00000006u, 0x00004ca4u, 0x00004c9au, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004ca5u, 0x00004ca4u, 0x0004007cu, 0x00000012u, 0x00004ca6u, 0x00004ca5u, 0x000500c7u, 0x00000006u, 0x00004ca8u, 0x00004c9au, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004ca9u, 0x00004ca8u, 0x0004007cu, 0x00000012u, 0x00004caau, 0x00004ca9u, 0x00070050u, 0x00000013u, 0x00004cabu, 0x00004c9eu, 0x00004ca2u, 0x00004ca6u, 0x00004caau, 0x0003003eu, 0x00004c76u, 0x00004cabu, 0x0003003eu, 0x00003ea5u, 0x00004cabu, 0x000200f9u, 0x00004143u, 0x000200f8u, 0x00004143u, 0x000700f5u, 0x00000013u, 0x00008f9du, 0x00007705u, 0x000040dcu, 0x00004cabu, 0x00004144u, 0x000700f5u, 0x00000013u, 0x00008dd5u, 0x00007705u, 0x000040dcu, 0x00004c71u, 0x00004144u, 0x000300f7u, 0x00004154u, 0x00000000u, 0x000400fau, 0x00004011u, 0x00004155u, 0x00004154u, 0x000200f8u, 0x00004155u, 0x00050050u, 0x00000058u, 0x00004158u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004159u, 0x00004158u, 0x0003003eu, 0x00005db4u, 0x00003e62u, 0x0003003eu, 0x00005db5u, 0x00003e64u, 0x0003003eu, 0x00003f13u, 0x000019c4u, 0x0003003eu, 0x00003f14u, 0x00004159u, 0x00050041u, 0x00000007u, 0x00004cb5u, 0x00003f14u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004cb6u, 0x00004cb5u, 0x00050084u, 0x00000006u, 0x00004cb7u, 0x00003e64u, 0x00004cb6u, 0x00050080u, 0x00000006u, 0x00004cb8u, 0x00003e62u, 0x00004cb7u, 0x0003003eu, 0x00004cacu, 0x00004cb8u, 0x00050041u, 0x00000007u, 0x00004cb9u, 0x00003f14u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004cbau, 0x00004cb9u, 0x00050084u, 0x00000006u, 0x00004cbbu, 0x00004cbau, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004cbdu, 0x00004cb8u, 0x00004cbbu, 0x0003003eu, 0x00004cacu, 0x00004cbdu, 0x000500c7u, 0x00000006u, 0x00004cbfu, 0x00004cbdu, 0x00000744u, 0x0003003eu, 0x00004cacu, 0x00004cbfu, 0x000500c2u, 0x00000006u, 0x00004cc1u, 0x00004cbfu, 0x000001a6u, 0x0003003eu, 0x00004cadu, 0x00004cc1u, 0x0004003du, 0x00000006u, 0x00004cc3u, 0x00004cb5u, 0x000500c7u, 0x00000006u, 0x00004cc4u, 0x00004cc3u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004cc5u, 0x00004cc4u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004cc7u, 0x00004cc1u, 0x00004cc5u, 0x0003003eu, 0x00004cadu, 0x00004cc7u, 0x000500c6u, 0x00000006u, 0x00004cc9u, 0x00004cc7u, 0x000002f4u, 0x0003003eu, 0x00004cadu, 0x00004cc9u, 0x00080041u, 0x00000778u, 0x00004cccu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004cc9u, 0x0004003du, 0x00000011u, 0x00004ccdu, 0x00004cccu, 0x00040071u, 0x00000006u, 0x00004cceu, 0x00004ccdu, 0x0003003eu, 0x00004caeu, 0x00004cceu, 0x000500c5u, 0x00000006u, 0x00004cd1u, 0x00004cc9u, 0x00000775u, 0x00080041u, 0x00000778u, 0x00004cd2u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004cd1u, 0x0004003du, 0x00000011u, 0x00004cd3u, 0x00004cd2u, 0x00040071u, 0x00000006u, 0x00004cd4u, 0x00004cd3u, 0x0003003eu, 0x00004cafu, 0x00004cd4u, 0x000500c2u, 0x00000006u, 0x00004cd6u, 0x00004cceu, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004cd7u, 0x00004cd6u, 0x0004007cu, 0x00000012u, 0x00004cd8u, 0x00004cd7u, 0x000500c7u, 0x00000006u, 0x00004cdau, 0x00004cceu, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004cdbu, 0x00004cdau, 0x0004007cu, 0x00000012u, 0x00004cdcu, 0x00004cdbu, 0x000500c2u, 0x00000006u, 0x00004cdeu, 0x00004cd4u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00004cdfu, 0x00004cdeu, 0x0004007cu, 0x00000012u, 0x00004ce0u, 0x00004cdfu, 0x000500c7u, 0x00000006u, 0x00004ce2u, 0x00004cd4u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00004ce3u, 0x00004ce2u, 0x0004007cu, 0x00000012u, 0x00004ce4u, 0x00004ce3u, 0x00070050u, 0x00000013u, 0x00004ce5u, 0x00004cd8u, 0x00004cdcu, 0x00004ce0u, 0x00004ce4u, 0x0003003eu, 0x00004cb0u, 0x00004ce5u, 0x0003003eu, 0x00003eadu, 0x00004ce5u, 0x000200f9u, 0x00004154u, 0x000200f8u, 0x00004154u, 0x000700f5u, 0x00000013u, 0x00009081u, 0x00007705u, 0x00004143u, 0x00004ce5u, 0x00004155u, 0x000200f9u, 0x000040d8u, 0x000200f8u, 0x000040dbu, 0x0004007cu, 0x000000abu, 0x0000411eu, 0x0000899au, 0x0003003eu, 0x00005d98u, 0x00003e62u, 0x0003003eu, 0x00005d99u, 0x00003e64u, 0x0003003eu, 0x00003efeu, 0x000019c4u, 0x0003003eu, 0x00003effu, 0x0000411eu, 0x00050041u, 0x00000007u, 0x00004b03u, 0x00003effu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004b04u, 0x00004b03u, 0x00050084u, 0x00000006u, 0x00004b05u, 0x00003e64u, 0x00004b04u, 0x00050080u, 0x00000006u, 0x00004b06u, 0x00003e62u, 0x00004b05u, 0x0003003eu, 0x00004afau, 0x00004b06u, 0x00050041u, 0x00000007u, 0x00004b07u, 0x00003effu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004b08u, 0x00004b07u, 0x00050084u, 0x00000006u, 0x00004b09u, 0x00004b08u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004b0bu, 0x00004b06u, 0x00004b09u, 0x0003003eu, 0x00004afau, 0x00004b0bu, 0x000500c7u, 0x00000006u, 0x00004b0du, 0x00004b0bu, 0x0000068au, 0x0003003eu, 0x00004afau, 0x00004b0du, 0x000500c2u, 0x00000006u, 0x00004b0fu, 0x00004b0du, 0x000001a6u, 0x0003003eu, 0x00004afbu, 0x00004b0fu, 0x0004003du, 0x00000006u, 0x00004b11u, 0x00004b03u, 0x000500c7u, 0x00000006u, 0x00004b12u, 0x00004b11u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004b13u, 0x00004b12u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004b15u, 0x00004b0fu, 0x00004b13u, 0x0003003eu, 0x00004afbu, 0x00004b15u, 0x000500c6u, 0x00000006u, 0x00004b17u, 0x00004b15u, 0x000002f4u, 0x0003003eu, 0x00004afbu, 0x00004b17u, 0x00080041u, 0x00000778u, 0x00004b1au, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004b17u, 0x0004003du, 0x00000011u, 0x00004b1bu, 0x00004b1au, 0x00040071u, 0x00000006u, 0x00004b1cu, 0x00004b1bu, 0x0003003eu, 0x00004afcu, 0x00004b1cu, 0x0003003eu, 0x00004afdu, 0x00004b1cu, 0x00060050u, 0x0000026du, 0x00004b23u, 0x00004b1cu, 0x00004b1cu, 0x00004b1cu, 0x000500c2u, 0x0000026du, 0x00004b24u, 0x00004b23u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004b26u, 0x00004b24u, 0x0000b61fu, 0x0003003eu, 0x00004b1fu, 0x00004b26u, 0x000500c4u, 0x0000026du, 0x00004b29u, 0x00004b26u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004b2cu, 0x00004b26u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004b2du, 0x00004b29u, 0x00004b2cu, 0x0003003eu, 0x00004b1fu, 0x00004b2du, 0x000500c7u, 0x00000006u, 0x00004b2fu, 0x00004b1cu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004b30u, 0x00004b2fu, 0x00000657u, 0x0003003eu, 0x00004b20u, 0x00004b30u, 0x00040071u, 0x0000065bu, 0x00004b32u, 0x00004b2du, 0x0004007cu, 0x0000065au, 0x00004b33u, 0x00004b32u, 0x00040071u, 0x00000011u, 0x00004b35u, 0x00004b30u, 0x0004007cu, 0x00000012u, 0x00004b36u, 0x00004b35u, 0x00050051u, 0x00000012u, 0x00004b37u, 0x00004b33u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004b38u, 0x00004b33u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004b39u, 0x00004b33u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004b3au, 0x00004b37u, 0x00004b38u, 0x00004b39u, 0x00004b36u, 0x0003003eu, 0x00004b21u, 0x00004b3au, 0x0003003eu, 0x00004afeu, 0x00004b3au, 0x0003003eu, 0x00003e95u, 0x00004b3au, 0x000300f7u, 0x00004123u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004124u, 0x00004123u, 0x000200f8u, 0x00004124u, 0x00050050u, 0x00000058u, 0x00004127u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004128u, 0x00004127u, 0x0003003eu, 0x00005d9cu, 0x00003e62u, 0x0003003eu, 0x00005d9du, 0x00003e64u, 0x0003003eu, 0x00003f01u, 0x000019c4u, 0x0003003eu, 0x00003f02u, 0x00004128u, 0x00050041u, 0x00000007u, 0x00004b44u, 0x00003f02u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004b45u, 0x00004b44u, 0x00050084u, 0x00000006u, 0x00004b46u, 0x00003e64u, 0x00004b45u, 0x00050080u, 0x00000006u, 0x00004b47u, 0x00003e62u, 0x00004b46u, 0x0003003eu, 0x00004b3bu, 0x00004b47u, 0x00050041u, 0x00000007u, 0x00004b48u, 0x00003f02u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004b49u, 0x00004b48u, 0x00050084u, 0x00000006u, 0x00004b4au, 0x00004b49u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004b4cu, 0x00004b47u, 0x00004b4au, 0x0003003eu, 0x00004b3bu, 0x00004b4cu, 0x000500c7u, 0x00000006u, 0x00004b4eu, 0x00004b4cu, 0x0000068au, 0x0003003eu, 0x00004b3bu, 0x00004b4eu, 0x000500c2u, 0x00000006u, 0x00004b50u, 0x00004b4eu, 0x000001a6u, 0x0003003eu, 0x00004b3cu, 0x00004b50u, 0x0004003du, 0x00000006u, 0x00004b52u, 0x00004b44u, 0x000500c7u, 0x00000006u, 0x00004b53u, 0x00004b52u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004b54u, 0x00004b53u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004b56u, 0x00004b50u, 0x00004b54u, 0x0003003eu, 0x00004b3cu, 0x00004b56u, 0x000500c6u, 0x00000006u, 0x00004b58u, 0x00004b56u, 0x000002f4u, 0x0003003eu, 0x00004b3cu, 0x00004b58u, 0x00080041u, 0x00000778u, 0x00004b5bu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004b58u, 0x0004003du, 0x00000011u, 0x00004b5cu, 0x00004b5bu, 0x00040071u, 0x00000006u, 0x00004b5du, 0x00004b5cu, 0x0003003eu, 0x00004b3du, 0x00004b5du, 0x0003003eu, 0x00004b3eu, 0x00004b5du, 0x00060050u, 0x0000026du, 0x00004b64u, 0x00004b5du, 0x00004b5du, 0x00004b5du, 0x000500c2u, 0x0000026du, 0x00004b65u, 0x00004b64u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004b67u, 0x00004b65u, 0x0000b61fu, 0x0003003eu, 0x00004b60u, 0x00004b67u, 0x000500c4u, 0x0000026du, 0x00004b6au, 0x00004b67u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004b6du, 0x00004b67u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004b6eu, 0x00004b6au, 0x00004b6du, 0x0003003eu, 0x00004b60u, 0x00004b6eu, 0x000500c7u, 0x00000006u, 0x00004b70u, 0x00004b5du, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004b71u, 0x00004b70u, 0x00000657u, 0x0003003eu, 0x00004b61u, 0x00004b71u, 0x00040071u, 0x0000065bu, 0x00004b73u, 0x00004b6eu, 0x0004007cu, 0x0000065au, 0x00004b74u, 0x00004b73u, 0x00040071u, 0x00000011u, 0x00004b76u, 0x00004b71u, 0x0004007cu, 0x00000012u, 0x00004b77u, 0x00004b76u, 0x00050051u, 0x00000012u, 0x00004b78u, 0x00004b74u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004b79u, 0x00004b74u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004b7au, 0x00004b74u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004b7bu, 0x00004b78u, 0x00004b79u, 0x00004b7au, 0x00004b77u, 0x0003003eu, 0x00004b62u, 0x00004b7bu, 0x0003003eu, 0x00004b3fu, 0x00004b7bu, 0x0003003eu, 0x00003e9du, 0x00004b7bu, 0x00050050u, 0x00000058u, 0x0000412eu, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x0000412fu, 0x0000412eu, 0x0003003eu, 0x00005da0u, 0x00003e62u, 0x0003003eu, 0x00005da1u, 0x00003e64u, 0x0003003eu, 0x00003f04u, 0x000019c4u, 0x0003003eu, 0x00003f05u, 0x0000412fu, 0x00050041u, 0x00000007u, 0x00004b85u, 0x00003f05u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004b86u, 0x00004b85u, 0x00050084u, 0x00000006u, 0x00004b87u, 0x00003e64u, 0x00004b86u, 0x00050080u, 0x00000006u, 0x00004b88u, 0x00003e62u, 0x00004b87u, 0x0003003eu, 0x00004b7cu, 0x00004b88u, 0x00050041u, 0x00000007u, 0x00004b89u, 0x00003f05u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004b8au, 0x00004b89u, 0x00050084u, 0x00000006u, 0x00004b8bu, 0x00004b8au, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004b8du, 0x00004b88u, 0x00004b8bu, 0x0003003eu, 0x00004b7cu, 0x00004b8du, 0x000500c7u, 0x00000006u, 0x00004b8fu, 0x00004b8du, 0x0000068au, 0x0003003eu, 0x00004b7cu, 0x00004b8fu, 0x000500c2u, 0x00000006u, 0x00004b91u, 0x00004b8fu, 0x000001a6u, 0x0003003eu, 0x00004b7du, 0x00004b91u, 0x0004003du, 0x00000006u, 0x00004b93u, 0x00004b85u, 0x000500c7u, 0x00000006u, 0x00004b94u, 0x00004b93u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004b95u, 0x00004b94u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004b97u, 0x00004b91u, 0x00004b95u, 0x0003003eu, 0x00004b7du, 0x00004b97u, 0x000500c6u, 0x00000006u, 0x00004b99u, 0x00004b97u, 0x000002f4u, 0x0003003eu, 0x00004b7du, 0x00004b99u, 0x00080041u, 0x00000778u, 0x00004b9cu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004b99u, 0x0004003du, 0x00000011u, 0x00004b9du, 0x00004b9cu, 0x00040071u, 0x00000006u, 0x00004b9eu, 0x00004b9du, 0x0003003eu, 0x00004b7eu, 0x00004b9eu, 0x0003003eu, 0x00004b7fu, 0x00004b9eu, 0x00060050u, 0x0000026du, 0x00004ba5u, 0x00004b9eu, 0x00004b9eu, 0x00004b9eu, 0x000500c2u, 0x0000026du, 0x00004ba6u, 0x00004ba5u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004ba8u, 0x00004ba6u, 0x0000b61fu, 0x0003003eu, 0x00004ba1u, 0x00004ba8u, 0x000500c4u, 0x0000026du, 0x00004babu, 0x00004ba8u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004baeu, 0x00004ba8u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004bafu, 0x00004babu, 0x00004baeu, 0x0003003eu, 0x00004ba1u, 0x00004bafu, 0x000500c7u, 0x00000006u, 0x00004bb1u, 0x00004b9eu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004bb2u, 0x00004bb1u, 0x00000657u, 0x0003003eu, 0x00004ba2u, 0x00004bb2u, 0x00040071u, 0x0000065bu, 0x00004bb4u, 0x00004bafu, 0x0004007cu, 0x0000065au, 0x00004bb5u, 0x00004bb4u, 0x00040071u, 0x00000011u, 0x00004bb7u, 0x00004bb2u, 0x0004007cu, 0x00000012u, 0x00004bb8u, 0x00004bb7u, 0x00050051u, 0x00000012u, 0x00004bb9u, 0x00004bb5u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004bbau, 0x00004bb5u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004bbbu, 0x00004bb5u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004bbcu, 0x00004bb9u, 0x00004bbau, 0x00004bbbu, 0x00004bb8u, 0x0003003eu, 0x00004ba3u, 0x00004bbcu, 0x0003003eu, 0x00004b80u, 0x00004bbcu, 0x0003003eu, 0x00003ea5u, 0x00004bbcu, 0x000200f9u, 0x00004123u, 0x000200f8u, 0x00004123u, 0x000700f5u, 0x00000013u, 0x00008f9bu, 0x00007705u, 0x000040dbu, 0x00004bbcu, 0x00004124u, 0x000700f5u, 0x00000013u, 0x00008dd3u, 0x00007705u, 0x000040dbu, 0x00004b7bu, 0x00004124u, 0x000300f7u, 0x00004134u, 0x00000000u, 0x000400fau, 0x00004011u, 0x00004135u, 0x00004134u, 0x000200f8u, 0x00004135u, 0x00050050u, 0x00000058u, 0x00004138u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004139u, 0x00004138u, 0x0003003eu, 0x00005da4u, 0x00003e62u, 0x0003003eu, 0x00005da5u, 0x00003e64u, 0x0003003eu, 0x00003f07u, 0x000019c4u, 0x0003003eu, 0x00003f08u, 0x00004139u, 0x00050041u, 0x00000007u, 0x00004bc6u, 0x00003f08u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004bc7u, 0x00004bc6u, 0x00050084u, 0x00000006u, 0x00004bc8u, 0x00003e64u, 0x00004bc7u, 0x00050080u, 0x00000006u, 0x00004bc9u, 0x00003e62u, 0x00004bc8u, 0x0003003eu, 0x00004bbdu, 0x00004bc9u, 0x00050041u, 0x00000007u, 0x00004bcau, 0x00003f08u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004bcbu, 0x00004bcau, 0x00050084u, 0x00000006u, 0x00004bccu, 0x00004bcbu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004bceu, 0x00004bc9u, 0x00004bccu, 0x0003003eu, 0x00004bbdu, 0x00004bceu, 0x000500c7u, 0x00000006u, 0x00004bd0u, 0x00004bceu, 0x0000068au, 0x0003003eu, 0x00004bbdu, 0x00004bd0u, 0x000500c2u, 0x00000006u, 0x00004bd2u, 0x00004bd0u, 0x000001a6u, 0x0003003eu, 0x00004bbeu, 0x00004bd2u, 0x0004003du, 0x00000006u, 0x00004bd4u, 0x00004bc6u, 0x000500c7u, 0x00000006u, 0x00004bd5u, 0x00004bd4u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004bd6u, 0x00004bd5u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004bd8u, 0x00004bd2u, 0x00004bd6u, 0x0003003eu, 0x00004bbeu, 0x00004bd8u, 0x000500c6u, 0x00000006u, 0x00004bdau, 0x00004bd8u, 0x000002f4u, 0x0003003eu, 0x00004bbeu, 0x00004bdau, 0x00080041u, 0x00000778u, 0x00004bddu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004bdau, 0x0004003du, 0x00000011u, 0x00004bdeu, 0x00004bddu, 0x00040071u, 0x00000006u, 0x00004bdfu, 0x00004bdeu, 0x0003003eu, 0x00004bbfu, 0x00004bdfu, 0x0003003eu, 0x00004bc0u, 0x00004bdfu, 0x00060050u, 0x0000026du, 0x00004be6u, 0x00004bdfu, 0x00004bdfu, 0x00004bdfu, 0x000500c2u, 0x0000026du, 0x00004be7u, 0x00004be6u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004be9u, 0x00004be7u, 0x0000b61fu, 0x0003003eu, 0x00004be2u, 0x00004be9u, 0x000500c4u, 0x0000026du, 0x00004becu, 0x00004be9u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004befu, 0x00004be9u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004bf0u, 0x00004becu, 0x00004befu, 0x0003003eu, 0x00004be2u, 0x00004bf0u, 0x000500c7u, 0x00000006u, 0x00004bf2u, 0x00004bdfu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004bf3u, 0x00004bf2u, 0x00000657u, 0x0003003eu, 0x00004be3u, 0x00004bf3u, 0x00040071u, 0x0000065bu, 0x00004bf5u, 0x00004bf0u, 0x0004007cu, 0x0000065au, 0x00004bf6u, 0x00004bf5u, 0x00040071u, 0x00000011u, 0x00004bf8u, 0x00004bf3u, 0x0004007cu, 0x00000012u, 0x00004bf9u, 0x00004bf8u, 0x00050051u, 0x00000012u, 0x00004bfau, 0x00004bf6u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004bfbu, 0x00004bf6u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004bfcu, 0x00004bf6u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004bfdu, 0x00004bfau, 0x00004bfbu, 0x00004bfcu, 0x00004bf9u, 0x0003003eu, 0x00004be4u, 0x00004bfdu, 0x0003003eu, 0x00004bc1u, 0x00004bfdu, 0x0003003eu, 0x00003eadu, 0x00004bfdu, 0x000200f9u, 0x00004134u, 0x000200f8u, 0x00004134u, 0x000700f5u, 0x00000013u, 0x0000907fu, 0x00007705u, 0x00004123u, 0x00004bfdu, 0x00004135u, 0x000200f9u, 0x000040d8u, 0x000200f8u, 0x000040dau, 0x0004007cu, 0x000000abu, 0x000040feu, 0x0000899au, 0x0003003eu, 0x00005d88u, 0x00003e62u, 0x0003003eu, 0x00005d89u, 0x00003e64u, 0x0003003eu, 0x00003ef2u, 0x000019c4u, 0x0003003eu, 0x00003ef3u, 0x000040feu, 0x00050041u, 0x00000007u, 0x00004a72u, 0x00003ef3u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004a73u, 0x00004a72u, 0x00050084u, 0x00000006u, 0x00004a74u, 0x00003e64u, 0x00004a73u, 0x00050080u, 0x00000006u, 0x00004a75u, 0x00003e62u, 0x00004a74u, 0x0003003eu, 0x00004a6au, 0x00004a75u, 0x00050041u, 0x00000007u, 0x00004a76u, 0x00003ef3u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004a77u, 0x00004a76u, 0x00050080u, 0x00000006u, 0x00004a79u, 0x00004a75u, 0x00004a77u, 0x0003003eu, 0x00004a6au, 0x00004a79u, 0x000500c7u, 0x00000006u, 0x00004a7bu, 0x00004a79u, 0x0000068au, 0x0003003eu, 0x00004a6au, 0x00004a7bu, 0x0003003eu, 0x00004a6bu, 0x00004a7bu, 0x0004003du, 0x00000006u, 0x00004a7eu, 0x00004a72u, 0x000500c7u, 0x00000006u, 0x00004a7fu, 0x00004a7eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004a80u, 0x00004a7fu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004a82u, 0x00004a7bu, 0x00004a80u, 0x0003003eu, 0x00004a6bu, 0x00004a82u, 0x000500c6u, 0x00000006u, 0x00004a84u, 0x00004a82u, 0x000002fbu, 0x0003003eu, 0x00004a6bu, 0x00004a84u, 0x00080041u, 0x000006a8u, 0x00004a87u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004a84u, 0x0004003du, 0x0000000fu, 0x00004a88u, 0x00004a87u, 0x00040071u, 0x00000006u, 0x00004a89u, 0x00004a88u, 0x0003003eu, 0x00004a6cu, 0x00004a89u, 0x00040071u, 0x00000011u, 0x00004a8bu, 0x00004a89u, 0x0004007cu, 0x00000012u, 0x00004a8cu, 0x00004a8bu, 0x00070050u, 0x00000013u, 0x00004a8du, 0x00004a8cu, 0x00004a8cu, 0x00004a8cu, 0x00004a8cu, 0x0003003eu, 0x00004a6du, 0x00004a8du, 0x0003003eu, 0x00003e95u, 0x00004a8du, 0x000300f7u, 0x00004103u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004104u, 0x00004103u, 0x000200f8u, 0x00004104u, 0x00050050u, 0x00000058u, 0x00004107u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x00004108u, 0x00004107u, 0x0003003eu, 0x00005d8cu, 0x00003e62u, 0x0003003eu, 0x00005d8du, 0x00003e64u, 0x0003003eu, 0x00003ef5u, 0x000019c4u, 0x0003003eu, 0x00003ef6u, 0x00004108u, 0x00050041u, 0x00000007u, 0x00004a96u, 0x00003ef6u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004a97u, 0x00004a96u, 0x00050084u, 0x00000006u, 0x00004a98u, 0x00003e64u, 0x00004a97u, 0x00050080u, 0x00000006u, 0x00004a99u, 0x00003e62u, 0x00004a98u, 0x0003003eu, 0x00004a8eu, 0x00004a99u, 0x00050041u, 0x00000007u, 0x00004a9au, 0x00003ef6u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004a9bu, 0x00004a9au, 0x00050080u, 0x00000006u, 0x00004a9du, 0x00004a99u, 0x00004a9bu, 0x0003003eu, 0x00004a8eu, 0x00004a9du, 0x000500c7u, 0x00000006u, 0x00004a9fu, 0x00004a9du, 0x0000068au, 0x0003003eu, 0x00004a8eu, 0x00004a9fu, 0x0003003eu, 0x00004a8fu, 0x00004a9fu, 0x0004003du, 0x00000006u, 0x00004aa2u, 0x00004a96u, 0x000500c7u, 0x00000006u, 0x00004aa3u, 0x00004aa2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004aa4u, 0x00004aa3u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004aa6u, 0x00004a9fu, 0x00004aa4u, 0x0003003eu, 0x00004a8fu, 0x00004aa6u, 0x000500c6u, 0x00000006u, 0x00004aa8u, 0x00004aa6u, 0x000002fbu, 0x0003003eu, 0x00004a8fu, 0x00004aa8u, 0x00080041u, 0x000006a8u, 0x00004aabu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004aa8u, 0x0004003du, 0x0000000fu, 0x00004aacu, 0x00004aabu, 0x00040071u, 0x00000006u, 0x00004aadu, 0x00004aacu, 0x0003003eu, 0x00004a90u, 0x00004aadu, 0x00040071u, 0x00000011u, 0x00004aafu, 0x00004aadu, 0x0004007cu, 0x00000012u, 0x00004ab0u, 0x00004aafu, 0x00070050u, 0x00000013u, 0x00004ab1u, 0x00004ab0u, 0x00004ab0u, 0x00004ab0u, 0x00004ab0u, 0x0003003eu, 0x00004a91u, 0x00004ab1u, 0x0003003eu, 0x00003e9du, 0x00004ab1u, 0x00050050u, 0x00000058u, 0x0000410eu, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x0000410fu, 0x0000410eu, 0x0003003eu, 0x00005d90u, 0x00003e62u, 0x0003003eu, 0x00005d91u, 0x00003e64u, 0x0003003eu, 0x00003ef8u, 0x000019c4u, 0x0003003eu, 0x00003ef9u, 0x0000410fu, 0x00050041u, 0x00000007u, 0x00004abau, 0x00003ef9u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004abbu, 0x00004abau, 0x00050084u, 0x00000006u, 0x00004abcu, 0x00003e64u, 0x00004abbu, 0x00050080u, 0x00000006u, 0x00004abdu, 0x00003e62u, 0x00004abcu, 0x0003003eu, 0x00004ab2u, 0x00004abdu, 0x00050041u, 0x00000007u, 0x00004abeu, 0x00003ef9u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004abfu, 0x00004abeu, 0x00050080u, 0x00000006u, 0x00004ac1u, 0x00004abdu, 0x00004abfu, 0x0003003eu, 0x00004ab2u, 0x00004ac1u, 0x000500c7u, 0x00000006u, 0x00004ac3u, 0x00004ac1u, 0x0000068au, 0x0003003eu, 0x00004ab2u, 0x00004ac3u, 0x0003003eu, 0x00004ab3u, 0x00004ac3u, 0x0004003du, 0x00000006u, 0x00004ac6u, 0x00004abau, 0x000500c7u, 0x00000006u, 0x00004ac7u, 0x00004ac6u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004ac8u, 0x00004ac7u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004acau, 0x00004ac3u, 0x00004ac8u, 0x0003003eu, 0x00004ab3u, 0x00004acau, 0x000500c6u, 0x00000006u, 0x00004accu, 0x00004acau, 0x000002fbu, 0x0003003eu, 0x00004ab3u, 0x00004accu, 0x00080041u, 0x000006a8u, 0x00004acfu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004accu, 0x0004003du, 0x0000000fu, 0x00004ad0u, 0x00004acfu, 0x00040071u, 0x00000006u, 0x00004ad1u, 0x00004ad0u, 0x0003003eu, 0x00004ab4u, 0x00004ad1u, 0x00040071u, 0x00000011u, 0x00004ad3u, 0x00004ad1u, 0x0004007cu, 0x00000012u, 0x00004ad4u, 0x00004ad3u, 0x00070050u, 0x00000013u, 0x00004ad5u, 0x00004ad4u, 0x00004ad4u, 0x00004ad4u, 0x00004ad4u, 0x0003003eu, 0x00004ab5u, 0x00004ad5u, 0x0003003eu, 0x00003ea5u, 0x00004ad5u, 0x000200f9u, 0x00004103u, 0x000200f8u, 0x00004103u, 0x000700f5u, 0x00000013u, 0x00008f99u, 0x00007705u, 0x000040dau, 0x00004ad5u, 0x00004104u, 0x000700f5u, 0x00000013u, 0x00008dd1u, 0x00007705u, 0x000040dau, 0x00004ab1u, 0x00004104u, 0x000300f7u, 0x00004114u, 0x00000000u, 0x000400fau, 0x00004011u, 0x00004115u, 0x00004114u, 0x000200f8u, 0x00004115u, 0x00050050u, 0x00000058u, 0x00004118u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004119u, 0x00004118u, 0x0003003eu, 0x00005d94u, 0x00003e62u, 0x0003003eu, 0x00005d95u, 0x00003e64u, 0x0003003eu, 0x00003efbu, 0x000019c4u, 0x0003003eu, 0x00003efcu, 0x00004119u, 0x00050041u, 0x00000007u, 0x00004adeu, 0x00003efcu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004adfu, 0x00004adeu, 0x00050084u, 0x00000006u, 0x00004ae0u, 0x00003e64u, 0x00004adfu, 0x00050080u, 0x00000006u, 0x00004ae1u, 0x00003e62u, 0x00004ae0u, 0x0003003eu, 0x00004ad6u, 0x00004ae1u, 0x00050041u, 0x00000007u, 0x00004ae2u, 0x00003efcu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004ae3u, 0x00004ae2u, 0x00050080u, 0x00000006u, 0x00004ae5u, 0x00004ae1u, 0x00004ae3u, 0x0003003eu, 0x00004ad6u, 0x00004ae5u, 0x000500c7u, 0x00000006u, 0x00004ae7u, 0x00004ae5u, 0x0000068au, 0x0003003eu, 0x00004ad6u, 0x00004ae7u, 0x0003003eu, 0x00004ad7u, 0x00004ae7u, 0x0004003du, 0x00000006u, 0x00004aeau, 0x00004adeu, 0x000500c7u, 0x00000006u, 0x00004aebu, 0x00004aeau, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004aecu, 0x00004aebu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004aeeu, 0x00004ae7u, 0x00004aecu, 0x0003003eu, 0x00004ad7u, 0x00004aeeu, 0x000500c6u, 0x00000006u, 0x00004af0u, 0x00004aeeu, 0x000002fbu, 0x0003003eu, 0x00004ad7u, 0x00004af0u, 0x00080041u, 0x000006a8u, 0x00004af3u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004af0u, 0x0004003du, 0x0000000fu, 0x00004af4u, 0x00004af3u, 0x00040071u, 0x00000006u, 0x00004af5u, 0x00004af4u, 0x0003003eu, 0x00004ad8u, 0x00004af5u, 0x00040071u, 0x00000011u, 0x00004af7u, 0x00004af5u, 0x0004007cu, 0x00000012u, 0x00004af8u, 0x00004af7u, 0x00070050u, 0x00000013u, 0x00004af9u, 0x00004af8u, 0x00004af8u, 0x00004af8u, 0x00004af8u, 0x0003003eu, 0x00004ad9u, 0x00004af9u, 0x0003003eu, 0x00003eadu, 0x00004af9u, 0x000200f9u, 0x00004114u, 0x000200f8u, 0x00004114u, 0x000700f5u, 0x00000013u, 0x0000907du, 0x00007705u, 0x00004103u, 0x00004af9u, 0x00004115u, 0x000200f9u, 0x000040d8u, 0x000200f8u, 0x000040d9u, 0x0004007cu, 0x000000abu, 0x000040deu, 0x0000899au, 0x0003003eu, 0x00005d78u, 0x00003e62u, 0x0003003eu, 0x00005d79u, 0x00003e64u, 0x0003003eu, 0x00003ee6u, 0x000019c4u, 0x0003003eu, 0x00003ee7u, 0x000040deu, 0x00050041u, 0x00000007u, 0x000049a7u, 0x00003ee7u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000049a8u, 0x000049a7u, 0x00050084u, 0x00000006u, 0x000049a9u, 0x00003e64u, 0x000049a8u, 0x00050080u, 0x00000006u, 0x000049aau, 0x00003e62u, 0x000049a9u, 0x0003003eu, 0x0000499eu, 0x000049aau, 0x00050041u, 0x00000007u, 0x000049abu, 0x00003ee7u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000049acu, 0x000049abu, 0x000500c2u, 0x00000006u, 0x000049adu, 0x000049acu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000049afu, 0x000049aau, 0x000049adu, 0x0003003eu, 0x0000499eu, 0x000049afu, 0x000500c7u, 0x00000006u, 0x000049b1u, 0x000049afu, 0x0000068au, 0x0003003eu, 0x0000499eu, 0x000049b1u, 0x0004003du, 0x00000006u, 0x000049b3u, 0x000049abu, 0x000400c8u, 0x00000006u, 0x000049b4u, 0x000049b3u, 0x000500c7u, 0x00000006u, 0x000049b5u, 0x000049b4u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000049b6u, 0x000049b5u, 0x00000692u, 0x0003003eu, 0x0000499fu, 0x000049b6u, 0x0003003eu, 0x000049a0u, 0x000049b1u, 0x0004003du, 0x00000006u, 0x000049b9u, 0x000049a7u, 0x000500c7u, 0x00000006u, 0x000049bau, 0x000049b9u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000049bbu, 0x000049bau, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000049bdu, 0x000049b1u, 0x000049bbu, 0x0003003eu, 0x000049a0u, 0x000049bdu, 0x000500c6u, 0x00000006u, 0x000049bfu, 0x000049bdu, 0x000002fbu, 0x0003003eu, 0x000049a0u, 0x000049bfu, 0x00080041u, 0x000006a8u, 0x000049c2u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000049bfu, 0x0004003du, 0x0000000fu, 0x000049c3u, 0x000049c2u, 0x00040071u, 0x00000006u, 0x000049c4u, 0x000049c3u, 0x0003003eu, 0x000049a1u, 0x000049c4u, 0x000500c2u, 0x00000006u, 0x000049c7u, 0x000049c4u, 0x000049b6u, 0x000500c7u, 0x00000006u, 0x000049c8u, 0x000049c7u, 0x000006afu, 0x0003003eu, 0x000049a1u, 0x000049c8u, 0x000500c4u, 0x00000006u, 0x000049cau, 0x000049c8u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000049ccu, 0x000049c8u, 0x000049cau, 0x0003003eu, 0x000049a1u, 0x000049ccu, 0x00040071u, 0x00000011u, 0x000049ceu, 0x000049ccu, 0x0004007cu, 0x00000012u, 0x000049cfu, 0x000049ceu, 0x00070050u, 0x00000013u, 0x000049d0u, 0x000049cfu, 0x000049cfu, 0x000049cfu, 0x000049cfu, 0x0003003eu, 0x000049a2u, 0x000049d0u, 0x0003003eu, 0x00003e95u, 0x000049d0u, 0x000300f7u, 0x000040e3u, 0x00000000u, 0x000400fau, 0x000019edu, 0x000040e4u, 0x000040e3u, 0x000200f8u, 0x000040e4u, 0x00050050u, 0x00000058u, 0x000040e7u, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x000040e8u, 0x000040e7u, 0x0003003eu, 0x00005d7cu, 0x00003e62u, 0x0003003eu, 0x00005d7du, 0x00003e64u, 0x0003003eu, 0x00003ee9u, 0x000019c4u, 0x0003003eu, 0x00003eeau, 0x000040e8u, 0x00050041u, 0x00000007u, 0x000049dau, 0x00003eeau, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000049dbu, 0x000049dau, 0x00050084u, 0x00000006u, 0x000049dcu, 0x00003e64u, 0x000049dbu, 0x00050080u, 0x00000006u, 0x000049ddu, 0x00003e62u, 0x000049dcu, 0x0003003eu, 0x000049d1u, 0x000049ddu, 0x00050041u, 0x00000007u, 0x000049deu, 0x00003eeau, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000049dfu, 0x000049deu, 0x000500c2u, 0x00000006u, 0x000049e0u, 0x000049dfu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000049e2u, 0x000049ddu, 0x000049e0u, 0x0003003eu, 0x000049d1u, 0x000049e2u, 0x000500c7u, 0x00000006u, 0x000049e4u, 0x000049e2u, 0x0000068au, 0x0003003eu, 0x000049d1u, 0x000049e4u, 0x0004003du, 0x00000006u, 0x000049e6u, 0x000049deu, 0x000400c8u, 0x00000006u, 0x000049e7u, 0x000049e6u, 0x000500c7u, 0x00000006u, 0x000049e8u, 0x000049e7u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000049e9u, 0x000049e8u, 0x00000692u, 0x0003003eu, 0x000049d2u, 0x000049e9u, 0x0003003eu, 0x000049d3u, 0x000049e4u, 0x0004003du, 0x00000006u, 0x000049ecu, 0x000049dau, 0x000500c7u, 0x00000006u, 0x000049edu, 0x000049ecu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000049eeu, 0x000049edu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000049f0u, 0x000049e4u, 0x000049eeu, 0x0003003eu, 0x000049d3u, 0x000049f0u, 0x000500c6u, 0x00000006u, 0x000049f2u, 0x000049f0u, 0x000002fbu, 0x0003003eu, 0x000049d3u, 0x000049f2u, 0x00080041u, 0x000006a8u, 0x000049f5u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000049f2u, 0x0004003du, 0x0000000fu, 0x000049f6u, 0x000049f5u, 0x00040071u, 0x00000006u, 0x000049f7u, 0x000049f6u, 0x0003003eu, 0x000049d4u, 0x000049f7u, 0x000500c2u, 0x00000006u, 0x000049fau, 0x000049f7u, 0x000049e9u, 0x000500c7u, 0x00000006u, 0x000049fbu, 0x000049fau, 0x000006afu, 0x0003003eu, 0x000049d4u, 0x000049fbu, 0x000500c4u, 0x00000006u, 0x000049fdu, 0x000049fbu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000049ffu, 0x000049fbu, 0x000049fdu, 0x0003003eu, 0x000049d4u, 0x000049ffu, 0x00040071u, 0x00000011u, 0x00004a01u, 0x000049ffu, 0x0004007cu, 0x00000012u, 0x00004a02u, 0x00004a01u, 0x00070050u, 0x00000013u, 0x00004a03u, 0x00004a02u, 0x00004a02u, 0x00004a02u, 0x00004a02u, 0x0003003eu, 0x000049d5u, 0x00004a03u, 0x0003003eu, 0x00003e9du, 0x00004a03u, 0x00050050u, 0x00000058u, 0x000040eeu, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000040efu, 0x000040eeu, 0x0003003eu, 0x00005d80u, 0x00003e62u, 0x0003003eu, 0x00005d81u, 0x00003e64u, 0x0003003eu, 0x00003eecu, 0x000019c4u, 0x0003003eu, 0x00003eedu, 0x000040efu, 0x00050041u, 0x00000007u, 0x00004a0du, 0x00003eedu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004a0eu, 0x00004a0du, 0x00050084u, 0x00000006u, 0x00004a0fu, 0x00003e64u, 0x00004a0eu, 0x00050080u, 0x00000006u, 0x00004a10u, 0x00003e62u, 0x00004a0fu, 0x0003003eu, 0x00004a04u, 0x00004a10u, 0x00050041u, 0x00000007u, 0x00004a11u, 0x00003eedu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004a12u, 0x00004a11u, 0x000500c2u, 0x00000006u, 0x00004a13u, 0x00004a12u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004a15u, 0x00004a10u, 0x00004a13u, 0x0003003eu, 0x00004a04u, 0x00004a15u, 0x000500c7u, 0x00000006u, 0x00004a17u, 0x00004a15u, 0x0000068au, 0x0003003eu, 0x00004a04u, 0x00004a17u, 0x0004003du, 0x00000006u, 0x00004a19u, 0x00004a11u, 0x000400c8u, 0x00000006u, 0x00004a1au, 0x00004a19u, 0x000500c7u, 0x00000006u, 0x00004a1bu, 0x00004a1au, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004a1cu, 0x00004a1bu, 0x00000692u, 0x0003003eu, 0x00004a05u, 0x00004a1cu, 0x0003003eu, 0x00004a06u, 0x00004a17u, 0x0004003du, 0x00000006u, 0x00004a1fu, 0x00004a0du, 0x000500c7u, 0x00000006u, 0x00004a20u, 0x00004a1fu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004a21u, 0x00004a20u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004a23u, 0x00004a17u, 0x00004a21u, 0x0003003eu, 0x00004a06u, 0x00004a23u, 0x000500c6u, 0x00000006u, 0x00004a25u, 0x00004a23u, 0x000002fbu, 0x0003003eu, 0x00004a06u, 0x00004a25u, 0x00080041u, 0x000006a8u, 0x00004a28u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004a25u, 0x0004003du, 0x0000000fu, 0x00004a29u, 0x00004a28u, 0x00040071u, 0x00000006u, 0x00004a2au, 0x00004a29u, 0x0003003eu, 0x00004a07u, 0x00004a2au, 0x000500c2u, 0x00000006u, 0x00004a2du, 0x00004a2au, 0x00004a1cu, 0x000500c7u, 0x00000006u, 0x00004a2eu, 0x00004a2du, 0x000006afu, 0x0003003eu, 0x00004a07u, 0x00004a2eu, 0x000500c4u, 0x00000006u, 0x00004a30u, 0x00004a2eu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00004a32u, 0x00004a2eu, 0x00004a30u, 0x0003003eu, 0x00004a07u, 0x00004a32u, 0x00040071u, 0x00000011u, 0x00004a34u, 0x00004a32u, 0x0004007cu, 0x00000012u, 0x00004a35u, 0x00004a34u, 0x00070050u, 0x00000013u, 0x00004a36u, 0x00004a35u, 0x00004a35u, 0x00004a35u, 0x00004a35u, 0x0003003eu, 0x00004a08u, 0x00004a36u, 0x0003003eu, 0x00003ea5u, 0x00004a36u, 0x000200f9u, 0x000040e3u, 0x000200f8u, 0x000040e3u, 0x000700f5u, 0x00000013u, 0x00008f97u, 0x00007705u, 0x000040d9u, 0x00004a36u, 0x000040e4u, 0x000700f5u, 0x00000013u, 0x00008dcfu, 0x00007705u, 0x000040d9u, 0x00004a03u, 0x000040e4u, 0x000300f7u, 0x000040f4u, 0x00000000u, 0x000400fau, 0x00004011u, 0x000040f5u, 0x000040f4u, 0x000200f8u, 0x000040f5u, 0x00050050u, 0x00000058u, 0x000040f8u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000040f9u, 0x000040f8u, 0x0003003eu, 0x00005d84u, 0x00003e62u, 0x0003003eu, 0x00005d85u, 0x00003e64u, 0x0003003eu, 0x00003eefu, 0x000019c4u, 0x0003003eu, 0x00003ef0u, 0x000040f9u, 0x00050041u, 0x00000007u, 0x00004a40u, 0x00003ef0u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004a41u, 0x00004a40u, 0x00050084u, 0x00000006u, 0x00004a42u, 0x00003e64u, 0x00004a41u, 0x00050080u, 0x00000006u, 0x00004a43u, 0x00003e62u, 0x00004a42u, 0x0003003eu, 0x00004a37u, 0x00004a43u, 0x00050041u, 0x00000007u, 0x00004a44u, 0x00003ef0u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004a45u, 0x00004a44u, 0x000500c2u, 0x00000006u, 0x00004a46u, 0x00004a45u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004a48u, 0x00004a43u, 0x00004a46u, 0x0003003eu, 0x00004a37u, 0x00004a48u, 0x000500c7u, 0x00000006u, 0x00004a4au, 0x00004a48u, 0x0000068au, 0x0003003eu, 0x00004a37u, 0x00004a4au, 0x0004003du, 0x00000006u, 0x00004a4cu, 0x00004a44u, 0x000400c8u, 0x00000006u, 0x00004a4du, 0x00004a4cu, 0x000500c7u, 0x00000006u, 0x00004a4eu, 0x00004a4du, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004a4fu, 0x00004a4eu, 0x00000692u, 0x0003003eu, 0x00004a38u, 0x00004a4fu, 0x0003003eu, 0x00004a39u, 0x00004a4au, 0x0004003du, 0x00000006u, 0x00004a52u, 0x00004a40u, 0x000500c7u, 0x00000006u, 0x00004a53u, 0x00004a52u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004a54u, 0x00004a53u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004a56u, 0x00004a4au, 0x00004a54u, 0x0003003eu, 0x00004a39u, 0x00004a56u, 0x000500c6u, 0x00000006u, 0x00004a58u, 0x00004a56u, 0x000002fbu, 0x0003003eu, 0x00004a39u, 0x00004a58u, 0x00080041u, 0x000006a8u, 0x00004a5bu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004a58u, 0x0004003du, 0x0000000fu, 0x00004a5cu, 0x00004a5bu, 0x00040071u, 0x00000006u, 0x00004a5du, 0x00004a5cu, 0x0003003eu, 0x00004a3au, 0x00004a5du, 0x000500c2u, 0x00000006u, 0x00004a60u, 0x00004a5du, 0x00004a4fu, 0x000500c7u, 0x00000006u, 0x00004a61u, 0x00004a60u, 0x000006afu, 0x0003003eu, 0x00004a3au, 0x00004a61u, 0x000500c4u, 0x00000006u, 0x00004a63u, 0x00004a61u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00004a65u, 0x00004a61u, 0x00004a63u, 0x0003003eu, 0x00004a3au, 0x00004a65u, 0x00040071u, 0x00000011u, 0x00004a67u, 0x00004a65u, 0x0004007cu, 0x00000012u, 0x00004a68u, 0x00004a67u, 0x00070050u, 0x00000013u, 0x00004a69u, 0x00004a68u, 0x00004a68u, 0x00004a68u, 0x00004a68u, 0x0003003eu, 0x00004a3bu, 0x00004a69u, 0x0003003eu, 0x00003eadu, 0x00004a69u, 0x000200f9u, 0x000040f4u, 0x000200f8u, 0x000040f4u, 0x000700f5u, 0x00000013u, 0x0000907bu, 0x00007705u, 0x000040e3u, 0x00004a69u, 0x000040f5u, 0x000200f9u, 0x000040d8u, 0x000200f8u, 0x000040d8u, 0x000d00f5u, 0x00000013u, 0x0000907au, 0x00007705u, 0x000040cfu, 0x0000907bu, 0x000040f4u, 0x0000907du, 0x00004114u, 0x0000907fu, 0x00004134u, 0x00009081u, 0x00004154u, 0x000d00f5u, 0x00000013u, 0x00008f95u, 0x00007705u, 0x000040cfu, 0x00008f97u, 0x000040f4u, 0x00008f99u, 0x00004114u, 0x00008f9bu, 0x00004134u, 0x00008f9du, 0x00004154u, 0x000d00f5u, 0x00000013u, 0x00008eb2u, 0x00007705u, 0x000040cfu, 0x000049d0u, 0x000040f4u, 0x00004a8du, 0x00004114u, 0x00004b3au, 0x00004134u, 0x00004c37u, 0x00004154u, 0x000d00f5u, 0x00000013u, 0x00008dcdu, 0x00007705u, 0x000040cfu, 0x00008dcfu, 0x000040f4u, 0x00008dd1u, 0x00004114u, 0x00008dd3u, 0x00004134u, 0x00008dd5u, 0x00004154u, 0x000200f9u, 0x000040ceu, 0x000200f8u, 0x000040ceu, 0x000f00f5u, 0x00000013u, 0x00009079u, 0x00007705u, 0x00004029u, 0x0000907au, 0x000040d8u, 0x00009083u, 0x00004170u, 0x00009084u, 0x0000418eu, 0x0000908bu, 0x00004202u, 0x00009094u, 0x0000428bu, 0x000f00f5u, 0x00000013u, 0x00008f94u, 0x00007705u, 0x00004029u, 0x00008f95u, 0x000040d8u, 0x00008f9eu, 0x00004170u, 0x00008f9fu, 0x0000418eu, 0x00008fa6u, 0x00004202u, 0x00008fafu, 0x0000428bu, 0x000f00f5u, 0x00000013u, 0x00008eb1u, 0x00007705u, 0x00004029u, 0x00008eb2u, 0x000040d8u, 0x00004d36u, 0x00004170u, 0x00008ebcu, 0x0000418eu, 0x00008ec3u, 0x00004202u, 0x00008eccu, 0x0000428bu, 0x000f00f5u, 0x00000013u, 0x00008dccu, 0x00007705u, 0x00004029u, 0x00008dcdu, 0x000040d8u, 0x00008dd6u, 0x00004170u, 0x00008dd7u, 0x0000418eu, 0x00008ddeu, 0x00004202u, 0x00008de7u, 0x0000428bu, 0x000200f9u, 0x00004027u, 0x000200f8u, 0x00004028u, 0x000300f7u, 0x0000402eu, 0x00000000u, 0x000b00fbu, 0x00004018u, 0x0000402eu, 0x00000000u, 0x0000402fu, 0x00000002u, 0x0000402fu, 0x00000003u, 0x0000402fu, 0x00000004u, 0x0000402fu, 0x000200f8u, 0x0000402fu, 0x0003003eu, 0x00003e93u, 0x0000401bu, 0x000600a9u, 0x00000008u, 0x00004033u, 0x0000401bu, 0x000001a9u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x00004034u, 0x00004033u, 0x0003003eu, 0x00003e94u, 0x00004034u, 0x00040071u, 0x00000006u, 0x00004037u, 0x0000b64au, 0x0004007cu, 0x00000008u, 0x00004038u, 0x00004037u, 0x000300f7u, 0x00004039u, 0x00000000u, 0x000700fbu, 0x00004038u, 0x0000403au, 0x00000000u, 0x0000403bu, 0x00000001u, 0x0000403cu, 0x000200f8u, 0x0000403cu, 0x0004007cu, 0x000000abu, 0x000040a0u, 0x0000899au, 0x000600a9u, 0x00000008u, 0x000040a2u, 0x0000401bu, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x000040a3u, 0x000040a2u, 0x0003003eu, 0x00005d58u, 0x00003e62u, 0x0003003eu, 0x00005d59u, 0x00003e64u, 0x0003003eu, 0x00003eb6u, 0x000019c4u, 0x0003003eu, 0x00003eb7u, 0x000040a0u, 0x0003003eu, 0x00003eb8u, 0x000040a3u, 0x0003003eu, 0x00003eb9u, 0x00004034u, 0x0003003eu, 0x00003ebau, 0x000019eau, 0x00050041u, 0x00000007u, 0x00004802u, 0x00003eb7u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004803u, 0x00004802u, 0x00050084u, 0x00000006u, 0x00004804u, 0x00003e64u, 0x00004803u, 0x00050080u, 0x00000006u, 0x00004805u, 0x00003e62u, 0x00004804u, 0x0003003eu, 0x000047f6u, 0x00004805u, 0x00050041u, 0x00000007u, 0x00004806u, 0x00003eb7u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004807u, 0x00004806u, 0x00050080u, 0x00000006u, 0x00004809u, 0x00004805u, 0x00004807u, 0x0003003eu, 0x000047f6u, 0x00004809u, 0x000500c7u, 0x00000006u, 0x0000480bu, 0x00004809u, 0x00000744u, 0x0003003eu, 0x000047f6u, 0x0000480bu, 0x0003003eu, 0x000047f7u, 0x0000480bu, 0x0004003du, 0x00000006u, 0x0000480eu, 0x00004802u, 0x000500c7u, 0x00000006u, 0x0000480fu, 0x0000480eu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004810u, 0x0000480fu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004812u, 0x0000480bu, 0x00004810u, 0x0003003eu, 0x000047f7u, 0x00004812u, 0x000500c6u, 0x00000006u, 0x00004814u, 0x00004812u, 0x000002fbu, 0x0003003eu, 0x000047f7u, 0x00004814u, 0x00080041u, 0x000006a8u, 0x00004817u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004814u, 0x0004003du, 0x0000000fu, 0x00004818u, 0x00004817u, 0x00040071u, 0x00000006u, 0x00004819u, 0x00004818u, 0x0003003eu, 0x000047f8u, 0x00004819u, 0x000500c4u, 0x00000006u, 0x0000481bu, 0x00004819u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x0000481du, 0x0000481bu, 0x000040a3u, 0x0003003eu, 0x000047f9u, 0x0000481du, 0x000500c6u, 0x00000006u, 0x00004820u, 0x0000481du, 0x00004034u, 0x0003003eu, 0x000047f9u, 0x00004820u, 0x000500c5u, 0x00000006u, 0x00004823u, 0x00000775u, 0x00004820u, 0x00080041u, 0x00000778u, 0x00004824u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004823u, 0x0004003du, 0x00000011u, 0x00004825u, 0x00004824u, 0x00040071u, 0x00000006u, 0x00004826u, 0x00004825u, 0x0003003eu, 0x000047f8u, 0x00004826u, 0x000300f7u, 0x00004828u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004829u, 0x0000482au, 0x000200f8u, 0x0000482au, 0x0003003eu, 0x000047fcu, 0x00004826u, 0x00060050u, 0x0000026du, 0x00004848u, 0x00004826u, 0x00004826u, 0x00004826u, 0x000500c2u, 0x0000026du, 0x00004849u, 0x00004848u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x0000484bu, 0x00004849u, 0x0000b61fu, 0x0003003eu, 0x00004844u, 0x0000484bu, 0x000500c4u, 0x0000026du, 0x0000484eu, 0x0000484bu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004851u, 0x0000484bu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004852u, 0x0000484eu, 0x00004851u, 0x0003003eu, 0x00004844u, 0x00004852u, 0x000500c7u, 0x00000006u, 0x00004854u, 0x00004826u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004855u, 0x00004854u, 0x00000657u, 0x0003003eu, 0x00004845u, 0x00004855u, 0x00040071u, 0x0000065bu, 0x00004857u, 0x00004852u, 0x0004007cu, 0x0000065au, 0x00004858u, 0x00004857u, 0x00040071u, 0x00000011u, 0x0000485au, 0x00004855u, 0x0004007cu, 0x00000012u, 0x0000485bu, 0x0000485au, 0x00050051u, 0x00000012u, 0x0000485cu, 0x00004858u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000485du, 0x00004858u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000485eu, 0x00004858u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000485fu, 0x0000485cu, 0x0000485du, 0x0000485eu, 0x0000485bu, 0x0003003eu, 0x00004846u, 0x0000485fu, 0x0003003eu, 0x000047fau, 0x0000485fu, 0x000200f9u, 0x00004828u, 0x000200f8u, 0x00004829u, 0x0003003eu, 0x000047fbu, 0x00004826u, 0x000500c2u, 0x00000006u, 0x00004834u, 0x00004826u, 0x000001d9u, 0x0003003eu, 0x00004830u, 0x00004834u, 0x000500c7u, 0x00000006u, 0x00004836u, 0x00004826u, 0x00000657u, 0x0003003eu, 0x00004831u, 0x00004836u, 0x00040071u, 0x00000011u, 0x00004838u, 0x00004834u, 0x0004007cu, 0x00000012u, 0x00004839u, 0x00004838u, 0x00040071u, 0x00000011u, 0x00004841u, 0x00004836u, 0x0004007cu, 0x00000012u, 0x00004842u, 0x00004841u, 0x00070050u, 0x00000013u, 0x00004843u, 0x00004839u, 0x00004839u, 0x00004839u, 0x00004842u, 0x0003003eu, 0x00004832u, 0x00004843u, 0x0003003eu, 0x000047fau, 0x00004843u, 0x000200f9u, 0x00004828u, 0x000200f8u, 0x00004828u, 0x000700f5u, 0x00000013u, 0x00008b23u, 0x00004843u, 0x00004829u, 0x0000485fu, 0x0000482au, 0x0003003eu, 0x000047fdu, 0x00008b23u, 0x0003003eu, 0x00003e95u, 0x00008b23u, 0x000300f7u, 0x000040aau, 0x00000000u, 0x000400fau, 0x000019edu, 0x000040abu, 0x000040aau, 0x000200f8u, 0x000040abu, 0x00050050u, 0x00000058u, 0x000040aeu, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x000040afu, 0x000040aeu, 0x0003003eu, 0x00005d5cu, 0x00003e62u, 0x0003003eu, 0x00005d5du, 0x00003e64u, 0x0003003eu, 0x00003ebcu, 0x000019c4u, 0x0003003eu, 0x00003ebdu, 0x000040afu, 0x0003003eu, 0x00003ebeu, 0x000002f4u, 0x0003003eu, 0x00003ebfu, 0x00004034u, 0x0003003eu, 0x00003ec0u, 0x000019eau, 0x00050041u, 0x00000007u, 0x0000486cu, 0x00003ebdu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000486du, 0x0000486cu, 0x00050084u, 0x00000006u, 0x0000486eu, 0x00003e64u, 0x0000486du, 0x00050080u, 0x00000006u, 0x0000486fu, 0x00003e62u, 0x0000486eu, 0x0003003eu, 0x00004860u, 0x0000486fu, 0x00050041u, 0x00000007u, 0x00004870u, 0x00003ebdu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004871u, 0x00004870u, 0x00050080u, 0x00000006u, 0x00004873u, 0x0000486fu, 0x00004871u, 0x0003003eu, 0x00004860u, 0x00004873u, 0x000500c7u, 0x00000006u, 0x00004875u, 0x00004873u, 0x00000744u, 0x0003003eu, 0x00004860u, 0x00004875u, 0x0003003eu, 0x00004861u, 0x00004875u, 0x0004003du, 0x00000006u, 0x00004878u, 0x0000486cu, 0x000500c7u, 0x00000006u, 0x00004879u, 0x00004878u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000487au, 0x00004879u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000487cu, 0x00004875u, 0x0000487au, 0x0003003eu, 0x00004861u, 0x0000487cu, 0x000500c6u, 0x00000006u, 0x0000487eu, 0x0000487cu, 0x000002fbu, 0x0003003eu, 0x00004861u, 0x0000487eu, 0x00080041u, 0x000006a8u, 0x00004881u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000487eu, 0x0004003du, 0x0000000fu, 0x00004882u, 0x00004881u, 0x00040071u, 0x00000006u, 0x00004883u, 0x00004882u, 0x0003003eu, 0x00004862u, 0x00004883u, 0x000500c4u, 0x00000006u, 0x00004885u, 0x00004883u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00004887u, 0x00004885u, 0x000002f4u, 0x0003003eu, 0x00004863u, 0x00004887u, 0x000500c6u, 0x00000006u, 0x0000488au, 0x00004887u, 0x00004034u, 0x0003003eu, 0x00004863u, 0x0000488au, 0x000500c5u, 0x00000006u, 0x0000488du, 0x00000775u, 0x0000488au, 0x00080041u, 0x00000778u, 0x0000488eu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000488du, 0x0004003du, 0x00000011u, 0x0000488fu, 0x0000488eu, 0x00040071u, 0x00000006u, 0x00004890u, 0x0000488fu, 0x0003003eu, 0x00004862u, 0x00004890u, 0x000300f7u, 0x00004892u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004893u, 0x00004894u, 0x000200f8u, 0x00004894u, 0x0003003eu, 0x00004866u, 0x00004890u, 0x00060050u, 0x0000026du, 0x000048b2u, 0x00004890u, 0x00004890u, 0x00004890u, 0x000500c2u, 0x0000026du, 0x000048b3u, 0x000048b2u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x000048b5u, 0x000048b3u, 0x0000b61fu, 0x0003003eu, 0x000048aeu, 0x000048b5u, 0x000500c4u, 0x0000026du, 0x000048b8u, 0x000048b5u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x000048bbu, 0x000048b5u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x000048bcu, 0x000048b8u, 0x000048bbu, 0x0003003eu, 0x000048aeu, 0x000048bcu, 0x000500c7u, 0x00000006u, 0x000048beu, 0x00004890u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000048bfu, 0x000048beu, 0x00000657u, 0x0003003eu, 0x000048afu, 0x000048bfu, 0x00040071u, 0x0000065bu, 0x000048c1u, 0x000048bcu, 0x0004007cu, 0x0000065au, 0x000048c2u, 0x000048c1u, 0x00040071u, 0x00000011u, 0x000048c4u, 0x000048bfu, 0x0004007cu, 0x00000012u, 0x000048c5u, 0x000048c4u, 0x00050051u, 0x00000012u, 0x000048c6u, 0x000048c2u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000048c7u, 0x000048c2u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000048c8u, 0x000048c2u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000048c9u, 0x000048c6u, 0x000048c7u, 0x000048c8u, 0x000048c5u, 0x0003003eu, 0x000048b0u, 0x000048c9u, 0x0003003eu, 0x00004864u, 0x000048c9u, 0x000200f9u, 0x00004892u, 0x000200f8u, 0x00004893u, 0x0003003eu, 0x00004865u, 0x00004890u, 0x000500c2u, 0x00000006u, 0x0000489eu, 0x00004890u, 0x000001d9u, 0x0003003eu, 0x0000489au, 0x0000489eu, 0x000500c7u, 0x00000006u, 0x000048a0u, 0x00004890u, 0x00000657u, 0x0003003eu, 0x0000489bu, 0x000048a0u, 0x00040071u, 0x00000011u, 0x000048a2u, 0x0000489eu, 0x0004007cu, 0x00000012u, 0x000048a3u, 0x000048a2u, 0x00040071u, 0x00000011u, 0x000048abu, 0x000048a0u, 0x0004007cu, 0x00000012u, 0x000048acu, 0x000048abu, 0x00070050u, 0x00000013u, 0x000048adu, 0x000048a3u, 0x000048a3u, 0x000048a3u, 0x000048acu, 0x0003003eu, 0x0000489cu, 0x000048adu, 0x0003003eu, 0x00004864u, 0x000048adu, 0x000200f9u, 0x00004892u, 0x000200f8u, 0x00004892u, 0x000700f5u, 0x00000013u, 0x00008b3bu, 0x000048adu, 0x00004893u, 0x000048c9u, 0x00004894u, 0x0003003eu, 0x00004867u, 0x00008b3bu, 0x0003003eu, 0x00003e9du, 0x00008b3bu, 0x00050050u, 0x00000058u, 0x000040b7u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000040b8u, 0x000040b7u, 0x0003003eu, 0x00005d60u, 0x00003e62u, 0x0003003eu, 0x00005d61u, 0x00003e64u, 0x0003003eu, 0x00003ec2u, 0x000019c4u, 0x0003003eu, 0x00003ec3u, 0x000040b8u, 0x0003003eu, 0x00003ec4u, 0x000002f8u, 0x0003003eu, 0x00003ec5u, 0x00004034u, 0x0003003eu, 0x00003ec6u, 0x000019eau, 0x00050041u, 0x00000007u, 0x000048d6u, 0x00003ec3u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000048d7u, 0x000048d6u, 0x00050084u, 0x00000006u, 0x000048d8u, 0x00003e64u, 0x000048d7u, 0x00050080u, 0x00000006u, 0x000048d9u, 0x00003e62u, 0x000048d8u, 0x0003003eu, 0x000048cau, 0x000048d9u, 0x00050041u, 0x00000007u, 0x000048dau, 0x00003ec3u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000048dbu, 0x000048dau, 0x00050080u, 0x00000006u, 0x000048ddu, 0x000048d9u, 0x000048dbu, 0x0003003eu, 0x000048cau, 0x000048ddu, 0x000500c7u, 0x00000006u, 0x000048dfu, 0x000048ddu, 0x00000744u, 0x0003003eu, 0x000048cau, 0x000048dfu, 0x0003003eu, 0x000048cbu, 0x000048dfu, 0x0004003du, 0x00000006u, 0x000048e2u, 0x000048d6u, 0x000500c7u, 0x00000006u, 0x000048e3u, 0x000048e2u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000048e4u, 0x000048e3u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000048e6u, 0x000048dfu, 0x000048e4u, 0x0003003eu, 0x000048cbu, 0x000048e6u, 0x000500c6u, 0x00000006u, 0x000048e8u, 0x000048e6u, 0x000002fbu, 0x0003003eu, 0x000048cbu, 0x000048e8u, 0x00080041u, 0x000006a8u, 0x000048ebu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000048e8u, 0x0004003du, 0x0000000fu, 0x000048ecu, 0x000048ebu, 0x00040071u, 0x00000006u, 0x000048edu, 0x000048ecu, 0x0003003eu, 0x000048ccu, 0x000048edu, 0x000500c4u, 0x00000006u, 0x000048efu, 0x000048edu, 0x000001a9u, 0x00050080u, 0x00000006u, 0x000048f1u, 0x000048efu, 0x000002f8u, 0x0003003eu, 0x000048cdu, 0x000048f1u, 0x000500c6u, 0x00000006u, 0x000048f4u, 0x000048f1u, 0x00004034u, 0x0003003eu, 0x000048cdu, 0x000048f4u, 0x000500c5u, 0x00000006u, 0x000048f7u, 0x00000775u, 0x000048f4u, 0x00080041u, 0x00000778u, 0x000048f8u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000048f7u, 0x0004003du, 0x00000011u, 0x000048f9u, 0x000048f8u, 0x00040071u, 0x00000006u, 0x000048fau, 0x000048f9u, 0x0003003eu, 0x000048ccu, 0x000048fau, 0x000300f7u, 0x000048fcu, 0x00000000u, 0x000400fau, 0x000019eau, 0x000048fdu, 0x000048feu, 0x000200f8u, 0x000048feu, 0x0003003eu, 0x000048d0u, 0x000048fau, 0x00060050u, 0x0000026du, 0x0000491cu, 0x000048fau, 0x000048fau, 0x000048fau, 0x000500c2u, 0x0000026du, 0x0000491du, 0x0000491cu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x0000491fu, 0x0000491du, 0x0000b61fu, 0x0003003eu, 0x00004918u, 0x0000491fu, 0x000500c4u, 0x0000026du, 0x00004922u, 0x0000491fu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004925u, 0x0000491fu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004926u, 0x00004922u, 0x00004925u, 0x0003003eu, 0x00004918u, 0x00004926u, 0x000500c7u, 0x00000006u, 0x00004928u, 0x000048fau, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004929u, 0x00004928u, 0x00000657u, 0x0003003eu, 0x00004919u, 0x00004929u, 0x00040071u, 0x0000065bu, 0x0000492bu, 0x00004926u, 0x0004007cu, 0x0000065au, 0x0000492cu, 0x0000492bu, 0x00040071u, 0x00000011u, 0x0000492eu, 0x00004929u, 0x0004007cu, 0x00000012u, 0x0000492fu, 0x0000492eu, 0x00050051u, 0x00000012u, 0x00004930u, 0x0000492cu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004931u, 0x0000492cu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004932u, 0x0000492cu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004933u, 0x00004930u, 0x00004931u, 0x00004932u, 0x0000492fu, 0x0003003eu, 0x0000491au, 0x00004933u, 0x0003003eu, 0x000048ceu, 0x00004933u, 0x000200f9u, 0x000048fcu, 0x000200f8u, 0x000048fdu, 0x0003003eu, 0x000048cfu, 0x000048fau, 0x000500c2u, 0x00000006u, 0x00004908u, 0x000048fau, 0x000001d9u, 0x0003003eu, 0x00004904u, 0x00004908u, 0x000500c7u, 0x00000006u, 0x0000490au, 0x000048fau, 0x00000657u, 0x0003003eu, 0x00004905u, 0x0000490au, 0x00040071u, 0x00000011u, 0x0000490cu, 0x00004908u, 0x0004007cu, 0x00000012u, 0x0000490du, 0x0000490cu, 0x00040071u, 0x00000011u, 0x00004915u, 0x0000490au, 0x0004007cu, 0x00000012u, 0x00004916u, 0x00004915u, 0x00070050u, 0x00000013u, 0x00004917u, 0x0000490du, 0x0000490du, 0x0000490du, 0x00004916u, 0x0003003eu, 0x00004906u, 0x00004917u, 0x0003003eu, 0x000048ceu, 0x00004917u, 0x000200f9u, 0x000048fcu, 0x000200f8u, 0x000048fcu, 0x000700f5u, 0x00000013u, 0x00008b53u, 0x00004917u, 0x000048fdu, 0x00004933u, 0x000048feu, 0x0003003eu, 0x000048d1u, 0x00008b53u, 0x0003003eu, 0x00003ea5u, 0x00008b53u, 0x000200f9u, 0x000040aau, 0x000200f8u, 0x000040aau, 0x000700f5u, 0x00000013u, 0x00008f91u, 0x00007705u, 0x00004828u, 0x00008b53u, 0x000048fcu, 0x000700f5u, 0x00000013u, 0x00008dc8u, 0x00007705u, 0x00004828u, 0x00008b3bu, 0x000048fcu, 0x000300f7u, 0x000040bfu, 0x00000000u, 0x000400fau, 0x00004011u, 0x000040c0u, 0x000040bfu, 0x000200f8u, 0x000040c0u, 0x00050050u, 0x00000058u, 0x000040c3u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x000040c4u, 0x000040c3u, 0x0003003eu, 0x00005d64u, 0x00003e62u, 0x0003003eu, 0x00005d65u, 0x00003e64u, 0x0003003eu, 0x00003ec8u, 0x000019c4u, 0x0003003eu, 0x00003ec9u, 0x000040c4u, 0x0003003eu, 0x00003ecau, 0x000002fbu, 0x0003003eu, 0x00003ecbu, 0x00004034u, 0x0003003eu, 0x00003eccu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00004940u, 0x00003ec9u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004941u, 0x00004940u, 0x00050084u, 0x00000006u, 0x00004942u, 0x00003e64u, 0x00004941u, 0x00050080u, 0x00000006u, 0x00004943u, 0x00003e62u, 0x00004942u, 0x0003003eu, 0x00004934u, 0x00004943u, 0x00050041u, 0x00000007u, 0x00004944u, 0x00003ec9u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004945u, 0x00004944u, 0x00050080u, 0x00000006u, 0x00004947u, 0x00004943u, 0x00004945u, 0x0003003eu, 0x00004934u, 0x00004947u, 0x000500c7u, 0x00000006u, 0x00004949u, 0x00004947u, 0x00000744u, 0x0003003eu, 0x00004934u, 0x00004949u, 0x0003003eu, 0x00004935u, 0x00004949u, 0x0004003du, 0x00000006u, 0x0000494cu, 0x00004940u, 0x000500c7u, 0x00000006u, 0x0000494du, 0x0000494cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000494eu, 0x0000494du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004950u, 0x00004949u, 0x0000494eu, 0x0003003eu, 0x00004935u, 0x00004950u, 0x000500c6u, 0x00000006u, 0x00004952u, 0x00004950u, 0x000002fbu, 0x0003003eu, 0x00004935u, 0x00004952u, 0x00080041u, 0x000006a8u, 0x00004955u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004952u, 0x0004003du, 0x0000000fu, 0x00004956u, 0x00004955u, 0x00040071u, 0x00000006u, 0x00004957u, 0x00004956u, 0x0003003eu, 0x00004936u, 0x00004957u, 0x000500c4u, 0x00000006u, 0x00004959u, 0x00004957u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x0000495bu, 0x00004959u, 0x000002fbu, 0x0003003eu, 0x00004937u, 0x0000495bu, 0x000500c6u, 0x00000006u, 0x0000495eu, 0x0000495bu, 0x00004034u, 0x0003003eu, 0x00004937u, 0x0000495eu, 0x000500c5u, 0x00000006u, 0x00004961u, 0x00000775u, 0x0000495eu, 0x00080041u, 0x00000778u, 0x00004962u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004961u, 0x0004003du, 0x00000011u, 0x00004963u, 0x00004962u, 0x00040071u, 0x00000006u, 0x00004964u, 0x00004963u, 0x0003003eu, 0x00004936u, 0x00004964u, 0x000300f7u, 0x00004966u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004967u, 0x00004968u, 0x000200f8u, 0x00004968u, 0x0003003eu, 0x0000493au, 0x00004964u, 0x00060050u, 0x0000026du, 0x00004986u, 0x00004964u, 0x00004964u, 0x00004964u, 0x000500c2u, 0x0000026du, 0x00004987u, 0x00004986u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004989u, 0x00004987u, 0x0000b61fu, 0x0003003eu, 0x00004982u, 0x00004989u, 0x000500c4u, 0x0000026du, 0x0000498cu, 0x00004989u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x0000498fu, 0x00004989u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004990u, 0x0000498cu, 0x0000498fu, 0x0003003eu, 0x00004982u, 0x00004990u, 0x000500c7u, 0x00000006u, 0x00004992u, 0x00004964u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004993u, 0x00004992u, 0x00000657u, 0x0003003eu, 0x00004983u, 0x00004993u, 0x00040071u, 0x0000065bu, 0x00004995u, 0x00004990u, 0x0004007cu, 0x0000065au, 0x00004996u, 0x00004995u, 0x00040071u, 0x00000011u, 0x00004998u, 0x00004993u, 0x0004007cu, 0x00000012u, 0x00004999u, 0x00004998u, 0x00050051u, 0x00000012u, 0x0000499au, 0x00004996u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000499bu, 0x00004996u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000499cu, 0x00004996u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000499du, 0x0000499au, 0x0000499bu, 0x0000499cu, 0x00004999u, 0x0003003eu, 0x00004984u, 0x0000499du, 0x0003003eu, 0x00004938u, 0x0000499du, 0x000200f9u, 0x00004966u, 0x000200f8u, 0x00004967u, 0x0003003eu, 0x00004939u, 0x00004964u, 0x000500c2u, 0x00000006u, 0x00004972u, 0x00004964u, 0x000001d9u, 0x0003003eu, 0x0000496eu, 0x00004972u, 0x000500c7u, 0x00000006u, 0x00004974u, 0x00004964u, 0x00000657u, 0x0003003eu, 0x0000496fu, 0x00004974u, 0x00040071u, 0x00000011u, 0x00004976u, 0x00004972u, 0x0004007cu, 0x00000012u, 0x00004977u, 0x00004976u, 0x00040071u, 0x00000011u, 0x0000497fu, 0x00004974u, 0x0004007cu, 0x00000012u, 0x00004980u, 0x0000497fu, 0x00070050u, 0x00000013u, 0x00004981u, 0x00004977u, 0x00004977u, 0x00004977u, 0x00004980u, 0x0003003eu, 0x00004970u, 0x00004981u, 0x0003003eu, 0x00004938u, 0x00004981u, 0x000200f9u, 0x00004966u, 0x000200f8u, 0x00004966u, 0x000700f5u, 0x00000013u, 0x00008b80u, 0x00004981u, 0x00004967u, 0x0000499du, 0x00004968u, 0x0003003eu, 0x0000493bu, 0x00008b80u, 0x0003003eu, 0x00003eadu, 0x00008b80u, 0x000200f9u, 0x000040bfu, 0x000200f8u, 0x000040bfu, 0x000700f5u, 0x00000013u, 0x00009074u, 0x00007705u, 0x000040aau, 0x00008b80u, 0x00004966u, 0x000200f9u, 0x00004039u, 0x000200f8u, 0x0000403bu, 0x0004007cu, 0x000000abu, 0x00004069u, 0x0000899au, 0x00040071u, 0x00000006u, 0x0000406cu, 0x00003e6au, 0x000600a9u, 0x00000008u, 0x0000406eu, 0x0000401bu, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x0000406fu, 0x0000406eu, 0x0003003eu, 0x00005d48u, 0x00003e62u, 0x0003003eu, 0x00005d49u, 0x00003e64u, 0x0003003eu, 0x00003e97u, 0x000019c4u, 0x0003003eu, 0x00003e98u, 0x00004069u, 0x0003003eu, 0x00003e99u, 0x0000406cu, 0x0003003eu, 0x00003e9au, 0x0000406fu, 0x0003003eu, 0x00003e9bu, 0x00004034u, 0x0003003eu, 0x00003e9cu, 0x000019eau, 0x00050041u, 0x00000007u, 0x0000461fu, 0x00003e98u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004620u, 0x0000461fu, 0x00050084u, 0x00000006u, 0x00004621u, 0x00003e64u, 0x00004620u, 0x00050080u, 0x00000006u, 0x00004622u, 0x00003e62u, 0x00004621u, 0x0003003eu, 0x00004612u, 0x00004622u, 0x00050041u, 0x00000007u, 0x00004623u, 0x00003e98u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004624u, 0x00004623u, 0x000500c2u, 0x00000006u, 0x00004625u, 0x00004624u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004627u, 0x00004622u, 0x00004625u, 0x0003003eu, 0x00004612u, 0x00004627u, 0x000500c7u, 0x00000006u, 0x00004629u, 0x00004627u, 0x00000744u, 0x0003003eu, 0x00004612u, 0x00004629u, 0x0004003du, 0x00000006u, 0x0000462bu, 0x00004623u, 0x000400c8u, 0x00000006u, 0x0000462cu, 0x0000462bu, 0x000500c7u, 0x00000006u, 0x0000462du, 0x0000462cu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000462eu, 0x0000462du, 0x00000692u, 0x0003003eu, 0x00004613u, 0x0000462eu, 0x0003003eu, 0x00004614u, 0x00004629u, 0x0004003du, 0x00000006u, 0x00004631u, 0x0000461fu, 0x000500c7u, 0x00000006u, 0x00004632u, 0x00004631u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004633u, 0x00004632u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004635u, 0x00004629u, 0x00004633u, 0x0003003eu, 0x00004614u, 0x00004635u, 0x000500c6u, 0x00000006u, 0x00004637u, 0x00004635u, 0x000002fbu, 0x0003003eu, 0x00004614u, 0x00004637u, 0x00080041u, 0x000006a8u, 0x0000463au, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004637u, 0x0004003du, 0x0000000fu, 0x0000463bu, 0x0000463au, 0x00040071u, 0x00000006u, 0x0000463cu, 0x0000463bu, 0x0003003eu, 0x00004615u, 0x0000463cu, 0x000500c2u, 0x00000006u, 0x0000463fu, 0x0000463cu, 0x0000462eu, 0x000500c7u, 0x00000006u, 0x00004640u, 0x0000463fu, 0x000006afu, 0x0003003eu, 0x00004615u, 0x00004640u, 0x000500c4u, 0x00000006u, 0x00004642u, 0x0000406cu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00004644u, 0x00004640u, 0x00004642u, 0x0003003eu, 0x00004615u, 0x00004644u, 0x000500c4u, 0x00000006u, 0x00004646u, 0x00004644u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x00004648u, 0x00004646u, 0x0000406fu, 0x0003003eu, 0x00004616u, 0x00004648u, 0x000500c6u, 0x00000006u, 0x0000464bu, 0x00004648u, 0x00004034u, 0x0003003eu, 0x00004616u, 0x0000464bu, 0x000500c5u, 0x00000006u, 0x0000464eu, 0x00000775u, 0x0000464bu, 0x00080041u, 0x00000778u, 0x0000464fu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000464eu, 0x0004003du, 0x00000011u, 0x00004650u, 0x0000464fu, 0x00040071u, 0x00000006u, 0x00004651u, 0x00004650u, 0x0003003eu, 0x00004615u, 0x00004651u, 0x000300f7u, 0x00004653u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004654u, 0x00004655u, 0x000200f8u, 0x00004655u, 0x0003003eu, 0x00004619u, 0x00004651u, 0x00060050u, 0x0000026du, 0x00004673u, 0x00004651u, 0x00004651u, 0x00004651u, 0x000500c2u, 0x0000026du, 0x00004674u, 0x00004673u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004676u, 0x00004674u, 0x0000b61fu, 0x0003003eu, 0x0000466fu, 0x00004676u, 0x000500c4u, 0x0000026du, 0x00004679u, 0x00004676u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x0000467cu, 0x00004676u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x0000467du, 0x00004679u, 0x0000467cu, 0x0003003eu, 0x0000466fu, 0x0000467du, 0x000500c7u, 0x00000006u, 0x0000467fu, 0x00004651u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004680u, 0x0000467fu, 0x00000657u, 0x0003003eu, 0x00004670u, 0x00004680u, 0x00040071u, 0x0000065bu, 0x00004682u, 0x0000467du, 0x0004007cu, 0x0000065au, 0x00004683u, 0x00004682u, 0x00040071u, 0x00000011u, 0x00004685u, 0x00004680u, 0x0004007cu, 0x00000012u, 0x00004686u, 0x00004685u, 0x00050051u, 0x00000012u, 0x00004687u, 0x00004683u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004688u, 0x00004683u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004689u, 0x00004683u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000468au, 0x00004687u, 0x00004688u, 0x00004689u, 0x00004686u, 0x0003003eu, 0x00004671u, 0x0000468au, 0x0003003eu, 0x00004617u, 0x0000468au, 0x000200f9u, 0x00004653u, 0x000200f8u, 0x00004654u, 0x0003003eu, 0x00004618u, 0x00004651u, 0x000500c2u, 0x00000006u, 0x0000465fu, 0x00004651u, 0x000001d9u, 0x0003003eu, 0x0000465bu, 0x0000465fu, 0x000500c7u, 0x00000006u, 0x00004661u, 0x00004651u, 0x00000657u, 0x0003003eu, 0x0000465cu, 0x00004661u, 0x00040071u, 0x00000011u, 0x00004663u, 0x0000465fu, 0x0004007cu, 0x00000012u, 0x00004664u, 0x00004663u, 0x00040071u, 0x00000011u, 0x0000466cu, 0x00004661u, 0x0004007cu, 0x00000012u, 0x0000466du, 0x0000466cu, 0x00070050u, 0x00000013u, 0x0000466eu, 0x00004664u, 0x00004664u, 0x00004664u, 0x0000466du, 0x0003003eu, 0x0000465du, 0x0000466eu, 0x0003003eu, 0x00004617u, 0x0000466eu, 0x000200f9u, 0x00004653u, 0x000200f8u, 0x00004653u, 0x000700f5u, 0x00000013u, 0x00008b81u, 0x0000466eu, 0x00004654u, 0x0000468au, 0x00004655u, 0x0003003eu, 0x0000461au, 0x00008b81u, 0x0003003eu, 0x00003e95u, 0x00008b81u, 0x000300f7u, 0x00004076u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004077u, 0x00004076u, 0x000200f8u, 0x00004077u, 0x00050050u, 0x00000058u, 0x0000407au, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x0000407bu, 0x0000407au, 0x0003003eu, 0x00005d4cu, 0x00003e62u, 0x0003003eu, 0x00005d4du, 0x00003e64u, 0x0003003eu, 0x00003e9fu, 0x000019c4u, 0x0003003eu, 0x00003ea0u, 0x0000407bu, 0x0003003eu, 0x00003ea1u, 0x0000406cu, 0x0003003eu, 0x00003ea2u, 0x000002f4u, 0x0003003eu, 0x00003ea3u, 0x00004034u, 0x0003003eu, 0x00003ea4u, 0x000019eau, 0x00050041u, 0x00000007u, 0x00004698u, 0x00003ea0u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004699u, 0x00004698u, 0x00050084u, 0x00000006u, 0x0000469au, 0x00003e64u, 0x00004699u, 0x00050080u, 0x00000006u, 0x0000469bu, 0x00003e62u, 0x0000469au, 0x0003003eu, 0x0000468bu, 0x0000469bu, 0x00050041u, 0x00000007u, 0x0000469cu, 0x00003ea0u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000469du, 0x0000469cu, 0x000500c2u, 0x00000006u, 0x0000469eu, 0x0000469du, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000046a0u, 0x0000469bu, 0x0000469eu, 0x0003003eu, 0x0000468bu, 0x000046a0u, 0x000500c7u, 0x00000006u, 0x000046a2u, 0x000046a0u, 0x00000744u, 0x0003003eu, 0x0000468bu, 0x000046a2u, 0x0004003du, 0x00000006u, 0x000046a4u, 0x0000469cu, 0x000400c8u, 0x00000006u, 0x000046a5u, 0x000046a4u, 0x000500c7u, 0x00000006u, 0x000046a6u, 0x000046a5u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000046a7u, 0x000046a6u, 0x00000692u, 0x0003003eu, 0x0000468cu, 0x000046a7u, 0x0003003eu, 0x0000468du, 0x000046a2u, 0x0004003du, 0x00000006u, 0x000046aau, 0x00004698u, 0x000500c7u, 0x00000006u, 0x000046abu, 0x000046aau, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000046acu, 0x000046abu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000046aeu, 0x000046a2u, 0x000046acu, 0x0003003eu, 0x0000468du, 0x000046aeu, 0x000500c6u, 0x00000006u, 0x000046b0u, 0x000046aeu, 0x000002fbu, 0x0003003eu, 0x0000468du, 0x000046b0u, 0x00080041u, 0x000006a8u, 0x000046b3u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000046b0u, 0x0004003du, 0x0000000fu, 0x000046b4u, 0x000046b3u, 0x00040071u, 0x00000006u, 0x000046b5u, 0x000046b4u, 0x0003003eu, 0x0000468eu, 0x000046b5u, 0x000500c2u, 0x00000006u, 0x000046b8u, 0x000046b5u, 0x000046a7u, 0x000500c7u, 0x00000006u, 0x000046b9u, 0x000046b8u, 0x000006afu, 0x0003003eu, 0x0000468eu, 0x000046b9u, 0x000500c5u, 0x00000006u, 0x000046bdu, 0x000046b9u, 0x00004642u, 0x0003003eu, 0x0000468eu, 0x000046bdu, 0x000500c4u, 0x00000006u, 0x000046bfu, 0x000046bdu, 0x000001a9u, 0x00050080u, 0x00000006u, 0x000046c1u, 0x000046bfu, 0x000002f4u, 0x0003003eu, 0x0000468fu, 0x000046c1u, 0x000500c6u, 0x00000006u, 0x000046c4u, 0x000046c1u, 0x00004034u, 0x0003003eu, 0x0000468fu, 0x000046c4u, 0x000500c5u, 0x00000006u, 0x000046c7u, 0x00000775u, 0x000046c4u, 0x00080041u, 0x00000778u, 0x000046c8u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000046c7u, 0x0004003du, 0x00000011u, 0x000046c9u, 0x000046c8u, 0x00040071u, 0x00000006u, 0x000046cau, 0x000046c9u, 0x0003003eu, 0x0000468eu, 0x000046cau, 0x000300f7u, 0x000046ccu, 0x00000000u, 0x000400fau, 0x000019eau, 0x000046cdu, 0x000046ceu, 0x000200f8u, 0x000046ceu, 0x0003003eu, 0x00004692u, 0x000046cau, 0x00060050u, 0x0000026du, 0x000046ecu, 0x000046cau, 0x000046cau, 0x000046cau, 0x000500c2u, 0x0000026du, 0x000046edu, 0x000046ecu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x000046efu, 0x000046edu, 0x0000b61fu, 0x0003003eu, 0x000046e8u, 0x000046efu, 0x000500c4u, 0x0000026du, 0x000046f2u, 0x000046efu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x000046f5u, 0x000046efu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x000046f6u, 0x000046f2u, 0x000046f5u, 0x0003003eu, 0x000046e8u, 0x000046f6u, 0x000500c7u, 0x00000006u, 0x000046f8u, 0x000046cau, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000046f9u, 0x000046f8u, 0x00000657u, 0x0003003eu, 0x000046e9u, 0x000046f9u, 0x00040071u, 0x0000065bu, 0x000046fbu, 0x000046f6u, 0x0004007cu, 0x0000065au, 0x000046fcu, 0x000046fbu, 0x00040071u, 0x00000011u, 0x000046feu, 0x000046f9u, 0x0004007cu, 0x00000012u, 0x000046ffu, 0x000046feu, 0x00050051u, 0x00000012u, 0x00004700u, 0x000046fcu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004701u, 0x000046fcu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004702u, 0x000046fcu, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004703u, 0x00004700u, 0x00004701u, 0x00004702u, 0x000046ffu, 0x0003003eu, 0x000046eau, 0x00004703u, 0x0003003eu, 0x00004690u, 0x00004703u, 0x000200f9u, 0x000046ccu, 0x000200f8u, 0x000046cdu, 0x0003003eu, 0x00004691u, 0x000046cau, 0x000500c2u, 0x00000006u, 0x000046d8u, 0x000046cau, 0x000001d9u, 0x0003003eu, 0x000046d4u, 0x000046d8u, 0x000500c7u, 0x00000006u, 0x000046dau, 0x000046cau, 0x00000657u, 0x0003003eu, 0x000046d5u, 0x000046dau, 0x00040071u, 0x00000011u, 0x000046dcu, 0x000046d8u, 0x0004007cu, 0x00000012u, 0x000046ddu, 0x000046dcu, 0x00040071u, 0x00000011u, 0x000046e5u, 0x000046dau, 0x0004007cu, 0x00000012u, 0x000046e6u, 0x000046e5u, 0x00070050u, 0x00000013u, 0x000046e7u, 0x000046ddu, 0x000046ddu, 0x000046ddu, 0x000046e6u, 0x0003003eu, 0x000046d6u, 0x000046e7u, 0x0003003eu, 0x00004690u, 0x000046e7u, 0x000200f9u, 0x000046ccu, 0x000200f8u, 0x000046ccu, 0x000700f5u, 0x00000013u, 0x00008b96u, 0x000046e7u, 0x000046cdu, 0x00004703u, 0x000046ceu, 0x0003003eu, 0x00004693u, 0x00008b96u, 0x0003003eu, 0x00003e9du, 0x00008b96u, 0x00050050u, 0x00000058u, 0x00004086u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004087u, 0x00004086u, 0x0003003eu, 0x00005d50u, 0x00003e62u, 0x0003003eu, 0x00005d51u, 0x00003e64u, 0x0003003eu, 0x00003ea7u, 0x000019c4u, 0x0003003eu, 0x00003ea8u, 0x00004087u, 0x0003003eu, 0x00003ea9u, 0x0000406cu, 0x0003003eu, 0x00003eaau, 0x000002f8u, 0x0003003eu, 0x00003eabu, 0x00004034u, 0x0003003eu, 0x00003eacu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00004711u, 0x00003ea8u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004712u, 0x00004711u, 0x00050084u, 0x00000006u, 0x00004713u, 0x00003e64u, 0x00004712u, 0x00050080u, 0x00000006u, 0x00004714u, 0x00003e62u, 0x00004713u, 0x0003003eu, 0x00004704u, 0x00004714u, 0x00050041u, 0x00000007u, 0x00004715u, 0x00003ea8u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004716u, 0x00004715u, 0x000500c2u, 0x00000006u, 0x00004717u, 0x00004716u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004719u, 0x00004714u, 0x00004717u, 0x0003003eu, 0x00004704u, 0x00004719u, 0x000500c7u, 0x00000006u, 0x0000471bu, 0x00004719u, 0x00000744u, 0x0003003eu, 0x00004704u, 0x0000471bu, 0x0004003du, 0x00000006u, 0x0000471du, 0x00004715u, 0x000400c8u, 0x00000006u, 0x0000471eu, 0x0000471du, 0x000500c7u, 0x00000006u, 0x0000471fu, 0x0000471eu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004720u, 0x0000471fu, 0x00000692u, 0x0003003eu, 0x00004705u, 0x00004720u, 0x0003003eu, 0x00004706u, 0x0000471bu, 0x0004003du, 0x00000006u, 0x00004723u, 0x00004711u, 0x000500c7u, 0x00000006u, 0x00004724u, 0x00004723u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004725u, 0x00004724u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00004727u, 0x0000471bu, 0x00004725u, 0x0003003eu, 0x00004706u, 0x00004727u, 0x000500c6u, 0x00000006u, 0x00004729u, 0x00004727u, 0x000002fbu, 0x0003003eu, 0x00004706u, 0x00004729u, 0x00080041u, 0x000006a8u, 0x0000472cu, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004729u, 0x0004003du, 0x0000000fu, 0x0000472du, 0x0000472cu, 0x00040071u, 0x00000006u, 0x0000472eu, 0x0000472du, 0x0003003eu, 0x00004707u, 0x0000472eu, 0x000500c2u, 0x00000006u, 0x00004731u, 0x0000472eu, 0x00004720u, 0x000500c7u, 0x00000006u, 0x00004732u, 0x00004731u, 0x000006afu, 0x0003003eu, 0x00004707u, 0x00004732u, 0x000500c5u, 0x00000006u, 0x00004736u, 0x00004732u, 0x00004642u, 0x0003003eu, 0x00004707u, 0x00004736u, 0x000500c4u, 0x00000006u, 0x00004738u, 0x00004736u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x0000473au, 0x00004738u, 0x000002f8u, 0x0003003eu, 0x00004708u, 0x0000473au, 0x000500c6u, 0x00000006u, 0x0000473du, 0x0000473au, 0x00004034u, 0x0003003eu, 0x00004708u, 0x0000473du, 0x000500c5u, 0x00000006u, 0x00004740u, 0x00000775u, 0x0000473du, 0x00080041u, 0x00000778u, 0x00004741u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004740u, 0x0004003du, 0x00000011u, 0x00004742u, 0x00004741u, 0x00040071u, 0x00000006u, 0x00004743u, 0x00004742u, 0x0003003eu, 0x00004707u, 0x00004743u, 0x000300f7u, 0x00004745u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004746u, 0x00004747u, 0x000200f8u, 0x00004747u, 0x0003003eu, 0x0000470bu, 0x00004743u, 0x00060050u, 0x0000026du, 0x00004765u, 0x00004743u, 0x00004743u, 0x00004743u, 0x000500c2u, 0x0000026du, 0x00004766u, 0x00004765u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004768u, 0x00004766u, 0x0000b61fu, 0x0003003eu, 0x00004761u, 0x00004768u, 0x000500c4u, 0x0000026du, 0x0000476bu, 0x00004768u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x0000476eu, 0x00004768u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x0000476fu, 0x0000476bu, 0x0000476eu, 0x0003003eu, 0x00004761u, 0x0000476fu, 0x000500c7u, 0x00000006u, 0x00004771u, 0x00004743u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004772u, 0x00004771u, 0x00000657u, 0x0003003eu, 0x00004762u, 0x00004772u, 0x00040071u, 0x0000065bu, 0x00004774u, 0x0000476fu, 0x0004007cu, 0x0000065au, 0x00004775u, 0x00004774u, 0x00040071u, 0x00000011u, 0x00004777u, 0x00004772u, 0x0004007cu, 0x00000012u, 0x00004778u, 0x00004777u, 0x00050051u, 0x00000012u, 0x00004779u, 0x00004775u, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000477au, 0x00004775u, 0x00000001u, 0x00050051u, 0x00000012u, 0x0000477bu, 0x00004775u, 0x00000002u, 0x00070050u, 0x00000013u, 0x0000477cu, 0x00004779u, 0x0000477au, 0x0000477bu, 0x00004778u, 0x0003003eu, 0x00004763u, 0x0000477cu, 0x0003003eu, 0x00004709u, 0x0000477cu, 0x000200f9u, 0x00004745u, 0x000200f8u, 0x00004746u, 0x0003003eu, 0x0000470au, 0x00004743u, 0x000500c2u, 0x00000006u, 0x00004751u, 0x00004743u, 0x000001d9u, 0x0003003eu, 0x0000474du, 0x00004751u, 0x000500c7u, 0x00000006u, 0x00004753u, 0x00004743u, 0x00000657u, 0x0003003eu, 0x0000474eu, 0x00004753u, 0x00040071u, 0x00000011u, 0x00004755u, 0x00004751u, 0x0004007cu, 0x00000012u, 0x00004756u, 0x00004755u, 0x00040071u, 0x00000011u, 0x0000475eu, 0x00004753u, 0x0004007cu, 0x00000012u, 0x0000475fu, 0x0000475eu, 0x00070050u, 0x00000013u, 0x00004760u, 0x00004756u, 0x00004756u, 0x00004756u, 0x0000475fu, 0x0003003eu, 0x0000474fu, 0x00004760u, 0x0003003eu, 0x00004709u, 0x00004760u, 0x000200f9u, 0x00004745u, 0x000200f8u, 0x00004745u, 0x000700f5u, 0x00000013u, 0x00008bacu, 0x00004760u, 0x00004746u, 0x0000477cu, 0x00004747u, 0x0003003eu, 0x0000470cu, 0x00008bacu, 0x0003003eu, 0x00003ea5u, 0x00008bacu, 0x000200f9u, 0x00004076u, 0x000200f8u, 0x00004076u, 0x000700f5u, 0x00000013u, 0x00008f8du, 0x00007705u, 0x00004653u, 0x00008bacu, 0x00004745u, 0x000700f5u, 0x00000013u, 0x00008dc3u, 0x00007705u, 0x00004653u, 0x00008b96u, 0x00004745u, 0x000300f7u, 0x00004091u, 0x00000000u, 0x000400fau, 0x00004011u, 0x00004092u, 0x00004091u, 0x000200f8u, 0x00004092u, 0x00050050u, 0x00000058u, 0x00004095u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004096u, 0x00004095u, 0x0003003eu, 0x00005d54u, 0x00003e62u, 0x0003003eu, 0x00005d55u, 0x00003e64u, 0x0003003eu, 0x00003eafu, 0x000019c4u, 0x0003003eu, 0x00003eb0u, 0x00004096u, 0x0003003eu, 0x00003eb1u, 0x0000406cu, 0x0003003eu, 0x00003eb2u, 0x000002fbu, 0x0003003eu, 0x00003eb3u, 0x00004034u, 0x0003003eu, 0x00003eb4u, 0x000019eau, 0x00050041u, 0x00000007u, 0x0000478au, 0x00003eb0u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000478bu, 0x0000478au, 0x00050084u, 0x00000006u, 0x0000478cu, 0x00003e64u, 0x0000478bu, 0x00050080u, 0x00000006u, 0x0000478du, 0x00003e62u, 0x0000478cu, 0x0003003eu, 0x0000477du, 0x0000478du, 0x00050041u, 0x00000007u, 0x0000478eu, 0x00003eb0u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000478fu, 0x0000478eu, 0x000500c2u, 0x00000006u, 0x00004790u, 0x0000478fu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00004792u, 0x0000478du, 0x00004790u, 0x0003003eu, 0x0000477du, 0x00004792u, 0x000500c7u, 0x00000006u, 0x00004794u, 0x00004792u, 0x00000744u, 0x0003003eu, 0x0000477du, 0x00004794u, 0x0004003du, 0x00000006u, 0x00004796u, 0x0000478eu, 0x000400c8u, 0x00000006u, 0x00004797u, 0x00004796u, 0x000500c7u, 0x00000006u, 0x00004798u, 0x00004797u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004799u, 0x00004798u, 0x00000692u, 0x0003003eu, 0x0000477eu, 0x00004799u, 0x0003003eu, 0x0000477fu, 0x00004794u, 0x0004003du, 0x00000006u, 0x0000479cu, 0x0000478au, 0x000500c7u, 0x00000006u, 0x0000479du, 0x0000479cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000479eu, 0x0000479du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000047a0u, 0x00004794u, 0x0000479eu, 0x0003003eu, 0x0000477fu, 0x000047a0u, 0x000500c6u, 0x00000006u, 0x000047a2u, 0x000047a0u, 0x000002fbu, 0x0003003eu, 0x0000477fu, 0x000047a2u, 0x00080041u, 0x000006a8u, 0x000047a5u, 0x000006a5u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000047a2u, 0x0004003du, 0x0000000fu, 0x000047a6u, 0x000047a5u, 0x00040071u, 0x00000006u, 0x000047a7u, 0x000047a6u, 0x0003003eu, 0x00004780u, 0x000047a7u, 0x000500c2u, 0x00000006u, 0x000047aau, 0x000047a7u, 0x00004799u, 0x000500c7u, 0x00000006u, 0x000047abu, 0x000047aau, 0x000006afu, 0x0003003eu, 0x00004780u, 0x000047abu, 0x000500c5u, 0x00000006u, 0x000047afu, 0x000047abu, 0x00004642u, 0x0003003eu, 0x00004780u, 0x000047afu, 0x000500c4u, 0x00000006u, 0x000047b1u, 0x000047afu, 0x000001a9u, 0x00050080u, 0x00000006u, 0x000047b3u, 0x000047b1u, 0x000002fbu, 0x0003003eu, 0x00004781u, 0x000047b3u, 0x000500c6u, 0x00000006u, 0x000047b6u, 0x000047b3u, 0x00004034u, 0x0003003eu, 0x00004781u, 0x000047b6u, 0x000500c5u, 0x00000006u, 0x000047b9u, 0x00000775u, 0x000047b6u, 0x00080041u, 0x00000778u, 0x000047bau, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000047b9u, 0x0004003du, 0x00000011u, 0x000047bbu, 0x000047bau, 0x00040071u, 0x00000006u, 0x000047bcu, 0x000047bbu, 0x0003003eu, 0x00004780u, 0x000047bcu, 0x000300f7u, 0x000047beu, 0x00000000u, 0x000400fau, 0x000019eau, 0x000047bfu, 0x000047c0u, 0x000200f8u, 0x000047c0u, 0x0003003eu, 0x00004784u, 0x000047bcu, 0x00060050u, 0x0000026du, 0x000047deu, 0x000047bcu, 0x000047bcu, 0x000047bcu, 0x000500c2u, 0x0000026du, 0x000047dfu, 0x000047deu, 0x00000648u, 0x000500c7u, 0x0000026du, 0x000047e1u, 0x000047dfu, 0x0000b61fu, 0x0003003eu, 0x000047dau, 0x000047e1u, 0x000500c4u, 0x0000026du, 0x000047e4u, 0x000047e1u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x000047e7u, 0x000047e1u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x000047e8u, 0x000047e4u, 0x000047e7u, 0x0003003eu, 0x000047dau, 0x000047e8u, 0x000500c7u, 0x00000006u, 0x000047eau, 0x000047bcu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000047ebu, 0x000047eau, 0x00000657u, 0x0003003eu, 0x000047dbu, 0x000047ebu, 0x00040071u, 0x0000065bu, 0x000047edu, 0x000047e8u, 0x0004007cu, 0x0000065au, 0x000047eeu, 0x000047edu, 0x00040071u, 0x00000011u, 0x000047f0u, 0x000047ebu, 0x0004007cu, 0x00000012u, 0x000047f1u, 0x000047f0u, 0x00050051u, 0x00000012u, 0x000047f2u, 0x000047eeu, 0x00000000u, 0x00050051u, 0x00000012u, 0x000047f3u, 0x000047eeu, 0x00000001u, 0x00050051u, 0x00000012u, 0x000047f4u, 0x000047eeu, 0x00000002u, 0x00070050u, 0x00000013u, 0x000047f5u, 0x000047f2u, 0x000047f3u, 0x000047f4u, 0x000047f1u, 0x0003003eu, 0x000047dcu, 0x000047f5u, 0x0003003eu, 0x00004782u, 0x000047f5u, 0x000200f9u, 0x000047beu, 0x000200f8u, 0x000047bfu, 0x0003003eu, 0x00004783u, 0x000047bcu, 0x000500c2u, 0x00000006u, 0x000047cau, 0x000047bcu, 0x000001d9u, 0x0003003eu, 0x000047c6u, 0x000047cau, 0x000500c7u, 0x00000006u, 0x000047ccu, 0x000047bcu, 0x00000657u, 0x0003003eu, 0x000047c7u, 0x000047ccu, 0x00040071u, 0x00000011u, 0x000047ceu, 0x000047cau, 0x0004007cu, 0x00000012u, 0x000047cfu, 0x000047ceu, 0x00040071u, 0x00000011u, 0x000047d7u, 0x000047ccu, 0x0004007cu, 0x00000012u, 0x000047d8u, 0x000047d7u, 0x00070050u, 0x00000013u, 0x000047d9u, 0x000047cfu, 0x000047cfu, 0x000047cfu, 0x000047d8u, 0x0003003eu, 0x000047c8u, 0x000047d9u, 0x0003003eu, 0x00004782u, 0x000047d9u, 0x000200f9u, 0x000047beu, 0x000200f8u, 0x000047beu, 0x000700f5u, 0x00000013u, 0x00008bd8u, 0x000047d9u, 0x000047bfu, 0x000047f5u, 0x000047c0u, 0x0003003eu, 0x00004785u, 0x00008bd8u, 0x0003003eu, 0x00003eadu, 0x00008bd8u, 0x000200f9u, 0x00004091u, 0x000200f8u, 0x00004091u, 0x000700f5u, 0x00000013u, 0x0000906fu, 0x00007705u, 0x00004076u, 0x00008bd8u, 0x000047beu, 0x000200f9u, 0x00004039u, 0x000200f8u, 0x0000403au, 0x0004007cu, 0x000000abu, 0x0000403eu, 0x0000899au, 0x000600a9u, 0x00000008u, 0x00004040u, 0x0000401bu, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x00004041u, 0x00004040u, 0x0003003eu, 0x00005d68u, 0x00003e62u, 0x0003003eu, 0x00005d69u, 0x00003e64u, 0x0003003eu, 0x00003eceu, 0x000019c4u, 0x0003003eu, 0x00003ecfu, 0x0000403eu, 0x0003003eu, 0x00003ed0u, 0x00004041u, 0x0003003eu, 0x00003ed1u, 0x00004034u, 0x0003003eu, 0x00003ed2u, 0x000019eau, 0x00050041u, 0x00000007u, 0x0000446au, 0x00003ecfu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000446bu, 0x0000446au, 0x00050084u, 0x00000006u, 0x0000446cu, 0x00003e64u, 0x0000446bu, 0x00050080u, 0x00000006u, 0x0000446du, 0x00003e62u, 0x0000446cu, 0x0003003eu, 0x0000445eu, 0x0000446du, 0x00050041u, 0x00000007u, 0x0000446eu, 0x00003ecfu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000446fu, 0x0000446eu, 0x00050084u, 0x00000006u, 0x00004470u, 0x0000446fu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00004472u, 0x0000446du, 0x00004470u, 0x0003003eu, 0x0000445eu, 0x00004472u, 0x000500c7u, 0x00000006u, 0x00004474u, 0x00004472u, 0x00000744u, 0x0003003eu, 0x0000445eu, 0x00004474u, 0x000500c2u, 0x00000006u, 0x00004476u, 0x00004474u, 0x000001a6u, 0x0003003eu, 0x0000445fu, 0x00004476u, 0x0004003du, 0x00000006u, 0x00004478u, 0x0000446au, 0x000500c7u, 0x00000006u, 0x00004479u, 0x00004478u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000447au, 0x00004479u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000447cu, 0x00004476u, 0x0000447au, 0x0003003eu, 0x0000445fu, 0x0000447cu, 0x000500c6u, 0x00000006u, 0x0000447eu, 0x0000447cu, 0x000002f4u, 0x0003003eu, 0x0000445fu, 0x0000447eu, 0x00080041u, 0x00000778u, 0x00004481u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000447eu, 0x0004003du, 0x00000011u, 0x00004482u, 0x00004481u, 0x00040071u, 0x00000006u, 0x00004483u, 0x00004482u, 0x0003003eu, 0x00004460u, 0x00004483u, 0x000500c2u, 0x00000006u, 0x00004485u, 0x00004483u, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00004486u, 0x00004485u, 0x00000816u, 0x00050080u, 0x00000006u, 0x00004488u, 0x00004486u, 0x00004041u, 0x0003003eu, 0x00004461u, 0x00004488u, 0x000500c6u, 0x00000006u, 0x0000448bu, 0x00004488u, 0x00004034u, 0x0003003eu, 0x00004461u, 0x0000448bu, 0x000500c5u, 0x00000006u, 0x0000448eu, 0x00000775u, 0x0000448bu, 0x00080041u, 0x00000778u, 0x0000448fu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x0000448eu, 0x0004003du, 0x00000011u, 0x00004490u, 0x0000448fu, 0x00040071u, 0x00000006u, 0x00004491u, 0x00004490u, 0x0003003eu, 0x00004460u, 0x00004491u, 0x000300f7u, 0x00004493u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004494u, 0x00004495u, 0x000200f8u, 0x00004495u, 0x0003003eu, 0x00004464u, 0x00004491u, 0x00060050u, 0x0000026du, 0x000044b3u, 0x00004491u, 0x00004491u, 0x00004491u, 0x000500c2u, 0x0000026du, 0x000044b4u, 0x000044b3u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x000044b6u, 0x000044b4u, 0x0000b61fu, 0x0003003eu, 0x000044afu, 0x000044b6u, 0x000500c4u, 0x0000026du, 0x000044b9u, 0x000044b6u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x000044bcu, 0x000044b6u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x000044bdu, 0x000044b9u, 0x000044bcu, 0x0003003eu, 0x000044afu, 0x000044bdu, 0x000500c7u, 0x00000006u, 0x000044bfu, 0x00004491u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000044c0u, 0x000044bfu, 0x00000657u, 0x0003003eu, 0x000044b0u, 0x000044c0u, 0x00040071u, 0x0000065bu, 0x000044c2u, 0x000044bdu, 0x0004007cu, 0x0000065au, 0x000044c3u, 0x000044c2u, 0x00040071u, 0x00000011u, 0x000044c5u, 0x000044c0u, 0x0004007cu, 0x00000012u, 0x000044c6u, 0x000044c5u, 0x00050051u, 0x00000012u, 0x000044c7u, 0x000044c3u, 0x00000000u, 0x00050051u, 0x00000012u, 0x000044c8u, 0x000044c3u, 0x00000001u, 0x00050051u, 0x00000012u, 0x000044c9u, 0x000044c3u, 0x00000002u, 0x00070050u, 0x00000013u, 0x000044cau, 0x000044c7u, 0x000044c8u, 0x000044c9u, 0x000044c6u, 0x0003003eu, 0x000044b1u, 0x000044cau, 0x0003003eu, 0x00004462u, 0x000044cau, 0x000200f9u, 0x00004493u, 0x000200f8u, 0x00004494u, 0x0003003eu, 0x00004463u, 0x00004491u, 0x000500c2u, 0x00000006u, 0x0000449fu, 0x00004491u, 0x000001d9u, 0x0003003eu, 0x0000449bu, 0x0000449fu, 0x000500c7u, 0x00000006u, 0x000044a1u, 0x00004491u, 0x00000657u, 0x0003003eu, 0x0000449cu, 0x000044a1u, 0x00040071u, 0x00000011u, 0x000044a3u, 0x0000449fu, 0x0004007cu, 0x00000012u, 0x000044a4u, 0x000044a3u, 0x00040071u, 0x00000011u, 0x000044acu, 0x000044a1u, 0x0004007cu, 0x00000012u, 0x000044adu, 0x000044acu, 0x00070050u, 0x00000013u, 0x000044aeu, 0x000044a4u, 0x000044a4u, 0x000044a4u, 0x000044adu, 0x0003003eu, 0x0000449du, 0x000044aeu, 0x0003003eu, 0x00004462u, 0x000044aeu, 0x000200f9u, 0x00004493u, 0x000200f8u, 0x00004493u, 0x000700f5u, 0x00000013u, 0x00008bd9u, 0x000044aeu, 0x00004494u, 0x000044cau, 0x00004495u, 0x0003003eu, 0x00004465u, 0x00008bd9u, 0x0003003eu, 0x00003e95u, 0x00008bd9u, 0x000300f7u, 0x00004048u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004049u, 0x00004048u, 0x000200f8u, 0x00004049u, 0x00050050u, 0x00000058u, 0x0000404cu, 0x0000894fu, 0x00004006u, 0x0004007cu, 0x000000abu, 0x0000404du, 0x0000404cu, 0x0003003eu, 0x00005d6cu, 0x00003e62u, 0x0003003eu, 0x00005d6du, 0x00003e64u, 0x0003003eu, 0x00003ed4u, 0x000019c4u, 0x0003003eu, 0x00003ed5u, 0x0000404du, 0x0003003eu, 0x00003ed6u, 0x000002f4u, 0x0003003eu, 0x00003ed7u, 0x00004034u, 0x0003003eu, 0x00003ed8u, 0x000019eau, 0x00050041u, 0x00000007u, 0x000044d7u, 0x00003ed5u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000044d8u, 0x000044d7u, 0x00050084u, 0x00000006u, 0x000044d9u, 0x00003e64u, 0x000044d8u, 0x00050080u, 0x00000006u, 0x000044dau, 0x00003e62u, 0x000044d9u, 0x0003003eu, 0x000044cbu, 0x000044dau, 0x00050041u, 0x00000007u, 0x000044dbu, 0x00003ed5u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000044dcu, 0x000044dbu, 0x00050084u, 0x00000006u, 0x000044ddu, 0x000044dcu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000044dfu, 0x000044dau, 0x000044ddu, 0x0003003eu, 0x000044cbu, 0x000044dfu, 0x000500c7u, 0x00000006u, 0x000044e1u, 0x000044dfu, 0x00000744u, 0x0003003eu, 0x000044cbu, 0x000044e1u, 0x000500c2u, 0x00000006u, 0x000044e3u, 0x000044e1u, 0x000001a6u, 0x0003003eu, 0x000044ccu, 0x000044e3u, 0x0004003du, 0x00000006u, 0x000044e5u, 0x000044d7u, 0x000500c7u, 0x00000006u, 0x000044e6u, 0x000044e5u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000044e7u, 0x000044e6u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000044e9u, 0x000044e3u, 0x000044e7u, 0x0003003eu, 0x000044ccu, 0x000044e9u, 0x000500c6u, 0x00000006u, 0x000044ebu, 0x000044e9u, 0x000002f4u, 0x0003003eu, 0x000044ccu, 0x000044ebu, 0x00080041u, 0x00000778u, 0x000044eeu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000044ebu, 0x0004003du, 0x00000011u, 0x000044efu, 0x000044eeu, 0x00040071u, 0x00000006u, 0x000044f0u, 0x000044efu, 0x0003003eu, 0x000044cdu, 0x000044f0u, 0x000500c2u, 0x00000006u, 0x000044f2u, 0x000044f0u, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x000044f3u, 0x000044f2u, 0x00000816u, 0x00050080u, 0x00000006u, 0x000044f5u, 0x000044f3u, 0x000002f4u, 0x0003003eu, 0x000044ceu, 0x000044f5u, 0x000500c6u, 0x00000006u, 0x000044f8u, 0x000044f5u, 0x00004034u, 0x0003003eu, 0x000044ceu, 0x000044f8u, 0x000500c5u, 0x00000006u, 0x000044fbu, 0x00000775u, 0x000044f8u, 0x00080041u, 0x00000778u, 0x000044fcu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000044fbu, 0x0004003du, 0x00000011u, 0x000044fdu, 0x000044fcu, 0x00040071u, 0x00000006u, 0x000044feu, 0x000044fdu, 0x0003003eu, 0x000044cdu, 0x000044feu, 0x000300f7u, 0x00004500u, 0x00000000u, 0x000400fau, 0x000019eau, 0x00004501u, 0x00004502u, 0x000200f8u, 0x00004502u, 0x0003003eu, 0x000044d1u, 0x000044feu, 0x00060050u, 0x0000026du, 0x00004520u, 0x000044feu, 0x000044feu, 0x000044feu, 0x000500c2u, 0x0000026du, 0x00004521u, 0x00004520u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004523u, 0x00004521u, 0x0000b61fu, 0x0003003eu, 0x0000451cu, 0x00004523u, 0x000500c4u, 0x0000026du, 0x00004526u, 0x00004523u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004529u, 0x00004523u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x0000452au, 0x00004526u, 0x00004529u, 0x0003003eu, 0x0000451cu, 0x0000452au, 0x000500c7u, 0x00000006u, 0x0000452cu, 0x000044feu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000452du, 0x0000452cu, 0x00000657u, 0x0003003eu, 0x0000451du, 0x0000452du, 0x00040071u, 0x0000065bu, 0x0000452fu, 0x0000452au, 0x0004007cu, 0x0000065au, 0x00004530u, 0x0000452fu, 0x00040071u, 0x00000011u, 0x00004532u, 0x0000452du, 0x0004007cu, 0x00000012u, 0x00004533u, 0x00004532u, 0x00050051u, 0x00000012u, 0x00004534u, 0x00004530u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004535u, 0x00004530u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004536u, 0x00004530u, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004537u, 0x00004534u, 0x00004535u, 0x00004536u, 0x00004533u, 0x0003003eu, 0x0000451eu, 0x00004537u, 0x0003003eu, 0x000044cfu, 0x00004537u, 0x000200f9u, 0x00004500u, 0x000200f8u, 0x00004501u, 0x0003003eu, 0x000044d0u, 0x000044feu, 0x000500c2u, 0x00000006u, 0x0000450cu, 0x000044feu, 0x000001d9u, 0x0003003eu, 0x00004508u, 0x0000450cu, 0x000500c7u, 0x00000006u, 0x0000450eu, 0x000044feu, 0x00000657u, 0x0003003eu, 0x00004509u, 0x0000450eu, 0x00040071u, 0x00000011u, 0x00004510u, 0x0000450cu, 0x0004007cu, 0x00000012u, 0x00004511u, 0x00004510u, 0x00040071u, 0x00000011u, 0x00004519u, 0x0000450eu, 0x0004007cu, 0x00000012u, 0x0000451au, 0x00004519u, 0x00070050u, 0x00000013u, 0x0000451bu, 0x00004511u, 0x00004511u, 0x00004511u, 0x0000451au, 0x0003003eu, 0x0000450au, 0x0000451bu, 0x0003003eu, 0x000044cfu, 0x0000451bu, 0x000200f9u, 0x00004500u, 0x000200f8u, 0x00004500u, 0x000700f5u, 0x00000013u, 0x00008beeu, 0x0000451bu, 0x00004501u, 0x00004537u, 0x00004502u, 0x0003003eu, 0x000044d2u, 0x00008beeu, 0x0003003eu, 0x00003e9du, 0x00008beeu, 0x00050050u, 0x00000058u, 0x00004055u, 0x00008911u, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004056u, 0x00004055u, 0x0003003eu, 0x00005d70u, 0x00003e62u, 0x0003003eu, 0x00005d71u, 0x00003e64u, 0x0003003eu, 0x00003edau, 0x000019c4u, 0x0003003eu, 0x00003edbu, 0x00004056u, 0x0003003eu, 0x00003edcu, 0x000002f8u, 0x0003003eu, 0x00003eddu, 0x00004034u, 0x0003003eu, 0x00003edeu, 0x000019eau, 0x00050041u, 0x00000007u, 0x00004544u, 0x00003edbu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00004545u, 0x00004544u, 0x00050084u, 0x00000006u, 0x00004546u, 0x00003e64u, 0x00004545u, 0x00050080u, 0x00000006u, 0x00004547u, 0x00003e62u, 0x00004546u, 0x0003003eu, 0x00004538u, 0x00004547u, 0x00050041u, 0x00000007u, 0x00004548u, 0x00003edbu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00004549u, 0x00004548u, 0x00050084u, 0x00000006u, 0x0000454au, 0x00004549u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x0000454cu, 0x00004547u, 0x0000454au, 0x0003003eu, 0x00004538u, 0x0000454cu, 0x000500c7u, 0x00000006u, 0x0000454eu, 0x0000454cu, 0x00000744u, 0x0003003eu, 0x00004538u, 0x0000454eu, 0x000500c2u, 0x00000006u, 0x00004550u, 0x0000454eu, 0x000001a6u, 0x0003003eu, 0x00004539u, 0x00004550u, 0x0004003du, 0x00000006u, 0x00004552u, 0x00004544u, 0x000500c7u, 0x00000006u, 0x00004553u, 0x00004552u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00004554u, 0x00004553u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00004556u, 0x00004550u, 0x00004554u, 0x0003003eu, 0x00004539u, 0x00004556u, 0x000500c6u, 0x00000006u, 0x00004558u, 0x00004556u, 0x000002f4u, 0x0003003eu, 0x00004539u, 0x00004558u, 0x00080041u, 0x00000778u, 0x0000455bu, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004558u, 0x0004003du, 0x00000011u, 0x0000455cu, 0x0000455bu, 0x00040071u, 0x00000006u, 0x0000455du, 0x0000455cu, 0x0003003eu, 0x0000453au, 0x0000455du, 0x000500c2u, 0x00000006u, 0x0000455fu, 0x0000455du, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00004560u, 0x0000455fu, 0x00000816u, 0x00050080u, 0x00000006u, 0x00004562u, 0x00004560u, 0x000002f8u, 0x0003003eu, 0x0000453bu, 0x00004562u, 0x000500c6u, 0x00000006u, 0x00004565u, 0x00004562u, 0x00004034u, 0x0003003eu, 0x0000453bu, 0x00004565u, 0x000500c5u, 0x00000006u, 0x00004568u, 0x00000775u, 0x00004565u, 0x00080041u, 0x00000778u, 0x00004569u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x00004568u, 0x0004003du, 0x00000011u, 0x0000456au, 0x00004569u, 0x00040071u, 0x00000006u, 0x0000456bu, 0x0000456au, 0x0003003eu, 0x0000453au, 0x0000456bu, 0x000300f7u, 0x0000456du, 0x00000000u, 0x000400fau, 0x000019eau, 0x0000456eu, 0x0000456fu, 0x000200f8u, 0x0000456fu, 0x0003003eu, 0x0000453eu, 0x0000456bu, 0x00060050u, 0x0000026du, 0x0000458du, 0x0000456bu, 0x0000456bu, 0x0000456bu, 0x000500c2u, 0x0000026du, 0x0000458eu, 0x0000458du, 0x00000648u, 0x000500c7u, 0x0000026du, 0x00004590u, 0x0000458eu, 0x0000b61fu, 0x0003003eu, 0x00004589u, 0x00004590u, 0x000500c4u, 0x0000026du, 0x00004593u, 0x00004590u, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004596u, 0x00004590u, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004597u, 0x00004593u, 0x00004596u, 0x0003003eu, 0x00004589u, 0x00004597u, 0x000500c7u, 0x00000006u, 0x00004599u, 0x0000456bu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000459au, 0x00004599u, 0x00000657u, 0x0003003eu, 0x0000458au, 0x0000459au, 0x00040071u, 0x0000065bu, 0x0000459cu, 0x00004597u, 0x0004007cu, 0x0000065au, 0x0000459du, 0x0000459cu, 0x00040071u, 0x00000011u, 0x0000459fu, 0x0000459au, 0x0004007cu, 0x00000012u, 0x000045a0u, 0x0000459fu, 0x00050051u, 0x00000012u, 0x000045a1u, 0x0000459du, 0x00000000u, 0x00050051u, 0x00000012u, 0x000045a2u, 0x0000459du, 0x00000001u, 0x00050051u, 0x00000012u, 0x000045a3u, 0x0000459du, 0x00000002u, 0x00070050u, 0x00000013u, 0x000045a4u, 0x000045a1u, 0x000045a2u, 0x000045a3u, 0x000045a0u, 0x0003003eu, 0x0000458bu, 0x000045a4u, 0x0003003eu, 0x0000453cu, 0x000045a4u, 0x000200f9u, 0x0000456du, 0x000200f8u, 0x0000456eu, 0x0003003eu, 0x0000453du, 0x0000456bu, 0x000500c2u, 0x00000006u, 0x00004579u, 0x0000456bu, 0x000001d9u, 0x0003003eu, 0x00004575u, 0x00004579u, 0x000500c7u, 0x00000006u, 0x0000457bu, 0x0000456bu, 0x00000657u, 0x0003003eu, 0x00004576u, 0x0000457bu, 0x00040071u, 0x00000011u, 0x0000457du, 0x00004579u, 0x0004007cu, 0x00000012u, 0x0000457eu, 0x0000457du, 0x00040071u, 0x00000011u, 0x00004586u, 0x0000457bu, 0x0004007cu, 0x00000012u, 0x00004587u, 0x00004586u, 0x00070050u, 0x00000013u, 0x00004588u, 0x0000457eu, 0x0000457eu, 0x0000457eu, 0x00004587u, 0x0003003eu, 0x00004577u, 0x00004588u, 0x0003003eu, 0x0000453cu, 0x00004588u, 0x000200f9u, 0x0000456du, 0x000200f8u, 0x0000456du, 0x000700f5u, 0x00000013u, 0x00008c04u, 0x00004588u, 0x0000456eu, 0x000045a4u, 0x0000456fu, 0x0003003eu, 0x0000453fu, 0x00008c04u, 0x0003003eu, 0x00003ea5u, 0x00008c04u, 0x000200f9u, 0x00004048u, 0x000200f8u, 0x00004048u, 0x000700f5u, 0x00000013u, 0x00008f88u, 0x00007705u, 0x00004493u, 0x00008c04u, 0x0000456du, 0x000700f5u, 0x00000013u, 0x00008dbdu, 0x00007705u, 0x00004493u, 0x00008beeu, 0x0000456du, 0x000300f7u, 0x0000405du, 0x00000000u, 0x000400fau, 0x00004011u, 0x0000405eu, 0x0000405du, 0x000200f8u, 0x0000405eu, 0x00050050u, 0x00000058u, 0x00004061u, 0x0000894fu, 0x00004008u, 0x0004007cu, 0x000000abu, 0x00004062u, 0x00004061u, 0x0003003eu, 0x00005d74u, 0x00003e62u, 0x0003003eu, 0x00005d75u, 0x00003e64u, 0x0003003eu, 0x00003ee0u, 0x000019c4u, 0x0003003eu, 0x00003ee1u, 0x00004062u, 0x0003003eu, 0x00003ee2u, 0x000002fbu, 0x0003003eu, 0x00003ee3u, 0x00004034u, 0x0003003eu, 0x00003ee4u, 0x000019eau, 0x00050041u, 0x00000007u, 0x000045b1u, 0x00003ee1u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000045b2u, 0x000045b1u, 0x00050084u, 0x00000006u, 0x000045b3u, 0x00003e64u, 0x000045b2u, 0x00050080u, 0x00000006u, 0x000045b4u, 0x00003e62u, 0x000045b3u, 0x0003003eu, 0x000045a5u, 0x000045b4u, 0x00050041u, 0x00000007u, 0x000045b5u, 0x00003ee1u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000045b6u, 0x000045b5u, 0x00050084u, 0x00000006u, 0x000045b7u, 0x000045b6u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000045b9u, 0x000045b4u, 0x000045b7u, 0x0003003eu, 0x000045a5u, 0x000045b9u, 0x000500c7u, 0x00000006u, 0x000045bbu, 0x000045b9u, 0x00000744u, 0x0003003eu, 0x000045a5u, 0x000045bbu, 0x000500c2u, 0x00000006u, 0x000045bdu, 0x000045bbu, 0x000001a6u, 0x0003003eu, 0x000045a6u, 0x000045bdu, 0x0004003du, 0x00000006u, 0x000045bfu, 0x000045b1u, 0x000500c7u, 0x00000006u, 0x000045c0u, 0x000045bfu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000045c1u, 0x000045c0u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000045c3u, 0x000045bdu, 0x000045c1u, 0x0003003eu, 0x000045a6u, 0x000045c3u, 0x000500c6u, 0x00000006u, 0x000045c5u, 0x000045c3u, 0x000002f4u, 0x0003003eu, 0x000045a6u, 0x000045c5u, 0x00080041u, 0x00000778u, 0x000045c8u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000045c5u, 0x0004003du, 0x00000011u, 0x000045c9u, 0x000045c8u, 0x00040071u, 0x00000006u, 0x000045cau, 0x000045c9u, 0x0003003eu, 0x000045a7u, 0x000045cau, 0x000500c2u, 0x00000006u, 0x000045ccu, 0x000045cau, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x000045cdu, 0x000045ccu, 0x00000816u, 0x00050080u, 0x00000006u, 0x000045cfu, 0x000045cdu, 0x000002fbu, 0x0003003eu, 0x000045a8u, 0x000045cfu, 0x000500c6u, 0x00000006u, 0x000045d2u, 0x000045cfu, 0x00004034u, 0x0003003eu, 0x000045a8u, 0x000045d2u, 0x000500c5u, 0x00000006u, 0x000045d5u, 0x00000775u, 0x000045d2u, 0x00080041u, 0x00000778u, 0x000045d6u, 0x00000773u, 0x0000019cu, 0x000019c4u, 0x0000019cu, 0x000045d5u, 0x0004003du, 0x00000011u, 0x000045d7u, 0x000045d6u, 0x00040071u, 0x00000006u, 0x000045d8u, 0x000045d7u, 0x0003003eu, 0x000045a7u, 0x000045d8u, 0x000300f7u, 0x000045dau, 0x00000000u, 0x000400fau, 0x000019eau, 0x000045dbu, 0x000045dcu, 0x000200f8u, 0x000045dcu, 0x0003003eu, 0x000045abu, 0x000045d8u, 0x00060050u, 0x0000026du, 0x000045fau, 0x000045d8u, 0x000045d8u, 0x000045d8u, 0x000500c2u, 0x0000026du, 0x000045fbu, 0x000045fau, 0x00000648u, 0x000500c7u, 0x0000026du, 0x000045fdu, 0x000045fbu, 0x0000b61fu, 0x0003003eu, 0x000045f6u, 0x000045fdu, 0x000500c4u, 0x0000026du, 0x00004600u, 0x000045fdu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00004603u, 0x000045fdu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00004604u, 0x00004600u, 0x00004603u, 0x0003003eu, 0x000045f6u, 0x00004604u, 0x000500c7u, 0x00000006u, 0x00004606u, 0x000045d8u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00004607u, 0x00004606u, 0x00000657u, 0x0003003eu, 0x000045f7u, 0x00004607u, 0x00040071u, 0x0000065bu, 0x00004609u, 0x00004604u, 0x0004007cu, 0x0000065au, 0x0000460au, 0x00004609u, 0x00040071u, 0x00000011u, 0x0000460cu, 0x00004607u, 0x0004007cu, 0x00000012u, 0x0000460du, 0x0000460cu, 0x00050051u, 0x00000012u, 0x0000460eu, 0x0000460au, 0x00000000u, 0x00050051u, 0x00000012u, 0x0000460fu, 0x0000460au, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004610u, 0x0000460au, 0x00000002u, 0x00070050u, 0x00000013u, 0x00004611u, 0x0000460eu, 0x0000460fu, 0x00004610u, 0x0000460du, 0x0003003eu, 0x000045f8u, 0x00004611u, 0x0003003eu, 0x000045a9u, 0x00004611u, 0x000200f9u, 0x000045dau, 0x000200f8u, 0x000045dbu, 0x0003003eu, 0x000045aau, 0x000045d8u, 0x000500c2u, 0x00000006u, 0x000045e6u, 0x000045d8u, 0x000001d9u, 0x0003003eu, 0x000045e2u, 0x000045e6u, 0x000500c7u, 0x00000006u, 0x000045e8u, 0x000045d8u, 0x00000657u, 0x0003003eu, 0x000045e3u, 0x000045e8u, 0x00040071u, 0x00000011u, 0x000045eau, 0x000045e6u, 0x0004007cu, 0x00000012u, 0x000045ebu, 0x000045eau, 0x00040071u, 0x00000011u, 0x000045f3u, 0x000045e8u, 0x0004007cu, 0x00000012u, 0x000045f4u, 0x000045f3u, 0x00070050u, 0x00000013u, 0x000045f5u, 0x000045ebu, 0x000045ebu, 0x000045ebu, 0x000045f4u, 0x0003003eu, 0x000045e4u, 0x000045f5u, 0x0003003eu, 0x000045a9u, 0x000045f5u, 0x000200f9u, 0x000045dau, 0x000200f8u, 0x000045dau, 0x000700f5u, 0x00000013u, 0x00008c30u, 0x000045f5u, 0x000045dbu, 0x00004611u, 0x000045dcu, 0x0003003eu, 0x000045acu, 0x00008c30u, 0x0003003eu, 0x00003eadu, 0x00008c30u, 0x000200f9u, 0x0000405du, 0x000200f8u, 0x0000405du, 0x000700f5u, 0x00000013u, 0x00009069u, 0x00007705u, 0x00004048u, 0x00008c30u, 0x000045dau, 0x000200f9u, 0x00004039u, 0x000200f8u, 0x00004039u, 0x000900f5u, 0x00000013u, 0x00009068u, 0x00009069u, 0x0000405du, 0x0000906fu, 0x00004091u, 0x00009074u, 0x000040bfu, 0x000900f5u, 0x00000013u, 0x00008f86u, 0x00008f88u, 0x0000405du, 0x00008f8du, 0x00004091u, 0x00008f91u, 0x000040bfu, 0x000900f5u, 0x00000013u, 0x00008ea1u, 0x00008bd9u, 0x0000405du, 0x00008b81u, 0x00004091u, 0x00008b23u, 0x000040bfu, 0x000900f5u, 0x00000013u, 0x00008dbbu, 0x00008dbdu, 0x0000405du, 0x00008dc3u, 0x00004091u, 0x00008dc8u, 0x000040bfu, 0x000200f9u, 0x0000402eu, 0x000200f8u, 0x0000402eu, 0x000700f5u, 0x00000013u, 0x00008fb7u, 0x00007705u, 0x00004028u, 0x00009068u, 0x00004039u, 0x000700f5u, 0x00000013u, 0x00008ed5u, 0x00007705u, 0x00004028u, 0x00008f86u, 0x00004039u, 0x000700f5u, 0x00000013u, 0x00008df0u, 0x00007705u, 0x00004028u, 0x00008ea1u, 0x00004039u, 0x000700f5u, 0x00000013u, 0x00008d0au, 0x00007705u, 0x00004028u, 0x00008dbbu, 0x00004039u, 0x000200f9u, 0x00004027u, 0x000200f8u, 0x00004027u, 0x000700f5u, 0x00000013u, 0x00008fb6u, 0x00008fb7u, 0x0000402eu, 0x00009079u, 0x000040ceu, 0x000700f5u, 0x00000013u, 0x00008ed4u, 0x00008ed5u, 0x0000402eu, 0x00008f94u, 0x000040ceu, 0x000700f5u, 0x00000013u, 0x00008defu, 0x00008df0u, 0x0000402eu, 0x00008eb1u, 0x000040ceu, 0x000700f5u, 0x00000013u, 0x00008d09u, 0x00008d0au, 0x0000402eu, 0x00008dccu, 0x000040ceu, 0x000300f7u, 0x000042f0u, 0x00000000u, 0x000400fau, 0x00001a26u, 0x000042f1u, 0x000042f2u, 0x000200f8u, 0x000042f2u, 0x000300f7u, 0x0000431eu, 0x00000000u, 0x000400fau, 0x00004019u, 0x0000431fu, 0x00004320u, 0x000200f8u, 0x00004320u, 0x000300f7u, 0x0000434cu, 0x00000000u, 0x000400fau, 0x00004011u, 0x0000434du, 0x0000434eu, 0x000200f8u, 0x0000434eu, 0x000300f7u, 0x0000435cu, 0x00000000u, 0x000400fau, 0x0000401bu, 0x0000435du, 0x0000435eu, 0x000200f8u, 0x0000435eu, 0x0004003du, 0x00000058u, 0x00004363u, 0x00003e81u, 0x0003003eu, 0x00003fb6u, 0x00004363u, 0x000200f9u, 0x0000435cu, 0x000200f8u, 0x0000435du, 0x0004003du, 0x00000058u, 0x0000435fu, 0x00003e81u, 0x0007004fu, 0x00000058u, 0x00004360u, 0x0000435fu, 0x0000435fu, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x00004362u, 0x0000b624u, 0x00004360u, 0x0003003eu, 0x00003fb6u, 0x00004362u, 0x000200f9u, 0x0000435cu, 0x000200f8u, 0x0000435cu, 0x000700f5u, 0x00000058u, 0x00008d07u, 0x00004362u, 0x0000435du, 0x00004363u, 0x0000435eu, 0x00040072u, 0x0000011du, 0x00004365u, 0x00008d07u, 0x0003003eu, 0x00003fb5u, 0x00004365u, 0x00050082u, 0x00000013u, 0x00004368u, 0x00008d09u, 0x00008defu, 0x00050041u, 0x00000133u, 0x00004369u, 0x00003fb5u, 0x0000028eu, 0x0004003du, 0x00000012u, 0x0000436au, 0x00004369u, 0x00070050u, 0x00000013u, 0x0000436bu, 0x0000436au, 0x0000436au, 0x0000436au, 0x0000436au, 0x00050084u, 0x00000013u, 0x0000436cu, 0x00004368u, 0x0000436bu, 0x0003003eu, 0x00003fa7u, 0x0000436cu, 0x00050082u, 0x00000013u, 0x0000436fu, 0x00008ed4u, 0x00008defu, 0x00050041u, 0x00000133u, 0x00004370u, 0x00003fb5u, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00004371u, 0x00004370u, 0x00070050u, 0x00000013u, 0x00004372u, 0x00004371u, 0x00004371u, 0x00004371u, 0x00004371u, 0x00050084u, 0x00000013u, 0x00004373u, 0x0000436fu, 0x00004372u, 0x00050080u, 0x00000013u, 0x00004375u, 0x0000436cu, 0x00004373u, 0x0003003eu, 0x00003fa7u, 0x00004375u, 0x00050080u, 0x00000013u, 0x00004378u, 0x00004375u, 0x0000b627u, 0x0003003eu, 0x00003fa7u, 0x00004378u, 0x000500c3u, 0x00000013u, 0x0000437bu, 0x00004378u, 0x0000b628u, 0x0003003eu, 0x00003fa7u, 0x0000437bu, 0x00050080u, 0x00000013u, 0x0000437eu, 0x0000437bu, 0x00008defu, 0x0003003eu, 0x00003fa7u, 0x0000437eu, 0x000200f9u, 0x0000434cu, 0x000200f8u, 0x0000434du, 0x00050080u, 0x00000013u, 0x00004351u, 0x00008defu, 0x00008ed4u, 0x00050080u, 0x00000013u, 0x00004353u, 0x00004351u, 0x00008d09u, 0x00050080u, 0x00000013u, 0x00004355u, 0x00004353u, 0x00008fb6u, 0x00050080u, 0x00000013u, 0x00004357u, 0x00004355u, 0x0000b623u, 0x000500c3u, 0x00000013u, 0x00004359u, 0x00004357u, 0x0000b623u, 0x0003003eu, 0x00003fa7u, 0x00004359u, 0x000200f9u, 0x0000434cu, 0x000200f8u, 0x0000434cu, 0x000700f5u, 0x00000013u, 0x0000915du, 0x00004359u, 0x0000434du, 0x0000437eu, 0x0000435cu, 0x000200f9u, 0x0000431eu, 0x000200f8u, 0x0000431fu, 0x000300f7u, 0x00004322u, 0x00000000u, 0x000400fau, 0x000019edu, 0x00004323u, 0x00004324u, 0x000200f8u, 0x00004324u, 0x0003003eu, 0x00003fa7u, 0x00008defu, 0x000200f9u, 0x00004322u, 0x000200f8u, 0x00004323u, 0x000500c7u, 0x00000008u, 0x00004326u, 0x00008911u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x00004327u, 0x00004326u, 0x000001afu, 0x0004003du, 0x00000008u, 0x00004329u, 0x00003fe7u, 0x000500c3u, 0x00000008u, 0x0000432au, 0x00004329u, 0x000001a6u, 0x000500c5u, 0x00000008u, 0x0000432bu, 0x00004327u, 0x0000432au, 0x0003003eu, 0x00003fa8u, 0x0000432bu, 0x0004003du, 0x00000008u, 0x0000432eu, 0x00003fe9u, 0x00050050u, 0x00000058u, 0x0000432fu, 0x0000432bu, 0x0000432eu, 0x0007004fu, 0x0000011du, 0x00004331u, 0x00008defu, 0x00008defu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003faau, 0x00004331u, 0x0007004fu, 0x0000011du, 0x00004333u, 0x00008d09u, 0x00008d09u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003fabu, 0x00004333u, 0x0007004fu, 0x0000011du, 0x00004335u, 0x00008ed4u, 0x00008ed4u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003facu, 0x00004335u, 0x0007004fu, 0x0000011du, 0x00004337u, 0x00008fb6u, 0x00008fb6u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003fadu, 0x00004337u, 0x0003003eu, 0x00003faeu, 0x0000432fu, 0x00050041u, 0x00000040u, 0x000055dcu, 0x00003faeu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000055ddu, 0x000055dcu, 0x00050041u, 0x00000040u, 0x000055deu, 0x00003faeu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000055dfu, 0x000055deu, 0x00050080u, 0x00000008u, 0x000055e0u, 0x000055ddu, 0x000055dfu, 0x0003003eu, 0x000055d6u, 0x000055e0u, 0x000500afu, 0x00000063u, 0x000055e2u, 0x000055e0u, 0x00000977u, 0x00050050u, 0x00000451u, 0x000055e5u, 0x000055e2u, 0x000055e2u, 0x000600a9u, 0x0000011du, 0x000055e6u, 0x000055e5u, 0x00004337u, 0x00004331u, 0x0003003eu, 0x000055d7u, 0x000055e6u, 0x000300f7u, 0x000055e9u, 0x00000000u, 0x000400fau, 0x000055e2u, 0x000055eau, 0x000055ebu, 0x000200f8u, 0x000055ebu, 0x0004003du, 0x00000058u, 0x000055f0u, 0x00003faeu, 0x0003003eu, 0x000055d9u, 0x000055f0u, 0x000200f9u, 0x000055e9u, 0x000200f8u, 0x000055eau, 0x0004003du, 0x00000058u, 0x000055ecu, 0x00003faeu, 0x0007004fu, 0x00000058u, 0x000055edu, 0x000055ecu, 0x000055ecu, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x000055efu, 0x0000b624u, 0x000055edu, 0x0003003eu, 0x000055d9u, 0x000055efu, 0x000200f9u, 0x000055e9u, 0x000200f8u, 0x000055e9u, 0x000700f5u, 0x00000058u, 0x00009100u, 0x000055efu, 0x000055eau, 0x000055f0u, 0x000055ebu, 0x00040072u, 0x0000011du, 0x000055f2u, 0x00009100u, 0x0003003eu, 0x000055d8u, 0x000055f2u, 0x00050082u, 0x0000011du, 0x000055f5u, 0x00004333u, 0x000055e6u, 0x00050041u, 0x00000133u, 0x000055f6u, 0x000055d8u, 0x0000028eu, 0x0004003du, 0x00000012u, 0x000055f7u, 0x000055f6u, 0x00050050u, 0x0000011du, 0x000055f8u, 0x000055f7u, 0x000055f7u, 0x00050084u, 0x0000011du, 0x000055f9u, 0x000055f5u, 0x000055f8u, 0x0003003eu, 0x000055dau, 0x000055f9u, 0x00050082u, 0x0000011du, 0x000055fcu, 0x00004335u, 0x000055e6u, 0x00050041u, 0x00000133u, 0x000055fdu, 0x000055d8u, 0x000002f4u, 0x0004003du, 0x00000012u, 0x000055feu, 0x000055fdu, 0x00050050u, 0x0000011du, 0x000055ffu, 0x000055feu, 0x000055feu, 0x00050084u, 0x0000011du, 0x00005600u, 0x000055fcu, 0x000055ffu, 0x00050080u, 0x0000011du, 0x00005602u, 0x000055f9u, 0x00005600u, 0x0003003eu, 0x000055dau, 0x00005602u, 0x00050080u, 0x0000011du, 0x00005605u, 0x00005602u, 0x0000b625u, 0x0003003eu, 0x000055dau, 0x00005605u, 0x000500c3u, 0x0000011du, 0x00005608u, 0x00005605u, 0x0000b626u, 0x0003003eu, 0x000055dau, 0x00005608u, 0x00050080u, 0x0000011du, 0x0000560bu, 0x00005608u, 0x000055e6u, 0x0003003eu, 0x000055dau, 0x0000560bu, 0x0003003eu, 0x000055dbu, 0x0000560bu, 0x0003003eu, 0x00003fa9u, 0x0000560bu, 0x0007004fu, 0x0000011du, 0x0000433au, 0x00008defu, 0x00008defu, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003fb0u, 0x0000433au, 0x0007004fu, 0x0000011du, 0x0000433cu, 0x00008d09u, 0x00008d09u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003fb1u, 0x0000433cu, 0x0007004fu, 0x0000011du, 0x0000433eu, 0x00008ed4u, 0x00008ed4u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003fb2u, 0x0000433eu, 0x0007004fu, 0x0000011du, 0x00004340u, 0x00008fb6u, 0x00008fb6u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00003fb3u, 0x00004340u, 0x0004003du, 0x00000058u, 0x00004341u, 0x00003e81u, 0x0003003eu, 0x00003fb4u, 0x00004341u, 0x00050041u, 0x00000040u, 0x00005613u, 0x00003fb4u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00005614u, 0x00005613u, 0x00050041u, 0x00000040u, 0x00005615u, 0x00003fb4u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00005616u, 0x00005615u, 0x00050080u, 0x00000008u, 0x00005617u, 0x00005614u, 0x00005616u, 0x0003003eu, 0x0000560du, 0x00005617u, 0x000500afu, 0x00000063u, 0x00005619u, 0x00005617u, 0x00000977u, 0x00050050u, 0x00000451u, 0x0000561cu, 0x00005619u, 0x00005619u, 0x000600a9u, 0x0000011du, 0x0000561du, 0x0000561cu, 0x00004340u, 0x0000433au, 0x0003003eu, 0x0000560eu, 0x0000561du, 0x000300f7u, 0x00005620u, 0x00000000u, 0x000400fau, 0x00005619u, 0x00005621u, 0x00005622u, 0x000200f8u, 0x00005622u, 0x0004003du, 0x00000058u, 0x00005627u, 0x00003fb4u, 0x0003003eu, 0x00005610u, 0x00005627u, 0x000200f9u, 0x00005620u, 0x000200f8u, 0x00005621u, 0x0004003du, 0x00000058u, 0x00005623u, 0x00003fb4u, 0x0007004fu, 0x00000058u, 0x00005624u, 0x00005623u, 0x00005623u, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x00005626u, 0x0000b624u, 0x00005624u, 0x0003003eu, 0x00005610u, 0x00005626u, 0x000200f9u, 0x00005620u, 0x000200f8u, 0x00005620u, 0x000700f5u, 0x00000058u, 0x00009108u, 0x00005626u, 0x00005621u, 0x00005627u, 0x00005622u, 0x00040072u, 0x0000011du, 0x00005629u, 0x00009108u, 0x0003003eu, 0x0000560fu, 0x00005629u, 0x00050082u, 0x0000011du, 0x0000562cu, 0x0000433cu, 0x0000561du, 0x00050041u, 0x00000133u, 0x0000562du, 0x0000560fu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x0000562eu, 0x0000562du, 0x00050050u, 0x0000011du, 0x0000562fu, 0x0000562eu, 0x0000562eu, 0x00050084u, 0x0000011du, 0x00005630u, 0x0000562cu, 0x0000562fu, 0x0003003eu, 0x00005611u, 0x00005630u, 0x00050082u, 0x0000011du, 0x00005633u, 0x0000433eu, 0x0000561du, 0x00050041u, 0x00000133u, 0x00005634u, 0x0000560fu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00005635u, 0x00005634u, 0x00050050u, 0x0000011du, 0x00005636u, 0x00005635u, 0x00005635u, 0x00050084u, 0x0000011du, 0x00005637u, 0x00005633u, 0x00005636u, 0x00050080u, 0x0000011du, 0x00005639u, 0x00005630u, 0x00005637u, 0x0003003eu, 0x00005611u, 0x00005639u, 0x00050080u, 0x0000011du, 0x0000563cu, 0x00005639u, 0x0000b625u, 0x0003003eu, 0x00005611u, 0x0000563cu, 0x000500c3u, 0x0000011du, 0x0000563fu, 0x0000563cu, 0x0000b626u, 0x0003003eu, 0x00005611u, 0x0000563fu, 0x00050080u, 0x0000011du, 0x00005642u, 0x0000563fu, 0x0000561du, 0x0003003eu, 0x00005611u, 0x00005642u, 0x0003003eu, 0x00005612u, 0x00005642u, 0x0003003eu, 0x00003fafu, 0x00005642u, 0x00050051u, 0x00000012u, 0x00004345u, 0x0000560bu, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004346u, 0x0000560bu, 0x00000001u, 0x00050051u, 0x00000012u, 0x00004347u, 0x00005642u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00004348u, 0x00005642u, 0x00000001u, 0x00070050u, 0x00000013u, 0x00004349u, 0x00004345u, 0x00004346u, 0x00004347u, 0x00004348u, 0x0003003eu, 0x00003fa7u, 0x00004349u, 0x000200f9u, 0x00004322u, 0x000200f8u, 0x00004322u, 0x000700f5u, 0x00000013u, 0x0000915cu, 0x00004349u, 0x00005620u, 0x00008defu, 0x00004324u, 0x000200f9u, 0x0000431eu, 0x000200f8u, 0x0000431eu, 0x000700f5u, 0x00000013u, 0x0000915bu, 0x0000915cu, 0x00004322u, 0x0000915du, 0x0000434cu, 0x000200f9u, 0x000042f0u, 0x000200f8u, 0x000042f1u, 0x00040072u, 0x00000009u, 0x000042f4u, 0x00008850u, 0x000600cau, 0x00000009u, 0x000042f5u, 0x000042f4u, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00003fa3u, 0x000042f5u, 0x000300f7u, 0x000042f8u, 0x00000000u, 0x000400fau, 0x0000401bu, 0x000042f9u, 0x000042fau, 0x000200f8u, 0x000042fau, 0x0004003du, 0x00000009u, 0x000042fdu, 0x00003fa3u, 0x0007004fu, 0x00000058u, 0x000042feu, 0x000042fdu, 0x000042fdu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00003fa5u, 0x000042feu, 0x000200f9u, 0x000042f8u, 0x000200f8u, 0x000042f9u, 0x0004003du, 0x00000009u, 0x000042fbu, 0x00003fa3u, 0x0007004fu, 0x00000058u, 0x000042fcu, 0x000042fbu, 0x000042fbu, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00003fa5u, 0x000042fcu, 0x000200f9u, 0x000042f8u, 0x000200f8u, 0x000042f8u, 0x000700f5u, 0x00000058u, 0x00009156u, 0x000042fcu, 0x000042f9u, 0x000042feu, 0x000042fau, 0x0003003eu, 0x00003fa4u, 0x00009156u, 0x00050041u, 0x00000040u, 0x00004300u, 0x00003fa4u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00004301u, 0x00004300u, 0x00050082u, 0x00000013u, 0x00004304u, 0x00008d09u, 0x00008defu, 0x00040072u, 0x00000009u, 0x00004305u, 0x00004304u, 0x00070050u, 0x00000009u, 0x00004306u, 0x00004301u, 0x00004301u, 0x00004301u, 0x00004301u, 0x00050084u, 0x00000009u, 0x00004307u, 0x00004306u, 0x00004305u, 0x00050041u, 0x00000040u, 0x00004308u, 0x00003fa4u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00004309u, 0x00004308u, 0x00050082u, 0x00000013u, 0x0000430cu, 0x00008ed4u, 0x00008defu, 0x00040072u, 0x00000009u, 0x0000430du, 0x0000430cu, 0x00070050u, 0x00000009u, 0x0000430eu, 0x00004309u, 0x00004309u, 0x00004309u, 0x00004309u, 0x00050084u, 0x00000009u, 0x0000430fu, 0x0000430eu, 0x0000430du, 0x00050080u, 0x00000009u, 0x00004310u, 0x00004307u, 0x0000430fu, 0x00050080u, 0x00000009u, 0x00004312u, 0x00004310u, 0x0000b618u, 0x0003003eu, 0x00003fa6u, 0x00004312u, 0x000500c3u, 0x00000009u, 0x00004315u, 0x00004312u, 0x0000b622u, 0x0003003eu, 0x00003fa6u, 0x00004315u, 0x00050041u, 0x00000040u, 0x00004316u, 0x00003fa3u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00004317u, 0x00004316u, 0x00070050u, 0x00000009u, 0x00004319u, 0x00004317u, 0x00004317u, 0x00004317u, 0x00004317u, 0x00050080u, 0x00000009u, 0x0000431au, 0x00004315u, 0x00004319u, 0x0003003eu, 0x00003fa6u, 0x0000431au, 0x00040072u, 0x00000013u, 0x0000431cu, 0x0000431au, 0x0003003eu, 0x00003fa7u, 0x0000431cu, 0x000200f9u, 0x000042f0u, 0x000200f8u, 0x000042f0u, 0x000700f5u, 0x00000013u, 0x0000915au, 0x0000431cu, 0x000042f8u, 0x0000915bu, 0x0000431eu, 0x0003003eu, 0x00003fb7u, 0x0000915au, 0x0003003eu, 0x0000194cu, 0x0000915au, 0x000400a8u, 0x00000063u, 0x00001b84u, 0x000019edu, 0x000400a8u, 0x00000063u, 0x00001b86u, 0x000019e7u, 0x000500a7u, 0x00000063u, 0x00001b87u, 0x00001b84u, 0x00001b86u, 0x000500a7u, 0x00000063u, 0x00001b8au, 0x00001b87u, 0x00001b65u, 0x000300f7u, 0x00001b8bu, 0x00000000u, 0x000400fau, 0x00001b8au, 0x00001b8cu, 0x00001b8bu, 0x000200f8u, 0x00001b8cu, 0x0003003eu, 0x0000195bu, 0x0000915au, 0x0003003eu, 0x0000195cu, 0x000021a8u, 0x00040072u, 0x00000009u, 0x0000564bu, 0x0000915au, 0x000600cau, 0x00000009u, 0x0000564cu, 0x0000564bu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00005644u, 0x0000564cu, 0x00050041u, 0x00000040u, 0x0000564du, 0x00005644u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x0000564eu, 0x0000564du, 0x00050041u, 0x00000133u, 0x0000564fu, 0x0000195cu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00005650u, 0x0000564fu, 0x00040072u, 0x00000008u, 0x00005651u, 0x00005650u, 0x00050041u, 0x00000040u, 0x00005652u, 0x00005644u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00005653u, 0x00005652u, 0x00050084u, 0x00000008u, 0x00005654u, 0x00005651u, 0x00005653u, 0x00050080u, 0x00000008u, 0x00005655u, 0x00005654u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00005656u, 0x00005655u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00005657u, 0x0000564eu, 0x00005656u, 0x0003003eu, 0x00005645u, 0x00005657u, 0x0004003du, 0x00000008u, 0x00005659u, 0x0000564du, 0x00050041u, 0x00000133u, 0x0000565au, 0x0000195cu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x0000565bu, 0x0000565au, 0x00040072u, 0x00000008u, 0x0000565cu, 0x0000565bu, 0x00050041u, 0x00000040u, 0x0000565du, 0x00005644u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x0000565eu, 0x0000565du, 0x00050084u, 0x00000008u, 0x0000565fu, 0x0000565cu, 0x0000565eu, 0x00050041u, 0x00000133u, 0x00005660u, 0x0000195cu, 0x000002f8u, 0x0004003du, 0x00000012u, 0x00005661u, 0x00005660u, 0x00040072u, 0x00000008u, 0x00005662u, 0x00005661u, 0x0004003du, 0x00000008u, 0x00005664u, 0x00005652u, 0x00050084u, 0x00000008u, 0x00005665u, 0x00005662u, 0x00005664u, 0x00050080u, 0x00000008u, 0x00005666u, 0x0000565fu, 0x00005665u, 0x00050080u, 0x00000008u, 0x00005667u, 0x00005666u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00005668u, 0x00005667u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00005669u, 0x00005659u, 0x00005668u, 0x0003003eu, 0x00005646u, 0x00005669u, 0x0004003du, 0x00000008u, 0x0000566bu, 0x0000564du, 0x00050041u, 0x00000133u, 0x0000566cu, 0x0000195cu, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000566du, 0x0000566cu, 0x00040072u, 0x00000008u, 0x0000566eu, 0x0000566du, 0x0004003du, 0x00000008u, 0x00005670u, 0x0000565du, 0x00050084u, 0x00000008u, 0x00005671u, 0x0000566eu, 0x00005670u, 0x00050080u, 0x00000008u, 0x00005672u, 0x00005671u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00005673u, 0x00005672u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00005674u, 0x0000566bu, 0x00005673u, 0x0003003eu, 0x00005647u, 0x00005674u, 0x0004003du, 0x00000008u, 0x00005676u, 0x0000564du, 0x0003003eu, 0x00005648u, 0x00005676u, 0x00040072u, 0x00000012u, 0x00005678u, 0x00005657u, 0x00040072u, 0x00000012u, 0x0000567au, 0x00005669u, 0x00040072u, 0x00000012u, 0x0000567cu, 0x00005674u, 0x00040072u, 0x00000012u, 0x0000567eu, 0x00005676u, 0x00070050u, 0x00000013u, 0x0000567fu, 0x00005678u, 0x0000567au, 0x0000567cu, 0x0000567eu, 0x0003003eu, 0x00005649u, 0x0000567fu, 0x0003003eu, 0x0000194cu, 0x0000567fu, 0x000200f9u, 0x00001b8bu, 0x000200f8u, 0x00001b8bu, 0x000700f5u, 0x00000013u, 0x00009b43u, 0x0000915au, 0x000042f0u, 0x0000567fu, 0x00001b8cu, 0x000200f9u, 0x00001b67u, 0x000200f8u, 0x00001b68u, 0x0003003eu, 0x0000194du, 0x00008850u, 0x0003003eu, 0x0000194eu, 0x000021a8u, 0x00040072u, 0x00000009u, 0x00003e20u, 0x00008850u, 0x000600cau, 0x00000009u, 0x00003e21u, 0x00003e20u, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00003e19u, 0x00003e21u, 0x00050041u, 0x00000040u, 0x00003e22u, 0x00003e19u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00003e23u, 0x00003e22u, 0x00050041u, 0x00000133u, 0x00003e24u, 0x0000194eu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00003e25u, 0x00003e24u, 0x00040072u, 0x00000008u, 0x00003e26u, 0x00003e25u, 0x00050041u, 0x00000040u, 0x00003e27u, 0x00003e19u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00003e28u, 0x00003e27u, 0x00050084u, 0x00000008u, 0x00003e29u, 0x00003e26u, 0x00003e28u, 0x00050080u, 0x00000008u, 0x00003e2au, 0x00003e29u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00003e2bu, 0x00003e2au, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00003e2cu, 0x00003e23u, 0x00003e2bu, 0x0003003eu, 0x00003e1au, 0x00003e2cu, 0x0004003du, 0x00000008u, 0x00003e2eu, 0x00003e22u, 0x00050041u, 0x00000133u, 0x00003e2fu, 0x0000194eu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00003e30u, 0x00003e2fu, 0x00040072u, 0x00000008u, 0x00003e31u, 0x00003e30u, 0x00050041u, 0x00000040u, 0x00003e32u, 0x00003e19u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00003e33u, 0x00003e32u, 0x00050084u, 0x00000008u, 0x00003e34u, 0x00003e31u, 0x00003e33u, 0x00050041u, 0x00000133u, 0x00003e35u, 0x0000194eu, 0x000002f8u, 0x0004003du, 0x00000012u, 0x00003e36u, 0x00003e35u, 0x00040072u, 0x00000008u, 0x00003e37u, 0x00003e36u, 0x0004003du, 0x00000008u, 0x00003e39u, 0x00003e27u, 0x00050084u, 0x00000008u, 0x00003e3au, 0x00003e37u, 0x00003e39u, 0x00050080u, 0x00000008u, 0x00003e3bu, 0x00003e34u, 0x00003e3au, 0x00050080u, 0x00000008u, 0x00003e3cu, 0x00003e3bu, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00003e3du, 0x00003e3cu, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00003e3eu, 0x00003e2eu, 0x00003e3du, 0x0003003eu, 0x00003e1bu, 0x00003e3eu, 0x0004003du, 0x00000008u, 0x00003e40u, 0x00003e22u, 0x00050041u, 0x00000133u, 0x00003e41u, 0x0000194eu, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00003e42u, 0x00003e41u, 0x00040072u, 0x00000008u, 0x00003e43u, 0x00003e42u, 0x0004003du, 0x00000008u, 0x00003e45u, 0x00003e32u, 0x00050084u, 0x00000008u, 0x00003e46u, 0x00003e43u, 0x00003e45u, 0x00050080u, 0x00000008u, 0x00003e47u, 0x00003e46u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x00003e48u, 0x00003e47u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00003e49u, 0x00003e40u, 0x00003e48u, 0x0003003eu, 0x00003e1cu, 0x00003e49u, 0x0004003du, 0x00000008u, 0x00003e4bu, 0x00003e22u, 0x0003003eu, 0x00003e1du, 0x00003e4bu, 0x00040072u, 0x00000012u, 0x00003e4du, 0x00003e2cu, 0x00040072u, 0x00000012u, 0x00003e4fu, 0x00003e3eu, 0x00040072u, 0x00000012u, 0x00003e51u, 0x00003e49u, 0x00040072u, 0x00000012u, 0x00003e53u, 0x00003e4bu, 0x00070050u, 0x00000013u, 0x00003e54u, 0x00003e4du, 0x00003e4fu, 0x00003e51u, 0x00003e53u, 0x0003003eu, 0x00003e1eu, 0x00003e54u, 0x0003003eu, 0x0000194cu, 0x00003e54u, 0x000200f9u, 0x00001b67u, 0x000200f8u, 0x00001b67u, 0x000700f5u, 0x00000013u, 0x00009b42u, 0x00003e54u, 0x00001b68u, 0x00009b43u, 0x00001b8bu, 0x000200f9u, 0x00001b61u, 0x000200f8u, 0x00001b61u, 0x000700f5u, 0x00000013u, 0x00009aa3u, 0x00007705u, 0x00001b15u, 0x00009b42u, 0x00001b67u, 0x000600a9u, 0x00000008u, 0x00001b93u, 0x00001a08u, 0x000001a6u, 0x0000019cu, 0x000500c3u, 0x00000008u, 0x00001b94u, 0x00006ea9u, 0x00001b93u, 0x000500c3u, 0x00000008u, 0x00001b96u, 0x0000b62au, 0x000001a9u, 0x000500c7u, 0x00000008u, 0x00001b98u, 0x0000b62au, 0x000001acu, 0x0003003eu, 0x0000195fu, 0x00006eb2u, 0x0003003eu, 0x00001960u, 0x00001b94u, 0x0003003eu, 0x00001961u, 0x00001b96u, 0x0003003eu, 0x00001962u, 0x00001b98u, 0x000500b1u, 0x00000063u, 0x00005684u, 0x00001b96u, 0x000001a9u, 0x000300f7u, 0x00005685u, 0x00000000u, 0x000400fau, 0x00005684u, 0x00005686u, 0x00005687u, 0x000200f8u, 0x00005687u, 0x000500aau, 0x00000063u, 0x00005695u, 0x00001b96u, 0x000001a9u, 0x000300f7u, 0x00005696u, 0x00000000u, 0x000400fau, 0x00005695u, 0x00005697u, 0x00005698u, 0x000200f8u, 0x00005698u, 0x0003003eu, 0x00001963u, 0x0000019cu, 0x000200f9u, 0x00005696u, 0x000200f8u, 0x00005697u, 0x0004003du, 0x00000011u, 0x000056c1u, 0x00000195u, 0x000500c7u, 0x00000011u, 0x000056c2u, 0x000056c1u, 0x000002a5u, 0x00040071u, 0x00000006u, 0x000056c3u, 0x000056c2u, 0x0004007cu, 0x00000008u, 0x000056c4u, 0x000056c3u, 0x0003003eu, 0x000056c0u, 0x000056c4u, 0x0003003eu, 0x00001963u, 0x000056c4u, 0x000200f9u, 0x00005696u, 0x000200f8u, 0x00005696u, 0x000700f5u, 0x00000008u, 0x00009578u, 0x000056c4u, 0x00005697u, 0x0000019cu, 0x00005698u, 0x000200f9u, 0x00005685u, 0x000200f8u, 0x00005686u, 0x000500c7u, 0x00000008u, 0x0000568au, 0x00001b94u, 0x000001acu, 0x00050084u, 0x00000008u, 0x0000568bu, 0x0000568au, 0x000001afu, 0x000500c7u, 0x00000008u, 0x0000568du, 0x00006eb2u, 0x000001acu, 0x00050080u, 0x00000008u, 0x0000568eu, 0x0000568bu, 0x0000568du, 0x0003003eu, 0x00005680u, 0x00001176u, 0x00060041u, 0x00000174u, 0x0000568fu, 0x00005680u, 0x00001b96u, 0x0000568eu, 0x0004003du, 0x0000000fu, 0x00005690u, 0x0000568fu, 0x00040071u, 0x00000006u, 0x00005691u, 0x00005690u, 0x0004007cu, 0x00000008u, 0x00005692u, 0x00005691u, 0x00050084u, 0x00000008u, 0x00005693u, 0x00005692u, 0x00001184u, 0x0003003eu, 0x00001963u, 0x00005693u, 0x000200f9u, 0x00005685u, 0x000200f8u, 0x00005685u, 0x000700f5u, 0x00000008u, 0x00009577u, 0x00005693u, 0x00005686u, 0x00009578u, 0x00005696u, 0x000500aau, 0x00000063u, 0x0000569bu, 0x00001b98u, 0x000001acu, 0x000300f7u, 0x0000569cu, 0x00000000u, 0x000400fau, 0x0000569bu, 0x0000569du, 0x0000569eu, 0x000200f8u, 0x0000569eu, 0x000500aau, 0x00000063u, 0x000056a0u, 0x00001b98u, 0x000001a9u, 0x000300f7u, 0x000056a1u, 0x00000000u, 0x000400fau, 0x000056a0u, 0x000056a2u, 0x000056a3u, 0x000200f8u, 0x000056a3u, 0x000500afu, 0x00000063u, 0x000056a6u, 0x00001b96u, 0x000001a9u, 0x000300f7u, 0x000056a7u, 0x00000000u, 0x000400fau, 0x000056a6u, 0x000056a8u, 0x000056a9u, 0x000200f8u, 0x000056a9u, 0x000500c7u, 0x00000008u, 0x000056b7u, 0x00009577u, 0x000001b8u, 0x0003003eu, 0x00005681u, 0x000056b7u, 0x000200f9u, 0x000056a7u, 0x000200f8u, 0x000056a8u, 0x000500c7u, 0x00000008u, 0x000056abu, 0x00001b96u, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x000056adu, 0x00001b94u, 0x000001acu, 0x00050084u, 0x00000008u, 0x000056aeu, 0x000056adu, 0x000001afu, 0x000500c7u, 0x00000008u, 0x000056b0u, 0x00006eb2u, 0x000001acu, 0x00050080u, 0x00000008u, 0x000056b1u, 0x000056aeu, 0x000056b0u, 0x0003003eu, 0x00005682u, 0x00001176u, 0x00060041u, 0x00000174u, 0x000056b2u, 0x00005682u, 0x000056abu, 0x000056b1u, 0x0004003du, 0x0000000fu, 0x000056b3u, 0x000056b2u, 0x00040071u, 0x00000006u, 0x000056b4u, 0x000056b3u, 0x0004007cu, 0x00000008u, 0x000056b5u, 0x000056b4u, 0x0003003eu, 0x00005681u, 0x000056b5u, 0x000200f9u, 0x000056a7u, 0x000200f8u, 0x000056a7u, 0x000700f5u, 0x00000008u, 0x0000957du, 0x000056b5u, 0x000056a8u, 0x000056b7u, 0x000056a9u, 0x0003003eu, 0x00001964u, 0x0000957du, 0x000500aau, 0x00000063u, 0x000056bau, 0x00001b98u, 0x000001a6u, 0x000300f7u, 0x000056bbu, 0x00000000u, 0x000400fau, 0x000056bau, 0x000056bcu, 0x000056bbu, 0x000200f8u, 0x000056bcu, 0x000400c8u, 0x00000008u, 0x000056beu, 0x0000957du, 0x000500c7u, 0x00000008u, 0x000056bfu, 0x000056beu, 0x000001b8u, 0x0003003eu, 0x00001964u, 0x000056bfu, 0x000200f9u, 0x000056bbu, 0x000200f8u, 0x000056bbu, 0x000700f5u, 0x00000008u, 0x00009585u, 0x0000957du, 0x000056a7u, 0x000056bfu, 0x000056bcu, 0x000200f9u, 0x000056a1u, 0x000200f8u, 0x000056a2u, 0x0004003du, 0x00000011u, 0x000056c6u, 0x00000195u, 0x000500c7u, 0x00000011u, 0x000056c7u, 0x000056c6u, 0x00000295u, 0x00040071u, 0x00000006u, 0x000056c8u, 0x000056c7u, 0x0004007cu, 0x00000008u, 0x000056c9u, 0x000056c8u, 0x0003003eu, 0x000056c5u, 0x000056c9u, 0x0003003eu, 0x00001964u, 0x000056c9u, 0x000200f9u, 0x000056a1u, 0x000200f8u, 0x000056a1u, 0x000700f5u, 0x00000008u, 0x00009584u, 0x000056c9u, 0x000056a2u, 0x00009585u, 0x000056bbu, 0x000200f9u, 0x0000569cu, 0x000200f8u, 0x0000569du, 0x0003003eu, 0x00001964u, 0x0000019cu, 0x000200f9u, 0x0000569cu, 0x000200f8u, 0x0000569cu, 0x000700f5u, 0x00000008u, 0x00009583u, 0x0000019cu, 0x0000569du, 0x00009584u, 0x000056a1u, 0x0003003eu, 0x0000195du, 0x00009577u, 0x0003003eu, 0x0000195eu, 0x00009583u, 0x000300f7u, 0x00001b9eu, 0x00000000u, 0x000400fau, 0x00001a05u, 0x00001b9fu, 0x00001ba0u, 0x000200f8u, 0x00001ba0u, 0x0004003du, 0x00000010u, 0x00001be0u, 0x00001906u, 0x0004003du, 0x00000011u, 0x00005a85u, 0x00000195u, 0x000500c7u, 0x00000011u, 0x00005a86u, 0x00005a85u, 0x00000295u, 0x000500c4u, 0x00000011u, 0x00005a87u, 0x00005a86u, 0x00000297u, 0x000500c5u, 0x00000011u, 0x00005a88u, 0x00005a87u, 0x00000299u, 0x0004007cu, 0x00000012u, 0x00005a89u, 0x00005a88u, 0x0003003eu, 0x00005a84u, 0x00005a89u, 0x000d0050u, 0x0000015cu, 0x00001be5u, 0x00002194u, 0x00002196u, 0x00002198u, 0x0000219au, 0x00001be0u, 0x000016afu, 0x00008850u, 0x00009aa3u, 0x00009b4du, 0x00005a89u, 0x0003003eu, 0x00006ca2u, 0x00002194u, 0x0003003eu, 0x00006ca3u, 0x00002196u, 0x0003003eu, 0x00006ca4u, 0x00002198u, 0x0003003eu, 0x00006ca5u, 0x0000219au, 0x0003003eu, 0x00006ca6u, 0x00001be0u, 0x0003003eu, 0x00006ca7u, 0x000016afu, 0x0003003eu, 0x00006ca8u, 0x00008850u, 0x0003003eu, 0x00006ca9u, 0x00009aa3u, 0x0003003eu, 0x00006caau, 0x00009b4du, 0x0003003eu, 0x00006cabu, 0x00005a89u, 0x0003003eu, 0x00006cc1u, 0x00002194u, 0x0003003eu, 0x00006cc2u, 0x00002196u, 0x0003003eu, 0x00006cc3u, 0x00002198u, 0x0003003eu, 0x00006cc4u, 0x0000219au, 0x0003003eu, 0x00006cc5u, 0x00001be0u, 0x0003003eu, 0x00006cc6u, 0x000016afu, 0x0003003eu, 0x00006cc7u, 0x00008850u, 0x0003003eu, 0x00006cc8u, 0x00009aa3u, 0x0003003eu, 0x00006cc9u, 0x00009b4du, 0x0003003eu, 0x00006ccau, 0x00005a89u, 0x0004003du, 0x00000010u, 0x00001be7u, 0x000018cau, 0x0003003eu, 0x0000197bu, 0x00001be7u, 0x0004003du, 0x00000010u, 0x00001be8u, 0x000018cbu, 0x0003003eu, 0x0000197cu, 0x00001be8u, 0x0003003eu, 0x0000197du, 0x00009583u, 0x0003003eu, 0x0000197eu, 0x00001a9cu, 0x0003003eu, 0x0000197fu, 0x000019f0u, 0x0003003eu, 0x00001980u, 0x000019f3u, 0x00050041u, 0x00000174u, 0x00005aa3u, 0x0000197bu, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x00005aa4u, 0x00005aa3u, 0x00040071u, 0x00000006u, 0x00005aa5u, 0x00005aa4u, 0x0004007cu, 0x00000008u, 0x00005aa6u, 0x00005aa5u, 0x00050041u, 0x00000174u, 0x00005aa7u, 0x0000197cu, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x00005aa8u, 0x00005aa7u, 0x00040071u, 0x00000006u, 0x00005aa9u, 0x00005aa8u, 0x0004007cu, 0x00000008u, 0x00005aaau, 0x00005aa9u, 0x0003003eu, 0x00005c6bu, 0x00002194u, 0x0003003eu, 0x00005c6du, 0x00001be0u, 0x0003003eu, 0x00005c6eu, 0x000016afu, 0x0003003eu, 0x00005c6fu, 0x00008850u, 0x0003003eu, 0x00005c70u, 0x00009aa3u, 0x0003003eu, 0x00005c72u, 0x00005a89u, 0x0003003eu, 0x00005a8cu, 0x00005aa6u, 0x0003003eu, 0x00005a8du, 0x00005aaau, 0x000300f7u, 0x00005afau, 0x00000000u, 0x000f00fbu, 0x00005aa6u, 0x00005afbu, 0x00000000u, 0x00005afcu, 0x00000001u, 0x00005afdu, 0x00000002u, 0x00005afeu, 0x00000004u, 0x00005affu, 0x00000007u, 0x00005b00u, 0x00000006u, 0x00005b01u, 0x000200f8u, 0x00005b01u, 0x0003003eu, 0x00005af6u, 0x00001200u, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005b00u, 0x00040072u, 0x00000008u, 0x00005b1au, 0x00005a89u, 0x00060050u, 0x0000005du, 0x00005b1bu, 0x00005b1au, 0x00005b1au, 0x00005b1au, 0x0003003eu, 0x00005af6u, 0x00005b1bu, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005affu, 0x0004003du, 0x00000010u, 0x00005b14u, 0x00005c6du, 0x0008004fu, 0x000011f3u, 0x00005b15u, 0x00005b14u, 0x00005b14u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005b16u, 0x00005b15u, 0x0004007cu, 0x0000005du, 0x00005b17u, 0x00005b16u, 0x0003003eu, 0x00005af6u, 0x00005b17u, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005afeu, 0x0004003du, 0x00000013u, 0x00005b10u, 0x00005c70u, 0x0008004fu, 0x0000065au, 0x00005b11u, 0x00005b10u, 0x00005b10u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005b12u, 0x00005b11u, 0x0003003eu, 0x00005af6u, 0x00005b12u, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005afdu, 0x0004003du, 0x00000013u, 0x00005b0cu, 0x00005c6fu, 0x0008004fu, 0x0000065au, 0x00005b0du, 0x00005b0cu, 0x00005b0cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005b0eu, 0x00005b0du, 0x0003003eu, 0x00005af6u, 0x00005b0eu, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005afcu, 0x0004003du, 0x00000013u, 0x00005b08u, 0x00005c6eu, 0x0008004fu, 0x0000065au, 0x00005b09u, 0x00005b08u, 0x00005b08u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005b0au, 0x00005b09u, 0x0003003eu, 0x00005af6u, 0x00005b0au, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005afbu, 0x0004003du, 0x00000010u, 0x00005b03u, 0x00005c6bu, 0x0008004fu, 0x000011f3u, 0x00005b04u, 0x00005b03u, 0x00005b03u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005b05u, 0x00005b04u, 0x0004007cu, 0x0000005du, 0x00005b06u, 0x00005b05u, 0x0003003eu, 0x00005af6u, 0x00005b06u, 0x000200f9u, 0x00005afau, 0x000200f8u, 0x00005afau, 0x001100f5u, 0x0000005du, 0x00009f18u, 0x00005b06u, 0x00005afbu, 0x00005b0au, 0x00005afcu, 0x00005b0eu, 0x00005afdu, 0x00005b12u, 0x00005afeu, 0x00005b17u, 0x00005affu, 0x00005b1bu, 0x00005b00u, 0x00001200u, 0x00005b01u, 0x000300f7u, 0x00005b1du, 0x00000000u, 0x000d00fbu, 0x00005aaau, 0x00005b1eu, 0x00000000u, 0x00005b1fu, 0x00000001u, 0x00005b20u, 0x00000002u, 0x00005b21u, 0x00000004u, 0x00005b22u, 0x00000006u, 0x00005b23u, 0x000200f8u, 0x00005b23u, 0x0003003eu, 0x00005af7u, 0x000011ffu, 0x000200f9u, 0x00005b1du, 0x000200f8u, 0x00005b22u, 0x00050041u, 0x00000174u, 0x00005c7du, 0x00005c6du, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005b32u, 0x00005c7du, 0x00040071u, 0x00000006u, 0x00005b33u, 0x00005b32u, 0x0004007cu, 0x00000008u, 0x00005b34u, 0x00005b33u, 0x0003003eu, 0x00005af7u, 0x00005b34u, 0x000200f9u, 0x00005b1du, 0x000200f8u, 0x00005b21u, 0x00050041u, 0x00000133u, 0x00005c7cu, 0x00005c70u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005b2fu, 0x00005c7cu, 0x00040072u, 0x00000008u, 0x00005b30u, 0x00005b2fu, 0x0003003eu, 0x00005af7u, 0x00005b30u, 0x000200f9u, 0x00005b1du, 0x000200f8u, 0x00005b20u, 0x00050041u, 0x00000133u, 0x00005c7bu, 0x00005c6fu, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005b2cu, 0x00005c7bu, 0x00040072u, 0x00000008u, 0x00005b2du, 0x00005b2cu, 0x0003003eu, 0x00005af7u, 0x00005b2du, 0x000200f9u, 0x00005b1du, 0x000200f8u, 0x00005b1fu, 0x00050041u, 0x00000133u, 0x00005c7au, 0x00005c6eu, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005b29u, 0x00005c7au, 0x00040072u, 0x00000008u, 0x00005b2au, 0x00005b29u, 0x0003003eu, 0x00005af7u, 0x00005b2au, 0x000200f9u, 0x00005b1du, 0x000200f8u, 0x00005b1eu, 0x00050041u, 0x00000174u, 0x00005c79u, 0x00005c6bu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005b25u, 0x00005c79u, 0x00040071u, 0x00000006u, 0x00005b26u, 0x00005b25u, 0x0004007cu, 0x00000008u, 0x00005b27u, 0x00005b26u, 0x0003003eu, 0x00005af7u, 0x00005b27u, 0x000200f9u, 0x00005b1du, 0x000200f8u, 0x00005b1du, 0x000f00f5u, 0x00000008u, 0x00009f19u, 0x00005b27u, 0x00005b1eu, 0x00005b2au, 0x00005b1fu, 0x00005b2du, 0x00005b20u, 0x00005b30u, 0x00005b21u, 0x00005b34u, 0x00005b22u, 0x000011ffu, 0x00005b23u, 0x00050051u, 0x00000008u, 0x00005b37u, 0x00009f18u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005b38u, 0x00009f18u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005b39u, 0x00009f18u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005b3au, 0x00005b37u, 0x00005b38u, 0x00005b39u, 0x00009f19u, 0x0003003eu, 0x00005af8u, 0x00005b3au, 0x0003003eu, 0x00005a8au, 0x00005b3au, 0x00050041u, 0x00000174u, 0x00005aadu, 0x0000197bu, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00005aaeu, 0x00005aadu, 0x00040071u, 0x00000006u, 0x00005aafu, 0x00005aaeu, 0x0004007cu, 0x00000008u, 0x00005ab0u, 0x00005aafu, 0x00050041u, 0x00000174u, 0x00005ab1u, 0x0000197cu, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00005ab2u, 0x00005ab1u, 0x00040071u, 0x00000006u, 0x00005ab3u, 0x00005ab2u, 0x0004007cu, 0x00000008u, 0x00005ab4u, 0x00005ab3u, 0x0003003eu, 0x00005c7eu, 0x00002196u, 0x0003003eu, 0x00005c7fu, 0x00001be0u, 0x0003003eu, 0x00005c80u, 0x000016afu, 0x0003003eu, 0x00005c81u, 0x00008850u, 0x0003003eu, 0x00005c82u, 0x00009aa3u, 0x0003003eu, 0x00005a90u, 0x00005ab0u, 0x0003003eu, 0x00005a91u, 0x00005ab4u, 0x000300f7u, 0x00005b3fu, 0x00000000u, 0x000d00fbu, 0x00005ab0u, 0x00005b40u, 0x00000000u, 0x00005b41u, 0x00000001u, 0x00005b42u, 0x00000002u, 0x00005b43u, 0x00000004u, 0x00005b44u, 0x00000007u, 0x00005b45u, 0x000200f8u, 0x00005b45u, 0x00050041u, 0x00000174u, 0x00005c88u, 0x00005c7eu, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00005b5du, 0x00005c88u, 0x00040071u, 0x00000006u, 0x00005b5eu, 0x00005b5du, 0x0004007cu, 0x00000008u, 0x00005b5fu, 0x00005b5eu, 0x000500c4u, 0x00000008u, 0x00005b60u, 0x00005b5fu, 0x000001d9u, 0x00050041u, 0x00000174u, 0x00005c89u, 0x00005c7eu, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00005b62u, 0x00005c89u, 0x00040071u, 0x00000006u, 0x00005b63u, 0x00005b62u, 0x0004007cu, 0x00000008u, 0x00005b64u, 0x00005b63u, 0x000500c5u, 0x00000008u, 0x00005b65u, 0x00005b60u, 0x00005b64u, 0x00060050u, 0x0000005du, 0x00005b66u, 0x00005b65u, 0x00005b65u, 0x00005b65u, 0x0003003eu, 0x00005b3bu, 0x00005b66u, 0x000200f9u, 0x00005b3fu, 0x000200f8u, 0x00005b44u, 0x0004003du, 0x00000010u, 0x00005b58u, 0x00005c7fu, 0x0008004fu, 0x000011f3u, 0x00005b59u, 0x00005b58u, 0x00005b58u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005b5au, 0x00005b59u, 0x0004007cu, 0x0000005du, 0x00005b5bu, 0x00005b5au, 0x0003003eu, 0x00005b3bu, 0x00005b5bu, 0x000200f9u, 0x00005b3fu, 0x000200f8u, 0x00005b43u, 0x0004003du, 0x00000013u, 0x00005b54u, 0x00005c82u, 0x0008004fu, 0x0000065au, 0x00005b55u, 0x00005b54u, 0x00005b54u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005b56u, 0x00005b55u, 0x0003003eu, 0x00005b3bu, 0x00005b56u, 0x000200f9u, 0x00005b3fu, 0x000200f8u, 0x00005b42u, 0x0004003du, 0x00000013u, 0x00005b50u, 0x00005c81u, 0x0008004fu, 0x0000065au, 0x00005b51u, 0x00005b50u, 0x00005b50u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005b52u, 0x00005b51u, 0x0003003eu, 0x00005b3bu, 0x00005b52u, 0x000200f9u, 0x00005b3fu, 0x000200f8u, 0x00005b41u, 0x0004003du, 0x00000013u, 0x00005b4cu, 0x00005c80u, 0x0008004fu, 0x0000065au, 0x00005b4du, 0x00005b4cu, 0x00005b4cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005b4eu, 0x00005b4du, 0x0003003eu, 0x00005b3bu, 0x00005b4eu, 0x000200f9u, 0x00005b3fu, 0x000200f8u, 0x00005b40u, 0x0004003du, 0x00000010u, 0x00005b47u, 0x00005c7eu, 0x0008004fu, 0x000011f3u, 0x00005b48u, 0x00005b47u, 0x00005b47u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005b49u, 0x00005b48u, 0x0004007cu, 0x0000005du, 0x00005b4au, 0x00005b49u, 0x0003003eu, 0x00005b3bu, 0x00005b4au, 0x000200f9u, 0x00005b3fu, 0x000200f8u, 0x00005b3fu, 0x000f00f5u, 0x0000005du, 0x00009f30u, 0x00005b4au, 0x00005b40u, 0x00005b4eu, 0x00005b41u, 0x00005b52u, 0x00005b42u, 0x00005b56u, 0x00005b43u, 0x00005b5bu, 0x00005b44u, 0x00005b66u, 0x00005b45u, 0x000300f7u, 0x00005b68u, 0x00000000u, 0x000d00fbu, 0x00005ab4u, 0x00005b69u, 0x00000000u, 0x00005b6au, 0x00000001u, 0x00005b6bu, 0x00000002u, 0x00005b6cu, 0x00000004u, 0x00005b6du, 0x00000006u, 0x00005b6eu, 0x000200f8u, 0x00005b6eu, 0x0003003eu, 0x00005b3cu, 0x000011ffu, 0x000200f9u, 0x00005b68u, 0x000200f8u, 0x00005b6du, 0x00050041u, 0x00000174u, 0x00005c8eu, 0x00005c7fu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005b7du, 0x00005c8eu, 0x00040071u, 0x00000006u, 0x00005b7eu, 0x00005b7du, 0x0004007cu, 0x00000008u, 0x00005b7fu, 0x00005b7eu, 0x0003003eu, 0x00005b3cu, 0x00005b7fu, 0x000200f9u, 0x00005b68u, 0x000200f8u, 0x00005b6cu, 0x00050041u, 0x00000133u, 0x00005c8du, 0x00005c82u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005b7au, 0x00005c8du, 0x00040072u, 0x00000008u, 0x00005b7bu, 0x00005b7au, 0x0003003eu, 0x00005b3cu, 0x00005b7bu, 0x000200f9u, 0x00005b68u, 0x000200f8u, 0x00005b6bu, 0x00050041u, 0x00000133u, 0x00005c8cu, 0x00005c81u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005b77u, 0x00005c8cu, 0x00040072u, 0x00000008u, 0x00005b78u, 0x00005b77u, 0x0003003eu, 0x00005b3cu, 0x00005b78u, 0x000200f9u, 0x00005b68u, 0x000200f8u, 0x00005b6au, 0x00050041u, 0x00000133u, 0x00005c8bu, 0x00005c80u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005b74u, 0x00005c8bu, 0x00040072u, 0x00000008u, 0x00005b75u, 0x00005b74u, 0x0003003eu, 0x00005b3cu, 0x00005b75u, 0x000200f9u, 0x00005b68u, 0x000200f8u, 0x00005b69u, 0x00050041u, 0x00000174u, 0x00005c8au, 0x00005c7eu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005b70u, 0x00005c8au, 0x00040071u, 0x00000006u, 0x00005b71u, 0x00005b70u, 0x0004007cu, 0x00000008u, 0x00005b72u, 0x00005b71u, 0x0003003eu, 0x00005b3cu, 0x00005b72u, 0x000200f9u, 0x00005b68u, 0x000200f8u, 0x00005b68u, 0x000f00f5u, 0x00000008u, 0x00009f31u, 0x00005b72u, 0x00005b69u, 0x00005b75u, 0x00005b6au, 0x00005b78u, 0x00005b6bu, 0x00005b7bu, 0x00005b6cu, 0x00005b7fu, 0x00005b6du, 0x000011ffu, 0x00005b6eu, 0x00050051u, 0x00000008u, 0x00005b82u, 0x00009f30u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005b83u, 0x00009f30u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005b84u, 0x00009f30u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005b85u, 0x00005b82u, 0x00005b83u, 0x00005b84u, 0x00009f31u, 0x0003003eu, 0x00005b3du, 0x00005b85u, 0x0003003eu, 0x00005a8eu, 0x00005b85u, 0x00050041u, 0x00000174u, 0x00005ab7u, 0x0000197bu, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00005ab8u, 0x00005ab7u, 0x00040071u, 0x00000006u, 0x00005ab9u, 0x00005ab8u, 0x0004007cu, 0x00000008u, 0x00005abau, 0x00005ab9u, 0x00050041u, 0x00000174u, 0x00005abbu, 0x0000197cu, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00005abcu, 0x00005abbu, 0x00040071u, 0x00000006u, 0x00005abdu, 0x00005abcu, 0x0004007cu, 0x00000008u, 0x00005abeu, 0x00005abdu, 0x0003003eu, 0x00005c8fu, 0x00002198u, 0x0003003eu, 0x00005c90u, 0x00001be0u, 0x0003003eu, 0x00005c91u, 0x000016afu, 0x0003003eu, 0x00005c92u, 0x00008850u, 0x0003003eu, 0x00005c93u, 0x00009aa3u, 0x0003003eu, 0x00005c94u, 0x00009b4du, 0x0003003eu, 0x00005a94u, 0x00005abau, 0x0003003eu, 0x00005a95u, 0x00005abeu, 0x000300f7u, 0x00005b8au, 0x00000000u, 0x001700fbu, 0x00005abau, 0x00005b8bu, 0x00000000u, 0x00005b8cu, 0x00000007u, 0x00005b8du, 0x00000001u, 0x00005b8eu, 0x00000002u, 0x00005b8fu, 0x00000004u, 0x00005b90u, 0x00000008u, 0x00005b91u, 0x00000009u, 0x00005b92u, 0x0000000bu, 0x00005b93u, 0x0000000du, 0x00005b94u, 0x0000000fu, 0x00005b95u, 0x000200f8u, 0x00005b95u, 0x00050041u, 0x00000174u, 0x00005c9bu, 0x00005c8fu, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00005bc2u, 0x00005c9bu, 0x00040071u, 0x00000006u, 0x00005bc3u, 0x00005bc2u, 0x0004007cu, 0x00000008u, 0x00005bc4u, 0x00005bc3u, 0x000500c4u, 0x00000008u, 0x00005bc5u, 0x00005bc4u, 0x000001d9u, 0x00050041u, 0x00000174u, 0x00005c9cu, 0x00005c8fu, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00005bc7u, 0x00005c9cu, 0x00040071u, 0x00000006u, 0x00005bc8u, 0x00005bc7u, 0x0004007cu, 0x00000008u, 0x00005bc9u, 0x00005bc8u, 0x000500c5u, 0x00000008u, 0x00005bcau, 0x00005bc5u, 0x00005bc9u, 0x00060050u, 0x0000005du, 0x00005bcbu, 0x00005bcau, 0x00005bcau, 0x00005bcau, 0x0003003eu, 0x00005b86u, 0x00005bcbu, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b94u, 0x00040072u, 0x00000008u, 0x00005bbfu, 0x00009b4du, 0x00060050u, 0x0000005du, 0x00005bc0u, 0x00005bbfu, 0x00005bbfu, 0x00005bbfu, 0x0003003eu, 0x00005b86u, 0x00005bc0u, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b93u, 0x0004003du, 0x00000010u, 0x00005bb9u, 0x00005c90u, 0x0008004fu, 0x000011f3u, 0x00005bbau, 0x00005bb9u, 0x00005bb9u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000026du, 0x00005bbbu, 0x00005bbau, 0x0004007cu, 0x0000005du, 0x00005bbcu, 0x00005bbbu, 0x0003003eu, 0x00005b86u, 0x00005bbcu, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b92u, 0x0004003du, 0x00000013u, 0x00005bb5u, 0x00005c93u, 0x0008004fu, 0x0000065au, 0x00005bb6u, 0x00005bb5u, 0x00005bb5u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x00005bb7u, 0x00005bb6u, 0x0003003eu, 0x00005b86u, 0x00005bb7u, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b91u, 0x0004003du, 0x00000013u, 0x00005bb1u, 0x00005c92u, 0x0008004fu, 0x0000065au, 0x00005bb2u, 0x00005bb1u, 0x00005bb1u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x00005bb3u, 0x00005bb2u, 0x0003003eu, 0x00005b86u, 0x00005bb3u, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b90u, 0x0004003du, 0x00000010u, 0x00005bacu, 0x00005c90u, 0x0008004fu, 0x000011f3u, 0x00005badu, 0x00005bacu, 0x00005bacu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005baeu, 0x00005badu, 0x0004007cu, 0x0000005du, 0x00005bafu, 0x00005baeu, 0x0003003eu, 0x00005b86u, 0x00005bafu, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b8fu, 0x0004003du, 0x00000013u, 0x00005ba8u, 0x00005c93u, 0x0008004fu, 0x0000065au, 0x00005ba9u, 0x00005ba8u, 0x00005ba8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005baau, 0x00005ba9u, 0x0003003eu, 0x00005b86u, 0x00005baau, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b8eu, 0x0004003du, 0x00000013u, 0x00005ba4u, 0x00005c92u, 0x0008004fu, 0x0000065au, 0x00005ba5u, 0x00005ba4u, 0x00005ba4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005ba6u, 0x00005ba5u, 0x0003003eu, 0x00005b86u, 0x00005ba6u, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b8du, 0x00040072u, 0x0000005du, 0x00005ba2u, 0x0000b629u, 0x0003003eu, 0x00005b86u, 0x00005ba2u, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b8cu, 0x00040072u, 0x0000005du, 0x00005b9eu, 0x0000b629u, 0x0003003eu, 0x00005b86u, 0x00005b9eu, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b8bu, 0x0004003du, 0x00000010u, 0x00005b97u, 0x00005c8fu, 0x0008004fu, 0x000011f3u, 0x00005b98u, 0x00005b97u, 0x00005b97u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005b99u, 0x00005b98u, 0x0004007cu, 0x0000005du, 0x00005b9au, 0x00005b99u, 0x0003003eu, 0x00005b86u, 0x00005b9au, 0x000200f9u, 0x00005b8au, 0x000200f8u, 0x00005b8au, 0x001900f5u, 0x0000005du, 0x00009f49u, 0x00005b9au, 0x00005b8bu, 0x00005b9eu, 0x00005b8cu, 0x00005ba2u, 0x00005b8du, 0x00005ba6u, 0x00005b8eu, 0x00005baau, 0x00005b8fu, 0x00005bafu, 0x00005b90u, 0x00005bb3u, 0x00005b91u, 0x00005bb7u, 0x00005b92u, 0x00005bbcu, 0x00005b93u, 0x00005bc0u, 0x00005b94u, 0x00005bcbu, 0x00005b95u, 0x000300f7u, 0x00005bcdu, 0x00000000u, 0x000b00fbu, 0x00005abeu, 0x00005bceu, 0x00000000u, 0x00005bcfu, 0x00000001u, 0x00005bd0u, 0x00000002u, 0x00005bd1u, 0x00000004u, 0x00005bd2u, 0x000200f8u, 0x00005bd2u, 0x00050041u, 0x00000174u, 0x00005ca0u, 0x00005c90u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005be1u, 0x00005ca0u, 0x00040071u, 0x00000006u, 0x00005be2u, 0x00005be1u, 0x0004007cu, 0x00000008u, 0x00005be3u, 0x00005be2u, 0x0003003eu, 0x00005b87u, 0x00005be3u, 0x000200f9u, 0x00005bcdu, 0x000200f8u, 0x00005bd1u, 0x00050041u, 0x00000133u, 0x00005c9fu, 0x00005c93u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005bdeu, 0x00005c9fu, 0x00040072u, 0x00000008u, 0x00005bdfu, 0x00005bdeu, 0x0003003eu, 0x00005b87u, 0x00005bdfu, 0x000200f9u, 0x00005bcdu, 0x000200f8u, 0x00005bd0u, 0x00050041u, 0x00000133u, 0x00005c9eu, 0x00005c92u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005bdbu, 0x00005c9eu, 0x00040072u, 0x00000008u, 0x00005bdcu, 0x00005bdbu, 0x0003003eu, 0x00005b87u, 0x00005bdcu, 0x000200f9u, 0x00005bcdu, 0x000200f8u, 0x00005bcfu, 0x00040072u, 0x00000008u, 0x00005bd9u, 0x00009b4du, 0x0003003eu, 0x00005b87u, 0x00005bd9u, 0x000200f9u, 0x00005bcdu, 0x000200f8u, 0x00005bceu, 0x00050041u, 0x00000174u, 0x00005c9du, 0x00005c8fu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005bd4u, 0x00005c9du, 0x00040071u, 0x00000006u, 0x00005bd5u, 0x00005bd4u, 0x0004007cu, 0x00000008u, 0x00005bd6u, 0x00005bd5u, 0x0003003eu, 0x00005b87u, 0x00005bd6u, 0x000200f9u, 0x00005bcdu, 0x000200f8u, 0x00005bcdu, 0x000d00f5u, 0x00000008u, 0x00009f4au, 0x00005bd6u, 0x00005bceu, 0x00005bd9u, 0x00005bcfu, 0x00005bdcu, 0x00005bd0u, 0x00005bdfu, 0x00005bd1u, 0x00005be3u, 0x00005bd2u, 0x00050051u, 0x00000008u, 0x00005be6u, 0x00009f49u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005be7u, 0x00009f49u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005be8u, 0x00009f49u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005be9u, 0x00005be6u, 0x00005be7u, 0x00005be8u, 0x00009f4au, 0x0003003eu, 0x00005b88u, 0x00005be9u, 0x0003003eu, 0x00005a92u, 0x00005be9u, 0x00050041u, 0x00000174u, 0x00005ac1u, 0x0000197bu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005ac2u, 0x00005ac1u, 0x00040071u, 0x00000006u, 0x00005ac3u, 0x00005ac2u, 0x0004007cu, 0x00000008u, 0x00005ac4u, 0x00005ac3u, 0x00050041u, 0x00000174u, 0x00005ac5u, 0x0000197cu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005ac6u, 0x00005ac5u, 0x00040071u, 0x00000006u, 0x00005ac7u, 0x00005ac6u, 0x0004007cu, 0x00000008u, 0x00005ac8u, 0x00005ac7u, 0x0003003eu, 0x00005ca1u, 0x0000219au, 0x0003003eu, 0x00005ca2u, 0x00001be0u, 0x0003003eu, 0x00005ca3u, 0x000016afu, 0x0003003eu, 0x00005ca4u, 0x00008850u, 0x0003003eu, 0x00005ca5u, 0x00009aa3u, 0x0003003eu, 0x00005a98u, 0x00005ac4u, 0x0003003eu, 0x00005a99u, 0x00005ac8u, 0x000300f7u, 0x00005beeu, 0x00000000u, 0x000d00fbu, 0x00005ac4u, 0x00005befu, 0x00000000u, 0x00005bf0u, 0x00000001u, 0x00005bf1u, 0x00000002u, 0x00005bf2u, 0x00000004u, 0x00005bf3u, 0x00000006u, 0x00005bf4u, 0x000200f8u, 0x00005bf4u, 0x0003003eu, 0x00005beau, 0x00001200u, 0x000200f9u, 0x00005beeu, 0x000200f8u, 0x00005bf3u, 0x0004003du, 0x00000010u, 0x00005c07u, 0x00005ca2u, 0x0008004fu, 0x000011f3u, 0x00005c08u, 0x00005c07u, 0x00005c07u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005c09u, 0x00005c08u, 0x0004007cu, 0x0000005du, 0x00005c0au, 0x00005c09u, 0x0003003eu, 0x00005beau, 0x00005c0au, 0x000200f9u, 0x00005beeu, 0x000200f8u, 0x00005bf2u, 0x0004003du, 0x00000013u, 0x00005c03u, 0x00005ca5u, 0x0008004fu, 0x0000065au, 0x00005c04u, 0x00005c03u, 0x00005c03u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005c05u, 0x00005c04u, 0x0003003eu, 0x00005beau, 0x00005c05u, 0x000200f9u, 0x00005beeu, 0x000200f8u, 0x00005bf1u, 0x0004003du, 0x00000013u, 0x00005bffu, 0x00005ca4u, 0x0008004fu, 0x0000065au, 0x00005c00u, 0x00005bffu, 0x00005bffu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005c01u, 0x00005c00u, 0x0003003eu, 0x00005beau, 0x00005c01u, 0x000200f9u, 0x00005beeu, 0x000200f8u, 0x00005bf0u, 0x0004003du, 0x00000013u, 0x00005bfbu, 0x00005ca3u, 0x0008004fu, 0x0000065au, 0x00005bfcu, 0x00005bfbu, 0x00005bfbu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005bfdu, 0x00005bfcu, 0x0003003eu, 0x00005beau, 0x00005bfdu, 0x000200f9u, 0x00005beeu, 0x000200f8u, 0x00005befu, 0x0004003du, 0x00000010u, 0x00005bf6u, 0x00005ca1u, 0x0008004fu, 0x000011f3u, 0x00005bf7u, 0x00005bf6u, 0x00005bf6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005bf8u, 0x00005bf7u, 0x0004007cu, 0x0000005du, 0x00005bf9u, 0x00005bf8u, 0x0003003eu, 0x00005beau, 0x00005bf9u, 0x000200f9u, 0x00005beeu, 0x000200f8u, 0x00005beeu, 0x000f00f5u, 0x0000005du, 0x00009f61u, 0x00005bf9u, 0x00005befu, 0x00005bfdu, 0x00005bf0u, 0x00005c01u, 0x00005bf1u, 0x00005c05u, 0x00005bf2u, 0x00005c0au, 0x00005bf3u, 0x00001200u, 0x00005bf4u, 0x000300f7u, 0x00005c0cu, 0x00000000u, 0x000d00fbu, 0x00005ac8u, 0x00005c0du, 0x00000000u, 0x00005c0eu, 0x00000001u, 0x00005c0fu, 0x00000002u, 0x00005c10u, 0x00000004u, 0x00005c11u, 0x00000006u, 0x00005c12u, 0x000200f8u, 0x00005c12u, 0x0003003eu, 0x00005bebu, 0x000011ffu, 0x000200f9u, 0x00005c0cu, 0x000200f8u, 0x00005c11u, 0x00050041u, 0x00000174u, 0x00005cafu, 0x00005ca2u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005c21u, 0x00005cafu, 0x00040071u, 0x00000006u, 0x00005c22u, 0x00005c21u, 0x0004007cu, 0x00000008u, 0x00005c23u, 0x00005c22u, 0x0003003eu, 0x00005bebu, 0x00005c23u, 0x000200f9u, 0x00005c0cu, 0x000200f8u, 0x00005c10u, 0x00050041u, 0x00000133u, 0x00005caeu, 0x00005ca5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005c1eu, 0x00005caeu, 0x00040072u, 0x00000008u, 0x00005c1fu, 0x00005c1eu, 0x0003003eu, 0x00005bebu, 0x00005c1fu, 0x000200f9u, 0x00005c0cu, 0x000200f8u, 0x00005c0fu, 0x00050041u, 0x00000133u, 0x00005cadu, 0x00005ca4u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005c1bu, 0x00005cadu, 0x00040072u, 0x00000008u, 0x00005c1cu, 0x00005c1bu, 0x0003003eu, 0x00005bebu, 0x00005c1cu, 0x000200f9u, 0x00005c0cu, 0x000200f8u, 0x00005c0eu, 0x00050041u, 0x00000133u, 0x00005cacu, 0x00005ca3u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005c18u, 0x00005cacu, 0x00040072u, 0x00000008u, 0x00005c19u, 0x00005c18u, 0x0003003eu, 0x00005bebu, 0x00005c19u, 0x000200f9u, 0x00005c0cu, 0x000200f8u, 0x00005c0du, 0x00050041u, 0x00000174u, 0x00005cabu, 0x00005ca1u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005c14u, 0x00005cabu, 0x00040071u, 0x00000006u, 0x00005c15u, 0x00005c14u, 0x0004007cu, 0x00000008u, 0x00005c16u, 0x00005c15u, 0x0003003eu, 0x00005bebu, 0x00005c16u, 0x000200f9u, 0x00005c0cu, 0x000200f8u, 0x00005c0cu, 0x000f00f5u, 0x00000008u, 0x00009f62u, 0x00005c16u, 0x00005c0du, 0x00005c19u, 0x00005c0eu, 0x00005c1cu, 0x00005c0fu, 0x00005c1fu, 0x00005c10u, 0x00005c23u, 0x00005c11u, 0x000011ffu, 0x00005c12u, 0x00050051u, 0x00000008u, 0x00005c26u, 0x00009f61u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005c27u, 0x00009f61u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005c28u, 0x00009f61u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005c29u, 0x00005c26u, 0x00005c27u, 0x00005c28u, 0x00009f62u, 0x0003003eu, 0x00005becu, 0x00005c29u, 0x0003003eu, 0x00005a96u, 0x00005c29u, 0x0003003eu, 0x00005a9bu, 0x00005b3au, 0x0003003eu, 0x00005a9cu, 0x00005b85u, 0x0003003eu, 0x00005a9du, 0x00005be9u, 0x0003003eu, 0x00005a9eu, 0x00005c29u, 0x000600cau, 0x00000009u, 0x00005c30u, 0x00005be9u, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00005a9du, 0x00005c30u, 0x0003003eu, 0x00005c2au, 0x00005b3au, 0x00050082u, 0x00000009u, 0x00005c49u, 0x00005b3au, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005c4au, 0x00005c49u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005c4cu, 0x00005c4au, 0x0000b618u, 0x0003003eu, 0x00005c46u, 0x00005c4cu, 0x0003003eu, 0x00005a9bu, 0x00005c4cu, 0x0003003eu, 0x00005c2bu, 0x00005b85u, 0x00050082u, 0x00000009u, 0x00005c50u, 0x00005b85u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005c51u, 0x00005c50u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005c53u, 0x00005c51u, 0x0000b618u, 0x0003003eu, 0x00005c4du, 0x00005c53u, 0x0003003eu, 0x00005a9cu, 0x00005c53u, 0x0003003eu, 0x00005c2cu, 0x00005c29u, 0x00050082u, 0x00000009u, 0x00005c57u, 0x00005c29u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005c58u, 0x00005c57u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005c5au, 0x00005c58u, 0x0000b618u, 0x0003003eu, 0x00005c54u, 0x00005c5au, 0x0003003eu, 0x00005a9eu, 0x00005c5au, 0x00050082u, 0x00000009u, 0x00005c39u, 0x00005c4cu, 0x00005c53u, 0x00050084u, 0x00000009u, 0x00005c3bu, 0x00005c39u, 0x00005c30u, 0x0003003eu, 0x00005c2du, 0x00005c3bu, 0x00050080u, 0x00000009u, 0x00005c3eu, 0x00005c3bu, 0x0000b618u, 0x0003003eu, 0x00005c2du, 0x00005c3eu, 0x000500c3u, 0x00000009u, 0x00005c41u, 0x00005c3eu, 0x0000b622u, 0x00040072u, 0x00000013u, 0x00005c42u, 0x00005c41u, 0x00040072u, 0x00000013u, 0x00005c44u, 0x00005c5au, 0x00050080u, 0x00000013u, 0x00005c45u, 0x00005c42u, 0x00005c44u, 0x0003003eu, 0x00005c2eu, 0x00005c45u, 0x0003003eu, 0x00005a9au, 0x00005c45u, 0x0004003du, 0x00000013u, 0x00005ad0u, 0x00005a9au, 0x00040072u, 0x00000009u, 0x00005ad1u, 0x00005ad0u, 0x0003003eu, 0x00005a9fu, 0x00005ad1u, 0x00050082u, 0x00000009u, 0x00005c5eu, 0x00005ad1u, 0x0000b618u, 0x0003003eu, 0x00005a9fu, 0x00005c5eu, 0x000600cau, 0x00000009u, 0x00005c60u, 0x00005c5eu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00005a9fu, 0x00005c60u, 0x00050080u, 0x00000009u, 0x00005c63u, 0x00005c60u, 0x0000b618u, 0x0003003eu, 0x00005a9fu, 0x00005c63u, 0x0008000cu, 0x00000009u, 0x00005c65u, 0x00000001u, 0x0000002du, 0x00005c63u, 0x00000310u, 0x00000312u, 0x00040072u, 0x00000013u, 0x00005c66u, 0x00005c65u, 0x0003003eu, 0x00005c5bu, 0x00005c66u, 0x0003003eu, 0x00005a9au, 0x00005c66u, 0x00050041u, 0x00000133u, 0x00005ad3u, 0x00005a9au, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005ad4u, 0x00005ad3u, 0x00040072u, 0x00000008u, 0x00005ad5u, 0x00005ad4u, 0x0004003du, 0x00000012u, 0x00005ad7u, 0x00005ad3u, 0x00040072u, 0x00000008u, 0x00005ad8u, 0x00005ad7u, 0x00050080u, 0x00000008u, 0x00005ad9u, 0x00005ad8u, 0x000001a6u, 0x000500c3u, 0x00000008u, 0x00005adau, 0x00005ad9u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00005adbu, 0x00005ad5u, 0x00005adau, 0x0003003eu, 0x00005aa0u, 0x00005adbu, 0x000300f7u, 0x00005addu, 0x00000000u, 0x000400fau, 0x000019f0u, 0x00005adeu, 0x00005adfu, 0x000200f8u, 0x00005adfu, 0x000500c4u, 0x00000008u, 0x00005ae8u, 0x00001a9cu, 0x000001b2u, 0x0003003eu, 0x00005aa1u, 0x00005ae8u, 0x000200f9u, 0x00005addu, 0x000200f8u, 0x00005adeu, 0x00050084u, 0x00000008u, 0x00005ae2u, 0x00005adbu, 0x00001a9cu, 0x00050080u, 0x00000008u, 0x00005ae3u, 0x00005ae2u, 0x000001afu, 0x000500c3u, 0x00000008u, 0x00005ae4u, 0x00005ae3u, 0x000001acu, 0x0003003eu, 0x00005aa1u, 0x00005ae4u, 0x000500c3u, 0x00000008u, 0x00005ae6u, 0x00005ae4u, 0x000001b2u, 0x0003003eu, 0x0000197eu, 0x00005ae6u, 0x000200f9u, 0x00005addu, 0x000200f8u, 0x00005addu, 0x000700f5u, 0x00000008u, 0x00009f95u, 0x00005ae6u, 0x00005adeu, 0x00001a9cu, 0x00005adfu, 0x000700f5u, 0x00000008u, 0x00009f92u, 0x00005ae4u, 0x00005adeu, 0x00005ae8u, 0x00005adfu, 0x000300f7u, 0x00005aeau, 0x00000000u, 0x000400fau, 0x000019f3u, 0x00005aebu, 0x00005aecu, 0x000200f8u, 0x00005aecu, 0x00050080u, 0x00000008u, 0x00005af0u, 0x00005adbu, 0x00009583u, 0x0003003eu, 0x00005aa0u, 0x00005af0u, 0x000200f9u, 0x00005aeau, 0x000200f8u, 0x00005aebu, 0x0003003eu, 0x00005aa0u, 0x00009f92u, 0x000200f9u, 0x00005aeau, 0x000200f8u, 0x00005aeau, 0x000700f5u, 0x00000008u, 0x00009f93u, 0x00009f92u, 0x00005aebu, 0x00005af0u, 0x00005aecu, 0x0008000cu, 0x00000008u, 0x00005af2u, 0x00000001u, 0x0000002du, 0x00009f93u, 0x0000019cu, 0x00000311u, 0x00040072u, 0x00000012u, 0x00005af3u, 0x00005af2u, 0x0003003eu, 0x00005ad3u, 0x00005af3u, 0x0004003du, 0x00000013u, 0x00005af5u, 0x00005a9au, 0x0003003eu, 0x00005aa2u, 0x00005af5u, 0x0003003eu, 0x00001901u, 0x00009f95u, 0x00040072u, 0x0000031cu, 0x00001befu, 0x00005af5u, 0x0004007cu, 0x00000010u, 0x00001bf0u, 0x00001befu, 0x0003003eu, 0x00001971u, 0x00001bf0u, 0x00050041u, 0x00000174u, 0x00001bf1u, 0x00001971u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001bf2u, 0x00001bf1u, 0x0003003eu, 0x00001966u, 0x00001bf2u, 0x000200f9u, 0x00001b9eu, 0x000200f8u, 0x00001b9fu, 0x0004003du, 0x00000010u, 0x00001ba9u, 0x00001906u, 0x0004003du, 0x00000011u, 0x000056cbu, 0x00000195u, 0x000500c7u, 0x00000011u, 0x000056ccu, 0x000056cbu, 0x00000295u, 0x000500c4u, 0x00000011u, 0x000056cdu, 0x000056ccu, 0x00000297u, 0x000500c5u, 0x00000011u, 0x000056ceu, 0x000056cdu, 0x00000299u, 0x0004007cu, 0x00000012u, 0x000056cfu, 0x000056ceu, 0x0003003eu, 0x000056cau, 0x000056cfu, 0x000d0050u, 0x0000015cu, 0x00001baeu, 0x0000218cu, 0x0000218eu, 0x00002190u, 0x00002192u, 0x00001ba9u, 0x000016afu, 0x00008850u, 0x00009aa3u, 0x00009b4du, 0x000056cfu, 0x0003003eu, 0x00006bf8u, 0x0000218cu, 0x0003003eu, 0x00006bf9u, 0x0000218eu, 0x0003003eu, 0x00006bfau, 0x00002190u, 0x0003003eu, 0x00006bfbu, 0x00002192u, 0x0003003eu, 0x00006bfcu, 0x00001ba9u, 0x0003003eu, 0x00006bfdu, 0x000016afu, 0x0003003eu, 0x00006bfeu, 0x00008850u, 0x0003003eu, 0x00006bffu, 0x00009aa3u, 0x0003003eu, 0x00006c00u, 0x00009b4du, 0x0003003eu, 0x00006c01u, 0x000056cfu, 0x0003003eu, 0x00006c22u, 0x0000218cu, 0x0003003eu, 0x00006c23u, 0x0000218eu, 0x0003003eu, 0x00006c24u, 0x00002190u, 0x0003003eu, 0x00006c25u, 0x00002192u, 0x0003003eu, 0x00006c26u, 0x00001ba9u, 0x0003003eu, 0x00006c27u, 0x000016afu, 0x0003003eu, 0x00006c28u, 0x00008850u, 0x0003003eu, 0x00006c29u, 0x00009aa3u, 0x0003003eu, 0x00006c2au, 0x00009b4du, 0x0003003eu, 0x00006c2bu, 0x000056cfu, 0x0004003du, 0x00000010u, 0x00001bb0u, 0x000018c8u, 0x0003003eu, 0x00001968u, 0x00001bb0u, 0x0004003du, 0x00000010u, 0x00001bb1u, 0x000018c9u, 0x0003003eu, 0x00001969u, 0x00001bb1u, 0x0003003eu, 0x0000196au, 0x00009583u, 0x0003003eu, 0x0000196bu, 0x00001a9cu, 0x0003003eu, 0x0000196cu, 0x000019f0u, 0x0003003eu, 0x0000196du, 0x000019f3u, 0x0003003eu, 0x0000196eu, 0x00001a11u, 0x00050041u, 0x00000174u, 0x000056eau, 0x00001968u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000056ebu, 0x000056eau, 0x00040071u, 0x00000006u, 0x000056ecu, 0x000056ebu, 0x0004007cu, 0x00000008u, 0x000056edu, 0x000056ecu, 0x00050041u, 0x00000174u, 0x000056eeu, 0x00001969u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000056efu, 0x000056eeu, 0x00040071u, 0x00000006u, 0x000056f0u, 0x000056efu, 0x0004007cu, 0x00000008u, 0x000056f1u, 0x000056f0u, 0x0003003eu, 0x00005cf3u, 0x0000218cu, 0x0003003eu, 0x00005cf4u, 0x00001ba9u, 0x0003003eu, 0x00005cf5u, 0x000016afu, 0x0003003eu, 0x00005cf6u, 0x00008850u, 0x0003003eu, 0x00005cf7u, 0x00009aa3u, 0x0003003eu, 0x00005cf8u, 0x000056cfu, 0x0003003eu, 0x000056d2u, 0x000056edu, 0x0003003eu, 0x000056d3u, 0x000056f1u, 0x000300f7u, 0x00005740u, 0x00000000u, 0x000f00fbu, 0x000056edu, 0x00005741u, 0x00000000u, 0x00005742u, 0x00000001u, 0x00005743u, 0x00000002u, 0x00005744u, 0x00000004u, 0x00005745u, 0x00000007u, 0x00005746u, 0x00000006u, 0x00005747u, 0x000200f8u, 0x00005747u, 0x0003003eu, 0x0000573cu, 0x00001200u, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005746u, 0x00040072u, 0x00000008u, 0x00005760u, 0x000056cfu, 0x00060050u, 0x0000005du, 0x00005761u, 0x00005760u, 0x00005760u, 0x00005760u, 0x0003003eu, 0x0000573cu, 0x00005761u, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005745u, 0x0004003du, 0x00000010u, 0x0000575au, 0x00005cf4u, 0x0008004fu, 0x000011f3u, 0x0000575bu, 0x0000575au, 0x0000575au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000575cu, 0x0000575bu, 0x0004007cu, 0x0000005du, 0x0000575du, 0x0000575cu, 0x0003003eu, 0x0000573cu, 0x0000575du, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005744u, 0x0004003du, 0x00000013u, 0x00005756u, 0x00005cf7u, 0x0008004fu, 0x0000065au, 0x00005757u, 0x00005756u, 0x00005756u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005758u, 0x00005757u, 0x0003003eu, 0x0000573cu, 0x00005758u, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005743u, 0x0004003du, 0x00000013u, 0x00005752u, 0x00005cf6u, 0x0008004fu, 0x0000065au, 0x00005753u, 0x00005752u, 0x00005752u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005754u, 0x00005753u, 0x0003003eu, 0x0000573cu, 0x00005754u, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005742u, 0x0004003du, 0x00000013u, 0x0000574eu, 0x00005cf5u, 0x0008004fu, 0x0000065au, 0x0000574fu, 0x0000574eu, 0x0000574eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005750u, 0x0000574fu, 0x0003003eu, 0x0000573cu, 0x00005750u, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005741u, 0x0004003du, 0x00000010u, 0x00005749u, 0x00005cf3u, 0x0008004fu, 0x000011f3u, 0x0000574au, 0x00005749u, 0x00005749u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000574bu, 0x0000574au, 0x0004007cu, 0x0000005du, 0x0000574cu, 0x0000574bu, 0x0003003eu, 0x0000573cu, 0x0000574cu, 0x000200f9u, 0x00005740u, 0x000200f8u, 0x00005740u, 0x001100f5u, 0x0000005du, 0x0000a459u, 0x0000574cu, 0x00005741u, 0x00005750u, 0x00005742u, 0x00005754u, 0x00005743u, 0x00005758u, 0x00005744u, 0x0000575du, 0x00005745u, 0x00005761u, 0x00005746u, 0x00001200u, 0x00005747u, 0x000300f7u, 0x00005763u, 0x00000000u, 0x000d00fbu, 0x000056f1u, 0x00005764u, 0x00000000u, 0x00005765u, 0x00000001u, 0x00005766u, 0x00000002u, 0x00005767u, 0x00000004u, 0x00005768u, 0x00000006u, 0x00005769u, 0x000200f8u, 0x00005769u, 0x0003003eu, 0x0000573du, 0x000011ffu, 0x000200f9u, 0x00005763u, 0x000200f8u, 0x00005768u, 0x00050041u, 0x00000174u, 0x00005d03u, 0x00005cf4u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005778u, 0x00005d03u, 0x00040071u, 0x00000006u, 0x00005779u, 0x00005778u, 0x0004007cu, 0x00000008u, 0x0000577au, 0x00005779u, 0x0003003eu, 0x0000573du, 0x0000577au, 0x000200f9u, 0x00005763u, 0x000200f8u, 0x00005767u, 0x00050041u, 0x00000133u, 0x00005d02u, 0x00005cf7u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005775u, 0x00005d02u, 0x00040072u, 0x00000008u, 0x00005776u, 0x00005775u, 0x0003003eu, 0x0000573du, 0x00005776u, 0x000200f9u, 0x00005763u, 0x000200f8u, 0x00005766u, 0x00050041u, 0x00000133u, 0x00005d01u, 0x00005cf6u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005772u, 0x00005d01u, 0x00040072u, 0x00000008u, 0x00005773u, 0x00005772u, 0x0003003eu, 0x0000573du, 0x00005773u, 0x000200f9u, 0x00005763u, 0x000200f8u, 0x00005765u, 0x00050041u, 0x00000133u, 0x00005d00u, 0x00005cf5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000576fu, 0x00005d00u, 0x00040072u, 0x00000008u, 0x00005770u, 0x0000576fu, 0x0003003eu, 0x0000573du, 0x00005770u, 0x000200f9u, 0x00005763u, 0x000200f8u, 0x00005764u, 0x00050041u, 0x00000174u, 0x00005cffu, 0x00005cf3u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000576bu, 0x00005cffu, 0x00040071u, 0x00000006u, 0x0000576cu, 0x0000576bu, 0x0004007cu, 0x00000008u, 0x0000576du, 0x0000576cu, 0x0003003eu, 0x0000573du, 0x0000576du, 0x000200f9u, 0x00005763u, 0x000200f8u, 0x00005763u, 0x000f00f5u, 0x00000008u, 0x0000a45au, 0x0000576du, 0x00005764u, 0x00005770u, 0x00005765u, 0x00005773u, 0x00005766u, 0x00005776u, 0x00005767u, 0x0000577au, 0x00005768u, 0x000011ffu, 0x00005769u, 0x00050051u, 0x00000008u, 0x0000577du, 0x0000a459u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000577eu, 0x0000a459u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000577fu, 0x0000a459u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005780u, 0x0000577du, 0x0000577eu, 0x0000577fu, 0x0000a45au, 0x0003003eu, 0x0000573eu, 0x00005780u, 0x0003003eu, 0x000056d0u, 0x00005780u, 0x00050041u, 0x00000174u, 0x000056f4u, 0x00001968u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000056f5u, 0x000056f4u, 0x00040071u, 0x00000006u, 0x000056f6u, 0x000056f5u, 0x0004007cu, 0x00000008u, 0x000056f7u, 0x000056f6u, 0x00050041u, 0x00000174u, 0x000056f8u, 0x00001969u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000056f9u, 0x000056f8u, 0x00040071u, 0x00000006u, 0x000056fau, 0x000056f9u, 0x0004007cu, 0x00000008u, 0x000056fbu, 0x000056fau, 0x0003003eu, 0x00005d04u, 0x0000218eu, 0x0003003eu, 0x00005d05u, 0x00001ba9u, 0x0003003eu, 0x00005d06u, 0x000016afu, 0x0003003eu, 0x00005d07u, 0x00008850u, 0x0003003eu, 0x00005d08u, 0x00009aa3u, 0x0003003eu, 0x000056d6u, 0x000056f7u, 0x0003003eu, 0x000056d7u, 0x000056fbu, 0x000300f7u, 0x00005785u, 0x00000000u, 0x000d00fbu, 0x000056f7u, 0x00005786u, 0x00000000u, 0x00005787u, 0x00000001u, 0x00005788u, 0x00000002u, 0x00005789u, 0x00000004u, 0x0000578au, 0x00000007u, 0x0000578bu, 0x000200f8u, 0x0000578bu, 0x00050041u, 0x00000174u, 0x00005d0eu, 0x00005d04u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000057a3u, 0x00005d0eu, 0x00040071u, 0x00000006u, 0x000057a4u, 0x000057a3u, 0x0004007cu, 0x00000008u, 0x000057a5u, 0x000057a4u, 0x000500c4u, 0x00000008u, 0x000057a6u, 0x000057a5u, 0x000001d9u, 0x00050041u, 0x00000174u, 0x00005d0fu, 0x00005d04u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000057a8u, 0x00005d0fu, 0x00040071u, 0x00000006u, 0x000057a9u, 0x000057a8u, 0x0004007cu, 0x00000008u, 0x000057aau, 0x000057a9u, 0x000500c5u, 0x00000008u, 0x000057abu, 0x000057a6u, 0x000057aau, 0x00060050u, 0x0000005du, 0x000057acu, 0x000057abu, 0x000057abu, 0x000057abu, 0x0003003eu, 0x00005781u, 0x000057acu, 0x000200f9u, 0x00005785u, 0x000200f8u, 0x0000578au, 0x0004003du, 0x00000010u, 0x0000579eu, 0x00005d05u, 0x0008004fu, 0x000011f3u, 0x0000579fu, 0x0000579eu, 0x0000579eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000057a0u, 0x0000579fu, 0x0004007cu, 0x0000005du, 0x000057a1u, 0x000057a0u, 0x0003003eu, 0x00005781u, 0x000057a1u, 0x000200f9u, 0x00005785u, 0x000200f8u, 0x00005789u, 0x0004003du, 0x00000013u, 0x0000579au, 0x00005d08u, 0x0008004fu, 0x0000065au, 0x0000579bu, 0x0000579au, 0x0000579au, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000579cu, 0x0000579bu, 0x0003003eu, 0x00005781u, 0x0000579cu, 0x000200f9u, 0x00005785u, 0x000200f8u, 0x00005788u, 0x0004003du, 0x00000013u, 0x00005796u, 0x00005d07u, 0x0008004fu, 0x0000065au, 0x00005797u, 0x00005796u, 0x00005796u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005798u, 0x00005797u, 0x0003003eu, 0x00005781u, 0x00005798u, 0x000200f9u, 0x00005785u, 0x000200f8u, 0x00005787u, 0x0004003du, 0x00000013u, 0x00005792u, 0x00005d06u, 0x0008004fu, 0x0000065au, 0x00005793u, 0x00005792u, 0x00005792u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005794u, 0x00005793u, 0x0003003eu, 0x00005781u, 0x00005794u, 0x000200f9u, 0x00005785u, 0x000200f8u, 0x00005786u, 0x0004003du, 0x00000010u, 0x0000578du, 0x00005d04u, 0x0008004fu, 0x000011f3u, 0x0000578eu, 0x0000578du, 0x0000578du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000578fu, 0x0000578eu, 0x0004007cu, 0x0000005du, 0x00005790u, 0x0000578fu, 0x0003003eu, 0x00005781u, 0x00005790u, 0x000200f9u, 0x00005785u, 0x000200f8u, 0x00005785u, 0x000f00f5u, 0x0000005du, 0x0000a471u, 0x00005790u, 0x00005786u, 0x00005794u, 0x00005787u, 0x00005798u, 0x00005788u, 0x0000579cu, 0x00005789u, 0x000057a1u, 0x0000578au, 0x000057acu, 0x0000578bu, 0x000300f7u, 0x000057aeu, 0x00000000u, 0x000d00fbu, 0x000056fbu, 0x000057afu, 0x00000000u, 0x000057b0u, 0x00000001u, 0x000057b1u, 0x00000002u, 0x000057b2u, 0x00000004u, 0x000057b3u, 0x00000006u, 0x000057b4u, 0x000200f8u, 0x000057b4u, 0x0003003eu, 0x00005782u, 0x000011ffu, 0x000200f9u, 0x000057aeu, 0x000200f8u, 0x000057b3u, 0x00050041u, 0x00000174u, 0x00005d14u, 0x00005d05u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000057c3u, 0x00005d14u, 0x00040071u, 0x00000006u, 0x000057c4u, 0x000057c3u, 0x0004007cu, 0x00000008u, 0x000057c5u, 0x000057c4u, 0x0003003eu, 0x00005782u, 0x000057c5u, 0x000200f9u, 0x000057aeu, 0x000200f8u, 0x000057b2u, 0x00050041u, 0x00000133u, 0x00005d13u, 0x00005d08u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000057c0u, 0x00005d13u, 0x00040072u, 0x00000008u, 0x000057c1u, 0x000057c0u, 0x0003003eu, 0x00005782u, 0x000057c1u, 0x000200f9u, 0x000057aeu, 0x000200f8u, 0x000057b1u, 0x00050041u, 0x00000133u, 0x00005d12u, 0x00005d07u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000057bdu, 0x00005d12u, 0x00040072u, 0x00000008u, 0x000057beu, 0x000057bdu, 0x0003003eu, 0x00005782u, 0x000057beu, 0x000200f9u, 0x000057aeu, 0x000200f8u, 0x000057b0u, 0x00050041u, 0x00000133u, 0x00005d11u, 0x00005d06u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000057bau, 0x00005d11u, 0x00040072u, 0x00000008u, 0x000057bbu, 0x000057bau, 0x0003003eu, 0x00005782u, 0x000057bbu, 0x000200f9u, 0x000057aeu, 0x000200f8u, 0x000057afu, 0x00050041u, 0x00000174u, 0x00005d10u, 0x00005d04u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000057b6u, 0x00005d10u, 0x00040071u, 0x00000006u, 0x000057b7u, 0x000057b6u, 0x0004007cu, 0x00000008u, 0x000057b8u, 0x000057b7u, 0x0003003eu, 0x00005782u, 0x000057b8u, 0x000200f9u, 0x000057aeu, 0x000200f8u, 0x000057aeu, 0x000f00f5u, 0x00000008u, 0x0000a472u, 0x000057b8u, 0x000057afu, 0x000057bbu, 0x000057b0u, 0x000057beu, 0x000057b1u, 0x000057c1u, 0x000057b2u, 0x000057c5u, 0x000057b3u, 0x000011ffu, 0x000057b4u, 0x00050051u, 0x00000008u, 0x000057c8u, 0x0000a471u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000057c9u, 0x0000a471u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000057cau, 0x0000a471u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000057cbu, 0x000057c8u, 0x000057c9u, 0x000057cau, 0x0000a472u, 0x0003003eu, 0x00005783u, 0x000057cbu, 0x0003003eu, 0x000056d4u, 0x000057cbu, 0x00050041u, 0x00000174u, 0x000056feu, 0x00001968u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000056ffu, 0x000056feu, 0x00040071u, 0x00000006u, 0x00005700u, 0x000056ffu, 0x0004007cu, 0x00000008u, 0x00005701u, 0x00005700u, 0x00050041u, 0x00000174u, 0x00005702u, 0x00001969u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00005703u, 0x00005702u, 0x00040071u, 0x00000006u, 0x00005704u, 0x00005703u, 0x0004007cu, 0x00000008u, 0x00005705u, 0x00005704u, 0x0003003eu, 0x00005d15u, 0x00002190u, 0x0003003eu, 0x00005d16u, 0x00001ba9u, 0x0003003eu, 0x00005d17u, 0x000016afu, 0x0003003eu, 0x00005d18u, 0x00008850u, 0x0003003eu, 0x00005d19u, 0x00009aa3u, 0x0003003eu, 0x00005d1au, 0x00009b4du, 0x0003003eu, 0x000056dau, 0x00005701u, 0x0003003eu, 0x000056dbu, 0x00005705u, 0x000300f7u, 0x000057d0u, 0x00000000u, 0x001700fbu, 0x00005701u, 0x000057d1u, 0x00000000u, 0x000057d2u, 0x00000007u, 0x000057d3u, 0x00000001u, 0x000057d4u, 0x00000002u, 0x000057d5u, 0x00000004u, 0x000057d6u, 0x00000008u, 0x000057d7u, 0x00000009u, 0x000057d8u, 0x0000000bu, 0x000057d9u, 0x0000000du, 0x000057dau, 0x0000000fu, 0x000057dbu, 0x000200f8u, 0x000057dbu, 0x00050041u, 0x00000174u, 0x00005d21u, 0x00005d15u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00005808u, 0x00005d21u, 0x00040071u, 0x00000006u, 0x00005809u, 0x00005808u, 0x0004007cu, 0x00000008u, 0x0000580au, 0x00005809u, 0x000500c4u, 0x00000008u, 0x0000580bu, 0x0000580au, 0x000001d9u, 0x00050041u, 0x00000174u, 0x00005d22u, 0x00005d15u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x0000580du, 0x00005d22u, 0x00040071u, 0x00000006u, 0x0000580eu, 0x0000580du, 0x0004007cu, 0x00000008u, 0x0000580fu, 0x0000580eu, 0x000500c5u, 0x00000008u, 0x00005810u, 0x0000580bu, 0x0000580fu, 0x00060050u, 0x0000005du, 0x00005811u, 0x00005810u, 0x00005810u, 0x00005810u, 0x0003003eu, 0x000057ccu, 0x00005811u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057dau, 0x00040072u, 0x00000008u, 0x00005805u, 0x00009b4du, 0x00060050u, 0x0000005du, 0x00005806u, 0x00005805u, 0x00005805u, 0x00005805u, 0x0003003eu, 0x000057ccu, 0x00005806u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d9u, 0x0004003du, 0x00000010u, 0x000057ffu, 0x00005d16u, 0x0008004fu, 0x000011f3u, 0x00005800u, 0x000057ffu, 0x000057ffu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000026du, 0x00005801u, 0x00005800u, 0x0004007cu, 0x0000005du, 0x00005802u, 0x00005801u, 0x0003003eu, 0x000057ccu, 0x00005802u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d8u, 0x0004003du, 0x00000013u, 0x000057fbu, 0x00005d19u, 0x0008004fu, 0x0000065au, 0x000057fcu, 0x000057fbu, 0x000057fbu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000057fdu, 0x000057fcu, 0x0003003eu, 0x000057ccu, 0x000057fdu, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d7u, 0x0004003du, 0x00000013u, 0x000057f7u, 0x00005d18u, 0x0008004fu, 0x0000065au, 0x000057f8u, 0x000057f7u, 0x000057f7u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000057f9u, 0x000057f8u, 0x0003003eu, 0x000057ccu, 0x000057f9u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d6u, 0x0004003du, 0x00000010u, 0x000057f2u, 0x00005d16u, 0x0008004fu, 0x000011f3u, 0x000057f3u, 0x000057f2u, 0x000057f2u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000057f4u, 0x000057f3u, 0x0004007cu, 0x0000005du, 0x000057f5u, 0x000057f4u, 0x0003003eu, 0x000057ccu, 0x000057f5u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d5u, 0x0004003du, 0x00000013u, 0x000057eeu, 0x00005d19u, 0x0008004fu, 0x0000065au, 0x000057efu, 0x000057eeu, 0x000057eeu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000057f0u, 0x000057efu, 0x0003003eu, 0x000057ccu, 0x000057f0u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d4u, 0x0004003du, 0x00000013u, 0x000057eau, 0x00005d18u, 0x0008004fu, 0x0000065au, 0x000057ebu, 0x000057eau, 0x000057eau, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000057ecu, 0x000057ebu, 0x0003003eu, 0x000057ccu, 0x000057ecu, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d3u, 0x00040072u, 0x0000005du, 0x000057e8u, 0x0000b629u, 0x0003003eu, 0x000057ccu, 0x000057e8u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d2u, 0x00040072u, 0x0000005du, 0x000057e4u, 0x0000b629u, 0x0003003eu, 0x000057ccu, 0x000057e4u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d1u, 0x0004003du, 0x00000010u, 0x000057ddu, 0x00005d15u, 0x0008004fu, 0x000011f3u, 0x000057deu, 0x000057ddu, 0x000057ddu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000057dfu, 0x000057deu, 0x0004007cu, 0x0000005du, 0x000057e0u, 0x000057dfu, 0x0003003eu, 0x000057ccu, 0x000057e0u, 0x000200f9u, 0x000057d0u, 0x000200f8u, 0x000057d0u, 0x001900f5u, 0x0000005du, 0x0000a48au, 0x000057e0u, 0x000057d1u, 0x000057e4u, 0x000057d2u, 0x000057e8u, 0x000057d3u, 0x000057ecu, 0x000057d4u, 0x000057f0u, 0x000057d5u, 0x000057f5u, 0x000057d6u, 0x000057f9u, 0x000057d7u, 0x000057fdu, 0x000057d8u, 0x00005802u, 0x000057d9u, 0x00005806u, 0x000057dau, 0x00005811u, 0x000057dbu, 0x000300f7u, 0x00005813u, 0x00000000u, 0x000b00fbu, 0x00005705u, 0x00005814u, 0x00000000u, 0x00005815u, 0x00000001u, 0x00005816u, 0x00000002u, 0x00005817u, 0x00000004u, 0x00005818u, 0x000200f8u, 0x00005818u, 0x00050041u, 0x00000174u, 0x00005d26u, 0x00005d16u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005827u, 0x00005d26u, 0x00040071u, 0x00000006u, 0x00005828u, 0x00005827u, 0x0004007cu, 0x00000008u, 0x00005829u, 0x00005828u, 0x0003003eu, 0x000057cdu, 0x00005829u, 0x000200f9u, 0x00005813u, 0x000200f8u, 0x00005817u, 0x00050041u, 0x00000133u, 0x00005d25u, 0x00005d19u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005824u, 0x00005d25u, 0x00040072u, 0x00000008u, 0x00005825u, 0x00005824u, 0x0003003eu, 0x000057cdu, 0x00005825u, 0x000200f9u, 0x00005813u, 0x000200f8u, 0x00005816u, 0x00050041u, 0x00000133u, 0x00005d24u, 0x00005d18u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005821u, 0x00005d24u, 0x00040072u, 0x00000008u, 0x00005822u, 0x00005821u, 0x0003003eu, 0x000057cdu, 0x00005822u, 0x000200f9u, 0x00005813u, 0x000200f8u, 0x00005815u, 0x00040072u, 0x00000008u, 0x0000581fu, 0x00009b4du, 0x0003003eu, 0x000057cdu, 0x0000581fu, 0x000200f9u, 0x00005813u, 0x000200f8u, 0x00005814u, 0x00050041u, 0x00000174u, 0x00005d23u, 0x00005d15u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000581au, 0x00005d23u, 0x00040071u, 0x00000006u, 0x0000581bu, 0x0000581au, 0x0004007cu, 0x00000008u, 0x0000581cu, 0x0000581bu, 0x0003003eu, 0x000057cdu, 0x0000581cu, 0x000200f9u, 0x00005813u, 0x000200f8u, 0x00005813u, 0x000d00f5u, 0x00000008u, 0x0000a48bu, 0x0000581cu, 0x00005814u, 0x0000581fu, 0x00005815u, 0x00005822u, 0x00005816u, 0x00005825u, 0x00005817u, 0x00005829u, 0x00005818u, 0x00050051u, 0x00000008u, 0x0000582cu, 0x0000a48au, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000582du, 0x0000a48au, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000582eu, 0x0000a48au, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000582fu, 0x0000582cu, 0x0000582du, 0x0000582eu, 0x0000a48bu, 0x0003003eu, 0x000057ceu, 0x0000582fu, 0x0003003eu, 0x000056d8u, 0x0000582fu, 0x00050041u, 0x00000174u, 0x00005708u, 0x00001968u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005709u, 0x00005708u, 0x00040071u, 0x00000006u, 0x0000570au, 0x00005709u, 0x0004007cu, 0x00000008u, 0x0000570bu, 0x0000570au, 0x00050041u, 0x00000174u, 0x0000570cu, 0x00001969u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000570du, 0x0000570cu, 0x00040071u, 0x00000006u, 0x0000570eu, 0x0000570du, 0x0004007cu, 0x00000008u, 0x0000570fu, 0x0000570eu, 0x0003003eu, 0x00005d27u, 0x00002192u, 0x0003003eu, 0x00005d28u, 0x00001ba9u, 0x0003003eu, 0x00005d29u, 0x000016afu, 0x0003003eu, 0x00005d2au, 0x00008850u, 0x0003003eu, 0x00005d2bu, 0x00009aa3u, 0x0003003eu, 0x000056deu, 0x0000570bu, 0x0003003eu, 0x000056dfu, 0x0000570fu, 0x000300f7u, 0x00005834u, 0x00000000u, 0x000d00fbu, 0x0000570bu, 0x00005835u, 0x00000000u, 0x00005836u, 0x00000001u, 0x00005837u, 0x00000002u, 0x00005838u, 0x00000004u, 0x00005839u, 0x00000006u, 0x0000583au, 0x000200f8u, 0x0000583au, 0x0003003eu, 0x00005830u, 0x00001200u, 0x000200f9u, 0x00005834u, 0x000200f8u, 0x00005839u, 0x0004003du, 0x00000010u, 0x0000584du, 0x00005d28u, 0x0008004fu, 0x000011f3u, 0x0000584eu, 0x0000584du, 0x0000584du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000584fu, 0x0000584eu, 0x0004007cu, 0x0000005du, 0x00005850u, 0x0000584fu, 0x0003003eu, 0x00005830u, 0x00005850u, 0x000200f9u, 0x00005834u, 0x000200f8u, 0x00005838u, 0x0004003du, 0x00000013u, 0x00005849u, 0x00005d2bu, 0x0008004fu, 0x0000065au, 0x0000584au, 0x00005849u, 0x00005849u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000584bu, 0x0000584au, 0x0003003eu, 0x00005830u, 0x0000584bu, 0x000200f9u, 0x00005834u, 0x000200f8u, 0x00005837u, 0x0004003du, 0x00000013u, 0x00005845u, 0x00005d2au, 0x0008004fu, 0x0000065au, 0x00005846u, 0x00005845u, 0x00005845u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005847u, 0x00005846u, 0x0003003eu, 0x00005830u, 0x00005847u, 0x000200f9u, 0x00005834u, 0x000200f8u, 0x00005836u, 0x0004003du, 0x00000013u, 0x00005841u, 0x00005d29u, 0x0008004fu, 0x0000065au, 0x00005842u, 0x00005841u, 0x00005841u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005843u, 0x00005842u, 0x0003003eu, 0x00005830u, 0x00005843u, 0x000200f9u, 0x00005834u, 0x000200f8u, 0x00005835u, 0x0004003du, 0x00000010u, 0x0000583cu, 0x00005d27u, 0x0008004fu, 0x000011f3u, 0x0000583du, 0x0000583cu, 0x0000583cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000583eu, 0x0000583du, 0x0004007cu, 0x0000005du, 0x0000583fu, 0x0000583eu, 0x0003003eu, 0x00005830u, 0x0000583fu, 0x000200f9u, 0x00005834u, 0x000200f8u, 0x00005834u, 0x000f00f5u, 0x0000005du, 0x0000a4a2u, 0x0000583fu, 0x00005835u, 0x00005843u, 0x00005836u, 0x00005847u, 0x00005837u, 0x0000584bu, 0x00005838u, 0x00005850u, 0x00005839u, 0x00001200u, 0x0000583au, 0x000300f7u, 0x00005852u, 0x00000000u, 0x000d00fbu, 0x0000570fu, 0x00005853u, 0x00000000u, 0x00005854u, 0x00000001u, 0x00005855u, 0x00000002u, 0x00005856u, 0x00000004u, 0x00005857u, 0x00000006u, 0x00005858u, 0x000200f8u, 0x00005858u, 0x0003003eu, 0x00005831u, 0x000011ffu, 0x000200f9u, 0x00005852u, 0x000200f8u, 0x00005857u, 0x00050041u, 0x00000174u, 0x00005d35u, 0x00005d28u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005867u, 0x00005d35u, 0x00040071u, 0x00000006u, 0x00005868u, 0x00005867u, 0x0004007cu, 0x00000008u, 0x00005869u, 0x00005868u, 0x0003003eu, 0x00005831u, 0x00005869u, 0x000200f9u, 0x00005852u, 0x000200f8u, 0x00005856u, 0x00050041u, 0x00000133u, 0x00005d34u, 0x00005d2bu, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005864u, 0x00005d34u, 0x00040072u, 0x00000008u, 0x00005865u, 0x00005864u, 0x0003003eu, 0x00005831u, 0x00005865u, 0x000200f9u, 0x00005852u, 0x000200f8u, 0x00005855u, 0x00050041u, 0x00000133u, 0x00005d33u, 0x00005d2au, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005861u, 0x00005d33u, 0x00040072u, 0x00000008u, 0x00005862u, 0x00005861u, 0x0003003eu, 0x00005831u, 0x00005862u, 0x000200f9u, 0x00005852u, 0x000200f8u, 0x00005854u, 0x00050041u, 0x00000133u, 0x00005d32u, 0x00005d29u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000585eu, 0x00005d32u, 0x00040072u, 0x00000008u, 0x0000585fu, 0x0000585eu, 0x0003003eu, 0x00005831u, 0x0000585fu, 0x000200f9u, 0x00005852u, 0x000200f8u, 0x00005853u, 0x00050041u, 0x00000174u, 0x00005d31u, 0x00005d27u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000585au, 0x00005d31u, 0x00040071u, 0x00000006u, 0x0000585bu, 0x0000585au, 0x0004007cu, 0x00000008u, 0x0000585cu, 0x0000585bu, 0x0003003eu, 0x00005831u, 0x0000585cu, 0x000200f9u, 0x00005852u, 0x000200f8u, 0x00005852u, 0x000f00f5u, 0x00000008u, 0x0000a4a3u, 0x0000585cu, 0x00005853u, 0x0000585fu, 0x00005854u, 0x00005862u, 0x00005855u, 0x00005865u, 0x00005856u, 0x00005869u, 0x00005857u, 0x000011ffu, 0x00005858u, 0x00050051u, 0x00000008u, 0x0000586cu, 0x0000a4a2u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000586du, 0x0000a4a2u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000586eu, 0x0000a4a2u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000586fu, 0x0000586cu, 0x0000586du, 0x0000586eu, 0x0000a4a3u, 0x0003003eu, 0x00005832u, 0x0000586fu, 0x0003003eu, 0x000056dcu, 0x0000586fu, 0x0003003eu, 0x000056e1u, 0x00005780u, 0x0003003eu, 0x000056e2u, 0x000057cbu, 0x0003003eu, 0x000056e3u, 0x0000582fu, 0x0003003eu, 0x000056e4u, 0x0000586fu, 0x000600cau, 0x00000009u, 0x00005876u, 0x0000582fu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x000056e3u, 0x00005876u, 0x0003003eu, 0x00005870u, 0x00005780u, 0x00050082u, 0x00000009u, 0x0000588fu, 0x00005780u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005890u, 0x0000588fu, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005892u, 0x00005890u, 0x0000b618u, 0x0003003eu, 0x0000588cu, 0x00005892u, 0x0003003eu, 0x000056e1u, 0x00005892u, 0x0003003eu, 0x00005871u, 0x000057cbu, 0x00050082u, 0x00000009u, 0x00005896u, 0x000057cbu, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005897u, 0x00005896u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005899u, 0x00005897u, 0x0000b618u, 0x0003003eu, 0x00005893u, 0x00005899u, 0x0003003eu, 0x000056e2u, 0x00005899u, 0x0003003eu, 0x00005872u, 0x0000586fu, 0x00050082u, 0x00000009u, 0x0000589du, 0x0000586fu, 0x0000b618u, 0x000600cau, 0x00000009u, 0x0000589eu, 0x0000589du, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x000058a0u, 0x0000589eu, 0x0000b618u, 0x0003003eu, 0x0000589au, 0x000058a0u, 0x0003003eu, 0x000056e4u, 0x000058a0u, 0x00050082u, 0x00000009u, 0x0000587fu, 0x00005892u, 0x00005899u, 0x00050084u, 0x00000009u, 0x00005881u, 0x0000587fu, 0x00005876u, 0x0003003eu, 0x00005873u, 0x00005881u, 0x00050080u, 0x00000009u, 0x00005884u, 0x00005881u, 0x0000b618u, 0x0003003eu, 0x00005873u, 0x00005884u, 0x000500c3u, 0x00000009u, 0x00005887u, 0x00005884u, 0x0000b622u, 0x00040072u, 0x00000013u, 0x00005888u, 0x00005887u, 0x00040072u, 0x00000013u, 0x0000588au, 0x000058a0u, 0x00050080u, 0x00000013u, 0x0000588bu, 0x00005888u, 0x0000588au, 0x0003003eu, 0x00005874u, 0x0000588bu, 0x0003003eu, 0x000056e0u, 0x0000588bu, 0x000300f7u, 0x00005718u, 0x00000000u, 0x000400fau, 0x00001a11u, 0x00005719u, 0x0000571au, 0x000200f8u, 0x0000571au, 0x0003003eu, 0x0000196fu, 0x000002d4u, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x00005719u, 0x00050041u, 0x00000133u, 0x0000571bu, 0x000056e0u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000571cu, 0x0000571bu, 0x00040072u, 0x00000008u, 0x0000571du, 0x0000571cu, 0x0003003eu, 0x000056e6u, 0x0000571du, 0x00050082u, 0x00000008u, 0x000058a3u, 0x0000571du, 0x00000306u, 0x000600cau, 0x00000008u, 0x000058a4u, 0x000058a3u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000008u, 0x000058a5u, 0x000058a4u, 0x00000306u, 0x0008000cu, 0x00000008u, 0x000058a6u, 0x00000001u, 0x0000002du, 0x000058a5u, 0x0000019cu, 0x00000311u, 0x0003003eu, 0x000058a1u, 0x000058a6u, 0x0003003eu, 0x000056e5u, 0x000058a6u, 0x00050080u, 0x00000008u, 0x00005721u, 0x000058a6u, 0x000001a6u, 0x000500c3u, 0x00000008u, 0x00005722u, 0x00005721u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x00005723u, 0x000058a6u, 0x00005722u, 0x0003003eu, 0x000056e7u, 0x00005723u, 0x000300f7u, 0x00005725u, 0x00000000u, 0x000400fau, 0x000019f3u, 0x00005726u, 0x00005727u, 0x000200f8u, 0x00005727u, 0x00050080u, 0x00000008u, 0x00005736u, 0x00005723u, 0x00009583u, 0x0003003eu, 0x000056e7u, 0x00005736u, 0x000200f9u, 0x00005725u, 0x000200f8u, 0x00005726u, 0x000300f7u, 0x00005729u, 0x00000000u, 0x000400fau, 0x000019f0u, 0x0000572au, 0x0000572bu, 0x000200f8u, 0x0000572bu, 0x000500c4u, 0x00000008u, 0x00005732u, 0x00001a9cu, 0x000001b2u, 0x0003003eu, 0x000056e8u, 0x00005732u, 0x000200f9u, 0x00005729u, 0x000200f8u, 0x0000572au, 0x00050084u, 0x00000008u, 0x0000572eu, 0x00005723u, 0x00001a9cu, 0x00050080u, 0x00000008u, 0x0000572fu, 0x0000572eu, 0x000001afu, 0x000500c3u, 0x00000008u, 0x00005730u, 0x0000572fu, 0x000001acu, 0x0003003eu, 0x000056e8u, 0x00005730u, 0x000200f9u, 0x00005729u, 0x000200f8u, 0x00005729u, 0x000700f5u, 0x00000008u, 0x0000a4d8u, 0x00005730u, 0x0000572au, 0x00005732u, 0x0000572bu, 0x0003003eu, 0x000056e7u, 0x0000a4d8u, 0x000200f9u, 0x00005725u, 0x000200f8u, 0x00005725u, 0x000700f5u, 0x00000008u, 0x0000a4d9u, 0x0000a4d8u, 0x00005729u, 0x00005736u, 0x00005727u, 0x0008000cu, 0x00000008u, 0x00005738u, 0x00000001u, 0x0000002du, 0x0000a4d9u, 0x0000019cu, 0x00000311u, 0x00040072u, 0x0000031bu, 0x00005739u, 0x00005738u, 0x0004007cu, 0x0000000fu, 0x0000573au, 0x00005739u, 0x0003003eu, 0x0000196fu, 0x0000573au, 0x000200f9u, 0x00005718u, 0x000200f8u, 0x00005718u, 0x000700f5u, 0x0000000fu, 0x0000a4dau, 0x0000573au, 0x00005725u, 0x000002d4u, 0x0000571au, 0x0004003du, 0x00000013u, 0x0000573bu, 0x000056e0u, 0x0003003eu, 0x000056e9u, 0x0000573bu, 0x0003003eu, 0x00001966u, 0x0000a4dau, 0x0003003eu, 0x00006bfdu, 0x0000573bu, 0x0003003eu, 0x00006bf8u, 0x00002194u, 0x0003003eu, 0x00006bf9u, 0x00002196u, 0x0003003eu, 0x00006bfau, 0x00002198u, 0x0003003eu, 0x00006bfbu, 0x0000219au, 0x0003003eu, 0x00001970u, 0x00008850u, 0x0003003eu, 0x00006bfeu, 0x00009aa3u, 0x0003003eu, 0x00006bffu, 0x00008850u, 0x000d0050u, 0x0000015cu, 0x00006c21u, 0x00002194u, 0x00002196u, 0x00002198u, 0x0000219au, 0x00001ba9u, 0x0000573bu, 0x00009aa3u, 0x00008850u, 0x00009b4du, 0x000056cfu, 0x0003003eu, 0x00006c62u, 0x00002194u, 0x0003003eu, 0x00006c63u, 0x00002196u, 0x0003003eu, 0x00006c64u, 0x00002198u, 0x0003003eu, 0x00006c65u, 0x0000219au, 0x0003003eu, 0x00006c66u, 0x00001ba9u, 0x0003003eu, 0x00006c67u, 0x0000573bu, 0x0003003eu, 0x00006c68u, 0x00009aa3u, 0x0003003eu, 0x00006c69u, 0x00008850u, 0x0003003eu, 0x00006c6au, 0x00009b4du, 0x0003003eu, 0x00006c6bu, 0x000056cfu, 0x0004003du, 0x00000010u, 0x00001bceu, 0x000018cau, 0x0003003eu, 0x00001973u, 0x00001bceu, 0x0004003du, 0x00000010u, 0x00001bcfu, 0x000018cbu, 0x0003003eu, 0x00001974u, 0x00001bcfu, 0x0003003eu, 0x00001975u, 0x00009583u, 0x0003003eu, 0x00001976u, 0x00001a9cu, 0x0003003eu, 0x00001977u, 0x000019f0u, 0x0003003eu, 0x00001978u, 0x000019f3u, 0x00050041u, 0x00000174u, 0x000058c0u, 0x00001973u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000058c1u, 0x000058c0u, 0x00040071u, 0x00000006u, 0x000058c2u, 0x000058c1u, 0x0004007cu, 0x00000008u, 0x000058c3u, 0x000058c2u, 0x00050041u, 0x00000174u, 0x000058c4u, 0x00001974u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000058c5u, 0x000058c4u, 0x00040071u, 0x00000006u, 0x000058c6u, 0x000058c5u, 0x0004007cu, 0x00000008u, 0x000058c7u, 0x000058c6u, 0x0003003eu, 0x00005cb0u, 0x00002194u, 0x0003003eu, 0x00005cb1u, 0x00001ba9u, 0x0003003eu, 0x00005cb2u, 0x0000573bu, 0x0003003eu, 0x00005cb3u, 0x00009aa3u, 0x0003003eu, 0x00005cb4u, 0x00008850u, 0x0003003eu, 0x00005cb5u, 0x000056cfu, 0x0003003eu, 0x000058a9u, 0x000058c3u, 0x0003003eu, 0x000058aau, 0x000058c7u, 0x000300f7u, 0x00005917u, 0x00000000u, 0x000f00fbu, 0x000058c3u, 0x00005918u, 0x00000000u, 0x00005919u, 0x00000001u, 0x0000591au, 0x00000002u, 0x0000591bu, 0x00000004u, 0x0000591cu, 0x00000007u, 0x0000591du, 0x00000006u, 0x0000591eu, 0x000200f8u, 0x0000591eu, 0x0003003eu, 0x00005913u, 0x00001200u, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x0000591du, 0x00040072u, 0x00000008u, 0x00005937u, 0x000056cfu, 0x00060050u, 0x0000005du, 0x00005938u, 0x00005937u, 0x00005937u, 0x00005937u, 0x0003003eu, 0x00005913u, 0x00005938u, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x0000591cu, 0x0004003du, 0x00000010u, 0x00005931u, 0x00005cb1u, 0x0008004fu, 0x000011f3u, 0x00005932u, 0x00005931u, 0x00005931u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005933u, 0x00005932u, 0x0004007cu, 0x0000005du, 0x00005934u, 0x00005933u, 0x0003003eu, 0x00005913u, 0x00005934u, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x0000591bu, 0x0004003du, 0x00000013u, 0x0000592du, 0x00005cb4u, 0x0008004fu, 0x0000065au, 0x0000592eu, 0x0000592du, 0x0000592du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000592fu, 0x0000592eu, 0x0003003eu, 0x00005913u, 0x0000592fu, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x0000591au, 0x0004003du, 0x00000013u, 0x00005929u, 0x00005cb3u, 0x0008004fu, 0x0000065au, 0x0000592au, 0x00005929u, 0x00005929u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000592bu, 0x0000592au, 0x0003003eu, 0x00005913u, 0x0000592bu, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x00005919u, 0x0004003du, 0x00000013u, 0x00005925u, 0x00005cb2u, 0x0008004fu, 0x0000065au, 0x00005926u, 0x00005925u, 0x00005925u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005927u, 0x00005926u, 0x0003003eu, 0x00005913u, 0x00005927u, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x00005918u, 0x0004003du, 0x00000010u, 0x00005920u, 0x00005cb0u, 0x0008004fu, 0x000011f3u, 0x00005921u, 0x00005920u, 0x00005920u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005922u, 0x00005921u, 0x0004007cu, 0x0000005du, 0x00005923u, 0x00005922u, 0x0003003eu, 0x00005913u, 0x00005923u, 0x000200f9u, 0x00005917u, 0x000200f8u, 0x00005917u, 0x001100f5u, 0x0000005du, 0x0000a56cu, 0x00005923u, 0x00005918u, 0x00005927u, 0x00005919u, 0x0000592bu, 0x0000591au, 0x0000592fu, 0x0000591bu, 0x00005934u, 0x0000591cu, 0x00005938u, 0x0000591du, 0x00001200u, 0x0000591eu, 0x000300f7u, 0x0000593au, 0x00000000u, 0x000d00fbu, 0x000058c7u, 0x0000593bu, 0x00000000u, 0x0000593cu, 0x00000001u, 0x0000593du, 0x00000002u, 0x0000593eu, 0x00000004u, 0x0000593fu, 0x00000006u, 0x00005940u, 0x000200f8u, 0x00005940u, 0x0003003eu, 0x00005914u, 0x000011ffu, 0x000200f9u, 0x0000593au, 0x000200f8u, 0x0000593fu, 0x00050041u, 0x00000174u, 0x00005cc0u, 0x00005cb1u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000594fu, 0x00005cc0u, 0x00040071u, 0x00000006u, 0x00005950u, 0x0000594fu, 0x0004007cu, 0x00000008u, 0x00005951u, 0x00005950u, 0x0003003eu, 0x00005914u, 0x00005951u, 0x000200f9u, 0x0000593au, 0x000200f8u, 0x0000593eu, 0x00050041u, 0x00000133u, 0x00005cbfu, 0x00005cb4u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000594cu, 0x00005cbfu, 0x00040072u, 0x00000008u, 0x0000594du, 0x0000594cu, 0x0003003eu, 0x00005914u, 0x0000594du, 0x000200f9u, 0x0000593au, 0x000200f8u, 0x0000593du, 0x00050041u, 0x00000133u, 0x00005cbeu, 0x00005cb3u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005949u, 0x00005cbeu, 0x00040072u, 0x00000008u, 0x0000594au, 0x00005949u, 0x0003003eu, 0x00005914u, 0x0000594au, 0x000200f9u, 0x0000593au, 0x000200f8u, 0x0000593cu, 0x00050041u, 0x00000133u, 0x00005cbdu, 0x00005cb2u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005946u, 0x00005cbdu, 0x00040072u, 0x00000008u, 0x00005947u, 0x00005946u, 0x0003003eu, 0x00005914u, 0x00005947u, 0x000200f9u, 0x0000593au, 0x000200f8u, 0x0000593bu, 0x00050041u, 0x00000174u, 0x00005cbcu, 0x00005cb0u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005942u, 0x00005cbcu, 0x00040071u, 0x00000006u, 0x00005943u, 0x00005942u, 0x0004007cu, 0x00000008u, 0x00005944u, 0x00005943u, 0x0003003eu, 0x00005914u, 0x00005944u, 0x000200f9u, 0x0000593au, 0x000200f8u, 0x0000593au, 0x000f00f5u, 0x00000008u, 0x0000a56du, 0x00005944u, 0x0000593bu, 0x00005947u, 0x0000593cu, 0x0000594au, 0x0000593du, 0x0000594du, 0x0000593eu, 0x00005951u, 0x0000593fu, 0x000011ffu, 0x00005940u, 0x00050051u, 0x00000008u, 0x00005954u, 0x0000a56cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005955u, 0x0000a56cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005956u, 0x0000a56cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005957u, 0x00005954u, 0x00005955u, 0x00005956u, 0x0000a56du, 0x0003003eu, 0x00005915u, 0x00005957u, 0x0003003eu, 0x000058a7u, 0x00005957u, 0x00050041u, 0x00000174u, 0x000058cau, 0x00001973u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000058cbu, 0x000058cau, 0x00040071u, 0x00000006u, 0x000058ccu, 0x000058cbu, 0x0004007cu, 0x00000008u, 0x000058cdu, 0x000058ccu, 0x00050041u, 0x00000174u, 0x000058ceu, 0x00001974u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000058cfu, 0x000058ceu, 0x00040071u, 0x00000006u, 0x000058d0u, 0x000058cfu, 0x0004007cu, 0x00000008u, 0x000058d1u, 0x000058d0u, 0x0003003eu, 0x00005cc1u, 0x00002196u, 0x0003003eu, 0x00005cc2u, 0x00001ba9u, 0x0003003eu, 0x00005cc3u, 0x0000573bu, 0x0003003eu, 0x00005cc4u, 0x00009aa3u, 0x0003003eu, 0x00005cc5u, 0x00008850u, 0x0003003eu, 0x000058adu, 0x000058cdu, 0x0003003eu, 0x000058aeu, 0x000058d1u, 0x000300f7u, 0x0000595cu, 0x00000000u, 0x000d00fbu, 0x000058cdu, 0x0000595du, 0x00000000u, 0x0000595eu, 0x00000001u, 0x0000595fu, 0x00000002u, 0x00005960u, 0x00000004u, 0x00005961u, 0x00000007u, 0x00005962u, 0x000200f8u, 0x00005962u, 0x00050041u, 0x00000174u, 0x00005ccbu, 0x00005cc1u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x0000597au, 0x00005ccbu, 0x00040071u, 0x00000006u, 0x0000597bu, 0x0000597au, 0x0004007cu, 0x00000008u, 0x0000597cu, 0x0000597bu, 0x000500c4u, 0x00000008u, 0x0000597du, 0x0000597cu, 0x000001d9u, 0x00050041u, 0x00000174u, 0x00005cccu, 0x00005cc1u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x0000597fu, 0x00005cccu, 0x00040071u, 0x00000006u, 0x00005980u, 0x0000597fu, 0x0004007cu, 0x00000008u, 0x00005981u, 0x00005980u, 0x000500c5u, 0x00000008u, 0x00005982u, 0x0000597du, 0x00005981u, 0x00060050u, 0x0000005du, 0x00005983u, 0x00005982u, 0x00005982u, 0x00005982u, 0x0003003eu, 0x00005958u, 0x00005983u, 0x000200f9u, 0x0000595cu, 0x000200f8u, 0x00005961u, 0x0004003du, 0x00000010u, 0x00005975u, 0x00005cc2u, 0x0008004fu, 0x000011f3u, 0x00005976u, 0x00005975u, 0x00005975u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005977u, 0x00005976u, 0x0004007cu, 0x0000005du, 0x00005978u, 0x00005977u, 0x0003003eu, 0x00005958u, 0x00005978u, 0x000200f9u, 0x0000595cu, 0x000200f8u, 0x00005960u, 0x0004003du, 0x00000013u, 0x00005971u, 0x00005cc5u, 0x0008004fu, 0x0000065au, 0x00005972u, 0x00005971u, 0x00005971u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005973u, 0x00005972u, 0x0003003eu, 0x00005958u, 0x00005973u, 0x000200f9u, 0x0000595cu, 0x000200f8u, 0x0000595fu, 0x0004003du, 0x00000013u, 0x0000596du, 0x00005cc4u, 0x0008004fu, 0x0000065au, 0x0000596eu, 0x0000596du, 0x0000596du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000596fu, 0x0000596eu, 0x0003003eu, 0x00005958u, 0x0000596fu, 0x000200f9u, 0x0000595cu, 0x000200f8u, 0x0000595eu, 0x0004003du, 0x00000013u, 0x00005969u, 0x00005cc3u, 0x0008004fu, 0x0000065au, 0x0000596au, 0x00005969u, 0x00005969u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000596bu, 0x0000596au, 0x0003003eu, 0x00005958u, 0x0000596bu, 0x000200f9u, 0x0000595cu, 0x000200f8u, 0x0000595du, 0x0004003du, 0x00000010u, 0x00005964u, 0x00005cc1u, 0x0008004fu, 0x000011f3u, 0x00005965u, 0x00005964u, 0x00005964u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005966u, 0x00005965u, 0x0004007cu, 0x0000005du, 0x00005967u, 0x00005966u, 0x0003003eu, 0x00005958u, 0x00005967u, 0x000200f9u, 0x0000595cu, 0x000200f8u, 0x0000595cu, 0x000f00f5u, 0x0000005du, 0x0000a584u, 0x00005967u, 0x0000595du, 0x0000596bu, 0x0000595eu, 0x0000596fu, 0x0000595fu, 0x00005973u, 0x00005960u, 0x00005978u, 0x00005961u, 0x00005983u, 0x00005962u, 0x000300f7u, 0x00005985u, 0x00000000u, 0x000d00fbu, 0x000058d1u, 0x00005986u, 0x00000000u, 0x00005987u, 0x00000001u, 0x00005988u, 0x00000002u, 0x00005989u, 0x00000004u, 0x0000598au, 0x00000006u, 0x0000598bu, 0x000200f8u, 0x0000598bu, 0x0003003eu, 0x00005959u, 0x000011ffu, 0x000200f9u, 0x00005985u, 0x000200f8u, 0x0000598au, 0x00050041u, 0x00000174u, 0x00005cd1u, 0x00005cc2u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000599au, 0x00005cd1u, 0x00040071u, 0x00000006u, 0x0000599bu, 0x0000599au, 0x0004007cu, 0x00000008u, 0x0000599cu, 0x0000599bu, 0x0003003eu, 0x00005959u, 0x0000599cu, 0x000200f9u, 0x00005985u, 0x000200f8u, 0x00005989u, 0x00050041u, 0x00000133u, 0x00005cd0u, 0x00005cc5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005997u, 0x00005cd0u, 0x00040072u, 0x00000008u, 0x00005998u, 0x00005997u, 0x0003003eu, 0x00005959u, 0x00005998u, 0x000200f9u, 0x00005985u, 0x000200f8u, 0x00005988u, 0x00050041u, 0x00000133u, 0x00005ccfu, 0x00005cc4u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005994u, 0x00005ccfu, 0x00040072u, 0x00000008u, 0x00005995u, 0x00005994u, 0x0003003eu, 0x00005959u, 0x00005995u, 0x000200f9u, 0x00005985u, 0x000200f8u, 0x00005987u, 0x00050041u, 0x00000133u, 0x00005cceu, 0x00005cc3u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005991u, 0x00005cceu, 0x00040072u, 0x00000008u, 0x00005992u, 0x00005991u, 0x0003003eu, 0x00005959u, 0x00005992u, 0x000200f9u, 0x00005985u, 0x000200f8u, 0x00005986u, 0x00050041u, 0x00000174u, 0x00005ccdu, 0x00005cc1u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000598du, 0x00005ccdu, 0x00040071u, 0x00000006u, 0x0000598eu, 0x0000598du, 0x0004007cu, 0x00000008u, 0x0000598fu, 0x0000598eu, 0x0003003eu, 0x00005959u, 0x0000598fu, 0x000200f9u, 0x00005985u, 0x000200f8u, 0x00005985u, 0x000f00f5u, 0x00000008u, 0x0000a585u, 0x0000598fu, 0x00005986u, 0x00005992u, 0x00005987u, 0x00005995u, 0x00005988u, 0x00005998u, 0x00005989u, 0x0000599cu, 0x0000598au, 0x000011ffu, 0x0000598bu, 0x00050051u, 0x00000008u, 0x0000599fu, 0x0000a584u, 0x00000000u, 0x00050051u, 0x00000008u, 0x000059a0u, 0x0000a584u, 0x00000001u, 0x00050051u, 0x00000008u, 0x000059a1u, 0x0000a584u, 0x00000002u, 0x00070050u, 0x00000009u, 0x000059a2u, 0x0000599fu, 0x000059a0u, 0x000059a1u, 0x0000a585u, 0x0003003eu, 0x0000595au, 0x000059a2u, 0x0003003eu, 0x000058abu, 0x000059a2u, 0x00050041u, 0x00000174u, 0x000058d4u, 0x00001973u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000058d5u, 0x000058d4u, 0x00040071u, 0x00000006u, 0x000058d6u, 0x000058d5u, 0x0004007cu, 0x00000008u, 0x000058d7u, 0x000058d6u, 0x00050041u, 0x00000174u, 0x000058d8u, 0x00001974u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000058d9u, 0x000058d8u, 0x00040071u, 0x00000006u, 0x000058dau, 0x000058d9u, 0x0004007cu, 0x00000008u, 0x000058dbu, 0x000058dau, 0x0003003eu, 0x00005cd2u, 0x00002198u, 0x0003003eu, 0x00005cd3u, 0x00001ba9u, 0x0003003eu, 0x00005cd4u, 0x0000573bu, 0x0003003eu, 0x00005cd5u, 0x00009aa3u, 0x0003003eu, 0x00005cd6u, 0x00008850u, 0x0003003eu, 0x00005cd7u, 0x00009b4du, 0x0003003eu, 0x000058b1u, 0x000058d7u, 0x0003003eu, 0x000058b2u, 0x000058dbu, 0x000300f7u, 0x000059a7u, 0x00000000u, 0x001700fbu, 0x000058d7u, 0x000059a8u, 0x00000000u, 0x000059a9u, 0x00000007u, 0x000059aau, 0x00000001u, 0x000059abu, 0x00000002u, 0x000059acu, 0x00000004u, 0x000059adu, 0x00000008u, 0x000059aeu, 0x00000009u, 0x000059afu, 0x0000000bu, 0x000059b0u, 0x0000000du, 0x000059b1u, 0x0000000fu, 0x000059b2u, 0x000200f8u, 0x000059b2u, 0x00050041u, 0x00000174u, 0x00005cdeu, 0x00005cd2u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000059dfu, 0x00005cdeu, 0x00040071u, 0x00000006u, 0x000059e0u, 0x000059dfu, 0x0004007cu, 0x00000008u, 0x000059e1u, 0x000059e0u, 0x000500c4u, 0x00000008u, 0x000059e2u, 0x000059e1u, 0x000001d9u, 0x00050041u, 0x00000174u, 0x00005cdfu, 0x00005cd2u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000059e4u, 0x00005cdfu, 0x00040071u, 0x00000006u, 0x000059e5u, 0x000059e4u, 0x0004007cu, 0x00000008u, 0x000059e6u, 0x000059e5u, 0x000500c5u, 0x00000008u, 0x000059e7u, 0x000059e2u, 0x000059e6u, 0x00060050u, 0x0000005du, 0x000059e8u, 0x000059e7u, 0x000059e7u, 0x000059e7u, 0x0003003eu, 0x000059a3u, 0x000059e8u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059b1u, 0x00040072u, 0x00000008u, 0x000059dcu, 0x00009b4du, 0x00060050u, 0x0000005du, 0x000059ddu, 0x000059dcu, 0x000059dcu, 0x000059dcu, 0x0003003eu, 0x000059a3u, 0x000059ddu, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059b0u, 0x0004003du, 0x00000010u, 0x000059d6u, 0x00005cd3u, 0x0008004fu, 0x000011f3u, 0x000059d7u, 0x000059d6u, 0x000059d6u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000026du, 0x000059d8u, 0x000059d7u, 0x0004007cu, 0x0000005du, 0x000059d9u, 0x000059d8u, 0x0003003eu, 0x000059a3u, 0x000059d9u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059afu, 0x0004003du, 0x00000013u, 0x000059d2u, 0x00005cd6u, 0x0008004fu, 0x0000065au, 0x000059d3u, 0x000059d2u, 0x000059d2u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000059d4u, 0x000059d3u, 0x0003003eu, 0x000059a3u, 0x000059d4u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059aeu, 0x0004003du, 0x00000013u, 0x000059ceu, 0x00005cd5u, 0x0008004fu, 0x0000065au, 0x000059cfu, 0x000059ceu, 0x000059ceu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000059d0u, 0x000059cfu, 0x0003003eu, 0x000059a3u, 0x000059d0u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059adu, 0x0004003du, 0x00000010u, 0x000059c9u, 0x00005cd3u, 0x0008004fu, 0x000011f3u, 0x000059cau, 0x000059c9u, 0x000059c9u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000059cbu, 0x000059cau, 0x0004007cu, 0x0000005du, 0x000059ccu, 0x000059cbu, 0x0003003eu, 0x000059a3u, 0x000059ccu, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059acu, 0x0004003du, 0x00000013u, 0x000059c5u, 0x00005cd6u, 0x0008004fu, 0x0000065au, 0x000059c6u, 0x000059c5u, 0x000059c5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000059c7u, 0x000059c6u, 0x0003003eu, 0x000059a3u, 0x000059c7u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059abu, 0x0004003du, 0x00000013u, 0x000059c1u, 0x00005cd5u, 0x0008004fu, 0x0000065au, 0x000059c2u, 0x000059c1u, 0x000059c1u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000059c3u, 0x000059c2u, 0x0003003eu, 0x000059a3u, 0x000059c3u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059aau, 0x0008004fu, 0x0000065au, 0x000059beu, 0x0000573bu, 0x0000573bu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000059bfu, 0x000059beu, 0x0003003eu, 0x000059a3u, 0x000059bfu, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059a9u, 0x0008004fu, 0x0000065au, 0x000059bau, 0x0000573bu, 0x0000573bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000059bbu, 0x000059bau, 0x0003003eu, 0x000059a3u, 0x000059bbu, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059a8u, 0x0004003du, 0x00000010u, 0x000059b4u, 0x00005cd2u, 0x0008004fu, 0x000011f3u, 0x000059b5u, 0x000059b4u, 0x000059b4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000059b6u, 0x000059b5u, 0x0004007cu, 0x0000005du, 0x000059b7u, 0x000059b6u, 0x0003003eu, 0x000059a3u, 0x000059b7u, 0x000200f9u, 0x000059a7u, 0x000200f8u, 0x000059a7u, 0x001900f5u, 0x0000005du, 0x0000a59du, 0x000059b7u, 0x000059a8u, 0x000059bbu, 0x000059a9u, 0x000059bfu, 0x000059aau, 0x000059c3u, 0x000059abu, 0x000059c7u, 0x000059acu, 0x000059ccu, 0x000059adu, 0x000059d0u, 0x000059aeu, 0x000059d4u, 0x000059afu, 0x000059d9u, 0x000059b0u, 0x000059ddu, 0x000059b1u, 0x000059e8u, 0x000059b2u, 0x000300f7u, 0x000059eau, 0x00000000u, 0x000b00fbu, 0x000058dbu, 0x000059ebu, 0x00000000u, 0x000059ecu, 0x00000001u, 0x000059edu, 0x00000002u, 0x000059eeu, 0x00000004u, 0x000059efu, 0x000200f8u, 0x000059efu, 0x00050041u, 0x00000174u, 0x00005ce3u, 0x00005cd3u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000059feu, 0x00005ce3u, 0x00040071u, 0x00000006u, 0x000059ffu, 0x000059feu, 0x0004007cu, 0x00000008u, 0x00005a00u, 0x000059ffu, 0x0003003eu, 0x000059a4u, 0x00005a00u, 0x000200f9u, 0x000059eau, 0x000200f8u, 0x000059eeu, 0x00050041u, 0x00000133u, 0x00005ce2u, 0x00005cd6u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000059fbu, 0x00005ce2u, 0x00040072u, 0x00000008u, 0x000059fcu, 0x000059fbu, 0x0003003eu, 0x000059a4u, 0x000059fcu, 0x000200f9u, 0x000059eau, 0x000200f8u, 0x000059edu, 0x00050041u, 0x00000133u, 0x00005ce1u, 0x00005cd5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000059f8u, 0x00005ce1u, 0x00040072u, 0x00000008u, 0x000059f9u, 0x000059f8u, 0x0003003eu, 0x000059a4u, 0x000059f9u, 0x000200f9u, 0x000059eau, 0x000200f8u, 0x000059ecu, 0x00040072u, 0x00000008u, 0x000059f6u, 0x00009b4du, 0x0003003eu, 0x000059a4u, 0x000059f6u, 0x000200f9u, 0x000059eau, 0x000200f8u, 0x000059ebu, 0x00050041u, 0x00000174u, 0x00005ce0u, 0x00005cd2u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000059f1u, 0x00005ce0u, 0x00040071u, 0x00000006u, 0x000059f2u, 0x000059f1u, 0x0004007cu, 0x00000008u, 0x000059f3u, 0x000059f2u, 0x0003003eu, 0x000059a4u, 0x000059f3u, 0x000200f9u, 0x000059eau, 0x000200f8u, 0x000059eau, 0x000d00f5u, 0x00000008u, 0x0000a59eu, 0x000059f3u, 0x000059ebu, 0x000059f6u, 0x000059ecu, 0x000059f9u, 0x000059edu, 0x000059fcu, 0x000059eeu, 0x00005a00u, 0x000059efu, 0x00050051u, 0x00000008u, 0x00005a03u, 0x0000a59du, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005a04u, 0x0000a59du, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005a05u, 0x0000a59du, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005a06u, 0x00005a03u, 0x00005a04u, 0x00005a05u, 0x0000a59eu, 0x0003003eu, 0x000059a5u, 0x00005a06u, 0x0003003eu, 0x000058afu, 0x00005a06u, 0x00050041u, 0x00000174u, 0x000058deu, 0x00001973u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000058dfu, 0x000058deu, 0x00040071u, 0x00000006u, 0x000058e0u, 0x000058dfu, 0x0004007cu, 0x00000008u, 0x000058e1u, 0x000058e0u, 0x00050041u, 0x00000174u, 0x000058e2u, 0x00001974u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000058e3u, 0x000058e2u, 0x00040071u, 0x00000006u, 0x000058e4u, 0x000058e3u, 0x0004007cu, 0x00000008u, 0x000058e5u, 0x000058e4u, 0x0003003eu, 0x00005ce4u, 0x0000219au, 0x0003003eu, 0x00005ce5u, 0x00001ba9u, 0x0003003eu, 0x00005ce6u, 0x0000573bu, 0x0003003eu, 0x00005ce7u, 0x00009aa3u, 0x0003003eu, 0x00005ce8u, 0x00008850u, 0x0003003eu, 0x000058b5u, 0x000058e1u, 0x0003003eu, 0x000058b6u, 0x000058e5u, 0x000300f7u, 0x00005a0bu, 0x00000000u, 0x000d00fbu, 0x000058e1u, 0x00005a0cu, 0x00000000u, 0x00005a0du, 0x00000001u, 0x00005a0eu, 0x00000002u, 0x00005a0fu, 0x00000004u, 0x00005a10u, 0x00000006u, 0x00005a11u, 0x000200f8u, 0x00005a11u, 0x0003003eu, 0x00005a07u, 0x00001200u, 0x000200f9u, 0x00005a0bu, 0x000200f8u, 0x00005a10u, 0x0004003du, 0x00000010u, 0x00005a24u, 0x00005ce5u, 0x0008004fu, 0x000011f3u, 0x00005a25u, 0x00005a24u, 0x00005a24u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005a26u, 0x00005a25u, 0x0004007cu, 0x0000005du, 0x00005a27u, 0x00005a26u, 0x0003003eu, 0x00005a07u, 0x00005a27u, 0x000200f9u, 0x00005a0bu, 0x000200f8u, 0x00005a0fu, 0x0004003du, 0x00000013u, 0x00005a20u, 0x00005ce8u, 0x0008004fu, 0x0000065au, 0x00005a21u, 0x00005a20u, 0x00005a20u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005a22u, 0x00005a21u, 0x0003003eu, 0x00005a07u, 0x00005a22u, 0x000200f9u, 0x00005a0bu, 0x000200f8u, 0x00005a0eu, 0x0004003du, 0x00000013u, 0x00005a1cu, 0x00005ce7u, 0x0008004fu, 0x0000065au, 0x00005a1du, 0x00005a1cu, 0x00005a1cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005a1eu, 0x00005a1du, 0x0003003eu, 0x00005a07u, 0x00005a1eu, 0x000200f9u, 0x00005a0bu, 0x000200f8u, 0x00005a0du, 0x0004003du, 0x00000013u, 0x00005a18u, 0x00005ce6u, 0x0008004fu, 0x0000065au, 0x00005a19u, 0x00005a18u, 0x00005a18u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00005a1au, 0x00005a19u, 0x0003003eu, 0x00005a07u, 0x00005a1au, 0x000200f9u, 0x00005a0bu, 0x000200f8u, 0x00005a0cu, 0x0004003du, 0x00000010u, 0x00005a13u, 0x00005ce4u, 0x0008004fu, 0x000011f3u, 0x00005a14u, 0x00005a13u, 0x00005a13u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00005a15u, 0x00005a14u, 0x0004007cu, 0x0000005du, 0x00005a16u, 0x00005a15u, 0x0003003eu, 0x00005a07u, 0x00005a16u, 0x000200f9u, 0x00005a0bu, 0x000200f8u, 0x00005a0bu, 0x000f00f5u, 0x0000005du, 0x0000a5b5u, 0x00005a16u, 0x00005a0cu, 0x00005a1au, 0x00005a0du, 0x00005a1eu, 0x00005a0eu, 0x00005a22u, 0x00005a0fu, 0x00005a27u, 0x00005a10u, 0x00001200u, 0x00005a11u, 0x000300f7u, 0x00005a29u, 0x00000000u, 0x000d00fbu, 0x000058e5u, 0x00005a2au, 0x00000000u, 0x00005a2bu, 0x00000001u, 0x00005a2cu, 0x00000002u, 0x00005a2du, 0x00000004u, 0x00005a2eu, 0x00000006u, 0x00005a2fu, 0x000200f8u, 0x00005a2fu, 0x0003003eu, 0x00005a08u, 0x000011ffu, 0x000200f9u, 0x00005a29u, 0x000200f8u, 0x00005a2eu, 0x00050041u, 0x00000174u, 0x00005cf2u, 0x00005ce5u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005a3eu, 0x00005cf2u, 0x00040071u, 0x00000006u, 0x00005a3fu, 0x00005a3eu, 0x0004007cu, 0x00000008u, 0x00005a40u, 0x00005a3fu, 0x0003003eu, 0x00005a08u, 0x00005a40u, 0x000200f9u, 0x00005a29u, 0x000200f8u, 0x00005a2du, 0x00050041u, 0x00000133u, 0x00005cf1u, 0x00005ce8u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005a3bu, 0x00005cf1u, 0x00040072u, 0x00000008u, 0x00005a3cu, 0x00005a3bu, 0x0003003eu, 0x00005a08u, 0x00005a3cu, 0x000200f9u, 0x00005a29u, 0x000200f8u, 0x00005a2cu, 0x00050041u, 0x00000133u, 0x00005cf0u, 0x00005ce7u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005a38u, 0x00005cf0u, 0x00040072u, 0x00000008u, 0x00005a39u, 0x00005a38u, 0x0003003eu, 0x00005a08u, 0x00005a39u, 0x000200f9u, 0x00005a29u, 0x000200f8u, 0x00005a2bu, 0x00050041u, 0x00000133u, 0x00005cefu, 0x00005ce6u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00005a35u, 0x00005cefu, 0x00040072u, 0x00000008u, 0x00005a36u, 0x00005a35u, 0x0003003eu, 0x00005a08u, 0x00005a36u, 0x000200f9u, 0x00005a29u, 0x000200f8u, 0x00005a2au, 0x00050041u, 0x00000174u, 0x00005ceeu, 0x00005ce4u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00005a31u, 0x00005ceeu, 0x00040071u, 0x00000006u, 0x00005a32u, 0x00005a31u, 0x0004007cu, 0x00000008u, 0x00005a33u, 0x00005a32u, 0x0003003eu, 0x00005a08u, 0x00005a33u, 0x000200f9u, 0x00005a29u, 0x000200f8u, 0x00005a29u, 0x000f00f5u, 0x00000008u, 0x0000a5b6u, 0x00005a33u, 0x00005a2au, 0x00005a36u, 0x00005a2bu, 0x00005a39u, 0x00005a2cu, 0x00005a3cu, 0x00005a2du, 0x00005a40u, 0x00005a2eu, 0x000011ffu, 0x00005a2fu, 0x00050051u, 0x00000008u, 0x00005a43u, 0x0000a5b5u, 0x00000000u, 0x00050051u, 0x00000008u, 0x00005a44u, 0x0000a5b5u, 0x00000001u, 0x00050051u, 0x00000008u, 0x00005a45u, 0x0000a5b5u, 0x00000002u, 0x00070050u, 0x00000009u, 0x00005a46u, 0x00005a43u, 0x00005a44u, 0x00005a45u, 0x0000a5b6u, 0x0003003eu, 0x00005a09u, 0x00005a46u, 0x0003003eu, 0x000058b3u, 0x00005a46u, 0x0003003eu, 0x000058b8u, 0x00005957u, 0x0003003eu, 0x000058b9u, 0x000059a2u, 0x0003003eu, 0x000058bau, 0x00005a06u, 0x0003003eu, 0x000058bbu, 0x00005a46u, 0x000600cau, 0x00000009u, 0x00005a4du, 0x00005a06u, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x000058bau, 0x00005a4du, 0x0003003eu, 0x00005a47u, 0x00005957u, 0x00050082u, 0x00000009u, 0x00005a66u, 0x00005957u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005a67u, 0x00005a66u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005a69u, 0x00005a67u, 0x0000b618u, 0x0003003eu, 0x00005a63u, 0x00005a69u, 0x0003003eu, 0x000058b8u, 0x00005a69u, 0x0003003eu, 0x00005a48u, 0x000059a2u, 0x00050082u, 0x00000009u, 0x00005a6du, 0x000059a2u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005a6eu, 0x00005a6du, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005a70u, 0x00005a6eu, 0x0000b618u, 0x0003003eu, 0x00005a6au, 0x00005a70u, 0x0003003eu, 0x000058b9u, 0x00005a70u, 0x0003003eu, 0x00005a49u, 0x00005a46u, 0x00050082u, 0x00000009u, 0x00005a74u, 0x00005a46u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x00005a75u, 0x00005a74u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x00005a77u, 0x00005a75u, 0x0000b618u, 0x0003003eu, 0x00005a71u, 0x00005a77u, 0x0003003eu, 0x000058bbu, 0x00005a77u, 0x00050082u, 0x00000009u, 0x00005a56u, 0x00005a69u, 0x00005a70u, 0x00050084u, 0x00000009u, 0x00005a58u, 0x00005a56u, 0x00005a4du, 0x0003003eu, 0x00005a4au, 0x00005a58u, 0x00050080u, 0x00000009u, 0x00005a5bu, 0x00005a58u, 0x0000b618u, 0x0003003eu, 0x00005a4au, 0x00005a5bu, 0x000500c3u, 0x00000009u, 0x00005a5eu, 0x00005a5bu, 0x0000b622u, 0x00040072u, 0x00000013u, 0x00005a5fu, 0x00005a5eu, 0x00040072u, 0x00000013u, 0x00005a61u, 0x00005a77u, 0x00050080u, 0x00000013u, 0x00005a62u, 0x00005a5fu, 0x00005a61u, 0x0003003eu, 0x00005a4bu, 0x00005a62u, 0x0003003eu, 0x000058b7u, 0x00005a62u, 0x0004003du, 0x00000013u, 0x000058edu, 0x000058b7u, 0x00040072u, 0x00000009u, 0x000058eeu, 0x000058edu, 0x0003003eu, 0x000058bcu, 0x000058eeu, 0x00050082u, 0x00000009u, 0x00005a7bu, 0x000058eeu, 0x0000b618u, 0x0003003eu, 0x000058bcu, 0x00005a7bu, 0x000600cau, 0x00000009u, 0x00005a7du, 0x00005a7bu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x000058bcu, 0x00005a7du, 0x00050080u, 0x00000009u, 0x00005a80u, 0x00005a7du, 0x0000b618u, 0x0003003eu, 0x000058bcu, 0x00005a80u, 0x0008000cu, 0x00000009u, 0x00005a82u, 0x00000001u, 0x0000002du, 0x00005a80u, 0x00000310u, 0x00000312u, 0x00040072u, 0x00000013u, 0x00005a83u, 0x00005a82u, 0x0003003eu, 0x00005a78u, 0x00005a83u, 0x0003003eu, 0x000058b7u, 0x00005a83u, 0x00050041u, 0x00000133u, 0x000058f0u, 0x000058b7u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000058f1u, 0x000058f0u, 0x00040072u, 0x00000008u, 0x000058f2u, 0x000058f1u, 0x0004003du, 0x00000012u, 0x000058f4u, 0x000058f0u, 0x00040072u, 0x00000008u, 0x000058f5u, 0x000058f4u, 0x00050080u, 0x00000008u, 0x000058f6u, 0x000058f5u, 0x000001a6u, 0x000500c3u, 0x00000008u, 0x000058f7u, 0x000058f6u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x000058f8u, 0x000058f2u, 0x000058f7u, 0x0003003eu, 0x000058bdu, 0x000058f8u, 0x000300f7u, 0x000058fau, 0x00000000u, 0x000400fau, 0x000019f0u, 0x000058fbu, 0x000058fcu, 0x000200f8u, 0x000058fcu, 0x000500c4u, 0x00000008u, 0x00005905u, 0x00001a9cu, 0x000001b2u, 0x0003003eu, 0x000058beu, 0x00005905u, 0x000200f9u, 0x000058fau, 0x000200f8u, 0x000058fbu, 0x00050084u, 0x00000008u, 0x000058ffu, 0x000058f8u, 0x00001a9cu, 0x00050080u, 0x00000008u, 0x00005900u, 0x000058ffu, 0x000001afu, 0x000500c3u, 0x00000008u, 0x00005901u, 0x00005900u, 0x000001acu, 0x0003003eu, 0x000058beu, 0x00005901u, 0x000500c3u, 0x00000008u, 0x00005903u, 0x00005901u, 0x000001b2u, 0x0003003eu, 0x00001976u, 0x00005903u, 0x000200f9u, 0x000058fau, 0x000200f8u, 0x000058fau, 0x000700f5u, 0x00000008u, 0x0000a5e9u, 0x00005903u, 0x000058fbu, 0x00001a9cu, 0x000058fcu, 0x000700f5u, 0x00000008u, 0x0000a5e6u, 0x00005901u, 0x000058fbu, 0x00005905u, 0x000058fcu, 0x000300f7u, 0x00005907u, 0x00000000u, 0x000400fau, 0x000019f3u, 0x00005908u, 0x00005909u, 0x000200f8u, 0x00005909u, 0x00050080u, 0x00000008u, 0x0000590du, 0x000058f8u, 0x00009583u, 0x0003003eu, 0x000058bdu, 0x0000590du, 0x000200f9u, 0x00005907u, 0x000200f8u, 0x00005908u, 0x0003003eu, 0x000058bdu, 0x0000a5e6u, 0x000200f9u, 0x00005907u, 0x000200f8u, 0x00005907u, 0x000700f5u, 0x00000008u, 0x0000a5e7u, 0x0000a5e6u, 0x00005908u, 0x0000590du, 0x00005909u, 0x0008000cu, 0x00000008u, 0x0000590fu, 0x00000001u, 0x0000002du, 0x0000a5e7u, 0x0000019cu, 0x00000311u, 0x00040072u, 0x00000012u, 0x00005910u, 0x0000590fu, 0x0003003eu, 0x000058f0u, 0x00005910u, 0x0004003du, 0x00000013u, 0x00005912u, 0x000058b7u, 0x0003003eu, 0x000058bfu, 0x00005912u, 0x0003003eu, 0x00001901u, 0x0000a5e9u, 0x00040072u, 0x0000031cu, 0x00001bd6u, 0x00005912u, 0x0004007cu, 0x00000010u, 0x00001bd7u, 0x00001bd6u, 0x0003003eu, 0x00001971u, 0x00001bd7u, 0x000200f9u, 0x00001b9eu, 0x000200f8u, 0x00001b9eu, 0x000700f5u, 0x0000000fu, 0x0000a835u, 0x0000a4dau, 0x00005907u, 0x00001bf2u, 0x00005aeau, 0x000700f5u, 0x00000008u, 0x0000a6feu, 0x0000a5e9u, 0x00005907u, 0x00009f95u, 0x00005aeau, 0x000500aau, 0x00000063u, 0x00001bf5u, 0x0000a6feu, 0x0000019cu, 0x000500a7u, 0x00000063u, 0x00001bf6u, 0x00001a02u, 0x00001bf5u, 0x000300f7u, 0x00001bf7u, 0x00000000u, 0x000400fau, 0x00001bf6u, 0x00001bf8u, 0x00001bf7u, 0x000200f8u, 0x00001bf8u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001bf7u, 0x000300f7u, 0x00001bfau, 0x00000000u, 0x000400fau, 0x00001a11u, 0x00001bfbu, 0x00001bfau, 0x000200f8u, 0x00001bfbu, 0x000300f7u, 0x00001bfdu, 0x00000000u, 0x000400fau, 0x00001a14u, 0x00001bfeu, 0x00001bffu, 0x000200f8u, 0x00001bffu, 0x00050041u, 0x00000174u, 0x00006281u, 0x00006273u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001c02u, 0x00006281u, 0x0003003eu, 0x00001981u, 0x00001c02u, 0x000200f9u, 0x00001bfdu, 0x000200f8u, 0x00001bfeu, 0x0004003du, 0x00000011u, 0x00005c68u, 0x00000195u, 0x000500c7u, 0x00000011u, 0x00005c69u, 0x00005c68u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x00005c6au, 0x00005c69u, 0x0003003eu, 0x00005c67u, 0x00005c6au, 0x0003003eu, 0x00001981u, 0x00005c6au, 0x000200f9u, 0x00001bfdu, 0x000200f8u, 0x00001bfdu, 0x000700f5u, 0x0000000fu, 0x0000a840u, 0x00005c6au, 0x00001bfeu, 0x00001c02u, 0x00001bffu, 0x000500b0u, 0x00000063u, 0x00001c05u, 0x0000a835u, 0x0000a840u, 0x000300f7u, 0x00001c06u, 0x00000000u, 0x000400fau, 0x00001c05u, 0x00001c07u, 0x00001c06u, 0x000200f8u, 0x00001c07u, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x00001099u, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001c06u, 0x000200f9u, 0x00001bfau, 0x000200f8u, 0x00001bfau, 0x0004003du, 0x00000010u, 0x00001c08u, 0x00001971u, 0x0003003eu, 0x00006d09u, 0x00001c08u, 0x000500c4u, 0x00000008u, 0x00001c0bu, 0x0000242eu, 0x000001dcu, 0x000500c5u, 0x00000008u, 0x00001c0du, 0x00001c0bu, 0x00009577u, 0x0003003eu, 0x00006d0au, 0x00001c0du, 0x00040072u, 0x0000031bu, 0x00001c10u, 0x0000a6feu, 0x0004007cu, 0x0000000fu, 0x00001c11u, 0x00001c10u, 0x0003003eu, 0x00006d0bu, 0x00001c11u, 0x00050041u, 0x00000174u, 0x00001c13u, 0x00001906u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001c14u, 0x00001c13u, 0x00040071u, 0x00000006u, 0x00001c15u, 0x00001c14u, 0x0004007cu, 0x00000008u, 0x00001c16u, 0x00001c15u, 0x00050080u, 0x00000008u, 0x00001c18u, 0x00001c16u, 0x00009583u, 0x0007000cu, 0x00000008u, 0x00001c19u, 0x00000001u, 0x00000027u, 0x00001c18u, 0x00000311u, 0x00040072u, 0x0000031bu, 0x00001c1au, 0x00001c19u, 0x0004007cu, 0x0000000fu, 0x00001c1bu, 0x00001c1au, 0x0003003eu, 0x00006d0cu, 0x00001c1bu, 0x0003003eu, 0x000018b7u, 0x0000046cu, 0x0003003eu, 0x000018b8u, 0x0000046cu, 0x000200f9u, 0x00001983u, 0x000200f8u, 0x00001983u, 0x001900f5u, 0x00000010u, 0x0000aebbu, 0x0000aebdu, 0x00001997u, 0x0000aebdu, 0x000019b6u, 0x0000aebdu, 0x00001a50u, 0x0000aebdu, 0x00001a7fu, 0x0000aebdu, 0x00001a7eu, 0x0000aebdu, 0x00001a88u, 0x0000aebdu, 0x00001a9au, 0x0000aebdu, 0x00001aa6u, 0x0000aebdu, 0x00001bf8u, 0x0000aebdu, 0x00001c07u, 0x00001c08u, 0x00001bfau, 0x001900f5u, 0x00000008u, 0x0000ad9bu, 0x0000ad9du, 0x00001997u, 0x0000ad9du, 0x000019b6u, 0x0000ad9du, 0x00001a50u, 0x0000aaffu, 0x00001a7fu, 0x0000aaffu, 0x00001a7eu, 0x0000ad9du, 0x00001a88u, 0x0000ad9du, 0x00001a9au, 0x0000ad9du, 0x00001aa6u, 0x0000ad9du, 0x00001bf8u, 0x0000ad9du, 0x00001c07u, 0x00001c0du, 0x00001bfau, 0x001900f5u, 0x0000000fu, 0x0000ac7cu, 0x0000ab32u, 0x00001997u, 0x0000ab32u, 0x000019b6u, 0x0000ab32u, 0x00001a50u, 0x000002ebu, 0x00001a7fu, 0x000002ebu, 0x00001a7eu, 0x000002ecu, 0x00001a88u, 0x0000ab32u, 0x00001a9au, 0x0000ab32u, 0x00001aa6u, 0x0000ab32u, 0x00001bf8u, 0x0000ab32u, 0x00001c07u, 0x00001c11u, 0x00001bfau, 0x001900f5u, 0x0000000fu, 0x0000ab30u, 0x0000ab32u, 0x00001997u, 0x0000ab32u, 0x000019b6u, 0x0000ab32u, 0x00001a50u, 0x0000ab32u, 0x00001a7fu, 0x0000ab32u, 0x00001a7eu, 0x0000ab32u, 0x00001a88u, 0x0000ab32u, 0x00001a9au, 0x0000ab32u, 0x00001aa6u, 0x0000ab32u, 0x00001bf8u, 0x0000ab32u, 0x00001c07u, 0x00001c1bu, 0x00001bfau, 0x001900f5u, 0x00000063u, 0x0000ab2fu, 0x00001099u, 0x00001997u, 0x00001099u, 0x000019b6u, 0x00001099u, 0x00001a50u, 0x00001099u, 0x00001a7fu, 0x0000046cu, 0x00001a7eu, 0x00001a8eu, 0x00001a88u, 0x00001099u, 0x00001a9au, 0x00001099u, 0x00001aa6u, 0x00001099u, 0x00001bf8u, 0x00001099u, 0x00001c07u, 0x0000046cu, 0x00001bfau, 0x0003003eu, 0x00001982u, 0x0000ab2fu, 0x00070050u, 0x0000018bu, 0x00006d11u, 0x0000aebbu, 0x0000ad9bu, 0x0000ac7cu, 0x0000ab30u, 0x0003003eu, 0x00006d01u, 0x0000aebbu, 0x0003003eu, 0x00006d02u, 0x0000ad9bu, 0x0003003eu, 0x00006d03u, 0x0000ac7cu, 0x0003003eu, 0x00006d04u, 0x0000ab30u, 0x000300f7u, 0x00001862u, 0x00000000u, 0x000400fau, 0x0000ab2fu, 0x00001861u, 0x00001899u, 0x000200f8u, 0x00001899u, 0x0003003eu, 0x00001864u, 0x0000189au, 0x000200f9u, 0x00001862u, 0x000200f8u, 0x00001861u, 0x0004007cu, 0x0000031bu, 0x00001867u, 0x0000ac7cu, 0x0003003eu, 0x00001864u, 0x00001867u, 0x000500b3u, 0x00000063u, 0x0000186au, 0x00001867u, 0x00001869u, 0x000300f7u, 0x0000186cu, 0x00000000u, 0x000400fau, 0x0000186au, 0x0000186bu, 0x00001888u, 0x000200f8u, 0x00001888u, 0x00040072u, 0x00000008u, 0x0000188au, 0x00001867u, 0x000500c7u, 0x00000008u, 0x0000188bu, 0x0000188au, 0x00000977u, 0x000500abu, 0x00000063u, 0x0000188cu, 0x0000188bu, 0x0000019cu, 0x000300f7u, 0x0000188eu, 0x00000000u, 0x000400fau, 0x0000188cu, 0x0000188du, 0x0000188eu, 0x000200f8u, 0x0000188du, 0x0004007cu, 0x00000006u, 0x00001896u, 0x0000ad9bu, 0x00060041u, 0x00001897u, 0x00001898u, 0x00001892u, 0x0000019cu, 0x00001856u, 0x0003003eu, 0x00001898u, 0x00001896u, 0x000200f9u, 0x0000188eu, 0x000200f8u, 0x0000188eu, 0x000200f9u, 0x0000186cu, 0x000200f8u, 0x0000186bu, 0x00040071u, 0x0000147au, 0x00001874u, 0x0000aebbu, 0x00040071u, 0x00000010u, 0x00001875u, 0x00001874u, 0x00060041u, 0x00001484u, 0x00001876u, 0x00001870u, 0x0000019cu, 0x00001856u, 0x0003003eu, 0x00001876u, 0x00001875u, 0x00060041u, 0x000006a8u, 0x0000187eu, 0x0000187au, 0x0000019cu, 0x00001856u, 0x0003003eu, 0x0000187eu, 0x0000ab30u, 0x00060041u, 0x00001886u, 0x00001887u, 0x00001882u, 0x0000019cu, 0x00001856u, 0x0003003eu, 0x00001887u, 0x0000ad9bu, 0x000200f9u, 0x0000186cu, 0x000200f8u, 0x0000186cu, 0x000200f9u, 0x00001862u, 0x000200f8u, 0x00001862u, 0x000700f5u, 0x0000031bu, 0x0000b156u, 0x00001867u, 0x0000186cu, 0x0000189au, 0x00001899u, 0x00060041u, 0x000018a1u, 0x000018a2u, 0x0000189eu, 0x0000019cu, 0x00001856u, 0x0003003eu, 0x000018a2u, 0x0000b156u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x00000047u, 0x00006d19u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d18u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d17u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d16u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d15u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d14u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d13u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d12u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000019du, 0x0000000cu, 0x00060041u, 0x0000019eu, 0x0000019fu, 0x0000019bu, 0x0000019cu, 0x0000019du, 0x0004003du, 0x00000197u, 0x000001a0u, 0x0000019fu, 0x00050051u, 0x00000009u, 0x000001a3u, 0x000001a0u, 0x00000000u, 0x0003003eu, 0x00006d12u, 0x000001a3u, 0x00050051u, 0x00000009u, 0x000001a5u, 0x000001a0u, 0x00000001u, 0x0003003eu, 0x00006d13u, 0x000001a5u, 0x00050051u, 0x00000009u, 0x000001a8u, 0x000001a0u, 0x00000002u, 0x0003003eu, 0x00006d14u, 0x000001a8u, 0x00050051u, 0x00000009u, 0x000001abu, 0x000001a0u, 0x00000003u, 0x0003003eu, 0x00006d15u, 0x000001abu, 0x00050051u, 0x00000009u, 0x000001aeu, 0x000001a0u, 0x00000004u, 0x0003003eu, 0x00006d16u, 0x000001aeu, 0x00050051u, 0x00000009u, 0x000001b1u, 0x000001a0u, 0x00000005u, 0x0003003eu, 0x00006d17u, 0x000001b1u, 0x00050051u, 0x00000009u, 0x000001b4u, 0x000001a0u, 0x00000006u, 0x0003003eu, 0x00006d18u, 0x000001b4u, 0x00050051u, 0x00000009u, 0x000001b7u, 0x000001a0u, 0x00000007u, 0x0003003eu, 0x00006d19u, 0x000001b7u, 0x000b0050u, 0x0000000au, 0x00006d22u, 0x000001a3u, 0x000001a5u, 0x000001a8u, 0x000001abu, 0x000001aeu, 0x000001b1u, 0x000001b4u, 0x000001b7u, 0x000200feu, 0x00006d22u, 0x00010038u, 0x00050036u, 0x00000014u, 0x00000017u, 0x00000000u, 0x00000015u, 0x00030037u, 0x00000007u, 0x00000016u, 0x000200f8u, 0x00000018u, 0x0004003bu, 0x0000004cu, 0x00006d31u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d30u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d2fu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00006d2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d2du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d2cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d2bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d2au, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d29u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d28u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d27u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d26u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d25u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d24u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d23u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000001c2u, 0x00000016u, 0x00060041u, 0x000001c3u, 0x000001c4u, 0x000001c1u, 0x0000019cu, 0x000001c2u, 0x0004003du, 0x000001bdu, 0x000001c5u, 0x000001c4u, 0x00050051u, 0x00000010u, 0x000001c8u, 0x000001c5u, 0x00000000u, 0x0003003eu, 0x00006d23u, 0x000001c8u, 0x00050051u, 0x00000010u, 0x000001cau, 0x000001c5u, 0x00000001u, 0x0003003eu, 0x00006d24u, 0x000001cau, 0x00050051u, 0x00000010u, 0x000001ccu, 0x000001c5u, 0x00000002u, 0x0003003eu, 0x00006d25u, 0x000001ccu, 0x00050051u, 0x00000010u, 0x000001ceu, 0x000001c5u, 0x00000003u, 0x0003003eu, 0x00006d26u, 0x000001ceu, 0x00050051u, 0x00000010u, 0x000001d0u, 0x000001c5u, 0x00000004u, 0x0003003eu, 0x00006d27u, 0x000001d0u, 0x00050051u, 0x00000010u, 0x000001d2u, 0x000001c5u, 0x00000005u, 0x0003003eu, 0x00006d28u, 0x000001d2u, 0x00050051u, 0x00000010u, 0x000001d4u, 0x000001c5u, 0x00000006u, 0x0003003eu, 0x00006d29u, 0x000001d4u, 0x00050051u, 0x00000010u, 0x000001d6u, 0x000001c5u, 0x00000007u, 0x0003003eu, 0x00006d2au, 0x000001d6u, 0x00050051u, 0x00000010u, 0x000001d8u, 0x000001c5u, 0x00000008u, 0x0003003eu, 0x00006d2bu, 0x000001d8u, 0x00050051u, 0x00000010u, 0x000001dbu, 0x000001c5u, 0x00000009u, 0x0003003eu, 0x00006d2cu, 0x000001dbu, 0x00050051u, 0x00000006u, 0x000001deu, 0x000001c5u, 0x0000000au, 0x0003003eu, 0x00006d2du, 0x000001deu, 0x00050051u, 0x00000011u, 0x000001e1u, 0x000001c5u, 0x0000000bu, 0x0003003eu, 0x00006d2eu, 0x000001e1u, 0x00050051u, 0x0000000fu, 0x000001e5u, 0x000001c5u, 0x0000000cu, 0x0003003eu, 0x00006d2fu, 0x000001e5u, 0x00050051u, 0x0000000fu, 0x000001e8u, 0x000001c5u, 0x0000000du, 0x0003003eu, 0x00006d30u, 0x000001e8u, 0x00050051u, 0x00000013u, 0x000001ebu, 0x000001c5u, 0x0000000eu, 0x0003003eu, 0x00006d31u, 0x000001ebu, 0x00120050u, 0x00000014u, 0x00006d41u, 0x000001c8u, 0x000001cau, 0x000001ccu, 0x000001ceu, 0x000001d0u, 0x000001d2u, 0x000001d4u, 0x000001d6u, 0x000001d8u, 0x000001dbu, 0x000001deu, 0x000001e1u, 0x000001e5u, 0x000001e8u, 0x000001ebu, 0x000200feu, 0x00006d41u, 0x00010038u, 0x00050036u, 0x00000019u, 0x0000001cu, 0x00000000u, 0x0000001au, 0x00030037u, 0x00000007u, 0x0000001bu, 0x000200f8u, 0x0000001du, 0x0004003bu, 0x00000040u, 0x00006d49u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d48u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d47u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d46u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d45u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d44u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d43u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006d42u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000001f6u, 0x0000001bu, 0x00060041u, 0x000001f7u, 0x000001f8u, 0x000001f5u, 0x0000019cu, 0x000001f6u, 0x0004003du, 0x000001f1u, 0x000001f9u, 0x000001f8u, 0x00050051u, 0x00000010u, 0x000001fcu, 0x000001f9u, 0x00000000u, 0x0003003eu, 0x00006d42u, 0x000001fcu, 0x00050051u, 0x00000010u, 0x000001feu, 0x000001f9u, 0x00000001u, 0x0003003eu, 0x00006d43u, 0x000001feu, 0x00050051u, 0x00000010u, 0x00000200u, 0x000001f9u, 0x00000002u, 0x0003003eu, 0x00006d44u, 0x00000200u, 0x00050051u, 0x00000010u, 0x00000202u, 0x000001f9u, 0x00000003u, 0x0003003eu, 0x00006d45u, 0x00000202u, 0x00050051u, 0x00000006u, 0x00000204u, 0x000001f9u, 0x00000004u, 0x0003003eu, 0x00006d46u, 0x00000204u, 0x00050051u, 0x00000008u, 0x00000206u, 0x000001f9u, 0x00000005u, 0x0003003eu, 0x00006d47u, 0x00000206u, 0x00050051u, 0x00000008u, 0x00000208u, 0x000001f9u, 0x00000006u, 0x0003003eu, 0x00006d48u, 0x00000208u, 0x00050051u, 0x00000008u, 0x0000020au, 0x000001f9u, 0x00000007u, 0x0003003eu, 0x00006d49u, 0x0000020au, 0x000b0050u, 0x00000019u, 0x00006d52u, 0x000001fcu, 0x000001feu, 0x00000200u, 0x00000202u, 0x00000204u, 0x00000206u, 0x00000208u, 0x0000020au, 0x000200feu, 0x00006d52u, 0x00010038u, 0x00050036u, 0x0000001eu, 0x00000021u, 0x00000000u, 0x0000001fu, 0x00030037u, 0x00000007u, 0x00000020u, 0x000200f8u, 0x00000022u, 0x0004003bu, 0x00000040u, 0x00006d56u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d55u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d54u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d53u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000214u, 0x00000020u, 0x00060041u, 0x00000215u, 0x00000216u, 0x00000213u, 0x0000019cu, 0x00000214u, 0x0004003du, 0x0000020fu, 0x00000217u, 0x00000216u, 0x00050051u, 0x00000008u, 0x0000021au, 0x00000217u, 0x00000000u, 0x0003003eu, 0x00006d53u, 0x0000021au, 0x00050051u, 0x00000008u, 0x0000021cu, 0x00000217u, 0x00000001u, 0x0003003eu, 0x00006d54u, 0x0000021cu, 0x00050051u, 0x00000008u, 0x0000021eu, 0x00000217u, 0x00000002u, 0x0003003eu, 0x00006d55u, 0x0000021eu, 0x00050051u, 0x00000008u, 0x00000220u, 0x00000217u, 0x00000003u, 0x0003003eu, 0x00006d56u, 0x00000220u, 0x00070050u, 0x0000001eu, 0x00006d5bu, 0x0000021au, 0x0000021cu, 0x0000021eu, 0x00000220u, 0x000200feu, 0x00006d5bu, 0x00010038u, 0x00050036u, 0x00000024u, 0x00000027u, 0x00000000u, 0x00000025u, 0x00030037u, 0x00000007u, 0x00000026u, 0x000200f8u, 0x00000028u, 0x0004003bu, 0x000001e3u, 0x00006d64u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006d63u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d62u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d61u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d60u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x00006d5fu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x00006d5eu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d5du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d5cu, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000022au, 0x00000026u, 0x00060041u, 0x0000022bu, 0x0000022cu, 0x00000229u, 0x0000019cu, 0x0000022au, 0x0004003du, 0x00000225u, 0x0000022du, 0x0000022cu, 0x00050051u, 0x00000009u, 0x0000022fu, 0x0000022du, 0x00000000u, 0x0003003eu, 0x00006d5cu, 0x0000022fu, 0x00050051u, 0x00000009u, 0x00000231u, 0x0000022du, 0x00000001u, 0x0003003eu, 0x00006d5du, 0x00000231u, 0x00050051u, 0x00000023u, 0x00000233u, 0x0000022du, 0x00000002u, 0x0003003eu, 0x00006d5eu, 0x00000233u, 0x00050051u, 0x00000023u, 0x00000235u, 0x0000022du, 0x00000003u, 0x0003003eu, 0x00006d5fu, 0x00000235u, 0x00050051u, 0x00000008u, 0x00000237u, 0x0000022du, 0x00000004u, 0x0003003eu, 0x00006d60u, 0x00000237u, 0x00050051u, 0x00000008u, 0x00000239u, 0x0000022du, 0x00000005u, 0x0003003eu, 0x00006d61u, 0x00000239u, 0x00050051u, 0x00000008u, 0x0000023bu, 0x0000022du, 0x00000006u, 0x0003003eu, 0x00006d62u, 0x0000023bu, 0x00050051u, 0x00000012u, 0x0000023du, 0x0000022du, 0x00000007u, 0x0003003eu, 0x00006d63u, 0x0000023du, 0x00050051u, 0x00000011u, 0x0000023fu, 0x0000022du, 0x00000008u, 0x0003003eu, 0x00006d64u, 0x0000023fu, 0x000c0050u, 0x00000024u, 0x00006d6eu, 0x0000022fu, 0x00000231u, 0x00000233u, 0x00000235u, 0x00000237u, 0x00000239u, 0x0000023bu, 0x0000023du, 0x0000023fu, 0x000200feu, 0x00006d6eu, 0x00010038u, 0x00050036u, 0x00000029u, 0x0000002cu, 0x00000000u, 0x0000002au, 0x00030037u, 0x00000007u, 0x0000002bu, 0x000200f8u, 0x0000002du, 0x0004003bu, 0x00000174u, 0x00006d7cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d7bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d7au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d79u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d78u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d77u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d76u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006d75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d74u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d70u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006d6fu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000249u, 0x0000002bu, 0x00060041u, 0x0000024au, 0x0000024bu, 0x00000248u, 0x0000019cu, 0x00000249u, 0x0004003du, 0x00000244u, 0x0000024cu, 0x0000024bu, 0x00050051u, 0x00000006u, 0x0000024eu, 0x0000024cu, 0x00000000u, 0x0003003eu, 0x00006d6fu, 0x0000024eu, 0x00050051u, 0x00000006u, 0x00000250u, 0x0000024cu, 0x00000001u, 0x0003003eu, 0x00006d70u, 0x00000250u, 0x00050051u, 0x00000006u, 0x00000252u, 0x0000024cu, 0x00000002u, 0x0003003eu, 0x00006d71u, 0x00000252u, 0x00050051u, 0x00000006u, 0x00000254u, 0x0000024cu, 0x00000003u, 0x0003003eu, 0x00006d72u, 0x00000254u, 0x00050051u, 0x00000006u, 0x00000256u, 0x0000024cu, 0x00000004u, 0x0003003eu, 0x00006d73u, 0x00000256u, 0x00050051u, 0x00000006u, 0x00000258u, 0x0000024cu, 0x00000005u, 0x0003003eu, 0x00006d74u, 0x00000258u, 0x00050051u, 0x0000000fu, 0x0000025au, 0x0000024cu, 0x00000006u, 0x0003003eu, 0x00006d75u, 0x0000025au, 0x00050051u, 0x0000000fu, 0x0000025cu, 0x0000024cu, 0x00000007u, 0x0003003eu, 0x00006d76u, 0x0000025cu, 0x00050051u, 0x0000000fu, 0x0000025eu, 0x0000024cu, 0x00000008u, 0x0003003eu, 0x00006d77u, 0x0000025eu, 0x00050051u, 0x0000000fu, 0x00000260u, 0x0000024cu, 0x00000009u, 0x0003003eu, 0x00006d78u, 0x00000260u, 0x00050051u, 0x0000000fu, 0x00000262u, 0x0000024cu, 0x0000000au, 0x0003003eu, 0x00006d79u, 0x00000262u, 0x00050051u, 0x0000000fu, 0x00000264u, 0x0000024cu, 0x0000000bu, 0x0003003eu, 0x00006d7au, 0x00000264u, 0x00050051u, 0x0000000fu, 0x00000266u, 0x0000024cu, 0x0000000cu, 0x0003003eu, 0x00006d7bu, 0x00000266u, 0x00050051u, 0x0000000fu, 0x00000268u, 0x0000024cu, 0x0000000du, 0x0003003eu, 0x00006d7cu, 0x00000268u, 0x00110050u, 0x00000029u, 0x00006d8bu, 0x0000024eu, 0x00000250u, 0x00000252u, 0x00000254u, 0x00000256u, 0x00000258u, 0x0000025au, 0x0000025cu, 0x0000025eu, 0x00000260u, 0x00000262u, 0x00000264u, 0x00000266u, 0x00000268u, 0x000200feu, 0x00006d8bu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000032u, 0x00000000u, 0x0000002eu, 0x00030037u, 0x00000007u, 0x0000002fu, 0x00030037u, 0x00000007u, 0x00000030u, 0x00030037u, 0x00000007u, 0x00000031u, 0x000200f8u, 0x00000033u, 0x0004003bu, 0x0000026eu, 0x0000026fu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000270u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x00000271u, 0x00000030u, 0x0004003du, 0x00000006u, 0x00000272u, 0x00000031u, 0x00060050u, 0x0000026du, 0x00000273u, 0x00000270u, 0x00000271u, 0x00000272u, 0x0003003eu, 0x0000026fu, 0x00000273u, 0x0004003du, 0x0000026du, 0x00000274u, 0x0000026fu, 0x000500c2u, 0x0000026du, 0x00000277u, 0x00000274u, 0x0000b612u, 0x0004003du, 0x0000026du, 0x00000278u, 0x0000026fu, 0x0008004fu, 0x0000026du, 0x00000279u, 0x00000278u, 0x00000278u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000026du, 0x0000027au, 0x00000277u, 0x00000279u, 0x00050084u, 0x0000026du, 0x0000027du, 0x0000027au, 0x0000b613u, 0x0003003eu, 0x0000026fu, 0x0000027du, 0x0004003du, 0x0000026du, 0x0000027eu, 0x0000026fu, 0x000500c2u, 0x0000026du, 0x00000280u, 0x0000027eu, 0x0000b612u, 0x0004003du, 0x0000026du, 0x00000281u, 0x0000026fu, 0x0008004fu, 0x0000026du, 0x00000282u, 0x00000281u, 0x00000281u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000026du, 0x00000283u, 0x00000280u, 0x00000282u, 0x00050084u, 0x0000026du, 0x00000285u, 0x00000283u, 0x0000b613u, 0x0003003eu, 0x0000026fu, 0x00000285u, 0x0004003du, 0x0000026du, 0x00000286u, 0x0000026fu, 0x000500c2u, 0x0000026du, 0x00000288u, 0x00000286u, 0x0000b612u, 0x0004003du, 0x0000026du, 0x00000289u, 0x0000026fu, 0x0008004fu, 0x0000026du, 0x0000028au, 0x00000289u, 0x00000289u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000026du, 0x0000028bu, 0x00000288u, 0x0000028au, 0x00050084u, 0x0000026du, 0x0000028du, 0x0000028bu, 0x0000b613u, 0x0003003eu, 0x0000026fu, 0x0000028du, 0x00050041u, 0x00000007u, 0x0000028fu, 0x0000026fu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000290u, 0x0000028fu, 0x000500c2u, 0x00000006u, 0x00000292u, 0x00000290u, 0x00000291u, 0x00040071u, 0x00000011u, 0x00000293u, 0x00000292u, 0x0003003eu, 0x00000195u, 0x00000293u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000012u, 0x00000035u, 0x00000000u, 0x00000034u, 0x000200f8u, 0x00000036u, 0x0004003du, 0x00000011u, 0x00000294u, 0x00000195u, 0x000500c7u, 0x00000011u, 0x00000296u, 0x00000294u, 0x00000295u, 0x000500c4u, 0x00000011u, 0x00000298u, 0x00000296u, 0x00000297u, 0x000500c5u, 0x00000011u, 0x0000029au, 0x00000298u, 0x00000299u, 0x0004007cu, 0x00000012u, 0x0000029bu, 0x0000029au, 0x000200feu, 0x0000029bu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000038u, 0x00000000u, 0x00000037u, 0x000200f8u, 0x00000039u, 0x0004003du, 0x00000011u, 0x0000029eu, 0x00000195u, 0x000500c7u, 0x00000011u, 0x0000029fu, 0x0000029eu, 0x00000295u, 0x00040071u, 0x00000006u, 0x000002a0u, 0x0000029fu, 0x0004007cu, 0x00000008u, 0x000002a1u, 0x000002a0u, 0x000200feu, 0x000002a1u, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000003au, 0x00000000u, 0x00000037u, 0x000200f8u, 0x0000003bu, 0x0004003du, 0x00000011u, 0x000002a4u, 0x00000195u, 0x000500c7u, 0x00000011u, 0x000002a6u, 0x000002a4u, 0x000002a5u, 0x00040071u, 0x00000006u, 0x000002a7u, 0x000002a6u, 0x0004007cu, 0x00000008u, 0x000002a8u, 0x000002a7u, 0x000200feu, 0x000002a8u, 0x00010038u, 0x00050036u, 0x0000000fu, 0x0000003du, 0x00000000u, 0x0000003cu, 0x000200f8u, 0x0000003eu, 0x0004003du, 0x00000011u, 0x000002abu, 0x00000195u, 0x000500c7u, 0x00000011u, 0x000002adu, 0x000002abu, 0x000002acu, 0x00040071u, 0x0000000fu, 0x000002aeu, 0x000002adu, 0x000200feu, 0x000002aeu, 0x00010038u, 0x00050036u, 0x0000000fu, 0x00000045u, 0x00000000u, 0x00000041u, 0x00030037u, 0x0000003fu, 0x00000042u, 0x00030037u, 0x0000003fu, 0x00000043u, 0x00030037u, 0x00000040u, 0x00000044u, 0x000200f8u, 0x00000046u, 0x0004003bu, 0x0000003fu, 0x000002b1u, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x000002beu, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x000002c3u, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x000002c8u, 0x00000007u, 0x0004003bu, 0x000002bdu, 0x000002cdu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000002d2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000002dcu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000002e2u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000002f1u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000002b5u, 0x00000044u, 0x00040072u, 0x00000012u, 0x000002b6u, 0x000002b5u, 0x0004007cu, 0x00000011u, 0x000002b7u, 0x000002b6u, 0x000500c4u, 0x00000011u, 0x000002b9u, 0x000002b7u, 0x000002b8u, 0x00070050u, 0x00000023u, 0x000002bau, 0x000002b9u, 0x000002b9u, 0x000002b9u, 0x000002b9u, 0x00050080u, 0x00000023u, 0x000002bbu, 0x000002b4u, 0x000002bau, 0x0003003eu, 0x000002b1u, 0x000002bbu, 0x0004003du, 0x00000023u, 0x000002c0u, 0x00000042u, 0x0009004fu, 0x00000023u, 0x000002c1u, 0x000002c0u, 0x000002c0u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500b0u, 0x000002bcu, 0x000002c2u, 0x000002bbu, 0x000002c1u, 0x0003003eu, 0x000002beu, 0x000002c2u, 0x0004003du, 0x00000023u, 0x000002c5u, 0x00000042u, 0x0009004fu, 0x00000023u, 0x000002c6u, 0x000002c5u, 0x000002c5u, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500b0u, 0x000002bcu, 0x000002c7u, 0x000002bbu, 0x000002c6u, 0x0003003eu, 0x000002c3u, 0x000002c7u, 0x0004003du, 0x00000023u, 0x000002cau, 0x00000043u, 0x0009004fu, 0x00000023u, 0x000002cbu, 0x000002cau, 0x000002cau, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000001u, 0x000500aeu, 0x000002bcu, 0x000002ccu, 0x000002bbu, 0x000002cbu, 0x0003003eu, 0x000002c8u, 0x000002ccu, 0x0004003du, 0x00000023u, 0x000002cfu, 0x00000043u, 0x0009004fu, 0x00000023u, 0x000002d0u, 0x000002cfu, 0x000002cfu, 0x00000002u, 0x00000002u, 0x00000003u, 0x00000003u, 0x000500aeu, 0x000002bcu, 0x000002d1u, 0x000002bbu, 0x000002d0u, 0x0003003eu, 0x000002cdu, 0x000002d1u, 0x000600a9u, 0x00000010u, 0x000002d8u, 0x000002c2u, 0x000002d7u, 0x000002d6u, 0x000600a9u, 0x00000010u, 0x000002dau, 0x000002ccu, 0x000002d7u, 0x000002d6u, 0x000500c5u, 0x00000010u, 0x000002dbu, 0x000002d8u, 0x000002dau, 0x0003003eu, 0x000002d2u, 0x000002dbu, 0x000600a9u, 0x00000010u, 0x000002deu, 0x000002c7u, 0x000002d7u, 0x000002d6u, 0x000600a9u, 0x00000010u, 0x000002e0u, 0x000002d1u, 0x000002d7u, 0x000002d6u, 0x000500c5u, 0x00000010u, 0x000002e1u, 0x000002deu, 0x000002e0u, 0x0003003eu, 0x000002dcu, 0x000002e1u, 0x00050084u, 0x00000010u, 0x000002e8u, 0x000002dbu, 0x000002e7u, 0x00050084u, 0x00000010u, 0x000002efu, 0x000002e1u, 0x000002eeu, 0x00050080u, 0x00000010u, 0x000002f0u, 0x000002e8u, 0x000002efu, 0x0003003eu, 0x000002e2u, 0x000002f0u, 0x00050041u, 0x00000174u, 0x000002f2u, 0x000002e2u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000002f3u, 0x000002f2u, 0x00050041u, 0x00000174u, 0x000002f5u, 0x000002e2u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000002f6u, 0x000002f5u, 0x000500c5u, 0x0000000fu, 0x000002f7u, 0x000002f3u, 0x000002f6u, 0x00050041u, 0x00000174u, 0x000002f9u, 0x000002e2u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000002fau, 0x000002f9u, 0x00050041u, 0x00000174u, 0x000002fcu, 0x000002e2u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000002fdu, 0x000002fcu, 0x000500c5u, 0x0000000fu, 0x000002feu, 0x000002fau, 0x000002fdu, 0x000500c5u, 0x0000000fu, 0x000002ffu, 0x000002f7u, 0x000002feu, 0x0003003eu, 0x000002f1u, 0x000002ffu, 0x000400c8u, 0x0000000fu, 0x00000301u, 0x000002ffu, 0x000500c7u, 0x0000000fu, 0x00000303u, 0x00000301u, 0x00000302u, 0x000200feu, 0x00000303u, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000004au, 0x00000000u, 0x00000048u, 0x00030037u, 0x00000047u, 0x00000049u, 0x000200f8u, 0x0000004bu, 0x0004003du, 0x00000009u, 0x00000307u, 0x00000049u, 0x00050082u, 0x00000009u, 0x00000309u, 0x00000307u, 0x0000b618u, 0x0003003eu, 0x00000049u, 0x00000309u, 0x0004003du, 0x00000009u, 0x0000030au, 0x00000049u, 0x000600cau, 0x00000009u, 0x0000030bu, 0x0000030au, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00000049u, 0x0000030bu, 0x0004003du, 0x00000009u, 0x0000030cu, 0x00000049u, 0x00050080u, 0x00000009u, 0x0000030eu, 0x0000030cu, 0x0000b618u, 0x0003003eu, 0x00000049u, 0x0000030eu, 0x0004003du, 0x00000009u, 0x0000030fu, 0x00000049u, 0x0008000cu, 0x00000009u, 0x00000313u, 0x00000001u, 0x0000002du, 0x0000030fu, 0x00000310u, 0x00000312u, 0x00040072u, 0x00000013u, 0x00000314u, 0x00000313u, 0x000200feu, 0x00000314u, 0x00010038u, 0x00050036u, 0x00000010u, 0x0000004fu, 0x00000000u, 0x0000004du, 0x00030037u, 0x0000004cu, 0x0000004eu, 0x000200f8u, 0x00000050u, 0x0004003bu, 0x00000047u, 0x00000319u, 0x00000007u, 0x0004003du, 0x00000013u, 0x00000317u, 0x0000004eu, 0x00040072u, 0x00000009u, 0x00000318u, 0x00000317u, 0x0003003eu, 0x00000319u, 0x00000318u, 0x00050039u, 0x00000013u, 0x0000031au, 0x0000004au, 0x00000319u, 0x00040072u, 0x0000031cu, 0x0000031du, 0x0000031au, 0x0004007cu, 0x00000010u, 0x0000031eu, 0x0000031du, 0x000200feu, 0x0000031eu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000053u, 0x00000000u, 0x00000051u, 0x00030037u, 0x00000040u, 0x00000052u, 0x000200f8u, 0x00000054u, 0x0004003du, 0x00000008u, 0x00000321u, 0x00000052u, 0x00050082u, 0x00000008u, 0x00000322u, 0x00000321u, 0x00000306u, 0x000600cau, 0x00000008u, 0x00000323u, 0x00000322u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000008u, 0x00000324u, 0x00000323u, 0x00000306u, 0x0008000cu, 0x00000008u, 0x00000325u, 0x00000001u, 0x0000002du, 0x00000324u, 0x0000019cu, 0x00000311u, 0x000200feu, 0x00000325u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000056u, 0x00000000u, 0x00000051u, 0x00030037u, 0x00000040u, 0x00000055u, 0x000200f8u, 0x00000057u, 0x0004003du, 0x00000008u, 0x00000329u, 0x00000055u, 0x00050082u, 0x00000008u, 0x0000032au, 0x00000329u, 0x00000328u, 0x0003003eu, 0x00000055u, 0x0000032au, 0x0004003du, 0x00000008u, 0x0000032bu, 0x00000055u, 0x000500c4u, 0x00000008u, 0x0000032cu, 0x0000032bu, 0x000001e9u, 0x0003003eu, 0x00000055u, 0x0000032cu, 0x0004003du, 0x00000008u, 0x0000032du, 0x00000055u, 0x000500c3u, 0x00000008u, 0x0000032eu, 0x0000032du, 0x000001e9u, 0x0003003eu, 0x00000055u, 0x0000032eu, 0x0004003du, 0x00000008u, 0x0000032fu, 0x00000055u, 0x00050080u, 0x00000008u, 0x00000330u, 0x0000032fu, 0x00000328u, 0x0003003eu, 0x00000055u, 0x00000330u, 0x0004003du, 0x00000008u, 0x00000331u, 0x00000055u, 0x0008000cu, 0x00000008u, 0x00000333u, 0x00000001u, 0x0000002du, 0x00000331u, 0x0000019cu, 0x00000332u, 0x000200feu, 0x00000333u, 0x00010038u, 0x00050036u, 0x00000058u, 0x0000005bu, 0x00000000u, 0x00000059u, 0x00030037u, 0x00000040u, 0x0000005au, 0x000200f8u, 0x0000005cu, 0x0004003bu, 0x00000040u, 0x00000336u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000033bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000341u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000344u, 0x00000007u, 0x0004003bu, 0x00000407u, 0x00000408u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000040cu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00000337u, 0x0000005au, 0x0006000cu, 0x00000008u, 0x00000338u, 0x00000001u, 0x0000004au, 0x00000337u, 0x00050082u, 0x00000008u, 0x00000339u, 0x000001ecu, 0x00000338u, 0x0007000cu, 0x00000008u, 0x0000033au, 0x00000001u, 0x00000027u, 0x00000339u, 0x000001ecu, 0x0003003eu, 0x00000336u, 0x0000033au, 0x0004003du, 0x00000008u, 0x0000033cu, 0x0000005au, 0x000500c4u, 0x00000008u, 0x0000033eu, 0x0000033cu, 0x0000033au, 0x000500c7u, 0x00000008u, 0x00000340u, 0x0000033eu, 0x0000033fu, 0x0003003eu, 0x0000033bu, 0x00000340u, 0x000500c7u, 0x00000008u, 0x00000343u, 0x00000340u, 0x00000311u, 0x0003003eu, 0x00000341u, 0x00000343u, 0x000500c3u, 0x00000008u, 0x00000406u, 0x00000340u, 0x000001d9u, 0x0003003eu, 0x00000408u, 0x00000404u, 0x00050041u, 0x0000011eu, 0x00000409u, 0x00000408u, 0x00000406u, 0x0004003du, 0x0000011du, 0x0000040au, 0x00000409u, 0x00040072u, 0x00000058u, 0x0000040bu, 0x0000040au, 0x0003003eu, 0x00000344u, 0x0000040bu, 0x00050041u, 0x00000040u, 0x0000040du, 0x00000344u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000040eu, 0x0000040du, 0x00050084u, 0x00000008u, 0x00000410u, 0x0000040eu, 0x00000343u, 0x000500c3u, 0x00000008u, 0x00000411u, 0x00000410u, 0x000001dfu, 0x00050041u, 0x00000040u, 0x00000412u, 0x00000344u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000413u, 0x00000412u, 0x00050080u, 0x00000008u, 0x00000414u, 0x00000411u, 0x00000413u, 0x0003003eu, 0x0000040cu, 0x00000414u, 0x00050050u, 0x00000058u, 0x00000417u, 0x00000414u, 0x0000033au, 0x000200feu, 0x00000417u, 0x00010038u, 0x00050036u, 0x00000058u, 0x00000061u, 0x00000000u, 0x0000005fu, 0x00030037u, 0x0000005eu, 0x00000060u, 0x000200f8u, 0x00000062u, 0x0004003du, 0x0000005du, 0x0000041au, 0x00000060u, 0x0007004fu, 0x00000058u, 0x0000041bu, 0x0000041au, 0x0000041au, 0x00000000u, 0x00000001u, 0x000200feu, 0x0000041bu, 0x00010038u, 0x00050036u, 0x00000058u, 0x00000068u, 0x00000000u, 0x00000065u, 0x00030037u, 0x0000005eu, 0x00000066u, 0x00030037u, 0x00000064u, 0x00000067u, 0x000200f8u, 0x00000069u, 0x0004003bu, 0x00000040u, 0x0000041eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000421u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000427u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000428u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000042bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000042eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000435u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000043cu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000445u, 0x00000007u, 0x00050041u, 0x00000040u, 0x0000041fu, 0x00000066u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00000420u, 0x0000041fu, 0x0003003eu, 0x0000041eu, 0x00000420u, 0x000500b3u, 0x00000063u, 0x00000423u, 0x00000420u, 0x0000019cu, 0x0003003eu, 0x00000421u, 0x00000423u, 0x000500c7u, 0x00000008u, 0x00000426u, 0x00000420u, 0x00000424u, 0x0003003eu, 0x0000041eu, 0x00000426u, 0x0003003eu, 0x00000428u, 0x00000426u, 0x00050039u, 0x00000058u, 0x0000042au, 0x0000005bu, 0x00000428u, 0x0003003eu, 0x00000427u, 0x0000042au, 0x00050041u, 0x00000040u, 0x0000042cu, 0x00000427u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000042du, 0x0000042cu, 0x0003003eu, 0x0000042bu, 0x0000042du, 0x0004003du, 0x0000005du, 0x0000042fu, 0x00000066u, 0x0007004fu, 0x00000058u, 0x00000430u, 0x0000042fu, 0x0000042fu, 0x00000000u, 0x00000001u, 0x00050041u, 0x00000040u, 0x00000431u, 0x00000427u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000432u, 0x00000431u, 0x00050050u, 0x00000058u, 0x00000433u, 0x00000432u, 0x00000432u, 0x00050084u, 0x00000058u, 0x00000434u, 0x00000430u, 0x00000433u, 0x0003003eu, 0x0000042eu, 0x00000434u, 0x000500c3u, 0x00000008u, 0x00000439u, 0x00000437u, 0x0000042du, 0x0004007eu, 0x00000008u, 0x0000043au, 0x00000439u, 0x000500c7u, 0x00000008u, 0x0000043bu, 0x00000436u, 0x0000043au, 0x0003003eu, 0x00000435u, 0x0000043bu, 0x0004003du, 0x00000058u, 0x0000043du, 0x0000042eu, 0x00050050u, 0x00000058u, 0x0000043fu, 0x0000043bu, 0x0000043bu, 0x000500c7u, 0x00000058u, 0x00000440u, 0x0000043du, 0x0000043fu, 0x0003003eu, 0x0000043cu, 0x00000440u, 0x000500abu, 0x00000063u, 0x00000442u, 0x0000042du, 0x000001ecu, 0x000300f7u, 0x00000444u, 0x00000000u, 0x000400fau, 0x00000442u, 0x00000443u, 0x0000044bu, 0x000200f8u, 0x00000443u, 0x0004003du, 0x00000058u, 0x00000446u, 0x0000042eu, 0x00050082u, 0x00000008u, 0x00000448u, 0x000001e9u, 0x0000042du, 0x00050050u, 0x00000058u, 0x00000449u, 0x00000448u, 0x00000448u, 0x000500c3u, 0x00000058u, 0x0000044au, 0x00000446u, 0x00000449u, 0x0003003eu, 0x0000042eu, 0x0000044au, 0x0003003eu, 0x00000445u, 0x0000044au, 0x000200f9u, 0x00000444u, 0x000200f8u, 0x0000044bu, 0x0004003du, 0x00000058u, 0x0000044cu, 0x0000042eu, 0x000500c4u, 0x00000058u, 0x0000044eu, 0x0000044cu, 0x0000b619u, 0x0003003eu, 0x00000445u, 0x0000044eu, 0x000200f9u, 0x00000444u, 0x000200f8u, 0x00000444u, 0x0004003du, 0x00000058u, 0x0000044fu, 0x0000043cu, 0x000500abu, 0x00000451u, 0x00000452u, 0x0000044fu, 0x00000450u, 0x0004009au, 0x00000063u, 0x00000453u, 0x00000452u, 0x000300f7u, 0x00000455u, 0x00000000u, 0x000400fau, 0x00000453u, 0x00000454u, 0x00000455u, 0x000200f8u, 0x00000454u, 0x00050041u, 0x00000040u, 0x00000456u, 0x0000043cu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000457u, 0x00000456u, 0x000500abu, 0x00000063u, 0x00000459u, 0x00000457u, 0x0000043bu, 0x000300f7u, 0x0000045bu, 0x00000000u, 0x000400fau, 0x00000459u, 0x0000045au, 0x0000045bu, 0x000200f8u, 0x0000045au, 0x0004003du, 0x00000008u, 0x0000045du, 0x00000456u, 0x000500abu, 0x00000063u, 0x0000045eu, 0x0000045du, 0x0000019cu, 0x000200f9u, 0x0000045bu, 0x000200f8u, 0x0000045bu, 0x000700f5u, 0x00000063u, 0x0000045fu, 0x00000459u, 0x00000454u, 0x0000045eu, 0x0000045au, 0x000300f7u, 0x00000461u, 0x00000000u, 0x000400fau, 0x0000045fu, 0x00000460u, 0x00000461u, 0x000200f8u, 0x00000460u, 0x00050041u, 0x00000040u, 0x00000462u, 0x0000042eu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000463u, 0x00000462u, 0x000500c7u, 0x00000008u, 0x00000464u, 0x00000463u, 0x00000437u, 0x000500aau, 0x00000063u, 0x00000465u, 0x00000464u, 0x0000019cu, 0x000300f7u, 0x00000467u, 0x00000000u, 0x000400fau, 0x00000465u, 0x00000466u, 0x00000469u, 0x000200f8u, 0x00000466u, 0x00050041u, 0x00000040u, 0x00000468u, 0x00000445u, 0x0000028eu, 0x0003003eu, 0x00000468u, 0x00000424u, 0x000200f9u, 0x00000467u, 0x000200f8u, 0x00000469u, 0x00050041u, 0x00000040u, 0x0000046bu, 0x00000445u, 0x0000028eu, 0x0003003eu, 0x0000046bu, 0x0000046au, 0x000200f9u, 0x00000467u, 0x000200f8u, 0x00000467u, 0x0003003eu, 0x00000067u, 0x0000046cu, 0x000200f9u, 0x00000461u, 0x000200f8u, 0x00000461u, 0x00050041u, 0x00000040u, 0x0000046du, 0x0000043cu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000046eu, 0x0000046du, 0x000500abu, 0x00000063u, 0x00000470u, 0x0000046eu, 0x0000043bu, 0x000300f7u, 0x00000472u, 0x00000000u, 0x000400fau, 0x00000470u, 0x00000471u, 0x00000472u, 0x000200f8u, 0x00000471u, 0x0004003du, 0x00000008u, 0x00000474u, 0x0000046du, 0x000500abu, 0x00000063u, 0x00000475u, 0x00000474u, 0x0000019cu, 0x000200f9u, 0x00000472u, 0x000200f8u, 0x00000472u, 0x000700f5u, 0x00000063u, 0x00000476u, 0x00000470u, 0x00000461u, 0x00000475u, 0x00000471u, 0x000300f7u, 0x00000478u, 0x00000000u, 0x000400fau, 0x00000476u, 0x00000477u, 0x00000478u, 0x000200f8u, 0x00000477u, 0x00050041u, 0x00000040u, 0x00000479u, 0x0000042eu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000047au, 0x00000479u, 0x000500c7u, 0x00000008u, 0x0000047bu, 0x0000047au, 0x00000437u, 0x000500aau, 0x00000063u, 0x0000047cu, 0x0000047bu, 0x0000019cu, 0x000300f7u, 0x0000047eu, 0x00000000u, 0x000400fau, 0x0000047cu, 0x0000047du, 0x00000480u, 0x000200f8u, 0x0000047du, 0x00050041u, 0x00000040u, 0x0000047fu, 0x00000445u, 0x000002f4u, 0x0003003eu, 0x0000047fu, 0x00000424u, 0x000200f9u, 0x0000047eu, 0x000200f8u, 0x00000480u, 0x00050041u, 0x00000040u, 0x00000481u, 0x00000445u, 0x000002f4u, 0x0003003eu, 0x00000481u, 0x0000046au, 0x000200f9u, 0x0000047eu, 0x000200f8u, 0x0000047eu, 0x0003003eu, 0x00000067u, 0x0000046cu, 0x000200f9u, 0x00000478u, 0x000200f8u, 0x00000478u, 0x000200f9u, 0x00000455u, 0x000200f8u, 0x00000455u, 0x000300f7u, 0x00000484u, 0x00000000u, 0x000400fau, 0x00000423u, 0x00000483u, 0x00000484u, 0x000200f8u, 0x00000483u, 0x0003003eu, 0x00000445u, 0x00000485u, 0x0003003eu, 0x00000067u, 0x0000046cu, 0x000200f9u, 0x00000484u, 0x000200f8u, 0x00000484u, 0x0004003du, 0x00000058u, 0x00000486u, 0x00000445u, 0x0008000cu, 0x00000058u, 0x0000048bu, 0x00000001u, 0x0000002du, 0x00000486u, 0x00000488u, 0x0000048au, 0x000200feu, 0x0000048bu, 0x00010038u, 0x00050036u, 0x00000010u, 0x00000070u, 0x00000000u, 0x0000006au, 0x00030037u, 0x00000047u, 0x0000006bu, 0x00030037u, 0x00000047u, 0x0000006cu, 0x00030037u, 0x00000047u, 0x0000006du, 0x00030037u, 0x00000040u, 0x0000006eu, 0x00030037u, 0x00000040u, 0x0000006fu, 0x000200f8u, 0x00000071u, 0x0004003bu, 0x0000004cu, 0x0000049du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000004a2u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000004a5u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x000004a9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000004cdu, 0x00000007u, 0x0004003du, 0x00000009u, 0x0000048eu, 0x0000006cu, 0x000500c7u, 0x00000009u, 0x00000491u, 0x0000048eu, 0x0000b616u, 0x00070050u, 0x00000009u, 0x00000496u, 0x00000495u, 0x00000495u, 0x00000495u, 0x00000495u, 0x000500c3u, 0x00000009u, 0x00000497u, 0x00000491u, 0x00000496u, 0x0004003du, 0x00000008u, 0x00000498u, 0x0000006eu, 0x00070050u, 0x00000009u, 0x00000499u, 0x00000498u, 0x00000498u, 0x00000498u, 0x00000498u, 0x00050084u, 0x00000009u, 0x0000049au, 0x00000497u, 0x00000499u, 0x0004003du, 0x00000009u, 0x0000049bu, 0x0000006bu, 0x00050080u, 0x00000009u, 0x0000049cu, 0x0000049bu, 0x0000049au, 0x0003003eu, 0x0000006bu, 0x0000049cu, 0x0004003du, 0x00000009u, 0x0000049eu, 0x0000006bu, 0x000500c3u, 0x00000009u, 0x000004a0u, 0x0000049eu, 0x0000b617u, 0x00040072u, 0x00000013u, 0x000004a1u, 0x000004a0u, 0x0003003eu, 0x0000049du, 0x000004a1u, 0x0004003du, 0x00000008u, 0x000004a3u, 0x0000006fu, 0x0006000cu, 0x00000008u, 0x000004a4u, 0x00000001u, 0x00000049u, 0x000004a3u, 0x0003003eu, 0x000004a2u, 0x000004a4u, 0x000500c3u, 0x00000008u, 0x000004a7u, 0x000004a4u, 0x000001a6u, 0x00040072u, 0x00000012u, 0x000004a8u, 0x000004a7u, 0x0003003eu, 0x000004a5u, 0x000004a8u, 0x000500c7u, 0x00000008u, 0x000004abu, 0x000004a4u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x000004acu, 0x000004abu, 0x000001a6u, 0x00040072u, 0x00000012u, 0x000004adu, 0x000004acu, 0x000500c7u, 0x00000012u, 0x000004b0u, 0x000004a8u, 0x000004afu, 0x00050080u, 0x00000012u, 0x000004b1u, 0x000004adu, 0x000004b0u, 0x0003003eu, 0x000004a9u, 0x000004b1u, 0x00070050u, 0x00000013u, 0x000004b5u, 0x000004b3u, 0x000004b3u, 0x000004b3u, 0x000004b3u, 0x000500c4u, 0x00000013u, 0x000004b6u, 0x000004a1u, 0x000004b5u, 0x0003003eu, 0x0000049du, 0x000004b6u, 0x0004003du, 0x00000009u, 0x000004b8u, 0x0000006cu, 0x000500c3u, 0x00000009u, 0x000004bau, 0x000004b8u, 0x0000b617u, 0x00040072u, 0x00000013u, 0x000004bbu, 0x000004bau, 0x00070050u, 0x00000013u, 0x000004bcu, 0x000004b1u, 0x000004b1u, 0x000004b1u, 0x000004b1u, 0x00050084u, 0x00000013u, 0x000004bdu, 0x000004bcu, 0x000004bbu, 0x0004003du, 0x00000009u, 0x000004bfu, 0x0000006du, 0x000500c3u, 0x00000009u, 0x000004c1u, 0x000004bfu, 0x0000b617u, 0x00040072u, 0x00000013u, 0x000004c2u, 0x000004c1u, 0x00070050u, 0x00000013u, 0x000004c3u, 0x000004a8u, 0x000004a8u, 0x000004a8u, 0x000004a8u, 0x00050084u, 0x00000013u, 0x000004c4u, 0x000004c3u, 0x000004c2u, 0x00050080u, 0x00000013u, 0x000004c5u, 0x000004bdu, 0x000004c4u, 0x00050080u, 0x00000013u, 0x000004c7u, 0x000004b6u, 0x000004c5u, 0x0003003eu, 0x0000049du, 0x000004c7u, 0x00070050u, 0x00000013u, 0x000004cbu, 0x000004c9u, 0x000004c9u, 0x000004c9u, 0x000004c9u, 0x000500c3u, 0x00000013u, 0x000004ccu, 0x000004c7u, 0x000004cbu, 0x0003003eu, 0x0000049du, 0x000004ccu, 0x0003003eu, 0x000004cdu, 0x000004ccu, 0x00050039u, 0x00000010u, 0x000004cfu, 0x0000004fu, 0x000004cdu, 0x000200feu, 0x000004cfu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000007cu, 0x00000000u, 0x00000074u, 0x00030037u, 0x00000072u, 0x00000075u, 0x00030037u, 0x00000047u, 0x00000076u, 0x00030037u, 0x00000040u, 0x00000077u, 0x00030037u, 0x00000064u, 0x00000078u, 0x00030037u, 0x00000064u, 0x00000079u, 0x00030037u, 0x00000073u, 0x0000007au, 0x00030037u, 0x00000040u, 0x0000007bu, 0x000200f8u, 0x0000007du, 0x0004003bu, 0x00000040u, 0x000004d2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000004d4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000004e3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000004f0u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000004f9u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000050cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000050du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000050eu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000516u, 0x00000007u, 0x0004003du, 0x00000063u, 0x000004d3u, 0x00000079u, 0x000300f7u, 0x000004d6u, 0x00000000u, 0x000400fau, 0x000004d3u, 0x000004d5u, 0x000004dbu, 0x000200f8u, 0x000004d5u, 0x0004003du, 0x00000008u, 0x000004d7u, 0x00000077u, 0x00050041u, 0x00000040u, 0x000004d8u, 0x00000075u, 0x000001b2u, 0x0004003du, 0x00000008u, 0x000004d9u, 0x000004d8u, 0x00050082u, 0x00000008u, 0x000004dau, 0x000004d7u, 0x000004d9u, 0x0003003eu, 0x000004d4u, 0x000004dau, 0x000200f9u, 0x000004d6u, 0x000200f8u, 0x000004dbu, 0x00050041u, 0x00000040u, 0x000004dcu, 0x00000075u, 0x000001b5u, 0x0004003du, 0x00000008u, 0x000004ddu, 0x000004dcu, 0x0004003du, 0x00000008u, 0x000004deu, 0x00000077u, 0x00050082u, 0x00000008u, 0x000004dfu, 0x000004ddu, 0x000004deu, 0x0003003eu, 0x000004d4u, 0x000004dfu, 0x000200f9u, 0x000004d6u, 0x000200f8u, 0x000004d6u, 0x000700f5u, 0x00000008u, 0x0000b165u, 0x000004dau, 0x000004d5u, 0x000004dfu, 0x000004dbu, 0x0003003eu, 0x000004d2u, 0x0000b165u, 0x000500c3u, 0x00000008u, 0x000004e2u, 0x0000b165u, 0x00000495u, 0x0003003eu, 0x000004d2u, 0x000004e2u, 0x00060041u, 0x000004e9u, 0x000004eau, 0x000004e8u, 0x0000019cu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x000004ebu, 0x000004eau, 0x000500c7u, 0x00000008u, 0x000004ecu, 0x000004e2u, 0x000004ebu, 0x0003003eu, 0x000004e3u, 0x000004ecu, 0x00050082u, 0x00000008u, 0x000004efu, 0x000004e2u, 0x000004ecu, 0x0003003eu, 0x0000007bu, 0x000004efu, 0x00060041u, 0x000004e9u, 0x000004f2u, 0x000004e8u, 0x0000019cu, 0x0000019cu, 0x0004003du, 0x00000008u, 0x000004f3u, 0x000004f2u, 0x000500c3u, 0x00000008u, 0x000004f4u, 0x000004e2u, 0x000004f3u, 0x0004003du, 0x00000063u, 0x000004f5u, 0x00000079u, 0x000600a9u, 0x00000008u, 0x000004f7u, 0x000004f5u, 0x000001a6u, 0x000004f6u, 0x00050084u, 0x00000008u, 0x000004f8u, 0x000004f4u, 0x000004f7u, 0x0003003eu, 0x000004f0u, 0x000004f8u, 0x00050041u, 0x00000047u, 0x000004fau, 0x00000075u, 0x000001a6u, 0x0004003du, 0x00000009u, 0x000004fbu, 0x000004fau, 0x0008004fu, 0x0000005du, 0x000004fcu, 0x000004fbu, 0x000004fbu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x000004fdu, 0x00000076u, 0x0008004fu, 0x0000005du, 0x000004feu, 0x000004fdu, 0x000004fdu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00000500u, 0x000004feu, 0x0000b614u, 0x00060050u, 0x0000005du, 0x00000502u, 0x000004f8u, 0x000004f8u, 0x000004f8u, 0x00050084u, 0x0000005du, 0x00000503u, 0x00000500u, 0x00000502u, 0x00050080u, 0x0000005du, 0x00000504u, 0x000004fcu, 0x00000503u, 0x0003003eu, 0x000004f9u, 0x00000504u, 0x0004003du, 0x00000063u, 0x00000505u, 0x00000078u, 0x000300f7u, 0x00000507u, 0x00000000u, 0x000400fau, 0x00000505u, 0x00000506u, 0x00000512u, 0x000200f8u, 0x00000506u, 0x000500c3u, 0x0000005du, 0x0000050bu, 0x00000504u, 0x0000b615u, 0x0003003eu, 0x0000050du, 0x0000050bu, 0x00060039u, 0x00000058u, 0x00000510u, 0x00000068u, 0x0000050du, 0x0000050eu, 0x0004003du, 0x00000063u, 0x00000511u, 0x0000050eu, 0x0003003eu, 0x0000050cu, 0x00000511u, 0x0003003eu, 0x0000007au, 0x00000510u, 0x000200f9u, 0x00000507u, 0x000200f8u, 0x00000512u, 0x000500c3u, 0x0000005du, 0x00000515u, 0x00000504u, 0x0000b615u, 0x0003003eu, 0x00000516u, 0x00000515u, 0x00050039u, 0x00000058u, 0x00000517u, 0x00000061u, 0x00000516u, 0x0003003eu, 0x0000007au, 0x00000517u, 0x000200f9u, 0x00000507u, 0x000200f8u, 0x00000507u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000058u, 0x00000083u, 0x00000000u, 0x0000007eu, 0x00030037u, 0x00000047u, 0x0000007fu, 0x00030037u, 0x00000047u, 0x00000080u, 0x00030037u, 0x00000040u, 0x00000081u, 0x00030037u, 0x00000064u, 0x00000082u, 0x000200f8u, 0x00000084u, 0x0004003bu, 0x0000005eu, 0x00000518u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000052bu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000052cu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000052du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000052fu, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000534u, 0x00000007u, 0x0004003du, 0x00000009u, 0x00000519u, 0x0000007fu, 0x0008004fu, 0x0000005du, 0x0000051au, 0x00000519u, 0x00000519u, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000051bu, 0x00000080u, 0x0008004fu, 0x0000005du, 0x0000051cu, 0x0000051bu, 0x0000051bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x0000051eu, 0x0000051cu, 0x0000b614u, 0x00060050u, 0x0000005du, 0x0000051fu, 0x00000495u, 0x00000495u, 0x00000495u, 0x000500c3u, 0x0000005du, 0x00000520u, 0x0000051eu, 0x0000051fu, 0x0004003du, 0x00000008u, 0x00000521u, 0x00000081u, 0x00060050u, 0x0000005du, 0x00000522u, 0x00000521u, 0x00000521u, 0x00000521u, 0x00050084u, 0x0000005du, 0x00000523u, 0x00000520u, 0x00000522u, 0x00050080u, 0x0000005du, 0x00000524u, 0x0000051au, 0x00000523u, 0x0003003eu, 0x00000518u, 0x00000524u, 0x000500c3u, 0x0000005du, 0x00000527u, 0x00000524u, 0x0000b615u, 0x0003003eu, 0x00000518u, 0x00000527u, 0x0004003du, 0x00000063u, 0x00000528u, 0x00000082u, 0x000300f7u, 0x0000052au, 0x00000000u, 0x000400fau, 0x00000528u, 0x00000529u, 0x00000533u, 0x000200f8u, 0x00000529u, 0x0003003eu, 0x0000052du, 0x00000527u, 0x00060039u, 0x00000058u, 0x00000531u, 0x00000068u, 0x0000052du, 0x0000052fu, 0x0004003du, 0x00000063u, 0x00000532u, 0x0000052fu, 0x0003003eu, 0x0000052cu, 0x00000532u, 0x0003003eu, 0x0000052bu, 0x00000531u, 0x000200f9u, 0x0000052au, 0x000200f8u, 0x00000533u, 0x0003003eu, 0x00000534u, 0x00000527u, 0x00050039u, 0x00000058u, 0x00000536u, 0x00000061u, 0x00000534u, 0x0003003eu, 0x0000052bu, 0x00000536u, 0x000200f9u, 0x0000052au, 0x000200f8u, 0x0000052au, 0x000700f5u, 0x00000058u, 0x0000b169u, 0x00000531u, 0x00000529u, 0x00000536u, 0x00000533u, 0x000200feu, 0x0000b169u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000093u, 0x00000000u, 0x00000085u, 0x00030037u, 0x00000047u, 0x00000086u, 0x00030037u, 0x00000047u, 0x00000087u, 0x00030037u, 0x00000047u, 0x00000088u, 0x00030037u, 0x00000040u, 0x00000089u, 0x00030037u, 0x00000040u, 0x0000008au, 0x00030037u, 0x00000064u, 0x0000008bu, 0x00030037u, 0x00000064u, 0x0000008cu, 0x00030037u, 0x00000040u, 0x0000008du, 0x00030037u, 0x00000073u, 0x0000008eu, 0x00030037u, 0x00000073u, 0x0000008fu, 0x00030037u, 0x00000073u, 0x00000090u, 0x00030037u, 0x00000040u, 0x00000091u, 0x00030037u, 0x00000064u, 0x00000092u, 0x000200f8u, 0x00000094u, 0x0004003bu, 0x0000005eu, 0x0000053au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000054au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000055au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000576u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000577u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000581u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000582u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000589u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000058au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00000592u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000059au, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000059fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000005b1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000005b4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000005b7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000005bau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000005d4u, 0x00000007u, 0x0004003du, 0x00000009u, 0x0000053bu, 0x00000086u, 0x0008004fu, 0x0000005du, 0x0000053cu, 0x0000053bu, 0x0000053bu, 0x00000000u, 0x00000001u, 0x00000003u, 0x0004003du, 0x00000009u, 0x0000053du, 0x00000087u, 0x0008004fu, 0x0000005du, 0x0000053eu, 0x0000053du, 0x0000053du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00000540u, 0x0000053eu, 0x0000b614u, 0x00060050u, 0x0000005du, 0x00000541u, 0x00000495u, 0x00000495u, 0x00000495u, 0x000500c3u, 0x0000005du, 0x00000542u, 0x00000540u, 0x00000541u, 0x0004003du, 0x00000008u, 0x00000543u, 0x00000089u, 0x00060050u, 0x0000005du, 0x00000544u, 0x00000543u, 0x00000543u, 0x00000543u, 0x00050084u, 0x0000005du, 0x00000545u, 0x00000542u, 0x00000544u, 0x00050080u, 0x0000005du, 0x00000546u, 0x0000053cu, 0x00000545u, 0x0003003eu, 0x0000053au, 0x00000546u, 0x0004003du, 0x00000063u, 0x00000547u, 0x0000008cu, 0x000300f7u, 0x00000549u, 0x00000000u, 0x000400fau, 0x00000547u, 0x00000548u, 0x00000549u, 0x000200f8u, 0x00000548u, 0x0004003du, 0x00000008u, 0x0000054cu, 0x0000008du, 0x0004003du, 0x00000009u, 0x0000054du, 0x00000087u, 0x0008004fu, 0x0000005du, 0x0000054eu, 0x0000054du, 0x0000054du, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00000550u, 0x0000054eu, 0x0000b614u, 0x000500c3u, 0x0000005du, 0x00000552u, 0x00000550u, 0x00000541u, 0x00060050u, 0x0000005du, 0x00000553u, 0x0000054cu, 0x0000054cu, 0x0000054cu, 0x00050084u, 0x0000005du, 0x00000554u, 0x00000553u, 0x00000552u, 0x00050080u, 0x0000005du, 0x00000555u, 0x00000546u, 0x00000554u, 0x0003003eu, 0x0000054au, 0x00000555u, 0x000300f7u, 0x00000559u, 0x00000000u, 0x000400fau, 0x00000557u, 0x00000558u, 0x00000567u, 0x000200f8u, 0x00000558u, 0x0004003du, 0x00000008u, 0x0000055cu, 0x0000008du, 0x0006000cu, 0x00000008u, 0x0000055du, 0x00000001u, 0x00000005u, 0x0000055cu, 0x0004003du, 0x00000009u, 0x0000055eu, 0x00000088u, 0x0008004fu, 0x0000005du, 0x0000055fu, 0x0000055eu, 0x0000055eu, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x00000561u, 0x0000055fu, 0x0000b61au, 0x000500c3u, 0x0000005du, 0x00000563u, 0x00000561u, 0x00000541u, 0x00060050u, 0x0000005du, 0x00000564u, 0x0000055du, 0x0000055du, 0x0000055du, 0x00050084u, 0x0000005du, 0x00000565u, 0x00000564u, 0x00000563u, 0x00050080u, 0x0000005du, 0x00000566u, 0x00000546u, 0x00000565u, 0x0003003eu, 0x0000055au, 0x00000566u, 0x000200f9u, 0x00000559u, 0x000200f8u, 0x00000567u, 0x0004003du, 0x00000009u, 0x00000569u, 0x00000088u, 0x0008004fu, 0x0000005du, 0x0000056au, 0x00000569u, 0x00000569u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c7u, 0x0000005du, 0x0000056cu, 0x0000056au, 0x0000b61au, 0x000500c3u, 0x0000005du, 0x0000056eu, 0x0000056cu, 0x00000541u, 0x00050080u, 0x0000005du, 0x0000056fu, 0x00000546u, 0x0000056eu, 0x0003003eu, 0x0000055au, 0x0000056fu, 0x000200f9u, 0x00000559u, 0x000200f8u, 0x00000559u, 0x000700f5u, 0x0000005du, 0x0000b170u, 0x00000566u, 0x00000558u, 0x0000056fu, 0x00000567u, 0x000200f9u, 0x00000549u, 0x000200f8u, 0x00000549u, 0x000700f5u, 0x0000005du, 0x0000b16fu, 0x0000b16du, 0x00000094u, 0x0000b170u, 0x00000559u, 0x000700f5u, 0x0000005du, 0x0000b16cu, 0x0000b16du, 0x00000094u, 0x00000555u, 0x00000559u, 0x0004003du, 0x00000063u, 0x00000570u, 0x0000008bu, 0x000300f7u, 0x00000572u, 0x00000000u, 0x000400fau, 0x00000570u, 0x00000571u, 0x0000058eu, 0x000200f8u, 0x00000571u, 0x000500c3u, 0x0000005du, 0x00000575u, 0x00000546u, 0x0000b615u, 0x0003003eu, 0x00000576u, 0x00000575u, 0x0004003du, 0x00000063u, 0x00000578u, 0x00000092u, 0x0003003eu, 0x00000577u, 0x00000578u, 0x00060039u, 0x00000058u, 0x00000579u, 0x00000068u, 0x00000576u, 0x00000577u, 0x0004003du, 0x00000063u, 0x0000057au, 0x00000577u, 0x0003003eu, 0x00000092u, 0x0000057au, 0x0003003eu, 0x0000008eu, 0x00000579u, 0x0004003du, 0x00000063u, 0x0000057bu, 0x0000008cu, 0x000300f7u, 0x0000057du, 0x00000000u, 0x000400fau, 0x0000057bu, 0x0000057cu, 0x0000057du, 0x000200f8u, 0x0000057cu, 0x000500c3u, 0x0000005du, 0x00000580u, 0x0000b16cu, 0x0000b615u, 0x0003003eu, 0x00000581u, 0x00000580u, 0x0004003du, 0x00000063u, 0x00000583u, 0x00000092u, 0x0003003eu, 0x00000582u, 0x00000583u, 0x00060039u, 0x00000058u, 0x00000584u, 0x00000068u, 0x00000581u, 0x00000582u, 0x0004003du, 0x00000063u, 0x00000585u, 0x00000582u, 0x0003003eu, 0x00000092u, 0x00000585u, 0x0003003eu, 0x0000008fu, 0x00000584u, 0x000500c3u, 0x0000005du, 0x00000588u, 0x0000b16fu, 0x0000b615u, 0x0003003eu, 0x00000589u, 0x00000588u, 0x0004003du, 0x00000063u, 0x0000058bu, 0x00000092u, 0x0003003eu, 0x0000058au, 0x0000058bu, 0x00060039u, 0x00000058u, 0x0000058cu, 0x00000068u, 0x00000589u, 0x0000058au, 0x0004003du, 0x00000063u, 0x0000058du, 0x0000058au, 0x0003003eu, 0x00000092u, 0x0000058du, 0x0003003eu, 0x00000090u, 0x0000058cu, 0x000200f9u, 0x0000057du, 0x000200f8u, 0x0000057du, 0x000200f9u, 0x00000572u, 0x000200f8u, 0x0000058eu, 0x000500c3u, 0x0000005du, 0x00000591u, 0x00000546u, 0x0000b615u, 0x0003003eu, 0x00000592u, 0x00000591u, 0x00050039u, 0x00000058u, 0x00000593u, 0x00000061u, 0x00000592u, 0x0003003eu, 0x0000008eu, 0x00000593u, 0x0004003du, 0x00000063u, 0x00000594u, 0x0000008cu, 0x000300f7u, 0x00000596u, 0x00000000u, 0x000400fau, 0x00000594u, 0x00000595u, 0x00000596u, 0x000200f8u, 0x00000595u, 0x000500c3u, 0x0000005du, 0x00000599u, 0x0000b16cu, 0x0000b615u, 0x0003003eu, 0x0000059au, 0x00000599u, 0x00050039u, 0x00000058u, 0x0000059bu, 0x00000061u, 0x0000059au, 0x0003003eu, 0x0000008fu, 0x0000059bu, 0x000500c3u, 0x0000005du, 0x0000059eu, 0x0000b16fu, 0x0000b615u, 0x0003003eu, 0x0000059fu, 0x0000059eu, 0x00050039u, 0x00000058u, 0x000005a0u, 0x00000061u, 0x0000059fu, 0x0003003eu, 0x00000090u, 0x000005a0u, 0x000200f9u, 0x00000596u, 0x000200f8u, 0x00000596u, 0x000200f9u, 0x00000572u, 0x000200f8u, 0x00000572u, 0x00050041u, 0x00000040u, 0x000005a1u, 0x00000086u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x000005a2u, 0x000005a1u, 0x00050041u, 0x00000040u, 0x000005a3u, 0x00000087u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x000005a4u, 0x000005a3u, 0x0004003du, 0x00000008u, 0x000005a5u, 0x00000089u, 0x000500c3u, 0x00000008u, 0x000005a6u, 0x000005a5u, 0x00000495u, 0x00050084u, 0x00000008u, 0x000005a7u, 0x000005a4u, 0x000005a6u, 0x00050080u, 0x00000008u, 0x000005a8u, 0x000005a2u, 0x000005a7u, 0x0004003du, 0x00000008u, 0x000005aau, 0x000005a3u, 0x000500c3u, 0x00000008u, 0x000005abu, 0x000005aau, 0x00000495u, 0x0004003du, 0x00000008u, 0x000005acu, 0x00000089u, 0x000500c7u, 0x00000008u, 0x000005aeu, 0x000005acu, 0x000005adu, 0x00050084u, 0x00000008u, 0x000005afu, 0x000005abu, 0x000005aeu, 0x00050080u, 0x00000008u, 0x000005b0u, 0x000005a8u, 0x000005afu, 0x0003003eu, 0x00000091u, 0x000005b0u, 0x0004003du, 0x00000008u, 0x000005b2u, 0x00000091u, 0x000500c3u, 0x00000008u, 0x000005b3u, 0x000005b2u, 0x000001dfu, 0x0003003eu, 0x000005b1u, 0x000005b3u, 0x0004003du, 0x00000008u, 0x000005b5u, 0x0000008au, 0x0006000cu, 0x00000008u, 0x000005b6u, 0x00000001u, 0x00000049u, 0x000005b5u, 0x0003003eu, 0x000005b4u, 0x000005b6u, 0x000500c3u, 0x00000008u, 0x000005b9u, 0x000005b6u, 0x000001a6u, 0x0003003eu, 0x000005b7u, 0x000005b9u, 0x000500c7u, 0x00000008u, 0x000005bcu, 0x000005b6u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x000005bdu, 0x000005bcu, 0x000001a6u, 0x000500c7u, 0x00000008u, 0x000005bfu, 0x000005b9u, 0x000001a6u, 0x00050080u, 0x00000008u, 0x000005c0u, 0x000005bdu, 0x000005bfu, 0x0003003eu, 0x000005bau, 0x000005c0u, 0x000500c4u, 0x00000008u, 0x000005c3u, 0x000005b3u, 0x000005c1u, 0x0003003eu, 0x000005b1u, 0x000005c3u, 0x0004003du, 0x00000008u, 0x000005c6u, 0x000005a3u, 0x000500c3u, 0x00000008u, 0x000005c7u, 0x000005c6u, 0x000001dfu, 0x00050084u, 0x00000008u, 0x000005c8u, 0x000005c0u, 0x000005c7u, 0x00050041u, 0x00000040u, 0x000005cau, 0x00000088u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x000005cbu, 0x000005cau, 0x000500c3u, 0x00000008u, 0x000005ccu, 0x000005cbu, 0x000001dfu, 0x00050084u, 0x00000008u, 0x000005cdu, 0x000005b9u, 0x000005ccu, 0x00050080u, 0x00000008u, 0x000005ceu, 0x000005c8u, 0x000005cdu, 0x00050080u, 0x00000008u, 0x000005d0u, 0x000005c3u, 0x000005ceu, 0x0003003eu, 0x000005b1u, 0x000005d0u, 0x000500c3u, 0x00000008u, 0x000005d3u, 0x000005d0u, 0x000005d1u, 0x0003003eu, 0x000005b1u, 0x000005d3u, 0x0003003eu, 0x000005d4u, 0x000005d3u, 0x00050039u, 0x00000008u, 0x000005d6u, 0x00000056u, 0x000005d4u, 0x0003003eu, 0x00000091u, 0x000005d6u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000099u, 0x00000000u, 0x00000096u, 0x00030037u, 0x00000095u, 0x00000097u, 0x00030037u, 0x00000040u, 0x00000098u, 0x000200f8u, 0x0000009au, 0x0004003bu, 0x00000040u, 0x000005deu, 0x00000007u, 0x00050041u, 0x00000174u, 0x000005d7u, 0x00000097u, 0x000001dcu, 0x0004003du, 0x0000000fu, 0x000005d8u, 0x000005d7u, 0x00040071u, 0x00000006u, 0x000005d9u, 0x000005d8u, 0x0004007cu, 0x00000008u, 0x000005dau, 0x000005d9u, 0x000500abu, 0x00000063u, 0x000005dbu, 0x000005dau, 0x0000019cu, 0x000300f7u, 0x000005ddu, 0x00000000u, 0x000400fau, 0x000005dbu, 0x000005dcu, 0x000005ddu, 0x000200f8u, 0x000005dcu, 0x0004003du, 0x0000000fu, 0x000005e0u, 0x000005d7u, 0x000500c4u, 0x00000008u, 0x000005e1u, 0x000001a6u, 0x000005e0u, 0x0003003eu, 0x000005deu, 0x000005e1u, 0x00050041u, 0x00000174u, 0x000005e2u, 0x00000097u, 0x000001e9u, 0x0004003du, 0x0000000fu, 0x000005e3u, 0x000005e2u, 0x00040071u, 0x00000006u, 0x000005e4u, 0x000005e3u, 0x0004007cu, 0x00000008u, 0x000005e5u, 0x000005e4u, 0x000500c7u, 0x00000008u, 0x000005e6u, 0x000005e5u, 0x000001a9u, 0x000500abu, 0x00000063u, 0x000005e7u, 0x000005e6u, 0x0000019cu, 0x000300f7u, 0x000005e9u, 0x00000000u, 0x000400fau, 0x000005e7u, 0x000005e8u, 0x000005e9u, 0x000200f8u, 0x000005e8u, 0x0004003du, 0x00000008u, 0x000005eau, 0x00000098u, 0x000500c7u, 0x00000008u, 0x000005ecu, 0x000005eau, 0x000005e1u, 0x00050082u, 0x00000008u, 0x000005edu, 0x000005ecu, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x000005eeu, 0x00000001u, 0x0000002au, 0x000005edu, 0x0000019cu, 0x0004003du, 0x00000008u, 0x000005efu, 0x00000098u, 0x000500c6u, 0x00000008u, 0x000005f0u, 0x000005efu, 0x000005eeu, 0x0003003eu, 0x00000098u, 0x000005f0u, 0x000200f9u, 0x000005e9u, 0x000200f8u, 0x000005e9u, 0x00050082u, 0x00000008u, 0x000005f2u, 0x000005e1u, 0x000001a6u, 0x0004003du, 0x00000008u, 0x000005f3u, 0x00000098u, 0x000500c7u, 0x00000008u, 0x000005f4u, 0x000005f3u, 0x000005f2u, 0x0003003eu, 0x00000098u, 0x000005f4u, 0x000200f9u, 0x000005ddu, 0x000200f8u, 0x000005ddu, 0x0004003du, 0x00000008u, 0x000005f5u, 0x00000098u, 0x000200feu, 0x000005f5u, 0x00010038u, 0x00050036u, 0x00000058u, 0x0000009eu, 0x00000000u, 0x0000009bu, 0x00030037u, 0x00000095u, 0x0000009cu, 0x00030037u, 0x00000040u, 0x0000009du, 0x000200f8u, 0x0000009fu, 0x0004003bu, 0x00000073u, 0x000005f8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000604u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000005f9u, 0x0000009du, 0x00050050u, 0x00000058u, 0x000005fbu, 0x000005f9u, 0x000005f9u, 0x00050080u, 0x00000058u, 0x000005fcu, 0x000005fbu, 0x000005fau, 0x0003003eu, 0x000005f8u, 0x000005fcu, 0x00050041u, 0x00000174u, 0x000005fdu, 0x0000009cu, 0x000001dcu, 0x0004003du, 0x0000000fu, 0x000005feu, 0x000005fdu, 0x00040071u, 0x00000006u, 0x000005ffu, 0x000005feu, 0x0004007cu, 0x00000008u, 0x00000600u, 0x000005ffu, 0x000500abu, 0x00000063u, 0x00000601u, 0x00000600u, 0x0000019cu, 0x000300f7u, 0x00000603u, 0x00000000u, 0x000400fau, 0x00000601u, 0x00000602u, 0x00000603u, 0x000200f8u, 0x00000602u, 0x0004003du, 0x0000000fu, 0x00000606u, 0x000005fdu, 0x000500c4u, 0x00000008u, 0x00000607u, 0x000001a6u, 0x00000606u, 0x0003003eu, 0x00000604u, 0x00000607u, 0x00050041u, 0x00000174u, 0x00000608u, 0x0000009cu, 0x000001e9u, 0x0004003du, 0x0000000fu, 0x00000609u, 0x00000608u, 0x00040071u, 0x00000006u, 0x0000060au, 0x00000609u, 0x0004007cu, 0x00000008u, 0x0000060bu, 0x0000060au, 0x000500c7u, 0x00000008u, 0x0000060cu, 0x0000060bu, 0x000001a9u, 0x000500abu, 0x00000063u, 0x0000060du, 0x0000060cu, 0x0000019cu, 0x000300f7u, 0x0000060fu, 0x00000000u, 0x000400fau, 0x0000060du, 0x0000060eu, 0x0000060fu, 0x000200f8u, 0x0000060eu, 0x00050050u, 0x00000058u, 0x00000612u, 0x00000607u, 0x00000607u, 0x000500c7u, 0x00000058u, 0x00000613u, 0x000005fcu, 0x00000612u, 0x00050082u, 0x00000058u, 0x00000615u, 0x00000613u, 0x0000b619u, 0x0007000cu, 0x00000058u, 0x00000617u, 0x00000001u, 0x0000002au, 0x00000615u, 0x00000450u, 0x000500c6u, 0x00000058u, 0x00000619u, 0x000005fcu, 0x00000617u, 0x0003003eu, 0x000005f8u, 0x00000619u, 0x000200f9u, 0x0000060fu, 0x000200f8u, 0x0000060fu, 0x000700f5u, 0x00000058u, 0x0000b173u, 0x000005fcu, 0x00000602u, 0x00000619u, 0x0000060eu, 0x00050082u, 0x00000008u, 0x0000061bu, 0x00000607u, 0x000001a6u, 0x00050050u, 0x00000058u, 0x0000061du, 0x0000061bu, 0x0000061bu, 0x000500c7u, 0x00000058u, 0x0000061eu, 0x0000b173u, 0x0000061du, 0x0003003eu, 0x000005f8u, 0x0000061eu, 0x000200f9u, 0x00000603u, 0x000200f8u, 0x00000603u, 0x000700f5u, 0x00000058u, 0x0000b174u, 0x000005fcu, 0x0000009fu, 0x0000061eu, 0x0000060fu, 0x000200feu, 0x0000b174u, 0x00010038u, 0x00050036u, 0x00000008u, 0x000000a2u, 0x00000000u, 0x00000096u, 0x00030037u, 0x00000095u, 0x000000a0u, 0x00030037u, 0x00000040u, 0x000000a1u, 0x000200f8u, 0x000000a3u, 0x0004003bu, 0x00000040u, 0x00000629u, 0x00000007u, 0x00050041u, 0x00000174u, 0x00000622u, 0x000000a0u, 0x000001e2u, 0x0004003du, 0x0000000fu, 0x00000623u, 0x00000622u, 0x00040071u, 0x00000006u, 0x00000624u, 0x00000623u, 0x0004007cu, 0x00000008u, 0x00000625u, 0x00000624u, 0x000500abu, 0x00000063u, 0x00000626u, 0x00000625u, 0x0000019cu, 0x000300f7u, 0x00000628u, 0x00000000u, 0x000400fau, 0x00000626u, 0x00000627u, 0x00000628u, 0x000200f8u, 0x00000627u, 0x0004003du, 0x0000000fu, 0x0000062bu, 0x00000622u, 0x000500c4u, 0x00000008u, 0x0000062cu, 0x000001a6u, 0x0000062bu, 0x0003003eu, 0x00000629u, 0x0000062cu, 0x00050041u, 0x00000174u, 0x0000062du, 0x000000a0u, 0x000001e9u, 0x0004003du, 0x0000000fu, 0x0000062eu, 0x0000062du, 0x00040071u, 0x00000006u, 0x0000062fu, 0x0000062eu, 0x0004007cu, 0x00000008u, 0x00000630u, 0x0000062fu, 0x000500c7u, 0x00000008u, 0x00000631u, 0x00000630u, 0x000001d9u, 0x000500abu, 0x00000063u, 0x00000632u, 0x00000631u, 0x0000019cu, 0x000300f7u, 0x00000634u, 0x00000000u, 0x000400fau, 0x00000632u, 0x00000633u, 0x00000634u, 0x000200f8u, 0x00000633u, 0x0004003du, 0x00000008u, 0x00000635u, 0x000000a1u, 0x000500c7u, 0x00000008u, 0x00000637u, 0x00000635u, 0x0000062cu, 0x00050082u, 0x00000008u, 0x00000638u, 0x00000637u, 0x000001a6u, 0x0007000cu, 0x00000008u, 0x00000639u, 0x00000001u, 0x0000002au, 0x00000638u, 0x0000019cu, 0x0004003du, 0x00000008u, 0x0000063au, 0x000000a1u, 0x000500c6u, 0x00000008u, 0x0000063bu, 0x0000063au, 0x00000639u, 0x0003003eu, 0x000000a1u, 0x0000063bu, 0x000200f9u, 0x00000634u, 0x000200f8u, 0x00000634u, 0x00050082u, 0x00000008u, 0x0000063du, 0x0000062cu, 0x000001a6u, 0x0004003du, 0x00000008u, 0x0000063eu, 0x000000a1u, 0x000500c7u, 0x00000008u, 0x0000063fu, 0x0000063eu, 0x0000063du, 0x0003003eu, 0x000000a1u, 0x0000063fu, 0x000200f9u, 0x00000628u, 0x000200f8u, 0x00000628u, 0x0004003du, 0x00000008u, 0x00000640u, 0x000000a1u, 0x000200feu, 0x00000640u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000a6u, 0x00000000u, 0x000000a4u, 0x00030037u, 0x00000007u, 0x000000a5u, 0x000200f8u, 0x000000a7u, 0x0004003bu, 0x0000026eu, 0x00000643u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000654u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000644u, 0x000000a5u, 0x00060050u, 0x0000026du, 0x00000645u, 0x00000644u, 0x00000644u, 0x00000644u, 0x000500c2u, 0x0000026du, 0x00000649u, 0x00000645u, 0x00000648u, 0x000500c7u, 0x0000026du, 0x0000064cu, 0x00000649u, 0x0000b61fu, 0x0003003eu, 0x00000643u, 0x0000064cu, 0x000500c4u, 0x0000026du, 0x0000064fu, 0x0000064cu, 0x0000b620u, 0x000500c2u, 0x0000026du, 0x00000652u, 0x0000064cu, 0x0000b621u, 0x000500c5u, 0x0000026du, 0x00000653u, 0x0000064fu, 0x00000652u, 0x0003003eu, 0x00000643u, 0x00000653u, 0x0004003du, 0x00000006u, 0x00000655u, 0x000000a5u, 0x000500c7u, 0x00000006u, 0x00000656u, 0x00000655u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00000658u, 0x00000656u, 0x00000657u, 0x0003003eu, 0x00000654u, 0x00000658u, 0x00040071u, 0x0000065bu, 0x0000065cu, 0x00000653u, 0x0004007cu, 0x0000065au, 0x0000065du, 0x0000065cu, 0x00040071u, 0x00000011u, 0x0000065fu, 0x00000658u, 0x0004007cu, 0x00000012u, 0x00000660u, 0x0000065fu, 0x00050051u, 0x00000012u, 0x00000661u, 0x0000065du, 0x00000000u, 0x00050051u, 0x00000012u, 0x00000662u, 0x0000065du, 0x00000001u, 0x00050051u, 0x00000012u, 0x00000663u, 0x0000065du, 0x00000002u, 0x00070050u, 0x00000013u, 0x00000664u, 0x00000661u, 0x00000662u, 0x00000663u, 0x00000660u, 0x000200feu, 0x00000664u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000a9u, 0x00000000u, 0x000000a4u, 0x00030037u, 0x00000007u, 0x000000a8u, 0x000200f8u, 0x000000aau, 0x0004003bu, 0x00000007u, 0x00000667u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000066au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000668u, 0x000000a8u, 0x000500c2u, 0x00000006u, 0x00000669u, 0x00000668u, 0x000001d9u, 0x0003003eu, 0x00000667u, 0x00000669u, 0x0004003du, 0x00000006u, 0x0000066bu, 0x000000a8u, 0x000500c7u, 0x00000006u, 0x0000066cu, 0x0000066bu, 0x00000657u, 0x0003003eu, 0x0000066au, 0x0000066cu, 0x00040071u, 0x00000011u, 0x0000066eu, 0x00000669u, 0x0004007cu, 0x00000012u, 0x0000066fu, 0x0000066eu, 0x00040071u, 0x00000011u, 0x00000677u, 0x0000066cu, 0x0004007cu, 0x00000012u, 0x00000678u, 0x00000677u, 0x00070050u, 0x00000013u, 0x00000679u, 0x0000066fu, 0x0000066fu, 0x0000066fu, 0x00000678u, 0x000200feu, 0x00000679u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000b1u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000aeu, 0x00030037u, 0x00000007u, 0x000000afu, 0x00030037u, 0x000000acu, 0x000000b0u, 0x000200f8u, 0x000000b2u, 0x0004003bu, 0x00000007u, 0x0000067cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000068du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000694u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000069eu, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000067du, 0x000000aeu, 0x000001afu, 0x0004003du, 0x00000006u, 0x0000067eu, 0x0000067du, 0x00050041u, 0x00000007u, 0x0000067fu, 0x000000aeu, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000680u, 0x0000067fu, 0x00050041u, 0x00000007u, 0x00000681u, 0x000000b0u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000682u, 0x00000681u, 0x00050084u, 0x00000006u, 0x00000683u, 0x00000680u, 0x00000682u, 0x00050080u, 0x00000006u, 0x00000684u, 0x0000067eu, 0x00000683u, 0x0003003eu, 0x0000067cu, 0x00000684u, 0x00050041u, 0x00000007u, 0x00000685u, 0x000000b0u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000686u, 0x00000685u, 0x000500c2u, 0x00000006u, 0x00000687u, 0x00000686u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00000689u, 0x00000684u, 0x00000687u, 0x0003003eu, 0x0000067cu, 0x00000689u, 0x000500c7u, 0x00000006u, 0x0000068cu, 0x00000689u, 0x0000068au, 0x0003003eu, 0x0000067cu, 0x0000068cu, 0x0004003du, 0x00000006u, 0x0000068fu, 0x00000685u, 0x000400c8u, 0x00000006u, 0x00000690u, 0x0000068fu, 0x000500c7u, 0x00000006u, 0x00000691u, 0x00000690u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00000693u, 0x00000691u, 0x00000692u, 0x0003003eu, 0x0000068du, 0x00000693u, 0x0003003eu, 0x00000694u, 0x0000068cu, 0x0004003du, 0x00000006u, 0x00000697u, 0x00000681u, 0x000500c7u, 0x00000006u, 0x00000698u, 0x00000697u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00000699u, 0x00000698u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000069bu, 0x0000068cu, 0x00000699u, 0x0003003eu, 0x00000694u, 0x0000069bu, 0x000500c6u, 0x00000006u, 0x0000069du, 0x0000069bu, 0x000002fbu, 0x0003003eu, 0x00000694u, 0x0000069du, 0x0004003du, 0x00000006u, 0x000006a6u, 0x000000afu, 0x00080041u, 0x000006a8u, 0x000006a9u, 0x000006a5u, 0x0000019cu, 0x000006a6u, 0x0000019cu, 0x0000069du, 0x0004003du, 0x0000000fu, 0x000006aau, 0x000006a9u, 0x00040071u, 0x00000006u, 0x000006abu, 0x000006aau, 0x0003003eu, 0x0000069eu, 0x000006abu, 0x000500c2u, 0x00000006u, 0x000006aeu, 0x000006abu, 0x00000693u, 0x000500c7u, 0x00000006u, 0x000006b0u, 0x000006aeu, 0x000006afu, 0x0003003eu, 0x0000069eu, 0x000006b0u, 0x000500c4u, 0x00000006u, 0x000006b2u, 0x000006b0u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x000006b4u, 0x000006b0u, 0x000006b2u, 0x0003003eu, 0x0000069eu, 0x000006b4u, 0x00040071u, 0x00000011u, 0x000006b6u, 0x000006b4u, 0x0004007cu, 0x00000012u, 0x000006b7u, 0x000006b6u, 0x00070050u, 0x00000013u, 0x000006b8u, 0x000006b7u, 0x000006b7u, 0x000006b7u, 0x000006b7u, 0x000200feu, 0x000006b8u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000b6u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000b3u, 0x00030037u, 0x00000007u, 0x000000b4u, 0x00030037u, 0x000000acu, 0x000000b5u, 0x000200f8u, 0x000000b7u, 0x0004003bu, 0x00000007u, 0x000006bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006cbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006d1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000006e5u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000006bcu, 0x000000b3u, 0x000001afu, 0x0004003du, 0x00000006u, 0x000006bdu, 0x000006bcu, 0x00050041u, 0x00000007u, 0x000006beu, 0x000000b3u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000006bfu, 0x000006beu, 0x00050041u, 0x00000007u, 0x000006c0u, 0x000000b5u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000006c1u, 0x000006c0u, 0x00050084u, 0x00000006u, 0x000006c2u, 0x000006bfu, 0x000006c1u, 0x00050080u, 0x00000006u, 0x000006c3u, 0x000006bdu, 0x000006c2u, 0x0003003eu, 0x000006bbu, 0x000006c3u, 0x00050041u, 0x00000007u, 0x000006c4u, 0x000000b5u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000006c5u, 0x000006c4u, 0x000500c2u, 0x00000006u, 0x000006c6u, 0x000006c5u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x000006c8u, 0x000006c3u, 0x000006c6u, 0x0003003eu, 0x000006bbu, 0x000006c8u, 0x000500c7u, 0x00000006u, 0x000006cau, 0x000006c8u, 0x0000068au, 0x0003003eu, 0x000006bbu, 0x000006cau, 0x0004003du, 0x00000006u, 0x000006cdu, 0x000006c4u, 0x000400c8u, 0x00000006u, 0x000006ceu, 0x000006cdu, 0x000500c7u, 0x00000006u, 0x000006cfu, 0x000006ceu, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000006d0u, 0x000006cfu, 0x00000692u, 0x0003003eu, 0x000006cbu, 0x000006d0u, 0x0003003eu, 0x000006d1u, 0x000006cau, 0x0004003du, 0x00000006u, 0x000006d4u, 0x000006c0u, 0x000500c7u, 0x00000006u, 0x000006d5u, 0x000006d4u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000006d6u, 0x000006d5u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000006d8u, 0x000006cau, 0x000006d6u, 0x0003003eu, 0x000006d1u, 0x000006d8u, 0x000500c6u, 0x00000006u, 0x000006dau, 0x000006d8u, 0x000002fbu, 0x0003003eu, 0x000006d1u, 0x000006dau, 0x0004003du, 0x00000006u, 0x000006dcu, 0x000000b4u, 0x00080041u, 0x000006a8u, 0x000006deu, 0x000006a5u, 0x0000019cu, 0x000006dcu, 0x0000019cu, 0x000006dau, 0x0004003du, 0x0000000fu, 0x000006dfu, 0x000006deu, 0x00040071u, 0x00000006u, 0x000006e0u, 0x000006dfu, 0x0003003eu, 0x000006dbu, 0x000006e0u, 0x000500c2u, 0x00000006u, 0x000006e3u, 0x000006e0u, 0x000006d0u, 0x000500c7u, 0x00000006u, 0x000006e4u, 0x000006e3u, 0x000006afu, 0x0003003eu, 0x000006dbu, 0x000006e4u, 0x000500c7u, 0x00000006u, 0x000006e8u, 0x000006e4u, 0x000006e7u, 0x0003003eu, 0x000006e5u, 0x000006e8u, 0x000500c4u, 0x00000006u, 0x000006eau, 0x000006e8u, 0x000001afu, 0x000500c4u, 0x00000006u, 0x000006ecu, 0x000006e8u, 0x000001a6u, 0x000500c5u, 0x00000006u, 0x000006edu, 0x000006eau, 0x000006ecu, 0x000500c2u, 0x00000006u, 0x000006efu, 0x000006e8u, 0x000001a9u, 0x000500c5u, 0x00000006u, 0x000006f0u, 0x000006edu, 0x000006efu, 0x0003003eu, 0x000006e5u, 0x000006f0u, 0x00040071u, 0x00000011u, 0x000006f2u, 0x000006f0u, 0x0004007cu, 0x00000012u, 0x000006f3u, 0x000006f2u, 0x000500c7u, 0x00000006u, 0x000006fbu, 0x000006e4u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x000006fcu, 0x000006fbu, 0x00000657u, 0x00040071u, 0x00000011u, 0x000006fdu, 0x000006fcu, 0x0004007cu, 0x00000012u, 0x000006feu, 0x000006fdu, 0x00070050u, 0x00000013u, 0x000006ffu, 0x000006f3u, 0x000006f3u, 0x000006f3u, 0x000006feu, 0x000200feu, 0x000006ffu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000bdu, 0x00000000u, 0x000000b8u, 0x00030037u, 0x00000095u, 0x000000b9u, 0x00030037u, 0x00000007u, 0x000000bau, 0x00030037u, 0x000000acu, 0x000000bbu, 0x00030037u, 0x00000007u, 0x000000bcu, 0x000200f8u, 0x000000beu, 0x0004003bu, 0x00000007u, 0x00000702u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000712u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000718u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000722u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000703u, 0x000000b9u, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000704u, 0x00000703u, 0x00050041u, 0x00000007u, 0x00000705u, 0x000000b9u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000706u, 0x00000705u, 0x00050041u, 0x00000007u, 0x00000707u, 0x000000bbu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000708u, 0x00000707u, 0x00050084u, 0x00000006u, 0x00000709u, 0x00000706u, 0x00000708u, 0x00050080u, 0x00000006u, 0x0000070au, 0x00000704u, 0x00000709u, 0x0003003eu, 0x00000702u, 0x0000070au, 0x00050041u, 0x00000007u, 0x0000070bu, 0x000000bbu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000070cu, 0x0000070bu, 0x000500c2u, 0x00000006u, 0x0000070du, 0x0000070cu, 0x000001a6u, 0x00050080u, 0x00000006u, 0x0000070fu, 0x0000070au, 0x0000070du, 0x0003003eu, 0x00000702u, 0x0000070fu, 0x000500c7u, 0x00000006u, 0x00000711u, 0x0000070fu, 0x0000068au, 0x0003003eu, 0x00000702u, 0x00000711u, 0x0004003du, 0x00000006u, 0x00000714u, 0x0000070bu, 0x000400c8u, 0x00000006u, 0x00000715u, 0x00000714u, 0x000500c7u, 0x00000006u, 0x00000716u, 0x00000715u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00000717u, 0x00000716u, 0x00000692u, 0x0003003eu, 0x00000712u, 0x00000717u, 0x0003003eu, 0x00000718u, 0x00000711u, 0x0004003du, 0x00000006u, 0x0000071bu, 0x00000707u, 0x000500c7u, 0x00000006u, 0x0000071cu, 0x0000071bu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000071du, 0x0000071cu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000071fu, 0x00000711u, 0x0000071du, 0x0003003eu, 0x00000718u, 0x0000071fu, 0x000500c6u, 0x00000006u, 0x00000721u, 0x0000071fu, 0x000002fbu, 0x0003003eu, 0x00000718u, 0x00000721u, 0x0004003du, 0x00000006u, 0x00000723u, 0x000000bau, 0x00080041u, 0x000006a8u, 0x00000725u, 0x000006a5u, 0x0000019cu, 0x00000723u, 0x0000019cu, 0x00000721u, 0x0004003du, 0x0000000fu, 0x00000726u, 0x00000725u, 0x00040071u, 0x00000006u, 0x00000727u, 0x00000726u, 0x0003003eu, 0x00000722u, 0x00000727u, 0x000500c2u, 0x00000006u, 0x0000072au, 0x00000727u, 0x00000717u, 0x000500c7u, 0x00000006u, 0x0000072bu, 0x0000072au, 0x000006afu, 0x0003003eu, 0x00000722u, 0x0000072bu, 0x0004003du, 0x00000006u, 0x0000072cu, 0x000000bcu, 0x000500c4u, 0x00000006u, 0x0000072du, 0x0000072cu, 0x000001afu, 0x000500c5u, 0x00000006u, 0x0000072fu, 0x0000072bu, 0x0000072du, 0x0003003eu, 0x00000722u, 0x0000072fu, 0x00040071u, 0x00000011u, 0x00000731u, 0x0000072fu, 0x0004007cu, 0x00000012u, 0x00000732u, 0x00000731u, 0x00070050u, 0x00000013u, 0x00000733u, 0x00000732u, 0x00000732u, 0x00000732u, 0x00000732u, 0x000200feu, 0x00000733u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000c7u, 0x00000000u, 0x000000bfu, 0x00030037u, 0x00000095u, 0x000000c0u, 0x00030037u, 0x00000007u, 0x000000c1u, 0x00030037u, 0x000000acu, 0x000000c2u, 0x00030037u, 0x00000007u, 0x000000c3u, 0x00030037u, 0x00000007u, 0x000000c4u, 0x00030037u, 0x00000007u, 0x000000c5u, 0x00030037u, 0x00000064u, 0x000000c6u, 0x000200f8u, 0x000000c8u, 0x0004003bu, 0x00000007u, 0x00000736u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000747u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000074du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000757u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000765u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000077du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000780u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000784u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000737u, 0x000000c0u, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000738u, 0x00000737u, 0x00050041u, 0x00000007u, 0x00000739u, 0x000000c0u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x0000073au, 0x00000739u, 0x00050041u, 0x00000007u, 0x0000073bu, 0x000000c2u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000073cu, 0x0000073bu, 0x00050084u, 0x00000006u, 0x0000073du, 0x0000073au, 0x0000073cu, 0x00050080u, 0x00000006u, 0x0000073eu, 0x00000738u, 0x0000073du, 0x0003003eu, 0x00000736u, 0x0000073eu, 0x00050041u, 0x00000007u, 0x0000073fu, 0x000000c2u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000740u, 0x0000073fu, 0x000500c2u, 0x00000006u, 0x00000741u, 0x00000740u, 0x000001a6u, 0x00050080u, 0x00000006u, 0x00000743u, 0x0000073eu, 0x00000741u, 0x0003003eu, 0x00000736u, 0x00000743u, 0x000500c7u, 0x00000006u, 0x00000746u, 0x00000743u, 0x00000744u, 0x0003003eu, 0x00000736u, 0x00000746u, 0x0004003du, 0x00000006u, 0x00000749u, 0x0000073fu, 0x000400c8u, 0x00000006u, 0x0000074au, 0x00000749u, 0x000500c7u, 0x00000006u, 0x0000074bu, 0x0000074au, 0x000002f4u, 0x00050084u, 0x00000006u, 0x0000074cu, 0x0000074bu, 0x00000692u, 0x0003003eu, 0x00000747u, 0x0000074cu, 0x0003003eu, 0x0000074du, 0x00000746u, 0x0004003du, 0x00000006u, 0x00000750u, 0x0000073bu, 0x000500c7u, 0x00000006u, 0x00000751u, 0x00000750u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00000752u, 0x00000751u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00000754u, 0x00000746u, 0x00000752u, 0x0003003eu, 0x0000074du, 0x00000754u, 0x000500c6u, 0x00000006u, 0x00000756u, 0x00000754u, 0x000002fbu, 0x0003003eu, 0x0000074du, 0x00000756u, 0x0004003du, 0x00000006u, 0x00000758u, 0x000000c1u, 0x00080041u, 0x000006a8u, 0x0000075au, 0x000006a5u, 0x0000019cu, 0x00000758u, 0x0000019cu, 0x00000756u, 0x0004003du, 0x0000000fu, 0x0000075bu, 0x0000075au, 0x00040071u, 0x00000006u, 0x0000075cu, 0x0000075bu, 0x0003003eu, 0x00000757u, 0x0000075cu, 0x000500c2u, 0x00000006u, 0x0000075fu, 0x0000075cu, 0x0000074cu, 0x000500c7u, 0x00000006u, 0x00000760u, 0x0000075fu, 0x000006afu, 0x0003003eu, 0x00000757u, 0x00000760u, 0x0004003du, 0x00000006u, 0x00000761u, 0x000000c3u, 0x000500c4u, 0x00000006u, 0x00000762u, 0x00000761u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00000764u, 0x00000760u, 0x00000762u, 0x0003003eu, 0x00000757u, 0x00000764u, 0x000500c4u, 0x00000006u, 0x00000767u, 0x00000764u, 0x000001a9u, 0x0004003du, 0x00000006u, 0x00000768u, 0x000000c4u, 0x00050080u, 0x00000006u, 0x00000769u, 0x00000767u, 0x00000768u, 0x0003003eu, 0x00000765u, 0x00000769u, 0x0004003du, 0x00000006u, 0x0000076au, 0x000000c5u, 0x000500c6u, 0x00000006u, 0x0000076cu, 0x00000769u, 0x0000076au, 0x0003003eu, 0x00000765u, 0x0000076cu, 0x0004003du, 0x00000006u, 0x00000774u, 0x000000c1u, 0x000500c5u, 0x00000006u, 0x00000777u, 0x00000775u, 0x0000076cu, 0x00080041u, 0x00000778u, 0x00000779u, 0x00000773u, 0x0000019cu, 0x00000774u, 0x0000019cu, 0x00000777u, 0x0004003du, 0x00000011u, 0x0000077au, 0x00000779u, 0x00040071u, 0x00000006u, 0x0000077bu, 0x0000077au, 0x0003003eu, 0x00000757u, 0x0000077bu, 0x0004003du, 0x00000063u, 0x0000077cu, 0x000000c6u, 0x000300f7u, 0x0000077fu, 0x00000000u, 0x000400fau, 0x0000077cu, 0x0000077eu, 0x00000783u, 0x000200f8u, 0x0000077eu, 0x0003003eu, 0x00000780u, 0x0000077bu, 0x00050039u, 0x00000013u, 0x00000782u, 0x000000a9u, 0x00000780u, 0x0003003eu, 0x0000077du, 0x00000782u, 0x000200f9u, 0x0000077fu, 0x000200f8u, 0x00000783u, 0x0003003eu, 0x00000784u, 0x0000077bu, 0x00050039u, 0x00000013u, 0x00000786u, 0x000000a6u, 0x00000784u, 0x0003003eu, 0x0000077du, 0x00000786u, 0x000200f9u, 0x0000077fu, 0x000200f8u, 0x0000077fu, 0x000700f5u, 0x00000013u, 0x0000b176u, 0x00000782u, 0x0000077eu, 0x00000786u, 0x00000783u, 0x000200feu, 0x0000b176u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000d0u, 0x00000000u, 0x000000c9u, 0x00030037u, 0x00000095u, 0x000000cau, 0x00030037u, 0x00000007u, 0x000000cbu, 0x00030037u, 0x000000acu, 0x000000ccu, 0x00030037u, 0x00000007u, 0x000000cdu, 0x00030037u, 0x00000007u, 0x000000ceu, 0x00030037u, 0x00000064u, 0x000000cfu, 0x000200f8u, 0x000000d1u, 0x0004003bu, 0x00000007u, 0x0000078au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000799u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007a3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007a9u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000007b8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007bfu, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000078bu, 0x000000cau, 0x000001afu, 0x0004003du, 0x00000006u, 0x0000078cu, 0x0000078bu, 0x00050041u, 0x00000007u, 0x0000078du, 0x000000cau, 0x000001b2u, 0x0004003du, 0x00000006u, 0x0000078eu, 0x0000078du, 0x00050041u, 0x00000007u, 0x0000078fu, 0x000000ccu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000790u, 0x0000078fu, 0x00050084u, 0x00000006u, 0x00000791u, 0x0000078eu, 0x00000790u, 0x00050080u, 0x00000006u, 0x00000792u, 0x0000078cu, 0x00000791u, 0x0003003eu, 0x0000078au, 0x00000792u, 0x00050041u, 0x00000007u, 0x00000793u, 0x000000ccu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000794u, 0x00000793u, 0x00050080u, 0x00000006u, 0x00000796u, 0x00000792u, 0x00000794u, 0x0003003eu, 0x0000078au, 0x00000796u, 0x000500c7u, 0x00000006u, 0x00000798u, 0x00000796u, 0x00000744u, 0x0003003eu, 0x0000078au, 0x00000798u, 0x0003003eu, 0x00000799u, 0x00000798u, 0x0004003du, 0x00000006u, 0x0000079cu, 0x0000078fu, 0x000500c7u, 0x00000006u, 0x0000079du, 0x0000079cu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000079eu, 0x0000079du, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000007a0u, 0x00000798u, 0x0000079eu, 0x0003003eu, 0x00000799u, 0x000007a0u, 0x000500c6u, 0x00000006u, 0x000007a2u, 0x000007a0u, 0x000002fbu, 0x0003003eu, 0x00000799u, 0x000007a2u, 0x0004003du, 0x00000006u, 0x000007a4u, 0x000000cbu, 0x00080041u, 0x000006a8u, 0x000007a6u, 0x000006a5u, 0x0000019cu, 0x000007a4u, 0x0000019cu, 0x000007a2u, 0x0004003du, 0x0000000fu, 0x000007a7u, 0x000007a6u, 0x00040071u, 0x00000006u, 0x000007a8u, 0x000007a7u, 0x0003003eu, 0x000007a3u, 0x000007a8u, 0x000500c4u, 0x00000006u, 0x000007abu, 0x000007a8u, 0x000001a9u, 0x0004003du, 0x00000006u, 0x000007acu, 0x000000cdu, 0x00050080u, 0x00000006u, 0x000007adu, 0x000007abu, 0x000007acu, 0x0003003eu, 0x000007a9u, 0x000007adu, 0x0004003du, 0x00000006u, 0x000007aeu, 0x000000ceu, 0x000500c6u, 0x00000006u, 0x000007b0u, 0x000007adu, 0x000007aeu, 0x0003003eu, 0x000007a9u, 0x000007b0u, 0x0004003du, 0x00000006u, 0x000007b1u, 0x000000cbu, 0x000500c5u, 0x00000006u, 0x000007b3u, 0x00000775u, 0x000007b0u, 0x00080041u, 0x00000778u, 0x000007b4u, 0x00000773u, 0x0000019cu, 0x000007b1u, 0x0000019cu, 0x000007b3u, 0x0004003du, 0x00000011u, 0x000007b5u, 0x000007b4u, 0x00040071u, 0x00000006u, 0x000007b6u, 0x000007b5u, 0x0003003eu, 0x000007a3u, 0x000007b6u, 0x0004003du, 0x00000063u, 0x000007b7u, 0x000000cfu, 0x000300f7u, 0x000007bau, 0x00000000u, 0x000400fau, 0x000007b7u, 0x000007b9u, 0x000007beu, 0x000200f8u, 0x000007b9u, 0x0003003eu, 0x000007bbu, 0x000007b6u, 0x00050039u, 0x00000013u, 0x000007bdu, 0x000000a9u, 0x000007bbu, 0x0003003eu, 0x000007b8u, 0x000007bdu, 0x000200f9u, 0x000007bau, 0x000200f8u, 0x000007beu, 0x0003003eu, 0x000007bfu, 0x000007b6u, 0x00050039u, 0x00000013u, 0x000007c1u, 0x000000a6u, 0x000007bfu, 0x0003003eu, 0x000007b8u, 0x000007c1u, 0x000200f9u, 0x000007bau, 0x000200f8u, 0x000007bau, 0x000700f5u, 0x00000013u, 0x0000b177u, 0x000007bdu, 0x000007b9u, 0x000007c1u, 0x000007beu, 0x000200feu, 0x0000b177u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000d5u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000d2u, 0x00030037u, 0x00000007u, 0x000000d3u, 0x00030037u, 0x000000acu, 0x000000d4u, 0x000200f8u, 0x000000d6u, 0x0004003bu, 0x00000007u, 0x000007c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007d5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000007e0u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000007c6u, 0x000000d2u, 0x000001afu, 0x0004003du, 0x00000006u, 0x000007c7u, 0x000007c6u, 0x00050041u, 0x00000007u, 0x000007c8u, 0x000000d2u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000007c9u, 0x000007c8u, 0x00050041u, 0x00000007u, 0x000007cau, 0x000000d4u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000007cbu, 0x000007cau, 0x00050084u, 0x00000006u, 0x000007ccu, 0x000007c9u, 0x000007cbu, 0x00050080u, 0x00000006u, 0x000007cdu, 0x000007c7u, 0x000007ccu, 0x0003003eu, 0x000007c5u, 0x000007cdu, 0x00050041u, 0x00000007u, 0x000007ceu, 0x000000d4u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000007cfu, 0x000007ceu, 0x00050084u, 0x00000006u, 0x000007d0u, 0x000007cfu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000007d2u, 0x000007cdu, 0x000007d0u, 0x0003003eu, 0x000007c5u, 0x000007d2u, 0x000500c7u, 0x00000006u, 0x000007d4u, 0x000007d2u, 0x0000068au, 0x0003003eu, 0x000007c5u, 0x000007d4u, 0x000500c2u, 0x00000006u, 0x000007d7u, 0x000007d4u, 0x000001a6u, 0x0003003eu, 0x000007d5u, 0x000007d7u, 0x0004003du, 0x00000006u, 0x000007d9u, 0x000007cau, 0x000500c7u, 0x00000006u, 0x000007dau, 0x000007d9u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000007dbu, 0x000007dau, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000007ddu, 0x000007d7u, 0x000007dbu, 0x0003003eu, 0x000007d5u, 0x000007ddu, 0x000500c6u, 0x00000006u, 0x000007dfu, 0x000007ddu, 0x000002f4u, 0x0003003eu, 0x000007d5u, 0x000007dfu, 0x0004003du, 0x00000006u, 0x000007e1u, 0x000000d3u, 0x00080041u, 0x00000778u, 0x000007e3u, 0x00000773u, 0x0000019cu, 0x000007e1u, 0x0000019cu, 0x000007dfu, 0x0004003du, 0x00000011u, 0x000007e4u, 0x000007e3u, 0x00040071u, 0x00000006u, 0x000007e5u, 0x000007e4u, 0x0003003eu, 0x000007e0u, 0x000007e5u, 0x000500c2u, 0x00000006u, 0x000007e7u, 0x000007e5u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x000007e8u, 0x000007e7u, 0x0004007cu, 0x00000012u, 0x000007e9u, 0x000007e8u, 0x000500c7u, 0x00000006u, 0x000007ebu, 0x000007e5u, 0x00000657u, 0x00040071u, 0x00000011u, 0x000007ecu, 0x000007ebu, 0x0004007cu, 0x00000012u, 0x000007edu, 0x000007ecu, 0x00050050u, 0x0000011du, 0x000007eeu, 0x000007e9u, 0x000007edu, 0x0009004fu, 0x00000013u, 0x000007efu, 0x000007eeu, 0x000007eeu, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x000200feu, 0x000007efu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000ddu, 0x00000000u, 0x000000c9u, 0x00030037u, 0x00000095u, 0x000000d7u, 0x00030037u, 0x00000007u, 0x000000d8u, 0x00030037u, 0x000000acu, 0x000000d9u, 0x00030037u, 0x00000007u, 0x000000dau, 0x00030037u, 0x00000007u, 0x000000dbu, 0x00030037u, 0x00000064u, 0x000000dcu, 0x000200f8u, 0x000000deu, 0x0004003bu, 0x00000007u, 0x000007f2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000802u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000080du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000813u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00000824u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000827u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000082bu, 0x00000007u, 0x00050041u, 0x00000007u, 0x000007f3u, 0x000000d7u, 0x000001afu, 0x0004003du, 0x00000006u, 0x000007f4u, 0x000007f3u, 0x00050041u, 0x00000007u, 0x000007f5u, 0x000000d7u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000007f6u, 0x000007f5u, 0x00050041u, 0x00000007u, 0x000007f7u, 0x000000d9u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000007f8u, 0x000007f7u, 0x00050084u, 0x00000006u, 0x000007f9u, 0x000007f6u, 0x000007f8u, 0x00050080u, 0x00000006u, 0x000007fau, 0x000007f4u, 0x000007f9u, 0x0003003eu, 0x000007f2u, 0x000007fau, 0x00050041u, 0x00000007u, 0x000007fbu, 0x000000d9u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000007fcu, 0x000007fbu, 0x00050084u, 0x00000006u, 0x000007fdu, 0x000007fcu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000007ffu, 0x000007fau, 0x000007fdu, 0x0003003eu, 0x000007f2u, 0x000007ffu, 0x000500c7u, 0x00000006u, 0x00000801u, 0x000007ffu, 0x00000744u, 0x0003003eu, 0x000007f2u, 0x00000801u, 0x000500c2u, 0x00000006u, 0x00000804u, 0x00000801u, 0x000001a6u, 0x0003003eu, 0x00000802u, 0x00000804u, 0x0004003du, 0x00000006u, 0x00000806u, 0x000007f7u, 0x000500c7u, 0x00000006u, 0x00000807u, 0x00000806u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00000808u, 0x00000807u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000080au, 0x00000804u, 0x00000808u, 0x0003003eu, 0x00000802u, 0x0000080au, 0x000500c6u, 0x00000006u, 0x0000080cu, 0x0000080au, 0x000002f4u, 0x0003003eu, 0x00000802u, 0x0000080cu, 0x0004003du, 0x00000006u, 0x0000080eu, 0x000000d8u, 0x00080041u, 0x00000778u, 0x00000810u, 0x00000773u, 0x0000019cu, 0x0000080eu, 0x0000019cu, 0x0000080cu, 0x0004003du, 0x00000011u, 0x00000811u, 0x00000810u, 0x00040071u, 0x00000006u, 0x00000812u, 0x00000811u, 0x0003003eu, 0x0000080du, 0x00000812u, 0x000500c2u, 0x00000006u, 0x00000815u, 0x00000812u, 0x000001b5u, 0x000500c7u, 0x00000006u, 0x00000817u, 0x00000815u, 0x00000816u, 0x0004003du, 0x00000006u, 0x00000818u, 0x000000dau, 0x00050080u, 0x00000006u, 0x00000819u, 0x00000817u, 0x00000818u, 0x0003003eu, 0x00000813u, 0x00000819u, 0x0004003du, 0x00000006u, 0x0000081au, 0x000000dbu, 0x000500c6u, 0x00000006u, 0x0000081cu, 0x00000819u, 0x0000081au, 0x0003003eu, 0x00000813u, 0x0000081cu, 0x0004003du, 0x00000006u, 0x0000081du, 0x000000d8u, 0x000500c5u, 0x00000006u, 0x0000081fu, 0x00000775u, 0x0000081cu, 0x00080041u, 0x00000778u, 0x00000820u, 0x00000773u, 0x0000019cu, 0x0000081du, 0x0000019cu, 0x0000081fu, 0x0004003du, 0x00000011u, 0x00000821u, 0x00000820u, 0x00040071u, 0x00000006u, 0x00000822u, 0x00000821u, 0x0003003eu, 0x0000080du, 0x00000822u, 0x0004003du, 0x00000063u, 0x00000823u, 0x000000dcu, 0x000300f7u, 0x00000826u, 0x00000000u, 0x000400fau, 0x00000823u, 0x00000825u, 0x0000082au, 0x000200f8u, 0x00000825u, 0x0003003eu, 0x00000827u, 0x00000822u, 0x00050039u, 0x00000013u, 0x00000829u, 0x000000a9u, 0x00000827u, 0x0003003eu, 0x00000824u, 0x00000829u, 0x000200f9u, 0x00000826u, 0x000200f8u, 0x0000082au, 0x0003003eu, 0x0000082bu, 0x00000822u, 0x00050039u, 0x00000013u, 0x0000082du, 0x000000a6u, 0x0000082bu, 0x0003003eu, 0x00000824u, 0x0000082du, 0x000200f9u, 0x00000826u, 0x000200f8u, 0x00000826u, 0x000700f5u, 0x00000013u, 0x0000b178u, 0x00000829u, 0x00000825u, 0x0000082du, 0x0000082au, 0x000200feu, 0x0000b178u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000e2u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000dfu, 0x00030037u, 0x00000007u, 0x000000e0u, 0x00030037u, 0x000000acu, 0x000000e1u, 0x000200f8u, 0x000000e3u, 0x0004003bu, 0x00000007u, 0x00000831u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000840u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000084au, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000832u, 0x000000dfu, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000833u, 0x00000832u, 0x00050041u, 0x00000007u, 0x00000834u, 0x000000dfu, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000835u, 0x00000834u, 0x00050041u, 0x00000007u, 0x00000836u, 0x000000e1u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000837u, 0x00000836u, 0x00050084u, 0x00000006u, 0x00000838u, 0x00000835u, 0x00000837u, 0x00050080u, 0x00000006u, 0x00000839u, 0x00000833u, 0x00000838u, 0x0003003eu, 0x00000831u, 0x00000839u, 0x00050041u, 0x00000007u, 0x0000083au, 0x000000e1u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000083bu, 0x0000083au, 0x00050080u, 0x00000006u, 0x0000083du, 0x00000839u, 0x0000083bu, 0x0003003eu, 0x00000831u, 0x0000083du, 0x000500c7u, 0x00000006u, 0x0000083fu, 0x0000083du, 0x0000068au, 0x0003003eu, 0x00000831u, 0x0000083fu, 0x0003003eu, 0x00000840u, 0x0000083fu, 0x0004003du, 0x00000006u, 0x00000843u, 0x00000836u, 0x000500c7u, 0x00000006u, 0x00000844u, 0x00000843u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00000845u, 0x00000844u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x00000847u, 0x0000083fu, 0x00000845u, 0x0003003eu, 0x00000840u, 0x00000847u, 0x000500c6u, 0x00000006u, 0x00000849u, 0x00000847u, 0x000002fbu, 0x0003003eu, 0x00000840u, 0x00000849u, 0x0004003du, 0x00000006u, 0x0000084bu, 0x000000e0u, 0x00080041u, 0x000006a8u, 0x0000084du, 0x000006a5u, 0x0000019cu, 0x0000084bu, 0x0000019cu, 0x00000849u, 0x0004003du, 0x0000000fu, 0x0000084eu, 0x0000084du, 0x00040071u, 0x00000006u, 0x0000084fu, 0x0000084eu, 0x0003003eu, 0x0000084au, 0x0000084fu, 0x00040071u, 0x00000011u, 0x00000851u, 0x0000084fu, 0x0004007cu, 0x00000012u, 0x00000852u, 0x00000851u, 0x00070050u, 0x00000013u, 0x00000853u, 0x00000852u, 0x00000852u, 0x00000852u, 0x00000852u, 0x000200feu, 0x00000853u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000e7u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000e4u, 0x00030037u, 0x00000007u, 0x000000e5u, 0x00030037u, 0x000000acu, 0x000000e6u, 0x000200f8u, 0x000000e8u, 0x0004003bu, 0x00000007u, 0x00000856u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000865u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000086fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000875u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000878u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000857u, 0x000000e4u, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000858u, 0x00000857u, 0x00050041u, 0x00000007u, 0x00000859u, 0x000000e4u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x0000085au, 0x00000859u, 0x00050041u, 0x00000007u, 0x0000085bu, 0x000000e6u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x0000085cu, 0x0000085bu, 0x00050084u, 0x00000006u, 0x0000085du, 0x0000085au, 0x0000085cu, 0x00050080u, 0x00000006u, 0x0000085eu, 0x00000858u, 0x0000085du, 0x0003003eu, 0x00000856u, 0x0000085eu, 0x00050041u, 0x00000007u, 0x0000085fu, 0x000000e6u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000860u, 0x0000085fu, 0x00050080u, 0x00000006u, 0x00000862u, 0x0000085eu, 0x00000860u, 0x0003003eu, 0x00000856u, 0x00000862u, 0x000500c7u, 0x00000006u, 0x00000864u, 0x00000862u, 0x0000068au, 0x0003003eu, 0x00000856u, 0x00000864u, 0x0003003eu, 0x00000865u, 0x00000864u, 0x0004003du, 0x00000006u, 0x00000868u, 0x0000085bu, 0x000500c7u, 0x00000006u, 0x00000869u, 0x00000868u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x0000086au, 0x00000869u, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x0000086cu, 0x00000864u, 0x0000086au, 0x0003003eu, 0x00000865u, 0x0000086cu, 0x000500c6u, 0x00000006u, 0x0000086eu, 0x0000086cu, 0x000002fbu, 0x0003003eu, 0x00000865u, 0x0000086eu, 0x0004003du, 0x00000006u, 0x00000870u, 0x000000e5u, 0x00080041u, 0x000006a8u, 0x00000872u, 0x000006a5u, 0x0000019cu, 0x00000870u, 0x0000019cu, 0x0000086eu, 0x0004003du, 0x0000000fu, 0x00000873u, 0x00000872u, 0x00040071u, 0x00000006u, 0x00000874u, 0x00000873u, 0x0003003eu, 0x0000086fu, 0x00000874u, 0x000500c2u, 0x00000006u, 0x00000877u, 0x00000874u, 0x000001afu, 0x0003003eu, 0x00000875u, 0x00000877u, 0x000500c7u, 0x00000006u, 0x0000087au, 0x00000874u, 0x000006afu, 0x0003003eu, 0x00000878u, 0x0000087au, 0x000500c4u, 0x00000006u, 0x0000087cu, 0x0000087au, 0x000001afu, 0x000500c5u, 0x00000006u, 0x0000087eu, 0x0000087au, 0x0000087cu, 0x0003003eu, 0x00000878u, 0x0000087eu, 0x000500c4u, 0x00000006u, 0x00000880u, 0x00000877u, 0x000001afu, 0x000500c5u, 0x00000006u, 0x00000882u, 0x00000877u, 0x00000880u, 0x0003003eu, 0x00000875u, 0x00000882u, 0x00040071u, 0x00000011u, 0x00000884u, 0x00000882u, 0x0004007cu, 0x00000012u, 0x00000885u, 0x00000884u, 0x00040071u, 0x00000011u, 0x0000088du, 0x0000087eu, 0x0004007cu, 0x00000012u, 0x0000088eu, 0x0000088du, 0x00070050u, 0x00000013u, 0x0000088fu, 0x00000885u, 0x00000885u, 0x00000885u, 0x0000088eu, 0x000200feu, 0x0000088fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000edu, 0x00000000u, 0x000000b8u, 0x00030037u, 0x00000095u, 0x000000e9u, 0x00030037u, 0x00000007u, 0x000000eau, 0x00030037u, 0x000000acu, 0x000000ebu, 0x00030037u, 0x00000007u, 0x000000ecu, 0x000200f8u, 0x000000eeu, 0x0004003bu, 0x00000007u, 0x00000892u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000089bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008a9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008b3u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000008beu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x000008c4u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000008c9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000008cfu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000893u, 0x000000e9u, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000894u, 0x00000893u, 0x00050041u, 0x00000007u, 0x00000895u, 0x000000e9u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000896u, 0x00000895u, 0x00050041u, 0x00000007u, 0x00000897u, 0x000000ebu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000898u, 0x00000897u, 0x00050084u, 0x00000006u, 0x00000899u, 0x00000896u, 0x00000898u, 0x00050080u, 0x00000006u, 0x0000089au, 0x00000894u, 0x00000899u, 0x0003003eu, 0x00000892u, 0x0000089au, 0x00050041u, 0x00000007u, 0x0000089du, 0x000000ebu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000089eu, 0x0000089du, 0x00050080u, 0x00000006u, 0x0000089fu, 0x0000089au, 0x0000089eu, 0x0003003eu, 0x0000089bu, 0x0000089fu, 0x000500c7u, 0x00000006u, 0x000008a1u, 0x0000089fu, 0x00000744u, 0x0003003eu, 0x0000089bu, 0x000008a1u, 0x0004003du, 0x00000006u, 0x000008a4u, 0x000000ecu, 0x00050084u, 0x00000006u, 0x000008a5u, 0x000008a4u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000008a6u, 0x0000089au, 0x000008a5u, 0x0003003eu, 0x000008a2u, 0x000008a6u, 0x000500c7u, 0x00000006u, 0x000008a8u, 0x000008a6u, 0x00000744u, 0x0003003eu, 0x000008a2u, 0x000008a8u, 0x0003003eu, 0x000008a9u, 0x000008a1u, 0x0004003du, 0x00000006u, 0x000008acu, 0x00000897u, 0x000500c7u, 0x00000006u, 0x000008adu, 0x000008acu, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000008aeu, 0x000008adu, 0x000001a9u, 0x000500c6u, 0x00000006u, 0x000008b0u, 0x000008a1u, 0x000008aeu, 0x0003003eu, 0x000008a9u, 0x000008b0u, 0x000500c6u, 0x00000006u, 0x000008b2u, 0x000008b0u, 0x000002fbu, 0x0003003eu, 0x000008a9u, 0x000008b2u, 0x000500c2u, 0x00000006u, 0x000008b5u, 0x000008a8u, 0x000001a6u, 0x0003003eu, 0x000008b3u, 0x000008b5u, 0x0004003du, 0x00000006u, 0x000008b7u, 0x00000897u, 0x000500c7u, 0x00000006u, 0x000008b8u, 0x000008b7u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000008b9u, 0x000008b8u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000008bbu, 0x000008b5u, 0x000008b9u, 0x0003003eu, 0x000008b3u, 0x000008bbu, 0x000500c6u, 0x00000006u, 0x000008bdu, 0x000008bbu, 0x000002f4u, 0x0003003eu, 0x000008b3u, 0x000008bdu, 0x0004003du, 0x00000006u, 0x000008bfu, 0x000000eau, 0x000500c5u, 0x00000006u, 0x000008c1u, 0x000008b2u, 0x0000076du, 0x00080041u, 0x000006a8u, 0x000008c2u, 0x000006a5u, 0x0000019cu, 0x000008bfu, 0x0000019cu, 0x000008c1u, 0x0004003du, 0x0000000fu, 0x000008c3u, 0x000008c2u, 0x0003003eu, 0x000008beu, 0x000008c3u, 0x0004003du, 0x00000006u, 0x000008c5u, 0x000000eau, 0x00080041u, 0x00000778u, 0x000008c7u, 0x00000773u, 0x0000019cu, 0x000008c5u, 0x0000019cu, 0x000008bdu, 0x0004003du, 0x00000011u, 0x000008c8u, 0x000008c7u, 0x0003003eu, 0x000008c4u, 0x000008c8u, 0x000500c2u, 0x00000011u, 0x000008ccu, 0x000008c8u, 0x000008cbu, 0x000500c7u, 0x00000011u, 0x000008cdu, 0x000008ccu, 0x000002acu, 0x00040071u, 0x0000000fu, 0x000008ceu, 0x000008cdu, 0x0003003eu, 0x000008c9u, 0x000008ceu, 0x000500c2u, 0x00000011u, 0x000008d1u, 0x000008c8u, 0x00000196u, 0x000500c7u, 0x00000011u, 0x000008d2u, 0x000008d1u, 0x000002acu, 0x00040071u, 0x0000000fu, 0x000008d3u, 0x000008d2u, 0x0003003eu, 0x000008cfu, 0x000008d3u, 0x00040071u, 0x00000011u, 0x000008d5u, 0x000008ceu, 0x0004007cu, 0x00000012u, 0x000008d6u, 0x000008d5u, 0x00050082u, 0x00000012u, 0x000008d8u, 0x000008d6u, 0x000008d7u, 0x00040071u, 0x00000011u, 0x000008dau, 0x000008d3u, 0x0004007cu, 0x00000012u, 0x000008dbu, 0x000008dau, 0x00050082u, 0x00000012u, 0x000008dcu, 0x000008dbu, 0x000008d7u, 0x00040071u, 0x00000011u, 0x000008deu, 0x000008c3u, 0x0004007cu, 0x00000012u, 0x000008dfu, 0x000008deu, 0x00070050u, 0x00000013u, 0x000008e3u, 0x000008d8u, 0x000008dcu, 0x000008dfu, 0x000008dfu, 0x000200feu, 0x000008e3u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000f2u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000efu, 0x00030037u, 0x00000007u, 0x000000f0u, 0x00030037u, 0x000000acu, 0x000000f1u, 0x000200f8u, 0x000000f3u, 0x0004003bu, 0x00000007u, 0x000008e6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000008f6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000901u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000907u, 0x00000007u, 0x00050041u, 0x00000007u, 0x000008e7u, 0x000000efu, 0x000001afu, 0x0004003du, 0x00000006u, 0x000008e8u, 0x000008e7u, 0x00050041u, 0x00000007u, 0x000008e9u, 0x000000efu, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000008eau, 0x000008e9u, 0x00050041u, 0x00000007u, 0x000008ebu, 0x000000f1u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x000008ecu, 0x000008ebu, 0x00050084u, 0x00000006u, 0x000008edu, 0x000008eau, 0x000008ecu, 0x00050080u, 0x00000006u, 0x000008eeu, 0x000008e8u, 0x000008edu, 0x0003003eu, 0x000008e6u, 0x000008eeu, 0x00050041u, 0x00000007u, 0x000008efu, 0x000000f1u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x000008f0u, 0x000008efu, 0x00050084u, 0x00000006u, 0x000008f1u, 0x000008f0u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x000008f3u, 0x000008eeu, 0x000008f1u, 0x0003003eu, 0x000008e6u, 0x000008f3u, 0x000500c7u, 0x00000006u, 0x000008f5u, 0x000008f3u, 0x0000068au, 0x0003003eu, 0x000008e6u, 0x000008f5u, 0x000500c2u, 0x00000006u, 0x000008f8u, 0x000008f5u, 0x000001a6u, 0x0003003eu, 0x000008f6u, 0x000008f8u, 0x0004003du, 0x00000006u, 0x000008fau, 0x000008ebu, 0x000500c7u, 0x00000006u, 0x000008fbu, 0x000008fau, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x000008fcu, 0x000008fbu, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x000008feu, 0x000008f8u, 0x000008fcu, 0x0003003eu, 0x000008f6u, 0x000008feu, 0x000500c6u, 0x00000006u, 0x00000900u, 0x000008feu, 0x000002f4u, 0x0003003eu, 0x000008f6u, 0x00000900u, 0x0004003du, 0x00000006u, 0x00000902u, 0x000000f0u, 0x00080041u, 0x00000778u, 0x00000904u, 0x00000773u, 0x0000019cu, 0x00000902u, 0x0000019cu, 0x00000900u, 0x0004003du, 0x00000011u, 0x00000905u, 0x00000904u, 0x00040071u, 0x00000006u, 0x00000906u, 0x00000905u, 0x0003003eu, 0x00000901u, 0x00000906u, 0x0003003eu, 0x00000907u, 0x00000906u, 0x00050039u, 0x00000013u, 0x00000909u, 0x000000a6u, 0x00000907u, 0x000200feu, 0x00000909u, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000f7u, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000f4u, 0x00030037u, 0x00000007u, 0x000000f5u, 0x00030037u, 0x000000acu, 0x000000f6u, 0x000200f8u, 0x000000f8u, 0x0004003bu, 0x00000007u, 0x0000090cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000091cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000927u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000092du, 0x00000007u, 0x00050041u, 0x00000007u, 0x0000090du, 0x000000f4u, 0x000001afu, 0x0004003du, 0x00000006u, 0x0000090eu, 0x0000090du, 0x00050041u, 0x00000007u, 0x0000090fu, 0x000000f4u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000910u, 0x0000090fu, 0x00050041u, 0x00000007u, 0x00000911u, 0x000000f6u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000912u, 0x00000911u, 0x00050084u, 0x00000006u, 0x00000913u, 0x00000910u, 0x00000912u, 0x00050080u, 0x00000006u, 0x00000914u, 0x0000090eu, 0x00000913u, 0x0003003eu, 0x0000090cu, 0x00000914u, 0x00050041u, 0x00000007u, 0x00000915u, 0x000000f6u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000916u, 0x00000915u, 0x00050084u, 0x00000006u, 0x00000917u, 0x00000916u, 0x000002f8u, 0x00050080u, 0x00000006u, 0x00000919u, 0x00000914u, 0x00000917u, 0x0003003eu, 0x0000090cu, 0x00000919u, 0x000500c7u, 0x00000006u, 0x0000091bu, 0x00000919u, 0x0000068au, 0x0003003eu, 0x0000090cu, 0x0000091bu, 0x000500c2u, 0x00000006u, 0x0000091eu, 0x0000091bu, 0x000001a6u, 0x0003003eu, 0x0000091cu, 0x0000091eu, 0x0004003du, 0x00000006u, 0x00000920u, 0x00000911u, 0x000500c7u, 0x00000006u, 0x00000921u, 0x00000920u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00000922u, 0x00000921u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x00000924u, 0x0000091eu, 0x00000922u, 0x0003003eu, 0x0000091cu, 0x00000924u, 0x000500c6u, 0x00000006u, 0x00000926u, 0x00000924u, 0x000002f4u, 0x0003003eu, 0x0000091cu, 0x00000926u, 0x0004003du, 0x00000006u, 0x00000928u, 0x000000f5u, 0x00080041u, 0x00000778u, 0x0000092au, 0x00000773u, 0x0000019cu, 0x00000928u, 0x0000019cu, 0x00000926u, 0x0004003du, 0x00000011u, 0x0000092bu, 0x0000092au, 0x00040071u, 0x00000006u, 0x0000092cu, 0x0000092bu, 0x0003003eu, 0x00000927u, 0x0000092cu, 0x0003003eu, 0x0000092du, 0x0000092cu, 0x00050039u, 0x00000013u, 0x0000092fu, 0x000000a9u, 0x0000092du, 0x000200feu, 0x0000092fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x000000fcu, 0x00000000u, 0x000000adu, 0x00030037u, 0x00000095u, 0x000000f9u, 0x00030037u, 0x00000007u, 0x000000fau, 0x00030037u, 0x000000acu, 0x000000fbu, 0x000200f8u, 0x000000fdu, 0x0004003bu, 0x00000007u, 0x00000932u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000942u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000094du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000953u, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000933u, 0x000000f9u, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000934u, 0x00000933u, 0x00050041u, 0x00000007u, 0x00000935u, 0x000000f9u, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000936u, 0x00000935u, 0x00050041u, 0x00000007u, 0x00000937u, 0x000000fbu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000938u, 0x00000937u, 0x00050084u, 0x00000006u, 0x00000939u, 0x00000936u, 0x00000938u, 0x00050080u, 0x00000006u, 0x0000093au, 0x00000934u, 0x00000939u, 0x0003003eu, 0x00000932u, 0x0000093au, 0x00050041u, 0x00000007u, 0x0000093bu, 0x000000fbu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000093cu, 0x0000093bu, 0x00050084u, 0x00000006u, 0x0000093du, 0x0000093cu, 0x000002f8u, 0x00050080u, 0x00000006u, 0x0000093fu, 0x0000093au, 0x0000093du, 0x0003003eu, 0x00000932u, 0x0000093fu, 0x000500c7u, 0x00000006u, 0x00000941u, 0x0000093fu, 0x00000744u, 0x0003003eu, 0x00000932u, 0x00000941u, 0x000500c2u, 0x00000006u, 0x00000944u, 0x00000941u, 0x000001a6u, 0x0003003eu, 0x00000942u, 0x00000944u, 0x0004003du, 0x00000006u, 0x00000946u, 0x00000937u, 0x000500c7u, 0x00000006u, 0x00000947u, 0x00000946u, 0x000002f4u, 0x000500c4u, 0x00000006u, 0x00000948u, 0x00000947u, 0x000001a6u, 0x000500c6u, 0x00000006u, 0x0000094au, 0x00000944u, 0x00000948u, 0x0003003eu, 0x00000942u, 0x0000094au, 0x000500c6u, 0x00000006u, 0x0000094cu, 0x0000094au, 0x000002f4u, 0x0003003eu, 0x00000942u, 0x0000094cu, 0x0004003du, 0x00000006u, 0x0000094eu, 0x000000fau, 0x00080041u, 0x00000778u, 0x00000950u, 0x00000773u, 0x0000019cu, 0x0000094eu, 0x0000019cu, 0x0000094cu, 0x0004003du, 0x00000011u, 0x00000951u, 0x00000950u, 0x00040071u, 0x00000006u, 0x00000952u, 0x00000951u, 0x0003003eu, 0x0000094du, 0x00000952u, 0x0004003du, 0x00000006u, 0x00000954u, 0x000000fau, 0x000500c5u, 0x00000006u, 0x00000956u, 0x0000094cu, 0x00000775u, 0x00080041u, 0x00000778u, 0x00000957u, 0x00000773u, 0x0000019cu, 0x00000954u, 0x0000019cu, 0x00000956u, 0x0004003du, 0x00000011u, 0x00000958u, 0x00000957u, 0x00040071u, 0x00000006u, 0x00000959u, 0x00000958u, 0x0003003eu, 0x00000953u, 0x00000959u, 0x000500c2u, 0x00000006u, 0x0000095bu, 0x00000952u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x0000095cu, 0x0000095bu, 0x0004007cu, 0x00000012u, 0x0000095du, 0x0000095cu, 0x000500c7u, 0x00000006u, 0x0000095fu, 0x00000952u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00000960u, 0x0000095fu, 0x0004007cu, 0x00000012u, 0x00000961u, 0x00000960u, 0x000500c2u, 0x00000006u, 0x00000963u, 0x00000959u, 0x000001d9u, 0x00040071u, 0x00000011u, 0x00000964u, 0x00000963u, 0x0004007cu, 0x00000012u, 0x00000965u, 0x00000964u, 0x000500c7u, 0x00000006u, 0x00000967u, 0x00000959u, 0x00000657u, 0x00040071u, 0x00000011u, 0x00000968u, 0x00000967u, 0x0004007cu, 0x00000012u, 0x00000969u, 0x00000968u, 0x00070050u, 0x00000013u, 0x0000096au, 0x0000095du, 0x00000961u, 0x00000965u, 0x00000969u, 0x000200feu, 0x0000096au, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000104u, 0x00000000u, 0x000000feu, 0x00030037u, 0x00000064u, 0x000000ffu, 0x00030037u, 0x00000040u, 0x00000100u, 0x00030037u, 0x00000040u, 0x00000101u, 0x00030037u, 0x00000040u, 0x00000102u, 0x00030037u, 0x00000040u, 0x00000103u, 0x000200f8u, 0x00000105u, 0x0004003bu, 0x00000064u, 0x00000981u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000096du, 0x00000100u, 0x0008000cu, 0x00000008u, 0x0000096eu, 0x00000001u, 0x0000002du, 0x0000096du, 0x0000046au, 0x00000424u, 0x0003003eu, 0x00000100u, 0x0000096eu, 0x0004003du, 0x00000008u, 0x0000096fu, 0x00000103u, 0x000500b1u, 0x00000063u, 0x00000970u, 0x0000096fu, 0x000001e2u, 0x000300f7u, 0x00000972u, 0x00000000u, 0x000400fau, 0x00000970u, 0x00000971u, 0x00000976u, 0x000200f8u, 0x00000971u, 0x0004003du, 0x00000008u, 0x00000973u, 0x00000103u, 0x0004003du, 0x00000008u, 0x00000974u, 0x00000100u, 0x000500c3u, 0x00000008u, 0x00000975u, 0x00000974u, 0x00000973u, 0x0003003eu, 0x00000100u, 0x00000975u, 0x000200f9u, 0x00000972u, 0x000200f8u, 0x00000976u, 0x0004003du, 0x00000008u, 0x00000978u, 0x00000103u, 0x00050082u, 0x00000008u, 0x00000979u, 0x00000977u, 0x00000978u, 0x0004003du, 0x00000008u, 0x0000097au, 0x00000100u, 0x000500c4u, 0x00000008u, 0x0000097bu, 0x0000097au, 0x00000979u, 0x0003003eu, 0x00000100u, 0x0000097bu, 0x0004003du, 0x00000008u, 0x0000097cu, 0x00000100u, 0x000500c3u, 0x00000008u, 0x0000097du, 0x0000097cu, 0x00000509u, 0x0003003eu, 0x00000100u, 0x0000097du, 0x000200f9u, 0x00000972u, 0x000200f8u, 0x00000972u, 0x0004003du, 0x00000063u, 0x0000097eu, 0x000000ffu, 0x000300f7u, 0x00000980u, 0x00000000u, 0x000400fau, 0x0000097eu, 0x0000097fu, 0x00000997u, 0x000200f8u, 0x0000097fu, 0x0004003du, 0x00000008u, 0x00000982u, 0x00000100u, 0x000500c3u, 0x00000008u, 0x00000983u, 0x00000982u, 0x000001acu, 0x0004003du, 0x00000008u, 0x00000984u, 0x00000102u, 0x000500afu, 0x00000063u, 0x00000985u, 0x00000983u, 0x00000984u, 0x0003003eu, 0x00000981u, 0x00000985u, 0x000300f7u, 0x00000988u, 0x00000000u, 0x000400fau, 0x00000985u, 0x00000987u, 0x00000991u, 0x000200f8u, 0x00000987u, 0x0004003du, 0x00000008u, 0x00000989u, 0x00000102u, 0x000500c3u, 0x00000008u, 0x0000098au, 0x00000989u, 0x000001a9u, 0x0004003du, 0x00000008u, 0x0000098bu, 0x00000101u, 0x000500c3u, 0x00000008u, 0x0000098cu, 0x0000098bu, 0x000001a9u, 0x00050082u, 0x00000008u, 0x0000098du, 0x0000098au, 0x0000098cu, 0x000500c7u, 0x00000008u, 0x0000098fu, 0x0000098du, 0x0000098eu, 0x000500c4u, 0x00000008u, 0x00000990u, 0x0000098fu, 0x000001b2u, 0x0003003eu, 0x00000100u, 0x00000990u, 0x000200f9u, 0x00000988u, 0x000200f8u, 0x00000991u, 0x0004003du, 0x00000008u, 0x00000992u, 0x00000100u, 0x0004003du, 0x00000008u, 0x00000993u, 0x00000101u, 0x000500c4u, 0x00000008u, 0x00000994u, 0x00000993u, 0x000001acu, 0x00050082u, 0x00000008u, 0x00000995u, 0x00000992u, 0x00000994u, 0x0007000cu, 0x00000008u, 0x00000996u, 0x00000001u, 0x0000002au, 0x00000995u, 0x0000019cu, 0x0003003eu, 0x00000100u, 0x00000996u, 0x000200f9u, 0x00000988u, 0x000200f8u, 0x00000988u, 0x000200f9u, 0x00000980u, 0x000200f8u, 0x00000997u, 0x0004003du, 0x00000008u, 0x00000998u, 0x00000101u, 0x000500c4u, 0x00000008u, 0x00000999u, 0x00000998u, 0x000001acu, 0x0004003du, 0x00000008u, 0x0000099au, 0x00000100u, 0x00050082u, 0x00000008u, 0x0000099bu, 0x0000099au, 0x00000999u, 0x0003003eu, 0x00000100u, 0x0000099bu, 0x000200f9u, 0x00000980u, 0x000200f8u, 0x00000980u, 0x0004003du, 0x00000008u, 0x0000099cu, 0x00000100u, 0x000200feu, 0x0000099cu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000010au, 0x00000000u, 0x00000106u, 0x00030037u, 0x00000040u, 0x00000107u, 0x00030037u, 0x00000040u, 0x00000108u, 0x00030037u, 0x00000040u, 0x00000109u, 0x000200f8u, 0x0000010bu, 0x0004003du, 0x00000008u, 0x0000099fu, 0x00000107u, 0x0008000cu, 0x00000008u, 0x000009a0u, 0x00000001u, 0x0000002du, 0x0000099fu, 0x0000046au, 0x00000424u, 0x0003003eu, 0x00000107u, 0x000009a0u, 0x0004003du, 0x00000008u, 0x000009a1u, 0x00000109u, 0x000500b1u, 0x00000063u, 0x000009a2u, 0x000009a1u, 0x000001e2u, 0x000300f7u, 0x000009a4u, 0x00000000u, 0x000400fau, 0x000009a2u, 0x000009a3u, 0x000009a8u, 0x000200f8u, 0x000009a3u, 0x0004003du, 0x00000008u, 0x000009a5u, 0x00000109u, 0x0004003du, 0x00000008u, 0x000009a6u, 0x00000107u, 0x000500c3u, 0x00000008u, 0x000009a7u, 0x000009a6u, 0x000009a5u, 0x0003003eu, 0x00000107u, 0x000009a7u, 0x000200f9u, 0x000009a4u, 0x000200f8u, 0x000009a8u, 0x0004003du, 0x00000008u, 0x000009a9u, 0x00000109u, 0x00050082u, 0x00000008u, 0x000009aau, 0x00000977u, 0x000009a9u, 0x0004003du, 0x00000008u, 0x000009abu, 0x00000107u, 0x000500c4u, 0x00000008u, 0x000009acu, 0x000009abu, 0x000009aau, 0x0003003eu, 0x00000107u, 0x000009acu, 0x0004003du, 0x00000008u, 0x000009adu, 0x00000107u, 0x000500c3u, 0x00000008u, 0x000009aeu, 0x000009adu, 0x00000509u, 0x0003003eu, 0x00000107u, 0x000009aeu, 0x000200f9u, 0x000009a4u, 0x000200f8u, 0x000009a4u, 0x0004003du, 0x00000008u, 0x000009afu, 0x00000108u, 0x000500c4u, 0x00000008u, 0x000009b0u, 0x000009afu, 0x000001acu, 0x0004003du, 0x00000008u, 0x000009b1u, 0x00000107u, 0x00050082u, 0x00000008u, 0x000009b2u, 0x000009b1u, 0x000009b0u, 0x0003003eu, 0x00000107u, 0x000009b2u, 0x0004003du, 0x00000008u, 0x000009b3u, 0x00000107u, 0x000200feu, 0x000009b3u, 0x00010038u, 0x00050036u, 0x00000008u, 0x00000113u, 0x00000000u, 0x0000010cu, 0x00030037u, 0x00000095u, 0x0000010du, 0x00030037u, 0x00000007u, 0x0000010eu, 0x00030037u, 0x00000073u, 0x0000010fu, 0x00030037u, 0x00000040u, 0x00000110u, 0x00030037u, 0x00000064u, 0x00000111u, 0x00030037u, 0x00000064u, 0x00000112u, 0x000200f8u, 0x00000114u, 0x0004003bu, 0x00000064u, 0x000009b6u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000009b9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000009c6u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000009ccu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000009d2u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000009e1u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x000009e2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000009e4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000009e8u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x000009e9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000009ebu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000009efu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x000009f8u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000a0cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a15u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a1eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a67u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a72u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000a73u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a75u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a79u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000a7au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000a7cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000a98u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000009b7u, 0x00000110u, 0x000500b1u, 0x00000063u, 0x000009b8u, 0x000009b7u, 0x000001a9u, 0x0003003eu, 0x000009b6u, 0x000009b8u, 0x000300f7u, 0x000009bcu, 0x00000000u, 0x000400fau, 0x000009b8u, 0x000009bbu, 0x000009bcu, 0x000200f8u, 0x000009bbu, 0x00050041u, 0x00000174u, 0x000009bdu, 0x0000010du, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x000009beu, 0x000009bdu, 0x00040071u, 0x00000006u, 0x000009bfu, 0x000009beu, 0x0004007cu, 0x00000008u, 0x000009c0u, 0x000009bfu, 0x000500abu, 0x00000063u, 0x000009c1u, 0x000009c0u, 0x000001a9u, 0x000200f9u, 0x000009bcu, 0x000200f8u, 0x000009bcu, 0x000700f5u, 0x00000063u, 0x000009c2u, 0x000009b8u, 0x00000114u, 0x000009c1u, 0x000009bbu, 0x0004003du, 0x00000063u, 0x000009c3u, 0x00000111u, 0x000400a8u, 0x00000063u, 0x000009c4u, 0x000009c3u, 0x000500a7u, 0x00000063u, 0x000009c5u, 0x000009c2u, 0x000009c4u, 0x0003003eu, 0x000009b9u, 0x000009c5u, 0x00050041u, 0x00000174u, 0x000009c7u, 0x0000010du, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x000009c8u, 0x000009c7u, 0x00040071u, 0x00000006u, 0x000009c9u, 0x000009c8u, 0x0004007cu, 0x00000008u, 0x000009cau, 0x000009c9u, 0x0007000cu, 0x00000008u, 0x000009cbu, 0x00000001u, 0x00000027u, 0x000009cau, 0x000001a9u, 0x0003003eu, 0x000009c6u, 0x000009cbu, 0x0004003du, 0x0000000fu, 0x000009ceu, 0x000009c7u, 0x00040071u, 0x00000006u, 0x000009cfu, 0x000009ceu, 0x0004007cu, 0x00000008u, 0x000009d0u, 0x000009cfu, 0x000500aau, 0x00000063u, 0x000009d1u, 0x000009d0u, 0x000001acu, 0x0003003eu, 0x000009ccu, 0x000009d1u, 0x0004003du, 0x00000063u, 0x000009d4u, 0x00000111u, 0x000500a6u, 0x00000063u, 0x000009d5u, 0x000009d1u, 0x000009d4u, 0x000600a9u, 0x00000008u, 0x000009d7u, 0x000009d5u, 0x0000098eu, 0x000009d6u, 0x0003003eu, 0x000009d2u, 0x000009d7u, 0x000300f7u, 0x000009dau, 0x00000000u, 0x000400fau, 0x000009c5u, 0x000009d9u, 0x00000a6cu, 0x000200f8u, 0x000009d9u, 0x0004003du, 0x00000008u, 0x000009dbu, 0x00000110u, 0x00050084u, 0x00000008u, 0x000009dcu, 0x000001a9u, 0x000009dbu, 0x00050041u, 0x00000040u, 0x000009ddu, 0x0000010fu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000009deu, 0x000009ddu, 0x00050080u, 0x00000008u, 0x000009dfu, 0x000009deu, 0x000009dcu, 0x0003003eu, 0x000009ddu, 0x000009dfu, 0x0004003du, 0x00000029u, 0x000009e3u, 0x0000010du, 0x0003003eu, 0x000009e2u, 0x000009e3u, 0x0004003du, 0x00000008u, 0x000009e6u, 0x000009ddu, 0x0003003eu, 0x000009e4u, 0x000009e6u, 0x00060039u, 0x00000058u, 0x000009e7u, 0x0000009eu, 0x000009e2u, 0x000009e4u, 0x0003003eu, 0x000009e1u, 0x000009e7u, 0x0004003du, 0x00000029u, 0x000009eau, 0x0000010du, 0x0003003eu, 0x000009e9u, 0x000009eau, 0x00050041u, 0x00000040u, 0x000009ecu, 0x0000010fu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000009edu, 0x000009ecu, 0x0003003eu, 0x000009ebu, 0x000009edu, 0x00060039u, 0x00000008u, 0x000009eeu, 0x000000a2u, 0x000009e9u, 0x000009ebu, 0x0003003eu, 0x000009e8u, 0x000009eeu, 0x00050041u, 0x00000007u, 0x000009f0u, 0x0000010du, 0x000001afu, 0x0004003du, 0x00000006u, 0x000009f1u, 0x000009f0u, 0x00050041u, 0x00000007u, 0x000009f2u, 0x0000010du, 0x000001b2u, 0x0004003du, 0x00000006u, 0x000009f3u, 0x000009f2u, 0x0004007cu, 0x00000006u, 0x000009f5u, 0x000009eeu, 0x00050084u, 0x00000006u, 0x000009f6u, 0x000009f3u, 0x000009f5u, 0x00050080u, 0x00000006u, 0x000009f7u, 0x000009f1u, 0x000009f6u, 0x0003003eu, 0x000009efu, 0x000009f7u, 0x00050084u, 0x00000006u, 0x000009fau, 0x000009f7u, 0x000002f8u, 0x00050050u, 0x00000058u, 0x000009fdu, 0x000009cbu, 0x000009cbu, 0x000500c4u, 0x00000058u, 0x000009feu, 0x000009e7u, 0x000009fdu, 0x0004007cu, 0x000000abu, 0x000009ffu, 0x000009feu, 0x00050050u, 0x000000abu, 0x00000a00u, 0x000009fau, 0x000009fau, 0x00050080u, 0x000000abu, 0x00000a01u, 0x00000a00u, 0x000009ffu, 0x000500c7u, 0x000000abu, 0x00000a04u, 0x00000a01u, 0x0000b61du, 0x0003003eu, 0x000009f8u, 0x00000a04u, 0x000500c7u, 0x00000006u, 0x00000a07u, 0x000009f5u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00000a08u, 0x00000a07u, 0x00000275u, 0x0004003du, 0x000000abu, 0x00000a09u, 0x000009f8u, 0x00050050u, 0x000000abu, 0x00000a0au, 0x00000a08u, 0x00000a08u, 0x000500c6u, 0x000000abu, 0x00000a0bu, 0x00000a09u, 0x00000a0au, 0x0003003eu, 0x000009f8u, 0x00000a0bu, 0x0004003du, 0x000000abu, 0x00000a0du, 0x000009f8u, 0x000500c2u, 0x000000abu, 0x00000a0fu, 0x00000a0du, 0x0000b61eu, 0x0003003eu, 0x00000a0cu, 0x00000a0fu, 0x0004007cu, 0x00000006u, 0x00000a11u, 0x000009d7u, 0x0004003du, 0x000000abu, 0x00000a12u, 0x00000a0cu, 0x00050050u, 0x000000abu, 0x00000a13u, 0x00000a11u, 0x00000a11u, 0x000500c7u, 0x000000abu, 0x00000a14u, 0x00000a12u, 0x00000a13u, 0x0003003eu, 0x00000a0cu, 0x00000a14u, 0x0004003du, 0x00000006u, 0x00000a16u, 0x0000010eu, 0x00050041u, 0x00000007u, 0x00000a17u, 0x00000a0cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000a18u, 0x00000a17u, 0x000500c6u, 0x00000006u, 0x00000a19u, 0x00000a18u, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00000a1au, 0x00000773u, 0x0000019cu, 0x00000a16u, 0x0000019cu, 0x00000a19u, 0x0004003du, 0x00000011u, 0x00000a1bu, 0x00000a1au, 0x00040071u, 0x00000006u, 0x00000a1cu, 0x00000a1bu, 0x0004007cu, 0x00000008u, 0x00000a1du, 0x00000a1cu, 0x0003003eu, 0x00000a15u, 0x00000a1du, 0x0004003du, 0x00000006u, 0x00000a1fu, 0x0000010eu, 0x00050041u, 0x00000007u, 0x00000a20u, 0x00000a0cu, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000a21u, 0x00000a20u, 0x000500c6u, 0x00000006u, 0x00000a22u, 0x00000a21u, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00000a23u, 0x00000773u, 0x0000019cu, 0x00000a1fu, 0x0000019cu, 0x00000a22u, 0x0004003du, 0x00000011u, 0x00000a24u, 0x00000a23u, 0x00040071u, 0x00000006u, 0x00000a25u, 0x00000a24u, 0x0004007cu, 0x00000008u, 0x00000a26u, 0x00000a25u, 0x0003003eu, 0x00000a1eu, 0x00000a26u, 0x0004003du, 0x0000000fu, 0x00000a28u, 0x000009c7u, 0x00040071u, 0x00000006u, 0x00000a29u, 0x00000a28u, 0x0004007cu, 0x00000008u, 0x00000a2au, 0x00000a29u, 0x000500aau, 0x00000063u, 0x00000a2bu, 0x00000a2au, 0x000001a6u, 0x000300f7u, 0x00000a2du, 0x00000000u, 0x000400fau, 0x00000a2bu, 0x00000a2cu, 0x00000a42u, 0x000200f8u, 0x00000a2cu, 0x00050041u, 0x00000007u, 0x00000a2eu, 0x000009f8u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000a2fu, 0x00000a2eu, 0x000500c7u, 0x00000006u, 0x00000a30u, 0x00000a2fu, 0x000002f8u, 0x0004007cu, 0x00000008u, 0x00000a31u, 0x00000a30u, 0x00050084u, 0x00000008u, 0x00000a32u, 0x000001afu, 0x00000a31u, 0x00050082u, 0x00000008u, 0x00000a33u, 0x000001d9u, 0x00000a32u, 0x000500c3u, 0x00000008u, 0x00000a35u, 0x00000a1du, 0x00000a33u, 0x0003003eu, 0x00000a15u, 0x00000a35u, 0x00050041u, 0x00000007u, 0x00000a36u, 0x000009f8u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000a37u, 0x00000a36u, 0x000500c7u, 0x00000006u, 0x00000a38u, 0x00000a37u, 0x000002f8u, 0x0004007cu, 0x00000008u, 0x00000a39u, 0x00000a38u, 0x00050084u, 0x00000008u, 0x00000a3au, 0x000001afu, 0x00000a39u, 0x00050082u, 0x00000008u, 0x00000a3bu, 0x000001d9u, 0x00000a3au, 0x000500c3u, 0x00000008u, 0x00000a3du, 0x00000a26u, 0x00000a3bu, 0x0003003eu, 0x00000a1eu, 0x00000a3du, 0x000500c7u, 0x00000008u, 0x00000a3fu, 0x00000a35u, 0x00000311u, 0x0003003eu, 0x00000a15u, 0x00000a3fu, 0x000500c7u, 0x00000008u, 0x00000a41u, 0x00000a3du, 0x00000311u, 0x0003003eu, 0x00000a1eu, 0x00000a41u, 0x000200f9u, 0x00000a2du, 0x000200f8u, 0x00000a42u, 0x0004003du, 0x0000000fu, 0x00000a44u, 0x000009c7u, 0x00040071u, 0x00000006u, 0x00000a45u, 0x00000a44u, 0x0004007cu, 0x00000008u, 0x00000a46u, 0x00000a45u, 0x000500aau, 0x00000063u, 0x00000a47u, 0x00000a46u, 0x0000019cu, 0x000300f7u, 0x00000a49u, 0x00000000u, 0x000400fau, 0x00000a47u, 0x00000a48u, 0x00000a62u, 0x000200f8u, 0x00000a48u, 0x00050041u, 0x00000007u, 0x00000a4au, 0x000009f8u, 0x0000028eu, 0x0004003du, 0x00000006u, 0x00000a4bu, 0x00000a4au, 0x000500c7u, 0x00000006u, 0x00000a4cu, 0x00000a4bu, 0x000002fbu, 0x0004007cu, 0x00000008u, 0x00000a4du, 0x00000a4cu, 0x00050084u, 0x00000008u, 0x00000a4eu, 0x000001afu, 0x00000a4du, 0x00050082u, 0x00000008u, 0x00000a4fu, 0x000001e6u, 0x00000a4eu, 0x000500c3u, 0x00000008u, 0x00000a51u, 0x00000a1du, 0x00000a4fu, 0x0003003eu, 0x00000a15u, 0x00000a51u, 0x00050041u, 0x00000007u, 0x00000a52u, 0x000009f8u, 0x000002f4u, 0x0004003du, 0x00000006u, 0x00000a53u, 0x00000a52u, 0x000500c7u, 0x00000006u, 0x00000a54u, 0x00000a53u, 0x000002fbu, 0x0004007cu, 0x00000008u, 0x00000a55u, 0x00000a54u, 0x00050084u, 0x00000008u, 0x00000a56u, 0x000001afu, 0x00000a55u, 0x00050082u, 0x00000008u, 0x00000a57u, 0x000001e6u, 0x00000a56u, 0x000500c3u, 0x00000008u, 0x00000a59u, 0x00000a26u, 0x00000a57u, 0x0003003eu, 0x00000a1eu, 0x00000a59u, 0x000500c7u, 0x00000008u, 0x00000a5cu, 0x00000a51u, 0x00000a5bu, 0x00050084u, 0x00000008u, 0x00000a5eu, 0x00000a5cu, 0x00000a5du, 0x0003003eu, 0x00000a15u, 0x00000a5eu, 0x000500c7u, 0x00000008u, 0x00000a60u, 0x00000a59u, 0x00000a5bu, 0x00050084u, 0x00000008u, 0x00000a61u, 0x00000a60u, 0x00000a5du, 0x0003003eu, 0x00000a1eu, 0x00000a61u, 0x000200f9u, 0x00000a49u, 0x000200f8u, 0x00000a62u, 0x000500c3u, 0x00000008u, 0x00000a64u, 0x00000a1du, 0x000001d9u, 0x0003003eu, 0x00000a15u, 0x00000a64u, 0x000500c3u, 0x00000008u, 0x00000a66u, 0x00000a26u, 0x000001d9u, 0x0003003eu, 0x00000a1eu, 0x00000a66u, 0x000200f9u, 0x00000a49u, 0x000200f8u, 0x00000a49u, 0x000700f5u, 0x00000008u, 0x0000b17du, 0x00000a61u, 0x00000a48u, 0x00000a66u, 0x00000a62u, 0x000700f5u, 0x00000008u, 0x0000b17bu, 0x00000a5eu, 0x00000a48u, 0x00000a64u, 0x00000a62u, 0x000200f9u, 0x00000a2du, 0x000200f8u, 0x00000a2du, 0x000700f5u, 0x00000008u, 0x0000b17cu, 0x00000a41u, 0x00000a2cu, 0x0000b17du, 0x00000a49u, 0x000700f5u, 0x00000008u, 0x0000b17au, 0x00000a3fu, 0x00000a2cu, 0x0000b17bu, 0x00000a49u, 0x000500c4u, 0x00000008u, 0x00000a69u, 0x0000b17au, 0x000001d9u, 0x000500c5u, 0x00000008u, 0x00000a6bu, 0x00000a69u, 0x0000b17cu, 0x0003003eu, 0x00000a67u, 0x00000a6bu, 0x000200f9u, 0x000009dau, 0x000200f8u, 0x00000a6cu, 0x0004003du, 0x00000008u, 0x00000a6du, 0x00000110u, 0x00050041u, 0x00000040u, 0x00000a6eu, 0x0000010fu, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000a6fu, 0x00000a6eu, 0x00050080u, 0x00000008u, 0x00000a70u, 0x00000a6fu, 0x00000a6du, 0x0003003eu, 0x00000a6eu, 0x00000a70u, 0x0004003du, 0x00000029u, 0x00000a74u, 0x0000010du, 0x0003003eu, 0x00000a73u, 0x00000a74u, 0x0004003du, 0x00000008u, 0x00000a77u, 0x00000a6eu, 0x0003003eu, 0x00000a75u, 0x00000a77u, 0x00060039u, 0x00000008u, 0x00000a78u, 0x00000099u, 0x00000a73u, 0x00000a75u, 0x0003003eu, 0x00000a72u, 0x00000a78u, 0x0004003du, 0x00000029u, 0x00000a7bu, 0x0000010du, 0x0003003eu, 0x00000a7au, 0x00000a7bu, 0x00050041u, 0x00000040u, 0x00000a7du, 0x0000010fu, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00000a7eu, 0x00000a7du, 0x0003003eu, 0x00000a7cu, 0x00000a7eu, 0x00060039u, 0x00000008u, 0x00000a7fu, 0x000000a2u, 0x00000a7au, 0x00000a7cu, 0x0003003eu, 0x00000a79u, 0x00000a7fu, 0x00050041u, 0x00000007u, 0x00000a81u, 0x0000010du, 0x000001afu, 0x0004003du, 0x00000006u, 0x00000a82u, 0x00000a81u, 0x00050041u, 0x00000007u, 0x00000a83u, 0x0000010du, 0x000001b2u, 0x0004003du, 0x00000006u, 0x00000a84u, 0x00000a83u, 0x0004007cu, 0x00000006u, 0x00000a86u, 0x00000a7fu, 0x00050084u, 0x00000006u, 0x00000a87u, 0x00000a84u, 0x00000a86u, 0x00050080u, 0x00000006u, 0x00000a88u, 0x00000a82u, 0x00000a87u, 0x0003003eu, 0x00000a80u, 0x00000a88u, 0x00050084u, 0x00000006u, 0x00000a8bu, 0x00000a88u, 0x000002f8u, 0x000500c4u, 0x00000008u, 0x00000a8eu, 0x00000a78u, 0x000009cbu, 0x0004007cu, 0x00000006u, 0x00000a8fu, 0x00000a8eu, 0x00050080u, 0x00000006u, 0x00000a90u, 0x00000a8bu, 0x00000a8fu, 0x000500c7u, 0x00000006u, 0x00000a91u, 0x00000a90u, 0x00000a02u, 0x0003003eu, 0x00000a89u, 0x00000a91u, 0x000500c7u, 0x00000006u, 0x00000a94u, 0x00000a86u, 0x000002f4u, 0x00050084u, 0x00000006u, 0x00000a95u, 0x00000a94u, 0x00000275u, 0x000500c6u, 0x00000006u, 0x00000a97u, 0x00000a91u, 0x00000a95u, 0x0003003eu, 0x00000a89u, 0x00000a97u, 0x000500c2u, 0x00000006u, 0x00000a9au, 0x00000a97u, 0x000002f8u, 0x0003003eu, 0x00000a98u, 0x00000a9au, 0x0004007cu, 0x00000006u, 0x00000a9cu, 0x000009d7u, 0x000500c7u, 0x00000006u, 0x00000a9eu, 0x00000a9au, 0x00000a9cu, 0x0003003eu, 0x00000a98u, 0x00000a9eu, 0x0004003du, 0x00000006u, 0x00000a9fu, 0x0000010eu, 0x000500c6u, 0x00000006u, 0x00000aa1u, 0x00000a9eu, 0x000002f4u, 0x00080041u, 0x00000778u, 0x00000aa2u, 0x00000773u, 0x0000019cu, 0x00000a9fu, 0x0000019cu, 0x00000aa1u, 0x0004003du, 0x00000011u, 0x00000aa3u, 0x00000aa2u, 0x00040071u, 0x00000006u, 0x00000aa4u, 0x00000aa3u, 0x0004007cu, 0x00000008u, 0x00000aa5u, 0x00000aa4u, 0x0003003eu, 0x00000a67u, 0x00000aa5u, 0x0004003du, 0x00000063u, 0x00000aa6u, 0x00000111u, 0x000300f7u, 0x00000aa8u, 0x00000000u, 0x000400fau, 0x00000aa6u, 0x00000aa7u, 0x00000aa8u, 0x000200f8u, 0x00000aa7u, 0x0004003du, 0x0000000fu, 0x00000aaau, 0x000009c7u, 0x00040071u, 0x00000006u, 0x00000aabu, 0x00000aaau, 0x0004007cu, 0x00000008u, 0x00000aacu, 0x00000aabu, 0x000500aau, 0x00000063u, 0x00000aadu, 0x00000aacu, 0x0000019cu, 0x000300f7u, 0x00000aafu, 0x00000000u, 0x000400fau, 0x00000aadu, 0x00000aaeu, 0x00000ac5u, 0x000200f8u, 0x00000aaeu, 0x000500c7u, 0x00000006u, 0x00000ab2u, 0x00000a97u, 0x000002fbu, 0x00050084u, 0x00000006u, 0x00000ab3u, 0x00000692u, 0x00000ab2u, 0x00050082u, 0x00000006u, 0x00000ab4u, 0x00000ab0u, 0x00000ab3u, 0x000500c3u, 0x00000008u, 0x00000ab6u, 0x00000aa5u, 0x00000ab4u, 0x0003003eu, 0x00000a67u, 0x00000ab6u, 0x000500c7u, 0x00000008u, 0x00000ab8u, 0x00000ab6u, 0x00000a5bu, 0x0003003eu, 0x00000a67u, 0x00000ab8u, 0x00050041u, 0x00000174u, 0x00000ab9u, 0x0000010du, 0x000001d9u, 0x0004003du, 0x0000000fu, 0x00000abau, 0x00000ab9u, 0x000500c4u, 0x0000000fu, 0x00000abbu, 0x00000abau, 0x000001afu, 0x00040071u, 0x00000006u, 0x00000abcu, 0x00000abbu, 0x0004007cu, 0x00000008u, 0x00000abdu, 0x00000abcu, 0x000500c5u, 0x00000008u, 0x00000abfu, 0x00000ab8u, 0x00000abdu, 0x0003003eu, 0x00000a67u, 0x00000abfu, 0x000500c4u, 0x00000008u, 0x00000ac1u, 0x00000abfu, 0x000001a9u, 0x0003003eu, 0x00000a67u, 0x00000ac1u, 0x0004003du, 0x00000008u, 0x00000ac2u, 0x00000110u, 0x00050080u, 0x00000008u, 0x00000ac4u, 0x00000ac1u, 0x00000ac2u, 0x0003003eu, 0x00000a67u, 0x00000ac4u, 0x000200f9u, 0x00000aafu, 0x000200f8u, 0x00000ac5u, 0x000500c7u, 0x00000006u, 0x00000ac7u, 0x00000a97u, 0x000002f8u, 0x00050084u, 0x00000006u, 0x00000ac8u, 0x00000692u, 0x00000ac7u, 0x00050082u, 0x00000006u, 0x00000ac9u, 0x00000275u, 0x00000ac8u, 0x000500c3u, 0x00000008u, 0x00000acbu, 0x00000aa5u, 0x00000ac9u, 0x0003003eu, 0x00000a67u, 0x00000acbu, 0x000500c7u, 0x00000008u, 0x00000acdu, 0x00000acbu, 0x00000311u, 0x0003003eu, 0x00000a67u, 0x00000acdu, 0x000500c4u, 0x00000008u, 0x00000acfu, 0x00000acdu, 0x000001a9u, 0x0003003eu, 0x00000a67u, 0x00000acfu, 0x0004003du, 0x00000008u, 0x00000ad0u, 0x00000110u, 0x00050080u, 0x00000008u, 0x00000ad2u, 0x00000acfu, 0x00000ad0u, 0x0003003eu, 0x00000a67u, 0x00000ad2u, 0x000200f9u, 0x00000aafu, 0x000200f8u, 0x00000aafu, 0x000700f5u, 0x00000008u, 0x0000b179u, 0x00000ac4u, 0x00000aaeu, 0x00000ad2u, 0x00000ac5u, 0x0004003du, 0x00000006u, 0x00000ad3u, 0x0000010eu, 0x000500c5u, 0x00000008u, 0x00000ad6u, 0x0000b179u, 0x00000ad5u, 0x000500c6u, 0x00000008u, 0x00000ad7u, 0x00000ad6u, 0x000001a6u, 0x00080041u, 0x00000778u, 0x00000ad8u, 0x00000773u, 0x0000019cu, 0x00000ad3u, 0x0000019cu, 0x00000ad7u, 0x0004003du, 0x00000011u, 0x00000ad9u, 0x00000ad8u, 0x00040071u, 0x00000006u, 0x00000adau, 0x00000ad9u, 0x0004007cu, 0x00000008u, 0x00000adbu, 0x00000adau, 0x0003003eu, 0x00000a67u, 0x00000adbu, 0x000200f9u, 0x00000aa8u, 0x000200f8u, 0x00000aa8u, 0x000700f5u, 0x00000008u, 0x0000b17fu, 0x00000aa5u, 0x00000a6cu, 0x00000adbu, 0x00000aafu, 0x000200f9u, 0x000009dau, 0x000200f8u, 0x000009dau, 0x000700f5u, 0x00000008u, 0x0000b17eu, 0x00000a6bu, 0x00000a2du, 0x0000b17fu, 0x00000aa8u, 0x000200feu, 0x0000b17eu, 0x00010038u, 0x00050036u, 0x00000008u, 0x0000011bu, 0x00000000u, 0x0000010cu, 0x00030037u, 0x00000095u, 0x00000115u, 0x00030037u, 0x00000007u, 0x00000116u, 0x00030037u, 0x00000073u, 0x00000117u, 0x00030037u, 0x00000040u, 0x00000118u, 0x00030037u, 0x00000064u, 0x00000119u, 0x00030037u, 0x00000064u, 0x0000011au, 0x000200f8u, 0x0000011cu, 0x0004003bu, 0x00000040u, 0x00000ae6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000ae9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000aeau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000af4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000af7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000af8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b03u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000b0cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b0eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000b10u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b12u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000b13u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000b15u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000b21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000b23u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000b25u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b27u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000b29u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000b2bu, 0x00000007u, 0x00050041u, 0x00000007u, 0x00000adfu, 0x00000115u, 0x0000019cu, 0x0004003du, 0x00000006u, 0x00000ae0u, 0x00000adfu, 0x0004007cu, 0x00000008u, 0x00000ae1u, 0x00000ae0u, 0x00050041u, 0x00000174u, 0x00000ae2u, 0x00000115u, 0x000001dfu, 0x0004003du, 0x0000000fu, 0x00000ae3u, 0x00000ae2u, 0x00040071u, 0x00000006u, 0x00000ae4u, 0x00000ae3u, 0x0004007cu, 0x00000008u, 0x00000ae5u, 0x00000ae4u, 0x00050041u, 0x00000040u, 0x00000ae7u, 0x00000117u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000ae8u, 0x00000ae7u, 0x0003003eu, 0x00000ae6u, 0x00000ae8u, 0x0003003eu, 0x00000ae9u, 0x00000ae1u, 0x0003003eu, 0x00000aeau, 0x00000ae5u, 0x00070039u, 0x00000008u, 0x00000aebu, 0x0000010au, 0x00000ae6u, 0x00000ae9u, 0x00000aeau, 0x0003003eu, 0x00000ae7u, 0x00000aebu, 0x00050041u, 0x00000007u, 0x00000aedu, 0x00000115u, 0x000001a9u, 0x0004003du, 0x00000006u, 0x00000aeeu, 0x00000aedu, 0x0004007cu, 0x00000008u, 0x00000aefu, 0x00000aeeu, 0x00050041u, 0x00000174u, 0x00000af0u, 0x00000115u, 0x000001e6u, 0x0004003du, 0x0000000fu, 0x00000af1u, 0x00000af0u, 0x00040071u, 0x00000006u, 0x00000af2u, 0x00000af1u, 0x0004007cu, 0x00000008u, 0x00000af3u, 0x00000af2u, 0x00050041u, 0x00000040u, 0x00000af5u, 0x00000117u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00000af6u, 0x00000af5u, 0x0003003eu, 0x00000af4u, 0x00000af6u, 0x0003003eu, 0x00000af7u, 0x00000aefu, 0x0003003eu, 0x00000af8u, 0x00000af3u, 0x00070039u, 0x00000008u, 0x00000af9u, 0x0000010au, 0x00000af4u, 0x00000af7u, 0x00000af8u, 0x0003003eu, 0x00000af5u, 0x00000af9u, 0x0004003du, 0x00000058u, 0x00000afbu, 0x00000117u, 0x000500c3u, 0x00000058u, 0x00000afdu, 0x00000afbu, 0x0000b61bu, 0x0003003eu, 0x00000117u, 0x00000afdu, 0x00060041u, 0x000004e9u, 0x00000afeu, 0x000004e8u, 0x0000019cu, 0x000001a9u, 0x0004003du, 0x00000008u, 0x00000affu, 0x00000afeu, 0x000500aau, 0x00000063u, 0x00000b00u, 0x00000affu, 0x0000019cu, 0x000300f7u, 0x00000b02u, 0x00000000u, 0x000400fau, 0x00000b00u, 0x00000b01u, 0x00000b04u, 0x000200f8u, 0x00000b01u, 0x0003003eu, 0x00000b03u, 0x0000019cu, 0x000200f9u, 0x00000b02u, 0x000200f8u, 0x00000b04u, 0x000500aau, 0x00000063u, 0x00000b07u, 0x00000affu, 0x000001a6u, 0x000300f7u, 0x00000b09u, 0x00000000u, 0x000400fau, 0x00000b07u, 0x00000b08u, 0x00000b20u, 0x000200f8u, 0x00000b08u, 0x0004003du, 0x00000008u, 0x00000b0au, 0x00000118u, 0x000500c3u, 0x00000008u, 0x00000b0bu, 0x00000b0au, 0x000001a6u, 0x0004003du, 0x00000029u, 0x00000b0du, 0x00000115u, 0x0003003eu, 0x00000b0cu, 0x00000b0du, 0x0004003du, 0x00000006u, 0x00000b0fu, 0x00000116u, 0x0003003eu, 0x00000b0eu, 0x00000b0fu, 0x0004003du, 0x00000058u, 0x00000b11u, 0x00000117u, 0x0003003eu, 0x00000b10u, 0x00000b11u, 0x0003003eu, 0x00000b12u, 0x00000b0bu, 0x0004003du, 0x00000063u, 0x00000b14u, 0x00000119u, 0x0003003eu, 0x00000b13u, 0x00000b14u, 0x0004003du, 0x00000063u, 0x00000b16u, 0x0000011au, 0x0003003eu, 0x00000b15u, 0x00000b16u, 0x000a0039u, 0x00000008u, 0x00000b17u, 0x00000113u, 0x00000b0cu, 0x00000b0eu, 0x00000b10u, 0x00000b12u, 0x00000b13u, 0x00000b15u, 0x0003003eu, 0x00000b03u, 0x00000b17u, 0x0004003du, 0x00000008u, 0x00000b18u, 0x00000118u, 0x000500c7u, 0x00000008u, 0x00000b19u, 0x00000b18u, 0x000001a6u, 0x00050084u, 0x00000008u, 0x00000b1au, 0x000001d9u, 0x00000b19u, 0x00050082u, 0x00000008u, 0x00000b1bu, 0x000001d9u, 0x00000b1au, 0x000500c3u, 0x00000008u, 0x00000b1du, 0x00000b17u, 0x00000b1bu, 0x0003003eu, 0x00000b03u, 0x00000b1du, 0x000500c7u, 0x00000008u, 0x00000b1fu, 0x00000b1du, 0x00000311u, 0x0003003eu, 0x00000b03u, 0x00000b1fu, 0x000200f9u, 0x00000b09u, 0x000200f8u, 0x00000b20u, 0x0004003du, 0x00000029u, 0x00000b22u, 0x00000115u, 0x0003003eu, 0x00000b21u, 0x00000b22u, 0x0004003du, 0x00000006u, 0x00000b24u, 0x00000116u, 0x0003003eu, 0x00000b23u, 0x00000b24u, 0x0004003du, 0x00000058u, 0x00000b26u, 0x00000117u, 0x0003003eu, 0x00000b25u, 0x00000b26u, 0x0004003du, 0x00000008u, 0x00000b28u, 0x00000118u, 0x0003003eu, 0x00000b27u, 0x00000b28u, 0x0004003du, 0x00000063u, 0x00000b2au, 0x00000119u, 0x0003003eu, 0x00000b29u, 0x00000b2au, 0x0004003du, 0x00000063u, 0x00000b2cu, 0x0000011au, 0x0003003eu, 0x00000b2bu, 0x00000b2cu, 0x000a0039u, 0x00000008u, 0x00000b2du, 0x00000113u, 0x00000b21u, 0x00000b23u, 0x00000b25u, 0x00000b27u, 0x00000b29u, 0x00000b2bu, 0x0003003eu, 0x00000b03u, 0x00000b2du, 0x000200f9u, 0x00000b09u, 0x000200f8u, 0x00000b09u, 0x000700f5u, 0x00000008u, 0x0000b181u, 0x00000b1fu, 0x00000b08u, 0x00000b2du, 0x00000b20u, 0x000200f9u, 0x00000b02u, 0x000200f8u, 0x00000b02u, 0x000700f5u, 0x00000008u, 0x0000b180u, 0x0000019cu, 0x00000b01u, 0x0000b181u, 0x00000b09u, 0x000200feu, 0x0000b180u, 0x00010038u, 0x00050036u, 0x0000011du, 0x00000125u, 0x00000000u, 0x0000011fu, 0x00030037u, 0x0000011eu, 0x00000120u, 0x00030037u, 0x0000011eu, 0x00000121u, 0x00030037u, 0x0000011eu, 0x00000122u, 0x00030037u, 0x0000011eu, 0x00000123u, 0x00030037u, 0x00000073u, 0x00000124u, 0x000200f8u, 0x00000126u, 0x0004003bu, 0x00000040u, 0x00000b31u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00000b37u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00000b3eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000b41u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00000b4cu, 0x00000007u, 0x00050041u, 0x00000040u, 0x00000b32u, 0x00000124u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000b33u, 0x00000b32u, 0x00050041u, 0x00000040u, 0x00000b34u, 0x00000124u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00000b35u, 0x00000b34u, 0x00050080u, 0x00000008u, 0x00000b36u, 0x00000b33u, 0x00000b35u, 0x0003003eu, 0x00000b31u, 0x00000b36u, 0x000500afu, 0x00000063u, 0x00000b39u, 0x00000b36u, 0x00000977u, 0x0004003du, 0x0000011du, 0x00000b3au, 0x00000123u, 0x0004003du, 0x0000011du, 0x00000b3bu, 0x00000120u, 0x00050050u, 0x00000451u, 0x00000b3cu, 0x00000b39u, 0x00000b39u, 0x000600a9u, 0x0000011du, 0x00000b3du, 0x00000b3cu, 0x00000b3au, 0x00000b3bu, 0x0003003eu, 0x00000b37u, 0x00000b3du, 0x000300f7u, 0x00000b43u, 0x00000000u, 0x000400fau, 0x00000b39u, 0x00000b42u, 0x00000b48u, 0x000200f8u, 0x00000b42u, 0x0004003du, 0x00000058u, 0x00000b44u, 0x00000124u, 0x0007004fu, 0x00000058u, 0x00000b45u, 0x00000b44u, 0x00000b44u, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x00000b47u, 0x0000b624u, 0x00000b45u, 0x0003003eu, 0x00000b41u, 0x00000b47u, 0x000200f9u, 0x00000b43u, 0x000200f8u, 0x00000b48u, 0x0004003du, 0x00000058u, 0x00000b49u, 0x00000124u, 0x0003003eu, 0x00000b41u, 0x00000b49u, 0x000200f9u, 0x00000b43u, 0x000200f8u, 0x00000b43u, 0x000700f5u, 0x00000058u, 0x0000b182u, 0x00000b47u, 0x00000b42u, 0x00000b49u, 0x00000b48u, 0x00040072u, 0x0000011du, 0x00000b4bu, 0x0000b182u, 0x0003003eu, 0x00000b3eu, 0x00000b4bu, 0x0004003du, 0x0000011du, 0x00000b4du, 0x00000121u, 0x00050082u, 0x0000011du, 0x00000b4fu, 0x00000b4du, 0x00000b3du, 0x00050041u, 0x00000133u, 0x00000b50u, 0x00000b3eu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00000b51u, 0x00000b50u, 0x00050050u, 0x0000011du, 0x00000b52u, 0x00000b51u, 0x00000b51u, 0x00050084u, 0x0000011du, 0x00000b53u, 0x00000b4fu, 0x00000b52u, 0x0003003eu, 0x00000b4cu, 0x00000b53u, 0x0004003du, 0x0000011du, 0x00000b54u, 0x00000122u, 0x00050082u, 0x0000011du, 0x00000b56u, 0x00000b54u, 0x00000b3du, 0x00050041u, 0x00000133u, 0x00000b57u, 0x00000b3eu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00000b58u, 0x00000b57u, 0x00050050u, 0x0000011du, 0x00000b59u, 0x00000b58u, 0x00000b58u, 0x00050084u, 0x0000011du, 0x00000b5au, 0x00000b56u, 0x00000b59u, 0x00050080u, 0x0000011du, 0x00000b5cu, 0x00000b53u, 0x00000b5au, 0x0003003eu, 0x00000b4cu, 0x00000b5cu, 0x00050080u, 0x0000011du, 0x00000b60u, 0x00000b5cu, 0x0000b625u, 0x0003003eu, 0x00000b4cu, 0x00000b60u, 0x000500c3u, 0x0000011du, 0x00000b64u, 0x00000b60u, 0x0000b626u, 0x0003003eu, 0x00000b4cu, 0x00000b64u, 0x00050080u, 0x0000011du, 0x00000b67u, 0x00000b64u, 0x00000b3du, 0x0003003eu, 0x00000b4cu, 0x00000b67u, 0x000200feu, 0x00000b67u, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000131u, 0x00000000u, 0x00000127u, 0x00030037u, 0x00000095u, 0x00000128u, 0x00030037u, 0x00000007u, 0x00000129u, 0x00030037u, 0x00000073u, 0x0000012au, 0x00030037u, 0x00000064u, 0x0000012bu, 0x00030037u, 0x00000064u, 0x0000012cu, 0x00030037u, 0x00000064u, 0x0000012du, 0x00030037u, 0x00000064u, 0x0000012eu, 0x00030037u, 0x00000064u, 0x0000012fu, 0x00030037u, 0x0000004cu, 0x00000130u, 0x000200f8u, 0x00000132u, 0x0004003bu, 0x00000064u, 0x00000b7bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b7cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b7fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b80u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b81u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000b94u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b95u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b98u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b99u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000b9au, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000ba0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000ba6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bafu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000bb0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bb2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bb6u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000bb7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bb9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bbdu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000bc1u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bc3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bc5u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000bc9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bcbu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00000bcdu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000be5u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000bebu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000beeu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c02u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c05u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00000c11u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c1au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c1cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c1eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c1fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c21u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c23u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00000c29u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c33u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c36u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c38u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c3au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00000c3du, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c47u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c49u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c4au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c4bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c4cu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c4eu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00000c54u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c5eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c60u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c61u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c62u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c63u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c65u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c6eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c70u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c73u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c74u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c76u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c80u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c82u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c84u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c85u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c86u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c88u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000c8fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c91u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000c93u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c94u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000c95u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000c97u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000ca1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ca3u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ca5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ca6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ca7u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000ca9u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000cb2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cb4u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000cb6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cb8u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000cbau, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000cc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cc6u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000cc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cc9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ccau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000cccu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000cd3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cd5u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000cd7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cd8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cd9u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000cdbu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000ce5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ce7u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ce9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ceau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000cebu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00000cedu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d0cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d0eu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d17u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d19u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d1bu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d21u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d23u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d25u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d30u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d32u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d37u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d39u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d3bu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d44u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d46u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d48u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d4eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d50u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d52u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d5bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d5du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d5fu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d64u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d66u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d68u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d71u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d73u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d75u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d7bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d7du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d7fu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d88u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d8au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d8cu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d91u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000d93u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000d95u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000d9eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000da0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000da2u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000da8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000daau, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000dacu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000db5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000db7u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000db9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dbeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dc2u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000dceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dd0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000dd2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dd3u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000dddu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ddfu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000de1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000de2u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000de9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000debu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000dedu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000deeu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000df5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000df7u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000df9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000dfau, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e0bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e0du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e0fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e10u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e1cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e1eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e20u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e21u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e2au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e2cu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e2eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e2fu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e3bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e3du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e3fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e40u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e45u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e47u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e49u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e52u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e54u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e56u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e5cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e5eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e60u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e69u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e6bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e6du, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e72u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e74u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e76u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e81u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e83u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e89u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e8bu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e8du, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000e96u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000e98u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000e9au, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000eaau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eacu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000eaeu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000eb7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000eb9u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ebbu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000ec1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ec3u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ec5u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000eceu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ed0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ed2u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000ed7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ed9u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000edbu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000ee4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ee6u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ee8u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000eeeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000ef0u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000ef2u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000efbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000efdu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000effu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f04u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f06u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f08u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f11u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f13u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f15u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f1bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f1du, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f1fu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f28u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f2au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f2cu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f33u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f35u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f3eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f40u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f42u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f48u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f4au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f4cu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f55u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f57u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f59u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f68u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f6au, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f6cu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f75u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f77u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f79u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f7fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f81u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f83u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f8cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f8eu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f90u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000f95u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000f97u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000f99u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000fa2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fa4u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000fa6u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000facu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000faeu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000fb0u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000fb9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fbbu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000fbdu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000fc2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fc4u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000fc6u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000fcfu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fd1u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000fd3u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000fd9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fdbu, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000fddu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x00000fe6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000fe8u, 0x00000007u, 0x0004003bu, 0x000000acu, 0x00000feau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00000ff3u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000ff7u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00000ffau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001003u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000101fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001029u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00001031u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00001036u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00001039u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000103cu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000103fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001042u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00001044u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00001045u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x00001048u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000104bu, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000104eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001051u, 0x00000007u, 0x0004003bu, 0x0000011eu, 0x0000106eu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001071u, 0x00000007u, 0x00050041u, 0x00000174u, 0x00000b6bu, 0x00000128u, 0x000001e9u, 0x0004003du, 0x0000000fu, 0x00000b6cu, 0x00000b6bu, 0x00040071u, 0x00000006u, 0x00000b6du, 0x00000b6cu, 0x0004007cu, 0x00000008u, 0x00000b6eu, 0x00000b6du, 0x000500c7u, 0x00000008u, 0x00000b6fu, 0x00000b6eu, 0x000001a6u, 0x000500abu, 0x00000063u, 0x00000b70u, 0x00000b6fu, 0x0000019cu, 0x00050041u, 0x00000007u, 0x00000b71u, 0x00000128u, 0x0000019cu, 0x0004003du, 0x00000006u, 0x00000b72u, 0x00000b71u, 0x0004007cu, 0x00000008u, 0x00000b73u, 0x00000b72u, 0x00050041u, 0x00000007u, 0x00000b74u, 0x00000128u, 0x000001a6u, 0x0004003du, 0x00000006u, 0x00000b75u, 0x00000b74u, 0x0004007cu, 0x00000008u, 0x00000b76u, 0x00000b75u, 0x00050041u, 0x00000174u, 0x00000b77u, 0x00000128u, 0x000001dfu, 0x0004003du, 0x0000000fu, 0x00000b78u, 0x00000b77u, 0x00040071u, 0x00000006u, 0x00000b79u, 0x00000b78u, 0x0004007cu, 0x00000008u, 0x00000b7au, 0x00000b79u, 0x0003003eu, 0x00000b7bu, 0x00000b70u, 0x00050041u, 0x00000040u, 0x00000b7du, 0x0000012au, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000b7eu, 0x00000b7du, 0x0003003eu, 0x00000b7cu, 0x00000b7eu, 0x0003003eu, 0x00000b7fu, 0x00000b73u, 0x0003003eu, 0x00000b80u, 0x00000b76u, 0x0003003eu, 0x00000b81u, 0x00000b7au, 0x00090039u, 0x00000008u, 0x00000b82u, 0x00000104u, 0x00000b7bu, 0x00000b7cu, 0x00000b7fu, 0x00000b80u, 0x00000b81u, 0x0003003eu, 0x00000b7du, 0x00000b82u, 0x0004003du, 0x0000000fu, 0x00000b85u, 0x00000b6bu, 0x00040071u, 0x00000006u, 0x00000b86u, 0x00000b85u, 0x0004007cu, 0x00000008u, 0x00000b87u, 0x00000b86u, 0x000500c7u, 0x00000008u, 0x00000b88u, 0x00000b87u, 0x000001afu, 0x000500abu, 0x00000063u, 0x00000b89u, 0x00000b88u, 0x0000019cu, 0x00050041u, 0x00000007u, 0x00000b8au, 0x00000128u, 0x000001a9u, 0x0004003du, 0x00000006u, 0x00000b8bu, 0x00000b8au, 0x0004007cu, 0x00000008u, 0x00000b8cu, 0x00000b8bu, 0x00050041u, 0x00000007u, 0x00000b8du, 0x00000128u, 0x000001acu, 0x0004003du, 0x00000006u, 0x00000b8eu, 0x00000b8du, 0x0004007cu, 0x00000008u, 0x00000b8fu, 0x00000b8eu, 0x00050041u, 0x00000174u, 0x00000b90u, 0x00000128u, 0x000001e6u, 0x0004003du, 0x0000000fu, 0x00000b91u, 0x00000b90u, 0x00040071u, 0x00000006u, 0x00000b92u, 0x00000b91u, 0x0004007cu, 0x00000008u, 0x00000b93u, 0x00000b92u, 0x0003003eu, 0x00000b94u, 0x00000b89u, 0x00050041u, 0x00000040u, 0x00000b96u, 0x0000012au, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00000b97u, 0x00000b96u, 0x0003003eu, 0x00000b95u, 0x00000b97u, 0x0003003eu, 0x00000b98u, 0x00000b8cu, 0x0003003eu, 0x00000b99u, 0x00000b8fu, 0x0003003eu, 0x00000b9au, 0x00000b93u, 0x00090039u, 0x00000008u, 0x00000b9bu, 0x00000104u, 0x00000b94u, 0x00000b95u, 0x00000b98u, 0x00000b99u, 0x00000b9au, 0x0003003eu, 0x00000b96u, 0x00000b9bu, 0x0004003du, 0x00000063u, 0x00000b9du, 0x0000012du, 0x000300f7u, 0x00000b9fu, 0x00000000u, 0x000400fau, 0x00000b9du, 0x00000b9eu, 0x00000ba5u, 0x000200f8u, 0x00000b9eu, 0x0004003du, 0x00000058u, 0x00000ba1u, 0x0000012au, 0x000500c7u, 0x00000058u, 0x00000ba4u, 0x00000ba1u, 0x0000b61cu, 0x0003003eu, 0x00000ba0u, 0x00000ba4u, 0x000200f9u, 0x00000b9fu, 0x000200f8u, 0x00000ba5u, 0x0003003eu, 0x00000ba0u, 0x00000450u, 0x000200f9u, 0x00000b9fu, 0x000200f8u, 0x00000b9fu, 0x00050041u, 0x00000040u, 0x00000ba7u, 0x00000ba0u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00000ba8u, 0x00000ba7u, 0x00050041u, 0x00000040u, 0x00000ba9u, 0x00000ba0u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00000baau, 0x00000ba9u, 0x00050080u, 0x00000008u, 0x00000babu, 0x00000ba8u, 0x00000baau, 0x0003003eu, 0x00000ba6u, 0x00000babu, 0x0004003du, 0x00000058u, 0x00000bacu, 0x0000012au, 0x000500c3u, 0x00000058u, 0x00000baeu, 0x00000bacu, 0x0000b61bu, 0x0003003eu, 0x0000012au, 0x00000baeu, 0x0004003du, 0x00000029u, 0x00000bb1u, 0x00000128u, 0x0003003eu, 0x00000bb0u, 0x00000bb1u, 0x0004003du, 0x00000008u, 0x00000bb4u, 0x00000b7du, 0x0003003eu, 0x00000bb2u, 0x00000bb4u, 0x00060039u, 0x00000008u, 0x00000bb5u, 0x00000099u, 0x00000bb0u, 0x00000bb2u, 0x0003003eu, 0x00000bafu, 0x00000bb5u, 0x0004003du, 0x00000029u, 0x00000bb8u, 0x00000128u, 0x0003003eu, 0x00000bb7u, 0x00000bb8u, 0x0004003du, 0x00000008u, 0x00000bbbu, 0x00000b96u, 0x0003003eu, 0x00000bb9u, 0x00000bbbu, 0x00060039u, 0x00000008u, 0x00000bbcu, 0x000000a2u, 0x00000bb7u, 0x00000bb9u, 0x0003003eu, 0x00000bb6u, 0x00000bbcu, 0x0004003du, 0x00000008u, 0x00000bbfu, 0x00000b7du, 0x00050080u, 0x00000008u, 0x00000bc0u, 0x00000bbfu, 0x000001a6u, 0x0004003du, 0x00000029u, 0x00000bc2u, 0x00000128u, 0x0003003eu, 0x00000bc1u, 0x00000bc2u, 0x0003003eu, 0x00000bc3u, 0x00000bc0u, 0x00060039u, 0x00000008u, 0x00000bc4u, 0x00000099u, 0x00000bc1u, 0x00000bc3u, 0x0003003eu, 0x00000bbdu, 0x00000bc4u, 0x0004003du, 0x00000008u, 0x00000bc7u, 0x00000b96u, 0x00050080u, 0x00000008u, 0x00000bc8u, 0x00000bc7u, 0x000001a6u, 0x0004003du, 0x00000029u, 0x00000bcau, 0x00000128u, 0x0003003eu, 0x00000bc9u, 0x00000bcau, 0x0003003eu, 0x00000bcbu, 0x00000bc8u, 0x00060039u, 0x00000008u, 0x00000bccu, 0x000000a2u, 0x00000bc9u, 0x00000bcbu, 0x0003003eu, 0x00000bc5u, 0x00000bccu, 0x00050082u, 0x00000008u, 0x00000bd0u, 0x00000bccu, 0x00000bbcu, 0x0007000cu, 0x00000008u, 0x00000bd2u, 0x00000001u, 0x0000002au, 0x00000bd0u, 0x00000bd1u, 0x0003003eu, 0x00000bcdu, 0x00000bd2u, 0x000500c7u, 0x00000008u, 0x00000bd4u, 0x00000bbcu, 0x00000311u, 0x00050080u, 0x00000008u, 0x00000bd6u, 0x00000bd4u, 0x00000bd2u, 0x0003003eu, 0x00000bc5u, 0x00000bd6u, 0x0003003eu, 0x00000bb6u, 0x00000bd4u, 0x0004003du, 0x00000063u, 0x00000bd9u, 0x0000012eu, 0x0004003du, 0x00000058u, 0x00000bdau, 0x00000ba0u, 0x000500aau, 0x00000451u, 0x00000bdcu, 0x00000bdau, 0x00000bdbu, 0x00050051u, 0x00000063u, 0x00000bdeu, 0x00000bdcu, 0x00000000u, 0x00050051u, 0x00000063u, 0x00000bdfu, 0x00000bdcu, 0x00000001u, 0x00060050u, 0x00000bddu, 0x00000be0u, 0x00000bd9u, 0x00000bdeu, 0x00000bdfu, 0x0004009bu, 0x00000063u, 0x00000be1u, 0x00000be0u, 0x0003003eu, 0x0000012eu, 0x00000be1u, 0x0004003du, 0x00000063u, 0x00000be2u, 0x0000012eu, 0x000300f7u, 0x00000be4u, 0x00000000u, 0x000400fau, 0x00000be2u, 0x00000be3u, 0x00000be4u, 0x000200f8u, 0x00000be3u, 0x0003003eu, 0x00000ba6u, 0x0000019cu, 0x000200f9u, 0x00000be4u, 0x000200f8u, 0x00000be4u, 0x000600a9u, 0x00000008u, 0x0000b64cu, 0x00000be2u, 0x0000019cu, 0x00000babu, 0x00050041u, 0x00000174u, 0x00000be6u, 0x00000128u, 0x000001b5u, 0x0004003du, 0x0000000fu, 0x00000be7u, 0x00000be6u, 0x00040071u, 0x00000006u, 0x00000be8u, 0x00000be7u, 0x0004007cu, 0x00000008u, 0x00000be9u, 0x00000be8u, 0x000500aau, 0x00000063u, 0x00000beau, 0x00000be9u, 0x000001a6u, 0x0003003eu, 0x00000be5u, 0x00000beau, 0x000500afu, 0x00000063u, 0x00000bedu, 0x0000b64cu, 0x00000977u, 0x000300f7u, 0x00000bf0u, 0x00000000u, 0x000400fau, 0x00000bedu, 0x00000befu, 0x00000bf4u, 0x000200f8u, 0x00000befu, 0x00050050u, 0x00000058u, 0x00000bf3u, 0x00000bc4u, 0x00000bd6u, 0x0003003eu, 0x00000beeu, 0x00000bf3u, 0x000200f9u, 0x00000bf0u, 0x000200f8u, 0x00000bf4u, 0x00050050u, 0x00000058u, 0x00000bf7u, 0x00000bb5u, 0x00000bd4u, 0x0003003eu, 0x00000beeu, 0x00000bf7u, 0x000200f9u, 0x00000bf0u, 0x000200f8u, 0x00000bf0u, 0x000700f5u, 0x00000058u, 0x0000b189u, 0x00000bf3u, 0x00000befu, 0x00000bf7u, 0x00000bf4u, 0x0003003eu, 0x00000bebu, 0x0000b189u, 0x0004003du, 0x00000063u, 0x00000bf9u, 0x0000012bu, 0x000300f7u, 0x00000bfbu, 0x00000000u, 0x000400fau, 0x00000bf9u, 0x00000bfau, 0x00000cf4u, 0x000200f8u, 0x00000bfau, 0x0004003du, 0x0000000fu, 0x00000bfdu, 0x00000be6u, 0x00040071u, 0x00000006u, 0x00000bfeu, 0x00000bfdu, 0x0004007cu, 0x00000008u, 0x00000bffu, 0x00000bfeu, 0x000300f7u, 0x00000c01u, 0x00000000u, 0x000b00fbu, 0x00000bffu, 0x00000c01u, 0x00000000u, 0x00000c00u, 0x00000002u, 0x00000c00u, 0x00000003u, 0x00000c00u, 0x00000004u, 0x00000c00u, 0x000200f8u, 0x00000c00u, 0x0003003eu, 0x00000c02u, 0x00000bedu, 0x000600a9u, 0x00000008u, 0x00000c07u, 0x00000bedu, 0x000001a9u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x00000c08u, 0x00000c07u, 0x0003003eu, 0x00000c05u, 0x00000c08u, 0x00050041u, 0x00000174u, 0x00000c09u, 0x00000128u, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x00000c0au, 0x00000c09u, 0x00040071u, 0x00000006u, 0x00000c0bu, 0x00000c0au, 0x0004007cu, 0x00000008u, 0x00000c0cu, 0x00000c0bu, 0x000300f7u, 0x00000c10u, 0x00000000u, 0x000700fbu, 0x00000c0cu, 0x00000c0fu, 0x00000000u, 0x00000c0du, 0x00000001u, 0x00000c0eu, 0x000200f8u, 0x00000c0fu, 0x0004007cu, 0x000000abu, 0x00000caeu, 0x0000b189u, 0x000600a9u, 0x00000008u, 0x00000cb0u, 0x00000bedu, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x00000cb1u, 0x00000cb0u, 0x0004003du, 0x00000029u, 0x00000cb3u, 0x00000128u, 0x0003003eu, 0x00000cb2u, 0x00000cb3u, 0x0004003du, 0x00000006u, 0x00000cb5u, 0x00000129u, 0x0003003eu, 0x00000cb4u, 0x00000cb5u, 0x0003003eu, 0x00000cb6u, 0x00000caeu, 0x0003003eu, 0x00000cb7u, 0x00000cb1u, 0x0003003eu, 0x00000cb8u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000cbbu, 0x0000012cu, 0x0003003eu, 0x00000cbau, 0x00000cbbu, 0x000a0039u, 0x00000013u, 0x00000cbcu, 0x000000ddu, 0x00000cb2u, 0x00000cb4u, 0x00000cb6u, 0x00000cb7u, 0x00000cb8u, 0x00000cbau, 0x0003003eu, 0x00000c11u, 0x00000cbcu, 0x0004003du, 0x00000063u, 0x00000cbdu, 0x0000012du, 0x000300f7u, 0x00000cbfu, 0x00000000u, 0x000400fau, 0x00000cbdu, 0x00000cbeu, 0x00000cbfu, 0x000200f8u, 0x00000cbeu, 0x00050050u, 0x00000058u, 0x00000cc2u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000cc3u, 0x00000cc2u, 0x0004003du, 0x00000029u, 0x00000cc5u, 0x00000128u, 0x0003003eu, 0x00000cc4u, 0x00000cc5u, 0x0004003du, 0x00000006u, 0x00000cc7u, 0x00000129u, 0x0003003eu, 0x00000cc6u, 0x00000cc7u, 0x0003003eu, 0x00000cc8u, 0x00000cc3u, 0x0003003eu, 0x00000cc9u, 0x000002f4u, 0x0003003eu, 0x00000ccau, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000ccdu, 0x0000012cu, 0x0003003eu, 0x00000cccu, 0x00000ccdu, 0x000a0039u, 0x00000013u, 0x00000cceu, 0x000000ddu, 0x00000cc4u, 0x00000cc6u, 0x00000cc8u, 0x00000cc9u, 0x00000ccau, 0x00000cccu, 0x0003003eu, 0x00000c29u, 0x00000cceu, 0x00050050u, 0x00000058u, 0x00000cd1u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000cd2u, 0x00000cd1u, 0x0004003du, 0x00000029u, 0x00000cd4u, 0x00000128u, 0x0003003eu, 0x00000cd3u, 0x00000cd4u, 0x0004003du, 0x00000006u, 0x00000cd6u, 0x00000129u, 0x0003003eu, 0x00000cd5u, 0x00000cd6u, 0x0003003eu, 0x00000cd7u, 0x00000cd2u, 0x0003003eu, 0x00000cd8u, 0x000002f8u, 0x0003003eu, 0x00000cd9u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000cdcu, 0x0000012cu, 0x0003003eu, 0x00000cdbu, 0x00000cdcu, 0x000a0039u, 0x00000013u, 0x00000cddu, 0x000000ddu, 0x00000cd3u, 0x00000cd5u, 0x00000cd7u, 0x00000cd8u, 0x00000cd9u, 0x00000cdbu, 0x0003003eu, 0x00000c3du, 0x00000cddu, 0x000200f9u, 0x00000cbfu, 0x000200f8u, 0x00000cbfu, 0x000700f5u, 0x00000013u, 0x0000b27bu, 0x0000b219u, 0x00000c0fu, 0x00000cddu, 0x00000cbeu, 0x000700f5u, 0x00000013u, 0x0000b21cu, 0x0000b219u, 0x00000c0fu, 0x00000cceu, 0x00000cbeu, 0x0004003du, 0x00000063u, 0x00000cdeu, 0x0000012eu, 0x000300f7u, 0x00000ce0u, 0x00000000u, 0x000400fau, 0x00000cdeu, 0x00000cdfu, 0x00000ce0u, 0x000200f8u, 0x00000cdfu, 0x00050050u, 0x00000058u, 0x00000ce3u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000ce4u, 0x00000ce3u, 0x0004003du, 0x00000029u, 0x00000ce6u, 0x00000128u, 0x0003003eu, 0x00000ce5u, 0x00000ce6u, 0x0004003du, 0x00000006u, 0x00000ce8u, 0x00000129u, 0x0003003eu, 0x00000ce7u, 0x00000ce8u, 0x0003003eu, 0x00000ce9u, 0x00000ce4u, 0x0003003eu, 0x00000ceau, 0x000002fbu, 0x0003003eu, 0x00000cebu, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000ceeu, 0x0000012cu, 0x0003003eu, 0x00000cedu, 0x00000ceeu, 0x000a0039u, 0x00000013u, 0x00000cefu, 0x000000ddu, 0x00000ce5u, 0x00000ce7u, 0x00000ce9u, 0x00000ceau, 0x00000cebu, 0x00000cedu, 0x0003003eu, 0x00000c54u, 0x00000cefu, 0x000200f9u, 0x00000ce0u, 0x000200f8u, 0x00000ce0u, 0x000700f5u, 0x00000013u, 0x0000b2a9u, 0x0000b219u, 0x00000cbfu, 0x00000cefu, 0x00000cdfu, 0x000200f9u, 0x00000c10u, 0x000200f8u, 0x00000c0du, 0x0004007cu, 0x000000abu, 0x00000c13u, 0x0000b189u, 0x00050041u, 0x00000174u, 0x00000c14u, 0x00000128u, 0x000001d9u, 0x0004003du, 0x0000000fu, 0x00000c15u, 0x00000c14u, 0x00040071u, 0x00000006u, 0x00000c16u, 0x00000c15u, 0x000600a9u, 0x00000008u, 0x00000c18u, 0x00000bedu, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x00000c19u, 0x00000c18u, 0x0004003du, 0x00000029u, 0x00000c1bu, 0x00000128u, 0x0003003eu, 0x00000c1au, 0x00000c1bu, 0x0004003du, 0x00000006u, 0x00000c1du, 0x00000129u, 0x0003003eu, 0x00000c1cu, 0x00000c1du, 0x0003003eu, 0x00000c1eu, 0x00000c13u, 0x0003003eu, 0x00000c1fu, 0x00000c16u, 0x0003003eu, 0x00000c20u, 0x00000c19u, 0x0003003eu, 0x00000c21u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c24u, 0x0000012cu, 0x0003003eu, 0x00000c23u, 0x00000c24u, 0x000b0039u, 0x00000013u, 0x00000c25u, 0x000000c7u, 0x00000c1au, 0x00000c1cu, 0x00000c1eu, 0x00000c1fu, 0x00000c20u, 0x00000c21u, 0x00000c23u, 0x0003003eu, 0x00000c11u, 0x00000c25u, 0x0004003du, 0x00000063u, 0x00000c26u, 0x0000012du, 0x000300f7u, 0x00000c28u, 0x00000000u, 0x000400fau, 0x00000c26u, 0x00000c27u, 0x00000c28u, 0x000200f8u, 0x00000c27u, 0x00050050u, 0x00000058u, 0x00000c2cu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000c2du, 0x00000c2cu, 0x0004003du, 0x0000000fu, 0x00000c2fu, 0x00000c14u, 0x00040071u, 0x00000006u, 0x00000c30u, 0x00000c2fu, 0x0004003du, 0x00000029u, 0x00000c32u, 0x00000128u, 0x0003003eu, 0x00000c31u, 0x00000c32u, 0x0004003du, 0x00000006u, 0x00000c34u, 0x00000129u, 0x0003003eu, 0x00000c33u, 0x00000c34u, 0x0003003eu, 0x00000c35u, 0x00000c2du, 0x0003003eu, 0x00000c36u, 0x00000c30u, 0x0003003eu, 0x00000c37u, 0x000002f4u, 0x0003003eu, 0x00000c38u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c3bu, 0x0000012cu, 0x0003003eu, 0x00000c3au, 0x00000c3bu, 0x000b0039u, 0x00000013u, 0x00000c3cu, 0x000000c7u, 0x00000c31u, 0x00000c33u, 0x00000c35u, 0x00000c36u, 0x00000c37u, 0x00000c38u, 0x00000c3au, 0x0003003eu, 0x00000c29u, 0x00000c3cu, 0x00050050u, 0x00000058u, 0x00000c40u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000c41u, 0x00000c40u, 0x0004003du, 0x0000000fu, 0x00000c43u, 0x00000c14u, 0x00040071u, 0x00000006u, 0x00000c44u, 0x00000c43u, 0x0004003du, 0x00000029u, 0x00000c46u, 0x00000128u, 0x0003003eu, 0x00000c45u, 0x00000c46u, 0x0004003du, 0x00000006u, 0x00000c48u, 0x00000129u, 0x0003003eu, 0x00000c47u, 0x00000c48u, 0x0003003eu, 0x00000c49u, 0x00000c41u, 0x0003003eu, 0x00000c4au, 0x00000c44u, 0x0003003eu, 0x00000c4bu, 0x000002f8u, 0x0003003eu, 0x00000c4cu, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c4fu, 0x0000012cu, 0x0003003eu, 0x00000c4eu, 0x00000c4fu, 0x000b0039u, 0x00000013u, 0x00000c50u, 0x000000c7u, 0x00000c45u, 0x00000c47u, 0x00000c49u, 0x00000c4au, 0x00000c4bu, 0x00000c4cu, 0x00000c4eu, 0x0003003eu, 0x00000c3du, 0x00000c50u, 0x000200f9u, 0x00000c28u, 0x000200f8u, 0x00000c28u, 0x000700f5u, 0x00000013u, 0x0000b27eu, 0x0000b219u, 0x00000c0du, 0x00000c50u, 0x00000c27u, 0x000700f5u, 0x00000013u, 0x0000b21fu, 0x0000b219u, 0x00000c0du, 0x00000c3cu, 0x00000c27u, 0x0004003du, 0x00000063u, 0x00000c51u, 0x0000012eu, 0x000300f7u, 0x00000c53u, 0x00000000u, 0x000400fau, 0x00000c51u, 0x00000c52u, 0x00000c53u, 0x000200f8u, 0x00000c52u, 0x00050050u, 0x00000058u, 0x00000c57u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000c58u, 0x00000c57u, 0x0004003du, 0x0000000fu, 0x00000c5au, 0x00000c14u, 0x00040071u, 0x00000006u, 0x00000c5bu, 0x00000c5au, 0x0004003du, 0x00000029u, 0x00000c5du, 0x00000128u, 0x0003003eu, 0x00000c5cu, 0x00000c5du, 0x0004003du, 0x00000006u, 0x00000c5fu, 0x00000129u, 0x0003003eu, 0x00000c5eu, 0x00000c5fu, 0x0003003eu, 0x00000c60u, 0x00000c58u, 0x0003003eu, 0x00000c61u, 0x00000c5bu, 0x0003003eu, 0x00000c62u, 0x000002fbu, 0x0003003eu, 0x00000c63u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c66u, 0x0000012cu, 0x0003003eu, 0x00000c65u, 0x00000c66u, 0x000b0039u, 0x00000013u, 0x00000c67u, 0x000000c7u, 0x00000c5cu, 0x00000c5eu, 0x00000c60u, 0x00000c61u, 0x00000c62u, 0x00000c63u, 0x00000c65u, 0x0003003eu, 0x00000c54u, 0x00000c67u, 0x000200f9u, 0x00000c53u, 0x000200f8u, 0x00000c53u, 0x000700f5u, 0x00000013u, 0x0000b2acu, 0x0000b219u, 0x00000c28u, 0x00000c67u, 0x00000c52u, 0x000200f9u, 0x00000c10u, 0x000200f8u, 0x00000c0eu, 0x0004007cu, 0x000000abu, 0x00000c6au, 0x0000b189u, 0x000600a9u, 0x00000008u, 0x00000c6cu, 0x00000bedu, 0x000001acu, 0x0000019cu, 0x0004007cu, 0x00000006u, 0x00000c6du, 0x00000c6cu, 0x0004003du, 0x00000029u, 0x00000c6fu, 0x00000128u, 0x0003003eu, 0x00000c6eu, 0x00000c6fu, 0x0004003du, 0x00000006u, 0x00000c71u, 0x00000129u, 0x0003003eu, 0x00000c70u, 0x00000c71u, 0x0003003eu, 0x00000c72u, 0x00000c6au, 0x0003003eu, 0x00000c73u, 0x00000c6du, 0x0003003eu, 0x00000c74u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c77u, 0x0000012cu, 0x0003003eu, 0x00000c76u, 0x00000c77u, 0x000a0039u, 0x00000013u, 0x00000c78u, 0x000000d0u, 0x00000c6eu, 0x00000c70u, 0x00000c72u, 0x00000c73u, 0x00000c74u, 0x00000c76u, 0x0003003eu, 0x00000c11u, 0x00000c78u, 0x0004003du, 0x00000063u, 0x00000c79u, 0x0000012du, 0x000300f7u, 0x00000c7bu, 0x00000000u, 0x000400fau, 0x00000c79u, 0x00000c7au, 0x00000c7bu, 0x000200f8u, 0x00000c7au, 0x00050050u, 0x00000058u, 0x00000c7eu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000c7fu, 0x00000c7eu, 0x0004003du, 0x00000029u, 0x00000c81u, 0x00000128u, 0x0003003eu, 0x00000c80u, 0x00000c81u, 0x0004003du, 0x00000006u, 0x00000c83u, 0x00000129u, 0x0003003eu, 0x00000c82u, 0x00000c83u, 0x0003003eu, 0x00000c84u, 0x00000c7fu, 0x0003003eu, 0x00000c85u, 0x000002f4u, 0x0003003eu, 0x00000c86u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c89u, 0x0000012cu, 0x0003003eu, 0x00000c88u, 0x00000c89u, 0x000a0039u, 0x00000013u, 0x00000c8au, 0x000000d0u, 0x00000c80u, 0x00000c82u, 0x00000c84u, 0x00000c85u, 0x00000c86u, 0x00000c88u, 0x0003003eu, 0x00000c29u, 0x00000c8au, 0x00050050u, 0x00000058u, 0x00000c8du, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000c8eu, 0x00000c8du, 0x0004003du, 0x00000029u, 0x00000c90u, 0x00000128u, 0x0003003eu, 0x00000c8fu, 0x00000c90u, 0x0004003du, 0x00000006u, 0x00000c92u, 0x00000129u, 0x0003003eu, 0x00000c91u, 0x00000c92u, 0x0003003eu, 0x00000c93u, 0x00000c8eu, 0x0003003eu, 0x00000c94u, 0x000002f8u, 0x0003003eu, 0x00000c95u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000c98u, 0x0000012cu, 0x0003003eu, 0x00000c97u, 0x00000c98u, 0x000a0039u, 0x00000013u, 0x00000c99u, 0x000000d0u, 0x00000c8fu, 0x00000c91u, 0x00000c93u, 0x00000c94u, 0x00000c95u, 0x00000c97u, 0x0003003eu, 0x00000c3du, 0x00000c99u, 0x000200f9u, 0x00000c7bu, 0x000200f8u, 0x00000c7bu, 0x000700f5u, 0x00000013u, 0x0000b280u, 0x0000b219u, 0x00000c0eu, 0x00000c99u, 0x00000c7au, 0x000700f5u, 0x00000013u, 0x0000b221u, 0x0000b219u, 0x00000c0eu, 0x00000c8au, 0x00000c7au, 0x0004003du, 0x00000063u, 0x00000c9au, 0x0000012eu, 0x000300f7u, 0x00000c9cu, 0x00000000u, 0x000400fau, 0x00000c9au, 0x00000c9bu, 0x00000c9cu, 0x000200f8u, 0x00000c9bu, 0x00050050u, 0x00000058u, 0x00000c9fu, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000ca0u, 0x00000c9fu, 0x0004003du, 0x00000029u, 0x00000ca2u, 0x00000128u, 0x0003003eu, 0x00000ca1u, 0x00000ca2u, 0x0004003du, 0x00000006u, 0x00000ca4u, 0x00000129u, 0x0003003eu, 0x00000ca3u, 0x00000ca4u, 0x0003003eu, 0x00000ca5u, 0x00000ca0u, 0x0003003eu, 0x00000ca6u, 0x000002fbu, 0x0003003eu, 0x00000ca7u, 0x00000c08u, 0x0004003du, 0x00000063u, 0x00000caau, 0x0000012cu, 0x0003003eu, 0x00000ca9u, 0x00000caau, 0x000a0039u, 0x00000013u, 0x00000cabu, 0x000000d0u, 0x00000ca1u, 0x00000ca3u, 0x00000ca5u, 0x00000ca6u, 0x00000ca7u, 0x00000ca9u, 0x0003003eu, 0x00000c54u, 0x00000cabu, 0x000200f9u, 0x00000c9cu, 0x000200f8u, 0x00000c9cu, 0x000700f5u, 0x00000013u, 0x0000b2aeu, 0x0000b219u, 0x00000c7bu, 0x00000cabu, 0x00000c9bu, 0x000200f9u, 0x00000c10u, 0x000200f8u, 0x00000c10u, 0x000900f5u, 0x00000013u, 0x0000b2a8u, 0x0000b2a9u, 0x00000ce0u, 0x0000b2acu, 0x00000c53u, 0x0000b2aeu, 0x00000c9cu, 0x000900f5u, 0x00000013u, 0x0000b279u, 0x0000b27bu, 0x00000ce0u, 0x0000b27eu, 0x00000c53u, 0x0000b280u, 0x00000c9cu, 0x000900f5u, 0x00000013u, 0x0000b24au, 0x00000cbcu, 0x00000ce0u, 0x00000c25u, 0x00000c53u, 0x00000c78u, 0x00000c9cu, 0x000900f5u, 0x00000013u, 0x0000b21au, 0x0000b21cu, 0x00000ce0u, 0x0000b21fu, 0x00000c53u, 0x0000b221u, 0x00000c9cu, 0x000200f9u, 0x00000c01u, 0x000200f8u, 0x00000c01u, 0x000700f5u, 0x00000013u, 0x0000b2a4u, 0x0000b219u, 0x00000bfau, 0x0000b2a8u, 0x00000c10u, 0x000700f5u, 0x00000013u, 0x0000b275u, 0x0000b219u, 0x00000bfau, 0x0000b279u, 0x00000c10u, 0x000700f5u, 0x00000013u, 0x0000b246u, 0x0000b219u, 0x00000bfau, 0x0000b24au, 0x00000c10u, 0x000700f5u, 0x00000013u, 0x0000b215u, 0x0000b219u, 0x00000bfau, 0x0000b21au, 0x00000c10u, 0x000200f9u, 0x00000bfbu, 0x000200f8u, 0x00000cf4u, 0x0004003du, 0x0000000fu, 0x00000cf6u, 0x00000be6u, 0x00040071u, 0x00000006u, 0x00000cf7u, 0x00000cf6u, 0x0004007cu, 0x00000008u, 0x00000cf8u, 0x00000cf7u, 0x000300f7u, 0x00000cfeu, 0x00000000u, 0x000d00fbu, 0x00000cf8u, 0x00000cfeu, 0x00000000u, 0x00000cf9u, 0x00000001u, 0x00000cfau, 0x00000002u, 0x00000cfbu, 0x00000003u, 0x00000cfcu, 0x00000004u, 0x00000cfdu, 0x000200f8u, 0x00000cf9u, 0x00050041u, 0x00000174u, 0x00000cffu, 0x00000128u, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x00000d00u, 0x00000cffu, 0x00040071u, 0x00000006u, 0x00000d01u, 0x00000d00u, 0x0004007cu, 0x00000008u, 0x00000d02u, 0x00000d01u, 0x000300f7u, 0x00000d07u, 0x00000000u, 0x000b00fbu, 0x00000d02u, 0x00000d07u, 0x00000000u, 0x00000d03u, 0x00000001u, 0x00000d04u, 0x00000002u, 0x00000d05u, 0x00000003u, 0x00000d06u, 0x000200f8u, 0x00000d03u, 0x0004007cu, 0x000000abu, 0x00000d09u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000d0bu, 0x00000128u, 0x0003003eu, 0x00000d0au, 0x00000d0bu, 0x0004003du, 0x00000006u, 0x00000d0du, 0x00000129u, 0x0003003eu, 0x00000d0cu, 0x00000d0du, 0x0003003eu, 0x00000d0eu, 0x00000d09u, 0x00070039u, 0x00000013u, 0x00000d0fu, 0x000000b1u, 0x00000d0au, 0x00000d0cu, 0x00000d0eu, 0x0003003eu, 0x00000c11u, 0x00000d0fu, 0x0004003du, 0x00000063u, 0x00000d10u, 0x0000012du, 0x000300f7u, 0x00000d12u, 0x00000000u, 0x000400fau, 0x00000d10u, 0x00000d11u, 0x00000d12u, 0x000200f8u, 0x00000d11u, 0x00050050u, 0x00000058u, 0x00000d15u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000d16u, 0x00000d15u, 0x0004003du, 0x00000029u, 0x00000d18u, 0x00000128u, 0x0003003eu, 0x00000d17u, 0x00000d18u, 0x0004003du, 0x00000006u, 0x00000d1au, 0x00000129u, 0x0003003eu, 0x00000d19u, 0x00000d1au, 0x0003003eu, 0x00000d1bu, 0x00000d16u, 0x00070039u, 0x00000013u, 0x00000d1cu, 0x000000b1u, 0x00000d17u, 0x00000d19u, 0x00000d1bu, 0x0003003eu, 0x00000c29u, 0x00000d1cu, 0x00050050u, 0x00000058u, 0x00000d1fu, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000d20u, 0x00000d1fu, 0x0004003du, 0x00000029u, 0x00000d22u, 0x00000128u, 0x0003003eu, 0x00000d21u, 0x00000d22u, 0x0004003du, 0x00000006u, 0x00000d24u, 0x00000129u, 0x0003003eu, 0x00000d23u, 0x00000d24u, 0x0003003eu, 0x00000d25u, 0x00000d20u, 0x00070039u, 0x00000013u, 0x00000d26u, 0x000000b1u, 0x00000d21u, 0x00000d23u, 0x00000d25u, 0x0003003eu, 0x00000c3du, 0x00000d26u, 0x000200f9u, 0x00000d12u, 0x000200f8u, 0x00000d12u, 0x000700f5u, 0x00000013u, 0x0000b284u, 0x0000b219u, 0x00000d03u, 0x00000d26u, 0x00000d11u, 0x000700f5u, 0x00000013u, 0x0000b225u, 0x0000b219u, 0x00000d03u, 0x00000d1cu, 0x00000d11u, 0x0004003du, 0x00000063u, 0x00000d27u, 0x0000012eu, 0x000300f7u, 0x00000d29u, 0x00000000u, 0x000400fau, 0x00000d27u, 0x00000d28u, 0x00000d29u, 0x000200f8u, 0x00000d28u, 0x00050050u, 0x00000058u, 0x00000d2cu, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000d2du, 0x00000d2cu, 0x0004003du, 0x00000029u, 0x00000d2fu, 0x00000128u, 0x0003003eu, 0x00000d2eu, 0x00000d2fu, 0x0004003du, 0x00000006u, 0x00000d31u, 0x00000129u, 0x0003003eu, 0x00000d30u, 0x00000d31u, 0x0003003eu, 0x00000d32u, 0x00000d2du, 0x00070039u, 0x00000013u, 0x00000d33u, 0x000000b1u, 0x00000d2eu, 0x00000d30u, 0x00000d32u, 0x0003003eu, 0x00000c54u, 0x00000d33u, 0x000200f9u, 0x00000d29u, 0x000200f8u, 0x00000d29u, 0x000700f5u, 0x00000013u, 0x0000b2b2u, 0x0000b219u, 0x00000d12u, 0x00000d33u, 0x00000d28u, 0x000200f9u, 0x00000d07u, 0x000200f8u, 0x00000d04u, 0x0004007cu, 0x000000abu, 0x00000d36u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000d38u, 0x00000128u, 0x0003003eu, 0x00000d37u, 0x00000d38u, 0x0004003du, 0x00000006u, 0x00000d3au, 0x00000129u, 0x0003003eu, 0x00000d39u, 0x00000d3au, 0x0003003eu, 0x00000d3bu, 0x00000d36u, 0x00070039u, 0x00000013u, 0x00000d3cu, 0x000000e2u, 0x00000d37u, 0x00000d39u, 0x00000d3bu, 0x0003003eu, 0x00000c11u, 0x00000d3cu, 0x0004003du, 0x00000063u, 0x00000d3du, 0x0000012du, 0x000300f7u, 0x00000d3fu, 0x00000000u, 0x000400fau, 0x00000d3du, 0x00000d3eu, 0x00000d3fu, 0x000200f8u, 0x00000d3eu, 0x00050050u, 0x00000058u, 0x00000d42u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000d43u, 0x00000d42u, 0x0004003du, 0x00000029u, 0x00000d45u, 0x00000128u, 0x0003003eu, 0x00000d44u, 0x00000d45u, 0x0004003du, 0x00000006u, 0x00000d47u, 0x00000129u, 0x0003003eu, 0x00000d46u, 0x00000d47u, 0x0003003eu, 0x00000d48u, 0x00000d43u, 0x00070039u, 0x00000013u, 0x00000d49u, 0x000000e2u, 0x00000d44u, 0x00000d46u, 0x00000d48u, 0x0003003eu, 0x00000c29u, 0x00000d49u, 0x00050050u, 0x00000058u, 0x00000d4cu, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000d4du, 0x00000d4cu, 0x0004003du, 0x00000029u, 0x00000d4fu, 0x00000128u, 0x0003003eu, 0x00000d4eu, 0x00000d4fu, 0x0004003du, 0x00000006u, 0x00000d51u, 0x00000129u, 0x0003003eu, 0x00000d50u, 0x00000d51u, 0x0003003eu, 0x00000d52u, 0x00000d4du, 0x00070039u, 0x00000013u, 0x00000d53u, 0x000000e2u, 0x00000d4eu, 0x00000d50u, 0x00000d52u, 0x0003003eu, 0x00000c3du, 0x00000d53u, 0x000200f9u, 0x00000d3fu, 0x000200f8u, 0x00000d3fu, 0x000700f5u, 0x00000013u, 0x0000b286u, 0x0000b219u, 0x00000d04u, 0x00000d53u, 0x00000d3eu, 0x000700f5u, 0x00000013u, 0x0000b227u, 0x0000b219u, 0x00000d04u, 0x00000d49u, 0x00000d3eu, 0x0004003du, 0x00000063u, 0x00000d54u, 0x0000012eu, 0x000300f7u, 0x00000d56u, 0x00000000u, 0x000400fau, 0x00000d54u, 0x00000d55u, 0x00000d56u, 0x000200f8u, 0x00000d55u, 0x00050050u, 0x00000058u, 0x00000d59u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000d5au, 0x00000d59u, 0x0004003du, 0x00000029u, 0x00000d5cu, 0x00000128u, 0x0003003eu, 0x00000d5bu, 0x00000d5cu, 0x0004003du, 0x00000006u, 0x00000d5eu, 0x00000129u, 0x0003003eu, 0x00000d5du, 0x00000d5eu, 0x0003003eu, 0x00000d5fu, 0x00000d5au, 0x00070039u, 0x00000013u, 0x00000d60u, 0x000000e2u, 0x00000d5bu, 0x00000d5du, 0x00000d5fu, 0x0003003eu, 0x00000c54u, 0x00000d60u, 0x000200f9u, 0x00000d56u, 0x000200f8u, 0x00000d56u, 0x000700f5u, 0x00000013u, 0x0000b2b4u, 0x0000b219u, 0x00000d3fu, 0x00000d60u, 0x00000d55u, 0x000200f9u, 0x00000d07u, 0x000200f8u, 0x00000d05u, 0x0004007cu, 0x000000abu, 0x00000d63u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000d65u, 0x00000128u, 0x0003003eu, 0x00000d64u, 0x00000d65u, 0x0004003du, 0x00000006u, 0x00000d67u, 0x00000129u, 0x0003003eu, 0x00000d66u, 0x00000d67u, 0x0003003eu, 0x00000d68u, 0x00000d63u, 0x00070039u, 0x00000013u, 0x00000d69u, 0x000000f2u, 0x00000d64u, 0x00000d66u, 0x00000d68u, 0x0003003eu, 0x00000c11u, 0x00000d69u, 0x0004003du, 0x00000063u, 0x00000d6au, 0x0000012du, 0x000300f7u, 0x00000d6cu, 0x00000000u, 0x000400fau, 0x00000d6au, 0x00000d6bu, 0x00000d6cu, 0x000200f8u, 0x00000d6bu, 0x00050050u, 0x00000058u, 0x00000d6fu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000d70u, 0x00000d6fu, 0x0004003du, 0x00000029u, 0x00000d72u, 0x00000128u, 0x0003003eu, 0x00000d71u, 0x00000d72u, 0x0004003du, 0x00000006u, 0x00000d74u, 0x00000129u, 0x0003003eu, 0x00000d73u, 0x00000d74u, 0x0003003eu, 0x00000d75u, 0x00000d70u, 0x00070039u, 0x00000013u, 0x00000d76u, 0x000000f2u, 0x00000d71u, 0x00000d73u, 0x00000d75u, 0x0003003eu, 0x00000c29u, 0x00000d76u, 0x00050050u, 0x00000058u, 0x00000d79u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000d7au, 0x00000d79u, 0x0004003du, 0x00000029u, 0x00000d7cu, 0x00000128u, 0x0003003eu, 0x00000d7bu, 0x00000d7cu, 0x0004003du, 0x00000006u, 0x00000d7eu, 0x00000129u, 0x0003003eu, 0x00000d7du, 0x00000d7eu, 0x0003003eu, 0x00000d7fu, 0x00000d7au, 0x00070039u, 0x00000013u, 0x00000d80u, 0x000000f2u, 0x00000d7bu, 0x00000d7du, 0x00000d7fu, 0x0003003eu, 0x00000c3du, 0x00000d80u, 0x000200f9u, 0x00000d6cu, 0x000200f8u, 0x00000d6cu, 0x000700f5u, 0x00000013u, 0x0000b288u, 0x0000b219u, 0x00000d05u, 0x00000d80u, 0x00000d6bu, 0x000700f5u, 0x00000013u, 0x0000b229u, 0x0000b219u, 0x00000d05u, 0x00000d76u, 0x00000d6bu, 0x0004003du, 0x00000063u, 0x00000d81u, 0x0000012eu, 0x000300f7u, 0x00000d83u, 0x00000000u, 0x000400fau, 0x00000d81u, 0x00000d82u, 0x00000d83u, 0x000200f8u, 0x00000d82u, 0x00050050u, 0x00000058u, 0x00000d86u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000d87u, 0x00000d86u, 0x0004003du, 0x00000029u, 0x00000d89u, 0x00000128u, 0x0003003eu, 0x00000d88u, 0x00000d89u, 0x0004003du, 0x00000006u, 0x00000d8bu, 0x00000129u, 0x0003003eu, 0x00000d8au, 0x00000d8bu, 0x0003003eu, 0x00000d8cu, 0x00000d87u, 0x00070039u, 0x00000013u, 0x00000d8du, 0x000000f2u, 0x00000d88u, 0x00000d8au, 0x00000d8cu, 0x0003003eu, 0x00000c54u, 0x00000d8du, 0x000200f9u, 0x00000d83u, 0x000200f8u, 0x00000d83u, 0x000700f5u, 0x00000013u, 0x0000b2b6u, 0x0000b219u, 0x00000d6cu, 0x00000d8du, 0x00000d82u, 0x000200f9u, 0x00000d07u, 0x000200f8u, 0x00000d06u, 0x0004007cu, 0x000000abu, 0x00000d90u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000d92u, 0x00000128u, 0x0003003eu, 0x00000d91u, 0x00000d92u, 0x0004003du, 0x00000006u, 0x00000d94u, 0x00000129u, 0x0003003eu, 0x00000d93u, 0x00000d94u, 0x0003003eu, 0x00000d95u, 0x00000d90u, 0x00070039u, 0x00000013u, 0x00000d96u, 0x000000fcu, 0x00000d91u, 0x00000d93u, 0x00000d95u, 0x0003003eu, 0x00000c11u, 0x00000d96u, 0x0004003du, 0x00000063u, 0x00000d97u, 0x0000012du, 0x000300f7u, 0x00000d99u, 0x00000000u, 0x000400fau, 0x00000d97u, 0x00000d98u, 0x00000d99u, 0x000200f8u, 0x00000d98u, 0x00050050u, 0x00000058u, 0x00000d9cu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000d9du, 0x00000d9cu, 0x0004003du, 0x00000029u, 0x00000d9fu, 0x00000128u, 0x0003003eu, 0x00000d9eu, 0x00000d9fu, 0x0004003du, 0x00000006u, 0x00000da1u, 0x00000129u, 0x0003003eu, 0x00000da0u, 0x00000da1u, 0x0003003eu, 0x00000da2u, 0x00000d9du, 0x00070039u, 0x00000013u, 0x00000da3u, 0x000000fcu, 0x00000d9eu, 0x00000da0u, 0x00000da2u, 0x0003003eu, 0x00000c29u, 0x00000da3u, 0x00050050u, 0x00000058u, 0x00000da6u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000da7u, 0x00000da6u, 0x0004003du, 0x00000029u, 0x00000da9u, 0x00000128u, 0x0003003eu, 0x00000da8u, 0x00000da9u, 0x0004003du, 0x00000006u, 0x00000dabu, 0x00000129u, 0x0003003eu, 0x00000daau, 0x00000dabu, 0x0003003eu, 0x00000dacu, 0x00000da7u, 0x00070039u, 0x00000013u, 0x00000dadu, 0x000000fcu, 0x00000da8u, 0x00000daau, 0x00000dacu, 0x0003003eu, 0x00000c3du, 0x00000dadu, 0x000200f9u, 0x00000d99u, 0x000200f8u, 0x00000d99u, 0x000700f5u, 0x00000013u, 0x0000b28au, 0x0000b219u, 0x00000d06u, 0x00000dadu, 0x00000d98u, 0x000700f5u, 0x00000013u, 0x0000b22bu, 0x0000b219u, 0x00000d06u, 0x00000da3u, 0x00000d98u, 0x0004003du, 0x00000063u, 0x00000daeu, 0x0000012eu, 0x000300f7u, 0x00000db0u, 0x00000000u, 0x000400fau, 0x00000daeu, 0x00000dafu, 0x00000db0u, 0x000200f8u, 0x00000dafu, 0x00050050u, 0x00000058u, 0x00000db3u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000db4u, 0x00000db3u, 0x0004003du, 0x00000029u, 0x00000db6u, 0x00000128u, 0x0003003eu, 0x00000db5u, 0x00000db6u, 0x0004003du, 0x00000006u, 0x00000db8u, 0x00000129u, 0x0003003eu, 0x00000db7u, 0x00000db8u, 0x0003003eu, 0x00000db9u, 0x00000db4u, 0x00070039u, 0x00000013u, 0x00000dbau, 0x000000fcu, 0x00000db5u, 0x00000db7u, 0x00000db9u, 0x0003003eu, 0x00000c54u, 0x00000dbau, 0x000200f9u, 0x00000db0u, 0x000200f8u, 0x00000db0u, 0x000700f5u, 0x00000013u, 0x0000b2b8u, 0x0000b219u, 0x00000d99u, 0x00000dbau, 0x00000dafu, 0x000200f9u, 0x00000d07u, 0x000200f8u, 0x00000d07u, 0x000d00f5u, 0x00000013u, 0x0000b2b1u, 0x0000b219u, 0x00000cf9u, 0x0000b2b2u, 0x00000d29u, 0x0000b2b4u, 0x00000d56u, 0x0000b2b6u, 0x00000d83u, 0x0000b2b8u, 0x00000db0u, 0x000d00f5u, 0x00000013u, 0x0000b282u, 0x0000b219u, 0x00000cf9u, 0x0000b284u, 0x00000d29u, 0x0000b286u, 0x00000d56u, 0x0000b288u, 0x00000d83u, 0x0000b28au, 0x00000db0u, 0x000d00f5u, 0x00000013u, 0x0000b252u, 0x0000b219u, 0x00000cf9u, 0x00000d0fu, 0x00000d29u, 0x00000d3cu, 0x00000d56u, 0x00000d69u, 0x00000d83u, 0x00000d96u, 0x00000db0u, 0x000d00f5u, 0x00000013u, 0x0000b223u, 0x0000b219u, 0x00000cf9u, 0x0000b225u, 0x00000d29u, 0x0000b227u, 0x00000d56u, 0x0000b229u, 0x00000d83u, 0x0000b22bu, 0x00000db0u, 0x000200f9u, 0x00000cfeu, 0x000200f8u, 0x00000cfau, 0x000500c3u, 0x00000008u, 0x00000dc0u, 0x00000bb5u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x00000dc1u, 0x00000dc0u, 0x0003003eu, 0x00000dbeu, 0x00000dc1u, 0x00050082u, 0x00000008u, 0x00000dc6u, 0x00000bc4u, 0x00000bb5u, 0x00050080u, 0x00000008u, 0x00000dc7u, 0x00000bc4u, 0x00000dc6u, 0x000500c3u, 0x00000008u, 0x00000dc8u, 0x00000dc7u, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x00000dc9u, 0x00000dc8u, 0x0003003eu, 0x00000dc2u, 0x00000dc9u, 0x00050050u, 0x00000058u, 0x00000dccu, 0x00000bb5u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000dcdu, 0x00000dccu, 0x0004003du, 0x00000029u, 0x00000dcfu, 0x00000128u, 0x0003003eu, 0x00000dceu, 0x00000dcfu, 0x0004003du, 0x00000006u, 0x00000dd1u, 0x00000129u, 0x0003003eu, 0x00000dd0u, 0x00000dd1u, 0x0003003eu, 0x00000dd2u, 0x00000dcdu, 0x0003003eu, 0x00000dd3u, 0x00000dc1u, 0x00080039u, 0x00000013u, 0x00000dd5u, 0x000000edu, 0x00000dceu, 0x00000dd0u, 0x00000dd2u, 0x00000dd3u, 0x0003003eu, 0x00000c11u, 0x00000dd5u, 0x0004003du, 0x00000063u, 0x00000dd6u, 0x0000012du, 0x000300f7u, 0x00000dd8u, 0x00000000u, 0x000400fau, 0x00000dd6u, 0x00000dd7u, 0x00000dd8u, 0x000200f8u, 0x00000dd7u, 0x00050050u, 0x00000058u, 0x00000ddbu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000ddcu, 0x00000ddbu, 0x0004003du, 0x00000029u, 0x00000ddeu, 0x00000128u, 0x0003003eu, 0x00000dddu, 0x00000ddeu, 0x0004003du, 0x00000006u, 0x00000de0u, 0x00000129u, 0x0003003eu, 0x00000ddfu, 0x00000de0u, 0x0003003eu, 0x00000de1u, 0x00000ddcu, 0x0003003eu, 0x00000de2u, 0x00000dc9u, 0x00080039u, 0x00000013u, 0x00000de4u, 0x000000edu, 0x00000dddu, 0x00000ddfu, 0x00000de1u, 0x00000de2u, 0x0003003eu, 0x00000c29u, 0x00000de4u, 0x00050050u, 0x00000058u, 0x00000de7u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000de8u, 0x00000de7u, 0x0004003du, 0x00000029u, 0x00000deau, 0x00000128u, 0x0003003eu, 0x00000de9u, 0x00000deau, 0x0004003du, 0x00000006u, 0x00000decu, 0x00000129u, 0x0003003eu, 0x00000debu, 0x00000decu, 0x0003003eu, 0x00000dedu, 0x00000de8u, 0x0003003eu, 0x00000deeu, 0x00000dc1u, 0x00080039u, 0x00000013u, 0x00000df0u, 0x000000edu, 0x00000de9u, 0x00000debu, 0x00000dedu, 0x00000deeu, 0x0003003eu, 0x00000c3du, 0x00000df0u, 0x00050050u, 0x00000058u, 0x00000df3u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000df4u, 0x00000df3u, 0x0004003du, 0x00000029u, 0x00000df6u, 0x00000128u, 0x0003003eu, 0x00000df5u, 0x00000df6u, 0x0004003du, 0x00000006u, 0x00000df8u, 0x00000129u, 0x0003003eu, 0x00000df7u, 0x00000df8u, 0x0003003eu, 0x00000df9u, 0x00000df4u, 0x0003003eu, 0x00000dfau, 0x00000dc9u, 0x00080039u, 0x00000013u, 0x00000dfcu, 0x000000edu, 0x00000df5u, 0x00000df7u, 0x00000df9u, 0x00000dfau, 0x0003003eu, 0x00000c54u, 0x00000dfcu, 0x000200f9u, 0x00000dd8u, 0x000200f8u, 0x00000dd8u, 0x000700f5u, 0x00000013u, 0x0000b2bau, 0x0000b219u, 0x00000cfau, 0x00000dfcu, 0x00000dd7u, 0x000700f5u, 0x00000013u, 0x0000b28bu, 0x0000b219u, 0x00000cfau, 0x00000df0u, 0x00000dd7u, 0x000700f5u, 0x00000013u, 0x0000b22cu, 0x0000b219u, 0x00000cfau, 0x00000de4u, 0x00000dd7u, 0x000200f9u, 0x00000cfeu, 0x000200f8u, 0x00000cfbu, 0x00050041u, 0x00000174u, 0x00000dfeu, 0x00000128u, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x00000dffu, 0x00000dfeu, 0x00040071u, 0x00000006u, 0x00000e00u, 0x00000dffu, 0x0004007cu, 0x00000008u, 0x00000e01u, 0x00000e00u, 0x000300f7u, 0x00000e05u, 0x00000000u, 0x000700fbu, 0x00000e01u, 0x00000e04u, 0x00000000u, 0x00000e02u, 0x00000001u, 0x00000e03u, 0x000200f8u, 0x00000e04u, 0x0004007cu, 0x000000abu, 0x00000e71u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000e73u, 0x00000128u, 0x0003003eu, 0x00000e72u, 0x00000e73u, 0x0004003du, 0x00000006u, 0x00000e75u, 0x00000129u, 0x0003003eu, 0x00000e74u, 0x00000e75u, 0x0003003eu, 0x00000e76u, 0x00000e71u, 0x00070039u, 0x00000013u, 0x00000e77u, 0x000000d5u, 0x00000e72u, 0x00000e74u, 0x00000e76u, 0x0003003eu, 0x00000c11u, 0x00000e77u, 0x0004003du, 0x00000063u, 0x00000e78u, 0x0000012du, 0x000300f7u, 0x00000e7au, 0x00000000u, 0x000400fau, 0x00000e78u, 0x00000e79u, 0x00000e7au, 0x000200f8u, 0x00000e79u, 0x00050050u, 0x00000058u, 0x00000e7du, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000e7eu, 0x00000e7du, 0x0004003du, 0x00000029u, 0x00000e80u, 0x00000128u, 0x0003003eu, 0x00000e7fu, 0x00000e80u, 0x0004003du, 0x00000006u, 0x00000e82u, 0x00000129u, 0x0003003eu, 0x00000e81u, 0x00000e82u, 0x0003003eu, 0x00000e83u, 0x00000e7eu, 0x00070039u, 0x00000013u, 0x00000e84u, 0x000000d5u, 0x00000e7fu, 0x00000e81u, 0x00000e83u, 0x0003003eu, 0x00000c29u, 0x00000e84u, 0x00050050u, 0x00000058u, 0x00000e87u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000e88u, 0x00000e87u, 0x0004003du, 0x00000029u, 0x00000e8au, 0x00000128u, 0x0003003eu, 0x00000e89u, 0x00000e8au, 0x0004003du, 0x00000006u, 0x00000e8cu, 0x00000129u, 0x0003003eu, 0x00000e8bu, 0x00000e8cu, 0x0003003eu, 0x00000e8du, 0x00000e88u, 0x00070039u, 0x00000013u, 0x00000e8eu, 0x000000d5u, 0x00000e89u, 0x00000e8bu, 0x00000e8du, 0x0003003eu, 0x00000c3du, 0x00000e8eu, 0x000200f9u, 0x00000e7au, 0x000200f8u, 0x00000e7au, 0x000700f5u, 0x00000013u, 0x0000b28eu, 0x0000b219u, 0x00000e04u, 0x00000e8eu, 0x00000e79u, 0x000700f5u, 0x00000013u, 0x0000b22fu, 0x0000b219u, 0x00000e04u, 0x00000e84u, 0x00000e79u, 0x0004003du, 0x00000063u, 0x00000e8fu, 0x0000012eu, 0x000300f7u, 0x00000e91u, 0x00000000u, 0x000400fau, 0x00000e8fu, 0x00000e90u, 0x00000e91u, 0x000200f8u, 0x00000e90u, 0x00050050u, 0x00000058u, 0x00000e94u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000e95u, 0x00000e94u, 0x0004003du, 0x00000029u, 0x00000e97u, 0x00000128u, 0x0003003eu, 0x00000e96u, 0x00000e97u, 0x0004003du, 0x00000006u, 0x00000e99u, 0x00000129u, 0x0003003eu, 0x00000e98u, 0x00000e99u, 0x0003003eu, 0x00000e9au, 0x00000e95u, 0x00070039u, 0x00000013u, 0x00000e9bu, 0x000000d5u, 0x00000e96u, 0x00000e98u, 0x00000e9au, 0x0003003eu, 0x00000c54u, 0x00000e9bu, 0x000200f9u, 0x00000e91u, 0x000200f8u, 0x00000e91u, 0x000700f5u, 0x00000013u, 0x0000b2bcu, 0x0000b219u, 0x00000e7au, 0x00000e9bu, 0x00000e90u, 0x000200f9u, 0x00000e05u, 0x000200f8u, 0x00000e02u, 0x0004007cu, 0x000000abu, 0x00000e07u, 0x0000b189u, 0x00050041u, 0x00000174u, 0x00000e08u, 0x00000128u, 0x000001d9u, 0x0004003du, 0x0000000fu, 0x00000e09u, 0x00000e08u, 0x00040071u, 0x00000006u, 0x00000e0au, 0x00000e09u, 0x0004003du, 0x00000029u, 0x00000e0cu, 0x00000128u, 0x0003003eu, 0x00000e0bu, 0x00000e0cu, 0x0004003du, 0x00000006u, 0x00000e0eu, 0x00000129u, 0x0003003eu, 0x00000e0du, 0x00000e0eu, 0x0003003eu, 0x00000e0fu, 0x00000e07u, 0x0003003eu, 0x00000e10u, 0x00000e0au, 0x00080039u, 0x00000013u, 0x00000e11u, 0x000000bdu, 0x00000e0bu, 0x00000e0du, 0x00000e0fu, 0x00000e10u, 0x0003003eu, 0x00000c11u, 0x00000e11u, 0x0004003du, 0x00000063u, 0x00000e12u, 0x0000012du, 0x000300f7u, 0x00000e14u, 0x00000000u, 0x000400fau, 0x00000e12u, 0x00000e13u, 0x00000e14u, 0x000200f8u, 0x00000e13u, 0x00050050u, 0x00000058u, 0x00000e17u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000e18u, 0x00000e17u, 0x0004003du, 0x0000000fu, 0x00000e1au, 0x00000e08u, 0x00040071u, 0x00000006u, 0x00000e1bu, 0x00000e1au, 0x0004003du, 0x00000029u, 0x00000e1du, 0x00000128u, 0x0003003eu, 0x00000e1cu, 0x00000e1du, 0x0004003du, 0x00000006u, 0x00000e1fu, 0x00000129u, 0x0003003eu, 0x00000e1eu, 0x00000e1fu, 0x0003003eu, 0x00000e20u, 0x00000e18u, 0x0003003eu, 0x00000e21u, 0x00000e1bu, 0x00080039u, 0x00000013u, 0x00000e22u, 0x000000bdu, 0x00000e1cu, 0x00000e1eu, 0x00000e20u, 0x00000e21u, 0x0003003eu, 0x00000c29u, 0x00000e22u, 0x00050050u, 0x00000058u, 0x00000e25u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000e26u, 0x00000e25u, 0x0004003du, 0x0000000fu, 0x00000e28u, 0x00000e08u, 0x00040071u, 0x00000006u, 0x00000e29u, 0x00000e28u, 0x0004003du, 0x00000029u, 0x00000e2bu, 0x00000128u, 0x0003003eu, 0x00000e2au, 0x00000e2bu, 0x0004003du, 0x00000006u, 0x00000e2du, 0x00000129u, 0x0003003eu, 0x00000e2cu, 0x00000e2du, 0x0003003eu, 0x00000e2eu, 0x00000e26u, 0x0003003eu, 0x00000e2fu, 0x00000e29u, 0x00080039u, 0x00000013u, 0x00000e30u, 0x000000bdu, 0x00000e2au, 0x00000e2cu, 0x00000e2eu, 0x00000e2fu, 0x0003003eu, 0x00000c3du, 0x00000e30u, 0x000200f9u, 0x00000e14u, 0x000200f8u, 0x00000e14u, 0x000700f5u, 0x00000013u, 0x0000b290u, 0x0000b219u, 0x00000e02u, 0x00000e30u, 0x00000e13u, 0x000700f5u, 0x00000013u, 0x0000b231u, 0x0000b219u, 0x00000e02u, 0x00000e22u, 0x00000e13u, 0x0004003du, 0x00000063u, 0x00000e31u, 0x0000012eu, 0x000300f7u, 0x00000e33u, 0x00000000u, 0x000400fau, 0x00000e31u, 0x00000e32u, 0x00000e33u, 0x000200f8u, 0x00000e32u, 0x00050050u, 0x00000058u, 0x00000e36u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000e37u, 0x00000e36u, 0x0004003du, 0x0000000fu, 0x00000e39u, 0x00000e08u, 0x00040071u, 0x00000006u, 0x00000e3au, 0x00000e39u, 0x0004003du, 0x00000029u, 0x00000e3cu, 0x00000128u, 0x0003003eu, 0x00000e3bu, 0x00000e3cu, 0x0004003du, 0x00000006u, 0x00000e3eu, 0x00000129u, 0x0003003eu, 0x00000e3du, 0x00000e3eu, 0x0003003eu, 0x00000e3fu, 0x00000e37u, 0x0003003eu, 0x00000e40u, 0x00000e3au, 0x00080039u, 0x00000013u, 0x00000e41u, 0x000000bdu, 0x00000e3bu, 0x00000e3du, 0x00000e3fu, 0x00000e40u, 0x0003003eu, 0x00000c54u, 0x00000e41u, 0x000200f9u, 0x00000e33u, 0x000200f8u, 0x00000e33u, 0x000700f5u, 0x00000013u, 0x0000b2beu, 0x0000b219u, 0x00000e14u, 0x00000e41u, 0x00000e32u, 0x000200f9u, 0x00000e05u, 0x000200f8u, 0x00000e03u, 0x0004007cu, 0x000000abu, 0x00000e44u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000e46u, 0x00000128u, 0x0003003eu, 0x00000e45u, 0x00000e46u, 0x0004003du, 0x00000006u, 0x00000e48u, 0x00000129u, 0x0003003eu, 0x00000e47u, 0x00000e48u, 0x0003003eu, 0x00000e49u, 0x00000e44u, 0x00070039u, 0x00000013u, 0x00000e4au, 0x000000e2u, 0x00000e45u, 0x00000e47u, 0x00000e49u, 0x0003003eu, 0x00000c11u, 0x00000e4au, 0x0004003du, 0x00000063u, 0x00000e4bu, 0x0000012du, 0x000300f7u, 0x00000e4du, 0x00000000u, 0x000400fau, 0x00000e4bu, 0x00000e4cu, 0x00000e4du, 0x000200f8u, 0x00000e4cu, 0x00050050u, 0x00000058u, 0x00000e50u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000e51u, 0x00000e50u, 0x0004003du, 0x00000029u, 0x00000e53u, 0x00000128u, 0x0003003eu, 0x00000e52u, 0x00000e53u, 0x0004003du, 0x00000006u, 0x00000e55u, 0x00000129u, 0x0003003eu, 0x00000e54u, 0x00000e55u, 0x0003003eu, 0x00000e56u, 0x00000e51u, 0x00070039u, 0x00000013u, 0x00000e57u, 0x000000e2u, 0x00000e52u, 0x00000e54u, 0x00000e56u, 0x0003003eu, 0x00000c29u, 0x00000e57u, 0x00050050u, 0x00000058u, 0x00000e5au, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000e5bu, 0x00000e5au, 0x0004003du, 0x00000029u, 0x00000e5du, 0x00000128u, 0x0003003eu, 0x00000e5cu, 0x00000e5du, 0x0004003du, 0x00000006u, 0x00000e5fu, 0x00000129u, 0x0003003eu, 0x00000e5eu, 0x00000e5fu, 0x0003003eu, 0x00000e60u, 0x00000e5bu, 0x00070039u, 0x00000013u, 0x00000e61u, 0x000000e2u, 0x00000e5cu, 0x00000e5eu, 0x00000e60u, 0x0003003eu, 0x00000c3du, 0x00000e61u, 0x000200f9u, 0x00000e4du, 0x000200f8u, 0x00000e4du, 0x000700f5u, 0x00000013u, 0x0000b292u, 0x0000b219u, 0x00000e03u, 0x00000e61u, 0x00000e4cu, 0x000700f5u, 0x00000013u, 0x0000b233u, 0x0000b219u, 0x00000e03u, 0x00000e57u, 0x00000e4cu, 0x0004003du, 0x00000063u, 0x00000e62u, 0x0000012eu, 0x000300f7u, 0x00000e64u, 0x00000000u, 0x000400fau, 0x00000e62u, 0x00000e63u, 0x00000e64u, 0x000200f8u, 0x00000e63u, 0x00050050u, 0x00000058u, 0x00000e67u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000e68u, 0x00000e67u, 0x0004003du, 0x00000029u, 0x00000e6au, 0x00000128u, 0x0003003eu, 0x00000e69u, 0x00000e6au, 0x0004003du, 0x00000006u, 0x00000e6cu, 0x00000129u, 0x0003003eu, 0x00000e6bu, 0x00000e6cu, 0x0003003eu, 0x00000e6du, 0x00000e68u, 0x00070039u, 0x00000013u, 0x00000e6eu, 0x000000e2u, 0x00000e69u, 0x00000e6bu, 0x00000e6du, 0x0003003eu, 0x00000c54u, 0x00000e6eu, 0x000200f9u, 0x00000e64u, 0x000200f8u, 0x00000e64u, 0x000700f5u, 0x00000013u, 0x0000b2c0u, 0x0000b219u, 0x00000e4du, 0x00000e6eu, 0x00000e63u, 0x000200f9u, 0x00000e05u, 0x000200f8u, 0x00000e05u, 0x000900f5u, 0x00000013u, 0x0000b2bbu, 0x0000b2bcu, 0x00000e91u, 0x0000b2beu, 0x00000e33u, 0x0000b2c0u, 0x00000e64u, 0x000900f5u, 0x00000013u, 0x0000b28cu, 0x0000b28eu, 0x00000e91u, 0x0000b290u, 0x00000e33u, 0x0000b292u, 0x00000e64u, 0x000900f5u, 0x00000013u, 0x0000b25cu, 0x00000e77u, 0x00000e91u, 0x00000e11u, 0x00000e33u, 0x00000e4au, 0x00000e64u, 0x000900f5u, 0x00000013u, 0x0000b22du, 0x0000b22fu, 0x00000e91u, 0x0000b231u, 0x00000e33u, 0x0000b233u, 0x00000e64u, 0x000200f9u, 0x00000cfeu, 0x000200f8u, 0x00000cfcu, 0x00050041u, 0x00000174u, 0x00000e9fu, 0x00000128u, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x00000ea0u, 0x00000e9fu, 0x00040071u, 0x00000006u, 0x00000ea1u, 0x00000ea0u, 0x0004007cu, 0x00000008u, 0x00000ea2u, 0x00000ea1u, 0x000300f7u, 0x00000ea7u, 0x00000000u, 0x000b00fbu, 0x00000ea2u, 0x00000ea7u, 0x00000000u, 0x00000ea3u, 0x00000001u, 0x00000ea4u, 0x00000002u, 0x00000ea5u, 0x00000003u, 0x00000ea6u, 0x000200f8u, 0x00000ea3u, 0x0004007cu, 0x000000abu, 0x00000ea9u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000eabu, 0x00000128u, 0x0003003eu, 0x00000eaau, 0x00000eabu, 0x0004003du, 0x00000006u, 0x00000eadu, 0x00000129u, 0x0003003eu, 0x00000eacu, 0x00000eadu, 0x0003003eu, 0x00000eaeu, 0x00000ea9u, 0x00070039u, 0x00000013u, 0x00000eafu, 0x000000b6u, 0x00000eaau, 0x00000eacu, 0x00000eaeu, 0x0003003eu, 0x00000c11u, 0x00000eafu, 0x0004003du, 0x00000063u, 0x00000eb0u, 0x0000012du, 0x000300f7u, 0x00000eb2u, 0x00000000u, 0x000400fau, 0x00000eb0u, 0x00000eb1u, 0x00000eb2u, 0x000200f8u, 0x00000eb1u, 0x00050050u, 0x00000058u, 0x00000eb5u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000eb6u, 0x00000eb5u, 0x0004003du, 0x00000029u, 0x00000eb8u, 0x00000128u, 0x0003003eu, 0x00000eb7u, 0x00000eb8u, 0x0004003du, 0x00000006u, 0x00000ebau, 0x00000129u, 0x0003003eu, 0x00000eb9u, 0x00000ebau, 0x0003003eu, 0x00000ebbu, 0x00000eb6u, 0x00070039u, 0x00000013u, 0x00000ebcu, 0x000000b6u, 0x00000eb7u, 0x00000eb9u, 0x00000ebbu, 0x0003003eu, 0x00000c29u, 0x00000ebcu, 0x00050050u, 0x00000058u, 0x00000ebfu, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000ec0u, 0x00000ebfu, 0x0004003du, 0x00000029u, 0x00000ec2u, 0x00000128u, 0x0003003eu, 0x00000ec1u, 0x00000ec2u, 0x0004003du, 0x00000006u, 0x00000ec4u, 0x00000129u, 0x0003003eu, 0x00000ec3u, 0x00000ec4u, 0x0003003eu, 0x00000ec5u, 0x00000ec0u, 0x00070039u, 0x00000013u, 0x00000ec6u, 0x000000b6u, 0x00000ec1u, 0x00000ec3u, 0x00000ec5u, 0x0003003eu, 0x00000c3du, 0x00000ec6u, 0x000200f9u, 0x00000eb2u, 0x000200f8u, 0x00000eb2u, 0x000700f5u, 0x00000013u, 0x0000b295u, 0x0000b219u, 0x00000ea3u, 0x00000ec6u, 0x00000eb1u, 0x000700f5u, 0x00000013u, 0x0000b236u, 0x0000b219u, 0x00000ea3u, 0x00000ebcu, 0x00000eb1u, 0x0004003du, 0x00000063u, 0x00000ec7u, 0x0000012eu, 0x000300f7u, 0x00000ec9u, 0x00000000u, 0x000400fau, 0x00000ec7u, 0x00000ec8u, 0x00000ec9u, 0x000200f8u, 0x00000ec8u, 0x00050050u, 0x00000058u, 0x00000eccu, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000ecdu, 0x00000eccu, 0x0004003du, 0x00000029u, 0x00000ecfu, 0x00000128u, 0x0003003eu, 0x00000eceu, 0x00000ecfu, 0x0004003du, 0x00000006u, 0x00000ed1u, 0x00000129u, 0x0003003eu, 0x00000ed0u, 0x00000ed1u, 0x0003003eu, 0x00000ed2u, 0x00000ecdu, 0x00070039u, 0x00000013u, 0x00000ed3u, 0x000000b6u, 0x00000eceu, 0x00000ed0u, 0x00000ed2u, 0x0003003eu, 0x00000c54u, 0x00000ed3u, 0x000200f9u, 0x00000ec9u, 0x000200f8u, 0x00000ec9u, 0x000700f5u, 0x00000013u, 0x0000b2c3u, 0x0000b219u, 0x00000eb2u, 0x00000ed3u, 0x00000ec8u, 0x000200f9u, 0x00000ea7u, 0x000200f8u, 0x00000ea4u, 0x0004007cu, 0x000000abu, 0x00000ed6u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000ed8u, 0x00000128u, 0x0003003eu, 0x00000ed7u, 0x00000ed8u, 0x0004003du, 0x00000006u, 0x00000edau, 0x00000129u, 0x0003003eu, 0x00000ed9u, 0x00000edau, 0x0003003eu, 0x00000edbu, 0x00000ed6u, 0x00070039u, 0x00000013u, 0x00000edcu, 0x000000e7u, 0x00000ed7u, 0x00000ed9u, 0x00000edbu, 0x0003003eu, 0x00000c11u, 0x00000edcu, 0x0004003du, 0x00000063u, 0x00000eddu, 0x0000012du, 0x000300f7u, 0x00000edfu, 0x00000000u, 0x000400fau, 0x00000eddu, 0x00000edeu, 0x00000edfu, 0x000200f8u, 0x00000edeu, 0x00050050u, 0x00000058u, 0x00000ee2u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000ee3u, 0x00000ee2u, 0x0004003du, 0x00000029u, 0x00000ee5u, 0x00000128u, 0x0003003eu, 0x00000ee4u, 0x00000ee5u, 0x0004003du, 0x00000006u, 0x00000ee7u, 0x00000129u, 0x0003003eu, 0x00000ee6u, 0x00000ee7u, 0x0003003eu, 0x00000ee8u, 0x00000ee3u, 0x00070039u, 0x00000013u, 0x00000ee9u, 0x000000e7u, 0x00000ee4u, 0x00000ee6u, 0x00000ee8u, 0x0003003eu, 0x00000c29u, 0x00000ee9u, 0x00050050u, 0x00000058u, 0x00000eecu, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000eedu, 0x00000eecu, 0x0004003du, 0x00000029u, 0x00000eefu, 0x00000128u, 0x0003003eu, 0x00000eeeu, 0x00000eefu, 0x0004003du, 0x00000006u, 0x00000ef1u, 0x00000129u, 0x0003003eu, 0x00000ef0u, 0x00000ef1u, 0x0003003eu, 0x00000ef2u, 0x00000eedu, 0x00070039u, 0x00000013u, 0x00000ef3u, 0x000000e7u, 0x00000eeeu, 0x00000ef0u, 0x00000ef2u, 0x0003003eu, 0x00000c3du, 0x00000ef3u, 0x000200f9u, 0x00000edfu, 0x000200f8u, 0x00000edfu, 0x000700f5u, 0x00000013u, 0x0000b297u, 0x0000b219u, 0x00000ea4u, 0x00000ef3u, 0x00000edeu, 0x000700f5u, 0x00000013u, 0x0000b238u, 0x0000b219u, 0x00000ea4u, 0x00000ee9u, 0x00000edeu, 0x0004003du, 0x00000063u, 0x00000ef4u, 0x0000012eu, 0x000300f7u, 0x00000ef6u, 0x00000000u, 0x000400fau, 0x00000ef4u, 0x00000ef5u, 0x00000ef6u, 0x000200f8u, 0x00000ef5u, 0x00050050u, 0x00000058u, 0x00000ef9u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000efau, 0x00000ef9u, 0x0004003du, 0x00000029u, 0x00000efcu, 0x00000128u, 0x0003003eu, 0x00000efbu, 0x00000efcu, 0x0004003du, 0x00000006u, 0x00000efeu, 0x00000129u, 0x0003003eu, 0x00000efdu, 0x00000efeu, 0x0003003eu, 0x00000effu, 0x00000efau, 0x00070039u, 0x00000013u, 0x00000f00u, 0x000000e7u, 0x00000efbu, 0x00000efdu, 0x00000effu, 0x0003003eu, 0x00000c54u, 0x00000f00u, 0x000200f9u, 0x00000ef6u, 0x000200f8u, 0x00000ef6u, 0x000700f5u, 0x00000013u, 0x0000b2c5u, 0x0000b219u, 0x00000edfu, 0x00000f00u, 0x00000ef5u, 0x000200f9u, 0x00000ea7u, 0x000200f8u, 0x00000ea5u, 0x0004007cu, 0x000000abu, 0x00000f03u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000f05u, 0x00000128u, 0x0003003eu, 0x00000f04u, 0x00000f05u, 0x0004003du, 0x00000006u, 0x00000f07u, 0x00000129u, 0x0003003eu, 0x00000f06u, 0x00000f07u, 0x0003003eu, 0x00000f08u, 0x00000f03u, 0x00070039u, 0x00000013u, 0x00000f09u, 0x000000f7u, 0x00000f04u, 0x00000f06u, 0x00000f08u, 0x0003003eu, 0x00000c11u, 0x00000f09u, 0x0004003du, 0x00000063u, 0x00000f0au, 0x0000012du, 0x000300f7u, 0x00000f0cu, 0x00000000u, 0x000400fau, 0x00000f0au, 0x00000f0bu, 0x00000f0cu, 0x000200f8u, 0x00000f0bu, 0x00050050u, 0x00000058u, 0x00000f0fu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000f10u, 0x00000f0fu, 0x0004003du, 0x00000029u, 0x00000f12u, 0x00000128u, 0x0003003eu, 0x00000f11u, 0x00000f12u, 0x0004003du, 0x00000006u, 0x00000f14u, 0x00000129u, 0x0003003eu, 0x00000f13u, 0x00000f14u, 0x0003003eu, 0x00000f15u, 0x00000f10u, 0x00070039u, 0x00000013u, 0x00000f16u, 0x000000f7u, 0x00000f11u, 0x00000f13u, 0x00000f15u, 0x0003003eu, 0x00000c29u, 0x00000f16u, 0x00050050u, 0x00000058u, 0x00000f19u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000f1au, 0x00000f19u, 0x0004003du, 0x00000029u, 0x00000f1cu, 0x00000128u, 0x0003003eu, 0x00000f1bu, 0x00000f1cu, 0x0004003du, 0x00000006u, 0x00000f1eu, 0x00000129u, 0x0003003eu, 0x00000f1du, 0x00000f1eu, 0x0003003eu, 0x00000f1fu, 0x00000f1au, 0x00070039u, 0x00000013u, 0x00000f20u, 0x000000f7u, 0x00000f1bu, 0x00000f1du, 0x00000f1fu, 0x0003003eu, 0x00000c3du, 0x00000f20u, 0x000200f9u, 0x00000f0cu, 0x000200f8u, 0x00000f0cu, 0x000700f5u, 0x00000013u, 0x0000b299u, 0x0000b219u, 0x00000ea5u, 0x00000f20u, 0x00000f0bu, 0x000700f5u, 0x00000013u, 0x0000b23au, 0x0000b219u, 0x00000ea5u, 0x00000f16u, 0x00000f0bu, 0x0004003du, 0x00000063u, 0x00000f21u, 0x0000012eu, 0x000300f7u, 0x00000f23u, 0x00000000u, 0x000400fau, 0x00000f21u, 0x00000f22u, 0x00000f23u, 0x000200f8u, 0x00000f22u, 0x00050050u, 0x00000058u, 0x00000f26u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000f27u, 0x00000f26u, 0x0004003du, 0x00000029u, 0x00000f29u, 0x00000128u, 0x0003003eu, 0x00000f28u, 0x00000f29u, 0x0004003du, 0x00000006u, 0x00000f2bu, 0x00000129u, 0x0003003eu, 0x00000f2au, 0x00000f2bu, 0x0003003eu, 0x00000f2cu, 0x00000f27u, 0x00070039u, 0x00000013u, 0x00000f2du, 0x000000f7u, 0x00000f28u, 0x00000f2au, 0x00000f2cu, 0x0003003eu, 0x00000c54u, 0x00000f2du, 0x000200f9u, 0x00000f23u, 0x000200f8u, 0x00000f23u, 0x000700f5u, 0x00000013u, 0x0000b2c7u, 0x0000b219u, 0x00000f0cu, 0x00000f2du, 0x00000f22u, 0x000200f9u, 0x00000ea7u, 0x000200f8u, 0x00000ea6u, 0x0004007cu, 0x000000abu, 0x00000f30u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000f32u, 0x00000128u, 0x0003003eu, 0x00000f31u, 0x00000f32u, 0x0004003du, 0x00000006u, 0x00000f34u, 0x00000129u, 0x0003003eu, 0x00000f33u, 0x00000f34u, 0x0003003eu, 0x00000f35u, 0x00000f30u, 0x00070039u, 0x00000013u, 0x00000f36u, 0x000000d5u, 0x00000f31u, 0x00000f33u, 0x00000f35u, 0x0003003eu, 0x00000c11u, 0x00000f36u, 0x0004003du, 0x00000063u, 0x00000f37u, 0x0000012du, 0x000300f7u, 0x00000f39u, 0x00000000u, 0x000400fau, 0x00000f37u, 0x00000f38u, 0x00000f39u, 0x000200f8u, 0x00000f38u, 0x00050050u, 0x00000058u, 0x00000f3cu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000f3du, 0x00000f3cu, 0x0004003du, 0x00000029u, 0x00000f3fu, 0x00000128u, 0x0003003eu, 0x00000f3eu, 0x00000f3fu, 0x0004003du, 0x00000006u, 0x00000f41u, 0x00000129u, 0x0003003eu, 0x00000f40u, 0x00000f41u, 0x0003003eu, 0x00000f42u, 0x00000f3du, 0x00070039u, 0x00000013u, 0x00000f43u, 0x000000d5u, 0x00000f3eu, 0x00000f40u, 0x00000f42u, 0x0003003eu, 0x00000c29u, 0x00000f43u, 0x00050050u, 0x00000058u, 0x00000f46u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000f47u, 0x00000f46u, 0x0004003du, 0x00000029u, 0x00000f49u, 0x00000128u, 0x0003003eu, 0x00000f48u, 0x00000f49u, 0x0004003du, 0x00000006u, 0x00000f4bu, 0x00000129u, 0x0003003eu, 0x00000f4au, 0x00000f4bu, 0x0003003eu, 0x00000f4cu, 0x00000f47u, 0x00070039u, 0x00000013u, 0x00000f4du, 0x000000d5u, 0x00000f48u, 0x00000f4au, 0x00000f4cu, 0x0003003eu, 0x00000c3du, 0x00000f4du, 0x000200f9u, 0x00000f39u, 0x000200f8u, 0x00000f39u, 0x000700f5u, 0x00000013u, 0x0000b29bu, 0x0000b219u, 0x00000ea6u, 0x00000f4du, 0x00000f38u, 0x000700f5u, 0x00000013u, 0x0000b23cu, 0x0000b219u, 0x00000ea6u, 0x00000f43u, 0x00000f38u, 0x0004003du, 0x00000063u, 0x00000f4eu, 0x0000012eu, 0x000300f7u, 0x00000f50u, 0x00000000u, 0x000400fau, 0x00000f4eu, 0x00000f4fu, 0x00000f50u, 0x000200f8u, 0x00000f4fu, 0x00050050u, 0x00000058u, 0x00000f53u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000f54u, 0x00000f53u, 0x0004003du, 0x00000029u, 0x00000f56u, 0x00000128u, 0x0003003eu, 0x00000f55u, 0x00000f56u, 0x0004003du, 0x00000006u, 0x00000f58u, 0x00000129u, 0x0003003eu, 0x00000f57u, 0x00000f58u, 0x0003003eu, 0x00000f59u, 0x00000f54u, 0x00070039u, 0x00000013u, 0x00000f5au, 0x000000d5u, 0x00000f55u, 0x00000f57u, 0x00000f59u, 0x0003003eu, 0x00000c54u, 0x00000f5au, 0x000200f9u, 0x00000f50u, 0x000200f8u, 0x00000f50u, 0x000700f5u, 0x00000013u, 0x0000b2c9u, 0x0000b219u, 0x00000f39u, 0x00000f5au, 0x00000f4fu, 0x000200f9u, 0x00000ea7u, 0x000200f8u, 0x00000ea7u, 0x000d00f5u, 0x00000013u, 0x0000b2c2u, 0x0000b219u, 0x00000cfcu, 0x0000b2c3u, 0x00000ec9u, 0x0000b2c5u, 0x00000ef6u, 0x0000b2c7u, 0x00000f23u, 0x0000b2c9u, 0x00000f50u, 0x000d00f5u, 0x00000013u, 0x0000b293u, 0x0000b219u, 0x00000cfcu, 0x0000b295u, 0x00000ec9u, 0x0000b297u, 0x00000ef6u, 0x0000b299u, 0x00000f23u, 0x0000b29bu, 0x00000f50u, 0x000d00f5u, 0x00000013u, 0x0000b263u, 0x0000b219u, 0x00000cfcu, 0x00000eafu, 0x00000ec9u, 0x00000edcu, 0x00000ef6u, 0x00000f09u, 0x00000f23u, 0x00000f36u, 0x00000f50u, 0x000d00f5u, 0x00000013u, 0x0000b234u, 0x0000b219u, 0x00000cfcu, 0x0000b236u, 0x00000ec9u, 0x0000b238u, 0x00000ef6u, 0x0000b23au, 0x00000f23u, 0x0000b23cu, 0x00000f50u, 0x000200f9u, 0x00000cfeu, 0x000200f8u, 0x00000cfdu, 0x00050041u, 0x00000174u, 0x00000f5eu, 0x00000128u, 0x000001b8u, 0x0004003du, 0x0000000fu, 0x00000f5fu, 0x00000f5eu, 0x00040071u, 0x00000006u, 0x00000f60u, 0x00000f5fu, 0x0004007cu, 0x00000008u, 0x00000f61u, 0x00000f60u, 0x000300f7u, 0x00000f65u, 0x00000000u, 0x000700fbu, 0x00000f61u, 0x00000f64u, 0x00000000u, 0x00000f62u, 0x00000001u, 0x00000f63u, 0x000200f8u, 0x00000f64u, 0x0004007cu, 0x000000abu, 0x00000fc1u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000fc3u, 0x00000128u, 0x0003003eu, 0x00000fc2u, 0x00000fc3u, 0x0004003du, 0x00000006u, 0x00000fc5u, 0x00000129u, 0x0003003eu, 0x00000fc4u, 0x00000fc5u, 0x0003003eu, 0x00000fc6u, 0x00000fc1u, 0x00070039u, 0x00000013u, 0x00000fc7u, 0x000000d5u, 0x00000fc2u, 0x00000fc4u, 0x00000fc6u, 0x0003003eu, 0x00000c11u, 0x00000fc7u, 0x0004003du, 0x00000063u, 0x00000fc8u, 0x0000012du, 0x000300f7u, 0x00000fcau, 0x00000000u, 0x000400fau, 0x00000fc8u, 0x00000fc9u, 0x00000fcau, 0x000200f8u, 0x00000fc9u, 0x00050050u, 0x00000058u, 0x00000fcdu, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000fceu, 0x00000fcdu, 0x0004003du, 0x00000029u, 0x00000fd0u, 0x00000128u, 0x0003003eu, 0x00000fcfu, 0x00000fd0u, 0x0004003du, 0x00000006u, 0x00000fd2u, 0x00000129u, 0x0003003eu, 0x00000fd1u, 0x00000fd2u, 0x0003003eu, 0x00000fd3u, 0x00000fceu, 0x00070039u, 0x00000013u, 0x00000fd4u, 0x000000d5u, 0x00000fcfu, 0x00000fd1u, 0x00000fd3u, 0x0003003eu, 0x00000c29u, 0x00000fd4u, 0x00050050u, 0x00000058u, 0x00000fd7u, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000fd8u, 0x00000fd7u, 0x0004003du, 0x00000029u, 0x00000fdau, 0x00000128u, 0x0003003eu, 0x00000fd9u, 0x00000fdau, 0x0004003du, 0x00000006u, 0x00000fdcu, 0x00000129u, 0x0003003eu, 0x00000fdbu, 0x00000fdcu, 0x0003003eu, 0x00000fddu, 0x00000fd8u, 0x00070039u, 0x00000013u, 0x00000fdeu, 0x000000d5u, 0x00000fd9u, 0x00000fdbu, 0x00000fddu, 0x0003003eu, 0x00000c3du, 0x00000fdeu, 0x000200f9u, 0x00000fcau, 0x000200f8u, 0x00000fcau, 0x000700f5u, 0x00000013u, 0x0000b29eu, 0x0000b219u, 0x00000f64u, 0x00000fdeu, 0x00000fc9u, 0x000700f5u, 0x00000013u, 0x0000b23fu, 0x0000b219u, 0x00000f64u, 0x00000fd4u, 0x00000fc9u, 0x0004003du, 0x00000063u, 0x00000fdfu, 0x0000012eu, 0x000300f7u, 0x00000fe1u, 0x00000000u, 0x000400fau, 0x00000fdfu, 0x00000fe0u, 0x00000fe1u, 0x000200f8u, 0x00000fe0u, 0x00050050u, 0x00000058u, 0x00000fe4u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000fe5u, 0x00000fe4u, 0x0004003du, 0x00000029u, 0x00000fe7u, 0x00000128u, 0x0003003eu, 0x00000fe6u, 0x00000fe7u, 0x0004003du, 0x00000006u, 0x00000fe9u, 0x00000129u, 0x0003003eu, 0x00000fe8u, 0x00000fe9u, 0x0003003eu, 0x00000feau, 0x00000fe5u, 0x00070039u, 0x00000013u, 0x00000febu, 0x000000d5u, 0x00000fe6u, 0x00000fe8u, 0x00000feau, 0x0003003eu, 0x00000c54u, 0x00000febu, 0x000200f9u, 0x00000fe1u, 0x000200f8u, 0x00000fe1u, 0x000700f5u, 0x00000013u, 0x0000b2ccu, 0x0000b219u, 0x00000fcau, 0x00000febu, 0x00000fe0u, 0x000200f9u, 0x00000f65u, 0x000200f8u, 0x00000f62u, 0x0004007cu, 0x000000abu, 0x00000f67u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000f69u, 0x00000128u, 0x0003003eu, 0x00000f68u, 0x00000f69u, 0x0004003du, 0x00000006u, 0x00000f6bu, 0x00000129u, 0x0003003eu, 0x00000f6au, 0x00000f6bu, 0x0003003eu, 0x00000f6cu, 0x00000f67u, 0x00070039u, 0x00000013u, 0x00000f6du, 0x000000b1u, 0x00000f68u, 0x00000f6au, 0x00000f6cu, 0x0003003eu, 0x00000c11u, 0x00000f6du, 0x0004003du, 0x00000063u, 0x00000f6eu, 0x0000012du, 0x000300f7u, 0x00000f70u, 0x00000000u, 0x000400fau, 0x00000f6eu, 0x00000f6fu, 0x00000f70u, 0x000200f8u, 0x00000f6fu, 0x00050050u, 0x00000058u, 0x00000f73u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000f74u, 0x00000f73u, 0x0004003du, 0x00000029u, 0x00000f76u, 0x00000128u, 0x0003003eu, 0x00000f75u, 0x00000f76u, 0x0004003du, 0x00000006u, 0x00000f78u, 0x00000129u, 0x0003003eu, 0x00000f77u, 0x00000f78u, 0x0003003eu, 0x00000f79u, 0x00000f74u, 0x00070039u, 0x00000013u, 0x00000f7au, 0x000000b1u, 0x00000f75u, 0x00000f77u, 0x00000f79u, 0x0003003eu, 0x00000c29u, 0x00000f7au, 0x00050050u, 0x00000058u, 0x00000f7du, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000f7eu, 0x00000f7du, 0x0004003du, 0x00000029u, 0x00000f80u, 0x00000128u, 0x0003003eu, 0x00000f7fu, 0x00000f80u, 0x0004003du, 0x00000006u, 0x00000f82u, 0x00000129u, 0x0003003eu, 0x00000f81u, 0x00000f82u, 0x0003003eu, 0x00000f83u, 0x00000f7eu, 0x00070039u, 0x00000013u, 0x00000f84u, 0x000000b1u, 0x00000f7fu, 0x00000f81u, 0x00000f83u, 0x0003003eu, 0x00000c3du, 0x00000f84u, 0x000200f9u, 0x00000f70u, 0x000200f8u, 0x00000f70u, 0x000700f5u, 0x00000013u, 0x0000b2a0u, 0x0000b219u, 0x00000f62u, 0x00000f84u, 0x00000f6fu, 0x000700f5u, 0x00000013u, 0x0000b241u, 0x0000b219u, 0x00000f62u, 0x00000f7au, 0x00000f6fu, 0x0004003du, 0x00000063u, 0x00000f85u, 0x0000012eu, 0x000300f7u, 0x00000f87u, 0x00000000u, 0x000400fau, 0x00000f85u, 0x00000f86u, 0x00000f87u, 0x000200f8u, 0x00000f86u, 0x00050050u, 0x00000058u, 0x00000f8au, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000f8bu, 0x00000f8au, 0x0004003du, 0x00000029u, 0x00000f8du, 0x00000128u, 0x0003003eu, 0x00000f8cu, 0x00000f8du, 0x0004003du, 0x00000006u, 0x00000f8fu, 0x00000129u, 0x0003003eu, 0x00000f8eu, 0x00000f8fu, 0x0003003eu, 0x00000f90u, 0x00000f8bu, 0x00070039u, 0x00000013u, 0x00000f91u, 0x000000b1u, 0x00000f8cu, 0x00000f8eu, 0x00000f90u, 0x0003003eu, 0x00000c54u, 0x00000f91u, 0x000200f9u, 0x00000f87u, 0x000200f8u, 0x00000f87u, 0x000700f5u, 0x00000013u, 0x0000b2ceu, 0x0000b219u, 0x00000f70u, 0x00000f91u, 0x00000f86u, 0x000200f9u, 0x00000f65u, 0x000200f8u, 0x00000f63u, 0x0004007cu, 0x000000abu, 0x00000f94u, 0x0000b189u, 0x0004003du, 0x00000029u, 0x00000f96u, 0x00000128u, 0x0003003eu, 0x00000f95u, 0x00000f96u, 0x0004003du, 0x00000006u, 0x00000f98u, 0x00000129u, 0x0003003eu, 0x00000f97u, 0x00000f98u, 0x0003003eu, 0x00000f99u, 0x00000f94u, 0x00070039u, 0x00000013u, 0x00000f9au, 0x000000e2u, 0x00000f95u, 0x00000f97u, 0x00000f99u, 0x0003003eu, 0x00000c11u, 0x00000f9au, 0x0004003du, 0x00000063u, 0x00000f9bu, 0x0000012du, 0x000300f7u, 0x00000f9du, 0x00000000u, 0x000400fau, 0x00000f9bu, 0x00000f9cu, 0x00000f9du, 0x000200f8u, 0x00000f9cu, 0x00050050u, 0x00000058u, 0x00000fa0u, 0x00000bc4u, 0x00000bd4u, 0x0004007cu, 0x000000abu, 0x00000fa1u, 0x00000fa0u, 0x0004003du, 0x00000029u, 0x00000fa3u, 0x00000128u, 0x0003003eu, 0x00000fa2u, 0x00000fa3u, 0x0004003du, 0x00000006u, 0x00000fa5u, 0x00000129u, 0x0003003eu, 0x00000fa4u, 0x00000fa5u, 0x0003003eu, 0x00000fa6u, 0x00000fa1u, 0x00070039u, 0x00000013u, 0x00000fa7u, 0x000000e2u, 0x00000fa2u, 0x00000fa4u, 0x00000fa6u, 0x0003003eu, 0x00000c29u, 0x00000fa7u, 0x00050050u, 0x00000058u, 0x00000faau, 0x00000bb5u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000fabu, 0x00000faau, 0x0004003du, 0x00000029u, 0x00000fadu, 0x00000128u, 0x0003003eu, 0x00000facu, 0x00000fadu, 0x0004003du, 0x00000006u, 0x00000fafu, 0x00000129u, 0x0003003eu, 0x00000faeu, 0x00000fafu, 0x0003003eu, 0x00000fb0u, 0x00000fabu, 0x00070039u, 0x00000013u, 0x00000fb1u, 0x000000e2u, 0x00000facu, 0x00000faeu, 0x00000fb0u, 0x0003003eu, 0x00000c3du, 0x00000fb1u, 0x000200f9u, 0x00000f9du, 0x000200f8u, 0x00000f9du, 0x000700f5u, 0x00000013u, 0x0000b2a2u, 0x0000b219u, 0x00000f63u, 0x00000fb1u, 0x00000f9cu, 0x000700f5u, 0x00000013u, 0x0000b243u, 0x0000b219u, 0x00000f63u, 0x00000fa7u, 0x00000f9cu, 0x0004003du, 0x00000063u, 0x00000fb2u, 0x0000012eu, 0x000300f7u, 0x00000fb4u, 0x00000000u, 0x000400fau, 0x00000fb2u, 0x00000fb3u, 0x00000fb4u, 0x000200f8u, 0x00000fb3u, 0x00050050u, 0x00000058u, 0x00000fb7u, 0x00000bc4u, 0x00000bd6u, 0x0004007cu, 0x000000abu, 0x00000fb8u, 0x00000fb7u, 0x0004003du, 0x00000029u, 0x00000fbau, 0x00000128u, 0x0003003eu, 0x00000fb9u, 0x00000fbau, 0x0004003du, 0x00000006u, 0x00000fbcu, 0x00000129u, 0x0003003eu, 0x00000fbbu, 0x00000fbcu, 0x0003003eu, 0x00000fbdu, 0x00000fb8u, 0x00070039u, 0x00000013u, 0x00000fbeu, 0x000000e2u, 0x00000fb9u, 0x00000fbbu, 0x00000fbdu, 0x0003003eu, 0x00000c54u, 0x00000fbeu, 0x000200f9u, 0x00000fb4u, 0x000200f8u, 0x00000fb4u, 0x000700f5u, 0x00000013u, 0x0000b2d0u, 0x0000b219u, 0x00000f9du, 0x00000fbeu, 0x00000fb3u, 0x000200f9u, 0x00000f65u, 0x000200f8u, 0x00000f65u, 0x000900f5u, 0x00000013u, 0x0000b2cbu, 0x0000b2ccu, 0x00000fe1u, 0x0000b2ceu, 0x00000f87u, 0x0000b2d0u, 0x00000fb4u, 0x000900f5u, 0x00000013u, 0x0000b29cu, 0x0000b29eu, 0x00000fe1u, 0x0000b2a0u, 0x00000f87u, 0x0000b2a2u, 0x00000fb4u, 0x000900f5u, 0x00000013u, 0x0000b26cu, 0x00000fc7u, 0x00000fe1u, 0x00000f6du, 0x00000f87u, 0x00000f9au, 0x00000fb4u, 0x000900f5u, 0x00000013u, 0x0000b23du, 0x0000b23fu, 0x00000fe1u, 0x0000b241u, 0x00000f87u, 0x0000b243u, 0x00000fb4u, 0x000200f9u, 0x00000cfeu, 0x000200f8u, 0x00000cfeu, 0x000f00f5u, 0x00000013u, 0x0000b2b0u, 0x0000b219u, 0x00000cf4u, 0x0000b2b1u, 0x00000d07u, 0x0000b2bau, 0x00000dd8u, 0x0000b2bbu, 0x00000e05u, 0x0000b2c2u, 0x00000ea7u, 0x0000b2cbu, 0x00000f65u, 0x000f00f5u, 0x00000013u, 0x0000b281u, 0x0000b219u, 0x00000cf4u, 0x0000b282u, 0x00000d07u, 0x0000b28bu, 0x00000dd8u, 0x0000b28cu, 0x00000e05u, 0x0000b293u, 0x00000ea7u, 0x0000b29cu, 0x00000f65u, 0x000f00f5u, 0x00000013u, 0x0000b251u, 0x0000b219u, 0x00000cf4u, 0x0000b252u, 0x00000d07u, 0x00000dd5u, 0x00000dd8u, 0x0000b25cu, 0x00000e05u, 0x0000b263u, 0x00000ea7u, 0x0000b26cu, 0x00000f65u, 0x000f00f5u, 0x00000013u, 0x0000b222u, 0x0000b219u, 0x00000cf4u, 0x0000b223u, 0x00000d07u, 0x0000b22cu, 0x00000dd8u, 0x0000b22du, 0x00000e05u, 0x0000b234u, 0x00000ea7u, 0x0000b23du, 0x00000f65u, 0x000200f9u, 0x00000bfbu, 0x000200f8u, 0x00000bfbu, 0x000700f5u, 0x00000013u, 0x0000b2a3u, 0x0000b2a4u, 0x00000c01u, 0x0000b2b0u, 0x00000cfeu, 0x000700f5u, 0x00000013u, 0x0000b274u, 0x0000b275u, 0x00000c01u, 0x0000b281u, 0x00000cfeu, 0x000700f5u, 0x00000013u, 0x0000b245u, 0x0000b246u, 0x00000c01u, 0x0000b251u, 0x00000cfeu, 0x000700f5u, 0x00000013u, 0x0000b214u, 0x0000b215u, 0x00000c01u, 0x0000b222u, 0x00000cfeu, 0x0004003du, 0x00000063u, 0x00000ff0u, 0x0000012fu, 0x000300f7u, 0x00000ff2u, 0x00000000u, 0x000400fau, 0x00000ff0u, 0x00000ff1u, 0x00001022u, 0x000200f8u, 0x00000ff1u, 0x0004003du, 0x00000013u, 0x00000ff4u, 0x00000130u, 0x00040072u, 0x00000009u, 0x00000ff5u, 0x00000ff4u, 0x000600cau, 0x00000009u, 0x00000ff6u, 0x00000ff5u, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00000ff3u, 0x00000ff6u, 0x000300f7u, 0x00000ffcu, 0x00000000u, 0x000400fau, 0x00000bedu, 0x00000ffbu, 0x00000fffu, 0x000200f8u, 0x00000ffbu, 0x0004003du, 0x00000009u, 0x00000ffdu, 0x00000ff3u, 0x0007004fu, 0x00000058u, 0x00000ffeu, 0x00000ffdu, 0x00000ffdu, 0x00000001u, 0x00000000u, 0x0003003eu, 0x00000ffau, 0x00000ffeu, 0x000200f9u, 0x00000ffcu, 0x000200f8u, 0x00000fffu, 0x0004003du, 0x00000009u, 0x00001000u, 0x00000ff3u, 0x0007004fu, 0x00000058u, 0x00001001u, 0x00001000u, 0x00001000u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00000ffau, 0x00001001u, 0x000200f9u, 0x00000ffcu, 0x000200f8u, 0x00000ffcu, 0x000700f5u, 0x00000058u, 0x0000b2fdu, 0x00000ffeu, 0x00000ffbu, 0x00001001u, 0x00000fffu, 0x0003003eu, 0x00000ff7u, 0x0000b2fdu, 0x00050041u, 0x00000040u, 0x00001004u, 0x00000ff7u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001005u, 0x00001004u, 0x00050082u, 0x00000013u, 0x00001008u, 0x0000b214u, 0x0000b245u, 0x00040072u, 0x00000009u, 0x00001009u, 0x00001008u, 0x00070050u, 0x00000009u, 0x0000100au, 0x00001005u, 0x00001005u, 0x00001005u, 0x00001005u, 0x00050084u, 0x00000009u, 0x0000100bu, 0x0000100au, 0x00001009u, 0x00050041u, 0x00000040u, 0x0000100cu, 0x00000ff7u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x0000100du, 0x0000100cu, 0x00050082u, 0x00000013u, 0x00001010u, 0x0000b274u, 0x0000b245u, 0x00040072u, 0x00000009u, 0x00001011u, 0x00001010u, 0x00070050u, 0x00000009u, 0x00001012u, 0x0000100du, 0x0000100du, 0x0000100du, 0x0000100du, 0x00050084u, 0x00000009u, 0x00001013u, 0x00001012u, 0x00001011u, 0x00050080u, 0x00000009u, 0x00001014u, 0x0000100bu, 0x00001013u, 0x00050080u, 0x00000009u, 0x00001016u, 0x00001014u, 0x0000b618u, 0x0003003eu, 0x00001003u, 0x00001016u, 0x000500c3u, 0x00000009u, 0x00001019u, 0x00001016u, 0x0000b622u, 0x0003003eu, 0x00001003u, 0x00001019u, 0x00050041u, 0x00000040u, 0x0000101au, 0x00000ff3u, 0x000002f8u, 0x0004003du, 0x00000008u, 0x0000101bu, 0x0000101au, 0x00070050u, 0x00000009u, 0x0000101du, 0x0000101bu, 0x0000101bu, 0x0000101bu, 0x0000101bu, 0x00050080u, 0x00000009u, 0x0000101eu, 0x00001019u, 0x0000101du, 0x0003003eu, 0x00001003u, 0x0000101eu, 0x00040072u, 0x00000013u, 0x00001021u, 0x0000101eu, 0x0003003eu, 0x0000101fu, 0x00001021u, 0x000200f9u, 0x00000ff2u, 0x000200f8u, 0x00001022u, 0x000300f7u, 0x00001025u, 0x00000000u, 0x000400fau, 0x00000beau, 0x00001024u, 0x0000105du, 0x000200f8u, 0x00001024u, 0x0004003du, 0x00000063u, 0x00001026u, 0x0000012du, 0x000300f7u, 0x00001028u, 0x00000000u, 0x000400fau, 0x00001026u, 0x00001027u, 0x0000105bu, 0x000200f8u, 0x00001027u, 0x000500c7u, 0x00000008u, 0x0000102bu, 0x00000bb5u, 0x000001a6u, 0x000500c4u, 0x00000008u, 0x0000102cu, 0x0000102bu, 0x000001afu, 0x0004003du, 0x00000008u, 0x0000102eu, 0x00000ba7u, 0x000500c3u, 0x00000008u, 0x0000102fu, 0x0000102eu, 0x000001a6u, 0x000500c5u, 0x00000008u, 0x00001030u, 0x0000102cu, 0x0000102fu, 0x0003003eu, 0x00001029u, 0x00001030u, 0x0004003du, 0x00000008u, 0x00001034u, 0x00000ba9u, 0x00050050u, 0x00000058u, 0x00001035u, 0x00001030u, 0x00001034u, 0x0007004fu, 0x0000011du, 0x00001038u, 0x0000b245u, 0x0000b245u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001036u, 0x00001038u, 0x0007004fu, 0x0000011du, 0x0000103bu, 0x0000b214u, 0x0000b214u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00001039u, 0x0000103bu, 0x0007004fu, 0x0000011du, 0x0000103eu, 0x0000b274u, 0x0000b274u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000103cu, 0x0000103eu, 0x0007004fu, 0x0000011du, 0x00001041u, 0x0000b2a3u, 0x0000b2a3u, 0x00000000u, 0x00000001u, 0x0003003eu, 0x0000103fu, 0x00001041u, 0x0003003eu, 0x00001042u, 0x00001035u, 0x00090039u, 0x0000011du, 0x00001043u, 0x00000125u, 0x00001036u, 0x00001039u, 0x0000103cu, 0x0000103fu, 0x00001042u, 0x0003003eu, 0x00001031u, 0x00001043u, 0x0007004fu, 0x0000011du, 0x00001047u, 0x0000b245u, 0x0000b245u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001045u, 0x00001047u, 0x0007004fu, 0x0000011du, 0x0000104au, 0x0000b214u, 0x0000b214u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x00001048u, 0x0000104au, 0x0007004fu, 0x0000011du, 0x0000104du, 0x0000b274u, 0x0000b274u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000104bu, 0x0000104du, 0x0007004fu, 0x0000011du, 0x00001050u, 0x0000b2a3u, 0x0000b2a3u, 0x00000002u, 0x00000003u, 0x0003003eu, 0x0000104eu, 0x00001050u, 0x0004003du, 0x00000058u, 0x00001052u, 0x00000ba0u, 0x0003003eu, 0x00001051u, 0x00001052u, 0x00090039u, 0x0000011du, 0x00001053u, 0x00000125u, 0x00001045u, 0x00001048u, 0x0000104bu, 0x0000104eu, 0x00001051u, 0x0003003eu, 0x00001044u, 0x00001053u, 0x00050051u, 0x00000012u, 0x00001056u, 0x00001043u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00001057u, 0x00001043u, 0x00000001u, 0x00050051u, 0x00000012u, 0x00001058u, 0x00001053u, 0x00000000u, 0x00050051u, 0x00000012u, 0x00001059u, 0x00001053u, 0x00000001u, 0x00070050u, 0x00000013u, 0x0000105au, 0x00001056u, 0x00001057u, 0x00001058u, 0x00001059u, 0x0003003eu, 0x0000101fu, 0x0000105au, 0x000200f9u, 0x00001028u, 0x000200f8u, 0x0000105bu, 0x0003003eu, 0x0000101fu, 0x0000b245u, 0x000200f9u, 0x00001028u, 0x000200f8u, 0x00001028u, 0x000700f5u, 0x00000013u, 0x0000b303u, 0x0000105au, 0x00001027u, 0x0000b245u, 0x0000105bu, 0x000200f9u, 0x00001025u, 0x000200f8u, 0x0000105du, 0x0004003du, 0x00000063u, 0x0000105eu, 0x0000012eu, 0x000300f7u, 0x00001060u, 0x00000000u, 0x000400fau, 0x0000105eu, 0x0000105fu, 0x0000106du, 0x000200f8u, 0x0000105fu, 0x00050080u, 0x00000013u, 0x00001063u, 0x0000b245u, 0x0000b274u, 0x00050080u, 0x00000013u, 0x00001065u, 0x00001063u, 0x0000b214u, 0x00050080u, 0x00000013u, 0x00001067u, 0x00001065u, 0x0000b2a3u, 0x00050080u, 0x00000013u, 0x0000106au, 0x00001067u, 0x0000b623u, 0x000500c3u, 0x00000013u, 0x0000106cu, 0x0000106au, 0x0000b623u, 0x0003003eu, 0x0000101fu, 0x0000106cu, 0x000200f9u, 0x00001060u, 0x000200f8u, 0x0000106du, 0x000300f7u, 0x00001073u, 0x00000000u, 0x000400fau, 0x00000bedu, 0x00001072u, 0x00001078u, 0x000200f8u, 0x00001072u, 0x0004003du, 0x00000058u, 0x00001074u, 0x00000ba0u, 0x0007004fu, 0x00000058u, 0x00001075u, 0x00001074u, 0x00001074u, 0x00000001u, 0x00000000u, 0x00050082u, 0x00000058u, 0x00001077u, 0x0000b624u, 0x00001075u, 0x0003003eu, 0x00001071u, 0x00001077u, 0x000200f9u, 0x00001073u, 0x000200f8u, 0x00001078u, 0x0004003du, 0x00000058u, 0x00001079u, 0x00000ba0u, 0x0003003eu, 0x00001071u, 0x00001079u, 0x000200f9u, 0x00001073u, 0x000200f8u, 0x00001073u, 0x000700f5u, 0x00000058u, 0x0000b212u, 0x00001077u, 0x00001072u, 0x00001079u, 0x00001078u, 0x00040072u, 0x0000011du, 0x0000107bu, 0x0000b212u, 0x0003003eu, 0x0000106eu, 0x0000107bu, 0x00050082u, 0x00000013u, 0x0000107eu, 0x0000b214u, 0x0000b245u, 0x00050041u, 0x00000133u, 0x0000107fu, 0x0000106eu, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00001080u, 0x0000107fu, 0x00070050u, 0x00000013u, 0x00001081u, 0x00001080u, 0x00001080u, 0x00001080u, 0x00001080u, 0x00050084u, 0x00000013u, 0x00001082u, 0x0000107eu, 0x00001081u, 0x0003003eu, 0x0000101fu, 0x00001082u, 0x00050082u, 0x00000013u, 0x00001085u, 0x0000b274u, 0x0000b245u, 0x00050041u, 0x00000133u, 0x00001086u, 0x0000106eu, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00001087u, 0x00001086u, 0x00070050u, 0x00000013u, 0x00001088u, 0x00001087u, 0x00001087u, 0x00001087u, 0x00001087u, 0x00050084u, 0x00000013u, 0x00001089u, 0x00001085u, 0x00001088u, 0x00050080u, 0x00000013u, 0x0000108bu, 0x00001082u, 0x00001089u, 0x0003003eu, 0x0000101fu, 0x0000108bu, 0x00050080u, 0x00000013u, 0x0000108eu, 0x0000108bu, 0x0000b627u, 0x0003003eu, 0x0000101fu, 0x0000108eu, 0x000500c3u, 0x00000013u, 0x00001091u, 0x0000108eu, 0x0000b628u, 0x0003003eu, 0x0000101fu, 0x00001091u, 0x00050080u, 0x00000013u, 0x00001094u, 0x00001091u, 0x0000b245u, 0x0003003eu, 0x0000101fu, 0x00001094u, 0x000200f9u, 0x00001060u, 0x000200f8u, 0x00001060u, 0x000700f5u, 0x00000013u, 0x0000b304u, 0x0000106cu, 0x0000105fu, 0x00001094u, 0x00001073u, 0x000200f9u, 0x00001025u, 0x000200f8u, 0x00001025u, 0x000700f5u, 0x00000013u, 0x0000b302u, 0x0000b303u, 0x00001028u, 0x0000b304u, 0x00001060u, 0x000200f9u, 0x00000ff2u, 0x000200f8u, 0x00000ff2u, 0x000700f5u, 0x00000013u, 0x0000b301u, 0x00001021u, 0x00000ffcu, 0x0000b302u, 0x00001025u, 0x000200feu, 0x0000b301u, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000141u, 0x00000000u, 0x00000134u, 0x00030037u, 0x00000007u, 0x00000135u, 0x00030037u, 0x00000007u, 0x00000136u, 0x00030037u, 0x00000133u, 0x00000137u, 0x00030037u, 0x00000007u, 0x00000138u, 0x00030037u, 0x00000040u, 0x00000139u, 0x00030037u, 0x00000073u, 0x0000013au, 0x00030037u, 0x00000073u, 0x0000013bu, 0x00030037u, 0x00000073u, 0x0000013cu, 0x00030037u, 0x00000064u, 0x0000013du, 0x00030037u, 0x00000064u, 0x0000013eu, 0x00030037u, 0x00000064u, 0x0000013fu, 0x00030037u, 0x00000064u, 0x00000140u, 0x000200f8u, 0x00000142u, 0x0004003bu, 0x00000064u, 0x00001098u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000109au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000109bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000010a1u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000010aau, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000010b3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000010b7u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000010dfu, 0x00000007u, 0x0003003eu, 0x00001098u, 0x00001099u, 0x0003003eu, 0x0000109au, 0x00001099u, 0x0003003eu, 0x0000109bu, 0x0000028eu, 0x0004003du, 0x00000063u, 0x0000109cu, 0x0000013du, 0x000300f7u, 0x0000109eu, 0x00000000u, 0x000400fau, 0x0000109cu, 0x0000109du, 0x000010a0u, 0x000200f8u, 0x0000109du, 0x0003003eu, 0x0000109au, 0x0000046cu, 0x0003003eu, 0x00000137u, 0x0000109fu, 0x000200f9u, 0x0000109eu, 0x000200f8u, 0x000010a0u, 0x0004003du, 0x00000058u, 0x000010a2u, 0x0000013bu, 0x0004003du, 0x00000058u, 0x000010a3u, 0x0000013au, 0x00050082u, 0x00000058u, 0x000010a4u, 0x000010a2u, 0x000010a3u, 0x0003003eu, 0x000010a1u, 0x000010a4u, 0x000500c3u, 0x00000058u, 0x000010a7u, 0x000010a4u, 0x0000b61cu, 0x000500c6u, 0x00000058u, 0x000010a9u, 0x000010a4u, 0x000010a7u, 0x0003003eu, 0x000010a1u, 0x000010a9u, 0x0004003du, 0x00000058u, 0x000010abu, 0x0000013cu, 0x0004003du, 0x00000058u, 0x000010acu, 0x0000013au, 0x00050082u, 0x00000058u, 0x000010adu, 0x000010abu, 0x000010acu, 0x0003003eu, 0x000010aau, 0x000010adu, 0x000500c3u, 0x00000058u, 0x000010b0u, 0x000010adu, 0x0000b61cu, 0x000500c6u, 0x00000058u, 0x000010b2u, 0x000010adu, 0x000010b0u, 0x0003003eu, 0x000010aau, 0x000010b2u, 0x0007000cu, 0x00000058u, 0x000010b6u, 0x00000001u, 0x0000002au, 0x000010a9u, 0x000010b2u, 0x0003003eu, 0x000010b3u, 0x000010b6u, 0x00050041u, 0x00000040u, 0x000010b8u, 0x000010b3u, 0x0000028eu, 0x0004003du, 0x00000008u, 0x000010b9u, 0x000010b8u, 0x00050041u, 0x00000040u, 0x000010bau, 0x000010b3u, 0x000002f4u, 0x0004003du, 0x00000008u, 0x000010bbu, 0x000010bau, 0x0007000cu, 0x00000008u, 0x000010bcu, 0x00000001u, 0x0000002au, 0x000010b9u, 0x000010bbu, 0x0003003eu, 0x000010b7u, 0x000010bcu, 0x000500afu, 0x00000063u, 0x000010bfu, 0x000010bcu, 0x000010beu, 0x000300f7u, 0x000010c1u, 0x00000000u, 0x000400fau, 0x000010bfu, 0x000010c0u, 0x000010c3u, 0x000200f8u, 0x000010c0u, 0x0003003eu, 0x0000109au, 0x0000046cu, 0x0003003eu, 0x00000137u, 0x0000109fu, 0x0004003du, 0x00000006u, 0x000010c2u, 0x00000138u, 0x0003003eu, 0x0000109bu, 0x000010c2u, 0x000200f9u, 0x000010c1u, 0x000200f8u, 0x000010c3u, 0x000500b1u, 0x00000063u, 0x000010c5u, 0x000010bcu, 0x00000977u, 0x000300f7u, 0x000010c7u, 0x00000000u, 0x000400fau, 0x000010c5u, 0x000010c6u, 0x000010deu, 0x000200f8u, 0x000010c6u, 0x0004003du, 0x00000006u, 0x000010c8u, 0x00000138u, 0x000500aau, 0x00000063u, 0x000010c9u, 0x000010c8u, 0x0000028eu, 0x0003003eu, 0x0000109au, 0x000010c9u, 0x0003003eu, 0x00001098u, 0x0000046cu, 0x0004003du, 0x00000063u, 0x000010cau, 0x0000013fu, 0x000400a8u, 0x00000063u, 0x000010cbu, 0x000010cau, 0x0004003du, 0x00000063u, 0x000010ccu, 0x00000140u, 0x000400a8u, 0x00000063u, 0x000010cdu, 0x000010ccu, 0x000500a7u, 0x00000063u, 0x000010ceu, 0x000010cbu, 0x000010cdu, 0x000300f7u, 0x000010d0u, 0x00000000u, 0x000400fau, 0x000010ceu, 0x000010cfu, 0x000010d4u, 0x000200f8u, 0x000010cfu, 0x000600a9u, 0x00000008u, 0x000010d2u, 0x000010c9u, 0x00000311u, 0x0000019cu, 0x00040072u, 0x00000012u, 0x000010d3u, 0x000010d2u, 0x0003003eu, 0x00000137u, 0x000010d3u, 0x000200f9u, 0x000010d0u, 0x000200f8u, 0x000010d4u, 0x0004003du, 0x00000008u, 0x000010d5u, 0x00000139u, 0x0007000cu, 0x00000008u, 0x000010d7u, 0x00000001u, 0x0000002au, 0x000010d5u, 0x000010bcu, 0x000500c4u, 0x00000008u, 0x000010d8u, 0x000010d7u, 0x000001acu, 0x0004003du, 0x00000063u, 0x000010d9u, 0x0000013fu, 0x000600a9u, 0x00000008u, 0x000010dbu, 0x000010d9u, 0x000010dau, 0x0000019cu, 0x00050080u, 0x00000008u, 0x000010dcu, 0x000010d8u, 0x000010dbu, 0x00040072u, 0x00000012u, 0x000010ddu, 0x000010dcu, 0x0003003eu, 0x00000137u, 0x000010ddu, 0x000200f9u, 0x000010d0u, 0x000200f8u, 0x000010d0u, 0x000200f9u, 0x000010c7u, 0x000200f8u, 0x000010deu, 0x000500c3u, 0x00000008u, 0x000010e1u, 0x000010bcu, 0x000001b2u, 0x0006000cu, 0x00000008u, 0x000010e2u, 0x00000001u, 0x0000004au, 0x000010e1u, 0x0007000cu, 0x00000008u, 0x000010e3u, 0x00000001u, 0x0000002au, 0x000010e2u, 0x0000019cu, 0x0003003eu, 0x000010dfu, 0x000010e3u, 0x0004007cu, 0x00000006u, 0x000010e5u, 0x000010e3u, 0x0004003du, 0x00000006u, 0x000010e6u, 0x00000138u, 0x000500aeu, 0x00000063u, 0x000010e7u, 0x000010e5u, 0x000010e6u, 0x0003003eu, 0x0000109au, 0x000010e7u, 0x0004003du, 0x00000063u, 0x000010e9u, 0x0000013fu, 0x000400a8u, 0x00000063u, 0x000010eau, 0x000010e9u, 0x000500a7u, 0x00000063u, 0x000010ebu, 0x000010e7u, 0x000010eau, 0x0004003du, 0x00000063u, 0x000010ecu, 0x00000140u, 0x000400a8u, 0x00000063u, 0x000010edu, 0x000010ecu, 0x000500a7u, 0x00000063u, 0x000010eeu, 0x000010ebu, 0x000010edu, 0x000300f7u, 0x000010f0u, 0x00000000u, 0x000400fau, 0x000010eeu, 0x000010efu, 0x000010f1u, 0x000200f8u, 0x000010efu, 0x0003003eu, 0x00000137u, 0x0000109fu, 0x000200f9u, 0x000010f0u, 0x000200f8u, 0x000010f1u, 0x000500c4u, 0x00000008u, 0x000010f3u, 0x000010bcu, 0x000001acu, 0x000500c3u, 0x00000008u, 0x000010f5u, 0x000010f3u, 0x000010e3u, 0x000500c7u, 0x00000008u, 0x000010f6u, 0x000010f5u, 0x00000311u, 0x00040072u, 0x00000012u, 0x000010f7u, 0x000010f6u, 0x0003003eu, 0x00000137u, 0x000010f7u, 0x0003003eu, 0x0000109bu, 0x000010e5u, 0x000200f9u, 0x000010f0u, 0x000200f8u, 0x000010f0u, 0x000600a9u, 0x00000006u, 0x0000b64du, 0x000010eeu, 0x0000028eu, 0x000010e5u, 0x000200f9u, 0x000010c7u, 0x000200f8u, 0x000010c7u, 0x000700f5u, 0x00000006u, 0x0000b30du, 0x0000028eu, 0x000010d0u, 0x0000b64du, 0x000010f0u, 0x000700f5u, 0x00000063u, 0x0000b307u, 0x000010c9u, 0x000010d0u, 0x000010e7u, 0x000010f0u, 0x000600a9u, 0x00000063u, 0x0000b64eu, 0x000010c5u, 0x0000046cu, 0x00001099u, 0x000200f9u, 0x000010c1u, 0x000200f8u, 0x000010c1u, 0x000700f5u, 0x00000063u, 0x0000b313u, 0x00001099u, 0x000010c0u, 0x0000b64eu, 0x000010c7u, 0x000700f5u, 0x00000006u, 0x0000b30cu, 0x000010c2u, 0x000010c0u, 0x0000b30du, 0x000010c7u, 0x000700f5u, 0x00000063u, 0x0000b306u, 0x0000046cu, 0x000010c0u, 0x0000b307u, 0x000010c7u, 0x000200f9u, 0x0000109eu, 0x000200f8u, 0x0000109eu, 0x000700f5u, 0x00000063u, 0x0000b312u, 0x00001099u, 0x0000109du, 0x0000b313u, 0x000010c1u, 0x000700f5u, 0x00000006u, 0x0000b30bu, 0x0000028eu, 0x0000109du, 0x0000b30cu, 0x000010c1u, 0x000700f5u, 0x00000063u, 0x0000b305u, 0x0000046cu, 0x0000109du, 0x0000b306u, 0x000010c1u, 0x0004003du, 0x00000063u, 0x000010fau, 0x0000013eu, 0x000300f7u, 0x000010fcu, 0x00000000u, 0x000400fau, 0x000010fau, 0x000010fbu, 0x000010fcu, 0x000200f8u, 0x000010fbu, 0x000300f7u, 0x000010ffu, 0x00000000u, 0x000400fau, 0x0000b305u, 0x000010feu, 0x000010ffu, 0x000200f8u, 0x000010feu, 0x0004003du, 0x00000006u, 0x00001100u, 0x00000138u, 0x0003003eu, 0x0000109bu, 0x00001100u, 0x000200f9u, 0x000010ffu, 0x000200f8u, 0x000010ffu, 0x000700f5u, 0x00000006u, 0x0000b30au, 0x0000b30bu, 0x000010fbu, 0x00001100u, 0x000010feu, 0x0004003du, 0x00000063u, 0x00001101u, 0x00000140u, 0x000400a8u, 0x00000063u, 0x00001102u, 0x00001101u, 0x000300f7u, 0x00001104u, 0x00000000u, 0x000400fau, 0x00001102u, 0x00001103u, 0x0000111au, 0x000200f8u, 0x00001103u, 0x0004003du, 0x00000006u, 0x00001105u, 0x00000135u, 0x00050080u, 0x00000006u, 0x00001107u, 0x00001105u, 0x0000b30au, 0x000500c7u, 0x00000006u, 0x00001109u, 0x00001107u, 0x00001108u, 0x0003003eu, 0x00000135u, 0x00001109u, 0x000400a8u, 0x00000063u, 0x0000110bu, 0x0000b305u, 0x000300f7u, 0x0000110du, 0x00000000u, 0x000400fau, 0x0000110bu, 0x0000110cu, 0x0000110du, 0x000200f8u, 0x0000110cu, 0x0004003du, 0x00000063u, 0x0000110eu, 0x0000013fu, 0x000400a8u, 0x00000063u, 0x0000110fu, 0x0000110eu, 0x000500a7u, 0x00000063u, 0x00001111u, 0x0000110fu, 0x0000b312u, 0x000200f9u, 0x0000110du, 0x000200f8u, 0x0000110du, 0x000700f5u, 0x00000063u, 0x00001112u, 0x0000b305u, 0x00001103u, 0x00001111u, 0x0000110cu, 0x000300f7u, 0x00001114u, 0x00000000u, 0x000400fau, 0x00001112u, 0x00001113u, 0x00001116u, 0x000200f8u, 0x00001113u, 0x0004003du, 0x00000006u, 0x00001115u, 0x00000135u, 0x0003003eu, 0x00000136u, 0x00001115u, 0x000200f9u, 0x00001114u, 0x000200f8u, 0x00001116u, 0x0004003du, 0x00000006u, 0x00001117u, 0x00000135u, 0x00050080u, 0x00000006u, 0x00001118u, 0x00001117u, 0x000002f4u, 0x000500c7u, 0x00000006u, 0x00001119u, 0x00001118u, 0x00001108u, 0x0003003eu, 0x00000136u, 0x00001119u, 0x000200f9u, 0x00001114u, 0x000200f8u, 0x00001114u, 0x000200f9u, 0x00001104u, 0x000200f8u, 0x0000111au, 0x0004003du, 0x00000006u, 0x0000111bu, 0x00000135u, 0x00050080u, 0x00000006u, 0x0000111du, 0x0000111bu, 0x0000b30au, 0x000500a6u, 0x00000063u, 0x00001120u, 0x0000b305u, 0x0000b312u, 0x000600a9u, 0x00000008u, 0x00001121u, 0x00001120u, 0x000001a6u, 0x000001a9u, 0x0004007cu, 0x00000006u, 0x00001122u, 0x00001121u, 0x00050080u, 0x00000006u, 0x00001123u, 0x0000111du, 0x00001122u, 0x000500c7u, 0x00000006u, 0x00001124u, 0x00001123u, 0x00001108u, 0x0003003eu, 0x00000136u, 0x00001124u, 0x0004003du, 0x00000006u, 0x00001125u, 0x00000135u, 0x00050080u, 0x00000006u, 0x00001127u, 0x00001125u, 0x0000b30au, 0x000600a9u, 0x00000008u, 0x00001129u, 0x0000b312u, 0x0000019cu, 0x000001a6u, 0x0004007cu, 0x00000006u, 0x0000112au, 0x00001129u, 0x00050080u, 0x00000006u, 0x0000112bu, 0x00001127u, 0x0000112au, 0x000500c7u, 0x00000006u, 0x0000112cu, 0x0000112bu, 0x00001108u, 0x0003003eu, 0x00000135u, 0x0000112cu, 0x000200f9u, 0x00001104u, 0x000200f8u, 0x00001104u, 0x000200f9u, 0x000010fcu, 0x000200f8u, 0x000010fcu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000146u, 0x00000000u, 0x00000143u, 0x00030037u, 0x0000004cu, 0x00000144u, 0x00030037u, 0x0000004cu, 0x00000145u, 0x000200f8u, 0x00000147u, 0x0004003bu, 0x00000047u, 0x0000112du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001131u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000113du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001150u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000115cu, 0x00000007u, 0x0004003du, 0x00000013u, 0x0000112eu, 0x00000144u, 0x00040072u, 0x00000009u, 0x0000112fu, 0x0000112eu, 0x000600cau, 0x00000009u, 0x00001130u, 0x0000112fu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x0000112du, 0x00001130u, 0x00050041u, 0x00000040u, 0x00001132u, 0x0000112du, 0x000002f8u, 0x0004003du, 0x00000008u, 0x00001133u, 0x00001132u, 0x00050041u, 0x00000133u, 0x00001134u, 0x00000145u, 0x0000028eu, 0x0004003du, 0x00000012u, 0x00001135u, 0x00001134u, 0x00040072u, 0x00000008u, 0x00001136u, 0x00001135u, 0x00050041u, 0x00000040u, 0x00001137u, 0x0000112du, 0x000002f4u, 0x0004003du, 0x00000008u, 0x00001138u, 0x00001137u, 0x00050084u, 0x00000008u, 0x00001139u, 0x00001136u, 0x00001138u, 0x00050080u, 0x00000008u, 0x0000113au, 0x00001139u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x0000113bu, 0x0000113au, 0x000001d9u, 0x00050080u, 0x00000008u, 0x0000113cu, 0x00001133u, 0x0000113bu, 0x0003003eu, 0x00001131u, 0x0000113cu, 0x0004003du, 0x00000008u, 0x0000113fu, 0x00001132u, 0x00050041u, 0x00000133u, 0x00001140u, 0x00000145u, 0x000002f4u, 0x0004003du, 0x00000012u, 0x00001141u, 0x00001140u, 0x00040072u, 0x00000008u, 0x00001142u, 0x00001141u, 0x00050041u, 0x00000040u, 0x00001143u, 0x0000112du, 0x0000028eu, 0x0004003du, 0x00000008u, 0x00001144u, 0x00001143u, 0x00050084u, 0x00000008u, 0x00001145u, 0x00001142u, 0x00001144u, 0x00050041u, 0x00000133u, 0x00001146u, 0x00000145u, 0x000002f8u, 0x0004003du, 0x00000012u, 0x00001147u, 0x00001146u, 0x00040072u, 0x00000008u, 0x00001148u, 0x00001147u, 0x0004003du, 0x00000008u, 0x0000114au, 0x00001137u, 0x00050084u, 0x00000008u, 0x0000114bu, 0x00001148u, 0x0000114au, 0x00050080u, 0x00000008u, 0x0000114cu, 0x00001145u, 0x0000114bu, 0x00050080u, 0x00000008u, 0x0000114du, 0x0000114cu, 0x00000306u, 0x000500c3u, 0x00000008u, 0x0000114eu, 0x0000114du, 0x000001d9u, 0x00050080u, 0x00000008u, 0x0000114fu, 0x0000113fu, 0x0000114eu, 0x0003003eu, 0x0000113du, 0x0000114fu, 0x0004003du, 0x00000008u, 0x00001152u, 0x00001132u, 0x00050041u, 0x00000133u, 0x00001153u, 0x00000145u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001154u, 0x00001153u, 0x00040072u, 0x00000008u, 0x00001155u, 0x00001154u, 0x0004003du, 0x00000008u, 0x00001157u, 0x00001143u, 0x00050084u, 0x00000008u, 0x00001158u, 0x00001155u, 0x00001157u, 0x00050080u, 0x00000008u, 0x00001159u, 0x00001158u, 0x00000306u, 0x000500c3u, 0x00000008u, 0x0000115au, 0x00001159u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x0000115bu, 0x00001152u, 0x0000115au, 0x0003003eu, 0x00001150u, 0x0000115bu, 0x0004003du, 0x00000008u, 0x0000115eu, 0x00001132u, 0x0003003eu, 0x0000115cu, 0x0000115eu, 0x00040072u, 0x00000012u, 0x00001160u, 0x0000113cu, 0x00040072u, 0x00000012u, 0x00001162u, 0x0000114fu, 0x00040072u, 0x00000012u, 0x00001164u, 0x0000115bu, 0x00040072u, 0x00000012u, 0x00001166u, 0x0000115eu, 0x00070050u, 0x00000013u, 0x00001167u, 0x00001160u, 0x00001162u, 0x00001164u, 0x00001166u, 0x000200feu, 0x00001167u, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000014fu, 0x00000000u, 0x00000148u, 0x00030037u, 0x00000040u, 0x00000149u, 0x00030037u, 0x00000040u, 0x0000014au, 0x00030037u, 0x00000040u, 0x0000014bu, 0x00030037u, 0x00000040u, 0x0000014cu, 0x00030037u, 0x00000040u, 0x0000014du, 0x00030037u, 0x00000040u, 0x0000014eu, 0x000200f8u, 0x00000150u, 0x0004003bu, 0x0000117eu, 0x0000117fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000119au, 0x00000007u, 0x0004003bu, 0x0000117eu, 0x000011a5u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000116au, 0x0000014bu, 0x000500b1u, 0x00000063u, 0x0000116bu, 0x0000116au, 0x000001a9u, 0x000300f7u, 0x0000116du, 0x00000000u, 0x000400fau, 0x0000116bu, 0x0000116cu, 0x00001186u, 0x000200f8u, 0x0000116cu, 0x0004003du, 0x00000008u, 0x00001177u, 0x0000014bu, 0x0004003du, 0x00000008u, 0x00001178u, 0x0000014au, 0x000500c7u, 0x00000008u, 0x00001179u, 0x00001178u, 0x000001acu, 0x00050084u, 0x00000008u, 0x0000117au, 0x00001179u, 0x000001afu, 0x0004003du, 0x00000008u, 0x0000117bu, 0x00000149u, 0x000500c7u, 0x00000008u, 0x0000117cu, 0x0000117bu, 0x000001acu, 0x00050080u, 0x00000008u, 0x0000117du, 0x0000117au, 0x0000117cu, 0x0003003eu, 0x0000117fu, 0x00001176u, 0x00060041u, 0x00000174u, 0x00001180u, 0x0000117fu, 0x00001177u, 0x0000117du, 0x0004003du, 0x0000000fu, 0x00001181u, 0x00001180u, 0x00040071u, 0x00000006u, 0x00001182u, 0x00001181u, 0x0004007cu, 0x00000008u, 0x00001183u, 0x00001182u, 0x00050084u, 0x00000008u, 0x00001185u, 0x00001183u, 0x00001184u, 0x0003003eu, 0x0000014du, 0x00001185u, 0x000200f9u, 0x0000116du, 0x000200f8u, 0x00001186u, 0x0004003du, 0x00000008u, 0x00001187u, 0x0000014bu, 0x000500aau, 0x00000063u, 0x00001188u, 0x00001187u, 0x000001a9u, 0x000300f7u, 0x0000118au, 0x00000000u, 0x000400fau, 0x00001188u, 0x00001189u, 0x0000118cu, 0x000200f8u, 0x00001189u, 0x00040039u, 0x00000008u, 0x0000118bu, 0x0000003au, 0x0003003eu, 0x0000014du, 0x0000118bu, 0x000200f9u, 0x0000118au, 0x000200f8u, 0x0000118cu, 0x0003003eu, 0x0000014du, 0x0000019cu, 0x000200f9u, 0x0000118au, 0x000200f8u, 0x0000118au, 0x000200f9u, 0x0000116du, 0x000200f8u, 0x0000116du, 0x0004003du, 0x00000008u, 0x0000118du, 0x0000014cu, 0x000500aau, 0x00000063u, 0x0000118eu, 0x0000118du, 0x000001acu, 0x000300f7u, 0x00001190u, 0x00000000u, 0x000400fau, 0x0000118eu, 0x0000118fu, 0x00001191u, 0x000200f8u, 0x0000118fu, 0x0003003eu, 0x0000014eu, 0x0000019cu, 0x000200f9u, 0x00001190u, 0x000200f8u, 0x00001191u, 0x0004003du, 0x00000008u, 0x00001192u, 0x0000014cu, 0x000500aau, 0x00000063u, 0x00001193u, 0x00001192u, 0x000001a9u, 0x000300f7u, 0x00001195u, 0x00000000u, 0x000400fau, 0x00001193u, 0x00001194u, 0x00001197u, 0x000200f8u, 0x00001194u, 0x00040039u, 0x00000008u, 0x00001196u, 0x00000038u, 0x0003003eu, 0x0000014eu, 0x00001196u, 0x000200f9u, 0x00001195u, 0x000200f8u, 0x00001197u, 0x0004003du, 0x00000008u, 0x00001198u, 0x0000014bu, 0x000500afu, 0x00000063u, 0x00001199u, 0x00001198u, 0x000001a9u, 0x000300f7u, 0x0000119cu, 0x00000000u, 0x000400fau, 0x00001199u, 0x0000119bu, 0x000011aau, 0x000200f8u, 0x0000119bu, 0x0004003du, 0x00000008u, 0x0000119du, 0x0000014bu, 0x000500c7u, 0x00000008u, 0x0000119eu, 0x0000119du, 0x000001a6u, 0x0004003du, 0x00000008u, 0x0000119fu, 0x0000014au, 0x000500c7u, 0x00000008u, 0x000011a0u, 0x0000119fu, 0x000001acu, 0x00050084u, 0x00000008u, 0x000011a1u, 0x000011a0u, 0x000001afu, 0x0004003du, 0x00000008u, 0x000011a2u, 0x00000149u, 0x000500c7u, 0x00000008u, 0x000011a3u, 0x000011a2u, 0x000001acu, 0x00050080u, 0x00000008u, 0x000011a4u, 0x000011a1u, 0x000011a3u, 0x0003003eu, 0x000011a5u, 0x00001176u, 0x00060041u, 0x00000174u, 0x000011a6u, 0x000011a5u, 0x0000119eu, 0x000011a4u, 0x0004003du, 0x0000000fu, 0x000011a7u, 0x000011a6u, 0x00040071u, 0x00000006u, 0x000011a8u, 0x000011a7u, 0x0004007cu, 0x00000008u, 0x000011a9u, 0x000011a8u, 0x0003003eu, 0x0000119au, 0x000011a9u, 0x000200f9u, 0x0000119cu, 0x000200f8u, 0x000011aau, 0x0004003du, 0x00000008u, 0x000011abu, 0x0000014du, 0x000500c7u, 0x00000008u, 0x000011acu, 0x000011abu, 0x000001b8u, 0x0003003eu, 0x0000119au, 0x000011acu, 0x000200f9u, 0x0000119cu, 0x000200f8u, 0x0000119cu, 0x000700f5u, 0x00000008u, 0x0000b317u, 0x000011a9u, 0x0000119bu, 0x000011acu, 0x000011aau, 0x0003003eu, 0x0000014eu, 0x0000b317u, 0x0004003du, 0x00000008u, 0x000011aeu, 0x0000014cu, 0x000500aau, 0x00000063u, 0x000011afu, 0x000011aeu, 0x000001a6u, 0x000300f7u, 0x000011b1u, 0x00000000u, 0x000400fau, 0x000011afu, 0x000011b0u, 0x000011b1u, 0x000200f8u, 0x000011b0u, 0x0004003du, 0x00000008u, 0x000011b2u, 0x0000014eu, 0x000400c8u, 0x00000008u, 0x000011b3u, 0x000011b2u, 0x000500c7u, 0x00000008u, 0x000011b4u, 0x000011b3u, 0x000001b8u, 0x0003003eu, 0x0000014eu, 0x000011b4u, 0x000200f9u, 0x000011b1u, 0x000200f8u, 0x000011b1u, 0x000200f9u, 0x00001195u, 0x000200f8u, 0x00001195u, 0x000200f9u, 0x00001190u, 0x000200f8u, 0x00001190u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000153u, 0x00000000u, 0x00000151u, 0x00030037u, 0x00000047u, 0x00000152u, 0x000200f8u, 0x00000154u, 0x0004003du, 0x00000009u, 0x000011b5u, 0x00000152u, 0x00050082u, 0x00000009u, 0x000011b7u, 0x000011b5u, 0x0000b618u, 0x000600cau, 0x00000009u, 0x000011b8u, 0x000011b7u, 0x0000019cu, 0x000001dcu, 0x00050080u, 0x00000009u, 0x000011bau, 0x000011b8u, 0x0000b618u, 0x000200feu, 0x000011bau, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000015au, 0x00000000u, 0x00000155u, 0x00030037u, 0x00000047u, 0x00000156u, 0x00030037u, 0x00000047u, 0x00000157u, 0x00030037u, 0x00000047u, 0x00000158u, 0x00030037u, 0x00000047u, 0x00000159u, 0x000200f8u, 0x0000015bu, 0x0004003bu, 0x00000047u, 0x000011bfu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000011c2u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000011c5u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000011c8u, 0x00000007u, 0x0004003du, 0x00000009u, 0x000011bdu, 0x00000158u, 0x000600cau, 0x00000009u, 0x000011beu, 0x000011bdu, 0x0000019cu, 0x000001dcu, 0x0003003eu, 0x00000158u, 0x000011beu, 0x0004003du, 0x00000009u, 0x000011c0u, 0x00000156u, 0x0003003eu, 0x000011bfu, 0x000011c0u, 0x00050039u, 0x00000009u, 0x000011c1u, 0x00000153u, 0x000011bfu, 0x0003003eu, 0x00000156u, 0x000011c1u, 0x0004003du, 0x00000009u, 0x000011c3u, 0x00000157u, 0x0003003eu, 0x000011c2u, 0x000011c3u, 0x00050039u, 0x00000009u, 0x000011c4u, 0x00000153u, 0x000011c2u, 0x0003003eu, 0x00000157u, 0x000011c4u, 0x0004003du, 0x00000009u, 0x000011c6u, 0x00000159u, 0x0003003eu, 0x000011c5u, 0x000011c6u, 0x00050039u, 0x00000009u, 0x000011c7u, 0x00000153u, 0x000011c5u, 0x0003003eu, 0x00000159u, 0x000011c7u, 0x0004003du, 0x00000009u, 0x000011c9u, 0x00000156u, 0x0004003du, 0x00000009u, 0x000011cau, 0x00000157u, 0x00050082u, 0x00000009u, 0x000011cbu, 0x000011c9u, 0x000011cau, 0x0004003du, 0x00000009u, 0x000011ccu, 0x00000158u, 0x00050084u, 0x00000009u, 0x000011cdu, 0x000011cbu, 0x000011ccu, 0x0003003eu, 0x000011c8u, 0x000011cdu, 0x00050080u, 0x00000009u, 0x000011d0u, 0x000011cdu, 0x0000b618u, 0x0003003eu, 0x000011c8u, 0x000011d0u, 0x000500c3u, 0x00000009u, 0x000011d3u, 0x000011d0u, 0x0000b622u, 0x00040072u, 0x00000013u, 0x000011d4u, 0x000011d3u, 0x0004003du, 0x00000009u, 0x000011d5u, 0x00000159u, 0x00040072u, 0x00000013u, 0x000011d6u, 0x000011d5u, 0x00050080u, 0x00000013u, 0x000011d7u, 0x000011d4u, 0x000011d6u, 0x000200feu, 0x000011d7u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000162u, 0x00000000u, 0x0000015eu, 0x00030037u, 0x0000015du, 0x0000015fu, 0x00030037u, 0x00000040u, 0x00000160u, 0x00030037u, 0x00000040u, 0x00000161u, 0x000200f8u, 0x00000163u, 0x0004003bu, 0x0000005eu, 0x000011e3u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001211u, 0x00000007u, 0x0004003du, 0x00000008u, 0x000011dau, 0x00000160u, 0x000300f7u, 0x000011e2u, 0x00000000u, 0x000f00fbu, 0x000011dau, 0x000011e1u, 0x00000000u, 0x000011dbu, 0x00000001u, 0x000011dcu, 0x00000002u, 0x000011ddu, 0x00000004u, 0x000011deu, 0x00000007u, 0x000011dfu, 0x00000006u, 0x000011e0u, 0x000200f8u, 0x000011e1u, 0x00050041u, 0x00000173u, 0x00001202u, 0x0000015fu, 0x0000019cu, 0x0004003du, 0x00000010u, 0x00001203u, 0x00001202u, 0x0008004fu, 0x000011f3u, 0x00001204u, 0x00001203u, 0x00001203u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00001205u, 0x00001204u, 0x0004007cu, 0x0000005du, 0x00001206u, 0x00001205u, 0x0003003eu, 0x000011e3u, 0x00001206u, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011dbu, 0x00050041u, 0x0000004cu, 0x000011e4u, 0x0000015fu, 0x000001b2u, 0x0004003du, 0x00000013u, 0x000011e5u, 0x000011e4u, 0x0008004fu, 0x0000065au, 0x000011e6u, 0x000011e5u, 0x000011e5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000011e7u, 0x000011e6u, 0x0003003eu, 0x000011e3u, 0x000011e7u, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011dcu, 0x00050041u, 0x0000004cu, 0x000011e9u, 0x0000015fu, 0x000001b5u, 0x0004003du, 0x00000013u, 0x000011eau, 0x000011e9u, 0x0008004fu, 0x0000065au, 0x000011ebu, 0x000011eau, 0x000011eau, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000011ecu, 0x000011ebu, 0x0003003eu, 0x000011e3u, 0x000011ecu, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011ddu, 0x00050041u, 0x0000004cu, 0x000011eeu, 0x0000015fu, 0x000001b8u, 0x0004003du, 0x00000013u, 0x000011efu, 0x000011eeu, 0x0008004fu, 0x0000065au, 0x000011f0u, 0x000011efu, 0x000011efu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000011f1u, 0x000011f0u, 0x0003003eu, 0x000011e3u, 0x000011f1u, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011deu, 0x00050041u, 0x00000173u, 0x000011f4u, 0x0000015fu, 0x000001afu, 0x0004003du, 0x00000010u, 0x000011f5u, 0x000011f4u, 0x0008004fu, 0x000011f3u, 0x000011f6u, 0x000011f5u, 0x000011f5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000011f7u, 0x000011f6u, 0x0004007cu, 0x0000005du, 0x000011f8u, 0x000011f7u, 0x0003003eu, 0x000011e3u, 0x000011f8u, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011dfu, 0x00050041u, 0x00000133u, 0x000011fau, 0x0000015fu, 0x000001dcu, 0x0004003du, 0x00000012u, 0x000011fbu, 0x000011fau, 0x00040072u, 0x00000008u, 0x000011fcu, 0x000011fbu, 0x00060050u, 0x0000005du, 0x000011fdu, 0x000011fcu, 0x000011fcu, 0x000011fcu, 0x0003003eu, 0x000011e3u, 0x000011fdu, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011e0u, 0x0003003eu, 0x000011e3u, 0x00001200u, 0x000200f9u, 0x000011e2u, 0x000200f8u, 0x000011e2u, 0x001100f5u, 0x0000005du, 0x0000b319u, 0x00001206u, 0x000011e1u, 0x000011e7u, 0x000011dbu, 0x000011ecu, 0x000011dcu, 0x000011f1u, 0x000011ddu, 0x000011f8u, 0x000011deu, 0x000011fdu, 0x000011dfu, 0x00001200u, 0x000011e0u, 0x0004003du, 0x00000008u, 0x00001209u, 0x00000161u, 0x000300f7u, 0x00001210u, 0x00000000u, 0x000d00fbu, 0x00001209u, 0x0000120fu, 0x00000000u, 0x0000120au, 0x00000001u, 0x0000120bu, 0x00000002u, 0x0000120cu, 0x00000004u, 0x0000120du, 0x00000006u, 0x0000120eu, 0x000200f8u, 0x0000120fu, 0x00060041u, 0x00000174u, 0x00001224u, 0x0000015fu, 0x0000019cu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001225u, 0x00001224u, 0x00040071u, 0x00000006u, 0x00001226u, 0x00001225u, 0x0004007cu, 0x00000008u, 0x00001227u, 0x00001226u, 0x0003003eu, 0x00001211u, 0x00001227u, 0x000200f9u, 0x00001210u, 0x000200f8u, 0x0000120au, 0x00060041u, 0x00000133u, 0x00001212u, 0x0000015fu, 0x000001b2u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001213u, 0x00001212u, 0x00040072u, 0x00000008u, 0x00001214u, 0x00001213u, 0x0003003eu, 0x00001211u, 0x00001214u, 0x000200f9u, 0x00001210u, 0x000200f8u, 0x0000120bu, 0x00060041u, 0x00000133u, 0x00001216u, 0x0000015fu, 0x000001b5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001217u, 0x00001216u, 0x00040072u, 0x00000008u, 0x00001218u, 0x00001217u, 0x0003003eu, 0x00001211u, 0x00001218u, 0x000200f9u, 0x00001210u, 0x000200f8u, 0x0000120cu, 0x00060041u, 0x00000133u, 0x0000121au, 0x0000015fu, 0x000001b8u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000121bu, 0x0000121au, 0x00040072u, 0x00000008u, 0x0000121cu, 0x0000121bu, 0x0003003eu, 0x00001211u, 0x0000121cu, 0x000200f9u, 0x00001210u, 0x000200f8u, 0x0000120du, 0x00060041u, 0x00000174u, 0x0000121eu, 0x0000015fu, 0x000001afu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000121fu, 0x0000121eu, 0x00040071u, 0x00000006u, 0x00001220u, 0x0000121fu, 0x0004007cu, 0x00000008u, 0x00001221u, 0x00001220u, 0x0003003eu, 0x00001211u, 0x00001221u, 0x000200f9u, 0x00001210u, 0x000200f8u, 0x0000120eu, 0x0003003eu, 0x00001211u, 0x000011ffu, 0x000200f9u, 0x00001210u, 0x000200f8u, 0x00001210u, 0x000f00f5u, 0x00000008u, 0x0000b31au, 0x00001227u, 0x0000120fu, 0x00001214u, 0x0000120au, 0x00001218u, 0x0000120bu, 0x0000121cu, 0x0000120cu, 0x00001221u, 0x0000120du, 0x000011ffu, 0x0000120eu, 0x00050051u, 0x00000008u, 0x0000122cu, 0x0000b319u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000122du, 0x0000b319u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000122eu, 0x0000b319u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000122fu, 0x0000122cu, 0x0000122du, 0x0000122eu, 0x0000b31au, 0x000200feu, 0x0000122fu, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000167u, 0x00000000u, 0x0000015eu, 0x00030037u, 0x0000015du, 0x00000164u, 0x00030037u, 0x00000040u, 0x00000165u, 0x00030037u, 0x00000040u, 0x00000166u, 0x000200f8u, 0x00000168u, 0x0004003bu, 0x0000005eu, 0x0000123au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000126bu, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001232u, 0x00000165u, 0x000300f7u, 0x00001239u, 0x00000000u, 0x000d00fbu, 0x00001232u, 0x00001238u, 0x00000000u, 0x00001233u, 0x00000001u, 0x00001234u, 0x00000002u, 0x00001235u, 0x00000004u, 0x00001236u, 0x00000007u, 0x00001237u, 0x000200f8u, 0x00001238u, 0x00050041u, 0x00000173u, 0x0000125cu, 0x00000164u, 0x000001a6u, 0x0004003du, 0x00000010u, 0x0000125du, 0x0000125cu, 0x0008004fu, 0x000011f3u, 0x0000125eu, 0x0000125du, 0x0000125du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000125fu, 0x0000125eu, 0x0004007cu, 0x0000005du, 0x00001260u, 0x0000125fu, 0x0003003eu, 0x0000123au, 0x00001260u, 0x000200f9u, 0x00001239u, 0x000200f8u, 0x00001233u, 0x00050041u, 0x0000004cu, 0x0000123bu, 0x00000164u, 0x000001b2u, 0x0004003du, 0x00000013u, 0x0000123cu, 0x0000123bu, 0x0008004fu, 0x0000065au, 0x0000123du, 0x0000123cu, 0x0000123cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000123eu, 0x0000123du, 0x0003003eu, 0x0000123au, 0x0000123eu, 0x000200f9u, 0x00001239u, 0x000200f8u, 0x00001234u, 0x00050041u, 0x0000004cu, 0x00001240u, 0x00000164u, 0x000001b5u, 0x0004003du, 0x00000013u, 0x00001241u, 0x00001240u, 0x0008004fu, 0x0000065au, 0x00001242u, 0x00001241u, 0x00001241u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00001243u, 0x00001242u, 0x0003003eu, 0x0000123au, 0x00001243u, 0x000200f9u, 0x00001239u, 0x000200f8u, 0x00001235u, 0x00050041u, 0x0000004cu, 0x00001245u, 0x00000164u, 0x000001b8u, 0x0004003du, 0x00000013u, 0x00001246u, 0x00001245u, 0x0008004fu, 0x0000065au, 0x00001247u, 0x00001246u, 0x00001246u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00001248u, 0x00001247u, 0x0003003eu, 0x0000123au, 0x00001248u, 0x000200f9u, 0x00001239u, 0x000200f8u, 0x00001236u, 0x00050041u, 0x00000173u, 0x0000124au, 0x00000164u, 0x000001afu, 0x0004003du, 0x00000010u, 0x0000124bu, 0x0000124au, 0x0008004fu, 0x000011f3u, 0x0000124cu, 0x0000124bu, 0x0000124bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000124du, 0x0000124cu, 0x0004007cu, 0x0000005du, 0x0000124eu, 0x0000124du, 0x0003003eu, 0x0000123au, 0x0000124eu, 0x000200f9u, 0x00001239u, 0x000200f8u, 0x00001237u, 0x00060041u, 0x00000174u, 0x00001250u, 0x00000164u, 0x000001a6u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00001251u, 0x00001250u, 0x00040071u, 0x00000006u, 0x00001252u, 0x00001251u, 0x0004007cu, 0x00000008u, 0x00001253u, 0x00001252u, 0x000500c4u, 0x00000008u, 0x00001254u, 0x00001253u, 0x000001d9u, 0x00060041u, 0x00000174u, 0x00001255u, 0x00000164u, 0x000001a6u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00001256u, 0x00001255u, 0x00040071u, 0x00000006u, 0x00001257u, 0x00001256u, 0x0004007cu, 0x00000008u, 0x00001258u, 0x00001257u, 0x000500c5u, 0x00000008u, 0x00001259u, 0x00001254u, 0x00001258u, 0x00060050u, 0x0000005du, 0x0000125au, 0x00001259u, 0x00001259u, 0x00001259u, 0x0003003eu, 0x0000123au, 0x0000125au, 0x000200f9u, 0x00001239u, 0x000200f8u, 0x00001239u, 0x000f00f5u, 0x0000005du, 0x0000b31cu, 0x00001260u, 0x00001238u, 0x0000123eu, 0x00001233u, 0x00001243u, 0x00001234u, 0x00001248u, 0x00001235u, 0x0000124eu, 0x00001236u, 0x0000125au, 0x00001237u, 0x0004003du, 0x00000008u, 0x00001263u, 0x00000166u, 0x000300f7u, 0x0000126au, 0x00000000u, 0x000d00fbu, 0x00001263u, 0x00001269u, 0x00000000u, 0x00001264u, 0x00000001u, 0x00001265u, 0x00000002u, 0x00001266u, 0x00000004u, 0x00001267u, 0x00000006u, 0x00001268u, 0x000200f8u, 0x00001269u, 0x00060041u, 0x00000174u, 0x0000127eu, 0x00000164u, 0x000001a6u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000127fu, 0x0000127eu, 0x00040071u, 0x00000006u, 0x00001280u, 0x0000127fu, 0x0004007cu, 0x00000008u, 0x00001281u, 0x00001280u, 0x0003003eu, 0x0000126bu, 0x00001281u, 0x000200f9u, 0x0000126au, 0x000200f8u, 0x00001264u, 0x00060041u, 0x00000133u, 0x0000126cu, 0x00000164u, 0x000001b2u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000126du, 0x0000126cu, 0x00040072u, 0x00000008u, 0x0000126eu, 0x0000126du, 0x0003003eu, 0x0000126bu, 0x0000126eu, 0x000200f9u, 0x0000126au, 0x000200f8u, 0x00001265u, 0x00060041u, 0x00000133u, 0x00001270u, 0x00000164u, 0x000001b5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001271u, 0x00001270u, 0x00040072u, 0x00000008u, 0x00001272u, 0x00001271u, 0x0003003eu, 0x0000126bu, 0x00001272u, 0x000200f9u, 0x0000126au, 0x000200f8u, 0x00001266u, 0x00060041u, 0x00000133u, 0x00001274u, 0x00000164u, 0x000001b8u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001275u, 0x00001274u, 0x00040072u, 0x00000008u, 0x00001276u, 0x00001275u, 0x0003003eu, 0x0000126bu, 0x00001276u, 0x000200f9u, 0x0000126au, 0x000200f8u, 0x00001267u, 0x00060041u, 0x00000174u, 0x00001278u, 0x00000164u, 0x000001afu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001279u, 0x00001278u, 0x00040071u, 0x00000006u, 0x0000127au, 0x00001279u, 0x0004007cu, 0x00000008u, 0x0000127bu, 0x0000127au, 0x0003003eu, 0x0000126bu, 0x0000127bu, 0x000200f9u, 0x0000126au, 0x000200f8u, 0x00001268u, 0x0003003eu, 0x0000126bu, 0x000011ffu, 0x000200f9u, 0x0000126au, 0x000200f8u, 0x0000126au, 0x000f00f5u, 0x00000008u, 0x0000b31du, 0x00001281u, 0x00001269u, 0x0000126eu, 0x00001264u, 0x00001272u, 0x00001265u, 0x00001276u, 0x00001266u, 0x0000127bu, 0x00001267u, 0x000011ffu, 0x00001268u, 0x00050051u, 0x00000008u, 0x00001286u, 0x0000b31cu, 0x00000000u, 0x00050051u, 0x00000008u, 0x00001287u, 0x0000b31cu, 0x00000001u, 0x00050051u, 0x00000008u, 0x00001288u, 0x0000b31cu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001289u, 0x00001286u, 0x00001287u, 0x00001288u, 0x0000b31du, 0x000200feu, 0x00001289u, 0x00010038u, 0x00050036u, 0x00000009u, 0x0000016cu, 0x00000000u, 0x0000015eu, 0x00030037u, 0x0000015du, 0x00000169u, 0x00030037u, 0x00000040u, 0x0000016au, 0x00030037u, 0x00000040u, 0x0000016bu, 0x000200f8u, 0x0000016du, 0x0004003bu, 0x0000005eu, 0x00001299u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000012e3u, 0x00000007u, 0x0004003du, 0x00000008u, 0x0000128cu, 0x0000016au, 0x000300f7u, 0x00001298u, 0x00000000u, 0x001700fbu, 0x0000128cu, 0x00001297u, 0x00000000u, 0x0000128du, 0x00000007u, 0x0000128eu, 0x00000001u, 0x0000128fu, 0x00000002u, 0x00001290u, 0x00000004u, 0x00001291u, 0x00000008u, 0x00001292u, 0x00000009u, 0x00001293u, 0x0000000bu, 0x00001294u, 0x0000000du, 0x00001295u, 0x0000000fu, 0x00001296u, 0x000200f8u, 0x00001297u, 0x00050041u, 0x00000173u, 0x000012d5u, 0x00000169u, 0x000001a9u, 0x0004003du, 0x00000010u, 0x000012d6u, 0x000012d5u, 0x0008004fu, 0x000011f3u, 0x000012d7u, 0x000012d6u, 0x000012d6u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000012d8u, 0x000012d7u, 0x0004007cu, 0x0000005du, 0x000012d9u, 0x000012d8u, 0x0003003eu, 0x00001299u, 0x000012d9u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x0000128du, 0x00050041u, 0x0000004cu, 0x0000129au, 0x00000169u, 0x000001b2u, 0x0004003du, 0x00000013u, 0x0000129bu, 0x0000129au, 0x0008004fu, 0x0000065au, 0x0000129cu, 0x0000129bu, 0x0000129bu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000129du, 0x0000129cu, 0x0003003eu, 0x00001299u, 0x0000129du, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x0000128eu, 0x00050041u, 0x0000004cu, 0x0000129fu, 0x00000169u, 0x000001b2u, 0x0004003du, 0x00000013u, 0x000012a0u, 0x0000129fu, 0x0008004fu, 0x0000065au, 0x000012a1u, 0x000012a0u, 0x000012a0u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000012a2u, 0x000012a1u, 0x0003003eu, 0x00001299u, 0x000012a2u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x0000128fu, 0x00050041u, 0x0000004cu, 0x000012a4u, 0x00000169u, 0x000001b5u, 0x0004003du, 0x00000013u, 0x000012a5u, 0x000012a4u, 0x0008004fu, 0x0000065au, 0x000012a6u, 0x000012a5u, 0x000012a5u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000012a7u, 0x000012a6u, 0x0003003eu, 0x00001299u, 0x000012a7u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001290u, 0x00050041u, 0x0000004cu, 0x000012a9u, 0x00000169u, 0x000001b8u, 0x0004003du, 0x00000013u, 0x000012aau, 0x000012a9u, 0x0008004fu, 0x0000065au, 0x000012abu, 0x000012aau, 0x000012aau, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x000012acu, 0x000012abu, 0x0003003eu, 0x00001299u, 0x000012acu, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001291u, 0x00050041u, 0x00000173u, 0x000012aeu, 0x00000169u, 0x000001afu, 0x0004003du, 0x00000010u, 0x000012afu, 0x000012aeu, 0x0008004fu, 0x000011f3u, 0x000012b0u, 0x000012afu, 0x000012afu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x000012b1u, 0x000012b0u, 0x0004007cu, 0x0000005du, 0x000012b2u, 0x000012b1u, 0x0003003eu, 0x00001299u, 0x000012b2u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001292u, 0x00050041u, 0x0000004cu, 0x000012b4u, 0x00000169u, 0x000001b5u, 0x0004003du, 0x00000013u, 0x000012b5u, 0x000012b4u, 0x0008004fu, 0x0000065au, 0x000012b6u, 0x000012b5u, 0x000012b5u, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000012b7u, 0x000012b6u, 0x0003003eu, 0x00001299u, 0x000012b7u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001293u, 0x00050041u, 0x0000004cu, 0x000012b9u, 0x00000169u, 0x000001b8u, 0x0004003du, 0x00000013u, 0x000012bau, 0x000012b9u, 0x0008004fu, 0x0000065au, 0x000012bbu, 0x000012bau, 0x000012bau, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040072u, 0x0000005du, 0x000012bcu, 0x000012bbu, 0x0003003eu, 0x00001299u, 0x000012bcu, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001294u, 0x00050041u, 0x00000173u, 0x000012beu, 0x00000169u, 0x000001afu, 0x0004003du, 0x00000010u, 0x000012bfu, 0x000012beu, 0x0008004fu, 0x000011f3u, 0x000012c0u, 0x000012bfu, 0x000012bfu, 0x00000003u, 0x00000003u, 0x00000003u, 0x00040071u, 0x0000026du, 0x000012c1u, 0x000012c0u, 0x0004007cu, 0x0000005du, 0x000012c2u, 0x000012c1u, 0x0003003eu, 0x00001299u, 0x000012c2u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001295u, 0x00050041u, 0x00000133u, 0x000012c4u, 0x00000169u, 0x000001d9u, 0x0004003du, 0x00000012u, 0x000012c5u, 0x000012c4u, 0x00040072u, 0x00000008u, 0x000012c6u, 0x000012c5u, 0x00060050u, 0x0000005du, 0x000012c7u, 0x000012c6u, 0x000012c6u, 0x000012c6u, 0x0003003eu, 0x00001299u, 0x000012c7u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001296u, 0x00060041u, 0x00000174u, 0x000012c9u, 0x00000169u, 0x000001a9u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000012cau, 0x000012c9u, 0x00040071u, 0x00000006u, 0x000012cbu, 0x000012cau, 0x0004007cu, 0x00000008u, 0x000012ccu, 0x000012cbu, 0x000500c4u, 0x00000008u, 0x000012cdu, 0x000012ccu, 0x000001d9u, 0x00060041u, 0x00000174u, 0x000012ceu, 0x00000169u, 0x000001a9u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000012cfu, 0x000012ceu, 0x00040071u, 0x00000006u, 0x000012d0u, 0x000012cfu, 0x0004007cu, 0x00000008u, 0x000012d1u, 0x000012d0u, 0x000500c5u, 0x00000008u, 0x000012d2u, 0x000012cdu, 0x000012d1u, 0x00060050u, 0x0000005du, 0x000012d3u, 0x000012d2u, 0x000012d2u, 0x000012d2u, 0x0003003eu, 0x00001299u, 0x000012d3u, 0x000200f9u, 0x00001298u, 0x000200f8u, 0x00001298u, 0x001900f5u, 0x0000005du, 0x0000b31fu, 0x000012d9u, 0x00001297u, 0x0000129du, 0x0000128du, 0x000012a2u, 0x0000128eu, 0x000012a7u, 0x0000128fu, 0x000012acu, 0x00001290u, 0x000012b2u, 0x00001291u, 0x000012b7u, 0x00001292u, 0x000012bcu, 0x00001293u, 0x000012c2u, 0x00001294u, 0x000012c7u, 0x00001295u, 0x000012d3u, 0x00001296u, 0x0004003du, 0x00000008u, 0x000012dcu, 0x0000016bu, 0x000300f7u, 0x000012e2u, 0x00000000u, 0x000b00fbu, 0x000012dcu, 0x000012e1u, 0x00000000u, 0x000012ddu, 0x00000001u, 0x000012deu, 0x00000002u, 0x000012dfu, 0x00000004u, 0x000012e0u, 0x000200f8u, 0x000012e1u, 0x00060041u, 0x00000174u, 0x000012f5u, 0x00000169u, 0x000001a9u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000012f6u, 0x000012f5u, 0x00040071u, 0x00000006u, 0x000012f7u, 0x000012f6u, 0x0004007cu, 0x00000008u, 0x000012f8u, 0x000012f7u, 0x0003003eu, 0x000012e3u, 0x000012f8u, 0x000200f9u, 0x000012e2u, 0x000200f8u, 0x000012ddu, 0x00050041u, 0x00000133u, 0x000012e4u, 0x00000169u, 0x000001d9u, 0x0004003du, 0x00000012u, 0x000012e5u, 0x000012e4u, 0x00040072u, 0x00000008u, 0x000012e6u, 0x000012e5u, 0x0003003eu, 0x000012e3u, 0x000012e6u, 0x000200f9u, 0x000012e2u, 0x000200f8u, 0x000012deu, 0x00060041u, 0x00000133u, 0x000012e8u, 0x00000169u, 0x000001b5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000012e9u, 0x000012e8u, 0x00040072u, 0x00000008u, 0x000012eau, 0x000012e9u, 0x0003003eu, 0x000012e3u, 0x000012eau, 0x000200f9u, 0x000012e2u, 0x000200f8u, 0x000012dfu, 0x00060041u, 0x00000133u, 0x000012ecu, 0x00000169u, 0x000001b8u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x000012edu, 0x000012ecu, 0x00040072u, 0x00000008u, 0x000012eeu, 0x000012edu, 0x0003003eu, 0x000012e3u, 0x000012eeu, 0x000200f9u, 0x000012e2u, 0x000200f8u, 0x000012e0u, 0x00060041u, 0x00000174u, 0x000012f0u, 0x00000169u, 0x000001afu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000012f1u, 0x000012f0u, 0x00040071u, 0x00000006u, 0x000012f2u, 0x000012f1u, 0x0004007cu, 0x00000008u, 0x000012f3u, 0x000012f2u, 0x0003003eu, 0x000012e3u, 0x000012f3u, 0x000200f9u, 0x000012e2u, 0x000200f8u, 0x000012e2u, 0x000d00f5u, 0x00000008u, 0x0000b320u, 0x000012f8u, 0x000012e1u, 0x000012e6u, 0x000012ddu, 0x000012eau, 0x000012deu, 0x000012eeu, 0x000012dfu, 0x000012f3u, 0x000012e0u, 0x00050051u, 0x00000008u, 0x000012fdu, 0x0000b31fu, 0x00000000u, 0x00050051u, 0x00000008u, 0x000012feu, 0x0000b31fu, 0x00000001u, 0x00050051u, 0x00000008u, 0x000012ffu, 0x0000b31fu, 0x00000002u, 0x00070050u, 0x00000009u, 0x00001300u, 0x000012fdu, 0x000012feu, 0x000012ffu, 0x0000b320u, 0x000200feu, 0x00001300u, 0x00010038u, 0x00050036u, 0x00000009u, 0x00000171u, 0x00000000u, 0x0000015eu, 0x00030037u, 0x0000015du, 0x0000016eu, 0x00030037u, 0x00000040u, 0x0000016fu, 0x00030037u, 0x00000040u, 0x00000170u, 0x000200f8u, 0x00000172u, 0x0004003bu, 0x0000005eu, 0x0000130bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001331u, 0x00000007u, 0x0004003du, 0x00000008u, 0x00001303u, 0x0000016fu, 0x000300f7u, 0x0000130au, 0x00000000u, 0x000d00fbu, 0x00001303u, 0x00001309u, 0x00000000u, 0x00001304u, 0x00000001u, 0x00001305u, 0x00000002u, 0x00001306u, 0x00000004u, 0x00001307u, 0x00000006u, 0x00001308u, 0x000200f8u, 0x00001309u, 0x00050041u, 0x00000173u, 0x00001322u, 0x0000016eu, 0x000001acu, 0x0004003du, 0x00000010u, 0x00001323u, 0x00001322u, 0x0008004fu, 0x000011f3u, 0x00001324u, 0x00001323u, 0x00001323u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x00001325u, 0x00001324u, 0x0004007cu, 0x0000005du, 0x00001326u, 0x00001325u, 0x0003003eu, 0x0000130bu, 0x00001326u, 0x000200f9u, 0x0000130au, 0x000200f8u, 0x00001304u, 0x00050041u, 0x0000004cu, 0x0000130cu, 0x0000016eu, 0x000001b2u, 0x0004003du, 0x00000013u, 0x0000130du, 0x0000130cu, 0x0008004fu, 0x0000065au, 0x0000130eu, 0x0000130du, 0x0000130du, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x0000130fu, 0x0000130eu, 0x0003003eu, 0x0000130bu, 0x0000130fu, 0x000200f9u, 0x0000130au, 0x000200f8u, 0x00001305u, 0x00050041u, 0x0000004cu, 0x00001311u, 0x0000016eu, 0x000001b5u, 0x0004003du, 0x00000013u, 0x00001312u, 0x00001311u, 0x0008004fu, 0x0000065au, 0x00001313u, 0x00001312u, 0x00001312u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00001314u, 0x00001313u, 0x0003003eu, 0x0000130bu, 0x00001314u, 0x000200f9u, 0x0000130au, 0x000200f8u, 0x00001306u, 0x00050041u, 0x0000004cu, 0x00001316u, 0x0000016eu, 0x000001b8u, 0x0004003du, 0x00000013u, 0x00001317u, 0x00001316u, 0x0008004fu, 0x0000065au, 0x00001318u, 0x00001317u, 0x00001317u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040072u, 0x0000005du, 0x00001319u, 0x00001318u, 0x0003003eu, 0x0000130bu, 0x00001319u, 0x000200f9u, 0x0000130au, 0x000200f8u, 0x00001307u, 0x00050041u, 0x00000173u, 0x0000131bu, 0x0000016eu, 0x000001afu, 0x0004003du, 0x00000010u, 0x0000131cu, 0x0000131bu, 0x0008004fu, 0x000011f3u, 0x0000131du, 0x0000131cu, 0x0000131cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x00040071u, 0x0000026du, 0x0000131eu, 0x0000131du, 0x0004007cu, 0x0000005du, 0x0000131fu, 0x0000131eu, 0x0003003eu, 0x0000130bu, 0x0000131fu, 0x000200f9u, 0x0000130au, 0x000200f8u, 0x00001308u, 0x0003003eu, 0x0000130bu, 0x00001200u, 0x000200f9u, 0x0000130au, 0x000200f8u, 0x0000130au, 0x000f00f5u, 0x0000005du, 0x0000b322u, 0x00001326u, 0x00001309u, 0x0000130fu, 0x00001304u, 0x00001314u, 0x00001305u, 0x00001319u, 0x00001306u, 0x0000131fu, 0x00001307u, 0x00001200u, 0x00001308u, 0x0004003du, 0x00000008u, 0x00001329u, 0x00000170u, 0x000300f7u, 0x00001330u, 0x00000000u, 0x000d00fbu, 0x00001329u, 0x0000132fu, 0x00000000u, 0x0000132au, 0x00000001u, 0x0000132bu, 0x00000002u, 0x0000132cu, 0x00000004u, 0x0000132du, 0x00000006u, 0x0000132eu, 0x000200f8u, 0x0000132fu, 0x00060041u, 0x00000174u, 0x00001344u, 0x0000016eu, 0x000001acu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001345u, 0x00001344u, 0x00040071u, 0x00000006u, 0x00001346u, 0x00001345u, 0x0004007cu, 0x00000008u, 0x00001347u, 0x00001346u, 0x0003003eu, 0x00001331u, 0x00001347u, 0x000200f9u, 0x00001330u, 0x000200f8u, 0x0000132au, 0x00060041u, 0x00000133u, 0x00001332u, 0x0000016eu, 0x000001b2u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001333u, 0x00001332u, 0x00040072u, 0x00000008u, 0x00001334u, 0x00001333u, 0x0003003eu, 0x00001331u, 0x00001334u, 0x000200f9u, 0x00001330u, 0x000200f8u, 0x0000132bu, 0x00060041u, 0x00000133u, 0x00001336u, 0x0000016eu, 0x000001b5u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001337u, 0x00001336u, 0x00040072u, 0x00000008u, 0x00001338u, 0x00001337u, 0x0003003eu, 0x00001331u, 0x00001338u, 0x000200f9u, 0x00001330u, 0x000200f8u, 0x0000132cu, 0x00060041u, 0x00000133u, 0x0000133au, 0x0000016eu, 0x000001b8u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x0000133bu, 0x0000133au, 0x00040072u, 0x00000008u, 0x0000133cu, 0x0000133bu, 0x0003003eu, 0x00001331u, 0x0000133cu, 0x000200f9u, 0x00001330u, 0x000200f8u, 0x0000132du, 0x00060041u, 0x00000174u, 0x0000133eu, 0x0000016eu, 0x000001afu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000133fu, 0x0000133eu, 0x00040071u, 0x00000006u, 0x00001340u, 0x0000133fu, 0x0004007cu, 0x00000008u, 0x00001341u, 0x00001340u, 0x0003003eu, 0x00001331u, 0x00001341u, 0x000200f9u, 0x00001330u, 0x000200f8u, 0x0000132eu, 0x0003003eu, 0x00001331u, 0x000011ffu, 0x000200f9u, 0x00001330u, 0x000200f8u, 0x00001330u, 0x000f00f5u, 0x00000008u, 0x0000b323u, 0x00001347u, 0x0000132fu, 0x00001334u, 0x0000132au, 0x00001338u, 0x0000132bu, 0x0000133cu, 0x0000132cu, 0x00001341u, 0x0000132du, 0x000011ffu, 0x0000132eu, 0x00050051u, 0x00000008u, 0x0000134cu, 0x0000b322u, 0x00000000u, 0x00050051u, 0x00000008u, 0x0000134du, 0x0000b322u, 0x00000001u, 0x00050051u, 0x00000008u, 0x0000134eu, 0x0000b322u, 0x00000002u, 0x00070050u, 0x00000009u, 0x0000134fu, 0x0000134cu, 0x0000134du, 0x0000134eu, 0x0000b323u, 0x000200feu, 0x0000134fu, 0x00010038u, 0x00050036u, 0x00000013u, 0x0000017fu, 0x00000000u, 0x00000175u, 0x00030037u, 0x0000015du, 0x00000176u, 0x00030037u, 0x00000173u, 0x00000177u, 0x00030037u, 0x00000173u, 0x00000178u, 0x00030037u, 0x00000040u, 0x00000179u, 0x00030037u, 0x00000040u, 0x0000017au, 0x00030037u, 0x00000064u, 0x0000017bu, 0x00030037u, 0x00000064u, 0x0000017cu, 0x00030037u, 0x00000064u, 0x0000017du, 0x00030037u, 0x00000174u, 0x0000017eu, 0x000200f8u, 0x00000180u, 0x0004003bu, 0x00000047u, 0x00001352u, 0x00000007u, 0x0004003bu, 0x0000015du, 0x0000135bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000135du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000135eu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001360u, 0x00000007u, 0x0004003bu, 0x0000015du, 0x00001369u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000136bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000136cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000136eu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x00001377u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001379u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000137au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000137cu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x00001385u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001387u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001388u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000138au, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000138bu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000138du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000138fu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001391u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001397u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000139bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000139du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013a9u, 0x00000007u, 0x00050041u, 0x00000174u, 0x00001353u, 0x00000177u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x00001354u, 0x00001353u, 0x00040071u, 0x00000006u, 0x00001355u, 0x00001354u, 0x0004007cu, 0x00000008u, 0x00001356u, 0x00001355u, 0x00050041u, 0x00000174u, 0x00001357u, 0x00000178u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x00001358u, 0x00001357u, 0x00040071u, 0x00000006u, 0x00001359u, 0x00001358u, 0x0004007cu, 0x00000008u, 0x0000135au, 0x00001359u, 0x0004003du, 0x0000015cu, 0x0000135cu, 0x00000176u, 0x0003003eu, 0x0000135bu, 0x0000135cu, 0x0003003eu, 0x0000135du, 0x00001356u, 0x0003003eu, 0x0000135eu, 0x0000135au, 0x00070039u, 0x00000009u, 0x0000135fu, 0x00000162u, 0x0000135bu, 0x0000135du, 0x0000135eu, 0x0003003eu, 0x00001352u, 0x0000135fu, 0x00050041u, 0x00000174u, 0x00001361u, 0x00000177u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00001362u, 0x00001361u, 0x00040071u, 0x00000006u, 0x00001363u, 0x00001362u, 0x0004007cu, 0x00000008u, 0x00001364u, 0x00001363u, 0x00050041u, 0x00000174u, 0x00001365u, 0x00000178u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x00001366u, 0x00001365u, 0x00040071u, 0x00000006u, 0x00001367u, 0x00001366u, 0x0004007cu, 0x00000008u, 0x00001368u, 0x00001367u, 0x0004003du, 0x0000015cu, 0x0000136au, 0x00000176u, 0x0003003eu, 0x00001369u, 0x0000136au, 0x0003003eu, 0x0000136bu, 0x00001364u, 0x0003003eu, 0x0000136cu, 0x00001368u, 0x00070039u, 0x00000009u, 0x0000136du, 0x00000167u, 0x00001369u, 0x0000136bu, 0x0000136cu, 0x0003003eu, 0x00001360u, 0x0000136du, 0x00050041u, 0x00000174u, 0x0000136fu, 0x00000177u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00001370u, 0x0000136fu, 0x00040071u, 0x00000006u, 0x00001371u, 0x00001370u, 0x0004007cu, 0x00000008u, 0x00001372u, 0x00001371u, 0x00050041u, 0x00000174u, 0x00001373u, 0x00000178u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x00001374u, 0x00001373u, 0x00040071u, 0x00000006u, 0x00001375u, 0x00001374u, 0x0004007cu, 0x00000008u, 0x00001376u, 0x00001375u, 0x0004003du, 0x0000015cu, 0x00001378u, 0x00000176u, 0x0003003eu, 0x00001377u, 0x00001378u, 0x0003003eu, 0x00001379u, 0x00001372u, 0x0003003eu, 0x0000137au, 0x00001376u, 0x00070039u, 0x00000009u, 0x0000137bu, 0x0000016cu, 0x00001377u, 0x00001379u, 0x0000137au, 0x0003003eu, 0x0000136eu, 0x0000137bu, 0x00050041u, 0x00000174u, 0x0000137du, 0x00000177u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000137eu, 0x0000137du, 0x00040071u, 0x00000006u, 0x0000137fu, 0x0000137eu, 0x0004007cu, 0x00000008u, 0x00001380u, 0x0000137fu, 0x00050041u, 0x00000174u, 0x00001381u, 0x00000178u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001382u, 0x00001381u, 0x00040071u, 0x00000006u, 0x00001383u, 0x00001382u, 0x0004007cu, 0x00000008u, 0x00001384u, 0x00001383u, 0x0004003du, 0x0000015cu, 0x00001386u, 0x00000176u, 0x0003003eu, 0x00001385u, 0x00001386u, 0x0003003eu, 0x00001387u, 0x00001380u, 0x0003003eu, 0x00001388u, 0x00001384u, 0x00070039u, 0x00000009u, 0x00001389u, 0x00000171u, 0x00001385u, 0x00001387u, 0x00001388u, 0x0003003eu, 0x0000137cu, 0x00001389u, 0x0003003eu, 0x0000138bu, 0x0000135fu, 0x0003003eu, 0x0000138du, 0x0000136du, 0x0003003eu, 0x0000138fu, 0x0000137bu, 0x0003003eu, 0x00001391u, 0x00001389u, 0x00080039u, 0x00000013u, 0x00001393u, 0x0000015au, 0x0000138bu, 0x0000138du, 0x0000138fu, 0x00001391u, 0x0003003eu, 0x0000138au, 0x00001393u, 0x0004003du, 0x00000063u, 0x00001394u, 0x0000017du, 0x000300f7u, 0x00001396u, 0x00000000u, 0x000400fau, 0x00001394u, 0x00001395u, 0x000013bbu, 0x000200f8u, 0x00001395u, 0x00050041u, 0x00000133u, 0x00001398u, 0x0000138au, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001399u, 0x00001398u, 0x00040072u, 0x00000008u, 0x0000139au, 0x00001399u, 0x0003003eu, 0x0000139bu, 0x0000139au, 0x00050039u, 0x00000008u, 0x0000139cu, 0x00000053u, 0x0000139bu, 0x0003003eu, 0x00001397u, 0x0000139cu, 0x00050080u, 0x00000008u, 0x000013a0u, 0x0000139cu, 0x000001a6u, 0x000500c3u, 0x00000008u, 0x000013a1u, 0x000013a0u, 0x000001d9u, 0x00050080u, 0x00000008u, 0x000013a2u, 0x0000139cu, 0x000013a1u, 0x0003003eu, 0x0000139du, 0x000013a2u, 0x0004003du, 0x00000063u, 0x000013a3u, 0x0000017cu, 0x000300f7u, 0x000013a5u, 0x00000000u, 0x000400fau, 0x000013a3u, 0x000013a4u, 0x000013b3u, 0x000200f8u, 0x000013a4u, 0x0004003du, 0x00000063u, 0x000013a6u, 0x0000017bu, 0x000300f7u, 0x000013a8u, 0x00000000u, 0x000400fau, 0x000013a6u, 0x000013a7u, 0x000013afu, 0x000200f8u, 0x000013a7u, 0x0004003du, 0x00000008u, 0x000013abu, 0x0000017au, 0x00050084u, 0x00000008u, 0x000013acu, 0x000013a2u, 0x000013abu, 0x00050080u, 0x00000008u, 0x000013adu, 0x000013acu, 0x000001afu, 0x000500c3u, 0x00000008u, 0x000013aeu, 0x000013adu, 0x000001acu, 0x0003003eu, 0x000013a9u, 0x000013aeu, 0x000200f9u, 0x000013a8u, 0x000200f8u, 0x000013afu, 0x0004003du, 0x00000008u, 0x000013b0u, 0x0000017au, 0x000500c4u, 0x00000008u, 0x000013b1u, 0x000013b0u, 0x000001b2u, 0x0003003eu, 0x000013a9u, 0x000013b1u, 0x000200f9u, 0x000013a8u, 0x000200f8u, 0x000013a8u, 0x000700f5u, 0x00000008u, 0x0000b324u, 0x000013aeu, 0x000013a7u, 0x000013b1u, 0x000013afu, 0x0003003eu, 0x0000139du, 0x0000b324u, 0x000200f9u, 0x000013a5u, 0x000200f8u, 0x000013b3u, 0x0004003du, 0x00000008u, 0x000013b4u, 0x00000179u, 0x00050080u, 0x00000008u, 0x000013b6u, 0x000013a2u, 0x000013b4u, 0x0003003eu, 0x0000139du, 0x000013b6u, 0x000200f9u, 0x000013a5u, 0x000200f8u, 0x000013a5u, 0x000700f5u, 0x00000008u, 0x0000b325u, 0x0000b324u, 0x000013a8u, 0x000013b6u, 0x000013b3u, 0x0008000cu, 0x00000008u, 0x000013b8u, 0x00000001u, 0x0000002du, 0x0000b325u, 0x0000019cu, 0x00000311u, 0x00040072u, 0x0000031bu, 0x000013b9u, 0x000013b8u, 0x0004007cu, 0x0000000fu, 0x000013bau, 0x000013b9u, 0x0003003eu, 0x0000017eu, 0x000013bau, 0x000200f9u, 0x00001396u, 0x000200f8u, 0x000013bbu, 0x0003003eu, 0x0000017eu, 0x000002d4u, 0x000200f9u, 0x00001396u, 0x000200f8u, 0x00001396u, 0x0004003du, 0x00000013u, 0x000013bcu, 0x0000138au, 0x000200feu, 0x000013bcu, 0x00010038u, 0x00050036u, 0x00000013u, 0x00000189u, 0x00000000u, 0x00000181u, 0x00030037u, 0x0000015du, 0x00000182u, 0x00030037u, 0x00000173u, 0x00000183u, 0x00030037u, 0x00000173u, 0x00000184u, 0x00030037u, 0x00000040u, 0x00000185u, 0x00030037u, 0x00000040u, 0x00000186u, 0x00030037u, 0x00000064u, 0x00000187u, 0x00030037u, 0x00000064u, 0x00000188u, 0x000200f8u, 0x0000018au, 0x0004003bu, 0x00000047u, 0x000013bfu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x000013c8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013cau, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013cbu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013cdu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x000013d6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013d8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013d9u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013dbu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x000013e4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013e6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013e7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013e9u, 0x00000007u, 0x0004003bu, 0x0000015du, 0x000013f2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013f4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000013f5u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000013f7u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013f8u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013fau, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013fcu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000013feu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001403u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001405u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001412u, 0x00000007u, 0x00050041u, 0x00000174u, 0x000013c0u, 0x00000183u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000013c1u, 0x000013c0u, 0x00040071u, 0x00000006u, 0x000013c2u, 0x000013c1u, 0x0004007cu, 0x00000008u, 0x000013c3u, 0x000013c2u, 0x00050041u, 0x00000174u, 0x000013c4u, 0x00000184u, 0x0000028eu, 0x0004003du, 0x0000000fu, 0x000013c5u, 0x000013c4u, 0x00040071u, 0x00000006u, 0x000013c6u, 0x000013c5u, 0x0004007cu, 0x00000008u, 0x000013c7u, 0x000013c6u, 0x0004003du, 0x0000015cu, 0x000013c9u, 0x00000182u, 0x0003003eu, 0x000013c8u, 0x000013c9u, 0x0003003eu, 0x000013cau, 0x000013c3u, 0x0003003eu, 0x000013cbu, 0x000013c7u, 0x00070039u, 0x00000009u, 0x000013ccu, 0x00000162u, 0x000013c8u, 0x000013cau, 0x000013cbu, 0x0003003eu, 0x000013bfu, 0x000013ccu, 0x00050041u, 0x00000174u, 0x000013ceu, 0x00000183u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000013cfu, 0x000013ceu, 0x00040071u, 0x00000006u, 0x000013d0u, 0x000013cfu, 0x0004007cu, 0x00000008u, 0x000013d1u, 0x000013d0u, 0x00050041u, 0x00000174u, 0x000013d2u, 0x00000184u, 0x000002f4u, 0x0004003du, 0x0000000fu, 0x000013d3u, 0x000013d2u, 0x00040071u, 0x00000006u, 0x000013d4u, 0x000013d3u, 0x0004007cu, 0x00000008u, 0x000013d5u, 0x000013d4u, 0x0004003du, 0x0000015cu, 0x000013d7u, 0x00000182u, 0x0003003eu, 0x000013d6u, 0x000013d7u, 0x0003003eu, 0x000013d8u, 0x000013d1u, 0x0003003eu, 0x000013d9u, 0x000013d5u, 0x00070039u, 0x00000009u, 0x000013dau, 0x00000167u, 0x000013d6u, 0x000013d8u, 0x000013d9u, 0x0003003eu, 0x000013cdu, 0x000013dau, 0x00050041u, 0x00000174u, 0x000013dcu, 0x00000183u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000013ddu, 0x000013dcu, 0x00040071u, 0x00000006u, 0x000013deu, 0x000013ddu, 0x0004007cu, 0x00000008u, 0x000013dfu, 0x000013deu, 0x00050041u, 0x00000174u, 0x000013e0u, 0x00000184u, 0x000002f8u, 0x0004003du, 0x0000000fu, 0x000013e1u, 0x000013e0u, 0x00040071u, 0x00000006u, 0x000013e2u, 0x000013e1u, 0x0004007cu, 0x00000008u, 0x000013e3u, 0x000013e2u, 0x0004003du, 0x0000015cu, 0x000013e5u, 0x00000182u, 0x0003003eu, 0x000013e4u, 0x000013e5u, 0x0003003eu, 0x000013e6u, 0x000013dfu, 0x0003003eu, 0x000013e7u, 0x000013e3u, 0x00070039u, 0x00000009u, 0x000013e8u, 0x0000016cu, 0x000013e4u, 0x000013e6u, 0x000013e7u, 0x0003003eu, 0x000013dbu, 0x000013e8u, 0x00050041u, 0x00000174u, 0x000013eau, 0x00000183u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000013ebu, 0x000013eau, 0x00040071u, 0x00000006u, 0x000013ecu, 0x000013ebu, 0x0004007cu, 0x00000008u, 0x000013edu, 0x000013ecu, 0x00050041u, 0x00000174u, 0x000013eeu, 0x00000184u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000013efu, 0x000013eeu, 0x00040071u, 0x00000006u, 0x000013f0u, 0x000013efu, 0x0004007cu, 0x00000008u, 0x000013f1u, 0x000013f0u, 0x0004003du, 0x0000015cu, 0x000013f3u, 0x00000182u, 0x0003003eu, 0x000013f2u, 0x000013f3u, 0x0003003eu, 0x000013f4u, 0x000013edu, 0x0003003eu, 0x000013f5u, 0x000013f1u, 0x00070039u, 0x00000009u, 0x000013f6u, 0x00000171u, 0x000013f2u, 0x000013f4u, 0x000013f5u, 0x0003003eu, 0x000013e9u, 0x000013f6u, 0x0003003eu, 0x000013f8u, 0x000013ccu, 0x0003003eu, 0x000013fau, 0x000013dau, 0x0003003eu, 0x000013fcu, 0x000013e8u, 0x0003003eu, 0x000013feu, 0x000013f6u, 0x00080039u, 0x00000013u, 0x00001400u, 0x0000015au, 0x000013f8u, 0x000013fau, 0x000013fcu, 0x000013feu, 0x0003003eu, 0x000013f7u, 0x00001400u, 0x0004003du, 0x00000013u, 0x00001401u, 0x000013f7u, 0x00040072u, 0x00000009u, 0x00001402u, 0x00001401u, 0x0003003eu, 0x00001403u, 0x00001402u, 0x00050039u, 0x00000013u, 0x00001404u, 0x0000004au, 0x00001403u, 0x0003003eu, 0x000013f7u, 0x00001404u, 0x00050041u, 0x00000133u, 0x00001406u, 0x000013f7u, 0x000002fbu, 0x0004003du, 0x00000012u, 0x00001407u, 0x00001406u, 0x00040072u, 0x00000008u, 0x00001408u, 0x00001407u, 0x0004003du, 0x00000012u, 0x0000140au, 0x00001406u, 0x00040072u, 0x00000008u, 0x0000140bu, 0x0000140au, 0x00050080u, 0x00000008u, 0x0000140cu, 0x0000140bu, 0x000001a6u, 0x000500c3u, 0x00000008u, 0x0000140du, 0x0000140cu, 0x000001d9u, 0x00050080u, 0x00000008u, 0x0000140eu, 0x00001408u, 0x0000140du, 0x0003003eu, 0x00001405u, 0x0000140eu, 0x0004003du, 0x00000063u, 0x0000140fu, 0x00000187u, 0x000300f7u, 0x00001411u, 0x00000000u, 0x000400fau, 0x0000140fu, 0x00001410u, 0x0000141au, 0x000200f8u, 0x00001410u, 0x0004003du, 0x00000008u, 0x00001414u, 0x00000186u, 0x00050084u, 0x00000008u, 0x00001415u, 0x0000140eu, 0x00001414u, 0x00050080u, 0x00000008u, 0x00001416u, 0x00001415u, 0x000001afu, 0x000500c3u, 0x00000008u, 0x00001417u, 0x00001416u, 0x000001acu, 0x0003003eu, 0x00001412u, 0x00001417u, 0x000500c3u, 0x00000008u, 0x00001419u, 0x00001417u, 0x000001b2u, 0x0003003eu, 0x00000186u, 0x00001419u, 0x000200f9u, 0x00001411u, 0x000200f8u, 0x0000141au, 0x0004003du, 0x00000008u, 0x0000141bu, 0x00000186u, 0x000500c4u, 0x00000008u, 0x0000141cu, 0x0000141bu, 0x000001b2u, 0x0003003eu, 0x00001412u, 0x0000141cu, 0x000200f9u, 0x00001411u, 0x000200f8u, 0x00001411u, 0x000700f5u, 0x00000008u, 0x0000b327u, 0x00001417u, 0x00001410u, 0x0000141cu, 0x0000141au, 0x0004003du, 0x00000063u, 0x0000141du, 0x00000188u, 0x000300f7u, 0x0000141fu, 0x00000000u, 0x000400fau, 0x0000141du, 0x0000141eu, 0x00001421u, 0x000200f8u, 0x0000141eu, 0x0003003eu, 0x00001405u, 0x0000b327u, 0x000200f9u, 0x0000141fu, 0x000200f8u, 0x00001421u, 0x0004003du, 0x00000008u, 0x00001422u, 0x00000185u, 0x00050080u, 0x00000008u, 0x00001424u, 0x0000140eu, 0x00001422u, 0x0003003eu, 0x00001405u, 0x00001424u, 0x000200f9u, 0x0000141fu, 0x000200f8u, 0x0000141fu, 0x000700f5u, 0x00000008u, 0x0000b328u, 0x0000b327u, 0x0000141eu, 0x00001424u, 0x00001421u, 0x0008000cu, 0x00000008u, 0x00001426u, 0x00000001u, 0x0000002du, 0x0000b328u, 0x0000019cu, 0x00000311u, 0x00040072u, 0x00000012u, 0x00001427u, 0x00001426u, 0x0003003eu, 0x00001406u, 0x00001427u, 0x0004003du, 0x00000013u, 0x00001429u, 0x000013f7u, 0x000200feu, 0x00001429u, 0x00010038u, 0x00050036u, 0x00000063u, 0x00000192u, 0x00000000u, 0x0000018du, 0x00030037u, 0x00000040u, 0x0000018eu, 0x00030037u, 0x00000040u, 0x0000018fu, 0x00030037u, 0x00000007u, 0x00000190u, 0x00030037u, 0x0000018cu, 0x00000191u, 0x000200f8u, 0x00000193u, 0x0004003bu, 0x00000133u, 0x00006e8du, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006e8cu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006e8bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006e8au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006e89u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e88u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e87u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e86u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e85u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e84u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006e63u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006e62u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006e61u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006e60u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006e5fu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e5eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e5du, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e5cu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e5bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006e5au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e3cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e3bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e3au, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e39u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e38u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e37u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e36u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e35u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e34u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e33u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e32u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e31u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e30u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e2fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e11u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e10u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e0fu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e0eu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e0du, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e0cu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e0bu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006e0au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e09u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e08u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e07u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e06u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e05u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006e04u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00006df7u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006df6u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006df5u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006df4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006df3u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006df2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006df1u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006df0u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006defu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006deeu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006dedu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dcfu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dceu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dcdu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dccu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dcbu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dcau, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dc9u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00006dc8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc4u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dc2u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006dbbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00006dbau, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006db9u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006db8u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006db7u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00006db6u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006db1u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006db0u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006dafu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006daeu, 0x00000007u, 0x0004003bu, 0x000001e3u, 0x00006d9au, 0x00000007u, 0x0004003bu, 0x00000133u, 0x00006d99u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d98u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d97u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d96u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x00006d95u, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x00006d94u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d93u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00006d92u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d8eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d8du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00006d8cu, 0x00000007u, 0x0005003bu, 0x00000064u, 0x000018b6u, 0x00000007u, 0x00001099u, 0x0004003bu, 0x00000064u, 0x000018b3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000142du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001443u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001469u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001471u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001477u, 0x00000007u, 0x0004003bu, 0x0000147bu, 0x0000147cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001488u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000148bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000148fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001492u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001495u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001498u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000149bu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000149eu, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000014a1u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001502u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001506u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000150au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000150fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001513u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001518u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000151cu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001521u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001525u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001529u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000152du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001532u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001536u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000153au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000153fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001544u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001549u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000154eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001553u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001558u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000155du, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001562u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001567u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000156cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001580u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001581u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001582u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001584u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000158bu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000159cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000159du, 0x00000007u, 0x0004003bu, 0x00000072u, 0x0000159eu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x000015a0u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000015a3u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000015a5u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000015a7u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000015a9u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000015aau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015aeu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015b8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000015c9u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x000015cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000015ccu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000015ceu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000015d0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000015d2u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000015d4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000015fcu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x000015fdu, 0x00000007u, 0x0004003bu, 0x0000003fu, 0x00001600u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001603u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000160du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000161cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000161fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001624u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001627u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001628u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000162bu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000162eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001631u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001633u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001636u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001637u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001645u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001646u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001647u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001648u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001649u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000164cu, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000164fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001652u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001654u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001656u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001658u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000165au, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000165cu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000165du, 0x00000007u, 0x0004003bu, 0x00000073u, 0x0000165eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000165fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001660u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001668u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000166bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000166fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001672u, 0x00000007u, 0x0004003bu, 0x00000133u, 0x0000167au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000167bu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000167du, 0x00000007u, 0x0004003bu, 0x00000133u, 0x0000167fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001680u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001682u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001684u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001686u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001688u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000168au, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000168cu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000168eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001690u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001699u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016a0u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000016adu, 0x00000007u, 0x0004003bu, 0x00000095u, 0x000016b0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000016b2u, 0x00000007u, 0x0004003bu, 0x00000073u, 0x000016b4u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016b6u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016b8u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016bau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016bcu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016beu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000016bfu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000016c8u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000016cau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016d1u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016e0u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000016e5u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000016e8u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x000016f9u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000170du, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x0000170eu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001710u, 0x00000007u, 0x0004003bu, 0x0000005eu, 0x00001715u, 0x00000007u, 0x0004003bu, 0x00000047u, 0x0000171du, 0x00000007u, 0x0004003bu, 0x00000047u, 0x00001720u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001723u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001724u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00001731u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00001732u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x00001734u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001739u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00001740u, 0x00000007u, 0x0004003bu, 0x00000095u, 0x0000174du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000174fu, 0x00000007u, 0x0004003bu, 0x00000073u, 0x00001751u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001753u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001755u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001757u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x00001759u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x0000175bu, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000175du, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000176au, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x0000176cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001778u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001779u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000177au, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000177cu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000177du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000177eu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000177fu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x00001780u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00001796u, 0x00000007u, 0x0004003bu, 0x0000015du, 0x00001797u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x00001799u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x0000179bu, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000179du, 0x00000007u, 0x0004003bu, 0x00000040u, 0x0000179fu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017a1u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017a3u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017a5u, 0x00000007u, 0x0004003bu, 0x00000174u, 0x000017a7u, 0x00000007u, 0x0004003bu, 0x0000004cu, 0x000017b7u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000017bfu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x000017c0u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000017c2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000017c4u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000017c6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000017c8u, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017cau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017ccu, 0x00000007u, 0x0004003bu, 0x0000015du, 0x000017e2u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000017e4u, 0x00000007u, 0x0004003bu, 0x00000173u, 0x000017e6u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000017e8u, 0x00000007u, 0x0004003bu, 0x00000040u, 0x000017eau, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017ecu, 0x00000007u, 0x0004003bu, 0x00000064u, 0x000017eeu, 0x00000007u, 0x0004003bu, 0x00000174u, 0x00001803u, 0x00000007u, 0x000300f7u, 0x000018b2u, 0x00000000u, 0x000300fbu, 0x0000028eu, 0x000018b5u, 0x000200f8u, 0x000018b5u, 0x0004003du, 0x00000006u, 0x0000142eu, 0x00000190u, 0x0003003eu, 0x0000142du, 0x0000142eu, 0x00050039u, 0x0000001eu, 0x0000142fu, 0x00000021u, 0x0000142du, 0x00050051u, 0x00000008u, 0x00006d8fu, 0x0000142fu, 0x00000000u, 0x0003003eu, 0x00006d8cu, 0x00006d8fu, 0x00050051u, 0x00000008u, 0x00006d90u, 0x0000142fu, 0x00000001u, 0x0003003eu, 0x00006d8du, 0x00006d90u, 0x00050051u, 0x00000008u, 0x00006d91u, 0x0000142fu, 0x00000002u, 0x0003003eu, 0x00006d8eu, 0x00006d91u, 0x0004003du, 0x00000008u, 0x00001430u, 0x0000018fu, 0x00050084u, 0x00000008u, 0x00001433u, 0x00000556u, 0x00006d90u, 0x000500b1u, 0x00000063u, 0x00001434u, 0x00001430u, 0x00001433u, 0x000400a8u, 0x00000063u, 0x00001435u, 0x00001434u, 0x000300f7u, 0x00001437u, 0x00000000u, 0x000400fau, 0x00001435u, 0x00001436u, 0x00001437u, 0x000200f8u, 0x00001436u, 0x0004003du, 0x00000008u, 0x00001438u, 0x0000018fu, 0x00050084u, 0x00000008u, 0x0000143bu, 0x00006d91u, 0x00000556u, 0x00050080u, 0x00000008u, 0x0000143du, 0x0000143bu, 0x0000143cu, 0x000500adu, 0x00000063u, 0x0000143eu, 0x00001438u, 0x0000143du, 0x000200f9u, 0x00001437u, 0x000200f8u, 0x00001437u, 0x000700f5u, 0x00000063u, 0x0000143fu, 0x00001434u, 0x000018b5u, 0x0000143eu, 0x00001436u, 0x000300f7u, 0x00001441u, 0x00000000u, 0x000400fau, 0x0000143fu, 0x00001440u, 0x00001441u, 0x000200f8u, 0x00001440u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x00001441u, 0x0004003du, 0x00000006u, 0x00001449u, 0x00000190u, 0x00070041u, 0x000006a8u, 0x0000144au, 0x00001448u, 0x0000019cu, 0x00001449u, 0x000001dcu, 0x0004003du, 0x0000000fu, 0x0000144bu, 0x0000144au, 0x00040071u, 0x00000006u, 0x0000144cu, 0x0000144bu, 0x0003003eu, 0x00001443u, 0x0000144cu, 0x000300f7u, 0x0000144fu, 0x00000000u, 0x000400fau, 0x0000144du, 0x0000144eu, 0x0000144fu, 0x000200f8u, 0x0000144eu, 0x000500c7u, 0x00000006u, 0x00001452u, 0x0000144cu, 0x00001451u, 0x000500abu, 0x00000063u, 0x00001453u, 0x00001452u, 0x0000028eu, 0x000300f7u, 0x00001455u, 0x00000000u, 0x000400fau, 0x00001453u, 0x00001454u, 0x00001455u, 0x000200f8u, 0x00001454u, 0x0004003du, 0x00000008u, 0x00001458u, 0x0000018eu, 0x000500c7u, 0x00000008u, 0x00001459u, 0x00001458u, 0x00001457u, 0x0003003eu, 0x0000018eu, 0x00001459u, 0x0004003du, 0x00000008u, 0x0000145cu, 0x0000018fu, 0x000500c7u, 0x00000008u, 0x0000145du, 0x0000145cu, 0x0000145bu, 0x0003003eu, 0x0000018fu, 0x0000145du, 0x000200f9u, 0x00001455u, 0x000200f8u, 0x00001455u, 0x000200f9u, 0x0000144fu, 0x000200f8u, 0x0000144fu, 0x00050084u, 0x00000008u, 0x00001461u, 0x00000556u, 0x00006d8fu, 0x0004003du, 0x00000008u, 0x00001462u, 0x0000018fu, 0x00050082u, 0x00000008u, 0x00001466u, 0x00001462u, 0x00001433u, 0x00050080u, 0x00000008u, 0x00001467u, 0x00001461u, 0x00001466u, 0x0004007cu, 0x00000006u, 0x00001468u, 0x00001467u, 0x0003003eu, 0x00001469u, 0x00001468u, 0x00050039u, 0x00000024u, 0x0000146au, 0x00000027u, 0x00001469u, 0x00050051u, 0x00000009u, 0x00006d9bu, 0x0000146au, 0x00000000u, 0x0003003eu, 0x00006d92u, 0x00006d9bu, 0x00050051u, 0x00000009u, 0x00006d9cu, 0x0000146au, 0x00000001u, 0x0003003eu, 0x00006d93u, 0x00006d9cu, 0x00050051u, 0x00000023u, 0x00006d9du, 0x0000146au, 0x00000002u, 0x0003003eu, 0x00006d94u, 0x00006d9du, 0x00050051u, 0x00000023u, 0x00006d9eu, 0x0000146au, 0x00000003u, 0x0003003eu, 0x00006d95u, 0x00006d9eu, 0x00050051u, 0x00000008u, 0x00006d9fu, 0x0000146au, 0x00000004u, 0x0003003eu, 0x00006d96u, 0x00006d9fu, 0x00050051u, 0x00000008u, 0x00006da0u, 0x0000146au, 0x00000005u, 0x0003003eu, 0x00006d97u, 0x00006da0u, 0x00050051u, 0x00000008u, 0x00006da1u, 0x0000146au, 0x00000006u, 0x0003003eu, 0x00006d98u, 0x00006da1u, 0x00050051u, 0x00000012u, 0x00006da2u, 0x0000146au, 0x00000007u, 0x0003003eu, 0x00006d99u, 0x00006da2u, 0x00050051u, 0x00000011u, 0x00006da3u, 0x0000146au, 0x00000008u, 0x0003003eu, 0x00006d9au, 0x00006da3u, 0x000500aau, 0x00000063u, 0x0000146du, 0x00006da3u, 0x00000196u, 0x000300f7u, 0x0000146fu, 0x00000000u, 0x000400fau, 0x0000146du, 0x0000146eu, 0x0000146fu, 0x000200f8u, 0x0000146eu, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x0000146fu, 0x0004003du, 0x00000006u, 0x00001472u, 0x00000190u, 0x00070041u, 0x000006a8u, 0x00001473u, 0x00001448u, 0x0000019cu, 0x00001472u, 0x000001dfu, 0x0004003du, 0x0000000fu, 0x00001474u, 0x00001473u, 0x00040071u, 0x00000006u, 0x00001475u, 0x00001474u, 0x0003003eu, 0x00001471u, 0x00001475u, 0x0004003du, 0x00000006u, 0x00001478u, 0x00000190u, 0x0003003eu, 0x00001477u, 0x00001478u, 0x00050039u, 0x0000000au, 0x00001479u, 0x0000000du, 0x00001477u, 0x00050051u, 0x00000009u, 0x00006db2u, 0x00001479u, 0x00000001u, 0x0003003eu, 0x00006daeu, 0x00006db2u, 0x00050051u, 0x00000009u, 0x00006db3u, 0x00001479u, 0x00000003u, 0x0003003eu, 0x00006dafu, 0x00006db3u, 0x00050051u, 0x00000009u, 0x00006db4u, 0x00001479u, 0x00000005u, 0x0003003eu, 0x00006db0u, 0x00006db4u, 0x00050051u, 0x00000009u, 0x00006db5u, 0x00001479u, 0x00000007u, 0x0003003eu, 0x00006db1u, 0x00006db5u, 0x0004003du, 0x00000006u, 0x00001483u, 0x00000190u, 0x00070041u, 0x00001484u, 0x00001485u, 0x00001482u, 0x0000019cu, 0x00001483u, 0x0000019cu, 0x0004003du, 0x00000010u, 0x00001486u, 0x00001485u, 0x00040071u, 0x0000147au, 0x00001487u, 0x00001486u, 0x0003003eu, 0x0000147cu, 0x00001487u, 0x00050041u, 0x00000007u, 0x00001489u, 0x0000147cu, 0x0000028eu, 0x0004003du, 0x00000006u, 0x0000148au, 0x00001489u, 0x0003003eu, 0x00001488u, 0x0000148au, 0x00050041u, 0x00000007u, 0x0000148cu, 0x0000147cu, 0x000002f8u, 0x0004003du, 0x00000006u, 0x0000148du, 0x0000148cu, 0x0003003eu, 0x0000148bu, 0x0000148du, 0x0003003eu, 0x0000148fu, 0x0000148au, 0x00050039u, 0x00000019u, 0x00001491u, 0x0000001cu, 0x0000148fu, 0x00050051u, 0x00000010u, 0x00006dbcu, 0x00001491u, 0x00000000u, 0x0003003eu, 0x00006db6u, 0x00006dbcu, 0x00050051u, 0x00000010u, 0x00006dbdu, 0x00001491u, 0x00000001u, 0x0003003eu, 0x00006db7u, 0x00006dbdu, 0x00050051u, 0x00000010u, 0x00006dbeu, 0x00001491u, 0x00000002u, 0x0003003eu, 0x00006db8u, 0x00006dbeu, 0x00050051u, 0x00000010u, 0x00006dbfu, 0x00001491u, 0x00000003u, 0x0003003eu, 0x00006db9u, 0x00006dbfu, 0x00050051u, 0x00000006u, 0x00006dc0u, 0x00001491u, 0x00000004u, 0x0003003eu, 0x00006dbau, 0x00006dc0u, 0x00050051u, 0x00000008u, 0x00006dc1u, 0x00001491u, 0x00000005u, 0x0003003eu, 0x00006dbbu, 0x00006dc1u, 0x0003003eu, 0x00001492u, 0x00006dc0u, 0x0003003eu, 0x00001495u, 0x00006dc1u, 0x0003003eu, 0x00001498u, 0x00006dbcu, 0x0003003eu, 0x0000149bu, 0x00006dbdu, 0x0003003eu, 0x0000149eu, 0x00006dbeu, 0x0003003eu, 0x000014a1u, 0x00006dbfu, 0x000300f7u, 0x000014a8u, 0x00000000u, 0x000400fau, 0x000014a6u, 0x000014a7u, 0x000014a8u, 0x000200f8u, 0x000014a7u, 0x0003003eu, 0x00001492u, 0x000014a9u, 0x0003003eu, 0x00001495u, 0x000014acu, 0x00050041u, 0x00000174u, 0x000014b2u, 0x00001498u, 0x0000028eu, 0x0003003eu, 0x000014b2u, 0x000014b1u, 0x00050041u, 0x00000174u, 0x000014b7u, 0x00001498u, 0x000002f4u, 0x0003003eu, 0x000014b7u, 0x000014b6u, 0x00050041u, 0x00000174u, 0x000014bcu, 0x00001498u, 0x000002f8u, 0x0003003eu, 0x000014bcu, 0x000014bbu, 0x00050041u, 0x00000174u, 0x000014c2u, 0x00001498u, 0x000002fbu, 0x0003003eu, 0x000014c2u, 0x000014c1u, 0x00050041u, 0x00000174u, 0x000014c8u, 0x0000149bu, 0x0000028eu, 0x0003003eu, 0x000014c8u, 0x000014c7u, 0x00050041u, 0x00000174u, 0x000014cdu, 0x0000149bu, 0x000002f4u, 0x0003003eu, 0x000014cdu, 0x000014ccu, 0x00050041u, 0x00000174u, 0x000014d2u, 0x0000149bu, 0x000002f8u, 0x0003003eu, 0x000014d2u, 0x000014d1u, 0x00050041u, 0x00000174u, 0x000014d7u, 0x0000149bu, 0x000002fbu, 0x0003003eu, 0x000014d7u, 0x000014d6u, 0x00050041u, 0x00000174u, 0x000014ddu, 0x0000149eu, 0x0000028eu, 0x0003003eu, 0x000014ddu, 0x000014dcu, 0x00050041u, 0x00000174u, 0x000014e2u, 0x0000149eu, 0x000002f4u, 0x0003003eu, 0x000014e2u, 0x000014e1u, 0x00050041u, 0x00000174u, 0x000014e7u, 0x0000149eu, 0x000002f8u, 0x0003003eu, 0x000014e7u, 0x000014e6u, 0x00050041u, 0x00000174u, 0x000014ecu, 0x0000149eu, 0x000002fbu, 0x0003003eu, 0x000014ecu, 0x000014ebu, 0x00050041u, 0x00000174u, 0x000014f2u, 0x000014a1u, 0x0000028eu, 0x0003003eu, 0x000014f2u, 0x000014f1u, 0x00050041u, 0x00000174u, 0x000014f7u, 0x000014a1u, 0x000002f4u, 0x0003003eu, 0x000014f7u, 0x000014f6u, 0x00050041u, 0x00000174u, 0x000014fcu, 0x000014a1u, 0x000002f8u, 0x0003003eu, 0x000014fcu, 0x000014fbu, 0x00050041u, 0x00000174u, 0x00001501u, 0x000014a1u, 0x000002fbu, 0x0003003eu, 0x00001501u, 0x00001500u, 0x000200f9u, 0x000014a8u, 0x000200f8u, 0x000014a8u, 0x000600a9u, 0x00000008u, 0x0000b64fu, 0x000014a6u, 0x000014acu, 0x00006dc1u, 0x000600a9u, 0x00000006u, 0x0000b650u, 0x000014a6u, 0x000014a9u, 0x00006dc0u, 0x000500c7u, 0x00000006u, 0x00001504u, 0x0000b650u, 0x00000291u, 0x000500abu, 0x00000063u, 0x00001505u, 0x00001504u, 0x0000028eu, 0x0003003eu, 0x00001502u, 0x00001505u, 0x000500c7u, 0x00000006u, 0x00001508u, 0x0000b650u, 0x00001451u, 0x000500abu, 0x00000063u, 0x00001509u, 0x00001508u, 0x0000028eu, 0x0003003eu, 0x00001506u, 0x00001509u, 0x000500c7u, 0x00000006u, 0x0000150du, 0x0000b650u, 0x0000150cu, 0x000500abu, 0x00000063u, 0x0000150eu, 0x0000150du, 0x0000028eu, 0x0003003eu, 0x0000150au, 0x0000150eu, 0x000500c7u, 0x00000006u, 0x00001511u, 0x0000b650u, 0x00000345u, 0x000500abu, 0x00000063u, 0x00001512u, 0x00001511u, 0x0000028eu, 0x0003003eu, 0x0000150fu, 0x00001512u, 0x000500c7u, 0x00000006u, 0x00001516u, 0x0000b650u, 0x00001515u, 0x000500abu, 0x00000063u, 0x00001517u, 0x00001516u, 0x0000028eu, 0x0003003eu, 0x00001513u, 0x00001517u, 0x000500c7u, 0x00000006u, 0x0000151au, 0x0000b650u, 0x00000275u, 0x000500abu, 0x00000063u, 0x0000151bu, 0x0000151au, 0x0000028eu, 0x0003003eu, 0x00001518u, 0x0000151bu, 0x000500c7u, 0x00000006u, 0x0000151fu, 0x0000b650u, 0x0000151eu, 0x000500abu, 0x00000063u, 0x00001520u, 0x0000151fu, 0x0000028eu, 0x0003003eu, 0x0000151cu, 0x00001520u, 0x000500c7u, 0x00000006u, 0x00001523u, 0x0000b650u, 0x00000775u, 0x000500abu, 0x00000063u, 0x00001524u, 0x00001523u, 0x0000028eu, 0x0003003eu, 0x00001521u, 0x00001524u, 0x000500c7u, 0x00000006u, 0x00001527u, 0x0000b650u, 0x0000076du, 0x000500abu, 0x00000063u, 0x00001528u, 0x00001527u, 0x0000028eu, 0x0003003eu, 0x00001525u, 0x00001528u, 0x000500c7u, 0x00000006u, 0x0000152bu, 0x0000b650u, 0x00000692u, 0x000500abu, 0x00000063u, 0x0000152cu, 0x0000152bu, 0x0000028eu, 0x0003003eu, 0x00001529u, 0x0000152cu, 0x000500c7u, 0x00000006u, 0x00001530u, 0x0000b650u, 0x0000152fu, 0x000500abu, 0x00000063u, 0x00001531u, 0x00001530u, 0x0000028eu, 0x0003003eu, 0x0000152du, 0x00001531u, 0x000500c7u, 0x00000006u, 0x00001534u, 0x0000b650u, 0x000002f4u, 0x000500abu, 0x00000063u, 0x00001535u, 0x00001534u, 0x0000028eu, 0x0003003eu, 0x00001532u, 0x00001535u, 0x000500c7u, 0x00000006u, 0x00001538u, 0x0000b650u, 0x0000069fu, 0x000500abu, 0x00000063u, 0x00001539u, 0x00001538u, 0x0000028eu, 0x0003003eu, 0x00001536u, 0x00001539u, 0x000500c7u, 0x00000006u, 0x0000153du, 0x0000b650u, 0x0000153cu, 0x000500abu, 0x00000063u, 0x0000153eu, 0x0000153du, 0x0000028eu, 0x0003003eu, 0x0000153au, 0x0000153eu, 0x000500c7u, 0x00000006u, 0x00001542u, 0x0000b650u, 0x00001541u, 0x000500abu, 0x00000063u, 0x00001543u, 0x00001542u, 0x0000028eu, 0x0003003eu, 0x0000153fu, 0x00001543u, 0x000500c7u, 0x00000006u, 0x00001547u, 0x0000b650u, 0x00001546u, 0x000500abu, 0x00000063u, 0x00001548u, 0x00001547u, 0x0000028eu, 0x0003003eu, 0x00001544u, 0x00001548u, 0x000500c7u, 0x00000006u, 0x0000154cu, 0x0000b650u, 0x0000154bu, 0x000500abu, 0x00000063u, 0x0000154du, 0x0000154cu, 0x0000028eu, 0x0003003eu, 0x00001549u, 0x0000154du, 0x000500c7u, 0x00000006u, 0x00001551u, 0x0000b650u, 0x00001550u, 0x000500abu, 0x00000063u, 0x00001552u, 0x00001551u, 0x0000028eu, 0x0003003eu, 0x0000154eu, 0x00001552u, 0x000500c7u, 0x00000006u, 0x00001556u, 0x0000b650u, 0x00001555u, 0x000500abu, 0x00000063u, 0x00001557u, 0x00001556u, 0x0000028eu, 0x0003003eu, 0x00001553u, 0x00001557u, 0x000500c7u, 0x00000006u, 0x0000155bu, 0x0000b650u, 0x0000155au, 0x000500abu, 0x00000063u, 0x0000155cu, 0x0000155bu, 0x0000028eu, 0x0003003eu, 0x00001558u, 0x0000155cu, 0x000500c7u, 0x00000006u, 0x00001560u, 0x0000b650u, 0x0000155fu, 0x000500abu, 0x00000063u, 0x00001561u, 0x00001560u, 0x0000028eu, 0x0003003eu, 0x0000155du, 0x00001561u, 0x000500c7u, 0x00000006u, 0x00001565u, 0x0000b650u, 0x00001564u, 0x000500abu, 0x00000063u, 0x00001566u, 0x00001565u, 0x0000028eu, 0x0003003eu, 0x00001562u, 0x00001566u, 0x000500c7u, 0x00000006u, 0x0000156au, 0x0000b650u, 0x00001569u, 0x000500abu, 0x00000063u, 0x0000156bu, 0x0000156au, 0x0000028eu, 0x0003003eu, 0x00001567u, 0x0000156bu, 0x000500c7u, 0x00000006u, 0x0000156fu, 0x0000b650u, 0x0000156eu, 0x000500abu, 0x00000063u, 0x00001570u, 0x0000156fu, 0x0000028eu, 0x0003003eu, 0x0000156cu, 0x00001570u, 0x000500c7u, 0x00000006u, 0x00001573u, 0x0000b650u, 0x00001572u, 0x000500abu, 0x00000063u, 0x00001574u, 0x00001573u, 0x0000028eu, 0x000300f7u, 0x00001576u, 0x00000000u, 0x000400fau, 0x00001574u, 0x00001575u, 0x00001576u, 0x000200f8u, 0x00001575u, 0x0004003du, 0x00000008u, 0x00001577u, 0x0000018eu, 0x0004007cu, 0x00000006u, 0x00001578u, 0x00001577u, 0x0004003du, 0x00000008u, 0x00001579u, 0x0000018fu, 0x0004007cu, 0x00000006u, 0x0000157au, 0x00001579u, 0x0004003du, 0x00000006u, 0x0000157bu, 0x00000190u, 0x00060041u, 0x0000157cu, 0x0000157du, 0x000004e8u, 0x0000019cu, 0x000001acu, 0x0004003du, 0x00000006u, 0x0000157eu, 0x0000157du, 0x00050080u, 0x00000006u, 0x0000157fu, 0x0000157bu, 0x0000157eu, 0x0003003eu, 0x00001580u, 0x00001578u, 0x0003003eu, 0x00001581u, 0x0000157au, 0x0003003eu, 0x00001582u, 0x0000157fu, 0x00070039u, 0x00000002u, 0x00001583u, 0x00000032u, 0x00001580u, 0x00001581u, 0x00001582u, 0x000200f9u, 0x00001576u, 0x000200f8u, 0x00001576u, 0x000500c7u, 0x00000006u, 0x00001586u, 0x0000144cu, 0x000002f4u, 0x000500abu, 0x00000063u, 0x00001587u, 0x00001586u, 0x0000028eu, 0x0003003eu, 0x00001584u, 0x00001587u, 0x000300f7u, 0x0000158au, 0x00000000u, 0x000400fau, 0x0000153eu, 0x00001589u, 0x000015ebu, 0x000200f8u, 0x00001589u, 0x0004003du, 0x00000008u, 0x0000158cu, 0x0000018eu, 0x000500afu, 0x00000063u, 0x0000158fu, 0x0000158cu, 0x00006da0u, 0x000300f7u, 0x00001591u, 0x00000000u, 0x000400fau, 0x0000158fu, 0x00001590u, 0x00001591u, 0x000200f8u, 0x00001590u, 0x0004003du, 0x00000008u, 0x00001592u, 0x0000018eu, 0x000500b3u, 0x00000063u, 0x00001595u, 0x00001592u, 0x00006da1u, 0x000200f9u, 0x00001591u, 0x000200f8u, 0x00001591u, 0x000700f5u, 0x00000063u, 0x00001596u, 0x0000158fu, 0x00001589u, 0x00001595u, 0x00001590u, 0x0003003eu, 0x0000158bu, 0x00001596u, 0x000400a8u, 0x00000063u, 0x00001598u, 0x00001596u, 0x000300f7u, 0x0000159au, 0x00000000u, 0x000400fau, 0x00001598u, 0x00001599u, 0x0000159au, 0x000200f8u, 0x00001599u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x0000159au, 0x0003003eu, 0x0000159eu, 0x0000146au, 0x0003003eu, 0x000015a0u, 0x00006db4u, 0x0004003du, 0x00000008u, 0x000015a4u, 0x0000018eu, 0x0003003eu, 0x000015a3u, 0x000015a4u, 0x0003003eu, 0x000015a5u, 0x0000151bu, 0x0003003eu, 0x000015a7u, 0x00001587u, 0x000b0039u, 0x00000002u, 0x000015abu, 0x0000007cu, 0x0000159eu, 0x000015a0u, 0x000015a3u, 0x000015a5u, 0x000015a7u, 0x000015a9u, 0x000015aau, 0x0004003du, 0x00000058u, 0x000015acu, 0x000015a9u, 0x0003003eu, 0x0000159cu, 0x000015acu, 0x0004003du, 0x00000008u, 0x000015adu, 0x000015aau, 0x0003003eu, 0x0000159du, 0x000015adu, 0x000500c7u, 0x00000006u, 0x000015b0u, 0x00001475u, 0x00001108u, 0x0003003eu, 0x000015aeu, 0x000015b0u, 0x0004003du, 0x00000006u, 0x000015b2u, 0x00000190u, 0x00080041u, 0x000006a8u, 0x000015b4u, 0x00001482u, 0x0000019cu, 0x000015b2u, 0x000001a9u, 0x000015b0u, 0x0004003du, 0x0000000fu, 0x000015b5u, 0x000015b4u, 0x00040071u, 0x00000006u, 0x000015b6u, 0x000015b5u, 0x0003003eu, 0x000015b1u, 0x000015b6u, 0x0003003eu, 0x000015b8u, 0x000015b6u, 0x00050039u, 0x00000029u, 0x000015bau, 0x0000002cu, 0x000015b8u, 0x00050051u, 0x00000006u, 0x00006dd0u, 0x000015bau, 0x00000000u, 0x0003003eu, 0x00006dc2u, 0x00006dd0u, 0x00050051u, 0x00000006u, 0x00006dd1u, 0x000015bau, 0x00000001u, 0x0003003eu, 0x00006dc3u, 0x00006dd1u, 0x00050051u, 0x00000006u, 0x00006dd2u, 0x000015bau, 0x00000002u, 0x0003003eu, 0x00006dc4u, 0x00006dd2u, 0x00050051u, 0x00000006u, 0x00006dd3u, 0x000015bau, 0x00000003u, 0x0003003eu, 0x00006dc5u, 0x00006dd3u, 0x00050051u, 0x00000006u, 0x00006dd4u, 0x000015bau, 0x00000004u, 0x0003003eu, 0x00006dc6u, 0x00006dd4u, 0x00050051u, 0x00000006u, 0x00006dd5u, 0x000015bau, 0x00000005u, 0x0003003eu, 0x00006dc7u, 0x00006dd5u, 0x00050051u, 0x0000000fu, 0x00006dd6u, 0x000015bau, 0x00000006u, 0x0003003eu, 0x00006dc8u, 0x00006dd6u, 0x00050051u, 0x0000000fu, 0x00006dd7u, 0x000015bau, 0x00000007u, 0x0003003eu, 0x00006dc9u, 0x00006dd7u, 0x00050051u, 0x0000000fu, 0x00006dd8u, 0x000015bau, 0x00000008u, 0x0003003eu, 0x00006dcau, 0x00006dd8u, 0x00050051u, 0x0000000fu, 0x00006dd9u, 0x000015bau, 0x00000009u, 0x0003003eu, 0x00006dcbu, 0x00006dd9u, 0x00050051u, 0x0000000fu, 0x00006ddau, 0x000015bau, 0x0000000au, 0x0003003eu, 0x00006dccu, 0x00006ddau, 0x00050051u, 0x0000000fu, 0x00006ddbu, 0x000015bau, 0x0000000bu, 0x0003003eu, 0x00006dcdu, 0x00006ddbu, 0x00050051u, 0x0000000fu, 0x00006ddcu, 0x000015bau, 0x0000000cu, 0x0003003eu, 0x00006dceu, 0x00006ddcu, 0x00050051u, 0x0000000fu, 0x00006dddu, 0x000015bau, 0x0000000du, 0x0003003eu, 0x00006dcfu, 0x00006dddu, 0x000300f7u, 0x000015beu, 0x00000000u, 0x000400fau, 0x000015bcu, 0x000015bdu, 0x000015beu, 0x000200f8u, 0x000015bdu, 0x0003003eu, 0x00006dc8u, 0x000015c2u, 0x0003003eu, 0x00006dc9u, 0x000015c7u, 0x000200f9u, 0x000015beu, 0x000200f8u, 0x000015beu, 0x000600a9u, 0x0000000fu, 0x0000b651u, 0x000015bcu, 0x000015c2u, 0x00006dd6u, 0x000600a9u, 0x0000000fu, 0x0000b652u, 0x000015bcu, 0x000015c7u, 0x00006dd7u, 0x00110050u, 0x00000029u, 0x00006decu, 0x00006dd0u, 0x00006dd1u, 0x00006dd2u, 0x00006dd3u, 0x00006dd4u, 0x00006dd5u, 0x0000b651u, 0x0000b652u, 0x00006dd8u, 0x00006dd9u, 0x00006ddau, 0x00006ddbu, 0x00006ddcu, 0x00006dddu, 0x0003003eu, 0x000015cau, 0x00006decu, 0x0003003eu, 0x000015ccu, 0x0000148du, 0x0003003eu, 0x000015ceu, 0x000015acu, 0x0003003eu, 0x000015d0u, 0x000015adu, 0x0003003eu, 0x000015d2u, 0x00001505u, 0x0003003eu, 0x000015d4u, 0x00001509u, 0x000a0039u, 0x00000008u, 0x000015d6u, 0x0000011bu, 0x000015cau, 0x000015ccu, 0x000015ceu, 0x000015d0u, 0x000015d2u, 0x000015d4u, 0x0003003eu, 0x000015c9u, 0x000015d6u, 0x00050041u, 0x00000040u, 0x000015d8u, 0x00000191u, 0x000001a6u, 0x0003003eu, 0x000015d8u, 0x000015d6u, 0x00050041u, 0x00000174u, 0x000015d9u, 0x00000191u, 0x000001a9u, 0x0003003eu, 0x000015d9u, 0x000002ebu, 0x000300f7u, 0x000015dcu, 0x00000000u, 0x000400fau, 0x00001543u, 0x000015dbu, 0x000015dcu, 0x000200f8u, 0x000015dbu, 0x00060041u, 0x000004e9u, 0x000015ddu, 0x000004e8u, 0x0000019cu, 0x000001a9u, 0x0004003du, 0x00000008u, 0x000015deu, 0x000015ddu, 0x000500aau, 0x00000063u, 0x000015dfu, 0x000015deu, 0x000001a9u, 0x000200f9u, 0x000015dcu, 0x000200f8u, 0x000015dcu, 0x000700f5u, 0x00000063u, 0x000015e0u, 0x00001543u, 0x000015beu, 0x000015dfu, 0x000015dbu, 0x000300f7u, 0x000015e2u, 0x00000000u, 0x000400fau, 0x000015e0u, 0x000015e1u, 0x000015e2u, 0x000200f8u, 0x000015e1u, 0x000500c7u, 0x00000008u, 0x000015e4u, 0x000015d6u, 0x000001a6u, 0x000500aau, 0x00000063u, 0x000015e5u, 0x000015e4u, 0x0000019cu, 0x000200f9u, 0x000015e2u, 0x000200f8u, 0x000015e2u, 0x000700f5u, 0x00000063u, 0x000015e6u, 0x000015e0u, 0x000015dcu, 0x000015e5u, 0x000015e1u, 0x000300f7u, 0x000015e8u, 0x00000000u, 0x000400fau, 0x000015e6u, 0x000015e7u, 0x000015e8u, 0x000200f8u, 0x000015e7u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x000015e8u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x0000046cu, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x000015ebu, 0x000300f7u, 0x000015eeu, 0x00000000u, 0x000400fau, 0x00001539u, 0x000015edu, 0x000015eeu, 0x000200f8u, 0x000015edu, 0x00050041u, 0x00000174u, 0x000015efu, 0x00000191u, 0x000001a9u, 0x0003003eu, 0x000015efu, 0x000002ecu, 0x0004003du, 0x00000008u, 0x000015f0u, 0x0000018eu, 0x000500afu, 0x00000063u, 0x000015f3u, 0x000015f0u, 0x00006da0u, 0x000300f7u, 0x000015f5u, 0x00000000u, 0x000400fau, 0x000015f3u, 0x000015f4u, 0x000015f5u, 0x000200f8u, 0x000015f4u, 0x0004003du, 0x00000008u, 0x000015f6u, 0x0000018eu, 0x000500b3u, 0x00000063u, 0x000015f9u, 0x000015f6u, 0x00006da1u, 0x000200f9u, 0x000015f5u, 0x000200f8u, 0x000015f5u, 0x000700f5u, 0x00000063u, 0x000015fau, 0x000015f3u, 0x000015edu, 0x000015f9u, 0x000015f4u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x000015fau, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x000015eeu, 0x000200f9u, 0x0000158au, 0x000200f8u, 0x0000158au, 0x0003003eu, 0x000015fdu, 0x00006d9du, 0x0003003eu, 0x00001600u, 0x00006d9eu, 0x0004003du, 0x00000008u, 0x00001604u, 0x0000018eu, 0x0003003eu, 0x00001603u, 0x00001604u, 0x00070039u, 0x0000000fu, 0x00001605u, 0x00000045u, 0x000015fdu, 0x00001600u, 0x00001603u, 0x00040071u, 0x00000006u, 0x00001606u, 0x00001605u, 0x0004007cu, 0x00000008u, 0x00001607u, 0x00001606u, 0x0003003eu, 0x000015fcu, 0x00001607u, 0x000500aau, 0x00000063u, 0x00001609u, 0x00001607u, 0x0000019cu, 0x000300f7u, 0x0000160bu, 0x00000000u, 0x000400fau, 0x00001609u, 0x0000160au, 0x0000160bu, 0x000200f8u, 0x0000160au, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x0000160bu, 0x000400cdu, 0x00000008u, 0x0000160fu, 0x00001607u, 0x0003003eu, 0x0000160du, 0x0000160fu, 0x000400a8u, 0x00000063u, 0x00001611u, 0x0000152cu, 0x000300f7u, 0x00001613u, 0x00000000u, 0x000400fau, 0x00001611u, 0x00001612u, 0x00001613u, 0x000200f8u, 0x00001612u, 0x000500c7u, 0x00000008u, 0x00001615u, 0x00001607u, 0x000001a6u, 0x000500aau, 0x00000063u, 0x00001616u, 0x00001615u, 0x0000019cu, 0x000200f9u, 0x00001613u, 0x000200f8u, 0x00001613u, 0x000700f5u, 0x00000063u, 0x00001617u, 0x00001611u, 0x0000160bu, 0x00001616u, 0x00001612u, 0x000300f7u, 0x00001619u, 0x00000000u, 0x000400fau, 0x00001617u, 0x00001618u, 0x00001619u, 0x000200f8u, 0x00001618u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x00001619u, 0x0004003du, 0x00000006u, 0x0000161du, 0x00000190u, 0x0003003eu, 0x0000161cu, 0x0000161du, 0x00050039u, 0x00000014u, 0x0000161eu, 0x00000017u, 0x0000161cu, 0x00050051u, 0x00000010u, 0x00006df8u, 0x0000161eu, 0x00000000u, 0x0003003eu, 0x00006dedu, 0x00006df8u, 0x00050051u, 0x00000010u, 0x00006df9u, 0x0000161eu, 0x00000001u, 0x0003003eu, 0x00006deeu, 0x00006df9u, 0x00050051u, 0x00000010u, 0x00006dfau, 0x0000161eu, 0x00000002u, 0x0003003eu, 0x00006defu, 0x00006dfau, 0x00050051u, 0x00000010u, 0x00006dfbu, 0x0000161eu, 0x00000003u, 0x0003003eu, 0x00006df0u, 0x00006dfbu, 0x00050051u, 0x00000010u, 0x00006dfcu, 0x0000161eu, 0x00000004u, 0x0003003eu, 0x00006df1u, 0x00006dfcu, 0x00050051u, 0x00000010u, 0x00006dfdu, 0x0000161eu, 0x00000005u, 0x0003003eu, 0x00006df2u, 0x00006dfdu, 0x00050051u, 0x00000010u, 0x00006dfeu, 0x0000161eu, 0x00000006u, 0x0003003eu, 0x00006df3u, 0x00006dfeu, 0x00050051u, 0x00000010u, 0x00006dffu, 0x0000161eu, 0x00000007u, 0x0003003eu, 0x00006df4u, 0x00006dffu, 0x00050051u, 0x00000010u, 0x00006e00u, 0x0000161eu, 0x00000009u, 0x0003003eu, 0x00006df5u, 0x00006e00u, 0x00050051u, 0x0000000fu, 0x00006e01u, 0x0000161eu, 0x0000000du, 0x0003003eu, 0x00006df6u, 0x00006e01u, 0x00050051u, 0x00000013u, 0x00006e02u, 0x0000161eu, 0x0000000eu, 0x0003003eu, 0x00006df7u, 0x00006e02u, 0x0004003du, 0x00000008u, 0x00001620u, 0x0000018eu, 0x00050082u, 0x00000008u, 0x00001623u, 0x00001620u, 0x00006d9fu, 0x0003003eu, 0x0000161fu, 0x00001623u, 0x000600a9u, 0x00000008u, 0x00001626u, 0x00001587u, 0x000001a6u, 0x000004f6u, 0x0003003eu, 0x00001624u, 0x00001626u, 0x0003003eu, 0x00001628u, 0x00006d9bu, 0x0003003eu, 0x0000162bu, 0x00006db2u, 0x0003003eu, 0x0000162eu, 0x00006db3u, 0x0003003eu, 0x00001631u, 0x00001623u, 0x0003003eu, 0x00001633u, 0x00001607u, 0x00090039u, 0x00000010u, 0x00001635u, 0x00000070u, 0x00001628u, 0x0000162bu, 0x0000162eu, 0x00001631u, 0x00001633u, 0x0003003eu, 0x00001627u, 0x00001635u, 0x0003003eu, 0x00001636u, 0x00001099u, 0x0003003eu, 0x00001637u, 0x00001626u, 0x000500a7u, 0x00000063u, 0x0000163bu, 0x00001639u, 0x00001561u, 0x000300f7u, 0x0000163du, 0x00000000u, 0x000400fau, 0x0000163bu, 0x0000163cu, 0x0000163du, 0x000200f8u, 0x0000163cu, 0x000500c7u, 0x00000006u, 0x0000163fu, 0x0000144cu, 0x00000345u, 0x000500abu, 0x00000063u, 0x00001640u, 0x0000163fu, 0x0000028eu, 0x000300f7u, 0x00001642u, 0x00000000u, 0x000400fau, 0x00001640u, 0x00001641u, 0x00001642u, 0x000200f8u, 0x00001641u, 0x00050084u, 0x00000008u, 0x00001644u, 0x00001626u, 0x00000556u, 0x0003003eu, 0x00001637u, 0x00001644u, 0x000200f9u, 0x00001642u, 0x000200f8u, 0x00001642u, 0x000700f5u, 0x00000008u, 0x0000b366u, 0x00001626u, 0x0000163cu, 0x00001644u, 0x00001641u, 0x000200f9u, 0x0000163du, 0x000200f8u, 0x0000163du, 0x000700f5u, 0x00000008u, 0x0000b365u, 0x00001626u, 0x00001619u, 0x0000b366u, 0x00001642u, 0x0003003eu, 0x00001649u, 0x00006d9cu, 0x0003003eu, 0x0000164cu, 0x00006db4u, 0x0003003eu, 0x0000164fu, 0x00006db5u, 0x0003003eu, 0x00001652u, 0x00001623u, 0x0003003eu, 0x00001654u, 0x00001607u, 0x0003003eu, 0x00001656u, 0x0000151bu, 0x0003003eu, 0x00001658u, 0x00001561u, 0x0003003eu, 0x0000165au, 0x0000b365u, 0x0003003eu, 0x00001660u, 0x00001099u, 0x00110039u, 0x00000002u, 0x00001662u, 0x00000093u, 0x00001649u, 0x0000164cu, 0x0000164fu, 0x00001652u, 0x00001654u, 0x00001656u, 0x00001658u, 0x0000165au, 0x0000165cu, 0x0000165du, 0x0000165eu, 0x0000165fu, 0x00001660u, 0x0004003du, 0x00000058u, 0x00001663u, 0x0000165cu, 0x0003003eu, 0x00001645u, 0x00001663u, 0x0004003du, 0x00000058u, 0x00001664u, 0x0000165du, 0x0003003eu, 0x00001646u, 0x00001664u, 0x0004003du, 0x00000058u, 0x00001665u, 0x0000165eu, 0x0003003eu, 0x00001647u, 0x00001665u, 0x0004003du, 0x00000008u, 0x00001666u, 0x0000165fu, 0x0003003eu, 0x00001648u, 0x00001666u, 0x0004003du, 0x00000063u, 0x00001667u, 0x00001660u, 0x0003003eu, 0x00001636u, 0x00001667u, 0x000500c7u, 0x00000006u, 0x0000166au, 0x00001475u, 0x00001108u, 0x0003003eu, 0x00001668u, 0x0000166au, 0x00050080u, 0x00000006u, 0x0000166du, 0x0000166au, 0x000002f4u, 0x000500c7u, 0x00000006u, 0x0000166eu, 0x0000166du, 0x00001108u, 0x0003003eu, 0x0000166bu, 0x0000166eu, 0x000500c2u, 0x00000006u, 0x00001671u, 0x00001475u, 0x000002fbu, 0x0003003eu, 0x0000166fu, 0x00001671u, 0x00040071u, 0x00000006u, 0x00001675u, 0x00006e01u, 0x0004007cu, 0x00000008u, 0x00001676u, 0x00001675u, 0x0003003eu, 0x00001672u, 0x00001676u, 0x000300f7u, 0x00001679u, 0x00000000u, 0x000400fau, 0x00001561u, 0x00001678u, 0x00001679u, 0x000200f8u, 0x00001678u, 0x0003003eu, 0x0000167bu, 0x0000166au, 0x0003003eu, 0x0000167du, 0x0000166eu, 0x0003003eu, 0x00001680u, 0x00001671u, 0x0003003eu, 0x00001682u, 0x00001676u, 0x0003003eu, 0x00001684u, 0x00001663u, 0x0003003eu, 0x00001686u, 0x00001664u, 0x0003003eu, 0x00001688u, 0x00001665u, 0x0003003eu, 0x0000168au, 0x00001667u, 0x0003003eu, 0x0000168cu, 0x00001520u, 0x0003003eu, 0x0000168eu, 0x00001524u, 0x0003003eu, 0x00001690u, 0x00001528u, 0x00100039u, 0x00000002u, 0x00001692u, 0x00000141u, 0x0000167bu, 0x0000167du, 0x0000167fu, 0x00001680u, 0x00001682u, 0x00001684u, 0x00001686u, 0x00001688u, 0x0000168au, 0x0000168cu, 0x0000168eu, 0x00001690u, 0x0004003du, 0x00000006u, 0x00001693u, 0x0000167bu, 0x0003003eu, 0x00001668u, 0x00001693u, 0x0004003du, 0x00000006u, 0x00001694u, 0x0000167du, 0x0003003eu, 0x0000166bu, 0x00001694u, 0x0004003du, 0x00000012u, 0x00001695u, 0x0000167fu, 0x0003003eu, 0x0000167au, 0x00001695u, 0x000200f9u, 0x00001679u, 0x000200f8u, 0x00001679u, 0x000700f5u, 0x00000012u, 0x0000b523u, 0x0000b52au, 0x0000163du, 0x00001695u, 0x00001678u, 0x000700f5u, 0x00000006u, 0x0000b44du, 0x0000166eu, 0x0000163du, 0x00001694u, 0x00001678u, 0x000700f5u, 0x00000006u, 0x0000b381u, 0x0000166au, 0x0000163du, 0x00001693u, 0x00001678u, 0x000300f7u, 0x00001698u, 0x00000000u, 0x000400fau, 0x00001552u, 0x00001697u, 0x00001698u, 0x000200f8u, 0x00001697u, 0x0004003du, 0x00000006u, 0x0000169au, 0x00000190u, 0x00080041u, 0x000006a8u, 0x0000169cu, 0x00001482u, 0x0000019cu, 0x0000169au, 0x000001a9u, 0x0000b381u, 0x0004003du, 0x0000000fu, 0x0000169du, 0x0000169cu, 0x00040071u, 0x00000006u, 0x0000169eu, 0x0000169du, 0x0003003eu, 0x00001699u, 0x0000169eu, 0x0003003eu, 0x000016a0u, 0x0000169eu, 0x00050039u, 0x00000029u, 0x000016a2u, 0x0000002cu, 0x000016a0u, 0x00050051u, 0x00000006u, 0x00006e12u, 0x000016a2u, 0x00000000u, 0x0003003eu, 0x00006e04u, 0x00006e12u, 0x00050051u, 0x00000006u, 0x00006e13u, 0x000016a2u, 0x00000001u, 0x0003003eu, 0x00006e05u, 0x00006e13u, 0x00050051u, 0x00000006u, 0x00006e14u, 0x000016a2u, 0x00000002u, 0x0003003eu, 0x00006e06u, 0x00006e14u, 0x00050051u, 0x00000006u, 0x00006e15u, 0x000016a2u, 0x00000003u, 0x0003003eu, 0x00006e07u, 0x00006e15u, 0x00050051u, 0x00000006u, 0x00006e16u, 0x000016a2u, 0x00000004u, 0x0003003eu, 0x00006e08u, 0x00006e16u, 0x00050051u, 0x00000006u, 0x00006e17u, 0x000016a2u, 0x00000005u, 0x0003003eu, 0x00006e09u, 0x00006e17u, 0x00050051u, 0x0000000fu, 0x00006e18u, 0x000016a2u, 0x00000006u, 0x0003003eu, 0x00006e0au, 0x00006e18u, 0x00050051u, 0x0000000fu, 0x00006e19u, 0x000016a2u, 0x00000007u, 0x0003003eu, 0x00006e0bu, 0x00006e19u, 0x00050051u, 0x0000000fu, 0x00006e1au, 0x000016a2u, 0x00000008u, 0x0003003eu, 0x00006e0cu, 0x00006e1au, 0x00050051u, 0x0000000fu, 0x00006e1bu, 0x000016a2u, 0x00000009u, 0x0003003eu, 0x00006e0du, 0x00006e1bu, 0x00050051u, 0x0000000fu, 0x00006e1cu, 0x000016a2u, 0x0000000au, 0x0003003eu, 0x00006e0eu, 0x00006e1cu, 0x00050051u, 0x0000000fu, 0x00006e1du, 0x000016a2u, 0x0000000bu, 0x0003003eu, 0x00006e0fu, 0x00006e1du, 0x00050051u, 0x0000000fu, 0x00006e1eu, 0x000016a2u, 0x0000000cu, 0x0003003eu, 0x00006e10u, 0x00006e1eu, 0x00050051u, 0x0000000fu, 0x00006e1fu, 0x000016a2u, 0x0000000du, 0x0003003eu, 0x00006e11u, 0x00006e1fu, 0x000300f7u, 0x000016a6u, 0x00000000u, 0x000400fau, 0x000016a4u, 0x000016a5u, 0x000016a6u, 0x000200f8u, 0x000016a5u, 0x0003003eu, 0x00006e0au, 0x000016a8u, 0x0003003eu, 0x00006e0bu, 0x000016abu, 0x000200f9u, 0x000016a6u, 0x000200f8u, 0x000016a6u, 0x000600a9u, 0x0000000fu, 0x0000b653u, 0x000016a4u, 0x000016a8u, 0x00006e18u, 0x000600a9u, 0x0000000fu, 0x0000b654u, 0x000016a4u, 0x000016abu, 0x00006e19u, 0x00110050u, 0x00000029u, 0x00006e2eu, 0x00006e12u, 0x00006e13u, 0x00006e14u, 0x00006e15u, 0x00006e16u, 0x00006e17u, 0x0000b653u, 0x0000b654u, 0x00006e1au, 0x00006e1bu, 0x00006e1cu, 0x00006e1du, 0x00006e1eu, 0x00006e1fu, 0x0003003eu, 0x000016b0u, 0x00006e2eu, 0x0003003eu, 0x000016b2u, 0x0000148du, 0x0003003eu, 0x000016b4u, 0x00001663u, 0x0003003eu, 0x000016b6u, 0x00001505u, 0x0003003eu, 0x000016b8u, 0x00001509u, 0x0003003eu, 0x000016bau, 0x0000150eu, 0x0003003eu, 0x000016bcu, 0x0000154du, 0x0003003eu, 0x000016beu, 0x00001099u, 0x0003003eu, 0x000016bfu, 0x000016afu, 0x000d0039u, 0x00000013u, 0x000016c0u, 0x00000131u, 0x000016b0u, 0x000016b2u, 0x000016b4u, 0x000016b6u, 0x000016b8u, 0x000016bau, 0x000016bcu, 0x000016beu, 0x000016bfu, 0x0003003eu, 0x000016adu, 0x000016c0u, 0x000400a8u, 0x00000063u, 0x000016c2u, 0x0000150eu, 0x000400a8u, 0x00000063u, 0x000016c4u, 0x0000156bu, 0x000500a7u, 0x00000063u, 0x000016c5u, 0x000016c2u, 0x000016c4u, 0x000300f7u, 0x000016c7u, 0x00000000u, 0x000400fau, 0x000016c5u, 0x000016c6u, 0x000016c7u, 0x000200f8u, 0x000016c6u, 0x0003003eu, 0x000016c8u, 0x000016c0u, 0x0003003eu, 0x000016cau, 0x00006e02u, 0x00060039u, 0x00000013u, 0x000016cdu, 0x00000146u, 0x000016c8u, 0x000016cau, 0x0003003eu, 0x000016adu, 0x000016cdu, 0x000200f9u, 0x000016c7u, 0x000200f8u, 0x000016c7u, 0x000700f5u, 0x00000013u, 0x0000b495u, 0x000016c0u, 0x000016a6u, 0x000016cdu, 0x000016c6u, 0x000200f9u, 0x00001698u, 0x000200f8u, 0x00001698u, 0x000700f5u, 0x00000013u, 0x0000b48au, 0x0000b492u, 0x00001679u, 0x0000b495u, 0x000016c7u, 0x000300f7u, 0x000016d0u, 0x00000000u, 0x000400fau, 0x0000155cu, 0x000016cfu, 0x000016d0u, 0x000200f8u, 0x000016cfu, 0x0004003du, 0x00000008u, 0x000016d5u, 0x0000018fu, 0x00050082u, 0x00000008u, 0x000016d9u, 0x000016d5u, 0x00001433u, 0x00050080u, 0x00000008u, 0x000016dau, 0x000016d9u, 0x000001a6u, 0x00050080u, 0x00000008u, 0x000016dbu, 0x00001461u, 0x000016dau, 0x00070041u, 0x00000778u, 0x000016dcu, 0x00000229u, 0x0000019cu, 0x000016dbu, 0x000001d9u, 0x0004003du, 0x00000011u, 0x000016ddu, 0x000016dcu, 0x00040071u, 0x00000006u, 0x000016deu, 0x000016ddu, 0x000500abu, 0x00000063u, 0x000016dfu, 0x000016deu, 0x0000028eu, 0x0003003eu, 0x000016d1u, 0x000016dfu, 0x00040072u, 0x00000008u, 0x000016e3u, 0x00006da2u, 0x000500afu, 0x00000063u, 0x000016e4u, 0x000016e3u, 0x000001d9u, 0x0003003eu, 0x000016e0u, 0x000016e4u, 0x0004003du, 0x00000008u, 0x000016e6u, 0x0000018eu, 0x000300f7u, 0x000016eau, 0x00000000u, 0x000400fau, 0x00001587u, 0x000016e9u, 0x000016edu, 0x000200f8u, 0x000016e9u, 0x0003003eu, 0x000016e8u, 0x00006da1u, 0x000200f9u, 0x000016eau, 0x000200f8u, 0x000016edu, 0x0003003eu, 0x000016e8u, 0x00006da0u, 0x000200f9u, 0x000016eau, 0x000200f8u, 0x000016eau, 0x000600a9u, 0x00000008u, 0x0000b655u, 0x00001587u, 0x00006da1u, 0x00006da0u, 0x000500aau, 0x00000063u, 0x000016f1u, 0x000016e6u, 0x0000b655u, 0x0003003eu, 0x000016e5u, 0x000016f1u, 0x000500a7u, 0x00000063u, 0x000016f4u, 0x000016f1u, 0x000016e4u, 0x000500a7u, 0x00000063u, 0x000016f6u, 0x000016f4u, 0x000016dfu, 0x000300f7u, 0x000016f8u, 0x00000000u, 0x000400fau, 0x000016f6u, 0x000016f7u, 0x00001718u, 0x000200f8u, 0x000016f7u, 0x0004003du, 0x00000008u, 0x000016fdu, 0x0000018fu, 0x00050082u, 0x00000008u, 0x00001701u, 0x000016fdu, 0x00001433u, 0x00050080u, 0x00000008u, 0x00001702u, 0x00001701u, 0x000001a6u, 0x00050080u, 0x00000008u, 0x00001703u, 0x00001461u, 0x00001702u, 0x00070041u, 0x00001704u, 0x00001705u, 0x00000229u, 0x0000019cu, 0x00001703u, 0x000001a6u, 0x0004003du, 0x00000009u, 0x00001706u, 0x00001705u, 0x0008004fu, 0x0000005du, 0x00001707u, 0x00001706u, 0x00001706u, 0x00000000u, 0x00000001u, 0x00000003u, 0x000500c3u, 0x0000005du, 0x00001709u, 0x00001707u, 0x0000b615u, 0x0003003eu, 0x000016f9u, 0x00001709u, 0x000300f7u, 0x0000170cu, 0x00000000u, 0x000400fau, 0x0000151bu, 0x0000170bu, 0x00001714u, 0x000200f8u, 0x0000170bu, 0x0003003eu, 0x0000170eu, 0x00001709u, 0x00060039u, 0x00000058u, 0x00001712u, 0x00000068u, 0x0000170eu, 0x00001710u, 0x0004003du, 0x00000063u, 0x00001713u, 0x00001710u, 0x0003003eu, 0x0000170du, 0x00001713u, 0x0003003eu, 0x00001645u, 0x00001712u, 0x000200f9u, 0x0000170cu, 0x000200f8u, 0x00001714u, 0x0003003eu, 0x00001715u, 0x00001709u, 0x00050039u, 0x00000058u, 0x00001717u, 0x00000061u, 0x00001715u, 0x0003003eu, 0x00001645u, 0x00001717u, 0x000200f9u, 0x0000170cu, 0x000200f8u, 0x0000170cu, 0x000700f5u, 0x00000058u, 0x0000b46au, 0x00001712u, 0x0000170bu, 0x00001717u, 0x00001714u, 0x000200f9u, 0x000016f8u, 0x000200f8u, 0x00001718u, 0x00050084u, 0x00000008u, 0x0000171bu, 0x00001626u, 0x00000556u, 0x00050080u, 0x00000008u, 0x0000171cu, 0x00001623u, 0x0000171bu, 0x0003003eu, 0x0000171du, 0x00006d9cu, 0x0003003eu, 0x00001720u, 0x00006db4u, 0x0003003eu, 0x00001723u, 0x0000171cu, 0x0003003eu, 0x00001724u, 0x0000151bu, 0x00080039u, 0x00000058u, 0x00001726u, 0x00000083u, 0x0000171du, 0x00001720u, 0x00001723u, 0x00001724u, 0x0003003eu, 0x00001645u, 0x00001726u, 0x000200f9u, 0x000016f8u, 0x000200f8u, 0x000016f8u, 0x000700f5u, 0x00000058u, 0x0000b469u, 0x0000b46au, 0x0000170cu, 0x00001726u, 0x00001718u, 0x0003003eu, 0x0000166bu, 0x0000b381u, 0x0003003eu, 0x00001553u, 0x0000046cu, 0x000200f9u, 0x000016d0u, 0x000200f8u, 0x000016d0u, 0x000700f5u, 0x00000058u, 0x0000b466u, 0x00001663u, 0x00001698u, 0x0000b469u, 0x000016f8u, 0x000600a9u, 0x00000006u, 0x0000b656u, 0x0000155cu, 0x0000b381u, 0x0000b44du, 0x000600a9u, 0x00000063u, 0x0000b657u, 0x0000155cu, 0x0000046cu, 0x00001557u, 0x000300f7u, 0x0000172au, 0x00000000u, 0x000400fau, 0x0000b657u, 0x00001729u, 0x0000172au, 0x000200f8u, 0x00001729u, 0x000400a8u, 0x00000063u, 0x0000172du, 0x00001570u, 0x000500a7u, 0x00000063u, 0x0000172eu, 0x00001566u, 0x0000172du, 0x000300f7u, 0x00001730u, 0x00000000u, 0x000400fau, 0x0000172eu, 0x0000172fu, 0x00001738u, 0x000200f8u, 0x0000172fu, 0x0003003eu, 0x00001732u, 0x0000b48au, 0x0003003eu, 0x00001734u, 0x00006e02u, 0x00060039u, 0x00000013u, 0x00001737u, 0x00000146u, 0x00001732u, 0x00001734u, 0x0003003eu, 0x00001731u, 0x00001737u, 0x000200f9u, 0x00001730u, 0x000200f8u, 0x00001738u, 0x0004003du, 0x00000006u, 0x0000173au, 0x00000190u, 0x00080041u, 0x000006a8u, 0x0000173cu, 0x00001482u, 0x0000019cu, 0x0000173au, 0x000001a9u, 0x0000b656u, 0x0004003du, 0x0000000fu, 0x0000173du, 0x0000173cu, 0x00040071u, 0x00000006u, 0x0000173eu, 0x0000173du, 0x0003003eu, 0x00001739u, 0x0000173eu, 0x0003003eu, 0x00001740u, 0x0000173eu, 0x00050039u, 0x00000029u, 0x00001742u, 0x0000002cu, 0x00001740u, 0x00050051u, 0x00000006u, 0x00006e3du, 0x00001742u, 0x00000000u, 0x0003003eu, 0x00006e2fu, 0x00006e3du, 0x00050051u, 0x00000006u, 0x00006e3eu, 0x00001742u, 0x00000001u, 0x0003003eu, 0x00006e30u, 0x00006e3eu, 0x00050051u, 0x00000006u, 0x00006e3fu, 0x00001742u, 0x00000002u, 0x0003003eu, 0x00006e31u, 0x00006e3fu, 0x00050051u, 0x00000006u, 0x00006e40u, 0x00001742u, 0x00000003u, 0x0003003eu, 0x00006e32u, 0x00006e40u, 0x00050051u, 0x00000006u, 0x00006e41u, 0x00001742u, 0x00000004u, 0x0003003eu, 0x00006e33u, 0x00006e41u, 0x00050051u, 0x00000006u, 0x00006e42u, 0x00001742u, 0x00000005u, 0x0003003eu, 0x00006e34u, 0x00006e42u, 0x00050051u, 0x0000000fu, 0x00006e43u, 0x00001742u, 0x00000006u, 0x0003003eu, 0x00006e35u, 0x00006e43u, 0x00050051u, 0x0000000fu, 0x00006e44u, 0x00001742u, 0x00000007u, 0x0003003eu, 0x00006e36u, 0x00006e44u, 0x00050051u, 0x0000000fu, 0x00006e45u, 0x00001742u, 0x00000008u, 0x0003003eu, 0x00006e37u, 0x00006e45u, 0x00050051u, 0x0000000fu, 0x00006e46u, 0x00001742u, 0x00000009u, 0x0003003eu, 0x00006e38u, 0x00006e46u, 0x00050051u, 0x0000000fu, 0x00006e47u, 0x00001742u, 0x0000000au, 0x0003003eu, 0x00006e39u, 0x00006e47u, 0x00050051u, 0x0000000fu, 0x00006e48u, 0x00001742u, 0x0000000bu, 0x0003003eu, 0x00006e3au, 0x00006e48u, 0x00050051u, 0x0000000fu, 0x00006e49u, 0x00001742u, 0x0000000cu, 0x0003003eu, 0x00006e3bu, 0x00006e49u, 0x00050051u, 0x0000000fu, 0x00006e4au, 0x00001742u, 0x0000000du, 0x0003003eu, 0x00006e3cu, 0x00006e4au, 0x000300f7u, 0x00001746u, 0x00000000u, 0x000400fau, 0x00001744u, 0x00001745u, 0x00001746u, 0x000200f8u, 0x00001745u, 0x0003003eu, 0x00006e35u, 0x00001748u, 0x0003003eu, 0x00006e36u, 0x0000174bu, 0x000200f9u, 0x00001746u, 0x000200f8u, 0x00001746u, 0x000600a9u, 0x0000000fu, 0x0000b658u, 0x00001744u, 0x00001748u, 0x00006e43u, 0x000600a9u, 0x0000000fu, 0x0000b659u, 0x00001744u, 0x0000174bu, 0x00006e44u, 0x00110050u, 0x00000029u, 0x00006e59u, 0x00006e3du, 0x00006e3eu, 0x00006e3fu, 0x00006e40u, 0x00006e41u, 0x00006e42u, 0x0000b658u, 0x0000b659u, 0x00006e45u, 0x00006e46u, 0x00006e47u, 0x00006e48u, 0x00006e49u, 0x00006e4au, 0x0003003eu, 0x0000174du, 0x00006e59u, 0x0003003eu, 0x0000174fu, 0x0000148du, 0x0003003eu, 0x00001751u, 0x0000b466u, 0x0003003eu, 0x00001753u, 0x00001505u, 0x0003003eu, 0x00001755u, 0x00001509u, 0x0003003eu, 0x00001757u, 0x0000150eu, 0x0003003eu, 0x00001759u, 0x0000154du, 0x0003003eu, 0x0000175bu, 0x00001566u, 0x0003003eu, 0x0000175du, 0x0000b48au, 0x000d0039u, 0x00000013u, 0x0000175fu, 0x00000131u, 0x0000174du, 0x0000174fu, 0x00001751u, 0x00001753u, 0x00001755u, 0x00001757u, 0x00001759u, 0x0000175bu, 0x0000175du, 0x0003003eu, 0x00001731u, 0x0000175fu, 0x000400a8u, 0x00000063u, 0x00001761u, 0x0000150eu, 0x000400a8u, 0x00000063u, 0x00001763u, 0x00001505u, 0x000500a7u, 0x00000063u, 0x00001764u, 0x00001761u, 0x00001763u, 0x000500a7u, 0x00000063u, 0x00001767u, 0x00001764u, 0x0000172du, 0x000300f7u, 0x00001769u, 0x00000000u, 0x000400fau, 0x00001767u, 0x00001768u, 0x00001769u, 0x000200f8u, 0x00001768u, 0x0003003eu, 0x0000176au, 0x0000175fu, 0x0003003eu, 0x0000176cu, 0x00006e02u, 0x00060039u, 0x00000013u, 0x0000176fu, 0x00000146u, 0x0000176au, 0x0000176cu, 0x0003003eu, 0x00001731u, 0x0000176fu, 0x000200f9u, 0x00001769u, 0x000200f8u, 0x00001769u, 0x000700f5u, 0x00000013u, 0x0000b51fu, 0x0000175fu, 0x00001746u, 0x0000176fu, 0x00001768u, 0x000200f9u, 0x00001730u, 0x000200f8u, 0x00001730u, 0x000700f5u, 0x00000013u, 0x0000b51eu, 0x00001737u, 0x0000172fu, 0x0000b51fu, 0x00001769u, 0x000200f9u, 0x0000172au, 0x000200f8u, 0x0000172au, 0x000700f5u, 0x00000013u, 0x0000b50du, 0x0000b492u, 0x000016d0u, 0x0000b51eu, 0x00001730u, 0x0004003du, 0x00000008u, 0x00001770u, 0x0000018fu, 0x000600a9u, 0x00000008u, 0x00001772u, 0x00001535u, 0x000001a6u, 0x0000019cu, 0x000500c3u, 0x00000008u, 0x00001773u, 0x00001770u, 0x00001772u, 0x000500c3u, 0x00000008u, 0x00001775u, 0x0000b64fu, 0x000001a9u, 0x000500c7u, 0x00000008u, 0x00001777u, 0x0000b64fu, 0x000001acu, 0x0004003du, 0x00000008u, 0x0000177bu, 0x0000018eu, 0x0003003eu, 0x0000177au, 0x0000177bu, 0x0003003eu, 0x0000177cu, 0x00001773u, 0x0003003eu, 0x0000177du, 0x00001775u, 0x0003003eu, 0x0000177eu, 0x00001777u, 0x000a0039u, 0x00000002u, 0x00001781u, 0x0000014fu, 0x0000177au, 0x0000177cu, 0x0000177du, 0x0000177eu, 0x0000177fu, 0x00001780u, 0x0004003du, 0x00000008u, 0x00001782u, 0x0000177fu, 0x0003003eu, 0x00001778u, 0x00001782u, 0x0004003du, 0x00000008u, 0x00001783u, 0x00001780u, 0x0003003eu, 0x00001779u, 0x00001783u, 0x000300f7u, 0x00001786u, 0x00000000u, 0x000400fau, 0x00001531u, 0x00001785u, 0x000017d2u, 0x000200f8u, 0x00001785u, 0x0004003du, 0x00000010u, 0x00001790u, 0x00001627u, 0x00040039u, 0x00000012u, 0x00001794u, 0x00000035u, 0x000d0050u, 0x0000015cu, 0x00001795u, 0x00006df8u, 0x00006df9u, 0x00006dfau, 0x00006dfbu, 0x00001790u, 0x000016afu, 0x0000b48au, 0x0000b50du, 0x0000b523u, 0x00001794u, 0x0003003eu, 0x00006e5au, 0x00006df8u, 0x0003003eu, 0x00006e5bu, 0x00006df9u, 0x0003003eu, 0x00006e5cu, 0x00006dfau, 0x0003003eu, 0x00006e5du, 0x00006dfbu, 0x0003003eu, 0x00006e5eu, 0x00001790u, 0x0003003eu, 0x00006e5fu, 0x000016afu, 0x0003003eu, 0x00006e60u, 0x0000b48au, 0x0003003eu, 0x00006e61u, 0x0000b50du, 0x0003003eu, 0x00006e62u, 0x0000b523u, 0x0003003eu, 0x00006e63u, 0x00001794u, 0x0003003eu, 0x00001797u, 0x00001795u, 0x0004003du, 0x00000010u, 0x0000179au, 0x00001498u, 0x0003003eu, 0x00001799u, 0x0000179au, 0x0004003du, 0x00000010u, 0x0000179cu, 0x0000149bu, 0x0003003eu, 0x0000179bu, 0x0000179cu, 0x0003003eu, 0x0000179du, 0x00001783u, 0x0003003eu, 0x0000179fu, 0x0000160fu, 0x0003003eu, 0x000017a1u, 0x00001512u, 0x0003003eu, 0x000017a3u, 0x00001517u, 0x0003003eu, 0x000017a5u, 0x00001543u, 0x000d0039u, 0x00000013u, 0x000017a8u, 0x0000017fu, 0x00001797u, 0x00001799u, 0x0000179bu, 0x0000179du, 0x0000179fu, 0x000017a1u, 0x000017a3u, 0x000017a5u, 0x000017a7u, 0x0004003du, 0x0000000fu, 0x000017a9u, 0x000017a7u, 0x0003003eu, 0x00001796u, 0x000017a9u, 0x0003003eu, 0x00006e5fu, 0x000017a8u, 0x0003003eu, 0x00006e5au, 0x00006dfcu, 0x0003003eu, 0x00006e5bu, 0x00006dfdu, 0x0003003eu, 0x00006e5cu, 0x00006dfeu, 0x0003003eu, 0x00006e5du, 0x00006dffu, 0x0003003eu, 0x000017b7u, 0x0000b48au, 0x0003003eu, 0x00006e60u, 0x0000b50du, 0x0003003eu, 0x00006e61u, 0x0000b48au, 0x000d0050u, 0x0000015cu, 0x00006e83u, 0x00006dfcu, 0x00006dfdu, 0x00006dfeu, 0x00006dffu, 0x00001790u, 0x000017a8u, 0x0000b50du, 0x0000b48au, 0x0000b523u, 0x00001794u, 0x0003003eu, 0x000017c0u, 0x00006e83u, 0x0004003du, 0x00000010u, 0x000017c3u, 0x0000149eu, 0x0003003eu, 0x000017c2u, 0x000017c3u, 0x0004003du, 0x00000010u, 0x000017c5u, 0x000014a1u, 0x0003003eu, 0x000017c4u, 0x000017c5u, 0x0003003eu, 0x000017c6u, 0x00001783u, 0x0003003eu, 0x000017c8u, 0x0000160fu, 0x0003003eu, 0x000017cau, 0x00001512u, 0x0003003eu, 0x000017ccu, 0x00001517u, 0x000b0039u, 0x00000013u, 0x000017ceu, 0x00000189u, 0x000017c0u, 0x000017c2u, 0x000017c4u, 0x000017c6u, 0x000017c8u, 0x000017cau, 0x000017ccu, 0x0004003du, 0x00000008u, 0x000017cfu, 0x000017c8u, 0x0003003eu, 0x0000160du, 0x000017cfu, 0x00040072u, 0x0000031cu, 0x000017d0u, 0x000017ceu, 0x0004007cu, 0x00000010u, 0x000017d1u, 0x000017d0u, 0x0003003eu, 0x000017bfu, 0x000017d1u, 0x000200f9u, 0x00001786u, 0x000200f8u, 0x000017d2u, 0x0004003du, 0x00000010u, 0x000017dcu, 0x00001627u, 0x00040039u, 0x00000012u, 0x000017e0u, 0x00000035u, 0x000d0050u, 0x0000015cu, 0x000017e1u, 0x00006dfcu, 0x00006dfdu, 0x00006dfeu, 0x00006dffu, 0x000017dcu, 0x000016afu, 0x0000b48au, 0x0000b50du, 0x0000b523u, 0x000017e0u, 0x0003003eu, 0x00006e84u, 0x00006dfcu, 0x0003003eu, 0x00006e85u, 0x00006dfdu, 0x0003003eu, 0x00006e86u, 0x00006dfeu, 0x0003003eu, 0x00006e87u, 0x00006dffu, 0x0003003eu, 0x00006e88u, 0x000017dcu, 0x0003003eu, 0x00006e89u, 0x000016afu, 0x0003003eu, 0x00006e8au, 0x0000b48au, 0x0003003eu, 0x00006e8bu, 0x0000b50du, 0x0003003eu, 0x00006e8cu, 0x0000b523u, 0x0003003eu, 0x00006e8du, 0x000017e0u, 0x0003003eu, 0x000017e2u, 0x000017e1u, 0x0004003du, 0x00000010u, 0x000017e5u, 0x0000149eu, 0x0003003eu, 0x000017e4u, 0x000017e5u, 0x0004003du, 0x00000010u, 0x000017e7u, 0x000014a1u, 0x0003003eu, 0x000017e6u, 0x000017e7u, 0x0003003eu, 0x000017e8u, 0x00001783u, 0x0003003eu, 0x000017eau, 0x0000160fu, 0x0003003eu, 0x000017ecu, 0x00001512u, 0x0003003eu, 0x000017eeu, 0x00001517u, 0x000b0039u, 0x00000013u, 0x000017f0u, 0x00000189u, 0x000017e2u, 0x000017e4u, 0x000017e6u, 0x000017e8u, 0x000017eau, 0x000017ecu, 0x000017eeu, 0x0004003du, 0x00000008u, 0x000017f1u, 0x000017eau, 0x0003003eu, 0x0000160du, 0x000017f1u, 0x00040072u, 0x0000031cu, 0x000017f2u, 0x000017f0u, 0x0004007cu, 0x00000010u, 0x000017f3u, 0x000017f2u, 0x0003003eu, 0x000017bfu, 0x000017f3u, 0x00050041u, 0x00000174u, 0x000017f4u, 0x000017bfu, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x000017f5u, 0x000017f4u, 0x0003003eu, 0x00001796u, 0x000017f5u, 0x000200f9u, 0x00001786u, 0x000200f8u, 0x00001786u, 0x000700f5u, 0x0000000fu, 0x0000b5d0u, 0x000017a9u, 0x00001785u, 0x000017f5u, 0x000017d2u, 0x000700f5u, 0x00000008u, 0x0000b5bcu, 0x000017cfu, 0x00001785u, 0x000017f1u, 0x000017d2u, 0x000500aau, 0x00000063u, 0x000017f8u, 0x0000b5bcu, 0x0000019cu, 0x000500a7u, 0x00000063u, 0x000017f9u, 0x0000152cu, 0x000017f8u, 0x000300f7u, 0x000017fbu, 0x00000000u, 0x000400fau, 0x000017f9u, 0x000017fau, 0x000017fbu, 0x000200f8u, 0x000017fau, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x000017fbu, 0x000300f7u, 0x000017ffu, 0x00000000u, 0x000400fau, 0x00001543u, 0x000017feu, 0x000017ffu, 0x000200f8u, 0x000017feu, 0x000300f7u, 0x00001802u, 0x00000000u, 0x000400fau, 0x00001548u, 0x00001801u, 0x00001805u, 0x000200f8u, 0x00001801u, 0x00040039u, 0x0000000fu, 0x00001804u, 0x0000003du, 0x0003003eu, 0x00001803u, 0x00001804u, 0x000200f9u, 0x00001802u, 0x000200f8u, 0x00001805u, 0x00050041u, 0x00000174u, 0x00006e03u, 0x00006df5u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x00001807u, 0x00006e03u, 0x0003003eu, 0x00001803u, 0x00001807u, 0x000200f9u, 0x00001802u, 0x000200f8u, 0x00001802u, 0x000700f5u, 0x0000000fu, 0x0000b5d1u, 0x00001804u, 0x00001801u, 0x00001807u, 0x00001805u, 0x000500b0u, 0x00000063u, 0x0000180au, 0x0000b5d0u, 0x0000b5d1u, 0x000300f7u, 0x0000180cu, 0x00000000u, 0x000400fau, 0x0000180au, 0x0000180bu, 0x0000180cu, 0x000200f8u, 0x0000180bu, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x00001099u, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x0000180cu, 0x000200f9u, 0x000017ffu, 0x000200f8u, 0x000017ffu, 0x0004003du, 0x00000010u, 0x0000180eu, 0x000017bfu, 0x00050041u, 0x00000173u, 0x0000180fu, 0x00000191u, 0x0000019cu, 0x0003003eu, 0x0000180fu, 0x0000180eu, 0x000500c4u, 0x00000008u, 0x00001811u, 0x00001666u, 0x000001dcu, 0x000500c5u, 0x00000008u, 0x00001813u, 0x00001811u, 0x00001782u, 0x00050041u, 0x00000040u, 0x00001814u, 0x00000191u, 0x000001a6u, 0x0003003eu, 0x00001814u, 0x00001813u, 0x00040072u, 0x0000031bu, 0x00001816u, 0x0000b5bcu, 0x0004007cu, 0x0000000fu, 0x00001817u, 0x00001816u, 0x00050041u, 0x00000174u, 0x00001818u, 0x00000191u, 0x000001a9u, 0x0003003eu, 0x00001818u, 0x00001817u, 0x00050041u, 0x00000174u, 0x00001819u, 0x00001627u, 0x000002fbu, 0x0004003du, 0x0000000fu, 0x0000181au, 0x00001819u, 0x00040071u, 0x00000006u, 0x0000181bu, 0x0000181au, 0x0004007cu, 0x00000008u, 0x0000181cu, 0x0000181bu, 0x00050080u, 0x00000008u, 0x0000181eu, 0x0000181cu, 0x00001783u, 0x0007000cu, 0x00000008u, 0x0000181fu, 0x00000001u, 0x00000027u, 0x0000181eu, 0x00000311u, 0x00040072u, 0x0000031bu, 0x00001820u, 0x0000181fu, 0x0004007cu, 0x0000000fu, 0x00001821u, 0x00001820u, 0x00050041u, 0x00000174u, 0x00001822u, 0x00000191u, 0x000001acu, 0x0003003eu, 0x00001822u, 0x00001821u, 0x0003003eu, 0x000018b6u, 0x0000046cu, 0x0003003eu, 0x000018b3u, 0x0000046cu, 0x000200f9u, 0x000018b2u, 0x000200f8u, 0x000018b2u, 0x001900f5u, 0x00000063u, 0x0000b611u, 0x00001099u, 0x00001440u, 0x00001099u, 0x0000146eu, 0x00001099u, 0x00001599u, 0x00001099u, 0x000015e7u, 0x0000046cu, 0x000015e8u, 0x000015fau, 0x000015f5u, 0x00001099u, 0x0000160au, 0x00001099u, 0x00001618u, 0x00001099u, 0x000017fau, 0x00001099u, 0x0000180bu, 0x0000046cu, 0x000017ffu, 0x000200feu, 0x0000b611u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000029u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000000u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000008u, 0x00000016u, 0x00040047u, 0x00000008u, 0x0000000bu, 0x0000002au, 0x00050048u, 0x00000014u, 0x00000000u, 0x0000000bu, 0x00000000u, 0x00050048u, 0x00000014u, 0x00000001u, 0x0000000bu, 0x00000001u, 0x00050048u, 0x00000014u, 0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x00000014u, 0x00000003u, 0x0000000bu, 0x00000004u, 0x00030047u, 0x00000014u, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040020u, 0x00000007u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00000007u, 0x00000008u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000000au, 0x00000000u, 0x00020014u, 0x0000000bu, 0x00030016u, 0x0000000fu, 0x00000020u, 0x00040017u, 0x00000010u, 0x0000000fu, 0x00000004u, 0x00040015u, 0x00000011u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000011u, 0x00000012u, 0x00000001u, 0x0004001cu, 0x00000013u, 0x0000000fu, 0x00000012u, 0x0006001eu, 0x00000014u, 0x00000010u, 0x0000000fu, 0x00000013u, 0x00000013u, 0x00040020u, 0x00000015u, 0x00000003u, 0x00000014u, 0x0004003bu, 0x00000015u, 0x00000016u, 0x00000003u, 0x0004002bu, 0x0000000fu, 0x00000017u, 0xbf800000u, 0x0004002bu, 0x0000000fu, 0x00000018u, 0x00000000u, 0x0004002bu, 0x0000000fu, 0x00000019u, 0x3f800000u, 0x0007002cu, 0x00000010u, 0x0000001au, 0x00000017u, 0x00000017u, 0x00000018u, 0x00000019u, 0x00040020u, 0x0000001bu, 0x00000003u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x0000001fu, 0x00000001u, 0x0004002bu, 0x0000000fu, 0x00000023u, 0x40400000u, 0x0007002cu, 0x00000010u, 0x00000024u, 0x00000017u, 0x00000023u, 0x00000018u, 0x00000019u, 0x0007002cu, 0x00000010u, 0x00000027u, 0x00000023u, 0x00000017u, 0x00000018u, 0x00000019u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000006u, 0x00000009u, 0x00000008u, 0x000500aau, 0x0000000bu, 0x0000000cu, 0x00000009u, 0x0000000au, 0x000300f7u, 0x0000000eu, 0x00000000u, 0x000400fau, 0x0000000cu, 0x0000000du, 0x0000001du, 0x000200f8u, 0x0000000du, 0x00050041u, 0x0000001bu, 0x0000001cu, 0x00000016u, 0x0000000au, 0x0003003eu, 0x0000001cu, 0x0000001au, 0x000200f9u, 0x0000000eu, 0x000200f8u, 0x0000001du, 0x000500aau, 0x0000000bu, 0x00000020u, 0x00000009u, 0x0000001fu, 0x000300f7u, 0x00000022u, 0x00000000u, 0x000400fau, 0x00000020u, 0x00000021u, 0x00000026u, 0x000200f8u, 0x00000021u, 0x00050041u, 0x0000001bu, 0x00000025u, 0x00000016u, 0x0000000au, 0x0003003eu, 0x00000025u, 0x00000024u, 0x000200f9u, 0x00000022u, 0x000200f8u, 0x00000026u, 0x00050041u, 0x0000001bu, 0x00000028u, 0x00000016u, 0x0000000au, 0x0003003eu, 0x00000028u, 0x00000027u, 0x000200f9u, 0x00000022u, 0x000200f8u, 0x00000022u, 0x000200f9u, 0x0000000eu, 0x000200f8u, 0x0000000eu, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000273u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x0000002eu, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000000c1u, 0x00000192u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00040047u, 0x0000007bu, 0x00000001u, 0x00000001u, 0x00030047u, 0x0000008fu, 0x00000000u, 0x00040047u, 0x0000008fu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000008fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x000000c1u, 0x0000000bu, 0x0000000fu, 0x00050048u, 0x000000c6u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x000000c6u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x000000c6u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x000000c6u, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x000000c6u, 0x00000004u, 0x00000023u, 0x00000010u, 0x00050048u, 0x000000c6u, 0x00000005u, 0x00000023u, 0x00000014u, 0x00050048u, 0x000000c6u, 0x00000006u, 0x00000023u, 0x00000018u, 0x00050048u, 0x000000c6u, 0x00000007u, 0x00000023u, 0x0000001cu, 0x00050048u, 0x000000c6u, 0x00000008u, 0x00000023u, 0x00000020u, 0x00050048u, 0x000000c6u, 0x00000009u, 0x00000023u, 0x00000024u, 0x00030047u, 0x000000c6u, 0x00000002u, 0x00030047u, 0x00000114u, 0x00000000u, 0x00040047u, 0x00000114u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000114u, 0x00000021u, 0x00000000u, 0x00030047u, 0x00000115u, 0x00000000u, 0x00030047u, 0x00000117u, 0x00000000u, 0x00030047u, 0x00000118u, 0x00000000u, 0x00030047u, 0x00000119u, 0x00000000u, 0x00030047u, 0x0000011au, 0x00000000u, 0x00030047u, 0x0000011bu, 0x00000000u, 0x00040047u, 0x0000011du, 0x00000001u, 0x00000002u, 0x00030047u, 0x00000154u, 0x00000000u, 0x00030047u, 0x00000155u, 0x00000000u, 0x00030047u, 0x0000015cu, 0x00000000u, 0x00030047u, 0x0000015eu, 0x00000000u, 0x00030047u, 0x0000015fu, 0x00000000u, 0x00030047u, 0x00000168u, 0x00000000u, 0x00030047u, 0x00000169u, 0x00000000u, 0x00040047u, 0x00000192u, 0x0000001eu, 0x00000000u, 0x00030047u, 0x00000204u, 0x00000000u, 0x00030047u, 0x00000207u, 0x00000000u, 0x00030047u, 0x00000208u, 0x00000000u, 0x00030047u, 0x00000209u, 0x00000000u, 0x00030047u, 0x0000020du, 0x00000000u, 0x00030047u, 0x0000020eu, 0x00000000u, 0x00030047u, 0x0000020fu, 0x00000000u, 0x00030047u, 0x00000213u, 0x00000000u, 0x00030047u, 0x00000214u, 0x00000000u, 0x00030047u, 0x00000215u, 0x00000000u, 0x00030047u, 0x00000217u, 0x00000000u, 0x00030047u, 0x0000021au, 0x00000000u, 0x00030047u, 0x0000021bu, 0x00000000u, 0x00030047u, 0x0000021cu, 0x00000000u, 0x00030047u, 0x00000220u, 0x00000000u, 0x00030047u, 0x00000221u, 0x00000000u, 0x00030047u, 0x00000222u, 0x00000000u, 0x00030047u, 0x00000226u, 0x00000000u, 0x00030047u, 0x00000227u, 0x00000000u, 0x00030047u, 0x00000228u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040017u, 0x0000000eu, 0x00000006u, 0x00000003u, 0x00040015u, 0x0000001fu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000001fu, 0x00000022u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000029u, 0x00000008u, 0x0004002bu, 0x00000006u, 0x0000002fu, 0x41c64e6du, 0x0004002bu, 0x00000006u, 0x00000042u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000045u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x0000004cu, 0x0000003fu, 0x0004002bu, 0x00000006u, 0x0000004fu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000053u, 0x00000009u, 0x0004002bu, 0x00000006u, 0x00000055u, 0x00000038u, 0x0004002bu, 0x00000006u, 0x00000058u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x00000061u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000062u, 0x00000002u, 0x0006002cu, 0x0000000eu, 0x00000063u, 0x00000042u, 0x00000061u, 0x00000062u, 0x0004002bu, 0x00000006u, 0x00000072u, 0x00000005u, 0x0004002bu, 0x00000006u, 0x00000076u, 0x000000ffu, 0x00040032u, 0x0000001fu, 0x0000007bu, 0x00000000u, 0x0004002bu, 0x0000001fu, 0x0000007cu, 0x00000004u, 0x00060034u, 0x0000001fu, 0x0000007du, 0x000000c7u, 0x0000007bu, 0x0000007cu, 0x00020014u, 0x0000007eu, 0x00060034u, 0x0000007eu, 0x0000007fu, 0x000000abu, 0x0000007du, 0x00000022u, 0x0004002bu, 0x0000001fu, 0x00000083u, 0x00000006u, 0x00040017u, 0x00000084u, 0x0000001fu, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000089u, 0x00000100u, 0x00090019u, 0x0000008du, 0x00000006u, 0x00000005u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000008eu, 0x00000000u, 0x0000008du, 0x0004003bu, 0x0000008eu, 0x0000008fu, 0x00000000u, 0x00040017u, 0x00000094u, 0x00000006u, 0x00000004u, 0x00040017u, 0x000000bbu, 0x0000001fu, 0x00000002u, 0x00030016u, 0x000000beu, 0x00000020u, 0x00040017u, 0x000000bfu, 0x000000beu, 0x00000004u, 0x00040020u, 0x000000c0u, 0x00000001u, 0x000000bfu, 0x0004003bu, 0x000000c0u, 0x000000c1u, 0x00000001u, 0x00040017u, 0x000000c2u, 0x000000beu, 0x00000002u, 0x000c001eu, 0x000000c6u, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x0000001fu, 0x00040020u, 0x000000c7u, 0x00000009u, 0x000000c6u, 0x0004003bu, 0x000000c7u, 0x000000c8u, 0x00000009u, 0x0004002bu, 0x0000001fu, 0x000000c9u, 0x00000002u, 0x00040020u, 0x000000cau, 0x00000009u, 0x0000001fu, 0x0004002bu, 0x0000001fu, 0x000000cdu, 0x00000003u, 0x0004002bu, 0x0000001fu, 0x000000d5u, 0x00000008u, 0x0004002bu, 0x0000001fu, 0x000000d9u, 0x00000009u, 0x0004002bu, 0x0000001fu, 0x000000e0u, 0x00000007u, 0x0004002bu, 0x0000001fu, 0x00000102u, 0x00000005u, 0x0004002bu, 0x0000001fu, 0x00000106u, 0x00000001u, 0x0004002bu, 0x0000001fu, 0x0000010eu, 0x0000000au, 0x00090019u, 0x00000112u, 0x00000006u, 0x00000001u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x00000113u, 0x00000000u, 0x00000112u, 0x0004003bu, 0x00000113u, 0x00000114u, 0x00000000u, 0x00030031u, 0x0000007eu, 0x0000011du, 0x0004002bu, 0x0000001fu, 0x0000013fu, 0x00040000u, 0x00060034u, 0x0000001fu, 0x00000140u, 0x000000c7u, 0x0000007bu, 0x0000013fu, 0x00060034u, 0x0000007eu, 0x00000141u, 0x000000abu, 0x00000140u, 0x00000022u, 0x0004002bu, 0x0000001fu, 0x00000147u, 0x0000001fu, 0x0005002cu, 0x000000bbu, 0x00000153u, 0x00000106u, 0x00000022u, 0x0005002cu, 0x000000bbu, 0x0000015du, 0x00000022u, 0x00000106u, 0x0005002cu, 0x000000bbu, 0x00000167u, 0x00000106u, 0x00000106u, 0x00060034u, 0x0000001fu, 0x00000182u, 0x000000c7u, 0x0000007bu, 0x000000d5u, 0x00060034u, 0x0000007eu, 0x00000183u, 0x000000abu, 0x00000182u, 0x00000022u, 0x0006002cu, 0x0000000eu, 0x0000018fu, 0x00000076u, 0x00000076u, 0x00000076u, 0x00040020u, 0x00000191u, 0x00000003u, 0x000000bfu, 0x0004003bu, 0x00000191u, 0x00000192u, 0x00000003u, 0x00040017u, 0x00000194u, 0x000000beu, 0x00000003u, 0x0004002bu, 0x000000beu, 0x00000199u, 0x3f800000u, 0x0006002cu, 0x0000000eu, 0x00000267u, 0x00000029u, 0x00000029u, 0x00000029u, 0x0006002cu, 0x0000000eu, 0x00000268u, 0x0000002fu, 0x0000002fu, 0x0000002fu, 0x0005002cu, 0x000000bbu, 0x00000269u, 0x0000010eu, 0x0000010eu, 0x0006002cu, 0x0000000eu, 0x0000026au, 0x00000045u, 0x00000045u, 0x00000045u, 0x0006002cu, 0x0000000eu, 0x0000026bu, 0x00000072u, 0x00000072u, 0x00000072u, 0x0006002cu, 0x00000084u, 0x0000026cu, 0x00000083u, 0x00000083u, 0x00000083u, 0x0006002cu, 0x0000000eu, 0x0000026du, 0x00000089u, 0x00000089u, 0x00000089u, 0x0006002cu, 0x0000000eu, 0x0000026eu, 0x00000061u, 0x00000061u, 0x00000061u, 0x0004002bu, 0x000000beu, 0x00000270u, 0x3b808081u, 0x0006002cu, 0x00000194u, 0x00000271u, 0x00000270u, 0x00000270u, 0x00000270u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x000000bfu, 0x000000c3u, 0x000000c1u, 0x0007004fu, 0x000000c2u, 0x000000c4u, 0x000000c3u, 0x000000c3u, 0x00000000u, 0x00000001u, 0x0004006eu, 0x000000bbu, 0x000000c5u, 0x000000c4u, 0x00050041u, 0x000000cau, 0x000000cbu, 0x000000c8u, 0x000000c9u, 0x0004003du, 0x0000001fu, 0x000000ccu, 0x000000cbu, 0x00050041u, 0x000000cau, 0x000000ceu, 0x000000c8u, 0x000000cdu, 0x0004003du, 0x0000001fu, 0x000000cfu, 0x000000ceu, 0x00050050u, 0x000000bbu, 0x000000d0u, 0x000000ccu, 0x000000cfu, 0x00050080u, 0x000000bbu, 0x000000d1u, 0x000000c5u, 0x000000d0u, 0x00050051u, 0x0000001fu, 0x000000d4u, 0x000000d1u, 0x00000001u, 0x00050041u, 0x000000cau, 0x000000d6u, 0x000000c8u, 0x000000d5u, 0x0004003du, 0x0000001fu, 0x000000d7u, 0x000000d6u, 0x000500c7u, 0x0000001fu, 0x000000d8u, 0x000000d4u, 0x000000d7u, 0x00050041u, 0x000000cau, 0x000000dau, 0x000000c8u, 0x000000d9u, 0x0004003du, 0x0000001fu, 0x000000dbu, 0x000000dau, 0x000500abu, 0x0000007eu, 0x000000dcu, 0x000000d8u, 0x000000dbu, 0x000300f7u, 0x000000deu, 0x00000000u, 0x000400fau, 0x000000dcu, 0x000000ddu, 0x000000deu, 0x000200f8u, 0x000000ddu, 0x000100fcu, 0x000200f8u, 0x000000deu, 0x00050041u, 0x000000cau, 0x000000e1u, 0x000000c8u, 0x000000e0u, 0x0004003du, 0x0000001fu, 0x000000e2u, 0x000000e1u, 0x000500c3u, 0x0000001fu, 0x000000e5u, 0x000000d4u, 0x000000e2u, 0x000300f7u, 0x000000e8u, 0x00000000u, 0x000400fau, 0x0000007fu, 0x000000e7u, 0x000000e8u, 0x000200f8u, 0x000000e7u, 0x00050051u, 0x0000001fu, 0x000000eau, 0x000000d1u, 0x00000000u, 0x0004007cu, 0x00000006u, 0x000000ebu, 0x000000eau, 0x0004007cu, 0x00000006u, 0x000000eeu, 0x000000e5u, 0x00050041u, 0x000000cau, 0x000000efu, 0x000000c8u, 0x00000083u, 0x0004003du, 0x0000001fu, 0x000000f0u, 0x000000efu, 0x0004007cu, 0x00000006u, 0x000000f1u, 0x000000f0u, 0x00060050u, 0x0000000eu, 0x000001aeu, 0x000000ebu, 0x000000eeu, 0x000000f1u, 0x000500c2u, 0x0000000eu, 0x000001b1u, 0x000001aeu, 0x00000267u, 0x0008004fu, 0x0000000eu, 0x000001b3u, 0x000001aeu, 0x000001aeu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000000eu, 0x000001b4u, 0x000001b1u, 0x000001b3u, 0x00050084u, 0x0000000eu, 0x000001b6u, 0x000001b4u, 0x00000268u, 0x000500c2u, 0x0000000eu, 0x000001b9u, 0x000001b6u, 0x00000267u, 0x0008004fu, 0x0000000eu, 0x000001bbu, 0x000001b6u, 0x000001b6u, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000000eu, 0x000001bcu, 0x000001b9u, 0x000001bbu, 0x00050084u, 0x0000000eu, 0x000001beu, 0x000001bcu, 0x00000268u, 0x000500c2u, 0x0000000eu, 0x000001c1u, 0x000001beu, 0x00000267u, 0x0008004fu, 0x0000000eu, 0x000001c3u, 0x000001beu, 0x000001beu, 0x00000001u, 0x00000002u, 0x00000000u, 0x000500c6u, 0x0000000eu, 0x000001c4u, 0x000001c1u, 0x000001c3u, 0x00050084u, 0x0000000eu, 0x000001c6u, 0x000001c4u, 0x00000268u, 0x00050051u, 0x00000006u, 0x000001c8u, 0x000001c6u, 0x00000000u, 0x000500c2u, 0x00000006u, 0x000001c9u, 0x000001c8u, 0x00000045u, 0x0004007cu, 0x0000001fu, 0x000001cau, 0x000001c9u, 0x000200f9u, 0x000000e8u, 0x000200f8u, 0x000000e8u, 0x000700f5u, 0x0000001fu, 0x00000260u, 0x00000022u, 0x000000deu, 0x000001cau, 0x000000e7u, 0x00050051u, 0x0000001fu, 0x000000f8u, 0x000000d1u, 0x00000000u, 0x00050041u, 0x000000cau, 0x000000f9u, 0x000000c8u, 0x0000007cu, 0x0004003du, 0x0000001fu, 0x000000fau, 0x000000f9u, 0x00050084u, 0x0000001fu, 0x000000fbu, 0x000000f8u, 0x000000fau, 0x00050041u, 0x000000cau, 0x000000fcu, 0x000000c8u, 0x00000022u, 0x0004003du, 0x0000001fu, 0x000000fdu, 0x000000fcu, 0x00050080u, 0x0000001fu, 0x000000feu, 0x000000fbu, 0x000000fdu, 0x00050041u, 0x000000cau, 0x00000103u, 0x000000c8u, 0x00000102u, 0x0004003du, 0x0000001fu, 0x00000104u, 0x00000103u, 0x00050084u, 0x0000001fu, 0x00000105u, 0x000000e5u, 0x00000104u, 0x00050041u, 0x000000cau, 0x00000107u, 0x000000c8u, 0x00000106u, 0x0004003du, 0x0000001fu, 0x00000108u, 0x00000107u, 0x00050080u, 0x0000001fu, 0x00000109u, 0x00000105u, 0x00000108u, 0x00050050u, 0x000000bbu, 0x0000010du, 0x000000feu, 0x00000109u, 0x000500c3u, 0x000000bbu, 0x00000110u, 0x0000010du, 0x00000269u, 0x0004003du, 0x00000112u, 0x00000115u, 0x00000114u, 0x00050051u, 0x0000001fu, 0x00000117u, 0x00000110u, 0x00000000u, 0x00050051u, 0x0000001fu, 0x00000118u, 0x00000110u, 0x00000001u, 0x00060050u, 0x00000084u, 0x00000119u, 0x00000117u, 0x00000118u, 0x00000022u, 0x0007005fu, 0x00000094u, 0x0000011au, 0x00000115u, 0x00000119u, 0x00000002u, 0x00000022u, 0x0008004fu, 0x0000000eu, 0x0000011bu, 0x0000011au, 0x0000011au, 0x00000000u, 0x00000001u, 0x00000002u, 0x000300f7u, 0x0000011fu, 0x00000000u, 0x000400fau, 0x0000011du, 0x0000011eu, 0x0000011fu, 0x000200f8u, 0x0000011eu, 0x00050082u, 0x0000001fu, 0x00000124u, 0x00000109u, 0x00000104u, 0x000500c3u, 0x0000001fu, 0x00000125u, 0x00000124u, 0x0000010eu, 0x00050080u, 0x0000001fu, 0x0000012au, 0x00000109u, 0x00000104u, 0x000500c3u, 0x0000001fu, 0x0000012bu, 0x0000012au, 0x0000010eu, 0x000500abu, 0x0000007eu, 0x0000012eu, 0x000000e5u, 0x00000022u, 0x000300f7u, 0x00000130u, 0x00000000u, 0x000400fau, 0x0000012eu, 0x0000012fu, 0x00000130u, 0x000200f8u, 0x0000012fu, 0x00050051u, 0x0000001fu, 0x00000132u, 0x00000110u, 0x00000001u, 0x000500aau, 0x0000007eu, 0x00000134u, 0x00000132u, 0x00000125u, 0x000200f9u, 0x00000130u, 0x000200f8u, 0x00000130u, 0x000700f5u, 0x0000007eu, 0x00000135u, 0x0000012eu, 0x0000011eu, 0x00000134u, 0x0000012fu, 0x000300f7u, 0x00000137u, 0x00000000u, 0x000400fau, 0x00000135u, 0x00000136u, 0x00000137u, 0x000200f8u, 0x00000136u, 0x00050051u, 0x0000001fu, 0x00000139u, 0x00000110u, 0x00000001u, 0x000500abu, 0x0000007eu, 0x0000013bu, 0x00000139u, 0x0000012bu, 0x000200f9u, 0x00000137u, 0x000200f8u, 0x00000137u, 0x000700f5u, 0x0000007eu, 0x0000013cu, 0x00000135u, 0x00000130u, 0x0000013bu, 0x00000136u, 0x000600a9u, 0x0000001fu, 0x00000272u, 0x0000013cu, 0x00000106u, 0x00000022u, 0x000200f9u, 0x0000011fu, 0x000200f8u, 0x0000011fu, 0x000700f5u, 0x0000001fu, 0x00000255u, 0x00000022u, 0x000000e8u, 0x00000272u, 0x00000137u, 0x000300f7u, 0x00000143u, 0x00000000u, 0x000400fau, 0x00000141u, 0x00000142u, 0x00000143u, 0x000200f8u, 0x00000142u, 0x000500c3u, 0x0000001fu, 0x00000146u, 0x000000feu, 0x00000102u, 0x000500c7u, 0x0000001fu, 0x00000148u, 0x00000146u, 0x00000147u, 0x000500c3u, 0x0000001fu, 0x0000014bu, 0x00000109u, 0x00000102u, 0x000500c7u, 0x0000001fu, 0x0000014cu, 0x0000014bu, 0x00000147u, 0x0008005fu, 0x00000094u, 0x00000154u, 0x00000115u, 0x00000119u, 0x0000000au, 0x00000022u, 0x00000153u, 0x0008004fu, 0x0000000eu, 0x00000155u, 0x00000154u, 0x00000154u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00060050u, 0x00000084u, 0x0000015cu, 0x00000117u, 0x00000118u, 0x00000255u, 0x0008005fu, 0x00000094u, 0x0000015eu, 0x00000115u, 0x0000015cu, 0x0000000au, 0x00000022u, 0x0000015du, 0x0008004fu, 0x0000000eu, 0x0000015fu, 0x0000015eu, 0x0000015eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0008005fu, 0x00000094u, 0x00000168u, 0x00000115u, 0x0000015cu, 0x0000000au, 0x00000022u, 0x00000167u, 0x0008004fu, 0x0000000eu, 0x00000169u, 0x00000168u, 0x00000168u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0004007cu, 0x00000006u, 0x0000016bu, 0x0000014cu, 0x00050082u, 0x0000000eu, 0x000001cfu, 0x0000015fu, 0x0000011bu, 0x00060050u, 0x0000000eu, 0x000001d1u, 0x0000016bu, 0x0000016bu, 0x0000016bu, 0x00050084u, 0x0000000eu, 0x000001d2u, 0x000001cfu, 0x000001d1u, 0x00050080u, 0x0000000eu, 0x000001d4u, 0x000001d2u, 0x0000026au, 0x000500c2u, 0x0000000eu, 0x000001d6u, 0x000001d4u, 0x0000026bu, 0x00050080u, 0x0000000eu, 0x000001d7u, 0x0000011bu, 0x000001d6u, 0x000500c7u, 0x0000000eu, 0x000001d9u, 0x000001d7u, 0x0000018fu, 0x00050082u, 0x0000000eu, 0x000001deu, 0x00000169u, 0x00000155u, 0x00050084u, 0x0000000eu, 0x000001e1u, 0x000001deu, 0x000001d1u, 0x00050080u, 0x0000000eu, 0x000001e3u, 0x000001e1u, 0x0000026au, 0x000500c2u, 0x0000000eu, 0x000001e5u, 0x000001e3u, 0x0000026bu, 0x00050080u, 0x0000000eu, 0x000001e6u, 0x00000155u, 0x000001e5u, 0x000500c7u, 0x0000000eu, 0x000001e8u, 0x000001e6u, 0x0000018fu, 0x0004007cu, 0x00000006u, 0x0000017bu, 0x00000148u, 0x00050082u, 0x0000000eu, 0x000001edu, 0x000001e8u, 0x000001d9u, 0x00060050u, 0x0000000eu, 0x000001efu, 0x0000017bu, 0x0000017bu, 0x0000017bu, 0x00050084u, 0x0000000eu, 0x000001f0u, 0x000001edu, 0x000001efu, 0x00050080u, 0x0000000eu, 0x000001f2u, 0x000001f0u, 0x0000026au, 0x000500c2u, 0x0000000eu, 0x000001f4u, 0x000001f2u, 0x0000026bu, 0x00050080u, 0x0000000eu, 0x000001f5u, 0x000001d9u, 0x000001f4u, 0x000500c7u, 0x0000000eu, 0x000001f7u, 0x000001f5u, 0x0000018fu, 0x000200f9u, 0x00000143u, 0x000200f8u, 0x00000143u, 0x000700f5u, 0x0000000eu, 0x0000025du, 0x0000011bu, 0x0000011fu, 0x000001f7u, 0x00000142u, 0x000300f7u, 0x00000185u, 0x00000000u, 0x000400fau, 0x00000183u, 0x00000184u, 0x00000189u, 0x000200f8u, 0x00000184u, 0x000300f7u, 0x000001fau, 0x00000000u, 0x000400fau, 0x0000007fu, 0x000001fbu, 0x000001fcu, 0x000200f8u, 0x000001fbu, 0x000500c4u, 0x0000000eu, 0x000001ffu, 0x0000025du, 0x0000026cu, 0x0004007cu, 0x00000006u, 0x0000022eu, 0x00000260u, 0x000500c7u, 0x00000006u, 0x00000230u, 0x0000022eu, 0x0000004cu, 0x000500c2u, 0x00000006u, 0x00000232u, 0x0000022eu, 0x0000004fu, 0x000500c7u, 0x00000006u, 0x00000233u, 0x00000232u, 0x0000004cu, 0x000500c2u, 0x00000006u, 0x00000235u, 0x0000022eu, 0x00000053u, 0x000500c7u, 0x00000006u, 0x00000236u, 0x00000235u, 0x00000055u, 0x000500c7u, 0x00000006u, 0x00000238u, 0x0000022eu, 0x00000058u, 0x000500c5u, 0x00000006u, 0x00000239u, 0x00000236u, 0x00000238u, 0x00060050u, 0x0000000eu, 0x0000023au, 0x00000230u, 0x00000233u, 0x00000239u, 0x00050080u, 0x0000000eu, 0x00000201u, 0x000001ffu, 0x0000023au, 0x00050080u, 0x0000000eu, 0x00000203u, 0x00000201u, 0x0000026du, 0x0004003du, 0x0000008du, 0x00000204u, 0x0000008fu, 0x00050051u, 0x00000006u, 0x00000206u, 0x00000203u, 0x00000000u, 0x0004007cu, 0x0000001fu, 0x00000207u, 0x00000206u, 0x0005005fu, 0x00000094u, 0x00000208u, 0x00000204u, 0x00000207u, 0x00050051u, 0x00000006u, 0x00000209u, 0x00000208u, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000020cu, 0x00000203u, 0x00000001u, 0x0004007cu, 0x0000001fu, 0x0000020du, 0x0000020cu, 0x0005005fu, 0x00000094u, 0x0000020eu, 0x00000204u, 0x0000020du, 0x00050051u, 0x00000006u, 0x0000020fu, 0x0000020eu, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000212u, 0x00000203u, 0x00000002u, 0x0004007cu, 0x0000001fu, 0x00000213u, 0x00000212u, 0x0005005fu, 0x00000094u, 0x00000214u, 0x00000204u, 0x00000213u, 0x00050051u, 0x00000006u, 0x00000215u, 0x00000214u, 0x00000000u, 0x00060050u, 0x0000000eu, 0x00000216u, 0x00000209u, 0x0000020fu, 0x00000215u, 0x000200f9u, 0x000001fau, 0x000200f8u, 0x000001fcu, 0x0004003du, 0x0000008du, 0x00000217u, 0x0000008fu, 0x00050051u, 0x00000006u, 0x00000219u, 0x0000025du, 0x00000000u, 0x0004007cu, 0x0000001fu, 0x0000021au, 0x00000219u, 0x0005005fu, 0x00000094u, 0x0000021bu, 0x00000217u, 0x0000021au, 0x00050051u, 0x00000006u, 0x0000021cu, 0x0000021bu, 0x00000000u, 0x00050051u, 0x00000006u, 0x0000021fu, 0x0000025du, 0x00000001u, 0x0004007cu, 0x0000001fu, 0x00000220u, 0x0000021fu, 0x0005005fu, 0x00000094u, 0x00000221u, 0x00000217u, 0x00000220u, 0x00050051u, 0x00000006u, 0x00000222u, 0x00000221u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000225u, 0x0000025du, 0x00000002u, 0x0004007cu, 0x0000001fu, 0x00000226u, 0x00000225u, 0x0005005fu, 0x00000094u, 0x00000227u, 0x00000217u, 0x00000226u, 0x00050051u, 0x00000006u, 0x00000228u, 0x00000227u, 0x00000000u, 0x00060050u, 0x0000000eu, 0x00000229u, 0x0000021cu, 0x00000222u, 0x00000228u, 0x000200f9u, 0x000001fau, 0x000200f8u, 0x000001fau, 0x000700f5u, 0x0000000eu, 0x00000264u, 0x00000216u, 0x000001fbu, 0x00000229u, 0x000001fcu, 0x000200f9u, 0x00000185u, 0x000200f8u, 0x00000189u, 0x000300f7u, 0x0000018bu, 0x00000000u, 0x000400fau, 0x0000007fu, 0x0000018au, 0x0000018bu, 0x000200f8u, 0x0000018au, 0x0004007cu, 0x00000006u, 0x0000023du, 0x00000260u, 0x00060050u, 0x0000000eu, 0x0000023eu, 0x0000023du, 0x0000023du, 0x0000023du, 0x000500c2u, 0x0000000eu, 0x0000023fu, 0x0000023eu, 0x00000063u, 0x000500c7u, 0x0000000eu, 0x00000241u, 0x0000023fu, 0x0000026eu, 0x00050080u, 0x0000000eu, 0x0000018eu, 0x0000025du, 0x00000241u, 0x0007000cu, 0x0000000eu, 0x00000190u, 0x00000001u, 0x00000026u, 0x0000018eu, 0x0000018fu, 0x000200f9u, 0x0000018bu, 0x000200f8u, 0x0000018bu, 0x000700f5u, 0x0000000eu, 0x00000266u, 0x0000025du, 0x00000189u, 0x00000190u, 0x0000018au, 0x000200f9u, 0x00000185u, 0x000200f8u, 0x00000185u, 0x000700f5u, 0x0000000eu, 0x00000265u, 0x00000264u, 0x000001fau, 0x00000266u, 0x0000018bu, 0x00040070u, 0x00000194u, 0x00000195u, 0x00000265u, 0x00050085u, 0x00000194u, 0x00000198u, 0x00000195u, 0x00000271u, 0x00050051u, 0x000000beu, 0x0000019au, 0x00000198u, 0x00000000u, 0x00050051u, 0x000000beu, 0x0000019bu, 0x00000198u, 0x00000001u, 0x00050051u, 0x000000beu, 0x0000019cu, 0x00000198u, 0x00000002u, 0x00070050u, 0x000000bfu, 0x0000019du, 0x0000019au, 0x0000019bu, 0x0000019cu, 0x00000199u, 0x0003003eu, 0x00000192u, 0x0000019du, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000167u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000046u, 0x00000079u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00040047u, 0x00000046u, 0x0000000bu, 0x0000000fu, 0x00030047u, 0x00000050u, 0x00000000u, 0x00040047u, 0x00000050u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000050u, 0x00000021u, 0x00000000u, 0x00030047u, 0x00000051u, 0x00000000u, 0x00030047u, 0x00000055u, 0x00000000u, 0x00030047u, 0x00000056u, 0x00000000u, 0x00030047u, 0x00000057u, 0x00000000u, 0x00030047u, 0x00000058u, 0x00000000u, 0x00030047u, 0x00000061u, 0x00000000u, 0x00030047u, 0x0000006au, 0x00000000u, 0x00040047u, 0x00000079u, 0x0000001eu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00020014u, 0x00000019u, 0x00040015u, 0x0000003fu, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000040u, 0x0000003fu, 0x00000002u, 0x00030016u, 0x00000043u, 0x00000020u, 0x00040017u, 0x00000044u, 0x00000043u, 0x00000004u, 0x00040020u, 0x00000045u, 0x00000001u, 0x00000044u, 0x0004003bu, 0x00000045u, 0x00000046u, 0x00000001u, 0x00040017u, 0x00000047u, 0x00000043u, 0x00000002u, 0x00040017u, 0x0000004bu, 0x00000006u, 0x00000004u, 0x00090019u, 0x0000004eu, 0x00000006u, 0x00000001u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000004fu, 0x00000000u, 0x0000004eu, 0x0004003bu, 0x0000004fu, 0x00000050u, 0x00000000u, 0x0004002bu, 0x0000003fu, 0x00000053u, 0x00000000u, 0x00040017u, 0x00000054u, 0x0000003fu, 0x00000003u, 0x0004002bu, 0x0000003fu, 0x0000005fu, 0x00000001u, 0x0005002cu, 0x00000040u, 0x00000060u, 0x0000005fu, 0x00000053u, 0x0004002bu, 0x0000003fu, 0x00000068u, 0x00000002u, 0x0005002cu, 0x00000040u, 0x00000069u, 0x00000068u, 0x00000053u, 0x0004002bu, 0x00000006u, 0x00000074u, 0x00000007u, 0x00040020u, 0x00000078u, 0x00000003u, 0x0000004bu, 0x0004003bu, 0x00000078u, 0x00000079u, 0x00000003u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000044u, 0x00000048u, 0x00000046u, 0x0007004fu, 0x00000047u, 0x00000049u, 0x00000048u, 0x00000048u, 0x00000000u, 0x00000001u, 0x0004006eu, 0x00000040u, 0x0000004au, 0x00000049u, 0x0004003du, 0x0000004eu, 0x00000051u, 0x00000050u, 0x00050051u, 0x0000003fu, 0x00000055u, 0x0000004au, 0x00000000u, 0x00050051u, 0x0000003fu, 0x00000056u, 0x0000004au, 0x00000001u, 0x00060050u, 0x00000054u, 0x00000057u, 0x00000055u, 0x00000056u, 0x00000053u, 0x0007005fu, 0x0000004bu, 0x00000058u, 0x00000051u, 0x00000057u, 0x00000002u, 0x00000053u, 0x0008005fu, 0x0000004bu, 0x00000061u, 0x00000051u, 0x00000057u, 0x0000000au, 0x00000053u, 0x00000060u, 0x0008005fu, 0x0000004bu, 0x0000006au, 0x00000051u, 0x00000057u, 0x0000000au, 0x00000053u, 0x00000069u, 0x00050051u, 0x00000006u, 0x0000006du, 0x00000058u, 0x00000003u, 0x00050051u, 0x00000006u, 0x0000006fu, 0x00000061u, 0x00000003u, 0x000500c7u, 0x00000006u, 0x00000070u, 0x0000006du, 0x0000006fu, 0x00050051u, 0x00000006u, 0x00000072u, 0x0000006au, 0x00000003u, 0x000500c7u, 0x00000006u, 0x00000073u, 0x00000070u, 0x00000072u, 0x000500aau, 0x00000019u, 0x00000075u, 0x00000073u, 0x00000074u, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, 0x00000076u, 0x0000007bu, 0x000200f8u, 0x00000076u, 0x0003003eu, 0x00000079u, 0x00000061u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x0000007bu, 0x00050051u, 0x00000006u, 0x00000080u, 0x00000058u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000083u, 0x00000061u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000086u, 0x0000006au, 0x00000000u, 0x000500b0u, 0x00000019u, 0x000000afu, 0x00000080u, 0x00000083u, 0x000600a9u, 0x00000006u, 0x0000015bu, 0x000000afu, 0x00000083u, 0x00000080u, 0x000600a9u, 0x00000006u, 0x0000015cu, 0x000000afu, 0x00000080u, 0x00000083u, 0x000500b0u, 0x00000019u, 0x000000b9u, 0x0000015cu, 0x00000086u, 0x000600a9u, 0x00000006u, 0x0000015du, 0x000000b9u, 0x00000086u, 0x0000015cu, 0x000500b0u, 0x00000019u, 0x000000c3u, 0x0000015bu, 0x0000015du, 0x000600a9u, 0x00000006u, 0x0000015eu, 0x000000c3u, 0x0000015bu, 0x0000015du, 0x00050051u, 0x00000006u, 0x0000008cu, 0x00000058u, 0x00000001u, 0x00050051u, 0x00000006u, 0x0000008fu, 0x00000061u, 0x00000001u, 0x00050051u, 0x00000006u, 0x00000092u, 0x0000006au, 0x00000001u, 0x000500b0u, 0x00000019u, 0x000000e1u, 0x0000008cu, 0x0000008fu, 0x000600a9u, 0x00000006u, 0x0000015fu, 0x000000e1u, 0x0000008fu, 0x0000008cu, 0x000600a9u, 0x00000006u, 0x00000160u, 0x000000e1u, 0x0000008cu, 0x0000008fu, 0x000500b0u, 0x00000019u, 0x000000ebu, 0x00000160u, 0x00000092u, 0x000600a9u, 0x00000006u, 0x00000161u, 0x000000ebu, 0x00000092u, 0x00000160u, 0x000500b0u, 0x00000019u, 0x000000f5u, 0x0000015fu, 0x00000161u, 0x000600a9u, 0x00000006u, 0x00000162u, 0x000000f5u, 0x0000015fu, 0x00000161u, 0x00050051u, 0x00000006u, 0x00000098u, 0x00000058u, 0x00000002u, 0x00050051u, 0x00000006u, 0x0000009bu, 0x00000061u, 0x00000002u, 0x00050051u, 0x00000006u, 0x0000009eu, 0x0000006au, 0x00000002u, 0x000500b0u, 0x00000019u, 0x00000113u, 0x00000098u, 0x0000009bu, 0x000600a9u, 0x00000006u, 0x00000163u, 0x00000113u, 0x0000009bu, 0x00000098u, 0x000600a9u, 0x00000006u, 0x00000164u, 0x00000113u, 0x00000098u, 0x0000009bu, 0x000500b0u, 0x00000019u, 0x0000011du, 0x00000164u, 0x0000009eu, 0x000600a9u, 0x00000006u, 0x00000165u, 0x0000011du, 0x0000009eu, 0x00000164u, 0x000500b0u, 0x00000019u, 0x00000127u, 0x00000163u, 0x00000165u, 0x000600a9u, 0x00000006u, 0x00000166u, 0x00000127u, 0x00000163u, 0x00000165u, 0x00070050u, 0x0000004bu, 0x000000a5u, 0x0000015eu, 0x00000162u, 0x00000166u, 0x0000006fu, 0x0003003eu, 0x00000079u, 0x000000a5u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000299u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000046u, 0x00000079u, 0x000000c3u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00040047u, 0x00000046u, 0x0000000bu, 0x0000000fu, 0x00030047u, 0x00000050u, 0x00000000u, 0x00040047u, 0x00000050u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000050u, 0x00000021u, 0x00000000u, 0x00030047u, 0x00000051u, 0x00000000u, 0x00030047u, 0x00000055u, 0x00000000u, 0x00030047u, 0x00000056u, 0x00000000u, 0x00030047u, 0x00000057u, 0x00000000u, 0x00030047u, 0x00000058u, 0x00000000u, 0x00030047u, 0x00000061u, 0x00000000u, 0x00030047u, 0x0000006au, 0x00000000u, 0x00040047u, 0x00000079u, 0x0000001eu, 0x00000000u, 0x00030047u, 0x000000aau, 0x00000000u, 0x00030047u, 0x000000abu, 0x00000000u, 0x00030047u, 0x000000b1u, 0x00000000u, 0x00030047u, 0x000000b7u, 0x00000000u, 0x00040047u, 0x000000c3u, 0x0000001eu, 0x00000001u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00020014u, 0x00000019u, 0x00040015u, 0x0000003fu, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000040u, 0x0000003fu, 0x00000002u, 0x00030016u, 0x00000043u, 0x00000020u, 0x00040017u, 0x00000044u, 0x00000043u, 0x00000004u, 0x00040020u, 0x00000045u, 0x00000001u, 0x00000044u, 0x0004003bu, 0x00000045u, 0x00000046u, 0x00000001u, 0x00040017u, 0x00000047u, 0x00000043u, 0x00000002u, 0x00040017u, 0x0000004bu, 0x00000006u, 0x00000004u, 0x00090019u, 0x0000004eu, 0x00000006u, 0x00000001u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000004fu, 0x00000000u, 0x0000004eu, 0x0004003bu, 0x0000004fu, 0x00000050u, 0x00000000u, 0x0004002bu, 0x0000003fu, 0x00000053u, 0x00000000u, 0x00040017u, 0x00000054u, 0x0000003fu, 0x00000003u, 0x0004002bu, 0x0000003fu, 0x0000005fu, 0x00000001u, 0x0005002cu, 0x00000040u, 0x00000060u, 0x0000005fu, 0x00000053u, 0x0004002bu, 0x0000003fu, 0x00000068u, 0x00000002u, 0x0005002cu, 0x00000040u, 0x00000069u, 0x00000068u, 0x00000053u, 0x0004002bu, 0x00000006u, 0x00000074u, 0x00000007u, 0x00040020u, 0x00000078u, 0x00000003u, 0x0000004bu, 0x0004003bu, 0x00000078u, 0x00000079u, 0x00000003u, 0x0004003bu, 0x00000078u, 0x000000c3u, 0x00000003u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000044u, 0x00000048u, 0x00000046u, 0x0007004fu, 0x00000047u, 0x00000049u, 0x00000048u, 0x00000048u, 0x00000000u, 0x00000001u, 0x0004006eu, 0x00000040u, 0x0000004au, 0x00000049u, 0x0004003du, 0x0000004eu, 0x00000051u, 0x00000050u, 0x00050051u, 0x0000003fu, 0x00000055u, 0x0000004au, 0x00000000u, 0x00050051u, 0x0000003fu, 0x00000056u, 0x0000004au, 0x00000001u, 0x00060050u, 0x00000054u, 0x00000057u, 0x00000055u, 0x00000056u, 0x00000053u, 0x0007005fu, 0x0000004bu, 0x00000058u, 0x00000051u, 0x00000057u, 0x00000002u, 0x00000053u, 0x0008005fu, 0x0000004bu, 0x00000061u, 0x00000051u, 0x00000057u, 0x0000000au, 0x00000053u, 0x00000060u, 0x0008005fu, 0x0000004bu, 0x0000006au, 0x00000051u, 0x00000057u, 0x0000000au, 0x00000053u, 0x00000069u, 0x00050051u, 0x00000006u, 0x0000006du, 0x00000058u, 0x00000003u, 0x00050051u, 0x00000006u, 0x0000006fu, 0x00000061u, 0x00000003u, 0x000500c7u, 0x00000006u, 0x00000070u, 0x0000006du, 0x0000006fu, 0x00050051u, 0x00000006u, 0x00000072u, 0x0000006au, 0x00000003u, 0x000500c7u, 0x00000006u, 0x00000073u, 0x00000070u, 0x00000072u, 0x000500aau, 0x00000019u, 0x00000075u, 0x00000073u, 0x00000074u, 0x000300f7u, 0x00000077u, 0x00000000u, 0x000400fau, 0x00000075u, 0x00000076u, 0x0000007bu, 0x000200f8u, 0x00000076u, 0x0003003eu, 0x00000079u, 0x00000061u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x0000007bu, 0x00050051u, 0x00000006u, 0x00000080u, 0x00000058u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000083u, 0x00000061u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000086u, 0x0000006au, 0x00000000u, 0x000500b0u, 0x00000019u, 0x000000f6u, 0x00000080u, 0x00000083u, 0x000600a9u, 0x00000006u, 0x00000281u, 0x000000f6u, 0x00000083u, 0x00000080u, 0x000600a9u, 0x00000006u, 0x00000282u, 0x000000f6u, 0x00000080u, 0x00000083u, 0x000500b0u, 0x00000019u, 0x00000100u, 0x00000282u, 0x00000086u, 0x000600a9u, 0x00000006u, 0x00000283u, 0x00000100u, 0x00000086u, 0x00000282u, 0x000500b0u, 0x00000019u, 0x0000010au, 0x00000281u, 0x00000283u, 0x000600a9u, 0x00000006u, 0x00000284u, 0x0000010au, 0x00000281u, 0x00000283u, 0x00050051u, 0x00000006u, 0x0000008cu, 0x00000058u, 0x00000001u, 0x00050051u, 0x00000006u, 0x0000008fu, 0x00000061u, 0x00000001u, 0x00050051u, 0x00000006u, 0x00000092u, 0x0000006au, 0x00000001u, 0x000500b0u, 0x00000019u, 0x00000128u, 0x0000008cu, 0x0000008fu, 0x000600a9u, 0x00000006u, 0x00000285u, 0x00000128u, 0x0000008fu, 0x0000008cu, 0x000600a9u, 0x00000006u, 0x00000286u, 0x00000128u, 0x0000008cu, 0x0000008fu, 0x000500b0u, 0x00000019u, 0x00000132u, 0x00000286u, 0x00000092u, 0x000600a9u, 0x00000006u, 0x00000287u, 0x00000132u, 0x00000092u, 0x00000286u, 0x000500b0u, 0x00000019u, 0x0000013cu, 0x00000285u, 0x00000287u, 0x000600a9u, 0x00000006u, 0x00000288u, 0x0000013cu, 0x00000285u, 0x00000287u, 0x00050051u, 0x00000006u, 0x00000098u, 0x00000058u, 0x00000002u, 0x00050051u, 0x00000006u, 0x0000009bu, 0x00000061u, 0x00000002u, 0x00050051u, 0x00000006u, 0x0000009eu, 0x0000006au, 0x00000002u, 0x000500b0u, 0x00000019u, 0x0000015au, 0x00000098u, 0x0000009bu, 0x000600a9u, 0x00000006u, 0x00000289u, 0x0000015au, 0x0000009bu, 0x00000098u, 0x000600a9u, 0x00000006u, 0x0000028au, 0x0000015au, 0x00000098u, 0x0000009bu, 0x000500b0u, 0x00000019u, 0x00000164u, 0x0000028au, 0x0000009eu, 0x000600a9u, 0x00000006u, 0x0000028bu, 0x00000164u, 0x0000009eu, 0x0000028au, 0x000500b0u, 0x00000019u, 0x0000016eu, 0x00000289u, 0x0000028bu, 0x000600a9u, 0x00000006u, 0x0000028cu, 0x0000016eu, 0x00000289u, 0x0000028bu, 0x00070050u, 0x0000004bu, 0x000000a5u, 0x00000284u, 0x00000288u, 0x0000028cu, 0x0000006fu, 0x0003003eu, 0x00000079u, 0x000000a5u, 0x000200f9u, 0x00000077u, 0x000200f8u, 0x00000077u, 0x00060050u, 0x00000054u, 0x000000aau, 0x00000055u, 0x00000056u, 0x0000005fu, 0x0007005fu, 0x0000004bu, 0x000000abu, 0x00000051u, 0x000000aau, 0x00000002u, 0x00000053u, 0x0008005fu, 0x0000004bu, 0x000000b1u, 0x00000051u, 0x000000aau, 0x0000000au, 0x00000053u, 0x00000060u, 0x0008005fu, 0x0000004bu, 0x000000b7u, 0x00000051u, 0x000000aau, 0x0000000au, 0x00000053u, 0x00000069u, 0x00050051u, 0x00000006u, 0x000000b9u, 0x000000abu, 0x00000003u, 0x00050051u, 0x00000006u, 0x000000bbu, 0x000000b1u, 0x00000003u, 0x000500c7u, 0x00000006u, 0x000000bcu, 0x000000b9u, 0x000000bbu, 0x00050051u, 0x00000006u, 0x000000beu, 0x000000b7u, 0x00000003u, 0x000500c7u, 0x00000006u, 0x000000bfu, 0x000000bcu, 0x000000beu, 0x000500aau, 0x00000019u, 0x000000c0u, 0x000000bfu, 0x00000074u, 0x000300f7u, 0x000000c2u, 0x00000000u, 0x000400fau, 0x000000c0u, 0x000000c1u, 0x000000c5u, 0x000200f8u, 0x000000c1u, 0x0003003eu, 0x000000c3u, 0x000000b1u, 0x000200f9u, 0x000000c2u, 0x000200f8u, 0x000000c5u, 0x00050051u, 0x00000006u, 0x000000c9u, 0x000000abu, 0x00000000u, 0x00050051u, 0x00000006u, 0x000000ccu, 0x000000b1u, 0x00000000u, 0x00050051u, 0x00000006u, 0x000000cfu, 0x000000b7u, 0x00000000u, 0x000500b0u, 0x00000019u, 0x0000018cu, 0x000000c9u, 0x000000ccu, 0x000600a9u, 0x00000006u, 0x0000028du, 0x0000018cu, 0x000000ccu, 0x000000c9u, 0x000600a9u, 0x00000006u, 0x0000028eu, 0x0000018cu, 0x000000c9u, 0x000000ccu, 0x000500b0u, 0x00000019u, 0x00000196u, 0x0000028eu, 0x000000cfu, 0x000600a9u, 0x00000006u, 0x0000028fu, 0x00000196u, 0x000000cfu, 0x0000028eu, 0x000500b0u, 0x00000019u, 0x000001a0u, 0x0000028du, 0x0000028fu, 0x000600a9u, 0x00000006u, 0x00000290u, 0x000001a0u, 0x0000028du, 0x0000028fu, 0x00050051u, 0x00000006u, 0x000000d4u, 0x000000abu, 0x00000001u, 0x00050051u, 0x00000006u, 0x000000d7u, 0x000000b1u, 0x00000001u, 0x00050051u, 0x00000006u, 0x000000dau, 0x000000b7u, 0x00000001u, 0x000500b0u, 0x00000019u, 0x000001beu, 0x000000d4u, 0x000000d7u, 0x000600a9u, 0x00000006u, 0x00000291u, 0x000001beu, 0x000000d7u, 0x000000d4u, 0x000600a9u, 0x00000006u, 0x00000292u, 0x000001beu, 0x000000d4u, 0x000000d7u, 0x000500b0u, 0x00000019u, 0x000001c8u, 0x00000292u, 0x000000dau, 0x000600a9u, 0x00000006u, 0x00000293u, 0x000001c8u, 0x000000dau, 0x00000292u, 0x000500b0u, 0x00000019u, 0x000001d2u, 0x00000291u, 0x00000293u, 0x000600a9u, 0x00000006u, 0x00000294u, 0x000001d2u, 0x00000291u, 0x00000293u, 0x00050051u, 0x00000006u, 0x000000dfu, 0x000000abu, 0x00000002u, 0x00050051u, 0x00000006u, 0x000000e2u, 0x000000b1u, 0x00000002u, 0x00050051u, 0x00000006u, 0x000000e5u, 0x000000b7u, 0x00000002u, 0x000500b0u, 0x00000019u, 0x000001f0u, 0x000000dfu, 0x000000e2u, 0x000600a9u, 0x00000006u, 0x00000295u, 0x000001f0u, 0x000000e2u, 0x000000dfu, 0x000600a9u, 0x00000006u, 0x00000296u, 0x000001f0u, 0x000000dfu, 0x000000e2u, 0x000500b0u, 0x00000019u, 0x000001fau, 0x00000296u, 0x000000e5u, 0x000600a9u, 0x00000006u, 0x00000297u, 0x000001fau, 0x000000e5u, 0x00000296u, 0x000500b0u, 0x00000019u, 0x00000204u, 0x00000295u, 0x00000297u, 0x000600a9u, 0x00000006u, 0x00000298u, 0x00000204u, 0x00000295u, 0x00000297u, 0x00070050u, 0x0000004bu, 0x000000ecu, 0x00000290u, 0x00000294u, 0x00000298u, 0x000000bbu, 0x0003003eu, 0x000000c3u, 0x000000ecu, 0x000200f9u, 0x000000c2u, 0x000200f8u, 0x000000c2u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000027fu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000047u, 0x00000160u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00030047u, 0x0000001cu, 0x00000000u, 0x00040047u, 0x0000001cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000001cu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000047u, 0x0000000bu, 0x0000000fu, 0x00050048u, 0x0000004cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000004cu, 0x00000002u, 0x00040047u, 0x000000fbu, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000160u, 0x0000001eu, 0x00000000u, 0x00030047u, 0x0000017cu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000002u, 0x00040015u, 0x00000009u, 0x00000020u, 0x00000000u, 0x00040017u, 0x0000000au, 0x00000009u, 0x00000004u, 0x00040017u, 0x00000010u, 0x00000009u, 0x00000003u, 0x00090019u, 0x0000001au, 0x00000009u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000001bu, 0x00000000u, 0x0000001au, 0x0004003bu, 0x0000001bu, 0x0000001cu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000023u, 0x00000000u, 0x0004002bu, 0x00000009u, 0x00000027u, 0x00000003u, 0x0004002bu, 0x00000009u, 0x0000002bu, 0x00000007u, 0x00020014u, 0x0000002cu, 0x00030016u, 0x00000044u, 0x00000020u, 0x00040017u, 0x00000045u, 0x00000044u, 0x00000004u, 0x00040020u, 0x00000046u, 0x00000001u, 0x00000045u, 0x0004003bu, 0x00000046u, 0x00000047u, 0x00000001u, 0x00040017u, 0x00000048u, 0x00000044u, 0x00000002u, 0x0003001eu, 0x0000004cu, 0x00000007u, 0x00040020u, 0x0000004du, 0x00000009u, 0x0000004cu, 0x0004003bu, 0x0000004du, 0x0000004eu, 0x00000009u, 0x00040020u, 0x0000004fu, 0x00000009u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x00000066u, 0xffffffffu, 0x0005002cu, 0x00000007u, 0x00000067u, 0x00000066u, 0x00000066u, 0x0004002bu, 0x00000006u, 0x0000006bu, 0x00000001u, 0x0005002cu, 0x00000007u, 0x0000006cu, 0x0000006bu, 0x00000066u, 0x0004002bu, 0x00000006u, 0x00000070u, 0xfffffffeu, 0x0005002cu, 0x00000007u, 0x00000071u, 0x00000070u, 0x00000023u, 0x0004002bu, 0x00000006u, 0x00000075u, 0x00000002u, 0x0005002cu, 0x00000007u, 0x00000076u, 0x00000075u, 0x00000023u, 0x0005002cu, 0x00000007u, 0x0000007au, 0x00000066u, 0x0000006bu, 0x0005002cu, 0x00000007u, 0x0000007eu, 0x0000006bu, 0x0000006bu, 0x0004002bu, 0x00000009u, 0x000000e1u, 0x00000001u, 0x0004002bu, 0x00000009u, 0x000000f0u, 0x00000004u, 0x0004002bu, 0x00000009u, 0x000000f6u, 0x000000ffu, 0x00040032u, 0x00000006u, 0x000000fbu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x000000fcu, 0x00010000u, 0x00060034u, 0x00000006u, 0x000000fdu, 0x000000c7u, 0x000000fbu, 0x000000fcu, 0x00060034u, 0x0000002cu, 0x000000feu, 0x000000abu, 0x000000fdu, 0x00000023u, 0x00040017u, 0x00000101u, 0x00000006u, 0x00000003u, 0x0006002cu, 0x00000101u, 0x0000010au, 0x00000023u, 0x00000023u, 0x00000023u, 0x0006002cu, 0x00000101u, 0x00000129u, 0x00000066u, 0x00000066u, 0x00000066u, 0x0006002cu, 0x00000101u, 0x0000012au, 0x0000006bu, 0x0000006bu, 0x0000006bu, 0x0005002cu, 0x00000007u, 0x00000148u, 0x00000023u, 0x0000006bu, 0x0004002bu, 0x00000009u, 0x00000156u, 0x000000f8u, 0x00040020u, 0x0000015fu, 0x00000003u, 0x0000000au, 0x0004003bu, 0x0000015fu, 0x00000160u, 0x00000003u, 0x0006002cu, 0x00000010u, 0x00000279u, 0x00000027u, 0x00000027u, 0x00000027u, 0x0006002cu, 0x00000010u, 0x0000027bu, 0x000000e1u, 0x000000e1u, 0x000000e1u, 0x0006002cu, 0x00000010u, 0x0000027cu, 0x000000f0u, 0x000000f0u, 0x000000f0u, 0x0006002cu, 0x00000010u, 0x0000027du, 0x000000f6u, 0x000000f6u, 0x000000f6u, 0x0006002cu, 0x00000010u, 0x0000027eu, 0x00000156u, 0x00000156u, 0x00000156u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000045u, 0x00000049u, 0x00000047u, 0x0007004fu, 0x00000048u, 0x0000004au, 0x00000049u, 0x00000049u, 0x00000000u, 0x00000001u, 0x0004006eu, 0x00000007u, 0x0000004bu, 0x0000004au, 0x00050041u, 0x0000004fu, 0x00000050u, 0x0000004eu, 0x00000023u, 0x0004003du, 0x00000007u, 0x00000051u, 0x00000050u, 0x00050080u, 0x00000007u, 0x00000052u, 0x0000004bu, 0x00000051u, 0x0004003du, 0x0000001au, 0x0000017cu, 0x0000001cu, 0x0007005fu, 0x0000000au, 0x00000180u, 0x0000017cu, 0x00000052u, 0x00000002u, 0x00000023u, 0x00050051u, 0x00000009u, 0x00000058u, 0x00000180u, 0x00000003u, 0x000500abu, 0x0000002cu, 0x00000059u, 0x00000058u, 0x0000002bu, 0x000300f7u, 0x0000005bu, 0x00000000u, 0x000400fau, 0x00000059u, 0x0000005au, 0x000000fau, 0x000200f8u, 0x0000005au, 0x0008004fu, 0x00000010u, 0x0000005eu, 0x00000180u, 0x00000180u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050080u, 0x00000007u, 0x00000185u, 0x00000052u, 0x00000067u, 0x0007005fu, 0x0000000au, 0x00000186u, 0x0000017cu, 0x00000185u, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x0000018bu, 0x00000052u, 0x0000006cu, 0x0007005fu, 0x0000000au, 0x0000018cu, 0x0000017cu, 0x0000018bu, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x00000191u, 0x00000052u, 0x00000071u, 0x0007005fu, 0x0000000au, 0x00000192u, 0x0000017cu, 0x00000191u, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x00000197u, 0x00000052u, 0x00000076u, 0x0007005fu, 0x0000000au, 0x00000198u, 0x0000017cu, 0x00000197u, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x0000019du, 0x00000052u, 0x0000007au, 0x0007005fu, 0x0000000au, 0x0000019eu, 0x0000017cu, 0x0000019du, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x000001a3u, 0x00000052u, 0x0000007eu, 0x0007005fu, 0x0000000au, 0x000001a4u, 0x0000017cu, 0x000001a3u, 0x00000002u, 0x00000023u, 0x00050051u, 0x00000009u, 0x000001a6u, 0x00000186u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x000001a7u, 0x000001a6u, 0x0000002bu, 0x000300f7u, 0x000001a8u, 0x00000000u, 0x000400fau, 0x000001a7u, 0x000001a9u, 0x000001a8u, 0x000200f8u, 0x000001a9u, 0x0008004fu, 0x00000010u, 0x000001acu, 0x00000186u, 0x00000186u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000001aeu, 0x00000001u, 0x00000029u, 0x000001acu, 0x0000005eu, 0x0007000cu, 0x00000010u, 0x000001afu, 0x00000001u, 0x00000026u, 0x0000005eu, 0x000001aeu, 0x0007000cu, 0x00000010u, 0x000001b4u, 0x00000001u, 0x00000026u, 0x000001acu, 0x0000005eu, 0x0007000cu, 0x00000010u, 0x000001b5u, 0x00000001u, 0x00000029u, 0x0000005eu, 0x000001b4u, 0x000200f9u, 0x000001a8u, 0x000200f8u, 0x000001a8u, 0x000700f5u, 0x00000010u, 0x00000264u, 0x0000005eu, 0x0000005au, 0x000001b5u, 0x000001a9u, 0x000700f5u, 0x00000010u, 0x00000263u, 0x0000005eu, 0x0000005au, 0x000001afu, 0x000001a9u, 0x000700f5u, 0x00000010u, 0x00000262u, 0x0000005eu, 0x0000005au, 0x000001aeu, 0x000001a9u, 0x000700f5u, 0x00000010u, 0x00000261u, 0x0000005eu, 0x0000005au, 0x000001b4u, 0x000001a9u, 0x00050051u, 0x00000009u, 0x000001bfu, 0x0000018cu, 0x00000003u, 0x000500aau, 0x0000002cu, 0x000001c0u, 0x000001bfu, 0x0000002bu, 0x000300f7u, 0x000001c1u, 0x00000000u, 0x000400fau, 0x000001c0u, 0x000001c2u, 0x000001c1u, 0x000200f8u, 0x000001c2u, 0x0008004fu, 0x00000010u, 0x000001c5u, 0x0000018cu, 0x0000018cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000001c7u, 0x00000001u, 0x00000029u, 0x000001c5u, 0x00000261u, 0x0007000cu, 0x00000010u, 0x000001c8u, 0x00000001u, 0x00000026u, 0x00000263u, 0x000001c7u, 0x0007000cu, 0x00000010u, 0x000001cdu, 0x00000001u, 0x00000026u, 0x000001c5u, 0x00000262u, 0x0007000cu, 0x00000010u, 0x000001ceu, 0x00000001u, 0x00000029u, 0x00000264u, 0x000001cdu, 0x0007000cu, 0x00000010u, 0x000001d2u, 0x00000001u, 0x00000026u, 0x000001c5u, 0x00000261u, 0x0007000cu, 0x00000010u, 0x000001d6u, 0x00000001u, 0x00000029u, 0x000001c5u, 0x00000262u, 0x000200f9u, 0x000001c1u, 0x000200f8u, 0x000001c1u, 0x000700f5u, 0x00000010u, 0x00000268u, 0x00000264u, 0x000001a8u, 0x000001ceu, 0x000001c2u, 0x000700f5u, 0x00000010u, 0x00000267u, 0x00000263u, 0x000001a8u, 0x000001c8u, 0x000001c2u, 0x000700f5u, 0x00000010u, 0x00000266u, 0x00000262u, 0x000001a8u, 0x000001d6u, 0x000001c2u, 0x000700f5u, 0x00000010u, 0x00000265u, 0x00000261u, 0x000001a8u, 0x000001d2u, 0x000001c2u, 0x00050051u, 0x00000009u, 0x000001d8u, 0x00000192u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x000001d9u, 0x000001d8u, 0x0000002bu, 0x000300f7u, 0x000001dau, 0x00000000u, 0x000400fau, 0x000001d9u, 0x000001dbu, 0x000001dau, 0x000200f8u, 0x000001dbu, 0x0008004fu, 0x00000010u, 0x000001deu, 0x00000192u, 0x00000192u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000001e0u, 0x00000001u, 0x00000029u, 0x000001deu, 0x00000265u, 0x0007000cu, 0x00000010u, 0x000001e1u, 0x00000001u, 0x00000026u, 0x00000267u, 0x000001e0u, 0x0007000cu, 0x00000010u, 0x000001e6u, 0x00000001u, 0x00000026u, 0x000001deu, 0x00000266u, 0x0007000cu, 0x00000010u, 0x000001e7u, 0x00000001u, 0x00000029u, 0x00000268u, 0x000001e6u, 0x0007000cu, 0x00000010u, 0x000001ebu, 0x00000001u, 0x00000026u, 0x000001deu, 0x00000265u, 0x0007000cu, 0x00000010u, 0x000001efu, 0x00000001u, 0x00000029u, 0x000001deu, 0x00000266u, 0x000200f9u, 0x000001dau, 0x000200f8u, 0x000001dau, 0x000700f5u, 0x00000010u, 0x0000026cu, 0x00000268u, 0x000001c1u, 0x000001e7u, 0x000001dbu, 0x000700f5u, 0x00000010u, 0x0000026bu, 0x00000267u, 0x000001c1u, 0x000001e1u, 0x000001dbu, 0x000700f5u, 0x00000010u, 0x0000026au, 0x00000266u, 0x000001c1u, 0x000001efu, 0x000001dbu, 0x000700f5u, 0x00000010u, 0x00000269u, 0x00000265u, 0x000001c1u, 0x000001ebu, 0x000001dbu, 0x00050051u, 0x00000009u, 0x000001f1u, 0x00000198u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x000001f2u, 0x000001f1u, 0x0000002bu, 0x000300f7u, 0x000001f3u, 0x00000000u, 0x000400fau, 0x000001f2u, 0x000001f4u, 0x000001f3u, 0x000200f8u, 0x000001f4u, 0x0008004fu, 0x00000010u, 0x000001f7u, 0x00000198u, 0x00000198u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000001f9u, 0x00000001u, 0x00000029u, 0x000001f7u, 0x00000269u, 0x0007000cu, 0x00000010u, 0x000001fau, 0x00000001u, 0x00000026u, 0x0000026bu, 0x000001f9u, 0x0007000cu, 0x00000010u, 0x000001ffu, 0x00000001u, 0x00000026u, 0x000001f7u, 0x0000026au, 0x0007000cu, 0x00000010u, 0x00000200u, 0x00000001u, 0x00000029u, 0x0000026cu, 0x000001ffu, 0x0007000cu, 0x00000010u, 0x00000204u, 0x00000001u, 0x00000026u, 0x000001f7u, 0x00000269u, 0x0007000cu, 0x00000010u, 0x00000208u, 0x00000001u, 0x00000029u, 0x000001f7u, 0x0000026au, 0x000200f9u, 0x000001f3u, 0x000200f8u, 0x000001f3u, 0x000700f5u, 0x00000010u, 0x00000270u, 0x0000026cu, 0x000001dau, 0x00000200u, 0x000001f4u, 0x000700f5u, 0x00000010u, 0x0000026fu, 0x0000026bu, 0x000001dau, 0x000001fau, 0x000001f4u, 0x000700f5u, 0x00000010u, 0x0000026eu, 0x0000026au, 0x000001dau, 0x00000208u, 0x000001f4u, 0x000700f5u, 0x00000010u, 0x0000026du, 0x00000269u, 0x000001dau, 0x00000204u, 0x000001f4u, 0x00050051u, 0x00000009u, 0x0000020au, 0x0000019eu, 0x00000003u, 0x000500aau, 0x0000002cu, 0x0000020bu, 0x0000020au, 0x0000002bu, 0x000300f7u, 0x0000020cu, 0x00000000u, 0x000400fau, 0x0000020bu, 0x0000020du, 0x0000020cu, 0x000200f8u, 0x0000020du, 0x0008004fu, 0x00000010u, 0x00000210u, 0x0000019eu, 0x0000019eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x00000212u, 0x00000001u, 0x00000029u, 0x00000210u, 0x0000026du, 0x0007000cu, 0x00000010u, 0x00000213u, 0x00000001u, 0x00000026u, 0x0000026fu, 0x00000212u, 0x0007000cu, 0x00000010u, 0x00000218u, 0x00000001u, 0x00000026u, 0x00000210u, 0x0000026eu, 0x0007000cu, 0x00000010u, 0x00000219u, 0x00000001u, 0x00000029u, 0x00000270u, 0x00000218u, 0x0007000cu, 0x00000010u, 0x0000021du, 0x00000001u, 0x00000026u, 0x00000210u, 0x0000026du, 0x0007000cu, 0x00000010u, 0x00000221u, 0x00000001u, 0x00000029u, 0x00000210u, 0x0000026eu, 0x000200f9u, 0x0000020cu, 0x000200f8u, 0x0000020cu, 0x000700f5u, 0x00000010u, 0x00000274u, 0x00000270u, 0x000001f3u, 0x00000219u, 0x0000020du, 0x000700f5u, 0x00000010u, 0x00000273u, 0x0000026fu, 0x000001f3u, 0x00000213u, 0x0000020du, 0x000700f5u, 0x00000010u, 0x00000272u, 0x0000026eu, 0x000001f3u, 0x00000221u, 0x0000020du, 0x000700f5u, 0x00000010u, 0x00000271u, 0x0000026du, 0x000001f3u, 0x0000021du, 0x0000020du, 0x00050051u, 0x00000009u, 0x00000223u, 0x000001a4u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x00000224u, 0x00000223u, 0x0000002bu, 0x000300f7u, 0x00000225u, 0x00000000u, 0x000400fau, 0x00000224u, 0x00000226u, 0x00000225u, 0x000200f8u, 0x00000226u, 0x0008004fu, 0x00000010u, 0x00000229u, 0x000001a4u, 0x000001a4u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x0000022bu, 0x00000001u, 0x00000029u, 0x00000229u, 0x00000271u, 0x0007000cu, 0x00000010u, 0x0000022cu, 0x00000001u, 0x00000026u, 0x00000273u, 0x0000022bu, 0x0007000cu, 0x00000010u, 0x00000231u, 0x00000001u, 0x00000026u, 0x00000229u, 0x00000272u, 0x0007000cu, 0x00000010u, 0x00000232u, 0x00000001u, 0x00000029u, 0x00000274u, 0x00000231u, 0x000200f9u, 0x00000225u, 0x000200f8u, 0x00000225u, 0x000700f5u, 0x00000010u, 0x00000276u, 0x00000274u, 0x0000020cu, 0x00000232u, 0x00000226u, 0x000700f5u, 0x00000010u, 0x00000275u, 0x00000273u, 0x0000020cu, 0x0000022cu, 0x00000226u, 0x00050080u, 0x00000010u, 0x000000deu, 0x00000275u, 0x00000276u, 0x000500c4u, 0x00000010u, 0x000000e3u, 0x0000005eu, 0x0000027bu, 0x00050082u, 0x00000010u, 0x000000e4u, 0x000000deu, 0x000000e3u, 0x00050082u, 0x00000009u, 0x000000e8u, 0x0000002bu, 0x00000058u, 0x00060050u, 0x00000010u, 0x000000eeu, 0x000000e8u, 0x000000e8u, 0x000000e8u, 0x00050084u, 0x00000010u, 0x000000efu, 0x000000e4u, 0x000000eeu, 0x00050080u, 0x00000010u, 0x000000f2u, 0x000000efu, 0x0000027cu, 0x000500c2u, 0x00000010u, 0x000000f4u, 0x000000f2u, 0x00000279u, 0x00050080u, 0x00000010u, 0x000000f5u, 0x0000005eu, 0x000000f4u, 0x000500c7u, 0x00000010u, 0x000000f9u, 0x000000f5u, 0x0000027du, 0x000200f9u, 0x0000005bu, 0x000200f8u, 0x000000fau, 0x000300f7u, 0x00000100u, 0x00000000u, 0x000400fau, 0x000000feu, 0x000000ffu, 0x0000015cu, 0x000200f8u, 0x000000ffu, 0x0008004fu, 0x00000010u, 0x00000105u, 0x00000180u, 0x00000180u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x00000107u, 0x00000105u, 0x00000279u, 0x0004007cu, 0x00000101u, 0x00000108u, 0x00000107u, 0x000200f9u, 0x0000010du, 0x000200f8u, 0x0000010du, 0x000700f5u, 0x00000101u, 0x0000025du, 0x0000010au, 0x000000ffu, 0x00000260u, 0x00000110u, 0x000700f5u, 0x00000006u, 0x0000025cu, 0x00000066u, 0x000000ffu, 0x00000131u, 0x00000110u, 0x000500b3u, 0x0000002cu, 0x00000113u, 0x0000025cu, 0x00000023u, 0x000400f6u, 0x0000010fu, 0x00000110u, 0x00000000u, 0x000400fau, 0x00000113u, 0x0000010eu, 0x0000010fu, 0x000200f8u, 0x0000010eu, 0x000200f9u, 0x00000115u, 0x000200f8u, 0x00000115u, 0x000700f5u, 0x00000101u, 0x00000260u, 0x0000025du, 0x0000010eu, 0x0000012du, 0x00000116u, 0x000700f5u, 0x00000006u, 0x0000025eu, 0x00000066u, 0x0000010eu, 0x0000012fu, 0x00000116u, 0x000500b3u, 0x0000002cu, 0x0000011bu, 0x0000025eu, 0x0000006bu, 0x000400f6u, 0x00000117u, 0x00000116u, 0x00000000u, 0x000400fau, 0x0000011bu, 0x00000116u, 0x00000117u, 0x000200f8u, 0x00000116u, 0x00050050u, 0x00000007u, 0x0000011fu, 0x0000025eu, 0x0000025cu, 0x00050080u, 0x00000007u, 0x0000023fu, 0x00000052u, 0x0000011fu, 0x0007005fu, 0x0000000au, 0x00000240u, 0x0000017cu, 0x0000023fu, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x00000122u, 0x00000240u, 0x00000240u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x00000124u, 0x00000122u, 0x00000279u, 0x0004007cu, 0x00000101u, 0x00000125u, 0x00000124u, 0x00050082u, 0x00000101u, 0x00000128u, 0x00000125u, 0x00000108u, 0x0008000cu, 0x00000101u, 0x0000012bu, 0x00000001u, 0x0000002du, 0x00000128u, 0x00000129u, 0x0000012au, 0x00050080u, 0x00000101u, 0x0000012du, 0x00000260u, 0x0000012bu, 0x00050080u, 0x00000006u, 0x0000012fu, 0x0000025eu, 0x0000006bu, 0x000200f9u, 0x00000115u, 0x000200f8u, 0x00000117u, 0x000200f9u, 0x00000110u, 0x000200f8u, 0x00000110u, 0x00050080u, 0x00000006u, 0x00000131u, 0x0000025cu, 0x0000006bu, 0x000200f9u, 0x0000010du, 0x000200f8u, 0x0000010fu, 0x00050080u, 0x00000007u, 0x00000245u, 0x00000052u, 0x0000007au, 0x0007005fu, 0x0000000au, 0x00000246u, 0x0000017cu, 0x00000245u, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x00000134u, 0x00000246u, 0x00000246u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x00000136u, 0x00000134u, 0x00000279u, 0x0004007cu, 0x00000101u, 0x00000137u, 0x00000136u, 0x00050082u, 0x00000101u, 0x00000139u, 0x00000137u, 0x00000108u, 0x0008000cu, 0x00000101u, 0x0000013au, 0x00000001u, 0x0000002du, 0x00000139u, 0x00000129u, 0x0000012au, 0x00050080u, 0x00000101u, 0x0000013cu, 0x0000025du, 0x0000013au, 0x00050080u, 0x00000007u, 0x0000024bu, 0x00000052u, 0x0000007eu, 0x0007005fu, 0x0000000au, 0x0000024cu, 0x0000017cu, 0x0000024bu, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x0000013fu, 0x0000024cu, 0x0000024cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x00000141u, 0x0000013fu, 0x00000279u, 0x0004007cu, 0x00000101u, 0x00000142u, 0x00000141u, 0x00050082u, 0x00000101u, 0x00000144u, 0x00000142u, 0x00000108u, 0x0008000cu, 0x00000101u, 0x00000145u, 0x00000001u, 0x0000002du, 0x00000144u, 0x00000129u, 0x0000012au, 0x00050080u, 0x00000101u, 0x00000147u, 0x0000013cu, 0x00000145u, 0x00050080u, 0x00000007u, 0x00000251u, 0x00000052u, 0x00000148u, 0x0007005fu, 0x0000000au, 0x00000252u, 0x0000017cu, 0x00000251u, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x0000014bu, 0x00000252u, 0x00000252u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x0000014du, 0x0000014bu, 0x00000279u, 0x0004007cu, 0x00000101u, 0x0000014eu, 0x0000014du, 0x00050082u, 0x00000101u, 0x00000150u, 0x0000014eu, 0x00000108u, 0x0008000cu, 0x00000101u, 0x00000151u, 0x00000001u, 0x0000002du, 0x00000150u, 0x00000129u, 0x0000012au, 0x00050080u, 0x00000101u, 0x00000153u, 0x00000147u, 0x00000151u, 0x000500c7u, 0x00000010u, 0x00000158u, 0x00000105u, 0x0000027eu, 0x0004007cu, 0x00000010u, 0x0000015au, 0x00000153u, 0x00050080u, 0x00000010u, 0x0000015bu, 0x00000158u, 0x0000015au, 0x000200f9u, 0x00000100u, 0x000200f8u, 0x0000015cu, 0x0008004fu, 0x00000010u, 0x0000015eu, 0x00000180u, 0x00000180u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000200f9u, 0x00000100u, 0x000200f8u, 0x00000100u, 0x000700f5u, 0x00000010u, 0x00000278u, 0x0000015bu, 0x0000010fu, 0x0000015eu, 0x0000015cu, 0x000200f9u, 0x0000005bu, 0x000200f8u, 0x0000005bu, 0x000700f5u, 0x00000010u, 0x00000277u, 0x000000f9u, 0x00000225u, 0x00000278u, 0x00000100u, 0x00050051u, 0x00000009u, 0x00000164u, 0x00000277u, 0x00000000u, 0x00050051u, 0x00000009u, 0x00000165u, 0x00000277u, 0x00000001u, 0x00050051u, 0x00000009u, 0x00000166u, 0x00000277u, 0x00000002u, 0x00070050u, 0x0000000au, 0x00000167u, 0x00000164u, 0x00000165u, 0x00000166u, 0x00000058u, 0x0003003eu, 0x00000160u, 0x00000167u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000362u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000047u, 0x000001deu, 0x000001e6u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00030047u, 0x0000001cu, 0x00000000u, 0x00040047u, 0x0000001cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000001cu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000047u, 0x0000000bu, 0x0000000fu, 0x00050048u, 0x0000004cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000004cu, 0x00000002u, 0x00040047u, 0x00000156u, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001deu, 0x0000001eu, 0x00000000u, 0x00040047u, 0x000001e6u, 0x0000001eu, 0x00000001u, 0x00030047u, 0x00000202u, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000002u, 0x00040015u, 0x00000009u, 0x00000020u, 0x00000000u, 0x00040017u, 0x0000000au, 0x00000009u, 0x00000004u, 0x00040017u, 0x00000010u, 0x00000009u, 0x00000003u, 0x00090019u, 0x0000001au, 0x00000009u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000001bu, 0x00000000u, 0x0000001au, 0x0004003bu, 0x0000001bu, 0x0000001cu, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000023u, 0x00000000u, 0x0004002bu, 0x00000009u, 0x00000027u, 0x00000003u, 0x0004002bu, 0x00000009u, 0x0000002bu, 0x00000007u, 0x00020014u, 0x0000002cu, 0x00030016u, 0x00000044u, 0x00000020u, 0x00040017u, 0x00000045u, 0x00000044u, 0x00000004u, 0x00040020u, 0x00000046u, 0x00000001u, 0x00000045u, 0x0004003bu, 0x00000046u, 0x00000047u, 0x00000001u, 0x00040017u, 0x00000048u, 0x00000044u, 0x00000002u, 0x0003001eu, 0x0000004cu, 0x00000007u, 0x00040020u, 0x0000004du, 0x00000009u, 0x0000004cu, 0x0004003bu, 0x0000004du, 0x0000004eu, 0x00000009u, 0x00040020u, 0x0000004fu, 0x00000009u, 0x00000007u, 0x0004002bu, 0x00000006u, 0x00000066u, 0xffffffffu, 0x0005002cu, 0x00000007u, 0x00000067u, 0x00000066u, 0x00000066u, 0x0004002bu, 0x00000006u, 0x0000006bu, 0x00000001u, 0x0005002cu, 0x00000007u, 0x0000006cu, 0x0000006bu, 0x00000066u, 0x0004002bu, 0x00000006u, 0x00000070u, 0xfffffffeu, 0x0005002cu, 0x00000007u, 0x00000071u, 0x00000070u, 0x00000023u, 0x0004002bu, 0x00000006u, 0x00000075u, 0x00000002u, 0x0005002cu, 0x00000007u, 0x00000076u, 0x00000075u, 0x00000023u, 0x0005002cu, 0x00000007u, 0x0000007au, 0x00000066u, 0x0000006bu, 0x0005002cu, 0x00000007u, 0x0000007eu, 0x0000006bu, 0x0000006bu, 0x00040017u, 0x00000106u, 0x0000002cu, 0x00000003u, 0x0004002bu, 0x00000009u, 0x00000124u, 0x00000001u, 0x0004002bu, 0x00000009u, 0x00000133u, 0x00000004u, 0x0004002bu, 0x00000009u, 0x00000139u, 0x000000ffu, 0x00040032u, 0x00000006u, 0x00000156u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000157u, 0x00010000u, 0x00060034u, 0x00000006u, 0x00000158u, 0x000000c7u, 0x00000156u, 0x00000157u, 0x00060034u, 0x0000002cu, 0x00000159u, 0x000000abu, 0x00000158u, 0x00000023u, 0x00040017u, 0x0000015cu, 0x00000006u, 0x00000003u, 0x0006002cu, 0x0000015cu, 0x00000165u, 0x00000023u, 0x00000023u, 0x00000023u, 0x0006002cu, 0x0000015cu, 0x00000184u, 0x00000066u, 0x00000066u, 0x00000066u, 0x0006002cu, 0x0000015cu, 0x00000185u, 0x0000006bu, 0x0000006bu, 0x0000006bu, 0x0005002cu, 0x00000007u, 0x000001a5u, 0x00000023u, 0x0000006bu, 0x0004002bu, 0x00000009u, 0x000001b3u, 0x000000f8u, 0x0005002cu, 0x00000007u, 0x000001b9u, 0x00000066u, 0x00000023u, 0x0005002cu, 0x00000007u, 0x000001c5u, 0x0000006bu, 0x00000023u, 0x00040020u, 0x000001ddu, 0x00000003u, 0x0000000au, 0x0004003bu, 0x000001ddu, 0x000001deu, 0x00000003u, 0x0004003bu, 0x000001ddu, 0x000001e6u, 0x00000003u, 0x0006002cu, 0x00000010u, 0x0000035cu, 0x00000027u, 0x00000027u, 0x00000027u, 0x0006002cu, 0x00000010u, 0x0000035eu, 0x00000124u, 0x00000124u, 0x00000124u, 0x0006002cu, 0x00000010u, 0x0000035fu, 0x00000133u, 0x00000133u, 0x00000133u, 0x0006002cu, 0x00000010u, 0x00000360u, 0x00000139u, 0x00000139u, 0x00000139u, 0x0006002cu, 0x00000010u, 0x00000361u, 0x000001b3u, 0x000001b3u, 0x000001b3u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000045u, 0x00000049u, 0x00000047u, 0x0007004fu, 0x00000048u, 0x0000004au, 0x00000049u, 0x00000049u, 0x00000000u, 0x00000001u, 0x0004006eu, 0x00000007u, 0x0000004bu, 0x0000004au, 0x00050041u, 0x0000004fu, 0x00000050u, 0x0000004eu, 0x00000023u, 0x0004003du, 0x00000007u, 0x00000051u, 0x00000050u, 0x00050080u, 0x00000007u, 0x00000052u, 0x0000004bu, 0x00000051u, 0x0004003du, 0x0000001au, 0x00000202u, 0x0000001cu, 0x0007005fu, 0x0000000au, 0x00000206u, 0x00000202u, 0x00000052u, 0x00000002u, 0x00000023u, 0x00050051u, 0x00000009u, 0x00000058u, 0x00000206u, 0x00000003u, 0x000500abu, 0x0000002cu, 0x00000059u, 0x00000058u, 0x0000002bu, 0x000300f7u, 0x0000005bu, 0x00000000u, 0x000400fau, 0x00000059u, 0x0000005au, 0x00000155u, 0x000200f8u, 0x0000005au, 0x0008004fu, 0x00000010u, 0x0000005eu, 0x00000206u, 0x00000206u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050080u, 0x00000007u, 0x0000020bu, 0x00000052u, 0x00000067u, 0x0007005fu, 0x0000000au, 0x0000020cu, 0x00000202u, 0x0000020bu, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x00000211u, 0x00000052u, 0x0000006cu, 0x0007005fu, 0x0000000au, 0x00000212u, 0x00000202u, 0x00000211u, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x00000217u, 0x00000052u, 0x00000071u, 0x0007005fu, 0x0000000au, 0x00000218u, 0x00000202u, 0x00000217u, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x0000021du, 0x00000052u, 0x00000076u, 0x0007005fu, 0x0000000au, 0x0000021eu, 0x00000202u, 0x0000021du, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x00000223u, 0x00000052u, 0x0000007au, 0x0007005fu, 0x0000000au, 0x00000224u, 0x00000202u, 0x00000223u, 0x00000002u, 0x00000023u, 0x00050080u, 0x00000007u, 0x00000229u, 0x00000052u, 0x0000007eu, 0x0007005fu, 0x0000000au, 0x0000022au, 0x00000202u, 0x00000229u, 0x00000002u, 0x00000023u, 0x00050051u, 0x00000009u, 0x0000022cu, 0x0000020cu, 0x00000003u, 0x000500aau, 0x0000002cu, 0x0000022du, 0x0000022cu, 0x0000002bu, 0x000300f7u, 0x0000022eu, 0x00000000u, 0x000400fau, 0x0000022du, 0x0000022fu, 0x0000022eu, 0x000200f8u, 0x0000022fu, 0x0008004fu, 0x00000010u, 0x00000232u, 0x0000020cu, 0x0000020cu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x00000234u, 0x00000001u, 0x00000029u, 0x00000232u, 0x0000005eu, 0x0007000cu, 0x00000010u, 0x00000235u, 0x00000001u, 0x00000026u, 0x0000005eu, 0x00000234u, 0x0007000cu, 0x00000010u, 0x0000023au, 0x00000001u, 0x00000026u, 0x00000232u, 0x0000005eu, 0x0007000cu, 0x00000010u, 0x0000023bu, 0x00000001u, 0x00000029u, 0x0000005eu, 0x0000023au, 0x000200f9u, 0x0000022eu, 0x000200f8u, 0x0000022eu, 0x000700f5u, 0x00000010u, 0x0000032bu, 0x0000005eu, 0x0000005au, 0x0000023bu, 0x0000022fu, 0x000700f5u, 0x00000010u, 0x0000032au, 0x0000005eu, 0x0000005au, 0x00000235u, 0x0000022fu, 0x000700f5u, 0x00000010u, 0x00000329u, 0x0000005eu, 0x0000005au, 0x00000234u, 0x0000022fu, 0x000700f5u, 0x00000010u, 0x00000328u, 0x0000005eu, 0x0000005au, 0x0000023au, 0x0000022fu, 0x00050051u, 0x00000009u, 0x00000245u, 0x00000212u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x00000246u, 0x00000245u, 0x0000002bu, 0x000300f7u, 0x00000247u, 0x00000000u, 0x000400fau, 0x00000246u, 0x00000248u, 0x00000247u, 0x000200f8u, 0x00000248u, 0x0008004fu, 0x00000010u, 0x0000024bu, 0x00000212u, 0x00000212u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x0000024du, 0x00000001u, 0x00000029u, 0x0000024bu, 0x00000328u, 0x0007000cu, 0x00000010u, 0x0000024eu, 0x00000001u, 0x00000026u, 0x0000032au, 0x0000024du, 0x0007000cu, 0x00000010u, 0x00000253u, 0x00000001u, 0x00000026u, 0x0000024bu, 0x00000329u, 0x0007000cu, 0x00000010u, 0x00000254u, 0x00000001u, 0x00000029u, 0x0000032bu, 0x00000253u, 0x0007000cu, 0x00000010u, 0x00000258u, 0x00000001u, 0x00000026u, 0x0000024bu, 0x00000328u, 0x0007000cu, 0x00000010u, 0x0000025cu, 0x00000001u, 0x00000029u, 0x0000024bu, 0x00000329u, 0x000200f9u, 0x00000247u, 0x000200f8u, 0x00000247u, 0x000700f5u, 0x00000010u, 0x0000032fu, 0x0000032bu, 0x0000022eu, 0x00000254u, 0x00000248u, 0x000700f5u, 0x00000010u, 0x0000032eu, 0x0000032au, 0x0000022eu, 0x0000024eu, 0x00000248u, 0x000700f5u, 0x00000010u, 0x0000032du, 0x00000329u, 0x0000022eu, 0x0000025cu, 0x00000248u, 0x000700f5u, 0x00000010u, 0x0000032cu, 0x00000328u, 0x0000022eu, 0x00000258u, 0x00000248u, 0x00050051u, 0x00000009u, 0x0000025eu, 0x00000218u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x0000025fu, 0x0000025eu, 0x0000002bu, 0x000300f7u, 0x00000260u, 0x00000000u, 0x000400fau, 0x0000025fu, 0x00000261u, 0x00000260u, 0x000200f8u, 0x00000261u, 0x0008004fu, 0x00000010u, 0x00000264u, 0x00000218u, 0x00000218u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x00000266u, 0x00000001u, 0x00000029u, 0x00000264u, 0x0000032cu, 0x0007000cu, 0x00000010u, 0x00000267u, 0x00000001u, 0x00000026u, 0x0000032eu, 0x00000266u, 0x0007000cu, 0x00000010u, 0x0000026cu, 0x00000001u, 0x00000026u, 0x00000264u, 0x0000032du, 0x0007000cu, 0x00000010u, 0x0000026du, 0x00000001u, 0x00000029u, 0x0000032fu, 0x0000026cu, 0x0007000cu, 0x00000010u, 0x00000271u, 0x00000001u, 0x00000026u, 0x00000264u, 0x0000032cu, 0x0007000cu, 0x00000010u, 0x00000275u, 0x00000001u, 0x00000029u, 0x00000264u, 0x0000032du, 0x000200f9u, 0x00000260u, 0x000200f8u, 0x00000260u, 0x000700f5u, 0x00000010u, 0x00000333u, 0x0000032fu, 0x00000247u, 0x0000026du, 0x00000261u, 0x000700f5u, 0x00000010u, 0x00000332u, 0x0000032eu, 0x00000247u, 0x00000267u, 0x00000261u, 0x000700f5u, 0x00000010u, 0x00000331u, 0x0000032du, 0x00000247u, 0x00000275u, 0x00000261u, 0x000700f5u, 0x00000010u, 0x00000330u, 0x0000032cu, 0x00000247u, 0x00000271u, 0x00000261u, 0x00050051u, 0x00000009u, 0x00000277u, 0x0000021eu, 0x00000003u, 0x000500aau, 0x0000002cu, 0x00000278u, 0x00000277u, 0x0000002bu, 0x000300f7u, 0x00000279u, 0x00000000u, 0x000400fau, 0x00000278u, 0x0000027au, 0x00000279u, 0x000200f8u, 0x0000027au, 0x0008004fu, 0x00000010u, 0x0000027du, 0x0000021eu, 0x0000021eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x0000027fu, 0x00000001u, 0x00000029u, 0x0000027du, 0x00000330u, 0x0007000cu, 0x00000010u, 0x00000280u, 0x00000001u, 0x00000026u, 0x00000332u, 0x0000027fu, 0x0007000cu, 0x00000010u, 0x00000285u, 0x00000001u, 0x00000026u, 0x0000027du, 0x00000331u, 0x0007000cu, 0x00000010u, 0x00000286u, 0x00000001u, 0x00000029u, 0x00000333u, 0x00000285u, 0x0007000cu, 0x00000010u, 0x0000028au, 0x00000001u, 0x00000026u, 0x0000027du, 0x00000330u, 0x0007000cu, 0x00000010u, 0x0000028eu, 0x00000001u, 0x00000029u, 0x0000027du, 0x00000331u, 0x000200f9u, 0x00000279u, 0x000200f8u, 0x00000279u, 0x000700f5u, 0x00000010u, 0x00000337u, 0x00000333u, 0x00000260u, 0x00000286u, 0x0000027au, 0x000700f5u, 0x00000010u, 0x00000336u, 0x00000332u, 0x00000260u, 0x00000280u, 0x0000027au, 0x000700f5u, 0x00000010u, 0x00000335u, 0x00000331u, 0x00000260u, 0x0000028eu, 0x0000027au, 0x000700f5u, 0x00000010u, 0x00000334u, 0x00000330u, 0x00000260u, 0x0000028au, 0x0000027au, 0x00050051u, 0x00000009u, 0x00000290u, 0x00000224u, 0x00000003u, 0x000500aau, 0x0000002cu, 0x00000291u, 0x00000290u, 0x0000002bu, 0x000300f7u, 0x00000292u, 0x00000000u, 0x000400fau, 0x00000291u, 0x00000293u, 0x00000292u, 0x000200f8u, 0x00000293u, 0x0008004fu, 0x00000010u, 0x00000296u, 0x00000224u, 0x00000224u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x00000298u, 0x00000001u, 0x00000029u, 0x00000296u, 0x00000334u, 0x0007000cu, 0x00000010u, 0x00000299u, 0x00000001u, 0x00000026u, 0x00000336u, 0x00000298u, 0x0007000cu, 0x00000010u, 0x0000029eu, 0x00000001u, 0x00000026u, 0x00000296u, 0x00000335u, 0x0007000cu, 0x00000010u, 0x0000029fu, 0x00000001u, 0x00000029u, 0x00000337u, 0x0000029eu, 0x0007000cu, 0x00000010u, 0x000002a3u, 0x00000001u, 0x00000026u, 0x00000296u, 0x00000334u, 0x0007000cu, 0x00000010u, 0x000002a7u, 0x00000001u, 0x00000029u, 0x00000296u, 0x00000335u, 0x000200f9u, 0x00000292u, 0x000200f8u, 0x00000292u, 0x000700f5u, 0x00000010u, 0x0000033bu, 0x00000337u, 0x00000279u, 0x0000029fu, 0x00000293u, 0x000700f5u, 0x00000010u, 0x0000033au, 0x00000336u, 0x00000279u, 0x00000299u, 0x00000293u, 0x000700f5u, 0x00000010u, 0x00000339u, 0x00000335u, 0x00000279u, 0x000002a7u, 0x00000293u, 0x000700f5u, 0x00000010u, 0x00000338u, 0x00000334u, 0x00000279u, 0x000002a3u, 0x00000293u, 0x00050051u, 0x00000009u, 0x000002a9u, 0x0000022au, 0x00000003u, 0x000500aau, 0x0000002cu, 0x000002aau, 0x000002a9u, 0x0000002bu, 0x000300f7u, 0x000002abu, 0x00000000u, 0x000400fau, 0x000002aau, 0x000002acu, 0x000002abu, 0x000200f8u, 0x000002acu, 0x0008004fu, 0x00000010u, 0x000002afu, 0x0000022au, 0x0000022au, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000002b1u, 0x00000001u, 0x00000029u, 0x000002afu, 0x00000338u, 0x0007000cu, 0x00000010u, 0x000002b2u, 0x00000001u, 0x00000026u, 0x0000033au, 0x000002b1u, 0x0007000cu, 0x00000010u, 0x000002b7u, 0x00000001u, 0x00000026u, 0x000002afu, 0x00000339u, 0x0007000cu, 0x00000010u, 0x000002b8u, 0x00000001u, 0x00000029u, 0x0000033bu, 0x000002b7u, 0x0007000cu, 0x00000010u, 0x000002bcu, 0x00000001u, 0x00000026u, 0x000002afu, 0x00000338u, 0x0007000cu, 0x00000010u, 0x000002c0u, 0x00000001u, 0x00000029u, 0x000002afu, 0x00000339u, 0x000200f9u, 0x000002abu, 0x000200f8u, 0x000002abu, 0x000700f5u, 0x00000010u, 0x0000033fu, 0x0000033bu, 0x00000292u, 0x000002b8u, 0x000002acu, 0x000700f5u, 0x00000010u, 0x0000033eu, 0x0000033au, 0x00000292u, 0x000002b2u, 0x000002acu, 0x000700f5u, 0x00000010u, 0x0000033du, 0x00000339u, 0x00000292u, 0x000002c0u, 0x000002acu, 0x000700f5u, 0x00000010u, 0x0000033cu, 0x00000338u, 0x00000292u, 0x000002bcu, 0x000002acu, 0x000300f7u, 0x000002c4u, 0x00000000u, 0x000400fau, 0x0000025fu, 0x000002c5u, 0x000002c4u, 0x000200f8u, 0x000002c5u, 0x0008004fu, 0x00000010u, 0x000002c8u, 0x00000218u, 0x00000218u, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000002cau, 0x00000001u, 0x00000029u, 0x000002c8u, 0x00000334u, 0x0007000cu, 0x00000010u, 0x000002cbu, 0x00000001u, 0x00000026u, 0x00000336u, 0x000002cau, 0x0007000cu, 0x00000010u, 0x000002d0u, 0x00000001u, 0x00000026u, 0x000002c8u, 0x00000335u, 0x0007000cu, 0x00000010u, 0x000002d1u, 0x00000001u, 0x00000029u, 0x00000337u, 0x000002d0u, 0x0007000cu, 0x00000010u, 0x000002d5u, 0x00000001u, 0x00000026u, 0x000002c8u, 0x00000334u, 0x0007000cu, 0x00000010u, 0x000002d9u, 0x00000001u, 0x00000029u, 0x000002c8u, 0x00000335u, 0x000200f9u, 0x000002c4u, 0x000200f8u, 0x000002c4u, 0x000700f5u, 0x00000010u, 0x0000034bu, 0x00000337u, 0x000002abu, 0x000002d1u, 0x000002c5u, 0x000700f5u, 0x00000010u, 0x0000034au, 0x00000336u, 0x000002abu, 0x000002cbu, 0x000002c5u, 0x000700f5u, 0x00000010u, 0x00000349u, 0x00000335u, 0x000002abu, 0x000002d9u, 0x000002c5u, 0x000700f5u, 0x00000010u, 0x00000348u, 0x00000334u, 0x000002abu, 0x000002d5u, 0x000002c5u, 0x000300f7u, 0x000002ddu, 0x00000000u, 0x000400fau, 0x00000278u, 0x000002deu, 0x000002ddu, 0x000200f8u, 0x000002deu, 0x0008004fu, 0x00000010u, 0x000002e1u, 0x0000021eu, 0x0000021eu, 0x00000000u, 0x00000001u, 0x00000002u, 0x0007000cu, 0x00000010u, 0x000002e3u, 0x00000001u, 0x00000029u, 0x000002e1u, 0x00000348u, 0x0007000cu, 0x00000010u, 0x000002e4u, 0x00000001u, 0x00000026u, 0x0000034au, 0x000002e3u, 0x0007000cu, 0x00000010u, 0x000002e9u, 0x00000001u, 0x00000026u, 0x000002e1u, 0x00000349u, 0x0007000cu, 0x00000010u, 0x000002eau, 0x00000001u, 0x00000029u, 0x0000034bu, 0x000002e9u, 0x0007000cu, 0x00000010u, 0x000002eeu, 0x00000001u, 0x00000026u, 0x000002e1u, 0x00000348u, 0x0007000cu, 0x00000010u, 0x000002f2u, 0x00000001u, 0x00000029u, 0x000002e1u, 0x00000349u, 0x000200f9u, 0x000002ddu, 0x000200f8u, 0x000002ddu, 0x000700f5u, 0x00000010u, 0x0000034fu, 0x0000034bu, 0x000002c4u, 0x000002eau, 0x000002deu, 0x000700f5u, 0x00000010u, 0x0000034eu, 0x0000034au, 0x000002c4u, 0x000002e4u, 0x000002deu, 0x000700f5u, 0x00000010u, 0x0000034du, 0x00000349u, 0x000002c4u, 0x000002f2u, 0x000002deu, 0x000700f5u, 0x00000010u, 0x0000034cu, 0x00000348u, 0x000002c4u, 0x000002eeu, 0x000002deu, 0x000500aau, 0x00000106u, 0x00000107u, 0x0000005eu, 0x0000033cu, 0x000600a9u, 0x00000010u, 0x00000108u, 0x00000107u, 0x0000033cu, 0x0000033eu, 0x000500aau, 0x00000106u, 0x0000010eu, 0x0000005eu, 0x0000033du, 0x000600a9u, 0x00000010u, 0x0000010fu, 0x0000010eu, 0x0000033du, 0x0000033fu, 0x000500aau, 0x00000106u, 0x00000115u, 0x0000005eu, 0x0000034cu, 0x000600a9u, 0x00000010u, 0x00000116u, 0x00000115u, 0x0000034cu, 0x0000034eu, 0x000500aau, 0x00000106u, 0x0000011cu, 0x0000005eu, 0x0000034du, 0x000600a9u, 0x00000010u, 0x0000011du, 0x0000011cu, 0x0000034du, 0x0000034fu, 0x00050080u, 0x00000010u, 0x00000121u, 0x00000108u, 0x0000010fu, 0x000500c4u, 0x00000010u, 0x00000126u, 0x0000005eu, 0x0000035eu, 0x00050082u, 0x00000010u, 0x00000127u, 0x00000121u, 0x00000126u, 0x00050082u, 0x00000009u, 0x0000012bu, 0x0000002bu, 0x00000058u, 0x00060050u, 0x00000010u, 0x00000131u, 0x0000012bu, 0x0000012bu, 0x0000012bu, 0x00050084u, 0x00000010u, 0x00000132u, 0x00000127u, 0x00000131u, 0x00050080u, 0x00000010u, 0x00000135u, 0x00000132u, 0x0000035fu, 0x000500c2u, 0x00000010u, 0x00000137u, 0x00000135u, 0x0000035cu, 0x00050080u, 0x00000010u, 0x00000138u, 0x0000005eu, 0x00000137u, 0x000500c7u, 0x00000010u, 0x0000013cu, 0x00000138u, 0x00000360u, 0x00050080u, 0x00000010u, 0x00000140u, 0x00000116u, 0x0000011du, 0x00050082u, 0x00000010u, 0x00000145u, 0x00000140u, 0x00000126u, 0x00050084u, 0x00000010u, 0x0000014cu, 0x00000145u, 0x00000131u, 0x00050080u, 0x00000010u, 0x0000014eu, 0x0000014cu, 0x0000035fu, 0x000500c2u, 0x00000010u, 0x00000150u, 0x0000014eu, 0x0000035cu, 0x00050080u, 0x00000010u, 0x00000151u, 0x0000005eu, 0x00000150u, 0x000500c7u, 0x00000010u, 0x00000154u, 0x00000151u, 0x00000360u, 0x000200f9u, 0x0000005bu, 0x000200f8u, 0x00000155u, 0x000300f7u, 0x0000015bu, 0x00000000u, 0x000400fau, 0x00000159u, 0x0000015au, 0x000001d8u, 0x000200f8u, 0x0000015au, 0x0008004fu, 0x00000010u, 0x00000160u, 0x00000206u, 0x00000206u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x00000162u, 0x00000160u, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x00000163u, 0x00000162u, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x00000168u, 0x000700f5u, 0x0000015cu, 0x00000324u, 0x00000165u, 0x0000015au, 0x00000327u, 0x0000016bu, 0x000700f5u, 0x00000006u, 0x00000323u, 0x00000066u, 0x0000015au, 0x0000018cu, 0x0000016bu, 0x000500b3u, 0x0000002cu, 0x0000016eu, 0x00000323u, 0x00000023u, 0x000400f6u, 0x0000016au, 0x0000016bu, 0x00000000u, 0x000400fau, 0x0000016eu, 0x00000169u, 0x0000016au, 0x000200f8u, 0x00000169u, 0x000200f9u, 0x00000170u, 0x000200f8u, 0x00000170u, 0x000700f5u, 0x0000015cu, 0x00000327u, 0x00000324u, 0x00000169u, 0x00000188u, 0x00000171u, 0x000700f5u, 0x00000006u, 0x00000325u, 0x00000066u, 0x00000169u, 0x0000018au, 0x00000171u, 0x000500b3u, 0x0000002cu, 0x00000176u, 0x00000325u, 0x0000006bu, 0x000400f6u, 0x00000172u, 0x00000171u, 0x00000000u, 0x000400fau, 0x00000176u, 0x00000171u, 0x00000172u, 0x000200f8u, 0x00000171u, 0x00050050u, 0x00000007u, 0x0000017au, 0x00000325u, 0x00000323u, 0x00050080u, 0x00000007u, 0x000002f7u, 0x00000052u, 0x0000017au, 0x0007005fu, 0x0000000au, 0x000002f8u, 0x00000202u, 0x000002f7u, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x0000017du, 0x000002f8u, 0x000002f8u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x0000017fu, 0x0000017du, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x00000180u, 0x0000017fu, 0x00050082u, 0x0000015cu, 0x00000183u, 0x00000180u, 0x00000163u, 0x0008000cu, 0x0000015cu, 0x00000186u, 0x00000001u, 0x0000002du, 0x00000183u, 0x00000184u, 0x00000185u, 0x00050080u, 0x0000015cu, 0x00000188u, 0x00000327u, 0x00000186u, 0x00050080u, 0x00000006u, 0x0000018au, 0x00000325u, 0x0000006bu, 0x000200f9u, 0x00000170u, 0x000200f8u, 0x00000172u, 0x000200f9u, 0x0000016bu, 0x000200f8u, 0x0000016bu, 0x00050080u, 0x00000006u, 0x0000018cu, 0x00000323u, 0x0000006bu, 0x000200f9u, 0x00000168u, 0x000200f8u, 0x0000016au, 0x00050080u, 0x00000007u, 0x000002fdu, 0x00000052u, 0x0000007au, 0x0007005fu, 0x0000000au, 0x000002feu, 0x00000202u, 0x000002fdu, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x00000191u, 0x000002feu, 0x000002feu, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x00000193u, 0x00000191u, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x00000194u, 0x00000193u, 0x00050082u, 0x0000015cu, 0x00000196u, 0x00000194u, 0x00000163u, 0x0008000cu, 0x0000015cu, 0x00000197u, 0x00000001u, 0x0000002du, 0x00000196u, 0x00000184u, 0x00000185u, 0x00050080u, 0x0000015cu, 0x00000199u, 0x00000324u, 0x00000197u, 0x00050080u, 0x00000007u, 0x00000303u, 0x00000052u, 0x0000007eu, 0x0007005fu, 0x0000000au, 0x00000304u, 0x00000202u, 0x00000303u, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x0000019cu, 0x00000304u, 0x00000304u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x0000019eu, 0x0000019cu, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x0000019fu, 0x0000019eu, 0x00050082u, 0x0000015cu, 0x000001a1u, 0x0000019fu, 0x00000163u, 0x0008000cu, 0x0000015cu, 0x000001a2u, 0x00000001u, 0x0000002du, 0x000001a1u, 0x00000184u, 0x00000185u, 0x00050080u, 0x0000015cu, 0x000001a4u, 0x00000199u, 0x000001a2u, 0x00050080u, 0x00000007u, 0x00000309u, 0x00000052u, 0x000001a5u, 0x0007005fu, 0x0000000au, 0x0000030au, 0x00000202u, 0x00000309u, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x000001a8u, 0x0000030au, 0x0000030au, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x000001aau, 0x000001a8u, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x000001abu, 0x000001aau, 0x00050082u, 0x0000015cu, 0x000001adu, 0x000001abu, 0x00000163u, 0x0008000cu, 0x0000015cu, 0x000001aeu, 0x00000001u, 0x0000002du, 0x000001adu, 0x00000184u, 0x00000185u, 0x00050080u, 0x0000015cu, 0x000001b0u, 0x000001a4u, 0x000001aeu, 0x000500c7u, 0x00000010u, 0x000001b5u, 0x00000160u, 0x00000361u, 0x0004007cu, 0x00000010u, 0x000001b7u, 0x000001b0u, 0x00050080u, 0x00000010u, 0x000001b8u, 0x000001b5u, 0x000001b7u, 0x00050080u, 0x00000007u, 0x0000030fu, 0x00000052u, 0x000001b9u, 0x0007005fu, 0x0000000au, 0x00000310u, 0x00000202u, 0x0000030fu, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x000001bcu, 0x00000310u, 0x00000310u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x000001beu, 0x000001bcu, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x000001bfu, 0x000001beu, 0x00050082u, 0x0000015cu, 0x000001c1u, 0x000001bfu, 0x00000163u, 0x0008000cu, 0x0000015cu, 0x000001c2u, 0x00000001u, 0x0000002du, 0x000001c1u, 0x00000184u, 0x00000185u, 0x00050080u, 0x0000015cu, 0x000001c4u, 0x00000324u, 0x000001c2u, 0x00050080u, 0x00000007u, 0x00000315u, 0x00000052u, 0x000001c5u, 0x0007005fu, 0x0000000au, 0x00000316u, 0x00000202u, 0x00000315u, 0x00000002u, 0x00000023u, 0x0008004fu, 0x00000010u, 0x000001c8u, 0x00000316u, 0x00000316u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000500c2u, 0x00000010u, 0x000001cau, 0x000001c8u, 0x0000035cu, 0x0004007cu, 0x0000015cu, 0x000001cbu, 0x000001cau, 0x00050082u, 0x0000015cu, 0x000001cdu, 0x000001cbu, 0x00000163u, 0x0008000cu, 0x0000015cu, 0x000001ceu, 0x00000001u, 0x0000002du, 0x000001cdu, 0x00000184u, 0x00000185u, 0x00050080u, 0x0000015cu, 0x000001d0u, 0x000001c4u, 0x000001ceu, 0x0004007cu, 0x00000010u, 0x000001d6u, 0x000001d0u, 0x00050080u, 0x00000010u, 0x000001d7u, 0x000001b5u, 0x000001d6u, 0x000200f9u, 0x0000015bu, 0x000200f8u, 0x000001d8u, 0x0008004fu, 0x00000010u, 0x000001dau, 0x00000206u, 0x00000206u, 0x00000000u, 0x00000001u, 0x00000002u, 0x000200f9u, 0x0000015bu, 0x000200f8u, 0x0000015bu, 0x000700f5u, 0x00000010u, 0x0000035bu, 0x000001d7u, 0x0000016au, 0x000001dau, 0x000001d8u, 0x000700f5u, 0x00000010u, 0x00000359u, 0x000001b8u, 0x0000016au, 0x000001dau, 0x000001d8u, 0x000200f9u, 0x0000005bu, 0x000200f8u, 0x0000005bu, 0x000700f5u, 0x00000010u, 0x0000035au, 0x00000154u, 0x000002ddu, 0x0000035bu, 0x0000015bu, 0x000700f5u, 0x00000010u, 0x00000358u, 0x0000013cu, 0x000002ddu, 0x00000359u, 0x0000015bu, 0x00050051u, 0x00000009u, 0x000001e2u, 0x00000358u, 0x00000000u, 0x00050051u, 0x00000009u, 0x000001e3u, 0x00000358u, 0x00000001u, 0x00050051u, 0x00000009u, 0x000001e4u, 0x00000358u, 0x00000002u, 0x00070050u, 0x0000000au, 0x000001e5u, 0x000001e2u, 0x000001e3u, 0x000001e4u, 0x00000058u, 0x0003003eu, 0x000001deu, 0x000001e5u, 0x00050051u, 0x00000009u, 0x000001eau, 0x0000035au, 0x00000000u, 0x00050051u, 0x00000009u, 0x000001ebu, 0x0000035au, 0x00000001u, 0x00050051u, 0x00000009u, 0x000001ecu, 0x0000035au, 0x00000002u, 0x00070050u, 0x0000000au, 0x000001edu, 0x000001eau, 0x000001ebu, 0x000001ecu, 0x00000058u, 0x0003003eu, 0x000001e6u, 0x000001edu, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000028u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000fu, 0x00000019u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00040047u, 0x0000000cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000000cu, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000000fu, 0x0000000bu, 0x0000000fu, 0x00040047u, 0x00000019u, 0x0000001eu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00090019u, 0x0000000au, 0x00000006u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x00040020u, 0x0000000bu, 0x00000000u, 0x0000000au, 0x0004003bu, 0x0000000bu, 0x0000000cu, 0x00000000u, 0x00040020u, 0x0000000eu, 0x00000001u, 0x00000007u, 0x0004003bu, 0x0000000eu, 0x0000000fu, 0x00000001u, 0x00040017u, 0x00000010u, 0x00000006u, 0x00000002u, 0x00040015u, 0x00000013u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000014u, 0x00000013u, 0x00000002u, 0x0004002bu, 0x00000013u, 0x00000016u, 0x00000000u, 0x00040020u, 0x00000018u, 0x00000003u, 0x00000007u, 0x0004003bu, 0x00000018u, 0x00000019u, 0x00000003u, 0x00040017u, 0x0000001au, 0x00000006u, 0x00000003u, 0x0004002bu, 0x00000006u, 0x00000023u, 0x00000000u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x0000000au, 0x0000000du, 0x0000000cu, 0x0004003du, 0x00000007u, 0x00000011u, 0x0000000fu, 0x0007004fu, 0x00000010u, 0x00000012u, 0x00000011u, 0x00000011u, 0x00000000u, 0x00000001u, 0x0004006eu, 0x00000014u, 0x00000015u, 0x00000012u, 0x0007005fu, 0x00000007u, 0x00000017u, 0x0000000du, 0x00000015u, 0x00000002u, 0x00000016u, 0x0008004fu, 0x0000001au, 0x0000001cu, 0x00000017u, 0x00000017u, 0x00000000u, 0x00000001u, 0x00000002u, 0x00050051u, 0x00000006u, 0x00000021u, 0x00000017u, 0x00000003u, 0x0005008eu, 0x0000001au, 0x00000022u, 0x0000001cu, 0x00000021u, 0x00050051u, 0x00000006u, 0x00000024u, 0x00000022u, 0x00000000u, 0x00050051u, 0x00000006u, 0x00000025u, 0x00000022u, 0x00000001u, 0x00050051u, 0x00000006u, 0x00000026u, 0x00000022u, 0x00000002u, 0x00070050u, 0x00000007u, 0x00000027u, 0x00000024u, 0x00000025u, 0x00000026u, 0x00000023u, 0x0003003eu, 0x00000019u, 0x00000027u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000155u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x000000b7u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000010u, 0x00000008u, 0x00000001u, 0x00040047u, 0x00000012u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000024u, 0x00000001u, 0x00000001u, 0x00050048u, 0x0000002eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000002eu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000002eu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000002eu, 0x00000003u, 0x00000023u, 0x00000010u, 0x00030047u, 0x0000002eu, 0x00000002u, 0x00040047u, 0x0000003cu, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000004au, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000004bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000004bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000004bu, 0x00000002u, 0x00040047u, 0x0000004du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000004du, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000007au, 0x00000006u, 0x00000002u, 0x00040048u, 0x0000007bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000007bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000007bu, 0x00000002u, 0x00040047u, 0x0000007du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000007du, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000086u, 0x00000006u, 0x00000001u, 0x00040048u, 0x00000087u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000087u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000087u, 0x00000002u, 0x00040047u, 0x00000089u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000089u, 0x00000021u, 0x00000002u, 0x00040047u, 0x000000b7u, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x000000d2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000d2u, 0x00000021u, 0x00000000u, 0x00030047u, 0x000000d2u, 0x00000019u, 0x00040047u, 0x000000d8u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000002u, 0x00040020u, 0x00000008u, 0x00000007u, 0x00000007u, 0x00040015u, 0x00000009u, 0x00000020u, 0x00000000u, 0x00040017u, 0x0000000au, 0x00000009u, 0x00000004u, 0x00040021u, 0x0000000bu, 0x0000000au, 0x00000008u, 0x0004002bu, 0x00000006u, 0x00000011u, 0x00000001u, 0x00040032u, 0x00000006u, 0x00000012u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000013u, 0x000000c4u, 0x00000011u, 0x00000012u, 0x00060034u, 0x00000006u, 0x00000014u, 0x00000082u, 0x00000013u, 0x00000011u, 0x00040020u, 0x0000001au, 0x00000007u, 0x00000006u, 0x0004002bu, 0x00000009u, 0x0000001cu, 0x00000001u, 0x0004002bu, 0x00000009u, 0x00000020u, 0x00000000u, 0x00040032u, 0x00000006u, 0x00000024u, 0x00000000u, 0x0004002bu, 0x00000006u, 0x00000025u, 0x00000003u, 0x00060034u, 0x00000006u, 0x00000026u, 0x000000c7u, 0x00000024u, 0x00000025u, 0x00020014u, 0x00000027u, 0x00060034u, 0x00000027u, 0x00000028u, 0x000000aau, 0x00000026u, 0x00000025u, 0x0006001eu, 0x0000002eu, 0x00000006u, 0x00000006u, 0x00000007u, 0x00000007u, 0x00040020u, 0x0000002fu, 0x00000009u, 0x0000002eu, 0x0004003bu, 0x0000002fu, 0x00000030u, 0x00000009u, 0x00040020u, 0x00000031u, 0x00000009u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000038u, 0x00000000u, 0x00040032u, 0x00000006u, 0x0000003cu, 0x00000000u, 0x00060034u, 0x00000006u, 0x0000003du, 0x00000082u, 0x0000003cu, 0x00000011u, 0x00060034u, 0x00000006u, 0x0000003eu, 0x000000c3u, 0x0000003du, 0x00000011u, 0x00060034u, 0x00000006u, 0x0000003fu, 0x000000c3u, 0x0000003eu, 0x00000011u, 0x0004002bu, 0x00000006u, 0x00000043u, 0x00000002u, 0x00060034u, 0x00000006u, 0x00000044u, 0x000000c3u, 0x0000003cu, 0x00000043u, 0x00040020u, 0x00000048u, 0x00000007u, 0x00000009u, 0x0003001du, 0x0000004au, 0x00000009u, 0x0003001eu, 0x0000004bu, 0x0000004au, 0x00040020u, 0x0000004cu, 0x0000000cu, 0x0000004bu, 0x0004003bu, 0x0000004cu, 0x0000004du, 0x0000000cu, 0x00040020u, 0x0000004fu, 0x0000000cu, 0x00000009u, 0x00040020u, 0x00000052u, 0x00000007u, 0x0000000au, 0x0004002bu, 0x00000009u, 0x00000056u, 0x00000018u, 0x0004002bu, 0x00000009u, 0x00000057u, 0x00000010u, 0x0004002bu, 0x00000009u, 0x00000058u, 0x00000008u, 0x0004002bu, 0x00000009u, 0x00000059u, 0x00000005u, 0x0007002cu, 0x0000000au, 0x0000005au, 0x00000056u, 0x00000057u, 0x00000058u, 0x00000059u, 0x0004002bu, 0x00000009u, 0x0000005cu, 0x000000ffu, 0x0004002bu, 0x00000009u, 0x0000005du, 0x00000007u, 0x0007002cu, 0x0000000au, 0x0000005eu, 0x0000005cu, 0x0000005cu, 0x0000005cu, 0x0000005du, 0x00060034u, 0x00000006u, 0x00000061u, 0x000000c7u, 0x00000024u, 0x00000025u, 0x00060034u, 0x00000027u, 0x00000062u, 0x000000aau, 0x00000061u, 0x00000043u, 0x00060034u, 0x00000006u, 0x00000074u, 0x000000c3u, 0x0000003cu, 0x00000011u, 0x00040015u, 0x00000079u, 0x00000010u, 0x00000000u, 0x0003001du, 0x0000007au, 0x00000079u, 0x0003001eu, 0x0000007bu, 0x0000007au, 0x00040020u, 0x0000007cu, 0x0000000cu, 0x0000007bu, 0x0004003bu, 0x0000007cu, 0x0000007du, 0x0000000cu, 0x00040020u, 0x00000080u, 0x0000000cu, 0x00000079u, 0x00040015u, 0x00000085u, 0x00000008u, 0x00000000u, 0x0003001du, 0x00000086u, 0x00000085u, 0x0003001eu, 0x00000087u, 0x00000086u, 0x00040020u, 0x00000088u, 0x0000000cu, 0x00000087u, 0x0004003bu, 0x00000088u, 0x00000089u, 0x0000000cu, 0x00040020u, 0x0000008bu, 0x0000000cu, 0x00000085u, 0x0004002bu, 0x00000009u, 0x00000092u, 0x000000f8u, 0x0004002bu, 0x00000009u, 0x00000096u, 0x00000003u, 0x0004002bu, 0x00000009u, 0x0000009bu, 0x00000002u, 0x0007002cu, 0x0000000au, 0x000000aau, 0x00000020u, 0x00000020u, 0x00000020u, 0x00000020u, 0x0004002bu, 0x00000006u, 0x000000abu, 0x00020000u, 0x00060034u, 0x00000006u, 0x000000acu, 0x000000c7u, 0x00000024u, 0x000000abu, 0x00060034u, 0x00000027u, 0x000000adu, 0x000000abu, 0x000000acu, 0x00000038u, 0x00050034u, 0x00000027u, 0x000000aeu, 0x000000a8u, 0x000000adu, 0x00040017u, 0x000000b5u, 0x00000009u, 0x00000003u, 0x00040020u, 0x000000b6u, 0x00000001u, 0x000000b5u, 0x0004003bu, 0x000000b6u, 0x000000b7u, 0x00000001u, 0x00040017u, 0x000000b8u, 0x00000009u, 0x00000002u, 0x00040020u, 0x000000bbu, 0x00000009u, 0x00000007u, 0x00040017u, 0x000000bfu, 0x00000027u, 0x00000002u, 0x00090019u, 0x000000d0u, 0x00000009u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000002u, 0x00000020u, 0x00040020u, 0x000000d1u, 0x00000000u, 0x000000d0u, 0x0004003bu, 0x000000d1u, 0x000000d2u, 0x00000000u, 0x0006002cu, 0x000000b5u, 0x000000d8u, 0x00000057u, 0x00000058u, 0x0000001cu, 0x0004002bu, 0x00000006u, 0x000000d9u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000dau, 0x00000008u, 0x0004002bu, 0x00000006u, 0x000000dbu, 0x00000010u, 0x0004002bu, 0x00000006u, 0x000000dcu, 0x00000040u, 0x0004002bu, 0x00000006u, 0x000000ddu, 0x00010000u, 0x0004002bu, 0x00000006u, 0x000000deu, 0x00040000u, 0x00060034u, 0x00000006u, 0x000000dfu, 0x000000c7u, 0x00000024u, 0x000000ddu, 0x00060034u, 0x00000027u, 0x000000e0u, 0x000000abu, 0x000000dfu, 0x00000038u, 0x00060034u, 0x00000006u, 0x000000e1u, 0x000000c7u, 0x00000024u, 0x000000deu, 0x00060034u, 0x00000027u, 0x000000e2u, 0x000000abu, 0x000000e1u, 0x00000038u, 0x00060034u, 0x00000006u, 0x000000e3u, 0x000000c7u, 0x00000024u, 0x000000dau, 0x00060034u, 0x00000027u, 0x000000e4u, 0x000000abu, 0x000000e3u, 0x00000038u, 0x00060034u, 0x00000006u, 0x000000e5u, 0x000000c7u, 0x00000024u, 0x000000d9u, 0x00060034u, 0x00000027u, 0x000000e6u, 0x000000abu, 0x000000e5u, 0x00000038u, 0x0003002au, 0x00000027u, 0x000000e9u, 0x00040020u, 0x000000eau, 0x00000007u, 0x00000027u, 0x00030029u, 0x00000027u, 0x000000ecu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000008u, 0x000000edu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000000eeu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000000efu, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f0u, 0x00000007u, 0x0004003bu, 0x00000052u, 0x000000f1u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x000000f2u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f3u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f4u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f5u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f6u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f7u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x000000f8u, 0x00000007u, 0x0004003bu, 0x00000052u, 0x000000f9u, 0x00000007u, 0x0005003bu, 0x000000eau, 0x000000ebu, 0x00000007u, 0x000000e9u, 0x0004003bu, 0x00000008u, 0x000000c5u, 0x00000007u, 0x0004003bu, 0x00000052u, 0x000000ccu, 0x00000007u, 0x0004003bu, 0x00000008u, 0x000000cdu, 0x00000007u, 0x000300f7u, 0x000000e7u, 0x00000000u, 0x000300fbu, 0x00000020u, 0x000000e8u, 0x000200f8u, 0x000000e8u, 0x0004003du, 0x000000b5u, 0x000000b9u, 0x000000b7u, 0x0007004fu, 0x000000b8u, 0x000000bau, 0x000000b9u, 0x000000b9u, 0x00000000u, 0x00000001u, 0x00050041u, 0x000000bbu, 0x000000bcu, 0x00000030u, 0x00000025u, 0x0004003du, 0x00000007u, 0x000000bdu, 0x000000bcu, 0x0004007cu, 0x000000b8u, 0x000000beu, 0x000000bdu, 0x000500aeu, 0x000000bfu, 0x000000c0u, 0x000000bau, 0x000000beu, 0x0004009au, 0x00000027u, 0x000000c1u, 0x000000c0u, 0x000300f7u, 0x000000c3u, 0x00000000u, 0x000400fau, 0x000000c1u, 0x000000c2u, 0x000000c3u, 0x000200f8u, 0x000000c2u, 0x0003003eu, 0x000000ebu, 0x000000ecu, 0x000200f9u, 0x000000e7u, 0x000200f8u, 0x000000c3u, 0x0004007cu, 0x00000007u, 0x000000c8u, 0x000000bau, 0x00050041u, 0x000000bbu, 0x000000c9u, 0x00000030u, 0x00000043u, 0x0004003du, 0x00000007u, 0x000000cau, 0x000000c9u, 0x00050080u, 0x00000007u, 0x000000cbu, 0x000000c8u, 0x000000cau, 0x0003003eu, 0x000000c5u, 0x000000cbu, 0x0003003eu, 0x000000cdu, 0x000000cbu, 0x0004003du, 0x00000007u, 0x000000fau, 0x000000cdu, 0x00050050u, 0x00000007u, 0x000000fbu, 0x00000014u, 0x00000014u, 0x000500c7u, 0x00000007u, 0x000000fcu, 0x000000fau, 0x000000fbu, 0x0003003eu, 0x000000edu, 0x000000fcu, 0x0004003du, 0x00000007u, 0x000000fdu, 0x000000cdu, 0x00050050u, 0x00000007u, 0x000000feu, 0x00000012u, 0x00000012u, 0x000500c3u, 0x00000007u, 0x000000ffu, 0x000000fdu, 0x000000feu, 0x0003003eu, 0x000000cdu, 0x000000ffu, 0x00050041u, 0x0000001au, 0x00000100u, 0x000000edu, 0x0000001cu, 0x0004003du, 0x00000006u, 0x00000101u, 0x00000100u, 0x00050084u, 0x00000006u, 0x00000102u, 0x00000101u, 0x00000013u, 0x00050041u, 0x0000001au, 0x00000103u, 0x000000edu, 0x00000020u, 0x0004003du, 0x00000006u, 0x00000104u, 0x00000103u, 0x00050080u, 0x00000006u, 0x00000105u, 0x00000102u, 0x00000104u, 0x0003003eu, 0x000000eeu, 0x00000105u, 0x000300f7u, 0x00000106u, 0x00000000u, 0x000400fau, 0x00000028u, 0x00000107u, 0x00000108u, 0x000200f8u, 0x00000107u, 0x00050041u, 0x0000001au, 0x00000109u, 0x000000cdu, 0x0000001cu, 0x0004003du, 0x00000006u, 0x0000010au, 0x00000109u, 0x00050041u, 0x00000031u, 0x0000010bu, 0x00000030u, 0x00000011u, 0x0004003du, 0x00000006u, 0x0000010cu, 0x0000010bu, 0x00050084u, 0x00000006u, 0x0000010du, 0x0000010au, 0x0000010cu, 0x00050041u, 0x0000001au, 0x0000010eu, 0x000000cdu, 0x00000020u, 0x0004003du, 0x00000006u, 0x0000010fu, 0x0000010eu, 0x00050080u, 0x00000006u, 0x00000110u, 0x0000010du, 0x0000010fu, 0x00050041u, 0x00000031u, 0x00000111u, 0x00000030u, 0x00000038u, 0x0004003du, 0x00000006u, 0x00000112u, 0x00000111u, 0x00050080u, 0x00000006u, 0x00000113u, 0x00000110u, 0x00000112u, 0x0003003eu, 0x000000efu, 0x00000113u, 0x000500c7u, 0x00000006u, 0x00000115u, 0x00000113u, 0x0000003fu, 0x0003003eu, 0x000000efu, 0x00000115u, 0x00050084u, 0x00000006u, 0x00000117u, 0x00000105u, 0x00000044u, 0x00050080u, 0x00000006u, 0x00000119u, 0x00000115u, 0x00000117u, 0x0003003eu, 0x000000efu, 0x00000119u, 0x00060041u, 0x0000004fu, 0x0000011bu, 0x0000004du, 0x00000038u, 0x00000119u, 0x0004003du, 0x00000009u, 0x0000011cu, 0x0000011bu, 0x0003003eu, 0x000000f0u, 0x0000011cu, 0x00070050u, 0x0000000au, 0x0000011eu, 0x0000011cu, 0x0000011cu, 0x0000011cu, 0x0000011cu, 0x000500c2u, 0x0000000au, 0x0000011fu, 0x0000011eu, 0x0000005au, 0x000500c7u, 0x0000000au, 0x00000120u, 0x0000011fu, 0x0000005eu, 0x0003003eu, 0x000000f1u, 0x00000120u, 0x000200f9u, 0x00000106u, 0x000200f8u, 0x00000108u, 0x000300f7u, 0x00000121u, 0x00000000u, 0x000400fau, 0x00000062u, 0x00000122u, 0x00000123u, 0x000200f8u, 0x00000122u, 0x00050041u, 0x0000001au, 0x00000124u, 0x000000cdu, 0x0000001cu, 0x0004003du, 0x00000006u, 0x00000125u, 0x00000124u, 0x00050041u, 0x00000031u, 0x00000126u, 0x00000030u, 0x00000011u, 0x0004003du, 0x00000006u, 0x00000127u, 0x00000126u, 0x00050084u, 0x00000006u, 0x00000128u, 0x00000125u, 0x00000127u, 0x00050041u, 0x0000001au, 0x00000129u, 0x000000cdu, 0x00000020u, 0x0004003du, 0x00000006u, 0x0000012au, 0x00000129u, 0x00050080u, 0x00000006u, 0x0000012bu, 0x00000128u, 0x0000012au, 0x00050041u, 0x00000031u, 0x0000012cu, 0x00000030u, 0x00000038u, 0x0004003du, 0x00000006u, 0x0000012du, 0x0000012cu, 0x00050080u, 0x00000006u, 0x0000012eu, 0x0000012bu, 0x0000012du, 0x0003003eu, 0x000000f2u, 0x0000012eu, 0x000500c7u, 0x00000006u, 0x00000130u, 0x0000012eu, 0x0000003eu, 0x0003003eu, 0x000000f2u, 0x00000130u, 0x00050084u, 0x00000006u, 0x00000132u, 0x00000105u, 0x00000074u, 0x00050080u, 0x00000006u, 0x00000134u, 0x00000130u, 0x00000132u, 0x0003003eu, 0x000000f2u, 0x00000134u, 0x000500c6u, 0x00000006u, 0x00000136u, 0x00000134u, 0x00000011u, 0x00060041u, 0x00000080u, 0x00000137u, 0x0000007du, 0x00000038u, 0x00000136u, 0x0004003du, 0x00000079u, 0x00000138u, 0x00000137u, 0x00040071u, 0x00000009u, 0x00000139u, 0x00000138u, 0x0003003eu, 0x000000f3u, 0x00000139u, 0x00060041u, 0x0000008bu, 0x0000013bu, 0x00000089u, 0x00000038u, 0x00000134u, 0x0004003du, 0x00000085u, 0x0000013cu, 0x0000013bu, 0x00040071u, 0x00000009u, 0x0000013du, 0x0000013cu, 0x0003003eu, 0x000000f4u, 0x0000013du, 0x000500c2u, 0x00000009u, 0x0000013fu, 0x00000139u, 0x00000058u, 0x000500c7u, 0x00000009u, 0x00000140u, 0x0000013fu, 0x00000092u, 0x0003003eu, 0x000000f5u, 0x00000140u, 0x000500c2u, 0x00000009u, 0x00000142u, 0x00000139u, 0x00000096u, 0x000500c7u, 0x00000009u, 0x00000143u, 0x00000142u, 0x00000092u, 0x0003003eu, 0x000000f6u, 0x00000143u, 0x000500c4u, 0x00000009u, 0x00000145u, 0x00000139u, 0x0000009bu, 0x000500c7u, 0x00000009u, 0x00000146u, 0x00000145u, 0x00000092u, 0x0003003eu, 0x000000f7u, 0x00000146u, 0x000500c7u, 0x00000009u, 0x00000148u, 0x00000139u, 0x0000001cu, 0x000500c4u, 0x00000009u, 0x00000149u, 0x00000148u, 0x0000009bu, 0x000500c5u, 0x00000009u, 0x0000014bu, 0x00000149u, 0x0000013du, 0x0003003eu, 0x000000f8u, 0x0000014bu, 0x00070050u, 0x0000000au, 0x00000150u, 0x00000140u, 0x00000143u, 0x00000146u, 0x0000014bu, 0x0003003eu, 0x000000f1u, 0x00000150u, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000123u, 0x0003003eu, 0x000000f1u, 0x000000aau, 0x000200f9u, 0x00000121u, 0x000200f8u, 0x00000121u, 0x000200f9u, 0x00000106u, 0x000200f8u, 0x00000106u, 0x000300f7u, 0x00000151u, 0x00000000u, 0x000400fau, 0x000000aeu, 0x00000152u, 0x00000151u, 0x000200f8u, 0x00000152u, 0x00050041u, 0x00000048u, 0x00000153u, 0x000000f1u, 0x00000096u, 0x0003003eu, 0x00000153u, 0x0000005du, 0x000200f9u, 0x00000151u, 0x000200f8u, 0x00000151u, 0x0004003du, 0x0000000au, 0x00000154u, 0x000000f1u, 0x0003003eu, 0x000000f9u, 0x00000154u, 0x0003003eu, 0x000000ccu, 0x00000154u, 0x0004003du, 0x000000d0u, 0x000000d3u, 0x000000d2u, 0x00040063u, 0x000000d3u, 0x000000c8u, 0x00000154u, 0x0003003eu, 0x000000ebu, 0x000000ecu, 0x000200f9u, 0x000000e7u, 0x000200f8u, 0x000000e7u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000au, 0x0000000du, 0x00000000u, 0x0000000bu, 0x00030037u, 0x00000008u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x00000008u, 0x0000000fu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000001bu, 0x00000007u, 0x0004003bu, 0x0000001au, 0x0000002bu, 0x00000007u, 0x0004003bu, 0x00000048u, 0x00000049u, 0x00000007u, 0x0004003bu, 0x00000052u, 0x00000053u, 0x00000007u, 0x0004003bu, 0x0000001au, 0x00000065u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x00000078u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x00000084u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x0000008fu, 0x00000007u, 0x0004003bu, 0x00000048u, 0x00000094u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x00000099u, 0x00000007u, 0x0004003bu, 0x00000048u, 0x0000009eu, 0x00000007u, 0x0004003du, 0x00000007u, 0x00000010u, 0x0000000cu, 0x00050050u, 0x00000007u, 0x00000015u, 0x00000014u, 0x00000014u, 0x000500c7u, 0x00000007u, 0x00000016u, 0x00000010u, 0x00000015u, 0x0003003eu, 0x0000000fu, 0x00000016u, 0x0004003du, 0x00000007u, 0x00000017u, 0x0000000cu, 0x00050050u, 0x00000007u, 0x00000018u, 0x00000012u, 0x00000012u, 0x000500c3u, 0x00000007u, 0x00000019u, 0x00000017u, 0x00000018u, 0x0003003eu, 0x0000000cu, 0x00000019u, 0x00050041u, 0x0000001au, 0x0000001du, 0x0000000fu, 0x0000001cu, 0x0004003du, 0x00000006u, 0x0000001eu, 0x0000001du, 0x00050084u, 0x00000006u, 0x0000001fu, 0x0000001eu, 0x00000013u, 0x00050041u, 0x0000001au, 0x00000021u, 0x0000000fu, 0x00000020u, 0x0004003du, 0x00000006u, 0x00000022u, 0x00000021u, 0x00050080u, 0x00000006u, 0x00000023u, 0x0000001fu, 0x00000022u, 0x0003003eu, 0x0000001bu, 0x00000023u, 0x000300f7u, 0x0000002au, 0x00000000u, 0x000400fau, 0x00000028u, 0x00000029u, 0x00000060u, 0x000200f8u, 0x00000029u, 0x00050041u, 0x0000001au, 0x0000002cu, 0x0000000cu, 0x0000001cu, 0x0004003du, 0x00000006u, 0x0000002du, 0x0000002cu, 0x00050041u, 0x00000031u, 0x00000032u, 0x00000030u, 0x00000011u, 0x0004003du, 0x00000006u, 0x00000033u, 0x00000032u, 0x00050084u, 0x00000006u, 0x00000034u, 0x0000002du, 0x00000033u, 0x00050041u, 0x0000001au, 0x00000035u, 0x0000000cu, 0x00000020u, 0x0004003du, 0x00000006u, 0x00000036u, 0x00000035u, 0x00050080u, 0x00000006u, 0x00000037u, 0x00000034u, 0x00000036u, 0x00050041u, 0x00000031u, 0x00000039u, 0x00000030u, 0x00000038u, 0x0004003du, 0x00000006u, 0x0000003au, 0x00000039u, 0x00050080u, 0x00000006u, 0x0000003bu, 0x00000037u, 0x0000003au, 0x0003003eu, 0x0000002bu, 0x0000003bu, 0x000500c7u, 0x00000006u, 0x00000041u, 0x0000003bu, 0x0000003fu, 0x0003003eu, 0x0000002bu, 0x00000041u, 0x00050084u, 0x00000006u, 0x00000045u, 0x00000023u, 0x00000044u, 0x00050080u, 0x00000006u, 0x00000047u, 0x00000041u, 0x00000045u, 0x0003003eu, 0x0000002bu, 0x00000047u, 0x00060041u, 0x0000004fu, 0x00000050u, 0x0000004du, 0x00000038u, 0x00000047u, 0x0004003du, 0x00000009u, 0x00000051u, 0x00000050u, 0x0003003eu, 0x00000049u, 0x00000051u, 0x00070050u, 0x0000000au, 0x00000055u, 0x00000051u, 0x00000051u, 0x00000051u, 0x00000051u, 0x000500c2u, 0x0000000au, 0x0000005bu, 0x00000055u, 0x0000005au, 0x000500c7u, 0x0000000au, 0x0000005fu, 0x0000005bu, 0x0000005eu, 0x0003003eu, 0x00000053u, 0x0000005fu, 0x000200f9u, 0x0000002au, 0x000200f8u, 0x00000060u, 0x000300f7u, 0x00000064u, 0x00000000u, 0x000400fau, 0x00000062u, 0x00000063u, 0x000000a9u, 0x000200f8u, 0x00000063u, 0x00050041u, 0x0000001au, 0x00000066u, 0x0000000cu, 0x0000001cu, 0x0004003du, 0x00000006u, 0x00000067u, 0x00000066u, 0x00050041u, 0x00000031u, 0x00000068u, 0x00000030u, 0x00000011u, 0x0004003du, 0x00000006u, 0x00000069u, 0x00000068u, 0x00050084u, 0x00000006u, 0x0000006au, 0x00000067u, 0x00000069u, 0x00050041u, 0x0000001au, 0x0000006bu, 0x0000000cu, 0x00000020u, 0x0004003du, 0x00000006u, 0x0000006cu, 0x0000006bu, 0x00050080u, 0x00000006u, 0x0000006du, 0x0000006au, 0x0000006cu, 0x00050041u, 0x00000031u, 0x0000006eu, 0x00000030u, 0x00000038u, 0x0004003du, 0x00000006u, 0x0000006fu, 0x0000006eu, 0x00050080u, 0x00000006u, 0x00000070u, 0x0000006du, 0x0000006fu, 0x0003003eu, 0x00000065u, 0x00000070u, 0x000500c7u, 0x00000006u, 0x00000072u, 0x00000070u, 0x0000003eu, 0x0003003eu, 0x00000065u, 0x00000072u, 0x00050084u, 0x00000006u, 0x00000075u, 0x00000023u, 0x00000074u, 0x00050080u, 0x00000006u, 0x00000077u, 0x00000072u, 0x00000075u, 0x0003003eu, 0x00000065u, 0x00000077u, 0x000500c6u, 0x00000006u, 0x0000007fu, 0x00000077u, 0x00000011u, 0x00060041u, 0x00000080u, 0x00000081u, 0x0000007du, 0x00000038u, 0x0000007fu, 0x0004003du, 0x00000079u, 0x00000082u, 0x00000081u, 0x00040071u, 0x00000009u, 0x00000083u, 0x00000082u, 0x0003003eu, 0x00000078u, 0x00000083u, 0x00060041u, 0x0000008bu, 0x0000008cu, 0x00000089u, 0x00000038u, 0x00000077u, 0x0004003du, 0x00000085u, 0x0000008du, 0x0000008cu, 0x00040071u, 0x00000009u, 0x0000008eu, 0x0000008du, 0x0003003eu, 0x00000084u, 0x0000008eu, 0x000500c2u, 0x00000009u, 0x00000091u, 0x00000083u, 0x00000058u, 0x000500c7u, 0x00000009u, 0x00000093u, 0x00000091u, 0x00000092u, 0x0003003eu, 0x0000008fu, 0x00000093u, 0x000500c2u, 0x00000009u, 0x00000097u, 0x00000083u, 0x00000096u, 0x000500c7u, 0x00000009u, 0x00000098u, 0x00000097u, 0x00000092u, 0x0003003eu, 0x00000094u, 0x00000098u, 0x000500c4u, 0x00000009u, 0x0000009cu, 0x00000083u, 0x0000009bu, 0x000500c7u, 0x00000009u, 0x0000009du, 0x0000009cu, 0x00000092u, 0x0003003eu, 0x00000099u, 0x0000009du, 0x000500c7u, 0x00000009u, 0x000000a0u, 0x00000083u, 0x0000001cu, 0x000500c4u, 0x00000009u, 0x000000a1u, 0x000000a0u, 0x0000009bu, 0x000500c5u, 0x00000009u, 0x000000a3u, 0x000000a1u, 0x0000008eu, 0x0003003eu, 0x0000009eu, 0x000000a3u, 0x00070050u, 0x0000000au, 0x000000a8u, 0x00000093u, 0x00000098u, 0x0000009du, 0x000000a3u, 0x0003003eu, 0x00000053u, 0x000000a8u, 0x000200f9u, 0x00000064u, 0x000200f8u, 0x000000a9u, 0x0003003eu, 0x00000053u, 0x000000aau, 0x000200f9u, 0x00000064u, 0x000200f8u, 0x00000064u, 0x000200f9u, 0x0000002au, 0x000200f8u, 0x0000002au, 0x000300f7u, 0x000000b0u, 0x00000000u, 0x000400fau, 0x000000aeu, 0x000000afu, 0x000000b0u, 0x000200f8u, 0x000000afu, 0x00050041u, 0x00000048u, 0x000000b1u, 0x00000053u, 0x00000096u, 0x0003003eu, 0x000000b1u, 0x0000005du, 0x000200f9u, 0x000000b0u, 0x000200f8u, 0x000000b0u, 0x0004003du, 0x0000000au, 0x000000b2u, 0x00000053u, 0x000200feu, 0x000000b2u, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000066u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000013u, 0x00000025u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000000bu, 0x00000006u, 0x00000010u, 0x00050048u, 0x0000000cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000000cu, 0x00000002u, 0x00040047u, 0x0000000eu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000000eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000013u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000021u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000025u, 0x0000000bu, 0x0000001du, 0x00040047u, 0x0000002au, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000002bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000002bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000002bu, 0x00000002u, 0x00040047u, 0x0000002du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000002du, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000003fu, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000040u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000040u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000040u, 0x00000002u, 0x00040047u, 0x00000042u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000042u, 0x00000021u, 0x00000001u, 0x00040047u, 0x00000046u, 0x00000006u, 0x00000004u, 0x00050048u, 0x00000047u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000047u, 0x00000002u, 0x00040047u, 0x00000049u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000049u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000061u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000063u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040017u, 0x00000009u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x0000000au, 0x00000400u, 0x0004001cu, 0x0000000bu, 0x00000009u, 0x0000000au, 0x0003001eu, 0x0000000cu, 0x0000000bu, 0x00040020u, 0x0000000du, 0x00000002u, 0x0000000cu, 0x0004003bu, 0x0000000du, 0x0000000eu, 0x00000002u, 0x00040015u, 0x0000000fu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000fu, 0x00000010u, 0x00000000u, 0x00040017u, 0x00000011u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000012u, 0x00000001u, 0x00000011u, 0x0004003bu, 0x00000012u, 0x00000013u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000014u, 0x00000000u, 0x00040020u, 0x00000015u, 0x00000001u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000018u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x0000001cu, 0x00000003u, 0x00040020u, 0x0000001eu, 0x00000002u, 0x00000006u, 0x00040032u, 0x0000000fu, 0x00000021u, 0x00000100u, 0x00060034u, 0x00000006u, 0x00000022u, 0x00000080u, 0x00000021u, 0x00000014u, 0x0004003bu, 0x00000015u, 0x00000025u, 0x00000001u, 0x0003001du, 0x0000002au, 0x00000006u, 0x0003001eu, 0x0000002bu, 0x0000002au, 0x00040020u, 0x0000002cu, 0x0000000cu, 0x0000002bu, 0x0004003bu, 0x0000002cu, 0x0000002du, 0x0000000cu, 0x00040020u, 0x0000002fu, 0x0000000cu, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000033u, 0xffffffffu, 0x00020014u, 0x00000034u, 0x0003001du, 0x0000003fu, 0x00000006u, 0x0003001eu, 0x00000040u, 0x0000003fu, 0x00040020u, 0x00000041u, 0x0000000cu, 0x00000040u, 0x0004003bu, 0x00000041u, 0x00000042u, 0x0000000cu, 0x0003001du, 0x00000046u, 0x00000006u, 0x0003001eu, 0x00000047u, 0x00000046u, 0x00040020u, 0x00000048u, 0x0000000cu, 0x00000047u, 0x0004003bu, 0x00000048u, 0x00000049u, 0x0000000cu, 0x00040032u, 0x00000006u, 0x00000061u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000062u, 0x00000001u, 0x00060033u, 0x00000011u, 0x00000063u, 0x00000061u, 0x00000062u, 0x00000062u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x000300f7u, 0x00000064u, 0x00000000u, 0x000300fbu, 0x00000014u, 0x00000065u, 0x000200f8u, 0x00000065u, 0x00050041u, 0x00000015u, 0x00000016u, 0x00000013u, 0x00000014u, 0x0004003du, 0x00000006u, 0x00000017u, 0x00000016u, 0x000500c2u, 0x00000006u, 0x00000019u, 0x00000017u, 0x00000018u, 0x000500c7u, 0x00000006u, 0x0000001du, 0x00000017u, 0x0000001cu, 0x00070041u, 0x0000001eu, 0x0000001fu, 0x0000000eu, 0x00000010u, 0x00000019u, 0x0000001du, 0x0004003du, 0x00000006u, 0x00000020u, 0x0000001fu, 0x00050084u, 0x00000006u, 0x00000024u, 0x00000020u, 0x00000022u, 0x0004003du, 0x00000006u, 0x00000026u, 0x00000025u, 0x00050080u, 0x00000006u, 0x00000028u, 0x00000024u, 0x00000026u, 0x00060041u, 0x0000002fu, 0x00000030u, 0x0000002du, 0x00000010u, 0x00000028u, 0x0004003du, 0x00000006u, 0x00000031u, 0x00000030u, 0x000500aau, 0x00000034u, 0x00000035u, 0x00000031u, 0x00000033u, 0x000300f7u, 0x00000037u, 0x00000000u, 0x000400fau, 0x00000035u, 0x00000036u, 0x00000039u, 0x000200f8u, 0x00000036u, 0x000200f9u, 0x00000064u, 0x000200f8u, 0x00000039u, 0x000500aau, 0x00000034u, 0x0000003bu, 0x00000031u, 0x00000014u, 0x000300f7u, 0x0000003du, 0x00000000u, 0x000400fau, 0x0000003bu, 0x0000003cu, 0x0000004du, 0x000200f8u, 0x0000003cu, 0x00060041u, 0x0000002fu, 0x00000044u, 0x00000042u, 0x00000010u, 0x00000028u, 0x0004003du, 0x00000006u, 0x00000045u, 0x00000044u, 0x00060041u, 0x0000002fu, 0x0000004cu, 0x00000049u, 0x00000010u, 0x00000028u, 0x0003003eu, 0x0000004cu, 0x00000045u, 0x000200f9u, 0x0000003du, 0x000200f8u, 0x0000004du, 0x00060041u, 0x0000002fu, 0x00000050u, 0x00000049u, 0x00000010u, 0x00000028u, 0x0004003du, 0x00000006u, 0x00000051u, 0x00000050u, 0x00060041u, 0x0000002fu, 0x00000054u, 0x00000042u, 0x00000010u, 0x00000028u, 0x0004003du, 0x00000006u, 0x00000055u, 0x00000054u, 0x000500c7u, 0x00000006u, 0x00000058u, 0x00000051u, 0x00000031u, 0x000400c8u, 0x00000006u, 0x0000005bu, 0x00000031u, 0x000500c7u, 0x00000006u, 0x0000005cu, 0x00000055u, 0x0000005bu, 0x000500c5u, 0x00000006u, 0x0000005du, 0x00000058u, 0x0000005cu, 0x0003003eu, 0x00000050u, 0x0000005du, 0x000200f9u, 0x0000003du, 0x000200f8u, 0x0000003du, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, 0x000200f9u, 0x00000064u, 0x000200f8u, 0x00000064u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000032u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000013u, 0x0000002au, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x0000000bu, 0x00000006u, 0x00000010u, 0x00050048u, 0x0000000cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000000cu, 0x00000002u, 0x00040047u, 0x0000000eu, 0x00000022u, 0x00000001u, 0x00040047u, 0x0000000eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000013u, 0x0000000bu, 0x0000001au, 0x00040047u, 0x00000021u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000025u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000026u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000026u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000026u, 0x00000002u, 0x00040047u, 0x00000028u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000028u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000002au, 0x0000000bu, 0x0000001du, 0x00040047u, 0x0000002fu, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000031u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040017u, 0x00000009u, 0x00000006u, 0x00000004u, 0x0004002bu, 0x00000006u, 0x0000000au, 0x00000400u, 0x0004001cu, 0x0000000bu, 0x00000009u, 0x0000000au, 0x0003001eu, 0x0000000cu, 0x0000000bu, 0x00040020u, 0x0000000du, 0x00000002u, 0x0000000cu, 0x0004003bu, 0x0000000du, 0x0000000eu, 0x00000002u, 0x00040015u, 0x0000000fu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000fu, 0x00000010u, 0x00000000u, 0x00040017u, 0x00000011u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000012u, 0x00000001u, 0x00000011u, 0x0004003bu, 0x00000012u, 0x00000013u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000014u, 0x00000000u, 0x00040020u, 0x00000015u, 0x00000001u, 0x00000006u, 0x0004002bu, 0x00000006u, 0x00000018u, 0x00000002u, 0x0004002bu, 0x00000006u, 0x0000001cu, 0x00000003u, 0x00040020u, 0x0000001eu, 0x00000002u, 0x00000006u, 0x00040032u, 0x0000000fu, 0x00000021u, 0x00000100u, 0x00060034u, 0x00000006u, 0x00000022u, 0x00000080u, 0x00000021u, 0x00000014u, 0x0003001du, 0x00000025u, 0x00000006u, 0x0003001eu, 0x00000026u, 0x00000025u, 0x00040020u, 0x00000027u, 0x0000000cu, 0x00000026u, 0x0004003bu, 0x00000027u, 0x00000028u, 0x0000000cu, 0x0004003bu, 0x00000015u, 0x0000002au, 0x00000001u, 0x00040020u, 0x0000002du, 0x0000000cu, 0x00000006u, 0x00040032u, 0x00000006u, 0x0000002fu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000030u, 0x00000001u, 0x00060033u, 0x00000011u, 0x00000031u, 0x0000002fu, 0x00000030u, 0x00000030u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x00050041u, 0x00000015u, 0x00000016u, 0x00000013u, 0x00000014u, 0x0004003du, 0x00000006u, 0x00000017u, 0x00000016u, 0x000500c2u, 0x00000006u, 0x00000019u, 0x00000017u, 0x00000018u, 0x000500c7u, 0x00000006u, 0x0000001du, 0x00000017u, 0x0000001cu, 0x00070041u, 0x0000001eu, 0x0000001fu, 0x0000000eu, 0x00000010u, 0x00000019u, 0x0000001du, 0x0004003du, 0x00000006u, 0x00000020u, 0x0000001fu, 0x00050084u, 0x00000006u, 0x00000024u, 0x00000020u, 0x00000022u, 0x0004003du, 0x00000006u, 0x0000002bu, 0x0000002au, 0x00050080u, 0x00000006u, 0x0000002cu, 0x00000024u, 0x0000002bu, 0x00060041u, 0x0000002du, 0x0000002eu, 0x00000028u, 0x00000010u, 0x0000002cu, 0x0003003eu, 0x0000002eu, 0x00000014u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x000000c6u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000005du, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000013u, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000001cu, 0x00000006u, 0x00000001u, 0x00040048u, 0x0000001du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000001du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000001du, 0x00000002u, 0x00040047u, 0x0000001fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000001fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000026u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000027u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000027u, 0x00000002u, 0x00040047u, 0x00000029u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000029u, 0x00000021u, 0x00000002u, 0x00040047u, 0x00000034u, 0x00000006u, 0x00000002u, 0x00040048u, 0x00000035u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000035u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000035u, 0x00000002u, 0x00040047u, 0x00000037u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000037u, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000003du, 0x00000006u, 0x00000002u, 0x00050048u, 0x0000003eu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000003eu, 0x00000002u, 0x00040047u, 0x00000040u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000040u, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000004bu, 0x00000006u, 0x00000004u, 0x00040048u, 0x0000004cu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000004cu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000004cu, 0x00000002u, 0x00040047u, 0x0000004eu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000004eu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000053u, 0x00000006u, 0x00000004u, 0x00050048u, 0x00000054u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000054u, 0x00000002u, 0x00040047u, 0x00000056u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000056u, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000005du, 0x0000000bu, 0x0000001cu, 0x00050048u, 0x00000062u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x00000062u, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x00000062u, 0x00000002u, 0x00000023u, 0x00000008u, 0x00030047u, 0x00000062u, 0x00000002u, 0x00040047u, 0x00000077u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000089u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000092u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00000094u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x00000095u, 0x00000001u, 0x00000004u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040021u, 0x00000008u, 0x00000002u, 0x00000007u, 0x00040015u, 0x00000012u, 0x00000020u, 0x00000001u, 0x00040032u, 0x00000012u, 0x00000013u, 0x00800000u, 0x0004002bu, 0x00000012u, 0x00000014u, 0x00000001u, 0x00060034u, 0x00000012u, 0x00000015u, 0x00000082u, 0x00000013u, 0x00000014u, 0x0004002bu, 0x00000006u, 0x00000016u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000017u, 0x00000080u, 0x00000015u, 0x00000016u, 0x00040015u, 0x0000001bu, 0x00000008u, 0x00000000u, 0x0003001du, 0x0000001cu, 0x0000001bu, 0x0003001eu, 0x0000001du, 0x0000001cu, 0x00040020u, 0x0000001eu, 0x0000000cu, 0x0000001du, 0x0004003bu, 0x0000001eu, 0x0000001fu, 0x0000000cu, 0x0004002bu, 0x00000012u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000022u, 0x0000000cu, 0x0000001bu, 0x0003001du, 0x00000026u, 0x0000001bu, 0x0003001eu, 0x00000027u, 0x00000026u, 0x00040020u, 0x00000028u, 0x0000000cu, 0x00000027u, 0x0004003bu, 0x00000028u, 0x00000029u, 0x0000000cu, 0x00060034u, 0x00000012u, 0x0000002eu, 0x000000c3u, 0x00000015u, 0x00000014u, 0x00060034u, 0x00000006u, 0x0000002fu, 0x00000080u, 0x0000002eu, 0x00000016u, 0x00040015u, 0x00000033u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000034u, 0x00000033u, 0x0003001eu, 0x00000035u, 0x00000034u, 0x00040020u, 0x00000036u, 0x0000000cu, 0x00000035u, 0x0004003bu, 0x00000036u, 0x00000037u, 0x0000000cu, 0x00040020u, 0x00000039u, 0x0000000cu, 0x00000033u, 0x0003001du, 0x0000003du, 0x00000033u, 0x0003001eu, 0x0000003eu, 0x0000003du, 0x00040020u, 0x0000003fu, 0x0000000cu, 0x0000003eu, 0x0004003bu, 0x0000003fu, 0x00000040u, 0x0000000cu, 0x0004002bu, 0x00000012u, 0x00000045u, 0x00000002u, 0x00060034u, 0x00000012u, 0x00000046u, 0x000000c3u, 0x00000015u, 0x00000045u, 0x00060034u, 0x00000006u, 0x00000047u, 0x00000080u, 0x00000046u, 0x00000016u, 0x0003001du, 0x0000004bu, 0x00000006u, 0x0003001eu, 0x0000004cu, 0x0000004bu, 0x00040020u, 0x0000004du, 0x0000000cu, 0x0000004cu, 0x0004003bu, 0x0000004du, 0x0000004eu, 0x0000000cu, 0x00040020u, 0x00000050u, 0x0000000cu, 0x00000006u, 0x0003001du, 0x00000053u, 0x00000006u, 0x0003001eu, 0x00000054u, 0x00000053u, 0x00040020u, 0x00000055u, 0x0000000cu, 0x00000054u, 0x0004003bu, 0x00000055u, 0x00000056u, 0x0000000cu, 0x00040017u, 0x0000005bu, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000005cu, 0x00000001u, 0x0000005bu, 0x0004003bu, 0x0000005cu, 0x0000005du, 0x00000001u, 0x00040020u, 0x0000005eu, 0x00000001u, 0x00000006u, 0x0005001eu, 0x00000062u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000063u, 0x00000009u, 0x00000062u, 0x0004003bu, 0x00000063u, 0x00000064u, 0x00000009u, 0x00040020u, 0x00000065u, 0x00000009u, 0x00000006u, 0x00020014u, 0x00000068u, 0x00040032u, 0x00000012u, 0x00000077u, 0x00000000u, 0x00030031u, 0x00000068u, 0x00000089u, 0x00050034u, 0x00000068u, 0x0000008au, 0x000000a8u, 0x00000089u, 0x0004002bu, 0x00000012u, 0x00000090u, 0x00000003u, 0x0004002bu, 0x00000012u, 0x00000091u, 0x00000004u, 0x00040032u, 0x00000006u, 0x00000092u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000093u, 0x00000001u, 0x00060033u, 0x0000005bu, 0x00000094u, 0x00000092u, 0x00000093u, 0x00000093u, 0x00040032u, 0x00000012u, 0x00000095u, 0x00000001u, 0x0003002au, 0x00000068u, 0x00000098u, 0x00040020u, 0x00000099u, 0x00000007u, 0x00000068u, 0x00030029u, 0x00000068u, 0x0000009bu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x000000bbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000a7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000009cu, 0x00000007u, 0x0005003bu, 0x00000099u, 0x0000009au, 0x00000007u, 0x00000098u, 0x0004003bu, 0x00000007u, 0x0000005au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000006du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000072u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000007cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000080u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000084u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000008du, 0x00000007u, 0x000300f7u, 0x00000096u, 0x00000000u, 0x000300fbu, 0x00000016u, 0x00000097u, 0x000200f8u, 0x00000097u, 0x00050041u, 0x0000005eu, 0x0000005fu, 0x0000005du, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000060u, 0x0000005fu, 0x0003003eu, 0x0000005au, 0x00000060u, 0x00050041u, 0x00000065u, 0x00000066u, 0x00000064u, 0x00000020u, 0x0004003du, 0x00000006u, 0x00000067u, 0x00000066u, 0x000500aeu, 0x00000068u, 0x00000069u, 0x00000060u, 0x00000067u, 0x000300f7u, 0x0000006bu, 0x00000000u, 0x000400fau, 0x00000069u, 0x0000006au, 0x0000006bu, 0x000200f8u, 0x0000006au, 0x0003003eu, 0x0000009au, 0x0000009bu, 0x000200f9u, 0x00000096u, 0x000200f8u, 0x0000006bu, 0x00050041u, 0x00000065u, 0x0000006fu, 0x00000064u, 0x00000045u, 0x0004003du, 0x00000006u, 0x00000070u, 0x0000006fu, 0x00050080u, 0x00000006u, 0x00000071u, 0x00000060u, 0x00000070u, 0x0003003eu, 0x0000006du, 0x00000071u, 0x00050041u, 0x00000065u, 0x00000074u, 0x00000064u, 0x00000014u, 0x0004003du, 0x00000006u, 0x00000075u, 0x00000074u, 0x00050080u, 0x00000006u, 0x00000076u, 0x00000060u, 0x00000075u, 0x0003003eu, 0x00000072u, 0x00000076u, 0x000300f7u, 0x0000007bu, 0x00000000u, 0x000900fbu, 0x00000077u, 0x0000007bu, 0x00000000u, 0x00000078u, 0x00000001u, 0x00000079u, 0x00000002u, 0x0000007au, 0x000200f8u, 0x00000078u, 0x0003003eu, 0x0000007cu, 0x00000076u, 0x000500c7u, 0x00000006u, 0x0000009eu, 0x00000076u, 0x00000017u, 0x0003003eu, 0x0000007cu, 0x0000009eu, 0x00060041u, 0x00000022u, 0x000000a0u, 0x0000001fu, 0x00000020u, 0x0000009eu, 0x0004003du, 0x0000001bu, 0x000000a1u, 0x000000a0u, 0x00040071u, 0x00000006u, 0x000000a2u, 0x000000a1u, 0x0003003eu, 0x0000009cu, 0x000000a2u, 0x00040071u, 0x0000001bu, 0x000000a5u, 0x000000a2u, 0x00060041u, 0x00000022u, 0x000000a6u, 0x00000029u, 0x00000020u, 0x0000009eu, 0x0003003eu, 0x000000a6u, 0x000000a5u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x00000079u, 0x0003003eu, 0x00000080u, 0x00000076u, 0x000500c7u, 0x00000006u, 0x000000a9u, 0x00000076u, 0x0000002fu, 0x0003003eu, 0x00000080u, 0x000000a9u, 0x00060041u, 0x00000039u, 0x000000abu, 0x00000037u, 0x00000020u, 0x000000a9u, 0x0004003du, 0x00000033u, 0x000000acu, 0x000000abu, 0x00040071u, 0x00000006u, 0x000000adu, 0x000000acu, 0x0003003eu, 0x000000a7u, 0x000000adu, 0x00040071u, 0x00000033u, 0x000000b0u, 0x000000adu, 0x00060041u, 0x00000039u, 0x000000b1u, 0x00000040u, 0x00000020u, 0x000000a9u, 0x0003003eu, 0x000000b1u, 0x000000b0u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007au, 0x0003003eu, 0x00000084u, 0x00000076u, 0x000500c7u, 0x00000006u, 0x000000b4u, 0x00000076u, 0x00000047u, 0x0003003eu, 0x00000084u, 0x000000b4u, 0x00060041u, 0x00000050u, 0x000000b6u, 0x0000004eu, 0x00000020u, 0x000000b4u, 0x0004003du, 0x00000006u, 0x000000b7u, 0x000000b6u, 0x0003003eu, 0x000000b2u, 0x000000b7u, 0x00060041u, 0x00000050u, 0x000000bau, 0x00000056u, 0x00000020u, 0x000000b4u, 0x0003003eu, 0x000000bau, 0x000000b7u, 0x000200f9u, 0x0000007bu, 0x000200f8u, 0x0000007bu, 0x000300f7u, 0x0000008cu, 0x00000000u, 0x000400fau, 0x0000008au, 0x0000008bu, 0x0000008cu, 0x000200f8u, 0x0000008bu, 0x0003003eu, 0x0000008du, 0x00000071u, 0x000500c7u, 0x00000006u, 0x000000bdu, 0x00000071u, 0x0000002fu, 0x0003003eu, 0x0000008du, 0x000000bdu, 0x00060041u, 0x00000039u, 0x000000bfu, 0x00000037u, 0x00000020u, 0x000000bdu, 0x0004003du, 0x00000033u, 0x000000c0u, 0x000000bfu, 0x00040071u, 0x00000006u, 0x000000c1u, 0x000000c0u, 0x0003003eu, 0x000000bbu, 0x000000c1u, 0x00040071u, 0x00000033u, 0x000000c4u, 0x000000c1u, 0x00060041u, 0x00000039u, 0x000000c5u, 0x00000040u, 0x00000020u, 0x000000bdu, 0x0003003eu, 0x000000c5u, 0x000000c4u, 0x000200f9u, 0x0000008cu, 0x000200f8u, 0x0000008cu, 0x0003003eu, 0x0000009au, 0x0000009bu, 0x000200f9u, 0x00000096u, 0x000200f8u, 0x00000096u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000000au, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x00000009u, 0x000200f8u, 0x0000000bu, 0x0004003bu, 0x00000007u, 0x0000001au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000018u, 0x00000009u, 0x000500c7u, 0x00000006u, 0x00000019u, 0x00000018u, 0x00000017u, 0x0003003eu, 0x00000009u, 0x00000019u, 0x0004003du, 0x00000006u, 0x00000021u, 0x00000009u, 0x00060041u, 0x00000022u, 0x00000023u, 0x0000001fu, 0x00000020u, 0x00000021u, 0x0004003du, 0x0000001bu, 0x00000024u, 0x00000023u, 0x00040071u, 0x00000006u, 0x00000025u, 0x00000024u, 0x0003003eu, 0x0000001au, 0x00000025u, 0x0004003du, 0x00000006u, 0x0000002au, 0x00000009u, 0x00040071u, 0x0000001bu, 0x0000002cu, 0x00000025u, 0x00060041u, 0x00000022u, 0x0000002du, 0x00000029u, 0x00000020u, 0x0000002au, 0x0003003eu, 0x0000002du, 0x0000002cu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000000du, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x00000007u, 0x00000032u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000030u, 0x0000000cu, 0x000500c7u, 0x00000006u, 0x00000031u, 0x00000030u, 0x0000002fu, 0x0003003eu, 0x0000000cu, 0x00000031u, 0x0004003du, 0x00000006u, 0x00000038u, 0x0000000cu, 0x00060041u, 0x00000039u, 0x0000003au, 0x00000037u, 0x00000020u, 0x00000038u, 0x0004003du, 0x00000033u, 0x0000003bu, 0x0000003au, 0x00040071u, 0x00000006u, 0x0000003cu, 0x0000003bu, 0x0003003eu, 0x00000032u, 0x0000003cu, 0x0004003du, 0x00000006u, 0x00000041u, 0x0000000cu, 0x00040071u, 0x00000033u, 0x00000043u, 0x0000003cu, 0x00060041u, 0x00000039u, 0x00000044u, 0x00000040u, 0x00000020u, 0x00000041u, 0x0003003eu, 0x00000044u, 0x00000043u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000010u, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x0000004au, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000048u, 0x0000000fu, 0x000500c7u, 0x00000006u, 0x00000049u, 0x00000048u, 0x00000047u, 0x0003003eu, 0x0000000fu, 0x00000049u, 0x0004003du, 0x00000006u, 0x0000004fu, 0x0000000fu, 0x00060041u, 0x00000050u, 0x00000051u, 0x0000004eu, 0x00000020u, 0x0000004fu, 0x0004003du, 0x00000006u, 0x00000052u, 0x00000051u, 0x0003003eu, 0x0000004au, 0x00000052u, 0x0004003du, 0x00000006u, 0x00000057u, 0x0000000fu, 0x00060041u, 0x00000050u, 0x00000059u, 0x00000056u, 0x00000020u, 0x00000057u, 0x0003003eu, 0x00000059u, 0x00000052u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000026du, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000116u, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000013u, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000001cu, 0x00000006u, 0x00000001u, 0x00040048u, 0x0000001du, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000001du, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000001du, 0x00000002u, 0x00040047u, 0x0000001fu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000001fu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000027u, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000028u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000028u, 0x00000002u, 0x00040047u, 0x0000002au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000002au, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000003au, 0x00000006u, 0x00000001u, 0x00040048u, 0x0000003bu, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000003bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000003bu, 0x00000002u, 0x00040047u, 0x0000003du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000003du, 0x00000021u, 0x00000001u, 0x00040047u, 0x0000004cu, 0x00000001u, 0x00000004u, 0x00040047u, 0x0000004eu, 0x00000006u, 0x00000001u, 0x00050048u, 0x0000004fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000004fu, 0x00000002u, 0x00040047u, 0x00000051u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000051u, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000005fu, 0x00000006u, 0x00000001u, 0x00050048u, 0x00000060u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000060u, 0x00000002u, 0x00040047u, 0x00000062u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000062u, 0x00000021u, 0x00000004u, 0x00040047u, 0x00000079u, 0x00000006u, 0x00000002u, 0x00040048u, 0x0000007au, 0x00000000u, 0x00000018u, 0x00050048u, 0x0000007au, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000007au, 0x00000002u, 0x00040047u, 0x0000007cu, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000007cu, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000083u, 0x00000006u, 0x00000002u, 0x00050048u, 0x00000084u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000084u, 0x00000002u, 0x00040047u, 0x00000086u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000086u, 0x00000021u, 0x00000002u, 0x00040047u, 0x000000a0u, 0x00000006u, 0x00000002u, 0x00050048u, 0x000000a1u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000a1u, 0x00000002u, 0x00040047u, 0x000000a3u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000a3u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000000c2u, 0x00000006u, 0x00000004u, 0x00040048u, 0x000000c3u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000c3u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000c3u, 0x00000002u, 0x00040047u, 0x000000c5u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000c5u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000000cbu, 0x00000006u, 0x00000004u, 0x00050048u, 0x000000ccu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000ccu, 0x00000002u, 0x00040047u, 0x000000ceu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000ceu, 0x00000021u, 0x00000002u, 0x00040047u, 0x000000edu, 0x00000006u, 0x00000004u, 0x00050048u, 0x000000eeu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000eeu, 0x00000002u, 0x00040047u, 0x000000f0u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000f0u, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000116u, 0x0000000bu, 0x0000001cu, 0x00050048u, 0x0000011bu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000011bu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000011bu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00030047u, 0x0000011bu, 0x00000002u, 0x00040047u, 0x0000012fu, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000141u, 0x00000001u, 0x00000002u, 0x00040047u, 0x00000148u, 0x00000001u, 0x00000003u, 0x00040047u, 0x00000149u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040021u, 0x00000008u, 0x00000002u, 0x00000007u, 0x00040015u, 0x00000012u, 0x00000020u, 0x00000001u, 0x00040032u, 0x00000012u, 0x00000013u, 0x00800000u, 0x0004002bu, 0x00000012u, 0x00000014u, 0x00000001u, 0x00060034u, 0x00000012u, 0x00000015u, 0x00000082u, 0x00000013u, 0x00000014u, 0x0004002bu, 0x00000006u, 0x00000016u, 0x00000000u, 0x00060034u, 0x00000006u, 0x00000017u, 0x00000080u, 0x00000015u, 0x00000016u, 0x00040015u, 0x0000001bu, 0x00000008u, 0x00000000u, 0x0003001du, 0x0000001cu, 0x0000001bu, 0x0003001eu, 0x0000001du, 0x0000001cu, 0x00040020u, 0x0000001eu, 0x0000000cu, 0x0000001du, 0x0004003bu, 0x0000001eu, 0x0000001fu, 0x0000000cu, 0x0004002bu, 0x00000012u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000022u, 0x0000000cu, 0x0000001bu, 0x0003001du, 0x00000027u, 0x0000001bu, 0x0003001eu, 0x00000028u, 0x00000027u, 0x00040020u, 0x00000029u, 0x0000000cu, 0x00000028u, 0x0004003bu, 0x00000029u, 0x0000002au, 0x0000000cu, 0x00020014u, 0x00000031u, 0x0004002bu, 0x00000006u, 0x00000037u, 0x00000003u, 0x0003001du, 0x0000003au, 0x0000001bu, 0x0003001eu, 0x0000003bu, 0x0000003au, 0x00040020u, 0x0000003cu, 0x0000000cu, 0x0000003bu, 0x0004003bu, 0x0000003cu, 0x0000003du, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x0000003fu, 0x00000001u, 0x00040020u, 0x00000044u, 0x00000007u, 0x00000012u, 0x00040032u, 0x00000012u, 0x0000004cu, 0x00000001u, 0x0003001du, 0x0000004eu, 0x0000001bu, 0x0003001eu, 0x0000004fu, 0x0000004eu, 0x00040020u, 0x00000050u, 0x0000000cu, 0x0000004fu, 0x0004003bu, 0x00000050u, 0x00000051u, 0x0000000cu, 0x0003001du, 0x0000005fu, 0x0000001bu, 0x0003001eu, 0x00000060u, 0x0000005fu, 0x00040020u, 0x00000061u, 0x0000000cu, 0x00000060u, 0x0004003bu, 0x00000061u, 0x00000062u, 0x0000000cu, 0x00060034u, 0x00000012u, 0x00000066u, 0x000000c3u, 0x00000013u, 0x00000014u, 0x00060034u, 0x00000012u, 0x00000073u, 0x000000c3u, 0x00000015u, 0x00000014u, 0x00060034u, 0x00000006u, 0x00000074u, 0x00000080u, 0x00000073u, 0x00000016u, 0x00040015u, 0x00000078u, 0x00000010u, 0x00000000u, 0x0003001du, 0x00000079u, 0x00000078u, 0x0003001eu, 0x0000007au, 0x00000079u, 0x00040020u, 0x0000007bu, 0x0000000cu, 0x0000007au, 0x0004003bu, 0x0000007bu, 0x0000007cu, 0x0000000cu, 0x00040020u, 0x0000007eu, 0x0000000cu, 0x00000078u, 0x0003001du, 0x00000083u, 0x00000078u, 0x0003001eu, 0x00000084u, 0x00000083u, 0x00040020u, 0x00000085u, 0x0000000cu, 0x00000084u, 0x0004003bu, 0x00000085u, 0x00000086u, 0x0000000cu, 0x0003001du, 0x000000a0u, 0x00000078u, 0x0003001eu, 0x000000a1u, 0x000000a0u, 0x00040020u, 0x000000a2u, 0x0000000cu, 0x000000a1u, 0x0004003bu, 0x000000a2u, 0x000000a3u, 0x0000000cu, 0x00060034u, 0x00000012u, 0x000000a6u, 0x000000c3u, 0x00000013u, 0x00000014u, 0x00060034u, 0x00000012u, 0x000000afu, 0x000000c3u, 0x00000013u, 0x00000014u, 0x0004002bu, 0x00000012u, 0x000000bcu, 0x00000002u, 0x00060034u, 0x00000012u, 0x000000bdu, 0x000000c3u, 0x00000015u, 0x000000bcu, 0x00060034u, 0x00000006u, 0x000000beu, 0x00000080u, 0x000000bdu, 0x00000016u, 0x0003001du, 0x000000c2u, 0x00000006u, 0x0003001eu, 0x000000c3u, 0x000000c2u, 0x00040020u, 0x000000c4u, 0x0000000cu, 0x000000c3u, 0x0004003bu, 0x000000c4u, 0x000000c5u, 0x0000000cu, 0x00040020u, 0x000000c7u, 0x0000000cu, 0x00000006u, 0x0003001du, 0x000000cbu, 0x00000006u, 0x0003001eu, 0x000000ccu, 0x000000cbu, 0x00040020u, 0x000000cdu, 0x0000000cu, 0x000000ccu, 0x0004003bu, 0x000000cdu, 0x000000ceu, 0x0000000cu, 0x0004002bu, 0x00000006u, 0x000000d8u, 0x00000002u, 0x0003001du, 0x000000edu, 0x00000006u, 0x0003001eu, 0x000000eeu, 0x000000edu, 0x00040020u, 0x000000efu, 0x0000000cu, 0x000000eeu, 0x0004003bu, 0x000000efu, 0x000000f0u, 0x0000000cu, 0x00060034u, 0x00000012u, 0x000000f3u, 0x000000c3u, 0x00000013u, 0x000000bcu, 0x00060034u, 0x00000012u, 0x000000fcu, 0x000000c3u, 0x00000013u, 0x00000014u, 0x00060034u, 0x00000012u, 0x00000107u, 0x000000c3u, 0x00000013u, 0x00000014u, 0x00040017u, 0x00000114u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000115u, 0x00000001u, 0x00000114u, 0x0004003bu, 0x00000115u, 0x00000116u, 0x00000001u, 0x00040020u, 0x00000117u, 0x00000001u, 0x00000006u, 0x0005001eu, 0x0000011bu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x0000011cu, 0x00000009u, 0x0000011bu, 0x0004003bu, 0x0000011cu, 0x0000011du, 0x00000009u, 0x00040020u, 0x0000011eu, 0x00000009u, 0x00000006u, 0x00040032u, 0x00000012u, 0x0000012fu, 0x00000000u, 0x00030031u, 0x00000031u, 0x00000141u, 0x00050034u, 0x00000031u, 0x00000142u, 0x000000a8u, 0x00000141u, 0x00040032u, 0x00000006u, 0x00000148u, 0x00000001u, 0x00060033u, 0x00000114u, 0x00000149u, 0x00000148u, 0x0000003fu, 0x0000003fu, 0x0003002au, 0x00000031u, 0x0000014cu, 0x00040020u, 0x0000014du, 0x00000007u, 0x00000031u, 0x00030029u, 0x00000031u, 0x0000014fu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x00000208u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000209u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000020au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000020bu, 0x00000007u, 0x0004003bu, 0x00000044u, 0x0000020cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001c8u, 0x00000007u, 0x0004003bu, 0x00000044u, 0x000001c9u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018fu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000190u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000191u, 0x00000007u, 0x0004003bu, 0x00000044u, 0x00000192u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000150u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000151u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000152u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000153u, 0x00000007u, 0x0004003bu, 0x00000044u, 0x00000154u, 0x00000007u, 0x0005003bu, 0x0000014du, 0x0000014eu, 0x00000007u, 0x0000014cu, 0x0004003bu, 0x00000007u, 0x00000113u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000125u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000012au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000134u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000138u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000145u, 0x00000007u, 0x000300f7u, 0x0000014au, 0x00000000u, 0x000300fbu, 0x00000016u, 0x0000014bu, 0x000200f8u, 0x0000014bu, 0x00050041u, 0x00000117u, 0x00000118u, 0x00000116u, 0x00000016u, 0x0004003du, 0x00000006u, 0x00000119u, 0x00000118u, 0x0003003eu, 0x00000113u, 0x00000119u, 0x00050041u, 0x0000011eu, 0x0000011fu, 0x0000011du, 0x00000020u, 0x0004003du, 0x00000006u, 0x00000120u, 0x0000011fu, 0x000500aeu, 0x00000031u, 0x00000121u, 0x00000119u, 0x00000120u, 0x000300f7u, 0x00000123u, 0x00000000u, 0x000400fau, 0x00000121u, 0x00000122u, 0x00000123u, 0x000200f8u, 0x00000122u, 0x0003003eu, 0x0000014eu, 0x0000014fu, 0x000200f9u, 0x0000014au, 0x000200f8u, 0x00000123u, 0x00050041u, 0x0000011eu, 0x00000127u, 0x0000011du, 0x000000bcu, 0x0004003du, 0x00000006u, 0x00000128u, 0x00000127u, 0x00050080u, 0x00000006u, 0x00000129u, 0x00000119u, 0x00000128u, 0x0003003eu, 0x00000125u, 0x00000129u, 0x00050041u, 0x0000011eu, 0x0000012cu, 0x0000011du, 0x00000014u, 0x0004003du, 0x00000006u, 0x0000012du, 0x0000012cu, 0x00050080u, 0x00000006u, 0x0000012eu, 0x00000119u, 0x0000012du, 0x0003003eu, 0x0000012au, 0x0000012eu, 0x000300f7u, 0x00000133u, 0x00000000u, 0x000900fbu, 0x0000012fu, 0x00000133u, 0x00000000u, 0x00000130u, 0x00000001u, 0x00000131u, 0x00000002u, 0x00000132u, 0x000200f8u, 0x00000130u, 0x0003003eu, 0x00000134u, 0x0000012eu, 0x000500c7u, 0x00000006u, 0x00000156u, 0x0000012eu, 0x00000017u, 0x0003003eu, 0x00000134u, 0x00000156u, 0x00060041u, 0x00000022u, 0x00000158u, 0x0000001fu, 0x00000020u, 0x00000156u, 0x0004003du, 0x0000001bu, 0x00000159u, 0x00000158u, 0x00040071u, 0x00000006u, 0x0000015au, 0x00000159u, 0x0003003eu, 0x00000150u, 0x0000015au, 0x00060041u, 0x00000022u, 0x0000015cu, 0x0000002au, 0x00000020u, 0x00000156u, 0x0004003du, 0x0000001bu, 0x0000015du, 0x0000015cu, 0x00040071u, 0x00000006u, 0x0000015eu, 0x0000015du, 0x0003003eu, 0x00000151u, 0x0000015eu, 0x000500abu, 0x00000031u, 0x00000161u, 0x0000015au, 0x0000015eu, 0x000300f7u, 0x00000162u, 0x00000000u, 0x000400fau, 0x00000161u, 0x00000163u, 0x00000162u, 0x000200f8u, 0x00000163u, 0x000500c6u, 0x00000006u, 0x00000165u, 0x00000156u, 0x00000037u, 0x0003003eu, 0x00000152u, 0x00000165u, 0x000500c2u, 0x00000006u, 0x00000167u, 0x00000165u, 0x0000003fu, 0x00060041u, 0x00000022u, 0x00000168u, 0x0000003du, 0x00000020u, 0x00000167u, 0x0004003du, 0x0000001bu, 0x00000169u, 0x00000168u, 0x00040071u, 0x00000006u, 0x0000016au, 0x00000169u, 0x0003003eu, 0x00000153u, 0x0000016au, 0x0003003eu, 0x00000154u, 0x00000020u, 0x000200f9u, 0x0000016bu, 0x000200f8u, 0x0000016bu, 0x000700f5u, 0x00000012u, 0x00000249u, 0x00000020u, 0x00000163u, 0x00000189u, 0x0000016du, 0x000500b1u, 0x00000031u, 0x00000170u, 0x00000249u, 0x0000004cu, 0x000400f6u, 0x0000016cu, 0x0000016du, 0x00000000u, 0x000400fau, 0x00000170u, 0x00000171u, 0x0000016cu, 0x000200f8u, 0x00000171u, 0x00050084u, 0x00000012u, 0x00000174u, 0x00000249u, 0x00000013u, 0x0004007cu, 0x00000006u, 0x00000175u, 0x00000174u, 0x00050080u, 0x00000006u, 0x00000176u, 0x00000156u, 0x00000175u, 0x00040071u, 0x0000001bu, 0x00000178u, 0x0000015au, 0x00060041u, 0x00000022u, 0x00000179u, 0x00000051u, 0x00000020u, 0x00000176u, 0x0003003eu, 0x00000179u, 0x00000178u, 0x000500c7u, 0x00000006u, 0x0000017bu, 0x00000165u, 0x0000003fu, 0x000500abu, 0x00000031u, 0x0000017cu, 0x0000017bu, 0x00000016u, 0x000300f7u, 0x0000017du, 0x00000000u, 0x000400fau, 0x0000017cu, 0x0000017eu, 0x0000017du, 0x000200f8u, 0x0000017eu, 0x00050084u, 0x00000012u, 0x00000182u, 0x00000249u, 0x00000066u, 0x0004007cu, 0x00000006u, 0x00000183u, 0x00000182u, 0x00050080u, 0x00000006u, 0x00000184u, 0x00000167u, 0x00000183u, 0x00040071u, 0x0000001bu, 0x00000186u, 0x0000016au, 0x00060041u, 0x00000022u, 0x00000187u, 0x00000062u, 0x00000020u, 0x00000184u, 0x0003003eu, 0x00000187u, 0x00000186u, 0x000200f9u, 0x0000017du, 0x000200f8u, 0x0000017du, 0x000200f9u, 0x0000016du, 0x000200f8u, 0x0000016du, 0x00050080u, 0x00000012u, 0x00000189u, 0x00000249u, 0x00000014u, 0x0003003eu, 0x00000154u, 0x00000189u, 0x000200f9u, 0x0000016bu, 0x000200f8u, 0x0000016cu, 0x00040071u, 0x0000001bu, 0x0000018cu, 0x0000015au, 0x0003003eu, 0x0000015cu, 0x0000018cu, 0x000200f9u, 0x00000162u, 0x000200f8u, 0x00000162u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000131u, 0x0003003eu, 0x00000138u, 0x0000012eu, 0x000500c7u, 0x00000006u, 0x00000194u, 0x0000012eu, 0x00000074u, 0x0003003eu, 0x00000138u, 0x00000194u, 0x00060041u, 0x0000007eu, 0x00000196u, 0x0000007cu, 0x00000020u, 0x00000194u, 0x0004003du, 0x00000078u, 0x00000197u, 0x00000196u, 0x00040071u, 0x00000006u, 0x00000198u, 0x00000197u, 0x0003003eu, 0x0000018eu, 0x00000198u, 0x00060041u, 0x0000007eu, 0x0000019au, 0x00000086u, 0x00000020u, 0x00000194u, 0x0004003du, 0x00000078u, 0x0000019bu, 0x0000019au, 0x00040071u, 0x00000006u, 0x0000019cu, 0x0000019bu, 0x0003003eu, 0x0000018fu, 0x0000019cu, 0x000500abu, 0x00000031u, 0x0000019fu, 0x00000198u, 0x0000019cu, 0x000300f7u, 0x000001a0u, 0x00000000u, 0x000400fau, 0x0000019fu, 0x000001a1u, 0x000001a0u, 0x000200f8u, 0x000001a1u, 0x000500c6u, 0x00000006u, 0x000001a3u, 0x00000194u, 0x0000003fu, 0x0003003eu, 0x00000190u, 0x000001a3u, 0x00060041u, 0x00000022u, 0x000001a5u, 0x0000003du, 0x00000020u, 0x000001a3u, 0x0004003du, 0x0000001bu, 0x000001a6u, 0x000001a5u, 0x00040071u, 0x00000006u, 0x000001a7u, 0x000001a6u, 0x0003003eu, 0x00000191u, 0x000001a7u, 0x0003003eu, 0x00000192u, 0x00000020u, 0x000200f9u, 0x000001a8u, 0x000200f8u, 0x000001a8u, 0x000700f5u, 0x00000012u, 0x00000244u, 0x00000020u, 0x000001a1u, 0x000001c0u, 0x000001aeu, 0x000500b1u, 0x00000031u, 0x000001adu, 0x00000244u, 0x0000004cu, 0x000400f6u, 0x000001a9u, 0x000001aeu, 0x00000000u, 0x000400fau, 0x000001adu, 0x000001aeu, 0x000001a9u, 0x000200f8u, 0x000001aeu, 0x00050084u, 0x00000012u, 0x000001b1u, 0x00000244u, 0x000000a6u, 0x0004007cu, 0x00000006u, 0x000001b2u, 0x000001b1u, 0x00050080u, 0x00000006u, 0x000001b3u, 0x00000194u, 0x000001b2u, 0x00040071u, 0x00000078u, 0x000001b5u, 0x00000198u, 0x00060041u, 0x0000007eu, 0x000001b6u, 0x000000a3u, 0x00000020u, 0x000001b3u, 0x0003003eu, 0x000001b6u, 0x000001b5u, 0x00050084u, 0x00000012u, 0x000001b9u, 0x00000244u, 0x000000afu, 0x0004007cu, 0x00000006u, 0x000001bau, 0x000001b9u, 0x00050080u, 0x00000006u, 0x000001bbu, 0x000001a3u, 0x000001bau, 0x00040071u, 0x0000001bu, 0x000001bdu, 0x000001a7u, 0x00060041u, 0x00000022u, 0x000001beu, 0x00000062u, 0x00000020u, 0x000001bbu, 0x0003003eu, 0x000001beu, 0x000001bdu, 0x00050080u, 0x00000012u, 0x000001c0u, 0x00000244u, 0x00000014u, 0x0003003eu, 0x00000192u, 0x000001c0u, 0x000200f9u, 0x000001a8u, 0x000200f8u, 0x000001a9u, 0x00040071u, 0x00000078u, 0x000001c3u, 0x00000198u, 0x0003003eu, 0x0000019au, 0x000001c3u, 0x000200f9u, 0x000001a0u, 0x000200f8u, 0x000001a0u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000132u, 0x0003003eu, 0x0000013cu, 0x0000012eu, 0x000500c7u, 0x00000006u, 0x000001cbu, 0x0000012eu, 0x000000beu, 0x0003003eu, 0x0000013cu, 0x000001cbu, 0x00060041u, 0x000000c7u, 0x000001cdu, 0x000000c5u, 0x00000020u, 0x000001cbu, 0x0004003du, 0x00000006u, 0x000001ceu, 0x000001cdu, 0x0003003eu, 0x000001c5u, 0x000001ceu, 0x00060041u, 0x000000c7u, 0x000001d0u, 0x000000ceu, 0x00000020u, 0x000001cbu, 0x0004003du, 0x00000006u, 0x000001d1u, 0x000001d0u, 0x0003003eu, 0x000001c6u, 0x000001d1u, 0x000500abu, 0x00000031u, 0x000001d4u, 0x000001ceu, 0x000001d1u, 0x000300f7u, 0x000001d5u, 0x00000000u, 0x000400fau, 0x000001d4u, 0x000001d6u, 0x000001d5u, 0x000200f8u, 0x000001d6u, 0x00050084u, 0x00000006u, 0x000001d8u, 0x000000d8u, 0x000001cbu, 0x00060041u, 0x00000022u, 0x000001d9u, 0x0000003du, 0x00000020u, 0x000001d8u, 0x0004003du, 0x0000001bu, 0x000001dau, 0x000001d9u, 0x00040071u, 0x00000006u, 0x000001dbu, 0x000001dau, 0x0003003eu, 0x000001c7u, 0x000001dbu, 0x00050080u, 0x00000006u, 0x000001deu, 0x000001d8u, 0x0000003fu, 0x00060041u, 0x00000022u, 0x000001dfu, 0x0000003du, 0x00000020u, 0x000001deu, 0x0004003du, 0x0000001bu, 0x000001e0u, 0x000001dfu, 0x00040071u, 0x00000006u, 0x000001e1u, 0x000001e0u, 0x0003003eu, 0x000001c8u, 0x000001e1u, 0x0003003eu, 0x000001c9u, 0x00000020u, 0x000200f9u, 0x000001e2u, 0x000200f8u, 0x000001e2u, 0x000700f5u, 0x00000012u, 0x0000023fu, 0x00000020u, 0x000001d6u, 0x00000204u, 0x000001e8u, 0x000500b1u, 0x00000031u, 0x000001e7u, 0x0000023fu, 0x0000004cu, 0x000400f6u, 0x000001e3u, 0x000001e8u, 0x00000000u, 0x000400fau, 0x000001e7u, 0x000001e8u, 0x000001e3u, 0x000200f8u, 0x000001e8u, 0x00050084u, 0x00000012u, 0x000001ebu, 0x0000023fu, 0x000000f3u, 0x0004007cu, 0x00000006u, 0x000001ecu, 0x000001ebu, 0x00050080u, 0x00000006u, 0x000001edu, 0x000001cbu, 0x000001ecu, 0x00060041u, 0x000000c7u, 0x000001efu, 0x000000f0u, 0x00000020u, 0x000001edu, 0x0003003eu, 0x000001efu, 0x000001ceu, 0x00050084u, 0x00000012u, 0x000001f3u, 0x0000023fu, 0x000000fcu, 0x0004007cu, 0x00000006u, 0x000001f4u, 0x000001f3u, 0x00050080u, 0x00000006u, 0x000001f5u, 0x000001d8u, 0x000001f4u, 0x00040071u, 0x0000001bu, 0x000001f7u, 0x000001dbu, 0x00060041u, 0x00000022u, 0x000001f8u, 0x00000062u, 0x00000020u, 0x000001f5u, 0x0003003eu, 0x000001f8u, 0x000001f7u, 0x00050084u, 0x00000012u, 0x000001fdu, 0x0000023fu, 0x00000107u, 0x0004007cu, 0x00000006u, 0x000001feu, 0x000001fdu, 0x00050080u, 0x00000006u, 0x000001ffu, 0x000001deu, 0x000001feu, 0x00040071u, 0x0000001bu, 0x00000201u, 0x000001e1u, 0x00060041u, 0x00000022u, 0x00000202u, 0x00000062u, 0x00000020u, 0x000001ffu, 0x0003003eu, 0x00000202u, 0x00000201u, 0x00050080u, 0x00000012u, 0x00000204u, 0x0000023fu, 0x00000014u, 0x0003003eu, 0x000001c9u, 0x00000204u, 0x000200f9u, 0x000001e2u, 0x000200f8u, 0x000001e3u, 0x0003003eu, 0x000001d0u, 0x000001ceu, 0x000200f9u, 0x000001d5u, 0x000200f8u, 0x000001d5u, 0x000200f9u, 0x00000133u, 0x000200f8u, 0x00000133u, 0x000300f7u, 0x00000144u, 0x00000000u, 0x000400fau, 0x00000142u, 0x00000143u, 0x00000144u, 0x000200f8u, 0x00000143u, 0x0003003eu, 0x00000145u, 0x00000129u, 0x000500c7u, 0x00000006u, 0x0000020eu, 0x00000129u, 0x00000074u, 0x0003003eu, 0x00000145u, 0x0000020eu, 0x00060041u, 0x0000007eu, 0x00000210u, 0x0000007cu, 0x00000020u, 0x0000020eu, 0x0004003du, 0x00000078u, 0x00000211u, 0x00000210u, 0x00040071u, 0x00000006u, 0x00000212u, 0x00000211u, 0x0003003eu, 0x00000208u, 0x00000212u, 0x00060041u, 0x0000007eu, 0x00000214u, 0x00000086u, 0x00000020u, 0x0000020eu, 0x0004003du, 0x00000078u, 0x00000215u, 0x00000214u, 0x00040071u, 0x00000006u, 0x00000216u, 0x00000215u, 0x0003003eu, 0x00000209u, 0x00000216u, 0x000500abu, 0x00000031u, 0x00000219u, 0x00000212u, 0x00000216u, 0x000300f7u, 0x0000021au, 0x00000000u, 0x000400fau, 0x00000219u, 0x0000021bu, 0x0000021au, 0x000200f8u, 0x0000021bu, 0x000500c6u, 0x00000006u, 0x0000021du, 0x0000020eu, 0x0000003fu, 0x0003003eu, 0x0000020au, 0x0000021du, 0x00060041u, 0x00000022u, 0x0000021fu, 0x0000003du, 0x00000020u, 0x0000021du, 0x0004003du, 0x0000001bu, 0x00000220u, 0x0000021fu, 0x00040071u, 0x00000006u, 0x00000221u, 0x00000220u, 0x0003003eu, 0x0000020bu, 0x00000221u, 0x0003003eu, 0x0000020cu, 0x00000020u, 0x000200f9u, 0x00000222u, 0x000200f8u, 0x00000222u, 0x000700f5u, 0x00000012u, 0x00000257u, 0x00000020u, 0x0000021bu, 0x0000023au, 0x00000228u, 0x000500b1u, 0x00000031u, 0x00000227u, 0x00000257u, 0x0000004cu, 0x000400f6u, 0x00000223u, 0x00000228u, 0x00000000u, 0x000400fau, 0x00000227u, 0x00000228u, 0x00000223u, 0x000200f8u, 0x00000228u, 0x00050084u, 0x00000012u, 0x0000022bu, 0x00000257u, 0x000000a6u, 0x0004007cu, 0x00000006u, 0x0000022cu, 0x0000022bu, 0x00050080u, 0x00000006u, 0x0000022du, 0x0000020eu, 0x0000022cu, 0x00040071u, 0x00000078u, 0x0000022fu, 0x00000212u, 0x00060041u, 0x0000007eu, 0x00000230u, 0x000000a3u, 0x00000020u, 0x0000022du, 0x0003003eu, 0x00000230u, 0x0000022fu, 0x00050084u, 0x00000012u, 0x00000233u, 0x00000257u, 0x000000afu, 0x0004007cu, 0x00000006u, 0x00000234u, 0x00000233u, 0x00050080u, 0x00000006u, 0x00000235u, 0x0000021du, 0x00000234u, 0x00040071u, 0x0000001bu, 0x00000237u, 0x00000221u, 0x00060041u, 0x00000022u, 0x00000238u, 0x00000062u, 0x00000020u, 0x00000235u, 0x0003003eu, 0x00000238u, 0x00000237u, 0x00050080u, 0x00000012u, 0x0000023au, 0x00000257u, 0x00000014u, 0x0003003eu, 0x0000020cu, 0x0000023au, 0x000200f9u, 0x00000222u, 0x000200f8u, 0x00000223u, 0x00040071u, 0x00000078u, 0x0000023du, 0x00000212u, 0x0003003eu, 0x00000214u, 0x0000023du, 0x000200f9u, 0x0000021au, 0x000200f8u, 0x0000021au, 0x000200f9u, 0x00000144u, 0x000200f8u, 0x00000144u, 0x0003003eu, 0x0000014eu, 0x0000014fu, 0x000200f9u, 0x0000014au, 0x000200f8u, 0x0000014au, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000000au, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x00000009u, 0x000200f8u, 0x0000000bu, 0x0004003bu, 0x00000007u, 0x0000001au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000026u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000035u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000039u, 0x00000007u, 0x0004003bu, 0x00000044u, 0x00000045u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000018u, 0x00000009u, 0x000500c7u, 0x00000006u, 0x00000019u, 0x00000018u, 0x00000017u, 0x0003003eu, 0x00000009u, 0x00000019u, 0x0004003du, 0x00000006u, 0x00000021u, 0x00000009u, 0x00060041u, 0x00000022u, 0x00000023u, 0x0000001fu, 0x00000020u, 0x00000021u, 0x0004003du, 0x0000001bu, 0x00000024u, 0x00000023u, 0x00040071u, 0x00000006u, 0x00000025u, 0x00000024u, 0x0003003eu, 0x0000001au, 0x00000025u, 0x0004003du, 0x00000006u, 0x0000002bu, 0x00000009u, 0x00060041u, 0x00000022u, 0x0000002cu, 0x0000002au, 0x00000020u, 0x0000002bu, 0x0004003du, 0x0000001bu, 0x0000002du, 0x0000002cu, 0x00040071u, 0x00000006u, 0x0000002eu, 0x0000002du, 0x0003003eu, 0x00000026u, 0x0000002eu, 0x000500abu, 0x00000031u, 0x00000032u, 0x00000025u, 0x0000002eu, 0x000300f7u, 0x00000034u, 0x00000000u, 0x000400fau, 0x00000032u, 0x00000033u, 0x00000034u, 0x000200f8u, 0x00000033u, 0x0004003du, 0x00000006u, 0x00000036u, 0x00000009u, 0x000500c6u, 0x00000006u, 0x00000038u, 0x00000036u, 0x00000037u, 0x0003003eu, 0x00000035u, 0x00000038u, 0x000500c2u, 0x00000006u, 0x00000040u, 0x00000038u, 0x0000003fu, 0x00060041u, 0x00000022u, 0x00000041u, 0x0000003du, 0x00000020u, 0x00000040u, 0x0004003du, 0x0000001bu, 0x00000042u, 0x00000041u, 0x00040071u, 0x00000006u, 0x00000043u, 0x00000042u, 0x0003003eu, 0x00000039u, 0x00000043u, 0x0003003eu, 0x00000045u, 0x00000020u, 0x000200f9u, 0x00000046u, 0x000200f8u, 0x00000046u, 0x000700f5u, 0x00000012u, 0x00000260u, 0x00000020u, 0x00000033u, 0x0000006eu, 0x00000049u, 0x000400f6u, 0x00000048u, 0x00000049u, 0x00000000u, 0x000200f9u, 0x0000004au, 0x000200f8u, 0x0000004au, 0x000500b1u, 0x00000031u, 0x0000004du, 0x00000260u, 0x0000004cu, 0x000400fau, 0x0000004du, 0x00000047u, 0x00000048u, 0x000200f8u, 0x00000047u, 0x0004003du, 0x00000006u, 0x00000052u, 0x00000009u, 0x00050084u, 0x00000012u, 0x00000054u, 0x00000260u, 0x00000013u, 0x0004007cu, 0x00000006u, 0x00000055u, 0x00000054u, 0x00050080u, 0x00000006u, 0x00000056u, 0x00000052u, 0x00000055u, 0x00040071u, 0x0000001bu, 0x00000058u, 0x00000025u, 0x00060041u, 0x00000022u, 0x00000059u, 0x00000051u, 0x00000020u, 0x00000056u, 0x0003003eu, 0x00000059u, 0x00000058u, 0x000500c7u, 0x00000006u, 0x0000005bu, 0x00000038u, 0x0000003fu, 0x000500abu, 0x00000031u, 0x0000005cu, 0x0000005bu, 0x00000016u, 0x000300f7u, 0x0000005eu, 0x00000000u, 0x000400fau, 0x0000005cu, 0x0000005du, 0x0000005eu, 0x000200f8u, 0x0000005du, 0x00050084u, 0x00000012u, 0x00000067u, 0x00000260u, 0x00000066u, 0x0004007cu, 0x00000006u, 0x00000068u, 0x00000067u, 0x00050080u, 0x00000006u, 0x00000069u, 0x00000040u, 0x00000068u, 0x00040071u, 0x0000001bu, 0x0000006bu, 0x00000043u, 0x00060041u, 0x00000022u, 0x0000006cu, 0x00000062u, 0x00000020u, 0x00000069u, 0x0003003eu, 0x0000006cu, 0x0000006bu, 0x000200f9u, 0x0000005eu, 0x000200f8u, 0x0000005eu, 0x000200f9u, 0x00000049u, 0x000200f8u, 0x00000049u, 0x00050080u, 0x00000012u, 0x0000006eu, 0x00000260u, 0x00000014u, 0x0003003eu, 0x00000045u, 0x0000006eu, 0x000200f9u, 0x00000046u, 0x000200f8u, 0x00000048u, 0x0004003du, 0x00000006u, 0x0000006fu, 0x00000009u, 0x00040071u, 0x0000001bu, 0x00000071u, 0x00000025u, 0x00060041u, 0x00000022u, 0x00000072u, 0x0000002au, 0x00000020u, 0x0000006fu, 0x0003003eu, 0x00000072u, 0x00000071u, 0x000200f9u, 0x00000034u, 0x000200f8u, 0x00000034u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000000du, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x0000000cu, 0x000200f8u, 0x0000000eu, 0x0004003bu, 0x00000007u, 0x00000077u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000082u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000090u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000093u, 0x00000007u, 0x0004003bu, 0x00000044u, 0x00000098u, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000075u, 0x0000000cu, 0x000500c7u, 0x00000006u, 0x00000076u, 0x00000075u, 0x00000074u, 0x0003003eu, 0x0000000cu, 0x00000076u, 0x0004003du, 0x00000006u, 0x0000007du, 0x0000000cu, 0x00060041u, 0x0000007eu, 0x0000007fu, 0x0000007cu, 0x00000020u, 0x0000007du, 0x0004003du, 0x00000078u, 0x00000080u, 0x0000007fu, 0x00040071u, 0x00000006u, 0x00000081u, 0x00000080u, 0x0003003eu, 0x00000077u, 0x00000081u, 0x0004003du, 0x00000006u, 0x00000087u, 0x0000000cu, 0x00060041u, 0x0000007eu, 0x00000088u, 0x00000086u, 0x00000020u, 0x00000087u, 0x0004003du, 0x00000078u, 0x00000089u, 0x00000088u, 0x00040071u, 0x00000006u, 0x0000008au, 0x00000089u, 0x0003003eu, 0x00000082u, 0x0000008au, 0x000500abu, 0x00000031u, 0x0000008du, 0x00000081u, 0x0000008au, 0x000300f7u, 0x0000008fu, 0x00000000u, 0x000400fau, 0x0000008du, 0x0000008eu, 0x0000008fu, 0x000200f8u, 0x0000008eu, 0x0004003du, 0x00000006u, 0x00000091u, 0x0000000cu, 0x000500c6u, 0x00000006u, 0x00000092u, 0x00000091u, 0x0000003fu, 0x0003003eu, 0x00000090u, 0x00000092u, 0x00060041u, 0x00000022u, 0x00000095u, 0x0000003du, 0x00000020u, 0x00000092u, 0x0004003du, 0x0000001bu, 0x00000096u, 0x00000095u, 0x00040071u, 0x00000006u, 0x00000097u, 0x00000096u, 0x0003003eu, 0x00000093u, 0x00000097u, 0x0003003eu, 0x00000098u, 0x00000020u, 0x000200f9u, 0x00000099u, 0x000200f8u, 0x00000099u, 0x000700f5u, 0x00000012u, 0x00000268u, 0x00000020u, 0x0000008eu, 0x000000b7u, 0x0000009cu, 0x000400f6u, 0x0000009bu, 0x0000009cu, 0x00000000u, 0x000200f9u, 0x0000009du, 0x000200f8u, 0x0000009du, 0x000500b1u, 0x00000031u, 0x0000009fu, 0x00000268u, 0x0000004cu, 0x000400fau, 0x0000009fu, 0x0000009au, 0x0000009bu, 0x000200f8u, 0x0000009au, 0x0004003du, 0x00000006u, 0x000000a4u, 0x0000000cu, 0x00050084u, 0x00000012u, 0x000000a7u, 0x00000268u, 0x000000a6u, 0x0004007cu, 0x00000006u, 0x000000a8u, 0x000000a7u, 0x00050080u, 0x00000006u, 0x000000a9u, 0x000000a4u, 0x000000a8u, 0x00040071u, 0x00000078u, 0x000000abu, 0x00000081u, 0x00060041u, 0x0000007eu, 0x000000acu, 0x000000a3u, 0x00000020u, 0x000000a9u, 0x0003003eu, 0x000000acu, 0x000000abu, 0x00050084u, 0x00000012u, 0x000000b0u, 0x00000268u, 0x000000afu, 0x0004007cu, 0x00000006u, 0x000000b1u, 0x000000b0u, 0x00050080u, 0x00000006u, 0x000000b2u, 0x00000092u, 0x000000b1u, 0x00040071u, 0x0000001bu, 0x000000b4u, 0x00000097u, 0x00060041u, 0x00000022u, 0x000000b5u, 0x00000062u, 0x00000020u, 0x000000b2u, 0x0003003eu, 0x000000b5u, 0x000000b4u, 0x000200f9u, 0x0000009cu, 0x000200f8u, 0x0000009cu, 0x00050080u, 0x00000012u, 0x000000b7u, 0x00000268u, 0x00000014u, 0x0003003eu, 0x00000098u, 0x000000b7u, 0x000200f9u, 0x00000099u, 0x000200f8u, 0x0000009bu, 0x0004003du, 0x00000006u, 0x000000b8u, 0x0000000cu, 0x00040071u, 0x00000078u, 0x000000bau, 0x00000081u, 0x00060041u, 0x0000007eu, 0x000000bbu, 0x00000086u, 0x00000020u, 0x000000b8u, 0x0003003eu, 0x000000bbu, 0x000000bau, 0x000200f9u, 0x0000008fu, 0x000200f8u, 0x0000008fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000010u, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x0000000fu, 0x000200f8u, 0x00000011u, 0x0004003bu, 0x00000007u, 0x000000c1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000cau, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000d7u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000deu, 0x00000007u, 0x0004003bu, 0x00000044u, 0x000000e5u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000000bfu, 0x0000000fu, 0x000500c7u, 0x00000006u, 0x000000c0u, 0x000000bfu, 0x000000beu, 0x0003003eu, 0x0000000fu, 0x000000c0u, 0x0004003du, 0x00000006u, 0x000000c6u, 0x0000000fu, 0x00060041u, 0x000000c7u, 0x000000c8u, 0x000000c5u, 0x00000020u, 0x000000c6u, 0x0004003du, 0x00000006u, 0x000000c9u, 0x000000c8u, 0x0003003eu, 0x000000c1u, 0x000000c9u, 0x0004003du, 0x00000006u, 0x000000cfu, 0x0000000fu, 0x00060041u, 0x000000c7u, 0x000000d0u, 0x000000ceu, 0x00000020u, 0x000000cfu, 0x0004003du, 0x00000006u, 0x000000d1u, 0x000000d0u, 0x0003003eu, 0x000000cau, 0x000000d1u, 0x000500abu, 0x00000031u, 0x000000d4u, 0x000000c9u, 0x000000d1u, 0x000300f7u, 0x000000d6u, 0x00000000u, 0x000400fau, 0x000000d4u, 0x000000d5u, 0x000000d6u, 0x000200f8u, 0x000000d5u, 0x0004003du, 0x00000006u, 0x000000d9u, 0x0000000fu, 0x00050084u, 0x00000006u, 0x000000dau, 0x000000d8u, 0x000000d9u, 0x00060041u, 0x00000022u, 0x000000dbu, 0x0000003du, 0x00000020u, 0x000000dau, 0x0004003du, 0x0000001bu, 0x000000dcu, 0x000000dbu, 0x00040071u, 0x00000006u, 0x000000ddu, 0x000000dcu, 0x0003003eu, 0x000000d7u, 0x000000ddu, 0x0004003du, 0x00000006u, 0x000000dfu, 0x0000000fu, 0x00050084u, 0x00000006u, 0x000000e0u, 0x000000d8u, 0x000000dfu, 0x00050080u, 0x00000006u, 0x000000e1u, 0x000000e0u, 0x0000003fu, 0x00060041u, 0x00000022u, 0x000000e2u, 0x0000003du, 0x00000020u, 0x000000e1u, 0x0004003du, 0x0000001bu, 0x000000e3u, 0x000000e2u, 0x00040071u, 0x00000006u, 0x000000e4u, 0x000000e3u, 0x0003003eu, 0x000000deu, 0x000000e4u, 0x0003003eu, 0x000000e5u, 0x00000020u, 0x000200f9u, 0x000000e6u, 0x000200f8u, 0x000000e6u, 0x000700f5u, 0x00000012u, 0x0000026cu, 0x00000020u, 0x000000d5u, 0x0000010fu, 0x000000e9u, 0x000400f6u, 0x000000e8u, 0x000000e9u, 0x00000000u, 0x000200f9u, 0x000000eau, 0x000200f8u, 0x000000eau, 0x000500b1u, 0x00000031u, 0x000000ecu, 0x0000026cu, 0x0000004cu, 0x000400fau, 0x000000ecu, 0x000000e7u, 0x000000e8u, 0x000200f8u, 0x000000e7u, 0x0004003du, 0x00000006u, 0x000000f1u, 0x0000000fu, 0x00050084u, 0x00000012u, 0x000000f4u, 0x0000026cu, 0x000000f3u, 0x0004007cu, 0x00000006u, 0x000000f5u, 0x000000f4u, 0x00050080u, 0x00000006u, 0x000000f6u, 0x000000f1u, 0x000000f5u, 0x00060041u, 0x000000c7u, 0x000000f8u, 0x000000f0u, 0x00000020u, 0x000000f6u, 0x0003003eu, 0x000000f8u, 0x000000c9u, 0x0004003du, 0x00000006u, 0x000000f9u, 0x0000000fu, 0x00050084u, 0x00000006u, 0x000000fau, 0x000000d8u, 0x000000f9u, 0x00050084u, 0x00000012u, 0x000000fdu, 0x0000026cu, 0x000000fcu, 0x0004007cu, 0x00000006u, 0x000000feu, 0x000000fdu, 0x00050080u, 0x00000006u, 0x000000ffu, 0x000000fau, 0x000000feu, 0x00040071u, 0x0000001bu, 0x00000101u, 0x000000ddu, 0x00060041u, 0x00000022u, 0x00000102u, 0x00000062u, 0x00000020u, 0x000000ffu, 0x0003003eu, 0x00000102u, 0x00000101u, 0x0004003du, 0x00000006u, 0x00000103u, 0x0000000fu, 0x00050084u, 0x00000006u, 0x00000104u, 0x000000d8u, 0x00000103u, 0x00050080u, 0x00000006u, 0x00000105u, 0x00000104u, 0x0000003fu, 0x00050084u, 0x00000012u, 0x00000108u, 0x0000026cu, 0x00000107u, 0x0004007cu, 0x00000006u, 0x00000109u, 0x00000108u, 0x00050080u, 0x00000006u, 0x0000010au, 0x00000105u, 0x00000109u, 0x00040071u, 0x0000001bu, 0x0000010cu, 0x000000e4u, 0x00060041u, 0x00000022u, 0x0000010du, 0x00000062u, 0x00000020u, 0x0000010au, 0x0003003eu, 0x0000010du, 0x0000010cu, 0x000200f9u, 0x000000e9u, 0x000200f8u, 0x000000e9u, 0x00050080u, 0x00000012u, 0x0000010fu, 0x0000026cu, 0x00000014u, 0x0003003eu, 0x000000e5u, 0x0000010fu, 0x000200f9u, 0x000000e6u, 0x000200f8u, 0x000000e8u, 0x0004003du, 0x00000006u, 0x00000110u, 0x0000000fu, 0x00060041u, 0x000000c7u, 0x00000112u, 0x000000ceu, 0x00000020u, 0x00000110u, 0x0003003eu, 0x00000112u, 0x000000c9u, 0x000200f9u, 0x000000d6u, 0x000200f8u, 0x000000d6u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000302u, 0x00000000u, 0x00020011u, 0x00000001u, 0x00020011u, 0x00001151u, 0x00020011u, 0x00001160u, 0x0007000au, 0x5f565053u, 0x5f52484bu, 0x74696238u, 0x6f74735fu, 0x65676172u, 0x00000000u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000017au, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000029u, 0x00000001u, 0x00000000u, 0x00040047u, 0x0000003du, 0x00000001u, 0x00000004u, 0x00040047u, 0x00000042u, 0x00000006u, 0x00000001u, 0x00040048u, 0x00000043u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000043u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000043u, 0x00000002u, 0x00040047u, 0x00000045u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000045u, 0x00000021u, 0x00000003u, 0x00040047u, 0x00000056u, 0x00000006u, 0x00000001u, 0x00040048u, 0x00000057u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000057u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000057u, 0x00000002u, 0x00040047u, 0x00000059u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000059u, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000005eu, 0x00000006u, 0x00000001u, 0x00040048u, 0x0000005fu, 0x00000000u, 0x00000019u, 0x00050048u, 0x0000005fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x0000005fu, 0x00000002u, 0x00040047u, 0x00000061u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000061u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000066u, 0x00000001u, 0x00000006u, 0x00040047u, 0x0000009fu, 0x00000006u, 0x00000002u, 0x00040048u, 0x000000a0u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000000a0u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000a0u, 0x00000002u, 0x00040047u, 0x000000a2u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000a2u, 0x00000021u, 0x00000003u, 0x00040047u, 0x000000b4u, 0x00000001u, 0x00000005u, 0x00040047u, 0x000000e3u, 0x00000006u, 0x00000002u, 0x00040048u, 0x000000e4u, 0x00000000u, 0x00000019u, 0x00050048u, 0x000000e4u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000e4u, 0x00000002u, 0x00040047u, 0x000000e6u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000e6u, 0x00000021u, 0x00000000u, 0x00040047u, 0x000000ebu, 0x00000006u, 0x00000002u, 0x00040048u, 0x000000ecu, 0x00000000u, 0x00000019u, 0x00050048u, 0x000000ecu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000000ecu, 0x00000002u, 0x00040047u, 0x000000eeu, 0x00000022u, 0x00000000u, 0x00040047u, 0x000000eeu, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000013fu, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000140u, 0x00000000u, 0x00000018u, 0x00050048u, 0x00000140u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000140u, 0x00000002u, 0x00040047u, 0x00000142u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000142u, 0x00000021u, 0x00000003u, 0x00040047u, 0x0000015fu, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000160u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000160u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000160u, 0x00000002u, 0x00040047u, 0x00000162u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000162u, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000166u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000167u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000167u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000167u, 0x00000002u, 0x00040047u, 0x00000169u, 0x00000022u, 0x00000000u, 0x00040047u, 0x00000169u, 0x00000021u, 0x00000002u, 0x00040047u, 0x0000017au, 0x0000000bu, 0x0000001cu, 0x00050048u, 0x0000017fu, 0x00000000u, 0x00000023u, 0x00000000u, 0x00050048u, 0x0000017fu, 0x00000001u, 0x00000023u, 0x00000004u, 0x00050048u, 0x0000017fu, 0x00000002u, 0x00000023u, 0x00000008u, 0x00050048u, 0x0000017fu, 0x00000003u, 0x00000023u, 0x0000000cu, 0x00050048u, 0x0000017fu, 0x00000004u, 0x00000023u, 0x00000010u, 0x00030047u, 0x0000017fu, 0x00000002u, 0x00040047u, 0x000001cdu, 0x00000001u, 0x00000001u, 0x00040047u, 0x000001e5u, 0x00000001u, 0x00000002u, 0x00040047u, 0x000001efu, 0x00000001u, 0x00000003u, 0x00040047u, 0x000001f0u, 0x0000000bu, 0x00000019u, 0x00040047u, 0x000001f1u, 0x00000006u, 0x00000001u, 0x00040048u, 0x000001f2u, 0x00000000u, 0x00000018u, 0x00050048u, 0x000001f2u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x000001f2u, 0x00000002u, 0x00040047u, 0x000001f4u, 0x00000022u, 0x00000000u, 0x00040047u, 0x000001f4u, 0x00000021u, 0x00000004u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x00040020u, 0x00000007u, 0x00000007u, 0x00000006u, 0x00040021u, 0x00000008u, 0x00000002u, 0x00000007u, 0x00040017u, 0x0000000cu, 0x00000006u, 0x00000004u, 0x00040021u, 0x0000000du, 0x0000000cu, 0x00000007u, 0x00040020u, 0x00000011u, 0x00000007u, 0x0000000cu, 0x00040021u, 0x00000012u, 0x00000006u, 0x00000011u, 0x00060021u, 0x00000016u, 0x00000002u, 0x00000007u, 0x00000007u, 0x00000007u, 0x00040015u, 0x00000028u, 0x00000020u, 0x00000001u, 0x00040032u, 0x00000028u, 0x00000029u, 0x00800000u, 0x0004002bu, 0x00000028u, 0x0000002au, 0x00000001u, 0x00060034u, 0x00000028u, 0x0000002bu, 0x00000082u, 0x00000029u, 0x0000002au, 0x0004002bu, 0x00000006u, 0x0000002cu, 0x00000000u, 0x00060034u, 0x00000006u, 0x0000002du, 0x00000080u, 0x0000002bu, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x00000030u, 0x00000003u, 0x00040020u, 0x00000034u, 0x00000007u, 0x00000028u, 0x0004002bu, 0x00000028u, 0x00000036u, 0x00000000u, 0x00040032u, 0x00000028u, 0x0000003du, 0x00000001u, 0x00020014u, 0x0000003eu, 0x00040015u, 0x00000041u, 0x00000008u, 0x00000000u, 0x0003001du, 0x00000042u, 0x00000041u, 0x0003001eu, 0x00000043u, 0x00000042u, 0x00040020u, 0x00000044u, 0x0000000cu, 0x00000043u, 0x0004003bu, 0x00000044u, 0x00000045u, 0x0000000cu, 0x00040020u, 0x00000047u, 0x0000000cu, 0x00000041u, 0x00060034u, 0x00000028u, 0x00000051u, 0x000000c3u, 0x0000003du, 0x0000002au, 0x00060034u, 0x00000006u, 0x00000052u, 0x00000080u, 0x00000051u, 0x0000002cu, 0x00060034u, 0x00000006u, 0x00000054u, 0x00000080u, 0x0000003du, 0x0000002cu, 0x0003001du, 0x00000056u, 0x00000041u, 0x0003001eu, 0x00000057u, 0x00000056u, 0x00040020u, 0x00000058u, 0x0000000cu, 0x00000057u, 0x0004003bu, 0x00000058u, 0x00000059u, 0x0000000cu, 0x0003001du, 0x0000005eu, 0x00000041u, 0x0003001eu, 0x0000005fu, 0x0000005eu, 0x00040020u, 0x00000060u, 0x0000000cu, 0x0000005fu, 0x0004003bu, 0x00000060u, 0x00000061u, 0x0000000cu, 0x00030031u, 0x0000003eu, 0x00000066u, 0x0004002bu, 0x00000006u, 0x00000069u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000006au, 0x00000048u, 0x00060034u, 0x00000006u, 0x0000006cu, 0x00000080u, 0x00000029u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x0000006eu, 0x000000ffu, 0x0004002bu, 0x00000006u, 0x00000073u, 0x0000000bu, 0x0004002bu, 0x00000006u, 0x00000074u, 0x00000006u, 0x0007002cu, 0x0000000cu, 0x00000075u, 0x00000073u, 0x00000074u, 0x00000069u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x00000077u, 0x0000001fu, 0x0007002cu, 0x0000000cu, 0x00000078u, 0x00000077u, 0x00000077u, 0x00000077u, 0x00000069u, 0x0004002bu, 0x00000006u, 0x00000083u, 0x00000002u, 0x00060034u, 0x00000028u, 0x0000008du, 0x000000c3u, 0x0000002bu, 0x0000002au, 0x00060034u, 0x00000006u, 0x0000008eu, 0x00000080u, 0x0000008du, 0x0000002cu, 0x0007002cu, 0x0000000cu, 0x00000094u, 0x0000002cu, 0x0000002cu, 0x0000002cu, 0x0000002cu, 0x00040015u, 0x0000009eu, 0x00000010u, 0x00000000u, 0x0003001du, 0x0000009fu, 0x0000009eu, 0x0003001eu, 0x000000a0u, 0x0000009fu, 0x00040020u, 0x000000a1u, 0x0000000cu, 0x000000a0u, 0x0004003bu, 0x000000a1u, 0x000000a2u, 0x0000000cu, 0x00060034u, 0x00000028u, 0x000000a5u, 0x000000c3u, 0x00000029u, 0x0000002au, 0x00040020u, 0x000000a9u, 0x0000000cu, 0x0000009eu, 0x00030031u, 0x0000003eu, 0x000000b4u, 0x0004002bu, 0x00000006u, 0x000000b8u, 0x00000010u, 0x0004001cu, 0x000000b9u, 0x00000006u, 0x000000b8u, 0x0004002bu, 0x00000006u, 0x000000bau, 0x00000004u, 0x0004002bu, 0x00000006u, 0x000000bbu, 0x00000005u, 0x0004002bu, 0x00000006u, 0x000000bcu, 0x00000007u, 0x0013002cu, 0x000000b9u, 0x000000bdu, 0x0000002cu, 0x000000bau, 0x00000069u, 0x000000bbu, 0x000000bau, 0x0000002cu, 0x000000bbu, 0x00000069u, 0x00000030u, 0x000000bcu, 0x00000083u, 0x00000074u, 0x000000bcu, 0x00000030u, 0x00000074u, 0x00000083u, 0x00040020u, 0x000000c4u, 0x00000007u, 0x000000b9u, 0x00060034u, 0x00000006u, 0x000000c8u, 0x00000080u, 0x0000003du, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x000000cau, 0x00000008u, 0x0004002bu, 0x00000028u, 0x000000d1u, 0x00000008u, 0x00060034u, 0x00000028u, 0x000000d2u, 0x00000084u, 0x000000d1u, 0x0000003du, 0x00060034u, 0x00000006u, 0x000000d3u, 0x00000080u, 0x000000d2u, 0x0000002cu, 0x00060034u, 0x00000028u, 0x000000d8u, 0x000000c3u, 0x0000003du, 0x0000002au, 0x00060034u, 0x00000006u, 0x000000d9u, 0x00000080u, 0x000000d8u, 0x0000002cu, 0x00060034u, 0x00000006u, 0x000000dcu, 0x00000080u, 0x0000003du, 0x0000002cu, 0x0003001du, 0x000000e3u, 0x0000009eu, 0x0003001eu, 0x000000e4u, 0x000000e3u, 0x00040020u, 0x000000e5u, 0x0000000cu, 0x000000e4u, 0x0004003bu, 0x000000e5u, 0x000000e6u, 0x0000000cu, 0x0003001du, 0x000000ebu, 0x0000009eu, 0x0003001eu, 0x000000ecu, 0x000000ebu, 0x00040020u, 0x000000edu, 0x0000000cu, 0x000000ecu, 0x0004003bu, 0x000000edu, 0x000000eeu, 0x0000000cu, 0x00060034u, 0x00000028u, 0x000000f6u, 0x000000c3u, 0x00000029u, 0x00000069u, 0x00060034u, 0x00000006u, 0x000000f7u, 0x00000080u, 0x000000f6u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x000000f9u, 0x0000ffffu, 0x00060034u, 0x00000006u, 0x000000fcu, 0x00000080u, 0x0000008du, 0x0000002cu, 0x00060034u, 0x00000028u, 0x00000111u, 0x000000c3u, 0x00000029u, 0x00000069u, 0x00060034u, 0x00000006u, 0x00000112u, 0x00000080u, 0x00000111u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x00000118u, 0x00000018u, 0x0007002cu, 0x0000000cu, 0x00000119u, 0x00000118u, 0x000000b8u, 0x000000cau, 0x0000002cu, 0x0007002cu, 0x0000000cu, 0x0000011bu, 0x0000006eu, 0x0000006eu, 0x0000006eu, 0x0000006eu, 0x0004002bu, 0x00000028u, 0x00000130u, 0x00000002u, 0x00060034u, 0x00000028u, 0x00000131u, 0x000000c3u, 0x0000002bu, 0x00000130u, 0x00060034u, 0x00000006u, 0x00000132u, 0x00000080u, 0x00000131u, 0x0000002cu, 0x0003001du, 0x0000013fu, 0x00000006u, 0x0003001eu, 0x00000140u, 0x0000013fu, 0x00040020u, 0x00000141u, 0x0000000cu, 0x00000140u, 0x0004003bu, 0x00000141u, 0x00000142u, 0x0000000cu, 0x00060034u, 0x00000028u, 0x00000145u, 0x000000c3u, 0x00000029u, 0x00000130u, 0x00040020u, 0x00000149u, 0x0000000cu, 0x00000006u, 0x00060034u, 0x00000028u, 0x00000154u, 0x000000c3u, 0x0000003du, 0x0000002au, 0x00060034u, 0x00000006u, 0x00000155u, 0x00000080u, 0x00000154u, 0x0000002cu, 0x00060034u, 0x00000006u, 0x00000158u, 0x00000080u, 0x0000003du, 0x0000002cu, 0x0003001du, 0x0000015fu, 0x00000006u, 0x0003001eu, 0x00000160u, 0x0000015fu, 0x00040020u, 0x00000161u, 0x0000000cu, 0x00000160u, 0x0004003bu, 0x00000161u, 0x00000162u, 0x0000000cu, 0x0003001du, 0x00000166u, 0x00000006u, 0x0003001eu, 0x00000167u, 0x00000166u, 0x00040020u, 0x00000168u, 0x0000000cu, 0x00000167u, 0x0004003bu, 0x00000168u, 0x00000169u, 0x0000000cu, 0x00060034u, 0x00000028u, 0x00000170u, 0x000000c3u, 0x00000029u, 0x00000083u, 0x00060034u, 0x00000006u, 0x00000171u, 0x00000080u, 0x00000170u, 0x0000002cu, 0x0004002bu, 0x00000006u, 0x00000173u, 0xffffffffu, 0x00040017u, 0x00000175u, 0x00000006u, 0x00000002u, 0x00040020u, 0x00000176u, 0x00000007u, 0x00000175u, 0x00040017u, 0x00000178u, 0x00000006u, 0x00000003u, 0x00040020u, 0x00000179u, 0x00000001u, 0x00000178u, 0x0004003bu, 0x00000179u, 0x0000017au, 0x00000001u, 0x0007001eu, 0x0000017fu, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00000006u, 0x00040020u, 0x00000180u, 0x00000009u, 0x0000017fu, 0x0004003bu, 0x00000180u, 0x00000181u, 0x00000009u, 0x0004002bu, 0x00000028u, 0x00000182u, 0x00000003u, 0x00040020u, 0x00000183u, 0x00000009u, 0x00000006u, 0x00060034u, 0x00000028u, 0x000001adu, 0x000000c3u, 0x00000029u, 0x00000130u, 0x00060034u, 0x00000028u, 0x000001aeu, 0x00000084u, 0x0000003du, 0x000001adu, 0x00060034u, 0x00000006u, 0x000001afu, 0x00000080u, 0x000001aeu, 0x0000002cu, 0x00040020u, 0x000001c1u, 0x00000007u, 0x0000003eu, 0x00040032u, 0x00000028u, 0x000001cdu, 0x00000000u, 0x00030031u, 0x0000003eu, 0x000001e5u, 0x00050034u, 0x0000003eu, 0x000001e6u, 0x000000a8u, 0x000001e5u, 0x0004002bu, 0x00000028u, 0x000001eeu, 0x00000004u, 0x00040032u, 0x00000006u, 0x000001efu, 0x00000001u, 0x00060033u, 0x00000178u, 0x000001f0u, 0x000001efu, 0x00000069u, 0x00000069u, 0x0003001du, 0x000001f1u, 0x00000041u, 0x0003001eu, 0x000001f2u, 0x000001f1u, 0x00040020u, 0x000001f3u, 0x0000000cu, 0x000001f2u, 0x0004003bu, 0x000001f3u, 0x000001f4u, 0x0000000cu, 0x0003002au, 0x0000003eu, 0x000001f7u, 0x00030029u, 0x0000003eu, 0x000001f9u, 0x0005002cu, 0x00000175u, 0x00000300u, 0x00000083u, 0x00000083u, 0x0007002cu, 0x0000000cu, 0x00000301u, 0x000000cau, 0x000000cau, 0x000000cau, 0x000000cau, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003bu, 0x00000007u, 0x000002c3u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000002b3u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x000002aeu, 0x00000007u, 0x0004003bu, 0x00000011u, 0x00000280u, 0x00000007u, 0x0004003bu, 0x00000034u, 0x00000281u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000282u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000283u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000284u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x00000285u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000271u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x0000026cu, 0x00000007u, 0x0004003bu, 0x00000011u, 0x00000222u, 0x00000007u, 0x0004003bu, 0x00000034u, 0x00000223u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000224u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000225u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000226u, 0x00000007u, 0x0004003bu, 0x000000c4u, 0x00000227u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000228u, 0x00000007u, 0x0004003bu, 0x00000011u, 0x00000229u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001fau, 0x00000007u, 0x0004003bu, 0x00000034u, 0x000001fbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001fcu, 0x00000007u, 0x0005003bu, 0x000001c1u, 0x000001f8u, 0x00000007u, 0x000001f7u, 0x0004003bu, 0x00000176u, 0x00000177u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000018au, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000193u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000198u, 0x00000007u, 0x0004003bu, 0x00000176u, 0x0000019du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001a1u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001acu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001b4u, 0x00000007u, 0x0004003bu, 0x000001c1u, 0x000001c2u, 0x00000007u, 0x0004003bu, 0x000001c1u, 0x000001c6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d2u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d6u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001d8u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001dbu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001e0u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000001ebu, 0x00000007u, 0x000300f7u, 0x000001f5u, 0x00000000u, 0x000300fbu, 0x0000002cu, 0x000001f6u, 0x000200f8u, 0x000001f6u, 0x0004003du, 0x00000178u, 0x0000017bu, 0x0000017au, 0x0007004fu, 0x00000175u, 0x0000017cu, 0x0000017bu, 0x0000017bu, 0x00000000u, 0x00000001u, 0x0003003eu, 0x00000177u, 0x0000017cu, 0x00050041u, 0x00000007u, 0x0000017du, 0x00000177u, 0x0000002cu, 0x0004003du, 0x00000006u, 0x0000017eu, 0x0000017du, 0x00050041u, 0x00000183u, 0x00000184u, 0x00000181u, 0x00000182u, 0x0004003du, 0x00000006u, 0x00000185u, 0x00000184u, 0x000500aeu, 0x0000003eu, 0x00000186u, 0x0000017eu, 0x00000185u, 0x000300f7u, 0x00000188u, 0x00000000u, 0x000400fau, 0x00000186u, 0x00000187u, 0x00000188u, 0x000200f8u, 0x00000187u, 0x0003003eu, 0x000001f8u, 0x000001f9u, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x00000188u, 0x00050041u, 0x00000007u, 0x0000018bu, 0x00000177u, 0x00000069u, 0x0004003du, 0x00000006u, 0x0000018cu, 0x0000018bu, 0x00050084u, 0x00000006u, 0x0000018fu, 0x0000018cu, 0x00000185u, 0x0004003du, 0x00000006u, 0x00000191u, 0x0000017du, 0x00050080u, 0x00000006u, 0x00000192u, 0x0000018fu, 0x00000191u, 0x0003003eu, 0x0000018au, 0x00000192u, 0x00050041u, 0x00000183u, 0x00000195u, 0x00000181u, 0x00000130u, 0x0004003du, 0x00000006u, 0x00000196u, 0x00000195u, 0x00050080u, 0x00000006u, 0x00000197u, 0x00000192u, 0x00000196u, 0x0003003eu, 0x00000193u, 0x00000197u, 0x00050041u, 0x00000183u, 0x0000019au, 0x00000181u, 0x0000002au, 0x0004003du, 0x00000006u, 0x0000019bu, 0x0000019au, 0x00050080u, 0x00000006u, 0x0000019cu, 0x00000192u, 0x0000019bu, 0x0003003eu, 0x00000198u, 0x0000019cu, 0x0004003du, 0x00000175u, 0x0000019eu, 0x00000177u, 0x000500c2u, 0x00000175u, 0x000001a0u, 0x0000019eu, 0x00000300u, 0x0003003eu, 0x0000019du, 0x000001a0u, 0x00050041u, 0x00000007u, 0x000001a2u, 0x0000019du, 0x0000002cu, 0x0004003du, 0x00000006u, 0x000001a3u, 0x000001a2u, 0x00050041u, 0x00000007u, 0x000001a4u, 0x0000019du, 0x00000069u, 0x0004003du, 0x00000006u, 0x000001a5u, 0x000001a4u, 0x00050080u, 0x00000006u, 0x000001a8u, 0x00000185u, 0x00000030u, 0x000500c2u, 0x00000006u, 0x000001a9u, 0x000001a8u, 0x00000083u, 0x00050084u, 0x00000006u, 0x000001aau, 0x000001a5u, 0x000001a9u, 0x00050080u, 0x00000006u, 0x000001abu, 0x000001a3u, 0x000001aau, 0x0003003eu, 0x000001a1u, 0x000001abu, 0x00050080u, 0x00000006u, 0x000001b1u, 0x000001afu, 0x000001abu, 0x00060041u, 0x00000149u, 0x000001b2u, 0x00000142u, 0x00000036u, 0x000001b1u, 0x0004003du, 0x00000006u, 0x000001b3u, 0x000001b2u, 0x0003003eu, 0x000001acu, 0x000001b3u, 0x0004003du, 0x00000006u, 0x000001b6u, 0x0000017du, 0x000500c7u, 0x00000006u, 0x000001b7u, 0x000001b6u, 0x00000030u, 0x0004003du, 0x00000006u, 0x000001b9u, 0x0000018bu, 0x000500c7u, 0x00000006u, 0x000001bau, 0x000001b9u, 0x00000030u, 0x00050084u, 0x00000006u, 0x000001bbu, 0x000000bau, 0x000001bau, 0x00050080u, 0x00000006u, 0x000001bcu, 0x000001b7u, 0x000001bbu, 0x00050084u, 0x00000006u, 0x000001bdu, 0x00000083u, 0x000001bcu, 0x0003003eu, 0x000001b4u, 0x000001bdu, 0x000500c2u, 0x00000006u, 0x000001c0u, 0x000001b3u, 0x000001bdu, 0x0003003eu, 0x000001acu, 0x000001c0u, 0x000500c7u, 0x00000006u, 0x000001c4u, 0x000001c0u, 0x00000069u, 0x000500abu, 0x0000003eu, 0x000001c5u, 0x000001c4u, 0x0000002cu, 0x0003003eu, 0x000001c2u, 0x000001c5u, 0x000500c7u, 0x00000006u, 0x000001c8u, 0x000001c0u, 0x00000083u, 0x000500abu, 0x0000003eu, 0x000001c9u, 0x000001c8u, 0x0000002cu, 0x0003003eu, 0x000001c6u, 0x000001c9u, 0x000300f7u, 0x000001ccu, 0x00000000u, 0x000400fau, 0x000001c5u, 0x000001cbu, 0x000001ccu, 0x000200f8u, 0x000001cbu, 0x000300f7u, 0x000001d1u, 0x00000000u, 0x000900fbu, 0x000001cdu, 0x000001d1u, 0x00000000u, 0x000001ceu, 0x00000001u, 0x000001cfu, 0x00000002u, 0x000001d0u, 0x000200f8u, 0x000001ceu, 0x0003003eu, 0x000001d2u, 0x0000019cu, 0x000500c7u, 0x00000006u, 0x000001feu, 0x0000019cu, 0x0000002du, 0x0003003eu, 0x000001d2u, 0x000001feu, 0x000500c6u, 0x00000006u, 0x00000200u, 0x000001feu, 0x00000030u, 0x0003003eu, 0x000001d2u, 0x00000200u, 0x0003003eu, 0x000001fau, 0x0000002cu, 0x0003003eu, 0x000001fbu, 0x00000036u, 0x000200f9u, 0x00000201u, 0x000200f8u, 0x00000201u, 0x000700f5u, 0x00000006u, 0x000002e5u, 0x0000002cu, 0x000001ceu, 0x0000020eu, 0x00000207u, 0x000700f5u, 0x00000028u, 0x000002e4u, 0x00000036u, 0x000001ceu, 0x00000210u, 0x00000207u, 0x000500b1u, 0x0000003eu, 0x00000206u, 0x000002e4u, 0x0000003du, 0x000400f6u, 0x00000202u, 0x00000207u, 0x00000000u, 0x000400fau, 0x00000206u, 0x00000207u, 0x00000202u, 0x000200f8u, 0x00000207u, 0x00060041u, 0x00000047u, 0x00000209u, 0x00000045u, 0x00000036u, 0x00000200u, 0x0004003du, 0x00000041u, 0x0000020au, 0x00000209u, 0x00040071u, 0x00000006u, 0x0000020bu, 0x0000020au, 0x0003003eu, 0x000001fcu, 0x0000020bu, 0x00050080u, 0x00000006u, 0x0000020eu, 0x000002e5u, 0x0000020bu, 0x0003003eu, 0x000001fau, 0x0000020eu, 0x00050080u, 0x00000028u, 0x00000210u, 0x000002e4u, 0x0000002au, 0x0003003eu, 0x000001fbu, 0x00000210u, 0x000200f9u, 0x00000201u, 0x000200f8u, 0x00000202u, 0x00050080u, 0x00000006u, 0x00000212u, 0x000002e5u, 0x00000052u, 0x00050086u, 0x00000006u, 0x00000213u, 0x00000212u, 0x00000054u, 0x0003003eu, 0x000001fau, 0x00000213u, 0x00040071u, 0x00000041u, 0x00000216u, 0x00000213u, 0x00060041u, 0x00000047u, 0x00000217u, 0x00000059u, 0x00000036u, 0x00000200u, 0x0003003eu, 0x00000217u, 0x00000216u, 0x00060041u, 0x00000047u, 0x0000021bu, 0x00000061u, 0x00000036u, 0x00000200u, 0x0003003eu, 0x0000021bu, 0x00000216u, 0x000300f7u, 0x0000021cu, 0x00000000u, 0x000400fau, 0x00000066u, 0x0000021du, 0x0000021cu, 0x000200f8u, 0x0000021du, 0x000300e1u, 0x00000069u, 0x0000006au, 0x00050080u, 0x00000006u, 0x0000021fu, 0x00000200u, 0x0000006cu, 0x00040071u, 0x00000041u, 0x00000220u, 0x0000006eu, 0x00060041u, 0x00000047u, 0x00000221u, 0x00000061u, 0x00000036u, 0x0000021fu, 0x0003003eu, 0x00000221u, 0x00000220u, 0x000200f9u, 0x0000021cu, 0x000200f8u, 0x0000021cu, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001cfu, 0x0003003eu, 0x000001d6u, 0x0000019cu, 0x0004003du, 0x00000006u, 0x000001dau, 0x0000017du, 0x0003003eu, 0x000001d8u, 0x000001dau, 0x0004003du, 0x00000006u, 0x000001ddu, 0x0000018bu, 0x0003003eu, 0x000001dbu, 0x000001ddu, 0x000500c7u, 0x00000006u, 0x0000022bu, 0x0000019cu, 0x0000008eu, 0x0003003eu, 0x000001d6u, 0x0000022bu, 0x000500c6u, 0x00000006u, 0x0000022du, 0x0000022bu, 0x00000069u, 0x0003003eu, 0x000001d6u, 0x0000022du, 0x0003003eu, 0x00000222u, 0x00000094u, 0x0003003eu, 0x00000223u, 0x00000036u, 0x000200f9u, 0x0000022eu, 0x000200f8u, 0x0000022eu, 0x000700f5u, 0x0000000cu, 0x000002deu, 0x00000094u, 0x000001cfu, 0x00000240u, 0x00000234u, 0x000700f5u, 0x00000028u, 0x000002ddu, 0x00000036u, 0x000001cfu, 0x00000242u, 0x00000234u, 0x000500b1u, 0x0000003eu, 0x00000233u, 0x000002ddu, 0x0000003du, 0x000400f6u, 0x0000022fu, 0x00000234u, 0x00000000u, 0x000400fau, 0x00000233u, 0x00000234u, 0x0000022fu, 0x000200f8u, 0x00000234u, 0x00050084u, 0x00000028u, 0x00000237u, 0x000002ddu, 0x000000a5u, 0x0004007cu, 0x00000006u, 0x00000238u, 0x00000237u, 0x00050080u, 0x00000006u, 0x00000239u, 0x0000022du, 0x00000238u, 0x00060041u, 0x000000a9u, 0x0000023au, 0x000000a2u, 0x00000036u, 0x00000239u, 0x0004003du, 0x0000009eu, 0x0000023bu, 0x0000023au, 0x00040071u, 0x00000006u, 0x0000023cu, 0x0000023bu, 0x0003003eu, 0x00000224u, 0x0000023cu, 0x0003003eu, 0x00000225u, 0x0000023cu, 0x00070050u, 0x0000000cu, 0x0000026eu, 0x0000023cu, 0x0000023cu, 0x0000023cu, 0x0000023cu, 0x000500c2u, 0x0000000cu, 0x0000026fu, 0x0000026eu, 0x00000075u, 0x000500c7u, 0x0000000cu, 0x00000270u, 0x0000026fu, 0x00000078u, 0x0003003eu, 0x0000026cu, 0x00000270u, 0x00050080u, 0x0000000cu, 0x00000240u, 0x000002deu, 0x00000270u, 0x0003003eu, 0x00000222u, 0x00000240u, 0x00050080u, 0x00000028u, 0x00000242u, 0x000002ddu, 0x0000002au, 0x0003003eu, 0x00000223u, 0x00000242u, 0x000200f9u, 0x0000022eu, 0x000200f8u, 0x0000022fu, 0x000300f7u, 0x00000243u, 0x00000000u, 0x000400fau, 0x000000b4u, 0x00000244u, 0x00000245u, 0x000200f8u, 0x00000244u, 0x000500c7u, 0x00000006u, 0x00000247u, 0x000001ddu, 0x00000030u, 0x00050084u, 0x00000006u, 0x00000248u, 0x00000247u, 0x000000bau, 0x000500c7u, 0x00000006u, 0x0000024au, 0x000001dau, 0x00000030u, 0x00050080u, 0x00000006u, 0x0000024bu, 0x00000248u, 0x0000024au, 0x0003003eu, 0x00000227u, 0x000000bdu, 0x00050041u, 0x00000007u, 0x0000024cu, 0x00000227u, 0x0000024bu, 0x0004003du, 0x00000006u, 0x0000024du, 0x0000024cu, 0x00050084u, 0x00000006u, 0x0000024eu, 0x0000024du, 0x000000c8u, 0x0003003eu, 0x00000226u, 0x0000024eu, 0x00050084u, 0x0000000cu, 0x00000251u, 0x00000301u, 0x000002deu, 0x00070050u, 0x0000000cu, 0x00000253u, 0x0000024eu, 0x0000024eu, 0x0000024eu, 0x0000024eu, 0x00050080u, 0x0000000cu, 0x00000254u, 0x00000251u, 0x00000253u, 0x00070050u, 0x0000000cu, 0x00000255u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x00050086u, 0x0000000cu, 0x00000256u, 0x00000254u, 0x00000255u, 0x0003003eu, 0x00000222u, 0x00000256u, 0x000200f9u, 0x00000243u, 0x000200f8u, 0x00000245u, 0x00070050u, 0x0000000cu, 0x00000258u, 0x000000d9u, 0x000000d9u, 0x000000d9u, 0x000000d9u, 0x00050080u, 0x0000000cu, 0x00000259u, 0x000002deu, 0x00000258u, 0x00070050u, 0x0000000cu, 0x0000025au, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x00050086u, 0x0000000cu, 0x0000025bu, 0x00000259u, 0x0000025au, 0x0003003eu, 0x00000222u, 0x0000025bu, 0x000200f9u, 0x00000243u, 0x000200f8u, 0x00000243u, 0x000700f5u, 0x0000000cu, 0x000002e1u, 0x00000256u, 0x00000244u, 0x0000025bu, 0x00000245u, 0x0003003eu, 0x00000229u, 0x000002e1u, 0x00050041u, 0x00000007u, 0x00000272u, 0x00000229u, 0x0000002cu, 0x0004003du, 0x00000006u, 0x00000273u, 0x00000272u, 0x000500c4u, 0x00000006u, 0x00000274u, 0x00000273u, 0x00000073u, 0x00050041u, 0x00000007u, 0x00000275u, 0x00000229u, 0x00000069u, 0x0004003du, 0x00000006u, 0x00000276u, 0x00000275u, 0x000500c4u, 0x00000006u, 0x00000277u, 0x00000276u, 0x00000074u, 0x000500c5u, 0x00000006u, 0x00000278u, 0x00000274u, 0x00000277u, 0x00050041u, 0x00000007u, 0x00000279u, 0x00000229u, 0x00000083u, 0x0004003du, 0x00000006u, 0x0000027au, 0x00000279u, 0x000500c4u, 0x00000006u, 0x0000027bu, 0x0000027au, 0x00000069u, 0x000500c5u, 0x00000006u, 0x0000027cu, 0x00000278u, 0x0000027bu, 0x00050041u, 0x00000007u, 0x0000027du, 0x00000229u, 0x00000030u, 0x0004003du, 0x00000006u, 0x0000027eu, 0x0000027du, 0x000500c5u, 0x00000006u, 0x0000027fu, 0x0000027cu, 0x0000027eu, 0x0003003eu, 0x00000271u, 0x0000027fu, 0x0003003eu, 0x00000228u, 0x0000027fu, 0x00040071u, 0x0000009eu, 0x00000260u, 0x0000027fu, 0x00060041u, 0x000000a9u, 0x00000261u, 0x000000e6u, 0x00000036u, 0x0000022du, 0x0003003eu, 0x00000261u, 0x00000260u, 0x00060041u, 0x000000a9u, 0x00000265u, 0x000000eeu, 0x00000036u, 0x0000022du, 0x0003003eu, 0x00000265u, 0x00000260u, 0x000300f7u, 0x00000266u, 0x00000000u, 0x000400fau, 0x00000066u, 0x00000267u, 0x00000266u, 0x000200f8u, 0x00000267u, 0x000300e1u, 0x00000069u, 0x0000006au, 0x00050080u, 0x00000006u, 0x00000269u, 0x0000022du, 0x000000f7u, 0x00040071u, 0x0000009eu, 0x0000026au, 0x000000f9u, 0x00060041u, 0x000000a9u, 0x0000026bu, 0x000000e6u, 0x00000036u, 0x00000269u, 0x0003003eu, 0x0000026bu, 0x0000026au, 0x000200f9u, 0x00000266u, 0x000200f8u, 0x00000266u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d0u, 0x0003003eu, 0x000001e0u, 0x0000019cu, 0x000500c7u, 0x00000006u, 0x00000287u, 0x0000019cu, 0x00000132u, 0x0003003eu, 0x000001e0u, 0x00000287u, 0x0003003eu, 0x00000280u, 0x00000094u, 0x0003003eu, 0x00000281u, 0x00000036u, 0x000200f9u, 0x00000288u, 0x000200f8u, 0x00000288u, 0x000700f5u, 0x0000000cu, 0x000002dbu, 0x00000094u, 0x000001d0u, 0x00000299u, 0x0000028eu, 0x000700f5u, 0x00000028u, 0x000002dau, 0x00000036u, 0x000001d0u, 0x0000029bu, 0x0000028eu, 0x000500b1u, 0x0000003eu, 0x0000028du, 0x000002dau, 0x0000003du, 0x000400f6u, 0x00000289u, 0x0000028eu, 0x00000000u, 0x000400fau, 0x0000028du, 0x0000028eu, 0x00000289u, 0x000200f8u, 0x0000028eu, 0x00050084u, 0x00000028u, 0x00000291u, 0x000002dau, 0x00000145u, 0x0004007cu, 0x00000006u, 0x00000292u, 0x00000291u, 0x00050080u, 0x00000006u, 0x00000293u, 0x00000287u, 0x00000292u, 0x00060041u, 0x00000149u, 0x00000294u, 0x00000142u, 0x00000036u, 0x00000293u, 0x0004003du, 0x00000006u, 0x00000295u, 0x00000294u, 0x0003003eu, 0x00000282u, 0x00000295u, 0x0003003eu, 0x00000283u, 0x00000295u, 0x00070050u, 0x0000000cu, 0x000002b0u, 0x00000295u, 0x00000295u, 0x00000295u, 0x00000295u, 0x000500c2u, 0x0000000cu, 0x000002b1u, 0x000002b0u, 0x00000119u, 0x000500c7u, 0x0000000cu, 0x000002b2u, 0x000002b1u, 0x0000011bu, 0x0003003eu, 0x000002aeu, 0x000002b2u, 0x00050080u, 0x0000000cu, 0x00000299u, 0x000002dbu, 0x000002b2u, 0x0003003eu, 0x00000280u, 0x00000299u, 0x00050080u, 0x00000028u, 0x0000029bu, 0x000002dau, 0x0000002au, 0x0003003eu, 0x00000281u, 0x0000029bu, 0x000200f9u, 0x00000288u, 0x000200f8u, 0x00000289u, 0x00070050u, 0x0000000cu, 0x0000029du, 0x00000155u, 0x00000155u, 0x00000155u, 0x00000155u, 0x00050080u, 0x0000000cu, 0x0000029eu, 0x000002dbu, 0x0000029du, 0x00070050u, 0x0000000cu, 0x0000029fu, 0x00000158u, 0x00000158u, 0x00000158u, 0x00000158u, 0x00050086u, 0x0000000cu, 0x000002a0u, 0x0000029eu, 0x0000029fu, 0x0003003eu, 0x00000280u, 0x000002a0u, 0x0003003eu, 0x00000285u, 0x000002a0u, 0x00050041u, 0x00000007u, 0x000002b4u, 0x00000285u, 0x0000002cu, 0x0004003du, 0x00000006u, 0x000002b5u, 0x000002b4u, 0x000500c4u, 0x00000006u, 0x000002b6u, 0x000002b5u, 0x00000118u, 0x00050041u, 0x00000007u, 0x000002b7u, 0x00000285u, 0x00000069u, 0x0004003du, 0x00000006u, 0x000002b8u, 0x000002b7u, 0x000500c4u, 0x00000006u, 0x000002b9u, 0x000002b8u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x000002bau, 0x000002b6u, 0x000002b9u, 0x00050041u, 0x00000007u, 0x000002bbu, 0x00000285u, 0x00000083u, 0x0004003du, 0x00000006u, 0x000002bcu, 0x000002bbu, 0x000500c4u, 0x00000006u, 0x000002bdu, 0x000002bcu, 0x000000cau, 0x000500c5u, 0x00000006u, 0x000002beu, 0x000002bau, 0x000002bdu, 0x00050041u, 0x00000007u, 0x000002bfu, 0x00000285u, 0x00000030u, 0x0004003du, 0x00000006u, 0x000002c0u, 0x000002bfu, 0x000500c4u, 0x00000006u, 0x000002c1u, 0x000002c0u, 0x0000002cu, 0x000500c5u, 0x00000006u, 0x000002c2u, 0x000002beu, 0x000002c1u, 0x0003003eu, 0x000002b3u, 0x000002c2u, 0x0003003eu, 0x00000284u, 0x000002c2u, 0x00060041u, 0x00000149u, 0x000002a5u, 0x00000162u, 0x00000036u, 0x00000287u, 0x0003003eu, 0x000002a5u, 0x000002c2u, 0x00060041u, 0x00000149u, 0x000002a8u, 0x00000169u, 0x00000036u, 0x00000287u, 0x0003003eu, 0x000002a8u, 0x000002c2u, 0x000300f7u, 0x000002a9u, 0x00000000u, 0x000400fau, 0x00000066u, 0x000002aau, 0x000002a9u, 0x000200f8u, 0x000002aau, 0x000300e1u, 0x00000069u, 0x0000006au, 0x00050080u, 0x00000006u, 0x000002acu, 0x00000287u, 0x00000171u, 0x00060041u, 0x00000149u, 0x000002adu, 0x00000162u, 0x00000036u, 0x000002acu, 0x0003003eu, 0x000002adu, 0x00000173u, 0x000200f9u, 0x000002a9u, 0x000200f8u, 0x000002a9u, 0x000200f9u, 0x000001d1u, 0x000200f8u, 0x000001d1u, 0x000200f9u, 0x000001ccu, 0x000200f8u, 0x000001ccu, 0x000500a7u, 0x0000003eu, 0x000001e8u, 0x000001e6u, 0x000001c9u, 0x000300f7u, 0x000001eau, 0x00000000u, 0x000400fau, 0x000001e8u, 0x000001e9u, 0x000001eau, 0x000200f8u, 0x000001e9u, 0x0003003eu, 0x000001ebu, 0x00000197u, 0x000500c7u, 0x00000006u, 0x000002c5u, 0x00000197u, 0x000000fcu, 0x0003003eu, 0x000001ebu, 0x000002c5u, 0x000500c6u, 0x00000006u, 0x000002c7u, 0x000002c5u, 0x00000069u, 0x0003003eu, 0x000001ebu, 0x000002c7u, 0x00060041u, 0x000000a9u, 0x000002c9u, 0x000000a2u, 0x00000036u, 0x000002c7u, 0x0004003du, 0x0000009eu, 0x000002cau, 0x000002c9u, 0x00040071u, 0x00000006u, 0x000002cbu, 0x000002cau, 0x0003003eu, 0x000002c3u, 0x000002cbu, 0x00040071u, 0x0000009eu, 0x000002ceu, 0x000002cbu, 0x00060041u, 0x000000a9u, 0x000002cfu, 0x000000e6u, 0x00000036u, 0x000002c7u, 0x0003003eu, 0x000002cfu, 0x000002ceu, 0x00060041u, 0x000000a9u, 0x000002d3u, 0x000000eeu, 0x00000036u, 0x000002c7u, 0x0003003eu, 0x000002d3u, 0x000002ceu, 0x000300f7u, 0x000002d4u, 0x00000000u, 0x000400fau, 0x00000066u, 0x000002d5u, 0x000002d4u, 0x000200f8u, 0x000002d5u, 0x000300e1u, 0x00000069u, 0x0000006au, 0x00050080u, 0x00000006u, 0x000002d7u, 0x000002c7u, 0x00000112u, 0x00040071u, 0x0000009eu, 0x000002d8u, 0x000000f9u, 0x00060041u, 0x000000a9u, 0x000002d9u, 0x000000e6u, 0x00000036u, 0x000002d7u, 0x0003003eu, 0x000002d9u, 0x000002d8u, 0x000200f9u, 0x000002d4u, 0x000200f8u, 0x000002d4u, 0x000200f9u, 0x000001eau, 0x000200f8u, 0x000001eau, 0x0003003eu, 0x000001f8u, 0x000001f9u, 0x000200f9u, 0x000001f5u, 0x000200f8u, 0x000001f5u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000000au, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x00000009u, 0x000200f8u, 0x0000000bu, 0x0004003bu, 0x00000007u, 0x00000033u, 0x00000007u, 0x0004003bu, 0x00000034u, 0x00000035u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x00000040u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000002eu, 0x00000009u, 0x000500c7u, 0x00000006u, 0x0000002fu, 0x0000002eu, 0x0000002du, 0x0003003eu, 0x00000009u, 0x0000002fu, 0x0004003du, 0x00000006u, 0x00000031u, 0x00000009u, 0x000500c6u, 0x00000006u, 0x00000032u, 0x00000031u, 0x00000030u, 0x0003003eu, 0x00000009u, 0x00000032u, 0x0003003eu, 0x00000033u, 0x0000002cu, 0x0003003eu, 0x00000035u, 0x00000036u, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000037u, 0x000700f5u, 0x00000006u, 0x000002fau, 0x0000002cu, 0x0000000bu, 0x0000004du, 0x0000003au, 0x000700f5u, 0x00000028u, 0x000002f9u, 0x00000036u, 0x0000000bu, 0x0000004fu, 0x0000003au, 0x000400f6u, 0x00000039u, 0x0000003au, 0x00000000u, 0x000200f9u, 0x0000003bu, 0x000200f8u, 0x0000003bu, 0x000500b1u, 0x0000003eu, 0x0000003fu, 0x000002f9u, 0x0000003du, 0x000400fau, 0x0000003fu, 0x00000038u, 0x00000039u, 0x000200f8u, 0x00000038u, 0x0004003du, 0x00000006u, 0x00000046u, 0x00000009u, 0x00060041u, 0x00000047u, 0x00000048u, 0x00000045u, 0x00000036u, 0x00000046u, 0x0004003du, 0x00000041u, 0x00000049u, 0x00000048u, 0x00040071u, 0x00000006u, 0x0000004au, 0x00000049u, 0x0003003eu, 0x00000040u, 0x0000004au, 0x00050080u, 0x00000006u, 0x0000004du, 0x000002fau, 0x0000004au, 0x0003003eu, 0x00000033u, 0x0000004du, 0x000200f9u, 0x0000003au, 0x000200f8u, 0x0000003au, 0x00050080u, 0x00000028u, 0x0000004fu, 0x000002f9u, 0x0000002au, 0x0003003eu, 0x00000035u, 0x0000004fu, 0x000200f9u, 0x00000037u, 0x000200f8u, 0x00000039u, 0x00050080u, 0x00000006u, 0x00000053u, 0x000002fau, 0x00000052u, 0x00050086u, 0x00000006u, 0x00000055u, 0x00000053u, 0x00000054u, 0x0003003eu, 0x00000033u, 0x00000055u, 0x0004003du, 0x00000006u, 0x0000005au, 0x00000009u, 0x00040071u, 0x00000041u, 0x0000005cu, 0x00000055u, 0x00060041u, 0x00000047u, 0x0000005du, 0x00000059u, 0x00000036u, 0x0000005au, 0x0003003eu, 0x0000005du, 0x0000005cu, 0x0004003du, 0x00000006u, 0x00000062u, 0x00000009u, 0x00060041u, 0x00000047u, 0x00000065u, 0x00000061u, 0x00000036u, 0x00000062u, 0x0003003eu, 0x00000065u, 0x0000005cu, 0x000300f7u, 0x00000068u, 0x00000000u, 0x000400fau, 0x00000066u, 0x00000067u, 0x00000068u, 0x000200f8u, 0x00000067u, 0x000300e1u, 0x00000069u, 0x0000006au, 0x0004003du, 0x00000006u, 0x0000006bu, 0x00000009u, 0x00050080u, 0x00000006u, 0x0000006du, 0x0000006bu, 0x0000006cu, 0x00040071u, 0x00000041u, 0x0000006fu, 0x0000006eu, 0x00060041u, 0x00000047u, 0x00000070u, 0x00000061u, 0x00000036u, 0x0000006du, 0x0003003eu, 0x00000070u, 0x0000006fu, 0x000200f9u, 0x00000068u, 0x000200f8u, 0x00000068u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000cu, 0x0000000fu, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000007u, 0x0000000eu, 0x000200f8u, 0x00000010u, 0x0004003du, 0x00000006u, 0x00000071u, 0x0000000eu, 0x00070050u, 0x0000000cu, 0x00000072u, 0x00000071u, 0x00000071u, 0x00000071u, 0x00000071u, 0x000500c2u, 0x0000000cu, 0x00000076u, 0x00000072u, 0x00000075u, 0x000500c7u, 0x0000000cu, 0x00000079u, 0x00000076u, 0x00000078u, 0x000200feu, 0x00000079u, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000014u, 0x00000000u, 0x00000012u, 0x00030037u, 0x00000011u, 0x00000013u, 0x000200f8u, 0x00000015u, 0x00050041u, 0x00000007u, 0x0000007cu, 0x00000013u, 0x0000002cu, 0x0004003du, 0x00000006u, 0x0000007du, 0x0000007cu, 0x000500c4u, 0x00000006u, 0x0000007eu, 0x0000007du, 0x00000073u, 0x00050041u, 0x00000007u, 0x0000007fu, 0x00000013u, 0x00000069u, 0x0004003du, 0x00000006u, 0x00000080u, 0x0000007fu, 0x000500c4u, 0x00000006u, 0x00000081u, 0x00000080u, 0x00000074u, 0x000500c5u, 0x00000006u, 0x00000082u, 0x0000007eu, 0x00000081u, 0x00050041u, 0x00000007u, 0x00000084u, 0x00000013u, 0x00000083u, 0x0004003du, 0x00000006u, 0x00000085u, 0x00000084u, 0x000500c4u, 0x00000006u, 0x00000086u, 0x00000085u, 0x00000069u, 0x000500c5u, 0x00000006u, 0x00000087u, 0x00000082u, 0x00000086u, 0x00050041u, 0x00000007u, 0x00000088u, 0x00000013u, 0x00000030u, 0x0004003du, 0x00000006u, 0x00000089u, 0x00000088u, 0x000500c5u, 0x00000006u, 0x0000008au, 0x00000087u, 0x00000089u, 0x000200feu, 0x0000008au, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000001au, 0x00000000u, 0x00000016u, 0x00030037u, 0x00000007u, 0x00000017u, 0x00030037u, 0x00000007u, 0x00000018u, 0x00030037u, 0x00000007u, 0x00000019u, 0x000200f8u, 0x0000001bu, 0x0004003bu, 0x00000011u, 0x00000093u, 0x00000007u, 0x0004003bu, 0x00000034u, 0x00000095u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000009du, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000adu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000b7u, 0x00000007u, 0x0004003bu, 0x000000c4u, 0x000000c5u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x000000dfu, 0x00000007u, 0x0004003bu, 0x00000011u, 0x000000e0u, 0x00000007u, 0x0004003du, 0x00000006u, 0x0000008fu, 0x00000017u, 0x000500c7u, 0x00000006u, 0x00000090u, 0x0000008fu, 0x0000008eu, 0x0003003eu, 0x00000017u, 0x00000090u, 0x0004003du, 0x00000006u, 0x00000091u, 0x00000017u, 0x000500c6u, 0x00000006u, 0x00000092u, 0x00000091u, 0x00000069u, 0x0003003eu, 0x00000017u, 0x00000092u, 0x0003003eu, 0x00000093u, 0x00000094u, 0x0003003eu, 0x00000095u, 0x00000036u, 0x000200f9u, 0x00000096u, 0x000200f8u, 0x00000096u, 0x000700f5u, 0x0000000cu, 0x000002fcu, 0x00000094u, 0x0000001bu, 0x000000b1u, 0x00000099u, 0x000700f5u, 0x00000028u, 0x000002fbu, 0x00000036u, 0x0000001bu, 0x000000b3u, 0x00000099u, 0x000400f6u, 0x00000098u, 0x00000099u, 0x00000000u, 0x000200f9u, 0x0000009au, 0x000200f8u, 0x0000009au, 0x000500b1u, 0x0000003eu, 0x0000009cu, 0x000002fbu, 0x0000003du, 0x000400fau, 0x0000009cu, 0x00000097u, 0x00000098u, 0x000200f8u, 0x00000097u, 0x0004003du, 0x00000006u, 0x000000a3u, 0x00000017u, 0x00050084u, 0x00000028u, 0x000000a6u, 0x000002fbu, 0x000000a5u, 0x0004007cu, 0x00000006u, 0x000000a7u, 0x000000a6u, 0x00050080u, 0x00000006u, 0x000000a8u, 0x000000a3u, 0x000000a7u, 0x00060041u, 0x000000a9u, 0x000000aau, 0x000000a2u, 0x00000036u, 0x000000a8u, 0x0004003du, 0x0000009eu, 0x000000abu, 0x000000aau, 0x00040071u, 0x00000006u, 0x000000acu, 0x000000abu, 0x0003003eu, 0x0000009du, 0x000000acu, 0x0003003eu, 0x000000adu, 0x000000acu, 0x00050039u, 0x0000000cu, 0x000000afu, 0x0000000fu, 0x000000adu, 0x00050080u, 0x0000000cu, 0x000000b1u, 0x000002fcu, 0x000000afu, 0x0003003eu, 0x00000093u, 0x000000b1u, 0x000200f9u, 0x00000099u, 0x000200f8u, 0x00000099u, 0x00050080u, 0x00000028u, 0x000000b3u, 0x000002fbu, 0x0000002au, 0x0003003eu, 0x00000095u, 0x000000b3u, 0x000200f9u, 0x00000096u, 0x000200f8u, 0x00000098u, 0x000300f7u, 0x000000b6u, 0x00000000u, 0x000400fau, 0x000000b4u, 0x000000b5u, 0x000000d6u, 0x000200f8u, 0x000000b5u, 0x0004003du, 0x00000006u, 0x000000beu, 0x00000019u, 0x000500c7u, 0x00000006u, 0x000000bfu, 0x000000beu, 0x00000030u, 0x00050084u, 0x00000006u, 0x000000c0u, 0x000000bfu, 0x000000bau, 0x0004003du, 0x00000006u, 0x000000c1u, 0x00000018u, 0x000500c7u, 0x00000006u, 0x000000c2u, 0x000000c1u, 0x00000030u, 0x00050080u, 0x00000006u, 0x000000c3u, 0x000000c0u, 0x000000c2u, 0x0003003eu, 0x000000c5u, 0x000000bdu, 0x00050041u, 0x00000007u, 0x000000c6u, 0x000000c5u, 0x000000c3u, 0x0004003du, 0x00000006u, 0x000000c7u, 0x000000c6u, 0x00050084u, 0x00000006u, 0x000000c9u, 0x000000c7u, 0x000000c8u, 0x0003003eu, 0x000000b7u, 0x000000c9u, 0x00050084u, 0x0000000cu, 0x000000cdu, 0x00000301u, 0x000002fcu, 0x00070050u, 0x0000000cu, 0x000000cfu, 0x000000c9u, 0x000000c9u, 0x000000c9u, 0x000000c9u, 0x00050080u, 0x0000000cu, 0x000000d0u, 0x000000cdu, 0x000000cfu, 0x00070050u, 0x0000000cu, 0x000000d4u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x000000d3u, 0x00050086u, 0x0000000cu, 0x000000d5u, 0x000000d0u, 0x000000d4u, 0x0003003eu, 0x00000093u, 0x000000d5u, 0x000200f9u, 0x000000b6u, 0x000200f8u, 0x000000d6u, 0x00070050u, 0x0000000cu, 0x000000dau, 0x000000d9u, 0x000000d9u, 0x000000d9u, 0x000000d9u, 0x00050080u, 0x0000000cu, 0x000000dbu, 0x000002fcu, 0x000000dau, 0x00070050u, 0x0000000cu, 0x000000ddu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x000000dcu, 0x00050086u, 0x0000000cu, 0x000000deu, 0x000000dbu, 0x000000ddu, 0x0003003eu, 0x00000093u, 0x000000deu, 0x000200f9u, 0x000000b6u, 0x000200f8u, 0x000000b6u, 0x000700f5u, 0x0000000cu, 0x000002fdu, 0x000000d5u, 0x000000b5u, 0x000000deu, 0x000000d6u, 0x0003003eu, 0x000000e0u, 0x000002fdu, 0x00050039u, 0x00000006u, 0x000000e2u, 0x00000014u, 0x000000e0u, 0x0003003eu, 0x000000dfu, 0x000000e2u, 0x0004003du, 0x00000006u, 0x000000e7u, 0x00000017u, 0x00040071u, 0x0000009eu, 0x000000e9u, 0x000000e2u, 0x00060041u, 0x000000a9u, 0x000000eau, 0x000000e6u, 0x00000036u, 0x000000e7u, 0x0003003eu, 0x000000eau, 0x000000e9u, 0x0004003du, 0x00000006u, 0x000000efu, 0x00000017u, 0x00060041u, 0x000000a9u, 0x000000f2u, 0x000000eeu, 0x00000036u, 0x000000efu, 0x0003003eu, 0x000000f2u, 0x000000e9u, 0x000300f7u, 0x000000f4u, 0x00000000u, 0x000400fau, 0x00000066u, 0x000000f3u, 0x000000f4u, 0x000200f8u, 0x000000f3u, 0x000300e1u, 0x00000069u, 0x0000006au, 0x0004003du, 0x00000006u, 0x000000f5u, 0x00000017u, 0x00050080u, 0x00000006u, 0x000000f8u, 0x000000f5u, 0x000000f7u, 0x00040071u, 0x0000009eu, 0x000000fau, 0x000000f9u, 0x00060041u, 0x000000a9u, 0x000000fbu, 0x000000e6u, 0x00000036u, 0x000000f8u, 0x0003003eu, 0x000000fbu, 0x000000fau, 0x000200f9u, 0x000000f4u, 0x000200f8u, 0x000000f4u, 0x000100fdu, 0x00010038u, 0x00050036u, 0x00000002u, 0x0000001du, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x0000001cu, 0x000200f8u, 0x0000001eu, 0x0004003bu, 0x00000007u, 0x00000101u, 0x00000007u, 0x0004003du, 0x00000006u, 0x000000fdu, 0x0000001cu, 0x000500c7u, 0x00000006u, 0x000000feu, 0x000000fdu, 0x000000fcu, 0x0003003eu, 0x0000001cu, 0x000000feu, 0x0004003du, 0x00000006u, 0x000000ffu, 0x0000001cu, 0x000500c6u, 0x00000006u, 0x00000100u, 0x000000ffu, 0x00000069u, 0x0003003eu, 0x0000001cu, 0x00000100u, 0x0004003du, 0x00000006u, 0x00000102u, 0x0000001cu, 0x00060041u, 0x000000a9u, 0x00000103u, 0x000000a2u, 0x00000036u, 0x00000102u, 0x0004003du, 0x0000009eu, 0x00000104u, 0x00000103u, 0x00040071u, 0x00000006u, 0x00000105u, 0x00000104u, 0x0003003eu, 0x00000101u, 0x00000105u, 0x0004003du, 0x00000006u, 0x00000106u, 0x0000001cu, 0x00040071u, 0x0000009eu, 0x00000108u, 0x00000105u, 0x00060041u, 0x000000a9u, 0x00000109u, 0x000000e6u, 0x00000036u, 0x00000106u, 0x0003003eu, 0x00000109u, 0x00000108u, 0x0004003du, 0x00000006u, 0x0000010au, 0x0000001cu, 0x00060041u, 0x000000a9u, 0x0000010du, 0x000000eeu, 0x00000036u, 0x0000010au, 0x0003003eu, 0x0000010du, 0x00000108u, 0x000300f7u, 0x0000010fu, 0x00000000u, 0x000400fau, 0x00000066u, 0x0000010eu, 0x0000010fu, 0x000200f8u, 0x0000010eu, 0x000300e1u, 0x00000069u, 0x0000006au, 0x0004003du, 0x00000006u, 0x00000110u, 0x0000001cu, 0x00050080u, 0x00000006u, 0x00000113u, 0x00000110u, 0x00000112u, 0x00040071u, 0x0000009eu, 0x00000114u, 0x000000f9u, 0x00060041u, 0x000000a9u, 0x00000115u, 0x000000e6u, 0x00000036u, 0x00000113u, 0x0003003eu, 0x00000115u, 0x00000114u, 0x000200f9u, 0x0000010fu, 0x000200f8u, 0x0000010fu, 0x000100fdu, 0x00010038u, 0x00050036u, 0x0000000cu, 0x00000020u, 0x00000000u, 0x0000000du, 0x00030037u, 0x00000007u, 0x0000001fu, 0x000200f8u, 0x00000021u, 0x0004003du, 0x00000006u, 0x00000116u, 0x0000001fu, 0x00070050u, 0x0000000cu, 0x00000117u, 0x00000116u, 0x00000116u, 0x00000116u, 0x00000116u, 0x000500c2u, 0x0000000cu, 0x0000011au, 0x00000117u, 0x00000119u, 0x000500c7u, 0x0000000cu, 0x0000011cu, 0x0000011au, 0x0000011bu, 0x000200feu, 0x0000011cu, 0x00010038u, 0x00050036u, 0x00000006u, 0x00000023u, 0x00000000u, 0x00000012u, 0x00030037u, 0x00000011u, 0x00000022u, 0x000200f8u, 0x00000024u, 0x00050041u, 0x00000007u, 0x0000011fu, 0x00000022u, 0x0000002cu, 0x0004003du, 0x00000006u, 0x00000120u, 0x0000011fu, 0x000500c4u, 0x00000006u, 0x00000121u, 0x00000120u, 0x00000118u, 0x00050041u, 0x00000007u, 0x00000122u, 0x00000022u, 0x00000069u, 0x0004003du, 0x00000006u, 0x00000123u, 0x00000122u, 0x000500c4u, 0x00000006u, 0x00000124u, 0x00000123u, 0x000000b8u, 0x000500c5u, 0x00000006u, 0x00000125u, 0x00000121u, 0x00000124u, 0x00050041u, 0x00000007u, 0x00000126u, 0x00000022u, 0x00000083u, 0x0004003du, 0x00000006u, 0x00000127u, 0x00000126u, 0x000500c4u, 0x00000006u, 0x00000128u, 0x00000127u, 0x000000cau, 0x000500c5u, 0x00000006u, 0x00000129u, 0x00000125u, 0x00000128u, 0x00050041u, 0x00000007u, 0x0000012au, 0x00000022u, 0x00000030u, 0x0004003du, 0x00000006u, 0x0000012bu, 0x0000012au, 0x000500c4u, 0x00000006u, 0x0000012cu, 0x0000012bu, 0x0000002cu, 0x000500c5u, 0x00000006u, 0x0000012du, 0x00000129u, 0x0000012cu, 0x000200feu, 0x0000012du, 0x00010038u, 0x00050036u, 0x00000002u, 0x00000026u, 0x00000000u, 0x00000008u, 0x00030037u, 0x00000007u, 0x00000025u, 0x000200f8u, 0x00000027u, 0x0004003bu, 0x00000011u, 0x00000135u, 0x00000007u, 0x0004003bu, 0x00000034u, 0x00000136u, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000013eu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000014cu, 0x00000007u, 0x0004003bu, 0x00000007u, 0x0000015bu, 0x00000007u, 0x0004003bu, 0x00000011u, 0x0000015cu, 0x00000007u, 0x0004003du, 0x00000006u, 0x00000133u, 0x00000025u, 0x000500c7u, 0x00000006u, 0x00000134u, 0x00000133u, 0x00000132u, 0x0003003eu, 0x00000025u, 0x00000134u, 0x0003003eu, 0x00000135u, 0x00000094u, 0x0003003eu, 0x00000136u, 0x00000036u, 0x000200f9u, 0x00000137u, 0x000200f8u, 0x00000137u, 0x000700f5u, 0x0000000cu, 0x000002ffu, 0x00000094u, 0x00000027u, 0x00000150u, 0x0000013au, 0x000700f5u, 0x00000028u, 0x000002feu, 0x00000036u, 0x00000027u, 0x00000152u, 0x0000013au, 0x000400f6u, 0x00000139u, 0x0000013au, 0x00000000u, 0x000200f9u, 0x0000013bu, 0x000200f8u, 0x0000013bu, 0x000500b1u, 0x0000003eu, 0x0000013du, 0x000002feu, 0x0000003du, 0x000400fau, 0x0000013du, 0x00000138u, 0x00000139u, 0x000200f8u, 0x00000138u, 0x0004003du, 0x00000006u, 0x00000143u, 0x00000025u, 0x00050084u, 0x00000028u, 0x00000146u, 0x000002feu, 0x00000145u, 0x0004007cu, 0x00000006u, 0x00000147u, 0x00000146u, 0x00050080u, 0x00000006u, 0x00000148u, 0x00000143u, 0x00000147u, 0x00060041u, 0x00000149u, 0x0000014au, 0x00000142u, 0x00000036u, 0x00000148u, 0x0004003du, 0x00000006u, 0x0000014bu, 0x0000014au, 0x0003003eu, 0x0000013eu, 0x0000014bu, 0x0003003eu, 0x0000014cu, 0x0000014bu, 0x00050039u, 0x0000000cu, 0x0000014eu, 0x00000020u, 0x0000014cu, 0x00050080u, 0x0000000cu, 0x00000150u, 0x000002ffu, 0x0000014eu, 0x0003003eu, 0x00000135u, 0x00000150u, 0x000200f9u, 0x0000013au, 0x000200f8u, 0x0000013au, 0x00050080u, 0x00000028u, 0x00000152u, 0x000002feu, 0x0000002au, 0x0003003eu, 0x00000136u, 0x00000152u, 0x000200f9u, 0x00000137u, 0x000200f8u, 0x00000139u, 0x00070050u, 0x0000000cu, 0x00000156u, 0x00000155u, 0x00000155u, 0x00000155u, 0x00000155u, 0x00050080u, 0x0000000cu, 0x00000157u, 0x000002ffu, 0x00000156u, 0x00070050u, 0x0000000cu, 0x00000159u, 0x00000158u, 0x00000158u, 0x00000158u, 0x00000158u, 0x00050086u, 0x0000000cu, 0x0000015au, 0x00000157u, 0x00000159u, 0x0003003eu, 0x00000135u, 0x0000015au, 0x0003003eu, 0x0000015cu, 0x0000015au, 0x00050039u, 0x00000006u, 0x0000015eu, 0x00000023u, 0x0000015cu, 0x0003003eu, 0x0000015bu, 0x0000015eu, 0x0004003du, 0x00000006u, 0x00000163u, 0x00000025u, 0x00060041u, 0x00000149u, 0x00000165u, 0x00000162u, 0x00000036u, 0x00000163u, 0x0003003eu, 0x00000165u, 0x0000015eu, 0x0004003du, 0x00000006u, 0x0000016au, 0x00000025u, 0x00060041u, 0x00000149u, 0x0000016cu, 0x00000169u, 0x00000036u, 0x0000016au, 0x0003003eu, 0x0000016cu, 0x0000015eu, 0x000300f7u, 0x0000016eu, 0x00000000u, 0x000400fau, 0x00000066u, 0x0000016du, 0x0000016eu, 0x000200f8u, 0x0000016du, 0x000300e1u, 0x00000069u, 0x0000006au, 0x0004003du, 0x00000006u, 0x0000016fu, 0x00000025u, 0x00050080u, 0x00000006u, 0x00000172u, 0x0000016fu, 0x00000171u, 0x00060041u, 0x00000149u, 0x00000174u, 0x00000162u, 0x00000036u, 0x00000172u, 0x0003003eu, 0x00000174u, 0x00000173u, 0x000200f9u, 0x0000016eu, 0x000200f8u, 0x0000016eu, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000019u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0006000fu, 0x00000005u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x0000000fu, 0x00060010u, 0x00000004u, 0x00000011u, 0x00000001u, 0x00000001u, 0x00000001u, 0x00040047u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040048u, 0x00000008u, 0x00000000u, 0x00000019u, 0x00050048u, 0x00000008u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000008u, 0x00000002u, 0x00040047u, 0x0000000au, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000000au, 0x00000021u, 0x00000000u, 0x00040047u, 0x0000000fu, 0x0000000bu, 0x0000001cu, 0x00040047u, 0x00000016u, 0x00000001u, 0x00000000u, 0x00040047u, 0x00000018u, 0x0000000bu, 0x00000019u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000000u, 0x0003001du, 0x00000007u, 0x00000006u, 0x0003001eu, 0x00000008u, 0x00000007u, 0x00040020u, 0x00000009u, 0x0000000cu, 0x00000008u, 0x0004003bu, 0x00000009u, 0x0000000au, 0x0000000cu, 0x00040015u, 0x0000000bu, 0x00000020u, 0x00000001u, 0x0004002bu, 0x0000000bu, 0x0000000cu, 0x00000000u, 0x00040017u, 0x0000000du, 0x00000006u, 0x00000003u, 0x00040020u, 0x0000000eu, 0x00000001u, 0x0000000du, 0x0004003bu, 0x0000000eu, 0x0000000fu, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000010u, 0x00000000u, 0x00040020u, 0x00000011u, 0x00000001u, 0x00000006u, 0x00040020u, 0x00000014u, 0x0000000cu, 0x00000006u, 0x00040032u, 0x00000006u, 0x00000016u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000017u, 0x00000001u, 0x00060033u, 0x0000000du, 0x00000018u, 0x00000016u, 0x00000017u, 0x00000017u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x00050041u, 0x00000011u, 0x00000012u, 0x0000000fu, 0x00000010u, 0x0004003du, 0x00000006u, 0x00000013u, 0x00000012u, 0x00060041u, 0x00000014u, 0x00000015u, 0x0000000au, 0x0000000cu, 0x00000013u, 0x0003003eu, 0x00000015u, 0x00000010u, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x0000003fu, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0008000fu, 0x00000000u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000008u, 0x00000016u, 0x0000002bu, 0x00040047u, 0x00000008u, 0x0000000bu, 0x0000002au, 0x00050048u, 0x00000014u, 0x00000000u, 0x0000000bu, 0x00000000u, 0x00050048u, 0x00000014u, 0x00000001u, 0x0000000bu, 0x00000001u, 0x00050048u, 0x00000014u, 0x00000002u, 0x0000000bu, 0x00000003u, 0x00050048u, 0x00000014u, 0x00000003u, 0x0000000bu, 0x00000004u, 0x00030047u, 0x00000014u, 0x00000002u, 0x00040047u, 0x0000002bu, 0x0000001eu, 0x00000000u, 0x00050048u, 0x00000037u, 0x00000000u, 0x00000023u, 0x00000000u, 0x00030047u, 0x00000037u, 0x00000002u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00040015u, 0x00000006u, 0x00000020u, 0x00000001u, 0x00040020u, 0x00000007u, 0x00000001u, 0x00000006u, 0x0004003bu, 0x00000007u, 0x00000008u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x0000000au, 0x00000000u, 0x00020014u, 0x0000000bu, 0x00030016u, 0x0000000fu, 0x00000020u, 0x00040017u, 0x00000010u, 0x0000000fu, 0x00000004u, 0x00040015u, 0x00000011u, 0x00000020u, 0x00000000u, 0x0004002bu, 0x00000011u, 0x00000012u, 0x00000001u, 0x0004001cu, 0x00000013u, 0x0000000fu, 0x00000012u, 0x0006001eu, 0x00000014u, 0x00000010u, 0x0000000fu, 0x00000013u, 0x00000013u, 0x00040020u, 0x00000015u, 0x00000003u, 0x00000014u, 0x0004003bu, 0x00000015u, 0x00000016u, 0x00000003u, 0x0004002bu, 0x0000000fu, 0x00000017u, 0xbf800000u, 0x0004002bu, 0x0000000fu, 0x00000018u, 0x00000000u, 0x0004002bu, 0x0000000fu, 0x00000019u, 0x3f800000u, 0x0007002cu, 0x00000010u, 0x0000001au, 0x00000017u, 0x00000017u, 0x00000018u, 0x00000019u, 0x00040020u, 0x0000001bu, 0x00000003u, 0x00000010u, 0x0004002bu, 0x00000006u, 0x0000001fu, 0x00000001u, 0x0004002bu, 0x0000000fu, 0x00000023u, 0x40400000u, 0x0007002cu, 0x00000010u, 0x00000024u, 0x00000017u, 0x00000023u, 0x00000018u, 0x00000019u, 0x0007002cu, 0x00000010u, 0x00000027u, 0x00000023u, 0x00000017u, 0x00000018u, 0x00000019u, 0x00040017u, 0x00000029u, 0x0000000fu, 0x00000002u, 0x00040020u, 0x0000002au, 0x00000003u, 0x00000029u, 0x0004003bu, 0x0000002au, 0x0000002bu, 0x00000003u, 0x0004002bu, 0x00000011u, 0x0000002cu, 0x00000000u, 0x00040020u, 0x0000002du, 0x00000003u, 0x0000000fu, 0x0004002bu, 0x0000000fu, 0x00000030u, 0x3f000000u, 0x0003001eu, 0x00000037u, 0x0000000fu, 0x00040020u, 0x00000038u, 0x00000009u, 0x00000037u, 0x0004003bu, 0x00000038u, 0x00000039u, 0x00000009u, 0x00040020u, 0x0000003au, 0x00000009u, 0x0000000fu, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x00000006u, 0x00000009u, 0x00000008u, 0x000500aau, 0x0000000bu, 0x0000000cu, 0x00000009u, 0x0000000au, 0x000300f7u, 0x0000000eu, 0x00000000u, 0x000400fau, 0x0000000cu, 0x0000000du, 0x0000001du, 0x000200f8u, 0x0000000du, 0x00050041u, 0x0000001bu, 0x0000001cu, 0x00000016u, 0x0000000au, 0x0003003eu, 0x0000001cu, 0x0000001au, 0x000200f9u, 0x0000000eu, 0x000200f8u, 0x0000001du, 0x000500aau, 0x0000000bu, 0x00000020u, 0x00000009u, 0x0000001fu, 0x000300f7u, 0x00000022u, 0x00000000u, 0x000400fau, 0x00000020u, 0x00000021u, 0x00000026u, 0x000200f8u, 0x00000021u, 0x00050041u, 0x0000001bu, 0x00000025u, 0x00000016u, 0x0000000au, 0x0003003eu, 0x00000025u, 0x00000024u, 0x000200f9u, 0x00000022u, 0x000200f8u, 0x00000026u, 0x00050041u, 0x0000001bu, 0x00000028u, 0x00000016u, 0x0000000au, 0x0003003eu, 0x00000028u, 0x00000027u, 0x000200f9u, 0x00000022u, 0x000200f8u, 0x00000022u, 0x000200f9u, 0x0000000eu, 0x000200f8u, 0x0000000eu, 0x00060041u, 0x0000002du, 0x0000002eu, 0x00000016u, 0x0000000au, 0x0000002cu, 0x0004003du, 0x0000000fu, 0x0000002fu, 0x0000002eu, 0x00050085u, 0x0000000fu, 0x00000031u, 0x0000002fu, 0x00000030u, 0x00050081u, 0x0000000fu, 0x00000032u, 0x00000031u, 0x00000030u, 0x00060041u, 0x0000002du, 0x00000033u, 0x00000016u, 0x0000000au, 0x00000012u, 0x0004003du, 0x0000000fu, 0x00000034u, 0x00000033u, 0x00050085u, 0x0000000fu, 0x00000035u, 0x00000034u, 0x00000030u, 0x00050081u, 0x0000000fu, 0x00000036u, 0x00000035u, 0x00000030u, 0x00050041u, 0x0000003au, 0x0000003bu, 0x00000039u, 0x0000000au, 0x0004003du, 0x0000000fu, 0x0000003cu, 0x0000003bu, 0x00050081u, 0x0000000fu, 0x0000003du, 0x00000036u, 0x0000003cu, 0x00050050u, 0x00000029u, 0x0000003eu, 0x00000032u, 0x0000003du, 0x0003003eu, 0x0000002bu, 0x0000003eu, 0x000100fdu, 0x00010038u, 0x07230203u, 0x00010300u, 0x000d0008u, 0x00000015u, 0x00000000u, 0x00020011u, 0x00000001u, 0x0006000bu, 0x00000001u, 0x4c534c47u, 0x6474732eu, 0x3035342eu, 0x00000000u, 0x0003000eu, 0x00000000u, 0x00000001u, 0x0007000fu, 0x00000004u, 0x00000004u, 0x6e69616du, 0x00000000u, 0x00000009u, 0x00000011u, 0x00030010u, 0x00000004u, 0x00000007u, 0x00040047u, 0x00000009u, 0x0000001eu, 0x00000000u, 0x00040047u, 0x0000000du, 0x00000022u, 0x00000000u, 0x00040047u, 0x0000000du, 0x00000021u, 0x00000000u, 0x00040047u, 0x00000011u, 0x0000001eu, 0x00000000u, 0x00020013u, 0x00000002u, 0x00030021u, 0x00000003u, 0x00000002u, 0x00030016u, 0x00000006u, 0x00000020u, 0x00040017u, 0x00000007u, 0x00000006u, 0x00000004u, 0x00040020u, 0x00000008u, 0x00000003u, 0x00000007u, 0x0004003bu, 0x00000008u, 0x00000009u, 0x00000003u, 0x00090019u, 0x0000000au, 0x00000006u, 0x00000001u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000001u, 0x00000000u, 0x0003001bu, 0x0000000bu, 0x0000000au, 0x00040020u, 0x0000000cu, 0x00000000u, 0x0000000bu, 0x0004003bu, 0x0000000cu, 0x0000000du, 0x00000000u, 0x00040017u, 0x0000000fu, 0x00000006u, 0x00000002u, 0x00040020u, 0x00000010u, 0x00000001u, 0x0000000fu, 0x0004003bu, 0x00000010u, 0x00000011u, 0x00000001u, 0x0004002bu, 0x00000006u, 0x00000013u, 0x00000000u, 0x00050036u, 0x00000002u, 0x00000004u, 0x00000000u, 0x00000003u, 0x000200f8u, 0x00000005u, 0x0004003du, 0x0000000bu, 0x0000000eu, 0x0000000du, 0x0004003du, 0x0000000fu, 0x00000012u, 0x00000011u, 0x00070058u, 0x00000007u, 0x00000014u, 0x0000000eu, 0x00000012u, 0x00000002u, 0x00000013u, 0x0003003eu, 0x00000009u, 0x00000014u, 0x000100fdu, 0x00010038u, }; static const uint8_t reflection_bank[] = { 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x00, 0x52, 0x00, 0x41, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; template struct Shaders { Program tmem_update = {}; Program span_setup = {}; Program clear_indirect_buffer = {}; Program tile_binning_combined = {}; Program ubershader = {}; Program depth_blend = {}; Program rasterizer = {}; Shader fullscreen = {}; Shader vi_scale = {}; Shader vi_divot[2] = {}; Shader vi_fetch[2] = {}; Shader vi_blend_fields = {}; Program extract_vram = {}; Program masked_rdram_resolve = {}; Program clear_write_mask = {}; Program update_upscaled_domain_post = {}; Program update_upscaled_domain_pre = {}; Program update_upscaled_domain_resolve = {}; Program clear_super_sampled_write_mask = {}; Shader vi_deinterlace_vert = {}; Shader vi_deinterlace_frag = {}; template Shaders(Device &device, Layout &layout, const Resolver &resolver) { layout.unserialize(reflection_bank + 0, 316); this->tmem_update = device.request_program(spirv_bank + 0, 40204, &layout); layout.unserialize(reflection_bank + 316, 316); this->span_setup = device.request_program(spirv_bank + 10051, 19584, &layout); layout.unserialize(reflection_bank + 632, 316); this->clear_indirect_buffer = device.request_program(spirv_bank + 14947, 684, &layout); if (resolver("tile_binning_combined", "SUBGROUP") == 0 && resolver("tile_binning_combined", "UBERSHADER") == 0 && resolver("tile_binning_combined", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 948, 316); this->tile_binning_combined = device.request_program(spirv_bank + 15118, 30780, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 1 && resolver("tile_binning_combined", "UBERSHADER") == 0 && resolver("tile_binning_combined", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 1264, 316); this->tile_binning_combined = device.request_program(spirv_bank + 22813, 32128, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 0 && resolver("tile_binning_combined", "UBERSHADER") == 1 && resolver("tile_binning_combined", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 1580, 316); this->tile_binning_combined = device.request_program(spirv_bank + 30845, 28868, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 1 && resolver("tile_binning_combined", "UBERSHADER") == 1 && resolver("tile_binning_combined", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 1896, 316); this->tile_binning_combined = device.request_program(spirv_bank + 38062, 29152, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 0 && resolver("tile_binning_combined", "UBERSHADER") == 0 && resolver("tile_binning_combined", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 2212, 316); this->tile_binning_combined = device.request_program(spirv_bank + 45350, 30884, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 1 && resolver("tile_binning_combined", "UBERSHADER") == 0 && resolver("tile_binning_combined", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 2528, 316); this->tile_binning_combined = device.request_program(spirv_bank + 53071, 32232, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 0 && resolver("tile_binning_combined", "UBERSHADER") == 1 && resolver("tile_binning_combined", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 2844, 316); this->tile_binning_combined = device.request_program(spirv_bank + 61129, 28956, &layout); } if (resolver("tile_binning_combined", "SUBGROUP") == 1 && resolver("tile_binning_combined", "UBERSHADER") == 1 && resolver("tile_binning_combined", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 3160, 316); this->tile_binning_combined = device.request_program(spirv_bank + 68368, 29240, &layout); } if (resolver("ubershader", "SUBGROUP") == 0 && resolver("ubershader", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 3476, 316); this->ubershader = device.request_program(spirv_bank + 75678, 471696, &layout); } if (resolver("ubershader", "SUBGROUP") == 1 && resolver("ubershader", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 3792, 316); this->ubershader = device.request_program(spirv_bank + 193602, 472360, &layout); } if (resolver("ubershader", "SUBGROUP") == 0 && resolver("ubershader", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 4108, 316); this->ubershader = device.request_program(spirv_bank + 311692, 485432, &layout); } if (resolver("ubershader", "SUBGROUP") == 1 && resolver("ubershader", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 4424, 316); this->ubershader = device.request_program(spirv_bank + 433050, 486096, &layout); } if (resolver("depth_blend", "SUBGROUP") == 0 && resolver("depth_blend", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 4740, 316); this->depth_blend = device.request_program(spirv_bank + 554574, 84480, &layout); } if (resolver("depth_blend", "SUBGROUP") == 1 && resolver("depth_blend", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 5056, 316); this->depth_blend = device.request_program(spirv_bank + 575694, 85144, &layout); } if (resolver("depth_blend", "SUBGROUP") == 0 && resolver("depth_blend", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 5372, 316); this->depth_blend = device.request_program(spirv_bank + 596980, 85752, &layout); } if (resolver("depth_blend", "SUBGROUP") == 1 && resolver("depth_blend", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 5688, 316); this->depth_blend = device.request_program(spirv_bank + 618418, 86416, &layout); } if (resolver("rasterizer", "SMALL_TYPES") == 0) { layout.unserialize(reflection_bank + 6004, 316); this->rasterizer = device.request_program(spirv_bank + 640022, 399332, &layout); } if (resolver("rasterizer", "SMALL_TYPES") == 1) { layout.unserialize(reflection_bank + 6320, 316); this->rasterizer = device.request_program(spirv_bank + 739855, 412640, &layout); } layout.unserialize(reflection_bank + 6636, 316); this->fullscreen = device.request_shader(spirv_bank + 843015, 928, &layout); layout.unserialize(reflection_bank + 6952, 316); this->vi_scale = device.request_shader(spirv_bank + 843247, 6288, &layout); layout.unserialize(reflection_bank + 7268, 316); this->vi_divot[0] = device.request_shader(spirv_bank + 844819, 1808, &layout); layout.unserialize(reflection_bank + 7584, 316); this->vi_divot[1] = device.request_shader(spirv_bank + 845271, 2896, &layout); layout.unserialize(reflection_bank + 7900, 316); this->vi_fetch[0] = device.request_shader(spirv_bank + 845995, 5776, &layout); layout.unserialize(reflection_bank + 8216, 316); this->vi_fetch[1] = device.request_shader(spirv_bank + 847439, 7592, &layout); layout.unserialize(reflection_bank + 8532, 316); this->vi_blend_fields = device.request_shader(spirv_bank + 849337, 756, &layout); layout.unserialize(reflection_bank + 8848, 316); this->extract_vram = device.request_program(spirv_bank + 849526, 6680, &layout); layout.unserialize(reflection_bank + 9164, 316); this->masked_rdram_resolve = device.request_program(spirv_bank + 851196, 1876, &layout); layout.unserialize(reflection_bank + 9480, 316); this->clear_write_mask = device.request_program(spirv_bank + 851665, 1092, &layout); layout.unserialize(reflection_bank + 9796, 316); this->update_upscaled_domain_post = device.request_program(spirv_bank + 851938, 4060, &layout); layout.unserialize(reflection_bank + 10112, 316); this->update_upscaled_domain_pre = device.request_program(spirv_bank + 852953, 10520, &layout); layout.unserialize(reflection_bank + 10428, 316); this->update_upscaled_domain_resolve = device.request_program(spirv_bank + 855583, 14540, &layout); layout.unserialize(reflection_bank + 10744, 316); this->clear_super_sampled_write_mask = device.request_program(spirv_bank + 859218, 640, &layout); layout.unserialize(reflection_bank + 11060, 316); this->vi_deinterlace_vert = device.request_shader(spirv_bank + 859378, 1384, &layout); layout.unserialize(reflection_bank + 11376, 316); this->vi_deinterlace_frag = device.request_shader(spirv_bank + 859724, 500, &layout); } }; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/slangmosh.json000066400000000000000000000051121415063341600264360ustar00rootroot00000000000000{ "include": [ "../../Granite/assets/shaders/inc" ], "shaders": [ { "name": "tmem_update", "compute": true, "path": "tmem_update.comp" }, { "name": "span_setup", "compute": true, "path": "span_setup.comp" }, { "name": "clear_indirect_buffer", "compute": true, "path": "clear_indirect_buffer.comp" }, { "name": "tile_binning_combined", "compute": true, "path": "tile_binning_combined.comp", "variants": [ { "define": "SUBGROUP", "count": 2, "resolve": true }, { "define": "UBERSHADER", "count": 2, "resolve": true }, { "define": "SMALL_TYPES", "count": 2, "resolve": true } ] }, { "name": "ubershader", "path": "ubershader.comp", "compute": true, "variants": [ { "define": "SUBGROUP", "count": 2, "resolve": true }, { "define": "SMALL_TYPES", "count": 2, "resolve": true } ] }, { "name": "depth_blend", "path": "depth_blend.comp", "compute": true, "variants": [ { "define": "SUBGROUP", "count": 2, "resolve": true }, { "define": "SMALL_TYPES", "count": 2, "resolve": true } ] }, { "name": "rasterizer", "path": "rasterizer.comp", "compute": true, "variants": [ { "define": "SMALL_TYPES", "count": 2, "resolve": true } ] }, { "name": "fullscreen", "path": "fullscreen.vert" }, { "name": "vi_scale", "path": "vi_scale.frag" }, { "name": "vi_divot", "path": "vi_divot.frag", "variants": [ { "define": "FETCH_BUG", "count": 2 } ] }, { "name": "vi_fetch", "path": "vi_fetch.frag", "variants": [ { "define": "FETCH_BUG", "count": 2 } ] }, { "name": "vi_blend_fields", "path": "vi_blend_fields.frag" }, { "name": "extract_vram", "path": "extract_vram.comp", "compute": true }, { "name": "masked_rdram_resolve", "path": "masked_rdram_resolve.comp", "compute": true }, { "name": "clear_write_mask", "path": "clear_write_mask.comp", "compute": true }, { "name": "update_upscaled_domain_post", "path": "update_upscaled_domain_post.comp", "compute": true }, { "name": "update_upscaled_domain_pre", "path": "update_upscaled_domain_pre.comp", "compute": true }, { "name": "update_upscaled_domain_resolve", "path": "update_upscaled_domain_resolve.comp", "compute": true }, { "name": "clear_super_sampled_write_mask", "path": "clear_super_sampled_write_mask.comp", "compute": true }, { "name": "vi_deinterlace_vert", "path": "vi_deinterlace.vert" }, { "name": "vi_deinterlace_frag", "path": "vi_deinterlace.frag" } ] } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/small_types.h000066400000000000000000000061541415063341600262640ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // Utility header to smooth over the difference between // 8/16-bit integer arithmetic vs. just 8/16-bit storage. #ifndef SMALL_INTEGERS_H_ #define SMALL_INTEGERS_H_ #extension GL_EXT_shader_16bit_storage : require #extension GL_EXT_shader_8bit_storage : require #if SMALL_TYPES #extension GL_EXT_shader_explicit_arithmetic_types_int8 : require #extension GL_EXT_shader_explicit_arithmetic_types_int16 : require #define mem_u8 uint8_t #define mem_u16 uint16_t #define mem_u8x2 u8vec2 #define mem_u16x2 u16vec2 #define mem_u8x3 u8vec3 #define mem_u16x3 u16vec3 #define mem_u8x4 u8vec4 #define mem_u16x4 u16vec4 #define mem_i8 int8_t #define mem_i16 int16_t #define mem_i8x2 i8vec2 #define mem_i16x2 i16vec2 #define mem_i8x3 i8vec3 #define mem_i16x3 i16vec3 #define mem_i8x4 i8vec4 #define mem_i16x4 i16vec4 #define u8 uint8_t #define u16 uint16_t #define u8x2 u8vec2 #define u16x2 u16vec2 #define u8x3 u8vec3 #define u16x3 u16vec3 #define u8x4 u8vec4 #define u16x4 u16vec4 #define i8 int8_t #define i16 int16_t #define i8x2 i8vec2 #define i16x2 i16vec2 #define i8x3 i8vec3 #define i16x3 i16vec3 #define i8x4 i8vec4 #define i16x4 i16vec4 #define U8_C(x) uint8_t(x) #define I8_C(x) int8_t(x) #define U16_C(x) uint16_t(x) #define I16_C(x) int16_t(x) #else #define mem_u8 uint8_t #define mem_u16 uint16_t #define mem_u8x2 u8vec2 #define mem_u16x2 u16vec2 #define mem_u8x3 u8vec3 #define mem_u16x3 u16vec3 #define mem_u8x4 u8vec4 #define mem_u16x4 u16vec4 #define mem_i8 int8_t #define mem_i16 int16_t #define mem_i8x2 i8vec2 #define mem_i16x2 i16vec2 #define mem_i8x3 i8vec3 #define mem_i16x3 i16vec3 #define mem_i8x4 i8vec4 #define mem_i16x4 i16vec4 #define u8 int #define u16 int #define u8x2 ivec2 #define u16x2 ivec2 #define u8x3 ivec3 #define u16x3 ivec3 #define u8x4 ivec4 #define u16x4 ivec4 #define i8 int #define i16 int #define i8x2 ivec2 #define i16x2 ivec2 #define i8x3 ivec3 #define i16x3 ivec3 #define i8x4 ivec4 #define i16x4 ivec4 #define U8_C(x) int(x) #define I8_C(x) int(x) #define U16_C(x) int(x) #define I16_C(x) int(x) #endif #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/span_setup.comp000066400000000000000000000200371415063341600266140ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "small_types.h" #include "debug.h" layout(local_size_x_id = 0) in; layout(constant_id = 1) const int SCALING_LOG2 = 0; const int SCALING_FACTOR = 1 << SCALING_LOG2; #include "data_structures.h" layout(std430, set = 0, binding = 0) readonly buffer TriangleSetupBuffer { TriangleSetupMem elems[]; } triangle_setup; #include "load_triangle_setup.h" layout(std430, set = 0, binding = 1) readonly buffer AttributeSetupBuffer { AttributeSetupMem elems[]; } attribute_setup; #include "load_attribute_setup.h" layout(set = 0, binding = 2, std430) readonly buffer ScissorStateBuffer { ScissorStateMem elems[]; } scissor_state; #include "load_scissor_state.h" layout(std430, set = 0, binding = 3) writeonly buffer SpanSetups { SpanSetupMem elems[]; } span_setups; #include "store_span_setup.h" layout(set = 1, binding = 0) uniform utextureBuffer uInterpolationJobs; const int SUBPIXELS = 4; const int SUBPIXELS_LOG2 = 2; // Convert a 16.16 signed value to 16.3. We have 8 subpixels in X direction after snapping. ivec4 quantize_x(ivec4 x) { ivec4 sticky = ivec4(notEqual(x & 0xfff, ivec4(0))); ivec4 snapped = ivec4((x >> 12) | sticky); return snapped; } int min4(ivec4 v) { ivec2 v2 = min(v.xy, v.zw); return min(v2.x, v2.y); } int max4(ivec4 v) { ivec2 v2 = max(v.xy, v.zw); return max(v2.x, v2.y); } ivec4 interpolate_snapped(ivec4 dvalue, int dy) { int dy_shifted = dy >> SCALING_LOG2; int dy_masked = dy & (SCALING_FACTOR - 1); return dy_shifted * dvalue + dy_masked * (dvalue >> SCALING_LOG2); } void main() { ivec3 job_indices = ivec3(texelFetch(uInterpolationJobs, int(gl_WorkGroupID.x)).xyz); int primitive_index = job_indices.x; int base_y = job_indices.y * SCALING_FACTOR; int max_y = job_indices.z * SCALING_FACTOR + (SCALING_FACTOR - 1); int y = base_y + int(gl_LocalInvocationIndex); if (y > max_y) return; TriangleSetup setup = load_triangle_setup(primitive_index); AttributeSetup attr = load_attribute_setup(primitive_index); ScissorState scissor = load_scissor_state(primitive_index); bool flip = (setup.flags & TRIANGLE_SETUP_FLIP_BIT) != 0; bool interlace_en = (setup.flags & TRIANGLE_SETUP_INTERLACE_FIELD_BIT) != 0; bool keep_odd_field = (setup.flags & TRIANGLE_SETUP_INTERLACE_KEEP_ODD_BIT) != 0; SpanSetup span_setup; // Interpolate RGBA, STZW to their scanline. { bool do_offset = (setup.flags & TRIANGLE_SETUP_DO_OFFSET_BIT) != 0; bool skip_xfrac = (setup.flags & TRIANGLE_SETUP_SKIP_XFRAC_BIT) != 0; int y_interpolation_base = int(setup.yh) >> 2; y_interpolation_base *= SCALING_FACTOR; // For high-resolution interpolation, make sure we snap interpolation correctly at whole pixels, // and quantize derivatives in-between pixels. int dy = y - y_interpolation_base; int xh = setup.xh * SCALING_FACTOR + dy * (setup.dxhdy << 2); ivec4 drgba_diff = ivec4(0); ivec4 dstzw_diff = ivec4(0); // In do_offset mode, varyings are latched at last subpixel line instead of first (for some reason). if (do_offset) { xh += (SCALING_FACTOR * 3) * setup.dxhdy; ivec4 drgba_deh = attr.drgba_de & ~0x1ff; ivec4 drgba_dyh = attr.drgba_dy & ~0x1ff; drgba_diff = drgba_deh - (drgba_deh >> 2) - drgba_dyh + (drgba_dyh >> 2); ivec4 dstzw_deh = attr.dstzw_de & ~0x1ff; ivec4 dstzw_dyh = attr.dstzw_dy & ~0x1ff; dstzw_diff = dstzw_deh - (dstzw_deh >> 2) - dstzw_dyh + (dstzw_dyh >> 2); } int base_x = xh >> 15; int xfrac = skip_xfrac ? 0 : ((xh >> 7) & 0xff); ivec4 rgba = attr.rgba + interpolate_snapped(attr.drgba_de, dy); rgba = ((rgba & ~0x1ff) + drgba_diff - interpolate_snapped((attr.drgba_dx >> 8) & ~1, xfrac)) & ~0x3ff; ivec4 stzw = attr.stzw + interpolate_snapped(attr.dstzw_de, dy); stzw = ((stzw & ~0x1ff) + dstzw_diff - interpolate_snapped((attr.dstzw_dx >> 8) & ~1, xfrac)) & ~0x3ff; span_setup.rgba = rgba; span_setup.stzw = stzw; span_setup.interpolation_base_x = base_x; } // Check Y dimension. int yh_interpolation_base = int(setup.yh) & ~(SUBPIXELS - 1); int ym_interpolation_base = int(setup.ym); yh_interpolation_base *= SCALING_FACTOR; ym_interpolation_base *= SCALING_FACTOR; int y_sub = int(y * SUBPIXELS); ivec4 y_subs = y_sub + ivec4(0, 1, 2, 3); int ylo = max(setup.yh, scissor.ylo) * SCALING_FACTOR; int yhi = min(setup.yl, scissor.yhi) * SCALING_FACTOR; bvec4 clip_lo_y = lessThan(y_subs, ivec4(ylo)); bvec4 clip_hi_y = greaterThanEqual(y_subs, ivec4(yhi)); uvec4 clip_y = uvec4(clip_lo_y) | uvec4(clip_hi_y); // Interpolate X at all 4 Y-subpixels. ivec4 xh = setup.xh * SCALING_FACTOR + (y_subs - yh_interpolation_base) * setup.dxhdy; ivec4 xm = setup.xm * SCALING_FACTOR + (y_subs - yh_interpolation_base) * setup.dxmdy; ivec4 xl = setup.xl * SCALING_FACTOR + (y_subs - ym_interpolation_base) * setup.dxldy; xl = mix(xl, xm, lessThan(y_subs, ivec4(SCALING_FACTOR * setup.ym))); // If we have overflows, we can become sensitive to this in invalid_line check, where // checks that should pass fail, and vice versa. // Note that we shaved off one bit in triangle setup for upscaling purposes, // so this should be 28 bits normally. xl = bitfieldExtract(xl, 0, 27 + SCALING_LOG2); xh = bitfieldExtract(xh, 0, 27 + SCALING_LOG2); ivec4 xh_shifted = quantize_x(xh); ivec4 xl_shifted = quantize_x(xl); ivec4 xleft, xright; if (flip) { xleft = xh_shifted; xright = xl_shifted; } else { xleft = xl_shifted; xright = xh_shifted; } bvec4 invalid_line = greaterThan(xleft >> 1, xright >> 1); ivec4 lo_scissor = ivec4(SCALING_FACTOR * (scissor.xlo << 1)); ivec4 hi_scissor = ivec4(SCALING_FACTOR * (scissor.xhi << 1)); bool all_over = all(greaterThanEqual(min(xleft, xright), hi_scissor)); bool all_under = all(lessThan(max(xleft, xright), lo_scissor)); xleft = max(xleft, lo_scissor); xleft = min(xleft, hi_scissor); xright = max(xright, lo_scissor); xright = min(xright, hi_scissor); invalid_line = bvec4(uvec4(invalid_line) | clip_y); xleft = mix(xleft, ivec4(0xffff), invalid_line); xright = mix(xright, ivec4(0), invalid_line); int start_x = min4(xleft) >> 3; int end_x = max4(xright) >> 3; span_setup.xleft = xleft; span_setup.xright = xright; span_setup.start_x = start_x; span_setup.end_x = end_x; span_setup.valid_line = int(!all(invalid_line) && !all_over && !all_under); if (interlace_en) if (((y >> SCALING_LOG2) & 1) != int(keep_odd_field)) span_setup.valid_line = U16_C(0); span_setup.lodlength = int(flip ? (end_x - span_setup.interpolation_base_x) : (span_setup.interpolation_base_x - start_x)); store_span_setup(gl_GlobalInvocationID.x, span_setup); } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/store_span_setup.h000066400000000000000000000034421415063341600273220ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef STORE_SPAN_SETUP_H_ #define STORE_SPAN_SETUP_H_ void store_span_setup(uint index, SpanSetup setup) { #if SMALL_TYPES span_setups.elems[index] = setup; #else span_setups.elems[index].rgba = setup.rgba; span_setups.elems[index].stzw = setup.stzw; span_setups.elems[index].xleft = mem_u16x4(uvec4(setup.xleft)); span_setups.elems[index].xright = mem_u16x4(uvec4(setup.xright)); span_setups.elems[index].interpolation_base_x = setup.interpolation_base_x; span_setups.elems[index].start_x = setup.start_x; span_setups.elems[index].end_x = setup.end_x; span_setups.elems[index].lodlength = mem_i16(setup.lodlength); span_setups.elems[index].valid_line = mem_u16(setup.valid_line); #endif } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/texture.h000066400000000000000000000602331415063341600254260ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef TEXTURE_H_ #define TEXTURE_H_ #include "data_structures.h" const int TEXTURE_FORMAT_RGBA = 0; const int TEXTURE_FORMAT_YUV = 1; const int TEXTURE_FORMAT_CI = 2; const int TEXTURE_FORMAT_IA = 3; const int TEXTURE_FORMAT_I = 4; int texel_mask_s(TileInfo tile, int s) { if (tile.mask_s != 0) { int mask = 1 << tile.mask_s; if ((tile.flags & TILE_INFO_MIRROR_S_BIT) != 0) s ^= max((s & mask) - 1, 0); s &= mask - 1; } return s; } ivec2 texel_mask_s_copy(TileInfo tile, int s) { ivec2 multi_s = s + ivec2(0, 1); if (tile.mask_s != 0) { int mask = 1 << tile.mask_s; if ((tile.flags & TILE_INFO_MIRROR_S_BIT) != 0) multi_s ^= max((multi_s & mask) - 1, 0); multi_s &= mask - 1; } return multi_s; } int texel_mask_t(TileInfo tile, int t) { if (tile.mask_t != 0) { int mask = 1 << tile.mask_t; if ((tile.flags & TILE_INFO_MIRROR_T_BIT) != 0) t ^= max((t & mask) - 1, 0); t &= mask - 1; } return t; } i16x4 convert_rgba16(uint word) { uvec3 rgb = (uvec3(word) >> uvec3(11, 6, 1)) & 31u; rgb = (rgb << 3u) | (rgb >> 2u); uint alpha = (word & 1u) * 0xffu; return i16x4(rgb, alpha); } i16x4 convert_ia16(uint word) { uint intensity = word >> 8; uint alpha = word & 0xff; return i16x4(intensity, intensity, intensity, alpha); } i16x4 sample_texel_rgba4(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x >> 1; byte_offset &= 0xfff; uint shift = (~st.x & 1) * 4; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); word = (word >> shift) & 0xf; word |= word << 4; return i16x4(word); } i16x4 sample_texel_ia4(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x >> 1; byte_offset &= 0xfff; uint shift = (~st.x & 1) * 4; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); word = (word >> shift) & 0xf; uint intensity = word & 0xe; intensity = (intensity << 4) | (intensity << 1) | (intensity >> 2); return i16x4(intensity, intensity, intensity, (word & 1) * 0xff); } i16x4 sample_texel_ci4(TileInfo tile, uint tmem_instance, uvec2 st, uint pal) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x >> 1; byte_offset &= 0xfff; uint shift = (~st.x & 1) * 4; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); word = (word >> shift) & 0xf; word |= pal << 4; return i16x4(word); } i16x4 sample_texel_ci4_tlut(TileInfo tile, uint tmem_instance, uvec2 st, uint pal, uint lut_offset, uint addr_xor, bool tlut_type) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x >> 1; byte_offset &= 0x7ff; uint shift = (~st.x & 1) * 4; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); word = (word >> shift) & 0xf; word |= pal << 4; uint lut_entry = (word << 2) + lut_offset; lut_entry ^= addr_xor; word = uint(tmem16.instances[tmem_instance].elems[0x400 | lut_entry]); return tlut_type ? convert_ia16(word) : convert_rgba16(word); } i16x4 sample_texel_ci8_tlut(TileInfo tile, uint tmem_instance, uvec2 st, uint lut_offset, uint addr_xor, bool tlut_type) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x; byte_offset &= 0x7ff; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); uint lut_entry = (word << 2) + lut_offset; lut_entry ^= addr_xor; word = uint(tmem16.instances[tmem_instance].elems[0x400 | lut_entry]); return tlut_type ? convert_ia16(word) : convert_rgba16(word); } i16x4 sample_texel_ci32(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x * 2; byte_offset &= 0xfff; uint index = byte_offset >> 1; index ^= (st.y & 1) << 1; index ^= 1; uint word = uint(tmem16.instances[tmem_instance].elems[index]); return i16x2(word >> 8, word & 0xff).xyxy; } i16x4 sample_texel_ci32_tlut(TileInfo tile, uint tmem_instance, uvec2 st, uint lut_offset, uint addr_xor, bool tlut_type) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x * 2; byte_offset &= 0x7ff; uint index = byte_offset >> 1; index ^= (st.y & 1) << 1; index ^= 1; uint word = uint(tmem16.instances[tmem_instance].elems[index]); uint lut_entry = ((word >> 6) & ~3) + lut_offset; lut_entry ^= addr_xor; word = uint(tmem16.instances[tmem_instance].elems[0x400 | lut_entry]); return tlut_type ? convert_ia16(word) : convert_rgba16(word); } i16x4 sample_texel_rgba8(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x; byte_offset &= 0xfff; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); return i16x4(word); } i16x4 sample_texel_ia8(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x; byte_offset &= 0xfff; uint index = byte_offset; index ^= (st.y & 1) << 2; index ^= 3; uint word = uint(tmem8.instances[tmem_instance].elems[index]); uint intensity = word >> 4; uint alpha = word & 0xf; alpha |= alpha << 4; intensity |= intensity << 4; return i16x4(intensity, intensity, intensity, alpha); } i16x4 sample_texel_yuv16(TileInfo tile, uint tmem_instance, uvec2 st, uint chroma_x) { uint byte_offset = tile.offset + tile.stride * st.y; uint byte_offset_luma = byte_offset + st.x; byte_offset_luma &= 0x7ff; uint byte_offset_chroma = byte_offset + chroma_x * 2; byte_offset_chroma &= 0x7ff; uint index_luma = byte_offset_luma; index_luma ^= (st.y & 1) << 2; index_luma ^= 3; uint index_chroma = byte_offset_chroma >> 1; index_chroma ^= (st.y & 1) << 1; index_chroma ^= 1; u8 luma = u8(tmem8.instances[tmem_instance].elems[index_luma | 0x800]); u16 chroma = u16(tmem16.instances[tmem_instance].elems[index_chroma]); u8 u = u8((chroma >> U16_C(8)) & U16_C(0xff)); u8 v = u8((chroma >> U16_C(0)) & U16_C(0xff)); return i16x4(i16(u) - I16_C(0x80), i16(v) - I16_C(0x80), luma, luma); } i16x4 sample_texel_rgba16(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x * 2; byte_offset &= 0xfff; uint index = byte_offset >> 1; index ^= (st.y & 1) << 1; index ^= 1; uint word = uint(tmem16.instances[tmem_instance].elems[index]); return convert_rgba16(word); } i16x4 sample_texel_ia16(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x * 2; byte_offset &= 0xfff; uint index = byte_offset >> 1; index ^= (st.y & 1) << 1; index ^= 1; uint word = uint(tmem16.instances[tmem_instance].elems[index]); return convert_ia16(word); } i16x4 sample_texel_rgba32(TileInfo tile, uint tmem_instance, uvec2 st) { uint byte_offset = tile.offset + tile.stride * st.y; byte_offset += st.x * 2; byte_offset &= 0x7ff; uint index = byte_offset >> 1; index ^= (st.y & 1) << 1; index ^= 1; uint lower_word = uint(tmem16.instances[tmem_instance].elems[index]); uint upper_word = uint(tmem16.instances[tmem_instance].elems[index | 0x400]); return i16x4(lower_word >> 8, lower_word & 0xff, upper_word >> 8, upper_word & 0xff); } int clamp_and_shift_coord(bool clamp_bit, int coord, int lo, int hi, int shift) { // Clamp 17-bit coordinate to 16-bit coordinate here. coord = clamp(coord, -0x8000, 0x7fff); if (shift < 11) coord >>= shift; else { coord <<= (32 - shift); coord >>= 16; } if (clamp_bit) { bool clamp_hi = (coord >> 3) >= hi; if (clamp_hi) coord = (((hi >> 2) - (lo >> 2)) & 0x3ff) << 5; else coord = max(coord - (lo << 3), 0); } else coord -= lo << 3; return coord; } int shift_coord(int coord, int lo, int shift) { // Clamp 17-bit coordinate to 16-bit coordinate here. coord = clamp(coord, -0x8000, 0x7fff); if (shift < 11) coord >>= shift; else { coord <<= (32 - shift); coord >>= 16; } coord -= lo << 3; return coord; } // The copy pipe reads 4x16 words. int sample_texture_copy_word(TileInfo tile, uint tmem_instance, ivec2 st, int s_offset, bool tlut, bool tlut_type) { // For non-16bpp TMEM, the lower 32-bits are sampled based on direct 16-bit fetches. There are no shifts applied. bool high_word = s_offset < 2; bool replicate_8bpp = high_word && tile.size != 2 && !tlut; int samp; int s_shamt = min(int(tile.size), 2); bool large_texel = int(tile.size) == 3; int idx_mask = (large_texel || tlut) ? 0x3ff : 0x7ff; if (replicate_8bpp) { // The high word of 8-bpp replication is special in the sense that we sample 8-bpp correctly. // Sample the two possible words. st.x += 2 * s_offset; ivec2 s = texel_mask_s_copy(tile, st.x); int t = texel_mask_t(tile, st.y); uint tbase = tile.offset + tile.stride * t; uvec2 nibble_offset = (tbase * 2 + (s << s_shamt)) & 0x1fffu; nibble_offset ^= (t & 1u) * 8u; uvec2 index = nibble_offset >> 2u; index &= idx_mask; int samp0 = int(tmem16.instances[tmem_instance].elems[index.x ^ 1]); int samp1 = int(tmem16.instances[tmem_instance].elems[index.y ^ 1]); if (tile.size == 1) { samp0 >>= 8 - 4 * int(nibble_offset.x & 2); samp1 >>= 8 - 4 * int(nibble_offset.y & 2); samp0 &= 0xff; samp1 &= 0xff; } else if (tile.size == 0) { samp0 >>= 12 - 4 * int(nibble_offset.x & 3u); samp1 >>= 12 - 4 * int(nibble_offset.y & 3u); samp0 = (samp0 & 0xf) * 0x11; samp1 = (samp1 & 0xf) * 0x11; } else { samp0 >>= 8; samp1 >>= 8; } samp = (samp0 << 8) | samp1; } else { st.x += s_offset; int s = texel_mask_s(tile, st.x); int t = texel_mask_t(tile, st.y); uint tbase = tile.offset + tile.stride * t; uint nibble_offset = (tbase * 2 + (s << s_shamt)) & 0x1fffu; nibble_offset ^= (t & 1u) * 8u; uint index = nibble_offset >> 2u; index &= idx_mask; samp = int(tmem16.instances[tmem_instance].elems[index ^ 1]); if (tlut) { if (tile.size == 0) { samp >>= 12 - 4 * (nibble_offset & 3); samp &= 0xf; samp |= tile.palette << 4; samp <<= 2; samp += s_offset; } else { samp >>= 8 - 4 * (nibble_offset & 2); samp &= 0xff; samp <<= 2; samp += s_offset; } samp = int(tmem16.instances[tmem_instance].elems[(samp | 0x400) ^ 1]); } } return samp; } int sample_texture_copy(TileInfo tile, uint tmem_instance, ivec2 st, int s_offset, bool tlut, bool tlut_type) { st.x = shift_coord(st.x, int(tile.slo), int(tile.shift_s)); st.y = shift_coord(st.y, int(tile.tlo), int(tile.shift_t)); st >>= 5; int samp; if (global_constants.fb_info.fb_size == 0) { samp = 0; } else if (global_constants.fb_info.fb_size == 1) { samp = sample_texture_copy_word(tile, tmem_instance, st, s_offset >> 1, tlut, tlut_type); samp >>= 8 - 8 * (s_offset & 1); samp &= 0xff; } else { samp = sample_texture_copy_word(tile, tmem_instance, st, s_offset, tlut, tlut_type); } return samp; } i16x2 bilinear_3tap(i16x2 t00, i16x2 t10, i16x2 t01, i16x2 t11, ivec2 frac) { int sum_frac = frac.x + frac.y; i16x2 t_base = sum_frac >= 32 ? t11 : t00; i16x2 flip_frac = i16x2(sum_frac >= 32 ? (32 - frac.yx) : frac); i16x2 accum = (t10 - t_base) * flip_frac.x; accum += (t01 - t_base) * flip_frac.y; accum += I16_C(0x10); accum >>= I16_C(5); accum += t_base; return accum; } i16x4 sample_texture(TileInfo tile, uint tmem_instance, ivec2 st, bool tlut, bool tlut_type, bool sample_quad, bool mid_texel, bool convert_one, i16x4 prev_cycle) { st.x = clamp_and_shift_coord((tile.flags & TILE_INFO_CLAMP_S_BIT) != 0, st.x, int(tile.slo), int(tile.shi), int(tile.shift_s)); st.y = clamp_and_shift_coord((tile.flags & TILE_INFO_CLAMP_T_BIT) != 0, st.y, int(tile.tlo), int(tile.thi), int(tile.shift_t)); ivec2 frac; if (sample_quad) frac = st & 31; else frac = ivec2(0); int sum_frac = frac.x + frac.y; st >>= 5; int s0 = texel_mask_s(tile, st.x); int t0 = texel_mask_t(tile, st.y); int s1 = texel_mask_s(tile, st.x + 1); int t1 = texel_mask_t(tile, st.y + 1); // Very specific weird logic going on with t0 and t1. int tdiff = max(t1 - t0, -255); t1 = (t0 & 0xff) + tdiff; t0 &= 0xff; i16x4 t_base, t10, t01, t11; mid_texel = all(bvec3(mid_texel, equal(frac, ivec2(0x10)))); if (mid_texel) sum_frac = 0; bool yuv = tile.fmt == TEXTURE_FORMAT_YUV; ivec2 base_st = sum_frac >= 0x20 ? ivec2(s1, t1) : ivec2(s0, t0); if (tlut) { switch (int(tile.fmt)) { case TEXTURE_FORMAT_RGBA: case TEXTURE_FORMAT_CI: case TEXTURE_FORMAT_IA: case TEXTURE_FORMAT_I: { // For TLUT, entries in the LUT are duplicated and we must make sure that we sample 3 different banks // when we look up the TLUT entry. In normal situations, this is irrelevant, but we're trying to be accurate here. bool upper = sum_frac >= 0x20; uint addr_xor = upper ? 2 : 1; switch (int(tile.size)) { case 0: t_base = sample_texel_ci4_tlut(tile, tmem_instance, base_st, tile.palette, upper ? 3 : 0, addr_xor, tlut_type); if (sample_quad) { t10 = sample_texel_ci4_tlut(tile, tmem_instance, ivec2(s1, t0), tile.palette, 1, addr_xor, tlut_type); t01 = sample_texel_ci4_tlut(tile, tmem_instance, ivec2(s0, t1), tile.palette, 2, addr_xor, tlut_type); } if (mid_texel) { t11 = sample_texel_ci4_tlut(tile, tmem_instance, ivec2(s1, t1), tile.palette, 3, addr_xor, tlut_type); } break; case 1: t_base = sample_texel_ci8_tlut(tile, tmem_instance, base_st, upper ? 3 : 0, addr_xor, tlut_type); if (sample_quad) { t10 = sample_texel_ci8_tlut(tile, tmem_instance, ivec2(s1, t0), 1, addr_xor, tlut_type); t01 = sample_texel_ci8_tlut(tile, tmem_instance, ivec2(s0, t1), 2, addr_xor, tlut_type); } if (mid_texel) t11 = sample_texel_ci8_tlut(tile, tmem_instance, ivec2(s1, t1), 3, addr_xor, tlut_type); break; default: t_base = sample_texel_ci32_tlut(tile, tmem_instance, base_st, upper ? 3 : 0, addr_xor, tlut_type); if (sample_quad) { t10 = sample_texel_ci32_tlut(tile, tmem_instance, ivec2(s1, t0), 1, addr_xor, tlut_type); t01 = sample_texel_ci32_tlut(tile, tmem_instance, ivec2(s0, t1), 2, addr_xor, tlut_type); } if (mid_texel) t11 = sample_texel_ci32_tlut(tile, tmem_instance, ivec2(s1, t1), 3, addr_xor, tlut_type); break; } break; } } } else { switch (int(tile.fmt)) { case TEXTURE_FORMAT_RGBA: switch (int(tile.size)) { case 0: t_base = sample_texel_rgba4(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba4(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba4(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba4(tile, tmem_instance, ivec2(s1, t1)); break; case 1: t_base = sample_texel_rgba8(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba8(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba8(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba8(tile, tmem_instance, ivec2(s1, t1)); break; case 2: t_base = sample_texel_rgba16(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba16(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba16(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba16(tile, tmem_instance, ivec2(s1, t1)); break; case 3: t_base = sample_texel_rgba32(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba32(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba32(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba32(tile, tmem_instance, ivec2(s1, t1)); break; } break; case TEXTURE_FORMAT_YUV: { uint chroma_x0 = s0 >> 1; uint chroma_x1 = (s1 + (s1 - s0)) >> 1; // Only implement 16bpp for now. It's the only one that gives meaningful results. t_base = sample_texel_yuv16(tile, tmem_instance, ivec2(s0, t0), chroma_x0); if (sample_quad) { t10 = sample_texel_yuv16(tile, tmem_instance, ivec2(s1, t0), chroma_x1); t01 = sample_texel_yuv16(tile, tmem_instance, ivec2(s0, t1), chroma_x0); t11 = sample_texel_yuv16(tile, tmem_instance, ivec2(s1, t1), chroma_x1); } break; } case TEXTURE_FORMAT_CI: switch (int(tile.size)) { case 0: t_base = sample_texel_ci4(tile, tmem_instance, base_st, tile.palette); if (sample_quad) { t10 = sample_texel_ci4(tile, tmem_instance, ivec2(s1, t0), tile.palette); t01 = sample_texel_ci4(tile, tmem_instance, ivec2(s0, t1), tile.palette); } if (mid_texel) t11 = sample_texel_ci4(tile, tmem_instance, ivec2(s1, t1), tile.palette); break; case 1: t_base = sample_texel_rgba8(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba8(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba8(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba8(tile, tmem_instance, ivec2(s1, t1)); break; default: t_base = sample_texel_ci32(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_ci32(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_ci32(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_ci32(tile, tmem_instance, ivec2(s1, t1)); break; } break; case TEXTURE_FORMAT_IA: switch (int(tile.size)) { case 0: t_base = sample_texel_ia4(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_ia4(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_ia4(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_ia4(tile, tmem_instance, ivec2(s1, t1)); break; case 1: t_base = sample_texel_ia8(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_ia8(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_ia8(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_ia8(tile, tmem_instance, ivec2(s1, t1)); break; case 2: t_base = sample_texel_ia16(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_ia16(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_ia16(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_ia16(tile, tmem_instance, ivec2(s1, t1)); break; case 3: t_base = sample_texel_ci32(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_ci32(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_ci32(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_ci32(tile, tmem_instance, ivec2(s1, t1)); break; } break; case TEXTURE_FORMAT_I: switch (int(tile.size)) { case 0: t_base = sample_texel_rgba4(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba4(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba4(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba4(tile, tmem_instance, ivec2(s1, t1)); break; case 1: t_base = sample_texel_rgba8(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_rgba8(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_rgba8(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_rgba8(tile, tmem_instance, ivec2(s1, t1)); break; default: t_base = sample_texel_ci32(tile, tmem_instance, base_st); if (sample_quad) { t10 = sample_texel_ci32(tile, tmem_instance, ivec2(s1, t0)); t01 = sample_texel_ci32(tile, tmem_instance, ivec2(s0, t1)); } if (mid_texel) t11 = sample_texel_ci32(tile, tmem_instance, ivec2(s1, t1)); break; } break; } } i16x4 accum; if (convert_one) { ivec4 prev_sext = bitfieldExtract(ivec4(prev_cycle), 0, 9); ivec2 factors = sum_frac >= 32 ? prev_sext.gr : prev_sext.rg; ivec4 converted = factors.r * (t10 - t_base) + factors.g * (t01 - t_base) + 0x80; converted >>= 8; converted += prev_sext.b; accum = i16x4(converted); } else if (yuv) { if (sample_quad) { int chroma_frac = ((s0 & 1) << 4) | (frac.x >> 1); i16x2 accum_chroma = bilinear_3tap(t_base.xy, t10.xy, t01.xy, t11.xy, ivec2(chroma_frac, frac.y)); i16x2 accum_luma = bilinear_3tap(t_base.zw, t10.zw, t01.zw, t11.zw, frac); accum = i16x4(accum_chroma, accum_luma); } else accum = t_base; } else if (mid_texel) { accum = (t_base + t01 + t10 + t11 + I16_C(2)) >> I16_C(2); } else { i16x2 flip_frac = i16x2(sum_frac >= 32 ? (32 - frac.yx) : frac); accum = (t10 - t_base) * flip_frac.x; accum += (t01 - t_base) * flip_frac.y; accum += I16_C(0x10); accum >>= I16_C(5); accum += t_base; } return accum; } void compute_lod_2cycle(inout uint tile0, inout uint tile1, out i16 lod_frac, uint max_level, int min_lod, ivec2 st, ivec2 st_dx, ivec2 st_dy, bool perspective_overflow, bool tex_lod_en, bool sharpen_tex_en, bool detail_tex_en) { bool magnify = false; bool distant = false; uint tile_offset = 0; if (perspective_overflow) { distant = true; lod_frac = i16(0xff); } else { ivec2 dx = st_dx - st; // Kinda abs, except it's 1 less than expected if negative. dx ^= dx >> 31; ivec2 dy = st_dy - st; // Kinda abs, except it's 1 less than expected if negative. dy ^= dy >> 31; ivec2 max_d2 = max(dx, dy); int max_d = max(max_d2.x, max_d2.y); if (max_d >= 0x4000) { distant = true; lod_frac = i16(0xff); tile_offset = max_level; } else if (max_d < 32) // LOD < 0 { distant = max_level == 0u; magnify = true; if (!sharpen_tex_en && !detail_tex_en) lod_frac = i16(distant ? 0xff : 0); else lod_frac = i16((max(min_lod, max_d) << 3) + (sharpen_tex_en ? -0x100 : 0)); } else { int mip_base = max(findMSB(max_d >> 5), 0); distant = mip_base >= max_level; if (distant && !sharpen_tex_en && !detail_tex_en) { lod_frac = i16(0xff); } else { lod_frac = i16(((max_d << 3) >> mip_base) & 0xff); tile_offset = mip_base; } } } if (tex_lod_en) { if (distant) tile_offset = max_level; if (!detail_tex_en) { tile0 = (tile0 + tile_offset) & 7u; if (distant || (!sharpen_tex_en && magnify)) tile1 = tile0; else tile1 = (tile0 + 1) & 7; } else { tile1 = (tile0 + tile_offset + ((distant || magnify) ? 1 : 2)) & 7u; tile0 = (tile0 + tile_offset + (magnify ? 0 : 1)) & 7u; } } } i16x4 texture_convert_factors(i16x4 texel_in, i16x4 factors) { ivec4 texel = bitfieldExtract(ivec4(texel_in), 0, 9); int r = texel.b + ((factors.x * texel.g + 0x80) >> 8); int g = texel.b + ((factors.y * texel.r + factors.z * texel.g + 0x80) >> 8); int b = texel.b + ((factors.w * texel.r + 0x80) >> 8); int a = texel.b; return i16x4(r, g, b, a); } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/tile_binning_combined.comp000066400000000000000000000223631415063341600307400ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // Consumes result from tile_binning_prepass.comp, bins at a finer resolution (8x8 or 16x16 blocks). #include "small_types.h" #if SUBGROUP #extension GL_KHR_shader_subgroup_basic : require #extension GL_KHR_shader_subgroup_vote : require #extension GL_KHR_shader_subgroup_ballot : require #extension GL_KHR_shader_subgroup_arithmetic : require layout(local_size_x_id = 0) in; #else // Reasonable default. For AMD (64 threads), subgroups are definitely supported, so this won't be hit. layout(local_size_x = 32) in; #endif #include "debug.h" #include "data_structures.h" #include "binning.h" layout(constant_id = 1) const int TILE_WIDTH = 8; layout(constant_id = 2) const int TILE_HEIGHT = 8; layout(constant_id = 3) const int MAX_PRIMITIVES = 256; layout(constant_id = 4) const int MAX_WIDTH = 1024; layout(constant_id = 5) const int TILE_INSTANCE_STRIDE = 0x8000; layout(constant_id = 6) const int SCALE_FACTOR = 1; const int TILE_BINNING_STRIDE = MAX_PRIMITIVES / 32; const int MAX_TILES_X = MAX_WIDTH / TILE_WIDTH; layout(set = 0, binding = 0, std430) readonly buffer TriangleSetupBuffer { TriangleSetupMem elems[]; } triangle_setup; #include "load_triangle_setup.h" layout(set = 0, binding = 1, std430) readonly buffer ScissorStateBuffer { ScissorStateMem elems[]; } scissor_state; #include "load_scissor_state.h" layout(set = 0, binding = 2, std430) readonly buffer StateIndicesBuffer { InstanceIndicesMem elems[]; } state_indices; layout(std430, set = 0, binding = 3) writeonly buffer TileBitmask { uint binned_bitmask[]; }; layout(std430, set = 0, binding = 4) writeonly buffer TileBitmaskCoarse { uint binned_bitmask_coarse[]; }; #if !UBERSHADER layout(std430, set = 0, binding = 5) writeonly buffer TileInstanceOffset { uint elems[]; } tile_instance_offsets; layout(std430, set = 0, binding = 6) buffer IndirectBuffer { uvec4 elems[]; } indirect_counts; // This can actually be uint16_t, but AMD doesn't seem to support loading uint16_t in SMEM unit, // the memory traffic for this data structure is not relevant anyways. struct TileRasterWork { uint tile_x, tile_y; uint tile_instance; uint primitive; }; layout(std430, set = 0, binding = 7) writeonly buffer WorkList { uvec4 elems[]; } tile_raster_work; #endif #if !UBERSHADER uint allocate_work_offset(uint variant_index) { #if !SUBGROUP return atomicAdd(indirect_counts.elems[variant_index].x, 1u); #else // Merge atomic operations. Compiler would normally do this, // but it might not have figured out that variant_index is uniform. uvec4 active_mask = subgroupBallot(true); uint count = subgroupBallotBitCount(active_mask); uint work_offset = 0u; if (subgroupElect()) work_offset = atomicAdd(indirect_counts.elems[variant_index].x, count); work_offset = subgroupBroadcastFirst(work_offset); work_offset += subgroupBallotExclusiveBitCount(active_mask); return work_offset; #endif } #endif layout(push_constant, std430) uniform Registers { uvec2 resolution; int primitive_count; } fb_info; #if !SUBGROUP shared uint merged_mask_shared; #endif void main() { int group_index = int(gl_WorkGroupID.x); ivec2 meta_tile = ivec2(gl_WorkGroupID.yz); const int TILES_X = 8; const int TILES_Y = int(gl_WorkGroupSize.x) >> 3; #if SUBGROUP // Spec is unclear how gl_LocalInvocationIndex is mapped to gl_SubgroupInvocationID, so synthesize our own. // We know the subgroups are fully occupied with VK_EXT_subgroup_size_control already. int local_index = int(gl_SubgroupInvocationID); int SUBGROUP_TILES_Y = int(gl_SubgroupSize) >> 3; #else int local_index = int(gl_LocalInvocationIndex); #endif int inner_tile_x = local_index & 7; int inner_tile_y = local_index >> 3; #if SUBGROUP inner_tile_y += SUBGROUP_TILES_Y * int(gl_SubgroupID); #endif ivec2 tile = meta_tile * ivec2(TILES_X, TILES_Y) + ivec2(inner_tile_x, inner_tile_y); int linear_tile = tile.y * MAX_TILES_X + tile.x; ivec2 base_coord_meta = meta_tile * ivec2(TILE_WIDTH * TILES_X, TILE_HEIGHT * TILES_Y); #if SUBGROUP base_coord_meta.y += SUBGROUP_TILES_Y * TILE_HEIGHT * int(gl_SubgroupID); ivec2 end_coord_meta = min(base_coord_meta + ivec2(TILE_WIDTH * TILES_X, TILE_HEIGHT * SUBGROUP_TILES_Y), ivec2(fb_info.resolution)) - 1; #else ivec2 end_coord_meta = min(base_coord_meta + ivec2(TILE_WIDTH * TILES_X, TILE_HEIGHT * TILES_Y), ivec2(fb_info.resolution)) - 1; #endif ivec2 base_coord = tile * ivec2(TILE_WIDTH, TILE_HEIGHT); ivec2 end_coord = min(base_coord + ivec2(TILE_WIDTH, TILE_HEIGHT), ivec2(fb_info.resolution)) - 1; int primitive_count = fb_info.primitive_count; #if !SUBGROUP if (local_index == 0) merged_mask_shared = 0u; barrier(); #endif bool binned = false; if (local_index < 32) { uint primitive_index = group_index * 32 + local_index; if (primitive_index < primitive_count) { ScissorState scissor = load_scissor_state(primitive_index); ivec2 clipped_base_coord = max(base_coord_meta, SCALE_FACTOR * (ivec2(scissor.xlo, scissor.ylo) >> 2) - 1); ivec2 clipped_end_coord = min(end_coord_meta, SCALE_FACTOR * (ivec2(scissor.xhi + 3, scissor.yhi + 3) >> 2) - 1); TriangleSetup setup = load_triangle_setup(primitive_index); binned = bin_primitive(setup, clipped_base_coord, clipped_end_coord, SCALE_FACTOR); } } #if SUBGROUP uint merged_mask = subgroupBallot(binned).x; #else if (binned) atomicOr(merged_mask_shared, 1u << local_index); barrier(); uint merged_mask = merged_mask_shared; #endif uint binned_mask = 0u; while (merged_mask != 0u) { int bit = findLSB(merged_mask); merged_mask &= ~(1u << bit); uint primitive_index = group_index * 32 + bit; ScissorState scissor = load_scissor_state(primitive_index); ivec2 clipped_base_coord = max(base_coord, SCALE_FACTOR * (ivec2(scissor.xlo, scissor.ylo) >> 2)); ivec2 clipped_end_coord = min(end_coord, SCALE_FACTOR * (ivec2(scissor.xhi + 3, scissor.yhi + 3) >> 2) - 1); TriangleSetup setup = load_triangle_setup(primitive_index); if (bin_primitive(setup, clipped_base_coord, clipped_end_coord, SCALE_FACTOR)) binned_mask |= 1u << bit; } binned_bitmask[linear_tile * TILE_BINNING_STRIDE + group_index] = binned_mask; if (binned_mask != 0u) atomicOr(binned_bitmask_coarse[linear_tile], 1u << group_index); else atomicAnd(binned_bitmask_coarse[linear_tile], ~(1u << group_index)); #if SUBGROUP #if !UBERSHADER uint bit_count = uint(bitCount(binned_mask)); uint instance_offset = 0u; if (subgroupAny(bit_count != 0u)) { // Allocate tile instance space for all threads in subgroup in one go. uint total_bit_count = subgroupAdd(bit_count); if (subgroupElect()) if (total_bit_count != 0u) instance_offset = atomicAdd(indirect_counts.elems[0].w, total_bit_count); instance_offset = subgroupBroadcastFirst(instance_offset); instance_offset += subgroupInclusiveAdd(bit_count) - bit_count; } #endif #else #if !UBERSHADER uint bit_count = uint(bitCount(binned_mask)); uint instance_offset = 0u; if (bit_count != 0u) instance_offset = atomicAdd(indirect_counts.elems[0].w, bit_count); #endif #endif #if !UBERSHADER if (bit_count != 0u) tile_instance_offsets.elems[linear_tile * TILE_BINNING_STRIDE + group_index] = instance_offset; #if SUBGROUP uint variant_mask = subgroupOr(binned_mask); #else uint variant_mask = binned_mask; #endif while (variant_mask != 0u) { int bit = findLSB(variant_mask); variant_mask &= ~(1u << bit); int primitive_index = group_index * 32 + bit; if ((binned_mask & (1u << bit)) != 0u) { uint variant_index = uint(state_indices.elems[primitive_index].static_depth_tmem.x); uint work_offset = allocate_work_offset(variant_index); tile_raster_work.elems[work_offset + uint(TILE_INSTANCE_STRIDE) * variant_index] = uvec4(tile.x, tile.y, instance_offset, primitive_index); instance_offset++; } } #endif } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/tmem_update.comp000066400000000000000000000463571415063341600267540ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "debug.h" #include "small_types.h" layout(local_size_x_id = 0) in; layout(set = 0, binding = 0, std430) readonly buffer VRAM8Buffer { mem_u8 data[]; } vram8; layout(set = 0, binding = 0, std430) readonly buffer VRAM16Buffer { mem_u16 data[]; } vram16; layout(set = 0, binding = 0, std430) readonly buffer VRAM32Buffer { uint data[]; } vram32; layout(set = 0, binding = 1, std430) buffer TMEM16Buffer { mem_u16 data[2048]; } tmem16; struct TileInstance { mem_u16 data[2048]; }; layout(set = 0, binding = 2, std430) writeonly buffer TMEMInstances { TileInstance instances[]; } tile_instances; layout(push_constant, std430) uniform Registers { int num_uploads; } registers; const int TEXTURE_FMT_RGBA = 0; const int TEXTURE_FMT_YUV = 1; const int TEXTURE_FMT_CI = 2; const int TEXTURE_FMT_IA = 3; const int TEXTURE_FMT_I = 4; const int UPLOAD_MODE_TILE = 0; const int UPLOAD_MODE_TLUT = 1; const int UPLOAD_MODE_BLOCK = 2; struct UploadInfo { int width, height; float min_t_mod, max_t_mod; int vram_addr; int vram_width; int vram_size; int vram_effective_width; int tmem_offset; int tmem_stride_words; int tmem_size; int tmem_fmt; int mode; float inv_tmem_stride_words; int dxt; int padding; }; layout(set = 1, binding = 0, std140) uniform UploadInfos { UploadInfo upload_info[256]; }; bool tmem_dirty; uint current_tmem_value; int compute_upload_t(int offset, float inv_stride) { // This is still exact for all relevant inputs, and much faster than integer divide. return int((float(offset) + 0.5) * inv_stride); } // In 32bpp upload mode we read 64 bits and split the result over the lower and upper TMEM. void update_tmem_32(UploadInfo info, int tmem16_index, bool upper_tmem, bool yuv) { int tmem16_offset = (info.tmem_offset & 0x7ff) >> 1; int tmem16_stride = info.tmem_stride_words; int pixel_offset = (tmem16_index - tmem16_offset) & 0x3ff; int upload_x, upload_y; int upload_x_xor = 0; if (info.mode == UPLOAD_MODE_BLOCK) { int word_offset = pixel_offset >> 1; if (info.tmem_stride_words == 0) { // Trivial case, we can just compute T factor directly and set upload_x_xor. // Other than that, it works like a simple 1D upload. // However, if DxT is weird, we might end up in a situation where this word is written multiple times, // or zero times. int iteration_candidate_first = word_offset & ~1; int iteration_candidate_second = iteration_candidate_first + 1; int first_t = (iteration_candidate_first * info.dxt) >> 16; int second_t = (iteration_candidate_second * info.dxt) >> 16; if (first_t != second_t) { int iteration_candidate_first_write_index = iteration_candidate_first ^ (first_t & 1); int iteration_candidate_second_write_index = iteration_candidate_second ^ (second_t & 1); if (iteration_candidate_second_write_index == word_offset) upload_x_xor = (second_t & 1) << 1; else if (iteration_candidate_first_write_index == word_offset) upload_x_xor = (first_t & 1) << 1; else return; } else upload_x_xor ^= (first_t & 1) << 1; } else { // Welp ... This is pure insanity, but if we want to be completely correct ... int min_t = compute_upload_t(word_offset & ~1, info.min_t_mod); int max_t = compute_upload_t(word_offset | 1, info.max_t_mod); // If t has a range, then the solution to Y = (t = floor(X * dt / 2048)) * stride + X has a range space of: // Y - t_max * stride <= X <= Y - t_min * stride. int max_word_candidate = (word_offset | 1) - tmem16_stride * min_t; int min_word_candidate = (word_offset & ~1) - tmem16_stride * max_t; // If we have constraints for X, we constraint T further. min_t = max(min_t, (min_word_candidate * info.dxt) >> 16); max_t = min(max_t, (max_word_candidate * info.dxt) >> 16); bool found_candidate = false; for (int t = max_t; t >= min_t; t--) { // Check to see if t is a solution to the equation. // Potentially two targets could write here. int candidate_solution_first = (word_offset & ~1) - tmem16_stride * t; int candidate_solution_second = (word_offset | 1) - tmem16_stride * t; int candidate_t_first = (candidate_solution_first * info.dxt) >> 16; int candidate_t_second = (candidate_solution_second * info.dxt) >> 16; if (((candidate_solution_second + candidate_t_second * tmem16_stride) ^ (candidate_t_second & 1)) == word_offset) { found_candidate = true; pixel_offset = (candidate_solution_second << 1) + (pixel_offset & 1); break; } else if (((candidate_solution_first + candidate_t_first * tmem16_stride) ^ (candidate_t_first & 1)) == word_offset) { found_candidate = true; pixel_offset = (candidate_solution_first << 1) + (pixel_offset & 1); break; } } // We strided over this 64bpp word. if (!found_candidate) return; } upload_x = pixel_offset; upload_y = 0; } else if (tmem16_stride == 0) { // For TMEM stride of 0 we're essentially replaying the same line over and over and the final visible result // is what happened in Y == height - 1. upload_x = pixel_offset; upload_y = info.height - 1; } else { upload_y = compute_upload_t(pixel_offset, info.inv_tmem_stride_words); upload_x = pixel_offset - upload_y * tmem16_stride; // If stride is smaller than width, we'll need to unroll the last line. if (upload_y >= info.height) { upload_x += tmem16_stride * (upload_y - info.height + 1); upload_y = info.height - 1; } } int last_line_upload_x = upload_x ^ ((upload_y & 1) << 1); if (last_line_upload_x >= info.width && upload_y > 0) { // If the last line won't trigger a write, the previous line probably did. upload_y--; upload_x += tmem16_stride; } int iteration_offset; upload_x ^= ((upload_y & 1) << 1) | upload_x_xor; if (info.vram_size == 3 || yuv) { iteration_offset = 4 * (upload_x & ~1); } else if (info.vram_size == 2) { // In 16bpp VRAM mode, we are supposed to step 4 pixels at a time (8 bytes), which will form 2 complete pixels. // However, in 32bpp tile mode we're not shifting the X value appropriately. // So, we're writing texels [0, 1, ..., 4, 5, ...], etc. if ((upload_x & 2) != 0) { // We're not writing in this line, but the previous line might have! // Interleaving patterns will form ... if (upload_y > 0) { upload_y--; upload_x += tmem16_stride; upload_x ^= 2; } else { // These 2 words will never be written to. return; } } iteration_offset = 2 * (upload_x & ~1); } else if (info.vram_size == 1) { // 4 potential mirrors. for (int i = 0; i < 4 && upload_y > 0 && (upload_x & 6) != 0; i++) { upload_y--; upload_x += tmem16_stride; upload_x ^= 2; } if ((upload_x & 6) != 0) { // These 6 words will never be written to. return; } iteration_offset = upload_x & ~1; } if (upload_x >= info.width) return; int line_rdram_addr = info.vram_addr + ((upload_y * info.vram_width) << (info.vram_size - 1)); // The loading pipeline reads 64 bits per iteration. int rdram_addr = line_rdram_addr + iteration_offset + 4 * (upload_x & 1); uint word; if ((rdram_addr & 3) == 0) { word = uint(vram32.data[rdram_addr >> 2]); } else { word = (uint(vram8.data[rdram_addr ^ 3]) << 24) | (uint(vram8.data[(rdram_addr + 1) ^ 3]) << 16) | (uint(vram8.data[(rdram_addr + 2) ^ 3]) << 8) | uint(vram8.data[(rdram_addr + 3) ^ 3]); } if (yuv) { // Lower TMEM receives interleaved UV samples, while upper receives Y. if (upper_tmem) { uint y0 = (word >> 16u) & 0xffu; uint y1 = (word >> 0u) & 0xffu; word = (y0 << 8u) | y1; } else { uint u = (word >> 24u) & 0xffu; uint v = (word >> 8u) & 0xffu; word = (u << 8u) | v; } } else { word >>= 16u - 16u * uint(upper_tmem); word &= 0xffffu; } current_tmem_value = word; tmem_dirty = true; } void update_tmem_16(UploadInfo info, int tmem16_index) { int tmem16_offset = (info.tmem_offset & 0xfff) >> 1; int tmem16_stride = info.tmem_stride_words; int pixel_offset = (tmem16_index - tmem16_offset) & 0x7ff; int upload_x, upload_y; int upload_x_xor = 0; if (info.mode == UPLOAD_MODE_BLOCK) { int word_offset = pixel_offset >> 2; if (info.tmem_stride_words == 0) { // Trivial case, we can just compute T factor directly and set upload_x_xor. // Other than that, it works like a simple 1D upload. upload_x_xor = (((word_offset * info.dxt) >> 16) & 1) << 1; } else { // Welp ... This is pure insanity, but if we want to be completely correct ... int min_t = compute_upload_t(word_offset, info.min_t_mod); int max_t = compute_upload_t(word_offset, info.max_t_mod); // If t has a range, then the solution to Y = (t = floor(X * dt / 2048)) * stride + X has a range space of: // Y - t_max * stride <= X <= Y - t_min * stride. int max_word_candidate = word_offset - tmem16_stride * min_t; int min_word_candidate = word_offset - tmem16_stride * max_t; // If we have constraints for X, we constraint T further. min_t = max(min_t, (min_word_candidate * info.dxt) >> 16); max_t = min(max_t, (max_word_candidate * info.dxt) >> 16); bool found_candidate = false; for (int t = max_t; t >= min_t; t--) { // Check to see if t is a solution to the equation. int candidate_solution = word_offset - tmem16_stride * t; int computed_t = (candidate_solution * info.dxt) >> 16; if (candidate_solution + computed_t * tmem16_stride == word_offset) { found_candidate = true; upload_x_xor = (computed_t & 1) << 1; pixel_offset = (candidate_solution << 2) + (pixel_offset & 3); } } // We strided over this 64bpp word. if (!found_candidate) return; } upload_x = pixel_offset; upload_y = 0; } else if (tmem16_stride == 0) { // For TMEM stride of 0 we're essentially replaying the same line over and over and the final visible result // is what happened in Y == height - 1. upload_x = pixel_offset; upload_y = info.height - 1; } else { upload_y = compute_upload_t(pixel_offset, info.inv_tmem_stride_words); upload_x = pixel_offset - upload_y * tmem16_stride; // If stride is smaller than width, we'll need to unroll the last line. if (upload_y >= info.height) { upload_x += tmem16_stride * (upload_y - info.height + 1); upload_y = info.height - 1; } } // This is pure bullshit magic which arises as an edge case when // tile pixel size does not match texture image size. // Should not happen in normal applications. // This is basically doing scatter-as-gather, so we need to figure out // if there is no write to our texel after all (striding), or if there are multiple writes // to our texel, in which case we need to figure out the last writer. // This code is black magic, and it's made with blood, sweat and tears from testing with lots of trial and error. int iteration_offset; if (info.tmem_size != info.vram_size) { if (info.vram_size - info.tmem_size == 1) { // If TMEM is N bpp but VRAM is 2N bpp, we will get mirrored writes here. // Select which half of the 2N bpp load we observe in TMEM. iteration_offset = (upload_x & ~3) * 4; if ((upload_x & ~3) + 2 < (info.vram_effective_width >> (3 - info.vram_size))) iteration_offset += 8; } else if (info.tmem_size == 2 && info.vram_size == 1) { // In 8bpp VRAM mode, we are supposed to step 8 pixels at a time (8 bytes), which will form 4 complete pixels. // However, in 16bpp tile mode we're not shifting the X value appropriately. // So, we're writing texels [0, 1, 2, 3, ..., 8, 9, 10, 11], etc. if ((upload_x & 4) != 0) { // We're not writing in this line, but the previous line might have! // Interleaving patterns will form ... if ((tmem16_stride & 4) != 0 && upload_y > 0) { upload_y--; upload_x += tmem16_stride; } else { // These 4 words will never be written to. return; } } iteration_offset = upload_x & ~3; } } else { // Normal case TMEM size aligns with VRAM size. iteration_offset = (upload_x & ~3) * 2; } if (upload_x >= info.width) return; int line_rdram_addr = info.vram_addr + ((upload_y * info.vram_width) << (info.vram_size - 1)); upload_x ^= ((upload_y & 1) << 1) | upload_x_xor; // The loading pipeline reads 64 bits per iteration. int rdram_addr = line_rdram_addr + iteration_offset + 2 * (upload_x & 3); uint word; if ((rdram_addr & 1) == 0) word = uint(vram16.data[(rdram_addr >> 1) ^ 1]); else word = (uint(vram8.data[rdram_addr ^ 3]) << 8) | uint(vram8.data[(rdram_addr + 1) ^ 3]); current_tmem_value = word; tmem_dirty = true; } void update_tmem_lut(UploadInfo info, int tmem16_index) { int tmem16_offset = (info.tmem_offset & 0xfff) >> 1; int pixel_offset = (tmem16_index - tmem16_offset) & 0x7ff; int pixel_offset_splat; if (info.vram_size - info.tmem_size == 2) { pixel_offset_splat = pixel_offset >> 2; pixel_offset_splat <<= info.vram_size - 2; if (pixel_offset_splat >= info.vram_effective_width) return; } else if (info.vram_size - info.tmem_size == 1) { if ((pixel_offset & 4) == 0) { int shamt = info.tmem_size + (info.vram_size == 2 ? 2 : 0); pixel_offset_splat = (pixel_offset & ~7) >> shamt; if (pixel_offset_splat >= info.vram_effective_width) return; } else { return; } } else if (info.vram_size == info.tmem_size) { if ((pixel_offset & 0xc) == 0) { int shamt = info.tmem_size + (info.vram_size == 2 ? 2 : 0); pixel_offset_splat = (pixel_offset & ~3) >> shamt; if (pixel_offset_splat >= info.vram_effective_width) return; } else { return; } } else if (info.vram_size - info.tmem_size == -1) { if ((pixel_offset & 0x1c) == 0) { int shamt = info.tmem_size; pixel_offset_splat = (pixel_offset >> shamt) & ~7; if (pixel_offset_splat >= info.vram_effective_width) return; } else { return; } } else { // 4bpp tile, 32bpp VRAM. Mirrored writes. int span_iteration = pixel_offset >> 2; span_iteration = span_iteration * 2; int span_pixel = span_iteration * 2; if (span_pixel + 2 < info.vram_effective_width) span_pixel += 2; if (span_pixel >= info.vram_effective_width) return; pixel_offset_splat = span_pixel; } int rdram_addr = info.vram_addr + (pixel_offset_splat << (info.vram_size - 1)); // Odd behavior when we have unaligned TLUT uploads. rdram_addr += 2 * (rdram_addr & 1) * (pixel_offset & 3); uint word; if ((rdram_addr & 1) == 0) word = uint(vram16.data[(rdram_addr >> 1) ^ 1]); else word = (uint(vram8.data[rdram_addr ^ 3]) << 8) | uint(vram8.data[(rdram_addr + 1) ^ 3]); current_tmem_value = word; tmem_dirty = true; } void main() { tmem_dirty = false; current_tmem_value = uint(tmem16.data[gl_GlobalInvocationID.x]); int tmem16_index = int(gl_GlobalInvocationID.x) ^ 1; bool upper_tmem = tmem16_index >= 0x400; tile_instances.instances[0].data[gl_GlobalInvocationID.x] = mem_u16(current_tmem_value); int num_uploads = registers.num_uploads; for (int i = 0; i < num_uploads; i++) { UploadInfo info = upload_info[i]; if (info.mode == UPLOAD_MODE_TLUT) { update_tmem_lut(info, tmem16_index); } else { bool yuv = info.tmem_fmt == TEXTURE_FMT_YUV; if (info.tmem_size == 3 || yuv) update_tmem_32(info, tmem16_index & 0x3ff, upper_tmem, yuv); else if (info.tmem_fmt != TEXTURE_FMT_YUV) update_tmem_16(info, tmem16_index); } tile_instances.instances[i + 1].data[gl_GlobalInvocationID.x] = mem_u16(current_tmem_value); } if (tmem_dirty) tmem16.data[gl_GlobalInvocationID.x] = mem_u16(current_tmem_value); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/ubershader.comp000066400000000000000000000071201415063341600265550ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // RIP to any GPU which attempts to execute this monstrosity :) #if SUBGROUP #extension GL_KHR_shader_subgroup_basic : require #extension GL_KHR_shader_subgroup_vote : require #extension GL_KHR_shader_subgroup_ballot : require #extension GL_KHR_shader_subgroup_arithmetic : require #endif #include "small_types.h" layout(local_size_x_id = 3, local_size_y_id = 4) in; #include "debug.h" #include "data_structures_buffers.h" #include "noise.h" #include "memory_interfacing.h" #include "shading.h" layout(push_constant, std430) uniform Registers { uint fb_addr_index; uint fb_depth_addr_index; uint fb_width; uint fb_height; uint group_mask; } registers; layout(constant_id = 5) const int MAX_PRIMITIVES = 256; layout(constant_id = 6) const int MAX_WIDTH = 1024; const int TILE_BINNING_STRIDE = MAX_PRIMITIVES / 32; const int MAX_TILES_X = MAX_WIDTH / int(gl_WorkGroupSize.x); void main() { int x = int(gl_GlobalInvocationID.x); int y = int(gl_GlobalInvocationID.y); ivec2 tile = ivec2(gl_WorkGroupID.xy); int linear_tile = tile.x + tile.y * MAX_TILES_X; int linear_tile_base = linear_tile * TILE_BINNING_STRIDE; uint coarse_binned = tile_binning_coarse.elems[linear_tile] & registers.group_mask; if (coarse_binned == 0u) return; init_tile(gl_GlobalInvocationID.xy, registers.fb_width, registers.fb_height, registers.fb_addr_index, registers.fb_depth_addr_index); while (coarse_binned != 0u) { int mask_index = findLSB(coarse_binned); coarse_binned &= ~uint(1 << mask_index); uint binned = tile_binning.elems[linear_tile_base + mask_index]; while (binned != 0u) { int i = findLSB(binned); binned &= ~uint(1 << i); uint primitive_index = uint(i + 32 * mask_index); ShadedData shaded; if (shade_pixel(x, y, primitive_index, shaded)) { if ((shaded.coverage_count & COVERAGE_FILL_BIT) != 0) fill_color(derived_setup.elems[primitive_index].fill_color); else if ((shaded.coverage_count & COVERAGE_COPY_BIT) != 0) copy_pipeline(shaded.z_dith, primitive_index); else depth_blend(x, y, primitive_index, shaded); } } } finish_tile(gl_GlobalInvocationID.xy, registers.fb_width, registers.fb_height, registers.fb_addr_index, registers.fb_depth_addr_index); } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/update_upscaled_domain_post.comp000066400000000000000000000063671415063341600322030ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "small_types.h" #include "fb_formats.h" layout(local_size_x_id = 3) in; layout(constant_id = 0) const int RDRAM_SIZE = 8 * 1024 * 1024; const int RDRAM_MASK_8 = RDRAM_SIZE - 1; const int RDRAM_MASK_16 = RDRAM_MASK_8 >> 1; const int RDRAM_MASK_32 = RDRAM_MASK_8 >> 2; layout(constant_id = 1) const int FB_SIZE_LOG2 = 0; layout(constant_id = 2) const bool COLOR_DEPTH_ALIAS = false; layout(constant_id = 4) const int NUM_SAMPLES = 1; layout(push_constant) uniform Registers { uint num_pixels, fb_addr, fb_depth_addr; } registers; layout(set = 0, binding = 0) readonly buffer RDRAMSingleSampled8 { uint8_t elems[]; } vram8; layout(set = 0, binding = 0) readonly buffer RDRAMSingleSampled16 { uint16_t elems[]; } vram16; layout(set = 0, binding = 0) readonly buffer RDRAMSingleSampled32 { uint elems[]; } vram32; layout(set = 0, binding = 2) buffer RDRAMUpscalingReference8 { uint8_t elems[]; } vram_reference8; layout(set = 0, binding = 2) buffer RDRAMUpscalingReference16 { uint16_t elems[]; } vram_reference16; layout(set = 0, binding = 2) buffer RDRAMUpscalingReference32 { uint elems[]; } vram_reference32; void copy_rdram_8(uint index) { index &= RDRAM_MASK_8; uint real_word = uint(vram8.elems[index]); vram_reference8.elems[index] = uint8_t(real_word); } void copy_rdram_16(uint index) { index &= RDRAM_MASK_16; uint real_word = uint(vram16.elems[index]); vram_reference16.elems[index] = uint16_t(real_word); } void copy_rdram_32(uint index) { index &= RDRAM_MASK_32; uint real_word = vram32.elems[index]; vram_reference32.elems[index] = real_word; } void main() { uint index = gl_GlobalInvocationID.x; if (index >= registers.num_pixels) return; uint depth_index = index + registers.fb_depth_addr; uint color_index = index + registers.fb_addr; switch (FB_SIZE_LOG2) { case 0: copy_rdram_8(color_index); break; case 1: copy_rdram_16(color_index); break; case 2: copy_rdram_32(color_index); break; } if (!COLOR_DEPTH_ALIAS) copy_rdram_16(depth_index); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/update_upscaled_domain_pre.comp000066400000000000000000000125341415063341600317750ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "small_types.h" layout(local_size_x_id = 3) in; layout(constant_id = 0) const int RDRAM_SIZE = 8 * 1024 * 1024; const int RDRAM_MASK_8 = RDRAM_SIZE - 1; const int RDRAM_MASK_16 = RDRAM_MASK_8 >> 1; const int RDRAM_MASK_32 = RDRAM_MASK_8 >> 2; layout(constant_id = 1) const int FB_SIZE_LOG2 = 0; layout(constant_id = 2) const bool COLOR_DEPTH_ALIAS = false; layout(constant_id = 4) const int NUM_SAMPLES = 1; layout(push_constant) uniform Registers { uint num_pixels, fb_addr, fb_depth_addr; } registers; layout(set = 0, binding = 0) readonly buffer RDRAMSingleSampled8 { uint8_t elems[]; } vram8; layout(set = 0, binding = 0) readonly buffer RDRAMSingleSampled16 { uint16_t elems[]; } vram16; layout(set = 0, binding = 0) readonly buffer RDRAMSingleSampled32 { uint elems[]; } vram32; layout(set = 0, binding = 1) readonly buffer RDRAMHiddenSingleSampled { uint8_t elems[]; } hidden_vram; layout(set = 0, binding = 2) buffer RDRAMUpscalingReference8 { uint8_t elems[]; } vram_reference8; layout(set = 0, binding = 2) buffer RDRAMUpscalingReference16 { uint16_t elems[]; } vram_reference16; layout(set = 0, binding = 2) buffer RDRAMUpscalingReference32 { uint elems[]; } vram_reference32; layout(set = 0, binding = 3) buffer RDRAMUpscaling8 { uint8_t elems[]; } vram_upscaled8; layout(set = 0, binding = 3) buffer RDRAMUpscaling16 { uint16_t elems[]; } vram_upscaled16; layout(set = 0, binding = 3) buffer RDRAMUpscaling32 { uint elems[]; } vram_upscaled32; layout(set = 0, binding = 4) buffer RDRAMHiddenUpscaling { uint8_t elems[]; } hidden_vram_upscaled; void update_rdram_8(uint index) { index &= RDRAM_MASK_8; uint real_word = uint(vram8.elems[index]); uint reference_word = uint(vram_reference8.elems[index]); if (real_word != reference_word) { uint mirrored_index = index ^ 3u; uint real_hidden_word = uint(hidden_vram.elems[mirrored_index >> 1u]); for (int i = 0; i < NUM_SAMPLES; i++) { vram_upscaled8.elems[index + i * RDRAM_SIZE] = uint8_t(real_word); if ((mirrored_index & 1u) != 0u) hidden_vram_upscaled.elems[(mirrored_index >> 1u) + i * (RDRAM_SIZE >> 1)] = uint8_t(real_hidden_word); } vram_reference8.elems[index] = uint8_t(real_word); } } void update_rdram_16(uint index) { index &= RDRAM_MASK_16; uint real_word = uint(vram16.elems[index]); uint reference_word = uint(vram_reference16.elems[index]); if (real_word != reference_word) { uint mirrored_index = index ^ 1u; uint real_hidden_word = uint(hidden_vram.elems[mirrored_index]); for (int i = 0; i < NUM_SAMPLES; i++) { vram_upscaled16.elems[index + i * (RDRAM_SIZE >> 1)] = uint16_t(real_word); hidden_vram_upscaled.elems[mirrored_index + i * (RDRAM_SIZE >> 1)] = uint8_t(real_hidden_word); } vram_reference16.elems[index] = uint16_t(real_word); } } void update_rdram_32(uint index) { index &= RDRAM_MASK_32; uint real_word = vram32.elems[index]; uint reference_word = vram_reference32.elems[index]; if (real_word != reference_word) { uint real_hidden_word0 = uint(hidden_vram.elems[2u * index]); uint real_hidden_word1 = uint(hidden_vram.elems[2u * index + 1u]); for (int i = 0; i < NUM_SAMPLES; i++) { vram_upscaled32.elems[index + i * (RDRAM_SIZE >> 2)] = real_word; hidden_vram_upscaled.elems[2u * index + i * (RDRAM_SIZE >> 1)] = uint8_t(real_hidden_word0); hidden_vram_upscaled.elems[2u * index + 1u + i * (RDRAM_SIZE >> 1)] = uint8_t(real_hidden_word1); } vram_reference32.elems[index] = real_word; } } void main() { uint index = gl_GlobalInvocationID.x; if (index >= registers.num_pixels) return; uint depth_index = index + registers.fb_depth_addr; uint color_index = index + registers.fb_addr; switch (FB_SIZE_LOG2) { case 0: update_rdram_8(color_index); break; case 1: update_rdram_16(color_index); break; case 2: update_rdram_32(color_index); break; } if (!COLOR_DEPTH_ALIAS) update_rdram_16(depth_index); } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/update_upscaled_domain_resolve.comp000066400000000000000000000213271415063341600326660ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "small_types.h" #include "fb_formats.h" layout(local_size_x_id = 3) in; layout(constant_id = 0) const int RDRAM_SIZE = 8 * 1024 * 1024; const int RDRAM_MASK_8 = RDRAM_SIZE - 1; const int RDRAM_MASK_16 = RDRAM_MASK_8 >> 1; const int RDRAM_MASK_32 = RDRAM_MASK_8 >> 2; layout(constant_id = 1) const int FB_SIZE_LOG2 = 0; layout(constant_id = 2) const bool COLOR_DEPTH_ALIAS = false; layout(constant_id = 4) const int NUM_SAMPLES = 1; layout(constant_id = 5) const bool DITHER = false; layout(constant_id = 6) const bool RDRAM_UNSCALED_WRITE_MASK = false; layout(push_constant) uniform Registers { uint num_pixels, fb_addr, fb_depth_addr, width, height; } registers; layout(set = 0, binding = 0) writeonly buffer RDRAMSingleSampled8 { uint8_t elems[]; } vram8; layout(set = 0, binding = 0) writeonly buffer RDRAMSingleSampled16 { uint16_t elems[]; } vram16; layout(set = 0, binding = 0) writeonly buffer RDRAMSingleSampled32 { uint elems[]; } vram32; layout(set = 0, binding = 2) writeonly buffer RDRAMUpscalingReference8 { uint8_t elems[]; } vram_reference8; layout(set = 0, binding = 2) writeonly buffer RDRAMUpscalingReference16 { uint16_t elems[]; } vram_reference16; layout(set = 0, binding = 2) writeonly buffer RDRAMUpscalingReference32 { uint elems[]; } vram_reference32; layout(set = 0, binding = 3) readonly buffer RDRAMUpscaling8 { uint8_t elems[]; } vram_upscaled8; layout(set = 0, binding = 3) readonly buffer RDRAMUpscaling16 { uint16_t elems[]; } vram_upscaled16; layout(set = 0, binding = 3) readonly buffer RDRAMUpscaling32 { uint elems[]; } vram_upscaled32; layout(set = 0, binding = 4) readonly buffer RDRAMHiddenUpscaling { uint8_t elems[]; } hidden_vram_upscaled; void copy_rdram_8(uint index) { index &= RDRAM_MASK_8; index ^= 3u; uint r = 0u; for (int i = 0; i < NUM_SAMPLES; i++) { uint real_word = uint(vram_upscaled8.elems[index]); r += real_word; } r = (r + (NUM_SAMPLES >> 1)) / NUM_SAMPLES; vram_reference8.elems[index] = uint8_t(r); vram8.elems[index] = uint8_t(r); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram8.elems[index + RDRAM_SIZE] = mem_u8(0xff); } // Don't bother writing back hidden VRAM. It is not visible to host anyways, and coverage is meaningless when it's filtered. // If host later decides to modify the CPU memory, then the hidden VRAM values become complete bogus either way. } uvec4 decode_rgba5551(uint word) { return (uvec4(word) >> uvec4(11, 6, 1, 0)) & uvec4(0x1f, 0x1f, 0x1f, 1); } uint encode_rgba5551(uvec4 color) { return (color.r << 11u) | (color.g << 6u) | (color.b << 1u) | color.a; } const uint bayer_dither_lut[16] = uint[]( 0, 4, 1, 5, 4, 0, 5, 1, 3, 7, 2, 6, 7, 3, 6, 2); void copy_rdram_16(uint index, uint x, uint y) { index &= RDRAM_MASK_16; index ^= 1u; uvec4 rgba = uvec4(0u); for (int i = 0; i < NUM_SAMPLES; i++) { uint real_word = uint(vram_upscaled16.elems[index + i * (RDRAM_SIZE >> 1)]); rgba += decode_rgba5551(real_word); } if (DITHER) { uint dither_value = bayer_dither_lut[(y & 3u) * 4u + (x & 3u)] * NUM_SAMPLES; rgba = (8u * rgba + dither_value) / (8 * NUM_SAMPLES); } else { rgba = (rgba + (NUM_SAMPLES >> 1)) / NUM_SAMPLES; } uint encoded = encode_rgba5551(rgba); vram16.elems[index] = uint16_t(encoded); vram_reference16.elems[index] = uint16_t(encoded); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram16.elems[index + (RDRAM_SIZE >> 1u)] = mem_u16(0xffff); } // Don't bother writing back hidden VRAM. It is not visible to host anyways, and coverage is meaningless when it's filtered. // If host later decides to modify the CPU memory, then the hidden VRAM values become complete bogus either way. } void copy_rdram_16_single_sample(uint index) { // Copies the first sample. We cannot meaningfully filter depth samples. // The first sample should overlap exactly with the single-sampled version. // Coverage clipping might slightly change the result, but shouldn't be different enough to break things. index &= RDRAM_MASK_16; index ^= 1u; uint upscaled_word = uint(vram_upscaled16.elems[index]); vram16.elems[index] = uint16_t(upscaled_word); vram_reference16.elems[index] = uint16_t(upscaled_word); if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram16.elems[index + (RDRAM_SIZE >> 1u)] = mem_u16(0xffff); } // Don't bother writing back hidden VRAM. It is not visible to host anyways, and coverage is meaningless when it's filtered. // If host later decides to modify the CPU memory, then the hidden VRAM values become complete bogus either way. } uvec4 decode_rgba8(uint word) { return (uvec4(word) >> uvec4(24, 16, 8, 0)) & uvec4(0xff); } uint encode_rgba8(uvec4 color) { return (color.r << 24u) | (color.g << 16u) | (color.b << 8u) | (color.a << 0u); } void copy_rdram_32(uint index) { index &= RDRAM_MASK_32; uvec4 rgba = uvec4(0u); for (int i = 0; i < NUM_SAMPLES; i++) { uint real_word = vram_upscaled32.elems[index + i * (RDRAM_SIZE >> 2)]; rgba += decode_rgba8(real_word); } rgba = (rgba + (NUM_SAMPLES >> 1)) / NUM_SAMPLES; uint encoded = encode_rgba8(rgba); vram32.elems[index] = encoded; vram_reference32.elems[index] = encoded; if (RDRAM_UNSCALED_WRITE_MASK) { // Need this memory barrier to ensure the mask readback does not read // an invalid value from RDRAM. If the mask is seen, the valid RDRAM value is // also coherent. memoryBarrierBuffer(); vram32.elems[index + (RDRAM_SIZE >> 2u)] = ~0u; } // Don't bother writing back hidden VRAM. It is not visible to host anyways, and coverage is meaningless when it's filtered. // If host later decides to modify the CPU memory, then the hidden VRAM values become complete bogus either way. } void main() { uvec2 coord = gl_GlobalInvocationID.xy; if (coord.x >= registers.width) return; uint index = coord.y * registers.width + coord.x; uint depth_index = index + registers.fb_depth_addr; uint color_index = index + registers.fb_addr; uvec2 mask_coord = coord >> 2u; uint mask_index = mask_coord.x + mask_coord.y * ((registers.width + 3) >> 2u); uint write_mask = vram_upscaled32.elems[NUM_SAMPLES * (RDRAM_SIZE >> 2) + mask_index]; uint shamt = 2u * ((coord.x & 3u) + 4u * (coord.y & 3u)); write_mask = write_mask >> shamt; bool color_write_mask = (write_mask & 1u) != 0u; bool depth_write_mask = (write_mask & 2u) != 0u; if (color_write_mask) { switch (FB_SIZE_LOG2) { case 0: copy_rdram_8(color_index); break; case 1: copy_rdram_16(color_index, coord.x, coord.y); break; case 2: copy_rdram_32(color_index); break; } } if (!COLOR_DEPTH_ALIAS && depth_write_mask) copy_rdram_16_single_sample(depth_index); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_blend_fields.frag000066400000000000000000000027271415063341600275320ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #extension GL_EXT_samplerless_texture_functions : require layout(location = 0) out vec4 FragColor; layout(set = 0, binding = 0) uniform texture2D uImage; void main() { // A persistent pixel does not propagate more than one frame. vec4 input_pixel = texelFetch(uImage, ivec2(gl_FragCoord.xy), 0); FragColor = vec4(input_pixel.rgb * input_pixel.a, 0.0); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_debug.h000066400000000000000000000040071415063341600255070ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef VI_DEBUG_H_ #define VI_DEBUG_H_ #if defined(DEBUG_ENABLE) && DEBUG_ENABLE #include "debug_channel.h" void GENERIC_MESSAGE_(int line) { add_debug_message(0, uvec3(gl_FragCoord.xy, 0), line); } void GENERIC_MESSAGE_(int line, uint v) { add_debug_message(0, uvec3(gl_FragCoord.xy, 0), uvec2(line, v)); } void GENERIC_MESSAGE_(int line, uvec2 v) { add_debug_message(0, uvec3(gl_FragCoord.xy, 0), uvec3(line, v)); } void GENERIC_MESSAGE_(int line, uvec3 v) { add_debug_message(0, uvec3(gl_FragCoord.xy, 0), uvec4(line, v)); } #define GENERIC_MESSAGE0() GENERIC_MESSAGE_(__LINE__) #define GENERIC_MESSAGE1(a) GENERIC_MESSAGE_(__LINE__, a) #define GENERIC_MESSAGE2(a, b) GENERIC_MESSAGE_(__LINE__, uvec2(a, b)) #define GENERIC_MESSAGE3(a, b, c) GENERIC_MESSAGE_(__LINE__, uvec3(a, b, c)) #else #define GENERIC_MESSAGE0() #define GENERIC_MESSAGE1(a) #define GENERIC_MESSAGE2(a, b) #define GENERIC_MESSAGE3(a, b, c) #endif #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_deinterlace.frag000066400000000000000000000024551415063341600273750ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ layout(location = 0) in vec2 vUV; layout(set = 0, binding = 0) uniform sampler2D uSampler; layout(location = 0) out vec4 FragColor; void main() { FragColor = textureLod(uSampler, vUV, 0.0); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_deinterlace.vert000066400000000000000000000030351415063341600274310ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ layout(location = 0) out vec2 vUV; layout(push_constant) uniform UBO { float y_offset; } registers; void main() { if (gl_VertexIndex == 0) gl_Position = vec4(-1.0, -1.0, 0.0, 1.0); else if (gl_VertexIndex == 1) gl_Position = vec4(-1.0, +3.0, 0.0, 1.0); else gl_Position = vec4(+3.0, -1.0, 0.0, 1.0); vUV = vec2(gl_Position.x * 0.5 + 0.5, gl_Position.y * 0.5 + 0.5 + registers.y_offset); } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_divot.frag000066400000000000000000000056211415063341600262410ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #extension GL_EXT_samplerless_texture_functions : require #include "vi_debug.h" layout(location = 0) out uvec4 FragColor; #if defined(FETCH_BUG) && FETCH_BUG layout(location = 1) out uvec4 FragColorFetchBug; #endif layout(set = 0, binding = 0) uniform mediump utexture2DArray uFetchCache; void swap(inout uint a, inout uint b) { uint tmp = a; a = b; b = tmp; } uint median3(uint left, uint center, uint right) { if (left < center) swap(left, center); if (center < right) swap(center, right); if (left < center) swap(left, center); return center; } void main() { ivec2 pix = ivec2(gl_FragCoord.xy); uvec4 left = texelFetch(uFetchCache, ivec3(pix, 0), 0); uvec4 mid = texelFetchOffset(uFetchCache, ivec3(pix, 0), 0, ivec2(1, 0)); uvec4 right = texelFetchOffset(uFetchCache, ivec3(pix, 0), 0, ivec2(2, 0)); if ((left.a & mid.a & right.a) == 7u) { FragColor = mid; } else { // Median filter. TODO: Optimize with mid3? uint r = median3(left.r, mid.r, right.r); uint g = median3(left.g, mid.g, right.g); uint b = median3(left.b, mid.b, right.b); FragColor = uvec4(r, g, b, mid.a); } #if defined(FETCH_BUG) && FETCH_BUG left = texelFetch(uFetchCache, ivec3(pix, 1), 0); mid = texelFetchOffset(uFetchCache, ivec3(pix, 1), 0, ivec2(1, 0)); right = texelFetchOffset(uFetchCache, ivec3(pix, 1), 0, ivec2(2, 0)); if ((left.a & mid.a & right.a) == 7u) { FragColorFetchBug = mid; } else { // Median filter. TODO: Optimize with mid3? uint r = median3(left.r, mid.r, right.r); uint g = median3(left.g, mid.g, right.g); uint b = median3(left.b, mid.b, right.b); FragColorFetchBug = uvec4(r, g, b, mid.a); } #endif }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_fetch.frag000066400000000000000000000137061415063341600262100ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #extension GL_EXT_samplerless_texture_functions : require #include "small_types.h" #include "vi_status.h" #include "vi_debug.h" layout(set = 0, binding = 0) uniform mediump utexture2D uAAInput; layout(location = 0) out uvec4 FragColor; #if defined(FETCH_BUG) && FETCH_BUG layout(location = 1) out uvec4 FragColorFetchBug; #endif layout(push_constant) uniform Registers { ivec2 offset; } registers; ivec2 pix; uvec4 fetch_color_offset(ivec2 offset) { return texelFetch(uAAInput, pix + offset, 0); } void check_neighbor(uvec4 candidate, inout uvec3 lo, inout uvec3 hi, inout uvec3 second_lo, inout uvec3 second_hi) { if (candidate.a == 7u) { second_lo = min(second_lo, max(candidate.rgb, lo)); second_hi = max(second_hi, min(candidate.rgb, hi)); lo = min(candidate.rgb, lo); hi = max(candidate.rgb, hi); } } void main() { pix = ivec2(gl_FragCoord.xy) + registers.offset; uvec4 mid_pixel = fetch_color_offset(ivec2(0)); // AA-filter. If coverage is not full, we blend current pixel against background. uvec3 color; #if defined(FETCH_BUG) && FETCH_BUG uvec3 color_bug; #endif if (mid_pixel.a != 7u) { uvec3 lo = mid_pixel.rgb; uvec3 hi = lo; uvec3 second_lo = lo; uvec3 second_hi = lo; // Somehow, we're supposed to find the second lowest and second highest neighbor. uvec4 left_up = fetch_color_offset(ivec2(-1, -1)); uvec4 right_up = fetch_color_offset(ivec2(+1, -1)); uvec4 to_left = fetch_color_offset(ivec2(-2, 0)); uvec4 to_right = fetch_color_offset(ivec2(+2, 0)); uvec4 left_down = fetch_color_offset(ivec2(-1, +1)); uvec4 right_down = fetch_color_offset(ivec2(+1, +1)); check_neighbor(left_up, lo, hi, second_lo, second_hi); check_neighbor(right_up, lo, hi, second_lo, second_hi); check_neighbor(to_left, lo, hi, second_lo, second_hi); check_neighbor(to_right, lo, hi, second_lo, second_hi); #if defined(FETCH_BUG) && FETCH_BUG // In the fetch-bug state, we apparently do not read the lower values. // Instead, the lower values are treated as left and right. uvec3 lo_bug = lo; uvec3 hi_bug = hi; uvec3 second_lo_bug = second_lo; uvec3 second_hi_bug = second_hi; #endif check_neighbor(left_down, lo, hi, second_lo, second_hi); check_neighbor(right_down, lo, hi, second_lo, second_hi); #if defined(FETCH_BUG) && FETCH_BUG check_neighbor(to_left, lo_bug, hi_bug, second_lo_bug, second_hi_bug); check_neighbor(to_right, lo_bug, hi_bug, second_lo_bug, second_hi_bug); second_lo = mix(second_lo, lo, equal(mid_pixel.rgb, lo)); second_hi = mix(second_hi, hi, equal(mid_pixel.rgb, hi)); second_lo_bug = mix(second_lo_bug, lo_bug, equal(mid_pixel.rgb, lo_bug)); second_hi_bug = mix(second_hi_bug, hi_bug, equal(mid_pixel.rgb, hi_bug)); #endif uvec3 offset = second_lo + second_hi - (mid_pixel.rgb << 1u); uint coeff = 7u - mid_pixel.a; color = mid_pixel.rgb + (((offset * coeff) + 4u) >> 3u); color &= 0xffu; #if defined(FETCH_BUG) && FETCH_BUG uvec3 offset_bug = second_lo_bug + second_hi_bug - (mid_pixel.rgb << 1u); color_bug = mid_pixel.rgb + (((offset_bug * coeff) + 4u) >> 3u); color_bug &= 0xffu; #endif } else if (DITHER_ENABLE) { // Dither filter. ivec3 tmp_color = ivec3(mid_pixel.rgb >> 3u); ivec3 tmp_accum = ivec3(0); for (int y = -1; y <= 0; y++) { for (int x = -1; x <= 1; x++) { ivec3 col = ivec3(fetch_color_offset(ivec2(x, y)).rgb >> 3u); tmp_accum += clamp(col - tmp_color, ivec3(-1), ivec3(1)); } } #if defined(FETCH_BUG) && FETCH_BUG ivec3 tmp_accum_bug = tmp_accum; #endif tmp_accum += clamp(ivec3(fetch_color_offset(ivec2(-1, 1)).rgb >> 3u) - tmp_color, ivec3(-1), ivec3(1)); tmp_accum += clamp(ivec3(fetch_color_offset(ivec2(+1, 1)).rgb >> 3u) - tmp_color, ivec3(-1), ivec3(1)); tmp_accum += clamp(ivec3(fetch_color_offset(ivec2(0, 1)).rgb >> 3u) - tmp_color, ivec3(-1), ivec3(1)); color = (mid_pixel.rgb & 0xf8u) + tmp_accum; #if defined(FETCH_BUG) && FETCH_BUG tmp_accum_bug += clamp(ivec3(fetch_color_offset(ivec2(-1, 0)).rgb >> 3u) - tmp_color, ivec3(-1), ivec3(1)); tmp_accum_bug += clamp(ivec3(fetch_color_offset(ivec2(+1, 0)).rgb >> 3u) - tmp_color, ivec3(-1), ivec3(1)); color_bug = (mid_pixel.rgb & 0xf8u) + tmp_accum_bug; #endif } else { color = mid_pixel.rgb; #if defined(FETCH_BUG) && FETCH_BUG color_bug = mid_pixel.rgb; #endif } FragColor = uvec4(color, mid_pixel.a); #if defined(FETCH_BUG) && FETCH_BUG FragColorFetchBug = uvec4(color_bug, mid_pixel.a); #endif }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_scale.frag000066400000000000000000000103021415063341600261730ustar00rootroot00000000000000#version 450 /* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #extension GL_EXT_samplerless_texture_functions : require #include "small_types.h" #include "vi_status.h" #include "vi_debug.h" #include "noise.h" layout(set = 0, binding = 0) uniform mediump utexture2DArray uDivotOutput; layout(set = 1, binding = 0) uniform mediump utextureBuffer uGammaTable; layout(location = 0) out vec4 FragColor; layout(push_constant, std430) uniform Registers { int x_base; int y_base; int h_offset; int v_offset; int x_add; int y_add; int frame_count; int serrate_shift; int serrate_mask; int serrate_select; } registers; uvec3 vi_lerp(uvec3 a, uvec3 b, uint l) { return (a + (((b - a) * l + 16u) >> 5u)) & 0xffu; } uvec3 integer_gamma(uvec3 color) { uvec3 res; if (GAMMA_DITHER) { color = (color << 6) + noise_get_full_gamma_dither() + 256u; res = uvec3( texelFetch(uGammaTable, int(color.r)).r, texelFetch(uGammaTable, int(color.g)).r, texelFetch(uGammaTable, int(color.b)).r); } else { res = uvec3( texelFetch(uGammaTable, int(color.r)).r, texelFetch(uGammaTable, int(color.g)).r, texelFetch(uGammaTable, int(color.b)).r); } return res; } layout(constant_id = 2) const bool FETCH_BUG = false; void main() { ivec2 coord = ivec2(gl_FragCoord.xy) + ivec2(registers.h_offset, registers.v_offset); if ((coord.y & registers.serrate_mask) != registers.serrate_select) discard; coord.y >>= registers.serrate_shift; if (GAMMA_DITHER) reseed_noise(coord.x, coord.y, registers.frame_count); int x = coord.x * registers.x_add + registers.x_base; int y = coord.y * registers.y_add + registers.y_base; ivec2 base_coord = ivec2(x, y) >> 10; uvec3 c00 = texelFetch(uDivotOutput, ivec3(base_coord, 0), 0).rgb; int bug_offset = 0; if (FETCH_BUG) { // This is super awkward. // Basically there seems to be some kind of issue where if we interpolate in Y, // we're going to get buggy output. // If we hit this case, the next line we filter against will come from the "buggy" array slice. // Why this makes sense, I have no idea. int prev_y = (y - registers.y_add) >> 10; int next_y = (y + registers.y_add) >> 10; if (coord.y != 0 && base_coord.y == prev_y && base_coord.y != next_y) bug_offset = 1; } if (SCALE_AA) { int x_frac = (x >> 5) & 31; int y_frac = (y >> 5) & 31; uvec3 c10 = texelFetchOffset(uDivotOutput, ivec3(base_coord, 0), 0, ivec2(1, 0)).rgb; uvec3 c01 = texelFetchOffset(uDivotOutput, ivec3(base_coord, bug_offset), 0, ivec2(0, 1)).rgb; uvec3 c11 = texelFetchOffset(uDivotOutput, ivec3(base_coord, bug_offset), 0, ivec2(1)).rgb; c00 = vi_lerp(c00, c01, y_frac); c10 = vi_lerp(c10, c11, y_frac); c00 = vi_lerp(c00, c10, x_frac); } if (GAMMA_ENABLE) c00 = integer_gamma(c00); else if (GAMMA_DITHER) c00 = min(c00 + noise_get_partial_gamma_dither(), uvec3(0xff)); FragColor = vec4(vec3(c00) / 255.0, 1.0); }ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/vi_status.h000066400000000000000000000044571415063341600257550ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef VI_STATUS_H_ #define VI_STATUS_H_ layout(constant_id = 1) const int VI_STATUS = 0; const int VI_CONTROL_TYPE_BLANK_BIT = 0 << 0; const int VI_CONTROL_TYPE_RESERVED_BIT = 1 << 0; const int VI_CONTROL_TYPE_RGBA5551_BIT = 2 << 0; const int VI_CONTROL_TYPE_RGBA8888_BIT = 3 << 0; const int VI_CONTROL_TYPE_MASK = 3 << 0; const int VI_CONTROL_GAMMA_DITHER_ENABLE_BIT = 1 << 2; const int VI_CONTROL_GAMMA_ENABLE_BIT = 1 << 3; const int VI_CONTROL_DIVOT_ENABLE_BIT = 1 << 4; const int VI_CONTROL_SERRATE_BIT = 1 << 6; const int VI_CONTROL_DITHER_FILTER_ENABLE_BIT = 1 << 16; const int VI_CONTROL_META_AA_BIT = 1 << 17; const int VI_CONTROL_META_SCALE_BIT = 1 << 18; const bool FMT_RGBA5551 = (VI_STATUS & VI_CONTROL_TYPE_MASK) == VI_CONTROL_TYPE_RGBA5551_BIT; const bool FMT_RGBA8888 = (VI_STATUS & VI_CONTROL_TYPE_MASK) == VI_CONTROL_TYPE_RGBA8888_BIT; const bool DITHER_ENABLE = (VI_STATUS & VI_CONTROL_DITHER_FILTER_ENABLE_BIT) != 0; const bool FETCH_AA = (VI_STATUS & VI_CONTROL_META_AA_BIT) != 0; const bool SCALE_AA = (VI_STATUS & VI_CONTROL_META_SCALE_BIT) != 0; const bool GAMMA_ENABLE = (VI_STATUS & VI_CONTROL_GAMMA_ENABLE_BIT) != 0; const bool GAMMA_DITHER = (VI_STATUS & VI_CONTROL_GAMMA_DITHER_ENABLE_BIT) != 0; #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/shaders/z_encode.h000066400000000000000000000035541415063341600255170ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #ifndef Z_ENCODE_H_ #define Z_ENCODE_H_ // The Z compression is kind of clever, and uses inverted FP, with more precision close to 1. // The compressed Z result is 14 bits, and decompresses to 18-bit UNORM. int z_decompress(u16 z_) { int z = int(z_); int exponent = z >> 11; int mantissa = z & 0x7ff; int shift = max(6 - exponent, 0); int base = 0x40000 - (0x40000 >> exponent); return (mantissa << shift) + base; } u16 z_compress(int z) { int inv_z = max(0x3ffff - z, 1); int exponent = 17 - findMSB(inv_z); exponent = clamp(exponent, 0, 7); int shift = max(6 - exponent, 0); int mantissa = (z >> shift) & 0x7ff; return u16((exponent << 11) + mantissa); } int dz_decompress(int dz) { return 1 << dz; } int dz_compress(int dz) { return max(findMSB(dz), 0); } #endifares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/video_interface.cpp000066400000000000000000001063221415063341600257560ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "video_interface.hpp" #include "rdp_renderer.hpp" #include "luts.hpp" #include #ifndef PARALLEL_RDP_SHADER_DIR #include "shaders/slangmosh.hpp" #endif namespace RDP { void VideoInterface::set_device(Vulkan::Device *device_) { device = device_; init_gamma_table(); if (const char *env = getenv("VI_DEBUG")) debug_channel = strtol(env, nullptr, 0) != 0; if (const char *env = getenv("VI_DEBUG_X")) filter_debug_channel_x = strtol(env, nullptr, 0); if (const char *env = getenv("VI_DEBUG_Y")) filter_debug_channel_y = strtol(env, nullptr, 0); if (const char *timestamp_env = getenv("PARALLEL_RDP_BENCH")) timestamp = strtol(timestamp_env, nullptr, 0) > 0; } void VideoInterface::set_renderer(Renderer *renderer_) { renderer = renderer_; } int VideoInterface::resolve_shader_define(const char *name, const char *define) const { if (strcmp(define, "DEBUG_ENABLE") == 0) return int(debug_channel); else return 0; } void VideoInterface::message(const std::string &tag, uint32_t code, uint32_t x, uint32_t y, uint32_t, uint32_t num_words, const Vulkan::DebugChannelInterface::Word *words) { if (filter_debug_channel_x >= 0 && x != uint32_t(filter_debug_channel_x)) return; if (filter_debug_channel_y >= 0 && y != uint32_t(filter_debug_channel_y)) return; switch (num_words) { case 1: LOGI("(%u, %u), line %d.\n", x, y, words[0].s32); break; case 2: LOGI("(%u, %u), line %d: (%d).\n", x, y, words[0].s32, words[1].s32); break; case 3: LOGI("(%u, %u), line %d: (%d, %d).\n", x, y, words[0].s32, words[1].s32, words[2].s32); break; case 4: LOGI("(%u, %u), line %d: (%d, %d, %d).\n", x, y, words[0].s32, words[1].s32, words[2].s32, words[3].s32); break; default: LOGE("Unknown number of generic parameters: %u\n", num_words); break; } } void VideoInterface::init_gamma_table() { Vulkan::BufferCreateInfo info = {}; info.domain = Vulkan::BufferDomain::Device; info.size = sizeof(gamma_table); info.usage = VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT; gamma_lut = device->create_buffer(info, gamma_table); Vulkan::BufferViewCreateInfo view = {}; view.buffer = gamma_lut.get(); view.range = sizeof(gamma_table); view.format = VK_FORMAT_R8_UINT; gamma_lut_view = device->create_buffer_view(view); } void VideoInterface::set_vi_register(VIRegister reg, uint32_t value) { vi_registers[unsigned(reg)] = value; } void VideoInterface::set_rdram(const Vulkan::Buffer *rdram_, size_t offset, size_t size) { rdram = rdram_; rdram_offset = offset; rdram_size = size; } void VideoInterface::set_hidden_rdram(const Vulkan::Buffer *hidden_rdram_) { hidden_rdram = hidden_rdram_; } void VideoInterface::set_shader_bank(const ShaderBank *bank) { shader_bank = bank; } static VkPipelineStageFlagBits layout_to_stage(VkImageLayout layout) { switch (layout) { case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: return VK_PIPELINE_STAGE_TRANSFER_BIT; case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: return VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: return VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; default: return VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; } } static VkAccessFlags layout_to_access(VkImageLayout layout) { switch (layout) { case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: return VK_ACCESS_TRANSFER_READ_BIT; case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: return VK_ACCESS_TRANSFER_WRITE_BIT; case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: return VK_ACCESS_SHADER_READ_BIT; case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: return VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; default: return 0; } } VideoInterface::Registers VideoInterface::decode_vi_registers() const { Registers reg = {}; reg.x_start = (vi_registers[unsigned(VIRegister::XScale)] >> 16) & 0xfff; reg.y_start = (vi_registers[unsigned(VIRegister::YScale)] >> 16) & 0xfff; reg.h_start = (vi_registers[unsigned(VIRegister::HStart)] >> 16) & 0x3ff; reg.v_start = (vi_registers[unsigned(VIRegister::VStart)] >> 16) & 0x3ff; reg.h_end = vi_registers[unsigned(VIRegister::HStart)] & 0x3ff; reg.v_end = vi_registers[unsigned(VIRegister::VStart)] & 0x3ff; reg.h_res = reg.h_end - reg.h_start; reg.v_res = (reg.v_end - reg.v_start) >> 1; reg.x_add = vi_registers[unsigned(VIRegister::XScale)] & 0xfff; reg.y_add = vi_registers[unsigned(VIRegister::YScale)] & 0xfff; reg.v_sync = vi_registers[unsigned(VIRegister::VSync)] & 0x3ff; reg.status = vi_registers[unsigned(VIRegister::Control)]; reg.vi_width = vi_registers[unsigned(VIRegister::Width)] & 0xfff; reg.vi_offset = vi_registers[unsigned(VIRegister::Origin)] & 0xffffff; reg.v_current_line = vi_registers[unsigned(VIRegister::VCurrentLine)] & 1; reg.is_pal = unsigned(reg.v_sync) > (VI_V_SYNC_NTSC + 25); reg.h_start -= reg.is_pal ? VI_H_OFFSET_PAL : VI_H_OFFSET_NTSC; int v_start_offset = reg.is_pal ? VI_V_OFFSET_PAL : VI_V_OFFSET_NTSC; reg.v_start = (reg.v_start - v_start_offset) / 2; if (reg.h_start < 0) { reg.x_start -= reg.x_add * reg.h_start; reg.h_res += reg.h_start; reg.h_start = 0; reg.left_clamp = true; } if (reg.h_start + reg.h_res > VI_SCANOUT_WIDTH) { reg.h_res = VI_SCANOUT_WIDTH - reg.h_start; reg.right_clamp = true; } if (reg.v_start < 0) { reg.y_start -= reg.y_add * reg.v_start; reg.v_start = 0; } reg.max_x = (reg.x_start + reg.h_res * reg.x_add) >> 10; reg.max_y = (reg.y_start + reg.v_res * reg.y_add) >> 10; return reg; } void VideoInterface::scanout_memory_range(unsigned &offset, unsigned &length) const { auto reg = decode_vi_registers(); bool divot = (reg.status & VI_CONTROL_DIVOT_ENABLE_BIT) != 0; // Need to sample a 2-pixel border to have room for AA filter and divot. int aa_width = reg.max_x + 2 + 4 + int(divot) * 2; // 1 pixel border on top and bottom. int aa_height = reg.max_y + 1 + 4; int x_off = divot ? -3 : -2; int y_off = -2; if (reg.vi_offset == 0 || reg.h_res <= 0 || reg.h_start >= VI_SCANOUT_WIDTH) { offset = 0; length = 0; return; } int pixel_size = ((reg.status & VI_CONTROL_TYPE_MASK) | VI_CONTROL_TYPE_RGBA5551_BIT) == VI_CONTROL_TYPE_RGBA8888_BIT ? 4 : 2; reg.vi_offset &= ~(pixel_size - 1); reg.vi_offset += (x_off + y_off * reg.vi_width) * pixel_size; offset = reg.vi_offset; length = (aa_height * reg.vi_width + aa_width) * pixel_size; } bool VideoInterface::need_fetch_bug_emulation(const Registers ®s, unsigned scaling_factor) { // If we risk sampling same Y coordinate for two scanlines we can trigger this case, // so add workaround paths for it. return regs.y_add < 1024 && scaling_factor == 1; } Vulkan::ImageHandle VideoInterface::vram_fetch_stage(const Registers ®s, unsigned scaling_factor) const { auto async_cmd = device->request_command_buffer(Vulkan::CommandBuffer::Type::AsyncCompute); Vulkan::ImageHandle vram_image; Vulkan::QueryPoolHandle start_ts, end_ts; bool divot = (regs.status & VI_CONTROL_DIVOT_ENABLE_BIT) != 0; if (scaling_factor > 1) { unsigned pixel_size_log2 = ((regs.status & VI_CONTROL_TYPE_MASK) == VI_CONTROL_TYPE_RGBA8888_BIT) ? 2 : 1; unsigned offset, length; scanout_memory_range(offset, length); renderer->submit_update_upscaled_domain_external(*async_cmd, offset, length, pixel_size_log2); async_cmd->barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } if (timestamp) start_ts = async_cmd->write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); // Need to sample a 2-pixel border to have room for AA filter and divot. int extract_width = regs.max_x + 2 + 4 + int(divot) * 2; // 1 pixel border on top and bottom. int extract_height = regs.max_y + 1 + 4; Vulkan::ImageCreateInfo rt_info = Vulkan::ImageCreateInfo::render_target( extract_width, extract_height, VK_FORMAT_R8G8B8A8_UINT); rt_info.usage = VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; rt_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; rt_info.misc = Vulkan::IMAGE_MISC_CONCURRENT_QUEUE_GRAPHICS_BIT | Vulkan::IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_COMPUTE_BIT; vram_image = device->create_image(rt_info); vram_image->set_layout(Vulkan::Layout::General); async_cmd->image_barrier(*vram_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, VK_ACCESS_SHADER_WRITE_BIT); #ifdef PARALLEL_RDP_SHADER_DIR async_cmd->set_program("rdp://extract_vram.comp"); #else async_cmd->set_program(shader_bank->extract_vram); #endif async_cmd->set_storage_texture(0, 0, vram_image->get_view()); if (scaling_factor > 1) { async_cmd->set_storage_buffer(0, 1, *renderer->get_upscaled_rdram_buffer()); async_cmd->set_storage_buffer(0, 2, *renderer->get_upscaled_hidden_rdram_buffer()); } else { async_cmd->set_storage_buffer(0, 1, *rdram, rdram_offset, rdram_size); async_cmd->set_storage_buffer(0, 2, *hidden_rdram); } struct Push { uint32_t fb_offset; uint32_t fb_width; int32_t x_offset; int32_t y_offset; int32_t x_res; int32_t y_res; } push = {}; if ((regs.status & VI_CONTROL_TYPE_MASK) == VI_CONTROL_TYPE_RGBA8888_BIT) push.fb_offset = regs.vi_offset >> 2; else push.fb_offset = regs.vi_offset >> 1; push.fb_width = regs.vi_width; push.x_offset = divot ? -3 : -2; push.y_offset = -2; push.x_res = extract_width; push.y_res = extract_height; async_cmd->set_specialization_constant_mask(7); async_cmd->set_specialization_constant(0, uint32_t(rdram_size)); async_cmd->set_specialization_constant(1, regs.status & (VI_CONTROL_TYPE_MASK | VI_CONTROL_META_AA_BIT)); async_cmd->set_specialization_constant(2, trailing_zeroes(scaling_factor)); async_cmd->push_constants(&push, 0, sizeof(push)); async_cmd->dispatch((extract_width + 15) / 16, (extract_height + 7) / 8, 1); // Just enforce an execution barrier here for rendering work in next frame. async_cmd->barrier(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, 0); if (timestamp) { end_ts = async_cmd->write_timestamp(VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT); device->register_time_interval("VI GPU", std::move(start_ts), std::move(end_ts), "extract-vram"); } Vulkan::Semaphore sem; device->submit(async_cmd, nullptr, 1, &sem); device->add_wait_semaphore(Vulkan::CommandBuffer::Type::Generic, std::move(sem), VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, true); return vram_image; } Vulkan::ImageHandle VideoInterface::aa_fetch_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &vram_image, const Registers ®s, unsigned scaling_factor) const { Vulkan::ImageHandle aa_image; Vulkan::QueryPoolHandle start_ts, end_ts; bool fetch_bug = need_fetch_bug_emulation(regs, scaling_factor); bool divot = (regs.status & VI_CONTROL_DIVOT_ENABLE_BIT) != 0; // For the AA pass, we need to figure out how many pixels we might need to read. int aa_width = regs.max_x + 3 + int(divot) * 2; int aa_height = regs.max_y + 2; Vulkan::ImageCreateInfo rt_info = Vulkan::ImageCreateInfo::render_target(aa_width, aa_height, VK_FORMAT_R8G8B8A8_UINT); rt_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; rt_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; rt_info.layers = fetch_bug ? 2 : 1; rt_info.misc = Vulkan::IMAGE_MISC_FORCE_ARRAY_BIT; aa_image = device->create_image(rt_info); Vulkan::ImageViewCreateInfo view_info = {}; view_info.image = aa_image.get(); view_info.view_type = VK_IMAGE_VIEW_TYPE_2D; view_info.layers = 1; Vulkan::ImageViewHandle aa_primary, aa_secondary; view_info.base_layer = 0; aa_primary = device->create_image_view(view_info); if (fetch_bug) { view_info.base_layer = 1; aa_secondary = device->create_image_view(view_info); } Vulkan::RenderPassInfo rp; rp.color_attachments[0] = aa_primary.get(); rp.clear_attachments = 0; if (fetch_bug) { rp.color_attachments[1] = aa_secondary.get(); rp.num_color_attachments = 2; rp.store_attachments = 3; } else { rp.num_color_attachments = 1; rp.store_attachments = 1; } cmd.image_barrier(*aa_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); if (timestamp) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); cmd.begin_render_pass(rp); cmd.set_opaque_state(); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://fullscreen.vert", "rdp://vi_fetch.frag", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "FETCH_BUG", fetch_bug ? 1 : 0 }, }); #else cmd.set_program(device->request_program(shader_bank->fullscreen, shader_bank->vi_fetch[int(fetch_bug)])); #endif struct Push { int32_t x_offset; int32_t y_offset; } push = {}; push.x_offset = 2; push.y_offset = 2; cmd.push_constants(&push, 0, sizeof(push)); cmd.set_specialization_constant_mask(3); cmd.set_specialization_constant(0, uint32_t(rdram_size)); cmd.set_specialization_constant(1, regs.status & (VI_CONTROL_META_AA_BIT | VI_CONTROL_DITHER_FILTER_ENABLE_BIT)); cmd.set_texture(0, 0, vram_image.get_view()); cmd.draw(3); cmd.end_render_pass(); if (timestamp) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); device->register_time_interval("VI GPU", std::move(start_ts), std::move(end_ts), "vi-fetch"); } cmd.image_barrier(*aa_image, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); return aa_image; } Vulkan::ImageHandle VideoInterface::divot_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &aa_image, const Registers ®s, unsigned scaling_factor) const { Vulkan::ImageHandle divot_image; Vulkan::QueryPoolHandle start_ts, end_ts; bool fetch_bug = need_fetch_bug_emulation(regs, scaling_factor); // For the divot pass, we need to figure out how many pixels we might need to read. int divot_width = regs.max_x + 2; int divot_height = regs.max_y + 2; Vulkan::ImageCreateInfo rt_info = Vulkan::ImageCreateInfo::render_target(divot_width, divot_height, VK_FORMAT_R8G8B8A8_UINT); rt_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT; rt_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; rt_info.layers = fetch_bug ? 2 : 1; rt_info.misc = Vulkan::IMAGE_MISC_FORCE_ARRAY_BIT; divot_image = device->create_image(rt_info); Vulkan::ImageViewCreateInfo view_info = {}; view_info.image = divot_image.get(); view_info.view_type = VK_IMAGE_VIEW_TYPE_2D; view_info.layers = 1; Vulkan::ImageViewHandle divot_primary, divot_secondary; view_info.base_layer = 0; divot_primary = device->create_image_view(view_info); if (fetch_bug) { view_info.base_layer = 1; divot_secondary = device->create_image_view(view_info); } Vulkan::RenderPassInfo rp; rp.color_attachments[0] = divot_primary.get(); rp.clear_attachments = 0; if (fetch_bug) { rp.color_attachments[1] = divot_secondary.get(); rp.num_color_attachments = 2; rp.store_attachments = 3; } else { rp.num_color_attachments = 1; rp.store_attachments = 1; } cmd.image_barrier(*divot_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); if (timestamp) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); cmd.begin_render_pass(rp); cmd.set_opaque_state(); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://fullscreen.vert", "rdp://vi_divot.frag", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, { "FETCH_BUG", fetch_bug ? 1 : 0 }, }); #else cmd.set_program(device->request_program(shader_bank->fullscreen, shader_bank->vi_divot[int(fetch_bug)])); #endif cmd.set_texture(0, 0, aa_image.get_view()); cmd.draw(3); cmd.end_render_pass(); if (timestamp) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); device->register_time_interval("VI GPU", std::move(start_ts), std::move(end_ts), "vi-divot"); } cmd.image_barrier(*divot_image, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); return divot_image; } Vulkan::ImageHandle VideoInterface::scale_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &divot_image, Registers regs, unsigned scaling_factor, bool degenerate, const ScanoutOptions &options) const { Vulkan::ImageHandle scale_image; Vulkan::QueryPoolHandle start_ts, end_ts; bool fetch_bug = need_fetch_bug_emulation(regs, scaling_factor); bool serrate = (regs.status & VI_CONTROL_SERRATE_BIT) != 0 && !options.upscale_deinterlacing; Vulkan::ImageCreateInfo rt_info = Vulkan::ImageCreateInfo::render_target( VI_SCANOUT_WIDTH * scaling_factor, ((regs.is_pal ? VI_V_RES_PAL: VI_V_RES_NTSC) >> int(!serrate)) * scaling_factor, VK_FORMAT_R8G8B8A8_UNORM); // Rescale crop pixels to preserve aspect ratio. auto crop_pixels_y = options.crop_overscan_pixels * scaling_factor * (serrate ? 2 : 1); auto crop_pixels_x = unsigned(std::round(float(crop_pixels_y) * (float(rt_info.width) / float(rt_info.height)))); rt_info.width -= 2 * crop_pixels_x; rt_info.height -= 2 * crop_pixels_y; rt_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; rt_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; rt_info.misc = Vulkan::IMAGE_MISC_MUTABLE_SRGB_BIT; scale_image = device->create_image(rt_info); Vulkan::RenderPassInfo rp; rp.color_attachments[0] = &scale_image->get_view(); memset(&rp.clear_color[0], 0, sizeof(rp.clear_color[0])); rp.num_color_attachments = 1; rp.clear_attachments = 1; rp.store_attachments = 1; cmd.image_barrier(*scale_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); if (prev_scanout_image && prev_image_layout != VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL) { cmd.image_barrier(*prev_scanout_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); } if (timestamp) start_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); cmd.begin_render_pass(rp); cmd.set_specialization_constant_mask((1 << 1) | (1 << 2)); cmd.set_specialization_constant(1, regs.status & (VI_CONTROL_GAMMA_ENABLE_BIT | VI_CONTROL_GAMMA_DITHER_ENABLE_BIT | VI_CONTROL_META_SCALE_BIT | VI_CONTROL_META_AA_BIT)); cmd.set_specialization_constant(2, uint32_t(fetch_bug)); struct Push { int32_t x_offset, y_offset; int32_t h_offset, v_offset; uint32_t x_add; uint32_t y_add; uint32_t frame_count; uint32_t serrate_shift; uint32_t serrate_mask; uint32_t serrate_select; } push = {}; if (serrate) { regs.v_start *= 2; regs.v_res *= 2; push.serrate_shift = 1; push.serrate_mask = 1; bool field_state = regs.v_current_line == 0; push.serrate_select = int(field_state); } push.x_offset = regs.x_start; push.y_offset = regs.y_start; push.h_offset = int(crop_pixels_x) - regs.h_start; push.v_offset = int(crop_pixels_y) - regs.v_start; push.x_add = regs.x_add; push.y_add = regs.y_add; push.frame_count = frame_count; cmd.set_opaque_state(); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://fullscreen.vert", "rdp://vi_scale.frag", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, }); #else cmd.set_program(device->request_program(shader_bank->fullscreen, shader_bank->vi_scale)); #endif cmd.set_buffer_view(1, 0, *gamma_lut_view); auto h_start_field = regs.h_start; auto h_res_field = regs.h_res; if (!regs.left_clamp) { regs.h_start += 8 * int(scaling_factor); regs.h_res -= 8 * int(scaling_factor); } if (!regs.right_clamp) regs.h_res -= 7 * int(scaling_factor); cmd.push_constants(&push, 0, sizeof(push)); const auto shift_rect = [](VkRect2D &rect, int x, int y) { rect.offset.x += x; rect.offset.y += y; if (rect.offset.x < 0) { rect.extent.width += rect.offset.x; rect.offset.x = 0; } if (rect.offset.y < 0) { rect.extent.height += rect.offset.y; rect.offset.y = 0; } }; if (!degenerate && regs.h_res > int(crop_pixels_x) && regs.v_res > int(crop_pixels_y)) { VkRect2D rect = {{ regs.h_start, regs.v_start }, { uint32_t(regs.h_res), uint32_t(regs.v_res) }}; shift_rect(rect, -int(crop_pixels_x), -int(crop_pixels_y)); // Check for signed overflow without relying on -fwrapv. if (((rect.extent.width | rect.extent.height) & 0x80000000u) == 0u && rect.extent.width > 0 && rect.extent.height > 0) { cmd.set_texture(0, 0, divot_image.get_view()); cmd.set_scissor(rect); cmd.draw(3); } } // To deal with weave interlacing and other "persistence effects", we blend in previous frame's result. // This is somewhat arbitrary, but seems to work well enough in practice. if (prev_scanout_image && options.blend_previous_frame) { cmd.set_blend_enable(true); cmd.set_blend_factors(VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA, VK_BLEND_FACTOR_DST_ALPHA); // Don't overwrite alpha, it's already zero. cmd.set_color_write_mask(0x7); cmd.set_specialization_constant_mask(0); cmd.set_texture(0, 0, prev_scanout_image->get_view()); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://fullscreen.vert", "rdp://vi_blend_fields.frag", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, }); #else cmd.set_program(device->request_program(shader_bank->fullscreen, shader_bank->vi_blend_fields)); #endif if (degenerate) { if (h_res_field > 0) { VkRect2D rect = {{ h_start_field, 0 }, { uint32_t(h_res_field), prev_scanout_image->get_height() }}; shift_rect(rect, -int(crop_pixels_x), -int(crop_pixels_y)); if (rect.extent.width > 0 && rect.extent.height > 0) { cmd.set_scissor(rect); cmd.draw(3); } } } else { // Top part. if (h_res_field > 0 && regs.v_start > 0) { VkRect2D rect = {{ h_start_field, 0 }, { uint32_t(h_res_field), uint32_t(regs.v_start) }}; shift_rect(rect, -int(crop_pixels_x), -int(crop_pixels_y)); if (rect.extent.width > 0 && rect.extent.height > 0) { cmd.set_scissor(rect); cmd.draw(3); } } // Middle part, don't overwrite the 8 pixel guard band. if (regs.h_res > 0 && regs.v_res > 0) { VkRect2D rect = {{ regs.h_start, regs.v_start }, { uint32_t(regs.h_res), uint32_t(regs.v_res) }}; shift_rect(rect, -int(crop_pixels_x), -int(crop_pixels_y)); if (rect.extent.width > 0 && rect.extent.height > 0) { cmd.set_scissor(rect); cmd.draw(3); } } // Bottom part. if (h_res_field > 0 && prev_scanout_image->get_height() > uint32_t(regs.v_start + regs.v_res)) { VkRect2D rect = {{ h_start_field, regs.v_start + regs.v_res }, { uint32_t(h_res_field), prev_scanout_image->get_height() - uint32_t(regs.v_start + regs.v_res) }}; shift_rect(rect, -int(crop_pixels_x), -int(crop_pixels_y)); if (rect.extent.width > 0 && rect.extent.height > 0) { cmd.set_scissor(rect); cmd.draw(3); } } } } cmd.end_render_pass(); if (timestamp) { end_ts = cmd.write_timestamp(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); device->register_time_interval("VI GPU", std::move(start_ts), std::move(end_ts), "vi-scale"); } return scale_image; } Vulkan::ImageHandle VideoInterface::downscale_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &scale_image, unsigned scaling_factor, unsigned downscale_steps) const { Vulkan::ImageHandle downscale_image; const Vulkan::Image *input = &scale_image; Vulkan::ImageHandle holder; // TODO: Could optimize this to happen in one pass, but ... eh. while (scaling_factor > 1 && downscale_steps) { if (input != &scale_image) { cmd.image_barrier(*input, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_READ_BIT); } unsigned width = input->get_width(); unsigned height = input->get_height(); Vulkan::ImageCreateInfo rt_info = Vulkan::ImageCreateInfo::render_target( width / 2, height / 2, VK_FORMAT_R8G8B8A8_UNORM); rt_info.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; rt_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; rt_info.misc = Vulkan::IMAGE_MISC_MUTABLE_SRGB_BIT; downscale_image = device->create_image(rt_info); cmd.image_barrier(*downscale_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT); cmd.blit_image(*downscale_image, *input, {}, {int(rt_info.width), int(rt_info.height), 1}, {}, {int(width), int(height), 1}, 0, 0); input = downscale_image.get(); holder = downscale_image; scaling_factor /= 2; downscale_steps--; } return downscale_image; } Vulkan::ImageHandle VideoInterface::upscale_deinterlace(Vulkan::CommandBuffer &cmd, Vulkan::Image &scale_image, unsigned scaling_factor, bool field_select) const { Vulkan::ImageHandle deinterlaced_image; // If we're running upscaled, upscaling Y further is somewhat meaningless and bandwidth intensive. Vulkan::ImageCreateInfo rt_info = Vulkan::ImageCreateInfo::render_target( scale_image.get_width(), scale_image.get_height() * (scaling_factor == 1 ? 2 : 1), VK_FORMAT_R8G8B8A8_UNORM); rt_info.usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT; rt_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; rt_info.misc = Vulkan::IMAGE_MISC_MUTABLE_SRGB_BIT; deinterlaced_image = device->create_image(rt_info); Vulkan::RenderPassInfo rp; rp.color_attachments[0] = &deinterlaced_image->get_view(); rp.num_color_attachments = 1; rp.store_attachments = 1; cmd.image_barrier(*deinterlaced_image, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT); cmd.begin_render_pass(rp); cmd.set_opaque_state(); struct Push { float y_offset; } push = {}; push.y_offset = (float(scaling_factor) * (field_select ? -0.25f : +0.25f)) / float(scale_image.get_height()); cmd.push_constants(&push, 0, sizeof(push)); #ifdef PARALLEL_RDP_SHADER_DIR cmd.set_program("rdp://vi_deinterlace.vert", "rdp://vi_deinterlace.frag", { { "DEBUG_ENABLE", debug_channel ? 1 : 0 }, }); #else cmd.set_program(device->request_program(shader_bank->vi_deinterlace_vert, shader_bank->vi_deinterlace_frag)); #endif cmd.set_texture(0, 0, scale_image.get_view(), Vulkan::StockSampler::LinearClamp); cmd.draw(3); cmd.end_render_pass(); return deinterlaced_image; } Vulkan::ImageHandle VideoInterface::scanout(VkImageLayout target_layout, const ScanoutOptions &options, unsigned scaling_factor) { Vulkan::ImageHandle scanout; auto regs = decode_vi_registers(); if (regs.vi_offset == 0) { prev_scanout_image.reset(); return scanout; } if (!options.vi.serrate) regs.status &= ~VI_CONTROL_SERRATE_BIT; bool status_is_aa = (regs.status & VI_CONTROL_AA_MODE_MASK) < VI_CONTROL_AA_MODE_RESAMP_ONLY_BIT; bool status_is_bilinear = (regs.status & VI_CONTROL_AA_MODE_MASK) < VI_CONTROL_AA_MODE_RESAMP_REPLICATE_BIT; status_is_aa = status_is_aa && options.vi.aa; status_is_bilinear = status_is_bilinear && options.vi.scale; regs.status &= ~(VI_CONTROL_AA_MODE_MASK | VI_CONTROL_META_AA_BIT | VI_CONTROL_META_SCALE_BIT); if (status_is_aa) regs.status |= VI_CONTROL_META_AA_BIT; if (status_is_bilinear) regs.status |= VI_CONTROL_META_SCALE_BIT; if (!options.vi.gamma_dither) regs.status &= ~VI_CONTROL_GAMMA_DITHER_ENABLE_BIT; if (!options.vi.divot_filter) regs.status &= ~VI_CONTROL_DIVOT_ENABLE_BIT; if (!options.vi.dither_filter) regs.status &= ~VI_CONTROL_DITHER_FILTER_ENABLE_BIT; bool is_blank = (regs.status & VI_CONTROL_TYPE_RGBA5551_BIT) == 0; if (is_blank && previous_frame_blank) { frame_count++; prev_scanout_image.reset(); return scanout; } if (is_blank) prev_scanout_image.reset(); regs.status |= VI_CONTROL_TYPE_RGBA5551_BIT; previous_frame_blank = is_blank; bool divot = (regs.status & VI_CONTROL_DIVOT_ENABLE_BIT) != 0; if (regs.h_res <= 0 || regs.h_start >= VI_SCANOUT_WIDTH) { frame_count++; // A dirty hack to make it work for games which strobe the invalid state (but expect the image to persist), // and games which legitimately render invalid frames for long stretches where a black screen is expected. if (options.persist_frame_on_invalid_input && (frame_count - last_valid_frame_count < 4)) { scanout = prev_scanout_image; if (scanout && prev_image_layout != target_layout) { auto cmd = device->request_command_buffer(); cmd->image_barrier(*scanout, prev_image_layout, target_layout, layout_to_stage(prev_image_layout), 0, layout_to_stage(target_layout), layout_to_access(target_layout)); prev_image_layout = target_layout; device->submit(cmd); } } else prev_scanout_image.reset(); return scanout; } last_valid_frame_count = frame_count; bool degenerate = regs.h_res <= 0 || regs.v_res <= 0; regs.h_start *= int(scaling_factor); regs.v_start *= int(scaling_factor); regs.h_res *= int(scaling_factor); regs.v_res *= int(scaling_factor); regs.x_start *= int(scaling_factor); regs.y_start *= int(scaling_factor); regs.h_end *= int(scaling_factor); regs.v_end *= int(scaling_factor); regs.max_x = regs.max_x * int(scaling_factor) + int(scaling_factor - 1); regs.max_y = regs.max_y * int(scaling_factor) + int(scaling_factor - 1); // First we copy data out of VRAM into a texture which we will then perform our post-AA on. // We do this on the async queue so we don't have to stall async queue on graphics work to deal with WAR hazards. // After the copy, we can immediately begin rendering new frames while we do post in parallel. Vulkan::ImageHandle vram_image; if (!degenerate) vram_image = vram_fetch_stage(regs, scaling_factor); auto cmd = device->request_command_buffer(); if (debug_channel) cmd->begin_debug_channel(this, "VI", 32 * 1024 * 1024); // In the first pass, we need to read from VRAM and apply the fetch filter. // This is either the AA filter if coverage < 7, or the dither reconstruction filter if coverage == 7 and enabled. // Following that, post-AA filter, we have the divot filter. // In this filter, we need to find the median value of three horizontal pixels, post AA if any of them have coverage < 7. // Finally, we lerp the result based on x_add and y_add, and then, apply gamma/dither on top as desired. // AA -> divot could probably be done with compute and shared memory, but ideally this is done in fragment shaders in this implementation // so that we can run higher-priority compute shading workload async in the async queue. // We also get to take advantage of framebuffer compression FWIW. Vulkan::ImageHandle aa_image; if (!degenerate) aa_image = aa_fetch_stage(*cmd, *vram_image, regs, scaling_factor); // Divot pass Vulkan::ImageHandle divot_image; if (divot && !degenerate) divot_image = divot_stage(*cmd, *aa_image, regs, scaling_factor); else divot_image = std::move(aa_image); // Scale pass auto scale_image = scale_stage(*cmd, *divot_image, regs, scaling_factor, degenerate, options); auto src_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; if (options.downscale_steps && scaling_factor > 1) { cmd->image_barrier(*scale_image, src_layout, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, layout_to_stage(src_layout), layout_to_access(src_layout), VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_READ_BIT); scale_image = downscale_stage(*cmd, *scale_image, scaling_factor, options.downscale_steps); src_layout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; } bool serrate = (regs.status & VI_CONTROL_SERRATE_BIT) != 0; if (serrate && options.upscale_deinterlacing) { cmd->image_barrier(*scale_image, src_layout, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, layout_to_stage(src_layout), layout_to_access(src_layout), VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_ACCESS_SHADER_READ_BIT); bool field_state = regs.v_current_line == 0; scale_image = upscale_deinterlace(*cmd, *scale_image, std::max(1u, scaling_factor >> options.downscale_steps), field_state); src_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; } cmd->image_barrier(*scale_image, src_layout, target_layout, layout_to_stage(src_layout), layout_to_access(src_layout), layout_to_stage(target_layout), layout_to_access(target_layout)); prev_image_layout = target_layout; prev_scanout_image = scale_image; device->submit(cmd); scanout = std::move(scale_image); frame_count++; return scanout; } } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/video_interface.hpp000066400000000000000000000131031415063341600257550ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include "device.hpp" #include "rdp_common.hpp" namespace RDP { struct ScanoutOptions { unsigned crop_overscan_pixels = 0; unsigned downscale_steps = 0; // Works around certain game bugs. Considered a hack if enabled. bool persist_frame_on_invalid_input = false; // To be equivalent to reference behavior where // pixels persist for an extra frame. // Not hardware accurate, but needed for weave interlace mode. bool blend_previous_frame = false; // Upscale deinterlacing deinterlaces by upscaling in Y, with an Y coordinate offset matching the field. // If disabled, weave interlacing is used. // Weave deinterlacing should *not* be used, except to run test suite! bool upscale_deinterlacing = true; struct { bool aa = true; bool scale = true; bool serrate = true; bool dither_filter = true; bool divot_filter = true; bool gamma_dither = true; } vi; }; struct VIScanoutBuffer { Vulkan::BufferHandle buffer; Vulkan::Fence fence; unsigned width = 0; unsigned height = 0; }; class Renderer; class VideoInterface : public Vulkan::DebugChannelInterface { public: void set_device(Vulkan::Device *device); void set_renderer(Renderer *renderer); void set_vi_register(VIRegister reg, uint32_t value); void set_rdram(const Vulkan::Buffer *rdram, size_t offset, size_t size); void set_hidden_rdram(const Vulkan::Buffer *hidden_rdram); int resolve_shader_define(const char *name, const char *define) const; Vulkan::ImageHandle scanout(VkImageLayout target_layout, const ScanoutOptions &options = {}, unsigned scale_factor = 1); void scanout_memory_range(unsigned &offset, unsigned &length) const; void set_shader_bank(const ShaderBank *bank); private: Vulkan::Device *device = nullptr; Renderer *renderer = nullptr; uint32_t vi_registers[unsigned(VIRegister::Count)] = {}; const Vulkan::Buffer *rdram = nullptr; const Vulkan::Buffer *hidden_rdram = nullptr; Vulkan::BufferHandle gamma_lut; Vulkan::BufferViewHandle gamma_lut_view; const ShaderBank *shader_bank = nullptr; void init_gamma_table(); bool previous_frame_blank = false; bool debug_channel = false; int filter_debug_channel_x = -1; int filter_debug_channel_y = -1; void message(const std::string &tag, uint32_t code, uint32_t x, uint32_t y, uint32_t z, uint32_t num_words, const Vulkan::DebugChannelInterface::Word *words) override; // Frame state. uint32_t frame_count = 0; uint32_t last_valid_frame_count = 0; Vulkan::ImageHandle prev_scanout_image; VkImageLayout prev_image_layout = VK_IMAGE_LAYOUT_UNDEFINED; size_t rdram_offset = 0; size_t rdram_size = 0; bool timestamp = false; struct Registers { int x_start, y_start; int h_start, v_start; int h_end, v_end; int h_res, v_res; int x_add, y_add; int v_sync; int vi_width; int vi_offset; int max_x, max_y; int v_current_line; bool left_clamp, right_clamp; bool is_pal; uint32_t status; }; Registers decode_vi_registers() const; Vulkan::ImageHandle vram_fetch_stage(const Registers ®isters, unsigned scaling_factor) const; Vulkan::ImageHandle aa_fetch_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &vram_image, const Registers ®isters, unsigned scaling_factor) const; Vulkan::ImageHandle divot_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &aa_image, const Registers ®isters, unsigned scaling_factor) const; Vulkan::ImageHandle scale_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &divot_image, Registers registers, unsigned scaling_factor, bool degenerate, const ScanoutOptions &options) const; Vulkan::ImageHandle downscale_stage(Vulkan::CommandBuffer &cmd, Vulkan::Image &scale_image, unsigned scaling_factor, unsigned downscale_factor) const; Vulkan::ImageHandle upscale_deinterlace(Vulkan::CommandBuffer &cmd, Vulkan::Image &scale_image, unsigned scaling_factor, bool field_select) const; static bool need_fetch_bug_emulation(const Registers ®, unsigned scaling_factor); }; } ares-126/ares/n64/vulkan/parallel-rdp/parallel-rdp/worker_thread.hpp000066400000000000000000000057641415063341600255050ustar00rootroot00000000000000/* Copyright (c) 2020 Themaister * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #include #ifdef PARALLEL_RDP_SHADER_DIR #include "global_managers.hpp" #endif namespace RDP { template class WorkerThread { public: explicit WorkerThread( #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::GlobalManagersHandle globals, #endif Executor exec) : executor(std::move(exec)) #ifdef PARALLEL_RDP_SHADER_DIR , handles(std::move(globals)) #endif { thr = std::thread(&WorkerThread::main_loop, this); } ~WorkerThread() { if (thr.joinable()) { { std::lock_guard holder{to_thread_mutex}; work_queue.push({}); to_thread_cond.notify_one(); } thr.join(); } } template void wait(Cond &&cond) { std::unique_lock holder{to_main_mutex}; to_main_cond.wait(holder, std::forward(cond)); } void push(T &&t) { std::lock_guard holder{to_thread_mutex}; work_queue.push(std::move(t)); to_thread_cond.notify_one(); } private: std::thread thr; std::mutex to_thread_mutex; std::condition_variable to_thread_cond; std::mutex to_main_mutex; std::condition_variable to_main_cond; std::queue work_queue; Executor executor; #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::GlobalManagersHandle handles; #endif void main_loop() { #ifdef PARALLEL_RDP_SHADER_DIR Granite::Global::set_thread_context(*handles); handles.reset(); #endif for (;;) { T value; { std::unique_lock holder{to_thread_mutex}; to_thread_cond.wait(holder, [this]() { return !work_queue.empty(); }); value = std::move(work_queue.front()); work_queue.pop(); } if (executor.is_sentinel(value)) break; executor.perform_work(value); std::lock_guard holder{to_main_mutex}; executor.notify_work_locked(value); to_main_cond.notify_one(); } } }; }ares-126/ares/n64/vulkan/parallel-rdp/util/000077500000000000000000000000001415063341600205165ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/util/aligned_alloc.cpp000066400000000000000000000046261415063341600240070ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "aligned_alloc.hpp" #include #include #ifdef _WIN32 #include #endif namespace Util { void *memalign_alloc(size_t boundary, size_t size) { #if defined(_WIN32) return _aligned_malloc(size, boundary); #elif defined(_ISOC11_SOURCE) return aligned_alloc(boundary, size); #elif (_POSIX_C_SOURCE >= 200112L) || (_XOPEN_SOURCE >= 600) void *ptr = nullptr; if (posix_memalign(&ptr, boundary, size) < 0) return nullptr; return ptr; #else // Align stuff ourselves. Kinda ugly, but will work anywhere. void **place; uintptr_t addr = 0; void *ptr = malloc(boundary + size + sizeof(uintptr_t)); if (ptr == nullptr) return nullptr; addr = ((uintptr_t)ptr + sizeof(uintptr_t) + boundary) & ~(boundary - 1); place = (void **) addr; place[-1] = ptr; return (void *) addr; #endif } void *memalign_calloc(size_t boundary, size_t size) { void *ret = memalign_alloc(boundary, size); if (ret) memset(ret, 0, size); return ret; } void memalign_free(void *ptr) { #if defined(_WIN32) _aligned_free(ptr); #elif !defined(_ISOC11_SOURCE) && !((_POSIX_C_SOURCE >= 200112L) || (_XOPEN_SOURCE >= 600)) if (ptr != nullptr) { void **p = (void **) ptr; free(p[-1]); } #else free(ptr); #endif } } ares-126/ares/n64/vulkan/parallel-rdp/util/aligned_alloc.hpp000066400000000000000000000036641415063341600240150ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include namespace Util { void *memalign_alloc(size_t boundary, size_t size); void *memalign_calloc(size_t boundary, size_t size); void memalign_free(void *ptr); template struct AlignedAllocation { static void *operator new(size_t size) { void *ret = ::Util::memalign_alloc(alignof(T), size); if (!ret) throw std::bad_alloc(); return ret; } static void *operator new[](size_t size) { void *ret = ::Util::memalign_alloc(alignof(T), size); if (!ret) throw std::bad_alloc(); return ret; } static void operator delete(void *ptr) { return ::Util::memalign_free(ptr); } static void operator delete[](void *ptr) { return ::Util::memalign_free(ptr); } }; } ares-126/ares/n64/vulkan/parallel-rdp/util/bitops.hpp000066400000000000000000000050631415063341600225330ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #ifdef _MSC_VER #include #endif namespace Util { #ifdef __GNUC__ #define leading_zeroes(x) ((x) == 0 ? 32 : __builtin_clz(x)) #define trailing_zeroes(x) ((x) == 0 ? 32 : __builtin_ctz(x)) #define trailing_ones(x) __builtin_ctz(~uint32_t(x)) #elif defined(_MSC_VER) namespace Internal { static inline uint32_t clz(uint32_t x) { unsigned long result; if (_BitScanReverse(&result, x)) return 31 - result; else return 32; } static inline uint32_t ctz(uint32_t x) { unsigned long result; if (_BitScanForward(&result, x)) return result; else return 32; } } #define leading_zeroes(x) ::Util::Internal::clz(x) #define trailing_zeroes(x) ::Util::Internal::ctz(x) #define trailing_ones(x) ::Util::Internal::ctz(~uint32_t(x)) #else #error "Implement me." #endif template inline void for_each_bit(uint32_t value, const T &func) { while (value) { uint32_t bit = trailing_zeroes(value); func(bit); value &= ~(1u << bit); } } template inline void for_each_bit_range(uint32_t value, const T &func) { if (value == ~0u) { func(0, 32); return; } uint32_t bit_offset = 0; while (value) { uint32_t bit = trailing_zeroes(value); bit_offset += bit; value >>= bit; uint32_t range = trailing_ones(value); func(bit_offset, range); value &= ~((1u << range) - 1); } } inline uint32_t next_pow2(uint32_t v) { v--; v |= v >> 16; v |= v >> 8; v |= v >> 4; v |= v >> 2; v |= v >> 1; return v + 1; } }ares-126/ares/n64/vulkan/parallel-rdp/util/enum_cast.hpp000066400000000000000000000024721415063341600232120ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include namespace Util { template constexpr typename std::underlying_type::type ecast(T x) { return static_cast::type>(x); } }ares-126/ares/n64/vulkan/parallel-rdp/util/hash.hpp000066400000000000000000000043201415063341600221510ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include namespace Util { using Hash = uint64_t; class Hasher { public: explicit Hasher(Hash h_) : h(h_) { } Hasher() = default; template inline void data(const T *data_, size_t size) { size /= sizeof(*data_); for (size_t i = 0; i < size; i++) h = (h * 0x100000001b3ull) ^ data_[i]; } inline void u32(uint32_t value) { h = (h * 0x100000001b3ull) ^ value; } inline void s32(int32_t value) { u32(uint32_t(value)); } inline void f32(float value) { union { float f32; uint32_t u32; } u; u.f32 = value; u32(u.u32); } inline void u64(uint64_t value) { u32(value & 0xffffffffu); u32(value >> 32); } template inline void pointer(T *ptr) { u64(reinterpret_cast(ptr)); } inline void string(const char *str) { char c; u32(0xff); while ((c = *str++) != '\0') u32(uint8_t(c)); } inline void string(const std::string &str) { u32(0xff); for (auto &c : str) u32(uint8_t(c)); } inline Hash get() const { return h; } private: Hash h = 0xcbf29ce484222325ull; }; } ares-126/ares/n64/vulkan/parallel-rdp/util/intrusive.hpp000066400000000000000000000140371415063341600232640ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #include namespace Util { class SingleThreadCounter { public: inline void add_ref() { count++; } inline bool release() { return --count == 0; } private: size_t count = 1; }; class MultiThreadCounter { public: MultiThreadCounter() { count.store(1, std::memory_order_relaxed); } inline void add_ref() { count.fetch_add(1, std::memory_order_relaxed); } inline bool release() { auto result = count.fetch_sub(1, std::memory_order_acq_rel); return result == 1; } private: std::atomic_size_t count; }; template class IntrusivePtr; template , typename ReferenceOps = SingleThreadCounter> class IntrusivePtrEnabled { public: using IntrusivePtrType = IntrusivePtr; using EnabledBase = T; using EnabledDeleter = Deleter; using EnabledReferenceOp = ReferenceOps; void release_reference() { if (reference_count.release()) Deleter()(static_cast(this)); } void add_reference() { reference_count.add_ref(); } IntrusivePtrEnabled() = default; IntrusivePtrEnabled(const IntrusivePtrEnabled &) = delete; void operator=(const IntrusivePtrEnabled &) = delete; protected: Util::IntrusivePtr reference_from_this(); private: ReferenceOps reference_count; }; template class IntrusivePtr { public: template friend class IntrusivePtr; IntrusivePtr() = default; explicit IntrusivePtr(T *handle) : data(handle) { } T &operator*() { return *data; } const T &operator*() const { return *data; } T *operator->() { return data; } const T *operator->() const { return data; } explicit operator bool() const { return data != nullptr; } bool operator==(const IntrusivePtr &other) const { return data == other.data; } bool operator!=(const IntrusivePtr &other) const { return data != other.data; } T *get() { return data; } const T *get() const { return data; } void reset() { using ReferenceBase = IntrusivePtrEnabled< typename T::EnabledBase, typename T::EnabledDeleter, typename T::EnabledReferenceOp>; // Static up-cast here to avoid potential issues with multiple intrusive inheritance. // Also makes sure that the pointer type actually inherits from this type. if (data) static_cast(data)->release_reference(); data = nullptr; } template IntrusivePtr &operator=(const IntrusivePtr &other) { static_assert(std::is_base_of::value, "Cannot safely assign downcasted intrusive pointers."); using ReferenceBase = IntrusivePtrEnabled< typename T::EnabledBase, typename T::EnabledDeleter, typename T::EnabledReferenceOp>; reset(); data = static_cast(other.data); // Static up-cast here to avoid potential issues with multiple intrusive inheritance. // Also makes sure that the pointer type actually inherits from this type. if (data) static_cast(data)->add_reference(); return *this; } IntrusivePtr &operator=(const IntrusivePtr &other) { using ReferenceBase = IntrusivePtrEnabled< typename T::EnabledBase, typename T::EnabledDeleter, typename T::EnabledReferenceOp>; if (this != &other) { reset(); data = other.data; if (data) static_cast(data)->add_reference(); } return *this; } template IntrusivePtr(const IntrusivePtr &other) { *this = other; } IntrusivePtr(const IntrusivePtr &other) { *this = other; } ~IntrusivePtr() { reset(); } template IntrusivePtr &operator=(IntrusivePtr &&other) noexcept { reset(); data = other.data; other.data = nullptr; return *this; } IntrusivePtr &operator=(IntrusivePtr &&other) noexcept { if (this != &other) { reset(); data = other.data; other.data = nullptr; } return *this; } template IntrusivePtr(IntrusivePtr &&other) noexcept { *this = std::move(other); } template IntrusivePtr(IntrusivePtr &&other) noexcept { *this = std::move(other); } private: T *data = nullptr; }; template IntrusivePtr IntrusivePtrEnabled::reference_from_this() { add_reference(); return IntrusivePtr(static_cast(this)); } template using DerivedIntrusivePtrType = IntrusivePtr; template DerivedIntrusivePtrType make_handle(P &&... p) { return DerivedIntrusivePtrType(new T(std::forward

(p)...)); } template typename Base::IntrusivePtrType make_derived_handle(P &&... p) { return typename Base::IntrusivePtrType(new Derived(std::forward

(p)...)); } template using ThreadSafeIntrusivePtrEnabled = IntrusivePtrEnabled, MultiThreadCounter>; } ares-126/ares/n64/vulkan/parallel-rdp/util/intrusive_hash_map.hpp000066400000000000000000000321541415063341600251240ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "hash.hpp" #include "intrusive_list.hpp" #include "object_pool.hpp" #include "read_write_lock.hpp" #include #include namespace Util { template class IntrusiveHashMapEnabled : public IntrusiveListEnabled { public: IntrusiveHashMapEnabled() = default; IntrusiveHashMapEnabled(Util::Hash hash) : intrusive_hashmap_key(hash) { } void set_hash(Util::Hash hash) { intrusive_hashmap_key = hash; } Util::Hash get_hash() const { return intrusive_hashmap_key; } private: Hash intrusive_hashmap_key = 0; }; template struct IntrusivePODWrapper : public IntrusiveHashMapEnabled> { template explicit IntrusivePODWrapper(U&& value_) : value(std::forward(value_)) { } IntrusivePODWrapper() = default; T& get() { return value; } const T& get() const { return value; } T value = {}; }; // This HashMap is non-owning. It just arranges a list of pointers. // It's kind of special purpose container used by the Vulkan backend. // Dealing with memory ownership is done through composition by a different class. // T must inherit from IntrusiveHashMapEnabled. // Each instance of T can only be part of one hashmap. template class IntrusiveHashMapHolder { public: enum { InitialSize = 16, InitialLoadCount = 3 }; T *find(Hash hash) const { if (values.empty()) return nullptr; Hash hash_mask = values.size() - 1; auto masked = hash & hash_mask; for (unsigned i = 0; i < load_count; i++) { if (values[masked] && get_hash(values[masked]) == hash) return values[masked]; masked = (masked + 1) & hash_mask; } return nullptr; } template bool find_and_consume_pod(Hash hash, P &p) const { T *t = find(hash); if (t) { p = t->get(); return true; } else return false; } // Inserts, if value already exists, insertion does not happen. // Return value is the data which is not part of the hashmap. // It should be deleted or similar. // Returns nullptr if nothing was in the hashmap for this key. T *insert_yield(T *&value) { if (values.empty()) grow(); Hash hash_mask = values.size() - 1; auto hash = get_hash(value); auto masked = hash & hash_mask; for (unsigned i = 0; i < load_count; i++) { if (values[masked] && get_hash(values[masked]) == hash) { T *ret = value; value = values[masked]; return ret; } else if (!values[masked]) { values[masked] = value; list.insert_front(value); return nullptr; } masked = (masked + 1) & hash_mask; } grow(); return insert_yield(value); } T *insert_replace(T *value) { if (values.empty()) grow(); Hash hash_mask = values.size() - 1; auto hash = get_hash(value); auto masked = hash & hash_mask; for (unsigned i = 0; i < load_count; i++) { if (values[masked] && get_hash(values[masked]) == hash) { std::swap(values[masked], value); list.erase(value); list.insert_front(values[masked]); return value; } else if (!values[masked]) { assert(!values[masked]); values[masked] = value; list.insert_front(value); return nullptr; } masked = (masked + 1) & hash_mask; } grow(); return insert_replace(value); } T *erase(Hash hash) { Hash hash_mask = values.size() - 1; auto masked = hash & hash_mask; for (unsigned i = 0; i < load_count; i++) { if (values[masked] && get_hash(values[masked]) == hash) { auto *value = values[masked]; list.erase(value); values[masked] = nullptr; return value; } masked = (masked + 1) & hash_mask; } return nullptr; } void erase(T *value) { erase(get_hash(value)); } void clear() { list.clear(); values.clear(); load_count = 0; } typename IntrusiveList::Iterator begin() { return list.begin(); } typename IntrusiveList::Iterator end() { return list.end(); } IntrusiveList &inner_list() { return list; } private: inline bool compare_key(Hash masked, Hash hash) const { return get_key_for_index(masked) == hash; } inline Hash get_hash(const T *value) const { return static_cast *>(value)->get_hash(); } inline Hash get_key_for_index(Hash masked) const { return get_hash(values[masked]); } bool insert_inner(T *value) { Hash hash_mask = values.size() - 1; auto hash = get_hash(value); auto masked = hash & hash_mask; for (unsigned i = 0; i < load_count; i++) { if (!values[masked]) { values[masked] = value; return true; } masked = (masked + 1) & hash_mask; } return false; } void grow() { bool success; do { for (auto &v : values) v = nullptr; if (values.empty()) { values.resize(InitialSize); load_count = InitialLoadCount; //LOGI("Growing hashmap to %u elements.\n", InitialSize); } else { values.resize(values.size() * 2); //LOGI("Growing hashmap to %u elements.\n", unsigned(values.size())); load_count++; } // Re-insert. success = true; for (auto &t : list) { if (!insert_inner(&t)) { success = false; break; } } } while (!success); } std::vector values; IntrusiveList list; unsigned load_count = 0; }; template class IntrusiveHashMap { public: ~IntrusiveHashMap() { clear(); } IntrusiveHashMap() = default; IntrusiveHashMap(const IntrusiveHashMap &) = delete; void operator=(const IntrusiveHashMap &) = delete; void clear() { auto &list = hashmap.inner_list(); auto itr = list.begin(); while (itr != list.end()) { auto *to_free = itr.get(); itr = list.erase(itr); pool.free(to_free); } hashmap.clear(); } T *find(Hash hash) const { return hashmap.find(hash); } T &operator[](Hash hash) { auto *t = find(hash); if (!t) t = emplace_yield(hash); return *t; } template bool find_and_consume_pod(Hash hash, P &p) const { return hashmap.find_and_consume_pod(hash, p); } void erase(T *value) { hashmap.erase(value); pool.free(value); } void erase(Hash hash) { auto *value = hashmap.erase(hash); if (value) pool.free(value); } template T *emplace_replace(Hash hash, P&&... p) { T *t = allocate(std::forward

(p)...); return insert_replace(hash, t); } template T *emplace_yield(Hash hash, P&&... p) { T *t = allocate(std::forward

(p)...); return insert_yield(hash, t); } template T *allocate(P&&... p) { return pool.allocate(std::forward

(p)...); } void free(T *value) { pool.free(value); } T *insert_replace(Hash hash, T *value) { static_cast *>(value)->set_hash(hash); T *to_delete = hashmap.insert_replace(value); if (to_delete) pool.free(to_delete); return value; } T *insert_yield(Hash hash, T *value) { static_cast *>(value)->set_hash(hash); T *to_delete = hashmap.insert_yield(value); if (to_delete) pool.free(to_delete); return value; } typename IntrusiveList::Iterator begin() { return hashmap.begin(); } typename IntrusiveList::Iterator end() { return hashmap.end(); } IntrusiveHashMap &get_thread_unsafe() { return *this; } private: IntrusiveHashMapHolder hashmap; ObjectPool pool; }; template using IntrusiveHashMapWrapper = IntrusiveHashMap>; template class ThreadSafeIntrusiveHashMap { public: T *find(Hash hash) const { lock.lock_read(); T *t = hashmap.find(hash); lock.unlock_read(); // We can race with the intrusive list internal pointers, // but that's an internal detail which should never be touched outside the hashmap. return t; } template bool find_and_consume_pod(Hash hash, P &p) const { lock.lock_read(); bool ret = hashmap.find_and_consume_pod(hash, p); lock.unlock_read(); return ret; } void clear() { lock.lock_write(); hashmap.clear(); lock.unlock_write(); } // Assumption is that readers will not be erased while in use by any other thread. void erase(T *value) { lock.lock_write(); hashmap.erase(value); lock.unlock_write(); } void erase(Hash hash) { lock.lock_write(); hashmap.erase(hash); lock.unlock_write(); } template T *allocate(P&&... p) { lock.lock_write(); T *t = hashmap.allocate(std::forward

(p)...); lock.unlock_write(); return t; } void free(T *value) { lock.lock_write(); hashmap.free(value); lock.unlock_write(); } T *insert_replace(Hash hash, T *value) { lock.lock_write(); value = hashmap.insert_replace(hash, value); lock.unlock_write(); return value; } T *insert_yield(Hash hash, T *value) { lock.lock_write(); value = hashmap.insert_yield(hash, value); lock.unlock_write(); return value; } // This one is very sketchy, since callers need to make sure there are no readers of this hash. template T *emplace_replace(Hash hash, P&&... p) { lock.lock_write(); T *t = hashmap.emplace_replace(hash, std::forward

(p)...); lock.unlock_write(); return t; } template T *emplace_yield(Hash hash, P&&... p) { lock.lock_write(); T *t = hashmap.emplace_yield(hash, std::forward

(p)...); lock.unlock_write(); return t; } // Not supposed to be called in racy conditions, // we could have a global read lock and unlock while iterating if necessary. typename IntrusiveList::Iterator begin() { return hashmap.begin(); } typename IntrusiveList::Iterator end() { return hashmap.end(); } IntrusiveHashMap &get_thread_unsafe() { return hashmap; } private: IntrusiveHashMap hashmap; mutable RWSpinLock lock; }; // A special purpose hashmap which is split into a read-only, immutable portion and a plain thread-safe one. // User can move read-write thread-safe portion to read-only portion when user knows it's safe to do so. template class ThreadSafeIntrusiveHashMapReadCached { public: ~ThreadSafeIntrusiveHashMapReadCached() { clear(); } T *find(Hash hash) const { T *t = read_only.find(hash); if (t) return t; lock.lock_read(); t = read_write.find(hash); lock.unlock_read(); return t; } void move_to_read_only() { auto &list = read_write.inner_list(); auto itr = list.begin(); while (itr != list.end()) { auto *to_move = itr.get(); read_write.erase(to_move); T *to_delete = read_only.insert_yield(to_move); if (to_delete) object_pool.free(to_delete); itr = list.begin(); } } template bool find_and_consume_pod(Hash hash, P &p) const { if (read_only.find_and_consume_pod(hash, p)) return true; lock.lock_read(); bool ret = read_write.find_and_consume_pod(hash, p); lock.unlock_read(); return ret; } void clear() { lock.lock_write(); clear_list(read_only.inner_list()); clear_list(read_write.inner_list()); read_only.clear(); read_write.clear(); lock.unlock_write(); } template T *allocate(P&&... p) { lock.lock_write(); T *t = object_pool.allocate(std::forward

(p)...); lock.unlock_write(); return t; } void free(T *ptr) { lock.lock_write(); object_pool.free(ptr); lock.unlock_write(); } T *insert_yield(Hash hash, T *value) { static_cast *>(value)->set_hash(hash); lock.lock_write(); T *to_delete = read_write.insert_yield(value); if (to_delete) object_pool.free(to_delete); lock.unlock_write(); return value; } template T *emplace_yield(Hash hash, P&&... p) { T *t = allocate(std::forward

(p)...); return insert_yield(hash, t); } IntrusiveHashMapHolder &get_read_only() { return read_only; } IntrusiveHashMapHolder &get_read_write() { return read_write; } private: IntrusiveHashMapHolder read_only; IntrusiveHashMapHolder read_write; ObjectPool object_pool; mutable RWSpinLock lock; void clear_list(IntrusiveList &list) { auto itr = list.begin(); while (itr != list.end()) { auto *to_free = itr.get(); itr = list.erase(itr); object_pool.free(to_free); } } }; } ares-126/ares/n64/vulkan/parallel-rdp/util/intrusive_list.hpp000066400000000000000000000067141415063341600243220ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once namespace Util { template struct IntrusiveListEnabled { IntrusiveListEnabled *prev = nullptr; IntrusiveListEnabled *next = nullptr; }; template class IntrusiveList { public: void clear() { head = nullptr; tail = nullptr; } class Iterator { public: friend class IntrusiveList; Iterator(IntrusiveListEnabled *node_) : node(node_) { } Iterator() = default; explicit operator bool() const { return node != nullptr; } bool operator==(const Iterator &other) const { return node == other.node; } bool operator!=(const Iterator &other) const { return node != other.node; } T &operator*() { return *static_cast(node); } const T &operator*() const { return *static_cast(node); } T *get() { return static_cast(node); } const T *get() const { return static_cast(node); } T *operator->() { return static_cast(node); } const T *operator->() const { return static_cast(node); } Iterator &operator++() { node = node->next; return *this; } Iterator &operator--() { node = node->prev; return *this; } private: IntrusiveListEnabled *node = nullptr; }; Iterator begin() { return Iterator(head); } Iterator rbegin() { return Iterator(tail); } Iterator end() { return Iterator(); } Iterator erase(Iterator itr) { auto *node = itr.get(); auto *next = node->next; auto *prev = node->prev; if (prev) prev->next = next; else head = next; if (next) next->prev = prev; else tail = prev; return next; } void insert_front(Iterator itr) { auto *node = itr.get(); if (head) head->prev = node; else tail = node; node->next = head; node->prev = nullptr; head = node; } void insert_back(Iterator itr) { auto *node = itr.get(); if (tail) tail->next = node; else head = node; node->prev = tail; node->next = nullptr; tail = node; } void move_to_front(IntrusiveList &other, Iterator itr) { other.erase(itr); insert_front(itr); } void move_to_back(IntrusiveList &other, Iterator itr) { other.erase(itr); insert_back(itr); } bool empty() const { return head == nullptr; } private: IntrusiveListEnabled *head = nullptr; IntrusiveListEnabled *tail = nullptr; }; }ares-126/ares/n64/vulkan/parallel-rdp/util/logging.cpp000066400000000000000000000027611415063341600226560ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "logging.hpp" namespace Util { static thread_local LoggingInterface *logging_iface; bool interface_log(const char *tag, const char *fmt, ...) { if (!logging_iface) return false; va_list va; va_start(va, fmt); bool ret = logging_iface->log(tag, fmt, va); va_end(va); return ret; } void set_thread_logging_interface(LoggingInterface *iface) { logging_iface = iface; } }ares-126/ares/n64/vulkan/parallel-rdp/util/logging.hpp000066400000000000000000000073421415063341600226630ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include namespace Util { class LoggingInterface { public: virtual ~LoggingInterface() = default; virtual bool log(const char *tag, const char *fmt, va_list va) = 0; }; bool interface_log(const char *tag, const char *fmt, ...); void set_thread_logging_interface(LoggingInterface *iface); } #if defined(_MSC_VER) #define WIN32_LEAN_AND_MEAN #include #define LOGE_FALLBACK(...) do { \ fprintf(stderr, "[ERROR]: " __VA_ARGS__); \ fflush(stderr); \ char buffer[16 * 1024]; \ snprintf(buffer, sizeof(buffer), "[ERROR]: " __VA_ARGS__); \ OutputDebugStringA(buffer); \ } while(false) #define LOGW_FALLBACK(...) do { \ fprintf(stderr, "[WARN]: " __VA_ARGS__); \ fflush(stderr); \ char buffer[16 * 1024]; \ snprintf(buffer, sizeof(buffer), "[WARN]: " __VA_ARGS__); \ OutputDebugStringA(buffer); \ } while(false) #define LOGI_FALLBACK(...) do { \ fprintf(stderr, "[INFO]: " __VA_ARGS__); \ fflush(stderr); \ char buffer[16 * 1024]; \ snprintf(buffer, sizeof(buffer), "[INFO]: " __VA_ARGS__); \ OutputDebugStringA(buffer); \ } while(false) #elif defined(ANDROID) #include #define LOGE_FALLBACK(...) do { __android_log_print(ANDROID_LOG_ERROR, "Granite", __VA_ARGS__); } while(0) #define LOGW_FALLBACK(...) do { __android_log_print(ANDROID_LOG_WARN, "Granite", __VA_ARGS__); } while(0) #define LOGI_FALLBACK(...) do { __android_log_print(ANDROID_LOG_INFO, "Granite", __VA_ARGS__); } while(0) #else #define LOGE_FALLBACK(...) \ do \ { \ fprintf(stderr, "[ERROR]: " __VA_ARGS__); \ fflush(stderr); \ } while (false) #define LOGW_FALLBACK(...) \ do \ { \ fprintf(stderr, "[WARN]: " __VA_ARGS__); \ fflush(stderr); \ } while (false) #define LOGI_FALLBACK(...) \ do \ { \ fprintf(stderr, "[INFO]: " __VA_ARGS__); \ fflush(stderr); \ } while (false) #endif #define LOGE(...) do { if (!::Util::interface_log("[ERROR]: ", __VA_ARGS__)) { LOGE_FALLBACK(__VA_ARGS__); }} while(0) #define LOGW(...) do { if (!::Util::interface_log("[WARN]: ", __VA_ARGS__)) { LOGW_FALLBACK(__VA_ARGS__); }} while(0) #define LOGI(...) do { if (!::Util::interface_log("[INFO]: ", __VA_ARGS__)) { LOGI_FALLBACK(__VA_ARGS__); }} while(0) ares-126/ares/n64/vulkan/parallel-rdp/util/object_pool.hpp000066400000000000000000000055571415063341600235420ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #include #include "aligned_alloc.hpp" //#define OBJECT_POOL_DEBUG namespace Util { template class ObjectPool { public: template T *allocate(P &&... p) { #ifndef OBJECT_POOL_DEBUG if (vacants.empty()) { unsigned num_objects = 64u << memory.size(); T *ptr = static_cast(memalign_alloc(std::max(size_t(64), alignof(T)), num_objects * sizeof(T))); if (!ptr) return nullptr; for (unsigned i = 0; i < num_objects; i++) vacants.push_back(&ptr[i]); memory.emplace_back(ptr); } T *ptr = vacants.back(); vacants.pop_back(); new(ptr) T(std::forward

(p)...); return ptr; #else return new T(std::forward

(p)...); #endif } void free(T *ptr) { #ifndef OBJECT_POOL_DEBUG ptr->~T(); vacants.push_back(ptr); #else delete ptr; #endif } void clear() { #ifndef OBJECT_POOL_DEBUG vacants.clear(); memory.clear(); #endif } protected: #ifndef OBJECT_POOL_DEBUG std::vector vacants; struct MallocDeleter { void operator()(T *ptr) { memalign_free(ptr); } }; std::vector> memory; #endif }; template class ThreadSafeObjectPool : private ObjectPool { public: template T *allocate(P &&... p) { std::lock_guard holder{lock}; return ObjectPool::allocate(std::forward

(p)...); } void free(T *ptr) { #ifndef OBJECT_POOL_DEBUG ptr->~T(); std::lock_guard holder{lock}; this->vacants.push_back(ptr); #else delete ptr; #endif } void clear() { std::lock_guard holder{lock}; ObjectPool::clear(); } private: std::mutex lock; }; } ares-126/ares/n64/vulkan/parallel-rdp/util/read_write_lock.hpp000066400000000000000000000045501415063341600243700ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #ifdef __SSE2__ #include #endif namespace Util { class RWSpinLock { public: enum { Reader = 2, Writer = 1 }; RWSpinLock() { counter.store(0); } inline void lock_read() { unsigned v = counter.fetch_add(Reader, std::memory_order_acquire); while ((v & Writer) != 0) { #ifdef __SSE2__ _mm_pause(); #endif v = counter.load(std::memory_order_acquire); } } inline void unlock_read() { counter.fetch_sub(Reader, std::memory_order_release); } inline void lock_write() { uint32_t expected = 0; while (!counter.compare_exchange_weak(expected, Writer, std::memory_order_acquire, std::memory_order_relaxed)) { #ifdef __SSE2__ _mm_pause(); #endif expected = 0; } } inline void unlock_write() { counter.fetch_and(~Writer, std::memory_order_release); } inline void promote_reader_to_writer() { uint32_t expected = Reader; if (!counter.compare_exchange_strong(expected, Writer, std::memory_order_acquire, std::memory_order_relaxed)) { unlock_read(); lock_write(); } } private: std::atomic counter; }; } ares-126/ares/n64/vulkan/parallel-rdp/util/small_vector.hpp000066400000000000000000000242441415063341600237270ustar00rootroot00000000000000/* Copyright (c) 2019 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #include #include namespace Util { // std::aligned_storage does not support size == 0, so roll our own. template class AlignedBuffer { public: T *data() { return reinterpret_cast(aligned_char); } private: alignas(T) char aligned_char[sizeof(T) * N]; }; template class AlignedBuffer { public: T *data() { return nullptr; } }; // An immutable version of SmallVector which erases type information about storage. template class VectorView { public: T &operator[](size_t i) { return ptr[i]; } const T &operator[](size_t i) const { return ptr[i]; } bool empty() const { return buffer_size == 0; } size_t size() const { return buffer_size; } T *data() { return ptr; } const T *data() const { return ptr; } T *begin() { return ptr; } T *end() { return ptr + buffer_size; } const T *begin() const { return ptr; } const T *end() const { return ptr + buffer_size; } T &front() { return ptr[0]; } const T &front() const { return ptr[0]; } T &back() { return ptr[buffer_size - 1]; } const T &back() const { return ptr[buffer_size - 1]; } // Avoid sliced copies. Base class should only be read as a reference. VectorView(const VectorView &) = delete; void operator=(const VectorView &) = delete; protected: VectorView() = default; T *ptr = nullptr; size_t buffer_size = 0; }; // Simple vector which supports up to N elements inline, without malloc/free. // We use a lot of throwaway vectors all over the place which triggers allocations. // This class only implements the subset of std::vector we need in SPIRV-Cross. // It is *NOT* a drop-in replacement in general projects. template class SmallVector : public VectorView { public: SmallVector() { this->ptr = stack_storage.data(); buffer_capacity = N; } SmallVector(const T *arg_list_begin, const T *arg_list_end) : SmallVector() { auto count = size_t(arg_list_end - arg_list_begin); reserve(count); for (size_t i = 0; i < count; i++, arg_list_begin++) new (&this->ptr[i]) T(*arg_list_begin); this->buffer_size = count; } SmallVector(SmallVector &&other) noexcept : SmallVector() { *this = std::move(other); } SmallVector(const std::initializer_list &init_list) : SmallVector() { insert(this->end(), init_list.begin(), init_list.end()); } SmallVector &operator=(SmallVector &&other) noexcept { clear(); if (other.ptr != other.stack_storage.data()) { // Pilfer allocated pointer. if (this->ptr != stack_storage.data()) free(this->ptr); this->ptr = other.ptr; this->buffer_size = other.buffer_size; buffer_capacity = other.buffer_capacity; other.ptr = nullptr; other.buffer_size = 0; other.buffer_capacity = 0; } else { // Need to move the stack contents individually. reserve(other.buffer_size); for (size_t i = 0; i < other.buffer_size; i++) { new (&this->ptr[i]) T(std::move(other.ptr[i])); other.ptr[i].~T(); } this->buffer_size = other.buffer_size; other.buffer_size = 0; } return *this; } SmallVector(const SmallVector &other) : SmallVector() { *this = other; } SmallVector &operator=(const SmallVector &other) { clear(); reserve(other.buffer_size); for (size_t i = 0; i < other.buffer_size; i++) new (&this->ptr[i]) T(other.ptr[i]); this->buffer_size = other.buffer_size; return *this; } explicit SmallVector(size_t count) : SmallVector() { resize(count); } ~SmallVector() { clear(); if (this->ptr != stack_storage.data()) free(this->ptr); } void clear() { for (size_t i = 0; i < this->buffer_size; i++) this->ptr[i].~T(); this->buffer_size = 0; } void push_back(const T &t) { reserve(this->buffer_size + 1); new (&this->ptr[this->buffer_size]) T(t); this->buffer_size++; } void push_back(T &&t) { reserve(this->buffer_size + 1); new (&this->ptr[this->buffer_size]) T(std::move(t)); this->buffer_size++; } void pop_back() { // Work around false positive warning on GCC 8.3. // Calling pop_back on empty vector is undefined. if (!this->empty()) resize(this->buffer_size - 1); } template void emplace_back(Ts &&... ts) { reserve(this->buffer_size + 1); new (&this->ptr[this->buffer_size]) T(std::forward(ts)...); this->buffer_size++; } void reserve(size_t count) { if (count > buffer_capacity) { size_t target_capacity = buffer_capacity; if (target_capacity == 0) target_capacity = 1; if (target_capacity < N) target_capacity = N; while (target_capacity < count) target_capacity <<= 1u; T *new_buffer = target_capacity > N ? static_cast(malloc(target_capacity * sizeof(T))) : stack_storage.data(); if (!new_buffer) std::terminate(); // In case for some reason two allocations both come from same stack. if (new_buffer != this->ptr) { // We don't deal with types which can throw in move constructor. for (size_t i = 0; i < this->buffer_size; i++) { new (&new_buffer[i]) T(std::move(this->ptr[i])); this->ptr[i].~T(); } } if (this->ptr != stack_storage.data()) free(this->ptr); this->ptr = new_buffer; buffer_capacity = target_capacity; } } void insert(T *itr, const T *insert_begin, const T *insert_end) { auto count = size_t(insert_end - insert_begin); if (itr == this->end()) { reserve(this->buffer_size + count); for (size_t i = 0; i < count; i++, insert_begin++) new (&this->ptr[this->buffer_size + i]) T(*insert_begin); this->buffer_size += count; } else { if (this->buffer_size + count > buffer_capacity) { auto target_capacity = this->buffer_size + count; if (target_capacity == 0) target_capacity = 1; if (target_capacity < N) target_capacity = N; while (target_capacity < count) target_capacity <<= 1u; // Need to allocate new buffer. Move everything to a new buffer. T *new_buffer = target_capacity > N ? static_cast(malloc(target_capacity * sizeof(T))) : stack_storage.data(); if (!new_buffer) std::terminate(); // First, move elements from source buffer to new buffer. // We don't deal with types which can throw in move constructor. auto *target_itr = new_buffer; auto *original_source_itr = this->begin(); if (new_buffer != this->ptr) { while (original_source_itr != itr) { new (target_itr) T(std::move(*original_source_itr)); original_source_itr->~T(); ++original_source_itr; ++target_itr; } } // Copy-construct new elements. for (auto *source_itr = insert_begin; source_itr != insert_end; ++source_itr, ++target_itr) new (target_itr) T(*source_itr); // Move over the other half. if (new_buffer != this->ptr || insert_begin != insert_end) { while (original_source_itr != this->end()) { new (target_itr) T(std::move(*original_source_itr)); original_source_itr->~T(); ++original_source_itr; ++target_itr; } } if (this->ptr != stack_storage.data()) free(this->ptr); this->ptr = new_buffer; buffer_capacity = target_capacity; } else { // Move in place, need to be a bit careful about which elements are constructed and which are not. // Move the end and construct the new elements. auto *target_itr = this->end() + count; auto *source_itr = this->end(); while (target_itr != this->end() && source_itr != itr) { --target_itr; --source_itr; new (target_itr) T(std::move(*source_itr)); } // For already constructed elements we can move-assign. std::move_backward(itr, source_itr, target_itr); // For the inserts which go to already constructed elements, we can do a plain copy. while (itr != this->end() && insert_begin != insert_end) *itr++ = *insert_begin++; // For inserts into newly allocated memory, we must copy-construct instead. while (insert_begin != insert_end) { new (itr) T(*insert_begin); ++itr; ++insert_begin; } } this->buffer_size += count; } } void insert(T *itr, const T &value) { insert(itr, &value, &value + 1); } T *erase(T *itr) { std::move(itr + 1, this->end(), itr); this->ptr[--this->buffer_size].~T(); return itr; } void erase(T *start_erase, T *end_erase) { if (end_erase == this->end()) { resize(size_t(start_erase - this->begin())); } else { auto new_size = this->buffer_size - (end_erase - start_erase); std::move(end_erase, this->end(), start_erase); resize(new_size); } } void resize(size_t new_size) { if (new_size < this->buffer_size) { for (size_t i = new_size; i < this->buffer_size; i++) this->ptr[i].~T(); } else if (new_size > this->buffer_size) { reserve(new_size); for (size_t i = this->buffer_size; i < new_size; i++) new (&this->ptr[i]) T(); } this->buffer_size = new_size; } private: size_t buffer_capacity = 0; AlignedBuffer stack_storage; }; } ares-126/ares/n64/vulkan/parallel-rdp/util/stack_allocator.hpp000066400000000000000000000031501415063341600243730ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include namespace Util { template class StackAllocator { public: T *allocate(size_t count) { if (count == 0) return nullptr; if (offset + count > N) return nullptr; T *ret = buffer + offset; offset += count; return ret; } T *allocate_cleared(size_t count) { T *ret = allocate(count); if (ret) std::fill(ret, ret + count, T()); return ret; } void reset() { offset = 0; } private: T buffer[N]; size_t offset = 0; }; }ares-126/ares/n64/vulkan/parallel-rdp/util/temporary_hashmap.hpp000066400000000000000000000071241415063341600247560ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "hash.hpp" #include "object_pool.hpp" #include "intrusive_list.hpp" #include "intrusive_hash_map.hpp" #include namespace Util { template class TemporaryHashmapEnabled { public: void set_hash(Hash hash_) { hash = hash_; } void set_index(unsigned index_) { index = index_; } Hash get_hash() { return hash; } unsigned get_index() const { return index; } private: Hash hash = 0; unsigned index = 0; }; template class TemporaryHashmap { public: ~TemporaryHashmap() { clear(); } void clear() { for (auto &ring : rings) { for (auto &node : ring) object_pool.free(static_cast(&node)); ring.clear(); } hashmap.clear(); for (auto &vacant : vacants) object_pool.free(static_cast(&*vacant)); vacants.clear(); object_pool.clear(); } void begin_frame() { index = (index + 1) & (RingSize - 1); for (auto &node : rings[index]) { hashmap.erase(node.get_hash()); free_object(&node, ReuseTag()); } rings[index].clear(); } T *request(Hash hash) { auto *v = hashmap.find(hash); if (v) { auto node = v->get(); if (node->get_index() != index) { rings[index].move_to_front(rings[node->get_index()], node); node->set_index(index); } return &*node; } else return nullptr; } template void make_vacant(P &&... p) { vacants.push_back(object_pool.allocate(std::forward

(p)...)); } T *request_vacant(Hash hash) { if (vacants.empty()) return nullptr; auto top = vacants.back(); vacants.pop_back(); top->set_index(index); top->set_hash(hash); hashmap.emplace_replace(hash, top); rings[index].insert_front(top); return &*top; } template T *emplace(Hash hash, P &&... p) { auto *node = object_pool.allocate(std::forward

(p)...); node->set_index(index); node->set_hash(hash); hashmap.emplace_replace(hash, node); rings[index].insert_front(node); return node; } private: IntrusiveList rings[RingSize]; ObjectPool object_pool; unsigned index = 0; IntrusiveHashMap::Iterator>> hashmap; std::vector::Iterator> vacants; template struct ReuseTag { }; void free_object(T *object, const ReuseTag &) { object_pool.free(object); } void free_object(T *object, const ReuseTag &) { vacants.push_back(object); } }; } ares-126/ares/n64/vulkan/parallel-rdp/util/thread_id.cpp000066400000000000000000000027751415063341600231600ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "thread_id.hpp" #include "logging.hpp" namespace Util { static thread_local unsigned thread_id_to_index = ~0u; unsigned get_current_thread_index() { auto ret = thread_id_to_index; if (ret == ~0u) { LOGE("Thread does not exist in thread manager or is not the main thread.\n"); return 0; } return ret; } void register_thread_index(unsigned index) { thread_id_to_index = index; } } ares-126/ares/n64/vulkan/parallel-rdp/util/thread_id.hpp000066400000000000000000000023441415063341600231550ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once namespace Util { unsigned get_current_thread_index(); void register_thread_index(unsigned thread_index); }ares-126/ares/n64/vulkan/parallel-rdp/util/thread_name.cpp000066400000000000000000000003741415063341600234750ustar00rootroot00000000000000#include "thread_name.hpp" #ifdef __linux__ #include #endif namespace Util { void set_current_thread_name(const char *name) { #ifdef __linux__ pthread_setname_np(pthread_self(), name); #else // TODO: Kinda messy. (void)name; #endif } }ares-126/ares/n64/vulkan/parallel-rdp/util/thread_name.hpp000066400000000000000000000022751415063341600235040ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once namespace Util { void set_current_thread_name(const char *name); } ares-126/ares/n64/vulkan/parallel-rdp/util/timeline_trace_file.cpp000066400000000000000000000074651415063341600252210ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "logging.hpp" #include "timeline_trace_file.hpp" #include "thread_name.hpp" #include "timer.hpp" #include #include namespace Util { static thread_local char trace_tid[32]; static thread_local TimelineTraceFile *trace_file; void TimelineTraceFile::set_tid(const char *tid) { snprintf(trace_tid, sizeof(trace_tid), "%s", tid); } void TimelineTraceFile::set_per_thread(TimelineTraceFile *file) { trace_file = file; } TimelineTraceFile *TimelineTraceFile::get_per_thread() { return trace_file; } void TimelineTraceFile::Event::set_desc(const char *desc_) { snprintf(desc, sizeof(desc), "%s", desc_); } void TimelineTraceFile::Event::set_tid(const char *tid_) { snprintf(tid, sizeof(tid), "%s", tid_); } TimelineTraceFile::Event *TimelineTraceFile::begin_event(const char *desc, uint32_t pid) { auto *e = event_pool.allocate(); e->pid = pid; e->set_tid(trace_tid); e->set_desc(desc); e->start_ns = get_current_time_nsecs(); return e; } TimelineTraceFile::Event *TimelineTraceFile::allocate_event() { auto *e = event_pool.allocate(); e->desc[0] = '\0'; e->tid[0] = '\0'; e->pid = 0; e->start_ns = 0; e->end_ns = 0; return e; } void TimelineTraceFile::submit_event(Event *e) { std::lock_guard holder{lock}; queued_events.push(e); cond.notify_one(); } void TimelineTraceFile::end_event(Event *e) { e->end_ns = get_current_time_nsecs(); submit_event(e); } TimelineTraceFile::TimelineTraceFile(const std::string &path) { thr = std::thread(&TimelineTraceFile::looper, this, path); } void TimelineTraceFile::looper(std::string path) { set_current_thread_name("json-trace-io"); FILE *file = fopen(path.c_str(), "w"); if (!file) LOGE("Failed to open file: %s.\n", path.c_str()); if (file) fputs("[\n", file); uint64_t base_ts = get_current_time_nsecs(); for (;;) { Event *e; { std::unique_lock holder{lock}; cond.wait(holder, [this]() { return !queued_events.empty(); }); e = queued_events.front(); queued_events.pop(); } if (!e) break; auto start_us = int64_t(e->start_ns - base_ts) * 1e-3; auto end_us = int64_t(e->end_ns - base_ts) * 1e-3; if (file && start_us <= end_us) { fprintf(file, "{ \"name\": \"%s\", \"ph\": \"B\", \"tid\": \"%s\", \"pid\": \"%u\", \"ts\": %f },\n", e->desc, e->tid, e->pid, start_us); fprintf(file, "{ \"name\": \"%s\", \"ph\": \"E\", \"tid\": \"%s\", \"pid\": \"%u\", \"ts\": %f },\n", e->desc, e->tid, e->pid, end_us); } event_pool.free(e); } // Intentionally truncate the JSON so that we can emit "," after the last element. if (file) fclose(file); } TimelineTraceFile::~TimelineTraceFile() { submit_event(nullptr); if (thr.joinable()) thr.join(); } } ares-126/ares/n64/vulkan/parallel-rdp/util/timeline_trace_file.hpp000066400000000000000000000040161415063341600252130ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include #include #include #include #include #include "object_pool.hpp" namespace Util { class TimelineTraceFile { public: explicit TimelineTraceFile(const std::string &path); ~TimelineTraceFile(); static void set_tid(const char *tid); static TimelineTraceFile *get_per_thread(); static void set_per_thread(TimelineTraceFile *file); struct Event { char desc[256]; char tid[32]; uint32_t pid; uint64_t start_ns, end_ns; void set_desc(const char *desc); void set_tid(const char *tid); }; Event *begin_event(const char *desc, uint32_t pid = 0); void end_event(Event *e); Event *allocate_event(); void submit_event(Event *e); private: void looper(std::string path); std::thread thr; std::mutex lock; std::condition_variable cond; ThreadSafeObjectPool event_pool; std::queue queued_events; }; } ares-126/ares/n64/vulkan/parallel-rdp/util/timer.cpp000066400000000000000000000116671415063341600223550ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "timer.hpp" #ifdef _WIN32 #include #else #include #endif #ifdef __linux__ #include #include #endif namespace Util { FrameTimer::FrameTimer() { reset(); } void FrameTimer::reset() { start = get_time(); last = start; last_period = 0; } void FrameTimer::enter_idle() { idle_start = get_time(); } void FrameTimer::leave_idle() { auto idle_end = get_time(); idle_time += idle_end - idle_start; } double FrameTimer::get_frame_time() const { return double(last_period) * 1e-9; } double FrameTimer::frame() { auto new_time = get_time() - idle_time; last_period = new_time - last; last = new_time; return double(last_period) * 1e-9; } double FrameTimer::frame(double frame_time) { last_period = int64_t(frame_time * 1e9); last += last_period; return frame_time; } double FrameTimer::get_elapsed() const { return double(last - start) * 1e-9; } int64_t FrameTimer::get_time() { return get_current_time_nsecs(); } #ifdef _WIN32 struct QPCFreq { QPCFreq() { LARGE_INTEGER freq; QueryPerformanceFrequency(&freq); inv_freq = 1e9 / double(freq.QuadPart); } double inv_freq; } static static_qpc_freq; #endif #if !defined(_WIN32) && !defined(CLOCK_MONOTONIC_RAW) #warning "CLOCK_MONOTONIC_RAW is not defined?" #define CLOCK_MONOTONIC_RAW CLOCK_MONOTONIC #endif int64_t get_current_time_nsecs() { #ifdef _WIN32 LARGE_INTEGER li; if (!QueryPerformanceCounter(&li)) return 0; return int64_t(double(li.QuadPart) * static_qpc_freq.inv_freq); #else struct timespec ts = {}; if (clock_gettime(CLOCK_MONOTONIC_RAW, &ts) < 0) return 0; return ts.tv_sec * 1000000000ll + ts.tv_nsec; #endif } void Timer::start() { t = get_current_time_nsecs(); } double Timer::end() { auto nt = get_current_time_nsecs(); return double(nt - t) * 1e-9; } struct FrameLimiter::Impl { #ifdef _WIN32 HANDLE timer_handle = nullptr; #else int timer_fd = -1; #endif bool begin_interval_ns(uint64_t ns) { #ifdef _WIN32 if (!timer_handle) { timer_handle = CreateWaitableTimerA(nullptr, FALSE, nullptr); if (timer_handle) timeBeginPeriod(1); } if (!timer_handle) return false; LARGE_INTEGER due_time; due_time.QuadPart = -int64_t(ns) / 100; if (!SetWaitableTimer(timer_handle, &due_time, ns / 1000000, nullptr, nullptr, FALSE)) { CloseHandle(timer_handle); timer_handle = nullptr; return false; } return true; #elif defined(__linux__) if (timer_fd < 0) timer_fd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); if (timer_fd >= 0) { itimerspec timerspec = {}; timerspec.it_value.tv_nsec = ns % (1000 * 1000 * 1000); timerspec.it_value.tv_sec = ns / (1000 * 1000 * 1000); timerspec.it_interval = timerspec.it_value; if (timerfd_settime(timer_fd, TFD_TIMER_CANCEL_ON_SET, &timerspec, nullptr) < 0) { close(timer_fd); timer_fd = -1; } } return timer_fd >= 0; #else return false; #endif } bool wait_interval() { #ifdef _WIN32 if (!timer_handle) return false; return WaitForSingleObject(timer_handle, INFINITE) == WAIT_OBJECT_0; #elif defined(__linux__) if (timer_fd < 0) return false; uint64_t expirations = 0; return ::read(timer_fd, &expirations, sizeof(expirations)) > 0; #else return false; #endif } bool is_active() const { #if defined(_WIN32) return timer_handle != nullptr; #else return timer_fd >= 0; #endif } ~Impl() { #ifdef _WIN32 if (timer_handle) { CloseHandle(timer_handle); timeEndPeriod(1); } #else if (timer_fd >= 0) ::close(timer_fd); #endif } }; FrameLimiter::FrameLimiter() { impl.reset(new Impl); } FrameLimiter::~FrameLimiter() { } bool FrameLimiter::is_active() const { return impl->is_active(); } bool FrameLimiter::begin_interval_ns(uint64_t ns) { return impl->begin_interval_ns(ns); } bool FrameLimiter::wait_interval() { return impl->wait_interval(); } }ares-126/ares/n64/vulkan/parallel-rdp/util/timer.hpp000066400000000000000000000035161415063341600223540ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include namespace Util { class FrameTimer { public: FrameTimer(); void reset(); double frame(); double frame(double frame_time); double get_elapsed() const; double get_frame_time() const; void enter_idle(); void leave_idle(); private: int64_t start; int64_t last; int64_t last_period; int64_t idle_start; int64_t idle_time = 0; int64_t get_time(); }; class FrameLimiter { public: FrameLimiter(); ~FrameLimiter(); bool begin_interval_ns(uint64_t ns); bool wait_interval(); bool is_active() const; private: struct Impl; std::unique_ptr impl; }; class Timer { public: void start(); double end(); private: int64_t t = 0; }; int64_t get_current_time_nsecs(); }ares-126/ares/n64/vulkan/parallel-rdp/volk/000077500000000000000000000000001415063341600205145ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/volk/volk.c000066400000000000000000004652211415063341600216450ustar00rootroot00000000000000/* This file is part of volk library; see volk.h for version/license details */ /* clang-format off */ #include "volk.h" #ifdef _WIN32 typedef const char* LPCSTR; typedef struct HINSTANCE__* HINSTANCE; typedef HINSTANCE HMODULE; #ifdef _WIN64 typedef __int64 (__stdcall* FARPROC)(void); #else typedef int (__stdcall* FARPROC)(void); #endif #else # include #endif #ifdef __cplusplus extern "C" { #endif #ifdef _WIN32 __declspec(dllimport) HMODULE __stdcall LoadLibraryA(LPCSTR); __declspec(dllimport) FARPROC __stdcall GetProcAddress(HMODULE, LPCSTR); #endif static VkInstance loadedInstance = VK_NULL_HANDLE; static VkDevice loadedDevice = VK_NULL_HANDLE; static void volkGenLoadLoader(void* context, PFN_vkVoidFunction (*load)(void*, const char*)); static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*, const char*)); static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, const char*)); static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context, PFN_vkVoidFunction (*load)(void*, const char*)); static PFN_vkVoidFunction vkGetInstanceProcAddrStub(void* context, const char* name) { return vkGetInstanceProcAddr((VkInstance)context, name); } static PFN_vkVoidFunction vkGetDeviceProcAddrStub(void* context, const char* name) { return vkGetDeviceProcAddr((VkDevice)context, name); } VkResult volkInitialize(void) { #if defined(_WIN32) HMODULE module = LoadLibraryA("vulkan-1.dll"); if (!module) return VK_ERROR_INITIALIZATION_FAILED; // note: function pointer is cast through void function pointer to silence cast-function-type warning on gcc8 vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)(void(*)(void))GetProcAddress(module, "vkGetInstanceProcAddr"); #elif defined(__APPLE__) void* module = dlopen("libvulkan.dylib", RTLD_NOW | RTLD_LOCAL); if (!module) module = dlopen("libvulkan.1.dylib", RTLD_NOW | RTLD_LOCAL); if (!module) module = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL); if (!module) return VK_ERROR_INITIALIZATION_FAILED; vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(module, "vkGetInstanceProcAddr"); #else void* module = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL); if (!module) module = dlopen("libvulkan.so", RTLD_NOW | RTLD_LOCAL); if (!module) return VK_ERROR_INITIALIZATION_FAILED; vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)dlsym(module, "vkGetInstanceProcAddr"); #endif volkGenLoadLoader(NULL, vkGetInstanceProcAddrStub); return VK_SUCCESS; } void volkInitializeCustom(PFN_vkGetInstanceProcAddr handler) { vkGetInstanceProcAddr = handler; volkGenLoadLoader(NULL, vkGetInstanceProcAddrStub); } uint32_t volkGetInstanceVersion(void) { #if defined(VK_VERSION_1_1) uint32_t apiVersion = 0; if (vkEnumerateInstanceVersion && vkEnumerateInstanceVersion(&apiVersion) == VK_SUCCESS) return apiVersion; #endif if (vkCreateInstance) return VK_API_VERSION_1_0; return 0; } void volkLoadInstance(VkInstance instance) { loadedInstance = instance; volkGenLoadInstance(instance, vkGetInstanceProcAddrStub); volkGenLoadDevice(instance, vkGetInstanceProcAddrStub); } void volkLoadInstanceOnly(VkInstance instance) { loadedInstance = instance; volkGenLoadInstance(instance, vkGetInstanceProcAddrStub); } VkInstance volkGetLoadedInstance() { return loadedInstance; } void volkLoadDevice(VkDevice device) { loadedDevice = device; volkGenLoadDevice(device, vkGetDeviceProcAddrStub); } VkDevice volkGetLoadedDevice() { return loadedDevice; } void volkLoadDeviceTable(struct VolkDeviceTable* table, VkDevice device) { volkGenLoadDeviceTable(table, device, vkGetDeviceProcAddrStub); } static void volkGenLoadLoader(void* context, PFN_vkVoidFunction (*load)(void*, const char*)) { /* VOLK_GENERATE_LOAD_LOADER */ #if defined(VK_VERSION_1_0) vkCreateInstance = (PFN_vkCreateInstance)load(context, "vkCreateInstance"); vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)load(context, "vkEnumerateInstanceExtensionProperties"); vkEnumerateInstanceLayerProperties = (PFN_vkEnumerateInstanceLayerProperties)load(context, "vkEnumerateInstanceLayerProperties"); #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) vkEnumerateInstanceVersion = (PFN_vkEnumerateInstanceVersion)load(context, "vkEnumerateInstanceVersion"); #endif /* defined(VK_VERSION_1_1) */ /* VOLK_GENERATE_LOAD_LOADER */ } static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*, const char*)) { /* VOLK_GENERATE_LOAD_INSTANCE */ #if defined(VK_VERSION_1_0) vkCreateDevice = (PFN_vkCreateDevice)load(context, "vkCreateDevice"); vkDestroyInstance = (PFN_vkDestroyInstance)load(context, "vkDestroyInstance"); vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)load(context, "vkEnumerateDeviceExtensionProperties"); vkEnumerateDeviceLayerProperties = (PFN_vkEnumerateDeviceLayerProperties)load(context, "vkEnumerateDeviceLayerProperties"); vkEnumeratePhysicalDevices = (PFN_vkEnumeratePhysicalDevices)load(context, "vkEnumeratePhysicalDevices"); vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)load(context, "vkGetDeviceProcAddr"); vkGetPhysicalDeviceFeatures = (PFN_vkGetPhysicalDeviceFeatures)load(context, "vkGetPhysicalDeviceFeatures"); vkGetPhysicalDeviceFormatProperties = (PFN_vkGetPhysicalDeviceFormatProperties)load(context, "vkGetPhysicalDeviceFormatProperties"); vkGetPhysicalDeviceImageFormatProperties = (PFN_vkGetPhysicalDeviceImageFormatProperties)load(context, "vkGetPhysicalDeviceImageFormatProperties"); vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)load(context, "vkGetPhysicalDeviceMemoryProperties"); vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)load(context, "vkGetPhysicalDeviceProperties"); vkGetPhysicalDeviceQueueFamilyProperties = (PFN_vkGetPhysicalDeviceQueueFamilyProperties)load(context, "vkGetPhysicalDeviceQueueFamilyProperties"); vkGetPhysicalDeviceSparseImageFormatProperties = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties"); #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) vkEnumeratePhysicalDeviceGroups = (PFN_vkEnumeratePhysicalDeviceGroups)load(context, "vkEnumeratePhysicalDeviceGroups"); vkGetPhysicalDeviceExternalBufferProperties = (PFN_vkGetPhysicalDeviceExternalBufferProperties)load(context, "vkGetPhysicalDeviceExternalBufferProperties"); vkGetPhysicalDeviceExternalFenceProperties = (PFN_vkGetPhysicalDeviceExternalFenceProperties)load(context, "vkGetPhysicalDeviceExternalFenceProperties"); vkGetPhysicalDeviceExternalSemaphoreProperties = (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)load(context, "vkGetPhysicalDeviceExternalSemaphoreProperties"); vkGetPhysicalDeviceFeatures2 = (PFN_vkGetPhysicalDeviceFeatures2)load(context, "vkGetPhysicalDeviceFeatures2"); vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)load(context, "vkGetPhysicalDeviceFormatProperties2"); vkGetPhysicalDeviceImageFormatProperties2 = (PFN_vkGetPhysicalDeviceImageFormatProperties2)load(context, "vkGetPhysicalDeviceImageFormatProperties2"); vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)load(context, "vkGetPhysicalDeviceMemoryProperties2"); vkGetPhysicalDeviceProperties2 = (PFN_vkGetPhysicalDeviceProperties2)load(context, "vkGetPhysicalDeviceProperties2"); vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2"); vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2"); #endif /* defined(VK_VERSION_1_1) */ #if defined(VK_EXT_acquire_xlib_display) vkAcquireXlibDisplayEXT = (PFN_vkAcquireXlibDisplayEXT)load(context, "vkAcquireXlibDisplayEXT"); vkGetRandROutputDisplayEXT = (PFN_vkGetRandROutputDisplayEXT)load(context, "vkGetRandROutputDisplayEXT"); #endif /* defined(VK_EXT_acquire_xlib_display) */ #if defined(VK_EXT_calibrated_timestamps) vkGetPhysicalDeviceCalibrateableTimeDomainsEXT = (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)load(context, "vkGetPhysicalDeviceCalibrateableTimeDomainsEXT"); #endif /* defined(VK_EXT_calibrated_timestamps) */ #if defined(VK_EXT_debug_report) vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)load(context, "vkCreateDebugReportCallbackEXT"); vkDebugReportMessageEXT = (PFN_vkDebugReportMessageEXT)load(context, "vkDebugReportMessageEXT"); vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)load(context, "vkDestroyDebugReportCallbackEXT"); #endif /* defined(VK_EXT_debug_report) */ #if defined(VK_EXT_debug_utils) vkCmdBeginDebugUtilsLabelEXT = (PFN_vkCmdBeginDebugUtilsLabelEXT)load(context, "vkCmdBeginDebugUtilsLabelEXT"); vkCmdEndDebugUtilsLabelEXT = (PFN_vkCmdEndDebugUtilsLabelEXT)load(context, "vkCmdEndDebugUtilsLabelEXT"); vkCmdInsertDebugUtilsLabelEXT = (PFN_vkCmdInsertDebugUtilsLabelEXT)load(context, "vkCmdInsertDebugUtilsLabelEXT"); vkCreateDebugUtilsMessengerEXT = (PFN_vkCreateDebugUtilsMessengerEXT)load(context, "vkCreateDebugUtilsMessengerEXT"); vkDestroyDebugUtilsMessengerEXT = (PFN_vkDestroyDebugUtilsMessengerEXT)load(context, "vkDestroyDebugUtilsMessengerEXT"); vkQueueBeginDebugUtilsLabelEXT = (PFN_vkQueueBeginDebugUtilsLabelEXT)load(context, "vkQueueBeginDebugUtilsLabelEXT"); vkQueueEndDebugUtilsLabelEXT = (PFN_vkQueueEndDebugUtilsLabelEXT)load(context, "vkQueueEndDebugUtilsLabelEXT"); vkQueueInsertDebugUtilsLabelEXT = (PFN_vkQueueInsertDebugUtilsLabelEXT)load(context, "vkQueueInsertDebugUtilsLabelEXT"); vkSetDebugUtilsObjectNameEXT = (PFN_vkSetDebugUtilsObjectNameEXT)load(context, "vkSetDebugUtilsObjectNameEXT"); vkSetDebugUtilsObjectTagEXT = (PFN_vkSetDebugUtilsObjectTagEXT)load(context, "vkSetDebugUtilsObjectTagEXT"); vkSubmitDebugUtilsMessageEXT = (PFN_vkSubmitDebugUtilsMessageEXT)load(context, "vkSubmitDebugUtilsMessageEXT"); #endif /* defined(VK_EXT_debug_utils) */ #if defined(VK_EXT_direct_mode_display) vkReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)load(context, "vkReleaseDisplayEXT"); #endif /* defined(VK_EXT_direct_mode_display) */ #if defined(VK_EXT_directfb_surface) vkCreateDirectFBSurfaceEXT = (PFN_vkCreateDirectFBSurfaceEXT)load(context, "vkCreateDirectFBSurfaceEXT"); vkGetPhysicalDeviceDirectFBPresentationSupportEXT = (PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)load(context, "vkGetPhysicalDeviceDirectFBPresentationSupportEXT"); #endif /* defined(VK_EXT_directfb_surface) */ #if defined(VK_EXT_display_surface_counter) vkGetPhysicalDeviceSurfaceCapabilities2EXT = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)load(context, "vkGetPhysicalDeviceSurfaceCapabilities2EXT"); #endif /* defined(VK_EXT_display_surface_counter) */ #if defined(VK_EXT_full_screen_exclusive) vkGetPhysicalDeviceSurfacePresentModes2EXT = (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)load(context, "vkGetPhysicalDeviceSurfacePresentModes2EXT"); #endif /* defined(VK_EXT_full_screen_exclusive) */ #if defined(VK_EXT_headless_surface) vkCreateHeadlessSurfaceEXT = (PFN_vkCreateHeadlessSurfaceEXT)load(context, "vkCreateHeadlessSurfaceEXT"); #endif /* defined(VK_EXT_headless_surface) */ #if defined(VK_EXT_metal_surface) vkCreateMetalSurfaceEXT = (PFN_vkCreateMetalSurfaceEXT)load(context, "vkCreateMetalSurfaceEXT"); #endif /* defined(VK_EXT_metal_surface) */ #if defined(VK_EXT_sample_locations) vkGetPhysicalDeviceMultisamplePropertiesEXT = (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)load(context, "vkGetPhysicalDeviceMultisamplePropertiesEXT"); #endif /* defined(VK_EXT_sample_locations) */ #if defined(VK_EXT_tooling_info) vkGetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)load(context, "vkGetPhysicalDeviceToolPropertiesEXT"); #endif /* defined(VK_EXT_tooling_info) */ #if defined(VK_FUCHSIA_imagepipe_surface) vkCreateImagePipeSurfaceFUCHSIA = (PFN_vkCreateImagePipeSurfaceFUCHSIA)load(context, "vkCreateImagePipeSurfaceFUCHSIA"); #endif /* defined(VK_FUCHSIA_imagepipe_surface) */ #if defined(VK_GGP_stream_descriptor_surface) vkCreateStreamDescriptorSurfaceGGP = (PFN_vkCreateStreamDescriptorSurfaceGGP)load(context, "vkCreateStreamDescriptorSurfaceGGP"); #endif /* defined(VK_GGP_stream_descriptor_surface) */ #if defined(VK_KHR_android_surface) vkCreateAndroidSurfaceKHR = (PFN_vkCreateAndroidSurfaceKHR)load(context, "vkCreateAndroidSurfaceKHR"); #endif /* defined(VK_KHR_android_surface) */ #if defined(VK_KHR_device_group_creation) vkEnumeratePhysicalDeviceGroupsKHR = (PFN_vkEnumeratePhysicalDeviceGroupsKHR)load(context, "vkEnumeratePhysicalDeviceGroupsKHR"); #endif /* defined(VK_KHR_device_group_creation) */ #if defined(VK_KHR_display) vkCreateDisplayModeKHR = (PFN_vkCreateDisplayModeKHR)load(context, "vkCreateDisplayModeKHR"); vkCreateDisplayPlaneSurfaceKHR = (PFN_vkCreateDisplayPlaneSurfaceKHR)load(context, "vkCreateDisplayPlaneSurfaceKHR"); vkGetDisplayModePropertiesKHR = (PFN_vkGetDisplayModePropertiesKHR)load(context, "vkGetDisplayModePropertiesKHR"); vkGetDisplayPlaneCapabilitiesKHR = (PFN_vkGetDisplayPlaneCapabilitiesKHR)load(context, "vkGetDisplayPlaneCapabilitiesKHR"); vkGetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)load(context, "vkGetDisplayPlaneSupportedDisplaysKHR"); vkGetPhysicalDeviceDisplayPlanePropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)load(context, "vkGetPhysicalDeviceDisplayPlanePropertiesKHR"); vkGetPhysicalDeviceDisplayPropertiesKHR = (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)load(context, "vkGetPhysicalDeviceDisplayPropertiesKHR"); #endif /* defined(VK_KHR_display) */ #if defined(VK_KHR_external_fence_capabilities) vkGetPhysicalDeviceExternalFencePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)load(context, "vkGetPhysicalDeviceExternalFencePropertiesKHR"); #endif /* defined(VK_KHR_external_fence_capabilities) */ #if defined(VK_KHR_external_memory_capabilities) vkGetPhysicalDeviceExternalBufferPropertiesKHR = (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)load(context, "vkGetPhysicalDeviceExternalBufferPropertiesKHR"); #endif /* defined(VK_KHR_external_memory_capabilities) */ #if defined(VK_KHR_external_semaphore_capabilities) vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)load(context, "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"); #endif /* defined(VK_KHR_external_semaphore_capabilities) */ #if defined(VK_KHR_fragment_shading_rate) vkGetPhysicalDeviceFragmentShadingRatesKHR = (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)load(context, "vkGetPhysicalDeviceFragmentShadingRatesKHR"); #endif /* defined(VK_KHR_fragment_shading_rate) */ #if defined(VK_KHR_get_display_properties2) vkGetDisplayModeProperties2KHR = (PFN_vkGetDisplayModeProperties2KHR)load(context, "vkGetDisplayModeProperties2KHR"); vkGetDisplayPlaneCapabilities2KHR = (PFN_vkGetDisplayPlaneCapabilities2KHR)load(context, "vkGetDisplayPlaneCapabilities2KHR"); vkGetPhysicalDeviceDisplayPlaneProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)load(context, "vkGetPhysicalDeviceDisplayPlaneProperties2KHR"); vkGetPhysicalDeviceDisplayProperties2KHR = (PFN_vkGetPhysicalDeviceDisplayProperties2KHR)load(context, "vkGetPhysicalDeviceDisplayProperties2KHR"); #endif /* defined(VK_KHR_get_display_properties2) */ #if defined(VK_KHR_get_physical_device_properties2) vkGetPhysicalDeviceFeatures2KHR = (PFN_vkGetPhysicalDeviceFeatures2KHR)load(context, "vkGetPhysicalDeviceFeatures2KHR"); vkGetPhysicalDeviceFormatProperties2KHR = (PFN_vkGetPhysicalDeviceFormatProperties2KHR)load(context, "vkGetPhysicalDeviceFormatProperties2KHR"); vkGetPhysicalDeviceImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)load(context, "vkGetPhysicalDeviceImageFormatProperties2KHR"); vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)load(context, "vkGetPhysicalDeviceMemoryProperties2KHR"); vkGetPhysicalDeviceProperties2KHR = (PFN_vkGetPhysicalDeviceProperties2KHR)load(context, "vkGetPhysicalDeviceProperties2KHR"); vkGetPhysicalDeviceQueueFamilyProperties2KHR = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2KHR"); vkGetPhysicalDeviceSparseImageFormatProperties2KHR = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"); #endif /* defined(VK_KHR_get_physical_device_properties2) */ #if defined(VK_KHR_get_surface_capabilities2) vkGetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)load(context, "vkGetPhysicalDeviceSurfaceCapabilities2KHR"); vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)load(context, "vkGetPhysicalDeviceSurfaceFormats2KHR"); #endif /* defined(VK_KHR_get_surface_capabilities2) */ #if defined(VK_KHR_performance_query) vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR = (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)load(context, "vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR"); vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = (PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)load(context, "vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR"); #endif /* defined(VK_KHR_performance_query) */ #if defined(VK_KHR_surface) vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)load(context, "vkDestroySurfaceKHR"); vkGetPhysicalDeviceSurfaceCapabilitiesKHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)load(context, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR"); vkGetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)load(context, "vkGetPhysicalDeviceSurfaceFormatsKHR"); vkGetPhysicalDeviceSurfacePresentModesKHR = (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)load(context, "vkGetPhysicalDeviceSurfacePresentModesKHR"); vkGetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)load(context, "vkGetPhysicalDeviceSurfaceSupportKHR"); #endif /* defined(VK_KHR_surface) */ #if defined(VK_KHR_video_queue) vkGetPhysicalDeviceVideoCapabilitiesKHR = (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)load(context, "vkGetPhysicalDeviceVideoCapabilitiesKHR"); vkGetPhysicalDeviceVideoFormatPropertiesKHR = (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)load(context, "vkGetPhysicalDeviceVideoFormatPropertiesKHR"); #endif /* defined(VK_KHR_video_queue) */ #if defined(VK_KHR_wayland_surface) vkCreateWaylandSurfaceKHR = (PFN_vkCreateWaylandSurfaceKHR)load(context, "vkCreateWaylandSurfaceKHR"); vkGetPhysicalDeviceWaylandPresentationSupportKHR = (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)load(context, "vkGetPhysicalDeviceWaylandPresentationSupportKHR"); #endif /* defined(VK_KHR_wayland_surface) */ #if defined(VK_KHR_win32_surface) vkCreateWin32SurfaceKHR = (PFN_vkCreateWin32SurfaceKHR)load(context, "vkCreateWin32SurfaceKHR"); vkGetPhysicalDeviceWin32PresentationSupportKHR = (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)load(context, "vkGetPhysicalDeviceWin32PresentationSupportKHR"); #endif /* defined(VK_KHR_win32_surface) */ #if defined(VK_KHR_xcb_surface) vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)load(context, "vkCreateXcbSurfaceKHR"); vkGetPhysicalDeviceXcbPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)load(context, "vkGetPhysicalDeviceXcbPresentationSupportKHR"); #endif /* defined(VK_KHR_xcb_surface) */ #if defined(VK_KHR_xlib_surface) vkCreateXlibSurfaceKHR = (PFN_vkCreateXlibSurfaceKHR)load(context, "vkCreateXlibSurfaceKHR"); vkGetPhysicalDeviceXlibPresentationSupportKHR = (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)load(context, "vkGetPhysicalDeviceXlibPresentationSupportKHR"); #endif /* defined(VK_KHR_xlib_surface) */ #if defined(VK_MVK_ios_surface) vkCreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK)load(context, "vkCreateIOSSurfaceMVK"); #endif /* defined(VK_MVK_ios_surface) */ #if defined(VK_MVK_macos_surface) vkCreateMacOSSurfaceMVK = (PFN_vkCreateMacOSSurfaceMVK)load(context, "vkCreateMacOSSurfaceMVK"); #endif /* defined(VK_MVK_macos_surface) */ #if defined(VK_NN_vi_surface) vkCreateViSurfaceNN = (PFN_vkCreateViSurfaceNN)load(context, "vkCreateViSurfaceNN"); #endif /* defined(VK_NN_vi_surface) */ #if defined(VK_NV_acquire_winrt_display) vkAcquireWinrtDisplayNV = (PFN_vkAcquireWinrtDisplayNV)load(context, "vkAcquireWinrtDisplayNV"); vkGetWinrtDisplayNV = (PFN_vkGetWinrtDisplayNV)load(context, "vkGetWinrtDisplayNV"); #endif /* defined(VK_NV_acquire_winrt_display) */ #if defined(VK_NV_cooperative_matrix) vkGetPhysicalDeviceCooperativeMatrixPropertiesNV = (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)load(context, "vkGetPhysicalDeviceCooperativeMatrixPropertiesNV"); #endif /* defined(VK_NV_cooperative_matrix) */ #if defined(VK_NV_coverage_reduction_mode) vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV = (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)load(context, "vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV"); #endif /* defined(VK_NV_coverage_reduction_mode) */ #if defined(VK_NV_external_memory_capabilities) vkGetPhysicalDeviceExternalImageFormatPropertiesNV = (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)load(context, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV"); #endif /* defined(VK_NV_external_memory_capabilities) */ #if defined(VK_QNX_screen_surface) vkCreateScreenSurfaceQNX = (PFN_vkCreateScreenSurfaceQNX)load(context, "vkCreateScreenSurfaceQNX"); vkGetPhysicalDeviceScreenPresentationSupportQNX = (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)load(context, "vkGetPhysicalDeviceScreenPresentationSupportQNX"); #endif /* defined(VK_QNX_screen_surface) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) vkGetPhysicalDevicePresentRectanglesKHR = (PFN_vkGetPhysicalDevicePresentRectanglesKHR)load(context, "vkGetPhysicalDevicePresentRectanglesKHR"); #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ /* VOLK_GENERATE_LOAD_INSTANCE */ } static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, const char*)) { /* VOLK_GENERATE_LOAD_DEVICE */ #if defined(VK_VERSION_1_0) vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)load(context, "vkAllocateCommandBuffers"); vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)load(context, "vkAllocateDescriptorSets"); vkAllocateMemory = (PFN_vkAllocateMemory)load(context, "vkAllocateMemory"); vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)load(context, "vkBeginCommandBuffer"); vkBindBufferMemory = (PFN_vkBindBufferMemory)load(context, "vkBindBufferMemory"); vkBindImageMemory = (PFN_vkBindImageMemory)load(context, "vkBindImageMemory"); vkCmdBeginQuery = (PFN_vkCmdBeginQuery)load(context, "vkCmdBeginQuery"); vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)load(context, "vkCmdBeginRenderPass"); vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)load(context, "vkCmdBindDescriptorSets"); vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)load(context, "vkCmdBindIndexBuffer"); vkCmdBindPipeline = (PFN_vkCmdBindPipeline)load(context, "vkCmdBindPipeline"); vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)load(context, "vkCmdBindVertexBuffers"); vkCmdBlitImage = (PFN_vkCmdBlitImage)load(context, "vkCmdBlitImage"); vkCmdClearAttachments = (PFN_vkCmdClearAttachments)load(context, "vkCmdClearAttachments"); vkCmdClearColorImage = (PFN_vkCmdClearColorImage)load(context, "vkCmdClearColorImage"); vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)load(context, "vkCmdClearDepthStencilImage"); vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)load(context, "vkCmdCopyBuffer"); vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)load(context, "vkCmdCopyBufferToImage"); vkCmdCopyImage = (PFN_vkCmdCopyImage)load(context, "vkCmdCopyImage"); vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)load(context, "vkCmdCopyImageToBuffer"); vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)load(context, "vkCmdCopyQueryPoolResults"); vkCmdDispatch = (PFN_vkCmdDispatch)load(context, "vkCmdDispatch"); vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)load(context, "vkCmdDispatchIndirect"); vkCmdDraw = (PFN_vkCmdDraw)load(context, "vkCmdDraw"); vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)load(context, "vkCmdDrawIndexed"); vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)load(context, "vkCmdDrawIndexedIndirect"); vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)load(context, "vkCmdDrawIndirect"); vkCmdEndQuery = (PFN_vkCmdEndQuery)load(context, "vkCmdEndQuery"); vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)load(context, "vkCmdEndRenderPass"); vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)load(context, "vkCmdExecuteCommands"); vkCmdFillBuffer = (PFN_vkCmdFillBuffer)load(context, "vkCmdFillBuffer"); vkCmdNextSubpass = (PFN_vkCmdNextSubpass)load(context, "vkCmdNextSubpass"); vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)load(context, "vkCmdPipelineBarrier"); vkCmdPushConstants = (PFN_vkCmdPushConstants)load(context, "vkCmdPushConstants"); vkCmdResetEvent = (PFN_vkCmdResetEvent)load(context, "vkCmdResetEvent"); vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)load(context, "vkCmdResetQueryPool"); vkCmdResolveImage = (PFN_vkCmdResolveImage)load(context, "vkCmdResolveImage"); vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)load(context, "vkCmdSetBlendConstants"); vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)load(context, "vkCmdSetDepthBias"); vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)load(context, "vkCmdSetDepthBounds"); vkCmdSetEvent = (PFN_vkCmdSetEvent)load(context, "vkCmdSetEvent"); vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)load(context, "vkCmdSetLineWidth"); vkCmdSetScissor = (PFN_vkCmdSetScissor)load(context, "vkCmdSetScissor"); vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)load(context, "vkCmdSetStencilCompareMask"); vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference)load(context, "vkCmdSetStencilReference"); vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)load(context, "vkCmdSetStencilWriteMask"); vkCmdSetViewport = (PFN_vkCmdSetViewport)load(context, "vkCmdSetViewport"); vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)load(context, "vkCmdUpdateBuffer"); vkCmdWaitEvents = (PFN_vkCmdWaitEvents)load(context, "vkCmdWaitEvents"); vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)load(context, "vkCmdWriteTimestamp"); vkCreateBuffer = (PFN_vkCreateBuffer)load(context, "vkCreateBuffer"); vkCreateBufferView = (PFN_vkCreateBufferView)load(context, "vkCreateBufferView"); vkCreateCommandPool = (PFN_vkCreateCommandPool)load(context, "vkCreateCommandPool"); vkCreateComputePipelines = (PFN_vkCreateComputePipelines)load(context, "vkCreateComputePipelines"); vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)load(context, "vkCreateDescriptorPool"); vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)load(context, "vkCreateDescriptorSetLayout"); vkCreateEvent = (PFN_vkCreateEvent)load(context, "vkCreateEvent"); vkCreateFence = (PFN_vkCreateFence)load(context, "vkCreateFence"); vkCreateFramebuffer = (PFN_vkCreateFramebuffer)load(context, "vkCreateFramebuffer"); vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)load(context, "vkCreateGraphicsPipelines"); vkCreateImage = (PFN_vkCreateImage)load(context, "vkCreateImage"); vkCreateImageView = (PFN_vkCreateImageView)load(context, "vkCreateImageView"); vkCreatePipelineCache = (PFN_vkCreatePipelineCache)load(context, "vkCreatePipelineCache"); vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)load(context, "vkCreatePipelineLayout"); vkCreateQueryPool = (PFN_vkCreateQueryPool)load(context, "vkCreateQueryPool"); vkCreateRenderPass = (PFN_vkCreateRenderPass)load(context, "vkCreateRenderPass"); vkCreateSampler = (PFN_vkCreateSampler)load(context, "vkCreateSampler"); vkCreateSemaphore = (PFN_vkCreateSemaphore)load(context, "vkCreateSemaphore"); vkCreateShaderModule = (PFN_vkCreateShaderModule)load(context, "vkCreateShaderModule"); vkDestroyBuffer = (PFN_vkDestroyBuffer)load(context, "vkDestroyBuffer"); vkDestroyBufferView = (PFN_vkDestroyBufferView)load(context, "vkDestroyBufferView"); vkDestroyCommandPool = (PFN_vkDestroyCommandPool)load(context, "vkDestroyCommandPool"); vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)load(context, "vkDestroyDescriptorPool"); vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)load(context, "vkDestroyDescriptorSetLayout"); vkDestroyDevice = (PFN_vkDestroyDevice)load(context, "vkDestroyDevice"); vkDestroyEvent = (PFN_vkDestroyEvent)load(context, "vkDestroyEvent"); vkDestroyFence = (PFN_vkDestroyFence)load(context, "vkDestroyFence"); vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)load(context, "vkDestroyFramebuffer"); vkDestroyImage = (PFN_vkDestroyImage)load(context, "vkDestroyImage"); vkDestroyImageView = (PFN_vkDestroyImageView)load(context, "vkDestroyImageView"); vkDestroyPipeline = (PFN_vkDestroyPipeline)load(context, "vkDestroyPipeline"); vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)load(context, "vkDestroyPipelineCache"); vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)load(context, "vkDestroyPipelineLayout"); vkDestroyQueryPool = (PFN_vkDestroyQueryPool)load(context, "vkDestroyQueryPool"); vkDestroyRenderPass = (PFN_vkDestroyRenderPass)load(context, "vkDestroyRenderPass"); vkDestroySampler = (PFN_vkDestroySampler)load(context, "vkDestroySampler"); vkDestroySemaphore = (PFN_vkDestroySemaphore)load(context, "vkDestroySemaphore"); vkDestroyShaderModule = (PFN_vkDestroyShaderModule)load(context, "vkDestroyShaderModule"); vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)load(context, "vkDeviceWaitIdle"); vkEndCommandBuffer = (PFN_vkEndCommandBuffer)load(context, "vkEndCommandBuffer"); vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)load(context, "vkFlushMappedMemoryRanges"); vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)load(context, "vkFreeCommandBuffers"); vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)load(context, "vkFreeDescriptorSets"); vkFreeMemory = (PFN_vkFreeMemory)load(context, "vkFreeMemory"); vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)load(context, "vkGetBufferMemoryRequirements"); vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)load(context, "vkGetDeviceMemoryCommitment"); vkGetDeviceQueue = (PFN_vkGetDeviceQueue)load(context, "vkGetDeviceQueue"); vkGetEventStatus = (PFN_vkGetEventStatus)load(context, "vkGetEventStatus"); vkGetFenceStatus = (PFN_vkGetFenceStatus)load(context, "vkGetFenceStatus"); vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)load(context, "vkGetImageMemoryRequirements"); vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)load(context, "vkGetImageSparseMemoryRequirements"); vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)load(context, "vkGetImageSubresourceLayout"); vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)load(context, "vkGetPipelineCacheData"); vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)load(context, "vkGetQueryPoolResults"); vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)load(context, "vkGetRenderAreaGranularity"); vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)load(context, "vkInvalidateMappedMemoryRanges"); vkMapMemory = (PFN_vkMapMemory)load(context, "vkMapMemory"); vkMergePipelineCaches = (PFN_vkMergePipelineCaches)load(context, "vkMergePipelineCaches"); vkQueueBindSparse = (PFN_vkQueueBindSparse)load(context, "vkQueueBindSparse"); vkQueueSubmit = (PFN_vkQueueSubmit)load(context, "vkQueueSubmit"); vkQueueWaitIdle = (PFN_vkQueueWaitIdle)load(context, "vkQueueWaitIdle"); vkResetCommandBuffer = (PFN_vkResetCommandBuffer)load(context, "vkResetCommandBuffer"); vkResetCommandPool = (PFN_vkResetCommandPool)load(context, "vkResetCommandPool"); vkResetDescriptorPool = (PFN_vkResetDescriptorPool)load(context, "vkResetDescriptorPool"); vkResetEvent = (PFN_vkResetEvent)load(context, "vkResetEvent"); vkResetFences = (PFN_vkResetFences)load(context, "vkResetFences"); vkSetEvent = (PFN_vkSetEvent)load(context, "vkSetEvent"); vkUnmapMemory = (PFN_vkUnmapMemory)load(context, "vkUnmapMemory"); vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)load(context, "vkUpdateDescriptorSets"); vkWaitForFences = (PFN_vkWaitForFences)load(context, "vkWaitForFences"); #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)load(context, "vkBindBufferMemory2"); vkBindImageMemory2 = (PFN_vkBindImageMemory2)load(context, "vkBindImageMemory2"); vkCmdDispatchBase = (PFN_vkCmdDispatchBase)load(context, "vkCmdDispatchBase"); vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)load(context, "vkCmdSetDeviceMask"); vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)load(context, "vkCreateDescriptorUpdateTemplate"); vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)load(context, "vkCreateSamplerYcbcrConversion"); vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)load(context, "vkDestroyDescriptorUpdateTemplate"); vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)load(context, "vkDestroySamplerYcbcrConversion"); vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)load(context, "vkGetBufferMemoryRequirements2"); vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)load(context, "vkGetDescriptorSetLayoutSupport"); vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)load(context, "vkGetDeviceGroupPeerMemoryFeatures"); vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)load(context, "vkGetDeviceQueue2"); vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)load(context, "vkGetImageMemoryRequirements2"); vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)load(context, "vkGetImageSparseMemoryRequirements2"); vkTrimCommandPool = (PFN_vkTrimCommandPool)load(context, "vkTrimCommandPool"); vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)load(context, "vkUpdateDescriptorSetWithTemplate"); #endif /* defined(VK_VERSION_1_1) */ #if defined(VK_VERSION_1_2) vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)load(context, "vkCmdBeginRenderPass2"); vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)load(context, "vkCmdDrawIndexedIndirectCount"); vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)load(context, "vkCmdDrawIndirectCount"); vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)load(context, "vkCmdEndRenderPass2"); vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)load(context, "vkCmdNextSubpass2"); vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)load(context, "vkCreateRenderPass2"); vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)load(context, "vkGetBufferDeviceAddress"); vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)load(context, "vkGetBufferOpaqueCaptureAddress"); vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)load(context, "vkGetDeviceMemoryOpaqueCaptureAddress"); vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)load(context, "vkGetSemaphoreCounterValue"); vkResetQueryPool = (PFN_vkResetQueryPool)load(context, "vkResetQueryPool"); vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore"); vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores"); #endif /* defined(VK_VERSION_1_2) */ #if defined(VK_AMD_buffer_marker) vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD"); #endif /* defined(VK_AMD_buffer_marker) */ #if defined(VK_AMD_display_native_hdr) vkSetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)load(context, "vkSetLocalDimmingAMD"); #endif /* defined(VK_AMD_display_native_hdr) */ #if defined(VK_AMD_draw_indirect_count) vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)load(context, "vkCmdDrawIndexedIndirectCountAMD"); vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)load(context, "vkCmdDrawIndirectCountAMD"); #endif /* defined(VK_AMD_draw_indirect_count) */ #if defined(VK_AMD_shader_info) vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)load(context, "vkGetShaderInfoAMD"); #endif /* defined(VK_AMD_shader_info) */ #if defined(VK_ANDROID_external_memory_android_hardware_buffer) vkGetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)load(context, "vkGetAndroidHardwareBufferPropertiesANDROID"); vkGetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)load(context, "vkGetMemoryAndroidHardwareBufferANDROID"); #endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ #if defined(VK_EXT_buffer_device_address) vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)load(context, "vkGetBufferDeviceAddressEXT"); #endif /* defined(VK_EXT_buffer_device_address) */ #if defined(VK_EXT_calibrated_timestamps) vkGetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)load(context, "vkGetCalibratedTimestampsEXT"); #endif /* defined(VK_EXT_calibrated_timestamps) */ #if defined(VK_EXT_color_write_enable) vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)load(context, "vkCmdSetColorWriteEnableEXT"); #endif /* defined(VK_EXT_color_write_enable) */ #if defined(VK_EXT_conditional_rendering) vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)load(context, "vkCmdBeginConditionalRenderingEXT"); vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)load(context, "vkCmdEndConditionalRenderingEXT"); #endif /* defined(VK_EXT_conditional_rendering) */ #if defined(VK_EXT_debug_marker) vkCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)load(context, "vkCmdDebugMarkerBeginEXT"); vkCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)load(context, "vkCmdDebugMarkerEndEXT"); vkCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)load(context, "vkCmdDebugMarkerInsertEXT"); vkDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)load(context, "vkDebugMarkerSetObjectNameEXT"); vkDebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)load(context, "vkDebugMarkerSetObjectTagEXT"); #endif /* defined(VK_EXT_debug_marker) */ #if defined(VK_EXT_discard_rectangles) vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)load(context, "vkCmdSetDiscardRectangleEXT"); #endif /* defined(VK_EXT_discard_rectangles) */ #if defined(VK_EXT_display_control) vkDisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)load(context, "vkDisplayPowerControlEXT"); vkGetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)load(context, "vkGetSwapchainCounterEXT"); vkRegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)load(context, "vkRegisterDeviceEventEXT"); vkRegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)load(context, "vkRegisterDisplayEventEXT"); #endif /* defined(VK_EXT_display_control) */ #if defined(VK_EXT_extended_dynamic_state) vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)load(context, "vkCmdBindVertexBuffers2EXT"); vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)load(context, "vkCmdSetCullModeEXT"); vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)load(context, "vkCmdSetDepthBoundsTestEnableEXT"); vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)load(context, "vkCmdSetDepthCompareOpEXT"); vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)load(context, "vkCmdSetDepthTestEnableEXT"); vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)load(context, "vkCmdSetDepthWriteEnableEXT"); vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)load(context, "vkCmdSetFrontFaceEXT"); vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)load(context, "vkCmdSetPrimitiveTopologyEXT"); vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)load(context, "vkCmdSetScissorWithCountEXT"); vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)load(context, "vkCmdSetStencilOpEXT"); vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)load(context, "vkCmdSetStencilTestEnableEXT"); vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)load(context, "vkCmdSetViewportWithCountEXT"); #endif /* defined(VK_EXT_extended_dynamic_state) */ #if defined(VK_EXT_external_memory_host) vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)load(context, "vkGetMemoryHostPointerPropertiesEXT"); #endif /* defined(VK_EXT_external_memory_host) */ #if defined(VK_EXT_full_screen_exclusive) vkAcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)load(context, "vkAcquireFullScreenExclusiveModeEXT"); vkReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)load(context, "vkReleaseFullScreenExclusiveModeEXT"); #endif /* defined(VK_EXT_full_screen_exclusive) */ #if defined(VK_EXT_hdr_metadata) vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)load(context, "vkSetHdrMetadataEXT"); #endif /* defined(VK_EXT_hdr_metadata) */ #if defined(VK_EXT_host_query_reset) vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)load(context, "vkResetQueryPoolEXT"); #endif /* defined(VK_EXT_host_query_reset) */ #if defined(VK_EXT_image_drm_format_modifier) vkGetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)load(context, "vkGetImageDrmFormatModifierPropertiesEXT"); #endif /* defined(VK_EXT_image_drm_format_modifier) */ #if defined(VK_EXT_line_rasterization) vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)load(context, "vkCmdSetLineStippleEXT"); #endif /* defined(VK_EXT_line_rasterization) */ #if defined(VK_EXT_private_data) vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT"); vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT"); vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)load(context, "vkGetPrivateDataEXT"); vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)load(context, "vkSetPrivateDataEXT"); #endif /* defined(VK_EXT_private_data) */ #if defined(VK_EXT_sample_locations) vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)load(context, "vkCmdSetSampleLocationsEXT"); #endif /* defined(VK_EXT_sample_locations) */ #if defined(VK_EXT_transform_feedback) vkCmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)load(context, "vkCmdBeginQueryIndexedEXT"); vkCmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)load(context, "vkCmdBeginTransformFeedbackEXT"); vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)load(context, "vkCmdBindTransformFeedbackBuffersEXT"); vkCmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)load(context, "vkCmdDrawIndirectByteCountEXT"); vkCmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)load(context, "vkCmdEndQueryIndexedEXT"); vkCmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)load(context, "vkCmdEndTransformFeedbackEXT"); #endif /* defined(VK_EXT_transform_feedback) */ #if defined(VK_EXT_validation_cache) vkCreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)load(context, "vkCreateValidationCacheEXT"); vkDestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)load(context, "vkDestroyValidationCacheEXT"); vkGetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)load(context, "vkGetValidationCacheDataEXT"); vkMergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)load(context, "vkMergeValidationCachesEXT"); #endif /* defined(VK_EXT_validation_cache) */ #if defined(VK_EXT_vertex_input_dynamic_state) vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT"); #endif /* defined(VK_EXT_vertex_input_dynamic_state) */ #if defined(VK_FUCHSIA_external_memory) vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA"); vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); #endif /* defined(VK_FUCHSIA_external_memory) */ #if defined(VK_FUCHSIA_external_semaphore) vkGetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)load(context, "vkGetSemaphoreZirconHandleFUCHSIA"); vkImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)load(context, "vkImportSemaphoreZirconHandleFUCHSIA"); #endif /* defined(VK_FUCHSIA_external_semaphore) */ #if defined(VK_GOOGLE_display_timing) vkGetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)load(context, "vkGetPastPresentationTimingGOOGLE"); vkGetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)load(context, "vkGetRefreshCycleDurationGOOGLE"); #endif /* defined(VK_GOOGLE_display_timing) */ #if defined(VK_INTEL_performance_query) vkAcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)load(context, "vkAcquirePerformanceConfigurationINTEL"); vkCmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)load(context, "vkCmdSetPerformanceMarkerINTEL"); vkCmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)load(context, "vkCmdSetPerformanceOverrideINTEL"); vkCmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)load(context, "vkCmdSetPerformanceStreamMarkerINTEL"); vkGetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)load(context, "vkGetPerformanceParameterINTEL"); vkInitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)load(context, "vkInitializePerformanceApiINTEL"); vkQueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)load(context, "vkQueueSetPerformanceConfigurationINTEL"); vkReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)load(context, "vkReleasePerformanceConfigurationINTEL"); vkUninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)load(context, "vkUninitializePerformanceApiINTEL"); #endif /* defined(VK_INTEL_performance_query) */ #if defined(VK_KHR_acceleration_structure) vkBuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)load(context, "vkBuildAccelerationStructuresKHR"); vkCmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)load(context, "vkCmdBuildAccelerationStructuresIndirectKHR"); vkCmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR)load(context, "vkCmdBuildAccelerationStructuresKHR"); vkCmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR)load(context, "vkCmdCopyAccelerationStructureKHR"); vkCmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)load(context, "vkCmdCopyAccelerationStructureToMemoryKHR"); vkCmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)load(context, "vkCmdCopyMemoryToAccelerationStructureKHR"); vkCmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)load(context, "vkCmdWriteAccelerationStructuresPropertiesKHR"); vkCopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)load(context, "vkCopyAccelerationStructureKHR"); vkCopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)load(context, "vkCopyAccelerationStructureToMemoryKHR"); vkCopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)load(context, "vkCopyMemoryToAccelerationStructureKHR"); vkCreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)load(context, "vkCreateAccelerationStructureKHR"); vkDestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)load(context, "vkDestroyAccelerationStructureKHR"); vkGetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)load(context, "vkGetAccelerationStructureBuildSizesKHR"); vkGetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)load(context, "vkGetAccelerationStructureDeviceAddressKHR"); vkGetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)load(context, "vkGetDeviceAccelerationStructureCompatibilityKHR"); vkWriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)load(context, "vkWriteAccelerationStructuresPropertiesKHR"); #endif /* defined(VK_KHR_acceleration_structure) */ #if defined(VK_KHR_bind_memory2) vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)load(context, "vkBindBufferMemory2KHR"); vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)load(context, "vkBindImageMemory2KHR"); #endif /* defined(VK_KHR_bind_memory2) */ #if defined(VK_KHR_buffer_device_address) vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)load(context, "vkGetBufferDeviceAddressKHR"); vkGetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)load(context, "vkGetBufferOpaqueCaptureAddressKHR"); vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)load(context, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); #endif /* defined(VK_KHR_buffer_device_address) */ #if defined(VK_KHR_copy_commands2) vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)load(context, "vkCmdBlitImage2KHR"); vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)load(context, "vkCmdCopyBuffer2KHR"); vkCmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)load(context, "vkCmdCopyBufferToImage2KHR"); vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)load(context, "vkCmdCopyImage2KHR"); vkCmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)load(context, "vkCmdCopyImageToBuffer2KHR"); vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)load(context, "vkCmdResolveImage2KHR"); #endif /* defined(VK_KHR_copy_commands2) */ #if defined(VK_KHR_create_renderpass2) vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)load(context, "vkCmdBeginRenderPass2KHR"); vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)load(context, "vkCmdEndRenderPass2KHR"); vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)load(context, "vkCmdNextSubpass2KHR"); vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)load(context, "vkCreateRenderPass2KHR"); #endif /* defined(VK_KHR_create_renderpass2) */ #if defined(VK_KHR_deferred_host_operations) vkCreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)load(context, "vkCreateDeferredOperationKHR"); vkDeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)load(context, "vkDeferredOperationJoinKHR"); vkDestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)load(context, "vkDestroyDeferredOperationKHR"); vkGetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)load(context, "vkGetDeferredOperationMaxConcurrencyKHR"); vkGetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)load(context, "vkGetDeferredOperationResultKHR"); #endif /* defined(VK_KHR_deferred_host_operations) */ #if defined(VK_KHR_descriptor_update_template) vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)load(context, "vkCreateDescriptorUpdateTemplateKHR"); vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)load(context, "vkDestroyDescriptorUpdateTemplateKHR"); vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)load(context, "vkUpdateDescriptorSetWithTemplateKHR"); #endif /* defined(VK_KHR_descriptor_update_template) */ #if defined(VK_KHR_device_group) vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)load(context, "vkCmdDispatchBaseKHR"); vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)load(context, "vkCmdSetDeviceMaskKHR"); vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)load(context, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); #endif /* defined(VK_KHR_device_group) */ #if defined(VK_KHR_display_swapchain) vkCreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)load(context, "vkCreateSharedSwapchainsKHR"); #endif /* defined(VK_KHR_display_swapchain) */ #if defined(VK_KHR_draw_indirect_count) vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR"); vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR"); #endif /* defined(VK_KHR_draw_indirect_count) */ #if defined(VK_KHR_external_fence_fd) vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR"); vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR"); #endif /* defined(VK_KHR_external_fence_fd) */ #if defined(VK_KHR_external_fence_win32) vkGetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)load(context, "vkGetFenceWin32HandleKHR"); vkImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)load(context, "vkImportFenceWin32HandleKHR"); #endif /* defined(VK_KHR_external_fence_win32) */ #if defined(VK_KHR_external_memory_fd) vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)load(context, "vkGetMemoryFdKHR"); vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)load(context, "vkGetMemoryFdPropertiesKHR"); #endif /* defined(VK_KHR_external_memory_fd) */ #if defined(VK_KHR_external_memory_win32) vkGetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)load(context, "vkGetMemoryWin32HandleKHR"); vkGetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)load(context, "vkGetMemoryWin32HandlePropertiesKHR"); #endif /* defined(VK_KHR_external_memory_win32) */ #if defined(VK_KHR_external_semaphore_fd) vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)load(context, "vkGetSemaphoreFdKHR"); vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)load(context, "vkImportSemaphoreFdKHR"); #endif /* defined(VK_KHR_external_semaphore_fd) */ #if defined(VK_KHR_external_semaphore_win32) vkGetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)load(context, "vkGetSemaphoreWin32HandleKHR"); vkImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)load(context, "vkImportSemaphoreWin32HandleKHR"); #endif /* defined(VK_KHR_external_semaphore_win32) */ #if defined(VK_KHR_fragment_shading_rate) vkCmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)load(context, "vkCmdSetFragmentShadingRateKHR"); #endif /* defined(VK_KHR_fragment_shading_rate) */ #if defined(VK_KHR_get_memory_requirements2) vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)load(context, "vkGetBufferMemoryRequirements2KHR"); vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)load(context, "vkGetImageMemoryRequirements2KHR"); vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)load(context, "vkGetImageSparseMemoryRequirements2KHR"); #endif /* defined(VK_KHR_get_memory_requirements2) */ #if defined(VK_KHR_maintenance1) vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)load(context, "vkTrimCommandPoolKHR"); #endif /* defined(VK_KHR_maintenance1) */ #if defined(VK_KHR_maintenance3) vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR"); #endif /* defined(VK_KHR_maintenance3) */ #if defined(VK_KHR_performance_query) vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR"); vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR"); #endif /* defined(VK_KHR_performance_query) */ #if defined(VK_KHR_pipeline_executable_properties) vkGetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)load(context, "vkGetPipelineExecutableInternalRepresentationsKHR"); vkGetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)load(context, "vkGetPipelineExecutablePropertiesKHR"); vkGetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)load(context, "vkGetPipelineExecutableStatisticsKHR"); #endif /* defined(VK_KHR_pipeline_executable_properties) */ #if defined(VK_KHR_push_descriptor) vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)load(context, "vkCmdPushDescriptorSetKHR"); #endif /* defined(VK_KHR_push_descriptor) */ #if defined(VK_KHR_ray_tracing_pipeline) vkCmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)load(context, "vkCmdSetRayTracingPipelineStackSizeKHR"); vkCmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR)load(context, "vkCmdTraceRaysIndirectKHR"); vkCmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)load(context, "vkCmdTraceRaysKHR"); vkCreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)load(context, "vkCreateRayTracingPipelinesKHR"); vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)load(context, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)load(context, "vkGetRayTracingShaderGroupHandlesKHR"); vkGetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)load(context, "vkGetRayTracingShaderGroupStackSizeKHR"); #endif /* defined(VK_KHR_ray_tracing_pipeline) */ #if defined(VK_KHR_sampler_ycbcr_conversion) vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)load(context, "vkCreateSamplerYcbcrConversionKHR"); vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)load(context, "vkDestroySamplerYcbcrConversionKHR"); #endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ #if defined(VK_KHR_shared_presentable_image) vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)load(context, "vkGetSwapchainStatusKHR"); #endif /* defined(VK_KHR_shared_presentable_image) */ #if defined(VK_KHR_swapchain) vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)load(context, "vkAcquireNextImageKHR"); vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)load(context, "vkCreateSwapchainKHR"); vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)load(context, "vkDestroySwapchainKHR"); vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)load(context, "vkGetSwapchainImagesKHR"); vkQueuePresentKHR = (PFN_vkQueuePresentKHR)load(context, "vkQueuePresentKHR"); #endif /* defined(VK_KHR_swapchain) */ #if defined(VK_KHR_synchronization2) vkCmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)load(context, "vkCmdPipelineBarrier2KHR"); vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)load(context, "vkCmdResetEvent2KHR"); vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)load(context, "vkCmdSetEvent2KHR"); vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)load(context, "vkCmdWaitEvents2KHR"); vkCmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)load(context, "vkCmdWriteTimestamp2KHR"); vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)load(context, "vkQueueSubmit2KHR"); #endif /* defined(VK_KHR_synchronization2) */ #if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) vkCmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD)load(context, "vkCmdWriteBufferMarker2AMD"); #endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ #if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) vkGetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV)load(context, "vkGetQueueCheckpointData2NV"); #endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_KHR_timeline_semaphore) vkGetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)load(context, "vkGetSemaphoreCounterValueKHR"); vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)load(context, "vkSignalSemaphoreKHR"); vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)load(context, "vkWaitSemaphoresKHR"); #endif /* defined(VK_KHR_timeline_semaphore) */ #if defined(VK_KHR_video_decode_queue) vkCmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)load(context, "vkCmdDecodeVideoKHR"); #endif /* defined(VK_KHR_video_decode_queue) */ #if defined(VK_KHR_video_encode_queue) vkCmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)load(context, "vkCmdEncodeVideoKHR"); #endif /* defined(VK_KHR_video_encode_queue) */ #if defined(VK_KHR_video_queue) vkBindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)load(context, "vkBindVideoSessionMemoryKHR"); vkCmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR)load(context, "vkCmdBeginVideoCodingKHR"); vkCmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR)load(context, "vkCmdControlVideoCodingKHR"); vkCmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR)load(context, "vkCmdEndVideoCodingKHR"); vkCreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)load(context, "vkCreateVideoSessionKHR"); vkCreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)load(context, "vkCreateVideoSessionParametersKHR"); vkDestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)load(context, "vkDestroyVideoSessionKHR"); vkDestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)load(context, "vkDestroyVideoSessionParametersKHR"); vkGetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)load(context, "vkGetVideoSessionMemoryRequirementsKHR"); vkUpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)load(context, "vkUpdateVideoSessionParametersKHR"); #endif /* defined(VK_KHR_video_queue) */ #if defined(VK_NVX_image_view_handle) vkGetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)load(context, "vkGetImageViewAddressNVX"); vkGetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)load(context, "vkGetImageViewHandleNVX"); #endif /* defined(VK_NVX_image_view_handle) */ #if defined(VK_NV_clip_space_w_scaling) vkCmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)load(context, "vkCmdSetViewportWScalingNV"); #endif /* defined(VK_NV_clip_space_w_scaling) */ #if defined(VK_NV_device_diagnostic_checkpoints) vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)load(context, "vkCmdSetCheckpointNV"); vkGetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)load(context, "vkGetQueueCheckpointDataNV"); #endif /* defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_NV_device_generated_commands) vkCmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV)load(context, "vkCmdBindPipelineShaderGroupNV"); vkCmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV)load(context, "vkCmdExecuteGeneratedCommandsNV"); vkCmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV)load(context, "vkCmdPreprocessGeneratedCommandsNV"); vkCreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)load(context, "vkCreateIndirectCommandsLayoutNV"); vkDestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)load(context, "vkDestroyIndirectCommandsLayoutNV"); vkGetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)load(context, "vkGetGeneratedCommandsMemoryRequirementsNV"); #endif /* defined(VK_NV_device_generated_commands) */ #if defined(VK_NV_external_memory_win32) vkGetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)load(context, "vkGetMemoryWin32HandleNV"); #endif /* defined(VK_NV_external_memory_win32) */ #if defined(VK_NV_fragment_shading_rate_enums) vkCmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV)load(context, "vkCmdSetFragmentShadingRateEnumNV"); #endif /* defined(VK_NV_fragment_shading_rate_enums) */ #if defined(VK_NV_mesh_shader) vkCmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)load(context, "vkCmdDrawMeshTasksIndirectCountNV"); vkCmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)load(context, "vkCmdDrawMeshTasksIndirectNV"); vkCmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)load(context, "vkCmdDrawMeshTasksNV"); #endif /* defined(VK_NV_mesh_shader) */ #if defined(VK_NV_ray_tracing) vkBindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)load(context, "vkBindAccelerationStructureMemoryNV"); vkCmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)load(context, "vkCmdBuildAccelerationStructureNV"); vkCmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)load(context, "vkCmdCopyAccelerationStructureNV"); vkCmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)load(context, "vkCmdTraceRaysNV"); vkCmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)load(context, "vkCmdWriteAccelerationStructuresPropertiesNV"); vkCompileDeferredNV = (PFN_vkCompileDeferredNV)load(context, "vkCompileDeferredNV"); vkCreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)load(context, "vkCreateAccelerationStructureNV"); vkCreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)load(context, "vkCreateRayTracingPipelinesNV"); vkDestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)load(context, "vkDestroyAccelerationStructureNV"); vkGetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)load(context, "vkGetAccelerationStructureHandleNV"); vkGetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)load(context, "vkGetAccelerationStructureMemoryRequirementsNV"); vkGetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)load(context, "vkGetRayTracingShaderGroupHandlesNV"); #endif /* defined(VK_NV_ray_tracing) */ #if defined(VK_NV_scissor_exclusive) vkCmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)load(context, "vkCmdSetExclusiveScissorNV"); #endif /* defined(VK_NV_scissor_exclusive) */ #if defined(VK_NV_shading_rate_image) vkCmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)load(context, "vkCmdBindShadingRateImageNV"); vkCmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)load(context, "vkCmdSetCoarseSampleOrderNV"); vkCmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)load(context, "vkCmdSetViewportShadingRatePaletteNV"); #endif /* defined(VK_NV_shading_rate_image) */ #if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) vkGetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)load(context, "vkGetDeviceGroupSurfacePresentModes2EXT"); #endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)load(context, "vkCmdPushDescriptorSetWithTemplateKHR"); #endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)load(context, "vkGetDeviceGroupPresentCapabilitiesKHR"); vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)load(context, "vkGetDeviceGroupSurfacePresentModesKHR"); #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)load(context, "vkAcquireNextImage2KHR"); #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ /* VOLK_GENERATE_LOAD_DEVICE */ } static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context, PFN_vkVoidFunction (*load)(void*, const char*)) { /* VOLK_GENERATE_LOAD_DEVICE_TABLE */ #if defined(VK_VERSION_1_0) table->vkAllocateCommandBuffers = (PFN_vkAllocateCommandBuffers)load(context, "vkAllocateCommandBuffers"); table->vkAllocateDescriptorSets = (PFN_vkAllocateDescriptorSets)load(context, "vkAllocateDescriptorSets"); table->vkAllocateMemory = (PFN_vkAllocateMemory)load(context, "vkAllocateMemory"); table->vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)load(context, "vkBeginCommandBuffer"); table->vkBindBufferMemory = (PFN_vkBindBufferMemory)load(context, "vkBindBufferMemory"); table->vkBindImageMemory = (PFN_vkBindImageMemory)load(context, "vkBindImageMemory"); table->vkCmdBeginQuery = (PFN_vkCmdBeginQuery)load(context, "vkCmdBeginQuery"); table->vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)load(context, "vkCmdBeginRenderPass"); table->vkCmdBindDescriptorSets = (PFN_vkCmdBindDescriptorSets)load(context, "vkCmdBindDescriptorSets"); table->vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)load(context, "vkCmdBindIndexBuffer"); table->vkCmdBindPipeline = (PFN_vkCmdBindPipeline)load(context, "vkCmdBindPipeline"); table->vkCmdBindVertexBuffers = (PFN_vkCmdBindVertexBuffers)load(context, "vkCmdBindVertexBuffers"); table->vkCmdBlitImage = (PFN_vkCmdBlitImage)load(context, "vkCmdBlitImage"); table->vkCmdClearAttachments = (PFN_vkCmdClearAttachments)load(context, "vkCmdClearAttachments"); table->vkCmdClearColorImage = (PFN_vkCmdClearColorImage)load(context, "vkCmdClearColorImage"); table->vkCmdClearDepthStencilImage = (PFN_vkCmdClearDepthStencilImage)load(context, "vkCmdClearDepthStencilImage"); table->vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)load(context, "vkCmdCopyBuffer"); table->vkCmdCopyBufferToImage = (PFN_vkCmdCopyBufferToImage)load(context, "vkCmdCopyBufferToImage"); table->vkCmdCopyImage = (PFN_vkCmdCopyImage)load(context, "vkCmdCopyImage"); table->vkCmdCopyImageToBuffer = (PFN_vkCmdCopyImageToBuffer)load(context, "vkCmdCopyImageToBuffer"); table->vkCmdCopyQueryPoolResults = (PFN_vkCmdCopyQueryPoolResults)load(context, "vkCmdCopyQueryPoolResults"); table->vkCmdDispatch = (PFN_vkCmdDispatch)load(context, "vkCmdDispatch"); table->vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)load(context, "vkCmdDispatchIndirect"); table->vkCmdDraw = (PFN_vkCmdDraw)load(context, "vkCmdDraw"); table->vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)load(context, "vkCmdDrawIndexed"); table->vkCmdDrawIndexedIndirect = (PFN_vkCmdDrawIndexedIndirect)load(context, "vkCmdDrawIndexedIndirect"); table->vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)load(context, "vkCmdDrawIndirect"); table->vkCmdEndQuery = (PFN_vkCmdEndQuery)load(context, "vkCmdEndQuery"); table->vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)load(context, "vkCmdEndRenderPass"); table->vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)load(context, "vkCmdExecuteCommands"); table->vkCmdFillBuffer = (PFN_vkCmdFillBuffer)load(context, "vkCmdFillBuffer"); table->vkCmdNextSubpass = (PFN_vkCmdNextSubpass)load(context, "vkCmdNextSubpass"); table->vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)load(context, "vkCmdPipelineBarrier"); table->vkCmdPushConstants = (PFN_vkCmdPushConstants)load(context, "vkCmdPushConstants"); table->vkCmdResetEvent = (PFN_vkCmdResetEvent)load(context, "vkCmdResetEvent"); table->vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)load(context, "vkCmdResetQueryPool"); table->vkCmdResolveImage = (PFN_vkCmdResolveImage)load(context, "vkCmdResolveImage"); table->vkCmdSetBlendConstants = (PFN_vkCmdSetBlendConstants)load(context, "vkCmdSetBlendConstants"); table->vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)load(context, "vkCmdSetDepthBias"); table->vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)load(context, "vkCmdSetDepthBounds"); table->vkCmdSetEvent = (PFN_vkCmdSetEvent)load(context, "vkCmdSetEvent"); table->vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)load(context, "vkCmdSetLineWidth"); table->vkCmdSetScissor = (PFN_vkCmdSetScissor)load(context, "vkCmdSetScissor"); table->vkCmdSetStencilCompareMask = (PFN_vkCmdSetStencilCompareMask)load(context, "vkCmdSetStencilCompareMask"); table->vkCmdSetStencilReference = (PFN_vkCmdSetStencilReference)load(context, "vkCmdSetStencilReference"); table->vkCmdSetStencilWriteMask = (PFN_vkCmdSetStencilWriteMask)load(context, "vkCmdSetStencilWriteMask"); table->vkCmdSetViewport = (PFN_vkCmdSetViewport)load(context, "vkCmdSetViewport"); table->vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)load(context, "vkCmdUpdateBuffer"); table->vkCmdWaitEvents = (PFN_vkCmdWaitEvents)load(context, "vkCmdWaitEvents"); table->vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)load(context, "vkCmdWriteTimestamp"); table->vkCreateBuffer = (PFN_vkCreateBuffer)load(context, "vkCreateBuffer"); table->vkCreateBufferView = (PFN_vkCreateBufferView)load(context, "vkCreateBufferView"); table->vkCreateCommandPool = (PFN_vkCreateCommandPool)load(context, "vkCreateCommandPool"); table->vkCreateComputePipelines = (PFN_vkCreateComputePipelines)load(context, "vkCreateComputePipelines"); table->vkCreateDescriptorPool = (PFN_vkCreateDescriptorPool)load(context, "vkCreateDescriptorPool"); table->vkCreateDescriptorSetLayout = (PFN_vkCreateDescriptorSetLayout)load(context, "vkCreateDescriptorSetLayout"); table->vkCreateEvent = (PFN_vkCreateEvent)load(context, "vkCreateEvent"); table->vkCreateFence = (PFN_vkCreateFence)load(context, "vkCreateFence"); table->vkCreateFramebuffer = (PFN_vkCreateFramebuffer)load(context, "vkCreateFramebuffer"); table->vkCreateGraphicsPipelines = (PFN_vkCreateGraphicsPipelines)load(context, "vkCreateGraphicsPipelines"); table->vkCreateImage = (PFN_vkCreateImage)load(context, "vkCreateImage"); table->vkCreateImageView = (PFN_vkCreateImageView)load(context, "vkCreateImageView"); table->vkCreatePipelineCache = (PFN_vkCreatePipelineCache)load(context, "vkCreatePipelineCache"); table->vkCreatePipelineLayout = (PFN_vkCreatePipelineLayout)load(context, "vkCreatePipelineLayout"); table->vkCreateQueryPool = (PFN_vkCreateQueryPool)load(context, "vkCreateQueryPool"); table->vkCreateRenderPass = (PFN_vkCreateRenderPass)load(context, "vkCreateRenderPass"); table->vkCreateSampler = (PFN_vkCreateSampler)load(context, "vkCreateSampler"); table->vkCreateSemaphore = (PFN_vkCreateSemaphore)load(context, "vkCreateSemaphore"); table->vkCreateShaderModule = (PFN_vkCreateShaderModule)load(context, "vkCreateShaderModule"); table->vkDestroyBuffer = (PFN_vkDestroyBuffer)load(context, "vkDestroyBuffer"); table->vkDestroyBufferView = (PFN_vkDestroyBufferView)load(context, "vkDestroyBufferView"); table->vkDestroyCommandPool = (PFN_vkDestroyCommandPool)load(context, "vkDestroyCommandPool"); table->vkDestroyDescriptorPool = (PFN_vkDestroyDescriptorPool)load(context, "vkDestroyDescriptorPool"); table->vkDestroyDescriptorSetLayout = (PFN_vkDestroyDescriptorSetLayout)load(context, "vkDestroyDescriptorSetLayout"); table->vkDestroyDevice = (PFN_vkDestroyDevice)load(context, "vkDestroyDevice"); table->vkDestroyEvent = (PFN_vkDestroyEvent)load(context, "vkDestroyEvent"); table->vkDestroyFence = (PFN_vkDestroyFence)load(context, "vkDestroyFence"); table->vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)load(context, "vkDestroyFramebuffer"); table->vkDestroyImage = (PFN_vkDestroyImage)load(context, "vkDestroyImage"); table->vkDestroyImageView = (PFN_vkDestroyImageView)load(context, "vkDestroyImageView"); table->vkDestroyPipeline = (PFN_vkDestroyPipeline)load(context, "vkDestroyPipeline"); table->vkDestroyPipelineCache = (PFN_vkDestroyPipelineCache)load(context, "vkDestroyPipelineCache"); table->vkDestroyPipelineLayout = (PFN_vkDestroyPipelineLayout)load(context, "vkDestroyPipelineLayout"); table->vkDestroyQueryPool = (PFN_vkDestroyQueryPool)load(context, "vkDestroyQueryPool"); table->vkDestroyRenderPass = (PFN_vkDestroyRenderPass)load(context, "vkDestroyRenderPass"); table->vkDestroySampler = (PFN_vkDestroySampler)load(context, "vkDestroySampler"); table->vkDestroySemaphore = (PFN_vkDestroySemaphore)load(context, "vkDestroySemaphore"); table->vkDestroyShaderModule = (PFN_vkDestroyShaderModule)load(context, "vkDestroyShaderModule"); table->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)load(context, "vkDeviceWaitIdle"); table->vkEndCommandBuffer = (PFN_vkEndCommandBuffer)load(context, "vkEndCommandBuffer"); table->vkFlushMappedMemoryRanges = (PFN_vkFlushMappedMemoryRanges)load(context, "vkFlushMappedMemoryRanges"); table->vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)load(context, "vkFreeCommandBuffers"); table->vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)load(context, "vkFreeDescriptorSets"); table->vkFreeMemory = (PFN_vkFreeMemory)load(context, "vkFreeMemory"); table->vkGetBufferMemoryRequirements = (PFN_vkGetBufferMemoryRequirements)load(context, "vkGetBufferMemoryRequirements"); table->vkGetDeviceMemoryCommitment = (PFN_vkGetDeviceMemoryCommitment)load(context, "vkGetDeviceMemoryCommitment"); table->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)load(context, "vkGetDeviceQueue"); table->vkGetEventStatus = (PFN_vkGetEventStatus)load(context, "vkGetEventStatus"); table->vkGetFenceStatus = (PFN_vkGetFenceStatus)load(context, "vkGetFenceStatus"); table->vkGetImageMemoryRequirements = (PFN_vkGetImageMemoryRequirements)load(context, "vkGetImageMemoryRequirements"); table->vkGetImageSparseMemoryRequirements = (PFN_vkGetImageSparseMemoryRequirements)load(context, "vkGetImageSparseMemoryRequirements"); table->vkGetImageSubresourceLayout = (PFN_vkGetImageSubresourceLayout)load(context, "vkGetImageSubresourceLayout"); table->vkGetPipelineCacheData = (PFN_vkGetPipelineCacheData)load(context, "vkGetPipelineCacheData"); table->vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)load(context, "vkGetQueryPoolResults"); table->vkGetRenderAreaGranularity = (PFN_vkGetRenderAreaGranularity)load(context, "vkGetRenderAreaGranularity"); table->vkInvalidateMappedMemoryRanges = (PFN_vkInvalidateMappedMemoryRanges)load(context, "vkInvalidateMappedMemoryRanges"); table->vkMapMemory = (PFN_vkMapMemory)load(context, "vkMapMemory"); table->vkMergePipelineCaches = (PFN_vkMergePipelineCaches)load(context, "vkMergePipelineCaches"); table->vkQueueBindSparse = (PFN_vkQueueBindSparse)load(context, "vkQueueBindSparse"); table->vkQueueSubmit = (PFN_vkQueueSubmit)load(context, "vkQueueSubmit"); table->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)load(context, "vkQueueWaitIdle"); table->vkResetCommandBuffer = (PFN_vkResetCommandBuffer)load(context, "vkResetCommandBuffer"); table->vkResetCommandPool = (PFN_vkResetCommandPool)load(context, "vkResetCommandPool"); table->vkResetDescriptorPool = (PFN_vkResetDescriptorPool)load(context, "vkResetDescriptorPool"); table->vkResetEvent = (PFN_vkResetEvent)load(context, "vkResetEvent"); table->vkResetFences = (PFN_vkResetFences)load(context, "vkResetFences"); table->vkSetEvent = (PFN_vkSetEvent)load(context, "vkSetEvent"); table->vkUnmapMemory = (PFN_vkUnmapMemory)load(context, "vkUnmapMemory"); table->vkUpdateDescriptorSets = (PFN_vkUpdateDescriptorSets)load(context, "vkUpdateDescriptorSets"); table->vkWaitForFences = (PFN_vkWaitForFences)load(context, "vkWaitForFences"); #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) table->vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)load(context, "vkBindBufferMemory2"); table->vkBindImageMemory2 = (PFN_vkBindImageMemory2)load(context, "vkBindImageMemory2"); table->vkCmdDispatchBase = (PFN_vkCmdDispatchBase)load(context, "vkCmdDispatchBase"); table->vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)load(context, "vkCmdSetDeviceMask"); table->vkCreateDescriptorUpdateTemplate = (PFN_vkCreateDescriptorUpdateTemplate)load(context, "vkCreateDescriptorUpdateTemplate"); table->vkCreateSamplerYcbcrConversion = (PFN_vkCreateSamplerYcbcrConversion)load(context, "vkCreateSamplerYcbcrConversion"); table->vkDestroyDescriptorUpdateTemplate = (PFN_vkDestroyDescriptorUpdateTemplate)load(context, "vkDestroyDescriptorUpdateTemplate"); table->vkDestroySamplerYcbcrConversion = (PFN_vkDestroySamplerYcbcrConversion)load(context, "vkDestroySamplerYcbcrConversion"); table->vkGetBufferMemoryRequirements2 = (PFN_vkGetBufferMemoryRequirements2)load(context, "vkGetBufferMemoryRequirements2"); table->vkGetDescriptorSetLayoutSupport = (PFN_vkGetDescriptorSetLayoutSupport)load(context, "vkGetDescriptorSetLayoutSupport"); table->vkGetDeviceGroupPeerMemoryFeatures = (PFN_vkGetDeviceGroupPeerMemoryFeatures)load(context, "vkGetDeviceGroupPeerMemoryFeatures"); table->vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)load(context, "vkGetDeviceQueue2"); table->vkGetImageMemoryRequirements2 = (PFN_vkGetImageMemoryRequirements2)load(context, "vkGetImageMemoryRequirements2"); table->vkGetImageSparseMemoryRequirements2 = (PFN_vkGetImageSparseMemoryRequirements2)load(context, "vkGetImageSparseMemoryRequirements2"); table->vkTrimCommandPool = (PFN_vkTrimCommandPool)load(context, "vkTrimCommandPool"); table->vkUpdateDescriptorSetWithTemplate = (PFN_vkUpdateDescriptorSetWithTemplate)load(context, "vkUpdateDescriptorSetWithTemplate"); #endif /* defined(VK_VERSION_1_1) */ #if defined(VK_VERSION_1_2) table->vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)load(context, "vkCmdBeginRenderPass2"); table->vkCmdDrawIndexedIndirectCount = (PFN_vkCmdDrawIndexedIndirectCount)load(context, "vkCmdDrawIndexedIndirectCount"); table->vkCmdDrawIndirectCount = (PFN_vkCmdDrawIndirectCount)load(context, "vkCmdDrawIndirectCount"); table->vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)load(context, "vkCmdEndRenderPass2"); table->vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)load(context, "vkCmdNextSubpass2"); table->vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)load(context, "vkCreateRenderPass2"); table->vkGetBufferDeviceAddress = (PFN_vkGetBufferDeviceAddress)load(context, "vkGetBufferDeviceAddress"); table->vkGetBufferOpaqueCaptureAddress = (PFN_vkGetBufferOpaqueCaptureAddress)load(context, "vkGetBufferOpaqueCaptureAddress"); table->vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)load(context, "vkGetDeviceMemoryOpaqueCaptureAddress"); table->vkGetSemaphoreCounterValue = (PFN_vkGetSemaphoreCounterValue)load(context, "vkGetSemaphoreCounterValue"); table->vkResetQueryPool = (PFN_vkResetQueryPool)load(context, "vkResetQueryPool"); table->vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore"); table->vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores"); #endif /* defined(VK_VERSION_1_2) */ #if defined(VK_AMD_buffer_marker) table->vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD"); #endif /* defined(VK_AMD_buffer_marker) */ #if defined(VK_AMD_display_native_hdr) table->vkSetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)load(context, "vkSetLocalDimmingAMD"); #endif /* defined(VK_AMD_display_native_hdr) */ #if defined(VK_AMD_draw_indirect_count) table->vkCmdDrawIndexedIndirectCountAMD = (PFN_vkCmdDrawIndexedIndirectCountAMD)load(context, "vkCmdDrawIndexedIndirectCountAMD"); table->vkCmdDrawIndirectCountAMD = (PFN_vkCmdDrawIndirectCountAMD)load(context, "vkCmdDrawIndirectCountAMD"); #endif /* defined(VK_AMD_draw_indirect_count) */ #if defined(VK_AMD_shader_info) table->vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)load(context, "vkGetShaderInfoAMD"); #endif /* defined(VK_AMD_shader_info) */ #if defined(VK_ANDROID_external_memory_android_hardware_buffer) table->vkGetAndroidHardwareBufferPropertiesANDROID = (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)load(context, "vkGetAndroidHardwareBufferPropertiesANDROID"); table->vkGetMemoryAndroidHardwareBufferANDROID = (PFN_vkGetMemoryAndroidHardwareBufferANDROID)load(context, "vkGetMemoryAndroidHardwareBufferANDROID"); #endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ #if defined(VK_EXT_buffer_device_address) table->vkGetBufferDeviceAddressEXT = (PFN_vkGetBufferDeviceAddressEXT)load(context, "vkGetBufferDeviceAddressEXT"); #endif /* defined(VK_EXT_buffer_device_address) */ #if defined(VK_EXT_calibrated_timestamps) table->vkGetCalibratedTimestampsEXT = (PFN_vkGetCalibratedTimestampsEXT)load(context, "vkGetCalibratedTimestampsEXT"); #endif /* defined(VK_EXT_calibrated_timestamps) */ #if defined(VK_EXT_color_write_enable) table->vkCmdSetColorWriteEnableEXT = (PFN_vkCmdSetColorWriteEnableEXT)load(context, "vkCmdSetColorWriteEnableEXT"); #endif /* defined(VK_EXT_color_write_enable) */ #if defined(VK_EXT_conditional_rendering) table->vkCmdBeginConditionalRenderingEXT = (PFN_vkCmdBeginConditionalRenderingEXT)load(context, "vkCmdBeginConditionalRenderingEXT"); table->vkCmdEndConditionalRenderingEXT = (PFN_vkCmdEndConditionalRenderingEXT)load(context, "vkCmdEndConditionalRenderingEXT"); #endif /* defined(VK_EXT_conditional_rendering) */ #if defined(VK_EXT_debug_marker) table->vkCmdDebugMarkerBeginEXT = (PFN_vkCmdDebugMarkerBeginEXT)load(context, "vkCmdDebugMarkerBeginEXT"); table->vkCmdDebugMarkerEndEXT = (PFN_vkCmdDebugMarkerEndEXT)load(context, "vkCmdDebugMarkerEndEXT"); table->vkCmdDebugMarkerInsertEXT = (PFN_vkCmdDebugMarkerInsertEXT)load(context, "vkCmdDebugMarkerInsertEXT"); table->vkDebugMarkerSetObjectNameEXT = (PFN_vkDebugMarkerSetObjectNameEXT)load(context, "vkDebugMarkerSetObjectNameEXT"); table->vkDebugMarkerSetObjectTagEXT = (PFN_vkDebugMarkerSetObjectTagEXT)load(context, "vkDebugMarkerSetObjectTagEXT"); #endif /* defined(VK_EXT_debug_marker) */ #if defined(VK_EXT_discard_rectangles) table->vkCmdSetDiscardRectangleEXT = (PFN_vkCmdSetDiscardRectangleEXT)load(context, "vkCmdSetDiscardRectangleEXT"); #endif /* defined(VK_EXT_discard_rectangles) */ #if defined(VK_EXT_display_control) table->vkDisplayPowerControlEXT = (PFN_vkDisplayPowerControlEXT)load(context, "vkDisplayPowerControlEXT"); table->vkGetSwapchainCounterEXT = (PFN_vkGetSwapchainCounterEXT)load(context, "vkGetSwapchainCounterEXT"); table->vkRegisterDeviceEventEXT = (PFN_vkRegisterDeviceEventEXT)load(context, "vkRegisterDeviceEventEXT"); table->vkRegisterDisplayEventEXT = (PFN_vkRegisterDisplayEventEXT)load(context, "vkRegisterDisplayEventEXT"); #endif /* defined(VK_EXT_display_control) */ #if defined(VK_EXT_extended_dynamic_state) table->vkCmdBindVertexBuffers2EXT = (PFN_vkCmdBindVertexBuffers2EXT)load(context, "vkCmdBindVertexBuffers2EXT"); table->vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)load(context, "vkCmdSetCullModeEXT"); table->vkCmdSetDepthBoundsTestEnableEXT = (PFN_vkCmdSetDepthBoundsTestEnableEXT)load(context, "vkCmdSetDepthBoundsTestEnableEXT"); table->vkCmdSetDepthCompareOpEXT = (PFN_vkCmdSetDepthCompareOpEXT)load(context, "vkCmdSetDepthCompareOpEXT"); table->vkCmdSetDepthTestEnableEXT = (PFN_vkCmdSetDepthTestEnableEXT)load(context, "vkCmdSetDepthTestEnableEXT"); table->vkCmdSetDepthWriteEnableEXT = (PFN_vkCmdSetDepthWriteEnableEXT)load(context, "vkCmdSetDepthWriteEnableEXT"); table->vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)load(context, "vkCmdSetFrontFaceEXT"); table->vkCmdSetPrimitiveTopologyEXT = (PFN_vkCmdSetPrimitiveTopologyEXT)load(context, "vkCmdSetPrimitiveTopologyEXT"); table->vkCmdSetScissorWithCountEXT = (PFN_vkCmdSetScissorWithCountEXT)load(context, "vkCmdSetScissorWithCountEXT"); table->vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)load(context, "vkCmdSetStencilOpEXT"); table->vkCmdSetStencilTestEnableEXT = (PFN_vkCmdSetStencilTestEnableEXT)load(context, "vkCmdSetStencilTestEnableEXT"); table->vkCmdSetViewportWithCountEXT = (PFN_vkCmdSetViewportWithCountEXT)load(context, "vkCmdSetViewportWithCountEXT"); #endif /* defined(VK_EXT_extended_dynamic_state) */ #if defined(VK_EXT_external_memory_host) table->vkGetMemoryHostPointerPropertiesEXT = (PFN_vkGetMemoryHostPointerPropertiesEXT)load(context, "vkGetMemoryHostPointerPropertiesEXT"); #endif /* defined(VK_EXT_external_memory_host) */ #if defined(VK_EXT_full_screen_exclusive) table->vkAcquireFullScreenExclusiveModeEXT = (PFN_vkAcquireFullScreenExclusiveModeEXT)load(context, "vkAcquireFullScreenExclusiveModeEXT"); table->vkReleaseFullScreenExclusiveModeEXT = (PFN_vkReleaseFullScreenExclusiveModeEXT)load(context, "vkReleaseFullScreenExclusiveModeEXT"); #endif /* defined(VK_EXT_full_screen_exclusive) */ #if defined(VK_EXT_hdr_metadata) table->vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)load(context, "vkSetHdrMetadataEXT"); #endif /* defined(VK_EXT_hdr_metadata) */ #if defined(VK_EXT_host_query_reset) table->vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)load(context, "vkResetQueryPoolEXT"); #endif /* defined(VK_EXT_host_query_reset) */ #if defined(VK_EXT_image_drm_format_modifier) table->vkGetImageDrmFormatModifierPropertiesEXT = (PFN_vkGetImageDrmFormatModifierPropertiesEXT)load(context, "vkGetImageDrmFormatModifierPropertiesEXT"); #endif /* defined(VK_EXT_image_drm_format_modifier) */ #if defined(VK_EXT_line_rasterization) table->vkCmdSetLineStippleEXT = (PFN_vkCmdSetLineStippleEXT)load(context, "vkCmdSetLineStippleEXT"); #endif /* defined(VK_EXT_line_rasterization) */ #if defined(VK_EXT_private_data) table->vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT"); table->vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT"); table->vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)load(context, "vkGetPrivateDataEXT"); table->vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)load(context, "vkSetPrivateDataEXT"); #endif /* defined(VK_EXT_private_data) */ #if defined(VK_EXT_sample_locations) table->vkCmdSetSampleLocationsEXT = (PFN_vkCmdSetSampleLocationsEXT)load(context, "vkCmdSetSampleLocationsEXT"); #endif /* defined(VK_EXT_sample_locations) */ #if defined(VK_EXT_transform_feedback) table->vkCmdBeginQueryIndexedEXT = (PFN_vkCmdBeginQueryIndexedEXT)load(context, "vkCmdBeginQueryIndexedEXT"); table->vkCmdBeginTransformFeedbackEXT = (PFN_vkCmdBeginTransformFeedbackEXT)load(context, "vkCmdBeginTransformFeedbackEXT"); table->vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)load(context, "vkCmdBindTransformFeedbackBuffersEXT"); table->vkCmdDrawIndirectByteCountEXT = (PFN_vkCmdDrawIndirectByteCountEXT)load(context, "vkCmdDrawIndirectByteCountEXT"); table->vkCmdEndQueryIndexedEXT = (PFN_vkCmdEndQueryIndexedEXT)load(context, "vkCmdEndQueryIndexedEXT"); table->vkCmdEndTransformFeedbackEXT = (PFN_vkCmdEndTransformFeedbackEXT)load(context, "vkCmdEndTransformFeedbackEXT"); #endif /* defined(VK_EXT_transform_feedback) */ #if defined(VK_EXT_validation_cache) table->vkCreateValidationCacheEXT = (PFN_vkCreateValidationCacheEXT)load(context, "vkCreateValidationCacheEXT"); table->vkDestroyValidationCacheEXT = (PFN_vkDestroyValidationCacheEXT)load(context, "vkDestroyValidationCacheEXT"); table->vkGetValidationCacheDataEXT = (PFN_vkGetValidationCacheDataEXT)load(context, "vkGetValidationCacheDataEXT"); table->vkMergeValidationCachesEXT = (PFN_vkMergeValidationCachesEXT)load(context, "vkMergeValidationCachesEXT"); #endif /* defined(VK_EXT_validation_cache) */ #if defined(VK_EXT_vertex_input_dynamic_state) table->vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT"); #endif /* defined(VK_EXT_vertex_input_dynamic_state) */ #if defined(VK_FUCHSIA_external_memory) table->vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA"); table->vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA"); #endif /* defined(VK_FUCHSIA_external_memory) */ #if defined(VK_FUCHSIA_external_semaphore) table->vkGetSemaphoreZirconHandleFUCHSIA = (PFN_vkGetSemaphoreZirconHandleFUCHSIA)load(context, "vkGetSemaphoreZirconHandleFUCHSIA"); table->vkImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)load(context, "vkImportSemaphoreZirconHandleFUCHSIA"); #endif /* defined(VK_FUCHSIA_external_semaphore) */ #if defined(VK_GOOGLE_display_timing) table->vkGetPastPresentationTimingGOOGLE = (PFN_vkGetPastPresentationTimingGOOGLE)load(context, "vkGetPastPresentationTimingGOOGLE"); table->vkGetRefreshCycleDurationGOOGLE = (PFN_vkGetRefreshCycleDurationGOOGLE)load(context, "vkGetRefreshCycleDurationGOOGLE"); #endif /* defined(VK_GOOGLE_display_timing) */ #if defined(VK_INTEL_performance_query) table->vkAcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)load(context, "vkAcquirePerformanceConfigurationINTEL"); table->vkCmdSetPerformanceMarkerINTEL = (PFN_vkCmdSetPerformanceMarkerINTEL)load(context, "vkCmdSetPerformanceMarkerINTEL"); table->vkCmdSetPerformanceOverrideINTEL = (PFN_vkCmdSetPerformanceOverrideINTEL)load(context, "vkCmdSetPerformanceOverrideINTEL"); table->vkCmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)load(context, "vkCmdSetPerformanceStreamMarkerINTEL"); table->vkGetPerformanceParameterINTEL = (PFN_vkGetPerformanceParameterINTEL)load(context, "vkGetPerformanceParameterINTEL"); table->vkInitializePerformanceApiINTEL = (PFN_vkInitializePerformanceApiINTEL)load(context, "vkInitializePerformanceApiINTEL"); table->vkQueueSetPerformanceConfigurationINTEL = (PFN_vkQueueSetPerformanceConfigurationINTEL)load(context, "vkQueueSetPerformanceConfigurationINTEL"); table->vkReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)load(context, "vkReleasePerformanceConfigurationINTEL"); table->vkUninitializePerformanceApiINTEL = (PFN_vkUninitializePerformanceApiINTEL)load(context, "vkUninitializePerformanceApiINTEL"); #endif /* defined(VK_INTEL_performance_query) */ #if defined(VK_KHR_acceleration_structure) table->vkBuildAccelerationStructuresKHR = (PFN_vkBuildAccelerationStructuresKHR)load(context, "vkBuildAccelerationStructuresKHR"); table->vkCmdBuildAccelerationStructuresIndirectKHR = (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)load(context, "vkCmdBuildAccelerationStructuresIndirectKHR"); table->vkCmdBuildAccelerationStructuresKHR = (PFN_vkCmdBuildAccelerationStructuresKHR)load(context, "vkCmdBuildAccelerationStructuresKHR"); table->vkCmdCopyAccelerationStructureKHR = (PFN_vkCmdCopyAccelerationStructureKHR)load(context, "vkCmdCopyAccelerationStructureKHR"); table->vkCmdCopyAccelerationStructureToMemoryKHR = (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)load(context, "vkCmdCopyAccelerationStructureToMemoryKHR"); table->vkCmdCopyMemoryToAccelerationStructureKHR = (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)load(context, "vkCmdCopyMemoryToAccelerationStructureKHR"); table->vkCmdWriteAccelerationStructuresPropertiesKHR = (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)load(context, "vkCmdWriteAccelerationStructuresPropertiesKHR"); table->vkCopyAccelerationStructureKHR = (PFN_vkCopyAccelerationStructureKHR)load(context, "vkCopyAccelerationStructureKHR"); table->vkCopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)load(context, "vkCopyAccelerationStructureToMemoryKHR"); table->vkCopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)load(context, "vkCopyMemoryToAccelerationStructureKHR"); table->vkCreateAccelerationStructureKHR = (PFN_vkCreateAccelerationStructureKHR)load(context, "vkCreateAccelerationStructureKHR"); table->vkDestroyAccelerationStructureKHR = (PFN_vkDestroyAccelerationStructureKHR)load(context, "vkDestroyAccelerationStructureKHR"); table->vkGetAccelerationStructureBuildSizesKHR = (PFN_vkGetAccelerationStructureBuildSizesKHR)load(context, "vkGetAccelerationStructureBuildSizesKHR"); table->vkGetAccelerationStructureDeviceAddressKHR = (PFN_vkGetAccelerationStructureDeviceAddressKHR)load(context, "vkGetAccelerationStructureDeviceAddressKHR"); table->vkGetDeviceAccelerationStructureCompatibilityKHR = (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)load(context, "vkGetDeviceAccelerationStructureCompatibilityKHR"); table->vkWriteAccelerationStructuresPropertiesKHR = (PFN_vkWriteAccelerationStructuresPropertiesKHR)load(context, "vkWriteAccelerationStructuresPropertiesKHR"); #endif /* defined(VK_KHR_acceleration_structure) */ #if defined(VK_KHR_bind_memory2) table->vkBindBufferMemory2KHR = (PFN_vkBindBufferMemory2KHR)load(context, "vkBindBufferMemory2KHR"); table->vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)load(context, "vkBindImageMemory2KHR"); #endif /* defined(VK_KHR_bind_memory2) */ #if defined(VK_KHR_buffer_device_address) table->vkGetBufferDeviceAddressKHR = (PFN_vkGetBufferDeviceAddressKHR)load(context, "vkGetBufferDeviceAddressKHR"); table->vkGetBufferOpaqueCaptureAddressKHR = (PFN_vkGetBufferOpaqueCaptureAddressKHR)load(context, "vkGetBufferOpaqueCaptureAddressKHR"); table->vkGetDeviceMemoryOpaqueCaptureAddressKHR = (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)load(context, "vkGetDeviceMemoryOpaqueCaptureAddressKHR"); #endif /* defined(VK_KHR_buffer_device_address) */ #if defined(VK_KHR_copy_commands2) table->vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)load(context, "vkCmdBlitImage2KHR"); table->vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)load(context, "vkCmdCopyBuffer2KHR"); table->vkCmdCopyBufferToImage2KHR = (PFN_vkCmdCopyBufferToImage2KHR)load(context, "vkCmdCopyBufferToImage2KHR"); table->vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)load(context, "vkCmdCopyImage2KHR"); table->vkCmdCopyImageToBuffer2KHR = (PFN_vkCmdCopyImageToBuffer2KHR)load(context, "vkCmdCopyImageToBuffer2KHR"); table->vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)load(context, "vkCmdResolveImage2KHR"); #endif /* defined(VK_KHR_copy_commands2) */ #if defined(VK_KHR_create_renderpass2) table->vkCmdBeginRenderPass2KHR = (PFN_vkCmdBeginRenderPass2KHR)load(context, "vkCmdBeginRenderPass2KHR"); table->vkCmdEndRenderPass2KHR = (PFN_vkCmdEndRenderPass2KHR)load(context, "vkCmdEndRenderPass2KHR"); table->vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)load(context, "vkCmdNextSubpass2KHR"); table->vkCreateRenderPass2KHR = (PFN_vkCreateRenderPass2KHR)load(context, "vkCreateRenderPass2KHR"); #endif /* defined(VK_KHR_create_renderpass2) */ #if defined(VK_KHR_deferred_host_operations) table->vkCreateDeferredOperationKHR = (PFN_vkCreateDeferredOperationKHR)load(context, "vkCreateDeferredOperationKHR"); table->vkDeferredOperationJoinKHR = (PFN_vkDeferredOperationJoinKHR)load(context, "vkDeferredOperationJoinKHR"); table->vkDestroyDeferredOperationKHR = (PFN_vkDestroyDeferredOperationKHR)load(context, "vkDestroyDeferredOperationKHR"); table->vkGetDeferredOperationMaxConcurrencyKHR = (PFN_vkGetDeferredOperationMaxConcurrencyKHR)load(context, "vkGetDeferredOperationMaxConcurrencyKHR"); table->vkGetDeferredOperationResultKHR = (PFN_vkGetDeferredOperationResultKHR)load(context, "vkGetDeferredOperationResultKHR"); #endif /* defined(VK_KHR_deferred_host_operations) */ #if defined(VK_KHR_descriptor_update_template) table->vkCreateDescriptorUpdateTemplateKHR = (PFN_vkCreateDescriptorUpdateTemplateKHR)load(context, "vkCreateDescriptorUpdateTemplateKHR"); table->vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)load(context, "vkDestroyDescriptorUpdateTemplateKHR"); table->vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)load(context, "vkUpdateDescriptorSetWithTemplateKHR"); #endif /* defined(VK_KHR_descriptor_update_template) */ #if defined(VK_KHR_device_group) table->vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)load(context, "vkCmdDispatchBaseKHR"); table->vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)load(context, "vkCmdSetDeviceMaskKHR"); table->vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)load(context, "vkGetDeviceGroupPeerMemoryFeaturesKHR"); #endif /* defined(VK_KHR_device_group) */ #if defined(VK_KHR_display_swapchain) table->vkCreateSharedSwapchainsKHR = (PFN_vkCreateSharedSwapchainsKHR)load(context, "vkCreateSharedSwapchainsKHR"); #endif /* defined(VK_KHR_display_swapchain) */ #if defined(VK_KHR_draw_indirect_count) table->vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR"); table->vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR"); #endif /* defined(VK_KHR_draw_indirect_count) */ #if defined(VK_KHR_external_fence_fd) table->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR"); table->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR"); #endif /* defined(VK_KHR_external_fence_fd) */ #if defined(VK_KHR_external_fence_win32) table->vkGetFenceWin32HandleKHR = (PFN_vkGetFenceWin32HandleKHR)load(context, "vkGetFenceWin32HandleKHR"); table->vkImportFenceWin32HandleKHR = (PFN_vkImportFenceWin32HandleKHR)load(context, "vkImportFenceWin32HandleKHR"); #endif /* defined(VK_KHR_external_fence_win32) */ #if defined(VK_KHR_external_memory_fd) table->vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)load(context, "vkGetMemoryFdKHR"); table->vkGetMemoryFdPropertiesKHR = (PFN_vkGetMemoryFdPropertiesKHR)load(context, "vkGetMemoryFdPropertiesKHR"); #endif /* defined(VK_KHR_external_memory_fd) */ #if defined(VK_KHR_external_memory_win32) table->vkGetMemoryWin32HandleKHR = (PFN_vkGetMemoryWin32HandleKHR)load(context, "vkGetMemoryWin32HandleKHR"); table->vkGetMemoryWin32HandlePropertiesKHR = (PFN_vkGetMemoryWin32HandlePropertiesKHR)load(context, "vkGetMemoryWin32HandlePropertiesKHR"); #endif /* defined(VK_KHR_external_memory_win32) */ #if defined(VK_KHR_external_semaphore_fd) table->vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)load(context, "vkGetSemaphoreFdKHR"); table->vkImportSemaphoreFdKHR = (PFN_vkImportSemaphoreFdKHR)load(context, "vkImportSemaphoreFdKHR"); #endif /* defined(VK_KHR_external_semaphore_fd) */ #if defined(VK_KHR_external_semaphore_win32) table->vkGetSemaphoreWin32HandleKHR = (PFN_vkGetSemaphoreWin32HandleKHR)load(context, "vkGetSemaphoreWin32HandleKHR"); table->vkImportSemaphoreWin32HandleKHR = (PFN_vkImportSemaphoreWin32HandleKHR)load(context, "vkImportSemaphoreWin32HandleKHR"); #endif /* defined(VK_KHR_external_semaphore_win32) */ #if defined(VK_KHR_fragment_shading_rate) table->vkCmdSetFragmentShadingRateKHR = (PFN_vkCmdSetFragmentShadingRateKHR)load(context, "vkCmdSetFragmentShadingRateKHR"); #endif /* defined(VK_KHR_fragment_shading_rate) */ #if defined(VK_KHR_get_memory_requirements2) table->vkGetBufferMemoryRequirements2KHR = (PFN_vkGetBufferMemoryRequirements2KHR)load(context, "vkGetBufferMemoryRequirements2KHR"); table->vkGetImageMemoryRequirements2KHR = (PFN_vkGetImageMemoryRequirements2KHR)load(context, "vkGetImageMemoryRequirements2KHR"); table->vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)load(context, "vkGetImageSparseMemoryRequirements2KHR"); #endif /* defined(VK_KHR_get_memory_requirements2) */ #if defined(VK_KHR_maintenance1) table->vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)load(context, "vkTrimCommandPoolKHR"); #endif /* defined(VK_KHR_maintenance1) */ #if defined(VK_KHR_maintenance3) table->vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR"); #endif /* defined(VK_KHR_maintenance3) */ #if defined(VK_KHR_performance_query) table->vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR"); table->vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR"); #endif /* defined(VK_KHR_performance_query) */ #if defined(VK_KHR_pipeline_executable_properties) table->vkGetPipelineExecutableInternalRepresentationsKHR = (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)load(context, "vkGetPipelineExecutableInternalRepresentationsKHR"); table->vkGetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)load(context, "vkGetPipelineExecutablePropertiesKHR"); table->vkGetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)load(context, "vkGetPipelineExecutableStatisticsKHR"); #endif /* defined(VK_KHR_pipeline_executable_properties) */ #if defined(VK_KHR_push_descriptor) table->vkCmdPushDescriptorSetKHR = (PFN_vkCmdPushDescriptorSetKHR)load(context, "vkCmdPushDescriptorSetKHR"); #endif /* defined(VK_KHR_push_descriptor) */ #if defined(VK_KHR_ray_tracing_pipeline) table->vkCmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)load(context, "vkCmdSetRayTracingPipelineStackSizeKHR"); table->vkCmdTraceRaysIndirectKHR = (PFN_vkCmdTraceRaysIndirectKHR)load(context, "vkCmdTraceRaysIndirectKHR"); table->vkCmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)load(context, "vkCmdTraceRaysKHR"); table->vkCreateRayTracingPipelinesKHR = (PFN_vkCreateRayTracingPipelinesKHR)load(context, "vkCreateRayTracingPipelinesKHR"); table->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR = (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)load(context, "vkGetRayTracingCaptureReplayShaderGroupHandlesKHR"); table->vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)load(context, "vkGetRayTracingShaderGroupHandlesKHR"); table->vkGetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)load(context, "vkGetRayTracingShaderGroupStackSizeKHR"); #endif /* defined(VK_KHR_ray_tracing_pipeline) */ #if defined(VK_KHR_sampler_ycbcr_conversion) table->vkCreateSamplerYcbcrConversionKHR = (PFN_vkCreateSamplerYcbcrConversionKHR)load(context, "vkCreateSamplerYcbcrConversionKHR"); table->vkDestroySamplerYcbcrConversionKHR = (PFN_vkDestroySamplerYcbcrConversionKHR)load(context, "vkDestroySamplerYcbcrConversionKHR"); #endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ #if defined(VK_KHR_shared_presentable_image) table->vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)load(context, "vkGetSwapchainStatusKHR"); #endif /* defined(VK_KHR_shared_presentable_image) */ #if defined(VK_KHR_swapchain) table->vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)load(context, "vkAcquireNextImageKHR"); table->vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)load(context, "vkCreateSwapchainKHR"); table->vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)load(context, "vkDestroySwapchainKHR"); table->vkGetSwapchainImagesKHR = (PFN_vkGetSwapchainImagesKHR)load(context, "vkGetSwapchainImagesKHR"); table->vkQueuePresentKHR = (PFN_vkQueuePresentKHR)load(context, "vkQueuePresentKHR"); #endif /* defined(VK_KHR_swapchain) */ #if defined(VK_KHR_synchronization2) table->vkCmdPipelineBarrier2KHR = (PFN_vkCmdPipelineBarrier2KHR)load(context, "vkCmdPipelineBarrier2KHR"); table->vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)load(context, "vkCmdResetEvent2KHR"); table->vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)load(context, "vkCmdSetEvent2KHR"); table->vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)load(context, "vkCmdWaitEvents2KHR"); table->vkCmdWriteTimestamp2KHR = (PFN_vkCmdWriteTimestamp2KHR)load(context, "vkCmdWriteTimestamp2KHR"); table->vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)load(context, "vkQueueSubmit2KHR"); #endif /* defined(VK_KHR_synchronization2) */ #if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) table->vkCmdWriteBufferMarker2AMD = (PFN_vkCmdWriteBufferMarker2AMD)load(context, "vkCmdWriteBufferMarker2AMD"); #endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ #if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) table->vkGetQueueCheckpointData2NV = (PFN_vkGetQueueCheckpointData2NV)load(context, "vkGetQueueCheckpointData2NV"); #endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_KHR_timeline_semaphore) table->vkGetSemaphoreCounterValueKHR = (PFN_vkGetSemaphoreCounterValueKHR)load(context, "vkGetSemaphoreCounterValueKHR"); table->vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)load(context, "vkSignalSemaphoreKHR"); table->vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)load(context, "vkWaitSemaphoresKHR"); #endif /* defined(VK_KHR_timeline_semaphore) */ #if defined(VK_KHR_video_decode_queue) table->vkCmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)load(context, "vkCmdDecodeVideoKHR"); #endif /* defined(VK_KHR_video_decode_queue) */ #if defined(VK_KHR_video_encode_queue) table->vkCmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)load(context, "vkCmdEncodeVideoKHR"); #endif /* defined(VK_KHR_video_encode_queue) */ #if defined(VK_KHR_video_queue) table->vkBindVideoSessionMemoryKHR = (PFN_vkBindVideoSessionMemoryKHR)load(context, "vkBindVideoSessionMemoryKHR"); table->vkCmdBeginVideoCodingKHR = (PFN_vkCmdBeginVideoCodingKHR)load(context, "vkCmdBeginVideoCodingKHR"); table->vkCmdControlVideoCodingKHR = (PFN_vkCmdControlVideoCodingKHR)load(context, "vkCmdControlVideoCodingKHR"); table->vkCmdEndVideoCodingKHR = (PFN_vkCmdEndVideoCodingKHR)load(context, "vkCmdEndVideoCodingKHR"); table->vkCreateVideoSessionKHR = (PFN_vkCreateVideoSessionKHR)load(context, "vkCreateVideoSessionKHR"); table->vkCreateVideoSessionParametersKHR = (PFN_vkCreateVideoSessionParametersKHR)load(context, "vkCreateVideoSessionParametersKHR"); table->vkDestroyVideoSessionKHR = (PFN_vkDestroyVideoSessionKHR)load(context, "vkDestroyVideoSessionKHR"); table->vkDestroyVideoSessionParametersKHR = (PFN_vkDestroyVideoSessionParametersKHR)load(context, "vkDestroyVideoSessionParametersKHR"); table->vkGetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)load(context, "vkGetVideoSessionMemoryRequirementsKHR"); table->vkUpdateVideoSessionParametersKHR = (PFN_vkUpdateVideoSessionParametersKHR)load(context, "vkUpdateVideoSessionParametersKHR"); #endif /* defined(VK_KHR_video_queue) */ #if defined(VK_NVX_image_view_handle) table->vkGetImageViewAddressNVX = (PFN_vkGetImageViewAddressNVX)load(context, "vkGetImageViewAddressNVX"); table->vkGetImageViewHandleNVX = (PFN_vkGetImageViewHandleNVX)load(context, "vkGetImageViewHandleNVX"); #endif /* defined(VK_NVX_image_view_handle) */ #if defined(VK_NV_clip_space_w_scaling) table->vkCmdSetViewportWScalingNV = (PFN_vkCmdSetViewportWScalingNV)load(context, "vkCmdSetViewportWScalingNV"); #endif /* defined(VK_NV_clip_space_w_scaling) */ #if defined(VK_NV_device_diagnostic_checkpoints) table->vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)load(context, "vkCmdSetCheckpointNV"); table->vkGetQueueCheckpointDataNV = (PFN_vkGetQueueCheckpointDataNV)load(context, "vkGetQueueCheckpointDataNV"); #endif /* defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_NV_device_generated_commands) table->vkCmdBindPipelineShaderGroupNV = (PFN_vkCmdBindPipelineShaderGroupNV)load(context, "vkCmdBindPipelineShaderGroupNV"); table->vkCmdExecuteGeneratedCommandsNV = (PFN_vkCmdExecuteGeneratedCommandsNV)load(context, "vkCmdExecuteGeneratedCommandsNV"); table->vkCmdPreprocessGeneratedCommandsNV = (PFN_vkCmdPreprocessGeneratedCommandsNV)load(context, "vkCmdPreprocessGeneratedCommandsNV"); table->vkCreateIndirectCommandsLayoutNV = (PFN_vkCreateIndirectCommandsLayoutNV)load(context, "vkCreateIndirectCommandsLayoutNV"); table->vkDestroyIndirectCommandsLayoutNV = (PFN_vkDestroyIndirectCommandsLayoutNV)load(context, "vkDestroyIndirectCommandsLayoutNV"); table->vkGetGeneratedCommandsMemoryRequirementsNV = (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)load(context, "vkGetGeneratedCommandsMemoryRequirementsNV"); #endif /* defined(VK_NV_device_generated_commands) */ #if defined(VK_NV_external_memory_win32) table->vkGetMemoryWin32HandleNV = (PFN_vkGetMemoryWin32HandleNV)load(context, "vkGetMemoryWin32HandleNV"); #endif /* defined(VK_NV_external_memory_win32) */ #if defined(VK_NV_fragment_shading_rate_enums) table->vkCmdSetFragmentShadingRateEnumNV = (PFN_vkCmdSetFragmentShadingRateEnumNV)load(context, "vkCmdSetFragmentShadingRateEnumNV"); #endif /* defined(VK_NV_fragment_shading_rate_enums) */ #if defined(VK_NV_mesh_shader) table->vkCmdDrawMeshTasksIndirectCountNV = (PFN_vkCmdDrawMeshTasksIndirectCountNV)load(context, "vkCmdDrawMeshTasksIndirectCountNV"); table->vkCmdDrawMeshTasksIndirectNV = (PFN_vkCmdDrawMeshTasksIndirectNV)load(context, "vkCmdDrawMeshTasksIndirectNV"); table->vkCmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)load(context, "vkCmdDrawMeshTasksNV"); #endif /* defined(VK_NV_mesh_shader) */ #if defined(VK_NV_ray_tracing) table->vkBindAccelerationStructureMemoryNV = (PFN_vkBindAccelerationStructureMemoryNV)load(context, "vkBindAccelerationStructureMemoryNV"); table->vkCmdBuildAccelerationStructureNV = (PFN_vkCmdBuildAccelerationStructureNV)load(context, "vkCmdBuildAccelerationStructureNV"); table->vkCmdCopyAccelerationStructureNV = (PFN_vkCmdCopyAccelerationStructureNV)load(context, "vkCmdCopyAccelerationStructureNV"); table->vkCmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)load(context, "vkCmdTraceRaysNV"); table->vkCmdWriteAccelerationStructuresPropertiesNV = (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)load(context, "vkCmdWriteAccelerationStructuresPropertiesNV"); table->vkCompileDeferredNV = (PFN_vkCompileDeferredNV)load(context, "vkCompileDeferredNV"); table->vkCreateAccelerationStructureNV = (PFN_vkCreateAccelerationStructureNV)load(context, "vkCreateAccelerationStructureNV"); table->vkCreateRayTracingPipelinesNV = (PFN_vkCreateRayTracingPipelinesNV)load(context, "vkCreateRayTracingPipelinesNV"); table->vkDestroyAccelerationStructureNV = (PFN_vkDestroyAccelerationStructureNV)load(context, "vkDestroyAccelerationStructureNV"); table->vkGetAccelerationStructureHandleNV = (PFN_vkGetAccelerationStructureHandleNV)load(context, "vkGetAccelerationStructureHandleNV"); table->vkGetAccelerationStructureMemoryRequirementsNV = (PFN_vkGetAccelerationStructureMemoryRequirementsNV)load(context, "vkGetAccelerationStructureMemoryRequirementsNV"); table->vkGetRayTracingShaderGroupHandlesNV = (PFN_vkGetRayTracingShaderGroupHandlesNV)load(context, "vkGetRayTracingShaderGroupHandlesNV"); #endif /* defined(VK_NV_ray_tracing) */ #if defined(VK_NV_scissor_exclusive) table->vkCmdSetExclusiveScissorNV = (PFN_vkCmdSetExclusiveScissorNV)load(context, "vkCmdSetExclusiveScissorNV"); #endif /* defined(VK_NV_scissor_exclusive) */ #if defined(VK_NV_shading_rate_image) table->vkCmdBindShadingRateImageNV = (PFN_vkCmdBindShadingRateImageNV)load(context, "vkCmdBindShadingRateImageNV"); table->vkCmdSetCoarseSampleOrderNV = (PFN_vkCmdSetCoarseSampleOrderNV)load(context, "vkCmdSetCoarseSampleOrderNV"); table->vkCmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)load(context, "vkCmdSetViewportShadingRatePaletteNV"); #endif /* defined(VK_NV_shading_rate_image) */ #if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) table->vkGetDeviceGroupSurfacePresentModes2EXT = (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)load(context, "vkGetDeviceGroupSurfacePresentModes2EXT"); #endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) table->vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)load(context, "vkCmdPushDescriptorSetWithTemplateKHR"); #endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) table->vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)load(context, "vkGetDeviceGroupPresentCapabilitiesKHR"); table->vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)load(context, "vkGetDeviceGroupSurfacePresentModesKHR"); #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) table->vkAcquireNextImage2KHR = (PFN_vkAcquireNextImage2KHR)load(context, "vkAcquireNextImage2KHR"); #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ /* VOLK_GENERATE_LOAD_DEVICE_TABLE */ } #ifdef __GNUC__ #ifdef VOLK_DEFAULT_VISIBILITY # pragma GCC visibility push(default) #else # pragma GCC visibility push(hidden) #endif #endif /* VOLK_GENERATE_PROTOTYPES_C */ #if defined(VK_VERSION_1_0) PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; PFN_vkAllocateMemory vkAllocateMemory; PFN_vkBeginCommandBuffer vkBeginCommandBuffer; PFN_vkBindBufferMemory vkBindBufferMemory; PFN_vkBindImageMemory vkBindImageMemory; PFN_vkCmdBeginQuery vkCmdBeginQuery; PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; PFN_vkCmdBindPipeline vkCmdBindPipeline; PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; PFN_vkCmdBlitImage vkCmdBlitImage; PFN_vkCmdClearAttachments vkCmdClearAttachments; PFN_vkCmdClearColorImage vkCmdClearColorImage; PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; PFN_vkCmdCopyBuffer vkCmdCopyBuffer; PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; PFN_vkCmdCopyImage vkCmdCopyImage; PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; PFN_vkCmdDispatch vkCmdDispatch; PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; PFN_vkCmdDraw vkCmdDraw; PFN_vkCmdDrawIndexed vkCmdDrawIndexed; PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; PFN_vkCmdDrawIndirect vkCmdDrawIndirect; PFN_vkCmdEndQuery vkCmdEndQuery; PFN_vkCmdEndRenderPass vkCmdEndRenderPass; PFN_vkCmdExecuteCommands vkCmdExecuteCommands; PFN_vkCmdFillBuffer vkCmdFillBuffer; PFN_vkCmdNextSubpass vkCmdNextSubpass; PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; PFN_vkCmdPushConstants vkCmdPushConstants; PFN_vkCmdResetEvent vkCmdResetEvent; PFN_vkCmdResetQueryPool vkCmdResetQueryPool; PFN_vkCmdResolveImage vkCmdResolveImage; PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; PFN_vkCmdSetDepthBias vkCmdSetDepthBias; PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; PFN_vkCmdSetEvent vkCmdSetEvent; PFN_vkCmdSetLineWidth vkCmdSetLineWidth; PFN_vkCmdSetScissor vkCmdSetScissor; PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; PFN_vkCmdSetStencilReference vkCmdSetStencilReference; PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; PFN_vkCmdSetViewport vkCmdSetViewport; PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; PFN_vkCmdWaitEvents vkCmdWaitEvents; PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; PFN_vkCreateBuffer vkCreateBuffer; PFN_vkCreateBufferView vkCreateBufferView; PFN_vkCreateCommandPool vkCreateCommandPool; PFN_vkCreateComputePipelines vkCreateComputePipelines; PFN_vkCreateDescriptorPool vkCreateDescriptorPool; PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; PFN_vkCreateDevice vkCreateDevice; PFN_vkCreateEvent vkCreateEvent; PFN_vkCreateFence vkCreateFence; PFN_vkCreateFramebuffer vkCreateFramebuffer; PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; PFN_vkCreateImage vkCreateImage; PFN_vkCreateImageView vkCreateImageView; PFN_vkCreateInstance vkCreateInstance; PFN_vkCreatePipelineCache vkCreatePipelineCache; PFN_vkCreatePipelineLayout vkCreatePipelineLayout; PFN_vkCreateQueryPool vkCreateQueryPool; PFN_vkCreateRenderPass vkCreateRenderPass; PFN_vkCreateSampler vkCreateSampler; PFN_vkCreateSemaphore vkCreateSemaphore; PFN_vkCreateShaderModule vkCreateShaderModule; PFN_vkDestroyBuffer vkDestroyBuffer; PFN_vkDestroyBufferView vkDestroyBufferView; PFN_vkDestroyCommandPool vkDestroyCommandPool; PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; PFN_vkDestroyDevice vkDestroyDevice; PFN_vkDestroyEvent vkDestroyEvent; PFN_vkDestroyFence vkDestroyFence; PFN_vkDestroyFramebuffer vkDestroyFramebuffer; PFN_vkDestroyImage vkDestroyImage; PFN_vkDestroyImageView vkDestroyImageView; PFN_vkDestroyInstance vkDestroyInstance; PFN_vkDestroyPipeline vkDestroyPipeline; PFN_vkDestroyPipelineCache vkDestroyPipelineCache; PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; PFN_vkDestroyQueryPool vkDestroyQueryPool; PFN_vkDestroyRenderPass vkDestroyRenderPass; PFN_vkDestroySampler vkDestroySampler; PFN_vkDestroySemaphore vkDestroySemaphore; PFN_vkDestroyShaderModule vkDestroyShaderModule; PFN_vkDeviceWaitIdle vkDeviceWaitIdle; PFN_vkEndCommandBuffer vkEndCommandBuffer; PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; PFN_vkFreeCommandBuffers vkFreeCommandBuffers; PFN_vkFreeDescriptorSets vkFreeDescriptorSets; PFN_vkFreeMemory vkFreeMemory; PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; PFN_vkGetDeviceQueue vkGetDeviceQueue; PFN_vkGetEventStatus vkGetEventStatus; PFN_vkGetFenceStatus vkGetFenceStatus; PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; PFN_vkGetPipelineCacheData vkGetPipelineCacheData; PFN_vkGetQueryPoolResults vkGetQueryPoolResults; PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; PFN_vkMapMemory vkMapMemory; PFN_vkMergePipelineCaches vkMergePipelineCaches; PFN_vkQueueBindSparse vkQueueBindSparse; PFN_vkQueueSubmit vkQueueSubmit; PFN_vkQueueWaitIdle vkQueueWaitIdle; PFN_vkResetCommandBuffer vkResetCommandBuffer; PFN_vkResetCommandPool vkResetCommandPool; PFN_vkResetDescriptorPool vkResetDescriptorPool; PFN_vkResetEvent vkResetEvent; PFN_vkResetFences vkResetFences; PFN_vkSetEvent vkSetEvent; PFN_vkUnmapMemory vkUnmapMemory; PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; PFN_vkWaitForFences vkWaitForFences; #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) PFN_vkBindBufferMemory2 vkBindBufferMemory2; PFN_vkBindImageMemory2 vkBindImageMemory2; PFN_vkCmdDispatchBase vkCmdDispatchBase; PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion; PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups; PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties; PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties; PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties; PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2; PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2; PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2; PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2; PFN_vkTrimCommandPool vkTrimCommandPool; PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; #endif /* defined(VK_VERSION_1_1) */ #if defined(VK_VERSION_1_2) PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; PFN_vkCreateRenderPass2 vkCreateRenderPass2; PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; PFN_vkResetQueryPool vkResetQueryPool; PFN_vkSignalSemaphore vkSignalSemaphore; PFN_vkWaitSemaphores vkWaitSemaphores; #endif /* defined(VK_VERSION_1_2) */ #if defined(VK_AMD_buffer_marker) PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; #endif /* defined(VK_AMD_buffer_marker) */ #if defined(VK_AMD_display_native_hdr) PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; #endif /* defined(VK_AMD_display_native_hdr) */ #if defined(VK_AMD_draw_indirect_count) PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD; PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD; #endif /* defined(VK_AMD_draw_indirect_count) */ #if defined(VK_AMD_shader_info) PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD; #endif /* defined(VK_AMD_shader_info) */ #if defined(VK_ANDROID_external_memory_android_hardware_buffer) PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; #endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ #if defined(VK_EXT_acquire_xlib_display) PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT; PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT; #endif /* defined(VK_EXT_acquire_xlib_display) */ #if defined(VK_EXT_buffer_device_address) PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; #endif /* defined(VK_EXT_buffer_device_address) */ #if defined(VK_EXT_calibrated_timestamps) PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT; PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; #endif /* defined(VK_EXT_calibrated_timestamps) */ #if defined(VK_EXT_color_write_enable) PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; #endif /* defined(VK_EXT_color_write_enable) */ #if defined(VK_EXT_conditional_rendering) PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; #endif /* defined(VK_EXT_conditional_rendering) */ #if defined(VK_EXT_debug_marker) PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT; PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT; PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT; PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT; PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT; #endif /* defined(VK_EXT_debug_marker) */ #if defined(VK_EXT_debug_report) PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; #endif /* defined(VK_EXT_debug_report) */ #if defined(VK_EXT_debug_utils) PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT; PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT; PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT; PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT; PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT; PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT; PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT; PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT; PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT; PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT; PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT; #endif /* defined(VK_EXT_debug_utils) */ #if defined(VK_EXT_direct_mode_display) PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT; #endif /* defined(VK_EXT_direct_mode_display) */ #if defined(VK_EXT_directfb_surface) PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT; PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT; #endif /* defined(VK_EXT_directfb_surface) */ #if defined(VK_EXT_discard_rectangles) PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; #endif /* defined(VK_EXT_discard_rectangles) */ #if defined(VK_EXT_display_control) PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT; PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT; PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT; PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT; #endif /* defined(VK_EXT_display_control) */ #if defined(VK_EXT_display_surface_counter) PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT; #endif /* defined(VK_EXT_display_surface_counter) */ #if defined(VK_EXT_extended_dynamic_state) PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT; PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT; PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT; PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT; PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT; PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT; PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT; PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT; PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT; PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT; PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT; PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT; #endif /* defined(VK_EXT_extended_dynamic_state) */ #if defined(VK_EXT_external_memory_host) PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; #endif /* defined(VK_EXT_external_memory_host) */ #if defined(VK_EXT_full_screen_exclusive) PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT; PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT; PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT; #endif /* defined(VK_EXT_full_screen_exclusive) */ #if defined(VK_EXT_hdr_metadata) PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT; #endif /* defined(VK_EXT_hdr_metadata) */ #if defined(VK_EXT_headless_surface) PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT; #endif /* defined(VK_EXT_headless_surface) */ #if defined(VK_EXT_host_query_reset) PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; #endif /* defined(VK_EXT_host_query_reset) */ #if defined(VK_EXT_image_drm_format_modifier) PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; #endif /* defined(VK_EXT_image_drm_format_modifier) */ #if defined(VK_EXT_line_rasterization) PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; #endif /* defined(VK_EXT_line_rasterization) */ #if defined(VK_EXT_metal_surface) PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT; #endif /* defined(VK_EXT_metal_surface) */ #if defined(VK_EXT_private_data) PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT; PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT; PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT; PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT; #endif /* defined(VK_EXT_private_data) */ #if defined(VK_EXT_sample_locations) PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT; #endif /* defined(VK_EXT_sample_locations) */ #if defined(VK_EXT_tooling_info) PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT; #endif /* defined(VK_EXT_tooling_info) */ #if defined(VK_EXT_transform_feedback) PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; #endif /* defined(VK_EXT_transform_feedback) */ #if defined(VK_EXT_validation_cache) PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT; PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT; PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT; PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT; #endif /* defined(VK_EXT_validation_cache) */ #if defined(VK_EXT_vertex_input_dynamic_state) PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; #endif /* defined(VK_EXT_vertex_input_dynamic_state) */ #if defined(VK_FUCHSIA_external_memory) PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA; PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA; #endif /* defined(VK_FUCHSIA_external_memory) */ #if defined(VK_FUCHSIA_external_semaphore) PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA; PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA; #endif /* defined(VK_FUCHSIA_external_semaphore) */ #if defined(VK_FUCHSIA_imagepipe_surface) PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA; #endif /* defined(VK_FUCHSIA_imagepipe_surface) */ #if defined(VK_GGP_stream_descriptor_surface) PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP; #endif /* defined(VK_GGP_stream_descriptor_surface) */ #if defined(VK_GOOGLE_display_timing) PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; #endif /* defined(VK_GOOGLE_display_timing) */ #if defined(VK_INTEL_performance_query) PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; #endif /* defined(VK_INTEL_performance_query) */ #if defined(VK_KHR_acceleration_structure) PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR; PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR; PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR; PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR; PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR; PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR; PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR; PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR; PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR; PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR; PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR; PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR; PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR; PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR; #endif /* defined(VK_KHR_acceleration_structure) */ #if defined(VK_KHR_android_surface) PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; #endif /* defined(VK_KHR_android_surface) */ #if defined(VK_KHR_bind_memory2) PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR; PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR; #endif /* defined(VK_KHR_bind_memory2) */ #if defined(VK_KHR_buffer_device_address) PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR; PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; #endif /* defined(VK_KHR_buffer_device_address) */ #if defined(VK_KHR_copy_commands2) PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR; PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR; PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR; PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR; PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR; PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR; #endif /* defined(VK_KHR_copy_commands2) */ #if defined(VK_KHR_create_renderpass2) PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; #endif /* defined(VK_KHR_create_renderpass2) */ #if defined(VK_KHR_deferred_host_operations) PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR; PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR; PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR; PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR; PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR; #endif /* defined(VK_KHR_deferred_host_operations) */ #if defined(VK_KHR_descriptor_update_template) PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR; #endif /* defined(VK_KHR_descriptor_update_template) */ #if defined(VK_KHR_device_group) PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR; PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR; PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR; #endif /* defined(VK_KHR_device_group) */ #if defined(VK_KHR_device_group_creation) PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR; #endif /* defined(VK_KHR_device_group_creation) */ #if defined(VK_KHR_display) PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR; PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR; PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; #endif /* defined(VK_KHR_display) */ #if defined(VK_KHR_display_swapchain) PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; #endif /* defined(VK_KHR_display_swapchain) */ #if defined(VK_KHR_draw_indirect_count) PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR; PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR; #endif /* defined(VK_KHR_draw_indirect_count) */ #if defined(VK_KHR_external_fence_capabilities) PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR; #endif /* defined(VK_KHR_external_fence_capabilities) */ #if defined(VK_KHR_external_fence_fd) PFN_vkGetFenceFdKHR vkGetFenceFdKHR; PFN_vkImportFenceFdKHR vkImportFenceFdKHR; #endif /* defined(VK_KHR_external_fence_fd) */ #if defined(VK_KHR_external_fence_win32) PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR; PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; #endif /* defined(VK_KHR_external_fence_win32) */ #if defined(VK_KHR_external_memory_capabilities) PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR; #endif /* defined(VK_KHR_external_memory_capabilities) */ #if defined(VK_KHR_external_memory_fd) PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; #endif /* defined(VK_KHR_external_memory_fd) */ #if defined(VK_KHR_external_memory_win32) PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR; #endif /* defined(VK_KHR_external_memory_win32) */ #if defined(VK_KHR_external_semaphore_capabilities) PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; #endif /* defined(VK_KHR_external_semaphore_capabilities) */ #if defined(VK_KHR_external_semaphore_fd) PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; #endif /* defined(VK_KHR_external_semaphore_fd) */ #if defined(VK_KHR_external_semaphore_win32) PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR; PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; #endif /* defined(VK_KHR_external_semaphore_win32) */ #if defined(VK_KHR_fragment_shading_rate) PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR; #endif /* defined(VK_KHR_fragment_shading_rate) */ #if defined(VK_KHR_get_display_properties2) PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR; PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR; PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR; PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR; #endif /* defined(VK_KHR_get_display_properties2) */ #if defined(VK_KHR_get_memory_requirements2) PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; #endif /* defined(VK_KHR_get_memory_requirements2) */ #if defined(VK_KHR_get_physical_device_properties2) PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR; PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR; PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR; PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR; PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR; PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR; PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR; #endif /* defined(VK_KHR_get_physical_device_properties2) */ #if defined(VK_KHR_get_surface_capabilities2) PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR; PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR; #endif /* defined(VK_KHR_get_surface_capabilities2) */ #if defined(VK_KHR_maintenance1) PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; #endif /* defined(VK_KHR_maintenance1) */ #if defined(VK_KHR_maintenance3) PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR; #endif /* defined(VK_KHR_maintenance3) */ #if defined(VK_KHR_performance_query) PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR; PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR; #endif /* defined(VK_KHR_performance_query) */ #if defined(VK_KHR_pipeline_executable_properties) PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; #endif /* defined(VK_KHR_pipeline_executable_properties) */ #if defined(VK_KHR_push_descriptor) PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR; #endif /* defined(VK_KHR_push_descriptor) */ #if defined(VK_KHR_ray_tracing_pipeline) PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR; PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR; PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR; PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR; PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR; PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR; #endif /* defined(VK_KHR_ray_tracing_pipeline) */ #if defined(VK_KHR_sampler_ycbcr_conversion) PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR; PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR; #endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ #if defined(VK_KHR_shared_presentable_image) PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR; #endif /* defined(VK_KHR_shared_presentable_image) */ #if defined(VK_KHR_surface) PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; #endif /* defined(VK_KHR_surface) */ #if defined(VK_KHR_swapchain) PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; PFN_vkQueuePresentKHR vkQueuePresentKHR; #endif /* defined(VK_KHR_swapchain) */ #if defined(VK_KHR_synchronization2) PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR; PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR; PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR; PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR; PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR; PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR; #endif /* defined(VK_KHR_synchronization2) */ #if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD; #endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ #if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV; #endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_KHR_timeline_semaphore) PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR; PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR; #endif /* defined(VK_KHR_timeline_semaphore) */ #if defined(VK_KHR_video_decode_queue) PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR; #endif /* defined(VK_KHR_video_decode_queue) */ #if defined(VK_KHR_video_encode_queue) PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR; #endif /* defined(VK_KHR_video_encode_queue) */ #if defined(VK_KHR_video_queue) PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR; PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR; PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR; PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR; PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR; PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR; PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR; PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR; PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR; PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR; PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR; PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR; #endif /* defined(VK_KHR_video_queue) */ #if defined(VK_KHR_wayland_surface) PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; #endif /* defined(VK_KHR_wayland_surface) */ #if defined(VK_KHR_win32_surface) PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; #endif /* defined(VK_KHR_win32_surface) */ #if defined(VK_KHR_xcb_surface) PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; #endif /* defined(VK_KHR_xcb_surface) */ #if defined(VK_KHR_xlib_surface) PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; #endif /* defined(VK_KHR_xlib_surface) */ #if defined(VK_MVK_ios_surface) PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK; #endif /* defined(VK_MVK_ios_surface) */ #if defined(VK_MVK_macos_surface) PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK; #endif /* defined(VK_MVK_macos_surface) */ #if defined(VK_NN_vi_surface) PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN; #endif /* defined(VK_NN_vi_surface) */ #if defined(VK_NVX_image_view_handle) PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX; PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; #endif /* defined(VK_NVX_image_view_handle) */ #if defined(VK_NV_acquire_winrt_display) PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV; PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV; #endif /* defined(VK_NV_acquire_winrt_display) */ #if defined(VK_NV_clip_space_w_scaling) PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV; #endif /* defined(VK_NV_clip_space_w_scaling) */ #if defined(VK_NV_cooperative_matrix) PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; #endif /* defined(VK_NV_cooperative_matrix) */ #if defined(VK_NV_coverage_reduction_mode) PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; #endif /* defined(VK_NV_coverage_reduction_mode) */ #if defined(VK_NV_device_diagnostic_checkpoints) PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; #endif /* defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_NV_device_generated_commands) PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV; PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV; PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV; PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV; PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV; PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV; #endif /* defined(VK_NV_device_generated_commands) */ #if defined(VK_NV_external_memory_capabilities) PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV; #endif /* defined(VK_NV_external_memory_capabilities) */ #if defined(VK_NV_external_memory_win32) PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV; #endif /* defined(VK_NV_external_memory_win32) */ #if defined(VK_NV_fragment_shading_rate_enums) PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV; #endif /* defined(VK_NV_fragment_shading_rate_enums) */ #if defined(VK_NV_mesh_shader) PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV; PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV; PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV; #endif /* defined(VK_NV_mesh_shader) */ #if defined(VK_NV_ray_tracing) PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; PFN_vkCompileDeferredNV vkCompileDeferredNV; PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; #endif /* defined(VK_NV_ray_tracing) */ #if defined(VK_NV_scissor_exclusive) PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; #endif /* defined(VK_NV_scissor_exclusive) */ #if defined(VK_NV_shading_rate_image) PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; #endif /* defined(VK_NV_shading_rate_image) */ #if defined(VK_QNX_screen_surface) PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX; PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX; #endif /* defined(VK_QNX_screen_surface) */ #if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT; #endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR; #endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR; PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR; PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR; #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR; #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ /* VOLK_GENERATE_PROTOTYPES_C */ #ifdef __GNUC__ # pragma GCC visibility pop #endif #ifdef __cplusplus } #endif /* clang-format on */ ares-126/ares/n64/vulkan/parallel-rdp/volk/volk.h000066400000000000000000002314351415063341600216500ustar00rootroot00000000000000/** * volk * * Copyright (C) 2018-2019, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) * Report bugs and download new versions at https://github.com/zeux/volk * * This library is distributed under the MIT License. See notice at the end of this file. */ /* clang-format off */ #ifndef VOLK_H_ #define VOLK_H_ #if defined(VULKAN_H_) && !defined(VK_NO_PROTOTYPES) # error To use volk, you need to define VK_NO_PROTOTYPES before including vulkan.h #endif /* VOLK_GENERATE_VERSION_DEFINE */ #define VOLK_HEADER_VERSION 175 /* VOLK_GENERATE_VERSION_DEFINE */ #ifndef VK_NO_PROTOTYPES # define VK_NO_PROTOTYPES #endif #ifndef VULKAN_H_ # ifdef VOLK_VULKAN_H_PATH # include VOLK_VULKAN_H_PATH # elif defined(VK_USE_PLATFORM_WIN32_KHR) # include # include /* When VK_USE_PLATFORM_WIN32_KHR is defined, instead of including vulkan.h directly, we include individual parts of the SDK * This is necessary to avoid including which is very heavy - it takes 200ms to parse without WIN32_LEAN_AND_MEAN * and 100ms to parse with it. vulkan_win32.h only needs a few symbols that are easy to redefine ourselves. */ typedef unsigned long DWORD; typedef const wchar_t* LPCWSTR; typedef void* HANDLE; typedef struct HINSTANCE__* HINSTANCE; typedef struct HWND__* HWND; typedef struct HMONITOR__* HMONITOR; typedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES; # include # ifdef VK_ENABLE_BETA_EXTENSIONS # include # endif # else # include # endif #endif /* Disable VK_NVX_image_view_handle because SDK 140 introduced a change that can't be used with prior versions */ #if VK_HEADER_VERSION < 140 # undef VK_NVX_image_view_handle #endif #ifdef __cplusplus extern "C" { #endif struct VolkDeviceTable; /** * Initialize library by loading Vulkan loader; call this function before creating the Vulkan instance. * * Returns VK_SUCCESS on success and VK_ERROR_INITIALIZATION_FAILED otherwise. */ VkResult volkInitialize(void); /** * Initialize library by providing a custom handler to load global symbols. * * This function can be used instead of volkInitialize. * The handler function pointer will be asked to load global Vulkan symbols which require no instance * (such as vkCreateInstance, vkEnumerateInstance* and vkEnumerateInstanceVersion if available). */ void volkInitializeCustom(PFN_vkGetInstanceProcAddr handler); /** * Get Vulkan instance version supported by the Vulkan loader, or 0 if Vulkan isn't supported * * Returns 0 if volkInitialize wasn't called or failed. */ uint32_t volkGetInstanceVersion(void); /** * Load global function pointers using application-created VkInstance; call this function after creating the Vulkan instance. */ void volkLoadInstance(VkInstance instance); /** * Load global function pointers using application-created VkInstance; call this function after creating the Vulkan instance. * Skips loading device-based function pointers, requires usage of volkLoadDevice afterwards. */ void volkLoadInstanceOnly(VkInstance instance); /** * Load global function pointers using application-created VkDevice; call this function after creating the Vulkan device. * * Note: this is not suitable for applications that want to use multiple VkDevice objects concurrently. */ void volkLoadDevice(VkDevice device); /** * Return last VkInstance for which global function pointers have been loaded via volkLoadInstance(), * or VK_NULL_HANDLE if volkLoadInstance() has not been called. */ VkInstance volkGetLoadedInstance(void); /** * Return last VkDevice for which global function pointers have been loaded via volkLoadDevice(), * or VK_NULL_HANDLE if volkLoadDevice() has not been called. */ VkDevice volkGetLoadedDevice(void); /** * Load function pointers using application-created VkDevice into a table. * Application should use function pointers from that table instead of using global function pointers. */ void volkLoadDeviceTable(struct VolkDeviceTable* table, VkDevice device); /** * Device-specific function pointer table */ struct VolkDeviceTable { /* VOLK_GENERATE_DEVICE_TABLE */ #if defined(VK_VERSION_1_0) PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; PFN_vkAllocateMemory vkAllocateMemory; PFN_vkBeginCommandBuffer vkBeginCommandBuffer; PFN_vkBindBufferMemory vkBindBufferMemory; PFN_vkBindImageMemory vkBindImageMemory; PFN_vkCmdBeginQuery vkCmdBeginQuery; PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; PFN_vkCmdBindPipeline vkCmdBindPipeline; PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; PFN_vkCmdBlitImage vkCmdBlitImage; PFN_vkCmdClearAttachments vkCmdClearAttachments; PFN_vkCmdClearColorImage vkCmdClearColorImage; PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; PFN_vkCmdCopyBuffer vkCmdCopyBuffer; PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; PFN_vkCmdCopyImage vkCmdCopyImage; PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; PFN_vkCmdDispatch vkCmdDispatch; PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; PFN_vkCmdDraw vkCmdDraw; PFN_vkCmdDrawIndexed vkCmdDrawIndexed; PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; PFN_vkCmdDrawIndirect vkCmdDrawIndirect; PFN_vkCmdEndQuery vkCmdEndQuery; PFN_vkCmdEndRenderPass vkCmdEndRenderPass; PFN_vkCmdExecuteCommands vkCmdExecuteCommands; PFN_vkCmdFillBuffer vkCmdFillBuffer; PFN_vkCmdNextSubpass vkCmdNextSubpass; PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; PFN_vkCmdPushConstants vkCmdPushConstants; PFN_vkCmdResetEvent vkCmdResetEvent; PFN_vkCmdResetQueryPool vkCmdResetQueryPool; PFN_vkCmdResolveImage vkCmdResolveImage; PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; PFN_vkCmdSetDepthBias vkCmdSetDepthBias; PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; PFN_vkCmdSetEvent vkCmdSetEvent; PFN_vkCmdSetLineWidth vkCmdSetLineWidth; PFN_vkCmdSetScissor vkCmdSetScissor; PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; PFN_vkCmdSetStencilReference vkCmdSetStencilReference; PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; PFN_vkCmdSetViewport vkCmdSetViewport; PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; PFN_vkCmdWaitEvents vkCmdWaitEvents; PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; PFN_vkCreateBuffer vkCreateBuffer; PFN_vkCreateBufferView vkCreateBufferView; PFN_vkCreateCommandPool vkCreateCommandPool; PFN_vkCreateComputePipelines vkCreateComputePipelines; PFN_vkCreateDescriptorPool vkCreateDescriptorPool; PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; PFN_vkCreateEvent vkCreateEvent; PFN_vkCreateFence vkCreateFence; PFN_vkCreateFramebuffer vkCreateFramebuffer; PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; PFN_vkCreateImage vkCreateImage; PFN_vkCreateImageView vkCreateImageView; PFN_vkCreatePipelineCache vkCreatePipelineCache; PFN_vkCreatePipelineLayout vkCreatePipelineLayout; PFN_vkCreateQueryPool vkCreateQueryPool; PFN_vkCreateRenderPass vkCreateRenderPass; PFN_vkCreateSampler vkCreateSampler; PFN_vkCreateSemaphore vkCreateSemaphore; PFN_vkCreateShaderModule vkCreateShaderModule; PFN_vkDestroyBuffer vkDestroyBuffer; PFN_vkDestroyBufferView vkDestroyBufferView; PFN_vkDestroyCommandPool vkDestroyCommandPool; PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; PFN_vkDestroyDevice vkDestroyDevice; PFN_vkDestroyEvent vkDestroyEvent; PFN_vkDestroyFence vkDestroyFence; PFN_vkDestroyFramebuffer vkDestroyFramebuffer; PFN_vkDestroyImage vkDestroyImage; PFN_vkDestroyImageView vkDestroyImageView; PFN_vkDestroyPipeline vkDestroyPipeline; PFN_vkDestroyPipelineCache vkDestroyPipelineCache; PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; PFN_vkDestroyQueryPool vkDestroyQueryPool; PFN_vkDestroyRenderPass vkDestroyRenderPass; PFN_vkDestroySampler vkDestroySampler; PFN_vkDestroySemaphore vkDestroySemaphore; PFN_vkDestroyShaderModule vkDestroyShaderModule; PFN_vkDeviceWaitIdle vkDeviceWaitIdle; PFN_vkEndCommandBuffer vkEndCommandBuffer; PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; PFN_vkFreeCommandBuffers vkFreeCommandBuffers; PFN_vkFreeDescriptorSets vkFreeDescriptorSets; PFN_vkFreeMemory vkFreeMemory; PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; PFN_vkGetDeviceQueue vkGetDeviceQueue; PFN_vkGetEventStatus vkGetEventStatus; PFN_vkGetFenceStatus vkGetFenceStatus; PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; PFN_vkGetPipelineCacheData vkGetPipelineCacheData; PFN_vkGetQueryPoolResults vkGetQueryPoolResults; PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; PFN_vkMapMemory vkMapMemory; PFN_vkMergePipelineCaches vkMergePipelineCaches; PFN_vkQueueBindSparse vkQueueBindSparse; PFN_vkQueueSubmit vkQueueSubmit; PFN_vkQueueWaitIdle vkQueueWaitIdle; PFN_vkResetCommandBuffer vkResetCommandBuffer; PFN_vkResetCommandPool vkResetCommandPool; PFN_vkResetDescriptorPool vkResetDescriptorPool; PFN_vkResetEvent vkResetEvent; PFN_vkResetFences vkResetFences; PFN_vkSetEvent vkSetEvent; PFN_vkUnmapMemory vkUnmapMemory; PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; PFN_vkWaitForFences vkWaitForFences; #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) PFN_vkBindBufferMemory2 vkBindBufferMemory2; PFN_vkBindImageMemory2 vkBindImageMemory2; PFN_vkCmdDispatchBase vkCmdDispatchBase; PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; PFN_vkTrimCommandPool vkTrimCommandPool; PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; #endif /* defined(VK_VERSION_1_1) */ #if defined(VK_VERSION_1_2) PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; PFN_vkCreateRenderPass2 vkCreateRenderPass2; PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; PFN_vkResetQueryPool vkResetQueryPool; PFN_vkSignalSemaphore vkSignalSemaphore; PFN_vkWaitSemaphores vkWaitSemaphores; #endif /* defined(VK_VERSION_1_2) */ #if defined(VK_AMD_buffer_marker) PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; #endif /* defined(VK_AMD_buffer_marker) */ #if defined(VK_AMD_display_native_hdr) PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; #endif /* defined(VK_AMD_display_native_hdr) */ #if defined(VK_AMD_draw_indirect_count) PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD; PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD; #endif /* defined(VK_AMD_draw_indirect_count) */ #if defined(VK_AMD_shader_info) PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD; #endif /* defined(VK_AMD_shader_info) */ #if defined(VK_ANDROID_external_memory_android_hardware_buffer) PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; #endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ #if defined(VK_EXT_buffer_device_address) PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; #endif /* defined(VK_EXT_buffer_device_address) */ #if defined(VK_EXT_calibrated_timestamps) PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT; #endif /* defined(VK_EXT_calibrated_timestamps) */ #if defined(VK_EXT_color_write_enable) PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; #endif /* defined(VK_EXT_color_write_enable) */ #if defined(VK_EXT_conditional_rendering) PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; #endif /* defined(VK_EXT_conditional_rendering) */ #if defined(VK_EXT_debug_marker) PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT; PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT; PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT; PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT; PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT; #endif /* defined(VK_EXT_debug_marker) */ #if defined(VK_EXT_discard_rectangles) PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; #endif /* defined(VK_EXT_discard_rectangles) */ #if defined(VK_EXT_display_control) PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT; PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT; PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT; PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT; #endif /* defined(VK_EXT_display_control) */ #if defined(VK_EXT_extended_dynamic_state) PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT; PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT; PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT; PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT; PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT; PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT; PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT; PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT; PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT; PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT; PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT; PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT; #endif /* defined(VK_EXT_extended_dynamic_state) */ #if defined(VK_EXT_external_memory_host) PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; #endif /* defined(VK_EXT_external_memory_host) */ #if defined(VK_EXT_full_screen_exclusive) PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT; PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT; #endif /* defined(VK_EXT_full_screen_exclusive) */ #if defined(VK_EXT_hdr_metadata) PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT; #endif /* defined(VK_EXT_hdr_metadata) */ #if defined(VK_EXT_host_query_reset) PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; #endif /* defined(VK_EXT_host_query_reset) */ #if defined(VK_EXT_image_drm_format_modifier) PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; #endif /* defined(VK_EXT_image_drm_format_modifier) */ #if defined(VK_EXT_line_rasterization) PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; #endif /* defined(VK_EXT_line_rasterization) */ #if defined(VK_EXT_private_data) PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT; PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT; PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT; PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT; #endif /* defined(VK_EXT_private_data) */ #if defined(VK_EXT_sample_locations) PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; #endif /* defined(VK_EXT_sample_locations) */ #if defined(VK_EXT_transform_feedback) PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; #endif /* defined(VK_EXT_transform_feedback) */ #if defined(VK_EXT_validation_cache) PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT; PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT; PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT; PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT; #endif /* defined(VK_EXT_validation_cache) */ #if defined(VK_EXT_vertex_input_dynamic_state) PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; #endif /* defined(VK_EXT_vertex_input_dynamic_state) */ #if defined(VK_FUCHSIA_external_memory) PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA; PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA; #endif /* defined(VK_FUCHSIA_external_memory) */ #if defined(VK_FUCHSIA_external_semaphore) PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA; PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA; #endif /* defined(VK_FUCHSIA_external_semaphore) */ #if defined(VK_GOOGLE_display_timing) PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; #endif /* defined(VK_GOOGLE_display_timing) */ #if defined(VK_INTEL_performance_query) PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; #endif /* defined(VK_INTEL_performance_query) */ #if defined(VK_KHR_acceleration_structure) PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR; PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR; PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR; PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR; PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR; PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR; PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR; PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR; PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR; PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR; PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR; PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR; PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR; PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR; #endif /* defined(VK_KHR_acceleration_structure) */ #if defined(VK_KHR_bind_memory2) PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR; PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR; #endif /* defined(VK_KHR_bind_memory2) */ #if defined(VK_KHR_buffer_device_address) PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR; PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; #endif /* defined(VK_KHR_buffer_device_address) */ #if defined(VK_KHR_copy_commands2) PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR; PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR; PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR; PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR; PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR; PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR; #endif /* defined(VK_KHR_copy_commands2) */ #if defined(VK_KHR_create_renderpass2) PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; #endif /* defined(VK_KHR_create_renderpass2) */ #if defined(VK_KHR_deferred_host_operations) PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR; PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR; PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR; PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR; PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR; #endif /* defined(VK_KHR_deferred_host_operations) */ #if defined(VK_KHR_descriptor_update_template) PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR; #endif /* defined(VK_KHR_descriptor_update_template) */ #if defined(VK_KHR_device_group) PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR; PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR; PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR; #endif /* defined(VK_KHR_device_group) */ #if defined(VK_KHR_display_swapchain) PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; #endif /* defined(VK_KHR_display_swapchain) */ #if defined(VK_KHR_draw_indirect_count) PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR; PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR; #endif /* defined(VK_KHR_draw_indirect_count) */ #if defined(VK_KHR_external_fence_fd) PFN_vkGetFenceFdKHR vkGetFenceFdKHR; PFN_vkImportFenceFdKHR vkImportFenceFdKHR; #endif /* defined(VK_KHR_external_fence_fd) */ #if defined(VK_KHR_external_fence_win32) PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR; PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; #endif /* defined(VK_KHR_external_fence_win32) */ #if defined(VK_KHR_external_memory_fd) PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; #endif /* defined(VK_KHR_external_memory_fd) */ #if defined(VK_KHR_external_memory_win32) PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR; #endif /* defined(VK_KHR_external_memory_win32) */ #if defined(VK_KHR_external_semaphore_fd) PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; #endif /* defined(VK_KHR_external_semaphore_fd) */ #if defined(VK_KHR_external_semaphore_win32) PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR; PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; #endif /* defined(VK_KHR_external_semaphore_win32) */ #if defined(VK_KHR_fragment_shading_rate) PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; #endif /* defined(VK_KHR_fragment_shading_rate) */ #if defined(VK_KHR_get_memory_requirements2) PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; #endif /* defined(VK_KHR_get_memory_requirements2) */ #if defined(VK_KHR_maintenance1) PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; #endif /* defined(VK_KHR_maintenance1) */ #if defined(VK_KHR_maintenance3) PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR; #endif /* defined(VK_KHR_maintenance3) */ #if defined(VK_KHR_performance_query) PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR; PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR; #endif /* defined(VK_KHR_performance_query) */ #if defined(VK_KHR_pipeline_executable_properties) PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; #endif /* defined(VK_KHR_pipeline_executable_properties) */ #if defined(VK_KHR_push_descriptor) PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR; #endif /* defined(VK_KHR_push_descriptor) */ #if defined(VK_KHR_ray_tracing_pipeline) PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR; PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR; PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR; PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR; PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR; PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR; #endif /* defined(VK_KHR_ray_tracing_pipeline) */ #if defined(VK_KHR_sampler_ycbcr_conversion) PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR; PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR; #endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ #if defined(VK_KHR_shared_presentable_image) PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR; #endif /* defined(VK_KHR_shared_presentable_image) */ #if defined(VK_KHR_swapchain) PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; PFN_vkQueuePresentKHR vkQueuePresentKHR; #endif /* defined(VK_KHR_swapchain) */ #if defined(VK_KHR_synchronization2) PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR; PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR; PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR; PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR; PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR; PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR; #endif /* defined(VK_KHR_synchronization2) */ #if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD; #endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ #if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV; #endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_KHR_timeline_semaphore) PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR; PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR; #endif /* defined(VK_KHR_timeline_semaphore) */ #if defined(VK_KHR_video_decode_queue) PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR; #endif /* defined(VK_KHR_video_decode_queue) */ #if defined(VK_KHR_video_encode_queue) PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR; #endif /* defined(VK_KHR_video_encode_queue) */ #if defined(VK_KHR_video_queue) PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR; PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR; PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR; PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR; PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR; PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR; PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR; PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR; PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR; PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR; #endif /* defined(VK_KHR_video_queue) */ #if defined(VK_NVX_image_view_handle) PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX; PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; #endif /* defined(VK_NVX_image_view_handle) */ #if defined(VK_NV_clip_space_w_scaling) PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV; #endif /* defined(VK_NV_clip_space_w_scaling) */ #if defined(VK_NV_device_diagnostic_checkpoints) PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; #endif /* defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_NV_device_generated_commands) PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV; PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV; PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV; PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV; PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV; PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV; #endif /* defined(VK_NV_device_generated_commands) */ #if defined(VK_NV_external_memory_win32) PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV; #endif /* defined(VK_NV_external_memory_win32) */ #if defined(VK_NV_fragment_shading_rate_enums) PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV; #endif /* defined(VK_NV_fragment_shading_rate_enums) */ #if defined(VK_NV_mesh_shader) PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV; PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV; PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV; #endif /* defined(VK_NV_mesh_shader) */ #if defined(VK_NV_ray_tracing) PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; PFN_vkCompileDeferredNV vkCompileDeferredNV; PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; #endif /* defined(VK_NV_ray_tracing) */ #if defined(VK_NV_scissor_exclusive) PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; #endif /* defined(VK_NV_scissor_exclusive) */ #if defined(VK_NV_shading_rate_image) PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; #endif /* defined(VK_NV_shading_rate_image) */ #if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT; #endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR; #endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR; PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR; #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR; #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ /* VOLK_GENERATE_DEVICE_TABLE */ }; /* VOLK_GENERATE_PROTOTYPES_H */ #if defined(VK_VERSION_1_0) extern PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers; extern PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets; extern PFN_vkAllocateMemory vkAllocateMemory; extern PFN_vkBeginCommandBuffer vkBeginCommandBuffer; extern PFN_vkBindBufferMemory vkBindBufferMemory; extern PFN_vkBindImageMemory vkBindImageMemory; extern PFN_vkCmdBeginQuery vkCmdBeginQuery; extern PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass; extern PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets; extern PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer; extern PFN_vkCmdBindPipeline vkCmdBindPipeline; extern PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers; extern PFN_vkCmdBlitImage vkCmdBlitImage; extern PFN_vkCmdClearAttachments vkCmdClearAttachments; extern PFN_vkCmdClearColorImage vkCmdClearColorImage; extern PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage; extern PFN_vkCmdCopyBuffer vkCmdCopyBuffer; extern PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage; extern PFN_vkCmdCopyImage vkCmdCopyImage; extern PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer; extern PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults; extern PFN_vkCmdDispatch vkCmdDispatch; extern PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect; extern PFN_vkCmdDraw vkCmdDraw; extern PFN_vkCmdDrawIndexed vkCmdDrawIndexed; extern PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect; extern PFN_vkCmdDrawIndirect vkCmdDrawIndirect; extern PFN_vkCmdEndQuery vkCmdEndQuery; extern PFN_vkCmdEndRenderPass vkCmdEndRenderPass; extern PFN_vkCmdExecuteCommands vkCmdExecuteCommands; extern PFN_vkCmdFillBuffer vkCmdFillBuffer; extern PFN_vkCmdNextSubpass vkCmdNextSubpass; extern PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier; extern PFN_vkCmdPushConstants vkCmdPushConstants; extern PFN_vkCmdResetEvent vkCmdResetEvent; extern PFN_vkCmdResetQueryPool vkCmdResetQueryPool; extern PFN_vkCmdResolveImage vkCmdResolveImage; extern PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants; extern PFN_vkCmdSetDepthBias vkCmdSetDepthBias; extern PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds; extern PFN_vkCmdSetEvent vkCmdSetEvent; extern PFN_vkCmdSetLineWidth vkCmdSetLineWidth; extern PFN_vkCmdSetScissor vkCmdSetScissor; extern PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask; extern PFN_vkCmdSetStencilReference vkCmdSetStencilReference; extern PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask; extern PFN_vkCmdSetViewport vkCmdSetViewport; extern PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer; extern PFN_vkCmdWaitEvents vkCmdWaitEvents; extern PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp; extern PFN_vkCreateBuffer vkCreateBuffer; extern PFN_vkCreateBufferView vkCreateBufferView; extern PFN_vkCreateCommandPool vkCreateCommandPool; extern PFN_vkCreateComputePipelines vkCreateComputePipelines; extern PFN_vkCreateDescriptorPool vkCreateDescriptorPool; extern PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout; extern PFN_vkCreateDevice vkCreateDevice; extern PFN_vkCreateEvent vkCreateEvent; extern PFN_vkCreateFence vkCreateFence; extern PFN_vkCreateFramebuffer vkCreateFramebuffer; extern PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines; extern PFN_vkCreateImage vkCreateImage; extern PFN_vkCreateImageView vkCreateImageView; extern PFN_vkCreateInstance vkCreateInstance; extern PFN_vkCreatePipelineCache vkCreatePipelineCache; extern PFN_vkCreatePipelineLayout vkCreatePipelineLayout; extern PFN_vkCreateQueryPool vkCreateQueryPool; extern PFN_vkCreateRenderPass vkCreateRenderPass; extern PFN_vkCreateSampler vkCreateSampler; extern PFN_vkCreateSemaphore vkCreateSemaphore; extern PFN_vkCreateShaderModule vkCreateShaderModule; extern PFN_vkDestroyBuffer vkDestroyBuffer; extern PFN_vkDestroyBufferView vkDestroyBufferView; extern PFN_vkDestroyCommandPool vkDestroyCommandPool; extern PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool; extern PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout; extern PFN_vkDestroyDevice vkDestroyDevice; extern PFN_vkDestroyEvent vkDestroyEvent; extern PFN_vkDestroyFence vkDestroyFence; extern PFN_vkDestroyFramebuffer vkDestroyFramebuffer; extern PFN_vkDestroyImage vkDestroyImage; extern PFN_vkDestroyImageView vkDestroyImageView; extern PFN_vkDestroyInstance vkDestroyInstance; extern PFN_vkDestroyPipeline vkDestroyPipeline; extern PFN_vkDestroyPipelineCache vkDestroyPipelineCache; extern PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout; extern PFN_vkDestroyQueryPool vkDestroyQueryPool; extern PFN_vkDestroyRenderPass vkDestroyRenderPass; extern PFN_vkDestroySampler vkDestroySampler; extern PFN_vkDestroySemaphore vkDestroySemaphore; extern PFN_vkDestroyShaderModule vkDestroyShaderModule; extern PFN_vkDeviceWaitIdle vkDeviceWaitIdle; extern PFN_vkEndCommandBuffer vkEndCommandBuffer; extern PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties; extern PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties; extern PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties; extern PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties; extern PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices; extern PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges; extern PFN_vkFreeCommandBuffers vkFreeCommandBuffers; extern PFN_vkFreeDescriptorSets vkFreeDescriptorSets; extern PFN_vkFreeMemory vkFreeMemory; extern PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements; extern PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment; extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr; extern PFN_vkGetDeviceQueue vkGetDeviceQueue; extern PFN_vkGetEventStatus vkGetEventStatus; extern PFN_vkGetFenceStatus vkGetFenceStatus; extern PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements; extern PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements; extern PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout; extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr; extern PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures; extern PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties; extern PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties; extern PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties; extern PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties; extern PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties; extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties; extern PFN_vkGetPipelineCacheData vkGetPipelineCacheData; extern PFN_vkGetQueryPoolResults vkGetQueryPoolResults; extern PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity; extern PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges; extern PFN_vkMapMemory vkMapMemory; extern PFN_vkMergePipelineCaches vkMergePipelineCaches; extern PFN_vkQueueBindSparse vkQueueBindSparse; extern PFN_vkQueueSubmit vkQueueSubmit; extern PFN_vkQueueWaitIdle vkQueueWaitIdle; extern PFN_vkResetCommandBuffer vkResetCommandBuffer; extern PFN_vkResetCommandPool vkResetCommandPool; extern PFN_vkResetDescriptorPool vkResetDescriptorPool; extern PFN_vkResetEvent vkResetEvent; extern PFN_vkResetFences vkResetFences; extern PFN_vkSetEvent vkSetEvent; extern PFN_vkUnmapMemory vkUnmapMemory; extern PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets; extern PFN_vkWaitForFences vkWaitForFences; #endif /* defined(VK_VERSION_1_0) */ #if defined(VK_VERSION_1_1) extern PFN_vkBindBufferMemory2 vkBindBufferMemory2; extern PFN_vkBindImageMemory2 vkBindImageMemory2; extern PFN_vkCmdDispatchBase vkCmdDispatchBase; extern PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask; extern PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate; extern PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion; extern PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate; extern PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion; extern PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion; extern PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups; extern PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2; extern PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport; extern PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures; extern PFN_vkGetDeviceQueue2 vkGetDeviceQueue2; extern PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2; extern PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2; extern PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties; extern PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties; extern PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties; extern PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2; extern PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2; extern PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2; extern PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2; extern PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2; extern PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2; extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties2 vkGetPhysicalDeviceSparseImageFormatProperties2; extern PFN_vkTrimCommandPool vkTrimCommandPool; extern PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate; #endif /* defined(VK_VERSION_1_1) */ #if defined(VK_VERSION_1_2) extern PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2; extern PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount; extern PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount; extern PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2; extern PFN_vkCmdNextSubpass2 vkCmdNextSubpass2; extern PFN_vkCreateRenderPass2 vkCreateRenderPass2; extern PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress; extern PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress; extern PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress; extern PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue; extern PFN_vkResetQueryPool vkResetQueryPool; extern PFN_vkSignalSemaphore vkSignalSemaphore; extern PFN_vkWaitSemaphores vkWaitSemaphores; #endif /* defined(VK_VERSION_1_2) */ #if defined(VK_AMD_buffer_marker) extern PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD; #endif /* defined(VK_AMD_buffer_marker) */ #if defined(VK_AMD_display_native_hdr) extern PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD; #endif /* defined(VK_AMD_display_native_hdr) */ #if defined(VK_AMD_draw_indirect_count) extern PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD; extern PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD; #endif /* defined(VK_AMD_draw_indirect_count) */ #if defined(VK_AMD_shader_info) extern PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD; #endif /* defined(VK_AMD_shader_info) */ #if defined(VK_ANDROID_external_memory_android_hardware_buffer) extern PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID; extern PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID; #endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */ #if defined(VK_EXT_acquire_xlib_display) extern PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT; extern PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT; #endif /* defined(VK_EXT_acquire_xlib_display) */ #if defined(VK_EXT_buffer_device_address) extern PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT; #endif /* defined(VK_EXT_buffer_device_address) */ #if defined(VK_EXT_calibrated_timestamps) extern PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT; extern PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT; #endif /* defined(VK_EXT_calibrated_timestamps) */ #if defined(VK_EXT_color_write_enable) extern PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT; #endif /* defined(VK_EXT_color_write_enable) */ #if defined(VK_EXT_conditional_rendering) extern PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT; extern PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT; #endif /* defined(VK_EXT_conditional_rendering) */ #if defined(VK_EXT_debug_marker) extern PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT; extern PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT; extern PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT; extern PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT; extern PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT; #endif /* defined(VK_EXT_debug_marker) */ #if defined(VK_EXT_debug_report) extern PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT; extern PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT; extern PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT; #endif /* defined(VK_EXT_debug_report) */ #if defined(VK_EXT_debug_utils) extern PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT; extern PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT; extern PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT; extern PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT; extern PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT; extern PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT; extern PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT; extern PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT; extern PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT; extern PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT; extern PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT; #endif /* defined(VK_EXT_debug_utils) */ #if defined(VK_EXT_direct_mode_display) extern PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT; #endif /* defined(VK_EXT_direct_mode_display) */ #if defined(VK_EXT_directfb_surface) extern PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT; extern PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT vkGetPhysicalDeviceDirectFBPresentationSupportEXT; #endif /* defined(VK_EXT_directfb_surface) */ #if defined(VK_EXT_discard_rectangles) extern PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT; #endif /* defined(VK_EXT_discard_rectangles) */ #if defined(VK_EXT_display_control) extern PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT; extern PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT; extern PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT; extern PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT; #endif /* defined(VK_EXT_display_control) */ #if defined(VK_EXT_display_surface_counter) extern PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT; #endif /* defined(VK_EXT_display_surface_counter) */ #if defined(VK_EXT_extended_dynamic_state) extern PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT; extern PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT; extern PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT; extern PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT; extern PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT; extern PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT; extern PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT; extern PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT; extern PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT; extern PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT; extern PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT; extern PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT; #endif /* defined(VK_EXT_extended_dynamic_state) */ #if defined(VK_EXT_external_memory_host) extern PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT; #endif /* defined(VK_EXT_external_memory_host) */ #if defined(VK_EXT_full_screen_exclusive) extern PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT; extern PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT; extern PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT; #endif /* defined(VK_EXT_full_screen_exclusive) */ #if defined(VK_EXT_hdr_metadata) extern PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT; #endif /* defined(VK_EXT_hdr_metadata) */ #if defined(VK_EXT_headless_surface) extern PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT; #endif /* defined(VK_EXT_headless_surface) */ #if defined(VK_EXT_host_query_reset) extern PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT; #endif /* defined(VK_EXT_host_query_reset) */ #if defined(VK_EXT_image_drm_format_modifier) extern PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT; #endif /* defined(VK_EXT_image_drm_format_modifier) */ #if defined(VK_EXT_line_rasterization) extern PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT; #endif /* defined(VK_EXT_line_rasterization) */ #if defined(VK_EXT_metal_surface) extern PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT; #endif /* defined(VK_EXT_metal_surface) */ #if defined(VK_EXT_private_data) extern PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT; extern PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT; extern PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT; extern PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT; #endif /* defined(VK_EXT_private_data) */ #if defined(VK_EXT_sample_locations) extern PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT; extern PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT; #endif /* defined(VK_EXT_sample_locations) */ #if defined(VK_EXT_tooling_info) extern PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT; #endif /* defined(VK_EXT_tooling_info) */ #if defined(VK_EXT_transform_feedback) extern PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT; extern PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT; extern PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT; extern PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT; extern PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT; extern PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT; #endif /* defined(VK_EXT_transform_feedback) */ #if defined(VK_EXT_validation_cache) extern PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT; extern PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT; extern PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT; extern PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT; #endif /* defined(VK_EXT_validation_cache) */ #if defined(VK_EXT_vertex_input_dynamic_state) extern PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT; #endif /* defined(VK_EXT_vertex_input_dynamic_state) */ #if defined(VK_FUCHSIA_external_memory) extern PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA; extern PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA; #endif /* defined(VK_FUCHSIA_external_memory) */ #if defined(VK_FUCHSIA_external_semaphore) extern PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA; extern PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA; #endif /* defined(VK_FUCHSIA_external_semaphore) */ #if defined(VK_FUCHSIA_imagepipe_surface) extern PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA; #endif /* defined(VK_FUCHSIA_imagepipe_surface) */ #if defined(VK_GGP_stream_descriptor_surface) extern PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP; #endif /* defined(VK_GGP_stream_descriptor_surface) */ #if defined(VK_GOOGLE_display_timing) extern PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE; extern PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE; #endif /* defined(VK_GOOGLE_display_timing) */ #if defined(VK_INTEL_performance_query) extern PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL; extern PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL; extern PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL; extern PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL; extern PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL; extern PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL; extern PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL; extern PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL; extern PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL; #endif /* defined(VK_INTEL_performance_query) */ #if defined(VK_KHR_acceleration_structure) extern PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR; extern PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR; extern PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR; extern PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR; extern PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR; extern PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR; extern PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR; extern PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR; extern PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR; extern PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR; extern PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR; extern PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR; extern PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR; extern PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR; extern PFN_vkGetDeviceAccelerationStructureCompatibilityKHR vkGetDeviceAccelerationStructureCompatibilityKHR; extern PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR; #endif /* defined(VK_KHR_acceleration_structure) */ #if defined(VK_KHR_android_surface) extern PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR; #endif /* defined(VK_KHR_android_surface) */ #if defined(VK_KHR_bind_memory2) extern PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR; extern PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR; #endif /* defined(VK_KHR_bind_memory2) */ #if defined(VK_KHR_buffer_device_address) extern PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR; extern PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR; extern PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR; #endif /* defined(VK_KHR_buffer_device_address) */ #if defined(VK_KHR_copy_commands2) extern PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR; extern PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR; extern PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR; extern PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR; extern PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR; extern PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR; #endif /* defined(VK_KHR_copy_commands2) */ #if defined(VK_KHR_create_renderpass2) extern PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR; extern PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR; extern PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR; extern PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR; #endif /* defined(VK_KHR_create_renderpass2) */ #if defined(VK_KHR_deferred_host_operations) extern PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR; extern PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR; extern PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR; extern PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR; extern PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR; #endif /* defined(VK_KHR_deferred_host_operations) */ #if defined(VK_KHR_descriptor_update_template) extern PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR; extern PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR; extern PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR; #endif /* defined(VK_KHR_descriptor_update_template) */ #if defined(VK_KHR_device_group) extern PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR; extern PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR; extern PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR; #endif /* defined(VK_KHR_device_group) */ #if defined(VK_KHR_device_group_creation) extern PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR; #endif /* defined(VK_KHR_device_group_creation) */ #if defined(VK_KHR_display) extern PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR; extern PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR; extern PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR; extern PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR; extern PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR; extern PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR; extern PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR; #endif /* defined(VK_KHR_display) */ #if defined(VK_KHR_display_swapchain) extern PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR; #endif /* defined(VK_KHR_display_swapchain) */ #if defined(VK_KHR_draw_indirect_count) extern PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR; extern PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR; #endif /* defined(VK_KHR_draw_indirect_count) */ #if defined(VK_KHR_external_fence_capabilities) extern PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR; #endif /* defined(VK_KHR_external_fence_capabilities) */ #if defined(VK_KHR_external_fence_fd) extern PFN_vkGetFenceFdKHR vkGetFenceFdKHR; extern PFN_vkImportFenceFdKHR vkImportFenceFdKHR; #endif /* defined(VK_KHR_external_fence_fd) */ #if defined(VK_KHR_external_fence_win32) extern PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR; extern PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR; #endif /* defined(VK_KHR_external_fence_win32) */ #if defined(VK_KHR_external_memory_capabilities) extern PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR; #endif /* defined(VK_KHR_external_memory_capabilities) */ #if defined(VK_KHR_external_memory_fd) extern PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR; extern PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR; #endif /* defined(VK_KHR_external_memory_fd) */ #if defined(VK_KHR_external_memory_win32) extern PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR; extern PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR; #endif /* defined(VK_KHR_external_memory_win32) */ #if defined(VK_KHR_external_semaphore_capabilities) extern PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR vkGetPhysicalDeviceExternalSemaphorePropertiesKHR; #endif /* defined(VK_KHR_external_semaphore_capabilities) */ #if defined(VK_KHR_external_semaphore_fd) extern PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR; extern PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR; #endif /* defined(VK_KHR_external_semaphore_fd) */ #if defined(VK_KHR_external_semaphore_win32) extern PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR; extern PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR; #endif /* defined(VK_KHR_external_semaphore_win32) */ #if defined(VK_KHR_fragment_shading_rate) extern PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR; extern PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR; #endif /* defined(VK_KHR_fragment_shading_rate) */ #if defined(VK_KHR_get_display_properties2) extern PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR; extern PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR; extern PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR; extern PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR; #endif /* defined(VK_KHR_get_display_properties2) */ #if defined(VK_KHR_get_memory_requirements2) extern PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR; extern PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR; extern PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR; #endif /* defined(VK_KHR_get_memory_requirements2) */ #if defined(VK_KHR_get_physical_device_properties2) extern PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR; extern PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR; extern PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR; extern PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR; extern PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR; extern PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR; extern PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR vkGetPhysicalDeviceSparseImageFormatProperties2KHR; #endif /* defined(VK_KHR_get_physical_device_properties2) */ #if defined(VK_KHR_get_surface_capabilities2) extern PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR; extern PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR; #endif /* defined(VK_KHR_get_surface_capabilities2) */ #if defined(VK_KHR_maintenance1) extern PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR; #endif /* defined(VK_KHR_maintenance1) */ #if defined(VK_KHR_maintenance3) extern PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR; #endif /* defined(VK_KHR_maintenance3) */ #if defined(VK_KHR_performance_query) extern PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR; extern PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR; extern PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR; extern PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR; #endif /* defined(VK_KHR_performance_query) */ #if defined(VK_KHR_pipeline_executable_properties) extern PFN_vkGetPipelineExecutableInternalRepresentationsKHR vkGetPipelineExecutableInternalRepresentationsKHR; extern PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR; extern PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR; #endif /* defined(VK_KHR_pipeline_executable_properties) */ #if defined(VK_KHR_push_descriptor) extern PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR; #endif /* defined(VK_KHR_push_descriptor) */ #if defined(VK_KHR_ray_tracing_pipeline) extern PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR; extern PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR; extern PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR; extern PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR; extern PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR vkGetRayTracingCaptureReplayShaderGroupHandlesKHR; extern PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR; extern PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR; #endif /* defined(VK_KHR_ray_tracing_pipeline) */ #if defined(VK_KHR_sampler_ycbcr_conversion) extern PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR; extern PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR; #endif /* defined(VK_KHR_sampler_ycbcr_conversion) */ #if defined(VK_KHR_shared_presentable_image) extern PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR; #endif /* defined(VK_KHR_shared_presentable_image) */ #if defined(VK_KHR_surface) extern PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR; extern PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR; extern PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR; extern PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR; extern PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR; #endif /* defined(VK_KHR_surface) */ #if defined(VK_KHR_swapchain) extern PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR; extern PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR; extern PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR; extern PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR; extern PFN_vkQueuePresentKHR vkQueuePresentKHR; #endif /* defined(VK_KHR_swapchain) */ #if defined(VK_KHR_synchronization2) extern PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR; extern PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR; extern PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR; extern PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR; extern PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR; extern PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR; #endif /* defined(VK_KHR_synchronization2) */ #if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) extern PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD; #endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */ #if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) extern PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV; #endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_KHR_timeline_semaphore) extern PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR; extern PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR; extern PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR; #endif /* defined(VK_KHR_timeline_semaphore) */ #if defined(VK_KHR_video_decode_queue) extern PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR; #endif /* defined(VK_KHR_video_decode_queue) */ #if defined(VK_KHR_video_encode_queue) extern PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR; #endif /* defined(VK_KHR_video_encode_queue) */ #if defined(VK_KHR_video_queue) extern PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR; extern PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR; extern PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR; extern PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR; extern PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR; extern PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR; extern PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR; extern PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR; extern PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR; extern PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR; extern PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR; extern PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR; #endif /* defined(VK_KHR_video_queue) */ #if defined(VK_KHR_wayland_surface) extern PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR; extern PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR vkGetPhysicalDeviceWaylandPresentationSupportKHR; #endif /* defined(VK_KHR_wayland_surface) */ #if defined(VK_KHR_win32_surface) extern PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR; extern PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR; #endif /* defined(VK_KHR_win32_surface) */ #if defined(VK_KHR_xcb_surface) extern PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR; extern PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR; #endif /* defined(VK_KHR_xcb_surface) */ #if defined(VK_KHR_xlib_surface) extern PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR; extern PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR; #endif /* defined(VK_KHR_xlib_surface) */ #if defined(VK_MVK_ios_surface) extern PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK; #endif /* defined(VK_MVK_ios_surface) */ #if defined(VK_MVK_macos_surface) extern PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK; #endif /* defined(VK_MVK_macos_surface) */ #if defined(VK_NN_vi_surface) extern PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN; #endif /* defined(VK_NN_vi_surface) */ #if defined(VK_NVX_image_view_handle) extern PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX; extern PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX; #endif /* defined(VK_NVX_image_view_handle) */ #if defined(VK_NV_acquire_winrt_display) extern PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV; extern PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV; #endif /* defined(VK_NV_acquire_winrt_display) */ #if defined(VK_NV_clip_space_w_scaling) extern PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV; #endif /* defined(VK_NV_clip_space_w_scaling) */ #if defined(VK_NV_cooperative_matrix) extern PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV vkGetPhysicalDeviceCooperativeMatrixPropertiesNV; #endif /* defined(VK_NV_cooperative_matrix) */ #if defined(VK_NV_coverage_reduction_mode) extern PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV; #endif /* defined(VK_NV_coverage_reduction_mode) */ #if defined(VK_NV_device_diagnostic_checkpoints) extern PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV; extern PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV; #endif /* defined(VK_NV_device_diagnostic_checkpoints) */ #if defined(VK_NV_device_generated_commands) extern PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV; extern PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV; extern PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV; extern PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV; extern PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV; extern PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV; #endif /* defined(VK_NV_device_generated_commands) */ #if defined(VK_NV_external_memory_capabilities) extern PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV vkGetPhysicalDeviceExternalImageFormatPropertiesNV; #endif /* defined(VK_NV_external_memory_capabilities) */ #if defined(VK_NV_external_memory_win32) extern PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV; #endif /* defined(VK_NV_external_memory_win32) */ #if defined(VK_NV_fragment_shading_rate_enums) extern PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV; #endif /* defined(VK_NV_fragment_shading_rate_enums) */ #if defined(VK_NV_mesh_shader) extern PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV; extern PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV; extern PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV; #endif /* defined(VK_NV_mesh_shader) */ #if defined(VK_NV_ray_tracing) extern PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV; extern PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV; extern PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV; extern PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV; extern PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV; extern PFN_vkCompileDeferredNV vkCompileDeferredNV; extern PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV; extern PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV; extern PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV; extern PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV; extern PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV; extern PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV; #endif /* defined(VK_NV_ray_tracing) */ #if defined(VK_NV_scissor_exclusive) extern PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV; #endif /* defined(VK_NV_scissor_exclusive) */ #if defined(VK_NV_shading_rate_image) extern PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV; extern PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV; extern PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV; #endif /* defined(VK_NV_shading_rate_image) */ #if defined(VK_QNX_screen_surface) extern PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX; extern PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX vkGetPhysicalDeviceScreenPresentationSupportQNX; #endif /* defined(VK_QNX_screen_surface) */ #if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) extern PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT; #endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) extern PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR; #endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) || (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) extern PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR; extern PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR; extern PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR; #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ #if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) extern PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR; #endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */ /* VOLK_GENERATE_PROTOTYPES_H */ #ifdef __cplusplus } #endif #endif #ifdef VOLK_IMPLEMENTATION #undef VOLK_IMPLEMENTATION // Prevent tools like dependency checkers that don't evaluate // macros from detecting a cyclic dependency. #define VOLK_SOURCE "volk.c" #include VOLK_SOURCE #endif /** * Copyright (c) 2018-2019 Arseny Kapoulkine * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ /* clang-format on */ ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/000077500000000000000000000000001415063341600224525ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/000077500000000000000000000000001415063341600240755ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/000077500000000000000000000000001415063341600253755ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vk_icd.h000066400000000000000000000174531415063341600270170ustar00rootroot00000000000000// // File: vk_icd.h // /* * Copyright (c) 2015-2016 The Khronos Group Inc. * Copyright (c) 2015-2016 Valve Corporation * Copyright (c) 2015-2016 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ #ifndef VKICD_H #define VKICD_H #include "vulkan.h" #include // Loader-ICD version negotiation API. Versions add the following features: // Version 0 - Initial. Doesn't support vk_icdGetInstanceProcAddr // or vk_icdNegotiateLoaderICDInterfaceVersion. // Version 1 - Add support for vk_icdGetInstanceProcAddr. // Version 2 - Add Loader/ICD Interface version negotiation // via vk_icdNegotiateLoaderICDInterfaceVersion. // Version 3 - Add ICD creation/destruction of KHR_surface objects. // Version 4 - Add unknown physical device extension qyering via // vk_icdGetPhysicalDeviceProcAddr. // Version 5 - Tells ICDs that the loader is now paying attention to the // application version of Vulkan passed into the ApplicationInfo // structure during vkCreateInstance. This will tell the ICD // that if the loader is older, it should automatically fail a // call for any API version > 1.0. Otherwise, the loader will // manually determine if it can support the expected version. // Version 6 - Add support for vk_icdEnumerateAdapterPhysicalDevices. #define CURRENT_LOADER_ICD_INTERFACE_VERSION 6 #define MIN_SUPPORTED_LOADER_ICD_INTERFACE_VERSION 0 #define MIN_PHYS_DEV_EXTENSION_ICD_INTERFACE_VERSION 4 // Old typedefs that don't follow a proper naming convention but are preserved for compatibility typedef VkResult(VKAPI_PTR *PFN_vkNegotiateLoaderICDInterfaceVersion)(uint32_t *pVersion); // This is defined in vk_layer.h which will be found by the loader, but if an ICD is building against this // file directly, it won't be found. #ifndef PFN_GetPhysicalDeviceProcAddr typedef PFN_vkVoidFunction(VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char *pName); #endif // Typedefs for loader/ICD interface typedef VkResult (VKAPI_PTR *PFN_vk_icdNegotiateLoaderICDInterfaceVersion)(uint32_t* pVersion); typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetInstanceProcAddr)(VkInstance instance, const char* pName); typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vk_icdGetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); #if defined(VK_USE_PLATFORM_WIN32_KHR) typedef VkResult (VKAPI_PTR *PFN_vk_icdEnumerateAdapterPhysicalDevices)(VkInstance instance, LUID adapterLUID, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); #endif // Prototypes for loader/ICD interface #if !defined(VK_NO_PROTOTYPES) #ifdef __cplusplus extern "C" { #endif VKAPI_ATTR VkResult VKAPI_CALL vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t* pVersion); VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(VkInstance instance, const char* pName); VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vk_icdGetPhysicalDeviceProcAddr(VkInstance isntance, const char* pName); #if defined(VK_USE_PLATFORM_WIN32_KHR) VKAPI_ATTR VkResult VKAPI_CALL vk_icdEnumerateAdapterPhysicalDevices(VkInstance instance, LUID adapterLUID, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); #endif #ifdef __cplusplus } #endif #endif /* * The ICD must reserve space for a pointer for the loader's dispatch * table, at the start of . * The ICD must initialize this variable using the SET_LOADER_MAGIC_VALUE macro. */ #define ICD_LOADER_MAGIC 0x01CDC0DE typedef union { uintptr_t loaderMagic; void *loaderData; } VK_LOADER_DATA; static inline void set_loader_magic_value(void *pNewObject) { VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; loader_info->loaderMagic = ICD_LOADER_MAGIC; } static inline bool valid_loader_magic_value(void *pNewObject) { const VK_LOADER_DATA *loader_info = (VK_LOADER_DATA *)pNewObject; return (loader_info->loaderMagic & 0xffffffff) == ICD_LOADER_MAGIC; } /* * Windows and Linux ICDs will treat VkSurfaceKHR as a pointer to a struct that * contains the platform-specific connection and surface information. */ typedef enum { VK_ICD_WSI_PLATFORM_MIR, VK_ICD_WSI_PLATFORM_WAYLAND, VK_ICD_WSI_PLATFORM_WIN32, VK_ICD_WSI_PLATFORM_XCB, VK_ICD_WSI_PLATFORM_XLIB, VK_ICD_WSI_PLATFORM_ANDROID, VK_ICD_WSI_PLATFORM_MACOS, VK_ICD_WSI_PLATFORM_IOS, VK_ICD_WSI_PLATFORM_DISPLAY, VK_ICD_WSI_PLATFORM_HEADLESS, VK_ICD_WSI_PLATFORM_METAL, VK_ICD_WSI_PLATFORM_DIRECTFB, VK_ICD_WSI_PLATFORM_VI, VK_ICD_WSI_PLATFORM_GGP, VK_ICD_WSI_PLATFORM_SCREEN, } VkIcdWsiPlatform; typedef struct { VkIcdWsiPlatform platform; } VkIcdSurfaceBase; #ifdef VK_USE_PLATFORM_MIR_KHR typedef struct { VkIcdSurfaceBase base; MirConnection *connection; MirSurface *mirSurface; } VkIcdSurfaceMir; #endif // VK_USE_PLATFORM_MIR_KHR #ifdef VK_USE_PLATFORM_WAYLAND_KHR typedef struct { VkIcdSurfaceBase base; struct wl_display *display; struct wl_surface *surface; } VkIcdSurfaceWayland; #endif // VK_USE_PLATFORM_WAYLAND_KHR #ifdef VK_USE_PLATFORM_WIN32_KHR typedef struct { VkIcdSurfaceBase base; HINSTANCE hinstance; HWND hwnd; } VkIcdSurfaceWin32; #endif // VK_USE_PLATFORM_WIN32_KHR #ifdef VK_USE_PLATFORM_XCB_KHR typedef struct { VkIcdSurfaceBase base; xcb_connection_t *connection; xcb_window_t window; } VkIcdSurfaceXcb; #endif // VK_USE_PLATFORM_XCB_KHR #ifdef VK_USE_PLATFORM_XLIB_KHR typedef struct { VkIcdSurfaceBase base; Display *dpy; Window window; } VkIcdSurfaceXlib; #endif // VK_USE_PLATFORM_XLIB_KHR #ifdef VK_USE_PLATFORM_DIRECTFB_EXT typedef struct { VkIcdSurfaceBase base; IDirectFB *dfb; IDirectFBSurface *surface; } VkIcdSurfaceDirectFB; #endif // VK_USE_PLATFORM_DIRECTFB_EXT #ifdef VK_USE_PLATFORM_ANDROID_KHR typedef struct { VkIcdSurfaceBase base; struct ANativeWindow *window; } VkIcdSurfaceAndroid; #endif // VK_USE_PLATFORM_ANDROID_KHR #ifdef VK_USE_PLATFORM_MACOS_MVK typedef struct { VkIcdSurfaceBase base; const void *pView; } VkIcdSurfaceMacOS; #endif // VK_USE_PLATFORM_MACOS_MVK #ifdef VK_USE_PLATFORM_IOS_MVK typedef struct { VkIcdSurfaceBase base; const void *pView; } VkIcdSurfaceIOS; #endif // VK_USE_PLATFORM_IOS_MVK #ifdef VK_USE_PLATFORM_GGP typedef struct { VkIcdSurfaceBase base; GgpStreamDescriptor streamDescriptor; } VkIcdSurfaceGgp; #endif // VK_USE_PLATFORM_GGP typedef struct { VkIcdSurfaceBase base; VkDisplayModeKHR displayMode; uint32_t planeIndex; uint32_t planeStackIndex; VkSurfaceTransformFlagBitsKHR transform; float globalAlpha; VkDisplayPlaneAlphaFlagBitsKHR alphaMode; VkExtent2D imageExtent; } VkIcdSurfaceDisplay; typedef struct { VkIcdSurfaceBase base; } VkIcdSurfaceHeadless; #ifdef VK_USE_PLATFORM_METAL_EXT typedef struct { VkIcdSurfaceBase base; const CAMetalLayer *pLayer; } VkIcdSurfaceMetal; #endif // VK_USE_PLATFORM_METAL_EXT #ifdef VK_USE_PLATFORM_VI_NN typedef struct { VkIcdSurfaceBase base; void *window; } VkIcdSurfaceVi; #endif // VK_USE_PLATFORM_VI_NN #ifdef VK_USE_PLATFORM_SCREEN_QNX typedef struct { VkIcdSurfaceBase base; struct _screen_context *context; struct _screen_window *window; } VkIcdSurfaceScreen; #endif // VK_USE_PLATFORM_SCREEN_QNX #endif // VKICD_H ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vk_layer.h000066400000000000000000000173061415063341600273710ustar00rootroot00000000000000// // File: vk_layer.h // /* * Copyright (c) 2015-2017 The Khronos Group Inc. * Copyright (c) 2015-2017 Valve Corporation * Copyright (c) 2015-2017 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ /* Need to define dispatch table * Core struct can then have ptr to dispatch table at the top * Along with object ptrs for current and next OBJ */ #pragma once #include "vulkan.h" #if defined(__GNUC__) && __GNUC__ >= 4 #define VK_LAYER_EXPORT __attribute__((visibility("default"))) #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) #define VK_LAYER_EXPORT __attribute__((visibility("default"))) #else #define VK_LAYER_EXPORT #endif #define MAX_NUM_UNKNOWN_EXTS 250 // Loader-Layer version negotiation API. Versions add the following features: // Versions 0/1 - Initial. Doesn't support vk_layerGetPhysicalDeviceProcAddr // or vk_icdNegotiateLoaderLayerInterfaceVersion. // Version 2 - Add support for vk_layerGetPhysicalDeviceProcAddr and // vk_icdNegotiateLoaderLayerInterfaceVersion. #define CURRENT_LOADER_LAYER_INTERFACE_VERSION 2 #define MIN_SUPPORTED_LOADER_LAYER_INTERFACE_VERSION 1 #define VK_CURRENT_CHAIN_VERSION 1 // Typedef for use in the interfaces below typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_GetPhysicalDeviceProcAddr)(VkInstance instance, const char* pName); // Version negotiation values typedef enum VkNegotiateLayerStructType { LAYER_NEGOTIATE_UNINTIALIZED = 0, LAYER_NEGOTIATE_INTERFACE_STRUCT = 1, } VkNegotiateLayerStructType; // Version negotiation structures typedef struct VkNegotiateLayerInterface { VkNegotiateLayerStructType sType; void *pNext; uint32_t loaderLayerInterfaceVersion; PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr; PFN_vkGetDeviceProcAddr pfnGetDeviceProcAddr; PFN_GetPhysicalDeviceProcAddr pfnGetPhysicalDeviceProcAddr; } VkNegotiateLayerInterface; // Version negotiation functions typedef VkResult (VKAPI_PTR *PFN_vkNegotiateLoaderLayerInterfaceVersion)(VkNegotiateLayerInterface *pVersionStruct); // Function prototype for unknown physical device extension command typedef VkResult(VKAPI_PTR *PFN_PhysDevExt)(VkPhysicalDevice phys_device); // ------------------------------------------------------------------------------------------------ // CreateInstance and CreateDevice support structures /* Sub type of structure for instance and device loader ext of CreateInfo. * When sType == VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO * or sType == VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO * then VkLayerFunction indicates struct type pointed to by pNext */ typedef enum VkLayerFunction_ { VK_LAYER_LINK_INFO = 0, VK_LOADER_DATA_CALLBACK = 1, VK_LOADER_LAYER_CREATE_DEVICE_CALLBACK = 2, VK_LOADER_FEATURES = 3, } VkLayerFunction; typedef struct VkLayerInstanceLink_ { struct VkLayerInstanceLink_ *pNext; PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; PFN_GetPhysicalDeviceProcAddr pfnNextGetPhysicalDeviceProcAddr; } VkLayerInstanceLink; /* * When creating the device chain the loader needs to pass * down information about it's device structure needed at * the end of the chain. Passing the data via the * VkLayerDeviceInfo avoids issues with finding the * exact instance being used. */ typedef struct VkLayerDeviceInfo_ { void *device_info; PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; } VkLayerDeviceInfo; typedef VkResult (VKAPI_PTR *PFN_vkSetInstanceLoaderData)(VkInstance instance, void *object); typedef VkResult (VKAPI_PTR *PFN_vkSetDeviceLoaderData)(VkDevice device, void *object); typedef VkResult (VKAPI_PTR *PFN_vkLayerCreateDevice)(VkInstance instance, VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, VkDevice *pDevice, PFN_vkGetInstanceProcAddr layerGIPA, PFN_vkGetDeviceProcAddr *nextGDPA); typedef void (VKAPI_PTR *PFN_vkLayerDestroyDevice)(VkDevice physicalDevice, const VkAllocationCallbacks *pAllocator, PFN_vkDestroyDevice destroyFunction); typedef enum VkLoaderFeastureFlagBits { VK_LOADER_FEATURE_PHYSICAL_DEVICE_SORTING = 0x00000001, } VkLoaderFlagBits; typedef VkFlags VkLoaderFeatureFlags; typedef struct { VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO const void *pNext; VkLayerFunction function; union { VkLayerInstanceLink *pLayerInfo; PFN_vkSetInstanceLoaderData pfnSetInstanceLoaderData; struct { PFN_vkLayerCreateDevice pfnLayerCreateDevice; PFN_vkLayerDestroyDevice pfnLayerDestroyDevice; } layerDevice; VkLoaderFeatureFlags loaderFeatures; } u; } VkLayerInstanceCreateInfo; typedef struct VkLayerDeviceLink_ { struct VkLayerDeviceLink_ *pNext; PFN_vkGetInstanceProcAddr pfnNextGetInstanceProcAddr; PFN_vkGetDeviceProcAddr pfnNextGetDeviceProcAddr; } VkLayerDeviceLink; typedef struct { VkStructureType sType; // VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO const void *pNext; VkLayerFunction function; union { VkLayerDeviceLink *pLayerInfo; PFN_vkSetDeviceLoaderData pfnSetDeviceLoaderData; } u; } VkLayerDeviceCreateInfo; #ifdef __cplusplus extern "C" { #endif VKAPI_ATTR VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(VkNegotiateLayerInterface *pVersionStruct); typedef enum VkChainType { VK_CHAIN_TYPE_UNKNOWN = 0, VK_CHAIN_TYPE_ENUMERATE_INSTANCE_EXTENSION_PROPERTIES = 1, VK_CHAIN_TYPE_ENUMERATE_INSTANCE_LAYER_PROPERTIES = 2, VK_CHAIN_TYPE_ENUMERATE_INSTANCE_VERSION = 3, } VkChainType; typedef struct VkChainHeader { VkChainType type; uint32_t version; uint32_t size; } VkChainHeader; typedef struct VkEnumerateInstanceExtensionPropertiesChain { VkChainHeader header; VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceExtensionPropertiesChain *, const char *, uint32_t *, VkExtensionProperties *); const struct VkEnumerateInstanceExtensionPropertiesChain *pNextLink; #if defined(__cplusplus) inline VkResult CallDown(const char *pLayerName, uint32_t *pPropertyCount, VkExtensionProperties *pProperties) const { return pfnNextLayer(pNextLink, pLayerName, pPropertyCount, pProperties); } #endif } VkEnumerateInstanceExtensionPropertiesChain; typedef struct VkEnumerateInstanceLayerPropertiesChain { VkChainHeader header; VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceLayerPropertiesChain *, uint32_t *, VkLayerProperties *); const struct VkEnumerateInstanceLayerPropertiesChain *pNextLink; #if defined(__cplusplus) inline VkResult CallDown(uint32_t *pPropertyCount, VkLayerProperties *pProperties) const { return pfnNextLayer(pNextLink, pPropertyCount, pProperties); } #endif } VkEnumerateInstanceLayerPropertiesChain; typedef struct VkEnumerateInstanceVersionChain { VkChainHeader header; VkResult(VKAPI_PTR *pfnNextLayer)(const struct VkEnumerateInstanceVersionChain *, uint32_t *); const struct VkEnumerateInstanceVersionChain *pNextLink; #if defined(__cplusplus) inline VkResult CallDown(uint32_t *pApiVersion) const { return pfnNextLayer(pNextLink, pApiVersion); } #endif } VkEnumerateInstanceVersionChain; #ifdef __cplusplus } #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vk_platform.h000066400000000000000000000054131415063341600300750ustar00rootroot00000000000000// // File: vk_platform.h // /* ** Copyright 2014-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ #ifndef VK_PLATFORM_H_ #define VK_PLATFORM_H_ #ifdef __cplusplus extern "C" { #endif // __cplusplus /* *************************************************************************************************** * Platform-specific directives and type declarations *************************************************************************************************** */ /* Platform-specific calling convention macros. * * Platforms should define these so that Vulkan clients call Vulkan commands * with the same calling conventions that the Vulkan implementation expects. * * VKAPI_ATTR - Placed before the return type in function declarations. * Useful for C++11 and GCC/Clang-style function attribute syntax. * VKAPI_CALL - Placed after the return type in function declarations. * Useful for MSVC-style calling convention syntax. * VKAPI_PTR - Placed between the '(' and '*' in function pointer types. * * Function declaration: VKAPI_ATTR void VKAPI_CALL vkCommand(void); * Function pointer type: typedef void (VKAPI_PTR *PFN_vkCommand)(void); */ #if defined(_WIN32) // On Windows, Vulkan commands use the stdcall convention #define VKAPI_ATTR #define VKAPI_CALL __stdcall #define VKAPI_PTR VKAPI_CALL #elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7 #error "Vulkan isn't supported for the 'armeabi' NDK ABI" #elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE) // On Android 32-bit ARM targets, Vulkan functions use the "hardfloat" // calling convention, i.e. float parameters are passed in registers. This // is true even if the rest of the application passes floats on the stack, // as it does by default when compiling for the armeabi-v7a NDK ABI. #define VKAPI_ATTR __attribute__((pcs("aapcs-vfp"))) #define VKAPI_CALL #define VKAPI_PTR VKAPI_ATTR #else // On other platforms, use the default calling convention #define VKAPI_ATTR #define VKAPI_CALL #define VKAPI_PTR #endif #if !defined(VK_NO_STDDEF_H) #include #endif // !defined(VK_NO_STDDEF_H) #if !defined(VK_NO_STDINT_H) #if defined(_MSC_VER) && (_MSC_VER < 1600) typedef signed __int8 int8_t; typedef unsigned __int8 uint8_t; typedef signed __int16 int16_t; typedef unsigned __int16 uint16_t; typedef signed __int32 int32_t; typedef unsigned __int32 uint32_t; typedef signed __int64 int64_t; typedef unsigned __int64 uint64_t; #else #include #endif #endif // !defined(VK_NO_STDINT_H) #ifdef __cplusplus } // extern "C" #endif // __cplusplus #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vk_sdk_platform.h000066400000000000000000000035711415063341600307410ustar00rootroot00000000000000// // File: vk_sdk_platform.h // /* * Copyright (c) 2015-2016 The Khronos Group Inc. * Copyright (c) 2015-2016 Valve Corporation * Copyright (c) 2015-2016 LunarG, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef VK_SDK_PLATFORM_H #define VK_SDK_PLATFORM_H #if defined(_WIN32) #define NOMINMAX #ifndef __cplusplus #undef inline #define inline __inline #endif // __cplusplus #if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) // C99: // Microsoft didn't implement C99 in Visual Studio; but started adding it with // VS2013. However, VS2013 still didn't have snprintf(). The following is a // work-around (Note: The _CRT_SECURE_NO_WARNINGS macro must be set in the // "CMakeLists.txt" file). // NOTE: This is fixed in Visual Studio 2015. #define snprintf _snprintf #endif #define strdup _strdup #endif // _WIN32 // Check for noexcept support using clang, with fallback to Windows or GCC version numbers #ifndef NOEXCEPT #if defined(__clang__) #if __has_feature(cxx_noexcept) #define HAS_NOEXCEPT #endif #else #if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 #define HAS_NOEXCEPT #else #if defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026 && defined(_HAS_EXCEPTIONS) && _HAS_EXCEPTIONS #define HAS_NOEXCEPT #endif #endif #endif #ifdef HAS_NOEXCEPT #define NOEXCEPT noexcept #else #define NOEXCEPT #endif #endif #endif // VK_SDK_PLATFORM_H ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan.h000066400000000000000000000027061415063341600270530ustar00rootroot00000000000000#ifndef VULKAN_H_ #define VULKAN_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ #include "vk_platform.h" #include "vulkan_core.h" #ifdef VK_USE_PLATFORM_ANDROID_KHR #include "vulkan_android.h" #endif #ifdef VK_USE_PLATFORM_FUCHSIA #include #include "vulkan_fuchsia.h" #endif #ifdef VK_USE_PLATFORM_IOS_MVK #include "vulkan_ios.h" #endif #ifdef VK_USE_PLATFORM_MACOS_MVK #include "vulkan_macos.h" #endif #ifdef VK_USE_PLATFORM_METAL_EXT #include "vulkan_metal.h" #endif #ifdef VK_USE_PLATFORM_VI_NN #include "vulkan_vi.h" #endif #ifdef VK_USE_PLATFORM_WAYLAND_KHR #include #include "vulkan_wayland.h" #endif #ifdef VK_USE_PLATFORM_WIN32_KHR #include #include "vulkan_win32.h" #endif #ifdef VK_USE_PLATFORM_XCB_KHR #include #include "vulkan_xcb.h" #endif #ifdef VK_USE_PLATFORM_XLIB_KHR #include #include "vulkan_xlib.h" #endif #ifdef VK_USE_PLATFORM_DIRECTFB_EXT #include #include "vulkan_directfb.h" #endif #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT #include #include #include "vulkan_xlib_xrandr.h" #endif #ifdef VK_USE_PLATFORM_GGP #include #include "vulkan_ggp.h" #endif #ifdef VK_USE_PLATFORM_SCREEN_QNX #include #include "vulkan_screen.h" #endif #ifdef VK_ENABLE_BETA_EXTENSIONS #include "vulkan_beta.h" #endif #endif // VULKAN_H_ ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_android.h000066400000000000000000000101551415063341600305500ustar00rootroot00000000000000#ifndef VULKAN_ANDROID_H_ #define VULKAN_ANDROID_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_KHR_android_surface 1 struct ANativeWindow; #define VK_KHR_ANDROID_SURFACE_SPEC_VERSION 6 #define VK_KHR_ANDROID_SURFACE_EXTENSION_NAME "VK_KHR_android_surface" typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; typedef struct VkAndroidSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkAndroidSurfaceCreateFlagsKHR flags; struct ANativeWindow* window; } VkAndroidSurfaceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateAndroidSurfaceKHR)(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR( VkInstance instance, const VkAndroidSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #define VK_ANDROID_external_memory_android_hardware_buffer 1 struct AHardwareBuffer; #define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3 #define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer" typedef struct VkAndroidHardwareBufferUsageANDROID { VkStructureType sType; void* pNext; uint64_t androidHardwareBufferUsage; } VkAndroidHardwareBufferUsageANDROID; typedef struct VkAndroidHardwareBufferPropertiesANDROID { VkStructureType sType; void* pNext; VkDeviceSize allocationSize; uint32_t memoryTypeBits; } VkAndroidHardwareBufferPropertiesANDROID; typedef struct VkAndroidHardwareBufferFormatPropertiesANDROID { VkStructureType sType; void* pNext; VkFormat format; uint64_t externalFormat; VkFormatFeatureFlags formatFeatures; VkComponentMapping samplerYcbcrConversionComponents; VkSamplerYcbcrModelConversion suggestedYcbcrModel; VkSamplerYcbcrRange suggestedYcbcrRange; VkChromaLocation suggestedXChromaOffset; VkChromaLocation suggestedYChromaOffset; } VkAndroidHardwareBufferFormatPropertiesANDROID; typedef struct VkImportAndroidHardwareBufferInfoANDROID { VkStructureType sType; const void* pNext; struct AHardwareBuffer* buffer; } VkImportAndroidHardwareBufferInfoANDROID; typedef struct VkMemoryGetAndroidHardwareBufferInfoANDROID { VkStructureType sType; const void* pNext; VkDeviceMemory memory; } VkMemoryGetAndroidHardwareBufferInfoANDROID; typedef struct VkExternalFormatANDROID { VkStructureType sType; void* pNext; uint64_t externalFormat; } VkExternalFormatANDROID; typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetAndroidHardwareBufferPropertiesANDROID( VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryAndroidHardwareBufferANDROID( VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_beta.h000066400000000000000000000777411415063341600300610ustar00rootroot00000000000000#ifndef VULKAN_BETA_H_ #define VULKAN_BETA_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_KHR_video_queue 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkVideoSessionParametersKHR) #define VK_KHR_VIDEO_QUEUE_SPEC_VERSION 1 #define VK_KHR_VIDEO_QUEUE_EXTENSION_NAME "VK_KHR_video_queue" typedef enum VkQueryResultStatusKHR { VK_QUERY_RESULT_STATUS_ERROR_KHR = -1, VK_QUERY_RESULT_STATUS_NOT_READY_KHR = 0, VK_QUERY_RESULT_STATUS_COMPLETE_KHR = 1, VK_QUERY_RESULT_STATUS_MAX_ENUM_KHR = 0x7FFFFFFF } VkQueryResultStatusKHR; typedef enum VkVideoCodecOperationFlagBitsKHR { VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR = 0, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT = 0x00000002, #endif VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoCodecOperationFlagBitsKHR; typedef VkFlags VkVideoCodecOperationFlagsKHR; typedef enum VkVideoChromaSubsamplingFlagBitsKHR { VK_VIDEO_CHROMA_SUBSAMPLING_INVALID_BIT_KHR = 0, VK_VIDEO_CHROMA_SUBSAMPLING_MONOCHROME_BIT_KHR = 0x00000001, VK_VIDEO_CHROMA_SUBSAMPLING_420_BIT_KHR = 0x00000002, VK_VIDEO_CHROMA_SUBSAMPLING_422_BIT_KHR = 0x00000004, VK_VIDEO_CHROMA_SUBSAMPLING_444_BIT_KHR = 0x00000008, VK_VIDEO_CHROMA_SUBSAMPLING_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoChromaSubsamplingFlagBitsKHR; typedef VkFlags VkVideoChromaSubsamplingFlagsKHR; typedef enum VkVideoComponentBitDepthFlagBitsKHR { VK_VIDEO_COMPONENT_BIT_DEPTH_INVALID_KHR = 0, VK_VIDEO_COMPONENT_BIT_DEPTH_8_BIT_KHR = 0x00000001, VK_VIDEO_COMPONENT_BIT_DEPTH_10_BIT_KHR = 0x00000004, VK_VIDEO_COMPONENT_BIT_DEPTH_12_BIT_KHR = 0x00000010, VK_VIDEO_COMPONENT_BIT_DEPTH_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoComponentBitDepthFlagBitsKHR; typedef VkFlags VkVideoComponentBitDepthFlagsKHR; typedef enum VkVideoCapabilitiesFlagBitsKHR { VK_VIDEO_CAPABILITIES_PROTECTED_CONTENT_BIT_KHR = 0x00000001, VK_VIDEO_CAPABILITIES_SEPARATE_REFERENCE_IMAGES_BIT_KHR = 0x00000002, VK_VIDEO_CAPABILITIES_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoCapabilitiesFlagBitsKHR; typedef VkFlags VkVideoCapabilitiesFlagsKHR; typedef enum VkVideoSessionCreateFlagBitsKHR { VK_VIDEO_SESSION_CREATE_DEFAULT_KHR = 0, VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001, VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoSessionCreateFlagBitsKHR; typedef VkFlags VkVideoSessionCreateFlagsKHR; typedef VkFlags VkVideoBeginCodingFlagsKHR; typedef VkFlags VkVideoEndCodingFlagsKHR; typedef enum VkVideoCodingControlFlagBitsKHR { VK_VIDEO_CODING_CONTROL_DEFAULT_KHR = 0, VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR = 0x00000001, VK_VIDEO_CODING_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoCodingControlFlagBitsKHR; typedef VkFlags VkVideoCodingControlFlagsKHR; typedef enum VkVideoCodingQualityPresetFlagBitsKHR { VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR = 0, VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001, VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002, VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004, VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoCodingQualityPresetFlagBitsKHR; typedef VkFlags VkVideoCodingQualityPresetFlagsKHR; typedef struct VkVideoQueueFamilyProperties2KHR { VkStructureType sType; void* pNext; VkVideoCodecOperationFlagsKHR videoCodecOperations; } VkVideoQueueFamilyProperties2KHR; typedef struct VkVideoProfileKHR { VkStructureType sType; void* pNext; VkVideoCodecOperationFlagBitsKHR videoCodecOperation; VkVideoChromaSubsamplingFlagsKHR chromaSubsampling; VkVideoComponentBitDepthFlagsKHR lumaBitDepth; VkVideoComponentBitDepthFlagsKHR chromaBitDepth; } VkVideoProfileKHR; typedef struct VkVideoProfilesKHR { VkStructureType sType; void* pNext; uint32_t profileCount; const VkVideoProfileKHR* pProfiles; } VkVideoProfilesKHR; typedef struct VkVideoCapabilitiesKHR { VkStructureType sType; void* pNext; VkVideoCapabilitiesFlagsKHR capabilityFlags; VkDeviceSize minBitstreamBufferOffsetAlignment; VkDeviceSize minBitstreamBufferSizeAlignment; VkExtent2D videoPictureExtentGranularity; VkExtent2D minExtent; VkExtent2D maxExtent; uint32_t maxReferencePicturesSlotsCount; uint32_t maxReferencePicturesActiveCount; } VkVideoCapabilitiesKHR; typedef struct VkPhysicalDeviceVideoFormatInfoKHR { VkStructureType sType; const void* pNext; VkImageUsageFlags imageUsage; const VkVideoProfilesKHR* pVideoProfiles; } VkPhysicalDeviceVideoFormatInfoKHR; typedef struct VkVideoFormatPropertiesKHR { VkStructureType sType; void* pNext; VkFormat format; } VkVideoFormatPropertiesKHR; typedef struct VkVideoPictureResourceKHR { VkStructureType sType; const void* pNext; VkOffset2D codedOffset; VkExtent2D codedExtent; uint32_t baseArrayLayer; VkImageView imageViewBinding; } VkVideoPictureResourceKHR; typedef struct VkVideoReferenceSlotKHR { VkStructureType sType; const void* pNext; int8_t slotIndex; const VkVideoPictureResourceKHR* pPictureResource; } VkVideoReferenceSlotKHR; typedef struct VkVideoGetMemoryPropertiesKHR { VkStructureType sType; const void* pNext; uint32_t memoryBindIndex; VkMemoryRequirements2* pMemoryRequirements; } VkVideoGetMemoryPropertiesKHR; typedef struct VkVideoBindMemoryKHR { VkStructureType sType; const void* pNext; uint32_t memoryBindIndex; VkDeviceMemory memory; VkDeviceSize memoryOffset; VkDeviceSize memorySize; } VkVideoBindMemoryKHR; typedef struct VkVideoSessionCreateInfoKHR { VkStructureType sType; const void* pNext; uint32_t queueFamilyIndex; VkVideoSessionCreateFlagsKHR flags; const VkVideoProfileKHR* pVideoProfile; VkFormat pictureFormat; VkExtent2D maxCodedExtent; VkFormat referencePicturesFormat; uint32_t maxReferencePicturesSlotsCount; uint32_t maxReferencePicturesActiveCount; } VkVideoSessionCreateInfoKHR; typedef struct VkVideoSessionParametersCreateInfoKHR { VkStructureType sType; const void* pNext; VkVideoSessionParametersKHR videoSessionParametersTemplate; VkVideoSessionKHR videoSession; } VkVideoSessionParametersCreateInfoKHR; typedef struct VkVideoSessionParametersUpdateInfoKHR { VkStructureType sType; const void* pNext; uint32_t updateSequenceCount; } VkVideoSessionParametersUpdateInfoKHR; typedef struct VkVideoBeginCodingInfoKHR { VkStructureType sType; const void* pNext; VkVideoBeginCodingFlagsKHR flags; VkVideoCodingQualityPresetFlagsKHR codecQualityPreset; VkVideoSessionKHR videoSession; VkVideoSessionParametersKHR videoSessionParameters; uint32_t referenceSlotCount; const VkVideoReferenceSlotKHR* pReferenceSlots; } VkVideoBeginCodingInfoKHR; typedef struct VkVideoEndCodingInfoKHR { VkStructureType sType; const void* pNext; VkVideoEndCodingFlagsKHR flags; } VkVideoEndCodingInfoKHR; typedef struct VkVideoCodingControlInfoKHR { VkStructureType sType; const void* pNext; VkVideoCodingControlFlagsKHR flags; } VkVideoCodingControlInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)(VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties); typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionKHR)(VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession); typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionKHR)(VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkGetVideoSessionMemoryRequirementsKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements); typedef VkResult (VKAPI_PTR *PFN_vkBindVideoSessionMemoryKHR)(VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories); typedef VkResult (VKAPI_PTR *PFN_vkCreateVideoSessionParametersKHR)(VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters); typedef VkResult (VKAPI_PTR *PFN_vkUpdateVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); typedef void (VKAPI_PTR *PFN_vkDestroyVideoSessionParametersKHR)(VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkCmdBeginVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo); typedef void (VKAPI_PTR *PFN_vkCmdEndVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo); typedef void (VKAPI_PTR *PFN_vkCmdControlVideoCodingKHR)(VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoCapabilitiesKHR( VkPhysicalDevice physicalDevice, const VkVideoProfileKHR* pVideoProfile, VkVideoCapabilitiesKHR* pCapabilities); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceVideoFormatPropertiesKHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceVideoFormatInfoKHR* pVideoFormatInfo, uint32_t* pVideoFormatPropertyCount, VkVideoFormatPropertiesKHR* pVideoFormatProperties); VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionKHR( VkDevice device, const VkVideoSessionCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionKHR* pVideoSession); VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionKHR( VkDevice device, VkVideoSessionKHR videoSession, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkGetVideoSessionMemoryRequirementsKHR( VkDevice device, VkVideoSessionKHR videoSession, uint32_t* pVideoSessionMemoryRequirementsCount, VkVideoGetMemoryPropertiesKHR* pVideoSessionMemoryRequirements); VKAPI_ATTR VkResult VKAPI_CALL vkBindVideoSessionMemoryKHR( VkDevice device, VkVideoSessionKHR videoSession, uint32_t videoSessionBindMemoryCount, const VkVideoBindMemoryKHR* pVideoSessionBindMemories); VKAPI_ATTR VkResult VKAPI_CALL vkCreateVideoSessionParametersKHR( VkDevice device, const VkVideoSessionParametersCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkVideoSessionParametersKHR* pVideoSessionParameters); VKAPI_ATTR VkResult VKAPI_CALL vkUpdateVideoSessionParametersKHR( VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkVideoSessionParametersUpdateInfoKHR* pUpdateInfo); VKAPI_ATTR void VKAPI_CALL vkDestroyVideoSessionParametersKHR( VkDevice device, VkVideoSessionParametersKHR videoSessionParameters, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkCmdBeginVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoBeginCodingInfoKHR* pBeginInfo); VKAPI_ATTR void VKAPI_CALL vkCmdEndVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoEndCodingInfoKHR* pEndCodingInfo); VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR( VkCommandBuffer commandBuffer, const VkVideoCodingControlInfoKHR* pCodingControlInfo); #endif #define VK_KHR_video_decode_queue 1 #define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 1 #define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue" typedef enum VkVideoDecodeFlagBitsKHR { VK_VIDEO_DECODE_DEFAULT_KHR = 0, VK_VIDEO_DECODE_RESERVED_0_BIT_KHR = 0x00000001, VK_VIDEO_DECODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoDecodeFlagBitsKHR; typedef VkFlags VkVideoDecodeFlagsKHR; typedef struct VkVideoDecodeInfoKHR { VkStructureType sType; const void* pNext; VkVideoDecodeFlagsKHR flags; VkOffset2D codedOffset; VkExtent2D codedExtent; VkBuffer srcBuffer; VkDeviceSize srcBufferOffset; VkDeviceSize srcBufferRange; VkVideoPictureResourceKHR dstPictureResource; const VkVideoReferenceSlotKHR* pSetupReferenceSlot; uint32_t referenceSlotCount; const VkVideoReferenceSlotKHR* pReferenceSlots; } VkVideoDecodeInfoKHR; typedef void (VKAPI_PTR *PFN_vkCmdDecodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdDecodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoDecodeInfoKHR* pFrameInfo); #endif #define VK_KHR_portability_subset 1 #define VK_KHR_PORTABILITY_SUBSET_SPEC_VERSION 1 #define VK_KHR_PORTABILITY_SUBSET_EXTENSION_NAME "VK_KHR_portability_subset" typedef struct VkPhysicalDevicePortabilitySubsetFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 constantAlphaColorBlendFactors; VkBool32 events; VkBool32 imageViewFormatReinterpretation; VkBool32 imageViewFormatSwizzle; VkBool32 imageView2DOn3DImage; VkBool32 multisampleArrayImage; VkBool32 mutableComparisonSamplers; VkBool32 pointPolygons; VkBool32 samplerMipLodBias; VkBool32 separateStencilMaskRef; VkBool32 shaderSampleRateInterpolationFunctions; VkBool32 tessellationIsolines; VkBool32 tessellationPointMode; VkBool32 triangleFans; VkBool32 vertexAttributeAccessBeyondStride; } VkPhysicalDevicePortabilitySubsetFeaturesKHR; typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR { VkStructureType sType; void* pNext; uint32_t minVertexInputBindingStrideAlignment; } VkPhysicalDevicePortabilitySubsetPropertiesKHR; #define VK_KHR_video_encode_queue 1 #define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 2 #define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue" typedef enum VkVideoEncodeFlagBitsKHR { VK_VIDEO_ENCODE_DEFAULT_KHR = 0, VK_VIDEO_ENCODE_RESERVED_0_BIT_KHR = 0x00000001, VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeFlagBitsKHR; typedef VkFlags VkVideoEncodeFlagsKHR; typedef enum VkVideoEncodeRateControlFlagBitsKHR { VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0, VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR = 0x00000001, VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeRateControlFlagBitsKHR; typedef VkFlags VkVideoEncodeRateControlFlagsKHR; typedef enum VkVideoEncodeRateControlModeFlagBitsKHR { VK_VIDEO_ENCODE_RATE_CONTROL_MODE_NONE_BIT_KHR = 0, VK_VIDEO_ENCODE_RATE_CONTROL_MODE_CBR_BIT_KHR = 1, VK_VIDEO_ENCODE_RATE_CONTROL_MODE_VBR_BIT_KHR = 2, VK_VIDEO_ENCODE_RATE_CONTROL_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeRateControlModeFlagBitsKHR; typedef VkFlags VkVideoEncodeRateControlModeFlagsKHR; typedef struct VkVideoEncodeInfoKHR { VkStructureType sType; const void* pNext; VkVideoEncodeFlagsKHR flags; uint32_t qualityLevel; VkExtent2D codedExtent; VkBuffer dstBitstreamBuffer; VkDeviceSize dstBitstreamBufferOffset; VkDeviceSize dstBitstreamBufferMaxRange; VkVideoPictureResourceKHR srcPictureResource; const VkVideoReferenceSlotKHR* pSetupReferenceSlot; uint32_t referenceSlotCount; const VkVideoReferenceSlotKHR* pReferenceSlots; } VkVideoEncodeInfoKHR; typedef struct VkVideoEncodeRateControlInfoKHR { VkStructureType sType; const void* pNext; VkVideoEncodeRateControlFlagsKHR flags; VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode; uint32_t averageBitrate; uint16_t peakToAverageBitrateRatio; uint16_t frameRateNumerator; uint16_t frameRateDenominator; uint32_t virtualBufferSizeInMs; } VkVideoEncodeRateControlInfoKHR; typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR( VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo); #endif #define VK_EXT_video_encode_h264 1 #include "vk_video/vulkan_video_codec_h264std.h" #include "vk_video/vulkan_video_codec_h264std_encode.h" #define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 1 #define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264" typedef enum VkVideoEncodeH264CapabilitiesFlagBitsEXT { VK_VIDEO_ENCODE_H264_CAPABILITY_CABAC_BIT_EXT = 0x00000001, VK_VIDEO_ENCODE_H264_CAPABILITY_CAVLC_BIT_EXT = 0x00000002, VK_VIDEO_ENCODE_H264_CAPABILITY_WEIGHTED_BI_PRED_IMPLICIT_BIT_EXT = 0x00000004, VK_VIDEO_ENCODE_H264_CAPABILITY_TRANSFORM_8X8_BIT_EXT = 0x00000008, VK_VIDEO_ENCODE_H264_CAPABILITY_CHROMA_QP_OFFSET_BIT_EXT = 0x00000010, VK_VIDEO_ENCODE_H264_CAPABILITY_SECOND_CHROMA_QP_OFFSET_BIT_EXT = 0x00000020, VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_DISABLED_BIT_EXT = 0x00000040, VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_ENABLED_BIT_EXT = 0x00000080, VK_VIDEO_ENCODE_H264_CAPABILITY_DEBLOCKING_FILTER_PARTIAL_BIT_EXT = 0x00000100, VK_VIDEO_ENCODE_H264_CAPABILITY_MULTIPLE_SLICE_PER_FRAME_BIT_EXT = 0x00000200, VK_VIDEO_ENCODE_H264_CAPABILITY_EVENLY_DISTRIBUTED_SLICE_SIZE_BIT_EXT = 0x00000400, VK_VIDEO_ENCODE_H264_CAPABILITIES_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkVideoEncodeH264CapabilitiesFlagBitsEXT; typedef VkFlags VkVideoEncodeH264CapabilitiesFlagsEXT; typedef enum VkVideoEncodeH264InputModeFlagBitsEXT { VK_VIDEO_ENCODE_H264_INPUT_MODE_FRAME_BIT_EXT = 0x00000001, VK_VIDEO_ENCODE_H264_INPUT_MODE_SLICE_BIT_EXT = 0x00000002, VK_VIDEO_ENCODE_H264_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004, VK_VIDEO_ENCODE_H264_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkVideoEncodeH264InputModeFlagBitsEXT; typedef VkFlags VkVideoEncodeH264InputModeFlagsEXT; typedef enum VkVideoEncodeH264OutputModeFlagBitsEXT { VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001, VK_VIDEO_ENCODE_H264_OUTPUT_MODE_SLICE_BIT_EXT = 0x00000002, VK_VIDEO_ENCODE_H264_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004, VK_VIDEO_ENCODE_H264_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkVideoEncodeH264OutputModeFlagBitsEXT; typedef VkFlags VkVideoEncodeH264OutputModeFlagsEXT; typedef enum VkVideoEncodeH264CreateFlagBitsEXT { VK_VIDEO_ENCODE_H264_CREATE_DEFAULT_EXT = 0, VK_VIDEO_ENCODE_H264_CREATE_RESERVED_0_BIT_EXT = 0x00000001, VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkVideoEncodeH264CreateFlagBitsEXT; typedef VkFlags VkVideoEncodeH264CreateFlagsEXT; typedef struct VkVideoEncodeH264CapabilitiesEXT { VkStructureType sType; const void* pNext; VkVideoEncodeH264CapabilitiesFlagsEXT flags; VkVideoEncodeH264InputModeFlagsEXT inputModeFlags; VkVideoEncodeH264OutputModeFlagsEXT outputModeFlags; VkExtent2D minPictureSizeInMbs; VkExtent2D maxPictureSizeInMbs; VkExtent2D inputImageDataAlignment; uint8_t maxNumL0ReferenceForP; uint8_t maxNumL0ReferenceForB; uint8_t maxNumL1Reference; uint8_t qualityLevelCount; VkExtensionProperties stdExtensionVersion; } VkVideoEncodeH264CapabilitiesEXT; typedef struct VkVideoEncodeH264SessionCreateInfoEXT { VkStructureType sType; const void* pNext; VkVideoEncodeH264CreateFlagsEXT flags; VkExtent2D maxPictureSizeInMbs; const VkExtensionProperties* pStdExtensionVersion; } VkVideoEncodeH264SessionCreateInfoEXT; typedef struct VkVideoEncodeH264SessionParametersAddInfoEXT { VkStructureType sType; const void* pNext; uint32_t spsStdCount; const StdVideoH264SequenceParameterSet* pSpsStd; uint32_t ppsStdCount; const StdVideoH264PictureParameterSet* pPpsStd; } VkVideoEncodeH264SessionParametersAddInfoEXT; typedef struct VkVideoEncodeH264SessionParametersCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t maxSpsStdCount; uint32_t maxPpsStdCount; const VkVideoEncodeH264SessionParametersAddInfoEXT* pParametersAddInfo; } VkVideoEncodeH264SessionParametersCreateInfoEXT; typedef struct VkVideoEncodeH264DpbSlotInfoEXT { VkStructureType sType; const void* pNext; int8_t slotIndex; const StdVideoEncodeH264PictureInfo* pStdPictureInfo; } VkVideoEncodeH264DpbSlotInfoEXT; typedef struct VkVideoEncodeH264NaluSliceEXT { VkStructureType sType; const void* pNext; const StdVideoEncodeH264SliceHeader* pSliceHeaderStd; uint32_t mbCount; uint8_t refFinalList0EntryCount; const VkVideoEncodeH264DpbSlotInfoEXT* pRefFinalList0Entries; uint8_t refFinalList1EntryCount; const VkVideoEncodeH264DpbSlotInfoEXT* pRefFinalList1Entries; uint32_t precedingNaluBytes; uint8_t minQp; uint8_t maxQp; } VkVideoEncodeH264NaluSliceEXT; typedef struct VkVideoEncodeH264VclFrameInfoEXT { VkStructureType sType; const void* pNext; uint8_t refDefaultFinalList0EntryCount; const VkVideoEncodeH264DpbSlotInfoEXT* pRefDefaultFinalList0Entries; uint8_t refDefaultFinalList1EntryCount; const VkVideoEncodeH264DpbSlotInfoEXT* pRefDefaultFinalList1Entries; uint32_t naluSliceEntryCount; const VkVideoEncodeH264NaluSliceEXT* pNaluSliceEntries; const VkVideoEncodeH264DpbSlotInfoEXT* pCurrentPictureInfo; } VkVideoEncodeH264VclFrameInfoEXT; typedef struct VkVideoEncodeH264EmitPictureParametersEXT { VkStructureType sType; const void* pNext; uint8_t spsId; VkBool32 emitSpsEnable; uint32_t ppsIdEntryCount; const uint8_t* ppsIdEntries; } VkVideoEncodeH264EmitPictureParametersEXT; typedef struct VkVideoEncodeH264ProfileEXT { VkStructureType sType; const void* pNext; StdVideoH264ProfileIdc stdProfileIdc; } VkVideoEncodeH264ProfileEXT; #define VK_EXT_video_decode_h264 1 #include "vk_video/vulkan_video_codec_h264std_decode.h" #define VK_EXT_VIDEO_DECODE_H264_SPEC_VERSION 1 #define VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME "VK_EXT_video_decode_h264" typedef enum VkVideoDecodeH264FieldLayoutFlagBitsEXT { VK_VIDEO_DECODE_H264_PROGRESSIVE_PICTURES_ONLY_EXT = 0, VK_VIDEO_DECODE_H264_FIELD_LAYOUT_LINE_INTERLACED_PLANE_BIT_EXT = 0x00000001, VK_VIDEO_DECODE_H264_FIELD_LAYOUT_SEPARATE_INTERLACED_PLANE_BIT_EXT = 0x00000002, VK_VIDEO_DECODE_H264_FIELD_LAYOUT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkVideoDecodeH264FieldLayoutFlagBitsEXT; typedef VkFlags VkVideoDecodeH264FieldLayoutFlagsEXT; typedef VkFlags VkVideoDecodeH264CreateFlagsEXT; typedef struct VkVideoDecodeH264ProfileEXT { VkStructureType sType; const void* pNext; StdVideoH264ProfileIdc stdProfileIdc; VkVideoDecodeH264FieldLayoutFlagsEXT fieldLayout; } VkVideoDecodeH264ProfileEXT; typedef struct VkVideoDecodeH264CapabilitiesEXT { VkStructureType sType; void* pNext; uint32_t maxLevel; VkOffset2D fieldOffsetGranularity; VkExtensionProperties stdExtensionVersion; } VkVideoDecodeH264CapabilitiesEXT; typedef struct VkVideoDecodeH264SessionCreateInfoEXT { VkStructureType sType; const void* pNext; VkVideoDecodeH264CreateFlagsEXT flags; const VkExtensionProperties* pStdExtensionVersion; } VkVideoDecodeH264SessionCreateInfoEXT; typedef struct VkVideoDecodeH264SessionParametersAddInfoEXT { VkStructureType sType; const void* pNext; uint32_t spsStdCount; const StdVideoH264SequenceParameterSet* pSpsStd; uint32_t ppsStdCount; const StdVideoH264PictureParameterSet* pPpsStd; } VkVideoDecodeH264SessionParametersAddInfoEXT; typedef struct VkVideoDecodeH264SessionParametersCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t maxSpsStdCount; uint32_t maxPpsStdCount; const VkVideoDecodeH264SessionParametersAddInfoEXT* pParametersAddInfo; } VkVideoDecodeH264SessionParametersCreateInfoEXT; typedef struct VkVideoDecodeH264PictureInfoEXT { VkStructureType sType; const void* pNext; const StdVideoDecodeH264PictureInfo* pStdPictureInfo; uint32_t slicesCount; const uint32_t* pSlicesDataOffsets; } VkVideoDecodeH264PictureInfoEXT; typedef struct VkVideoDecodeH264MvcEXT { VkStructureType sType; const void* pNext; const StdVideoDecodeH264Mvc* pStdMvc; } VkVideoDecodeH264MvcEXT; typedef struct VkVideoDecodeH264DpbSlotInfoEXT { VkStructureType sType; const void* pNext; const StdVideoDecodeH264ReferenceInfo* pStdReferenceInfo; } VkVideoDecodeH264DpbSlotInfoEXT; #define VK_EXT_video_decode_h265 1 #include "vk_video/vulkan_video_codec_h265std.h" #include "vk_video/vulkan_video_codec_h265std_decode.h" #define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 1 #define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265" typedef VkFlags VkVideoDecodeH265CreateFlagsEXT; typedef struct VkVideoDecodeH265ProfileEXT { VkStructureType sType; const void* pNext; StdVideoH265ProfileIdc stdProfileIdc; } VkVideoDecodeH265ProfileEXT; typedef struct VkVideoDecodeH265CapabilitiesEXT { VkStructureType sType; void* pNext; uint32_t maxLevel; VkExtensionProperties stdExtensionVersion; } VkVideoDecodeH265CapabilitiesEXT; typedef struct VkVideoDecodeH265SessionCreateInfoEXT { VkStructureType sType; const void* pNext; VkVideoDecodeH265CreateFlagsEXT flags; const VkExtensionProperties* pStdExtensionVersion; } VkVideoDecodeH265SessionCreateInfoEXT; typedef struct VkVideoDecodeH265SessionParametersAddInfoEXT { VkStructureType sType; const void* pNext; uint32_t spsStdCount; const StdVideoH265SequenceParameterSet* pSpsStd; uint32_t ppsStdCount; const StdVideoH265PictureParameterSet* pPpsStd; } VkVideoDecodeH265SessionParametersAddInfoEXT; typedef struct VkVideoDecodeH265SessionParametersCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t maxSpsStdCount; uint32_t maxPpsStdCount; const VkVideoDecodeH265SessionParametersAddInfoEXT* pParametersAddInfo; } VkVideoDecodeH265SessionParametersCreateInfoEXT; typedef struct VkVideoDecodeH265PictureInfoEXT { VkStructureType sType; const void* pNext; StdVideoDecodeH265PictureInfo* pStdPictureInfo; uint32_t slicesCount; const uint32_t* pSlicesDataOffsets; } VkVideoDecodeH265PictureInfoEXT; typedef struct VkVideoDecodeH265DpbSlotInfoEXT { VkStructureType sType; const void* pNext; const StdVideoDecodeH265ReferenceInfo* pStdReferenceInfo; } VkVideoDecodeH265DpbSlotInfoEXT; #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_core.h000066400000000000000000023027741415063341600300750ustar00rootroot00000000000000#ifndef VULKAN_CORE_H_ #define VULKAN_CORE_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_VERSION_1_0 1 #include "vk_platform.h" #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; #ifndef VK_USE_64_BIT_PTR_DEFINES #if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) #define VK_USE_64_BIT_PTR_DEFINES 1 #else #define VK_USE_64_BIT_PTR_DEFINES 0 #endif #endif #ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE #if (VK_USE_64_BIT_PTR_DEFINES==1) #if __cplusplus >= 201103L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201103L)) #define VK_NULL_HANDLE nullptr #else #define VK_NULL_HANDLE ((void*)0) #endif #else #define VK_NULL_HANDLE 0ULL #endif #endif #ifndef VK_NULL_HANDLE #define VK_NULL_HANDLE 0 #endif #ifndef VK_DEFINE_NON_DISPATCHABLE_HANDLE #if (VK_USE_64_BIT_PTR_DEFINES==1) #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; #else #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; #endif #endif // DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead. #define VK_MAKE_VERSION(major, minor, patch) \ ((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) // DEPRECATED: This define has been removed. Specific version defines (e.g. VK_API_VERSION_1_0), or the VK_MAKE_VERSION macro, should be used instead. //#define VK_API_VERSION VK_MAKE_VERSION(1, 0, 0) // Patch version should always be set to 0 #define VK_MAKE_API_VERSION(variant, major, minor, patch) \ ((((uint32_t)(variant)) << 29) | (((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch))) // Vulkan 1.0 version number #define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 // Version of this file #define VK_HEADER_VERSION 176 // Complete version of this file #define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 2, VK_HEADER_VERSION) // DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead. #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) // DEPRECATED: This define is deprecated. VK_API_VERSION_MINOR should be used instead. #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU) // DEPRECATED: This define is deprecated. VK_API_VERSION_PATCH should be used instead. #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) #define VK_API_VERSION_VARIANT(version) ((uint32_t)(version) >> 29) #define VK_API_VERSION_MAJOR(version) (((uint32_t)(version) >> 22) & 0x7FU) #define VK_API_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3FFU) #define VK_API_VERSION_PATCH(version) ((uint32_t)(version) & 0xFFFU) typedef uint32_t VkBool32; typedef uint64_t VkDeviceAddress; typedef uint64_t VkDeviceSize; typedef uint32_t VkFlags; typedef uint32_t VkSampleMask; VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) VK_DEFINE_HANDLE(VkInstance) VK_DEFINE_HANDLE(VkPhysicalDevice) VK_DEFINE_HANDLE(VkDevice) VK_DEFINE_HANDLE(VkQueue) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) VK_DEFINE_HANDLE(VkCommandBuffer) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) #define VK_ATTACHMENT_UNUSED (~0U) #define VK_FALSE 0U #define VK_LOD_CLAMP_NONE 1000.0F #define VK_QUEUE_FAMILY_IGNORED (~0U) #define VK_REMAINING_ARRAY_LAYERS (~0U) #define VK_REMAINING_MIP_LEVELS (~0U) #define VK_SUBPASS_EXTERNAL (~0U) #define VK_TRUE 1U #define VK_WHOLE_SIZE (~0ULL) #define VK_MAX_MEMORY_TYPES 32U #define VK_MAX_MEMORY_HEAPS 16U #define VK_MAX_PHYSICAL_DEVICE_NAME_SIZE 256U #define VK_UUID_SIZE 16U #define VK_MAX_EXTENSION_NAME_SIZE 256U #define VK_MAX_DESCRIPTION_SIZE 256U typedef enum VkResult { VK_SUCCESS = 0, VK_NOT_READY = 1, VK_TIMEOUT = 2, VK_EVENT_SET = 3, VK_EVENT_RESET = 4, VK_INCOMPLETE = 5, VK_ERROR_OUT_OF_HOST_MEMORY = -1, VK_ERROR_OUT_OF_DEVICE_MEMORY = -2, VK_ERROR_INITIALIZATION_FAILED = -3, VK_ERROR_DEVICE_LOST = -4, VK_ERROR_MEMORY_MAP_FAILED = -5, VK_ERROR_LAYER_NOT_PRESENT = -6, VK_ERROR_EXTENSION_NOT_PRESENT = -7, VK_ERROR_FEATURE_NOT_PRESENT = -8, VK_ERROR_INCOMPATIBLE_DRIVER = -9, VK_ERROR_TOO_MANY_OBJECTS = -10, VK_ERROR_FORMAT_NOT_SUPPORTED = -11, VK_ERROR_FRAGMENTED_POOL = -12, VK_ERROR_UNKNOWN = -13, VK_ERROR_OUT_OF_POOL_MEMORY = -1000069000, VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003, VK_ERROR_FRAGMENTATION = -1000161000, VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000, VK_ERROR_SURFACE_LOST_KHR = -1000000000, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, VK_SUBOPTIMAL_KHR = 1000001003, VK_ERROR_OUT_OF_DATE_KHR = -1000001004, VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = -1000003001, VK_ERROR_VALIDATION_FAILED_EXT = -1000011001, VK_ERROR_INVALID_SHADER_NV = -1000012000, VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000, VK_ERROR_NOT_PERMITTED_EXT = -1000174001, VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000, VK_THREAD_IDLE_KHR = 1000268000, VK_THREAD_DONE_KHR = 1000268001, VK_OPERATION_DEFERRED_KHR = 1000268002, VK_OPERATION_NOT_DEFERRED_KHR = 1000268003, VK_PIPELINE_COMPILE_REQUIRED_EXT = 1000297000, VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY, VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE, VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED_EXT, VK_RESULT_MAX_ENUM = 0x7FFFFFFF } VkResult; typedef enum VkStructureType { VK_STRUCTURE_TYPE_APPLICATION_INFO = 0, VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = 1, VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = 2, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = 3, VK_STRUCTURE_TYPE_SUBMIT_INFO = 4, VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = 5, VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = 6, VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = 7, VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = 8, VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = 9, VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = 10, VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = 11, VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = 12, VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = 13, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = 14, VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = 15, VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = 16, VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = 17, VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = 18, VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = 19, VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = 20, VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = 21, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = 22, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = 23, VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = 24, VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = 25, VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = 26, VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = 27, VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = 28, VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = 29, VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = 30, VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = 31, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = 32, VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = 33, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = 34, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = 35, VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = 36, VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = 37, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = 38, VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = 39, VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = 40, VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = 41, VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = 42, VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = 43, VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = 44, VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = 45, VK_STRUCTURE_TYPE_MEMORY_BARRIER = 46, VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = 47, VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = 48, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = 1000094000, VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = 1000157000, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = 1000157001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = 1000083000, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = 1000127000, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = 1000127001, VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = 1000060000, VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = 1000060003, VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = 1000060004, VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = 1000060005, VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = 1000060006, VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = 1000060013, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = 1000060014, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = 1000070000, VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = 1000070001, VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = 1000146000, VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = 1000146001, VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = 1000146002, VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = 1000146003, VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = 1000146004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = 1000059000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = 1000059001, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = 1000059002, VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = 1000059003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = 1000059004, VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = 1000059005, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = 1000059006, VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = 1000059007, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = 1000059008, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = 1000117000, VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = 1000117001, VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = 1000117002, VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = 1000117003, VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = 1000053000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = 1000053001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = 1000053002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES = 1000120000, VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = 1000145000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = 1000145001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = 1000145002, VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = 1000145003, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = 1000156000, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = 1000156001, VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = 1000156002, VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = 1000156003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = 1000156004, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = 1000156005, VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = 1000085000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = 1000071000, VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = 1000071001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = 1000071002, VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = 1000071003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = 1000071004, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = 1000072000, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = 1000072001, VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = 1000072002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = 1000112000, VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = 1000112001, VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = 1000113000, VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = 1000077000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = 1000076000, VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = 1000076001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = 1000168000, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = 1000168001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES = 1000063000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES = 49, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES = 50, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES = 51, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES = 52, VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO = 1000147000, VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2 = 1000109000, VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2 = 1000109001, VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2 = 1000109002, VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2 = 1000109003, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2 = 1000109004, VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO = 1000109005, VK_STRUCTURE_TYPE_SUBPASS_END_INFO = 1000109006, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES = 1000177000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES = 1000196000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES = 1000180000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES = 1000082000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES = 1000197000, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO = 1000161000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES = 1000161001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES = 1000161002, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO = 1000161003, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT = 1000161004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES = 1000199000, VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE = 1000199001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES = 1000221000, VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO = 1000246000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES = 1000130000, VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO = 1000130001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES = 1000211000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES = 1000108000, VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO = 1000108001, VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO = 1000108002, VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO = 1000108003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES = 1000253000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES = 1000175000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES = 1000241000, VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT = 1000241001, VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT = 1000241002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES = 1000261000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES = 1000207000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES = 1000207001, VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO = 1000207002, VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO = 1000207003, VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO = 1000207004, VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO = 1000207005, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES = 1000257000, VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO = 1000244001, VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002, VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003, VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004, VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000, VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001, VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007, VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = 1000060008, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = 1000060009, VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = 1000060010, VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = 1000060011, VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = 1000060012, VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = 1000002000, VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = 1000002001, VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = 1000003000, VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = 1000004000, VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = 1000005000, VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = 1000006000, VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = 1000008000, VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = 1000009000, VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = 1000011000, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = 1000018000, VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = 1000022000, VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = 1000022001, VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = 1000022002, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR = 1000023000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR = 1000023001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR = 1000023002, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR = 1000023003, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR = 1000023004, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR = 1000023005, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000023006, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR = 1000023007, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR = 1000023008, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR = 1000023009, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR = 1000023010, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR = 1000023011, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR = 1000023012, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR = 1000023013, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR = 1000023014, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001, #endif VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000, VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = 1000026001, VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = 1000026002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT = 1000028000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT = 1000028001, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT = 1000028002, VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000, VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_EXT = 1000038000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT = 1000038001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000038002, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000038003, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT = 1000038004, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_DPB_SLOT_INFO_EXT = 1000038005, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT = 1000038006, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT = 1000038007, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT = 1000038008, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT = 1000040000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT = 1000040001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT = 1000040002, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_MVC_EXT = 1000040003, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PROFILE_EXT = 1000040004, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000040005, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_PARAMETERS_ADD_INFO_EXT = 1000040006, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT = 1000040007, #endif VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000, VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000, VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = 1000056001, VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057000, VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = 1000057001, VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000, VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000, VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000, VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001, VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000, VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = 1000073003, VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = 1000074000, VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = 1000074001, VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = 1000074002, VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = 1000075000, VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078000, VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = 1000078001, VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = 1000078002, VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000, VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001, VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002, VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = 1000087000, VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = 1000090000, VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = 1000091000, VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = 1000091001, VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = 1000091002, VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = 1000091003, VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = 1000092000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = 1000097000, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = 1000098000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000, VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = 1000101000, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = 1000101001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT = 1000102000, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT = 1000102001, VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000, VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000, VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114000, VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = 1000114001, VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = 1000114002, VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = 1000115000, VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = 1000115001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR = 1000116000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR = 1000116001, VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR = 1000116002, VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR = 1000116003, VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR = 1000116004, VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_KHR = 1000116005, VK_STRUCTURE_TYPE_PERFORMANCE_COUNTER_DESCRIPTION_KHR = 1000116006, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000, VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001, VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002, VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR = 1000121000, VK_STRUCTURE_TYPE_DISPLAY_PLANE_PROPERTIES_2_KHR = 1000121001, VK_STRUCTURE_TYPE_DISPLAY_MODE_PROPERTIES_2_KHR = 1000121002, VK_STRUCTURE_TYPE_DISPLAY_PLANE_INFO_2_KHR = 1000121003, VK_STRUCTURE_TYPE_DISPLAY_PLANE_CAPABILITIES_2_KHR = 1000121004, VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000, VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000, VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000128000, VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = 1000128001, VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = 1000128002, VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000128003, VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000128004, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = 1000129000, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = 1000129001, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = 1000129002, VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003, VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004, VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = 1000138000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = 1000138001, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = 1000138002, VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = 1000138003, VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000, VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001, VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = 1000143003, VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = 1000143004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = 1000148000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = 1000148001, VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = 1000148002, VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = 1000149000, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR = 1000150007, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR = 1000150000, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR = 1000150002, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_AABBS_DATA_KHR = 1000150003, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR = 1000150004, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR = 1000150005, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR = 1000150006, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_VERSION_INFO_KHR = 1000150009, VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR = 1000150010, VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR = 1000150011, VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR = 1000150012, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR = 1000150013, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR = 1000150014, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR = 1000150017, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR = 1000150020, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR = 1000347000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR = 1000347001, VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR = 1000150015, VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR = 1000150016, VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_INTERFACE_CREATE_INFO_KHR = 1000150018, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR = 1000348013, VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = 1000152000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV = 1000154000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV = 1000154001, VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT = 1000158000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT = 1000158002, VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003, VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004, VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005, VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000, VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR = 1000163000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR = 1000163001, #endif VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV = 1000164000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV = 1000164001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV = 1000164002, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV = 1000164005, VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV = 1000165000, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000165001, VK_STRUCTURE_TYPE_GEOMETRY_NV = 1000165003, VK_STRUCTURE_TYPE_GEOMETRY_TRIANGLES_NV = 1000165004, VK_STRUCTURE_TYPE_GEOMETRY_AABB_NV = 1000165005, VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV = 1000165006, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV = 1000165007, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_INFO_NV = 1000165008, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV = 1000165009, VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV = 1000165011, VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_INFO_NV = 1000165012, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV = 1000166000, VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000, VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001, VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000, VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000, VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR = 1000181000, VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD = 1000183000, VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = 1000184000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = 1000185000, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_CAPABILITIES_EXT = 1000187000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_CREATE_INFO_EXT = 1000187001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000187002, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000187003, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_EXT = 1000187004, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT = 1000187005, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT = 1000187006, #endif VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002, VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000, VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000192000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV = 1000203000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV = 1000204000, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV = 1000205000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV = 1000205002, VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV = 1000206000, VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV = 1000206001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL = 1000209000, VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL = 1000210000, VK_STRUCTURE_TYPE_INITIALIZE_PERFORMANCE_API_INFO_INTEL = 1000210001, VK_STRUCTURE_TYPE_PERFORMANCE_MARKER_INFO_INTEL = 1000210002, VK_STRUCTURE_TYPE_PERFORMANCE_STREAM_MARKER_INFO_INTEL = 1000210003, VK_STRUCTURE_TYPE_PERFORMANCE_OVERRIDE_INFO_INTEL = 1000210004, VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL = 1000210005, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT = 1000212000, VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000, VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001, VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = 1000215000, VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001, VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000, VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002, VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000, VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR = 1000226003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR = 1000226004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT = 1000238000, VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT = 1000238001, VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR = 1000239000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000, VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = 1000245000, VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000, VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV = 1000249002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV = 1000250000, VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV = 1000250001, VK_STRUCTURE_TYPE_FRAMEBUFFER_MIXED_SAMPLES_COMBINATION_NV = 1000250002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT = 1000251000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT = 1000252000, VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT = 1000255000, VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT = 1000255002, VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT = 1000255001, VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT = 1000256000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = 1000259000, VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = 1000259001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = 1000259002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT = 1000260000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = 1000265000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT = 1000267000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR = 1000269000, VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR = 1000269001, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_PROPERTIES_KHR = 1000269002, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000, VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001, VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002, VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_TOKEN_NV = 1000277003, VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NV = 1000277004, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_INFO_NV = 1000277005, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_NV = 1000277006, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000, VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001, VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000, VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000, VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001, VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001, VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002, VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = 1000295000, VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = 1000295001, VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = 1000295002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = 1000297000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000, VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001, VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = 1000314000, VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = 1000314001, VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = 1000314002, VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = 1000314003, VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = 1000314004, VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = 1000314005, VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = 1000314006, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = 1000314007, VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008, VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = 1000325000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001, VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT = 1000330000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001, VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = 1000335000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000, VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = 1000337000, VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = 1000337001, VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = 1000337002, VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = 1000337003, VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = 1000337004, VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = 1000337005, VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = 1000337006, VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = 1000337007, VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = 1000337008, VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = 1000337009, VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = 1000337010, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000, VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000, VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT = 1000352000, VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001, VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002, VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000, VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001, VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002, VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000, VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT = 1000377000, VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000, VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT, VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2, VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2, VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2, VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2, VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO, VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO, VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO, VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO, VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO, VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO, VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO, VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO, VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO, VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES, VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO, VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO, VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO, VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2, VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2, VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2, VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO, VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO, VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES, VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES, VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO, VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO, VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS, VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES, VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO, VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2, VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2, VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2, VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2, VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2, VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO, VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO, VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES, VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES, VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES, VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES, VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO, VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO, VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT, VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES, VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO, VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkStructureType; typedef enum VkImageLayout { VK_IMAGE_LAYOUT_UNDEFINED = 0, VK_IMAGE_LAYOUT_GENERAL = 1, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = 2, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = 3, VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = 4, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = 5, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = 6, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7, VK_IMAGE_LAYOUT_PREINITIALIZED = 8, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = 1000117000, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = 1000117001, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL = 1000241000, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002, VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_LAYOUT_VIDEO_DECODE_DPB_KHR = 1000024002, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002, #endif VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = 1000164003, VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000, VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = 1000314000, VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = 1000314001, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF } VkImageLayout; typedef enum VkObjectType { VK_OBJECT_TYPE_UNKNOWN = 0, VK_OBJECT_TYPE_INSTANCE = 1, VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2, VK_OBJECT_TYPE_DEVICE = 3, VK_OBJECT_TYPE_QUEUE = 4, VK_OBJECT_TYPE_SEMAPHORE = 5, VK_OBJECT_TYPE_COMMAND_BUFFER = 6, VK_OBJECT_TYPE_FENCE = 7, VK_OBJECT_TYPE_DEVICE_MEMORY = 8, VK_OBJECT_TYPE_BUFFER = 9, VK_OBJECT_TYPE_IMAGE = 10, VK_OBJECT_TYPE_EVENT = 11, VK_OBJECT_TYPE_QUERY_POOL = 12, VK_OBJECT_TYPE_BUFFER_VIEW = 13, VK_OBJECT_TYPE_IMAGE_VIEW = 14, VK_OBJECT_TYPE_SHADER_MODULE = 15, VK_OBJECT_TYPE_PIPELINE_CACHE = 16, VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17, VK_OBJECT_TYPE_RENDER_PASS = 18, VK_OBJECT_TYPE_PIPELINE = 19, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20, VK_OBJECT_TYPE_SAMPLER = 21, VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22, VK_OBJECT_TYPE_DESCRIPTOR_SET = 23, VK_OBJECT_TYPE_FRAMEBUFFER = 24, VK_OBJECT_TYPE_COMMAND_POOL = 25, VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000, VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000, VK_OBJECT_TYPE_SURFACE_KHR = 1000000000, VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000, VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000, VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001, VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_OBJECT_TYPE_VIDEO_SESSION_KHR = 1000023000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_OBJECT_TYPE_VIDEO_SESSION_PARAMETERS_KHR = 1000023001, #endif VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000128000, VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = 1000160000, VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000, VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000, VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = 1000295000, VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION, VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF } VkObjectType; typedef enum VkVendorId { VK_VENDOR_ID_VIV = 0x10001, VK_VENDOR_ID_VSI = 0x10002, VK_VENDOR_ID_KAZAN = 0x10003, VK_VENDOR_ID_CODEPLAY = 0x10004, VK_VENDOR_ID_MESA = 0x10005, VK_VENDOR_ID_POCL = 0x10006, VK_VENDOR_ID_MAX_ENUM = 0x7FFFFFFF } VkVendorId; typedef enum VkPipelineCacheHeaderVersion { VK_PIPELINE_CACHE_HEADER_VERSION_ONE = 1, VK_PIPELINE_CACHE_HEADER_VERSION_MAX_ENUM = 0x7FFFFFFF } VkPipelineCacheHeaderVersion; typedef enum VkSystemAllocationScope { VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = 0, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = 1, VK_SYSTEM_ALLOCATION_SCOPE_CACHE = 2, VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = 3, VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = 4, VK_SYSTEM_ALLOCATION_SCOPE_MAX_ENUM = 0x7FFFFFFF } VkSystemAllocationScope; typedef enum VkInternalAllocationType { VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = 0, VK_INTERNAL_ALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF } VkInternalAllocationType; typedef enum VkFormat { VK_FORMAT_UNDEFINED = 0, VK_FORMAT_R4G4_UNORM_PACK8 = 1, VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2, VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3, VK_FORMAT_R5G6B5_UNORM_PACK16 = 4, VK_FORMAT_B5G6R5_UNORM_PACK16 = 5, VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6, VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7, VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8, VK_FORMAT_R8_UNORM = 9, VK_FORMAT_R8_SNORM = 10, VK_FORMAT_R8_USCALED = 11, VK_FORMAT_R8_SSCALED = 12, VK_FORMAT_R8_UINT = 13, VK_FORMAT_R8_SINT = 14, VK_FORMAT_R8_SRGB = 15, VK_FORMAT_R8G8_UNORM = 16, VK_FORMAT_R8G8_SNORM = 17, VK_FORMAT_R8G8_USCALED = 18, VK_FORMAT_R8G8_SSCALED = 19, VK_FORMAT_R8G8_UINT = 20, VK_FORMAT_R8G8_SINT = 21, VK_FORMAT_R8G8_SRGB = 22, VK_FORMAT_R8G8B8_UNORM = 23, VK_FORMAT_R8G8B8_SNORM = 24, VK_FORMAT_R8G8B8_USCALED = 25, VK_FORMAT_R8G8B8_SSCALED = 26, VK_FORMAT_R8G8B8_UINT = 27, VK_FORMAT_R8G8B8_SINT = 28, VK_FORMAT_R8G8B8_SRGB = 29, VK_FORMAT_B8G8R8_UNORM = 30, VK_FORMAT_B8G8R8_SNORM = 31, VK_FORMAT_B8G8R8_USCALED = 32, VK_FORMAT_B8G8R8_SSCALED = 33, VK_FORMAT_B8G8R8_UINT = 34, VK_FORMAT_B8G8R8_SINT = 35, VK_FORMAT_B8G8R8_SRGB = 36, VK_FORMAT_R8G8B8A8_UNORM = 37, VK_FORMAT_R8G8B8A8_SNORM = 38, VK_FORMAT_R8G8B8A8_USCALED = 39, VK_FORMAT_R8G8B8A8_SSCALED = 40, VK_FORMAT_R8G8B8A8_UINT = 41, VK_FORMAT_R8G8B8A8_SINT = 42, VK_FORMAT_R8G8B8A8_SRGB = 43, VK_FORMAT_B8G8R8A8_UNORM = 44, VK_FORMAT_B8G8R8A8_SNORM = 45, VK_FORMAT_B8G8R8A8_USCALED = 46, VK_FORMAT_B8G8R8A8_SSCALED = 47, VK_FORMAT_B8G8R8A8_UINT = 48, VK_FORMAT_B8G8R8A8_SINT = 49, VK_FORMAT_B8G8R8A8_SRGB = 50, VK_FORMAT_A8B8G8R8_UNORM_PACK32 = 51, VK_FORMAT_A8B8G8R8_SNORM_PACK32 = 52, VK_FORMAT_A8B8G8R8_USCALED_PACK32 = 53, VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = 54, VK_FORMAT_A8B8G8R8_UINT_PACK32 = 55, VK_FORMAT_A8B8G8R8_SINT_PACK32 = 56, VK_FORMAT_A8B8G8R8_SRGB_PACK32 = 57, VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58, VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59, VK_FORMAT_A2R10G10B10_USCALED_PACK32 = 60, VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = 61, VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62, VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63, VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64, VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65, VK_FORMAT_A2B10G10R10_USCALED_PACK32 = 66, VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = 67, VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68, VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69, VK_FORMAT_R16_UNORM = 70, VK_FORMAT_R16_SNORM = 71, VK_FORMAT_R16_USCALED = 72, VK_FORMAT_R16_SSCALED = 73, VK_FORMAT_R16_UINT = 74, VK_FORMAT_R16_SINT = 75, VK_FORMAT_R16_SFLOAT = 76, VK_FORMAT_R16G16_UNORM = 77, VK_FORMAT_R16G16_SNORM = 78, VK_FORMAT_R16G16_USCALED = 79, VK_FORMAT_R16G16_SSCALED = 80, VK_FORMAT_R16G16_UINT = 81, VK_FORMAT_R16G16_SINT = 82, VK_FORMAT_R16G16_SFLOAT = 83, VK_FORMAT_R16G16B16_UNORM = 84, VK_FORMAT_R16G16B16_SNORM = 85, VK_FORMAT_R16G16B16_USCALED = 86, VK_FORMAT_R16G16B16_SSCALED = 87, VK_FORMAT_R16G16B16_UINT = 88, VK_FORMAT_R16G16B16_SINT = 89, VK_FORMAT_R16G16B16_SFLOAT = 90, VK_FORMAT_R16G16B16A16_UNORM = 91, VK_FORMAT_R16G16B16A16_SNORM = 92, VK_FORMAT_R16G16B16A16_USCALED = 93, VK_FORMAT_R16G16B16A16_SSCALED = 94, VK_FORMAT_R16G16B16A16_UINT = 95, VK_FORMAT_R16G16B16A16_SINT = 96, VK_FORMAT_R16G16B16A16_SFLOAT = 97, VK_FORMAT_R32_UINT = 98, VK_FORMAT_R32_SINT = 99, VK_FORMAT_R32_SFLOAT = 100, VK_FORMAT_R32G32_UINT = 101, VK_FORMAT_R32G32_SINT = 102, VK_FORMAT_R32G32_SFLOAT = 103, VK_FORMAT_R32G32B32_UINT = 104, VK_FORMAT_R32G32B32_SINT = 105, VK_FORMAT_R32G32B32_SFLOAT = 106, VK_FORMAT_R32G32B32A32_UINT = 107, VK_FORMAT_R32G32B32A32_SINT = 108, VK_FORMAT_R32G32B32A32_SFLOAT = 109, VK_FORMAT_R64_UINT = 110, VK_FORMAT_R64_SINT = 111, VK_FORMAT_R64_SFLOAT = 112, VK_FORMAT_R64G64_UINT = 113, VK_FORMAT_R64G64_SINT = 114, VK_FORMAT_R64G64_SFLOAT = 115, VK_FORMAT_R64G64B64_UINT = 116, VK_FORMAT_R64G64B64_SINT = 117, VK_FORMAT_R64G64B64_SFLOAT = 118, VK_FORMAT_R64G64B64A64_UINT = 119, VK_FORMAT_R64G64B64A64_SINT = 120, VK_FORMAT_R64G64B64A64_SFLOAT = 121, VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123, VK_FORMAT_D16_UNORM = 124, VK_FORMAT_X8_D24_UNORM_PACK32 = 125, VK_FORMAT_D32_SFLOAT = 126, VK_FORMAT_S8_UINT = 127, VK_FORMAT_D16_UNORM_S8_UINT = 128, VK_FORMAT_D24_UNORM_S8_UINT = 129, VK_FORMAT_D32_SFLOAT_S8_UINT = 130, VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131, VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132, VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133, VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134, VK_FORMAT_BC2_UNORM_BLOCK = 135, VK_FORMAT_BC2_SRGB_BLOCK = 136, VK_FORMAT_BC3_UNORM_BLOCK = 137, VK_FORMAT_BC3_SRGB_BLOCK = 138, VK_FORMAT_BC4_UNORM_BLOCK = 139, VK_FORMAT_BC4_SNORM_BLOCK = 140, VK_FORMAT_BC5_UNORM_BLOCK = 141, VK_FORMAT_BC5_SNORM_BLOCK = 142, VK_FORMAT_BC6H_UFLOAT_BLOCK = 143, VK_FORMAT_BC6H_SFLOAT_BLOCK = 144, VK_FORMAT_BC7_UNORM_BLOCK = 145, VK_FORMAT_BC7_SRGB_BLOCK = 146, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148, VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150, VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152, VK_FORMAT_EAC_R11_UNORM_BLOCK = 153, VK_FORMAT_EAC_R11_SNORM_BLOCK = 154, VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155, VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156, VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157, VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158, VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159, VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160, VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161, VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162, VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163, VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164, VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165, VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166, VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167, VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168, VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169, VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170, VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171, VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172, VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173, VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174, VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175, VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176, VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177, VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178, VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179, VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180, VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181, VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182, VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183, VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184, VK_FORMAT_G8B8G8R8_422_UNORM = 1000156000, VK_FORMAT_B8G8R8G8_422_UNORM = 1000156001, VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = 1000156002, VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = 1000156003, VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = 1000156004, VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = 1000156005, VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = 1000156006, VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007, VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = 1000156012, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = 1000156013, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = 1000156014, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = 1000156015, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = 1000156016, VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017, VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = 1000156022, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = 1000156023, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = 1000156024, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = 1000156025, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = 1000156026, VK_FORMAT_G16B16G16R16_422_UNORM = 1000156027, VK_FORMAT_B16G16R16G16_422_UNORM = 1000156028, VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = 1000156029, VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = 1000156030, VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031, VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032, VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033, VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002, VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003, VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004, VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005, VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006, VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007, VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008, VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009, VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010, VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013, VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = 1000330000, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = 1000330001, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = 1000330002, VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = 1000330003, VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000, VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001, VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM, VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM, VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM, VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM, VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM, VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM, VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM, VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM, VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM, VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM, VK_FORMAT_MAX_ENUM = 0x7FFFFFFF } VkFormat; typedef enum VkImageTiling { VK_IMAGE_TILING_OPTIMAL = 0, VK_IMAGE_TILING_LINEAR = 1, VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT = 1000158000, VK_IMAGE_TILING_MAX_ENUM = 0x7FFFFFFF } VkImageTiling; typedef enum VkImageType { VK_IMAGE_TYPE_1D = 0, VK_IMAGE_TYPE_2D = 1, VK_IMAGE_TYPE_3D = 2, VK_IMAGE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkImageType; typedef enum VkPhysicalDeviceType { VK_PHYSICAL_DEVICE_TYPE_OTHER = 0, VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = 1, VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = 2, VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = 3, VK_PHYSICAL_DEVICE_TYPE_CPU = 4, VK_PHYSICAL_DEVICE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkPhysicalDeviceType; typedef enum VkQueryType { VK_QUERY_TYPE_OCCLUSION = 0, VK_QUERY_TYPE_PIPELINE_STATISTICS = 1, VK_QUERY_TYPE_TIMESTAMP = 2, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_QUERY_TYPE_RESULT_STATUS_ONLY_KHR = 1000023000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_QUERY_TYPE_VIDEO_ENCODE_BITSTREAM_BUFFER_RANGE_KHR = 1000299000, #endif VK_QUERY_TYPE_TRANSFORM_FEEDBACK_STREAM_EXT = 1000028004, VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR = 1000116000, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_KHR = 1000150000, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_SERIALIZATION_SIZE_KHR = 1000150001, VK_QUERY_TYPE_ACCELERATION_STRUCTURE_COMPACTED_SIZE_NV = 1000165000, VK_QUERY_TYPE_PERFORMANCE_QUERY_INTEL = 1000210000, VK_QUERY_TYPE_MAX_ENUM = 0x7FFFFFFF } VkQueryType; typedef enum VkSharingMode { VK_SHARING_MODE_EXCLUSIVE = 0, VK_SHARING_MODE_CONCURRENT = 1, VK_SHARING_MODE_MAX_ENUM = 0x7FFFFFFF } VkSharingMode; typedef enum VkComponentSwizzle { VK_COMPONENT_SWIZZLE_IDENTITY = 0, VK_COMPONENT_SWIZZLE_ZERO = 1, VK_COMPONENT_SWIZZLE_ONE = 2, VK_COMPONENT_SWIZZLE_R = 3, VK_COMPONENT_SWIZZLE_G = 4, VK_COMPONENT_SWIZZLE_B = 5, VK_COMPONENT_SWIZZLE_A = 6, VK_COMPONENT_SWIZZLE_MAX_ENUM = 0x7FFFFFFF } VkComponentSwizzle; typedef enum VkImageViewType { VK_IMAGE_VIEW_TYPE_1D = 0, VK_IMAGE_VIEW_TYPE_2D = 1, VK_IMAGE_VIEW_TYPE_3D = 2, VK_IMAGE_VIEW_TYPE_CUBE = 3, VK_IMAGE_VIEW_TYPE_1D_ARRAY = 4, VK_IMAGE_VIEW_TYPE_2D_ARRAY = 5, VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = 6, VK_IMAGE_VIEW_TYPE_MAX_ENUM = 0x7FFFFFFF } VkImageViewType; typedef enum VkBlendFactor { VK_BLEND_FACTOR_ZERO = 0, VK_BLEND_FACTOR_ONE = 1, VK_BLEND_FACTOR_SRC_COLOR = 2, VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = 3, VK_BLEND_FACTOR_DST_COLOR = 4, VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = 5, VK_BLEND_FACTOR_SRC_ALPHA = 6, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = 7, VK_BLEND_FACTOR_DST_ALPHA = 8, VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = 9, VK_BLEND_FACTOR_CONSTANT_COLOR = 10, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = 11, VK_BLEND_FACTOR_CONSTANT_ALPHA = 12, VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = 13, VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = 14, VK_BLEND_FACTOR_SRC1_COLOR = 15, VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = 16, VK_BLEND_FACTOR_SRC1_ALPHA = 17, VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = 18, VK_BLEND_FACTOR_MAX_ENUM = 0x7FFFFFFF } VkBlendFactor; typedef enum VkBlendOp { VK_BLEND_OP_ADD = 0, VK_BLEND_OP_SUBTRACT = 1, VK_BLEND_OP_REVERSE_SUBTRACT = 2, VK_BLEND_OP_MIN = 3, VK_BLEND_OP_MAX = 4, VK_BLEND_OP_ZERO_EXT = 1000148000, VK_BLEND_OP_SRC_EXT = 1000148001, VK_BLEND_OP_DST_EXT = 1000148002, VK_BLEND_OP_SRC_OVER_EXT = 1000148003, VK_BLEND_OP_DST_OVER_EXT = 1000148004, VK_BLEND_OP_SRC_IN_EXT = 1000148005, VK_BLEND_OP_DST_IN_EXT = 1000148006, VK_BLEND_OP_SRC_OUT_EXT = 1000148007, VK_BLEND_OP_DST_OUT_EXT = 1000148008, VK_BLEND_OP_SRC_ATOP_EXT = 1000148009, VK_BLEND_OP_DST_ATOP_EXT = 1000148010, VK_BLEND_OP_XOR_EXT = 1000148011, VK_BLEND_OP_MULTIPLY_EXT = 1000148012, VK_BLEND_OP_SCREEN_EXT = 1000148013, VK_BLEND_OP_OVERLAY_EXT = 1000148014, VK_BLEND_OP_DARKEN_EXT = 1000148015, VK_BLEND_OP_LIGHTEN_EXT = 1000148016, VK_BLEND_OP_COLORDODGE_EXT = 1000148017, VK_BLEND_OP_COLORBURN_EXT = 1000148018, VK_BLEND_OP_HARDLIGHT_EXT = 1000148019, VK_BLEND_OP_SOFTLIGHT_EXT = 1000148020, VK_BLEND_OP_DIFFERENCE_EXT = 1000148021, VK_BLEND_OP_EXCLUSION_EXT = 1000148022, VK_BLEND_OP_INVERT_EXT = 1000148023, VK_BLEND_OP_INVERT_RGB_EXT = 1000148024, VK_BLEND_OP_LINEARDODGE_EXT = 1000148025, VK_BLEND_OP_LINEARBURN_EXT = 1000148026, VK_BLEND_OP_VIVIDLIGHT_EXT = 1000148027, VK_BLEND_OP_LINEARLIGHT_EXT = 1000148028, VK_BLEND_OP_PINLIGHT_EXT = 1000148029, VK_BLEND_OP_HARDMIX_EXT = 1000148030, VK_BLEND_OP_HSL_HUE_EXT = 1000148031, VK_BLEND_OP_HSL_SATURATION_EXT = 1000148032, VK_BLEND_OP_HSL_COLOR_EXT = 1000148033, VK_BLEND_OP_HSL_LUMINOSITY_EXT = 1000148034, VK_BLEND_OP_PLUS_EXT = 1000148035, VK_BLEND_OP_PLUS_CLAMPED_EXT = 1000148036, VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = 1000148037, VK_BLEND_OP_PLUS_DARKER_EXT = 1000148038, VK_BLEND_OP_MINUS_EXT = 1000148039, VK_BLEND_OP_MINUS_CLAMPED_EXT = 1000148040, VK_BLEND_OP_CONTRAST_EXT = 1000148041, VK_BLEND_OP_INVERT_OVG_EXT = 1000148042, VK_BLEND_OP_RED_EXT = 1000148043, VK_BLEND_OP_GREEN_EXT = 1000148044, VK_BLEND_OP_BLUE_EXT = 1000148045, VK_BLEND_OP_MAX_ENUM = 0x7FFFFFFF } VkBlendOp; typedef enum VkCompareOp { VK_COMPARE_OP_NEVER = 0, VK_COMPARE_OP_LESS = 1, VK_COMPARE_OP_EQUAL = 2, VK_COMPARE_OP_LESS_OR_EQUAL = 3, VK_COMPARE_OP_GREATER = 4, VK_COMPARE_OP_NOT_EQUAL = 5, VK_COMPARE_OP_GREATER_OR_EQUAL = 6, VK_COMPARE_OP_ALWAYS = 7, VK_COMPARE_OP_MAX_ENUM = 0x7FFFFFFF } VkCompareOp; typedef enum VkDynamicState { VK_DYNAMIC_STATE_VIEWPORT = 0, VK_DYNAMIC_STATE_SCISSOR = 1, VK_DYNAMIC_STATE_LINE_WIDTH = 2, VK_DYNAMIC_STATE_DEPTH_BIAS = 3, VK_DYNAMIC_STATE_BLEND_CONSTANTS = 4, VK_DYNAMIC_STATE_DEPTH_BOUNDS = 5, VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6, VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7, VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8, VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000, VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR = 1000347000, VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV = 1000164004, VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV = 1000164006, VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001, VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000, VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000, VK_DYNAMIC_STATE_CULL_MODE_EXT = 1000267000, VK_DYNAMIC_STATE_FRONT_FACE_EXT = 1000267001, VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = 1000267002, VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = 1000267003, VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = 1000267004, VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = 1000267005, VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = 1000267006, VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = 1000267007, VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = 1000267008, VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009, VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010, VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011, VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000, VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000, VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = 1000377001, VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = 1000377002, VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003, VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = 1000377004, VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000, VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF } VkDynamicState; typedef enum VkFrontFace { VK_FRONT_FACE_COUNTER_CLOCKWISE = 0, VK_FRONT_FACE_CLOCKWISE = 1, VK_FRONT_FACE_MAX_ENUM = 0x7FFFFFFF } VkFrontFace; typedef enum VkVertexInputRate { VK_VERTEX_INPUT_RATE_VERTEX = 0, VK_VERTEX_INPUT_RATE_INSTANCE = 1, VK_VERTEX_INPUT_RATE_MAX_ENUM = 0x7FFFFFFF } VkVertexInputRate; typedef enum VkPrimitiveTopology { VK_PRIMITIVE_TOPOLOGY_POINT_LIST = 0, VK_PRIMITIVE_TOPOLOGY_LINE_LIST = 1, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = 2, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = 3, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = 4, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = 5, VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = 6, VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = 7, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = 8, VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = 9, VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = 10, VK_PRIMITIVE_TOPOLOGY_MAX_ENUM = 0x7FFFFFFF } VkPrimitiveTopology; typedef enum VkPolygonMode { VK_POLYGON_MODE_FILL = 0, VK_POLYGON_MODE_LINE = 1, VK_POLYGON_MODE_POINT = 2, VK_POLYGON_MODE_FILL_RECTANGLE_NV = 1000153000, VK_POLYGON_MODE_MAX_ENUM = 0x7FFFFFFF } VkPolygonMode; typedef enum VkStencilOp { VK_STENCIL_OP_KEEP = 0, VK_STENCIL_OP_ZERO = 1, VK_STENCIL_OP_REPLACE = 2, VK_STENCIL_OP_INCREMENT_AND_CLAMP = 3, VK_STENCIL_OP_DECREMENT_AND_CLAMP = 4, VK_STENCIL_OP_INVERT = 5, VK_STENCIL_OP_INCREMENT_AND_WRAP = 6, VK_STENCIL_OP_DECREMENT_AND_WRAP = 7, VK_STENCIL_OP_MAX_ENUM = 0x7FFFFFFF } VkStencilOp; typedef enum VkLogicOp { VK_LOGIC_OP_CLEAR = 0, VK_LOGIC_OP_AND = 1, VK_LOGIC_OP_AND_REVERSE = 2, VK_LOGIC_OP_COPY = 3, VK_LOGIC_OP_AND_INVERTED = 4, VK_LOGIC_OP_NO_OP = 5, VK_LOGIC_OP_XOR = 6, VK_LOGIC_OP_OR = 7, VK_LOGIC_OP_NOR = 8, VK_LOGIC_OP_EQUIVALENT = 9, VK_LOGIC_OP_INVERT = 10, VK_LOGIC_OP_OR_REVERSE = 11, VK_LOGIC_OP_COPY_INVERTED = 12, VK_LOGIC_OP_OR_INVERTED = 13, VK_LOGIC_OP_NAND = 14, VK_LOGIC_OP_SET = 15, VK_LOGIC_OP_MAX_ENUM = 0x7FFFFFFF } VkLogicOp; typedef enum VkBorderColor { VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = 0, VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = 1, VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = 2, VK_BORDER_COLOR_INT_OPAQUE_BLACK = 3, VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = 4, VK_BORDER_COLOR_INT_OPAQUE_WHITE = 5, VK_BORDER_COLOR_FLOAT_CUSTOM_EXT = 1000287003, VK_BORDER_COLOR_INT_CUSTOM_EXT = 1000287004, VK_BORDER_COLOR_MAX_ENUM = 0x7FFFFFFF } VkBorderColor; typedef enum VkFilter { VK_FILTER_NEAREST = 0, VK_FILTER_LINEAR = 1, VK_FILTER_CUBIC_IMG = 1000015000, VK_FILTER_CUBIC_EXT = VK_FILTER_CUBIC_IMG, VK_FILTER_MAX_ENUM = 0x7FFFFFFF } VkFilter; typedef enum VkSamplerAddressMode { VK_SAMPLER_ADDRESS_MODE_REPEAT = 0, VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = 1, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = 2, VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = 3, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = 4, VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE_KHR = VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE, VK_SAMPLER_ADDRESS_MODE_MAX_ENUM = 0x7FFFFFFF } VkSamplerAddressMode; typedef enum VkSamplerMipmapMode { VK_SAMPLER_MIPMAP_MODE_NEAREST = 0, VK_SAMPLER_MIPMAP_MODE_LINEAR = 1, VK_SAMPLER_MIPMAP_MODE_MAX_ENUM = 0x7FFFFFFF } VkSamplerMipmapMode; typedef enum VkDescriptorType { VK_DESCRIPTOR_TYPE_SAMPLER = 0, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = 1, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = 2, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = 3, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = 4, VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = 5, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = 6, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = 7, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10, VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = 1000138000, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000, VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = 1000351000, VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF } VkDescriptorType; typedef enum VkAttachmentLoadOp { VK_ATTACHMENT_LOAD_OP_LOAD = 0, VK_ATTACHMENT_LOAD_OP_CLEAR = 1, VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2, VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF } VkAttachmentLoadOp; typedef enum VkAttachmentStoreOp { VK_ATTACHMENT_STORE_OP_STORE = 0, VK_ATTACHMENT_STORE_OP_DONT_CARE = 1, VK_ATTACHMENT_STORE_OP_NONE_QCOM = 1000301000, VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF } VkAttachmentStoreOp; typedef enum VkPipelineBindPoint { VK_PIPELINE_BIND_POINT_GRAPHICS = 0, VK_PIPELINE_BIND_POINT_COMPUTE = 1, VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR = 1000165000, VK_PIPELINE_BIND_POINT_RAY_TRACING_NV = VK_PIPELINE_BIND_POINT_RAY_TRACING_KHR, VK_PIPELINE_BIND_POINT_MAX_ENUM = 0x7FFFFFFF } VkPipelineBindPoint; typedef enum VkCommandBufferLevel { VK_COMMAND_BUFFER_LEVEL_PRIMARY = 0, VK_COMMAND_BUFFER_LEVEL_SECONDARY = 1, VK_COMMAND_BUFFER_LEVEL_MAX_ENUM = 0x7FFFFFFF } VkCommandBufferLevel; typedef enum VkIndexType { VK_INDEX_TYPE_UINT16 = 0, VK_INDEX_TYPE_UINT32 = 1, VK_INDEX_TYPE_NONE_KHR = 1000165000, VK_INDEX_TYPE_UINT8_EXT = 1000265000, VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR, VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF } VkIndexType; typedef enum VkSubpassContents { VK_SUBPASS_CONTENTS_INLINE = 0, VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = 1, VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF } VkSubpassContents; typedef enum VkAccessFlagBits { VK_ACCESS_INDIRECT_COMMAND_READ_BIT = 0x00000001, VK_ACCESS_INDEX_READ_BIT = 0x00000002, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004, VK_ACCESS_UNIFORM_READ_BIT = 0x00000008, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = 0x00000010, VK_ACCESS_SHADER_READ_BIT = 0x00000020, VK_ACCESS_SHADER_WRITE_BIT = 0x00000040, VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = 0x00000080, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400, VK_ACCESS_TRANSFER_READ_BIT = 0x00000800, VK_ACCESS_TRANSFER_WRITE_BIT = 0x00001000, VK_ACCESS_HOST_READ_BIT = 0x00002000, VK_ACCESS_HOST_WRITE_BIT = 0x00004000, VK_ACCESS_MEMORY_READ_BIT = 0x00008000, VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000, VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000, VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000, VK_ACCESS_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000, VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000, VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000, VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000, VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000, VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000, VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000, VK_ACCESS_NONE_KHR = 0, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV, VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkAccessFlagBits; typedef VkFlags VkAccessFlags; typedef enum VkImageAspectFlagBits { VK_IMAGE_ASPECT_COLOR_BIT = 0x00000001, VK_IMAGE_ASPECT_DEPTH_BIT = 0x00000002, VK_IMAGE_ASPECT_STENCIL_BIT = 0x00000004, VK_IMAGE_ASPECT_METADATA_BIT = 0x00000008, VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010, VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020, VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040, VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080, VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100, VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200, VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT = 0x00000400, VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT, VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT, VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT, VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageAspectFlagBits; typedef VkFlags VkImageAspectFlags; typedef enum VkFormatFeatureFlagBits { VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = 0x00000001, VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = 0x00000002, VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004, VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008, VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = 0x00000010, VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020, VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = 0x00000040, VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = 0x00000080, VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200, VK_FORMAT_FEATURE_BLIT_SRC_BIT = 0x00000400, VK_FORMAT_FEATURE_BLIT_DST_BIT = 0x00000800, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000, VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = 0x00004000, VK_FORMAT_FEATURE_TRANSFER_DST_BIT = 0x00008000, VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000, VK_FORMAT_FEATURE_DISJOINT_BIT = 0x00400000, VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = 0x00800000, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = 0x00002000, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_FORMAT_FEATURE_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_FORMAT_FEATURE_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_FORMAT_FEATURE_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_FORMAT_FEATURE_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000, #endif VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000, VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000, VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000, VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT, VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT, VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT, VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG, VK_FORMAT_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkFormatFeatureFlagBits; typedef VkFlags VkFormatFeatureFlags; typedef enum VkImageCreateFlagBits { VK_IMAGE_CREATE_SPARSE_BINDING_BIT = 0x00000001, VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = 0x00000004, VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = 0x00000008, VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = 0x00000010, VK_IMAGE_CREATE_ALIAS_BIT = 0x00000400, VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = 0x00000040, VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = 0x00000020, VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = 0x00000080, VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = 0x00000100, VK_IMAGE_CREATE_PROTECTED_BIT = 0x00000800, VK_IMAGE_CREATE_DISJOINT_BIT = 0x00000200, VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000, VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000, VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000, VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT, VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT, VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageCreateFlagBits; typedef VkFlags VkImageCreateFlags; typedef enum VkSampleCountFlagBits { VK_SAMPLE_COUNT_1_BIT = 0x00000001, VK_SAMPLE_COUNT_2_BIT = 0x00000002, VK_SAMPLE_COUNT_4_BIT = 0x00000004, VK_SAMPLE_COUNT_8_BIT = 0x00000008, VK_SAMPLE_COUNT_16_BIT = 0x00000010, VK_SAMPLE_COUNT_32_BIT = 0x00000020, VK_SAMPLE_COUNT_64_BIT = 0x00000040, VK_SAMPLE_COUNT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSampleCountFlagBits; typedef VkFlags VkSampleCountFlags; typedef enum VkImageUsageFlagBits { VK_IMAGE_USAGE_TRANSFER_SRC_BIT = 0x00000001, VK_IMAGE_USAGE_TRANSFER_DST_BIT = 0x00000002, VK_IMAGE_USAGE_SAMPLED_BIT = 0x00000004, VK_IMAGE_USAGE_STORAGE_BIT = 0x00000008, VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = 0x00000010, VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000, #endif VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00000100, VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200, VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV, VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageUsageFlagBits; typedef VkFlags VkImageUsageFlags; typedef VkFlags VkInstanceCreateFlags; typedef enum VkMemoryHeapFlagBits { VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002, VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkMemoryHeapFlagBits; typedef VkFlags VkMemoryHeapFlags; typedef enum VkMemoryPropertyFlagBits { VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = 0x00000001, VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = 0x00000002, VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = 0x00000004, VK_MEMORY_PROPERTY_HOST_CACHED_BIT = 0x00000008, VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = 0x00000010, VK_MEMORY_PROPERTY_PROTECTED_BIT = 0x00000020, VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD = 0x00000040, VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD = 0x00000080, VK_MEMORY_PROPERTY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkMemoryPropertyFlagBits; typedef VkFlags VkMemoryPropertyFlags; typedef enum VkQueueFlagBits { VK_QUEUE_GRAPHICS_BIT = 0x00000001, VK_QUEUE_COMPUTE_BIT = 0x00000002, VK_QUEUE_TRANSFER_BIT = 0x00000004, VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008, VK_QUEUE_PROTECTED_BIT = 0x00000010, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040, #endif VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkQueueFlagBits; typedef VkFlags VkQueueFlags; typedef VkFlags VkDeviceCreateFlags; typedef enum VkDeviceQueueCreateFlagBits { VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = 0x00000001, VK_DEVICE_QUEUE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkDeviceQueueCreateFlagBits; typedef VkFlags VkDeviceQueueCreateFlags; typedef enum VkPipelineStageFlagBits { VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = 0x00000001, VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = 0x00000002, VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = 0x00000004, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = 0x00000008, VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010, VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020, VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = 0x00000040, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = 0x00000080, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = 0x00000100, VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = 0x00000200, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = 0x00000800, VK_PIPELINE_STAGE_TRANSFER_BIT = 0x00001000, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = 0x00002000, VK_PIPELINE_STAGE_HOST_BIT = 0x00004000, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000, VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000, VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 0x00200000, VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = 0x00400000, VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = 0x00080000, VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = 0x00100000, VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000, VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = 0x00020000, VK_PIPELINE_STAGE_NONE_KHR = 0, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV, VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineStageFlagBits; typedef VkFlags VkPipelineStageFlags; typedef VkFlags VkMemoryMapFlags; typedef enum VkSparseMemoryBindFlagBits { VK_SPARSE_MEMORY_BIND_METADATA_BIT = 0x00000001, VK_SPARSE_MEMORY_BIND_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSparseMemoryBindFlagBits; typedef VkFlags VkSparseMemoryBindFlags; typedef enum VkSparseImageFormatFlagBits { VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = 0x00000001, VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = 0x00000002, VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = 0x00000004, VK_SPARSE_IMAGE_FORMAT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSparseImageFormatFlagBits; typedef VkFlags VkSparseImageFormatFlags; typedef enum VkFenceCreateFlagBits { VK_FENCE_CREATE_SIGNALED_BIT = 0x00000001, VK_FENCE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkFenceCreateFlagBits; typedef VkFlags VkFenceCreateFlags; typedef VkFlags VkSemaphoreCreateFlags; typedef enum VkEventCreateFlagBits { VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = 0x00000001, VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkEventCreateFlagBits; typedef VkFlags VkEventCreateFlags; typedef enum VkQueryPipelineStatisticFlagBits { VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = 0x00000001, VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = 0x00000002, VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = 0x00000004, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = 0x00000008, VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = 0x00000010, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = 0x00000020, VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = 0x00000040, VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = 0x00000080, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = 0x00000100, VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = 0x00000200, VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = 0x00000400, VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkQueryPipelineStatisticFlagBits; typedef VkFlags VkQueryPipelineStatisticFlags; typedef VkFlags VkQueryPoolCreateFlags; typedef enum VkQueryResultFlagBits { VK_QUERY_RESULT_64_BIT = 0x00000001, VK_QUERY_RESULT_WAIT_BIT = 0x00000002, VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = 0x00000004, VK_QUERY_RESULT_PARTIAL_BIT = 0x00000008, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_QUERY_RESULT_WITH_STATUS_BIT_KHR = 0x00000010, #endif VK_QUERY_RESULT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkQueryResultFlagBits; typedef VkFlags VkQueryResultFlags; typedef enum VkBufferCreateFlagBits { VK_BUFFER_CREATE_SPARSE_BINDING_BIT = 0x00000001, VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = 0x00000002, VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = 0x00000004, VK_BUFFER_CREATE_PROTECTED_BIT = 0x00000008, VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000010, VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_EXT = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_BUFFER_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, VK_BUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkBufferCreateFlagBits; typedef VkFlags VkBufferCreateFlags; typedef enum VkBufferUsageFlagBits { VK_BUFFER_USAGE_TRANSFER_SRC_BIT = 0x00000001, VK_BUFFER_USAGE_TRANSFER_DST_BIT = 0x00000002, VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004, VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = 0x00000008, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = 0x00000010, VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = 0x00000020, VK_BUFFER_USAGE_INDEX_BUFFER_BIT = 0x00000040, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = 0x00000080, VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = 0x00000100, VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = 0x00020000, #ifdef VK_ENABLE_BETA_EXTENSIONS VK_BUFFER_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_BUFFER_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00004000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_BUFFER_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000, #endif #ifdef VK_ENABLE_BETA_EXTENSIONS VK_BUFFER_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000, #endif VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800, VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000, VK_BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000, VK_BUFFER_USAGE_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000, VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400, VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkBufferUsageFlagBits; typedef VkFlags VkBufferUsageFlags; typedef VkFlags VkBufferViewCreateFlags; typedef enum VkImageViewCreateFlagBits { VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DYNAMIC_BIT_EXT = 0x00000001, VK_IMAGE_VIEW_CREATE_FRAGMENT_DENSITY_MAP_DEFERRED_BIT_EXT = 0x00000002, VK_IMAGE_VIEW_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageViewCreateFlagBits; typedef VkFlags VkImageViewCreateFlags; typedef enum VkShaderModuleCreateFlagBits { VK_SHADER_MODULE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkShaderModuleCreateFlagBits; typedef VkFlags VkShaderModuleCreateFlags; typedef enum VkPipelineCacheCreateFlagBits { VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = 0x00000001, VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineCacheCreateFlagBits; typedef VkFlags VkPipelineCacheCreateFlags; typedef enum VkColorComponentFlagBits { VK_COLOR_COMPONENT_R_BIT = 0x00000001, VK_COLOR_COMPONENT_G_BIT = 0x00000002, VK_COLOR_COMPONENT_B_BIT = 0x00000004, VK_COLOR_COMPONENT_A_BIT = 0x00000008, VK_COLOR_COMPONENT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkColorComponentFlagBits; typedef VkFlags VkColorComponentFlags; typedef enum VkPipelineCreateFlagBits { VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = 0x00000001, VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = 0x00000002, VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004, VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008, VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000, VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000, VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000, VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000, VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV = 0x00000020, VK_PIPELINE_CREATE_CAPTURE_STATISTICS_BIT_KHR = 0x00000040, VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080, VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00040000, VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 0x00000800, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = 0x00000100, VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = 0x00000200, VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE, VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineCreateFlagBits; typedef VkFlags VkPipelineCreateFlags; typedef enum VkPipelineShaderStageCreateFlagBits { VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000001, VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000002, VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineShaderStageCreateFlagBits; typedef VkFlags VkPipelineShaderStageCreateFlags; typedef enum VkShaderStageFlagBits { VK_SHADER_STAGE_VERTEX_BIT = 0x00000001, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004, VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008, VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010, VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020, VK_SHADER_STAGE_ALL_GRAPHICS = 0x0000001F, VK_SHADER_STAGE_ALL = 0x7FFFFFFF, VK_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, VK_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, VK_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, VK_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, VK_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, VK_SHADER_STAGE_TASK_BIT_NV = 0x00000040, VK_SHADER_STAGE_MESH_BIT_NV = 0x00000080, VK_SHADER_STAGE_RAYGEN_BIT_NV = VK_SHADER_STAGE_RAYGEN_BIT_KHR, VK_SHADER_STAGE_ANY_HIT_BIT_NV = VK_SHADER_STAGE_ANY_HIT_BIT_KHR, VK_SHADER_STAGE_CLOSEST_HIT_BIT_NV = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, VK_SHADER_STAGE_MISS_BIT_NV = VK_SHADER_STAGE_MISS_BIT_KHR, VK_SHADER_STAGE_INTERSECTION_BIT_NV = VK_SHADER_STAGE_INTERSECTION_BIT_KHR, VK_SHADER_STAGE_CALLABLE_BIT_NV = VK_SHADER_STAGE_CALLABLE_BIT_KHR, VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkShaderStageFlagBits; typedef enum VkCullModeFlagBits { VK_CULL_MODE_NONE = 0, VK_CULL_MODE_FRONT_BIT = 0x00000001, VK_CULL_MODE_BACK_BIT = 0x00000002, VK_CULL_MODE_FRONT_AND_BACK = 0x00000003, VK_CULL_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkCullModeFlagBits; typedef VkFlags VkCullModeFlags; typedef VkFlags VkPipelineVertexInputStateCreateFlags; typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; typedef VkFlags VkPipelineTessellationStateCreateFlags; typedef VkFlags VkPipelineViewportStateCreateFlags; typedef VkFlags VkPipelineRasterizationStateCreateFlags; typedef VkFlags VkPipelineMultisampleStateCreateFlags; typedef VkFlags VkPipelineDepthStencilStateCreateFlags; typedef VkFlags VkPipelineColorBlendStateCreateFlags; typedef VkFlags VkPipelineDynamicStateCreateFlags; typedef VkFlags VkPipelineLayoutCreateFlags; typedef VkFlags VkShaderStageFlags; typedef enum VkSamplerCreateFlagBits { VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT = 0x00000001, VK_SAMPLER_CREATE_SUBSAMPLED_COARSE_RECONSTRUCTION_BIT_EXT = 0x00000002, VK_SAMPLER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSamplerCreateFlagBits; typedef VkFlags VkSamplerCreateFlags; typedef enum VkDescriptorPoolCreateFlagBits { VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = 0x00000001, VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT = 0x00000002, VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE = 0x00000004, VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT, VK_DESCRIPTOR_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkDescriptorPoolCreateFlagBits; typedef VkFlags VkDescriptorPoolCreateFlags; typedef VkFlags VkDescriptorPoolResetFlags; typedef enum VkDescriptorSetLayoutCreateFlagBits { VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002, VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001, VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = 0x00000004, VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkDescriptorSetLayoutCreateFlagBits; typedef VkFlags VkDescriptorSetLayoutCreateFlags; typedef enum VkAttachmentDescriptionFlagBits { VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = 0x00000001, VK_ATTACHMENT_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkAttachmentDescriptionFlagBits; typedef VkFlags VkAttachmentDescriptionFlags; typedef enum VkDependencyFlagBits { VK_DEPENDENCY_BY_REGION_BIT = 0x00000001, VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004, VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002, VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT, VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT, VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkDependencyFlagBits; typedef VkFlags VkDependencyFlags; typedef enum VkFramebufferCreateFlagBits { VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT = 0x00000001, VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT_KHR = VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, VK_FRAMEBUFFER_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkFramebufferCreateFlagBits; typedef VkFlags VkFramebufferCreateFlags; typedef enum VkRenderPassCreateFlagBits { VK_RENDER_PASS_CREATE_TRANSFORM_BIT_QCOM = 0x00000002, VK_RENDER_PASS_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkRenderPassCreateFlagBits; typedef VkFlags VkRenderPassCreateFlags; typedef enum VkSubpassDescriptionFlagBits { VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = 0x00000001, VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002, VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 0x00000004, VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 0x00000008, VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSubpassDescriptionFlagBits; typedef VkFlags VkSubpassDescriptionFlags; typedef enum VkCommandPoolCreateFlagBits { VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = 0x00000001, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = 0x00000002, VK_COMMAND_POOL_CREATE_PROTECTED_BIT = 0x00000004, VK_COMMAND_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkCommandPoolCreateFlagBits; typedef VkFlags VkCommandPoolCreateFlags; typedef enum VkCommandPoolResetFlagBits { VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = 0x00000001, VK_COMMAND_POOL_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkCommandPoolResetFlagBits; typedef VkFlags VkCommandPoolResetFlags; typedef enum VkCommandBufferUsageFlagBits { VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = 0x00000001, VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = 0x00000002, VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = 0x00000004, VK_COMMAND_BUFFER_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkCommandBufferUsageFlagBits; typedef VkFlags VkCommandBufferUsageFlags; typedef enum VkQueryControlFlagBits { VK_QUERY_CONTROL_PRECISE_BIT = 0x00000001, VK_QUERY_CONTROL_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkQueryControlFlagBits; typedef VkFlags VkQueryControlFlags; typedef enum VkCommandBufferResetFlagBits { VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = 0x00000001, VK_COMMAND_BUFFER_RESET_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkCommandBufferResetFlagBits; typedef VkFlags VkCommandBufferResetFlags; typedef enum VkStencilFaceFlagBits { VK_STENCIL_FACE_FRONT_BIT = 0x00000001, VK_STENCIL_FACE_BACK_BIT = 0x00000002, VK_STENCIL_FACE_FRONT_AND_BACK = 0x00000003, VK_STENCIL_FRONT_AND_BACK = VK_STENCIL_FACE_FRONT_AND_BACK, VK_STENCIL_FACE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkStencilFaceFlagBits; typedef VkFlags VkStencilFaceFlags; typedef struct VkExtent2D { uint32_t width; uint32_t height; } VkExtent2D; typedef struct VkExtent3D { uint32_t width; uint32_t height; uint32_t depth; } VkExtent3D; typedef struct VkOffset2D { int32_t x; int32_t y; } VkOffset2D; typedef struct VkOffset3D { int32_t x; int32_t y; int32_t z; } VkOffset3D; typedef struct VkRect2D { VkOffset2D offset; VkExtent2D extent; } VkRect2D; typedef struct VkBaseInStructure { VkStructureType sType; const struct VkBaseInStructure* pNext; } VkBaseInStructure; typedef struct VkBaseOutStructure { VkStructureType sType; struct VkBaseOutStructure* pNext; } VkBaseOutStructure; typedef struct VkBufferMemoryBarrier { VkStructureType sType; const void* pNext; VkAccessFlags srcAccessMask; VkAccessFlags dstAccessMask; uint32_t srcQueueFamilyIndex; uint32_t dstQueueFamilyIndex; VkBuffer buffer; VkDeviceSize offset; VkDeviceSize size; } VkBufferMemoryBarrier; typedef struct VkDispatchIndirectCommand { uint32_t x; uint32_t y; uint32_t z; } VkDispatchIndirectCommand; typedef struct VkDrawIndexedIndirectCommand { uint32_t indexCount; uint32_t instanceCount; uint32_t firstIndex; int32_t vertexOffset; uint32_t firstInstance; } VkDrawIndexedIndirectCommand; typedef struct VkDrawIndirectCommand { uint32_t vertexCount; uint32_t instanceCount; uint32_t firstVertex; uint32_t firstInstance; } VkDrawIndirectCommand; typedef struct VkImageSubresourceRange { VkImageAspectFlags aspectMask; uint32_t baseMipLevel; uint32_t levelCount; uint32_t baseArrayLayer; uint32_t layerCount; } VkImageSubresourceRange; typedef struct VkImageMemoryBarrier { VkStructureType sType; const void* pNext; VkAccessFlags srcAccessMask; VkAccessFlags dstAccessMask; VkImageLayout oldLayout; VkImageLayout newLayout; uint32_t srcQueueFamilyIndex; uint32_t dstQueueFamilyIndex; VkImage image; VkImageSubresourceRange subresourceRange; } VkImageMemoryBarrier; typedef struct VkMemoryBarrier { VkStructureType sType; const void* pNext; VkAccessFlags srcAccessMask; VkAccessFlags dstAccessMask; } VkMemoryBarrier; typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)( void* pUserData, size_t size, size_t alignment, VkSystemAllocationScope allocationScope); typedef void (VKAPI_PTR *PFN_vkFreeFunction)( void* pUserData, void* pMemory); typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( void* pUserData, size_t size, VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope); typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)( void* pUserData, size_t size, VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope); typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)( void* pUserData, void* pOriginal, size_t size, size_t alignment, VkSystemAllocationScope allocationScope); typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); typedef struct VkAllocationCallbacks { void* pUserData; PFN_vkAllocationFunction pfnAllocation; PFN_vkReallocationFunction pfnReallocation; PFN_vkFreeFunction pfnFree; PFN_vkInternalAllocationNotification pfnInternalAllocation; PFN_vkInternalFreeNotification pfnInternalFree; } VkAllocationCallbacks; typedef struct VkApplicationInfo { VkStructureType sType; const void* pNext; const char* pApplicationName; uint32_t applicationVersion; const char* pEngineName; uint32_t engineVersion; uint32_t apiVersion; } VkApplicationInfo; typedef struct VkFormatProperties { VkFormatFeatureFlags linearTilingFeatures; VkFormatFeatureFlags optimalTilingFeatures; VkFormatFeatureFlags bufferFeatures; } VkFormatProperties; typedef struct VkImageFormatProperties { VkExtent3D maxExtent; uint32_t maxMipLevels; uint32_t maxArrayLayers; VkSampleCountFlags sampleCounts; VkDeviceSize maxResourceSize; } VkImageFormatProperties; typedef struct VkInstanceCreateInfo { VkStructureType sType; const void* pNext; VkInstanceCreateFlags flags; const VkApplicationInfo* pApplicationInfo; uint32_t enabledLayerCount; const char* const* ppEnabledLayerNames; uint32_t enabledExtensionCount; const char* const* ppEnabledExtensionNames; } VkInstanceCreateInfo; typedef struct VkMemoryHeap { VkDeviceSize size; VkMemoryHeapFlags flags; } VkMemoryHeap; typedef struct VkMemoryType { VkMemoryPropertyFlags propertyFlags; uint32_t heapIndex; } VkMemoryType; typedef struct VkPhysicalDeviceFeatures { VkBool32 robustBufferAccess; VkBool32 fullDrawIndexUint32; VkBool32 imageCubeArray; VkBool32 independentBlend; VkBool32 geometryShader; VkBool32 tessellationShader; VkBool32 sampleRateShading; VkBool32 dualSrcBlend; VkBool32 logicOp; VkBool32 multiDrawIndirect; VkBool32 drawIndirectFirstInstance; VkBool32 depthClamp; VkBool32 depthBiasClamp; VkBool32 fillModeNonSolid; VkBool32 depthBounds; VkBool32 wideLines; VkBool32 largePoints; VkBool32 alphaToOne; VkBool32 multiViewport; VkBool32 samplerAnisotropy; VkBool32 textureCompressionETC2; VkBool32 textureCompressionASTC_LDR; VkBool32 textureCompressionBC; VkBool32 occlusionQueryPrecise; VkBool32 pipelineStatisticsQuery; VkBool32 vertexPipelineStoresAndAtomics; VkBool32 fragmentStoresAndAtomics; VkBool32 shaderTessellationAndGeometryPointSize; VkBool32 shaderImageGatherExtended; VkBool32 shaderStorageImageExtendedFormats; VkBool32 shaderStorageImageMultisample; VkBool32 shaderStorageImageReadWithoutFormat; VkBool32 shaderStorageImageWriteWithoutFormat; VkBool32 shaderUniformBufferArrayDynamicIndexing; VkBool32 shaderSampledImageArrayDynamicIndexing; VkBool32 shaderStorageBufferArrayDynamicIndexing; VkBool32 shaderStorageImageArrayDynamicIndexing; VkBool32 shaderClipDistance; VkBool32 shaderCullDistance; VkBool32 shaderFloat64; VkBool32 shaderInt64; VkBool32 shaderInt16; VkBool32 shaderResourceResidency; VkBool32 shaderResourceMinLod; VkBool32 sparseBinding; VkBool32 sparseResidencyBuffer; VkBool32 sparseResidencyImage2D; VkBool32 sparseResidencyImage3D; VkBool32 sparseResidency2Samples; VkBool32 sparseResidency4Samples; VkBool32 sparseResidency8Samples; VkBool32 sparseResidency16Samples; VkBool32 sparseResidencyAliased; VkBool32 variableMultisampleRate; VkBool32 inheritedQueries; } VkPhysicalDeviceFeatures; typedef struct VkPhysicalDeviceLimits { uint32_t maxImageDimension1D; uint32_t maxImageDimension2D; uint32_t maxImageDimension3D; uint32_t maxImageDimensionCube; uint32_t maxImageArrayLayers; uint32_t maxTexelBufferElements; uint32_t maxUniformBufferRange; uint32_t maxStorageBufferRange; uint32_t maxPushConstantsSize; uint32_t maxMemoryAllocationCount; uint32_t maxSamplerAllocationCount; VkDeviceSize bufferImageGranularity; VkDeviceSize sparseAddressSpaceSize; uint32_t maxBoundDescriptorSets; uint32_t maxPerStageDescriptorSamplers; uint32_t maxPerStageDescriptorUniformBuffers; uint32_t maxPerStageDescriptorStorageBuffers; uint32_t maxPerStageDescriptorSampledImages; uint32_t maxPerStageDescriptorStorageImages; uint32_t maxPerStageDescriptorInputAttachments; uint32_t maxPerStageResources; uint32_t maxDescriptorSetSamplers; uint32_t maxDescriptorSetUniformBuffers; uint32_t maxDescriptorSetUniformBuffersDynamic; uint32_t maxDescriptorSetStorageBuffers; uint32_t maxDescriptorSetStorageBuffersDynamic; uint32_t maxDescriptorSetSampledImages; uint32_t maxDescriptorSetStorageImages; uint32_t maxDescriptorSetInputAttachments; uint32_t maxVertexInputAttributes; uint32_t maxVertexInputBindings; uint32_t maxVertexInputAttributeOffset; uint32_t maxVertexInputBindingStride; uint32_t maxVertexOutputComponents; uint32_t maxTessellationGenerationLevel; uint32_t maxTessellationPatchSize; uint32_t maxTessellationControlPerVertexInputComponents; uint32_t maxTessellationControlPerVertexOutputComponents; uint32_t maxTessellationControlPerPatchOutputComponents; uint32_t maxTessellationControlTotalOutputComponents; uint32_t maxTessellationEvaluationInputComponents; uint32_t maxTessellationEvaluationOutputComponents; uint32_t maxGeometryShaderInvocations; uint32_t maxGeometryInputComponents; uint32_t maxGeometryOutputComponents; uint32_t maxGeometryOutputVertices; uint32_t maxGeometryTotalOutputComponents; uint32_t maxFragmentInputComponents; uint32_t maxFragmentOutputAttachments; uint32_t maxFragmentDualSrcAttachments; uint32_t maxFragmentCombinedOutputResources; uint32_t maxComputeSharedMemorySize; uint32_t maxComputeWorkGroupCount[3]; uint32_t maxComputeWorkGroupInvocations; uint32_t maxComputeWorkGroupSize[3]; uint32_t subPixelPrecisionBits; uint32_t subTexelPrecisionBits; uint32_t mipmapPrecisionBits; uint32_t maxDrawIndexedIndexValue; uint32_t maxDrawIndirectCount; float maxSamplerLodBias; float maxSamplerAnisotropy; uint32_t maxViewports; uint32_t maxViewportDimensions[2]; float viewportBoundsRange[2]; uint32_t viewportSubPixelBits; size_t minMemoryMapAlignment; VkDeviceSize minTexelBufferOffsetAlignment; VkDeviceSize minUniformBufferOffsetAlignment; VkDeviceSize minStorageBufferOffsetAlignment; int32_t minTexelOffset; uint32_t maxTexelOffset; int32_t minTexelGatherOffset; uint32_t maxTexelGatherOffset; float minInterpolationOffset; float maxInterpolationOffset; uint32_t subPixelInterpolationOffsetBits; uint32_t maxFramebufferWidth; uint32_t maxFramebufferHeight; uint32_t maxFramebufferLayers; VkSampleCountFlags framebufferColorSampleCounts; VkSampleCountFlags framebufferDepthSampleCounts; VkSampleCountFlags framebufferStencilSampleCounts; VkSampleCountFlags framebufferNoAttachmentsSampleCounts; uint32_t maxColorAttachments; VkSampleCountFlags sampledImageColorSampleCounts; VkSampleCountFlags sampledImageIntegerSampleCounts; VkSampleCountFlags sampledImageDepthSampleCounts; VkSampleCountFlags sampledImageStencilSampleCounts; VkSampleCountFlags storageImageSampleCounts; uint32_t maxSampleMaskWords; VkBool32 timestampComputeAndGraphics; float timestampPeriod; uint32_t maxClipDistances; uint32_t maxCullDistances; uint32_t maxCombinedClipAndCullDistances; uint32_t discreteQueuePriorities; float pointSizeRange[2]; float lineWidthRange[2]; float pointSizeGranularity; float lineWidthGranularity; VkBool32 strictLines; VkBool32 standardSampleLocations; VkDeviceSize optimalBufferCopyOffsetAlignment; VkDeviceSize optimalBufferCopyRowPitchAlignment; VkDeviceSize nonCoherentAtomSize; } VkPhysicalDeviceLimits; typedef struct VkPhysicalDeviceMemoryProperties { uint32_t memoryTypeCount; VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES]; uint32_t memoryHeapCount; VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS]; } VkPhysicalDeviceMemoryProperties; typedef struct VkPhysicalDeviceSparseProperties { VkBool32 residencyStandard2DBlockShape; VkBool32 residencyStandard2DMultisampleBlockShape; VkBool32 residencyStandard3DBlockShape; VkBool32 residencyAlignedMipSize; VkBool32 residencyNonResidentStrict; } VkPhysicalDeviceSparseProperties; typedef struct VkPhysicalDeviceProperties { uint32_t apiVersion; uint32_t driverVersion; uint32_t vendorID; uint32_t deviceID; VkPhysicalDeviceType deviceType; char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE]; uint8_t pipelineCacheUUID[VK_UUID_SIZE]; VkPhysicalDeviceLimits limits; VkPhysicalDeviceSparseProperties sparseProperties; } VkPhysicalDeviceProperties; typedef struct VkQueueFamilyProperties { VkQueueFlags queueFlags; uint32_t queueCount; uint32_t timestampValidBits; VkExtent3D minImageTransferGranularity; } VkQueueFamilyProperties; typedef struct VkDeviceQueueCreateInfo { VkStructureType sType; const void* pNext; VkDeviceQueueCreateFlags flags; uint32_t queueFamilyIndex; uint32_t queueCount; const float* pQueuePriorities; } VkDeviceQueueCreateInfo; typedef struct VkDeviceCreateInfo { VkStructureType sType; const void* pNext; VkDeviceCreateFlags flags; uint32_t queueCreateInfoCount; const VkDeviceQueueCreateInfo* pQueueCreateInfos; uint32_t enabledLayerCount; const char* const* ppEnabledLayerNames; uint32_t enabledExtensionCount; const char* const* ppEnabledExtensionNames; const VkPhysicalDeviceFeatures* pEnabledFeatures; } VkDeviceCreateInfo; typedef struct VkExtensionProperties { char extensionName[VK_MAX_EXTENSION_NAME_SIZE]; uint32_t specVersion; } VkExtensionProperties; typedef struct VkLayerProperties { char layerName[VK_MAX_EXTENSION_NAME_SIZE]; uint32_t specVersion; uint32_t implementationVersion; char description[VK_MAX_DESCRIPTION_SIZE]; } VkLayerProperties; typedef struct VkSubmitInfo { VkStructureType sType; const void* pNext; uint32_t waitSemaphoreCount; const VkSemaphore* pWaitSemaphores; const VkPipelineStageFlags* pWaitDstStageMask; uint32_t commandBufferCount; const VkCommandBuffer* pCommandBuffers; uint32_t signalSemaphoreCount; const VkSemaphore* pSignalSemaphores; } VkSubmitInfo; typedef struct VkMappedMemoryRange { VkStructureType sType; const void* pNext; VkDeviceMemory memory; VkDeviceSize offset; VkDeviceSize size; } VkMappedMemoryRange; typedef struct VkMemoryAllocateInfo { VkStructureType sType; const void* pNext; VkDeviceSize allocationSize; uint32_t memoryTypeIndex; } VkMemoryAllocateInfo; typedef struct VkMemoryRequirements { VkDeviceSize size; VkDeviceSize alignment; uint32_t memoryTypeBits; } VkMemoryRequirements; typedef struct VkSparseMemoryBind { VkDeviceSize resourceOffset; VkDeviceSize size; VkDeviceMemory memory; VkDeviceSize memoryOffset; VkSparseMemoryBindFlags flags; } VkSparseMemoryBind; typedef struct VkSparseBufferMemoryBindInfo { VkBuffer buffer; uint32_t bindCount; const VkSparseMemoryBind* pBinds; } VkSparseBufferMemoryBindInfo; typedef struct VkSparseImageOpaqueMemoryBindInfo { VkImage image; uint32_t bindCount; const VkSparseMemoryBind* pBinds; } VkSparseImageOpaqueMemoryBindInfo; typedef struct VkImageSubresource { VkImageAspectFlags aspectMask; uint32_t mipLevel; uint32_t arrayLayer; } VkImageSubresource; typedef struct VkSparseImageMemoryBind { VkImageSubresource subresource; VkOffset3D offset; VkExtent3D extent; VkDeviceMemory memory; VkDeviceSize memoryOffset; VkSparseMemoryBindFlags flags; } VkSparseImageMemoryBind; typedef struct VkSparseImageMemoryBindInfo { VkImage image; uint32_t bindCount; const VkSparseImageMemoryBind* pBinds; } VkSparseImageMemoryBindInfo; typedef struct VkBindSparseInfo { VkStructureType sType; const void* pNext; uint32_t waitSemaphoreCount; const VkSemaphore* pWaitSemaphores; uint32_t bufferBindCount; const VkSparseBufferMemoryBindInfo* pBufferBinds; uint32_t imageOpaqueBindCount; const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds; uint32_t imageBindCount; const VkSparseImageMemoryBindInfo* pImageBinds; uint32_t signalSemaphoreCount; const VkSemaphore* pSignalSemaphores; } VkBindSparseInfo; typedef struct VkSparseImageFormatProperties { VkImageAspectFlags aspectMask; VkExtent3D imageGranularity; VkSparseImageFormatFlags flags; } VkSparseImageFormatProperties; typedef struct VkSparseImageMemoryRequirements { VkSparseImageFormatProperties formatProperties; uint32_t imageMipTailFirstLod; VkDeviceSize imageMipTailSize; VkDeviceSize imageMipTailOffset; VkDeviceSize imageMipTailStride; } VkSparseImageMemoryRequirements; typedef struct VkFenceCreateInfo { VkStructureType sType; const void* pNext; VkFenceCreateFlags flags; } VkFenceCreateInfo; typedef struct VkSemaphoreCreateInfo { VkStructureType sType; const void* pNext; VkSemaphoreCreateFlags flags; } VkSemaphoreCreateInfo; typedef struct VkEventCreateInfo { VkStructureType sType; const void* pNext; VkEventCreateFlags flags; } VkEventCreateInfo; typedef struct VkQueryPoolCreateInfo { VkStructureType sType; const void* pNext; VkQueryPoolCreateFlags flags; VkQueryType queryType; uint32_t queryCount; VkQueryPipelineStatisticFlags pipelineStatistics; } VkQueryPoolCreateInfo; typedef struct VkBufferCreateInfo { VkStructureType sType; const void* pNext; VkBufferCreateFlags flags; VkDeviceSize size; VkBufferUsageFlags usage; VkSharingMode sharingMode; uint32_t queueFamilyIndexCount; const uint32_t* pQueueFamilyIndices; } VkBufferCreateInfo; typedef struct VkBufferViewCreateInfo { VkStructureType sType; const void* pNext; VkBufferViewCreateFlags flags; VkBuffer buffer; VkFormat format; VkDeviceSize offset; VkDeviceSize range; } VkBufferViewCreateInfo; typedef struct VkImageCreateInfo { VkStructureType sType; const void* pNext; VkImageCreateFlags flags; VkImageType imageType; VkFormat format; VkExtent3D extent; uint32_t mipLevels; uint32_t arrayLayers; VkSampleCountFlagBits samples; VkImageTiling tiling; VkImageUsageFlags usage; VkSharingMode sharingMode; uint32_t queueFamilyIndexCount; const uint32_t* pQueueFamilyIndices; VkImageLayout initialLayout; } VkImageCreateInfo; typedef struct VkSubresourceLayout { VkDeviceSize offset; VkDeviceSize size; VkDeviceSize rowPitch; VkDeviceSize arrayPitch; VkDeviceSize depthPitch; } VkSubresourceLayout; typedef struct VkComponentMapping { VkComponentSwizzle r; VkComponentSwizzle g; VkComponentSwizzle b; VkComponentSwizzle a; } VkComponentMapping; typedef struct VkImageViewCreateInfo { VkStructureType sType; const void* pNext; VkImageViewCreateFlags flags; VkImage image; VkImageViewType viewType; VkFormat format; VkComponentMapping components; VkImageSubresourceRange subresourceRange; } VkImageViewCreateInfo; typedef struct VkShaderModuleCreateInfo { VkStructureType sType; const void* pNext; VkShaderModuleCreateFlags flags; size_t codeSize; const uint32_t* pCode; } VkShaderModuleCreateInfo; typedef struct VkPipelineCacheCreateInfo { VkStructureType sType; const void* pNext; VkPipelineCacheCreateFlags flags; size_t initialDataSize; const void* pInitialData; } VkPipelineCacheCreateInfo; typedef struct VkSpecializationMapEntry { uint32_t constantID; uint32_t offset; size_t size; } VkSpecializationMapEntry; typedef struct VkSpecializationInfo { uint32_t mapEntryCount; const VkSpecializationMapEntry* pMapEntries; size_t dataSize; const void* pData; } VkSpecializationInfo; typedef struct VkPipelineShaderStageCreateInfo { VkStructureType sType; const void* pNext; VkPipelineShaderStageCreateFlags flags; VkShaderStageFlagBits stage; VkShaderModule module; const char* pName; const VkSpecializationInfo* pSpecializationInfo; } VkPipelineShaderStageCreateInfo; typedef struct VkComputePipelineCreateInfo { VkStructureType sType; const void* pNext; VkPipelineCreateFlags flags; VkPipelineShaderStageCreateInfo stage; VkPipelineLayout layout; VkPipeline basePipelineHandle; int32_t basePipelineIndex; } VkComputePipelineCreateInfo; typedef struct VkVertexInputBindingDescription { uint32_t binding; uint32_t stride; VkVertexInputRate inputRate; } VkVertexInputBindingDescription; typedef struct VkVertexInputAttributeDescription { uint32_t location; uint32_t binding; VkFormat format; uint32_t offset; } VkVertexInputAttributeDescription; typedef struct VkPipelineVertexInputStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineVertexInputStateCreateFlags flags; uint32_t vertexBindingDescriptionCount; const VkVertexInputBindingDescription* pVertexBindingDescriptions; uint32_t vertexAttributeDescriptionCount; const VkVertexInputAttributeDescription* pVertexAttributeDescriptions; } VkPipelineVertexInputStateCreateInfo; typedef struct VkPipelineInputAssemblyStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineInputAssemblyStateCreateFlags flags; VkPrimitiveTopology topology; VkBool32 primitiveRestartEnable; } VkPipelineInputAssemblyStateCreateInfo; typedef struct VkPipelineTessellationStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineTessellationStateCreateFlags flags; uint32_t patchControlPoints; } VkPipelineTessellationStateCreateInfo; typedef struct VkViewport { float x; float y; float width; float height; float minDepth; float maxDepth; } VkViewport; typedef struct VkPipelineViewportStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineViewportStateCreateFlags flags; uint32_t viewportCount; const VkViewport* pViewports; uint32_t scissorCount; const VkRect2D* pScissors; } VkPipelineViewportStateCreateInfo; typedef struct VkPipelineRasterizationStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineRasterizationStateCreateFlags flags; VkBool32 depthClampEnable; VkBool32 rasterizerDiscardEnable; VkPolygonMode polygonMode; VkCullModeFlags cullMode; VkFrontFace frontFace; VkBool32 depthBiasEnable; float depthBiasConstantFactor; float depthBiasClamp; float depthBiasSlopeFactor; float lineWidth; } VkPipelineRasterizationStateCreateInfo; typedef struct VkPipelineMultisampleStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineMultisampleStateCreateFlags flags; VkSampleCountFlagBits rasterizationSamples; VkBool32 sampleShadingEnable; float minSampleShading; const VkSampleMask* pSampleMask; VkBool32 alphaToCoverageEnable; VkBool32 alphaToOneEnable; } VkPipelineMultisampleStateCreateInfo; typedef struct VkStencilOpState { VkStencilOp failOp; VkStencilOp passOp; VkStencilOp depthFailOp; VkCompareOp compareOp; uint32_t compareMask; uint32_t writeMask; uint32_t reference; } VkStencilOpState; typedef struct VkPipelineDepthStencilStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineDepthStencilStateCreateFlags flags; VkBool32 depthTestEnable; VkBool32 depthWriteEnable; VkCompareOp depthCompareOp; VkBool32 depthBoundsTestEnable; VkBool32 stencilTestEnable; VkStencilOpState front; VkStencilOpState back; float minDepthBounds; float maxDepthBounds; } VkPipelineDepthStencilStateCreateInfo; typedef struct VkPipelineColorBlendAttachmentState { VkBool32 blendEnable; VkBlendFactor srcColorBlendFactor; VkBlendFactor dstColorBlendFactor; VkBlendOp colorBlendOp; VkBlendFactor srcAlphaBlendFactor; VkBlendFactor dstAlphaBlendFactor; VkBlendOp alphaBlendOp; VkColorComponentFlags colorWriteMask; } VkPipelineColorBlendAttachmentState; typedef struct VkPipelineColorBlendStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineColorBlendStateCreateFlags flags; VkBool32 logicOpEnable; VkLogicOp logicOp; uint32_t attachmentCount; const VkPipelineColorBlendAttachmentState* pAttachments; float blendConstants[4]; } VkPipelineColorBlendStateCreateInfo; typedef struct VkPipelineDynamicStateCreateInfo { VkStructureType sType; const void* pNext; VkPipelineDynamicStateCreateFlags flags; uint32_t dynamicStateCount; const VkDynamicState* pDynamicStates; } VkPipelineDynamicStateCreateInfo; typedef struct VkGraphicsPipelineCreateInfo { VkStructureType sType; const void* pNext; VkPipelineCreateFlags flags; uint32_t stageCount; const VkPipelineShaderStageCreateInfo* pStages; const VkPipelineVertexInputStateCreateInfo* pVertexInputState; const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState; const VkPipelineTessellationStateCreateInfo* pTessellationState; const VkPipelineViewportStateCreateInfo* pViewportState; const VkPipelineRasterizationStateCreateInfo* pRasterizationState; const VkPipelineMultisampleStateCreateInfo* pMultisampleState; const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState; const VkPipelineColorBlendStateCreateInfo* pColorBlendState; const VkPipelineDynamicStateCreateInfo* pDynamicState; VkPipelineLayout layout; VkRenderPass renderPass; uint32_t subpass; VkPipeline basePipelineHandle; int32_t basePipelineIndex; } VkGraphicsPipelineCreateInfo; typedef struct VkPushConstantRange { VkShaderStageFlags stageFlags; uint32_t offset; uint32_t size; } VkPushConstantRange; typedef struct VkPipelineLayoutCreateInfo { VkStructureType sType; const void* pNext; VkPipelineLayoutCreateFlags flags; uint32_t setLayoutCount; const VkDescriptorSetLayout* pSetLayouts; uint32_t pushConstantRangeCount; const VkPushConstantRange* pPushConstantRanges; } VkPipelineLayoutCreateInfo; typedef struct VkSamplerCreateInfo { VkStructureType sType; const void* pNext; VkSamplerCreateFlags flags; VkFilter magFilter; VkFilter minFilter; VkSamplerMipmapMode mipmapMode; VkSamplerAddressMode addressModeU; VkSamplerAddressMode addressModeV; VkSamplerAddressMode addressModeW; float mipLodBias; VkBool32 anisotropyEnable; float maxAnisotropy; VkBool32 compareEnable; VkCompareOp compareOp; float minLod; float maxLod; VkBorderColor borderColor; VkBool32 unnormalizedCoordinates; } VkSamplerCreateInfo; typedef struct VkCopyDescriptorSet { VkStructureType sType; const void* pNext; VkDescriptorSet srcSet; uint32_t srcBinding; uint32_t srcArrayElement; VkDescriptorSet dstSet; uint32_t dstBinding; uint32_t dstArrayElement; uint32_t descriptorCount; } VkCopyDescriptorSet; typedef struct VkDescriptorBufferInfo { VkBuffer buffer; VkDeviceSize offset; VkDeviceSize range; } VkDescriptorBufferInfo; typedef struct VkDescriptorImageInfo { VkSampler sampler; VkImageView imageView; VkImageLayout imageLayout; } VkDescriptorImageInfo; typedef struct VkDescriptorPoolSize { VkDescriptorType type; uint32_t descriptorCount; } VkDescriptorPoolSize; typedef struct VkDescriptorPoolCreateInfo { VkStructureType sType; const void* pNext; VkDescriptorPoolCreateFlags flags; uint32_t maxSets; uint32_t poolSizeCount; const VkDescriptorPoolSize* pPoolSizes; } VkDescriptorPoolCreateInfo; typedef struct VkDescriptorSetAllocateInfo { VkStructureType sType; const void* pNext; VkDescriptorPool descriptorPool; uint32_t descriptorSetCount; const VkDescriptorSetLayout* pSetLayouts; } VkDescriptorSetAllocateInfo; typedef struct VkDescriptorSetLayoutBinding { uint32_t binding; VkDescriptorType descriptorType; uint32_t descriptorCount; VkShaderStageFlags stageFlags; const VkSampler* pImmutableSamplers; } VkDescriptorSetLayoutBinding; typedef struct VkDescriptorSetLayoutCreateInfo { VkStructureType sType; const void* pNext; VkDescriptorSetLayoutCreateFlags flags; uint32_t bindingCount; const VkDescriptorSetLayoutBinding* pBindings; } VkDescriptorSetLayoutCreateInfo; typedef struct VkWriteDescriptorSet { VkStructureType sType; const void* pNext; VkDescriptorSet dstSet; uint32_t dstBinding; uint32_t dstArrayElement; uint32_t descriptorCount; VkDescriptorType descriptorType; const VkDescriptorImageInfo* pImageInfo; const VkDescriptorBufferInfo* pBufferInfo; const VkBufferView* pTexelBufferView; } VkWriteDescriptorSet; typedef struct VkAttachmentDescription { VkAttachmentDescriptionFlags flags; VkFormat format; VkSampleCountFlagBits samples; VkAttachmentLoadOp loadOp; VkAttachmentStoreOp storeOp; VkAttachmentLoadOp stencilLoadOp; VkAttachmentStoreOp stencilStoreOp; VkImageLayout initialLayout; VkImageLayout finalLayout; } VkAttachmentDescription; typedef struct VkAttachmentReference { uint32_t attachment; VkImageLayout layout; } VkAttachmentReference; typedef struct VkFramebufferCreateInfo { VkStructureType sType; const void* pNext; VkFramebufferCreateFlags flags; VkRenderPass renderPass; uint32_t attachmentCount; const VkImageView* pAttachments; uint32_t width; uint32_t height; uint32_t layers; } VkFramebufferCreateInfo; typedef struct VkSubpassDescription { VkSubpassDescriptionFlags flags; VkPipelineBindPoint pipelineBindPoint; uint32_t inputAttachmentCount; const VkAttachmentReference* pInputAttachments; uint32_t colorAttachmentCount; const VkAttachmentReference* pColorAttachments; const VkAttachmentReference* pResolveAttachments; const VkAttachmentReference* pDepthStencilAttachment; uint32_t preserveAttachmentCount; const uint32_t* pPreserveAttachments; } VkSubpassDescription; typedef struct VkSubpassDependency { uint32_t srcSubpass; uint32_t dstSubpass; VkPipelineStageFlags srcStageMask; VkPipelineStageFlags dstStageMask; VkAccessFlags srcAccessMask; VkAccessFlags dstAccessMask; VkDependencyFlags dependencyFlags; } VkSubpassDependency; typedef struct VkRenderPassCreateInfo { VkStructureType sType; const void* pNext; VkRenderPassCreateFlags flags; uint32_t attachmentCount; const VkAttachmentDescription* pAttachments; uint32_t subpassCount; const VkSubpassDescription* pSubpasses; uint32_t dependencyCount; const VkSubpassDependency* pDependencies; } VkRenderPassCreateInfo; typedef struct VkCommandPoolCreateInfo { VkStructureType sType; const void* pNext; VkCommandPoolCreateFlags flags; uint32_t queueFamilyIndex; } VkCommandPoolCreateInfo; typedef struct VkCommandBufferAllocateInfo { VkStructureType sType; const void* pNext; VkCommandPool commandPool; VkCommandBufferLevel level; uint32_t commandBufferCount; } VkCommandBufferAllocateInfo; typedef struct VkCommandBufferInheritanceInfo { VkStructureType sType; const void* pNext; VkRenderPass renderPass; uint32_t subpass; VkFramebuffer framebuffer; VkBool32 occlusionQueryEnable; VkQueryControlFlags queryFlags; VkQueryPipelineStatisticFlags pipelineStatistics; } VkCommandBufferInheritanceInfo; typedef struct VkCommandBufferBeginInfo { VkStructureType sType; const void* pNext; VkCommandBufferUsageFlags flags; const VkCommandBufferInheritanceInfo* pInheritanceInfo; } VkCommandBufferBeginInfo; typedef struct VkBufferCopy { VkDeviceSize srcOffset; VkDeviceSize dstOffset; VkDeviceSize size; } VkBufferCopy; typedef struct VkImageSubresourceLayers { VkImageAspectFlags aspectMask; uint32_t mipLevel; uint32_t baseArrayLayer; uint32_t layerCount; } VkImageSubresourceLayers; typedef struct VkBufferImageCopy { VkDeviceSize bufferOffset; uint32_t bufferRowLength; uint32_t bufferImageHeight; VkImageSubresourceLayers imageSubresource; VkOffset3D imageOffset; VkExtent3D imageExtent; } VkBufferImageCopy; typedef union VkClearColorValue { float float32[4]; int32_t int32[4]; uint32_t uint32[4]; } VkClearColorValue; typedef struct VkClearDepthStencilValue { float depth; uint32_t stencil; } VkClearDepthStencilValue; typedef union VkClearValue { VkClearColorValue color; VkClearDepthStencilValue depthStencil; } VkClearValue; typedef struct VkClearAttachment { VkImageAspectFlags aspectMask; uint32_t colorAttachment; VkClearValue clearValue; } VkClearAttachment; typedef struct VkClearRect { VkRect2D rect; uint32_t baseArrayLayer; uint32_t layerCount; } VkClearRect; typedef struct VkImageBlit { VkImageSubresourceLayers srcSubresource; VkOffset3D srcOffsets[2]; VkImageSubresourceLayers dstSubresource; VkOffset3D dstOffsets[2]; } VkImageBlit; typedef struct VkImageCopy { VkImageSubresourceLayers srcSubresource; VkOffset3D srcOffset; VkImageSubresourceLayers dstSubresource; VkOffset3D dstOffset; VkExtent3D extent; } VkImageCopy; typedef struct VkImageResolve { VkImageSubresourceLayers srcSubresource; VkOffset3D srcOffset; VkImageSubresourceLayers dstSubresource; VkOffset3D dstOffset; VkExtent3D extent; } VkImageResolve; typedef struct VkRenderPassBeginInfo { VkStructureType sType; const void* pNext; VkRenderPass renderPass; VkFramebuffer framebuffer; VkRect2D renderArea; uint32_t clearValueCount; const VkClearValue* pClearValues; } VkRenderPassBeginInfo; typedef VkResult (VKAPI_PTR *PFN_vkCreateInstance)(const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); typedef void (VKAPI_PTR *PFN_vkDestroyInstance)(VkInstance instance, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDevices)(VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties); typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddr)(VkInstance instance, const char* pName); typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetDeviceProcAddr)(VkDevice device, const char* pName); typedef VkResult (VKAPI_PTR *PFN_vkCreateDevice)(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice); typedef void (VKAPI_PTR *PFN_vkDestroyDevice)(VkDevice device, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceExtensionProperties)(const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceExtensionProperties)(VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceLayerProperties)(uint32_t* pPropertyCount, VkLayerProperties* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkEnumerateDeviceLayerProperties)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties); typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue)(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue); typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); typedef VkResult (VKAPI_PTR *PFN_vkQueueWaitIdle)(VkQueue queue); typedef VkResult (VKAPI_PTR *PFN_vkDeviceWaitIdle)(VkDevice device); typedef VkResult (VKAPI_PTR *PFN_vkAllocateMemory)(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory); typedef void (VKAPI_PTR *PFN_vkFreeMemory)(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkMapMemory)(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData); typedef void (VKAPI_PTR *PFN_vkUnmapMemory)(VkDevice device, VkDeviceMemory memory); typedef VkResult (VKAPI_PTR *PFN_vkFlushMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); typedef VkResult (VKAPI_PTR *PFN_vkInvalidateMappedMemoryRanges)(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); typedef void (VKAPI_PTR *PFN_vkGetDeviceMemoryCommitment)(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes); typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory)(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory)(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements)(VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements)(VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements)(VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkQueueBindSparse)(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); typedef VkResult (VKAPI_PTR *PFN_vkCreateFence)(VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); typedef void (VKAPI_PTR *PFN_vkDestroyFence)(VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkResetFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences); typedef VkResult (VKAPI_PTR *PFN_vkGetFenceStatus)(VkDevice device, VkFence fence); typedef VkResult (VKAPI_PTR *PFN_vkWaitForFences)(VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); typedef VkResult (VKAPI_PTR *PFN_vkCreateSemaphore)(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore); typedef void (VKAPI_PTR *PFN_vkDestroySemaphore)(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateEvent)(VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent); typedef void (VKAPI_PTR *PFN_vkDestroyEvent)(VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkGetEventStatus)(VkDevice device, VkEvent event); typedef VkResult (VKAPI_PTR *PFN_vkSetEvent)(VkDevice device, VkEvent event); typedef VkResult (VKAPI_PTR *PFN_vkResetEvent)(VkDevice device, VkEvent event); typedef VkResult (VKAPI_PTR *PFN_vkCreateQueryPool)(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool); typedef void (VKAPI_PTR *PFN_vkDestroyQueryPool)(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkGetQueryPoolResults)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags); typedef VkResult (VKAPI_PTR *PFN_vkCreateBuffer)(VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer); typedef void (VKAPI_PTR *PFN_vkDestroyBuffer)(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferView)(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView); typedef void (VKAPI_PTR *PFN_vkDestroyBufferView)(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateImage)(VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage); typedef void (VKAPI_PTR *PFN_vkDestroyImage)(VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout)(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout); typedef VkResult (VKAPI_PTR *PFN_vkCreateImageView)(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView); typedef void (VKAPI_PTR *PFN_vkDestroyImageView)(VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateShaderModule)(VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule); typedef void (VKAPI_PTR *PFN_vkDestroyShaderModule)(VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineCache)(VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache); typedef void (VKAPI_PTR *PFN_vkDestroyPipelineCache)(VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineCacheData)(VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData); typedef VkResult (VKAPI_PTR *PFN_vkMergePipelineCaches)(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches); typedef VkResult (VKAPI_PTR *PFN_vkCreateGraphicsPipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); typedef VkResult (VKAPI_PTR *PFN_vkCreateComputePipelines)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); typedef void (VKAPI_PTR *PFN_vkDestroyPipeline)(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreatePipelineLayout)(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout); typedef void (VKAPI_PTR *PFN_vkDestroyPipelineLayout)(VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateSampler)(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler); typedef void (VKAPI_PTR *PFN_vkDestroySampler)(VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorSetLayout)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout); typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorSetLayout)(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorPool)(VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool); typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkResetDescriptorPool)(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); typedef VkResult (VKAPI_PTR *PFN_vkAllocateDescriptorSets)(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets); typedef VkResult (VKAPI_PTR *PFN_vkFreeDescriptorSets)(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSets)(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies); typedef VkResult (VKAPI_PTR *PFN_vkCreateFramebuffer)(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer); typedef void (VKAPI_PTR *PFN_vkDestroyFramebuffer)(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass)(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); typedef void (VKAPI_PTR *PFN_vkDestroyRenderPass)(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkGetRenderAreaGranularity)(VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity); typedef VkResult (VKAPI_PTR *PFN_vkCreateCommandPool)(VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool); typedef void (VKAPI_PTR *PFN_vkDestroyCommandPool)(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkResetCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); typedef VkResult (VKAPI_PTR *PFN_vkAllocateCommandBuffers)(VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); typedef void (VKAPI_PTR *PFN_vkFreeCommandBuffers)(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); typedef VkResult (VKAPI_PTR *PFN_vkBeginCommandBuffer)(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); typedef VkResult (VKAPI_PTR *PFN_vkEndCommandBuffer)(VkCommandBuffer commandBuffer); typedef VkResult (VKAPI_PTR *PFN_vkResetCommandBuffer)(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); typedef void (VKAPI_PTR *PFN_vkCmdBindPipeline)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); typedef void (VKAPI_PTR *PFN_vkCmdSetViewport)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports); typedef void (VKAPI_PTR *PFN_vkCmdSetScissor)(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors); typedef void (VKAPI_PTR *PFN_vkCmdSetLineWidth)(VkCommandBuffer commandBuffer, float lineWidth); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBias)(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor); typedef void (VKAPI_PTR *PFN_vkCmdSetBlendConstants)(VkCommandBuffer commandBuffer, const float blendConstants[4]); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBounds)(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds); typedef void (VKAPI_PTR *PFN_vkCmdSetStencilCompareMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask); typedef void (VKAPI_PTR *PFN_vkCmdSetStencilWriteMask)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask); typedef void (VKAPI_PTR *PFN_vkCmdSetStencilReference)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference); typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType); typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets); typedef void (VKAPI_PTR *PFN_vkCmdDraw)(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexed)(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); typedef void (VKAPI_PTR *PFN_vkCmdDispatch)(VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); typedef void (VKAPI_PTR *PFN_vkCmdDispatchIndirect)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions); typedef void (VKAPI_PTR *PFN_vkCmdCopyImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions); typedef void (VKAPI_PTR *PFN_vkCmdBlitImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter); typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage)(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions); typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions); typedef void (VKAPI_PTR *PFN_vkCmdUpdateBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData); typedef void (VKAPI_PTR *PFN_vkCmdFillBuffer)(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data); typedef void (VKAPI_PTR *PFN_vkCmdClearColorImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); typedef void (VKAPI_PTR *PFN_vkCmdClearDepthStencilImage)(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); typedef void (VKAPI_PTR *PFN_vkCmdClearAttachments)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects); typedef void (VKAPI_PTR *PFN_vkCmdResolveImage)(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions); typedef void (VKAPI_PTR *PFN_vkCmdSetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); typedef void (VKAPI_PTR *PFN_vkCmdResetEvent)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier)(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); typedef void (VKAPI_PTR *PFN_vkCmdBeginQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); typedef void (VKAPI_PTR *PFN_vkCmdEndQuery)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query); typedef void (VKAPI_PTR *PFN_vkCmdResetQueryPool)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query); typedef void (VKAPI_PTR *PFN_vkCmdCopyQueryPoolResults)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags); typedef void (VKAPI_PTR *PFN_vkCmdPushConstants)(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues); typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents); typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass)(VkCommandBuffer commandBuffer, VkSubpassContents contents); typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass)(VkCommandBuffer commandBuffer); typedef void (VKAPI_PTR *PFN_vkCmdExecuteCommands)(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance( const VkInstanceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkInstance* pInstance); VKAPI_ATTR void VKAPI_CALL vkDestroyInstance( VkInstance instance, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices( VkInstance instance, uint32_t* pPhysicalDeviceCount, VkPhysicalDevice* pPhysicalDevices); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures* pFeatures); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties* pFormatProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties( VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties* pImageFormatProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties* pProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties( VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties* pQueueFamilyProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties* pMemoryProperties); VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr( VkInstance instance, const char* pName); VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr( VkDevice device, const char* pName); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice( VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice); VKAPI_ATTR void VKAPI_CALL vkDestroyDevice( VkDevice device, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties( const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties( VkPhysicalDevice physicalDevice, const char* pLayerName, uint32_t* pPropertyCount, VkExtensionProperties* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties( uint32_t* pPropertyCount, VkLayerProperties* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkLayerProperties* pProperties); VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue( VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue* pQueue); VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit( VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence); VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle( VkQueue queue); VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle( VkDevice device); VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory( VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory); VKAPI_ATTR void VKAPI_CALL vkFreeMemory( VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory( VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, VkMemoryMapFlags flags, void** ppData); VKAPI_ATTR void VKAPI_CALL vkUnmapMemory( VkDevice device, VkDeviceMemory memory); VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges( VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges( VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges); VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment( VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes); VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory( VkDevice device, VkBuffer buffer, VkDeviceMemory memory, VkDeviceSize memoryOffset); VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory( VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset); VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements( VkDevice device, VkBuffer buffer, VkMemoryRequirements* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements( VkDevice device, VkImage image, VkMemoryRequirements* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements( VkDevice device, VkImage image, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements* pSparseMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties( VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, uint32_t* pPropertyCount, VkSparseImageFormatProperties* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse( VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence); VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence( VkDevice device, const VkFenceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); VKAPI_ATTR void VKAPI_CALL vkDestroyFence( VkDevice device, VkFence fence, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkResetFences( VkDevice device, uint32_t fenceCount, const VkFence* pFences); VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus( VkDevice device, VkFence fence); VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences( VkDevice device, uint32_t fenceCount, const VkFence* pFences, VkBool32 waitAll, uint64_t timeout); VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore( VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSemaphore* pSemaphore); VKAPI_ATTR void VKAPI_CALL vkDestroySemaphore( VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent( VkDevice device, const VkEventCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkEvent* pEvent); VKAPI_ATTR void VKAPI_CALL vkDestroyEvent( VkDevice device, VkEvent event, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus( VkDevice device, VkEvent event); VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent( VkDevice device, VkEvent event); VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent( VkDevice device, VkEvent event); VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool( VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkQueryPool* pQueryPool); VKAPI_ATTR void VKAPI_CALL vkDestroyQueryPool( VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, size_t dataSize, void* pData, VkDeviceSize stride, VkQueryResultFlags flags); VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer( VkDevice device, const VkBufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBuffer* pBuffer); VKAPI_ATTR void VKAPI_CALL vkDestroyBuffer( VkDevice device, VkBuffer buffer, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView( VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferView* pView); VKAPI_ATTR void VKAPI_CALL vkDestroyBufferView( VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage( VkDevice device, const VkImageCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImage* pImage); VKAPI_ATTR void VKAPI_CALL vkDestroyImage( VkDevice device, VkImage image, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout( VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceLayout* pLayout); VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView( VkDevice device, const VkImageViewCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkImageView* pView); VKAPI_ATTR void VKAPI_CALL vkDestroyImageView( VkDevice device, VkImageView imageView, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule( VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule); VKAPI_ATTR void VKAPI_CALL vkDestroyShaderModule( VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache( VkDevice device, const VkPipelineCacheCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineCache* pPipelineCache); VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineCache( VkDevice device, VkPipelineCache pipelineCache, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData( VkDevice device, VkPipelineCache pipelineCache, size_t* pDataSize, void* pData); VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches( VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, const VkPipelineCache* pSrcCaches); VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines( VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkGraphicsPipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines( VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkComputePipelineCreateInfo* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); VKAPI_ATTR void VKAPI_CALL vkDestroyPipeline( VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout( VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPipelineLayout* pPipelineLayout); VKAPI_ATTR void VKAPI_CALL vkDestroyPipelineLayout( VkDevice device, VkPipelineLayout pipelineLayout, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler( VkDevice device, const VkSamplerCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSampler* pSampler); VKAPI_ATTR void VKAPI_CALL vkDestroySampler( VkDevice device, VkSampler sampler, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout( VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorSetLayout* pSetLayout); VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorSetLayout( VkDevice device, VkDescriptorSetLayout descriptorSetLayout, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool( VkDevice device, const VkDescriptorPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorPool* pDescriptorPool); VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorPool( VkDevice device, VkDescriptorPool descriptorPool, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool( VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorPoolResetFlags flags); VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets( VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets); VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets( VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets); VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets( VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies); VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer( VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer); VKAPI_ATTR void VKAPI_CALL vkDestroyFramebuffer( VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass( VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); VKAPI_ATTR void VKAPI_CALL vkDestroyRenderPass( VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity( VkDevice device, VkRenderPass renderPass, VkExtent2D* pGranularity); VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool( VkDevice device, const VkCommandPoolCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCommandPool* pCommandPool); VKAPI_ATTR void VKAPI_CALL vkDestroyCommandPool( VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool( VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags); VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers( VkDevice device, const VkCommandBufferAllocateInfo* pAllocateInfo, VkCommandBuffer* pCommandBuffers); VKAPI_ATTR void VKAPI_CALL vkFreeCommandBuffers( VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer( VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo* pBeginInfo); VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer( VkCommandBuffer commandBuffer); VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer( VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags); VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline); VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport( VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports); VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor( VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors); VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth( VkCommandBuffer commandBuffer, float lineWidth); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias( VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor); VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants( VkCommandBuffer commandBuffer, const float blendConstants[4]); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds( VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds); VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask); VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask); VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference); VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets); VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType); VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers( VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets); VKAPI_ATTR void VKAPI_CALL vkCmdDraw( VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed( VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdDispatch( VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset); VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer( VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions); VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions); VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageBlit* pRegions, VkFilter filter); VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage( VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions); VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions); VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize dataSize, const void* pData); VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer( VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize size, uint32_t data); VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage( VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearColorValue* pColor, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage( VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, const VkClearDepthStencilValue* pDepthStencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges); VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments( VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkClearAttachment* pAttachments, uint32_t rectCount, const VkClearRect* pRects); VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage( VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageResolve* pRegions); VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask); VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents( VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier( VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const VkMemoryBarrier* pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier* pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier* pImageMemoryBarriers); VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags); VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query); VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp( VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, uint32_t query); VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, VkDeviceSize stride, VkQueryResultFlags flags); VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants( VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, uint32_t offset, uint32_t size, const void* pValues); VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass( VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, VkSubpassContents contents); VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass( VkCommandBuffer commandBuffer, VkSubpassContents contents); VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass( VkCommandBuffer commandBuffer); VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands( VkCommandBuffer commandBuffer, uint32_t commandBufferCount, const VkCommandBuffer* pCommandBuffers); #endif #define VK_VERSION_1_1 1 // Vulkan 1.1 version number #define VK_API_VERSION_1_1 VK_MAKE_API_VERSION(0, 1, 1, 0)// Patch version should always be set to 0 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSamplerYcbcrConversion) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorUpdateTemplate) #define VK_MAX_DEVICE_GROUP_SIZE 32U #define VK_LUID_SIZE 8U #define VK_QUEUE_FAMILY_EXTERNAL (~1U) typedef enum VkPointClippingBehavior { VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = 0, VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = 1, VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES, VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY, VK_POINT_CLIPPING_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF } VkPointClippingBehavior; typedef enum VkTessellationDomainOrigin { VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = 0, VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = 1, VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT, VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT, VK_TESSELLATION_DOMAIN_ORIGIN_MAX_ENUM = 0x7FFFFFFF } VkTessellationDomainOrigin; typedef enum VkSamplerYcbcrModelConversion { VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = 0, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = 1, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = 2, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = 3, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = 4, VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601, VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020, VK_SAMPLER_YCBCR_MODEL_CONVERSION_MAX_ENUM = 0x7FFFFFFF } VkSamplerYcbcrModelConversion; typedef enum VkSamplerYcbcrRange { VK_SAMPLER_YCBCR_RANGE_ITU_FULL = 0, VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = 1, VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL, VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW, VK_SAMPLER_YCBCR_RANGE_MAX_ENUM = 0x7FFFFFFF } VkSamplerYcbcrRange; typedef enum VkChromaLocation { VK_CHROMA_LOCATION_COSITED_EVEN = 0, VK_CHROMA_LOCATION_MIDPOINT = 1, VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN, VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT, VK_CHROMA_LOCATION_MAX_ENUM = 0x7FFFFFFF } VkChromaLocation; typedef enum VkDescriptorUpdateTemplateType { VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkDescriptorUpdateTemplateType; typedef enum VkSubgroupFeatureFlagBits { VK_SUBGROUP_FEATURE_BASIC_BIT = 0x00000001, VK_SUBGROUP_FEATURE_VOTE_BIT = 0x00000002, VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = 0x00000004, VK_SUBGROUP_FEATURE_BALLOT_BIT = 0x00000008, VK_SUBGROUP_FEATURE_SHUFFLE_BIT = 0x00000010, VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020, VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040, VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080, VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100, VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSubgroupFeatureFlagBits; typedef VkFlags VkSubgroupFeatureFlags; typedef enum VkPeerMemoryFeatureFlagBits { VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = 0x00000001, VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = 0x00000002, VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = 0x00000004, VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = 0x00000008, VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT, VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT, VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT, VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT, VK_PEER_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPeerMemoryFeatureFlagBits; typedef VkFlags VkPeerMemoryFeatureFlags; typedef enum VkMemoryAllocateFlagBits { VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004, VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, VK_MEMORY_ALLOCATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkMemoryAllocateFlagBits; typedef VkFlags VkMemoryAllocateFlags; typedef VkFlags VkCommandPoolTrimFlags; typedef VkFlags VkDescriptorUpdateTemplateCreateFlags; typedef enum VkExternalMemoryHandleTypeFlagBits { VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = 0x00000008, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = 0x00000010, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = 0x00000020, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = 0x00000040, VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = 0x00000200, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = 0x00000400, VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = 0x00000080, VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = 0x00000100, VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkExternalMemoryHandleTypeFlagBits; typedef VkFlags VkExternalMemoryHandleTypeFlags; typedef enum VkExternalMemoryFeatureFlagBits { VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = 0x00000001, VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = 0x00000002, VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = 0x00000004, VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT, VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT, VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT, VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkExternalMemoryFeatureFlagBits; typedef VkFlags VkExternalMemoryFeatureFlags; typedef enum VkExternalFenceHandleTypeFlagBits { VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000008, VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT, VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT, VK_EXTERNAL_FENCE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkExternalFenceHandleTypeFlagBits; typedef VkFlags VkExternalFenceHandleTypeFlags; typedef enum VkExternalFenceFeatureFlagBits { VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = 0x00000001, VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = 0x00000002, VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT, VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT, VK_EXTERNAL_FENCE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkExternalFenceFeatureFlagBits; typedef VkFlags VkExternalFenceFeatureFlags; typedef enum VkFenceImportFlagBits { VK_FENCE_IMPORT_TEMPORARY_BIT = 0x00000001, VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT, VK_FENCE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkFenceImportFlagBits; typedef VkFlags VkFenceImportFlags; typedef enum VkSemaphoreImportFlagBits { VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = 0x00000001, VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, VK_SEMAPHORE_IMPORT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSemaphoreImportFlagBits; typedef VkFlags VkSemaphoreImportFlags; typedef enum VkExternalSemaphoreHandleTypeFlagBits { VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = 0x00000001, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = 0x00000002, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = 0x00000004, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = 0x00000008, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = 0x00000010, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_ZIRCON_EVENT_BIT_FUCHSIA = 0x00000080, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D11_FENCE_BIT = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT, VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkExternalSemaphoreHandleTypeFlagBits; typedef VkFlags VkExternalSemaphoreHandleTypeFlags; typedef enum VkExternalSemaphoreFeatureFlagBits { VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = 0x00000001, VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = 0x00000002, VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT, VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT, VK_EXTERNAL_SEMAPHORE_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkExternalSemaphoreFeatureFlagBits; typedef VkFlags VkExternalSemaphoreFeatureFlags; typedef struct VkPhysicalDeviceSubgroupProperties { VkStructureType sType; void* pNext; uint32_t subgroupSize; VkShaderStageFlags supportedStages; VkSubgroupFeatureFlags supportedOperations; VkBool32 quadOperationsInAllStages; } VkPhysicalDeviceSubgroupProperties; typedef struct VkBindBufferMemoryInfo { VkStructureType sType; const void* pNext; VkBuffer buffer; VkDeviceMemory memory; VkDeviceSize memoryOffset; } VkBindBufferMemoryInfo; typedef struct VkBindImageMemoryInfo { VkStructureType sType; const void* pNext; VkImage image; VkDeviceMemory memory; VkDeviceSize memoryOffset; } VkBindImageMemoryInfo; typedef struct VkPhysicalDevice16BitStorageFeatures { VkStructureType sType; void* pNext; VkBool32 storageBuffer16BitAccess; VkBool32 uniformAndStorageBuffer16BitAccess; VkBool32 storagePushConstant16; VkBool32 storageInputOutput16; } VkPhysicalDevice16BitStorageFeatures; typedef struct VkMemoryDedicatedRequirements { VkStructureType sType; void* pNext; VkBool32 prefersDedicatedAllocation; VkBool32 requiresDedicatedAllocation; } VkMemoryDedicatedRequirements; typedef struct VkMemoryDedicatedAllocateInfo { VkStructureType sType; const void* pNext; VkImage image; VkBuffer buffer; } VkMemoryDedicatedAllocateInfo; typedef struct VkMemoryAllocateFlagsInfo { VkStructureType sType; const void* pNext; VkMemoryAllocateFlags flags; uint32_t deviceMask; } VkMemoryAllocateFlagsInfo; typedef struct VkDeviceGroupRenderPassBeginInfo { VkStructureType sType; const void* pNext; uint32_t deviceMask; uint32_t deviceRenderAreaCount; const VkRect2D* pDeviceRenderAreas; } VkDeviceGroupRenderPassBeginInfo; typedef struct VkDeviceGroupCommandBufferBeginInfo { VkStructureType sType; const void* pNext; uint32_t deviceMask; } VkDeviceGroupCommandBufferBeginInfo; typedef struct VkDeviceGroupSubmitInfo { VkStructureType sType; const void* pNext; uint32_t waitSemaphoreCount; const uint32_t* pWaitSemaphoreDeviceIndices; uint32_t commandBufferCount; const uint32_t* pCommandBufferDeviceMasks; uint32_t signalSemaphoreCount; const uint32_t* pSignalSemaphoreDeviceIndices; } VkDeviceGroupSubmitInfo; typedef struct VkDeviceGroupBindSparseInfo { VkStructureType sType; const void* pNext; uint32_t resourceDeviceIndex; uint32_t memoryDeviceIndex; } VkDeviceGroupBindSparseInfo; typedef struct VkBindBufferMemoryDeviceGroupInfo { VkStructureType sType; const void* pNext; uint32_t deviceIndexCount; const uint32_t* pDeviceIndices; } VkBindBufferMemoryDeviceGroupInfo; typedef struct VkBindImageMemoryDeviceGroupInfo { VkStructureType sType; const void* pNext; uint32_t deviceIndexCount; const uint32_t* pDeviceIndices; uint32_t splitInstanceBindRegionCount; const VkRect2D* pSplitInstanceBindRegions; } VkBindImageMemoryDeviceGroupInfo; typedef struct VkPhysicalDeviceGroupProperties { VkStructureType sType; void* pNext; uint32_t physicalDeviceCount; VkPhysicalDevice physicalDevices[VK_MAX_DEVICE_GROUP_SIZE]; VkBool32 subsetAllocation; } VkPhysicalDeviceGroupProperties; typedef struct VkDeviceGroupDeviceCreateInfo { VkStructureType sType; const void* pNext; uint32_t physicalDeviceCount; const VkPhysicalDevice* pPhysicalDevices; } VkDeviceGroupDeviceCreateInfo; typedef struct VkBufferMemoryRequirementsInfo2 { VkStructureType sType; const void* pNext; VkBuffer buffer; } VkBufferMemoryRequirementsInfo2; typedef struct VkImageMemoryRequirementsInfo2 { VkStructureType sType; const void* pNext; VkImage image; } VkImageMemoryRequirementsInfo2; typedef struct VkImageSparseMemoryRequirementsInfo2 { VkStructureType sType; const void* pNext; VkImage image; } VkImageSparseMemoryRequirementsInfo2; typedef struct VkMemoryRequirements2 { VkStructureType sType; void* pNext; VkMemoryRequirements memoryRequirements; } VkMemoryRequirements2; typedef struct VkSparseImageMemoryRequirements2 { VkStructureType sType; void* pNext; VkSparseImageMemoryRequirements memoryRequirements; } VkSparseImageMemoryRequirements2; typedef struct VkPhysicalDeviceFeatures2 { VkStructureType sType; void* pNext; VkPhysicalDeviceFeatures features; } VkPhysicalDeviceFeatures2; typedef struct VkPhysicalDeviceProperties2 { VkStructureType sType; void* pNext; VkPhysicalDeviceProperties properties; } VkPhysicalDeviceProperties2; typedef struct VkFormatProperties2 { VkStructureType sType; void* pNext; VkFormatProperties formatProperties; } VkFormatProperties2; typedef struct VkImageFormatProperties2 { VkStructureType sType; void* pNext; VkImageFormatProperties imageFormatProperties; } VkImageFormatProperties2; typedef struct VkPhysicalDeviceImageFormatInfo2 { VkStructureType sType; const void* pNext; VkFormat format; VkImageType type; VkImageTiling tiling; VkImageUsageFlags usage; VkImageCreateFlags flags; } VkPhysicalDeviceImageFormatInfo2; typedef struct VkQueueFamilyProperties2 { VkStructureType sType; void* pNext; VkQueueFamilyProperties queueFamilyProperties; } VkQueueFamilyProperties2; typedef struct VkPhysicalDeviceMemoryProperties2 { VkStructureType sType; void* pNext; VkPhysicalDeviceMemoryProperties memoryProperties; } VkPhysicalDeviceMemoryProperties2; typedef struct VkSparseImageFormatProperties2 { VkStructureType sType; void* pNext; VkSparseImageFormatProperties properties; } VkSparseImageFormatProperties2; typedef struct VkPhysicalDeviceSparseImageFormatInfo2 { VkStructureType sType; const void* pNext; VkFormat format; VkImageType type; VkSampleCountFlagBits samples; VkImageUsageFlags usage; VkImageTiling tiling; } VkPhysicalDeviceSparseImageFormatInfo2; typedef struct VkPhysicalDevicePointClippingProperties { VkStructureType sType; void* pNext; VkPointClippingBehavior pointClippingBehavior; } VkPhysicalDevicePointClippingProperties; typedef struct VkInputAttachmentAspectReference { uint32_t subpass; uint32_t inputAttachmentIndex; VkImageAspectFlags aspectMask; } VkInputAttachmentAspectReference; typedef struct VkRenderPassInputAttachmentAspectCreateInfo { VkStructureType sType; const void* pNext; uint32_t aspectReferenceCount; const VkInputAttachmentAspectReference* pAspectReferences; } VkRenderPassInputAttachmentAspectCreateInfo; typedef struct VkImageViewUsageCreateInfo { VkStructureType sType; const void* pNext; VkImageUsageFlags usage; } VkImageViewUsageCreateInfo; typedef struct VkPipelineTessellationDomainOriginStateCreateInfo { VkStructureType sType; const void* pNext; VkTessellationDomainOrigin domainOrigin; } VkPipelineTessellationDomainOriginStateCreateInfo; typedef struct VkRenderPassMultiviewCreateInfo { VkStructureType sType; const void* pNext; uint32_t subpassCount; const uint32_t* pViewMasks; uint32_t dependencyCount; const int32_t* pViewOffsets; uint32_t correlationMaskCount; const uint32_t* pCorrelationMasks; } VkRenderPassMultiviewCreateInfo; typedef struct VkPhysicalDeviceMultiviewFeatures { VkStructureType sType; void* pNext; VkBool32 multiview; VkBool32 multiviewGeometryShader; VkBool32 multiviewTessellationShader; } VkPhysicalDeviceMultiviewFeatures; typedef struct VkPhysicalDeviceMultiviewProperties { VkStructureType sType; void* pNext; uint32_t maxMultiviewViewCount; uint32_t maxMultiviewInstanceIndex; } VkPhysicalDeviceMultiviewProperties; typedef struct VkPhysicalDeviceVariablePointersFeatures { VkStructureType sType; void* pNext; VkBool32 variablePointersStorageBuffer; VkBool32 variablePointers; } VkPhysicalDeviceVariablePointersFeatures; typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeatures; typedef struct VkPhysicalDeviceProtectedMemoryFeatures { VkStructureType sType; void* pNext; VkBool32 protectedMemory; } VkPhysicalDeviceProtectedMemoryFeatures; typedef struct VkPhysicalDeviceProtectedMemoryProperties { VkStructureType sType; void* pNext; VkBool32 protectedNoFault; } VkPhysicalDeviceProtectedMemoryProperties; typedef struct VkDeviceQueueInfo2 { VkStructureType sType; const void* pNext; VkDeviceQueueCreateFlags flags; uint32_t queueFamilyIndex; uint32_t queueIndex; } VkDeviceQueueInfo2; typedef struct VkProtectedSubmitInfo { VkStructureType sType; const void* pNext; VkBool32 protectedSubmit; } VkProtectedSubmitInfo; typedef struct VkSamplerYcbcrConversionCreateInfo { VkStructureType sType; const void* pNext; VkFormat format; VkSamplerYcbcrModelConversion ycbcrModel; VkSamplerYcbcrRange ycbcrRange; VkComponentMapping components; VkChromaLocation xChromaOffset; VkChromaLocation yChromaOffset; VkFilter chromaFilter; VkBool32 forceExplicitReconstruction; } VkSamplerYcbcrConversionCreateInfo; typedef struct VkSamplerYcbcrConversionInfo { VkStructureType sType; const void* pNext; VkSamplerYcbcrConversion conversion; } VkSamplerYcbcrConversionInfo; typedef struct VkBindImagePlaneMemoryInfo { VkStructureType sType; const void* pNext; VkImageAspectFlagBits planeAspect; } VkBindImagePlaneMemoryInfo; typedef struct VkImagePlaneMemoryRequirementsInfo { VkStructureType sType; const void* pNext; VkImageAspectFlagBits planeAspect; } VkImagePlaneMemoryRequirementsInfo; typedef struct VkPhysicalDeviceSamplerYcbcrConversionFeatures { VkStructureType sType; void* pNext; VkBool32 samplerYcbcrConversion; } VkPhysicalDeviceSamplerYcbcrConversionFeatures; typedef struct VkSamplerYcbcrConversionImageFormatProperties { VkStructureType sType; void* pNext; uint32_t combinedImageSamplerDescriptorCount; } VkSamplerYcbcrConversionImageFormatProperties; typedef struct VkDescriptorUpdateTemplateEntry { uint32_t dstBinding; uint32_t dstArrayElement; uint32_t descriptorCount; VkDescriptorType descriptorType; size_t offset; size_t stride; } VkDescriptorUpdateTemplateEntry; typedef struct VkDescriptorUpdateTemplateCreateInfo { VkStructureType sType; const void* pNext; VkDescriptorUpdateTemplateCreateFlags flags; uint32_t descriptorUpdateEntryCount; const VkDescriptorUpdateTemplateEntry* pDescriptorUpdateEntries; VkDescriptorUpdateTemplateType templateType; VkDescriptorSetLayout descriptorSetLayout; VkPipelineBindPoint pipelineBindPoint; VkPipelineLayout pipelineLayout; uint32_t set; } VkDescriptorUpdateTemplateCreateInfo; typedef struct VkExternalMemoryProperties { VkExternalMemoryFeatureFlags externalMemoryFeatures; VkExternalMemoryHandleTypeFlags exportFromImportedHandleTypes; VkExternalMemoryHandleTypeFlags compatibleHandleTypes; } VkExternalMemoryProperties; typedef struct VkPhysicalDeviceExternalImageFormatInfo { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagBits handleType; } VkPhysicalDeviceExternalImageFormatInfo; typedef struct VkExternalImageFormatProperties { VkStructureType sType; void* pNext; VkExternalMemoryProperties externalMemoryProperties; } VkExternalImageFormatProperties; typedef struct VkPhysicalDeviceExternalBufferInfo { VkStructureType sType; const void* pNext; VkBufferCreateFlags flags; VkBufferUsageFlags usage; VkExternalMemoryHandleTypeFlagBits handleType; } VkPhysicalDeviceExternalBufferInfo; typedef struct VkExternalBufferProperties { VkStructureType sType; void* pNext; VkExternalMemoryProperties externalMemoryProperties; } VkExternalBufferProperties; typedef struct VkPhysicalDeviceIDProperties { VkStructureType sType; void* pNext; uint8_t deviceUUID[VK_UUID_SIZE]; uint8_t driverUUID[VK_UUID_SIZE]; uint8_t deviceLUID[VK_LUID_SIZE]; uint32_t deviceNodeMask; VkBool32 deviceLUIDValid; } VkPhysicalDeviceIDProperties; typedef struct VkExternalMemoryImageCreateInfo { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlags handleTypes; } VkExternalMemoryImageCreateInfo; typedef struct VkExternalMemoryBufferCreateInfo { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlags handleTypes; } VkExternalMemoryBufferCreateInfo; typedef struct VkExportMemoryAllocateInfo { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlags handleTypes; } VkExportMemoryAllocateInfo; typedef struct VkPhysicalDeviceExternalFenceInfo { VkStructureType sType; const void* pNext; VkExternalFenceHandleTypeFlagBits handleType; } VkPhysicalDeviceExternalFenceInfo; typedef struct VkExternalFenceProperties { VkStructureType sType; void* pNext; VkExternalFenceHandleTypeFlags exportFromImportedHandleTypes; VkExternalFenceHandleTypeFlags compatibleHandleTypes; VkExternalFenceFeatureFlags externalFenceFeatures; } VkExternalFenceProperties; typedef struct VkExportFenceCreateInfo { VkStructureType sType; const void* pNext; VkExternalFenceHandleTypeFlags handleTypes; } VkExportFenceCreateInfo; typedef struct VkExportSemaphoreCreateInfo { VkStructureType sType; const void* pNext; VkExternalSemaphoreHandleTypeFlags handleTypes; } VkExportSemaphoreCreateInfo; typedef struct VkPhysicalDeviceExternalSemaphoreInfo { VkStructureType sType; const void* pNext; VkExternalSemaphoreHandleTypeFlagBits handleType; } VkPhysicalDeviceExternalSemaphoreInfo; typedef struct VkExternalSemaphoreProperties { VkStructureType sType; void* pNext; VkExternalSemaphoreHandleTypeFlags exportFromImportedHandleTypes; VkExternalSemaphoreHandleTypeFlags compatibleHandleTypes; VkExternalSemaphoreFeatureFlags externalSemaphoreFeatures; } VkExternalSemaphoreProperties; typedef struct VkPhysicalDeviceMaintenance3Properties { VkStructureType sType; void* pNext; uint32_t maxPerSetDescriptors; VkDeviceSize maxMemoryAllocationSize; } VkPhysicalDeviceMaintenance3Properties; typedef struct VkDescriptorSetLayoutSupport { VkStructureType sType; void* pNext; VkBool32 supported; } VkDescriptorSetLayoutSupport; typedef struct VkPhysicalDeviceShaderDrawParametersFeatures { VkStructureType sType; void* pNext; VkBool32 shaderDrawParameters; } VkPhysicalDeviceShaderDrawParametersFeatures; typedef VkPhysicalDeviceShaderDrawParametersFeatures VkPhysicalDeviceShaderDrawParameterFeatures; typedef VkResult (VKAPI_PTR *PFN_vkEnumerateInstanceVersion)(uint32_t* pApiVersion); typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeatures)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMask)(VkCommandBuffer commandBuffer, uint32_t deviceMask); typedef void (VKAPI_PTR *PFN_vkCmdDispatchBase)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroups)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); typedef void (VKAPI_PTR *PFN_vkTrimCommandPool)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); typedef void (VKAPI_PTR *PFN_vkGetDeviceQueue2)(VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversion)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversion)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplate)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplate)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplate)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFenceProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupport)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceVersion( uint32_t* pApiVersion); VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2( VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2( VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeatures( VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMask( VkCommandBuffer commandBuffer, uint32_t deviceMask); VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBase( VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroups( VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2( VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2( VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2( VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2( VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); VKAPI_ATTR void VKAPI_CALL vkTrimCommandPool( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue2( VkDevice device, const VkDeviceQueueInfo2* pQueueInfo, VkQueue* pQueue); VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversion( VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversion( VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplate( VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplate( VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplate( VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferProperties( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFenceProperties( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphoreProperties( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupport( VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); #endif #define VK_VERSION_1_2 1 // Vulkan 1.2 version number #define VK_API_VERSION_1_2 VK_MAKE_API_VERSION(0, 1, 2, 0)// Patch version should always be set to 0 #define VK_MAX_DRIVER_NAME_SIZE 256U #define VK_MAX_DRIVER_INFO_SIZE 256U typedef enum VkDriverId { VK_DRIVER_ID_AMD_PROPRIETARY = 1, VK_DRIVER_ID_AMD_OPEN_SOURCE = 2, VK_DRIVER_ID_MESA_RADV = 3, VK_DRIVER_ID_NVIDIA_PROPRIETARY = 4, VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS = 5, VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA = 6, VK_DRIVER_ID_IMAGINATION_PROPRIETARY = 7, VK_DRIVER_ID_QUALCOMM_PROPRIETARY = 8, VK_DRIVER_ID_ARM_PROPRIETARY = 9, VK_DRIVER_ID_GOOGLE_SWIFTSHADER = 10, VK_DRIVER_ID_GGP_PROPRIETARY = 11, VK_DRIVER_ID_BROADCOM_PROPRIETARY = 12, VK_DRIVER_ID_MESA_LLVMPIPE = 13, VK_DRIVER_ID_MOLTENVK = 14, VK_DRIVER_ID_COREAVI_PROPRIETARY = 15, VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY, VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE, VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV, VK_DRIVER_ID_NVIDIA_PROPRIETARY_KHR = VK_DRIVER_ID_NVIDIA_PROPRIETARY, VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS_KHR = VK_DRIVER_ID_INTEL_PROPRIETARY_WINDOWS, VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA_KHR = VK_DRIVER_ID_INTEL_OPEN_SOURCE_MESA, VK_DRIVER_ID_IMAGINATION_PROPRIETARY_KHR = VK_DRIVER_ID_IMAGINATION_PROPRIETARY, VK_DRIVER_ID_QUALCOMM_PROPRIETARY_KHR = VK_DRIVER_ID_QUALCOMM_PROPRIETARY, VK_DRIVER_ID_ARM_PROPRIETARY_KHR = VK_DRIVER_ID_ARM_PROPRIETARY, VK_DRIVER_ID_GOOGLE_SWIFTSHADER_KHR = VK_DRIVER_ID_GOOGLE_SWIFTSHADER, VK_DRIVER_ID_GGP_PROPRIETARY_KHR = VK_DRIVER_ID_GGP_PROPRIETARY, VK_DRIVER_ID_BROADCOM_PROPRIETARY_KHR = VK_DRIVER_ID_BROADCOM_PROPRIETARY, VK_DRIVER_ID_MAX_ENUM = 0x7FFFFFFF } VkDriverId; typedef enum VkShaderFloatControlsIndependence { VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY = 0, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL = 1, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE = 2, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR = VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE, VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_MAX_ENUM = 0x7FFFFFFF } VkShaderFloatControlsIndependence; typedef enum VkSamplerReductionMode { VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE = 0, VK_SAMPLER_REDUCTION_MODE_MIN = 1, VK_SAMPLER_REDUCTION_MODE_MAX = 2, VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE, VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VK_SAMPLER_REDUCTION_MODE_MIN, VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VK_SAMPLER_REDUCTION_MODE_MAX, VK_SAMPLER_REDUCTION_MODE_MAX_ENUM = 0x7FFFFFFF } VkSamplerReductionMode; typedef enum VkSemaphoreType { VK_SEMAPHORE_TYPE_BINARY = 0, VK_SEMAPHORE_TYPE_TIMELINE = 1, VK_SEMAPHORE_TYPE_BINARY_KHR = VK_SEMAPHORE_TYPE_BINARY, VK_SEMAPHORE_TYPE_TIMELINE_KHR = VK_SEMAPHORE_TYPE_TIMELINE, VK_SEMAPHORE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkSemaphoreType; typedef enum VkResolveModeFlagBits { VK_RESOLVE_MODE_NONE = 0, VK_RESOLVE_MODE_SAMPLE_ZERO_BIT = 0x00000001, VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002, VK_RESOLVE_MODE_MIN_BIT = 0x00000004, VK_RESOLVE_MODE_MAX_BIT = 0x00000008, VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE, VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT, VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT, VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT, VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkResolveModeFlagBits; typedef VkFlags VkResolveModeFlags; typedef enum VkDescriptorBindingFlagBits { VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT = 0x00000001, VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT = 0x00000002, VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT = 0x00000004, VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT = 0x00000008, VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT, VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT, VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT, VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT, VK_DESCRIPTOR_BINDING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkDescriptorBindingFlagBits; typedef VkFlags VkDescriptorBindingFlags; typedef enum VkSemaphoreWaitFlagBits { VK_SEMAPHORE_WAIT_ANY_BIT = 0x00000001, VK_SEMAPHORE_WAIT_ANY_BIT_KHR = VK_SEMAPHORE_WAIT_ANY_BIT, VK_SEMAPHORE_WAIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSemaphoreWaitFlagBits; typedef VkFlags VkSemaphoreWaitFlags; typedef struct VkPhysicalDeviceVulkan11Features { VkStructureType sType; void* pNext; VkBool32 storageBuffer16BitAccess; VkBool32 uniformAndStorageBuffer16BitAccess; VkBool32 storagePushConstant16; VkBool32 storageInputOutput16; VkBool32 multiview; VkBool32 multiviewGeometryShader; VkBool32 multiviewTessellationShader; VkBool32 variablePointersStorageBuffer; VkBool32 variablePointers; VkBool32 protectedMemory; VkBool32 samplerYcbcrConversion; VkBool32 shaderDrawParameters; } VkPhysicalDeviceVulkan11Features; typedef struct VkPhysicalDeviceVulkan11Properties { VkStructureType sType; void* pNext; uint8_t deviceUUID[VK_UUID_SIZE]; uint8_t driverUUID[VK_UUID_SIZE]; uint8_t deviceLUID[VK_LUID_SIZE]; uint32_t deviceNodeMask; VkBool32 deviceLUIDValid; uint32_t subgroupSize; VkShaderStageFlags subgroupSupportedStages; VkSubgroupFeatureFlags subgroupSupportedOperations; VkBool32 subgroupQuadOperationsInAllStages; VkPointClippingBehavior pointClippingBehavior; uint32_t maxMultiviewViewCount; uint32_t maxMultiviewInstanceIndex; VkBool32 protectedNoFault; uint32_t maxPerSetDescriptors; VkDeviceSize maxMemoryAllocationSize; } VkPhysicalDeviceVulkan11Properties; typedef struct VkPhysicalDeviceVulkan12Features { VkStructureType sType; void* pNext; VkBool32 samplerMirrorClampToEdge; VkBool32 drawIndirectCount; VkBool32 storageBuffer8BitAccess; VkBool32 uniformAndStorageBuffer8BitAccess; VkBool32 storagePushConstant8; VkBool32 shaderBufferInt64Atomics; VkBool32 shaderSharedInt64Atomics; VkBool32 shaderFloat16; VkBool32 shaderInt8; VkBool32 descriptorIndexing; VkBool32 shaderInputAttachmentArrayDynamicIndexing; VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; VkBool32 shaderUniformBufferArrayNonUniformIndexing; VkBool32 shaderSampledImageArrayNonUniformIndexing; VkBool32 shaderStorageBufferArrayNonUniformIndexing; VkBool32 shaderStorageImageArrayNonUniformIndexing; VkBool32 shaderInputAttachmentArrayNonUniformIndexing; VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; VkBool32 descriptorBindingUniformBufferUpdateAfterBind; VkBool32 descriptorBindingSampledImageUpdateAfterBind; VkBool32 descriptorBindingStorageImageUpdateAfterBind; VkBool32 descriptorBindingStorageBufferUpdateAfterBind; VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; VkBool32 descriptorBindingUpdateUnusedWhilePending; VkBool32 descriptorBindingPartiallyBound; VkBool32 descriptorBindingVariableDescriptorCount; VkBool32 runtimeDescriptorArray; VkBool32 samplerFilterMinmax; VkBool32 scalarBlockLayout; VkBool32 imagelessFramebuffer; VkBool32 uniformBufferStandardLayout; VkBool32 shaderSubgroupExtendedTypes; VkBool32 separateDepthStencilLayouts; VkBool32 hostQueryReset; VkBool32 timelineSemaphore; VkBool32 bufferDeviceAddress; VkBool32 bufferDeviceAddressCaptureReplay; VkBool32 bufferDeviceAddressMultiDevice; VkBool32 vulkanMemoryModel; VkBool32 vulkanMemoryModelDeviceScope; VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; VkBool32 shaderOutputViewportIndex; VkBool32 shaderOutputLayer; VkBool32 subgroupBroadcastDynamicId; } VkPhysicalDeviceVulkan12Features; typedef struct VkConformanceVersion { uint8_t major; uint8_t minor; uint8_t subminor; uint8_t patch; } VkConformanceVersion; typedef struct VkPhysicalDeviceVulkan12Properties { VkStructureType sType; void* pNext; VkDriverId driverID; char driverName[VK_MAX_DRIVER_NAME_SIZE]; char driverInfo[VK_MAX_DRIVER_INFO_SIZE]; VkConformanceVersion conformanceVersion; VkShaderFloatControlsIndependence denormBehaviorIndependence; VkShaderFloatControlsIndependence roundingModeIndependence; VkBool32 shaderSignedZeroInfNanPreserveFloat16; VkBool32 shaderSignedZeroInfNanPreserveFloat32; VkBool32 shaderSignedZeroInfNanPreserveFloat64; VkBool32 shaderDenormPreserveFloat16; VkBool32 shaderDenormPreserveFloat32; VkBool32 shaderDenormPreserveFloat64; VkBool32 shaderDenormFlushToZeroFloat16; VkBool32 shaderDenormFlushToZeroFloat32; VkBool32 shaderDenormFlushToZeroFloat64; VkBool32 shaderRoundingModeRTEFloat16; VkBool32 shaderRoundingModeRTEFloat32; VkBool32 shaderRoundingModeRTEFloat64; VkBool32 shaderRoundingModeRTZFloat16; VkBool32 shaderRoundingModeRTZFloat32; VkBool32 shaderRoundingModeRTZFloat64; uint32_t maxUpdateAfterBindDescriptorsInAllPools; VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; VkBool32 shaderSampledImageArrayNonUniformIndexingNative; VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; VkBool32 shaderStorageImageArrayNonUniformIndexingNative; VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; VkBool32 robustBufferAccessUpdateAfterBind; VkBool32 quadDivergentImplicitLod; uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; uint32_t maxPerStageUpdateAfterBindResources; uint32_t maxDescriptorSetUpdateAfterBindSamplers; uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; uint32_t maxDescriptorSetUpdateAfterBindSampledImages; uint32_t maxDescriptorSetUpdateAfterBindStorageImages; uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; VkResolveModeFlags supportedDepthResolveModes; VkResolveModeFlags supportedStencilResolveModes; VkBool32 independentResolveNone; VkBool32 independentResolve; VkBool32 filterMinmaxSingleComponentFormats; VkBool32 filterMinmaxImageComponentMapping; uint64_t maxTimelineSemaphoreValueDifference; VkSampleCountFlags framebufferIntegerColorSampleCounts; } VkPhysicalDeviceVulkan12Properties; typedef struct VkImageFormatListCreateInfo { VkStructureType sType; const void* pNext; uint32_t viewFormatCount; const VkFormat* pViewFormats; } VkImageFormatListCreateInfo; typedef struct VkAttachmentDescription2 { VkStructureType sType; const void* pNext; VkAttachmentDescriptionFlags flags; VkFormat format; VkSampleCountFlagBits samples; VkAttachmentLoadOp loadOp; VkAttachmentStoreOp storeOp; VkAttachmentLoadOp stencilLoadOp; VkAttachmentStoreOp stencilStoreOp; VkImageLayout initialLayout; VkImageLayout finalLayout; } VkAttachmentDescription2; typedef struct VkAttachmentReference2 { VkStructureType sType; const void* pNext; uint32_t attachment; VkImageLayout layout; VkImageAspectFlags aspectMask; } VkAttachmentReference2; typedef struct VkSubpassDescription2 { VkStructureType sType; const void* pNext; VkSubpassDescriptionFlags flags; VkPipelineBindPoint pipelineBindPoint; uint32_t viewMask; uint32_t inputAttachmentCount; const VkAttachmentReference2* pInputAttachments; uint32_t colorAttachmentCount; const VkAttachmentReference2* pColorAttachments; const VkAttachmentReference2* pResolveAttachments; const VkAttachmentReference2* pDepthStencilAttachment; uint32_t preserveAttachmentCount; const uint32_t* pPreserveAttachments; } VkSubpassDescription2; typedef struct VkSubpassDependency2 { VkStructureType sType; const void* pNext; uint32_t srcSubpass; uint32_t dstSubpass; VkPipelineStageFlags srcStageMask; VkPipelineStageFlags dstStageMask; VkAccessFlags srcAccessMask; VkAccessFlags dstAccessMask; VkDependencyFlags dependencyFlags; int32_t viewOffset; } VkSubpassDependency2; typedef struct VkRenderPassCreateInfo2 { VkStructureType sType; const void* pNext; VkRenderPassCreateFlags flags; uint32_t attachmentCount; const VkAttachmentDescription2* pAttachments; uint32_t subpassCount; const VkSubpassDescription2* pSubpasses; uint32_t dependencyCount; const VkSubpassDependency2* pDependencies; uint32_t correlatedViewMaskCount; const uint32_t* pCorrelatedViewMasks; } VkRenderPassCreateInfo2; typedef struct VkSubpassBeginInfo { VkStructureType sType; const void* pNext; VkSubpassContents contents; } VkSubpassBeginInfo; typedef struct VkSubpassEndInfo { VkStructureType sType; const void* pNext; } VkSubpassEndInfo; typedef struct VkPhysicalDevice8BitStorageFeatures { VkStructureType sType; void* pNext; VkBool32 storageBuffer8BitAccess; VkBool32 uniformAndStorageBuffer8BitAccess; VkBool32 storagePushConstant8; } VkPhysicalDevice8BitStorageFeatures; typedef struct VkPhysicalDeviceDriverProperties { VkStructureType sType; void* pNext; VkDriverId driverID; char driverName[VK_MAX_DRIVER_NAME_SIZE]; char driverInfo[VK_MAX_DRIVER_INFO_SIZE]; VkConformanceVersion conformanceVersion; } VkPhysicalDeviceDriverProperties; typedef struct VkPhysicalDeviceShaderAtomicInt64Features { VkStructureType sType; void* pNext; VkBool32 shaderBufferInt64Atomics; VkBool32 shaderSharedInt64Atomics; } VkPhysicalDeviceShaderAtomicInt64Features; typedef struct VkPhysicalDeviceShaderFloat16Int8Features { VkStructureType sType; void* pNext; VkBool32 shaderFloat16; VkBool32 shaderInt8; } VkPhysicalDeviceShaderFloat16Int8Features; typedef struct VkPhysicalDeviceFloatControlsProperties { VkStructureType sType; void* pNext; VkShaderFloatControlsIndependence denormBehaviorIndependence; VkShaderFloatControlsIndependence roundingModeIndependence; VkBool32 shaderSignedZeroInfNanPreserveFloat16; VkBool32 shaderSignedZeroInfNanPreserveFloat32; VkBool32 shaderSignedZeroInfNanPreserveFloat64; VkBool32 shaderDenormPreserveFloat16; VkBool32 shaderDenormPreserveFloat32; VkBool32 shaderDenormPreserveFloat64; VkBool32 shaderDenormFlushToZeroFloat16; VkBool32 shaderDenormFlushToZeroFloat32; VkBool32 shaderDenormFlushToZeroFloat64; VkBool32 shaderRoundingModeRTEFloat16; VkBool32 shaderRoundingModeRTEFloat32; VkBool32 shaderRoundingModeRTEFloat64; VkBool32 shaderRoundingModeRTZFloat16; VkBool32 shaderRoundingModeRTZFloat32; VkBool32 shaderRoundingModeRTZFloat64; } VkPhysicalDeviceFloatControlsProperties; typedef struct VkDescriptorSetLayoutBindingFlagsCreateInfo { VkStructureType sType; const void* pNext; uint32_t bindingCount; const VkDescriptorBindingFlags* pBindingFlags; } VkDescriptorSetLayoutBindingFlagsCreateInfo; typedef struct VkPhysicalDeviceDescriptorIndexingFeatures { VkStructureType sType; void* pNext; VkBool32 shaderInputAttachmentArrayDynamicIndexing; VkBool32 shaderUniformTexelBufferArrayDynamicIndexing; VkBool32 shaderStorageTexelBufferArrayDynamicIndexing; VkBool32 shaderUniformBufferArrayNonUniformIndexing; VkBool32 shaderSampledImageArrayNonUniformIndexing; VkBool32 shaderStorageBufferArrayNonUniformIndexing; VkBool32 shaderStorageImageArrayNonUniformIndexing; VkBool32 shaderInputAttachmentArrayNonUniformIndexing; VkBool32 shaderUniformTexelBufferArrayNonUniformIndexing; VkBool32 shaderStorageTexelBufferArrayNonUniformIndexing; VkBool32 descriptorBindingUniformBufferUpdateAfterBind; VkBool32 descriptorBindingSampledImageUpdateAfterBind; VkBool32 descriptorBindingStorageImageUpdateAfterBind; VkBool32 descriptorBindingStorageBufferUpdateAfterBind; VkBool32 descriptorBindingUniformTexelBufferUpdateAfterBind; VkBool32 descriptorBindingStorageTexelBufferUpdateAfterBind; VkBool32 descriptorBindingUpdateUnusedWhilePending; VkBool32 descriptorBindingPartiallyBound; VkBool32 descriptorBindingVariableDescriptorCount; VkBool32 runtimeDescriptorArray; } VkPhysicalDeviceDescriptorIndexingFeatures; typedef struct VkPhysicalDeviceDescriptorIndexingProperties { VkStructureType sType; void* pNext; uint32_t maxUpdateAfterBindDescriptorsInAllPools; VkBool32 shaderUniformBufferArrayNonUniformIndexingNative; VkBool32 shaderSampledImageArrayNonUniformIndexingNative; VkBool32 shaderStorageBufferArrayNonUniformIndexingNative; VkBool32 shaderStorageImageArrayNonUniformIndexingNative; VkBool32 shaderInputAttachmentArrayNonUniformIndexingNative; VkBool32 robustBufferAccessUpdateAfterBind; VkBool32 quadDivergentImplicitLod; uint32_t maxPerStageDescriptorUpdateAfterBindSamplers; uint32_t maxPerStageDescriptorUpdateAfterBindUniformBuffers; uint32_t maxPerStageDescriptorUpdateAfterBindStorageBuffers; uint32_t maxPerStageDescriptorUpdateAfterBindSampledImages; uint32_t maxPerStageDescriptorUpdateAfterBindStorageImages; uint32_t maxPerStageDescriptorUpdateAfterBindInputAttachments; uint32_t maxPerStageUpdateAfterBindResources; uint32_t maxDescriptorSetUpdateAfterBindSamplers; uint32_t maxDescriptorSetUpdateAfterBindUniformBuffers; uint32_t maxDescriptorSetUpdateAfterBindUniformBuffersDynamic; uint32_t maxDescriptorSetUpdateAfterBindStorageBuffers; uint32_t maxDescriptorSetUpdateAfterBindStorageBuffersDynamic; uint32_t maxDescriptorSetUpdateAfterBindSampledImages; uint32_t maxDescriptorSetUpdateAfterBindStorageImages; uint32_t maxDescriptorSetUpdateAfterBindInputAttachments; } VkPhysicalDeviceDescriptorIndexingProperties; typedef struct VkDescriptorSetVariableDescriptorCountAllocateInfo { VkStructureType sType; const void* pNext; uint32_t descriptorSetCount; const uint32_t* pDescriptorCounts; } VkDescriptorSetVariableDescriptorCountAllocateInfo; typedef struct VkDescriptorSetVariableDescriptorCountLayoutSupport { VkStructureType sType; void* pNext; uint32_t maxVariableDescriptorCount; } VkDescriptorSetVariableDescriptorCountLayoutSupport; typedef struct VkSubpassDescriptionDepthStencilResolve { VkStructureType sType; const void* pNext; VkResolveModeFlagBits depthResolveMode; VkResolveModeFlagBits stencilResolveMode; const VkAttachmentReference2* pDepthStencilResolveAttachment; } VkSubpassDescriptionDepthStencilResolve; typedef struct VkPhysicalDeviceDepthStencilResolveProperties { VkStructureType sType; void* pNext; VkResolveModeFlags supportedDepthResolveModes; VkResolveModeFlags supportedStencilResolveModes; VkBool32 independentResolveNone; VkBool32 independentResolve; } VkPhysicalDeviceDepthStencilResolveProperties; typedef struct VkPhysicalDeviceScalarBlockLayoutFeatures { VkStructureType sType; void* pNext; VkBool32 scalarBlockLayout; } VkPhysicalDeviceScalarBlockLayoutFeatures; typedef struct VkImageStencilUsageCreateInfo { VkStructureType sType; const void* pNext; VkImageUsageFlags stencilUsage; } VkImageStencilUsageCreateInfo; typedef struct VkSamplerReductionModeCreateInfo { VkStructureType sType; const void* pNext; VkSamplerReductionMode reductionMode; } VkSamplerReductionModeCreateInfo; typedef struct VkPhysicalDeviceSamplerFilterMinmaxProperties { VkStructureType sType; void* pNext; VkBool32 filterMinmaxSingleComponentFormats; VkBool32 filterMinmaxImageComponentMapping; } VkPhysicalDeviceSamplerFilterMinmaxProperties; typedef struct VkPhysicalDeviceVulkanMemoryModelFeatures { VkStructureType sType; void* pNext; VkBool32 vulkanMemoryModel; VkBool32 vulkanMemoryModelDeviceScope; VkBool32 vulkanMemoryModelAvailabilityVisibilityChains; } VkPhysicalDeviceVulkanMemoryModelFeatures; typedef struct VkPhysicalDeviceImagelessFramebufferFeatures { VkStructureType sType; void* pNext; VkBool32 imagelessFramebuffer; } VkPhysicalDeviceImagelessFramebufferFeatures; typedef struct VkFramebufferAttachmentImageInfo { VkStructureType sType; const void* pNext; VkImageCreateFlags flags; VkImageUsageFlags usage; uint32_t width; uint32_t height; uint32_t layerCount; uint32_t viewFormatCount; const VkFormat* pViewFormats; } VkFramebufferAttachmentImageInfo; typedef struct VkFramebufferAttachmentsCreateInfo { VkStructureType sType; const void* pNext; uint32_t attachmentImageInfoCount; const VkFramebufferAttachmentImageInfo* pAttachmentImageInfos; } VkFramebufferAttachmentsCreateInfo; typedef struct VkRenderPassAttachmentBeginInfo { VkStructureType sType; const void* pNext; uint32_t attachmentCount; const VkImageView* pAttachments; } VkRenderPassAttachmentBeginInfo; typedef struct VkPhysicalDeviceUniformBufferStandardLayoutFeatures { VkStructureType sType; void* pNext; VkBool32 uniformBufferStandardLayout; } VkPhysicalDeviceUniformBufferStandardLayoutFeatures; typedef struct VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures { VkStructureType sType; void* pNext; VkBool32 shaderSubgroupExtendedTypes; } VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures; typedef struct VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures { VkStructureType sType; void* pNext; VkBool32 separateDepthStencilLayouts; } VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures; typedef struct VkAttachmentReferenceStencilLayout { VkStructureType sType; void* pNext; VkImageLayout stencilLayout; } VkAttachmentReferenceStencilLayout; typedef struct VkAttachmentDescriptionStencilLayout { VkStructureType sType; void* pNext; VkImageLayout stencilInitialLayout; VkImageLayout stencilFinalLayout; } VkAttachmentDescriptionStencilLayout; typedef struct VkPhysicalDeviceHostQueryResetFeatures { VkStructureType sType; void* pNext; VkBool32 hostQueryReset; } VkPhysicalDeviceHostQueryResetFeatures; typedef struct VkPhysicalDeviceTimelineSemaphoreFeatures { VkStructureType sType; void* pNext; VkBool32 timelineSemaphore; } VkPhysicalDeviceTimelineSemaphoreFeatures; typedef struct VkPhysicalDeviceTimelineSemaphoreProperties { VkStructureType sType; void* pNext; uint64_t maxTimelineSemaphoreValueDifference; } VkPhysicalDeviceTimelineSemaphoreProperties; typedef struct VkSemaphoreTypeCreateInfo { VkStructureType sType; const void* pNext; VkSemaphoreType semaphoreType; uint64_t initialValue; } VkSemaphoreTypeCreateInfo; typedef struct VkTimelineSemaphoreSubmitInfo { VkStructureType sType; const void* pNext; uint32_t waitSemaphoreValueCount; const uint64_t* pWaitSemaphoreValues; uint32_t signalSemaphoreValueCount; const uint64_t* pSignalSemaphoreValues; } VkTimelineSemaphoreSubmitInfo; typedef struct VkSemaphoreWaitInfo { VkStructureType sType; const void* pNext; VkSemaphoreWaitFlags flags; uint32_t semaphoreCount; const VkSemaphore* pSemaphores; const uint64_t* pValues; } VkSemaphoreWaitInfo; typedef struct VkSemaphoreSignalInfo { VkStructureType sType; const void* pNext; VkSemaphore semaphore; uint64_t value; } VkSemaphoreSignalInfo; typedef struct VkPhysicalDeviceBufferDeviceAddressFeatures { VkStructureType sType; void* pNext; VkBool32 bufferDeviceAddress; VkBool32 bufferDeviceAddressCaptureReplay; VkBool32 bufferDeviceAddressMultiDevice; } VkPhysicalDeviceBufferDeviceAddressFeatures; typedef struct VkBufferDeviceAddressInfo { VkStructureType sType; const void* pNext; VkBuffer buffer; } VkBufferDeviceAddressInfo; typedef struct VkBufferOpaqueCaptureAddressCreateInfo { VkStructureType sType; const void* pNext; uint64_t opaqueCaptureAddress; } VkBufferOpaqueCaptureAddressCreateInfo; typedef struct VkMemoryOpaqueCaptureAddressAllocateInfo { VkStructureType sType; const void* pNext; uint64_t opaqueCaptureAddress; } VkMemoryOpaqueCaptureAddressAllocateInfo; typedef struct VkDeviceMemoryOpaqueCaptureAddressInfo { VkStructureType sType; const void* pNext; VkDeviceMemory memory; } VkDeviceMemoryOpaqueCaptureAddressInfo; typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCount)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); typedef void (VKAPI_PTR *PFN_vkResetQueryPool)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValue)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphores)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphore)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddress)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddress)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCount( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCount( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2( VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2( VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2( VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2( VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); VKAPI_ATTR void VKAPI_CALL vkResetQueryPool( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValue( VkDevice device, VkSemaphore semaphore, uint64_t* pValue); VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphores( VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphore( VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddress( VkDevice device, const VkBufferDeviceAddressInfo* pInfo); VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddress( VkDevice device, const VkBufferDeviceAddressInfo* pInfo); VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress( VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); #endif #define VK_KHR_surface 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) #define VK_KHR_SURFACE_SPEC_VERSION 25 #define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" typedef enum VkPresentModeKHR { VK_PRESENT_MODE_IMMEDIATE_KHR = 0, VK_PRESENT_MODE_MAILBOX_KHR = 1, VK_PRESENT_MODE_FIFO_KHR = 2, VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF } VkPresentModeKHR; typedef enum VkColorSpaceKHR { VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003, VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF } VkColorSpaceKHR; typedef enum VkSurfaceTransformFlagBitsKHR { VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001, VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002, VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004, VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008, VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010, VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020, VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040, VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080, VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100, VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkSurfaceTransformFlagBitsKHR; typedef enum VkCompositeAlphaFlagBitsKHR { VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = 0x00000002, VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = 0x00000004, VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = 0x00000008, VK_COMPOSITE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkCompositeAlphaFlagBitsKHR; typedef VkFlags VkCompositeAlphaFlagsKHR; typedef VkFlags VkSurfaceTransformFlagsKHR; typedef struct VkSurfaceCapabilitiesKHR { uint32_t minImageCount; uint32_t maxImageCount; VkExtent2D currentExtent; VkExtent2D minImageExtent; VkExtent2D maxImageExtent; uint32_t maxImageArrayLayers; VkSurfaceTransformFlagsKHR supportedTransforms; VkSurfaceTransformFlagBitsKHR currentTransform; VkCompositeAlphaFlagsKHR supportedCompositeAlpha; VkImageUsageFlags supportedUsageFlags; } VkSurfaceCapabilitiesKHR; typedef struct VkSurfaceFormatKHR { VkFormat format; VkColorSpaceKHR colorSpace; } VkSurfaceFormatKHR; typedef void (VKAPI_PTR *PFN_vkDestroySurfaceKHR)(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkDestroySurfaceKHR( VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, VkSurfaceKHR surface, VkBool32* pSupported); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilitiesKHR( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilitiesKHR* pSurfaceCapabilities); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormatsKHR( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pSurfaceFormatCount, VkSurfaceFormatKHR* pSurfaceFormats); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModesKHR( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); #endif #define VK_KHR_swapchain 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) #define VK_KHR_SWAPCHAIN_SPEC_VERSION 70 #define VK_KHR_SWAPCHAIN_EXTENSION_NAME "VK_KHR_swapchain" typedef enum VkSwapchainCreateFlagBitsKHR { VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = 0x00000001, VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002, VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004, VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkSwapchainCreateFlagBitsKHR; typedef VkFlags VkSwapchainCreateFlagsKHR; typedef enum VkDeviceGroupPresentModeFlagBitsKHR { VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = 0x00000001, VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = 0x00000002, VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = 0x00000004, VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = 0x00000008, VK_DEVICE_GROUP_PRESENT_MODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkDeviceGroupPresentModeFlagBitsKHR; typedef VkFlags VkDeviceGroupPresentModeFlagsKHR; typedef struct VkSwapchainCreateInfoKHR { VkStructureType sType; const void* pNext; VkSwapchainCreateFlagsKHR flags; VkSurfaceKHR surface; uint32_t minImageCount; VkFormat imageFormat; VkColorSpaceKHR imageColorSpace; VkExtent2D imageExtent; uint32_t imageArrayLayers; VkImageUsageFlags imageUsage; VkSharingMode imageSharingMode; uint32_t queueFamilyIndexCount; const uint32_t* pQueueFamilyIndices; VkSurfaceTransformFlagBitsKHR preTransform; VkCompositeAlphaFlagBitsKHR compositeAlpha; VkPresentModeKHR presentMode; VkBool32 clipped; VkSwapchainKHR oldSwapchain; } VkSwapchainCreateInfoKHR; typedef struct VkPresentInfoKHR { VkStructureType sType; const void* pNext; uint32_t waitSemaphoreCount; const VkSemaphore* pWaitSemaphores; uint32_t swapchainCount; const VkSwapchainKHR* pSwapchains; const uint32_t* pImageIndices; VkResult* pResults; } VkPresentInfoKHR; typedef struct VkImageSwapchainCreateInfoKHR { VkStructureType sType; const void* pNext; VkSwapchainKHR swapchain; } VkImageSwapchainCreateInfoKHR; typedef struct VkBindImageMemorySwapchainInfoKHR { VkStructureType sType; const void* pNext; VkSwapchainKHR swapchain; uint32_t imageIndex; } VkBindImageMemorySwapchainInfoKHR; typedef struct VkAcquireNextImageInfoKHR { VkStructureType sType; const void* pNext; VkSwapchainKHR swapchain; uint64_t timeout; VkSemaphore semaphore; VkFence fence; uint32_t deviceMask; } VkAcquireNextImageInfoKHR; typedef struct VkDeviceGroupPresentCapabilitiesKHR { VkStructureType sType; const void* pNext; uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE]; VkDeviceGroupPresentModeFlagsKHR modes; } VkDeviceGroupPresentCapabilitiesKHR; typedef struct VkDeviceGroupPresentInfoKHR { VkStructureType sType; const void* pNext; uint32_t swapchainCount; const uint32_t* pDeviceMasks; VkDeviceGroupPresentModeFlagBitsKHR mode; } VkDeviceGroupPresentInfoKHR; typedef struct VkDeviceGroupSwapchainCreateInfoKHR { VkStructureType sType; const void* pNext; VkDeviceGroupPresentModeFlagsKHR modes; } VkDeviceGroupSwapchainCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateSwapchainKHR)(VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain); typedef void (VKAPI_PTR *PFN_vkDestroySwapchainKHR)(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainImagesKHR)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages); typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImageKHR)(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex); typedef VkResult (VKAPI_PTR *PFN_vkQueuePresentKHR)(VkQueue queue, const VkPresentInfoKHR* pPresentInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupPresentCapabilitiesKHR)(VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModesKHR)(VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDevicePresentRectanglesKHR)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); typedef VkResult (VKAPI_PTR *PFN_vkAcquireNextImage2KHR)(VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateSwapchainKHR( VkDevice device, const VkSwapchainCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchain); VKAPI_ATTR void VKAPI_CALL vkDestroySwapchainKHR( VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainImagesKHR( VkDevice device, VkSwapchainKHR swapchain, uint32_t* pSwapchainImageCount, VkImage* pSwapchainImages); VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImageKHR( VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, VkSemaphore semaphore, VkFence fence, uint32_t* pImageIndex); VKAPI_ATTR VkResult VKAPI_CALL vkQueuePresentKHR( VkQueue queue, const VkPresentInfoKHR* pPresentInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupPresentCapabilitiesKHR( VkDevice device, VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities); VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModesKHR( VkDevice device, VkSurfaceKHR surface, VkDeviceGroupPresentModeFlagsKHR* pModes); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDevicePresentRectanglesKHR( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, uint32_t* pRectCount, VkRect2D* pRects); VKAPI_ATTR VkResult VKAPI_CALL vkAcquireNextImage2KHR( VkDevice device, const VkAcquireNextImageInfoKHR* pAcquireInfo, uint32_t* pImageIndex); #endif #define VK_KHR_display 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) #define VK_KHR_DISPLAY_SPEC_VERSION 23 #define VK_KHR_DISPLAY_EXTENSION_NAME "VK_KHR_display" typedef VkFlags VkDisplayModeCreateFlagsKHR; typedef enum VkDisplayPlaneAlphaFlagBitsKHR { VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = 0x00000002, VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = 0x00000004, VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = 0x00000008, VK_DISPLAY_PLANE_ALPHA_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkDisplayPlaneAlphaFlagBitsKHR; typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; typedef struct VkDisplayModeParametersKHR { VkExtent2D visibleRegion; uint32_t refreshRate; } VkDisplayModeParametersKHR; typedef struct VkDisplayModeCreateInfoKHR { VkStructureType sType; const void* pNext; VkDisplayModeCreateFlagsKHR flags; VkDisplayModeParametersKHR parameters; } VkDisplayModeCreateInfoKHR; typedef struct VkDisplayModePropertiesKHR { VkDisplayModeKHR displayMode; VkDisplayModeParametersKHR parameters; } VkDisplayModePropertiesKHR; typedef struct VkDisplayPlaneCapabilitiesKHR { VkDisplayPlaneAlphaFlagsKHR supportedAlpha; VkOffset2D minSrcPosition; VkOffset2D maxSrcPosition; VkExtent2D minSrcExtent; VkExtent2D maxSrcExtent; VkOffset2D minDstPosition; VkOffset2D maxDstPosition; VkExtent2D minDstExtent; VkExtent2D maxDstExtent; } VkDisplayPlaneCapabilitiesKHR; typedef struct VkDisplayPlanePropertiesKHR { VkDisplayKHR currentDisplay; uint32_t currentStackIndex; } VkDisplayPlanePropertiesKHR; typedef struct VkDisplayPropertiesKHR { VkDisplayKHR display; const char* displayName; VkExtent2D physicalDimensions; VkExtent2D physicalResolution; VkSurfaceTransformFlagsKHR supportedTransforms; VkBool32 planeReorderPossible; VkBool32 persistentContent; } VkDisplayPropertiesKHR; typedef struct VkDisplaySurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkDisplaySurfaceCreateFlagsKHR flags; VkDisplayModeKHR displayMode; uint32_t planeIndex; uint32_t planeStackIndex; VkSurfaceTransformFlagBitsKHR transform; float globalAlpha; VkDisplayPlaneAlphaFlagBitsKHR alphaMode; VkExtent2D imageExtent; } VkDisplaySurfaceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneSupportedDisplaysKHR)(VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModePropertiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayModeKHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilitiesKHR)(VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkCreateDisplayPlaneSurfaceKHR)(VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPropertiesKHR( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPropertiesKHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlanePropertiesKHR( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlanePropertiesKHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneSupportedDisplaysKHR( VkPhysicalDevice physicalDevice, uint32_t planeIndex, uint32_t* pDisplayCount, VkDisplayKHR* pDisplays); VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModePropertiesKHR( VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModePropertiesKHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayModeKHR( VkPhysicalDevice physicalDevice, VkDisplayKHR display, const VkDisplayModeCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDisplayModeKHR* pMode); VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilitiesKHR( VkPhysicalDevice physicalDevice, VkDisplayModeKHR mode, uint32_t planeIndex, VkDisplayPlaneCapabilitiesKHR* pCapabilities); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDisplayPlaneSurfaceKHR( VkInstance instance, const VkDisplaySurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #define VK_KHR_display_swapchain 1 #define VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION 10 #define VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME "VK_KHR_display_swapchain" typedef struct VkDisplayPresentInfoKHR { VkStructureType sType; const void* pNext; VkRect2D srcRect; VkRect2D dstRect; VkBool32 persistent; } VkDisplayPresentInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateSharedSwapchainsKHR)(VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR( VkDevice device, uint32_t swapchainCount, const VkSwapchainCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkSwapchainKHR* pSwapchains); #endif #define VK_KHR_sampler_mirror_clamp_to_edge 1 #define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION 3 #define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge" #define VK_KHR_multiview 1 #define VK_KHR_MULTIVIEW_SPEC_VERSION 1 #define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview" typedef VkRenderPassMultiviewCreateInfo VkRenderPassMultiviewCreateInfoKHR; typedef VkPhysicalDeviceMultiviewFeatures VkPhysicalDeviceMultiviewFeaturesKHR; typedef VkPhysicalDeviceMultiviewProperties VkPhysicalDeviceMultiviewPropertiesKHR; #define VK_KHR_get_physical_device_properties2 1 #define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION 2 #define VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_physical_device_properties2" typedef VkPhysicalDeviceFeatures2 VkPhysicalDeviceFeatures2KHR; typedef VkPhysicalDeviceProperties2 VkPhysicalDeviceProperties2KHR; typedef VkFormatProperties2 VkFormatProperties2KHR; typedef VkImageFormatProperties2 VkImageFormatProperties2KHR; typedef VkPhysicalDeviceImageFormatInfo2 VkPhysicalDeviceImageFormatInfo2KHR; typedef VkQueueFamilyProperties2 VkQueueFamilyProperties2KHR; typedef VkPhysicalDeviceMemoryProperties2 VkPhysicalDeviceMemoryProperties2KHR; typedef VkSparseImageFormatProperties2 VkSparseImageFormatProperties2KHR; typedef VkPhysicalDeviceSparseImageFormatInfo2 VkPhysicalDeviceSparseImageFormatInfo2KHR; typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFeatures2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceFormatProperties2KHR)(VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMemoryProperties2KHR)(VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures2* pFeatures); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties2* pProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties2KHR( VkPhysicalDevice physicalDevice, VkFormat format, VkFormatProperties2* pFormatProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo, VkImageFormatProperties2* pImageFormatProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties2KHR( VkPhysicalDevice physicalDevice, uint32_t* pQueueFamilyPropertyCount, VkQueueFamilyProperties2* pQueueFamilyProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties2KHR( VkPhysicalDevice physicalDevice, VkPhysicalDeviceMemoryProperties2* pMemoryProperties); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties2KHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo, uint32_t* pPropertyCount, VkSparseImageFormatProperties2* pProperties); #endif #define VK_KHR_device_group 1 #define VK_KHR_DEVICE_GROUP_SPEC_VERSION 4 #define VK_KHR_DEVICE_GROUP_EXTENSION_NAME "VK_KHR_device_group" typedef VkPeerMemoryFeatureFlags VkPeerMemoryFeatureFlagsKHR; typedef VkPeerMemoryFeatureFlagBits VkPeerMemoryFeatureFlagBitsKHR; typedef VkMemoryAllocateFlags VkMemoryAllocateFlagsKHR; typedef VkMemoryAllocateFlagBits VkMemoryAllocateFlagBitsKHR; typedef VkMemoryAllocateFlagsInfo VkMemoryAllocateFlagsInfoKHR; typedef VkDeviceGroupRenderPassBeginInfo VkDeviceGroupRenderPassBeginInfoKHR; typedef VkDeviceGroupCommandBufferBeginInfo VkDeviceGroupCommandBufferBeginInfoKHR; typedef VkDeviceGroupSubmitInfo VkDeviceGroupSubmitInfoKHR; typedef VkDeviceGroupBindSparseInfo VkDeviceGroupBindSparseInfoKHR; typedef VkBindBufferMemoryDeviceGroupInfo VkBindBufferMemoryDeviceGroupInfoKHR; typedef VkBindImageMemoryDeviceGroupInfo VkBindImageMemoryDeviceGroupInfoKHR; typedef void (VKAPI_PTR *PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)(VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); typedef void (VKAPI_PTR *PFN_vkCmdSetDeviceMaskKHR)(VkCommandBuffer commandBuffer, uint32_t deviceMask); typedef void (VKAPI_PTR *PFN_vkCmdDispatchBaseKHR)(VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetDeviceGroupPeerMemoryFeaturesKHR( VkDevice device, uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex, VkPeerMemoryFeatureFlags* pPeerMemoryFeatures); VKAPI_ATTR void VKAPI_CALL vkCmdSetDeviceMaskKHR( VkCommandBuffer commandBuffer, uint32_t deviceMask); VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR( VkCommandBuffer commandBuffer, uint32_t baseGroupX, uint32_t baseGroupY, uint32_t baseGroupZ, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ); #endif #define VK_KHR_shader_draw_parameters 1 #define VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION 1 #define VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME "VK_KHR_shader_draw_parameters" #define VK_KHR_maintenance1 1 #define VK_KHR_MAINTENANCE1_SPEC_VERSION 2 #define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1" typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR; typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkTrimCommandPoolKHR( VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags); #endif #define VK_KHR_device_group_creation 1 #define VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION 1 #define VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME "VK_KHR_device_group_creation" #define VK_MAX_DEVICE_GROUP_SIZE_KHR VK_MAX_DEVICE_GROUP_SIZE typedef VkPhysicalDeviceGroupProperties VkPhysicalDeviceGroupPropertiesKHR; typedef VkDeviceGroupDeviceCreateInfo VkDeviceGroupDeviceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceGroupsKHR)(VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceGroupsKHR( VkInstance instance, uint32_t* pPhysicalDeviceGroupCount, VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties); #endif #define VK_KHR_external_memory_capabilities 1 #define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_memory_capabilities" #define VK_LUID_SIZE_KHR VK_LUID_SIZE typedef VkExternalMemoryHandleTypeFlags VkExternalMemoryHandleTypeFlagsKHR; typedef VkExternalMemoryHandleTypeFlagBits VkExternalMemoryHandleTypeFlagBitsKHR; typedef VkExternalMemoryFeatureFlags VkExternalMemoryFeatureFlagsKHR; typedef VkExternalMemoryFeatureFlagBits VkExternalMemoryFeatureFlagBitsKHR; typedef VkExternalMemoryProperties VkExternalMemoryPropertiesKHR; typedef VkPhysicalDeviceExternalImageFormatInfo VkPhysicalDeviceExternalImageFormatInfoKHR; typedef VkExternalImageFormatProperties VkExternalImageFormatPropertiesKHR; typedef VkPhysicalDeviceExternalBufferInfo VkPhysicalDeviceExternalBufferInfoKHR; typedef VkExternalBufferProperties VkExternalBufferPropertiesKHR; typedef VkPhysicalDeviceIDProperties VkPhysicalDeviceIDPropertiesKHR; typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalBufferPropertiesKHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo, VkExternalBufferProperties* pExternalBufferProperties); #endif #define VK_KHR_external_memory 1 #define VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME "VK_KHR_external_memory" #define VK_QUEUE_FAMILY_EXTERNAL_KHR VK_QUEUE_FAMILY_EXTERNAL typedef VkExternalMemoryImageCreateInfo VkExternalMemoryImageCreateInfoKHR; typedef VkExternalMemoryBufferCreateInfo VkExternalMemoryBufferCreateInfoKHR; typedef VkExportMemoryAllocateInfo VkExportMemoryAllocateInfoKHR; #define VK_KHR_external_memory_fd 1 #define VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME "VK_KHR_external_memory_fd" typedef struct VkImportMemoryFdInfoKHR { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagBits handleType; int fd; } VkImportMemoryFdInfoKHR; typedef struct VkMemoryFdPropertiesKHR { VkStructureType sType; void* pNext; uint32_t memoryTypeBits; } VkMemoryFdPropertiesKHR; typedef struct VkMemoryGetFdInfoKHR { VkStructureType sType; const void* pNext; VkDeviceMemory memory; VkExternalMemoryHandleTypeFlagBits handleType; } VkMemoryGetFdInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdKHR)(VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd); typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryFdPropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdKHR( VkDevice device, const VkMemoryGetFdInfoKHR* pGetFdInfo, int* pFd); VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryFdPropertiesKHR( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, int fd, VkMemoryFdPropertiesKHR* pMemoryFdProperties); #endif #define VK_KHR_external_semaphore_capabilities 1 #define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_semaphore_capabilities" typedef VkExternalSemaphoreHandleTypeFlags VkExternalSemaphoreHandleTypeFlagsKHR; typedef VkExternalSemaphoreHandleTypeFlagBits VkExternalSemaphoreHandleTypeFlagBitsKHR; typedef VkExternalSemaphoreFeatureFlags VkExternalSemaphoreFeatureFlagsKHR; typedef VkExternalSemaphoreFeatureFlagBits VkExternalSemaphoreFeatureFlagBitsKHR; typedef VkPhysicalDeviceExternalSemaphoreInfo VkPhysicalDeviceExternalSemaphoreInfoKHR; typedef VkExternalSemaphoreProperties VkExternalSemaphorePropertiesKHR; typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalSemaphorePropertiesKHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo, VkExternalSemaphoreProperties* pExternalSemaphoreProperties); #endif #define VK_KHR_external_semaphore 1 #define VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_KHR_external_semaphore" typedef VkSemaphoreImportFlags VkSemaphoreImportFlagsKHR; typedef VkSemaphoreImportFlagBits VkSemaphoreImportFlagBitsKHR; typedef VkExportSemaphoreCreateInfo VkExportSemaphoreCreateInfoKHR; #define VK_KHR_external_semaphore_fd 1 #define VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME "VK_KHR_external_semaphore_fd" typedef struct VkImportSemaphoreFdInfoKHR { VkStructureType sType; const void* pNext; VkSemaphore semaphore; VkSemaphoreImportFlags flags; VkExternalSemaphoreHandleTypeFlagBits handleType; int fd; } VkImportSemaphoreFdInfoKHR; typedef struct VkSemaphoreGetFdInfoKHR { VkStructureType sType; const void* pNext; VkSemaphore semaphore; VkExternalSemaphoreHandleTypeFlagBits handleType; } VkSemaphoreGetFdInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreFdKHR)(VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreFdKHR)(VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreFdKHR( VkDevice device, const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( VkDevice device, const VkSemaphoreGetFdInfoKHR* pGetFdInfo, int* pFd); #endif #define VK_KHR_push_descriptor 1 #define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2 #define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR { VkStructureType sType; void* pNext; uint32_t maxPushDescriptors; } VkPhysicalDevicePushDescriptorPropertiesKHR; typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetKHR( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR( VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); #endif #define VK_KHR_shader_float16_int8 1 #define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1 #define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8" typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceShaderFloat16Int8FeaturesKHR; typedef VkPhysicalDeviceShaderFloat16Int8Features VkPhysicalDeviceFloat16Int8FeaturesKHR; #define VK_KHR_16bit_storage 1 #define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1 #define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage" typedef VkPhysicalDevice16BitStorageFeatures VkPhysicalDevice16BitStorageFeaturesKHR; #define VK_KHR_incremental_present 1 #define VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION 2 #define VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME "VK_KHR_incremental_present" typedef struct VkRectLayerKHR { VkOffset2D offset; VkExtent2D extent; uint32_t layer; } VkRectLayerKHR; typedef struct VkPresentRegionKHR { uint32_t rectangleCount; const VkRectLayerKHR* pRectangles; } VkPresentRegionKHR; typedef struct VkPresentRegionsKHR { VkStructureType sType; const void* pNext; uint32_t swapchainCount; const VkPresentRegionKHR* pRegions; } VkPresentRegionsKHR; #define VK_KHR_descriptor_update_template 1 typedef VkDescriptorUpdateTemplate VkDescriptorUpdateTemplateKHR; #define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION 1 #define VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME "VK_KHR_descriptor_update_template" typedef VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateTypeKHR; typedef VkDescriptorUpdateTemplateCreateFlags VkDescriptorUpdateTemplateCreateFlagsKHR; typedef VkDescriptorUpdateTemplateEntry VkDescriptorUpdateTemplateEntryKHR; typedef VkDescriptorUpdateTemplateCreateInfo VkDescriptorUpdateTemplateCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateDescriptorUpdateTemplateKHR)(VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); typedef void (VKAPI_PTR *PFN_vkDestroyDescriptorUpdateTemplateKHR)(VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkUpdateDescriptorSetWithTemplateKHR)(VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorUpdateTemplateKHR( VkDevice device, const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate); VKAPI_ATTR void VKAPI_CALL vkDestroyDescriptorUpdateTemplateKHR( VkDevice device, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSetWithTemplateKHR( VkDevice device, VkDescriptorSet descriptorSet, VkDescriptorUpdateTemplate descriptorUpdateTemplate, const void* pData); #endif #define VK_KHR_imageless_framebuffer 1 #define VK_KHR_IMAGELESS_FRAMEBUFFER_SPEC_VERSION 1 #define VK_KHR_IMAGELESS_FRAMEBUFFER_EXTENSION_NAME "VK_KHR_imageless_framebuffer" typedef VkPhysicalDeviceImagelessFramebufferFeatures VkPhysicalDeviceImagelessFramebufferFeaturesKHR; typedef VkFramebufferAttachmentsCreateInfo VkFramebufferAttachmentsCreateInfoKHR; typedef VkFramebufferAttachmentImageInfo VkFramebufferAttachmentImageInfoKHR; typedef VkRenderPassAttachmentBeginInfo VkRenderPassAttachmentBeginInfoKHR; #define VK_KHR_create_renderpass2 1 #define VK_KHR_CREATE_RENDERPASS_2_SPEC_VERSION 1 #define VK_KHR_CREATE_RENDERPASS_2_EXTENSION_NAME "VK_KHR_create_renderpass2" typedef VkRenderPassCreateInfo2 VkRenderPassCreateInfo2KHR; typedef VkAttachmentDescription2 VkAttachmentDescription2KHR; typedef VkAttachmentReference2 VkAttachmentReference2KHR; typedef VkSubpassDescription2 VkSubpassDescription2KHR; typedef VkSubpassDependency2 VkSubpassDependency2KHR; typedef VkSubpassBeginInfo VkSubpassBeginInfoKHR; typedef VkSubpassEndInfo VkSubpassEndInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateRenderPass2KHR)(VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); typedef void (VKAPI_PTR *PFN_vkCmdNextSubpass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); typedef void (VKAPI_PTR *PFN_vkCmdEndRenderPass2KHR)(VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass2KHR( VkDevice device, const VkRenderPassCreateInfo2* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkRenderPass* pRenderPass); VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass2KHR( VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo* pRenderPassBegin, const VkSubpassBeginInfo* pSubpassBeginInfo); VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass2KHR( VkCommandBuffer commandBuffer, const VkSubpassBeginInfo* pSubpassBeginInfo, const VkSubpassEndInfo* pSubpassEndInfo); VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass2KHR( VkCommandBuffer commandBuffer, const VkSubpassEndInfo* pSubpassEndInfo); #endif #define VK_KHR_shared_presentable_image 1 #define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1 #define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image" typedef struct VkSharedPresentSurfaceCapabilitiesKHR { VkStructureType sType; void* pNext; VkImageUsageFlags sharedPresentSupportedUsageFlags; } VkSharedPresentSurfaceCapabilitiesKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR( VkDevice device, VkSwapchainKHR swapchain); #endif #define VK_KHR_external_fence_capabilities 1 #define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME "VK_KHR_external_fence_capabilities" typedef VkExternalFenceHandleTypeFlags VkExternalFenceHandleTypeFlagsKHR; typedef VkExternalFenceHandleTypeFlagBits VkExternalFenceHandleTypeFlagBitsKHR; typedef VkExternalFenceFeatureFlags VkExternalFenceFeatureFlagsKHR; typedef VkExternalFenceFeatureFlagBits VkExternalFenceFeatureFlagBitsKHR; typedef VkPhysicalDeviceExternalFenceInfo VkPhysicalDeviceExternalFenceInfoKHR; typedef VkExternalFenceProperties VkExternalFencePropertiesKHR; typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalFencePropertiesKHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo, VkExternalFenceProperties* pExternalFenceProperties); #endif #define VK_KHR_external_fence 1 #define VK_KHR_EXTERNAL_FENCE_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME "VK_KHR_external_fence" typedef VkFenceImportFlags VkFenceImportFlagsKHR; typedef VkFenceImportFlagBits VkFenceImportFlagBitsKHR; typedef VkExportFenceCreateInfo VkExportFenceCreateInfoKHR; #define VK_KHR_external_fence_fd 1 #define VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME "VK_KHR_external_fence_fd" typedef struct VkImportFenceFdInfoKHR { VkStructureType sType; const void* pNext; VkFence fence; VkFenceImportFlags flags; VkExternalFenceHandleTypeFlagBits handleType; int fd; } VkImportFenceFdInfoKHR; typedef struct VkFenceGetFdInfoKHR { VkStructureType sType; const void* pNext; VkFence fence; VkExternalFenceHandleTypeFlagBits handleType; } VkFenceGetFdInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkImportFenceFdKHR)(VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetFenceFdKHR)(VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceFdKHR( VkDevice device, const VkImportFenceFdInfoKHR* pImportFenceFdInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceFdKHR( VkDevice device, const VkFenceGetFdInfoKHR* pGetFdInfo, int* pFd); #endif #define VK_KHR_performance_query 1 #define VK_KHR_PERFORMANCE_QUERY_SPEC_VERSION 1 #define VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME "VK_KHR_performance_query" typedef enum VkPerformanceCounterUnitKHR { VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR = 0, VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR = 1, VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR = 2, VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR = 3, VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR = 4, VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR = 5, VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR = 6, VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR = 7, VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR = 8, VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR = 9, VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR = 10, VK_PERFORMANCE_COUNTER_UNIT_MAX_ENUM_KHR = 0x7FFFFFFF } VkPerformanceCounterUnitKHR; typedef enum VkPerformanceCounterScopeKHR { VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR = 0, VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR = 1, VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR = 2, VK_QUERY_SCOPE_COMMAND_BUFFER_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_BUFFER_KHR, VK_QUERY_SCOPE_RENDER_PASS_KHR = VK_PERFORMANCE_COUNTER_SCOPE_RENDER_PASS_KHR, VK_QUERY_SCOPE_COMMAND_KHR = VK_PERFORMANCE_COUNTER_SCOPE_COMMAND_KHR, VK_PERFORMANCE_COUNTER_SCOPE_MAX_ENUM_KHR = 0x7FFFFFFF } VkPerformanceCounterScopeKHR; typedef enum VkPerformanceCounterStorageKHR { VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR = 0, VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR = 1, VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR = 2, VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR = 3, VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR = 4, VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR = 5, VK_PERFORMANCE_COUNTER_STORAGE_MAX_ENUM_KHR = 0x7FFFFFFF } VkPerformanceCounterStorageKHR; typedef enum VkPerformanceCounterDescriptionFlagBitsKHR { VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR = 0x00000001, VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR = 0x00000002, VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_PERFORMANCE_IMPACTING_BIT_KHR, VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_KHR = VK_PERFORMANCE_COUNTER_DESCRIPTION_CONCURRENTLY_IMPACTED_BIT_KHR, VK_PERFORMANCE_COUNTER_DESCRIPTION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkPerformanceCounterDescriptionFlagBitsKHR; typedef VkFlags VkPerformanceCounterDescriptionFlagsKHR; typedef enum VkAcquireProfilingLockFlagBitsKHR { VK_ACQUIRE_PROFILING_LOCK_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkAcquireProfilingLockFlagBitsKHR; typedef VkFlags VkAcquireProfilingLockFlagsKHR; typedef struct VkPhysicalDevicePerformanceQueryFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 performanceCounterQueryPools; VkBool32 performanceCounterMultipleQueryPools; } VkPhysicalDevicePerformanceQueryFeaturesKHR; typedef struct VkPhysicalDevicePerformanceQueryPropertiesKHR { VkStructureType sType; void* pNext; VkBool32 allowCommandBufferQueryCopies; } VkPhysicalDevicePerformanceQueryPropertiesKHR; typedef struct VkPerformanceCounterKHR { VkStructureType sType; const void* pNext; VkPerformanceCounterUnitKHR unit; VkPerformanceCounterScopeKHR scope; VkPerformanceCounterStorageKHR storage; uint8_t uuid[VK_UUID_SIZE]; } VkPerformanceCounterKHR; typedef struct VkPerformanceCounterDescriptionKHR { VkStructureType sType; const void* pNext; VkPerformanceCounterDescriptionFlagsKHR flags; char name[VK_MAX_DESCRIPTION_SIZE]; char category[VK_MAX_DESCRIPTION_SIZE]; char description[VK_MAX_DESCRIPTION_SIZE]; } VkPerformanceCounterDescriptionKHR; typedef struct VkQueryPoolPerformanceCreateInfoKHR { VkStructureType sType; const void* pNext; uint32_t queueFamilyIndex; uint32_t counterIndexCount; const uint32_t* pCounterIndices; } VkQueryPoolPerformanceCreateInfoKHR; typedef union VkPerformanceCounterResultKHR { int32_t int32; int64_t int64; uint32_t uint32; uint64_t uint64; float float32; double float64; } VkPerformanceCounterResultKHR; typedef struct VkAcquireProfilingLockInfoKHR { VkStructureType sType; const void* pNext; VkAcquireProfilingLockFlagsKHR flags; uint64_t timeout; } VkAcquireProfilingLockInfoKHR; typedef struct VkPerformanceQuerySubmitInfoKHR { VkStructureType sType; const void* pNext; uint32_t counterPassIndex; } VkPerformanceQuerySubmitInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterKHR* pCounters, VkPerformanceCounterDescriptionKHR* pCounterDescriptions); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)(VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, uint32_t* pNumPasses); typedef VkResult (VKAPI_PTR *PFN_vkAcquireProfilingLockKHR)(VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo); typedef void (VKAPI_PTR *PFN_vkReleaseProfilingLockKHR)(VkDevice device); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, uint32_t* pCounterCount, VkPerformanceCounterKHR* pCounters, VkPerformanceCounterDescriptionKHR* pCounterDescriptions); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR( VkPhysicalDevice physicalDevice, const VkQueryPoolPerformanceCreateInfoKHR* pPerformanceQueryCreateInfo, uint32_t* pNumPasses); VKAPI_ATTR VkResult VKAPI_CALL vkAcquireProfilingLockKHR( VkDevice device, const VkAcquireProfilingLockInfoKHR* pInfo); VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR( VkDevice device); #endif #define VK_KHR_maintenance2 1 #define VK_KHR_MAINTENANCE2_SPEC_VERSION 1 #define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2" typedef VkPointClippingBehavior VkPointClippingBehaviorKHR; typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR; typedef VkPhysicalDevicePointClippingProperties VkPhysicalDevicePointClippingPropertiesKHR; typedef VkRenderPassInputAttachmentAspectCreateInfo VkRenderPassInputAttachmentAspectCreateInfoKHR; typedef VkInputAttachmentAspectReference VkInputAttachmentAspectReferenceKHR; typedef VkImageViewUsageCreateInfo VkImageViewUsageCreateInfoKHR; typedef VkPipelineTessellationDomainOriginStateCreateInfo VkPipelineTessellationDomainOriginStateCreateInfoKHR; #define VK_KHR_get_surface_capabilities2 1 #define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1 #define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2" typedef struct VkPhysicalDeviceSurfaceInfo2KHR { VkStructureType sType; const void* pNext; VkSurfaceKHR surface; } VkPhysicalDeviceSurfaceInfo2KHR; typedef struct VkSurfaceCapabilities2KHR { VkStructureType sType; void* pNext; VkSurfaceCapabilitiesKHR surfaceCapabilities; } VkSurfaceCapabilities2KHR; typedef struct VkSurfaceFormat2KHR { VkStructureType sType; void* pNext; VkSurfaceFormatKHR surfaceFormat; } VkSurfaceFormat2KHR; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats); #endif #define VK_KHR_variable_pointers 1 #define VK_KHR_VARIABLE_POINTERS_SPEC_VERSION 1 #define VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME "VK_KHR_variable_pointers" typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointerFeaturesKHR; typedef VkPhysicalDeviceVariablePointersFeatures VkPhysicalDeviceVariablePointersFeaturesKHR; #define VK_KHR_get_display_properties2 1 #define VK_KHR_GET_DISPLAY_PROPERTIES_2_SPEC_VERSION 1 #define VK_KHR_GET_DISPLAY_PROPERTIES_2_EXTENSION_NAME "VK_KHR_get_display_properties2" typedef struct VkDisplayProperties2KHR { VkStructureType sType; void* pNext; VkDisplayPropertiesKHR displayProperties; } VkDisplayProperties2KHR; typedef struct VkDisplayPlaneProperties2KHR { VkStructureType sType; void* pNext; VkDisplayPlanePropertiesKHR displayPlaneProperties; } VkDisplayPlaneProperties2KHR; typedef struct VkDisplayModeProperties2KHR { VkStructureType sType; void* pNext; VkDisplayModePropertiesKHR displayModeProperties; } VkDisplayModeProperties2KHR; typedef struct VkDisplayPlaneInfo2KHR { VkStructureType sType; const void* pNext; VkDisplayModeKHR mode; uint32_t planeIndex; } VkDisplayPlaneInfo2KHR; typedef struct VkDisplayPlaneCapabilities2KHR { VkStructureType sType; void* pNext; VkDisplayPlaneCapabilitiesKHR capabilities; } VkDisplayPlaneCapabilities2KHR; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayModeProperties2KHR)(VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetDisplayPlaneCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayProperties2KHR( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayProperties2KHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceDisplayPlaneProperties2KHR( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkDisplayPlaneProperties2KHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayModeProperties2KHR( VkPhysicalDevice physicalDevice, VkDisplayKHR display, uint32_t* pPropertyCount, VkDisplayModeProperties2KHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetDisplayPlaneCapabilities2KHR( VkPhysicalDevice physicalDevice, const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo, VkDisplayPlaneCapabilities2KHR* pCapabilities); #endif #define VK_KHR_dedicated_allocation 1 #define VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION 3 #define VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_KHR_dedicated_allocation" typedef VkMemoryDedicatedRequirements VkMemoryDedicatedRequirementsKHR; typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR; #define VK_KHR_storage_buffer_storage_class 1 #define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION 1 #define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" #define VK_KHR_relaxed_block_layout 1 #define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 #define VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME "VK_KHR_relaxed_block_layout" #define VK_KHR_get_memory_requirements2 1 #define VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION 1 #define VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME "VK_KHR_get_memory_requirements2" typedef VkBufferMemoryRequirementsInfo2 VkBufferMemoryRequirementsInfo2KHR; typedef VkImageMemoryRequirementsInfo2 VkImageMemoryRequirementsInfo2KHR; typedef VkImageSparseMemoryRequirementsInfo2 VkImageSparseMemoryRequirementsInfo2KHR; typedef VkMemoryRequirements2 VkMemoryRequirements2KHR; typedef VkSparseImageMemoryRequirements2 VkSparseImageMemoryRequirements2KHR; typedef void (VKAPI_PTR *PFN_vkGetImageMemoryRequirements2KHR)(VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetBufferMemoryRequirements2KHR)(VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkGetImageSparseMemoryRequirements2KHR)(VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements2KHR( VkDevice device, const VkImageMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements2KHR( VkDevice device, const VkBufferMemoryRequirementsInfo2* pInfo, VkMemoryRequirements2* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements2KHR( VkDevice device, const VkImageSparseMemoryRequirementsInfo2* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements); #endif #define VK_KHR_image_format_list 1 #define VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION 1 #define VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME "VK_KHR_image_format_list" typedef VkImageFormatListCreateInfo VkImageFormatListCreateInfoKHR; #define VK_KHR_sampler_ycbcr_conversion 1 typedef VkSamplerYcbcrConversion VkSamplerYcbcrConversionKHR; #define VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION 14 #define VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME "VK_KHR_sampler_ycbcr_conversion" typedef VkSamplerYcbcrModelConversion VkSamplerYcbcrModelConversionKHR; typedef VkSamplerYcbcrRange VkSamplerYcbcrRangeKHR; typedef VkChromaLocation VkChromaLocationKHR; typedef VkSamplerYcbcrConversionCreateInfo VkSamplerYcbcrConversionCreateInfoKHR; typedef VkSamplerYcbcrConversionInfo VkSamplerYcbcrConversionInfoKHR; typedef VkBindImagePlaneMemoryInfo VkBindImagePlaneMemoryInfoKHR; typedef VkImagePlaneMemoryRequirementsInfo VkImagePlaneMemoryRequirementsInfoKHR; typedef VkPhysicalDeviceSamplerYcbcrConversionFeatures VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR; typedef VkSamplerYcbcrConversionImageFormatProperties VkSamplerYcbcrConversionImageFormatPropertiesKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateSamplerYcbcrConversionKHR)(VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); typedef void (VKAPI_PTR *PFN_vkDestroySamplerYcbcrConversionKHR)(VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateSamplerYcbcrConversionKHR( VkDevice device, const VkSamplerYcbcrConversionCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSamplerYcbcrConversion* pYcbcrConversion); VKAPI_ATTR void VKAPI_CALL vkDestroySamplerYcbcrConversionKHR( VkDevice device, VkSamplerYcbcrConversion ycbcrConversion, const VkAllocationCallbacks* pAllocator); #endif #define VK_KHR_bind_memory2 1 #define VK_KHR_BIND_MEMORY_2_SPEC_VERSION 1 #define VK_KHR_BIND_MEMORY_2_EXTENSION_NAME "VK_KHR_bind_memory2" typedef VkBindBufferMemoryInfo VkBindBufferMemoryInfoKHR; typedef VkBindImageMemoryInfo VkBindImageMemoryInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkBindBufferMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); typedef VkResult (VKAPI_PTR *PFN_vkBindImageMemory2KHR)(VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory2KHR( VkDevice device, uint32_t bindInfoCount, const VkBindBufferMemoryInfo* pBindInfos); VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR( VkDevice device, uint32_t bindInfoCount, const VkBindImageMemoryInfo* pBindInfos); #endif #define VK_KHR_maintenance3 1 #define VK_KHR_MAINTENANCE3_SPEC_VERSION 1 #define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3" typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR; typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR; typedef void (VKAPI_PTR *PFN_vkGetDescriptorSetLayoutSupportKHR)(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetLayoutSupportKHR( VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayoutSupport* pSupport); #endif #define VK_KHR_draw_indirect_count 1 #define VK_KHR_DRAW_INDIRECT_COUNT_SPEC_VERSION 1 #define VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_KHR_draw_indirect_count" typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountKHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountKHR( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountKHR( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); #endif #define VK_KHR_shader_subgroup_extended_types 1 #define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_SPEC_VERSION 1 #define VK_KHR_SHADER_SUBGROUP_EXTENDED_TYPES_EXTENSION_NAME "VK_KHR_shader_subgroup_extended_types" typedef VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures VkPhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR; #define VK_KHR_8bit_storage 1 #define VK_KHR_8BIT_STORAGE_SPEC_VERSION 1 #define VK_KHR_8BIT_STORAGE_EXTENSION_NAME "VK_KHR_8bit_storage" typedef VkPhysicalDevice8BitStorageFeatures VkPhysicalDevice8BitStorageFeaturesKHR; #define VK_KHR_shader_atomic_int64 1 #define VK_KHR_SHADER_ATOMIC_INT64_SPEC_VERSION 1 #define VK_KHR_SHADER_ATOMIC_INT64_EXTENSION_NAME "VK_KHR_shader_atomic_int64" typedef VkPhysicalDeviceShaderAtomicInt64Features VkPhysicalDeviceShaderAtomicInt64FeaturesKHR; #define VK_KHR_shader_clock 1 #define VK_KHR_SHADER_CLOCK_SPEC_VERSION 1 #define VK_KHR_SHADER_CLOCK_EXTENSION_NAME "VK_KHR_shader_clock" typedef struct VkPhysicalDeviceShaderClockFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 shaderSubgroupClock; VkBool32 shaderDeviceClock; } VkPhysicalDeviceShaderClockFeaturesKHR; #define VK_KHR_driver_properties 1 #define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1 #define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties" #define VK_MAX_DRIVER_NAME_SIZE_KHR VK_MAX_DRIVER_NAME_SIZE #define VK_MAX_DRIVER_INFO_SIZE_KHR VK_MAX_DRIVER_INFO_SIZE typedef VkDriverId VkDriverIdKHR; typedef VkConformanceVersion VkConformanceVersionKHR; typedef VkPhysicalDeviceDriverProperties VkPhysicalDeviceDriverPropertiesKHR; #define VK_KHR_shader_float_controls 1 #define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 4 #define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls" typedef VkShaderFloatControlsIndependence VkShaderFloatControlsIndependenceKHR; typedef VkPhysicalDeviceFloatControlsProperties VkPhysicalDeviceFloatControlsPropertiesKHR; #define VK_KHR_depth_stencil_resolve 1 #define VK_KHR_DEPTH_STENCIL_RESOLVE_SPEC_VERSION 1 #define VK_KHR_DEPTH_STENCIL_RESOLVE_EXTENSION_NAME "VK_KHR_depth_stencil_resolve" typedef VkResolveModeFlagBits VkResolveModeFlagBitsKHR; typedef VkResolveModeFlags VkResolveModeFlagsKHR; typedef VkSubpassDescriptionDepthStencilResolve VkSubpassDescriptionDepthStencilResolveKHR; typedef VkPhysicalDeviceDepthStencilResolveProperties VkPhysicalDeviceDepthStencilResolvePropertiesKHR; #define VK_KHR_swapchain_mutable_format 1 #define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1 #define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format" #define VK_KHR_timeline_semaphore 1 #define VK_KHR_TIMELINE_SEMAPHORE_SPEC_VERSION 2 #define VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME "VK_KHR_timeline_semaphore" typedef VkSemaphoreType VkSemaphoreTypeKHR; typedef VkSemaphoreWaitFlagBits VkSemaphoreWaitFlagBitsKHR; typedef VkSemaphoreWaitFlags VkSemaphoreWaitFlagsKHR; typedef VkPhysicalDeviceTimelineSemaphoreFeatures VkPhysicalDeviceTimelineSemaphoreFeaturesKHR; typedef VkPhysicalDeviceTimelineSemaphoreProperties VkPhysicalDeviceTimelineSemaphorePropertiesKHR; typedef VkSemaphoreTypeCreateInfo VkSemaphoreTypeCreateInfoKHR; typedef VkTimelineSemaphoreSubmitInfo VkTimelineSemaphoreSubmitInfoKHR; typedef VkSemaphoreWaitInfo VkSemaphoreWaitInfoKHR; typedef VkSemaphoreSignalInfo VkSemaphoreSignalInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreCounterValueKHR)(VkDevice device, VkSemaphore semaphore, uint64_t* pValue); typedef VkResult (VKAPI_PTR *PFN_vkWaitSemaphoresKHR)(VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); typedef VkResult (VKAPI_PTR *PFN_vkSignalSemaphoreKHR)(VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreCounterValueKHR( VkDevice device, VkSemaphore semaphore, uint64_t* pValue); VKAPI_ATTR VkResult VKAPI_CALL vkWaitSemaphoresKHR( VkDevice device, const VkSemaphoreWaitInfo* pWaitInfo, uint64_t timeout); VKAPI_ATTR VkResult VKAPI_CALL vkSignalSemaphoreKHR( VkDevice device, const VkSemaphoreSignalInfo* pSignalInfo); #endif #define VK_KHR_vulkan_memory_model 1 #define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3 #define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model" typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryModelFeaturesKHR; #define VK_KHR_shader_terminate_invocation 1 #define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1 #define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation" typedef struct VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 shaderTerminateInvocation; } VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR; #define VK_KHR_fragment_shading_rate 1 #define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 1 #define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate" typedef enum VkFragmentShadingRateCombinerOpKHR { VK_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_KHR = 0, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_KHR = 1, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_KHR = 2, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_KHR = 3, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_KHR = 4, VK_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_ENUM_KHR = 0x7FFFFFFF } VkFragmentShadingRateCombinerOpKHR; typedef struct VkFragmentShadingRateAttachmentInfoKHR { VkStructureType sType; const void* pNext; const VkAttachmentReference2* pFragmentShadingRateAttachment; VkExtent2D shadingRateAttachmentTexelSize; } VkFragmentShadingRateAttachmentInfoKHR; typedef struct VkPipelineFragmentShadingRateStateCreateInfoKHR { VkStructureType sType; const void* pNext; VkExtent2D fragmentSize; VkFragmentShadingRateCombinerOpKHR combinerOps[2]; } VkPipelineFragmentShadingRateStateCreateInfoKHR; typedef struct VkPhysicalDeviceFragmentShadingRateFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 pipelineFragmentShadingRate; VkBool32 primitiveFragmentShadingRate; VkBool32 attachmentFragmentShadingRate; } VkPhysicalDeviceFragmentShadingRateFeaturesKHR; typedef struct VkPhysicalDeviceFragmentShadingRatePropertiesKHR { VkStructureType sType; void* pNext; VkExtent2D minFragmentShadingRateAttachmentTexelSize; VkExtent2D maxFragmentShadingRateAttachmentTexelSize; uint32_t maxFragmentShadingRateAttachmentTexelSizeAspectRatio; VkBool32 primitiveFragmentShadingRateWithMultipleViewports; VkBool32 layeredShadingRateAttachments; VkBool32 fragmentShadingRateNonTrivialCombinerOps; VkExtent2D maxFragmentSize; uint32_t maxFragmentSizeAspectRatio; uint32_t maxFragmentShadingRateCoverageSamples; VkSampleCountFlagBits maxFragmentShadingRateRasterizationSamples; VkBool32 fragmentShadingRateWithShaderDepthStencilWrites; VkBool32 fragmentShadingRateWithSampleMask; VkBool32 fragmentShadingRateWithShaderSampleMask; VkBool32 fragmentShadingRateWithConservativeRasterization; VkBool32 fragmentShadingRateWithFragmentShaderInterlock; VkBool32 fragmentShadingRateWithCustomSampleLocations; VkBool32 fragmentShadingRateStrictMultiplyCombiner; } VkPhysicalDeviceFragmentShadingRatePropertiesKHR; typedef struct VkPhysicalDeviceFragmentShadingRateKHR { VkStructureType sType; void* pNext; VkSampleCountFlags sampleCounts; VkExtent2D fragmentSize; } VkPhysicalDeviceFragmentShadingRateKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)(VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateKHR)(VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceFragmentShadingRatesKHR( VkPhysicalDevice physicalDevice, uint32_t* pFragmentShadingRateCount, VkPhysicalDeviceFragmentShadingRateKHR* pFragmentShadingRates); VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( VkCommandBuffer commandBuffer, const VkExtent2D* pFragmentSize, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); #endif #define VK_KHR_spirv_1_4 1 #define VK_KHR_SPIRV_1_4_SPEC_VERSION 1 #define VK_KHR_SPIRV_1_4_EXTENSION_NAME "VK_KHR_spirv_1_4" #define VK_KHR_surface_protected_capabilities 1 #define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_SPEC_VERSION 1 #define VK_KHR_SURFACE_PROTECTED_CAPABILITIES_EXTENSION_NAME "VK_KHR_surface_protected_capabilities" typedef struct VkSurfaceProtectedCapabilitiesKHR { VkStructureType sType; const void* pNext; VkBool32 supportsProtected; } VkSurfaceProtectedCapabilitiesKHR; #define VK_KHR_separate_depth_stencil_layouts 1 #define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_SPEC_VERSION 1 #define VK_KHR_SEPARATE_DEPTH_STENCIL_LAYOUTS_EXTENSION_NAME "VK_KHR_separate_depth_stencil_layouts" typedef VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR; typedef VkAttachmentReferenceStencilLayout VkAttachmentReferenceStencilLayoutKHR; typedef VkAttachmentDescriptionStencilLayout VkAttachmentDescriptionStencilLayoutKHR; #define VK_KHR_uniform_buffer_standard_layout 1 #define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_SPEC_VERSION 1 #define VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME "VK_KHR_uniform_buffer_standard_layout" typedef VkPhysicalDeviceUniformBufferStandardLayoutFeatures VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR; #define VK_KHR_buffer_device_address 1 #define VK_KHR_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 1 #define VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_KHR_buffer_device_address" typedef VkPhysicalDeviceBufferDeviceAddressFeatures VkPhysicalDeviceBufferDeviceAddressFeaturesKHR; typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoKHR; typedef VkBufferOpaqueCaptureAddressCreateInfo VkBufferOpaqueCaptureAddressCreateInfoKHR; typedef VkMemoryOpaqueCaptureAddressAllocateInfo VkMemoryOpaqueCaptureAddressAllocateInfoKHR; typedef VkDeviceMemoryOpaqueCaptureAddressInfo VkDeviceMemoryOpaqueCaptureAddressInfoKHR; typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); typedef uint64_t (VKAPI_PTR *PFN_vkGetBufferOpaqueCaptureAddressKHR)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); typedef uint64_t (VKAPI_PTR *PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo* pInfo); VKAPI_ATTR uint64_t VKAPI_CALL vkGetBufferOpaqueCaptureAddressKHR( VkDevice device, const VkBufferDeviceAddressInfo* pInfo); VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddressKHR( VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo); #endif #define VK_KHR_deferred_host_operations 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeferredOperationKHR) #define VK_KHR_DEFERRED_HOST_OPERATIONS_SPEC_VERSION 4 #define VK_KHR_DEFERRED_HOST_OPERATIONS_EXTENSION_NAME "VK_KHR_deferred_host_operations" typedef VkResult (VKAPI_PTR *PFN_vkCreateDeferredOperationKHR)(VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation); typedef void (VKAPI_PTR *PFN_vkDestroyDeferredOperationKHR)(VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator); typedef uint32_t (VKAPI_PTR *PFN_vkGetDeferredOperationMaxConcurrencyKHR)(VkDevice device, VkDeferredOperationKHR operation); typedef VkResult (VKAPI_PTR *PFN_vkGetDeferredOperationResultKHR)(VkDevice device, VkDeferredOperationKHR operation); typedef VkResult (VKAPI_PTR *PFN_vkDeferredOperationJoinKHR)(VkDevice device, VkDeferredOperationKHR operation); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateDeferredOperationKHR( VkDevice device, const VkAllocationCallbacks* pAllocator, VkDeferredOperationKHR* pDeferredOperation); VKAPI_ATTR void VKAPI_CALL vkDestroyDeferredOperationKHR( VkDevice device, VkDeferredOperationKHR operation, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR uint32_t VKAPI_CALL vkGetDeferredOperationMaxConcurrencyKHR( VkDevice device, VkDeferredOperationKHR operation); VKAPI_ATTR VkResult VKAPI_CALL vkGetDeferredOperationResultKHR( VkDevice device, VkDeferredOperationKHR operation); VKAPI_ATTR VkResult VKAPI_CALL vkDeferredOperationJoinKHR( VkDevice device, VkDeferredOperationKHR operation); #endif #define VK_KHR_pipeline_executable_properties 1 #define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_SPEC_VERSION 1 #define VK_KHR_PIPELINE_EXECUTABLE_PROPERTIES_EXTENSION_NAME "VK_KHR_pipeline_executable_properties" typedef enum VkPipelineExecutableStatisticFormatKHR { VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_BOOL32_KHR = 0, VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_INT64_KHR = 1, VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_UINT64_KHR = 2, VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_FLOAT64_KHR = 3, VK_PIPELINE_EXECUTABLE_STATISTIC_FORMAT_MAX_ENUM_KHR = 0x7FFFFFFF } VkPipelineExecutableStatisticFormatKHR; typedef struct VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 pipelineExecutableInfo; } VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR; typedef struct VkPipelineInfoKHR { VkStructureType sType; const void* pNext; VkPipeline pipeline; } VkPipelineInfoKHR; typedef struct VkPipelineExecutablePropertiesKHR { VkStructureType sType; void* pNext; VkShaderStageFlags stages; char name[VK_MAX_DESCRIPTION_SIZE]; char description[VK_MAX_DESCRIPTION_SIZE]; uint32_t subgroupSize; } VkPipelineExecutablePropertiesKHR; typedef struct VkPipelineExecutableInfoKHR { VkStructureType sType; const void* pNext; VkPipeline pipeline; uint32_t executableIndex; } VkPipelineExecutableInfoKHR; typedef union VkPipelineExecutableStatisticValueKHR { VkBool32 b32; int64_t i64; uint64_t u64; double f64; } VkPipelineExecutableStatisticValueKHR; typedef struct VkPipelineExecutableStatisticKHR { VkStructureType sType; void* pNext; char name[VK_MAX_DESCRIPTION_SIZE]; char description[VK_MAX_DESCRIPTION_SIZE]; VkPipelineExecutableStatisticFormatKHR format; VkPipelineExecutableStatisticValueKHR value; } VkPipelineExecutableStatisticKHR; typedef struct VkPipelineExecutableInternalRepresentationKHR { VkStructureType sType; void* pNext; char name[VK_MAX_DESCRIPTION_SIZE]; char description[VK_MAX_DESCRIPTION_SIZE]; VkBool32 isText; size_t dataSize; void* pData; } VkPipelineExecutableInternalRepresentationKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutablePropertiesKHR)(VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableStatisticsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics); typedef VkResult (VKAPI_PTR *PFN_vkGetPipelineExecutableInternalRepresentationsKHR)(VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutablePropertiesKHR( VkDevice device, const VkPipelineInfoKHR* pPipelineInfo, uint32_t* pExecutableCount, VkPipelineExecutablePropertiesKHR* pProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableStatisticsKHR( VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pStatisticCount, VkPipelineExecutableStatisticKHR* pStatistics); VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR( VkDevice device, const VkPipelineExecutableInfoKHR* pExecutableInfo, uint32_t* pInternalRepresentationCount, VkPipelineExecutableInternalRepresentationKHR* pInternalRepresentations); #endif #define VK_KHR_pipeline_library 1 #define VK_KHR_PIPELINE_LIBRARY_SPEC_VERSION 1 #define VK_KHR_PIPELINE_LIBRARY_EXTENSION_NAME "VK_KHR_pipeline_library" typedef struct VkPipelineLibraryCreateInfoKHR { VkStructureType sType; const void* pNext; uint32_t libraryCount; const VkPipeline* pLibraries; } VkPipelineLibraryCreateInfoKHR; #define VK_KHR_shader_non_semantic_info 1 #define VK_KHR_SHADER_NON_SEMANTIC_INFO_SPEC_VERSION 1 #define VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME "VK_KHR_shader_non_semantic_info" #define VK_KHR_synchronization2 1 typedef uint64_t VkFlags64; #define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1 #define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2" typedef VkFlags64 VkPipelineStageFlags2KHR; // Flag bits for VkPipelineStageFlagBits2KHR typedef VkFlags64 VkPipelineStageFlagBits2KHR; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL; #ifdef VK_ENABLE_BETA_EXTENSIONS static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL; #endif #ifdef VK_ENABLE_BETA_EXTENSIONS static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL; #endif static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL; static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_FLAG_BITS_2KHR_MAX_ENUM_KHR = 0x7FFFFFFFFFFFFFFFULL; typedef VkFlags64 VkAccessFlags2KHR; // Flag bits for VkAccessFlagBits2KHR typedef VkFlags64 VkAccessFlagBits2KHR; static const VkAccessFlagBits2KHR VK_ACCESS_2_NONE_KHR = 0ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL; #ifdef VK_ENABLE_BETA_EXTENSIONS static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL; #endif #ifdef VK_ENABLE_BETA_EXTENSIONS static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL; #endif #ifdef VK_ENABLE_BETA_EXTENSIONS static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL; #endif #ifdef VK_ENABLE_BETA_EXTENSIONS static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL; #endif static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000; static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000; static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000; static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL; static const VkAccessFlagBits2KHR VK_ACCESS_FLAG_BITS_2KHR_MAX_ENUM_KHR = 0x7FFFFFFFFFFFFFFFULL; typedef enum VkSubmitFlagBitsKHR { VK_SUBMIT_PROTECTED_BIT_KHR = 0x00000001, VK_SUBMIT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkSubmitFlagBitsKHR; typedef VkFlags VkSubmitFlagsKHR; typedef struct VkMemoryBarrier2KHR { VkStructureType sType; const void* pNext; VkPipelineStageFlags2KHR srcStageMask; VkAccessFlags2KHR srcAccessMask; VkPipelineStageFlags2KHR dstStageMask; VkAccessFlags2KHR dstAccessMask; } VkMemoryBarrier2KHR; typedef struct VkBufferMemoryBarrier2KHR { VkStructureType sType; const void* pNext; VkPipelineStageFlags2KHR srcStageMask; VkAccessFlags2KHR srcAccessMask; VkPipelineStageFlags2KHR dstStageMask; VkAccessFlags2KHR dstAccessMask; uint32_t srcQueueFamilyIndex; uint32_t dstQueueFamilyIndex; VkBuffer buffer; VkDeviceSize offset; VkDeviceSize size; } VkBufferMemoryBarrier2KHR; typedef struct VkImageMemoryBarrier2KHR { VkStructureType sType; const void* pNext; VkPipelineStageFlags2KHR srcStageMask; VkAccessFlags2KHR srcAccessMask; VkPipelineStageFlags2KHR dstStageMask; VkAccessFlags2KHR dstAccessMask; VkImageLayout oldLayout; VkImageLayout newLayout; uint32_t srcQueueFamilyIndex; uint32_t dstQueueFamilyIndex; VkImage image; VkImageSubresourceRange subresourceRange; } VkImageMemoryBarrier2KHR; typedef struct VkDependencyInfoKHR { VkStructureType sType; const void* pNext; VkDependencyFlags dependencyFlags; uint32_t memoryBarrierCount; const VkMemoryBarrier2KHR* pMemoryBarriers; uint32_t bufferMemoryBarrierCount; const VkBufferMemoryBarrier2KHR* pBufferMemoryBarriers; uint32_t imageMemoryBarrierCount; const VkImageMemoryBarrier2KHR* pImageMemoryBarriers; } VkDependencyInfoKHR; typedef struct VkSemaphoreSubmitInfoKHR { VkStructureType sType; const void* pNext; VkSemaphore semaphore; uint64_t value; VkPipelineStageFlags2KHR stageMask; uint32_t deviceIndex; } VkSemaphoreSubmitInfoKHR; typedef struct VkCommandBufferSubmitInfoKHR { VkStructureType sType; const void* pNext; VkCommandBuffer commandBuffer; uint32_t deviceMask; } VkCommandBufferSubmitInfoKHR; typedef struct VkSubmitInfo2KHR { VkStructureType sType; const void* pNext; VkSubmitFlagsKHR flags; uint32_t waitSemaphoreInfoCount; const VkSemaphoreSubmitInfoKHR* pWaitSemaphoreInfos; uint32_t commandBufferInfoCount; const VkCommandBufferSubmitInfoKHR* pCommandBufferInfos; uint32_t signalSemaphoreInfoCount; const VkSemaphoreSubmitInfoKHR* pSignalSemaphoreInfos; } VkSubmitInfo2KHR; typedef struct VkPhysicalDeviceSynchronization2FeaturesKHR { VkStructureType sType; void* pNext; VkBool32 synchronization2; } VkPhysicalDeviceSynchronization2FeaturesKHR; typedef struct VkQueueFamilyCheckpointProperties2NV { VkStructureType sType; void* pNext; VkPipelineStageFlags2KHR checkpointExecutionStageMask; } VkQueueFamilyCheckpointProperties2NV; typedef struct VkCheckpointData2NV { VkStructureType sType; void* pNext; VkPipelineStageFlags2KHR stage; void* pCheckpointMarker; } VkCheckpointData2NV; typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo); typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR stageMask); typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfos); typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo); typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2KHR stage, VkQueryPool queryPool, uint32_t query); typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence); typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2KHR stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo); VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR( VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR stageMask); VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR( VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfos); VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo); VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR( VkCommandBuffer commandBuffer, VkPipelineStageFlags2KHR stage, VkQueryPool queryPool, uint32_t query); VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR( VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence); VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD( VkCommandBuffer commandBuffer, VkPipelineStageFlags2KHR stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointData2NV( VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData); #endif #define VK_KHR_zero_initialize_workgroup_memory 1 #define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1 #define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory" typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 shaderZeroInitializeWorkgroupMemory; } VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR; #define VK_KHR_workgroup_memory_explicit_layout 1 #define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_SPEC_VERSION 1 #define VK_KHR_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_EXTENSION_NAME "VK_KHR_workgroup_memory_explicit_layout" typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 workgroupMemoryExplicitLayout; VkBool32 workgroupMemoryExplicitLayoutScalarBlockLayout; VkBool32 workgroupMemoryExplicitLayout8BitAccess; VkBool32 workgroupMemoryExplicitLayout16BitAccess; } VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR; #define VK_KHR_copy_commands2 1 #define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1 #define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2" typedef struct VkBufferCopy2KHR { VkStructureType sType; const void* pNext; VkDeviceSize srcOffset; VkDeviceSize dstOffset; VkDeviceSize size; } VkBufferCopy2KHR; typedef struct VkCopyBufferInfo2KHR { VkStructureType sType; const void* pNext; VkBuffer srcBuffer; VkBuffer dstBuffer; uint32_t regionCount; const VkBufferCopy2KHR* pRegions; } VkCopyBufferInfo2KHR; typedef struct VkImageCopy2KHR { VkStructureType sType; const void* pNext; VkImageSubresourceLayers srcSubresource; VkOffset3D srcOffset; VkImageSubresourceLayers dstSubresource; VkOffset3D dstOffset; VkExtent3D extent; } VkImageCopy2KHR; typedef struct VkCopyImageInfo2KHR { VkStructureType sType; const void* pNext; VkImage srcImage; VkImageLayout srcImageLayout; VkImage dstImage; VkImageLayout dstImageLayout; uint32_t regionCount; const VkImageCopy2KHR* pRegions; } VkCopyImageInfo2KHR; typedef struct VkBufferImageCopy2KHR { VkStructureType sType; const void* pNext; VkDeviceSize bufferOffset; uint32_t bufferRowLength; uint32_t bufferImageHeight; VkImageSubresourceLayers imageSubresource; VkOffset3D imageOffset; VkExtent3D imageExtent; } VkBufferImageCopy2KHR; typedef struct VkCopyBufferToImageInfo2KHR { VkStructureType sType; const void* pNext; VkBuffer srcBuffer; VkImage dstImage; VkImageLayout dstImageLayout; uint32_t regionCount; const VkBufferImageCopy2KHR* pRegions; } VkCopyBufferToImageInfo2KHR; typedef struct VkCopyImageToBufferInfo2KHR { VkStructureType sType; const void* pNext; VkImage srcImage; VkImageLayout srcImageLayout; VkBuffer dstBuffer; uint32_t regionCount; const VkBufferImageCopy2KHR* pRegions; } VkCopyImageToBufferInfo2KHR; typedef struct VkImageBlit2KHR { VkStructureType sType; const void* pNext; VkImageSubresourceLayers srcSubresource; VkOffset3D srcOffsets[2]; VkImageSubresourceLayers dstSubresource; VkOffset3D dstOffsets[2]; } VkImageBlit2KHR; typedef struct VkBlitImageInfo2KHR { VkStructureType sType; const void* pNext; VkImage srcImage; VkImageLayout srcImageLayout; VkImage dstImage; VkImageLayout dstImageLayout; uint32_t regionCount; const VkImageBlit2KHR* pRegions; VkFilter filter; } VkBlitImageInfo2KHR; typedef struct VkImageResolve2KHR { VkStructureType sType; const void* pNext; VkImageSubresourceLayers srcSubresource; VkOffset3D srcOffset; VkImageSubresourceLayers dstSubresource; VkOffset3D dstOffset; VkExtent3D extent; } VkImageResolve2KHR; typedef struct VkResolveImageInfo2KHR { VkStructureType sType; const void* pNext; VkImage srcImage; VkImageLayout srcImageLayout; VkImage dstImage; VkImageLayout dstImageLayout; uint32_t regionCount; const VkImageResolve2KHR* pRegions; } VkResolveImageInfo2KHR; typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo); typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo); typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo); typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo); typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo); typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR( VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo); VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR( VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo); VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR( VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo); VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR( VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo); VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR( VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo); VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR( VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo); #endif #define VK_EXT_debug_report 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) #define VK_EXT_DEBUG_REPORT_SPEC_VERSION 10 #define VK_EXT_DEBUG_REPORT_EXTENSION_NAME "VK_EXT_debug_report" typedef enum VkDebugReportObjectTypeEXT { VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = 0, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = 1, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = 2, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = 3, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = 4, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = 5, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = 6, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = 7, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = 8, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = 9, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = 10, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = 11, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = 12, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = 13, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = 14, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = 15, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = 16, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = 17, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = 18, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = 19, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = 20, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = 21, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = 22, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = 23, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = 24, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = 25, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = 26, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = 27, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = 28, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = 29, VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = 30, VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = 33, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = 1000156000, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = 1000085000, VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000, VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDebugReportObjectTypeEXT; typedef enum VkDebugReportFlagBitsEXT { VK_DEBUG_REPORT_INFORMATION_BIT_EXT = 0x00000001, VK_DEBUG_REPORT_WARNING_BIT_EXT = 0x00000002, VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = 0x00000004, VK_DEBUG_REPORT_ERROR_BIT_EXT = 0x00000008, VK_DEBUG_REPORT_DEBUG_BIT_EXT = 0x00000010, VK_DEBUG_REPORT_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkDebugReportFlagBitsEXT; typedef VkFlags VkDebugReportFlagsEXT; typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage, void* pUserData); typedef struct VkDebugReportCallbackCreateInfoEXT { VkStructureType sType; const void* pNext; VkDebugReportFlagsEXT flags; PFN_vkDebugReportCallbackEXT pfnCallback; void* pUserData; } VkDebugReportCallbackCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugReportCallbackEXT)(VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); typedef void (VKAPI_PTR *PFN_vkDestroyDebugReportCallbackEXT)(VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkDebugReportMessageEXT)(VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT( VkInstance instance, const VkDebugReportCallbackCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugReportCallbackEXT* pCallback); VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT( VkInstance instance, VkDebugReportCallbackEXT callback, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT( VkInstance instance, VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage); #endif #define VK_NV_glsl_shader 1 #define VK_NV_GLSL_SHADER_SPEC_VERSION 1 #define VK_NV_GLSL_SHADER_EXTENSION_NAME "VK_NV_glsl_shader" #define VK_EXT_depth_range_unrestricted 1 #define VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION 1 #define VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME "VK_EXT_depth_range_unrestricted" #define VK_IMG_filter_cubic 1 #define VK_IMG_FILTER_CUBIC_SPEC_VERSION 1 #define VK_IMG_FILTER_CUBIC_EXTENSION_NAME "VK_IMG_filter_cubic" #define VK_AMD_rasterization_order 1 #define VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION 1 #define VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME "VK_AMD_rasterization_order" typedef enum VkRasterizationOrderAMD { VK_RASTERIZATION_ORDER_STRICT_AMD = 0, VK_RASTERIZATION_ORDER_RELAXED_AMD = 1, VK_RASTERIZATION_ORDER_MAX_ENUM_AMD = 0x7FFFFFFF } VkRasterizationOrderAMD; typedef struct VkPipelineRasterizationStateRasterizationOrderAMD { VkStructureType sType; const void* pNext; VkRasterizationOrderAMD rasterizationOrder; } VkPipelineRasterizationStateRasterizationOrderAMD; #define VK_AMD_shader_trinary_minmax 1 #define VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION 1 #define VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME "VK_AMD_shader_trinary_minmax" #define VK_AMD_shader_explicit_vertex_parameter 1 #define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION 1 #define VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME "VK_AMD_shader_explicit_vertex_parameter" #define VK_EXT_debug_marker 1 #define VK_EXT_DEBUG_MARKER_SPEC_VERSION 4 #define VK_EXT_DEBUG_MARKER_EXTENSION_NAME "VK_EXT_debug_marker" typedef struct VkDebugMarkerObjectNameInfoEXT { VkStructureType sType; const void* pNext; VkDebugReportObjectTypeEXT objectType; uint64_t object; const char* pObjectName; } VkDebugMarkerObjectNameInfoEXT; typedef struct VkDebugMarkerObjectTagInfoEXT { VkStructureType sType; const void* pNext; VkDebugReportObjectTypeEXT objectType; uint64_t object; uint64_t tagName; size_t tagSize; const void* pTag; } VkDebugMarkerObjectTagInfoEXT; typedef struct VkDebugMarkerMarkerInfoEXT { VkStructureType sType; const void* pNext; const char* pMarkerName; float color[4]; } VkDebugMarkerMarkerInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectTagEXT)(VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo); typedef VkResult (VKAPI_PTR *PFN_vkDebugMarkerSetObjectNameEXT)(VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo); typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerBeginEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerEndEXT)(VkCommandBuffer commandBuffer); typedef void (VKAPI_PTR *PFN_vkCmdDebugMarkerInsertEXT)(VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectTagEXT( VkDevice device, const VkDebugMarkerObjectTagInfoEXT* pTagInfo); VKAPI_ATTR VkResult VKAPI_CALL vkDebugMarkerSetObjectNameEXT( VkDevice device, const VkDebugMarkerObjectNameInfoEXT* pNameInfo); VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerBeginEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerEndEXT( VkCommandBuffer commandBuffer); VKAPI_ATTR void VKAPI_CALL vkCmdDebugMarkerInsertEXT( VkCommandBuffer commandBuffer, const VkDebugMarkerMarkerInfoEXT* pMarkerInfo); #endif #define VK_AMD_gcn_shader 1 #define VK_AMD_GCN_SHADER_SPEC_VERSION 1 #define VK_AMD_GCN_SHADER_EXTENSION_NAME "VK_AMD_gcn_shader" #define VK_NV_dedicated_allocation 1 #define VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION 1 #define VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME "VK_NV_dedicated_allocation" typedef struct VkDedicatedAllocationImageCreateInfoNV { VkStructureType sType; const void* pNext; VkBool32 dedicatedAllocation; } VkDedicatedAllocationImageCreateInfoNV; typedef struct VkDedicatedAllocationBufferCreateInfoNV { VkStructureType sType; const void* pNext; VkBool32 dedicatedAllocation; } VkDedicatedAllocationBufferCreateInfoNV; typedef struct VkDedicatedAllocationMemoryAllocateInfoNV { VkStructureType sType; const void* pNext; VkImage image; VkBuffer buffer; } VkDedicatedAllocationMemoryAllocateInfoNV; #define VK_EXT_transform_feedback 1 #define VK_EXT_TRANSFORM_FEEDBACK_SPEC_VERSION 1 #define VK_EXT_TRANSFORM_FEEDBACK_EXTENSION_NAME "VK_EXT_transform_feedback" typedef VkFlags VkPipelineRasterizationStateStreamCreateFlagsEXT; typedef struct VkPhysicalDeviceTransformFeedbackFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 transformFeedback; VkBool32 geometryStreams; } VkPhysicalDeviceTransformFeedbackFeaturesEXT; typedef struct VkPhysicalDeviceTransformFeedbackPropertiesEXT { VkStructureType sType; void* pNext; uint32_t maxTransformFeedbackStreams; uint32_t maxTransformFeedbackBuffers; VkDeviceSize maxTransformFeedbackBufferSize; uint32_t maxTransformFeedbackStreamDataSize; uint32_t maxTransformFeedbackBufferDataSize; uint32_t maxTransformFeedbackBufferDataStride; VkBool32 transformFeedbackQueries; VkBool32 transformFeedbackStreamsLinesTriangles; VkBool32 transformFeedbackRasterizationStreamSelect; VkBool32 transformFeedbackDraw; } VkPhysicalDeviceTransformFeedbackPropertiesEXT; typedef struct VkPipelineRasterizationStateStreamCreateInfoEXT { VkStructureType sType; const void* pNext; VkPipelineRasterizationStateStreamCreateFlagsEXT flags; uint32_t rasterizationStream; } VkPipelineRasterizationStateStreamCreateInfoEXT; typedef void (VKAPI_PTR *PFN_vkCmdBindTransformFeedbackBuffersEXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes); typedef void (VKAPI_PTR *PFN_vkCmdBeginTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); typedef void (VKAPI_PTR *PFN_vkCmdEndTransformFeedbackEXT)(VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); typedef void (VKAPI_PTR *PFN_vkCmdBeginQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); typedef void (VKAPI_PTR *PFN_vkCmdEndQueryIndexedEXT)(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectByteCountEXT)(VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdBindTransformFeedbackBuffersEXT( VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes); VKAPI_ATTR void VKAPI_CALL vkCmdBeginTransformFeedbackEXT( VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); VKAPI_ATTR void VKAPI_CALL vkCmdEndTransformFeedbackEXT( VkCommandBuffer commandBuffer, uint32_t firstCounterBuffer, uint32_t counterBufferCount, const VkBuffer* pCounterBuffers, const VkDeviceSize* pCounterBufferOffsets); VKAPI_ATTR void VKAPI_CALL vkCmdBeginQueryIndexedEXT( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, VkQueryControlFlags flags, uint32_t index); VKAPI_ATTR void VKAPI_CALL vkCmdEndQueryIndexedEXT( VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, uint32_t index); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( VkCommandBuffer commandBuffer, uint32_t instanceCount, uint32_t firstInstance, VkBuffer counterBuffer, VkDeviceSize counterBufferOffset, uint32_t counterOffset, uint32_t vertexStride); #endif #define VK_NVX_image_view_handle 1 #define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 2 #define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle" typedef struct VkImageViewHandleInfoNVX { VkStructureType sType; const void* pNext; VkImageView imageView; VkDescriptorType descriptorType; VkSampler sampler; } VkImageViewHandleInfoNVX; typedef struct VkImageViewAddressPropertiesNVX { VkStructureType sType; void* pNext; VkDeviceAddress deviceAddress; VkDeviceSize size; } VkImageViewAddressPropertiesNVX; typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( VkDevice device, const VkImageViewHandleInfoNVX* pInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties); #endif #define VK_AMD_draw_indirect_count 1 #define VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION 2 #define VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME "VK_AMD_draw_indirect_count" typedef void (VKAPI_PTR *PFN_vkCmdDrawIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); typedef void (VKAPI_PTR *PFN_vkCmdDrawIndexedIndirectCountAMD)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectCountAMD( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirectCountAMD( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); #endif #define VK_AMD_negative_viewport_height 1 #define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION 1 #define VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME "VK_AMD_negative_viewport_height" #define VK_AMD_gpu_shader_half_float 1 #define VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION 2 #define VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME "VK_AMD_gpu_shader_half_float" #define VK_AMD_shader_ballot 1 #define VK_AMD_SHADER_BALLOT_SPEC_VERSION 1 #define VK_AMD_SHADER_BALLOT_EXTENSION_NAME "VK_AMD_shader_ballot" #define VK_AMD_texture_gather_bias_lod 1 #define VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION 1 #define VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME "VK_AMD_texture_gather_bias_lod" typedef struct VkTextureLODGatherFormatPropertiesAMD { VkStructureType sType; void* pNext; VkBool32 supportsTextureGatherLODBiasAMD; } VkTextureLODGatherFormatPropertiesAMD; #define VK_AMD_shader_info 1 #define VK_AMD_SHADER_INFO_SPEC_VERSION 1 #define VK_AMD_SHADER_INFO_EXTENSION_NAME "VK_AMD_shader_info" typedef enum VkShaderInfoTypeAMD { VK_SHADER_INFO_TYPE_STATISTICS_AMD = 0, VK_SHADER_INFO_TYPE_BINARY_AMD = 1, VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = 2, VK_SHADER_INFO_TYPE_MAX_ENUM_AMD = 0x7FFFFFFF } VkShaderInfoTypeAMD; typedef struct VkShaderResourceUsageAMD { uint32_t numUsedVgprs; uint32_t numUsedSgprs; uint32_t ldsSizePerLocalWorkGroup; size_t ldsUsageSizeInBytes; size_t scratchMemUsageInBytes; } VkShaderResourceUsageAMD; typedef struct VkShaderStatisticsInfoAMD { VkShaderStageFlags shaderStageMask; VkShaderResourceUsageAMD resourceUsage; uint32_t numPhysicalVgprs; uint32_t numPhysicalSgprs; uint32_t numAvailableVgprs; uint32_t numAvailableSgprs; uint32_t computeWorkGroupSize[3]; } VkShaderStatisticsInfoAMD; typedef VkResult (VKAPI_PTR *PFN_vkGetShaderInfoAMD)(VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetShaderInfoAMD( VkDevice device, VkPipeline pipeline, VkShaderStageFlagBits shaderStage, VkShaderInfoTypeAMD infoType, size_t* pInfoSize, void* pInfo); #endif #define VK_AMD_shader_image_load_store_lod 1 #define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION 1 #define VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME "VK_AMD_shader_image_load_store_lod" #define VK_NV_corner_sampled_image 1 #define VK_NV_CORNER_SAMPLED_IMAGE_SPEC_VERSION 2 #define VK_NV_CORNER_SAMPLED_IMAGE_EXTENSION_NAME "VK_NV_corner_sampled_image" typedef struct VkPhysicalDeviceCornerSampledImageFeaturesNV { VkStructureType sType; void* pNext; VkBool32 cornerSampledImage; } VkPhysicalDeviceCornerSampledImageFeaturesNV; #define VK_IMG_format_pvrtc 1 #define VK_IMG_FORMAT_PVRTC_SPEC_VERSION 1 #define VK_IMG_FORMAT_PVRTC_EXTENSION_NAME "VK_IMG_format_pvrtc" #define VK_NV_external_memory_capabilities 1 #define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION 1 #define VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME "VK_NV_external_memory_capabilities" typedef enum VkExternalMemoryHandleTypeFlagBitsNV { VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = 0x00000001, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = 0x00000002, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = 0x00000004, VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = 0x00000008, VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF } VkExternalMemoryHandleTypeFlagBitsNV; typedef VkFlags VkExternalMemoryHandleTypeFlagsNV; typedef enum VkExternalMemoryFeatureFlagBitsNV { VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = 0x00000001, VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = 0x00000002, VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = 0x00000004, VK_EXTERNAL_MEMORY_FEATURE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF } VkExternalMemoryFeatureFlagBitsNV; typedef VkFlags VkExternalMemoryFeatureFlagsNV; typedef struct VkExternalImageFormatPropertiesNV { VkImageFormatProperties imageFormatProperties; VkExternalMemoryFeatureFlagsNV externalMemoryFeatures; VkExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes; VkExternalMemoryHandleTypeFlagsNV compatibleHandleTypes; } VkExternalImageFormatPropertiesNV; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceExternalImageFormatPropertiesNV( VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties); #endif #define VK_NV_external_memory 1 #define VK_NV_EXTERNAL_MEMORY_SPEC_VERSION 1 #define VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME "VK_NV_external_memory" typedef struct VkExternalMemoryImageCreateInfoNV { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagsNV handleTypes; } VkExternalMemoryImageCreateInfoNV; typedef struct VkExportMemoryAllocateInfoNV { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagsNV handleTypes; } VkExportMemoryAllocateInfoNV; #define VK_EXT_validation_flags 1 #define VK_EXT_VALIDATION_FLAGS_SPEC_VERSION 2 #define VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME "VK_EXT_validation_flags" typedef enum VkValidationCheckEXT { VK_VALIDATION_CHECK_ALL_EXT = 0, VK_VALIDATION_CHECK_SHADERS_EXT = 1, VK_VALIDATION_CHECK_MAX_ENUM_EXT = 0x7FFFFFFF } VkValidationCheckEXT; typedef struct VkValidationFlagsEXT { VkStructureType sType; const void* pNext; uint32_t disabledValidationCheckCount; const VkValidationCheckEXT* pDisabledValidationChecks; } VkValidationFlagsEXT; #define VK_EXT_shader_subgroup_ballot 1 #define VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION 1 #define VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME "VK_EXT_shader_subgroup_ballot" #define VK_EXT_shader_subgroup_vote 1 #define VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION 1 #define VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME "VK_EXT_shader_subgroup_vote" #define VK_EXT_texture_compression_astc_hdr 1 #define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1 #define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr" typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 textureCompressionASTC_HDR; } VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT; #define VK_EXT_astc_decode_mode 1 #define VK_EXT_ASTC_DECODE_MODE_SPEC_VERSION 1 #define VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME "VK_EXT_astc_decode_mode" typedef struct VkImageViewASTCDecodeModeEXT { VkStructureType sType; const void* pNext; VkFormat decodeMode; } VkImageViewASTCDecodeModeEXT; typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 decodeModeSharedExponent; } VkPhysicalDeviceASTCDecodeFeaturesEXT; #define VK_EXT_conditional_rendering 1 #define VK_EXT_CONDITIONAL_RENDERING_SPEC_VERSION 2 #define VK_EXT_CONDITIONAL_RENDERING_EXTENSION_NAME "VK_EXT_conditional_rendering" typedef enum VkConditionalRenderingFlagBitsEXT { VK_CONDITIONAL_RENDERING_INVERTED_BIT_EXT = 0x00000001, VK_CONDITIONAL_RENDERING_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkConditionalRenderingFlagBitsEXT; typedef VkFlags VkConditionalRenderingFlagsEXT; typedef struct VkConditionalRenderingBeginInfoEXT { VkStructureType sType; const void* pNext; VkBuffer buffer; VkDeviceSize offset; VkConditionalRenderingFlagsEXT flags; } VkConditionalRenderingBeginInfoEXT; typedef struct VkPhysicalDeviceConditionalRenderingFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 conditionalRendering; VkBool32 inheritedConditionalRendering; } VkPhysicalDeviceConditionalRenderingFeaturesEXT; typedef struct VkCommandBufferInheritanceConditionalRenderingInfoEXT { VkStructureType sType; const void* pNext; VkBool32 conditionalRenderingEnable; } VkCommandBufferInheritanceConditionalRenderingInfoEXT; typedef void (VKAPI_PTR *PFN_vkCmdBeginConditionalRenderingEXT)(VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); typedef void (VKAPI_PTR *PFN_vkCmdEndConditionalRenderingEXT)(VkCommandBuffer commandBuffer); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdBeginConditionalRenderingEXT( VkCommandBuffer commandBuffer, const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin); VKAPI_ATTR void VKAPI_CALL vkCmdEndConditionalRenderingEXT( VkCommandBuffer commandBuffer); #endif #define VK_NV_clip_space_w_scaling 1 #define VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION 1 #define VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME "VK_NV_clip_space_w_scaling" typedef struct VkViewportWScalingNV { float xcoeff; float ycoeff; } VkViewportWScalingNV; typedef struct VkPipelineViewportWScalingStateCreateInfoNV { VkStructureType sType; const void* pNext; VkBool32 viewportWScalingEnable; uint32_t viewportCount; const VkViewportWScalingNV* pViewportWScalings; } VkPipelineViewportWScalingStateCreateInfoNV; typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWScalingNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWScalingNV( VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewportWScalingNV* pViewportWScalings); #endif #define VK_EXT_direct_mode_display 1 #define VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION 1 #define VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME "VK_EXT_direct_mode_display" typedef VkResult (VKAPI_PTR *PFN_vkReleaseDisplayEXT)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkReleaseDisplayEXT( VkPhysicalDevice physicalDevice, VkDisplayKHR display); #endif #define VK_EXT_display_surface_counter 1 #define VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION 1 #define VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME "VK_EXT_display_surface_counter" typedef enum VkSurfaceCounterFlagBitsEXT { VK_SURFACE_COUNTER_VBLANK_BIT_EXT = 0x00000001, VK_SURFACE_COUNTER_VBLANK_EXT = VK_SURFACE_COUNTER_VBLANK_BIT_EXT, VK_SURFACE_COUNTER_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkSurfaceCounterFlagBitsEXT; typedef VkFlags VkSurfaceCounterFlagsEXT; typedef struct VkSurfaceCapabilities2EXT { VkStructureType sType; void* pNext; uint32_t minImageCount; uint32_t maxImageCount; VkExtent2D currentExtent; VkExtent2D minImageExtent; VkExtent2D maxImageExtent; uint32_t maxImageArrayLayers; VkSurfaceTransformFlagsKHR supportedTransforms; VkSurfaceTransformFlagBitsKHR currentTransform; VkCompositeAlphaFlagsKHR supportedCompositeAlpha; VkImageUsageFlags supportedUsageFlags; VkSurfaceCounterFlagsEXT supportedSurfaceCounters; } VkSurfaceCapabilities2EXT; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2EXT( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT* pSurfaceCapabilities); #endif #define VK_EXT_display_control 1 #define VK_EXT_DISPLAY_CONTROL_SPEC_VERSION 1 #define VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME "VK_EXT_display_control" typedef enum VkDisplayPowerStateEXT { VK_DISPLAY_POWER_STATE_OFF_EXT = 0, VK_DISPLAY_POWER_STATE_SUSPEND_EXT = 1, VK_DISPLAY_POWER_STATE_ON_EXT = 2, VK_DISPLAY_POWER_STATE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDisplayPowerStateEXT; typedef enum VkDeviceEventTypeEXT { VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = 0, VK_DEVICE_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDeviceEventTypeEXT; typedef enum VkDisplayEventTypeEXT { VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = 0, VK_DISPLAY_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDisplayEventTypeEXT; typedef struct VkDisplayPowerInfoEXT { VkStructureType sType; const void* pNext; VkDisplayPowerStateEXT powerState; } VkDisplayPowerInfoEXT; typedef struct VkDeviceEventInfoEXT { VkStructureType sType; const void* pNext; VkDeviceEventTypeEXT deviceEvent; } VkDeviceEventInfoEXT; typedef struct VkDisplayEventInfoEXT { VkStructureType sType; const void* pNext; VkDisplayEventTypeEXT displayEvent; } VkDisplayEventInfoEXT; typedef struct VkSwapchainCounterCreateInfoEXT { VkStructureType sType; const void* pNext; VkSurfaceCounterFlagsEXT surfaceCounters; } VkSwapchainCounterCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkDisplayPowerControlEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo); typedef VkResult (VKAPI_PTR *PFN_vkRegisterDeviceEventEXT)(VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); typedef VkResult (VKAPI_PTR *PFN_vkRegisterDisplayEventEXT)(VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainCounterEXT)(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkDisplayPowerControlEXT( VkDevice device, VkDisplayKHR display, const VkDisplayPowerInfoEXT* pDisplayPowerInfo); VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDeviceEventEXT( VkDevice device, const VkDeviceEventInfoEXT* pDeviceEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); VKAPI_ATTR VkResult VKAPI_CALL vkRegisterDisplayEventEXT( VkDevice device, VkDisplayKHR display, const VkDisplayEventInfoEXT* pDisplayEventInfo, const VkAllocationCallbacks* pAllocator, VkFence* pFence); VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainCounterEXT( VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT counter, uint64_t* pCounterValue); #endif #define VK_GOOGLE_display_timing 1 #define VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION 1 #define VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME "VK_GOOGLE_display_timing" typedef struct VkRefreshCycleDurationGOOGLE { uint64_t refreshDuration; } VkRefreshCycleDurationGOOGLE; typedef struct VkPastPresentationTimingGOOGLE { uint32_t presentID; uint64_t desiredPresentTime; uint64_t actualPresentTime; uint64_t earliestPresentTime; uint64_t presentMargin; } VkPastPresentationTimingGOOGLE; typedef struct VkPresentTimeGOOGLE { uint32_t presentID; uint64_t desiredPresentTime; } VkPresentTimeGOOGLE; typedef struct VkPresentTimesInfoGOOGLE { VkStructureType sType; const void* pNext; uint32_t swapchainCount; const VkPresentTimeGOOGLE* pTimes; } VkPresentTimesInfoGOOGLE; typedef VkResult (VKAPI_PTR *PFN_vkGetRefreshCycleDurationGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); typedef VkResult (VKAPI_PTR *PFN_vkGetPastPresentationTimingGOOGLE)(VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetRefreshCycleDurationGOOGLE( VkDevice device, VkSwapchainKHR swapchain, VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties); VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE( VkDevice device, VkSwapchainKHR swapchain, uint32_t* pPresentationTimingCount, VkPastPresentationTimingGOOGLE* pPresentationTimings); #endif #define VK_NV_sample_mask_override_coverage 1 #define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION 1 #define VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME "VK_NV_sample_mask_override_coverage" #define VK_NV_geometry_shader_passthrough 1 #define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION 1 #define VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME "VK_NV_geometry_shader_passthrough" #define VK_NV_viewport_array2 1 #define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1 #define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2" #define VK_NVX_multiview_per_view_attributes 1 #define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION 1 #define VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME "VK_NVX_multiview_per_view_attributes" typedef struct VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX { VkStructureType sType; void* pNext; VkBool32 perViewPositionAllComponents; } VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX; #define VK_NV_viewport_swizzle 1 #define VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION 1 #define VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME "VK_NV_viewport_swizzle" typedef enum VkViewportCoordinateSwizzleNV { VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = 0, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = 1, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = 2, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = 3, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = 4, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = 5, VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = 6, VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = 7, VK_VIEWPORT_COORDINATE_SWIZZLE_MAX_ENUM_NV = 0x7FFFFFFF } VkViewportCoordinateSwizzleNV; typedef VkFlags VkPipelineViewportSwizzleStateCreateFlagsNV; typedef struct VkViewportSwizzleNV { VkViewportCoordinateSwizzleNV x; VkViewportCoordinateSwizzleNV y; VkViewportCoordinateSwizzleNV z; VkViewportCoordinateSwizzleNV w; } VkViewportSwizzleNV; typedef struct VkPipelineViewportSwizzleStateCreateInfoNV { VkStructureType sType; const void* pNext; VkPipelineViewportSwizzleStateCreateFlagsNV flags; uint32_t viewportCount; const VkViewportSwizzleNV* pViewportSwizzles; } VkPipelineViewportSwizzleStateCreateInfoNV; #define VK_EXT_discard_rectangles 1 #define VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION 1 #define VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME "VK_EXT_discard_rectangles" typedef enum VkDiscardRectangleModeEXT { VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = 0, VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = 1, VK_DISCARD_RECTANGLE_MODE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDiscardRectangleModeEXT; typedef VkFlags VkPipelineDiscardRectangleStateCreateFlagsEXT; typedef struct VkPhysicalDeviceDiscardRectanglePropertiesEXT { VkStructureType sType; void* pNext; uint32_t maxDiscardRectangles; } VkPhysicalDeviceDiscardRectanglePropertiesEXT; typedef struct VkPipelineDiscardRectangleStateCreateInfoEXT { VkStructureType sType; const void* pNext; VkPipelineDiscardRectangleStateCreateFlagsEXT flags; VkDiscardRectangleModeEXT discardRectangleMode; uint32_t discardRectangleCount; const VkRect2D* pDiscardRectangles; } VkPipelineDiscardRectangleStateCreateInfoEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetDiscardRectangleEXT)(VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetDiscardRectangleEXT( VkCommandBuffer commandBuffer, uint32_t firstDiscardRectangle, uint32_t discardRectangleCount, const VkRect2D* pDiscardRectangles); #endif #define VK_EXT_conservative_rasterization 1 #define VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION 1 #define VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME "VK_EXT_conservative_rasterization" typedef enum VkConservativeRasterizationModeEXT { VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = 0, VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = 1, VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = 2, VK_CONSERVATIVE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF } VkConservativeRasterizationModeEXT; typedef VkFlags VkPipelineRasterizationConservativeStateCreateFlagsEXT; typedef struct VkPhysicalDeviceConservativeRasterizationPropertiesEXT { VkStructureType sType; void* pNext; float primitiveOverestimationSize; float maxExtraPrimitiveOverestimationSize; float extraPrimitiveOverestimationSizeGranularity; VkBool32 primitiveUnderestimation; VkBool32 conservativePointAndLineRasterization; VkBool32 degenerateTrianglesRasterized; VkBool32 degenerateLinesRasterized; VkBool32 fullyCoveredFragmentShaderInputVariable; VkBool32 conservativeRasterizationPostDepthCoverage; } VkPhysicalDeviceConservativeRasterizationPropertiesEXT; typedef struct VkPipelineRasterizationConservativeStateCreateInfoEXT { VkStructureType sType; const void* pNext; VkPipelineRasterizationConservativeStateCreateFlagsEXT flags; VkConservativeRasterizationModeEXT conservativeRasterizationMode; float extraPrimitiveOverestimationSize; } VkPipelineRasterizationConservativeStateCreateInfoEXT; #define VK_EXT_depth_clip_enable 1 #define VK_EXT_DEPTH_CLIP_ENABLE_SPEC_VERSION 1 #define VK_EXT_DEPTH_CLIP_ENABLE_EXTENSION_NAME "VK_EXT_depth_clip_enable" typedef VkFlags VkPipelineRasterizationDepthClipStateCreateFlagsEXT; typedef struct VkPhysicalDeviceDepthClipEnableFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 depthClipEnable; } VkPhysicalDeviceDepthClipEnableFeaturesEXT; typedef struct VkPipelineRasterizationDepthClipStateCreateInfoEXT { VkStructureType sType; const void* pNext; VkPipelineRasterizationDepthClipStateCreateFlagsEXT flags; VkBool32 depthClipEnable; } VkPipelineRasterizationDepthClipStateCreateInfoEXT; #define VK_EXT_swapchain_colorspace 1 #define VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION 4 #define VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME "VK_EXT_swapchain_colorspace" #define VK_EXT_hdr_metadata 1 #define VK_EXT_HDR_METADATA_SPEC_VERSION 2 #define VK_EXT_HDR_METADATA_EXTENSION_NAME "VK_EXT_hdr_metadata" typedef struct VkXYColorEXT { float x; float y; } VkXYColorEXT; typedef struct VkHdrMetadataEXT { VkStructureType sType; const void* pNext; VkXYColorEXT displayPrimaryRed; VkXYColorEXT displayPrimaryGreen; VkXYColorEXT displayPrimaryBlue; VkXYColorEXT whitePoint; float maxLuminance; float minLuminance; float maxContentLightLevel; float maxFrameAverageLightLevel; } VkHdrMetadataEXT; typedef void (VKAPI_PTR *PFN_vkSetHdrMetadataEXT)(VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkSetHdrMetadataEXT( VkDevice device, uint32_t swapchainCount, const VkSwapchainKHR* pSwapchains, const VkHdrMetadataEXT* pMetadata); #endif #define VK_EXT_external_memory_dma_buf 1 #define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION 1 #define VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME "VK_EXT_external_memory_dma_buf" #define VK_EXT_queue_family_foreign 1 #define VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION 1 #define VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME "VK_EXT_queue_family_foreign" #define VK_QUEUE_FAMILY_FOREIGN_EXT (~2U) #define VK_EXT_debug_utils 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugUtilsMessengerEXT) #define VK_EXT_DEBUG_UTILS_SPEC_VERSION 2 #define VK_EXT_DEBUG_UTILS_EXTENSION_NAME "VK_EXT_debug_utils" typedef VkFlags VkDebugUtilsMessengerCallbackDataFlagsEXT; typedef enum VkDebugUtilsMessageSeverityFlagBitsEXT { VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001, VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010, VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100, VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000, VK_DEBUG_UTILS_MESSAGE_SEVERITY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkDebugUtilsMessageSeverityFlagBitsEXT; typedef enum VkDebugUtilsMessageTypeFlagBitsEXT { VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001, VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002, VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004, VK_DEBUG_UTILS_MESSAGE_TYPE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkDebugUtilsMessageTypeFlagBitsEXT; typedef VkFlags VkDebugUtilsMessageTypeFlagsEXT; typedef VkFlags VkDebugUtilsMessageSeverityFlagsEXT; typedef VkFlags VkDebugUtilsMessengerCreateFlagsEXT; typedef struct VkDebugUtilsLabelEXT { VkStructureType sType; const void* pNext; const char* pLabelName; float color[4]; } VkDebugUtilsLabelEXT; typedef struct VkDebugUtilsObjectNameInfoEXT { VkStructureType sType; const void* pNext; VkObjectType objectType; uint64_t objectHandle; const char* pObjectName; } VkDebugUtilsObjectNameInfoEXT; typedef struct VkDebugUtilsMessengerCallbackDataEXT { VkStructureType sType; const void* pNext; VkDebugUtilsMessengerCallbackDataFlagsEXT flags; const char* pMessageIdName; int32_t messageIdNumber; const char* pMessage; uint32_t queueLabelCount; const VkDebugUtilsLabelEXT* pQueueLabels; uint32_t cmdBufLabelCount; const VkDebugUtilsLabelEXT* pCmdBufLabels; uint32_t objectCount; const VkDebugUtilsObjectNameInfoEXT* pObjects; } VkDebugUtilsMessengerCallbackDataEXT; typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData); typedef struct VkDebugUtilsMessengerCreateInfoEXT { VkStructureType sType; const void* pNext; VkDebugUtilsMessengerCreateFlagsEXT flags; VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; VkDebugUtilsMessageTypeFlagsEXT messageType; PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback; void* pUserData; } VkDebugUtilsMessengerCreateInfoEXT; typedef struct VkDebugUtilsObjectTagInfoEXT { VkStructureType sType; const void* pNext; VkObjectType objectType; uint64_t objectHandle; uint64_t tagName; size_t tagSize; const void* pTag; } VkDebugUtilsObjectTagInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectNameEXT)(VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo); typedef VkResult (VKAPI_PTR *PFN_vkSetDebugUtilsObjectTagEXT)(VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo); typedef void (VKAPI_PTR *PFN_vkQueueBeginDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); typedef void (VKAPI_PTR *PFN_vkQueueEndDebugUtilsLabelEXT)(VkQueue queue); typedef void (VKAPI_PTR *PFN_vkQueueInsertDebugUtilsLabelEXT)(VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); typedef void (VKAPI_PTR *PFN_vkCmdBeginDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); typedef void (VKAPI_PTR *PFN_vkCmdEndDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer); typedef void (VKAPI_PTR *PFN_vkCmdInsertDebugUtilsLabelEXT)(VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); typedef VkResult (VKAPI_PTR *PFN_vkCreateDebugUtilsMessengerEXT)(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger); typedef void (VKAPI_PTR *PFN_vkDestroyDebugUtilsMessengerEXT)(VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkSubmitDebugUtilsMessageEXT)(VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectNameEXT( VkDevice device, const VkDebugUtilsObjectNameInfoEXT* pNameInfo); VKAPI_ATTR VkResult VKAPI_CALL vkSetDebugUtilsObjectTagEXT( VkDevice device, const VkDebugUtilsObjectTagInfoEXT* pTagInfo); VKAPI_ATTR void VKAPI_CALL vkQueueBeginDebugUtilsLabelEXT( VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); VKAPI_ATTR void VKAPI_CALL vkQueueEndDebugUtilsLabelEXT( VkQueue queue); VKAPI_ATTR void VKAPI_CALL vkQueueInsertDebugUtilsLabelEXT( VkQueue queue, const VkDebugUtilsLabelEXT* pLabelInfo); VKAPI_ATTR void VKAPI_CALL vkCmdBeginDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); VKAPI_ATTR void VKAPI_CALL vkCmdEndDebugUtilsLabelEXT( VkCommandBuffer commandBuffer); VKAPI_ATTR void VKAPI_CALL vkCmdInsertDebugUtilsLabelEXT( VkCommandBuffer commandBuffer, const VkDebugUtilsLabelEXT* pLabelInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugUtilsMessengerEXT( VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pMessenger); VKAPI_ATTR void VKAPI_CALL vkDestroyDebugUtilsMessengerEXT( VkInstance instance, VkDebugUtilsMessengerEXT messenger, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkSubmitDebugUtilsMessageEXT( VkInstance instance, VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData); #endif #define VK_EXT_sampler_filter_minmax 1 #define VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION 2 #define VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME "VK_EXT_sampler_filter_minmax" typedef VkSamplerReductionMode VkSamplerReductionModeEXT; typedef VkSamplerReductionModeCreateInfo VkSamplerReductionModeCreateInfoEXT; typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT; #define VK_AMD_gpu_shader_int16 1 #define VK_AMD_GPU_SHADER_INT16_SPEC_VERSION 2 #define VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME "VK_AMD_gpu_shader_int16" #define VK_AMD_mixed_attachment_samples 1 #define VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION 1 #define VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME "VK_AMD_mixed_attachment_samples" #define VK_AMD_shader_fragment_mask 1 #define VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION 1 #define VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME "VK_AMD_shader_fragment_mask" #define VK_EXT_inline_uniform_block 1 #define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1 #define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block" typedef struct VkPhysicalDeviceInlineUniformBlockFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 inlineUniformBlock; VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind; } VkPhysicalDeviceInlineUniformBlockFeaturesEXT; typedef struct VkPhysicalDeviceInlineUniformBlockPropertiesEXT { VkStructureType sType; void* pNext; uint32_t maxInlineUniformBlockSize; uint32_t maxPerStageDescriptorInlineUniformBlocks; uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks; uint32_t maxDescriptorSetInlineUniformBlocks; uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks; } VkPhysicalDeviceInlineUniformBlockPropertiesEXT; typedef struct VkWriteDescriptorSetInlineUniformBlockEXT { VkStructureType sType; const void* pNext; uint32_t dataSize; const void* pData; } VkWriteDescriptorSetInlineUniformBlockEXT; typedef struct VkDescriptorPoolInlineUniformBlockCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t maxInlineUniformBlockBindings; } VkDescriptorPoolInlineUniformBlockCreateInfoEXT; #define VK_EXT_shader_stencil_export 1 #define VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION 1 #define VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME "VK_EXT_shader_stencil_export" #define VK_EXT_sample_locations 1 #define VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION 1 #define VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME "VK_EXT_sample_locations" typedef struct VkSampleLocationEXT { float x; float y; } VkSampleLocationEXT; typedef struct VkSampleLocationsInfoEXT { VkStructureType sType; const void* pNext; VkSampleCountFlagBits sampleLocationsPerPixel; VkExtent2D sampleLocationGridSize; uint32_t sampleLocationsCount; const VkSampleLocationEXT* pSampleLocations; } VkSampleLocationsInfoEXT; typedef struct VkAttachmentSampleLocationsEXT { uint32_t attachmentIndex; VkSampleLocationsInfoEXT sampleLocationsInfo; } VkAttachmentSampleLocationsEXT; typedef struct VkSubpassSampleLocationsEXT { uint32_t subpassIndex; VkSampleLocationsInfoEXT sampleLocationsInfo; } VkSubpassSampleLocationsEXT; typedef struct VkRenderPassSampleLocationsBeginInfoEXT { VkStructureType sType; const void* pNext; uint32_t attachmentInitialSampleLocationsCount; const VkAttachmentSampleLocationsEXT* pAttachmentInitialSampleLocations; uint32_t postSubpassSampleLocationsCount; const VkSubpassSampleLocationsEXT* pPostSubpassSampleLocations; } VkRenderPassSampleLocationsBeginInfoEXT; typedef struct VkPipelineSampleLocationsStateCreateInfoEXT { VkStructureType sType; const void* pNext; VkBool32 sampleLocationsEnable; VkSampleLocationsInfoEXT sampleLocationsInfo; } VkPipelineSampleLocationsStateCreateInfoEXT; typedef struct VkPhysicalDeviceSampleLocationsPropertiesEXT { VkStructureType sType; void* pNext; VkSampleCountFlags sampleLocationSampleCounts; VkExtent2D maxSampleLocationGridSize; float sampleLocationCoordinateRange[2]; uint32_t sampleLocationSubPixelBits; VkBool32 variableSampleLocations; } VkPhysicalDeviceSampleLocationsPropertiesEXT; typedef struct VkMultisamplePropertiesEXT { VkStructureType sType; void* pNext; VkExtent2D maxSampleLocationGridSize; } VkMultisamplePropertiesEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetSampleLocationsEXT)(VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo); typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)(VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetSampleLocationsEXT( VkCommandBuffer commandBuffer, const VkSampleLocationsInfoEXT* pSampleLocationsInfo); VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMultisamplePropertiesEXT( VkPhysicalDevice physicalDevice, VkSampleCountFlagBits samples, VkMultisamplePropertiesEXT* pMultisampleProperties); #endif #define VK_EXT_blend_operation_advanced 1 #define VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION 2 #define VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME "VK_EXT_blend_operation_advanced" typedef enum VkBlendOverlapEXT { VK_BLEND_OVERLAP_UNCORRELATED_EXT = 0, VK_BLEND_OVERLAP_DISJOINT_EXT = 1, VK_BLEND_OVERLAP_CONJOINT_EXT = 2, VK_BLEND_OVERLAP_MAX_ENUM_EXT = 0x7FFFFFFF } VkBlendOverlapEXT; typedef struct VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 advancedBlendCoherentOperations; } VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT; typedef struct VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT { VkStructureType sType; void* pNext; uint32_t advancedBlendMaxColorAttachments; VkBool32 advancedBlendIndependentBlend; VkBool32 advancedBlendNonPremultipliedSrcColor; VkBool32 advancedBlendNonPremultipliedDstColor; VkBool32 advancedBlendCorrelatedOverlap; VkBool32 advancedBlendAllOperations; } VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT; typedef struct VkPipelineColorBlendAdvancedStateCreateInfoEXT { VkStructureType sType; const void* pNext; VkBool32 srcPremultiplied; VkBool32 dstPremultiplied; VkBlendOverlapEXT blendOverlap; } VkPipelineColorBlendAdvancedStateCreateInfoEXT; #define VK_NV_fragment_coverage_to_color 1 #define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION 1 #define VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME "VK_NV_fragment_coverage_to_color" typedef VkFlags VkPipelineCoverageToColorStateCreateFlagsNV; typedef struct VkPipelineCoverageToColorStateCreateInfoNV { VkStructureType sType; const void* pNext; VkPipelineCoverageToColorStateCreateFlagsNV flags; VkBool32 coverageToColorEnable; uint32_t coverageToColorLocation; } VkPipelineCoverageToColorStateCreateInfoNV; #define VK_NV_framebuffer_mixed_samples 1 #define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION 1 #define VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME "VK_NV_framebuffer_mixed_samples" typedef enum VkCoverageModulationModeNV { VK_COVERAGE_MODULATION_MODE_NONE_NV = 0, VK_COVERAGE_MODULATION_MODE_RGB_NV = 1, VK_COVERAGE_MODULATION_MODE_ALPHA_NV = 2, VK_COVERAGE_MODULATION_MODE_RGBA_NV = 3, VK_COVERAGE_MODULATION_MODE_MAX_ENUM_NV = 0x7FFFFFFF } VkCoverageModulationModeNV; typedef VkFlags VkPipelineCoverageModulationStateCreateFlagsNV; typedef struct VkPipelineCoverageModulationStateCreateInfoNV { VkStructureType sType; const void* pNext; VkPipelineCoverageModulationStateCreateFlagsNV flags; VkCoverageModulationModeNV coverageModulationMode; VkBool32 coverageModulationTableEnable; uint32_t coverageModulationTableCount; const float* pCoverageModulationTable; } VkPipelineCoverageModulationStateCreateInfoNV; #define VK_NV_fill_rectangle 1 #define VK_NV_FILL_RECTANGLE_SPEC_VERSION 1 #define VK_NV_FILL_RECTANGLE_EXTENSION_NAME "VK_NV_fill_rectangle" #define VK_NV_shader_sm_builtins 1 #define VK_NV_SHADER_SM_BUILTINS_SPEC_VERSION 1 #define VK_NV_SHADER_SM_BUILTINS_EXTENSION_NAME "VK_NV_shader_sm_builtins" typedef struct VkPhysicalDeviceShaderSMBuiltinsPropertiesNV { VkStructureType sType; void* pNext; uint32_t shaderSMCount; uint32_t shaderWarpsPerSM; } VkPhysicalDeviceShaderSMBuiltinsPropertiesNV; typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV { VkStructureType sType; void* pNext; VkBool32 shaderSMBuiltins; } VkPhysicalDeviceShaderSMBuiltinsFeaturesNV; #define VK_EXT_post_depth_coverage 1 #define VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION 1 #define VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME "VK_EXT_post_depth_coverage" #define VK_EXT_image_drm_format_modifier 1 #define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1 #define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier" typedef struct VkDrmFormatModifierPropertiesEXT { uint64_t drmFormatModifier; uint32_t drmFormatModifierPlaneCount; VkFormatFeatureFlags drmFormatModifierTilingFeatures; } VkDrmFormatModifierPropertiesEXT; typedef struct VkDrmFormatModifierPropertiesListEXT { VkStructureType sType; void* pNext; uint32_t drmFormatModifierCount; VkDrmFormatModifierPropertiesEXT* pDrmFormatModifierProperties; } VkDrmFormatModifierPropertiesListEXT; typedef struct VkPhysicalDeviceImageDrmFormatModifierInfoEXT { VkStructureType sType; const void* pNext; uint64_t drmFormatModifier; VkSharingMode sharingMode; uint32_t queueFamilyIndexCount; const uint32_t* pQueueFamilyIndices; } VkPhysicalDeviceImageDrmFormatModifierInfoEXT; typedef struct VkImageDrmFormatModifierListCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t drmFormatModifierCount; const uint64_t* pDrmFormatModifiers; } VkImageDrmFormatModifierListCreateInfoEXT; typedef struct VkImageDrmFormatModifierExplicitCreateInfoEXT { VkStructureType sType; const void* pNext; uint64_t drmFormatModifier; uint32_t drmFormatModifierPlaneCount; const VkSubresourceLayout* pPlaneLayouts; } VkImageDrmFormatModifierExplicitCreateInfoEXT; typedef struct VkImageDrmFormatModifierPropertiesEXT { VkStructureType sType; void* pNext; uint64_t drmFormatModifier; } VkImageDrmFormatModifierPropertiesEXT; typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetImageDrmFormatModifierPropertiesEXT( VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties); #endif #define VK_EXT_validation_cache 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkValidationCacheEXT) #define VK_EXT_VALIDATION_CACHE_SPEC_VERSION 1 #define VK_EXT_VALIDATION_CACHE_EXTENSION_NAME "VK_EXT_validation_cache" typedef enum VkValidationCacheHeaderVersionEXT { VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = 1, VK_VALIDATION_CACHE_HEADER_VERSION_MAX_ENUM_EXT = 0x7FFFFFFF } VkValidationCacheHeaderVersionEXT; typedef VkFlags VkValidationCacheCreateFlagsEXT; typedef struct VkValidationCacheCreateInfoEXT { VkStructureType sType; const void* pNext; VkValidationCacheCreateFlagsEXT flags; size_t initialDataSize; const void* pInitialData; } VkValidationCacheCreateInfoEXT; typedef struct VkShaderModuleValidationCacheCreateInfoEXT { VkStructureType sType; const void* pNext; VkValidationCacheEXT validationCache; } VkShaderModuleValidationCacheCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkCreateValidationCacheEXT)(VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache); typedef void (VKAPI_PTR *PFN_vkDestroyValidationCacheEXT)(VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkMergeValidationCachesEXT)(VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches); typedef VkResult (VKAPI_PTR *PFN_vkGetValidationCacheDataEXT)(VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateValidationCacheEXT( VkDevice device, const VkValidationCacheCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkValidationCacheEXT* pValidationCache); VKAPI_ATTR void VKAPI_CALL vkDestroyValidationCacheEXT( VkDevice device, VkValidationCacheEXT validationCache, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkMergeValidationCachesEXT( VkDevice device, VkValidationCacheEXT dstCache, uint32_t srcCacheCount, const VkValidationCacheEXT* pSrcCaches); VKAPI_ATTR VkResult VKAPI_CALL vkGetValidationCacheDataEXT( VkDevice device, VkValidationCacheEXT validationCache, size_t* pDataSize, void* pData); #endif #define VK_EXT_descriptor_indexing 1 #define VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION 2 #define VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME "VK_EXT_descriptor_indexing" typedef VkDescriptorBindingFlagBits VkDescriptorBindingFlagBitsEXT; typedef VkDescriptorBindingFlags VkDescriptorBindingFlagsEXT; typedef VkDescriptorSetLayoutBindingFlagsCreateInfo VkDescriptorSetLayoutBindingFlagsCreateInfoEXT; typedef VkPhysicalDeviceDescriptorIndexingFeatures VkPhysicalDeviceDescriptorIndexingFeaturesEXT; typedef VkPhysicalDeviceDescriptorIndexingProperties VkPhysicalDeviceDescriptorIndexingPropertiesEXT; typedef VkDescriptorSetVariableDescriptorCountAllocateInfo VkDescriptorSetVariableDescriptorCountAllocateInfoEXT; typedef VkDescriptorSetVariableDescriptorCountLayoutSupport VkDescriptorSetVariableDescriptorCountLayoutSupportEXT; #define VK_EXT_shader_viewport_index_layer 1 #define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION 1 #define VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME "VK_EXT_shader_viewport_index_layer" #define VK_NV_shading_rate_image 1 #define VK_NV_SHADING_RATE_IMAGE_SPEC_VERSION 3 #define VK_NV_SHADING_RATE_IMAGE_EXTENSION_NAME "VK_NV_shading_rate_image" typedef enum VkShadingRatePaletteEntryNV { VK_SHADING_RATE_PALETTE_ENTRY_NO_INVOCATIONS_NV = 0, VK_SHADING_RATE_PALETTE_ENTRY_16_INVOCATIONS_PER_PIXEL_NV = 1, VK_SHADING_RATE_PALETTE_ENTRY_8_INVOCATIONS_PER_PIXEL_NV = 2, VK_SHADING_RATE_PALETTE_ENTRY_4_INVOCATIONS_PER_PIXEL_NV = 3, VK_SHADING_RATE_PALETTE_ENTRY_2_INVOCATIONS_PER_PIXEL_NV = 4, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_PIXEL_NV = 5, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X1_PIXELS_NV = 6, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_1X2_PIXELS_NV = 7, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X2_PIXELS_NV = 8, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X2_PIXELS_NV = 9, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV = 10, VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV = 11, VK_SHADING_RATE_PALETTE_ENTRY_MAX_ENUM_NV = 0x7FFFFFFF } VkShadingRatePaletteEntryNV; typedef enum VkCoarseSampleOrderTypeNV { VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV = 0, VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV = 1, VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV = 2, VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV = 3, VK_COARSE_SAMPLE_ORDER_TYPE_MAX_ENUM_NV = 0x7FFFFFFF } VkCoarseSampleOrderTypeNV; typedef struct VkShadingRatePaletteNV { uint32_t shadingRatePaletteEntryCount; const VkShadingRatePaletteEntryNV* pShadingRatePaletteEntries; } VkShadingRatePaletteNV; typedef struct VkPipelineViewportShadingRateImageStateCreateInfoNV { VkStructureType sType; const void* pNext; VkBool32 shadingRateImageEnable; uint32_t viewportCount; const VkShadingRatePaletteNV* pShadingRatePalettes; } VkPipelineViewportShadingRateImageStateCreateInfoNV; typedef struct VkPhysicalDeviceShadingRateImageFeaturesNV { VkStructureType sType; void* pNext; VkBool32 shadingRateImage; VkBool32 shadingRateCoarseSampleOrder; } VkPhysicalDeviceShadingRateImageFeaturesNV; typedef struct VkPhysicalDeviceShadingRateImagePropertiesNV { VkStructureType sType; void* pNext; VkExtent2D shadingRateTexelSize; uint32_t shadingRatePaletteSize; uint32_t shadingRateMaxCoarseSamples; } VkPhysicalDeviceShadingRateImagePropertiesNV; typedef struct VkCoarseSampleLocationNV { uint32_t pixelX; uint32_t pixelY; uint32_t sample; } VkCoarseSampleLocationNV; typedef struct VkCoarseSampleOrderCustomNV { VkShadingRatePaletteEntryNV shadingRate; uint32_t sampleCount; uint32_t sampleLocationCount; const VkCoarseSampleLocationNV* pSampleLocations; } VkCoarseSampleOrderCustomNV; typedef struct VkPipelineViewportCoarseSampleOrderStateCreateInfoNV { VkStructureType sType; const void* pNext; VkCoarseSampleOrderTypeNV sampleOrderType; uint32_t customSampleOrderCount; const VkCoarseSampleOrderCustomNV* pCustomSampleOrders; } VkPipelineViewportCoarseSampleOrderStateCreateInfoNV; typedef void (VKAPI_PTR *PFN_vkCmdBindShadingRateImageNV)(VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); typedef void (VKAPI_PTR *PFN_vkCmdSetViewportShadingRatePaletteNV)(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes); typedef void (VKAPI_PTR *PFN_vkCmdSetCoarseSampleOrderNV)(VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdBindShadingRateImageNV( VkCommandBuffer commandBuffer, VkImageView imageView, VkImageLayout imageLayout); VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportShadingRatePaletteNV( VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkShadingRatePaletteNV* pShadingRatePalettes); VKAPI_ATTR void VKAPI_CALL vkCmdSetCoarseSampleOrderNV( VkCommandBuffer commandBuffer, VkCoarseSampleOrderTypeNV sampleOrderType, uint32_t customSampleOrderCount, const VkCoarseSampleOrderCustomNV* pCustomSampleOrders); #endif #define VK_NV_ray_tracing 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureNV) #define VK_NV_RAY_TRACING_SPEC_VERSION 3 #define VK_NV_RAY_TRACING_EXTENSION_NAME "VK_NV_ray_tracing" #define VK_SHADER_UNUSED_KHR (~0U) #define VK_SHADER_UNUSED_NV VK_SHADER_UNUSED_KHR typedef enum VkRayTracingShaderGroupTypeKHR { VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR = 0, VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR = 1, VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR = 2, VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_GENERAL_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_TRIANGLES_HIT_GROUP_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_NV = VK_RAY_TRACING_SHADER_GROUP_TYPE_PROCEDURAL_HIT_GROUP_KHR, VK_RAY_TRACING_SHADER_GROUP_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF } VkRayTracingShaderGroupTypeKHR; typedef VkRayTracingShaderGroupTypeKHR VkRayTracingShaderGroupTypeNV; typedef enum VkGeometryTypeKHR { VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, VK_GEOMETRY_TYPE_AABBS_KHR = 1, VK_GEOMETRY_TYPE_INSTANCES_KHR = 2, VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR, VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR, VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF } VkGeometryTypeKHR; typedef VkGeometryTypeKHR VkGeometryTypeNV; typedef enum VkAccelerationStructureTypeKHR { VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR = 0, VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR = 1, VK_ACCELERATION_STRUCTURE_TYPE_GENERIC_KHR = 2, VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR, VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR, VK_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF } VkAccelerationStructureTypeKHR; typedef VkAccelerationStructureTypeKHR VkAccelerationStructureTypeNV; typedef enum VkCopyAccelerationStructureModeKHR { VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR = 0, VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR = 1, VK_COPY_ACCELERATION_STRUCTURE_MODE_SERIALIZE_KHR = 2, VK_COPY_ACCELERATION_STRUCTURE_MODE_DESERIALIZE_KHR = 3, VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_CLONE_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_NV = VK_COPY_ACCELERATION_STRUCTURE_MODE_COMPACT_KHR, VK_COPY_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF } VkCopyAccelerationStructureModeKHR; typedef VkCopyAccelerationStructureModeKHR VkCopyAccelerationStructureModeNV; typedef enum VkAccelerationStructureMemoryRequirementsTypeNV { VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV = 0, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_BUILD_SCRATCH_NV = 1, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_UPDATE_SCRATCH_NV = 2, VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_MAX_ENUM_NV = 0x7FFFFFFF } VkAccelerationStructureMemoryRequirementsTypeNV; typedef enum VkGeometryFlagBitsKHR { VK_GEOMETRY_OPAQUE_BIT_KHR = 0x00000001, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR = 0x00000002, VK_GEOMETRY_OPAQUE_BIT_NV = VK_GEOMETRY_OPAQUE_BIT_KHR, VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_NV = VK_GEOMETRY_NO_DUPLICATE_ANY_HIT_INVOCATION_BIT_KHR, VK_GEOMETRY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkGeometryFlagBitsKHR; typedef VkFlags VkGeometryFlagsKHR; typedef VkGeometryFlagsKHR VkGeometryFlagsNV; typedef VkGeometryFlagBitsKHR VkGeometryFlagBitsNV; typedef enum VkGeometryInstanceFlagBitsKHR { VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR = 0x00000001, VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = 0x00000002, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 0x00000004, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 0x00000008, VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkGeometryInstanceFlagBitsKHR; typedef VkFlags VkGeometryInstanceFlagsKHR; typedef VkGeometryInstanceFlagsKHR VkGeometryInstanceFlagsNV; typedef VkGeometryInstanceFlagBitsKHR VkGeometryInstanceFlagBitsNV; typedef enum VkBuildAccelerationStructureFlagBitsKHR { VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR = 0x00000001, VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR = 0x00000002, VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR = 0x00000004, VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 0x00000008, VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 0x00000010, VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkBuildAccelerationStructureFlagBitsKHR; typedef VkFlags VkBuildAccelerationStructureFlagsKHR; typedef VkBuildAccelerationStructureFlagsKHR VkBuildAccelerationStructureFlagsNV; typedef VkBuildAccelerationStructureFlagBitsKHR VkBuildAccelerationStructureFlagBitsNV; typedef struct VkRayTracingShaderGroupCreateInfoNV { VkStructureType sType; const void* pNext; VkRayTracingShaderGroupTypeKHR type; uint32_t generalShader; uint32_t closestHitShader; uint32_t anyHitShader; uint32_t intersectionShader; } VkRayTracingShaderGroupCreateInfoNV; typedef struct VkRayTracingPipelineCreateInfoNV { VkStructureType sType; const void* pNext; VkPipelineCreateFlags flags; uint32_t stageCount; const VkPipelineShaderStageCreateInfo* pStages; uint32_t groupCount; const VkRayTracingShaderGroupCreateInfoNV* pGroups; uint32_t maxRecursionDepth; VkPipelineLayout layout; VkPipeline basePipelineHandle; int32_t basePipelineIndex; } VkRayTracingPipelineCreateInfoNV; typedef struct VkGeometryTrianglesNV { VkStructureType sType; const void* pNext; VkBuffer vertexData; VkDeviceSize vertexOffset; uint32_t vertexCount; VkDeviceSize vertexStride; VkFormat vertexFormat; VkBuffer indexData; VkDeviceSize indexOffset; uint32_t indexCount; VkIndexType indexType; VkBuffer transformData; VkDeviceSize transformOffset; } VkGeometryTrianglesNV; typedef struct VkGeometryAABBNV { VkStructureType sType; const void* pNext; VkBuffer aabbData; uint32_t numAABBs; uint32_t stride; VkDeviceSize offset; } VkGeometryAABBNV; typedef struct VkGeometryDataNV { VkGeometryTrianglesNV triangles; VkGeometryAABBNV aabbs; } VkGeometryDataNV; typedef struct VkGeometryNV { VkStructureType sType; const void* pNext; VkGeometryTypeKHR geometryType; VkGeometryDataNV geometry; VkGeometryFlagsKHR flags; } VkGeometryNV; typedef struct VkAccelerationStructureInfoNV { VkStructureType sType; const void* pNext; VkAccelerationStructureTypeNV type; VkBuildAccelerationStructureFlagsNV flags; uint32_t instanceCount; uint32_t geometryCount; const VkGeometryNV* pGeometries; } VkAccelerationStructureInfoNV; typedef struct VkAccelerationStructureCreateInfoNV { VkStructureType sType; const void* pNext; VkDeviceSize compactedSize; VkAccelerationStructureInfoNV info; } VkAccelerationStructureCreateInfoNV; typedef struct VkBindAccelerationStructureMemoryInfoNV { VkStructureType sType; const void* pNext; VkAccelerationStructureNV accelerationStructure; VkDeviceMemory memory; VkDeviceSize memoryOffset; uint32_t deviceIndexCount; const uint32_t* pDeviceIndices; } VkBindAccelerationStructureMemoryInfoNV; typedef struct VkWriteDescriptorSetAccelerationStructureNV { VkStructureType sType; const void* pNext; uint32_t accelerationStructureCount; const VkAccelerationStructureNV* pAccelerationStructures; } VkWriteDescriptorSetAccelerationStructureNV; typedef struct VkAccelerationStructureMemoryRequirementsInfoNV { VkStructureType sType; const void* pNext; VkAccelerationStructureMemoryRequirementsTypeNV type; VkAccelerationStructureNV accelerationStructure; } VkAccelerationStructureMemoryRequirementsInfoNV; typedef struct VkPhysicalDeviceRayTracingPropertiesNV { VkStructureType sType; void* pNext; uint32_t shaderGroupHandleSize; uint32_t maxRecursionDepth; uint32_t maxShaderGroupStride; uint32_t shaderGroupBaseAlignment; uint64_t maxGeometryCount; uint64_t maxInstanceCount; uint64_t maxTriangleCount; uint32_t maxDescriptorSetAccelerationStructures; } VkPhysicalDeviceRayTracingPropertiesNV; typedef struct VkTransformMatrixKHR { float matrix[3][4]; } VkTransformMatrixKHR; typedef VkTransformMatrixKHR VkTransformMatrixNV; typedef struct VkAabbPositionsKHR { float minX; float minY; float minZ; float maxX; float maxY; float maxZ; } VkAabbPositionsKHR; typedef VkAabbPositionsKHR VkAabbPositionsNV; typedef struct VkAccelerationStructureInstanceKHR { VkTransformMatrixKHR transform; uint32_t instanceCustomIndex:24; uint32_t mask:8; uint32_t instanceShaderBindingTableRecordOffset:24; VkGeometryInstanceFlagsKHR flags:8; uint64_t accelerationStructureReference; } VkAccelerationStructureInstanceKHR; typedef VkAccelerationStructureInstanceKHR VkAccelerationStructureInstanceNV; typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureNV)(VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure); typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureMemoryRequirementsNV)(VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); typedef VkResult (VKAPI_PTR *PFN_vkBindAccelerationStructureMemoryNV)(VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructureNV)(VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset); typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureNV)(VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode); typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysNV)(VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesNV)(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupHandlesNV)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); typedef VkResult (VKAPI_PTR *PFN_vkGetAccelerationStructureHandleNV)(VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData); typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesNV)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); typedef VkResult (VKAPI_PTR *PFN_vkCompileDeferredNV)(VkDevice device, VkPipeline pipeline, uint32_t shader); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureNV( VkDevice device, const VkAccelerationStructureCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureNV* pAccelerationStructure); VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureNV( VkDevice device, VkAccelerationStructureNV accelerationStructure, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureMemoryRequirementsNV( VkDevice device, const VkAccelerationStructureMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2KHR* pMemoryRequirements); VKAPI_ATTR VkResult VKAPI_CALL vkBindAccelerationStructureMemoryNV( VkDevice device, uint32_t bindInfoCount, const VkBindAccelerationStructureMemoryInfoNV* pBindInfos); VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructureNV( VkCommandBuffer commandBuffer, const VkAccelerationStructureInfoNV* pInfo, VkBuffer instanceData, VkDeviceSize instanceOffset, VkBool32 update, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkBuffer scratch, VkDeviceSize scratchOffset); VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureNV( VkCommandBuffer commandBuffer, VkAccelerationStructureNV dst, VkAccelerationStructureNV src, VkCopyAccelerationStructureModeKHR mode); VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysNV( VkCommandBuffer commandBuffer, VkBuffer raygenShaderBindingTableBuffer, VkDeviceSize raygenShaderBindingOffset, VkBuffer missShaderBindingTableBuffer, VkDeviceSize missShaderBindingOffset, VkDeviceSize missShaderBindingStride, VkBuffer hitShaderBindingTableBuffer, VkDeviceSize hitShaderBindingOffset, VkDeviceSize hitShaderBindingStride, VkBuffer callableShaderBindingTableBuffer, VkDeviceSize callableShaderBindingOffset, VkDeviceSize callableShaderBindingStride, uint32_t width, uint32_t height, uint32_t depth); VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesNV( VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoNV* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesKHR( VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingShaderGroupHandlesNV( VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); VKAPI_ATTR VkResult VKAPI_CALL vkGetAccelerationStructureHandleNV( VkDevice device, VkAccelerationStructureNV accelerationStructure, size_t dataSize, void* pData); VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesNV( VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureNV* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); VKAPI_ATTR VkResult VKAPI_CALL vkCompileDeferredNV( VkDevice device, VkPipeline pipeline, uint32_t shader); #endif #define VK_NV_representative_fragment_test 1 #define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_SPEC_VERSION 2 #define VK_NV_REPRESENTATIVE_FRAGMENT_TEST_EXTENSION_NAME "VK_NV_representative_fragment_test" typedef struct VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV { VkStructureType sType; void* pNext; VkBool32 representativeFragmentTest; } VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV; typedef struct VkPipelineRepresentativeFragmentTestStateCreateInfoNV { VkStructureType sType; const void* pNext; VkBool32 representativeFragmentTestEnable; } VkPipelineRepresentativeFragmentTestStateCreateInfoNV; #define VK_EXT_filter_cubic 1 #define VK_EXT_FILTER_CUBIC_SPEC_VERSION 3 #define VK_EXT_FILTER_CUBIC_EXTENSION_NAME "VK_EXT_filter_cubic" typedef struct VkPhysicalDeviceImageViewImageFormatInfoEXT { VkStructureType sType; void* pNext; VkImageViewType imageViewType; } VkPhysicalDeviceImageViewImageFormatInfoEXT; typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT { VkStructureType sType; void* pNext; VkBool32 filterCubic; VkBool32 filterCubicMinmax; } VkFilterCubicImageViewImageFormatPropertiesEXT; #define VK_QCOM_render_pass_shader_resolve 1 #define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_SPEC_VERSION 4 #define VK_QCOM_RENDER_PASS_SHADER_RESOLVE_EXTENSION_NAME "VK_QCOM_render_pass_shader_resolve" #define VK_EXT_global_priority 1 #define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2 #define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority" typedef enum VkQueueGlobalPriorityEXT { VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128, VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256, VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512, VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024, VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF } VkQueueGlobalPriorityEXT; typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT { VkStructureType sType; const void* pNext; VkQueueGlobalPriorityEXT globalPriority; } VkDeviceQueueGlobalPriorityCreateInfoEXT; #define VK_EXT_external_memory_host 1 #define VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION 1 #define VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME "VK_EXT_external_memory_host" typedef struct VkImportMemoryHostPointerInfoEXT { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagBits handleType; void* pHostPointer; } VkImportMemoryHostPointerInfoEXT; typedef struct VkMemoryHostPointerPropertiesEXT { VkStructureType sType; void* pNext; uint32_t memoryTypeBits; } VkMemoryHostPointerPropertiesEXT; typedef struct VkPhysicalDeviceExternalMemoryHostPropertiesEXT { VkStructureType sType; void* pNext; VkDeviceSize minImportedHostPointerAlignment; } VkPhysicalDeviceExternalMemoryHostPropertiesEXT; typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryHostPointerPropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryHostPointerPropertiesEXT( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHostPointer, VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties); #endif #define VK_AMD_buffer_marker 1 #define VK_AMD_BUFFER_MARKER_SPEC_VERSION 1 #define VK_AMD_BUFFER_MARKER_EXTENSION_NAME "VK_AMD_buffer_marker" typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarkerAMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarkerAMD( VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker); #endif #define VK_AMD_pipeline_compiler_control 1 #define VK_AMD_PIPELINE_COMPILER_CONTROL_SPEC_VERSION 1 #define VK_AMD_PIPELINE_COMPILER_CONTROL_EXTENSION_NAME "VK_AMD_pipeline_compiler_control" typedef enum VkPipelineCompilerControlFlagBitsAMD { VK_PIPELINE_COMPILER_CONTROL_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF } VkPipelineCompilerControlFlagBitsAMD; typedef VkFlags VkPipelineCompilerControlFlagsAMD; typedef struct VkPipelineCompilerControlCreateInfoAMD { VkStructureType sType; const void* pNext; VkPipelineCompilerControlFlagsAMD compilerControlFlags; } VkPipelineCompilerControlCreateInfoAMD; #define VK_EXT_calibrated_timestamps 1 #define VK_EXT_CALIBRATED_TIMESTAMPS_SPEC_VERSION 2 #define VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME "VK_EXT_calibrated_timestamps" typedef enum VkTimeDomainEXT { VK_TIME_DOMAIN_DEVICE_EXT = 0, VK_TIME_DOMAIN_CLOCK_MONOTONIC_EXT = 1, VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT = 2, VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT = 3, VK_TIME_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF } VkTimeDomainEXT; typedef struct VkCalibratedTimestampInfoEXT { VkStructureType sType; const void* pNext; VkTimeDomainEXT timeDomain; } VkCalibratedTimestampInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)(VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains); typedef VkResult (VKAPI_PTR *PFN_vkGetCalibratedTimestampsEXT)(VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCalibrateableTimeDomainsEXT( VkPhysicalDevice physicalDevice, uint32_t* pTimeDomainCount, VkTimeDomainEXT* pTimeDomains); VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsEXT( VkDevice device, uint32_t timestampCount, const VkCalibratedTimestampInfoEXT* pTimestampInfos, uint64_t* pTimestamps, uint64_t* pMaxDeviation); #endif #define VK_AMD_shader_core_properties 1 #define VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION 2 #define VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME "VK_AMD_shader_core_properties" typedef struct VkPhysicalDeviceShaderCorePropertiesAMD { VkStructureType sType; void* pNext; uint32_t shaderEngineCount; uint32_t shaderArraysPerEngineCount; uint32_t computeUnitsPerShaderArray; uint32_t simdPerComputeUnit; uint32_t wavefrontsPerSimd; uint32_t wavefrontSize; uint32_t sgprsPerSimd; uint32_t minSgprAllocation; uint32_t maxSgprAllocation; uint32_t sgprAllocationGranularity; uint32_t vgprsPerSimd; uint32_t minVgprAllocation; uint32_t maxVgprAllocation; uint32_t vgprAllocationGranularity; } VkPhysicalDeviceShaderCorePropertiesAMD; #define VK_AMD_memory_overallocation_behavior 1 #define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION 1 #define VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME "VK_AMD_memory_overallocation_behavior" typedef enum VkMemoryOverallocationBehaviorAMD { VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = 0, VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = 1, VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = 2, VK_MEMORY_OVERALLOCATION_BEHAVIOR_MAX_ENUM_AMD = 0x7FFFFFFF } VkMemoryOverallocationBehaviorAMD; typedef struct VkDeviceMemoryOverallocationCreateInfoAMD { VkStructureType sType; const void* pNext; VkMemoryOverallocationBehaviorAMD overallocationBehavior; } VkDeviceMemoryOverallocationCreateInfoAMD; #define VK_EXT_vertex_attribute_divisor 1 #define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 3 #define VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_EXT_vertex_attribute_divisor" typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT { VkStructureType sType; void* pNext; uint32_t maxVertexAttribDivisor; } VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; typedef struct VkVertexInputBindingDivisorDescriptionEXT { uint32_t binding; uint32_t divisor; } VkVertexInputBindingDivisorDescriptionEXT; typedef struct VkPipelineVertexInputDivisorStateCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t vertexBindingDivisorCount; const VkVertexInputBindingDivisorDescriptionEXT* pVertexBindingDivisors; } VkPipelineVertexInputDivisorStateCreateInfoEXT; typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 vertexAttributeInstanceRateDivisor; VkBool32 vertexAttributeInstanceRateZeroDivisor; } VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; #define VK_EXT_pipeline_creation_feedback 1 #define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1 #define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback" typedef enum VkPipelineCreationFeedbackFlagBitsEXT { VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = 0x00000001, VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = 0x00000002, VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = 0x00000004, VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkPipelineCreationFeedbackFlagBitsEXT; typedef VkFlags VkPipelineCreationFeedbackFlagsEXT; typedef struct VkPipelineCreationFeedbackEXT { VkPipelineCreationFeedbackFlagsEXT flags; uint64_t duration; } VkPipelineCreationFeedbackEXT; typedef struct VkPipelineCreationFeedbackCreateInfoEXT { VkStructureType sType; const void* pNext; VkPipelineCreationFeedbackEXT* pPipelineCreationFeedback; uint32_t pipelineStageCreationFeedbackCount; VkPipelineCreationFeedbackEXT* pPipelineStageCreationFeedbacks; } VkPipelineCreationFeedbackCreateInfoEXT; #define VK_NV_shader_subgroup_partitioned 1 #define VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION 1 #define VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME "VK_NV_shader_subgroup_partitioned" #define VK_NV_compute_shader_derivatives 1 #define VK_NV_COMPUTE_SHADER_DERIVATIVES_SPEC_VERSION 1 #define VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME "VK_NV_compute_shader_derivatives" typedef struct VkPhysicalDeviceComputeShaderDerivativesFeaturesNV { VkStructureType sType; void* pNext; VkBool32 computeDerivativeGroupQuads; VkBool32 computeDerivativeGroupLinear; } VkPhysicalDeviceComputeShaderDerivativesFeaturesNV; #define VK_NV_mesh_shader 1 #define VK_NV_MESH_SHADER_SPEC_VERSION 1 #define VK_NV_MESH_SHADER_EXTENSION_NAME "VK_NV_mesh_shader" typedef struct VkPhysicalDeviceMeshShaderFeaturesNV { VkStructureType sType; void* pNext; VkBool32 taskShader; VkBool32 meshShader; } VkPhysicalDeviceMeshShaderFeaturesNV; typedef struct VkPhysicalDeviceMeshShaderPropertiesNV { VkStructureType sType; void* pNext; uint32_t maxDrawMeshTasksCount; uint32_t maxTaskWorkGroupInvocations; uint32_t maxTaskWorkGroupSize[3]; uint32_t maxTaskTotalMemorySize; uint32_t maxTaskOutputCount; uint32_t maxMeshWorkGroupInvocations; uint32_t maxMeshWorkGroupSize[3]; uint32_t maxMeshTotalMemorySize; uint32_t maxMeshOutputVertices; uint32_t maxMeshOutputPrimitives; uint32_t maxMeshMultiviewViewCount; uint32_t meshOutputPerVertexGranularity; uint32_t meshOutputPerPrimitiveGranularity; } VkPhysicalDeviceMeshShaderPropertiesNV; typedef struct VkDrawMeshTasksIndirectCommandNV { uint32_t taskCount; uint32_t firstTask; } VkDrawMeshTasksIndirectCommandNV; typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksNV)(VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask); typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); typedef void (VKAPI_PTR *PFN_vkCmdDrawMeshTasksIndirectCountNV)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksNV( VkCommandBuffer commandBuffer, uint32_t taskCount, uint32_t firstTask); VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectNV( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, uint32_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdDrawMeshTasksIndirectCountNV( VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, uint32_t stride); #endif #define VK_NV_fragment_shader_barycentric 1 #define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_SPEC_VERSION 1 #define VK_NV_FRAGMENT_SHADER_BARYCENTRIC_EXTENSION_NAME "VK_NV_fragment_shader_barycentric" typedef struct VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV { VkStructureType sType; void* pNext; VkBool32 fragmentShaderBarycentric; } VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV; #define VK_NV_shader_image_footprint 1 #define VK_NV_SHADER_IMAGE_FOOTPRINT_SPEC_VERSION 2 #define VK_NV_SHADER_IMAGE_FOOTPRINT_EXTENSION_NAME "VK_NV_shader_image_footprint" typedef struct VkPhysicalDeviceShaderImageFootprintFeaturesNV { VkStructureType sType; void* pNext; VkBool32 imageFootprint; } VkPhysicalDeviceShaderImageFootprintFeaturesNV; #define VK_NV_scissor_exclusive 1 #define VK_NV_SCISSOR_EXCLUSIVE_SPEC_VERSION 1 #define VK_NV_SCISSOR_EXCLUSIVE_EXTENSION_NAME "VK_NV_scissor_exclusive" typedef struct VkPipelineViewportExclusiveScissorStateCreateInfoNV { VkStructureType sType; const void* pNext; uint32_t exclusiveScissorCount; const VkRect2D* pExclusiveScissors; } VkPipelineViewportExclusiveScissorStateCreateInfoNV; typedef struct VkPhysicalDeviceExclusiveScissorFeaturesNV { VkStructureType sType; void* pNext; VkBool32 exclusiveScissor; } VkPhysicalDeviceExclusiveScissorFeaturesNV; typedef void (VKAPI_PTR *PFN_vkCmdSetExclusiveScissorNV)(VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetExclusiveScissorNV( VkCommandBuffer commandBuffer, uint32_t firstExclusiveScissor, uint32_t exclusiveScissorCount, const VkRect2D* pExclusiveScissors); #endif #define VK_NV_device_diagnostic_checkpoints 1 #define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_SPEC_VERSION 2 #define VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME "VK_NV_device_diagnostic_checkpoints" typedef struct VkQueueFamilyCheckpointPropertiesNV { VkStructureType sType; void* pNext; VkPipelineStageFlags checkpointExecutionStageMask; } VkQueueFamilyCheckpointPropertiesNV; typedef struct VkCheckpointDataNV { VkStructureType sType; void* pNext; VkPipelineStageFlagBits stage; void* pCheckpointMarker; } VkCheckpointDataNV; typedef void (VKAPI_PTR *PFN_vkCmdSetCheckpointNV)(VkCommandBuffer commandBuffer, const void* pCheckpointMarker); typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointDataNV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetCheckpointNV( VkCommandBuffer commandBuffer, const void* pCheckpointMarker); VKAPI_ATTR void VKAPI_CALL vkGetQueueCheckpointDataNV( VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointDataNV* pCheckpointData); #endif #define VK_INTEL_shader_integer_functions2 1 #define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_SPEC_VERSION 1 #define VK_INTEL_SHADER_INTEGER_FUNCTIONS_2_EXTENSION_NAME "VK_INTEL_shader_integer_functions2" typedef struct VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL { VkStructureType sType; void* pNext; VkBool32 shaderIntegerFunctions2; } VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL; #define VK_INTEL_performance_query 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPerformanceConfigurationINTEL) #define VK_INTEL_PERFORMANCE_QUERY_SPEC_VERSION 2 #define VK_INTEL_PERFORMANCE_QUERY_EXTENSION_NAME "VK_INTEL_performance_query" typedef enum VkPerformanceConfigurationTypeINTEL { VK_PERFORMANCE_CONFIGURATION_TYPE_COMMAND_QUEUE_METRICS_DISCOVERY_ACTIVATED_INTEL = 0, VK_PERFORMANCE_CONFIGURATION_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF } VkPerformanceConfigurationTypeINTEL; typedef enum VkQueryPoolSamplingModeINTEL { VK_QUERY_POOL_SAMPLING_MODE_MANUAL_INTEL = 0, VK_QUERY_POOL_SAMPLING_MODE_MAX_ENUM_INTEL = 0x7FFFFFFF } VkQueryPoolSamplingModeINTEL; typedef enum VkPerformanceOverrideTypeINTEL { VK_PERFORMANCE_OVERRIDE_TYPE_NULL_HARDWARE_INTEL = 0, VK_PERFORMANCE_OVERRIDE_TYPE_FLUSH_GPU_CACHES_INTEL = 1, VK_PERFORMANCE_OVERRIDE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF } VkPerformanceOverrideTypeINTEL; typedef enum VkPerformanceParameterTypeINTEL { VK_PERFORMANCE_PARAMETER_TYPE_HW_COUNTERS_SUPPORTED_INTEL = 0, VK_PERFORMANCE_PARAMETER_TYPE_STREAM_MARKER_VALID_BITS_INTEL = 1, VK_PERFORMANCE_PARAMETER_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF } VkPerformanceParameterTypeINTEL; typedef enum VkPerformanceValueTypeINTEL { VK_PERFORMANCE_VALUE_TYPE_UINT32_INTEL = 0, VK_PERFORMANCE_VALUE_TYPE_UINT64_INTEL = 1, VK_PERFORMANCE_VALUE_TYPE_FLOAT_INTEL = 2, VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL = 3, VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL = 4, VK_PERFORMANCE_VALUE_TYPE_MAX_ENUM_INTEL = 0x7FFFFFFF } VkPerformanceValueTypeINTEL; typedef union VkPerformanceValueDataINTEL { uint32_t value32; uint64_t value64; float valueFloat; VkBool32 valueBool; const char* valueString; } VkPerformanceValueDataINTEL; typedef struct VkPerformanceValueINTEL { VkPerformanceValueTypeINTEL type; VkPerformanceValueDataINTEL data; } VkPerformanceValueINTEL; typedef struct VkInitializePerformanceApiInfoINTEL { VkStructureType sType; const void* pNext; void* pUserData; } VkInitializePerformanceApiInfoINTEL; typedef struct VkQueryPoolPerformanceQueryCreateInfoINTEL { VkStructureType sType; const void* pNext; VkQueryPoolSamplingModeINTEL performanceCountersSampling; } VkQueryPoolPerformanceQueryCreateInfoINTEL; typedef VkQueryPoolPerformanceQueryCreateInfoINTEL VkQueryPoolCreateInfoINTEL; typedef struct VkPerformanceMarkerInfoINTEL { VkStructureType sType; const void* pNext; uint64_t marker; } VkPerformanceMarkerInfoINTEL; typedef struct VkPerformanceStreamMarkerInfoINTEL { VkStructureType sType; const void* pNext; uint32_t marker; } VkPerformanceStreamMarkerInfoINTEL; typedef struct VkPerformanceOverrideInfoINTEL { VkStructureType sType; const void* pNext; VkPerformanceOverrideTypeINTEL type; VkBool32 enable; uint64_t parameter; } VkPerformanceOverrideInfoINTEL; typedef struct VkPerformanceConfigurationAcquireInfoINTEL { VkStructureType sType; const void* pNext; VkPerformanceConfigurationTypeINTEL type; } VkPerformanceConfigurationAcquireInfoINTEL; typedef VkResult (VKAPI_PTR *PFN_vkInitializePerformanceApiINTEL)(VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); typedef void (VKAPI_PTR *PFN_vkUninitializePerformanceApiINTEL)(VkDevice device); typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo); typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceStreamMarkerINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); typedef VkResult (VKAPI_PTR *PFN_vkCmdSetPerformanceOverrideINTEL)(VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo); typedef VkResult (VKAPI_PTR *PFN_vkAcquirePerformanceConfigurationINTEL)(VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration); typedef VkResult (VKAPI_PTR *PFN_vkReleasePerformanceConfigurationINTEL)(VkDevice device, VkPerformanceConfigurationINTEL configuration); typedef VkResult (VKAPI_PTR *PFN_vkQueueSetPerformanceConfigurationINTEL)(VkQueue queue, VkPerformanceConfigurationINTEL configuration); typedef VkResult (VKAPI_PTR *PFN_vkGetPerformanceParameterINTEL)(VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkInitializePerformanceApiINTEL( VkDevice device, const VkInitializePerformanceApiInfoINTEL* pInitializeInfo); VKAPI_ATTR void VKAPI_CALL vkUninitializePerformanceApiINTEL( VkDevice device); VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceMarkerINTEL( VkCommandBuffer commandBuffer, const VkPerformanceMarkerInfoINTEL* pMarkerInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceStreamMarkerINTEL( VkCommandBuffer commandBuffer, const VkPerformanceStreamMarkerInfoINTEL* pMarkerInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCmdSetPerformanceOverrideINTEL( VkCommandBuffer commandBuffer, const VkPerformanceOverrideInfoINTEL* pOverrideInfo); VKAPI_ATTR VkResult VKAPI_CALL vkAcquirePerformanceConfigurationINTEL( VkDevice device, const VkPerformanceConfigurationAcquireInfoINTEL* pAcquireInfo, VkPerformanceConfigurationINTEL* pConfiguration); VKAPI_ATTR VkResult VKAPI_CALL vkReleasePerformanceConfigurationINTEL( VkDevice device, VkPerformanceConfigurationINTEL configuration); VKAPI_ATTR VkResult VKAPI_CALL vkQueueSetPerformanceConfigurationINTEL( VkQueue queue, VkPerformanceConfigurationINTEL configuration); VKAPI_ATTR VkResult VKAPI_CALL vkGetPerformanceParameterINTEL( VkDevice device, VkPerformanceParameterTypeINTEL parameter, VkPerformanceValueINTEL* pValue); #endif #define VK_EXT_pci_bus_info 1 #define VK_EXT_PCI_BUS_INFO_SPEC_VERSION 2 #define VK_EXT_PCI_BUS_INFO_EXTENSION_NAME "VK_EXT_pci_bus_info" typedef struct VkPhysicalDevicePCIBusInfoPropertiesEXT { VkStructureType sType; void* pNext; uint32_t pciDomain; uint32_t pciBus; uint32_t pciDevice; uint32_t pciFunction; } VkPhysicalDevicePCIBusInfoPropertiesEXT; #define VK_AMD_display_native_hdr 1 #define VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION 1 #define VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME "VK_AMD_display_native_hdr" typedef struct VkDisplayNativeHdrSurfaceCapabilitiesAMD { VkStructureType sType; void* pNext; VkBool32 localDimmingSupport; } VkDisplayNativeHdrSurfaceCapabilitiesAMD; typedef struct VkSwapchainDisplayNativeHdrCreateInfoAMD { VkStructureType sType; const void* pNext; VkBool32 localDimmingEnable; } VkSwapchainDisplayNativeHdrCreateInfoAMD; typedef void (VKAPI_PTR *PFN_vkSetLocalDimmingAMD)(VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD( VkDevice device, VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); #endif #define VK_EXT_fragment_density_map 1 #define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 1 #define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map" typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 fragmentDensityMap; VkBool32 fragmentDensityMapDynamic; VkBool32 fragmentDensityMapNonSubsampledImages; } VkPhysicalDeviceFragmentDensityMapFeaturesEXT; typedef struct VkPhysicalDeviceFragmentDensityMapPropertiesEXT { VkStructureType sType; void* pNext; VkExtent2D minFragmentDensityTexelSize; VkExtent2D maxFragmentDensityTexelSize; VkBool32 fragmentDensityInvocations; } VkPhysicalDeviceFragmentDensityMapPropertiesEXT; typedef struct VkRenderPassFragmentDensityMapCreateInfoEXT { VkStructureType sType; const void* pNext; VkAttachmentReference fragmentDensityMapAttachment; } VkRenderPassFragmentDensityMapCreateInfoEXT; #define VK_EXT_scalar_block_layout 1 #define VK_EXT_SCALAR_BLOCK_LAYOUT_SPEC_VERSION 1 #define VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME "VK_EXT_scalar_block_layout" typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLayoutFeaturesEXT; #define VK_GOOGLE_hlsl_functionality1 1 #define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION 1 #define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1" #define VK_GOOGLE_decorate_string 1 #define VK_GOOGLE_DECORATE_STRING_SPEC_VERSION 1 #define VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME "VK_GOOGLE_decorate_string" #define VK_EXT_subgroup_size_control 1 #define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2 #define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control" typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 subgroupSizeControl; VkBool32 computeFullSubgroups; } VkPhysicalDeviceSubgroupSizeControlFeaturesEXT; typedef struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT { VkStructureType sType; void* pNext; uint32_t minSubgroupSize; uint32_t maxSubgroupSize; uint32_t maxComputeWorkgroupSubgroups; VkShaderStageFlags requiredSubgroupSizeStages; } VkPhysicalDeviceSubgroupSizeControlPropertiesEXT; typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT { VkStructureType sType; void* pNext; uint32_t requiredSubgroupSize; } VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT; #define VK_AMD_shader_core_properties2 1 #define VK_AMD_SHADER_CORE_PROPERTIES_2_SPEC_VERSION 1 #define VK_AMD_SHADER_CORE_PROPERTIES_2_EXTENSION_NAME "VK_AMD_shader_core_properties2" typedef enum VkShaderCorePropertiesFlagBitsAMD { VK_SHADER_CORE_PROPERTIES_FLAG_BITS_MAX_ENUM_AMD = 0x7FFFFFFF } VkShaderCorePropertiesFlagBitsAMD; typedef VkFlags VkShaderCorePropertiesFlagsAMD; typedef struct VkPhysicalDeviceShaderCoreProperties2AMD { VkStructureType sType; void* pNext; VkShaderCorePropertiesFlagsAMD shaderCoreFeatures; uint32_t activeComputeUnitCount; } VkPhysicalDeviceShaderCoreProperties2AMD; #define VK_AMD_device_coherent_memory 1 #define VK_AMD_DEVICE_COHERENT_MEMORY_SPEC_VERSION 1 #define VK_AMD_DEVICE_COHERENT_MEMORY_EXTENSION_NAME "VK_AMD_device_coherent_memory" typedef struct VkPhysicalDeviceCoherentMemoryFeaturesAMD { VkStructureType sType; void* pNext; VkBool32 deviceCoherentMemory; } VkPhysicalDeviceCoherentMemoryFeaturesAMD; #define VK_EXT_shader_image_atomic_int64 1 #define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_SPEC_VERSION 1 #define VK_EXT_SHADER_IMAGE_ATOMIC_INT64_EXTENSION_NAME "VK_EXT_shader_image_atomic_int64" typedef struct VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT { VkStructureType sType; void* pNext; VkBool32 shaderImageInt64Atomics; VkBool32 sparseImageInt64Atomics; } VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT; #define VK_EXT_memory_budget 1 #define VK_EXT_MEMORY_BUDGET_SPEC_VERSION 1 #define VK_EXT_MEMORY_BUDGET_EXTENSION_NAME "VK_EXT_memory_budget" typedef struct VkPhysicalDeviceMemoryBudgetPropertiesEXT { VkStructureType sType; void* pNext; VkDeviceSize heapBudget[VK_MAX_MEMORY_HEAPS]; VkDeviceSize heapUsage[VK_MAX_MEMORY_HEAPS]; } VkPhysicalDeviceMemoryBudgetPropertiesEXT; #define VK_EXT_memory_priority 1 #define VK_EXT_MEMORY_PRIORITY_SPEC_VERSION 1 #define VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME "VK_EXT_memory_priority" typedef struct VkPhysicalDeviceMemoryPriorityFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 memoryPriority; } VkPhysicalDeviceMemoryPriorityFeaturesEXT; typedef struct VkMemoryPriorityAllocateInfoEXT { VkStructureType sType; const void* pNext; float priority; } VkMemoryPriorityAllocateInfoEXT; #define VK_NV_dedicated_allocation_image_aliasing 1 #define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_SPEC_VERSION 1 #define VK_NV_DEDICATED_ALLOCATION_IMAGE_ALIASING_EXTENSION_NAME "VK_NV_dedicated_allocation_image_aliasing" typedef struct VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV { VkStructureType sType; void* pNext; VkBool32 dedicatedAllocationImageAliasing; } VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV; #define VK_EXT_buffer_device_address 1 #define VK_EXT_BUFFER_DEVICE_ADDRESS_SPEC_VERSION 2 #define VK_EXT_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME "VK_EXT_buffer_device_address" typedef struct VkPhysicalDeviceBufferDeviceAddressFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 bufferDeviceAddress; VkBool32 bufferDeviceAddressCaptureReplay; VkBool32 bufferDeviceAddressMultiDevice; } VkPhysicalDeviceBufferDeviceAddressFeaturesEXT; typedef VkPhysicalDeviceBufferDeviceAddressFeaturesEXT VkPhysicalDeviceBufferAddressFeaturesEXT; typedef VkBufferDeviceAddressInfo VkBufferDeviceAddressInfoEXT; typedef struct VkBufferDeviceAddressCreateInfoEXT { VkStructureType sType; const void* pNext; VkDeviceAddress deviceAddress; } VkBufferDeviceAddressCreateInfoEXT; typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetBufferDeviceAddressEXT)(VkDevice device, const VkBufferDeviceAddressInfo* pInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT( VkDevice device, const VkBufferDeviceAddressInfo* pInfo); #endif #define VK_EXT_tooling_info 1 #define VK_EXT_TOOLING_INFO_SPEC_VERSION 1 #define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info" typedef enum VkToolPurposeFlagBitsEXT { VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 0x00000001, VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 0x00000002, VK_TOOL_PURPOSE_TRACING_BIT_EXT = 0x00000004, VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = 0x00000008, VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = 0x00000010, VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020, VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040, VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkToolPurposeFlagBitsEXT; typedef VkFlags VkToolPurposeFlagsEXT; typedef struct VkPhysicalDeviceToolPropertiesEXT { VkStructureType sType; void* pNext; char name[VK_MAX_EXTENSION_NAME_SIZE]; char version[VK_MAX_EXTENSION_NAME_SIZE]; VkToolPurposeFlagsEXT purposes; char description[VK_MAX_DESCRIPTION_SIZE]; char layer[VK_MAX_EXTENSION_NAME_SIZE]; } VkPhysicalDeviceToolPropertiesEXT; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolPropertiesEXT* pToolProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT( VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolPropertiesEXT* pToolProperties); #endif #define VK_EXT_separate_stencil_usage 1 #define VK_EXT_SEPARATE_STENCIL_USAGE_SPEC_VERSION 1 #define VK_EXT_SEPARATE_STENCIL_USAGE_EXTENSION_NAME "VK_EXT_separate_stencil_usage" typedef VkImageStencilUsageCreateInfo VkImageStencilUsageCreateInfoEXT; #define VK_EXT_validation_features 1 #define VK_EXT_VALIDATION_FEATURES_SPEC_VERSION 4 #define VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME "VK_EXT_validation_features" typedef enum VkValidationFeatureEnableEXT { VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT = 0, VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT = 1, VK_VALIDATION_FEATURE_ENABLE_BEST_PRACTICES_EXT = 2, VK_VALIDATION_FEATURE_ENABLE_DEBUG_PRINTF_EXT = 3, VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT = 4, VK_VALIDATION_FEATURE_ENABLE_MAX_ENUM_EXT = 0x7FFFFFFF } VkValidationFeatureEnableEXT; typedef enum VkValidationFeatureDisableEXT { VK_VALIDATION_FEATURE_DISABLE_ALL_EXT = 0, VK_VALIDATION_FEATURE_DISABLE_SHADERS_EXT = 1, VK_VALIDATION_FEATURE_DISABLE_THREAD_SAFETY_EXT = 2, VK_VALIDATION_FEATURE_DISABLE_API_PARAMETERS_EXT = 3, VK_VALIDATION_FEATURE_DISABLE_OBJECT_LIFETIMES_EXT = 4, VK_VALIDATION_FEATURE_DISABLE_CORE_CHECKS_EXT = 5, VK_VALIDATION_FEATURE_DISABLE_UNIQUE_HANDLES_EXT = 6, VK_VALIDATION_FEATURE_DISABLE_MAX_ENUM_EXT = 0x7FFFFFFF } VkValidationFeatureDisableEXT; typedef struct VkValidationFeaturesEXT { VkStructureType sType; const void* pNext; uint32_t enabledValidationFeatureCount; const VkValidationFeatureEnableEXT* pEnabledValidationFeatures; uint32_t disabledValidationFeatureCount; const VkValidationFeatureDisableEXT* pDisabledValidationFeatures; } VkValidationFeaturesEXT; #define VK_NV_cooperative_matrix 1 #define VK_NV_COOPERATIVE_MATRIX_SPEC_VERSION 1 #define VK_NV_COOPERATIVE_MATRIX_EXTENSION_NAME "VK_NV_cooperative_matrix" typedef enum VkComponentTypeNV { VK_COMPONENT_TYPE_FLOAT16_NV = 0, VK_COMPONENT_TYPE_FLOAT32_NV = 1, VK_COMPONENT_TYPE_FLOAT64_NV = 2, VK_COMPONENT_TYPE_SINT8_NV = 3, VK_COMPONENT_TYPE_SINT16_NV = 4, VK_COMPONENT_TYPE_SINT32_NV = 5, VK_COMPONENT_TYPE_SINT64_NV = 6, VK_COMPONENT_TYPE_UINT8_NV = 7, VK_COMPONENT_TYPE_UINT16_NV = 8, VK_COMPONENT_TYPE_UINT32_NV = 9, VK_COMPONENT_TYPE_UINT64_NV = 10, VK_COMPONENT_TYPE_MAX_ENUM_NV = 0x7FFFFFFF } VkComponentTypeNV; typedef enum VkScopeNV { VK_SCOPE_DEVICE_NV = 1, VK_SCOPE_WORKGROUP_NV = 2, VK_SCOPE_SUBGROUP_NV = 3, VK_SCOPE_QUEUE_FAMILY_NV = 5, VK_SCOPE_MAX_ENUM_NV = 0x7FFFFFFF } VkScopeNV; typedef struct VkCooperativeMatrixPropertiesNV { VkStructureType sType; void* pNext; uint32_t MSize; uint32_t NSize; uint32_t KSize; VkComponentTypeNV AType; VkComponentTypeNV BType; VkComponentTypeNV CType; VkComponentTypeNV DType; VkScopeNV scope; } VkCooperativeMatrixPropertiesNV; typedef struct VkPhysicalDeviceCooperativeMatrixFeaturesNV { VkStructureType sType; void* pNext; VkBool32 cooperativeMatrix; VkBool32 cooperativeMatrixRobustBufferAccess; } VkPhysicalDeviceCooperativeMatrixFeaturesNV; typedef struct VkPhysicalDeviceCooperativeMatrixPropertiesNV { VkStructureType sType; void* pNext; VkShaderStageFlags cooperativeMatrixSupportedStages; } VkPhysicalDeviceCooperativeMatrixPropertiesNV; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixPropertiesNV( VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixPropertiesNV* pProperties); #endif #define VK_NV_coverage_reduction_mode 1 #define VK_NV_COVERAGE_REDUCTION_MODE_SPEC_VERSION 1 #define VK_NV_COVERAGE_REDUCTION_MODE_EXTENSION_NAME "VK_NV_coverage_reduction_mode" typedef enum VkCoverageReductionModeNV { VK_COVERAGE_REDUCTION_MODE_MERGE_NV = 0, VK_COVERAGE_REDUCTION_MODE_TRUNCATE_NV = 1, VK_COVERAGE_REDUCTION_MODE_MAX_ENUM_NV = 0x7FFFFFFF } VkCoverageReductionModeNV; typedef VkFlags VkPipelineCoverageReductionStateCreateFlagsNV; typedef struct VkPhysicalDeviceCoverageReductionModeFeaturesNV { VkStructureType sType; void* pNext; VkBool32 coverageReductionMode; } VkPhysicalDeviceCoverageReductionModeFeaturesNV; typedef struct VkPipelineCoverageReductionStateCreateInfoNV { VkStructureType sType; const void* pNext; VkPipelineCoverageReductionStateCreateFlagsNV flags; VkCoverageReductionModeNV coverageReductionMode; } VkPipelineCoverageReductionStateCreateInfoNV; typedef struct VkFramebufferMixedSamplesCombinationNV { VkStructureType sType; void* pNext; VkCoverageReductionModeNV coverageReductionMode; VkSampleCountFlagBits rasterizationSamples; VkSampleCountFlags depthStencilSamples; VkSampleCountFlags colorSamples; } VkFramebufferMixedSamplesCombinationNV; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)(VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV( VkPhysicalDevice physicalDevice, uint32_t* pCombinationCount, VkFramebufferMixedSamplesCombinationNV* pCombinations); #endif #define VK_EXT_fragment_shader_interlock 1 #define VK_EXT_FRAGMENT_SHADER_INTERLOCK_SPEC_VERSION 1 #define VK_EXT_FRAGMENT_SHADER_INTERLOCK_EXTENSION_NAME "VK_EXT_fragment_shader_interlock" typedef struct VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 fragmentShaderSampleInterlock; VkBool32 fragmentShaderPixelInterlock; VkBool32 fragmentShaderShadingRateInterlock; } VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT; #define VK_EXT_ycbcr_image_arrays 1 #define VK_EXT_YCBCR_IMAGE_ARRAYS_SPEC_VERSION 1 #define VK_EXT_YCBCR_IMAGE_ARRAYS_EXTENSION_NAME "VK_EXT_ycbcr_image_arrays" typedef struct VkPhysicalDeviceYcbcrImageArraysFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 ycbcrImageArrays; } VkPhysicalDeviceYcbcrImageArraysFeaturesEXT; #define VK_EXT_headless_surface 1 #define VK_EXT_HEADLESS_SURFACE_SPEC_VERSION 1 #define VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME "VK_EXT_headless_surface" typedef VkFlags VkHeadlessSurfaceCreateFlagsEXT; typedef struct VkHeadlessSurfaceCreateInfoEXT { VkStructureType sType; const void* pNext; VkHeadlessSurfaceCreateFlagsEXT flags; } VkHeadlessSurfaceCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkCreateHeadlessSurfaceEXT)(VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( VkInstance instance, const VkHeadlessSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #define VK_EXT_line_rasterization 1 #define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1 #define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization" typedef enum VkLineRasterizationModeEXT { VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = 0, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = 1, VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = 2, VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = 3, VK_LINE_RASTERIZATION_MODE_MAX_ENUM_EXT = 0x7FFFFFFF } VkLineRasterizationModeEXT; typedef struct VkPhysicalDeviceLineRasterizationFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 rectangularLines; VkBool32 bresenhamLines; VkBool32 smoothLines; VkBool32 stippledRectangularLines; VkBool32 stippledBresenhamLines; VkBool32 stippledSmoothLines; } VkPhysicalDeviceLineRasterizationFeaturesEXT; typedef struct VkPhysicalDeviceLineRasterizationPropertiesEXT { VkStructureType sType; void* pNext; uint32_t lineSubPixelPrecisionBits; } VkPhysicalDeviceLineRasterizationPropertiesEXT; typedef struct VkPipelineRasterizationLineStateCreateInfoEXT { VkStructureType sType; const void* pNext; VkLineRasterizationModeEXT lineRasterizationMode; VkBool32 stippledLineEnable; uint32_t lineStippleFactor; uint16_t lineStipplePattern; } VkPipelineRasterizationLineStateCreateInfoEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStippleEXT( VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); #endif #define VK_EXT_shader_atomic_float 1 #define VK_EXT_SHADER_ATOMIC_FLOAT_SPEC_VERSION 1 #define VK_EXT_SHADER_ATOMIC_FLOAT_EXTENSION_NAME "VK_EXT_shader_atomic_float" typedef struct VkPhysicalDeviceShaderAtomicFloatFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 shaderBufferFloat32Atomics; VkBool32 shaderBufferFloat32AtomicAdd; VkBool32 shaderBufferFloat64Atomics; VkBool32 shaderBufferFloat64AtomicAdd; VkBool32 shaderSharedFloat32Atomics; VkBool32 shaderSharedFloat32AtomicAdd; VkBool32 shaderSharedFloat64Atomics; VkBool32 shaderSharedFloat64AtomicAdd; VkBool32 shaderImageFloat32Atomics; VkBool32 shaderImageFloat32AtomicAdd; VkBool32 sparseImageFloat32Atomics; VkBool32 sparseImageFloat32AtomicAdd; } VkPhysicalDeviceShaderAtomicFloatFeaturesEXT; #define VK_EXT_host_query_reset 1 #define VK_EXT_HOST_QUERY_RESET_SPEC_VERSION 1 #define VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME "VK_EXT_host_query_reset" typedef VkPhysicalDeviceHostQueryResetFeatures VkPhysicalDeviceHostQueryResetFeaturesEXT; typedef void (VKAPI_PTR *PFN_vkResetQueryPoolEXT)(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount); #endif #define VK_EXT_index_type_uint8 1 #define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1 #define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8" typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesEXT { VkStructureType sType; void* pNext; VkBool32 indexTypeUint8; } VkPhysicalDeviceIndexTypeUint8FeaturesEXT; #define VK_EXT_extended_dynamic_state 1 #define VK_EXT_EXTENDED_DYNAMIC_STATE_SPEC_VERSION 1 #define VK_EXT_EXTENDED_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_extended_dynamic_state" typedef struct VkPhysicalDeviceExtendedDynamicStateFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 extendedDynamicState; } VkPhysicalDeviceExtendedDynamicStateFeaturesEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetCullModeEXT)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFaceEXT)(VkCommandBuffer commandBuffer, VkFrontFace frontFace); typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopologyEXT)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCountEXT)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2EXT)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOpEXT)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOpEXT)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetCullModeEXT( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode); VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFaceEXT( VkCommandBuffer commandBuffer, VkFrontFace frontFace); VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopologyEXT( VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology); VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCountEXT( VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports); VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCountEXT( VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors); VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2EXT( VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOpEXT( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable); VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnableEXT( VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable); VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp); #endif #define VK_EXT_shader_demote_to_helper_invocation 1 #define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1 #define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation" typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 shaderDemoteToHelperInvocation; } VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT; #define VK_NV_device_generated_commands 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectCommandsLayoutNV) #define VK_NV_DEVICE_GENERATED_COMMANDS_SPEC_VERSION 3 #define VK_NV_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME "VK_NV_device_generated_commands" typedef enum VkIndirectCommandsTokenTypeNV { VK_INDIRECT_COMMANDS_TOKEN_TYPE_SHADER_GROUP_NV = 0, VK_INDIRECT_COMMANDS_TOKEN_TYPE_STATE_FLAGS_NV = 1, VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NV = 2, VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NV = 3, VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NV = 4, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NV = 5, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NV = 6, VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_TASKS_NV = 7, VK_INDIRECT_COMMANDS_TOKEN_TYPE_MAX_ENUM_NV = 0x7FFFFFFF } VkIndirectCommandsTokenTypeNV; typedef enum VkIndirectStateFlagBitsNV { VK_INDIRECT_STATE_FLAG_FRONTFACE_BIT_NV = 0x00000001, VK_INDIRECT_STATE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF } VkIndirectStateFlagBitsNV; typedef VkFlags VkIndirectStateFlagsNV; typedef enum VkIndirectCommandsLayoutUsageFlagBitsNV { VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EXPLICIT_PREPROCESS_BIT_NV = 0x00000001, VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NV = 0x00000002, VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NV = 0x00000004, VK_INDIRECT_COMMANDS_LAYOUT_USAGE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF } VkIndirectCommandsLayoutUsageFlagBitsNV; typedef VkFlags VkIndirectCommandsLayoutUsageFlagsNV; typedef struct VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV { VkStructureType sType; void* pNext; uint32_t maxGraphicsShaderGroupCount; uint32_t maxIndirectSequenceCount; uint32_t maxIndirectCommandsTokenCount; uint32_t maxIndirectCommandsStreamCount; uint32_t maxIndirectCommandsTokenOffset; uint32_t maxIndirectCommandsStreamStride; uint32_t minSequencesCountBufferOffsetAlignment; uint32_t minSequencesIndexBufferOffsetAlignment; uint32_t minIndirectCommandsBufferOffsetAlignment; } VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV; typedef struct VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV { VkStructureType sType; void* pNext; VkBool32 deviceGeneratedCommands; } VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV; typedef struct VkGraphicsShaderGroupCreateInfoNV { VkStructureType sType; const void* pNext; uint32_t stageCount; const VkPipelineShaderStageCreateInfo* pStages; const VkPipelineVertexInputStateCreateInfo* pVertexInputState; const VkPipelineTessellationStateCreateInfo* pTessellationState; } VkGraphicsShaderGroupCreateInfoNV; typedef struct VkGraphicsPipelineShaderGroupsCreateInfoNV { VkStructureType sType; const void* pNext; uint32_t groupCount; const VkGraphicsShaderGroupCreateInfoNV* pGroups; uint32_t pipelineCount; const VkPipeline* pPipelines; } VkGraphicsPipelineShaderGroupsCreateInfoNV; typedef struct VkBindShaderGroupIndirectCommandNV { uint32_t groupIndex; } VkBindShaderGroupIndirectCommandNV; typedef struct VkBindIndexBufferIndirectCommandNV { VkDeviceAddress bufferAddress; uint32_t size; VkIndexType indexType; } VkBindIndexBufferIndirectCommandNV; typedef struct VkBindVertexBufferIndirectCommandNV { VkDeviceAddress bufferAddress; uint32_t size; uint32_t stride; } VkBindVertexBufferIndirectCommandNV; typedef struct VkSetStateFlagsIndirectCommandNV { uint32_t data; } VkSetStateFlagsIndirectCommandNV; typedef struct VkIndirectCommandsStreamNV { VkBuffer buffer; VkDeviceSize offset; } VkIndirectCommandsStreamNV; typedef struct VkIndirectCommandsLayoutTokenNV { VkStructureType sType; const void* pNext; VkIndirectCommandsTokenTypeNV tokenType; uint32_t stream; uint32_t offset; uint32_t vertexBindingUnit; VkBool32 vertexDynamicStride; VkPipelineLayout pushconstantPipelineLayout; VkShaderStageFlags pushconstantShaderStageFlags; uint32_t pushconstantOffset; uint32_t pushconstantSize; VkIndirectStateFlagsNV indirectStateFlags; uint32_t indexTypeCount; const VkIndexType* pIndexTypes; const uint32_t* pIndexTypeValues; } VkIndirectCommandsLayoutTokenNV; typedef struct VkIndirectCommandsLayoutCreateInfoNV { VkStructureType sType; const void* pNext; VkIndirectCommandsLayoutUsageFlagsNV flags; VkPipelineBindPoint pipelineBindPoint; uint32_t tokenCount; const VkIndirectCommandsLayoutTokenNV* pTokens; uint32_t streamCount; const uint32_t* pStreamStrides; } VkIndirectCommandsLayoutCreateInfoNV; typedef struct VkGeneratedCommandsInfoNV { VkStructureType sType; const void* pNext; VkPipelineBindPoint pipelineBindPoint; VkPipeline pipeline; VkIndirectCommandsLayoutNV indirectCommandsLayout; uint32_t streamCount; const VkIndirectCommandsStreamNV* pStreams; uint32_t sequencesCount; VkBuffer preprocessBuffer; VkDeviceSize preprocessOffset; VkDeviceSize preprocessSize; VkBuffer sequencesCountBuffer; VkDeviceSize sequencesCountOffset; VkBuffer sequencesIndexBuffer; VkDeviceSize sequencesIndexOffset; } VkGeneratedCommandsInfoNV; typedef struct VkGeneratedCommandsMemoryRequirementsInfoNV { VkStructureType sType; const void* pNext; VkPipelineBindPoint pipelineBindPoint; VkPipeline pipeline; VkIndirectCommandsLayoutNV indirectCommandsLayout; uint32_t maxSequencesCount; } VkGeneratedCommandsMemoryRequirementsInfoNV; typedef void (VKAPI_PTR *PFN_vkGetGeneratedCommandsMemoryRequirementsNV)(VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements); typedef void (VKAPI_PTR *PFN_vkCmdPreprocessGeneratedCommandsNV)(VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); typedef void (VKAPI_PTR *PFN_vkCmdExecuteGeneratedCommandsNV)(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); typedef void (VKAPI_PTR *PFN_vkCmdBindPipelineShaderGroupNV)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex); typedef VkResult (VKAPI_PTR *PFN_vkCreateIndirectCommandsLayoutNV)(VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); typedef void (VKAPI_PTR *PFN_vkDestroyIndirectCommandsLayoutNV)(VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkGetGeneratedCommandsMemoryRequirementsNV( VkDevice device, const VkGeneratedCommandsMemoryRequirementsInfoNV* pInfo, VkMemoryRequirements2* pMemoryRequirements); VKAPI_ATTR void VKAPI_CALL vkCmdPreprocessGeneratedCommandsNV( VkCommandBuffer commandBuffer, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); VKAPI_ATTR void VKAPI_CALL vkCmdExecuteGeneratedCommandsNV( VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV* pGeneratedCommandsInfo); VKAPI_ATTR void VKAPI_CALL vkCmdBindPipelineShaderGroupNV( VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline, uint32_t groupIndex); VKAPI_ATTR VkResult VKAPI_CALL vkCreateIndirectCommandsLayoutNV( VkDevice device, const VkIndirectCommandsLayoutCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkIndirectCommandsLayoutNV* pIndirectCommandsLayout); VKAPI_ATTR void VKAPI_CALL vkDestroyIndirectCommandsLayoutNV( VkDevice device, VkIndirectCommandsLayoutNV indirectCommandsLayout, const VkAllocationCallbacks* pAllocator); #endif #define VK_NV_inherited_viewport_scissor 1 #define VK_NV_INHERITED_VIEWPORT_SCISSOR_SPEC_VERSION 1 #define VK_NV_INHERITED_VIEWPORT_SCISSOR_EXTENSION_NAME "VK_NV_inherited_viewport_scissor" typedef struct VkPhysicalDeviceInheritedViewportScissorFeaturesNV { VkStructureType sType; void* pNext; VkBool32 inheritedViewportScissor2D; } VkPhysicalDeviceInheritedViewportScissorFeaturesNV; typedef struct VkCommandBufferInheritanceViewportScissorInfoNV { VkStructureType sType; const void* pNext; VkBool32 viewportScissor2D; uint32_t viewportDepthCount; const VkViewport* pViewportDepths; } VkCommandBufferInheritanceViewportScissorInfoNV; #define VK_EXT_texel_buffer_alignment 1 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_SPEC_VERSION 1 #define VK_EXT_TEXEL_BUFFER_ALIGNMENT_EXTENSION_NAME "VK_EXT_texel_buffer_alignment" typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 texelBufferAlignment; } VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT; typedef struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT { VkStructureType sType; void* pNext; VkDeviceSize storageTexelBufferOffsetAlignmentBytes; VkBool32 storageTexelBufferOffsetSingleTexelAlignment; VkDeviceSize uniformTexelBufferOffsetAlignmentBytes; VkBool32 uniformTexelBufferOffsetSingleTexelAlignment; } VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT; #define VK_QCOM_render_pass_transform 1 #define VK_QCOM_RENDER_PASS_TRANSFORM_SPEC_VERSION 2 #define VK_QCOM_RENDER_PASS_TRANSFORM_EXTENSION_NAME "VK_QCOM_render_pass_transform" typedef struct VkRenderPassTransformBeginInfoQCOM { VkStructureType sType; void* pNext; VkSurfaceTransformFlagBitsKHR transform; } VkRenderPassTransformBeginInfoQCOM; typedef struct VkCommandBufferInheritanceRenderPassTransformInfoQCOM { VkStructureType sType; void* pNext; VkSurfaceTransformFlagBitsKHR transform; VkRect2D renderArea; } VkCommandBufferInheritanceRenderPassTransformInfoQCOM; #define VK_EXT_device_memory_report 1 #define VK_EXT_DEVICE_MEMORY_REPORT_SPEC_VERSION 2 #define VK_EXT_DEVICE_MEMORY_REPORT_EXTENSION_NAME "VK_EXT_device_memory_report" typedef enum VkDeviceMemoryReportEventTypeEXT { VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATE_EXT = 0, VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_FREE_EXT = 1, VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_IMPORT_EXT = 2, VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_UNIMPORT_EXT = 3, VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_ALLOCATION_FAILED_EXT = 4, VK_DEVICE_MEMORY_REPORT_EVENT_TYPE_MAX_ENUM_EXT = 0x7FFFFFFF } VkDeviceMemoryReportEventTypeEXT; typedef VkFlags VkDeviceMemoryReportFlagsEXT; typedef struct VkPhysicalDeviceDeviceMemoryReportFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 deviceMemoryReport; } VkPhysicalDeviceDeviceMemoryReportFeaturesEXT; typedef struct VkDeviceMemoryReportCallbackDataEXT { VkStructureType sType; const void* pNext; VkDeviceMemoryReportFlagsEXT flags; VkDeviceMemoryReportEventTypeEXT type; uint64_t memoryObjectId; VkDeviceSize size; VkObjectType objectType; uint64_t objectHandle; uint32_t heapIndex; } VkDeviceMemoryReportCallbackDataEXT; typedef void (VKAPI_PTR *PFN_vkDeviceMemoryReportCallbackEXT)( const VkDeviceMemoryReportCallbackDataEXT* pCallbackData, void* pUserData); typedef struct VkDeviceDeviceMemoryReportCreateInfoEXT { VkStructureType sType; const void* pNext; VkDeviceMemoryReportFlagsEXT flags; PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback; void* pUserData; } VkDeviceDeviceMemoryReportCreateInfoEXT; #define VK_EXT_robustness2 1 #define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1 #define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2" typedef struct VkPhysicalDeviceRobustness2FeaturesEXT { VkStructureType sType; void* pNext; VkBool32 robustBufferAccess2; VkBool32 robustImageAccess2; VkBool32 nullDescriptor; } VkPhysicalDeviceRobustness2FeaturesEXT; typedef struct VkPhysicalDeviceRobustness2PropertiesEXT { VkStructureType sType; void* pNext; VkDeviceSize robustStorageBufferAccessSizeAlignment; VkDeviceSize robustUniformBufferAccessSizeAlignment; } VkPhysicalDeviceRobustness2PropertiesEXT; #define VK_EXT_custom_border_color 1 #define VK_EXT_CUSTOM_BORDER_COLOR_SPEC_VERSION 12 #define VK_EXT_CUSTOM_BORDER_COLOR_EXTENSION_NAME "VK_EXT_custom_border_color" typedef struct VkSamplerCustomBorderColorCreateInfoEXT { VkStructureType sType; const void* pNext; VkClearColorValue customBorderColor; VkFormat format; } VkSamplerCustomBorderColorCreateInfoEXT; typedef struct VkPhysicalDeviceCustomBorderColorPropertiesEXT { VkStructureType sType; void* pNext; uint32_t maxCustomBorderColorSamplers; } VkPhysicalDeviceCustomBorderColorPropertiesEXT; typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 customBorderColors; VkBool32 customBorderColorWithoutFormat; } VkPhysicalDeviceCustomBorderColorFeaturesEXT; #define VK_GOOGLE_user_type 1 #define VK_GOOGLE_USER_TYPE_SPEC_VERSION 1 #define VK_GOOGLE_USER_TYPE_EXTENSION_NAME "VK_GOOGLE_user_type" #define VK_EXT_private_data 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlotEXT) #define VK_EXT_PRIVATE_DATA_SPEC_VERSION 1 #define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data" typedef enum VkPrivateDataSlotCreateFlagBitsEXT { VK_PRIVATE_DATA_SLOT_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF } VkPrivateDataSlotCreateFlagBitsEXT; typedef VkFlags VkPrivateDataSlotCreateFlagsEXT; typedef struct VkPhysicalDevicePrivateDataFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 privateData; } VkPhysicalDevicePrivateDataFeaturesEXT; typedef struct VkDevicePrivateDataCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t privateDataSlotRequestCount; } VkDevicePrivateDataCreateInfoEXT; typedef struct VkPrivateDataSlotCreateInfoEXT { VkStructureType sType; const void* pNext; VkPrivateDataSlotCreateFlagsEXT flags; } VkPrivateDataSlotCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlotEXT* pPrivateDataSlot); typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlotEXT privateDataSlot, const VkAllocationCallbacks* pAllocator); typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t data); typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t* pData); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT( VkDevice device, const VkPrivateDataSlotCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlotEXT* pPrivateDataSlot); VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT( VkDevice device, VkPrivateDataSlotEXT privateDataSlot, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t data); VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT( VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t* pData); #endif #define VK_EXT_pipeline_creation_cache_control 1 #define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3 #define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control" typedef struct VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 pipelineCreationCacheControl; } VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT; #define VK_NV_device_diagnostics_config 1 #define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_SPEC_VERSION 1 #define VK_NV_DEVICE_DIAGNOSTICS_CONFIG_EXTENSION_NAME "VK_NV_device_diagnostics_config" typedef enum VkDeviceDiagnosticsConfigFlagBitsNV { VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_SHADER_DEBUG_INFO_BIT_NV = 0x00000001, VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_RESOURCE_TRACKING_BIT_NV = 0x00000002, VK_DEVICE_DIAGNOSTICS_CONFIG_ENABLE_AUTOMATIC_CHECKPOINTS_BIT_NV = 0x00000004, VK_DEVICE_DIAGNOSTICS_CONFIG_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF } VkDeviceDiagnosticsConfigFlagBitsNV; typedef VkFlags VkDeviceDiagnosticsConfigFlagsNV; typedef struct VkPhysicalDeviceDiagnosticsConfigFeaturesNV { VkStructureType sType; void* pNext; VkBool32 diagnosticsConfig; } VkPhysicalDeviceDiagnosticsConfigFeaturesNV; typedef struct VkDeviceDiagnosticsConfigCreateInfoNV { VkStructureType sType; const void* pNext; VkDeviceDiagnosticsConfigFlagsNV flags; } VkDeviceDiagnosticsConfigCreateInfoNV; #define VK_QCOM_render_pass_store_ops 1 #define VK_QCOM_render_pass_store_ops_SPEC_VERSION 2 #define VK_QCOM_render_pass_store_ops_EXTENSION_NAME "VK_QCOM_render_pass_store_ops" #define VK_NV_fragment_shading_rate_enums 1 #define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_SPEC_VERSION 1 #define VK_NV_FRAGMENT_SHADING_RATE_ENUMS_EXTENSION_NAME "VK_NV_fragment_shading_rate_enums" typedef enum VkFragmentShadingRateTypeNV { VK_FRAGMENT_SHADING_RATE_TYPE_FRAGMENT_SIZE_NV = 0, VK_FRAGMENT_SHADING_RATE_TYPE_ENUMS_NV = 1, VK_FRAGMENT_SHADING_RATE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF } VkFragmentShadingRateTypeNV; typedef enum VkFragmentShadingRateNV { VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV = 0, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV = 1, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV = 4, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV = 5, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV = 6, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV = 9, VK_FRAGMENT_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV = 10, VK_FRAGMENT_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV = 11, VK_FRAGMENT_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV = 12, VK_FRAGMENT_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV = 13, VK_FRAGMENT_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV = 14, VK_FRAGMENT_SHADING_RATE_NO_INVOCATIONS_NV = 15, VK_FRAGMENT_SHADING_RATE_MAX_ENUM_NV = 0x7FFFFFFF } VkFragmentShadingRateNV; typedef struct VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV { VkStructureType sType; void* pNext; VkBool32 fragmentShadingRateEnums; VkBool32 supersampleFragmentShadingRates; VkBool32 noInvocationFragmentShadingRates; } VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV; typedef struct VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV { VkStructureType sType; void* pNext; VkSampleCountFlagBits maxFragmentShadingRateInvocationCount; } VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV; typedef struct VkPipelineFragmentShadingRateEnumStateCreateInfoNV { VkStructureType sType; const void* pNext; VkFragmentShadingRateTypeNV shadingRateType; VkFragmentShadingRateNV shadingRate; VkFragmentShadingRateCombinerOpKHR combinerOps[2]; } VkPipelineFragmentShadingRateEnumStateCreateInfoNV; typedef void (VKAPI_PTR *PFN_vkCmdSetFragmentShadingRateEnumNV)(VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateEnumNV( VkCommandBuffer commandBuffer, VkFragmentShadingRateNV shadingRate, const VkFragmentShadingRateCombinerOpKHR combinerOps[2]); #endif #define VK_EXT_ycbcr_2plane_444_formats 1 #define VK_EXT_YCBCR_2PLANE_444_FORMATS_SPEC_VERSION 1 #define VK_EXT_YCBCR_2PLANE_444_FORMATS_EXTENSION_NAME "VK_EXT_ycbcr_2plane_444_formats" typedef struct VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 ycbcr2plane444Formats; } VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT; #define VK_EXT_fragment_density_map2 1 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_SPEC_VERSION 1 #define VK_EXT_FRAGMENT_DENSITY_MAP_2_EXTENSION_NAME "VK_EXT_fragment_density_map2" typedef struct VkPhysicalDeviceFragmentDensityMap2FeaturesEXT { VkStructureType sType; void* pNext; VkBool32 fragmentDensityMapDeferred; } VkPhysicalDeviceFragmentDensityMap2FeaturesEXT; typedef struct VkPhysicalDeviceFragmentDensityMap2PropertiesEXT { VkStructureType sType; void* pNext; VkBool32 subsampledLoads; VkBool32 subsampledCoarseReconstructionEarlyAccess; uint32_t maxSubsampledArrayLayers; uint32_t maxDescriptorSetSubsampledSamplers; } VkPhysicalDeviceFragmentDensityMap2PropertiesEXT; #define VK_QCOM_rotated_copy_commands 1 #define VK_QCOM_ROTATED_COPY_COMMANDS_SPEC_VERSION 1 #define VK_QCOM_ROTATED_COPY_COMMANDS_EXTENSION_NAME "VK_QCOM_rotated_copy_commands" typedef struct VkCopyCommandTransformInfoQCOM { VkStructureType sType; const void* pNext; VkSurfaceTransformFlagBitsKHR transform; } VkCopyCommandTransformInfoQCOM; #define VK_EXT_image_robustness 1 #define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1 #define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness" typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 robustImageAccess; } VkPhysicalDeviceImageRobustnessFeaturesEXT; #define VK_EXT_4444_formats 1 #define VK_EXT_4444_FORMATS_SPEC_VERSION 1 #define VK_EXT_4444_FORMATS_EXTENSION_NAME "VK_EXT_4444_formats" typedef struct VkPhysicalDevice4444FormatsFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 formatA4R4G4B4; VkBool32 formatA4B4G4R4; } VkPhysicalDevice4444FormatsFeaturesEXT; #define VK_NV_acquire_winrt_display 1 #define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1 #define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display" typedef VkResult (VKAPI_PTR *PFN_vkAcquireWinrtDisplayNV)(VkPhysicalDevice physicalDevice, VkDisplayKHR display); typedef VkResult (VKAPI_PTR *PFN_vkGetWinrtDisplayNV)(VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkAcquireWinrtDisplayNV( VkPhysicalDevice physicalDevice, VkDisplayKHR display); VKAPI_ATTR VkResult VKAPI_CALL vkGetWinrtDisplayNV( VkPhysicalDevice physicalDevice, uint32_t deviceRelativeId, VkDisplayKHR* pDisplay); #endif #define VK_VALVE_mutable_descriptor_type 1 #define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_SPEC_VERSION 1 #define VK_VALVE_MUTABLE_DESCRIPTOR_TYPE_EXTENSION_NAME "VK_VALVE_mutable_descriptor_type" typedef struct VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE { VkStructureType sType; void* pNext; VkBool32 mutableDescriptorType; } VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE; typedef struct VkMutableDescriptorTypeListVALVE { uint32_t descriptorTypeCount; const VkDescriptorType* pDescriptorTypes; } VkMutableDescriptorTypeListVALVE; typedef struct VkMutableDescriptorTypeCreateInfoVALVE { VkStructureType sType; const void* pNext; uint32_t mutableDescriptorTypeListCount; const VkMutableDescriptorTypeListVALVE* pMutableDescriptorTypeLists; } VkMutableDescriptorTypeCreateInfoVALVE; #define VK_EXT_vertex_input_dynamic_state 1 #define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_SPEC_VERSION 2 #define VK_EXT_VERTEX_INPUT_DYNAMIC_STATE_EXTENSION_NAME "VK_EXT_vertex_input_dynamic_state" typedef struct VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 vertexInputDynamicState; } VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT; typedef struct VkVertexInputBindingDescription2EXT { VkStructureType sType; void* pNext; uint32_t binding; uint32_t stride; VkVertexInputRate inputRate; uint32_t divisor; } VkVertexInputBindingDescription2EXT; typedef struct VkVertexInputAttributeDescription2EXT { VkStructureType sType; void* pNext; uint32_t location; uint32_t binding; VkFormat format; uint32_t offset; } VkVertexInputAttributeDescription2EXT; typedef void (VKAPI_PTR *PFN_vkCmdSetVertexInputEXT)(VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetVertexInputEXT( VkCommandBuffer commandBuffer, uint32_t vertexBindingDescriptionCount, const VkVertexInputBindingDescription2EXT* pVertexBindingDescriptions, uint32_t vertexAttributeDescriptionCount, const VkVertexInputAttributeDescription2EXT* pVertexAttributeDescriptions); #endif #define VK_EXT_extended_dynamic_state2 1 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_SPEC_VERSION 1 #define VK_EXT_EXTENDED_DYNAMIC_STATE_2_EXTENSION_NAME "VK_EXT_extended_dynamic_state2" typedef struct VkPhysicalDeviceExtendedDynamicState2FeaturesEXT { VkStructureType sType; void* pNext; VkBool32 extendedDynamicState2; VkBool32 extendedDynamicState2LogicOp; VkBool32 extendedDynamicState2PatchControlPoints; } VkPhysicalDeviceExtendedDynamicState2FeaturesEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetPatchControlPointsEXT)(VkCommandBuffer commandBuffer, uint32_t patchControlPoints); typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); typedef void (VKAPI_PTR *PFN_vkCmdSetLogicOpEXT)(VkCommandBuffer commandBuffer, VkLogicOp logicOp); typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnableEXT)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetPatchControlPointsEXT( VkCommandBuffer commandBuffer, uint32_t patchControlPoints); VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnableEXT( VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable); VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnableEXT( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable); VKAPI_ATTR void VKAPI_CALL vkCmdSetLogicOpEXT( VkCommandBuffer commandBuffer, VkLogicOp logicOp); VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnableEXT( VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable); #endif #define VK_EXT_color_write_enable 1 #define VK_EXT_COLOR_WRITE_ENABLE_SPEC_VERSION 1 #define VK_EXT_COLOR_WRITE_ENABLE_EXTENSION_NAME "VK_EXT_color_write_enable" typedef struct VkPhysicalDeviceColorWriteEnableFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 colorWriteEnable; } VkPhysicalDeviceColorWriteEnableFeaturesEXT; typedef struct VkPipelineColorWriteCreateInfoEXT { VkStructureType sType; const void* pNext; uint32_t attachmentCount; const VkBool32* pColorWriteEnables; } VkPipelineColorWriteCreateInfoEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetColorWriteEnableEXT)(VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWriteEnableEXT( VkCommandBuffer commandBuffer, uint32_t attachmentCount, const VkBool32* pColorWriteEnables); #endif #define VK_KHR_acceleration_structure 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR) #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 11 #define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure" typedef enum VkBuildAccelerationStructureModeKHR { VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR = 0, VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR = 1, VK_BUILD_ACCELERATION_STRUCTURE_MODE_MAX_ENUM_KHR = 0x7FFFFFFF } VkBuildAccelerationStructureModeKHR; typedef enum VkAccelerationStructureBuildTypeKHR { VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_KHR = 0, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR = 1, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_HOST_OR_DEVICE_KHR = 2, VK_ACCELERATION_STRUCTURE_BUILD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF } VkAccelerationStructureBuildTypeKHR; typedef enum VkAccelerationStructureCompatibilityKHR { VK_ACCELERATION_STRUCTURE_COMPATIBILITY_COMPATIBLE_KHR = 0, VK_ACCELERATION_STRUCTURE_COMPATIBILITY_INCOMPATIBLE_KHR = 1, VK_ACCELERATION_STRUCTURE_COMPATIBILITY_MAX_ENUM_KHR = 0x7FFFFFFF } VkAccelerationStructureCompatibilityKHR; typedef enum VkAccelerationStructureCreateFlagBitsKHR { VK_ACCELERATION_STRUCTURE_CREATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = 0x00000001, VK_ACCELERATION_STRUCTURE_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkAccelerationStructureCreateFlagBitsKHR; typedef VkFlags VkAccelerationStructureCreateFlagsKHR; typedef union VkDeviceOrHostAddressKHR { VkDeviceAddress deviceAddress; void* hostAddress; } VkDeviceOrHostAddressKHR; typedef union VkDeviceOrHostAddressConstKHR { VkDeviceAddress deviceAddress; const void* hostAddress; } VkDeviceOrHostAddressConstKHR; typedef struct VkAccelerationStructureBuildRangeInfoKHR { uint32_t primitiveCount; uint32_t primitiveOffset; uint32_t firstVertex; uint32_t transformOffset; } VkAccelerationStructureBuildRangeInfoKHR; typedef struct VkAccelerationStructureGeometryTrianglesDataKHR { VkStructureType sType; const void* pNext; VkFormat vertexFormat; VkDeviceOrHostAddressConstKHR vertexData; VkDeviceSize vertexStride; uint32_t maxVertex; VkIndexType indexType; VkDeviceOrHostAddressConstKHR indexData; VkDeviceOrHostAddressConstKHR transformData; } VkAccelerationStructureGeometryTrianglesDataKHR; typedef struct VkAccelerationStructureGeometryAabbsDataKHR { VkStructureType sType; const void* pNext; VkDeviceOrHostAddressConstKHR data; VkDeviceSize stride; } VkAccelerationStructureGeometryAabbsDataKHR; typedef struct VkAccelerationStructureGeometryInstancesDataKHR { VkStructureType sType; const void* pNext; VkBool32 arrayOfPointers; VkDeviceOrHostAddressConstKHR data; } VkAccelerationStructureGeometryInstancesDataKHR; typedef union VkAccelerationStructureGeometryDataKHR { VkAccelerationStructureGeometryTrianglesDataKHR triangles; VkAccelerationStructureGeometryAabbsDataKHR aabbs; VkAccelerationStructureGeometryInstancesDataKHR instances; } VkAccelerationStructureGeometryDataKHR; typedef struct VkAccelerationStructureGeometryKHR { VkStructureType sType; const void* pNext; VkGeometryTypeKHR geometryType; VkAccelerationStructureGeometryDataKHR geometry; VkGeometryFlagsKHR flags; } VkAccelerationStructureGeometryKHR; typedef struct VkAccelerationStructureBuildGeometryInfoKHR { VkStructureType sType; const void* pNext; VkAccelerationStructureTypeKHR type; VkBuildAccelerationStructureFlagsKHR flags; VkBuildAccelerationStructureModeKHR mode; VkAccelerationStructureKHR srcAccelerationStructure; VkAccelerationStructureKHR dstAccelerationStructure; uint32_t geometryCount; const VkAccelerationStructureGeometryKHR* pGeometries; const VkAccelerationStructureGeometryKHR* const* ppGeometries; VkDeviceOrHostAddressKHR scratchData; } VkAccelerationStructureBuildGeometryInfoKHR; typedef struct VkAccelerationStructureCreateInfoKHR { VkStructureType sType; const void* pNext; VkAccelerationStructureCreateFlagsKHR createFlags; VkBuffer buffer; VkDeviceSize offset; VkDeviceSize size; VkAccelerationStructureTypeKHR type; VkDeviceAddress deviceAddress; } VkAccelerationStructureCreateInfoKHR; typedef struct VkWriteDescriptorSetAccelerationStructureKHR { VkStructureType sType; const void* pNext; uint32_t accelerationStructureCount; const VkAccelerationStructureKHR* pAccelerationStructures; } VkWriteDescriptorSetAccelerationStructureKHR; typedef struct VkPhysicalDeviceAccelerationStructureFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 accelerationStructure; VkBool32 accelerationStructureCaptureReplay; VkBool32 accelerationStructureIndirectBuild; VkBool32 accelerationStructureHostCommands; VkBool32 descriptorBindingAccelerationStructureUpdateAfterBind; } VkPhysicalDeviceAccelerationStructureFeaturesKHR; typedef struct VkPhysicalDeviceAccelerationStructurePropertiesKHR { VkStructureType sType; void* pNext; uint64_t maxGeometryCount; uint64_t maxInstanceCount; uint64_t maxPrimitiveCount; uint32_t maxPerStageDescriptorAccelerationStructures; uint32_t maxPerStageDescriptorUpdateAfterBindAccelerationStructures; uint32_t maxDescriptorSetAccelerationStructures; uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures; uint32_t minAccelerationStructureScratchOffsetAlignment; } VkPhysicalDeviceAccelerationStructurePropertiesKHR; typedef struct VkAccelerationStructureDeviceAddressInfoKHR { VkStructureType sType; const void* pNext; VkAccelerationStructureKHR accelerationStructure; } VkAccelerationStructureDeviceAddressInfoKHR; typedef struct VkAccelerationStructureVersionInfoKHR { VkStructureType sType; const void* pNext; const uint8_t* pVersionData; } VkAccelerationStructureVersionInfoKHR; typedef struct VkCopyAccelerationStructureToMemoryInfoKHR { VkStructureType sType; const void* pNext; VkAccelerationStructureKHR src; VkDeviceOrHostAddressKHR dst; VkCopyAccelerationStructureModeKHR mode; } VkCopyAccelerationStructureToMemoryInfoKHR; typedef struct VkCopyMemoryToAccelerationStructureInfoKHR { VkStructureType sType; const void* pNext; VkDeviceOrHostAddressConstKHR src; VkAccelerationStructureKHR dst; VkCopyAccelerationStructureModeKHR mode; } VkCopyMemoryToAccelerationStructureInfoKHR; typedef struct VkCopyAccelerationStructureInfoKHR { VkStructureType sType; const void* pNext; VkAccelerationStructureKHR src; VkAccelerationStructureKHR dst; VkCopyAccelerationStructureModeKHR mode; } VkCopyAccelerationStructureInfoKHR; typedef struct VkAccelerationStructureBuildSizesInfoKHR { VkStructureType sType; const void* pNext; VkDeviceSize accelerationStructureSize; VkDeviceSize updateScratchSize; VkDeviceSize buildScratchSize; } VkAccelerationStructureBuildSizesInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure); typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresIndirectKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress* pIndirectDeviceAddresses, const uint32_t* pIndirectStrides, const uint32_t* const* ppMaxPrimitiveCounts); typedef VkResult (VKAPI_PTR *PFN_vkBuildAccelerationStructuresKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR* pInfo); typedef VkResult (VKAPI_PTR *PFN_vkCopyAccelerationStructureToMemoryKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToAccelerationStructureKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); typedef VkResult (VKAPI_PTR *PFN_vkWriteAccelerationStructuresPropertiesKHR)(VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo); typedef void (VKAPI_PTR *PFN_vkCmdCopyAccelerationStructureToMemoryKHR)(VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); typedef void (VKAPI_PTR *PFN_vkCmdCopyMemoryToAccelerationStructureKHR)(VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); typedef VkDeviceAddress (VKAPI_PTR *PFN_vkGetAccelerationStructureDeviceAddressKHR)(VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); typedef void (VKAPI_PTR *PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)(VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); typedef void (VKAPI_PTR *PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)(VkDevice device, const VkAccelerationStructureVersionInfoKHR* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); typedef void (VKAPI_PTR *PFN_vkGetAccelerationStructureBuildSizesKHR)(VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateAccelerationStructureKHR( VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure); VKAPI_ATTR void VKAPI_CALL vkDestroyAccelerationStructureKHR( VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator); VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresKHR( VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); VKAPI_ATTR void VKAPI_CALL vkCmdBuildAccelerationStructuresIndirectKHR( VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkDeviceAddress* pIndirectDeviceAddresses, const uint32_t* pIndirectStrides, const uint32_t* const* ppMaxPrimitiveCounts); VKAPI_ATTR VkResult VKAPI_CALL vkBuildAccelerationStructuresKHR( VkDevice device, VkDeferredOperationKHR deferredOperation, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureKHR( VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureInfoKHR* pInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCopyAccelerationStructureToMemoryKHR( VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToAccelerationStructureKHR( VkDevice device, VkDeferredOperationKHR deferredOperation, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); VKAPI_ATTR VkResult VKAPI_CALL vkWriteAccelerationStructuresPropertiesKHR( VkDevice device, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, size_t dataSize, void* pData, size_t stride); VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureKHR( VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureInfoKHR* pInfo); VKAPI_ATTR void VKAPI_CALL vkCmdCopyAccelerationStructureToMemoryKHR( VkCommandBuffer commandBuffer, const VkCopyAccelerationStructureToMemoryInfoKHR* pInfo); VKAPI_ATTR void VKAPI_CALL vkCmdCopyMemoryToAccelerationStructureKHR( VkCommandBuffer commandBuffer, const VkCopyMemoryToAccelerationStructureInfoKHR* pInfo); VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetAccelerationStructureDeviceAddressKHR( VkDevice device, const VkAccelerationStructureDeviceAddressInfoKHR* pInfo); VKAPI_ATTR void VKAPI_CALL vkCmdWriteAccelerationStructuresPropertiesKHR( VkCommandBuffer commandBuffer, uint32_t accelerationStructureCount, const VkAccelerationStructureKHR* pAccelerationStructures, VkQueryType queryType, VkQueryPool queryPool, uint32_t firstQuery); VKAPI_ATTR void VKAPI_CALL vkGetDeviceAccelerationStructureCompatibilityKHR( VkDevice device, const VkAccelerationStructureVersionInfoKHR* pVersionInfo, VkAccelerationStructureCompatibilityKHR* pCompatibility); VKAPI_ATTR void VKAPI_CALL vkGetAccelerationStructureBuildSizesKHR( VkDevice device, VkAccelerationStructureBuildTypeKHR buildType, const VkAccelerationStructureBuildGeometryInfoKHR* pBuildInfo, const uint32_t* pMaxPrimitiveCounts, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); #endif #define VK_KHR_ray_tracing_pipeline 1 #define VK_KHR_RAY_TRACING_PIPELINE_SPEC_VERSION 1 #define VK_KHR_RAY_TRACING_PIPELINE_EXTENSION_NAME "VK_KHR_ray_tracing_pipeline" typedef enum VkShaderGroupShaderKHR { VK_SHADER_GROUP_SHADER_GENERAL_KHR = 0, VK_SHADER_GROUP_SHADER_CLOSEST_HIT_KHR = 1, VK_SHADER_GROUP_SHADER_ANY_HIT_KHR = 2, VK_SHADER_GROUP_SHADER_INTERSECTION_KHR = 3, VK_SHADER_GROUP_SHADER_MAX_ENUM_KHR = 0x7FFFFFFF } VkShaderGroupShaderKHR; typedef struct VkRayTracingShaderGroupCreateInfoKHR { VkStructureType sType; const void* pNext; VkRayTracingShaderGroupTypeKHR type; uint32_t generalShader; uint32_t closestHitShader; uint32_t anyHitShader; uint32_t intersectionShader; const void* pShaderGroupCaptureReplayHandle; } VkRayTracingShaderGroupCreateInfoKHR; typedef struct VkRayTracingPipelineInterfaceCreateInfoKHR { VkStructureType sType; const void* pNext; uint32_t maxPipelineRayPayloadSize; uint32_t maxPipelineRayHitAttributeSize; } VkRayTracingPipelineInterfaceCreateInfoKHR; typedef struct VkRayTracingPipelineCreateInfoKHR { VkStructureType sType; const void* pNext; VkPipelineCreateFlags flags; uint32_t stageCount; const VkPipelineShaderStageCreateInfo* pStages; uint32_t groupCount; const VkRayTracingShaderGroupCreateInfoKHR* pGroups; uint32_t maxPipelineRayRecursionDepth; const VkPipelineLibraryCreateInfoKHR* pLibraryInfo; const VkRayTracingPipelineInterfaceCreateInfoKHR* pLibraryInterface; const VkPipelineDynamicStateCreateInfo* pDynamicState; VkPipelineLayout layout; VkPipeline basePipelineHandle; int32_t basePipelineIndex; } VkRayTracingPipelineCreateInfoKHR; typedef struct VkPhysicalDeviceRayTracingPipelineFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 rayTracingPipeline; VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplay; VkBool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed; VkBool32 rayTracingPipelineTraceRaysIndirect; VkBool32 rayTraversalPrimitiveCulling; } VkPhysicalDeviceRayTracingPipelineFeaturesKHR; typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { VkStructureType sType; void* pNext; uint32_t shaderGroupHandleSize; uint32_t maxRayRecursionDepth; uint32_t maxShaderGroupStride; uint32_t shaderGroupBaseAlignment; uint32_t shaderGroupHandleCaptureReplaySize; uint32_t maxRayDispatchInvocationCount; uint32_t shaderGroupHandleAlignment; uint32_t maxRayHitAttributeSize; } VkPhysicalDeviceRayTracingPipelinePropertiesKHR; typedef struct VkStridedDeviceAddressRegionKHR { VkDeviceAddress deviceAddress; VkDeviceSize stride; VkDeviceSize size; } VkStridedDeviceAddressRegionKHR; typedef struct VkTraceRaysIndirectCommandKHR { uint32_t width; uint32_t height; uint32_t depth; } VkTraceRaysIndirectCommandKHR; typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); typedef VkResult (VKAPI_PTR *PFN_vkCreateRayTracingPipelinesKHR)(VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); typedef VkResult (VKAPI_PTR *PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)(VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); typedef void (VKAPI_PTR *PFN_vkCmdTraceRaysIndirectKHR)(VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress); typedef VkDeviceSize (VKAPI_PTR *PFN_vkGetRayTracingShaderGroupStackSizeKHR)(VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader); typedef void (VKAPI_PTR *PFN_vkCmdSetRayTracingPipelineStackSizeKHR)(VkCommandBuffer commandBuffer, uint32_t pipelineStackSize); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysKHR( VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, uint32_t width, uint32_t height, uint32_t depth); VKAPI_ATTR VkResult VKAPI_CALL vkCreateRayTracingPipelinesKHR( VkDevice device, VkDeferredOperationKHR deferredOperation, VkPipelineCache pipelineCache, uint32_t createInfoCount, const VkRayTracingPipelineCreateInfoKHR* pCreateInfos, const VkAllocationCallbacks* pAllocator, VkPipeline* pPipelines); VKAPI_ATTR VkResult VKAPI_CALL vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( VkDevice device, VkPipeline pipeline, uint32_t firstGroup, uint32_t groupCount, size_t dataSize, void* pData); VKAPI_ATTR void VKAPI_CALL vkCmdTraceRaysIndirectKHR( VkCommandBuffer commandBuffer, const VkStridedDeviceAddressRegionKHR* pRaygenShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pMissShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pHitShaderBindingTable, const VkStridedDeviceAddressRegionKHR* pCallableShaderBindingTable, VkDeviceAddress indirectDeviceAddress); VKAPI_ATTR VkDeviceSize VKAPI_CALL vkGetRayTracingShaderGroupStackSizeKHR( VkDevice device, VkPipeline pipeline, uint32_t group, VkShaderGroupShaderKHR groupShader); VKAPI_ATTR void VKAPI_CALL vkCmdSetRayTracingPipelineStackSizeKHR( VkCommandBuffer commandBuffer, uint32_t pipelineStackSize); #endif #define VK_KHR_ray_query 1 #define VK_KHR_RAY_QUERY_SPEC_VERSION 1 #define VK_KHR_RAY_QUERY_EXTENSION_NAME "VK_KHR_ray_query" typedef struct VkPhysicalDeviceRayQueryFeaturesKHR { VkStructureType sType; void* pNext; VkBool32 rayQuery; } VkPhysicalDeviceRayQueryFeaturesKHR; #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_directfb.h000066400000000000000000000033711415063341600307140ustar00rootroot00000000000000#ifndef VULKAN_DIRECTFB_H_ #define VULKAN_DIRECTFB_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_EXT_directfb_surface 1 #define VK_EXT_DIRECTFB_SURFACE_SPEC_VERSION 1 #define VK_EXT_DIRECTFB_SURFACE_EXTENSION_NAME "VK_EXT_directfb_surface" typedef VkFlags VkDirectFBSurfaceCreateFlagsEXT; typedef struct VkDirectFBSurfaceCreateInfoEXT { VkStructureType sType; const void* pNext; VkDirectFBSurfaceCreateFlagsEXT flags; IDirectFB* dfb; IDirectFBSurface* surface; } VkDirectFBSurfaceCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkCreateDirectFBSurfaceEXT)(VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateDirectFBSurfaceEXT( VkInstance instance, const VkDirectFBSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceDirectFBPresentationSupportEXT( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, IDirectFB* dfb); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_fuchsia.h000066400000000000000000000120421415063341600305470ustar00rootroot00000000000000#ifndef VULKAN_FUCHSIA_H_ #define VULKAN_FUCHSIA_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_FUCHSIA_imagepipe_surface 1 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_SPEC_VERSION 1 #define VK_FUCHSIA_IMAGEPIPE_SURFACE_EXTENSION_NAME "VK_FUCHSIA_imagepipe_surface" typedef VkFlags VkImagePipeSurfaceCreateFlagsFUCHSIA; typedef struct VkImagePipeSurfaceCreateInfoFUCHSIA { VkStructureType sType; const void* pNext; VkImagePipeSurfaceCreateFlagsFUCHSIA flags; zx_handle_t imagePipeHandle; } VkImagePipeSurfaceCreateInfoFUCHSIA; typedef VkResult (VKAPI_PTR *PFN_vkCreateImagePipeSurfaceFUCHSIA)(VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateImagePipeSurfaceFUCHSIA( VkInstance instance, const VkImagePipeSurfaceCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #define VK_FUCHSIA_external_memory 1 #define VK_FUCHSIA_EXTERNAL_MEMORY_SPEC_VERSION 1 #define VK_FUCHSIA_EXTERNAL_MEMORY_EXTENSION_NAME "VK_FUCHSIA_external_memory" typedef struct VkImportMemoryZirconHandleInfoFUCHSIA { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagBits handleType; zx_handle_t handle; } VkImportMemoryZirconHandleInfoFUCHSIA; typedef struct VkMemoryZirconHandlePropertiesFUCHSIA { VkStructureType sType; void* pNext; uint32_t memoryTypeBits; } VkMemoryZirconHandlePropertiesFUCHSIA; typedef struct VkMemoryGetZirconHandleInfoFUCHSIA { VkStructureType sType; const void* pNext; VkDeviceMemory memory; VkExternalMemoryHandleTypeFlagBits handleType; } VkMemoryGetZirconHandleInfoFUCHSIA; typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandleFUCHSIA)(VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandleFUCHSIA( VkDevice device, const VkMemoryGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryZirconHandlePropertiesFUCHSIA( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, zx_handle_t zirconHandle, VkMemoryZirconHandlePropertiesFUCHSIA* pMemoryZirconHandleProperties); #endif #define VK_FUCHSIA_external_semaphore 1 #define VK_FUCHSIA_EXTERNAL_SEMAPHORE_SPEC_VERSION 1 #define VK_FUCHSIA_EXTERNAL_SEMAPHORE_EXTENSION_NAME "VK_FUCHSIA_external_semaphore" typedef struct VkImportSemaphoreZirconHandleInfoFUCHSIA { VkStructureType sType; const void* pNext; VkSemaphore semaphore; VkSemaphoreImportFlags flags; VkExternalSemaphoreHandleTypeFlagBits handleType; zx_handle_t zirconHandle; } VkImportSemaphoreZirconHandleInfoFUCHSIA; typedef struct VkSemaphoreGetZirconHandleInfoFUCHSIA { VkStructureType sType; const void* pNext; VkSemaphore semaphore; VkExternalSemaphoreHandleTypeFlagBits handleType; } VkSemaphoreGetZirconHandleInfoFUCHSIA; typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreZirconHandleFUCHSIA)(VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreZirconHandleFUCHSIA( VkDevice device, const VkImportSemaphoreZirconHandleInfoFUCHSIA* pImportSemaphoreZirconHandleInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA( VkDevice device, const VkSemaphoreGetZirconHandleInfoFUCHSIA* pGetZirconHandleInfo, zx_handle_t* pZirconHandle); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_ggp.h000066400000000000000000000033021415063341600277010ustar00rootroot00000000000000#ifndef VULKAN_GGP_H_ #define VULKAN_GGP_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_GGP_stream_descriptor_surface 1 #define VK_GGP_STREAM_DESCRIPTOR_SURFACE_SPEC_VERSION 1 #define VK_GGP_STREAM_DESCRIPTOR_SURFACE_EXTENSION_NAME "VK_GGP_stream_descriptor_surface" typedef VkFlags VkStreamDescriptorSurfaceCreateFlagsGGP; typedef struct VkStreamDescriptorSurfaceCreateInfoGGP { VkStructureType sType; const void* pNext; VkStreamDescriptorSurfaceCreateFlagsGGP flags; GgpStreamDescriptor streamDescriptor; } VkStreamDescriptorSurfaceCreateInfoGGP; typedef VkResult (VKAPI_PTR *PFN_vkCreateStreamDescriptorSurfaceGGP)(VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateStreamDescriptorSurfaceGGP( VkInstance instance, const VkStreamDescriptorSurfaceCreateInfoGGP* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #define VK_GGP_frame_token 1 #define VK_GGP_FRAME_TOKEN_SPEC_VERSION 1 #define VK_GGP_FRAME_TOKEN_EXTENSION_NAME "VK_GGP_frame_token" typedef struct VkPresentFrameTokenGGP { VkStructureType sType; const void* pNext; GgpFrameToken frameToken; } VkPresentFrameTokenGGP; #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_ios.h000066400000000000000000000023211415063341600277160ustar00rootroot00000000000000#ifndef VULKAN_IOS_H_ #define VULKAN_IOS_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_MVK_ios_surface 1 #define VK_MVK_IOS_SURFACE_SPEC_VERSION 3 #define VK_MVK_IOS_SURFACE_EXTENSION_NAME "VK_MVK_ios_surface" typedef VkFlags VkIOSSurfaceCreateFlagsMVK; typedef struct VkIOSSurfaceCreateInfoMVK { VkStructureType sType; const void* pNext; VkIOSSurfaceCreateFlagsMVK flags; const void* pView; } VkIOSSurfaceCreateInfoMVK; typedef VkResult (VKAPI_PTR *PFN_vkCreateIOSSurfaceMVK)(VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateIOSSurfaceMVK( VkInstance instance, const VkIOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_macos.h000066400000000000000000000023571415063341600302370ustar00rootroot00000000000000#ifndef VULKAN_MACOS_H_ #define VULKAN_MACOS_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_MVK_macos_surface 1 #define VK_MVK_MACOS_SURFACE_SPEC_VERSION 3 #define VK_MVK_MACOS_SURFACE_EXTENSION_NAME "VK_MVK_macos_surface" typedef VkFlags VkMacOSSurfaceCreateFlagsMVK; typedef struct VkMacOSSurfaceCreateInfoMVK { VkStructureType sType; const void* pNext; VkMacOSSurfaceCreateFlagsMVK flags; const void* pView; } VkMacOSSurfaceCreateInfoMVK; typedef VkResult (VKAPI_PTR *PFN_vkCreateMacOSSurfaceMVK)(VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateMacOSSurfaceMVK( VkInstance instance, const VkMacOSSurfaceCreateInfoMVK* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_metal.h000066400000000000000000000024771415063341600302420ustar00rootroot00000000000000#ifndef VULKAN_METAL_H_ #define VULKAN_METAL_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_EXT_metal_surface 1 #ifdef __OBJC__ @class CAMetalLayer; #else typedef void CAMetalLayer; #endif #define VK_EXT_METAL_SURFACE_SPEC_VERSION 1 #define VK_EXT_METAL_SURFACE_EXTENSION_NAME "VK_EXT_metal_surface" typedef VkFlags VkMetalSurfaceCreateFlagsEXT; typedef struct VkMetalSurfaceCreateInfoEXT { VkStructureType sType; const void* pNext; VkMetalSurfaceCreateFlagsEXT flags; const CAMetalLayer* pLayer; } VkMetalSurfaceCreateInfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkCreateMetalSurfaceEXT)(VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateMetalSurfaceEXT( VkInstance instance, const VkMetalSurfaceCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_screen.h000066400000000000000000000033501415063341600304060ustar00rootroot00000000000000#ifndef VULKAN_SCREEN_H_ #define VULKAN_SCREEN_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_QNX_screen_surface 1 #define VK_QNX_SCREEN_SURFACE_SPEC_VERSION 1 #define VK_QNX_SCREEN_SURFACE_EXTENSION_NAME "VK_QNX_screen_surface" typedef VkFlags VkScreenSurfaceCreateFlagsQNX; typedef struct VkScreenSurfaceCreateInfoQNX { VkStructureType sType; const void* pNext; VkScreenSurfaceCreateFlagsQNX flags; struct _screen_context* context; struct _screen_window* window; } VkScreenSurfaceCreateInfoQNX; typedef VkResult (VKAPI_PTR *PFN_vkCreateScreenSurfaceQNX)(VkInstance instance, const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateScreenSurfaceQNX( VkInstance instance, const VkScreenSurfaceCreateInfoQNX* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceScreenPresentationSupportQNX( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct _screen_window* window); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_vi.h000066400000000000000000000022701415063341600275450ustar00rootroot00000000000000#ifndef VULKAN_VI_H_ #define VULKAN_VI_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_NN_vi_surface 1 #define VK_NN_VI_SURFACE_SPEC_VERSION 1 #define VK_NN_VI_SURFACE_EXTENSION_NAME "VK_NN_vi_surface" typedef VkFlags VkViSurfaceCreateFlagsNN; typedef struct VkViSurfaceCreateInfoNN { VkStructureType sType; const void* pNext; VkViSurfaceCreateFlagsNN flags; void* window; } VkViSurfaceCreateInfoNN; typedef VkResult (VKAPI_PTR *PFN_vkCreateViSurfaceNN)(VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateViSurfaceNN( VkInstance instance, const VkViSurfaceCreateInfoNN* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_wayland.h000066400000000000000000000033721415063341600305720ustar00rootroot00000000000000#ifndef VULKAN_WAYLAND_H_ #define VULKAN_WAYLAND_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_KHR_wayland_surface 1 #define VK_KHR_WAYLAND_SURFACE_SPEC_VERSION 6 #define VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME "VK_KHR_wayland_surface" typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; typedef struct VkWaylandSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkWaylandSurfaceCreateFlagsKHR flags; struct wl_display* display; struct wl_surface* surface; } VkWaylandSurfaceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateWaylandSurfaceKHR)(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateWaylandSurfaceKHR( VkInstance instance, const VkWaylandSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWaylandPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, struct wl_display* display); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_win32.h000066400000000000000000000322451415063341600300760ustar00rootroot00000000000000#ifndef VULKAN_WIN32_H_ #define VULKAN_WIN32_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_KHR_win32_surface 1 #define VK_KHR_WIN32_SURFACE_SPEC_VERSION 6 #define VK_KHR_WIN32_SURFACE_EXTENSION_NAME "VK_KHR_win32_surface" typedef VkFlags VkWin32SurfaceCreateFlagsKHR; typedef struct VkWin32SurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkWin32SurfaceCreateFlagsKHR flags; HINSTANCE hinstance; HWND hwnd; } VkWin32SurfaceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateWin32SurfaceKHR)(VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateWin32SurfaceKHR( VkInstance instance, const VkWin32SurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceWin32PresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex); #endif #define VK_KHR_external_memory_win32 1 #define VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_KHR_external_memory_win32" typedef struct VkImportMemoryWin32HandleInfoKHR { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagBits handleType; HANDLE handle; LPCWSTR name; } VkImportMemoryWin32HandleInfoKHR; typedef struct VkExportMemoryWin32HandleInfoKHR { VkStructureType sType; const void* pNext; const SECURITY_ATTRIBUTES* pAttributes; DWORD dwAccess; LPCWSTR name; } VkExportMemoryWin32HandleInfoKHR; typedef struct VkMemoryWin32HandlePropertiesKHR { VkStructureType sType; void* pNext; uint32_t memoryTypeBits; } VkMemoryWin32HandlePropertiesKHR; typedef struct VkMemoryGetWin32HandleInfoKHR { VkStructureType sType; const void* pNext; VkDeviceMemory memory; VkExternalMemoryHandleTypeFlagBits handleType; } VkMemoryGetWin32HandleInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleKHR)(VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandlePropertiesKHR)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleKHR( VkDevice device, const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandlePropertiesKHR( VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, HANDLE handle, VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties); #endif #define VK_KHR_win32_keyed_mutex 1 #define VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION 1 #define VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_KHR_win32_keyed_mutex" typedef struct VkWin32KeyedMutexAcquireReleaseInfoKHR { VkStructureType sType; const void* pNext; uint32_t acquireCount; const VkDeviceMemory* pAcquireSyncs; const uint64_t* pAcquireKeys; const uint32_t* pAcquireTimeouts; uint32_t releaseCount; const VkDeviceMemory* pReleaseSyncs; const uint64_t* pReleaseKeys; } VkWin32KeyedMutexAcquireReleaseInfoKHR; #define VK_KHR_external_semaphore_win32 1 #define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME "VK_KHR_external_semaphore_win32" typedef struct VkImportSemaphoreWin32HandleInfoKHR { VkStructureType sType; const void* pNext; VkSemaphore semaphore; VkSemaphoreImportFlags flags; VkExternalSemaphoreHandleTypeFlagBits handleType; HANDLE handle; LPCWSTR name; } VkImportSemaphoreWin32HandleInfoKHR; typedef struct VkExportSemaphoreWin32HandleInfoKHR { VkStructureType sType; const void* pNext; const SECURITY_ATTRIBUTES* pAttributes; DWORD dwAccess; LPCWSTR name; } VkExportSemaphoreWin32HandleInfoKHR; typedef struct VkD3D12FenceSubmitInfoKHR { VkStructureType sType; const void* pNext; uint32_t waitSemaphoreValuesCount; const uint64_t* pWaitSemaphoreValues; uint32_t signalSemaphoreValuesCount; const uint64_t* pSignalSemaphoreValues; } VkD3D12FenceSubmitInfoKHR; typedef struct VkSemaphoreGetWin32HandleInfoKHR { VkStructureType sType; const void* pNext; VkSemaphore semaphore; VkExternalSemaphoreHandleTypeFlagBits handleType; } VkSemaphoreGetWin32HandleInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkImportSemaphoreWin32HandleKHR)(VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetSemaphoreWin32HandleKHR)(VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkImportSemaphoreWin32HandleKHR( VkDevice device, const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreWin32HandleKHR( VkDevice device, const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); #endif #define VK_KHR_external_fence_win32 1 #define VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION 1 #define VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME "VK_KHR_external_fence_win32" typedef struct VkImportFenceWin32HandleInfoKHR { VkStructureType sType; const void* pNext; VkFence fence; VkFenceImportFlags flags; VkExternalFenceHandleTypeFlagBits handleType; HANDLE handle; LPCWSTR name; } VkImportFenceWin32HandleInfoKHR; typedef struct VkExportFenceWin32HandleInfoKHR { VkStructureType sType; const void* pNext; const SECURITY_ATTRIBUTES* pAttributes; DWORD dwAccess; LPCWSTR name; } VkExportFenceWin32HandleInfoKHR; typedef struct VkFenceGetWin32HandleInfoKHR { VkStructureType sType; const void* pNext; VkFence fence; VkExternalFenceHandleTypeFlagBits handleType; } VkFenceGetWin32HandleInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkImportFenceWin32HandleKHR)(VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetFenceWin32HandleKHR)(VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkImportFenceWin32HandleKHR( VkDevice device, const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo); VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceWin32HandleKHR( VkDevice device, const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo, HANDLE* pHandle); #endif #define VK_NV_external_memory_win32 1 #define VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION 1 #define VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME "VK_NV_external_memory_win32" typedef struct VkImportMemoryWin32HandleInfoNV { VkStructureType sType; const void* pNext; VkExternalMemoryHandleTypeFlagsNV handleType; HANDLE handle; } VkImportMemoryWin32HandleInfoNV; typedef struct VkExportMemoryWin32HandleInfoNV { VkStructureType sType; const void* pNext; const SECURITY_ATTRIBUTES* pAttributes; DWORD dwAccess; } VkExportMemoryWin32HandleInfoNV; typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryWin32HandleNV)(VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryWin32HandleNV( VkDevice device, VkDeviceMemory memory, VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE* pHandle); #endif #define VK_NV_win32_keyed_mutex 1 #define VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION 2 #define VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME "VK_NV_win32_keyed_mutex" typedef struct VkWin32KeyedMutexAcquireReleaseInfoNV { VkStructureType sType; const void* pNext; uint32_t acquireCount; const VkDeviceMemory* pAcquireSyncs; const uint64_t* pAcquireKeys; const uint32_t* pAcquireTimeoutMilliseconds; uint32_t releaseCount; const VkDeviceMemory* pReleaseSyncs; const uint64_t* pReleaseKeys; } VkWin32KeyedMutexAcquireReleaseInfoNV; #define VK_EXT_full_screen_exclusive 1 #define VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION 4 #define VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME "VK_EXT_full_screen_exclusive" typedef enum VkFullScreenExclusiveEXT { VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT = 0, VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT = 1, VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT = 2, VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT = 3, VK_FULL_SCREEN_EXCLUSIVE_MAX_ENUM_EXT = 0x7FFFFFFF } VkFullScreenExclusiveEXT; typedef struct VkSurfaceFullScreenExclusiveInfoEXT { VkStructureType sType; void* pNext; VkFullScreenExclusiveEXT fullScreenExclusive; } VkSurfaceFullScreenExclusiveInfoEXT; typedef struct VkSurfaceCapabilitiesFullScreenExclusiveEXT { VkStructureType sType; void* pNext; VkBool32 fullScreenExclusiveSupported; } VkSurfaceCapabilitiesFullScreenExclusiveEXT; typedef struct VkSurfaceFullScreenExclusiveWin32InfoEXT { VkStructureType sType; const void* pNext; HMONITOR hmonitor; } VkSurfaceFullScreenExclusiveWin32InfoEXT; typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); typedef VkResult (VKAPI_PTR *PFN_vkAcquireFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); typedef VkResult (VKAPI_PTR *PFN_vkReleaseFullScreenExclusiveModeEXT)(VkDevice device, VkSwapchainKHR swapchain); typedef VkResult (VKAPI_PTR *PFN_vkGetDeviceGroupSurfacePresentModes2EXT)(VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfacePresentModes2EXT( VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pPresentModeCount, VkPresentModeKHR* pPresentModes); VKAPI_ATTR VkResult VKAPI_CALL vkAcquireFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain); VKAPI_ATTR VkResult VKAPI_CALL vkReleaseFullScreenExclusiveModeEXT( VkDevice device, VkSwapchainKHR swapchain); VKAPI_ATTR VkResult VKAPI_CALL vkGetDeviceGroupSurfacePresentModes2EXT( VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkDeviceGroupPresentModeFlagsKHR* pModes); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_xcb.h000066400000000000000000000034141415063341600277040ustar00rootroot00000000000000#ifndef VULKAN_XCB_H_ #define VULKAN_XCB_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_KHR_xcb_surface 1 #define VK_KHR_XCB_SURFACE_SPEC_VERSION 6 #define VK_KHR_XCB_SURFACE_EXTENSION_NAME "VK_KHR_xcb_surface" typedef VkFlags VkXcbSurfaceCreateFlagsKHR; typedef struct VkXcbSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkXcbSurfaceCreateFlagsKHR flags; xcb_connection_t* connection; xcb_window_t window; } VkXcbSurfaceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateXcbSurfaceKHR)(VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateXcbSurfaceKHR( VkInstance instance, const VkXcbSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXcbPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, xcb_connection_t* connection, xcb_visualid_t visual_id); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_xlib.h000066400000000000000000000033701415063341600300670ustar00rootroot00000000000000#ifndef VULKAN_XLIB_H_ #define VULKAN_XLIB_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_KHR_xlib_surface 1 #define VK_KHR_XLIB_SURFACE_SPEC_VERSION 6 #define VK_KHR_XLIB_SURFACE_EXTENSION_NAME "VK_KHR_xlib_surface" typedef VkFlags VkXlibSurfaceCreateFlagsKHR; typedef struct VkXlibSurfaceCreateInfoKHR { VkStructureType sType; const void* pNext; VkXlibSurfaceCreateFlagsKHR flags; Display* dpy; Window window; } VkXlibSurfaceCreateInfoKHR; typedef VkResult (VKAPI_PTR *PFN_vkCreateXlibSurfaceKHR)(VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); typedef VkBool32 (VKAPI_PTR *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCreateXlibSurfaceKHR( VkInstance instance, const VkXlibSurfaceCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkSurfaceKHR* pSurface); VKAPI_ATTR VkBool32 VKAPI_CALL vkGetPhysicalDeviceXlibPresentationSupportKHR( VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, Display* dpy, VisualID visualID); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan-headers/include/vulkan/vulkan_xlib_xrandr.h000066400000000000000000000024561415063341600314510ustar00rootroot00000000000000#ifndef VULKAN_XLIB_XRANDR_H_ #define VULKAN_XLIB_XRANDR_H_ 1 /* ** Copyright 2015-2021 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ /* ** This header is generated from the Khronos Vulkan XML API Registry. ** */ #ifdef __cplusplus extern "C" { #endif #define VK_EXT_acquire_xlib_display 1 #define VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION 1 #define VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME "VK_EXT_acquire_xlib_display" typedef VkResult (VKAPI_PTR *PFN_vkAcquireXlibDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display); typedef VkResult (VKAPI_PTR *PFN_vkGetRandROutputDisplayEXT)(VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkAcquireXlibDisplayEXT( VkPhysicalDevice physicalDevice, Display* dpy, VkDisplayKHR display); VKAPI_ATTR VkResult VKAPI_CALL vkGetRandROutputDisplayEXT( VkPhysicalDevice physicalDevice, Display* dpy, RROutput rrOutput, VkDisplayKHR* pDisplay); #endif #ifdef __cplusplus } #endif #endif ares-126/ares/n64/vulkan/parallel-rdp/vulkan/000077500000000000000000000000001415063341600210415ustar00rootroot00000000000000ares-126/ares/n64/vulkan/parallel-rdp/vulkan/buffer.cpp000066400000000000000000000042371415063341600230240ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "buffer.hpp" #include "device.hpp" namespace Vulkan { Buffer::Buffer(Device *device_, VkBuffer buffer_, const DeviceAllocation &alloc_, const BufferCreateInfo &info_) : Cookie(device_) , device(device_) , buffer(buffer_) , alloc(alloc_) , info(info_) { } Buffer::~Buffer() { if (internal_sync) { device->destroy_buffer_nolock(buffer); device->free_memory_nolock(alloc); } else { device->destroy_buffer(buffer); device->free_memory(alloc); } } void BufferDeleter::operator()(Buffer *buffer) { buffer->device->handle_pool.buffers.free(buffer); } BufferView::BufferView(Device *device_, VkBufferView view_, const BufferViewCreateInfo &create_info_) : Cookie(device_) , device(device_) , view(view_) , info(create_info_) { } BufferView::~BufferView() { if (view != VK_NULL_HANDLE) { if (internal_sync) device->destroy_buffer_view_nolock(view); else device->destroy_buffer_view(view); } } void BufferViewDeleter::operator()(BufferView *view) { view->device->handle_pool.buffer_views.free(view); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/buffer.hpp000066400000000000000000000124061415063341600230260ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "cookie.hpp" #include "vulkan_common.hpp" #include "memory_allocator.hpp" namespace Vulkan { class Device; static inline VkPipelineStageFlags buffer_usage_to_possible_stages(VkBufferUsageFlags usage) { VkPipelineStageFlags flags = 0; if (usage & (VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT)) flags |= VK_PIPELINE_STAGE_TRANSFER_BIT; if (usage & (VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT)) flags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT; if (usage & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) flags |= VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT; if (usage & (VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)) flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; if (usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; return flags; } static inline VkAccessFlags buffer_usage_to_possible_access(VkBufferUsageFlags usage) { VkAccessFlags flags = 0; if (usage & (VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT)) flags |= VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; if (usage & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT) flags |= VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT; if (usage & VK_BUFFER_USAGE_INDEX_BUFFER_BIT) flags |= VK_ACCESS_INDEX_READ_BIT; if (usage & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) flags |= VK_ACCESS_INDIRECT_COMMAND_READ_BIT; if (usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) flags |= VK_ACCESS_UNIFORM_READ_BIT; if (usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) flags |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; return flags; } enum class BufferDomain { Device, // Device local. Probably not visible from CPU. LinkedDeviceHost, // On desktop, directly mapped VRAM over PCI. LinkedDeviceHostPreferDevice, // Prefer device local of host visible. Host, // Host-only, needs to be synced to GPU. Might be device local as well on iGPUs. CachedHost, CachedCoherentHostPreferCoherent, // Aim for both cached and coherent, but prefer COHERENT CachedCoherentHostPreferCached, // Aim for both cached and coherent, but prefer CACHED }; enum BufferMiscFlagBits { BUFFER_MISC_ZERO_INITIALIZE_BIT = 1 << 0 }; using BufferMiscFlags = uint32_t; struct BufferCreateInfo { BufferDomain domain = BufferDomain::Device; VkDeviceSize size = 0; VkBufferUsageFlags usage = 0; BufferMiscFlags misc = 0; }; class Buffer; struct BufferDeleter { void operator()(Buffer *buffer); }; class BufferView; struct BufferViewDeleter { void operator()(BufferView *view); }; class Buffer : public Util::IntrusivePtrEnabled, public Cookie, public InternalSyncEnabled { public: friend struct BufferDeleter; ~Buffer(); VkBuffer get_buffer() const { return buffer; } const BufferCreateInfo &get_create_info() const { return info; } DeviceAllocation &get_allocation() { return alloc; } const DeviceAllocation &get_allocation() const { return alloc; } private: friend class Util::ObjectPool; Buffer(Device *device, VkBuffer buffer, const DeviceAllocation &alloc, const BufferCreateInfo &info); Device *device; VkBuffer buffer; DeviceAllocation alloc; BufferCreateInfo info; }; using BufferHandle = Util::IntrusivePtr; struct BufferViewCreateInfo { const Buffer *buffer; VkFormat format; VkDeviceSize offset; VkDeviceSize range; }; class BufferView : public Util::IntrusivePtrEnabled, public Cookie, public InternalSyncEnabled { public: friend struct BufferViewDeleter; ~BufferView(); VkBufferView get_view() const { return view; } const BufferViewCreateInfo &get_create_info() { return info; } const Buffer &get_buffer() const { return *info.buffer; } private: friend class Util::ObjectPool; BufferView(Device *device, VkBufferView view, const BufferViewCreateInfo &info); Device *device; VkBufferView view; BufferViewCreateInfo info; }; using BufferViewHandle = Util::IntrusivePtr; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/buffer_pool.cpp000066400000000000000000000076601415063341600240600ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "buffer_pool.hpp" #include "device.hpp" #include using namespace std; namespace Vulkan { void BufferPool::init(Device *device_, VkDeviceSize block_size_, VkDeviceSize alignment_, VkBufferUsageFlags usage_, bool need_device_local_) { device = device_; block_size = block_size_; alignment = alignment_; usage = usage_; need_device_local = need_device_local_; } void BufferPool::set_spill_region_size(VkDeviceSize spill_size_) { spill_size = spill_size_; } void BufferPool::set_max_retained_blocks(size_t max_blocks) { max_retained_blocks = max_blocks; } BufferBlock::~BufferBlock() { } void BufferPool::reset() { blocks.clear(); } BufferBlock BufferPool::allocate_block(VkDeviceSize size) { BufferDomain ideal_domain = need_device_local ? BufferDomain::Device : ((usage & VK_BUFFER_USAGE_TRANSFER_SRC_BIT) != 0) ? BufferDomain::Host : BufferDomain::LinkedDeviceHost; VkBufferUsageFlags extra_usage = ideal_domain == BufferDomain::Device ? VK_BUFFER_USAGE_TRANSFER_DST_BIT : 0; BufferBlock block; BufferCreateInfo info; info.domain = ideal_domain; info.size = size; info.usage = usage | extra_usage; block.gpu = device->create_buffer(info, nullptr); device->set_name(*block.gpu, "chain-allocated-block-gpu"); block.gpu->set_internal_sync_object(); // Try to map it, will fail unless the memory is host visible. block.mapped = static_cast(device->map_host_buffer(*block.gpu, MEMORY_ACCESS_WRITE_BIT)); if (!block.mapped) { // Fall back to host memory, and remember to sync to gpu on submission time using DMA queue. :) BufferCreateInfo cpu_info; cpu_info.domain = BufferDomain::Host; cpu_info.size = size; cpu_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; block.cpu = device->create_buffer(cpu_info, nullptr); block.cpu->set_internal_sync_object(); device->set_name(*block.cpu, "chain-allocated-block-cpu"); block.mapped = static_cast(device->map_host_buffer(*block.cpu, MEMORY_ACCESS_WRITE_BIT)); } else block.cpu = block.gpu; block.offset = 0; block.alignment = alignment; block.size = size; block.spill_size = spill_size; return block; } BufferBlock BufferPool::request_block(VkDeviceSize minimum_size) { if ((minimum_size > block_size) || blocks.empty()) { return allocate_block(max(block_size, minimum_size)); } else { auto back = move(blocks.back()); blocks.pop_back(); back.mapped = static_cast(device->map_host_buffer(*back.cpu, MEMORY_ACCESS_WRITE_BIT)); back.offset = 0; return back; } } void BufferPool::recycle_block(BufferBlock &block) { VK_ASSERT(block.size == block_size); if (blocks.size() < max_retained_blocks) blocks.push_back(move(block)); else block = {}; } BufferPool::~BufferPool() { VK_ASSERT(blocks.empty()); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/buffer_pool.hpp000066400000000000000000000057251415063341600240650ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include "intrusive.hpp" #include #include namespace Vulkan { class Device; class Buffer; struct BufferBlockAllocation { uint8_t *host; VkDeviceSize offset; VkDeviceSize padded_size; }; struct BufferBlock { ~BufferBlock(); Util::IntrusivePtr gpu; Util::IntrusivePtr cpu; VkDeviceSize offset = 0; VkDeviceSize alignment = 0; VkDeviceSize size = 0; VkDeviceSize spill_size = 0; uint8_t *mapped = nullptr; BufferBlockAllocation allocate(VkDeviceSize allocate_size) { auto aligned_offset = (offset + alignment - 1) & ~(alignment - 1); if (aligned_offset + allocate_size <= size) { auto *ret = mapped + aligned_offset; offset = aligned_offset + allocate_size; VkDeviceSize padded_size = std::max(allocate_size, spill_size); padded_size = std::min(padded_size, size - aligned_offset); return { ret, aligned_offset, padded_size }; } else return { nullptr, 0, 0 }; } }; class BufferPool { public: ~BufferPool(); void init(Device *device, VkDeviceSize block_size, VkDeviceSize alignment, VkBufferUsageFlags usage, bool need_device_local); void reset(); // Used for allocating UBOs, where we want to specify a fixed size for range, // and we need to make sure we don't allocate beyond the block. void set_spill_region_size(VkDeviceSize spill_size); void set_max_retained_blocks(size_t max_blocks); VkDeviceSize get_block_size() const { return block_size; } BufferBlock request_block(VkDeviceSize minimum_size); void recycle_block(BufferBlock &block); private: Device *device = nullptr; VkDeviceSize block_size = 0; VkDeviceSize alignment = 0; VkDeviceSize spill_size = 0; VkBufferUsageFlags usage = 0; size_t max_retained_blocks = 0; std::vector blocks; BufferBlock allocate_block(VkDeviceSize size); bool need_device_local = false; }; }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/command_buffer.cpp000066400000000000000000002757061415063341600245350ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "command_buffer.hpp" #include "device.hpp" #include "format.hpp" #include "thread_id.hpp" #include "vulkan_prerotate.hpp" #include //#define FULL_BACKTRACE_CHECKPOINTS #ifdef FULL_BACKTRACE_CHECKPOINTS #ifdef __linux__ #include #endif #include #endif using namespace std; using namespace Util; namespace Vulkan { CommandBuffer::CommandBuffer(Device *device_, VkCommandBuffer cmd_, VkPipelineCache cache, Type type_) : device(device_) , table(device_->get_device_table()) , cmd(cmd_) , type(type_) { pipeline_state.cache = cache; begin_compute(); set_opaque_state(); memset(&pipeline_state.static_state, 0, sizeof(pipeline_state.static_state)); memset(&bindings, 0, sizeof(bindings)); // Set up extra state which PSO creation depends on implicitly. // This needs to affect hashing to make Fossilize path behave as expected. auto &features = device->get_device_features(); pipeline_state.subgroup_size_tag = (features.subgroup_size_control_properties.minSubgroupSize << 0) | (features.subgroup_size_control_properties.maxSubgroupSize << 8); } CommandBuffer::~CommandBuffer() { VK_ASSERT(vbo_block.mapped == nullptr); VK_ASSERT(ibo_block.mapped == nullptr); VK_ASSERT(ubo_block.mapped == nullptr); VK_ASSERT(staging_block.mapped == nullptr); } void CommandBuffer::fill_buffer(const Buffer &dst, uint32_t value) { fill_buffer(dst, value, 0, VK_WHOLE_SIZE); } void CommandBuffer::fill_buffer(const Buffer &dst, uint32_t value, VkDeviceSize offset, VkDeviceSize size) { table.vkCmdFillBuffer(cmd, dst.get_buffer(), offset, size, value); } void CommandBuffer::copy_buffer(const Buffer &dst, VkDeviceSize dst_offset, const Buffer &src, VkDeviceSize src_offset, VkDeviceSize size) { const VkBufferCopy region = { src_offset, dst_offset, size, }; table.vkCmdCopyBuffer(cmd, src.get_buffer(), dst.get_buffer(), 1, ®ion); } void CommandBuffer::copy_buffer(const Buffer &dst, const Buffer &src) { VK_ASSERT(dst.get_create_info().size == src.get_create_info().size); copy_buffer(dst, 0, src, 0, dst.get_create_info().size); } void CommandBuffer::copy_buffer(const Buffer &dst, const Buffer &src, const VkBufferCopy *copies, size_t count) { table.vkCmdCopyBuffer(cmd, src.get_buffer(), dst.get_buffer(), count, copies); } void CommandBuffer::copy_image(const Vulkan::Image &dst, const Vulkan::Image &src, const VkOffset3D &dst_offset, const VkOffset3D &src_offset, const VkExtent3D &extent, const VkImageSubresourceLayers &dst_subresource, const VkImageSubresourceLayers &src_subresource) { VkImageCopy region = {}; region.dstOffset = dst_offset; region.srcOffset = src_offset; region.extent = extent; region.srcSubresource = src_subresource; region.dstSubresource = dst_subresource; table.vkCmdCopyImage(cmd, src.get_image(), src.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), dst.get_image(), dst.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), 1, ®ion); } void CommandBuffer::copy_image(const Image &dst, const Image &src) { uint32_t levels = src.get_create_info().levels; VK_ASSERT(src.get_create_info().levels == dst.get_create_info().levels); VK_ASSERT(src.get_create_info().width == dst.get_create_info().width); VK_ASSERT(src.get_create_info().height == dst.get_create_info().height); VK_ASSERT(src.get_create_info().depth == dst.get_create_info().depth); VK_ASSERT(src.get_create_info().type == dst.get_create_info().type); VK_ASSERT(src.get_create_info().layers == dst.get_create_info().layers); VK_ASSERT(src.get_create_info().levels == dst.get_create_info().levels); VkImageCopy regions[32] = {}; for (uint32_t i = 0; i < levels; i++) { auto ®ion = regions[i]; region.extent.width = src.get_create_info().width; region.extent.height = src.get_create_info().height; region.extent.depth = src.get_create_info().depth; region.srcSubresource.aspectMask = format_to_aspect_mask(src.get_format()); region.srcSubresource.layerCount = src.get_create_info().layers; region.dstSubresource.aspectMask = format_to_aspect_mask(dst.get_format()); region.dstSubresource.layerCount = dst.get_create_info().layers; region.srcSubresource.mipLevel = i; region.dstSubresource.mipLevel = i; VK_ASSERT(region.srcSubresource.aspectMask == region.dstSubresource.aspectMask); } table.vkCmdCopyImage(cmd, src.get_image(), src.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), dst.get_image(), dst.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), levels, regions); } void CommandBuffer::copy_buffer_to_image(const Image &image, const Buffer &buffer, unsigned num_blits, const VkBufferImageCopy *blits) { table.vkCmdCopyBufferToImage(cmd, buffer.get_buffer(), image.get_image(), image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), num_blits, blits); } void CommandBuffer::copy_image_to_buffer(const Buffer &buffer, const Image &image, unsigned num_blits, const VkBufferImageCopy *blits) { table.vkCmdCopyImageToBuffer(cmd, image.get_image(), image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), buffer.get_buffer(), num_blits, blits); } void CommandBuffer::copy_buffer_to_image(const Image &image, const Buffer &src, VkDeviceSize buffer_offset, const VkOffset3D &offset, const VkExtent3D &extent, unsigned row_length, unsigned slice_height, const VkImageSubresourceLayers &subresource) { const VkBufferImageCopy region = { buffer_offset, row_length, slice_height, subresource, offset, extent, }; table.vkCmdCopyBufferToImage(cmd, src.get_buffer(), image.get_image(), image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), 1, ®ion); } void CommandBuffer::copy_image_to_buffer(const Buffer &buffer, const Image &image, VkDeviceSize buffer_offset, const VkOffset3D &offset, const VkExtent3D &extent, unsigned row_length, unsigned slice_height, const VkImageSubresourceLayers &subresource) { const VkBufferImageCopy region = { buffer_offset, row_length, slice_height, subresource, offset, extent, }; table.vkCmdCopyImageToBuffer(cmd, image.get_image(), image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), buffer.get_buffer(), 1, ®ion); } void CommandBuffer::clear_image(const Image &image, const VkClearValue &value) { auto aspect = format_to_aspect_mask(image.get_format()); clear_image(image, value, aspect); } void CommandBuffer::clear_image(const Image &image, const VkClearValue &value, VkImageAspectFlags aspect) { VK_ASSERT(!framebuffer); VK_ASSERT(!actual_render_pass); VkImageSubresourceRange range = {}; range.aspectMask = aspect; range.baseArrayLayer = 0; range.baseMipLevel = 0; range.levelCount = image.get_create_info().levels; range.layerCount = image.get_create_info().layers; if (aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { table.vkCmdClearDepthStencilImage(cmd, image.get_image(), image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), &value.depthStencil, 1, &range); } else { table.vkCmdClearColorImage(cmd, image.get_image(), image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), &value.color, 1, &range); } } void CommandBuffer::clear_quad(unsigned attachment, const VkClearRect &rect, const VkClearValue &value, VkImageAspectFlags aspect) { VK_ASSERT(framebuffer); VK_ASSERT(actual_render_pass); VkClearAttachment att = {}; att.clearValue = value; att.colorAttachment = attachment; att.aspectMask = aspect; table.vkCmdClearAttachments(cmd, 1, &att, 1, &rect); } void CommandBuffer::clear_quad(const VkClearRect &rect, const VkClearAttachment *attachments, unsigned num_attachments) { VK_ASSERT(framebuffer); VK_ASSERT(actual_render_pass); table.vkCmdClearAttachments(cmd, num_attachments, attachments, 1, &rect); } void CommandBuffer::full_barrier() { VK_ASSERT(!actual_render_pass); VK_ASSERT(!framebuffer); barrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT); } void CommandBuffer::pixel_barrier() { VK_ASSERT(actual_render_pass); VK_ASSERT(framebuffer); VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER }; barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; barrier.dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; table.vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, VK_DEPENDENCY_BY_REGION_BIT, 1, &barrier, 0, nullptr, 0, nullptr); } static inline void fixup_src_stage(VkPipelineStageFlags &src_stages, bool fixup) { // ALL_GRAPHICS_BIT waits for vertex as well which causes performance issues on some drivers. // It shouldn't matter, but hey. // // We aren't using vertex with side-effects on relevant hardware so dropping VERTEX_SHADER_BIT is fine. if ((src_stages & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT) != 0 && fixup) { src_stages &= ~VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT; src_stages |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; } } void CommandBuffer::barrier(VkPipelineStageFlags src_stages, VkAccessFlags src_access, VkPipelineStageFlags dst_stages, VkAccessFlags dst_access) { VK_ASSERT(!actual_render_pass); VK_ASSERT(!framebuffer); VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER }; barrier.srcAccessMask = src_access; barrier.dstAccessMask = dst_access; fixup_src_stage(src_stages, device->get_workarounds().optimize_all_graphics_barrier); table.vkCmdPipelineBarrier(cmd, src_stages, dst_stages, 0, 1, &barrier, 0, nullptr, 0, nullptr); } void CommandBuffer::barrier(VkPipelineStageFlags src_stages, VkPipelineStageFlags dst_stages, unsigned barriers, const VkMemoryBarrier *globals, unsigned buffer_barriers, const VkBufferMemoryBarrier *buffers, unsigned image_barriers, const VkImageMemoryBarrier *images) { VK_ASSERT(!actual_render_pass); VK_ASSERT(!framebuffer); fixup_src_stage(src_stages, device->get_workarounds().optimize_all_graphics_barrier); table.vkCmdPipelineBarrier(cmd, src_stages, dst_stages, 0, barriers, globals, buffer_barriers, buffers, image_barriers, images); } void CommandBuffer::buffer_barrier(const Buffer &buffer, VkPipelineStageFlags src_stages, VkAccessFlags src_access, VkPipelineStageFlags dst_stages, VkAccessFlags dst_access) { VK_ASSERT(!actual_render_pass); VK_ASSERT(!framebuffer); VkBufferMemoryBarrier barrier = { VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER }; barrier.srcAccessMask = src_access; barrier.dstAccessMask = dst_access; barrier.buffer = buffer.get_buffer(); barrier.offset = 0; barrier.size = buffer.get_create_info().size; fixup_src_stage(src_stages, device->get_workarounds().optimize_all_graphics_barrier); table.vkCmdPipelineBarrier(cmd, src_stages, dst_stages, 0, 0, nullptr, 1, &barrier, 0, nullptr); } void CommandBuffer::image_barrier(const Image &image, VkImageLayout old_layout, VkImageLayout new_layout, VkPipelineStageFlags src_stages, VkAccessFlags src_access, VkPipelineStageFlags dst_stages, VkAccessFlags dst_access) { VK_ASSERT(!actual_render_pass); VK_ASSERT(!framebuffer); VK_ASSERT(image.get_create_info().domain != ImageDomain::Transient); VkImageMemoryBarrier barrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER }; barrier.srcAccessMask = src_access; barrier.dstAccessMask = dst_access; barrier.oldLayout = old_layout; barrier.newLayout = new_layout; barrier.image = image.get_image(); barrier.subresourceRange.aspectMask = format_to_aspect_mask(image.get_create_info().format); barrier.subresourceRange.levelCount = image.get_create_info().levels; barrier.subresourceRange.layerCount = image.get_create_info().layers; barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; fixup_src_stage(src_stages, device->get_workarounds().optimize_all_graphics_barrier); table.vkCmdPipelineBarrier(cmd, src_stages, dst_stages, 0, 0, nullptr, 0, nullptr, 1, &barrier); } void CommandBuffer::barrier_prepare_generate_mipmap(const Image &image, VkImageLayout base_level_layout, VkPipelineStageFlags src_stage, VkAccessFlags src_access, bool need_top_level_barrier) { auto &create_info = image.get_create_info(); VkImageMemoryBarrier barriers[2] = {}; VK_ASSERT(create_info.levels > 1); (void)create_info; for (unsigned i = 0; i < 2; i++) { barriers[i].sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; barriers[i].image = image.get_image(); barriers[i].subresourceRange.aspectMask = format_to_aspect_mask(image.get_format()); barriers[i].subresourceRange.layerCount = image.get_create_info().layers; barriers[i].srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; barriers[i].dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; if (i == 0) { barriers[i].oldLayout = base_level_layout; barriers[i].newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; barriers[i].srcAccessMask = src_access; barriers[i].dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; barriers[i].subresourceRange.baseMipLevel = 0; barriers[i].subresourceRange.levelCount = 1; } else { barriers[i].oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; barriers[i].newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; barriers[i].srcAccessMask = 0; barriers[i].dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; barriers[i].subresourceRange.baseMipLevel = 1; barriers[i].subresourceRange.levelCount = image.get_create_info().levels - 1; } } barrier(src_stage, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, nullptr, 0, nullptr, need_top_level_barrier ? 2 : 1, need_top_level_barrier ? barriers : barriers + 1); } void CommandBuffer::generate_mipmap(const Image &image) { auto &create_info = image.get_create_info(); VkOffset3D size = { int(create_info.width), int(create_info.height), int(create_info.depth) }; const VkOffset3D origin = { 0, 0, 0 }; VK_ASSERT(image.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL) == VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); VkImageMemoryBarrier b = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER }; b.image = image.get_image(); b.subresourceRange.levelCount = 1; b.subresourceRange.layerCount = image.get_create_info().layers; b.subresourceRange.aspectMask = format_to_aspect_mask(image.get_format()); b.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; b.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; b.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; b.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; b.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; b.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED; for (unsigned i = 1; i < create_info.levels; i++) { VkOffset3D src_size = size; size.x = max(size.x >> 1, 1); size.y = max(size.y >> 1, 1); size.z = max(size.z >> 1, 1); blit_image(image, image, origin, size, origin, src_size, i, i - 1, 0, 0, create_info.layers, VK_FILTER_LINEAR); b.subresourceRange.baseMipLevel = i; barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, nullptr, 0, nullptr, 1, &b); } } void CommandBuffer::blit_image(const Image &dst, const Image &src, const VkOffset3D &dst_offset, const VkOffset3D &dst_extent, const VkOffset3D &src_offset, const VkOffset3D &src_extent, unsigned dst_level, unsigned src_level, unsigned dst_base_layer, unsigned src_base_layer, unsigned num_layers, VkFilter filter) { const auto add_offset = [](const VkOffset3D &a, const VkOffset3D &b) -> VkOffset3D { return { a.x + b.x, a.y + b.y, a.z + b.z }; }; #if 0 const VkImageBlit blit = { { format_to_aspect_mask(src.get_create_info().format), src_level, src_base_layer, num_layers }, { src_offset, add_offset(src_offset, src_extent) }, { format_to_aspect_mask(dst.get_create_info().format), dst_level, dst_base_layer, num_layers }, { dst_offset, add_offset(dst_offset, dst_extent) }, }; table.vkCmdBlitImage(cmd, src.get_image(), src.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), dst.get_image(), dst.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), 1, &blit, filter); #else // RADV workaround. for (unsigned i = 0; i < num_layers; i++) { const VkImageBlit blit = { { format_to_aspect_mask(src.get_create_info().format), src_level, src_base_layer + i, 1 }, { src_offset, add_offset(src_offset, src_extent) }, { format_to_aspect_mask(dst.get_create_info().format), dst_level, dst_base_layer + i, 1 }, { dst_offset, add_offset(dst_offset, dst_extent) }, }; table.vkCmdBlitImage(cmd, src.get_image(), src.get_layout(VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL), dst.get_image(), dst.get_layout(VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL), 1, &blit, filter); } #endif } void CommandBuffer::begin_context() { dirty = ~0u; dirty_sets = ~0u; dirty_vbos = ~0u; current_pipeline = VK_NULL_HANDLE; current_pipeline_layout = VK_NULL_HANDLE; current_layout = nullptr; pipeline_state.program = nullptr; pipeline_state.potential_static_state.spec_constant_mask = 0; memset(bindings.cookies, 0, sizeof(bindings.cookies)); memset(bindings.secondary_cookies, 0, sizeof(bindings.secondary_cookies)); memset(&index_state, 0, sizeof(index_state)); memset(vbo.buffers, 0, sizeof(vbo.buffers)); if (debug_channel_buffer) set_storage_buffer(VULKAN_NUM_DESCRIPTOR_SETS - 1, VULKAN_NUM_BINDINGS - 1, *debug_channel_buffer); } void CommandBuffer::begin_compute() { is_compute = true; begin_context(); } void CommandBuffer::begin_graphics() { is_compute = false; begin_context(); // Vertex shaders which support prerotate are expected to include inc/prerotate.h and // call prerotate_fixup_clip_xy(). if (current_framebuffer_surface_transform != VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) set_surface_transform_specialization_constants(0); } void CommandBuffer::init_viewport_scissor(const RenderPassInfo &info, const Framebuffer *fb) { VkRect2D rect = info.render_area; uint32_t fb_width = fb->get_width(); uint32_t fb_height = fb->get_height(); rect.offset.x = min(fb_width, uint32_t(rect.offset.x)); rect.offset.y = min(fb_height, uint32_t(rect.offset.y)); rect.extent.width = min(fb_width - rect.offset.x, rect.extent.width); rect.extent.height = min(fb_height - rect.offset.y, rect.extent.height); if (surface_transform_swaps_xy(current_framebuffer_surface_transform)) rect2d_swap_xy(rect); viewport = { float(rect.offset.x), float(rect.offset.y), float(rect.extent.width), float(rect.extent.height), 0.0f, 1.0f }; scissor = rect; } CommandBufferHandle CommandBuffer::request_secondary_command_buffer(Device &device, const RenderPassInfo &info, unsigned thread_index, unsigned subpass) { auto *fb = &device.request_framebuffer(info); auto cmd = device.request_secondary_command_buffer_for_thread(thread_index, fb, subpass); cmd->init_surface_transform(info); cmd->begin_graphics(); cmd->framebuffer = fb; cmd->pipeline_state.compatible_render_pass = &fb->get_compatible_render_pass(); cmd->actual_render_pass = &device.request_render_pass(info, false); unsigned i; for (i = 0; i < info.num_color_attachments; i++) cmd->framebuffer_attachments[i] = info.color_attachments[i]; if (info.depth_stencil) cmd->framebuffer_attachments[i++] = info.depth_stencil; cmd->init_viewport_scissor(info, fb); cmd->pipeline_state.subpass_index = subpass; cmd->current_contents = VK_SUBPASS_CONTENTS_INLINE; return cmd; } CommandBufferHandle CommandBuffer::request_secondary_command_buffer(unsigned thread_index_, unsigned subpass_) { VK_ASSERT(framebuffer); VK_ASSERT(!is_secondary); auto secondary_cmd = device->request_secondary_command_buffer_for_thread(thread_index_, framebuffer, subpass_); secondary_cmd->begin_graphics(); secondary_cmd->framebuffer = framebuffer; secondary_cmd->pipeline_state.compatible_render_pass = pipeline_state.compatible_render_pass; secondary_cmd->actual_render_pass = actual_render_pass; memcpy(secondary_cmd->framebuffer_attachments, framebuffer_attachments, sizeof(framebuffer_attachments)); secondary_cmd->pipeline_state.subpass_index = subpass_; secondary_cmd->viewport = viewport; secondary_cmd->scissor = scissor; secondary_cmd->current_contents = VK_SUBPASS_CONTENTS_INLINE; return secondary_cmd; } void CommandBuffer::submit_secondary(CommandBufferHandle secondary) { VK_ASSERT(!is_secondary); VK_ASSERT(secondary->is_secondary); VK_ASSERT(pipeline_state.subpass_index == secondary->pipeline_state.subpass_index); VK_ASSERT(current_contents == VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS); device->submit_secondary(*this, *secondary); } void CommandBuffer::next_subpass(VkSubpassContents contents) { VK_ASSERT(framebuffer); VK_ASSERT(pipeline_state.compatible_render_pass); VK_ASSERT(actual_render_pass); pipeline_state.subpass_index++; VK_ASSERT(pipeline_state.subpass_index < actual_render_pass->get_num_subpasses()); table.vkCmdNextSubpass(cmd, contents); current_contents = contents; begin_graphics(); } void CommandBuffer::set_surface_transform_specialization_constants(unsigned base_index) { float transform[4]; set_specialization_constant_mask(0xf << base_index); build_prerotate_matrix_2x2(current_framebuffer_surface_transform, transform); for (unsigned i = 0; i < 4; i++) set_specialization_constant(base_index + i, transform[i]); } void CommandBuffer::init_surface_transform(const RenderPassInfo &info) { // Validate that all prerotate state matches, unless the attachments are transient, since we don't really care, // and it gets messy to forward rotation state to them. VkSurfaceTransformFlagBitsKHR prerorate = VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR; for (unsigned i = 0; i < info.num_color_attachments; i++) { auto usage = info.color_attachments[i]->get_image().get_create_info().usage; if ((usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) == 0) { auto image_prerotate = info.color_attachments[i]->get_image().get_surface_transform(); if (prerorate == VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR) { prerorate = image_prerotate; } else if (prerorate != image_prerotate) { LOGE("Mismatch in prerotate state for color attachment %u! (%u != %u)\n", i, unsigned(prerorate), unsigned(image_prerotate)); } } } if (prerorate != VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR && info.depth_stencil) { auto usage = info.depth_stencil->get_image().get_create_info().usage; if ((usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) == 0) { auto image_prerotate = info.depth_stencil->get_image().get_surface_transform(); if (prerorate != image_prerotate) LOGE("Mismatch in prerotate state for depth-stencil! (%u != %u)\n", unsigned(prerorate), unsigned(image_prerotate)); } } if (prerorate == VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR) prerorate = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; current_framebuffer_surface_transform = prerorate; } void CommandBuffer::begin_render_pass(const RenderPassInfo &info, VkSubpassContents contents) { VK_ASSERT(!framebuffer); VK_ASSERT(!pipeline_state.compatible_render_pass); VK_ASSERT(!actual_render_pass); framebuffer = &device->request_framebuffer(info); init_surface_transform(info); pipeline_state.compatible_render_pass = &framebuffer->get_compatible_render_pass(); actual_render_pass = &device->request_render_pass(info, false); pipeline_state.subpass_index = 0; memset(framebuffer_attachments, 0, sizeof(framebuffer_attachments)); unsigned att; for (att = 0; att < info.num_color_attachments; att++) framebuffer_attachments[att] = info.color_attachments[att]; if (info.depth_stencil) framebuffer_attachments[att++] = info.depth_stencil; init_viewport_scissor(info, framebuffer); VkClearValue clear_values[VULKAN_NUM_ATTACHMENTS + 1]; unsigned num_clear_values = 0; for (unsigned i = 0; i < info.num_color_attachments; i++) { VK_ASSERT(info.color_attachments[i]); if (info.clear_attachments & (1u << i)) { clear_values[i].color = info.clear_color[i]; num_clear_values = i + 1; } if (info.color_attachments[i]->get_image().is_swapchain_image()) swapchain_touch_in_stages(VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT); } if (info.depth_stencil && (info.op_flags & RENDER_PASS_OP_CLEAR_DEPTH_STENCIL_BIT) != 0) { clear_values[info.num_color_attachments].depthStencil = info.clear_depth_stencil; num_clear_values = info.num_color_attachments + 1; } VkRenderPassBeginInfo begin_info = { VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO }; begin_info.renderPass = actual_render_pass->get_render_pass(); begin_info.framebuffer = framebuffer->get_framebuffer(); begin_info.renderArea = scissor; begin_info.clearValueCount = num_clear_values; begin_info.pClearValues = clear_values; // In the render pass interface, we pretend we are rendering with normal // un-rotated coordinates. if (surface_transform_swaps_xy(current_framebuffer_surface_transform)) rect2d_swap_xy(begin_info.renderArea); table.vkCmdBeginRenderPass(cmd, &begin_info, contents); current_contents = contents; begin_graphics(); } void CommandBuffer::end_render_pass() { VK_ASSERT(framebuffer); VK_ASSERT(actual_render_pass); VK_ASSERT(pipeline_state.compatible_render_pass); table.vkCmdEndRenderPass(cmd); framebuffer = nullptr; actual_render_pass = nullptr; pipeline_state.compatible_render_pass = nullptr; begin_compute(); } VkPipeline CommandBuffer::build_compute_pipeline(Device *device, const DeferredPipelineCompile &compile) { auto &shader = *compile.program->get_shader(ShaderStage::Compute); VkComputePipelineCreateInfo info = { VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO }; info.layout = compile.program->get_pipeline_layout()->get_layout(); info.stage.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; info.stage.module = shader.get_module(); info.stage.pName = "main"; info.stage.stage = VK_SHADER_STAGE_COMPUTE_BIT; VkSpecializationInfo spec_info = {}; VkSpecializationMapEntry spec_entries[VULKAN_NUM_SPEC_CONSTANTS]; auto mask = compile.program->get_pipeline_layout()->get_resource_layout().combined_spec_constant_mask & compile.potential_static_state.spec_constant_mask; uint32_t spec_constants[VULKAN_NUM_SPEC_CONSTANTS]; if (mask) { info.stage.pSpecializationInfo = &spec_info; spec_info.pData = spec_constants; spec_info.pMapEntries = spec_entries; for_each_bit(mask, [&](uint32_t bit) { auto &entry = spec_entries[spec_info.mapEntryCount]; entry.offset = sizeof(uint32_t) * spec_info.mapEntryCount; entry.size = sizeof(uint32_t); entry.constantID = bit; spec_constants[spec_info.mapEntryCount] = compile.potential_static_state.spec_constants[bit]; spec_info.mapEntryCount++; }); spec_info.dataSize = spec_info.mapEntryCount * sizeof(uint32_t); } VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT subgroup_size_info = { VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT }; if (compile.static_state.state.subgroup_control_size) { if (!device->supports_subgroup_size_log2(compile.static_state.state.subgroup_full_group, compile.static_state.state.subgroup_minimum_size_log2, compile.static_state.state.subgroup_maximum_size_log2)) { LOGE("Subgroup size configuration not supported.\n"); return VK_NULL_HANDLE; } auto &features = device->get_device_features(); if (compile.static_state.state.subgroup_full_group) info.stage.flags |= VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT; uint32_t min_subgroups = 1u << compile.static_state.state.subgroup_minimum_size_log2; uint32_t max_subgroups = 1u << compile.static_state.state.subgroup_maximum_size_log2; if (min_subgroups <= features.subgroup_size_control_properties.minSubgroupSize && max_subgroups >= features.subgroup_size_control_properties.maxSubgroupSize) { info.stage.flags |= VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT; } else { // Pick a fixed subgroup size. Prefer smallest subgroup size. if (min_subgroups < features.subgroup_size_control_properties.minSubgroupSize) subgroup_size_info.requiredSubgroupSize = features.subgroup_size_control_properties.minSubgroupSize; else subgroup_size_info.requiredSubgroupSize = min_subgroups; info.stage.pNext = &subgroup_size_info; } } VkPipeline compute_pipeline; #ifdef GRANITE_VULKAN_FOSSILIZE device->register_compute_pipeline(compile.hash, info); #endif #ifdef VULKAN_DEBUG LOGI("Creating compute pipeline.\n"); #endif auto &table = device->get_device_table(); if (table.vkCreateComputePipelines(device->get_device(), compile.cache, 1, &info, nullptr, &compute_pipeline) != VK_SUCCESS) { LOGE("Failed to create compute pipeline!\n"); return VK_NULL_HANDLE; } auto returned_pipeline = compile.program->add_pipeline(compile.hash, compute_pipeline); if (returned_pipeline != compute_pipeline) table.vkDestroyPipeline(device->get_device(), compute_pipeline, nullptr); return returned_pipeline; } void CommandBuffer::extract_pipeline_state(DeferredPipelineCompile &compile) const { compile = pipeline_state; if (!compile.program) { LOGE("Attempting to extract pipeline state when no program is bound.\n"); return; } if (is_compute) update_hash_compute_pipeline(compile); else { uint32_t active_vbo = 0; update_hash_graphics_pipeline(compile, active_vbo); } } VkPipeline CommandBuffer::build_graphics_pipeline(Device *device, const DeferredPipelineCompile &compile) { // Viewport state VkPipelineViewportStateCreateInfo vp = { VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO }; vp.viewportCount = 1; vp.scissorCount = 1; // Dynamic state VkPipelineDynamicStateCreateInfo dyn = { VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO }; dyn.dynamicStateCount = 2; VkDynamicState states[7] = { VK_DYNAMIC_STATE_SCISSOR, VK_DYNAMIC_STATE_VIEWPORT, }; dyn.pDynamicStates = states; if (compile.static_state.state.depth_bias_enable) states[dyn.dynamicStateCount++] = VK_DYNAMIC_STATE_DEPTH_BIAS; if (compile.static_state.state.stencil_test) { states[dyn.dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK; states[dyn.dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_REFERENCE; states[dyn.dynamicStateCount++] = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK; } // Blend state VkPipelineColorBlendAttachmentState blend_attachments[VULKAN_NUM_ATTACHMENTS]; VkPipelineColorBlendStateCreateInfo blend = { VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO }; blend.attachmentCount = compile.compatible_render_pass->get_num_color_attachments(compile.subpass_index); blend.pAttachments = blend_attachments; for (unsigned i = 0; i < blend.attachmentCount; i++) { auto &att = blend_attachments[i]; att = {}; if (compile.compatible_render_pass->get_color_attachment(compile.subpass_index, i).attachment != VK_ATTACHMENT_UNUSED && (compile.program->get_pipeline_layout()->get_resource_layout().render_target_mask & (1u << i))) { att.colorWriteMask = (compile.static_state.state.write_mask >> (4 * i)) & 0xf; att.blendEnable = compile.static_state.state.blend_enable; if (att.blendEnable) { att.alphaBlendOp = static_cast(compile.static_state.state.alpha_blend_op); att.colorBlendOp = static_cast(compile.static_state.state.color_blend_op); att.dstAlphaBlendFactor = static_cast(compile.static_state.state.dst_alpha_blend); att.srcAlphaBlendFactor = static_cast(compile.static_state.state.src_alpha_blend); att.dstColorBlendFactor = static_cast(compile.static_state.state.dst_color_blend); att.srcColorBlendFactor = static_cast(compile.static_state.state.src_color_blend); } } } memcpy(blend.blendConstants, compile.potential_static_state.blend_constants, sizeof(blend.blendConstants)); // Depth state VkPipelineDepthStencilStateCreateInfo ds = { VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO }; ds.stencilTestEnable = compile.compatible_render_pass->has_stencil(compile.subpass_index) && compile.static_state.state.stencil_test; ds.depthTestEnable = compile.compatible_render_pass->has_depth(compile.subpass_index) && compile.static_state.state.depth_test; ds.depthWriteEnable = compile.compatible_render_pass->has_depth(compile.subpass_index) && compile.static_state.state.depth_write; if (ds.depthTestEnable) ds.depthCompareOp = static_cast(compile.static_state.state.depth_compare); if (ds.stencilTestEnable) { ds.front.compareOp = static_cast(compile.static_state.state.stencil_front_compare_op); ds.front.passOp = static_cast(compile.static_state.state.stencil_front_pass); ds.front.failOp = static_cast(compile.static_state.state.stencil_front_fail); ds.front.depthFailOp = static_cast(compile.static_state.state.stencil_front_depth_fail); ds.back.compareOp = static_cast(compile.static_state.state.stencil_back_compare_op); ds.back.passOp = static_cast(compile.static_state.state.stencil_back_pass); ds.back.failOp = static_cast(compile.static_state.state.stencil_back_fail); ds.back.depthFailOp = static_cast(compile.static_state.state.stencil_back_depth_fail); } // Vertex input VkPipelineVertexInputStateCreateInfo vi = { VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO }; VkVertexInputAttributeDescription vi_attribs[VULKAN_NUM_VERTEX_ATTRIBS]; vi.pVertexAttributeDescriptions = vi_attribs; uint32_t attr_mask = compile.program->get_pipeline_layout()->get_resource_layout().attribute_mask; uint32_t binding_mask = 0; for_each_bit(attr_mask, [&](uint32_t bit) { auto &attr = vi_attribs[vi.vertexAttributeDescriptionCount++]; attr.location = bit; attr.binding = compile.attribs[bit].binding; attr.format = compile.attribs[bit].format; attr.offset = compile.attribs[bit].offset; binding_mask |= 1u << attr.binding; }); VkVertexInputBindingDescription vi_bindings[VULKAN_NUM_VERTEX_BUFFERS]; vi.pVertexBindingDescriptions = vi_bindings; for_each_bit(binding_mask, [&](uint32_t bit) { auto &bind = vi_bindings[vi.vertexBindingDescriptionCount++]; bind.binding = bit; bind.inputRate = compile.input_rates[bit]; bind.stride = compile.strides[bit]; }); // Input assembly VkPipelineInputAssemblyStateCreateInfo ia = { VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO }; ia.primitiveRestartEnable = compile.static_state.state.primitive_restart; ia.topology = static_cast(compile.static_state.state.topology); // Multisample VkPipelineMultisampleStateCreateInfo ms = { VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO }; ms.rasterizationSamples = static_cast(compile.compatible_render_pass->get_sample_count(compile.subpass_index)); if (compile.compatible_render_pass->get_sample_count(compile.subpass_index) > 1) { ms.alphaToCoverageEnable = compile.static_state.state.alpha_to_coverage; ms.alphaToOneEnable = compile.static_state.state.alpha_to_one; ms.sampleShadingEnable = compile.static_state.state.sample_shading; ms.minSampleShading = 1.0f; } // Raster VkPipelineRasterizationStateCreateInfo raster = { VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO }; raster.cullMode = static_cast(compile.static_state.state.cull_mode); raster.frontFace = static_cast(compile.static_state.state.front_face); raster.lineWidth = 1.0f; raster.polygonMode = compile.static_state.state.wireframe ? VK_POLYGON_MODE_LINE : VK_POLYGON_MODE_FILL; raster.depthBiasEnable = compile.static_state.state.depth_bias_enable != 0; VkPipelineRasterizationConservativeStateCreateInfoEXT conservative_raster = { VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT }; if (compile.static_state.state.conservative_raster) { if (device->get_device_features().supports_conservative_rasterization) { raster.pNext = &conservative_raster; conservative_raster.conservativeRasterizationMode = VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT; } else { LOGE("Conservative rasterization is not supported on this device.\n"); return VK_NULL_HANDLE; } } // Stages VkPipelineShaderStageCreateInfo stages[static_cast(ShaderStage::Count)]; unsigned num_stages = 0; VkSpecializationInfo spec_info[ecast(ShaderStage::Count)] = {}; VkSpecializationMapEntry spec_entries[ecast(ShaderStage::Count)][VULKAN_NUM_SPEC_CONSTANTS]; uint32_t spec_constants[static_cast(ShaderStage::Count)][VULKAN_NUM_SPEC_CONSTANTS]; for (unsigned i = 0; i < static_cast(ShaderStage::Count); i++) { auto stage = static_cast(i); if (compile.program->get_shader(stage)) { auto &s = stages[num_stages++]; s = { VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO }; s.module = compile.program->get_shader(stage)->get_module(); s.pName = "main"; s.stage = static_cast(1u << i); auto mask = compile.program->get_pipeline_layout()->get_resource_layout().spec_constant_mask[i] & compile.potential_static_state.spec_constant_mask; if (mask) { s.pSpecializationInfo = &spec_info[i]; spec_info[i].pData = spec_constants[i]; spec_info[i].pMapEntries = spec_entries[i]; for_each_bit(mask, [&](uint32_t bit) { auto &entry = spec_entries[i][spec_info[i].mapEntryCount]; entry.offset = sizeof(uint32_t) * spec_info[i].mapEntryCount; entry.size = sizeof(uint32_t); entry.constantID = bit; spec_constants[i][spec_info[i].mapEntryCount] = compile.potential_static_state.spec_constants[bit]; spec_info[i].mapEntryCount++; }); spec_info[i].dataSize = spec_info[i].mapEntryCount * sizeof(uint32_t); } } } VkGraphicsPipelineCreateInfo pipe = { VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO }; pipe.layout = compile.program->get_pipeline_layout()->get_layout(); pipe.renderPass = compile.compatible_render_pass->get_render_pass(); pipe.subpass = compile.subpass_index; pipe.pViewportState = &vp; pipe.pDynamicState = &dyn; pipe.pColorBlendState = &blend; pipe.pDepthStencilState = &ds; pipe.pVertexInputState = &vi; pipe.pInputAssemblyState = &ia; pipe.pMultisampleState = &ms; pipe.pRasterizationState = &raster; pipe.pStages = stages; pipe.stageCount = num_stages; VkPipeline pipeline; #ifdef GRANITE_VULKAN_FOSSILIZE device->register_graphics_pipeline(compile.hash, pipe); #endif #ifdef VULKAN_DEBUG LOGI("Creating graphics pipeline.\n"); #endif auto &table = device->get_device_table(); VkResult res = table.vkCreateGraphicsPipelines(device->get_device(), compile.cache, 1, &pipe, nullptr, &pipeline); if (res != VK_SUCCESS) { LOGE("Failed to create graphics pipeline!\n"); return VK_NULL_HANDLE; } auto returned_pipeline = compile.program->add_pipeline(compile.hash, pipeline); if (returned_pipeline != pipeline) table.vkDestroyPipeline(device->get_device(), pipeline, nullptr); return returned_pipeline; } bool CommandBuffer::flush_compute_pipeline(bool synchronous) { update_hash_compute_pipeline(pipeline_state); current_pipeline = pipeline_state.program->get_pipeline(pipeline_state.hash); if (current_pipeline == VK_NULL_HANDLE && synchronous) current_pipeline = build_compute_pipeline(device, pipeline_state); return current_pipeline != VK_NULL_HANDLE; } void CommandBuffer::update_hash_compute_pipeline(DeferredPipelineCompile &compile) { Hasher h; h.u64(compile.program->get_hash()); // Spec constants. auto &layout = compile.program->get_pipeline_layout()->get_resource_layout(); uint32_t combined_spec_constant = layout.combined_spec_constant_mask; combined_spec_constant &= compile.potential_static_state.spec_constant_mask; h.u32(combined_spec_constant); for_each_bit(combined_spec_constant, [&](uint32_t bit) { h.u32(compile.potential_static_state.spec_constants[bit]); }); if (compile.static_state.state.subgroup_control_size) { h.s32(1); h.u32(compile.static_state.state.subgroup_minimum_size_log2); h.u32(compile.static_state.state.subgroup_maximum_size_log2); h.u32(compile.static_state.state.subgroup_full_group); // Required for Fossilize since we don't know exactly how to lower these requirements to a PSO // without knowing some device state. h.u32(compile.subgroup_size_tag); } else h.s32(0); compile.hash = h.get(); } void CommandBuffer::update_hash_graphics_pipeline(DeferredPipelineCompile &compile, uint32_t &active_vbos) { Hasher h; active_vbos = 0; auto &layout = compile.program->get_pipeline_layout()->get_resource_layout(); for_each_bit(layout.attribute_mask, [&](uint32_t bit) { h.u32(bit); active_vbos |= 1u << compile.attribs[bit].binding; h.u32(compile.attribs[bit].binding); h.u32(compile.attribs[bit].format); h.u32(compile.attribs[bit].offset); }); for_each_bit(active_vbos, [&](uint32_t bit) { h.u32(compile.input_rates[bit]); h.u32(compile.strides[bit]); }); h.u64(compile.compatible_render_pass->get_hash()); h.u32(compile.subpass_index); h.u64(compile.program->get_hash()); h.data(compile.static_state.words, sizeof(compile.static_state.words)); if (compile.static_state.state.blend_enable) { const auto needs_blend_constant = [](VkBlendFactor factor) { return factor == VK_BLEND_FACTOR_CONSTANT_COLOR || factor == VK_BLEND_FACTOR_CONSTANT_ALPHA; }; bool b0 = needs_blend_constant(static_cast(compile.static_state.state.src_color_blend)); bool b1 = needs_blend_constant(static_cast(compile.static_state.state.src_alpha_blend)); bool b2 = needs_blend_constant(static_cast(compile.static_state.state.dst_color_blend)); bool b3 = needs_blend_constant(static_cast(compile.static_state.state.dst_alpha_blend)); if (b0 || b1 || b2 || b3) h.data(reinterpret_cast(compile.potential_static_state.blend_constants), sizeof(compile.potential_static_state.blend_constants)); } // Spec constants. uint32_t combined_spec_constant = layout.combined_spec_constant_mask; combined_spec_constant &= compile.potential_static_state.spec_constant_mask; h.u32(combined_spec_constant); for_each_bit(combined_spec_constant, [&](uint32_t bit) { h.u32(compile.potential_static_state.spec_constants[bit]); }); compile.hash = h.get(); } bool CommandBuffer::flush_graphics_pipeline(bool synchronous) { update_hash_graphics_pipeline(pipeline_state, active_vbos); current_pipeline = pipeline_state.program->get_pipeline(pipeline_state.hash); if (current_pipeline == VK_NULL_HANDLE && synchronous) current_pipeline = build_graphics_pipeline(device, pipeline_state); return current_pipeline != VK_NULL_HANDLE; } bool CommandBuffer::flush_compute_state(bool synchronous) { if (!pipeline_state.program) return false; VK_ASSERT(current_layout); if (current_pipeline == VK_NULL_HANDLE) set_dirty(COMMAND_BUFFER_DIRTY_PIPELINE_BIT); if (get_and_clear(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT | COMMAND_BUFFER_DIRTY_PIPELINE_BIT)) { VkPipeline old_pipe = current_pipeline; if (!flush_compute_pipeline(synchronous)) return false; if (old_pipe != current_pipeline) table.vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_COMPUTE, current_pipeline); } if (current_pipeline == VK_NULL_HANDLE) return false; flush_descriptor_sets(); if (get_and_clear(COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT)) { auto &range = current_layout->get_resource_layout().push_constant_range; if (range.stageFlags != 0) { VK_ASSERT(range.offset == 0); table.vkCmdPushConstants(cmd, current_pipeline_layout, range.stageFlags, 0, range.size, bindings.push_constant_data); } } return true; } bool CommandBuffer::flush_render_state(bool synchronous) { if (!pipeline_state.program) return false; VK_ASSERT(current_layout); if (current_pipeline == VK_NULL_HANDLE) set_dirty(COMMAND_BUFFER_DIRTY_PIPELINE_BIT); // We've invalidated pipeline state, update the VkPipeline. if (get_and_clear(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT | COMMAND_BUFFER_DIRTY_PIPELINE_BIT | COMMAND_BUFFER_DIRTY_STATIC_VERTEX_BIT)) { VkPipeline old_pipe = current_pipeline; if (!flush_graphics_pipeline(synchronous)) return false; if (old_pipe != current_pipeline) { table.vkCmdBindPipeline(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, current_pipeline); set_dirty(COMMAND_BUFFER_DYNAMIC_BITS); } } if (current_pipeline == VK_NULL_HANDLE) return false; flush_descriptor_sets(); if (get_and_clear(COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT)) { auto &range = current_layout->get_resource_layout().push_constant_range; if (range.stageFlags != 0) { VK_ASSERT(range.offset == 0); table.vkCmdPushConstants(cmd, current_pipeline_layout, range.stageFlags, 0, range.size, bindings.push_constant_data); } } if (get_and_clear(COMMAND_BUFFER_DIRTY_VIEWPORT_BIT)) { if (surface_transform_swaps_xy(current_framebuffer_surface_transform)) { auto tmp_viewport = viewport; viewport_swap_xy(tmp_viewport); table.vkCmdSetViewport(cmd, 0, 1, &tmp_viewport); } else table.vkCmdSetViewport(cmd, 0, 1, &viewport); } if (get_and_clear(COMMAND_BUFFER_DIRTY_SCISSOR_BIT)) { if (surface_transform_swaps_xy(current_framebuffer_surface_transform)) { auto tmp_scissor = scissor; rect2d_swap_xy(tmp_scissor); table.vkCmdSetScissor(cmd, 0, 1, &tmp_scissor); } else table.vkCmdSetScissor(cmd, 0, 1, &scissor); } if (pipeline_state.static_state.state.depth_bias_enable && get_and_clear(COMMAND_BUFFER_DIRTY_DEPTH_BIAS_BIT)) table.vkCmdSetDepthBias(cmd, dynamic_state.depth_bias_constant, 0.0f, dynamic_state.depth_bias_slope); if (pipeline_state.static_state.state.stencil_test && get_and_clear(COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT)) { table.vkCmdSetStencilCompareMask(cmd, VK_STENCIL_FACE_FRONT_BIT, dynamic_state.front_compare_mask); table.vkCmdSetStencilReference(cmd, VK_STENCIL_FACE_FRONT_BIT, dynamic_state.front_reference); table.vkCmdSetStencilWriteMask(cmd, VK_STENCIL_FACE_FRONT_BIT, dynamic_state.front_write_mask); table.vkCmdSetStencilCompareMask(cmd, VK_STENCIL_FACE_BACK_BIT, dynamic_state.back_compare_mask); table.vkCmdSetStencilReference(cmd, VK_STENCIL_FACE_BACK_BIT, dynamic_state.back_reference); table.vkCmdSetStencilWriteMask(cmd, VK_STENCIL_FACE_BACK_BIT, dynamic_state.back_write_mask); } uint32_t update_vbo_mask = dirty_vbos & active_vbos; for_each_bit_range(update_vbo_mask, [&](uint32_t binding, uint32_t binding_count) { #ifdef VULKAN_DEBUG for (unsigned i = binding; i < binding + binding_count; i++) VK_ASSERT(vbo.buffers[i] != VK_NULL_HANDLE); #endif table.vkCmdBindVertexBuffers(cmd, binding, binding_count, vbo.buffers + binding, vbo.offsets + binding); }); dirty_vbos &= ~update_vbo_mask; return true; } bool CommandBuffer::flush_pipeline_state_without_blocking() { if (is_compute) return flush_compute_state(false); else return flush_render_state(false); } void CommandBuffer::wait_events(unsigned num_events, const VkEvent *events, VkPipelineStageFlags src_stages, VkPipelineStageFlags dst_stages, unsigned barriers, const VkMemoryBarrier *globals, unsigned buffer_barriers, const VkBufferMemoryBarrier *buffers, unsigned image_barriers, const VkImageMemoryBarrier *images) { VK_ASSERT(!framebuffer); VK_ASSERT(!actual_render_pass); VK_ASSERT(src_stages != 0); VK_ASSERT(dst_stages != 0); if (device->get_workarounds().emulate_event_as_pipeline_barrier) { barrier(src_stages, dst_stages, barriers, globals, buffer_barriers, buffers, image_barriers, images); } else { table.vkCmdWaitEvents(cmd, num_events, events, src_stages, dst_stages, barriers, globals, buffer_barriers, buffers, image_barriers, images); } } PipelineEvent CommandBuffer::signal_event(VkPipelineStageFlags stages) { auto event = device->begin_signal_event(stages); complete_signal_event(*event); return event; } void CommandBuffer::complete_signal_event(const EventHolder &event) { VK_ASSERT(!framebuffer); VK_ASSERT(!actual_render_pass); VK_ASSERT(event.get_stages() != 0); if (!device->get_workarounds().emulate_event_as_pipeline_barrier) table.vkCmdSetEvent(cmd, event.get_event(), event.get_stages()); } void CommandBuffer::set_vertex_attrib(uint32_t attrib, uint32_t binding, VkFormat format, VkDeviceSize offset) { VK_ASSERT(attrib < VULKAN_NUM_VERTEX_ATTRIBS); VK_ASSERT(framebuffer); auto &attr = pipeline_state.attribs[attrib]; if (attr.binding != binding || attr.format != format || attr.offset != offset) set_dirty(COMMAND_BUFFER_DIRTY_STATIC_VERTEX_BIT); VK_ASSERT(binding < VULKAN_NUM_VERTEX_BUFFERS); attr.binding = binding; attr.format = format; attr.offset = offset; } void CommandBuffer::set_index_buffer(const Buffer &buffer, VkDeviceSize offset, VkIndexType index_type) { if (index_state.buffer == buffer.get_buffer() && index_state.offset == offset && index_state.index_type == index_type) { return; } index_state.buffer = buffer.get_buffer(); index_state.offset = offset; index_state.index_type = index_type; table.vkCmdBindIndexBuffer(cmd, buffer.get_buffer(), offset, index_type); } void CommandBuffer::set_vertex_binding(uint32_t binding, const Buffer &buffer, VkDeviceSize offset, VkDeviceSize stride, VkVertexInputRate step_rate) { VK_ASSERT(binding < VULKAN_NUM_VERTEX_BUFFERS); VK_ASSERT(framebuffer); VkBuffer vkbuffer = buffer.get_buffer(); if (vbo.buffers[binding] != vkbuffer || vbo.offsets[binding] != offset) dirty_vbos |= 1u << binding; if (pipeline_state.strides[binding] != stride || pipeline_state.input_rates[binding] != step_rate) set_dirty(COMMAND_BUFFER_DIRTY_STATIC_VERTEX_BIT); vbo.buffers[binding] = vkbuffer; vbo.offsets[binding] = offset; pipeline_state.strides[binding] = stride; pipeline_state.input_rates[binding] = step_rate; } void CommandBuffer::set_viewport(const VkViewport &viewport_) { VK_ASSERT(framebuffer); viewport = viewport_; set_dirty(COMMAND_BUFFER_DIRTY_VIEWPORT_BIT); } const VkViewport &CommandBuffer::get_viewport() const { return viewport; } void CommandBuffer::set_scissor(const VkRect2D &rect) { VK_ASSERT(framebuffer); VK_ASSERT(rect.offset.x >= 0); VK_ASSERT(rect.offset.y >= 0); scissor = rect; set_dirty(COMMAND_BUFFER_DIRTY_SCISSOR_BIT); } void CommandBuffer::push_constants(const void *data, VkDeviceSize offset, VkDeviceSize range) { VK_ASSERT(offset + range <= VULKAN_PUSH_CONSTANT_SIZE); memcpy(bindings.push_constant_data + offset, data, range); set_dirty(COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT); } #ifdef GRANITE_VULKAN_FILESYSTEM void CommandBuffer::set_program(const std::string &compute, const std::vector> &defines) { auto *p = device->get_shader_manager().register_compute(compute); if (p) { auto *variant = p->register_variant(defines); set_program(variant->get_program()); } else set_program(nullptr); } void CommandBuffer::set_program(const std::string &vertex, const std::string &fragment, const std::vector> &defines) { auto *p = device->get_shader_manager().register_graphics(vertex, fragment); if (p) { auto *variant = p->register_variant(defines); set_program(variant->get_program()); } else set_program(nullptr); } #endif void CommandBuffer::set_program(Program *program) { if (pipeline_state.program == program) return; pipeline_state.program = program; current_pipeline = VK_NULL_HANDLE; set_dirty(COMMAND_BUFFER_DIRTY_PIPELINE_BIT | COMMAND_BUFFER_DYNAMIC_BITS); if (!program) return; VK_ASSERT((framebuffer && pipeline_state.program->get_shader(ShaderStage::Vertex)) || (!framebuffer && pipeline_state.program->get_shader(ShaderStage::Compute))); if (!current_layout) { dirty_sets = ~0u; set_dirty(COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT); current_layout = program->get_pipeline_layout(); current_pipeline_layout = current_layout->get_layout(); } else if (program->get_pipeline_layout()->get_hash() != current_layout->get_hash()) { auto &new_layout = program->get_pipeline_layout()->get_resource_layout(); auto &old_layout = current_layout->get_resource_layout(); // If the push constant layout changes, all descriptor sets // are invalidated. if (new_layout.push_constant_layout_hash != old_layout.push_constant_layout_hash) { dirty_sets = ~0u; set_dirty(COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT); } else { // Find the first set whose descriptor set layout differs. auto *new_pipe_layout = program->get_pipeline_layout(); for (unsigned set = 0; set < VULKAN_NUM_DESCRIPTOR_SETS; set++) { if (new_pipe_layout->get_allocator(set) != current_layout->get_allocator(set)) { dirty_sets |= ~((1u << set) - 1); break; } } } current_layout = program->get_pipeline_layout(); current_pipeline_layout = current_layout->get_layout(); } } void *CommandBuffer::allocate_constant_data(unsigned set, unsigned binding, VkDeviceSize size) { VK_ASSERT(size <= VULKAN_MAX_UBO_SIZE); auto data = ubo_block.allocate(size); if (!data.host) { device->request_uniform_block(ubo_block, size); data = ubo_block.allocate(size); } set_uniform_buffer(set, binding, *ubo_block.gpu, data.offset, data.padded_size); return data.host; } void *CommandBuffer::allocate_index_data(VkDeviceSize size, VkIndexType index_type) { auto data = ibo_block.allocate(size); if (!data.host) { device->request_index_block(ibo_block, size); data = ibo_block.allocate(size); } set_index_buffer(*ibo_block.gpu, data.offset, index_type); return data.host; } void *CommandBuffer::update_buffer(const Buffer &buffer, VkDeviceSize offset, VkDeviceSize size) { if (size == 0) return nullptr; auto data = staging_block.allocate(size); if (!data.host) { device->request_staging_block(staging_block, size); data = staging_block.allocate(size); } copy_buffer(buffer, offset, *staging_block.cpu, data.offset, size); return data.host; } void *CommandBuffer::update_image(const Image &image, const VkOffset3D &offset, const VkExtent3D &extent, uint32_t row_length, uint32_t image_height, const VkImageSubresourceLayers &subresource) { auto &create_info = image.get_create_info(); uint32_t width = max(image.get_width() >> subresource.mipLevel, 1u); uint32_t height = max(image.get_height() >> subresource.mipLevel, 1u); uint32_t depth = max(image.get_depth() >> subresource.mipLevel, 1u); if (!row_length) row_length = width; if (!image_height) image_height = height; if ((subresource.aspectMask & (VK_IMAGE_ASPECT_PLANE_0_BIT | VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT)) != 0) { format_ycbcr_downsample_dimensions(create_info.format, subresource.aspectMask, row_length, image_height); } uint32_t blocks_x = row_length; uint32_t blocks_y = image_height; format_num_blocks(create_info.format, blocks_x, blocks_y); VkDeviceSize size = TextureFormatLayout::format_block_size(create_info.format, subresource.aspectMask) * subresource.layerCount * depth * blocks_x * blocks_y; auto data = staging_block.allocate(size); if (!data.host) { device->request_staging_block(staging_block, size); data = staging_block.allocate(size); } copy_buffer_to_image(image, *staging_block.cpu, data.offset, offset, extent, row_length, image_height, subresource); return data.host; } void *CommandBuffer::update_image(const Image &image, uint32_t row_length, uint32_t image_height) { const VkImageSubresourceLayers subresource = { format_to_aspect_mask(image.get_format()), 0, 0, 1, }; return update_image(image, { 0, 0, 0 }, { image.get_width(), image.get_height(), image.get_depth() }, row_length, image_height, subresource); } void *CommandBuffer::allocate_vertex_data(unsigned binding, VkDeviceSize size, VkDeviceSize stride, VkVertexInputRate step_rate) { auto data = vbo_block.allocate(size); if (!data.host) { device->request_vertex_block(vbo_block, size); data = vbo_block.allocate(size); } set_vertex_binding(binding, *vbo_block.gpu, data.offset, stride, step_rate); return data.host; } void CommandBuffer::set_uniform_buffer(unsigned set, unsigned binding, const Buffer &buffer, VkDeviceSize offset, VkDeviceSize range) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(binding < VULKAN_NUM_BINDINGS); VK_ASSERT(buffer.get_create_info().usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT); auto &b = bindings.bindings[set][binding]; if (buffer.get_cookie() == bindings.cookies[set][binding] && b.buffer.range == range) { if (b.dynamic_offset != offset) { dirty_sets_dynamic |= 1u << set; b.dynamic_offset = offset; } } else { b.buffer = { buffer.get_buffer(), 0, range }; b.dynamic_offset = offset; bindings.cookies[set][binding] = buffer.get_cookie(); bindings.secondary_cookies[set][binding] = 0; dirty_sets |= 1u << set; } } void CommandBuffer::set_storage_buffer(unsigned set, unsigned binding, const Buffer &buffer, VkDeviceSize offset, VkDeviceSize range) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(binding < VULKAN_NUM_BINDINGS); VK_ASSERT(buffer.get_create_info().usage & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT); auto &b = bindings.bindings[set][binding]; if (buffer.get_cookie() == bindings.cookies[set][binding] && b.buffer.offset == offset && b.buffer.range == range) return; b.buffer = { buffer.get_buffer(), offset, range }; b.dynamic_offset = 0; bindings.cookies[set][binding] = buffer.get_cookie(); bindings.secondary_cookies[set][binding] = 0; dirty_sets |= 1u << set; } void CommandBuffer::set_uniform_buffer(unsigned set, unsigned binding, const Buffer &buffer) { set_uniform_buffer(set, binding, buffer, 0, buffer.get_create_info().size); } void CommandBuffer::set_storage_buffer(unsigned set, unsigned binding, const Buffer &buffer) { set_storage_buffer(set, binding, buffer, 0, buffer.get_create_info().size); } void CommandBuffer::set_sampler(unsigned set, unsigned binding, const Sampler &sampler) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(binding < VULKAN_NUM_BINDINGS); if (sampler.get_cookie() == bindings.secondary_cookies[set][binding]) return; auto &b = bindings.bindings[set][binding]; b.image.fp.sampler = sampler.get_sampler(); b.image.integer.sampler = sampler.get_sampler(); dirty_sets |= 1u << set; bindings.secondary_cookies[set][binding] = sampler.get_cookie(); } void CommandBuffer::set_buffer_view(unsigned set, unsigned binding, const BufferView &view) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(binding < VULKAN_NUM_BINDINGS); VK_ASSERT(view.get_buffer().get_create_info().usage & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT); if (view.get_cookie() == bindings.cookies[set][binding]) return; auto &b = bindings.bindings[set][binding]; b.buffer_view = view.get_view(); bindings.cookies[set][binding] = view.get_cookie(); bindings.secondary_cookies[set][binding] = 0; dirty_sets |= 1u << set; } void CommandBuffer::set_input_attachments(unsigned set, unsigned start_binding) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(start_binding + actual_render_pass->get_num_input_attachments(pipeline_state.subpass_index) <= VULKAN_NUM_BINDINGS); unsigned num_input_attachments = actual_render_pass->get_num_input_attachments(pipeline_state.subpass_index); for (unsigned i = 0; i < num_input_attachments; i++) { auto &ref = actual_render_pass->get_input_attachment(pipeline_state.subpass_index, i); if (ref.attachment == VK_ATTACHMENT_UNUSED) continue; const ImageView *view = framebuffer_attachments[ref.attachment]; VK_ASSERT(view); VK_ASSERT(view->get_image().get_create_info().usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT); if (view->get_cookie() == bindings.cookies[set][start_binding + i] && bindings.bindings[set][start_binding + i].image.fp.imageLayout == ref.layout) { continue; } auto &b = bindings.bindings[set][start_binding + i]; b.image.fp.imageLayout = ref.layout; b.image.integer.imageLayout = ref.layout; b.image.fp.imageView = view->get_float_view(); b.image.integer.imageView = view->get_integer_view(); bindings.cookies[set][start_binding + i] = view->get_cookie(); dirty_sets |= 1u << set; } } void CommandBuffer::set_texture(unsigned set, unsigned binding, VkImageView float_view, VkImageView integer_view, VkImageLayout layout, uint64_t cookie) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(binding < VULKAN_NUM_BINDINGS); if (cookie == bindings.cookies[set][binding] && bindings.bindings[set][binding].image.fp.imageLayout == layout) return; auto &b = bindings.bindings[set][binding]; b.image.fp.imageLayout = layout; b.image.fp.imageView = float_view; b.image.integer.imageLayout = layout; b.image.integer.imageView = integer_view; bindings.cookies[set][binding] = cookie; dirty_sets |= 1u << set; } void CommandBuffer::set_bindless(unsigned set, VkDescriptorSet desc_set) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); bindless_sets[set] = desc_set; dirty_sets |= 1u << set; } void CommandBuffer::set_texture(unsigned set, unsigned binding, const ImageView &view) { VK_ASSERT(view.get_image().get_create_info().usage & VK_IMAGE_USAGE_SAMPLED_BIT); set_texture(set, binding, view.get_float_view(), view.get_integer_view(), view.get_image().get_layout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), view.get_cookie()); } enum CookieBits { COOKIE_BIT_UNORM = 1 << 0, COOKIE_BIT_SRGB = 1 << 1 }; void CommandBuffer::set_unorm_texture(unsigned set, unsigned binding, const ImageView &view) { VK_ASSERT(view.get_image().get_create_info().usage & VK_IMAGE_USAGE_SAMPLED_BIT); auto unorm_view = view.get_unorm_view(); VK_ASSERT(unorm_view != VK_NULL_HANDLE); set_texture(set, binding, unorm_view, unorm_view, view.get_image().get_layout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), view.get_cookie() | COOKIE_BIT_UNORM); } void CommandBuffer::set_srgb_texture(unsigned set, unsigned binding, const ImageView &view) { VK_ASSERT(view.get_image().get_create_info().usage & VK_IMAGE_USAGE_SAMPLED_BIT); auto srgb_view = view.get_srgb_view(); VK_ASSERT(srgb_view != VK_NULL_HANDLE); set_texture(set, binding, srgb_view, srgb_view, view.get_image().get_layout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL), view.get_cookie() | COOKIE_BIT_SRGB); } void CommandBuffer::set_texture(unsigned set, unsigned binding, const ImageView &view, const Sampler &sampler) { set_sampler(set, binding, sampler); set_texture(set, binding, view); } void CommandBuffer::set_texture(unsigned set, unsigned binding, const ImageView &view, StockSampler stock) { VK_ASSERT(set < VULKAN_NUM_DESCRIPTOR_SETS); VK_ASSERT(binding < VULKAN_NUM_BINDINGS); VK_ASSERT(view.get_image().get_create_info().usage & VK_IMAGE_USAGE_SAMPLED_BIT); const auto &sampler = device->get_stock_sampler(stock); set_texture(set, binding, view, sampler); } void CommandBuffer::set_sampler(unsigned set, unsigned binding, StockSampler stock) { const auto &sampler = device->get_stock_sampler(stock); set_sampler(set, binding, sampler); } void CommandBuffer::set_storage_texture(unsigned set, unsigned binding, const ImageView &view) { VK_ASSERT(view.get_image().get_create_info().usage & VK_IMAGE_USAGE_STORAGE_BIT); set_texture(set, binding, view.get_float_view(), view.get_integer_view(), view.get_image().get_layout(VK_IMAGE_LAYOUT_GENERAL), view.get_cookie()); } void CommandBuffer::set_unorm_storage_texture(unsigned set, unsigned binding, const ImageView &view) { VK_ASSERT(view.get_image().get_create_info().usage & VK_IMAGE_USAGE_STORAGE_BIT); auto unorm_view = view.get_unorm_view(); VK_ASSERT(unorm_view != VK_NULL_HANDLE); set_texture(set, binding, unorm_view, unorm_view, view.get_image().get_layout(VK_IMAGE_LAYOUT_GENERAL), view.get_cookie() | COOKIE_BIT_UNORM); } static void update_descriptor_set_legacy(Device &device, VkDescriptorSet desc_set, const DescriptorSetLayout &set_layout, const ResourceBinding *bindings) { auto &table = device.get_device_table(); uint32_t write_count = 0; VkWriteDescriptorSet writes[VULKAN_NUM_BINDINGS]; for_each_bit(set_layout.uniform_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; write.pBufferInfo = &bindings[binding + i].buffer; } }); for_each_bit(set_layout.storage_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; write.pBufferInfo = &bindings[binding + i].buffer; } }); for_each_bit(set_layout.sampled_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; write.pTexelBufferView = &bindings[binding + i].buffer_view; } }); for_each_bit(set_layout.sampled_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; if (set_layout.fp_mask & (1u << binding)) write.pImageInfo = &bindings[binding + i].image.fp; else write.pImageInfo = &bindings[binding + i].image.integer; } }); for_each_bit(set_layout.separate_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; if (set_layout.fp_mask & (1u << binding)) write.pImageInfo = &bindings[binding + i].image.fp; else write.pImageInfo = &bindings[binding + i].image.integer; } }); for_each_bit(set_layout.sampler_mask & ~set_layout.immutable_sampler_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; write.pImageInfo = &bindings[binding + i].image.fp; } }); for_each_bit(set_layout.storage_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; if (set_layout.fp_mask & (1u << binding)) write.pImageInfo = &bindings[binding + i].image.fp; else write.pImageInfo = &bindings[binding + i].image.integer; } }); for_each_bit(set_layout.input_attachment_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(write_count < VULKAN_NUM_BINDINGS); auto &write = writes[write_count++]; write.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET; write.pNext = nullptr; write.descriptorCount = 1; write.descriptorType = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; write.dstArrayElement = i; write.dstBinding = binding; write.dstSet = desc_set; if (set_layout.fp_mask & (1u << binding)) write.pImageInfo = &bindings[binding + i].image.fp; else write.pImageInfo = &bindings[binding + i].image.integer; } }); table.vkUpdateDescriptorSets(device.get_device(), write_count, writes, 0, nullptr); } void CommandBuffer::rebind_descriptor_set(uint32_t set) { auto &layout = current_layout->get_resource_layout(); if (layout.bindless_descriptor_set_mask & (1u << set)) { VK_ASSERT(bindless_sets[set]); table.vkCmdBindDescriptorSets(cmd, actual_render_pass ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_COMPUTE, current_pipeline_layout, set, 1, &bindless_sets[set], 0, nullptr); return; } auto &set_layout = layout.sets[set]; uint32_t num_dynamic_offsets = 0; uint32_t dynamic_offsets[VULKAN_NUM_BINDINGS]; // UBOs for_each_bit(set_layout.uniform_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { VK_ASSERT(num_dynamic_offsets < VULKAN_NUM_BINDINGS); dynamic_offsets[num_dynamic_offsets++] = bindings.bindings[set][binding + i].dynamic_offset; } }); table.vkCmdBindDescriptorSets(cmd, actual_render_pass ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_COMPUTE, current_pipeline_layout, set, 1, &allocated_sets[set], num_dynamic_offsets, dynamic_offsets); } void CommandBuffer::flush_descriptor_set(uint32_t set) { auto &layout = current_layout->get_resource_layout(); if (layout.bindless_descriptor_set_mask & (1u << set)) { VK_ASSERT(bindless_sets[set]); table.vkCmdBindDescriptorSets(cmd, actual_render_pass ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_COMPUTE, current_pipeline_layout, set, 1, &bindless_sets[set], 0, nullptr); return; } auto &set_layout = layout.sets[set]; uint32_t num_dynamic_offsets = 0; uint32_t dynamic_offsets[VULKAN_NUM_BINDINGS]; Hasher h; h.u32(set_layout.fp_mask); // UBOs for_each_bit(set_layout.uniform_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); h.u32(bindings.bindings[set][binding + i].buffer.range); VK_ASSERT(bindings.bindings[set][binding + i].buffer.buffer != VK_NULL_HANDLE); VK_ASSERT(num_dynamic_offsets < VULKAN_NUM_BINDINGS); dynamic_offsets[num_dynamic_offsets++] = bindings.bindings[set][binding + i].dynamic_offset; } }); // SSBOs for_each_bit(set_layout.storage_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); h.u32(bindings.bindings[set][binding + i].buffer.offset); h.u32(bindings.bindings[set][binding + i].buffer.range); VK_ASSERT(bindings.bindings[set][binding + i].buffer.buffer != VK_NULL_HANDLE); } }); // Sampled buffers for_each_bit(set_layout.sampled_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); VK_ASSERT(bindings.bindings[set][binding + i].buffer_view != VK_NULL_HANDLE); } }); // Sampled images for_each_bit(set_layout.sampled_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); if ((set_layout.immutable_sampler_mask & (1u << (binding + i))) == 0) { h.u64(bindings.secondary_cookies[set][binding + i]); VK_ASSERT(bindings.bindings[set][binding + i].image.fp.sampler != VK_NULL_HANDLE); } h.u32(bindings.bindings[set][binding + i].image.fp.imageLayout); VK_ASSERT(bindings.bindings[set][binding + i].image.fp.imageView != VK_NULL_HANDLE); } }); // Separate images for_each_bit(set_layout.separate_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); h.u32(bindings.bindings[set][binding + i].image.fp.imageLayout); VK_ASSERT(bindings.bindings[set][binding + i].image.fp.imageView != VK_NULL_HANDLE); } }); // Separate samplers for_each_bit(set_layout.sampler_mask & ~set_layout.immutable_sampler_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.secondary_cookies[set][binding + i]); VK_ASSERT(bindings.bindings[set][binding + i].image.fp.sampler != VK_NULL_HANDLE); } }); // Storage images for_each_bit(set_layout.storage_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); h.u32(bindings.bindings[set][binding + i].image.fp.imageLayout); VK_ASSERT(bindings.bindings[set][binding + i].image.fp.imageView != VK_NULL_HANDLE); } }); // Input attachments for_each_bit(set_layout.input_attachment_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; for (unsigned i = 0; i < array_size; i++) { h.u64(bindings.cookies[set][binding + i]); h.u32(bindings.bindings[set][binding + i].image.fp.imageLayout); VK_ASSERT(bindings.bindings[set][binding + i].image.fp.imageView != VK_NULL_HANDLE); } }); Hash hash = h.get(); auto allocated = current_layout->get_allocator(set)->find(thread_index, hash); // The descriptor set was not successfully cached, rebuild. if (!allocated.second) { auto update_template = current_layout->get_update_template(set); if (update_template != VK_NULL_HANDLE) { table.vkUpdateDescriptorSetWithTemplateKHR(device->get_device(), allocated.first, update_template, bindings.bindings[set]); } else update_descriptor_set_legacy(*device, allocated.first, layout.sets[set], bindings.bindings[set]); } table.vkCmdBindDescriptorSets(cmd, actual_render_pass ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_COMPUTE, current_pipeline_layout, set, 1, &allocated.first, num_dynamic_offsets, dynamic_offsets); allocated_sets[set] = allocated.first; } void CommandBuffer::flush_descriptor_sets() { auto &layout = current_layout->get_resource_layout(); uint32_t set_update = layout.descriptor_set_mask & dirty_sets; for_each_bit(set_update, [&](uint32_t set) { flush_descriptor_set(set); }); dirty_sets &= ~set_update; // If we update a set, we also bind dynamically. dirty_sets_dynamic &= ~set_update; // If we only rebound UBOs, we might get away with just rebinding descriptor sets, no hashing and lookup required. uint32_t dynamic_set_update = layout.descriptor_set_mask & dirty_sets_dynamic; for_each_bit(dynamic_set_update, [&](uint32_t set) { rebind_descriptor_set(set); }); dirty_sets_dynamic &= ~dynamic_set_update; } void CommandBuffer::draw(uint32_t vertex_count, uint32_t instance_count, uint32_t first_vertex, uint32_t first_instance) { VK_ASSERT(!is_compute); if (flush_render_state(true)) { set_backtrace_checkpoint(); table.vkCmdDraw(cmd, vertex_count, instance_count, first_vertex, first_instance); } else LOGE("Failed to flush render state, draw call will be dropped.\n"); } void CommandBuffer::draw_indexed(uint32_t index_count, uint32_t instance_count, uint32_t first_index, int32_t vertex_offset, uint32_t first_instance) { VK_ASSERT(!is_compute); VK_ASSERT(index_state.buffer != VK_NULL_HANDLE); if (flush_render_state(true)) { set_backtrace_checkpoint(); table.vkCmdDrawIndexed(cmd, index_count, instance_count, first_index, vertex_offset, first_instance); } else LOGE("Failed to flush render state, draw call will be dropped.\n"); } void CommandBuffer::draw_indirect(const Vulkan::Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride) { VK_ASSERT(!is_compute); if (flush_render_state(true)) { set_backtrace_checkpoint(); table.vkCmdDrawIndirect(cmd, buffer.get_buffer(), offset, draw_count, stride); } else LOGE("Failed to flush render state, draw call will be dropped.\n"); } void CommandBuffer::draw_multi_indirect(const Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride, const Buffer &count, uint32_t count_offset) { VK_ASSERT(!is_compute); if (!get_device().get_device_features().supports_draw_indirect_count) { LOGE("VK_KHR_draw_indirect_count not supported, dropping draw call.\n"); return; } if (flush_render_state(true)) { set_backtrace_checkpoint(); table.vkCmdDrawIndirectCountKHR(cmd, buffer.get_buffer(), offset, count.get_buffer(), count_offset, draw_count, stride); } else LOGE("Failed to flush render state, draw call will be dropped.\n"); } void CommandBuffer::draw_indexed_multi_indirect(const Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride, const Buffer &count, uint32_t count_offset) { VK_ASSERT(!is_compute); if (!get_device().get_device_features().supports_draw_indirect_count) { LOGE("VK_KHR_draw_indirect_count not supported, dropping draw call.\n"); return; } if (flush_render_state(true)) { set_backtrace_checkpoint(); table.vkCmdDrawIndexedIndirectCountKHR(cmd, buffer.get_buffer(), offset, count.get_buffer(), count_offset, draw_count, stride); } else LOGE("Failed to flush render state, draw call will be dropped.\n"); } void CommandBuffer::draw_indexed_indirect(const Vulkan::Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride) { VK_ASSERT(!is_compute); if (flush_render_state(true)) { table.vkCmdDrawIndexedIndirect(cmd, buffer.get_buffer(), offset, draw_count, stride); set_backtrace_checkpoint(); } else LOGE("Failed to flush render state, draw call will be dropped.\n"); } void CommandBuffer::dispatch_indirect(const Buffer &buffer, uint32_t offset) { VK_ASSERT(is_compute); if (flush_compute_state(true)) { set_backtrace_checkpoint(); table.vkCmdDispatchIndirect(cmd, buffer.get_buffer(), offset); } else LOGE("Failed to flush render state, dispatch will be dropped.\n"); } void CommandBuffer::dispatch(uint32_t groups_x, uint32_t groups_y, uint32_t groups_z) { VK_ASSERT(is_compute); if (flush_compute_state(true)) { set_backtrace_checkpoint(); table.vkCmdDispatch(cmd, groups_x, groups_y, groups_z); } else LOGE("Failed to flush render state, dispatch will be dropped.\n"); } void CommandBuffer::clear_render_state() { // Preserve spec constant mask. auto &state = pipeline_state.static_state.state; memset(&state, 0, sizeof(state)); } void CommandBuffer::set_opaque_state() { clear_render_state(); auto &state = pipeline_state.static_state.state; state.front_face = VK_FRONT_FACE_COUNTER_CLOCKWISE; state.cull_mode = VK_CULL_MODE_BACK_BIT; state.blend_enable = false; state.depth_test = true; state.depth_compare = VK_COMPARE_OP_LESS_OR_EQUAL; state.depth_write = true; state.depth_bias_enable = false; state.primitive_restart = false; state.stencil_test = false; state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; state.write_mask = ~0u; set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } void CommandBuffer::set_quad_state() { clear_render_state(); auto &state = pipeline_state.static_state.state; state.front_face = VK_FRONT_FACE_COUNTER_CLOCKWISE; state.cull_mode = VK_CULL_MODE_NONE; state.blend_enable = false; state.depth_test = false; state.depth_write = false; state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; state.write_mask = ~0u; set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } void CommandBuffer::set_opaque_sprite_state() { clear_render_state(); auto &state = pipeline_state.static_state.state; state.front_face = VK_FRONT_FACE_COUNTER_CLOCKWISE; state.cull_mode = VK_CULL_MODE_NONE; state.blend_enable = false; state.depth_compare = VK_COMPARE_OP_LESS; state.depth_test = true; state.depth_write = true; state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; state.write_mask = ~0u; set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } void CommandBuffer::set_transparent_sprite_state() { clear_render_state(); auto &state = pipeline_state.static_state.state; state.front_face = VK_FRONT_FACE_COUNTER_CLOCKWISE; state.cull_mode = VK_CULL_MODE_NONE; state.blend_enable = true; state.depth_test = true; state.depth_compare = VK_COMPARE_OP_LESS; state.depth_write = false; state.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP; state.write_mask = ~0u; // The alpha layer should start at 1 (fully transparent). // As layers are blended in, the transparency is multiplied with other transparencies (1 - alpha). set_blend_factors(VK_BLEND_FACTOR_SRC_ALPHA, VK_BLEND_FACTOR_ZERO, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA); set_blend_op(VK_BLEND_OP_ADD); set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } void CommandBuffer::restore_state(const CommandBufferSavedState &state) { auto &static_state = pipeline_state.static_state; auto &potential_static_state = pipeline_state.potential_static_state; for (unsigned i = 0; i < VULKAN_NUM_DESCRIPTOR_SETS; i++) { if (state.flags & (COMMAND_BUFFER_SAVED_BINDINGS_0_BIT << i)) { if (memcmp(state.bindings.bindings[i], bindings.bindings[i], sizeof(bindings.bindings[i]))) { memcpy(bindings.bindings[i], state.bindings.bindings[i], sizeof(bindings.bindings[i])); memcpy(bindings.cookies[i], state.bindings.cookies[i], sizeof(bindings.cookies[i])); memcpy(bindings.secondary_cookies[i], state.bindings.secondary_cookies[i], sizeof(bindings.secondary_cookies[i])); dirty_sets |= 1u << i; } } } if (state.flags & COMMAND_BUFFER_SAVED_PUSH_CONSTANT_BIT) { if (memcmp(state.bindings.push_constant_data, bindings.push_constant_data, sizeof(bindings.push_constant_data)) != 0) { memcpy(bindings.push_constant_data, state.bindings.push_constant_data, sizeof(bindings.push_constant_data)); set_dirty(COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT); } } if ((state.flags & COMMAND_BUFFER_SAVED_VIEWPORT_BIT) && memcmp(&state.viewport, &viewport, sizeof(viewport)) != 0) { viewport = state.viewport; set_dirty(COMMAND_BUFFER_DIRTY_VIEWPORT_BIT); } if ((state.flags & COMMAND_BUFFER_SAVED_SCISSOR_BIT) && memcmp(&state.scissor, &scissor, sizeof(scissor)) != 0) { scissor = state.scissor; set_dirty(COMMAND_BUFFER_DIRTY_SCISSOR_BIT); } if (state.flags & COMMAND_BUFFER_SAVED_RENDER_STATE_BIT) { if (memcmp(&state.static_state, &static_state, sizeof(static_state)) != 0) { memcpy(&static_state, &state.static_state, sizeof(static_state)); set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } if (memcmp(&state.potential_static_state, &potential_static_state, sizeof(potential_static_state)) != 0) { memcpy(&potential_static_state, &state.potential_static_state, sizeof(potential_static_state)); set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } if (memcmp(&state.dynamic_state, &dynamic_state, sizeof(dynamic_state)) != 0) { memcpy(&dynamic_state, &state.dynamic_state, sizeof(dynamic_state)); set_dirty(COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT | COMMAND_BUFFER_DIRTY_DEPTH_BIAS_BIT); } } } void CommandBuffer::save_state(CommandBufferSaveStateFlags flags, CommandBufferSavedState &state) { for (unsigned i = 0; i < VULKAN_NUM_DESCRIPTOR_SETS; i++) { if (flags & (COMMAND_BUFFER_SAVED_BINDINGS_0_BIT << i)) { memcpy(state.bindings.bindings[i], bindings.bindings[i], sizeof(bindings.bindings[i])); memcpy(state.bindings.cookies[i], bindings.cookies[i], sizeof(bindings.cookies[i])); memcpy(state.bindings.secondary_cookies[i], bindings.secondary_cookies[i], sizeof(bindings.secondary_cookies[i])); } } if (flags & COMMAND_BUFFER_SAVED_VIEWPORT_BIT) state.viewport = viewport; if (flags & COMMAND_BUFFER_SAVED_SCISSOR_BIT) state.scissor = scissor; if (flags & COMMAND_BUFFER_SAVED_RENDER_STATE_BIT) { memcpy(&state.static_state, &pipeline_state.static_state, sizeof(pipeline_state.static_state)); state.potential_static_state = pipeline_state.potential_static_state; state.dynamic_state = dynamic_state; } if (flags & COMMAND_BUFFER_SAVED_PUSH_CONSTANT_BIT) memcpy(state.bindings.push_constant_data, bindings.push_constant_data, sizeof(bindings.push_constant_data)); state.flags = flags; } QueryPoolHandle CommandBuffer::write_timestamp(VkPipelineStageFlagBits stage) { return device->write_timestamp(cmd, stage); } void CommandBuffer::add_checkpoint(const char *tag) { if (device->get_device_features().supports_nv_device_diagnostic_checkpoints) table.vkCmdSetCheckpointNV(cmd, tag); } void CommandBuffer::set_backtrace_checkpoint() { #if defined(FULL_BACKTRACE_CHECKPOINTS) && defined(__linux__) void *arr[1024]; int ret = backtrace(arr, 1024); ostringstream str; for (int i = 0; i < ret; i++) str << arr[i] << endl; auto s = str.str(); // Never free the duped string for now. add_checkpoint(strdup(s.c_str())); #endif } void CommandBuffer::end_threaded_recording() { VK_ASSERT(!debug_channel_buffer); if (is_ended) return; is_ended = true; // We must end a command buffer on the same thread index we started it on. VK_ASSERT(get_current_thread_index() == thread_index); if (has_profiling()) { auto &query_pool = device->get_performance_query_pool(device->get_physical_queue_type(type)); query_pool.end_command_buffer(cmd); } if (table.vkEndCommandBuffer(cmd) != VK_SUCCESS) LOGE("Failed to end command buffer.\n"); } void CommandBuffer::end() { end_threaded_recording(); if (vbo_block.mapped) device->request_vertex_block_nolock(vbo_block, 0); if (ibo_block.mapped) device->request_index_block_nolock(ibo_block, 0); if (ubo_block.mapped) device->request_uniform_block_nolock(ubo_block, 0); if (staging_block.mapped) device->request_staging_block_nolock(staging_block, 0); } void CommandBuffer::begin_region(const char *name, const float *color) { if (device->ext.supports_debug_utils) { VkDebugUtilsLabelEXT info = { VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT }; if (color) { for (unsigned i = 0; i < 4; i++) info.color[i] = color[i]; } else { for (unsigned i = 0; i < 4; i++) info.color[i] = 1.0f; } info.pLabelName = name; if (vkCmdBeginDebugUtilsLabelEXT) vkCmdBeginDebugUtilsLabelEXT(cmd, &info); } } void CommandBuffer::end_region() { if (device->ext.supports_debug_utils) { if (vkCmdEndDebugUtilsLabelEXT) vkCmdEndDebugUtilsLabelEXT(cmd); } } void CommandBuffer::enable_profiling() { profiling = true; } bool CommandBuffer::has_profiling() const { return profiling; } void CommandBuffer::begin_debug_channel(DebugChannelInterface *iface, const char *tag, VkDeviceSize size) { if (debug_channel_buffer) end_debug_channel(); debug_channel_tag = tag; debug_channel_interface = iface; BufferCreateInfo info = {}; info.size = size; info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT; info.domain = BufferDomain::Device; debug_channel_buffer = device->create_buffer(info); fill_buffer(*debug_channel_buffer, 0); barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT); set_storage_buffer(VULKAN_NUM_DESCRIPTOR_SETS - 1, VULKAN_NUM_BINDINGS - 1, *debug_channel_buffer); } void CommandBuffer::end_debug_channel() { if (!debug_channel_buffer) return; BufferCreateInfo info = {}; info.size = debug_channel_buffer->get_create_info().size; info.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT; info.domain = BufferDomain::CachedHost; auto debug_channel_readback = device->create_buffer(info); barrier(VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_ACCESS_SHADER_WRITE_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_READ_BIT); copy_buffer(*debug_channel_readback, *debug_channel_buffer); barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_HOST_BIT, VK_ACCESS_HOST_READ_BIT); debug_channel_buffer.reset(); device->add_debug_channel_buffer(debug_channel_interface, std::move(debug_channel_tag), std::move(debug_channel_readback)); debug_channel_readback = {}; debug_channel_tag = {}; debug_channel_interface = nullptr; } #ifdef GRANITE_VULKAN_FILESYSTEM void CommandBufferUtil::set_quad_vertex_state(CommandBuffer &cmd) { #ifdef __APPLE__ // For *some* reason, Metal does not support tightly packed R8G8 ... // Have to use RGBA8 <_<. auto *data = static_cast(cmd.allocate_vertex_data(0, 16, 4)); *data++ = -127; *data++ = +127; *data++ = 0; *data++ = +127; *data++ = +127; *data++ = +127; *data++ = 0; *data++ = +127; *data++ = -127; *data++ = -127; *data++ = 0; *data++ = +127; *data++ = +127; *data++ = -127; *data++ = 0; *data++ = +127; cmd.set_vertex_attrib(0, 0, VK_FORMAT_R8G8B8A8_SNORM, 0); #else auto *data = static_cast(cmd.allocate_vertex_data(0, 8, 2)); *data++ = -127; *data++ = +127; *data++ = +127; *data++ = +127; *data++ = -127; *data++ = -127; *data++ = +127; *data++ = -127; cmd.set_vertex_attrib(0, 0, VK_FORMAT_R8G8_SNORM, 0); #endif } void CommandBufferUtil::set_fullscreen_quad_vertex_state(CommandBuffer &cmd) { auto *data = static_cast(cmd.allocate_vertex_data(0, 6 * sizeof(float), 2 * sizeof(float))); *data++ = -1.0f; *data++ = -3.0f; *data++ = -1.0f; *data++ = +1.0f; *data++ = +3.0f; *data++ = +1.0f; cmd.set_vertex_attrib(0, 0, VK_FORMAT_R32G32_SFLOAT, 0); } void CommandBufferUtil::draw_fullscreen_quad(CommandBuffer &cmd, unsigned instances) { cmd.set_primitive_topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST); cmd.draw(3, instances); } void CommandBufferUtil::draw_quad(CommandBuffer &cmd, unsigned instances) { cmd.set_primitive_topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP); cmd.draw(4, instances); } void CommandBufferUtil::draw_fullscreen_quad(CommandBuffer &cmd, const std::string &vertex, const std::string &fragment, const std::vector> &defines) { draw_fullscreen_quad_depth(cmd, vertex, fragment, false, false, VK_COMPARE_OP_ALWAYS, defines); } void CommandBufferUtil::draw_fullscreen_quad_depth(CommandBuffer &cmd, const std::string &vertex, const std::string &fragment, bool depth_test, bool depth_write, VkCompareOp depth_compare, const std::vector> &defines) { setup_fullscreen_quad(cmd, vertex, fragment, defines, depth_test, depth_write, depth_compare); draw_fullscreen_quad(cmd); } void CommandBufferUtil::setup_fullscreen_quad(Vulkan::CommandBuffer &cmd, const std::string &vertex, const std::string &fragment, const std::vector> &defines, bool depth_test, bool depth_write, VkCompareOp depth_compare) { cmd.set_program(vertex, fragment, defines); cmd.set_quad_state(); set_fullscreen_quad_vertex_state(cmd); cmd.set_depth_test(depth_test, depth_write); cmd.set_depth_compare(depth_compare); cmd.set_primitive_topology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST); } #endif void CommandBufferDeleter::operator()(Vulkan::CommandBuffer *cmd) { cmd->device->handle_pool.command_buffers.free(cmd); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/command_buffer.hpp000066400000000000000000000722271415063341600245330ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "buffer.hpp" #include "buffer_pool.hpp" #include "vulkan_headers.hpp" #include "image.hpp" #include "pipeline_event.hpp" #include "query_pool.hpp" #include "render_pass.hpp" #include "sampler.hpp" #include "shader.hpp" #include "vulkan_common.hpp" #include namespace Vulkan { class DebugChannelInterface; enum CommandBufferDirtyBits { COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT = 1 << 0, COMMAND_BUFFER_DIRTY_PIPELINE_BIT = 1 << 1, COMMAND_BUFFER_DIRTY_VIEWPORT_BIT = 1 << 2, COMMAND_BUFFER_DIRTY_SCISSOR_BIT = 1 << 3, COMMAND_BUFFER_DIRTY_DEPTH_BIAS_BIT = 1 << 4, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT = 1 << 5, COMMAND_BUFFER_DIRTY_STATIC_VERTEX_BIT = 1 << 6, COMMAND_BUFFER_DIRTY_PUSH_CONSTANTS_BIT = 1 << 7, COMMAND_BUFFER_DYNAMIC_BITS = COMMAND_BUFFER_DIRTY_VIEWPORT_BIT | COMMAND_BUFFER_DIRTY_SCISSOR_BIT | COMMAND_BUFFER_DIRTY_DEPTH_BIAS_BIT | COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT }; using CommandBufferDirtyFlags = uint32_t; #define COMPARE_OP_BITS 3 #define STENCIL_OP_BITS 3 #define BLEND_FACTOR_BITS 5 #define BLEND_OP_BITS 3 #define CULL_MODE_BITS 2 #define FRONT_FACE_BITS 1 union PipelineState { struct { // Depth state. unsigned depth_write : 1; unsigned depth_test : 1; unsigned blend_enable : 1; unsigned cull_mode : CULL_MODE_BITS; unsigned front_face : FRONT_FACE_BITS; unsigned depth_bias_enable : 1; unsigned depth_compare : COMPARE_OP_BITS; unsigned stencil_test : 1; unsigned stencil_front_fail : STENCIL_OP_BITS; unsigned stencil_front_pass : STENCIL_OP_BITS; unsigned stencil_front_depth_fail : STENCIL_OP_BITS; unsigned stencil_front_compare_op : COMPARE_OP_BITS; unsigned stencil_back_fail : STENCIL_OP_BITS; unsigned stencil_back_pass : STENCIL_OP_BITS; unsigned stencil_back_depth_fail : STENCIL_OP_BITS; unsigned stencil_back_compare_op : COMPARE_OP_BITS; unsigned alpha_to_coverage : 1; unsigned alpha_to_one : 1; unsigned sample_shading : 1; unsigned src_color_blend : BLEND_FACTOR_BITS; unsigned dst_color_blend : BLEND_FACTOR_BITS; unsigned color_blend_op : BLEND_OP_BITS; unsigned src_alpha_blend : BLEND_FACTOR_BITS; unsigned dst_alpha_blend : BLEND_FACTOR_BITS; unsigned alpha_blend_op : BLEND_OP_BITS; unsigned primitive_restart : 1; unsigned topology : 4; unsigned wireframe : 1; unsigned subgroup_control_size : 1; unsigned subgroup_full_group : 1; unsigned subgroup_minimum_size_log2 : 3; unsigned subgroup_maximum_size_log2 : 3; unsigned conservative_raster : 1; uint32_t write_mask; } state; uint32_t words[4]; }; struct PotentialState { float blend_constants[4]; uint32_t spec_constants[VULKAN_NUM_SPEC_CONSTANTS]; uint8_t spec_constant_mask; }; struct DynamicState { float depth_bias_constant = 0.0f; float depth_bias_slope = 0.0f; uint8_t front_compare_mask = 0; uint8_t front_write_mask = 0; uint8_t front_reference = 0; uint8_t back_compare_mask = 0; uint8_t back_write_mask = 0; uint8_t back_reference = 0; }; struct VertexAttribState { uint32_t binding; VkFormat format; uint32_t offset; }; struct IndexState { VkBuffer buffer; VkDeviceSize offset; VkIndexType index_type; }; struct VertexBindingState { VkBuffer buffers[VULKAN_NUM_VERTEX_BUFFERS]; VkDeviceSize offsets[VULKAN_NUM_VERTEX_BUFFERS]; }; enum CommandBufferSavedStateBits { COMMAND_BUFFER_SAVED_BINDINGS_0_BIT = 1u << 0, COMMAND_BUFFER_SAVED_BINDINGS_1_BIT = 1u << 1, COMMAND_BUFFER_SAVED_BINDINGS_2_BIT = 1u << 2, COMMAND_BUFFER_SAVED_BINDINGS_3_BIT = 1u << 3, COMMAND_BUFFER_SAVED_VIEWPORT_BIT = 1u << 4, COMMAND_BUFFER_SAVED_SCISSOR_BIT = 1u << 5, COMMAND_BUFFER_SAVED_RENDER_STATE_BIT = 1u << 6, COMMAND_BUFFER_SAVED_PUSH_CONSTANT_BIT = 1u << 7 }; static_assert(VULKAN_NUM_DESCRIPTOR_SETS == 4, "Number of descriptor sets != 4."); using CommandBufferSaveStateFlags = uint32_t; struct CommandBufferSavedState { CommandBufferSaveStateFlags flags = 0; ResourceBindings bindings; VkViewport viewport; VkRect2D scissor; PipelineState static_state; PotentialState potential_static_state; DynamicState dynamic_state; }; struct DeferredPipelineCompile { Program *program; const RenderPass *compatible_render_pass; PipelineState static_state; PotentialState potential_static_state; VertexAttribState attribs[VULKAN_NUM_VERTEX_ATTRIBS]; VkDeviceSize strides[VULKAN_NUM_VERTEX_BUFFERS]; VkVertexInputRate input_rates[VULKAN_NUM_VERTEX_BUFFERS]; unsigned subpass_index; Util::Hash hash; VkPipelineCache cache; uint32_t subgroup_size_tag; }; class CommandBuffer; struct CommandBufferDeleter { void operator()(CommandBuffer *cmd); }; class Device; class CommandBuffer : public Util::IntrusivePtrEnabled { public: friend struct CommandBufferDeleter; enum class Type { Generic = QUEUE_INDEX_GRAPHICS, AsyncCompute = QUEUE_INDEX_COMPUTE, AsyncTransfer = QUEUE_INDEX_TRANSFER, VideoDecode = QUEUE_INDEX_VIDEO_DECODE, AsyncGraphics = QUEUE_INDEX_COUNT, // Aliases with either Generic or AsyncCompute queue Count }; ~CommandBuffer(); VkCommandBuffer get_command_buffer() const { return cmd; } void begin_region(const char *name, const float *color = nullptr); void end_region(); Device &get_device() { return *device; } VkPipelineStageFlags swapchain_touched_in_stages() const { return uses_swapchain_in_stages; } // Only used when using swapchain in non-obvious ways, like compute or transfer. void swapchain_touch_in_stages(VkPipelineStageFlags stages) { uses_swapchain_in_stages |= stages; } void set_thread_index(unsigned index_) { thread_index = index_; } unsigned get_thread_index() const { return thread_index; } void set_is_secondary() { is_secondary = true; } bool get_is_secondary() const { return is_secondary; } void clear_image(const Image &image, const VkClearValue &value); void clear_image(const Image &image, const VkClearValue &value, VkImageAspectFlags aspect); void clear_quad(unsigned attachment, const VkClearRect &rect, const VkClearValue &value, VkImageAspectFlags = VK_IMAGE_ASPECT_COLOR_BIT); void clear_quad(const VkClearRect &rect, const VkClearAttachment *attachments, unsigned num_attachments); void fill_buffer(const Buffer &dst, uint32_t value); void fill_buffer(const Buffer &dst, uint32_t value, VkDeviceSize offset, VkDeviceSize size); void copy_buffer(const Buffer &dst, VkDeviceSize dst_offset, const Buffer &src, VkDeviceSize src_offset, VkDeviceSize size); void copy_buffer(const Buffer &dst, const Buffer &src); void copy_buffer(const Buffer &dst, const Buffer &src, const VkBufferCopy *copies, size_t count); void copy_image(const Image &dst, const Image &src); void copy_image(const Image &dst, const Image &src, const VkOffset3D &dst_offset, const VkOffset3D &src_offset, const VkExtent3D &extent, const VkImageSubresourceLayers &dst_subresource, const VkImageSubresourceLayers &src_subresource); void copy_buffer_to_image(const Image &image, const Buffer &buffer, VkDeviceSize buffer_offset, const VkOffset3D &offset, const VkExtent3D &extent, unsigned row_length, unsigned slice_height, const VkImageSubresourceLayers &subresrouce); void copy_buffer_to_image(const Image &image, const Buffer &buffer, unsigned num_blits, const VkBufferImageCopy *blits); void copy_image_to_buffer(const Buffer &buffer, const Image &image, unsigned num_blits, const VkBufferImageCopy *blits); void copy_image_to_buffer(const Buffer &dst, const Image &src, VkDeviceSize buffer_offset, const VkOffset3D &offset, const VkExtent3D &extent, unsigned row_length, unsigned slice_height, const VkImageSubresourceLayers &subresrouce); void full_barrier(); void pixel_barrier(); void barrier(VkPipelineStageFlags src_stage, VkAccessFlags src_access, VkPipelineStageFlags dst_stage, VkAccessFlags dst_access); PipelineEvent signal_event(VkPipelineStageFlags stages); void complete_signal_event(const EventHolder &event); void wait_events(unsigned num_events, const VkEvent *events, VkPipelineStageFlags src_stages, VkPipelineStageFlags dst_stages, unsigned barriers, const VkMemoryBarrier *globals, unsigned buffer_barriers, const VkBufferMemoryBarrier *buffers, unsigned image_barriers, const VkImageMemoryBarrier *images); void barrier(VkPipelineStageFlags src_stages, VkPipelineStageFlags dst_stages, unsigned barriers, const VkMemoryBarrier *globals, unsigned buffer_barriers, const VkBufferMemoryBarrier *buffers, unsigned image_barriers, const VkImageMemoryBarrier *images); void buffer_barrier(const Buffer &buffer, VkPipelineStageFlags src_stage, VkAccessFlags src_access, VkPipelineStageFlags dst_stage, VkAccessFlags dst_access); void image_barrier(const Image &image, VkImageLayout old_layout, VkImageLayout new_layout, VkPipelineStageFlags src_stage, VkAccessFlags src_access, VkPipelineStageFlags dst_stage, VkAccessFlags dst_access); void blit_image(const Image &dst, const Image &src, const VkOffset3D &dst_offset0, const VkOffset3D &dst_extent, const VkOffset3D &src_offset0, const VkOffset3D &src_extent, unsigned dst_level, unsigned src_level, unsigned dst_base_layer = 0, uint32_t src_base_layer = 0, unsigned num_layers = 1, VkFilter filter = VK_FILTER_LINEAR); // Prepares an image to have its mipmap generated. // Puts the top-level into TRANSFER_SRC_OPTIMAL, and all other levels are invalidated with an UNDEFINED -> TRANSFER_DST_OPTIMAL. void barrier_prepare_generate_mipmap(const Image &image, VkImageLayout base_level_layout, VkPipelineStageFlags src_stage, VkAccessFlags src_access, bool need_top_level_barrier = true); // The image must have been transitioned with barrier_prepare_generate_mipmap before calling this function. // After calling this function, the image will be entirely in TRANSFER_SRC_OPTIMAL layout. // Wait for TRANSFER stage to drain before transitioning away from TRANSFER_SRC_OPTIMAL. void generate_mipmap(const Image &image); void begin_render_pass(const RenderPassInfo &info, VkSubpassContents contents = VK_SUBPASS_CONTENTS_INLINE); void next_subpass(VkSubpassContents contents = VK_SUBPASS_CONTENTS_INLINE); void end_render_pass(); void submit_secondary(Util::IntrusivePtr secondary); inline unsigned get_current_subpass() const { return pipeline_state.subpass_index; } Util::IntrusivePtr request_secondary_command_buffer(unsigned thread_index, unsigned subpass); static Util::IntrusivePtr request_secondary_command_buffer(Device &device, const RenderPassInfo &rp, unsigned thread_index, unsigned subpass); void set_program(Program *program); #ifdef GRANITE_VULKAN_FILESYSTEM // Convenience functions for one-off shader binds. void set_program(const std::string &vertex, const std::string &fragment, const std::vector> &defines = {}); void set_program(const std::string &compute, const std::vector> &defines = {}); #endif void set_buffer_view(unsigned set, unsigned binding, const BufferView &view); void set_input_attachments(unsigned set, unsigned start_binding); void set_texture(unsigned set, unsigned binding, const ImageView &view); void set_unorm_texture(unsigned set, unsigned binding, const ImageView &view); void set_srgb_texture(unsigned set, unsigned binding, const ImageView &view); void set_texture(unsigned set, unsigned binding, const ImageView &view, const Sampler &sampler); void set_texture(unsigned set, unsigned binding, const ImageView &view, StockSampler sampler); void set_storage_texture(unsigned set, unsigned binding, const ImageView &view); void set_unorm_storage_texture(unsigned set, unsigned binding, const ImageView &view); void set_sampler(unsigned set, unsigned binding, const Sampler &sampler); void set_sampler(unsigned set, unsigned binding, StockSampler sampler); void set_uniform_buffer(unsigned set, unsigned binding, const Buffer &buffer); void set_uniform_buffer(unsigned set, unsigned binding, const Buffer &buffer, VkDeviceSize offset, VkDeviceSize range); void set_storage_buffer(unsigned set, unsigned binding, const Buffer &buffer); void set_storage_buffer(unsigned set, unsigned binding, const Buffer &buffer, VkDeviceSize offset, VkDeviceSize range); void set_bindless(unsigned set, VkDescriptorSet desc_set); void push_constants(const void *data, VkDeviceSize offset, VkDeviceSize range); void *allocate_constant_data(unsigned set, unsigned binding, VkDeviceSize size); template T *allocate_typed_constant_data(unsigned set, unsigned binding, unsigned count) { return static_cast(allocate_constant_data(set, binding, count * sizeof(T))); } void *allocate_vertex_data(unsigned binding, VkDeviceSize size, VkDeviceSize stride, VkVertexInputRate step_rate = VK_VERTEX_INPUT_RATE_VERTEX); void *allocate_index_data(VkDeviceSize size, VkIndexType index_type); void *update_buffer(const Buffer &buffer, VkDeviceSize offset, VkDeviceSize size); void *update_image(const Image &image, const VkOffset3D &offset, const VkExtent3D &extent, uint32_t row_length, uint32_t image_height, const VkImageSubresourceLayers &subresource); void *update_image(const Image &image, uint32_t row_length = 0, uint32_t image_height = 0); void set_viewport(const VkViewport &viewport); const VkViewport &get_viewport() const; void set_scissor(const VkRect2D &rect); void set_vertex_attrib(uint32_t attrib, uint32_t binding, VkFormat format, VkDeviceSize offset); void set_vertex_binding(uint32_t binding, const Buffer &buffer, VkDeviceSize offset, VkDeviceSize stride, VkVertexInputRate step_rate = VK_VERTEX_INPUT_RATE_VERTEX); void set_index_buffer(const Buffer &buffer, VkDeviceSize offset, VkIndexType index_type); void draw(uint32_t vertex_count, uint32_t instance_count = 1, uint32_t first_vertex = 0, uint32_t first_instance = 0); void draw_indexed(uint32_t index_count, uint32_t instance_count = 1, uint32_t first_index = 0, int32_t vertex_offset = 0, uint32_t first_instance = 0); void dispatch(uint32_t groups_x, uint32_t groups_y, uint32_t groups_z); void draw_indirect(const Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride); void draw_indexed_indirect(const Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride); void draw_multi_indirect(const Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride, const Buffer &count, uint32_t count_offset); void draw_indexed_multi_indirect(const Buffer &buffer, uint32_t offset, uint32_t draw_count, uint32_t stride, const Buffer &count, uint32_t count_offset); void dispatch_indirect(const Buffer &buffer, uint32_t offset); void set_opaque_state(); void set_quad_state(); void set_opaque_sprite_state(); void set_transparent_sprite_state(); void save_state(CommandBufferSaveStateFlags flags, CommandBufferSavedState &state); void restore_state(const CommandBufferSavedState &state); #define SET_STATIC_STATE(value) \ do \ { \ if (pipeline_state.static_state.state.value != value) \ { \ pipeline_state.static_state.state.value = value; \ set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); \ } \ } while (0) #define SET_POTENTIALLY_STATIC_STATE(value) \ do \ { \ if (pipeline_state.potential_static_state.value != value) \ { \ pipeline_state.potential_static_state.value = value; \ set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); \ } \ } while (0) inline void set_depth_test(bool depth_test, bool depth_write) { SET_STATIC_STATE(depth_test); SET_STATIC_STATE(depth_write); } inline void set_wireframe(bool wireframe) { SET_STATIC_STATE(wireframe); } inline void set_depth_compare(VkCompareOp depth_compare) { SET_STATIC_STATE(depth_compare); } inline void set_blend_enable(bool blend_enable) { SET_STATIC_STATE(blend_enable); } inline void set_blend_factors(VkBlendFactor src_color_blend, VkBlendFactor src_alpha_blend, VkBlendFactor dst_color_blend, VkBlendFactor dst_alpha_blend) { SET_STATIC_STATE(src_color_blend); SET_STATIC_STATE(dst_color_blend); SET_STATIC_STATE(src_alpha_blend); SET_STATIC_STATE(dst_alpha_blend); } inline void set_blend_factors(VkBlendFactor src_blend, VkBlendFactor dst_blend) { set_blend_factors(src_blend, src_blend, dst_blend, dst_blend); } inline void set_blend_op(VkBlendOp color_blend_op, VkBlendOp alpha_blend_op) { SET_STATIC_STATE(color_blend_op); SET_STATIC_STATE(alpha_blend_op); } inline void set_blend_op(VkBlendOp blend_op) { set_blend_op(blend_op, blend_op); } inline void set_depth_bias(bool depth_bias_enable) { SET_STATIC_STATE(depth_bias_enable); } inline void set_color_write_mask(uint32_t write_mask) { SET_STATIC_STATE(write_mask); } inline void set_stencil_test(bool stencil_test) { SET_STATIC_STATE(stencil_test); } inline void set_stencil_front_ops(VkCompareOp stencil_front_compare_op, VkStencilOp stencil_front_pass, VkStencilOp stencil_front_fail, VkStencilOp stencil_front_depth_fail) { SET_STATIC_STATE(stencil_front_compare_op); SET_STATIC_STATE(stencil_front_pass); SET_STATIC_STATE(stencil_front_fail); SET_STATIC_STATE(stencil_front_depth_fail); } inline void set_stencil_back_ops(VkCompareOp stencil_back_compare_op, VkStencilOp stencil_back_pass, VkStencilOp stencil_back_fail, VkStencilOp stencil_back_depth_fail) { SET_STATIC_STATE(stencil_back_compare_op); SET_STATIC_STATE(stencil_back_pass); SET_STATIC_STATE(stencil_back_fail); SET_STATIC_STATE(stencil_back_depth_fail); } inline void set_stencil_ops(VkCompareOp stencil_compare_op, VkStencilOp stencil_pass, VkStencilOp stencil_fail, VkStencilOp stencil_depth_fail) { set_stencil_front_ops(stencil_compare_op, stencil_pass, stencil_fail, stencil_depth_fail); set_stencil_back_ops(stencil_compare_op, stencil_pass, stencil_fail, stencil_depth_fail); } inline void set_primitive_topology(VkPrimitiveTopology topology) { SET_STATIC_STATE(topology); } inline void set_primitive_restart(bool primitive_restart) { SET_STATIC_STATE(primitive_restart); } inline void set_multisample_state(bool alpha_to_coverage, bool alpha_to_one = false, bool sample_shading = false) { SET_STATIC_STATE(alpha_to_coverage); SET_STATIC_STATE(alpha_to_one); SET_STATIC_STATE(sample_shading); } inline void set_front_face(VkFrontFace front_face) { SET_STATIC_STATE(front_face); } inline void set_cull_mode(VkCullModeFlags cull_mode) { SET_STATIC_STATE(cull_mode); } inline void set_blend_constants(const float blend_constants[4]) { SET_POTENTIALLY_STATIC_STATE(blend_constants[0]); SET_POTENTIALLY_STATIC_STATE(blend_constants[1]); SET_POTENTIALLY_STATIC_STATE(blend_constants[2]); SET_POTENTIALLY_STATIC_STATE(blend_constants[3]); } inline void set_specialization_constant_mask(uint32_t spec_constant_mask) { VK_ASSERT((spec_constant_mask & ~((1u << VULKAN_NUM_SPEC_CONSTANTS) - 1u)) == 0u); SET_POTENTIALLY_STATIC_STATE(spec_constant_mask); } template inline void set_specialization_constant(unsigned index, const T &value) { VK_ASSERT(index < VULKAN_NUM_SPEC_CONSTANTS); static_assert(sizeof(value) == sizeof(uint32_t), "Spec constant data must be 32-bit."); if (memcmp(&pipeline_state.potential_static_state.spec_constants[index], &value, sizeof(value))) { memcpy(&pipeline_state.potential_static_state.spec_constants[index], &value, sizeof(value)); if (pipeline_state.potential_static_state.spec_constant_mask & (1u << index)) set_dirty(COMMAND_BUFFER_DIRTY_STATIC_STATE_BIT); } } void set_surface_transform_specialization_constants(unsigned base_index); inline void enable_subgroup_size_control(bool subgroup_control_size) { SET_STATIC_STATE(subgroup_control_size); } inline void set_subgroup_size_log2(bool subgroup_full_group, uint8_t subgroup_minimum_size_log2, uint8_t subgroup_maximum_size_log2) { VK_ASSERT(subgroup_minimum_size_log2 < 8); VK_ASSERT(subgroup_maximum_size_log2 < 8); SET_STATIC_STATE(subgroup_full_group); SET_STATIC_STATE(subgroup_minimum_size_log2); SET_STATIC_STATE(subgroup_maximum_size_log2); } inline void set_conservative_rasterization(bool conservative_raster) { SET_STATIC_STATE(conservative_raster); } #define SET_DYNAMIC_STATE(state, flags) \ do \ { \ if (dynamic_state.state != state) \ { \ dynamic_state.state = state; \ set_dirty(flags); \ } \ } while (0) inline void set_depth_bias(float depth_bias_constant, float depth_bias_slope) { SET_DYNAMIC_STATE(depth_bias_constant, COMMAND_BUFFER_DIRTY_DEPTH_BIAS_BIT); SET_DYNAMIC_STATE(depth_bias_slope, COMMAND_BUFFER_DIRTY_DEPTH_BIAS_BIT); } inline void set_stencil_front_reference(uint8_t front_compare_mask, uint8_t front_write_mask, uint8_t front_reference) { SET_DYNAMIC_STATE(front_compare_mask, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT); SET_DYNAMIC_STATE(front_write_mask, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT); SET_DYNAMIC_STATE(front_reference, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT); } inline void set_stencil_back_reference(uint8_t back_compare_mask, uint8_t back_write_mask, uint8_t back_reference) { SET_DYNAMIC_STATE(back_compare_mask, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT); SET_DYNAMIC_STATE(back_write_mask, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT); SET_DYNAMIC_STATE(back_reference, COMMAND_BUFFER_DIRTY_STENCIL_REFERENCE_BIT); } inline void set_stencil_reference(uint8_t compare_mask, uint8_t write_mask, uint8_t reference) { set_stencil_front_reference(compare_mask, write_mask, reference); set_stencil_back_reference(compare_mask, write_mask, reference); } inline Type get_command_buffer_type() const { return type; } QueryPoolHandle write_timestamp(VkPipelineStageFlagBits stage); void add_checkpoint(const char *tag); void set_backtrace_checkpoint(); // Used when recording command buffers in a thread, and submitting them in a different thread. // Need to make sure that no further commands on the VkCommandBuffer happen. void end_threaded_recording(); // End is called automatically by Device in submission. Should not be called by application. void end(); void enable_profiling(); bool has_profiling() const; void begin_debug_channel(DebugChannelInterface *iface, const char *tag, VkDeviceSize size); void end_debug_channel(); void extract_pipeline_state(DeferredPipelineCompile &compile) const; static VkPipeline build_graphics_pipeline(Device *device, const DeferredPipelineCompile &compile); static VkPipeline build_compute_pipeline(Device *device, const DeferredPipelineCompile &compile); bool flush_pipeline_state_without_blocking(); private: friend class Util::ObjectPool; CommandBuffer(Device *device, VkCommandBuffer cmd, VkPipelineCache cache, Type type); Device *device; const VolkDeviceTable &table; VkCommandBuffer cmd; Type type; const Framebuffer *framebuffer = nullptr; const RenderPass *actual_render_pass = nullptr; const Vulkan::ImageView *framebuffer_attachments[VULKAN_NUM_ATTACHMENTS + 1] = {}; IndexState index_state = {}; VertexBindingState vbo = {}; ResourceBindings bindings; VkDescriptorSet bindless_sets[VULKAN_NUM_DESCRIPTOR_SETS] = {}; VkDescriptorSet allocated_sets[VULKAN_NUM_DESCRIPTOR_SETS] = {}; VkPipeline current_pipeline = VK_NULL_HANDLE; VkPipelineLayout current_pipeline_layout = VK_NULL_HANDLE; PipelineLayout *current_layout = nullptr; VkSubpassContents current_contents = VK_SUBPASS_CONTENTS_INLINE; unsigned thread_index = 0; VkViewport viewport = {}; VkRect2D scissor = {}; CommandBufferDirtyFlags dirty = ~0u; uint32_t dirty_sets = 0; uint32_t dirty_sets_dynamic = 0; uint32_t dirty_vbos = 0; uint32_t active_vbos = 0; VkPipelineStageFlags uses_swapchain_in_stages = 0; bool is_compute = true; bool is_secondary = false; bool is_ended = false; void set_dirty(CommandBufferDirtyFlags flags) { dirty |= flags; } CommandBufferDirtyFlags get_and_clear(CommandBufferDirtyFlags flags) { auto mask = dirty & flags; dirty &= ~flags; return mask; } DeferredPipelineCompile pipeline_state = {}; DynamicState dynamic_state = {}; #ifndef _MSC_VER static_assert(sizeof(pipeline_state.static_state.words) >= sizeof(pipeline_state.static_state.state), "Hashable pipeline state is not large enough!"); #endif bool flush_render_state(bool synchronous); bool flush_compute_state(bool synchronous); void clear_render_state(); bool flush_graphics_pipeline(bool synchronous); bool flush_compute_pipeline(bool synchronous); void flush_descriptor_sets(); void begin_graphics(); void flush_descriptor_set(uint32_t set); void rebind_descriptor_set(uint32_t set); void begin_compute(); void begin_context(); BufferBlock vbo_block; BufferBlock ibo_block; BufferBlock ubo_block; BufferBlock staging_block; void set_texture(unsigned set, unsigned binding, VkImageView float_view, VkImageView integer_view, VkImageLayout layout, uint64_t cookie); void init_viewport_scissor(const RenderPassInfo &info, const Framebuffer *framebuffer); void init_surface_transform(const RenderPassInfo &info); VkSurfaceTransformFlagBitsKHR current_framebuffer_surface_transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; bool profiling = false; std::string debug_channel_tag; Vulkan::BufferHandle debug_channel_buffer; DebugChannelInterface *debug_channel_interface = nullptr; static void update_hash_graphics_pipeline(DeferredPipelineCompile &compile, uint32_t &active_vbos); static void update_hash_compute_pipeline(DeferredPipelineCompile &compile); }; #ifdef GRANITE_VULKAN_FILESYSTEM struct CommandBufferUtil { static void draw_fullscreen_quad(CommandBuffer &cmd, const std::string &vertex, const std::string &fragment, const std::vector> &defines = {}); static void draw_fullscreen_quad_depth(CommandBuffer &cmd, const std::string &vertex, const std::string &fragment, bool depth_test, bool depth_write, VkCompareOp depth_compare, const std::vector> &defines = {}); static void set_fullscreen_quad_vertex_state(CommandBuffer &cmd); static void set_quad_vertex_state(CommandBuffer &cmd); static void setup_fullscreen_quad(CommandBuffer &cmd, const std::string &vertex, const std::string &fragment, const std::vector> &defines = {}, bool depth_test = false, bool depth_write = false, VkCompareOp depth_compare = VK_COMPARE_OP_ALWAYS); static void draw_fullscreen_quad(CommandBuffer &cmd, unsigned instances = 1); static void draw_quad(CommandBuffer &cmd, unsigned instances = 1); }; #endif using CommandBufferHandle = Util::IntrusivePtr; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/command_pool.cpp000066400000000000000000000123071415063341600242170ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "command_pool.hpp" #include "device.hpp" namespace Vulkan { CommandPool::CommandPool(Device *device_, uint32_t queue_family_index) : device(device_), table(&device_->get_device_table()) { VkCommandPoolCreateInfo info = { VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO }; info.flags = VK_COMMAND_POOL_CREATE_TRANSIENT_BIT; info.queueFamilyIndex = queue_family_index; if (queue_family_index != VK_QUEUE_FAMILY_IGNORED) table->vkCreateCommandPool(device->get_device(), &info, nullptr, &pool); } CommandPool::CommandPool(CommandPool &&other) noexcept { *this = std::move(other); } CommandPool &CommandPool::operator=(CommandPool &&other) noexcept { if (this != &other) { device = other.device; table = other.table; if (!buffers.empty()) table->vkFreeCommandBuffers(device->get_device(), pool, buffers.size(), buffers.data()); if (pool != VK_NULL_HANDLE) table->vkDestroyCommandPool(device->get_device(), pool, nullptr); pool = VK_NULL_HANDLE; buffers.clear(); std::swap(pool, other.pool); std::swap(buffers, other.buffers); index = other.index; other.index = 0; #ifdef VULKAN_DEBUG in_flight.clear(); std::swap(in_flight, other.in_flight); #endif } return *this; } CommandPool::~CommandPool() { if (!buffers.empty()) table->vkFreeCommandBuffers(device->get_device(), pool, buffers.size(), buffers.data()); if (!secondary_buffers.empty()) table->vkFreeCommandBuffers(device->get_device(), pool, secondary_buffers.size(), secondary_buffers.data()); if (pool != VK_NULL_HANDLE) table->vkDestroyCommandPool(device->get_device(), pool, nullptr); } void CommandPool::signal_submitted(VkCommandBuffer cmd) { #ifdef VULKAN_DEBUG VK_ASSERT(in_flight.find(cmd) != end(in_flight)); in_flight.erase(cmd); #else (void)cmd; #endif } VkCommandBuffer CommandPool::request_secondary_command_buffer() { VK_ASSERT(pool != VK_NULL_HANDLE); if (secondary_index < secondary_buffers.size()) { auto ret = secondary_buffers[secondary_index++]; #ifdef VULKAN_DEBUG VK_ASSERT(in_flight.find(ret) == end(in_flight)); in_flight.insert(ret); #endif return ret; } else { VkCommandBuffer cmd; VkCommandBufferAllocateInfo info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO }; info.commandPool = pool; info.level = VK_COMMAND_BUFFER_LEVEL_SECONDARY; info.commandBufferCount = 1; table->vkAllocateCommandBuffers(device->get_device(), &info, &cmd); #ifdef VULKAN_DEBUG VK_ASSERT(in_flight.find(cmd) == end(in_flight)); in_flight.insert(cmd); #endif secondary_buffers.push_back(cmd); secondary_index++; return cmd; } } VkCommandBuffer CommandPool::request_command_buffer() { VK_ASSERT(pool != VK_NULL_HANDLE); if (index < buffers.size()) { auto ret = buffers[index++]; #ifdef VULKAN_DEBUG VK_ASSERT(in_flight.find(ret) == end(in_flight)); in_flight.insert(ret); #endif return ret; } else { VkCommandBuffer cmd; VkCommandBufferAllocateInfo info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO }; info.commandPool = pool; info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; info.commandBufferCount = 1; table->vkAllocateCommandBuffers(device->get_device(), &info, &cmd); #ifdef VULKAN_DEBUG VK_ASSERT(in_flight.find(cmd) == end(in_flight)); in_flight.insert(cmd); #endif buffers.push_back(cmd); index++; return cmd; } } void CommandPool::begin() { if (pool == VK_NULL_HANDLE) return; #ifdef VULKAN_DEBUG VK_ASSERT(in_flight.empty()); #endif if (index > 0 || secondary_index > 0) table->vkResetCommandPool(device->get_device(), pool, 0); index = 0; secondary_index = 0; } void CommandPool::trim() { if (pool == VK_NULL_HANDLE) return; table->vkResetCommandPool(device->get_device(), pool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT); if (!buffers.empty()) table->vkFreeCommandBuffers(device->get_device(), pool, buffers.size(), buffers.data()); if (!secondary_buffers.empty()) table->vkFreeCommandBuffers(device->get_device(), pool, secondary_buffers.size(), secondary_buffers.data()); buffers.clear(); secondary_buffers.clear(); if (device->get_device_features().supports_maintenance_1) table->vkTrimCommandPoolKHR(device->get_device(), pool, 0); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/command_pool.hpp000066400000000000000000000037511415063341600242270ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include #include namespace Vulkan { class Device; class CommandPool { public: CommandPool(Device *device, uint32_t queue_family_index); ~CommandPool(); CommandPool(CommandPool &&) noexcept; CommandPool &operator=(CommandPool &&) noexcept; CommandPool(const CommandPool &) = delete; void operator=(const CommandPool &) = delete; void begin(); void trim(); VkCommandBuffer request_command_buffer(); VkCommandBuffer request_secondary_command_buffer(); void signal_submitted(VkCommandBuffer cmd); private: Device *device; const VolkDeviceTable *table; VkCommandPool pool = VK_NULL_HANDLE; std::vector buffers; std::vector secondary_buffers; #ifdef VULKAN_DEBUG std::unordered_set in_flight; #endif unsigned index = 0; unsigned secondary_index = 0; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/context.cpp000066400000000000000000001267401415063341600232430ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "context.hpp" #include "small_vector.hpp" #include #include #include #include #ifndef _WIN32 #include #elif defined(_WIN32) #define WIN32_LEAN_AND_MEAN #include #endif //#undef VULKAN_DEBUG using namespace std; namespace Vulkan { bool Context::init_instance_and_device(const char **instance_ext, uint32_t instance_ext_count, const char **device_ext, uint32_t device_ext_count, ContextCreationFlags flags) { destroy(); owned_instance = true; owned_device = true; if (!create_instance(instance_ext, instance_ext_count)) { destroy(); LOGE("Failed to create Vulkan instance.\n"); return false; } VkPhysicalDeviceFeatures features = {}; if (!create_device(VK_NULL_HANDLE, VK_NULL_HANDLE, device_ext, device_ext_count, nullptr, 0, &features, flags)) { destroy(); LOGE("Failed to create Vulkan device.\n"); return false; } return true; } static mutex loader_init_lock; static bool loader_init_once; static PFN_vkGetInstanceProcAddr instance_proc_addr; PFN_vkGetInstanceProcAddr Context::get_instance_proc_addr() { return instance_proc_addr; } bool Context::init_loader(PFN_vkGetInstanceProcAddr addr) { lock_guard holder(loader_init_lock); if (loader_init_once && !addr) return true; if (!addr) { #ifndef _WIN32 static void *module; if (!module) { const char *vulkan_path = getenv("GRANITE_VULKAN_LIBRARY"); if (vulkan_path) module = dlopen(vulkan_path, RTLD_LOCAL | RTLD_LAZY); #ifdef __APPLE__ if (!module) module = dlopen("libvulkan.1.dylib", RTLD_LOCAL | RTLD_LAZY); #else if (!module) module = dlopen("libvulkan.so.1", RTLD_LOCAL | RTLD_LAZY); if (!module) module = dlopen("libvulkan.so", RTLD_LOCAL | RTLD_LAZY); #endif if (!module) return false; } addr = reinterpret_cast(dlsym(module, "vkGetInstanceProcAddr")); if (!addr) return false; #else static HMODULE module; if (!module) { module = LoadLibraryA("vulkan-1.dll"); if (!module) return false; } // Ugly pointer warning workaround. auto ptr = GetProcAddress(module, "vkGetInstanceProcAddr"); static_assert(sizeof(ptr) == sizeof(addr), "Mismatch pointer type."); memcpy(&addr, &ptr, sizeof(ptr)); if (!addr) return false; #endif } instance_proc_addr = addr; volkInitializeCustom(addr); loader_init_once = true; return true; } bool Context::init_from_instance_and_device(VkInstance instance_, VkPhysicalDevice gpu_, VkDevice device_, VkQueue queue_, uint32_t queue_family_) { destroy(); device = device_; instance = instance_; gpu = gpu_; queue_info = {}; queue_info.queues[QUEUE_INDEX_GRAPHICS] = queue_; queue_info.queues[QUEUE_INDEX_COMPUTE] = queue_; queue_info.queues[QUEUE_INDEX_TRANSFER] = queue_; queue_info.family_indices[QUEUE_INDEX_GRAPHICS] = queue_family_; queue_info.family_indices[QUEUE_INDEX_COMPUTE] = queue_family_; queue_info.family_indices[QUEUE_INDEX_TRANSFER] = queue_family_; owned_instance = false; owned_device = true; volkLoadInstance(instance); volkLoadDeviceTable(&device_table, device); vkGetPhysicalDeviceProperties(gpu, &gpu_props); vkGetPhysicalDeviceMemoryProperties(gpu, &mem_props); return true; } bool Context::init_device_from_instance(VkInstance instance_, VkPhysicalDevice gpu_, VkSurfaceKHR surface, const char **required_device_extensions, unsigned num_required_device_extensions, const char **required_device_layers, unsigned num_required_device_layers, const VkPhysicalDeviceFeatures *required_features, ContextCreationFlags flags) { destroy(); instance = instance_; owned_instance = false; owned_device = true; if (!create_instance(nullptr, 0)) return false; if (!create_device(gpu_, surface, required_device_extensions, num_required_device_extensions, required_device_layers, num_required_device_layers, required_features, flags)) { destroy(); LOGE("Failed to create Vulkan device.\n"); return false; } return true; } void Context::destroy() { if (device != VK_NULL_HANDLE) device_table.vkDeviceWaitIdle(device); #ifdef VULKAN_DEBUG if (debug_messenger) vkDestroyDebugUtilsMessengerEXT(instance, debug_messenger, nullptr); debug_messenger = VK_NULL_HANDLE; #endif if (owned_device && device != VK_NULL_HANDLE) device_table.vkDestroyDevice(device, nullptr); if (owned_instance && instance != VK_NULL_HANDLE) vkDestroyInstance(instance, nullptr); } Context::~Context() { destroy(); } const VkApplicationInfo &Context::get_application_info(bool supports_vulkan_11) { static const VkApplicationInfo info_11 = { VK_STRUCTURE_TYPE_APPLICATION_INFO, nullptr, "Granite", 0, "Granite", 0, VK_API_VERSION_1_1, }; static const VkApplicationInfo info = { VK_STRUCTURE_TYPE_APPLICATION_INFO, nullptr, "Granite", 0, "Granite", 0, VK_MAKE_VERSION(1, 0, 57), }; return supports_vulkan_11 ? info_11 : info; } void Context::notify_validation_error(const char *msg) { if (message_callback) message_callback(msg); } void Context::set_notification_callback(function func) { message_callback = move(func); } #ifdef VULKAN_DEBUG static VKAPI_ATTR VkBool32 VKAPI_CALL vulkan_messenger_cb( VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void *pUserData) { auto *context = static_cast(pUserData); if (messageType == VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) { // Using LINEAR filter with COMPARE. Spec bug, should not trigger validation. if (uint32_t(pCallbackData->messageIdNumber) == 0xf2fea78eu) return VK_FALSE; if (uint32_t(pCallbackData->messageIdNumber) == 0xd2c86c0cu) return VK_FALSE; if (uint32_t(pCallbackData->messageIdNumber) == 0x2aba6354u) return VK_FALSE; } switch (messageSeverity) { case VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT: if (messageType == VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) { LOGE("[Vulkan]: Validation Error: %s\n", pCallbackData->pMessage); context->notify_validation_error(pCallbackData->pMessage); } else LOGE("[Vulkan]: Other Error: %s\n", pCallbackData->pMessage); break; case VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT: if (messageType == VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) LOGW("[Vulkan]: Validation Warning: %s\n", pCallbackData->pMessage); else LOGW("[Vulkan]: Other Warning: %s\n", pCallbackData->pMessage); break; #if 0 case VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT: case VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT: if (messageType == VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) LOGI("[Vulkan]: Validation Info: %s\n", pCallbackData->pMessage); else LOGI("[Vulkan]: Other Info: %s\n", pCallbackData->pMessage); break; #endif default: return VK_FALSE; } bool log_object_names = false; for (uint32_t i = 0; i < pCallbackData->objectCount; i++) { auto *name = pCallbackData->pObjects[i].pObjectName; if (name) { log_object_names = true; break; } } if (log_object_names) { for (uint32_t i = 0; i < pCallbackData->objectCount; i++) { auto *name = pCallbackData->pObjects[i].pObjectName; LOGI(" Object #%u: %s\n", i, name ? name : "N/A"); } } return VK_FALSE; } #endif bool Context::create_instance(const char **instance_ext, uint32_t instance_ext_count) { ext.supports_vulkan_11_instance = volkGetInstanceVersion() >= VK_API_VERSION_1_1; VkInstanceCreateInfo info = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; info.pApplicationInfo = &get_application_info(ext.supports_vulkan_11_instance); vector instance_exts; vector instance_layers; for (uint32_t i = 0; i < instance_ext_count; i++) instance_exts.push_back(instance_ext[i]); uint32_t ext_count = 0; vkEnumerateInstanceExtensionProperties(nullptr, &ext_count, nullptr); vector queried_extensions(ext_count); if (ext_count) vkEnumerateInstanceExtensionProperties(nullptr, &ext_count, queried_extensions.data()); uint32_t layer_count = 0; vkEnumerateInstanceLayerProperties(&layer_count, nullptr); vector queried_layers(layer_count); if (layer_count) vkEnumerateInstanceLayerProperties(&layer_count, queried_layers.data()); LOGI("Layer count: %u\n", layer_count); for (auto &layer : queried_layers) LOGI("Found layer: %s.\n", layer.layerName); const auto has_extension = [&](const char *name) -> bool { auto itr = find_if(begin(queried_extensions), end(queried_extensions), [name](const VkExtensionProperties &e) -> bool { return strcmp(e.extensionName, name) == 0; }); return itr != end(queried_extensions); }; for (uint32_t i = 0; i < instance_ext_count; i++) if (!has_extension(instance_ext[i])) return false; if (has_extension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME)) { ext.supports_physical_device_properties2 = true; instance_exts.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME); } if (ext.supports_physical_device_properties2 && has_extension(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME) && has_extension(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME)) { instance_exts.push_back(VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME); instance_exts.push_back(VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME); ext.supports_external = true; } if (has_extension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { instance_exts.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); ext.supports_debug_utils = true; } auto itr = find_if(instance_ext, instance_ext + instance_ext_count, [](const char *name) { return strcmp(name, VK_KHR_SURFACE_EXTENSION_NAME) == 0; }); bool has_surface_extension = itr != (instance_ext + instance_ext_count); if (has_surface_extension && has_extension(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME)) { instance_exts.push_back(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME); ext.supports_surface_capabilities2 = true; } #ifdef VULKAN_DEBUG const auto has_layer = [&](const char *name) -> bool { auto layer_itr = find_if(begin(queried_layers), end(queried_layers), [name](const VkLayerProperties &e) -> bool { return strcmp(e.layerName, name) == 0; }); return layer_itr != end(queried_layers); }; VkValidationFeaturesEXT validation_features = { VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT }; if (getenv("GRANITE_VULKAN_NO_VALIDATION")) force_no_validation = true; if (!force_no_validation && has_layer("VK_LAYER_KHRONOS_validation")) { instance_layers.push_back("VK_LAYER_KHRONOS_validation"); LOGI("Enabling VK_LAYER_KHRONOS_validation.\n"); uint32_t layer_ext_count = 0; vkEnumerateInstanceExtensionProperties("VK_LAYER_KHRONOS_validation", &layer_ext_count, nullptr); std::vector layer_exts(layer_ext_count); vkEnumerateInstanceExtensionProperties("VK_LAYER_KHRONOS_validation", &layer_ext_count, layer_exts.data()); if (find_if(begin(layer_exts), end(layer_exts), [](const VkExtensionProperties &e) { return strcmp(e.extensionName, VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME) == 0; }) != end(layer_exts)) { instance_exts.push_back(VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME); static const VkValidationFeatureEnableEXT validation_sync_features[1] = { VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT, }; LOGI("Enabling VK_EXT_validation_features for synchronization validation.\n"); validation_features.enabledValidationFeatureCount = 1; validation_features.pEnabledValidationFeatures = validation_sync_features; info.pNext = &validation_features; } if (!ext.supports_debug_utils && find_if(begin(layer_exts), end(layer_exts), [](const VkExtensionProperties &e) { return strcmp(e.extensionName, VK_EXT_DEBUG_UTILS_EXTENSION_NAME) == 0; }) != end(layer_exts)) { instance_exts.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); ext.supports_debug_utils = true; } } #endif info.enabledExtensionCount = instance_exts.size(); info.ppEnabledExtensionNames = instance_exts.empty() ? nullptr : instance_exts.data(); info.enabledLayerCount = instance_layers.size(); info.ppEnabledLayerNames = instance_layers.empty() ? nullptr : instance_layers.data(); for (auto *ext_name : instance_exts) LOGI("Enabling instance extension: %s.\n", ext_name); if (instance == VK_NULL_HANDLE) if (vkCreateInstance(&info, nullptr, &instance) != VK_SUCCESS) return false; volkLoadInstance(instance); #if defined(VULKAN_DEBUG) && !defined(ANDROID) if (ext.supports_debug_utils) { VkDebugUtilsMessengerCreateInfoEXT debug_info = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT }; debug_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT; debug_info.pfnUserCallback = vulkan_messenger_cb; debug_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT; debug_info.pUserData = this; // For some reason, this segfaults Android, sigh ... We get relevant output in logcat anyways. vkCreateDebugUtilsMessengerEXT(instance, &debug_info, nullptr, &debug_messenger); } #endif return true; } static unsigned device_score(VkPhysicalDevice &gpu) { VkPhysicalDeviceProperties props = {}; vkGetPhysicalDeviceProperties(gpu, &props); switch (props.deviceType) { case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU: return 3; case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU: return 2; case VK_PHYSICAL_DEVICE_TYPE_CPU: return 1; default: return 0; } } QueueInfo::QueueInfo() { for (auto &index : family_indices) index = VK_QUEUE_FAMILY_IGNORED; } bool Context::create_device(VkPhysicalDevice gpu_, VkSurfaceKHR surface, const char **required_device_extensions, unsigned num_required_device_extensions, const char **required_device_layers, unsigned num_required_device_layers, const VkPhysicalDeviceFeatures *required_features, ContextCreationFlags flags) { gpu = gpu_; if (gpu == VK_NULL_HANDLE) { uint32_t gpu_count = 0; if (vkEnumeratePhysicalDevices(instance, &gpu_count, nullptr) != VK_SUCCESS) return false; if (gpu_count == 0) return false; vector gpus(gpu_count); if (vkEnumeratePhysicalDevices(instance, &gpu_count, gpus.data()) != VK_SUCCESS) return false; for (auto &g : gpus) { VkPhysicalDeviceProperties props; vkGetPhysicalDeviceProperties(g, &props); LOGI("Found Vulkan GPU: %s\n", props.deviceName); LOGI(" API: %u.%u.%u\n", VK_VERSION_MAJOR(props.apiVersion), VK_VERSION_MINOR(props.apiVersion), VK_VERSION_PATCH(props.apiVersion)); LOGI(" Driver: %u.%u.%u\n", VK_VERSION_MAJOR(props.driverVersion), VK_VERSION_MINOR(props.driverVersion), VK_VERSION_PATCH(props.driverVersion)); } const char *gpu_index = getenv("GRANITE_VULKAN_DEVICE_INDEX"); if (gpu_index) { unsigned index = strtoul(gpu_index, nullptr, 0); if (index < gpu_count) gpu = gpus[index]; } if (gpu == VK_NULL_HANDLE) { unsigned max_score = 0; // Prefer earlier entries in list. for (size_t i = gpus.size(); i; i--) { unsigned score = device_score(gpus[i - 1]); if (score >= max_score) { max_score = score; gpu = gpus[i - 1]; } } } } uint32_t ext_count = 0; vkEnumerateDeviceExtensionProperties(gpu, nullptr, &ext_count, nullptr); vector queried_extensions(ext_count); if (ext_count) vkEnumerateDeviceExtensionProperties(gpu, nullptr, &ext_count, queried_extensions.data()); uint32_t layer_count = 0; vkEnumerateDeviceLayerProperties(gpu, &layer_count, nullptr); vector queried_layers(layer_count); if (layer_count) vkEnumerateDeviceLayerProperties(gpu, &layer_count, queried_layers.data()); const auto has_extension = [&](const char *name) -> bool { auto itr = find_if(begin(queried_extensions), end(queried_extensions), [name](const VkExtensionProperties &e) -> bool { return strcmp(e.extensionName, name) == 0; }); return itr != end(queried_extensions); }; const auto has_layer = [&](const char *name) -> bool { auto itr = find_if(begin(queried_layers), end(queried_layers), [name](const VkLayerProperties &e) -> bool { return strcmp(e.layerName, name) == 0; }); return itr != end(queried_layers); }; for (uint32_t i = 0; i < num_required_device_extensions; i++) if (!has_extension(required_device_extensions[i])) return false; for (uint32_t i = 0; i < num_required_device_layers; i++) if (!has_layer(required_device_layers[i])) return false; vkGetPhysicalDeviceProperties(gpu, &gpu_props); vkGetPhysicalDeviceMemoryProperties(gpu, &mem_props); LOGI("Selected Vulkan GPU: %s\n", gpu_props.deviceName); if (gpu_props.apiVersion >= VK_API_VERSION_1_1) { ext.supports_vulkan_11_device = ext.supports_vulkan_11_instance; LOGI("GPU supports Vulkan 1.1.\n"); } else if (gpu_props.apiVersion >= VK_API_VERSION_1_0) { ext.supports_vulkan_11_device = false; LOGI("GPU supports Vulkan 1.0.\n"); } uint32_t queue_family_count = 0; if (ext.supports_vulkan_11_instance && ext.supports_vulkan_11_device) vkGetPhysicalDeviceQueueFamilyProperties2(gpu, &queue_family_count, nullptr); else if (ext.supports_physical_device_properties2) vkGetPhysicalDeviceQueueFamilyProperties2KHR(gpu, &queue_family_count, nullptr); else vkGetPhysicalDeviceQueueFamilyProperties(gpu, &queue_family_count, nullptr); Util::SmallVector queue_props(queue_family_count); Util::SmallVector queue_props2(queue_family_count); #ifdef GRANITE_VULKAN_BETA Util::SmallVector video_queue_props2(queue_family_count); if (has_extension(VK_KHR_VIDEO_QUEUE_EXTENSION_NAME)) ext.supports_video_queue = true; #endif for (uint32_t i = 0; i < queue_family_count; i++) { queue_props2[i].sType = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2; #ifdef GRANITE_VULKAN_BETA if (ext.supports_video_queue) { queue_props2[i].pNext = &video_queue_props2[i]; video_queue_props2[i].sType = VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR; } #endif } Util::SmallVector queue_offsets(queue_family_count); Util::SmallVector> queue_priorities(queue_family_count); if (ext.supports_vulkan_11_instance && ext.supports_vulkan_11_device) vkGetPhysicalDeviceQueueFamilyProperties2(gpu, &queue_family_count, queue_props2.data()); else if (ext.supports_physical_device_properties2) vkGetPhysicalDeviceQueueFamilyProperties2KHR(gpu, &queue_family_count, queue_props2.data()); else vkGetPhysicalDeviceQueueFamilyProperties(gpu, &queue_family_count, queue_props.data()); if ((ext.supports_vulkan_11_instance && ext.supports_vulkan_11_device) || ext.supports_physical_device_properties2) for (uint32_t i = 0; i < queue_family_count; i++) queue_props[i] = queue_props2[i].queueFamilyProperties; queue_info = {}; uint32_t queue_indices[QUEUE_INDEX_COUNT] = {}; const auto find_vacant_queue = [&](uint32_t &family, uint32_t &index, VkQueueFlags required, VkQueueFlags ignore_flags, float priority) -> bool { for (unsigned family_index = 0; family_index < queue_family_count; family_index++) { if ((queue_props[family_index].queueFlags & ignore_flags) != 0) continue; // A graphics queue candidate must support present for us to select it. if ((required & VK_QUEUE_GRAPHICS_BIT) != 0 && surface != VK_NULL_HANDLE) { VkBool32 supported = VK_FALSE; if (vkGetPhysicalDeviceSurfaceSupportKHR(gpu, family_index, surface, &supported) != VK_SUCCESS || !supported) continue; } if (queue_props[family_index].queueCount && (queue_props[family_index].queueFlags & required) == required) { family = family_index; queue_props[family_index].queueCount--; index = queue_offsets[family_index]++; queue_priorities[family_index].push_back(priority); return true; } } return false; }; if (!find_vacant_queue(queue_info.family_indices[QUEUE_INDEX_GRAPHICS], queue_indices[QUEUE_INDEX_GRAPHICS], VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, 0, 0.5f)) { LOGE("Could not find suitable graphics queue.\n"); return false; } // XXX: This assumes timestamp valid bits is the same for all queue types. queue_info.timestamp_valid_bits = queue_props[queue_info.family_indices[QUEUE_INDEX_GRAPHICS]].timestampValidBits; // Prefer another graphics queue since we can do async graphics that way. // The compute queue is to be treated as high priority since we also do async graphics on it. if (!find_vacant_queue(queue_info.family_indices[QUEUE_INDEX_COMPUTE], queue_indices[QUEUE_INDEX_COMPUTE], VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, 0, 1.0f) && !find_vacant_queue(queue_info.family_indices[QUEUE_INDEX_COMPUTE], queue_indices[QUEUE_INDEX_COMPUTE], VK_QUEUE_COMPUTE_BIT, 0, 1.0f)) { // Fallback to the graphics queue if we must. queue_info.family_indices[QUEUE_INDEX_COMPUTE] = queue_info.family_indices[QUEUE_INDEX_GRAPHICS]; queue_indices[QUEUE_INDEX_COMPUTE] = queue_indices[QUEUE_INDEX_GRAPHICS]; } // For transfer, try to find a queue which only supports transfer, e.g. DMA queue. // If not, fallback to a dedicated compute queue. // Finally, fallback to same queue as compute. if (!find_vacant_queue(queue_info.family_indices[QUEUE_INDEX_TRANSFER], queue_indices[QUEUE_INDEX_TRANSFER], VK_QUEUE_TRANSFER_BIT, VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT, 0.5f) && !find_vacant_queue(queue_info.family_indices[QUEUE_INDEX_TRANSFER], queue_indices[QUEUE_INDEX_TRANSFER], VK_QUEUE_COMPUTE_BIT, VK_QUEUE_GRAPHICS_BIT, 0.5f)) { queue_info.family_indices[QUEUE_INDEX_TRANSFER] = queue_info.family_indices[QUEUE_INDEX_COMPUTE]; queue_indices[QUEUE_INDEX_TRANSFER] = queue_indices[QUEUE_INDEX_COMPUTE]; } #ifdef GRANITE_VULKAN_BETA if (ext.supports_video_queue) { if (!find_vacant_queue(queue_info.family_indices[QUEUE_INDEX_VIDEO_DECODE], queue_indices[QUEUE_INDEX_VIDEO_DECODE], VK_QUEUE_VIDEO_DECODE_BIT_KHR, 0, 0.5f)) { queue_info.family_indices[QUEUE_INDEX_VIDEO_DECODE] = VK_QUEUE_FAMILY_IGNORED; queue_indices[QUEUE_INDEX_VIDEO_DECODE] = UINT32_MAX; } } #endif VkDeviceCreateInfo device_info = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO }; Util::SmallVector queue_infos; for (uint32_t family_index = 0; family_index < queue_family_count; family_index++) { if (queue_offsets[family_index] == 0) continue; VkDeviceQueueCreateInfo info = { VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO }; info.queueFamilyIndex = family_index; info.queueCount = queue_offsets[family_index]; info.pQueuePriorities = queue_priorities[family_index].data(); queue_infos.push_back(info); } device_info.pQueueCreateInfos = queue_infos.data(); device_info.queueCreateInfoCount = uint32_t(queue_infos.size()); vector enabled_extensions; vector enabled_layers; for (uint32_t i = 0; i < num_required_device_extensions; i++) enabled_extensions.push_back(required_device_extensions[i]); for (uint32_t i = 0; i < num_required_device_layers; i++) enabled_layers.push_back(required_device_layers[i]); if (has_extension(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME)) { ext.supports_get_memory_requirements2 = true; enabled_extensions.push_back(VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME); } if (ext.supports_get_memory_requirements2 && has_extension(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME)) { ext.supports_dedicated = true; enabled_extensions.push_back(VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME); } if (has_extension(VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME)) { ext.supports_image_format_list = true; enabled_extensions.push_back(VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME); } if (has_extension(VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME)) { ext.supports_mirror_clamp_to_edge = true; enabled_extensions.push_back(VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME); } if (has_extension(VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME)) { ext.supports_google_display_timing = true; enabled_extensions.push_back(VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME); } #ifdef _WIN32 if (ext.supports_surface_capabilities2 && has_extension(VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME)) { ext.supports_full_screen_exclusive = true; enabled_extensions.push_back(VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME); } #endif #ifdef VULKAN_DEBUG if (has_extension(VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME)) { ext.supports_nv_device_diagnostic_checkpoints = true; enabled_extensions.push_back(VK_NV_DEVICE_DIAGNOSTIC_CHECKPOINTS_EXTENSION_NAME); } #endif if (ext.supports_external && ext.supports_dedicated && has_extension(VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME) && has_extension(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME) && #ifdef _WIN32 has_extension(VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME) && has_extension(VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME) #else has_extension(VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME) && has_extension(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME) #endif ) { ext.supports_external = true; enabled_extensions.push_back(VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME); enabled_extensions.push_back(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME); #ifdef _WIN32 enabled_extensions.push_back(VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME); enabled_extensions.push_back(VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME); #else enabled_extensions.push_back(VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME); enabled_extensions.push_back(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME); #endif } else ext.supports_external = false; if (has_extension(VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME); ext.supports_update_template = true; } if (has_extension(VK_KHR_MAINTENANCE1_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_MAINTENANCE1_EXTENSION_NAME); ext.supports_maintenance_1 = true; } if (has_extension(VK_KHR_MAINTENANCE2_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_MAINTENANCE2_EXTENSION_NAME); ext.supports_maintenance_2 = true; } if (has_extension(VK_KHR_MAINTENANCE3_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_MAINTENANCE3_EXTENSION_NAME); ext.supports_maintenance_3 = true; } if (has_extension(VK_KHR_BIND_MEMORY_2_EXTENSION_NAME)) { ext.supports_bind_memory2 = true; enabled_extensions.push_back(VK_KHR_BIND_MEMORY_2_EXTENSION_NAME); } if (has_extension(VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME)) { ext.supports_draw_indirect_count = true; enabled_extensions.push_back(VK_KHR_DRAW_INDIRECT_COUNT_EXTENSION_NAME); } if (has_extension(VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME)) { ext.supports_draw_parameters = true; enabled_extensions.push_back(VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME); } if (has_extension(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME)) { ext.supports_calibrated_timestamps = true; enabled_extensions.push_back(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME); } if (has_extension(VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME)) enabled_extensions.push_back(VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME); if (has_extension(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME); ext.supports_conservative_rasterization = true; } #ifdef GRANITE_VULKAN_BETA if (has_extension(VK_KHR_VIDEO_QUEUE_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_VIDEO_QUEUE_EXTENSION_NAME); ext.supports_video_queue = true; if (has_extension(VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME); ext.supports_video_decode_queue = true; if (has_extension(VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_VIDEO_DECODE_H264_EXTENSION_NAME); if (queue_info.family_indices[QUEUE_INDEX_VIDEO_DECODE] != VK_QUEUE_FAMILY_IGNORED) { ext.supports_video_decode_h264 = (video_queue_props2[queue_info.family_indices[QUEUE_INDEX_VIDEO_DECODE]].videoCodecOperations & VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT) != 0; } } } } #endif VkPhysicalDeviceFeatures2KHR features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR }; ext.storage_8bit_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR }; ext.storage_16bit_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR }; ext.float16_int8_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR }; ext.multiview_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR }; ext.subgroup_size_control_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT }; ext.compute_shader_derivative_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV }; ext.host_query_reset_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT }; ext.demote_to_helper_invocation_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT }; ext.scalar_block_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT }; ext.ubo_std430_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR }; ext.timeline_semaphore_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR }; ext.descriptor_indexing_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT }; ext.performance_query_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR }; ext.sampler_ycbcr_conversion_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR }; ext.memory_priority_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT }; ext.astc_decode_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT }; ext.astc_hdr_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT }; ext.sync2_features = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR }; void **ppNext = &features.pNext; bool has_pdf2 = ext.supports_physical_device_properties2 || (ext.supports_vulkan_11_instance && ext.supports_vulkan_11_device); if (has_pdf2) { if (has_extension(VK_KHR_8BIT_STORAGE_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_8BIT_STORAGE_EXTENSION_NAME); *ppNext = &ext.storage_8bit_features; ppNext = &ext.storage_8bit_features.pNext; } if (has_extension(VK_KHR_16BIT_STORAGE_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_16BIT_STORAGE_EXTENSION_NAME); *ppNext = &ext.storage_16bit_features; ppNext = &ext.storage_16bit_features.pNext; } if (has_extension(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME); *ppNext = &ext.float16_int8_features; ppNext = &ext.float16_int8_features.pNext; } if (has_extension(VK_KHR_MULTIVIEW_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_MULTIVIEW_EXTENSION_NAME); *ppNext = &ext.multiview_features; ppNext = &ext.multiview_features.pNext; } if (has_extension(VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME); *ppNext = &ext.subgroup_size_control_features; ppNext = &ext.subgroup_size_control_features.pNext; } if (has_extension(VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME)) { enabled_extensions.push_back(VK_NV_COMPUTE_SHADER_DERIVATIVES_EXTENSION_NAME); *ppNext = &ext.compute_shader_derivative_features; ppNext = &ext.compute_shader_derivative_features.pNext; } if (has_extension(VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME); *ppNext = &ext.host_query_reset_features; ppNext = &ext.host_query_reset_features.pNext; } if (has_extension(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME); *ppNext = &ext.demote_to_helper_invocation_features; ppNext = &ext.demote_to_helper_invocation_features.pNext; } if (has_extension(VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_SCALAR_BLOCK_LAYOUT_EXTENSION_NAME); *ppNext = &ext.scalar_block_features; ppNext = &ext.scalar_block_features.pNext; } if (has_extension(VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME); *ppNext = &ext.ubo_std430_features; ppNext = &ext.ubo_std430_features.pNext; } if (has_extension(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME); *ppNext = &ext.timeline_semaphore_features; ppNext = &ext.timeline_semaphore_features.pNext; } if ((flags & CONTEXT_CREATION_DISABLE_BINDLESS_BIT) == 0 && ext.supports_maintenance_3 && has_extension(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME); *ppNext = &ext.descriptor_indexing_features; ppNext = &ext.descriptor_indexing_features.pNext; } if (has_extension(VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_PERFORMANCE_QUERY_EXTENSION_NAME); *ppNext = &ext.performance_query_features; ppNext = &ext.performance_query_features.pNext; } if (ext.supports_bind_memory2 && ext.supports_get_memory_requirements2 && has_extension(VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME); *ppNext = &ext.sampler_ycbcr_conversion_features; ppNext = &ext.sampler_ycbcr_conversion_features.pNext; } if (has_extension(VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_MEMORY_PRIORITY_EXTENSION_NAME); *ppNext = &ext.memory_priority_features; ppNext = &ext.memory_priority_features.pNext; } if (has_extension(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_MEMORY_BUDGET_EXTENSION_NAME); ext.supports_memory_budget = true; } if (has_extension(VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME)) { ext.supports_astc_decode_mode = true; enabled_extensions.push_back(VK_EXT_ASTC_DECODE_MODE_EXTENSION_NAME); *ppNext = &ext.astc_decode_features; ppNext = &ext.astc_decode_features.pNext; } if (has_extension(VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME)) { enabled_extensions.push_back(VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME); *ppNext = &ext.astc_hdr_features; ppNext = &ext.astc_hdr_features.pNext; } if (has_extension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME)) { ext.supports_sync2 = true; enabled_extensions.push_back(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME); *ppNext = &ext.sync2_features; ppNext = &ext.sync2_features.pNext; } } if (ext.supports_vulkan_11_device && ext.supports_vulkan_11_instance) vkGetPhysicalDeviceFeatures2(gpu, &features); else if (ext.supports_physical_device_properties2) vkGetPhysicalDeviceFeatures2KHR(gpu, &features); else vkGetPhysicalDeviceFeatures(gpu, &features.features); // Enable device features we might care about. { VkPhysicalDeviceFeatures enabled_features = *required_features; if (features.features.textureCompressionETC2) enabled_features.textureCompressionETC2 = VK_TRUE; if (features.features.textureCompressionBC) enabled_features.textureCompressionBC = VK_TRUE; if (features.features.textureCompressionASTC_LDR) enabled_features.textureCompressionASTC_LDR = VK_TRUE; if (features.features.fullDrawIndexUint32) enabled_features.fullDrawIndexUint32 = VK_TRUE; if (features.features.imageCubeArray) enabled_features.imageCubeArray = VK_TRUE; if (features.features.fillModeNonSolid) enabled_features.fillModeNonSolid = VK_TRUE; if (features.features.independentBlend) enabled_features.independentBlend = VK_TRUE; if (features.features.sampleRateShading) enabled_features.sampleRateShading = VK_TRUE; if (features.features.fragmentStoresAndAtomics) enabled_features.fragmentStoresAndAtomics = VK_TRUE; if (features.features.shaderStorageImageExtendedFormats) enabled_features.shaderStorageImageExtendedFormats = VK_TRUE; if (features.features.shaderStorageImageMultisample) enabled_features.shaderStorageImageMultisample = VK_TRUE; if (features.features.largePoints) enabled_features.largePoints = VK_TRUE; if (features.features.shaderInt16) enabled_features.shaderInt16 = VK_TRUE; if (features.features.shaderInt64) enabled_features.shaderInt64 = VK_TRUE; if (features.features.shaderStorageImageWriteWithoutFormat) enabled_features.shaderStorageImageWriteWithoutFormat = VK_TRUE; if (features.features.shaderSampledImageArrayDynamicIndexing) enabled_features.shaderSampledImageArrayDynamicIndexing = VK_TRUE; if (features.features.shaderUniformBufferArrayDynamicIndexing) enabled_features.shaderUniformBufferArrayDynamicIndexing = VK_TRUE; if (features.features.shaderStorageBufferArrayDynamicIndexing) enabled_features.shaderStorageBufferArrayDynamicIndexing = VK_TRUE; if (features.features.shaderStorageImageArrayDynamicIndexing) enabled_features.shaderStorageImageArrayDynamicIndexing = VK_TRUE; if (features.features.samplerAnisotropy) enabled_features.samplerAnisotropy = VK_TRUE; features.features = enabled_features; ext.enabled_features = enabled_features; } if (ext.supports_physical_device_properties2) device_info.pNext = &features; else device_info.pEnabledFeatures = &features.features; #ifdef VULKAN_DEBUG if (!force_no_validation && has_layer("VK_LAYER_KHRONOS_validation")) enabled_layers.push_back("VK_LAYER_KHRONOS_validation"); else if (!force_no_validation && has_layer("VK_LAYER_LUNARG_standard_validation")) enabled_layers.push_back("VK_LAYER_LUNARG_standard_validation"); #endif if (ext.supports_external && has_extension(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME)) { ext.supports_external_memory_host = true; enabled_extensions.push_back(VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME); } // Only need GetPhysicalDeviceProperties2 for Vulkan 1.1-only code, so don't bother getting KHR variant. ext.subgroup_properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES }; ext.host_memory_properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT }; ext.subgroup_size_control_properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT }; ext.descriptor_indexing_properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT }; ext.conservative_rasterization_properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT }; ext.driver_properties = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR }; VkPhysicalDeviceProperties2 props = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 }; ppNext = &props.pNext; *ppNext = &ext.subgroup_properties; ppNext = &ext.subgroup_properties.pNext; if (ext.supports_external_memory_host) { *ppNext = &ext.host_memory_properties; ppNext = &ext.host_memory_properties.pNext; } if (has_extension(VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME)) { *ppNext = &ext.subgroup_size_control_properties; ppNext = &ext.subgroup_size_control_properties.pNext; } if (ext.supports_maintenance_3 && has_extension(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME)) { *ppNext = &ext.descriptor_indexing_properties; ppNext = &ext.descriptor_indexing_properties.pNext; } if (ext.supports_conservative_rasterization) { *ppNext = &ext.conservative_rasterization_properties; ppNext = &ext.conservative_rasterization_properties.pNext; } if (ext.supports_vulkan_11_instance && ext.supports_vulkan_11_device && has_extension(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME)) { enabled_extensions.push_back(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME); ext.supports_driver_properties = true; *ppNext = &ext.driver_properties; ppNext = &ext.driver_properties.pNext; } if (ext.supports_vulkan_11_instance && ext.supports_vulkan_11_device) vkGetPhysicalDeviceProperties2(gpu, &props); device_info.enabledExtensionCount = enabled_extensions.size(); device_info.ppEnabledExtensionNames = enabled_extensions.empty() ? nullptr : enabled_extensions.data(); device_info.enabledLayerCount = enabled_layers.size(); device_info.ppEnabledLayerNames = enabled_layers.empty() ? nullptr : enabled_layers.data(); for (auto *enabled_extension : enabled_extensions) LOGI("Enabling device extension: %s.\n", enabled_extension); if (vkCreateDevice(gpu, &device_info, nullptr, &device) != VK_SUCCESS) return false; volkLoadDeviceTable(&device_table, device); for (int i = 0; i < QUEUE_INDEX_COUNT; i++) { if (queue_info.family_indices[i] != VK_QUEUE_FAMILY_IGNORED) { device_table.vkGetDeviceQueue(device, queue_info.family_indices[i], queue_indices[i], &queue_info.queues[i]); } else { queue_info.queues[i] = VK_NULL_HANDLE; } } #ifdef VULKAN_DEBUG static const char *family_names[QUEUE_INDEX_COUNT] = { "Graphics", "Compute", "Transfer", "Video decode" }; for (int i = 0; i < QUEUE_INDEX_COUNT; i++) if (queue_info.family_indices[i] != VK_QUEUE_FAMILY_IGNORED) LOGI("%s queue: family %u, index %u.\n", family_names[i], queue_info.family_indices[i], queue_indices[i]); #endif check_descriptor_indexing_features(); return true; } void Context::check_descriptor_indexing_features() { auto &f = ext.descriptor_indexing_features; if (f.descriptorBindingSampledImageUpdateAfterBind && f.descriptorBindingPartiallyBound && f.runtimeDescriptorArray && f.shaderSampledImageArrayNonUniformIndexing) { ext.supports_descriptor_indexing = true; } } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/context.hpp000066400000000000000000000206211415063341600232370ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include "logging.hpp" #include "vulkan_common.hpp" #include #include namespace Util { class TimelineTraceFile; } namespace Granite { class Filesystem; class ThreadGroup; } namespace Vulkan { struct DeviceFeatures { bool supports_physical_device_properties2 = false; bool supports_external = false; bool supports_dedicated = false; bool supports_image_format_list = false; bool supports_debug_utils = false; bool supports_mirror_clamp_to_edge = false; bool supports_google_display_timing = false; bool supports_nv_device_diagnostic_checkpoints = false; bool supports_vulkan_11_instance = false; bool supports_vulkan_11_device = false; bool supports_external_memory_host = false; bool supports_surface_capabilities2 = false; bool supports_full_screen_exclusive = false; bool supports_update_template = false; bool supports_maintenance_1 = false; bool supports_maintenance_2 = false; bool supports_maintenance_3 = false; bool supports_descriptor_indexing = false; bool supports_conservative_rasterization = false; bool supports_bind_memory2 = false; bool supports_get_memory_requirements2 = false; bool supports_draw_indirect_count = false; bool supports_draw_parameters = false; bool supports_driver_properties = false; bool supports_calibrated_timestamps = false; bool supports_memory_budget = false; bool supports_astc_decode_mode = false; bool supports_sync2 = false; bool supports_video_queue = false; bool supports_video_decode_queue = false; bool supports_video_decode_h264 = false; VkPhysicalDeviceSubgroupProperties subgroup_properties = {}; VkPhysicalDevice8BitStorageFeaturesKHR storage_8bit_features = {}; VkPhysicalDevice16BitStorageFeaturesKHR storage_16bit_features = {}; VkPhysicalDeviceFloat16Int8FeaturesKHR float16_int8_features = {}; VkPhysicalDeviceFeatures enabled_features = {}; VkPhysicalDeviceExternalMemoryHostPropertiesEXT host_memory_properties = {}; VkPhysicalDeviceMultiviewFeaturesKHR multiview_features = {}; VkPhysicalDeviceSubgroupSizeControlFeaturesEXT subgroup_size_control_features = {}; VkPhysicalDeviceSubgroupSizeControlPropertiesEXT subgroup_size_control_properties = {}; VkPhysicalDeviceComputeShaderDerivativesFeaturesNV compute_shader_derivative_features = {}; VkPhysicalDeviceHostQueryResetFeaturesEXT host_query_reset_features = {}; VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT demote_to_helper_invocation_features = {}; VkPhysicalDeviceScalarBlockLayoutFeaturesEXT scalar_block_features = {}; VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR ubo_std430_features = {}; VkPhysicalDeviceTimelineSemaphoreFeaturesKHR timeline_semaphore_features = {}; VkPhysicalDeviceDescriptorIndexingFeaturesEXT descriptor_indexing_features = {}; VkPhysicalDeviceDescriptorIndexingPropertiesEXT descriptor_indexing_properties = {}; VkPhysicalDeviceConservativeRasterizationPropertiesEXT conservative_rasterization_properties = {}; VkPhysicalDevicePerformanceQueryFeaturesKHR performance_query_features = {}; VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR sampler_ycbcr_conversion_features = {}; VkPhysicalDeviceDriverPropertiesKHR driver_properties = {}; VkPhysicalDeviceMemoryPriorityFeaturesEXT memory_priority_features = {}; VkPhysicalDeviceASTCDecodeFeaturesEXT astc_decode_features = {}; VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT astc_hdr_features = {}; VkPhysicalDeviceSynchronization2FeaturesKHR sync2_features = {}; }; enum VendorID { VENDOR_ID_AMD = 0x1002, VENDOR_ID_NVIDIA = 0x10de, VENDOR_ID_INTEL = 0x8086, VENDOR_ID_ARM = 0x13b5, VENDOR_ID_QCOM = 0x5143 }; enum ContextCreationFlagBits { CONTEXT_CREATION_DISABLE_BINDLESS_BIT = 1 << 0 }; using ContextCreationFlags = uint32_t; struct QueueInfo { QueueInfo(); VkQueue queues[QUEUE_INDEX_COUNT] = {}; uint32_t family_indices[QUEUE_INDEX_COUNT]; uint32_t timestamp_valid_bits = 0; }; class Context { public: bool init_instance_and_device(const char **instance_ext, uint32_t instance_ext_count, const char **device_ext, uint32_t device_ext_count, ContextCreationFlags flags = 0); bool init_from_instance_and_device(VkInstance instance, VkPhysicalDevice gpu, VkDevice device, VkQueue queue, uint32_t queue_family); bool init_device_from_instance(VkInstance instance, VkPhysicalDevice gpu, VkSurfaceKHR surface, const char **required_device_extensions, unsigned num_required_device_extensions, const char **required_device_layers, unsigned num_required_device_layers, const VkPhysicalDeviceFeatures *required_features, ContextCreationFlags flags = 0); Context() = default; Context(const Context &) = delete; void operator=(const Context &) = delete; static bool init_loader(PFN_vkGetInstanceProcAddr addr); static PFN_vkGetInstanceProcAddr get_instance_proc_addr(); ~Context(); VkInstance get_instance() const { return instance; } VkPhysicalDevice get_gpu() const { return gpu; } VkDevice get_device() const { return device; } const QueueInfo &get_queue_info() const { return queue_info; } const VkPhysicalDeviceProperties &get_gpu_props() const { return gpu_props; } const VkPhysicalDeviceMemoryProperties &get_mem_props() const { return mem_props; } void release_instance() { owned_instance = false; } void release_device() { owned_device = false; } const DeviceFeatures &get_enabled_device_features() const { return ext; } static const VkApplicationInfo &get_application_info(bool supports_vulkan_11); void notify_validation_error(const char *msg); void set_notification_callback(std::function func); void set_num_thread_indices(unsigned indices) { num_thread_indices = indices; } unsigned get_num_thread_indices() const { return num_thread_indices; } const VolkDeviceTable &get_device_table() const { return device_table; } struct SystemHandles { Util::TimelineTraceFile *timeline_trace_file = nullptr; Granite::Filesystem *filesystem = nullptr; Granite::ThreadGroup *thread_group = nullptr; }; void set_system_handles(const SystemHandles &handles_) { handles = handles_; } const SystemHandles &get_system_handles() const { return handles; } private: VkDevice device = VK_NULL_HANDLE; VkInstance instance = VK_NULL_HANDLE; VkPhysicalDevice gpu = VK_NULL_HANDLE; VolkDeviceTable device_table = {}; SystemHandles handles; VkPhysicalDeviceProperties gpu_props = {}; VkPhysicalDeviceMemoryProperties mem_props = {}; QueueInfo queue_info; unsigned num_thread_indices = 1; bool create_instance(const char **instance_ext, uint32_t instance_ext_count); bool create_device(VkPhysicalDevice gpu, VkSurfaceKHR surface, const char **required_device_extensions, unsigned num_required_device_extensions, const char **required_device_layers, unsigned num_required_device_layers, const VkPhysicalDeviceFeatures *required_features, ContextCreationFlags flags); bool owned_instance = false; bool owned_device = false; DeviceFeatures ext; #ifdef VULKAN_DEBUG VkDebugUtilsMessengerEXT debug_messenger = VK_NULL_HANDLE; #endif std::function message_callback; void destroy(); void check_descriptor_indexing_features(); bool force_no_validation = false; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/cookie.cpp000066400000000000000000000023711415063341600230210ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "cookie.hpp" #include "device.hpp" namespace Vulkan { Cookie::Cookie(Device *device) : cookie(device->allocate_cookie()) { } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/cookie.hpp000066400000000000000000000031131415063341600230210ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include #include "hash.hpp" #include "intrusive_hash_map.hpp" namespace Vulkan { class Device; class Cookie { public: Cookie(Device *device); uint64_t get_cookie() const { return cookie; } private: uint64_t cookie; }; template using HashedObject = Util::IntrusiveHashMapEnabled; class InternalSyncEnabled { public: void set_internal_sync_object() { internal_sync = true; } protected: bool internal_sync = false; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/descriptor_set.cpp000066400000000000000000000364661415063341600246150ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "descriptor_set.hpp" #include "device.hpp" #include using namespace std; using namespace Util; namespace Vulkan { DescriptorSetAllocator::DescriptorSetAllocator(Hash hash, Device *device_, const DescriptorSetLayout &layout, const uint32_t *stages_for_binds, const ImmutableSampler * const *immutable_samplers) : IntrusiveHashMapEnabled(hash) , device(device_) , table(device_->get_device_table()) { bindless = layout.array_size[0] == DescriptorSetLayout::UNSIZED_ARRAY; if (!bindless) { unsigned count = device_->num_thread_indices; for (unsigned i = 0; i < count; i++) per_thread.emplace_back(new PerThread); } if (bindless && !device->get_device_features().supports_descriptor_indexing) { LOGE("Cannot support descriptor indexing on this device.\n"); return; } VkDescriptorSetLayoutCreateInfo info = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO }; VkDescriptorSetLayoutBindingFlagsCreateInfoEXT flags = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT }; VkSampler vk_immutable_samplers[VULKAN_NUM_BINDINGS] = {}; vector bindings; VkDescriptorBindingFlagsEXT binding_flags = 0; if (bindless) { info.flags |= VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT; info.pNext = &flags; flags.bindingCount = 1; flags.pBindingFlags = &binding_flags; binding_flags = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT; if (device->get_device_features().descriptor_indexing_features.descriptorBindingVariableDescriptorCount) binding_flags |= VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT; } for (unsigned i = 0; i < VULKAN_NUM_BINDINGS; i++) { auto stages = stages_for_binds[i]; if (stages == 0) continue; unsigned array_size = layout.array_size[i]; unsigned pool_array_size; if (array_size == DescriptorSetLayout::UNSIZED_ARRAY) { array_size = VULKAN_NUM_BINDINGS_BINDLESS_VARYING; pool_array_size = array_size; if (!device->get_device_features().descriptor_indexing_features.descriptorBindingVariableDescriptorCount) LOGW("Device does not support variable descriptor count.\n"); } else pool_array_size = array_size * VULKAN_NUM_SETS_PER_POOL; unsigned types = 0; if (layout.sampled_image_mask & (1u << i)) { if ((layout.immutable_sampler_mask & (1u << i)) && immutable_samplers && immutable_samplers[i]) vk_immutable_samplers[i] = immutable_samplers[i]->get_sampler().get_sampler(); bindings.push_back({ i, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, array_size, stages, vk_immutable_samplers[i] != VK_NULL_HANDLE ? &vk_immutable_samplers[i] : nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, pool_array_size }); types++; } if (layout.sampled_buffer_mask & (1u << i)) { bindings.push_back({ i, VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, array_size, stages, nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, pool_array_size }); types++; } if (layout.storage_image_mask & (1u << i)) { bindings.push_back({ i, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, array_size, stages, nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, pool_array_size }); types++; } if (layout.uniform_buffer_mask & (1u << i)) { bindings.push_back({ i, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, array_size, stages, nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, pool_array_size }); types++; } if (layout.storage_buffer_mask & (1u << i)) { bindings.push_back({ i, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, array_size, stages, nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, pool_array_size }); types++; } if (layout.input_attachment_mask & (1u << i)) { bindings.push_back({ i, VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, array_size, stages, nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pool_array_size }); types++; } if (layout.separate_image_mask & (1u << i)) { bindings.push_back({ i, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, array_size, stages, nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, pool_array_size }); types++; } if (layout.sampler_mask & (1u << i)) { if ((layout.immutable_sampler_mask & (1u << i)) && immutable_samplers && immutable_samplers[i]) vk_immutable_samplers[i] = immutable_samplers[i]->get_sampler().get_sampler(); bindings.push_back({ i, VK_DESCRIPTOR_TYPE_SAMPLER, array_size, stages, vk_immutable_samplers[i] != VK_NULL_HANDLE ? &vk_immutable_samplers[i] : nullptr }); pool_size.push_back({ VK_DESCRIPTOR_TYPE_SAMPLER, pool_array_size }); types++; } (void)types; VK_ASSERT(types <= 1 && "Descriptor set aliasing!"); } if (!bindings.empty()) { info.bindingCount = bindings.size(); info.pBindings = bindings.data(); if (bindless && bindings.size() != 1) { LOGE("Using bindless but have bindingCount != 1.\n"); return; } } #ifdef VULKAN_DEBUG LOGI("Creating descriptor set layout.\n"); #endif if (table.vkCreateDescriptorSetLayout(device->get_device(), &info, nullptr, &set_layout) != VK_SUCCESS) LOGE("Failed to create descriptor set layout."); #ifdef GRANITE_VULKAN_FOSSILIZE device->register_descriptor_set_layout(set_layout, get_hash(), info); #endif } void DescriptorSetAllocator::reset_bindless_pool(VkDescriptorPool pool) { table.vkResetDescriptorPool(device->get_device(), pool, 0); } VkDescriptorSet DescriptorSetAllocator::allocate_bindless_set(VkDescriptorPool pool, unsigned num_descriptors) { if (!pool || !bindless) return VK_NULL_HANDLE; VkDescriptorSetAllocateInfo info = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO }; info.descriptorPool = pool; info.descriptorSetCount = 1; info.pSetLayouts = &set_layout; VkDescriptorSetVariableDescriptorCountAllocateInfoEXT count_info = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT }; uint32_t num_desc = num_descriptors; if (device->get_device_features().descriptor_indexing_features.descriptorBindingVariableDescriptorCount) { count_info.descriptorSetCount = 1; count_info.pDescriptorCounts = &num_desc; info.pNext = &count_info; } VkDescriptorSet desc_set = VK_NULL_HANDLE; if (table.vkAllocateDescriptorSets(device->get_device(), &info, &desc_set) != VK_SUCCESS) return VK_NULL_HANDLE; return desc_set; } VkDescriptorPool DescriptorSetAllocator::allocate_bindless_pool(unsigned num_sets, unsigned num_descriptors) { if (!bindless) return VK_NULL_HANDLE; VkDescriptorPool pool = VK_NULL_HANDLE; VkDescriptorPoolCreateInfo info = { VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO }; info.flags = VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT; info.maxSets = num_sets; info.poolSizeCount = 1; VkDescriptorPoolSize size = pool_size[0]; if (num_descriptors > size.descriptorCount) { LOGE("Trying to allocate more than max bindless descriptors for descriptor layout.\n"); return VK_NULL_HANDLE; } // If implementation does not support variable descriptor count, allocate maximum. if (device->get_device_features().descriptor_indexing_features.descriptorBindingVariableDescriptorCount) size.descriptorCount = num_descriptors; else info.maxSets = 1; info.pPoolSizes = &size; if (table.vkCreateDescriptorPool(device->get_device(), &info, nullptr, &pool) != VK_SUCCESS) { LOGE("Failed to create descriptor pool.\n"); return VK_NULL_HANDLE; } return pool; } void DescriptorSetAllocator::begin_frame() { if (!bindless) { for (auto &thr : per_thread) thr->should_begin = true; } } pair DescriptorSetAllocator::find(unsigned thread_index, Hash hash) { VK_ASSERT(!bindless); auto &state = *per_thread[thread_index]; if (state.should_begin) { state.set_nodes.begin_frame(); state.should_begin = false; } auto *node = state.set_nodes.request(hash); if (node) return { node->set, true }; node = state.set_nodes.request_vacant(hash); if (node) return { node->set, false }; VkDescriptorPool pool; VkDescriptorPoolCreateInfo info = { VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO }; info.maxSets = VULKAN_NUM_SETS_PER_POOL; if (!pool_size.empty()) { info.poolSizeCount = pool_size.size(); info.pPoolSizes = pool_size.data(); } if (table.vkCreateDescriptorPool(device->get_device(), &info, nullptr, &pool) != VK_SUCCESS) { LOGE("Failed to create descriptor pool.\n"); return { VK_NULL_HANDLE, false }; } VkDescriptorSet sets[VULKAN_NUM_SETS_PER_POOL]; VkDescriptorSetLayout layouts[VULKAN_NUM_SETS_PER_POOL]; fill(begin(layouts), end(layouts), set_layout); VkDescriptorSetAllocateInfo alloc = { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO }; alloc.descriptorPool = pool; alloc.descriptorSetCount = VULKAN_NUM_SETS_PER_POOL; alloc.pSetLayouts = layouts; if (table.vkAllocateDescriptorSets(device->get_device(), &alloc, sets) != VK_SUCCESS) LOGE("Failed to allocate descriptor sets.\n"); state.pools.push_back(pool); for (auto set : sets) state.set_nodes.make_vacant(set); return { state.set_nodes.request_vacant(hash)->set, false }; } void DescriptorSetAllocator::clear() { for (auto &thr : per_thread) { thr->set_nodes.clear(); for (auto &pool : thr->pools) { table.vkResetDescriptorPool(device->get_device(), pool, 0); table.vkDestroyDescriptorPool(device->get_device(), pool, nullptr); } thr->pools.clear(); } } DescriptorSetAllocator::~DescriptorSetAllocator() { if (set_layout != VK_NULL_HANDLE) table.vkDestroyDescriptorSetLayout(device->get_device(), set_layout, nullptr); clear(); } BindlessDescriptorPool::BindlessDescriptorPool(Device *device_, DescriptorSetAllocator *allocator_, VkDescriptorPool pool, uint32_t num_sets, uint32_t num_desc) : device(device_), allocator(allocator_), desc_pool(pool), total_sets(num_sets), total_descriptors(num_desc) { } BindlessDescriptorPool::~BindlessDescriptorPool() { if (desc_pool) { if (internal_sync) device->destroy_descriptor_pool_nolock(desc_pool); else device->destroy_descriptor_pool(desc_pool); } } VkDescriptorSet BindlessDescriptorPool::get_descriptor_set() const { return desc_set; } void BindlessDescriptorPool::reset() { if (desc_pool != VK_NULL_HANDLE) allocator->reset_bindless_pool(desc_pool); desc_set = VK_NULL_HANDLE; allocated_descriptor_count = 0; allocated_sets = 0; } bool BindlessDescriptorPool::allocate_descriptors(unsigned count) { // Not all drivers will exhaust the pool for us, so make sure we don't allocate more than expected. if (allocated_sets == total_sets) return false; if (allocated_descriptor_count + count > total_descriptors) return false; allocated_descriptor_count += count; allocated_sets++; desc_set = allocator->allocate_bindless_set(desc_pool, count); return desc_set != VK_NULL_HANDLE; } void BindlessDescriptorPool::set_texture(unsigned binding, const ImageView &view) { // TODO: Deal with integer view for depth-stencil images? set_texture(binding, view.get_float_view(), view.get_image().get_layout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)); } void BindlessDescriptorPool::set_texture_unorm(unsigned binding, const ImageView &view) { set_texture(binding, view.get_unorm_view(), view.get_image().get_layout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)); } void BindlessDescriptorPool::set_texture_srgb(unsigned binding, const ImageView &view) { set_texture(binding, view.get_srgb_view(), view.get_image().get_layout(VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)); } void BindlessDescriptorPool::set_texture(unsigned binding, VkImageView view, VkImageLayout layout) { VkWriteDescriptorSet write = { VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET }; write.descriptorCount = 1; write.dstArrayElement = binding; write.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; write.dstSet = desc_set; const VkDescriptorImageInfo info = { VK_NULL_HANDLE, view, layout, }; write.pImageInfo = &info; auto &table = device->get_device_table(); table.vkUpdateDescriptorSets(device->get_device(), 1, &write, 0, nullptr); } void BindlessDescriptorPoolDeleter::operator()(BindlessDescriptorPool *pool) { pool->device->handle_pool.bindless_descriptor_pool.free(pool); } unsigned BindlessAllocator::push(const ImageView &view) { auto ret = unsigned(views.size()); views.push_back(&view); if (views.size() > VULKAN_NUM_BINDINGS_BINDLESS_VARYING) { LOGE("Exceeding maximum number of bindless resources per set (%u >= %u).\n", unsigned(views.size()), VULKAN_NUM_BINDINGS_BINDLESS_VARYING); } return ret; } void BindlessAllocator::begin() { views.clear(); } unsigned BindlessAllocator::get_next_offset() const { return unsigned(views.size()); } void BindlessAllocator::reserve_max_resources_per_pool(unsigned set_count, unsigned descriptor_count) { max_sets_per_pool = std::max(max_sets_per_pool, set_count); max_descriptors_per_pool = std::max(max_descriptors_per_pool, descriptor_count); views.reserve(max_descriptors_per_pool); } void BindlessAllocator::set_bindless_resource_type(BindlessResourceType type) { resource_type = type; } VkDescriptorSet BindlessAllocator::commit(Device &device) { max_sets_per_pool = std::max(1u, max_sets_per_pool); max_descriptors_per_pool = std::max(views.size(), max_descriptors_per_pool); max_descriptors_per_pool = std::max(1u, max_descriptors_per_pool); max_descriptors_per_pool = std::min(max_descriptors_per_pool, VULKAN_NUM_BINDINGS_BINDLESS_VARYING); unsigned to_allocate = std::max(views.size(), 1u); if (!descriptor_pool) { descriptor_pool = device.create_bindless_descriptor_pool( resource_type, max_sets_per_pool, max_descriptors_per_pool); } if (!descriptor_pool->allocate_descriptors(to_allocate)) { descriptor_pool = device.create_bindless_descriptor_pool( resource_type, max_sets_per_pool, max_descriptors_per_pool); if (!descriptor_pool->allocate_descriptors(to_allocate)) { LOGE("Failed to allocate descriptors on a fresh descriptor pool!\n"); return VK_NULL_HANDLE; } } for (size_t i = 0, n = views.size(); i < n; i++) descriptor_pool->set_texture(i, *views[i]); return descriptor_pool->get_descriptor_set(); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/descriptor_set.hpp000066400000000000000000000131151415063341600246040ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "hash.hpp" #include "object_pool.hpp" #include "temporary_hashmap.hpp" #include "vulkan_headers.hpp" #include "sampler.hpp" #include "limits.hpp" #include #include #include "cookie.hpp" namespace Vulkan { class Device; struct DescriptorSetLayout { uint32_t sampled_image_mask = 0; uint32_t storage_image_mask = 0; uint32_t uniform_buffer_mask = 0; uint32_t storage_buffer_mask = 0; uint32_t sampled_buffer_mask = 0; uint32_t input_attachment_mask = 0; uint32_t sampler_mask = 0; uint32_t separate_image_mask = 0; uint32_t fp_mask = 0; uint32_t immutable_sampler_mask = 0; uint8_t array_size[VULKAN_NUM_BINDINGS] = {}; enum { UNSIZED_ARRAY = 0xff }; }; // Avoid -Wclass-memaccess warnings since we hash DescriptorSetLayout. static const unsigned VULKAN_NUM_SETS_PER_POOL = 16; static const unsigned VULKAN_DESCRIPTOR_RING_SIZE = 8; class DescriptorSetAllocator; class BindlessDescriptorPool; class ImageView; struct BindlessDescriptorPoolDeleter { void operator()(BindlessDescriptorPool *pool); }; class BindlessDescriptorPool : public Util::IntrusivePtrEnabled, public InternalSyncEnabled { public: friend struct BindlessDescriptorPoolDeleter; explicit BindlessDescriptorPool(Device *device, DescriptorSetAllocator *allocator, VkDescriptorPool pool, uint32_t total_sets, uint32_t total_descriptors); ~BindlessDescriptorPool(); void operator=(const BindlessDescriptorPool &) = delete; BindlessDescriptorPool(const BindlessDescriptorPool &) = delete; void reset(); bool allocate_descriptors(unsigned count); VkDescriptorSet get_descriptor_set() const; void set_texture(unsigned binding, const ImageView &view); void set_texture_unorm(unsigned binding, const ImageView &view); void set_texture_srgb(unsigned binding, const ImageView &view); private: Device *device; DescriptorSetAllocator *allocator; VkDescriptorPool desc_pool; VkDescriptorSet desc_set = VK_NULL_HANDLE; uint32_t allocated_sets = 0; uint32_t total_sets = 0; uint32_t allocated_descriptor_count = 0; uint32_t total_descriptors = 0; void set_texture(unsigned binding, VkImageView view, VkImageLayout layout); }; using BindlessDescriptorPoolHandle = Util::IntrusivePtr; enum class BindlessResourceType { ImageFP, ImageInt }; class DescriptorSetAllocator : public HashedObject { public: DescriptorSetAllocator(Util::Hash hash, Device *device, const DescriptorSetLayout &layout, const uint32_t *stages_for_bindings, const ImmutableSampler * const *immutable_samplers); ~DescriptorSetAllocator(); void operator=(const DescriptorSetAllocator &) = delete; DescriptorSetAllocator(const DescriptorSetAllocator &) = delete; void begin_frame(); std::pair find(unsigned thread_index, Util::Hash hash); VkDescriptorSetLayout get_layout() const { return set_layout; } void clear(); bool is_bindless() const { return bindless; } VkDescriptorPool allocate_bindless_pool(unsigned num_sets, unsigned num_descriptors); VkDescriptorSet allocate_bindless_set(VkDescriptorPool pool, unsigned num_descriptors); void reset_bindless_pool(VkDescriptorPool pool); private: struct DescriptorSetNode : Util::TemporaryHashmapEnabled, Util::IntrusiveListEnabled { explicit DescriptorSetNode(VkDescriptorSet set_) : set(set_) { } VkDescriptorSet set; }; Device *device; const VolkDeviceTable &table; VkDescriptorSetLayout set_layout = VK_NULL_HANDLE; struct PerThread { Util::TemporaryHashmap set_nodes; std::vector pools; bool should_begin = true; }; std::vector> per_thread; std::vector pool_size; bool bindless = false; }; class BindlessAllocator { public: void reserve_max_resources_per_pool(unsigned set_count, unsigned descriptor_count); void set_bindless_resource_type(BindlessResourceType type); void begin(); unsigned push(const ImageView &view); VkDescriptorSet commit(Device &device); unsigned get_next_offset() const; private: BindlessDescriptorPoolHandle descriptor_pool; unsigned max_sets_per_pool = 0; unsigned max_descriptors_per_pool = 0; BindlessResourceType resource_type = BindlessResourceType::ImageFP; std::vector views; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/device.cpp000066400000000000000000004555101415063341600230160ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "device.hpp" #include "format.hpp" #include "timeline_trace_file.hpp" #include "type_to_string.hpp" #include "quirks.hpp" #include "timer.hpp" #include #include #include #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include #endif #ifdef GRANITE_VULKAN_FILESYSTEM #include "string_helpers.hpp" #endif #ifdef GRANITE_VULKAN_MT #include "thread_id.hpp" static unsigned get_thread_index() { return Util::get_current_thread_index(); } #define LOCK() std::lock_guard holder__{lock.lock} #define DRAIN_FRAME_LOCK() \ std::unique_lock holder__{lock.lock}; \ lock.cond.wait(holder__, [&]() { \ return lock.counter == 0; \ }) #else #define LOCK() ((void)0) #define DRAIN_FRAME_LOCK() VK_ASSERT(lock.counter == 0) static unsigned get_thread_index() { return 0; } #endif using namespace std; using namespace Util; namespace Vulkan { static const char *queue_name_table[] = { "Graphics", "Compute", "Transfer", "Video decode" }; static const QueueIndices queue_flush_order[] = { QUEUE_INDEX_TRANSFER, QUEUE_INDEX_VIDEO_DECODE, QUEUE_INDEX_GRAPHICS, QUEUE_INDEX_COMPUTE }; #ifdef GRANITE_VULKAN_BETA static constexpr VkImageUsageFlags vk_video_image_usage_flags = VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR | VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR | VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR | VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR; #else static constexpr VkImageUsageFlags vk_video_image_usage_flags = 0; #endif Device::Device() : framebuffer_allocator(this) , transient_allocator(this) #ifdef GRANITE_VULKAN_FILESYSTEM , shader_manager(this) , texture_manager(this) #endif { #ifdef GRANITE_VULKAN_MT cookie.store(0); #endif } Semaphore Device::request_legacy_semaphore() { LOCK(); auto semaphore = managers.semaphore.request_cleared_semaphore(); Semaphore ptr(handle_pool.semaphores.allocate(this, semaphore, false)); return ptr; } Semaphore Device::request_proxy_semaphore() { LOCK(); Semaphore ptr(handle_pool.semaphores.allocate(this)); return ptr; } Semaphore Device::request_external_semaphore(VkSemaphore semaphore, bool signalled) { LOCK(); VK_ASSERT(semaphore); Semaphore ptr(handle_pool.semaphores.allocate(this, semaphore, signalled)); return ptr; } #ifndef _WIN32 Semaphore Device::request_imported_semaphore(int fd, VkExternalSemaphoreHandleTypeFlagBitsKHR handle_type) { LOCK(); if (!ext.supports_external) return {}; VkExternalSemaphorePropertiesKHR props = { VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR }; VkPhysicalDeviceExternalSemaphoreInfoKHR info = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR }; info.handleType = handle_type; vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(gpu, &info, &props); if ((props.externalSemaphoreFeatures & VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR) == 0) return Semaphore(nullptr); auto semaphore = managers.semaphore.request_cleared_semaphore(); VkImportSemaphoreFdInfoKHR import = { VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR }; import.fd = fd; import.semaphore = semaphore; import.handleType = handle_type; import.flags = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR; Semaphore ptr(handle_pool.semaphores.allocate(this, semaphore, false)); if (table->vkImportSemaphoreFdKHR(device, &import) != VK_SUCCESS) return Semaphore(nullptr); ptr->signal_external(); ptr->destroy_on_consume(); return ptr; } #endif void Device::add_wait_semaphore(CommandBuffer::Type type, Semaphore semaphore, VkPipelineStageFlags stages, bool flush) { LOCK(); add_wait_semaphore_nolock(get_physical_queue_type(type), semaphore, stages, flush); } void Device::add_wait_semaphore_nolock(QueueIndices physical_type, Semaphore semaphore, VkPipelineStageFlags stages, bool flush) { VK_ASSERT(stages != 0); if (flush) flush_frame(physical_type); auto &data = queue_data[physical_type]; #ifdef VULKAN_DEBUG for (auto &sem : data.wait_semaphores) VK_ASSERT(sem.get() != semaphore.get()); #endif semaphore->signal_pending_wait(); data.wait_semaphores.push_back(semaphore); data.wait_stages.push_back(stages); data.need_fence = true; // Sanity check. VK_ASSERT(data.wait_semaphores.size() < 16 * 1024); } LinearHostImageHandle Device::create_linear_host_image(const LinearHostImageCreateInfo &info) { if ((info.usage & ~VK_IMAGE_USAGE_SAMPLED_BIT) != 0) return LinearHostImageHandle(nullptr); ImageCreateInfo create_info; create_info.width = info.width; create_info.height = info.height; create_info.domain = (info.flags & LINEAR_HOST_IMAGE_HOST_CACHED_BIT) != 0 ? ImageDomain::LinearHostCached : ImageDomain::LinearHost; create_info.levels = 1; create_info.layers = 1; create_info.initial_layout = VK_IMAGE_LAYOUT_GENERAL; create_info.format = info.format; create_info.samples = VK_SAMPLE_COUNT_1_BIT; create_info.usage = info.usage; create_info.type = VK_IMAGE_TYPE_2D; if ((info.flags & LINEAR_HOST_IMAGE_REQUIRE_LINEAR_FILTER_BIT) != 0) create_info.misc |= IMAGE_MISC_VERIFY_FORMAT_FEATURE_SAMPLED_LINEAR_FILTER_BIT; if ((info.flags & LINEAR_HOST_IMAGE_IGNORE_DEVICE_LOCAL_BIT) != 0) create_info.misc |= IMAGE_MISC_LINEAR_IMAGE_IGNORE_DEVICE_LOCAL_BIT; BufferHandle cpu_image; auto gpu_image = create_image(create_info); if (!gpu_image) { // Fall-back to staging buffer. create_info.domain = ImageDomain::Physical; create_info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; create_info.misc = IMAGE_MISC_CONCURRENT_QUEUE_GRAPHICS_BIT | IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_TRANSFER_BIT; create_info.usage |= VK_IMAGE_USAGE_TRANSFER_DST_BIT; gpu_image = create_image(create_info); if (!gpu_image) return LinearHostImageHandle(nullptr); BufferCreateInfo buffer; buffer.domain = (info.flags & LINEAR_HOST_IMAGE_HOST_CACHED_BIT) != 0 ? BufferDomain::CachedHost : BufferDomain::Host; buffer.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; buffer.size = info.width * info.height * TextureFormatLayout::format_block_size(info.format, format_to_aspect_mask(info.format)); cpu_image = create_buffer(buffer); if (!cpu_image) return LinearHostImageHandle(nullptr); } else gpu_image->set_layout(Layout::General); return LinearHostImageHandle(handle_pool.linear_images.allocate(this, move(gpu_image), move(cpu_image), info.stages)); } void *Device::map_linear_host_image(const LinearHostImage &image, MemoryAccessFlags access) { void *host = managers.memory.map_memory(image.get_host_visible_allocation(), access, 0, image.get_host_visible_allocation().get_size()); return host; } void Device::unmap_linear_host_image_and_sync(const LinearHostImage &image, MemoryAccessFlags access) { managers.memory.unmap_memory(image.get_host_visible_allocation(), access, 0, image.get_host_visible_allocation().get_size()); if (image.need_staging_copy()) { // Kinda icky fallback, shouldn't really be used on discrete cards. auto cmd = request_command_buffer(CommandBuffer::Type::AsyncTransfer); cmd->image_barrier(image.get_image(), VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT); cmd->copy_buffer_to_image(image.get_image(), image.get_host_visible_buffer(), 0, {}, { image.get_image().get_width(), image.get_image().get_height(), 1 }, 0, 0, { VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1 }); // Don't care about dstAccessMask, semaphore takes care of everything. cmd->image_barrier(image.get_image(), VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0); Semaphore sem; submit(cmd, nullptr, 1, &sem); // The queue type is an assumption. Should add some parameter for that. add_wait_semaphore(CommandBuffer::Type::Generic, sem, image.get_used_pipeline_stages(), true); } } void *Device::map_host_buffer(const Buffer &buffer, MemoryAccessFlags access) { void *host = managers.memory.map_memory(buffer.get_allocation(), access, 0, buffer.get_create_info().size); return host; } void Device::unmap_host_buffer(const Buffer &buffer, MemoryAccessFlags access) { managers.memory.unmap_memory(buffer.get_allocation(), access, 0, buffer.get_create_info().size); } void *Device::map_host_buffer(const Buffer &buffer, MemoryAccessFlags access, VkDeviceSize offset, VkDeviceSize length) { VK_ASSERT(offset + length <= buffer.get_create_info().size); void *host = managers.memory.map_memory(buffer.get_allocation(), access, offset, length); return host; } void Device::unmap_host_buffer(const Buffer &buffer, MemoryAccessFlags access, VkDeviceSize offset, VkDeviceSize length) { VK_ASSERT(offset + length <= buffer.get_create_info().size); managers.memory.unmap_memory(buffer.get_allocation(), access, offset, length); } Shader *Device::request_shader(const uint32_t *data, size_t size, const ResourceLayout *layout, const ImmutableSamplerBank *sampler_bank) { Util::Hasher hasher; hasher.data(data, size); ImmutableSamplerBank::hash(hasher, sampler_bank); auto hash = hasher.get(); auto *ret = shaders.find(hash); if (!ret) ret = shaders.emplace_yield(hash, hash, this, data, size, layout, sampler_bank); return ret; } Shader *Device::request_shader_by_hash(Hash hash) { return shaders.find(hash); } Program *Device::request_program(Vulkan::Shader *compute_shader) { if (!compute_shader) return nullptr; Util::Hasher hasher; hasher.u64(compute_shader->get_hash()); auto hash = hasher.get(); auto *ret = programs.find(hash); if (!ret) ret = programs.emplace_yield(hash, this, compute_shader); return ret; } Program *Device::request_program(const uint32_t *compute_data, size_t compute_size, const ResourceLayout *layout, const ImmutableSamplerBank *sampler_bank) { if (!compute_size) return nullptr; auto *compute_shader = request_shader(compute_data, compute_size, layout, sampler_bank); return request_program(compute_shader); } Program *Device::request_program(Shader *vertex, Shader *fragment) { if (!vertex || !fragment) return nullptr; Util::Hasher hasher; hasher.u64(vertex->get_hash()); hasher.u64(fragment->get_hash()); auto hash = hasher.get(); auto *ret = programs.find(hash); if (!ret) ret = programs.emplace_yield(hash, this, vertex, fragment); return ret; } Program *Device::request_program(const uint32_t *vertex_data, size_t vertex_size, const uint32_t *fragment_data, size_t fragment_size, const ResourceLayout *vertex_layout, const ResourceLayout *fragment_layout) { if (!vertex_size || !fragment_size) return nullptr; auto *vertex = request_shader(vertex_data, vertex_size, vertex_layout); auto *fragment = request_shader(fragment_data, fragment_size, fragment_layout); return request_program(vertex, fragment); } PipelineLayout *Device::request_pipeline_layout(const CombinedResourceLayout &layout, const ImmutableSamplerBank *sampler_bank) { Hasher h; h.data(reinterpret_cast(layout.sets), sizeof(layout.sets)); h.data(&layout.stages_for_bindings[0][0], sizeof(layout.stages_for_bindings)); h.u32(layout.push_constant_range.stageFlags); h.u32(layout.push_constant_range.size); h.data(layout.spec_constant_mask, sizeof(layout.spec_constant_mask)); h.u32(layout.attribute_mask); h.u32(layout.render_target_mask); for (unsigned set = 0; set < VULKAN_NUM_DESCRIPTOR_SETS; set++) { Util::for_each_bit(layout.sets[set].immutable_sampler_mask, [&](unsigned bit) { VK_ASSERT(sampler_bank && sampler_bank->samplers[set][bit]); h.u64(sampler_bank->samplers[set][bit]->get_hash()); }); } auto hash = h.get(); auto *ret = pipeline_layouts.find(hash); if (!ret) ret = pipeline_layouts.emplace_yield(hash, hash, this, layout, sampler_bank); return ret; } DescriptorSetAllocator *Device::request_descriptor_set_allocator(const DescriptorSetLayout &layout, const uint32_t *stages_for_bindings, const ImmutableSampler * const *immutable_samplers_) { Hasher h; h.data(reinterpret_cast(&layout), sizeof(layout)); h.data(stages_for_bindings, sizeof(uint32_t) * VULKAN_NUM_BINDINGS); Util::for_each_bit(layout.immutable_sampler_mask, [&](unsigned bit) { VK_ASSERT(immutable_samplers_ && immutable_samplers_[bit]); h.u64(immutable_samplers_[bit]->get_hash()); }); auto hash = h.get(); auto *ret = descriptor_set_allocators.find(hash); if (!ret) ret = descriptor_set_allocators.emplace_yield(hash, hash, this, layout, stages_for_bindings, immutable_samplers_); return ret; } void Device::bake_program(Program &program) { CombinedResourceLayout layout; if (program.get_shader(ShaderStage::Vertex)) layout.attribute_mask = program.get_shader(ShaderStage::Vertex)->get_layout().input_mask; if (program.get_shader(ShaderStage::Fragment)) layout.render_target_mask = program.get_shader(ShaderStage::Fragment)->get_layout().output_mask; ImmutableSamplerBank ext_immutable_samplers = {}; layout.descriptor_set_mask = 0; for (unsigned i = 0; i < static_cast(ShaderStage::Count); i++) { auto *shader = program.get_shader(static_cast(i)); if (!shader) continue; uint32_t stage_mask = 1u << i; auto &shader_layout = shader->get_layout(); auto &immutable_bank = shader->get_immutable_sampler_bank(); for (unsigned set = 0; set < VULKAN_NUM_DESCRIPTOR_SETS; set++) { layout.sets[set].sampled_image_mask |= shader_layout.sets[set].sampled_image_mask; layout.sets[set].storage_image_mask |= shader_layout.sets[set].storage_image_mask; layout.sets[set].uniform_buffer_mask |= shader_layout.sets[set].uniform_buffer_mask; layout.sets[set].storage_buffer_mask |= shader_layout.sets[set].storage_buffer_mask; layout.sets[set].sampled_buffer_mask |= shader_layout.sets[set].sampled_buffer_mask; layout.sets[set].input_attachment_mask |= shader_layout.sets[set].input_attachment_mask; layout.sets[set].sampler_mask |= shader_layout.sets[set].sampler_mask; layout.sets[set].separate_image_mask |= shader_layout.sets[set].separate_image_mask; layout.sets[set].fp_mask |= shader_layout.sets[set].fp_mask; auto immutable_mask = shader_layout.sets[set].immutable_sampler_mask; layout.sets[set].immutable_sampler_mask |= immutable_mask; for_each_bit(immutable_mask, [&](uint32_t binding) { if (ext_immutable_samplers.samplers[set][binding] && immutable_bank.samplers[set][binding] != ext_immutable_samplers.samplers[set][binding]) { LOGE("Immutable sampler mismatch detected!\n"); } else { VK_ASSERT(immutable_bank.samplers[set][binding]); ext_immutable_samplers.samplers[set][binding] = immutable_bank.samplers[set][binding]; } }); uint32_t active_binds = shader_layout.sets[set].sampled_image_mask | shader_layout.sets[set].storage_image_mask | shader_layout.sets[set].uniform_buffer_mask| shader_layout.sets[set].storage_buffer_mask | shader_layout.sets[set].sampled_buffer_mask | shader_layout.sets[set].input_attachment_mask | shader_layout.sets[set].sampler_mask | shader_layout.sets[set].separate_image_mask; if (active_binds) layout.stages_for_sets[set] |= stage_mask; for_each_bit(active_binds, [&](uint32_t bit) { layout.stages_for_bindings[set][bit] |= stage_mask; auto &combined_size = layout.sets[set].array_size[bit]; auto &shader_size = shader_layout.sets[set].array_size[bit]; if (combined_size && combined_size != shader_size) LOGE("Mismatch between array sizes in different shaders.\n"); else combined_size = shader_size; }); } // Merge push constant ranges into one range. // Do not try to split into multiple ranges as it just complicates things for no obvious gain. if (shader_layout.push_constant_size != 0) { layout.push_constant_range.stageFlags |= 1u << i; layout.push_constant_range.size = std::max(layout.push_constant_range.size, shader_layout.push_constant_size); } layout.spec_constant_mask[i] = shader_layout.spec_constant_mask; layout.combined_spec_constant_mask |= shader_layout.spec_constant_mask; layout.bindless_descriptor_set_mask |= shader_layout.bindless_set_mask; } for (unsigned set = 0; set < VULKAN_NUM_DESCRIPTOR_SETS; set++) { if (layout.stages_for_sets[set] != 0) { layout.descriptor_set_mask |= 1u << set; for (unsigned binding = 0; binding < VULKAN_NUM_BINDINGS; binding++) { auto &array_size = layout.sets[set].array_size[binding]; if (array_size == DescriptorSetLayout::UNSIZED_ARRAY) { for (unsigned i = 1; i < VULKAN_NUM_BINDINGS; i++) { if (layout.stages_for_bindings[set][i] != 0) LOGE("Using bindless for set = %u, but binding = %u has a descriptor attached to it.\n", set, i); } // Allows us to have one unified descriptor set layout for bindless. layout.stages_for_bindings[set][binding] = VK_SHADER_STAGE_ALL; } else if (array_size == 0) { array_size = 1; } else { for (unsigned i = 1; i < array_size; i++) { if (layout.stages_for_bindings[set][binding + i] != 0) { LOGE("Detected binding aliasing for (%u, %u). Binding array with %u elements starting at (%u, %u) overlaps.\n", set, binding + i, array_size, set, binding); } } } } } } Hasher h; h.u32(layout.push_constant_range.stageFlags); h.u32(layout.push_constant_range.size); layout.push_constant_layout_hash = h.get(); program.set_pipeline_layout(request_pipeline_layout(layout, &ext_immutable_samplers)); } bool Device::init_pipeline_cache(const uint8_t *data, size_t size) { static const auto uuid_size = sizeof(gpu_props.pipelineCacheUUID); VkPipelineCacheCreateInfo info = { VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO }; if (!data || size < uuid_size) { LOGI("Creating a fresh pipeline cache.\n"); } else if (memcmp(data, gpu_props.pipelineCacheUUID, uuid_size) != 0) { LOGI("Pipeline cache UUID changed.\n"); } else { info.initialDataSize = size - uuid_size; info.pInitialData = data + uuid_size; LOGI("Initializing pipeline cache.\n"); } if (pipeline_cache != VK_NULL_HANDLE) table->vkDestroyPipelineCache(device, pipeline_cache, nullptr); pipeline_cache = VK_NULL_HANDLE; return table->vkCreatePipelineCache(device, &info, nullptr, &pipeline_cache) == VK_SUCCESS; } static inline char to_hex(uint8_t v) { if (v < 10) return char('0' + v); else return char('a' + (v - 10)); } string Device::get_pipeline_cache_string() const { string res; res.reserve(sizeof(gpu_props.pipelineCacheUUID) * 2); for (auto &c : gpu_props.pipelineCacheUUID) { res += to_hex(uint8_t((c >> 4) & 0xf)); res += to_hex(uint8_t(c & 0xf)); } return res; } void Device::init_pipeline_cache() { #ifdef GRANITE_VULKAN_FILESYSTEM if (!system_handles.filesystem) return; auto file = system_handles.filesystem->open(Util::join("cache://pipeline_cache_", get_pipeline_cache_string(), ".bin"), Granite::FileMode::ReadOnly); if (file) { auto size = file->get_size(); auto *mapped = static_cast(file->map()); if (mapped && !init_pipeline_cache(mapped, size)) LOGE("Failed to initialize pipeline cache.\n"); } else if (!init_pipeline_cache(nullptr, 0)) LOGE("Failed to initialize pipeline cache.\n"); #endif } size_t Device::get_pipeline_cache_size() { if (pipeline_cache == VK_NULL_HANDLE) return 0; static const auto uuid_size = sizeof(gpu_props.pipelineCacheUUID); size_t size = 0; if (table->vkGetPipelineCacheData(device, pipeline_cache, &size, nullptr) != VK_SUCCESS) { LOGE("Failed to get pipeline cache data.\n"); return 0; } return size + uuid_size; } bool Device::get_pipeline_cache_data(uint8_t *data, size_t size) { if (pipeline_cache == VK_NULL_HANDLE) return false; static const auto uuid_size = sizeof(gpu_props.pipelineCacheUUID); if (size < uuid_size) return false; size -= uuid_size; memcpy(data, gpu_props.pipelineCacheUUID, uuid_size); data += uuid_size; if (table->vkGetPipelineCacheData(device, pipeline_cache, &size, data) != VK_SUCCESS) { LOGE("Failed to get pipeline cache data.\n"); return false; } return true; } void Device::flush_pipeline_cache() { #ifdef GRANITE_VULKAN_FILESYSTEM if (!system_handles.filesystem) return; size_t size = get_pipeline_cache_size(); if (!size) { LOGE("Failed to get pipeline cache size.\n"); return; } auto file = system_handles.filesystem->open(Util::join("cache://pipeline_cache_", get_pipeline_cache_string(), ".bin"), Granite::FileMode::WriteOnly); if (!file) { LOGE("Failed to get pipeline cache data.\n"); return; } uint8_t *data = static_cast(file->map_write(size)); if (!data) { LOGE("Failed to get pipeline cache data.\n"); return; } if (!get_pipeline_cache_data(data, size)) { LOGE("Failed to get pipeline cache data.\n"); return; } #endif } void Device::init_workarounds() { workarounds = {}; #ifdef __APPLE__ // Events are not supported in MoltenVK. workarounds.emulate_event_as_pipeline_barrier = true; LOGW("Emulating events as pipeline barriers on Metal emulation.\n"); #else if (gpu_props.vendorID == VENDOR_ID_NVIDIA && #ifdef _WIN32 VK_VERSION_MAJOR(gpu_props.driverVersion) < 417) #else VK_VERSION_MAJOR(gpu_props.driverVersion) < 415) #endif { workarounds.force_store_in_render_pass = true; LOGW("Detected workaround for render pass STORE_OP_STORE.\n"); } if (gpu_props.vendorID == VENDOR_ID_QCOM) { // Apparently, we need to use STORE_OP_STORE in all render passes no matter what ... workarounds.force_store_in_render_pass = true; workarounds.broken_color_write_mask = true; LOGW("Detected workaround for render pass STORE_OP_STORE.\n"); LOGW("Detected workaround for broken color write masks.\n"); } // UNDEFINED -> COLOR_ATTACHMENT_OPTIMAL stalls, so need to acquire async. if (gpu_props.vendorID == VENDOR_ID_ARM) { LOGW("Workaround applied: Emulating events as pipeline barriers.\n"); LOGW("Workaround applied: Optimize ALL_GRAPHICS_BIT barriers.\n"); // All performance related workarounds. workarounds.emulate_event_as_pipeline_barrier = true; workarounds.optimize_all_graphics_barrier = true; if (ext.timeline_semaphore_features.timelineSemaphore) { LOGW("Workaround applied: Split binary timeline semaphores.\n"); workarounds.split_binary_timeline_semaphores = true; } } #endif } void Device::set_context(const Context &context) { table = &context.get_device_table(); #ifdef GRANITE_VULKAN_MT register_thread_index(0); #endif instance = context.get_instance(); gpu = context.get_gpu(); device = context.get_device(); num_thread_indices = context.get_num_thread_indices(); queue_info = context.get_queue_info(); mem_props = context.get_mem_props(); gpu_props = context.get_gpu_props(); ext = context.get_enabled_device_features(); init_workarounds(); init_stock_samplers(); init_pipeline_cache(); init_timeline_semaphores(); init_bindless(); #ifdef ANDROID init_frame_contexts(3); // Android needs a bit more ... ;) #else init_frame_contexts(2); // By default, regular double buffer between CPU and GPU. #endif managers.memory.init(this); managers.semaphore.init(this); managers.fence.init(this); managers.event.init(this); managers.vbo.init(this, 4 * 1024, 16, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, ImplementationQuirks::get().staging_need_device_local); managers.ibo.init(this, 4 * 1024, 16, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, ImplementationQuirks::get().staging_need_device_local); managers.ubo.init(this, 256 * 1024, std::max(16u, gpu_props.limits.minUniformBufferOffsetAlignment), VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, ImplementationQuirks::get().staging_need_device_local); managers.ubo.set_spill_region_size(VULKAN_MAX_UBO_SIZE); managers.staging.init(this, 64 * 1024, std::max(16u, gpu_props.limits.optimalBufferCopyOffsetAlignment), VK_BUFFER_USAGE_TRANSFER_SRC_BIT, false); managers.vbo.set_max_retained_blocks(256); managers.ibo.set_max_retained_blocks(256); managers.ubo.set_max_retained_blocks(64); managers.staging.set_max_retained_blocks(32); for (int i = 0; i < QUEUE_INDEX_COUNT; i++) { if (queue_info.family_indices[i] == VK_QUEUE_FAMILY_IGNORED) continue; bool alias_pool = false; for (int j = 0; j < i; j++) { if (queue_info.family_indices[i] == queue_info.family_indices[j]) { alias_pool = true; break; } } if (!alias_pool) queue_data[i].performance_query_pool.init_device(this, queue_info.family_indices[i]); } #ifdef GRANITE_VULKAN_FOSSILIZE init_pipeline_state(); #endif #ifdef GRANITE_VULKAN_FILESYSTEM init_shader_manager_cache(); #endif system_handles = context.get_system_handles(); if (system_handles.timeline_trace_file) init_calibrated_timestamps(); } void Device::init_bindless() { if (!ext.supports_descriptor_indexing) return; DescriptorSetLayout layout; layout.array_size[0] = DescriptorSetLayout::UNSIZED_ARRAY; for (unsigned i = 1; i < VULKAN_NUM_BINDINGS; i++) layout.array_size[i] = 1; layout.separate_image_mask = 1; uint32_t stages_for_sets[VULKAN_NUM_BINDINGS] = { VK_SHADER_STAGE_ALL }; bindless_sampled_image_allocator_integer = request_descriptor_set_allocator(layout, stages_for_sets, nullptr); layout.fp_mask = 1; bindless_sampled_image_allocator_fp = request_descriptor_set_allocator(layout, stages_for_sets, nullptr); } void Device::init_timeline_semaphores() { if (!ext.timeline_semaphore_features.timelineSemaphore) return; VkSemaphoreTypeCreateInfoKHR type_info = { VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR }; VkSemaphoreCreateInfo info = { VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO }; info.pNext = &type_info; type_info.semaphoreType = VK_SEMAPHORE_TYPE_TIMELINE_KHR; type_info.initialValue = 0; for (int i = 0; i < QUEUE_INDEX_COUNT; i++) if (table->vkCreateSemaphore(device, &info, nullptr, &queue_data[i].timeline_semaphore) != VK_SUCCESS) LOGE("Failed to create timeline semaphore.\n"); } void Device::configure_default_geometry_samplers(float max_aniso, float lod_bias) { init_stock_sampler(StockSampler::DefaultGeometryFilterClamp, max_aniso, lod_bias); init_stock_sampler(StockSampler::DefaultGeometryFilterWrap, max_aniso, lod_bias); } void Device::init_stock_sampler(StockSampler mode, float max_aniso, float lod_bias) { SamplerCreateInfo info = {}; info.max_lod = VK_LOD_CLAMP_NONE; info.max_anisotropy = 1.0f; switch (mode) { case StockSampler::NearestShadow: case StockSampler::LinearShadow: info.compare_enable = true; info.compare_op = VK_COMPARE_OP_LESS_OR_EQUAL; break; default: info.compare_enable = false; break; } switch (mode) { case StockSampler::TrilinearClamp: case StockSampler::TrilinearWrap: case StockSampler::DefaultGeometryFilterWrap: case StockSampler::DefaultGeometryFilterClamp: info.mipmap_mode = VK_SAMPLER_MIPMAP_MODE_LINEAR; break; default: info.mipmap_mode = VK_SAMPLER_MIPMAP_MODE_NEAREST; break; } switch (mode) { case StockSampler::DefaultGeometryFilterClamp: case StockSampler::DefaultGeometryFilterWrap: case StockSampler::LinearClamp: case StockSampler::LinearWrap: case StockSampler::TrilinearClamp: case StockSampler::TrilinearWrap: case StockSampler::LinearShadow: info.mag_filter = VK_FILTER_LINEAR; info.min_filter = VK_FILTER_LINEAR; break; default: info.mag_filter = VK_FILTER_NEAREST; info.min_filter = VK_FILTER_NEAREST; break; } switch (mode) { default: case StockSampler::DefaultGeometryFilterWrap: case StockSampler::LinearWrap: case StockSampler::NearestWrap: case StockSampler::TrilinearWrap: info.address_mode_u = VK_SAMPLER_ADDRESS_MODE_REPEAT; info.address_mode_v = VK_SAMPLER_ADDRESS_MODE_REPEAT; info.address_mode_w = VK_SAMPLER_ADDRESS_MODE_REPEAT; break; case StockSampler::DefaultGeometryFilterClamp: case StockSampler::LinearClamp: case StockSampler::NearestClamp: case StockSampler::TrilinearClamp: case StockSampler::NearestShadow: case StockSampler::LinearShadow: info.address_mode_u = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.address_mode_v = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; info.address_mode_w = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; break; } switch (mode) { case StockSampler::DefaultGeometryFilterWrap: case StockSampler::DefaultGeometryFilterClamp: if (get_device_features().enabled_features.samplerAnisotropy) { info.anisotropy_enable = true; info.max_anisotropy = std::min(max_aniso, get_gpu_properties().limits.maxSamplerAnisotropy); } info.mip_lod_bias = lod_bias; break; default: break; } samplers[unsigned(mode)] = request_immutable_sampler(info, nullptr); } void Device::init_stock_samplers() { for (unsigned i = 0; i < static_cast(StockSampler::Count); i++) { auto mode = static_cast(i); init_stock_sampler(mode, 8.0f, 0.0f); } } static void request_block(Device &device, BufferBlock &block, VkDeviceSize size, BufferPool &pool, std::vector *dma, std::vector &recycle) { if (block.mapped) device.unmap_host_buffer(*block.cpu, MEMORY_ACCESS_WRITE_BIT); if (block.offset == 0) { if (block.size == pool.get_block_size()) pool.recycle_block(block); } else { if (block.cpu != block.gpu) { VK_ASSERT(dma); dma->push_back(block); } if (block.size == pool.get_block_size()) recycle.push_back(block); } if (size) block = pool.request_block(size); else block = {}; } void Device::request_vertex_block(BufferBlock &block, VkDeviceSize size) { LOCK(); request_vertex_block_nolock(block, size); } void Device::request_vertex_block_nolock(BufferBlock &block, VkDeviceSize size) { request_block(*this, block, size, managers.vbo, &dma.vbo, frame().vbo_blocks); } void Device::request_index_block(BufferBlock &block, VkDeviceSize size) { LOCK(); request_index_block_nolock(block, size); } void Device::request_index_block_nolock(BufferBlock &block, VkDeviceSize size) { request_block(*this, block, size, managers.ibo, &dma.ibo, frame().ibo_blocks); } void Device::request_uniform_block(BufferBlock &block, VkDeviceSize size) { LOCK(); request_uniform_block_nolock(block, size); } void Device::request_uniform_block_nolock(BufferBlock &block, VkDeviceSize size) { request_block(*this, block, size, managers.ubo, &dma.ubo, frame().ubo_blocks); } void Device::request_staging_block(BufferBlock &block, VkDeviceSize size) { LOCK(); request_staging_block_nolock(block, size); } void Device::request_staging_block_nolock(BufferBlock &block, VkDeviceSize size) { request_block(*this, block, size, managers.staging, nullptr, frame().staging_blocks); } void Device::submit(CommandBufferHandle &cmd, Fence *fence, unsigned semaphore_count, Semaphore *semaphores) { cmd->end_debug_channel(); LOCK(); submit_nolock(move(cmd), fence, semaphore_count, semaphores); } void Device::submit_discard_nolock(CommandBufferHandle &cmd) { #ifdef VULKAN_DEBUG auto type = cmd->get_command_buffer_type(); auto &pool = frame().cmd_pools[get_physical_queue_type(type)][cmd->get_thread_index()]; pool.signal_submitted(cmd->get_command_buffer()); #endif cmd.reset(); decrement_frame_counter_nolock(); } void Device::submit_discard(CommandBufferHandle &cmd) { LOCK(); submit_discard_nolock(cmd); } QueueIndices Device::get_physical_queue_type(CommandBuffer::Type queue_type) const { if (queue_type != CommandBuffer::Type::AsyncGraphics) { // Enums match. return QueueIndices(queue_type); } else { if (queue_info.family_indices[QUEUE_INDEX_GRAPHICS] == queue_info.family_indices[QUEUE_INDEX_COMPUTE] && queue_info.queues[QUEUE_INDEX_GRAPHICS] != queue_info.queues[QUEUE_INDEX_COMPUTE]) { return QUEUE_INDEX_COMPUTE; } else { return QUEUE_INDEX_GRAPHICS; } } } void Device::submit_nolock(CommandBufferHandle cmd, Fence *fence, unsigned semaphore_count, Semaphore *semaphores) { auto type = cmd->get_command_buffer_type(); auto physical_type = get_physical_queue_type(type); auto &submissions = frame().submissions[physical_type]; #ifdef VULKAN_DEBUG auto &pool = frame().cmd_pools[physical_type][cmd->get_thread_index()]; pool.signal_submitted(cmd->get_command_buffer()); #endif bool profiled_submit = cmd->has_profiling(); if (profiled_submit) { LOGI("Submitting profiled command buffer, draining GPU.\n"); Fence drain_fence; submit_empty_nolock(physical_type, &drain_fence, 0, nullptr, -1); drain_fence->wait(); drain_fence->set_internal_sync_object(); } cmd->end(); submissions.push_back(move(cmd)); InternalFence signalled_fence; if (fence || semaphore_count) { submit_queue(physical_type, fence ? &signalled_fence : nullptr, semaphore_count, semaphores, profiled_submit ? 0 : -1); } if (fence) { VK_ASSERT(!*fence); if (signalled_fence.value) *fence = Fence(handle_pool.fences.allocate(this, signalled_fence.value, signalled_fence.timeline)); else *fence = Fence(handle_pool.fences.allocate(this, signalled_fence.fence)); } if (profiled_submit) { // Drain queue again and report results. LOGI("Submitted profiled command buffer, draining GPU and report ...\n"); auto &query_pool = get_performance_query_pool(physical_type); Fence drain_fence; submit_empty_nolock(physical_type, &drain_fence, 0, nullptr, fence || semaphore_count ? -1 : 0); drain_fence->wait(); drain_fence->set_internal_sync_object(); query_pool.report(); } decrement_frame_counter_nolock(); } void Device::submit_empty(CommandBuffer::Type type, Fence *fence, unsigned semaphore_count, Semaphore *semaphores) { LOCK(); submit_empty_nolock(get_physical_queue_type(type), fence, semaphore_count, semaphores, -1); } void Device::submit_empty_nolock(QueueIndices physical_type, Fence *fence, unsigned semaphore_count, Semaphore *semaphores, int profiling_iteration) { if (physical_type != QUEUE_INDEX_TRANSFER) flush_frame(QUEUE_INDEX_TRANSFER); InternalFence signalled_fence; submit_queue(physical_type, fence ? &signalled_fence : nullptr, semaphore_count, semaphores, profiling_iteration); if (fence) { if (signalled_fence.value) *fence = Fence(handle_pool.fences.allocate(this, signalled_fence.value, signalled_fence.timeline)); else *fence = Fence(handle_pool.fences.allocate(this, signalled_fence.fence)); } } void Device::submit_empty_inner(QueueIndices physical_type, InternalFence *fence, unsigned semaphore_count, Semaphore *semaphores) { auto &data = queue_data[physical_type]; VkSemaphore timeline_semaphore = data.timeline_semaphore; uint64_t timeline_value = ++data.current_timeline; VkQueue queue = queue_info.queues[physical_type]; frame().timeline_fences[physical_type] = data.current_timeline; // Add external wait semaphores. Helper::WaitSemaphores wait_semaphores; Helper::BatchComposer composer(get_workarounds().split_binary_timeline_semaphores); collect_wait_semaphores(data, wait_semaphores); composer.add_wait_submissions(wait_semaphores); emit_queue_signals(composer, timeline_semaphore, timeline_value, fence, semaphore_count, semaphores); VkFence cleared_fence = fence && !ext.timeline_semaphore_features.timelineSemaphore ? managers.fence.request_cleared_fence() : VK_NULL_HANDLE; if (fence) fence->fence = cleared_fence; auto start_ts = write_calibrated_timestamp_nolock(); auto result = submit_batches(composer, queue, cleared_fence); auto end_ts = write_calibrated_timestamp_nolock(); register_time_interval_nolock("CPU", std::move(start_ts), std::move(end_ts), "submit", ""); if (result != VK_SUCCESS) LOGE("vkQueueSubmit failed (code: %d).\n", int(result)); if (result == VK_ERROR_DEVICE_LOST) report_checkpoints(); if (!ext.timeline_semaphore_features.timelineSemaphore) data.need_fence = true; } Fence Device::request_legacy_fence() { VkFence fence = managers.fence.request_cleared_fence(); return Fence(handle_pool.fences.allocate(this, fence)); } void Device::submit_staging(CommandBufferHandle &cmd, VkBufferUsageFlags usage, bool flush) { auto access = buffer_usage_to_possible_access(usage); auto stages = buffer_usage_to_possible_stages(usage); VkQueue src_queue = queue_info.queues[get_physical_queue_type(cmd->get_command_buffer_type())]; if (src_queue == queue_info.queues[QUEUE_INDEX_GRAPHICS] && src_queue == queue_info.queues[QUEUE_INDEX_COMPUTE]) { // For single-queue systems, just use a pipeline barrier. cmd->barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, stages, access); submit_nolock(cmd, nullptr, 0, nullptr); } else { auto compute_stages = stages & (VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT); auto compute_access = access & (VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_UNIFORM_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT | VK_ACCESS_INDIRECT_COMMAND_READ_BIT); auto graphics_stages = stages; if (src_queue == queue_info.queues[QUEUE_INDEX_GRAPHICS]) { cmd->barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, graphics_stages, access); if (compute_stages != 0) { Semaphore sem; submit_nolock(cmd, nullptr, 1, &sem); add_wait_semaphore_nolock(QUEUE_INDEX_COMPUTE, sem, compute_stages, flush); } else submit_nolock(cmd, nullptr, 0, nullptr); } else if (src_queue == queue_info.queues[QUEUE_INDEX_COMPUTE]) { cmd->barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT, compute_stages, compute_access); if (graphics_stages != 0) { Semaphore sem; submit_nolock(cmd, nullptr, 1, &sem); add_wait_semaphore_nolock(QUEUE_INDEX_GRAPHICS, sem, graphics_stages, flush); } else submit_nolock(cmd, nullptr, 0, nullptr); } else { if (graphics_stages != 0 && compute_stages != 0) { Semaphore semaphores[2]; submit_nolock(cmd, nullptr, 2, semaphores); add_wait_semaphore_nolock(QUEUE_INDEX_GRAPHICS, semaphores[0], graphics_stages, flush); add_wait_semaphore_nolock(QUEUE_INDEX_COMPUTE, semaphores[1], compute_stages, flush); } else if (graphics_stages != 0) { Semaphore sem; submit_nolock(cmd, nullptr, 1, &sem); add_wait_semaphore_nolock(QUEUE_INDEX_GRAPHICS, sem, graphics_stages, flush); } else if (compute_stages != 0) { Semaphore sem; submit_nolock(cmd, nullptr, 1, &sem); add_wait_semaphore_nolock(QUEUE_INDEX_COMPUTE, sem, compute_stages, flush); } else submit_nolock(cmd, nullptr, 0, nullptr); } } } void Device::collect_wait_semaphores(QueueData &data, Helper::WaitSemaphores &sem) { for (size_t i = 0, n = data.wait_semaphores.size(); i < n; i++) { auto &semaphore = data.wait_semaphores[i]; auto vk_semaphore = semaphore->consume(); if (semaphore->get_timeline_value()) { sem.timeline_waits.push_back(vk_semaphore); sem.timeline_wait_stages.push_back(data.wait_stages[i]); sem.timeline_wait_counts.push_back(semaphore->get_timeline_value()); } else { if (semaphore->can_recycle()) frame().recycled_semaphores.push_back(vk_semaphore); else frame().destroyed_semaphores.push_back(vk_semaphore); sem.binary_waits.push_back(vk_semaphore); sem.binary_wait_stages.push_back(data.wait_stages[i]); } } data.wait_stages.clear(); data.wait_semaphores.clear(); } static bool has_timeline_semaphore(const SmallVector &counts) { return std::find_if(counts.begin(), counts.end(), [](uint64_t count) { return count != 0; }) != counts.end(); } static bool has_binary_semaphore(const SmallVector &counts) { return std::find_if(counts.begin(), counts.end(), [](uint64_t count) { return count == 0; }) != counts.end(); } bool Helper::BatchComposer::has_timeline_semaphore_in_batch(unsigned index) const { return has_timeline_semaphore(wait_counts[index]) || has_timeline_semaphore(signal_counts[index]); } bool Helper::BatchComposer::has_binary_semaphore_in_batch(unsigned index) const { return has_binary_semaphore(wait_counts[index]) || has_binary_semaphore(signal_counts[index]); } Helper::BatchComposer::BatchComposer(bool split_binary_timeline_semaphores_) : split_binary_timeline_semaphores(split_binary_timeline_semaphores_) { submits.emplace_back(); } void Helper::BatchComposer::begin_batch() { if (!waits[submit_index].empty() || !cmds[submit_index].empty() || !signals[submit_index].empty()) { submit_index = submits.size(); submits.emplace_back(); VK_ASSERT(submits.size() <= MaxSubmissions); } } void Helper::BatchComposer::add_wait_submissions(WaitSemaphores &sem) { if (!sem.binary_waits.empty()) { // Split binary semaphore waits from timeline semaphore waits to work around driver bugs if needed. if (split_binary_timeline_semaphores && has_timeline_semaphore_in_batch(submit_index)) begin_batch(); for (size_t i = 0, n = sem.binary_waits.size(); i < n; i++) { waits[submit_index].push_back(sem.binary_waits[i]); wait_stages[submit_index].push_back(sem.binary_wait_stages[i]); wait_counts[submit_index].push_back(0); } } if (!sem.timeline_waits.empty()) { // Split binary semaphore waits from timeline semaphore waits to work around driver bugs if needed. if (split_binary_timeline_semaphores && has_binary_semaphore_in_batch(submit_index)) begin_batch(); for (size_t i = 0, n = sem.timeline_waits.size(); i < n; i++) { waits[submit_index].push_back(sem.timeline_waits[i]); wait_stages[submit_index].push_back(sem.timeline_wait_stages[i]); wait_counts[submit_index].push_back(sem.timeline_wait_counts[i]); } } } SmallVector & Helper::BatchComposer::bake(int profiling_iteration) { for (size_t i = 0, n = submits.size(); i < n; i++) { auto &submit = submits[i]; auto &timeline_submit = timeline_infos[i]; submit = { VK_STRUCTURE_TYPE_SUBMIT_INFO }; if (has_timeline_semaphore_in_batch(i)) { timeline_submit = { VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR }; submit.pNext = &timeline_submit; if (split_binary_timeline_semaphores && has_binary_semaphore_in_batch(i)) LOGE("Using timeline semaphore info, but have binary semaphores as well.\n"); timeline_submit.waitSemaphoreValueCount = wait_counts[i].size(); timeline_submit.pWaitSemaphoreValues = wait_counts[i].data(); if (wait_counts[i].size() != waits[i].size()) LOGE("Mismatch in wait counts and number of waits!\n"); timeline_submit.signalSemaphoreValueCount = signal_counts[i].size(); timeline_submit.pSignalSemaphoreValues = signal_counts[i].data(); if (signal_counts[i].size() != signals[i].size()) LOGE("Mismatch in signal counts and number of signals!\n"); } if (profiling_iteration >= 0) { profiling_infos[i] = { VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR }; profiling_infos[i].counterPassIndex = uint32_t(profiling_iteration); if (submit.pNext) timeline_submit.pNext = &profiling_infos[i]; else submit.pNext = &profiling_infos[i]; } submit.commandBufferCount = cmds[i].size(); submit.pCommandBuffers = cmds[i].data(); submit.waitSemaphoreCount = waits[i].size(); submit.pWaitSemaphores = waits[i].data(); submit.pWaitDstStageMask = wait_stages[i].data(); submit.signalSemaphoreCount = signals[i].size(); submit.pSignalSemaphores = signals[i].data(); } // Compact the submission array to avoid empty submissions. size_t submit_count = 0; for (size_t i = 0, n = submits.size(); i < n; i++) { if (submits[i].waitSemaphoreCount || submits[i].signalSemaphoreCount || submits[i].commandBufferCount) { if (i != submit_count) submits[submit_count] = submits[i]; submit_count++; } } submits.resize(submit_count); return submits; } void Helper::BatchComposer::add_command_buffer(VkCommandBuffer cmd) { if (!signals[submit_index].empty()) begin_batch(); cmds[submit_index].push_back(cmd); } void Helper::BatchComposer::add_signal_semaphore(VkSemaphore sem, uint64_t timeline) { if (split_binary_timeline_semaphores) { if ((timeline == 0 && has_timeline_semaphore_in_batch(submit_index)) || (timeline != 0 && has_binary_semaphore_in_batch(submit_index))) begin_batch(); } signals[submit_index].push_back(sem); signal_counts[submit_index].push_back(timeline); } void Helper::BatchComposer::add_wait_semaphore(SemaphoreHolder &sem, VkPipelineStageFlags stage) { if (!cmds[submit_index].empty() || !signals[submit_index].empty()) begin_batch(); uint64_t timeline = sem.get_timeline_value(); if (split_binary_timeline_semaphores) { if ((timeline == 0 && has_timeline_semaphore_in_batch(submit_index)) || (timeline != 0 && has_binary_semaphore_in_batch(submit_index))) begin_batch(); } waits[submit_index].push_back(sem.get_semaphore()); wait_stages[submit_index].push_back(stage); wait_counts[submit_index].push_back(timeline); } void Device::emit_queue_signals(Helper::BatchComposer &composer, VkSemaphore sem, uint64_t timeline, InternalFence *fence, unsigned semaphore_count, Semaphore *semaphores) { // Add external signal semaphores. if (ext.timeline_semaphore_features.timelineSemaphore) { // Signal once and distribute the timeline value to all. composer.add_signal_semaphore(sem, timeline); if (fence) { fence->timeline = sem; fence->value = timeline; fence->fence = VK_NULL_HANDLE; } for (unsigned i = 0; i < semaphore_count; i++) { VK_ASSERT(!semaphores[i]); semaphores[i] = Semaphore(handle_pool.semaphores.allocate(this, timeline, sem)); } } else { if (fence) { fence->timeline = VK_NULL_HANDLE; fence->value = 0; } for (unsigned i = 0; i < semaphore_count; i++) { VkSemaphore cleared_semaphore = managers.semaphore.request_cleared_semaphore(); composer.add_signal_semaphore(cleared_semaphore, 0); VK_ASSERT(!semaphores[i]); semaphores[i] = Semaphore(handle_pool.semaphores.allocate(this, cleared_semaphore, true)); } } } VkResult Device::submit_batches(Helper::BatchComposer &composer, VkQueue queue, VkFence fence, int profiling_iteration) { auto &submits = composer.bake(profiling_iteration); if (queue_lock_callback) queue_lock_callback(); VkResult result = VK_SUCCESS; if (get_workarounds().split_binary_timeline_semaphores) { for (auto &submit : submits) { bool last_submit = &submit == &submits.back(); result = table->vkQueueSubmit(queue, 1, &submit, last_submit ? fence : VK_NULL_HANDLE); if (result != VK_SUCCESS) break; } } else result = table->vkQueueSubmit(queue, submits.size(), submits.data(), fence); if (ImplementationQuirks::get().queue_wait_on_submission) table->vkQueueWaitIdle(queue); if (queue_unlock_callback) queue_unlock_callback(); return result; } void Device::submit_queue(QueueIndices physical_type, InternalFence *fence, unsigned semaphore_count, Semaphore *semaphores, int profiling_iteration) { // Always check if we need to flush pending transfers. if (physical_type != QUEUE_INDEX_TRANSFER) flush_frame(QUEUE_INDEX_TRANSFER); auto &data = queue_data[physical_type]; auto &submissions = frame().submissions[physical_type]; if (submissions.empty()) { if (fence || semaphore_count) submit_empty_inner(physical_type, fence, semaphore_count, semaphores); return; } VkSemaphore timeline_semaphore = data.timeline_semaphore; uint64_t timeline_value = ++data.current_timeline; VkQueue queue = queue_info.queues[physical_type]; frame().timeline_fences[physical_type] = data.current_timeline; Helper::BatchComposer composer(workarounds.split_binary_timeline_semaphores); Helper::WaitSemaphores wait_semaphores; collect_wait_semaphores(data, wait_semaphores); composer.add_wait_submissions(wait_semaphores); // Find first command buffer which uses WSI, we'll need to emit WSI acquire wait before the first command buffer // that uses WSI image. for (size_t i = 0, submissions_size = submissions.size(); i < submissions_size; i++) { auto &cmd = submissions[i]; VkPipelineStageFlags wsi_stages = cmd->swapchain_touched_in_stages(); if (wsi_stages != 0 && !wsi.consumed) { if (!can_touch_swapchain_in_command_buffer(physical_type)) LOGE("Touched swapchain in unsupported command buffer type %u.\n", unsigned(physical_type)); if (wsi.acquire && wsi.acquire->get_semaphore() != VK_NULL_HANDLE) { VK_ASSERT(wsi.acquire->is_signalled()); composer.add_wait_semaphore(*wsi.acquire, wsi_stages); if (!wsi.acquire->get_timeline_value()) { if (wsi.acquire->can_recycle()) frame().recycled_semaphores.push_back(wsi.acquire->get_semaphore()); else frame().destroyed_semaphores.push_back(wsi.acquire->get_semaphore()); } wsi.acquire->consume(); wsi.acquire.reset(); } composer.add_command_buffer(cmd->get_command_buffer()); VkSemaphore release = managers.semaphore.request_cleared_semaphore(); wsi.release = Semaphore(handle_pool.semaphores.allocate(this, release, true)); wsi.release->set_internal_sync_object(); composer.add_signal_semaphore(release, 0); wsi.present_queue = queue; wsi.consumed = true; } else { // After we have consumed WSI, we cannot keep using it, since we // already signalled the semaphore. VK_ASSERT(wsi_stages == 0); composer.add_command_buffer(cmd->get_command_buffer()); } } VkFence cleared_fence = fence && !ext.timeline_semaphore_features.timelineSemaphore ? managers.fence.request_cleared_fence() : VK_NULL_HANDLE; if (fence) fence->fence = cleared_fence; emit_queue_signals(composer, timeline_semaphore, timeline_value, fence, semaphore_count, semaphores); auto start_ts = write_calibrated_timestamp_nolock(); auto result = submit_batches(composer, queue, cleared_fence, profiling_iteration); auto end_ts = write_calibrated_timestamp_nolock(); register_time_interval_nolock("CPU", std::move(start_ts), std::move(end_ts), "submit", ""); if (result != VK_SUCCESS) LOGE("vkQueueSubmit failed (code: %d).\n", int(result)); if (result == VK_ERROR_DEVICE_LOST) report_checkpoints(); submissions.clear(); if (!ext.timeline_semaphore_features.timelineSemaphore) data.need_fence = true; } void Device::flush_frame(QueueIndices physical_type) { if (queue_info.queues[physical_type] == VK_NULL_HANDLE) return; if (physical_type == QUEUE_INDEX_TRANSFER) sync_buffer_blocks(); submit_queue(physical_type, nullptr, 0, nullptr); } void Device::sync_buffer_blocks() { if (dma.vbo.empty() && dma.ibo.empty() && dma.ubo.empty()) return; VkBufferUsageFlags usage = 0; auto cmd = request_command_buffer_nolock(get_thread_index(), CommandBuffer::Type::AsyncTransfer, false); cmd->begin_region("buffer-block-sync"); for (auto &block : dma.vbo) { VK_ASSERT(block.offset != 0); cmd->copy_buffer(*block.gpu, 0, *block.cpu, 0, block.offset); usage |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT; } for (auto &block : dma.ibo) { VK_ASSERT(block.offset != 0); cmd->copy_buffer(*block.gpu, 0, *block.cpu, 0, block.offset); usage |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT; } for (auto &block : dma.ubo) { VK_ASSERT(block.offset != 0); cmd->copy_buffer(*block.gpu, 0, *block.cpu, 0, block.offset); usage |= VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT; } dma.vbo.clear(); dma.ibo.clear(); dma.ubo.clear(); cmd->end_region(); // Do not flush graphics or compute in this context. // We must be able to inject semaphores into all currently enqueued graphics / compute. submit_staging(cmd, usage, false); } void Device::end_frame_context() { DRAIN_FRAME_LOCK(); end_frame_nolock(); } void Device::end_frame_nolock() { // Kept handles alive until end-of-frame, free now if appropriate. for (auto &image : frame().keep_alive_images) { image->set_internal_sync_object(); image->get_view().set_internal_sync_object(); } frame().keep_alive_images.clear(); // Make sure we have a fence which covers all submissions in the frame. InternalFence fence; for (auto &i : queue_flush_order) { if (queue_data[i].need_fence || !frame().submissions[i].empty()) { submit_queue(i, &fence, 0, nullptr); if (fence.fence != VK_NULL_HANDLE) { frame().wait_fences.push_back(fence.fence); frame().recycle_fences.push_back(fence.fence); } queue_data[i].need_fence = false; } } } void Device::flush_frame() { LOCK(); flush_frame_nolock(); } void Device::flush_frame_nolock() { for (auto &i : queue_flush_order) flush_frame(i); } PerformanceQueryPool &Device::get_performance_query_pool(QueueIndices physical_index) { for (int i = 0; i < physical_index; i++) if (queue_info.family_indices[i] == queue_info.family_indices[physical_index]) return queue_data[i].performance_query_pool; return queue_data[physical_index].performance_query_pool; } CommandBufferHandle Device::request_command_buffer(CommandBuffer::Type type) { return request_command_buffer_for_thread(get_thread_index(), type); } CommandBufferHandle Device::request_command_buffer_for_thread(unsigned thread_index, CommandBuffer::Type type) { LOCK(); return request_command_buffer_nolock(thread_index, type, false); } CommandBufferHandle Device::request_profiled_command_buffer(CommandBuffer::Type type) { return request_profiled_command_buffer_for_thread(get_thread_index(), type); } CommandBufferHandle Device::request_profiled_command_buffer_for_thread(unsigned thread_index, CommandBuffer::Type type) { LOCK(); return request_command_buffer_nolock(thread_index, type, true); } CommandBufferHandle Device::request_command_buffer_nolock(unsigned thread_index, CommandBuffer::Type type, bool profiled) { #ifndef GRANITE_VULKAN_MT VK_ASSERT(thread_index == 0); #endif auto physical_type = get_physical_queue_type(type); auto &pool = frame().cmd_pools[physical_type][thread_index]; auto cmd = pool.request_command_buffer(); if (profiled && !ext.performance_query_features.performanceCounterQueryPools) { LOGW("Profiling is not supported on this device.\n"); profiled = false; } VkCommandBufferBeginInfo info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO }; info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; table->vkBeginCommandBuffer(cmd, &info); add_frame_counter_nolock(); CommandBufferHandle handle(handle_pool.command_buffers.allocate(this, cmd, pipeline_cache, type)); handle->set_thread_index(thread_index); if (profiled) { auto &query_pool = get_performance_query_pool(physical_type); handle->enable_profiling(); query_pool.begin_command_buffer(handle->get_command_buffer()); } return handle; } void Device::submit_secondary(CommandBuffer &primary, CommandBuffer &secondary) { { LOCK(); secondary.end(); decrement_frame_counter_nolock(); #ifdef VULKAN_DEBUG auto &pool = frame().cmd_pools[get_physical_queue_type(secondary.get_command_buffer_type())][secondary.get_thread_index()]; pool.signal_submitted(secondary.get_command_buffer()); #endif } VkCommandBuffer secondary_cmd = secondary.get_command_buffer(); table->vkCmdExecuteCommands(primary.get_command_buffer(), 1, &secondary_cmd); } CommandBufferHandle Device::request_secondary_command_buffer_for_thread(unsigned thread_index, const Framebuffer *framebuffer, unsigned subpass, CommandBuffer::Type type) { LOCK(); auto &pool = frame().cmd_pools[get_physical_queue_type(type)][thread_index]; auto cmd = pool.request_secondary_command_buffer(); VkCommandBufferBeginInfo info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO }; VkCommandBufferInheritanceInfo inherit = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO }; inherit.framebuffer = VK_NULL_HANDLE; inherit.renderPass = framebuffer->get_compatible_render_pass().get_render_pass(); inherit.subpass = subpass; info.pInheritanceInfo = &inherit; info.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT | VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT; table->vkBeginCommandBuffer(cmd, &info); add_frame_counter_nolock(); CommandBufferHandle handle(handle_pool.command_buffers.allocate(this, cmd, pipeline_cache, type)); handle->set_thread_index(thread_index); handle->set_is_secondary(); return handle; } void Device::set_acquire_semaphore(unsigned index, Semaphore acquire) { wsi.acquire = move(acquire); wsi.index = index; wsi.consumed = false; if (wsi.acquire) { wsi.acquire->set_internal_sync_object(); VK_ASSERT(wsi.acquire->is_signalled()); } } Semaphore Device::consume_release_semaphore() { auto ret = move(wsi.release); wsi.release.reset(); return ret; } VkQueue Device::get_current_present_queue() const { VK_ASSERT(wsi.present_queue); return wsi.present_queue; } const Sampler &Device::get_stock_sampler(StockSampler sampler) const { return samplers[static_cast(sampler)]->get_sampler(); } bool Device::swapchain_touched() const { return wsi.consumed; } Device::~Device() { wait_idle(); managers.timestamps.log_simple(); wsi.acquire.reset(); wsi.release.reset(); wsi.swapchain.clear(); if (pipeline_cache != VK_NULL_HANDLE) { flush_pipeline_cache(); table->vkDestroyPipelineCache(device, pipeline_cache, nullptr); } #ifdef GRANITE_VULKAN_FILESYSTEM flush_shader_manager_cache(); #endif #ifdef GRANITE_VULKAN_FOSSILIZE flush_pipeline_state(); #endif framebuffer_allocator.clear(); transient_allocator.clear(); deinit_timeline_semaphores(); } void Device::deinit_timeline_semaphores() { for (auto &data : queue_data) { if (data.timeline_semaphore != VK_NULL_HANDLE) table->vkDestroySemaphore(device, data.timeline_semaphore, nullptr); data.timeline_semaphore = VK_NULL_HANDLE; } // Make sure we don't accidentally try to wait for these after we destroy the semaphores. for (auto &frame : per_frame) { for (auto &fence : frame->timeline_fences) fence = 0; for (auto &timeline : frame->timeline_semaphores) timeline = VK_NULL_HANDLE; } } void Device::init_frame_contexts(unsigned count) { DRAIN_FRAME_LOCK(); wait_idle_nolock(); // Clear out caches which might contain stale data from now on. framebuffer_allocator.clear(); transient_allocator.clear(); per_frame.clear(); for (unsigned i = 0; i < count; i++) { auto frame = unique_ptr(new PerFrame(this, i)); per_frame.emplace_back(move(frame)); } } void Device::init_external_swapchain(const vector &swapchain_images) { DRAIN_FRAME_LOCK(); wsi.swapchain.clear(); wait_idle_nolock(); wsi.index = 0; wsi.consumed = false; for (auto &image : swapchain_images) { wsi.swapchain.push_back(image); if (image) { wsi.swapchain.back()->set_internal_sync_object(); wsi.swapchain.back()->get_view().set_internal_sync_object(); } } } bool Device::can_touch_swapchain_in_command_buffer(QueueIndices physical_type) const { // If 0, we have virtual swap chain, so anything goes. if (!wsi.queue_family_support_mask) return true; return (wsi.queue_family_support_mask & (1u << queue_info.family_indices[physical_type])) != 0; } bool Device::can_touch_swapchain_in_command_buffer(CommandBuffer::Type type) const { return can_touch_swapchain_in_command_buffer(get_physical_queue_type(type)); } void Device::set_swapchain_queue_family_support(uint32_t queue_family_support) { wsi.queue_family_support_mask = queue_family_support; } void Device::init_swapchain(const vector &swapchain_images, unsigned width, unsigned height, VkFormat format, VkSurfaceTransformFlagBitsKHR transform, VkImageUsageFlags usage) { DRAIN_FRAME_LOCK(); wsi.swapchain.clear(); wait_idle_nolock(); auto info = ImageCreateInfo::render_target(width, height, format); info.usage = usage; wsi.index = 0; wsi.consumed = false; for (auto &image : swapchain_images) { VkImageViewCreateInfo view_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; view_info.image = image; view_info.format = format; view_info.components.r = VK_COMPONENT_SWIZZLE_R; view_info.components.g = VK_COMPONENT_SWIZZLE_G; view_info.components.b = VK_COMPONENT_SWIZZLE_B; view_info.components.a = VK_COMPONENT_SWIZZLE_A; view_info.subresourceRange.aspectMask = format_to_aspect_mask(format); view_info.subresourceRange.baseMipLevel = 0; view_info.subresourceRange.baseArrayLayer = 0; view_info.subresourceRange.levelCount = 1; view_info.subresourceRange.layerCount = 1; view_info.viewType = VK_IMAGE_VIEW_TYPE_2D; VkImageView image_view; if (table->vkCreateImageView(device, &view_info, nullptr, &image_view) != VK_SUCCESS) LOGE("Failed to create view for backbuffer."); auto backbuffer = ImageHandle(handle_pool.images.allocate(this, image, image_view, DeviceAllocation{}, info, VK_IMAGE_VIEW_TYPE_2D)); backbuffer->set_internal_sync_object(); backbuffer->disown_image(); backbuffer->get_view().set_internal_sync_object(); backbuffer->set_surface_transform(transform); wsi.swapchain.push_back(backbuffer); set_name(*backbuffer, "backbuffer"); backbuffer->set_swapchain_layout(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR); } } Device::PerFrame::PerFrame(Device *device_, unsigned frame_index_) : device(*device_) , frame_index(frame_index_) , table(device_->get_device_table()) , managers(device_->managers) , query_pool(device_) { unsigned count = device_->num_thread_indices; for (int i = 0; i < QUEUE_INDEX_COUNT; i++) { timeline_semaphores[i] = device.queue_data[i].timeline_semaphore; cmd_pools[i].reserve(count); for (unsigned j = 0; j < count; j++) cmd_pools[i].emplace_back(device_, device_->queue_info.family_indices[i]); } } void Device::keep_handle_alive(ImageHandle handle) { LOCK(); frame().keep_alive_images.push_back(move(handle)); } void Device::free_memory_nolock(const DeviceAllocation &alloc) { frame().allocations.push_back(alloc); } #ifdef VULKAN_DEBUG template static inline bool exists(const T &container, const U &value) { return find(begin(container), end(container), value) != end(container); } #endif void Device::destroy_pipeline(VkPipeline pipeline) { LOCK(); destroy_pipeline_nolock(pipeline); } void Device::reset_fence(VkFence fence, bool observed_wait) { LOCK(); reset_fence_nolock(fence, observed_wait); } void Device::destroy_buffer(VkBuffer buffer) { LOCK(); destroy_buffer_nolock(buffer); } void Device::destroy_descriptor_pool(VkDescriptorPool desc_pool) { LOCK(); destroy_descriptor_pool_nolock(desc_pool); } void Device::destroy_buffer_view(VkBufferView view) { LOCK(); destroy_buffer_view_nolock(view); } void Device::destroy_event(VkEvent event) { LOCK(); destroy_event_nolock(event); } void Device::destroy_framebuffer(VkFramebuffer framebuffer) { LOCK(); destroy_framebuffer_nolock(framebuffer); } void Device::destroy_image(VkImage image) { LOCK(); destroy_image_nolock(image); } void Device::destroy_semaphore(VkSemaphore semaphore) { LOCK(); destroy_semaphore_nolock(semaphore); } void Device::recycle_semaphore(VkSemaphore semaphore) { LOCK(); recycle_semaphore_nolock(semaphore); } void Device::free_memory(const DeviceAllocation &alloc) { LOCK(); free_memory_nolock(alloc); } void Device::destroy_sampler(VkSampler sampler) { LOCK(); destroy_sampler_nolock(sampler); } void Device::destroy_image_view(VkImageView view) { LOCK(); destroy_image_view_nolock(view); } void Device::destroy_pipeline_nolock(VkPipeline pipeline) { VK_ASSERT(!exists(frame().destroyed_pipelines, pipeline)); frame().destroyed_pipelines.push_back(pipeline); } void Device::destroy_image_view_nolock(VkImageView view) { VK_ASSERT(!exists(frame().destroyed_image_views, view)); frame().destroyed_image_views.push_back(view); } void Device::destroy_buffer_view_nolock(VkBufferView view) { VK_ASSERT(!exists(frame().destroyed_buffer_views, view)); frame().destroyed_buffer_views.push_back(view); } void Device::destroy_semaphore_nolock(VkSemaphore semaphore) { VK_ASSERT(!exists(frame().destroyed_semaphores, semaphore)); frame().destroyed_semaphores.push_back(semaphore); } void Device::recycle_semaphore_nolock(VkSemaphore semaphore) { VK_ASSERT(!exists(frame().recycled_semaphores, semaphore)); frame().recycled_semaphores.push_back(semaphore); } void Device::destroy_event_nolock(VkEvent event) { VK_ASSERT(!exists(frame().recycled_events, event)); frame().recycled_events.push_back(event); } void Device::reset_fence_nolock(VkFence fence, bool observed_wait) { if (observed_wait) { table->vkResetFences(device, 1, &fence); managers.fence.recycle_fence(fence); } else frame().recycle_fences.push_back(fence); } PipelineEvent Device::request_pipeline_event() { return PipelineEvent(handle_pool.events.allocate(this, managers.event.request_cleared_event())); } void Device::destroy_image_nolock(VkImage image) { VK_ASSERT(!exists(frame().destroyed_images, image)); frame().destroyed_images.push_back(image); } void Device::destroy_buffer_nolock(VkBuffer buffer) { VK_ASSERT(!exists(frame().destroyed_buffers, buffer)); frame().destroyed_buffers.push_back(buffer); } void Device::destroy_descriptor_pool_nolock(VkDescriptorPool desc_pool) { VK_ASSERT(!exists(frame().destroyed_descriptor_pools, desc_pool)); frame().destroyed_descriptor_pools.push_back(desc_pool); } void Device::destroy_sampler_nolock(VkSampler sampler) { VK_ASSERT(!exists(frame().destroyed_samplers, sampler)); frame().destroyed_samplers.push_back(sampler); } void Device::destroy_framebuffer_nolock(VkFramebuffer framebuffer) { VK_ASSERT(!exists(frame().destroyed_framebuffers, framebuffer)); frame().destroyed_framebuffers.push_back(framebuffer); } void Device::clear_wait_semaphores() { for (auto &data : queue_data) { for (auto &sem : data.wait_semaphores) table->vkDestroySemaphore(device, sem->consume(), nullptr); data.wait_semaphores.clear(); data.wait_stages.clear(); } } void Device::wait_idle() { DRAIN_FRAME_LOCK(); wait_idle_nolock(); } void Device::wait_idle_nolock() { if (!per_frame.empty()) end_frame_nolock(); if (device != VK_NULL_HANDLE) { if (queue_lock_callback) queue_lock_callback(); auto result = table->vkDeviceWaitIdle(device); if (result != VK_SUCCESS) LOGE("vkDeviceWaitIdle failed with code: %d\n", result); if (result == VK_ERROR_DEVICE_LOST) report_checkpoints(); if (queue_unlock_callback) queue_unlock_callback(); } clear_wait_semaphores(); // Free memory for buffer pools. managers.vbo.reset(); managers.ubo.reset(); managers.ibo.reset(); managers.staging.reset(); for (auto &frame : per_frame) { frame->vbo_blocks.clear(); frame->ibo_blocks.clear(); frame->ubo_blocks.clear(); frame->staging_blocks.clear(); } framebuffer_allocator.clear(); transient_allocator.clear(); #ifdef GRANITE_VULKAN_MT for (auto &allocator : descriptor_set_allocators.get_read_only()) allocator.clear(); for (auto &allocator : descriptor_set_allocators.get_read_write()) allocator.clear(); #else for (auto &allocator : descriptor_set_allocators) allocator.clear(); #endif for (auto &frame : per_frame) { // We have done WaitIdle, no need to wait for extra fences, it's also not safe. frame->wait_fences.clear(); frame->begin(); frame->trim_command_pools(); } managers.memory.garbage_collect(); } void Device::promote_read_write_caches_to_read_only() { #ifdef GRANITE_VULKAN_MT pipeline_layouts.move_to_read_only(); descriptor_set_allocators.move_to_read_only(); shaders.move_to_read_only(); programs.move_to_read_only(); for (auto &program : programs.get_read_only()) program.promote_read_write_to_read_only(); render_passes.move_to_read_only(); immutable_samplers.move_to_read_only(); immutable_ycbcr_conversions.move_to_read_only(); #ifdef GRANITE_VULKAN_FILESYSTEM shader_manager.promote_read_write_caches_to_read_only(); #endif #endif } void Device::next_frame_context() { DRAIN_FRAME_LOCK(); if (frame_context_begin_ts) { auto frame_context_end_ts = write_calibrated_timestamp_nolock(); register_time_interval_nolock("CPU", std::move(frame_context_begin_ts), std::move(frame_context_end_ts), "command submissions", ""); frame_context_begin_ts = {}; } // Flush the frame here as we might have pending staging command buffers from init stage. end_frame_nolock(); framebuffer_allocator.begin_frame(); transient_allocator.begin_frame(); #ifdef GRANITE_VULKAN_MT for (auto &allocator : descriptor_set_allocators.get_read_only()) allocator.begin_frame(); for (auto &allocator : descriptor_set_allocators.get_read_write()) allocator.begin_frame(); #else for (auto &allocator : descriptor_set_allocators) allocator.begin_frame(); #endif VK_ASSERT(!per_frame.empty()); frame_context_index++; if (frame_context_index >= per_frame.size()) frame_context_index = 0; frame().begin(); recalibrate_timestamps(); frame_context_begin_ts = write_calibrated_timestamp_nolock(); } QueryPoolHandle Device::write_timestamp(VkCommandBuffer cmd, VkPipelineStageFlagBits stage) { LOCK(); return write_timestamp_nolock(cmd, stage); } QueryPoolHandle Device::write_timestamp_nolock(VkCommandBuffer cmd, VkPipelineStageFlagBits stage) { return frame().query_pool.write_timestamp(cmd, stage); } QueryPoolHandle Device::write_calibrated_timestamp() { LOCK(); return write_calibrated_timestamp_nolock(); } QueryPoolHandle Device::write_calibrated_timestamp_nolock() { if (!system_handles.timeline_trace_file) return {}; auto handle = QueryPoolHandle(handle_pool.query.allocate(this, false)); handle->signal_timestamp_ticks(get_current_time_nsecs()); return handle; } void Device::recalibrate_timestamps_fallback() { wait_idle_nolock(); auto cmd = request_command_buffer_nolock(0, CommandBuffer::Type::Generic, false); auto ts = write_timestamp_nolock(cmd->get_command_buffer(), VK_PIPELINE_STAGE_ALL_COMMANDS_BIT); if (!ts) { submit_discard_nolock(cmd); return; } auto start_ts = Util::get_current_time_nsecs(); submit_nolock(cmd, nullptr, 0, nullptr); wait_idle_nolock(); auto end_ts = Util::get_current_time_nsecs(); auto host_ts = (start_ts + end_ts) / 2; LOGI("Calibrated timestamps with a fallback method. Uncertainty: %.3f us.\n", 1e-3 * (end_ts - start_ts)); calibrated_timestamp_host = host_ts; VK_ASSERT(ts->is_signalled()); calibrated_timestamp_device = ts->get_timestamp_ticks(); calibrated_timestamp_device_accum = calibrated_timestamp_device; } void Device::init_calibrated_timestamps() { if (!get_device_features().supports_calibrated_timestamps) { recalibrate_timestamps_fallback(); return; } uint32_t count; vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(gpu, &count, nullptr); std::vector domains(count); if (vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(gpu, &count, domains.data()) != VK_SUCCESS) return; bool supports_device_domain = false; for (auto &domain : domains) { if (domain == VK_TIME_DOMAIN_DEVICE_EXT) { supports_device_domain = true; break; } } if (!supports_device_domain) return; for (auto &domain : domains) { #ifdef _WIN32 const auto supported_domain = VK_TIME_DOMAIN_QUERY_PERFORMANCE_COUNTER_EXT; #else const auto supported_domain = VK_TIME_DOMAIN_CLOCK_MONOTONIC_RAW_EXT; #endif if (domain == supported_domain) { calibrated_time_domain = domain; break; } } if (calibrated_time_domain == VK_TIME_DOMAIN_DEVICE_EXT) { LOGE("Could not find a suitable time domain for calibrated timestamps.\n"); return; } if (!resample_calibrated_timestamps()) { LOGE("Failed to get calibrated timestamps.\n"); calibrated_time_domain = VK_TIME_DOMAIN_DEVICE_EXT; return; } } bool Device::resample_calibrated_timestamps() { VkCalibratedTimestampInfoEXT infos[2] = {}; infos[0].sType = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT; infos[1].sType = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT; infos[0].timeDomain = calibrated_time_domain; infos[1].timeDomain = VK_TIME_DOMAIN_DEVICE_EXT; uint64_t timestamps[2] = {}; uint64_t max_deviation; if (table->vkGetCalibratedTimestampsEXT(device, 2, infos, timestamps, &max_deviation) != VK_SUCCESS) { LOGE("Failed to get calibrated timestamps.\n"); calibrated_time_domain = VK_TIME_DOMAIN_DEVICE_EXT; return false; } calibrated_timestamp_host = timestamps[0]; calibrated_timestamp_device = timestamps[1]; calibrated_timestamp_device_accum = calibrated_timestamp_device; #ifdef _WIN32 LARGE_INTEGER freq; QueryPerformanceFrequency(&freq); calibrated_timestamp_host = int64_t(1e9 * calibrated_timestamp_host / double(freq.QuadPart)); #endif return true; } void Device::recalibrate_timestamps() { // Don't bother recalibrating timestamps if we're not tracing. if (!system_handles.timeline_trace_file) return; // Recalibrate every once in a while ... timestamp_calibration_counter++; if (timestamp_calibration_counter < 1000) return; timestamp_calibration_counter = 0; if (calibrated_time_domain == VK_TIME_DOMAIN_DEVICE_EXT) recalibrate_timestamps_fallback(); else resample_calibrated_timestamps(); } void Device::register_time_interval(std::string tid, QueryPoolHandle start_ts, QueryPoolHandle end_ts, std::string tag, std::string extra) { LOCK(); register_time_interval_nolock(std::move(tid), std::move(start_ts), std::move(end_ts), std::move(tag), std::move(extra)); } void Device::register_time_interval_nolock(std::string tid, QueryPoolHandle start_ts, QueryPoolHandle end_ts, std::string tag, std::string extra) { if (start_ts && end_ts) { TimestampInterval *timestamp_tag = managers.timestamps.get_timestamp_tag(tag.c_str()); #ifdef VULKAN_DEBUG if (start_ts->is_signalled() && end_ts->is_signalled()) VK_ASSERT(end_ts->get_timestamp_ticks() >= start_ts->get_timestamp_ticks()); #endif frame().timestamp_intervals.push_back({ std::move(tid), move(start_ts), move(end_ts), timestamp_tag, std::move(extra) }); } } void Device::add_frame_counter_nolock() { lock.counter++; } void Device::decrement_frame_counter_nolock() { VK_ASSERT(lock.counter > 0); lock.counter--; #ifdef GRANITE_VULKAN_MT lock.cond.notify_all(); #endif } void Device::PerFrame::trim_command_pools() { for (auto &cmd_pool : cmd_pools) for (auto &pool : cmd_pool) pool.trim(); } void Device::PerFrame::begin() { VkDevice vkdevice = device.get_device(); Vulkan::QueryPoolHandle wait_fence_ts; if (!in_destructor) wait_fence_ts = device.write_calibrated_timestamp_nolock(); bool has_timeline = true; for (auto &sem : timeline_semaphores) { if (sem == VK_NULL_HANDLE) { has_timeline = false; break; } } if (device.get_device_features().timeline_semaphore_features.timelineSemaphore && has_timeline) { VkSemaphoreWaitInfoKHR info = { VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR }; VkSemaphore sems[QUEUE_INDEX_COUNT]; uint64_t values[QUEUE_INDEX_COUNT]; for (int i = 0; i < QUEUE_INDEX_COUNT; i++) { if (timeline_fences[i]) { sems[info.semaphoreCount] = timeline_semaphores[i]; values[info.semaphoreCount] = timeline_fences[i]; info.semaphoreCount++; } } if (info.semaphoreCount) { info.pSemaphores = sems; info.pValues = values; table.vkWaitSemaphoresKHR(vkdevice, &info, UINT64_MAX); } } // If we're using timeline semaphores, these paths should never be hit. if (!wait_fences.empty()) { table.vkWaitForFences(vkdevice, wait_fences.size(), wait_fences.data(), VK_TRUE, UINT64_MAX); wait_fences.clear(); } // If we're using timeline semaphores, these paths should never be hit. if (!recycle_fences.empty()) { table.vkResetFences(vkdevice, recycle_fences.size(), recycle_fences.data()); for (auto &fence : recycle_fences) managers.fence.recycle_fence(fence); recycle_fences.clear(); } for (auto &cmd_pool : cmd_pools) for (auto &pool : cmd_pool) pool.begin(); query_pool.begin(); for (auto &channel : debug_channels) device.parse_debug_channel(channel); // Free the debug channel buffers here, and they will immediately be recycled by the destroyed_buffers right below. debug_channels.clear(); for (auto &block : vbo_blocks) managers.vbo.recycle_block(block); for (auto &block : ibo_blocks) managers.ibo.recycle_block(block); for (auto &block : ubo_blocks) managers.ubo.recycle_block(block); for (auto &block : staging_blocks) managers.staging.recycle_block(block); vbo_blocks.clear(); ibo_blocks.clear(); ubo_blocks.clear(); staging_blocks.clear(); for (auto &framebuffer : destroyed_framebuffers) table.vkDestroyFramebuffer(vkdevice, framebuffer, nullptr); for (auto &sampler : destroyed_samplers) table.vkDestroySampler(vkdevice, sampler, nullptr); for (auto &pipeline : destroyed_pipelines) table.vkDestroyPipeline(vkdevice, pipeline, nullptr); for (auto &view : destroyed_image_views) table.vkDestroyImageView(vkdevice, view, nullptr); for (auto &view : destroyed_buffer_views) table.vkDestroyBufferView(vkdevice, view, nullptr); for (auto &image : destroyed_images) table.vkDestroyImage(vkdevice, image, nullptr); for (auto &buffer : destroyed_buffers) table.vkDestroyBuffer(vkdevice, buffer, nullptr); for (auto &semaphore : destroyed_semaphores) table.vkDestroySemaphore(vkdevice, semaphore, nullptr); for (auto &pool : destroyed_descriptor_pools) table.vkDestroyDescriptorPool(vkdevice, pool, nullptr); for (auto &semaphore : recycled_semaphores) managers.semaphore.recycle(semaphore); for (auto &event : recycled_events) managers.event.recycle(event); for (auto &alloc : allocations) alloc.free_immediate(managers.memory); destroyed_framebuffers.clear(); destroyed_samplers.clear(); destroyed_pipelines.clear(); destroyed_image_views.clear(); destroyed_buffer_views.clear(); destroyed_images.clear(); destroyed_buffers.clear(); destroyed_semaphores.clear(); destroyed_descriptor_pools.clear(); recycled_semaphores.clear(); recycled_events.clear(); allocations.clear(); if (!in_destructor) device.register_time_interval_nolock("CPU", std::move(wait_fence_ts), device.write_calibrated_timestamp_nolock(), "fence + recycle", ""); int64_t min_timestamp_us = std::numeric_limits::max(); int64_t max_timestamp_us = 0; for (auto &ts : timestamp_intervals) { if (ts.end_ts->is_signalled() && ts.start_ts->is_signalled()) { VK_ASSERT(ts.start_ts->is_device_timebase() == ts.end_ts->is_device_timebase()); int64_t start_ts = ts.start_ts->get_timestamp_ticks(); int64_t end_ts = ts.end_ts->get_timestamp_ticks(); if (ts.start_ts->is_device_timebase()) ts.timestamp_tag->accumulate_time(device.convert_device_timestamp_delta(start_ts, end_ts)); else ts.timestamp_tag->accumulate_time(1e-9 * double(end_ts - start_ts)); if (device.system_handles.timeline_trace_file) { start_ts = device.convert_timestamp_to_absolute_nsec(*ts.start_ts); end_ts = device.convert_timestamp_to_absolute_nsec(*ts.end_ts); min_timestamp_us = (std::min)(min_timestamp_us, start_ts); max_timestamp_us = (std::max)(max_timestamp_us, end_ts); auto *e = device.system_handles.timeline_trace_file->allocate_event(); e->set_desc(ts.timestamp_tag->get_tag().c_str()); e->set_tid(ts.tid.c_str()); e->pid = frame_index + 1; e->start_ns = start_ts; e->end_ns = end_ts; device.system_handles.timeline_trace_file->submit_event(e); } } } if (device.system_handles.timeline_trace_file && min_timestamp_us <= max_timestamp_us) { auto *e = device.system_handles.timeline_trace_file->allocate_event(); e->set_desc("CPU + GPU full frame"); e->set_tid("Frame context"); e->pid = frame_index + 1; e->start_ns = min_timestamp_us; e->end_ns = max_timestamp_us; device.system_handles.timeline_trace_file->submit_event(e); } managers.timestamps.mark_end_of_frame_context(); timestamp_intervals.clear(); } Device::PerFrame::~PerFrame() { in_destructor = true; begin(); } uint32_t Device::find_memory_type(uint32_t required, uint32_t mask) const { for (uint32_t i = 0; i < mem_props.memoryTypeCount; i++) { if ((1u << i) & mask) { uint32_t flags = mem_props.memoryTypes[i].propertyFlags; if ((flags & required) == required) return i; } } return UINT32_MAX; } uint32_t Device::find_memory_type(BufferDomain domain, uint32_t mask) const { uint32_t prio[3] = {}; switch (domain) { case BufferDomain::Device: prio[0] = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; break; case BufferDomain::LinkedDeviceHost: prio[0] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[1] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[2] = prio[1]; break; case BufferDomain::LinkedDeviceHostPreferDevice: prio[0] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[1] = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; prio[2] = prio[1]; break; case BufferDomain::Host: prio[0] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[1] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; prio[2] = prio[1]; break; case BufferDomain::CachedHost: prio[0] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; prio[1] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; prio[2] = prio[1]; break; case BufferDomain::CachedCoherentHostPreferCached: prio[0] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[1] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; prio[2] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; break; case BufferDomain::CachedCoherentHostPreferCoherent: prio[0] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[1] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; prio[2] = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; break; } for (auto &p : prio) { uint32_t index = find_memory_type(p, mask); if (index != UINT32_MAX) return index; } return UINT32_MAX; } uint32_t Device::find_memory_type(ImageDomain domain, uint32_t mask) const { uint32_t desired = 0, fallback = 0; switch (domain) { case ImageDomain::Physical: desired = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; fallback = 0; break; case ImageDomain::Transient: desired = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT; fallback = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; break; case ImageDomain::LinearHostCached: desired = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; fallback = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; break; case ImageDomain::LinearHost: desired = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; fallback = 0; break; } uint32_t index = find_memory_type(desired, mask); if (index != UINT32_MAX) return index; index = find_memory_type(fallback, mask); if (index != UINT32_MAX) return index; return UINT32_MAX; } static inline VkImageViewType get_image_view_type(const ImageCreateInfo &create_info, const ImageViewCreateInfo *view) { unsigned layers = view ? view->layers : create_info.layers; unsigned base_layer = view ? view->base_layer : 0; if (layers == VK_REMAINING_ARRAY_LAYERS) layers = create_info.layers - base_layer; bool force_array = view ? (view->misc & IMAGE_VIEW_MISC_FORCE_ARRAY_BIT) : (create_info.misc & IMAGE_MISC_FORCE_ARRAY_BIT); switch (create_info.type) { case VK_IMAGE_TYPE_1D: VK_ASSERT(create_info.width >= 1); VK_ASSERT(create_info.height == 1); VK_ASSERT(create_info.depth == 1); VK_ASSERT(create_info.samples == VK_SAMPLE_COUNT_1_BIT); if (layers > 1 || force_array) return VK_IMAGE_VIEW_TYPE_1D_ARRAY; else return VK_IMAGE_VIEW_TYPE_1D; case VK_IMAGE_TYPE_2D: VK_ASSERT(create_info.width >= 1); VK_ASSERT(create_info.height >= 1); VK_ASSERT(create_info.depth == 1); if ((create_info.flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) && (layers % 6) == 0) { VK_ASSERT(create_info.width == create_info.height); if (layers > 6 || force_array) return VK_IMAGE_VIEW_TYPE_CUBE_ARRAY; else return VK_IMAGE_VIEW_TYPE_CUBE; } else { if (layers > 1 || force_array) return VK_IMAGE_VIEW_TYPE_2D_ARRAY; else return VK_IMAGE_VIEW_TYPE_2D; } case VK_IMAGE_TYPE_3D: VK_ASSERT(create_info.width >= 1); VK_ASSERT(create_info.height >= 1); VK_ASSERT(create_info.depth >= 1); return VK_IMAGE_VIEW_TYPE_3D; default: VK_ASSERT(0 && "bogus"); return VK_IMAGE_VIEW_TYPE_MAX_ENUM; } } BufferViewHandle Device::create_buffer_view(const BufferViewCreateInfo &view_info) { VkBufferViewCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO }; info.buffer = view_info.buffer->get_buffer(); info.format = view_info.format; info.offset = view_info.offset; info.range = view_info.range; VkBufferView view; auto res = table->vkCreateBufferView(device, &info, nullptr, &view); if (res != VK_SUCCESS) return BufferViewHandle(nullptr); return BufferViewHandle(handle_pool.buffer_views.allocate(this, view, view_info)); } class ImageResourceHolder { public: explicit ImageResourceHolder(Device *device_) : device(device_) , table(device_->get_device_table()) { } ~ImageResourceHolder() { if (owned) cleanup(); } Device *device; const VolkDeviceTable &table; VkImage image = VK_NULL_HANDLE; VkDeviceMemory memory = VK_NULL_HANDLE; VkImageView image_view = VK_NULL_HANDLE; VkImageView depth_view = VK_NULL_HANDLE; VkImageView stencil_view = VK_NULL_HANDLE; VkImageView unorm_view = VK_NULL_HANDLE; VkImageView srgb_view = VK_NULL_HANDLE; VkImageViewType default_view_type = VK_IMAGE_VIEW_TYPE_MAX_ENUM; vector rt_views; DeviceAllocation allocation; DeviceAllocator *allocator = nullptr; bool owned = true; VkImageViewType get_default_view_type() const { return default_view_type; } bool setup_conversion_info(VkImageViewCreateInfo &create_info, VkSamplerYcbcrConversionInfo &conversion, const ImmutableYcbcrConversion *ycbcr_conversion) const { if (ycbcr_conversion) { if (!device->get_device_features().sampler_ycbcr_conversion_features.samplerYcbcrConversion) return false; conversion = { VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO }; conversion.conversion = ycbcr_conversion->get_conversion(); conversion.pNext = create_info.pNext; create_info.pNext = &conversion; } return true; } bool setup_view_usage_info(VkImageViewCreateInfo &create_info, VkImageUsageFlags usage, VkImageViewUsageCreateInfo &usage_info) const { if (device->get_device_features().supports_maintenance_2) { usage_info.usage = usage; usage_info.usage &= VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; if (format_is_srgb(create_info.format)) usage_info.usage &= ~VK_IMAGE_USAGE_STORAGE_BIT; usage_info.pNext = create_info.pNext; create_info.pNext = &usage_info; } return true; } bool setup_astc_decode_mode_info(VkImageViewCreateInfo &create_info, VkImageViewASTCDecodeModeEXT &astc_info) const { if (!device->get_device_features().supports_astc_decode_mode) return true; auto type = format_compression_type(create_info.format); if (type != FormatCompressionType::ASTC) return true; if (format_is_srgb(create_info.format)) return true; if (format_is_compressed_hdr(create_info.format)) { if (device->get_device_features().astc_decode_features.decodeModeSharedExponent) astc_info.decodeMode = VK_FORMAT_E5B9G9R9_UFLOAT_PACK32; else astc_info.decodeMode = VK_FORMAT_R16G16B16A16_SFLOAT; } else { astc_info.decodeMode = VK_FORMAT_R8G8B8A8_UNORM; } astc_info.pNext = create_info.pNext; create_info.pNext = &astc_info; return true; } bool create_default_views(const ImageCreateInfo &create_info, const VkImageViewCreateInfo *view_info, bool create_unorm_srgb_views = false, const VkFormat *view_formats = nullptr) { VkDevice vkdevice = device->get_device(); if ((create_info.usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | vk_video_image_usage_flags)) == 0) { LOGE("Cannot create image view unless certain usage flags are present.\n"); return false; } VkImageViewCreateInfo default_view_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; VkSamplerYcbcrConversionInfo conversion_info = { VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO }; VkImageViewUsageCreateInfo view_usage_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO }; VkImageViewASTCDecodeModeEXT astc_decode_mode_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT }; if (!view_info) { default_view_info.image = image; default_view_info.format = create_info.format; default_view_info.components = create_info.swizzle; default_view_info.subresourceRange.aspectMask = format_to_aspect_mask(default_view_info.format); default_view_info.viewType = get_image_view_type(create_info, nullptr); default_view_info.subresourceRange.baseMipLevel = 0; default_view_info.subresourceRange.baseArrayLayer = 0; default_view_info.subresourceRange.levelCount = create_info.levels; default_view_info.subresourceRange.layerCount = create_info.layers; default_view_type = default_view_info.viewType; } else default_view_info = *view_info; view_info = &default_view_info; if (!setup_conversion_info(default_view_info, conversion_info, create_info.ycbcr_conversion)) return false; if (!setup_view_usage_info(default_view_info, create_info.usage, view_usage_info)) return false; if (!setup_astc_decode_mode_info(default_view_info, astc_decode_mode_info)) return false; if (!create_alt_views(create_info, *view_info)) return false; if (!create_render_target_views(create_info, *view_info)) return false; if (!create_default_view(*view_info)) return false; if (create_unorm_srgb_views) { auto info = *view_info; if (create_info.usage & VK_IMAGE_USAGE_STORAGE_BIT) view_usage_info.usage |= VK_IMAGE_USAGE_STORAGE_BIT; info.format = view_formats[0]; if (table.vkCreateImageView(vkdevice, &info, nullptr, &unorm_view) != VK_SUCCESS) return false; view_usage_info.usage &= ~VK_IMAGE_USAGE_STORAGE_BIT; info.format = view_formats[1]; if (table.vkCreateImageView(vkdevice, &info, nullptr, &srgb_view) != VK_SUCCESS) return false; } return true; } private: bool create_render_target_views(const ImageCreateInfo &image_create_info, const VkImageViewCreateInfo &info) { if (info.viewType == VK_IMAGE_VIEW_TYPE_3D) return true; rt_views.reserve(info.subresourceRange.layerCount); // If we have a render target, and non-trivial case (layers = 1, levels = 1), // create an array of render targets which correspond to each layer (mip 0). if ((image_create_info.usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)) != 0 && ((info.subresourceRange.levelCount > 1) || (info.subresourceRange.layerCount > 1))) { auto view_info = info; view_info.viewType = VK_IMAGE_VIEW_TYPE_2D; view_info.subresourceRange.baseMipLevel = info.subresourceRange.baseMipLevel; for (uint32_t layer = 0; layer < info.subresourceRange.layerCount; layer++) { view_info.subresourceRange.levelCount = 1; view_info.subresourceRange.layerCount = 1; view_info.subresourceRange.baseArrayLayer = layer + info.subresourceRange.baseArrayLayer; VkImageView rt_view; if (table.vkCreateImageView(device->get_device(), &view_info, nullptr, &rt_view) != VK_SUCCESS) return false; rt_views.push_back(rt_view); } } return true; } bool create_alt_views(const ImageCreateInfo &image_create_info, const VkImageViewCreateInfo &info) { if (info.viewType == VK_IMAGE_VIEW_TYPE_CUBE || info.viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY || info.viewType == VK_IMAGE_VIEW_TYPE_3D) { return true; } VkDevice vkdevice = device->get_device(); if (info.subresourceRange.aspectMask == (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) { if ((image_create_info.usage & ~VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0) { auto view_info = info; // We need this to be able to sample the texture, or otherwise use it as a non-pure DS attachment. view_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_DEPTH_BIT; if (table.vkCreateImageView(vkdevice, &view_info, nullptr, &depth_view) != VK_SUCCESS) return false; view_info.subresourceRange.aspectMask = VK_IMAGE_ASPECT_STENCIL_BIT; if (table.vkCreateImageView(vkdevice, &view_info, nullptr, &stencil_view) != VK_SUCCESS) return false; } } return true; } bool create_default_view(const VkImageViewCreateInfo &info) { VkDevice vkdevice = device->get_device(); // Create the normal image view. This one contains every subresource. if (table.vkCreateImageView(vkdevice, &info, nullptr, &image_view) != VK_SUCCESS) return false; return true; } void cleanup() { VkDevice vkdevice = device->get_device(); if (image_view) table.vkDestroyImageView(vkdevice, image_view, nullptr); if (depth_view) table.vkDestroyImageView(vkdevice, depth_view, nullptr); if (stencil_view) table.vkDestroyImageView(vkdevice, stencil_view, nullptr); if (unorm_view) table.vkDestroyImageView(vkdevice, unorm_view, nullptr); if (srgb_view) table.vkDestroyImageView(vkdevice, srgb_view, nullptr); for (auto &view : rt_views) table.vkDestroyImageView(vkdevice, view, nullptr); if (image) table.vkDestroyImage(vkdevice, image, nullptr); if (memory) table.vkFreeMemory(vkdevice, memory, nullptr); if (allocator) allocation.free_immediate(*allocator); } }; ImageViewHandle Device::create_image_view(const ImageViewCreateInfo &create_info) { ImageResourceHolder holder(this); auto &image_create_info = create_info.image->get_create_info(); VkFormat format = create_info.format != VK_FORMAT_UNDEFINED ? create_info.format : image_create_info.format; VkImageViewCreateInfo view_info = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; view_info.image = create_info.image->get_image(); view_info.format = format; view_info.components = create_info.swizzle; view_info.subresourceRange.aspectMask = format_to_aspect_mask(format); view_info.subresourceRange.baseMipLevel = create_info.base_level; view_info.subresourceRange.baseArrayLayer = create_info.base_layer; view_info.subresourceRange.levelCount = create_info.levels; view_info.subresourceRange.layerCount = create_info.layers; if (create_info.view_type == VK_IMAGE_VIEW_TYPE_MAX_ENUM) view_info.viewType = get_image_view_type(image_create_info, &create_info); else view_info.viewType = create_info.view_type; unsigned num_levels; if (view_info.subresourceRange.levelCount == VK_REMAINING_MIP_LEVELS) num_levels = create_info.image->get_create_info().levels - view_info.subresourceRange.baseMipLevel; else num_levels = view_info.subresourceRange.levelCount; unsigned num_layers; if (view_info.subresourceRange.layerCount == VK_REMAINING_ARRAY_LAYERS) num_layers = create_info.image->get_create_info().layers - view_info.subresourceRange.baseArrayLayer; else num_layers = view_info.subresourceRange.layerCount; view_info.subresourceRange.levelCount = num_levels; view_info.subresourceRange.layerCount = num_layers; if (!holder.create_default_views(image_create_info, &view_info)) return ImageViewHandle(nullptr); ImageViewCreateInfo tmp = create_info; tmp.format = format; ImageViewHandle ret(handle_pool.image_views.allocate(this, holder.image_view, tmp)); if (ret) { holder.owned = false; ret->set_alt_views(holder.depth_view, holder.stencil_view); ret->set_render_target_views(move(holder.rt_views)); return ret; } else return ImageViewHandle(nullptr); } #ifndef _WIN32 ImageHandle Device::create_imported_image(int fd, VkDeviceSize size, uint32_t memory_type, VkExternalMemoryHandleTypeFlagBitsKHR handle_type, const ImageCreateInfo &create_info) { if (!ext.supports_external) return {}; ImageResourceHolder holder(this); VkImageCreateInfo info = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; info.format = create_info.format; info.extent.width = create_info.width; info.extent.height = create_info.height; info.extent.depth = create_info.depth; info.imageType = create_info.type; info.mipLevels = create_info.levels; info.arrayLayers = create_info.layers; info.samples = create_info.samples; info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; info.tiling = VK_IMAGE_TILING_OPTIMAL; info.usage = create_info.usage; info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; info.flags = create_info.flags; info.pNext = create_info.pnext; VK_ASSERT(create_info.domain != ImageDomain::Transient); VkExternalMemoryImageCreateInfoKHR externalInfo = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR }; externalInfo.handleTypes = handle_type; externalInfo.pNext = info.pNext; info.pNext = &externalInfo; VK_ASSERT(image_format_is_supported(create_info.format, image_usage_to_features(info.usage), info.tiling)); if (table->vkCreateImage(device, &info, nullptr, &holder.image) != VK_SUCCESS) return ImageHandle(nullptr); VkMemoryAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; alloc_info.allocationSize = size; alloc_info.memoryTypeIndex = memory_type; VkMemoryDedicatedAllocateInfoKHR dedicated_info = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR }; dedicated_info.image = holder.image; alloc_info.pNext = &dedicated_info; VkImportMemoryFdInfoKHR fd_info = { VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR }; fd_info.handleType = handle_type; fd_info.fd = fd; dedicated_info.pNext = &fd_info; VkMemoryRequirements reqs; table->vkGetImageMemoryRequirements(device, holder.image, &reqs); if (reqs.size > size) return ImageHandle(nullptr); if (((1u << memory_type) & reqs.memoryTypeBits) == 0) return ImageHandle(nullptr); if (table->vkAllocateMemory(device, &alloc_info, nullptr, &holder.memory) != VK_SUCCESS) return ImageHandle(nullptr); if (table->vkBindImageMemory(device, holder.image, holder.memory, 0) != VK_SUCCESS) return ImageHandle(nullptr); // Create default image views. // App could of course to this on its own, but it's very handy to have these being created automatically for you. VkImageViewType view_type = VK_IMAGE_VIEW_TYPE_MAX_ENUM; if (info.usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) { if (!holder.create_default_views(create_info, nullptr)) return ImageHandle(nullptr); view_type = holder.get_default_view_type(); } auto allocation = DeviceAllocation::make_imported_allocation(holder.memory, size, memory_type); ImageHandle handle(handle_pool.images.allocate(this, holder.image, holder.image_view, allocation, create_info, view_type)); if (handle) { holder.owned = false; handle->get_view().set_alt_views(holder.depth_view, holder.stencil_view); handle->get_view().set_render_target_views(move(holder.rt_views)); // Set possible dstStage and dstAccess. handle->set_stage_flags(image_usage_to_possible_stages(info.usage)); handle->set_access_flags(image_usage_to_possible_access(info.usage)); return handle; } else return ImageHandle(nullptr); } #endif InitialImageBuffer Device::create_image_staging_buffer(const TextureFormatLayout &layout) { InitialImageBuffer result; BufferCreateInfo buffer_info = {}; buffer_info.domain = BufferDomain::Host; buffer_info.size = layout.get_required_size(); buffer_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; result.buffer = create_buffer(buffer_info, nullptr); set_name(*result.buffer, "image-upload-staging-buffer"); auto *mapped = static_cast(map_host_buffer(*result.buffer, MEMORY_ACCESS_WRITE_BIT)); memcpy(mapped, layout.data(), layout.get_required_size()); unmap_host_buffer(*result.buffer, MEMORY_ACCESS_WRITE_BIT); layout.build_buffer_image_copies(result.blits); return result; } InitialImageBuffer Device::create_image_staging_buffer(const ImageCreateInfo &info, const ImageInitialData *initial) { InitialImageBuffer result; bool generate_mips = (info.misc & IMAGE_MISC_GENERATE_MIPS_BIT) != 0; TextureFormatLayout layout; unsigned copy_levels; if (generate_mips) copy_levels = 1; else if (info.levels == 0) copy_levels = TextureFormatLayout::num_miplevels(info.width, info.height, info.depth); else copy_levels = info.levels; switch (info.type) { case VK_IMAGE_TYPE_1D: layout.set_1d(info.format, info.width, info.layers, copy_levels); break; case VK_IMAGE_TYPE_2D: layout.set_2d(info.format, info.width, info.height, info.layers, copy_levels); break; case VK_IMAGE_TYPE_3D: layout.set_3d(info.format, info.width, info.height, info.depth, copy_levels); break; default: return {}; } BufferCreateInfo buffer_info = {}; buffer_info.domain = BufferDomain::Host; buffer_info.size = layout.get_required_size(); buffer_info.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT; result.buffer = create_buffer(buffer_info, nullptr); set_name(*result.buffer, "image-upload-staging-buffer"); // And now, do the actual copy. auto *mapped = static_cast(map_host_buffer(*result.buffer, MEMORY_ACCESS_WRITE_BIT)); unsigned index = 0; layout.set_buffer(mapped, layout.get_required_size()); for (unsigned level = 0; level < copy_levels; level++) { const auto &mip_info = layout.get_mip_info(level); uint32_t dst_height_stride = layout.get_layer_size(level); size_t row_size = layout.get_row_size(level); for (unsigned layer = 0; layer < info.layers; layer++, index++) { uint32_t src_row_length = initial[index].row_length ? initial[index].row_length : mip_info.row_length; uint32_t src_array_height = initial[index].image_height ? initial[index].image_height : mip_info.image_height; uint32_t src_row_stride = layout.row_byte_stride(src_row_length); uint32_t src_height_stride = layout.layer_byte_stride(src_array_height, src_row_stride); uint8_t *dst = static_cast(layout.data(layer, level)); const uint8_t *src = static_cast(initial[index].data); for (uint32_t z = 0; z < mip_info.depth; z++) for (uint32_t y = 0; y < mip_info.block_image_height; y++) memcpy(dst + z * dst_height_stride + y * row_size, src + z * src_height_stride + y * src_row_stride, row_size); } } unmap_host_buffer(*result.buffer, MEMORY_ACCESS_WRITE_BIT); layout.build_buffer_image_copies(result.blits); return result; } DeviceAllocationOwnerHandle Device::take_device_allocation_ownership(Image &image) { if ((image.get_create_info().misc & IMAGE_MISC_FORCE_NO_DEDICATED_BIT) == 0) { LOGE("Must use FORCE_NO_DEDICATED_BIT to take ownership of memory.\n"); return DeviceAllocationOwnerHandle{}; } if (!image.get_allocation().alloc || !image.get_allocation().base) return DeviceAllocationOwnerHandle{}; return DeviceAllocationOwnerHandle(handle_pool.allocations.allocate(this, image.take_allocation_ownership())); } DeviceAllocationOwnerHandle Device::allocate_memory(const MemoryAllocateInfo &info) { uint32_t index = find_memory_type(info.required_properties, info.requirements.memoryTypeBits); if (index == UINT32_MAX) return {}; DeviceAllocation alloc = {}; if (!managers.memory.allocate(info.requirements.size, info.requirements.alignment, info.mode, index, &alloc)) return {}; return DeviceAllocationOwnerHandle(handle_pool.allocations.allocate(this, alloc)); } void Device::get_memory_budget(HeapBudget *budget) { managers.memory.get_memory_budget(budget); } ImageHandle Device::create_image(const ImageCreateInfo &create_info, const ImageInitialData *initial) { if (initial) { auto staging_buffer = create_image_staging_buffer(create_info, initial); return create_image_from_staging_buffer(create_info, &staging_buffer); } else return create_image_from_staging_buffer(create_info, nullptr); } bool Device::allocate_image_memory(DeviceAllocation *allocation, const ImageCreateInfo &info, VkImage image, VkImageTiling tiling) { if ((info.flags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0 && info.num_memory_aliases == 0) { LOGE("Must use memory aliases when creating a DISJOINT planar image.\n"); return false; } if (info.num_memory_aliases != 0) { *allocation = {}; unsigned num_planes = format_ycbcr_num_planes(info.format); if (info.num_memory_aliases < num_planes) return false; if (num_planes == 1) { VkMemoryRequirements reqs; table->vkGetImageMemoryRequirements(device, image, &reqs); auto &alias = *info.memory_aliases[0]; // Verify we can actually use this aliased allocation. if ((reqs.memoryTypeBits & (1u << alias.memory_type)) == 0) return false; if (reqs.size > alias.size) return false; if (((alias.offset + reqs.alignment - 1) & ~(reqs.alignment - 1)) != alias.offset) return false; if (table->vkBindImageMemory(device, image, alias.get_memory(), alias.get_offset()) != VK_SUCCESS) return false; } else { if (!ext.supports_bind_memory2 || !ext.supports_get_memory_requirements2) return false; VkBindImageMemoryInfo bind_infos[3]; VkBindImagePlaneMemoryInfo bind_plane_infos[3]; VK_ASSERT(num_planes <= 3); for (unsigned plane = 0; plane < num_planes; plane++) { VkMemoryRequirements2KHR memory_req = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR }; VkImageMemoryRequirementsInfo2KHR image_info = {VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR }; image_info.image = image; VkImagePlaneMemoryRequirementsInfo plane_info = { VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR }; plane_info.planeAspect = static_cast(VK_IMAGE_ASPECT_PLANE_0_BIT << plane); image_info.pNext = &plane_info; table->vkGetImageMemoryRequirements2KHR(device, &image_info, &memory_req); auto &reqs = memory_req.memoryRequirements; auto &alias = *info.memory_aliases[plane]; // Verify we can actually use this aliased allocation. if ((reqs.memoryTypeBits & (1u << alias.memory_type)) == 0) return false; if (reqs.size > alias.size) return false; if (((alias.offset + reqs.alignment - 1) & ~(reqs.alignment - 1)) != alias.offset) return false; bind_infos[plane] = { VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO }; bind_infos[plane].image = image; bind_infos[plane].memory = alias.base; bind_infos[plane].memoryOffset = alias.offset; bind_infos[plane].pNext = &bind_plane_infos[plane]; bind_plane_infos[plane] = { VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO }; bind_plane_infos[plane].planeAspect = static_cast(VK_IMAGE_ASPECT_PLANE_0_BIT << plane); } if (table->vkBindImageMemory2KHR(device, num_planes, bind_infos) != VK_SUCCESS) return false; } } else { VkMemoryRequirements reqs; table->vkGetImageMemoryRequirements(device, image, &reqs); // If we intend to alias with other images bump the alignment to something very high. // This is kind of crude, but should be high enough to allow YCbCr disjoint aliasing on any implementation. if (info.flags & VK_IMAGE_CREATE_ALIAS_BIT) if (reqs.alignment < 64 * 1024) reqs.alignment = 64 * 1024; uint32_t memory_type = find_memory_type(info.domain, reqs.memoryTypeBits); if (memory_type == UINT32_MAX) { LOGE("Failed to find memory type.\n"); return false; } if (tiling == VK_IMAGE_TILING_LINEAR && (info.misc & IMAGE_MISC_LINEAR_IMAGE_IGNORE_DEVICE_LOCAL_BIT) == 0) { // Is it also device local? if ((mem_props.memoryTypes[memory_type].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) == 0) return false; } AllocationMode mode; if (tiling == VK_IMAGE_TILING_OPTIMAL && (info.usage & (VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_STORAGE_BIT)) != 0) mode = AllocationMode::OptimalRenderTarget; else mode = tiling == VK_IMAGE_TILING_OPTIMAL ? AllocationMode::OptimalResource : AllocationMode::LinearHostMappable; if (!managers.memory.allocate_image_memory(reqs.size, reqs.alignment, mode, memory_type, allocation, image, (info.misc & IMAGE_MISC_FORCE_NO_DEDICATED_BIT) != 0)) { LOGE("Failed to allocate image memory (type %u, size: %u).\n", unsigned(memory_type), unsigned(reqs.size)); return false; } if (table->vkBindImageMemory(device, image, allocation->get_memory(), allocation->get_offset()) != VK_SUCCESS) { LOGE("Failed to bind image memory.\n"); return false; } } return true; } static void add_unique_family(uint32_t *sharing_indices, uint32_t &count, uint32_t family) { for (uint32_t i = 0; i < count; i++) { if (sharing_indices[i] == family) return; } sharing_indices[count++] = family; } ImageHandle Device::create_image_from_staging_buffer(const ImageCreateInfo &create_info, const InitialImageBuffer *staging_buffer) { ImageResourceHolder holder(this); VkImageCreateInfo info = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO }; info.format = create_info.format; info.extent.width = create_info.width; info.extent.height = create_info.height; info.extent.depth = create_info.depth; info.imageType = create_info.type; info.mipLevels = create_info.levels; info.arrayLayers = create_info.layers; info.samples = create_info.samples; info.pNext = create_info.pnext; if (create_info.domain == ImageDomain::LinearHostCached || create_info.domain == ImageDomain::LinearHost) { info.tiling = VK_IMAGE_TILING_LINEAR; info.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED; } else { info.tiling = VK_IMAGE_TILING_OPTIMAL; info.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; } info.usage = create_info.usage; info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; if (create_info.domain == ImageDomain::Transient) info.usage |= VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT; if (staging_buffer) info.usage |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; info.flags = create_info.flags; if (info.mipLevels == 0) info.mipLevels = image_num_miplevels(info.extent); VkImageFormatListCreateInfoKHR format_info = { VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR }; VkFormat view_formats[2]; format_info.pViewFormats = view_formats; format_info.viewFormatCount = 2; bool create_unorm_srgb_views = false; if (create_info.misc & IMAGE_MISC_MUTABLE_SRGB_BIT) { format_info.viewFormatCount = ImageCreateInfo::compute_view_formats(create_info, view_formats); if (format_info.viewFormatCount != 0) { create_unorm_srgb_views = true; if (ext.supports_image_format_list) { format_info.pNext = info.pNext; info.pNext = &format_info; } } } if ((create_info.usage & VK_IMAGE_USAGE_STORAGE_BIT) || (create_info.misc & IMAGE_MISC_MUTABLE_SRGB_BIT)) { info.flags |= VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT; } // Only do this conditionally. // On AMD, using CONCURRENT with async compute disables compression. uint32_t sharing_indices[QUEUE_INDEX_COUNT]; uint32_t queue_flags = create_info.misc & (IMAGE_MISC_CONCURRENT_QUEUE_GRAPHICS_BIT | IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_COMPUTE_BIT | IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_GRAPHICS_BIT | IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_TRANSFER_BIT); bool concurrent_queue = queue_flags != 0; if (concurrent_queue) { info.sharingMode = VK_SHARING_MODE_CONCURRENT; if (queue_flags & (IMAGE_MISC_CONCURRENT_QUEUE_GRAPHICS_BIT | IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_GRAPHICS_BIT)) { add_unique_family(sharing_indices, info.queueFamilyIndexCount, queue_info.family_indices[QUEUE_INDEX_GRAPHICS]); } if (queue_flags & IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_COMPUTE_BIT) { add_unique_family(sharing_indices, info.queueFamilyIndexCount, queue_info.family_indices[QUEUE_INDEX_COMPUTE]); } if (staging_buffer || (queue_flags & IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_TRANSFER_BIT) != 0) { add_unique_family(sharing_indices, info.queueFamilyIndexCount, queue_info.family_indices[QUEUE_INDEX_TRANSFER]); } if (staging_buffer) { add_unique_family(sharing_indices, info.queueFamilyIndexCount, queue_info.family_indices[QUEUE_INDEX_GRAPHICS]); } if (info.queueFamilyIndexCount > 1) info.pQueueFamilyIndices = sharing_indices; else { info.pQueueFamilyIndices = nullptr; info.queueFamilyIndexCount = 0; info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; } } VkFormatFeatureFlags check_extra_features = 0; if ((create_info.misc & IMAGE_MISC_VERIFY_FORMAT_FEATURE_SAMPLED_LINEAR_FILTER_BIT) != 0) check_extra_features |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT; if (info.tiling == VK_IMAGE_TILING_LINEAR) { if (staging_buffer) return ImageHandle(nullptr); // Do some more stringent checks. if (info.mipLevels > 1) return ImageHandle(nullptr); if (info.arrayLayers > 1) return ImageHandle(nullptr); if (info.imageType != VK_IMAGE_TYPE_2D) return ImageHandle(nullptr); if (info.samples != VK_SAMPLE_COUNT_1_BIT) return ImageHandle(nullptr); VkImageFormatProperties props; if (!get_image_format_properties(info.format, info.imageType, info.tiling, info.usage, info.flags, &props)) return ImageHandle(nullptr); if (!props.maxArrayLayers || !props.maxMipLevels || (info.extent.width > props.maxExtent.width) || (info.extent.height > props.maxExtent.height) || (info.extent.depth > props.maxExtent.depth)) { return ImageHandle(nullptr); } } if ((create_info.flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT) == 0 && (!image_format_is_supported(create_info.format, image_usage_to_features(info.usage) | check_extra_features, info.tiling))) { LOGE("Format %u is not supported for usage flags!\n", unsigned(create_info.format)); return ImageHandle(nullptr); } if (table->vkCreateImage(device, &info, nullptr, &holder.image) != VK_SUCCESS) { LOGE("Failed to create image in vkCreateImage.\n"); return ImageHandle(nullptr); } if (!allocate_image_memory(&holder.allocation, create_info, holder.image, info.tiling)) { LOGE("Failed to allocate memory for image.\n"); return ImageHandle(nullptr); } auto tmpinfo = create_info; tmpinfo.usage = info.usage; tmpinfo.flags = info.flags; tmpinfo.levels = info.mipLevels; bool has_view = (info.usage & (VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | vk_video_image_usage_flags)) != 0 && (create_info.misc & IMAGE_MISC_NO_DEFAULT_VIEWS_BIT) == 0; VkImageViewType view_type = VK_IMAGE_VIEW_TYPE_MAX_ENUM; if (has_view) { if (!holder.create_default_views(tmpinfo, nullptr, create_unorm_srgb_views, view_formats)) return ImageHandle(nullptr); view_type = holder.get_default_view_type(); } ImageHandle handle(handle_pool.images.allocate(this, holder.image, holder.image_view, holder.allocation, tmpinfo, view_type)); if (handle) { holder.owned = false; if (has_view) { handle->get_view().set_alt_views(holder.depth_view, holder.stencil_view); handle->get_view().set_render_target_views(move(holder.rt_views)); handle->get_view().set_unorm_view(holder.unorm_view); handle->get_view().set_srgb_view(holder.srgb_view); } // Set possible dstStage and dstAccess. handle->set_stage_flags(image_usage_to_possible_stages(info.usage)); handle->set_access_flags(image_usage_to_possible_access(info.usage)); } bool share_compute = (queue_flags & IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_COMPUTE_BIT) != 0 && queue_info.queues[QUEUE_INDEX_GRAPHICS] != queue_info.queues[QUEUE_INDEX_COMPUTE]; bool share_async_graphics = get_physical_queue_type(CommandBuffer::Type::AsyncGraphics) == QUEUE_INDEX_COMPUTE && (queue_flags & IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_GRAPHICS_BIT) != 0; CommandBufferHandle transition_cmd; // Copy initial data to texture. if (staging_buffer) { VK_ASSERT(create_info.domain != ImageDomain::Transient); VK_ASSERT(create_info.initial_layout != VK_IMAGE_LAYOUT_UNDEFINED); bool generate_mips = (create_info.misc & IMAGE_MISC_GENERATE_MIPS_BIT) != 0; // If queue_info.graphics != queue_info.transfer, we will use a semaphore, so no srcAccess mask is necessary. VkAccessFlags final_transition_src_access = 0; if (generate_mips) final_transition_src_access = VK_ACCESS_TRANSFER_READ_BIT; // Validation complains otherwise. else if (queue_info.queues[QUEUE_INDEX_GRAPHICS] == queue_info.queues[QUEUE_INDEX_TRANSFER]) final_transition_src_access = VK_ACCESS_TRANSFER_WRITE_BIT; VkAccessFlags prepare_src_access = queue_info.queues[QUEUE_INDEX_GRAPHICS] == queue_info.queues[QUEUE_INDEX_TRANSFER] ? VK_ACCESS_TRANSFER_WRITE_BIT : 0; bool need_mipmap_barrier = true; bool need_initial_barrier = true; // Now we've used the TRANSFER queue to copy data over to the GPU. // For mipmapping, we're now moving over to graphics, // the transfer queue is designed for CPU <-> GPU and that's it. // For concurrent queue mode, we just need to inject a semaphore. // For non-concurrent queue mode, we will have to inject ownership transfer barrier if the queue families do not match. auto graphics_cmd = request_command_buffer(CommandBuffer::Type::Generic); CommandBufferHandle transfer_cmd; // Don't split the upload into multiple command buffers unless we have to. if (queue_info.queues[QUEUE_INDEX_TRANSFER] != queue_info.queues[QUEUE_INDEX_GRAPHICS]) transfer_cmd = request_command_buffer(CommandBuffer::Type::AsyncTransfer); else transfer_cmd = graphics_cmd; transfer_cmd->image_barrier(*handle, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_ACCESS_TRANSFER_WRITE_BIT); transfer_cmd->begin_region("copy-image-to-gpu"); transfer_cmd->copy_buffer_to_image(*handle, *staging_buffer->buffer, staging_buffer->blits.size(), staging_buffer->blits.data()); transfer_cmd->end_region(); if (queue_info.queues[QUEUE_INDEX_TRANSFER] != queue_info.queues[QUEUE_INDEX_GRAPHICS]) { VkPipelineStageFlags dst_stages = generate_mips ? VkPipelineStageFlags(VK_PIPELINE_STAGE_TRANSFER_BIT) : handle->get_stage_flags(); // We can't just use semaphores, we will also need a release + acquire barrier to marshal ownership from // transfer queue over to graphics ... if (!concurrent_queue && queue_info.family_indices[QUEUE_INDEX_TRANSFER] != queue_info.family_indices[QUEUE_INDEX_GRAPHICS]) { need_mipmap_barrier = false; VkImageMemoryBarrier release = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER }; release.image = handle->get_image(); release.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; release.dstAccessMask = 0; release.srcQueueFamilyIndex = queue_info.family_indices[QUEUE_INDEX_TRANSFER]; release.dstQueueFamilyIndex = queue_info.family_indices[QUEUE_INDEX_GRAPHICS]; release.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL; if (generate_mips) { release.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL; release.subresourceRange.levelCount = 1; } else { release.newLayout = create_info.initial_layout; release.subresourceRange.levelCount = info.mipLevels; need_initial_barrier = false; } release.subresourceRange.aspectMask = format_to_aspect_mask(info.format); release.subresourceRange.layerCount = info.arrayLayers; VkImageMemoryBarrier acquire = release; acquire.srcAccessMask = 0; if (generate_mips) acquire.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; else acquire.dstAccessMask = handle->get_access_flags() & image_layout_to_possible_access(create_info.initial_layout); transfer_cmd->barrier(VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, 0, nullptr, 0, nullptr, 1, &release); graphics_cmd->barrier(dst_stages, dst_stages, 0, nullptr, 0, nullptr, 1, &acquire); } Semaphore sem; submit(transfer_cmd, nullptr, 1, &sem); add_wait_semaphore(CommandBuffer::Type::Generic, sem, dst_stages, true); } if (generate_mips) { graphics_cmd->begin_region("mipgen"); graphics_cmd->barrier_prepare_generate_mipmap(*handle, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_PIPELINE_STAGE_TRANSFER_BIT, prepare_src_access, need_mipmap_barrier); graphics_cmd->generate_mipmap(*handle); graphics_cmd->end_region(); } if (need_initial_barrier) { graphics_cmd->image_barrier( *handle, generate_mips ? VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL : VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, create_info.initial_layout, VK_PIPELINE_STAGE_TRANSFER_BIT, final_transition_src_access, handle->get_stage_flags(), handle->get_access_flags() & image_layout_to_possible_access(create_info.initial_layout)); } transition_cmd = std::move(graphics_cmd); } else if (create_info.initial_layout != VK_IMAGE_LAYOUT_UNDEFINED) { VK_ASSERT(create_info.domain != ImageDomain::Transient); auto cmd = request_command_buffer(CommandBuffer::Type::Generic); cmd->image_barrier(*handle, info.initialLayout, create_info.initial_layout, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, handle->get_stage_flags(), handle->get_access_flags() & image_layout_to_possible_access(create_info.initial_layout)); transition_cmd = std::move(cmd); } // For concurrent queue, make sure that compute can see the final image as well. // Also add semaphore if the compute queue can be used for async graphics as well. if (transition_cmd) { if (share_compute || share_async_graphics) { Semaphore sem; submit(transition_cmd, nullptr, 1, &sem); VkPipelineStageFlags dst_stages = handle->get_stage_flags(); if (queue_info.family_indices[QUEUE_INDEX_GRAPHICS] != queue_info.family_indices[QUEUE_INDEX_COMPUTE]) dst_stages &= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT; add_wait_semaphore(CommandBuffer::Type::AsyncCompute, sem, dst_stages, true); } else { LOCK(); submit_nolock(transition_cmd, nullptr, 0, nullptr); if (concurrent_queue) flush_frame(QUEUE_INDEX_GRAPHICS); } } return handle; } const ImmutableSampler *Device::request_immutable_sampler(const SamplerCreateInfo &sampler_info, const ImmutableYcbcrConversion *ycbcr) { auto info = Sampler::fill_vk_sampler_info(sampler_info); Util::Hasher h; h.u32(info.flags); h.u32(info.addressModeU); h.u32(info.addressModeV); h.u32(info.addressModeW); h.u32(info.minFilter); h.u32(info.magFilter); h.u32(info.mipmapMode); h.f32(info.minLod); h.f32(info.maxLod); h.f32(info.mipLodBias); h.u32(info.compareEnable); h.u32(info.compareOp); h.u32(info.anisotropyEnable); h.f32(info.maxAnisotropy); h.u32(info.borderColor); h.u32(info.unnormalizedCoordinates); if (ycbcr) h.u64(ycbcr->get_hash()); else h.u32(0); auto *sampler = immutable_samplers.find(h.get()); if (!sampler) sampler = immutable_samplers.emplace_yield(h.get(), h.get(), this, sampler_info, ycbcr); return sampler; } const ImmutableYcbcrConversion *Device::request_immutable_ycbcr_conversion( const VkSamplerYcbcrConversionCreateInfo &info) { Util::Hasher h; h.u32(info.forceExplicitReconstruction); h.u32(info.format); h.u32(info.chromaFilter); h.u32(info.components.r); h.u32(info.components.g); h.u32(info.components.b); h.u32(info.components.a); h.u32(info.xChromaOffset); h.u32(info.yChromaOffset); h.u32(info.ycbcrModel); h.u32(info.ycbcrRange); auto *sampler = immutable_ycbcr_conversions.find(h.get()); if (!sampler) sampler = immutable_ycbcr_conversions.emplace_yield(h.get(), h.get(), this, info); return sampler; } SamplerHandle Device::create_sampler(const SamplerCreateInfo &sampler_info) { auto info = Sampler::fill_vk_sampler_info(sampler_info); VkSampler sampler; if (table->vkCreateSampler(device, &info, nullptr, &sampler) != VK_SUCCESS) return SamplerHandle(nullptr); return SamplerHandle(handle_pool.samplers.allocate(this, sampler, sampler_info, false)); } BindlessDescriptorPoolHandle Device::create_bindless_descriptor_pool(BindlessResourceType type, unsigned num_sets, unsigned num_descriptors) { if (!ext.supports_descriptor_indexing) return BindlessDescriptorPoolHandle{nullptr}; DescriptorSetAllocator *allocator = nullptr; switch (type) { case BindlessResourceType::ImageFP: allocator = bindless_sampled_image_allocator_fp; break; case BindlessResourceType::ImageInt: allocator = bindless_sampled_image_allocator_integer; break; default: break; } VkDescriptorPool pool = VK_NULL_HANDLE; if (allocator) pool = allocator->allocate_bindless_pool(num_sets, num_descriptors); if (!pool) { LOGE("Failed to allocate bindless pool.\n"); return BindlessDescriptorPoolHandle{nullptr}; } auto *handle = handle_pool.bindless_descriptor_pool.allocate(this, allocator, pool, num_sets, num_descriptors); return BindlessDescriptorPoolHandle{handle}; } void Device::fill_buffer_sharing_indices(VkBufferCreateInfo &info, uint32_t *sharing_indices) { for (auto &i : queue_info.family_indices) if (i != VK_QUEUE_FAMILY_IGNORED) add_unique_family(sharing_indices, info.queueFamilyIndexCount, i); if (info.queueFamilyIndexCount > 1) { info.sharingMode = VK_SHARING_MODE_CONCURRENT; info.pQueueFamilyIndices = sharing_indices; } else { info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; info.queueFamilyIndexCount = 0; info.pQueueFamilyIndices = nullptr; } } BufferHandle Device::create_imported_host_buffer(const BufferCreateInfo &create_info, VkExternalMemoryHandleTypeFlagBits type, void *host_buffer) { if (create_info.domain != BufferDomain::Host && create_info.domain != BufferDomain::CachedHost && create_info.domain != BufferDomain::CachedCoherentHostPreferCached && create_info.domain != BufferDomain::CachedCoherentHostPreferCoherent) { return BufferHandle{}; } if (!ext.supports_external_memory_host) return BufferHandle{}; if ((reinterpret_cast(host_buffer) & (ext.host_memory_properties.minImportedHostPointerAlignment - 1)) != 0) { LOGE("Host buffer is not aligned appropriately.\n"); return BufferHandle{}; } VkExternalMemoryBufferCreateInfo external_info = { VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR }; external_info.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT; VkMemoryHostPointerPropertiesEXT host_pointer_props = { VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT }; if (table->vkGetMemoryHostPointerPropertiesEXT(device, type, host_buffer, &host_pointer_props) != VK_SUCCESS) { LOGE("Host pointer is not importable.\n"); return BufferHandle{}; } VkBufferCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; info.size = create_info.size; info.usage = create_info.usage; info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; info.pNext = &external_info; uint32_t sharing_indices[QUEUE_INDEX_COUNT]; fill_buffer_sharing_indices(info, sharing_indices); VkBuffer buffer; VkMemoryRequirements reqs; if (table->vkCreateBuffer(device, &info, nullptr, &buffer) != VK_SUCCESS) return BufferHandle{}; table->vkGetBufferMemoryRequirements(device, buffer, &reqs); // Weird workaround for latest AMD Windows drivers which sets memoryTypeBits to 0 when using the external handle type. if (!reqs.memoryTypeBits) reqs.memoryTypeBits = ~0u; reqs.memoryTypeBits &= host_pointer_props.memoryTypeBits; if (reqs.memoryTypeBits == 0) { LOGE("No compatible host pointer types are available.\n"); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle{}; } uint32_t memory_type = find_memory_type(create_info.domain, reqs.memoryTypeBits); if (memory_type == UINT32_MAX) { LOGE("Failed to find memory type.\n"); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle{}; } VkMemoryAllocateInfo alloc_info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO }; alloc_info.allocationSize = (create_info.size + ext.host_memory_properties.minImportedHostPointerAlignment - 1) & ~(ext.host_memory_properties.minImportedHostPointerAlignment - 1); alloc_info.memoryTypeIndex = memory_type; VkImportMemoryHostPointerInfoEXT import = { VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT }; import.handleType = type; import.pHostPointer = host_buffer; alloc_info.pNext = &import; VkDeviceMemory memory; if (table->vkAllocateMemory(device, &alloc_info, nullptr, &memory) != VK_SUCCESS) { table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle{}; } auto allocation = DeviceAllocation::make_imported_allocation(memory, info.size, memory_type); if (table->vkMapMemory(device, memory, 0, VK_WHOLE_SIZE, 0, reinterpret_cast(&allocation.host_base)) != VK_SUCCESS) { allocation.free_immediate(managers.memory); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle{}; } if (table->vkBindBufferMemory(device, buffer, memory, 0) != VK_SUCCESS) { allocation.free_immediate(managers.memory); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle{}; } BufferHandle handle(handle_pool.buffers.allocate(this, buffer, allocation, create_info)); return handle; } BufferHandle Device::create_buffer(const BufferCreateInfo &create_info, const void *initial) { VkBuffer buffer; VkMemoryRequirements reqs; DeviceAllocation allocation; bool zero_initialize = (create_info.misc & BUFFER_MISC_ZERO_INITIALIZE_BIT) != 0; if (initial && zero_initialize) { LOGE("Cannot initialize buffer with data and clear.\n"); return BufferHandle{}; } VkBufferCreateInfo info = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO }; info.size = create_info.size; info.usage = create_info.usage | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; info.sharingMode = VK_SHARING_MODE_EXCLUSIVE; uint32_t sharing_indices[QUEUE_INDEX_COUNT]; fill_buffer_sharing_indices(info, sharing_indices); if (table->vkCreateBuffer(device, &info, nullptr, &buffer) != VK_SUCCESS) return BufferHandle(nullptr); table->vkGetBufferMemoryRequirements(device, buffer, &reqs); uint32_t memory_type = find_memory_type(create_info.domain, reqs.memoryTypeBits); if (memory_type == UINT32_MAX) { LOGE("Failed to find memory type.\n"); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle(nullptr); } AllocationMode mode; if (create_info.domain == BufferDomain::Device && (create_info.usage & (VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)) != 0) mode = AllocationMode::LinearDeviceHighPriority; else if (create_info.domain == BufferDomain::Device || create_info.domain == BufferDomain::LinkedDeviceHostPreferDevice) mode = AllocationMode::LinearDevice; else mode = AllocationMode::LinearHostMappable; if (!managers.memory.allocate(reqs.size, reqs.alignment, mode, memory_type, &allocation)) { // This memory type is rather scarce, so fallback to Host type if we've exhausted this memory. if (create_info.domain == BufferDomain::LinkedDeviceHost) { LOGW("Exhausted LinkedDeviceHost memory, falling back to host.\n"); memory_type = find_memory_type(BufferDomain::Host, reqs.memoryTypeBits); if (memory_type == UINT32_MAX) { LOGE("Failed to find memory type.\n"); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle(nullptr); } if (!managers.memory.allocate(reqs.size, reqs.alignment, mode, memory_type, &allocation)) { table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle(nullptr); } } else { table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle(nullptr); } } if (table->vkBindBufferMemory(device, buffer, allocation.get_memory(), allocation.get_offset()) != VK_SUCCESS) { allocation.free_immediate(managers.memory); table->vkDestroyBuffer(device, buffer, nullptr); return BufferHandle(nullptr); } auto tmpinfo = create_info; tmpinfo.usage |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; BufferHandle handle(handle_pool.buffers.allocate(this, buffer, allocation, tmpinfo)); if (create_info.domain == BufferDomain::Device && (initial || zero_initialize) && !memory_type_is_host_visible(memory_type)) { CommandBufferHandle cmd; if (initial) { auto staging_info = create_info; staging_info.domain = BufferDomain::Host; auto staging_buffer = create_buffer(staging_info, initial); set_name(*staging_buffer, "buffer-upload-staging-buffer"); cmd = request_command_buffer(CommandBuffer::Type::AsyncTransfer); cmd->begin_region("copy-buffer-staging"); cmd->copy_buffer(*handle, *staging_buffer); cmd->end_region(); } else { cmd = request_command_buffer(CommandBuffer::Type::AsyncCompute); cmd->begin_region("fill-buffer-staging"); cmd->fill_buffer(*handle, 0); cmd->end_region(); } LOCK(); submit_staging(cmd, info.usage, true); } else if (initial || zero_initialize) { void *ptr = managers.memory.map_memory(allocation, MEMORY_ACCESS_WRITE_BIT, 0, allocation.get_size()); if (!ptr) return BufferHandle(nullptr); if (initial) memcpy(ptr, initial, create_info.size); else memset(ptr, 0, create_info.size); managers.memory.unmap_memory(allocation, MEMORY_ACCESS_WRITE_BIT, 0, allocation.get_size()); } return handle; } bool Device::memory_type_is_device_optimal(uint32_t type) const { return (mem_props.memoryTypes[type].propertyFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0; } bool Device::memory_type_is_host_visible(uint32_t type) const { return (mem_props.memoryTypes[type].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0; } void Device::get_format_properties(VkFormat format, VkFormatProperties *properties) { vkGetPhysicalDeviceFormatProperties(gpu, format, properties); } bool Device::get_image_format_properties(VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties *properties) { auto res = vkGetPhysicalDeviceImageFormatProperties(gpu, format, type, tiling, usage, flags, properties); return res == VK_SUCCESS; } bool Device::image_format_is_supported(VkFormat format, VkFormatFeatureFlags required, VkImageTiling tiling) const { VkFormatProperties props; vkGetPhysicalDeviceFormatProperties(gpu, format, &props); auto flags = tiling == VK_IMAGE_TILING_OPTIMAL ? props.optimalTilingFeatures : props.linearTilingFeatures; return (flags & required) == required; } VkFormat Device::get_default_depth_stencil_format() const { if (image_format_is_supported(VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_TILING_OPTIMAL)) return VK_FORMAT_D24_UNORM_S8_UINT; if (image_format_is_supported(VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_TILING_OPTIMAL)) return VK_FORMAT_D32_SFLOAT_S8_UINT; return VK_FORMAT_UNDEFINED; } VkFormat Device::get_default_depth_format() const { if (image_format_is_supported(VK_FORMAT_D32_SFLOAT, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_TILING_OPTIMAL)) return VK_FORMAT_D32_SFLOAT; if (image_format_is_supported(VK_FORMAT_X8_D24_UNORM_PACK32, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_TILING_OPTIMAL)) return VK_FORMAT_X8_D24_UNORM_PACK32; if (image_format_is_supported(VK_FORMAT_D16_UNORM, VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, VK_IMAGE_TILING_OPTIMAL)) return VK_FORMAT_D16_UNORM; return VK_FORMAT_UNDEFINED; } uint64_t Device::allocate_cookie() { // Reserve lower bits for "special purposes". #ifdef GRANITE_VULKAN_MT return cookie.fetch_add(16, memory_order_relaxed) + 16; #else cookie += 16; return cookie; #endif } const RenderPass &Device::request_render_pass(const RenderPassInfo &info, bool compatible) { Hasher h; VkFormat formats[VULKAN_NUM_ATTACHMENTS]; VkFormat depth_stencil; uint32_t lazy = 0; uint32_t optimal = 0; for (unsigned i = 0; i < info.num_color_attachments; i++) { VK_ASSERT(info.color_attachments[i]); formats[i] = info.color_attachments[i]->get_format(); if (info.color_attachments[i]->get_image().get_create_info().domain == ImageDomain::Transient) lazy |= 1u << i; if (info.color_attachments[i]->get_image().get_layout_type() == Layout::Optimal) optimal |= 1u << i; // This can change external subpass dependencies, so it must always be hashed. h.u32(info.color_attachments[i]->get_image().get_swapchain_layout()); } if (info.depth_stencil) { if (info.depth_stencil->get_image().get_create_info().domain == ImageDomain::Transient) lazy |= 1u << info.num_color_attachments; if (info.depth_stencil->get_image().get_layout_type() == Layout::Optimal) optimal |= 1u << info.num_color_attachments; } // For multiview, base layer is encoded into the view mask. if (info.num_layers > 1) { h.u32(info.base_layer); h.u32(info.num_layers); } else { h.u32(0); h.u32(info.num_layers); } h.u32(info.num_subpasses); for (unsigned i = 0; i < info.num_subpasses; i++) { h.u32(info.subpasses[i].num_color_attachments); h.u32(info.subpasses[i].num_input_attachments); h.u32(info.subpasses[i].num_resolve_attachments); h.u32(static_cast(info.subpasses[i].depth_stencil_mode)); for (unsigned j = 0; j < info.subpasses[i].num_color_attachments; j++) h.u32(info.subpasses[i].color_attachments[j]); for (unsigned j = 0; j < info.subpasses[i].num_input_attachments; j++) h.u32(info.subpasses[i].input_attachments[j]); for (unsigned j = 0; j < info.subpasses[i].num_resolve_attachments; j++) h.u32(info.subpasses[i].resolve_attachments[j]); } depth_stencil = info.depth_stencil ? info.depth_stencil->get_format() : VK_FORMAT_UNDEFINED; h.data(formats, info.num_color_attachments * sizeof(VkFormat)); h.u32(info.num_color_attachments); h.u32(depth_stencil); // Compatible render passes do not care about load/store, or image layouts. if (!compatible) { h.u32(info.op_flags); h.u32(info.clear_attachments); h.u32(info.load_attachments); h.u32(info.store_attachments); h.u32(optimal); } // Lazy flag can change external subpass dependencies, which is not compatible. h.u32(lazy); auto hash = h.get(); auto *ret = render_passes.find(hash); if (!ret) ret = render_passes.emplace_yield(hash, hash, this, info); return *ret; } const Framebuffer &Device::request_framebuffer(const RenderPassInfo &info) { return framebuffer_allocator.request_framebuffer(info); } ImageHandle Device::get_transient_attachment(unsigned width, unsigned height, VkFormat format, unsigned index, unsigned samples, unsigned layers) { return transient_allocator.request_attachment(width, height, format, index, samples, layers); } ImageView &Device::get_swapchain_view() { VK_ASSERT(wsi.index < wsi.swapchain.size()); return wsi.swapchain[wsi.index]->get_view(); } ImageView &Device::get_swapchain_view(unsigned index) { VK_ASSERT(index < wsi.swapchain.size()); return wsi.swapchain[index]->get_view(); } unsigned Device::get_num_frame_contexts() const { return unsigned(per_frame.size()); } unsigned Device::get_num_swapchain_images() const { return unsigned(wsi.swapchain.size()); } unsigned Device::get_swapchain_index() const { return wsi.index; } unsigned Device::get_current_frame_context() const { return frame_context_index; } RenderPassInfo Device::get_swapchain_render_pass(SwapchainRenderPass style) { RenderPassInfo info; info.num_color_attachments = 1; info.color_attachments[0] = &get_swapchain_view(); info.clear_attachments = ~0u; info.store_attachments = 1u << 0; switch (style) { case SwapchainRenderPass::Depth: { info.op_flags |= RENDER_PASS_OP_CLEAR_DEPTH_STENCIL_BIT; auto att = get_transient_attachment(wsi.swapchain[wsi.index]->get_create_info().width, wsi.swapchain[wsi.index]->get_create_info().height, get_default_depth_format()); info.depth_stencil = &att->get_view(); break; } case SwapchainRenderPass::DepthStencil: { info.op_flags |= RENDER_PASS_OP_CLEAR_DEPTH_STENCIL_BIT; auto att = get_transient_attachment(wsi.swapchain[wsi.index]->get_create_info().width, wsi.swapchain[wsi.index]->get_create_info().height, get_default_depth_stencil_format()); info.depth_stencil = &att->get_view(); break; } default: break; } return info; } void Device::set_queue_lock(std::function lock_callback, std::function unlock_callback) { queue_lock_callback = move(lock_callback); queue_unlock_callback = move(unlock_callback); } void Device::set_name(const Buffer &buffer, const char *name) { if (ext.supports_debug_utils) { VkDebugUtilsObjectNameInfoEXT info = { VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT }; info.objectType = VK_OBJECT_TYPE_BUFFER; info.objectHandle = (uint64_t)buffer.get_buffer(); info.pObjectName = name; if (vkSetDebugUtilsObjectNameEXT) vkSetDebugUtilsObjectNameEXT(device, &info); } } void Device::set_name(const Image &image, const char *name) { if (ext.supports_debug_utils) { VkDebugUtilsObjectNameInfoEXT info = { VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT }; info.objectType = VK_OBJECT_TYPE_IMAGE; info.objectHandle = (uint64_t)image.get_image(); info.pObjectName = name; if (vkSetDebugUtilsObjectNameEXT) vkSetDebugUtilsObjectNameEXT(device, &info); } } void Device::set_name(const CommandBuffer &cmd, const char *name) { if (ext.supports_debug_utils) { VkDebugUtilsObjectNameInfoEXT info = { VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT }; info.objectType = VK_OBJECT_TYPE_COMMAND_BUFFER; info.objectHandle = (uint64_t)cmd.get_command_buffer(); info.pObjectName = name; if (vkSetDebugUtilsObjectNameEXT) vkSetDebugUtilsObjectNameEXT(device, &info); } } void Device::report_checkpoints() { if (!ext.supports_nv_device_diagnostic_checkpoints) return; for (int i = 0; i < QUEUE_INDEX_COUNT; i++) { if (queue_info.queues[i] == VK_NULL_HANDLE) continue; uint32_t count; table->vkGetQueueCheckpointDataNV(queue_info.queues[i], &count, nullptr); vector checkpoint_data(count); for (auto &data : checkpoint_data) data.sType = VK_STRUCTURE_TYPE_CHECKPOINT_DATA_NV; table->vkGetQueueCheckpointDataNV(queue_info.queues[i], &count, checkpoint_data.data()); if (!checkpoint_data.empty()) { LOGI("Checkpoints for %s queue:\n", queue_name_table[i]); for (auto &d : checkpoint_data) LOGI("Stage %u:\n%s\n", d.stage, static_cast(d.pCheckpointMarker)); } } } void Device::query_available_performance_counters(CommandBuffer::Type type, uint32_t *count, const VkPerformanceCounterKHR **counters, const VkPerformanceCounterDescriptionKHR **desc) { auto &query_pool = get_performance_query_pool(get_physical_queue_type(type)); *count = query_pool.get_num_counters(); *counters = query_pool.get_available_counters(); *desc = query_pool.get_available_counter_descs(); } bool Device::init_performance_counters(const std::vector &names) { for (int i = 0; i < QUEUE_INDEX_COUNT; i++) { if (&get_performance_query_pool(QueueIndices(i)) == &queue_data[i].performance_query_pool) { if (!queue_data[i].performance_query_pool.init_counters(names)) return false; } } return true; } void Device::release_profiling() { table->vkReleaseProfilingLockKHR(device); } bool Device::acquire_profiling() { if (!ext.performance_query_features.performanceCounterQueryPools) return false; VkAcquireProfilingLockInfoKHR info = { VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR }; info.timeout = UINT64_MAX; if (table->vkAcquireProfilingLockKHR(device, &info) != VK_SUCCESS) { LOGE("Failed to acquire profiling lock.\n"); return false; } return true; } void Device::add_debug_channel_buffer(DebugChannelInterface *iface, std::string tag, Vulkan::BufferHandle buffer) { buffer->set_internal_sync_object(); LOCK(); frame().debug_channels.push_back({ iface, std::move(tag), std::move(buffer) }); } void Device::parse_debug_channel(const PerFrame::DebugChannel &channel) { if (!channel.iface) return; auto *words = static_cast(map_host_buffer(*channel.buffer, MEMORY_ACCESS_READ_BIT)); size_t size = channel.buffer->get_create_info().size; if (size <= sizeof(uint32_t)) { LOGE("Debug channel buffer is too small.\n"); return; } // Format for the debug channel. // Word 0: Atomic counter used by shader. // Word 1-*: [total message length, code, x, y, z, args] size -= sizeof(uint32_t); size /= sizeof(uint32_t); if (words[0].u32 > size) { LOGW("Debug channel overflowed and messaged were dropped. Consider increasing debug channel size to at least %u bytes.\n", unsigned((words[0].u32 + 1) * sizeof(uint32_t))); } words++; while (size != 0 && words[0].u32 >= 5 && words[0].u32 <= size) { channel.iface->message(channel.tag, words[1].u32, words[2].u32, words[3].u32, words[4].u32, words[0].u32 - 5, &words[5]); size -= words[0].u32; words += words[0].u32; } unmap_host_buffer(*channel.buffer, MEMORY_ACCESS_READ_BIT); } static int64_t convert_to_signed_delta(uint64_t start_ticks, uint64_t end_ticks, unsigned valid_bits) { unsigned shamt = 64 - valid_bits; start_ticks <<= shamt; end_ticks <<= shamt; auto ticks_delta = int64_t(end_ticks - start_ticks); ticks_delta >>= shamt; return ticks_delta; } double Device::convert_device_timestamp_delta(uint64_t start_ticks, uint64_t end_ticks) const { int64_t ticks_delta = convert_to_signed_delta(start_ticks, end_ticks, queue_info.timestamp_valid_bits); return double(int64_t(ticks_delta)) * gpu_props.limits.timestampPeriod * 1e-9; } uint64_t Device::update_wrapped_device_timestamp(uint64_t ts) { calibrated_timestamp_device_accum += convert_to_signed_delta(calibrated_timestamp_device_accum, ts, queue_info.timestamp_valid_bits); return calibrated_timestamp_device_accum; } int64_t Device::convert_timestamp_to_absolute_nsec(const QueryPoolResult &handle) { auto ts = int64_t(handle.get_timestamp_ticks()); if (handle.is_device_timebase()) { // Ensure that we deal with timestamp wraparound correctly. // On some hardware, we have < 64 valid bits and the timestamp counters will wrap around at some interval. // As long as timestamps come in at a reasonably steady pace, we can deal with wraparound cleanly. ts = update_wrapped_device_timestamp(ts); ts = calibrated_timestamp_host + int64_t(double(ts - calibrated_timestamp_device) * gpu_props.limits.timestampPeriod); } return ts; } PipelineEvent Device::begin_signal_event(VkPipelineStageFlags stages) { auto event = request_pipeline_event(); event->set_stages(stages); return event; } #ifdef GRANITE_VULKAN_FILESYSTEM TextureManager &Device::get_texture_manager() { return texture_manager; } ShaderManager &Device::get_shader_manager() { return shader_manager; } #endif #ifdef GRANITE_VULKAN_FILESYSTEM void Device::init_shader_manager_cache() { //if (!shader_manager.load_shader_cache("assets://shader_cache.json")) // shader_manager.load_shader_cache("cache://shader_cache.json"); shader_manager.load_shader_cache("assets://shader_cache.json"); } void Device::flush_shader_manager_cache() { shader_manager.save_shader_cache("cache://shader_cache.json"); } #endif const VolkDeviceTable &Device::get_device_table() const { return *table; } #ifndef GRANITE_RENDERDOC_CAPTURE bool Device::init_renderdoc_capture() { LOGE("RenderDoc API capture is not enabled in this build.\n"); return false; } void Device::begin_renderdoc_capture() { } void Device::end_renderdoc_capture() { } #endif bool Device::supports_subgroup_size_log2(bool subgroup_full_group, uint8_t subgroup_minimum_size_log2, uint8_t subgroup_maximum_size_log2) const { if (ImplementationQuirks::get().force_no_subgroup_size_control) return false; if (!ext.subgroup_size_control_features.subgroupSizeControl) return false; if (subgroup_full_group && !ext.subgroup_size_control_features.computeFullSubgroups) return false; uint32_t min_subgroups = 1u << subgroup_minimum_size_log2; uint32_t max_subgroups = 1u << subgroup_maximum_size_log2; bool full_range = min_subgroups <= ext.subgroup_size_control_properties.minSubgroupSize && max_subgroups >= ext.subgroup_size_control_properties.maxSubgroupSize; // We can use VARYING size. if (full_range) return true; if (min_subgroups > ext.subgroup_size_control_properties.maxSubgroupSize || max_subgroups < ext.subgroup_size_control_properties.minSubgroupSize) { // No overlap in requested subgroup size and available subgroup size. return false; } // We need requiredSubgroupSizeStages support here. return (ext.subgroup_size_control_properties.requiredSubgroupSizeStages & VK_SHADER_STAGE_COMPUTE_BIT) != 0; } static ImplementationQuirks implementation_quirks; ImplementationQuirks &ImplementationQuirks::get() { return implementation_quirks; } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/device.hpp000066400000000000000000000762221415063341600230220ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "buffer.hpp" #include "command_buffer.hpp" #include "command_pool.hpp" #include "fence.hpp" #include "fence_manager.hpp" #include "image.hpp" #include "memory_allocator.hpp" #include "render_pass.hpp" #include "sampler.hpp" #include "semaphore.hpp" #include "semaphore_manager.hpp" #include "event_manager.hpp" #include "shader.hpp" #include "context.hpp" #include "query_pool.hpp" #include "buffer_pool.hpp" #include #include #include #include #include #ifdef GRANITE_VULKAN_FILESYSTEM #include "shader_manager.hpp" #include "texture_manager.hpp" #endif #ifdef GRANITE_VULKAN_MT #include #include #include #endif #ifdef GRANITE_VULKAN_FOSSILIZE #include "fossilize.hpp" #include "thread_group.hpp" #endif #include "quirks.hpp" #include "small_vector.hpp" namespace Util { class TimelineTraceFile; } namespace Vulkan { enum class SwapchainRenderPass { ColorOnly, Depth, DepthStencil }; struct InitialImageBuffer { BufferHandle buffer; Util::SmallVector blits; }; struct HandlePool { VulkanObjectPool buffers; VulkanObjectPool images; VulkanObjectPool linear_images; VulkanObjectPool image_views; VulkanObjectPool buffer_views; VulkanObjectPool samplers; VulkanObjectPool fences; VulkanObjectPool semaphores; VulkanObjectPool events; VulkanObjectPool query; VulkanObjectPool command_buffers; VulkanObjectPool bindless_descriptor_pool; VulkanObjectPool allocations; }; class DebugChannelInterface { public: union Word { uint32_t u32; int32_t s32; float f32; }; virtual void message(const std::string &tag, uint32_t code, uint32_t x, uint32_t y, uint32_t z, uint32_t word_count, const Word *words) = 0; }; namespace Helper { struct WaitSemaphores { Util::SmallVector binary_waits; Util::SmallVector binary_wait_stages; Util::SmallVector timeline_waits; Util::SmallVector timeline_wait_stages; Util::SmallVector timeline_wait_counts; }; class BatchComposer { public: enum { MaxSubmissions = 8 }; explicit BatchComposer(bool split_binary_timeline_semaphores); void add_wait_submissions(WaitSemaphores &sem); void add_wait_semaphore(SemaphoreHolder &sem, VkPipelineStageFlags stage); void add_signal_semaphore(VkSemaphore sem, uint64_t count); void add_command_buffer(VkCommandBuffer cmd); Util::SmallVector &bake(int profiling_iteration = -1); private: Util::SmallVector submits; VkTimelineSemaphoreSubmitInfoKHR timeline_infos[Helper::BatchComposer::MaxSubmissions]; VkPerformanceQuerySubmitInfoKHR profiling_infos[Helper::BatchComposer::MaxSubmissions]; Util::SmallVector waits[MaxSubmissions]; Util::SmallVector wait_counts[MaxSubmissions]; Util::SmallVector wait_stages[MaxSubmissions]; Util::SmallVector signals[MaxSubmissions]; Util::SmallVector signal_counts[MaxSubmissions]; Util::SmallVector cmds[MaxSubmissions]; unsigned submit_index = 0; bool split_binary_timeline_semaphores = false; void begin_batch(); bool has_timeline_semaphore_in_batch(unsigned index) const; bool has_binary_semaphore_in_batch(unsigned index) const; }; } class Device #ifdef GRANITE_VULKAN_FOSSILIZE : public Fossilize::StateCreatorInterface #endif { public: // Device-based objects which need to poke at internal data structures when their lifetimes end. // Don't want to expose a lot of internal guts to make this work. friend class QueryPool; friend struct QueryPoolResultDeleter; friend class EventHolder; friend struct EventHolderDeleter; friend class SemaphoreHolder; friend struct SemaphoreHolderDeleter; friend class FenceHolder; friend struct FenceHolderDeleter; friend class Sampler; friend struct SamplerDeleter; friend class ImmutableSampler; friend class Buffer; friend struct BufferDeleter; friend class BufferView; friend struct BufferViewDeleter; friend class ImageView; friend struct ImageViewDeleter; friend class Image; friend struct ImageDeleter; friend struct LinearHostImageDeleter; friend class CommandBuffer; friend struct CommandBufferDeleter; friend class BindlessDescriptorPool; friend struct BindlessDescriptorPoolDeleter; friend class Program; friend class WSI; friend class Cookie; friend class Framebuffer; friend class PipelineLayout; friend class FramebufferAllocator; friend class RenderPass; friend class Texture; friend class DescriptorSetAllocator; friend class Shader; friend class ImageResourceHolder; friend class DeviceAllocationOwner; friend struct DeviceAllocationDeleter; Device(); ~Device(); // No move-copy. void operator=(Device &&) = delete; Device(Device &&) = delete; // Only called by main thread, during setup phase. void set_context(const Context &context); void init_swapchain(const std::vector &swapchain_images, unsigned width, unsigned height, VkFormat format, VkSurfaceTransformFlagBitsKHR transform, VkImageUsageFlags usage); void set_swapchain_queue_family_support(uint32_t queue_family_support); bool can_touch_swapchain_in_command_buffer(CommandBuffer::Type type) const; void init_external_swapchain(const std::vector &swapchain_images); void init_frame_contexts(unsigned count); const VolkDeviceTable &get_device_table() const; // Profiling bool init_performance_counters(const std::vector &names); bool acquire_profiling(); void release_profiling(); void query_available_performance_counters(CommandBuffer::Type type, uint32_t *count, const VkPerformanceCounterKHR **counters, const VkPerformanceCounterDescriptionKHR **desc); ImageView &get_swapchain_view(); ImageView &get_swapchain_view(unsigned index); unsigned get_num_swapchain_images() const; unsigned get_num_frame_contexts() const; unsigned get_swapchain_index() const; unsigned get_current_frame_context() const; size_t get_pipeline_cache_size(); bool get_pipeline_cache_data(uint8_t *data, size_t size); bool init_pipeline_cache(const uint8_t *data, size_t size); // Frame-pushing interface. void next_frame_context(); void wait_idle(); void end_frame_context(); // RenderDoc integration API for app-guided captures. static bool init_renderdoc_capture(); // Calls next_frame_context() and begins a renderdoc capture. void begin_renderdoc_capture(); // Calls next_frame_context() and ends the renderdoc capture. void end_renderdoc_capture(); // Set names for objects for debuggers and profilers. void set_name(const Buffer &buffer, const char *name); void set_name(const Image &image, const char *name); void set_name(const CommandBuffer &cmd, const char *name); // Submission interface, may be called from any thread at any time. void flush_frame(); CommandBufferHandle request_command_buffer(CommandBuffer::Type type = CommandBuffer::Type::Generic); CommandBufferHandle request_command_buffer_for_thread(unsigned thread_index, CommandBuffer::Type type = CommandBuffer::Type::Generic); CommandBufferHandle request_profiled_command_buffer(CommandBuffer::Type type = CommandBuffer::Type::Generic); CommandBufferHandle request_profiled_command_buffer_for_thread(unsigned thread_index, CommandBuffer::Type type = CommandBuffer::Type::Generic); void submit(CommandBufferHandle &cmd, Fence *fence = nullptr, unsigned semaphore_count = 0, Semaphore *semaphore = nullptr); void submit_empty(CommandBuffer::Type type, Fence *fence = nullptr, unsigned semaphore_count = 0, Semaphore *semaphore = nullptr); void submit_discard(CommandBufferHandle &cmd); void add_wait_semaphore(CommandBuffer::Type type, Semaphore semaphore, VkPipelineStageFlags stages, bool flush); QueueIndices get_physical_queue_type(CommandBuffer::Type queue_type) const; void register_time_interval(std::string tid, QueryPoolHandle start_ts, QueryPoolHandle end_ts, std::string tag, std::string extra = {}); // Request shaders and programs. These objects are owned by the Device. Shader *request_shader(const uint32_t *code, size_t size, const ResourceLayout *layout = nullptr, const ImmutableSamplerBank *sampler_bank = nullptr); Shader *request_shader_by_hash(Util::Hash hash); Program *request_program(const uint32_t *vertex_data, size_t vertex_size, const uint32_t *fragment_data, size_t fragment_size, const ResourceLayout *vertex_layout = nullptr, const ResourceLayout *fragment_layout = nullptr); Program *request_program(const uint32_t *compute_data, size_t compute_size, const ResourceLayout *layout = nullptr, const ImmutableSamplerBank *sampler_bank = nullptr); Program *request_program(Shader *vertex, Shader *fragment); Program *request_program(Shader *compute); const ImmutableYcbcrConversion *request_immutable_ycbcr_conversion(const VkSamplerYcbcrConversionCreateInfo &info); const ImmutableSampler *request_immutable_sampler(const SamplerCreateInfo &info, const ImmutableYcbcrConversion *ycbcr); // Map and unmap buffer objects. void *map_host_buffer(const Buffer &buffer, MemoryAccessFlags access); void unmap_host_buffer(const Buffer &buffer, MemoryAccessFlags access); void *map_host_buffer(const Buffer &buffer, MemoryAccessFlags access, VkDeviceSize offset, VkDeviceSize length); void unmap_host_buffer(const Buffer &buffer, MemoryAccessFlags access, VkDeviceSize offset, VkDeviceSize length); void *map_linear_host_image(const LinearHostImage &image, MemoryAccessFlags access); void unmap_linear_host_image_and_sync(const LinearHostImage &image, MemoryAccessFlags access); // Create buffers and images. BufferHandle create_buffer(const BufferCreateInfo &info, const void *initial = nullptr); BufferHandle create_imported_host_buffer(const BufferCreateInfo &info, VkExternalMemoryHandleTypeFlagBits type, void *host_buffer); ImageHandle create_image(const ImageCreateInfo &info, const ImageInitialData *initial = nullptr); ImageHandle create_image_from_staging_buffer(const ImageCreateInfo &info, const InitialImageBuffer *buffer); LinearHostImageHandle create_linear_host_image(const LinearHostImageCreateInfo &info); DeviceAllocationOwnerHandle take_device_allocation_ownership(Image &image); DeviceAllocationOwnerHandle allocate_memory(const MemoryAllocateInfo &info); // Create staging buffers for images. InitialImageBuffer create_image_staging_buffer(const ImageCreateInfo &info, const ImageInitialData *initial); InitialImageBuffer create_image_staging_buffer(const TextureFormatLayout &layout); #ifndef _WIN32 ImageHandle create_imported_image(int fd, VkDeviceSize size, uint32_t memory_type, VkExternalMemoryHandleTypeFlagBitsKHR handle_type, const ImageCreateInfo &create_info); #endif // Create image view, buffer views and samplers. ImageViewHandle create_image_view(const ImageViewCreateInfo &view_info); BufferViewHandle create_buffer_view(const BufferViewCreateInfo &view_info); SamplerHandle create_sampler(const SamplerCreateInfo &info); BindlessDescriptorPoolHandle create_bindless_descriptor_pool(BindlessResourceType type, unsigned num_sets, unsigned num_descriptors); // Render pass helpers. bool image_format_is_supported(VkFormat format, VkFormatFeatureFlags required, VkImageTiling tiling = VK_IMAGE_TILING_OPTIMAL) const; void get_format_properties(VkFormat format, VkFormatProperties *properties); bool get_image_format_properties(VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, VkImageCreateFlags flags, VkImageFormatProperties *properties); VkFormat get_default_depth_stencil_format() const; VkFormat get_default_depth_format() const; ImageHandle get_transient_attachment(unsigned width, unsigned height, VkFormat format, unsigned index = 0, unsigned samples = 1, unsigned layers = 1); RenderPassInfo get_swapchain_render_pass(SwapchainRenderPass style); // Request legacy (non-timeline) semaphores. // Timeline semaphores are only used internally to reduce handle bloat. Semaphore request_legacy_semaphore(); Semaphore request_external_semaphore(VkSemaphore semaphore, bool signalled); #ifndef _WIN32 Semaphore request_imported_semaphore(int fd, VkExternalSemaphoreHandleTypeFlagBitsKHR handle_type); #endif // A proxy semaphore which lets us grab a semaphore handle before we signal it. // Mostly useful to deal better with render graph implementation. // TODO: When we require timeline semaphores, this could be a bit more elegant, and we could expose timeline directly. // For time being however, we'll support moving the payload over to the proxy object. Semaphore request_proxy_semaphore(); VkDevice get_device() const { return device; } VkPhysicalDevice get_physical_device() const { return gpu; } const VkPhysicalDeviceMemoryProperties &get_memory_properties() const { return mem_props; } const VkPhysicalDeviceProperties &get_gpu_properties() const { return gpu_props; } void get_memory_budget(HeapBudget *budget); const Sampler &get_stock_sampler(StockSampler sampler) const; #ifdef GRANITE_VULKAN_FILESYSTEM ShaderManager &get_shader_manager(); TextureManager &get_texture_manager(); void init_shader_manager_cache(); void flush_shader_manager_cache(); #endif // For some platforms, the device and queue might be shared, possibly across threads, so need some mechanism to // lock the global device and queue. void set_queue_lock(std::function lock_callback, std::function unlock_callback); const ImplementationWorkarounds &get_workarounds() const { return workarounds; } const DeviceFeatures &get_device_features() const { return ext; } bool swapchain_touched() const; double convert_device_timestamp_delta(uint64_t start_ticks, uint64_t end_ticks) const; // Writes a timestamp on host side, which is calibrated to the GPU timebase. QueryPoolHandle write_calibrated_timestamp(); // A split version of VkEvent handling which lets us record a wait command before signal is recorded. PipelineEvent begin_signal_event(VkPipelineStageFlags stages); // Promotes any read-write cached state to read-only, // which eliminates need to read/write lock. // Can be called at any time as long as there is no // racing access to: // - Command buffer recording which uses pipelines (texture manager is fine). // - request_shader() // - request_program() // Generally, this should be called before you call next_frame_context(). void promote_read_write_caches_to_read_only(); const Context::SystemHandles &get_system_handles() const { return system_handles; } void configure_default_geometry_samplers(float max_aniso, float lod_bias); bool supports_subgroup_size_log2(bool subgroup_full_group, uint8_t subgroup_minimum_size_log2, uint8_t subgroup_maximum_size_log2) const; private: VkInstance instance = VK_NULL_HANDLE; VkPhysicalDevice gpu = VK_NULL_HANDLE; VkDevice device = VK_NULL_HANDLE; const VolkDeviceTable *table = nullptr; QueueInfo queue_info; unsigned num_thread_indices = 1; #ifdef GRANITE_VULKAN_MT std::atomic cookie; #else uint64_t cookie = 0; #endif uint64_t allocate_cookie(); void bake_program(Program &program); void request_vertex_block(BufferBlock &block, VkDeviceSize size); void request_index_block(BufferBlock &block, VkDeviceSize size); void request_uniform_block(BufferBlock &block, VkDeviceSize size); void request_staging_block(BufferBlock &block, VkDeviceSize size); QueryPoolHandle write_timestamp(VkCommandBuffer cmd, VkPipelineStageFlagBits stage); void set_acquire_semaphore(unsigned index, Semaphore acquire); Semaphore consume_release_semaphore(); VkQueue get_current_present_queue() const; PipelineLayout *request_pipeline_layout(const CombinedResourceLayout &layout, const ImmutableSamplerBank *immutable_samplers); DescriptorSetAllocator *request_descriptor_set_allocator(const DescriptorSetLayout &layout, const uint32_t *stages_for_sets, const ImmutableSampler * const *immutable_samplers); const Framebuffer &request_framebuffer(const RenderPassInfo &info); const RenderPass &request_render_pass(const RenderPassInfo &info, bool compatible); VkPhysicalDeviceMemoryProperties mem_props; VkPhysicalDeviceProperties gpu_props; DeviceFeatures ext; void init_stock_samplers(); void init_stock_sampler(StockSampler sampler, float max_aniso, float lod_bias); void init_timeline_semaphores(); void init_bindless(); void deinit_timeline_semaphores(); uint64_t update_wrapped_device_timestamp(uint64_t ts); int64_t convert_timestamp_to_absolute_nsec(const QueryPoolResult &handle); Context::SystemHandles system_handles; QueryPoolHandle write_timestamp_nolock(VkCommandBuffer cmd, VkPipelineStageFlagBits stage); QueryPoolHandle write_calibrated_timestamp_nolock(); void register_time_interval_nolock(std::string tid, QueryPoolHandle start_ts, QueryPoolHandle end_ts, std::string tag, std::string extra); // Make sure this is deleted last. HandlePool handle_pool; // Calibrated timestamps. void init_calibrated_timestamps(); void recalibrate_timestamps_fallback(); void recalibrate_timestamps(); bool resample_calibrated_timestamps(); VkTimeDomainEXT calibrated_time_domain = VK_TIME_DOMAIN_DEVICE_EXT; int64_t calibrated_timestamp_device = 0; int64_t calibrated_timestamp_host = 0; int64_t calibrated_timestamp_device_accum = 0; int64_t last_calibrated_timestamp_host = 0; // To ensure monotonicity after a recalibration. unsigned timestamp_calibration_counter = 0; Vulkan::QueryPoolHandle frame_context_begin_ts; struct Managers { DeviceAllocator memory; FenceManager fence; SemaphoreManager semaphore; EventManager event; BufferPool vbo, ibo, ubo, staging; TimestampIntervalManager timestamps; }; Managers managers; struct { #ifdef GRANITE_VULKAN_MT std::mutex lock; std::condition_variable cond; #endif unsigned counter = 0; } lock; struct PerFrame { PerFrame(Device *device, unsigned index); ~PerFrame(); void operator=(const PerFrame &) = delete; PerFrame(const PerFrame &) = delete; void begin(); void trim_command_pools(); Device &device; unsigned frame_index; const VolkDeviceTable &table; Managers &managers; std::vector cmd_pools[QUEUE_INDEX_COUNT]; VkSemaphore timeline_semaphores[QUEUE_INDEX_COUNT] = {}; uint64_t timeline_fences[QUEUE_INDEX_COUNT] = {}; QueryPool query_pool; std::vector vbo_blocks; std::vector ibo_blocks; std::vector ubo_blocks; std::vector staging_blocks; std::vector wait_fences; std::vector recycle_fences; std::vector allocations; std::vector destroyed_framebuffers; std::vector destroyed_samplers; std::vector destroyed_pipelines; std::vector destroyed_image_views; std::vector destroyed_buffer_views; std::vector destroyed_images; std::vector destroyed_buffers; std::vector destroyed_descriptor_pools; Util::SmallVector submissions[QUEUE_INDEX_COUNT]; std::vector recycled_semaphores; std::vector recycled_events; std::vector destroyed_semaphores; std::vector keep_alive_images; struct DebugChannel { DebugChannelInterface *iface; std::string tag; BufferHandle buffer; }; std::vector debug_channels; struct TimestampIntervalHandles { std::string tid; QueryPoolHandle start_ts; QueryPoolHandle end_ts; TimestampInterval *timestamp_tag; std::string extra; }; std::vector timestamp_intervals; bool in_destructor = false; }; // The per frame structure must be destroyed after // the hashmap data structures below, so it must be declared before. std::vector> per_frame; struct { Semaphore acquire; Semaphore release; std::vector swapchain; VkQueue present_queue = VK_NULL_HANDLE; uint32_t queue_family_support_mask = 0; unsigned index = 0; bool consumed = false; } wsi; bool can_touch_swapchain_in_command_buffer(QueueIndices physical_type) const; struct QueueData { Util::SmallVector wait_semaphores; Util::SmallVector wait_stages; bool need_fence = false; VkSemaphore timeline_semaphore = VK_NULL_HANDLE; uint64_t current_timeline = 0; PerformanceQueryPool performance_query_pool; } queue_data[QUEUE_INDEX_COUNT]; struct InternalFence { VkFence fence; VkSemaphore timeline; uint64_t value; }; // Pending buffers which need to be copied from CPU to GPU before submitting graphics or compute work. struct { std::vector vbo; std::vector ibo; std::vector ubo; } dma; void submit_queue(QueueIndices physical_type, InternalFence *fence, unsigned semaphore_count = 0, Semaphore *semaphore = nullptr, int profiled_iteration = -1); PerFrame &frame() { VK_ASSERT(frame_context_index < per_frame.size()); VK_ASSERT(per_frame[frame_context_index]); return *per_frame[frame_context_index]; } const PerFrame &frame() const { VK_ASSERT(frame_context_index < per_frame.size()); VK_ASSERT(per_frame[frame_context_index]); return *per_frame[frame_context_index]; } unsigned frame_context_index = 0; uint32_t find_memory_type(BufferDomain domain, uint32_t mask) const; uint32_t find_memory_type(ImageDomain domain, uint32_t mask) const; uint32_t find_memory_type(uint32_t required, uint32_t mask) const; bool memory_type_is_device_optimal(uint32_t type) const; bool memory_type_is_host_visible(uint32_t type) const; const ImmutableSampler *samplers[static_cast(StockSampler::Count)] = {}; VulkanCache pipeline_layouts; VulkanCache descriptor_set_allocators; VulkanCache render_passes; VulkanCache shaders; VulkanCache programs; VulkanCache immutable_samplers; VulkanCache immutable_ycbcr_conversions; DescriptorSetAllocator *bindless_sampled_image_allocator_fp = nullptr; DescriptorSetAllocator *bindless_sampled_image_allocator_integer = nullptr; FramebufferAllocator framebuffer_allocator; TransientAttachmentAllocator transient_allocator; VkPipelineCache pipeline_cache = VK_NULL_HANDLE; void init_pipeline_cache(); void flush_pipeline_cache(); PerformanceQueryPool &get_performance_query_pool(QueueIndices physical_type); void clear_wait_semaphores(); void submit_staging(CommandBufferHandle &cmd, VkBufferUsageFlags usage, bool flush); PipelineEvent request_pipeline_event(); std::function queue_lock_callback; std::function queue_unlock_callback; void flush_frame(QueueIndices physical_type); void sync_buffer_blocks(); void submit_empty_inner(QueueIndices type, InternalFence *fence, unsigned semaphore_count, Semaphore *semaphore); void collect_wait_semaphores(QueueData &data, Helper::WaitSemaphores &semaphores); void emit_queue_signals(Helper::BatchComposer &composer, VkSemaphore sem, uint64_t timeline, InternalFence *fence, unsigned semaphore_count, Semaphore *semaphores); VkResult submit_batches(Helper::BatchComposer &composer, VkQueue queue, VkFence fence, int profiling_iteration = -1); void destroy_buffer(VkBuffer buffer); void destroy_image(VkImage image); void destroy_image_view(VkImageView view); void destroy_buffer_view(VkBufferView view); void destroy_pipeline(VkPipeline pipeline); void destroy_sampler(VkSampler sampler); void destroy_framebuffer(VkFramebuffer framebuffer); void destroy_semaphore(VkSemaphore semaphore); void recycle_semaphore(VkSemaphore semaphore); void destroy_event(VkEvent event); void free_memory(const DeviceAllocation &alloc); void reset_fence(VkFence fence, bool observed_wait); void keep_handle_alive(ImageHandle handle); void destroy_descriptor_pool(VkDescriptorPool desc_pool); void destroy_buffer_nolock(VkBuffer buffer); void destroy_image_nolock(VkImage image); void destroy_image_view_nolock(VkImageView view); void destroy_buffer_view_nolock(VkBufferView view); void destroy_pipeline_nolock(VkPipeline pipeline); void destroy_sampler_nolock(VkSampler sampler); void destroy_framebuffer_nolock(VkFramebuffer framebuffer); void destroy_semaphore_nolock(VkSemaphore semaphore); void recycle_semaphore_nolock(VkSemaphore semaphore); void destroy_event_nolock(VkEvent event); void free_memory_nolock(const DeviceAllocation &alloc); void destroy_descriptor_pool_nolock(VkDescriptorPool desc_pool); void reset_fence_nolock(VkFence fence, bool observed_wait); void flush_frame_nolock(); CommandBufferHandle request_command_buffer_nolock(unsigned thread_index, CommandBuffer::Type type, bool profiled); void submit_discard_nolock(CommandBufferHandle &cmd); void submit_nolock(CommandBufferHandle cmd, Fence *fence, unsigned semaphore_count, Semaphore *semaphore); void submit_empty_nolock(QueueIndices physical_type, Fence *fence, unsigned semaphore_count, Semaphore *semaphore, int profiling_iteration); void add_wait_semaphore_nolock(QueueIndices type, Semaphore semaphore, VkPipelineStageFlags stages, bool flush); void request_vertex_block_nolock(BufferBlock &block, VkDeviceSize size); void request_index_block_nolock(BufferBlock &block, VkDeviceSize size); void request_uniform_block_nolock(BufferBlock &block, VkDeviceSize size); void request_staging_block_nolock(BufferBlock &block, VkDeviceSize size); CommandBufferHandle request_secondary_command_buffer_for_thread(unsigned thread_index, const Framebuffer *framebuffer, unsigned subpass, CommandBuffer::Type type = CommandBuffer::Type::Generic); void add_frame_counter_nolock(); void decrement_frame_counter_nolock(); void submit_secondary(CommandBuffer &primary, CommandBuffer &secondary); void wait_idle_nolock(); void end_frame_nolock(); void add_debug_channel_buffer(DebugChannelInterface *iface, std::string tag, BufferHandle buffer); void parse_debug_channel(const PerFrame::DebugChannel &channel); Fence request_legacy_fence(); #ifdef GRANITE_VULKAN_FILESYSTEM ShaderManager shader_manager; TextureManager texture_manager; #endif std::string get_pipeline_cache_string() const; #ifdef GRANITE_VULKAN_FOSSILIZE Fossilize::StateRecorder state_recorder; bool enqueue_create_sampler(Fossilize::Hash hash, const VkSamplerCreateInfo *create_info, VkSampler *sampler) override; bool enqueue_create_descriptor_set_layout(Fossilize::Hash hash, const VkDescriptorSetLayoutCreateInfo *create_info, VkDescriptorSetLayout *layout) override; bool enqueue_create_pipeline_layout(Fossilize::Hash hash, const VkPipelineLayoutCreateInfo *create_info, VkPipelineLayout *layout) override; bool enqueue_create_shader_module(Fossilize::Hash hash, const VkShaderModuleCreateInfo *create_info, VkShaderModule *module) override; bool enqueue_create_render_pass(Fossilize::Hash hash, const VkRenderPassCreateInfo *create_info, VkRenderPass *render_pass) override; bool enqueue_create_compute_pipeline(Fossilize::Hash hash, const VkComputePipelineCreateInfo *create_info, VkPipeline *pipeline) override; bool enqueue_create_graphics_pipeline(Fossilize::Hash hash, const VkGraphicsPipelineCreateInfo *create_info, VkPipeline *pipeline) override; void notify_replayed_resources_for_type() override; VkPipeline fossilize_create_graphics_pipeline(Fossilize::Hash hash, VkGraphicsPipelineCreateInfo &info); VkPipeline fossilize_create_compute_pipeline(Fossilize::Hash hash, VkComputePipelineCreateInfo &info); void register_graphics_pipeline(Fossilize::Hash hash, const VkGraphicsPipelineCreateInfo &info); void register_compute_pipeline(Fossilize::Hash hash, const VkComputePipelineCreateInfo &info); void register_render_pass(VkRenderPass render_pass, Fossilize::Hash hash, const VkRenderPassCreateInfo &info); void register_descriptor_set_layout(VkDescriptorSetLayout layout, Fossilize::Hash hash, const VkDescriptorSetLayoutCreateInfo &info); void register_pipeline_layout(VkPipelineLayout layout, Fossilize::Hash hash, const VkPipelineLayoutCreateInfo &info); void register_shader_module(VkShaderModule module, Fossilize::Hash hash, const VkShaderModuleCreateInfo &info); void register_sampler(VkSampler sampler, Fossilize::Hash hash, const VkSamplerCreateInfo &info); struct { std::unordered_map shader_map; std::unordered_map render_pass_map; #ifdef GRANITE_VULKAN_MT Granite::TaskGroupHandle pipeline_group; #endif } replayer_state; void init_pipeline_state(); void flush_pipeline_state(); #endif ImplementationWorkarounds workarounds; void init_workarounds(); void report_checkpoints(); void fill_buffer_sharing_indices(VkBufferCreateInfo &create_info, uint32_t *sharing_indices); bool allocate_image_memory(DeviceAllocation *allocation, const ImageCreateInfo &info, VkImage image, VkImageTiling tiling); }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/device_fossilize.cpp000066400000000000000000000217021415063341600250750ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "device.hpp" #include "timer.hpp" using namespace std; namespace Vulkan { void Device::register_sampler(VkSampler sampler, Fossilize::Hash hash, const VkSamplerCreateInfo &info) { state_recorder.record_sampler(sampler, info, hash); } void Device::register_descriptor_set_layout(VkDescriptorSetLayout layout, Fossilize::Hash hash, const VkDescriptorSetLayoutCreateInfo &info) { state_recorder.record_descriptor_set_layout(layout, info, hash); } void Device::register_pipeline_layout(VkPipelineLayout layout, Fossilize::Hash hash, const VkPipelineLayoutCreateInfo &info) { state_recorder.record_pipeline_layout(layout, info, hash); } void Device::register_shader_module(VkShaderModule module, Fossilize::Hash hash, const VkShaderModuleCreateInfo &info) { state_recorder.record_shader_module(module, info, hash); } void Device::register_compute_pipeline(Fossilize::Hash hash, const VkComputePipelineCreateInfo &info) { state_recorder.record_compute_pipeline(VK_NULL_HANDLE, info, nullptr, 0, hash); } void Device::register_graphics_pipeline(Fossilize::Hash hash, const VkGraphicsPipelineCreateInfo &info) { state_recorder.record_graphics_pipeline(VK_NULL_HANDLE, info, nullptr, 0, hash); } void Device::register_render_pass(VkRenderPass render_pass, Fossilize::Hash hash, const VkRenderPassCreateInfo &info) { state_recorder.record_render_pass(render_pass, info, hash); } bool Device::enqueue_create_shader_module(Fossilize::Hash hash, const VkShaderModuleCreateInfo *create_info, VkShaderModule *module) { auto *ret = shaders.emplace_yield(hash, hash, this, create_info->pCode, create_info->codeSize); *module = ret->get_module(); replayer_state.shader_map[*module] = ret; return true; } void Device::notify_replayed_resources_for_type() { #ifdef GRANITE_VULKAN_MT if (replayer_state.pipeline_group) { replayer_state.pipeline_group->wait(); replayer_state.pipeline_group.reset(); } #endif } VkPipeline Device::fossilize_create_graphics_pipeline(Fossilize::Hash hash, VkGraphicsPipelineCreateInfo &info) { if (info.stageCount != 2) return VK_NULL_HANDLE; if (info.pStages[0].stage != VK_SHADER_STAGE_VERTEX_BIT) return VK_NULL_HANDLE; if (info.pStages[1].stage != VK_SHADER_STAGE_FRAGMENT_BIT) return VK_NULL_HANDLE; // Find the Shader* associated with this VkShaderModule and just use that. auto vertex_itr = replayer_state.shader_map.find(info.pStages[0].module); if (vertex_itr == end(replayer_state.shader_map)) return VK_NULL_HANDLE; // Find the Shader* associated with this VkShaderModule and just use that. auto fragment_itr = replayer_state.shader_map.find(info.pStages[1].module); if (fragment_itr == end(replayer_state.shader_map)) return VK_NULL_HANDLE; auto *ret = request_program(vertex_itr->second, fragment_itr->second); // The layout is dummy, resolve it here. info.layout = ret->get_pipeline_layout()->get_layout(); register_graphics_pipeline(hash, info); LOGI("Creating graphics pipeline.\n"); VkPipeline pipeline = VK_NULL_HANDLE; VkResult res = table->vkCreateGraphicsPipelines(device, pipeline_cache, 1, &info, nullptr, &pipeline); if (res != VK_SUCCESS) LOGE("Failed to create graphics pipeline!\n"); return ret->add_pipeline(hash, pipeline); } VkPipeline Device::fossilize_create_compute_pipeline(Fossilize::Hash hash, VkComputePipelineCreateInfo &info) { // Find the Shader* associated with this VkShaderModule and just use that. auto itr = replayer_state.shader_map.find(info.stage.module); if (itr == end(replayer_state.shader_map)) return VK_NULL_HANDLE; auto *ret = request_program(itr->second); // The layout is dummy, resolve it here. info.layout = ret->get_pipeline_layout()->get_layout(); register_compute_pipeline(hash, info); LOGI("Creating compute pipeline.\n"); VkPipeline pipeline = VK_NULL_HANDLE; VkResult res = table->vkCreateComputePipelines(device, pipeline_cache, 1, &info, nullptr, &pipeline); if (res != VK_SUCCESS) LOGE("Failed to create compute pipeline!\n"); return ret->add_pipeline(hash, pipeline); } bool Device::enqueue_create_graphics_pipeline(Fossilize::Hash hash, const VkGraphicsPipelineCreateInfo *create_info, VkPipeline *pipeline) { #ifdef GRANITE_VULKAN_MT if (!replayer_state.pipeline_group) replayer_state.pipeline_group = Granite::Global::thread_group()->create_task(); replayer_state.pipeline_group->enqueue_task([this, info = *create_info, hash, pipeline]() mutable { *pipeline = fossilize_create_graphics_pipeline(hash, info); }); return true; #else auto info = *create_info; *pipeline = fossilize_create_graphics_pipeline(hash, info); return *pipeline != VK_NULL_HANDLE; #endif } bool Device::enqueue_create_compute_pipeline(Fossilize::Hash hash, const VkComputePipelineCreateInfo *create_info, VkPipeline *pipeline) { #ifdef GRANITE_VULKAN_MT if (!replayer_state.pipeline_group) replayer_state.pipeline_group = Granite::Global::thread_group()->create_task(); replayer_state.pipeline_group->enqueue_task([this, info = *create_info, hash, pipeline]() mutable { *pipeline = fossilize_create_compute_pipeline(hash, info); }); return true; #else auto info = *create_info; *pipeline = fossilize_create_compute_pipeline(hash, info); return *pipeline != VK_NULL_HANDLE; #endif } bool Device::enqueue_create_render_pass(Fossilize::Hash hash, const VkRenderPassCreateInfo *create_info, VkRenderPass *render_pass) { auto *ret = render_passes.emplace_yield(hash, hash, this, *create_info); *render_pass = ret->get_render_pass(); replayer_state.render_pass_map[*render_pass] = ret; return true; } bool Device::enqueue_create_sampler(Fossilize::Hash hash, const VkSamplerCreateInfo *, VkSampler *sampler) { *sampler = get_stock_sampler(static_cast(hash & 0xffffu)).get_sampler(); return true; } bool Device::enqueue_create_descriptor_set_layout(Fossilize::Hash, const VkDescriptorSetLayoutCreateInfo *, VkDescriptorSetLayout *layout) { // We will create this naturally when building pipelines, can just emit dummy handles. *layout = (VkDescriptorSetLayout) uint64_t(-1); return true; } bool Device::enqueue_create_pipeline_layout(Fossilize::Hash, const VkPipelineLayoutCreateInfo *, VkPipelineLayout *layout) { // We will create this naturally when building pipelines, can just emit dummy handles. *layout = (VkPipelineLayout) uint64_t(-1); return true; } void Device::init_pipeline_state() { state_recorder.init_recording_thread(nullptr); auto file = Granite::Global::filesystem()->open("assets://pipelines.json", Granite::FileMode::ReadOnly); if (!file) file = Granite::Global::filesystem()->open("cache://pipelines.json", Granite::FileMode::ReadOnly); if (!file) return; void *mapped = file->map(); if (!mapped) { LOGE("Failed to map pipelines.json.\n"); return; } LOGI("Replaying cached state.\n"); Fossilize::StateReplayer replayer; auto start = Util::get_current_time_nsecs(); replayer.parse(*this, nullptr, static_cast(mapped), file->get_size()); auto end = Util::get_current_time_nsecs(); LOGI("Completed replaying cached state in %.3f ms.\n", (end - start) * 1e-6); replayer_state = {}; } void Device::flush_pipeline_state() { uint8_t *serialized = nullptr; size_t serialized_size = 0; if (!state_recorder.serialize(&serialized, &serialized_size)) { LOGE("Failed to serialize Fossilize state.\n"); return; } auto file = Granite::Global::filesystem()->open("cache://pipelines.json", Granite::FileMode::WriteOnly); if (file) { auto *data = static_cast(file->map_write(serialized_size)); if (data) { memcpy(data, serialized, serialized_size); file->unmap(); } else LOGE("Failed to serialize pipeline data.\n"); } state_recorder.free_serialized(serialized); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/event_manager.cpp000066400000000000000000000041471415063341600243660ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "event_manager.hpp" #include "device.hpp" namespace Vulkan { EventManager::~EventManager() { if (!workaround) for (auto &event : events) table->vkDestroyEvent(device->get_device(), event, nullptr); } void EventManager::recycle(VkEvent event) { if (!workaround && event != VK_NULL_HANDLE) { table->vkResetEvent(device->get_device(), event); events.push_back(event); } } VkEvent EventManager::request_cleared_event() { if (workaround) { // Can't use reinterpret_cast because of MSVC. return (VkEvent) ++workaround_counter; } else if (events.empty()) { VkEvent event; VkEventCreateInfo info = { VK_STRUCTURE_TYPE_EVENT_CREATE_INFO }; table->vkCreateEvent(device->get_device(), &info, nullptr, &event); return event; } else { auto event = events.back(); events.pop_back(); return event; } } void EventManager::init(Device *device_) { device = device_; table = &device->get_device_table(); workaround = device_->get_workarounds().emulate_event_as_pipeline_barrier; } }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/event_manager.hpp000066400000000000000000000030041415063341600243620ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include namespace Vulkan { class Device; class EventManager { public: void init(Device *device); ~EventManager(); VkEvent request_cleared_event(); void recycle(VkEvent event); private: Device *device = nullptr; const VolkDeviceTable *table = nullptr; std::vector events; uint64_t workaround_counter = 0; bool workaround = false; }; }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/fence.cpp000066400000000000000000000061011415063341600226230ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "fence.hpp" #include "device.hpp" namespace Vulkan { FenceHolder::~FenceHolder() { if (fence != VK_NULL_HANDLE) { if (internal_sync) device->reset_fence_nolock(fence, observed_wait); else device->reset_fence(fence, observed_wait); } } VkFence FenceHolder::get_fence() const { return fence; } void FenceHolder::wait() { auto &table = device->get_device_table(); #ifdef GRANITE_VULKAN_MT // Waiting for the same VkFence in parallel is not allowed, and there seems to be some shenanigans on Intel // when waiting for a timeline semaphore in parallel with same value as well. std::lock_guard holder{lock}; #endif if (observed_wait) return; if (timeline_value != 0) { VK_ASSERT(timeline_semaphore); VkSemaphoreWaitInfoKHR info = { VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR }; info.semaphoreCount = 1; info.pSemaphores = &timeline_semaphore; info.pValues = &timeline_value; if (table.vkWaitSemaphoresKHR(device->get_device(), &info, UINT64_MAX) != VK_SUCCESS) LOGE("Failed to wait for timeline semaphore!\n"); else observed_wait = true; } else { if (table.vkWaitForFences(device->get_device(), 1, &fence, VK_TRUE, UINT64_MAX) != VK_SUCCESS) LOGE("Failed to wait for fence!\n"); else observed_wait = true; } } bool FenceHolder::wait_timeout(uint64_t timeout) { bool ret = false; auto &table = device->get_device_table(); if (timeline_value != 0) { VK_ASSERT(timeline_semaphore); VkSemaphoreWaitInfoKHR info = { VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR }; info.semaphoreCount = 1; info.pSemaphores = &timeline_semaphore; info.pValues = &timeline_value; ret = table.vkWaitSemaphoresKHR(device->get_device(), &info, timeout) == VK_SUCCESS; } else ret = table.vkWaitForFences(device->get_device(), 1, &fence, VK_TRUE, timeout) == VK_SUCCESS; if (ret) observed_wait = true; return ret; } void FenceHolderDeleter::operator()(Vulkan::FenceHolder *fence) { fence->device->handle_pool.fences.free(fence); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/fence.hpp000066400000000000000000000045131415063341600226350ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_common.hpp" #include "vulkan_headers.hpp" #include "object_pool.hpp" #include "cookie.hpp" #ifdef GRANITE_VULKAN_MT #include #endif namespace Vulkan { class Device; class FenceHolder; struct FenceHolderDeleter { void operator()(FenceHolder *fence); }; class FenceHolder : public Util::IntrusivePtrEnabled, public InternalSyncEnabled { public: friend struct FenceHolderDeleter; friend class WSI; ~FenceHolder(); void wait(); bool wait_timeout(uint64_t nsec); private: friend class Util::ObjectPool; FenceHolder(Device *device_, VkFence fence_) : device(device_), fence(fence_), timeline_semaphore(VK_NULL_HANDLE), timeline_value(0) { } FenceHolder(Device *device_, uint64_t value, VkSemaphore timeline_semaphore_) : device(device_), fence(VK_NULL_HANDLE), timeline_semaphore(timeline_semaphore_), timeline_value(value) { VK_ASSERT(value > 0); } VkFence get_fence() const; Device *device; VkFence fence; VkSemaphore timeline_semaphore; uint64_t timeline_value; bool observed_wait = false; #ifdef GRANITE_VULKAN_MT std::mutex lock; #endif }; using Fence = Util::IntrusivePtr; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/fence_manager.cpp000066400000000000000000000034551415063341600243260ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "fence_manager.hpp" #include "device.hpp" namespace Vulkan { void FenceManager::init(Device *device_) { device = device_; table = &device->get_device_table(); } VkFence FenceManager::request_cleared_fence() { if (!fences.empty()) { auto ret = fences.back(); fences.pop_back(); return ret; } else { VkFence fence; VkFenceCreateInfo info = { VK_STRUCTURE_TYPE_FENCE_CREATE_INFO }; table->vkCreateFence(device->get_device(), &info, nullptr, &fence); return fence; } } void FenceManager::recycle_fence(VkFence fence) { fences.push_back(fence); } FenceManager::~FenceManager() { for (auto &fence : fences) table->vkDestroyFence(device->get_device(), fence, nullptr); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/fence_manager.hpp000066400000000000000000000027171415063341600243330ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include namespace Vulkan { class Device; class FenceManager { public: void init(Device *device); ~FenceManager(); VkFence request_cleared_fence(); void recycle_fence(VkFence fence); private: Device *device = nullptr; const VolkDeviceTable *table = nullptr; std::vector fences; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/format.hpp000066400000000000000000000224721415063341600230510ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include "texture_format.hpp" namespace Vulkan { enum class FormatCompressionType { Uncompressed, BC, ETC, ASTC }; static inline FormatCompressionType format_compression_type(VkFormat format) { switch (format) { case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: case VK_FORMAT_BC1_RGBA_UNORM_BLOCK: case VK_FORMAT_BC1_RGB_SRGB_BLOCK: case VK_FORMAT_BC1_RGB_UNORM_BLOCK: case VK_FORMAT_BC2_SRGB_BLOCK: case VK_FORMAT_BC2_UNORM_BLOCK: case VK_FORMAT_BC3_SRGB_BLOCK: case VK_FORMAT_BC3_UNORM_BLOCK: case VK_FORMAT_BC4_UNORM_BLOCK: case VK_FORMAT_BC4_SNORM_BLOCK: case VK_FORMAT_BC5_UNORM_BLOCK: case VK_FORMAT_BC5_SNORM_BLOCK: case VK_FORMAT_BC6H_SFLOAT_BLOCK: case VK_FORMAT_BC6H_UFLOAT_BLOCK: case VK_FORMAT_BC7_SRGB_BLOCK: case VK_FORMAT_BC7_UNORM_BLOCK: return FormatCompressionType::BC; case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: case VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: case VK_FORMAT_EAC_R11G11_SNORM_BLOCK: case VK_FORMAT_EAC_R11G11_UNORM_BLOCK: case VK_FORMAT_EAC_R11_SNORM_BLOCK: case VK_FORMAT_EAC_R11_UNORM_BLOCK: return FormatCompressionType::ETC; #define astc_fmt(w, h) \ case VK_FORMAT_ASTC_##w##x##h##_UNORM_BLOCK: \ case VK_FORMAT_ASTC_##w##x##h##_SRGB_BLOCK: \ case VK_FORMAT_ASTC_##w##x##h##_SFLOAT_BLOCK_EXT astc_fmt(4, 4): astc_fmt(5, 4): astc_fmt(5, 5): astc_fmt(6, 5): astc_fmt(6, 6): astc_fmt(8, 5): astc_fmt(8, 6): astc_fmt(8, 8): astc_fmt(10, 5): astc_fmt(10, 6): astc_fmt(10, 8): astc_fmt(10, 10): astc_fmt(12, 10): astc_fmt(12, 12): return FormatCompressionType::ASTC; #undef astc_fmt default: return FormatCompressionType::Uncompressed; } } static inline bool format_is_compressed_hdr(VkFormat format) { switch (format) { #define astc_fmt(w, h) case VK_FORMAT_ASTC_##w##x##h##_SFLOAT_BLOCK_EXT astc_fmt(4, 4): astc_fmt(5, 4): astc_fmt(5, 5): astc_fmt(6, 5): astc_fmt(6, 6): astc_fmt(8, 5): astc_fmt(8, 6): astc_fmt(8, 8): astc_fmt(10, 5): astc_fmt(10, 6): astc_fmt(10, 8): astc_fmt(10, 10): astc_fmt(12, 10): astc_fmt(12, 12): #undef astc_fmt return true; case VK_FORMAT_BC6H_SFLOAT_BLOCK: case VK_FORMAT_BC6H_UFLOAT_BLOCK: return true; default: return false; } } static inline bool format_is_srgb(VkFormat format) { switch (format) { case VK_FORMAT_A8B8G8R8_SRGB_PACK32: case VK_FORMAT_R8G8B8A8_SRGB: case VK_FORMAT_B8G8R8A8_SRGB: case VK_FORMAT_R8_SRGB: case VK_FORMAT_R8G8_SRGB: case VK_FORMAT_R8G8B8_SRGB: case VK_FORMAT_B8G8R8_SRGB: case VK_FORMAT_BC1_RGB_SRGB_BLOCK: case VK_FORMAT_BC1_RGBA_SRGB_BLOCK: case VK_FORMAT_BC2_SRGB_BLOCK: case VK_FORMAT_BC3_SRGB_BLOCK: case VK_FORMAT_BC7_SRGB_BLOCK: case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: case VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: case VK_FORMAT_ASTC_4x4_SRGB_BLOCK: case VK_FORMAT_ASTC_5x4_SRGB_BLOCK: case VK_FORMAT_ASTC_5x5_SRGB_BLOCK: case VK_FORMAT_ASTC_6x5_SRGB_BLOCK: case VK_FORMAT_ASTC_6x6_SRGB_BLOCK: case VK_FORMAT_ASTC_8x5_SRGB_BLOCK: case VK_FORMAT_ASTC_8x6_SRGB_BLOCK: case VK_FORMAT_ASTC_8x8_SRGB_BLOCK: case VK_FORMAT_ASTC_10x5_SRGB_BLOCK: case VK_FORMAT_ASTC_10x6_SRGB_BLOCK: case VK_FORMAT_ASTC_10x8_SRGB_BLOCK: case VK_FORMAT_ASTC_10x10_SRGB_BLOCK: case VK_FORMAT_ASTC_12x10_SRGB_BLOCK: case VK_FORMAT_ASTC_12x12_SRGB_BLOCK: return true; default: return false; } } static inline bool format_has_depth_aspect(VkFormat format) { switch (format) { case VK_FORMAT_D16_UNORM: case VK_FORMAT_D16_UNORM_S8_UINT: case VK_FORMAT_D24_UNORM_S8_UINT: case VK_FORMAT_D32_SFLOAT: case VK_FORMAT_X8_D24_UNORM_PACK32: case VK_FORMAT_D32_SFLOAT_S8_UINT: return true; default: return false; } } static inline bool format_has_stencil_aspect(VkFormat format) { switch (format) { case VK_FORMAT_D16_UNORM_S8_UINT: case VK_FORMAT_D24_UNORM_S8_UINT: case VK_FORMAT_D32_SFLOAT_S8_UINT: case VK_FORMAT_S8_UINT: return true; default: return false; } } static inline bool format_has_depth_or_stencil_aspect(VkFormat format) { return format_has_depth_aspect(format) || format_has_stencil_aspect(format); } static inline VkImageAspectFlags format_to_aspect_mask(VkFormat format) { switch (format) { case VK_FORMAT_UNDEFINED: return 0; case VK_FORMAT_S8_UINT: return VK_IMAGE_ASPECT_STENCIL_BIT; case VK_FORMAT_D16_UNORM_S8_UINT: case VK_FORMAT_D24_UNORM_S8_UINT: case VK_FORMAT_D32_SFLOAT_S8_UINT: return VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_DEPTH_BIT; case VK_FORMAT_D16_UNORM: case VK_FORMAT_D32_SFLOAT: case VK_FORMAT_X8_D24_UNORM_PACK32: return VK_IMAGE_ASPECT_DEPTH_BIT; default: return VK_IMAGE_ASPECT_COLOR_BIT; } } static inline void format_align_dim(VkFormat format, uint32_t &width, uint32_t &height) { uint32_t align_width, align_height; TextureFormatLayout::format_block_dim(format, align_width, align_height); width = ((width + align_width - 1) / align_width) * align_width; height = ((height + align_height - 1) / align_height) * align_height; } static inline void format_num_blocks(VkFormat format, uint32_t &width, uint32_t &height) { uint32_t align_width, align_height; TextureFormatLayout::format_block_dim(format, align_width, align_height); width = (width + align_width - 1) / align_width; height = (height + align_height - 1) / align_height; } static inline VkDeviceSize format_get_layer_size(VkFormat format, VkImageAspectFlags aspect, unsigned width, unsigned height, unsigned depth) { uint32_t blocks_x = width; uint32_t blocks_y = height; format_num_blocks(format, blocks_x, blocks_y); format_align_dim(format, width, height); VkDeviceSize size = TextureFormatLayout::format_block_size(format, aspect) * depth * blocks_x * blocks_y; return size; } static inline unsigned format_ycbcr_num_planes(VkFormat format) { switch (format) { case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: case VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: case VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: return 3; case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: case VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: return 2; default: return 1; } } static inline void format_ycbcr_downsample_dimensions(VkFormat format, VkImageAspectFlags aspect, uint32_t &width, uint32_t &height) { if (aspect == VK_IMAGE_ASPECT_PLANE_0_BIT) return; switch (format) { #define fmt(x, sub0, sub1) \ case VK_FORMAT_##x: \ width >>= sub0; \ height >>= sub1; \ break fmt(G8_B8_R8_3PLANE_420_UNORM, 1, 1); fmt(G8_B8R8_2PLANE_420_UNORM, 1, 1); fmt(G8_B8_R8_3PLANE_422_UNORM, 1, 0); fmt(G8_B8R8_2PLANE_422_UNORM, 1, 0); fmt(G8_B8_R8_3PLANE_444_UNORM, 0, 0); fmt(G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, 1, 1); fmt(G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, 1, 0); fmt(G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, 0, 0); fmt(G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, 1, 1); fmt(G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, 1, 0); fmt(G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, 1, 1); fmt(G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, 1, 0); fmt(G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, 0, 0); fmt(G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, 1, 1); fmt(G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, 1, 0); fmt(G16_B16_R16_3PLANE_420_UNORM, 1, 1); fmt(G16_B16_R16_3PLANE_422_UNORM, 1, 0); fmt(G16_B16_R16_3PLANE_444_UNORM, 0, 0); fmt(G16_B16R16_2PLANE_420_UNORM, 1, 1); fmt(G16_B16R16_2PLANE_422_UNORM, 1, 0); default: break; } #undef fmt } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/image.cpp000066400000000000000000000140211415063341600226250ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "image.hpp" #include "device.hpp" #include "buffer.hpp" using namespace std; namespace Vulkan { ImageView::ImageView(Device *device_, VkImageView view_, const ImageViewCreateInfo &info_) : Cookie(device_) , device(device_) , view(view_) , info(info_) { } VkImageView ImageView::get_render_target_view(unsigned layer) const { // Transient images just have one layer. if (info.image->get_create_info().domain == ImageDomain::Transient) return view; VK_ASSERT(layer < get_create_info().layers); if (render_target_views.empty()) return view; else { VK_ASSERT(layer < render_target_views.size()); return render_target_views[layer]; } } ImageView::~ImageView() { if (internal_sync) { device->destroy_image_view_nolock(view); if (depth_view != VK_NULL_HANDLE) device->destroy_image_view_nolock(depth_view); if (stencil_view != VK_NULL_HANDLE) device->destroy_image_view_nolock(stencil_view); if (unorm_view != VK_NULL_HANDLE) device->destroy_image_view_nolock(unorm_view); if (srgb_view != VK_NULL_HANDLE) device->destroy_image_view_nolock(srgb_view); for (auto &v : render_target_views) device->destroy_image_view_nolock(v); } else { device->destroy_image_view(view); if (depth_view != VK_NULL_HANDLE) device->destroy_image_view(depth_view); if (stencil_view != VK_NULL_HANDLE) device->destroy_image_view(stencil_view); if (unorm_view != VK_NULL_HANDLE) device->destroy_image_view(unorm_view); if (srgb_view != VK_NULL_HANDLE) device->destroy_image_view(srgb_view); for (auto &v : render_target_views) device->destroy_image_view(v); } } Image::Image(Device *device_, VkImage image_, VkImageView default_view, const DeviceAllocation &alloc_, const ImageCreateInfo &create_info_, VkImageViewType view_type) : Cookie(device_) , device(device_) , image(image_) , alloc(alloc_) , create_info(create_info_) { if (default_view != VK_NULL_HANDLE) { ImageViewCreateInfo info; info.image = this; info.view_type = view_type; info.format = create_info.format; info.base_level = 0; info.levels = create_info.levels; info.base_layer = 0; info.layers = create_info.layers; view = ImageViewHandle(device->handle_pool.image_views.allocate(device, default_view, info)); } } DeviceAllocation Image::take_allocation_ownership() { DeviceAllocation ret = {}; std::swap(ret, alloc); return ret; } void Image::disown_image() { owns_image = false; } void Image::disown_memory_allocation() { owns_memory_allocation = false; } Image::~Image() { if (owns_image) { if (internal_sync) device->destroy_image_nolock(image); else device->destroy_image(image); } if (alloc.get_memory() && owns_memory_allocation) { if (internal_sync) device->free_memory_nolock(alloc); else device->free_memory(alloc); } } const Buffer &LinearHostImage::get_host_visible_buffer() const { return *cpu_image; } bool LinearHostImage::need_staging_copy() const { return gpu_image->get_create_info().domain != ImageDomain::LinearHostCached && gpu_image->get_create_info().domain != ImageDomain::LinearHost; } const DeviceAllocation &LinearHostImage::get_host_visible_allocation() const { return need_staging_copy() ? cpu_image->get_allocation() : gpu_image->get_allocation(); } const ImageView &LinearHostImage::get_view() const { return gpu_image->get_view(); } const Image &LinearHostImage::get_image() const { return *gpu_image; } size_t LinearHostImage::get_offset() const { return row_offset; } size_t LinearHostImage::get_row_pitch_bytes() const { return row_pitch; } VkPipelineStageFlags LinearHostImage::get_used_pipeline_stages() const { return stages; } LinearHostImage::LinearHostImage(Device *device_, ImageHandle gpu_image_, BufferHandle cpu_image_, VkPipelineStageFlags stages_) : device(device_), gpu_image(move(gpu_image_)), cpu_image(move(cpu_image_)), stages(stages_) { if (gpu_image->get_create_info().domain == ImageDomain::LinearHostCached || gpu_image->get_create_info().domain == ImageDomain::LinearHost) { VkImageSubresource sub = {}; sub.aspectMask = format_to_aspect_mask(gpu_image->get_format()); VkSubresourceLayout layout; auto &table = device_->get_device_table(); table.vkGetImageSubresourceLayout(device->get_device(), gpu_image->get_image(), &sub, &layout); row_pitch = layout.rowPitch; row_offset = layout.offset; } else { row_pitch = gpu_image->get_width() * TextureFormatLayout::format_block_size(gpu_image->get_format(), format_to_aspect_mask(gpu_image->get_format())); row_offset = 0; } } void ImageViewDeleter::operator()(ImageView *view) { view->device->handle_pool.image_views.free(view); } void ImageDeleter::operator()(Image *image) { image->device->handle_pool.images.free(image); } void LinearHostImageDeleter::operator()(LinearHostImage *image) { image->device->handle_pool.linear_images.free(image); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/image.hpp000066400000000000000000000452711415063341600226450ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "cookie.hpp" #include "format.hpp" #include "vulkan_common.hpp" #include "memory_allocator.hpp" #include "vulkan_headers.hpp" #include namespace Vulkan { class Device; static inline VkPipelineStageFlags image_usage_to_possible_stages(VkImageUsageFlags usage) { VkPipelineStageFlags flags = 0; if (usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT)) flags |= VK_PIPELINE_STAGE_TRANSFER_BIT; if (usage & VK_IMAGE_USAGE_SAMPLED_BIT) flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; if (usage & VK_IMAGE_USAGE_STORAGE_BIT) flags |= VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) flags |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) flags |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; if (usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) flags |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; if (usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) { VkPipelineStageFlags possible = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; if (usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) possible |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; flags &= possible; } return flags; } static inline VkAccessFlags image_layout_to_possible_access(VkImageLayout layout) { switch (layout) { case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: return VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: return VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT; case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: return VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: return VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: return VK_ACCESS_TRANSFER_READ_BIT; case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: return VK_ACCESS_TRANSFER_WRITE_BIT; default: return ~0u; } } static inline VkAccessFlags image_usage_to_possible_access(VkImageUsageFlags usage) { VkAccessFlags flags = 0; if (usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT)) flags |= VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT; if (usage & VK_IMAGE_USAGE_SAMPLED_BIT) flags |= VK_ACCESS_SHADER_READ_BIT; if (usage & VK_IMAGE_USAGE_STORAGE_BIT) flags |= VK_ACCESS_SHADER_WRITE_BIT | VK_ACCESS_SHADER_READ_BIT; if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) flags |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT; if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) flags |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; if (usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) flags |= VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; // Transient attachments can only be attachments, and never other resources. if (usage & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) { flags &= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; } return flags; } static inline uint32_t image_num_miplevels(const VkExtent3D &extent) { uint32_t size = std::max(std::max(extent.width, extent.height), extent.depth); uint32_t levels = 0; while (size) { levels++; size >>= 1; } return levels; } static inline VkFormatFeatureFlags image_usage_to_features(VkImageUsageFlags usage) { VkFormatFeatureFlags flags = 0; if (usage & VK_IMAGE_USAGE_SAMPLED_BIT) flags |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT; if (usage & VK_IMAGE_USAGE_STORAGE_BIT) flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT; if (usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) flags |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT; if (usage & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) flags |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT; return flags; } struct ImageInitialData { const void *data; unsigned row_length; unsigned image_height; }; enum ImageMiscFlagBits { IMAGE_MISC_GENERATE_MIPS_BIT = 1 << 0, IMAGE_MISC_FORCE_ARRAY_BIT = 1 << 1, IMAGE_MISC_MUTABLE_SRGB_BIT = 1 << 2, IMAGE_MISC_CONCURRENT_QUEUE_GRAPHICS_BIT = 1 << 3, IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_COMPUTE_BIT = 1 << 4, IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_GRAPHICS_BIT = 1 << 5, IMAGE_MISC_CONCURRENT_QUEUE_ASYNC_TRANSFER_BIT = 1 << 6, IMAGE_MISC_VERIFY_FORMAT_FEATURE_SAMPLED_LINEAR_FILTER_BIT = 1 << 7, IMAGE_MISC_LINEAR_IMAGE_IGNORE_DEVICE_LOCAL_BIT = 1 << 8, IMAGE_MISC_FORCE_NO_DEDICATED_BIT = 1 << 9, IMAGE_MISC_NO_DEFAULT_VIEWS_BIT = 1 << 10 }; using ImageMiscFlags = uint32_t; enum ImageViewMiscFlagBits { IMAGE_VIEW_MISC_FORCE_ARRAY_BIT = 1 << 0 }; using ImageViewMiscFlags = uint32_t; class Image; struct ImageViewCreateInfo { Image *image = nullptr; VkFormat format = VK_FORMAT_UNDEFINED; unsigned base_level = 0; unsigned levels = VK_REMAINING_MIP_LEVELS; unsigned base_layer = 0; unsigned layers = VK_REMAINING_ARRAY_LAYERS; VkImageViewType view_type = VK_IMAGE_VIEW_TYPE_MAX_ENUM; ImageViewMiscFlags misc = 0; VkComponentMapping swizzle = { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A, }; }; class ImageView; struct ImageViewDeleter { void operator()(ImageView *view); }; class ImageView : public Util::IntrusivePtrEnabled, public Cookie, public InternalSyncEnabled { public: friend struct ImageViewDeleter; ImageView(Device *device, VkImageView view, const ImageViewCreateInfo &info); ~ImageView(); void set_alt_views(VkImageView depth, VkImageView stencil) { VK_ASSERT(depth_view == VK_NULL_HANDLE); VK_ASSERT(stencil_view == VK_NULL_HANDLE); depth_view = depth; stencil_view = stencil; } void set_render_target_views(std::vector views) { VK_ASSERT(render_target_views.empty()); render_target_views = std::move(views); } void set_unorm_view(VkImageView view_) { VK_ASSERT(unorm_view == VK_NULL_HANDLE); unorm_view = view_; } void set_srgb_view(VkImageView view_) { VK_ASSERT(srgb_view == VK_NULL_HANDLE); srgb_view = view_; } // By default, gets a combined view which includes all aspects in the image. // This would be used mostly for render targets. VkImageView get_view() const { return view; } VkImageView get_render_target_view(unsigned layer) const; // Gets an image view which only includes floating point domains. // Takes effect when we want to sample from an image which is Depth/Stencil, // but we only want to sample depth. VkImageView get_float_view() const { return depth_view != VK_NULL_HANDLE ? depth_view : view; } // Gets an image view which only includes integer domains. // Takes effect when we want to sample from an image which is Depth/Stencil, // but we only want to sample stencil. VkImageView get_integer_view() const { return stencil_view != VK_NULL_HANDLE ? stencil_view : view; } VkImageView get_unorm_view() const { return unorm_view; } VkImageView get_srgb_view() const { return srgb_view; } VkFormat get_format() const { return info.format; } const Image &get_image() const { return *info.image; } Image &get_image() { return *info.image; } const ImageViewCreateInfo &get_create_info() const { return info; } private: Device *device; VkImageView view; std::vector render_target_views; VkImageView depth_view = VK_NULL_HANDLE; VkImageView stencil_view = VK_NULL_HANDLE; VkImageView unorm_view = VK_NULL_HANDLE; VkImageView srgb_view = VK_NULL_HANDLE; ImageViewCreateInfo info; }; using ImageViewHandle = Util::IntrusivePtr; enum class ImageDomain { Physical, Transient, LinearHostCached, LinearHost }; class ImmutableYcbcrConversion; struct ImageCreateInfo { ImageDomain domain = ImageDomain::Physical; unsigned width = 0; unsigned height = 0; unsigned depth = 1; unsigned levels = 1; VkFormat format = VK_FORMAT_UNDEFINED; VkImageType type = VK_IMAGE_TYPE_2D; unsigned layers = 1; VkImageUsageFlags usage = 0; VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT; VkImageCreateFlags flags = 0; ImageMiscFlags misc = 0; VkImageLayout initial_layout = VK_IMAGE_LAYOUT_GENERAL; VkComponentMapping swizzle = { VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A, }; const DeviceAllocation **memory_aliases = nullptr; unsigned num_memory_aliases = 0; const ImmutableYcbcrConversion *ycbcr_conversion = nullptr; void *pnext = nullptr; static ImageCreateInfo immutable_image(const TextureFormatLayout &layout) { Vulkan::ImageCreateInfo info; info.width = layout.get_width(); info.height = layout.get_height(); info.type = layout.get_image_type(); info.depth = layout.get_depth(); info.format = layout.get_format(); info.layers = layout.get_layers(); info.levels = layout.get_levels(); info.usage = VK_IMAGE_USAGE_SAMPLED_BIT; info.initial_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; info.samples = VK_SAMPLE_COUNT_1_BIT; info.domain = ImageDomain::Physical; return info; } static ImageCreateInfo immutable_2d_image(unsigned width, unsigned height, VkFormat format, bool mipmapped = false) { ImageCreateInfo info; info.width = width; info.height = height; info.depth = 1; info.levels = mipmapped ? 0u : 1u; info.format = format; info.type = VK_IMAGE_TYPE_2D; info.layers = 1; info.usage = VK_IMAGE_USAGE_SAMPLED_BIT; info.samples = VK_SAMPLE_COUNT_1_BIT; info.flags = 0; info.misc = mipmapped ? unsigned(IMAGE_MISC_GENERATE_MIPS_BIT) : 0u; info.initial_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; return info; } static ImageCreateInfo immutable_3d_image(unsigned width, unsigned height, unsigned depth, VkFormat format, bool mipmapped = false) { ImageCreateInfo info = immutable_2d_image(width, height, format, mipmapped); info.depth = depth; info.type = VK_IMAGE_TYPE_3D; return info; } static ImageCreateInfo render_target(unsigned width, unsigned height, VkFormat format) { ImageCreateInfo info; info.width = width; info.height = height; info.depth = 1; info.levels = 1; info.format = format; info.type = VK_IMAGE_TYPE_2D; info.layers = 1; info.usage = (format_has_depth_or_stencil_aspect(format) ? VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT : VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; info.samples = VK_SAMPLE_COUNT_1_BIT; info.flags = 0; info.misc = 0; info.initial_layout = format_has_depth_or_stencil_aspect(format) ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; return info; } static ImageCreateInfo transient_render_target(unsigned width, unsigned height, VkFormat format) { ImageCreateInfo info; info.domain = ImageDomain::Transient; info.width = width; info.height = height; info.depth = 1; info.levels = 1; info.format = format; info.type = VK_IMAGE_TYPE_2D; info.layers = 1; info.usage = (format_has_depth_or_stencil_aspect(format) ? VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT : VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; info.samples = VK_SAMPLE_COUNT_1_BIT; info.flags = 0; info.misc = 0; info.initial_layout = VK_IMAGE_LAYOUT_UNDEFINED; return info; } static uint32_t compute_view_formats(const ImageCreateInfo &info, VkFormat *formats) { if ((info.misc & IMAGE_MISC_MUTABLE_SRGB_BIT) == 0) return 0; switch (info.format) { case VK_FORMAT_R8G8B8A8_UNORM: case VK_FORMAT_R8G8B8A8_SRGB: formats[0] = VK_FORMAT_R8G8B8A8_UNORM; formats[1] = VK_FORMAT_R8G8B8A8_SRGB; return 2; case VK_FORMAT_B8G8R8A8_UNORM: case VK_FORMAT_B8G8R8A8_SRGB: formats[0] = VK_FORMAT_B8G8R8A8_UNORM; formats[1] = VK_FORMAT_B8G8R8A8_SRGB; return 2; case VK_FORMAT_A8B8G8R8_UNORM_PACK32: case VK_FORMAT_A8B8G8R8_SRGB_PACK32: formats[0] = VK_FORMAT_A8B8G8R8_UNORM_PACK32; formats[1] = VK_FORMAT_A8B8G8R8_SRGB_PACK32; return 2; default: return 0; } } }; class Image; struct ImageDeleter { void operator()(Image *image); }; enum class Layout { Optimal, General }; class Image : public Util::IntrusivePtrEnabled, public Cookie, public InternalSyncEnabled { public: friend struct ImageDeleter; ~Image(); Image(Image &&) = delete; Image &operator=(Image &&) = delete; const ImageView &get_view() const { VK_ASSERT(view); return *view; } ImageView &get_view() { VK_ASSERT(view); return *view; } VkImage get_image() const { return image; } VkFormat get_format() const { return create_info.format; } uint32_t get_width(uint32_t lod = 0) const { return std::max(1u, create_info.width >> lod); } uint32_t get_height(uint32_t lod = 0) const { return std::max(1u, create_info.height >> lod); } uint32_t get_depth(uint32_t lod = 0) const { return std::max(1u, create_info.depth >> lod); } const ImageCreateInfo &get_create_info() const { return create_info; } VkImageLayout get_layout(VkImageLayout optimal) const { return layout_type == Layout::Optimal ? optimal : VK_IMAGE_LAYOUT_GENERAL; } Layout get_layout_type() const { return layout_type; } void set_layout(Layout layout) { layout_type = layout; } bool is_swapchain_image() const { return swapchain_layout != VK_IMAGE_LAYOUT_UNDEFINED; } VkImageLayout get_swapchain_layout() const { return swapchain_layout; } void set_swapchain_layout(VkImageLayout layout) { swapchain_layout = layout; } void set_stage_flags(VkPipelineStageFlags flags) { stage_flags = flags; } void set_access_flags(VkAccessFlags flags) { access_flags = flags; } VkPipelineStageFlags get_stage_flags() const { return stage_flags; } VkAccessFlags get_access_flags() const { return access_flags; } const DeviceAllocation &get_allocation() const { return alloc; } void disown_image(); void disown_memory_allocation(); DeviceAllocation take_allocation_ownership(); void set_surface_transform(VkSurfaceTransformFlagBitsKHR transform) { surface_transform = transform; if (transform != VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) { const VkImageUsageFlags safe_usage_flags = VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT; if ((create_info.usage & ~safe_usage_flags) != 0) { LOGW("Using surface transform for non-pure render target image (usage: %u). This can lead to weird results.\n", create_info.usage); } } } VkSurfaceTransformFlagBitsKHR get_surface_transform() const { return surface_transform; } private: friend class Util::ObjectPool; Image(Device *device, VkImage image, VkImageView default_view, const DeviceAllocation &alloc, const ImageCreateInfo &info, VkImageViewType view_type); Device *device; VkImage image; ImageViewHandle view; DeviceAllocation alloc; ImageCreateInfo create_info; Layout layout_type = Layout::Optimal; VkPipelineStageFlags stage_flags = 0; VkAccessFlags access_flags = 0; VkImageLayout swapchain_layout = VK_IMAGE_LAYOUT_UNDEFINED; VkSurfaceTransformFlagBitsKHR surface_transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; bool owns_image = true; bool owns_memory_allocation = true; }; using ImageHandle = Util::IntrusivePtr; class LinearHostImage; struct LinearHostImageDeleter { void operator()(LinearHostImage *image); }; class Buffer; enum LinearHostImageCreateInfoFlagBits { LINEAR_HOST_IMAGE_HOST_CACHED_BIT = 1 << 0, LINEAR_HOST_IMAGE_REQUIRE_LINEAR_FILTER_BIT = 1 << 1, LINEAR_HOST_IMAGE_IGNORE_DEVICE_LOCAL_BIT = 1 << 2 }; using LinearHostImageCreateInfoFlags = uint32_t; struct LinearHostImageCreateInfo { unsigned width = 0; unsigned height = 0; VkFormat format = VK_FORMAT_UNDEFINED; VkImageUsageFlags usage = 0; VkPipelineStageFlags stages = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT; LinearHostImageCreateInfoFlags flags = 0; }; // Special image type which supports direct CPU mapping. // Useful optimization for UMA implementations of Vulkan where we don't necessarily need // to perform staging copies. It gracefully falls back to staging buffer as needed. // Only usage flag SAMPLED_BIT is currently supported. class LinearHostImage : public Util::IntrusivePtrEnabled { public: friend struct LinearHostImageDeleter; size_t get_row_pitch_bytes() const; size_t get_offset() const; const ImageView &get_view() const; const Image &get_image() const; const DeviceAllocation &get_host_visible_allocation() const; const Buffer &get_host_visible_buffer() const; bool need_staging_copy() const; VkPipelineStageFlags get_used_pipeline_stages() const; private: friend class Util::ObjectPool; LinearHostImage(Device *device, ImageHandle gpu_image, Util::IntrusivePtr cpu_image, VkPipelineStageFlags stages); Device *device; ImageHandle gpu_image; Util::IntrusivePtr cpu_image; VkPipelineStageFlags stages; size_t row_pitch; size_t row_offset; }; using LinearHostImageHandle = Util::IntrusivePtr; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/limits.hpp000066400000000000000000000031421415063341600230530ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once namespace Vulkan { constexpr unsigned VULKAN_NUM_DESCRIPTOR_SETS = 4; constexpr unsigned VULKAN_NUM_BINDINGS = 32; constexpr unsigned VULKAN_NUM_BINDINGS_BINDLESS_VARYING = 16 * 1024; constexpr unsigned VULKAN_NUM_ATTACHMENTS = 8; constexpr unsigned VULKAN_NUM_VERTEX_ATTRIBS = 16; constexpr unsigned VULKAN_NUM_VERTEX_BUFFERS = 4; constexpr unsigned VULKAN_PUSH_CONSTANT_SIZE = 128; constexpr unsigned VULKAN_MAX_UBO_SIZE = 16 * 1024; constexpr unsigned VULKAN_NUM_SPEC_CONSTANTS = 8; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/memory_allocator.cpp000066400000000000000000000604561415063341600251300ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "memory_allocator.hpp" #include "device.hpp" #include using namespace std; #ifdef GRANITE_VULKAN_MT #define ALLOCATOR_LOCK() std::lock_guard holder__{lock} #else #define ALLOCATOR_LOCK() #endif namespace Vulkan { void DeviceAllocation::free_immediate() { if (!alloc) return; alloc->free(this); alloc = nullptr; base = VK_NULL_HANDLE; mask = 0; offset = 0; } void DeviceAllocation::free_immediate(DeviceAllocator &allocator) { if (alloc) free_immediate(); else if (base) { allocator.free_no_recycle(size, memory_type, base); base = VK_NULL_HANDLE; } } void DeviceAllocation::free_global(DeviceAllocator &allocator, uint32_t size_, uint32_t memory_type_) { if (base) { allocator.free(size_, memory_type_, mode, base, host_base != nullptr); base = VK_NULL_HANDLE; mask = 0; offset = 0; } } void Block::allocate(uint32_t num_blocks, DeviceAllocation *block) { VK_ASSERT(NumSubBlocks >= num_blocks); VK_ASSERT(num_blocks != 0); uint32_t block_mask; if (num_blocks == NumSubBlocks) block_mask = ~0u; else block_mask = ((1u << num_blocks) - 1u); uint32_t mask = free_blocks[num_blocks - 1]; uint32_t b = trailing_zeroes(mask); VK_ASSERT(((free_blocks[0] >> b) & block_mask) == block_mask); uint32_t sb = block_mask << b; free_blocks[0] &= ~sb; update_longest_run(); block->mask = sb; block->offset = b; } void Block::free(uint32_t mask) { VK_ASSERT((free_blocks[0] & mask) == 0); free_blocks[0] |= mask; update_longest_run(); } void ClassAllocator::suballocate(uint32_t num_blocks, AllocationMode mode, uint32_t memory_type_, MiniHeap &heap, DeviceAllocation *alloc) { heap.heap.allocate(num_blocks, alloc); alloc->base = heap.allocation.base; alloc->offset <<= sub_block_size_log2; if (heap.allocation.host_base) alloc->host_base = heap.allocation.host_base + alloc->offset; alloc->offset += heap.allocation.offset; alloc->mode = mode; alloc->memory_type = memory_type_; alloc->alloc = this; alloc->size = num_blocks << sub_block_size_log2; } bool ClassAllocator::allocate(uint32_t size, AllocationMode mode, DeviceAllocation *alloc) { ALLOCATOR_LOCK(); unsigned num_blocks = (size + sub_block_size - 1) >> sub_block_size_log2; uint32_t size_mask = (1u << (num_blocks - 1)) - 1; VK_ASSERT(mode != AllocationMode::Count); auto &m = mode_heaps[Util::ecast(mode)]; uint32_t index = trailing_zeroes(m.heap_availability_mask & ~size_mask); if (index < Block::NumSubBlocks) { auto itr = m.heaps[index].begin(); VK_ASSERT(itr); VK_ASSERT(index >= (num_blocks - 1)); auto &heap = *itr; suballocate(num_blocks, mode, memory_type, heap, alloc); unsigned new_index = heap.heap.get_longest_run() - 1; if (heap.heap.full()) { m.full_heaps.move_to_front(m.heaps[index], itr); if (!m.heaps[index].begin()) m.heap_availability_mask &= ~(1u << index); } else if (new_index != index) { auto &new_heap = m.heaps[new_index]; new_heap.move_to_front(m.heaps[index], itr); m.heap_availability_mask |= 1u << new_index; if (!m.heaps[index].begin()) m.heap_availability_mask &= ~(1u << index); } alloc->heap = itr; alloc->mode = mode; return true; } // We didn't find a vacant heap, make a new one. auto *node = object_pool.allocate(); if (!node) return false; auto &heap = *node; uint32_t alloc_size = sub_block_size * Block::NumSubBlocks; if (parent) { // We cannot allocate a new block from parent ... This is fatal. if (!parent->allocate(alloc_size, mode, &heap.allocation)) { object_pool.free(node); return false; } } else { heap.allocation.offset = 0; heap.allocation.host_base = nullptr; heap.allocation.mode = mode; if (!global_allocator->allocate(alloc_size, memory_type, mode, &heap.allocation.base, (mode == AllocationMode::LinearHostMappable || mode == AllocationMode::LinearDevice || mode == AllocationMode::LinearDeviceHighPriority) ? &heap.allocation.host_base : nullptr, VK_NULL_HANDLE)) { object_pool.free(node); return false; } } // This cannot fail. suballocate(num_blocks, mode, memory_type, heap, alloc); alloc->heap = node; if (heap.heap.full()) { m.full_heaps.insert_front(node); } else { unsigned new_index = heap.heap.get_longest_run() - 1; m.heaps[new_index].insert_front(node); m.heap_availability_mask |= 1u << new_index; } alloc->mode = mode; return true; } ClassAllocator::~ClassAllocator() { bool error = false; for (auto &m : mode_heaps) { if (m.full_heaps.begin()) error = true; for (auto &h : m.heaps) if (h.begin()) error = true; } if (error) LOGE("Memory leaked in class allocator!\n"); } void ClassAllocator::free(DeviceAllocation *alloc) { ALLOCATOR_LOCK(); auto *heap = alloc->heap.get(); auto &block = heap->heap; bool was_full = block.full(); VK_ASSERT(alloc->mode != AllocationMode::Count); auto &m = mode_heaps[Util::ecast(alloc->mode)]; unsigned index = block.get_longest_run() - 1; block.free(alloc->mask); unsigned new_index = block.get_longest_run() - 1; if (block.empty()) { // Our mini-heap is completely freed, free to higher level allocator. if (parent) heap->allocation.free_immediate(); else heap->allocation.free_global(*global_allocator, sub_block_size * Block::NumSubBlocks, memory_type); if (was_full) m.full_heaps.erase(heap); else { m.heaps[index].erase(heap); if (!m.heaps[index].begin()) m.heap_availability_mask &= ~(1u << index); } object_pool.free(heap); } else if (was_full) { m.heaps[new_index].move_to_front(m.full_heaps, heap); m.heap_availability_mask |= 1u << new_index; } else if (index != new_index) { m.heaps[new_index].move_to_front(m.heaps[index], heap); m.heap_availability_mask |= 1u << new_index; if (!m.heaps[index].begin()) m.heap_availability_mask &= ~(1u << index); } } bool Allocator::allocate_global(uint32_t size, AllocationMode mode, DeviceAllocation *alloc) { // Fall back to global allocation, do not recycle. alloc->host_base = nullptr; if (!global_allocator->allocate(size, memory_type, mode, &alloc->base, (mode == AllocationMode::LinearHostMappable || mode == AllocationMode::LinearDevice || mode == AllocationMode::LinearDeviceHighPriority) ? &alloc->host_base : nullptr, VK_NULL_HANDLE)) return false; alloc->mode = mode; alloc->alloc = nullptr; alloc->memory_type = memory_type; alloc->size = size; return true; } bool Allocator::allocate_dedicated(uint32_t size, AllocationMode mode, DeviceAllocation *alloc, VkImage dedicated_image) { // Fall back to global allocation, do not recycle. alloc->host_base = nullptr; if (!global_allocator->allocate(size, memory_type, mode, &alloc->base, (mode == AllocationMode::LinearHostMappable || mode == AllocationMode::LinearDevice || mode == AllocationMode::LinearDeviceHighPriority) ? &alloc->host_base : nullptr, dedicated_image)) return false; alloc->mode = mode; alloc->alloc = nullptr; alloc->memory_type = memory_type; alloc->size = size; return true; } DeviceAllocation DeviceAllocation::make_imported_allocation(VkDeviceMemory memory, VkDeviceSize size, uint32_t memory_type) { DeviceAllocation alloc = {}; alloc.base = memory; alloc.offset = 0; alloc.size = size; alloc.memory_type = memory_type; return alloc; } bool Allocator::allocate(uint32_t size, uint32_t alignment, AllocationMode mode, DeviceAllocation *alloc) { for (auto &c : classes) { // Find a suitable class to allocate from. if (size <= c.sub_block_size * Block::NumSubBlocks) { if (alignment > c.sub_block_size) { size_t padded_size = size + (alignment - c.sub_block_size); if (padded_size <= c.sub_block_size * Block::NumSubBlocks) size = padded_size; else continue; } bool ret = c.allocate(size, mode, alloc); if (ret) { uint32_t aligned_offset = (alloc->offset + alignment - 1) & ~(alignment - 1); if (alloc->host_base) alloc->host_base += aligned_offset - alloc->offset; alloc->offset = aligned_offset; } return ret; } } return allocate_global(size, mode, alloc); } Allocator::Allocator() { for (int i = 0; i < Util::ecast(MemoryClass::Count) - 1; i++) classes[i].set_parent(&classes[i + 1]); // 128 chunk get_class_allocator(MemoryClass::Small).set_sub_block_size(128); // 4k chunk get_class_allocator(MemoryClass::Medium).set_sub_block_size(128 * Block::NumSubBlocks); // 4K // 128k chunk get_class_allocator(MemoryClass::Large).set_sub_block_size(128 * Block::NumSubBlocks * Block::NumSubBlocks); // 2M chunk get_class_allocator(MemoryClass::Huge).set_sub_block_size(64 * Block::NumSubBlocks * Block::NumSubBlocks * Block::NumSubBlocks); } void DeviceAllocator::init(Device *device_) { device = device_; table = &device->get_device_table(); mem_props = device->get_memory_properties(); const auto &props = device->get_gpu_properties(); atom_alignment = props.limits.nonCoherentAtomSize; heaps.clear(); allocators.clear(); heaps.resize(mem_props.memoryHeapCount); allocators.reserve(mem_props.memoryTypeCount); for (unsigned i = 0; i < mem_props.memoryTypeCount; i++) { allocators.emplace_back(new Allocator); allocators.back()->set_memory_type(i); allocators.back()->set_global_allocator(this); } HeapBudget budgets[VK_MAX_MEMORY_HEAPS]; get_memory_budget(budgets); // Figure out if we have a PCI-e BAR heap. // We need to be very careful with our budget (usually 128 MiB out of 256 MiB) on these heaps // since they can lead to instability if overused. VkMemoryPropertyFlags combined_allowed_flags[VK_MAX_MEMORY_HEAPS] = {}; for (uint32_t i = 0; i < mem_props.memoryTypeCount; i++) { uint32_t heap_index = mem_props.memoryTypes[i].heapIndex; combined_allowed_flags[heap_index] |= mem_props.memoryTypes[i].propertyFlags; } bool has_host_only_heap = false; bool has_device_only_heap = false; VkDeviceSize host_heap_size = 0; VkDeviceSize device_heap_size = 0; const VkMemoryPropertyFlags pinned_flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; for (uint32_t i = 0; i < mem_props.memoryHeapCount; i++) { if ((combined_allowed_flags[i] & pinned_flags) == VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { has_host_only_heap = true; host_heap_size = (std::max)(host_heap_size, mem_props.memoryHeaps[i].size); } else if ((combined_allowed_flags[i] & pinned_flags) == VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) { has_device_only_heap = true; device_heap_size = (std::max)(device_heap_size, mem_props.memoryHeaps[i].size); } } // If we have ReBAR enabled, we generally won't find DEVICE only and HOST only heaps. // Budget criticalness should only be considered if we have the default small BAR heap (256 MiB). if (has_host_only_heap && has_device_only_heap) { for (uint32_t i = 0; i < mem_props.memoryHeapCount; i++) { if ((combined_allowed_flags[i] & pinned_flags) == pinned_flags && mem_props.memoryHeaps[i].size < host_heap_size && mem_props.memoryHeaps[i].size < device_heap_size) { memory_heap_is_budget_critical[i] = true; } } } } bool DeviceAllocator::allocate(uint32_t size, uint32_t alignment, AllocationMode mode, uint32_t memory_type, DeviceAllocation *alloc) { return allocators[memory_type]->allocate(size, alignment, mode, alloc); } bool DeviceAllocator::allocate_image_memory(uint32_t size, uint32_t alignment, AllocationMode mode, uint32_t memory_type, DeviceAllocation *alloc, VkImage image, bool force_no_dedicated) { if (!device->get_device_features().supports_dedicated || force_no_dedicated) return allocate(size, alignment, mode, memory_type, alloc); VkImageMemoryRequirementsInfo2KHR info = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR }; info.image = image; VkMemoryDedicatedRequirementsKHR dedicated_req = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR }; VkMemoryRequirements2KHR mem_req = { VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR }; mem_req.pNext = &dedicated_req; table->vkGetImageMemoryRequirements2KHR(device->get_device(), &info, &mem_req); if (dedicated_req.prefersDedicatedAllocation || dedicated_req.requiresDedicatedAllocation) return allocators[memory_type]->allocate_dedicated(size, mode, alloc, image); else return allocate(size, alignment, mode, memory_type, alloc); } bool DeviceAllocator::allocate_global(uint32_t size, AllocationMode mode, uint32_t memory_type, DeviceAllocation *alloc) { return allocators[memory_type]->allocate_global(size, mode, alloc); } void DeviceAllocator::Heap::garbage_collect(Device *device_) { auto &table_ = device_->get_device_table(); for (auto &block : blocks) { table_.vkFreeMemory(device_->get_device(), block.memory, nullptr); size -= block.size; } blocks.clear(); } DeviceAllocator::~DeviceAllocator() { for (auto &heap : heaps) heap.garbage_collect(device); } void DeviceAllocator::free(uint32_t size, uint32_t memory_type, AllocationMode mode, VkDeviceMemory memory, bool is_mapped) { if (is_mapped) table->vkUnmapMemory(device->get_device(), memory); ALLOCATOR_LOCK(); auto &heap = heaps[mem_props.memoryTypes[memory_type].heapIndex]; VK_ASSERT(mode != AllocationMode::Count); heap.blocks.push_back({ memory, size, memory_type, mode }); if (memory_heap_is_budget_critical[mem_props.memoryTypes[memory_type].heapIndex]) heap.garbage_collect(device); } void DeviceAllocator::free_no_recycle(uint32_t size, uint32_t memory_type, VkDeviceMemory memory) { ALLOCATOR_LOCK(); auto &heap = heaps[mem_props.memoryTypes[memory_type].heapIndex]; table->vkFreeMemory(device->get_device(), memory, nullptr); heap.size -= size; } void DeviceAllocator::garbage_collect() { ALLOCATOR_LOCK(); for (auto &heap : heaps) heap.garbage_collect(device); } void *DeviceAllocator::map_memory(const DeviceAllocation &alloc, MemoryAccessFlags flags, VkDeviceSize offset, VkDeviceSize length) { VkDeviceSize base_offset = offset; // This will only happen if the memory type is device local only, which we cannot possibly map. if (!alloc.host_base) return nullptr; if ((flags & MEMORY_ACCESS_READ_BIT) && !(mem_props.memoryTypes[alloc.memory_type].propertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) { offset += alloc.offset; VkDeviceSize end_offset = offset + length; offset &= ~(atom_alignment - 1); length = end_offset - offset; VkDeviceSize size = (length + atom_alignment - 1) & ~(atom_alignment - 1); // Have to invalidate cache here. const VkMappedMemoryRange range = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, nullptr, alloc.base, offset, size, }; table->vkInvalidateMappedMemoryRanges(device->get_device(), 1, &range); } return alloc.host_base + base_offset; } void DeviceAllocator::unmap_memory(const DeviceAllocation &alloc, MemoryAccessFlags flags, VkDeviceSize offset, VkDeviceSize length) { // This will only happen if the memory type is device local only, which we cannot possibly map. if (!alloc.host_base) return; if ((flags & MEMORY_ACCESS_WRITE_BIT) && !(mem_props.memoryTypes[alloc.memory_type].propertyFlags & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) { offset += alloc.offset; VkDeviceSize end_offset = offset + length; offset &= ~(atom_alignment - 1); length = end_offset - offset; VkDeviceSize size = (length + atom_alignment - 1) & ~(atom_alignment - 1); // Have to flush caches here. const VkMappedMemoryRange range = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, nullptr, alloc.base, offset, size, }; table->vkFlushMappedMemoryRanges(device->get_device(), 1, &range); } } void DeviceAllocator::get_memory_budget_nolock(HeapBudget *heap_budgets) { uint32_t num_heaps = mem_props.memoryHeapCount; if (device->get_device_features().supports_physical_device_properties2 && device->get_device_features().supports_memory_budget) { VkPhysicalDeviceMemoryProperties2KHR props = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR}; VkPhysicalDeviceMemoryBudgetPropertiesEXT budget_props = {VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT}; if (device->get_device_features().supports_memory_budget) props.pNext = &budget_props; // For global instance functions, we might not get KHR versions if we don't control // instance creation, e.g. libretro. // We can rely on Vulkan 1.1 having been enabled however. if (device->get_device_features().supports_vulkan_11_device && device->get_device_features().supports_vulkan_11_instance) vkGetPhysicalDeviceMemoryProperties2(device->get_physical_device(), &props); else vkGetPhysicalDeviceMemoryProperties2KHR(device->get_physical_device(), &props); for (uint32_t i = 0; i < num_heaps; i++) { auto &heap = heap_budgets[i]; heap.max_size = mem_props.memoryHeaps[i].size; heap.budget_size = budget_props.heapBudget[i]; heap.device_usage = budget_props.heapUsage[i]; heap.tracked_usage = heaps[i].size; heaps[i].last_budget = heap_budgets[i]; } } else { for (uint32_t i = 0; i < num_heaps; i++) { auto &heap = heap_budgets[i]; heap.max_size = mem_props.memoryHeaps[i].size; // Allow 75%. heap.budget_size = heap.max_size - (heap.max_size / 4); heap.tracked_usage = heaps[i].size; heap.device_usage = heaps[i].size; heaps[i].last_budget = heap_budgets[i]; } } } void DeviceAllocator::get_memory_budget(HeapBudget *heap_budgets) { ALLOCATOR_LOCK(); get_memory_budget_nolock(heap_budgets); } bool DeviceAllocator::allocate(uint32_t size, uint32_t memory_type, AllocationMode mode, VkDeviceMemory *memory, uint8_t **host_memory, VkImage dedicated_image) { uint32_t heap_index = mem_props.memoryTypes[memory_type].heapIndex; auto &heap = heaps[heap_index]; ALLOCATOR_LOCK(); // Naive searching is fine here as vkAllocate blocks are *huge* and we won't have many of them. auto itr = end(heap.blocks); if (dedicated_image == VK_NULL_HANDLE) { itr = find_if(begin(heap.blocks), end(heap.blocks), [=](const Allocation &alloc) { return size == alloc.size && memory_type == alloc.type && mode == alloc.mode; }); } bool host_visible = (mem_props.memoryTypes[memory_type].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0 && host_memory != nullptr; // Found previously used block. if (itr != end(heap.blocks)) { *memory = itr->memory; if (host_visible) { if (table->vkMapMemory(device->get_device(), itr->memory, 0, VK_WHOLE_SIZE, 0, reinterpret_cast(host_memory)) != VK_SUCCESS) return false; } heap.blocks.erase(itr); return true; } HeapBudget budgets[VK_MAX_MEMORY_HEAPS]; get_memory_budget_nolock(budgets); #ifdef VULKAN_DEBUG LOGI("Allocating %.1f MiB on heap #%u (mode #%u), before allocating budget: (%.1f MiB / %.1f MiB) [%.1f / %.1f].\n", double(size) / double(1024 * 1024), heap_index, unsigned(mode), double(budgets[heap_index].device_usage) / double(1024 * 1024), double(budgets[heap_index].budget_size) / double(1024 * 1024), double(budgets[heap_index].tracked_usage) / double(1024 * 1024), double(budgets[heap_index].max_size) / double(1024 * 1024)); #endif const auto log_heap_index = [&]() { LOGW(" Size: %u MiB.\n", unsigned(size / (1024 * 1024))); LOGW(" Device usage: %u MiB.\n", unsigned(budgets[heap_index].device_usage / (1024 * 1024))); LOGW(" Tracked usage: %u MiB.\n", unsigned(budgets[heap_index].tracked_usage / (1024 * 1024))); LOGW(" Budget size: %u MiB.\n", unsigned(budgets[heap_index].budget_size / (1024 * 1024))); LOGW(" Max size: %u MiB.\n", unsigned(budgets[heap_index].max_size / (1024 * 1024))); }; // If we're going to blow out the budget, we should recycle a bit. if (budgets[heap_index].device_usage + size >= budgets[heap_index].budget_size) { LOGW("Will exceed memory budget, cleaning up ...\n"); log_heap_index(); heap.garbage_collect(device); } get_memory_budget_nolock(budgets); if (budgets[heap_index].device_usage + size >= budgets[heap_index].budget_size) { LOGW("Even after garbage collection, we will exceed budget ...\n"); if (memory_heap_is_budget_critical[heap_index]) return false; log_heap_index(); } VkMemoryAllocateInfo info = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, nullptr, size, memory_type }; VkMemoryDedicatedAllocateInfoKHR dedicated = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR }; if (dedicated_image != VK_NULL_HANDLE) { dedicated.image = dedicated_image; info.pNext = &dedicated; } VkMemoryPriorityAllocateInfoEXT priority_info = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT }; if (device->get_device_features().memory_priority_features.memoryPriority) { switch (mode) { case AllocationMode::LinearDeviceHighPriority: case AllocationMode::OptimalRenderTarget: priority_info.priority = 1.0f; break; case AllocationMode::LinearDevice: case AllocationMode::OptimalResource: priority_info.priority = 0.5f; break; default: priority_info.priority = 0.0f; break; } priority_info.pNext = info.pNext; info.pNext = &priority_info; } VkDeviceMemory device_memory; VkResult res = table->vkAllocateMemory(device->get_device(), &info, nullptr, &device_memory); if (res == VK_SUCCESS) { heap.size += size; *memory = device_memory; if (host_visible) { if (table->vkMapMemory(device->get_device(), device_memory, 0, VK_WHOLE_SIZE, 0, reinterpret_cast(host_memory)) != VK_SUCCESS) { table->vkFreeMemory(device->get_device(), device_memory, nullptr); heap.size -= size; return false; } } return true; } else { // Look through our heap and see if there are blocks of other types we can free. auto block_itr = begin(heap.blocks); while (res != VK_SUCCESS && itr != end(heap.blocks)) { table->vkFreeMemory(device->get_device(), block_itr->memory, nullptr); heap.size -= block_itr->size; res = table->vkAllocateMemory(device->get_device(), &info, nullptr, &device_memory); ++block_itr; } heap.blocks.erase(begin(heap.blocks), block_itr); if (res == VK_SUCCESS) { heap.size += size; *memory = device_memory; if (host_visible) { if (table->vkMapMemory(device->get_device(), device_memory, 0, size, 0, reinterpret_cast(host_memory)) != VK_SUCCESS) { table->vkFreeMemory(device->get_device(), device_memory, nullptr); heap.size -= size; return false; } } return true; } else return false; } } DeviceAllocationOwner::DeviceAllocationOwner(Device *device_, const DeviceAllocation &alloc_) : device(device_), alloc(alloc_) { } DeviceAllocationOwner::~DeviceAllocationOwner() { if (alloc.get_memory()) device->free_memory(alloc); } const DeviceAllocation & DeviceAllocationOwner::get_allocation() const { return alloc; } void DeviceAllocationDeleter::operator()(DeviceAllocationOwner *owner) { owner->device->handle_pool.allocations.free(owner); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/memory_allocator.hpp000066400000000000000000000223021415063341600251210ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "intrusive.hpp" #include "object_pool.hpp" #include "intrusive_list.hpp" #include "vulkan_headers.hpp" #include "logging.hpp" #include "bitops.hpp" #include "enum_cast.hpp" #include "vulkan_common.hpp" #include #include #include #include #include #ifdef GRANITE_VULKAN_MT #include #endif namespace Vulkan { class Device; static inline uint32_t log2_integer(uint32_t v) { v--; return 32 - leading_zeroes(v); } enum class MemoryClass : uint8_t { Small = 0, Medium, Large, Huge, Count }; enum class AllocationMode : uint8_t { LinearHostMappable = 0, LinearDevice, LinearDeviceHighPriority, OptimalResource, OptimalRenderTarget, Count }; enum MemoryAccessFlag : uint32_t { MEMORY_ACCESS_WRITE_BIT = 1, MEMORY_ACCESS_READ_BIT = 2, MEMORY_ACCESS_READ_WRITE_BIT = MEMORY_ACCESS_WRITE_BIT | MEMORY_ACCESS_READ_BIT }; using MemoryAccessFlags = uint32_t; struct DeviceAllocation; class DeviceAllocator; class Block { public: enum { NumSubBlocks = 32u, AllFree = ~0u }; Block(const Block &) = delete; void operator=(const Block &) = delete; Block() { for (auto &v : free_blocks) v = AllFree; longest_run = 32; } ~Block() { if (free_blocks[0] != AllFree) LOGE("Memory leak in block detected.\n"); } inline bool full() const { return free_blocks[0] == 0; } inline bool empty() const { return free_blocks[0] == AllFree; } inline uint32_t get_longest_run() const { return longest_run; } void allocate(uint32_t num_blocks, DeviceAllocation *block); void free(uint32_t mask); private: uint32_t free_blocks[NumSubBlocks]; uint32_t longest_run = 0; inline void update_longest_run() { uint32_t f = free_blocks[0]; longest_run = 0; while (f) { free_blocks[longest_run++] = f; f &= f >> 1; } } }; struct MiniHeap; class ClassAllocator; class DeviceAllocator; class Allocator; class Device; struct DeviceAllocation { friend class ClassAllocator; friend class Allocator; friend class Block; friend class DeviceAllocator; friend class Device; public: inline VkDeviceMemory get_memory() const { return base; } inline bool allocation_is_global() const { return !alloc && base; } inline uint32_t get_offset() const { return offset; } inline uint32_t get_size() const { return size; } inline uint32_t get_mask() const { return mask; } inline bool is_host_allocation() const { return host_base != nullptr; } void free_immediate(); void free_immediate(DeviceAllocator &allocator); static DeviceAllocation make_imported_allocation(VkDeviceMemory memory, VkDeviceSize size, uint32_t memory_type); private: VkDeviceMemory base = VK_NULL_HANDLE; uint8_t *host_base = nullptr; ClassAllocator *alloc = nullptr; Util::IntrusiveList::Iterator heap = {}; uint32_t offset = 0; uint32_t mask = 0; uint32_t size = 0; AllocationMode mode = AllocationMode::Count; uint8_t memory_type = 0; void free_global(DeviceAllocator &allocator, uint32_t size, uint32_t memory_type); }; class DeviceAllocationOwner; struct DeviceAllocationDeleter { void operator()(DeviceAllocationOwner *owner); }; class DeviceAllocationOwner : public Util::IntrusivePtrEnabled { public: friend class Util::ObjectPool; friend struct DeviceAllocationDeleter; ~DeviceAllocationOwner(); const DeviceAllocation &get_allocation() const; private: DeviceAllocationOwner(Device *device, const DeviceAllocation &alloc); Device *device; DeviceAllocation alloc; }; using DeviceAllocationOwnerHandle = Util::IntrusivePtr; struct MemoryAllocateInfo { VkMemoryRequirements requirements = {}; VkMemoryPropertyFlags required_properties = 0; AllocationMode mode = {}; }; struct MiniHeap : Util::IntrusiveListEnabled { DeviceAllocation allocation; Block heap; }; class Allocator; class ClassAllocator { public: friend class Allocator; ~ClassAllocator(); inline void set_sub_block_size(uint32_t size) { sub_block_size_log2 = log2_integer(size); sub_block_size = size; } bool allocate(uint32_t size, AllocationMode mode, DeviceAllocation *alloc); void free(DeviceAllocation *alloc); private: ClassAllocator() = default; struct AllocationModeHeaps { Util::IntrusiveList heaps[Block::NumSubBlocks]; Util::IntrusiveList full_heaps; uint32_t heap_availability_mask = 0; }; ClassAllocator *parent = nullptr; AllocationModeHeaps mode_heaps[Util::ecast(AllocationMode::Count)]; Util::ObjectPool object_pool; uint32_t sub_block_size = 1; uint32_t sub_block_size_log2 = 0; uint32_t memory_type = 0; #ifdef GRANITE_VULKAN_MT std::mutex lock; #endif DeviceAllocator *global_allocator = nullptr; void set_global_allocator(DeviceAllocator *allocator) { global_allocator = allocator; } void set_memory_type(uint32_t type) { memory_type = type; } void suballocate(uint32_t num_blocks, AllocationMode mode, uint32_t memory_type, MiniHeap &heap, DeviceAllocation *alloc); inline void set_parent(ClassAllocator *allocator) { parent = allocator; } }; class Allocator { public: Allocator(); void operator=(const Allocator &) = delete; Allocator(const Allocator &) = delete; bool allocate(uint32_t size, uint32_t alignment, AllocationMode mode, DeviceAllocation *alloc); bool allocate_global(uint32_t size, AllocationMode mode, DeviceAllocation *alloc); bool allocate_dedicated(uint32_t size, AllocationMode mode, DeviceAllocation *alloc, VkImage image); inline ClassAllocator &get_class_allocator(MemoryClass clazz) { return classes[static_cast(clazz)]; } static void free(DeviceAllocation *alloc) { alloc->free_immediate(); } void set_memory_type(uint32_t memory_type_) { memory_type = memory_type_; for (auto &sub : classes) sub.set_memory_type(memory_type); } void set_global_allocator(DeviceAllocator *allocator) { for (auto &sub : classes) sub.set_global_allocator(allocator); global_allocator = allocator; } private: ClassAllocator classes[Util::ecast(MemoryClass::Count)]; DeviceAllocator *global_allocator = nullptr; uint32_t memory_type = 0; }; struct HeapBudget { VkDeviceSize max_size; VkDeviceSize budget_size; VkDeviceSize tracked_usage; VkDeviceSize device_usage; }; class DeviceAllocator { public: void init(Device *device); ~DeviceAllocator(); bool allocate(uint32_t size, uint32_t alignment, AllocationMode mode, uint32_t memory_type, DeviceAllocation *alloc); bool allocate_image_memory(uint32_t size, uint32_t alignment, AllocationMode mode, uint32_t memory_type, DeviceAllocation *alloc, VkImage image, bool force_no_dedicated); bool allocate_global(uint32_t size, AllocationMode mode, uint32_t memory_type, DeviceAllocation *alloc); void garbage_collect(); void *map_memory(const DeviceAllocation &alloc, MemoryAccessFlags flags, VkDeviceSize offset, VkDeviceSize length); void unmap_memory(const DeviceAllocation &alloc, MemoryAccessFlags flags, VkDeviceSize offset, VkDeviceSize length); bool allocate(uint32_t size, uint32_t memory_type, AllocationMode mode, VkDeviceMemory *memory, uint8_t **host_memory, VkImage dedicated_image); void free(uint32_t size, uint32_t memory_type, AllocationMode mode, VkDeviceMemory memory, bool is_mapped); void free_no_recycle(uint32_t size, uint32_t memory_type, VkDeviceMemory memory); void get_memory_budget(HeapBudget *heaps); private: std::vector> allocators; Device *device = nullptr; const VolkDeviceTable *table = nullptr; VkPhysicalDeviceMemoryProperties mem_props; VkDeviceSize atom_alignment = 1; #ifdef GRANITE_VULKAN_MT std::mutex lock; #endif struct Allocation { VkDeviceMemory memory; uint32_t size; uint32_t type; AllocationMode mode; }; struct Heap { uint64_t size = 0; std::vector blocks; void garbage_collect(Device *device); HeapBudget last_budget; }; std::vector heaps; bool memory_heap_is_budget_critical[VK_MAX_MEMORY_HEAPS] = {}; void get_memory_budget_nolock(HeapBudget *heaps); }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/pipeline_event.cpp000066400000000000000000000027011415063341600245530ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "pipeline_event.hpp" #include "device.hpp" namespace Vulkan { EventHolder::~EventHolder() { if (event) { if (internal_sync) device->destroy_event_nolock(event); else device->destroy_event(event); } } void EventHolderDeleter::operator()(Vulkan::EventHolder *event) { event->device->handle_pool.events.free(event); } }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/pipeline_event.hpp000066400000000000000000000040151415063341600245600ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include "vulkan_common.hpp" #include "cookie.hpp" #include "object_pool.hpp" namespace Vulkan { class Device; class EventHolder; struct EventHolderDeleter { void operator()(EventHolder *event); }; class EventHolder : public Util::IntrusivePtrEnabled, public InternalSyncEnabled { public: friend struct EventHolderDeleter; ~EventHolder(); const VkEvent &get_event() const { return event; } VkPipelineStageFlags get_stages() const { return stages; } void set_stages(VkPipelineStageFlags stages_) { stages = stages_; } private: friend class Util::ObjectPool; EventHolder(Device *device_, VkEvent event_) : device(device_) , event(event_) { } Device *device; VkEvent event; VkPipelineStageFlags stages = 0; }; using PipelineEvent = Util::IntrusivePtr; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/query_pool.cpp000066400000000000000000000340751415063341600237540ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "query_pool.hpp" #include "device.hpp" #include using namespace std; namespace Vulkan { static const char *storage_to_str(VkPerformanceCounterStorageKHR storage) { switch (storage) { case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR: return "float32"; case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR: return "float32"; case VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR: return "int32"; case VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR: return "int64"; case VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR: return "uint32"; case VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR: return "uint64"; default: return "???"; } } static const char *scope_to_str(VkPerformanceCounterScopeKHR scope) { switch (scope) { case VK_QUERY_SCOPE_COMMAND_BUFFER_KHR: return "command buffer"; case VK_QUERY_SCOPE_RENDER_PASS_KHR: return "render pass"; case VK_QUERY_SCOPE_COMMAND_KHR: return "command"; default: return "???"; } } static const char *unit_to_str(VkPerformanceCounterUnitKHR unit) { switch (unit) { case VK_PERFORMANCE_COUNTER_UNIT_AMPS_KHR: return "A"; case VK_PERFORMANCE_COUNTER_UNIT_BYTES_KHR: return "bytes"; case VK_PERFORMANCE_COUNTER_UNIT_BYTES_PER_SECOND_KHR: return "bytes / second"; case VK_PERFORMANCE_COUNTER_UNIT_CYCLES_KHR: return "cycles"; case VK_PERFORMANCE_COUNTER_UNIT_GENERIC_KHR: return "units"; case VK_PERFORMANCE_COUNTER_UNIT_HERTZ_KHR: return "Hz"; case VK_PERFORMANCE_COUNTER_UNIT_KELVIN_KHR: return "K"; case VK_PERFORMANCE_COUNTER_UNIT_NANOSECONDS_KHR: return "ns"; case VK_PERFORMANCE_COUNTER_UNIT_PERCENTAGE_KHR: return "%"; case VK_PERFORMANCE_COUNTER_UNIT_VOLTS_KHR: return "V"; case VK_PERFORMANCE_COUNTER_UNIT_WATTS_KHR: return "W"; default: return "???"; } } void PerformanceQueryPool::init_device(Device *device_, uint32_t queue_family_index_) { device = device_; queue_family_index = queue_family_index_; if (!device->get_device_features().performance_query_features.performanceCounterQueryPools) return; uint32_t num_counters = 0; if (vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( device->get_physical_device(), queue_family_index, &num_counters, nullptr, nullptr) != VK_SUCCESS) { LOGE("Failed to enumerate performance counters.\n"); return; } counters.resize(num_counters); counter_descriptions.resize(num_counters); if (vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR( device->get_physical_device(), queue_family_index, &num_counters, counters.data(), counter_descriptions.data()) != VK_SUCCESS) { LOGE("Failed to enumerate performance counters.\n"); return; } LOGI("Available performance counters for queue family: %u\n", queue_family_index); for (uint32_t i = 0; i < num_counters; i++) { LOGI(" %s: %s\n", counter_descriptions[i].name, counter_descriptions[i].description); LOGI(" Storage: %s\n", storage_to_str(counters[i].storage)); LOGI(" Scope: %s\n", scope_to_str(counters[i].scope)); LOGI(" Unit: %s\n", unit_to_str(counters[i].unit)); } } PerformanceQueryPool::~PerformanceQueryPool() { if (pool) device->get_device_table().vkDestroyQueryPool(device->get_device(), pool, nullptr); } void PerformanceQueryPool::begin_command_buffer(VkCommandBuffer cmd) { if (!pool) return; auto &table = device->get_device_table(); table.vkResetQueryPoolEXT(device->get_device(), pool, 0, 0); table.vkCmdBeginQuery(cmd, pool, 0, 0); VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER }; barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT; barrier.dstAccessMask = VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_MEMORY_READ_BIT; table.vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 1, &barrier, 0, nullptr, 0, nullptr); } void PerformanceQueryPool::end_command_buffer(VkCommandBuffer cmd) { if (!pool) return; auto &table = device->get_device_table(); VkMemoryBarrier barrier = { VK_STRUCTURE_TYPE_MEMORY_BARRIER }; barrier.srcAccessMask = VK_ACCESS_MEMORY_WRITE_BIT; barrier.dstAccessMask = VK_ACCESS_MEMORY_WRITE_BIT | VK_ACCESS_MEMORY_READ_BIT; table.vkCmdPipelineBarrier(cmd, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, 0, 1, &barrier, 0, nullptr, 0, nullptr); table.vkCmdEndQuery(cmd, pool, 0); } void PerformanceQueryPool::report() { auto &table = device->get_device_table(); if (table.vkGetQueryPoolResults(device->get_device(), pool, 0, 1, results.size() * sizeof(VkPerformanceCounterResultKHR), results.data(), sizeof(VkPerformanceCounterResultKHR), 0) != VK_SUCCESS) { LOGE("Getting performance counters did not succeed.\n"); } size_t num_counters = results.size(); LOGI("\n=== Profiling result ===\n"); for (size_t i = 0; i < num_counters; i++) { auto &counter = counters[active_indices[i]]; auto &desc = counter_descriptions[active_indices[i]]; switch (counter.storage) { case VK_PERFORMANCE_COUNTER_STORAGE_INT32_KHR: LOGI(" %s (%s): %d %s\n", desc.name, desc.description, results[i].int32, unit_to_str(counter.unit)); break; case VK_PERFORMANCE_COUNTER_STORAGE_INT64_KHR: LOGI(" %s (%s): %lld %s\n", desc.name, desc.description, static_cast(results[i].int64), unit_to_str(counter.unit)); break; case VK_PERFORMANCE_COUNTER_STORAGE_UINT32_KHR: LOGI(" %s (%s): %u %s\n", desc.name, desc.description, results[i].uint32, unit_to_str(counter.unit)); break; case VK_PERFORMANCE_COUNTER_STORAGE_UINT64_KHR: LOGI(" %s (%s): %llu %s\n", desc.name, desc.description, static_cast(results[i].uint64), unit_to_str(counter.unit)); break; case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT32_KHR: LOGI(" %s (%s): %g %s\n", desc.name, desc.description, results[i].float32, unit_to_str(counter.unit)); break; case VK_PERFORMANCE_COUNTER_STORAGE_FLOAT64_KHR: LOGI(" %s (%s): %g %s\n", desc.name, desc.description, results[i].float64, unit_to_str(counter.unit)); break; default: break; } } LOGI("================================\n\n"); } uint32_t PerformanceQueryPool::get_num_counters() const { return uint32_t(counters.size()); } const VkPerformanceCounterKHR *PerformanceQueryPool::get_available_counters() const { return counters.data(); } const VkPerformanceCounterDescriptionKHR *PerformanceQueryPool::get_available_counter_descs() const { return counter_descriptions.data(); } bool PerformanceQueryPool::init_counters(const std::vector &counter_names) { if (!device->get_device_features().performance_query_features.performanceCounterQueryPools) { LOGE("Device does not support VK_KHR_performance_query.\n"); return false; } if (!device->get_device_features().host_query_reset_features.hostQueryReset) { LOGE("Device does not support host query reset.\n"); return false; } auto &table = device->get_device_table(); if (pool) table.vkDestroyQueryPool(device->get_device(), pool, nullptr); pool = VK_NULL_HANDLE; VkQueryPoolPerformanceCreateInfoKHR performance_info = { VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR }; VkQueryPoolCreateInfo info = { VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO }; info.pNext = &performance_info; info.queryType = VK_QUERY_TYPE_PERFORMANCE_QUERY_KHR; info.queryCount = 1; active_indices.clear(); for (auto &name : counter_names) { auto itr = find_if(begin(counter_descriptions), end(counter_descriptions), [&](const VkPerformanceCounterDescriptionKHR &desc) { return name == desc.name; }); if (itr != end(counter_descriptions)) { LOGI("Found counter %s: %s\n", itr->name, itr->description); active_indices.push_back(itr - begin(counter_descriptions)); } } if (active_indices.empty()) { LOGW("No performance counters were enabled.\n"); return false; } performance_info.queueFamilyIndex = queue_family_index; performance_info.counterIndexCount = active_indices.size(); performance_info.pCounterIndices = active_indices.data(); results.resize(active_indices.size()); uint32_t num_passes = 0; vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR(device->get_physical_device(), &performance_info, &num_passes); if (num_passes != 1) { LOGE("Implementation requires %u passes to query performance counters. Cannot create query pool.\n", num_passes); return false; } if (table.vkCreateQueryPool(device->get_device(), &info, nullptr, &pool) != VK_SUCCESS) { LOGE("Failed to create performance query pool.\n"); return false; } return true; } QueryPool::QueryPool(Device *device_) : device(device_) , table(device_->get_device_table()) { supports_timestamp = device->get_gpu_properties().limits.timestampComputeAndGraphics; // Ignore timestampValidBits and friends for now. if (supports_timestamp) add_pool(); } QueryPool::~QueryPool() { for (auto &pool : pools) table.vkDestroyQueryPool(device->get_device(), pool.pool, nullptr); } void QueryPool::begin() { for (unsigned i = 0; i <= pool_index; i++) { if (i >= pools.size()) continue; auto &pool = pools[i]; if (pool.index == 0) continue; table.vkGetQueryPoolResults(device->get_device(), pool.pool, 0, pool.index, pool.index * sizeof(uint64_t), pool.query_results.data(), sizeof(uint64_t), VK_QUERY_RESULT_64_BIT | VK_QUERY_RESULT_WAIT_BIT); for (unsigned j = 0; j < pool.index; j++) pool.cookies[j]->signal_timestamp_ticks(pool.query_results[j]); if (device->get_device_features().host_query_reset_features.hostQueryReset) table.vkResetQueryPoolEXT(device->get_device(), pool.pool, 0, pool.index); } pool_index = 0; for (auto &pool : pools) pool.index = 0; } void QueryPool::add_pool() { VkQueryPoolCreateInfo pool_info = { VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO }; pool_info.queryType = VK_QUERY_TYPE_TIMESTAMP; pool_info.queryCount = 64; Pool pool; table.vkCreateQueryPool(device->get_device(), &pool_info, nullptr, &pool.pool); pool.size = pool_info.queryCount; pool.index = 0; pool.query_results.resize(pool.size); pool.cookies.resize(pool.size); if (device->get_device_features().host_query_reset_features.hostQueryReset) table.vkResetQueryPoolEXT(device->get_device(), pool.pool, 0, pool.size); pools.push_back(move(pool)); } QueryPoolHandle QueryPool::write_timestamp(VkCommandBuffer cmd, VkPipelineStageFlagBits stage) { if (!supports_timestamp) { LOGI("Timestamps are not supported on this implementation.\n"); return {}; } if (pools[pool_index].index >= pools[pool_index].size) pool_index++; if (pool_index >= pools.size()) add_pool(); auto &pool = pools[pool_index]; auto cookie = QueryPoolHandle(device->handle_pool.query.allocate(device, true)); pool.cookies[pool.index] = cookie; if (!device->get_device_features().host_query_reset_features.hostQueryReset) table.vkCmdResetQueryPool(cmd, pool.pool, pool.index, 1); table.vkCmdWriteTimestamp(cmd, stage, pool.pool, pool.index); pool.index++; return cookie; } void QueryPoolResultDeleter::operator()(QueryPoolResult *query) { query->device->handle_pool.query.free(query); } void TimestampInterval::mark_end_of_frame_context() { if (total_time > 0.0) total_frame_iterations++; } uint64_t TimestampInterval::get_total_accumulations() const { return total_accumulations; } uint64_t TimestampInterval::get_total_frame_iterations() const { return total_frame_iterations; } double TimestampInterval::get_total_time() const { return total_time; } void TimestampInterval::accumulate_time(double t) { total_time += t; total_accumulations++; } double TimestampInterval::get_time_per_iteration() const { if (total_frame_iterations) return total_time / double(total_frame_iterations); else return 0.0; } double TimestampInterval::get_time_per_accumulation() const { if (total_accumulations) return total_time / double(total_accumulations); else return 0.0; } const string &TimestampInterval::get_tag() const { return tag; } TimestampInterval::TimestampInterval(string tag_) : tag(move(tag_)) { } TimestampInterval *TimestampIntervalManager::get_timestamp_tag(const char *tag) { Util::Hasher h; h.string(tag); return timestamps.emplace_yield(h.get(), tag); } void TimestampIntervalManager::mark_end_of_frame_context() { for (auto ×tamp : timestamps) timestamp.mark_end_of_frame_context(); } void TimestampIntervalManager::log_simple() { for (auto ×tamp : timestamps) { LOGI("Timestamp tag report: %s\n", timestamp.get_tag().c_str()); if (timestamp.get_total_frame_iterations()) { LOGI(" %.3f ms / iteration\n", 1000.0 * timestamp.get_time_per_accumulation()); LOGI(" %.3f ms / frame context\n", 1000.0 * timestamp.get_time_per_iteration()); LOGI(" %.3f iterations / frame context\n", double(timestamp.get_total_accumulations()) / double(timestamp.get_total_frame_iterations())); } } } }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/query_pool.hpp000066400000000000000000000103651415063341600237550ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include "vulkan_common.hpp" #include "object_pool.hpp" namespace Vulkan { class Device; class PerformanceQueryPool { public: void init_device(Device *device, uint32_t queue_family_index); ~PerformanceQueryPool(); bool init_counters(const std::vector &enable_counter_names); void begin_command_buffer(VkCommandBuffer cmd); void end_command_buffer(VkCommandBuffer cmd); void report(); uint32_t get_num_counters() const; const VkPerformanceCounterKHR *get_available_counters() const; const VkPerformanceCounterDescriptionKHR *get_available_counter_descs() const; private: Device *device = nullptr; uint32_t queue_family_index = 0; VkQueryPool pool = VK_NULL_HANDLE; std::vector results; std::vector counters; std::vector counter_descriptions; std::vector active_indices; }; class QueryPoolResult; struct QueryPoolResultDeleter { void operator()(QueryPoolResult *query); }; class QueryPoolResult : public Util::IntrusivePtrEnabled { public: friend struct QueryPoolResultDeleter; void signal_timestamp_ticks(uint64_t ticks) { timestamp_ticks = ticks; has_timestamp = true; } uint64_t get_timestamp_ticks() const { return timestamp_ticks; } bool is_signalled() const { return has_timestamp; } bool is_device_timebase() const { return device_timebase; } private: friend class Util::ObjectPool; explicit QueryPoolResult(Device *device_, bool device_timebase_) : device(device_), device_timebase(device_timebase_) {} Device *device; uint64_t timestamp_ticks = 0; bool has_timestamp = false; bool device_timebase = false; }; using QueryPoolHandle = Util::IntrusivePtr; class QueryPool { public: explicit QueryPool(Device *device); ~QueryPool(); void begin(); QueryPoolHandle write_timestamp(VkCommandBuffer cmd, VkPipelineStageFlagBits stage); private: Device *device; const VolkDeviceTable &table; struct Pool { VkQueryPool pool = VK_NULL_HANDLE; std::vector query_results; std::vector cookies; unsigned index = 0; unsigned size = 0; }; std::vector pools; unsigned pool_index = 0; void add_pool(); bool supports_timestamp = false; }; class TimestampInterval : public Util::IntrusiveHashMapEnabled { public: explicit TimestampInterval(std::string tag); void accumulate_time(double t); double get_time_per_iteration() const; double get_time_per_accumulation() const; const std::string &get_tag() const; void mark_end_of_frame_context(); double get_total_time() const; uint64_t get_total_frame_iterations() const; uint64_t get_total_accumulations() const; private: std::string tag; double total_time = 0.0; uint64_t total_frame_iterations = 0; uint64_t total_accumulations = 0; }; class TimestampIntervalManager { public: TimestampInterval *get_timestamp_tag(const char *tag); void mark_end_of_frame_context(); void log_simple(); private: Util::IntrusiveHashMap timestamps; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/quirks.hpp000066400000000000000000000037301415063341600230730ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once namespace Vulkan { struct ImplementationQuirks { bool instance_deferred_lights = true; bool merge_subpasses = true; bool use_transient_color = true; bool use_transient_depth_stencil = true; bool clustering_list_iteration = false; bool clustering_force_cpu = false; bool queue_wait_on_submission = false; bool staging_need_device_local = false; bool use_async_compute_post = true; bool render_graph_force_single_queue = false; bool force_no_subgroups = false; bool force_no_subgroup_shuffle = false; bool force_no_subgroup_size_control = false; static ImplementationQuirks &get(); }; struct ImplementationWorkarounds { bool emulate_event_as_pipeline_barrier = false; bool optimize_all_graphics_barrier = false; bool force_store_in_render_pass = false; bool broken_color_write_mask = false; bool split_binary_timeline_semaphores = false; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/render_pass.cpp000066400000000000000000001114711415063341600240570ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "render_pass.hpp" #include "stack_allocator.hpp" #include "device.hpp" #include "quirks.hpp" #include #include using namespace std; using namespace Util; #ifdef GRANITE_VULKAN_MT #define LOCK() std::lock_guard holder__{lock} #else #define LOCK() ((void)0) #endif namespace Vulkan { void RenderPass::setup_subpasses(const VkRenderPassCreateInfo &create_info) { auto *attachments = create_info.pAttachments; // Store the important subpass information for later. for (uint32_t i = 0; i < create_info.subpassCount; i++) { auto &subpass = create_info.pSubpasses[i]; SubpassInfo subpass_info = {}; subpass_info.num_color_attachments = subpass.colorAttachmentCount; subpass_info.num_input_attachments = subpass.inputAttachmentCount; subpass_info.depth_stencil_attachment = *subpass.pDepthStencilAttachment; memcpy(subpass_info.color_attachments, subpass.pColorAttachments, subpass.colorAttachmentCount * sizeof(*subpass.pColorAttachments)); memcpy(subpass_info.input_attachments, subpass.pInputAttachments, subpass.inputAttachmentCount * sizeof(*subpass.pInputAttachments)); unsigned samples = 0; for (unsigned att = 0; att < subpass_info.num_color_attachments; att++) { if (subpass_info.color_attachments[att].attachment == VK_ATTACHMENT_UNUSED) continue; unsigned samp = attachments[subpass_info.color_attachments[att].attachment].samples; if (samples && (samp != samples)) VK_ASSERT(samp == samples); samples = samp; } if (subpass_info.depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) { unsigned samp = attachments[subpass_info.depth_stencil_attachment.attachment].samples; if (samples && (samp != samples)) VK_ASSERT(samp == samples); samples = samp; } VK_ASSERT(samples > 0); subpass_info.samples = samples; subpasses_info.push_back(subpass_info); } } RenderPass::RenderPass(Hash hash, Device *device_, const VkRenderPassCreateInfo &create_info) : IntrusiveHashMapEnabled(hash) , device(device_) { auto &table = device->get_device_table(); unsigned num_color_attachments = 0; if (create_info.attachmentCount > 0) { auto &att = create_info.pAttachments[create_info.attachmentCount - 1]; if (format_has_depth_or_stencil_aspect(att.format)) { depth_stencil = att.format; num_color_attachments = create_info.attachmentCount - 1; } else num_color_attachments = create_info.attachmentCount; } for (unsigned i = 0; i < num_color_attachments; i++) color_attachments[i] = create_info.pAttachments[i].format; // Store the important subpass information for later. setup_subpasses(create_info); // Fixup after, we want the Fossilize render pass to be generic. auto info = create_info; VkAttachmentDescription fixup_attachments[VULKAN_NUM_ATTACHMENTS + 1]; fixup_render_pass_workaround(info, fixup_attachments); #ifdef VULKAN_DEBUG LOGI("Creating render pass.\n"); #endif if (table.vkCreateRenderPass(device->get_device(), &info, nullptr, &render_pass) != VK_SUCCESS) LOGE("Failed to create render pass."); #ifdef GRANITE_VULKAN_FOSSILIZE device->register_render_pass(render_pass, get_hash(), create_info); #endif } RenderPass::RenderPass(Hash hash, Device *device_, const RenderPassInfo &info) : IntrusiveHashMapEnabled(hash) , device(device_) { fill(begin(color_attachments), end(color_attachments), VK_FORMAT_UNDEFINED); VK_ASSERT(info.num_color_attachments || info.depth_stencil); // Want to make load/store to transient a very explicit thing to do, since it will kill performance. bool enable_transient_store = (info.op_flags & RENDER_PASS_OP_ENABLE_TRANSIENT_STORE_BIT) != 0; bool enable_transient_load = (info.op_flags & RENDER_PASS_OP_ENABLE_TRANSIENT_LOAD_BIT) != 0; bool multiview = info.num_layers > 1; // Set up default subpass info structure if we don't have it. auto *subpass_infos = info.subpasses; unsigned num_subpasses = info.num_subpasses; RenderPassInfo::Subpass default_subpass_info; if (!info.subpasses) { default_subpass_info.num_color_attachments = info.num_color_attachments; if (info.op_flags & RENDER_PASS_OP_DEPTH_STENCIL_READ_ONLY_BIT) default_subpass_info.depth_stencil_mode = RenderPassInfo::DepthStencil::ReadOnly; else default_subpass_info.depth_stencil_mode = RenderPassInfo::DepthStencil::ReadWrite; for (unsigned i = 0; i < info.num_color_attachments; i++) default_subpass_info.color_attachments[i] = i; num_subpasses = 1; subpass_infos = &default_subpass_info; } // First, set up attachment descriptions. const unsigned num_attachments = info.num_color_attachments + (info.depth_stencil ? 1 : 0); VkAttachmentDescription attachments[VULKAN_NUM_ATTACHMENTS + 1]; uint32_t implicit_transitions = 0; uint32_t implicit_bottom_of_pipe = 0; VkAttachmentLoadOp ds_load_op = VK_ATTACHMENT_LOAD_OP_DONT_CARE; VkAttachmentStoreOp ds_store_op = VK_ATTACHMENT_STORE_OP_DONT_CARE; VK_ASSERT(!(info.clear_attachments & info.load_attachments)); const auto color_load_op = [&info](unsigned index) -> VkAttachmentLoadOp { if ((info.clear_attachments & (1u << index)) != 0) return VK_ATTACHMENT_LOAD_OP_CLEAR; else if ((info.load_attachments & (1u << index)) != 0) return VK_ATTACHMENT_LOAD_OP_LOAD; else return VK_ATTACHMENT_LOAD_OP_DONT_CARE; }; const auto color_store_op = [&info](unsigned index) -> VkAttachmentStoreOp { if ((info.store_attachments & (1u << index)) != 0) return VK_ATTACHMENT_STORE_OP_STORE; else return VK_ATTACHMENT_STORE_OP_DONT_CARE; }; if (info.op_flags & RENDER_PASS_OP_CLEAR_DEPTH_STENCIL_BIT) ds_load_op = VK_ATTACHMENT_LOAD_OP_CLEAR; else if (info.op_flags & RENDER_PASS_OP_LOAD_DEPTH_STENCIL_BIT) ds_load_op = VK_ATTACHMENT_LOAD_OP_LOAD; if (info.op_flags & RENDER_PASS_OP_STORE_DEPTH_STENCIL_BIT) ds_store_op = VK_ATTACHMENT_STORE_OP_STORE; bool ds_read_only = (info.op_flags & RENDER_PASS_OP_DEPTH_STENCIL_READ_ONLY_BIT) != 0; VkImageLayout depth_stencil_layout = VK_IMAGE_LAYOUT_UNDEFINED; if (info.depth_stencil) { depth_stencil_layout = info.depth_stencil->get_image().get_layout( ds_read_only ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL : VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); } for (unsigned i = 0; i < info.num_color_attachments; i++) { VK_ASSERT(info.color_attachments[i]); color_attachments[i] = info.color_attachments[i]->get_format(); auto &image = info.color_attachments[i]->get_image(); auto &att = attachments[i]; att.flags = 0; att.format = color_attachments[i]; att.samples = image.get_create_info().samples; att.loadOp = color_load_op(i); att.storeOp = color_store_op(i); att.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; att.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; // Undefined final layout here for now means that we will just use the layout of the last // subpass which uses this attachment to avoid any dummy transition at the end. att.finalLayout = VK_IMAGE_LAYOUT_UNDEFINED; if (image.get_create_info().domain == ImageDomain::Transient) { if (enable_transient_load) { // The transient will behave like a normal image. att.initialLayout = info.color_attachments[i]->get_image().get_layout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); } else { // Force a clean discard. VK_ASSERT(att.loadOp != VK_ATTACHMENT_LOAD_OP_LOAD); att.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; } if (!enable_transient_store) att.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; implicit_transitions |= 1u << i; } else if (image.is_swapchain_image()) { if (att.loadOp == VK_ATTACHMENT_LOAD_OP_LOAD) att.initialLayout = image.get_swapchain_layout(); else att.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; att.finalLayout = image.get_swapchain_layout(); // If we transition from PRESENT_SRC_KHR, this came from an implicit external subpass dependency // which happens in BOTTOM_OF_PIPE. To properly transition away from it, we must wait for BOTTOM_OF_PIPE, // without any memory barriers, since memory has been made available in the implicit barrier. if (att.loadOp == VK_ATTACHMENT_LOAD_OP_LOAD) implicit_bottom_of_pipe |= 1u << i; implicit_transitions |= 1u << i; } else att.initialLayout = info.color_attachments[i]->get_image().get_layout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); } depth_stencil = info.depth_stencil ? info.depth_stencil->get_format() : VK_FORMAT_UNDEFINED; if (info.depth_stencil) { auto &image = info.depth_stencil->get_image(); auto &att = attachments[info.num_color_attachments]; att.flags = 0; att.format = depth_stencil; att.samples = image.get_create_info().samples; att.loadOp = ds_load_op; att.storeOp = ds_store_op; // Undefined final layout here for now means that we will just use the layout of the last // subpass which uses this attachment to avoid any dummy transition at the end. att.finalLayout = VK_IMAGE_LAYOUT_UNDEFINED; if (format_to_aspect_mask(depth_stencil) & VK_IMAGE_ASPECT_STENCIL_BIT) { att.stencilLoadOp = ds_load_op; att.stencilStoreOp = ds_store_op; } else { att.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; att.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; } if (image.get_create_info().domain == ImageDomain::Transient) { if (enable_transient_load) { // The transient will behave like a normal image. att.initialLayout = depth_stencil_layout; } else { if (att.loadOp == VK_ATTACHMENT_LOAD_OP_LOAD) att.loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; if (att.stencilLoadOp == VK_ATTACHMENT_LOAD_OP_LOAD) att.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE; // For transient attachments we force the layouts. att.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED; } if (!enable_transient_store) { att.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; att.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE; } implicit_transitions |= 1u << info.num_color_attachments; } else att.initialLayout = depth_stencil_layout; } Util::StackAllocator reference_allocator; Util::StackAllocator preserve_allocator; vector subpasses(num_subpasses); vector external_dependencies; for (unsigned i = 0; i < num_subpasses; i++) { auto *colors = reference_allocator.allocate_cleared(subpass_infos[i].num_color_attachments); auto *inputs = reference_allocator.allocate_cleared(subpass_infos[i].num_input_attachments); auto *resolves = reference_allocator.allocate_cleared(subpass_infos[i].num_color_attachments); auto *depth = reference_allocator.allocate_cleared(1); auto &subpass = subpasses[i]; subpass.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS; subpass.colorAttachmentCount = subpass_infos[i].num_color_attachments; subpass.pColorAttachments = colors; subpass.inputAttachmentCount = subpass_infos[i].num_input_attachments; subpass.pInputAttachments = inputs; subpass.pDepthStencilAttachment = depth; if (subpass_infos[i].num_resolve_attachments) { VK_ASSERT(subpass_infos[i].num_color_attachments == subpass_infos[i].num_resolve_attachments); subpass.pResolveAttachments = resolves; } for (unsigned j = 0; j < subpass.colorAttachmentCount; j++) { auto att = subpass_infos[i].color_attachments[j]; VK_ASSERT(att == VK_ATTACHMENT_UNUSED || (att < num_attachments)); colors[j].attachment = att; // Fill in later. colors[j].layout = VK_IMAGE_LAYOUT_UNDEFINED; } for (unsigned j = 0; j < subpass.inputAttachmentCount; j++) { auto att = subpass_infos[i].input_attachments[j]; VK_ASSERT(att == VK_ATTACHMENT_UNUSED || (att < num_attachments)); inputs[j].attachment = att; // Fill in later. inputs[j].layout = VK_IMAGE_LAYOUT_UNDEFINED; } if (subpass.pResolveAttachments) { for (unsigned j = 0; j < subpass.colorAttachmentCount; j++) { auto att = subpass_infos[i].resolve_attachments[j]; VK_ASSERT(att == VK_ATTACHMENT_UNUSED || (att < num_attachments)); resolves[j].attachment = att; // Fill in later. resolves[j].layout = VK_IMAGE_LAYOUT_UNDEFINED; } } if (info.depth_stencil && subpass_infos[i].depth_stencil_mode != RenderPassInfo::DepthStencil::None) { depth->attachment = info.num_color_attachments; // Fill in later. depth->layout = VK_IMAGE_LAYOUT_UNDEFINED; } else { depth->attachment = VK_ATTACHMENT_UNUSED; depth->layout = VK_IMAGE_LAYOUT_UNDEFINED; } } const auto find_color = [&](unsigned subpass, unsigned attachment) -> VkAttachmentReference * { auto *colors = subpasses[subpass].pColorAttachments; for (unsigned i = 0; i < subpasses[subpass].colorAttachmentCount; i++) if (colors[i].attachment == attachment) return const_cast(&colors[i]); return nullptr; }; const auto find_resolve = [&](unsigned subpass, unsigned attachment) -> VkAttachmentReference * { if (!subpasses[subpass].pResolveAttachments) return nullptr; auto *resolves = subpasses[subpass].pResolveAttachments; for (unsigned i = 0; i < subpasses[subpass].colorAttachmentCount; i++) if (resolves[i].attachment == attachment) return const_cast(&resolves[i]); return nullptr; }; const auto find_input = [&](unsigned subpass, unsigned attachment) -> VkAttachmentReference * { auto *inputs = subpasses[subpass].pInputAttachments; for (unsigned i = 0; i < subpasses[subpass].inputAttachmentCount; i++) if (inputs[i].attachment == attachment) return const_cast(&inputs[i]); return nullptr; }; const auto find_depth_stencil = [&](unsigned subpass, unsigned attachment) -> VkAttachmentReference * { if (subpasses[subpass].pDepthStencilAttachment->attachment == attachment) return const_cast(subpasses[subpass].pDepthStencilAttachment); else return nullptr; }; // Now, figure out how each attachment is used throughout the subpasses. // Either we don't care (inherit previous pass), or we need something specific. // Start with initial layouts. uint32_t preserve_masks[VULKAN_NUM_ATTACHMENTS + 1] = {}; // Last subpass which makes use of an attachment. unsigned last_subpass_for_attachment[VULKAN_NUM_ATTACHMENTS + 1] = {}; VK_ASSERT(num_subpasses <= 32); // 1 << subpass bit set if there are color attachment self-dependencies in the subpass. uint32_t color_self_dependencies = 0; // 1 << subpass bit set if there are depth-stencil attachment self-dependencies in the subpass. uint32_t depth_self_dependencies = 0; // 1 << subpass bit set if any input attachment is read in the subpass. uint32_t input_attachment_read = 0; uint32_t color_attachment_read_write = 0; uint32_t depth_stencil_attachment_write = 0; uint32_t depth_stencil_attachment_read = 0; uint32_t external_color_dependencies = 0; uint32_t external_depth_dependencies = 0; uint32_t external_input_dependencies = 0; uint32_t external_bottom_of_pipe_dependencies = 0; for (unsigned attachment = 0; attachment < num_attachments; attachment++) { bool used = false; auto current_layout = attachments[attachment].initialLayout; for (unsigned subpass = 0; subpass < num_subpasses; subpass++) { auto *color = find_color(subpass, attachment); auto *resolve = find_resolve(subpass, attachment); auto *input = find_input(subpass, attachment); auto *depth = find_depth_stencil(subpass, attachment); // Sanity check. if (color || resolve) VK_ASSERT(!depth); if (depth) VK_ASSERT(!color && !resolve); if (resolve) VK_ASSERT(!color && !depth); if (!color && !input && !depth && !resolve) { if (used) preserve_masks[attachment] |= 1u << subpass; continue; } if (!used && (implicit_transitions & (1u << attachment))) { // This is the first subpass we need implicit transitions. if (color) external_color_dependencies |= 1u << subpass; if (depth) external_depth_dependencies |= 1u << subpass; if (input) external_input_dependencies |= 1u << subpass; } if (!used && (implicit_bottom_of_pipe & (1u << attachment))) external_bottom_of_pipe_dependencies |= 1u << subpass; if (resolve && input) // If used as both resolve attachment and input attachment in same subpass, need GENERAL. { current_layout = VK_IMAGE_LAYOUT_GENERAL; resolve->layout = current_layout; input->layout = current_layout; // If the attachment is first used as a feedback attachment, the initial layout should actually be GENERAL. if (!used && attachments[attachment].initialLayout != VK_IMAGE_LAYOUT_UNDEFINED) attachments[attachment].initialLayout = current_layout; // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) { external_color_dependencies |= 1u << subpass; external_input_dependencies |= 1u << subpass; } used = true; last_subpass_for_attachment[attachment] = subpass; color_attachment_read_write |= 1u << subpass; input_attachment_read |= 1u << subpass; } else if (resolve) { if (current_layout != VK_IMAGE_LAYOUT_GENERAL) current_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) external_color_dependencies |= 1u << subpass; resolve->layout = current_layout; used = true; last_subpass_for_attachment[attachment] = subpass; color_attachment_read_write |= 1u << subpass; } else if (color && input) // If used as both input attachment and color attachment in same subpass, need GENERAL. { current_layout = VK_IMAGE_LAYOUT_GENERAL; color->layout = current_layout; input->layout = current_layout; // If the attachment is first used as a feedback attachment, the initial layout should actually be GENERAL. if (!used && attachments[attachment].initialLayout != VK_IMAGE_LAYOUT_UNDEFINED) attachments[attachment].initialLayout = current_layout; // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) { external_color_dependencies |= 1u << subpass; external_input_dependencies |= 1u << subpass; } used = true; last_subpass_for_attachment[attachment] = subpass; color_self_dependencies |= 1u << subpass; color_attachment_read_write |= 1u << subpass; input_attachment_read |= 1u << subpass; } else if (color) // No particular preference { if (current_layout != VK_IMAGE_LAYOUT_GENERAL) current_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; color->layout = current_layout; // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) external_color_dependencies |= 1u << subpass; used = true; last_subpass_for_attachment[attachment] = subpass; color_attachment_read_write |= 1u << subpass; } else if (depth && input) // Depends on the depth mode { VK_ASSERT(subpass_infos[subpass].depth_stencil_mode != RenderPassInfo::DepthStencil::None); if (subpass_infos[subpass].depth_stencil_mode == RenderPassInfo::DepthStencil::ReadWrite) { depth_self_dependencies |= 1u << subpass; current_layout = VK_IMAGE_LAYOUT_GENERAL; depth_stencil_attachment_write |= 1u << subpass; // If the attachment is first used as a feedback attachment, the initial layout should actually be GENERAL. if (!used && attachments[attachment].initialLayout != VK_IMAGE_LAYOUT_UNDEFINED) attachments[attachment].initialLayout = current_layout; } else { if (current_layout != VK_IMAGE_LAYOUT_GENERAL) current_layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL; } // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) { external_input_dependencies |= 1u << subpass; external_depth_dependencies |= 1u << subpass; } depth_stencil_attachment_read |= 1u << subpass; input_attachment_read |= 1u << subpass; depth->layout = current_layout; input->layout = current_layout; used = true; last_subpass_for_attachment[attachment] = subpass; } else if (depth) { if (subpass_infos[subpass].depth_stencil_mode == RenderPassInfo::DepthStencil::ReadWrite) { depth_stencil_attachment_write |= 1u << subpass; if (current_layout != VK_IMAGE_LAYOUT_GENERAL) current_layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL; } else { if (current_layout != VK_IMAGE_LAYOUT_GENERAL) current_layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL; } // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) external_depth_dependencies |= 1u << subpass; depth_stencil_attachment_read |= 1u << subpass; depth->layout = current_layout; used = true; last_subpass_for_attachment[attachment] = subpass; } else if (input) { if (current_layout != VK_IMAGE_LAYOUT_GENERAL) current_layout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL; // If the attachment is first used as an input attachment, the initial layout should actually be // SHADER_READ_ONLY_OPTIMAL. if (!used && attachments[attachment].initialLayout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) attachments[attachment].initialLayout = current_layout; // If first subpass changes the layout, we'll need to inject an external subpass dependency. if (!used && attachments[attachment].initialLayout != current_layout) external_input_dependencies |= 1u << subpass; input->layout = current_layout; used = true; last_subpass_for_attachment[attachment] = subpass; } else { VK_ASSERT(0 && "Unhandled attachment usage."); } } // If we don't have a specific layout we need to end up in, just // use the last one. // Assert that we actually use all the attachments we have ... VK_ASSERT(used); if (attachments[attachment].finalLayout == VK_IMAGE_LAYOUT_UNDEFINED) { VK_ASSERT(current_layout != VK_IMAGE_LAYOUT_UNDEFINED); attachments[attachment].finalLayout = current_layout; } } // Only consider preserve masks before last subpass which uses an attachment. for (unsigned attachment = 0; attachment < num_attachments; attachment++) preserve_masks[attachment] &= (1u << last_subpass_for_attachment[attachment]) - 1; // Add preserve attachments as needed. for (unsigned subpass = 0; subpass < num_subpasses; subpass++) { auto &pass = subpasses[subpass]; unsigned preserve_count = 0; for (unsigned attachment = 0; attachment < num_attachments; attachment++) if (preserve_masks[attachment] & (1u << subpass)) preserve_count++; auto *preserve = preserve_allocator.allocate_cleared(preserve_count); pass.pPreserveAttachments = preserve; pass.preserveAttachmentCount = preserve_count; for (unsigned attachment = 0; attachment < num_attachments; attachment++) if (preserve_masks[attachment] & (1u << subpass)) *preserve++ = attachment; } VK_ASSERT(num_subpasses > 0); VkRenderPassCreateInfo rp_info = { VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO }; rp_info.subpassCount = num_subpasses; rp_info.pSubpasses = subpasses.data(); rp_info.pAttachments = attachments; rp_info.attachmentCount = num_attachments; // Add external subpass dependencies. for_each_bit(external_color_dependencies | external_depth_dependencies | external_input_dependencies, [&](unsigned subpass) { external_dependencies.emplace_back(); auto &dep = external_dependencies.back(); dep.srcSubpass = VK_SUBPASS_EXTERNAL; dep.dstSubpass = subpass; if (external_bottom_of_pipe_dependencies & (1u << subpass)) dep.srcStageMask |= VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT; if (external_color_dependencies & (1u << subpass)) { dep.srcStageMask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dep.dstStageMask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dep.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; dep.dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; } if (external_depth_dependencies & (1u << subpass)) { dep.srcStageMask |= VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.dstStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; dep.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; } if (external_input_dependencies & (1u << subpass)) { dep.srcStageMask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.dstStageMask |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; dep.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; dep.dstAccessMask |= VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; } }); // Queue up self-dependencies (COLOR | DEPTH) -> INPUT. for_each_bit(color_self_dependencies | depth_self_dependencies, [&](unsigned subpass) { external_dependencies.emplace_back(); auto &dep = external_dependencies.back(); dep.srcSubpass = subpass; dep.dstSubpass = subpass; dep.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; if (multiview) dep.dependencyFlags |= VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR; if (color_self_dependencies & (1u << subpass)) { dep.srcStageMask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dep.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; } if (depth_self_dependencies & (1u << subpass)) { dep.srcStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; } dep.dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; dep.dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; }); // Flush and invalidate caches between each subpass. for (unsigned subpass = 1; subpass < num_subpasses; subpass++) { external_dependencies.emplace_back(); auto &dep = external_dependencies.back(); dep.srcSubpass = subpass - 1; dep.dstSubpass = subpass; dep.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT; if (multiview) dep.dependencyFlags |= VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR; if (color_attachment_read_write & (1u << (subpass - 1))) { dep.srcStageMask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dep.srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; } if (depth_stencil_attachment_write & (1u << (subpass - 1))) { dep.srcStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; } if (color_attachment_read_write & (1u << subpass)) { dep.dstStageMask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; dep.dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT; } if (depth_stencil_attachment_read & (1u << subpass)) { dep.dstStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; } if (depth_stencil_attachment_write & (1u << subpass)) { dep.dstStageMask |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; dep.dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; } if (input_attachment_read & (1u << subpass)) { dep.dstStageMask |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; dep.dstAccessMask |= VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; } } if (!external_dependencies.empty()) { rp_info.dependencyCount = external_dependencies.size(); rp_info.pDependencies = external_dependencies.data(); } // Store the important subpass information for later. setup_subpasses(rp_info); VkRenderPassMultiviewCreateInfoKHR multiview_info = { VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR }; vector multiview_view_mask; if (multiview && device->get_device_features().multiview_features.multiview) { multiview_view_mask.resize(num_subpasses); multiview_info.subpassCount = num_subpasses; for (auto &mask : multiview_view_mask) mask = ((1u << info.num_layers) - 1u) << info.base_layer; multiview_info.pViewMasks = multiview_view_mask.data(); rp_info.pNext = &multiview_info; } else if (multiview) LOGE("Multiview not supported. Predending render pass is not multiview."); // Fixup after, we want the Fossilize render pass to be generic. VkAttachmentDescription fixup_attachments[VULKAN_NUM_ATTACHMENTS + 1]; fixup_render_pass_workaround(rp_info, fixup_attachments); #ifdef VULKAN_DEBUG LOGI("Creating render pass.\n"); #endif auto &table = device->get_device_table(); if (table.vkCreateRenderPass(device->get_device(), &rp_info, nullptr, &render_pass) != VK_SUCCESS) LOGE("Failed to create render pass."); #ifdef GRANITE_VULKAN_FOSSILIZE device->register_render_pass(render_pass, get_hash(), rp_info); #endif } void RenderPass::fixup_render_pass_workaround(VkRenderPassCreateInfo &create_info, VkAttachmentDescription *attachments) { if (device->get_workarounds().force_store_in_render_pass) { // Workaround a bug on NV where depth-stencil input attachments break if we have STORE_OP_DONT_CARE. // Force STORE_OP_STORE for all attachments. if (attachments != create_info.pAttachments) { memcpy(attachments, create_info.pAttachments, create_info.attachmentCount * sizeof(attachments[0])); create_info.pAttachments = attachments; } for (uint32_t i = 0; i < create_info.attachmentCount; i++) { VkFormat format = attachments[i].format; auto aspect = format_to_aspect_mask(format); if ((aspect & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT)) != 0) attachments[i].storeOp = VK_ATTACHMENT_STORE_OP_STORE; if ((aspect & VK_IMAGE_ASPECT_STENCIL_BIT) != 0) attachments[i].stencilStoreOp = VK_ATTACHMENT_STORE_OP_STORE; } } } RenderPass::~RenderPass() { auto &table = device->get_device_table(); if (render_pass != VK_NULL_HANDLE) table.vkDestroyRenderPass(device->get_device(), render_pass, nullptr); } unsigned Framebuffer::setup_raw_views(VkImageView *views, const RenderPassInfo &info) { unsigned num_views = 0; for (unsigned i = 0; i < info.num_color_attachments; i++) { VK_ASSERT(info.color_attachments[i]); // For multiview, we use view indices to pick right layers. if (info.num_layers > 1) views[num_views++] = info.color_attachments[i]->get_view(); else views[num_views++] = info.color_attachments[i]->get_render_target_view(info.base_layer); } if (info.depth_stencil) { // For multiview, we use view indices to pick right layers. if (info.num_layers > 1) views[num_views++] = info.depth_stencil->get_view(); else views[num_views++] = info.depth_stencil->get_render_target_view(info.base_layer); } return num_views; } static const ImageView *get_image_view(const RenderPassInfo &info, unsigned index) { if (index < info.num_color_attachments) return info.color_attachments[index]; else return info.depth_stencil; } void Framebuffer::compute_attachment_dimensions(const RenderPassInfo &info, unsigned index, uint32_t &width, uint32_t &height) { auto *view = get_image_view(info, index); VK_ASSERT(view); unsigned lod = view->get_create_info().base_level; width = view->get_image().get_width(lod); height = view->get_image().get_height(lod); } void Framebuffer::compute_dimensions(const RenderPassInfo &info, uint32_t &width, uint32_t &height) { width = UINT32_MAX; height = UINT32_MAX; VK_ASSERT(info.num_color_attachments || info.depth_stencil); for (unsigned i = 0; i < info.num_color_attachments; i++) { VK_ASSERT(info.color_attachments[i]); unsigned lod = info.color_attachments[i]->get_create_info().base_level; width = min(width, info.color_attachments[i]->get_image().get_width(lod)); height = min(height, info.color_attachments[i]->get_image().get_height(lod)); } if (info.depth_stencil) { unsigned lod = info.depth_stencil->get_create_info().base_level; width = min(width, info.depth_stencil->get_image().get_width(lod)); height = min(height, info.depth_stencil->get_image().get_height(lod)); } } Framebuffer::Framebuffer(Device *device_, const RenderPass &rp, const RenderPassInfo &info_) : Cookie(device_) , device(device_) , render_pass(rp) , info(info_) { compute_dimensions(info_, width, height); VkImageView views[VULKAN_NUM_ATTACHMENTS + 1]; unsigned num_views = 0; num_views = setup_raw_views(views, info_); VkFramebufferCreateInfo fb_info = { VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO }; fb_info.renderPass = rp.get_render_pass(); fb_info.attachmentCount = num_views; fb_info.pAttachments = views; fb_info.width = width; fb_info.height = height; fb_info.layers = 1; // For multiview, layers must be 1. The render pass encodes a mask. auto &table = device->get_device_table(); if (table.vkCreateFramebuffer(device->get_device(), &fb_info, nullptr, &framebuffer) != VK_SUCCESS) LOGE("Failed to create framebuffer."); } Framebuffer::~Framebuffer() { if (framebuffer != VK_NULL_HANDLE) { if (internal_sync) device->destroy_framebuffer_nolock(framebuffer); else device->destroy_framebuffer(framebuffer); } } FramebufferAllocator::FramebufferAllocator(Device *device_) : device(device_) { } void FramebufferAllocator::clear() { framebuffers.clear(); } void FramebufferAllocator::begin_frame() { framebuffers.begin_frame(); } Framebuffer &FramebufferAllocator::request_framebuffer(const RenderPassInfo &info) { auto &rp = device->request_render_pass(info, true); Hasher h; h.u64(rp.get_hash()); for (unsigned i = 0; i < info.num_color_attachments; i++) { VK_ASSERT(info.color_attachments[i]); h.u64(info.color_attachments[i]->get_cookie()); } if (info.depth_stencil) h.u64(info.depth_stencil->get_cookie()); // For multiview we bind the whole attachment, and base layer is encoded in the render pass. if (info.num_layers > 1) h.u32(0); else h.u32(info.base_layer); auto hash = h.get(); LOCK(); auto *node = framebuffers.request(hash); if (node) return *node; return *framebuffers.emplace(hash, device, rp, info); } void TransientAttachmentAllocator::clear() { attachments.clear(); } void TransientAttachmentAllocator::begin_frame() { attachments.begin_frame(); } ImageHandle TransientAttachmentAllocator::request_attachment(unsigned width, unsigned height, VkFormat format, unsigned index, unsigned samples, unsigned layers) { Hasher h; h.u32(width); h.u32(height); h.u32(format); h.u32(index); h.u32(samples); h.u32(layers); auto hash = h.get(); LOCK(); auto *node = attachments.request(hash); if (node) return node->handle; auto image_info = ImageCreateInfo::transient_render_target(width, height, format); image_info.samples = static_cast(samples); image_info.layers = layers; node = attachments.emplace(hash, device->create_image(image_info, nullptr)); node->handle->set_internal_sync_object(); node->handle->get_view().set_internal_sync_object(); device->set_name(*node->handle, "AttachmentAllocator"); return node->handle; } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/render_pass.hpp000066400000000000000000000174051415063341600240660ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "cookie.hpp" #include "hash.hpp" #include "image.hpp" #include "intrusive.hpp" #include "limits.hpp" #include "object_pool.hpp" #include "temporary_hashmap.hpp" #include "vulkan_headers.hpp" namespace Vulkan { enum RenderPassOp { RENDER_PASS_OP_CLEAR_DEPTH_STENCIL_BIT = 1 << 0, RENDER_PASS_OP_LOAD_DEPTH_STENCIL_BIT = 1 << 1, RENDER_PASS_OP_STORE_DEPTH_STENCIL_BIT = 1 << 2, RENDER_PASS_OP_DEPTH_STENCIL_READ_ONLY_BIT = 1 << 3, RENDER_PASS_OP_ENABLE_TRANSIENT_STORE_BIT = 1 << 4, RENDER_PASS_OP_ENABLE_TRANSIENT_LOAD_BIT = 1 << 5 }; using RenderPassOpFlags = uint32_t; class ImageView; struct RenderPassInfo { const ImageView *color_attachments[VULKAN_NUM_ATTACHMENTS]; const ImageView *depth_stencil = nullptr; unsigned num_color_attachments = 0; RenderPassOpFlags op_flags = 0; uint32_t clear_attachments = 0; uint32_t load_attachments = 0; uint32_t store_attachments = 0; uint32_t base_layer = 0; uint32_t num_layers = 1; // Render area will be clipped to the actual framebuffer. VkRect2D render_area = { { 0, 0 }, { UINT32_MAX, UINT32_MAX } }; VkClearColorValue clear_color[VULKAN_NUM_ATTACHMENTS] = {}; VkClearDepthStencilValue clear_depth_stencil = { 1.0f, 0 }; enum class DepthStencil { None, ReadOnly, ReadWrite }; struct Subpass { uint32_t color_attachments[VULKAN_NUM_ATTACHMENTS]; uint32_t input_attachments[VULKAN_NUM_ATTACHMENTS]; uint32_t resolve_attachments[VULKAN_NUM_ATTACHMENTS]; unsigned num_color_attachments = 0; unsigned num_input_attachments = 0; unsigned num_resolve_attachments = 0; DepthStencil depth_stencil_mode = DepthStencil::ReadWrite; }; // If 0/nullptr, assume a default subpass. const Subpass *subpasses = nullptr; unsigned num_subpasses = 0; }; class RenderPass : public HashedObject, public NoCopyNoMove { public: struct SubpassInfo { VkAttachmentReference color_attachments[VULKAN_NUM_ATTACHMENTS]; unsigned num_color_attachments; VkAttachmentReference input_attachments[VULKAN_NUM_ATTACHMENTS]; unsigned num_input_attachments; VkAttachmentReference depth_stencil_attachment; unsigned samples; }; RenderPass(Util::Hash hash, Device *device, const RenderPassInfo &info); RenderPass(Util::Hash hash, Device *device, const VkRenderPassCreateInfo &create_info); ~RenderPass(); unsigned get_num_subpasses() const { return unsigned(subpasses_info.size()); } VkRenderPass get_render_pass() const { return render_pass; } uint32_t get_sample_count(unsigned subpass) const { VK_ASSERT(subpass < subpasses_info.size()); return subpasses_info[subpass].samples; } unsigned get_num_color_attachments(unsigned subpass) const { VK_ASSERT(subpass < subpasses_info.size()); return subpasses_info[subpass].num_color_attachments; } unsigned get_num_input_attachments(unsigned subpass) const { VK_ASSERT(subpass < subpasses_info.size()); return subpasses_info[subpass].num_input_attachments; } const VkAttachmentReference &get_color_attachment(unsigned subpass, unsigned index) const { VK_ASSERT(subpass < subpasses_info.size()); VK_ASSERT(index < subpasses_info[subpass].num_color_attachments); return subpasses_info[subpass].color_attachments[index]; } const VkAttachmentReference &get_input_attachment(unsigned subpass, unsigned index) const { VK_ASSERT(subpass < subpasses_info.size()); VK_ASSERT(index < subpasses_info[subpass].num_input_attachments); return subpasses_info[subpass].input_attachments[index]; } bool has_depth(unsigned subpass) const { VK_ASSERT(subpass < subpasses_info.size()); return subpasses_info[subpass].depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED && format_has_depth_aspect(depth_stencil); } bool has_stencil(unsigned subpass) const { VK_ASSERT(subpass < subpasses_info.size()); return subpasses_info[subpass].depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED && format_has_stencil_aspect(depth_stencil); } private: Device *device; VkRenderPass render_pass = VK_NULL_HANDLE; VkFormat color_attachments[VULKAN_NUM_ATTACHMENTS] = {}; VkFormat depth_stencil = VK_FORMAT_UNDEFINED; std::vector subpasses_info; void setup_subpasses(const VkRenderPassCreateInfo &create_info); void fixup_render_pass_workaround(VkRenderPassCreateInfo &create_info, VkAttachmentDescription *attachments); }; class Framebuffer : public Cookie, public NoCopyNoMove, public InternalSyncEnabled { public: Framebuffer(Device *device, const RenderPass &rp, const RenderPassInfo &info); ~Framebuffer(); VkFramebuffer get_framebuffer() const { return framebuffer; } static unsigned setup_raw_views(VkImageView *views, const RenderPassInfo &info); static void compute_dimensions(const RenderPassInfo &info, uint32_t &width, uint32_t &height); static void compute_attachment_dimensions(const RenderPassInfo &info, unsigned index, uint32_t &width, uint32_t &height); uint32_t get_width() const { return width; } uint32_t get_height() const { return height; } const RenderPass &get_compatible_render_pass() const { return render_pass; } private: Device *device; VkFramebuffer framebuffer = VK_NULL_HANDLE; const RenderPass &render_pass; RenderPassInfo info; uint32_t width = 0; uint32_t height = 0; }; static const unsigned VULKAN_FRAMEBUFFER_RING_SIZE = 8; class FramebufferAllocator { public: explicit FramebufferAllocator(Device *device); Framebuffer &request_framebuffer(const RenderPassInfo &info); void begin_frame(); void clear(); private: struct FramebufferNode : Util::TemporaryHashmapEnabled, Util::IntrusiveListEnabled, Framebuffer { FramebufferNode(Device *device_, const RenderPass &rp, const RenderPassInfo &info_) : Framebuffer(device_, rp, info_) { set_internal_sync_object(); } }; Device *device; Util::TemporaryHashmap framebuffers; #ifdef GRANITE_VULKAN_MT std::mutex lock; #endif }; class TransientAttachmentAllocator { public: TransientAttachmentAllocator(Device *device_) : device(device_) { } ImageHandle request_attachment(unsigned width, unsigned height, VkFormat format, unsigned index = 0, unsigned samples = 1, unsigned layers = 1); void begin_frame(); void clear(); private: struct TransientNode : Util::TemporaryHashmapEnabled, Util::IntrusiveListEnabled { explicit TransientNode(ImageHandle handle_) : handle(std::move(handle_)) { } ImageHandle handle; }; Device *device; Util::TemporaryHashmap attachments; #ifdef GRANITE_VULKAN_MT std::mutex lock; #endif }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/renderdoc_capture.cpp000066400000000000000000000066231415063341600252440ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "device.hpp" #include "renderdoc_app.h" #include #ifdef _WIN32 #define WIN32_LEAN_AND_MEAN #include #else #include #endif namespace Vulkan { static std::mutex module_lock; #ifdef _WIN32 static HMODULE renderdoc_module; #else static void *renderdoc_module; #endif static RENDERDOC_API_1_0_0 *renderdoc_api; bool Device::init_renderdoc_capture() { std::lock_guard holder{module_lock}; if (renderdoc_module) return true; #ifdef _WIN32 renderdoc_module = GetModuleHandleA("renderdoc.dll"); #elif defined(ANDROID) renderdoc_module = dlopen("libVkLayer_GLES_RenderDoc.so", RTLD_NOW | RTLD_NOLOAD); #else renderdoc_module = dlopen("librenderdoc.so", RTLD_NOW | RTLD_NOLOAD); #endif if (!renderdoc_module) { LOGE("Failed to load RenderDoc, make sure RenderDoc started the application in capture mode.\n"); return false; } #ifdef _WIN32 // Workaround GCC warning about FARPROC mismatch. auto *gpa = GetProcAddress(renderdoc_module, "RENDERDOC_GetAPI"); pRENDERDOC_GetAPI func; memcpy(&func, &gpa, sizeof(func)); if (!func) { LOGE("Failed to load RENDERDOC_GetAPI function.\n"); return false; } #else auto *func = reinterpret_cast(dlsym(renderdoc_module, "RENDERDOC_GetAPI")); if (!func) { LOGE("Failed to load RENDERDOC_GetAPI function.\n"); return false; } #endif if (!func(eRENDERDOC_API_Version_1_0_0, reinterpret_cast(&renderdoc_api))) { LOGE("Failed to obtain RenderDoc 1.0.0 API.\n"); return false; } else { int major, minor, patch; renderdoc_api->GetAPIVersion(&major, &minor, &patch); LOGI("Initialized RenderDoc API %d.%d.%d.\n", major, minor, patch); } return true; } void Device::begin_renderdoc_capture() { std::lock_guard holder{module_lock}; if (!renderdoc_api) { LOGE("RenderDoc API is not loaded, cannot trigger capture.\n"); return; } next_frame_context(); LOGI("Starting RenderDoc frame capture.\n"); renderdoc_api->StartFrameCapture(nullptr, nullptr); } void Device::end_renderdoc_capture() { std::lock_guard holder{module_lock}; if (!renderdoc_api) { LOGE("RenderDoc API is not loaded, cannot trigger capture.\n"); return; } next_frame_context(); renderdoc_api->EndFrameCapture(nullptr, nullptr); LOGI("Ended RenderDoc frame capture.\n"); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/sampler.cpp000066400000000000000000000106551415063341600232170ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "sampler.hpp" #include "device.hpp" namespace Vulkan { Sampler::Sampler(Device *device_, VkSampler sampler_, const SamplerCreateInfo &info, bool immutable_) : Cookie(device_) , device(device_) , sampler(sampler_) , create_info(info) , immutable(immutable_) { } Sampler::~Sampler() { if (sampler) { if (immutable) device->get_device_table().vkDestroySampler(device->get_device(), sampler, nullptr); else if (internal_sync) device->destroy_sampler_nolock(sampler); else device->destroy_sampler(sampler); } } void SamplerDeleter::operator()(Sampler *sampler) { sampler->device->handle_pool.samplers.free(sampler); } VkSamplerCreateInfo Sampler::fill_vk_sampler_info(const SamplerCreateInfo &sampler_info) { VkSamplerCreateInfo info = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; info.magFilter = sampler_info.mag_filter; info.minFilter = sampler_info.min_filter; info.mipmapMode = sampler_info.mipmap_mode; info.addressModeU = sampler_info.address_mode_u; info.addressModeV = sampler_info.address_mode_v; info.addressModeW = sampler_info.address_mode_w; info.mipLodBias = sampler_info.mip_lod_bias; info.anisotropyEnable = sampler_info.anisotropy_enable; info.maxAnisotropy = sampler_info.max_anisotropy; info.compareEnable = sampler_info.compare_enable; info.compareOp = sampler_info.compare_op; info.minLod = sampler_info.min_lod; info.maxLod = sampler_info.max_lod; info.borderColor = sampler_info.border_color; info.unnormalizedCoordinates = sampler_info.unnormalized_coordinates; return info; } ImmutableSampler::ImmutableSampler(Util::Hash hash, Device *device_, const SamplerCreateInfo &sampler_info, const ImmutableYcbcrConversion *ycbcr_) : HashedObject(hash), device(device_), ycbcr(ycbcr_) { VkSamplerYcbcrConversionInfoKHR conv_info = { VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO }; auto info = Sampler::fill_vk_sampler_info(sampler_info); if (ycbcr) { conv_info.conversion = ycbcr->get_conversion(); info.pNext = &conv_info; } #ifdef VULKAN_DEBUG LOGI("Creating immutable sampler.\n"); #endif VkSampler vk_sampler = VK_NULL_HANDLE; if (device->get_device_table().vkCreateSampler(device->get_device(), &info, nullptr, &vk_sampler) != VK_SUCCESS) LOGE("Failed to create sampler.\n"); #ifdef GRANITE_VULKAN_FOSSILIZE register_sampler(vk_sampler, hash, info); #endif sampler = SamplerHandle(device->handle_pool.samplers.allocate(device, vk_sampler, sampler_info, true)); } ImmutableYcbcrConversion::ImmutableYcbcrConversion(Util::Hash hash, Device *device_, const VkSamplerYcbcrConversionCreateInfo &info) : HashedObject(hash), device(device_) { if (device->get_device_features().sampler_ycbcr_conversion_features.samplerYcbcrConversion) { if (device->get_device_table().vkCreateSamplerYcbcrConversionKHR(device->get_device(), &info, nullptr, &conversion) != VK_SUCCESS) { LOGE("Failed to create YCbCr conversion.\n"); } } else LOGE("Ycbcr conversion is not supported on this device.\n"); } ImmutableYcbcrConversion::~ImmutableYcbcrConversion() { if (conversion) device->get_device_table().vkDestroySamplerYcbcrConversionKHR(device->get_device(), conversion, nullptr); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/sampler.hpp000066400000000000000000000074551415063341600232300ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "cookie.hpp" #include "vulkan_common.hpp" #include "vulkan_headers.hpp" #include "object_pool.hpp" namespace Vulkan { enum class StockSampler { NearestClamp, LinearClamp, TrilinearClamp, NearestWrap, LinearWrap, TrilinearWrap, NearestShadow, LinearShadow, DefaultGeometryFilterClamp, DefaultGeometryFilterWrap, Count }; struct SamplerCreateInfo { VkFilter mag_filter; VkFilter min_filter; VkSamplerMipmapMode mipmap_mode; VkSamplerAddressMode address_mode_u; VkSamplerAddressMode address_mode_v; VkSamplerAddressMode address_mode_w; float mip_lod_bias; VkBool32 anisotropy_enable; float max_anisotropy; VkBool32 compare_enable; VkCompareOp compare_op; float min_lod; float max_lod; VkBorderColor border_color; VkBool32 unnormalized_coordinates; }; class Sampler; struct SamplerDeleter { void operator()(Sampler *sampler); }; class Sampler : public Util::IntrusivePtrEnabled, public Cookie, public InternalSyncEnabled { public: friend struct SamplerDeleter; ~Sampler(); VkSampler get_sampler() const { return sampler; } const SamplerCreateInfo &get_create_info() const { return create_info; } static VkSamplerCreateInfo fill_vk_sampler_info(const SamplerCreateInfo &sampler_info); private: friend class Util::ObjectPool; Sampler(Device *device, VkSampler sampler, const SamplerCreateInfo &info, bool immutable); Device *device; VkSampler sampler; SamplerCreateInfo create_info; bool immutable; }; using SamplerHandle = Util::IntrusivePtr; class ImmutableYcbcrConversion : public HashedObject { public: ImmutableYcbcrConversion(Util::Hash hash, Device *device, const VkSamplerYcbcrConversionCreateInfo &info); ~ImmutableYcbcrConversion(); void operator=(const ImmutableYcbcrConversion &) = delete; ImmutableYcbcrConversion(const ImmutableYcbcrConversion &) = delete; VkSamplerYcbcrConversion get_conversion() const { return conversion; } private: Device *device; VkSamplerYcbcrConversion conversion = VK_NULL_HANDLE; }; class ImmutableSampler : public HashedObject { public: ImmutableSampler(Util::Hash hash, Device *device, const SamplerCreateInfo &info, const ImmutableYcbcrConversion *ycbcr); void operator=(const ImmutableSampler &) = delete; ImmutableSampler(const ImmutableSampler &) = delete; const Sampler &get_sampler() const { return *sampler; } VkSamplerYcbcrConversion get_ycbcr_conversion() const { return ycbcr ? ycbcr->get_conversion() : VK_NULL_HANDLE; } private: Device *device; const ImmutableYcbcrConversion *ycbcr; SamplerHandle sampler; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/semaphore.cpp000066400000000000000000000043701415063341600235340ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "semaphore.hpp" #include "device.hpp" namespace Vulkan { SemaphoreHolder::~SemaphoreHolder() { recycle_semaphore(); } void SemaphoreHolder::recycle_semaphore() { if (timeline == 0 && semaphore) { if (internal_sync) { if (is_signalled()) device->destroy_semaphore_nolock(semaphore); else device->recycle_semaphore_nolock(semaphore); } else { if (is_signalled()) device->destroy_semaphore(semaphore); else device->recycle_semaphore(semaphore); } } } SemaphoreHolder &SemaphoreHolder::operator=(SemaphoreHolder &&other) noexcept { if (this == &other) return *this; assert(device == other.device); recycle_semaphore(); semaphore = other.semaphore; timeline = other.timeline; signalled = other.signalled; pending = other.pending; should_destroy_on_consume = other.should_destroy_on_consume; other.semaphore = VK_NULL_HANDLE; other.timeline = 0; other.signalled = false; other.pending = false; other.should_destroy_on_consume = false; return *this; } void SemaphoreHolderDeleter::operator()(Vulkan::SemaphoreHolder *semaphore) { semaphore->device->handle_pool.semaphores.free(semaphore); } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/semaphore.hpp000066400000000000000000000064341415063341600235440ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_common.hpp" #include "vulkan_headers.hpp" #include "cookie.hpp" #include "object_pool.hpp" namespace Vulkan { class Device; class SemaphoreHolder; struct SemaphoreHolderDeleter { void operator()(SemaphoreHolder *semaphore); }; class SemaphoreHolder : public Util::IntrusivePtrEnabled, public InternalSyncEnabled { public: friend struct SemaphoreHolderDeleter; ~SemaphoreHolder(); const VkSemaphore &get_semaphore() const { return semaphore; } bool is_signalled() const { return signalled; } uint64_t get_timeline_value() const { return timeline; } VkSemaphore consume() { auto ret = semaphore; VK_ASSERT(semaphore); VK_ASSERT(signalled); semaphore = VK_NULL_HANDLE; signalled = false; return ret; } VkSemaphore release_semaphore() { auto ret = semaphore; semaphore = VK_NULL_HANDLE; signalled = false; return ret; } bool can_recycle() const { return !should_destroy_on_consume; } void wait_external() { VK_ASSERT(semaphore); VK_ASSERT(signalled); signalled = false; } void signal_external() { VK_ASSERT(!signalled); VK_ASSERT(semaphore); signalled = true; } void destroy_on_consume() { should_destroy_on_consume = true; } void signal_pending_wait() { pending = true; } bool is_pending_wait() const { return pending; } SemaphoreHolder &operator=(SemaphoreHolder &&other) noexcept; private: friend class Util::ObjectPool; SemaphoreHolder(Device *device_, VkSemaphore semaphore_, bool signalled_) : device(device_) , semaphore(semaphore_) , timeline(0) , signalled(signalled_) { } SemaphoreHolder(Device *device_, uint64_t timeline_, VkSemaphore semaphore_) : device(device_), semaphore(semaphore_), timeline(timeline_) { VK_ASSERT(timeline > 0); } explicit SemaphoreHolder(Device *device_) : device(device_) { } void recycle_semaphore(); Device *device; VkSemaphore semaphore = VK_NULL_HANDLE; uint64_t timeline = 0; bool signalled = true; bool pending = false; bool should_destroy_on_consume = false; }; using Semaphore = Util::IntrusivePtr; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/semaphore_manager.cpp000066400000000000000000000036231415063341600252260ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "semaphore_manager.hpp" #include "device.hpp" namespace Vulkan { void SemaphoreManager::init(Device *device_) { device = device_; table = &device->get_device_table(); } SemaphoreManager::~SemaphoreManager() { for (auto &sem : semaphores) table->vkDestroySemaphore(device->get_device(), sem, nullptr); } void SemaphoreManager::recycle(VkSemaphore sem) { if (sem != VK_NULL_HANDLE) semaphores.push_back(sem); } VkSemaphore SemaphoreManager::request_cleared_semaphore() { if (semaphores.empty()) { VkSemaphore semaphore; VkSemaphoreCreateInfo info = { VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO }; table->vkCreateSemaphore(device->get_device(), &info, nullptr, &semaphore); return semaphore; } else { auto sem = semaphores.back(); semaphores.pop_back(); return sem; } } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/semaphore_manager.hpp000066400000000000000000000027511415063341600252340ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include namespace Vulkan { class Device; class SemaphoreManager { public: void init(Device *device); ~SemaphoreManager(); VkSemaphore request_cleared_semaphore(); void recycle(VkSemaphore semaphore); private: Device *device = nullptr; const VolkDeviceTable *table = nullptr; std::vector semaphores; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/shader.cpp000066400000000000000000000473401415063341600230230ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "shader.hpp" #include "device.hpp" #ifdef GRANITE_VULKAN_SPIRV_CROSS #include "spirv_cross.hpp" using namespace spirv_cross; #endif using namespace std; using namespace Util; namespace Vulkan { void ImmutableSamplerBank::hash(Util::Hasher &h, const ImmutableSamplerBank *sampler_bank) { if (sampler_bank) { for (auto &set : sampler_bank->samplers) { for (auto *binding : set) { if (binding) h.u64(binding->get_hash()); else h.u32(0); } } } else h.u32(0); } PipelineLayout::PipelineLayout(Hash hash, Device *device_, const CombinedResourceLayout &layout_, const ImmutableSamplerBank *immutable_samplers) : IntrusiveHashMapEnabled(hash) , device(device_) , layout(layout_) { VkDescriptorSetLayout layouts[VULKAN_NUM_DESCRIPTOR_SETS] = {}; unsigned num_sets = 0; for (unsigned i = 0; i < VULKAN_NUM_DESCRIPTOR_SETS; i++) { set_allocators[i] = device->request_descriptor_set_allocator(layout.sets[i], layout.stages_for_bindings[i], immutable_samplers ? immutable_samplers->samplers[i] : nullptr); layouts[i] = set_allocators[i]->get_layout(); if (layout.descriptor_set_mask & (1u << i)) num_sets = i + 1; } if (num_sets > device->get_gpu_properties().limits.maxBoundDescriptorSets) { LOGE("Number of sets %u exceeds device limit of %u.\n", num_sets, device->get_gpu_properties().limits.maxBoundDescriptorSets); } VkPipelineLayoutCreateInfo info = { VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO }; if (num_sets) { info.setLayoutCount = num_sets; info.pSetLayouts = layouts; } if (layout.push_constant_range.stageFlags != 0) { info.pushConstantRangeCount = 1; info.pPushConstantRanges = &layout.push_constant_range; } #ifdef VULKAN_DEBUG LOGI("Creating pipeline layout.\n"); #endif auto &table = device->get_device_table(); if (table.vkCreatePipelineLayout(device->get_device(), &info, nullptr, &pipe_layout) != VK_SUCCESS) LOGE("Failed to create pipeline layout.\n"); #ifdef GRANITE_VULKAN_FOSSILIZE device->register_pipeline_layout(pipe_layout, get_hash(), info); #endif if (device->get_device_features().supports_update_template) create_update_templates(); } void PipelineLayout::create_update_templates() { auto &table = device->get_device_table(); for (unsigned desc_set = 0; desc_set < VULKAN_NUM_DESCRIPTOR_SETS; desc_set++) { if ((layout.descriptor_set_mask & (1u << desc_set)) == 0) continue; if ((layout.bindless_descriptor_set_mask & (1u << desc_set)) == 0) continue; VkDescriptorUpdateTemplateEntryKHR update_entries[VULKAN_NUM_BINDINGS]; uint32_t update_count = 0; auto &set_layout = layout.sets[desc_set]; for_each_bit(set_layout.uniform_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; entry.offset = offsetof(ResourceBinding, buffer) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.storage_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; entry.offset = offsetof(ResourceBinding, buffer) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.sampled_buffer_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; entry.offset = offsetof(ResourceBinding, buffer_view) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.sampled_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; if (set_layout.fp_mask & (1u << binding)) entry.offset = offsetof(ResourceBinding, image.fp) + sizeof(ResourceBinding) * binding; else entry.offset = offsetof(ResourceBinding, image.integer) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.separate_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; if (set_layout.fp_mask & (1u << binding)) entry.offset = offsetof(ResourceBinding, image.fp) + sizeof(ResourceBinding) * binding; else entry.offset = offsetof(ResourceBinding, image.integer) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.sampler_mask & ~set_layout.immutable_sampler_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; entry.offset = offsetof(ResourceBinding, image.fp) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.storage_image_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; if (set_layout.fp_mask & (1u << binding)) entry.offset = offsetof(ResourceBinding, image.fp) + sizeof(ResourceBinding) * binding; else entry.offset = offsetof(ResourceBinding, image.integer) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); for_each_bit(set_layout.input_attachment_mask, [&](uint32_t binding) { unsigned array_size = set_layout.array_size[binding]; VK_ASSERT(update_count < VULKAN_NUM_BINDINGS); auto &entry = update_entries[update_count++]; entry.descriptorType = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; entry.dstBinding = binding; entry.dstArrayElement = 0; entry.descriptorCount = array_size; if (set_layout.fp_mask & (1u << binding)) entry.offset = offsetof(ResourceBinding, image.fp) + sizeof(ResourceBinding) * binding; else entry.offset = offsetof(ResourceBinding, image.integer) + sizeof(ResourceBinding) * binding; entry.stride = sizeof(ResourceBinding); }); VkDescriptorUpdateTemplateCreateInfoKHR info = {VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR }; info.pipelineLayout = pipe_layout; info.descriptorSetLayout = set_allocators[desc_set]->get_layout(); info.templateType = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR; info.set = desc_set; info.descriptorUpdateEntryCount = update_count; info.pDescriptorUpdateEntries = update_entries; info.pipelineBindPoint = (layout.stages_for_sets[desc_set] & VK_SHADER_STAGE_COMPUTE_BIT) ? VK_PIPELINE_BIND_POINT_COMPUTE : VK_PIPELINE_BIND_POINT_GRAPHICS; if (table.vkCreateDescriptorUpdateTemplateKHR(device->get_device(), &info, nullptr, &update_template[desc_set]) != VK_SUCCESS) { LOGE("Failed to create descriptor update template.\n"); } } } PipelineLayout::~PipelineLayout() { auto &table = device->get_device_table(); if (pipe_layout != VK_NULL_HANDLE) table.vkDestroyPipelineLayout(device->get_device(), pipe_layout, nullptr); for (auto &update : update_template) if (update != VK_NULL_HANDLE) table.vkDestroyDescriptorUpdateTemplateKHR(device->get_device(), update, nullptr); } const char *Shader::stage_to_name(ShaderStage stage) { switch (stage) { case ShaderStage::Compute: return "compute"; case ShaderStage::Vertex: return "vertex"; case ShaderStage::Fragment: return "fragment"; case ShaderStage::Geometry: return "geometry"; case ShaderStage::TessControl: return "tess_control"; case ShaderStage::TessEvaluation: return "tess_evaluation"; default: return "unknown"; } } // Implicitly also checks for endian issues. static const uint16_t reflection_magic[] = { 'G', 'R', 'A', ResourceLayout::Version }; size_t ResourceLayout::serialization_size() { return sizeof(ResourceLayout) + sizeof(reflection_magic); } bool ResourceLayout::serialize(uint8_t *data, size_t size) const { if (size != serialization_size()) return false; // Cannot serialize externally defined immutable samplers. for (auto &set : sets) if (set.immutable_sampler_mask != 0) return false; memcpy(data, reflection_magic, sizeof(reflection_magic)); memcpy(data + sizeof(reflection_magic), this, sizeof(*this)); return true; } bool ResourceLayout::unserialize(const uint8_t *data, size_t size) { if (size != sizeof(*this) + sizeof(reflection_magic)) { LOGE("Reflection size mismatch.\n"); return false; } if (memcmp(data, reflection_magic, sizeof(reflection_magic)) != 0) { LOGE("Magic mismatch.\n"); return false; } memcpy(this, data + sizeof(reflection_magic), sizeof(*this)); return true; } #ifdef GRANITE_VULKAN_SPIRV_CROSS static void update_array_info(ResourceLayout &layout, const SPIRType &type, unsigned set, unsigned binding) { auto &size = layout.sets[set].array_size[binding]; if (!type.array.empty()) { if (type.array.size() != 1) LOGE("Array dimension must be 1.\n"); else if (!type.array_size_literal.front()) LOGE("Array dimension must be a literal.\n"); else { if (type.array.front() == 0) { if (binding != 0) LOGE("Bindless textures can only be used with binding = 0 in a set.\n"); if (type.basetype != SPIRType::Image || type.image.dim == spv::DimBuffer) LOGE("Can only use bindless for sampled images.\n"); else layout.bindless_set_mask |= 1u << set; size = DescriptorSetLayout::UNSIZED_ARRAY; } else if (size && size != type.array.front()) LOGE("Array dimension for (%u, %u) is inconsistent.\n", set, binding); else if (type.array.front() + binding > VULKAN_NUM_BINDINGS) LOGE("Binding array will go out of bounds.\n"); else size = uint8_t(type.array.front()); } } else { if (size && size != 1) LOGE("Array dimension for (%u, %u) is inconsistent.\n", set, binding); size = 1; } } bool Shader::reflect_resource_layout(ResourceLayout &layout, const uint32_t *data, size_t size) { Compiler compiler(data, size / sizeof(uint32_t)); auto resources = compiler.get_shader_resources(); for (auto &image : resources.sampled_images) { auto set = compiler.get_decoration(image.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(image.id, spv::DecorationBinding); auto &type = compiler.get_type(image.type_id); if (type.image.dim == spv::DimBuffer) layout.sets[set].sampled_buffer_mask |= 1u << binding; else layout.sets[set].sampled_image_mask |= 1u << binding; if (compiler.get_type(type.image.type).basetype == SPIRType::BaseType::Float) layout.sets[set].fp_mask |= 1u << binding; update_array_info(layout, type, set, binding); } for (auto &image : resources.subpass_inputs) { auto set = compiler.get_decoration(image.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(image.id, spv::DecorationBinding); layout.sets[set].input_attachment_mask |= 1u << binding; auto &type = compiler.get_type(image.type_id); if (compiler.get_type(type.image.type).basetype == SPIRType::BaseType::Float) layout.sets[set].fp_mask |= 1u << binding; update_array_info(layout, type, set, binding); } for (auto &image : resources.separate_images) { auto set = compiler.get_decoration(image.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(image.id, spv::DecorationBinding); auto &type = compiler.get_type(image.type_id); if (compiler.get_type(type.image.type).basetype == SPIRType::BaseType::Float) layout.sets[set].fp_mask |= 1u << binding; if (type.image.dim == spv::DimBuffer) layout.sets[set].sampled_buffer_mask |= 1u << binding; else layout.sets[set].separate_image_mask |= 1u << binding; update_array_info(layout, type, set, binding); } for (auto &image : resources.separate_samplers) { auto set = compiler.get_decoration(image.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(image.id, spv::DecorationBinding); layout.sets[set].sampler_mask |= 1u << binding; update_array_info(layout, compiler.get_type(image.type_id), set, binding); } for (auto &image : resources.storage_images) { auto set = compiler.get_decoration(image.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(image.id, spv::DecorationBinding); layout.sets[set].storage_image_mask |= 1u << binding; auto &type = compiler.get_type(image.type_id); if (compiler.get_type(type.image.type).basetype == SPIRType::BaseType::Float) layout.sets[set].fp_mask |= 1u << binding; update_array_info(layout, type, set, binding); } for (auto &buffer : resources.uniform_buffers) { auto set = compiler.get_decoration(buffer.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(buffer.id, spv::DecorationBinding); layout.sets[set].uniform_buffer_mask |= 1u << binding; update_array_info(layout, compiler.get_type(buffer.type_id), set, binding); } for (auto &buffer : resources.storage_buffers) { auto set = compiler.get_decoration(buffer.id, spv::DecorationDescriptorSet); auto binding = compiler.get_decoration(buffer.id, spv::DecorationBinding); layout.sets[set].storage_buffer_mask |= 1u << binding; update_array_info(layout, compiler.get_type(buffer.type_id), set, binding); } for (auto &attrib : resources.stage_inputs) { auto location = compiler.get_decoration(attrib.id, spv::DecorationLocation); layout.input_mask |= 1u << location; } for (auto &attrib : resources.stage_outputs) { auto location = compiler.get_decoration(attrib.id, spv::DecorationLocation); layout.output_mask |= 1u << location; } if (!resources.push_constant_buffers.empty()) { // Don't bother trying to extract which part of a push constant block we're using. // Just assume we're accessing everything. At least on older validation layers, // it did not do a static analysis to determine similar information, so we got a lot // of false positives. layout.push_constant_size = compiler.get_declared_struct_size(compiler.get_type(resources.push_constant_buffers.front().base_type_id)); } auto spec_constants = compiler.get_specialization_constants(); for (auto &c : spec_constants) { if (c.constant_id >= VULKAN_NUM_SPEC_CONSTANTS) { LOGE("Spec constant ID: %u is out of range, will be ignored.\n", c.constant_id); continue; } layout.spec_constant_mask |= 1u << c.constant_id; } return true; } #else bool Shader::reflect_resource_layout(ResourceLayout &, const uint32_t *, size_t) { return false; } #endif Shader::Shader(Hash hash, Device *device_, const uint32_t *data, size_t size, const ResourceLayout *resource_layout, const ImmutableSamplerBank *sampler_bank) : IntrusiveHashMapEnabled(hash) , device(device_) { VkShaderModuleCreateInfo info = { VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO }; info.codeSize = size; info.pCode = data; #ifdef VULKAN_DEBUG LOGI("Creating shader module.\n"); #endif auto &table = device->get_device_table(); if (table.vkCreateShaderModule(device->get_device(), &info, nullptr, &module) != VK_SUCCESS) LOGE("Failed to create shader module.\n"); #ifdef GRANITE_VULKAN_FOSSILIZE device->register_shader_module(module, get_hash(), info); #endif if (resource_layout) layout = *resource_layout; #ifdef GRANITE_VULKAN_SPIRV_CROSS else if (!reflect_resource_layout(layout, data, size)) LOGE("Failed to reflect resource layout.\n"); #endif if (sampler_bank) immutable_sampler_bank = *sampler_bank; for (unsigned set = 0; set < VULKAN_NUM_DESCRIPTOR_SETS; set++) { for_each_bit(layout.sets[set].sampler_mask | layout.sets[set].sampled_image_mask, [&](unsigned binding) { if (sampler_bank && sampler_bank->samplers[set][binding]) layout.sets[set].immutable_sampler_mask |= 1u << binding; }); } if (layout.bindless_set_mask != 0 && !device->get_device_features().supports_descriptor_indexing) LOGE("Sufficient features for descriptor indexing is not supported on this device.\n"); } Shader::~Shader() { auto &table = device->get_device_table(); if (module) table.vkDestroyShaderModule(device->get_device(), module, nullptr); } void Program::set_shader(ShaderStage stage, Shader *handle) { shaders[Util::ecast(stage)] = handle; } Program::Program(Device *device_, Shader *vertex, Shader *fragment) : device(device_) { set_shader(ShaderStage::Vertex, vertex); set_shader(ShaderStage::Fragment, fragment); device->bake_program(*this); } Program::Program(Device *device_, Shader *compute_shader) : device(device_) { set_shader(ShaderStage::Compute, compute_shader); device->bake_program(*this); } VkPipeline Program::get_pipeline(Hash hash) const { auto *ret = pipelines.find(hash); return ret ? ret->get() : VK_NULL_HANDLE; } VkPipeline Program::add_pipeline(Hash hash, VkPipeline pipeline) { return pipelines.emplace_yield(hash, pipeline)->get(); } void Program::destroy_pipeline(VkPipeline pipeline) { if (internal_sync) device->destroy_pipeline_nolock(pipeline); else device->destroy_pipeline(pipeline); } void Program::promote_read_write_to_read_only() { #ifdef GRANITE_VULKAN_MT pipelines.move_to_read_only(); #endif } Program::~Program() { #ifdef GRANITE_VULKAN_MT for (auto &pipe : pipelines.get_read_only()) destroy_pipeline(pipe.get()); for (auto &pipe : pipelines.get_read_write()) destroy_pipeline(pipe.get()); #else for (auto &pipe : pipelines) destroy_pipeline(pipe.get()); #endif } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/shader.hpp000066400000000000000000000134351415063341600230260ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "cookie.hpp" #include "descriptor_set.hpp" #include "hash.hpp" #include "intrusive.hpp" #include "limits.hpp" #include "vulkan_headers.hpp" #include "enum_cast.hpp" namespace spirv_cross { struct SPIRType; } namespace Vulkan { class Device; enum class ShaderStage { Vertex = 0, TessControl = 1, TessEvaluation = 2, Geometry = 3, Fragment = 4, Compute = 5, Count }; struct ResourceLayout { DescriptorSetLayout sets[VULKAN_NUM_DESCRIPTOR_SETS]; uint32_t input_mask = 0; uint32_t output_mask = 0; uint32_t push_constant_size = 0; uint32_t spec_constant_mask = 0; uint32_t bindless_set_mask = 0; enum { Version = 2 }; bool unserialize(const uint8_t *data, size_t size); bool serialize(uint8_t *data, size_t size) const; static size_t serialization_size(); }; static_assert(sizeof(DescriptorSetLayout) % 8 == 0, "Size of DescriptorSetLayout does not align to 64 bits."); struct CombinedResourceLayout { uint32_t attribute_mask = 0; uint32_t render_target_mask = 0; DescriptorSetLayout sets[VULKAN_NUM_DESCRIPTOR_SETS] = {}; uint32_t stages_for_bindings[VULKAN_NUM_DESCRIPTOR_SETS][VULKAN_NUM_BINDINGS] = {}; uint32_t stages_for_sets[VULKAN_NUM_DESCRIPTOR_SETS] = {}; VkPushConstantRange push_constant_range = {}; uint32_t descriptor_set_mask = 0; uint32_t bindless_descriptor_set_mask = 0; uint32_t spec_constant_mask[Util::ecast(ShaderStage::Count)] = {}; uint32_t combined_spec_constant_mask = 0; Util::Hash push_constant_layout_hash = 0; }; struct ResourceBinding { union { VkDescriptorBufferInfo buffer; struct { VkDescriptorImageInfo fp; VkDescriptorImageInfo integer; } image; VkBufferView buffer_view; }; VkDeviceSize dynamic_offset; }; struct ResourceBindings { ResourceBinding bindings[VULKAN_NUM_DESCRIPTOR_SETS][VULKAN_NUM_BINDINGS]; uint64_t cookies[VULKAN_NUM_DESCRIPTOR_SETS][VULKAN_NUM_BINDINGS]; uint64_t secondary_cookies[VULKAN_NUM_DESCRIPTOR_SETS][VULKAN_NUM_BINDINGS]; uint8_t push_constant_data[VULKAN_PUSH_CONSTANT_SIZE]; }; struct ImmutableSamplerBank { const ImmutableSampler *samplers[VULKAN_NUM_DESCRIPTOR_SETS][VULKAN_NUM_BINDINGS]; static void hash(Util::Hasher &h, const ImmutableSamplerBank *bank); }; class PipelineLayout : public HashedObject { public: PipelineLayout(Util::Hash hash, Device *device, const CombinedResourceLayout &layout, const ImmutableSamplerBank *sampler_bank); ~PipelineLayout(); const CombinedResourceLayout &get_resource_layout() const { return layout; } VkPipelineLayout get_layout() const { return pipe_layout; } DescriptorSetAllocator *get_allocator(unsigned set) const { return set_allocators[set]; } VkDescriptorUpdateTemplateKHR get_update_template(unsigned set) const { return update_template[set]; } private: Device *device; VkPipelineLayout pipe_layout = VK_NULL_HANDLE; CombinedResourceLayout layout; DescriptorSetAllocator *set_allocators[VULKAN_NUM_DESCRIPTOR_SETS] = {}; VkDescriptorUpdateTemplateKHR update_template[VULKAN_NUM_DESCRIPTOR_SETS] = {}; void create_update_templates(); }; class Shader : public HashedObject { public: Shader(Util::Hash binding, Device *device, const uint32_t *data, size_t size, const ResourceLayout *layout = nullptr, const ImmutableSamplerBank *sampler_bank = nullptr); ~Shader(); const ResourceLayout &get_layout() const { return layout; } const ImmutableSamplerBank &get_immutable_sampler_bank() const { return immutable_sampler_bank; } VkShaderModule get_module() const { return module; } static bool reflect_resource_layout(ResourceLayout &layout, const uint32_t *spirv_data, size_t spirv_size); static const char *stage_to_name(ShaderStage stage); private: Device *device; VkShaderModule module = VK_NULL_HANDLE; ResourceLayout layout; ImmutableSamplerBank immutable_sampler_bank; }; class Program : public HashedObject, public InternalSyncEnabled { public: Program(Device *device, Shader *vertex, Shader *fragment); Program(Device *device, Shader *compute); ~Program(); inline const Shader *get_shader(ShaderStage stage) const { return shaders[Util::ecast(stage)]; } void set_pipeline_layout(PipelineLayout *new_layout) { layout = new_layout; } PipelineLayout *get_pipeline_layout() const { return layout; } VkPipeline get_pipeline(Util::Hash hash) const; VkPipeline add_pipeline(Util::Hash hash, VkPipeline pipeline); void promote_read_write_to_read_only(); private: void set_shader(ShaderStage stage, Shader *handle); Device *device; Shader *shaders[Util::ecast(ShaderStage::Count)] = {}; PipelineLayout *layout = nullptr; VulkanCache> pipelines; void destroy_pipeline(VkPipeline pipeline); }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/texture_format.cpp000066400000000000000000000324541415063341600246250ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "texture_format.hpp" #include "format.hpp" #include using namespace std; namespace Vulkan { uint32_t TextureFormatLayout::num_miplevels(uint32_t width, uint32_t height, uint32_t depth) { uint32_t size = unsigned(max(max(width, height), depth)); uint32_t levels = 0; while (size) { levels++; size >>= 1; } return levels; } void TextureFormatLayout::format_block_dim(VkFormat format, uint32_t &width, uint32_t &height) { #define fmt(x, w, h) \ case VK_FORMAT_##x: \ width = w; \ height = h; \ break switch (format) { fmt(ETC2_R8G8B8A8_UNORM_BLOCK, 4, 4); fmt(ETC2_R8G8B8A8_SRGB_BLOCK, 4, 4); fmt(ETC2_R8G8B8A1_UNORM_BLOCK, 4, 4); fmt(ETC2_R8G8B8A1_SRGB_BLOCK, 4, 4); fmt(ETC2_R8G8B8_UNORM_BLOCK, 4, 4); fmt(ETC2_R8G8B8_SRGB_BLOCK, 4, 4); fmt(EAC_R11_UNORM_BLOCK, 4, 4); fmt(EAC_R11_SNORM_BLOCK, 4, 4); fmt(EAC_R11G11_UNORM_BLOCK, 4, 4); fmt(EAC_R11G11_SNORM_BLOCK, 4, 4); fmt(BC1_RGB_UNORM_BLOCK, 4, 4); fmt(BC1_RGB_SRGB_BLOCK, 4, 4); fmt(BC1_RGBA_UNORM_BLOCK, 4, 4); fmt(BC1_RGBA_SRGB_BLOCK, 4, 4); fmt(BC2_UNORM_BLOCK, 4, 4); fmt(BC2_SRGB_BLOCK, 4, 4); fmt(BC3_UNORM_BLOCK, 4, 4); fmt(BC3_SRGB_BLOCK, 4, 4); fmt(BC4_UNORM_BLOCK, 4, 4); fmt(BC4_SNORM_BLOCK, 4, 4); fmt(BC5_UNORM_BLOCK, 4, 4); fmt(BC5_SNORM_BLOCK, 4, 4); fmt(BC6H_UFLOAT_BLOCK, 4, 4); fmt(BC6H_SFLOAT_BLOCK, 4, 4); fmt(BC7_SRGB_BLOCK, 4, 4); fmt(BC7_UNORM_BLOCK, 4, 4); #define astc_fmt(w, h) \ fmt(ASTC_##w##x##h##_UNORM_BLOCK, w, h); \ fmt(ASTC_##w##x##h##_SRGB_BLOCK, w, h); \ fmt(ASTC_##w##x##h##_SFLOAT_BLOCK_EXT, w, h) astc_fmt(4, 4); astc_fmt(5, 4); astc_fmt(5, 5); astc_fmt(6, 5); astc_fmt(6, 6); astc_fmt(8, 5); astc_fmt(8, 6); astc_fmt(8, 8); astc_fmt(10, 5); astc_fmt(10, 6); astc_fmt(10, 8); astc_fmt(10, 10); astc_fmt(12, 10); astc_fmt(12, 12); default: width = 1; height = 1; break; } #undef fmt #undef astc_fmt } uint32_t TextureFormatLayout::format_block_size(VkFormat format, VkImageAspectFlags aspect) { #define fmt(x, bpp) \ case VK_FORMAT_##x: \ return bpp #define fmt2(x, bpp0, bpp1) \ case VK_FORMAT_##x: \ return aspect == VK_IMAGE_ASPECT_PLANE_0_BIT ? bpp0 : bpp1 switch (format) { fmt(R4G4_UNORM_PACK8, 1); fmt(R4G4B4A4_UNORM_PACK16, 2); fmt(B4G4R4A4_UNORM_PACK16, 2); fmt(R5G6B5_UNORM_PACK16, 2); fmt(B5G6R5_UNORM_PACK16, 2); fmt(R5G5B5A1_UNORM_PACK16, 2); fmt(B5G5R5A1_UNORM_PACK16, 2); fmt(A1R5G5B5_UNORM_PACK16, 2); fmt(R8_UNORM, 1); fmt(R8_SNORM, 1); fmt(R8_USCALED, 1); fmt(R8_SSCALED, 1); fmt(R8_UINT, 1); fmt(R8_SINT, 1); fmt(R8_SRGB, 1); fmt(R8G8_UNORM, 2); fmt(R8G8_SNORM, 2); fmt(R8G8_USCALED, 2); fmt(R8G8_SSCALED, 2); fmt(R8G8_UINT, 2); fmt(R8G8_SINT, 2); fmt(R8G8_SRGB, 2); fmt(R8G8B8_UNORM, 3); fmt(R8G8B8_SNORM, 3); fmt(R8G8B8_USCALED, 3); fmt(R8G8B8_SSCALED, 3); fmt(R8G8B8_UINT, 3); fmt(R8G8B8_SINT, 3); fmt(R8G8B8_SRGB, 3); fmt(R8G8B8A8_UNORM, 4); fmt(R8G8B8A8_SNORM, 4); fmt(R8G8B8A8_USCALED, 4); fmt(R8G8B8A8_SSCALED, 4); fmt(R8G8B8A8_UINT, 4); fmt(R8G8B8A8_SINT, 4); fmt(R8G8B8A8_SRGB, 4); fmt(B8G8R8A8_UNORM, 4); fmt(B8G8R8A8_SNORM, 4); fmt(B8G8R8A8_USCALED, 4); fmt(B8G8R8A8_SSCALED, 4); fmt(B8G8R8A8_UINT, 4); fmt(B8G8R8A8_SINT, 4); fmt(B8G8R8A8_SRGB, 4); fmt(A8B8G8R8_UNORM_PACK32, 4); fmt(A8B8G8R8_SNORM_PACK32, 4); fmt(A8B8G8R8_USCALED_PACK32, 4); fmt(A8B8G8R8_SSCALED_PACK32, 4); fmt(A8B8G8R8_UINT_PACK32, 4); fmt(A8B8G8R8_SINT_PACK32, 4); fmt(A8B8G8R8_SRGB_PACK32, 4); fmt(A2B10G10R10_UNORM_PACK32, 4); fmt(A2B10G10R10_SNORM_PACK32, 4); fmt(A2B10G10R10_USCALED_PACK32, 4); fmt(A2B10G10R10_SSCALED_PACK32, 4); fmt(A2B10G10R10_UINT_PACK32, 4); fmt(A2B10G10R10_SINT_PACK32, 4); fmt(A2R10G10B10_UNORM_PACK32, 4); fmt(A2R10G10B10_SNORM_PACK32, 4); fmt(A2R10G10B10_USCALED_PACK32, 4); fmt(A2R10G10B10_SSCALED_PACK32, 4); fmt(A2R10G10B10_UINT_PACK32, 4); fmt(A2R10G10B10_SINT_PACK32, 4); fmt(R16_UNORM, 2); fmt(R16_SNORM, 2); fmt(R16_USCALED, 2); fmt(R16_SSCALED, 2); fmt(R16_UINT, 2); fmt(R16_SINT, 2); fmt(R16_SFLOAT, 2); fmt(R16G16_UNORM, 4); fmt(R16G16_SNORM, 4); fmt(R16G16_USCALED, 4); fmt(R16G16_SSCALED, 4); fmt(R16G16_UINT, 4); fmt(R16G16_SINT, 4); fmt(R16G16_SFLOAT, 4); fmt(R16G16B16_UNORM, 6); fmt(R16G16B16_SNORM, 6); fmt(R16G16B16_USCALED, 6); fmt(R16G16B16_SSCALED, 6); fmt(R16G16B16_UINT, 6); fmt(R16G16B16_SINT, 6); fmt(R16G16B16_SFLOAT, 6); fmt(R16G16B16A16_UNORM, 8); fmt(R16G16B16A16_SNORM, 8); fmt(R16G16B16A16_USCALED, 8); fmt(R16G16B16A16_SSCALED, 8); fmt(R16G16B16A16_UINT, 8); fmt(R16G16B16A16_SINT, 8); fmt(R16G16B16A16_SFLOAT, 8); fmt(R32_UINT, 4); fmt(R32_SINT, 4); fmt(R32_SFLOAT, 4); fmt(R32G32_UINT, 8); fmt(R32G32_SINT, 8); fmt(R32G32_SFLOAT, 8); fmt(R32G32B32_UINT, 12); fmt(R32G32B32_SINT, 12); fmt(R32G32B32_SFLOAT, 12); fmt(R32G32B32A32_UINT, 16); fmt(R32G32B32A32_SINT, 16); fmt(R32G32B32A32_SFLOAT, 16); fmt(R64_UINT, 8); fmt(R64_SINT, 8); fmt(R64_SFLOAT, 8); fmt(R64G64_UINT, 16); fmt(R64G64_SINT, 16); fmt(R64G64_SFLOAT, 16); fmt(R64G64B64_UINT, 24); fmt(R64G64B64_SINT, 24); fmt(R64G64B64_SFLOAT, 24); fmt(R64G64B64A64_UINT, 32); fmt(R64G64B64A64_SINT, 32); fmt(R64G64B64A64_SFLOAT, 32); fmt(B10G11R11_UFLOAT_PACK32, 4); fmt(E5B9G9R9_UFLOAT_PACK32, 4); fmt(D16_UNORM, 2); fmt(X8_D24_UNORM_PACK32, 4); fmt(D32_SFLOAT, 4); fmt(S8_UINT, 1); case VK_FORMAT_D16_UNORM_S8_UINT: return aspect == VK_IMAGE_ASPECT_DEPTH_BIT ? 2 : 1; case VK_FORMAT_D24_UNORM_S8_UINT: case VK_FORMAT_D32_SFLOAT_S8_UINT: return aspect == VK_IMAGE_ASPECT_DEPTH_BIT ? 4 : 1; // ETC2 fmt(ETC2_R8G8B8A8_UNORM_BLOCK, 16); fmt(ETC2_R8G8B8A8_SRGB_BLOCK, 16); fmt(ETC2_R8G8B8A1_UNORM_BLOCK, 8); fmt(ETC2_R8G8B8A1_SRGB_BLOCK, 8); fmt(ETC2_R8G8B8_UNORM_BLOCK, 8); fmt(ETC2_R8G8B8_SRGB_BLOCK, 8); fmt(EAC_R11_UNORM_BLOCK, 8); fmt(EAC_R11_SNORM_BLOCK, 8); fmt(EAC_R11G11_UNORM_BLOCK, 16); fmt(EAC_R11G11_SNORM_BLOCK, 16); // BC fmt(BC1_RGB_UNORM_BLOCK, 8); fmt(BC1_RGB_SRGB_BLOCK, 8); fmt(BC1_RGBA_UNORM_BLOCK, 8); fmt(BC1_RGBA_SRGB_BLOCK, 8); fmt(BC2_UNORM_BLOCK, 16); fmt(BC2_SRGB_BLOCK, 16); fmt(BC3_UNORM_BLOCK, 16); fmt(BC3_SRGB_BLOCK, 16); fmt(BC4_UNORM_BLOCK, 8); fmt(BC4_SNORM_BLOCK, 8); fmt(BC5_UNORM_BLOCK, 16); fmt(BC5_SNORM_BLOCK, 16); fmt(BC6H_UFLOAT_BLOCK, 16); fmt(BC6H_SFLOAT_BLOCK, 16); fmt(BC7_SRGB_BLOCK, 16); fmt(BC7_UNORM_BLOCK, 16); // ASTC #define astc_fmt(w, h) \ fmt(ASTC_##w##x##h##_UNORM_BLOCK, 16); \ fmt(ASTC_##w##x##h##_SRGB_BLOCK, 16); \ fmt(ASTC_##w##x##h##_SFLOAT_BLOCK_EXT, 16) astc_fmt(4, 4); astc_fmt(5, 4); astc_fmt(5, 5); astc_fmt(6, 5); astc_fmt(6, 6); astc_fmt(8, 5); astc_fmt(8, 6); astc_fmt(8, 8); astc_fmt(10, 5); astc_fmt(10, 6); astc_fmt(10, 8); astc_fmt(10, 10); astc_fmt(12, 10); astc_fmt(12, 12); fmt(G8B8G8R8_422_UNORM, 4); fmt(B8G8R8G8_422_UNORM, 4); fmt(G8_B8_R8_3PLANE_420_UNORM, 1); fmt2(G8_B8R8_2PLANE_420_UNORM, 1, 2); fmt(G8_B8_R8_3PLANE_422_UNORM, 1); fmt2(G8_B8R8_2PLANE_422_UNORM, 1, 2); fmt(G8_B8_R8_3PLANE_444_UNORM, 1); fmt(R10X6_UNORM_PACK16, 2); fmt(R10X6G10X6_UNORM_2PACK16, 4); fmt(R10X6G10X6B10X6A10X6_UNORM_4PACK16, 8); fmt(G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, 8); fmt(B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, 8); fmt(G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16, 2); fmt(G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16, 2); fmt(G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16, 2); fmt2(G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16, 2, 4); fmt2(G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16, 2, 4); fmt(R12X4_UNORM_PACK16, 2); fmt(R12X4G12X4_UNORM_2PACK16, 4); fmt(R12X4G12X4B12X4A12X4_UNORM_4PACK16, 8); fmt(G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, 8); fmt(B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, 8); fmt(G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16, 2); fmt(G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16, 2); fmt(G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16, 2); fmt2(G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16, 2, 4); fmt2(G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16, 2, 4); fmt(G16B16G16R16_422_UNORM, 8); fmt(B16G16R16G16_422_UNORM, 8); fmt(G16_B16_R16_3PLANE_420_UNORM, 2); fmt(G16_B16_R16_3PLANE_422_UNORM, 2); fmt(G16_B16_R16_3PLANE_444_UNORM, 2); fmt2(G16_B16R16_2PLANE_420_UNORM, 2, 4); fmt2(G16_B16R16_2PLANE_422_UNORM, 2, 4); default: assert(0 && "Unknown format."); return 0; } #undef fmt #undef fmt2 #undef astc_fmt } void TextureFormatLayout::fill_mipinfo(uint32_t width, uint32_t height, uint32_t depth) { block_stride = format_block_size(format, 0); format_block_dim(format, block_dim_x, block_dim_y); if (mip_levels == 0) mip_levels = num_miplevels(width, height, depth); size_t offset = 0; for (uint32_t mip = 0; mip < mip_levels; mip++) { offset = (offset + 15) & ~15; uint32_t blocks_x = (width + block_dim_x - 1) / block_dim_x; uint32_t blocks_y = (height + block_dim_y - 1) / block_dim_y; size_t mip_size = blocks_x * blocks_y * array_layers * depth * block_stride; mips[mip].offset = offset; mips[mip].block_row_length = blocks_x; mips[mip].block_image_height = blocks_y; mips[mip].row_length = blocks_x * block_dim_x; mips[mip].image_height = blocks_y * block_dim_y; mips[mip].width = width; mips[mip].height = height; mips[mip].depth = depth; offset += mip_size; width = max((width >> 1u), 1u); height = max((height >> 1u), 1u); depth = max((depth >> 1u), 1u); } required_size = offset; } void TextureFormatLayout::set_1d(VkFormat format_, uint32_t width, uint32_t array_layers_, uint32_t mip_levels_) { image_type = VK_IMAGE_TYPE_1D; format = format_; array_layers = array_layers_; mip_levels = mip_levels_; fill_mipinfo(width, 1, 1); } void TextureFormatLayout::set_2d(VkFormat format_, uint32_t width, uint32_t height, uint32_t array_layers_, uint32_t mip_levels_) { image_type = VK_IMAGE_TYPE_2D; format = format_; array_layers = array_layers_; mip_levels = mip_levels_; fill_mipinfo(width, height, 1); } void TextureFormatLayout::set_3d(VkFormat format_, uint32_t width, uint32_t height, uint32_t depth, uint32_t mip_levels_) { image_type = VK_IMAGE_TYPE_3D; format = format_; array_layers = 1; mip_levels = mip_levels_; fill_mipinfo(width, height, depth); } void TextureFormatLayout::set_buffer(void *buffer_, size_t size) { buffer = static_cast(buffer_); buffer_size = size; } uint32_t TextureFormatLayout::get_width(uint32_t mip) const { return mips[mip].width; } uint32_t TextureFormatLayout::get_height(uint32_t mip) const { return mips[mip].height; } uint32_t TextureFormatLayout::get_depth(uint32_t mip) const { return mips[mip].depth; } uint32_t TextureFormatLayout::get_layers() const { return array_layers; } VkImageType TextureFormatLayout::get_image_type() const { return image_type; } VkFormat TextureFormatLayout::get_format() const { return format; } uint32_t TextureFormatLayout::get_block_stride() const { return block_stride; } uint32_t TextureFormatLayout::get_levels() const { return mip_levels; } size_t TextureFormatLayout::get_required_size() const { return required_size; } const TextureFormatLayout::MipInfo &TextureFormatLayout::get_mip_info(uint32_t mip) const { return mips[mip]; } uint32_t TextureFormatLayout::get_block_dim_x() const { return block_dim_x; } uint32_t TextureFormatLayout::get_block_dim_y() const { return block_dim_y; } size_t TextureFormatLayout::row_byte_stride(uint32_t row_length) const { return ((row_length + block_dim_x - 1) / block_dim_x) * block_stride; } size_t TextureFormatLayout::layer_byte_stride(uint32_t image_height, size_t row_byte_stride) const { return ((image_height + block_dim_y - 1) / block_dim_y) * row_byte_stride; } void TextureFormatLayout::build_buffer_image_copies(Util::SmallVector &copies) const { copies.resize(mip_levels); for (unsigned level = 0; level < mip_levels; level++) { const auto &mip_info = mips[level]; auto &blit = copies[level]; blit = {}; blit.bufferOffset = mip_info.offset; blit.bufferRowLength = mip_info.row_length; blit.bufferImageHeight = mip_info.image_height; blit.imageSubresource.aspectMask = format_to_aspect_mask(format); blit.imageSubresource.mipLevel = level; blit.imageSubresource.baseArrayLayer = 0; blit.imageSubresource.layerCount = array_layers; blit.imageExtent.width = mip_info.width; blit.imageExtent.height = mip_info.height; blit.imageExtent.depth = mip_info.depth; } } }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/texture_format.hpp000066400000000000000000000126451415063341600246320ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include "small_vector.hpp" #include #include #include namespace Vulkan { class TextureFormatLayout { public: void set_1d(VkFormat format, uint32_t width, uint32_t array_layers = 1, uint32_t mip_levels = 1); void set_2d(VkFormat format, uint32_t width, uint32_t height, uint32_t array_layers = 1, uint32_t mip_levels = 1); void set_3d(VkFormat format, uint32_t width, uint32_t height, uint32_t depth, uint32_t mip_levels = 1); static uint32_t format_block_size(VkFormat format, VkImageAspectFlags aspect); static void format_block_dim(VkFormat format, uint32_t &width, uint32_t &height); static uint32_t num_miplevels(uint32_t width, uint32_t height = 1, uint32_t depth = 1); void set_buffer(void *buffer, size_t size); inline void *get_buffer() { return buffer; } uint32_t get_width(uint32_t mip = 0) const; uint32_t get_height(uint32_t mip = 0) const; uint32_t get_depth(uint32_t mip = 0) const; uint32_t get_levels() const; uint32_t get_layers() const; uint32_t get_block_stride() const; uint32_t get_block_dim_x() const; uint32_t get_block_dim_y() const; VkImageType get_image_type() const; VkFormat get_format() const; size_t get_required_size() const; size_t row_byte_stride(uint32_t row_length) const; size_t layer_byte_stride(uint32_t row_length, size_t row_byte_stride) const; inline size_t get_row_size(uint32_t mip) const { return mips[mip].block_row_length * block_stride; } inline size_t get_layer_size(uint32_t mip) const { return mips[mip].block_image_height * get_row_size(mip); } struct MipInfo { size_t offset = 0; uint32_t width = 1; uint32_t height = 1; uint32_t depth = 1; uint32_t block_image_height = 0; uint32_t block_row_length = 0; uint32_t image_height = 0; uint32_t row_length = 0; }; const MipInfo &get_mip_info(uint32_t mip) const; inline void *data(uint32_t layer = 0, uint32_t mip = 0) const { assert(buffer); assert(buffer_size == required_size); auto &mip_info = mips[mip]; uint8_t *slice = buffer + mip_info.offset; slice += block_stride * layer * mip_info.block_row_length * mip_info.block_image_height; return slice; } template inline T *data_generic(uint32_t x, uint32_t y, uint32_t slice_index, uint32_t mip = 0) const { auto &mip_info = mips[mip]; T *slice = reinterpret_cast(buffer + mip_info.offset); slice += slice_index * mip_info.block_row_length * mip_info.block_image_height; slice += y * mip_info.block_row_length; slice += x; return slice; } inline void *data_opaque(uint32_t x, uint32_t y, uint32_t slice_index, uint32_t mip = 0) const { auto &mip_info = mips[mip]; uint8_t *slice = buffer + mip_info.offset; size_t off = slice_index * mip_info.block_row_length * mip_info.block_image_height; off += y * mip_info.block_row_length; off += x; return slice + off * block_stride; } template inline T *data_generic() const { return data_generic(0, 0, 0, 0); } template inline T *data_1d(uint32_t x, uint32_t layer = 0, uint32_t mip = 0) const { assert(sizeof(T) == block_stride); assert(buffer); assert(image_type == VK_IMAGE_TYPE_1D); assert(buffer_size == required_size); return data_generic(x, 0, layer, mip); } template inline T *data_2d(uint32_t x, uint32_t y, uint32_t layer = 0, uint32_t mip = 0) const { assert(sizeof(T) == block_stride); assert(buffer); assert(image_type == VK_IMAGE_TYPE_2D); assert(buffer_size == required_size); return data_generic(x, y, layer, mip); } template inline T *data_3d(uint32_t x, uint32_t y, uint32_t z, uint32_t mip = 0) const { assert(sizeof(T) == block_stride); assert(buffer); assert(image_type == VK_IMAGE_TYPE_3D); assert(buffer_size == required_size); return data_generic(x, y, z, mip); } void build_buffer_image_copies(Util::SmallVector &copies) const; private: uint8_t *buffer = nullptr; size_t buffer_size = 0; VkImageType image_type = VK_IMAGE_TYPE_MAX_ENUM; VkFormat format = VK_FORMAT_UNDEFINED; size_t required_size = 0; uint32_t block_stride = 1; uint32_t mip_levels = 1; uint32_t array_layers = 1; uint32_t block_dim_x = 1; uint32_t block_dim_y = 1; MipInfo mips[16]; void fill_mipinfo(uint32_t width, uint32_t height, uint32_t depth); }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/type_to_string.hpp000066400000000000000000000070551415063341600246320ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include namespace Vulkan { static inline const char *layout_to_string(VkImageLayout layout) { switch (layout) { case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: return "SHADER_READ_ONLY"; case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL: return "DS_READ_ONLY"; case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: return "DS"; case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: return "COLOR"; case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: return "TRANSFER_DST"; case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: return "TRANSFER_SRC"; case VK_IMAGE_LAYOUT_GENERAL: return "GENERAL"; case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: return "PRESENT"; default: return "UNDEFINED"; } } static inline std::string access_flags_to_string(VkAccessFlags flags) { std::string result; if (flags & VK_ACCESS_SHADER_READ_BIT) result += "SHADER_READ "; if (flags & VK_ACCESS_SHADER_WRITE_BIT) result += "SHADER_WRITE "; if (flags & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT) result += "DS_WRITE "; if (flags & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT) result += "DS_READ "; if (flags & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT) result += "COLOR_READ "; if (flags & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) result += "COLOR_WRITE "; if (flags & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT) result += "INPUT_READ "; if (flags & VK_ACCESS_TRANSFER_WRITE_BIT) result += "TRANSFER_WRITE "; if (flags & VK_ACCESS_TRANSFER_READ_BIT) result += "TRANSFER_READ "; if (flags & VK_ACCESS_UNIFORM_READ_BIT) result += "UNIFORM_READ "; if (!result.empty()) result.pop_back(); else result = "NONE"; return result; } static inline std::string stage_flags_to_string(VkPipelineStageFlags flags) { std::string result; if (flags & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT) result += "GRAPHICS "; if (flags & (VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)) result += "DEPTH "; if (flags & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) result += "COLOR "; if (flags & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT) result += "FRAGMENT "; if (flags & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT) result += "COMPUTE "; if (flags & VK_PIPELINE_STAGE_TRANSFER_BIT) result += "TRANSFER "; if (flags & (VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)) result += "VERTEX "; if (!result.empty()) result.pop_back(); else result = "NONE"; return result; } }ares-126/ares/n64/vulkan/parallel-rdp/vulkan/vulkan_common.hpp000066400000000000000000000037641415063341600244340ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "intrusive.hpp" #include "object_pool.hpp" #include "intrusive_hash_map.hpp" namespace Vulkan { #ifdef GRANITE_VULKAN_MT using HandleCounter = Util::MultiThreadCounter; #else using HandleCounter = Util::SingleThreadCounter; #endif #ifdef GRANITE_VULKAN_MT template using VulkanObjectPool = Util::ThreadSafeObjectPool; template using VulkanCache = Util::ThreadSafeIntrusiveHashMapReadCached; template using VulkanCacheReadWrite = Util::ThreadSafeIntrusiveHashMap; #else template using VulkanObjectPool = Util::ObjectPool; template using VulkanCache = Util::IntrusiveHashMap; template using VulkanCacheReadWrite = Util::IntrusiveHashMap; #endif enum QueueIndices { QUEUE_INDEX_GRAPHICS, QUEUE_INDEX_COMPUTE, QUEUE_INDEX_TRANSFER, QUEUE_INDEX_VIDEO_DECODE, QUEUE_INDEX_COUNT }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/vulkan_headers.hpp000066400000000000000000000044221415063341600245470ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #if defined(_WIN32) && !defined(VK_USE_PLATFORM_WIN32_KHR) #define VK_USE_PLATFORM_WIN32_KHR #endif #if defined(GRANITE_VULKAN_BETA) && !defined(VK_ENABLE_BETA_EXTENSIONS) #define VK_ENABLE_BETA_EXTENSIONS #endif #include "volk.h" #include #include "logging.hpp" #include #ifdef VK_USE_PLATFORM_XLIB_XRANDR_EXT // Workaround silly Xlib headers that define macros for these globally :( #undef None #undef Bool #endif #ifdef VULKAN_DEBUG #define VK_ASSERT(x) \ do \ { \ if (!bool(x)) \ { \ LOGE("Vulkan error at %s:%d.\n", __FILE__, __LINE__); \ abort(); \ } \ } while (0) #else #define VK_ASSERT(x) ((void)0) #endif namespace Vulkan { struct NoCopyNoMove { NoCopyNoMove() = default; NoCopyNoMove(const NoCopyNoMove &) = delete; void operator=(const NoCopyNoMove &) = delete; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/vulkan_prerotate.hpp000066400000000000000000000047661415063341600251540ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" namespace Vulkan { // FIXME: Also consider that we might have to flip X or Y w.r.t. dimensions, // but that only matters for partial rendering ... static inline bool surface_transform_swaps_xy(VkSurfaceTransformFlagBitsKHR transform) { return (transform & ( VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR | VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR | VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)) != 0; } static inline void viewport_swap_xy(VkViewport &vp) { std::swap(vp.x, vp.y); std::swap(vp.width, vp.height); } static inline void rect2d_swap_xy(VkRect2D &rect) { std::swap(rect.offset.x, rect.offset.y); std::swap(rect.extent.width, rect.extent.height); } static inline void build_prerotate_matrix_2x2(VkSurfaceTransformFlagBitsKHR pre_rotate, float mat[4]) { // TODO: HORIZONTAL_MIRROR. switch (pre_rotate) { default: mat[0] = 1.0f; mat[1] = 0.0f; mat[2] = 0.0f; mat[3] = 1.0f; break; case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR: mat[0] = 0.0f; mat[1] = 1.0f; mat[2] = -1.0f; mat[3] = 0.0f; break; case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR: mat[0] = 0.0f; mat[1] = -1.0f; mat[2] = 1.0f; mat[3] = 0.0f; break; case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR: mat[0] = -1.0f; mat[1] = 0.0f; mat[2] = 0.0f; mat[3] = -1.0f; break; } } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/wsi.cpp000066400000000000000000001036131415063341600223530ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #include "wsi.hpp" #include "quirks.hpp" #include using namespace std; namespace Vulkan { WSI::WSI() { const char *frame_time_ms = getenv("GRANITE_FRAME_TIME_MS"); if (frame_time_ms) { auto period_ms = atol(frame_time_ms); LOGI("Limiting frame time to %ld ms.\n", period_ms); if (!frame_limiter.begin_interval_ns(1000000ull * period_ms)) LOGE("Failed to begin timer.\n"); } } void WSIPlatform::set_window_title(const string &) { } uintptr_t WSIPlatform::get_fullscreen_monitor() { return 0; } void WSI::set_window_title(const string &title) { if (platform) platform->set_window_title(title); } double WSI::get_smooth_elapsed_time() const { return smooth_elapsed_time; } double WSI::get_smooth_frame_time() const { return smooth_frame_time; } float WSIPlatform::get_estimated_frame_presentation_duration() { // Just assume 60 FPS for now. // TODO: Be more intelligent. return 1.0f / 60.0f; } float WSI::get_estimated_video_latency() { if (using_display_timing) { // Very accurate estimate. double latency = timing.get_current_latency(); return float(latency); } else { // Very rough estimate. unsigned latency_frames = device->get_num_swapchain_images(); if (latency_frames > 0) latency_frames--; if (platform) { float frame_duration = platform->get_estimated_frame_presentation_duration(); return frame_duration * float(latency_frames); } else return -1.0f; } } bool WSI::init_external_context(unique_ptr fresh_context) { context = move(fresh_context); // Need to have a dummy swapchain in place before we issue create device events. device.reset(new Device); device->set_context(*context); device->init_external_swapchain({ ImageHandle(nullptr) }); platform->event_device_created(device.get()); table = &context->get_device_table(); return true; } bool WSI::init_external_swapchain(vector swapchain_images_) { swapchain_width = platform->get_surface_width(); swapchain_height = platform->get_surface_height(); swapchain_aspect_ratio = platform->get_aspect_ratio(); external_swapchain_images = move(swapchain_images_); swapchain_width = external_swapchain_images.front()->get_width(); swapchain_height = external_swapchain_images.front()->get_height(); swapchain_format = external_swapchain_images.front()->get_format(); LOGI("Created swapchain %u x %u (fmt: %u).\n", swapchain_width, swapchain_height, static_cast(swapchain_format)); platform->event_swapchain_destroyed(); platform->event_swapchain_created(device.get(), swapchain_width, swapchain_height, swapchain_aspect_ratio, external_swapchain_images.size(), swapchain_format, swapchain_current_prerotate); device->init_external_swapchain(this->external_swapchain_images); platform->get_frame_timer().reset(); external_acquire.reset(); external_release.reset(); return true; } void WSI::set_platform(WSIPlatform *platform_) { platform = platform_; } bool WSI::init(unsigned num_thread_indices, const Context::SystemHandles &system_handles) { auto instance_ext = platform->get_instance_extensions(); auto device_ext = platform->get_device_extensions(); context.reset(new Context); context->set_num_thread_indices(num_thread_indices); context->set_system_handles(system_handles); if (!context->init_instance_and_device(instance_ext.data(), instance_ext.size(), device_ext.data(), device_ext.size())) return false; device.reset(new Device); device->set_context(*context); table = &context->get_device_table(); platform->event_device_created(device.get()); surface = platform->create_surface(context->get_instance(), context->get_gpu()); if (surface == VK_NULL_HANDLE) return false; unsigned width = platform->get_surface_width(); unsigned height = platform->get_surface_height(); swapchain_aspect_ratio = platform->get_aspect_ratio(); VkBool32 supported = VK_FALSE; uint32_t queue_present_support = 0; for (auto &index : context->get_queue_info().family_indices) { if (index != VK_QUEUE_FAMILY_IGNORED) { if (vkGetPhysicalDeviceSurfaceSupportKHR(context->get_gpu(), index, surface, &supported) == VK_SUCCESS && supported) { queue_present_support |= 1u << index; } } } if ((queue_present_support & (1u << context->get_queue_info().family_indices[QUEUE_INDEX_GRAPHICS])) == 0) return false; device->set_swapchain_queue_family_support(queue_present_support); if (!blocking_init_swapchain(width, height)) return false; device->init_swapchain(swapchain_images, swapchain_width, swapchain_height, swapchain_format, swapchain_current_prerotate, current_extra_usage | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); platform->get_frame_timer().reset(); return true; } void WSI::init_surface_and_swapchain(VkSurfaceKHR new_surface) { LOGI("init_surface_and_swapchain()\n"); if (new_surface != VK_NULL_HANDLE) { VK_ASSERT(surface == VK_NULL_HANDLE); surface = new_surface; } swapchain_width = platform->get_surface_width(); swapchain_height = platform->get_surface_height(); update_framebuffer(swapchain_width, swapchain_height); } void WSI::drain_swapchain() { release_semaphores.clear(); device->set_acquire_semaphore(0, Semaphore{}); device->consume_release_semaphore(); device->wait_idle(); } void WSI::tear_down_swapchain() { drain_swapchain(); if (swapchain != VK_NULL_HANDLE) table->vkDestroySwapchainKHR(context->get_device(), swapchain, nullptr); swapchain = VK_NULL_HANDLE; has_acquired_swapchain_index = false; } void WSI::deinit_surface_and_swapchain() { LOGI("deinit_surface_and_swapchain()\n"); tear_down_swapchain(); if (surface != VK_NULL_HANDLE) vkDestroySurfaceKHR(context->get_instance(), surface, nullptr); surface = VK_NULL_HANDLE; platform->event_swapchain_destroyed(); } void WSI::set_external_frame(unsigned index, Semaphore acquire_semaphore, double frame_time) { external_frame_index = index; external_acquire = move(acquire_semaphore); frame_is_external = true; external_frame_time = frame_time; } bool WSI::begin_frame_external() { device->next_frame_context(); // Need to handle this stuff from outside. if (has_acquired_swapchain_index) return false; auto frame_time = platform->get_frame_timer().frame(external_frame_time); auto elapsed_time = platform->get_frame_timer().get_elapsed(); // Assume we have been given a smooth frame pacing. smooth_frame_time = frame_time; smooth_elapsed_time = elapsed_time; // Poll after acquire as well for optimal latency. platform->poll_input(); swapchain_index = external_frame_index; platform->event_frame_tick(frame_time, elapsed_time); platform->event_swapchain_index(device.get(), swapchain_index); device->set_acquire_semaphore(swapchain_index, external_acquire); external_acquire.reset(); return true; } Semaphore WSI::consume_external_release_semaphore() { Semaphore sem; swap(external_release, sem); return sem; } //#define VULKAN_WSI_TIMING_DEBUG bool WSI::begin_frame() { if (frame_is_external) return begin_frame_external(); #ifdef VULKAN_WSI_TIMING_DEBUG auto next_frame_start = Util::get_current_time_nsecs(); #endif device->next_frame_context(); #ifdef VULKAN_WSI_TIMING_DEBUG auto next_frame_end = Util::get_current_time_nsecs(); LOGI("Waited for vacant frame context for %.3f ms.\n", (next_frame_end - next_frame_start) * 1e-6); #endif if (swapchain == VK_NULL_HANDLE || platform->should_resize() || swapchain_is_suboptimal) { update_framebuffer(platform->get_surface_width(), platform->get_surface_height()); platform->acknowledge_resize(); } if (swapchain == VK_NULL_HANDLE) { LOGE("Completely lost swapchain. Cannot continue.\n"); return false; } if (has_acquired_swapchain_index) return true; external_release.reset(); VkResult result; do { auto acquire = device->request_legacy_semaphore(); // For adaptive low latency we don't want to observe the time it takes to wait for // WSI semaphore as part of our latency, // which means we will never get sub-frame latency on some implementations, // so block on that first. Fence fence; if (timing.get_options().latency_limiter == LatencyLimiter::AdaptiveLowLatency) fence = device->request_legacy_fence(); #ifdef VULKAN_WSI_TIMING_DEBUG auto acquire_start = Util::get_current_time_nsecs(); #endif auto acquire_ts = device->write_calibrated_timestamp(); result = table->vkAcquireNextImageKHR(context->get_device(), swapchain, UINT64_MAX, acquire->get_semaphore(), fence ? fence->get_fence() : VK_NULL_HANDLE, &swapchain_index); device->register_time_interval("WSI", std::move(acquire_ts), device->write_calibrated_timestamp(), "acquire"); #if defined(ANDROID) // Android 10 can return suboptimal here, only because of pre-transform. // We don't care about that, and treat this as success. if (result == VK_SUBOPTIMAL_KHR && !support_prerotate) result = VK_SUCCESS; #endif if ((result >= 0) && fence) fence->wait(); if (result == VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT) { LOGE("Lost exclusive full-screen ...\n"); } #ifdef VULKAN_WSI_TIMING_DEBUG auto acquire_end = Util::get_current_time_nsecs(); LOGI("vkAcquireNextImageKHR took %.3f ms.\n", (acquire_end - acquire_start) * 1e-6); #endif if (result == VK_SUBOPTIMAL_KHR) { #ifdef VULKAN_DEBUG LOGI("AcquireNextImageKHR is suboptimal, will recreate.\n"); #endif swapchain_is_suboptimal = true; } if (result >= 0) { has_acquired_swapchain_index = true; acquire->signal_external(); auto frame_time = platform->get_frame_timer().frame(); auto elapsed_time = platform->get_frame_timer().get_elapsed(); if (using_display_timing) timing.begin_frame(frame_time, elapsed_time); smooth_frame_time = frame_time; smooth_elapsed_time = elapsed_time; // Poll after acquire as well for optimal latency. platform->poll_input(); platform->event_frame_tick(frame_time, elapsed_time); platform->event_swapchain_index(device.get(), swapchain_index); device->set_acquire_semaphore(swapchain_index, acquire); } else if (result == VK_ERROR_OUT_OF_DATE_KHR || result == VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT) { VK_ASSERT(swapchain_width != 0); VK_ASSERT(swapchain_height != 0); tear_down_swapchain(); if (!blocking_init_swapchain(swapchain_width, swapchain_height)) return false; device->init_swapchain(swapchain_images, swapchain_width, swapchain_height, swapchain_format, swapchain_current_prerotate, current_extra_usage | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); } else { return false; } } while (result != VK_SUCCESS); return true; } bool WSI::end_frame() { device->end_frame_context(); if (frame_limiter.is_active()) frame_limiter.wait_interval(); // Take ownership of the release semaphore so that the external user can use it. if (frame_is_external) { // If we didn't render into the swapchain this frame, we will return a blank semaphore. external_release = device->consume_release_semaphore(); if (external_release && !external_release->is_signalled()) abort(); frame_is_external = false; } else { if (!device->swapchain_touched()) return true; has_acquired_swapchain_index = false; auto release = device->consume_release_semaphore(); VK_ASSERT(release); VK_ASSERT(release->is_signalled()); auto release_semaphore = release->get_semaphore(); VK_ASSERT(release_semaphore != VK_NULL_HANDLE); VkResult result = VK_SUCCESS; VkPresentInfoKHR info = { VK_STRUCTURE_TYPE_PRESENT_INFO_KHR }; info.waitSemaphoreCount = 1; info.pWaitSemaphores = &release_semaphore; info.swapchainCount = 1; info.pSwapchains = &swapchain; info.pImageIndices = &swapchain_index; info.pResults = &result; VkPresentTimeGOOGLE present_time; VkPresentTimesInfoGOOGLE present_timing = { VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE }; present_timing.swapchainCount = 1; present_timing.pTimes = &present_time; if (using_display_timing && timing.fill_present_info_timing(present_time)) { info.pNext = &present_timing; } #ifdef VULKAN_WSI_TIMING_DEBUG auto present_start = Util::get_current_time_nsecs(); #endif auto present_ts = device->write_calibrated_timestamp(); VkResult overall = table->vkQueuePresentKHR(device->get_current_present_queue(), &info); device->register_time_interval("WSI", std::move(present_ts), device->write_calibrated_timestamp(), "present"); #if defined(ANDROID) // Android 10 can return suboptimal here, only because of pre-transform. // We don't care about that, and treat this as success. if (overall == VK_SUBOPTIMAL_KHR && !support_prerotate) overall = VK_SUCCESS; if (result == VK_SUBOPTIMAL_KHR && !support_prerotate) result = VK_SUCCESS; #endif if (overall == VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT || result == VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT) { LOGE("Lost exclusive full-screen ...\n"); } #ifdef VULKAN_WSI_TIMING_DEBUG auto present_end = Util::get_current_time_nsecs(); LOGI("vkQueuePresentKHR took %.3f ms.\n", (present_end - present_start) * 1e-6); #endif if (overall == VK_SUBOPTIMAL_KHR || result == VK_SUBOPTIMAL_KHR) { #ifdef VULKAN_DEBUG LOGI("QueuePresent is suboptimal, will recreate.\n"); #endif swapchain_is_suboptimal = true; } if (overall < 0 || result < 0) { LOGE("vkQueuePresentKHR failed.\n"); tear_down_swapchain(); return false; } else { release->wait_external(); // Cannot release the WSI wait semaphore until we observe that the image has been // waited on again. release_semaphores[swapchain_index] = release; } // Re-init swapchain. if (present_mode != current_present_mode || srgb_backbuffer_enable != current_srgb_backbuffer_enable || extra_usage != current_extra_usage) { current_present_mode = present_mode; current_srgb_backbuffer_enable = srgb_backbuffer_enable; current_extra_usage = extra_usage; update_framebuffer(swapchain_width, swapchain_height); } } return true; } void WSI::update_framebuffer(unsigned width, unsigned height) { if (context && device) { drain_swapchain(); if (blocking_init_swapchain(width, height)) { device->init_swapchain(swapchain_images, swapchain_width, swapchain_height, swapchain_format, swapchain_current_prerotate, current_extra_usage | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT); } } } void WSI::set_present_mode(PresentMode mode) { present_mode = mode; if (!has_acquired_swapchain_index && present_mode != current_present_mode) { current_present_mode = present_mode; update_framebuffer(swapchain_width, swapchain_height); } } void WSI::set_extra_usage_flags(VkImageUsageFlags usage) { extra_usage = usage; if (!has_acquired_swapchain_index && extra_usage != current_extra_usage) { current_extra_usage = extra_usage; update_framebuffer(swapchain_width, swapchain_height); } } void WSI::set_backbuffer_srgb(bool enable) { srgb_backbuffer_enable = enable; if (!has_acquired_swapchain_index && srgb_backbuffer_enable != current_srgb_backbuffer_enable) { current_srgb_backbuffer_enable = srgb_backbuffer_enable; update_framebuffer(swapchain_width, swapchain_height); } } void WSI::deinit_external() { if (platform) platform->release_resources(); if (context) { tear_down_swapchain(); platform->event_swapchain_destroyed(); } if (surface != VK_NULL_HANDLE) vkDestroySurfaceKHR(context->get_instance(), surface, nullptr); if (platform) platform->event_device_destroyed(); external_release.reset(); external_acquire.reset(); external_swapchain_images.clear(); device.reset(); context.reset(); using_display_timing = false; } bool WSI::blocking_init_swapchain(unsigned width, unsigned height) { SwapchainError err; unsigned retry_counter = 0; do { swapchain_aspect_ratio = platform->get_aspect_ratio(); err = init_swapchain(width, height); if (err == SwapchainError::Error) { if (++retry_counter > 3) return false; // Try to not reuse the swapchain. tear_down_swapchain(); } else if (err == SwapchainError::NoSurface && platform->alive(*this)) { platform->poll_input(); this_thread::sleep_for(chrono::milliseconds(10)); } } while (err != SwapchainError::None); return swapchain != VK_NULL_HANDLE; } VkSurfaceFormatKHR WSI::find_suitable_present_format(const std::vector &formats) const { size_t format_count = formats.size(); VkSurfaceFormatKHR format = { VK_FORMAT_UNDEFINED }; VkFormatFeatureFlags features = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT; if ((current_extra_usage & VK_IMAGE_USAGE_STORAGE_BIT) != 0) features |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT; if (format_count == 0) { LOGE("Surface has no formats?\n"); return format; } for (size_t i = 0; i < format_count; i++) { if (!device->image_format_is_supported(formats[i].format, features)) continue; if (current_srgb_backbuffer_enable) { if (formats[i].format == VK_FORMAT_R8G8B8A8_SRGB || formats[i].format == VK_FORMAT_B8G8R8A8_SRGB || formats[i].format == VK_FORMAT_A8B8G8R8_SRGB_PACK32) { format = formats[i]; break; } } else { if (formats[i].format == VK_FORMAT_R8G8B8A8_UNORM || formats[i].format == VK_FORMAT_B8G8R8A8_UNORM || formats[i].format == VK_FORMAT_A8B8G8R8_UNORM_PACK32) { format = formats[i]; break; } } } return format; } WSI::SwapchainError WSI::init_swapchain(unsigned width, unsigned height) { if (surface == VK_NULL_HANDLE) { LOGE("Cannot create swapchain with surface == VK_NULL_HANDLE.\n"); return SwapchainError::Error; } VkSurfaceCapabilitiesKHR surface_properties; VkPhysicalDeviceSurfaceInfo2KHR surface_info = { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR }; surface_info.surface = surface; bool use_surface_info = device->get_device_features().supports_surface_capabilities2; bool use_application_controlled_exclusive_fullscreen = false; #ifdef _WIN32 VkSurfaceFullScreenExclusiveInfoEXT exclusive_info = { VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT }; VkSurfaceFullScreenExclusiveWin32InfoEXT exclusive_info_win32 = { VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT }; HMONITOR monitor = reinterpret_cast(platform->get_fullscreen_monitor()); if (!device->get_device_features().supports_full_screen_exclusive) monitor = nullptr; surface_info.pNext = &exclusive_info; if (monitor != nullptr) { exclusive_info.pNext = &exclusive_info_win32; exclusive_info_win32.hmonitor = monitor; LOGI("Win32: Got a full-screen monitor.\n"); } else LOGI("Win32: Not running full-screen.\n"); const char *exclusive = getenv("GRANITE_EXCLUSIVE_FULL_SCREEN"); bool prefer_exclusive = exclusive && strtoul(exclusive, nullptr, 0) != 0; if (prefer_exclusive) { LOGI("Win32: Opting in to exclusive full-screen!\n"); exclusive_info.fullScreenExclusive = VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT; } else { LOGI("Win32: Opting out of exclusive full-screen!\n"); exclusive_info.fullScreenExclusive = VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT; } #endif auto gpu = context->get_gpu(); if (use_surface_info) { VkSurfaceCapabilities2KHR surface_capabilities2 = { VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR }; #ifdef _WIN32 VkSurfaceCapabilitiesFullScreenExclusiveEXT capability_full_screen_exclusive = { VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT }; if (device->get_device_features().supports_full_screen_exclusive && exclusive_info_win32.hmonitor) { surface_capabilities2.pNext = &capability_full_screen_exclusive; capability_full_screen_exclusive.pNext = &exclusive_info_win32; } #endif if (vkGetPhysicalDeviceSurfaceCapabilities2KHR(gpu, &surface_info, &surface_capabilities2) != VK_SUCCESS) return SwapchainError::Error; surface_properties = surface_capabilities2.surfaceCapabilities; #ifdef _WIN32 if (capability_full_screen_exclusive.fullScreenExclusiveSupported) LOGI("Surface could support app-controlled exclusive fullscreen.\n"); use_application_controlled_exclusive_fullscreen = exclusive_info.fullScreenExclusive == VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT && capability_full_screen_exclusive.fullScreenExclusiveSupported == VK_TRUE; if (monitor == nullptr) use_application_controlled_exclusive_fullscreen = false; #endif if (use_application_controlled_exclusive_fullscreen) { LOGI("Using app-controlled exclusive fullscreen.\n"); #ifdef _WIN32 exclusive_info.fullScreenExclusive = VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT; exclusive_info.pNext = &exclusive_info_win32; #endif } else { LOGI("Not using app-controlled exclusive fullscreen.\n"); } } else { if (vkGetPhysicalDeviceSurfaceCapabilitiesKHR(gpu, surface, &surface_properties) != VK_SUCCESS) return SwapchainError::Error; } // Happens on Windows when you minimize a window. if (surface_properties.maxImageExtent.width == 0 && surface_properties.maxImageExtent.height == 0) return SwapchainError::NoSurface; uint32_t format_count; vector formats; if (use_surface_info) { if (vkGetPhysicalDeviceSurfaceFormats2KHR(gpu, &surface_info, &format_count, nullptr) != VK_SUCCESS) return SwapchainError::Error; vector formats2(format_count); for (auto &f : formats2) { f = {}; f.sType = VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR; } if (vkGetPhysicalDeviceSurfaceFormats2KHR(gpu, &surface_info, &format_count, formats2.data()) != VK_SUCCESS) return SwapchainError::Error; formats.reserve(format_count); for (auto &f : formats2) formats.push_back(f.surfaceFormat); } else { if (vkGetPhysicalDeviceSurfaceFormatsKHR(gpu, surface, &format_count, nullptr) != VK_SUCCESS) return SwapchainError::Error; formats.resize(format_count); if (vkGetPhysicalDeviceSurfaceFormatsKHR(gpu, surface, &format_count, formats.data()) != VK_SUCCESS) return SwapchainError::Error; } if (current_extra_usage && support_prerotate) { LOGW("Disabling prerotate support due to extra usage flags in swapchain.\n"); support_prerotate = false; } if (current_extra_usage & ~surface_properties.supportedUsageFlags) { LOGW("Attempting to use unsupported usage flags 0x%x for swapchain.\n", current_extra_usage); current_extra_usage &= surface_properties.supportedUsageFlags; extra_usage = current_extra_usage; } auto surface_format = find_suitable_present_format(formats); if (surface_format.format == VK_FORMAT_UNDEFINED) { LOGW("Could not find supported format for swapchain usage flags 0x%x.\n", current_extra_usage); current_extra_usage = 0; extra_usage = 0; surface_format = find_suitable_present_format(formats); } static const char *transform_names[] = { "IDENTITY_BIT_KHR", "ROTATE_90_BIT_KHR", "ROTATE_180_BIT_KHR", "ROTATE_270_BIT_KHR", "HORIZONTAL_MIRROR_BIT_KHR", "HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR", "HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR", "HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR", "INHERIT_BIT_KHR", }; LOGI("Current transform is enum 0x%x.\n", unsigned(surface_properties.currentTransform)); for (unsigned i = 0; i <= 8; i++) { if (surface_properties.supportedTransforms & (1u << i)) LOGI("Supported transform 0x%x: %s.\n", 1u << i, transform_names[i]); } VkSurfaceTransformFlagBitsKHR pre_transform; if (!support_prerotate && (surface_properties.supportedTransforms & VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR) != 0) pre_transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; else { // Only attempt to use prerotate if we can deal with it purely using a XY clip fixup. // For horizontal flip we need to start flipping front-face as well ... if ((surface_properties.currentTransform & ( VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR | VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR | VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)) != 0) pre_transform = surface_properties.currentTransform; else pre_transform = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; } if (pre_transform != surface_properties.currentTransform) { LOGW("surfaceTransform (0x%x) != currentTransform (0x%u). Might get performance penalty.\n", unsigned(pre_transform), unsigned(surface_properties.currentTransform)); } swapchain_current_prerotate = pre_transform; VkExtent2D swapchain_size; LOGI("Swapchain current extent: %d x %d\n", int(surface_properties.currentExtent.width), int(surface_properties.currentExtent.height)); if (width == 0) { if (surface_properties.currentExtent.width != ~0u) width = surface_properties.currentExtent.width; else width = 1280; LOGI("Auto selected width = %u.\n", width); } if (height == 0) { if (surface_properties.currentExtent.height != ~0u) height = surface_properties.currentExtent.height; else height = 720; LOGI("Auto selected height = %u.\n", height); } // Try to match the swapchain size up with what we expect w.r.t. aspect ratio. float target_aspect_ratio = float(width) / float(height); if ((swapchain_aspect_ratio > 1.0f && target_aspect_ratio < 1.0f) || (swapchain_aspect_ratio < 1.0f && target_aspect_ratio > 1.0f)) { swap(width, height); } // If we are using pre-rotate of 90 or 270 degrees, we need to flip width and height again. if (swapchain_current_prerotate & (VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR | VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR | VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR)) { swap(width, height); } // Clamp the target width, height to boundaries. swapchain_size.width = max(min(width, surface_properties.maxImageExtent.width), surface_properties.minImageExtent.width); swapchain_size.height = max(min(height, surface_properties.maxImageExtent.height), surface_properties.minImageExtent.height); uint32_t num_present_modes; vector present_modes; #ifdef _WIN32 if (use_surface_info && device->get_device_features().supports_full_screen_exclusive) { if (vkGetPhysicalDeviceSurfacePresentModes2EXT(gpu, &surface_info, &num_present_modes, nullptr) != VK_SUCCESS) return SwapchainError::Error; present_modes.resize(num_present_modes); if (vkGetPhysicalDeviceSurfacePresentModes2EXT(gpu, &surface_info, &num_present_modes, present_modes.data()) != VK_SUCCESS) return SwapchainError::Error; } else #endif { if (vkGetPhysicalDeviceSurfacePresentModesKHR(gpu, surface, &num_present_modes, nullptr) != VK_SUCCESS) return SwapchainError::Error; present_modes.resize(num_present_modes); if (vkGetPhysicalDeviceSurfacePresentModesKHR(gpu, surface, &num_present_modes, present_modes.data()) != VK_SUCCESS) return SwapchainError::Error; } VkPresentModeKHR swapchain_present_mode = VK_PRESENT_MODE_FIFO_KHR; bool use_vsync = current_present_mode == PresentMode::SyncToVBlank; if (!use_vsync) { bool allow_mailbox = current_present_mode != PresentMode::UnlockedForceTearing; bool allow_immediate = current_present_mode != PresentMode::UnlockedNoTearing; #ifdef _WIN32 if (device->get_gpu_properties().vendorID == VENDOR_ID_NVIDIA) { // If we're trying to go exclusive full-screen, // we need to ban certain types of present modes which apparently do not work as we expect. if (use_application_controlled_exclusive_fullscreen) allow_mailbox = false; else allow_immediate = false; } #endif for (uint32_t i = 0; i < num_present_modes; i++) { if ((allow_immediate && present_modes[i] == VK_PRESENT_MODE_IMMEDIATE_KHR) || (allow_mailbox && present_modes[i] == VK_PRESENT_MODE_MAILBOX_KHR)) { swapchain_present_mode = present_modes[i]; break; } } } uint32_t desired_swapchain_images = 3; { const char *num_images = getenv("GRANITE_VULKAN_SWAPCHAIN_IMAGES"); if (num_images) desired_swapchain_images = uint32_t(strtoul(num_images, nullptr, 0)); } LOGI("Targeting %u swapchain images.\n", desired_swapchain_images); if (desired_swapchain_images < surface_properties.minImageCount) desired_swapchain_images = surface_properties.minImageCount; if ((surface_properties.maxImageCount > 0) && (desired_swapchain_images > surface_properties.maxImageCount)) desired_swapchain_images = surface_properties.maxImageCount; VkCompositeAlphaFlagBitsKHR composite_mode = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; if (surface_properties.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) composite_mode = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; else if (surface_properties.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR) composite_mode = VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR; else if (surface_properties.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR) composite_mode = VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR; else if (surface_properties.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR) composite_mode = VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR; else LOGW("No sensible composite mode supported?\n"); VkSwapchainKHR old_swapchain = swapchain; VkSwapchainCreateInfoKHR info = { VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR }; info.surface = surface; info.minImageCount = desired_swapchain_images; info.imageFormat = surface_format.format; info.imageColorSpace = surface_format.colorSpace; info.imageExtent.width = swapchain_size.width; info.imageExtent.height = swapchain_size.height; info.imageArrayLayers = 1; info.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | current_extra_usage; info.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; info.preTransform = pre_transform; info.compositeAlpha = composite_mode; info.presentMode = swapchain_present_mode; info.clipped = VK_TRUE; info.oldSwapchain = old_swapchain; #ifdef _WIN32 if (device->get_device_features().supports_full_screen_exclusive) info.pNext = &exclusive_info; #endif auto res = table->vkCreateSwapchainKHR(context->get_device(), &info, nullptr, &swapchain); if (old_swapchain != VK_NULL_HANDLE) table->vkDestroySwapchainKHR(context->get_device(), old_swapchain, nullptr); has_acquired_swapchain_index = false; #ifdef _WIN32 if (use_application_controlled_exclusive_fullscreen) { bool success = vkAcquireFullScreenExclusiveModeEXT(context->get_device(), swapchain) == VK_SUCCESS; if (success) LOGI("Successfully acquired exclusive full-screen.\n"); else LOGI("Failed to acquire exclusive full-screen. Using borderless windowed.\n"); } #endif #if 0 if (use_vsync && context->get_enabled_device_features().supports_google_display_timing) { WSITimingOptions timing_options; timing_options.swap_interval = 1; //timing_options.adaptive_swap_interval = true; //timing_options.latency_limiter = LatencyLimiter::IdealPipeline; timing.init(platform, device.get(), swapchain, timing_options); using_display_timing = true; } else #endif using_display_timing = false; if (res != VK_SUCCESS) { LOGE("Failed to create swapchain (code: %d)\n", int(res)); swapchain = VK_NULL_HANDLE; return SwapchainError::Error; } swapchain_width = swapchain_size.width; swapchain_height = swapchain_size.height; swapchain_format = surface_format.format; swapchain_is_suboptimal = false; LOGI("Created swapchain %u x %u (fmt: %u, transform: %u).\n", swapchain_width, swapchain_height, unsigned(swapchain_format), unsigned(swapchain_current_prerotate)); uint32_t image_count; if (table->vkGetSwapchainImagesKHR(context->get_device(), swapchain, &image_count, nullptr) != VK_SUCCESS) return SwapchainError::Error; swapchain_images.resize(image_count); release_semaphores.resize(image_count); if (table->vkGetSwapchainImagesKHR(context->get_device(), swapchain, &image_count, swapchain_images.data()) != VK_SUCCESS) return SwapchainError::Error; LOGI("Got %u swapchain images.\n", image_count); platform->event_swapchain_destroyed(); platform->event_swapchain_created(device.get(), swapchain_width, swapchain_height, swapchain_aspect_ratio, image_count, info.imageFormat, swapchain_current_prerotate); return SwapchainError::None; } double WSI::get_estimated_refresh_interval() const { uint64_t interval = timing.get_refresh_interval(); if (interval) return interval * 1e-9; else if (platform) return platform->get_estimated_frame_presentation_duration(); else return 0.0; } void WSI::set_support_prerotate(bool enable) { support_prerotate = enable; } VkSurfaceTransformFlagBitsKHR WSI::get_current_prerotate() const { return swapchain_current_prerotate; } WSI::~WSI() { deinit_external(); } void WSIPlatform::event_device_created(Device *) {} void WSIPlatform::event_device_destroyed() {} void WSIPlatform::event_swapchain_created(Device *, unsigned, unsigned, float, size_t, VkFormat, VkSurfaceTransformFlagBitsKHR) {} void WSIPlatform::event_swapchain_destroyed() {} void WSIPlatform::event_frame_tick(double, double) {} void WSIPlatform::event_swapchain_index(Device *, unsigned) {} void WSIPlatform::event_display_timing_stutter(uint32_t, uint32_t, uint32_t) {} } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/wsi.hpp000066400000000000000000000150411415063341600223550ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "device.hpp" #include "semaphore_manager.hpp" #include "vulkan_headers.hpp" #include "timer.hpp" #include "wsi_timing.hpp" #include #include namespace Vulkan { class WSI; class WSIPlatform { public: virtual ~WSIPlatform() = default; virtual VkSurfaceKHR create_surface(VkInstance instance, VkPhysicalDevice gpu) = 0; virtual std::vector get_instance_extensions() = 0; virtual std::vector get_device_extensions() { return { "VK_KHR_swapchain" }; } virtual VkFormat get_preferred_format() { return VK_FORMAT_B8G8R8A8_SRGB; } bool should_resize() { return resize; } void acknowledge_resize() { resize = false; } virtual uint32_t get_surface_width() = 0; virtual uint32_t get_surface_height() = 0; virtual float get_aspect_ratio() { return float(get_surface_width()) / float(get_surface_height()); } virtual bool alive(Vulkan::WSI &wsi) = 0; virtual void poll_input() = 0; virtual bool has_external_swapchain() { return false; } Util::FrameTimer &get_frame_timer() { return timer; } virtual void release_resources() { } virtual void event_device_created(Device *device); virtual void event_device_destroyed(); virtual void event_swapchain_created(Device *device, unsigned width, unsigned height, float aspect_ratio, size_t num_swapchain_images, VkFormat format, VkSurfaceTransformFlagBitsKHR pre_rotate); virtual void event_swapchain_destroyed(); virtual void event_frame_tick(double frame, double elapsed); virtual void event_swapchain_index(Device *device, unsigned index); virtual void event_display_timing_stutter(uint32_t current_serial, uint32_t observed_serial, unsigned dropped_frames); virtual float get_estimated_frame_presentation_duration(); virtual void set_window_title(const std::string &title); virtual uintptr_t get_fullscreen_monitor(); protected: bool resize = false; private: Util::FrameTimer timer; }; enum class PresentMode { SyncToVBlank, // Force FIFO UnlockedMaybeTear, // MAILBOX or IMMEDIATE UnlockedForceTearing, // Force IMMEDIATE UnlockedNoTearing // Force MAILBOX }; class WSI { public: WSI(); void set_platform(WSIPlatform *platform); void set_present_mode(PresentMode mode); void set_backbuffer_srgb(bool enable); void set_support_prerotate(bool enable); void set_extra_usage_flags(VkImageUsageFlags usage); VkSurfaceTransformFlagBitsKHR get_current_prerotate() const; PresentMode get_present_mode() const { return present_mode; } bool get_backbuffer_srgb() const { return srgb_backbuffer_enable; } bool init(unsigned num_thread_indices, const Context::SystemHandles &system_handles); bool init_external_context(std::unique_ptr context); bool init_external_swapchain(std::vector external_images); void deinit_external(); ~WSI(); inline Context &get_context() { return *context; } inline Device &get_device() { return *device; } bool begin_frame(); bool end_frame(); void set_external_frame(unsigned index, Vulkan::Semaphore acquire_semaphore, double frame_time); Vulkan::Semaphore consume_external_release_semaphore(); WSIPlatform &get_platform() { VK_ASSERT(platform); return *platform; } void deinit_surface_and_swapchain(); void init_surface_and_swapchain(VkSurfaceKHR new_surface); float get_estimated_video_latency(); void set_window_title(const std::string &title); double get_smooth_frame_time() const; double get_smooth_elapsed_time() const; double get_estimated_refresh_interval() const; WSITiming &get_timing() { return timing; } private: void update_framebuffer(unsigned width, unsigned height); std::unique_ptr context; VkSurfaceKHR surface = VK_NULL_HANDLE; VkSwapchainKHR swapchain = VK_NULL_HANDLE; std::vector swapchain_images; std::vector release_semaphores; std::unique_ptr device; const VolkDeviceTable *table = nullptr; unsigned swapchain_width = 0; unsigned swapchain_height = 0; float swapchain_aspect_ratio = 1.0f; VkFormat swapchain_format = VK_FORMAT_UNDEFINED; PresentMode current_present_mode = PresentMode::SyncToVBlank; PresentMode present_mode = PresentMode::SyncToVBlank; VkImageUsageFlags current_extra_usage = 0; VkImageUsageFlags extra_usage = 0; bool swapchain_is_suboptimal = false; enum class SwapchainError { None, NoSurface, Error }; SwapchainError init_swapchain(unsigned width, unsigned height); bool blocking_init_swapchain(unsigned width, unsigned height); uint32_t swapchain_index = 0; bool has_acquired_swapchain_index = false; WSIPlatform *platform = nullptr; std::vector external_swapchain_images; unsigned external_frame_index = 0; Vulkan::Semaphore external_acquire; Vulkan::Semaphore external_release; bool frame_is_external = false; bool using_display_timing = false; bool srgb_backbuffer_enable = true; bool current_srgb_backbuffer_enable = true; bool support_prerotate = false; VkSurfaceTransformFlagBitsKHR swapchain_current_prerotate = VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR; bool begin_frame_external(); double external_frame_time = 0.0; double smooth_frame_time = 0.0; double smooth_elapsed_time = 0.0; WSITiming timing; Util::FrameLimiter frame_limiter; void tear_down_swapchain(); void drain_swapchain(); VkSurfaceFormatKHR find_suitable_present_format(const std::vector &formats) const; }; } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/wsi_timing.cpp000066400000000000000000000440261415063341600237240ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define __USE_MINGW_ANSI_STDIO 1 #define __STDC_FORMAT_MACROS 1 #include #include "wsi_timing.hpp" #include "wsi.hpp" #include #include #include #ifndef _WIN32 #include #endif namespace Vulkan { void WSITiming::init(WSIPlatform *platform_, Device *device_, VkSwapchainKHR swapchain_, const WSITimingOptions &options_) { platform = platform_; device = device_->get_device(); table = &device_->get_device_table(); swapchain = swapchain_; options = options_; serial_info = {}; pacing = {}; last_frame = {}; feedback = {}; smoothing = {}; feedback.timing_buffer.resize(64); } void WSITiming::set_debug_enable(bool enable) { options.debug = enable; } void WSITiming::set_latency_limiter(LatencyLimiter limiter) { options.latency_limiter = limiter; } const WSITimingOptions &WSITiming::get_options() const { return options; } void WSITiming::set_swap_interval(unsigned interval) { if (interval == options.swap_interval || interval == 0) return; // First, extrapolate to our current serial so we can make a more correct target time using the new swap interval. uint64_t target = compute_target_present_time_for_serial(serial_info.serial); if (target) { pacing.base_serial = serial_info.serial; pacing.base_present = target; } options.swap_interval = interval; } void WSITiming::update_refresh_interval() { VkRefreshCycleDurationGOOGLE refresh; if (table->vkGetRefreshCycleDurationGOOGLE(device, swapchain, &refresh) == VK_SUCCESS) { if (!feedback.refresh_interval || options.debug) LOGI("Observed refresh rate: %.6f Hz.\n", 1e9 / refresh.refreshDuration); feedback.refresh_interval = refresh.refreshDuration; } else LOGE("Failed to get refresh cycle duration.\n"); } WSITiming::Timing *WSITiming::find_latest_timestamp(uint32_t start_serial) { for (uint32_t i = 1; i < NUM_TIMINGS - 1; i++) { uint32_t past_serial = start_serial - i; auto &past = feedback.past_timings[past_serial & NUM_TIMING_MASK]; if (past.wall_serial == past_serial && past.timing.actualPresentTime != 0) return &past; } return nullptr; } void WSITiming::update_past_presentation_timing() { // Update past presentation timings. uint32_t presentation_count; if (table->vkGetPastPresentationTimingGOOGLE(device, swapchain, &presentation_count, nullptr) != VK_SUCCESS) return; if (presentation_count) { if (presentation_count > feedback.timing_buffer.size()) feedback.timing_buffer.resize(presentation_count); auto res = table->vkGetPastPresentationTimingGOOGLE(device, swapchain, &presentation_count, feedback.timing_buffer.data()); // I have a feeling this is racy in nature and we might have received another presentation timing in-between // querying count and getting actual data, so accept INCOMPLETE here. if (res == VK_SUCCESS || res == VK_INCOMPLETE) { for (uint32_t i = 0; i < presentation_count; i++) { auto &t = feedback.past_timings[feedback.timing_buffer[i].presentID & NUM_TIMING_MASK]; if (t.wall_serial == feedback.timing_buffer[i].presentID) { t.timing = feedback.timing_buffer[i]; uint64_t gpu_done_time = (t.timing.earliestPresentTime - t.timing.presentMargin); t.slack = int64_t(t.timing.actualPresentTime - gpu_done_time); t.pipeline_latency = int64_t(gpu_done_time - t.wall_frame_begin); // Expected result unless proven otherwise. t.result = TimingResult::Expected; // Feed the heuristics on when to drop frame rate or promote it. if ((feedback.refresh_interval != 0) && (t.timing.earliestPresentTime < t.timing.actualPresentTime) && (t.timing.presentMargin > feedback.refresh_interval / 4)) { // We could have presented earlier, and we had decent GPU margin to do so. // Deal with frame dropping later. t.result = TimingResult::VeryEarly; if (options.debug) LOGI("Frame completed very early, but was held back by swap interval!\n"); } } update_frame_pacing(t.wall_serial, t.timing.actualPresentTime, false); } } } auto *timing = find_latest_timestamp(serial_info.serial); if (timing && timing->timing.actualPresentTime >= timing->wall_frame_begin) { auto total_latency = timing->timing.actualPresentTime - timing->wall_frame_begin; feedback.latency = 0.99 * feedback.latency + 0.01e-9 * total_latency; if (options.debug) { LOGI("Have presentation timing for %u frames in the past.\n", serial_info.serial - timing->timing.presentID); } if (int64_t(timing->timing.presentMargin) < 0) LOGE("Present margin is negative (%" PRId64 ") ... ?!\n", timing->timing.presentMargin); if (timing->timing.earliestPresentTime > timing->timing.actualPresentTime) LOGE("Earliest present time is > actual present time ... Bug?\n"); if (timing->timing.actualPresentTime < timing->timing.desiredPresentTime) { LOGE("Image was presented before desired present time, bug? (actual: %" PRIu64 ", desired: %" PRIu64 "\n", timing->timing.actualPresentTime, timing->timing.desiredPresentTime); } else if (feedback.refresh_interval != 0 && timing->timing.desiredPresentTime != 0) { uint64_t delta = timing->timing.actualPresentTime - timing->timing.desiredPresentTime; if (delta >= feedback.refresh_interval) { LOGE("*** Image was presented %u frames late " "(target: %.3f ms, rounded target: %.3f ms, actual: %.3f ms) compared to desired target. " "This normally happens in startup phase, but otherwise it's either a real hitch or app bug. ***\n", unsigned(delta / feedback.refresh_interval), timing->wall_frame_target * 1e-6, timing->timing.desiredPresentTime * 1e-6, timing->timing.actualPresentTime * 1e-6); } } // How much can we squeeze latency? if (options.debug) LOGI("Total latency: %.3f ms, slack time: %.3f\n", total_latency * 1e-6, timing->slack * 1e-6); if (last_frame.serial && timing->wall_serial != last_frame.serial) { double frame_time_ns = double(timing->timing.actualPresentTime - last_frame.present_time) / double(timing->wall_serial - last_frame.serial); // We only detect a hitch if we have the same swap interval target, // otherwise it might as well just be a transient state thing. if ((timing->swap_interval_target == options.swap_interval) && (feedback.refresh_interval != 0) && (frame_time_ns > 1.1 * options.swap_interval * feedback.refresh_interval)) { LOGE("*** HITCH DETECTED ***\n"); timing->result = TimingResult::TooLate; if (platform) { unsigned frame_delta = unsigned(round(frame_time_ns / (options.swap_interval * feedback.refresh_interval))); VK_ASSERT(frame_delta); unsigned dropped_frames = frame_delta - 1; platform->event_display_timing_stutter(serial_info.serial, timing->wall_serial, dropped_frames); } } if (options.debug) { LOGI("Frame time ID #%u: %.3f ms\n", timing->wall_serial, 1e-6 * frame_time_ns); } } last_frame.serial = timing->wall_serial; last_frame.present_time = timing->timing.actualPresentTime; } } void WSITiming::wait_until(int64_t nsecs) { #ifdef __linux__ timespec ts; ts.tv_sec = nsecs / 1000000000; ts.tv_nsec = nsecs % 1000000000; clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &ts, nullptr); #else (void)nsecs; #endif } uint64_t WSITiming::get_wall_time() { #ifndef _WIN32 // GOOGLE_display_timing on Linux and Android use CLOCK_MONOTONIC explicitly. timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return ts.tv_sec * 1000000000ull + ts.tv_nsec; #else return 0; #endif } void WSITiming::update_frame_pacing(uint32_t serial, uint64_t present_time, bool wall_time) { if (wall_time && !pacing.have_real_estimate) { // We don't have a refresh interval yet, just update the estimate from CPU. pacing.base_serial = serial; pacing.base_present = present_time; pacing.have_estimate = true; return; } else if (!wall_time && !pacing.have_real_estimate) { pacing.base_serial = serial; pacing.base_present = present_time; pacing.have_real_estimate = true; return; } else if (wall_time) { // We already have a correct estimate, don't update. return; } if (!feedback.refresh_interval) { // If we don't have a refresh interval yet, we cannot estimate anything. // What we can do instead is just to blindly use the latest observed timestamp as our guiding hand. if (present_time > pacing.base_present) { pacing.base_serial = serial; pacing.base_present = present_time; } } else { int32_t frame_dist = int32_t(serial - pacing.base_serial); // Don't update with the past. if (frame_dist <= 0) return; // Extrapolate timing from current. uint64_t extrapolated_present_time = pacing.base_present + feedback.refresh_interval * options.swap_interval * (serial - pacing.base_serial); int64_t error = std::abs(int64_t(extrapolated_present_time - present_time)); // If the delta is close enough (expected frame pace), // update the base ID, so we can make more accurate future estimates. // This is relevant if we want to dynamically change swap interval. // If present time is significantly larger than extrapolated time, // we can assume we had a dropped frame, so we also need to update our base estimate. if ((present_time > extrapolated_present_time) || (error < int64_t(feedback.refresh_interval / 2))) { // We must have dropped frames, or similar. // Update our base estimate. pacing.base_serial = serial; pacing.base_present = present_time; if (options.debug) { LOGI("Updating frame pacing base to serial: %u (delta: %.3f ms)\n", pacing.base_serial, 1e-6 * int64_t(present_time - extrapolated_present_time)); } } } } void WSITiming::update_frame_time_smoothing(double &frame_time, double &elapsed_time) { double target_frame_time = frame_time; if (feedback.refresh_interval) target_frame_time = double(options.swap_interval * feedback.refresh_interval) * 1e-9; double actual_elapsed = elapsed_time - smoothing.offset; smoothing.elapsed += target_frame_time; double delta = actual_elapsed - smoothing.elapsed; if (delta > std::fabs(target_frame_time * 4.0)) { // We're way off, something must have happened, reset the smoothing. // Don't jump skip the frame time, other than keeping the frame_time as-is. // We might have had a natural pause, and it doesn't make sense to report absurd frame times. // Apps needing to sync to wall time over time could use elapsed_time as a guiding hand. if (options.debug) LOGI("Detected discontinuity in smoothing algorithm!\n"); smoothing.offset = elapsed_time; smoothing.elapsed = 0.0; return; } double jitter_offset = 0.0; // Accept up to 0.5% jitter to catch up or slow down smoothly to our target elapsed time. if (delta > 0.1 * target_frame_time) jitter_offset = 0.005 * target_frame_time; else if (delta < -0.1 * target_frame_time) jitter_offset = -0.005 * target_frame_time; target_frame_time += jitter_offset; smoothing.elapsed += jitter_offset; elapsed_time = smoothing.elapsed + smoothing.offset; frame_time = target_frame_time; } uint64_t WSITiming::get_refresh_interval() const { return feedback.refresh_interval; } double WSITiming::get_current_latency() const { return feedback.latency; } void WSITiming::limit_latency(Timing &new_timing) { if (options.latency_limiter != LatencyLimiter::None) { // Try to squeeze timings by sleeping, quite shaky, but very fun :) if (feedback.refresh_interval) { int64_t target = int64_t(compute_target_present_time_for_serial(serial_info.serial)); if (options.latency_limiter == LatencyLimiter::AdaptiveLowLatency) { int64_t latency = 0; if (get_conservative_latency(latency)) { // Keep quarter frame as buffer in case this frame is heavier than normal. latency += feedback.refresh_interval >> 2; wait_until(target - latency); uint64_t old_time = new_timing.wall_frame_begin; new_timing.wall_frame_begin = get_wall_time(); if (options.debug) { LOGI("Slept for %.3f ms for latency tuning.\n", 1e-6 * (new_timing.wall_frame_begin - old_time)); } } } else if (options.latency_limiter == LatencyLimiter::IdealPipeline) { // In the ideal pipeline we have one frame for CPU to work, // then one frame for GPU to work in parallel, so we should strive for a little under 2 frames of latency here. // The assumption is that we can kick some work to GPU at least mid-way through our frame, // which will become our slack factor. int64_t latency = feedback.refresh_interval * 2; wait_until(target - latency); uint64_t old_time = new_timing.wall_frame_begin; new_timing.wall_frame_begin = get_wall_time(); if (options.debug) { LOGI("Slept for %.3f ms for latency tuning.\n", 1e-6 * (new_timing.wall_frame_begin - old_time)); } } } } } void WSITiming::begin_frame(double &frame_time, double &elapsed_time) { promote_or_demote_frame_rate(); // Update initial frame elapsed estimate, // from here, we'll try to lock the frame time to refresh_rate +/- epsilon. if (serial_info.serial == 0) { smoothing.offset = elapsed_time; smoothing.elapsed = 0.0; } serial_info.serial++; if (options.debug) LOGI("Starting WSITiming frame serial: %u\n", serial_info.serial); // On X11, this is found over time by observation, so we need to adapt it. // Only after we have observed the refresh cycle duration, we can start syncing against it. if ((serial_info.serial & 7) == 0) update_refresh_interval(); auto &new_timing = feedback.past_timings[serial_info.serial & NUM_TIMING_MASK]; new_timing.wall_serial = serial_info.serial; new_timing.wall_frame_begin = get_wall_time(); new_timing.swap_interval_target = options.swap_interval; new_timing.result = TimingResult::Unknown; new_timing.timing = {}; update_past_presentation_timing(); // Absolute minimum case, just get some initial data before we have some real estimates. update_frame_pacing(serial_info.serial, new_timing.wall_frame_begin, true); update_frame_time_smoothing(frame_time, elapsed_time); limit_latency(new_timing); new_timing.wall_frame_target = compute_target_present_time_for_serial(serial_info.serial); } bool WSITiming::get_conservative_latency(int64_t &latency) const { latency = 0; unsigned valid_latencies = 0; for (auto &timing : feedback.past_timings) { if (timing.timing.actualPresentTime >= timing.wall_frame_begin) { latency = std::max(latency, timing.pipeline_latency); valid_latencies++; } } return valid_latencies > (NUM_TIMINGS / 2); } uint64_t WSITiming::compute_target_present_time_for_serial(uint32_t serial) { if (!pacing.have_estimate) return 0; uint64_t frame_delta = serial - pacing.base_serial; frame_delta *= options.swap_interval; uint64_t target = pacing.base_present + feedback.refresh_interval * frame_delta; return target; } void WSITiming::promote_or_demote_frame_rate() { if (!options.adaptive_swap_interval) return; if (feedback.refresh_interval == 0) return; // Analyze if we should do something with frame rate. // The heuristic is something like: // - If we observe at least 3 hitches the last window of timing events, demote frame rate. // - If we observe consistent earliestPresent < actualPresent and presentMargin is at least a quarter frame, // promote frame rate. // We can only make an analysis if all timings come from same swap interval. // This also limits how often we can automatically change frame rate. unsigned frame_drops = 0; unsigned early_frames = 0; unsigned total = 0; for (auto &timing : feedback.past_timings) { if (timing.result == TimingResult::Unknown) continue; if (options.swap_interval != timing.swap_interval_target) return; total++; if (timing.result == TimingResult::VeryEarly) early_frames++; else if (timing.result == TimingResult::TooLate) frame_drops++; } // Don't have enough data. if (total < NUM_TIMINGS / 2) return; if (early_frames == total && options.swap_interval > 1) { // We can go down in swap interval, great! set_swap_interval(options.swap_interval - 1); LOGI("Adjusted swap interval down to %u!\n", options.swap_interval); } else if (frame_drops >= 3) { if (options.swap_interval < 8) // swap interval of 8, lol { set_swap_interval(options.swap_interval + 1); LOGI("Too much hitching detected, increasing swap interval to %u!\n", options.swap_interval); } else LOGI("Still detecting hitching, but reached swap interval limit.\n"); } } bool WSITiming::fill_present_info_timing(VkPresentTimeGOOGLE &time) { time.presentID = serial_info.serial; time.desiredPresentTime = compute_target_present_time_for_serial(serial_info.serial); // Want to set the desired target close enough, // but not exactly at estimated target, since we have a rounding error cliff. // Set the target a quarter frame away from real target. if (time.desiredPresentTime != 0 && feedback.refresh_interval != 0) time.desiredPresentTime -= feedback.refresh_interval >> 4; return true; } } ares-126/ares/n64/vulkan/parallel-rdp/vulkan/wsi_timing.hpp000066400000000000000000000073761415063341600237400ustar00rootroot00000000000000/* Copyright (c) 2017-2020 Hans-Kristian Arntzen * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #pragma once #include "vulkan_headers.hpp" #include namespace Vulkan { enum class LatencyLimiter { None, AdaptiveLowLatency, IdealPipeline }; struct WSITimingOptions { uint32_t swap_interval = 1; LatencyLimiter latency_limiter = LatencyLimiter::None; bool adaptive_swap_interval = false; bool debug = false; }; class WSIPlatform; class Device; class WSITiming { public: void init(WSIPlatform *platform, Device *device, VkSwapchainKHR swapchain, const WSITimingOptions &options = {}); void begin_frame(double &frame_time, double &elapsed_time); bool fill_present_info_timing(VkPresentTimeGOOGLE &time); double get_current_latency() const; void set_swap_interval(unsigned interval); void set_debug_enable(bool enable); void set_latency_limiter(LatencyLimiter limiter); // Can return 0 if we don't know the refresh interval yet. uint64_t get_refresh_interval() const; const WSITimingOptions &get_options() const; private: WSIPlatform *platform = nullptr; VkDevice device = VK_NULL_HANDLE; const VolkDeviceTable *table = nullptr; VkSwapchainKHR swapchain = VK_NULL_HANDLE; WSITimingOptions options; enum { NUM_TIMINGS = 32, NUM_TIMING_MASK = NUM_TIMINGS - 1 }; struct Serial { uint32_t serial = 0; } serial_info; enum class TimingResult { Unknown, VeryEarly, TooLate, Expected }; struct Timing { uint32_t wall_serial = 0; uint64_t wall_frame_begin = 0; uint64_t wall_frame_target = 0; uint32_t swap_interval_target = 0; TimingResult result = TimingResult::Unknown; int64_t slack = 0; int64_t pipeline_latency = 0; VkPastPresentationTimingGOOGLE timing = {}; }; struct Feedback { uint64_t refresh_interval = 0; Timing past_timings[NUM_TIMINGS]; std::vector timing_buffer; double latency = 0.0; } feedback; struct Pacing { uint32_t base_serial = 0; uint64_t base_present = 0; bool have_estimate = false; bool have_real_estimate = false; } pacing; struct FrameTimer { uint64_t present_time = 0; uint64_t serial = 0; } last_frame; struct SmoothTimer { double elapsed = 0.0; double offset = 0.0; } smoothing; uint64_t compute_target_present_time_for_serial(uint32_t serial); uint64_t get_wall_time(); void update_past_presentation_timing(); Timing *find_latest_timestamp(uint32_t start_serial); void update_frame_pacing(uint32_t id, uint64_t present_time, bool wall_time); void update_refresh_interval(); void update_frame_time_smoothing(double &frame_time, double &elapsed_time); bool get_conservative_latency(int64_t &latency) const; void wait_until(int64_t nsecs); void limit_latency(Timing &new_timing); void promote_or_demote_frame_rate(); }; } ares-126/ares/n64/vulkan/vulkan.cpp000066400000000000000000000142631415063341600171740ustar00rootroot00000000000000#include namespace ares::Nintendo64 { Vulkan vulkan; struct LoggingInterface : Util::LoggingInterface { auto log(const char* tag, const char* fmt, va_list va) -> bool { char buffer[8192]; vsnprintf(buffer, sizeof(buffer), fmt, va); //print(terminal::color::yellow(tag), buffer); return true; } } loggingInterface; struct Vulkan::Implementation { Implementation(u8* data, u32 size); ~Implementation(); ::Vulkan::Context context; ::Vulkan::Device device; ::RDP::CommandProcessor* processor = nullptr; //commands are u64 words, but the backend uses u32 swapped words. //size and offset are in u64 words. u32 buffer[0x10000] = {}; u32 queueSize = 0; u32 queueOffset = 0; ::RDP::VIScanoutBuffer scanout; std::mutex lock; std::condition_variable condition; u32 scanoutCount = 0; u32 endCount = 0; }; auto Vulkan::load(Node::Object) -> bool { Util::set_thread_logging_interface(&loggingInterface); delete implementation; implementation = new Vulkan::Implementation(rdram.ram.data, rdram.ram.size); if(!implementation->processor) { delete implementation; implementation = nullptr; } return true; } auto Vulkan::unload() -> void { delete implementation; implementation = nullptr; } auto Vulkan::render() -> bool { if(!implementation) return false; static constexpr u32 commandLength[64] = { 1, 1, 1, 1, 1, 1, 1, 1, 4, 6,12,14,12,14,20,22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; auto& command = rdp.command; auto& memory = !command.source ? rdram.ram : rsp.dmem; u32 current = command.current & ~7; u32 end = command.end & ~7; u32 length = (end - current) / 8; if(current >= end) return true; u32* buffer = implementation->buffer; u32& queueSize = implementation->queueSize; u32& queueOffset = implementation->queueOffset; if(queueSize + length >= 0x8000) return true; do { buffer[queueSize * 2 + 0] = memory.read(current); current += 4; buffer[queueSize * 2 + 1] = memory.read(current); current += 4; queueSize++; } while(--length); while(queueOffset < queueSize) { u32 op = buffer[queueOffset * 2]; u32 code = op >> 24 & 63; u32 length = commandLength[code]; if(queueOffset + length > queueSize) { //partial command, keep data around for next processing call command.start = command.current = command.end; return true; } if(code >= 8) { implementation->processor->enqueue_command(length * 2, buffer + queueOffset * 2); } if(::RDP::Op(code) == ::RDP::Op::SyncFull) { implementation->processor->wait_for_timeline(implementation->processor->signal_timeline()); rdp.syncFull(); } queueOffset += length; } queueOffset = 0; queueSize = 0; command.start = command.current = command.end; return true; } auto Vulkan::frame() -> void { if(!implementation) return; implementation->processor->begin_frame_context(); } auto Vulkan::writeWord(u32 address, u32 data) -> void { if(!implementation) return; implementation->processor->set_vi_register(::RDP::VIRegister(address), data); } auto Vulkan::scanoutAsync(bool field) -> bool { if(!implementation) return false; { //wait until we're done reading in thread before we clobber the readback buffer std::unique_lock lock{implementation->lock}; implementation->condition.wait(lock, [this]() { return implementation->scanoutCount == implementation->endCount; }); } implementation->processor->set_vi_register(::RDP::VIRegister::VCurrentLine, field); //0 steps if scanning out at upscaled resolution. //each downscale step reduces output resolution to [width, height] * max(1, upscale >> downscale_steps) ::RDP::ScanoutOptions options; options.downscale_steps = supersampleScanout ? 16 : 0; options.persist_frame_on_invalid_input = true; //this is a compatibility hack, but I'm not sure what for ... if(implementation->scanout.fence) { implementation->scanout.fence->wait(); } implementation->processor->scanout_async_buffer(implementation->scanout, options); implementation->scanoutCount++; return true; } auto Vulkan::mapScanoutRead(const u8*& rgba, u32& width, u32& height) -> void { if(!implementation || !implementation->scanout.fence || !implementation->scanout.width || !implementation->scanout.height) { rgba = nullptr; width = 0; height = 0; } else { implementation->scanout.fence->wait(); rgba = (const u8*)implementation->device.map_host_buffer(*implementation->scanout.buffer, ::Vulkan::MEMORY_ACCESS_READ_BIT); width = implementation->scanout.width; height = implementation->scanout.height; } } auto Vulkan::unmapScanoutRead() -> void { if(implementation && implementation->scanout.buffer) { implementation->device.unmap_host_buffer(*implementation->scanout.buffer, ::Vulkan::MEMORY_ACCESS_READ_BIT); } } auto Vulkan::endScanout() -> void { if(implementation) { //notify main thread that we're done reading std::lock_guard lock{implementation->lock}; implementation->endCount++; implementation->condition.notify_one(); } } Vulkan::Implementation::Implementation(u8* data, u32 size) { if(!::Vulkan::Context::init_loader(nullptr)) return; if(!context.init_instance_and_device(nullptr, 0, nullptr, 0, ::Vulkan::CONTEXT_CREATION_DISABLE_BINDLESS_BIT)) return; device.set_context(context); device.init_frame_contexts(3); ::RDP::CommandProcessorFlags flags = 0; switch(vulkan.internalUpscale) { case 2: flags |= ::RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_2X_BIT; break; case 4: flags |= ::RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_4X_BIT; break; case 8: flags |= ::RDP::COMMAND_PROCESSOR_FLAG_UPSCALING_8X_BIT; break; } if(vulkan.internalUpscale > 1) { flags |= ::RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_DITHER_BIT; flags |= ::RDP::COMMAND_PROCESSOR_FLAG_SUPER_SAMPLED_READ_BACK_BIT; } processor = new ::RDP::CommandProcessor(device, data, 0, size, size / 2, flags); if(!processor->device_is_supported()) { delete processor; processor = nullptr; } } Vulkan::Implementation::~Implementation() { delete processor; } } ares-126/ares/n64/vulkan/vulkan.hpp000066400000000000000000000012141415063341600171710ustar00rootroot00000000000000#include "rdp_device.hpp" namespace ares::Nintendo64 { struct Vulkan { auto load(Node::Object) -> bool; auto unload() -> void; auto render() -> bool; auto frame() -> void; auto writeWord(u32 address, u32 data) -> void; auto scanoutAsync(bool field) -> bool; auto mapScanoutRead(const u8*& rgba, u32& width, u32& height) -> void; auto unmapScanoutRead() -> void; auto endScanout() -> void; struct Implementation; Implementation* implementation = nullptr; u32 internalUpscale = 1; //1, 2, 4, 8 bool supersampleScanout = false; u32 outputUpscale = supersampleScanout ? 1 : internalUpscale; }; extern Vulkan vulkan; } ares-126/ares/ng/000077500000000000000000000000001415063341600136575ustar00rootroot00000000000000ares-126/ares/ng/GNUmakefile000066400000000000000000000016421415063341600157340ustar00rootroot00000000000000ares.components += m68000 ares.components += z80 ares.components += ym2610 ares.components += ym2612 ares.components += ym2149 ares.objects += ares-ng-system ares.objects += ares-ng-cpu ares.objects += ares-ng-apu ares.objects += ares-ng-lspc ares.objects += ares-ng-opnb ares.objects += ares-ng-cartridge ares.objects += ares-ng-controller ares.objects += ares-ng-card $(object.path)/ares-ng-system.o: $(ares.path)/ng/system/system.cpp $(object.path)/ares-ng-cpu.o: $(ares.path)/ng/cpu/cpu.cpp $(object.path)/ares-ng-apu.o: $(ares.path)/ng/apu/apu.cpp $(object.path)/ares-ng-lspc.o: $(ares.path)/ng/lspc/lspc.cpp $(object.path)/ares-ng-opnb.o: $(ares.path)/ng/opnb/opnb.cpp $(object.path)/ares-ng-cartridge.o: $(ares.path)/ng/cartridge/cartridge.cpp $(object.path)/ares-ng-controller.o: $(ares.path)/ng/controller/controller.cpp $(object.path)/ares-ng-card.o: $(ares.path)/ng/card/card.cpp ares-126/ares/ng/apu/000077500000000000000000000000001415063341600144445ustar00rootroot00000000000000ares-126/ares/ng/apu/apu.cpp000066400000000000000000000017411415063341600157400ustar00rootroot00000000000000#include namespace ares::NeoGeo { APU apu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto APU::load(Node::Object parent) -> void { node = parent->append("APU"); ram.allocate(2_KiB); debugger.load(node); } auto APU::unload() -> void { debugger.unload(node); ram.reset(); node.reset(); } auto APU::main() -> void { if(nmi.pending && nmi.enable) { if(Z80::irq(0, 0x0066, 0xff)) { nmi.pending = 0; //edge-sensitive debugger.interrupt("NMI"); } } if(irq.pending) { if(Z80::irq(1, 0x0038, 0xff)) { //level-sensitive debugger.interrupt("IRQ"); } } debugger.instruction(); Z80::instruction(); } auto APU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto APU::power(bool reset) -> void { Z80::bus = this; Z80::power(); Thread::create(4'000'000, {&APU::main, this}); communication = {}; nmi = {}; irq = {}; rom = {}; } } ares-126/ares/ng/apu/apu.hpp000066400000000000000000000024441415063341600157460ustar00rootroot00000000000000//Zilog Z80 struct APU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Readable ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto synchronizing() const -> bool override { return false; } //z80.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power(bool reset) -> void; //memory.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; struct Communication { n8 input; n8 output; } communication; struct NMI { n1 pending; n1 enable; } nmi; struct IRQ { n1 pending; } irq; struct ROM { n8 bankA = 0x02; n8 bankB = 0x06; n8 bankC = 0x0e; n8 bankD = 0x1e; } rom; }; extern APU apu; ares-126/ares/ng/apu/debugger.cpp000066400000000000000000000022761415063341600167430ustar00rootroot00000000000000auto APU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("APU Work RAM"); memory.ram->setSize(apu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return apu.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { apu.ram[address] = data; }); tracer.instruction = parent->append("Instruction", "APU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "APU"); } auto APU::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); parent->remove(tracer.instruction); parent->remove(tracer.interrupt); memory.ram.reset(); tracer.instruction.reset(); tracer.interrupt.reset(); } auto APU::Debugger::instruction() -> void { if(unlikely(tracer.instruction->enabled())) { if(tracer.instruction->address(apu.PC)) { tracer.instruction->notify(apu.disassembleInstruction(), apu.disassembleContext()); } } } auto APU::Debugger::interrupt(string_view type) -> void { if(unlikely(tracer.interrupt->enabled())) { tracer.interrupt->notify(type); } } ares-126/ares/ng/apu/memory.cpp000066400000000000000000000031221415063341600164560ustar00rootroot00000000000000auto APU::read(n16 address) -> n8 { switch(address) { case 0x0000 ... 0x7fff: return cartridge.mrom[address]; case 0x8000 ... 0xbfff: return cartridge.mrom[rom.bankA << 14 | n14(address)]; case 0xc000 ... 0xdfff: return cartridge.mrom[rom.bankB << 13 | n13(address)]; case 0xe000 ... 0xefff: return cartridge.mrom[rom.bankC << 12 | n12(address)]; case 0xf000 ... 0xf7ff: return cartridge.mrom[rom.bankD << 11 | n11(address)]; case 0xf800 ... 0xffff: return ram[address]; } unreachable; } auto APU::write(n16 address, n8 data) -> void { switch(address) { case 0xf800 ... 0xffff: ram[address] = data; return; } } auto APU::in(n16 address) -> n8 { switch(n4(address)) { case 0x00 ... 0x03: return communication.input; case 0x04: return opnb.read(0); case 0x05: return opnb.read(1); case 0x06: return opnb.read(2); case 0x07: return opnb.read(3); case 0x08: rom.bankD = address.byte(1); return 0; case 0x09: rom.bankC = address.byte(1); return 0; case 0x0a: rom.bankB = address.byte(1); return 0; case 0x0b: rom.bankA = address.byte(1); return 0; case 0x0c ... 0x0f: return 0; //SDRD1 } return 0; } auto APU::out(n16 address, n8 data) -> void { //print("out ", hex(address), "=", hex(data), "\n"); switch(n4(address)) { case 0x00 ... 0x03: communication.input = 0; return; case 0x04: return opnb.write(0, data); case 0x05: return opnb.write(1, data); case 0x06: return opnb.write(2, data); case 0x07: return opnb.write(3, data); case 0x08 ... 0x0b: nmi.enable = !address.bit(4)|1; return; case 0x0c ... 0x0f: communication.output = data; return; } } ares-126/ares/ng/apu/serialization.cpp000066400000000000000000000001341415063341600200230ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); } ares-126/ares/ng/card/000077500000000000000000000000001415063341600145705ustar00rootroot00000000000000ares-126/ares/ng/card/card.cpp000066400000000000000000000005741415063341600162130ustar00rootroot00000000000000#include namespace ares::NeoGeo { #include "slot.cpp" #include "debugger.cpp" #include "serialization.cpp" Card::Card(Node::Port parent) { node = parent->append("Memory Card"); ram.allocate(2_KiB); debugger.load(node); } Card::~Card() { debugger.unload(node); ram.reset(); node.reset(); } auto Card::power(bool reset) -> void { } } ares-126/ares/ng/card/card.hpp000066400000000000000000000007271415063341600162200ustar00rootroot00000000000000struct Card { Node::Peripheral node; VFS::Pak pak; Memory::Writable ram; struct Debugger { Card& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory ram; } memory; } debugger{*this}; //card.cpp Card(Node::Port); ~Card(); auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; }; #include "slot.hpp" ares-126/ares/ng/card/debugger.cpp000066400000000000000000000007211415063341600170600ustar00rootroot00000000000000auto Card::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("Memory Card RAM"); memory.ram->setSize(self.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return self.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { self.ram[address] = data; }); } auto Card::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); memory.ram.reset(); } ares-126/ares/ng/card/serialization.cpp000066400000000000000000000002651415063341600201540ustar00rootroot00000000000000auto Card::serialize(serializer& s) -> void { s(ram); } auto CardSlot::serialize(serializer& s) -> void { if(device) device->serialize(s); s(lock); s(select); s(bank); } ares-126/ares/ng/card/slot.cpp000066400000000000000000000017651415063341600162660ustar00rootroot00000000000000CardSlot cardSlot{"Memory Card Slot"}; CardSlot::CardSlot(string name) : name(name) { } auto CardSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Neo Geo"); port->setType("Memory Card"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Memory Card"}); } auto CardSlot::unload() -> void { device.reset(); port.reset(); } auto CardSlot::allocate(string name) -> Node::Peripheral { if(name == "Memory Card") device = new Card(port); if(device) return device->node; return {}; } auto CardSlot::read(n24 address) -> n8 { if(!device || lock) return 0xff; return device->ram.read(address); } auto CardSlot::write(n24 address, n8 data) -> void { if(!device || lock) return; return device->ram.write(address, data); } auto CardSlot::save() -> void { } auto CardSlot::power(bool reset) -> void { lock = 3; select = 0; bank = 0; if(device) device->power(reset); } ares-126/ares/ng/card/slot.hpp000066400000000000000000000011361415063341600162630ustar00rootroot00000000000000struct CardSlot { Node::Port port; unique_pointer device; //slot.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; CardSlot(string name); auto connect(Node::Peripheral) -> void; auto disconnect() -> void; auto read(n24 address) -> n8; auto write(n24 address, n8 data) -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; n2 lock; n1 select; n3 bank; protected: const string name; friend class Card; }; extern CardSlot cardSlot; ares-126/ares/ng/cartridge/000077500000000000000000000000001415063341600156235ustar00rootroot00000000000000ares-126/ares/ng/cartridge/cartridge.cpp000066400000000000000000000031741415063341600203000ustar00rootroot00000000000000#include namespace ares::NeoGeo { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "debugger.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append("Neo Geo Cartridge"); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); if(auto fp = pak->read("program.rom")) { prom.allocate(fp->size() >> 1); for(auto address : range(prom.size())) { prom.program(address, fp->readm(2L)); } } if(auto fp = pak->read("music.rom")) { mrom.allocate(fp->size()); for(auto address : range(mrom.size())) { mrom.program(address, fp->read()); } } if(auto fp = pak->read("character.rom")) { crom.allocate(fp->size()); for(auto address : range(crom.size())) { crom.program(address, fp->read()); } } if(auto fp = pak->read("static.rom")) { srom.allocate(fp->size()); for(auto address : range(srom.size())) { srom.program(address, fp->read()); } } if(auto fp = pak->read("voice.rom")) { vrom.allocate(fp->size()); for(auto address : range(vrom.size())) { vrom.program(address, fp->read()); } } debugger.load(node); power(); } auto Cartridge::disconnect() -> void { if(!node) return; debugger.unload(node); prom.reset(); mrom.reset(); crom.reset(); srom.reset(); vrom.reset(); pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; } auto Cartridge::power() -> void { } } ares-126/ares/ng/cartridge/cartridge.hpp000066400000000000000000000017051415063341600203030ustar00rootroot00000000000000struct Cartridge { Node::Peripheral node; VFS::Pak pak; Memory::Readable prom; Memory::Readable mrom; Memory::Readable crom; Memory::Readable srom; Memory::Readable vrom; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory prom; Node::Debugger::Memory mrom; Node::Debugger::Memory crom; Node::Debugger::Memory srom; Node::Debugger::Memory vrom; } memory; } debugger; auto title() const -> string { return information.title; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Information { string title; } information; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/ng/cartridge/debugger.cpp000066400000000000000000000040131415063341600201110ustar00rootroot00000000000000auto Cartridge::Debugger::load(Node::Object parent) -> void { memory.prom = parent->append("Cartridge Program ROM"); memory.prom->setSize(cartridge.prom.size() << 1); memory.prom->setRead([&](u32 address) -> u8 { return cartridge.prom[address >> 1].byte(!(address & 1)); }); memory.prom->setWrite([&](u32 address, u8 data) -> void { cartridge.prom[address >> 1].byte(!(address & 1)) = data; }); memory.mrom = parent->append("Cartridge Music ROM"); memory.mrom->setSize(cartridge.mrom.size()); memory.mrom->setRead([&](u32 address) -> u8 { return cartridge.mrom[address]; }); memory.mrom->setWrite([&](u32 address, u8 data) -> void { cartridge.mrom[address] = data; }); memory.crom = parent->append("Cartridge Character ROM"); memory.crom->setSize(cartridge.crom.size()); memory.crom->setRead([&](u32 address) -> u8 { return cartridge.crom[address]; }); memory.crom->setWrite([&](u32 address, u8 data) -> void { cartridge.crom[address] = data; }); memory.srom = parent->append("Cartridge Sprite ROM"); memory.srom->setSize(cartridge.srom.size()); memory.srom->setRead([&](u32 address) -> u8 { return cartridge.srom[address]; }); memory.srom->setWrite([&](u32 address, u8 data) -> void { cartridge.srom[address] = data; }); memory.vrom = parent->append("Cartridge Voice ROM"); memory.vrom->setSize(cartridge.vrom.size()); memory.vrom->setRead([&](u32 address) -> u8 { return cartridge.vrom[address]; }); memory.vrom->setWrite([&](u32 address, u8 data) -> void { cartridge.vrom[address] = data; }); } auto Cartridge::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.prom); parent->remove(memory.mrom); parent->remove(memory.crom); parent->remove(memory.srom); parent->remove(memory.vrom); memory.prom.reset(); memory.mrom.reset(); memory.crom.reset(); memory.srom.reset(); memory.vrom.reset(); } ares-126/ares/ng/cartridge/serialization.cpp000066400000000000000000000000651415063341600212050ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { } ares-126/ares/ng/cartridge/slot.cpp000066400000000000000000000010431415063341600173060ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Neo Geo"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port.reset(); } ares-126/ares/ng/cartridge/slot.hpp000066400000000000000000000003471415063341600173210ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/ng/controller/000077500000000000000000000000001415063341600160425ustar00rootroot00000000000000ares-126/ares/ng/controller/arcade-stick/000077500000000000000000000000001415063341600203745ustar00rootroot00000000000000ares-126/ares/ng/controller/arcade-stick/arcade-stick.cpp000066400000000000000000000031771415063341600234420ustar00rootroot00000000000000ArcadeStick::ArcadeStick(Node::Port parent) { node = parent->append("Arcade Stick"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); a = node->append("A"); b = node->append("B"); c = node->append("C"); d = node->append("D"); select = node->append("Select"); start = node->append("Start"); } auto ArcadeStick::readButtons() -> n8 { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(b); platform->input(c); platform->input(d); if(!(up->value() && down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() && right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n8 data; data.bit(0) = upLatch; data.bit(1) = downLatch; data.bit(2) = leftLatch; data.bit(3) = rightLatch; data.bit(4) = a->value(); data.bit(5) = b->value(); data.bit(6) = c->value(); data.bit(7) = d->value(); return ~data; } auto ArcadeStick::readControls() -> n2 { platform->input(select); platform->input(start); n2 data; data.bit(0) = start->value(); data.bit(1) = select->value(); return ~data; } ares-126/ares/ng/controller/arcade-stick/arcade-stick.hpp000066400000000000000000000007741415063341600234470ustar00rootroot00000000000000struct ArcadeStick : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button a; Node::Input::Button b; Node::Input::Button c; Node::Input::Button d; Node::Input::Button select; Node::Input::Button start; ArcadeStick(Node::Port); auto readButtons() -> n8 override; auto readControls() -> n2 override; private: b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/ng/controller/controller.cpp000066400000000000000000000001601415063341600207260ustar00rootroot00000000000000#include namespace ares::NeoGeo { #include "port.cpp" #include "arcade-stick/arcade-stick.cpp" } ares-126/ares/ng/controller/controller.hpp000066400000000000000000000004461415063341600207420ustar00rootroot00000000000000struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto readButtons() -> n8 { return 0; } virtual auto readControls() -> n2 { return 0; } virtual auto writeOutputs(n3 data) -> void {} }; #include "port.hpp" #include "arcade-stick/arcade-stick.hpp" ares-126/ares/ng/controller/port.cpp000066400000000000000000000014651415063341600175400ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Neo Geo"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Arcade Stick"}); } auto ControllerPort::unload() -> void { device.reset(); port.reset(); } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Arcade Stick") device = new ArcadeStick(port); if(device) return device->node; return {}; } auto ControllerPort::power() -> void { } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/ng/controller/port.hpp000066400000000000000000000013771415063341600175470ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; ControllerPort(string name); auto connect(Node::Peripheral) -> void; auto disconnect() -> void; auto readButtons() -> n8 { if(device) return device->readButtons(); return 0; } auto readControls() -> n2 { if(device) return device->readControls(); return 0; } auto writeOutputs(n3 data) -> void { if(device) return device->writeOutputs(data); } auto power() -> void; auto serialize(serializer&) -> void; protected: const string name; friend class Controller; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/ng/cpu/000077500000000000000000000000001415063341600144465ustar00rootroot00000000000000ares-126/ares/ng/cpu/cpu.cpp000066400000000000000000000031121415063341600157360ustar00rootroot00000000000000#include namespace ares::NeoGeo { CPU cpu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { debugger = {}; node.reset(); } auto CPU::main() -> void { if(io.interruptPending) { if(lower(Interrupt::Reset)) { r.a[7] = read(1, 1, 0) << 16 | read(1, 1, 2) << 0; r.pc = read(1, 1, 4) << 16 | read(1, 1, 6) << 0; prefetch(); prefetch(); debugger.interrupt("Reset"); } if(3 > r.i && lower(Interrupt::Power)) { debugger.interrupt("Power"); return interrupt(Vector::Level3, 3); } if(2 > r.i && lower(Interrupt::Timer)) { debugger.interrupt("Timer"); return interrupt(Vector::Level2, 2); } if(1 > r.i && lower(Interrupt::Vblank)) { debugger.interrupt("Vblank"); return interrupt(Vector::Level1, 1); } } debugger.instruction(); instruction(); } auto CPU::idle(u32 clocks) -> void { Thread::step(clocks); } auto CPU::wait(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::raise(Interrupt interrupt) -> void { io.interruptPending.bit((u32)interrupt) = 1; } auto CPU::lower(Interrupt interrupt) -> bool { if(!io.interruptPending.bit((u32)interrupt)) return false; return io.interruptPending.bit((u32)interrupt) = 0, true; } auto CPU::power(bool reset) -> void { M68000::power(); Thread::create(12'000'000, {&CPU::main, this}); io = {}; raise(Interrupt::Reset); } } ares-126/ares/ng/cpu/cpu.hpp000066400000000000000000000024271415063341600157530ustar00rootroot00000000000000//Motorola 68000 struct CPU : M68000, Thread { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; enum class Interrupt : u32 { Power, Reset, Vblank, Timer, }; //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto idle(u32 clocks) -> void override; auto wait(u32 clocks) -> void override; auto raise(Interrupt) -> void; auto lower(Interrupt) -> bool; auto power(bool reset) -> void; //memory.cpp auto read(n1 upper, n1 lower, n24 address, n16 data = 0) -> n16 override; auto write(n1 upper, n1 lower, n24 address, n16 data) -> void override; auto readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16; auto writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n32 interruptPending; n1 vectorSelect; //0 = BIOS; 1 = cartridge n1 fixSelect; //0 = embedded SFIX + SM1 ROM; 1 = cartridge SROM + M1 ROM } io; }; extern CPU cpu; ares-126/ares/ng/cpu/debugger.cpp000066400000000000000000000014351415063341600167410ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(unlikely(tracer.instruction->enabled())) { if(tracer.instruction->address(cpu.r.pc - 4)) { tracer.instruction->notify(cpu.disassembleInstruction(cpu.r.pc - 4), cpu.disassembleContext()); } } } auto CPU::Debugger::interrupt(string_view type) -> void { if(unlikely(tracer.interrupt->enabled())) { string message = {type, " SR=", cpu.r.i, " @ ", lspc.io.vcounter, ",", lspc.io.hcounter}; tracer.interrupt->notify(message); } } ares-126/ares/ng/cpu/memory.cpp000066400000000000000000000236341415063341600164720ustar00rootroot00000000000000auto CPU::read(n1 upper, n1 lower, n24 address, n16 data) -> n16 { //NEO-E0 if(io.vectorSelect == 0) { if((address & 0xffff80) == 0x000000 || (address & 0xffff80) == 0xc00000) { address ^= 0xc00000; //swap BIOS and cartridge interrupt vectors } } //cartridge program ROM if(address <= 0x0fffff) { return cartridge.prom[address >> 1]; } //work RAM if(address <= 0x1fffff) { return system.wram[address >> 1]; } //cartridge program ROM (banked) if(address <= 0x2fffff) { address = 0x100000 | n20(address); return cartridge.prom[address >> 1]; } //I/O registers if(address <= 0x3fffff) { return readIO(upper, lower, address, data); } //palette RAM if(address <= 0x7fffff) { address = lspc.io.pramBank << 13 | n13(address); return lspc.pram[address >> 1]; } //memory card if(address <= 0xbfffff) { data.byte(0) = 0xff; data.byte(1) = cardSlot.read(address >> 1); return data; } //BIOS if(address <= 0xcfffff) { return system.bios[address >> 1]; } //backup RAM (MVS only) if(address <= 0xdfffff) { if(Model::NeoGeoMVS()) return system.sram[address >> 1]; return data; } //CD-ROM if(address <= 0xffffff) { return data; } return data; } auto CPU::write(n1 upper, n1 lower, n24 address, n16 data) -> void { //cartridge program ROM (read-only) if(address <= 0x0fffff) { return; } //work RAM if(address <= 0x1fffff) { if(upper) system.wram[address >> 1].byte(1) = data.byte(1); if(lower) system.wram[address >> 1].byte(0) = data.byte(0); return; } //cartridge program ROM (banked) (read-only) if(address <= 0x2fffff) { return; } //I/O registers if(address <= 0x3fffff) { return writeIO(upper, lower, address, data); } //palette RAM if(address <= 0x7fffff) { address = lspc.io.pramBank << 13 | n13(address); lspc.pram[address >> 1] = data; return; } //memory card if(address <= 0xbfffff) { if(lower) cardSlot.write(address >> 1, data); return; } //BIOS if(address <= 0xcfffff) { return; } //backup RAM (MVS only) if(address <= 0xdfffff) { if(Model::NeoGeoMVS()) system.sram[address >> 1] = data; return; } //CD-ROM if(address <= 0xffffff) { return; } } auto CPU::readIO(n1 upper, n1 lower, n24 address, n16 data) -> n16 { //REG_P1CNT if((address & 0xfe0000) == 0x300000 && upper) { data.byte(1) = controllerPort1.readButtons(); } //REG_DIPSW if((address & 0xfe0080) == 0x300000 && lower) { data.bit(0) = 0; //settings mode data.bit(1) = 0; //0 = 1 chute; 1 = 2 chutes data.bit(2) = 0; //0 = normal controller; 1 = mahjong keyboard data.bit(3,4) = 0; //communication ID code data.bit(5) = 0; //enable multiplayer data.bit(6) = 0; //freeplay data.bit(7) = 0; //freeze } //REG_SYSTYPE if((address & 0xfe0080) == 0x300080 && lower) { data.bit(6) = 0; //0 = 2 slots; 1 = 4 or 6 slots data.bit(7) = 1; //test button } //REG_SOUND if((address & 0xfe0000) == 0x320000 && upper) { data.byte(1) = apu.communication.output; } //REG_STATUS_A if((address & 0xfe0000) == 0x320000 && lower) { data.bit(0) = 0; //coin 1 data.bit(1) = 0; //coin 2 data.bit(2) = 1; //service button data.bit(3) = 0; //coin 3 data.bit(4) = 0; //coin 4 data.bit(5) = 0; //0 = 4-slot; 1 = 6-slot data.bit(6) = 0; //RTC time pulse data.bit(7) = 0; //RTC data bit } //REG_P2CNT if((address & 0xfe0000) == 0x340000 && upper) { data.byte(1) = controllerPort2.readButtons(); } //REG_STATUS_B if((address & 0xfe0000) == 0x380000 && upper) { data.bit( 8, 9) = controllerPort1.readControls(); data.bit(10,11) = controllerPort2.readControls(); data.bit(12,13) = 0b11; //0b00 = memory card inserted data.bit(14) = cardSlot.lock != 0; data.bit(15) = Model::NeoGeoMVS(); //0 = AES; 1 = MVS } //REG_VRAMADDR if((address & 0xfe0006) == 0x3c0000) { data = lspc.vram[lspc.io.vramAddress]; } //REG_VRAMRW if((address & 0xfe0006) == 0x3c0002) { data = lspc.vram[lspc.io.vramAddress]; } //REG_VRAMMOD if((address & 0xfe0006) == 0x3c0004) { data = lspc.io.vramIncrement; } //REG_LSPCMODE if((address & 0xfe0006) == 0x3c0006) { data.bit(0, 2) = lspc.animation.frame; data.bit(3) = 0; //0 = 60hz; 1 = 50hz data.bit(4, 6) = 0; //unused data.bit(7,15) = lspc.io.vcounter + 248; } return data; } auto CPU::writeIO(n1 upper, n1 lower, n24 address, n16 data) -> void { //REG_DIPSW if((address & 0xfe0080) == 0x300000 && lower) { //todo: kick watchdog } //REG_SOUND if((address & 0xfe0000) == 0x320000 && upper) { apu.communication.input = data.byte(1); apu.nmi.pending = 1; } //REG_POUTPUT if((address & 0xfe0070) == 0x380000 && lower) { controllerPort1.writeOutputs(data.bit(0,2)); controllerPort2.writeOutputs(data.bit(3,5)); } //REG_CRDBANK if((address & 0xfe0070) == 0x380010 && lower) { cardSlot.bank = data.bit(0,2); } //REG_POUTPUT (mirror) (AES only) //REG_SLOT (MVS only) if((address & 0xfe00f0) == 0x380020 && lower) { if(Model::NeoGeoAES()) { controllerPort1.writeOutputs(data.bit(0,2)); controllerPort2.writeOutputs(data.bit(3,5)); } if(Model::NeoGeoMVS()) { system.io.slotSelect = data.bit(0,2); } } //REG_LEDLATCHES if((address & 0xfe00f0) == 0x380030 && lower) { system.io.ledMarquee = data.bit(3); system.io.ledLatch1 = data.bit(4); system.io.ledLatch2 = data.bit(5); } //REG_LEDDATA if((address & 0xfe00f0) == 0x380040 && lower) { system.io.ledData = data.bit(0,7); } //REG_RTCCTRL if((address & 0xfe00f0) == 0x380050 && lower) { //rtc.din = data.bit(0); //rtc.clock = data.bit(1); //rtc.strobe = data.bit(2); } //REG_RESETCC1 if((address & 0xfe00f6) == 0x380060 && lower) { //todo: float coin counter 1 } //REG_RESETCC2 if((address & 0xfe00f6) == 0x380062 && lower) { //todo: float coin counter 2 } //REG_RESETCL1 if((address & 0xfe00f6) == 0x380064 && lower) { //todo: float coin lockout 1 } //REG_RESETCL2 if((address & 0xfe00f6) == 0x380066 && lower) { //todo: float coin lockout 2 } //REG_SETCC1 if((address & 0xfe00f6) == 0x3800e0 && lower) { //todo: sink coin counter 1 } //REG_SETCC2 if((address & 0xfe00f6) == 0x3800e2 && lower) { //todo: sink coin counter 2 } //REG_SETCL1 if((address & 0xfe00f6) == 0x3800e4 && lower) { //todo: sink coin lockout 1 } //REG_SETCL2 if((address & 0xfe00f6) == 0x3800e6 && lower) { //todo: sink coin lockout 2 } //REG_NOSHADOW if((address & 0xfe001e) == 0x3a0000 && lower) { lspc.io.shadow = 0; } //REG_SWPBIOS if((address & 0xfe001e) == 0x3a0002 && lower) { io.vectorSelect = 0; } //REG_CRDUNLOCK1 if((address & 0xfe001e) == 0x3a0004 && lower) { cardSlot.lock.bit(0) = 0; } //REG_CRDLOCK2 if((address & 0xfe001e) == 0x3a0006 && lower) { cardSlot.lock.bit(1) = 1; } //REG_CRDREGSEL if((address & 0xfe001e) == 0x3a0008 && lower) { cardSlot.select = 1; } //REG_BRDFIX if((address & 0xfe001e) == 0x3a000a && lower) { io.fixSelect = 0; } //REG_SRAMLOCK if((address & 0xfe001e) == 0x3a000c && lower) { system.io.sramLock = 1; } //REG_PALBANK1 if((address & 0xfe001e) == 0x3a000e && lower) { lspc.io.pramBank = 1; } //REG_SHADOW if((address & 0xfe001e) == 0x3a0010 && lower) { lspc.io.shadow = 1; } //REG_SWPROM if((address & 0xfe001e) == 0x3a0012 && lower) { io.vectorSelect = 1; } //REG_CRDLOCK1 if((address & 0xfe001e) == 0x3a0014 && lower) { cardSlot.lock.bit(0) = 1; } //REG_CRDUNLOCK2 if((address & 0xfe001e) == 0x3a0016 && lower) { cardSlot.lock.bit(1) = 0; } //REG_CRDNORMAL if((address & 0xfe001e) == 0x3a0018 && lower) { cardSlot.select = 0; } //REG_CRTFIX if((address & 0xfe001e) == 0x3a001a && lower) { io.fixSelect = 1; } //REG_SRAMUNLOCK if((address & 0xfe001e) == 0x3a001c && lower) { system.io.sramLock = 0; } //REG_PALBANK0 if((address & 0xfe001e) == 0x3a001e && lower) { lspc.io.pramBank = 0; } //REG_VRAMADDR if((address & 0xfe000e) == 0x3c0000) { if(upper) lspc.io.vramAddress.byte(1) = data.byte(1); if(lower) lspc.io.vramAddress.byte(0) = data.byte(0); } //REG_VRAMRW if((address & 0xfe000e) == 0x3c0002) { if(upper) lspc.vram[lspc.io.vramAddress].byte(1) = data.byte(1); if(lower) lspc.vram[lspc.io.vramAddress].byte(0) = data.byte(0); lspc.io.vramAddress.bit(0,14) += lspc.io.vramIncrement; } //REG_VRAMMOD if((address & 0xfe000e) == 0x3c0004) { if(upper) lspc.io.vramIncrement.byte(1) = data.byte(1); if(lower) lspc.io.vramIncrement.byte(0) = data.byte(0); } //REG_LSPCMODE if((address & 0xfe000e) == 0x3c0006) { if(lower) { lspc.animation.disable = data.bit(3); lspc.timer.interruptEnable = data.bit(4); lspc.timer.reloadOnChange = data.bit(5); lspc.timer.reloadOnVblank = data.bit(6); lspc.timer.reloadOnZero = data.bit(7); } if(upper) { lspc.animation.speed = data.bit(8,15); } } //REG_TIMERHIGH if((address & 0xfe000e) == 0x3c0008) { if(upper) lspc.timer.reload.byte(3) = data.byte(1); if(lower) lspc.timer.reload.byte(2) = data.byte(0); } //REG_TIMERLOW if((address & 0xfe000e) == 0x3c000a) { if(upper) lspc.timer.reload.byte(1) = data.byte(1); if(lower) lspc.timer.reload.byte(0) = data.byte(0); if(lspc.timer.reloadOnChange) { lspc.timer.counter = lspc.timer.reload; } } //REG_IRQACK if((address & 0xfe000e) == 0x3c000c) { if(lower) { lspc.irq.powerAcknowledge = data.bit(0); lspc.irq.timerAcknowledge = data.bit(1); lspc.irq.vblankAcknowledge = data.bit(2); } } //REG_TIMERSTOP if((address & 0xfe000e) == 0x3c000e) { if(lower) { lspc.timer.stopPAL = data.bit(0); } } return; } ares-126/ares/ng/cpu/serialization.cpp000066400000000000000000000001371415063341600200300ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { M68000::serialize(s); Thread::serialize(s); } ares-126/ares/ng/lspc/000077500000000000000000000000001415063341600146205ustar00rootroot00000000000000ares-126/ares/ng/lspc/color.cpp000066400000000000000000000007401415063341600164430ustar00rootroot00000000000000auto LSPC::color(n32 color) -> n64 { n32 b = color.bit(15) << 0 | color.bit(12) << 1 | color.bit(0, 3) << 2; n32 g = color.bit(15) << 0 | color.bit(13) << 1 | color.bit(4, 7) << 2; n32 r = color.bit(15) << 0 | color.bit(14) << 1 | color.bit(8,11) << 2; n64 R = image::normalize(r, 6, 16); n64 G = image::normalize(g, 6, 16); n64 B = image::normalize(b, 6, 16); if(color.bit(16)) { R >>= 1; G >>= 1; B >>= 1; } return R << 32 | G << 16 | B << 0; } ares-126/ares/ng/lspc/debugger.cpp000066400000000000000000000016561415063341600171200ustar00rootroot00000000000000auto LSPC::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("LSPC Video RAM"); memory.vram->setSize(lspc.vram.size() << 1); memory.vram->setRead([&](u32 address) -> u8 { return lspc.vram[address >> 1].byte(!(address & 1)); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { lspc.vram[address >> 1].byte(!(address & 1)) = data; }); memory.pram = parent->append("LSPC Palette RAM"); memory.pram->setSize(lspc.pram.size() << 1); memory.pram->setRead([&](u32 address) -> u8 { return lspc.pram[address >> 1].byte(!(address & 1)); }); memory.pram->setWrite([&](u32 address, u8 data) -> void { lspc.pram[address >> 1].byte(!(address & 1)) = data; }); } auto LSPC::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.vram); parent->remove(memory.pram); memory.vram.reset(); memory.pram.reset(); } ares-126/ares/ng/lspc/lspc.cpp000066400000000000000000000047141415063341600162730ustar00rootroot00000000000000#include namespace ares::NeoGeo { LSPC lspc; #include "color.cpp" #include "render.cpp" #include "debugger.cpp" #include "serialization.cpp" auto LSPC::load(Node::Object parent) -> void { node = parent->append("LSPC"); screen = node->append("Screen", 320, 264); screen->colors(1 << 17, {&LSPC::color, this}); screen->setSize(304, 240); screen->setScale(2.0, 2.0); screen->setAspect(1.0, 1.0); vram.allocate(68_KiB >> 1); pram.allocate(16_KiB >> 1); debugger.load(node); set bytes; u64 vbits = bit::reverse(0x0123456789abcdefULL); memory::fill(vscale, sizeof(vscale), 0xff); for(u8 y : range(256)) { n4 upper = vbits >> (y & 15 ^ 1) * 4; n4 lower = vbits >> (y >> 4 ^ 1) * 4; bytes.insert(upper << 4 | lower << 0); u8 x = 0; for(auto& byte : bytes) vscale[y][x++] = byte; } u64 hbits = 0x5b1d7f390a6e2c48ULL; memory::fill(hscale, sizeof(hscale), 0x00); for(u8 y : range(16)) { for(u8 x : reverse(range(y + 1))) { n4 value = hbits >> x * 4; hscale[y][value] = 1; } } } auto LSPC::unload() -> void { debugger.unload(node); vram.reset(); pram.reset(); node->remove(screen); screen.reset(); node.reset(); } auto LSPC::step(u32 clocks) -> void { if(timer.counter && !--timer.counter) { if(timer.reloadOnZero) { timer.counter = timer.reload; } if(irq.timerAcknowledge && timer.interruptEnable) { irq.timerAcknowledge = 0; cpu.raise(CPU::Interrupt::Timer); } } Thread::step(clocks); Thread::synchronize(); } auto LSPC::main() -> void { step(1); if(++io.hcounter == 384) { io.hcounter = 0; if(++io.vcounter == 264) { io.vcounter = 0; if(!animation.counter--) { animation.counter = animation.speed; animation.frame++; } if(irq.vblankAcknowledge) { irq.vblankAcknowledge = 0; cpu.raise(CPU::Interrupt::Vblank); } if(timer.reloadOnVblank) { timer.counter = timer.reload; } frame(); } } if(io.vcounter >= 0 && io.vcounter <= 239 && io.hcounter == 56) { render(io.vcounter); } } auto LSPC::frame() -> void { screen->setViewport(8, 0, 304, 240); screen->frame(); scheduler.exit(Event::Frame); } auto LSPC::power(bool reset) -> void { Thread::create(6'000'000, {&LSPC::main, this}); screen->power(); animation = {}; timer = {}; irq = {}; io = {}; cpu.raise(CPU::Interrupt::Power); } } ares-126/ares/ng/lspc/lspc.hpp000066400000000000000000000024441415063341600162760ustar00rootroot00000000000000//line sprite controller struct LSPC : Thread { Node::Object node; Node::Video::Screen screen; Memory::Writable vram; Memory::Writable pram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory pram; } memory; } debugger; //lspc.cpp auto load(Node::Object) -> void; auto unload() -> void; auto step(u32 clocks) -> void; auto main() -> void; auto frame() -> void; auto power(bool reset) -> void; //render.cpp auto render(n9 y) -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; struct Animation { n1 disable; n8 speed; n8 counter; n3 frame; } animation; struct Timer { n1 interruptEnable; n1 reloadOnChange; n1 reloadOnVblank; n1 reloadOnZero; n32 reload; n32 counter; n1 stopPAL; //todo } timer; struct IRQ { n1 powerAcknowledge; n1 timerAcknowledge; n1 vblankAcknowledge; } irq; struct IO { n9 hcounter; n9 vcounter; n1 shadow; n16 vramAddress; n16 vramIncrement; n1 pramBank; } io; n8 vscale[256][256]; n1 hscale[16][16]; }; extern LSPC lspc; ares-126/ares/ng/lspc/render.cpp000066400000000000000000000061641415063341600166120ustar00rootroot00000000000000auto LSPC::render(n9 y) -> void { auto output = screen->pixels().data() + y * 320; auto backdrop = io.shadow << 16 | pram[io.pramBank << 12 | 0xfff]; for(u32 x : range(320)) { output[x] = backdrop; } auto cs = cartridge.crom.size() / 2; auto c1 = &cartridge.crom.self.data[cs * 0]; auto c2 = &cartridge.crom.self.data[cs * 1]; n9 sx = 0; n9 sy = 0; n6 sh = 0; n4 hshrink = ~0; n8 vshrink = ~0; for(u32 sprite : range(381)) { n16 sattributes = vram[0x8000 | sprite]; n16 yattributes = vram[0x8200 | sprite]; n16 xattributes = vram[0x8400 | sprite]; hshrink = sattributes.bit(8,11); if(auto sticky = yattributes.bit(6)) { sx += hshrink + 1; } else { vshrink = sattributes.bit(0,7); sx = xattributes.bit(7,15); sh = yattributes.bit(0, 5); sy = yattributes.bit(7,15); } n9 ry = y - (496 - sy); if(sh == 0) continue; if(sh >= 33) sh = 32; //todo: loop borders when shrinking if(sx >= 320 && sx + 15 <= 511) continue; if(ry >= sh * 16) continue; switch(ry >> 8) { case 0: ry = vscale[vshrink][n8( ry)] ^ 0x000; break; case 1: ry = vscale[vshrink][n8(~ry)] ^ 0x1ff; break; } n20 tileNumber = vram[sprite << 6 | ry >> 3 & ~1 | 0]; n16 attributes = vram[sprite << 6 | ry >> 3 & ~1 | 1]; n4 hflip = attributes.bit(0) ? 15 : 0; n1 vflip = attributes.bit(1); n2 animate = attributes.bit(2,3); n8 palette = attributes.bit(8,15); tileNumber.bit(16,19) = attributes.bit(4,7); if(vflip) ry ^= sh * 16 - 1; switch(animate * !animation.disable) { case 0: break; case 1: tileNumber.bit(0,1) = animation.frame.bit(0,1); break; case 2: tileNumber.bit(0,2) = animation.frame.bit(0,2); break; case 3: tileNumber.bit(0,2) = animation.frame.bit(0,2); break; } n13 pramAddress = io.pramBank << 12 | palette << 4; n25 tileAddress = (tileNumber << 5 | ry & 15) << 1; n16 d0 = c1[tileAddress + 0 & cs - 1] << 8 | c1[tileAddress + 32 & cs - 1] << 0; n16 d1 = c1[tileAddress + 1 & cs - 1] << 8 | c1[tileAddress + 33 & cs - 1] << 0; n16 d2 = c2[tileAddress + 0 & cs - 1] << 8 | c2[tileAddress + 32 & cs - 1] << 0; n16 d3 = c2[tileAddress + 1 & cs - 1] << 8 | c2[tileAddress + 33 & cs - 1] << 0; n9 px = 0; for(u32 x : range(16)) { if(!hscale[hshrink][x]) continue; n9 rx = sx + (px++ ^ hflip); if(rx >= 320) continue; n4 color; color.bit(0) = d0.bit(x); color.bit(1) = d1.bit(x); color.bit(2) = d2.bit(x); color.bit(3) = d3.bit(x); if(color) { output[rx] = io.shadow << 16 | pram[pramAddress | color]; } } } for(u32 x : range(320)) { n16 attributes = vram[0x7000 + (x >> 3) * 0x20 + (y >> 3)]; n12 tileNumber = attributes.bit( 0,11); n4 palette = attributes.bit(12,15); n13 pramAddress = io.pramBank << 12 | palette << 4; n17 tileAddress = tileNumber << 5 | x << 2 & 24 ^ 16 | y & 7; n8 tileData = cartridge.srom[tileAddress]; n4 color = tileData >> (x & 1) * 4; if(color) { output[x] = io.shadow << 16 | pram[pramAddress | color]; } } } ares-126/ares/ng/lspc/serialization.cpp000066400000000000000000000001101415063341600201710ustar00rootroot00000000000000auto LSPC::serialize(serializer& s) -> void { Thread::serialize(s); } ares-126/ares/ng/ng.hpp000066400000000000000000000013221415063341600147720ustar00rootroot00000000000000#pragma once //started: 2021-05-18 #include #include #include #include namespace ares::NeoGeo { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto NeoGeoAES() -> bool; inline static auto NeoGeoMVS() -> bool; }; #include #include #include #include #include #include #include #include } ares-126/ares/ng/opnb/000077500000000000000000000000001415063341600146155ustar00rootroot00000000000000ares-126/ares/ng/opnb/opnb.cpp000066400000000000000000000024641415063341600162650ustar00rootroot00000000000000#include namespace ares::NeoGeo { OPNB opnb; #include "serialization.cpp" auto OPNB::load(Node::Object parent) -> void { node = parent->append("YM2610"); streamFM = node->append("FM"); streamFM->setChannels(2); streamFM->setFrequency(8'000'000 / 144.0); streamFM->addHighPassFilter( 20.0, 1); streamFM->addLowPassFilter (2840.0, 1); streamSSG = node->append("SSG"); streamSSG->setChannels(1); streamSSG->setFrequency(8'000'000 / 144.0); } auto OPNB::unload() -> void { node->remove(streamFM); node->remove(streamSSG); streamFM.reset(); streamSSG.reset(); node.reset(); } auto OPNB::main() -> void { step(144); auto samples = fm.clock(); streamFM->frame(samples[0] / 32768.0, samples[1] / 32768.0); auto channels = ssg.clock(); f64 output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; streamSSG->frame(output / 3.0); apu.irq.pending = fm.readStatus(); } auto OPNB::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto OPNB::power(bool reset) -> void { YM2610::power(); Thread::create(8'000'000, {&OPNB::main, this}); for(u32 level : range(16)) { volume[level] = 1.0 / pow(2, 1.0 / 2 * (15 - level)); } } } ares-126/ares/ng/opnb/opnb.hpp000066400000000000000000000006331415063341600162660ustar00rootroot00000000000000//Yamaha YM2610 struct OPNB : YM2610, Thread { Node::Object node; Node::Audio::Stream streamFM; Node::Audio::Stream streamSSG; //opnb.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: f64 volume[16]; }; extern OPNB opnb; ares-126/ares/ng/opnb/serialization.cpp000066400000000000000000000001401415063341600201710ustar00rootroot00000000000000auto OPNB::serialize(serializer& s) -> void { YM2610::serialize(s); Thread::serialize(s); } ares-126/ares/ng/system/000077500000000000000000000000001415063341600152035ustar00rootroot00000000000000ares-126/ares/ng/system/debugger.cpp000066400000000000000000000030441415063341600174740ustar00rootroot00000000000000auto System::Debugger::load(Node::Object parent) -> void { memory.bios = parent->append("System BIOS"); memory.bios->setSize(128_KiB); memory.bios->setRead([&](u32 address) -> u8 { return system.bios[address >> 1].byte(!(address & 1)); }); memory.bios->setWrite([&](u32 address, u8 data) -> void { system.bios[address >> 1].byte(!(address & 1)) = data; }); //memory.srom = parent->append("System Static ROM"); memory.wram = parent->append("System Work RAM"); memory.wram->setSize(64_KiB); memory.wram->setRead([&](u32 address) -> u8 { return system.wram[address >> 1].byte(!(address & 1)); }); memory.wram->setWrite([&](u32 address, u8 data) -> void { system.wram[address >> 1].byte(!(address & 1)) = data; }); if(NeoGeo::Model::NeoGeoMVS()) { memory.sram = parent->append("System Backup RAM"); memory.sram->setSize(64_KiB); memory.sram->setRead([&](u32 address) -> u8 { return system.sram[address >> 1].byte(!(address & 1)); }); memory.sram->setWrite([&](u32 address, u8 data) -> void { system.sram[address >> 1].byte(!(address & 1)) = data; }); } } auto System::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.bios); //parent->remove(memory.srom); parent->remove(memory.wram); if(NeoGeo::Model::NeoGeoMVS()) parent->remove(memory.sram); memory.bios.reset(); //memory.srom.reset(); memory.wram.reset(); if(NeoGeo::Model::NeoGeoMVS()) memory.sram.reset(); } ares-126/ares/ng/system/serialization.cpp000066400000000000000000000020471415063341600205670ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cartridge); s(controllerPort1); s(controllerPort2); s(cardSlot); s(cpu); s(apu); s(lspc); s(opnb); } ares-126/ares/ng/system/system.cpp000066400000000000000000000053751415063341600172450ustar00rootroot00000000000000#include namespace ares::NeoGeo { auto enumerate() -> vector { return { "[SNK] Neo Geo AES", "[SNK] Neo Geo MVS", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; #include "debugger.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Neo Geo AES")) { information.name = "Neo Geo AES"; information.model = Model::NeoGeoAES; } if(name.find("Neo Geo MVS")) { information.name = "Neo Geo MVS"; information.model = Model::NeoGeoMVS; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; wram.allocate(64_KiB >> 1); if(NeoGeo::Model::NeoGeoMVS()) { sram.allocate(64_KiB >> 1); } scheduler.reset(); cpu.load(node); apu.load(node); lspc.load(node); opnb.load(node); cartridgeSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); cardSlot.load(node); debugger.load(node); return true; } auto System::unload() -> void { if(!node) return; save(); debugger.unload(node); cpu.unload(); apu.unload(); lspc.unload(); opnb.unload(); cartridgeSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); cardSlot.unload(); wram.reset(); sram.reset(); pak.reset(); node.reset(); } auto System::save() -> void { if(!node) return; cartridge.save(); cardSlot.save(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); if(auto fp = pak->read("bios.rom")) { bios.allocate(fp->size() >> 1); for(auto address : range(bios.size())) { bios.program(address, fp->readm(2L)); } } if(NeoGeo::Model::NeoGeoMVS()) { if(auto fp = pak->read("static.rom")) { srom.allocate(fp->size() >> 1); for(auto address : range(srom.size())) { srom.program(address, fp->readl(2L)); } } } if(cartridge.node) cartridge.power(); cardSlot.power(reset); cpu.power(reset); apu.power(reset); lspc.power(reset); opnb.power(reset); scheduler.power(cpu); io = {}; } }; ares-126/ares/ng/system/system.hpp000066400000000000000000000027361415063341600172500ustar00rootroot00000000000000struct System { Node::System node; VFS::Pak pak; Memory::Readable bios; Memory::Readable srom; Memory::Writable wram; Memory::Writable sram; //MVS only struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory bios; Node::Debugger::Memory srom; Node::Debugger::Memory wram; Node::Debugger::Memory sram; } memory; } debugger; enum class Model : u32 { NeoGeoAES, NeoGeoMVS }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; struct IO { n1 sramLock = 1; n3 slotSelect; n1 ledMarquee; n1 ledLatch1; n1 ledLatch2; n8 ledData; } io; private: struct Information { string name; Model model = Model::NeoGeoAES; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Model::NeoGeoAES() -> bool { return system.model() == System::Model::NeoGeoAES; } auto Model::NeoGeoMVS() -> bool { return system.model() == System::Model::NeoGeoMVS; } ares-126/ares/ngp/000077500000000000000000000000001415063341600140375ustar00rootroot00000000000000ares-126/ares/ngp/GNUmakefile000066400000000000000000000012431415063341600161110ustar00rootroot00000000000000ares.components += tlcs900h ares.components += z80 ares.components += t6w28 ares.objects += ares-ngp-system ares.objects += ares-ngp-cartridge ares.objects += ares-ngp-cpu ares.objects += ares-ngp-apu ares.objects += ares-ngp-kge ares.objects += ares-ngp-psg $(object.path)/ares-ngp-system.o: $(ares.path)/ngp/system/system.cpp $(object.path)/ares-ngp-cartridge.o: $(ares.path)/ngp/cartridge/cartridge.cpp $(object.path)/ares-ngp-cpu.o: $(ares.path)/ngp/cpu/cpu.cpp $(object.path)/ares-ngp-apu.o: $(ares.path)/ngp/apu/apu.cpp $(object.path)/ares-ngp-kge.o: $(ares.path)/ngp/kge/kge.cpp $(object.path)/ares-ngp-psg.o: $(ares.path)/ngp/psg/psg.cpp ares-126/ares/ngp/apu/000077500000000000000000000000001415063341600146245ustar00rootroot00000000000000ares-126/ares/ngp/apu/apu.cpp000066400000000000000000000025651415063341600161250ustar00rootroot00000000000000#include namespace ares::NeoGeoPocket { APU apu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto APU::load(Node::Object parent) -> void { ram.allocate(4_KiB, 0x00); if(auto fp = system.pak->read("apu.ram")) { ram.load(fp); } node = parent->append("APU"); debugger.load(node); } auto APU::save() -> void { if(auto fp = system.pak->write("apu.ram")) { ram.save(fp); } } auto APU::unload() -> void { debugger.unload(node); ram.reset(); node.reset(); } auto APU::main() -> void { if(!io.enable) return step(16); if(nmi.line) { nmi.line = 0; //edge-sensitive debugger.interrupt("NMI"); Z80::irq(0, 0x0066, 0xff); } if(irq.line) { //level-sensitive debugger.interrupt("IRQ"); Z80::irq(1, 0x0038, 0xff); } debugger.instruction(); instruction(); } auto APU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu, psg); } auto APU::power() -> void { Z80::bus = this; Z80::power(); Thread::create(system.frequency() / 2.0, {&APU::main, this}); nmi = {}; irq = {}; io = {}; io.enable = 0; } auto APU::enable() -> void { Thread::destroy(); Z80::power(); Thread::create(system.frequency() / 2.0, {&APU::main, this}); nmi = {}; irq = {}; io = {}; io.enable = 1; } auto APU::disable() -> void { io.enable = 0; } } ares-126/ares/ngp/apu/apu.hpp000066400000000000000000000024041415063341600161220ustar00rootroot00000000000000struct APU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Writable ram; struct Debugger { APU& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger{*this}; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //apu.cpp auto load(Node::Object) -> void; auto save() -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power() -> void; auto enable() -> void; auto disable() -> void; //memory.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; struct NMI { n1 line; } nmi; struct IRQ { n1 line; } irq; struct Port { n8 data; } port; struct IO { n1 enable; } io; }; extern APU apu; ares-126/ares/ngp/apu/debugger.cpp000066400000000000000000000022721415063341600171170ustar00rootroot00000000000000auto APU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("APU RAM"); memory.ram->setSize(self.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return self.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { self.ram[address] = data; }); tracer.instruction = parent->append("Instruction", "APU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "APU"); } auto APU::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); parent->remove(tracer.instruction); parent->remove(tracer.interrupt); memory.ram.reset(); tracer.instruction.reset(); tracer.interrupt.reset(); } auto APU::Debugger::instruction() -> void { if(likely(!tracer.instruction->enabled())) return; if(!tracer.instruction->address(self.PC)) return; tracer.instruction->notify(self.disassembleInstruction(), self.disassembleContext()); } auto APU::Debugger::interrupt(string_view type) -> void { if(likely(!tracer.interrupt->enabled())) return; tracer.interrupt->notify(type); } ares-126/ares/ngp/apu/memory.cpp000066400000000000000000000016021415063341600166370ustar00rootroot00000000000000auto APU::read(n16 address) -> n8 { switch(address) { case 0x0000 ... 0x0fff: while(cpu.MAR >= 0x7000 && cpu.MAR <= 0x7fff && !scheduler.synchronizing()) step(1); return ram.read(0x3000 | address); case 0x8000: return port.data; default: return 0x00; } } auto APU::write(n16 address, n8 data) -> void { switch(address) { case 0x0000 ... 0x0fff: while(cpu.MAR >= 0x7000 && cpu.MAR <= 0x7fff && !scheduler.synchronizing()) step(1); return ram.write(0x3000 | address, data); case 0x4000: return psg.writeRight(data); case 0x4001: return psg.writeLeft(data); case 0x8000: port.data = data; return; case 0xc000: return cpu.int5.raise(); } } auto APU::in(n16 address) -> n8 { return 0x00; } auto APU::out(n16 address, n8 data) -> void { switch((n8)address) { case 0xff: irq.line = 0; cpu.int5.lower(); break; } } ares-126/ares/ngp/apu/serialization.cpp000066400000000000000000000002441415063341600202050ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); s(ram); s(nmi.line); s(irq.line); s(port.data); s(io.enable); } ares-126/ares/ngp/cartridge/000077500000000000000000000000001415063341600160035ustar00rootroot00000000000000ares-126/ares/ngp/cartridge/cartridge.cpp000066400000000000000000000027771415063341600204700ustar00rootroot00000000000000#include namespace ares::NeoGeoPocket { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "flash.cpp" #include "debugger.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); flash[0].reset(0); flash[1].reset(1); if(auto fp = pak->read("program.flash")) { auto size = fp->size(); flash[0].allocate(min(16_Mibit, size)); flash[1].allocate(size >= 16_Mibit ? size - 16_Mibit : 0); flash[0].load(fp); flash[1].load(fp); } debugger.load(node); power(); } auto Cartridge::disconnect() -> void { if(!node) return; debugger.unload(node); flash[0].reset(0); flash[1].reset(1); pak.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; if(auto fp = pak->write("program.flash")) { if(flash[0].modified || flash[1].modified) { flash[0].save(fp); flash[1].save(fp); } } } auto Cartridge::power() -> void { flash[0].power(); flash[1].power(); } auto Cartridge::read(n1 chip, n21 address) -> n8 { if(!flash[chip]) return 0x00; return flash[chip].read(address); } auto Cartridge::write(n1 chip, n21 address, n8 data) -> void { if(!flash[chip]) return; return flash[chip].write(address, data); } } ares-126/ares/ngp/cartridge/cartridge.hpp000066400000000000000000000015061415063341600204620ustar00rootroot00000000000000#include "flash.hpp" struct Cartridge { Node::Peripheral node; VFS::Pak pak; Flash flash[2]; struct Debugger { Cartridge& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory rom; } memory; } debugger{*this}; auto title() const -> string { return information.title; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto read(n1 bank, n21 address) -> n8; auto write(n1 bank, n21 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Information { string title; } information; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/ngp/cartridge/debugger.cpp000066400000000000000000000012361415063341600202750ustar00rootroot00000000000000auto Cartridge::Debugger::load(Node::Object parent) -> void { memory.rom = parent->append("Cartridge Flash ROM"); memory.rom->setSize(self.flash[0].rom.size() + self.flash[1].rom.size()); memory.rom->setRead([&](u32 address) -> u8 { bool select = address >= self.flash[0].rom.size(); return self.flash[select].rom.read(address); }); memory.rom->setWrite([&](u32 address, u8 data) -> void { bool select = address >= self.flash[0].rom.size(); return self.flash[select].rom.write(address, data); }); } auto Cartridge::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.rom); memory.rom.reset(); } ares-126/ares/ngp/cartridge/flash.cpp000066400000000000000000000101571415063341600176100ustar00rootroot00000000000000auto Flash::reset(natural ID) -> void { this->ID = ID; rom.reset(); modified = false; vendorID = 0; deviceID = 0; blocks.reset(); } auto Flash::allocate(natural size) -> bool { if(size == 4_Mibit) { rom.allocate(size); vendorID = 0x98; deviceID = 0xab; } //vendorID 0x98 => Toshiba if(size == 8_Mibit) { rom.allocate(size); vendorID = 0x98; deviceID = 0x2c; } //vendorID 0xb0 => Sharp if(size == 16_Mibit) { rom.allocate(size); vendorID = 0x98; deviceID = 0x2f; } //vendorID 0xec => Samsung if(!rom) return false; for(u32 index : range(size / 64_KiB - 1)) blocks.append({true, index * 64_KiB, 64_KiB}); blocks.append({true, size - 64_KiB, 32_KiB}); blocks.append({true, size - 32_KiB, 8_KiB}); blocks.append({true, size - 24_KiB, 8_KiB}); blocks.append({true, size - 16_KiB, 16_KiB}); return true; } auto Flash::load(shared_pointer fp) -> void { fp->read({rom.data(), rom.size()}); modified = false; } auto Flash::save(shared_pointer fp) -> void { fp->write({rom.data(), rom.size()}); modified = false; } auto Flash::power() -> void { status(Read); } auto Flash::read(n21 address) -> n8 { if(mode == ReadID) { switch((n14)address) { //todo: actual mask value unknown case 0: return vendorID; case 1: return deviceID; case 2: return 0x02; //unknown purpose case 3: return 0x80; //unknown purpose } return 0xff; //invalid ReadID address; todo: actual return value unknown } if(mode == Acknowledge) { status(Read); return 0xff; } return rom.read(address); //todo: what happens when mode != Read here? } auto Flash::write(n21 address, n8 data) -> void { if(mode == Write) return program(address, data); if(data == 0xf0) return status(Read); n15 command = (n15)address; if(index == 0 && command == 0x5555 && data == 0xaa) return status(Index); if(index == 1 && command == 0x2aaa && data == 0x55) return status(Index); //todo: erase and protect diverge here; but they're treated the same for simplicity for now if(index == 2 && command == 0x5555 && data == 0x80) return status(Index); if(index == 2 && command == 0x5555 && data == 0x9a) return status(Index); if(index == 2 && command == 0x5555 && data == 0x90) return status(ReadID); if(index == 2 && command == 0x5555 && data == 0xa0) return status(Write); if(index == 2 && command == 0x5555 && data == 0xf0) return status(Read); if(index == 3 && command == 0x5555 && data == 0xaa) return status(Index); if(index == 4 && command == 0x2aaa && data == 0x55) return status(Index); if(index == 5 && command == 0x5555 && data == 0x10) return eraseAll(); if(index == 5 && data == 0x30) return erase(address); if(index == 5 && data == 0x9a) return protect(address); return status(Read); } auto Flash::status(u32 mode_) -> void { mode = mode_; if(mode == Read) index = 0; if(mode == Index) index++; } auto Flash::block(n21 address) -> maybe { for(n6 index : range(blocks.size())) { if(address < blocks[index].offset) continue; if(address >= blocks[index].offset + blocks[index].length) continue; return index; } //todo: it is unknown what happens when protecting and erasing invalid block IDs return {}; } auto Flash::program(n21 address, n8 data) -> void { auto blockID = block(address); if(blockID && blocks[*blockID].writable) { if(auto input = rom.read(address); input != (input & data)) { modified = true; rom.write(address, input & data); } } return status(Read); } auto Flash::protect(n21 address) -> void { auto blockID = block(address); if(blockID && blocks[*blockID].writable) { blocks[*blockID].writable = false; modified = true; } return status(Read); } auto Flash::erase(n21 address) -> void { auto blockID = block(address); if(blockID && blocks[*blockID].writable) { auto address = blocks[*blockID].offset; auto length = blocks[*blockID].length; for(u32 offset : range(length)) rom.write(address + offset, 0xff); modified = true; } return status(Acknowledge); } auto Flash::eraseAll() -> void { for(auto& block : blocks) erase(block.offset); } ares-126/ares/ngp/cartridge/flash.hpp000066400000000000000000000021541415063341600176130ustar00rootroot00000000000000//Toshiba 0x98 //Sharp 0xb0 //Samsung 0xec // 4mbit 0xab // 8mbit 0x2c //16mbit 0x2f struct Flash { natural ID; //todo: can this be made const, even though it's declared as Cartridge::Flash[2] ? boolean modified; Memory::Writable rom; n8 vendorID; n8 deviceID; explicit operator bool() const { return (bool)rom; } //flash.cpp auto reset(natural ID) -> void; auto allocate(natural size) -> bool; auto load(shared_pointer fp) -> void; auto save(shared_pointer fp) -> void; auto power() -> void; auto read(n21 address) -> n8; auto write(n21 address, n8 data) -> void; auto status(u32) -> void; auto block(n21 address) -> maybe; auto program(n21 address, n8 data) -> void; auto protect(n21 blockID) -> void; auto erase(n21 blockID) -> void; auto eraseAll() -> void; //serialization.cpp auto serialize(serializer&) -> void; enum : u32 { Read, Index, ReadID, Write, Acknowledge }; natural mode; natural index; //unserialized struct Block { boolean writable; natural offset; natural length; }; vector blocks; }; ares-126/ares/ngp/cartridge/serialization.cpp000066400000000000000000000003231415063341600213620ustar00rootroot00000000000000auto Flash::serialize(serializer& s) -> void { //s(rom); s(modified); s(vendorID); s(deviceID); s(mode); s(index); } auto Cartridge::serialize(serializer& s) -> void { s(flash[0]); s(flash[1]); } ares-126/ares/ngp/cartridge/slot.cpp000066400000000000000000000010471415063341600174720ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port.reset(); } ares-126/ares/ngp/cartridge/slot.hpp000066400000000000000000000003471415063341600175010ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/ngp/cpu/000077500000000000000000000000001415063341600146265ustar00rootroot00000000000000ares-126/ares/ngp/cpu/adc.cpp000066400000000000000000000010341415063341600160570ustar00rootroot00000000000000//analog-to-digital converter auto CPU::ADC::step(u32 clocks) -> void { if(!busy) return; counter += clocks; if(counter >= (!speed ? 160 : 320)) { switch(channel) { case 0: result[0] = 1023; break; //battery level (below 528 will not boot) case 1: result[1] = 1023; break; //unknown case 2: result[2] = 1023; break; //unknown case 3: result[3] = 1023; break; //unknown } if(!repeat) { busy = 0; } else { counter -= !speed ? 160 : 320; } end = 1; cpu.intad.trigger(); } } ares-126/ares/ngp/cpu/cpu.cpp000066400000000000000000000201331415063341600161200ustar00rootroot00000000000000#include namespace ares::NeoGeoPocket { CPU cpu; #include "memory.cpp" #include "io.cpp" #include "ports.cpp" #include "interrupts.cpp" #include "timers.cpp" #include "serial.cpp" #include "adc.cpp" #include "rtc.cpp" #include "watchdog.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { ram.allocate(12_KiB, 0x00); if(auto fp = system.pak->read("cpu.ram")) { ram.load(fp); } node = parent->append("CPU"); debugger.load(node); } auto CPU::save() -> void { if(auto fp = system.pak->read("cpu.ram")) { ram.save(fp); } } auto CPU::unload() -> void { if(!node) return; debugger.unload(node); ram.reset(); node.reset(); } auto CPU::main() -> void { if(interrupts.fire()) return (void)(HALT = 0); if(HALT) { //real hardware boots once batteries are connected and goes into a halt state. //here we bypass the need for the user to press controls.power. if(privilegedMode()) { //did this halt occur in the BIOS? if(!system.controls.power->value()) { system.controls.power->setValue(true); //press power on the user's behalf. pollPowerButtonSkipCounter = 6000; //half a second, or ~30 frames at 198 lines/frame } } return step(16); } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { clocks <<= clock.rate; prescaler.step(clocks); adc.step(clocks); rtc.step(clocks); watchdog.step(clocks); Thread::step(clocks); Thread::synchronize(); } auto CPU::pollPowerButton() -> void { //suppress user input when we are simulating a power button press. if(pollPowerButtonSkipCounter > 0) --pollPowerButtonSkipCounter; else platform->input(system.controls.power); nmi.set(!system.controls.power->value()); } auto CPU::power() -> void { TLCS900H::power(); Thread::create(system.frequency(), {&CPU::main, this}); n24 address; //read hardware reset vector. address.byte(0) = system.bios.read(0xff00); address.byte(1) = system.bios.read(0xff01); address.byte(2) = system.bios.read(0xff02); //detect whether the loaded ram data has already been through the boot process. //this byte is written when entering or leaving a halt state and is never zero, //making it convenient to test. if(ram[0x2c7a] != 0) { //read VECT_SHUTDOWN; it may seem counterintuitive to jump here on power-on, //but it allows the BIOS to perform cleanup that would normally only occur //when the user shuts off the device before switching cartridges. address.byte(0) = system.bios.read(0xfe00); address.byte(1) = system.bios.read(0xfe01); address.byte(2) = system.bios.read(0xfe02); store(XSP, 0x6c00); //system calls require a stack } store(PC, address); interrupts = {}; nmi.power(0x20); nmi.enable = 0; nmi.maskable = 0; nmi.priority = 7; nmi.line = 1; nmi.edge.rising = 0; nmi.edge.falling = 1; intwd.power(0x24); intwd.dmaAllowed = 0; intwd.enable = 1; intwd.maskable = 0; intwd.priority = 7; intwd.line = 1; intwd.edge.falling = 1; int0.power(0x28); int4.power(0x2c); int5.power(0x30); int6.power(0x34); int7.power(0x38); intt0.power(0x40); intt1.power(0x44); intt2.power(0x48); intt3.power(0x4c); inttr4.power(0x50); inttr5.power(0x54); inttr6.power(0x58); inttr7.power(0x5c); intrx0.power(0x60); inttx0.power(0x64); intrx1.power(0x68); inttx1.power(0x6c); intad.power(0x70); inttc0.power(0x74); inttc0.dmaAllowed = 0; inttc1.power(0x78); inttc1.dmaAllowed = 0; inttc2.power(0x7c); inttc2.dmaAllowed = 0; inttc3.power(0x80); inttc3.dmaAllowed = 0; dma0 = {}; dma1 = {}; dma2 = {}; dma3 = {}; p10.latch = 0; p10.flow = 1; p11.latch = 0; p11.flow = 1; p12.latch = 0; p12.flow = 1; p13.latch = 0; p13.flow = 1; p14.latch = 0; p14.flow = 1; p15.latch = 0; p15.flow = 1; p16.latch = 0; p16.flow = 1; p17.latch = 0; p17.flow = 1; p20.latch = 1; p20.mode = 1; p21.latch = 1; p21.mode = 1; p22.latch = 1; p22.mode = 1; p23.latch = 1; p23.mode = 1; p24.latch = 1; p24.mode = 1; p25.latch = 1; p25.mode = 1; p26.latch = 1; p26.mode = 1; p27.latch = 1; p27.mode = 1; p52.latch = 1; p52.flow = 1; p52.mode = 1; p53.latch = 1; p53.flow = 1; p53.mode = 1; p54.latch = 1; p54.flow = 1; p54.mode = 1; p55.latch = 1; p55.flow = 1; p55.mode = 1; p60.latch = 1; p60.mode = 1; p61.latch = 1; p61.mode = 1; p62.latch = 1; p62.mode = 1; p63.latch = 1; p63.mode = 1; p64.latch = 1; p64.mode = 1; p65.latch = 1; p65.mode = 1; p70.latch = 1; p70.mode = 1; p71.latch = 1; p71.mode = 1; p72.latch = 1; p72.mode = 1; p73.latch = 1; p73.mode = 1; p74.latch = 1; p74.mode = 1; p75.latch = 1; p75.mode = 1; p76.latch = 1; p76.mode = 1; p77.latch = 1; p77.mode = 1; p80.latch = 1; p80.flow = 1; p80.mode = 1; p81.latch = 1; p81.flow = 1; p82.latch = 1; p82.flow = 1; p82.mode = 1; p83.latch = 1; p83.flow = 1; p83.mode = 1; p84.latch = 1; p84.flow = 1; p85.latch = 1; p85.flow = 1; p85.mode = 1; p90.latch = 1; p91.latch = 1; p92.latch = 1; p93.latch = 1; pa0.latch = 0; pa0.flow = 1; pa1.latch = 1; pa1.flow = 1; pa2.latch = 1; pa2.flow = 1; pa2.mode = 1; pa3.latch = 1; pa3.flow = 1; pa3.mode = 1; pb0.latch = 1; pb0.flow = 1; pb1.latch = 1; pb1.flow = 1; pb2.latch = 1; pb2.flow = 1; pb2.mode = 1; pb3.latch = 1; pb3.flow = 1; pb3.mode = 1; pb4.latch = 1; pb4.flow = 1; pb5.latch = 1; pb5.flow = 1; pb6.latch = 1; pb6.flow = 1; pb6.mode = 1; pb7.latch = 1; pb7.flow = 1; prescaler = {}; ti0 = {}; ti4 = {}; ti5 = {}; ti6 = {}; ti7 = {}; to1 = {}; to3 = {}; to4 = {}; to5 = {}; to6 = {}; to7 = {}; t0 = {}; t1 = {}; ff1 = {}; t01 = {}; t2 = {}; t3 = {}; ff3 = {}; t23 = {}; ff4 = {}; ff5 = {}; t4 = {}; ff6 = {}; t5 = {}; pg0 = {}; pg1 = {}; sc0 = {}; sc1 = {}; adc = {}; rtc = {}; watchdog = {}; dram = {}; io = {}; io.width = Byte; io.timing = 3; io.reader = [](n24 address) -> n8 { return cpu.readIO(address); }; io.writer = [](n24 address, n8 data) { return cpu.writeIO(address, data); }; rom = {}; rom.width = Word; rom.timing = 3; rom.reader = [](n24 address) -> n8 { return system.bios.read(address); }; rom.writer = [](n24 address, n8 data) { return system.bios.write(address, data); }; cram = {}; cram.width = Word; cram.timing = 3; cram.reader = [](n24 address) -> n8 { return cpu.ram.read(address); }; cram.writer = [](n24 address, n8 data) { return cpu.ram.write(address, data); }; aram = {}; aram.width = Word; aram.timing = 3; aram.reader = [](n24 address) -> n8 { return apu.ram.read(address); }; aram.writer = [](n24 address, n8 data) { return apu.ram.write(address, data); }; vram = {}; vram.width = Word; vram.timing = 3; vram.reader = [](n24 address) -> n8 { return kge.read(address); }; vram.writer = [](n24 address, n8 data) { return kge.write(address, data); }; cs0 = {}; cs0.width = Word; cs0.timing = 0; cs0.reader = [](n24 address) -> n8 { return cartridge.read(0, address); }; cs0.writer = [](n24 address, n8 data) { return cartridge.write(0, address, data); }; cs0.address = 0xff0000; cs0.mask = 0x1fffff; cs1 = {}; cs1.width = Word; cs1.timing = 0; cs1.reader = [](n24 address) -> n8 { return cartridge.read(1, address); }; cs1.writer = [](n24 address, n8 data) { return cartridge.write(1, address, data); }; cs1.address = 0xff0000; cs1.mask = 0x3fffff; cs2 = {}; cs2.width = Word; cs2.timing = 0; cs2.reader = [](n24 address) -> n8 { return 0x00; }; cs2.writer = [](n24 address, n8 data) { return; }; cs2.address = 0xff0000; cs2.mask = 0x7fffff; cs2.mode = 0; cs3 = {}; cs3.width = Word; cs3.timing = 0; cs3.reader = [](n24 address) -> n8 { return 0x00; }; cs3.writer = [](n24 address, n8 data) { return; }; cs3.address = 0xff0000; cs3.mask = 0x7fffff; cs3.cas = 0; csx = {}; csx.width = Word; csx.timing = 0; csx.reader = [](n24 address) -> n8 { return 0x00; }; csx.writer = [](n24 address, n8 data) { return; }; clock = {}; misc = {}; pollPowerButtonSkipCounter = 0; } } ares-126/ares/ngp/cpu/cpu.hpp000066400000000000000000000366741415063341600161460ustar00rootroot00000000000000//the Neo Geo Pocket CPU is a custom component, but its internal registers most //closely match the Toshiba TMP95C061. Until it's known exactly which components //actually exist, this class tries to emulate all TMP95C061 functionality that //it is able to. struct CPU : TLCS900H, Thread { Node::Object node; ares::Memory::Writable ram; //12KB struct Debugger { CPU& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto instruction() -> void; auto interrupt(u8 vector) -> void; auto readIO(u8 address, u8 data) -> void; auto writeIO(u8 address, u8 data) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification systemCall; Node::Debugger::Tracer::Notification io; } tracer; vector vectors; } debugger{*this}; //Neo Geo Pocket Color: 0x87e2 (K2GE mode selection) is a privileged register. //the development manual states user-mode code cannot change this value, and //yet Dokodemo Mahjong does so anyway, and sets it to grayscale mode despite //operating in color mode, and further fails to set the K1GE compatibility //palette, resulting in incorrect colors. I am not certain how, but the NGPC //blocks this write command, so I attempt to simulate that here. //KGE::write(n24, n8) calls this function. auto privilegedMode() const -> bool { return TLCS900H::load(PC) >= 0xff0000; //may also be RFP == 3 } //cpu.cpp auto load(Node::Object) -> void; auto save() -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto pollPowerButton() -> void; auto power() -> void; //memory.cpp auto width(n24 address) -> u32 override; auto speed(u32 width, n24 address) -> n32 override; auto read(u32 width, n24 address) -> n32 override; auto write(u32 width, n24 address, n32 data) -> void override; auto disassembleRead(n24 address) -> n8 override; //io.cpp auto readIO(n8 address) -> n8; auto writeIO(n8 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; //private: struct Interrupts { //interrupts.cpp auto poll() -> void; auto fire() -> bool; n8 vector; n3 priority; } interrupts; struct Interrupt { //interrupts.cpp auto power(n8 vector) -> void; auto operator=(bool) -> void; auto poll(n8& vector, n3& priority) -> void; auto fire(n8 vector) -> void; auto set(bool line) -> void; auto raise() -> void; auto lower() -> void; auto trigger() -> void; auto clear() -> void; auto setEnable(n1 enable) -> void; auto setPriority(n3 priority) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 vector; n1 dmaAllowed; n1 enable; n1 maskable; n3 priority; n1 line; n1 pending; struct Level { n1 high; n1 low; } level; struct Edge { n1 rising; n1 falling; } edge; }; //non-maskable Interrupt nmi; Interrupt intwd; //maskable Interrupt int0; Interrupt int4; Interrupt int5; Interrupt int6; Interrupt int7; Interrupt intt0; Interrupt intt1; Interrupt intt2; Interrupt intt3; Interrupt inttr4; Interrupt inttr5; Interrupt inttr6; Interrupt inttr7; Interrupt intrx0; Interrupt inttx0; Interrupt intrx1; Interrupt inttx1; Interrupt intad; Interrupt inttc0; Interrupt inttc1; Interrupt inttc2; Interrupt inttc3; struct DMA { n8 vector; } dma0, dma1, dma2, dma3; //ports.cpp struct PortFlow { auto readable() const { return flow == 0; } //in auto writable() const { return flow == 1; } //out n1 flow; }; struct PortMode { auto internal() const { return mode == 0; } //port auto external() const { return mode == 1; } //timer, etc n1 mode; }; // P10-17, D8-D15 struct P1 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } p10, p11, p12, p13, p14, p15, p16, p17; // P20-P27, A16-A23 struct P2 : PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } p20, p21, p22, p23, p24, p25, p26, p27; // P52, /HWR // P53, /BUSRQ // P54, /BUSAK // P55, R, /W struct P5 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } p52, p53, p54, p55; // P60, /CS0 // P61, /CS1 // P62, /CS2 // P63, /CS3, /CAS // P64, /RAS // P65, /REFOUT struct P6 : PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } p60, p61, p62, p63, p64, p65; // P70-P73, PG00-PG03 // P74-P77, PG10-PG13 struct P7 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } p70, p71, p72, p73, p74, p75, p76, p77; // P80, TXD0 // P81, RXD0 // P82, /CTS0, SCLK0 // P83, TCD1 // P84, RXD1 // P85, SCLK1 struct P8F : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } p81, p84; struct P8MA : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; n1 drain; //0 = CMOS output, 1 = open-drain output } p80, p83; struct P8MB : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } p82, p85; // P90-P93, AN0-AN3 struct P9 { operator bool() const; n1 latch; } p90, p91, p92, p93; // PA0, /WAIT struct PA0 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pa0; // PA1, TI0, (/HBLANK) struct PA1 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pa1; // PA2, TO1 struct PA2 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } pa2; // PA3, TO3 struct PA3 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } pa3; // PB0, INT4, TI4, (/VBLANK) struct PB0 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb0; // PB1, INT5, TI5, (APU) struct PB1 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb1; // PB2, TO4 struct PB2 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb2; // PB3, TO5 struct PB3 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb3; // PB4, INT6, TI6 struct PB4 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb4; // PB5, INT7, TI7 struct PB5 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb5; // PB6, TO6 struct PB6 : PortFlow, PortMode { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb6; // PB7, INT0 struct PB7 : PortFlow { operator bool() const; auto operator=(bool) -> void; n1 latch; } pb7; //timers.cpp struct Prescaler { auto step(u32 clocks) -> void; n1 enable; n32 counter; } prescaler; struct TI0 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } ti0; struct TI4 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } ti4; struct TI5 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } ti5; struct TI6 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } ti6; struct TI7 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } ti7; struct TO1 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } to1; struct TO3 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } to3; struct TO4 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } to4; struct TO5 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } to5; struct TO6 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } to6; struct TO7 { operator bool() const { return latch; } auto operator=(bool) -> void; n1 latch; } to7; //8-bit timers struct Timer0 { auto disable() -> void; n1 enable; //t0run n2 mode; //t0clk n8 counter; //uc0 n8 compare; //treg0 } t0; struct Timer1 { auto disable() -> void; n1 enable; //t1run n2 mode; //t1clk n8 counter; //uc1 n8 compare; //treg1 } t1; struct FlipFlop1 { operator bool() const { return output; } auto operator=(bool) -> void; n1 source; //ff1is n1 invert; //ff1ie n1 output; } ff1; struct Timer01 { auto clockT0() -> void; auto clockT1() -> void; n2 mode; //t01m n2 pwm; //pwm0 struct Buffer { n1 enable; n8 compare; } buffer; } t01; struct Timer2 { auto disable() -> void; n1 enable; n2 mode; n8 counter; n8 compare; } t2; struct Timer3 { auto disable() -> void; n1 enable; n2 mode; n8 counter; n8 compare; } t3; struct FlipFlop3 { operator bool() const { return output; } auto operator=(bool) -> void; n1 source; n1 invert; n1 output; } ff3; struct Timer23 { auto clockT2() -> void; auto clockT3() -> void; n2 mode; n2 pwm; struct Buffer { n1 enable; n8 compare; } buffer; } t23; //16-bit timers struct FlipFlop4 { operator bool() const { return output; } auto operator=(bool) -> void; n1 flipOnCompare4; n1 flipOnCompare5; n1 flipOnCapture1; n1 flipOnCapture2; n1 output; } ff4; struct FlipFlop5 { operator bool() const { return output; } auto operator=(bool) -> void; n1 flipOnCompare5; n1 flipOnCapture2; n1 output; } ff5; struct Timer4 { auto disable() -> void; auto captureTo1() -> void; auto captureTo2() -> void; auto clock() -> void; n1 enable; n2 mode; n2 captureMode; n1 clearOnCompare5; n16 counter; n16 compare4; n16 compare5; n16 capture1; n16 capture2; struct Buffer { n1 enable; n16 compare; } buffer; } t4; struct FlipFlop6 { operator bool() const { return output; } auto operator=(bool) -> void; n1 flipOnCompare6; n1 flipOnCompare7; n1 flipOnCapture3; n1 flipOnCapture4; n1 output; } ff6; struct Timer5 { auto disable() -> void; auto captureTo3() -> void; auto captureTo4() -> void; auto clock() -> void; n1 enable; n2 mode; n2 captureMode; n1 clearOnCompare7; n16 counter; n16 compare6; n16 compare7; n16 capture3; n16 capture4; struct Buffer { n1 enable; n16 compare; } buffer; } t5; struct PatternGenerator { n1 shiftTrigger; //0 = 8-bit (timer 0,1 or 2,3), 1 = 16-bit (timer 4 or 5) n4 shiftAlternateRegister; n4 patternGenerationOutput; n1 triggerInputEnable; n1 excitationMode; //0 = 1 or 2 (full step), 1 = 1-2 (half step) n1 rotatingDirection; //0 = normal rotation, 1 = reverse rotation n1 writeMode; //0 = 8-bit, 1 = 4-bit } pg0, pg1; //serial.cpp struct SerialChannel { auto receive() -> n8; auto transmit(n8 data) -> void; n8 buffer; n4 baudRateDividend; //0 = 16, 1 = invalid, 2-15 = 2-15 n2 baudRateDivider; //0 = T0, 1 = T2, 2 = T8, 3 = T32 n1 inputClock; //0 = baud rate generator, 1 = SCLK pin input n1 clockEdge; //0 = rising edge, 1 = falling edge n1 framingError; n1 parityError; n1 overrunError; n1 parityAddition; //1 = enable n1 parity; //0 = odd, 1 = even n1 receiveBit8; n2 clock; //0 = TO2, 1 = baud rate generator, 2 = internal clock, 3 = don't care n2 mode; //0 = I/O interface, 1 = 7-bit UART, 2 = 8-bit, 3 = 9-bit n1 wakeUp; //1 = enable n1 receiving; //1 = enable n1 handshake; //0 = CTS disable, 1 = CTS enable n1 transferBit8; //0 = no, 1 = yes } sc0, sc1; //adc.cpp struct ADC { auto step(u32 clocks) -> void; n32 counter; n2 channel; n1 speed; //0 = 160 states, 1 = 320 states n1 scan; n1 repeat; n1 busy; n1 end; n10 result[4]; } adc; //rtc.cpp struct RTC { auto step(u32 clocks) -> void; auto daysInMonth() -> n8; auto daysInFebruary() -> n8; n32 counter; n1 enable; n8 second; n8 minute; n8 hour; n8 weekday; n8 day; n8 month; n8 year; } rtc; //watchdog.cpp struct Watchdog { auto step(u32 clocks) -> void; n32 counter; n1 enable; n1 drive; n1 reset; n2 standby; n1 warmup; n2 frequency; } watchdog; struct DRAM { n1 refreshCycle; //0 = not inserted, 1 = inserted n3 refreshCycleWidth; //2-9 states n3 refreshCycleInsertion; //31,62,78,97,109,124,154,195 states n1 dummyCycle; //0 = prohibit, 1 = execute n1 memoryAccessEnable; //1 = enable n2 multiplexAddressLength; //8-11 bits n1 multiplexAddressEnable; //1 = enable n1 memoryAccessSpeed; //0 = normal, 1 = slow n1 busReleaseMode; //DRAM control signals: 0 = also released, 1 = not released n1 selfRefresh = 1; //0 = execute, 1 = release } dram; //memory.cpp struct Bus { auto wait() -> void; auto speed(u32 width, n24 address) -> n32; auto read(u32 width, n24 address) -> n32; auto write(u32 width, n24 address, n32 data) -> void; n8 width; n2 timing; function reader; function writer; //unserialized: n1 debugging; }; struct IO : Bus { auto select(n24 address) const -> bool; } io; struct ROM : Bus { auto select(n24 address) const -> bool; } rom; struct CRAM : Bus { auto select(n24 address) const -> bool; } cram; struct ARAM : Bus { auto select(n24 address) const -> bool; } aram; struct VRAM : Bus { auto select(n24 address) const -> bool; } vram; struct CS0 : Bus { auto select(n24 address) const -> bool; n1 enable; n24 address; n24 mask; } cs0; struct CS1 : Bus { auto select(n24 address) const -> bool; n1 enable; n24 address; n24 mask; } cs1; struct CS2 : Bus { auto select(n24 address) const -> bool; n1 enable; n24 address; n24 mask; n1 mode; //0 = fixed; 1 = address/mask } cs2; struct CS3 : Bus { auto select(n24 address) const -> bool; n1 enable; n24 address; n24 mask; n1 cas; //0 = /CS3, 1 = /CAS } cs3; struct CSX : Bus { } csx; struct Clock { //0 = 6144000hz //1 = 3072000hz //2 = 1536000hz //3 = 768000hz //4 = 384000hz //5 = 192000hz? (undocumented) //6 = 96000hz? (undocumented) //7 = 48000hz? (undocumented) n3 rate = 4; //default value unconfirmed } clock; struct Misc { n1 p5; //Port 5: 0 = PSRAM mode, 1 = (not PSRAM mode?) [unemulated] n1 rtsDisable; } misc; struct Unknown { n8 b4; n8 b5; n8 b6; n8 b7; } unknown; //unserialized: n32 pollPowerButtonSkipCounter; }; extern CPU cpu; ares-126/ares/ngp/cpu/debugger.cpp000066400000000000000000000163761415063341600171330ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(self.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return self.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return self.ram.write(address, data); }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "CPU"); tracer.systemCall = parent->append("System Call", "CPU"); tracer.io = parent->append("I/O", "CPU"); vectors.resize(64); for(u32 vector : range(vectors.size())) { vectors[vector].byte(0) = system.bios.read(0xfe00 + vector * 4 + 0); vectors[vector].byte(1) = system.bios.read(0xfe00 + vector * 4 + 1); vectors[vector].byte(2) = system.bios.read(0xfe00 + vector * 4 + 2); } } auto CPU::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); parent->remove(tracer.instruction); parent->remove(tracer.interrupt); parent->remove(tracer.systemCall); parent->remove(tracer.io); memory.ram.reset(); tracer.instruction.reset(); tracer.interrupt.reset(); tracer.systemCall.reset(); tracer.io.reset(); } auto CPU::Debugger::instruction() -> void { if(unlikely(tracer.systemCall->enabled())) { auto PC = self.TLCS900H::load(TLCS900H::PC); if(!PC) return; if(auto vectorID = vectors.find(PC)) { auto RA3 = self.TLCS900H::load(TLCS900H::RA3); auto RC3 = self.TLCS900H::load(TLCS900H::RC3); auto RB3 = self.TLCS900H::load(TLCS900H::RB3); auto QC3 = self.TLCS900H::load(TLCS900H::QC3); auto RD3 = self.TLCS900H::load(TLCS900H::RD3); auto XDE3 = self.TLCS900H::load(TLCS900H::XDE3); auto XHL3 = self.TLCS900H::load(TLCS900H::XHL3); string name; vector args; switch(*vectorID) { case 0x00: name = "VECT_SHUTDOWN"; break; case 0x01: name = "VECT_CLOCKGEARSET"; args.append({"clockSpeed:0x", hex(RB3, 2L)}); args.append({"clockRegeneration:0x", hex(RC3, 2L)}); break; case 0x02: name = "VECT_RTCGET"; args.append({"storageAddress:0x", hex(XHL3, 6L)}); break; //case 0x03: break; //unknown case 0x04: name = "VECT_INTLVSET"; args.append({"interruptLevel:0x", hex(RB3, 2L)}); args.append({"interruptNumber:0x", hex(RC3, 2L)}); break; case 0x05: name = "VECT_SYSFONTSET"; args.append({"foreground:0x", hex(RA3 >> 0, 1L)}); args.append({"background:0x", hex(RA3 >> 4, 1L)}); break; case 0x06: name = "VECT_FLASHWRITE"; args.append({"address:0x", hex(RA3, 2L)}); args.append({"length:0x", hex(RC3 << 8, 4L)}); args.append({"source:0x", hex(XHL3, 6L)}); args.append({"target:0x", hex(XDE3, 6L)}); break; case 0x07: name = "VECT_FLASHALLERS"; args.append({"address:0x", hex(RA3, 2L)}); break; case 0x08: name = "VECT_FLASHERS"; args.append({"address:0x", hex(RA3, 2L)}); args.append({"block:0x", hex(RB3, 2L)}); break; case 0x09: name = "VECT_ALARMSET"; args.append({"day:0x", hex(QC3, 2L)}); args.append({"hour:0x", hex(RB3, 2L)}); args.append({"minute:0x", hex(RC3, 2L)}); break; //case 0x0a: //unknown case 0x0b: name = "VECT_ALARMDOWNSET"; args.append({"day:0x", hex(QC3, 2L)}); args.append({"hour:0x", hex(RB3, 2L)}); args.append({"minute:0x", hex(RC3, 2L)}); break; //case 0x0c: //unknown case 0x0d: name = "VECT_FLASHPROTECT"; args.append({"address:0x", hex(RA3, 2L)}); args.append({"block:0x", hex(RB3, 2L)}); args.append({"type:0x", hex(RC3, 2L)}); args.append({"blocks:0x", hex(RD3, 2L)}); break; case 0x0e: name = "VECT_GETMODESET"; args.append({"mode:0x", hex(RA3, 2L)}); break; //case 0x0f: //unknown case 0x10: name = "VECT_COMINIT"; break; case 0x11: name = "VECT_COMSENDSTART"; break; case 0x12: name = "VECT_COMRECEIVESTART"; break; case 0x13: name = "VECT_COMCREATEDATA"; args.append({"data:0x", hex(RB3, 2L)}); break; case 0x14: name = "VECT_COMGETDATA"; break; case 0x15: name = "VECT_COMONRTS"; break; case 0x16: name = "VECT_COMOFFRTS"; break; case 0x17: name = "VECT_COMSENDSTATUS"; break; case 0x18: name = "VECT_COMRECEIVESTATUS"; break; case 0x19: name = "VECT_COMCREATEBUFDATA"; args.append({"address:0x", hex(XHL3, 6L)}); args.append({"size:0x", hex(RB3, 2L)}); break; case 0x1a: name = "VECT_COMGETBUFDATA"; args.append({"address:0x", hex(XHL3, 6L)}); args.append({"size:0x", hex(RB3, 2L)}); break; default: name = {"VECT_UNKNOWN[$", hex(*vectorID, 2L), "]"}; break; } tracer.systemCall->notify(string{name, "(", args.merge(", "), ")"}); } } if(unlikely(tracer.instruction->enabled())) { auto PC = self.TLCS900H::load(self.TLCS900H::PC); if(tracer.instruction->address(PC)) { tracer.instruction->notify(self.disassembleInstruction(), self.disassembleContext()); } } } auto CPU::Debugger::interrupt(u8 vector) -> void { if(unlikely(tracer.interrupt->enabled())) { static const string name[64] = { "SWI0", //0x00 "SWI1", //0x04 "SWI2", //0x08 "SWI3", //0x0c "SWI4", //0x10 "SWI5", //0x14 "SWI6", //0x18 "SWI7", //0x1c "NMI", //0x20 "INTWD", //0x24 "INT0", //0x28 "INT4", //0x2c "INT5", //0x30 "INT6", //0x34 "INT7", //0x38 "$3C", //0x3c "INTT0", //0x40 "INTT1", //0x44 "INTT2", //0x48 "INTT3", //0x4c "INTTR4", //0x50 "INTTR5", //0x54 "INTTR6", //0x58 "INTTR7", //0x5c "INTRX0", //0x60 "INTTX0", //0x64 "INTRX1", //0x68 "INTTX1", //0x6c "INTAD", //0x70 "INTTC0", //0x74 "INTTC1", //0x78 "INTTC2", //0x7c "INTTC3", //0x80 "$84", "$88", "$8c", "$90", "$94", "$98", "$9c", "$a0", "$a4", "$a8", "$ac", "$b0", "$b4", "$b8", "$bc", "$c0", "$c4", "$c8", "$cc", "$d0", "$d4", "$d8", "$dc", "$e0", "$e4", "$e8", "$ec", "$f0", "$f4", "$f8", "$fc", }; tracer.interrupt->notify({"IRQ (", name[vector >> 2], ")"}); } } auto CPU::Debugger::readIO(u8 address, u8 data) -> void { if(unlikely(tracer.io->enabled())) { tracer.io->notify({"read ", hex(address, 2L), " = ", hex(data, 2L)}); } } auto CPU::Debugger::writeIO(u8 address, u8 data) -> void { if(unlikely(tracer.io->enabled())) { if(address == 0x6f) return; //ignore watchdog writes (too frequent) tracer.io->notify({"write ", hex(address, 2L), " = ", hex(data, 2L)}); } } ares-126/ares/ngp/cpu/interrupts.cpp000066400000000000000000000106151415063341600175540ustar00rootroot00000000000000auto CPU::Interrupts::poll() -> void { priority = 0; cpu.inttc3.poll(vector, priority); cpu.inttc2.poll(vector, priority); cpu.inttc1.poll(vector, priority); cpu.inttc0.poll(vector, priority); cpu.intad .poll(vector, priority); cpu.inttx1.poll(vector, priority); cpu.intrx1.poll(vector, priority); cpu.inttx0.poll(vector, priority); cpu.intrx0.poll(vector, priority); cpu.inttr7.poll(vector, priority); cpu.inttr6.poll(vector, priority); cpu.inttr5.poll(vector, priority); cpu.inttr4.poll(vector, priority); cpu.intt3 .poll(vector, priority); cpu.intt2 .poll(vector, priority); cpu.intt1 .poll(vector, priority); cpu.intt0 .poll(vector, priority); cpu.int7 .poll(vector, priority); cpu.int6 .poll(vector, priority); cpu.int5 .poll(vector, priority); cpu.int4 .poll(vector, priority); cpu.int0 .poll(vector, priority); cpu.intwd .poll(vector, priority); cpu.nmi .poll(vector, priority); } auto CPU::Interrupts::fire() -> bool { if(!priority || priority < cpu.IFF) return false; cpu.inttc3.fire(vector); cpu.inttc2.fire(vector); cpu.inttc1.fire(vector); cpu.inttc0.fire(vector); cpu.intad .fire(vector); cpu.inttx1.fire(vector); cpu.intrx1.fire(vector); cpu.inttx0.fire(vector); cpu.intrx0.fire(vector); cpu.inttr7.fire(vector); cpu.inttr6.fire(vector); cpu.inttr5.fire(vector); cpu.inttr4.fire(vector); cpu.intt3 .fire(vector); cpu.intt2 .fire(vector); cpu.intt1 .fire(vector); cpu.intt0 .fire(vector); cpu.int7 .fire(vector); cpu.int6 .fire(vector); cpu.int5 .fire(vector); cpu.int4 .fire(vector); cpu.int0 .fire(vector); cpu.intwd .fire(vector); cpu.nmi .fire(vector); if(vector == cpu.dma0.vector) { if(cpu.dma(0)) { cpu.dma0.vector = 0; cpu.inttc0.pending = 1; } } else if(vector == cpu.dma1.vector) { if(cpu.dma(1)) { cpu.dma1.vector = 0; cpu.inttc1.pending = 1; } } else if(vector == cpu.dma2.vector) { if(cpu.dma(2)) { cpu.dma2.vector = 0; cpu.inttc2.pending = 1; } } else if(vector == cpu.dma3.vector) { if(cpu.dma(3)) { cpu.dma3.vector = 0; cpu.inttc3.pending = 1; } } else { cpu.debugger.interrupt(vector); cpu.interrupt(vector); cpu.IFF = priority; if(cpu.IFF != 7) cpu.IFF++; } poll(); return true; } auto CPU::Interrupt::operator=(bool value) -> void { set(value); } auto CPU::Interrupt::poll(n8& vector, n3& priority) -> void { if(!enable || !pending) return; if(!maskable) { priority = this->priority; vector = this->vector; return; } if(dmaAllowed && cpu.IFF <= 6) { if(this->vector == cpu.dma0.vector || this->vector == cpu.dma1.vector || this->vector == cpu.dma2.vector || this->vector == cpu.dma3.vector ) { priority = 6; vector = this->vector; return; } } if(this->priority == 0 || this->priority == 7) return; if(this->priority >= priority) { priority = this->priority; vector = this->vector; return; } } auto CPU::Interrupt::fire(n8 vector) -> void { if(this->vector != vector) return; if(line == 0 && !level.low ) pending = 0; if(line == 1 && !level.high) pending = 0; } auto CPU::Interrupt::set(bool line) -> void { line ? raise() : lower(); } auto CPU::Interrupt::raise() -> void { if(!enable || line == 1) return; line = 1; if(pending || !(level.high || edge.rising)) return; pending = 1; cpu.interrupts.poll(); } auto CPU::Interrupt::lower() -> void { if(!enable || line == 0) return; line = 0; if(pending || !(level.low || edge.falling)) return; pending = 1; cpu.interrupts.poll(); } auto CPU::Interrupt::trigger() -> void { if(pending) return; pending = 1; cpu.interrupts.poll(); } auto CPU::Interrupt::clear() -> void { if(!pending) return; pending = 0; cpu.interrupts.poll(); } auto CPU::Interrupt::setEnable(n1 enable) -> void { if(this->enable == enable) return; this->enable = enable; cpu.interrupts.poll(); } auto CPU::Interrupt::setPriority(n3 priority) -> void { if(this->priority == priority) return; this->priority = priority; cpu.interrupts.poll(); } auto CPU::Interrupt::power(n8 vector) -> void { this->vector = vector; //set up defaults that apply to most vectors //CPU::power() will perform specialization as needed later dmaAllowed = 1; enable = 1; maskable = 1; priority = 0; line = 0; pending = 0; level.high = 0; level.low = 0; edge.rising = 1; edge.falling = 0; } ares-126/ares/ngp/cpu/io.cpp000066400000000000000000000763601415063341600157550ustar00rootroot00000000000000auto CPU::readIO(n8 address) -> n8 { n8 data; switch(address) { //P1 case 0x01: data.bit(0) = p10; data.bit(1) = p11; data.bit(2) = p12; data.bit(3) = p13; data.bit(4) = p14; data.bit(5) = p15; data.bit(6) = p16; data.bit(7) = p17; break; //P1CR (write-only) case 0x04: break; //P2 case 0x06: data.bit(0) = p20; data.bit(1) = p21; data.bit(2) = p22; data.bit(3) = p23; data.bit(4) = p24; data.bit(5) = p25; data.bit(6) = p26; data.bit(7) = p27; break; //P2FC (write-only) case 0x09: break; //P5 case 0x0d: data.bit(0) = misc.p5; data.bit(2) = p52; data.bit(3) = p53; data.bit(4) = p54; data.bit(5) = p55; break; //P5CR (write-only) case 0x10: break; //P5SC (write-only) case 0x11: break; //P6 case 0x12: data.bit(0) = p60; data.bit(1) = p61; data.bit(2) = p62; data.bit(3) = p63; data.bit(4) = p64; data.bit(5) = p65; break; //P7 case 0x13: data.bit(0) = p70; data.bit(1) = p71; data.bit(2) = p72; data.bit(3) = p73; data.bit(4) = p74; data.bit(5) = p75; data.bit(6) = p76; data.bit(7) = p77; break; //P6FC (write-only) case 0x15: break; //P7FC (write-only) case 0x17: break; //P8 case 0x18: data.bit(0) = p80; data.bit(1) = p81; data.bit(2) = p82; data.bit(3) = p83; data.bit(4) = p84; data.bit(5) = p85; break; //P9 case 0x19: data.bit(0) = p90; data.bit(1) = p91; data.bit(2) = p92; data.bit(3) = p93; break; //P8CR (write-only) case 0x1a: break; //P8FC (write-only) case 0x1b: break; //PA case 0x1e: data.bit(0) = pa0; data.bit(1) = pa1; data.bit(2) = pa2; data.bit(3) = pa3; break; //PB case 0x1f: data.bit(0) = pb0; data.bit(1) = pb1; data.bit(2) = pb2; data.bit(3) = pb3; data.bit(4) = pb4; data.bit(5) = pb5; data.bit(6) = pb6; data.bit(7) = pb7; break; //TRUN case 0x20: data.bit(0) = t0.enable; data.bit(1) = t1.enable; data.bit(2) = t2.enable; data.bit(3) = t3.enable; data.bit(4) = t4.enable; data.bit(5) = t5.enable; data.bit(7) = prescaler.enable; break; //TREG0 (write-only) case 0x22: break; //TREG1 (write-only) case 0x23: break; //T01MOD case 0x24: data.bit(0,1) = t0.mode; data.bit(2,3) = t1.mode; data.bit(4,5) = t01.pwm; data.bit(6,7) = t01.mode; break; //TFFCR case 0x25: data.bit(0) = ff1.source; data.bit(1) = ff1.invert; data.bit(2,3) = 0b11; //write-only data.bit(4) = ff3.source; data.bit(5) = ff3.invert; data.bit(6,7) = 0b11; //write-only break; //TREG2 (write-only) case 0x26: break; //TREG3 (write-only) case 0x27: break; //T23MOD case 0x28: data.bit(0,1) = t2.mode; data.bit(2,3) = t3.mode; data.bit(4,5) = t23.pwm; data.bit(6,7) = t23.mode; break; //TRDC case 0x29: data.bit(0) = t01.buffer.enable; data.bit(1) = t23.buffer.enable; break; //PACR (write-only) case 0x2c: break; //PAFC (write-only) case 0x2d: break; //PBCR (write-only) case 0x2e: break; //PBFC (write-only) case 0x2f: break; //TREG4 (write-only?) case 0x30: break; case 0x31: break; //TREG5 (write-only?) case 0x32: break; case 0x33: break; //CAP1 case 0x34: data = t4.capture1.byte(0); break; case 0x35: data = t4.capture1.byte(1); break; //CAP2 case 0x36: data = t4.capture2.byte(0); break; case 0x37: data = t4.capture2.byte(1); break; //T4MOD case 0x38: data.bit(0,1) = t4.mode; data.bit(2) = t4.clearOnCompare5; data.bit(3,4) = t4.captureMode; data.bit(5) = 1; data.bit(6) = ff5.flipOnCompare5; data.bit(7) = ff5.flipOnCapture2; break; //T4FFCR case 0x39: data.bit(0,1) = 0b11; data.bit(2) = ff4.flipOnCompare4; data.bit(3) = ff4.flipOnCompare5; data.bit(4) = ff4.flipOnCapture1; data.bit(5) = ff4.flipOnCapture2; data.bit(6,7) = 0b11; break; //T45CR case 0x3a: data.bit(0) = t4.buffer.enable; data.bit(1) = t5.buffer.enable; data.bit(2) = pg0.shiftTrigger; data.bit(3) = pg1.shiftTrigger; break; //MSAR0 case 0x3c: data.bit(0,7) = cs0.address.bit(16,23); break; //MAMR0 case 0x3d: data.bit(0,1) = cs0.mask.bit(8,9); data.bit(2,7) = cs0.mask.bit(15,20); break; //MSAR1 case 0x3e: data.bit(0,7) = cs1.address.bit(16,23); break; //MAMR1 case 0x3f: data.bit(0,1) = cs1.mask.bit(8,9); data.bit(2,7) = cs1.mask.bit(16,21); break; //TREG6 (write-only?) case 0x40: break; case 0x41: break; //TREG7 (write-only?) case 0x42: break; case 0x43: break; //CAP3 case 0x44: data = t5.capture3.byte(0); break; case 0x45: data = t5.capture4.byte(1); break; //CAP4 case 0x46: data = t5.capture3.byte(0); break; case 0x47: data = t5.capture4.byte(1); break; //T5MOD case 0x48: data.bit(0,1) = t5.mode; data.bit(2) = t5.clearOnCompare7; data.bit(3,4) = t5.captureMode; data.bit(5) = 1; break; //T5FFCR case 0x49: data.bit(0,1) = 0b11; data.bit(2) = ff6.flipOnCompare6; data.bit(3) = ff6.flipOnCompare7; data.bit(4) = ff6.flipOnCapture3; data.bit(5) = ff6.flipOnCapture4; data.bit(6,7) = 0b11; break; //PG0REG case 0x4c: data.bit(0,3) = pg0.shiftAlternateRegister; break; //PG1REG case 0x4d: data.bit(0,3) = pg1.shiftAlternateRegister; break; //PG01CR case 0x4e: data.bit(0) = pg0.triggerInputEnable; data.bit(1) = pg0.excitationMode; data.bit(2) = pg0.rotatingDirection; data.bit(3) = pg0.writeMode; data.bit(4) = pg1.triggerInputEnable; data.bit(5) = pg1.excitationMode; data.bit(6) = pg1.rotatingDirection; data.bit(7) = pg1.writeMode; break; //SC0BUF case 0x50: data = sc0.receive(); break; //SC0CR case 0x51: data.bit(0) = sc0.inputClock; data.bit(1) = sc0.clockEdge; data.bit(2) = sc0.framingError; data.bit(3) = sc0.parityError; data.bit(4) = sc0.overrunError; data.bit(5) = sc0.parityAddition; data.bit(6) = sc0.parity; data.bit(7) = sc0.receiveBit8; sc0.framingError = 0; sc0.parityError = 0; sc0.overrunError = 0; break; //SC0MOD case 0x52: data.bit(0,1) = sc0.clock; data.bit(2,3) = sc0.mode; data.bit(4) = sc0.wakeUp; data.bit(5) = sc0.receiving; data.bit(6) = sc0.handshake; data.bit(7) = sc0.transferBit8; break; //BR0CR case 0x53: data.bit(0,3) = sc0.baudRateDividend; data.bit(4,5) = sc0.baudRateDivider; break; //SC1BUF case 0x54: data = sc1.receive(); break; //SC1CR case 0x55: data.bit(0) = sc1.inputClock; data.bit(1) = sc1.clockEdge; data.bit(2) = sc1.framingError; data.bit(3) = sc1.parityError; data.bit(4) = sc1.overrunError; data.bit(5) = sc1.parityAddition; data.bit(6) = sc1.parity; data.bit(7) = sc1.receiveBit8; sc1.framingError = 0; sc1.parityError = 0; sc1.overrunError = 0; break; //SC1MOD case 0x56: data.bit(0,1) = sc1.clock; data.bit(2,3) = sc1.mode; data.bit(4) = sc1.wakeUp; data.bit(5) = sc1.receiving; data.bit(6) = sc1.handshake; //always 0 data.bit(7) = sc1.transferBit8; break; //BR1CR case 0x57: data.bit(0,3) = sc1.baudRateDividend; data.bit(4,5) = sc1.baudRateDivider; break; //ODE case 0x58: data.bit(0) = p80.drain; data.bit(1) = p83.drain; break; //DREFCR case 0x5a: data.bit(0) = dram.refreshCycle; data.bit(1,3) = dram.refreshCycleWidth; data.bit(4,6) = dram.refreshCycleInsertion; data.bit(7) = dram.dummyCycle; break; //DMEMCR case 0x5b: data.bit(0) = dram.memoryAccessEnable; data.bit(1,2) = dram.multiplexAddressLength; data.bit(3) = dram.multiplexAddressEnable; data.bit(4) = dram.memoryAccessSpeed; data.bit(5) = dram.busReleaseMode; break; //MSAR2 case 0x5c: data.bit(0,7) = cs2.address.bit(16,23); break; //MAMR2 case 0x5d: data.bit(0,7) = cs2.mask.bit(15,22); break; //MSAR3 case 0x5e: data.bit(0,7) = cs3.address.bit(16,23); break; //MAMR3 case 0x5f: data.bit(0,7) = cs3.mask.bit(15,22); break; //ADREG04L case 0x60: data.bit(0,5) = 0b111111; data.bit(6,7) = adc.result[0].bit(0,1); adc.end = 0; break; //ADREG04H case 0x61: data.bit(0,7) = adc.result[0].bit(2,9); adc.end = 0; intad.clear(); break; //ADREG15L case 0x62: data.bit(0,5) = 0b111111; data.bit(6,7) = adc.result[1].bit(0,1); adc.end = 0; break; //ADREG15H case 0x63: data.bit(0,7) = adc.result[1].bit(2,9); adc.end = 0; intad.clear(); break; //ADREG2L case 0x64: data.bit(0,5) = 0b111111; data.bit(6,7) = adc.result[2].bit(0,1); adc.end = 0; break; //ADREG2H case 0x65: data.bit(0,7) = adc.result[2].bit(2,9); adc.end = 0; intad.clear(); break; //ADREG3L case 0x66: data.bit(0,5) = 0b111111; data.bit(6,7) = adc.result[3].bit(0,1); adc.end = 0; break; //ADREG3H case 0x67: data.bit(0,7) = adc.result[3].bit(2,9); adc.end = 0; intad.clear(); break; //B0CS (write-only) case 0x68: break; //B1CS (write-only) case 0x69: break; //B2CS (write-only) case 0x6a: break; //B3CS (write-only) case 0x6b: break; //BEXCS (write-only) case 0x6c: break; //ADMOD case 0x6d: data.bit(0,1) = adc.channel; data.bit(2) = 0; //always reads as zero data.bit(3) = adc.speed; data.bit(4) = adc.scan; data.bit(5) = adc.repeat; data.bit(6) = adc.busy; data.bit(7) = adc.end; break; //WDMOD case 0x6e: data.bit(0) = watchdog.drive; data.bit(1) = watchdog.reset; data.bit(2,3) = watchdog.standby; data.bit(4) = watchdog.warmup; data.bit(5,6) = watchdog.frequency; data.bit(7) = watchdog.enable; break; //WDCR (write-only) case 0x6f: break; //INTE0AD case 0x70: data.bit(0,2) = 0b000; data.bit(3) = int0.pending; data.bit(4,6) = 0b000; data.bit(7) = intad.pending; break; //INTE45 case 0x71: data.bit(0,2) = 0b000; data.bit(3) = int4.pending; data.bit(4,6) = 0b000; data.bit(7) = int5.pending; break; //INTE67 case 0x72: data.bit(0,2) = 0b000; data.bit(3) = int6.pending; data.bit(4,6) = 0b000; data.bit(7) = int7.pending; break; //INTET01 case 0x73: data.bit(0,2) = 0b000; data.bit(3) = intt0.pending; data.bit(4,6) = 0b000; data.bit(7) = intt1.pending; break; //INTET23 case 0x74: data.bit(0,2) = 0b000; data.bit(3) = intt2.pending; data.bit(4,6) = 0b000; data.bit(7) = intt3.pending; break; //INTET45 case 0x75: data.bit(0,2) = 0b000; data.bit(3) = inttr4.pending; data.bit(4,6) = 0b000; data.bit(7) = inttr5.pending; break; //INTET67 case 0x76: data.bit(0,2) = 0b000; data.bit(3) = inttr6.pending; data.bit(4,6) = 0b000; data.bit(7) = inttr7.pending; break; //INTE50 case 0x77: data.bit(0,2) = 0b000; data.bit(3) = intrx0.pending; data.bit(4,6) = 0b000; data.bit(7) = inttx0.pending; break; //INTE51 case 0x78: data.bit(0,2) = 0b000; data.bit(3) = intrx1.pending; data.bit(4,6) = 0b000; data.bit(7) = inttx1.pending; break; //INTETC01 case 0x79: data.bit(0,2) = 0b000; data.bit(3) = inttc0.pending; data.bit(4,6) = 0b000; data.bit(7) = inttc1.pending; break; //INTETC23 case 0x7a: data.bit(0,2) = 0b000; data.bit(3) = inttc2.pending; data.bit(4,6) = 0b000; data.bit(7) = inttc3.pending; break; //IIMC case 0x7b: data.bit(0) = nmi.edge.rising; data.bit(1) = int0.level.high; data.bit(2) = int0.enable; break; //DMA0V (write-only) case 0x7c: break; //DMA1V (write-only) case 0x7d: break; //DMA2V (write-only) case 0x7e: break; //DMA3V (write-only) case 0x7f: break; case 0x80: data.bit(0,2) = clock.rate; //unconfirmed data.bit(3,7) = 0b00000; //unconfirmed break; case 0x90: data = rtc.enable; break; case 0x91: data = rtc.year; break; case 0x92: data = rtc.month; break; case 0x93: data = rtc.day; break; case 0x94: data = rtc.hour; break; case 0x95: data = rtc.minute; break; case 0x96: data = rtc.second; break; case 0x97: data.bit(0,3) = rtc.weekday; data.bit(4,7) = rtc.year & 3; break; case 0xb0: system.controls.poll(); data.bit(0) = system.controls.upLatch; data.bit(1) = system.controls.downLatch; data.bit(2) = system.controls.leftLatch; data.bit(3) = system.controls.rightLatch; data.bit(4) = system.controls.a->value(); data.bit(5) = system.controls.b->value(); data.bit(6) = system.controls.option->value(); data.bit(7) = system.controls.debugger->value(); break; case 0xb1: //power button polled in CPU::pollPowerButton() data.bit(0) = !system.controls.power->value(); data.bit(1) = 1; //sub battery (CR2032) data.bit(2) = 1; //unknown (must be 1 or SNK Gals' Fighter displays a link connection error) break; case 0xb2: data.bit(0) = misc.rtsDisable; break; case 0xb3: data.bit(2) = nmi.enable; break; case 0xb4: data = unknown.b4; break; case 0xb5: data = unknown.b5; break; case 0xb6: data = unknown.b6; break; case 0xb7: data = unknown.b7; break; case 0xbc: data = apu.port.data; break; } debugger.readIO(address, data); return data; } auto CPU::writeIO(n8 address, n8 data) -> void { switch(address) { //P1 case 0x01: p10 = data.bit(0); p11 = data.bit(1); p12 = data.bit(2); p13 = data.bit(3); p14 = data.bit(4); p15 = data.bit(5); p16 = data.bit(6); p17 = data.bit(7); break; //P1CR case 0x04: p10.flow = data.bit(0); p11.flow = data.bit(1); p12.flow = data.bit(2); p13.flow = data.bit(3); p14.flow = data.bit(4); p15.flow = data.bit(5); p16.flow = data.bit(6); p17.flow = data.bit(7); break; //P2 case 0x06: p20 = data.bit(0); p21 = data.bit(1); p22 = data.bit(2); p23 = data.bit(3); p24 = data.bit(4); p25 = data.bit(5); p26 = data.bit(6); p27 = data.bit(7); break; //P2FC case 0x09: p20.mode = data.bit(0); p21.mode = data.bit(1); p22.mode = data.bit(2); p23.mode = data.bit(3); p24.mode = data.bit(4); p25.mode = data.bit(5); p26.mode = data.bit(6); p27.mode = data.bit(7); break; //P5 case 0x0d: misc.p5 = data.bit(0); p52 = data.bit(2); p53 = data.bit(3); p54 = data.bit(4); p55 = data.bit(5); break; //P5CR case 0x10: p52.flow = data.bit(2); p53.flow = data.bit(3); p54.flow = data.bit(4); p55.flow = data.bit(5); break; //P5FC case 0x11: p52.mode = data.bit(2); p53.mode = data.bit(3); p54.mode = data.bit(4); p55.mode = data.bit(5); break; //P6 case 0x12: p60 = data.bit(0); p61 = data.bit(1); p62 = data.bit(2); p63 = data.bit(3); p64 = data.bit(4); p65 = data.bit(5); break; //P7 case 0x13: p70 = data.bit(0); p71 = data.bit(1); p72 = data.bit(2); p73 = data.bit(3); p74 = data.bit(4); p75 = data.bit(5); p76 = data.bit(6); p77 = data.bit(7); break; //P6FC case 0x15: p60.mode = data.bit(0); p61.mode = data.bit(1); p62.mode = data.bit(2); p63.mode = data.bit(3); p64.mode = data.bit(4); p65.mode = data.bit(5); break; //P7CR case 0x16: p70.flow = data.bit(0); p71.flow = data.bit(1); p72.flow = data.bit(2); p73.flow = data.bit(3); p74.flow = data.bit(4); p75.flow = data.bit(5); p76.flow = data.bit(6); p77.flow = data.bit(7); break; //P7FC case 0x17: p70.mode = data.bit(0); p71.mode = data.bit(1); p72.mode = data.bit(2); p73.mode = data.bit(3); p74.mode = data.bit(4); p75.mode = data.bit(5); p76.mode = data.bit(6); p77.mode = data.bit(7); break; //P8 case 0x18: p80 = data.bit(0); p81 = data.bit(1); p82 = data.bit(2); p83 = data.bit(3); p84 = data.bit(4); p85 = data.bit(5); break; //P9 (read-only) case 0x19: break; //P8CR case 0x1a: p80.flow = data.bit(0); p81.flow = data.bit(1); p82.flow = data.bit(2); p83.flow = data.bit(3); p84.flow = data.bit(4); p85.flow = data.bit(5); break; //P8FC case 0x1b: p80.mode = data.bit(0); p82.mode = data.bit(2); p83.mode = data.bit(3); p85.mode = data.bit(5); break; //PA case 0x1e: pa0 = data.bit(0); pa1 = data.bit(1); if(pa2.mode == 0) pa2 = data.bit(2); if(pa2.mode == 0) pa3 = data.bit(3); break; //PB case 0x1f: pb0 = data.bit(0); pb1 = data.bit(1); break; //TRUN case 0x20: if(t0.enable && !data.bit(0)) t0.disable(); if(t1.enable && !data.bit(1)) t1.disable(); if(t2.enable && !data.bit(2)) t2.disable(); if(t3.enable && !data.bit(3)) t3.disable(); if(t4.enable && !data.bit(4)) t4.disable(); if(t5.enable && !data.bit(5)) t5.disable(); t0.enable = data.bit(0); t1.enable = data.bit(1); t2.enable = data.bit(2); t3.enable = data.bit(3); t4.enable = data.bit(4); t5.enable = data.bit(5); prescaler.enable = data.bit(7); if(!prescaler.enable) prescaler.counter = 0; break; //TREG0 case 0x22: if(!t01.buffer.enable) t0.compare = data; t01.buffer.compare = data; break; //TREG1 case 0x23: t1.compare = data; break; //T01MOD case 0x24: t0.mode = data.bit(0,1); t1.mode = data.bit(2,3); t01.pwm = data.bit(4,5); t01.mode = data.bit(6,7); break; //TFFCR case 0x25: ff1.source = data.bit(0); ff1.invert = data.bit(1); if(data.bit(2,3) == 0) ff1 = !ff1; if(data.bit(2,3) == 1) ff1 = 1; if(data.bit(2,3) == 2) ff1 = 0; ff3.source = data.bit(4); ff3.invert = data.bit(5); if(data.bit(6,7) == 0) ff3 = !ff3; if(data.bit(6,7) == 1) ff3 = 1; if(data.bit(6,7) == 2) ff3 = 0; break; //TREG2 case 0x26: if(!t23.buffer.enable) t2.compare = data; t23.buffer.compare = data; break; //TREG3 case 0x27: t3.compare = data; break; //T23MOD case 0x28: t2.mode = data.bit(0,1); t3.mode = data.bit(2,3); t23.pwm = data.bit(4,5); t23.mode = data.bit(6,7); break; //TRDC case 0x29: t01.buffer.enable = data.bit(0); t23.buffer.enable = data.bit(1); break; //PACR case 0x2c: pa0.flow = data.bit(0); pa1.flow = data.bit(1); pa2.flow = data.bit(2); pa3.flow = data.bit(3); break; //PAFC case 0x2d: pa2.mode = data.bit(2); pa3.mode = data.bit(3); break; //PBCR case 0x2e: pb0.flow = data.bit(0); pb1.flow = data.bit(1); pb2.flow = data.bit(2); pb3.flow = data.bit(3); pb4.flow = data.bit(4); pb5.flow = data.bit(5); pb6.flow = data.bit(6); pb7.flow = data.bit(7); break; //PBFC case 0x2f: pb2.mode = data.bit(2); pb3.mode = data.bit(3); pb6.mode = data.bit(6); break; //TREG4 case 0x30: if(!t4.buffer.enable) t4.compare4.byte(0) = data; t4.buffer.compare.byte(0) = data; break; case 0x31: if(!t4.buffer.enable) t4.compare4.byte(1) = data; t4.buffer.compare.byte(1) = data; break; //TREG5 case 0x32: t4.compare5.byte(0) = data; break; case 0x33: t4.compare5.byte(1) = data; break; //CAP1 case 0x34: t4.capture1.byte(0) = data; break; case 0x35: t4.capture1.byte(1) = data; break; //CAP2 case 0x36: t4.capture2.byte(0) = data; break; case 0x37: t4.capture2.byte(1) = data; break; //T4MOD case 0x38: t4.mode = data.bit(0,1); t4.clearOnCompare5 = data.bit(2); t4.captureMode = data.bit(3,4); if(!data.bit(5)) t4.captureTo1(); ff5.flipOnCompare5 = data.bit(6); ff5.flipOnCapture2 = data.bit(7); int4.edge.rising = t4.captureMode != 2; int4.edge.falling = t4.captureMode == 2; break; //T4FFCR case 0x39: if(data.bit(0,1) == 0) ff4 = !ff4; if(data.bit(0,1) == 1) ff4 = 1; if(data.bit(0,1) == 2) ff4 = 0; ff4.flipOnCompare4 = data.bit(2); ff4.flipOnCompare5 = data.bit(3); ff4.flipOnCapture1 = data.bit(4); ff4.flipOnCapture2 = data.bit(5); if(data.bit(6,7) == 0) ff5 = !ff5; if(data.bit(6,7) == 1) ff5 = 1; if(data.bit(6,7) == 2) ff5 = 0; break; //T45CR case 0x3a: t4.buffer.enable = data.bit(0); t5.buffer.enable = data.bit(1); pg0.shiftTrigger = data.bit(2); pg1.shiftTrigger = data.bit(3); break; //MSAR0 case 0x3c: cs0.address.bit(16,23) = data; break; //MAMR0 case 0x3d: cs0.mask.bit( 8) = data.bit(0); cs0.mask.bit( 9) = data.bit(1); //9.. cs0.mask.bit(10) = data.bit(1); cs0.mask.bit(11) = data.bit(1); cs0.mask.bit(12) = data.bit(1); cs0.mask.bit(13) = data.bit(1); cs0.mask.bit(14) = data.bit(1); //..14 cs0.mask.bit(15) = data.bit(2); cs0.mask.bit(16) = data.bit(3); cs0.mask.bit(17) = data.bit(4); cs0.mask.bit(18) = data.bit(5); cs0.mask.bit(19) = data.bit(6); cs0.mask.bit(20) = data.bit(7); break; //MSAR1 case 0x3e: cs1.address.bit(16,23) = data; break; //MAMR1 case 0x3f: cs1.mask.bit( 8) = data.bit(0); cs1.mask.bit( 9) = data.bit(1); //9.. cs1.mask.bit(10) = data.bit(1); cs1.mask.bit(11) = data.bit(1); cs1.mask.bit(12) = data.bit(1); cs1.mask.bit(13) = data.bit(1); cs1.mask.bit(14) = data.bit(1); cs1.mask.bit(15) = data.bit(1); //..15 cs1.mask.bit(16) = data.bit(2); cs1.mask.bit(17) = data.bit(3); cs1.mask.bit(18) = data.bit(4); cs1.mask.bit(19) = data.bit(5); cs1.mask.bit(20) = data.bit(6); cs1.mask.bit(21) = data.bit(7); break; //TREG6 case 0x40: if(!t5.buffer.enable) t5.compare6.byte(0) = data; t5.buffer.compare.byte(0) = data; break; case 0x41: if(!t5.buffer.enable) t5.compare6.byte(1) = data; t5.buffer.compare.byte(1) = data; break; //TREG7 case 0x42: t5.compare7.byte(0) = data; break; case 0x43: t5.compare7.byte(1) = data; break; //CAP3 case 0x44: t5.capture3.byte(0) = data; break; case 0x45: t5.capture3.byte(1) = data; break; //CAP4 case 0x46: t5.capture4.byte(0) = data; break; case 0x47: t5.capture4.byte(1) = data; break; //T5MOD case 0x48: t5.mode = data.bit(0,1); t5.clearOnCompare7 = data.bit(2); t5.captureMode = data.bit(3,4); if(!data.bit(5)) t5.captureTo3(); int6.edge.rising = t5.captureMode != 2; int6.edge.falling = t5.captureMode == 2; break; //T5FFCR case 0x49: if(data.bit(0,1) == 0) ff6 = !ff6; if(data.bit(0,1) == 1) ff6 = 1; if(data.bit(0,1) == 2) ff6 = 0; ff6.flipOnCompare6 = data.bit(2); ff6.flipOnCompare7 = data.bit(3); ff6.flipOnCapture3 = data.bit(4); ff6.flipOnCapture4 = data.bit(5); break; //PG0REG case 0x4c: pg0.shiftAlternateRegister = data.bit(0,3); pg0.patternGenerationOutput = data.bit(4,7); break; //PG1REG case 0x4d: pg1.shiftAlternateRegister = data.bit(0,3); pg1.patternGenerationOutput = data.bit(4,7); break; //PG01CR case 0x4e: pg0.triggerInputEnable = data.bit(0); pg0.excitationMode = data.bit(1); pg0.rotatingDirection = data.bit(2); pg0.writeMode = data.bit(3); pg1.triggerInputEnable = data.bit(4); pg1.excitationMode = data.bit(5); pg1.rotatingDirection = data.bit(6); pg1.writeMode = data.bit(7); break; //SC0BUF case 0x50: sc0.transmit(data); break; //SC0CR case 0x51: sc0.inputClock = data.bit(0); sc0.clockEdge = data.bit(1); sc0.parityAddition = data.bit(5); sc0.parity = data.bit(6); break; //SC0MOD case 0x52: sc0.clock = data.bit(0,1); sc0.mode = data.bit(2,3); sc0.wakeUp = data.bit(4); sc0.receiving = data.bit(5); sc0.handshake = data.bit(6); sc0.transferBit8 = data.bit(7); break; //BR0CR case 0x53: sc0.baudRateDividend = data.bit(0,3); sc0.baudRateDivider = data.bit(4,5); break; //SC1BUF case 0x54: sc1.transmit(data); break; //SC1CR case 0x55: sc1.inputClock = data.bit(0); sc1.clockEdge = data.bit(1); sc1.parityAddition = data.bit(5); sc1.parity = data.bit(6); break; //SC1MOD case 0x56: sc1.clock = data.bit(0,1); sc1.mode = data.bit(2,3); sc1.wakeUp = data.bit(4); sc1.receiving = data.bit(5); //sc1.handshake = 0; //fixed at 0 sc1.transferBit8 = data.bit(7); break; //BR1CR case 0x57: sc1.baudRateDividend = data.bit(0,3); sc1.baudRateDivider = data.bit(4,5); break; //ODE case 0x58: p80.drain = data.bit(0); p83.drain = data.bit(1); break; //DREFCR case 0x5a: dram.refreshCycle = data.bit(0); dram.refreshCycleWidth = data.bit(1,3); dram.refreshCycleInsertion = data.bit(4,6); dram.dummyCycle = data.bit(7); break; //DMEMCR case 0x5b: dram.memoryAccessEnable = data.bit(0); dram.multiplexAddressLength = data.bit(1,2); dram.multiplexAddressEnable = data.bit(3); dram.memoryAccessSpeed = data.bit(4); dram.busReleaseMode = data.bit(5); dram.selfRefresh = data.bit(7); break; //MSAR2 case 0x5c: cs2.address.bit(16,23) = data; break; //MAMR2 case 0x5d: cs2.mask.bit(15,22) = data; break; //MSAR3 case 0x5e: cs3.address.bit(16,23) = data; break; //MAMR3 case 0x5f: cs3.mask.bit(15,22) = data; break; //ADREG04L (read-only) case 0x60: break; //ADREG04H (read-only) case 0x61: break; //ADREG15L (read-only) case 0x62: break; //ADREG15H (read-only) case 0x63: break; //ADREG2L (read-only) case 0x64: break; //ADREG2H (read-only) case 0x65: break; //ADREG3L (read-only) case 0x66: break; //ADREG3H (read-only) case 0x67: break; //B0CS case 0x68: cs0.timing = data.bit(0,1); cs0.width = data.bit(2) ? Byte : Word; cs0.enable = data.bit(4); break; //B1CS case 0x69: cs1.timing = data.bit(0,1); cs1.width = data.bit(2) ? Byte : Word; cs1.enable = data.bit(4); break; //B2CS case 0x6a: cs2.timing = data.bit(0,1); cs2.width = data.bit(2) ? Byte : Word; cs2.mode = data.bit(3); cs2.enable = data.bit(4); break; //B3CS case 0x6b: cs3.timing = data.bit(0,1); cs3.width = data.bit(2) ? Byte : Word; cs3.cas = data.bit(3); cs3.enable = data.bit(4); break; //BEXCS case 0x6c: csx.timing = data.bit(0,1); csx.width = data.bit(2) ? Byte : Word; break; //ADMOD case 0x6d: { n1 busy = adc.busy; adc.channel = data.bit(0,1); n1 start = data.bit(2); adc.speed = data.bit(3); adc.scan = data.bit(4); adc.repeat = data.bit(5); if(!busy && start) { adc.busy = 1; adc.counter = 0; } } break; //WDMOD case 0x6e: watchdog.drive = data.bit(0); watchdog.reset = data.bit(1); watchdog.standby = data.bit(2,3); watchdog.warmup = data.bit(4); watchdog.frequency = data.bit(5,6); watchdog.enable = data.bit(7); if(watchdog.enable) watchdog.counter = 0; //todo: is this only on 0->1 transitions? break; //WDCR case 0x6f: if(data == 0x4e) watchdog.counter = 0; if(data == 0xb1) watchdog.enable = 0; break; //INTE0AD case 0x70: int0.setPriority(data.bit(0,2)); if(!data.bit(3)) int0.clear(); intad.setPriority(data.bit(4,6)); if(!data.bit(7)) intad.clear(); break; //INTE45 case 0x71: int4.setPriority(data.bit(0,2)); if(!data.bit(3)) int4.clear(); int5.setPriority(data.bit(4,6)); if(!data.bit(7)) int5.clear(); break; //INTE67 case 0x72: int6.setPriority(data.bit(0,2)); if(!data.bit(3)) int6.clear(); int7.setPriority(data.bit(4,6)); if(!data.bit(7)) int7.clear(); break; //INTET01 case 0x73: intt0.setPriority(data.bit(0,2)); if(!data.bit(3)) intt0.clear(); intt1.setPriority(data.bit(4,6)); if(!data.bit(7)) intt1.clear(); break; //INTET23 case 0x74: intt2.setPriority(data.bit(0,2)); if(!data.bit(3)) intt2.clear(); intt3.setPriority(data.bit(4,6)); if(!data.bit(7)) intt3.clear(); break; //INTET45 case 0x75: inttr4.setPriority(data.bit(0,2)); if(!data.bit(3)) inttr4.clear(); inttr5.setPriority(data.bit(4,6)); if(!data.bit(7)) inttr5.clear(); break; //INTET67 case 0x76: inttr6.setPriority(data.bit(0,2)); if(!data.bit(3)) inttr6.clear(); inttr7.setPriority(data.bit(4,6)); if(!data.bit(7)) inttr7.clear(); break; //INTE50 case 0x77: intrx0.setPriority(data.bit(0,2)); if(!data.bit(3)) intrx0.clear(); inttx0.setPriority(data.bit(4,6)); if(!data.bit(7)) inttx0.clear(); break; //INTE51 case 0x78: intrx1.setPriority(data.bit(0,2)); if(!data.bit(3)) intrx1.clear(); inttx1.setPriority(data.bit(4,6)); if(!data.bit(7)) inttx1.clear(); break; //INTETC01 case 0x79: inttc0.setPriority(data.bit(0,2)); if(!data.bit(3)) inttc0.clear(); inttc1.setPriority(data.bit(4,6)); if(!data.bit(7)) inttc1.clear(); break; //INTETC23 case 0x7a: inttc2.setPriority(data.bit(0,2)); if(!data.bit(3)) inttc2.clear(); inttc3.setPriority(data.bit(4,6)); if(!data.bit(7)) inttc3.clear(); break; //IIMC case 0x7b: nmi.edge.rising = data.bit(0); int0.edge.rising = !data.bit(1); int0.level.high = data.bit(1); int0.setEnable(data.bit(2)); interrupts.poll(); break; //DMA0V case 0x7c: dma0.vector.bit(2,6) = data.bit(0,4); interrupts.poll(); break; //DMA1V case 0x7d: dma1.vector.bit(2,6) = data.bit(0,4); interrupts.poll(); break; //DMA2V case 0x7e: dma2.vector.bit(2,6) = data.bit(0,4); interrupts.poll(); break; //DMA3V case 0x7f: dma3.vector.bit(2,6) = data.bit(0,4); interrupts.poll(); break; case 0x80: clock.rate = data.bit(0,2); break; case 0x90: rtc.enable = data.bit(0); break; case 0x91: rtc.year = data; break; case 0x92: rtc.month = data; break; case 0x93: rtc.day = data; break; case 0x94: rtc.hour = data; break; case 0x95: rtc.minute = data; break; case 0x96: rtc.second = data; break; case 0x97: rtc.weekday = data.bit(0,3); break; case 0xa0: psg.writeRight(data); break; case 0xa1: psg.writeLeft(data); break; case 0xa2: psg.writeRightDAC(data); break; case 0xa3: psg.writeLeftDAC(data); break; case 0xb2: misc.rtsDisable = data.bit(0); break; case 0xb3: nmi.setEnable(data.bit(2)); break; case 0xb4: unknown.b4 = data; break; case 0xb5: unknown.b5 = data; break; case 0xb6: unknown.b6 = data; break; case 0xb7: unknown.b7 = data; break; case 0xb8: if(data == 0x55) psg.enablePSG(); if(data == 0xaa) psg.enableDAC(); break; case 0xb9: if(data == 0x55) apu.enable(); if(data == 0xaa) apu.disable(); break; case 0xba: apu.nmi.line = 1; break; case 0xbc: apu.port.data = data; break; } debugger.writeIO(address, data); return; } ares-126/ares/ngp/cpu/memory.cpp000066400000000000000000000243371415063341600166530ustar00rootroot00000000000000/* Abstract memory bus implementation. * The TLCS900/H can perform 8-bit (Byte), 16-bit (Word), and 32-bit (Long) reads. * The actual internal bus of the CPU is always 16-bit. * Each memory object on the bus may allow either 8-bit or 16-bit accesses. * For CS0-CS3 and CSX, the bus width may be changed dynamically. * Further, CS0-3 and CSX allow optional wait states to be added to accesses. * Finally, CS0-3 and CSX have registers to control where they appear on the bus. * CS2 has an additional fixed addressing mode setting. */ /* Default memory layout: (hardware remappable, but not usually done) * 0x000000 ... 0x0000ff: internal I/O * 0x000100 ... 0x003fff: reserved * 0x004000 ... 0x006fff: 12KB CPU RAM * 0x007000 ... 0x007fff: 4KB APU RAM * 0x008000 ... 0x0087ff: KxGE I/O registers * 0x008800 ... 0x008fff: object VRAM * 0x009000 ... 0x009fff: scroll VRAM * 0x00a000 ... 0x00bfff: character RAM * 0x00c000 ... 0x01ffff: reserved * 0x020000 ... 0x03ffff: program flash ROM (CS0) * 0x040000 ... 0x07ffff: reserved * 0x080000 ... 0x09ffff: program flash ROM (CS1) * 0x0a0000 ... 0xfeffff: reserved * 0xff0000 ... 0xffffff: BIOS ROM */ auto CPU::Bus::wait() -> void { if(unlikely(debugging)) return; if(width == Byte) { switch(timing) { case 0: return cpu.step(2 + 2); //1 state case 1: return cpu.step(2 + 4); //2 states case 2: return cpu.step(2 + 2); //1 state + (not emulated) /WAIT case 3: return cpu.step(2 + 0); //0 states } } if(width == Word) { switch(timing) { case 0: return cpu.step(2 + 2); //1 state case 1: return cpu.step(2 + 4); //2 states case 2: return cpu.step(2 + 2); //1 state + (not emulated) /WAIT case 3: return cpu.step(2 + 0); //0 states } } } auto CPU::Bus::speed(u32 size, n24 address) -> n32 { if(width == Byte) { static constexpr u32 waits[4] = {2 + 2, 2 + 4, 2 + 2, 2 + 0}; if(size == Byte) return waits[timing] * 1; if(size == Word) return waits[timing] * 2; if(size == Long) return waits[timing] * 4; } if(width == Word) { static constexpr u32 waits[4] = {2 + 2, 2 + 4, 2 + 2, 2 + 0}; if(size == Byte) return waits[timing] * 1; if(size == Word && address.bit(0) == 0) return waits[timing] * 1; if(size == Word && address.bit(0) == 1) return waits[timing] * 2; if(size == Long && address.bit(0) == 0) return waits[timing] * 2; if(size == Long && address.bit(0) == 1) return waits[timing] * 3; } unreachable; } auto CPU::Bus::read(u32 size, n24 address) -> n32 { n32 data; if(width == Byte) { if(size == Byte) { wait(); data.byte(0) = reader(address + 0); } if(size == Word) { wait(); data.byte(0) = reader(address + 0); wait(); data.byte(1) = reader(address + 1); } if(size == Long) { wait(); data.byte(0) = reader(address + 0); wait(); data.byte(1) = reader(address + 1); wait(); data.byte(2) = reader(address + 2); wait(); data.byte(3) = reader(address + 3); } } if(width == Word) { if(size == Byte) { wait(); data.byte(0) = reader(address + 0); } if(size == Word && address.bit(0) == 0) { wait(); data.byte(0) = reader(address + 0); data.byte(1) = reader(address + 1); } if(size == Word && address.bit(0) == 1) { wait(); data.byte(0) = reader(address + 0); wait(); data.byte(1) = reader(address + 1); } if(size == Long && address.bit(0) == 0) { wait(); data.byte(0) = reader(address + 0); data.byte(1) = reader(address + 1); wait(); data.byte(2) = reader(address + 2); data.byte(3) = reader(address + 3); } if(size == Long && address.bit(0) == 1) { wait(); data.byte(0) = reader(address + 0); wait(); data.byte(1) = reader(address + 1); data.byte(2) = reader(address + 2); wait(); data.byte(3) = reader(address + 3); } } return data; } auto CPU::Bus::write(u32 size, n24 address, n32 data) -> void { if(width == Byte) { if(size == Byte) { wait(); writer(address + 0, data.byte(0)); } if(size == Word) { wait(); writer(address + 0, data.byte(0)); wait(); writer(address + 1, data.byte(1)); } if(size == Long) { wait(); writer(address + 0, data.byte(0)); wait(); writer(address + 1, data.byte(1)); wait(); writer(address + 2, data.byte(2)); wait(); writer(address + 3, data.byte(3)); } } if(width == Word) { if(size == Byte) { wait(); writer(address + 0, data.byte(0)); } if(size == Word && address.bit(0) == 0) { wait(); writer(address + 0, data.byte(0)); writer(address + 1, data.byte(1)); } if(size == Word && address.bit(0) == 1) { wait(); writer(address + 0, data.byte(0)); wait(); writer(address + 1, data.byte(1)); } if(size == Long && address.bit(0) == 0) { wait(); writer(address + 0, data.byte(0)); writer(address + 1, data.byte(1)); wait(); writer(address + 2, data.byte(2)); writer(address + 3, data.byte(3)); } if(size == Long && address.bit(0) == 1) { wait(); writer(address + 0, data.byte(0)); wait(); writer(address + 1, data.byte(1)); writer(address + 2, data.byte(2)); wait(); writer(address + 3, data.byte(3)); } } } /* IO: (internal I/O registers) */ auto CPU::IO::select(n24 compare) const -> bool { return compare <= 0x0000ff; } /* ROM: (BIOS) */ auto CPU::ROM::select(n24 compare) const -> bool { return compare >= 0xff0000; } /* CRAM: (CPU memory) */ auto CPU::CRAM::select(n24 compare) const -> bool { return compare >= 0x004000 && compare <= 0x006fff; } /* ARAM: (APU memory) */ auto CPU::ARAM::select(n24 compare) const -> bool { return compare >= 0x007000 && compare <= 0x007fff; } /* VRAM: (VPU memory) */ auto CPU::VRAM::select(n24 compare) const -> bool { return compare >= 0x008000 && compare <= 0x00bfff; } /* CS0: (chip select 0) * Connected to cartridge flash chip 0. */ auto CPU::CS0::select(n24 compare) const -> bool { if(!enable) return false; return !(n24)((compare ^ address) & ~mask); } /* CS1: (chip select 1) * Connected to cartridge flash chip 1. */ auto CPU::CS1::select(n24 compare) const -> bool { if(!enable) return false; return !(n24)((compare ^ address) & ~mask); } /* CS2: (chip select 2) * Not connected and not used. */ auto CPU::CS2::select(n24 compare) const -> bool { if(!enable) return false; //TMP95C061 range is 000080-ffffff //however, the Neo Geo Pocket maps I/O registers from 000000-0000ff //the exact range is unknown, so it is a guess that the range was expanded here if(!mode) return compare >= 0x000100; return !(n24)((compare ^ address) & ~mask); } /* CS3: (chip select 3) * Not connected and not used. */ auto CPU::CS3::select(n24 compare) const -> bool { if(!enable) return false; return !(n24)((compare ^ address) & ~mask); } /* CSX: (chip select external) * Not connected and not used. */ auto CPU::width(n24 address) -> u32 { if( io.select(address)) return io.width; if( rom.select(address)) return rom.width; if(cram.select(address)) return cram.width; if(aram.select(address)) return aram.width; if(vram.select(address)) return vram.width; if( cs0.select(address)) return cs0.width; if( cs1.select(address)) return cs1.width; if( cs2.select(address)) return cs2.width; if( cs3.select(address)) return cs3.width; return csx.width; } auto CPU::speed(u32 size, n24 address) -> n32 { if( io.select(address)) return io.speed(size, address); if( rom.select(address)) return rom.speed(size, address); if(cram.select(address)) return cram.speed(size, address); if(aram.select(address)) return aram.speed(size, address); if(vram.select(address)) return vram.speed(size, address); if( cs0.select(address)) return cs0.speed(size, address); if( cs1.select(address)) return cs1.speed(size, address); if( cs2.select(address)) return cs2.speed(size, address); if( cs3.select(address)) return cs3.speed(size, address); return csx.speed(size, address); } auto CPU::read(u32 size, n24 address) -> n32 { MAR = address; if( io.select(address)) return io.read(size, address); if( rom.select(address)) return rom.read(size, address); if(cram.select(address)) return cram.read(size, address); if(aram.select(address)) return aram.read(size, address); if(vram.select(address)) return vram.read(size, address); if( cs0.select(address)) return cs0.read(size, address); if( cs1.select(address)) return cs1.read(size, address); if( cs2.select(address)) return cs2.read(size, address); if( cs3.select(address)) return cs3.read(size, address); return csx.read(size, address); } auto CPU::write(u32 size, n24 address, n32 data) -> void { MAR = address; MDR = data; if( io.select(address)) return io.write(size, address, data); if( rom.select(address)) return rom.write(size, address, data); if(cram.select(address)) return cram.write(size, address, data); if(aram.select(address)) return aram.write(size, address, data); if(vram.select(address)) return vram.write(size, address, data); if( cs0.select(address)) return cs0.write(size, address, data); if( cs1.select(address)) return cs1.write(size, address, data); if( cs2.select(address)) return cs2.write(size, address, data); if( cs3.select(address)) return cs3.write(size, address, data); return csx.write(size, address, data); } auto CPU::disassembleRead(n24 address) -> n8 { maybe bus; if(0); else if( io.select(address)) bus = io; else if( rom.select(address)) bus = rom; else if(cram.select(address)) bus = cram; else if(aram.select(address)) bus = aram; else if(vram.select(address)) bus = vram; else if( cs0.select(address)) bus = cs0; else if( cs1.select(address)) bus = cs1; else if( cs2.select(address)) bus = cs2; else if( cs3.select(address)) bus = cs3; else bus = csx; //prevent bus read from consuming CPU time bus->debugging = 1; auto data = bus->read(Byte, address); bus->debugging = 0; return data; } ares-126/ares/ngp/cpu/ports.cpp000066400000000000000000000077301415063341600165100ustar00rootroot00000000000000/* Port 1: (input/output) * This port is used to control d8-d15 for 8-bit bus accesses. */ CPU::P1::operator bool() const { return latch; } auto CPU::P1::operator=(bool value) -> void { latch = value; } /* Port 2: (output) * This port is used to control a16-a23 of the address bus. */ CPU::P2::operator bool() const { return latch; } auto CPU::P2::operator=(bool value) -> void { latch = value; } /* Port 5: (input/output) * This port is used for bus monitoring. */ CPU::P5::operator bool() const { return latch; } auto CPU::P5::operator=(bool value) -> void { latch = value; } /* Port 6: (output) * This port provides chip select information. */ CPU::P6::operator bool() const { return latch; } auto CPU::P6::operator=(bool value) -> void { latch = value; } /* Port 7: (input/output) * This port is for the pattern generator. */ CPU::P7::operator bool() const { return latch; } auto CPU::P7::operator=(bool value) -> void { latch = value; } /* Port 8: (input/output) * This port is used for serial communications. */ CPU::P8F::operator bool() const { return latch; } auto CPU::P8F::operator=(bool value) -> void { latch = value; } CPU::P8MA::operator bool() const { return latch; } auto CPU::P8MA::operator=(bool value) -> void { latch = value; } CPU::P8MB::operator bool() const { return latch; } auto CPU::P8MB::operator=(bool value) -> void { latch = value; } /* Port 9: (input) * This port is used for analog to digital conversion measurements. */ CPU::P9::operator bool() const { return latch; } /* Port A: (input/output) * This port controls 8-bit timers and external interrupts. */ // PA0 // /WAIT CPU::PA0::operator bool() const { return latch; } auto CPU::PA0::operator=(bool value) -> void { latch = value; } // PA1 // TI0 // (/HBLANK) CPU::PA1::operator bool() const { if(!readable()) return cpu.ti0; return latch; } auto CPU::PA1::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.ti0 = latch; } // PA2 // TO1 CPU::PA2::operator bool() const { return latch; } auto CPU::PA2::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.to1 = latch; } // PA3 // TO3 CPU::PA3::operator bool() const { return latch; } auto CPU::PA3::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.to3 = latch; } /* Port B: (input/output) * This port controls 16-bit timers and external interrupts. */ // PB0 // INT4 // TI4 // (/VBLANK) CPU::PB0::operator bool() const { return latch; } auto CPU::PB0::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.int4 = latch; cpu.ti4 = latch; } // PB1 // INT5 // TI5 // (APU) CPU::PB1::operator bool() const { return latch; } auto CPU::PB1::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.int5 = latch; cpu.ti5 = latch; } // PB2 // TO4 CPU::PB2::operator bool() const { return latch; } auto CPU::PB2::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.to4 = latch; } // PB3 // TO5 CPU::PB3::operator bool() const { return latch; } auto CPU::PB3::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.to5 = latch; } // PB4 // INT6 // TI6 CPU::PB4::operator bool() const { return latch; } auto CPU::PB4::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.int6 = latch; cpu.ti6 = latch; } // PB5 // INT7 // TI7 CPU::PB5::operator bool() const { return latch; } auto CPU::PB5::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.int7 = latch; cpu.ti7 = latch; } // PB6 // TO6 CPU::PB6::operator bool() const { return latch; } auto CPU::PB6::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.to6 = latch; } // PB7 // INT0 CPU::PB7::operator bool() const { return latch; } auto CPU::PB7::operator=(bool value) -> void { latch = value; if(!writable()) return; cpu.int0 = latch; } ares-126/ares/ngp/cpu/rtc.cpp000066400000000000000000000037061415063341600161300ustar00rootroot00000000000000auto CPU::RTC::step(u32 clocks) -> void { counter += clocks; while(counter >= cpu.frequency()) { counter -= cpu.frequency(); if(!enable) continue; //it is unknown what happens when invalid BCD values are fed into the RTC //if it is anything like the Epson RTC-4513, the answer could be quite horrifying second += 1; if((n4)second <= 0x09) continue; second += 6; //BCD adjust: 0x0a -> 0x10 if((n8)second <= 0x59) continue; second = 0; minute++; if((n4)minute <= 0x09) continue; minute += 6; if((n8)minute <= 0x59) continue; minute = 0; hour++; if((n4)hour >= 0x0a) hour += 6; if((n8)hour <= 0x23) continue; hour = 0; weekday++; if(weekday >= 7) weekday = 0; day++; if((n4)day >= 0x0a) day += 6; if((n8)day <= daysInMonth()) continue; day = 1; month++; if((n4)month >= 0x0a) month += 6; if((n8)month <= 0x12) continue; month = 1; year++; if((n4)year >= 0x0a) year += 6; if((n4)year <= 0x99) continue; year = 0; } } auto CPU::RTC::daysInMonth() -> n8 { switch(day) { case 0x01: return 0x31; //January case 0x02: return daysInFebruary(); case 0x03: return 0x31; //March case 0x04: return 0x30; //April case 0x05: return 0x31; //May case 0x06: return 0x30; //June case 0x07: return 0x31; //July case 0x08: return 0x31; //August case 0x09: return 0x30; //September case 0x10: return 0x31; //October case 0x11: return 0x30; //November case 0x12: return 0x31; //December } return 0x31; //unknown what actually happens here } //the Neo Geo Pocket RTC year only holds two digits, which is meant to track 1991 - 2090 //every year possible has a leap year on the fourth year, so we don't have to support the //rule that every 100 years is not a leap year, except every 400 years is a leap year auto CPU::RTC::daysInFebruary() -> n8 { if((year & 3) == 0) return 0x29; //leap year return 0x28; //regular year } ares-126/ares/ngp/cpu/serial.cpp000066400000000000000000000002071415063341600166100ustar00rootroot00000000000000auto CPU::SerialChannel::receive() -> n8 { return buffer; } auto CPU::SerialChannel::transmit(n8 data) -> void { buffer = data; } ares-126/ares/ngp/cpu/serialization.cpp000066400000000000000000000147231415063341600202160ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { TLCS900H::serialize(s); Thread::serialize(s); s(ram); s(interrupts.vector); s(interrupts.priority); s(nmi); s(intwd); s(int0); s(int4); s(int5); s(int6); s(int7); s(intt0); s(intt1); s(intt2); s(intt3); s(inttr4); s(inttr5); s(inttr6); s(inttr7); s(intrx0); s(inttx0); s(intrx1); s(inttx1); s(intad); s(inttc0); s(inttc1); s(inttc2); s(inttc3); s(dma0.vector); s(dma1.vector); s(dma2.vector); s(dma3.vector); s(p10.latch); s(p10.flow); s(p11.latch); s(p11.flow); s(p12.latch); s(p12.flow); s(p13.latch); s(p13.flow); s(p14.latch); s(p14.flow); s(p15.latch); s(p15.flow); s(p16.latch); s(p16.flow); s(p17.latch); s(p17.flow); s(p20.latch); s(p20.mode); s(p21.latch); s(p21.mode); s(p22.latch); s(p22.mode); s(p23.latch); s(p23.mode); s(p24.latch); s(p24.mode); s(p25.latch); s(p25.mode); s(p26.latch); s(p26.mode); s(p27.latch); s(p27.mode); s(p52.latch); s(p52.flow); s(p52.mode); s(p53.latch); s(p53.flow); s(p53.mode); s(p54.latch); s(p54.flow); s(p54.mode); s(p55.latch); s(p55.flow); s(p55.mode); s(p60.latch); s(p60.mode); s(p61.latch); s(p61.mode); s(p62.latch); s(p62.mode); s(p63.latch); s(p63.mode); s(p64.latch); s(p64.mode); s(p65.latch); s(p65.mode); s(p70.latch); s(p70.flow); s(p70.mode); s(p71.latch); s(p71.flow); s(p71.mode); s(p72.latch); s(p72.flow); s(p72.mode); s(p73.latch); s(p73.flow); s(p73.mode); s(p74.latch); s(p74.flow); s(p74.mode); s(p75.latch); s(p75.flow); s(p75.mode); s(p76.latch); s(p76.flow); s(p76.mode); s(p77.latch); s(p77.flow); s(p77.mode); s(p80.latch); s(p80.flow); s(p80.mode); s(p80.drain); s(p81.latch); s(p81.flow); s(p82.latch); s(p82.flow); s(p82.mode); s(p83.latch); s(p83.flow); s(p83.mode); s(p83.drain); s(p84.latch); s(p84.flow); s(p85.latch); s(p85.flow); s(p85.mode); s(p90.latch); s(p91.latch); s(p92.latch); s(p93.latch); s(pa0.latch); s(pa0.flow); s(pa1.latch); s(pa1.flow); s(pa2.latch); s(pa2.flow); s(pa2.mode); s(pa3.latch); s(pa3.flow); s(pa3.mode); s(pb0.latch); s(pb0.flow); s(pb1.latch); s(pb1.flow); s(pb2.latch); s(pb2.flow); s(pb2.mode); s(pb3.latch); s(pb3.flow); s(pb3.mode); s(pb4.latch); s(pb4.flow); s(pb5.latch); s(pb5.flow); s(pb6.latch); s(pb6.flow); s(pb6.mode); s(pb7.latch); s(pb7.flow); s(prescaler.enable); s(prescaler.counter); s(ti0.latch); s(ti4.latch); s(ti5.latch); s(ti6.latch); s(ti7.latch); s(to1.latch); s(to3.latch); s(to4.latch); s(to5.latch); s(to6.latch); s(to7.latch); s(t0.enable); s(t0.mode); s(t0.counter); s(t0.compare); s(t1.enable); s(t1.mode); s(t1.counter); s(t1.compare); s(ff1.source); s(ff1.invert); s(ff1.output); s(t01.mode); s(t01.pwm); s(t01.buffer.enable); s(t01.buffer.compare); s(t2.enable); s(t2.mode); s(t2.counter); s(t2.compare); s(t3.enable); s(t3.mode); s(t3.counter); s(t3.compare); s(ff3.source); s(ff3.invert); s(ff3.output); s(t23.mode); s(t23.pwm); s(t23.buffer.enable); s(t23.buffer.compare); s(ff4.flipOnCompare4); s(ff4.flipOnCompare5); s(ff4.flipOnCapture1); s(ff4.flipOnCapture2); s(ff4.output); s(ff5.flipOnCompare5); s(ff5.flipOnCapture2); s(ff5.output); s(t4.enable); s(t4.mode); s(t4.captureMode); s(t4.clearOnCompare5); s(t4.counter); s(t4.compare4); s(t4.compare5); s(t4.capture1); s(t4.capture2); s(t4.buffer.enable); s(t4.buffer.compare); s(ff6.flipOnCompare6); s(ff6.flipOnCompare7); s(ff6.flipOnCapture3); s(ff6.flipOnCapture4); s(t5.enable); s(t5.mode); s(t5.captureMode); s(t5.clearOnCompare7); s(t5.counter); s(t5.compare6); s(t5.compare7); s(t5.capture3); s(t5.capture4); s(t5.buffer.enable); s(t5.buffer.compare); s(pg0.shiftTrigger); s(pg0.shiftAlternateRegister); s(pg0.patternGenerationOutput); s(pg0.triggerInputEnable); s(pg0.excitationMode); s(pg0.rotatingDirection); s(pg0.writeMode); s(pg1.shiftTrigger); s(pg1.shiftAlternateRegister); s(pg1.patternGenerationOutput); s(pg1.triggerInputEnable); s(pg1.excitationMode); s(pg1.rotatingDirection); s(pg1.writeMode); s(sc0.buffer); s(sc0.baudRateDividend); s(sc0.baudRateDivider); s(sc0.inputClock); s(sc0.clockEdge); s(sc0.framingError); s(sc0.parityError); s(sc0.overrunError); s(sc0.parityAddition); s(sc0.parity); s(sc0.receiveBit8); s(sc0.clock); s(sc0.mode); s(sc0.wakeUp); s(sc0.receiving); s(sc0.handshake); s(sc0.transferBit8); s(sc1.buffer); s(sc1.baudRateDividend); s(sc1.baudRateDivider); s(sc1.inputClock); s(sc1.clockEdge); s(sc1.framingError); s(sc1.parityError); s(sc1.overrunError); s(sc1.parityAddition); s(sc1.parity); s(sc1.receiveBit8); s(sc1.clock); s(sc1.mode); s(sc1.wakeUp); s(sc1.receiving); s(sc1.handshake); s(sc1.transferBit8); s(adc.counter); s(adc.channel); s(adc.speed); s(adc.scan); s(adc.repeat); s(adc.busy); s(adc.end); s(adc.result); s(rtc.counter); s(rtc.enable); s(rtc.second); s(rtc.minute); s(rtc.hour); s(rtc.weekday); s(rtc.day); s(rtc.month); s(rtc.year); s(watchdog.counter); s(watchdog.enable); s(watchdog.drive); s(watchdog.reset); s(watchdog.standby); s(watchdog.warmup); s(watchdog.frequency); s(dram.refreshCycle); s(dram.refreshCycleWidth); s(dram.refreshCycleInsertion); s(dram.dummyCycle); s(dram.memoryAccessEnable); s(dram.multiplexAddressLength); s(dram.multiplexAddressEnable); s(dram.memoryAccessSpeed); s(dram.busReleaseMode); s(dram.selfRefresh); s(io.width); s(io.timing); s(rom.width); s(rom.timing); s(cram.width); s(cram.timing); s(aram.width); s(aram.timing); s(vram.width); s(vram.timing); s(cs0.width); s(cs0.timing); s(cs0.enable); s(cs0.address); s(cs0.mask); s(cs1.width); s(cs1.timing); s(cs1.enable); s(cs1.address); s(cs1.mask); s(cs2.width); s(cs2.timing); s(cs2.enable); s(cs2.address); s(cs2.mask); s(cs2.mode); s(cs3.width); s(cs3.timing); s(cs3.enable); s(cs3.address); s(cs3.mask); s(cs3.cas); s(csx.width); s(csx.timing); s(clock.rate); s(misc.p5); s(misc.rtsDisable); s(unknown.b4); s(unknown.b5); s(unknown.b6); s(unknown.b7); } auto CPU::Interrupt::serialize(serializer& s) -> void { s(vector); s(dmaAllowed); s(enable); s(maskable); s(priority); s(line); s(pending); s(level.high); s(level.low); s(edge.rising); s(edge.falling); } ares-126/ares/ngp/cpu/timers.cpp000066400000000000000000000220061415063341600166350ustar00rootroot00000000000000auto CPU::Prescaler::step(u32 clocks) -> void { if(!enable) return; while(clocks--) { auto latch = counter++; // T1 (64) if(!latch.bit( 6) || counter.bit( 6)) continue; if(cpu.t0.mode == 1) cpu.t01.clockT0(); if(cpu.t1.mode == 1) cpu.t01.clockT1(); if(cpu.t2.mode == 1) cpu.t23.clockT2(); if(cpu.t3.mode == 1) cpu.t23.clockT3(); if(cpu.t4.mode == 1) cpu.t4.clock(); if(cpu.t5.mode == 1) cpu.t5.clock(); // T4 (256) if(!latch.bit( 8) || counter.bit( 8)) continue; if(cpu.t0.mode == 2) cpu.t01.clockT0(); if(cpu.t2.mode == 2) cpu.t23.clockT2(); if(cpu.t4.mode == 2) cpu.t4.clock(); if(cpu.t5.mode == 2) cpu.t5.clock(); // T16 (1024) if(!latch.bit(10) || counter.bit(10)) continue; if(cpu.t0.mode == 3) cpu.t01.clockT0(); if(cpu.t1.mode == 2) cpu.t01.clockT1(); if(cpu.t2.mode == 3) cpu.t23.clockT2(); if(cpu.t3.mode == 2) cpu.t23.clockT3(); if(cpu.t4.mode == 3) cpu.t4.clock(); if(cpu.t5.mode == 3) cpu.t5.clock(); // T256 (16384) if(!latch.bit(14) || counter.bit(14)) continue; if(cpu.t1.mode == 3) cpu.t01.clockT1(); if(cpu.t3.mode == 3) cpu.t23.clockT3(); } } // auto CPU::TI0::operator=(bool value) -> void { if(latch == value) return; latch = value; if(cpu.t0.mode == 0 && latch == 1) cpu.t01.clockT0(); } auto CPU::TI4::operator=(bool value) -> void { if(latch == value) return; latch = value; if(cpu.t4.captureMode == 1 && latch == 1) cpu.t4.captureTo1(); if(cpu.t4.captureMode == 2 && latch == 1) cpu.t4.captureTo1(); if(cpu.t4.captureMode == 2 && latch == 0) cpu.t4.captureTo2(); if(cpu.t4.mode == 0 && latch == 1) cpu.t4.clock(); } auto CPU::TI5::operator=(bool value) -> void { if(latch == value) return; latch = value; if(cpu.t4.captureMode == 1 && latch == 1) cpu.t4.captureTo1(); } auto CPU::TI6::operator=(bool value) -> void { if(latch == value) return; latch = value; if(cpu.t5.captureMode == 1 && latch == 1) cpu.t5.captureTo3(); if(cpu.t5.captureMode == 2 && latch == 1) cpu.t5.captureTo3(); if(cpu.t5.captureMode == 2 && latch == 0) cpu.t5.captureTo4(); if(cpu.t5.mode == 0 && latch == 1) cpu.t5.clock(); } auto CPU::TI7::operator=(bool value) -> void { if(latch == value) return; latch = value; if(cpu.t5.captureMode == 1 && latch == 1) cpu.t5.captureTo4(); } // auto CPU::TO1::operator=(bool value) -> void { if(latch == value) return; latch = value; } auto CPU::TO3::operator=(bool value) -> void { if(latch == value) return; latch = value; if(latch) apu.irq.line = 1; } auto CPU::TO4::operator=(bool value) -> void { if(latch == value) return; latch = value; } auto CPU::TO5::operator=(bool value) -> void { if(latch == value) return; latch = value; } auto CPU::TO6::operator=(bool value) -> void { if(latch == value) return; latch = value; } auto CPU::TO7::operator=(bool value) -> void { if(latch == value) return; latch = value; } // auto CPU::Timer0::disable() -> void { counter = 0; cpu.intt0 = 0; } auto CPU::Timer1::disable() -> void { counter = 0; cpu.intt1 = 0; } auto CPU::FlipFlop1::operator=(bool value) -> void { if(cpu.t4.captureMode == 3 && output == 0 && value == 1) cpu.t4.captureTo1(); if(cpu.t4.captureMode == 3 && output == 1 && value == 0) cpu.t4.captureTo2(); output = value; cpu.to1 = output; } auto CPU::Timer01::clockT0() -> void { if(!cpu.t0.enable) return; if(mode == 0) { ++cpu.t0.counter; bool matchT0 = cpu.t0.counter == cpu.t0.compare; if(matchT0) { cpu.intt0.trigger(); cpu.t0.counter = 0; if(cpu.ff1.source == 0 && cpu.ff1.invert) cpu.ff1 = !cpu.ff1; if(cpu.t1.mode == 0) clockT1(); } } if(mode == 1) { if(!++cpu.t0.counter) ++cpu.t1.counter; bool matchT0 = cpu.t0.counter == cpu.t0.compare; bool matchT1 = cpu.t1.counter == cpu.t1.compare; if(matchT0 && matchT1) { cpu.intt1.trigger(); cpu.t0.counter = 0; cpu.t1.counter = 0; if(cpu.ff1.invert) cpu.ff1 = !cpu.ff1; } } if(mode == 2) { ++cpu.t0.counter; bool matchT0 = cpu.t0.counter == cpu.t0.compare; bool matchT1 = cpu.t0.counter == cpu.t1.compare; if(matchT0 || matchT1) { if(cpu.ff1.invert) cpu.ff1 = !cpu.ff1; } if(matchT0) { cpu.intt0.trigger(); } if(matchT1) { cpu.intt1.trigger(); cpu.t0.counter = 0; if(buffer.enable) cpu.t0.compare = buffer.compare; } } if(mode == 3) { ++cpu.t0.counter; if(pwm == 1) cpu.t0.counter = (n6)cpu.t0.counter; if(pwm == 2) cpu.t0.counter = (n7)cpu.t0.counter; if(pwm == 3) cpu.t0.counter = (n8)cpu.t0.counter; bool matchT0 = cpu.t0.counter == cpu.t0.compare; bool matchPWM = cpu.t0.counter == 0; if(matchT0 || matchPWM) { cpu.intt0.trigger(); cpu.t0.counter = 0; if(buffer.enable) cpu.t0.compare = buffer.compare; if(cpu.ff1.invert) cpu.ff1 = !cpu.ff1; } } } auto CPU::Timer01::clockT1() -> void { if(!cpu.t1.enable) return; if(mode == 0 || mode == 3) { ++cpu.t1.counter; bool matchT1 = cpu.t1.counter == cpu.t1.compare; if(matchT1) { cpu.intt1.trigger(); cpu.t1.counter = 0; if(cpu.ff1.source == 1 && cpu.ff1.invert) cpu.ff1 = !cpu.ff1; } } } // auto CPU::Timer2::disable() -> void { counter = 0; cpu.intt2 = 0; } auto CPU::Timer3::disable() -> void { counter = 0; cpu.intt3 = 0; } auto CPU::FlipFlop3::operator=(bool value) -> void { output = value; cpu.to3 = output; } auto CPU::Timer23::clockT2() -> void { if(!cpu.t2.enable) return; if(mode == 0) { ++cpu.t2.counter; bool matchT2 = cpu.t2.counter == cpu.t2.compare; if(matchT2) { cpu.intt2.trigger(); cpu.t2.counter = 0; if(cpu.ff3.source == 0 && cpu.ff3.invert) cpu.ff3 = !cpu.ff3; if(cpu.t3.mode == 0) clockT3(); } } if(mode == 1) { if(!++cpu.t2.counter) ++cpu.t3.counter; bool matchT2 = cpu.t2.counter == cpu.t2.compare; bool matchT3 = cpu.t3.counter == cpu.t3.compare; if(matchT2 && matchT3) { cpu.intt3.trigger(); cpu.t2.counter = 0; cpu.t3.counter = 0; if(cpu.ff3.invert) cpu.ff3 = !cpu.ff3; } } if(mode == 2) { ++cpu.t2.counter; bool matchT2 = cpu.t2.counter == cpu.t2.compare; bool matchT3 = cpu.t2.counter == cpu.t3.compare; if(matchT2 || matchT3) { if(cpu.ff3.invert) cpu.ff3 = !cpu.ff3; } if(matchT2) { cpu.intt2.trigger(); } if(matchT3) { cpu.intt3.trigger(); cpu.t3.counter = 0; if(buffer.enable) cpu.t2.compare = buffer.compare; } } if(mode == 3) { ++cpu.t2.counter; if(pwm == 1) cpu.t2.counter = (n6)cpu.t2.counter; if(pwm == 2) cpu.t2.counter = (n7)cpu.t2.counter; if(pwm == 3) cpu.t2.counter = (n8)cpu.t2.counter; bool matchT2 = cpu.t2.counter == cpu.t2.compare; bool matchPWM = cpu.t2.counter == 0; if(matchT2 || matchPWM) { cpu.intt2.trigger(); cpu.t2.counter = 0; if(buffer.enable) cpu.t2.compare = buffer.compare; if(cpu.ff3.invert) cpu.ff3 = !cpu.ff3; } } } auto CPU::Timer23::clockT3() -> void { if(!cpu.t3.enable) return; if(mode == 0 || mode == 3) { ++cpu.t3.counter; bool matchT3 = cpu.t3.counter == cpu.t3.compare; if(matchT3) { cpu.intt3.trigger(); cpu.t3.counter = 0; if(cpu.ff3.source == 1 && cpu.ff3.invert) cpu.ff3 = !cpu.ff3; } } } // auto CPU::Timer4::disable() -> void { counter = 0; cpu.inttr4 = 0; cpu.inttr5 = 0; } auto CPU::Timer4::captureTo1() -> void { capture1 = counter; if(cpu.ff4.flipOnCapture1) cpu.ff4 = !cpu.ff4; } auto CPU::Timer4::captureTo2() -> void { capture2 = counter; if(cpu.ff4.flipOnCapture2) cpu.ff4 = !cpu.ff4; if(cpu.ff5.flipOnCapture2) cpu.ff5 = !cpu.ff5; } auto CPU::Timer4::clock() -> void { if(!enable) return; ++counter; if(counter == compare4) { cpu.inttr4.trigger(); if(cpu.ff4.flipOnCompare4) cpu.ff4 = !cpu.ff4; } if(counter == compare5) { cpu.inttr5.trigger(); if(cpu.ff4.flipOnCompare5) cpu.ff4 = !cpu.ff4; if(cpu.ff5.flipOnCompare5) cpu.ff5 = !cpu.ff5; if(buffer.enable) compare4 = buffer.compare; if(clearOnCompare5) counter = 0; } } auto CPU::FlipFlop4::operator=(bool value) -> void { output = value; cpu.to4 = output; } auto CPU::FlipFlop5::operator=(bool value) -> void { output = value; cpu.to5 = value; } // auto CPU::Timer5::disable() -> void { counter = 0; cpu.inttr6 = 0; cpu.inttr7 = 0; } auto CPU::Timer5::captureTo3() -> void { capture3 = counter; if(cpu.ff6.flipOnCapture3) cpu.ff6 = !cpu.ff6; } auto CPU::Timer5::captureTo4() -> void { capture4 = counter; if(cpu.ff6.flipOnCapture4) cpu.ff6 = !cpu.ff6; } auto CPU::Timer5::clock() -> void { if(!enable) return; ++counter; if(counter == compare6) { cpu.inttr6.trigger(); if(cpu.ff6.flipOnCompare6) cpu.ff6 = !cpu.ff6; } if(counter == compare7) { cpu.inttr7.trigger(); if(cpu.ff6.flipOnCompare7) cpu.ff6 = !cpu.ff6; if(buffer.enable) compare6 = buffer.compare; if(clearOnCompare7) counter = 0; } } auto CPU::FlipFlop6::operator=(bool value) -> void { output = value; cpu.to6 = output; } ares-126/ares/ngp/cpu/watchdog.cpp000066400000000000000000000002711415063341600171320ustar00rootroot00000000000000auto CPU::Watchdog::step(u32 clocks) -> void { if(!enable) return; counter += clocks; if(counter < cpu.frequency()) return; counter -= cpu.frequency(); cpu.intwd.trigger(); } ares-126/ares/ngp/kge/000077500000000000000000000000001415063341600146055ustar00rootroot00000000000000ares-126/ares/ngp/kge/color.cpp000066400000000000000000000006731415063341600164350ustar00rootroot00000000000000auto KGE::colorNeoGeoPocket(n32 color) -> n64 { n3 l = color.bit(0,2); n64 L = image::normalize(7 - l, 3, 16); return L << 32 | L << 16 | L << 0; } auto KGE::colorNeoGeoPocketColor(n32 color) -> n64 { n4 r = color.bit(0, 3); n4 g = color.bit(4, 7); n4 b = color.bit(8,11); n64 R = image::normalize(r, 4, 16); n64 G = image::normalize(g, 4, 16); n64 B = image::normalize(b, 4, 16); return R << 32 | G << 16 | B << 0; } ares-126/ares/ngp/kge/dac.cpp000066400000000000000000000052751415063341600160510ustar00rootroot00000000000000auto KGE::DAC::begin(n8 y) -> void { output = self.screen->pixels().data() + y * 160; } auto KGE::DAC::run(n8 x, n8 y) -> void { n12 color; auto plane1 = self.plane1.render(x, y); auto plane2 = self.plane2.render(x, y); auto sprite = self.sprite.render(x, y); auto window = self.window.render(x, y); //the dev manual says only background.mode = 0b10 enables background.color //Ogre Battle however sets 0b00 and expects the background color to be used //as such, it appears that only the lower bit of background.mode matters? if(!self.background.mode.bit(0)) { color = self.background.color; if(Model::NeoGeoPocketColor()) color = colors[0xf0 + color]; } if(sprite && sprite->priority == 1) { color = sprite->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x00 + color]; //native if(colorMode == 1) color = colors[0xc0 + color]; //compatible } } if(plane1 && plane1->priority == 0) { color = plane1->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x40 + color]; //native if(colorMode == 1) color = colors[0xd0 + color]; //compatible } } if(plane2 && plane2->priority == 0) { color = plane2->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x80 + color]; //native if(colorMode == 1) color = colors[0xe0 + color]; //compatible } } if(sprite && sprite->priority == 2) { color = sprite->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x00 + color]; //native if(colorMode == 1) color = colors[0xc0 + color]; //compatible } } if(plane1 && plane1->priority == 1) { color = plane1->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x40 + color]; //native if(colorMode == 1) color = colors[0xd0 + color]; //compatible } } if(plane2 && plane2->priority == 1) { color = plane2->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x80 + color]; //native if(colorMode == 1) color = colors[0xe0 + color]; //compatible } } if(sprite && sprite->priority == 3) { color = sprite->color; if(Model::NeoGeoPocketColor()) { if(colorMode == 0) color = colors[0x00 + color]; //native if(colorMode == 1) color = colors[0xc0 + color]; //compatible } } if(window) { color = window->color; if(Model::NeoGeoPocketColor()) color = colors[0xf8 + color]; } if(Model::NeoGeoPocket() && negate) color ^= 7; output[x] = color; } auto KGE::DAC::power() -> void { for(auto& color : colors) color = 0; negate = 0; colorMode = 0; output = nullptr; } ares-126/ares/ngp/kge/kge.cpp000066400000000000000000000046031415063341600160620ustar00rootroot00000000000000#include namespace ares::NeoGeoPocket { KGE kge; #include "memory.cpp" #include "window.cpp" #include "plane.cpp" #include "sprite.cpp" #include "dac.cpp" #include "color.cpp" #include "serialization.cpp" auto KGE::load(Node::Object parent) -> void { node = parent->append("KGE"); screen = node->append("Screen", 160, 152); if(Model::NeoGeoPocket()) screen->colors(1 << 3, {&KGE::colorNeoGeoPocket, this}); if(Model::NeoGeoPocketColor()) screen->colors(1 << 12, {&KGE::colorNeoGeoPocketColor, this}); screen->setSize(160, 152); screen->setViewport(0, 0, 160, 152); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); interframeBlending = screen->append("Interframe Blending", true, [&](auto value) { screen->setInterframeBlending(value); }); interframeBlending->setDynamic(true); } auto KGE::unload() -> void { interframeBlending.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto KGE::main() -> void { if(io.vcounter < 152) { n8 y = io.vcounter; dac.begin(y); sprite.begin(y); for(n8 x : range(160)) { dac.run(x, y); io.hcounter += 3; step(3); } if(io.vcounter <= 150) { io.hblankActive = 1; cpu.ti0 = !io.hblankEnableIRQ; } } step(515 - io.hcounter); io.hcounter = 0; io.hblankActive = 0; cpu.ti0 = 1; io.vcounter++; if(io.vcounter == 152) { io.vblankActive = 1; cpu.int4.set(!io.vblankEnableIRQ); screen->frame(); scheduler.exit(Event::Frame); } if(io.vcounter == io.vlines) { io.hblankActive = 1; cpu.ti0 = !io.hblankEnableIRQ; } if(io.vcounter > io.vlines) { io.vcounter = 0; io.vblankActive = 0; io.characterOver = 0; cpu.int4.set(1); } //note: this is not the most intuitive place to call this, //but calling after every CPU instruction is too demanding cpu.pollPowerButton(); } auto KGE::step(u32 clocks) -> void { Thread::step(clocks); synchronize(cpu); } auto KGE::power() -> void { Thread::create(system.frequency(), {&KGE::main, this}); screen->power(); window.power(); plane1.power(); plane2.power(); sprite.power(); dac.power(); for(auto& attribute : attributes) attribute = {}; for(auto& character : characters) for(auto& y : character) for(auto& x : y) x = 0; background = {}; led = {}; io = {}; } } ares-126/ares/ngp/kge/kge.hpp000066400000000000000000000067621415063341600160770ustar00rootroot00000000000000//K1GE: K1 Graphics Engine (Neo Geo Pocket) //K2GE: K2 Graphics Engine (Neo Geo Pocket Color) struct KGE : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean interframeBlending; //vpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //memory.cpp auto read(n24 address) -> n8; auto write(n24 address, n8 data) -> void; auto readObject(n8 address) -> n8; auto writeObject(n8 address, n8 data) -> void; auto readObjectColor(n6 address) -> n8; auto writeObjectColor(n6 address, n8 data) -> void; auto readColor(n9 address) -> n8; auto writeColor(n9 address, n8 data) -> void; auto readAttribute(n12 address) -> n8; auto writeAttribute(n12 address, n8 data) -> void; auto readCharacter(n13 address) -> n8; auto writeCharacter(n13 address, n8 data) -> void; //color.cpp auto colorNeoGeoPocket(n32) -> n64; auto colorNeoGeoPocketColor(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; //private: struct Window { KGE& self; struct Output { n3 color; } output; //window.cpp auto render(n8 x, n8 y) -> maybe; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 hoffset; n8 voffset; n8 hlength; n8 vlength; n3 color; //color drawn outside of window } window{*this}; struct Plane { KGE& self; struct Output { n6 color; n1 priority; } output; //plane.cpp auto render(n8 x, n8 y) -> maybe; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 hscroll; n8 vscroll; n3 palette[2][4]; } plane1{*this}, plane2{*this}; struct Sprite { KGE& self; struct Output { n6 color; n2 priority; } output; //sprite.cpp auto begin(n8 y) -> void; auto render(n8 x, n8 y) -> maybe; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Object { n9 character; n1 vchain; n1 hchain; n2 priority; n1 palette; n1 vflip; n1 hflip; n8 hoffset; n8 voffset; n4 code; //K2GE } objects[64]; struct Tile { n8 x; n3 y; n9 character; n2 priority; n1 palette; n1 hflip; n4 code; //K2GE } tiles[64]; n8 hscroll; n8 vscroll; n3 palette[2][4]; } sprite{*this}; struct DAC { KGE& self; //dac.cpp auto begin(n8 y) -> void; auto run(n8 x, n8 y) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n12 colors[256]; //K2GE n1 colorMode; //0 = K2GE, 1 = K1GE compatible n1 negate; //0 = normal, 1 = inverted display //unserialized: u32* output = nullptr; } dac{*this}; struct Attribute { n9 character; n4 code; //K2GE n1 palette; n1 vflip; n1 hflip; } attributes[2048]; n2 characters[512][8][8]; struct Background { n3 color; n3 unused; n2 mode; } background; struct LED { n8 control = 0x07; n8 frequency = 0x80; } led; struct IO { n8 vlines = 0xc6; n8 vcounter; n10 hcounter; n1 hblankEnableIRQ = 1; //todo: should be 0 n1 vblankEnableIRQ = 1; n1 hblankActive; n1 vblankActive; n1 characterOver; n1 planePriority; //0 = plane1 > plane2; 1 = plane2 > plane1 } io; }; extern KGE kge; ares-126/ares/ngp/kge/memory.cpp000066400000000000000000000241361415063341600166270ustar00rootroot00000000000000auto KGE::read(n24 address) -> n8 { address = 0x8000 | (n14)address; switch(address) { case 0x8200 ... 0x83ff: return readColor(address); //K2GE only case 0x8800 ... 0x88ff: return readObject(address); case 0x8c00 ... 0x8c3f: return readObjectColor(address); //K2GE only case 0x9000 ... 0x9fff: return readAttribute(address); case 0xa000 ... 0xbfff: return readCharacter(address); } n8 data; switch(address) { case 0x8000: data.bit(6) = io.hblankEnableIRQ; data.bit(7) = io.vblankEnableIRQ; break; case 0x8002: data = window.hoffset; break; case 0x8003: data = window.voffset; break; case 0x8004: data = window.hlength; break; case 0x8005: data = window.vlength; break; case 0x8006: data = io.vlines; break; case 0x8008: data = io.hcounter.bit(2,9); break; case 0x8009: data = io.vcounter.bit(0,7); break; case 0x8010: data.bit(6) = io.vblankActive; data.bit(7) = io.characterOver; break; case 0x8012: data.bit(0,2) = window.color; data.bit(7) = dac.negate; break; case 0x8020: data = sprite.hscroll; break; case 0x8021: data = sprite.vscroll; break; case 0x8030: data.bit(7) = io.planePriority; break; case 0x8032: data = plane1.hscroll; break; case 0x8033: data = plane1.vscroll; break; case 0x8034: data = plane2.hscroll; break; case 0x8035: data = plane2.vscroll; break; case 0x8100: data.bit(0,2) = sprite.palette[0][0]; break; case 0x8101: data.bit(0,2) = sprite.palette[0][1]; break; case 0x8102: data.bit(0,2) = sprite.palette[0][2]; break; case 0x8103: data.bit(0,2) = sprite.palette[0][3]; break; case 0x8104: data.bit(0,2) = sprite.palette[1][0]; break; case 0x8105: data.bit(0,2) = sprite.palette[1][1]; break; case 0x8106: data.bit(0,2) = sprite.palette[1][2]; break; case 0x8107: data.bit(0,2) = sprite.palette[1][3]; break; case 0x8108: data.bit(0,2) = plane1.palette[0][0]; break; case 0x8109: data.bit(0,2) = plane1.palette[0][1]; break; case 0x810a: data.bit(0,2) = plane1.palette[0][2]; break; case 0x810b: data.bit(0,2) = plane1.palette[0][3]; break; case 0x810c: data.bit(0,2) = plane1.palette[1][0]; break; case 0x810d: data.bit(0,2) = plane1.palette[1][1]; break; case 0x810e: data.bit(0,2) = plane1.palette[1][2]; break; case 0x810f: data.bit(0,2) = plane1.palette[1][3]; break; case 0x8110: data.bit(0,2) = plane2.palette[0][0]; break; case 0x8111: data.bit(0,2) = plane2.palette[0][1]; break; case 0x8112: data.bit(0,2) = plane2.palette[0][2]; break; case 0x8113: data.bit(0,2) = plane2.palette[0][3]; break; case 0x8114: data.bit(0,2) = plane2.palette[1][0]; break; case 0x8115: data.bit(0,2) = plane2.palette[1][1]; break; case 0x8116: data.bit(0,2) = plane2.palette[1][2]; break; case 0x8117: data.bit(0,2) = plane2.palette[1][3]; break; case 0x8118: if(!Model::NeoGeoPocketColor()) break; data.bit(0,2) = background.color; data.bit(3,5) = background.unused; data.bit(6,7) = background.mode; break; case 0x8400: data = led.control; break; case 0x8402: data = led.frequency; break; case 0x87e2: if(!Model::NeoGeoPocketColor()) break; data.bit(0,6) = 0; data.bit(7) = dac.colorMode; break; case 0x87fe: data = 0x3f; break; //input port register (reserved) } return data; } auto KGE::write(n24 address, n8 data) -> void { address = 0x8000 | (n14)address; switch(address) { case 0x8200 ... 0x83ff: return writeColor(address, data); //K2GE only case 0x8800 ... 0x88ff: return writeObject(address, data); case 0x8c00 ... 0x8cff: return writeObjectColor(address, data); //K2GE only case 0x9000 ... 0x9fff: return writeAttribute(address, data); case 0xa000 ... 0xbfff: return writeCharacter(address, data); } switch(address) { case 0x8000: io.hblankEnableIRQ = data.bit(6); io.vblankEnableIRQ = data.bit(7); break; case 0x8002: window.hoffset = data; break; case 0x8003: window.voffset = data; break; case 0x8004: window.hlength = data; break; case 0x8005: window.vlength = data; break; case 0x8006: io.vlines = max(152, data); //it is unknown if this value can be set below the height of the LCD screen break; case 0x8012: window.color = data.bit(0,2); dac.negate = data.bit(7); break; case 0x8020: sprite.hscroll = data; break; case 0x8021: sprite.vscroll = data; break; case 0x8030: io.planePriority = data.bit(7); break; case 0x8032: plane1.hscroll = data; break; case 0x8033: plane1.vscroll = data; break; case 0x8034: plane2.hscroll = data; break; case 0x8035: plane2.vscroll = data; break; case 0x8100: break; case 0x8101: sprite.palette[0][1] = data.bit(0,2); break; case 0x8102: sprite.palette[0][2] = data.bit(0,2); break; case 0x8103: sprite.palette[0][3] = data.bit(0,2); break; case 0x8104: break; case 0x8105: sprite.palette[1][1] = data.bit(0,2); break; case 0x8106: sprite.palette[1][2] = data.bit(0,2); break; case 0x8107: sprite.palette[1][3] = data.bit(0,2); break; case 0x8108: break; case 0x8109: plane1.palette[0][1] = data.bit(0,2); break; case 0x810a: plane1.palette[0][2] = data.bit(0,2); break; case 0x810b: plane1.palette[0][3] = data.bit(0,2); break; case 0x810c: break; case 0x810d: plane1.palette[1][1] = data.bit(0,2); break; case 0x810e: plane1.palette[1][2] = data.bit(0,2); break; case 0x810f: plane1.palette[1][3] = data.bit(0,2); break; case 0x8110: break; case 0x8111: plane2.palette[0][1] = data.bit(0,2); break; case 0x8112: plane2.palette[0][2] = data.bit(0,2); break; case 0x8113: plane2.palette[0][3] = data.bit(0,2); break; case 0x8114: break; case 0x8115: plane2.palette[1][1] = data.bit(0,2); break; case 0x8116: plane2.palette[1][2] = data.bit(0,2); break; case 0x8117: plane2.palette[1][3] = data.bit(0,2); break; case 0x8118: background.color = data.bit(0,2); background.unused = data.bit(3,5); background.mode = data.bit(6,7); break; case 0x8400: led.control.bit(3,7) = data.bit(3,7); break; case 0x8402: led.frequency = data; break; case 0x87e0: if(data == 0x52) io = {}; break; case 0x87e2: if(!Model::NeoGeoPocketColor()) break; if(!cpu.privilegedMode()) break; //user-mode code is not supposed to be able to write to this register dac.colorMode = data.bit(7); break; } } auto KGE::readObject(n8 address) -> n8 { n8 data; auto& object = sprite.objects[address >> 2]; switch(address & 3) { case 0: data = object.character.bit(0,7); break; case 1: data.bit(0) = object.character.bit(8); data.bit(1) = object.vchain; data.bit(2) = object.hchain; data.bit(3,4) = object.priority; data.bit(5) = object.palette; data.bit(6) = object.vflip; data.bit(7) = object.hflip; break; case 2: data = object.hoffset; break; case 3: data = object.voffset; break; } return data; } auto KGE::writeObject(n8 address, n8 data) -> void { auto& object = sprite.objects[address >> 2]; switch(address & 3) { case 0: object.character.bit(0,7) = data; break; case 1: object.character.bit(8) = data.bit(0); object.vchain = data.bit(1); object.hchain = data.bit(2); object.priority = data.bit(3,4); object.palette = data.bit(5); object.vflip = data.bit(6); object.hflip = data.bit(7); break; case 2: object.hoffset = data; break; case 3: object.voffset = data; break; } } auto KGE::readObjectColor(n6 address) -> n8 { if(!Model::NeoGeoPocketColor()) return 0x00; return sprite.objects[address].code; //d4-d7 = 0 } auto KGE::writeObjectColor(n6 address, n8 data) -> void { if(!Model::NeoGeoPocketColor()) return; sprite.objects[address].code = data.bit(0,3); } auto KGE::readColor(n9 address) -> n8 { if(!Model::NeoGeoPocketColor()) return 0x00; n8 data; auto& color = dac.colors[address >> 1]; switch(address & 1) { case 0: data = color.bit(0,7); break; case 1: data.bit(0,3) = color.bit(8,11); data.bit(4,7) = 0; break; } return data; } auto KGE::writeColor(n9 address, n8 data) -> void { if(!Model::NeoGeoPocketColor()) return; auto& color = dac.colors[address >> 1]; switch(address & 1) { case 0: color.bit(0, 7) = data.bit(0,7); break; case 1: color.bit(8,11) = data.bit(0,3); break; } } auto KGE::readAttribute(n12 address) -> n8 { n8 data; auto& attribute = attributes[address >> 1]; switch(address & 1) { case 0: data = attribute.character.bit(0,7); break; case 1: data.bit(0) = attribute.character.bit(8); data.bit(1,4) = attribute.code; data.bit(5) = attribute.palette; data.bit(6) = attribute.vflip; data.bit(7) = attribute.hflip; break; } return data; } auto KGE::writeAttribute(n12 address, n8 data) -> void { auto& attribute = attributes[address >> 1]; switch(address & 1) { case 0: attribute.character.bit(0,7) = data.bit(0,7); break; case 1: attribute.character.bit(8) = data.bit(0); attribute.code = data.bit(1,4); attribute.palette = data.bit(5); attribute.vflip = data.bit(6); attribute.hflip = data.bit(7); break; } } auto KGE::readCharacter(n13 address) -> n8 { n8 data; auto& character = characters[address >> 4]; n3 y = address >> 1; switch(address & 1) { case 0: data.bit(0,1) = character[y][7]; data.bit(2,3) = character[y][6]; data.bit(4,5) = character[y][5]; data.bit(6,7) = character[y][4]; break; case 1: data.bit(0,1) = character[y][3]; data.bit(2,3) = character[y][2]; data.bit(4,5) = character[y][1]; data.bit(6,7) = character[y][0]; break; } return data; } auto KGE::writeCharacter(n13 address, n8 data) -> void { auto& character = characters[address >> 4]; n3 y = address >> 1; switch(address & 1) { case 0: character[y][7] = data.bit(0,1); character[y][6] = data.bit(2,3); character[y][5] = data.bit(4,5); character[y][4] = data.bit(6,7); break; case 1: character[y][3] = data.bit(0,1); character[y][2] = data.bit(2,3); character[y][1] = data.bit(4,5); character[y][0] = data.bit(6,7); break; } } ares-126/ares/ngp/kge/plane.cpp000066400000000000000000000020061415063341600164060ustar00rootroot00000000000000auto KGE::Plane::render(n8 x, n8 y) -> maybe { x += hscroll; y += vscroll; n11 address; address.bit(0,4) = x >> 3; address.bit(5,9) = y >> 3; address.bit(10) = this == &self.plane2; x = (n3)x; y = (n3)y; auto& attribute = self.attributes[address]; if(attribute.hflip) x ^= 7; if(attribute.vflip) y ^= 7; if(n2 index = self.characters[attribute.character][y][x]) { output.priority = self.io.planePriority ^ (this == &self.plane1); if(Model::NeoGeoPocket()) { if(index) output.color = palette[attribute.palette][index]; } if(Model::NeoGeoPocketColor()) { switch(self.dac.colorMode) { case 0: output.color = attribute.code * 4 + index; break; case 1: output.color = attribute.palette * 8 + palette[attribute.palette][index]; break; } } return output; } return {}; } auto KGE::Plane::power() -> void { output = {}; hscroll = 0; vscroll = 0; memory::assign(palette[0], 0, 0, 0, 0); memory::assign(palette[1], 0, 0, 0, 0); } ares-126/ares/ngp/kge/serialization.cpp000066400000000000000000000032411415063341600201660ustar00rootroot00000000000000auto KGE::serialize(serializer& s) -> void { Thread::serialize(s); s(window); s(plane1); s(plane2); s(sprite); s(dac); for(auto& attribute : attributes) { s(attribute.character); s(attribute.code); s(attribute.palette); s(attribute.vflip); s(attribute.hflip); } for(auto& character : characters) { for(auto& y : character) { for(auto& x : y) { s(x); } } } s(background.color); s(background.unused); s(background.mode); s(led.control); s(led.frequency); s(io.vlines); s(io.vcounter); s(io.hcounter); s(io.hblankEnableIRQ); s(io.vblankEnableIRQ); s(io.hblankActive); s(io.vblankActive); s(io.characterOver); s(io.planePriority); } auto KGE::Window::serialize(serializer& s) -> void { s(output.color); s(hoffset); s(voffset); s(hlength); s(vlength); s(color); } auto KGE::Plane::serialize(serializer& s) -> void { s(output.color); s(output.priority); s(hscroll); s(vscroll); s(palette[0]); s(palette[1]); } auto KGE::Sprite::serialize(serializer& s) -> void { s(output.color); s(output.priority); for(auto& object : objects) { s(object.character); s(object.vchain); s(object.hchain); s(object.priority); s(object.palette); s(object.vflip); s(object.hflip); s(object.hoffset); s(object.voffset); s(object.code); } for(auto& tile : tiles) { s(tile.x); s(tile.y); s(tile.character); s(tile.priority); s(tile.palette); s(tile.hflip); s(tile.code); } s(hscroll); s(vscroll); s(palette); } auto KGE::DAC::serialize(serializer& s) -> void { s(colors); s(colorMode); s(negate); } ares-126/ares/ngp/kge/sprite.cpp000066400000000000000000000041151415063341600166200ustar00rootroot00000000000000//technically, the Neo Geo Pocket attempts to buffer a line of sprites in advance. //so long as the user program does not write to VRAM during display, it can render //all 64 sprites on the same line. currently, the "character over" condition when //writing to VRAM during active display is not emulated, nor is the exact timing //of the caching used by real hardware, as this information is not currently known. auto KGE::Sprite::begin(n8 y) -> void { for(auto& tile : tiles) tile.priority = 0; n8 count; n8 px; n8 py; for(auto& object : objects) { n8 ox = object.hoffset; n8 oy = object.voffset; if(object.hchain) ox += px; if(object.vchain) oy += py; px = ox; py = oy; if(!object.priority) continue; //invisible ox = (ox + hscroll); oy = y - (oy + vscroll); if(oy >= 8) continue; //out of range if(object.vflip) oy ^= 7; auto& tile = tiles[count++]; tile.x = ox; tile.y = oy; tile.character = object.character; tile.priority = object.priority; tile.palette = object.palette; tile.hflip = object.hflip; tile.code = object.code; } } auto KGE::Sprite::render(n8 x, n8 y) -> maybe { for(auto& tile : tiles) { if(!tile.priority) continue; //invisible n8 tx = x - tile.x; n3 ty = tile.y; if(tx >= 8) continue; //out of range if(tile.hflip) tx ^= 7; if(n2 index = self.characters[tile.character][ty][tx]) { output.priority = tile.priority; if(Model::NeoGeoPocket()) { output.color = palette[tile.palette][index]; } if(Model::NeoGeoPocketColor()) { switch(self.dac.colorMode) { case 0: output.color = tile.code * 4 + index; break; case 1: output.color = tile.palette * 8 + palette[tile.palette][index]; break; } } return output; } } return {}; } auto KGE::Sprite::power() -> void { output = {}; for(auto& object : objects) object = {}; for(auto& tile : tiles) tile = {}; hscroll = 0; vscroll = 0; memory::assign(palette[0], 0, 0, 0, 0); memory::assign(palette[1], 0, 0, 0, 0); } ares-126/ares/ngp/kge/window.cpp000066400000000000000000000005211415063341600166160ustar00rootroot00000000000000auto KGE::Window::render(n8 x, n8 y) -> maybe { if(x >= hoffset && y >= voffset && x < hoffset + hlength && y < voffset + vlength) { return {}; } output.color = color; return output; } auto KGE::Window::power() -> void { output = {}; hoffset = 0; voffset = 0; hlength = 0; vlength = 0; color = 0; } ares-126/ares/ngp/ngp.hpp000066400000000000000000000012371415063341600153370ustar00rootroot00000000000000#pragma once //started: 2019-01-03 #include #include #include #include namespace ares::NeoGeoPocket { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto NeoGeoPocket() -> bool; inline static auto NeoGeoPocketColor() -> bool; }; #include #include #include #include #include #include } ares-126/ares/ngp/psg/000077500000000000000000000000001415063341600146305ustar00rootroot00000000000000ares-126/ares/ngp/psg/psg.cpp000066400000000000000000000032371415063341600161320ustar00rootroot00000000000000#include namespace ares::NeoGeoPocket { PSG psg; #include "serialization.cpp" auto PSG::writePitch(u32 pitch) -> void { apu.debugger.interrupt(string{"writePitch ", pitch & 15, " ", pitch >> 4 & 63}); } auto PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(2); stream->setFrequency(system.frequency() / 32.0); stream->addHighPassFilter(20.0, 1); } auto PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto PSG::main() -> void { f64 left = 0.0; f64 right = 0.0; if(psg.enable) { auto channels = T6W28::clock(); left += volume[channels[0]]; left += volume[channels[1]]; left += volume[channels[2]]; left += volume[channels[3]]; left /= 4.0; right += volume[channels[4]]; right += volume[channels[5]]; right += volume[channels[6]]; right += volume[channels[7]]; right /= 4.0; } else { left += dac.left / 255.0; right += dac.right / 255.0; } stream->frame(left, right); step(1); } auto PSG::step(u32 clocks) -> void { Thread::step(clocks); synchronize(cpu); synchronize(apu); } auto PSG::enablePSG() -> void { psg.enable = 1; } auto PSG::enableDAC() -> void { psg.enable = 0; } auto PSG::writeLeftDAC(n8 data) -> void { dac.left = data; } auto PSG::writeRightDAC(n8 data) -> void { dac.right = data; } auto PSG::power() -> void { Thread::create(system.frequency() / 32.0, {&PSG::main, this}); psg = {}; dac = {}; for(u32 level : range(15)) { volume[level] = pow(2, level * -2.0 / 6.0); } volume[15] = 0; } } ares-126/ares/ngp/psg/psg.hpp000066400000000000000000000011351415063341600161320ustar00rootroot00000000000000struct PSG : T6W28, Thread { Node::Object node; Node::Audio::Stream stream; auto writePitch(u32) -> void override; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto enablePSG() -> void; auto enableDAC() -> void; auto writeLeftDAC(n8 data) -> void; auto writeRightDAC(n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct { n1 enable; } psg; struct DAC { n8 left; n8 right; } dac; private: f64 volume[16]; }; extern PSG psg; ares-126/ares/ngp/psg/serialization.cpp000066400000000000000000000002161415063341600202100ustar00rootroot00000000000000auto PSG::serialize(serializer& s) -> void { T6W28::serialize(s); Thread::serialize(s); s(psg.enable); s(dac.left); s(dac.right); } ares-126/ares/ngp/system/000077500000000000000000000000001415063341600153635ustar00rootroot00000000000000ares-126/ares/ngp/system/controls.cpp000066400000000000000000000022771415063341600177420ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); a = node->append("A"); b = node->append("B"); option = node->append("Option"); debugger = node->append("Debugger"); power = node->append("Power"); } auto System::Controls::poll() -> void { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(b); platform->input(option); platform->input(debugger); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } ares-126/ares/ngp/system/debugger.cpp000066400000000000000000000007441415063341600176600ustar00rootroot00000000000000auto System::Debugger::load(Node::Object parent) -> void { memory.bios = parent->append("BIOS"); memory.bios->setSize(self.bios.size()); memory.bios->setRead([&](u32 address) -> u8 { return self.bios.read(address); }); memory.bios->setWrite([&](u32 address, u8 data) -> void { return self.bios.write(address, data); }); } auto System::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.bios); memory.bios.reset(); } ares-126/ares/ngp/system/serialization.cpp000066400000000000000000000017521415063341600207510ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cartridge); s(cpu); s(apu); s(kge); s(psg); } ares-126/ares/ngp/system/system.cpp000066400000000000000000000047141415063341600174210ustar00rootroot00000000000000#include namespace ares::NeoGeoPocket { auto enumerate() -> vector { return { "[SNK] Neo Geo Pocket", "[SNK] Neo Geo Pocket Color", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; #include "controls.cpp" #include "debugger.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Neo Geo Pocket")) { information.name = "Neo Geo Pocket"; information.model = Model::NeoGeoPocket; } if(name.find("Neo Geo Pocket Color")) { information.name = "Neo Geo Pocket Color"; information.model = Model::NeoGeoPocketColor; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; fastBoot = node->append("Fast Boot", false); bios.allocate(64_KiB); if(auto fp = pak->read("bios.rom")) { bios.load(fp); } scheduler.reset(); controls.load(node); cpu.load(node); apu.load(node); kge.load(node); psg.load(node); cartridgeSlot.load(node); debugger.load(node); return true; } auto System::save() -> void { if(!node) return; cpu.save(); apu.save(); cartridge.save(); } auto System::unload() -> void { if(!node) return; debugger.unload(node); bios.reset(); cpu.unload(); apu.unload(); kge.unload(); psg.unload(); cartridgeSlot.unload(); pak.reset(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); //enable or disable boot animation. n16 bootAnim = NeoGeoPocket::Model::NeoGeoPocketColor() ? 0x530c : 0x4618; bios.program(bootAnim, fastBoot->latch() ? 0x0e : 0xf1); //0x0e = ret, 0xf1 = ld cartridge.power(); cpu.power(); apu.power(); kge.power(); psg.power(); scheduler.power(cpu); } } ares-126/ares/ngp/system/system.hpp000066400000000000000000000035011415063341600174170ustar00rootroot00000000000000struct System { Node::System node; Node::Setting::Boolean fastBoot; VFS::Pak pak; Memory::Readable bios; struct Controls { Node::Object node; Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button a; Node::Input::Button b; Node::Input::Button option; Node::Input::Button debugger; Node::Input::Button power; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; bool yHold = 0; bool upLatch = 0; bool downLatch = 0; bool xHold = 0; bool leftLatch = 0; bool rightLatch = 0; } controls; struct Debugger { System& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory bios; } memory; } debugger{*this}; enum class Model : u32 { NeoGeoPocket, NeoGeoPocketColor }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto frequency() const -> f64 { return 6'144'000; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name; Model model = Model::NeoGeoPocket; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Model::NeoGeoPocket() -> bool { return system.model() == System::Model::NeoGeoPocket; } auto Model::NeoGeoPocketColor() -> bool { return system.model() == System::Model::NeoGeoPocketColor; } ares-126/ares/pce/000077500000000000000000000000001415063341600140225ustar00rootroot00000000000000ares-126/ares/pce/GNUmakefile000066400000000000000000000014101415063341600160700ustar00rootroot00000000000000ares.components += huc6280 ares.components += msm5205 ares.objects += ares-pce-cpu ares.objects += ares-pce-vdp ares.objects += ares-pce-psg ares.objects += ares-pce-pcd ares.objects += ares-pce-system ares.objects += ares-pce-cartridge ares.objects += ares-pce-controller $(object.path)/ares-pce-cpu.o: $(ares.path)/pce/cpu/cpu.cpp $(object.path)/ares-pce-vdp.o: $(ares.path)/pce/vdp/vdp.cpp $(object.path)/ares-pce-psg.o: $(ares.path)/pce/psg/psg.cpp $(object.path)/ares-pce-pcd.o: $(ares.path)/pce/pcd/pcd.cpp $(object.path)/ares-pce-system.o: $(ares.path)/pce/system/system.cpp $(object.path)/ares-pce-cartridge.o: $(ares.path)/pce/cartridge/cartridge.cpp $(object.path)/ares-pce-controller.o: $(ares.path)/pce/controller/controller.cpp ares-126/ares/pce/cartridge/000077500000000000000000000000001415063341600157665ustar00rootroot00000000000000ares-126/ares/pce/cartridge/board/000077500000000000000000000000001415063341600170555ustar00rootroot00000000000000ares-126/ares/pce/cartridge/board/arcade-card-duo.cpp000066400000000000000000000113141415063341600224740ustar00rootroot00000000000000struct ArcadeCardDuo : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable dram; struct Debugger { maybe super; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory dram; } memory; } debugger; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(dram, "dynamic.ram"); debugger.super = *this; debugger.load(cartridge.node); } auto save() -> void override { } auto unload() -> void override { debugger.unload(cartridge.node); } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x3f) { return rom.read(bank << 13 | address); } if(bank >= 0x40 && bank <= 0x43) { auto& page = pages[bank - 0x40]; return dram.read(page.address()); } if(bank == 0xff) { switch(address) { case 0x1ae0: return alu.value.byte(0); case 0x1ae1: return alu.value.byte(1); case 0x1ae2: return alu.value.byte(2); case 0x1ae3: return alu.value.byte(3); case 0x1ae4: return alu.shift; case 0x1ae5: return alu.rotate; case 0x1afd: return 0x00; //version# (low) case 0x1afe: return 0x10; //version# (high) case 0x1aff: return 0x51; //identifier } auto& page = pages[address.bit(4,5)]; switch(address & 0x1f8f) { case 0x1a00: return dram.read(page.address()); case 0x1a01: return dram.read(page.address()); case 0x1a02: return page.base.byte(0); case 0x1a03: return page.base.byte(1); case 0x1a04: return page.base.byte(2); case 0x1a05: return page.offset.byte(0); case 0x1a06: return page.offset.byte(1); case 0x1a07: return page.adjust.byte(0); case 0x1a08: return page.adjust.byte(1); case 0x1a09: return page.control; } } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { if(bank >= 0x40 && bank <= 0x43) { auto& page = pages[bank - 0x40]; return dram.write(page.address(), data); } if(bank == 0xff) { switch(address) { case 0x1ae0: alu.value.byte(0) = data; return; case 0x1ae1: alu.value.byte(1) = data; return; case 0x1ae2: alu.value.byte(2) = data; return; case 0x1ae3: alu.value.byte(3) = data; return; case 0x1ae4: alu.shift = data.bit(0,3); if(alu.shift.bit(3) == 0) alu.value = alu.value << alu.shift; if(alu.shift.bit(3) == 1) alu.value = alu.value >> 16 - alu.shift; return; case 0x1ae5: alu.rotate = data.bit(0,3); if(alu.rotate.bit(3) == 0) alu.value = alu.value << alu.rotate | alu.value >> 32 - alu.rotate; if(alu.rotate.bit(3) == 1) alu.value = alu.value >> 32 - (16 - alu.rotate) | alu.value << 16 - alu.rotate; return; } auto& page = pages[address.bit(4,5)]; switch(address & 0x1f8f) { case 0x1a00: return dram.write(page.address(), data); case 0x1a01: return dram.write(page.address(), data); case 0x1a02: page.base.byte(0) = data; return; case 0x1a03: page.base.byte(1) = data; return; case 0x1a04: page.base.byte(2) = data; return; case 0x1a05: page.offset.byte(0) = data; if(page.control.bit(5,6) != 1) return; page.base += page.offset + 0xff0000 * page.control.bit(3); return; case 0x1a06: page.offset.byte(1) = data; if(page.control.bit(5,6) != 2) return; page.base += page.offset + 0xff0000 * page.control.bit(3); return; case 0x1a07: page.adjust.byte(0) = data; return; case 0x1a08: page.adjust.byte(1) = data; return; case 0x1a09: page.control = data.bit(0,6); return; case 0x1a0a: if(page.control.bit(5,6) != 3) return; page.base += page.offset + 0xff0000 + page.control.bit(3); return; } } } auto power() -> void override { for(auto& page : pages) page = {}; alu = {}; } auto serialize(serializer& s) -> void override { s(dram); for(auto& page : pages) { s(page.control); s(page.base); s(page.offset); s(page.adjust); } s(alu.value); s(alu.shift); s(alu.rotate); } struct Page { auto address() -> n21 { n21 address = base; if(control.bit(1) == 1) address += offset + 0xff0000 * control.bit(3); if(control.bit(0) == 1) increment(); return address; } auto increment() -> void { if(control.bit(4) == 0) offset += adjust; if(control.bit(4) == 1) base += adjust; } n7 control; n24 base; n16 offset; n16 adjust; } pages[4]; struct ALU { n32 value; n4 shift; n4 rotate; } alu; }; ares-126/ares/pce/cartridge/board/arcade-card-pro.cpp000066400000000000000000000123511415063341600225070ustar00rootroot00000000000000struct ArcadeCardPro : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; Memory::Writable dram; struct Debugger { maybe super; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory ram; Node::Debugger::Memory dram; } memory; } debugger; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "work.ram"); Interface::load(dram, "dynamic.ram"); debugger.super = *this; debugger.load(cartridge.node); } auto save() -> void override { } auto unload() -> void override { debugger.unload(cartridge.node); } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x3f) { return rom.read(bank << 13 | address); } if(bank >= 0x40 && bank <= 0x43) { auto& page = pages[bank - 0x40]; return dram.read(page.address()); } if(bank >= 0x68 && bank <= 0x7f) { return ram.read(bank - 0x68 << 13 | address); } if(bank == 0xff) { switch(address) { case 0x18c4: return 0x00; case 0x18c5: return Region::NTSCJ() ? 0xaa : 0x55; case 0x18c6: return Region::NTSCJ() ? 0x55 : 0xaa; case 0x18c7: return ram.size() / 64_KiB; } switch(address) { case 0x1ae0: return alu.value.byte(0); case 0x1ae1: return alu.value.byte(1); case 0x1ae2: return alu.value.byte(2); case 0x1ae3: return alu.value.byte(3); case 0x1ae4: return alu.shift; case 0x1ae5: return alu.rotate; case 0x1afd: return 0x00; //version# (low) case 0x1afe: return 0x10; //version# (high) case 0x1aff: return 0x51; //identifier } auto& page = pages[address.bit(4,5)]; switch(address & 0x1f8f) { case 0x1a00: return dram.read(page.address()); case 0x1a01: return dram.read(page.address()); case 0x1a02: return page.base.byte(0); case 0x1a03: return page.base.byte(1); case 0x1a04: return page.base.byte(2); case 0x1a05: return page.offset.byte(0); case 0x1a06: return page.offset.byte(1); case 0x1a07: return page.adjust.byte(0); case 0x1a08: return page.adjust.byte(1); case 0x1a09: return page.control; } } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { if(bank >= 0x40 && bank <= 0x43) { auto& page = pages[bank - 0x40]; return dram.write(page.address(), data); } if(bank >= 0x68 && bank <= 0x7f) { return ram.write(bank - 0x68 << 13 | address, data); } if(bank == 0xff) { switch(address) { case 0x1ae0: alu.value.byte(0) = data; return; case 0x1ae1: alu.value.byte(1) = data; return; case 0x1ae2: alu.value.byte(2) = data; return; case 0x1ae3: alu.value.byte(3) = data; return; case 0x1ae4: alu.shift = data.bit(0,3); if(alu.shift.bit(3) == 0) alu.value = alu.value << alu.shift; if(alu.shift.bit(3) == 1) alu.value = alu.value >> 16 - alu.shift; return; case 0x1ae5: alu.rotate = data.bit(0,3); if(alu.rotate.bit(3) == 0) alu.value = alu.value << alu.rotate | alu.value >> 32 - alu.rotate; if(alu.rotate.bit(3) == 1) alu.value = alu.value >> 32 - (16 - alu.rotate) | alu.value << 16 - alu.rotate; return; } auto& page = pages[address.bit(4,5)]; switch(address & 0x1f8f) { case 0x1a00: return dram.write(page.address(), data); case 0x1a01: return dram.write(page.address(), data); case 0x1a02: page.base.byte(0) = data; return; case 0x1a03: page.base.byte(1) = data; return; case 0x1a04: page.base.byte(2) = data; return; case 0x1a05: page.offset.byte(0) = data; if(page.control.bit(5,6) != 1) return; page.base += page.offset + 0xff0000 * page.control.bit(3); return; case 0x1a06: page.offset.byte(1) = data; if(page.control.bit(5,6) != 2) return; page.base += page.offset + 0xff0000 * page.control.bit(3); return; case 0x1a07: page.adjust.byte(0) = data; return; case 0x1a08: page.adjust.byte(1) = data; return; case 0x1a09: page.control = data.bit(0,6); return; case 0x1a0a: if(page.control.bit(5,6) != 3) return; page.base += page.offset + 0xff0000 * page.control.bit(3); return; } } } auto power() -> void override { for(auto& page : pages) page = {}; alu = {}; } auto serialize(serializer& s) -> void override { s(ram); s(dram); for(auto& page : pages) { s(page.control); s(page.base); s(page.offset); s(page.adjust); } s(alu.value); s(alu.shift); s(alu.rotate); } struct Page { auto address() -> n21 { n21 address = base; if(control.bit(1) == 1) address += offset + 0xff0000 * control.bit(3); if(control.bit(0) == 1) increment(); return address; } auto increment() -> void { if(control.bit(4) == 0) offset += adjust; if(control.bit(4) == 1) base += adjust; } n7 control; n24 base; n16 offset; n16 adjust; } pages[4]; struct ALU { n32 value; n4 shift; n4 rotate; } alu; }; ares-126/ares/pce/cartridge/board/banked.cpp000066400000000000000000000015241415063341600210070ustar00rootroot00000000000000struct Banked : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x3f) { return rom.read(bank << 13 | address); } if(bank >= 0x40 && bank <= 0x7f) { return rom.read(1 + romBank << 19 | (n6)bank << 13 | address); } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { if(bank == 0x00 && address >= 0x01ff0 && address <= 0x01ffe) { romBank = address.bit(0,1); } } auto power() -> void override { romBank = 0; } auto serialize(serializer& s) -> void override { s(romBank); } n2 romBank; }; ares-126/ares/pce/cartridge/board/board.cpp000066400000000000000000000014721415063341600206540ustar00rootroot00000000000000namespace Board { #include "linear.cpp" #include "split.cpp" #include "banked.cpp" #include "ram.cpp" #include "system-card.cpp" #include "super-system-card.cpp" #include "arcade-card-duo.cpp" #include "arcade-card-pro.cpp" #include "debugger.cpp" auto Interface::load(Memory::Readable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::load(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::save(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->write(name)) { memory.save(fp); return true; } return false; } } ares-126/ares/pce/cartridge/board/board.hpp000066400000000000000000000012411415063341600206530ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; Interface(Cartridge& cartridge) : cartridge(cartridge) {} virtual ~Interface() = default; virtual auto load() -> void {} virtual auto save() -> void {} virtual auto unload() -> void {} virtual auto read(n8 bank, n13 address, n8 data) -> n8 { return data; } virtual auto write(n8 bank, n13 address, n8 data) -> void {} virtual auto power() -> void {} virtual auto serialize(serializer&) -> void {} auto load(Memory::Readable&, string name) -> bool; auto load(Memory::Writable&, string name) -> bool; auto save(Memory::Writable&, string name) -> bool; Cartridge& cartridge; }; } ares-126/ares/pce/cartridge/board/debugger.cpp000066400000000000000000000046051415063341600213520ustar00rootroot00000000000000auto RAM::Debugger::load(Node::Object parent) -> void { if(super->ram) { memory.ram = parent->append("HuCard RAM"); memory.ram->setSize(super->ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return super->ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return super->ram.write(address, data); }); } } auto RAM::Debugger::unload(Node::Object parent) -> void { if(super->ram) { parent->remove(memory.ram); memory.ram = {}; } } // auto SuperSystemCard::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("HuCard RAM"); memory.ram->setSize(super->ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return super->ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return super->ram.write(address, data); }); } auto SuperSystemCard::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); memory.ram = {}; } // auto ArcadeCardDuo::Debugger::load(Node::Object parent) -> void { memory.dram = parent->append("HuCard DRAM"); memory.dram->setSize(super->dram.size()); memory.dram->setRead([&](u32 address) -> u8 { return super->dram.read(address); }); memory.dram->setWrite([&](u32 address, u8 data) -> void { return super->dram.write(address, data); }); } auto ArcadeCardDuo::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.dram); memory.dram = {}; } // auto ArcadeCardPro::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("HuCard RAM"); memory.ram->setSize(super->ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return super->ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return super->ram.write(address, data); }); memory.dram = parent->append("HuCard DRAM"); memory.dram->setSize(super->dram.size()); memory.dram->setRead([&](u32 address) -> u8 { return super->dram.read(address); }); memory.dram->setWrite([&](u32 address, u8 data) -> void { return super->dram.write(address, data); }); } auto ArcadeCardPro::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); parent->remove(memory.dram); memory.ram = {}; memory.dram = {}; } ares-126/ares/pce/cartridge/board/linear.cpp000066400000000000000000000011061415063341600210310ustar00rootroot00000000000000struct Linear : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x7f) { return rom.read(bank << 13 | address); } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { } auto power() -> void override { } auto serialize(serializer& s) -> void override { } }; ares-126/ares/pce/cartridge/board/ram.cpp000066400000000000000000000022661415063341600203460ustar00rootroot00000000000000struct RAM : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; struct Debugger { maybe super; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory ram; } memory; } debugger; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); debugger.super = *this; debugger.load(cartridge.node); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { debugger.unload(cartridge.node); } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x3f) { return rom.read(bank << 13 | address); } if(bank >= 0x40 && bank <= 0x43) { return ram.read(bank << 13 | address); } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { if(bank >= 0x40 && bank <= 0x43) { return ram.write(bank << 13 | address, data); } } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(ram); } }; ares-126/ares/pce/cartridge/board/split.cpp000066400000000000000000000016261415063341600207210ustar00rootroot00000000000000struct Split : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); //every licensed HuCard follows this format; //but ideally this should be two separate ROMs ... romAddress[0] = 0; romAddress[1] = bit::round(rom.size()) >> 1; } auto save() -> void override { } auto unload() -> void override { } auto read(n8 bank, n13 address, n8 data) -> n8 override { n19 linear = (n6)bank << 13 | address; if(bank >= 0x00 && bank <= 0x3f) { return rom.read(romAddress[0] + linear); } if(bank >= 0x40 && bank <= 0x7f) { return rom.read(romAddress[1] + linear); } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { } auto power() -> void override { } auto serialize(serializer& s) -> void override { } n20 romAddress[2]; }; ares-126/ares/pce/cartridge/board/super-system-card.cpp000066400000000000000000000026631415063341600231570ustar00rootroot00000000000000struct SuperSystemCard : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; struct Debugger { maybe super; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory ram; } memory; } debugger; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "work.ram"); debugger.super = *this; debugger.load(cartridge.node); } auto save() -> void override { } auto unload() -> void override { debugger.load(cartridge.node); } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x3f) { return rom.read(bank << 13 | address); } if(bank >= 0x68 && bank <= 0x7f) { return ram.read(bank - 0x68 << 13 | address); } if(bank == 0xff) { switch(address) { case 0x18c4: return 0x00; case 0x18c5: return Region::NTSCJ() ? 0xaa : 0x55; case 0x18c6: return Region::NTSCJ() ? 0x55 : 0xaa; case 0x18c7: return ram.size() / 64_KiB; } } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { if(bank >= 0x68 && bank <= 0x7f) { return ram.write(bank - 0x68 << 13 | address, data); } } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(ram); } }; ares-126/ares/pce/cartridge/board/system-card.cpp000066400000000000000000000011121415063341600220070ustar00rootroot00000000000000struct SystemCard : Interface { using Interface::Interface; Memory::Readable rom; auto load() -> void override { Interface::load(rom, "program.rom"); } auto save() -> void override { } auto unload() -> void override { } auto read(n8 bank, n13 address, n8 data) -> n8 override { if(bank >= 0x00 && bank <= 0x3f) { return rom.read(bank << 13 | address); } return data; } auto write(n8 bank, n13 address, n8 data) -> void override { } auto power() -> void override { } auto serialize(serializer& s) -> void override { } }; ares-126/ares/pce/cartridge/cartridge.cpp000066400000000000000000000034001415063341600204330ustar00rootroot00000000000000#include namespace ares::PCEngine { Cartridge& cartridge = cartridgeSlot.cartridge; #include "board/board.cpp" #include "slot.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Card"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.board = pak->attribute("board"); if(information.board == "Linear") board = new Board::Linear{*this}; if(information.board == "Split") board = new Board::Split{*this}; if(information.board == "Banked") board = new Board::Banked{*this}; if(information.board == "RAM") board = new Board::RAM{*this}; if(information.board == "System Card") board = new Board::SystemCard{*this}; if(information.board == "Super System Card") board = new Board::SuperSystemCard{*this}; if(information.board == "Arcade Card Duo") board = new Board::ArcadeCardDuo{*this}; if(information.board == "Arcade Card Pro") board = new Board::ArcadeCardPro{*this}; if(!board) board = new Board::Interface{*this}; board->pak = pak; board->load(); power(); } auto Cartridge::disconnect() -> void { if(!node || !board) return; board->unload(); board->pak.reset(); board.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; board->save(); } auto Cartridge::power() -> void { board->power(); } auto Cartridge::read(n8 bank, n13 address, n8 data) -> n8 { return board->read(bank, address, data); } auto Cartridge::write(n8 bank, n13 address, n8 data) -> void { return board->write(bank, address, data); } } ares-126/ares/pce/cartridge/cartridge.hpp000066400000000000000000000014011415063341600204370ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto read(n8 bank, n13 address, n8 data) -> n8; auto write(n8 bank, n13 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; unique_pointer board; private: struct Information { string title; string region; string board; } information; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/pce/cartridge/serialization.cpp000066400000000000000000000001141415063341600213430ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { if(board) s(*board); } ares-126/ares/pce/cartridge/slot.cpp000066400000000000000000000013301415063341600174500ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } auto CartridgeSlot::power() -> void { if(port->connected()) cartridge.power(); } auto CartridgeSlot::serialize(serializer& s) -> void { if(port->connected()) s(cartridge); } ares-126/ares/pce/cartridge/slot.hpp000066400000000000000000000004471415063341600174650ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; auto power() -> void; auto serialize(serializer&) -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/pce/controller/000077500000000000000000000000001415063341600162055ustar00rootroot00000000000000ares-126/ares/pce/controller/avenuepad/000077500000000000000000000000001415063341600201555ustar00rootroot00000000000000ares-126/ares/pce/controller/avenuepad/avenuepad.cpp000066400000000000000000000043561415063341600226410ustar00rootroot00000000000000AvenuePad::AvenuePad(Node::Port parent) { node = parent->append("Avenue Pad 6"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); three = node->append("III"); two = node->append("II"); one = node->append("I"); four = node->append("IV"); five = node->append("V"); six = node->append("VI"); select = node->append("Select"); run = node->append("Run"); } auto AvenuePad::read() -> n4 { if(clr) return 0; platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(three); platform->input(two); platform->input(one); platform->input(four); platform->input(five); platform->input(six); platform->input(select); platform->input(run); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n4 data; if(active == 0) { if(sel) { data.bit(0) = !upLatch; data.bit(1) = !rightLatch; data.bit(2) = !downLatch; data.bit(3) = !leftLatch; } else { data.bit(0) = !one->value(); data.bit(1) = !two->value(); data.bit(2) = !select->value(); data.bit(3) = !run->value(); } } if(active == 1) { if(sel) { data.bit(0) = 0; data.bit(1) = 0; data.bit(2) = 0; data.bit(3) = 0; } else { data.bit(0) = !three->value(); data.bit(1) = !four->value(); data.bit(2) = !five->value(); data.bit(3) = !six->value(); } } return data; } auto AvenuePad::write(n2 data) -> void { //there should be a small delay for this to take effect ... if(!sel && data.bit(0)) active ^= 1; sel = data.bit(0); clr = data.bit(1); } ares-126/ares/pce/controller/avenuepad/avenuepad.hpp000066400000000000000000000012131415063341600226330ustar00rootroot00000000000000struct AvenuePad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button three; Node::Input::Button two; Node::Input::Button one; Node::Input::Button four; Node::Input::Button five; Node::Input::Button six; Node::Input::Button select; Node::Input::Button run; AvenuePad(Node::Port); auto read() -> n4 override; auto write(n2 data) -> void override; private: bool sel = 0; bool clr = 0; bool active = 0; bool yHold = 0; bool upLatch = 0; bool downLatch = 0; bool xHold = 0; bool leftLatch = 0; bool rightLatch = 0; }; ares-126/ares/pce/controller/controller.cpp000066400000000000000000000002561415063341600210770ustar00rootroot00000000000000#include namespace ares::PCEngine { #include "port.cpp" #include "gamepad/gamepad.cpp" #include "avenuepad/avenuepad.cpp" #include "multitap/multitap.cpp" } ares-126/ares/pce/controller/controller.hpp000066400000000000000000000004471415063341600211060ustar00rootroot00000000000000struct Controller : Thread { Node::Peripheral node; virtual ~Controller() = default; virtual auto read() -> n4 { return 0x0f; } virtual auto write(n2) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" #include "avenuepad/avenuepad.hpp" #include "multitap/multitap.hpp" ares-126/ares/pce/controller/gamepad/000077500000000000000000000000001415063341600176035ustar00rootroot00000000000000ares-126/ares/pce/controller/gamepad/gamepad.cpp000066400000000000000000000030611415063341600217050ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); two = node->append("II"); one = node->append("I"); select = node->append("Select"); run = node->append("Run"); } auto Gamepad::read() -> n4 { if(clr) return 0; platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(two); platform->input(one); platform->input(select); platform->input(run); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n4 data; if(sel) { data.bit(0) = !upLatch; data.bit(1) = !rightLatch; data.bit(2) = !downLatch; data.bit(3) = !leftLatch; } else { data.bit(0) = !one->value(); data.bit(1) = !two->value(); data.bit(2) = !select->value(); data.bit(3) = !run->value(); } return data; } auto Gamepad::write(n2 data) -> void { //there should be a small delay for this to take effect ... sel = data.bit(0); clr = data.bit(1); } ares-126/ares/pce/controller/gamepad/gamepad.hpp000066400000000000000000000007241415063341600217150ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button two; Node::Input::Button one; Node::Input::Button select; Node::Input::Button run; Gamepad(Node::Port); auto read() -> n4 override; auto write(n2 data) -> void override; private: b1 sel; b1 clr; b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/pce/controller/multitap/000077500000000000000000000000001415063341600200445ustar00rootroot00000000000000ares-126/ares/pce/controller/multitap/multitap.cpp000066400000000000000000000023561415063341600224150ustar00rootroot00000000000000Multitap::Multitap(Node::Port parent): port1{"Controller Port 1"}, port2{"Controller Port 2"}, port3{"Controller Port 3"}, port4{"Controller Port 4"}, port5{"Controller Port 5"} { node = parent->append("Multitap"); port1.load(node); port2.load(node); port3.load(node); port4.load(node); port5.load(node); } auto Multitap::read() -> n4 { if (counter == 0) return port1.read(); if (counter == 1) return port2.read(); if (counter == 2) return port3.read(); if (counter == 3) return port4.read(); if (counter == 4) return port5.read(); // When counter > num ports, multi-tap returns 0 return 0; } auto Multitap::write(n2 data) -> void { auto prevSel = sel; auto prevClr = clr; sel = data.bit(0); clr = data.bit(1); // Counter is incremented on 0-1 transition of sel // but only while clr is 0 if (!clr && sel && !prevSel) { counter++; } // Counter is reset on 0-1 transition of clr // but only while sel is 1 if (sel && clr && !prevClr) { counter = 0; } if (counter == 0) return port1.write(sel); if (counter == 1) return port2.write(sel); if (counter == 2) return port3.write(sel); if (counter == 3) return port4.write(sel); if (counter == 4) return port5.write(sel); } ares-126/ares/pce/controller/multitap/multitap.hpp000066400000000000000000000004461415063341600224200ustar00rootroot00000000000000struct Multitap : Controller { ControllerPort port1; ControllerPort port2; ControllerPort port3; ControllerPort port4; ControllerPort port5; Multitap(Node::Port); auto read() -> n4 override; auto write(n2 data) -> void override; private: u8 counter; u1 sel; u1 clr; }; ares-126/ares/pce/controller/port.cpp000066400000000000000000000015161415063341600177000ustar00rootroot00000000000000ControllerPort controllerPort{"Controller Port"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("PC Engine"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad", "Avenue Pad 6", "Multitap"}); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(name == "Avenue Pad 6") device = new AvenuePad(port); if(name == "Multitap") device = new Multitap(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/pce/controller/port.hpp000066400000000000000000000007461415063341600177110ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto read() -> n4 { if(device) return device->read(); return 0b1111; } auto write(n2 data) -> void { if(device) return device->write(data); } auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort; ares-126/ares/pce/cpu/000077500000000000000000000000001415063341600146115ustar00rootroot00000000000000ares-126/ares/pce/cpu/cpu.cpp000066400000000000000000000032131415063341600161030ustar00rootroot00000000000000#include namespace ares::PCEngine { CPU cpu; #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); if(Model::SuperGrafx() == 0) ram.allocate( 8_KiB, 0x00); if(Model::SuperGrafx() == 1) ram.allocate(32_KiB, 0x00); debugger.load(node); } auto CPU::unload() -> void { ram.reset(); node = {}; debugger = {}; } auto CPU::main() -> void { if(tiq.pending) { debugger.interrupt("TIQ"); return interrupt(tiq.vector); } if(irq1.pending) { debugger.interrupt("IRQ1"); return interrupt(irq1.vector); } if(irq2.pending) { debugger.interrupt("IRQ2"); return interrupt(irq2.vector); } debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { timer.counter -= clocks; while(timer.counter < 0) { synchronize(psg); timer.counter += 1024 * 3; if(!timer.value--) { timer.value = timer.reload; timer.line = timer.enable; } } Thread::step(clocks); synchronize(vdp); if(PCD::Present()) synchronize(pcd); } auto CPU::power() -> void { HuC6280::power(); Thread::create(system.colorburst() * 6.0, {&CPU::main, this}); r.pc.byte(0) = read(r.mpr[reset.vector >> 13], n13(reset.vector + 0)); r.pc.byte(1) = read(r.mpr[reset.vector >> 13], n13(reset.vector + 1)); ram.fill(0x00); irq2 = {}; irq1 = {}; tiq = {}; timer = {}; io = {}; } auto CPU::lastCycle() -> void { irq2.pending = 0 & !irq2.disable & !r.p.i; irq1.pending = vdp.irqLine() & !irq1.disable & !r.p.i; tiq.pending = timer.irqLine() & !tiq.disable & !r.p.i; } } ares-126/ares/pce/cpu/cpu.hpp000066400000000000000000000033071415063341600161140ustar00rootroot00000000000000//Hudson Soft HuC6280 struct CPU : HuC6280, Thread { Node::Object node; Memory::Writable ram; //PC Engine = 8KB, SuperGrafx = 32KB struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power() -> void; auto lastCycle() -> void override; //io.cpp auto read(n8 bank, n13 address) -> n8 override; auto write(n8 bank, n13 address, n8 data) -> void override; auto store(n2 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; private: struct IRQ2 { //CD-ROM, BRK instruction static constexpr u16 vector = 0xfff6; n1 disable; n1 pending; } irq2; struct IRQ1 { //VDC static constexpr u16 vector = 0xfff8; n1 disable; n1 pending; } irq1; struct TIQ { //Timer static constexpr u16 vector = 0xfffa; n1 disable; n1 pending; } tiq; struct NMI { //not exposed by the PC Engine static constexpr u16 vector = 0xfffc; } nmi; struct Reset { static constexpr u16 vector = 0xfffe; } reset; struct Timer { auto irqLine() const -> bool { return line; } n1 line; n1 enable; n7 reload; n7 value; i32 counter; } timer; struct IO { n8 buffer; //latches only on $ff:0800-17ff writes } io; }; extern CPU cpu; ares-126/ares/pce/cpu/debugger.cpp000066400000000000000000000021631415063341600171030ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return cpu.ram.write(address, data); }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled()) { auto bank = cpu.r.mpr[cpu.r.pc >> 13]; auto address = (n13)cpu.r.pc; if(tracer.instruction->address(bank << 16 | address)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext(), { "V:", pad(vdp.io.vcounter, 3L), " ", "H:", pad(vdp.io.hcounter, 4L) }); } } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/pce/cpu/io.cpp000066400000000000000000000115451415063341600157320ustar00rootroot00000000000000auto CPU::read(n8 bank, n13 address) -> n8 { n8 data = 0xff; //$00-7f HuCard or PC Engine Duo //$80-87 CD WRAM //$f7 CD BRAM if(PCD::Present()) data = pcd.read(bank, address, data); if(cartridge.node) data = cartridge.read(bank, address, data); //$f8-fb RAM if(bank >= 0xf8 && bank <= 0xfb) { return ram.read(bank.bit(0,1) << 13 | address); } //$ff Hardware if(bank == 0xff) { //$0000-03ff VDC or VPC if((address & 0x1c00) == 0x0000) { if(Model::SuperGrafx() == 0) return vdp.vdc0.read(address); if(Model::SuperGrafx() == 1) return vdp.vpc.read(address); } //$0400-07ff VCE if((address & 0x1c00) == 0x0400) { return vdp.vce.read(address); } //$0800-0bff PSG if((address & 0x1c00) == 0x0800) { if(HuC6280::blockMove) return 0x00; return io.buffer; } //$0c00-0fff Timer if((address & 0x1c00) == 0x0c00) { if(HuC6280::blockMove) return 0x00; data.bit(0,6) = timer.value; data.bit(7) = io.buffer.bit(7); return data; } //$1000-13ff I/O if((address & 0x1c00) == 0x1000) { if(HuC6280::blockMove) return 0x00; //note 1: Turbografx-16 games check this bit for region protection. //yet PC Engine games do not. since we cannot tell the games apart, //it's more compatible to always identify as a Turbografx-16 system. //note 2: we state that the CD-ROM drive is present. //this is so games can use its backup RAM for save data. data.bit(0,3) = controllerPort.read(); data.bit(4) = 1; data.bit(5) = 1; data.bit(6) = 0; //device (0 = Turbografx-16; 1 = PC Engine) data.bit(7) = PCD::Present() == 0; //add-on (0 = CD-ROM; 1 = nothing) return data; } //$1400-17ff IRQ if((address & 0x1c00) == 0x1400) { if(HuC6280::blockMove) return 0x00; if(address.bit(0,1) == 0) { return io.buffer; } if(address.bit(0,1) == 1) { return io.buffer; } if(address.bit(0,1) == 2) { data.bit(0) = irq2.disable; data.bit(1) = irq1.disable; data.bit(2) = tiq.disable; data.bit(3,7) = io.buffer.bit(3,7); return data; } if(address.bit(0,1) == 3) { data.bit(0) = 0; //IRQ2 line data.bit(1) = vdp.irqLine(); data.bit(2) = timer.irqLine(); data.bit(3,7) = io.buffer.bit(3,7); return data; } } //$1800-1bff CD I/O if((address & 0x1c00) == 0x1800) { if(PCD::Present()) return pcd.readIO(address, data); return data; } //$1c00-1fff unmapped if((address & 0x1c00) == 0x1c00) { return data; } } return data; } auto CPU::write(n8 bank, n13 address, n8 data) -> void { //$00-7f HuCard or PC Engine Duo //$80-87 CD WRAM //$f7 CD BRAM if(PCD::Present()) pcd.write(bank, address, data); if(cartridge.node) cartridge.write(bank, address, data); //$f8-fb RAM if(bank >= 0xf8 && bank <= 0xfb) { ram.write(bank.bit(0,1) << 13 | address, data); return; } //$ff Hardware if(bank == 0xff) { //$0000-03ff VDC or VPC if((address & 0x1c00) == 0x0000) { if(Model::SuperGrafx() == 0) return vdp.vdc0.write(address, data); if(Model::SuperGrafx() == 1) return vdp.vpc.write(address, data); } //$0400-07ff VCE if((address & 0x1c00) == 0x0400) { return vdp.vce.write(address, data); } //$0800-0bff PSG if((address & 0x1c00) == 0x0800) { synchronize(psg); io.buffer = data; return psg.write(address, data); } //$0c00-0fff Timer if((address & 0x1c00) == 0x0c00) { io.buffer = data; if(!address.bit(0)) { timer.reload = data.bit(0,6); } else { if(!timer.enable && data.bit(0)) { timer.value = timer.reload; timer.counter = 1024 * 3; } timer.enable = data.bit(0); } return; } //$1000-13ff I/O if((address & 0x1c00) == 0x1000) { io.buffer = data; controllerPort.write(data.bit(0,1)); return; } //$1400-17ff IRQ if((address & 0x1c00) == 0x1400) { io.buffer = data; if(address.bit(0,1) == 2) { irq2.disable = data.bit(0); irq1.disable = data.bit(1); tiq.disable = data.bit(2); return; } if(address.bit(0,1) == 3) { timer.line = 0; return; } } //$1800-1bff CD I/O if((address & 0x1c00) == 0x1800) { if(PCD::Present()) return pcd.writeIO(address, data); return; } //$1c00-1fff unmapped if((address & 0x1c00) == 0x1c00) { return; } } return; } //ST0, ST1, ST2 auto CPU::store(n2 address, n8 data) -> void { if(address) address++; //0,1,2 => 0,2,3 if(Model::SuperGrafx() == 0) vdp.vdc0.write(address, data); if(Model::SuperGrafx() == 1) vdp.vpc.store(address, data); } ares-126/ares/pce/cpu/irq.cpp000066400000000000000000000005011415063341600161040ustar00rootroot00000000000000auto CPU::IRQ::poll() -> void { pending = 0; if(cpu.r.p.i) return; if(!disable.irq2 && pcd.irqLine()) { pending = Vector::IRQ2; } if(!disable.irq1 && (vdp.vdc0.irqLine() | vdp.vdc1.irqLine())) { pending = Vector::IRQ1; } if(!disable.tiq && cpu.timer.irqLine()) { pending = Vector::TIQ; } } ares-126/ares/pce/cpu/serialization.cpp000066400000000000000000000005071415063341600201740ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { HuC6280::serialize(s); Thread::serialize(s); s(ram); s(irq2.disable); s(irq2.pending); s(irq1.disable); s(irq1.pending); s(tiq.disable); s(tiq.pending); s(timer.line); s(timer.enable); s(timer.reload); s(timer.value); s(timer.counter); s(io.buffer); } ares-126/ares/pce/pcd/000077500000000000000000000000001415063341600145705ustar00rootroot00000000000000ares-126/ares/pce/pcd/adpcm.cpp000066400000000000000000000054251415063341600163660ustar00rootroot00000000000000auto PCD::ADPCM::load(Node::Object parent) -> void { stream = parent->append("ADPCM"); stream->setChannels(1); stream->setFrequency(32000); memory.allocate(64_KiB); } auto PCD::ADPCM::unload(Node::Object parent) -> void { parent->remove(stream); stream.reset(); memory.reset(); } auto PCD::ADPCM::clock() -> void { if(write.pending && !--write.pending) { irq.halfReached.line = length < 0x8000; if(!io.lengthLatch && length < 0xffff) length++; memory.write(write.address++, write.data); } if(dmaActive && !write.pending) { if(auto data = scsi->clockSample()) { write.pending = WriteLatency; write.data = data(); } } if(read.pending && !--read.pending) { read.data = memory.read(read.address++); irq.halfReached.line = length < 0x8000; if(!io.lengthLatch) { if(length) { length--; } else { irq.halfReached.lower(); irq.endReached.raise(); if(io.noRepeat) io.playing = 0; } } } } auto PCD::ADPCM::clockSample() -> void { stream->frame((io.playing ? msm5205.sample() : (i12)0) * fader->adpcm() / 2048.0); if(++period < divider) return; period = 0; if(io.playing) { if(!sample.nibble++) { sample.data = memory.read(read.address++); if(!io.lengthLatch && length) length--; } msm5205.setData(sample.data >> 4); msm5205.clock(); sample.data <<= 4; irq.halfReached.line = length < 0x8000; if(!io.lengthLatch && !length) { irq.halfReached.lower(); irq.endReached.raise(); if(io.noRepeat) io.playing = 0; } } } auto PCD::ADPCM::control(n8 data) -> void { io.writeOffset = data.bit(0); if(!io.writeLatch && data.bit(1)) { write.address = latch - !io.writeOffset; } io.writeLatch = data.bit(1); io.readOffset = data.bit(2); if(!io.readLatch && data.bit(3)) { read.address = latch - !io.readOffset; } io.readLatch = data.bit(3); io.lengthLatch = data.bit(4); if(io.lengthLatch) { irq.endReached.lower(); length = latch; } if(io.playing && !data.bit(5)) { io.playing = 0; } if(!io.playing && data.bit(5)) { irq.halfReached.lower(); io.playing = 1; sample = {}; } io.noRepeat = data.bit(6); if(irq.endReached.line && io.noRepeat) { io.playing = 0; } io.reset = data.bit(7); if(io.reset) { irq.halfReached.lower(); irq.endReached.lower(); io = {}; read = {}; write = {}; sample = {}; latch = 0; length = 0; } } auto PCD::ADPCM::power() -> void { msm5205.power(); msm5205.setReset(0); msm5205.setWidth(1); //4-bit samples msm5205.setScaler(2); //1/48th rate irq = {}; io = {}; read = {}; write = {}; sample = {}; dmaActive = 0; divider = 1; period = 0; latch = 0; length = 0; } ares-126/ares/pce/pcd/cdda.cpp000066400000000000000000000023351415063341600161720ustar00rootroot00000000000000auto PCD::CDDA::load(Node::Object parent) -> void { stream = parent->append("CD-DA"); stream->setChannels(2); stream->setFrequency(44100); } auto PCD::CDDA::unload(Node::Object parent) -> void { parent->remove(stream); stream.reset(); } auto PCD::CDDA::clockSector() -> void { if(!drive->inCDDA()) return; if(drive->paused()) return; if(drive->stopped()) return; if(!drive->read()) return; sample.offset = 0; if(drive->inactive()) { if(playMode == PlayMode::Loop) { drive->seekPlay(); } if(playMode == PlayMode::IRQ) { drive->setStopped(); scsi->irq.completed.raise(); //unverified } if(playMode == PlayMode::Once) { drive->setStopped(); } } } auto PCD::CDDA::clockSample() -> void { sample.left = 0; sample.right = 0; if(drive->playing()) { sample.left |= drive->sector[sample.offset++] << 0; sample.left |= drive->sector[sample.offset++] << 8; sample.right |= drive->sector[sample.offset++] << 0; sample.right |= drive->sector[sample.offset++] << 8; } stream->frame( sample.left * fader->cdda() / 32768.0, sample.right * fader->cdda() / 32768.0 ); } auto PCD::CDDA::power() -> void { sample = {}; } ares-126/ares/pce/pcd/debugger.cpp000066400000000000000000000024431415063341600170630ustar00rootroot00000000000000auto PCD::Debugger::load(Node::Object parent) -> void { memory.wram = parent->append("CD WRAM"); memory.wram->setSize(64_KiB); memory.wram->setRead([&](u32 address) -> u8 { return pcd.wram.read(address); }); memory.wram->setWrite([&](u32 address, u8 data) -> void { return pcd.wram.write(address, data); }); memory.bram = parent->append("CD BRAM"); memory.bram->setSize(2_KiB); memory.bram->setRead([&](u32 address) -> u8 { return pcd.bram.read(address); }); memory.bram->setWrite([&](u32 address, u8 data) -> void { return pcd.bram.write(address, data); }); if(Model::PCEngineDuo()) { memory.sram = parent->append("CD SRAM"); memory.sram->setSize(192_KiB); memory.sram->setRead([&](u32 address) -> u8 { return pcd.sram.read(address); }); memory.sram->setWrite([&](u32 address, u8 data) -> void { return pcd.sram.write(address, data); }); } memory.adpcm = parent->append("CD ADPCM"); memory.adpcm->setSize(64_KiB); memory.adpcm->setRead([&](u32 address) -> u8 { return pcd.adpcm.memory.read(address); }); memory.adpcm->setWrite([&](u32 address, u8 data) -> void { return pcd.adpcm.memory.write(address, data); }); } ares-126/ares/pce/pcd/drive.cpp000066400000000000000000000021651415063341600164110ustar00rootroot00000000000000//computes the number of 75hz intervals required to seek to a given sector. //the logarithm is based on observed results from a TurboDuo, and errs on seeking too fast. auto PCD::Drive::distance() -> u32 { auto distance = abs(lba - start); return 17 + pow(sqrt(distance), 0.99) * 0.3; } auto PCD::Drive::seekRead() -> void { mode = Mode::Seeking; seek = Mode::Reading; latency = distance(); } auto PCD::Drive::seekPlay() -> void { mode = Mode::Seeking; seek = Mode::Playing; latency = distance(); } auto PCD::Drive::seekPause() -> void { mode = Mode::Seeking; seek = Mode::Paused; latency = distance(); } auto PCD::Drive::read() -> bool { if(seeking()) { if(latency && --latency) return false; mode = seek; lba = start; } //print("* ", reading() ? "data" : "cdda", " read ", lba, " to ", end - 1, "\n"); pcd.fd->seek(2448 * (abs(session->leadIn.lba) + lba)); pcd.fd->read({sector, 2448}); if(++lba == end) setInactive(); return true; } auto PCD::Drive::power() -> void { mode = Mode::Inactive; seek = Mode::Inactive; latency = 0; lba = 0; start = 0; end = 0; } ares-126/ares/pce/pcd/fader.cpp000066400000000000000000000003251415063341600163550ustar00rootroot00000000000000auto PCD::Fader::clock() -> void { if(mode != Mode::Idle) { volume -= step; if(volume <= 0.0) volume = 0.0; } } auto PCD::Fader::power() -> void { mode = Mode::Idle; step = 0.0; volume = 1.0; } ares-126/ares/pce/pcd/io.cpp000066400000000000000000000127631415063341600157140ustar00rootroot00000000000000auto PCD::read(n8 bank, n13 address, n8 data) -> n8 { if(bank >= 0x00 && bank <= 0x3f && Model::PCEngineDuo()) { return bios.read(address); } if(bank >= 0x68 && bank <= 0x78 && Model::PCEngineDuo() && sramEnable()) { return sram.read(bank - 0x68 << 13 | address); } if(bank >= 0x80 && bank <= 0x87) { return wram.read(bank - 0x80 << 13 | address); } if(bank == 0xf7 && bramEnable()) { return bram.read(address); } return data; } auto PCD::write(n8 bank, n13 address, n8 data) -> void { if(bank >= 0x68 && bank <= 0x7f && Model::PCEngineDuo() && sramEnable()) { return sram.write(bank - 0x68 << 13 | address, data); } if(bank >= 0x80 && bank <= 0x87) { return wram.write(bank - 0x80 << 13 | address, data); } if(bank == 0xf7 && bramEnable()) { return bram.write(address, data); } } auto PCD::readIO(n13 address, n8 data) -> n8 { if(address == 0x18c0 && Model::PCEngineDuo()) return 0x00; if(address == 0x18c1 && Model::PCEngineDuo()) return 0xaa; if(address == 0x18c2 && Model::PCEngineDuo()) return 0x55; if(address == 0x18c3 && Model::PCEngineDuo()) return sram.size() / 64_KiB; if(address >= 0x18c4) return data; scsi.update(); address = (n4)address; data = io.mdr[address]; if(address == 0x0) { data.bit(3) = scsi.pin.input; data.bit(4) = scsi.pin.control; data.bit(5) = scsi.pin.message; data.bit(6) = scsi.pin.request; data.bit(7) = scsi.pin.busy; scsi.irq.ready.lower(); scsi.irq.completed.lower(); } if(address == 0x1) { data = scsi.bus.data; } if(address == 0x2) { data.bit(2) = adpcm.irq.halfReached.enable; data.bit(3) = adpcm.irq.endReached.enable; data.bit(4) = 0; //??? data.bit(5) = scsi.irq.completed.enable; data.bit(6) = scsi.irq.ready.enable; data.bit(7) = scsi.pin.acknowledge; } if(address == 0x3) { data.bit(1) = io.cddaSampleSelect; data.bit(2) = adpcm.irq.halfReached.line; data.bit(3) = adpcm.irq.endReached.line; data.bit(4) = 0; //??? data.bit(5) = scsi.irq.completed.line; data.bit(6) = scsi.irq.ready.line; data.bit(7) = 0; //??? io.bramEnable = 0; io.cddaSampleSelect = !io.cddaSampleSelect; } if(address == 0x4) { data.bit(1) = scsi.pin.reset; } if(address == 0x5) { auto sample = !io.cddaSampleSelect ? cdda.sample.left : cdda.sample.right; data = sample.byte(0); } if(address == 0x6) { auto sample = !io.cddaSampleSelect ? cdda.sample.left : cdda.sample.right; data = sample.byte(1); } if(address == 0x7) { data.bit(7) = io.bramEnable; } if(address == 0x8) { data = scsi.readData(); } if(address == 0x9) { //write-only } if(address == 0xa) { data = adpcm.read.data; adpcm.read.pending = ADPCM::ReadLatency; } if(address == 0xb) { data.bit(0,1) = adpcm.dmaActive; } if(address == 0xc) { data.bit(0) = adpcm.irq.endReached.line; data.bit(2) = adpcm.write.pending > 0; data.bit(3) = adpcm.io.playing; data.bit(7) = adpcm.read.pending > 0; } if(address == 0xd) { data.bit(0) = adpcm.io.writeOffset; data.bit(1) = adpcm.io.writeLatch; data.bit(2) = adpcm.io.readOffset; data.bit(3) = adpcm.io.readLatch; data.bit(4) = adpcm.io.lengthLatch; data.bit(5) = adpcm.io.playing; data.bit(6) = adpcm.io.noRepeat; data.bit(7) = adpcm.io.reset; } if(address == 0xe) { //write-only } if(address == 0xf) { //write-only } //if(address != 0x0) //print("* rd ff:180", hex(address, 1L), " = ", hex(data, 2L), " ", binary(data, 8L), "\n"); return data; } auto PCD::writeIO(n13 address, n8 data) -> void { if(address == 0x18c0) io.sramEnable = io.sramEnable << 8 | data; if(address >= 0x18c4) return; address = (n4)address; //print("* wr ff:180", hex(address, 1L), " = ", hex(data, 2L), "\n"); if(address == 0x0) { scsi.pin.select = 1; scsi.update(); scsi.pin.select = 0; scsi.update(); } if(address == 0x1) { scsi.bus.data = data; scsi.update(); } if(address == 0x2) { adpcm.irq.halfReached.enable = data.bit(2); adpcm.irq.endReached.enable = data.bit(3); scsi.irq.completed.enable = data.bit(5); scsi.irq.ready.enable = data.bit(6); scsi.pin.acknowledge = data.bit(7); scsi.update(); } if(address == 0x4) { scsi.pin.reset = data.bit(1); scsi.update(); } if(address == 0x5) { //read-only } if(address == 0x6) { //read-only } if(address == 0x7) { if(data.bit(7)) io.bramEnable = 1; } if(address == 0x8) { adpcm.latch.byte(0) = data; if(adpcm.io.lengthLatch) adpcm.length = adpcm.latch; } if(address == 0x9) { adpcm.latch.byte(1) = data; if(adpcm.io.lengthLatch) adpcm.length = adpcm.latch; } if(address == 0xa) { adpcm.write.pending = ADPCM::WriteLatency; adpcm.write.data = data; } if(address == 0xb) { adpcm.dmaActive = data.bit(0,1); } if(address == 0xc) { //read-only } if(address == 0xd) { adpcm.control(data); } if(address == 0xe) { adpcm.divider = 0x10 - data.bit(0,3); adpcm.period = 0; } if(address == 0xf && io.mdr[address] != data) { if(data.bit(1) == 0) fader.mode = Fader::Mode::CDDA; if(data.bit(1) == 1) fader.mode = Fader::Mode::ADPCM; if(data.bit(2) == 0) fader.step = 1.0 / 6000; //6.0 second fade-out if(data.bit(2) == 1) fader.step = 1.0 / 2500; //2.5 second fade-out if(!data.bit(3)) { fader.mode = Fader::Mode::Idle; fader.volume = 1.0; } } io.mdr[address] = data; } ares-126/ares/pce/pcd/pcd.cpp000066400000000000000000000065021415063341600160450ustar00rootroot00000000000000#include namespace ares::PCEngine { PCD pcd; #include "io.cpp" #include "drive.cpp" #include "scsi.cpp" #include "cdda.cpp" #include "adpcm.cpp" #include "fader.cpp" #include "debugger.cpp" #include "serialization.cpp" auto PCD::load(Node::Object parent) -> void { node = parent->append("PC Engine CD"); tray = node->append("Disc Tray"); tray->setFamily("PC Engine CD"); tray->setType("Compact Disc"); tray->setHotSwappable(true); tray->setAllocate([&](auto name) { return allocate(tray); }); tray->setConnect([&] { return connect(); }); tray->setDisconnect([&] { return disconnect(); }); //subclass simulation drive.session = session; scsi.session = session; scsi.drive = drive; scsi.cdda = cdda; scsi.adpcm = adpcm; cdda.drive = drive; cdda.scsi = scsi; cdda.fader = fader; adpcm.scsi = scsi; adpcm.fader = fader; wram.allocate(64_KiB); bram.allocate( 2_KiB); if(Model::PCEngineDuo()) { bios.allocate(256_KiB); sram.allocate(192_KiB); } cdda.load(node); adpcm.load(node); debugger.load(node); } auto PCD::unload() -> void { if(!node) return; disconnect(); debugger = {}; wram.reset(); bram.reset(); if(Model::PCEngineDuo()) { bios.reset(); sram.reset(); } cdda.unload(node); adpcm.unload(node); tray.reset(); node.reset(); } auto PCD::allocate(Node::Port parent) -> Node::Peripheral { return disc = parent->append("PC Engine CD Disc"); } auto PCD::connect() -> void { if(!disc->setPak(pak = platform->pak(disc))) return; information = {}; information.title = pak->attribute("title"); fd = pak->read("cd.rom"); if(!fd) return disconnect(); //read TOC (table of contents) from disc lead-in u32 sectors = fd->size() / 2448; vector subchannel; subchannel.resize(sectors * 96); for(u32 sector : range(sectors)) { fd->seek(sector * 2448 + 2352); fd->read({subchannel.data() + sector * 96, 96}); } session.decode(subchannel, 96); if(auto fp = system.pak->read("backup.ram")) { bram.load(fp); } } auto PCD::disconnect() -> void { if(!disc) return; save(); fd.reset(); pak.reset(); disc.reset(); } auto PCD::save() -> void { if(auto fp = system.pak->write("backup.ram")) { bram.save(fp); } } auto PCD::main() -> void { if(++clock.drive == 122892) { //75hz clock.drive = 0; scsi.clockSector(); cdda.clockSector(); } if(++clock.cdda == 209) { //44100hz clock.cdda = 0; cdda.clockSample(); } if(++clock.adpcm == 288) { //32000hz clock.adpcm = 0; adpcm.clockSample(); } if(++clock.fader == 9217) { //1000hz clock.fader = 0; fader.clock(); } scsi.clock(); adpcm.clock(); step(1); } auto PCD::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto PCD::irqLine() const -> bool { if(scsi.irq.ready.poll()) return 1; if(scsi.irq.completed.poll()) return 1; if(adpcm.irq.halfReached.poll()) return 1; if(adpcm.irq.endReached.poll()) return 1; return 0; } auto PCD::power() -> void { Thread::create(9'216'900, {&PCD::main, this}); drive.power(); scsi.power(); cdda.power(); adpcm.power(); fader.power(); clock = {}; io = {}; if(Model::PCEngineDuo()) { if(auto fp = system.pak->read("bios.rom")) { bios.load(fp); } } } } ares-126/ares/pce/pcd/pcd.hpp000066400000000000000000000177021415063341600160560ustar00rootroot00000000000000//PC Engine CD-ROM struct PCD : Thread { Node::Object node; Node::Port tray; Node::Peripheral disc; VFS::Pak pak; VFS::File fd; CD::Session session; Memory::Writable wram; // 64KB Memory::Writable bram; // 2KB //PC Engine Duo only: Memory::Readable bios; //256KB Memory::Writable sram; //192KB struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory wram; Node::Debugger::Memory bram; Node::Debugger::Memory sram; Node::Debugger::Memory adpcm; } memory; } debugger; static auto Present() -> bool { return true; } auto title() const -> string { return information.title; } auto sramEnable() const -> bool { return io.sramEnable == 0xaa55; } auto bramEnable() const -> bool { return io.bramEnable; } //pcd.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto irqLine() const -> bool; auto power() -> void; //io.cpp auto read(n8 bank, n13 address, n8 data) -> n8; auto write(n8 bank, n13 address, n8 data) -> void; auto readIO(n13 address, n8 data) -> n8; auto writeIO(n13 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Interrupt { auto poll() const -> bool { return line & enable; } auto raise() -> void { line = 1; } auto lower() -> void { line = 0; } n1 enable; n1 line; }; struct Buffer { auto reset() -> void { reads = 0; writes = 0; } auto end() const -> bool { return reads >= writes; } auto read() -> n8 { return data[reads++]; } auto write(n8 value) -> void { data[writes++] = value; } n8 data[4_KiB]; n12 reads; n12 writes; }; struct Drive; struct SCSI; struct CDDA; struct ADPCM; struct Fader; struct Drive { maybe session; enum class Mode : u32 { Inactive, //drive is not running Seeking, //seeking Reading, //reading CD data Playing, //playing CDDA audio Paused, //paused CDDA audio Stopped, //stopped CDDA audio }; auto inactive() const -> bool { return mode == Mode::Inactive; } auto seeking() const -> bool { return mode == Mode::Seeking; } auto reading() const -> bool { return mode == Mode::Reading; } auto playing() const -> bool { return mode == Mode::Playing; } auto paused() const -> bool { return mode == Mode::Paused; } auto stopped() const -> bool { return mode == Mode::Stopped; } auto setInactive() -> void { mode = Mode::Inactive; } auto setReading() -> void { mode = Mode::Reading; } auto setPlaying() -> void { mode = Mode::Playing; } auto setPaused() -> void { mode = Mode::Paused; } auto setStopped() -> void { mode = Mode::Stopped; } auto inData() const -> bool { return reading() || (seeking() && seek == Mode::Reading); } auto inCDDA() const -> bool { return playing() || (seeking() && seek == Mode::Playing) || paused() || (seeking() && seek == Mode::Paused) || stopped(); } //drive.cpp auto distance() -> u32; auto seekRead() -> void; auto seekPlay() -> void; auto seekPause() -> void; auto read() -> bool; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; Mode mode = Mode::Inactive; //current drive mode Mode seek = Mode::Inactive; //which mode to enter after seeking is completed u32 latency = 0; //how many 75hz cycles are remaining in seek mode s32 lba = 0; //wnere the laser is currently at s32 start = 0; //where the laser should start reading s32 end = 0; //where the laser should stop reading n8 sector[2448]; //contains the most recently read disc sector } drive; struct SCSI { maybe session; maybe drive; maybe cdda; maybe adpcm; enum class Status : u32 { OK, CheckCondition }; //scsi.cpp auto clock() -> void; auto clockSector() -> void; auto clockSample() -> maybe; auto readData() -> n8; auto update() -> void; auto messageInput() -> void; auto messageOutput() -> void; auto dataInput() -> void; auto dataOutput() -> void; auto reply(Status) -> void; auto commandTestUnitReady() -> void; auto commandReadData() -> void; auto commandAudioSetStartPosition() -> void; auto commandAudioSetStopPosition() -> void; auto commandAudioPause() -> void; auto commandReadSubchannel() -> void; auto commandGetDirectoryInformation() -> void; auto commandInvalid() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IRQ { Interrupt ready; Interrupt completed; } irq; struct Pin { n1 reset; //RST n1 acknowledge; //ACK n1 select; //SEL (1 = bus select requested) n1 input; //I/O (1 = input, 0 = output) n1 control; //C/D (1 = control, 0 = data) n1 message; //MSG n1 request; //REQ n1 busy; //BSY } pin; struct Bus { n1 select; //1 = bus is currently selected n8 data; //D0-D7 } bus; n8 acknowledging; n1 dataTransferCompleted; n1 messageAfterStatus; n1 messageSent; n1 statusSent; Buffer request; Buffer response; } scsi; struct CDDA { maybe drive; maybe scsi; maybe fader; Node::Audio::Stream stream; //cdda.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto clockSector() -> void; auto clockSample() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; enum class PlayMode : u32 { Loop, IRQ, Once } playMode = PlayMode::Loop; struct Sample { i16 left; i16 right; n12 offset; } sample; } cdda; struct ADPCM { maybe scsi; maybe fader; MSM5205 msm5205; Node::Audio::Stream stream; Memory::Writable memory; //64KB static constexpr u32 ReadLatency = 20; //estimation static constexpr u32 WriteLatency = 20; //estimation //adpcm.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto clock() -> void; auto clockSample() -> void; auto control(n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IRQ { Interrupt halfReached; Interrupt endReached; } irq; struct IO { n1 writeOffset; n1 writeLatch; n1 readLatch; n1 readOffset; n1 lengthLatch; n1 playing; n1 noRepeat; //0 = do not stop playing when length reaches zero n1 reset; } io; struct Bus { n16 address; n8 data; n8 pending; } read, write; struct Sample { n8 data; n1 nibble; } sample; n2 dmaActive; n8 divider; //0x01-0x10 n8 period; //count-up for divider n16 latch; n16 length; } adpcm; struct Fader { enum class Mode : u32 { Idle, CDDA, ADPCM }; auto cdda() const -> f64 { return mode == Mode::CDDA ? volume : 1.0; } auto adpcm() const -> f64 { return mode == Mode::ADPCM ? volume : 1.0; } //fader.cpp auto clock() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; Mode mode; f64 step; f64 volume; } fader; struct Clock { n32 drive; n32 cdda; n32 adpcm; n32 fader; } clock; struct IO { n8 mdr[16]; n1 cddaSampleSelect; n16 sramEnable; n1 bramEnable; } io; //unserialized: struct Information { string title; } information; }; extern PCD pcd; ares-126/ares/pce/pcd/scsi.cpp000066400000000000000000000244421415063341600162430ustar00rootroot00000000000000auto PCD::SCSI::clock() -> void { if(acknowledging && !--acknowledging) { pin.acknowledge = 0; update(); if(pin.control) adpcm->dmaActive = 0; } } auto PCD::SCSI::clockSector() -> void { if(!drive->inData()) return; if(!response.end()) return; if(!drive->read()) return; response.reset(); for(u32 offset : range(2048)) { response.write(drive->sector[16 + offset]); } pin.control = 0; pin.input = 1; dataTransferCompleted = drive->inactive(); } auto PCD::SCSI::clockSample() -> maybe { if(pin.request && !pin.acknowledge && !pin.control && pin.input) { return readData(); } return {}; } auto PCD::SCSI::readData() -> n8 { n8 result = bus.data; if(pin.request && !pin.acknowledge && !pin.control && pin.input) { pin.acknowledge = 1; update(); acknowledging = 20; } return result; } auto PCD::SCSI::update() -> void { if(pin.reset) { drive->setInactive(); irq.ready.lower(); irq.completed.lower(); pin.busy = 0; pin.request = 0; pin.message = 0; pin.control = 0; pin.input = 0; pin.select = 0; bus.select = 0; return; } //release the bus when no longer requesting selection if(!pin.busy && !pin.select && bus.select) { bus.select = 0; pin.request = 0; pin.message = 0; pin.control = 0; pin.input = 0; irq.completed.lower(); } //acquire the bus when requesting selection if(!bus.select && pin.select) { bus.select = 1; pin.busy = 1; pin.request = 1; pin.message = 0; pin.control = 1; pin.input = 0; } if(pin.busy) { if(pin.message) { if(pin.input) { messageInput(); } else { messageOutput(); } } else { if(pin.input) { dataInput(); } else { dataOutput(); } } } } //SCSI -> CPU auto PCD::SCSI::messageInput() -> void { if(pin.request && pin.acknowledge) { pin.request = 0; messageSent = 1; } if(!pin.request && !pin.acknowledge && messageSent) { pin.busy = 0; messageSent = 0; } } //CPU -> SCSI auto PCD::SCSI::messageOutput() -> void { if(pin.request && pin.acknowledge) { pin.request = 0; } } //SCSI -> CPU auto PCD::SCSI::dataInput() -> void { if(pin.control) { if(pin.request && pin.acknowledge) { pin.request = 0; statusSent = 1; } if(!pin.request && !pin.acknowledge && statusSent) { statusSent = 0; if(messageAfterStatus) { messageAfterStatus = 0; pin.request = 1; pin.message = 1; bus.data = 0x00; } } } else { if(pin.request && pin.acknowledge) { pin.request = 0; } if(!pin.request && !pin.acknowledge) { if(!response.end()) { bus.data = response.read(); pin.request = 1; } else { irq.ready.lower(); if(dataTransferCompleted) { dataTransferCompleted = 0; irq.completed.raise(); reply(Status::OK); } } } } } //CPU -> SCSI auto PCD::SCSI::dataOutput() -> void { if(pin.request && pin.acknowledge) { pin.request = 0; request.write(bus.data); } if(!pin.request && !pin.acknowledge && request.writes) { auto command = request.data[0]; auto writes = request.writes; bool executed = 0; switch(command) { case 0x00: if(writes >= 6) { executed = 1; commandTestUnitReady(); } break; case 0x08: if(writes >= 6) { executed = 1; commandReadData(); } break; case 0xd8: if(writes >= 10) { executed = 1; commandAudioSetStartPosition(); } break; case 0xd9: if(writes >= 10) { executed = 1; commandAudioSetStopPosition(); } break; case 0xda: if(writes >= 10) { executed = 1; commandAudioPause(); } break; case 0xdd: if(writes >= 10) { executed = 1; commandReadSubchannel(); } break; case 0xde: if(writes >= 10) { executed = 1; commandGetDirectoryInformation(); } break; default: { executed = 1; commandInvalid(); } break; } if(executed == 0) { pin.request = 1; } else { //print("* request "); //for(uint index : range(request.writes)) print(hex(request.data[index], 2L), " "); //print("\n"); request.reset(); } } } auto PCD::SCSI::reply(Status status) -> void { pin.request = 1; pin.message = 0; pin.control = 1; pin.input = 1; if(status == Status::OK) bus.data = 0x00; if(status == Status::CheckCondition) bus.data = 0x01; messageAfterStatus = 1; messageSent = 0; statusSent = 0; } //0x00 auto PCD::SCSI::commandTestUnitReady() -> void { reply(Status::OK); } //0x08 auto PCD::SCSI::commandReadData() -> void { if(!pcd.fd) return reply(Status::CheckCondition); if(!request.data[4]) return reply(Status::OK); pcd.drive.start = request.data[1] << 16 | request.data[2] << 8 | request.data[3] << 0; pcd.drive.end = pcd.drive.start + request.data[4]; drive->seekRead(); irq.ready.raise(); } //0xd8 auto PCD::SCSI::commandAudioSetStartPosition() -> void { if(!pcd.fd) return reply(Status::CheckCondition); maybe lba; if(request.data[9].bit(6,7) == 0) { lba = request.data[3] << 16 | request.data[4] << 8 | request.data[5] << 0; } if(request.data[9].bit(6,7) == 1) { auto m = CD::BCD::decode(request.data[2]); auto s = CD::BCD::decode(request.data[3]); auto f = CD::BCD::decode(request.data[4]); lba = CD::MSF(m, s, f).toLBA(); } if(request.data[9].bit(6,7) == 2) { auto trackID = CD::BCD::decode(request.data[2]); if(auto track = session->track(trackID)) { if(auto index = track->index(1)) { lba = index->lba; } } } if(!lba) return reply(Status::CheckCondition); pcd.drive.start = *lba; pcd.drive.end = session->leadOut.lba; if(auto trackID = session->inTrack(*lba)) { if(auto track = session->track(*trackID)) { if(auto index = track->index(track->lastIndex)) { pcd.drive.end = index->end; } } } if(request.data[1].bit(0) == 0) { drive->seekPause(); } if(request.data[1].bit(0) == 1) { drive->seekPlay(); } irq.completed.raise(); reply(Status::OK); } //0xd9 auto PCD::SCSI::commandAudioSetStopPosition() -> void { if(!pcd.fd) return reply(Status::CheckCondition); maybe lba; if(request.data[9].bit(6,7) == 0) { lba = request.data[3] << 16 | request.data[4] << 8 | request.data[5] << 0; } if(request.data[9].bit(6,7) == 1) { auto m = CD::BCD::decode(request.data[2]); auto s = CD::BCD::decode(request.data[3]); auto f = CD::BCD::decode(request.data[4]); lba = CD::MSF(m, s, f).toLBA(); } if(request.data[9].bit(6,7) == 2) { auto trackID = CD::BCD::decode(request.data[2]); if(auto track = session->track(trackID)) { if(auto index = track->index(1)) { lba = index->lba; } } } if(!lba) return reply(Status::CheckCondition); pcd.drive.end = *lba; if(request.data[1].bit(0,1) == 0) { drive->setStopped(); } if(request.data[1].bit(0,1) == 1) { drive->seekPlay(); cdda->playMode = PCD::CDDA::PlayMode::Loop; } if(request.data[1].bit(0,1) == 2) { drive->seekPlay(); cdda->playMode = PCD::CDDA::PlayMode::IRQ; } if(request.data[1].bit(0,1) == 3) { drive->seekPlay(); cdda->playMode = PCD::CDDA::PlayMode::Once; } irq.completed.raise(); reply(Status::OK); } //0xda auto PCD::SCSI::commandAudioPause() -> void { if(!pcd.fd) return reply(Status::CheckCondition); if(!drive->inCDDA()) return reply(Status::CheckCondition); drive->setPaused(); reply(Status::OK); } //0xdd auto PCD::SCSI::commandReadSubchannel() -> void { if(!pcd.fd) return reply(Status::CheckCondition); response.reset(); //0 = playing //1 = inactive //2 = paused //3 = stopped n8 mode = 1; if(drive->playing()) mode = 0; if(drive->paused()) mode = 2; if(drive->stopped()) mode = 3; array_view q{pcd.drive.sector + 2364, 12}; response.write(mode); //CDDA mode response.write(q[0]); //control + address response.write(q[1]); //track# response.write(q[2]); //index# response.write(q[3]); //minute (relative) response.write(q[4]); //second (relative) response.write(q[5]); //frame (relative) response.write(q[7]); //minute (absolute) response.write(q[8]); //second (absolute) response.write(q[9]); //frame (absolute) pin.control = 0; pin.input = 1; dataTransferCompleted = 1; } //0xde auto PCD::SCSI::commandGetDirectoryInformation() -> void { if(!pcd.fd) return reply(Status::CheckCondition); response.reset(); if(request.data[1].bit(0,1) == 0) { response.write(CD::BCD::encode(session->firstTrack)); response.write(CD::BCD::encode(session->lastTrack)); response.write(0x00); response.write(0x00); } if(request.data[1].bit(0,1) == 1) { auto [minute, second, frame] = CD::MSF(session->leadOut.lba); response.write(CD::BCD::encode(minute)); response.write(CD::BCD::encode(second)); response.write(CD::BCD::encode(frame)); response.write(0x00); } if(request.data[1].bit(0,1) == 2) { auto lba = session->leadOut.lba; auto mode = 0x01; auto trackID = CD::BCD::decode(request.data[2]); if(auto track = session->track(trackID)) { if(auto index = track->index(1)) { lba = index->lba; mode = track->control; } } auto [minute, second, frame] = CD::MSF::fromLBA(150 + lba); response.write(CD::BCD::encode(minute)); response.write(CD::BCD::encode(second)); response.write(CD::BCD::encode(frame)); response.write(mode); } if(request.data[1].bit(0,1) == 3) { auto lba = session->leadOut.lba; auto mode = 0x01; auto trackID = CD::BCD::decode(request.data[2]); if(auto track = session->track(trackID)) { if(auto index = track->index(1)) { lba = index->lba; mode = track->control; } } auto [minute, second, frame] = CD::MSF::fromLBA(150 + lba); response.write(lba >> 16); response.write(lba >> 8); response.write(lba >> 0); response.write(mode); } pin.control = 0; pin.input = 1; dataTransferCompleted = 1; } auto PCD::SCSI::commandInvalid() -> void { reply(Status::CheckCondition); } auto PCD::SCSI::power() -> void { irq = {}; pin = {}; bus = {}; acknowledging = 0; dataTransferCompleted = 0; messageAfterStatus = 0; messageSent = 0; statusSent = 0; request = {}; response = {}; } ares-126/ares/pce/pcd/serialization.cpp000066400000000000000000000034571415063341600201620ustar00rootroot00000000000000auto PCD::serialize(serializer& s) -> void { Thread::serialize(s); s(wram); s(bram); if(Model::PCEngineDuo()) s(sram); s(drive); s(scsi); s(cdda); s(adpcm); s(fader); s(clock.drive); s(clock.cdda); s(clock.adpcm); s(clock.fader); s(io.mdr); s(io.cddaSampleSelect); s(io.sramEnable); s(io.bramEnable); } auto PCD::Drive::serialize(serializer& s) -> void { s((u32&)mode); s((u32&)seek); s(latency); s(lba); s(start); s(end); s(sector); } auto PCD::SCSI::serialize(serializer& s) -> void { s(irq.ready.enable); s(irq.ready.line); s(irq.completed.enable); s(irq.completed.line); s(pin.reset); s(pin.acknowledge); s(pin.select); s(pin.input); s(pin.control); s(pin.message); s(pin.request); s(pin.busy); s(bus.select); s(bus.data); s(acknowledging); s(dataTransferCompleted); s(messageAfterStatus); s(messageSent); s(statusSent); s(request.data); s(request.reads); s(request.writes); s(response.data); s(response.reads); s(response.writes); } auto PCD::CDDA::serialize(serializer& s) -> void { s((u32&)playMode); s(sample.left); s(sample.right); s(sample.offset); } auto PCD::ADPCM::serialize(serializer& s) -> void { s(msm5205); s(memory); s(irq.halfReached.enable); s(irq.halfReached.line); s(irq.endReached.enable); s(irq.endReached.line); s(io.writeOffset); s(io.writeLatch); s(io.readOffset); s(io.readLatch); s(io.lengthLatch); s(io.playing); s(io.noRepeat); s(io.reset); s(read.address); s(read.data); s(read.pending); s(write.address); s(write.data); s(write.pending); s(sample.data); s(sample.nibble); s(dmaActive); s(divider); s(period); s(latch); s(length); } auto PCD::Fader::serialize(serializer& s) -> void { s((u32&)mode); s(step); s(volume); } ares-126/ares/pce/pce.hpp000066400000000000000000000014521415063341600153040ustar00rootroot00000000000000#pragma once //started: 2017-01-11 #include #include #include namespace ares::PCEngine { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto PCEngine() -> bool; inline static auto PCEngineDuo() -> bool; inline static auto SuperGrafx() -> bool; }; struct Region { inline static auto NTSCJ() -> bool; inline static auto NTSCU() -> bool; }; #include #include #include #include #include #include #include } ares-126/ares/pce/psg/000077500000000000000000000000001415063341600146135ustar00rootroot00000000000000ares-126/ares/pce/psg/channel.cpp000066400000000000000000000011331415063341600167250ustar00rootroot00000000000000auto PSG::Channel::power(u32 id) -> void { this->id = id; io = {}; } auto PSG::Channel::run() -> void { if(!io.enable) return sample(0); if(!io.direct && --io.wavePeriod == 0) { io.wavePeriod = io.waveFrequency; io.waveOffset++; io.waveSample = io.waveBuffer[io.waveOffset]; } if(!io.noiseEnable) { return sample(io.waveSample); } if(--io.noisePeriod == 0) { io.noisePeriod = ~io.noiseFrequency << 7; io.noiseSample = nall::random() & 1 ? ~0 : 0; } return sample(io.noiseSample); } auto PSG::Channel::sample(n5 sample) -> void { io.output = sample; } ares-126/ares/pce/psg/io.cpp000066400000000000000000000036031415063341600157300ustar00rootroot00000000000000auto PSG::write(n4 address, n8 data) -> void { if(address == 0x00) { io.channel = data.bit(0,2); } if(address == 0x01) { io.volumeRight = data.bit(0,3); io.volumeLeft = data.bit(4,7); } if(address >= 0x02 && address <= 0x06 && io.channel <= 5) { channel[io.channel].write(address, data); } if(address == 0x07 && io.channel >= 4 && io.channel <= 5) { channel[io.channel].write(address, data); } if(address == 0x08) { io.lfoFrequency = data; } if(address == 0x09) { io.lfoControl = data.bit(0,1); io.lfoEnable = data.bit(7); if(io.lfoEnable) { channel[1].io.waveSample = channel[1].io.waveBuffer[channel[1].io.waveOffset = 0]; } } } auto PSG::Channel::write(n4 address, n8 data) -> void { if(address == 0x02) { io.waveFrequency.bit(0,7) = data.bit(0,7); io.wavePeriod = io.waveFrequency; } if(address == 0x03) { io.waveFrequency.bit(8,11) = data.bit(0,3); io.wavePeriod = io.waveFrequency; } if(address == 0x04) { if(io.direct && !data.bit(6)) { io.waveOffset = 0; io.waveSample = io.waveBuffer[io.waveOffset]; } if(!io.enable && data.bit(7) && !data.bit(6)) { io.waveOffset++; io.waveSample = io.waveBuffer[io.waveOffset]; } io.volume = data.bit(0,4); io.direct = data.bit(6); io.enable = data.bit(7); } if(address == 0x05) { io.volumeRight = data.bit(0,3); io.volumeLeft = data.bit(4,7); } if(address == 0x06) { if(!io.direct) { io.waveBuffer[io.waveOffset] = data.bit(0,4); if(!io.enable) io.waveOffset++; } if(io.enable) { io.waveSample = data.bit(0,4); } } //channels 4 and 5 only if(address == 0x07) { if(!io.noiseEnable && data.bit(7)) { io.noisePeriod = ~data.bit(0,4) << 7; io.noiseSample = 0; } io.noiseFrequency = data.bit(0,4); io.noiseEnable = data.bit(7); } } ares-126/ares/pce/psg/psg.cpp000066400000000000000000000051671415063341600161210ustar00rootroot00000000000000#include namespace ares::PCEngine { PSG psg; #include "io.cpp" #include "channel.cpp" #include "serialization.cpp" auto PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = parent->append("PSG"); stream->setChannels(2); #if defined(PROFILE_ACCURACY) stream->setFrequency(system.colorburst()); #endif #if defined(PROFILE_PERFORMANCE) stream->setFrequency(system.colorburst() / 64.0); #endif stream->addHighPassFilter(20.0, 1); } auto PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto PSG::main() -> void { i16 outputLeft; i16 outputRight; #if defined(PROFILE_ACCURACY) frame(outputLeft, outputRight); stream->frame(sclamp<16>(outputLeft) / 32768.0, sclamp<16>(outputRight) / 32768.0); step(1); #endif #if defined(PROFILE_PERFORMANCE) //3.57MHz stereo audio through a 6th-order biquad IIR filter is very demanding. //decimate the audio to ~56KHz, which is still well above the range of human hearing. for(u32 n : range(64)) frame(outputLeft, outputRight); stream->frame(sclamp<16>(outputLeft) / 32768.0, sclamp<16>(outputRight) / 32768.0); step(64); #endif } auto PSG::frame(i16& outputLeft, i16& outputRight) -> void { static const n5 volumeScale[16] = { 0x00, 0x03, 0x05, 0x07, 0x09, 0x0b, 0x0d, 0x0f, 0x10, 0x13, 0x15, 0x17, 0x19, 0x1b, 0x1d, 0x1f, }; outputLeft = 0; outputRight = 0; n5 lmal = volumeScale[io.volumeLeft]; n5 rmal = volumeScale[io.volumeRight]; for(u32 C : range(6)) { n5 al = channel[C].io.volume; n5 lal = volumeScale[channel[C].io.volumeLeft]; n5 ral = volumeScale[channel[C].io.volumeRight]; n5 volumeLeft = min(0x1f, (0x1f - lmal) + (0x1f - lal) + (0x1f - al)); n5 volumeRight = min(0x1f, (0x1f - rmal) + (0x1f - ral) + (0x1f - al)); channel[C].run(); if(C == 1 && io.lfoEnable) { //todo: frequency modulation of channel 0 using channel 1's output } else { outputLeft += channel[C].io.output * volumeScalar[volumeLeft]; outputRight += channel[C].io.output * volumeScalar[volumeRight]; } } } auto PSG::step(u32 clocks) -> void { Thread::step(clocks); synchronize(cpu); } auto PSG::power() -> void { Thread::create(system.colorburst(), {&PSG::main, this}); io = {}; for(auto C : range(6)) channel[C].power(C); f64 level = 32768.0 / 6.0 / 32.0; //max volume / channels / steps f64 step = 48.0 / 32.0; //48dB volume range spread over 32 steps for(u32 n : range(31)) { volumeScalar[n] = level; level /= pow(10.0, step / 20.0); } volumeScalar[31] = 0.0; } } ares-126/ares/pce/psg/psg.hpp000066400000000000000000000023361415063341600161210ustar00rootroot00000000000000//Programmable Sound Generator struct PSG : Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto frame(i16&, i16&) -> void; auto step(u32 clocks) -> void; auto power() -> void; //io.cpp auto write(n4 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct IO { n3 channel; n4 volumeLeft; n4 volumeRight; n8 lfoFrequency; n2 lfoControl; n1 lfoEnable; } io; struct Channel { //channel.cpp auto power(u32 id) -> void; auto run() -> void; auto sample(n5 sample) -> void; //io.cpp auto write(n4 address, n8 data) -> void; struct IO { n12 waveFrequency; n5 volume; n1 direct; n1 enable; n4 volumeLeft; n4 volumeRight; n5 waveBuffer[32]; n5 noiseFrequency; //channels 4 and 5 only n1 noiseEnable; //channels 4 and 5 only n12 wavePeriod; n5 waveSample; n5 waveOffset; n12 noisePeriod; n5 noiseSample; n5 output; } io; u32 id; } channel[6]; //unserialized: f64 volumeScalar[32]; }; extern PSG psg; ares-126/ares/pce/psg/serialization.cpp000066400000000000000000000011021415063341600201660ustar00rootroot00000000000000auto PSG::serialize(serializer& s) -> void { Thread::serialize(s); s(io.channel); s(io.volumeLeft); s(io.volumeRight); s(io.lfoFrequency); s(io.lfoControl); s(io.lfoEnable); for(auto& c : channel) { s(c.io.waveFrequency); s(c.io.volume); s(c.io.direct); s(c.io.enable); s(c.io.volumeLeft); s(c.io.volumeRight); s(c.io.waveBuffer); s(c.io.noiseFrequency); s(c.io.noiseEnable); s(c.io.wavePeriod); s(c.io.waveSample); s(c.io.waveOffset); s(c.io.noisePeriod); s(c.io.noiseSample); s(c.io.output); } } ares-126/ares/pce/system/000077500000000000000000000000001415063341600153465ustar00rootroot00000000000000ares-126/ares/pce/system/serialization.cpp000066400000000000000000000020261415063341600207270ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cpu); s(vdp); s(psg); s(cartridgeSlot); s(controllerPort); if(PCD::Present()) s(pcd); } ares-126/ares/pce/system/system.cpp000066400000000000000000000052711415063341600174030ustar00rootroot00000000000000#include namespace ares::PCEngine { auto enumerate() -> vector { return { "[NEC] PC Engine (NTSC-J)", "[NEC] TurboGrafx 16 (NTSC-U)", "[NEC] PC Engine Duo (NTSC-J)", "[NEC] TurboDuo (NTSC-U)", "[NEC] SuperGrafx (NTSC-J)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; #include "serialization.cpp" auto System::game() -> string { if(pcd.disc) { return pcd.title(); } if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("PC Engine")) { information.name = "PC Engine"; information.model = Model::PCEngine; } if(name.find("TurboGrafx 16")) { information.name = "PC Engine"; information.model = Model::PCEngine; } if(name.find("PC Engine Duo")) { information.name = "PC Engine"; information.model = Model::PCEngineDuo; } if(name.find("TurboDuo")) { information.name = "PC Engine"; information.model = Model::PCEngineDuo; } if(name.find("SuperGrafx")) { information.name = "SuperGrafx"; information.model = Model::SuperGrafx; } if(name.find("NTSC-J")) { information.region = Region::NTSCJ; } if(name.find("NTSC-U")) { information.region = Region::NTSCU; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; scheduler.reset(); cpu.load(node); vdp.load(node); psg.load(node); cartridgeSlot.load(node); controllerPort.load(node); if(PCD::Present()) pcd.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); if(PCD::Present()) pcd.save(); } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); vdp.unload(); psg.unload(); cartridgeSlot.unload(); controllerPort.unload(); if(PCD::Present()) pcd.unload(); pak.reset(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); if(PCD::Present()) pcd.power(); cartridgeSlot.power(); cpu.power(); vdp.power(); psg.power(); scheduler.power(cpu); } } ares-126/ares/pce/system/system.hpp000066400000000000000000000027341415063341600174110ustar00rootroot00000000000000struct System { Node::System node; VFS::Pak pak; enum class Model : u32 { PCEngine, PCEngineDuo, SuperGrafx }; enum class Region : u32 { NTSCJ, NTSCU }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto region() const -> Region { return information.region; } auto colorburst() const -> f64 { return information.colorburst; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "PC Engine"; Model model = Model::PCEngine; Region region = Region::NTSCU; //more compatible f64 colorburst = Constants::Colorburst::NTSC; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Model::PCEngine() -> bool { return system.model() == System::Model::PCEngine; } auto Model::PCEngineDuo() -> bool { return system.model() == System::Model::PCEngineDuo; } auto Model::SuperGrafx() -> bool { return system.model() == System::Model::SuperGrafx; } auto Region::NTSCJ() -> bool { return system.region() == System::Region::NTSCJ; } auto Region::NTSCU() -> bool { return system.region() == System::Region::NTSCU; } ares-126/ares/pce/vdp-performance/000077500000000000000000000000001415063341600171125ustar00rootroot00000000000000ares-126/ares/pce/vdp-performance/background.cpp000066400000000000000000000022721415063341600217400ustar00rootroot00000000000000auto VDC::Background::scanline(n16 y) -> void { if(y == 0) { vcounter = vscroll; } else { vcounter++; } hoffset = hscroll; voffset = vcounter; } auto VDC::Background::render(n16 y) -> void { if(!enable) return (void)memset(&output, 0, sizeof(output)); for(u32 x = 0; x < vdp.vce.width();) { n8 tileX = hoffset >> 3 & width - 1; n8 tileY = voffset >> 3 & height - 1; n16 attributes = vdc->vram.read(tileY * width + tileX); n16 patternAddress = attributes.bit(0,11) << 4 | (n3)voffset; n4 palette = attributes.bit(12,15); n16 d0 = 0, d1 = 0; if(latch.vramMode != 3) { d0 = vdc->vram.read(patternAddress + 0); d1 = vdc->vram.read(patternAddress + 8); } if(latch.vramMode == 3) { if(latch.characterMode == 0) d0 = vdc->vram.read(patternAddress + 0); if(latch.characterMode == 1) d0 = vdc->vram.read(patternAddress + 8); } n3 index = ~hoffset; do { n4 color; color.bit(0) = d0.bit(0 + index); color.bit(1) = d0.bit(8 + index); color.bit(2) = d1.bit(0 + index); color.bit(3) = d1.bit(8 + index); index--; output[x++] = {color, palette}; } while(++hoffset & 7); } } ares-126/ares/pce/vdp-performance/color.cpp000066400000000000000000000006661415063341600207440ustar00rootroot00000000000000auto VDP::color(n32 color) -> n64 { n3 B = color.bit(0,2); n3 R = color.bit(3,5); n3 G = color.bit(6,8); n1 M = color.bit(9); n64 r = image::normalize(R, 3, 16); n64 g = image::normalize(G, 3, 16); n64 b = image::normalize(B, 3, 16); if(M == 0) { //color return r << 32 | g << 16 | b << 0; } else { //grayscale n64 l = r * 0.2126 + g * 0.7152 + b * 0.0722; return l << 32 | l << 16 | l << 0; } } ares-126/ares/pce/vdp-performance/debugger.cpp000066400000000000000000000024451415063341600214070ustar00rootroot00000000000000auto VCE::Debugger::load(VCE& vce, Node::Object parent) -> void { memory.cram = parent->append("VCE CRAM"); memory.cram->setSize(0x200 << 1); memory.cram->setRead([&](u32 address) -> u8 { return vce.cram.memory[n9(address >> 1)].byte(address & 1); }); memory.cram->setWrite([&](u32 address, u8 data) -> void { vce.cram.memory[n9(address >> 1)].byte(address & 1) = data; }); } auto VDC::Debugger::load(VDC& vdc, Node::Object parent) -> void { string vdcID = "VDC"; if(Model::SuperGrafx()) vdcID = &vdc == &vdp.vdc0 ? "VDC0" : "VDC1"; memory.vram = parent->append(string{vdcID, " VRAM"}); memory.vram->setSize(32_KiB << 1); memory.vram->setRead([&](u32 address) -> u8 { return vdc.vram.memory[n15(address >> 1)].byte(address & 1); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { vdc.vram.memory[n15(address >> 1)].byte(address & 1) = data; }); memory.satb = parent->append(string{vdcID, " SATB"}); memory.satb->setSize(0x100 << 1); memory.satb->setRead([&](u32 address) -> u8 { return vdc.satb.memory[n8(address >> 1)].byte(address & 1); }); memory.satb->setWrite([&](u32 address, u8 data) -> void { vdc.satb.memory[n8(address >> 1)].byte(address & 1) = data; }); } ares-126/ares/pce/vdp-performance/dma.cpp000066400000000000000000000022661415063341600203650ustar00rootroot00000000000000auto VDC::DMA::step(u32 clocks) -> void { do { if(!vramActive && !satbActive) break; if(vramActive) { if(!vdc->burstMode()) { //terminate transfer early if VRAM DMA runs into active display area vramActive = 0; vdc->irq.raise(VDC::IRQ::Line::TransferVRAM); continue; } n16 data = vdc->vram.read(source); vdc->vram.write(target, data); sourceIncrementMode == 0 ? source++ : source--; targetIncrementMode == 0 ? target++ : target--; if(!length--) { vramActive = 0; vdc->irq.raise(VDC::IRQ::Line::TransferVRAM); } continue; } if(satbActive) { n16 data = vdc->vram.read(satbSource + satbOffset); vdc->satb.write(satbOffset, data); if(!++satbOffset) { satbActive = 0; vdc->irq.raise(VDC::IRQ::Line::TransferSATB); } continue; } } while(--clocks); } auto VDC::DMA::vramStart() -> void { if(vdc->burstMode()) { vramActive = 1; } } auto VDC::DMA::satbStart() -> void { if(satbPending || satbRepeat) { satbPending = 0; satbActive = 1; satbOffset = 0; } } auto VDC::DMA::satbQueue() -> void { satbPending = 1; } ares-126/ares/pce/vdp-performance/irq.cpp000066400000000000000000000017151415063341600204150ustar00rootroot00000000000000auto VDC::IRQ::poll() -> void { n1 pending = 0; pending |= collision.pending; pending |= overflow.pending; pending |= coincidence.pending; pending |= vblank.pending; pending |= transferVRAM.pending; pending |= transferSATB.pending; line = pending; } auto VDC::IRQ::raise(Line line) -> void { if(line == Line::Collision && collision.enable) collision.pending = 1; if(line == Line::Overflow && overflow.enable) overflow.pending = 1; if(line == Line::Coincidence && coincidence.enable) coincidence.pending = 1; if(line == Line::Vblank && vblank.enable) vblank.pending = 1; if(line == Line::TransferVRAM && transferVRAM.enable) transferVRAM.pending = 1; if(line == Line::TransferSATB && transferSATB.enable) transferSATB.pending = 1; poll(); } auto VDC::IRQ::lower() -> void { collision.pending = 0; overflow.pending = 0; coincidence.pending = 0; vblank.pending = 0; transferVRAM.pending = 0; transferSATB.pending = 0; line = 0; } ares-126/ares/pce/vdp-performance/serialization.cpp000066400000000000000000000051441415063341600224770ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { Thread::serialize(s); s(vce); s(vdc0); if(Model::SuperGrafx()) s(vdc1); if(Model::SuperGrafx()) s(vpc); s(io.hcounter); s(io.vcounter); } auto VCE::serialize(serializer& s) -> void { s(cram.memory); s(cram.address); s(io.clock); s(io.extraLine); s(io.grayscale); } auto VDC::serialize(serializer& s) -> void { s(vram.memory); s(vram.addressRead); s(vram.addressWrite); s(vram.addressIncrement); s(vram.dataRead); s(vram.dataWrite); s(satb.memory); s(irq.line); s(irq.collision.enable); s(irq.collision.pending); s(irq.overflow.enable); s(irq.overflow.pending); s(irq.coincidence.enable); s(irq.coincidence.pending); s(irq.vblank.enable); s(irq.vblank.pending); s(irq.transferVRAM.enable); s(irq.transferVRAM.pending); s(irq.transferSATB.enable); s(irq.transferSATB.pending); s(dma.sourceIncrementMode); s(dma.targetIncrementMode); s(dma.satbRepeat); s(dma.source); s(dma.target); s(dma.length); s(dma.satbSource); s(dma.vramActive); s(dma.satbActive); s(dma.satbPending); s(dma.satbOffset); s(timing.horizontalSyncWidth); s(timing.horizontalDisplayStart); s(timing.horizontalDisplayWidth); s(timing.horizontalDisplayEnd); s(timing.verticalSyncWidth); s(timing.verticalDisplayStart); s(timing.verticalDisplayWidth); s(timing.verticalDisplayEnd); s(timing.hstate); s(timing.vstate); s(timing.hoffset); s(timing.voffset); s(timing.coincidence); s(latch.horizontalSyncWidth); s(latch.horizontalDisplayStart); s(latch.horizontalDisplayWidth); s(latch.horizontalDisplayEnd); s(latch.verticalSyncWidth); s(latch.verticalDisplayStart); s(latch.verticalDisplayWidth); s(latch.verticalDisplayEnd); s(io.address); s(io.externalSync); s(io.displayOutput); s(io.dramRefresh); s(io.coincidence); s(background.enable); s(background.vramMode); s(background.characterMode); s(background.hscroll); s(background.vscroll); s(background.vcounter); s(background.width); s(background.height); s(background.hoffset); s(background.voffset); s(background.latch.vramMode); s(background.latch.characterMode); s(sprite.enable); s(sprite.vramMode); s(sprite.latch.vramMode); } auto VDC::Object::serialize(serializer& s) -> void { s(y); s(x); s(characterMode); s(pattern); s(palette); s(priority); s(width); s(height); s(hflip); s(vflip); s(first); } auto VPC::serialize(serializer& s) -> void { for(auto& setting : settings) { s(setting.enableVDC0); s(setting.enableVDC1); s(setting.priority); } s(window); s(select); } ares-126/ares/pce/vdp-performance/sprite.cpp000066400000000000000000000064551415063341600211360ustar00rootroot00000000000000auto VDC::Sprite::scanline(n16 y) -> void { objects.reset(); if(!enable) return; y += 64; static const u32 widths [2] = {15, 31}; static const u32 heights[4] = {15, 31, 63, 63}; u32 count = 0; for(u32 index : range(64)) { n16 d0 = vdc->satb.read(index << 2 | 0); n16 d1 = vdc->satb.read(index << 2 | 1); n16 d2 = vdc->satb.read(index << 2 | 2); n16 d3 = vdc->satb.read(index << 2 | 3); Object object; object.y = d0.bit(0,9); object.height = heights[d3.bit(12,13)]; if(y < object.y) continue; if(y > object.y + object.height) continue; object.x = d1.bit(0,9); object.characterMode = d2.bit(0); object.pattern = d2.bit(1,10); object.palette = d3.bit(0,3); object.priority = d3.bit(7); object.width = widths[d3.bit(8)]; object.hflip = d3.bit(11); object.vflip = d3.bit(15); object.first = index == 0; if(object.width == 31) object.pattern.bit(0) = 0; if(object.height == 31) object.pattern.bit(1) = 0; if(object.height == 63) object.pattern.bit(1,2) = 0; if(object.width == 15) { objects.append(object); if(++count >= 16) return vdc->irq.raise(VDC::IRQ::Line::Overflow); } else { //32-width sprites count as two 16-width sprite slots object.pattern ^= object.hflip; object.width = 15; objects.append(object); if(++count >= 16) return vdc->irq.raise(VDC::IRQ::Line::Overflow); object.x += 16; object.pattern ^= 1; objects.append(object); if(++count >= 16) return vdc->irq.raise(VDC::IRQ::Line::Overflow); } } } auto VDC::Sprite::render(n16 y) -> void { if(!enable) return (void)memset(&output, 0, sizeof(output)); y += 64; for(u32 x : range(vdp.vce.width())) { output[x] = {}; bool first = false; for(auto& object : objects) { if(x + 32 < object.x) continue; if(x + 32 > object.x + object.width) continue; n10 hoffset = x + 32 - object.x; n10 voffset = y - object.y; if(object.hflip) hoffset ^= object.width; if(object.vflip) voffset ^= object.height; n16 patternAddress = object.pattern; patternAddress += (voffset >> 4) << 1; patternAddress += (hoffset >> 4); patternAddress <<= 6; patternAddress += (voffset & 15); n16 d0 = 0, d1 = 0, d2 = 0, d3 = 0; if(latch.vramMode != 1) { d0 = vdc->vram.read(patternAddress + 0); d1 = vdc->vram.read(patternAddress + 16); d2 = vdc->vram.read(patternAddress + 32); d3 = vdc->vram.read(patternAddress + 48); } if(latch.vramMode == 1) { if(object.characterMode == 0) { d0 = vdc->vram.read(patternAddress + 0); d1 = vdc->vram.read(patternAddress + 16); } if(object.characterMode == 1) { d0 = vdc->vram.read(patternAddress + 32); d1 = vdc->vram.read(patternAddress + 48); } } n4 index = 15 - (hoffset & 15); n4 color; color.bit(0) = d0.bit(index); color.bit(1) = d1.bit(index); color.bit(2) = d2.bit(index); color.bit(3) = d3.bit(index); if(!color) continue; if(output[x].color) { if(first) vdc->irq.raise(VDC::IRQ::Line::Collision); break; } if(object.first) first = true; output[x] = {color, object.palette, object.priority}; } } } ares-126/ares/pce/vdp-performance/vce.cpp000066400000000000000000000026361415063341600204020ustar00rootroot00000000000000auto VCE::read(n3 address) -> n8 { cpu.idle(); //penalty cycle n8 data = 0xff; if(address == 0x4) { //CTR data.bit(0,7) = cram.read(cram.address).bit(0,7); return data; } if(address == 0x5) { //CTR data.bit(0) = cram.read(cram.address).bit(8); cram.address++; return data; } return data; } auto VCE::write(n3 address, n8 data) -> void { cpu.idle(); //penalty cycle if(address == 0x0) { //CR if(data.bit(0,1) == 0) io.clock = 4; if(data.bit(0,1) == 1) io.clock = 3; if(data.bit(0,1) == 2) io.clock = 2; if(data.bit(0,1) == 3) io.clock = 3; io.extraLine = data.bit(2); io.grayscale = data.bit(7); return; } if(address == 0x2) { //CTA cram.address.bit(0,7) = data.bit(0,7); return; } if(address == 0x3) { //CTA cram.address.bit(8) = data.bit(0); return; } if(address == 0x4) { //CTW cram.write(cram.address, 0, data.bit(0,7)); return; } if(address == 0x5) { //CTW cram.write(cram.address, 1, data.bit(0)); cram.address++; return; } } auto VCE::power() -> void { for(auto& data : cram.memory) data = 0; cram.address = 0; io = {}; } auto VCE::CRAM::read(n9 address) -> n9 { return memory[address]; } auto VCE::CRAM::write(n9 address, n1 a0, n8 data) -> void { if(a0 == 0) memory[address].bit(0,7) = data.bit(0,7); if(a0 == 1) memory[address].bit(8) = data.bit(0); } ares-126/ares/pce/vdp-performance/vce.hpp000066400000000000000000000014131415063341600203770ustar00rootroot00000000000000//Hudson Soft HuC6260: Video Color Encoder struct VCE { struct Debugger { //debugger.cpp auto load(VCE&, Node::Object) -> void; struct Memory { Node::Debugger::Memory cram; } memory; } debugger; auto clock() const -> u32 { return io.clock; } auto width() const -> u32 { return io.clock == 4 ? 256 : io.clock == 3 ? 344 : 512; } //vce.cpp auto read(n3 address) -> n8; auto write(n3 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct CRAM { //vce.cpp auto read(n9 address) -> n9; auto write(n9 address, n1 a0, n8 data) -> void; n9 memory[0x200]; n9 address; } cram; struct IO { n8 clock = 4; n1 extraLine; n1 grayscale; } io; }; ares-126/ares/pce/vdp-performance/vdc.cpp000066400000000000000000000203151415063341600203730ustar00rootroot00000000000000auto VDC::hsync() -> void { timing.hstate = HDS; timing.hoffset = 0; latch.horizontalDisplayStart = max(2, timing.horizontalDisplayStart) + 1 << 3; latch.horizontalDisplayWidth = timing.horizontalDisplayWidth + 1 << 3; latch.horizontalDisplayEnd = timing.horizontalDisplayEnd + 1 << 3; latch.horizontalSyncWidth = timing.horizontalSyncWidth + 1 << 3; background.latch.characterMode = background.characterMode; } auto VDC::vsync() -> void { timing.vstate = VSW; timing.voffset = 0; latch.verticalSyncWidth = timing.verticalSyncWidth + 1; latch.verticalDisplayStart = timing.verticalDisplayStart + 2; latch.verticalDisplayWidth = timing.verticalDisplayWidth + 1; latch.verticalDisplayEnd = timing.verticalDisplayEnd; //ensure that Vblank IRQs always occur each frame if(latch.verticalSyncWidth + latch.verticalDisplayStart + latch.verticalDisplayWidth > 261) { latch.verticalDisplayWidth = 261 - latch.verticalSyncWidth - latch.verticalDisplayStart; } latch.burstMode = !background.enable && !sprite.enable; } auto VDC::hclock() -> void { background.scanline(timing.voffset); sprite.scanline(timing.voffset); if(timing.vstate == VDW) { background.render(timing.voffset); sprite.render(timing.voffset); for(u32 x : range(vdp.vce.width())) { output[x] = 0; if(sprite.output[x].color && sprite.output[x].priority) { output[x] = sprite.output[x].color << 0 | sprite.output[x].palette << 4 | 1 << 8; } else if(background.output[x].color) { output[x] = background.output[x].color << 0 | background.output[x].palette << 4 | 0 << 8; } else if(sprite.output[x].color) { output[x] = sprite.output[x].color << 0 | sprite.output[x].palette << 4 | 1 << 8; } } } else { //vertical-blanking period for(auto& pixel : output) pixel = 0x100; } if(timing.coincidence++ == io.coincidence) irq.raise(IRQ::Line::Coincidence); } auto VDC::vclock() -> void { timing.voffset++; switch(timing.vstate) { case VSW: if(timing.voffset >= latch.verticalSyncWidth) { timing.vstate = VDS; timing.voffset = 0; } break; case VDS: if(timing.voffset >= latch.verticalDisplayStart) { timing.vstate = VDW; timing.voffset = 0; timing.coincidence = 64; } break; case VDW: if(timing.voffset >= latch.verticalDisplayWidth) { timing.vstate = VCR; timing.voffset = 0; background.latch.vramMode = background.vramMode; sprite.latch.vramMode = sprite.vramMode; irq.raise(IRQ::Line::Vblank); dma.satbStart(); } break; case VCR: if(timing.voffset >= latch.verticalDisplayEnd) { timing.vstate = VSW; timing.voffset = 0; } break; } } auto VDC::read(n2 address) -> n8 { if(!burstMode()) cpu.idle(); //penalty cycle n8 data = 0x00; if(address == 0x0) { //SR data.bit(0) = irq.collision.pending; data.bit(1) = irq.overflow.pending; data.bit(2) = irq.coincidence.pending; data.bit(3) = irq.transferSATB.pending; data.bit(4) = irq.transferVRAM.pending; data.bit(5) = irq.vblank.pending; data.bit(6) = 0; //busy irq.lower(); return data; } if(address == 0x1) { //unmapped return data; } n1 a0 = address.bit(0); if(io.address == 0x02) { //VRR data = vram.dataRead.byte(a0); if(a0 == 1) { vram.addressRead += vram.addressIncrement; vram.dataRead = vram.read(vram.addressRead); } return data; } return data; } auto VDC::write(n2 address, n8 data) -> void { if(!burstMode()) cpu.idle(); //penalty cycle if(address == 0x0) { //AR io.address = data.bit(0,4); return; } if(address == 0x1) { //unmapped return; } n1 a0 = address.bit(0); if(io.address == 0x00) { //MAWR vram.addressWrite.byte(a0) = data; return; } if(io.address == 0x01) { //MARR vram.addressRead.byte(a0) = data; vram.dataRead = vram.read(vram.addressRead); return; } if(io.address == 0x02) { //VWR vram.dataWrite.byte(a0) = data; if(a0 == 1) { vram.write(vram.addressWrite, vram.dataWrite); vram.addressWrite += vram.addressIncrement; } return; } if(io.address == 0x05) { //CR if(a0 == 0) { irq.collision.enable = data.bit(0); irq.overflow.enable = data.bit(1); irq.coincidence.enable = data.bit(2); irq.vblank.enable = data.bit(3); io.externalSync = data.bit(4,5); sprite.enable = data.bit(6); background.enable = data.bit(7); } if(a0 == 1) { io.displayOutput = data.bit(0,1); io.dramRefresh = data.bit(2); if(data.bit(3,4) == 0) vram.addressIncrement = 0x01; if(data.bit(3,4) == 1) vram.addressIncrement = 0x20; if(data.bit(3,4) == 2) vram.addressIncrement = 0x40; if(data.bit(3,4) == 3) vram.addressIncrement = 0x80; } return; } if(io.address == 0x06) { //RCR if(a0 == 0) io.coincidence.bit(0,7) = data.bit(0,7); if(a0 == 1) io.coincidence.bit(8,9) = data.bit(0,1); return; } if(io.address == 0x07) { //BXR if(a0 == 0) background.hscroll.bit(0,7) = data.bit(0,7); if(a0 == 1) background.hscroll.bit(8,9) = data.bit(0,1); return; } if(io.address == 0x08) { //BYR if(a0 == 0) background.vscroll.bit(0,7) = data.bit(0,7); if(a0 == 1) background.vscroll.bit(8) = data.bit(0); background.vcounter = background.vscroll; //updated on both even and odd writes return; } if(io.address == 0x09) { //MWR if(a0 == 1) return; background.vramMode = data.bit(0,1); sprite.vramMode = data.bit(2,3); if(data.bit(4,5) == 0) background.width = 32; if(data.bit(4,5) == 1) background.width = 64; if(data.bit(4,5) == 2) background.width = 128; if(data.bit(4,5) == 3) background.width = 128; if(data.bit(6) == 0) background.height = 32; if(data.bit(6) == 1) background.height = 64; background.characterMode = data.bit(7); return; } if(io.address == 0x0a) { //HSR if(a0 == 0) timing.horizontalSyncWidth = data.bit(0,4); if(a0 == 1) timing.horizontalDisplayStart = data.bit(0,6); return; } if(io.address == 0x0b) { //HDR if(a0 == 0) timing.horizontalDisplayWidth = data.bit(0,6); if(a0 == 1) timing.horizontalDisplayEnd = data.bit(0,6); return; } if(io.address == 0x0c) { //VPR if(a0 == 0) timing.verticalSyncWidth = data.bit(0,4); if(a0 == 1) timing.verticalDisplayStart = data.bit(0,7); return; } if(io.address == 0x0d) { //VDR if(a0 == 0) timing.verticalDisplayWidth.bit(0,7) = data.bit(0,7); if(a0 == 1) timing.verticalDisplayWidth.bit(8) = data.bit(0); return; } if(io.address == 0x0e) { //VCR if(a0 == 0) timing.verticalDisplayEnd = data.bit(0,7); return; } if(io.address == 0x0f) { //DCR if(a0 == 1) return; irq.transferSATB.enable = data.bit(0); irq.transferVRAM.enable = data.bit(1); dma.sourceIncrementMode = data.bit(2); dma.targetIncrementMode = data.bit(3); dma.satbRepeat = data.bit(4); return; } if(io.address == 0x10) { //SOUR dma.source.byte(a0) = data; return; } if(io.address == 0x11) { //DESR dma.target.byte(a0) = data; return; } if(io.address == 0x12) { //LENR dma.length.byte(a0) = data; if(a0 == 1) dma.vramStart(); return; } if(io.address == 0x13) { //DVSSR dma.satbSource.byte(a0) = data; dma.satbQueue(); return; } } auto VDC::power() -> void { for(auto& data : vram.memory) data = 0; vram.addressRead = 0; vram.addressWrite = 0; vram.addressIncrement = 0x01; vram.dataRead = 0; vram.dataWrite = 0; satb = {}; irq = {}; dma = {}; timing = {}; background = {}; sprite = {}; dma.vdc = *this; background.vdc = *this; sprite.vdc = *this; } inline auto VDC::VRAM::read(n16 address) const -> n16 { if(address.bit(15)) return 0x0000; //todo: random data? return memory[address]; } inline auto VDC::VRAM::write(n16 address, n16 data) -> void { if(address.bit(15)) return; memory[address] = data; } inline auto VDC::SATB::read(n8 address) const -> n16 { return memory[address]; } inline auto VDC::SATB::write(n8 address, n16 data) -> void { memory[address] = data; } ares-126/ares/pce/vdp-performance/vdc.hpp000066400000000000000000000077331415063341600204110ustar00rootroot00000000000000//Hudson Soft HuC6270: Video Display Controller struct VDC { struct Debugger { //debugger.cpp auto load(VDC&, Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory satb; } memory; } debugger; auto burstMode() const -> bool { return latch.burstMode || timing.vstate != VDW; } auto irqLine() const -> bool { return irq.line; } //vdc.cpp auto hsync() -> void; auto vsync() -> void; auto hclock() -> void; auto vclock() -> void; auto read(n2 address) -> n8; auto write(n2 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n9 output[512]; struct VRAM { //vdc.cpp auto read(n16 address) const -> n16; auto write(n16 address, n16 data) -> void; n16 memory[0x8000]; n16 addressRead; n16 addressWrite; n16 addressIncrement = 0x01; n16 dataRead; n16 dataWrite; } vram; struct SATB { //vdc.cpp auto read(n8 address) const -> n16; auto write(n8 address, n16 data) -> void; n16 memory[0x100]; } satb; struct IRQ { enum class Line : u32 { Collision, Overflow, Coincidence, Vblank, TransferVRAM, TransferSATB, }; struct Source { n1 enable; n1 pending; }; //irq.cpp auto poll() -> void; auto raise(Line) -> void; auto lower() -> void; n1 line; Source collision; Source overflow; Source coincidence; Source vblank; Source transferVRAM; Source transferSATB; } irq; struct DMA { maybe vdc; //dma.cpp auto step(u32 clocks) -> void; auto vramStart() -> void; auto satbStart() -> void; auto satbQueue() -> void; n1 sourceIncrementMode; n1 targetIncrementMode; n1 satbRepeat; n16 source; n16 target; n16 length; n16 satbSource; n1 vramActive; n1 satbActive; n1 satbPending; n8 satbOffset; } dma; enum : u32 { HDS, HDW, HDE, HSW }; enum : u32 { VSW, VDS, VDW, VCR }; struct Timing { n5 horizontalSyncWidth = 2; n7 horizontalDisplayStart = 2; n7 horizontalDisplayWidth = 31; n7 horizontalDisplayEnd = 4; n5 verticalSyncWidth = 2; n8 verticalDisplayStart = 15; n9 verticalDisplayWidth = 239; n8 verticalDisplayEnd = 4; n8 hstate = HDS; n8 vstate = VSW; n16 hoffset; n16 voffset; n10 coincidence = 64; } timing; struct Latch { n16 horizontalSyncWidth; n16 horizontalDisplayStart; n16 horizontalDisplayWidth; n16 horizontalDisplayEnd; n16 verticalSyncWidth; n16 verticalDisplayStart; n16 verticalDisplayWidth; n16 verticalDisplayEnd; n1 burstMode = 1; } latch; struct IO { n5 address; n2 externalSync; n2 displayOutput; n1 dramRefresh; n10 coincidence; } io; struct Background { maybe vdc; //background.cpp auto scanline(n16 y) -> void; auto render(n16 y) -> void; n1 enable; n2 vramMode; //partially emulated n1 characterMode; n10 hscroll; n9 vscroll; n9 vcounter; n8 width = 32; n8 height = 32; n10 hoffset; n9 voffset; struct Latch { n2 vramMode; n1 characterMode; } latch; struct Output { n4 color; n4 palette; } output[512]; } background; struct Object { //serialization.cpp auto serialize(serializer&) -> void; n10 y; n10 x; n1 characterMode; n10 pattern; n4 palette; n1 priority; n8 width; n8 height; n1 hflip; n1 vflip; n1 first; }; struct Sprite { maybe vdc; //sprite.cpp auto scanline(n16 y) -> void; auto render(n16 y) -> void; adaptive_array objects; n1 enable; n2 vramMode; //partially emulated struct Latch { n2 vramMode; } latch; struct Output { n4 color; n4 palette; n1 priority; } output[512]; } sprite; }; ares-126/ares/pce/vdp-performance/vdp.cpp000066400000000000000000000051701415063341600204120ustar00rootroot00000000000000#include namespace ares::PCEngine { VDP vdp; #include "vce.cpp" #include "vdc.cpp" #include "vpc.cpp" #include "irq.cpp" #include "dma.cpp" #include "background.cpp" #include "sprite.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { node = parent->append("VDP"); screen = node->append("Screen", 1365, 263); screen->colors(1 << 10, {&VDP::color, this}); screen->setSize(1024, 239); screen->setScale(0.25, 1.0); screen->setAspect(8.0, 7.0); vce.debugger.load(vce, parent); vdc0.debugger.load(vdc0, parent); if(Model::SuperGrafx()) vdc1.debugger.load(vdc1, parent); } auto VDP::unload() -> void { vce.debugger = {}; vdc0.debugger = {}; if(Model::SuperGrafx()) vdc1.debugger = {}; screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::main() -> void { vdc0.hsync(); if(Model::SuperGrafx()) vdc1.hsync(); if(io.vcounter == 0) { vdc0.vsync(); if(Model::SuperGrafx()) vdc1.vsync(); } step(512); vdc0.hclock(); if(Model::SuperGrafx()) vdc1.hclock(); if(io.vcounter >= 21 && io.vcounter < 239 + 21) { auto line = screen->pixels().data() + 1365 * io.vcounter; auto clock = vce.clock(); if(Model::SuperGrafx() == 0) { for(u32 x : range(vce.width())) { u32 color = vce.io.grayscale << 9 | vce.cram.read(vdc0.output[x]); switch(clock) { case 4: *line++ = color; case 3: *line++ = color; case 2: *line++ = color; case 1: *line++ = color; } } } if(Model::SuperGrafx() == 1) { vpc.render(); for(u32 x : range(vce.width())) { u32 color = vce.io.grayscale << 9 | vce.cram.read(vpc.output[x]); switch(clock) { case 4: *line++ = color; case 3: *line++ = color; case 2: *line++ = color; case 1: *line++ = color; } } } } step(1365 - io.hcounter); vdc0.vclock(); if(Model::SuperGrafx()) vdc1.vclock(); io.hcounter = 0; if(++io.vcounter >= 262 + vce.io.extraLine) { io.vcounter = 0; screen->setViewport(0, 21, 1024, 239); screen->frame(); scheduler.exit(Event::Frame); } } auto VDP::step(u32 clocks) -> void { io.hcounter += clocks; vdc0.dma.step(clocks); if(Model::SuperGrafx()) vdc1.dma.step(clocks); Thread::step(clocks); synchronize(cpu); } auto VDP::power() -> void { Thread::create(system.colorburst() * 6.0, {&VDP::main, this}); screen->power(); vce.power(); vdc0.power(); if(Model::SuperGrafx()) vdc1.power(); if(Model::SuperGrafx()) vpc.power(); } } ares-126/ares/pce/vdp-performance/vdp.hpp000066400000000000000000000011161415063341600204130ustar00rootroot00000000000000#include "vce.hpp" #include "vdc.hpp" #include "vpc.hpp" struct VDP : Thread { Node::Object node; Node::Video::Screen screen; auto irqLine() const -> bool { return vdc0.irqLine() | vdc1.irqLine(); } //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; VCE vce; VDC vdc0; VDC vdc1; VPC vpc; struct IO { n16 hcounter; n16 vcounter; } io; }; extern VDP vdp; ares-126/ares/pce/vdp-performance/vpc.cpp000066400000000000000000000111331415063341600204050ustar00rootroot00000000000000auto VPC::render() -> void { for(u32 x : range(vdp.vce.width())) { auto bus0 = vdp.vdc0.output[x]; auto bus1 = vdp.vdc1.output[x]; //todo: windowing test doesn't work exactly as it should ... hard-coded for now bool window0 = window[0] >= 64 && (window[0] - 64) >= x * vdp.vce.clock() / 2; bool window1 = window[1] >= 64 && (window[1] - 64) >= x * vdp.vce.clock() / 2; n2 mode = !window0 << 0 | !window1 << 1; bool enableVDC0 = settings[mode].enableVDC0 && bus0.bit(0,3); bool enableVDC1 = settings[mode].enableVDC1 && bus1.bit(0,3); auto priority = settings[mode].priority; if(priority == 0 || priority == 3) { //SP0 > BG0 > SP1 > BG1 if(bus0.bit(8) == 1 && enableVDC0) { output[x] = bus0; continue; } if(bus0.bit(8) == 0 && enableVDC0) { output[x] = bus0; continue; } if(bus1.bit(8) == 1 && enableVDC1) { output[x] = bus1; continue; } if(bus1.bit(8) == 0 && enableVDC1) { output[x] = bus1; continue; } } if(priority == 1) { //SP0 > SP1 > BG0 > BG1 if(bus0.bit(8) == 1 && enableVDC0) { output[x] = bus0; continue; } if(bus1.bit(8) == 1 && enableVDC1) { output[x] = bus1; continue; } if(bus0.bit(8) == 0 && enableVDC0) { output[x] = bus0; continue; } if(bus1.bit(8) == 0 && enableVDC1) { output[x] = bus1; continue; } } if(priority == 2) { //BG0 > SP1 > BG1 > SP0 if(bus0.bit(8) == 0 && enableVDC0) { output[x] = bus0; continue; } if(bus1.bit(8) == 1 && enableVDC1) { output[x] = bus1; continue; } if(bus1.bit(8) == 0 && enableVDC1) { output[x] = bus1; continue; } if(bus0.bit(8) == 1 && enableVDC0) { output[x] = bus0; continue; } } output[x] = 0x000; } } auto VPC::read(n5 address) -> n8 { if(address >= 0x00 && address <= 0x07) return vdp.vdc0.read(address); if(address >= 0x10 && address <= 0x17) return vdp.vdc1.read(address); if(address >= 0x18 && address <= 0x1f) return 0xff; n8 data = 0x00; if(address == 0x08) { data.bit(0) = settings[0].enableVDC0; data.bit(1) = settings[0].enableVDC1; data.bit(2,3) = settings[0].priority; data.bit(4) = settings[1].enableVDC0; data.bit(5) = settings[1].enableVDC1; data.bit(6,7) = settings[1].priority; return data; } if(address == 0x09) { data.bit(0) = settings[2].enableVDC0; data.bit(1) = settings[2].enableVDC1; data.bit(2,3) = settings[2].priority; data.bit(4) = settings[3].enableVDC0; data.bit(5) = settings[3].enableVDC1; data.bit(6,7) = settings[3].priority; return data; } if(address == 0x0a) { data.bit(0,7) = window[0].bit(0,7); return data; } if(address == 0x0b) { data.bit(0,1) = window[0].bit(8,9); return data; } if(address == 0x0c) { data.bit(0,7) = window[1].bit(0,7); return data; } if(address == 0x0d) { data.bit(0,1) = window[1].bit(8,9); return data; } if(address == 0x0e) { //select is not readable return data; } if(address == 0x0f) { //unused return data; } unreachable; } auto VPC::write(n5 address, n8 data) -> void { if(address >= 0x00 && address <= 0x07) return vdp.vdc0.write(address, data); if(address >= 0x10 && address <= 0x17) return vdp.vdc1.write(address, data); if(address >= 0x18 && address <= 0x1f) return; if(address == 0x08) { settings[0].enableVDC0 = data.bit(0); settings[0].enableVDC1 = data.bit(1); settings[0].priority = data.bit(2,3); settings[1].enableVDC0 = data.bit(4); settings[1].enableVDC1 = data.bit(5); settings[1].priority = data.bit(6,7); return; } if(address == 0x09) { settings[2].enableVDC0 = data.bit(0); settings[2].enableVDC1 = data.bit(1); settings[2].priority = data.bit(2,3); settings[3].enableVDC0 = data.bit(4); settings[3].enableVDC1 = data.bit(5); settings[3].priority = data.bit(6,7); return; } if(address == 0x0a) { window[0].bit(0,7) = data.bit(0,7); return; } if(address == 0x0b) { window[0].bit(8,9) = data.bit(0,1); return; } if(address == 0x0c) { window[1].bit(0,7) = data.bit(0,7); return; } if(address == 0x0d) { window[1].bit(8,9) = data.bit(0,1); return; } if(address == 0x0e) { select = data.bit(0); return; } if(address == 0x0f) { //unused return; } } auto VPC::store(n2 address, n8 data) -> void { if(select == 0) return vdp.vdc0.write(address, data); if(select == 1) return vdp.vdc1.write(address, data); } auto VPC::power() -> void { settings[0] = {}; settings[1] = {}; settings[2] = {}; settings[3] = {}; window[0] = 0; window[1] = 0; select = 0; } ares-126/ares/pce/vdp-performance/vpc.hpp000066400000000000000000000007161415063341600204170ustar00rootroot00000000000000//Hudson Soft HuC6202: Video Priority Controller struct VPC { //vpc.cpp auto render() -> void; auto read(n5 address) -> n8; auto write(n5 address, n8 data) -> void; auto store(n2 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n9 output[512]; struct Settings { n1 enableVDC0 = 1; n1 enableVDC1 = 0; n2 priority = 0; } settings[4]; n10 window[2]; n1 select; }; ares-126/ares/pce/vdp/000077500000000000000000000000001415063341600146135ustar00rootroot00000000000000ares-126/ares/pce/vdp/background.cpp000066400000000000000000000021171415063341600174370ustar00rootroot00000000000000auto VDC::Background::scanline(u32 y) -> void { if(y == 0) { vcounter = vscroll; } else { vcounter++; } hoffset = hscroll; voffset = vcounter; } auto VDC::Background::run(u32 x, u32 y) -> void { color = 0; palette = 0; if(!enable) return; n8 tileX = hoffset >> 3 & width - 1; n8 tileY = voffset >> 3 & height - 1; n16 attributes = vdc->vram.read(tileY * width + tileX); n16 patternAddress = attributes.bit(0,11) << 4 | (n3)voffset; n4 palette = attributes.bit(12,15); n16 d0 = 0, d1 = 0; if(latch.vramMode != 3) { d0 = vdc->vram.read(patternAddress + 0); d1 = vdc->vram.read(patternAddress + 8); } if(latch.vramMode == 3) { if(latch.characterMode == 0) d0 = vdc->vram.read(patternAddress + 0); if(latch.characterMode == 1) d0 = vdc->vram.read(patternAddress + 8); } n3 index = ~hoffset; n4 color; color.bit(0) = d0.bit(0 + index); color.bit(1) = d0.bit(8 + index); color.bit(2) = d1.bit(0 + index); color.bit(3) = d1.bit(8 + index); if(color) { this->color = color; this->palette = palette; } hoffset++; } ares-126/ares/pce/vdp/color.cpp000066400000000000000000000006661415063341600164450ustar00rootroot00000000000000auto VDP::color(n32 color) -> n64 { n3 B = color.bit(0,2); n3 R = color.bit(3,5); n3 G = color.bit(6,8); n1 M = color.bit(9); n64 r = image::normalize(R, 3, 16); n64 g = image::normalize(G, 3, 16); n64 b = image::normalize(B, 3, 16); if(M == 0) { //color return r << 32 | g << 16 | b << 0; } else { //grayscale n64 l = r * 0.2126 + g * 0.7152 + b * 0.0722; return l << 32 | l << 16 | l << 0; } } ares-126/ares/pce/vdp/debugger.cpp000066400000000000000000000024451415063341600171100ustar00rootroot00000000000000auto VCE::Debugger::load(VCE& vce, Node::Object parent) -> void { memory.cram = parent->append("VCE CRAM"); memory.cram->setSize(0x200 << 1); memory.cram->setRead([&](u32 address) -> u8 { return vce.cram.memory[n9(address >> 1)].byte(address & 1); }); memory.cram->setWrite([&](u32 address, u8 data) -> void { vce.cram.memory[n9(address >> 1)].byte(address & 1) = data; }); } auto VDC::Debugger::load(VDC& vdc, Node::Object parent) -> void { string vdcID = "VDC"; if(Model::SuperGrafx()) vdcID = &vdc == &vdp.vdc0 ? "VDC0" : "VDC1"; memory.vram = parent->append(string{vdcID, " VRAM"}); memory.vram->setSize(32_KiB << 1); memory.vram->setRead([&](u32 address) -> u8 { return vdc.vram.memory[n15(address >> 1)].byte(address & 1); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { vdc.vram.memory[n15(address >> 1)].byte(address & 1) = data; }); memory.satb = parent->append(string{vdcID, " SATB"}); memory.satb->setSize(0x100 << 1); memory.satb->setRead([&](u32 address) -> u8 { return vdc.satb.memory[n8(address >> 1)].byte(address & 1); }); memory.satb->setWrite([&](u32 address, u8 data) -> void { vdc.satb.memory[n8(address >> 1)].byte(address & 1) = data; }); } ares-126/ares/pce/vdp/dma.cpp000066400000000000000000000022661415063341600160660ustar00rootroot00000000000000auto VDC::DMA::step(u32 clocks) -> void { do { if(!vramActive && !satbActive) break; if(vramActive) { if(!vdc->burstMode()) { //terminate transfer early if VRAM DMA runs into active display area vramActive = 0; vdc->irq.raise(VDC::IRQ::Line::TransferVRAM); continue; } n16 data = vdc->vram.read(source); vdc->vram.write(target, data); sourceIncrementMode == 0 ? source++ : source--; targetIncrementMode == 0 ? target++ : target--; if(!length--) { vramActive = 0; vdc->irq.raise(VDC::IRQ::Line::TransferVRAM); } continue; } if(satbActive) { n16 data = vdc->vram.read(satbSource + satbOffset); vdc->satb.write(satbOffset, data); if(!++satbOffset) { satbActive = 0; vdc->irq.raise(VDC::IRQ::Line::TransferSATB); } continue; } } while(--clocks); } auto VDC::DMA::vramStart() -> void { if(vdc->burstMode()) { vramActive = 1; } } auto VDC::DMA::satbStart() -> void { if(satbPending || satbRepeat) { satbPending = 0; satbActive = 1; satbOffset = 0; } } auto VDC::DMA::satbQueue() -> void { satbPending = 1; } ares-126/ares/pce/vdp/irq.cpp000066400000000000000000000017151415063341600161160ustar00rootroot00000000000000auto VDC::IRQ::poll() -> void { n1 pending = 0; pending |= collision.pending; pending |= overflow.pending; pending |= coincidence.pending; pending |= vblank.pending; pending |= transferVRAM.pending; pending |= transferSATB.pending; line = pending; } auto VDC::IRQ::raise(Line line) -> void { if(line == Line::Collision && collision.enable) collision.pending = 1; if(line == Line::Overflow && overflow.enable) overflow.pending = 1; if(line == Line::Coincidence && coincidence.enable) coincidence.pending = 1; if(line == Line::Vblank && vblank.enable) vblank.pending = 1; if(line == Line::TransferVRAM && transferVRAM.enable) transferVRAM.pending = 1; if(line == Line::TransferSATB && transferSATB.enable) transferSATB.pending = 1; poll(); } auto VDC::IRQ::lower() -> void { collision.pending = 0; overflow.pending = 0; coincidence.pending = 0; vblank.pending = 0; transferVRAM.pending = 0; transferSATB.pending = 0; line = 0; } ares-126/ares/pce/vdp/serialization.cpp000066400000000000000000000054301415063341600201760ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { Thread::serialize(s); s(vce); s(vdc0); if(Model::SuperGrafx()) s(vdc1); if(Model::SuperGrafx()) s(vpc); s(io.hcounter); s(io.vcounter); } auto VCE::serialize(serializer& s) -> void { s(cram.memory); s(cram.address); s(io.clock); s(io.extraLine); s(io.grayscale); } auto VDC::serialize(serializer& s) -> void { s(output); s(vram.memory); s(vram.addressRead); s(vram.addressWrite); s(vram.addressIncrement); s(vram.dataRead); s(vram.dataWrite); s(satb.memory); s(irq.line); s(irq.collision.enable); s(irq.collision.pending); s(irq.overflow.enable); s(irq.overflow.pending); s(irq.coincidence.enable); s(irq.coincidence.pending); s(irq.vblank.enable); s(irq.vblank.pending); s(irq.transferVRAM.enable); s(irq.transferVRAM.pending); s(irq.transferSATB.enable); s(irq.transferSATB.pending); s(dma.sourceIncrementMode); s(dma.targetIncrementMode); s(dma.satbRepeat); s(dma.source); s(dma.target); s(dma.length); s(dma.satbSource); s(dma.vramActive); s(dma.satbActive); s(dma.satbPending); s(dma.satbOffset); s(timing.horizontalSyncWidth); s(timing.horizontalDisplayStart); s(timing.horizontalDisplayWidth); s(timing.horizontalDisplayEnd); s(timing.verticalSyncWidth); s(timing.verticalDisplayStart); s(timing.verticalDisplayWidth); s(timing.verticalDisplayEnd); s(timing.hstate); s(timing.vstate); s(timing.hoffset); s(timing.voffset); s(timing.coincidence); s(latch.horizontalSyncWidth); s(latch.horizontalDisplayStart); s(latch.horizontalDisplayWidth); s(latch.horizontalDisplayEnd); s(latch.verticalSyncWidth); s(latch.verticalDisplayStart); s(latch.verticalDisplayWidth); s(latch.verticalDisplayEnd); s(io.address); s(io.externalSync); s(io.displayOutput); s(io.dramRefresh); s(io.coincidence); s(background.enable); s(background.vramMode); s(background.characterMode); s(background.hscroll); s(background.vscroll); s(background.vcounter); s(background.width); s(background.height); s(background.hoffset); s(background.voffset); s(background.color); s(background.palette); s(background.latch.vramMode); s(background.latch.characterMode); //todo: serialize array s(sprite.enable); s(sprite.vramMode); s(sprite.color); s(sprite.palette); s(sprite.priority); s(sprite.latch.vramMode); s(random); } auto VDC::Object::serialize(serializer& s) -> void { s(y); s(x); s(characterMode); s(pattern); s(palette); s(priority); s(width); s(height); s(hflip); s(vflip); s(first); } auto VPC::serialize(serializer& s) -> void { for(auto& setting : settings) { s(setting.enableVDC0); s(setting.enableVDC1); s(setting.priority); } s(window); s(select); } ares-126/ares/pce/vdp/sprite.cpp000066400000000000000000000063051415063341600166310ustar00rootroot00000000000000auto VDC::Sprite::scanline(u32 y) -> void { objects.reset(); if(!enable) return; y += 64; static const u32 widths [2] = {15, 31}; static const u32 heights[4] = {15, 31, 63, 63}; u32 count = 0; for(u32 index : range(64)) { n16 d0 = vdc->satb.read(index << 2 | 0); n16 d1 = vdc->satb.read(index << 2 | 1); n16 d2 = vdc->satb.read(index << 2 | 2); n16 d3 = vdc->satb.read(index << 2 | 3); Object object; object.y = d0.bit(0,9); object.height = heights[d3.bit(12,13)]; if(y < object.y) continue; if(y > object.y + object.height) continue; object.x = d1.bit(0,9); object.characterMode = d2.bit(0); object.pattern = d2.bit(1,10); object.palette = d3.bit(0,3); object.priority = d3.bit(7); object.width = widths[d3.bit(8)]; object.hflip = d3.bit(11); object.vflip = d3.bit(15); object.first = index == 0; if(object.width == 31) object.pattern.bit(0) = 0; if(object.height == 31) object.pattern.bit(1) = 0; if(object.height == 63) object.pattern.bit(1,2) = 0; if(object.width == 15) { objects.append(object); if(++count >= 16) return vdc->irq.raise(VDC::IRQ::Line::Overflow); } else { //32-width sprites count as two 16-width sprite slots object.pattern ^= object.hflip; object.width = 15; objects.append(object); if(++count >= 16) return vdc->irq.raise(VDC::IRQ::Line::Overflow); object.x += 16; object.pattern ^= 1; objects.append(object); if(++count >= 16) return vdc->irq.raise(VDC::IRQ::Line::Overflow); } } } auto VDC::Sprite::run(u32 x, u32 y) -> void { color = 0; palette = 0; priority = 0; if(!enable) return; x += 32; y += 64; bool first = false; for(auto& object : objects) { if(x < object.x) continue; if(x > object.x + object.width) continue; n10 hoffset = x - object.x; n10 voffset = y - object.y; if(object.hflip) hoffset ^= object.width; if(object.vflip) voffset ^= object.height; n16 patternAddress = object.pattern; patternAddress += (voffset >> 4) << 1; patternAddress += (hoffset >> 4); patternAddress <<= 6; patternAddress += (voffset & 15); n16 d0 = 0, d1 = 0, d2 = 0, d3 = 0; if(latch.vramMode != 1) { d0 = vdc->vram.read(patternAddress + 0); d1 = vdc->vram.read(patternAddress + 16); d2 = vdc->vram.read(patternAddress + 32); d3 = vdc->vram.read(patternAddress + 48); } if(latch.vramMode == 1) { if(object.characterMode == 0) { d0 = vdc->vram.read(patternAddress + 0); d1 = vdc->vram.read(patternAddress + 16); } if(object.characterMode == 1) { d0 = vdc->vram.read(patternAddress + 32); d1 = vdc->vram.read(patternAddress + 48); } } n4 index = 15 - (hoffset & 15); n4 color; color.bit(0) = d0.bit(index); color.bit(1) = d1.bit(index); color.bit(2) = d2.bit(index); color.bit(3) = d3.bit(index); if(!color) continue; if(this->color) { if(first) return vdc->irq.raise(VDC::IRQ::Line::Collision); return; } if(object.first) first = true; this->color = color; this->palette = object.palette; this->priority = object.priority; } } ares-126/ares/pce/vdp/vce.cpp000066400000000000000000000026361415063341600161030ustar00rootroot00000000000000auto VCE::read(n3 address) -> n8 { cpu.idle(); //penalty cycle n8 data = 0xff; if(address == 0x4) { //CTR data.bit(0,7) = cram.read(cram.address).bit(0,7); return data; } if(address == 0x5) { //CTR data.bit(0) = cram.read(cram.address).bit(8); cram.address++; return data; } return data; } auto VCE::write(n3 address, n8 data) -> void { cpu.idle(); //penalty cycle if(address == 0x0) { //CR if(data.bit(0,1) == 0) io.clock = 4; if(data.bit(0,1) == 1) io.clock = 3; if(data.bit(0,1) == 2) io.clock = 2; if(data.bit(0,1) == 3) io.clock = 2; io.extraLine = data.bit(2); io.grayscale = data.bit(7); return; } if(address == 0x2) { //CTA cram.address.bit(0,7) = data.bit(0,7); return; } if(address == 0x3) { //CTA cram.address.bit(8) = data.bit(0); return; } if(address == 0x4) { //CTW cram.write(cram.address, 0, data.bit(0,7)); return; } if(address == 0x5) { //CTW cram.write(cram.address, 1, data.bit(0)); cram.address++; return; } } auto VCE::power() -> void { for(auto& data : cram.memory) data = 0; cram.address = 0; io = {}; } auto VCE::CRAM::read(n9 address) -> n9 { return memory[address]; } auto VCE::CRAM::write(n9 address, n1 a0, n8 data) -> void { if(a0 == 0) memory[address].bit(0,7) = data.bit(0,7); if(a0 == 1) memory[address].bit(8) = data.bit(0); } ares-126/ares/pce/vdp/vce.hpp000066400000000000000000000012631415063341600161030ustar00rootroot00000000000000//Hudson Soft HuC6260: Video Color Encoder struct VCE { struct Debugger { //debugger.cpp auto load(VCE&, Node::Object) -> void; struct Memory { Node::Debugger::Memory cram; } memory; } debugger; auto clock() const -> u32 { return io.clock; } //vce.cpp auto read(n3 address) -> n8; auto write(n3 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct CRAM { //vce.cpp auto read(n9 address) -> n9; auto write(n9 address, n1 a0, n8 data) -> void; n9 memory[0x200]; n9 address; } cram; struct IO { n8 clock = 4; n1 extraLine; n1 grayscale; } io; }; ares-126/ares/pce/vdp/vdc.cpp000066400000000000000000000222741415063341600161020ustar00rootroot00000000000000auto VDC::hsync() -> void { timing.hstate = HDS; timing.hoffset = 0; latch.horizontalDisplayStart = max(2, timing.horizontalDisplayStart) + 1 << 3; latch.horizontalDisplayWidth = timing.horizontalDisplayWidth + 1 << 3; latch.horizontalDisplayEnd = timing.horizontalDisplayEnd + 1 << 3; latch.horizontalSyncWidth = timing.horizontalSyncWidth + 1 << 3; background.latch.characterMode = background.characterMode; } auto VDC::vsync() -> void { timing.vstate = VSW; timing.voffset = 0; latch.verticalSyncWidth = timing.verticalSyncWidth + 1; latch.verticalDisplayStart = timing.verticalDisplayStart + 2; latch.verticalDisplayWidth = timing.verticalDisplayWidth + 1; latch.verticalDisplayEnd = timing.verticalDisplayEnd; //ensure that Vblank IRQs always occur each frame if(latch.verticalSyncWidth + latch.verticalDisplayStart + latch.verticalDisplayWidth > 261) { latch.verticalDisplayWidth = 261 - latch.verticalSyncWidth - latch.verticalDisplayStart; } latch.burstMode = !background.enable && !sprite.enable; } auto VDC::hclock() -> void { output = 0x100; //blanking area backdrop color if(timing.vstate == VDW && timing.hstate == HDW && !burstMode()) { background.run(timing.hoffset, timing.voffset); sprite.run(timing.hoffset, timing.voffset); if(sprite.color && sprite.priority) { output = sprite.color << 0 | sprite.palette << 4 | 1 << 8; } else if(background.color) { output = background.color << 0 | background.palette << 4 | 0 << 8; } else if(sprite.color) { output = sprite.color << 0 | sprite.palette << 4 | 1 << 8; } else { output = 0x000; //active display backdrop color } } timing.hoffset++; switch(timing.hstate) { case HDS: if(timing.hoffset >= latch.horizontalDisplayStart) { timing.hstate = HDW; timing.hoffset = 0; background.scanline(timing.voffset); sprite.scanline(timing.voffset); } break; case HDW: //this is said to happen 4 cycles before HDW ends; //however, anything less than 40 cycles causes severe graphics issues in games if(timing.hoffset == latch.horizontalDisplayWidth - 40) { if(timing.coincidence++ == io.coincidence) irq.raise(IRQ::Line::Coincidence); } if(timing.hoffset >= latch.horizontalDisplayWidth) { timing.hstate = HDE; timing.hoffset = 0; } break; case HDE: if(timing.hoffset >= latch.horizontalDisplayEnd) { timing.hstate = HSW; timing.hoffset = 0; } break; case HSW: if(timing.hoffset >= latch.horizontalSyncWidth) { timing.hstate = HDS; timing.hoffset = 0; } break; } } auto VDC::vclock() -> void { timing.voffset++; switch(timing.vstate) { case VSW: if(timing.voffset >= latch.verticalSyncWidth) { timing.vstate = VDS; timing.voffset = 0; } break; case VDS: if(timing.voffset >= latch.verticalDisplayStart) { timing.vstate = VDW; timing.voffset = 0; timing.coincidence = 64; } break; case VDW: if(timing.voffset >= latch.verticalDisplayWidth) { timing.vstate = VCR; timing.voffset = 0; background.latch.vramMode = background.vramMode; sprite.latch.vramMode = sprite.vramMode; irq.raise(IRQ::Line::Vblank); dma.satbStart(); } break; case VCR: if(timing.voffset >= latch.verticalDisplayEnd) { timing.vstate = VSW; timing.voffset = 0; } break; } } auto VDC::read(n2 address) -> n8 { if(!burstMode()) cpu.idle(); //penalty cycle n8 data = 0x00; if(address == 0x0) { //SR data.bit(0) = irq.collision.pending; data.bit(1) = irq.overflow.pending; data.bit(2) = irq.coincidence.pending; data.bit(3) = irq.transferSATB.pending; data.bit(4) = irq.transferVRAM.pending; data.bit(5) = irq.vblank.pending; data.bit(6) = 0; //busy irq.lower(); return data; } if(address == 0x1) { //unmapped return data; } n1 a0 = address.bit(0); if(io.address == 0x02) { //VRR data = vram.dataRead.byte(a0); if(a0 == 1) { vram.addressRead += vram.addressIncrement; while(dma.vramActive || dma.satbActive) cpu.idle(); vram.dataRead = vram.read(vram.addressRead); } return data; } return data; } auto VDC::write(n2 address, n8 data) -> void { if(!burstMode()) cpu.idle(); //penalty cycle if(address == 0x0) { //AR io.address = data.bit(0,4); return; } if(address == 0x1) { //unmapped return; } n1 a0 = address.bit(0); if(io.address == 0x00) { //MAWR vram.addressWrite.byte(a0) = data; return; } if(io.address == 0x01) { //MARR vram.addressRead.byte(a0) = data; while(dma.vramActive || dma.satbActive) cpu.idle(); vram.dataRead = vram.read(vram.addressRead); return; } if(io.address == 0x02) { //VWR vram.dataWrite.byte(a0) = data; if(a0 == 1) { while(dma.vramActive || dma.satbActive) cpu.idle(); vram.write(vram.addressWrite, vram.dataWrite); vram.addressWrite += vram.addressIncrement; } return; } if(io.address == 0x05) { //CR if(a0 == 0) { irq.collision.enable = data.bit(0); irq.overflow.enable = data.bit(1); irq.coincidence.enable = data.bit(2); irq.vblank.enable = data.bit(3); io.externalSync = data.bit(4,5); sprite.enable = data.bit(6); background.enable = data.bit(7); irq.poll(); } if(a0 == 1) { io.displayOutput = data.bit(0,1); io.dramRefresh = data.bit(2); if(data.bit(3,4) == 0) vram.addressIncrement = 0x01; if(data.bit(3,4) == 1) vram.addressIncrement = 0x20; if(data.bit(3,4) == 2) vram.addressIncrement = 0x40; if(data.bit(3,4) == 3) vram.addressIncrement = 0x80; } return; } if(io.address == 0x06) { //RCR if(a0 == 0) io.coincidence.bit(0,7) = data.bit(0,7); if(a0 == 1) io.coincidence.bit(8,9) = data.bit(0,1); return; } if(io.address == 0x07) { //BXR if(a0 == 0) background.hscroll.bit(0,7) = data.bit(0,7); if(a0 == 1) background.hscroll.bit(8,9) = data.bit(0,1); return; } if(io.address == 0x08) { //BYR if(a0 == 0) background.vscroll.bit(0,7) = data.bit(0,7); if(a0 == 1) background.vscroll.bit(8) = data.bit(0); background.vcounter = background.vscroll; //updated on both even and odd writes return; } if(io.address == 0x09) { //MWR if(a0 == 1) return; background.vramMode = data.bit(0,1); sprite.vramMode = data.bit(2,3); if(data.bit(4,5) == 0) background.width = 32; if(data.bit(4,5) == 1) background.width = 64; if(data.bit(4,5) == 2) background.width = 128; if(data.bit(4,5) == 3) background.width = 128; if(data.bit(6) == 0) background.height = 32; if(data.bit(6) == 1) background.height = 64; background.characterMode = data.bit(7); return; } if(io.address == 0x0a) { //HSR if(a0 == 0) timing.horizontalSyncWidth = data.bit(0,4); if(a0 == 1) timing.horizontalDisplayStart = data.bit(0,6); return; } if(io.address == 0x0b) { //HDR if(a0 == 0) timing.horizontalDisplayWidth = data.bit(0,6); if(a0 == 1) timing.horizontalDisplayEnd = data.bit(0,6); return; } if(io.address == 0x0c) { //VPR if(a0 == 0) timing.verticalSyncWidth = data.bit(0,4); if(a0 == 1) timing.verticalDisplayStart = data.bit(0,7); return; } if(io.address == 0x0d) { //VDR if(a0 == 0) timing.verticalDisplayWidth.bit(0,7) = data.bit(0,7); if(a0 == 1) timing.verticalDisplayWidth.bit(8) = data.bit(0); return; } if(io.address == 0x0e) { //VCR if(a0 == 0) timing.verticalDisplayEnd = data.bit(0,7); return; } if(io.address == 0x0f) { //DCR if(a0 == 1) return; irq.transferSATB.enable = data.bit(0); irq.transferVRAM.enable = data.bit(1); dma.sourceIncrementMode = data.bit(2); dma.targetIncrementMode = data.bit(3); dma.satbRepeat = data.bit(4); irq.poll(); return; } if(io.address == 0x10) { //SOUR dma.source.byte(a0) = data; return; } if(io.address == 0x11) { //DESR dma.target.byte(a0) = data; return; } if(io.address == 0x12) { //LENR dma.length.byte(a0) = data; if(a0 == 1) dma.vramStart(); return; } if(io.address == 0x13) { //DVSSR dma.satbSource.byte(a0) = data; dma.satbQueue(); return; } } auto VDC::power() -> void { random.entropy(Random::Entropy::High); output = 0; for(auto& data : vram.memory) data = 0; vram.addressRead = 0; vram.addressWrite = 0; vram.addressIncrement = 0x01; vram.dataRead = 0; vram.dataWrite = 0; for(auto& data : satb.memory) data = random(); irq = {}; dma = {}; timing = {}; background = {}; sprite = {}; dma.vdc = *this; background.vdc = *this; sprite.vdc = *this; } inline auto VDC::VRAM::read(n16 address) const -> n16 { if(address.bit(15)) return 0x0000; //todo: random data? return memory[address]; } inline auto VDC::VRAM::write(n16 address, n16 data) -> void { if(address.bit(15)) return; memory[address] = data; } inline auto VDC::SATB::read(n8 address) const -> n16 { return memory[address]; } inline auto VDC::SATB::write(n8 address, n16 data) -> void { memory[address] = data; } ares-126/ares/pce/vdp/vdc.hpp000066400000000000000000000077061415063341600161120ustar00rootroot00000000000000//Hudson Soft HuC6270: Video Display Controller struct VDC { struct Debugger { //debugger.cpp auto load(VDC&, Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory satb; } memory; } debugger; auto bus() const -> n9 { return output; } auto burstMode() const -> bool { return latch.burstMode || timing.vstate != VDW; } auto irqLine() const -> bool { return irq.line; } //vdc.cpp auto hsync() -> void; auto vsync() -> void; auto hclock() -> void; auto vclock() -> void; auto read(n2 address) -> n8; auto write(n2 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n9 output; struct VRAM { //vdc.cpp auto read(n16 address) const -> n16; auto write(n16 address, n16 data) -> void; n16 memory[0x8000]; n16 addressRead; n16 addressWrite; n16 addressIncrement = 0x01; n16 dataRead; n16 dataWrite; } vram; struct SATB { //vdc.cpp auto read(n8 address) const -> n16; auto write(n8 address, n16 data) -> void; n16 memory[0x100]; } satb; struct IRQ { enum class Line : u32 { Collision, Overflow, Coincidence, Vblank, TransferVRAM, TransferSATB, }; struct Source { n1 enable; n1 pending; }; //irq.cpp auto poll() -> void; auto raise(Line) -> void; auto lower() -> void; n1 line; Source collision; Source overflow; Source coincidence; Source vblank; Source transferVRAM; Source transferSATB; } irq; struct DMA { maybe vdc; //dma.cpp auto step(u32 clocks) -> void; auto vramStart() -> void; auto satbStart() -> void; auto satbQueue() -> void; n1 sourceIncrementMode; n1 targetIncrementMode; n1 satbRepeat; n16 source; n16 target; n16 length; n16 satbSource; n1 vramActive; n1 satbActive; n1 satbPending; n8 satbOffset; } dma; enum : u32 { HDS, HDW, HDE, HSW }; enum : u32 { VSW, VDS, VDW, VCR }; struct Timing { n5 horizontalSyncWidth = 2; n7 horizontalDisplayStart = 2; n7 horizontalDisplayWidth = 31; n7 horizontalDisplayEnd = 4; n5 verticalSyncWidth = 2; n8 verticalDisplayStart = 15; n9 verticalDisplayWidth = 239; n8 verticalDisplayEnd = 4; n8 hstate = HDS; n8 vstate = VSW; n16 hoffset; n16 voffset; n10 coincidence = 64; } timing; struct Latch { n16 horizontalSyncWidth; n16 horizontalDisplayStart; n16 horizontalDisplayWidth; n16 horizontalDisplayEnd; n16 verticalSyncWidth; n16 verticalDisplayStart; n16 verticalDisplayWidth; n16 verticalDisplayEnd; n1 burstMode = 1; } latch; struct IO { n5 address; n2 externalSync; n2 displayOutput; n1 dramRefresh; n10 coincidence; } io; struct Background { maybe vdc; //background.cpp auto scanline(u32 y) -> void; auto run(u32 x, u32 y) -> void; n1 enable; n2 vramMode; //partially emulated n1 characterMode; n10 hscroll; n9 vscroll; n9 vcounter; n8 width = 32; n8 height = 32; n10 hoffset; n9 voffset; n4 color; n4 palette; struct Latch { n2 vramMode; n1 characterMode; } latch; } background; struct Object { //serialization.cpp auto serialize(serializer&) -> void; n10 y; n10 x; n1 characterMode; n10 pattern; n4 palette; n1 priority; n8 width; n8 height; n1 hflip; n1 vflip; n1 first; }; struct Sprite { maybe vdc; //sprite.cpp auto scanline(u32 y) -> void; auto run(u32 x, u32 y) -> void; adaptive_array objects; n1 enable; n2 vramMode; //partially emulated n4 color; n4 palette; n1 priority; struct Latch { n2 vramMode; } latch; } sprite; Random random; }; ares-126/ares/pce/vdp/vdp.cpp000066400000000000000000000052441415063341600161150ustar00rootroot00000000000000#if defined(PROFILE_PERFORMANCE) #include "../vdp-performance/vdp.cpp" #else #include namespace ares::PCEngine { VDP vdp; #include "vce.cpp" #include "vdc.cpp" #include "vpc.cpp" #include "irq.cpp" #include "dma.cpp" #include "background.cpp" #include "sprite.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { node = parent->append("VDP"); screen = node->append("Screen", 1365, 263); screen->colors(1 << 10, {&VDP::color, this}); screen->setSize(1088, 239); screen->setScale(0.25, 1.0); screen->setAspect(8.0, 7.0); overscan = screen->append("Overscan", true, [&](auto value) { if(value == 0) screen->setSize(1024, 239); if(value == 1) screen->setSize(1088, 239); }); overscan->setDynamic(true); vce.debugger.load(vce, node); vdc0.debugger.load(vdc0, node); if(Model::SuperGrafx()) vdc1.debugger.load(vdc1, node); } auto VDP::unload() -> void { vce.debugger = {}; vdc0.debugger = {}; if(Model::SuperGrafx()) vdc1.debugger = {}; overscan.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::main() -> void { vdc0.hsync(); if(Model::SuperGrafx()) vdc1.hsync(); if(io.vcounter == 0) { vdc0.vsync(); if(Model::SuperGrafx()) vdc1.vsync(); } auto output = screen->pixels().data() + 1365 * io.vcounter; while(io.hcounter <= 1360) { vdc0.hclock(); if(Model::SuperGrafx()) vdc1.hclock(); n10 color; if(Model::SuperGrafx() == 0) color = vdc0.bus(); if(Model::SuperGrafx() == 1) color = vpc.bus(io.hcounter); color = vce.io.grayscale << 9 | vce.cram.read(color); switch(vce.clock()) { case 4: *output++ = color; case 3: *output++ = color; case 2: *output++ = color; case 1: *output++ = color; } step(vce.clock()); } step(1365 - io.hcounter); vdc0.vclock(); if(Model::SuperGrafx()) vdc1.vclock(); io.hcounter = 0; if(++io.vcounter >= 262 + vce.io.extraLine) { io.vcounter = 0; if(overscan->value() == 0) screen->setViewport(96, 21, 1024, 239); if(overscan->value() == 1) screen->setViewport(96, 21, 1088, 239); screen->frame(); scheduler.exit(Event::Frame); } } auto VDP::step(u32 clocks) -> void { io.hcounter += clocks; vdc0.dma.step(clocks); if(Model::SuperGrafx()) vdc1.dma.step(clocks); Thread::step(clocks); synchronize(cpu); } auto VDP::power() -> void { Thread::create(system.colorburst() * 6.0, {&VDP::main, this}); screen->power(); vce.power(); vdc0.power(); if(Model::SuperGrafx()) vdc1.power(); if(Model::SuperGrafx()) vpc.power(); } } #endif ares-126/ares/pce/vdp/vdp.hpp000066400000000000000000000013051415063341600161140ustar00rootroot00000000000000#if defined(PROFILE_PERFORMANCE) #include "../vdp-performance/vdp.hpp" #else #include "vce.hpp" #include "vdc.hpp" #include "vpc.hpp" struct VDP : Thread { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean overscan; auto irqLine() const -> bool { return vdc0.irqLine() | vdc1.irqLine(); } //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; VCE vce; VDC vdc0; VDC vdc1; VPC vpc; struct IO { n16 hcounter; n16 vcounter; } io; }; extern VDP vdp; #endif ares-126/ares/pce/vdp/vpc.cpp000066400000000000000000000105271415063341600161140ustar00rootroot00000000000000inline auto VPC::bus(n16 hcounter) const -> n9 { //bus values are direct CRAM entry indexes: //d0-d3 => color (0 = neither background nor sprite) //d4-d7 => palette //d8 => source (0 = background; 1 = sprite) auto bus0 = vdp.vdc0.bus(); auto bus1 = vdp.vdc1.bus(); bool window0 = window[0] >= 64 && (window[0] - 64) >= hcounter / 2; bool window1 = window[1] >= 64 && (window[1] - 64) >= hcounter / 2; n2 mode = !window0 << 0 | !window1 << 1; bool enableVDC0 = settings[mode].enableVDC0 && bus0.bit(0,3); bool enableVDC1 = settings[mode].enableVDC1 && bus1.bit(0,3); auto priority = settings[mode].priority; if(priority == 0 || priority == 3) { //SP0 > BG0 > SP1 > BG1 if(bus0.bit(8) == 1 && enableVDC0) return bus0; if(bus0.bit(8) == 0 && enableVDC0) return bus0; if(bus1.bit(8) == 1 && enableVDC1) return bus1; if(bus1.bit(8) == 0 && enableVDC1) return bus1; } if(priority == 1) { //SP0 > SP1 > BG0 > BG1 if(bus0.bit(8) == 1 && enableVDC0) return bus0; if(bus1.bit(8) == 1 && enableVDC1) return bus1; if(bus0.bit(8) == 0 && enableVDC0) return bus0; if(bus1.bit(8) == 0 && enableVDC1) return bus1; } if(priority == 2) { //BG0 > SP1 > BG1 > SP0 if(bus0.bit(8) == 0 && enableVDC0) return bus0; if(bus1.bit(8) == 1 && enableVDC1) return bus1; if(bus1.bit(8) == 0 && enableVDC1) return bus1; if(bus0.bit(8) == 1 && enableVDC0) return bus0; } return 0x000; } auto VPC::read(n5 address) -> n8 { if(address >= 0x00 && address <= 0x07) return vdp.vdc0.read(address); if(address >= 0x10 && address <= 0x17) return vdp.vdc1.read(address); if(address >= 0x18 && address <= 0x1f) return 0xff; n8 data = 0x00; if(address == 0x08) { data.bit(0) = settings[0].enableVDC0; data.bit(1) = settings[0].enableVDC1; data.bit(2,3) = settings[0].priority; data.bit(4) = settings[1].enableVDC0; data.bit(5) = settings[1].enableVDC1; data.bit(6,7) = settings[1].priority; return data; } if(address == 0x09) { data.bit(0) = settings[2].enableVDC0; data.bit(1) = settings[2].enableVDC1; data.bit(2,3) = settings[2].priority; data.bit(4) = settings[3].enableVDC0; data.bit(5) = settings[3].enableVDC1; data.bit(6,7) = settings[3].priority; return data; } if(address == 0x0a) { data.bit(0,7) = window[0].bit(0,7); return data; } if(address == 0x0b) { data.bit(0,1) = window[0].bit(8,9); return data; } if(address == 0x0c) { data.bit(0,7) = window[1].bit(0,7); return data; } if(address == 0x0d) { data.bit(0,1) = window[1].bit(8,9); return data; } if(address == 0x0e) { //select is not readable return data; } if(address == 0x0f) { //unused return data; } unreachable; } auto VPC::write(n5 address, n8 data) -> void { if(address >= 0x00 && address <= 0x07) return vdp.vdc0.write(address, data); if(address >= 0x10 && address <= 0x17) return vdp.vdc1.write(address, data); if(address >= 0x18 && address <= 0x1f) return; if(address == 0x08) { settings[0].enableVDC0 = data.bit(0); settings[0].enableVDC1 = data.bit(1); settings[0].priority = data.bit(2,3); settings[1].enableVDC0 = data.bit(4); settings[1].enableVDC1 = data.bit(5); settings[1].priority = data.bit(6,7); return; } if(address == 0x09) { settings[2].enableVDC0 = data.bit(0); settings[2].enableVDC1 = data.bit(1); settings[2].priority = data.bit(2,3); settings[3].enableVDC0 = data.bit(4); settings[3].enableVDC1 = data.bit(5); settings[3].priority = data.bit(6,7); return; } if(address == 0x0a) { window[0].bit(0,7) = data.bit(0,7); return; } if(address == 0x0b) { window[0].bit(8,9) = data.bit(0,1); return; } if(address == 0x0c) { window[1].bit(0,7) = data.bit(0,7); return; } if(address == 0x0d) { window[1].bit(8,9) = data.bit(0,1); return; } if(address == 0x0e) { select = data.bit(0); return; } if(address == 0x0f) { //unused return; } } auto VPC::store(n2 address, n8 data) -> void { if(select == 0) return vdp.vdc0.write(address, data); if(select == 1) return vdp.vdc1.write(address, data); } auto VPC::power() -> void { settings[0] = {}; settings[1] = {}; settings[2] = {}; settings[3] = {}; window[0] = 0; window[1] = 0; select = 0; } ares-126/ares/pce/vdp/vpc.hpp000066400000000000000000000007111415063341600161130ustar00rootroot00000000000000//Hudson Soft HuC6202: Video Priority Controller struct VPC { //vpc.cpp auto bus(n16 hcounter) const -> n9; auto read(n5 address) -> n8; auto write(n5 address, n8 data) -> void; auto store(n2 address, n8 data) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Settings { n1 enableVDC0 = 1; n1 enableVDC1 = 0; n2 priority = 0; } settings[4]; n10 window[2]; n1 select; }; ares-126/ares/ps1/000077500000000000000000000000001415063341600137565ustar00rootroot00000000000000ares-126/ares/ps1/GNUmakefile000066400000000000000000000022021415063341600160240ustar00rootroot00000000000000ares.components += m68hc05 ares.objects += ares-ps1-memory ares.objects += ares-ps1-system ares.objects += ares-ps1-disc ares.objects += ares-ps1-cpu ares.objects += ares-ps1-gpu ares.objects += ares-ps1-spu ares.objects += ares-ps1-mdec ares.objects += ares-ps1-interrupt ares.objects += ares-ps1-peripheral ares.objects += ares-ps1-dma ares.objects += ares-ps1-timer $(object.path)/ares-ps1-memory.o: $(ares.path)/ps1/memory/memory.cpp $(object.path)/ares-ps1-system.o: $(ares.path)/ps1/system/system.cpp $(object.path)/ares-ps1-disc.o: $(ares.path)/ps1/disc/disc.cpp $(object.path)/ares-ps1-cpu.o: $(ares.path)/ps1/cpu/cpu.cpp $(object.path)/ares-ps1-gpu.o: $(ares.path)/ps1/gpu/gpu.cpp $(object.path)/ares-ps1-spu.o: $(ares.path)/ps1/spu/spu.cpp $(object.path)/ares-ps1-mdec.o: $(ares.path)/ps1/mdec/mdec.cpp $(object.path)/ares-ps1-interrupt.o: $(ares.path)/ps1/interrupt/interrupt.cpp $(object.path)/ares-ps1-peripheral.o: $(ares.path)/ps1/peripheral/peripheral.cpp $(object.path)/ares-ps1-dma.o: $(ares.path)/ps1/dma/dma.cpp $(object.path)/ares-ps1-timer.o: $(ares.path)/ps1/timer/timer.cpp ares-126/ares/ps1/accuracy.hpp000066400000000000000000000013731415063341600162650ustar00rootroot00000000000000struct Accuracy { //enable all accuracy flags static constexpr bool Reference = 0; struct CPU { static constexpr bool Interpreter = 0 | Reference; static constexpr bool Recompiler = !Interpreter; //exceptions when the CPU accesses unaligned memory addresses static constexpr bool AddressErrors = 0 | Reference & !Recompiler; //exceptions when the CPU accesses unmapped memory addresses static constexpr bool BusErrors = 0 | Reference & !Recompiler; //breakpoints are expensive and not used by any commercial games static constexpr bool Breakpoints = 0 | Reference & !Recompiler; }; struct GPU { //performs GPU primitive rendering on a separate thread static constexpr bool Threaded = 1 & !Reference; }; }; ares-126/ares/ps1/cpu/000077500000000000000000000000001415063341600145455ustar00rootroot00000000000000ares-126/ares/ps1/cpu/breakpoints.cpp000066400000000000000000000043561415063341600176020ustar00rootroot00000000000000auto CPU::Breakpoint::testCode(u32 address) -> bool { lastPC = self.ipu.pc; if(!self.scc.breakpoint.enable.master) return false; if(!self.scc.breakpoint.enable.kernel && (address >> 31) == 1) return false; if(!self.scc.breakpoint.enable.user && (address >> 31) == 0) return false; if(!self.scc.breakpoint.test.code) return false; if((address ^ self.scc.breakpoint.address.code) & self.scc.breakpoint.mask.code) return false; bool triggered = false; if(self.scc.breakpoint.test.code) { self.scc.breakpoint.status.any = 1; self.scc.breakpoint.status.code = 1; triggered = true; } if(self.scc.breakpoint.test.trace && self.ipu.pc != lastPC + 4) { self.scc.breakpoint.status.any = 1; self.scc.breakpoint.status.trace = 1; triggered = true; } if(!triggered) return false; if(!self.scc.breakpoint.enable.trap) return false; if constexpr(Accuracy::CPU::AddressErrors) { if(address & 3) return self.exception.address(address), true; } self.exception.breakpoint(1); return true; } template auto CPU::Breakpoint::testData(u32 address) -> bool { if(!self.scc.breakpoint.enable.master) return false; if(!self.scc.breakpoint.enable.kernel && (address >> 31) == 1) return false; if(!self.scc.breakpoint.enable.user && (address >> 31) == 0) return false; if(!self.scc.breakpoint.test.data) return false; if constexpr(Mode == Read ) if(!self.scc.breakpoint.test.read ) return false; if constexpr(Mode == Write) if(!self.scc.breakpoint.test.write) return false; if((address ^ self.scc.breakpoint.address.data) & self.scc.breakpoint.mask.data) return false; self.scc.breakpoint.status.any = 1; self.scc.breakpoint.status.data = 1; if constexpr(Mode == Read ) self.scc.breakpoint.status.read = 1; if constexpr(Mode == Write) self.scc.breakpoint.status.write = 1; if(!self.scc.breakpoint.enable.trap) return false; if constexpr(Accuracy::CPU::AddressErrors) { if constexpr(Size == Half) { if(address & 1) return self.exception.address(address), true; } if constexpr(Size == Word) { if(address & 3) return self.exception.address(address), true; } } self.exception.breakpoint(1); self.scc.cause.coprocessorError = 0; return true; } ares-126/ares/ps1/cpu/cpu.cpp000066400000000000000000000137721415063341600160520ustar00rootroot00000000000000#include namespace ares::PlayStation { CPU cpu; #include "delay-slots.cpp" #include "memory.cpp" #include "icache.cpp" #include "exceptions.cpp" #include "breakpoints.cpp" #include "interpreter.cpp" #include "interpreter-ipu.cpp" #include "interpreter-scc.cpp" #include "interpreter-gte.cpp" #include "recompiler.cpp" #include "debugger.cpp" #include "serialization.cpp" #include "disassembler.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); ram.allocate(2_MiB); ram.setWaitStates(4, 4, 4); scratchpad.allocate(1_KiB); scratchpad.setWaitStates(0, 0, 0); gte.constructTable(); debugger.load(node); } auto CPU::unload() -> void { debugger = {}; scratchpad.reset(); ram.reset(); node.reset(); } auto CPU::main() -> void { instruction(); synchronize(); } auto CPU::step(u32 clocks) -> void { Thread::clock += clocks; } auto CPU::synchronize() -> void { timer.step(Thread::clock); gpu.clock -= Thread::clock; dma.clock -= Thread::clock; disc.clock -= Thread::clock; spu.clock -= Thread::clock; peripheral.clock -= Thread::clock; Thread::clock = 0; while(gpu.clock < 0) gpu.main(); while(dma.clock < 0) dma.main(); while(disc.clock < 0) disc.main(); while(spu.clock < 0) spu.main(); while(peripheral.clock < 0) peripheral.main(); } auto CPU::instruction() -> void { if constexpr(Accuracy::CPU::Interpreter) { if constexpr(Accuracy::CPU::Breakpoints) { if(unlikely(breakpoint.testCode(ipu.pc))) { return (void)instructionEpilogue(); } } if constexpr(Accuracy::CPU::AddressErrors) { if(unlikely(ipu.pc & 3)) { exception.address(ipu.pc); return (void)instructionEpilogue(); } } pipeline.address = ipu.pc; pipeline.instruction = fetch(ipu.pc); if(exception()) return (void)instructionEpilogue(); debugger.instruction(); decoderEXECUTE(); instructionEpilogue(); } if constexpr(Accuracy::CPU::Recompiler) { auto block = recompiler.block(ipu.pc); block->execute(*this); } } auto CPU::instructionEpilogue() -> bool { if constexpr(Accuracy::CPU::Recompiler) { icache.step(ipu.pc); //simulates timings without performing actual icache loads } ipu.pb = ipu.pc; ipu.pc = ipu.pd; ipu.pd = ipu.pd + 4; processDelayLoad(); processDelayBranch(); ipu.r[0] = 0; //it's faster to allow assigning to r0 and then clearing it later if(auto interrupts = exception.interruptsPending()) { debugger.interrupt(scc.cause.interruptPending); exception.interrupt(); } exception.triggered = 0; //the recompiler needs to know when branches occur to break execution of blocks early if(ipu.pb + 4 != ipu.pc) { debugger.message(); debugger.function(); return true; } return false; } auto CPU::instructionHook() -> void { //fast-boot or executable side-loading if(ipu.pd == 0x8003'0000) { if(!disc.cd || disc.audioCD()) { //todo: is it possible to fast boot into the BIOS menu here? } else if(disc.executable()) { if(auto fp = disc.pak->read("program.exe")) { Memory::Readable exe; exe.allocate(fp->size()); exe.load(fp); u32 pc = exe.readWord(0x10); u32 gp = exe.readWord(0x14); u32 target = exe.readWord(0x18) & ram.size - 1; u32 source = 2048; ipu.pd = pc; ipu.r[28] = gp; for(u32 address : range(exe.size - source)) { ram.writeByte(target + address, exe.readByte(source + address)); } } } else if(system.fastBoot->value()) { ipu.pd = ipu.r[31]; } } } auto CPU::power(bool reset) -> void { Thread::reset(); ram.fill(); scratchpad.fill(); pipeline = {}; delay = {}; icache.power(reset); exception.triggered = 0; breakpoint.lastPC = 0; for(auto& r : ipu.r) r = 0; ipu.lo = 0; ipu.hi = 0; ipu.pb = 0; ipu.pc = 0xbfc0'0000; ipu.pd = ipu.pc + 4; scc.breakpoint = {}; scc.targetAddress = 0; scc.badVirtualAddress = 0; scc.status = {}; scc.cause = {}; scc.epc = 0; gte.v.a.x = 0; gte.v.a.y = 0; gte.v.a.z = 0; gte.v.b.x = 0; gte.v.b.y = 0; gte.v.b.z = 0; gte.v.c.x = 0; gte.v.c.y = 0; gte.v.c.z = 0; gte.rgbc.r = 0; gte.rgbc.g = 0; gte.rgbc.b = 0; gte.rgbc.t = 0; gte.otz = 0; gte.ir.x = 0; gte.ir.y = 0; gte.ir.z = 0; gte.ir.t = 0; gte.screen[0].x = 0; gte.screen[0].y = 0; gte.screen[0].z = 0; gte.screen[1].x = 0; gte.screen[1].y = 0; gte.screen[1].z = 0; gte.screen[2].x = 0; gte.screen[2].y = 0; gte.screen[2].z = 0; gte.screen[3].x = 0; gte.screen[3].y = 0; gte.screen[3].z = 0; gte.rgb[0] = 0; gte.rgb[1] = 0; gte.rgb[2] = 0; gte.rgb[3] = 0; gte.mac.x = 0; gte.mac.y = 0; gte.mac.z = 0; gte.mac.t = 0; gte.lzcs = 0; gte.lzcr = 0; gte.rotation.a.x = 0; gte.rotation.a.y = 0; gte.rotation.a.z = 0; gte.rotation.b.x = 0; gte.rotation.b.y = 0; gte.rotation.b.z = 0; gte.rotation.c.x = 0; gte.rotation.c.y = 0; gte.rotation.c.z = 0; gte.translation.x = 0; gte.translation.y = 0; gte.translation.z = 0; gte.light.a.x = 0; gte.light.a.y = 0; gte.light.a.z = 0; gte.light.b.x = 0; gte.light.b.y = 0; gte.light.b.z = 0; gte.light.c.x = 0; gte.light.c.y = 0; gte.light.c.z = 0; gte.backgroundColor.r = 0; gte.backgroundColor.g = 0; gte.backgroundColor.b = 0; gte.color.a.r = 0; gte.color.a.g = 0; gte.color.a.b = 0; gte.color.b.r = 0; gte.color.b.g = 0; gte.color.b.b = 0; gte.color.c.r = 0; gte.color.c.g = 0; gte.color.c.b = 0; gte.farColor.r = 0; gte.farColor.g = 0; gte.farColor.b = 0; gte.ofx = 0; gte.ofy = 0; gte.h = 0; gte.dqa = 0; gte.dqb = 0; gte.zsf3 = 0; gte.zsf4 = 0; gte.flag.value = 0; gte.lm = 0; gte.tv = 0; gte.mv = 0; gte.mm = 0; gte.sf = 0; if constexpr(Accuracy::CPU::Recompiler) { auto buffer = ares::Memory::FixedAllocator::get().acquire(512_MiB); recompiler.allocator.resize(512_MiB, bump_allocator::executable | bump_allocator::zero_fill, buffer); recompiler.reset(); } } } ares-126/ares/ps1/cpu/cpu.hpp000066400000000000000000000372061415063341600160550ustar00rootroot00000000000000//LSI CoreWare CW33300 (MIPS R3000A core) struct CPU : Thread { Node::Object node; Memory::Writable ram; Memory::Writable scratchpad; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto exception(u8 code) -> void; auto interrupt(u8 mask) -> void; auto message() -> void; auto function() -> void; struct Memory { Node::Debugger::Memory ram; Node::Debugger::Memory scratchpad; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification exception; Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification message; Node::Debugger::Tracer::Notification function; } tracer; private: auto messageChar(char) -> void; auto messageText(u32) -> void; } debugger; using cs32 = const s32; using cu32 = const u32; //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto synchronize() -> void; auto instruction() -> void; auto instructionEpilogue() -> bool; auto instructionHook() -> void; auto power(bool reset) -> void; struct Pipeline { u32 address = 0; u32 instruction = 0; } pipeline; //delay-slots.cpp struct Delay { //load delay slots struct { u32* target = nullptr; u32 source = 0; } load[2]; //branch delay slots struct Branch { n1 slot; n1 take; n32 address; } branch[2]; //interrupt delay counter u32 interrupt; } delay; auto load(u32& target) const -> u32; auto load(u32& target, u32 source) -> void; auto store(u32& target, u32 source) -> void; template auto branch(u32 address, bool take = true) -> void; auto processDelayLoad() -> void; auto processDelayBranch() -> void; //memory.cpp auto fetch(u32 address) -> u32; template auto read(u32 address) -> u32; template auto write(u32 address, u32 data) -> void; //icache.cpp struct InstructionCache { auto step(u32 address) -> void; auto fetch(u32 address) -> u32; auto read(u32 address) -> u32; auto invalidate(u32 address) -> void; auto enable(bool) -> void; auto power(bool reset) -> void; //4KB struct Line { u32 words[4]; u32 tag; } lines[256]; } icache; //exceptions.cpp struct Exception { CPU& self; Exception(CPU& self) : self(self) {} auto operator()() -> bool; auto trigger(u32 code) -> void; auto interruptsPending() -> u8; auto interrupt() -> void; template auto address(u32 address) -> void; auto busInstruction() -> void; auto busData() -> void; auto systemCall() -> void; auto breakpoint(bool overrideVectorLocation) -> void; auto reservedInstruction() -> void; auto coprocessor() -> void; auto arithmeticOverflow() -> void; auto trap() -> void; bool triggered; } exception{*this}; //breakpoints.cpp struct Breakpoint { CPU& self; Breakpoint(CPU& self) : self(self) {} auto testCode(u32 address) -> bool; template auto testData(u32 address) -> bool; u32 lastPC; } breakpoint{*this}; //serialization.cpp auto serialize(serializer&) -> void; struct IPU { CPU& self; IPU(CPU& self) : self(self) {} u32 r[32]; u32 lo; u32 hi; u32 pb; //previous PC u32 pc; //current PC u32 pd; //next PC } ipu{*this}; //interpreter-ipu.cpp auto ADD(u32& rd, cu32& rs, cu32& rt) -> void; auto ADDI(u32& rt, cu32& rs, s16 imm) -> void; auto ADDIU(u32& rt, cu32& rs, s16 imm) -> void; auto ADDU(u32& rd, cu32& rs, cu32& rt) -> void; auto AND(u32& rd, cu32& rs, cu32& rt) -> void; auto ANDI(u32& rt, cu32& rs, u16 imm) -> void; auto BEQ(cu32& rs, cu32& rt, s16 imm) -> void; auto BGEZ(cs32& rs, s16 imm) -> void; auto BGEZAL(cs32& rs, s16 imm) -> void; auto BGTZ(cs32& rs, s16 imm) -> void; auto BLEZ(cs32& rs, s16 imm) -> void; auto BLTZ(cs32& rs, s16 imm) -> void; auto BLTZAL(cs32& rs, s16 imm) -> void; auto BNE(cu32& rs, cu32& rt, s16 imm) -> void; auto BREAK() -> void; auto DIV(cs32& rs, cs32& rt) -> void; auto DIVU(cu32& rs, cu32& rt) -> void; auto J(u32 imm) -> void; auto JAL(u32 imm) -> void; auto JALR(u32& rd, cu32& rs) -> void; auto JR(cu32& rs) -> void; auto LB(u32& rt, cu32& rs, s16 imm) -> void; auto LBU(u32& rt, cu32& rs, s16 imm) -> void; auto LH(u32& rt, cu32& rs, s16 imm) -> void; auto LHU(u32& rt, cu32& rs, s16 imm) -> void; auto LUI(u32& rt, u16 imm) -> void; auto LW(u32& rt, cu32& rs, s16 imm) -> void; auto LWL(u32& rt, cu32& rs, s16 imm) -> void; auto LWR(u32& rt, cu32& rs, s16 imm) -> void; auto MFHI(u32& rd) -> void; auto MFLO(u32& rd) -> void; auto MTHI(cu32& rs) -> void; auto MTLO(cu32& rs) -> void; auto MULT(cs32& rs, cs32& rt) -> void; auto MULTU(cu32& rs, cu32& rt) -> void; auto NOR(u32& rd, cu32& rs, cu32& rt) -> void; auto OR(u32& rd, cu32& rs, cu32& rt) -> void; auto ORI(u32& rt, cu32& rs, u16 imm) -> void; auto SB(cu32& rt, cu32& rs, s16 imm) -> void; auto SH(cu32& rt, cu32& rs, s16 imm) -> void; auto SLL(u32& rd, cu32& rt, u8 sa) -> void; auto SLLV(u32& rd, cu32& rt, cu32& rs) -> void; auto SLT(u32& rd, cs32& rs, cs32& rt) -> void; auto SLTI(u32& rt, cs32& rs, s16 imm) -> void; auto SLTIU(u32& rt, cu32& rs, s16 imm) -> void; auto SLTU(u32& rd, cu32& rs, cu32& rt) -> void; auto SRA(u32& rd, cs32& rt, u8 sa) -> void; auto SRAV(u32& rd, cs32& rt, cu32& rs) -> void; auto SRL(u32& rd, cu32& rt, u8 sa) -> void; auto SRLV(u32& rd, cu32& rt, cu32& rs) -> void; auto SUB(u32& rd, cu32& rs, cu32& rt) -> void; auto SUBU(u32& rd, cu32& rs, cu32& rt) -> void; auto SW(cu32& rt, cu32& rs, s16 imm) -> void; auto SWL(cu32& rt, cu32& rs, s16 imm) -> void; auto SWR(cu32& rt, cu32& rs, s16 imm) -> void; auto SYSCALL() -> void; auto XOR(u32& rd, cu32& rs, cu32& rt) -> void; auto XORI(u32& rt, cu32& rs, u16 imm) -> void; struct SCC { CPU& self; SCC(CPU& self) : self(self) {} struct Breakpoint { struct Address { // 3: Breakpoint Code Address n32 code; // 5: Breakpoint Data Address n32 data; } address; struct Mask { //11: Breakpoint Code Mask n32 code; // 9: Breakpoint Data Mask n32 data; } mask; // 7: Breakpoint Control struct Status { n1 any; n1 code; n1 data; n1 read; n1 write; n1 trace; } status; n2 redirection; n2 unknown; struct Test { n1 code; n1 data; n1 read; n1 write; n1 trace; } test; struct Enable { n1 master; n1 kernel; n1 user; n1 trap; } enable; } breakpoint; // 6: Target Address n32 targetAddress; // 8: Bad Virtual Address n32 badVirtualAddress; //12: Status struct Status { struct Frame { n1 interruptEnable; n1 userMode; } frame[3]; n8 interruptMask; struct Cache { n1 isolate; n1 swap; n1 parityZero; n1 loadWasData; n1 parityError; } cache; n1 tlbShutdown; n1 vectorLocation; n1 reverseEndian; struct Enable { n1 coprocessor0 = 1; n1 coprocessor1; n1 coprocessor2 = 1; n1 coprocessor3; } enable; } status; //13: Cause struct Cause { n5 exceptionCode; n8 interruptPending; n2 coprocessorError; n1 branchTaken; n1 branchDelay; } cause; //14: Exception Program Counter n32 epc; //15: Product ID struct ProductID { static constexpr u8 implementation = 0x00; static constexpr u8 revision = 0x02; } productID; } scc{*this}; //interpreter-scc.cpp auto getControlRegisterSCC(u8) -> u32; auto setControlRegisterSCC(u8, u32) -> void; auto MFC0(u32& rt, u8 rd) -> void; auto MTC0(cu32& rt, u8 rd) -> void; auto RFE() -> void; struct GTE { CPU& self; GTE(CPU& self) : self(self) {} //color struct c32 { u8 r, g, b, t; }; //screen point struct p16 { s16 x, y; u16 z; }; //16-bit vector struct v16 { union { struct { s16 x, y, z; }; struct { s16 r, g, b; }; };}; //32-bit vector struct v32 { union { struct { s32 x, y, z; }; struct { s32 r, g, b; }; };}; //64-bit vector struct v64 { s64 x, y, z; }; //16-bit vector with temporary struct v16t : v16 { s16 t; }; //32-bit vector with temporary struct v32t : v32 { s32 t; }; //16-bit matrix struct m16 { v16 a, b, c; }; //interpreter-gte.cpp auto constructTable() -> void; auto countLeadingZeroes16(u16) -> u32; auto countLeadingZeroes32(u32) -> u32; auto getDataRegister(u32) -> u32; auto setDataRegister(u32, u32) -> void; auto getControlRegister(u32) -> u32; auto setControlRegister(u32, u32) -> void; template auto checkMac(s64 value) -> s64; template auto extend(s64 mac) -> s64; template auto saturateIr(s32 value, bool lm = 0) -> s32; template auto saturateColor(s32 value) -> u8; template auto setMac(s64 value) -> s64; template auto setIr(s32 value, bool lm = 0) -> void; template auto setMacAndIr(s64 value, bool lm = 0) -> void; auto setMacAndIr(const v64& vector) -> void; auto setOtz(s64 value) -> void; auto matrixMultiply(const m16&, const v16&, const v32& = {0, 0, 0}) -> v64; auto vectorMultiply(const v16&, const v16&, const v16& = {0, 0, 0}) -> v64; auto vectorMultiply(const v16&, s16) -> v64; auto divide(u32 lhs, u32 rhs) -> u32; auto pushScreenX(s32 sx) -> void; auto pushScreenY(s32 sy) -> void; auto pushScreenZ(s32 sz) -> void; auto pushColor(s32 r, s32 g, s32 b) -> void; auto pushColor() -> void; auto prologue() -> void; auto prologue(bool lm, u8 sf) -> void; auto epilogue() -> void; m16 v; //VX, VY, VZ c32 rgbc; u16 otz; v16t ir; p16 screen[4]; //SX, SY, SZ (screen[3].{x,y} do not exist) u32 rgb[4]; //RGB3 is reserved v32t mac; u32 lzcs, lzcr; m16 rotation; //RT1, RT2, RT3 v32 translation; //TRX, TRY, TRZ m16 light; //L1, L2, L3 v32 backgroundColor; //RBK, GBK, BBK m16 color; //LR, LG, LB v32 farColor; //RFC, GFC, BFC s32 ofx, ofy; u16 h; s16 dqa; s32 dqb; s16 zsf3, zsf4; struct Flag { u32 value; BitField<32, 12> ir0_saturated {&value}; BitField<32, 13> sy2_saturated {&value}; BitField<32, 14> sx2_saturated {&value}; BitField<32, 15> mac0_underflow {&value}; BitField<32, 16> mac0_overflow {&value}; BitField<32, 17> divide_overflow{&value}; BitField<32, 18> sz3_saturated {&value}; BitField<32, 18> otz_saturated {&value}; BitField<32, 19> b_saturated {&value}; BitField<32, 20> g_saturated {&value}; BitField<32, 21> r_saturated {&value}; BitField<32, 22> ir3_saturated {&value}; BitField<32, 23> ir2_saturated {&value}; BitField<32, 24> ir1_saturated {&value}; BitField<32, 25> mac3_underflow {&value}; BitField<32, 26> mac2_underflow {&value}; BitField<32, 27> mac1_underflow {&value}; BitField<32, 28> mac3_overflow {&value}; BitField<32, 29> mac2_overflow {&value}; BitField<32, 30> mac1_overflow {&value}; BitField<32, 31> error {&value}; } flag; bool lm; u8 tv; u8 mv; u8 mm; u8 sf; //unserialized: u8 unsignedNewtonRaphsonTable[257]; } gte{*this}; //interpreter-gte.cpp auto AVSZ3() -> void; auto AVSZ4() -> void; auto CC(bool lm, u8 sf) -> void; auto CDP(bool lm, u8 sf) -> void; auto CFC2(u32& rt, u8 rd) -> void; auto CTC2(cu32& rt, u8 rd) -> void; auto DCPL(bool lm, u8 sf) -> void; auto DPC(const GTE::v16&) -> void; auto DPCS(bool lm, u8 sf) -> void; auto DPCT(bool lm, u8 sf) -> void; auto GPF(bool lm, u8 sf) -> void; auto GPL(bool lm, u8 sf) -> void; auto INTPL(bool lm, u8 sf) -> void; auto LWC2(u8 rt, cu32& rs, s16 imm) -> void; auto MFC2(u32& rt, u8 rd) -> void; auto MTC2(cu32& rt, u8 rd) -> void; auto MVMVA(bool lm, u8 tv, u8 mv, u8 mm, u8 sf) -> void; template auto NC(const GTE::v16&) -> void; auto NCCS(bool lm, u8 sf) -> void; auto NCCT(bool lm, u8 sf) -> void; auto NCDS(bool lm, u8 sf) -> void; auto NCDT(bool lm, u8 sf) -> void; auto NCLIP() -> void; auto NCS(bool lm, u8 sf) -> void; auto NCT(bool lm, u8 sf) -> void; auto OP(bool lm, u8 sf) -> void; auto RTP(GTE::v16, bool last) -> void; auto RTPS(bool lm, u8 sf) -> void; auto RTPT(bool lm, u8 sf) -> void; auto SQR(bool lm, u8 sf) -> void; auto SWC2(u8 rt, cu32& rs, s16 imm) -> void; //decoder.cpp auto decoderEXECUTE() -> void; auto decoderSPECIAL() -> void; auto decoderREGIMM() -> void; auto decoderSCC() -> void; auto decoderGTE() -> void; auto COP1() -> void; auto COP3() -> void; auto LWC0(u8 rt, cu32& rs, s16 imm) -> void; auto LWC1(u8 rt, cu32& rs, s16 imm) -> void; auto LWC3(u8 rt, cu32& rs, s16 imm) -> void; auto SWC0(u8 rt, cu32& rs, s16 imm) -> void; auto SWC1(u8 rt, cu32& rs, s16 imm) -> void; auto SWC3(u8 rt, cu32& rs, s16 imm) -> void; auto INVALID() -> void; //recompiler.cpp struct Recompiler : recompiler::amd64 { using recompiler::amd64::call; CPU& self; Recompiler(CPU& self) : self(self) {} struct Block { auto execute(CPU& self) -> void { ((void (*)(u32*, CPU*))code)(&self.ipu.r[0], &self); } u8* code; }; struct Pool { Block* blocks[1 << 6]; }; auto reset() -> void { for(u32 index : range(1 << 21)) pools[index] = nullptr; } auto invalidate(u32 address) -> void { pools[address >> 8 & 0x1fffff] = nullptr; } auto pool(u32 address) -> Pool*; auto block(u32 address) -> Block*; auto emit(u32 address) -> Block*; auto emitEXECUTE(u32 instruction) -> bool; auto emitSPECIAL(u32 instruction) -> bool; auto emitREGIMM(u32 instruction) -> bool; auto emitSCC(u32 instruction) -> bool; auto emitGTE(u32 instruction) -> bool; template auto call(R (CPU::*function)(P...)) -> void; bump_allocator allocator; Pool* pools[1 << 21]; //2_MiB * sizeof(void*) = 16_MiB } recompiler{*this}; struct Disassembler { CPU& self; Disassembler(CPU& self) : self(self) {} //disassembler.cpp auto disassemble(u32 address, u32 instruction) -> string; template auto hint(P&&... p) const -> string; bool showColors = true; bool showValues = true; //private: auto EXECUTE() -> vector; auto SPECIAL() -> vector; auto REGIMM() -> vector; auto SCC() -> vector; auto GTE() -> vector; auto immediate(s64 value, u8 bits = 0) const -> string; auto ipuRegisterName(u8 index) const -> string; auto ipuRegisterValue(u8 index) const -> string; auto ipuRegisterIndex(u8 index, s16 offset) const -> string; auto sccRegisterName(u8 index) const -> string; auto sccRegisterValue(u8 index) const -> string; auto gteDataRegisterName(u8 index) const -> string; auto gteDataRegisterValue(u8 index) const -> string; auto gteControlRegisterName(u8 index) const -> string; auto gteControlRegisterValue(u8 index) const -> string; u32 address; u32 instruction; } disassembler{*this}; }; extern CPU cpu; ares-126/ares/ps1/cpu/debugger.cpp000066400000000000000000000377761415063341600170610ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram.readByte(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return cpu.ram.writeByte(address, data); }); memory.scratchpad = parent->append("CPU Scratchpad"); memory.scratchpad->setSize(cpu.scratchpad.size); memory.scratchpad->setRead([&](u32 address) -> u8 { return cpu.scratchpad.readByte(address); }); memory.scratchpad->setWrite([&](u32 address, u8 data) -> void { return cpu.scratchpad.writeByte(address, data); }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(32, 2); tracer.exception = parent->append("Exception", "CPU"); tracer.interrupt = parent->append("Interrupt", "CPU"); tracer.message = parent->append("Message", "CPU"); tracer.function = parent->append("Function", "CPU"); } auto CPU::Debugger::instruction() -> void { if(!tracer.instruction->enabled()) return; u32 address = cpu.pipeline.address; u32 instruction = cpu.pipeline.instruction; if(tracer.instruction->address(address)) { cpu.disassembler.showColors = 0; tracer.instruction->notify(cpu.disassembler.disassemble(address, instruction), {}); cpu.disassembler.showColors = 1; } } auto CPU::Debugger::exception(u8 code) -> void { if(!tracer.exception->enabled()) return; string type; if(code == 0) type = "Interrupt"; if(code == 4) type = "AddressLoad"; if(code == 5) type = "AddressStore"; if(code == 6) type = "BusInstruction"; if(code == 7) type = "BusData"; if(code == 8) type = "SystemCall"; if(code == 9) type = "Breakpoint"; if(code == 10) type = "ReservedInstruction"; if(code == 11) type = "CoprocessorDisabled"; if(code == 12) type = "ArithmeticOverflow"; if(code == 13) type = "Trap"; if(code == 0) return; //interrupt exceptions are logged by interrupt() instead if(code == 8) return; //ignore SYSCALL exceptions (they are used often to call BIOS functions) tracer.exception->notify({type, " PC:", hex(cpu.ipu.pc, 8L)}); } auto CPU::Debugger::interrupt(u8 mask) -> void { if(!tracer.interrupt->enabled()) return; string source; if(mask & 0x01) { source.append("Software0,"); } if(mask & 0x02) { source.append("Software1,"); } if(mask & 0x04) { if(PlayStation::interrupt.vblank.poll()) source.append("Vblank,"); if(PlayStation::interrupt.gpu.poll()) source.append("GPU,"); if(PlayStation::interrupt.cdrom.poll()) source.append("CDROM,"); if(PlayStation::interrupt.dma.poll()) source.append("DMA,"); if(PlayStation::interrupt.timer0.poll()) source.append("Timer0,"); if(PlayStation::interrupt.timer1.poll()) source.append("Timer1,"); if(PlayStation::interrupt.timer2.poll()) source.append("Timer2,"); if(PlayStation::interrupt.peripheral.poll()) source.append("Peripheral,"); if(PlayStation::interrupt.sio.poll()) source.append("SIO,"); if(PlayStation::interrupt.spu.poll()) source.append("SPU,"); if(PlayStation::interrupt.pio.poll()) source.append("PIO,"); } source.trimRight(",", 1L); tracer.interrupt->notify(source); } auto CPU::Debugger::messageChar(char c) -> void { if(!tracer.message->enabled()) return; static string message; if(c == '\n') { if(message) { tracer.message->notify(message); message = {}; } } else if(message.size() < 512) { message.append(c); } } auto CPU::Debugger::messageText(u32 address) -> void { if(!tracer.message->enabled()) return; for(u32 index : range(512)) { char data = bus.read(address + index); if(!data) break; messageChar(data); } } auto CPU::Debugger::message() -> void { if(!tracer.message->enabled()) return; if(cpu.ipu.pc == 0xa0 && cpu.ipu.r[9] == 0x3c) messageChar((char)cpu.ipu.r[4]); if(cpu.ipu.pc == 0xb0 && cpu.ipu.r[9] == 0x3d) messageChar((char)cpu.ipu.r[4]); if(cpu.ipu.pc == 0xa0 && cpu.ipu.r[9] == 0x3e) messageText(cpu.ipu.r[4]); if(cpu.ipu.pc == 0xb0 && cpu.ipu.r[9] == 0x3f) messageText(cpu.ipu.r[4]); } auto CPU::Debugger::function() -> void { if(!tracer.function->enabled()) return; u32 pc = cpu.ipu.pc & 0x1fff'ffff; u32 p0 = cpu.ipu.r[4]; u32 p1 = cpu.ipu.r[5]; u32 p2 = cpu.ipu.r[6]; u32 p3 = cpu.ipu.r[7]; string call; auto hex8 = [](u32 value) -> string { return {"$", hex(value, 2L)}; }; auto hex16 = [](u32 value) -> string { return {"$", hex(value, 4L)}; }; auto hex32 = [](u32 value) -> string { return {"$", hex(value, 8L)}; }; auto character = [](u32 value) -> string { if(value >= 0x20 && value <= 0x7e) { return {"'", (char)value, "'"}; } if(value == 0x09) return "'\\t'"; if(value == 0x0a) return "'\\n'"; if(value == 0x0d) return "'\\r'"; return {"$", hex(value, 2L)}; }; auto text = [](u32 address) -> string { string output; output.append("\""); for(u32 n : range(256)) { char value = bus.read(address + n); if(!value) break; else if(value == 0x09) output.append("\\t"); else if(value == 0x0a) output.append("\\n"); else if(value == 0x0d) output.append("\\r"); else if(value >= 0x20 && value <= 0x7e) output.append(value); else output.append("$", hex(value, 2L)); } output.append("\""); return output; }; auto event = [](u32 value) -> string { switch(value) { case 0xf000'0001: return "vblank"; case 0xf000'0002: return "gpu"; case 0xf000'0003: return "cdromDecoder"; case 0xf000'0004: return "dmaController"; case 0xf000'0005: return "timer0"; case 0xf000'0006: return "timer1_2"; case 0xf000'0008: return "controller"; case 0xf000'0009: return "spu"; case 0xf000'000a: return "pio"; case 0xf000'000b: return "sio"; case 0xf000'0010: return "exception"; case 0xf000'0011: return "memoryCard"; case 0xf000'0012: return "memoryCard1"; case 0xf000'0013: return "memoryCard2"; case 0xf200'0000: return "rootCounter0"; case 0xf200'0001: return "rootCounter1"; case 0xf200'0002: return "rootCounter2"; case 0xf200'0003: return "rootCounter3"; case 0xf400'0001: return "memoryCardHLE"; case 0xf400'0002: return "libmath"; } return {"$", hex(value, 8L)}; }; auto spec = [](u32 value) -> string { switch(value) { case 0x0001: return "counterReachedZero"; case 0x0002: return "interrupted"; case 0x0004: return "endOfIO"; case 0x0008: return "fileWasClosed"; case 0x0010: return "commandAcknowledged"; case 0x0020: return "commandCompleted"; case 0x0040: return "dataReady"; case 0x0080: return "dataEnd"; case 0x0100: return "timeout"; case 0x0200: return "unknownCommand"; case 0x0400: return "endOfReadBuffer"; case 0x0800: return "endOfWriteBuffer"; case 0x1000: return "generalInterrupt"; case 0x2000: return "newDevice"; case 0x4000: return "systemCall"; case 0x8000: return "error"; case 0x8001: return "previousWriteErrorOccurred"; case 0x0301: return "libmathDomainError"; case 0x0302: return "libmathRangeError"; } return {"$", hex(value, 4L)}; }; #define op_(id, fn) case id: call = {fn, "(...)"}; break #define op0(id, fn) case id: call = {fn, "()"}; break #define op1(id, fn, p0) case id: call = {fn, "(", p0, ")"}; break; #define op2(id, fn, p0, p1) case id: call = {fn, "(", p0, ",", p1, ")"}; break #define op3(id, fn, p0, p1, p2) case id: call = {fn, "(", p0, ",", p1, ",", p2, ")"}; break; #define op4(id, fn, p0, p1, p2, p3) case id: call = {fn, "(", p0, ",", p1, ",", p2, ",", p3, ")"}; break; if(pc == 0x80) switch(cpu.ipu.r[4]) { op0(0x00, "NoFunction"); op0(0x01, "EnterCriticalSection"); op0(0x02, "ExitCriticalSection"); op_(0x03, "ChangeThreadSubFunction"); op2(0x04, "DeliverEvent", event(p0), spec(p1)); } if(pc == 0xa0) switch(cpu.ipu.r[9]) { op2(0x00, "FileOpen", text(p0), hex32(p1)); op3(0x01, "FileSeek", hex8(p0), hex32(p1), hex8(p2)); op3(0x02, "FileRead", hex8(p0), hex32(p1), hex32(p2)); op3(0x03, "FileWrite", hex8(p0), hex32(p1), hex32(p2)); op1(0x04, "FileClose", hex8(p0)); op_(0x05, "FileIoctl"); op_(0x06, "exit"); op_(0x07, "FileGetDeviceFlag"); op_(0x08, "FileGetc"); op_(0x09, "FilePutc"); op_(0x0a, "todigit"); op_(0x0b, "atof"); op_(0x0c, "strtoul"); op_(0x0d, "strtol"); op_(0x0e, "abs"); op_(0x0f, "labs"); op_(0x10, "atoi"); op_(0x11, "atol"); op_(0x12, "atob"); op_(0x13, "SaveState"); op_(0x14, "RestoreState"); op2(0x15, "strcat", text(p0), text(p1)); op3(0x16, "strncat", text(p0), text(p1), hex32(p2)); op2(0x17, "strcmp", text(p0), text(p1)); op3(0x18, "strncmp", text(p0), text(p1), hex32(p2)); op2(0x19, "strcpy", hex32(p0), text(p1)); op3(0x1a, "strncpy", hex32(p0), text(p1), hex32(p2)); op1(0x1b, "strlen", text(p0)); op_(0x1c, "index"); op_(0x1d, "rindex"); op_(0x1e, "strchr"); op_(0x1f, "strrchr"); op_(0x20, "strpbrk"); op_(0x21, "strspn"); op_(0x22, "strcspn"); op_(0x23, "strtok"); op_(0x24, "strstr"); op1(0x25, "toupper", character(p0)); op1(0x26, "tolower", character(p0)); op_(0x27, "bcopy"); op_(0x28, "bzero"); op_(0x29, "bcmp"); op3(0x2a, "memcpy", hex32(p0), hex32(p1), hex32(p2)); op3(0x2b, "memset", hex32(p0), character(p1), hex32(p2)); op3(0x2c, "memmove", hex32(p0), hex32(p1), hex32(p2)); op3(0x2d, "memcmp", hex32(p0), hex32(p1), hex32(p2)); op3(0x2e, "memchr", hex32(p0), character(p1), hex32(p2)); op0(0x2f, "rand"); op1(0x30, "srand", hex32(p0)); op_(0x31, "qsort"); op_(0x32, "strtod"); op1(0x33, "malloc", hex32(p0)); op1(0x34, "free", hex32(p0)); op_(0x35, "lsearch"); op_(0x36, "bsearch"); op2(0x37, "calloc", hex32(p0), hex32(p1)); op2(0x38, "realloc", hex32(p0), hex32(p1)); op_(0x39, "InitHeap"); op_(0x3a, "SystemErrorExit"); op0(0x3b, "std_in_getchar"); op1(0x3c, "std_out_putchar", character(p0)); op_(0x3d, "std_in_gets"); op1(0x3e, "std_out_puts", text(p0)); op2(0x3f, "printf", text(p0), "..."); op0(0x40, "SystemErrorUnresolvedException"); op_(0x41, "LoadExeHeader"); op_(0x42, "LoadExeFile"); op_(0x43, "DoExecute"); op0(0x44, "FlushCache"); op_(0x45, "init_a0_b0_c0_vectors"); op_(0x46, "GPU_dw"); op_(0x47, "gpu_send_dma"); op_(0x48, "SendGP1Command"); op_(0x49, "GPU_cw"); op_(0x4a, "GPU_cwp"); op_(0x4b, "send_gpu_linked_list"); op0(0x4c, "gpu_abort_dma"); op0(0x4d, "GetGPUStatus"); op0(0x4e, "gpu_sync"); op_(0x4f, "SystemError"); op_(0x50, "SystemError"); op_(0x51, "LoadAndExecute"); op_(0x52, "GetSysSp"); op_(0x53, "set_ioabort_handler"); op0(0x54, "CdInit"); op0(0x55, "_bu_init"); op0(0x56, "CdRemove"); op0(0x5b, "dev_tty_init"); op_(0x5c, "dev_tty_open"); op_(0x5d, "dev_tty_in_out"); op_(0x5e, "dev_tty_ioctl"); op_(0x5f, "dev_cd_open"); op_(0x60, "dev_cd_read"); op_(0x61, "dev_cd_close"); op_(0x62, "dev_cd_firstfile"); op_(0x63, "dev_cd_nextfile"); op_(0x64, "dev_cd_chdir"); op_(0x65, "dev_card_open"); op_(0x66, "dev_card_read"); op_(0x67, "dev_card_write"); op_(0x68, "dev_card_close"); op_(0x69, "dev_card_firstfile"); op_(0x6a, "dev_card_nextfile"); op_(0x6b, "dev_card_erase"); op_(0x6c, "dev_card_undelete"); op_(0x6d, "dev_card_format"); op_(0x6e, "dev_card_rename"); op_(0x6f, "card_clear_error"); op0(0x70, "_bu_init"); op0(0x71, "CdInit"); op0(0x72, "CdRemove"); op_(0x78, "CdAsyncSeekL"); op_(0x7c, "CdAsyncGetStatus"); op_(0x7e, "CdAsyncReadSector"); op_(0x81, "CdAsyncSetMode"); op0(0x90, "CdromIoIrqFunc1"); op0(0x91, "CdromDmaIrqFunc1"); op0(0x92, "CdromIoIrqFunc2"); op0(0x93, "CdromDmaIrqFunc2"); op_(0x94, "CdromGetInt5errCode"); op0(0x95, "CdInitSubFunc"); op0(0x96, "AddCDROMDevice"); op0(0x97, "AddMemCardDevice"); op0(0x98, "AddDuartTtyDevice"); op0(0x99, "AddDummyTtyDevice"); op0(0x9a, "AddMessageWindowDevice"); op0(0x9b, "AddCdromSimDevice"); op_(0x9c, "SetConf"); op_(0x9d, "GetConf"); op_(0x9e, "SetCdromIrqAutoAbort"); op_(0x9f, "SetMemSize"); op0(0xa0, "WarmBoot"); op_(0xa1, "SystemErrorBootOrDiskFailure"); op0(0xa2, "EnqueueCdIntr"); op0(0xa3, "DequeueCdIntr"); op_(0xa4, "CdGetLbn"); op_(0xa5, "CdReadSector"); op0(0xa6, "CdGetStatus"); op0(0xa7, "bu_callback_okay"); op0(0xa8, "bu_callback_err_write"); op0(0xa9, "bu_callback_err_busy"); op0(0xaa, "bu_callback_err_eject"); op_(0xab, "_card_info"); op_(0xac, "_card_async_load_directory"); op_(0xad, "set_card_auto_format"); op0(0xae, "bu_callback_err_prev_write"); op_(0xaf, "card_write_test"); op_(0xb2, "ioabort_raw"); op_(0xb4, "GetSystemInfo"); } if(pc == 0xb0) switch(cpu.ipu.r[9]) { op_(0x00, "alloc_kernel_memory"); op_(0x01, "free_kernel_memory"); op_(0x02, "init_timer"); op_(0x03, "get_timer"); op_(0x04, "enable_timer_irq"); op_(0x05, "disable_timer_irq"); op_(0x06, "restart_timer"); op2(0x07, "DeliverEvent", event(p0), spec(p1)); op4(0x08, "OpenEvent", event(p0), spec(p1), hex32(p2), hex32(p3)); op1(0x09, "CloseEvent", event(p0)); op1(0x0a, "WaitEvent", event(p0)); op1(0x0b, "TestEvent", event(p0)); op1(0x0c, "EnableEvent", event(p0)); op1(0x0d, "DisableEvent", event(p0)); op_(0x0e, "OpenThread"); op_(0x0f, "CloseThread"); op_(0x10, "ChangeThread"); op_(0x12, "InitPad"); op0(0x13, "StartPad"); op0(0x14, "StopPad"); op_(0x15, "OutdatedPadInitAndStart"); op0(0x16, "OutdatedPadGetButtons"); //op0(0x17, "ReturnFromException"); op0(0x18, "SetDefaultExitFromException"); op_(0x19, "SetCustomExitFromException"); op2(0x20, "UnDeliverEvent", event(p0), spec(p1)); op2(0x32, "FileOpen", text(p0), hex32(p1)); op3(0x33, "FileSeek", hex8(p0), hex32(p1), hex8(p2)); op3(0x34, "FileRead", hex8(p0), hex32(p1), hex32(p2)); op3(0x35, "FileWrite", hex8(p0), hex32(p1), hex32(p2)); op1(0x36, "FileClose", hex8(p0)); op_(0x37, "FileIoctl"); op_(0x38, "exit"); op_(0x39, "FileGetDeviceFlag"); op_(0x3a, "FileGetc"); op_(0x3b, "FilePutc"); op0(0x3c, "std_in_getchar"); op1(0x3d, "std_out_putchar", character(p0)); op_(0x3e, "std_in_gets"); op1(0x3f, "std_out_puts", text(p0)); op_(0x40, "chdir"); op_(0x41, "FormatDevice"); op_(0x42, "firstfile"); op_(0x43, "nextfile"); op_(0x44, "FileRename"); op_(0x45, "FileDelete"); op_(0x46, "FileUndelete"); op_(0x47, "AddDevice"); op_(0x48, "RemoveDevice"); op0(0x49, "PrintInstalledDevices"); op_(0x4a, "InitCard"); op0(0x4b, "StartCard"); op0(0x4c, "StopCard"); op_(0x4d, "_card_info_subfunc"); op_(0x4e, "write_card_sector"); op_(0x4f, "read_card_sector"); op0(0x50, "allow_new_card"); op_(0x51, "Krom2RawAdd"); op_(0x53, "Krom2Offset"); op0(0x54, "GetLastError"); op_(0x55, "GetLastFileError"); op_(0x56, "GetC0Table"); op_(0x57, "GetB0Table"); op0(0x58, "get_bu_callback_port"); op_(0x59, "testdevice"); op_(0x5b, "ChangeClearPad"); op_(0x5c, "get_card_status"); op_(0x5d, "wait_card_status"); } if(pc == 0xc0) switch(cpu.ipu.r[9]) { op_(0x00, "EnqueueTimerAndVblankIrqs"); op_(0x01, "EnqueueSyscallHandler"); op_(0x02, "SysEnqIntRP"); op_(0x03, "SysDeqIntRP"); op0(0x04, "get_free_EvCB_slot"); op0(0x05, "get_free_TCB_slot"); op0(0x06, "ExceptionHandler"); op0(0x07, "InstallExceptionHandlers"); op_(0x08, "SysInitMemory"); op0(0x09, "SysInitKernelVariables"); op_(0x0a, "ChangeClearRCnt"); op_(0x0c, "InitDefInt"); op_(0x0d, "SetIrqAutoAck"); op_(0x12, "InstallDevices"); op0(0x13, "FlushStdInOutPut"); op_(0x15, "tty_cdevinput"); op0(0x16, "tty_cdevscan"); op_(0x17, "tty_circgetc"); op_(0x18, "tty_circputc"); op_(0x19, "ioabort"); op_(0x1a, "set_card_find_mode"); op_(0x1b, "KernelRedirect"); op0(0x1c, "AdjustA0Table"); op0(0x1d, "get_card_find_mode"); } //todo: handle break function calls #undef op_ #undef op0 #undef op1 #undef op2 #undef op3 #undef op4 if(call) { tracer.function->notify(call); } } ares-126/ares/ps1/cpu/delay-slots.cpp000066400000000000000000000022451415063341600175140ustar00rootroot00000000000000inline auto CPU::load(u32& target) const -> u32 { if(delay.load[0].target == &target) { return delay.load[0].source; } return target; } inline auto CPU::load(u32& target, u32 source) -> void { if(delay.load[0].target == &target) { delay.load[0].target = nullptr; } delay.load[1].target = ⌖ delay.load[1].source = source; } inline auto CPU::store(u32& target, u32 source) -> void { if(delay.load[0].target == &target) { delay.load[0].target = nullptr; } target = source; } template inline auto CPU::branch(u32 address, bool take) -> void { delay.branch[N].slot = true; delay.branch[N].take = take; delay.branch[N].address = address; if constexpr(N == 0) delay.branch[1] = {}; } inline auto CPU::processDelayLoad() -> void { if(delay.load[0].target) { *delay.load[0].target = delay.load[0].source; } delay.load[0] = delay.load[1]; delay.load[1] = {}; } inline auto CPU::processDelayBranch() -> void { if(delay.branch[1].take) { ipu.pd = delay.branch[1].address; instructionHook(); //used to implement fast booting and executable side-loading } delay.branch[0] = delay.branch[1]; delay.branch[1] = {}; } ares-126/ares/ps1/cpu/disassembler.cpp000066400000000000000000000325441415063341600177360ustar00rootroot00000000000000auto CPU::Disassembler::disassemble(u32 address, u32 instruction) -> string { this->address = address; this->instruction = instruction; auto v = EXECUTE(); if(!v) v.append("invalid", string{"$", hex(instruction, 8L)}); if(!instruction) v = {"nop"}; auto s = pad(v.takeFirst(), -8L); return {s, v.merge(",")}; } auto CPU::Disassembler::EXECUTE() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto dtName = [&] { return gteDataRegisterName (instruction >> 16 & 31); }; auto dtValue = [&] { return gteDataRegisterValue(instruction >> 16 & 31); }; auto jump = [&] { return immediate(address + 4 & 0xf000'0000 | (instruction & 0x03ff'ffff) << 2, 32L); }; auto branch = [&] { return immediate(address + 4 + (s16(instruction) << 2), 32L); }; auto offset = [&] { return ipuRegisterIndex(instruction >> 21 & 31, s16(instruction)); }; auto ALU = [&](string_view name) -> vector { return {name, rtName(), rsValue(), immediate(u16(instruction))}; }; auto ADDI = [&](string_view add, string_view sub, string_view mov) -> vector { if(!(instruction >> 21 & 31)) return {mov, rtName(), immediate(s16(instruction))}; return {s16(instruction) >= 0 ? add : sub, rtName(), rsValue(), immediate(abs(s16(instruction)))}; }; auto BRANCH1 = [&](string_view name) -> vector { return {name, rsValue(), branch()}; }; auto BRANCH2 = [&](string_view name) -> vector { auto rs = rsValue(), rt = rtValue(), target = branch(); if(name == "beq" && rs == "0" && rt == "0") return {"bra", target}; return {name, rs, rt, target}; }; auto JUMP = [&](string_view name) -> vector { return {name, jump()}; }; auto LOAD = [&](string_view name) -> vector { return {name, rtName(), offset()}; }; auto STORE = [&](string_view name) -> vector { return {name, rtValue(), offset()}; }; switch(instruction >> 26) { case 0x00: return SPECIAL(); case 0x01: return REGIMM(); case 0x02: return JUMP("j"); case 0x03: return JUMP("jal"); case 0x04: return BRANCH2("beq"); case 0x05: return BRANCH2("bne"); case 0x06: return BRANCH1("blez"); case 0x07: return BRANCH1("bgtz"); case 0x08: return ADDI("addi", "subi", "li"); case 0x09: return ADDI("addiu", "subiu", "liu"); case 0x0a: return ALU("slti"); case 0x0b: return ALU("sltiu"); case 0x0c: return ALU("andi"); case 0x0d: return ALU("ori"); case 0x0e: return ALU("xori"); case 0x0f: return {"lui", rtName(), immediate(u16(instruction), 16L)}; case 0x10: return SCC(); case 0x11: break; //COP1 case 0x12: return GTE(); case 0x13: break; //COP3 case 0x14: break; case 0x15: break; case 0x16: break; case 0x17: break; case 0x18: break; case 0x19: break; case 0x1a: break; case 0x1b: break; case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; case 0x20: return LOAD("lb"); case 0x21: return LOAD("lh"); case 0x22: return LOAD("lwl"); case 0x23: return LOAD("lw"); case 0x24: return LOAD("lbu"); case 0x25: return LOAD("lhu"); case 0x26: return LOAD("lwr"); case 0x27: break; case 0x28: return STORE("sb"); case 0x29: return STORE("sh"); case 0x2a: return STORE("swl"); case 0x2b: return STORE("sw"); case 0x2c: break; case 0x2d: break; case 0x2e: return STORE("swr"); case 0x2f: break; case 0x30: return {"lwc0", instruction >> 16 & 31, offset()}; case 0x31: return {"lwc1", instruction >> 16 & 31, offset()}; case 0x32: return {"lwc2", dtName(), offset()}; case 0x33: return {"lwc3", instruction >> 16 & 31, offset()}; case 0x38: return {"swc0", instruction >> 16 & 31, offset()}; case 0x39: return {"swc1", instruction >> 16 & 31, offset()}; case 0x3a: return {"swc2", dtValue(), offset()}; case 0x3b: return {"swc3", instruction >> 16 & 31, offset()}; } return {}; } auto CPU::Disassembler::SPECIAL() -> vector { auto shift = [&] { return string{instruction >> 6 & 31}; }; auto rdName = [&] { return ipuRegisterName (instruction >> 11 & 31); }; auto rdValue = [&] { return ipuRegisterValue(instruction >> 11 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto ALU = [&](string_view name, string_view by) -> vector { return {name, rdName(), rtValue(), by}; }; auto JALR = [&](string_view name) -> vector { if((instruction >> 11 & 31) == 31) return {name, rsValue()}; return {name, rdName(), rsValue()}; }; auto REG = [&](string_view name) -> vector { return {name, rdName(), rsValue(), rtValue()}; }; auto ST = [&](string_view name) -> vector { return {name, rsValue(), rtValue()}; }; switch(instruction & 0x3f) { case 0x00: return ALU("sll", shift()); case 0x01: break; case 0x02: return ALU("srl", shift()); case 0x03: return ALU("sra", shift()); case 0x04: return ALU("sllv", rsValue()); case 0x05: break; case 0x06: return ALU("srlv", rsValue()); case 0x07: return ALU("srav", rsValue()); case 0x08: return {"jr", rsValue()}; case 0x09: return JALR("jalr"); case 0x0a: break; case 0x0b: break; case 0x0c: return {"syscall"}; case 0x0d: return {"break"}; case 0x0e: break; case 0x0f: break; case 0x10: return {"mfhi", rdName(), {"hi", hint("{$", hex(self.ipu.hi, 8L), "}")}}; case 0x11: return {"mthi", rsValue(), "hi"}; case 0x12: return {"mflo", rdName(), {"lo", hint("{$", hex(self.ipu.lo, 8L), "}")}}; case 0x13: return {"mtlo", rsValue(), "lo"}; case 0x14: break; case 0x15: break; case 0x16: break; case 0x17: break; case 0x18: return ST("mult"); case 0x19: return ST("multu"); case 0x1a: return ST("div"); case 0x1b: return ST("divu"); case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; case 0x20: return REG("add"); case 0x21: return REG("addu"); case 0x22: return REG("sub"); case 0x23: return REG("subu"); case 0x24: return REG("and"); case 0x25: return REG("or"); case 0x26: return REG("xor"); case 0x27: return REG("nor"); case 0x28: break; case 0x29: break; case 0x2a: return REG("slt"); case 0x2b: return REG("sltu"); case 0x2c: break; case 0x2d: break; case 0x2e: break; case 0x2f: break; case 0x30: break; case 0x31: break; case 0x32: break; case 0x33: break; case 0x34: break; case 0x35: break; case 0x36: break; case 0x37: break; case 0x38: break; case 0x39: break; case 0x3a: break; case 0x3b: break; case 0x3c: break; case 0x3d: break; case 0x3e: break; case 0x3f: break; } return {}; } auto CPU::Disassembler::REGIMM() -> vector { auto rsValue = [&] { return ipuRegisterValue(instruction >> 21 & 31); }; auto branch = [&] { return immediate(address + 4 + (s16(instruction) << 2)); }; auto BRANCH = [&](string_view name) -> vector { return {name, rsValue(), branch()}; }; switch(instruction >> 16 & 0x1f) { case 0x00: return BRANCH("bltz"); case 0x01: return BRANCH("bgez"); case 0x02: break; case 0x03: break; case 0x04: break; case 0x05: break; case 0x06: break; case 0x07: break; case 0x08: break; case 0x09: break; case 0x0a: break; case 0x0b: break; case 0x0c: break; case 0x0d: break; case 0x0e: break; case 0x0f: break; case 0x10: return BRANCH("bltzal"); case 0x11: return BRANCH("bgezal"); case 0x12: break; case 0x13: break; case 0x14: break; case 0x15: break; case 0x16: break; case 0x17: break; case 0x18: break; case 0x19: break; case 0x1a: break; case 0x1b: break; case 0x1c: break; case 0x1d: break; case 0x1e: break; case 0x1f: break; } return {}; } auto CPU::Disassembler::SCC() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto sdName = [&] { return sccRegisterName (instruction >> 11 & 31); }; auto sdValue = [&] { return sccRegisterValue(instruction >> 11 & 31); }; switch(instruction >> 21 & 0x1f) { case 0x00: return {"mfc0", rtName(), sdValue()}; case 0x04: return {"mtc0", rtValue(), sdName()}; } if(!(instruction >> 25 & 1)) return {}; switch(instruction & 0x3f) { case 0x10: return {"rfe"}; } return {}; } auto CPU::Disassembler::GTE() -> vector { auto rtName = [&] { return ipuRegisterName (instruction >> 16 & 31); }; auto rtValue = [&] { return ipuRegisterValue(instruction >> 16 & 31); }; auto drName = [&] { return gteDataRegisterName (instruction >> 11 & 31); }; auto drValue = [&] { return gteDataRegisterValue(instruction >> 11 & 31); }; auto crName = [&] { return gteControlRegisterName (instruction >> 11 & 31); }; auto crValue = [&] { return gteControlRegisterValue(instruction >> 11 & 31); }; switch(instruction >> 21 & 0x1f) { case 0x00: return {"mfc2", rtName(), drValue()}; case 0x02: return {"cfc2", rtName(), crValue()}; case 0x04: return {"mtc2", rtValue(), drName()}; case 0x06: return {"ctc2", rtValue(), crName()}; } if(!(instruction >> 25 & 1)) return {}; u32 lm = instruction >> 10 & 1; u32 tv = instruction >> 13 & 3; u32 mv = instruction >> 15 & 3; u32 mm = instruction >> 17 & 3; u32 sf = instruction >> 19 & 1; switch(instruction & 0x3f) { case 0x00: return {"rtps", lm, sf}; //0x01 mirror? case 0x01: return {"rtps", lm, sf}; case 0x06: return {"nclip"}; case 0x0c: return {"op", lm, sf}; case 0x10: return {"dpcs", lm, sf}; case 0x11: return {"intpl", lm, sf}; case 0x12: return {"mvmva", lm, tv, mv, mm, sf}; case 0x13: return {"ncds", lm, sf}; case 0x14: return {"cdp", lm, sf}; case 0x16: return {"ncdt", lm, sf}; case 0x1a: return {"dcpl", lm, sf}; //0x29 mirror? case 0x1b: return {"nccs", lm, sf}; case 0x1c: return {"cc", lm, sf}; case 0x1e: return {"ncs", lm, sf}; case 0x20: return {"nct", lm, sf}; case 0x28: return {"sqr", lm, sf}; case 0x29: return {"dpcl", lm, sf}; case 0x2a: return {"dpct", lm, sf}; case 0x2d: return {"avsz3"}; case 0x2e: return {"avsz4"}; case 0x30: return {"rtpt", lm, sf}; case 0x3d: return {"gpf", lm, sf}; case 0x3e: return {"gpl", lm, sf}; case 0x3f: return {"ncct", lm, sf}; } return {}; } auto CPU::Disassembler::immediate(s64 value, u8 bits) const -> string { if(value < 0) return {"-$", hex(-value, bits >> 2)}; return {"$", hex(value, bits >> 2)}; } auto CPU::Disassembler::ipuRegisterName(u8 index) const -> string { static const string registers[32] = { "0", "at", "v0", "v1", "a0", "a1", "a2", "a3", "t0", "t1", "t2", "t3", "t4", "t5", "t6", "t7", "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7", "t8", "t9", "k0", "k1", "gp", "sp", "fp", "ra", }; return registers[index]; } auto CPU::Disassembler::ipuRegisterValue(u8 index) const -> string { if(index && showValues) return {ipuRegisterName(index), hint("{$", hex(self.ipu.r[index], 8L), "}")}; return ipuRegisterName(index); } auto CPU::Disassembler::ipuRegisterIndex(u8 index, s16 offset) const -> string { string adjust; if(offset >= 0) adjust = {"+$", hex( offset)}; if(offset < 0) adjust = {"-$", hex(-offset)}; if(index && showValues) return {ipuRegisterName(index), adjust, hint("{$", hex(self.ipu.r[index] + offset, 8L), "}")}; return {ipuRegisterName(index), adjust}; } auto CPU::Disassembler::sccRegisterName(u8 index) const -> string { static const string registers[32] = { "scc0", "scc1", "scc2", "bpc", "scc4", "bda", "tar", "dcic", "bada", "bdam", "scc10", "bpcm", "sr", "cause", "epc", "prid", "scc16", "scc17", "scc18", "scc19", "scc20", "scc21", "scc22", "scc23", "scc24", "scc25", "scc26", "scc27", "scc28", "scc29", "scc30", "scc31", }; return registers[index]; } auto CPU::Disassembler::sccRegisterValue(u8 index) const -> string { if(showValues) return {sccRegisterName(index), hint("{$", hex(self.getControlRegisterSCC(index), 8L), "}")}; return sccRegisterName(index); } auto CPU::Disassembler::gteDataRegisterName(u8 index) const -> string { static const string registers[32] = { "vxy0", "vz0", "vxy1", "vz2", "vxy2", "vz2", "rgbc", "otz", "ir0", "ir1", "ir2", "ir3", "sxy0", "sxy1", "sxy2", "sxyp", "sz0", "sz1", "sz2", "sz3", "rgb0", "rgb1", "rgb2", "res1", "mac0", "mac1", "mac2", "mac3", "irgb", "orgb", "lzcs", "lzcr", }; return registers[index]; } auto CPU::Disassembler::gteDataRegisterValue(u8 index) const -> string { if(showValues) return {gteDataRegisterName(index)}; //todo return gteDataRegisterName(index); } auto CPU::Disassembler::gteControlRegisterName(u8 index) const -> string { static const string registers[32] = { "rt11+rt12", "rt13+rt21", "rt22+rt23", "rt31+rt32", "rt33", "trx", "try", "trz", "l11+l12", "l13+l21", "l22+l23", "l31+l32", "l33", "rbk", "gbk", "bbk", "lr1+lr2", "lr3+lg1", "lg2+lg3", "lb1+lb2", "lb3", "rfc", "gfc", "bfc", "ofx", "ofy", "h", "dqa", "dqb", "zsf3", "zsf4", "flag", }; return registers[index]; } auto CPU::Disassembler::gteControlRegisterValue(u8 index) const -> string { if(showValues) return {gteControlRegisterName(index)}; //todo return gteControlRegisterName(index); } template auto CPU::Disassembler::hint(P&&... p) const -> string { if(showColors) return {"\e[0m\e[37m", forward

(p)..., "\e[0m"}; return {forward

(p)...}; } ares-126/ares/ps1/cpu/exceptions.cpp000066400000000000000000000044021415063341600174320ustar00rootroot00000000000000//used to determine if a function call (eg CPU::fetch) triggered an exception auto CPU::Exception::operator()() -> bool { return triggered; } auto CPU::Exception::trigger(u32 code) -> void { triggered = true; self.debugger.exception(code); self.scc.status.frame[2] = self.scc.status.frame[1]; self.scc.status.frame[1] = self.scc.status.frame[0]; self.scc.status.frame[0] = {}; self.scc.cause.exceptionCode = code; self.scc.cause.coprocessorError = self.pipeline.instruction >> 26; self.scc.cause.branchDelay = self.delay.branch[0].slot; self.scc.cause.branchTaken = self.delay.branch[0].take; self.scc.epc = self.ipu.pc; if(self.scc.cause.branchDelay) { self.scc.epc -= 4; if(self.scc.cause.branchTaken) { self.scc.targetAddress = self.delay.branch[0].address; } else { self.scc.targetAddress = self.ipu.pd; } } //exceptions and interrupts discard the execution of delay slots self.delay.branch[0] = {}; self.delay.branch[1] = {}; self.ipu.pc = !self.scc.status.vectorLocation ? 0x8000'0080 : 0xbfc0'0180; self.ipu.pd = self.ipu.pc; } auto CPU::Exception::interruptsPending() -> u8 { if(!self.scc.status.frame[0].interruptEnable) return 0x00; if(self.delay.interrupt && --self.delay.interrupt) return 0x00; return self.scc.cause.interruptPending & self.scc.status.interruptMask; } auto CPU::Exception::interrupt() -> void { trigger(0); } template auto CPU::Exception::address(u32 address) -> void { if constexpr(Mode == Read ) trigger(4); if constexpr(Mode == Write) trigger(5); self.scc.badVirtualAddress = address; } auto CPU::Exception::busInstruction() -> void { trigger(6); } auto CPU::Exception::busData() -> void { trigger(7); self.scc.cause.coprocessorError = 0; } auto CPU::Exception::systemCall() -> void { trigger(8); } auto CPU::Exception::breakpoint(bool overrideVectorLocation) -> void { trigger(9); //todo: is this really 0xbfc0'0140 when BEV=1? if(overrideVectorLocation) self.ipu.pc -= 0x40, self.ipu.pd -= 0x40; } auto CPU::Exception::reservedInstruction() -> void { trigger(10); } auto CPU::Exception::coprocessor() -> void { trigger(11); } auto CPU::Exception::arithmeticOverflow() -> void { trigger(12); } auto CPU::Exception::trap() -> void { trigger(13); } ares-126/ares/ps1/cpu/icache.cpp000066400000000000000000000042701415063341600164700ustar00rootroot00000000000000//used by the recompiler to simulate instruction cache fetch timing auto CPU::InstructionCache::step(u32 address) -> void { auto& line = lines[address >> 4 & 0xff]; if(line.tag != (address & 0x1fff'fff0)) { if((address & 0x1fff'ffff) <= 0x007f'ffff) cpu.step(4 * 4); if((address & 0x1fff'ffff) >= 0x1fc0'0000) cpu.step(4 * 24); line.tag = address & 0x1fff'fff0 | line.tag & 0x0000'000e; } else { cpu.step(1); } } //used by the interpreter to fully emulate the instruction cache inline auto CPU::InstructionCache::fetch(u32 address) -> u32 { auto& line = lines[address >> 4 & 0xff]; if(line.tag != (address & 0x1fff'fff0)) { //reload line if((address & 0x1fff'ffff) <= 0x007f'ffff) { line.words[0] = cpu.ram.read(address & ~0xf | 0x0); line.words[1] = cpu.ram.read(address & ~0xf | 0x4); line.words[2] = cpu.ram.read(address & ~0xf | 0x8); line.words[3] = cpu.ram.read(address & ~0xf | 0xc); cpu.step(4 * 4); } if((address & 0x1fff'ffff) >= 0x1fc0'0000) { line.words[0] = bios.read(address & ~0xf | 0x0); line.words[1] = bios.read(address & ~0xf | 0x4); line.words[2] = bios.read(address & ~0xf | 0x8); line.words[3] = bios.read(address & ~0xf | 0xc); cpu.step(4 * 24); } //update address and mark tag as valid line.tag = address & 0x1fff'fff0 | line.tag & 0x0000'000e; } else { cpu.step(1); } return line.words[address >> 2 & 3]; } inline auto CPU::InstructionCache::read(u32 address) -> u32 { auto& line = lines[address >> 4 & 0xff]; return line.words[address >> 2 & 3]; } inline auto CPU::InstructionCache::invalidate(u32 address) -> void { auto& line = lines[address >> 4 & 0xff]; line.tag |= 1; //mark tag as invalid } auto CPU::InstructionCache::enable(bool enable) -> void { if(!enable) { for(auto& line : lines) line.tag |= 2; //mark tag as disabled } else { for(auto& line : lines) line.tag &= ~2; //mark tag as enabled } } auto CPU::InstructionCache::power(bool reset) -> void { for(auto& line : lines) { line.tag = 1; //mark tag as invalid for(auto& word : line.words) word = 0; //should be random } } ares-126/ares/ps1/cpu/interpreter-gte.cpp000066400000000000000000000563501415063341600204020ustar00rootroot00000000000000auto CPU::GTE::constructTable() -> void { for(u32 n : range(256)) { unsignedNewtonRaphsonTable[n] = max(0, (0x40000 / (n + 0x100) + 1) / 2 - 0x101); } unsignedNewtonRaphsonTable[256] = 0; } auto CPU::GTE::countLeadingZeroes16(u16 value) -> u32 { u32 zeroes = 0; while(!(value >> 15) && zeroes < 16) value <<= 1, zeroes++; return zeroes; } auto CPU::GTE::countLeadingZeroes32(u32 value) -> u32 { u32 zeroes = 0; if(!(value >> 31)) value = ~value; while(value >> 31) value <<= 1, zeroes++; return zeroes; } // auto CPU::GTE::getDataRegister(u32 index) -> u32 { u32 data = 0; switch(index) { case 0: data = u16(v.a.x) << 0 | u16(v.a.y) << 16; break; case 1: data = s16(v.a.z); break; case 2: data = u16(v.b.x) << 0 | u16(v.b.y) << 16; break; case 3: data = s16(v.b.z); break; case 4: data = u16(v.c.x) << 0 | u16(v.c.y) << 16; break; case 5: data = s16(v.c.z); break; case 6: data = rgbc.r << 0 | rgbc.g << 8 | rgbc.b << 16 | rgbc.t << 24; break; case 7: data = otz; break; case 8: data = ir.t; break; case 9: data = ir.x; break; case 10: data = ir.y; break; case 11: data = ir.z; break; case 12: data = u16(screen[0].x) << 0 | u16(screen[0].y) << 16; break; case 13: data = u16(screen[1].x) << 0 | u16(screen[1].y) << 16; break; case 14: data = u16(screen[2].x) << 0 | u16(screen[2].y) << 16; break; case 15: data = u16(screen[2].x) << 0 | u16(screen[2].y) << 16; break; //not screen[3] case 16: data = u16(screen[0].z); break; case 17: data = u16(screen[1].z); break; case 18: data = u16(screen[2].z); break; case 19: data = u16(screen[3].z); break; case 20: data = rgb[0]; break; case 21: data = rgb[1]; break; case 22: data = rgb[2]; break; case 23: data = rgb[3]; break; case 24: data = mac.t; break; case 25: data = mac.x; break; case 26: data = mac.y; break; case 27: data = mac.z; break; case 28: //IRGB case 29: {//ORGB u8 r = uclamp<5>(ir.x / 0x80); u8 g = uclamp<5>(ir.y / 0x80); u8 b = uclamp<5>(ir.z / 0x80); data = r << 0 | g << 5 | b << 10; } break; case 30: data = lzcs; break; case 31: data = lzcr; break; } return data; } auto CPU::GTE::setDataRegister(u32 index, u32 data) -> void { switch(index) { case 0: v.a.x = data >> 0; v.a.y = data >> 16; break; case 1: v.a.z = data >> 0; break; case 2: v.b.x = data >> 0; v.b.y = data >> 16; break; case 3: v.b.z = data >> 0; break; case 4: v.c.x = data >> 0; v.c.y = data >> 16; break; case 5: v.c.z = data >> 0; break; case 6: rgbc.r = data >> 0; rgbc.g = data >> 8; rgbc.b = data >> 16; rgbc.t = data >> 24; break; case 7: otz = data; break; case 8: ir.t = data; break; case 9: ir.x = data; break; case 10: ir.y = data; break; case 11: ir.z = data; break; case 12: screen[0].x = data >> 0; screen[0].y = data >> 16; break; case 13: screen[1].x = data >> 0; screen[1].y = data >> 16; break; case 14: screen[2].x = data >> 0; screen[2].y = data >> 16; break; case 15: {//SXP screen[0].x = screen[1].x; screen[0].y = screen[1].y; screen[1].x = screen[2].x; screen[1].y = screen[2].y; screen[2].x = data >> 0; screen[2].y = data >> 16; } break; case 16: screen[0].z = data; break; case 17: screen[1].z = data; break; case 18: screen[2].z = data; break; case 19: screen[3].z = data; break; case 20: rgb[0] = data; break; case 21: rgb[1] = data; break; case 22: rgb[2] = data; break; case 23: rgb[3] = data; break; case 24: mac.t = data; break; case 25: mac.x = data; break; case 26: mac.y = data; break; case 27: mac.z = data; break; case 28: ir.r = (data >> 0 & 31) * 0x80; ir.g = (data >> 5 & 31) * 0x80; ir.b = (data >> 10 & 31) * 0x80; break; case 29: break; case 30: lzcs = data; lzcr = countLeadingZeroes32(lzcs); break; case 31: break; } } auto CPU::GTE::getControlRegister(u32 index) -> u32 { u32 data = 0; switch(index) { case 0: data = u16(rotation.a.x) << 0 | u16(rotation.a.y) << 16; break; case 1: data = u16(rotation.a.z) << 0 | u16(rotation.b.x) << 16; break; case 2: data = u16(rotation.b.y) << 0 | u16(rotation.b.z) << 16; break; case 3: data = u16(rotation.c.x) << 0 | u16(rotation.c.y) << 16; break; case 4: data = s16(rotation.c.z); break; case 5: data = translation.x; break; case 6: data = translation.y; break; case 7: data = translation.z; break; case 8: data = u16(light.a.x) << 0 | u16(light.a.y) << 16; break; case 9: data = u16(light.a.z) << 0 | u16(light.b.x) << 16; break; case 10: data = u16(light.b.y) << 0 | u16(light.b.z) << 16; break; case 11: data = u16(light.c.x) << 0 | u16(light.c.y) << 16; break; case 12: data = s16(light.c.z); break; case 13: data = backgroundColor.r; break; case 14: data = backgroundColor.g; break; case 15: data = backgroundColor.b; break; case 16: data = u16(color.a.x) << 0 | u16(color.a.y) << 16; break; case 17: data = u16(color.a.z) << 0 | u16(color.b.x) << 16; break; case 18: data = u16(color.b.y) << 0 | u16(color.b.z) << 16; break; case 19: data = u16(color.c.x) << 0 | u16(color.c.y) << 16; break; case 20: data = s16(color.c.z); break; case 21: data = farColor.r; break; case 22: data = farColor.g; break; case 23: data = farColor.b; break; case 24: data = ofx; break; case 25: data = ofy; break; case 26: data = s16(h); break; case 27: data = dqa; break; case 28: data = dqb; break; case 29: data = zsf3; break; case 30: data = zsf4; break; case 31: data = flag.value; break; } return data; } auto CPU::GTE::setControlRegister(u32 index, u32 data) -> void { switch(index) { case 0: rotation.a.x = data >> 0; rotation.a.y = data >> 16; break; case 1: rotation.a.z = data >> 0; rotation.b.x = data >> 16; break; case 2: rotation.b.y = data >> 0; rotation.b.z = data >> 16; break; case 3: rotation.c.x = data >> 0; rotation.c.y = data >> 16; break; case 4: rotation.c.z = data >> 0; break; case 5: translation.x = data; break; case 6: translation.y = data; break; case 7: translation.z = data; break; case 8: light.a.x = data >> 0; light.a.y = data >> 16; break; case 9: light.a.z = data >> 0; light.b.x = data >> 16; break; case 10: light.b.y = data >> 0; light.b.z = data >> 16; break; case 11: light.c.x = data >> 0; light.c.y = data >> 16; break; case 12: light.c.z = data >> 0; break; case 13: backgroundColor.r = data; break; case 14: backgroundColor.g = data; break; case 15: backgroundColor.b = data; break; case 16: color.a.x = data >> 0; color.a.y = data >> 16; break; case 17: color.a.z = data >> 0; color.b.x = data >> 16; break; case 18: color.b.y = data >> 0; color.b.z = data >> 16; break; case 19: color.c.x = data >> 0; color.c.y = data >> 16; break; case 20: color.c.z = data >> 0; break; case 21: farColor.r = data; break; case 22: farColor.g = data; break; case 23: farColor.b = data; break; case 24: ofx = data; break; case 25: ofy = data; break; case 26: h = data; break; case 27: dqa = data; break; case 28: dqb = data; break; case 29: zsf3 = data; break; case 30: zsf4 = data; break; case 31: flag.value = data & 0x7fff'f000; epilogue(); break; } } // template auto CPU::GTE::checkMac(s64 value) -> s64 { static constexpr s64 min = -(s64(1) << (id == 0 ? 31 : 43)); static constexpr s64 max = +(s64(1) << (id == 0 ? 31 : 43)) - 1; if(value < min) { if constexpr(id == 0) flag.mac0_underflow = 1; if constexpr(id == 1) flag.mac1_underflow = 1; if constexpr(id == 2) flag.mac2_underflow = 1; if constexpr(id == 3) flag.mac3_underflow = 1; } if(value > max) { if constexpr(id == 0) flag.mac0_overflow = 1; if constexpr(id == 1) flag.mac1_overflow = 1; if constexpr(id == 2) flag.mac2_overflow = 1; if constexpr(id == 3) flag.mac3_overflow = 1; } return value; } template auto CPU::GTE::extend(s64 mac) -> s64 { checkMac(mac); if constexpr(id == 1) return sclip<44>(mac); if constexpr(id == 2) return sclip<44>(mac); if constexpr(id == 3) return sclip<44>(mac); unreachable; } template auto CPU::GTE::saturateIr(s32 value, bool lm) -> s32 { static constexpr s32 min = id == 0 ? 0x0000 : -0x8000; static constexpr s32 max = id == 0 ? 0x1000 : +0x7fff; s32 lmm = lm ? 0 : min; if(value < lmm) { value = lmm; if constexpr(id == 0) flag.ir0_saturated = 1; if constexpr(id == 1) flag.ir1_saturated = 1; if constexpr(id == 2) flag.ir2_saturated = 1; if constexpr(id == 3) flag.ir3_saturated = 1; } if(value > max) { value = max; if constexpr(id == 0) flag.ir0_saturated = 1; if constexpr(id == 1) flag.ir1_saturated = 1; if constexpr(id == 2) flag.ir2_saturated = 1; if constexpr(id == 3) flag.ir3_saturated = 1; } return value; } template auto CPU::GTE::saturateColor(s32 value) -> u8 { if(value < 0 || value > 255) { if constexpr(id == 0) flag.r_saturated = 1; if constexpr(id == 1) flag.g_saturated = 1; if constexpr(id == 2) flag.b_saturated = 1; return uclamp<8>(value); } return value; } // template auto CPU::GTE::setMac(s64 value) -> s64 { checkMac(value); if constexpr(id == 0) { mac.t = value; return value; } if constexpr(id == 1) { mac.x = value >> sf; return value >> sf; } if constexpr(id == 2) { mac.y = value >> sf; return value >> sf; } if constexpr(id == 3) { mac.z = value >> sf; return value >> sf; } } template auto CPU::GTE::setIr(s32 value, bool lm) -> void { if constexpr(id == 0) ir.t = saturateIr<0>(value, lm); if constexpr(id == 1) ir.x = saturateIr<1>(value, lm); if constexpr(id == 2) ir.y = saturateIr<2>(value, lm); if constexpr(id == 3) ir.z = saturateIr<3>(value, lm); } template auto CPU::GTE::setMacAndIr(s64 value, bool lm) -> void { setIr(setMac(value), lm); } auto CPU::GTE::setMacAndIr(const v64& vector) -> void { setMacAndIr<1>(vector.x, lm); setMacAndIr<2>(vector.y, lm); setMacAndIr<3>(vector.z, lm); } auto CPU::GTE::setOtz(s64 value) -> void { static constexpr s64 min = 0x0000; static constexpr s64 max = 0xffff; value >>= 12; if(value < min) { otz = min; flag.otz_saturated = 1; return; } if(value > max) { otz = max; flag.otz_saturated = 1; return; } otz = value; } // auto CPU::GTE::matrixMultiply(const m16& matrix, const v16& vector, const v32& translation) -> v64 { s64 x = extend<1>(extend<1>(extend<1>((s64(translation.x) << 12) + matrix.a.x * vector.x) + matrix.a.y * vector.y) + matrix.a.z * vector.z); s64 y = extend<2>(extend<2>(extend<2>((s64(translation.y) << 12) + matrix.b.x * vector.x) + matrix.b.y * vector.y) + matrix.b.z * vector.z); s64 z = extend<3>(extend<3>(extend<3>((s64(translation.z) << 12) + matrix.c.x * vector.x) + matrix.c.y * vector.y) + matrix.c.z * vector.z); return {x, y, z}; } auto CPU::GTE::vectorMultiply(const v16& vector1, const v16& vector2, const v16& translation) -> v64 { s64 x = (s64(translation.x) << 12) + vector1.x * vector2.x; s64 y = (s64(translation.y) << 12) + vector1.y * vector2.y; s64 z = (s64(translation.z) << 12) + vector1.z * vector2.z; return {x, y, z}; } auto CPU::GTE::vectorMultiply(const v16& vector, s16 scalar) -> v64 { s64 x = vector.x * scalar; s64 y = vector.y * scalar; s64 z = vector.z * scalar; return {x, y, z}; } auto CPU::GTE::divide(u32 lhs, u32 rhs) -> u32 { if(rhs * 2 <= lhs) { flag.divide_overflow = 1; return 0x1ffff; } u32 shift = countLeadingZeroes16(rhs); lhs <<= shift; rhs <<= shift; u32 divisor = rhs | 0x8000; s32 x = s32(0x101 + unsignedNewtonRaphsonTable[(divisor & 0x7fff) + 0x40 >> 7]); s32 d = s32(divisor) * -x + 0x80 >> 8; u32 reciprocal = x * (0x20000 + d) + 0x80 >> 8; u32 result = u64(lhs) * reciprocal + 0x8000 >> 16; return min(0x1ffff, result); } auto CPU::GTE::pushScreenX(s32 sx) -> void { if(sx < -1024) sx = -1024, flag.sx2_saturated = 1; if(sx > +1023) sx = +1023, flag.sx2_saturated = 1; screen[0].x = screen[1].x; screen[1].x = screen[2].x; screen[2].x = sx; } auto CPU::GTE::pushScreenY(s32 sy) -> void { if(sy < -1024) sy = -1024, flag.sy2_saturated = 1; if(sy > +1023) sy = +1023, flag.sy2_saturated = 1; screen[0].y = screen[1].y; screen[1].y = screen[2].y; screen[2].y = sy; } auto CPU::GTE::pushScreenZ(s32 sz) -> void { if(sz < 0x0000) sz = 0x0000, flag.sz3_saturated = 1; if(sz > 0xffff) sz = 0xffff, flag.sz3_saturated = 1; screen[0].z = screen[1].z; screen[1].z = screen[2].z; screen[2].z = screen[3].z; screen[3].z = sz; } auto CPU::GTE::pushColor(s32 r, s32 g, s32 b) -> void { r = saturateColor<0>(r); g = saturateColor<1>(g); b = saturateColor<2>(b); rgb[0] = rgb[1]; rgb[1] = rgb[2]; rgb[2] = r << 0 | g << 8 | b << 16 | rgbc.t << 24; } auto CPU::GTE::pushColor() -> void { pushColor(mac.r >> 4, mac.g >> 4, mac.b >> 4); } // inline auto CPU::GTE::prologue() -> void { flag.value = 0; } inline auto CPU::GTE::prologue(bool lm, u8 sf) -> void { this->lm = lm; this->sf = sf; flag.value = 0; } inline auto CPU::GTE::epilogue() -> void { flag.error = bool(flag.value & 0x7f87'e000); } // #define v16 GTE::v16 #define v32 GTE::v32 #define v64 GTE::v64 #define m16 GTE::m16 #define getDataRegister gte.getDataRegister #define setDataRegister gte.setDataRegister #define getControlRegister gte.getControlRegister #define setControlRegister gte.setControlRegister #define checkMac gte.checkMac #define extend gte.extend #define saturateIr gte.saturateIr #define setMac gte.setMac #define setIr gte.setIr #define setMacAndIr gte.setMacAndIr #define setOtz gte.setOtz #define matrixMultiply gte.matrixMultiply #define vectorMultiply gte.vectorMultiply #define divide gte.divide #define pushScreenX gte.pushScreenX #define pushScreenY gte.pushScreenY #define pushScreenZ gte.pushScreenZ #define pushColor gte.pushColor #define prologue gte.prologue #define epilogue gte.epilogue #define v gte.v #define rgbc gte.rgbc #define ir gte.ir #define screen gte.screen #define rgb gte.rgb #define mac gte.mac #define rotation gte.rotation #define translation gte.translation #define light gte.light #define backgroundColor gte.backgroundColor #define color gte.color #define farColor gte.farColor #define ofx gte.ofx #define ofy gte.ofy #define h gte.h #define dqa gte.dqa #define dqb gte.dqb #define zsf3 gte.zsf3 #define zsf4 gte.zsf4 auto CPU::AVSZ3() -> void { prologue(); setOtz(setMac<0>(s64(zsf3) * (screen[1].z + screen[2].z + screen[3].z))); epilogue(); } auto CPU::AVSZ4() -> void { prologue(); setOtz(setMac<0>(s64(zsf4) * (screen[0].z + screen[1].z + screen[2].z + screen[3].z))); epilogue(); } auto CPU::CC(bool lm, u8 sf) -> void { prologue(lm, sf); setMacAndIr(matrixMultiply(color, ir, backgroundColor)); setMacAndIr(vectorMultiply({rgbc.r << 4, rgbc.g << 4, rgbc.b << 4}, ir)); pushColor(); epilogue(); } auto CPU::CDP(bool lm, u8 sf) -> void { prologue(lm, sf); setMacAndIr(matrixMultiply(color, ir, backgroundColor)); v16 i = ir; setMacAndIr<1>((s64(farColor.r) << 12) - ((rgbc.r << 4) * ir.x)); setMacAndIr<2>((s64(farColor.g) << 12) - ((rgbc.g << 4) * ir.y)); setMacAndIr<3>((s64(farColor.b) << 12) - ((rgbc.b << 4) * ir.z)); setMacAndIr<1>(((rgbc.r << 4) * i.x) + ir.t * ir.x, lm); setMacAndIr<2>(((rgbc.g << 4) * i.y) + ir.t * ir.y, lm); setMacAndIr<3>(((rgbc.b << 4) * i.z) + ir.t * ir.z, lm); pushColor(); epilogue(); } auto CPU::CFC2(u32& rt, u8 rd) -> void { if(!scc.status.enable.coprocessor2) return exception.coprocessor(); load(rt, getControlRegister(rd)); } auto CPU::CTC2(cu32& rt, u8 rd) -> void { if(!scc.status.enable.coprocessor2) return exception.coprocessor(); setControlRegister(rd, rt); } auto CPU::DCPL(bool lm, u8 sf) -> void { prologue(lm, sf); v16 i = ir; v16 col = {rgbc.r << 4, rgbc.g << 4, rgbc.b << 4}; setMacAndIr<1>((s64(farColor.r) << 12) - col.r * i.x); setMacAndIr<2>((s64(farColor.g) << 12) - col.g * i.y); setMacAndIr<3>((s64(farColor.b) << 12) - col.b * i.z); setMacAndIr<1>(col.r * i.x + ir.t * ir.x, lm); setMacAndIr<2>(col.g * i.y + ir.t * ir.y, lm); setMacAndIr<3>(col.b * i.z + ir.t * ir.z, lm); pushColor(); epilogue(); } //meta-instruction auto CPU::DPC(const v16& col) -> void { setMacAndIr<1>((s64(farColor.r) << 12) - (col.r << 12)); setMacAndIr<2>((s64(farColor.g) << 12) - (col.g << 12)); setMacAndIr<3>((s64(farColor.b) << 12) - (col.b << 12)); setMacAndIr(vectorMultiply({ir.t, ir.t, ir.t}, ir, col)); pushColor(); } auto CPU::DPCS(bool lm, u8 sf) -> void { prologue(lm, sf); DPC({rgbc.r << 4, rgbc.g << 4, rgbc.b << 4}); epilogue(); } auto CPU::DPCT(bool lm, u8 sf) -> void { prologue(lm, sf); DPC({u8(rgb[0] >> 0) << 4, u8(rgb[0] >> 8) << 4, u8(rgb[0] >> 16) << 4}); DPC({u8(rgb[0] >> 0) << 4, u8(rgb[0] >> 8) << 4, u8(rgb[0] >> 16) << 4}); DPC({u8(rgb[0] >> 0) << 4, u8(rgb[0] >> 8) << 4, u8(rgb[0] >> 16) << 4}); epilogue(); } auto CPU::GPF(bool lm, u8 sf) -> void { prologue(lm, sf); setMacAndIr(vectorMultiply(ir, ir.t)); pushColor(); epilogue(); } auto CPU::GPL(bool lm, u8 sf) -> void { prologue(lm, sf); setMacAndIr<1>((s64(mac.x) << sf) + ir.t * ir.x, lm); setMacAndIr<2>((s64(mac.y) << sf) + ir.t * ir.y, lm); setMacAndIr<3>((s64(mac.z) << sf) + ir.t * ir.z, lm); pushColor(); epilogue(); } auto CPU::INTPL(bool lm, u8 sf) -> void { prologue(lm, sf); v16 i = ir; setMacAndIr<1>((s64(farColor.r) << 12) - (i.x << 12)); setMacAndIr<2>((s64(farColor.g) << 12) - (i.y << 12)); setMacAndIr<3>((s64(farColor.b) << 12) - (i.z << 12)); setMacAndIr<1>(s64(ir.t * ir.x) + (i.x << 12), lm); setMacAndIr<2>(s64(ir.t * ir.y) + (i.y << 12), lm); setMacAndIr<3>(s64(ir.t * ir.z) + (i.z << 12), lm); pushColor(); epilogue(); } auto CPU::LWC2(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor2) return exception.coprocessor(); auto data = read(rs + imm); if(exception()) return; setDataRegister(rt, data); } auto CPU::MFC2(u32& rt, u8 rd) -> void { if(!scc.status.enable.coprocessor2) return exception.coprocessor(); load(rt, getDataRegister(rd)); } auto CPU::MTC2(cu32& rt, u8 rd) -> void { if(!scc.status.enable.coprocessor2) return exception.coprocessor(); setDataRegister(rd, rt); } auto CPU::MVMVA(bool lm, u8 tv, u8 mv, u8 mm, u8 sf) -> void { prologue(lm, sf); v32 tr; switch(tv) { case 0: tr = translation; break; case 1: tr = backgroundColor; break; case 2: tr = farColor; break; case 3: tr = {0, 0, 0}; break; } v16 vector; switch(mv) { case 0: vector = v.a; break; case 1: vector = v.b; break; case 2: vector = v.c; break; case 3: vector = ir; break; } m16 matrix; switch(mm) { case 0: matrix = rotation; break; case 1: matrix = light; break; case 2: matrix = color; break; case 3: //reserved matrix.a.x = -(rgbc.r << 4); matrix.a.y = +(rgbc.r << 4); matrix.a.z = ir.t; matrix.b.x = rotation.a.z; matrix.b.y = rotation.a.z; matrix.b.z = rotation.a.z; matrix.c.x = rotation.b.y; matrix.c.y = rotation.b.y; matrix.c.z = rotation.b.y; break; } if(tv != 2) { setMacAndIr(matrixMultiply(matrix, vector, tr)); } else { setIr<1>(extend<1>((s64(tr.x) << 12) + matrix.a.x * vector.x) >> sf); setIr<2>(extend<2>((s64(tr.y) << 12) + matrix.b.x * vector.x) >> sf); setIr<3>(extend<3>((s64(tr.z) << 12) + matrix.c.x * vector.x) >> sf); v64 result; result.x = extend<1>(extend<1>(matrix.a.y * vector.y) + matrix.a.z * vector.z); result.y = extend<2>(extend<2>(matrix.b.y * vector.y) + matrix.b.z * vector.z); result.z = extend<3>(extend<3>(matrix.c.y * vector.y) + matrix.c.z * vector.z); setMacAndIr(result); } epilogue(); } //meta-instruction template auto CPU::NC(const v16& vector) -> void { setMacAndIr(matrixMultiply(light, vector)); setMacAndIr(matrixMultiply(color, ir, backgroundColor)); if constexpr(m == 1) { setMacAndIr<1>((rgbc.r << 4) * ir.x); setMacAndIr<2>((rgbc.g << 4) * ir.y); setMacAndIr<3>((rgbc.b << 4) * ir.z); } if constexpr(m == 2) { v16 i = ir; setMacAndIr<1>((s64(farColor.r) << 12) - (rgbc.r << 4) * i.x); setMacAndIr<2>((s64(farColor.g) << 12) - (rgbc.g << 4) * i.y); setMacAndIr<3>((s64(farColor.b) << 12) - (rgbc.b << 4) * i.z); setMacAndIr<1>((rgbc.r << 4) * i.x + ir.t * ir.x, gte.lm); setMacAndIr<2>((rgbc.g << 4) * i.y + ir.t * ir.y, gte.lm); setMacAndIr<3>((rgbc.b << 4) * i.z + ir.t * ir.z, gte.lm); } pushColor(); } auto CPU::NCCS(bool lm, u8 sf) -> void { prologue(lm, sf); NC<1>(v.a); epilogue(); } auto CPU::NCCT(bool lm, u8 sf) -> void { prologue(lm, sf); NC<1>(v.a); NC<1>(v.b); NC<1>(v.c); epilogue(); } auto CPU::NCDS(bool lm, u8 sf) -> void { prologue(lm, sf); NC<2>(v.a); epilogue(); } auto CPU::NCDT(bool lm, u8 sf) -> void { prologue(lm, sf); NC<2>(v.a); NC<2>(v.b); NC<2>(v.c); epilogue(); } auto CPU::NCLIP() -> void { prologue(); s64 p0 = s64(screen[0].x) * s64(screen[1].y); s64 p1 = s64(screen[1].x) * s64(screen[2].y); s64 p2 = s64(screen[2].x) * s64(screen[0].y); s64 p3 = s64(screen[0].x) * s64(screen[2].y); s64 p4 = s64(screen[1].x) * s64(screen[0].y); s64 p5 = s64(screen[2].x) * s64(screen[1].y); setMac<0>(p0 + p1 + p2 - p3 - p4 - p5); epilogue(); } auto CPU::NCS(bool lm, u8 sf) -> void { prologue(lm, sf); NC<0>(v.a); epilogue(); } auto CPU::NCT(bool lm, u8 sf) -> void { prologue(lm, sf); NC<0>(v.a); NC<0>(v.b); NC<0>(v.c); epilogue(); } auto CPU::OP(bool lm, u8 sf) -> void { prologue(lm, sf); setMac<1>(rotation.b.y * ir.z - rotation.c.z * ir.y); setMac<2>(rotation.c.z * ir.x - rotation.a.x * ir.z); setMac<3>(rotation.a.x * ir.y - rotation.b.y * ir.x); setIr<1>(mac.x, lm); setIr<2>(mac.y, lm); setIr<3>(mac.z, lm); epilogue(); } //meta-instruction: rotation, translation, and perspective transformation auto CPU::RTP(v16 vector, bool last) -> void { auto [x, y, z] = matrixMultiply(rotation, vector, translation); setMacAndIr<1>(x, gte.lm); setMacAndIr<2>(y, gte.lm); setMac<3>(z); saturateIr<3>(z >> 12); ir.z = std::clamp(mac.z, gte.lm ? 0x0000 : -0x8000, +0x7fff); pushScreenZ(z >> 12); s64 dv = divide(h, screen[3].z); s32 sx = checkMac<0>(s64(dv * ir.x * 1.0f) + ofx) >> 16; s32 sy = checkMac<0>(dv * ir.y + ofy) >> 16; pushScreenX(sx); pushScreenY(sy); if(!last) return; s64 sz = setMac<0>(dv * dqa + dqb); ir.t = saturateIr<0>(sz >> 12); } auto CPU::RTPS(bool lm, u8 sf) -> void { prologue(lm, sf); RTP(v.a, 1); epilogue(); } auto CPU::RTPT(bool lm, u8 sf) -> void { prologue(lm, sf); RTP(v.a, 0); RTP(v.b, 0); RTP(v.c, 1); epilogue(); } auto CPU::SQR(bool lm, u8 sf) -> void { prologue(lm, sf); setMacAndIr(vectorMultiply(ir, ir)); epilogue(); } auto CPU::SWC2(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor2) return exception.coprocessor(); auto data = getDataRegister(rt); write(rs + imm, data); } #undef v16 #undef v32 #undef v64 #undef m16 #undef getDataRegister #undef setDataRegister #undef getControlRegister #undef setControlRegister #undef checkMac #undef extend #undef saturateIr #undef setMac #undef setIr #undef setMacAndIr #undef setOtz #undef matrixMultiply #undef vectorMultiply #undef divide #undef pushScreenX #undef pushScreenY #undef pushScreenZ #undef pushColor #undef prologue #undef epilogue #undef v #undef rgbc #undef ir #undef screen #undef rgb #undef mac #undef rotation #undef translation #undef light #undef backgroundColor #undef color #undef farColor #undef ofx #undef ofy #undef h #undef dqa #undef dqb #undef zsf3 #undef zsf4 ares-126/ares/ps1/cpu/interpreter-ipu.cpp000066400000000000000000000167731415063341600204250ustar00rootroot00000000000000#define PC ipu.pc #define PD ipu.pd #define RA ipu.r[31] #define HI ipu.hi #define LO ipu.lo auto CPU::ADD(u32& rd, cu32& rs, cu32& rt) -> void { if(~(rs ^ rt) & (rs ^ rs + rt) & 0x8000'0000) return exception.arithmeticOverflow(); store(rd, rs + rt); } auto CPU::ADDI(u32& rt, cu32& rs, s16 imm) -> void { if(~(rs ^ imm) & (rs ^ rs + imm) & 0x8000'0000) return exception.arithmeticOverflow(); store(rt, rs + imm); } auto CPU::ADDIU(u32& rt, cu32& rs, s16 imm) -> void { store(rt, rs + imm); } auto CPU::ADDU(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, rs + rt); } auto CPU::AND(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, rs & rt); } auto CPU::ANDI(u32& rt, cu32& rs, u16 imm) -> void { store(rt, rs & imm); } auto CPU::BEQ(cu32& rs, cu32& rt, s16 imm) -> void { branch(PD + (imm << 2), rs == rt); } auto CPU::BGEZ(cs32& rs, s16 imm) -> void { branch(PD + (imm << 2), rs >= 0); } auto CPU::BGEZAL(cs32& rs, s16 imm) -> void { branch(PD + (imm << 2), rs >= 0); store(RA, PD + 4); } auto CPU::BGTZ(cs32& rs, s16 imm) -> void { branch(PD + (imm << 2), rs > 0); } auto CPU::BLEZ(cs32& rs, s16 imm) -> void { branch(PD + (imm << 2), rs <= 0); } auto CPU::BLTZ(cs32& rs, s16 imm) -> void { branch(PD + (imm << 2), rs < 0); } auto CPU::BLTZAL(cs32& rs, s16 imm) -> void { branch(PD + (imm << 2), rs < 0); store(RA, PD + 4); } auto CPU::BNE(cu32& rs, cu32& rt, s16 imm) -> void { branch(PD + (imm << 2), rs != rt); } auto CPU::BREAK() -> void { exception.breakpoint(0); } auto CPU::DIV(cs32& rs, cs32& rt) -> void { if(rt) { //cast to s64 to prevent exception on INT32_MIN / -1 LO = s64(rs) / s64(rt); HI = s64(rs) % s64(rt); } else { LO = rs < 0 ? +1 : -1; HI = rs; } } auto CPU::DIVU(cu32& rs, cu32& rt) -> void { if(rt) { LO = rs / rt; HI = rs % rt; } else { LO = -1; HI = rs; } } auto CPU::J(u32 imm) -> void { branch((PD & 0xf000'0000) + (imm << 2)); } auto CPU::JAL(u32 imm) -> void { branch((PD & 0xf000'0000) + (imm << 2)); store(RA, PD + 4); } auto CPU::JALR(u32& rd, cu32& rs) -> void { branch(rs); store(rd, PD + 4); } auto CPU::JR(cu32& rs) -> void { branch(rs); } auto CPU::LB(u32& rt, cu32& rs, s16 imm) -> void { auto data = read(rs + imm); load(rt, s8(data)); } auto CPU::LBU(u32& rt, cu32& rs, s16 imm) -> void { auto data = read(rs + imm); load(rt, u8(data)); } auto CPU::LH(u32& rt, cu32& rs, s16 imm) -> void { auto data = read(rs + imm); if(exception()) return; load(rt, s16(data)); } auto CPU::LHU(u32& rt, cu32& rs, s16 imm) -> void { auto data = read(rs + imm); if(exception()) return; load(rt, u16(data)); } auto CPU::LUI(u32& rt, u16 imm) -> void { store(rt, imm << 16); } auto CPU::LW(u32& rt, cu32& rs, s16 imm) -> void { auto data = read(rs + imm); if(exception()) return; load(rt, s32(data)); } auto CPU::LWL(u32& rt, cu32& rs, s16 imm) -> void { u32 address = rs + imm; u32 data = load(rt); switch(address & 3) { case 0: data &= 0x00ffffff; data |= read(address & ~3 | 0) << 24; if(exception()) return; break; case 1: data &= 0x0000ffff; data |= read(address & ~3 | 0) << 16; if(exception()) return; break; case 2: data &= 0x000000ff; data |= read(address & ~3 | 0) << 8; if(exception()) return; data |= read(address & ~3 | 2) << 24; if(exception()) return; break; case 3: data &= 0x00000000; data |= read(address & ~3 | 0) << 0; if(exception()) return; break; } load(rt, data); } auto CPU::LWR(u32& rt, cu32& rs, s16 imm) -> void { u32 address = rs + imm; u32 data = load(rt); switch(address & 3) { case 0: data &= 0x00000000; data |= read(address & ~3 | 0) << 0; if(exception()) break; break; case 1: data &= 0xff000000; data |= read(address & ~3 | 1) << 0; if(exception()) break; data |= read(address & ~3 | 2) << 8; if(exception()) break; break; case 2: data &= 0xffff0000; data |= read(address & ~3 | 2) << 0; if(exception()) break; break; case 3: data &= 0xffffff00; data |= read(address & ~3 | 3) << 0; if(exception()) break; break; } load(rt, data); } auto CPU::MFHI(u32& rd) -> void { store(rd, HI); } auto CPU::MFLO(u32& rd) -> void { store(rd, LO); } auto CPU::MTHI(cu32& rs) -> void { HI = rs; } auto CPU::MTLO(cu32& rs) -> void { LO = rs; } auto CPU::MULT(cs32& rs, cs32& rt) -> void { u64 result = s64(rs) * s64(rt); LO = result >> 0; HI = result >> 32; } auto CPU::MULTU(cu32& rs, cu32& rt) -> void { u64 result = u64(rs) * u64(rt); LO = result >> 0; HI = result >> 32; } auto CPU::NOR(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, ~(rs | rt)); } auto CPU::OR(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, rs | rt); } auto CPU::ORI(u32& rt, cu32& rs, u16 imm) -> void { store(rt, rs | imm); } auto CPU::SB(cu32& rt, cu32& rs, s16 imm) -> void { write(rs + imm, rt); } auto CPU::SH(cu32& rt, cu32& rs, s16 imm) -> void { write(rs + imm, rt); } auto CPU::SLL(u32& rd, cu32& rt, u8 sa) -> void { store(rd, rt << sa); } auto CPU::SLLV(u32& rd, cu32& rt, cu32& rs) -> void { store(rd, rt << (rs & 31)); } auto CPU::SLT(u32& rd, cs32& rs, cs32& rt) -> void { store(rd, rs < rt); } auto CPU::SLTI(u32& rt, cs32& rs, s16 imm) -> void { store(rt, rs < imm); } auto CPU::SLTIU(u32& rt, cu32& rs, s16 imm) -> void { store(rt, rs < imm); } auto CPU::SLTU(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, rs < rt); } auto CPU::SRA(u32& rd, cs32& rt, u8 sa) -> void { store(rd, rt >> sa); } auto CPU::SRAV(u32& rd, cs32& rt, cu32& rs) -> void { store(rd, rt >> (rs & 31)); } auto CPU::SRL(u32& rd, cu32& rt, u8 sa) -> void { store(rd, rt >> sa); } auto CPU::SRLV(u32& rd, cu32& rt, cu32& rs) -> void { store(rd, rt >> (rs & 31)); } auto CPU::SUB(u32& rd, cu32& rs, cu32& rt) -> void { if((rs ^ rt) & (rs ^ rs - rt) & 0x8000'0000) return exception.arithmeticOverflow(); store(rd, rs - rt); } auto CPU::SUBU(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, rs - rt); } auto CPU::SW(cu32& rt, cu32& rs, s16 imm) -> void { write(rs + imm, rt); } auto CPU::SWL(cu32& rt, cu32& rs, s16 imm) -> void { u32 address = rs + imm; u32 data = rt; switch(address & 3) { case 0: write(address & ~3 | 0, data >> 24); if(exception()) return; break; case 1: write(address & ~3 | 0, data >> 16); if(exception()) return; break; case 2: write(address & ~3 | 0, data >> 8); if(exception()) return; write(address & ~3 | 2, data >> 24); if(exception()) return; break; case 3: write(address & ~3 | 0, data >> 0); if(exception()) return; break; } } auto CPU::SWR(cu32& rt, cu32& rs, s16 imm) -> void { u32 address = rs + imm; u32 data = rt; switch(address & 3) { case 0: write(address & ~3 | 0, data >> 0); if(exception()) return; break; case 1: write(address & ~3 | 1, data >> 0); if(exception()) return; write(address & ~3 | 2, data >> 8); if(exception()) return; break; case 2: write(address & ~3 | 2, data >> 0); if(exception()) return; break; case 3: write(address & ~3 | 3, data >> 0); if(exception()) return; break; } } auto CPU::SYSCALL() -> void { exception.systemCall(); } auto CPU::XOR(u32& rd, cu32& rs, cu32& rt) -> void { store(rd, rs ^ rt); } auto CPU::XORI(u32& rt, cu32& rs, u16 imm) -> void { store(rt, rs ^ imm); } #undef PC #undef PD #undef RA #undef HI #undef LO ares-126/ares/ps1/cpu/interpreter-scc.cpp000066400000000000000000000155661415063341600203770ustar00rootroot00000000000000auto CPU::getControlRegisterSCC(u8 index) -> u32 { n32 data = 0; switch(index & 15) { case 3: //Breakpoint Code Address data.bit(0,31) = scc.breakpoint.address.code; break; case 5: //Breakpoint Data Address data.bit(0,31) = scc.breakpoint.address.data; break; case 6: //Target Address data.bit(0,31) = scc.targetAddress; break; case 7: //Breakpoint Control data.bit( 0) = scc.breakpoint.status.any; data.bit( 1) = scc.breakpoint.status.code; data.bit( 2) = scc.breakpoint.status.data; data.bit( 3) = scc.breakpoint.status.read; data.bit( 4) = scc.breakpoint.status.write; data.bit( 5) = scc.breakpoint.status.trace; data.bit(12) = scc.breakpoint.redirection.bit(0); data.bit(13) = scc.breakpoint.redirection.bit(1); data.bit(14) = scc.breakpoint.unknown.bit(0); data.bit(15) = scc.breakpoint.unknown.bit(1); data.bit(23) = scc.breakpoint.enable.master; data.bit(24) = scc.breakpoint.test.code; data.bit(25) = scc.breakpoint.test.data; data.bit(26) = scc.breakpoint.test.read; data.bit(27) = scc.breakpoint.test.write; data.bit(28) = scc.breakpoint.test.trace; data.bit(29) = scc.breakpoint.enable.kernel; data.bit(30) = scc.breakpoint.enable.user; data.bit(31) = scc.breakpoint.enable.trap; break; case 8: //Bad Virtual Address data.bit(0,31) = scc.badVirtualAddress; break; case 9: //Breakpoint Data Mask data.bit(0,31) = scc.breakpoint.mask.data; break; case 11: //Breakpoint Code Mask data.bit(0,31) = scc.breakpoint.mask.code; break; case 12: //Status data.bit( 0) = scc.status.frame[0].interruptEnable; data.bit( 1) = scc.status.frame[0].userMode; data.bit( 2) = scc.status.frame[1].interruptEnable; data.bit( 3) = scc.status.frame[1].userMode; data.bit( 4) = scc.status.frame[2].interruptEnable; data.bit( 5) = scc.status.frame[2].userMode; data.bit( 8,15) = scc.status.interruptMask; data.bit(16) = scc.status.cache.isolate; data.bit(17) = scc.status.cache.swap; data.bit(18) = scc.status.cache.parityZero; data.bit(19) = scc.status.cache.loadWasData; data.bit(20) = scc.status.cache.parityError; data.bit(21) = scc.status.tlbShutdown; data.bit(22) = scc.status.vectorLocation; data.bit(25) = scc.status.reverseEndian; data.bit(28) = scc.status.enable.coprocessor0; data.bit(29) = scc.status.enable.coprocessor1; data.bit(30) = scc.status.enable.coprocessor2; data.bit(31) = scc.status.enable.coprocessor3; break; case 13: //Cause data.bit( 2, 6) = scc.cause.exceptionCode; data.bit( 8,15) = scc.cause.interruptPending; data.bit(28,29) = scc.cause.coprocessorError; data.bit(30) = scc.cause.branchTaken; data.bit(31) = scc.cause.branchDelay; break; case 14: data.bit(0,31) = scc.epc; break; case 15: //Product ID data.bit(0, 7) = scc.productID.revision; data.bit(8,15) = scc.productID.implementation; break; } return data; } auto CPU::setControlRegisterSCC(u8 index, u32 value) -> void { n32 data = value; switch(index & 15) { case 3: //Breakpoint Code Address scc.breakpoint.address.code = data; break; case 5: //Breakpoint Data Address scc.breakpoint.address.data = data; break; case 6: //Target Address //scc.targetAddress = data; //read-only break; case 7: //Breakpoint Control scc.breakpoint.status.any = data.bit( 0); scc.breakpoint.status.code = data.bit( 1); scc.breakpoint.status.data = data.bit( 2); scc.breakpoint.status.read = data.bit( 3); scc.breakpoint.status.write = data.bit( 4); scc.breakpoint.status.trace = data.bit( 5); scc.breakpoint.redirection.bit(0) = data.bit(12); scc.breakpoint.redirection.bit(1) = data.bit(13); scc.breakpoint.unknown.bit(0) = data.bit(14); scc.breakpoint.unknown.bit(1) = data.bit(15); scc.breakpoint.enable.master = data.bit(23); scc.breakpoint.test.code = data.bit(24); scc.breakpoint.test.data = data.bit(25); scc.breakpoint.test.read = data.bit(26); scc.breakpoint.test.write = data.bit(27); scc.breakpoint.test.trace = data.bit(28); scc.breakpoint.enable.kernel = data.bit(29); scc.breakpoint.enable.user = data.bit(30); scc.breakpoint.enable.trap = data.bit(31); break; case 8: //Bad Virtual Address //scc.badVirtualAddress = data; //read-only break; case 9: //Breakpoint Data Mask scc.breakpoint.mask.data = data; break; case 11: //Breakpoint Code Mask scc.breakpoint.mask.code = data; break; case 12: {//Status bool interruptsWerePending = exception.interruptsPending(); scc.status.frame[0].interruptEnable = data.bit( 0); scc.status.frame[0].userMode = data.bit( 1); scc.status.frame[1].interruptEnable = data.bit( 2); scc.status.frame[1].userMode = data.bit( 3); scc.status.frame[2].interruptEnable = data.bit( 4); scc.status.frame[2].userMode = data.bit( 5); scc.status.interruptMask = data.bit( 8,15); scc.status.cache.isolate = data.bit(16); scc.status.cache.swap = data.bit(17); scc.status.cache.parityZero = data.bit(18); scc.status.cache.loadWasData = data.bit(19); scc.status.cache.parityError = data.bit(20); //scc.status.tlbShutdown = data.bit(21); //read-only scc.status.vectorLocation = data.bit(22); scc.status.reverseEndian = data.bit(25); scc.status.enable.coprocessor0 = data.bit(28); scc.status.enable.coprocessor1 = data.bit(29); scc.status.enable.coprocessor2 = data.bit(30); scc.status.enable.coprocessor3 = data.bit(31); if(!interruptsWerePending && exception.interruptsPending()) delay.interrupt = 2; break; } case 13: {//Cause bool interruptsWerePending = exception.interruptsPending(); scc.cause.interruptPending.bit(0) = data.bit(8); scc.cause.interruptPending.bit(1) = data.bit(9); if(!interruptsWerePending && exception.interruptsPending()) delay.interrupt = 1; break; } case 14: //Exception Program Counter scc.epc = data; break; case 15: //Product ID //scc.productID.revision = data.bit(0, 7); //read-only //scc.productID.implementation = data.bit(8,15); //read-only break; } } auto CPU::MFC0(u32& rt, u8 rd) -> void { if(&rt == &ipu.r[0]) return exception.reservedInstruction(); load(rt, getControlRegisterSCC(rd)); } auto CPU::MTC0(cu32& rt, u8 rd) -> void { setControlRegisterSCC(rd, rt); } auto CPU::RFE() -> void { scc.status.frame[0] = scc.status.frame[1]; scc.status.frame[1] = scc.status.frame[2]; //scc.status.frame[2] remains unchanged } ares-126/ares/ps1/cpu/interpreter.cpp000066400000000000000000000200161415063341600176130ustar00rootroot00000000000000#define OPCODE pipeline.instruction #define RD ipu.r[RDn] #define RT ipu.r[RTn] #define RS ipu.r[RSn] #define jp( id, name, ...) case id: return decoder##name(__VA_ARGS__) #define op( id, name, ...) case id: return name(__VA_ARGS__) #define br(id, name, ...) case id: return name(__VA_ARGS__) #define SA (OPCODE >> 6 & 31) #define RDn (OPCODE >> 11 & 31) #define RTn (OPCODE >> 16 & 31) #define RSn (OPCODE >> 21 & 31) #define IMMi16 s16(OPCODE) #define IMMu16 u16(OPCODE) #define IMMu26 (OPCODE & 0x03ff'ffff) auto CPU::decoderEXECUTE() -> void { switch(OPCODE >> 26) { jp(0x00, SPECIAL); jp(0x01, REGIMM); br(0x02, J, IMMu26); br(0x03, JAL, IMMu26); br(0x04, BEQ, RS, RT, IMMi16); br(0x05, BNE, RS, RT, IMMi16); br(0x06, BLEZ, RS, IMMi16); br(0x07, BGTZ, RS, IMMi16); op(0x08, ADDI, RT, RS, IMMi16); op(0x09, ADDIU, RT, RS, IMMi16); op(0x0a, SLTI, RT, RS, IMMi16); op(0x0b, SLTIU, RT, RS, IMMi16); op(0x0c, ANDI, RT, RS, IMMu16); op(0x0d, ORI, RT, RS, IMMu16); op(0x0e, XORI, RT, RS, IMMu16); op(0x0f, LUI, RT, IMMu16); jp(0x10, SCC); op(0x11, COP1); jp(0x12, GTE); op(0x13, COP3); op(0x14, INVALID); op(0x15, INVALID); op(0x16, INVALID); op(0x17, INVALID); op(0x18, INVALID); op(0x19, INVALID); op(0x1a, INVALID); op(0x1b, INVALID); op(0x1c, INVALID); op(0x1d, INVALID); op(0x1e, INVALID); op(0x1f, INVALID); op(0x20, LB, RT, RS, IMMi16); op(0x21, LH, RT, RS, IMMi16); op(0x22, LWL, RT, RS, IMMi16); op(0x23, LW, RT, RS, IMMi16); op(0x24, LBU, RT, RS, IMMi16); op(0x25, LHU, RT, RS, IMMi16); op(0x26, LWR, RT, RS, IMMi16); op(0x27, INVALID); op(0x28, SB, RT, RS, IMMi16); op(0x29, SH, RT, RS, IMMi16); op(0x2a, SWL, RT, RS, IMMi16); op(0x2b, SW, RT, RS, IMMi16); op(0x2c, INVALID); op(0x2d, INVALID); op(0x2e, SWR, RT, RS, IMMi16); op(0x2f, INVALID); op(0x30, LWC0, RTn, RS, IMMi16); op(0x31, LWC1, RTn, RS, IMMi16); op(0x32, LWC2, RTn, RS, IMMi16); op(0x33, LWC3, RTn, RS, IMMi16); op(0x34, INVALID); op(0x35, INVALID); op(0x36, INVALID); op(0x37, INVALID); op(0x38, SWC0, RTn, RS, IMMi16); op(0x39, SWC1, RTn, RS, IMMi16); op(0x3a, SWC2, RTn, RS, IMMi16); op(0x3b, SWC3, RTn, RS, IMMi16); op(0x3c, INVALID); op(0x3d, INVALID); op(0x3e, INVALID); op(0x3f, INVALID); } } auto CPU::decoderSPECIAL() -> void { switch(OPCODE & 0x3f) { op(0x00, SLL, RD, RT, SA); op(0x01, INVALID); op(0x02, SRL, RD, RT, SA); op(0x03, SRA, RD, RT, SA); op(0x04, SLLV, RD, RT, RS); op(0x05, INVALID); op(0x06, SRLV, RD, RT, RS); op(0x07, SRAV, RD, RT, RS); br(0x08, JR, RS); br(0x09, JALR, RD, RS); op(0x0a, INVALID); op(0x0b, INVALID); br(0x0c, SYSCALL); br(0x0d, BREAK); op(0x0e, INVALID); op(0x0f, INVALID); op(0x10, MFHI, RD); op(0x11, MTHI, RS); op(0x12, MFLO, RD); op(0x13, MTLO, RS); op(0x14, INVALID); op(0x15, INVALID); op(0x16, INVALID); op(0x17, INVALID); op(0x18, MULT, RS, RT); op(0x19, MULTU, RS, RT); op(0x1a, DIV, RS, RT); op(0x1b, DIVU, RS, RT); op(0x1c, INVALID); op(0x1d, INVALID); op(0x1e, INVALID); op(0x1f, INVALID); op(0x20, ADD, RD, RS, RT); op(0x21, ADDU, RD, RS, RT); op(0x22, SUB, RD, RS, RT); op(0x23, SUBU, RD, RS, RT); op(0x24, AND, RD, RS, RT); op(0x25, OR, RD, RS, RT); op(0x26, XOR, RD, RS, RT); op(0x27, NOR, RD, RS, RT); op(0x28, INVALID); op(0x29, INVALID); op(0x2a, SLT, RD, RS, RT); op(0x2b, SLTU, RD, RS, RT); op(0x2c, INVALID); op(0x2d, INVALID); op(0x2e, INVALID); op(0x2f, INVALID); op(0x30, INVALID); op(0x31, INVALID); op(0x32, INVALID); op(0x33, INVALID); op(0x34, INVALID); op(0x35, INVALID); op(0x36, INVALID); op(0x37, INVALID); op(0x38, INVALID); op(0x39, INVALID); op(0x3a, INVALID); op(0x3b, INVALID); op(0x3c, INVALID); op(0x3d, INVALID); op(0x3e, INVALID); op(0x3f, INVALID); } } auto CPU::decoderREGIMM() -> void { switch(OPCODE >> 16 & 0x1f) { br(0x00, BLTZ, RS, IMMi16); br(0x01, BGEZ, RS, IMMi16); br(0x02, BLTZ, RS, IMMi16); br(0x03, BGEZ, RS, IMMi16); br(0x04, BLTZ, RS, IMMi16); br(0x05, BGEZ, RS, IMMi16); br(0x06, BLTZ, RS, IMMi16); br(0x07, BGEZ, RS, IMMi16); br(0x08, BLTZ, RS, IMMi16); br(0x09, BGEZ, RS, IMMi16); br(0x0a, BLTZ, RS, IMMi16); br(0x0b, BGEZ, RS, IMMi16); br(0x0c, BLTZ, RS, IMMi16); br(0x0d, BGEZ, RS, IMMi16); br(0x0e, BLTZ, RS, IMMi16); br(0x0f, BGEZ, RS, IMMi16); br(0x10, BLTZAL, RS, IMMi16); br(0x11, BGEZAL, RS, IMMi16); br(0x12, BLTZ, RS, IMMi16); br(0x13, BGEZ, RS, IMMi16); br(0x14, BLTZ, RS, IMMi16); br(0x15, BGEZ, RS, IMMi16); br(0x16, BLTZ, RS, IMMi16); br(0x17, BGEZ, RS, IMMi16); br(0x18, BLTZ, RS, IMMi16); br(0x19, BGEZ, RS, IMMi16); br(0x1a, BLTZ, RS, IMMi16); br(0x1b, BGEZ, RS, IMMi16); br(0x1c, BLTZ, RS, IMMi16); br(0x1d, BGEZ, RS, IMMi16); br(0x1e, BLTZ, RS, IMMi16); br(0x1f, BGEZ, RS, IMMi16); } } auto CPU::decoderSCC() -> void { switch(OPCODE >> 21 & 0x1f) { op(0x00, MFC0, RT, RDn); op(0x01, INVALID); op(0x02, INVALID); op(0x03, INVALID); op(0x04, MTC0, RT, RDn); op(0x05, INVALID); op(0x06, INVALID); op(0x07, INVALID); op(0x08, INVALID); op(0x09, INVALID); op(0x0a, INVALID); op(0x0b, INVALID); op(0x0c, INVALID); op(0x0d, INVALID); op(0x0e, INVALID); op(0x0f, INVALID); } switch(OPCODE & 0x3f) { op(0x10, RFE); } } auto CPU::decoderGTE() -> void { switch(OPCODE >> 21 & 0x1f) { op(0x00, MFC2, RT, RDn); op(0x01, INVALID); op(0x02, CFC2, RT, RDn); op(0x03, INVALID); op(0x04, MTC2, RT, RDn); op(0x05, INVALID); op(0x06, CTC2, RT, RDn); op(0x07, INVALID); op(0x08, INVALID); op(0x09, INVALID); op(0x0a, INVALID); op(0x0b, INVALID); op(0x0c, INVALID); op(0x0d, INVALID); op(0x0e, INVALID); op(0x0f, INVALID); } #define LM OPCODE >> 10 & 1 #define TV OPCODE >> 13 & 3 #define MV OPCODE >> 15 & 3 #define MM OPCODE >> 17 & 3 #define SF OPCODE >> 19 & 1 ? 12 : 0 switch(OPCODE & 0x3f) { op(0x00, RTPS, LM, SF); //0x01 mirror? op(0x01, RTPS, LM, SF); op(0x06, NCLIP); op(0x0c, OP, LM, SF); op(0x10, DPCS, LM, SF); op(0x11, INTPL, LM, SF); op(0x12, MVMVA, LM, TV, MV, MM, SF); op(0x13, NCDS, LM, SF); op(0x14, CDP, LM, SF); op(0x16, NCDT, LM, SF); op(0x1a, DCPL, LM, SF); //0x29 mirror? op(0x1b, NCCS, LM, SF); op(0x1c, CC, LM, SF); op(0x1e, NCS, LM, SF); op(0x20, NCT, LM, SF); op(0x28, SQR, LM, SF); op(0x29, DCPL, LM, SF); op(0x2a, DPCT, LM, SF); op(0x2d, AVSZ3); op(0x2e, AVSZ4); op(0x30, RTPT, LM, SF); op(0x3d, GPF, LM, SF); op(0x3e, GPL, LM, SF); op(0x3f, NCCT, LM, SF); } #undef LM #undef TV #undef MV #undef MM #undef SF } auto CPU::COP1() -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor(); } auto CPU::COP3() -> void { if(!scc.status.enable.coprocessor3) return exception.coprocessor(); } auto CPU::LWC0(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor0) return exception.coprocessor(); read(rs + imm); //write target unknown } auto CPU::LWC1(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor(); read(rs + imm); //write target unknown } auto CPU::LWC3(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor3) return exception.coprocessor(); read(rs + imm); //write target unknown } auto CPU::SWC0(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor0) return exception.coprocessor(); write(rs + imm, 0); //read source unknown } auto CPU::SWC1(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor1) return exception.coprocessor(); write(rs + imm, 0); //read source unknown } auto CPU::SWC3(u8 rt, cu32& rs, s16 imm) -> void { if(!scc.status.enable.coprocessor3) return exception.coprocessor(); write(rs + imm, 0); //read source unknown } auto CPU::INVALID() -> void { return exception.reservedInstruction(); } #undef SA #undef RDn #undef RTn #undef RSn #undef IMMi16 #undef IMMu16 #undef IMMu26 #undef jp #undef op #undef br #undef OPCODE #undef RD #undef RT #undef RS ares-126/ares/ps1/cpu/memory.cpp000066400000000000000000000164201415063341600165640ustar00rootroot00000000000000//read code from the bus inline auto CPU::fetch(u32 address) -> u32 { switch(address >> 29) { //cached case 0: //$00000000-$1fffffff KUSEG case 4: {//$80000000-$9fffffff KSEG0 return icache.fetch(address); } //uncached case 5: {//$a0000000-$bfffffff KSEG1 if(likely(address <= 0xa07f'ffff)) { step(4); return ram.read(address); } if(likely(address >= 0xbfc0'0000)) { step(24); return bios.read(address); } if(likely(address >= 0xbf00'0000)) { //the CPU cannot execute out of the scratchpad or (most) MMIO register areas debug(unhandled, "CPU::fetch"); return 0; } if constexpr(Accuracy::CPU::BusErrors) { exception.busInstruction(); } return 0; //nop } //unmapped case 1: //$20000000-$3fffffff KUSEG case 2: //$40000000-$5fffffff KUSEG case 3: //$60000000-$7fffffff KUSEG case 6: //$c0000000-$dfffffff KSEG2 case 7: {//$e0000000-$ffffffff KSEG2 if constexpr(Accuracy::CPU::BusErrors) { exception.busInstruction(); } return 0; //nop } } unreachable; } //read data from the bus template inline auto CPU::read(u32 address) -> u32 { if constexpr(Accuracy::CPU::Breakpoints) { if(breakpoint.testData(address)) return 0; //nop } if constexpr(Accuracy::CPU::AddressErrors) { if constexpr(Size == Half) { if(unlikely(address & 1)) return exception.address(address), 0; //nop } if constexpr(Size == Word) { if(unlikely(address & 3)) return exception.address(address), 0; //nop } } if(unlikely(address >= 0xfffe'0000)) { step(2); return memory.read(address); } switch(address >> 29) { //cached case 0: {//KUSEG if(unlikely(scc.status.cache.isolate)) { if(memory.cache.tagTest == 1 && memory.cache.codeEnable == 1) { return icache.read(address); } if(memory.cache.tagTest == 0 && memory.cache.scratchpadEnable == 1) { return scratchpad.read(address); } return 0; //nop } if(likely(address <= 0x007f'ffff)) { step(4); return ram.read(address); } if(likely(address >= 0x1fc0'0000)) { step(6 * Size); return bios.read(address); } if(likely(address >= 0x1f00'0000)) { auto& memory = bus.mmio(address); step(memory.wait()); return memory.read(address); } if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return 0; //nop } //cached case 4: {//KSEG0 if(unlikely(scc.status.cache.isolate)) { if(memory.cache.tagTest == 1 && memory.cache.codeEnable == 1) { return icache.read(address); } if(memory.cache.tagTest == 0 && memory.cache.scratchpadEnable == 1) { return scratchpad.read(address); } return 0; //nop } if(likely(address <= 0x807f'ffff)) { step(4); return ram.read(address); } if(likely(address >= 0x9fc0'0000)) { step(6 * Size); return bios.read(address); } if(likely(address >= 0x9f00'0000)) { auto& memory = bus.mmio(address); step(memory.wait()); return memory.read(address); } if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return 0; //nop } //uncached case 5: {//KSEG1 if(likely(address <= 0xa07f'ffff)) { step(4); return ram.read(address); } if(likely(address >= 0xbfc0'0000)) { step(6 * Size); return bios.read(address); } if(likely(address >= 0xbf00'0000)) { auto& memory = bus.mmio(address); step(memory.wait()); return memory.read(address); } if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return 0; //nop } //unmapped case 1: //KUSEG case 2: //KUSEG case 3: //KUSEG case 6: //KSEG2 case 7: {//KSEG2 if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return 0; //nop } } unreachable; } //write data to the bus template inline auto CPU::write(u32 address, u32 data) -> void { if constexpr(Accuracy::CPU::Breakpoints) { if(breakpoint.testData(address)) return; } if constexpr(Accuracy::CPU::AddressErrors) { if constexpr(Size == Half) { if(unlikely(address & 1)) return exception.address(address); } if constexpr(Size == Word) { if(unlikely(address & 3)) return exception.address(address); } } if(unlikely(address >= 0xfffe'0000)) { step(2); return memory.write(address, data); } switch(address >> 29) { //cached case 0: {//KUSEG if(unlikely(scc.status.cache.isolate)) { if(memory.cache.tagTest == 1 && memory.cache.codeEnable == 1) { return icache.invalidate(address); } if(memory.cache.tagTest == 0 && memory.cache.scratchpadEnable == 1) { return scratchpad.write(address, data); } return; } if(likely(address <= 0x007f'ffff)) { step(4); if constexpr(Accuracy::CPU::Recompiler) { recompiler.invalidate(address); } return ram.write(address, data); } if(likely(address >= 0x1fc0'0000)) { step(6 * Size); return bios.write(address, data); } if(likely(address >= 0x1f00'0000)) { auto& memory = bus.mmio(address); step(memory.wait()); return memory.write(address, data); } if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return; } //cached case 4: {//KSEG0 if(unlikely(scc.status.cache.isolate)) { if(memory.cache.tagTest == 1 && memory.cache.codeEnable == 1) { return icache.invalidate(address); } if(memory.cache.tagTest == 0 && memory.cache.scratchpadEnable == 1) { return scratchpad.write(address, data); } return; } if(likely(address <= 0x807f'ffff)) { step(4); if constexpr(Accuracy::CPU::Recompiler) { recompiler.invalidate(address); } return ram.write(address, data); } if(likely(address >= 0x9fc0'0000)) { step(6 * Size); return bios.write(address, data); } if(likely(address >= 0x9f00'0000)) { auto& memory = bus.mmio(address); step(memory.wait()); return memory.write(address, data); } if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return; } //uncached case 5: {//KSEG1 if(likely(address <= 0xa07f'ffff)) { step(4); if constexpr(Accuracy::CPU::Recompiler) { recompiler.invalidate(address); } return ram.write(address, data); } if(likely(address >= 0xbfc0'0000)) { step(6 * Size); return bios.write(address, data); } if(likely(address >= 0xbf00'0000)) { auto& memory = bus.mmio(address); step(memory.wait()); return memory.write(address, data); } if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return; } //unmapped case 1: //KUSEG case 2: //KUSEG case 3: //KUSEG case 6: //KSEG2 case 7: {//KSEG2 if constexpr(Accuracy::CPU::BusErrors) { exception.busData(); } return; } } } ares-126/ares/ps1/cpu/recompiler.cpp000066400000000000000000000420601415063341600174140ustar00rootroot00000000000000auto CPU::Recompiler::pool(u32 address) -> Pool* { auto& pool = pools[address >> 8 & 0x1fffff]; if(!pool) pool = (Pool*)allocator.acquire(sizeof(Pool)); return pool; } auto CPU::Recompiler::block(u32 address) -> Block* { if(auto block = pool(address)->blocks[address >> 2 & 0x3f]) return block; auto block = emit(address); return pool(address)->blocks[address >> 2 & 0x3f] = block; } auto CPU::Recompiler::emit(u32 address) -> Block* { if(unlikely(allocator.available() < 1_MiB)) { print("CPU allocator flush\n"); allocator.release(bump_allocator::zero_fill); reset(); } auto block = (Block*)allocator.acquire(sizeof(Block)); block->code = allocator.acquire(); bind({block->code, allocator.available()}); push(rbx); push(rbp); push(r13); if constexpr(ABI::Windows) { sub(rsp, imm8(0x40)); } mov(rbx, ra0); mov(rbp, ra1); auto entry = declareLabel(); jmp8(entry); auto epilogue = defineLabel(); if constexpr(ABI::Windows) { add(rsp, imm8(0x40)); } pop(r13); pop(rbp); pop(rbx); ret(); defineLabel(entry); address &= 0x1fff'ffff; bool hasBranched = 0; while(true) { //shortcut: presume CPU is executing out of either CPU RAM or the BIOS area u32 instruction = address <= 0x007f'ffff ? cpu.ram.readWord(address) : bios.readWord(address); bool branched = emitEXECUTE(instruction); call(&CPU::instructionEpilogue); address += 4; if(hasBranched || (address & 0xfc) == 0) break; //block boundary hasBranched = branched; test(al, al); jnz(epilogue); } jmp(epilogue); allocator.reserve(size()); //print(hex(PC, 8L), " ", instructions, " ", size(), "\n"); return block; } #define Sa (instruction >> 6 & 31) #define Rdn (instruction >> 11 & 31) #define Rtn (instruction >> 16 & 31) #define Rsn (instruction >> 21 & 31) #define Rd dis8(rbx, Rdn * 4) #define Rt dis8(rbx, Rtn * 4) #define Rs dis8(rbx, Rsn * 4) #define i16 s16(instruction) #define n16 u16(instruction) #define n26 u32(instruction & 0x03ff'ffff) auto CPU::Recompiler::emitEXECUTE(u32 instruction) -> bool { switch(instruction >> 26) { //SPECIAL case 0x00: { return emitSPECIAL(instruction); } //REGIMM case 0x01: { return emitREGIMM(instruction); } //J n26 case 0x02: { mov(ra1d, imm32(n26)); call(&CPU::J); return 1; } //JAL n26 case 0x03: { mov(ra1d, imm32(n26)); call(&CPU::JAL); return 1; } //BEQ Rs,Rt,i16 case 0x04: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&CPU::BEQ); return 1; } //BNE Rs,Rt,i16 case 0x05: { lea(ra1, Rs); lea(ra2, Rt); mov(ra3d, imm32(i16)); call(&CPU::BNE); return 1; } //BLEZ Rs,i16 case 0x06: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLEZ); return 1; } //BGTZ Rs,i16 case 0x07: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGTZ); return 1; } //ADDI Rt,Rs,i16 case 0x08: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::ADDI); return 0; } //ADDIU Rt,Rs,i16 case 0x09: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::ADDIU); return 0; } //SLTI Rt,Rs,i16 case 0x0a: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SLTI); return 0; } //SLTIU Rt,Rs,i16 case 0x0b: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SLTIU); return 0; } //ANDI Rt,Rs,n16 case 0x0c: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(n16)); call(&CPU::ANDI); return 0; } //ORI Rt,Rs,n16 case 0x0d: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(n16)); call(&CPU::ORI); return 0; } //XORI Rt,Rs,n16 case 0x0e: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(n16)); call(&CPU::XORI); return 0; } //LUI Rt,n16 case 0x0f: { lea(ra1, Rt); mov(ra2d, imm32(n16)); call(&CPU::LUI); return 0; } //SCC case 0x10: { return emitSCC(instruction); } //COP1 case 0x11: { call(&CPU::COP1); return 1; } //GTE case 0x12: { return emitGTE(instruction); } //COP3 case 0x13: { call(&CPU::COP3); return 1; } //INVALID case 0x14 ... 0x1f: { call(&CPU::INVALID); return 1; } //LB Rt,Rs,i16 case 0x20: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LB); return 0; } //LH Rt,Rs,i16 case 0x21: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LH); return 0; } //LWL Rt,Rs,i16 case 0x22: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWL); return 0; } //LW Rt,Rs,i16 case 0x23: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LW); return 0; } //LBU Rt,Rs,i16 case 0x24: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LBU); return 0; } //LHU Rt,Rs,i16 case 0x25: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LHU); return 0; } //LWR Rt,Rs,i16 case 0x26: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWR); return 0; } //INVALID case 0x27: { call(&CPU::INVALID); return 1; } //SB Rt,Rs,i16 case 0x28: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SB); return 0; } //SH Rt,Rs,i16 case 0x29: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SH); return 0; } //SWL Rt,Rs,i16 case 0x2a: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWL); return 0; } //SW Rt,Rs,i16 case 0x2b: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SW); return 0; } //INVALID case 0x2c ... 0x2d: { call(&CPU::INVALID); return 1; } //SWR Rt,Rs,i16 case 0x2e: { lea(ra1, Rt); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWR); return 0; } //INVALID case 0x2f: { call(&CPU::INVALID); return 1; } //LWC0 Rt,Rs,i16 case 0x30: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWC0); return 0; } //LWC1 Rt,Rs,i16 case 0x31: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWC1); return 0; } //LWC2 Rt,Rs,i16 case 0x32: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWC2); return 0; } //LWC3 Rt,Rs,i16 case 0x33: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::LWC3); return 0; } //INVALID case 0x34 ... 0x37: { call(&CPU::INVALID); return 1; } //SWC0 Rt,Rs,i16 case 0x38: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWC0); return 0; } //SWC1 Rt,Rs,i16 case 0x39: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWC1); return 0; } //SWC2 Rt,Rs,i16 case 0x3a: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWC2); return 0; } //SWC3 Rt,Rs,i16 case 0x3b: { mov(ra1d, imm32(Rtn)); lea(ra2, Rs); mov(ra3d, imm32(i16)); call(&CPU::SWC3); return 0; } //INVALID case 0x3c ... 0x3f: { call(&CPU::INVALID); return 1; } } return 0; } auto CPU::Recompiler::emitSPECIAL(u32 instruction) -> bool { switch(instruction & 0x3f) { //SLL Rd,Rt,Sa case 0x00: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa)); call(&CPU::SLL); return 0; } //INVALID case 0x01: { call(&CPU::INVALID); return 1; } //SRL Rd,Rt,Sa case 0x02: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa)); call(&CPU::SRL); return 0; } //SRA Rd,Rt,Sa case 0x03: { lea(ra1, Rd); lea(ra2, Rt); mov(ra3d, imm32(Sa)); call(&CPU::SRA); return 0; } //SLLV Rd,Rt,Rs case 0x04: { lea(ra1, Rd); lea(ra2, Rt); lea(ra3, Rs); call(&CPU::SLLV); return 0; } //INVALID case 0x05: { call(&CPU::INVALID); return 1; } //SRLV Rd,Rt,Rs case 0x06: { lea(ra1, Rd); lea(ra2, Rt); lea(ra3, Rs); call(&CPU::SRLV); return 0; } //SRAV Rd,Rt,Rs case 0x07: { lea(ra1, Rd); lea(ra2, Rt); lea(ra3, Rs); call(&CPU::SRAV); return 0; } //JR Rs case 0x08: { lea(ra1, Rs); call(&CPU::JR); return 1; } //JALR Rd,Rs case 0x09: { lea(ra1, Rd); lea(ra2, Rs); call(&CPU::JALR); return 1; } //INVALID case 0x0a ... 0x0b: { call(&CPU::INVALID); return 1; } //SYSCALL case 0x0c: { call(&CPU::SYSCALL); return 1; } //BREAK case 0x0d: { call(&CPU::BREAK); return 1; } //INVALID case 0x0e ... 0x0f: { call(&CPU::INVALID); return 1; } //MFHI Rd case 0x10: { lea(ra1, Rd); call(&CPU::MFHI); return 0; } //MTHI Rs case 0x11: { lea(ra1, Rs); call(&CPU::MTHI); return 0; } //MFLO Rd case 0x12: { lea(ra1, Rd); call(&CPU::MFLO); return 0; } //MTLO Rs case 0x13: { lea(ra1, Rs); call(&CPU::MTLO); return 0; } //INVALID case 0x14 ... 0x17: { call(&CPU::INVALID); return 1; } //MULT Rs,Rt case 0x18: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::MULT); return 0; } //MULTU Rs,Rt case 0x19: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::MULTU); return 0; } //DIV Rs,Rt case 0x1a: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DIV); return 0; } //DIVU Rs,Rt case 0x1b: { lea(ra1, Rs); lea(ra2, Rt); call(&CPU::DIVU); return 0; } //ILLEGAL case 0x1c ... 0x1f: { call(&CPU::INVALID); return 1; } //ADD Rd,Rs,Rt case 0x20: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::ADD); return 0; } //ADDU Rd,Rs,Rt case 0x21: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::ADDU); return 0; } //SUB Rd,Rs,Rt case 0x22: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::SUB); return 0; } //SUBU Rd,Rs,Rt case 0x23: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::SUBU); return 0; } //AND Rd,Rs,Rt case 0x24: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::AND); return 0; } //OR Rd,Rs,Rt case 0x25: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::OR); return 0; } //XOR Rd,Rs,Rt case 0x26: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::XOR); return 0; } //NOR Rd,Rs,Rt case 0x27: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::NOR); return 0; } //INVALID case 0x28 ... 0x29: { call(&CPU::INVALID); return 1; } //SLT Rd,Rs,Rt case 0x2a: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::SLT); return 0; } //SLTU Rd,Rs,Rt case 0x2b: { lea(ra1, Rd); lea(ra2, Rs); lea(ra3, Rt); call(&CPU::SLTU); return 0; } //INVALID case 0x2c ... 0x3f: { call(&CPU::INVALID); return 1; } } return 0; } auto CPU::Recompiler::emitREGIMM(u32 instruction) -> bool { switch(instruction >> 16 & 0x1f) { //BLTZ Rs,i16 case 0x00: case 0x02: case 0x04: case 0x06: case 0x08: case 0x0a: case 0x0c: case 0x0e: case 0x12: case 0x14: case 0x16: case 0x18: case 0x1a: case 0x1c: case 0x1e: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLTZ); return 1; } //BGEZ Rs,i16 case 0x01: case 0x03: case 0x05: case 0x07: case 0x09: case 0x0b: case 0x0d: case 0x0f: case 0x13: case 0x15: case 0x17: case 0x19: case 0x1b: case 0x1d: case 0x1f: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGEZ); return 1; } //BLTZAL Rs,i16 case 0x10: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BLTZAL); return 1; } //BGEZAL Rs,i16 case 0x11: { lea(ra1, Rs); mov(ra2d, imm32(i16)); call(&CPU::BGEZAL); return 1; } } return 0; } auto CPU::Recompiler::emitSCC(u32 instruction) -> bool { switch(instruction >> 21 & 0x1f) { //MFC0 Rt,Rd case 0x00: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::MFC0); return 0; } //INVALID case 0x01 ... 0x03: { call(&CPU::INVALID); return 1; } //MTC0 Rt,Rd case 0x04: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::MTC0); return 0; } //INVALID case 0x05 ... 0x0f: { call(&CPU::INVALID); return 1; } } switch(instruction & 0x3f) { //RFE case 0x10: { call(&CPU::RFE); return 0; } } return 0; } auto CPU::Recompiler::emitGTE(u32 instruction) -> bool { switch(instruction >> 21 & 0x1f) { //MFC2 Rt,Rd case 0x00: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::MFC2); return 0; } //INVALID case 0x01: { call(&CPU::INVALID); return 1; } //CFC2 Rt,Rd case 0x02: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::CFC2); return 0; } //INVALID case 0x03: { call(&CPU::INVALID); return 1; } //MTC2 Rt,Rd case 0x04: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::MTC2); return 0; } //INVALID case 0x05: { call(&CPU::INVALID); return 1; } //CTC2 Rt,Rd case 0x06: { lea(ra1, Rt); mov(ra2d, imm32(Rdn)); call(&CPU::CTC2); return 0; } //INVALID case 0x07 ... 0x0f: { call(&CPU::INVALID); return 1; } } #define Lm instruction >> 10 & 1 #define Tv instruction >> 13 & 3 #define Mv instruction >> 15 & 3 #define Mm instruction >> 17 & 3 #define Sf instruction >> 19 & 1 ? 12 : 0 switch(instruction & 0x3f) { //RTPS Lm,Sf (mirror) case 0x00: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::RTPS); return 0; } //RTPS Lm,Sf case 0x01: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::RTPS); return 0; } //NCLIP case 0x06: { call(&CPU::NCLIP); return 0; } //OP Lm,Sf case 0x0c: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::OP); return 0; } //DPCS Lm,Sf case 0x10: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::DPCS); return 0; } //INTPL Lm,Sf case 0x11: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::INTPL); return 0; } //MVMVA Lm,Tv,Mv,Mm,Sf case 0x12: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Tv)); mov(ra3d, imm32(Mv)); mov(ra4d, imm32(Mm)); mov(ra5d, imm32(Sf)); call(&CPU::MVMVA); return 0; } //NCDS Lm,Sf case 0x13: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::NCDS); return 0; } //CDP Lm,Sf case 0x14: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::CDP); return 0; } //NCDT Lm,Sf case 0x16: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::NCDT); return 0; } //DCPL Lm,Sf (mirror) case 0x1a: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::DCPL); return 0; } //NCCS Lm,Sf case 0x1b: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::NCCS); return 0; } //CC Lm,Sf case 0x1c: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::CC); return 0; } //NCS Lm,Sf case 0x1e: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::NCS); return 0; } //NCT Lm,Sf case 0x20: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::NCT); return 0; } //SQR Lm,Sf case 0x28: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::SQR); return 0; } //DCPL Lm,Sf case 0x29: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::DCPL); return 0; } //DPCT Lm,Sf case 0x2a: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::DPCT); return 0; } //AVSZ3 case 0x2d: { call(&CPU::AVSZ3); return 0; } //AVSZ4 case 0x2e: { call(&CPU::AVSZ4); return 0; } //RTPT Lm,Sf case 0x30: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::RTPT); return 0; } //GPF Lm,Sf case 0x3d: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::GPF); return 0; } //GPL Lm,Sf case 0x3e: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::GPL); return 0; } //NCCT Lm,Sf case 0x3f: { mov(ra1d, imm32(Lm)); mov(ra2d, imm32(Sf)); call(&CPU::NCCT); return 0; } } #undef Lm #undef Tv #undef Mv #undef Mm #undef Sf return 0; } #undef Sa #undef Rdn #undef Rtn #undef Rsn #undef Rd #undef Rt #undef Rs #undef i16 #undef n16 #undef n26 template auto CPU::Recompiler::call(V (CPU::*function)(P...)) -> void { static_assert(sizeof...(P) <= 5); if constexpr(ABI::Windows) { if constexpr(sizeof...(P) >= 5) mov(dis8(rsp, 0x28), ra5); if constexpr(sizeof...(P) >= 4) mov(dis8(rsp, 0x20), ra4); } mov(ra0, rbp); call(imm64{function}, rax); } ares-126/ares/ps1/cpu/serialization.cpp000066400000000000000000000076311415063341600201350ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { Thread::serialize(s); s(ram); s(scratchpad); s(pipeline.address); s(pipeline.instruction); //todo: serialize delay slot target pointers portably s((u64&)delay.load[0].target); s(delay.load[0].source); s((u64&)delay.load[1].target); s(delay.load[1].source); s(delay.branch[0].slot); s(delay.branch[0].take); s(delay.branch[0].address); s(delay.branch[1].slot); s(delay.branch[1].take); s(delay.branch[1].address); s(delay.interrupt); for(auto& line : icache.lines) { s(line.words); s(line.tag); } s(exception.triggered); s(breakpoint.lastPC); s(ipu.r); s(ipu.lo); s(ipu.hi); s(ipu.pb); s(ipu.pc); s(ipu.pd); s(scc.breakpoint.address.code); s(scc.breakpoint.address.data); s(scc.breakpoint.mask.code); s(scc.breakpoint.mask.data); s(scc.breakpoint.status.any); s(scc.breakpoint.status.code); s(scc.breakpoint.status.data); s(scc.breakpoint.status.read); s(scc.breakpoint.status.write); s(scc.breakpoint.status.trace); s(scc.breakpoint.redirection); s(scc.breakpoint.unknown); s(scc.breakpoint.test.code); s(scc.breakpoint.test.data); s(scc.breakpoint.test.read); s(scc.breakpoint.test.write); s(scc.breakpoint.test.trace); s(scc.breakpoint.enable.master); s(scc.breakpoint.enable.kernel); s(scc.breakpoint.enable.user); s(scc.breakpoint.enable.trap); s(scc.targetAddress); s(scc.badVirtualAddress); s(scc.status.frame[0].interruptEnable); s(scc.status.frame[0].userMode); s(scc.status.frame[1].interruptEnable); s(scc.status.frame[1].userMode); s(scc.status.frame[2].interruptEnable); s(scc.status.frame[2].userMode); s(scc.status.interruptMask); s(scc.status.cache.isolate); s(scc.status.cache.swap); s(scc.status.cache.parityZero); s(scc.status.cache.loadWasData); s(scc.status.cache.parityError); s(scc.status.tlbShutdown); s(scc.status.vectorLocation); s(scc.status.reverseEndian); s(scc.status.enable.coprocessor0); s(scc.status.enable.coprocessor1); s(scc.status.enable.coprocessor2); s(scc.status.enable.coprocessor3); s(scc.cause.exceptionCode); s(scc.cause.interruptPending); s(scc.cause.coprocessorError); s(scc.cause.branchTaken); s(scc.cause.branchDelay); s(scc.epc); s(gte.v.a.x); s(gte.v.a.y); s(gte.v.a.z); s(gte.v.b.x); s(gte.v.b.y); s(gte.v.b.z); s(gte.v.c.x); s(gte.v.c.y); s(gte.v.c.z); s(gte.rgbc.r); s(gte.rgbc.g); s(gte.rgbc.b); s(gte.rgbc.t); s(gte.otz); s(gte.ir.x); s(gte.ir.y); s(gte.ir.z); s(gte.ir.t); s(gte.screen[0].x); s(gte.screen[0].y); s(gte.screen[0].z); s(gte.screen[1].x); s(gte.screen[1].y); s(gte.screen[1].z); s(gte.screen[2].x); s(gte.screen[2].y); s(gte.screen[2].z); s(gte.screen[3].x); s(gte.screen[3].y); s(gte.screen[3].z); s(gte.rgb); s(gte.mac.x); s(gte.mac.y); s(gte.mac.z); s(gte.mac.t); s(gte.lzcs); s(gte.lzcr); s(gte.rotation.a.x); s(gte.rotation.a.y); s(gte.rotation.a.z); s(gte.rotation.b.x); s(gte.rotation.b.y); s(gte.rotation.b.z); s(gte.rotation.c.x); s(gte.rotation.c.y); s(gte.rotation.c.z); s(gte.translation.x); s(gte.translation.y); s(gte.translation.z); s(gte.light.a.x); s(gte.light.a.y); s(gte.light.a.z); s(gte.light.b.x); s(gte.light.b.y); s(gte.light.b.z); s(gte.light.c.x); s(gte.light.c.y); s(gte.light.c.z); s(gte.backgroundColor.r); s(gte.backgroundColor.g); s(gte.backgroundColor.b); s(gte.color.a.r); s(gte.color.a.g); s(gte.color.a.b); s(gte.color.b.r); s(gte.color.b.g); s(gte.color.b.b); s(gte.color.c.r); s(gte.color.c.g); s(gte.color.c.b); s(gte.farColor.r); s(gte.farColor.g); s(gte.farColor.b); s(gte.ofx); s(gte.ofy); s(gte.h); s(gte.dqa); s(gte.dqb); s(gte.zsf3); s(gte.zsf4); s(gte.flag.value); s(gte.lm); s(gte.tv); s(gte.mv); s(gte.mm); s(gte.sf); if constexpr(Accuracy::CPU::Recompiler) { recompiler.reset(); } } ares-126/ares/ps1/disc/000077500000000000000000000000001415063341600147005ustar00rootroot00000000000000ares-126/ares/ps1/disc/cdda.cpp000066400000000000000000000022141415063341600162760ustar00rootroot00000000000000auto Disc::CDDA::load(Node::Object parent) -> void { //stream = parent->append("CD-DA"); //stream->setChannels(2); //stream->setFrequency(44100); } auto Disc::CDDA::unload(Node::Object parent) -> void { //parent->remove(stream); //stream.reset(); } auto Disc::CDDA::clockSector() -> void { } auto Disc::CDDA::clockSample() -> void { s16 left = 0; s16 right = 0; if(self.ssr.reading && self.ssr.playingCDDA) { left |= drive->sector.data[drive->sector.offset++] << 0; left |= drive->sector.data[drive->sector.offset++] << 8; right |= drive->sector.data[drive->sector.offset++] << 0; right |= drive->sector.data[drive->sector.offset++] << 8; } if(self.audio.mute) { sample.left = 0; sample.right = 0; } else { //each channel is saturated; but the combination of each channel is not and may overflow sample.left = sclamp<16>(left * self.audio.volume[0] >> 7) + sclamp<16>(right * self.audio.volume[2] >> 7); sample.right = sclamp<16>(left * self.audio.volume[1] >> 7) + sclamp<16>(right * self.audio.volume[3] >> 7); } //stream->sample(sample.left / 32768.0, sample.right / 32768.0); } ares-126/ares/ps1/disc/cdxa.cpp000066400000000000000000000074351415063341600163340ustar00rootroot00000000000000auto Disc::CDXA::load(Node::Object parent) -> void { //stream = parent->append("CD-XA"); //stream->setChannels(2); //stream->setFrequency(37800); //stream->setResamplerFrequency(44100); } auto Disc::CDXA::unload(Node::Object parent) -> void { //parent->remove(stream); //stream.reset(); } auto Disc::CDXA::clockSector() -> void { n8 subMode = drive->sector.data[18]; n1 endOfRecord = subMode.bit(0); n1 video = subMode.bit(1); n1 audio = subMode.bit(2); n1 data = subMode.bit(3); n1 trigger = subMode.bit(4); n1 form2 = subMode.bit(5); n1 realTime = subMode.bit(6); n1 endOfFile = subMode.bit(7); n8 codingInfo = drive->sector.data[19]; n1 stereo = codingInfo.bit(0); n16 sampleRate = codingInfo.bit(2) ? 18900 : 37800; n32 bitsPerSample = codingInfo.bit(4) ? 8 : 4; n1 emphasis = codingInfo.bit(6); if(stereo == 0 && bitsPerSample == 4) decodeADPCM<0, 0>(); if(stereo == 0 && bitsPerSample == 8) decodeADPCM<0, 1>(); if(stereo == 1 && bitsPerSample == 4) decodeADPCM<1, 0>(); if(stereo == 1 && bitsPerSample == 8) decodeADPCM<1, 1>(); monaural = !stereo; } auto Disc::CDXA::clockSample() -> void { s16 left = 0; s16 right = 0; if(monaural) { left = right = samples.read(0); } else { left = samples.read(0); right = samples.read(0); } if(self.audio.mute || self.audio.muteADPCM) { sample.left = 0; sample.right = 0; } else { //each channel is saturated; but the combination of each channel is not and may overflow sample.left = sclamp<16>(left * self.audio.volume[0] >> 7) + sclamp<16>(right * self.audio.volume[2] >> 7); sample.right = sclamp<16>(left * self.audio.volume[1] >> 7) + sclamp<16>(right * self.audio.volume[3] >> 7); } //stream->sample(sample.left / 32768.0, sample.right / 32768.0); } template auto Disc::CDXA::decodeADPCM() -> void { const u32 Blocks = 18; const u32 BlockSize = 128; const u32 WordsPerBlock = 28; const u32 SamplesPerBlock = WordsPerBlock * (is8bit ? 4 : 8); s16 output[SamplesPerBlock]; for(u32 block : range(Blocks)) { decodeBlock(output, 24 + block * BlockSize); for(auto sample : output) { if(!samples.full()) samples.write(sample); } } } template auto Disc::CDXA::decodeBlock(s16* output, u16 address) -> void { static constexpr s32 filterPositive[] = {0, 60, 115, 98}; static constexpr s32 filterNegative[] = {0, 0, -52, -55}; static constexpr u32 Blocks = is8bit ? 4 : 8; static constexpr u32 WordsPerBlock = 28; for(u32 block : range(Blocks)) { u8 header = drive->sector.data[address + 4 + block]; u8 shift = (header & 0x0f) > 12 ? 9 : (header & 0x0f); u8 filter = (header & 0x30) >> 4; s32 positive = filterPositive[filter]; s32 negative = filterNegative[filter]; u16 index = isStereo ? (block >> 1) * (WordsPerBlock << 1) + (block & 1) : block * WordsPerBlock; for(u32 word : range(WordsPerBlock)) { u32 data = 0; data |= drive->sector.data[address + 16 + word * 4 + 0] << 0; data |= drive->sector.data[address + 16 + word * 4 + 1] << 8; data |= drive->sector.data[address + 16 + word * 4 + 2] << 16; data |= drive->sector.data[address + 16 + word * 4 + 3] << 24; u32 nibble = is8bit ? (data >> block * 8 & 0xff) : (data >> block * 4 & 0x0f); s16 sample = s16(nibble << 12) >> shift; s32* previous = isStereo ? &previousSamples[(block & 1) * 2] : &previousSamples[0]; s32 interpolated = s32(sample) + ((previous[0] * positive) + (previous[1] * negative) + 32) / 64; previous[1] = previous[0]; previous[0] = interpolated; output[index] = sclamp<16>(interpolated); index += isStereo ? 2 : 1; } } } ares-126/ares/ps1/disc/command.cpp000066400000000000000000000303671415063341600170330ustar00rootroot00000000000000auto Disc::status() -> u8 { n8 data; data.bit(0) = ssr.error; data.bit(1) = ssr.motorOn; data.bit(2) = ssr.seekError; data.bit(3) = ssr.idError; data.bit(4) = ssr.shellOpen; data.bit(5) = ssr.reading; data.bit(6) = ssr.seeking; data.bit(7) = ssr.playingCDDA; return data; } auto Disc::command(u8 operation) -> void { fifo.response.flush(); debugger.commandPrologue(operation); switch(operation) { case 0x00: commandInvalid(); break; //Sync case 0x01: commandGetStatus(); break; case 0x02: commandSetLocation(); break; case 0x03: commandPlay(); break; case 0x04: commandFastForward(); break; case 0x05: commandRewind(); break; case 0x06: commandReadWithRetry(); break; case 0x08: commandStop(); break; case 0x09: commandPause(); break; case 0x0a: commandInitialize(); break; case 0x0b: commandMute(); break; case 0x0c: commandUnmute(); break; case 0x0d: commandSetFilter(); break; case 0x0e: commandSetMode(); break; case 0x10: commandGetLocationReading(); break; case 0x11: commandGetLocationPlaying(); break; case 0x12: commandSetSession(); break; case 0x13: commandGetFirstAndLastTrackNumbers(); break; case 0x14: commandGetTrackStart(); break; case 0x15: commandSeekData(); break; case 0x16: commandSeekCDDA(); break; case 0x17: commandInvalid(); break; //SetClock case 0x18: commandInvalid(); break; //GetClock case 0x19: commandTest(); break; case 0x1a: commandGetID(); break; case 0x1b: commandReadWithoutRetry(); break; case 0x20 ... 0x4f: commandInvalid(); break; case 0x50 ... 0x57: commandInvalid(); break; //secret unlock commands case 0x58 ... 0xff: commandInvalid(); break; default: commandUnimplemented(operation); break; } debugger.commandEpilogue(operation); } //0x19 auto Disc::commandTest() -> void { u8 operation = 0x19; u8 suboperation = fifo.parameter.read(0); debugger.commandPrologue(operation, suboperation); switch(suboperation) { case 0x20: commandTestControllerDate(); break; default: commandUnimplemented(operation, suboperation); break; } debugger.commandEpilogue(operation, suboperation); } //0x00 auto Disc::commandInvalid() -> void { fifo.response.write(0x11); fifo.response.write(0x40); irq.error.flag = 1; irq.poll(); } //0x01 auto Disc::commandGetStatus() -> void { fifo.response.write(status()); ssr.shellOpen = 0; irq.acknowledge.flag = 1; irq.poll(); } //0x02 auto Disc::commandSetLocation() -> void { ssr.reading = 0; u8 minute = CD::BCD::decode(fifo.parameter.read(0)); u8 second = CD::BCD::decode(fifo.parameter.read(0)); u8 frame = CD::BCD::decode(fifo.parameter.read(0)); drive.lba.request = CD::MSF(minute, second, frame).toLBA(); fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x03 auto Disc::commandPlay() -> void { maybe trackID; if(fifo.parameter.size()) { trackID = fifo.parameter.read(); } //uses SetLocation address unless a valid track# is provided drive.lba.current = drive.lba.request; if(trackID && *trackID) { if(auto track = session.track(*trackID)) { if(auto index = track->index(1)) { drive.lba.current = index->lba; } } } ssr.reading = 1; ssr.playingCDDA = 1; cdda.playMode = CDDA::PlayMode::Normal; counter.report = 33'868'800 / 75; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x04 auto Disc::commandFastForward() -> void { cdda.playMode = CDDA::PlayMode::FastForward; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x05 auto Disc::commandRewind() -> void { cdda.playMode = CDDA::PlayMode::Rewind; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x06 auto Disc::commandReadWithRetry() -> void { drive.seeking = 2 << drive.mode.speed; drive.lba.current = drive.lba.request; ssr.reading = 1; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x08 auto Disc::commandStop() -> void { if(event.invocation == 0) { event.invocation = 1; event.counter = 50'000; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); return; } if(event.invocation == 1) { ssr.playingCDDA = 0; fifo.response.write(status()); irq.complete.flag = 1; irq.poll(); return; } } //0x09 auto Disc::commandPause() -> void { if(event.invocation == 0) { event.invocation = 1; event.counter = 1'000'000; ssr.reading = 0; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); return; } if(event.invocation == 1) { fifo.response.write(status()); irq.complete.flag = 1; irq.poll(); return; } } //0x0a auto Disc::commandInitialize() -> void { if(event.invocation == 0) { event.invocation = 1; event.counter = 475'000; drive.mode.cdda = 0; drive.mode.autoPause = 0; drive.mode.report = 0; drive.mode.xaFilter = 0; drive.mode.ignore = 0; drive.mode.sectorSize = 0; drive.mode.xaADPCM = 0; drive.mode.speed = 0; ssr.motorOn = 1; ssr.reading = 0; ssr.seeking = 0; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); return; } if(event.invocation == 1) { fifo.response.write(status()); irq.complete.flag = 1; irq.poll(); return; } } //0x0b auto Disc::commandMute() -> void { audio.mute = 1; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x0c auto Disc::commandUnmute() -> void { audio.mute = 0; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x0d auto Disc::commandSetFilter() -> void { cdxa.filter.file = fifo.parameter.read(0); cdxa.filter.channel = fifo.parameter.read(0); fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x0e auto Disc::commandSetMode() -> void { n8 data = fifo.parameter.read(0); drive.mode.cdda = data.bit(0); drive.mode.autoPause = data.bit(1); drive.mode.report = data.bit(2); drive.mode.xaFilter = data.bit(3); drive.mode.ignore = data.bit(4); drive.mode.sectorSize = data.bit(5); drive.mode.xaADPCM = data.bit(6); drive.mode.speed = data.bit(7); fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); } //0x10 auto Disc::commandGetLocationReading() -> void { for(auto offset : range(8)) { fifo.response.write(drive.sector.data[12 + offset]); } irq.acknowledge.flag = 1; irq.poll(); } //0x11 auto Disc::commandGetLocationPlaying() -> void { s32 lba = drive.lba.current; s32 lbaTrack = 0; s32 lbaTrackID = 0; s32 lbaIndexID = 0; if(auto trackID = session.inTrack(lba)) { lbaTrackID = *trackID; if(auto track = session.track(*trackID)) { if(auto indexID = track->inIndex(lba)) { lbaIndexID = *indexID; } if(auto index = track->index(1)) { lbaTrack = index->lba; } } } auto [relativeMinute, relativeSecond, relativeFrame] = CD::MSF::fromLBA(lba - lbaTrack); auto [absoluteMinute, absoluteSecond, absoluteFrame] = CD::MSF::fromLBA(lba); fifo.response.write(lbaTrackID); fifo.response.write(lbaIndexID); fifo.response.write(CD::BCD::encode(relativeMinute)); fifo.response.write(CD::BCD::encode(relativeSecond)); fifo.response.write(CD::BCD::encode(relativeFrame)); fifo.response.write(CD::BCD::encode(absoluteMinute)); fifo.response.write(CD::BCD::encode(absoluteSecond)); fifo.response.write(CD::BCD::encode(absoluteFrame)); irq.acknowledge.flag = 1; irq.poll(); } //0x12 auto Disc::commandSetSession() -> void { if(event.invocation == 0) { event.invocation = 1; event.counter = 50'000; u8 session = fifo.parameter.read(0); if(session != 1) { debug(unimplemented, "Disc::commandSetSession(): session != 1"); } ssr.seeking = 1; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); return; } if(event.invocation == 1) { ssr.seeking = 0; fifo.response.write(status()); irq.complete.flag = 1; irq.poll(); return; } } //0x13 auto Disc::commandGetFirstAndLastTrackNumbers() -> void { fifo.response.write(status()); fifo.response.write(CD::BCD::encode(session.firstTrack)); fifo.response.write(CD::BCD::encode(session.lastTrack)); irq.acknowledge.flag = 1; irq.poll(); } //0x14 auto Disc::commandGetTrackStart() -> void { u8 trackID = fifo.parameter.read(0); s32 lba = 0; if(!trackID) { lba = session.leadOut.lba; } else if(auto track = session.track(trackID)) { if(auto index = track->index(1)) { lba = index->lba; } } auto [minute, second, frame] = CD::MSF::fromLBA(150 + lba); fifo.response.write(status()); fifo.response.write(CD::BCD::encode(minute)); fifo.response.write(CD::BCD::encode(second)); irq.acknowledge.flag = 1; irq.poll(); } //0x15 auto Disc::commandSeekData() -> void { drive.lba.current = drive.lba.request; fifo.response.write(status()); irq.complete.flag = 1; irq.poll(); } //0x16 auto Disc::commandSeekCDDA() -> void { drive.lba.current = drive.lba.request; ssr.playingCDDA = 0; fifo.response.write(status()); irq.complete.flag = 1; irq.poll(); } //0x19 0x20 auto Disc::commandTestControllerDate() -> void { fifo.response.write(0x95); fifo.response.write(0x05); fifo.response.write(0x16); fifo.response.write(0xc1); irq.acknowledge.flag = 1; irq.poll(); } //0x1a auto Disc::commandGetID() -> void { if(event.invocation == 0) { event.invocation = 1; event.counter = 50'000; fifo.response.write(status()); irq.acknowledge.flag = 1; irq.poll(); return; } if(event.invocation == 1) { if(noDisc()) { ssr.idError = 1; fifo.response.write(0x40); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); irq.error.flag = 1; irq.poll(); } else if(region() == "NTSC-J" && Region::NTSCJ()) { ssr.idError = 0; fifo.response.write(status()); fifo.response.write(0x00); fifo.response.write(0x20); fifo.response.write(0x00); fifo.response.write('S'); fifo.response.write('C'); fifo.response.write('E'); fifo.response.write('I'); irq.complete.flag = 1; irq.poll(); } else if(region() == "NTSC-U" && Region::NTSCU()) { ssr.idError = 0; fifo.response.write(status()); fifo.response.write(0x00); fifo.response.write(0x20); fifo.response.write(0x00); fifo.response.write('S'); fifo.response.write('C'); fifo.response.write('E'); fifo.response.write('A'); irq.complete.flag = 1; irq.poll(); } else if(region() == "PAL" && Region::PAL()) { ssr.idError = 0; fifo.response.write(status()); fifo.response.write(0x00); fifo.response.write(0x20); fifo.response.write(0x00); fifo.response.write('S'); fifo.response.write('C'); fifo.response.write('E'); fifo.response.write('E'); irq.complete.flag = 1; irq.poll(); } else if(audioCD()) { ssr.idError = 1; fifo.response.write(status()); fifo.response.write(0x90); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); irq.error.flag = 1; irq.poll(); } else { //invalid disc inserted ssr.idError = 1; fifo.response.write(status()); fifo.response.write(0x80); fifo.response.write(0x20); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); fifo.response.write(0x00); irq.error.flag = 1; irq.poll(); } return; } } //0x1b auto Disc::commandReadWithoutRetry() -> void { //retries will never occur under emulation return commandReadWithRetry(); } auto Disc::commandUnimplemented(u8 operation, maybe suboperation) -> void { if(!suboperation) { debug(unimplemented, "Disc::command($", hex(operation, 2L), ")"); } else { debug(unimplemented, "Disc::command($", hex(operation, 2L), ", $", hex(*suboperation, 2L)); } } ares-126/ares/ps1/disc/debugger.cpp000066400000000000000000000057321415063341600171770ustar00rootroot00000000000000auto Disc::Debugger::load(Node::Object parent) -> void { tracer.command = parent->append("Command", "CD"); tracer.read = parent->append("Read", "CD"); } auto Disc::Debugger::commandPrologue(u8 operation, maybe suboperation) -> void { if(!tracer.command->enabled()) return; if(operation == 0x19 && !suboperation) return; string name; if(operation == 0x01) { name = "GetStatus"; } if(operation == 0x02) { name = "SetLocation"; } if(operation == 0x03) { name = "Play"; } if(operation == 0x04) { name = "FastForward"; } if(operation == 0x05) { name = "Rewind"; } if(operation == 0x06) { name = "ReadWithRetry"; } if(operation == 0x07) { name = "MotorOn"; } if(operation == 0x08) { name = "Stop"; } if(operation == 0x09) { name = "Pause"; } if(operation == 0x0a) { name = "Initialize"; } if(operation == 0x0b) { name = "Mute"; } if(operation == 0x0c) { name = "Unmute"; } if(operation == 0x0d) { name = "SetFilter"; } if(operation == 0x0e) { name = "SetMode"; } if(operation == 0x0f) { name = "GetParameter"; } if(operation == 0x10) { name = "GetLocationReading"; } if(operation == 0x11) { name = "GetLocationPlaying"; } if(operation == 0x12) { name = "SetSession"; } if(operation == 0x13) { name = "GetFirstAndLastTrackNumbers"; } if(operation == 0x14) { name = "GetTrackStart"; } if(operation == 0x15) { name = "SeekData"; } if(operation == 0x16) { name = "SeekCDDA"; } if(operation == 0x19 && *suboperation == 0x20) { name = "TestControllerDate"; } if(operation == 0x1a) { name = "GetID"; } if(operation == 0x1b) { name = "ReadWithoutRetry"; } if(!name) { if(!suboperation) name = {"$", hex(operation, 2L)}; if( suboperation) name = {"Test$", hex(*suboperation, 2L)}; } _command = name; _command.append("("); for(u32 index : range(disc.fifo.parameter.size())) { u8 data = disc.fifo.parameter.peek(index); _command.append("$", hex(data, 2L), ","); } _command.trimRight(",", 1L); _command.append(")"); } auto Disc::Debugger::commandEpilogue(u8 operation, maybe suboperation) -> void { if(!tracer.command->enabled()) return; if(operation == 0x19 && !suboperation) return; _command.append(" = {"); for(u32 index : range(disc.fifo.response.size())) { u8 data = disc.fifo.response.peek(index); _command.append("$", hex(data, 2L), ","); } _command.trimRight(",", 1L); _command.append("}"); tracer.command->notify(_command); } auto Disc::Debugger::read(s32 lba) -> void { if(!tracer.read->enabled()) return; auto [minute, second, frame] = CD::MSF::fromLBA(lba); minute = CD::BCD::encode(minute); second = CD::BCD::encode(second); frame = CD::BCD::encode(frame); tracer.read->notify({hex(minute, 2L), ":", hex(second, 2L), ":", hex(frame, 2L)}); } ares-126/ares/ps1/disc/disc.cpp000066400000000000000000000127511415063341600163340ustar00rootroot00000000000000#include namespace ares::PlayStation { Disc disc; #include "drive.cpp" #include "cdda.cpp" #include "cdxa.cpp" #include "io.cpp" #include "command.cpp" #include "irq.cpp" #include "debugger.cpp" #include "serialization.cpp" auto Disc::load(Node::Object parent) -> void { node = parent->append("PlayStation"); tray = node->append("Disc Tray"); tray->setFamily("PlayStation"); tray->setType("Compact Disc"); tray->setHotSwappable(true); tray->setAllocate([&](auto name) { return allocate(tray); }); tray->setConnect([&] { return connect(); }); tray->setDisconnect([&] { return disconnect(); }); //subclass simulation drive.session = session; drive.cdda = cdda; drive.cdxa = cdxa; cdda.drive = drive; cdxa.drive = drive; cdda.load(node); cdxa.load(node); debugger.load(node); } auto Disc::unload() -> void { debugger = {}; cdda.unload(node); cdxa.unload(node); disconnect(); tray.reset(); node.reset(); } auto Disc::allocate(Node::Port parent) -> Node::Peripheral { return cd = parent->append("PlayStation Disc"); } auto Disc::connect() -> void { if(!cd->setPak(pak = platform->pak(cd))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.audio = pak->attribute("audio").boolean(); information.executable = pak->attribute("executable").boolean(); if(!executable()) { fd = pak->read("cd.rom"); if(!fd) return disconnect(); //read TOC (table of contents) from disc lead-in u32 sectors = fd->size() / 2448; vector subchannel; subchannel.resize(sectors * 96); for(u32 sector : range(sectors)) { fd->seek(sector * 2448 + 2352); fd->read({subchannel.data() + sector * 96, 96}); } session.decode(subchannel, 96); } } auto Disc::disconnect() -> void { fd.reset(); cd.reset(); pak.reset(); information = {}; } auto Disc::main() -> void { counter.sector += 128; if(counter.sector >= 451584 >> drive.mode.speed) { //75hz (single speed) or 37.5hz (double speed) counter.sector -= 451584 >> drive.mode.speed; drive.clockSector(); } counter.cdda += 128; if(counter.cdda >= 768) { //44100hz counter.cdda -= 768; cdda.clockSample(); } counter.cdxa += 128; if(counter.cdxa >= 896) { //37800hz counter.cdxa -= 896; cdxa.clockSample(); } if(event.counter > 0) { event.counter -= 128; if(event.counter <= 0) { event.counter = 0; command(event.command); if(!event.counter && event.queued) { event.command = event.queued; event.counter = 50'000; event.invocation = 0; event.queued = 0; } } } if(drive.mode.report && ssr.playingCDDA) { counter.report -= 128; if(counter.report <= 0) { counter.report += 33'868'800 / 75; s32 lba = drive.lba.current; s32 lbaTrack = 0; u8 inTrack = 0; u8 inIndex = 0; if(auto trackID = session.inTrack(lba)) { inTrack = *trackID; if(auto track = session.track(inTrack)) { if(auto indexID = track->inIndex(lba)) { inIndex = *indexID; if(auto index = track->index(1)) { lbaTrack = index->lba; } } } } auto [aminute, asecond, aframe] = CD::MSF::fromLBA(lba); auto [rminute, rsecond, rframe] = CD::MSF::fromLBA(lba - lbaTrack); //sectors 0, 20, 40, 60 report absolute time //sectors 10, 30, 50, 70 report relative time //note: bad sector reads report immediately; but bad sectors are not emulated u8 frameBCD = CD::BCD::encode(aframe); if((frameBCD & 15) == 0) { bool relative = frameBCD & 16; fifo.response.write(status()); fifo.response.write(CD::BCD::encode(inTrack)); fifo.response.write(CD::BCD::encode(inIndex)); fifo.response.write(CD::BCD::encode((!relative ? aminute : rminute))); fifo.response.write(CD::BCD::encode((!relative ? asecond : rsecond)) | relative << 7); fifo.response.write(CD::BCD::encode((!relative ? aframe : rframe ))); fifo.response.write(0xff); //todo: peak lo fifo.response.write(0x7f | relative << 7); //todo: peak hi + left/right channel irq.ready.flag = 1; irq.poll(); } } } step(128); } auto Disc::step(u32 clocks) -> void { Thread::clock += clocks; } auto Disc::power(bool reset) -> void { Thread::reset(); Memory::Interface::setWaitStates(7, 13, 25); drive.lba.current = 0; drive.lba.request = 0; drive.lba.seeking = 0; for(auto& v : drive.sector.data) v = 0; drive.sector.offset = 0; drive.mode = {}; drive.seeking = 0; audio = {}; //configure for stereo sound at 100% volume level audio.volume[0] = audio.volumeLatch[0] = 0x80; audio.volume[1] = audio.volumeLatch[1] = 0x00; audio.volume[2] = audio.volumeLatch[2] = 0x00; audio.volume[3] = audio.volumeLatch[3] = 0x80; cdda.playMode = CDDA::PlayMode::Normal; cdda.sample.left = 0; cdda.sample.right = 0; cdxa.filter = {}; cdxa.sample.left = 0; cdxa.sample.right = 0; cdxa.monaural = 0; cdxa.samples.flush(); for(auto& v : cdxa.previousSamples) v = 0; event.command = 0; event.counter = 0; event.invocation = 0; event.queued = 0; irq = {}; fifo.parameter.flush(); fifo.response.flush(); fifo.data.flush(); psr = {}; ssr = {}; io = {}; counter.sector = 0; counter.cdda = 0; counter.cdxa = 0; counter.report = 0; } } ares-126/ares/ps1/disc/disc.hpp000066400000000000000000000127311415063341600163370ustar00rootroot00000000000000struct Disc : Thread, Memory::Interface { Node::Object node; Node::Port tray; Node::Peripheral cd; VFS::Pak pak; VFS::File fd; CD::Session session; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto commandPrologue(u8 operation, maybe suboperation = nothing) -> void; auto commandEpilogue(u8 operation, maybe suboperation = nothing) -> void; auto read(s32 lba) -> void; struct Tracer { Node::Debugger::Tracer::Notification command; Node::Debugger::Tracer::Notification read; } tracer; private: string _command; } debugger; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } auto audioCD() const -> bool { return information.audio; } auto executable() const -> bool { return information.executable; } auto noDisc() const -> bool { return !title(); } //disc.cpp auto load(Node::Object) -> void; auto unload() -> void; auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //io.cpp auto readDMA() -> u32; auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //command.cpp auto status() -> u8; auto command(u8 operation) -> void; auto commandTest() -> void; auto commandInvalid() -> void; auto commandGetStatus() -> void; auto commandSetLocation() -> void; auto commandPlay() -> void; auto commandFastForward() -> void; auto commandRewind() -> void; auto commandReadWithRetry() -> void; auto commandStop() -> void; auto commandPause() -> void; auto commandInitialize() -> void; auto commandMute() -> void; auto commandUnmute() -> void; auto commandSetFilter() -> void; auto commandSetMode() -> void; auto commandGetLocationReading() -> void; auto commandGetLocationPlaying() -> void; auto commandSetSession() -> void; auto commandGetFirstAndLastTrackNumbers() -> void; auto commandGetTrackStart() -> void; auto commandSeekData() -> void; auto commandSeekCDDA() -> void; auto commandTestControllerDate() -> void; auto commandGetID() -> void; auto commandReadWithoutRetry() -> void; auto commandUnimplemented(u8, maybe = nothing) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Drive; struct CDDA; struct CDXA; struct Drive { Disc& self; Drive(Disc& self) : self(self) {} maybe session; maybe cdda; maybe cdxa; //drive.cpp auto distance() const -> u32; auto clockSector() -> void; struct LBA { s32 current; s32 request; s32 seeking; } lba; struct Sector { u8 data[2448]; u16 offset; } sector; struct Mode { n1 cdda; n1 autoPause; n1 report; n1 xaFilter; n1 ignore; n1 sectorSize; n1 xaADPCM; n1 speed; } mode; n32 seeking; } drive{*this}; struct Audio { n1 mute; n1 muteADPCM; n8 volume[4]; n8 volumeLatch[4]; } audio; struct CDDA { Disc& self; CDDA(Disc& self) : self(self) {} maybe drive; Node::Audio::Stream stream; //cdda.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto clockSector() -> void; auto clockSample() -> void; enum class PlayMode : u32 { Normal, FastForward, Rewind, } playMode; struct Sample { s16 left; s16 right; } sample; } cdda{*this}; struct CDXA { Disc& self; CDXA(Disc& self) : self(self) {} maybe drive; Node::Audio::Stream stream; //cdxa.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto clockSector() -> void; auto clockSample() -> void; template auto decodeADPCM() -> void; template auto decodeBlock(s16* output, u16 address) -> void; struct Filter { n8 file; n8 channel; } filter; struct Sample { s16 left; s16 right; } sample; bool monaural; queue samples; s32 previousSamples[4]; } cdxa{*this}; struct Event { u8 command; s32 counter; u8 invocation; u8 queued; } event; struct IRQ { //irq.cpp auto poll() -> void; struct Source { n1 enable; n1 flag; }; n5 flag; n5 mask; Source ready; //INT1 Source complete; //INT2 Source acknowledge; //INT3 Source end; //INT4 Source error; //INT5 Source unknown; //INT8 Source start; //INT10 } irq; struct FIFO { queue parameter; queue response; queue data; } fifo; struct PrimaryStatusRegister { } psr; struct SecondaryStatusRegister { n1 error; n1 motorOn = 1; n1 seekError; n1 idError; n1 shellOpen; n1 reading; n1 seeking; n1 playingCDDA; } ssr; struct IO { n2 index; } io; struct Counter { s32 sector; s32 cdda; s32 cdxa; s32 report; } counter; //unserialized: struct Information { string title; string region; boolean audio; boolean executable; } information; }; extern Disc disc; ares-126/ares/ps1/disc/drive.cpp000066400000000000000000000043511415063341600165200ustar00rootroot00000000000000//computes the distance between the current LBA and seeking LBA auto Disc::Drive::distance() const -> u32 { return 0; } auto Disc::Drive::clockSector() -> void { if(seeking && --seeking) return; if(self.ssr.reading) { if(likely(self.fd)) { //there might not be a disc inserted here: self.debugger.read(lba.current); self.fd->seek(2448 * (abs(session->leadIn.lba) + lba.current++)); self.fd->read({sector.data, 2448}); } sector.offset = 0; if(self.ssr.playingCDDA) { if(cdda->playMode == Disc::CDDA::PlayMode::FastForward) { s32 end = 0; if(auto trackID = session->inTrack(lba.current)) { if(auto track = session->track(*trackID)) { if(auto index = track->index(track->lastIndex)) { end = index->end; } } } lba.current = min(end, lba.current + 10); } if(cdda->playMode == Disc::CDDA::PlayMode::Rewind) { s32 start = 0; if(auto trackID = session->inTrack(lba.current)) { if(auto track = session->track(*trackID)) { if(auto index = track->index(1)) { start = index->lba; } } } lba.current = max(start, lba.current - 10); } return cdda->clockSector(); } if(sector.data[15] == 0x02) { if(mode.xaFilter) { if(sector.data[16] != cdxa->filter.file) return; if(sector.data[17] != cdxa->filter.channel) return; } if(mode.xaADPCM && (sector.data[18] & 0x44) == 0x44) { return cdxa->clockSector(); } if(mode.xaFilter && (sector.data[18] & 0x44) == 0x44) { return; } } //any remaining FIFO data is lost if a new sector is clocked //before all data from the previous sector was read by the CPU self.fifo.data.flush(); if(mode.sectorSize == 0) { for(u32 offset : range(2048)) { self.fifo.data.write(sector.data[24 + offset]); } } if(mode.sectorSize == 1) { for(u32 offset : range(2340)) { self.fifo.data.write(sector.data[12 + offset]); } } self.fifo.response.flush(); self.fifo.response.write(self.status()); self.irq.ready.flag = 1; self.irq.poll(); return; } } ares-126/ares/ps1/disc/io.cpp000066400000000000000000000122731415063341600160200ustar00rootroot00000000000000auto Disc::readDMA() -> u32 { u32 data = 0; data |= fifo.data.read(0) << 0; data |= fifo.data.read(0) << 8; data |= fifo.data.read(0) << 16; data |= fifo.data.read(0) << 24; return data; } auto Disc::readByte(u32 address) -> u32 { n8 data = 0; if(address == 0x1f80'1800) { data.bit(0) = io.index.bit(0); data.bit(1) = io.index.bit(1); data.bit(2) = 0; //XA-ADPCM FIFO (0 = empty) data.bit(3) = fifo.parameter.empty(); //1 when empty data.bit(4) = !fifo.parameter.full(); //0 when full data.bit(5) = !fifo.response.empty(); //0 when empty data.bit(6) = !fifo.data.empty(); //0 when empty data.bit(7) = 0; //command/parameter busy (0 = ready) } //response FIFO if(address == 0x1f80'1801 && (io.index == 0 || io.index == 1 || io.index == 2 || io.index == 3)) { data = fifo.response.read(data); } //data FIFO if(address == 0x1f80'1802 && (io.index == 0 || io.index == 1 || io.index == 2 || io.index == 3)) { data = fifo.data.read(data); } //interrupt enable if(address == 0x1f80'1803 && (io.index == 0 || io.index == 2)) { data.bit(0) = irq.ready.enable; data.bit(1) = irq.complete.enable; data.bit(2) = irq.acknowledge.enable; data.bit(3) = irq.end.enable; data.bit(4) = irq.error.enable; data.bit(5) = 1; data.bit(6) = 1; data.bit(7) = 1; } //interrupt flag if(address == 0x1f80'1803 && (io.index == 1 || io.index == 3)) { n3 flags = 0; if(irq.error.flag ) flags = 5; if(irq.end.flag ) flags = 4; if(irq.acknowledge.flag) flags = 3; if(irq.complete.flag ) flags = 2; if(irq.ready.flag ) flags = 1; data.bit(0,2) = flags; data.bit(3) = irq.end.flag; data.bit(4) = irq.error.flag; data.bit(5) = 1; data.bit(6) = 1; data.bit(7) = 1; } return data; } auto Disc::readHalf(u32 address) -> u32 { debug(unverified, "Disc::readHalf(", hex(address, 8L), ")"); n16 data = readByte(address & ~1 | 0) << 0; return data | readByte(address & ~1 | 1) << 8; } auto Disc::readWord(u32 address) -> u32 { debug(unverified, "Disc::readWord(", hex(address, 8L), ")"); n32 data = readHalf(address & ~3 | 0) << 0; return data | readHalf(address & ~3 | 2) << 16; } auto Disc::writeByte(u32 address, u32 value) -> void { n8 data = value; if(address == 0x1f80'1800) { io.index = data.bit(0,1); } //command register if(address == 0x1f80'1801 && io.index == 0) { if(event.counter) { debug(unimplemented, "Disc::writeByte(): ", hex(event.counter, 2L), "->", hex(data, 2L)); } event.command = data; event.counter = 50'000; event.invocation = 0; } //sound map data output if(address == 0x1f80'1801 && io.index == 1) { } //sound map coding information if(address == 0x1f80'1801 && io.index == 2) { } //audio volume for right CD output to right SPU input if(address == 0x1f80'1801 && io.index == 3) { audio.volumeLatch[3] = data; } //parameter FIFO if(address == 0x1f80'1802 && io.index == 0) { if(!fifo.parameter.full()) fifo.parameter.write(data); } //interrupt enable if(address == 0x1f80'1802 && io.index == 1) { irq.ready.enable = data.bit(0); irq.complete.enable = data.bit(1); irq.acknowledge.enable = data.bit(2); irq.end.enable = data.bit(3); irq.error.enable = data.bit(4); irq.poll(); } //audio volume for left CD output to left SPU input if(address == 0x1f80'1802 && io.index == 2) { audio.volumeLatch[0] = data; } //audio volume for right CD output to left SPU input if(address == 0x1f80'1802 && io.index == 3) { audio.volumeLatch[2] = data; } //request register if(address == 0x1f80'1803 && io.index == 0) { } //interrupt flag if(address == 0x1f80'1803 && io.index == 1) { if(data.bit(0,2) == 7) { if(0); else if(irq.ready.flag ) irq.ready.flag = 0; else if(irq.complete.flag ) irq.complete.flag = 0; else if(irq.acknowledge.flag) irq.acknowledge.flag = 0; else if(irq.end.flag ) irq.end.flag = 0; else if(irq.error.flag ) irq.error.flag = 0; } if(data.bit(3)) irq.end.flag = 0; if(data.bit(4)) irq.error.flag = 0; if(data.bit(6)) fifo.parameter.flush(); irq.poll(); } //audio volume for left CD output to right SPU input if(address == 0x1f80'1803 && io.index == 2) { audio.volumeLatch[1] = data; } //audio volume apply changes if(address == 0x1f80'1803 && io.index == 3) { audio.muteADPCM = data.bit(0); if(data.bit(5)) { audio.volume[0] = audio.volumeLatch[0]; audio.volume[1] = audio.volumeLatch[1]; audio.volume[2] = audio.volumeLatch[2]; audio.volume[3] = audio.volumeLatch[3]; } if(audio.muteADPCM) debug(unusual, "Disc::writeByte: ADPMUTE = 1"); } } auto Disc::writeHalf(u32 address, u32 data) -> void { debug(unverified, "Disc::writeHalf(", hex(address, 8L), ")"); writeByte(address & ~1 | 0, data >> 0); writeByte(address & ~1 | 1, data >> 8); } auto Disc::writeWord(u32 address, u32 data) -> void { debug(unverified, "Disc::writeWord(", hex(address, 8L), ")"); writeHalf(address & ~3 | 0, data >> 0); writeHalf(address & ~3 | 2, data >> 16); } ares-126/ares/ps1/disc/irq.cpp000066400000000000000000000004731415063341600162030ustar00rootroot00000000000000auto Disc::IRQ::poll() -> void { bool pending = 0; pending |= ready.flag & ready.enable; pending |= complete.flag & complete.enable; pending |= acknowledge.flag & acknowledge.enable; pending |= end.flag & end.enable; pending |= error.flag & error.enable; interrupt.drive(Interrupt::CDROM, pending); } ares-126/ares/ps1/disc/serialization.cpp000066400000000000000000000027101415063341600202610ustar00rootroot00000000000000auto Disc::serialize(serializer& s) -> void { Thread::serialize(s); s(drive.lba.current); s(drive.lba.request); s(drive.lba.seeking); s(drive.sector.data); s(drive.sector.offset); s(drive.mode.cdda); s(drive.mode.autoPause); s(drive.mode.report); s(drive.mode.xaFilter); s(drive.mode.ignore); s(drive.mode.sectorSize); s(drive.mode.xaADPCM); s(drive.mode.speed); s(drive.seeking); s(audio.mute); s(audio.muteADPCM); s(audio.volume); s(audio.volumeLatch); s((u32&)cdda.playMode); s(cdda.sample.left); s(cdda.sample.right); s(cdxa.filter.file); s(cdxa.filter.channel); s(cdxa.sample.left); s(cdxa.sample.right); s(cdxa.monaural); s(cdxa.samples); s(cdxa.previousSamples); s(event.command); s(event.counter); s(event.invocation); s(event.queued); s(irq.flag); s(irq.mask); s(irq.ready.enable); s(irq.ready.flag); s(irq.complete.enable); s(irq.complete.flag); s(irq.acknowledge.enable); s(irq.acknowledge.flag); s(irq.end.enable); s(irq.end.flag); s(irq.error.enable); s(irq.error.flag); s(irq.unknown.enable); s(irq.unknown.flag); s(irq.start.enable); s(irq.start.flag); s(fifo.parameter); s(fifo.response); s(fifo.data); s(ssr.error); s(ssr.motorOn); s(ssr.seekError); s(ssr.idError); s(ssr.shellOpen); s(ssr.reading); s(ssr.seeking); s(ssr.playingCDDA); s(io.index); s(counter.sector); s(counter.cdda); s(counter.cdxa); s(counter.report); } ares-126/ares/ps1/dma/000077500000000000000000000000001415063341600145175ustar00rootroot00000000000000ares-126/ares/ps1/dma/channel.cpp000066400000000000000000000101541415063341600166340ustar00rootroot00000000000000auto DMA::sortChannelsByPriority() -> void { n1 selected[7]; for(u32 index : range(7)) { u32 id = 8, lowest = 8; for(u32 search : range(7)) { if(selected[search]) continue; if(channels[search].priority < lowest) { lowest = channels[search].priority; id = search; } } selected[id] = 1; channelsByPriority[index] = id; } } auto DMA::Channel::step(u32 clocks) -> bool { if(!masterEnable || !counter) return false; if(counter > clocks) { counter -= clocks; return state == Running; } counter = 0; if(state == Waiting) { if((id != OTC && (enable || trigger)) || (id == OTC && (enable && trigger)) ) { enable = 1; trigger = 0; state = Running; do { switch(synchronization) { case 0: transferBlock(); break; case 1: transferBlock(); break; case 2: transferChain(); break; } } while(id != SPU && synchronization == 1 && enable); } return false; } if(synchronization == 0 && enable) { state = Waiting; counter = 1 << chopping.cpuWindow; return false; } if(synchronization == 1 && enable) { state = Waiting; counter = 192; return false; } if(synchronization == 2 && enable) { state = Waiting; counter = 192; return false; } state = Waiting; if(irq.enable) { irq.flag = 1; dma.irq.poll(); } return false; } auto DMA::Channel::transferBlock() -> void { dma.debugger.transfer(id); u32 address = this->address & ~3; u16 length = this->length; u32 timeout = synchronization == 0 && chopping.enable ? 1 << chopping.dmaWindow : ~0; s16 step = this->decrement ? -4 : +4; u32 clocks = 0; do { //DMA -> CPU if(direction == 0) { u32 data = 0; switch(id) { case 0: debug(unimplemented, "DMA MDECin read"); break; case 1: data = mdec.readDMA(); break; case 2: data = gpu.readDMA(); break; case 3: data = disc.readDMA(); break; case 4: data = spu.readDMA(); break; case 5: debug(unimplemented, "DMA PIO read"); break; case 6: data = address - 4 & 0xfffffc; if(length == 1) data = 0xffffff; break; } bus.write(address, data); } //CPU -> DMA if(direction == 1) { u32 data = bus.read(address); switch(id) { case 0: mdec.writeDMA(data); break; case 1: debug(unimplemented, "DMA MDECout write"); break; case 2: gpu.writeDMA(data); break; case 3: debug(unimplemented, "DMA CDROM write"); break; case 4: spu.writeDMA(data); break; case 5: debug(unimplemented, "DMA PIO write"); break; case 6: debug(unimplemented, "DMA OTC write"); break; } } address += step; clocks += 1; } while(--length && --timeout); if(synchronization == 0 && chopping.enable == 0) { enable = 0; } if(synchronization == 0 && chopping.enable == 1) { this->address = address; this->length = length; if(length == 0) enable = 0; } if(synchronization == 1) { this->address = address; this->blocks--; if(blocks == 0) enable = 0; } this->counter = 1 + clocks; } auto DMA::Channel::transferChain() -> void { dma.debugger.transfer(id); u32 address = this->address & ~3; u32 clocks = 0; u32 timeout = 0x1000; do { n32 data = bus.read(address & 0xfffffc); address += 4; clocks += 1; if(!chain.length) { chain.address = data >> 0; chain.length = data >> 24; } else if(chain.length--) { switch(id) { case 0: mdec.writeDMA(data); break; case 1: debug(unimplemented, "DMA MDECout chain"); break; case 2: gpu.writeDMA(data); break; case 3: debug(unimplemented, "DMA CDROM chain"); break; case 4: spu.writeDMA(data); break; case 5: debug(unimplemented, "DMA PIO chain"); break; case 6: debug(unimplemented, "DMA OTC chain"); break; } } if(!chain.length) { address = chain.address; if(address & 1 << 23) break; if(clocks >= timeout) break; } } while(true); this->counter = 1 + clocks; this->address = address; if(address & 0x800000) enable = 0; } ares-126/ares/ps1/dma/debugger.cpp000066400000000000000000000015461415063341600170150ustar00rootroot00000000000000auto DMA::Debugger::load(Node::Object parent) -> void { tracer.dma = parent->append("Transfer", "DMA"); } auto DMA::Debugger::transfer(u32 channelID) -> void { if(tracer.dma->enabled()) { static const char* channelName[7] = { "MDEC", "MDEC", " GPU", " CD", " SPU", " PIO", " OTC" }; auto& channel = PlayStation::dma.channels[channelID]; string output; output.append(channel.synchronization != 2 ? "Block:" : "Chain:", channelName[channelID], " "); output.append(!channel.direction ? " To:" : "From:", hex(channel.address, 6L)); output.append(channel.decrement ? "-" : "+"); if(channel.synchronization != 2) output.append(" Length:", hex(channel.length, 4L)); if(channel.synchronization == 1) output.append(" Blocks:", hex(channel.blocks, 4L)); tracer.dma->notify(output); } } ares-126/ares/ps1/dma/dma.cpp000066400000000000000000000026521415063341600157710ustar00rootroot00000000000000#include namespace ares::PlayStation { DMA dma; #include "io.cpp" #include "irq.cpp" #include "channel.cpp" #include "debugger.cpp" #include "serialization.cpp" auto DMA::load(Node::Object parent) -> void { node = parent->append("DMA"); debugger.load(node); } auto DMA::unload() -> void { debugger = {}; node.reset(); } auto DMA::main() -> void { for(u32 id : channelsByPriority) { if(channels[id].step(16)) break; } step(16); } auto DMA::step(u32 clocks) -> void { Thread::clock += clocks; } auto DMA::power(bool reset) -> void { Memory::Interface::setWaitStates(3, 3, 2); irq.force = 0; irq.enable = 0; irq.flag = 0; irq.unknown = 0; for(u32 n : range(7)) { channels[n].masterEnable = 0; channels[n].priority = 1 + n; channels[n].address = 0; channels[n].length = 0; channels[n].blocks = 0; channels[n].direction = 0; channels[n].decrement = 0; channels[n].synchronization = 0; channels[n].chopping.enable = 0; channels[n].chopping.dmaWindow = 0; channels[n].chopping.cpuWindow = 0; channels[n].enable = 0; channels[n].trigger = 0; channels[n].unknown = 0; channels[n].irq.enable = 0; channels[n].irq.flag = 0; channels[n].chain.address = 0; channels[n].chain.length = 0; channels[n].state = 0; channels[n].counter = 0; } for(auto& v : channelsByPriority) v = 0; sortChannelsByPriority(); } } ares-126/ares/ps1/dma/dma.hpp000066400000000000000000000036111415063341600157720ustar00rootroot00000000000000struct DMA : Thread, Memory::Interface { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto transfer(u32 channel) -> void; struct Tracer { Node::Debugger::Tracer::Notification dma; } tracer; } debugger; //dma.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //io.cpp auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //channel.cpp auto sortChannelsByPriority() -> void; //serialization.cpp auto serialize(serializer&) -> void; enum : u32 { MDECin, MDECout, GPU, CDROM, SPU, PIO, OTC }; //channel IDs enum : u32 { Waiting, Running }; //channel states struct IRQ { DMA& self; IRQ(DMA& self) : self(self) {} //irq.cpp auto poll() -> void; n1 force; n1 enable; n1 flag; n6 unknown; } irq{*this}; struct Channel { const u32 id; //channel.cpp auto step(u32 clocks) -> bool; auto transferBlock() -> void; auto transferChain() -> void; //serialization.cpp auto serialize(serializer&) -> void; n1 masterEnable; n3 priority; n24 address; n16 length; n16 blocks; n1 direction; n1 decrement; n2 synchronization; struct Chopping { n1 enable; n3 dmaWindow; n3 cpuWindow; } chopping; n1 enable; n1 trigger; n2 unknown; struct IRQ { n1 enable; n1 flag; } irq; struct Chain { n24 address; n8 length; } chain; n8 state; i32 counter; } channels[7] = {{0}, {1}, {2}, {3}, {4}, {5}, {6}}; u32 channelsByPriority[7]; }; extern DMA dma; ares-126/ares/ps1/dma/io.cpp000066400000000000000000000230551415063341600156370ustar00rootroot00000000000000auto DMA::readByte(u32 address) -> u32 { n32 data; if((address & ~3) == 0x1f80'10f0) return data = readWord(address & ~3) >> 8 * (address & 3); if((address & ~3) == 0x1f80'10f4) return data = readWord(address & ~3) >> 8 * (address & 3); if((address & ~3) == 0x1f80'10f8) return data = readWord(address & ~3) >> 8 * (address & 3); if((address & ~3) == 0x1f80'10fc) return data = readWord(address & ~3) >> 8 * (address & 3); auto& channel = channels[address >> 4 & 7]; if((address & 0xffff'ff8c) == 0x1f80'1080) data = readWord(address & ~3) >> 8 * (address & 3); if((address & 0xffff'ff8f) == 0x1f80'1084) data = channel.length.byte(0); if((address & 0xffff'ff8f) == 0x1f80'1085) data = channel.length.byte(1); if((address & 0xffff'ff8f) == 0x1f80'1086) data = channel.blocks.byte(0); if((address & 0xffff'ff8f) == 0x1f80'1087) data = channel.blocks.byte(1); if((address & 0xffff'ff8c) == 0x1f80'1088) data = readWord(address & ~3) >> 8 * (address & 3); if((address & 0xffff'ff8c) == 0x1f80'108c) data = readWord(address & ~3) >> 8 * (address & 3); return data; } auto DMA::readHalf(u32 address) -> u32 { n32 data; if((address & ~3) == 0x1f80'10f0) return data = readWord(address & ~3) >> 8 * (address & 3); if((address & ~3) == 0x1f80'10f4) return data = readWord(address & ~3) >> 8 * (address & 3); if((address & ~3) == 0x1f80'10f8) return data = readWord(address & ~3) >> 8 * (address & 3); if((address & ~3) == 0x1f80'10fc) return data = readWord(address & ~3) >> 8 * (address & 3); auto& channel = channels[address >> 4 & 7]; if((address & 0xffff'ff8c) == 0x1f80'1080) data = readWord(address & ~3) >> 8 * (address & 3); if((address & 0xffff'ff8e) == 0x1f80'1084) data = channel.length; if((address & 0xffff'ff8e) == 0x1f80'1086) data = channel.blocks; if((address & 0xffff'ff8c) == 0x1f80'1088) data = readWord(address & ~3) >> 8 * (address & 3); if((address & 0xffff'ff8c) == 0x1f80'108c) data = readWord(address & ~3) >> 8 * (address & 3); return data; } auto DMA::readWord(u32 address) -> u32 { n32 data; //DPCR: DMA Control if(address == 0x1f80'10f0) { data.bit( 0, 2) = channels[0].priority; data.bit( 3) = channels[0].masterEnable; data.bit( 4, 6) = channels[1].priority; data.bit( 7) = channels[1].masterEnable; data.bit( 8,10) = channels[2].priority; data.bit(11) = channels[2].masterEnable; data.bit(12,14) = channels[3].priority; data.bit(15) = channels[3].masterEnable; data.bit(16,18) = channels[4].priority; data.bit(19) = channels[4].masterEnable; data.bit(20,22) = channels[5].priority; data.bit(23) = channels[5].masterEnable; data.bit(24,26) = channels[6].priority; data.bit(27) = channels[6].masterEnable; return data; } //DICR: DMA Interrupt if(address == 0x1f80'10f4) { data.bit( 0, 5) = irq.unknown; data.bit(16) = channels[0].irq.enable; data.bit(17) = channels[1].irq.enable; data.bit(18) = channels[2].irq.enable; data.bit(19) = channels[3].irq.enable; data.bit(20) = channels[4].irq.enable; data.bit(21) = channels[5].irq.enable; data.bit(22) = channels[6].irq.enable; data.bit(23) = irq.enable; data.bit(24) = channels[0].irq.flag; data.bit(25) = channels[1].irq.flag; data.bit(26) = channels[2].irq.flag; data.bit(27) = channels[3].irq.flag; data.bit(28) = channels[4].irq.flag; data.bit(29) = channels[5].irq.flag; data.bit(30) = channels[6].irq.flag; data.bit(31) = irq.flag; return data; } //unknown if(address == 0x1f80'10f8) { data = 0x7fe3'58d1; return data; } //unknown if(address == 0x1f80'10fc) { data = 0x00ff'fff7; return data; } auto& channel = channels[address >> 4 & 7]; //DnMADR: DMA Base Address if((address & 0xffff'ff8f) == 0x1f80'1080) { data.bit(0,23) = channel.address; } //DnBCR: DMA Block Control if((address & 0xffff'ff8f) == 0x1f80'1084) { data.bit( 0,15) = channel.length; data.bit(16,31) = channel.blocks; } //DnCHCR: DMA Channel Control if((address & 0xffff'ff8f) == 0x1f80'1088 || (address & 0xffff'ff8f) == 0x1f80'108c ) { data.bit( 0) = channel.direction; data.bit( 1) = channel.decrement; data.bit( 2) = channel.chopping.enable; data.bit( 9,10) = channel.synchronization; data.bit(16,18) = channel.chopping.dmaWindow; data.bit(20,22) = channel.chopping.cpuWindow; data.bit(24) = channel.enable; data.bit(28) = channel.trigger; data.bit(29,30) = channel.unknown; } return data; } auto DMA::writeByte(u32 address, u32 value) -> void { n32 data = value; if((address & ~3) == 0x1f80'10f0) return writeWord(address & ~3, data << 8 * (address & 3)); if((address & ~3) == 0x1f80'10f4) return writeWord(address & ~3, data << 8 * (address & 3)); if((address & ~3) == 0x1f80'10f8) return writeWord(address & ~3, data << 8 * (address & 3)); if((address & ~3) == 0x1f80'10fc) return writeWord(address & ~3, data << 8 * (address & 3)); auto& channel = channels[address >> 4 & 7]; if((address & 0xffff'ff8c) == 0x1f80'1080) writeWord(address & ~3, data << 8 * (address & 3)); if((address & 0xffff'ff8f) == 0x1f80'1084) channel.length.byte(0) = data; if((address & 0xffff'ff8f) == 0x1f80'1085) channel.length.byte(1) = data; if((address & 0xffff'ff8f) == 0x1f80'1086) channel.blocks.byte(0) = data; if((address & 0xffff'ff8f) == 0x1f80'1087) channel.blocks.byte(1) = data; if((address & 0xffff'ff8c) == 0x1f80'1088) writeWord(address & ~3, data << 8 * (address & 3)); if((address & 0xffff'ff8c) == 0x1f80'108c) writeWord(address & ~3, data << 8 * (address & 3)); } auto DMA::writeHalf(u32 address, u32 value) -> void { n32 data = value; if((address & ~3) == 0x1f80'10f0) return writeWord(address & ~3, data << 8 * (address & 3)); if((address & ~3) == 0x1f80'10f4) return writeWord(address & ~3, data << 8 * (address & 3)); if((address & ~3) == 0x1f80'10f8) return writeWord(address & ~3, data << 8 * (address & 3)); if((address & ~3) == 0x1f80'10fc) return writeWord(address & ~3, data << 8 * (address & 3)); auto& channel = channels[address >> 4 & 7]; if((address & 0xffff'ff8c) == 0x1f80'1080) writeWord(address & ~3, data << 8 * (address & 3)); if((address & 0xffff'fffe) == 0x1f80'1084) channel.length = data; if((address & 0xffff'fffe) == 0x1f80'1086) channel.blocks = data; if((address & 0xffff'ff8c) == 0x1f80'1088) writeWord(address & ~3, data << 8 * (address & 3)); if((address & 0xffff'ff8c) == 0x1f80'108c) writeWord(address & ~3, data << 8 * (address & 3)); } auto DMA::writeWord(u32 address, u32 value) -> void { n32 data = value; //DPCR: DMA Control if(address == 0x1f80'10f0) { channels[0].priority = data.bit( 0, 2); channels[0].masterEnable = data.bit( 3); channels[1].priority = data.bit( 4, 6); channels[1].masterEnable = data.bit( 7); channels[2].priority = data.bit( 8,10); channels[2].masterEnable = data.bit(11); channels[3].priority = data.bit(12,14); channels[3].masterEnable = data.bit(15); channels[4].priority = data.bit(16,18); channels[4].masterEnable = data.bit(19); channels[5].priority = data.bit(20,22); channels[5].masterEnable = data.bit(23); channels[6].priority = data.bit(24,26); channels[6].masterEnable = data.bit(27); sortChannelsByPriority(); return; } //DICR: DMA Interrupt if(address == 0x1f80'10f4) { irq.unknown = data.bit( 0,5); irq.force = data.bit(15); channels[0].irq.enable = data.bit(16); channels[1].irq.enable = data.bit(17); channels[2].irq.enable = data.bit(18); channels[3].irq.enable = data.bit(19); channels[4].irq.enable = data.bit(20); channels[5].irq.enable = data.bit(21); channels[6].irq.enable = data.bit(22); irq.enable = data.bit(23); if(data.bit(24)) channels[0].irq.flag = 0; if(data.bit(25)) channels[1].irq.flag = 0; if(data.bit(26)) channels[2].irq.flag = 0; if(data.bit(27)) channels[3].irq.flag = 0; if(data.bit(28)) channels[4].irq.flag = 0; if(data.bit(29)) channels[5].irq.flag = 0; if(data.bit(30)) channels[6].irq.flag = 0; irq.poll(); return; } //unused if(address == 0x1f80'10f8) { return; } //unused if(address == 0x1f80'10fc) { return; } auto& channel = channels[address >> 4 & 7]; //DnMADR: DMA Base Address if((address & 0xffff'ff8f) == 0x1f80'1080) { channel.address = data.bit(0,23); } //DnBCR: DMA Block Control if((address & 0xffff'ff8f) == 0x1f80'1084) { channel.length = data.bit( 0,15); channel.blocks = data.bit(16,31); } //DnCHCR: DMA Channel Control if((address & 0xffff'ff8f) == 0x1f80'1088 || (address & 0xffff'ff8f) == 0x1f80'108c ) { channel.direction = data.bit( 0); channel.decrement = data.bit( 1); channel.chopping.enable = data.bit( 2); channel.synchronization = data.bit( 9,10); channel.chopping.dmaWindow = data.bit(16,18); channel.chopping.cpuWindow = data.bit(20,22); channel.enable = data.bit(24); channel.trigger = data.bit(28); channel.unknown = data.bit(29,30); if(channel.id == OTC) { //OTC DMA hard-codes certain fields: channel.direction = 0; channel.decrement = 1; channel.chopping.enable = 0; channel.synchronization = 0; channel.chopping.dmaWindow = 0; channel.chopping.cpuWindow = 0; channel.unknown.bit(0) = 0; } channel.state = Waiting; channel.chain.length = 0; channel.counter = 1; } } ares-126/ares/ps1/dma/irq.cpp000066400000000000000000000012461415063341600160210ustar00rootroot00000000000000auto DMA::IRQ::poll() -> void { bool previous = flag; flag = force; if(enable) { flag |= self.channels[0].irq.flag & self.channels[0].irq.enable; flag |= self.channels[1].irq.flag & self.channels[1].irq.enable; flag |= self.channels[2].irq.flag & self.channels[2].irq.enable; flag |= self.channels[3].irq.flag & self.channels[3].irq.enable; flag |= self.channels[4].irq.flag & self.channels[4].irq.enable; flag |= self.channels[5].irq.flag & self.channels[5].irq.enable; flag |= self.channels[6].irq.flag & self.channels[6].irq.enable; } if(!previous && flag) interrupt.raise(Interrupt::DMA); if(!flag) interrupt.lower(Interrupt::DMA); } ares-126/ares/ps1/dma/serialization.cpp000066400000000000000000000011451415063341600201010ustar00rootroot00000000000000auto DMA::serialize(serializer& s) -> void { Thread::serialize(s); s(irq.force); s(irq.enable); s(irq.flag); s(irq.unknown); for(auto& channel : channels) { s(channel); } s(channelsByPriority); } auto DMA::Channel::serialize(serializer& s) -> void { s(masterEnable); s(priority); s(address); s(length); s(blocks); s(direction); s(decrement); s(synchronization); s(chopping.enable); s(chopping.dmaWindow); s(chopping.cpuWindow); s(enable); s(trigger); s(unknown); s(irq.enable); s(irq.flag); s(chain.length); s(chain.address); s(state); s(counter); } ares-126/ares/ps1/gpu/000077500000000000000000000000001415063341600145515ustar00rootroot00000000000000ares-126/ares/ps1/gpu/blitter.cpp000066400000000000000000000066101415063341600167250ustar00rootroot00000000000000auto GPU::Blitter::queue() -> void { self.refreshed = true; //if the display is disabled, output a black screen image if(blank = self.io.displayDisable) { self.screen->frame(); return; } depth = self.io.colorDepth; width = self.display.width; height = self.display.height; if(self.overscan->value() == 0) { if(height == 240) height = 224; if(height == 256) height = 240; if(height == 480) height = 448; if(height == 512) height = 480; } s32 offsetX1 = 0; if(self.display.width == 256) offsetX1 = 0x228; if(self.display.width == 320) offsetX1 = 0x260; if(self.display.width == 368) offsetX1 = 0x260; //untested if(self.display.width == 512) offsetX1 = 0x260; if(self.display.width == 640) offsetX1 = 0x260; s32 offsetY1 = 0; if(self.display.height == 240) offsetY1 = 0x10; if(self.display.height == 256) offsetY1 = 0x20; if(self.display.height == 480) offsetY1 = 0x10; if(self.display.height == 512) offsetY1 = 0x20; //target coordinates tx = max(((s32)self.io.displayRangeX1 - offsetX1) / (s32)self.display.dotclock, 0); ty = max(((s32)self.io.displayRangeY1 - offsetY1) << self.display.interlace, 0); tw = max(((s32)self.io.displayRangeX2 - (s32)self.io.displayRangeX1) / (s32)self.display.dotclock & ~3, 0); th = max(((s32)self.io.displayRangeY2 - (s32)self.io.displayRangeY1) << self.display.interlace, 0); //ensure coordinates cannot go out of bounds of the output region if(tx > 1023) tx = 1023; if(ty > 511) ty = 511; if(tx + tw > 1023) tw = 1023 - tx; if(ty + th > 511) th = 511 - ty; //overscan offset may send ty out of bounds, but the rendering below will skip drawing these lines if(self.overscan->value() == 0) { if(self.display.height == 240 || self.display.height == 256) ty -= 8; if(self.display.height == 480 || self.display.height == 512) ty -= 16; } if(tx != self.display.previous.x || ty != self.display.previous.y || tw != self.display.previous.width || th != self.display.previous.height ) { //the video output area has changed: clear the output buffer completely. //this ensures that none of the previous frames are still drawn to the screen. //todo } self.display.previous.x = tx; self.display.previous.y = ty; self.display.previous.width = tw; self.display.previous.height = th; //source coordinates sx = self.io.displayStartX; sy = self.io.displayStartY; self.screen->setViewport(0, 0, width, height); self.screen->frame(); } auto GPU::Blitter::refresh() -> void { if(blank) return; self.vram.mutex.lock(); auto output = self.screen->pixels(1).data(); //15bpp if(depth == 0) { for(u32 y : range(th)) { if(y + ty < 0 || y + ty >= 512) continue; u32 source = (y + sy) * 1024 * 2 + sx * 2; u32 target = (y + ty) * 640 * 1 + tx * 1; for(u32 x : range(tw)) { u16 data = self.vram.readHalf(source); output[target++] = 1 << 24 | data & 0x7fff; source += 2; } } } //24bpp if(depth == 1) { for(u32 y : range(th)) { if(y + ty < 0 || y + ty >= 512) continue; u32 source = (y + sy) * 1024 * 2 + sx * 2; u32 target = (y + ty) * 640 * 1 + tx * 1; for(u32 x : range(tw)) { u32 data = self.vram.readWordUnaligned(source); output[target++] = data & 0xffffff; source += 3; } } } self.vram.mutex.unlock(); } auto GPU::Blitter::power() -> void { } ares-126/ares/ps1/gpu/debugger.cpp000066400000000000000000000030551415063341600170440ustar00rootroot00000000000000auto GPU::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("GPU VRAM"); memory.vram->setSize(1_MiB); memory.vram->setRead([&](u32 address) -> u8 { return gpu.vram.readByte(address); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { return gpu.vram.writeByte(address, data); }); graphics.vram15bpp = parent->append("GPU VRAM 15bpp"); graphics.vram15bpp->setSize(1024, 512); graphics.vram15bpp->setCapture([&]() -> vector { vector output; output.resize(1024 * 512); for(u32 y : range(512)) { for(u32 x : range(1024)) { u16 pixel = gpu.vram.readHalf(y * 2048 + x * 2); u8 r = pixel >> 0 & 31; r = r << 3 | r >> 2; u8 g = pixel >> 5 & 31; g = g << 3 | g >> 2; u8 b = pixel >> 10 & 31; b = b << 3 | b >> 2; u8 a = 255; output[y * 1024 + x] = a << 24 | r << 16 | g << 8 | b << 0; } } return output; }); graphics.vram24bpp = parent->append("GPU VRAM 24bpp"); graphics.vram24bpp->setSize(682, 512); graphics.vram24bpp->setCapture([&]() -> vector { vector output; output.resize(682 * 512); for(u32 y : range(512)) { for(u32 x : range(682)) { u32 pixel = gpu.vram.readWordUnaligned(y * 2048 + x * 3); u8 r = pixel >> 0; u8 g = pixel >> 8; u8 b = pixel >> 16; u8 a = 255; output[y * 682 + x] = a << 24 | r << 16 | g << 8 | b << 0; } } return output; }); } ares-126/ares/ps1/gpu/gp0.cpp000066400000000000000000000410201415063341600157400ustar00rootroot00000000000000//GPUREAD auto GPU::readGP0() -> u32 { n32 data; if(io.mode == Mode::Status) { data = io.status; return data; } if(io.mode == Mode::CopyFromVRAM) { vram.mutex.lock(); for(u32 loop : range(2)) { n10 x = io.copy.x + io.copy.px; n9 y = io.copy.y + io.copy.py; data = vram2D[y][x] << 16 | data >> 16; if(++io.copy.px >= io.copy.width) { io.copy.px = 0; if(++io.copy.py >= io.copy.height) { io.copy.py = 0; io.mode = Mode::Normal; break; } } } vram.mutex.unlock(); return data; } data = io.status; return data; } auto GPU::writeGP0(u32 value, bool isThread) -> void { if(io.mode == Mode::CopyToVRAM) { vram.mutex.lock(); for(u32 loop : range(2)) { n10 x = io.copy.x + io.copy.px; n9 y = io.copy.y + io.copy.py; u16 pixel = vram2D[y][x]; if((pixel >> 15 & io.checkMaskBit) == 0) { vram2D[y][x] = value | io.forceMaskBit << 15; } value >>= 16; if(++io.copy.px >= io.copy.width) { io.copy.px = 0; if(++io.copy.py >= io.copy.height) { io.copy.py = 0; io.mode = Mode::Normal; break; } } } vram.mutex.unlock(); return; } auto& queue = this->queue.gp0; n8 command = value >> 24; n24 data = value >> 0; if(queue.empty()) { queue.command = command; //print("* GP0(", hex(command, 2L), ") = ", hex(value, 6L), "\n"); } else { command = queue.command; //print("* GP0(", hex(command, 2L), ") = ", hex(value, 8L), " [", queue.length, "]\n"); } Render render; render.command = command; render.dithering = io.dithering; render.semiTransparency = io.semiTransparency; render.checkMaskBit = io.checkMaskBit; render.forceMaskBit = io.forceMaskBit; render.drawingAreaOriginX1 = io.drawingAreaOriginX1; render.drawingAreaOriginY1 = io.drawingAreaOriginY1; render.drawingAreaOriginX2 = io.drawingAreaOriginX2; render.drawingAreaOriginY2 = io.drawingAreaOriginY2; render.drawingAreaOffsetX = io.drawingAreaOffsetX; render.drawingAreaOffsetY = io.drawingAreaOffsetY; render.textureDepth = io.textureDepth; render.texturePageBaseX = io.texturePageBaseX << 6; render.texturePageBaseY = io.texturePageBaseY << 8; render.texturePaletteX = io.texturePaletteX << 4; render.texturePaletteY = io.texturePaletteY << 0; render.texelMaskX = ~(io.textureWindowMaskX * 8); render.texelMaskY = ~(io.textureWindowMaskY * 8); render.texelOffsetX = (io.textureWindowOffsetX & io.textureWindowMaskX) * 8; render.texelOffsetY = (io.textureWindowOffsetY & io.textureWindowMaskY) * 8; auto setPalette = [&](u32 data) -> void { io.texturePaletteX = data >> 16 & 0x3f; io.texturePaletteY = data >> 22 & 0x1ff; render.texturePaletteX = io.texturePaletteX << 4; render.texturePaletteY = io.texturePaletteY << 0; }; auto setPage = [&](u32 data) -> void { io.texturePageBaseX = data >> 16 & 15; io.texturePageBaseY = data >> 20 & 1; io.semiTransparency = data >> 21 & 3; io.textureDepth = data >> 23 & 3; io.textureDisable = data >> 27 & 1; render.texturePageBaseX = io.texturePageBaseX << 6; render.texturePageBaseY = io.texturePageBaseY << 8; render.semiTransparency = io.semiTransparency; render.textureDepth = io.textureDepth; }; //no operation if(command == 0x00) { return; } //clear cache if(command == 0x01) { return; } //fill rectangle if(command == 0x02) { if(queue.write(value) < 3) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.size = Size().setSize(queue.data[2]); renderer.queue(render); return queue.reset(); } //unknown if(command == 0x03) { debug(unimplemented, "GP0(03)"); return; } //no operation if(command >= 0x04 && command <= 0x1e) { return; } //interrupt request if(command == 0x1f) { io.interrupt = 1; interrupt.raise(Interrupt::GPU); return; } //polygons: // d0 = texture mode (0 = blend, 1 = raw) // d1 = transparency // d2 = texture mapping // d3 = vertices (0 = triangle, 1 = quadrilateral) // d4 = shading (0 = flat, 1 = gouraud) //monochrome triangle if(command == 0x20 || command == 0x21 || command == 0x22 || command == 0x23) { if(queue.write(value) < 4) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.v1 = Vertex().setColor(queue.data[0]).setPoint(queue.data[2]); render.v2 = Vertex().setColor(queue.data[0]).setPoint(queue.data[3]); renderer.queue(render); return queue.reset(); } //textured triangle if(command == 0x24 || command == 0x25 || command == 0x26 || command == 0x27) { if(queue.write(value) < 7) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.v1 = Vertex().setColor(queue.data[0]).setPoint(queue.data[3]).setTexel(queue.data[4]); render.v2 = Vertex().setColor(queue.data[0]).setPoint(queue.data[5]).setTexel(queue.data[6]); setPalette(queue.data[2]); setPage(queue.data[4]); renderer.queue(render); return queue.reset(); } //monochrome quadrilateral if(command == 0x28 || command == 0x29 || command == 0x2a || command == 0x2b) { if(queue.write(value) < 5) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.v1 = Vertex().setColor(queue.data[0]).setPoint(queue.data[2]); render.v2 = Vertex().setColor(queue.data[0]).setPoint(queue.data[3]); render.v3 = Vertex().setColor(queue.data[0]).setPoint(queue.data[4]); renderer.queue(render); return queue.reset(); } //textured quadrilateral if(command == 0x2c || command == 0x2d || command == 0x2e || command == 0x2f) { if(queue.write(value) < 9) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.v1 = Vertex().setColor(queue.data[0]).setPoint(queue.data[3]).setTexel(queue.data[4]); render.v2 = Vertex().setColor(queue.data[0]).setPoint(queue.data[5]).setTexel(queue.data[6]); render.v3 = Vertex().setColor(queue.data[0]).setPoint(queue.data[7]).setTexel(queue.data[8]); setPalette(queue.data[2]); setPage(queue.data[4]); renderer.queue(render); return queue.reset(); } //shaded triangle if(command == 0x30 || command == 0x31 || command == 0x32 || command == 0x33) { if(queue.write(value) < 6) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.v1 = Vertex().setColor(queue.data[2]).setPoint(queue.data[3]); render.v2 = Vertex().setColor(queue.data[4]).setPoint(queue.data[5]); renderer.queue(render); return queue.reset(); } //shaded textured triangle if(command == 0x34 || command == 0x35 || command == 0x36 || command == 0x37) { if(queue.write(value) < 9) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.v1 = Vertex().setColor(queue.data[3]).setPoint(queue.data[4]).setTexel(queue.data[5]); render.v2 = Vertex().setColor(queue.data[6]).setPoint(queue.data[7]).setTexel(queue.data[8]); setPalette(queue.data[2]); setPage(queue.data[5]); renderer.queue(render); return queue.reset(); } //shaded quadrilateral if(command == 0x38 || command == 0x39 || command == 0x3a || command == 0x3b) { if(queue.write(value) < 8) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.v1 = Vertex().setColor(queue.data[2]).setPoint(queue.data[3]); render.v2 = Vertex().setColor(queue.data[4]).setPoint(queue.data[5]); render.v3 = Vertex().setColor(queue.data[6]).setPoint(queue.data[7]); renderer.queue(render); return queue.reset(); } //shaded textured quadrilateral if(command == 0x3c || command == 0x3d || command == 0x3e || command == 0x3f) { if(queue.write(value) < 12) return; render.v0 = Vertex().setColor(queue.data[ 0]).setPoint(queue.data[ 1]).setTexel(queue.data[ 2]); render.v1 = Vertex().setColor(queue.data[ 3]).setPoint(queue.data[ 4]).setTexel(queue.data[ 5]); render.v2 = Vertex().setColor(queue.data[ 6]).setPoint(queue.data[ 7]).setTexel(queue.data[ 8]); render.v3 = Vertex().setColor(queue.data[ 9]).setPoint(queue.data[10]).setTexel(queue.data[11]); setPalette(queue.data[2]); setPage(queue.data[5]); renderer.queue(render); return queue.reset(); } //lines: // d1 = transparency // d3 = mode (0 = single, 1 = poly) // d4 = shading (0 = flat, 1 = gouraud) //monochrome line if(command == 0x40 || command == 0x41 || command == 0x42 || command == 0x43 || command == 0x44 || command == 0x45 || command == 0x46 || command == 0x47) { if(queue.write(value) < 3) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.v1 = Vertex().setColor(queue.data[0]).setPoint(queue.data[2]); renderer.queue(render); return queue.reset(); } //monochrome poly-line if(command == 0x48 || command == 0x49 || command == 0x4a || command == 0x4b || command == 0x4c || command == 0x4d || command == 0x4e || command == 0x4f) { if((value & 0xf000f000) != 0x50005000) return (void)queue.write(value); render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); for(u32 n = 2; n < queue.length; n += 1) { render.v1 = Vertex().setColor(queue.data[0]).setPoint(queue.data[n]); renderer.queue(render); render.v0 = render.v1; } return queue.reset(); } //shaded line if(command == 0x50 || command == 0x51 || command == 0x52 || command == 0x53 || command == 0x54 || command == 0x55 || command == 0x56 || command == 0x57) { if(queue.write(value) < 4) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.v1 = Vertex().setColor(queue.data[2]).setPoint(queue.data[3]); renderer.queue(render); return queue.reset(); } //shaded poly-line if(command == 0x58 || command == 0x59 || command == 0x5a || command == 0x5b || command == 0x5c || command == 0x5d || command == 0x5e || command == 0x5f) { if((value & 0xf000f000) != 0x50005000) return (void)queue.write(value); render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); for(u32 n = 2; n + 1 < queue.length; n += 2) { render.v1 = Vertex().setColor(queue.data[n + 0]).setPoint(queue.data[n + 1]); renderer.queue(render); render.v0 = render.v1; } return queue.reset(); } //rectangles: // d0 = texture mode (0 = blend, 1 = raw) // d1 = transparency // d2 = texture mapping // d3-d4 = size (0 = variable, 1 = 1x1, 2 = 8x8, 3 = 16x16) //monochrome rectangle (variable size) if(command == 0x60 || command == 0x61 || command == 0x62 || command == 0x63) { if(queue.write(value) < 3) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.size = Size().setSize(queue.data[2]); renderer.queue(render); return queue.reset(); } //textured rectangle (variable size) if(command == 0x64 || command == 0x65 || command == 0x66 || command == 0x67) { if(queue.write(value) < 4) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.size = Size().setSize(queue.data[3]); setPalette(queue.data[2]); renderer.queue(render); return queue.reset(); } //monochrome rectangle (1x1 size) if(command == 0x68 || command == 0x69 || command == 0x6a || command == 0x6b) { if(queue.write(value) < 2) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.size = Size().setSize(1, 1); renderer.queue(render); return queue.reset(); } //textured rectangle (1x1 size) if(command == 0x6c || command == 0x6d || command == 0x6e || command == 0x6f) { if(queue.write(value) < 3) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.size = Size().setSize(1, 1); setPalette(queue.data[2]); renderer.queue(render); return queue.reset(); } //monochrome rectangle (8x8 size) if(command == 0x70 || command == 0x71 || command == 0x72 || command == 0x73) { if(queue.write(value) < 2) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.size = Size().setSize(8, 8); renderer.queue(render); return queue.reset(); } //textured rectangle (8x8 size) if(command == 0x74 || command == 0x75 || command == 0x76 || command == 0x77) { if(queue.write(value) < 3) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.size = Size().setSize(8, 8); setPalette(queue.data[2]); renderer.queue(render); return queue.reset(); } //monochrome rectangle (16x16 size) if(command == 0x78 || command == 0x79 || command == 0x7a || command == 0x7b) { if(queue.write(value) < 2) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]); render.size = Size().setSize(16, 16); renderer.queue(render); return queue.reset(); } //textured rectangle (16x16 size) if(command == 0x7c || command == 0x7d || command == 0x7e || command == 0x7f) { if(queue.write(value) < 3) return; render.v0 = Vertex().setColor(queue.data[0]).setPoint(queue.data[1]).setTexel(queue.data[2]); render.size = Size().setSize(16, 16); setPalette(queue.data[2]); renderer.queue(render); return queue.reset(); } //copy rectangle (VRAM to VRAM) if(command >= 0x80 && command <= 0x9f) { if(queue.write(value) < 4) return; u16 sourceX = queue.data[1].bit( 0,15); u16 sourceY = queue.data[1].bit(16,31); u16 targetX = queue.data[2].bit( 0,15); u16 targetY = queue.data[2].bit(16,31); u16 width = queue.data[3].bit( 0,15); u16 height = queue.data[3].bit(16,31); for(u32 y : range(height)) { for(u32 x : range(width)) { u16 pixel = vram2D[n9(y + sourceY)][n10(x + sourceX)]; if((pixel >> 15 & io.checkMaskBit) == 0) { vram2D[n9(y + targetY)][n10(x + targetX)] = pixel | io.forceMaskBit << 15; } } } return queue.reset(); } //copy rectangle (CPU to VRAM) if(command >= 0xa0 && command <= 0xbf) { if(queue.write(value) < 3) return; io.copy.x = (queue.data[1].bit( 0,15) & 1023); io.copy.y = (queue.data[1].bit(16,31) & 511); io.copy.width = (queue.data[2].bit( 0,15) - 1 & 1023) + 1; io.copy.height = (queue.data[2].bit(16,31) - 1 & 511) + 1; io.copy.px = 0; io.copy.py = 0; io.mode = Mode::CopyToVRAM; return queue.reset(); } //copy rectangle (VRAM to CPU) if(command >= 0xc0 && command <= 0xdf) { if(queue.write(value) < 3) return; io.copy.x = (queue.data[1].bit( 0,15) & 1023); io.copy.y = (queue.data[1].bit(16,31) & 511); io.copy.width = (queue.data[2].bit( 0,15) - 1 & 1023) + 1; io.copy.height = (queue.data[2].bit(16,31) - 1 & 511) + 1; io.copy.px = 0; io.copy.py = 0; io.mode = Mode::CopyFromVRAM; return queue.reset(); } //no operation if(command == 0xe0) { return; } //draw mode if(command == 0xe1) { io.texturePageBaseX = data.bit( 0, 3); io.texturePageBaseY = data.bit( 4); io.semiTransparency = data.bit( 5, 6); io.textureDepth = data.bit( 7, 8); io.dithering = data.bit( 9); io.drawToDisplay = data.bit(10); io.textureDisable = data.bit(11); io.textureFlipX = data.bit(12); io.textureFlipY = data.bit(13); return; } //texture window if(command == 0xe2) { io.textureWindowMaskX = data.bit( 0, 4); io.textureWindowMaskY = data.bit( 5, 9); io.textureWindowOffsetX = data.bit(10,14); io.textureWindowOffsetY = data.bit(15,19); return; } //set drawing area (top left) if(command == 0xe3) { io.drawingAreaOriginX1 = data.bit( 0, 9); io.drawingAreaOriginY1 = data.bit(10,19); return; } //set drawing area (bottom right) if(command == 0xe4) { io.drawingAreaOriginX2 = data.bit( 0, 9); io.drawingAreaOriginY2 = data.bit(10,19); return; } //set drawing area if(command == 0xe5) { io.drawingAreaOffsetX = data.bit( 0,10); io.drawingAreaOffsetY = data.bit(11,21); return; } //mask bit if(command == 0xe6) { io.forceMaskBit = data.bit(0); io.checkMaskBit = data.bit(1); return; } //no operation if(command >= 0xe7 && command <= 0xef) { return; } //unknown if(command >= 0xf0 && command <= 0xff) { debug(unimplemented, "GP0(", hex(command, 2L), ") = ", hex(value, 6L)); } } ares-126/ares/ps1/gpu/gp1.cpp000066400000000000000000000122621415063341600157470ustar00rootroot00000000000000//GPUSTAT auto GPU::readGP1() -> u32 { n32 data; data.bit( 0, 3) = io.texturePageBaseX; data.bit( 4) = io.texturePageBaseY; data.bit( 5, 6) = io.semiTransparency; data.bit( 7, 8) = io.textureDepth; data.bit( 9) = io.dithering; data.bit(10) = io.drawToDisplay; data.bit(11) = io.forceMaskBit; data.bit(12) = io.checkMaskBit; data.bit(13) = !io.field || !io.interlace; data.bit(14) = io.reverseFlag; data.bit(15) = io.textureDisable; data.bit(16) = io.horizontalResolution.bit(2); data.bit(17,18) = io.horizontalResolution.bit(0,1); data.bit(19) = io.verticalResolution; data.bit(20) = io.videoMode; data.bit(21) = io.colorDepth; data.bit(22) = io.interlace; data.bit(23) = io.displayDisable; data.bit(24) = io.interrupt; data.bit(25) = io.dmaDirection > 0; //todo data.bit(26) = io.pcounter == 0; //ready to receive command data.bit(27) = io.mode != Mode::CopyToVRAM; data.bit(28) = io.pcounter == 0; //ready to receive DMA block data.bit(29,30) = io.dmaDirection; data.bit(31) = !vblank() && (interlace() ? !io.field : io.vcounter & 1); return data; } auto GPU::writeGP1(u32 value) -> void { //thread.fifo.await_empty(); n8 command = value >> 24; n24 data = value >> 0; //print("* GP1(", hex(command, 2L), ") = ", hex(data, 6L), "\n"); //soft reset if(command == 0x00) { //GP0(e1) io.texturePageBaseX = 0; io.texturePageBaseY = 0; io.semiTransparency = 0; io.textureDepth = 0; io.dithering = 0; io.drawToDisplay = 0; io.textureDisable = 0; io.textureFlipX = 0; io.textureFlipY = 0; //GP0(e2) io.textureWindowMaskX = 0; io.textureWindowMaskY = 0; io.textureWindowOffsetX = 0; io.textureWindowOffsetY = 0; //GP0(e3) io.drawingAreaOriginX1 = 0; io.drawingAreaOriginY1 = 0; //GP0(e4) io.drawingAreaOriginX2 = 0; io.drawingAreaOriginY2 = 0; //GP0(e5) io.drawingAreaOffsetX = 0; io.drawingAreaOffsetY = 0; //GP0(e6) io.forceMaskBit = 0; io.checkMaskBit = 0; //GP1(01) queue.gp0.reset(); //GP1(02) io.interrupt = 0; interrupt.lower(Interrupt::GPU); //GP1(03) io.displayDisable = 1; //GP1(04) io.dmaDirection = 0; //GP1(05) io.displayStartX = 0; io.displayStartY = 0; //GP1(06) io.displayRangeX1 = 512; io.displayRangeX2 = 512 + 256 * 10; //GP1(07) io.displayRangeY1 = 16; io.displayRangeY2 = 16 + 240; //GP1(08) io.horizontalResolution = 1; io.verticalResolution = 0; io.videoMode = 0; io.colorDepth = 0; io.interlace = 0; io.reverseFlag = 0; return; } //reset command buffer if(command == 0x01) { queue.gp0.reset(); return; } //acknowledge interrupt if(command == 0x02) { io.interrupt = 0; interrupt.lower(Interrupt::GPU); return; } //display disable if(command == 0x03) { io.displayDisable = data.bit(0); return; } //dma direction if(command == 0x04) { io.dmaDirection = data.bit(0,1); return; } //start of display area if(command == 0x05) { io.displayStartX = data.bit( 0, 9) & ~1; //16-bit align io.displayStartY = data.bit(10,18); return; } //horizontal display range if(command == 0x06) { io.displayRangeX1 = data.bit( 0,11); io.displayRangeX2 = data.bit(12,23); return; } //vertical display range if(command == 0x07) { io.displayRangeY1 = data.bit( 0, 9); io.displayRangeY2 = data.bit(10,19); return; } //display mode if(command == 0x08) { io.horizontalResolution.bit(0,1) = data.bit(0,1); io.verticalResolution = data.bit(2); io.videoMode = data.bit(3); io.colorDepth = data.bit(4); io.interlace = data.bit(5); io.horizontalResolution.bit(2) = data.bit(6); io.reverseFlag = data.bit(7); return; } //get GPU information if(command >= 0x10 && command <= 0x1f) { io.mode = Mode::Status; data &= 0xf; //GP1(e2) if(data == 0x2) { io.status.bit( 0, 4) = io.textureWindowMaskX; io.status.bit( 5, 9) = io.textureWindowMaskY; io.status.bit(10,14) = io.textureWindowOffsetX; io.status.bit(15,19) = io.textureWindowOffsetY; io.status.bit(20,23) = 0; return; } //GP1(e3) if(data == 0x3) { io.status.bit( 0, 9) = io.drawingAreaOriginX1; io.status.bit(10,19) = io.drawingAreaOriginY1; io.status.bit(20,23) = 0; return; } //GP1(e4) if(data == 0x4) { io.status.bit( 0, 9) = io.drawingAreaOriginX2; io.status.bit(10,19) = io.drawingAreaOriginY2; io.status.bit(20,23) = 0; return; } //GP1(e5) if(data == 0x5) { io.status.bit(0, 10) = io.drawingAreaOffsetX; io.status.bit(11,21) = io.drawingAreaOffsetY; io.status.bit(22,23) = 0; return; } //GP1(e7): GPU type if(data == 0x7) { io.status.bit(0,23) = 2; return; } //GP1(e8): unknown if(data == 0x8) { io.status.bit(0,23) = 0; return; } return; } debug(unimplemented, "GP1(", hex(command, 2L), ") = ", hex(data, 6L)); } ares-126/ares/ps1/gpu/gpu.cpp000066400000000000000000000072721415063341600160600ustar00rootroot00000000000000#include namespace ares::PlayStation { //cpu.clock = 44,100 * 768 = 33,868,000hz //gpu.clock = cpu.clock * 11 / 7 = 53,222,400hz //ntsc.clocks_per_scanline = ~3,413 // pal.clocks_per_scanline = ~3,406 //ntsc.scanlines_per_frame = 263 // pal.scanlines_per_frame = 314 GPU gpu; GPU::Color GPU::Color::table[65536]; #include "io.cpp" #include "gp0.cpp" #include "gp1.cpp" #include "renderer.cpp" #include "blitter.cpp" #include "debugger.cpp" #include "serialization.cpp" auto GPU::load(Node::Object parent) -> void { node = parent->append("GPU"); screen = node->append("Screen", 640, 512); screen->setRefresh({&GPU::Blitter::refresh, &blitter}); screen->colors((1 << 24) + (1 << 15), [&](n32 color) -> n64 { if(color < (1 << 24)) { u64 a = 65535; u64 r = image::normalize(color >> 0 & 255, 8, 16); u64 g = image::normalize(color >> 8 & 255, 8, 16); u64 b = image::normalize(color >> 16 & 255, 8, 16); return a << 48 | r << 32 | g << 16 | b << 0; } else { u64 a = 65535; u64 r = image::normalize(color >> 0 & 31, 5, 16); u64 g = image::normalize(color >> 5 & 31, 5, 16); u64 b = image::normalize(color >> 10 & 31, 5, 16); return a << 48 | r << 32 | g << 16 | b << 0; } }); screen->setSize(640, 512); overscan = screen->append("Overscan", true, [&](auto value) { if(value == 0) screen->setSize(640, 480); if(value == 1) screen->setSize(640, 512); }); overscan->setDynamic(true); vram.allocate(1_MiB); for(u32 y : range(512)) { vram2D[y] = (u16*)&vram.data[y * 2048]; } debugger.load(node); generateTables(); } auto GPU::unload() -> void { renderer.kill(); debugger = {}; vram.reset(); overscan.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto GPU::main() -> void { step(12); if(io.hcounter == 1800) { //hsync signal is sent even during vertical blanking period timer.hsync(1); } if(io.hcounter == 2172) { io.hcounter = 0; timer.hsync(0); if(++io.vcounter == vtotal()) { io.vcounter = 0; io.field = !io.field; frame(); } if(io.vcounter == vstart()) { timer.vsync(0); interrupt.lower(Interrupt::Vblank); } if(io.vcounter == vend()) { timer.vsync(1); io.interrupt = 1; interrupt.raise(Interrupt::Vblank); blitter.queue(); } } } auto GPU::frame() -> void { switch(io.horizontalResolution) { case 0: display.dotclock = 10; display.width = 256; break; case 1: display.dotclock = 8; display.width = 320; break; case 2: display.dotclock = 5; display.width = 512; break; case 3: display.dotclock = 4; display.width = 640; break; case 4: case 5: case 6: case 7: display.dotclock = 7; display.width = 368; break; } if(io.verticalResolution && io.interlace) { display.height = io.videoMode ? 512 : 480; display.interlace = 1; } else { display.height = io.videoMode ? 256 : 240; display.interlace = 0; } } auto GPU::step(u32 clocks) -> void { Thread::clock += clocks; io.hcounter += clocks; io.pcounter -= clocks; if(io.pcounter < 0) io.pcounter = 0; } auto GPU::power(bool reset) -> void { Thread::reset(); Memory::Interface::setWaitStates(2, 2, 3); screen->power(); refreshed = false; vram.fill(); display.dotclock = 0; display.width = 0; display.height = 0; display.interlace = 0; display.previous.x = 0; display.previous.y = 0; display.previous.width = 0; display.previous.height = 0; io = {}; queue.gp0 = {}; queue.gp1 = {}; frame(); renderer.power(); blitter.power(); } } ares-126/ares/ps1/gpu/gpu.hpp000066400000000000000000000204631415063341600160620ustar00rootroot00000000000000//Graphics Processing Unit struct GPU : Thread, Memory::Interface { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean overscan; Memory::Writable vram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; } memory; struct Graphics { Node::Debugger::Graphics vram15bpp; Node::Debugger::Graphics vram24bpp; } graphics; } debugger; auto vtotal() const -> u32 { return io.videoMode ? 314 : 263; } auto vstart() const -> u32 { return io.displayRangeY1; } auto vend() const -> u32 { return io.displayRangeY2; } auto vblank() const -> bool { return io.vcounter < vstart() || io.vcounter >= vend(); } auto interlace() const -> bool { return io.verticalResolution && io.interlace; } //gpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto frame() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //io.cpp auto readDMA() -> u32; auto writeDMA(u32 data) -> void; auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //gp0.cpp auto readGP0() -> u32; auto writeGP0(u32 data, bool isThread = false) -> void; //gp1.cpp auto readGP1() -> u32; auto writeGP1(u32 data) -> void; struct RenderThread { GPU& self; RenderThread(GPU& self) : self(self) {} //thread.cpp auto main(uintptr_t) -> void; auto power() -> void; auto exit() -> void; nall::thread handle; nall::queue_spsc fifo; static constexpr u32 Terminate = 0xff0a4350; } thread{*this}; //serialization.cpp auto serialize(serializer&) -> void; enum class Mode : u32 { Normal, Status, CopyToVRAM, CopyFromVRAM, }; struct Display { u32 dotclock; u32 width; u32 height; bool interlace; struct Previous { s32 x; s32 y; u32 width; u32 height; } previous; } display; struct IO { Mode mode = Mode::Normal; n1 field; //even or odd scanline n16 hcounter; //horizontal counter n16 vcounter; //vertical counter i32 pcounter; //pixel drawing counter //GP0(a0): copy rectangle (CPU to VRAM) //GP0(c0): copy rectangle (VRAM to CPU) struct Copy { n16 x; n16 y; n16 width; n16 height; //internal: n16 px; n16 py; } copy; //GP0(e1): draw mode n4 texturePageBaseX; n1 texturePageBaseY; n2 semiTransparency; n2 textureDepth; n1 dithering; n1 drawToDisplay; n1 textureDisable; n1 textureFlipX; n1 textureFlipY; //GP0(e2): texture window n5 textureWindowMaskX; n5 textureWindowMaskY; n5 textureWindowOffsetX; n5 textureWindowOffsetY; //GP0(e3): set drawing area (top left) n10 drawingAreaOriginX1; n10 drawingAreaOriginY1; //GP0(e4): set drawing area (bottom right) n10 drawingAreaOriginX2; n10 drawingAreaOriginY2; //GP0(e5): set drawing offset i11 drawingAreaOffsetX; i11 drawingAreaOffsetY; //GP0(e6): mask bit n1 forceMaskBit; n1 checkMaskBit; //GP1(02): acknowledge interrupt n1 interrupt; //GP1(03): display disable n1 displayDisable = 1; //GP1(04): DMA direction n2 dmaDirection; //GP1(05): start of display area n10 displayStartX; n9 displayStartY; //GP1(06): horizontal display range n12 displayRangeX1 = 512; n12 displayRangeX2 = 512 + 256 * 10; //GP1(07): vertical display range n12 displayRangeY1 = 16; n12 displayRangeY2 = 16 + 240; //GP1(08): display mode n3 horizontalResolution = 1; n1 verticalResolution; n1 videoMode; //0 = NTSC, 1 = PAL n1 colorDepth; //0 = 15bpp, 1 = 24bpp n1 interlace; n1 reverseFlag; //GP1(10): get GPU information n24 status; //internal: n6 texturePaletteX; n9 texturePaletteY; } io; struct Queue { auto reset() -> void { length = counterX = counterY = 0; } auto empty() const -> bool { return length == 0; } auto write(n32 value) -> n8 { data[length++] = value; return length; } n8 command; n8 length; n32 data[256]; n10 counterX; n9 counterY; }; struct { Queue gp0; Queue gp1; } queue; struct Delta { f32 x, y; }; struct Point { s32 x, y; }; struct Texel { s32 u, v; }; struct Color { static Color table[65536]; static auto from16(u16 data) -> Color { return table[data]; } static auto to16(u32 data) -> u16 { return (data >> 3 & 0x1f) << 0 | (data >> 11 & 0x1f) << 5 | (data >> 19 & 0x1f) << 10; } auto to16() const -> u16 { return (r >> 3) << 0 | (g >> 3) << 5 | (b >> 3) << 10; } u8 r, g, b; }; struct Vertex : Point, Texel, Color { auto setPoint(u32 data) -> Vertex& { x = i11(data >> 0); y = i11(data >> 16); return *this; } auto setPoint(s16 px, s16 py) -> Vertex& { x = px; y = py; return *this; } auto setTexel(u32 data) -> Vertex& { u = u8(data >> 0); v = u8(data >> 8); return *this; } auto setTexel(s16 tu, s16 tv) -> Vertex& { u = tu; v = tv; return *this; } auto setColor(u32 data) -> Vertex& { r = u8(data >> 0); g = u8(data >> 8); b = u8(data >> 16); return *this; } auto setColor(u8 cr, u8 cg, u8 cb) -> Vertex& { r = cr; g = cg; b = cb; return *this; } }; struct Size { auto setSize(u32 data) -> Size& { w = u16(data >> 0); h = u16(data >> 16); return *this; } auto setSize(u16 sw, u16 sh) -> Size& { w = sw; h = sh; return *this; } u16 w, h; }; //rendering flags enum : u32 { None = 0, Raw = 1 << 0, Alpha = 1 << 1, Texture = 1 << 2, Shade = 1 << 3, Dither = 1 << 4, Fill = 1 << 5, Line = 1 << 6, Rectangle = 1 << 7, }; //renderer.cpp auto generateTables() -> void; struct Render { auto weight(Point a, Point b, Point c) const -> s32; auto origin(Point a, Point b, Point c, s32 d[3], f32 area, s32 bias[3]) const -> f32; auto delta(Point a, Point b, Point c, s32 d[3], f32 area) const -> Delta; auto texel(Point p) const -> u16; auto dither(Point p, Color c) const -> Color; auto modulate(Color above, Color below) const -> Color; auto alpha(Color above, Color below) const -> Color; template auto pixel(Point, Color, Point = {}) -> void; template auto line() -> void; template auto triangle() -> void; template auto quadrilateral() -> void; template auto rectangle() -> void; template auto fill() -> void; template auto cost(u32 pixels) const -> u32; auto execute() -> void; u32 command; u32 flags; bool dithering; u32 semiTransparency; bool checkMaskBit; bool forceMaskBit; s32 drawingAreaOriginX1; s32 drawingAreaOriginY1; s32 drawingAreaOriginX2; s32 drawingAreaOriginY2; u32 drawingAreaOffsetX; u32 drawingAreaOffsetY; u32 textureDepth; u32 texturePageBaseX; u32 texturePageBaseY; u32 texturePaletteX; u32 texturePaletteY; u32 texelMaskX; u32 texelMaskY; u32 texelOffsetX; u32 texelOffsetY; Vertex v0; Vertex v1; Vertex v2; Vertex v3; Size size; }; //unserialized: //renderer.cpp struct Renderer { GPU& self; Renderer(GPU& self) : self(self) {} auto queue(Render& render) -> void; auto main(uintptr_t) -> void; auto kill() -> void; auto power() -> void; nall::thread handle; queue_spsc fifo; } renderer{*this}; //blitter.cpp struct Blitter { GPU& self; Blitter(GPU& self) : self(self) {} auto queue() -> void; auto refresh() -> void; auto power() -> void; bool blank; u32 depth; u32 width; u32 height; s32 sx; s32 sy; s32 tx; s32 ty; s32 tw; s32 th; } blitter{*this}; u16* vram2D[512]; u8 ditherTable[4][4][256]; bool refreshed; }; extern GPU gpu; ares-126/ares/ps1/gpu/io.cpp000066400000000000000000000021571415063341600156710ustar00rootroot00000000000000auto GPU::readDMA() -> u32 { return readWord(0x1f80'1810); } auto GPU::writeDMA(u32 data) -> void { return writeWord(0x1f80'1810, data); } auto GPU::readByte(u32 address) -> u32 { debug(unverified, "GPU::readByte(", hex(address, 8L), ")"); return readWord(address & ~3) >> 8 * (address & 3); } auto GPU::readHalf(u32 address) -> u32 { debug(unverified, "GPU::readHalf(", hex(address, 8L), ")"); return readWord(address & ~3) >> 8 * (address & 3); } auto GPU::readWord(u32 address) -> u32 { n32 data; if(address == 0x1f80'1810) data = readGP0(); if(address == 0x1f80'1814) data = readGP1(); return data; } auto GPU::writeByte(u32 address, u32 data) -> void { debug(unverified, "GPU::writeByte(", hex(address, 8L), ")"); return writeWord(address & ~3, data << 8 * (address & 3)); } auto GPU::writeHalf(u32 address, u32 data) -> void { debug(unverified, "GPU::writeHalf(", hex(address, 8L), ")"); return writeWord(address & ~3, data << 8 * (address & 3)); } auto GPU::writeWord(u32 address, u32 data) -> void { if(address == 0x1f80'1810) writeGP0(data); if(address == 0x1f80'1814) writeGP1(data); } ares-126/ares/ps1/gpu/renderer.cpp000066400000000000000000000340351415063341600170700ustar00rootroot00000000000000auto GPU::generateTables() -> void { static constexpr s8 table[4][4] = { {-4, +0, -3, +1}, {+2, -2, +3, -1}, {-3, +1, -4, +0}, {+3, -1, +2, -2}, }; for(u32 y : range(4)) { for(u32 x : range(4)) { for(s32 c : range(256)) { ditherTable[y][x][c] = uclamp<8>(c + table[y][x]); } } } for(u32 a : range(2)) { for(u32 r : range(32)) { for(u32 g : range(32)) { for(u32 b : range(32)) { Color color; color.r = r << 3 | r >> 2; color.g = g << 3 | g >> 2; color.b = b << 3 | b >> 2; //color.a = a ? 0xff : 0x00; Color::table[a << 15 | b << 10 | g << 5 | r << 0] = color; } } } } } //compute barycentric weight (area) between three vertices auto GPU::Render::weight(Point a, Point b, Point c) const -> s32 { return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y); } auto GPU::Render::origin(Point a, Point b, Point c, s32 d[3], f32 area, s32 bias[3]) const -> f32 { f32 x = (b.x * c.y - c.x * b.y) * d[0] - bias[0]; f32 y = (c.x * a.y - a.x * c.y) * d[1] - bias[1]; f32 z = (a.x * b.y - b.x * a.y) * d[2] - bias[2]; return (x + y + z) / area; } auto GPU::Render::delta(Point a, Point b, Point c, s32 d[3], f32 area) const -> Delta { f32 x = (b.y - c.y) * d[0] + (c.y - a.y) * d[1] + (a.y - b.y) * d[2]; f32 y = (c.x - b.x) * d[0] + (a.x - c.x) * d[1] + (b.x - a.x) * d[2]; return {x / area, y / area}; } auto GPU::Render::texel(Point p) const -> u16 { u16 px = texturePaletteX; u16 py = texturePaletteY; s32 bx = texturePageBaseX; s32 by = texturePageBaseY; s32 tx = u8(p.x) & texelMaskX | texelOffsetX; s32 ty = u8(p.y) & texelMaskY | texelOffsetY; if(textureDepth == 0) { //4bpp u16 index = gpu.vram2D[ty + by & 511][tx / 4 + bx & 1023]; u16 entry = index >> (tx & 3) * 4 & 15; return gpu.vram2D[py][px + entry & 1023]; } if(textureDepth == 1) { //8bpp u16 index = gpu.vram2D[ty + by & 511][tx / 2 + bx & 1023]; u16 entry = index >> (tx & 1) * 8 & 255; return gpu.vram2D[py][px + entry & 1023]; } if(textureDepth == 2) { //16bpp return gpu.vram2D[ty + by & 511][tx + bx & 1023]; } return 0; } auto GPU::Render::dither(Point p, Color c) const -> Color { if(dithering) { auto dither = gpu.ditherTable[p.y & 3][p.x & 3]; c.r = dither[c.r]; c.g = dither[c.g]; c.b = dither[c.b]; } return c; } auto GPU::Render::modulate(Color above, Color below) const -> Color { above.r = min(255, above.r * below.r >> 7); above.g = min(255, above.g * below.g >> 7); above.b = min(255, above.b * below.b >> 7); return above; } auto GPU::Render::alpha(Color above, Color below) const -> Color { switch(semiTransparency) { case 0: above.r = below.r + above.r >> 1; above.g = below.g + above.g >> 1; above.b = below.b + above.b >> 1; break; case 1: above.r = min(255, below.r + above.r); above.g = min(255, below.g + above.g); above.b = min(255, below.b + above.b); break; case 2: above.r = max(0, (s32)below.r - above.r); above.g = max(0, (s32)below.g - above.g); above.b = max(0, (s32)below.b - above.b); break; case 3: above.r = min(255, below.r + (above.r >> 2)); above.g = min(255, below.g + (above.g >> 2)); above.b = min(255, below.b + (above.b >> 2)); break; } return above; } template auto GPU::Render::pixel(Point point, Color rgb, Point uv) -> void { Color above; bool transparent; bool maskBit = forceMaskBit; if constexpr(Flags & Texture) { u16 pixel = texel(uv); if(!pixel) return; transparent = pixel >> 15; maskBit |= transparent; if constexpr(Flags & Raw) { above = Color::from16(pixel); } else if constexpr(true) { above = modulate(Color::from16(pixel), rgb); } } else if constexpr(true) { transparent = true; above = rgb; } if constexpr(Flags & Dither) { above = dither(point, above); } u16 input = gpu.vram2D[point.y][point.x]; Color below = Color::from16(input); if constexpr(Flags & Alpha) { if(transparent) above = alpha(above, below); } if(input >> 15 & checkMaskBit) return; gpu.vram2D[point.y][point.x] = above.to16() | maskBit << 15; } template auto GPU::Render::line() -> void { v0.x += drawingAreaOffsetX, v0.y += drawingAreaOffsetY; v1.x += drawingAreaOffsetX, v1.y += drawingAreaOffsetY; v0.x = std::clamp(v0.x, drawingAreaOriginX1, drawingAreaOriginX2); v0.y = std::clamp(v0.y, drawingAreaOriginY1, drawingAreaOriginY2); v1.x = std::clamp(v1.x, drawingAreaOriginX1, drawingAreaOriginX2); v1.y = std::clamp(v1.y, drawingAreaOriginY1, drawingAreaOriginY2); Point d = {v1.x - v0.x, v1.y - v0.y}; s32 steps = abs(d.x) > abs(d.y) ? abs(d.x) : abs(d.y); if(steps == 0) { if(v0.x == v1.x && v0.y == v1.y) { return pixel(v0, v0); } else { debug(unimplemented, "GPU::renderLine(steps=0)"); return; } } Point s = {(d.x << 16) / steps, (d.y << 16) / steps}; Point p = {v0.x << 16, v0.y << 16}; u32 pixels = 0; for(u16 step : range(steps)) { pixel({p.x >> 16, p.y >> 16}, v0); p.x += s.x, p.y += s.y; pixels++; } //io.pcounter += cost(pixels); if constexpr(Flags & Shade) { debug(unimplemented, "ShadedLine"); } } template auto GPU::Render::triangle() -> void { static constexpr u32 Dithering = (( (Flags & Shade) || ((Flags & Texture) && (Flags & Alpha)) ) && !(Flags & Rectangle)) ? Dither : 0; v0.x += drawingAreaOffsetX, v0.y += drawingAreaOffsetY; v1.x += drawingAreaOffsetX, v1.y += drawingAreaOffsetY; v2.x += drawingAreaOffsetX, v2.y += drawingAreaOffsetY; Point vmin{min(v0.x, v1.x, v2.x), min(v0.y, v1.y, v2.y)}; Point vmax{max(v0.x, v1.x, v2.x), max(v0.y, v1.y, v2.y)}; //reject triangles larger than the VRAM size if(vmax.x - vmin.x > 1024 || vmax.y - vmin.y > 512) return; //clip rendering to drawing area vmin.x = std::clamp(vmin.x, drawingAreaOriginX1, drawingAreaOriginX2); vmin.y = std::clamp(vmin.y, drawingAreaOriginY1, drawingAreaOriginY2); vmax.x = std::clamp(vmax.x, drawingAreaOriginX1, drawingAreaOriginX2); vmax.y = std::clamp(vmax.y, drawingAreaOriginY1, drawingAreaOriginY2); s32 area = weight(v0, v1, v2); //<0 = counter-clockwise; 0 = colinear, >0 = clockwise if(area == 0) return; //do not render colinear triangles if(area < 0) swap(v1, v2), area = -area; //make clockwise Point d0{v1.y - v2.y, v2.x - v1.x}; Point d1{v2.y - v0.y, v0.x - v2.x}; Point d2{v0.y - v1.y, v1.x - v0.x}; s32 bias[3]; //avoid drawing overlapping top-left edges of triangles bias[0] = -(d0.x < 0 || d0.x == 0 && d0.y < 0); bias[1] = -(d1.x < 0 || d1.x == 0 && d1.y < 0); bias[2] = -(d2.x < 0 || d2.x == 0 && d2.y < 0); Point p0, p1, p2; Delta dr, dg, db, du, dv; Delta pr, pg, pb, pu, pv; p0.y = weight(v1, v2, vmin); p1.y = weight(v2, v0, vmin); p2.y = weight(v0, v1, vmin); if constexpr(Flags & Shade) { s32 r[3] = {v0.r, v1.r, v2.r}; s32 g[3] = {v0.g, v1.g, v2.g}; s32 b[3] = {v0.b, v1.b, v2.b}; dr = delta(v0, v1, v2, r, area); dg = delta(v0, v1, v2, g, area); db = delta(v0, v1, v2, b, area); pr.y = origin(v0, v1, v2, r, area, bias) + dr.x * vmin.x + dr.y * vmin.y; pg.y = origin(v0, v1, v2, g, area, bias) + dg.x * vmin.x + dg.y * vmin.y; pb.y = origin(v0, v1, v2, b, area, bias) + db.x * vmin.x + db.y * vmin.y; } else if constexpr(true) { pr.x = v0.r; pg.x = v0.g; pb.x = v0.b; } if constexpr(Flags & Texture) { s32 u[3] = {v0.u, v1.u, v2.u}; s32 v[3] = {v0.v, v1.v, v2.v}; du = delta(v0, v1, v2, u, area); dv = delta(v0, v1, v2, v, area); pu.y = origin(v0, v1, v2, u, area, bias) + du.x * vmin.x + du.y * vmin.y; pv.y = origin(v0, v1, v2, v, area, bias) + dv.x * vmin.x + dv.y * vmin.y; } else if constexpr(true) { pu.x = 0; pv.x = 0; } u32 pixels = 0; Point vp{vmin}; for(vp.y = vmin.y; vp.y <= vmax.y; vp.y++) { p0.x = p0.y, p1.x = p1.y, p2.x = p2.y; if constexpr(Flags & Shade) pr.x = pr.y, pg.x = pg.y, pb.x = pb.y; if constexpr(Flags & Texture) pu.x = pu.y, pv.x = pv.y; for(vp.x = vmin.x; vp.x <= vmax.x; vp.x++) { if((p0.x + bias[0] | p1.x + bias[1] | p2.x + bias[2]) >= 0) { pixel(vp, {pr.x, pg.x, pb.x}, {pu.x, pv.x}); pixels++; } p0.x += d0.x, p1.x += d1.x, p2.x += d2.x; if constexpr(Flags & Shade) pr.x += dr.x, pg.x += dg.x, pb.x += db.x; if constexpr(Flags & Texture) pu.x += du.x, pv.x += dv.x; } p0.y += d0.y, p1.y += d1.y, p2.y += d2.y; if constexpr(Flags & Shade) pr.y += dr.y, pg.y += dg.y, pb.y += db.y; if constexpr(Flags & Texture) pu.y += du.y, pv.y += dv.y; } //io.pcounter += cost(pixels); } template auto GPU::Render::quadrilateral() -> void { auto c1 = v1, c2 = v2, c3 = v3; triangle(); v0 = c1, v1 = c2, v2 = c3; triangle(); } template auto GPU::Render::rectangle() -> void { v1 = Vertex(v0).setPoint(v0.x + size.w, v0.y).setTexel(v0.u + size.w, v0.v); v2 = Vertex(v0).setPoint(v0.x, v0.y + size.h).setTexel(v0.u, v0.v + size.h); v3 = Vertex(v0).setPoint(v0.x + size.w, v0.y + size.h).setTexel(v0.u + size.w, v0.v + size.h); quadrilateral(); } template auto GPU::Render::fill() -> void { auto color = v0.to16(); for(u32 y : range(size.h)) { for(u32 x : range(size.w)) { gpu.vram2D[y + v0.y & 511][x + v0.x & 1023] = color; } } //io.pcounter += cost(size.width * size.height); } template auto GPU::Render::cost(u32 pixels) const -> u32 { //for now, do not emulate GPU overhead timing ... return 1; //below numbers are based off timings from ps1-tests/gpu/bandwidth. //the numbers are off by a factor of three in other games, however. if(Flags & Fill) { return pixels * 0.081; } else if(Flags & Line) { //todo: need to benchmark line drawing speeds return pixels * 0.500; } else if(Flags & Rectangle) { if(Flags & Texture) { if(Flags & Alpha) { return pixels * 1.497; } else { return pixels * 1.188; } } else { if(Flags & Alpha) { return pixels * 0.797; } else { return pixels * 0.530; } } } else { if(Flags & Texture) { if(Flags & Alpha) { return pixels * 3.463; } else { return pixels * 2.980; } } else { if(Flags & Alpha) { return pixels * 0.812; } else { return pixels * 0.538; } } } } auto GPU::Render::execute() -> void { switch(command) { case 0x02: return fill(); case 0x20: return triangle(); case 0x21: return triangle(); case 0x22: return triangle(); case 0x23: return triangle(); case 0x24: return triangle(); case 0x25: return triangle(); case 0x26: return triangle(); case 0x27: return triangle(); case 0x28: return quadrilateral(); case 0x29: return quadrilateral(); case 0x2a: return quadrilateral(); case 0x2b: return quadrilateral(); case 0x2c: return quadrilateral(); case 0x2d: return quadrilateral(); case 0x2e: return quadrilateral(); case 0x2f: return quadrilateral(); case 0x30: return triangle(); case 0x31: return triangle(); case 0x32: return triangle(); case 0x33: return triangle(); case 0x34: return triangle(); case 0x35: return triangle(); case 0x36: return triangle(); case 0x37: return triangle(); case 0x38: return quadrilateral(); case 0x39: return quadrilateral(); case 0x3a: return quadrilateral(); case 0x3b: return quadrilateral(); case 0x3c: return quadrilateral(); case 0x3d: return quadrilateral(); case 0x3e: return quadrilateral(); case 0x3f: return quadrilateral(); case 0x40: case 0x41: case 0x44: case 0x45: return line(); case 0x42: case 0x43: case 0x46: case 0x47: return line(); case 0x48: case 0x49: case 0x4c: case 0x4d: return line(); case 0x4a: case 0x4b: case 0x4e: case 0x4f: return line(); case 0x50: case 0x51: case 0x54: case 0x55: return line(); case 0x52: case 0x53: case 0x56: case 0x57: return line(); case 0x58: case 0x59: case 0x5c: case 0x5d: return line(); case 0x5a: case 0x5b: case 0x5e: case 0x5f: return line(); case 0x60: case 0x68: case 0x70: case 0x78: return rectangle(); case 0x61: case 0x69: case 0x71: case 0x79: return rectangle(); case 0x62: case 0x6a: case 0x72: case 0x7a: return rectangle(); case 0x63: case 0x6b: case 0x73: case 0x7b: return rectangle(); case 0x64: case 0x6c: case 0x74: case 0x7c: return rectangle(); case 0x65: case 0x6d: case 0x75: case 0x7d: return rectangle(); case 0x66: case 0x6e: case 0x76: case 0x7e: return rectangle(); case 0x67: case 0x6f: case 0x77: case 0x7f: return rectangle(); } } auto GPU::Renderer::queue(Render& render) -> void { if constexpr(Accuracy::GPU::Threaded) { fifo.await_write(render); } else if constexpr(true) { render.execute(); } } auto GPU::Renderer::main(uintptr_t) -> void { while(true) { auto render = fifo.await_read(); self.vram.mutex.lock(); render.execute(); self.vram.mutex.unlock(); if(render.command == 0x100) thread::exit(); } } auto GPU::Renderer::kill() -> void { if constexpr(Accuracy::GPU::Threaded) { Render kill; kill.command = 0x100; queue(kill); handle.join(); } } auto GPU::Renderer::power() -> void { if constexpr(Accuracy::GPU::Threaded) { kill(); fifo.flush(); handle = thread::create({&GPU::Renderer::main, &self.renderer}); } } ares-126/ares/ps1/gpu/serialization.cpp000066400000000000000000000032301415063341600201300ustar00rootroot00000000000000auto GPU::serialize(serializer& s) -> void { Thread::serialize(s); s(vram); s(display.dotclock); s(display.width); s(display.height); s(display.interlace); s(display.previous.x); s(display.previous.y); s(display.previous.width); s(display.previous.height); s((u32&)io.mode); s(io.field); s(io.hcounter); s(io.vcounter); s(io.pcounter); s(io.copy.x); s(io.copy.y); s(io.copy.width); s(io.copy.height); s(io.copy.px); s(io.copy.py); s(io.texturePageBaseX); s(io.texturePageBaseY); s(io.semiTransparency); s(io.textureDepth); s(io.dithering); s(io.drawToDisplay); s(io.textureDisable); s(io.textureFlipX); s(io.textureFlipY); s(io.textureWindowMaskX); s(io.textureWindowMaskY); s(io.textureWindowOffsetX); s(io.textureWindowOffsetY); s(io.drawingAreaOriginX1); s(io.drawingAreaOriginY1); s(io.drawingAreaOriginX2); s(io.drawingAreaOriginY2); s(io.drawingAreaOffsetX); s(io.drawingAreaOffsetY); s(io.forceMaskBit); s(io.checkMaskBit); s(io.interrupt); s(io.displayDisable); s(io.dmaDirection); s(io.displayStartX); s(io.displayStartY); s(io.displayRangeX1); s(io.displayRangeY1); s(io.displayRangeX2); s(io.displayRangeY2); s(io.horizontalResolution); s(io.verticalResolution); s(io.videoMode); s(io.colorDepth); s(io.interlace); s(io.reverseFlag); s(io.status); s(io.texturePaletteX); s(io.texturePaletteY); s(queue.gp0.command); s(queue.gp0.length); s(queue.gp0.data); s(queue.gp0.counterX); s(queue.gp0.counterY); s(queue.gp1.command); s(queue.gp1.length); s(queue.gp1.data); s(queue.gp1.counterX); s(queue.gp1.counterY); renderer.power(); } ares-126/ares/ps1/interrupt/000077500000000000000000000000001415063341600160125ustar00rootroot00000000000000ares-126/ares/ps1/interrupt/interrupt.cpp000066400000000000000000000063771415063341600205670ustar00rootroot00000000000000#include namespace ares::PlayStation { Interrupt interrupt; #include "io.cpp" #include "serialization.cpp" auto Interrupt::load(Node::Object parent) -> void { node = parent->append("Interrupt"); } auto Interrupt::unload() -> void { node.reset(); } auto Interrupt::poll() -> void { bool interruptsWerePending = cpu.exception.interruptsPending(); bool line = 0; line |= vblank.poll(); line |= gpu.poll(); line |= cdrom.poll(); line |= dma.poll(); line |= timer0.poll(); line |= timer1.poll(); line |= timer2.poll(); line |= peripheral.poll(); line |= sio.poll(); line |= spu.poll(); line |= pio.poll(); cpu.scc.cause.interruptPending.bit(2) = line; if(!interruptsWerePending && cpu.exception.interruptsPending()) cpu.delay.interrupt = 2; } auto Interrupt::level(u32 source) -> bool { if(source == 0) return vblank.level(); if(source == 1) return gpu.level(); if(source == 2) return cdrom.level(); if(source == 3) return dma.level(); if(source == 4) return timer0.level(); if(source == 5) return timer1.level(); if(source == 6) return timer2.level(); if(source == 7) return peripheral.level(); if(source == 8) return sio.level(); if(source == 9) return spu.level(); if(source == 10) return pio.level(); return 0; } auto Interrupt::raise(u32 source) -> void { if(source == 0 && !vblank.line) { vblank.raise(); poll(); } if(source == 1 && !gpu.line) { gpu.raise(); poll(); } if(source == 2 && !cdrom.line) { cdrom.raise(); poll(); } if(source == 3 && !dma.line) { dma.raise(); poll(); } if(source == 4 && !timer0.line) { timer0.raise(); poll(); } if(source == 5 && !timer1.line) { timer1.raise(); poll(); } if(source == 6 && !timer2.line) { timer2.raise(); poll(); } if(source == 7 && !peripheral.line) { peripheral.raise(); poll(); } if(source == 8 && !sio.line) { sio.raise(); poll(); } if(source == 9 && !spu.line) { spu.raise(); poll(); } if(source == 10 && !pio.line) { pio.raise(); poll(); } } auto Interrupt::lower(u32 source) -> void { if(source == 0 && vblank.line) return vblank.lower(), poll(); if(source == 1 && gpu.line) return gpu.lower(), poll(); if(source == 2 && cdrom.line) return cdrom.lower(), poll(); if(source == 3 && dma.line) return dma.lower(), poll(); if(source == 4 && timer0.line) return timer0.lower(), poll(); if(source == 5 && timer1.line) return timer1.lower(), poll(); if(source == 6 && timer2.line) return timer2.lower(), poll(); if(source == 7 && peripheral.line) return peripheral.lower(), poll(); if(source == 8 && sio.line) return sio.lower(), poll(); if(source == 9 && spu.line) return spu.lower(), poll(); if(source == 10 && pio.line) return pio.lower(), poll(); } auto Interrupt::pulse(u32 source) -> void { raise(source); lower(source); } auto Interrupt::drive(u32 source, bool line) -> void { if(line == 0) lower(source); if(line == 1) raise(source); } auto Interrupt::power(bool reset) -> void { Memory::Interface::setWaitStates(2, 3, 2); vblank = {}; gpu = {}; cdrom = {}; dma = {}; timer0 = {}; timer1 = {}; timer2 = {}; peripheral = {}; sio = {}; spu = {}; pio = {}; } } ares-126/ares/ps1/interrupt/interrupt.hpp000066400000000000000000000023641415063341600205640ustar00rootroot00000000000000struct Interrupt : Memory::Interface { Node::Object node; //interrupt.cpp auto load(Node::Object) -> void; auto unload() -> void; auto poll() -> void; auto level(u32 source) -> bool; auto raise(u32 source) -> void; auto lower(u32 source) -> void; auto pulse(u32 source) -> void; auto drive(u32 source, bool line) -> void; auto power(bool reset) -> void; //io.cpp auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; enum : u32 { Vblank, GPU, CDROM, DMA, Timer0, Timer1, Timer2, Peripheral, SIO, SPU, PIO }; struct Source { auto poll() const { return stat & mask; } auto level() const { return stat; } auto raise() { line = stat = 1; } auto lower() { line = 0; } auto acknowledge() { stat = 0; } n1 line; n1 stat; n1 mask; }; Source vblank; Source gpu; Source cdrom; Source dma; Source timer0; Source timer1; Source timer2; Source peripheral; Source sio; Source spu; Source pio; }; extern Interrupt interrupt; ares-126/ares/ps1/interrupt/io.cpp000066400000000000000000000045061415063341600171320ustar00rootroot00000000000000auto Interrupt::readByte(u32 address) -> u32 { return readWord(address & ~3) >> 8 * (address & 3); } auto Interrupt::readHalf(u32 address) -> u32 { return readWord(address & ~3) >> 8 * (address & 3); } auto Interrupt::readWord(u32 address) -> u32 { n32 data; //I_STAT if(address == 0x1f80'1070) { data.bit( 0) = vblank.stat; data.bit( 1) = gpu.stat; data.bit( 2) = cdrom.stat; data.bit( 3) = dma.stat; data.bit( 4) = timer0.stat; data.bit( 5) = timer1.stat; data.bit( 6) = timer2.stat; data.bit( 7) = peripheral.stat; data.bit( 8) = sio.stat; data.bit( 9) = spu.stat; data.bit(10) = pio.stat; } //I_MASK if(address == 0x1f80'1074) { data.bit( 0) = vblank.mask; data.bit( 1) = gpu.mask; data.bit( 2) = cdrom.mask; data.bit( 3) = dma.mask; data.bit( 4) = timer0.mask; data.bit( 5) = timer1.mask; data.bit( 6) = timer2.mask; data.bit( 7) = peripheral.mask; data.bit( 8) = sio.mask; data.bit( 9) = spu.mask; data.bit(10) = pio.mask; } return data; } auto Interrupt::writeByte(u32 address, u32 data) -> void { return writeWord(address & ~3, data << 8 * (address & 3)); } auto Interrupt::writeHalf(u32 address, u32 data) -> void { return writeWord(address & ~3, data << 8 * (address & 3)); } auto Interrupt::writeWord(u32 address, u32 value) -> void { n32 data = value; //I_STAT if(address == 0x1f80'1070) { if(!data.bit( 0)) vblank.acknowledge(); if(!data.bit( 1)) gpu.acknowledge(); if(!data.bit( 2)) cdrom.acknowledge(); if(!data.bit( 3)) dma.acknowledge(); if(!data.bit( 4)) timer0.acknowledge(); if(!data.bit( 5)) timer1.acknowledge(); if(!data.bit( 6)) timer2.acknowledge(); if(!data.bit( 7)) peripheral.acknowledge(); if(!data.bit( 8)) sio.acknowledge(); if(!data.bit( 9)) spu.acknowledge(); if(!data.bit(10)) pio.acknowledge(); poll(); } //I_MASK if(address == 0x1f80'1074) { vblank.mask = data.bit( 0); gpu.mask = data.bit( 1); cdrom.mask = data.bit( 2); dma.mask = data.bit( 3); timer0.mask = data.bit( 4); timer1.mask = data.bit( 5); timer2.mask = data.bit( 6); peripheral.mask = data.bit( 7); sio.mask = data.bit( 8); spu.mask = data.bit( 9); pio.mask = data.bit(10); poll(); } } ares-126/ares/ps1/interrupt/serialization.cpp000066400000000000000000000011431415063341600213720ustar00rootroot00000000000000auto Interrupt::serialize(serializer& s) -> void { s(vblank.line); s(vblank.stat); s(vblank.mask); s(gpu.line); s(gpu.stat); s(gpu.mask); s(cdrom.line); s(cdrom.stat); s(cdrom.mask); s(dma.line); s(dma.stat); s(dma.mask); s(timer0.line); s(timer0.stat); s(timer0.mask); s(timer1.line); s(timer1.stat); s(timer1.mask); s(timer2.line); s(timer2.stat); s(timer2.mask); s(peripheral.line); s(peripheral.stat); s(peripheral.mask); s(sio.line); s(sio.stat); s(sio.mask); s(spu.line); s(spu.stat); s(spu.mask); s(pio.line); s(pio.stat); s(pio.mask); } ares-126/ares/ps1/mdec/000077500000000000000000000000001415063341600146665ustar00rootroot00000000000000ares-126/ares/ps1/mdec/decoder.cpp000066400000000000000000000113001415063341600167720ustar00rootroot00000000000000auto MDEC::decodeMacroblocks() -> void { while(!fifo.input.empty()) { u32 output[256]; if(status.outputDepth <= 1) { if(!decodeBlock(block.y0, block.luma)) break; convertY(output, block.y0); } if(status.outputDepth >= 2) { if(!decodeBlock(block.cr, block.chroma)) break; if(!decodeBlock(block.cb, block.chroma)) break; if(!decodeBlock(block.y0, block.luma)) break; if(!decodeBlock(block.y1, block.luma)) break; if(!decodeBlock(block.y2, block.luma)) break; if(!decodeBlock(block.y3, block.luma)) break; convertYUV(output, block.y0, 0, 0); convertYUV(output, block.y1, 8, 0); convertYUV(output, block.y2, 0, 8); convertYUV(output, block.y3, 8, 8); } //4-bit if(status.outputDepth == 0) { for(u32 index = 0; index < 64; index += 8) { u32 a = (output[index + 0] >> 4) << 0; u32 b = (output[index + 1] >> 4) << 4; u32 c = (output[index + 2] >> 4) << 8; u32 d = (output[index + 3] >> 4) << 12; u32 e = (output[index + 4] >> 4) << 16; u32 f = (output[index + 5] >> 4) << 20; u32 g = (output[index + 6] >> 4) << 24; u32 h = (output[index + 7] >> 4) << 28; fifo.output.write(a | b | c | d | e | f | g | h); } } //8-bit if(status.outputDepth == 1) { for(u32 index = 0; index < 64; index += 4) { u32 a = output[index + 0] << 0; u32 b = output[index + 1] << 8; u32 c = output[index + 2] << 16; u32 d = output[index + 3] << 24; fifo.output.write(a | b | c | d); } } //15-bit if(status.outputDepth == 3) { for(u32 index = 0; index < 256; index += 2) { u32 a = GPU::Color::to16(output[index + 0]) << 0 | status.outputMaskBit << 15; u32 b = GPU::Color::to16(output[index + 1]) << 16 | status.outputMaskBit << 31; fifo.output.write(a | b); } } //24-bit if(status.outputDepth == 2) { u32 index = 0; u32 state = 0; u32 rgb = 0; while(index < 256) { switch(state) { case 0: rgb = output[index++]; break; case 1: rgb |= output[index] << 24; fifo.output.write(rgb); rgb = output[index++] >> 8; break; case 2: rgb |= output[index] << 16; fifo.output.write(rgb); rgb = output[index++] >> 16; break; case 3: rgb |= output[index++] << 8; fifo.output.write(rgb); break; } state = state + 1 & 3; } } } status.outputEmpty = fifo.output.empty(); } auto MDEC::decodeBlock(s16 block[64], u8 table[64]) -> bool { for(u32 n : range(64)) block[n] = 0; maybe dct = fifo.input.read(); if(!dct) return false; //skip block padding while(!fifo.input.empty() && *dct == 0xfe00) dct = fifo.input.read(); s32 current = (i10)*dct; //direct current u16 qfactor = *dct >> 10; //quantization factor s32 value = current * table[0]; for(u32 n = 0; n < 64;) { if(qfactor == 0) value = current << 1; value = sclamp<11>(value); if(qfactor > 0) { block[zagzig[n]] = value; } else if(qfactor == 0) { block[n] = value; } maybe rle = fifo.input.read(); if(!rle) return false; current = (i10)*rle; n += (*rle >> 10) + 1; if(n >= 64) break; value = (current * table[n] * qfactor + 4) / 8; } s16 array[64]; decodeIDCT<0>(block, array); decodeIDCT<1>(array, block); return true; } template auto MDEC::decodeIDCT(s16 source[64], s16 target[64]) -> void { for(u32 x : range(8)) { for(u32 y : range(8)) { s32 sum = 0; for(u32 z : range(8)) { sum += source[y + z * 8] * block.scale[x + z * 8]; } if constexpr(Pass == 0) target[x + y * 8] = sum + 0x8000 >> 16; if constexpr(Pass == 1) target[x + y * 8] = sclamp<8>(sclip<9>(sum + 0x8000 >> 16)); } } } auto MDEC::convertY(u32 output[64], s16 luma[64]) -> void { for(u32 y : range(8)) { for(u32 x : range(8)) { s16 Y = (i10)luma[x + y * 8]; Y = uclamp<8>(Y + 128); output[x + y * 8] = Y; } } } auto MDEC::convertYUV(u32 output[256], s16 luma[64], u32 bx, u32 by) -> void { for(u32 y : range(8)) { for(u32 x : range(8)) { s16 Y = luma[x + y * 8]; s16 Cb = block.cb[(x + bx >> 1) + (y + by >> 1) * 8]; s16 Cr = block.cr[(x + bx >> 1) + (y + by >> 1) * 8]; s32 R = Y + (1.402 * Cr); s32 G = Y - (0.334 * Cb) - (0.714 * Cr); s32 B = Y + (1.722 * Cb); u8 r = uclamp<8>(R + 128); u8 g = uclamp<8>(G + 128); u8 b = uclamp<8>(B + 128); output[(x + bx) + (y + by) * 16] = r << 0 | g << 8 | b << 16; } } } ares-126/ares/ps1/mdec/io.cpp000066400000000000000000000102621415063341600160020ustar00rootroot00000000000000auto MDEC::readDMA() -> u32 { return readWord(0x1f80'1820); } auto MDEC::writeDMA(u32 data) -> void { return writeWord(0x1f80'1820, data); } auto MDEC::readByte(u32 address) -> u32 { debug(unverified, "MDEC::readByte(", hex(address, 8L), ")"); return readWord(address & ~3) >> 8 * (address & 3); } auto MDEC::readHalf(u32 address) -> u32 { debug(unverified, "MDEC::readHalf(", hex(address, 8L), ")"); return readWord(address & ~3) >> 8 * (address & 3); } auto MDEC::readWord(u32 address) -> u32 { n32 data; if(address == 0x1f80'1820) { data = fifo.output.read(data); if(fifo.output.empty()) status.outputEmpty = 1; } if(address == 0x1f80'1824) { data.bit( 0,15) = status.remaining - 1; data.bit(16,18) = status.currentBlock; data.bit(19,22) = 0; //unused data.bit(23) = status.outputMaskBit; data.bit(24) = status.outputSigned; data.bit(25,26) = status.outputDepth; data.bit(27) = status.outputRequest; data.bit(28) = status.inputRequest; data.bit(29) = status.commandBusy; data.bit(30) = status.inputFull; data.bit(31) = status.outputEmpty; } return data; } auto MDEC::writeByte(u32 address, u32 data) -> void { debug(unverified, "MDEC::writeByte(", hex(address, 8L), ")"); return writeWord(address & ~3, data << 8 * (address & 3)); } auto MDEC::writeHalf(u32 address, u32 data) -> void { debug(unverified, "MDEC::writeHalf(", hex(address, 8L), ")"); return writeWord(address & ~3, data << 8 * (address & 3)); } auto MDEC::writeWord(u32 address, u32 value) -> void { n32 data = value; if(address == 0x1f80'1820) { if(io.mode == Mode::Idle) { switch(data >> 29) { case 1: io.mode = Mode::DecodeMacroblock; io.offset = 0; status.remaining = data.bit(0,15); if(status.remaining == 0) { io.mode = Mode::Idle; //treat as 0; though it may be 65536 debug(unhandled, "MDEC macroblock length=0"); } break; case 2: io.mode = Mode::SetQuantTable; io.offset = 0; status.remaining = (data.bit(0) ? 128 : 64) / 4; break; case 3: io.mode = Mode::SetScaleTable; io.offset = 0; status.remaining = 64 / 2; break; } //if a valid command was decoded above: if(io.mode != Mode::Idle) { //output bits are set in status register regardless of mode status.outputMaskBit = data.bit(25); status.outputSigned = data.bit(26); status.outputDepth = data.bit(27,28); status.commandBusy = 1; } } else if(io.mode == Mode::DecodeMacroblock) { fifo.input.write(data >> 0); fifo.input.write(data >> 16); if(!--status.remaining) { io.mode = Mode::Idle; status.commandBusy = 0; decodeMacroblocks(); } } else if(io.mode == Mode::SetQuantTable) { if(io.offset < 64) { block.luma[io.offset++ & 63] = data >> 0; block.luma[io.offset++ & 63] = data >> 8; block.luma[io.offset++ & 63] = data >> 16; block.luma[io.offset++ & 63] = data >> 24; } else { block.chroma[io.offset++ & 63] = data >> 0; block.chroma[io.offset++ & 63] = data >> 8; block.chroma[io.offset++ & 63] = data >> 16; block.chroma[io.offset++ & 63] = data >> 24; } if(!--status.remaining) { io.mode = Mode::Idle; status.commandBusy = 0; } } else if(io.mode == Mode::SetScaleTable) { block.scale[io.offset++ & 63] = data >> 0; block.scale[io.offset++ & 63] = data >> 16; if(!--status.remaining) { io.mode = Mode::Idle; status.commandBusy = 0; } } } if(address == 0x1f80'1824) { if(data.bit(31)) { //reset io.mode = Mode::Idle; io.offset = 0; status.remaining = 0; status.currentBlock = 4; status.outputMaskBit = 0; status.outputSigned = 0; status.outputDepth = 0; status.outputRequest = 0; status.inputRequest = 0; status.commandBusy = 0; status.inputFull = 0; status.outputEmpty = 1; } status.outputRequest = data.bit(29); status.inputRequest = data.bit(30); } } ares-126/ares/ps1/mdec/mdec.cpp000066400000000000000000000014651415063341600163100ustar00rootroot00000000000000#include namespace ares::PlayStation { MDEC mdec; #include "tables.cpp" #include "decoder.cpp" #include "io.cpp" #include "serialization.cpp" auto MDEC::load(Node::Object parent) -> void { node = parent->append("MDEC"); } auto MDEC::unload() -> void { node.reset(); } auto MDEC::power(bool reset) -> void { Thread::reset(); Memory::Interface::setWaitStates(3, 3, 2); fifo.input.flush(); fifo.output.flush(); status = {}; io.mode = Mode::Idle; io.offset = 0; for(auto& v : block.luma) v = 0; for(auto& v : block.chroma) v = 0; for(auto& v : block.scale) v = 0; for(auto& v : block.cr) v = 0; for(auto& v : block.cb) v = 0; for(auto& v : block.y0) v = 0; for(auto& v : block.y1) v = 0; for(auto& v : block.y2) v = 0; for(auto& v : block.y3) v = 0; } } ares-126/ares/ps1/mdec/mdec.hpp000066400000000000000000000031561415063341600163140ustar00rootroot00000000000000//Macroblock Decoder struct MDEC : Thread, Memory::Interface { Node::Object node; //mdec.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //decoder.cpp auto decodeMacroblocks() -> void; auto decodeBlock(s16 block[64], u8 table[64]) -> bool; template auto decodeIDCT(s16 source[64], s16 target[64]) -> void; auto convertY(u32 output[64], s16 luma[64]) -> void; auto convertYUV(u32 output[256], s16 luma[64], u32 bx, u32 by) -> void; //io.cpp auto readDMA() -> u32; auto writeDMA(u32 data) -> void; auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct FIFO { queue input; queue output; } fifo; struct Status { n16 remaining; n3 currentBlock; n1 outputMaskBit; n1 outputSigned; n2 outputDepth; n1 outputRequest; n1 inputRequest; n1 commandBusy; n1 inputFull; n1 outputEmpty; } status; enum Mode : u32 { Idle, DecodeMacroblock, SetQuantTable, SetScaleTable }; struct IO { Mode mode; n32 offset; } io; struct Block { u8 luma[64]; u8 chroma[64]; s16 scale[64]; s16 cr[64]; s16 cb[64]; s16 y0[64]; s16 y1[64]; s16 y2[64]; s16 y3[64]; } block; //tables.cpp static const u8 zigzag[64]; static const u8 zagzig[64]; }; extern MDEC mdec; ares-126/ares/ps1/mdec/serialization.cpp000066400000000000000000000010401415063341600202420ustar00rootroot00000000000000auto MDEC::serialize(serializer& s) -> void { Thread::serialize(s); s(fifo.input); s(fifo.output); s(status.remaining); s(status.currentBlock); s(status.outputMaskBit); s(status.outputSigned); s(status.outputDepth); s(status.outputRequest); s(status.inputRequest); s(status.commandBusy); s(status.inputFull); s(status.outputEmpty); s((u32&)io.mode); s(io.offset); s(block.luma); s(block.chroma); s(block.scale); s(block.cr); s(block.cb); s(block.y0); s(block.y1); s(block.y2); s(block.y3); } ares-126/ares/ps1/mdec/tables.cpp000066400000000000000000000011741415063341600166470ustar00rootroot00000000000000const u8 MDEC::zigzag[64] = { 0, 1, 5, 6, 14, 15, 27, 28, 2, 4, 7, 13, 16, 26, 29, 42, 3, 8, 12, 17, 25, 30, 41, 43, 9, 11, 18, 24, 31, 40, 44, 53, 10, 19, 23, 32, 39, 45, 52, 54, 20, 22, 33, 38, 46, 51, 55, 60, 21, 34, 37, 47, 50, 56, 59, 61, 35, 36, 48, 49, 57, 58, 62, 63, }; //zagzig[zigzag[n]] = n; const u8 MDEC::zagzig[64] = { 0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63, }; ares-126/ares/ps1/memory/000077500000000000000000000000001415063341600152665ustar00rootroot00000000000000ares-126/ares/ps1/memory/bus.hpp000066400000000000000000000025311415063341600165710ustar00rootroot00000000000000inline auto Bus::mmio(u32 address) -> Memory::Interface& { address &= 0x1fff'ffff; if(address <= 0x007f'ffff) return cpu.ram; if(address >= 0x1fc0'0000) return bios; if(address <= 0x1eff'ffff) return unmapped; if(address <= 0x1f7f'ffff) return expansion1; if(address <= 0x1f80'03ff) return cpu.scratchpad; if(address <= 0x1f80'0fff) return unmapped; if(address <= 0x1f80'103f) return memory; if(address <= 0x1f80'105f) return peripheral; if(address <= 0x1f80'106f) return memory; if(address <= 0x1f80'107f) return interrupt; if(address <= 0x1f80'10ff) return dma; if(address <= 0x1f80'112f) return timer; if(address <= 0x1f80'17ff) return unmapped; if(address <= 0x1f80'180f) return disc; if(address <= 0x1f80'181f) return gpu; if(address <= 0x1f80'182f) return mdec; if(address <= 0x1f80'1bff) return unmapped; if(address <= 0x1f80'1fff) return spu; if(address <= 0x1f80'2fff) return expansion2; if(address <= 0x1f9f'ffff) return unmapped; if(address <= 0x1fbf'ffff) return expansion3; return unmapped; } template inline auto Bus::read(u32 address) -> u32 { return mmio(address).read(address); } template inline auto Bus::write(u32 address, u32 data) -> void { if constexpr(Accuracy::CPU::Recompiler) cpu.recompiler.invalidate(address); return mmio(address).write(address, data); } ares-126/ares/ps1/memory/interface.hpp000066400000000000000000000026271415063341600177460ustar00rootroot00000000000000struct Interface { virtual ~Interface() = default; template auto wait() const -> u32 { if constexpr(Size == Byte) return waitStates.byte; if constexpr(Size == Half) return waitStates.half; if constexpr(Size == Word) return waitStates.word; } template auto read(u32 address) -> u32 { if constexpr(Size == Byte) return readByte(address); if constexpr(Size == Half) return readHalf(address); if constexpr(Size == Word) return readWord(address); unreachable; } template auto write(u32 address, u32 data) -> void { if constexpr(Size == Byte) return writeByte(address, data); if constexpr(Size == Half) return writeHalf(address, data); if constexpr(Size == Word) return writeWord(address, data); } virtual auto readByte(u32 address) -> u32 = 0; virtual auto readHalf(u32 address) -> u32 = 0; virtual auto readWord(u32 address) -> u32 = 0; virtual auto writeByte(u32 address, u32 data) -> void = 0; virtual auto writeHalf(u32 address, u32 data) -> void = 0; virtual auto writeWord(u32 address, u32 data) -> void = 0; auto setWaitStates(u32 byte, u32 half, u32 word) -> void { waitStates.byte = byte; waitStates.half = half; waitStates.word = word; } //additional clock cycles required to access memory struct WaitStates { u32 byte = 0; u32 half = 0; u32 word = 0; } waitStates; std::mutex mutex; }; ares-126/ares/ps1/memory/io.cpp000066400000000000000000000062431415063341600164060ustar00rootroot00000000000000//$1f80:1060 RAM_SIZE //$fffe:0130 CACHE_CTRL auto MemoryControl::readByte(u32 address) -> u32 { n32 data; if((address & ~3) == 0x1f80'1060) data = readWord(address & ~3) >> 8 * (address & 3); if(address == 0xfffe'0130) data = readWord(address); //must be word-aligned return data; } auto MemoryControl::readHalf(u32 address) -> u32 { n32 data; if((address & ~3) == 0x1f80'1060) data = readWord(address & ~3) >> 8 * (address & 3); if(address == 0xfffe'0130) data = readWord(address); //must be word-aligned return data; } auto MemoryControl::readWord(u32 address) -> u32 { n32 data; if(address == 0x1f80'1060) { data = ram.value; } if(address == 0xfffe'0130) { data.bit( 0) = cache.lock; data.bit( 1) = cache.invalidate; data.bit( 2) = cache.tagTest; data.bit( 3) = cache.scratchpadEnable; data.bit( 4) = cache.dataSize.bit(0); data.bit( 5) = cache.dataSize.bit(1); data.bit( 6) = 0; //cache.dataDisable data.bit( 7) = cache.dataEnable; data.bit( 8) = cache.codeSize.bit(0); data.bit( 9) = cache.codeSize.bit(1); data.bit(10) = 0; //cache.codeDisable data.bit(11) = cache.codeEnable; data.bit(12) = cache.interruptPolarity; data.bit(13) = cache.readPriority; data.bit(14) = cache.noWaitState; data.bit(15) = cache.busGrant; data.bit(16) = cache.loadScheduling; data.bit(17) = cache.noStreaming; data.bit(18,31) = cache.reserved; } return data; } auto MemoryControl::writeByte(u32 address, u32 data) -> void { if((address & ~3) == 0x1f80'1060) writeWord(address & ~3, data << 8 * (address & 3)); if(address == 0xfffe'0130) writeWord(address, data); //must be word-aligned } auto MemoryControl::writeHalf(u32 address, u32 data) -> void { if((address & ~3) == 0x1f80'1060) writeWord(address & ~3, data << 8 * (address & 3)); if(address == 0xfffe'0130) writeWord(address, data); //must be word-aligned } auto MemoryControl::writeWord(u32 address, u32 value) -> void { n32 data = value; if(address == 0x1f80'1060) { ram.value = data; ram.delay = ram.value.bit(7); ram.window = ram.value.bit(9,11); } if(address == 0xfffe'0130) { cache.lock = data.bit( 0); cache.invalidate = data.bit( 1); cache.tagTest = data.bit( 2); cache.scratchpadEnable = data.bit( 3); cache.dataSize.bit(0) = data.bit( 4); cache.dataSize.bit(1) = data.bit( 5); //cache.dataDisable = data.bit( 6); //forced to zero on the PS1 cache.dataEnable = data.bit( 7); cache.codeSize.bit(0) = data.bit( 8); cache.codeSize.bit(1) = data.bit( 9); //cache.codeDisable = data.bit(10); //forced to zero on the PS1 cache.codeEnable = data.bit(11); cache.interruptPolarity = data.bit(12); //should be 0 for normal operation cache.readPriority = data.bit(13); //should be 1 cache.noWaitState = data.bit(14); //should be 1 cache.busGrant = data.bit(15); //should be 1 cache.loadScheduling = data.bit(16); //should be 1 cache.noStreaming = data.bit(17); //should be 0 cache.reserved = data.bit(18,31); cpu.icache.enable(cache.codeEnable); } } ares-126/ares/ps1/memory/memory.cpp000066400000000000000000000013151415063341600173020ustar00rootroot00000000000000#include namespace ares::PlayStation { Bus bus; MemoryControl memory; MemoryExpansion expansion1{ 6, 13, 25}; MemoryExpansion expansion2{10, 25, 55}; MemoryExpansion expansion3{ 6, 5, 9}; Memory::Readable bios; Memory::Unmapped unmapped; #include "io.cpp" #include "serialization.cpp" auto MemoryControl::load(Node::Object parent) -> void { node = parent->append("Memory"); } auto MemoryControl::unload() -> void { node.reset(); } auto MemoryControl::power(bool reset) -> void { //timings are for $1f80:106x //timings for $fffe:xxxx are hardcoded as (0, 1, 1) in cpu/core/memory.cpp Memory::Interface::setWaitStates(2, 2, 2); memory.ram = {}; memory.cache = {}; } } ares-126/ares/ps1/memory/memory.hpp000066400000000000000000000043641415063341600173160ustar00rootroot00000000000000namespace Memory { #include "interface.hpp" #include "readable.hpp" #include "writable.hpp" #include "unmapped.hpp" } //System Bus struct Bus { //bus.hpp auto mmio(u32 address) -> Memory::Interface&; template auto read(u32 address) -> u32; template auto write(u32 address, u32 data) -> void; }; struct MemoryControl : Memory::Interface { Node::Object node; //memory.cpp auto load(Node::Object) -> void; auto unload() -> void; auto power(bool reset) -> void; //io.cpp auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct RAM { n32 value; n1 delay; //1 = add one cycle on simultaneous code+data fetches n3 window; //size and mirroring/access control } ram; struct Cache { n1 lock; //not emulated n1 invalidate; //not emulated n1 tagTest; n1 scratchpadEnable; n2 dataSize; //not emulated n1 dataEnable; n2 codeSize; //not emulated n1 codeEnable; n1 interruptPolarity; //not emulated n1 readPriority; //not emulated n1 noWaitState; //not emulated n1 busGrant; //not emulated n1 loadScheduling; //not emulated n1 noStreaming; //not emulated n14 reserved; //not used } cache; }; struct MemoryExpansion : Memory::Interface { MemoryExpansion(u32 byte, u32 half, u32 word) { Memory::Interface::setWaitStates(byte, half, word); } auto readByte(u32 address) -> u32 { return 0; } auto readHalf(u32 address) -> u32 { return 0; } auto readWord(u32 address) -> u32 { return 0; } auto writeByte(u32 address, u32 data) -> void { return; } auto writeHalf(u32 address, u32 data) -> void { return; } auto writeWord(u32 address, u32 data) -> void { return; } }; extern Bus bus; extern MemoryControl memory; extern MemoryExpansion expansion1; extern MemoryExpansion expansion2; extern MemoryExpansion expansion3; extern Memory::Readable bios; extern Memory::Unmapped unmapped; ares-126/ares/ps1/memory/readable.hpp000066400000000000000000000030411415063341600175340ustar00rootroot00000000000000struct Readable : Interface { auto reset() -> void { delete[] data; data = nullptr; size = 0; maskByte = 0; maskHalf = 0; maskWord = 0; } auto allocate(u32 capacity, u32 fillWith = ~0) -> void { reset(); size = capacity & ~3; u32 mask = bit::round(size) - 1; maskByte = mask & ~0; maskHalf = mask & ~1; maskWord = mask & ~3; data = new u8[mask + 1]; fill(fillWith); } auto fill(u32 value = 0) -> void { for(u32 address = 0; address < size; address += 4) { *(u32*)&data[address & maskWord] = value; } } auto load(VFS::File fp) -> void { if(!size) allocate(fp->size()); for(u32 address = 0; address < min(size, fp->size()); address += 4) { *(u32*)&data[address & maskWord] = fp->readl(4L); } } auto save(VFS::File fp) -> void { for(u32 address = 0; address < min(size, fp->size()); address += 4) { fp->writel(*(u32*)&data[address & maskWord], 4L); } } auto readByte(u32 address) -> u32 { return *(u8*)&data[address & maskByte]; } auto readHalf(u32 address) -> u32 { return *(u16*)&data[address & maskHalf]; } auto readWord(u32 address) -> u32 { return *(u32*)&data[address & maskWord]; } auto writeByte(u32 address, u32 data) -> void {} auto writeHalf(u32 address, u32 data) -> void {} auto writeWord(u32 address, u32 data) -> void {} auto serialize(serializer& s) -> void { //s(array_span{data, size}); } //private: u8* data = nullptr; u32 size = 0; u32 maskByte = 0; u32 maskHalf = 0; u32 maskWord = 0; }; ares-126/ares/ps1/memory/serialization.cpp000066400000000000000000000007101415063341600206450ustar00rootroot00000000000000auto MemoryControl::serialize(serializer& s) -> void { s(ram.value); s(ram.delay); s(ram.window); s(cache.lock); s(cache.invalidate); s(cache.tagTest); s(cache.scratchpadEnable); s(cache.dataSize); s(cache.dataEnable); s(cache.codeSize); s(cache.codeEnable); s(cache.interruptPolarity); s(cache.readPriority); s(cache.noWaitState); s(cache.busGrant); s(cache.loadScheduling); s(cache.noStreaming); s(cache.reserved); } ares-126/ares/ps1/memory/unmapped.hpp000066400000000000000000000014131415063341600176070ustar00rootroot00000000000000struct Unmapped : Interface { auto readByte(u32 address) -> u32 { debug(unhandled, "Unmapped::readByte(", hex(address, 8L), ")"); return 0; } auto readHalf(u32 address) -> u32 { debug(unhandled, "Unmapped::readHalf(", hex(address, 8L), ")"); return 0; } auto readWord(u32 address) -> u32 { debug(unhandled, "Unmapped::readWord(", hex(address, 8L), ")"); return 0; } auto writeByte(u32 address, u32 data) -> void { debug(unhandled, "Unmapped::writeByte(", hex(address, 8L), ")"); } auto writeHalf(u32 address, u32 data) -> void { debug(unhandled, "Unmapped::writeHalf(", hex(address, 8L), ")"); } auto writeWord(u32 address, u32 data) -> void { debug(unhandled, "Unmapped::writeWord(", hex(address, 8L), ")"); } }; ares-126/ares/ps1/memory/writable.hpp000066400000000000000000000034751415063341600176210ustar00rootroot00000000000000struct Writable : Interface { auto reset() -> void { delete[] data; data = nullptr; size = 0; maskByte = 0; maskHalf = 0; maskWord = 0; } auto allocate(u32 capacity, u32 fillWith = ~0) -> void { reset(); size = capacity & ~3; u32 mask = bit::round(size) - 1; maskByte = mask & ~0; maskHalf = mask & ~1; maskWord = mask & ~3; data = new u8[mask + 1]; fill(fillWith); } auto fill(u32 value = 0) -> void { for(u32 address = 0; address < size; address += 4) { *(u32*)&data[address & maskWord] = value; } } auto load(VFS::File fp) -> void { if(!size) allocate(fp->size()); for(u32 address = 0; address < min(size, fp->size()); address += 4) { *(u32*)&data[address & maskWord] = fp->readl(4L); } } auto save(VFS::File fp) -> void { if(!fp) return; for(u32 address = 0; address < min(size, fp->size()); address += 4) { fp->writel(*(u32*)&data[address & maskWord], 4L); } } auto readByte(u32 address) -> u32 { return *(u8*)&data[address & maskByte]; } auto readHalf(u32 address) -> u32 { return *(u16*)&data[address & maskHalf]; } auto readWord(u32 address) -> u32 { return *(u32*)&data[address & maskWord]; } auto writeByte(u32 address, u32 value) -> void { *(u8*)&data[address & maskByte] = value; } auto writeHalf(u32 address, u32 value) -> void { *(u16*)&data[address & maskHalf] = value; } auto writeWord(u32 address, u32 value) -> void { *(u32*)&data[address & maskWord] = value; } //for PS1 GPU rendering at 24bpp auto readWordUnaligned(u32 address) const -> u32 { return *(u32*)&data[address & maskByte]; } auto serialize(serializer& s) -> void { s(array_span{data, size}); } //private: u8* data = nullptr; u32 size = 0; u32 maskByte = 0; u32 maskHalf = 0; u32 maskWord = 0; }; ares-126/ares/ps1/peripheral/000077500000000000000000000000001415063341600161115ustar00rootroot00000000000000ares-126/ares/ps1/peripheral/digital-gamepad/000077500000000000000000000000001415063341600211225ustar00rootroot00000000000000ares-126/ares/ps1/peripheral/digital-gamepad/digital-gamepad.cpp000066400000000000000000000052601415063341600246420ustar00rootroot00000000000000DigitalGamepad::DigitalGamepad(Node::Port parent) { node = parent->append("Digital Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); cross = node->append("Cross"); circle = node->append("Circle"); square = node->append("Square"); triangle = node->append("Triangle"); l1 = node->append("L1"); l2 = node->append("L2"); r1 = node->append("R1"); r2 = node->append("R2"); select = node->append("Select"); start = node->append("Start"); } auto DigitalGamepad::reset() -> void { state = State::Idle; } auto DigitalGamepad::acknowledge() -> bool { return state != State::Idle; } auto DigitalGamepad::bus(u8 data) -> u8 { n8 input = data; n8 output = 0xff; switch(state) { case State::Idle: { if(input != 0x01) break; output = 0xff; state = State::IDLower; break; } case State::IDLower: { if(input != 0x42) break; output = 0x41; state = State::IDUpper; break; } case State::IDUpper: { output = 0x5a; state = State::DataLower; break; } case State::DataLower: { platform->input(select); platform->input(start); platform->input(up); platform->input(right); platform->input(down); platform->input(left); output.bit(0) = !select->value(); output.bit(1) = 1; output.bit(2) = 1; output.bit(3) = !start->value(); output.bit(4) = !(up->value() & !down->value()); output.bit(5) = !(right->value() & !left->value()); output.bit(6) = !(down->value() & !up->value()); output.bit(7) = !(left->value() & !right->value()); state = State::DataUpper; break; } case State::DataUpper: { platform->input(l2); platform->input(r2); platform->input(l1); platform->input(r1); platform->input(triangle); platform->input(circle); platform->input(cross); platform->input(square); output.bit(0) = !l2->value(); output.bit(1) = !r2->value(); output.bit(2) = !l1->value(); output.bit(3) = !r1->value(); output.bit(4) = !triangle->value(); output.bit(5) = !circle->value(); output.bit(6) = !cross->value(); output.bit(7) = !square->value(); state = State::Release; break; } case State::Release: { output = 0xff; state = State::Idle; break; } } return output; } ares-126/ares/ps1/peripheral/digital-gamepad/digital-gamepad.hpp000066400000000000000000000013101415063341600246370ustar00rootroot00000000000000struct DigitalGamepad : PeripheralDevice { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button cross; Node::Input::Button circle; Node::Input::Button square; Node::Input::Button triangle; Node::Input::Button l1; Node::Input::Button l2; Node::Input::Button r1; Node::Input::Button r2; Node::Input::Button select; Node::Input::Button start; DigitalGamepad(Node::Port); auto reset() -> void override; auto acknowledge() -> bool override; auto bus(u8 data) -> u8 override; enum class State : u32 { Idle, IDLower, IDUpper, DataLower, DataUpper, Release, } state = State::Idle; }; ares-126/ares/ps1/peripheral/io.cpp000066400000000000000000000116271415063341600172330ustar00rootroot00000000000000auto Peripheral::receive() -> u8 { u8 data = 0xff; if(io.receiveSize) { data = io.receiveData; io.receiveData >>= 8; io.receiveSize--; } return data; } auto Peripheral::transmit(u8 data) -> void { if(io.slotNumber == 0) { if(!memoryCardPort1.acknowledge()) { io.receiveSize = 1; io.receiveData = controllerPort1.bus(data); io.counter = 600; } if(!controllerPort1.acknowledge()) { io.receiveSize = 1; io.receiveData = memoryCardPort1.bus(data); io.counter = 600; } } if(io.slotNumber == 1) { if(!memoryCardPort2.acknowledge()) { io.receiveSize = 1; io.receiveData = controllerPort2.bus(data); io.counter = 600; } if(!controllerPort2.acknowledge()) { io.receiveSize = 1; io.receiveData = memoryCardPort2.bus(data); io.counter = 600; } } } auto Peripheral::readByte(u32 address) -> u32 { n8 data; //JOY_RX_DATA if(address == 0x1f80'1040) { data = receive(); } return data; } auto Peripheral::readHalf(u32 address) -> u32 { n16 data; //JOY_RX_DATA if(address == 0x1f80'1040) { data = receive(); } //JOY_STAT if(address == 0x1f80'1044) { data.bit(0) = io.transmitStarted; data.bit(1) = io.receiveSize > 0; data.bit(2) = io.transmitFinished; data.bit(3) = io.parityError; data.bit(7) =!interrupt.level(Interrupt::Peripheral); data.bit(9) = io.interruptRequest; } //JOY_MODE if(address == 0x1f80'1048) { data.bit(0, 1) = io.baudrateReloadFactor; data.bit(2, 3) = io.characterLength; data.bit(4) = io.parityEnable; data.bit(5) = io.parityType; data.bit(6, 7) = io.unknownMode_6_7; data.bit(8) = io.clockOutputPolarity; data.bit(9,15) = io.unknownMode_9_15; } //JOY_CTRL if(address == 0x1f80'104a) { data.bit( 0) = io.transmitEnable; data.bit( 1) = io.joyOutput; data.bit( 2) = io.receiveEnable; data.bit( 3) = io.unknownCtrl_3; data.bit( 4) = io.acknowledge; data.bit( 5) = io.unknownCtrl_5; data.bit( 6) = io.reset; data.bit( 7) = io.unknownCtrl_7; data.bit( 8, 9) = io.receiveInterruptMode; data.bit(10) = io.transmitInterruptEnable; data.bit(11) = io.receiveInterruptEnable; data.bit(12) = io.acknowledgeInterruptEnable; data.bit(13) = io.slotNumber; data.bit(14,15) = io.unknownCtrl_14_15; } //JOY_BAUD if(address == 0x1f80'104e) { data.bit(0,15) = io.baudrateReloadValue; } return data; } auto Peripheral::readWord(u32 address) -> u32 { n32 data; //JOY_RX_DATA if(address == 0x1f80'1040) { if(io.receiveSize) { data = io.receiveData; io.receiveData >>= 8; io.receiveSize--; } } //JOY_STAT if(address == 0x1f80'1044) { data.bit(0) = io.transmitStarted; data.bit(1) = io.receiveSize > 0; data.bit(2) = io.transmitFinished; data.bit(3) = io.parityError; data.bit(7) =!interrupt.level(Interrupt::Peripheral); data.bit(9) = io.interruptRequest; } return data; } auto Peripheral::writeByte(u32 address, u32 value) -> void { n8 data = value; //JOY_TX_DATA if(address == 0x1f80'1040) { transmit(data); } } auto Peripheral::writeHalf(u32 address, u32 value) -> void { n16 data = value; //JOY_TX_DATA if(address == 0x1f80'1040) { transmit(data); } //JOY_MODE if(address == 0x1f80'1048) { io.baudrateReloadFactor = data.bit(0, 1); io.characterLength = data.bit(2, 3); io.parityEnable = data.bit(4); io.parityType = data.bit(5); io.unknownMode_6_7 = data.bit(6, 7); io.clockOutputPolarity = data.bit(8); io.unknownMode_9_15 = data.bit(9,15); } //JOY_CTRL if(address == 0x1f80'104a) { io.transmitEnable = data.bit( 0); io.joyOutput = data.bit( 1); io.receiveEnable = data.bit( 2); io.unknownCtrl_3 = data.bit( 3); io.acknowledge = data.bit( 4); io.unknownCtrl_5 = data.bit( 5); io.reset = data.bit( 6); io.unknownCtrl_7 = data.bit( 7); io.receiveInterruptMode = data.bit( 8, 9); io.transmitInterruptEnable = data.bit(10); io.receiveInterruptEnable = data.bit(11); io.acknowledgeInterruptEnable = data.bit(12); io.slotNumber = data.bit(13); io.unknownCtrl_14_15 = data.bit(14,15); if(!io.joyOutput) { controllerPort1.reset(); memoryCardPort1.reset(); controllerPort2.reset(); memoryCardPort2.reset(); } if(io.acknowledge || io.reset) { io.parityError = 0; io.interruptRequest = 0; interrupt.lower(Interrupt::Peripheral); } } //JOY_BAUD if(address == 0x1f80'104e) { io.baudrateReloadValue = data.bit(0,15); } } auto Peripheral::writeWord(u32 address, u32 data) -> void { debug(unimplemented, "Peripheral::writeWord"); } ares-126/ares/ps1/peripheral/memory-card/000077500000000000000000000000001415063341600203305ustar00rootroot00000000000000ares-126/ares/ps1/peripheral/memory-card/memory-card.cpp000066400000000000000000000060551415063341600232610ustar00rootroot00000000000000MemoryCard::MemoryCard(Node::Port parent) { node = parent->append("Memory Card"); node->setPak(pak = platform->pak(node)); memory.allocate(128_KiB); if(auto fp = pak->read("save.card")) { memory.load(fp); } flag.value = 0x00; flag.error = 0; flag.fresh = 1; flag.unknown = 1; } MemoryCard::~MemoryCard() { if(auto fp = pak->write("save.card")) { memory.save(fp); } } auto MemoryCard::reset() -> void { state = State::Idle; } auto MemoryCard::acknowledge() -> bool { return state != State::Idle; } auto MemoryCard::bus(u8 data) -> u8 { n8 input = data; n8 output = 0xff; if(state == State::Idle) { command = Command::None; } switch(command) { case Command::Identify: return identify(input); case Command::Read: return read(input); case Command::Write: return write(input); } switch(state) { case State::Idle: { if(input != 0x81) break; output = 0xff; state = State::Select; break; } case State::Select: { if(input == 'S') phase = 2, command = Command::Identify; if(input == 'R') phase = 2, command = Command::Read; if(input == 'W') phase = 2, command = Command::Write; output = flag.value; flag.error = 0; if(command == Command::None) { state = State::Idle; } break; } } return output; } auto MemoryCard::identify(u8 data) -> u8 { n8 input = data; n8 output = 0xff; command = Command::None; return output; } auto MemoryCard::read(u8 data) -> u8 { n8 input = data; n8 output = 0xff; switch(phase++) { case 2: return 0x5a; //ID lower case 3: return 0x5d; //ID upper case 4: address = address & 0x00ff | input << 8; return 0; case 5: address = address & 0xff00 | input << 0; return 0; case 6: return 0x5c; //ACK lower case 7: return 0x5d; //ACK upper case 8: checksum = address >> 8; return address >> 8; case 9: checksum ^= address >> 0; return address >> 0; case 10 ... 137: output = memory.readByte(address * 128 + (phase - 11)); checksum ^= output; return output; case 138: return checksum; case 139: state = State::Idle; command = Command::None; return 'G'; } return output; } auto MemoryCard::write(u8 data) -> u8 { n8 input = data; n8 output = 0xff; switch(phase++) { case 2: return 0x5a; //ID lower case 3: return 0x5d; //ID upper case 4: address = address & 0x00ff | input << 8; checksum = address >> 8; return 0; case 5: address = address & 0xff00 | input << 0; checksum ^= address >> 0; response = 'G'; if(address >= 1024) { flag.error = 1; response = 0xff; } return 0; case 6 ... 133: memory.writeByte(address * 128 + (phase - 7), input); checksum ^= input; return 0; case 134: if(checksum != input) { flag.error = 1; response = 'N'; } return 0; case 135: return 0x5c; //ACK lower case 136: return 0x5d; //ACK upper case 137: flag.fresh = 0; state = State::Idle; command = Command::None; return response; } return output; } ares-126/ares/ps1/peripheral/memory-card/memory-card.hpp000066400000000000000000000013411415063341600232570ustar00rootroot00000000000000struct MemoryCard : PeripheralDevice { VFS::Pak pak; Memory::Writable memory; MemoryCard(Node::Port); ~MemoryCard(); auto reset() -> void override; auto acknowledge() -> bool override; auto bus(u8 data) -> u8 override; auto identify(u8 data) -> u8; auto read(u8 data) -> u8; auto write(u8 data) -> u8; enum class State : u32 { Idle, Select, Active, } state = State::Idle; enum class Command : u32 { None, Identify, Read, Write, } command = Command::None; struct Flag { u8 value; BitField<8,2> error{&value}; BitField<8,3> fresh{&value}; BitField<8,4> unknown{&value}; } flag; u8 phase = 0; u8 checksum = 0; u8 response = 0; u16 address = 0; }; ares-126/ares/ps1/peripheral/peripheral.cpp000066400000000000000000000015531415063341600207540ustar00rootroot00000000000000#include namespace ares::PlayStation { Peripheral peripheral; #include "io.cpp" #include "serialization.cpp" #include "port.cpp" #include "digital-gamepad/digital-gamepad.cpp" #include "memory-card/memory-card.cpp" auto Peripheral::load(Node::Object parent) -> void { node = parent->append("Peripheral"); } auto Peripheral::unload() -> void { node.reset(); } auto Peripheral::main() -> void { if(io.counter > 0) { io.counter -= 8; if(io.counter <= 0) { io.counter = 0; io.interruptRequest = 1; if(io.acknowledgeInterruptEnable) { interrupt.raise(Interrupt::Peripheral); } } } step(8); } auto Peripheral::step(u32 clocks) -> void { Thread::clock += clocks; } auto Peripheral::power(bool reset) -> void { Thread::reset(); Memory::Interface::setWaitStates(2, 2, 2); io = {}; } } ares-126/ares/ps1/peripheral/peripheral.hpp000066400000000000000000000035031415063341600207560ustar00rootroot00000000000000struct PeripheralDevice { Node::Peripheral node; virtual ~PeripheralDevice() = default; virtual auto reset() -> void {} virtual auto acknowledge() -> bool { return 0; } virtual auto bus(u8 data) -> u8 { return 0xff; } }; struct Peripheral : Thread, Memory::Interface { Node::Object node; //peripheral.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //io.cpp auto receive() -> u8; auto transmit(u8 data) -> void; auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { //JOY_RX_DATA n64 receiveData; n8 receiveSize; //JOY_TX_DATA n8 transmitData; //JOY_STAT n1 transmitStarted = 1; n1 transmitFinished = 1; n1 parityError; n1 interruptRequest; //JOY_MODE n2 baudrateReloadFactor; n2 characterLength; n1 parityEnable; n1 parityType; n2 unknownMode_6_7; n1 clockOutputPolarity; n7 unknownMode_9_15; //JOY_CTRL n1 transmitEnable; n1 joyOutput; n1 receiveEnable; n1 unknownCtrl_3; n1 acknowledge; n1 unknownCtrl_5; n1 reset; n1 unknownCtrl_7; n2 receiveInterruptMode; n1 transmitInterruptEnable; n1 receiveInterruptEnable; n1 acknowledgeInterruptEnable; n1 slotNumber; n2 unknownCtrl_14_15; //JOY_BAUD n16 baudrateReloadValue; //internal i32 counter; } io; }; #include "port.hpp" #include "digital-gamepad/digital-gamepad.hpp" #include "memory-card/memory-card.hpp" extern Peripheral peripheral; ares-126/ares/ps1/peripheral/port.cpp000066400000000000000000000026311415063341600176030ustar00rootroot00000000000000PeripheralPort controllerPort1{"Controller Port 1", "Controller" }; PeripheralPort memoryCardPort1{"Memory Card Port 1", "Memory Card"}; PeripheralPort controllerPort2{"Controller Port 2", "Controller" }; PeripheralPort memoryCardPort2{"Memory Card Port 2", "Memory Card"}; PeripheralPort::PeripheralPort(string name, string type) : name(name), type(type) { } auto PeripheralPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("PlayStation"); port->setType(type); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); if(type == "Controller") { port->setSupported({"Digital Gamepad"}); } if(type == "Memory Card") { port->setSupported({"Memory Card"}); } } auto PeripheralPort::unload() -> void { device.reset(); port.reset(); } auto PeripheralPort::allocate(string name) -> Node::Peripheral { if(name == "Digital Gamepad") device = new DigitalGamepad(port); if(name == "Memory Card" ) device = new MemoryCard(port); if(device) return device->node; return {}; } auto PeripheralPort::reset() -> void { if(device) return device->reset(); } auto PeripheralPort::acknowledge() -> bool { if(device) return device->acknowledge(); return 0; } auto PeripheralPort::bus(u8 data) -> u8 { if(device) return device->bus(data); return 0xff; } auto PeripheralPort::serialize(serializer& s) -> void { } ares-126/ares/ps1/peripheral/port.hpp000066400000000000000000000011031415063341600176010ustar00rootroot00000000000000struct PeripheralPort { Node::Port port; unique_pointer device; //port.cpp PeripheralPort(string name, string type); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto reset() -> void; auto acknowledge() -> bool; auto bus(u8 data) -> u8; auto serialize(serializer&) -> void; const string name; const string type; }; extern PeripheralPort controllerPort1; extern PeripheralPort memoryCardPort1; extern PeripheralPort controllerPort2; extern PeripheralPort memoryCardPort2; ares-126/ares/ps1/peripheral/serialization.cpp000066400000000000000000000014551415063341600214770ustar00rootroot00000000000000auto Peripheral::serialize(serializer& s) -> void { Thread::serialize(s); s(io.receiveData); s(io.receiveSize); s(io.transmitData); s(io.transmitStarted); s(io.transmitFinished); s(io.parityError); s(io.interruptRequest); s(io.baudrateReloadFactor); s(io.characterLength); s(io.parityEnable); s(io.parityType); s(io.unknownMode_6_7); s(io.clockOutputPolarity); s(io.unknownMode_9_15); s(io.transmitEnable); s(io.joyOutput); s(io.receiveEnable); s(io.unknownCtrl_3); s(io.acknowledge); s(io.unknownCtrl_5); s(io.reset); s(io.unknownCtrl_7); s(io.receiveInterruptMode); s(io.transmitInterruptEnable); s(io.receiveInterruptEnable); s(io.acknowledgeInterruptEnable); s(io.slotNumber); s(io.unknownCtrl_14_15); s(io.baudrateReloadValue); s(io.counter); } ares-126/ares/ps1/ps1.hpp000066400000000000000000000021431415063341600151720ustar00rootroot00000000000000#pragma once //started: 2020-06-17 #include #include #include #include namespace ares::PlayStation { auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; enum : bool { Read = 0, Write = 1 }; enum : u32 { Byte = 1, Half = 2, Word = 4 }; struct Region { inline static auto NTSCJ() -> bool; inline static auto NTSCU() -> bool; inline static auto PAL() -> bool; }; struct Thread { auto reset() -> void { clock = 0; } auto serialize(serializer& s) -> void { s(clock); } s64 clock; }; #include #include #include #include #include #include #include #include #include #include #include #include #include } ares-126/ares/ps1/spu/000077500000000000000000000000001415063341600145655ustar00rootroot00000000000000ares-126/ares/ps1/spu/adpcm.cpp000066400000000000000000000027621415063341600163640ustar00rootroot00000000000000auto SPU::Voice::readBlock() -> void { n19 address = adpcm.currentAddress; n16 header = self.readRAM(address); block.shift = header.bit(0,3) > 12 ? 9 : header.bit(0,3); block.filter = header.bit(4,6) > 4 ? 4 : header.bit(4,6); block.loopEnd = header.bit( 8); block.loopRepeat = header.bit( 9); block.loopStart = header.bit(10); address += 2; for(u32 word : range(7)) { n16 data = self.readRAM(address); block.brr[word << 2 | 0] = data >> 0 & 15; block.brr[word << 2 | 1] = data >> 4 & 15; block.brr[word << 2 | 2] = data >> 8 & 15; block.brr[word << 2 | 3] = data >> 12 & 15; address += 2; } } auto SPU::Voice::decodeBlock() -> void { static const s32 positive[5] = {0, 60, 115, 98, 122}; static const s32 negative[5] = {0, 0, -52, -55, -60}; //cache samples for later interpolation adpcm.previousSamples[0] = adpcm.currentSamples[25]; adpcm.previousSamples[1] = adpcm.currentSamples[26]; adpcm.previousSamples[2] = adpcm.currentSamples[27]; s16 lastSamples[2] = {adpcm.lastSamples[0], adpcm.lastSamples[1]}; for(u32 nibble : range(28)) { s32 sample = s16(block.brr[nibble] << 12) >> block.shift; sample += lastSamples[0] * positive[block.filter] >> 6; sample += lastSamples[1] * negative[block.filter] >> 6; lastSamples[1] = lastSamples[0]; lastSamples[0] = sclamp<16>(sample); adpcm.currentSamples[nibble] = lastSamples[0]; } adpcm.lastSamples[0] = lastSamples[0]; adpcm.lastSamples[1] = lastSamples[1]; } ares-126/ares/ps1/spu/adsr.cpp000066400000000000000000000010551415063341600162230ustar00rootroot00000000000000auto SPU::adsrConstructTable() -> void { for(u8 decreasing : range(2)) { for(u8 rate : range(128)) { auto& entry = adsrEntries[decreasing][rate]; if(rate < 48) { entry.ticks = 1; if(decreasing == 0) entry.step = +7 - (rate & 3) << 11 - (rate >> 2); if(decreasing == 1) entry.step = -8 + (rate & 3) << 11 - (rate >> 2); } else { entry.ticks = 1 << (rate >> 2) - 11; if(decreasing == 0) entry.step = +7 - (rate & 3); if(decreasing == 1) entry.step = -8 + (rate & 3); } } } } ares-126/ares/ps1/spu/capture.cpp000066400000000000000000000002151415063341600167320ustar00rootroot00000000000000auto SPU::captureVolume(u32 channel, s16 volume) -> void { u16 address = channel * 0x400 + capture.address; writeRAM(address, volume); } ares-126/ares/ps1/spu/debugger.cpp000066400000000000000000000005521415063341600170570ustar00rootroot00000000000000auto SPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("SPU RAM"); memory.ram->setSize(spu.ram.size); memory.ram->setRead([&](u32 address) -> u8 { return spu.ram.readByte(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return spu.ram.writeByte(address, data); }); } ares-126/ares/ps1/spu/envelope.cpp000066400000000000000000000022271415063341600171110ustar00rootroot00000000000000auto SPU::Envelope::reset(u8 rate, bool decreasing, bool exponential) -> void { this->rate = rate; this->decreasing = decreasing; this->exponential = exponential; auto& entry = spu.adsrEntries[decreasing][rate]; this->counter = entry.ticks; } auto SPU::Envelope::tick(s32 level) -> s16 { if(--counter > 0) return level; auto& entry = spu.adsrEntries[decreasing][rate]; counter = entry.ticks; s32 step = entry.step; if(exponential) { if(decreasing) { step = amplify(step, level); } else if(level >= 0x6000) { if(rate < 40) { step >>= 2; } else if(rate >= 44) { counter >>= 2; } else { step >>= 1; counter >>= 1; } } } level += step; if(level < 0x0000) level = 0x0000; if(level > 0x7fff) level = 0x7fff; return level; } auto SPU::VolumeSweep::reset() -> void { if(sweep == 0) { active = 0; current = level << 1; } else { active = 1; Envelope::reset(rate, decreasing, exponential); } } auto SPU::VolumeSweep::tick() -> void { if(active) { current = Envelope::tick(current); active = decreasing ? current > 0x0000 : current < 0x7fff; } } ares-126/ares/ps1/spu/fifo.cpp000066400000000000000000000034451415063341600162220ustar00rootroot00000000000000auto SPU::fifoReadBlock() -> void { if(transfer.type == 2) { for(u32 from : range(8)) { u16 data = readRAM(transfer.current); fifo.write(data); transfer.current += 2; } } if(transfer.type == 3) { for(u32 from : range(4)) { u16 data = readRAM(transfer.current); for(u32 to : range(2)) fifo.write(data); transfer.current += 4; } } if(transfer.type == 4) { for(u32 from : range(2)) { u16 data = readRAM(transfer.current); for(u32 to : range(4)) fifo.write(data); transfer.current += 8; } } if(transfer.type == 5) { u16 data = readRAM(transfer.current); for(u32 to : range(8)) fifo.write(data); transfer.current += 16; } if(transfer.type <= 1 || transfer.type >= 6) { u16 data = readRAM(transfer.current + 14); for(u32 to : range(8)) fifo.write(data); transfer.current += 16; } } auto SPU::fifoWriteBlock() -> void { u16 data[8]; for(auto& half : data) half = fifo.read(0); if(transfer.type == 2) { for(u32 from : range(8)) { writeRAM(transfer.current, data[from]); transfer.current += 2; } } if(transfer.type == 3) { for(u32 from : range(4)) { for(u32 to : range(2)) { writeRAM(transfer.current, data[from * 2]); transfer.current += 2; } } } if(transfer.type == 4) { for(u32 from : range(2)) { for(u32 to : range(4)) { writeRAM(transfer.current, data[from * 4]); transfer.current += 2; } } } if(transfer.type == 5) { for(u32 to : range(8)) { writeRAM(transfer.current, data[0]); transfer.current += 2; } } if(transfer.type <= 1 || transfer.type >= 6) { for(u32 to : range(8)) { writeRAM(transfer.current, data[7]); transfer.current += 2; } } } ares-126/ares/ps1/spu/gaussian.cpp000066400000000000000000000030211415063341600170770ustar00rootroot00000000000000auto SPU::gaussianConstructTable() -> void { fesetround(FE_TONEAREST); f64 table[512]; for(u32 n : range(512)) { f64 k = 0.5 + n; f64 s = (sin(Math::Pi * k * 2.048 / 1024)); f64 t = (cos(Math::Pi * k * 2.000 / 1023) - 1) * 0.50; f64 u = (cos(Math::Pi * k * 4.000 / 1023) - 1) * 0.08; f64 r = s * (t + u + 1.0) / k; table[511 - n] = r; } f64 sum = 0.0; for(u32 n : range(512)) sum += table[n]; f64 scale = 0x7f80 * 128 / sum; for(u32 n : range(512)) table[n] *= scale; for(u32 phase : range(128)) { f64 sum = 0.0; sum += table[phase + 0]; sum += table[phase + 256]; sum += table[511 - phase]; sum += table[255 - phase]; f64 diff = (sum - 0x7f80) / 4; gaussianTable[phase + 0] = nearbyint(table[phase + 0] - diff); gaussianTable[phase + 256] = nearbyint(table[phase + 256] - diff); gaussianTable[511 - phase] = nearbyint(table[511 - phase] - diff); gaussianTable[255 - phase] = nearbyint(table[255 - phase] - diff); } } auto SPU::Voice::gaussianRead(s8 index) const -> s32 { if(index < 0) return adpcm.previousSamples[index + 3]; return adpcm.currentSamples[index]; } auto SPU::Voice::gaussianInterpolate() const -> s32 { u8 g = counter >> 4 & 255; u8 s = counter >> 12 & 31; s32 out = 0; out += self.gaussianTable[255 - g] * gaussianRead(s - 3); out += self.gaussianTable[511 - g] * gaussianRead(s - 2); out += self.gaussianTable[256 + g] * gaussianRead(s - 1); out += self.gaussianTable[ 0 + g] * gaussianRead(s - 0); return out >> 15; } ares-126/ares/ps1/spu/io.cpp000066400000000000000000000453741415063341600157150ustar00rootroot00000000000000auto SPU::readRAM(u32 address) -> u16 { if(irq.enable && irq.address == u16(address >> 3)) { irq.flag = 1; interrupt.raise(Interrupt::SPU); } return ram.readHalf(address); } auto SPU::writeRAM(u32 address, u16 data) -> void { if(irq.enable && irq.address == u16(address >> 3)) { irq.flag = 1; interrupt.raise(Interrupt::SPU); } return ram.writeHalf(address, data); } auto SPU::readDMA() -> u32 { if(fifo.empty()) fifoReadBlock(); n32 data = fifo.read(0) << 0; return data | fifo.read(0) << 16; } auto SPU::writeDMA(u32 data) -> void { fifo.write(data >> 0); fifo.write(data >> 16); if(fifo.size() >= 8) fifoWriteBlock(); } auto SPU::readByte(u32 address) -> u32 { n16 data = readHalf(address & ~1); return data >> 8 * (address & 1) & 0xff; } auto SPU::readHalf(u32 address) -> u32 { n16 data = 0; u8 v = address >> 4 & 31; //volume left if((address & 0xffff'fe0f) == 0x1f80'1c00 && v < 24) { data.bit( 0,14) = voice[v].volume[0].level; data.bit(15) = voice[v].volume[0].sweep; } //volume right if((address & 0xffff'fe0f) == 0x1f80'1c02 && v < 24) { data.bit( 0,14) = voice[v].volume[1].level; data.bit(15) = voice[v].volume[1].sweep; } //ADPCM sample rate if((address & 0xffff'fe0f) == 0x1f80'1c04 && v < 24) { data.bit(0,15) = voice[v].adpcm.sampleRate; } //ADPCM start address if((address & 0xffff'fe0f) == 0x1f80'1c06 && v < 24) { data.bit(0,15) = voice[v].adpcm.startAddress >> 3; } //ADSR if((address & 0xffff'fe0f) == 0x1f80'1c08 && v < 24) { data.bit( 0, 3) = voice[v].sustain.level; data.bit( 4, 7) = voice[v].decay.rate; data.bit( 8,14) = voice[v].attack.rate; data.bit(15) = voice[v].attack.exponential; } //ADSR if((address & 0xffff'fe0f) == 0x1f80'1c0a && v < 24) { data.bit( 0, 4) = voice[v].release.rate; data.bit( 5) = voice[v].release.exponential; data.bit( 6,12) = voice[v].sustain.rate; data.bit(13) = voice[v].sustain.unknown; data.bit(14) = voice[v].sustain.decrease; data.bit(15) = voice[v].sustain.exponential; } //current ADSR volume if((address & 0xffff'fe0f) == 0x1f80'1c0c && v < 24) { data.bit(0,15) = voice[v].adsr.volume; } //ADPCM repeat address if((address & 0xffff'fe0f) == 0x1f80'1c0e && v < 24) { data.bit(0,15) = voice[v].adpcm.repeatAddress >> 3; } //main volume left if(address == 0x1f80'1d80) { data.bit( 0,14) = volume[0].level; data.bit(15) = volume[0].sweep; } //main volume right if(address == 0x1f80'1d82) { data.bit( 0,14) = volume[1].level; data.bit(15) = volume[1].sweep; } //vLOUT if(address == 0x1f80'1d84) { data.bit(0,15) = reverb.vLOUT; } //vROUT if(address == 0x1f80'1d86) { data.bit(0,15) = reverb.vROUT; } //KON if(address == 0x1f80'1d88) { for(u32 v : range(16)) data.bit(v) = voice[v].kon; } if(address == 0x1f80'1d8a) { for(u32 v : range( 8)) data.bit(v) = voice[v + 16].kon; } //KOFF if(address == 0x1f80'1d8c) { for(u32 v : range(16)) data.bit(v) = voice[v].koff; } if(address == 0x1f80'1d8e) { for(u32 v : range( 8)) data.bit(v) = voice[v + 16].koff; } //PMON if(address == 0x1f80'1d90) { for(u32 v : range(16)) data.bit(v) = voice[v].pmon; } if(address == 0x1f80'1d92) { for(u32 v : range( 8)) data.bit(v) = voice[v + 16].pmon; } //NON if(address == 0x1f80'1d94) { for(u32 v : range(16)) data.bit(v) = voice[v].non; } if(address == 0x1f80'1d96) { for(u32 v : range( 8)) data.bit(v) = voice[v + 16].non; } //EON if(address == 0x1f80'1d98) { for(u32 v : range(16)) data.bit(v) = voice[v].eon; } if(address == 0x1f80'1d9a) { for(u32 v : range( 8)) data.bit(v) = voice[v + 16].eon; } //ENDX if(address == 0x1f80'1d9c) { for(u32 v : range(16)) data.bit(v) = voice[v].endx; } if(address == 0x1f80'1d9e) { for(u32 v : range( 8)) data.bit(v) = voice[v + 16].endx; } //mBASE if(address == 0x1f80'1da2) { data.bit(0,15) = reverb.mBASE; } //RAM IRQ address if(address == 0x1f80'1da4) { data.bit(0,15) = irq.address; } //RAM transfer address if(address == 0x1f80'1da6) { data.bit(0,15) = transfer.address; } //RAM transfer data if(address == 0x1f80'1da8) { //write-only(?) } //SPUCNT if(address == 0x1f80'1daa) { data.bit( 0) = cdaudio.enable; data.bit( 1) = external.enable; data.bit( 2) = cdaudio.reverb; data.bit( 3) = external.reverb; data.bit( 4, 5) = transfer.mode; data.bit( 6) = irq.enable; data.bit( 7) = reverb.enable; data.bit( 8, 9) = noise.step; data.bit(10,13) = noise.shift; data.bit(14) = master.unmute; data.bit(15) = master.enable; } //SPURAMCNT if(address == 0x1f80'1dac) { data.bit(0) = transfer.unknown_0; data.bit(1,3) = transfer.type; data.bit(4,15) = transfer.unknown_4_15; } //SPUSTAT if(address == 0x1f80'1dae) { data.bit( 0) = cdaudio.enable; data.bit( 1) = external.enable; data.bit( 2) = cdaudio.reverb; data.bit( 3) = external.reverb; data.bit( 4, 5) = transfer.mode; data.bit( 6) = irq.flag; data.bit( 7) = transfer.mode.bit(1); data.bit( 8) = 0; //DMA read request data.bit( 9) = 0; //DMA write request data.bit(10) = 0; //transfer busy data.bit(11) = capture.address.bit(9); //in second-half of capture buffer } //CD audio volume left if(address == 0x1f80'1db0) { data.bit(0,15) = cdaudio.volume[0]; } //CD audio volume right if(address == 0x1f80'1db2) { data.bit(0,15) = cdaudio.volume[1]; } //external volume left if(address == 0x1f80'1db4) { data.bit(0,15) = external.volume[0]; } //external volume right if(address == 0x1f80'1db6) { data.bit(0,15) = external.volume[1]; } //current volume left if(address == 0x1f80'1db8) { data.bit(0,15) = current.volume[0]; } //current volume right if(address == 0x1f80'1dba) { data.bit(0,15) = current.volume[1]; } //dAPF1 if(address == 0x1f80'1dc0) { data.bit(0,15) = reverb.FB_SRC_A; } //dAPF2 if(address == 0x1f80'1dc2) { data.bit(0,15) = reverb.FB_SRC_B; } //vIIR if(address == 0x1f80'1dc4) { data.bit(0,15) = reverb.IIR_ALPHA; } //vCOMB1 if(address == 0x1f80'1dc6) { data.bit(0,15) = reverb.ACC_COEF_A; } //vCOMB2 if(address == 0x1f80'1dc8) { data.bit(0,15) = reverb.ACC_COEF_B; } //vCOMB3 if(address == 0x1f80'1dca) { data.bit(0,15) = reverb.ACC_COEF_C; } //vCOMB4 if(address == 0x1f80'1dcc) { data.bit(0,15) = reverb.ACC_COEF_D; } //vWALL if(address == 0x1f80'1dce) { data.bit(0,15) = reverb.IIR_COEF; } //vAPF1 if(address == 0x1f80'1dd0) { data.bit(0,15) = reverb.FB_ALPHA; } //vAPF2 if(address == 0x1f80'1dd2) { data.bit(0,15) = reverb.FB_X; } //mLSAME if(address == 0x1f80'1dd4) { data.bit(0,15) = reverb.IIR_DEST_A0; } //mRSAME if(address == 0x1f80'1dd6) { data.bit(0,15) = reverb.IIR_DEST_A1; } //mLCOMB1 if(address == 0x1f80'1dd8) { data.bit(0,15) = reverb.ACC_SRC_A0; } //mRCOMB1 if(address == 0x1f80'1dda) { data.bit(0,15) = reverb.ACC_SRC_A1; } //mLCOMB2 if(address == 0x1f80'1ddc) { data.bit(0,15) = reverb.ACC_SRC_B0; } //mRCOMB2 if(address == 0x1f80'1dde) { data.bit(0,15) = reverb.ACC_SRC_B1; } //dLSAME if(address == 0x1f80'1de0) { data.bit(0,15) = reverb.IIR_SRC_A0; } //dRSAME if(address == 0x1f80'1de2) { data.bit(0,15) = reverb.IIR_SRC_A1; } //mLDIFF if(address == 0x1f80'1de4) { data.bit(0,15) = reverb.IIR_DEST_B0; } //mRDIFF if(address == 0x1f80'1de6) { data.bit(0,15) = reverb.IIR_DEST_B1; } //mLCOMB3 if(address == 0x1f80'1de8) { data.bit(0,15) = reverb.ACC_SRC_C0; } //mRCOMB3 if(address == 0x1f80'1dea) { data.bit(0,15) = reverb.ACC_SRC_C1; } //mLCOMB4 if(address == 0x1f80'1dec) { data.bit(0,15) = reverb.ACC_SRC_D0; } //mRCOMB4 if(address == 0x1f80'1dee) { data.bit(0,15) = reverb.ACC_SRC_D1; } //dLDIFF if(address == 0x1f80'1df0) { data.bit(0,15) = reverb.IIR_SRC_B1; //misordered } //dRDIFF if(address == 0x1f80'1df2) { data.bit(0,15) = reverb.IIR_SRC_B0; //misordered } //mLAPF1 if(address == 0x1f80'1df4) { data.bit(0,15) = reverb.MIX_DEST_A0; } //mRAPF1 if(address == 0x1f80'1df6) { data.bit(0,15) = reverb.MIX_DEST_A1; } //mLAPF2 if(address == 0x1f80'1df8) { data.bit(0,15) = reverb.MIX_DEST_B0; } //mRAPF2 if(address == 0x1f80'1dfa) { data.bit(0,15) = reverb.MIX_DEST_B1; } //vLIN if(address == 0x1f80'1dfc) { data.bit(0,15) = reverb.IN_COEF_L; } //vRIN if(address == 0x1f80'1dfe) { data.bit(0,15) = reverb.IN_COEF_R; } v = address >> 2 & 31; //current volume left if((address & 0xffff'ff83) == 0x1f80'1e00) { data.bit(0,15) = voice[v].current.volume[0]; } //current volume right if((address & 0xffff'ff83) == 0x1f80'1e02) { data.bit(0,15) = voice[v].current.volume[1]; } return data; } auto SPU::readWord(u32 address) -> u32 { n32 data = readHalf(address & ~3 | 0) << 0; return data | readHalf(address & ~3 | 2) << 16; } auto SPU::writeByte(u32 address, u32 value) -> void { if(address & 1) return; //odd address writes are ignored writeHalf(address & ~1, value); } auto SPU::writeHalf(u32 address, u32 value) -> void { n16 data = value; u8 v = address >> 4 & 31; //volume left if((address & 0xffff'fe0f) == 0x1f80'1c00 && v < 24) { //normal voice[v].volume[0].level = data.bit( 0,14); //sweep voice[v].volume[0].rate = data.bit( 0, 6); voice[v].volume[0].negative = data.bit(12); voice[v].volume[0].decreasing = data.bit(13); voice[v].volume[0].exponential = data.bit(14); //mode voice[v].volume[0].sweep = data.bit(15); voice[v].volume[0].reset(); } //volume right if((address & 0xffff'fe0f) == 0x1f80'1c02 && v < 24) { //normal voice[v].volume[1].level = data.bit( 0,14); //sweep voice[v].volume[1].rate = data.bit( 0, 6); voice[v].volume[1].negative = data.bit(12); voice[v].volume[1].decreasing = data.bit(13); voice[v].volume[1].exponential = data.bit(14); //mode voice[v].volume[1].sweep = data.bit(15); voice[v].volume[1].reset(); } //ADPCM sample rate if((address & 0xffff'fe0f) == 0x1f80'1c04 && v < 24) { voice[v].adpcm.sampleRate = data.bit(0,15); } //ADPCM start address if((address & 0xffff'fe0f) == 0x1f80'1c06 && v < 24) { voice[v].adpcm.startAddress = data.bit(0,15) << 3; } //ADSR if((address & 0xffff'fe0f) == 0x1f80'1c08 && v < 24) { voice[v].sustain.level = data.bit( 0, 3); voice[v].decay.rate = data.bit( 4, 7); voice[v].attack.rate = data.bit( 8,14); voice[v].attack.exponential = data.bit(15); } //ADSR if((address & 0xffff'fe0f) == 0x1f80'1c0a && v < 24) { voice[v].release.rate = data.bit( 0, 4); voice[v].release.exponential = data.bit( 5); voice[v].sustain.rate = data.bit( 6,12); voice[v].sustain.unknown = data.bit(13); voice[v].sustain.decrease = data.bit(14); voice[v].sustain.exponential = data.bit(15); } //current ADSR volume if((address & 0xffff'fe0f) == 0x1f80'1c0c && v < 24) { voice[v].adsr.volume = data.bit(0,15); } //ADPCM repeat address if((address & 0xffff'fe0f) == 0x1f80'1c0e && v < 24) { voice[v].adpcm.repeatAddress = data.bit(0,15) << 3; voice[v].adpcm.ignoreLoopAddress = 1; } //main volume left if(address == 0x1f80'1d80) { //normal volume[0].level = data.bit( 0,14); //sweep volume[0].rate = data.bit( 0, 6); volume[0].negative = data.bit(12); volume[0].decreasing = data.bit(13); volume[0].exponential = data.bit(14); //mode volume[0].sweep = data.bit(15); volume[0].reset(); } //main volume right if(address == 0x1f80'1d82) { //normal volume[1].level = data.bit( 0,14); //sweep volume[1].rate = data.bit( 0, 6); volume[1].negative = data.bit(12); volume[1].decreasing = data.bit(13); volume[1].exponential = data.bit(14); //mode volume[1].sweep = data.bit(15); volume[1].reset(); } //vLOUT if(address == 0x1f80'1d84) { reverb.vLOUT = data.bit(0,15); } //vROUT if(address == 0x1f80'1d86) { reverb.vROUT = data.bit(0,15); } //KON if(address == 0x1f80'1d88) { for(u32 v : range(16)) voice[v].kon = data.bit(v); } if(address == 0x1f80'1d8a) { for(u32 v : range( 8)) voice[v + 16].kon = data.bit(v); } //KOFF if(address == 0x1f80'1d8c) { for(u32 v : range(16)) voice[v].koff = data.bit(v); } if(address == 0x1f80'1d8e) { for(u32 v : range( 8)) voice[v + 16].koff = data.bit(v); } //PMON if(address == 0x1f80'1d90) { for(u32 v : range(16)) voice[v].pmon = data.bit(v); } if(address == 0x1f80'1d92) { for(u32 v : range( 8)) voice[v + 16].pmon = data.bit(v); } //NON if(address == 0x1f80'1d94) { for(u32 v : range(16)) voice[v].non = data.bit(v); } if(address == 0x1f80'1d96) { for(u32 v : range( 8)) voice[v + 16].non = data.bit(v); } //EON if(address == 0x1f80'1d98) { for(u32 v : range(16)) voice[v].eon = data.bit(v); } if(address == 0x1f80'1d9a) { for(u32 v : range( 8)) voice[v + 16].eon = data.bit(v); } //ENDX if(address == 0x1f80'1d9c) { for(u32 v : range(16)) voice[v].endx = data.bit(v); } if(address == 0x1f80'1d9e) { for(u32 v : range( 8)) voice[v + 16].endx = data.bit(v); } //mBASE if(address == 0x1f80'1da2) { reverb.mBASE = data.bit(0,15); reverb.baseAddress = reverb.mBASE << 2; reverb.currentAddress = reverb.mBASE << 2; } //RAM IRQ address if(address == 0x1f80'1da4) { irq.address = data.bit(0,15); } //RAM transfer address if(address == 0x1f80'1da6) { transfer.address = data.bit(0,15); transfer.current = transfer.address << 3; } //RAM transfer data if(address == 0x1f80'1da8) { if(!fifo.full()) fifo.write(data); } //SPUCNT if(address == 0x1f80'1daa) { cdaudio.enable = data.bit( 0); external.enable = data.bit( 1); cdaudio.reverb = data.bit( 2); external.reverb = data.bit( 3); transfer.mode = data.bit( 4, 5); irq.enable = data.bit( 6); reverb.enable = data.bit( 7); noise.step = data.bit( 8, 9); noise.shift = data.bit(10,13); master.unmute = data.bit(14); master.enable = data.bit(15); if(transfer.mode == 0) { fifo.flush(); } if(transfer.mode == 1) { while(fifo.size() >= 8) fifoWriteBlock(); if(!fifo.empty()) debug(unhandled, "SPU::writeHalf: FIFO not empty"); } if(irq.enable == 0) { irq.flag = 0; interrupt.lower(Interrupt::SPU); } } //SPURAMCNT if(address == 0x1f80'1dac) { transfer.unknown_0 = data.bit(0); transfer.type = data.bit(1, 3); transfer.unknown_4_15 = data.bit(4,15); } //SPUSTAT if(address == 0x1f80'1dae) { //read-only } //CD audio volume left if(address == 0x1f80'1db0) { cdaudio.volume[0] = data.bit(0,15); } //CD audio volume right if(address == 0x1f80'1db2) { cdaudio.volume[1] = data.bit(0,15); } //external volume left if(address == 0x1f80'1db4) { external.volume[0] = data.bit(0,15); } //external volume right if(address == 0x1f80'1db6) { external.volume[1] = data.bit(0,15); } //current volume left if(address == 0x1f80'1db8) { current.volume[0] = data.bit(0,15); } //current volume right if(address == 0x1f80'1dba) { current.volume[1] = data.bit(0,15); } //dAPF1 if(address == 0x1f80'1dc0) { reverb.FB_SRC_A = data.bit(0,15); } //dAPF2 if(address == 0x1f80'1dc2) { reverb.FB_SRC_B = data.bit(0,15); } //vIIR if(address == 0x1f80'1dc4) { reverb.IIR_ALPHA = data.bit(0,15); } //vCOMB1 if(address == 0x1f80'1dc6) { reverb.ACC_COEF_A = data.bit(0,15); } //vCOMB2 if(address == 0x1f80'1dc8) { reverb.ACC_COEF_B = data.bit(0,15); } //vCOMB3 if(address == 0x1f80'1dca) { reverb.ACC_COEF_C = data.bit(0,15); } //vCOMB4 if(address == 0x1f80'1dcc) { reverb.ACC_COEF_D = data.bit(0,15); } //vWALL if(address == 0x1f80'1dce) { reverb.IIR_COEF = data.bit(0,15); } //vAPF1 if(address == 0x1f80'1dd0) { reverb.FB_ALPHA = data.bit(0,15); } //vAPF2 if(address == 0x1f80'1dd2) { reverb.FB_X = data.bit(0,15); } //mLSAME if(address == 0x1f80'1dd4) { reverb.IIR_DEST_A0 = data.bit(0,15); } //mRSAME if(address == 0x1f80'1dd6) { reverb.IIR_DEST_A1 = data.bit(0,15); } //mLCOMB1 if(address == 0x1f80'1dd8) { reverb.ACC_SRC_A0 = data.bit(0,15); } //mRCOMB1 if(address == 0x1f80'1dda) { reverb.ACC_SRC_A1 = data.bit(0,15); } //mLCOMB2 if(address == 0x1f80'1ddc) { reverb.ACC_SRC_B0 = data.bit(0,15); } //mRCOMB2 if(address == 0x1f80'1dde) { reverb.ACC_SRC_B1 = data.bit(0,15); } //dLSAME if(address == 0x1f80'1de0) { reverb.IIR_SRC_A0 = data.bit(0,15); } //dRSAME if(address == 0x1f80'1de2) { reverb.IIR_SRC_A1 = data.bit(0,15); } //mLDIFF if(address == 0x1f80'1de4) { reverb.IIR_DEST_B0 = data.bit(0,15); } //mRDIFF if(address == 0x1f80'1de6) { reverb.IIR_DEST_B1 = data.bit(0,15); } //mLCOMB3 if(address == 0x1f80'1de8) { reverb.ACC_SRC_C0 = data.bit(0,15); } //mRCOMB3 if(address == 0x1f80'1dea) { reverb.ACC_SRC_C1 = data.bit(0,15); } //mLCOMB4 if(address == 0x1f80'1dec) { reverb.ACC_SRC_D0 = data.bit(0,15); } //mRCOMB4 if(address == 0x1f80'1dee) { reverb.ACC_SRC_D1 = data.bit(0,15); } //dLDIFF if(address == 0x1f80'1df0) { reverb.IIR_SRC_B1 = data.bit(0,15); //misordered } //dRDIFF if(address == 0x1f80'1df2) { reverb.IIR_SRC_B0 = data.bit(0,15); //misordered } //mLAPF1 if(address == 0x1f80'1df4) { reverb.MIX_DEST_A0 = data.bit(0,15); } //mRAPF1 if(address == 0x1f80'1df6) { reverb.MIX_DEST_A1 = data.bit(0,15); } //mLAPF2 if(address == 0x1f80'1df8) { reverb.MIX_DEST_B0 = data.bit(0,15); } //mRAPF2 if(address == 0x1f80'1dfa) { reverb.MIX_DEST_B1 = data.bit(0,15); } //vLIN if(address == 0x1f80'1dfc) { reverb.IN_COEF_L = data.bit(0,15); } //vRIN if(address == 0x1f80'1dfe) { reverb.IN_COEF_R = data.bit(0,15); } v = address >> 2 & 31; //current volume left if((address & 0xffff'ff83) == 0x1f80'1e00 && v < 24) { voice[v].current.volume[0] = data.bit(0,15); } //current volume right if((address & 0xffff'ff83) == 0x1f80'1e02 && v < 24) { voice[v].current.volume[1] = data.bit(0,15); } } auto SPU::writeWord(u32 address, u32 data) -> void { writeHalf(address & ~3 | 0, data >> 0); writeHalf(address & ~3 | 2, data >> 16); } ares-126/ares/ps1/spu/noise.cpp000066400000000000000000000010251415063341600164040ustar00rootroot00000000000000auto SPU::Noise::update() -> void { static const u8 wave[64] = { 1,0,0,1,0,1,1,0, 1,0,0,1,0,1,1,0, 1,0,0,1,0,1,1,0, 1,0,0,1,0,1,1,0, 0,1,1,0,1,0,0,1, 0,1,1,0,1,0,0,1, 0,1,1,0,1,0,0,1, 0,1,1,0,1,0,0,1, }; static const u8 frequency[4] = {0, 84, 140, 180}; count += 0x10000 + frequency[step]; if(u16(count) >= 210) count = count + 0x10000 - frequency[step]; u32 limit = (0x8000 >> shift) << 16; if(count < limit) return; count %= limit; level = level << 1 | wave[level >> 10 & 63]; } ares-126/ares/ps1/spu/reverb.cpp000066400000000000000000000107561415063341600165670ustar00rootroot00000000000000auto SPU::Reverb::process(s16 linput, s16 rinput) -> std::pair { lastInput[0] = downsampleBuffer[0][resamplePosition | 0x00] = downsampleBuffer[0][resamplePosition | 0x40] = linput; lastInput[1] = downsampleBuffer[1][resamplePosition | 0x00] = downsampleBuffer[1][resamplePosition | 0x40] = rinput; s32 loutput = 0; s32 routput = 0; if(resamplePosition & 1) { compute(); loutput = r2244<1>(&upsampleBuffer[0][(resamplePosition - 39 & 0x3f) >> 1]); routput = r2244<1>(&upsampleBuffer[1][(resamplePosition - 39 & 0x3f) >> 1]); } else { loutput = r2244<0>(&upsampleBuffer[0][(resamplePosition - 39 & 0x3f) >> 1]); routput = r2244<0>(&upsampleBuffer[1][(resamplePosition - 39 & 0x3f) >> 1]); } resamplePosition++; lastOutput[0] = loutput = amplify(loutput, vLOUT); lastOutput[1] = routput = amplify(routput, vROUT); return {loutput, routput}; } auto SPU::Reverb::compute() -> void { s32 ldownsample = r4422(&downsampleBuffer[0][(resamplePosition - 39) & 0x3f]); s32 rdownsample = r4422(&downsampleBuffer[1][(resamplePosition - 39) & 0x3f]); if(enable) { s16 IIR_INPUT_A0 = sclamp<16>((read(IIR_SRC_A0) * IIR_COEF >> 15) + (ldownsample * IN_COEF_L >> 15)); s16 IIR_INPUT_A1 = sclamp<16>((read(IIR_SRC_A1) * IIR_COEF >> 15) + (rdownsample * IN_COEF_R >> 15)); s16 IIR_INPUT_B0 = sclamp<16>((read(IIR_SRC_B0) * IIR_COEF >> 15) + (ldownsample * IN_COEF_L >> 15)); s16 IIR_INPUT_B1 = sclamp<16>((read(IIR_SRC_B1) * IIR_COEF >> 15) + (rdownsample * IN_COEF_R >> 15)); s16 IIR_A0 = sclamp<16>(((IIR_INPUT_A0 * IIR_ALPHA >> 14) + (iiasm(read(IIR_DEST_A0, -1)) >> 14)) >> 1); s16 IIR_A1 = sclamp<16>(((IIR_INPUT_A1 * IIR_ALPHA >> 14) + (iiasm(read(IIR_DEST_A1, -1)) >> 14)) >> 1); s16 IIR_B0 = sclamp<16>(((IIR_INPUT_B0 * IIR_ALPHA >> 14) + (iiasm(read(IIR_DEST_B0, -1)) >> 14)) >> 1); s16 IIR_B1 = sclamp<16>(((IIR_INPUT_B1 * IIR_ALPHA >> 14) + (iiasm(read(IIR_DEST_B1, -1)) >> 14)) >> 1); write(IIR_DEST_A0, IIR_A0); write(IIR_DEST_A1, IIR_A1); write(IIR_DEST_B0, IIR_B0); write(IIR_DEST_B1, IIR_B1); s16 ACC0 = sclamp<16>(((read(ACC_SRC_A0) * ACC_COEF_A >> 14) + (read(ACC_SRC_B0) * ACC_COEF_B >> 14) + (read(ACC_SRC_C0) * ACC_COEF_C >> 14) + (read(ACC_SRC_D0) * ACC_COEF_D >> 14)) >> 1); s16 ACC1 = sclamp<16>(((read(ACC_SRC_A1) * ACC_COEF_A >> 14) + (read(ACC_SRC_B1) * ACC_COEF_B >> 14) + (read(ACC_SRC_C1) * ACC_COEF_C >> 14) + (read(ACC_SRC_D1) * ACC_COEF_D >> 14)) >> 1); s16 FB_A0 = read(MIX_DEST_A0 - FB_SRC_A); s16 FB_A1 = read(MIX_DEST_A1 - FB_SRC_A); s16 FB_B0 = read(MIX_DEST_B0 - FB_SRC_B); s16 FB_B1 = read(MIX_DEST_B1 - FB_SRC_B); write(MIX_DEST_A0, sclamp<16>(ACC0 - (FB_A0 * FB_ALPHA >> 15))); write(MIX_DEST_A1, sclamp<16>(ACC1 - (FB_A1 * FB_ALPHA >> 15))); write(MIX_DEST_B0, sclamp<16>((FB_ALPHA * ACC0 >> 15) - (FB_A0 * s16(0x8000 ^ FB_ALPHA) >> 15) - (FB_B0 * FB_X >> 15))); write(MIX_DEST_B1, sclamp<16>((FB_ALPHA * ACC1 >> 15) - (FB_A1 * s16(0x8000 ^ FB_ALPHA) >> 15) - (FB_B1 * FB_X >> 15))); } upsampleBuffer[0][resamplePosition >> 1 | 0x00] = upsampleBuffer[0][resamplePosition >> 1 | 0x20] = read(MIX_DEST_A0) + read(MIX_DEST_B0) >> 1; upsampleBuffer[1][resamplePosition >> 1 | 0x00] = upsampleBuffer[1][resamplePosition >> 1 | 0x20] = read(MIX_DEST_A1) + read(MIX_DEST_B1) >> 1; if(++currentAddress == 0) { currentAddress = baseAddress; } } auto SPU::Reverb::iiasm(s16 sample) -> s32 { if(IIR_ALPHA == -32768) return sample == -32768 ? 0 : sample * -65536; return sample * (32768 - IIR_ALPHA); } template auto SPU::Reverb::r2244(const i16* source) -> s32 { s32 output = 0; if(phase) { output = source[9]; } else { for(u32 n : range(20)) output += coefficients[n] * source[n]; output = sclamp<16>(output >> 14); } return output; } auto SPU::Reverb::r4422(const i16* source) -> s32 { s32 output = 0; for(u32 n : range(20)) output += coefficients[n] * source[n * 2]; output += 0x4000 * source[19]; return sclamp<16>(output >> 15); } auto SPU::Reverb::address(u32 address) -> u32 { u32 offset = currentAddress + (address & 0x3ffff); offset += baseAddress & s32(offset << 13) >> 31; return (offset & 0x3ffff) * 2; } auto SPU::Reverb::read(u32 virtualAddress, s32 offset) -> s16 { u32 realAddress = address((virtualAddress << 2) + offset); return spu.ram.readHalf(realAddress); } auto SPU::Reverb::write(u32 virtualAddress, s16 data) -> void { u32 realAddress = address(virtualAddress << 2); return spu.ram.writeHalf(realAddress, data); } ares-126/ares/ps1/spu/serialization.cpp000066400000000000000000000062621415063341600201540ustar00rootroot00000000000000auto SPU::serialize(serializer& s) -> void { Thread::serialize(s); s(ram); s(master.enable); s(master.unmute); s(noise.step); s(noise.shift); s(noise.level); s(noise.count); s(transfer.mode); s(transfer.type); s(transfer.address); s(transfer.current); s(transfer.unknown_0); s(transfer.unknown_4_15); s(irq.enable); s(irq.flag); s(irq.address); s(envelope.counter); s(envelope.rate); s(envelope.decreasing); s(envelope.exponential); for(auto& v : volume) { s(v.counter); s(v.rate); s(v.decreasing); s(v.exponential); s(v.active); s(v.sweep); s(v.negative); s(v.level); s(v.current); } s(cdaudio.enable); s(cdaudio.reverb); s(cdaudio.volume); s(external.enable); s(external.reverb); s(external.volume); s(current.volume); s(reverb.enable); s(reverb.vLOUT); s(reverb.vROUT); s(reverb.mBASE); s(reverb.FB_SRC_A); s(reverb.FB_SRC_B); s(reverb.IIR_ALPHA); s(reverb.ACC_COEF_A); s(reverb.ACC_COEF_B); s(reverb.ACC_COEF_C); s(reverb.ACC_COEF_D); s(reverb.IIR_COEF); s(reverb.FB_ALPHA); s(reverb.FB_X); s(reverb.IIR_DEST_A0); s(reverb.IIR_DEST_A1); s(reverb.ACC_SRC_A0); s(reverb.ACC_SRC_A1); s(reverb.ACC_SRC_B0); s(reverb.ACC_SRC_B1); s(reverb.IIR_SRC_A0); s(reverb.IIR_SRC_A1); s(reverb.IIR_DEST_B0); s(reverb.IIR_DEST_B1); s(reverb.ACC_SRC_C0); s(reverb.ACC_SRC_C1); s(reverb.ACC_SRC_D0); s(reverb.ACC_SRC_D1); s(reverb.IIR_SRC_B1); //misordered s(reverb.IIR_SRC_B0); //misordered s(reverb.MIX_DEST_A0); s(reverb.MIX_DEST_A1); s(reverb.MIX_DEST_B0); s(reverb.MIX_DEST_B1); s(reverb.IN_COEF_L); s(reverb.IN_COEF_R); s(reverb.lastInput); s(reverb.lastOutput); s(reverb.downsampleBuffer[0]); s(reverb.downsampleBuffer[1]); s(reverb.upsampleBuffer[0]); s(reverb.upsampleBuffer[1]); s(reverb.resamplePosition); s(reverb.baseAddress); s(reverb.currentAddress); for(auto& v : voice) { s(v.adpcm.startAddress); s(v.adpcm.repeatAddress); s(v.adpcm.sampleRate); s(v.adpcm.currentAddress); s(v.adpcm.hasSamples); s(v.adpcm.ignoreLoopAddress); s(v.adpcm.lastSamples); s(v.adpcm.previousSamples); s(v.adpcm.currentSamples); s(v.block.shift); s(v.block.filter); s(v.block.loopEnd); s(v.block.loopRepeat); s(v.block.loopStart); s(v.block.brr); s(v.attack.rate); s(v.attack.exponential); s(v.decay.rate); s(v.sustain.level); s(v.sustain.exponential); s(v.sustain.decrease); s(v.sustain.rate); s(v.sustain.unknown); s(v.release.exponential); s(v.release.rate); s((u32&)v.adsr.phase); s(v.adsr.volume); s(v.adsr.lastVolume); s(v.adsr.target); s(v.current.volume); for(auto& v : v.volume) { s(v.counter); s(v.rate); s(v.decreasing); s(v.exponential); s(v.active); s(v.sweep); s(v.negative); s(v.level); s(v.current); } s(v.envelope.counter); s(v.envelope.rate); s(v.envelope.decreasing); s(v.envelope.exponential); s(v.counter); s(v.pmon); s(v.non); s(v.eon); s(v.kon); s(v.koff); s(v.endx); } s(capture.address); s(fifo); } ares-126/ares/ps1/spu/spu.cpp000066400000000000000000000104311415063341600160770ustar00rootroot00000000000000#include namespace ares::PlayStation { auto amplify(s32 sample, s16 volume) -> s32 { return (s64)sample * volume >> 15; } SPU spu; #include "io.cpp" #include "fifo.cpp" #include "capture.cpp" #include "adsr.cpp" #include "gaussian.cpp" #include "adpcm.cpp" #include "reverb.cpp" #include "noise.cpp" #include "voice.cpp" #include "envelope.cpp" #include "debugger.cpp" #include "serialization.cpp" auto SPU::load(Node::Object parent) -> void { node = parent->append("SPU"); stream = node->append("SPU"); stream->setChannels(2); stream->setFrequency(44100.0); ram.allocate(512_KiB); adsrConstructTable(); gaussianConstructTable(); debugger.load(node); } auto SPU::unload() -> void { debugger = {}; ram.reset(); node->remove(stream); stream.reset(); node.reset(); } auto SPU::main() -> void { sample(); step(33'868'800 / 44'100); } auto SPU::sample() -> void { s32 lsum = 0, lreverb = 0; s32 rsum = 0, rreverb = 0; s16 lcdaudio = 0, rcdaudio = 0; s32 modulation = 0; for(auto& voice : this->voice) { auto [lvoice, rvoice] = voice.sample(modulation); modulation = voice.adsr.lastVolume; lsum += lvoice; rsum += rvoice; if(voice.eon) { lreverb += lvoice; rreverb += rvoice; } if(voice.koff) voice.keyOff(); if(voice.kon ) voice.keyOn(); } if(!master.unmute || !master.enable) { lsum = 0; rsum = 0; } noise.update(); if(cdaudio.enable) { lcdaudio = disc.cdda.sample.left + disc.cdxa.sample.left; rcdaudio = disc.cdda.sample.right + disc.cdxa.sample.right; lcdaudio = amplify(lcdaudio, cdaudio.volume[0]); rcdaudio = amplify(rcdaudio, cdaudio.volume[1]); lsum += lcdaudio; rsum += rcdaudio; if(cdaudio.reverb) { lreverb += lcdaudio; rreverb += rcdaudio; } } auto [lfb, rfb] = reverb.process(sclamp<16>(lreverb), sclamp<16>(rreverb)); lsum = amplify(sclamp<16>(lsum + lfb), volume[0].current); rsum = amplify(sclamp<16>(rsum + rfb), volume[1].current); volume[0].tick(); volume[1].tick(); captureVolume(0, lcdaudio); captureVolume(1, rcdaudio); captureVolume(2, sclamp<16>(voice[1].adsr.lastVolume)); captureVolume(3, sclamp<16>(voice[3].adsr.lastVolume)); capture.address += 2; stream->frame(lsum / 32768.0, rsum / 32768.0); } auto SPU::step(u32 clocks) -> void { Thread::clock += clocks; } auto SPU::power(bool reset) -> void { Thread::reset(); Memory::Interface::setWaitStates(17, 17, 18); ram.fill(); master = {}; noise.step = 0; noise.shift = 0; noise.level = 0; noise.count = 0; transfer = {}; irq = {}; envelope = {}; volume[0] = {}; volume[1] = {}; cdaudio = {}; external = {}; current = {}; reverb.enable = 0; reverb.vLOUT = 0; reverb.vROUT = 0; reverb.mBASE = 0; reverb.FB_SRC_A = 0; reverb.FB_SRC_B = 0; reverb.IIR_ALPHA = 0; reverb.ACC_COEF_A = 0; reverb.ACC_COEF_B = 0; reverb.ACC_COEF_C = 0; reverb.ACC_COEF_D = 0; reverb.IIR_COEF = 0; reverb.FB_ALPHA = 0; reverb.FB_X = 0; reverb.IIR_DEST_A0 = 0; reverb.IIR_DEST_A1 = 0; reverb.ACC_SRC_A0 = 0; reverb.ACC_SRC_A1 = 0; reverb.ACC_SRC_B0 = 0; reverb.ACC_SRC_B1 = 0; reverb.IIR_SRC_A0 = 0; reverb.IIR_SRC_A1 = 0; reverb.IIR_DEST_B0 = 0; reverb.IIR_DEST_B1 = 0; reverb.ACC_SRC_C0 = 0; reverb.ACC_SRC_C1 = 0; reverb.ACC_SRC_D0 = 0; reverb.ACC_SRC_C1 = 0; reverb.IIR_SRC_B1 = 0; reverb.IIR_SRC_B0 = 0; reverb.MIX_DEST_A0 = 0; reverb.MIX_DEST_A1 = 0; reverb.MIX_DEST_B0 = 0; reverb.MIX_DEST_B1 = 0; reverb.IN_COEF_L = 0; reverb.IN_COEF_R = 0; reverb.lastInput[0] = 0; reverb.lastInput[1] = 0; reverb.lastOutput[0] = 0; reverb.lastOutput[1] = 0; for(u32 x : range(2)) { for(u32 y : range(128)) reverb.downsampleBuffer[x][y] = 0; for(u32 y : range(64)) reverb.upsampleBuffer[x][y] = 0; } reverb.resamplePosition = 0; reverb.baseAddress = 0; reverb.currentAddress = 0; for(auto& v : voice) { v.adpcm = {}; v.block = {}; v.attack = {}; v.decay = {}; v.sustain = {}; v.release = {}; v.adsr = {}; v.current = {}; v.volume[0] = {}; v.volume[1] = {}; v.envelope = {}; v.counter = 0; v.pmon = 0; v.non = 0; v.eon = 0; v.kon = 0; v.koff = 0; v.endx = 0; } capture = {}; fifo.flush(); } } ares-126/ares/ps1/spu/spu.hpp000066400000000000000000000142151415063341600161100ustar00rootroot00000000000000//Sound Processing Unit struct SPU : Thread, Memory::Interface { Node::Object node; Node::Audio::Stream stream; Memory::Writable ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory ram; } memory; } debugger; //spu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto sample() -> void; auto step(u32 clocks) -> void; auto power(bool reset) -> void; //io.cpp auto readRAM(u32 address) -> u16; auto writeRAM(u32 address, u16 data) -> void; auto readDMA() -> u32; auto writeDMA(u32 data) -> void; auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //fifo.cpp auto fifoReadBlock() -> void; auto fifoWriteBlock() -> void; //capture.cpp auto captureVolume(u32 channel, s16 volume) -> void; //adsr.cpp auto adsrConstructTable() -> void; //gaussian.cpp auto gaussianConstructTable() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Master { n1 enable; n1 unmute; } master; struct Noise { SPU& self; Noise(SPU& self) : self(self) {} //noise.cpp auto update() -> void; n2 step; n4 shift; //internal: n32 level; n32 count; } noise{*this}; struct ADSREntry { //unserialized: s32 ticks; s32 step; } adsrEntries[2][128]; struct Transfer { n2 mode; n3 type; n16 address; n19 current; n1 unknown_0; n12 unknown_4_15; } transfer; struct IRQ { n1 enable; n1 flag; n16 address; } irq; struct Envelope { //envelope.cpp auto reset(u8 rate, bool decreasing, bool exponential) -> void; auto tick(s32 level) -> s16; i32 counter; n7 rate; n1 decreasing; n1 exponential; } envelope; struct VolumeSweep : Envelope { //envelope.cpp auto reset() -> void; auto tick() -> void; n1 active; n1 sweep; n1 negative; i15 level; i16 current; } volume[2]; struct CDAudio { n1 enable; n1 reverb; n16 volume[2]; } cdaudio; struct External { n1 enable; n1 reverb; n16 volume[2]; } external; struct Current { n16 volume[2]; } current; struct Reverb { SPU& self; Reverb(SPU& self) : self(self) {} //reverb.cpp auto process(s16 linput, s16 rinput) -> std::pair; auto compute() -> void; auto iiasm(s16 sample) -> s32; template auto r2244(const i16* source) -> s32; auto r4422(const i16* source) -> s32; auto address(u32 address) -> u32; auto read(u32 address, s32 offset = 0) -> s16; auto write(u32 address, s16 data) -> void; n1 enable; n16 vLOUT; n16 vROUT; n16 mBASE; n16 FB_SRC_A; n16 FB_SRC_B; i16 IIR_ALPHA; i16 ACC_COEF_A; i16 ACC_COEF_B; i16 ACC_COEF_C; i16 ACC_COEF_D; i16 IIR_COEF; i16 FB_ALPHA; i16 FB_X; n16 IIR_DEST_A0; n16 IIR_DEST_A1; n16 ACC_SRC_A0; n16 ACC_SRC_A1; n16 ACC_SRC_B0; n16 ACC_SRC_B1; n16 IIR_SRC_A0; n16 IIR_SRC_A1; n16 IIR_DEST_B0; n16 IIR_DEST_B1; n16 ACC_SRC_C0; n16 ACC_SRC_C1; n16 ACC_SRC_D0; n16 ACC_SRC_D1; n16 IIR_SRC_B1; //misordered n16 IIR_SRC_B0; //misordered n16 MIX_DEST_A0; n16 MIX_DEST_A1; n16 MIX_DEST_B0; n16 MIX_DEST_B1; i16 IN_COEF_L; i16 IN_COEF_R; //internal: i16 lastInput[2]; i32 lastOutput[2]; i16 downsampleBuffer[2][128]; i16 upsampleBuffer[2][64]; n6 resamplePosition; n18 baseAddress; n18 currentAddress; static constexpr s16 coefficients[20] = { -1, +2, -10, +35, -103, +266, -616, +1332, -2960, +10246, +10246, -2960, +1332, -616, +266, -103, +35, -10, +2, -1, }; } reverb{*this}; struct Voice { SPU& self; const u32 id; Voice(SPU& self, u32 id) : self(self), id(id) {} //voice.app auto sample(s32 modulation) -> std::pair; auto tickEnvelope() -> void; auto advancePhase() -> void; auto updateEnvelope() -> void; auto forceOff() -> void; auto keyOff() -> void; auto keyOn() -> void; //adpcm.cpp auto readBlock() -> void; auto decodeBlock() -> void; //gaussian.cpp auto gaussianRead(s8 index) const -> s32; auto gaussianInterpolate() const -> s32; struct ADPCM { n19 startAddress; n19 repeatAddress; n16 sampleRate; //internal: n19 currentAddress; n1 hasSamples; n1 ignoreLoopAddress; i16 lastSamples[2]; i16 previousSamples[3]; i16 currentSamples[28]; } adpcm; struct Block { //header n4 shift; n3 filter; //flags n1 loopEnd; n1 loopRepeat; n1 loopStart; //samples n4 brr[28]; } block; struct Attack { n7 rate; n1 exponential; } attack; struct Decay { n4 rate; } decay; struct Sustain { n4 level; n1 exponential; n1 decrease; n7 rate; n1 unknown; } sustain; struct Release { n1 exponential; n5 rate; } release; struct ADSR { enum class Phase : u32 { Off, Attack, Decay, Sustain, Release }; Phase phase = Phase::Off; i16 volume; //internal: i32 lastVolume; i16 target; } adsr; struct Current { n16 volume[2]; } current; VolumeSweep volume[2]; Envelope envelope; n32 counter; n1 pmon; n1 non; n1 eon; n1 kon; n1 koff; n1 endx; } voice[24] = { {*this, 0}, {*this, 1}, {*this, 2}, {*this, 3}, {*this, 4}, {*this, 5}, {*this, 6}, {*this, 7}, {*this, 8}, {*this, 9}, {*this, 10}, {*this, 11}, {*this, 12}, {*this, 13}, {*this, 14}, {*this, 15}, {*this, 16}, {*this, 17}, {*this, 18}, {*this, 19}, {*this, 20}, {*this, 21}, {*this, 22}, {*this, 23}, }; struct Capture { n10 address; } capture; queue fifo; //unserialized: s16 gaussianTable[512]; }; extern SPU spu; ares-126/ares/ps1/spu/voice.cpp000066400000000000000000000062621415063341600164040ustar00rootroot00000000000000auto SPU::Voice::sample(s32 modulation) -> std::pair { if(adsr.phase == ADSR::Phase::Off && !self.irq.enable) { adsr.lastVolume = 0; return {0, 0}; } s32 l = 0; s32 r = 0; if(!adpcm.hasSamples) { readBlock(); decodeBlock(); adpcm.hasSamples = 1; if(block.loopStart && !adpcm.ignoreLoopAddress) { adpcm.repeatAddress = adpcm.currentAddress; } } s32 volume = 0; if(non) { volume = self.noise.level; } else { volume = gaussianInterpolate(); } volume = amplify(volume, adsr.volume); adsr.lastVolume = volume; if(adsr.phase != ADSR::Phase::Off) tickEnvelope(); u16 step = adpcm.sampleRate; if(pmon) step = amplify(step, sclamp<16>(modulation) + 0x8000); counter += uclamp<14>(step); if(counter >> 12 >= 28) { counter -= 28 << 12; adpcm.hasSamples = 0; adpcm.currentAddress += 16; if(block.loopEnd) { endx = 1; if(!block.loopRepeat) { forceOff(); } else { adpcm.currentAddress = adpcm.repeatAddress & ~15; } } } l = amplify(volume, this->volume[0].current); r = amplify(volume, this->volume[1].current); this->volume[0].tick(); this->volume[1].tick(); return {l, r}; } auto SPU::Voice::tickEnvelope() -> void { if(adsr.phase == ADSR::Phase::Off) return; adsr.volume = envelope.tick(adsr.volume); if(envelope.decreasing == 0 && adsr.volume >= adsr.target) advancePhase(); if(envelope.decreasing == 1 && adsr.volume <= adsr.target) advancePhase(); } auto SPU::Voice::advancePhase() -> void { switch(adsr.phase) { case ADSR::Phase::Attack: adsr.phase = ADSR::Phase::Decay; return updateEnvelope(); case ADSR::Phase::Decay: adsr.phase = ADSR::Phase::Sustain; return updateEnvelope(); case ADSR::Phase::Sustain: adsr.phase = ADSR::Phase::Sustain; return; //holds until key off case ADSR::Phase::Release: adsr.phase = ADSR::Phase::Off; return updateEnvelope(); } } auto SPU::Voice::updateEnvelope() -> void { switch(adsr.phase) { case ADSR::Phase::Off: adsr.target = 0; envelope.reset(0, 0, 0); break; case ADSR::Phase::Attack: adsr.target = 0x7fff; envelope.reset(attack.rate, 0, attack.exponential); break; case ADSR::Phase::Decay: adsr.target = uclamp<15>(sustain.level + 1 << 11); envelope.reset(decay.rate << 2, 1, 1); break; case ADSR::Phase::Sustain: adsr.target = 0; envelope.reset(sustain.rate, sustain.decrease, sustain.exponential); break; case ADSR::Phase::Release: adsr.target = 0; envelope.reset(release.rate << 2, 1, release.exponential); break; } } auto SPU::Voice::forceOff() -> void { if(adsr.phase == ADSR::Phase::Off) return; adsr.phase = ADSR::Phase::Off; adsr.volume = 0; } auto SPU::Voice::keyOff() -> void { koff = 0; if(adsr.phase == ADSR::Phase::Off) return; if(adsr.phase == ADSR::Phase::Release) return; adsr.phase = ADSR::Phase::Release; updateEnvelope(); } auto SPU::Voice::keyOn() -> void { kon = 0; adpcm.currentAddress = adpcm.startAddress & ~15; adpcm.hasSamples = 0; adpcm.ignoreLoopAddress = 0; adpcm.lastSamples[0] = 0; adpcm.lastSamples[1] = 0; adsr.phase = ADSR::Phase::Attack; adsr.volume = 0; updateEnvelope(); } ares-126/ares/ps1/system/000077500000000000000000000000001415063341600153025ustar00rootroot00000000000000ares-126/ares/ps1/system/serialization.cpp000066400000000000000000000020531415063341600206630ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(/* reset = */ false); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { s(memory); s(cpu); s(gpu); s(spu); s(mdec); s(disc); s(controllerPort1); s(memoryCardPort1); s(controllerPort2); s(memoryCardPort2); s(interrupt); s(peripheral); s(dma); s(timer); } ares-126/ares/ps1/system/system.cpp000066400000000000000000000054571415063341600173450ustar00rootroot00000000000000#include namespace ares::PlayStation { auto enumerate() -> vector { return { "[Sony] PlayStation (NTSC-J)", "[Sony] PlayStation (NTSC-U)", "[Sony] PlayStation (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } System system; #include "serialization.cpp" auto System::game() -> string { if(disc.cd) { return disc.title(); } return "(no disc inserted)"; } auto System::run() -> void { while(!gpu.refreshed) cpu.main(); gpu.refreshed = false; } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("PlayStation")) { information.name = "PlayStation"; } if(name.find("NTSC-J")) { information.region = Region::NTSCJ; } if(name.find("NTSC-U")) { information.region = Region::NTSCU; } if(name.find("PAL")) { information.region = Region::PAL; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; fastBoot = node->append("Fast Boot", false); memory.load(node); cpu.load(node); gpu.load(node); spu.load(node); mdec.load(node); disc.load(node); controllerPort1.load(node); memoryCardPort1.load(node); controllerPort2.load(node); memoryCardPort2.load(node); interrupt.load(node); peripheral.load(node); dma.load(node); timer.load(node); bios.allocate(512_KiB); if(auto fp = pak->read("bios.rom")) { bios.load(fp); } return true; } auto System::unload() -> void { if(!node) return; save(); memory.unload(); cpu.unload(); gpu.unload(); spu.unload(); mdec.unload(); disc.unload(); controllerPort1.unload(); memoryCardPort1.unload(); controllerPort2.unload(); memoryCardPort2.unload(); interrupt.unload(); peripheral.unload(); dma.unload(); timer.unload(); fastBoot.reset(); pak.reset(); node.reset(); } auto System::save() -> void { if(!node) return; } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); if constexpr(Accuracy::CPU::Recompiler) { ares::Memory::FixedAllocator::get().release(); } bios.setWaitStates(6, 12, 24); memory.power(reset); cpu.power(reset); gpu.power(reset); spu.power(reset); mdec.power(reset); disc.power(reset); interrupt.power(reset); peripheral.power(reset); dma.power(reset); timer.power(reset); } } ares-126/ares/ps1/system/system.hpp000066400000000000000000000020341415063341600173360ustar00rootroot00000000000000struct System { Node::System node; Node::Setting::Boolean fastBoot; VFS::Pak pak; enum class Region : u32 { NTSCJ, NTSCU, PAL }; auto name() const -> string { return information.name; } auto region() const -> Region { return information.region; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(bool synchronize = true) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "PlayStation"; Region region = Region::NTSCJ; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Region::NTSCJ() -> bool { return system.region() == System::Region::NTSCJ; } auto Region::NTSCU() -> bool { return system.region() == System::Region::NTSCU; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/ps1/timer/000077500000000000000000000000001415063341600150765ustar00rootroot00000000000000ares-126/ares/ps1/timer/io.cpp000066400000000000000000000047321415063341600162170ustar00rootroot00000000000000auto Timer::readByte(u32 address) -> u32 { return readWord(address & ~3) >> 8 * (address & 3); } auto Timer::readHalf(u32 address) -> u32 { return readWord(address & ~3) >> 8 * (address & 3); } auto Timer::readWord(u32 address) -> u32 { n32 data; u32 c = address >> 4 & 3; if((address & 0xffff'ffcf) == 0x1f80'1100 && c <= 2) { data.bit(0,15) = timers[c].counter; } if((address & 0xffff'ffcf) == 0x1f80'1104 && c <= 2) { data.bit( 0) = timers[c].synchronize; data.bit( 1, 2) = timers[c].mode; data.bit( 3) = timers[c].resetMode; data.bit( 4) = timers[c].irqOnTarget; data.bit( 5) = timers[c].irqOnSaturate; data.bit( 6) = timers[c].irqRepeat; data.bit( 7) = timers[c].irqMode; data.bit( 8) = timers[c].clock; data.bit( 9) = timers[c].divider; data.bit(10) = timers[c].irqLine; data.bit(11) = timers[c].reachedTarget; data.bit(12) = timers[c].reachedSaturate; data.bit(13,15) = timers[c].unknown; timers[c].reachedTarget = 0; timers[c].reachedSaturate = 0; } if((address & 0xffff'ffcf) == 0x1f80'1108 && c <= 2) { data.bit(0,15) = timers[c].target; } return data; } auto Timer::writeByte(u32 address, u32 data) -> void { return writeWord(address & ~3, data << 8 * (address & 3)); } auto Timer::writeHalf(u32 address, u32 data) -> void { return writeWord(address & ~3, data << 8 * (address & 3)); } auto Timer::writeWord(u32 address, u32 value) -> void { n32 data = value; u32 c = address >> 4 & 3; if((address & 0xffff'ffcf) == 0x1f80'1100 && c <= 2) { timers[c].reset(); } if((address & 0xffff'ffcf) == 0x1f80'1104 && c <= 2) { timers[c].synchronize = data.bit( 0); timers[c].mode = data.bit( 1, 2); timers[c].resetMode = data.bit( 3); timers[c].irqOnTarget = data.bit( 4); timers[c].irqOnSaturate = data.bit( 5); timers[c].irqRepeat = data.bit( 6); timers[c].irqMode = data.bit( 7); timers[c].clock = data.bit( 8); timers[c].divider = data.bit( 9); timers[c].irqLine = 1; timers[c].unknown = data.bit(13,15); if(c == 0) timers[0].paused = timers[0].mode == 3; if(c == 1) timers[1].paused = timers[1].mode == 3; if(c == 2) timers[2].paused = timers[2].mode == 3 || timers[2].mode == 0; timers[c].counter = 0; timers[c].irqTriggered = 0; } if((address & 0xffff'ffcf) == 0x1f80'1108 && c <= 2) { timers[c].target = data.bit(0,15); } } ares-126/ares/ps1/timer/serialization.cpp000066400000000000000000000007161415063341600204630ustar00rootroot00000000000000auto Timer::serialize(serializer& s) -> void { s(counter.dotclock); s(counter.divclock); for(auto& t : timers) { s(t.counter); s(t.target); s(t.synchronize); s(t.mode); s(t.resetMode); s(t.irqOnTarget); s(t.irqOnSaturate); s(t.irqRepeat); s(t.irqMode); s(t.clock); s(t.divider); s(t.irqLine); s(t.reachedTarget); s(t.reachedSaturate); s(t.unknown); s(t.paused); s(t.irqTriggered); } } ares-126/ares/ps1/timer/timer.cpp000066400000000000000000000064321415063341600167270ustar00rootroot00000000000000#include namespace ares::PlayStation { Timer timer; #include "io.cpp" #include "serialization.cpp" auto Timer::load(Node::Object parent) -> void { node = parent->append("Timer"); } auto Timer::unload() -> void { node.reset(); } auto Timer::step(u32 clocks) -> void { counter.dotclock += clocks; counter.divclock += clocks; { if(timers[0].clock == 0) { timers[0].step(clocks); } if(timers[1].clock == 0) { timers[1].step(clocks); } if(timers[2].divider == 0) { if(timers[2].synchronize == 0 || timers[2].mode == 1 || timers[2].mode == 2) { timers[2].step(clocks); } } } while(counter.dotclock >= 5) { counter.dotclock -= 5; if(timers[0].clock == 1) { timers[0].step(); } } while(counter.divclock >= 8) { counter.divclock -= 8; if(timers[2].divider == 1) { if(timers[2].synchronize == 0 || timers[2].mode == 1 || timers[2].mode == 2) { timers[2].step(); } } } } auto Timer::hsync(bool line) -> void { if(timers[0].synchronize) switch(timers[0].mode) { case 0: timers[0].paused = line == 1; break; case 1: if(line == 1) timers[0].counter = 0; break; case 2: if(line == 1) timers[0].counter = 0; timers[0].paused = line == 0; break; case 3: if(line == 1) timers[0].paused = timers[0].synchronize = 0; break; } if(timers[1].clock == 1 && line == 1) { timers[1].step(); } } auto Timer::vsync(bool line) -> void { if(timers[1].synchronize) switch(timers[1].mode) { case 0: timers[1].paused = line == 1; break; case 1: if(line == 1) timers[1].counter = 0; break; case 2: if(line == 1) timers[1].counter = 0; timers[1].paused = line == 0; break; case 3: if(line == 1) timers[1].paused = timers[1].synchronize = 0; break; } } auto Timer::power(bool reset) -> void { Memory::Interface::setWaitStates(2, 2, 2); counter.dotclock = 0; counter.divclock = 0; for(auto& timer : timers) { timer.counter = 0; timer.target = 0; timer.synchronize = 0; timer.mode = 0; timer.resetMode = 0; timer.irqOnTarget = 0; timer.irqOnSaturate = 0; timer.irqRepeat = 0; timer.irqMode = 0; timer.clock = 0; timer.divider = 0; timer.irqLine = 1; timer.reachedTarget = 0; timer.reachedSaturate = 0; timer.unknown = 0; timer.paused = 0; timer.irqTriggered = 0; } } auto Timer::Source::step(u32 clocks) -> void { if(synchronize && paused) return; while(clocks--) { counter++; //counter value can be read in the range of 0..target (inclusive) if(u16(counter - 1) == target) { reachedTarget = 1; if(resetMode == 1) counter = 0; if(irqOnTarget) irq(); } if(counter == 0xffff) { reachedSaturate = 1; if(resetMode == 0) counter = 0; if(irqOnSaturate) irq(); } } } auto Timer::Source::irq() -> void { if(!irqTriggered) { if(irqMode == 0) { interrupt.pulse(Interrupt::Timer0 + id); } else { irqLine = !irqLine; if(!irqLine) interrupt.pulse(Interrupt::Timer0 + id); } if(!irqRepeat) irqTriggered = 1; } } auto Timer::Source::reset() -> void { counter = 0; switch(id) { case 0: paused = mode == 3; break; case 1: paused = mode == 3; break; case 2: paused = mode == 3 || mode == 0; break; } } } ares-126/ares/ps1/timer/timer.hpp000066400000000000000000000024351415063341600167330ustar00rootroot00000000000000struct Timer : Memory::Interface { Node::Object node; //timer.cpp auto load(Node::Object) -> void; auto unload() -> void; auto step(u32 clocks) -> void; auto hsync(bool line) -> void; auto vsync(bool line) -> void; auto power(bool reset) -> void; //io.cpp auto readByte(u32 address) -> u32; auto readHalf(u32 address) -> u32; auto readWord(u32 address) -> u32; auto writeByte(u32 address, u32 data) -> void; auto writeHalf(u32 address, u32 data) -> void; auto writeWord(u32 address, u32 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Counter { u32 dotclock; u32 divclock; } counter; struct Source { Timer& self; const u32 id; Source(Timer& self, u32 id) : self(self), id(id) {} //timer.cpp auto step(u32 clocks = 1) -> void; auto irq() -> void; auto reset() -> void; n16 counter; n16 target; n1 synchronize; n2 mode; n1 resetMode; n1 irqOnTarget; n1 irqOnSaturate; n1 irqRepeat; n1 irqMode; n1 clock; n1 divider; n1 irqLine; //0 = active n1 reachedTarget; n1 reachedSaturate; n3 unknown; //internal: n1 paused; n1 irqTriggered; } timers[3] = {{*this, 0}, {*this, 1}, {*this, 2}}; }; extern Timer timer; ares-126/ares/saturn/000077500000000000000000000000001415063341600145675ustar00rootroot00000000000000ares-126/ares/saturn/GNUmakefile000066400000000000000000000002371415063341600166430ustar00rootroot00000000000000ares.components += sh2 ares.components += m68k ares.objects += ares-saturn-system $(object.path)/ares-saturn-system.o: $(ares.path)/saturn/system/system.cpp ares-126/ares/saturn/saturn.hpp000066400000000000000000000011401415063341600166100ustar00rootroot00000000000000#pragma once //started: 2021-03-31 #include #include #include namespace ares::Saturn { auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Region { static inline auto NTSCJ() -> bool; static inline auto NTSCU() -> bool; static inline auto PAL() -> bool; }; struct Thread { auto reset() -> void { clock = 0; } auto serialize(serializer& s) -> void { s(clock); } s64 clock; }; #include } ares-126/ares/saturn/system/000077500000000000000000000000001415063341600161135ustar00rootroot00000000000000ares-126/ares/saturn/system/serialization.cpp000066400000000000000000000015321415063341600214750ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(/* reset =*/ false); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { } ares-126/ares/saturn/system/system.cpp000066400000000000000000000030371415063341600201460ustar00rootroot00000000000000#include namespace ares::Saturn { auto enumerate() -> vector { return { "[Sega] Saturn (NTSC-J)", "[Sega] Saturn (NTSC-U)", "[Sega] Saturn (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } System system; #include "serialization.cpp" auto System::game() -> string { return "(no disc loaded)"; } auto System::run() -> void { } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Saturn")) { information.name = "Saturn"; } if(name.find("NTSC-J")) { information.region = Region::NTSCJ; } if(name.find("NTSC-U")) { information.region = Region::NTSCU; } if(name.find("PAL")) { information.region = Region::PAL; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; return true; } auto System::unload() -> void { if(!node) return; save(); node.reset(); } auto System::save() -> void { if(!node) return; } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); } } ares-126/ares/saturn/system/system.hpp000066400000000000000000000017601415063341600201540ustar00rootroot00000000000000struct System { Node::System node; VFS::Pak pak; enum class Region : u32 { NTSCJ, NTSCU, PAL }; auto name() const -> string { return information.name; } auto region() const -> Region { return information.region; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(bool synchronize = true) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Saturn"; Region region = Region::NTSCJ; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Region::NTSCJ() -> bool { return system.region() == System::Region::NTSCJ; } auto Region::NTSCU() -> bool { return system.region() == System::Region::NTSCU; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/sfc/000077500000000000000000000000001415063341600140265ustar00rootroot00000000000000ares-126/ares/sfc/GNUmakefile000066400000000000000000000024631415063341600161050ustar00rootroot00000000000000ares.components += wdc65816 ares.components += spc700 ares.components += arm7tdmi ares.components += gsu ares.components += hg51b ares.components += upd96050 ares.objects += ares-sfc-system ares.objects += ares-sfc-controller ares.objects += ares-sfc-cartridge ares.objects += ares-sfc-memory ares.objects += ares-sfc-cpu ares.objects += ares-sfc-smp ares.objects += ares-sfc-dsp ares.objects += ares-sfc-ppu ares.objects += ares-sfc-coprocessor ares.objects += ares-sfc-expansion ares.objects += ares-sfc-slot $(object.path)/ares-sfc-system.o: $(ares.path)/sfc/system/system.cpp $(object.path)/ares-sfc-controller.o: $(ares.path)/sfc/controller/controller.cpp $(object.path)/ares-sfc-cartridge.o: $(ares.path)/sfc/cartridge/cartridge.cpp $(object.path)/ares-sfc-memory.o: $(ares.path)/sfc/memory/memory.cpp $(object.path)/ares-sfc-cpu.o: $(ares.path)/sfc/cpu/cpu.cpp $(object.path)/ares-sfc-smp.o: $(ares.path)/sfc/smp/smp.cpp $(object.path)/ares-sfc-dsp.o: $(ares.path)/sfc/dsp/dsp.cpp $(object.path)/ares-sfc-ppu.o: $(ares.path)/sfc/ppu/ppu.cpp $(object.path)/ares-sfc-coprocessor.o: $(ares.path)/sfc/coprocessor/coprocessor.cpp $(object.path)/ares-sfc-expansion.o: $(ares.path)/sfc/expansion/expansion.cpp $(object.path)/ares-sfc-slot.o: $(ares.path)/sfc/slot/slot.cpp ares-126/ares/sfc/cartridge/000077500000000000000000000000001415063341600157725ustar00rootroot00000000000000ares-126/ares/sfc/cartridge/cartridge.cpp000066400000000000000000000055301415063341600204450ustar00rootroot00000000000000#include namespace ares::SuperFamicom { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "load.cpp" #include "save.cpp" #include "debugger.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { node = parent->append(string{system.name(), " Cartridge"}); debugger.load(node); return node; } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; has = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.board = pak->attribute("board"); loadCartridge(); if(has.SA1) sa1.load(node); if(has.SuperFX) superfx.load(node); if(has.ARMDSP) armdsp.load(node); if(has.HitachiDSP) hitachidsp.load(node); if(has.NECDSP) necdsp.load(node); if(has.EpsonRTC) epsonrtc.load(node); if(has.SharpRTC) sharprtc.load(node); if(has.MSU1) msu1.load(node); if(has.GameBoySlot) icd.load(node); if(has.BSMemorySlot) bsmemorySlot.load(node); if(has.SufamiTurboSlotA) sufamiturboSlotA.load(node); if(has.SufamiTurboSlotB) sufamiturboSlotB.load(node); power(false); } auto Cartridge::disconnect() -> void { if(!node) return; if(has.ICD) icd.unload(); if(has.MCC) mcc.unload(); if(has.Competition) competition.unload(); if(has.SA1) sa1.unload(); if(has.SuperFX) superfx.unload(); if(has.ARMDSP) armdsp.unload(); if(has.HitachiDSP) hitachidsp.unload(); if(has.NECDSP) necdsp.unload(); if(has.EpsonRTC) epsonrtc.unload(); if(has.SharpRTC) sharprtc.unload(); if(has.SPC7110) spc7110.unload(); if(has.SDD1) sdd1.unload(); if(has.OBC1) obc1.unload(); if(has.MSU1) msu1.unload(node); if(has.BSMemorySlot) bsmemorySlot.unload(); if(has.SufamiTurboSlotA) sufamiturboSlotA.unload(); if(has.SufamiTurboSlotB) sufamiturboSlotB.unload(); rom.reset(); ram.reset(); bus.reset(); pak.reset(); node.reset(); } auto Cartridge::power(bool reset) -> void { if(has.ICD) icd.power(); if(has.MCC) mcc.power(); if(has.DIP) dip.power(); if(has.Competition) competition.power(); if(has.SA1) sa1.power(); if(has.SuperFX) superfx.power(); if(has.ARMDSP) armdsp.power(); if(has.HitachiDSP) hitachidsp.power(); if(has.NECDSP) necdsp.power(); if(has.EpsonRTC) epsonrtc.power(); if(has.SharpRTC) sharprtc.power(); if(has.SPC7110) spc7110.power(); if(has.SDD1) sdd1.power(); if(has.OBC1) obc1.power(); if(has.MSU1) msu1.power(); if(has.BSMemorySlot) bsmemory.power(); if(has.SufamiTurboSlotA) sufamiturboA.power(); if(has.SufamiTurboSlotB) sufamiturboB.power(); } auto Cartridge::save() -> void { if(!node) return; saveCartridge(); if(has.GameBoySlot) icd.save(); if(has.BSMemorySlot) bsmemory.save(); if(has.SufamiTurboSlotA) sufamiturboA.save(); if(has.SufamiTurboSlotB) sufamiturboB.save(); } } ares-126/ares/sfc/cartridge/cartridge.hpp000066400000000000000000000060071415063341600204520ustar00rootroot00000000000000struct Cartridge { Node::Peripheral node; VFS::Pak pak; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory rom; Node::Debugger::Memory ram; } memory; } debugger; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto power(bool reset) -> void; auto save() -> void; //serialization.cpp auto serialize(serializer&) -> void; ReadableMemory rom; WritableMemory ram; struct Information { string title; string region; string board; } information; struct Has { boolean ICD; boolean MCC; boolean DIP; boolean Competition; boolean SA1; boolean SuperFX; boolean ARMDSP; boolean HitachiDSP; boolean NECDSP; boolean EpsonRTC; boolean SharpRTC; boolean SPC7110; boolean SDD1; boolean OBC1; boolean MSU1; boolean GameBoySlot; boolean BSMemorySlot; boolean SufamiTurboSlotA; boolean SufamiTurboSlotB; } has; private: Markup::Node board; //load.cpp auto loadBoard(string) -> Markup::Node; auto loadCartridge() -> void; auto loadMemory(AbstractMemory&, Markup::Node) -> void; template auto loadMap(Markup::Node, T&) -> n32; auto loadMap(Markup::Node, const function&, const function&) -> n32; auto loadROM(Markup::Node) -> void; auto loadRAM(Markup::Node) -> void; auto loadICD(Markup::Node) -> void; auto loadMCC(Markup::Node) -> void; auto loadBSMemory(Markup::Node) -> void; auto loadSufamiTurboA(Markup::Node) -> void; auto loadSufamiTurboB(Markup::Node) -> void; auto loadDIP(Markup::Node) -> void; auto loadCompetition(Markup::Node) -> void; auto loadSA1(Markup::Node) -> void; auto loadSuperFX(Markup::Node) -> void; auto loadARMDSP(Markup::Node) -> void; auto loadHitachiDSP(Markup::Node, n32 roms) -> void; auto loaduPD7725(Markup::Node) -> void; auto loaduPD96050(Markup::Node) -> void; auto loadEpsonRTC(Markup::Node) -> void; auto loadSharpRTC(Markup::Node) -> void; auto loadSPC7110(Markup::Node) -> void; auto loadSDD1(Markup::Node) -> void; auto loadOBC1(Markup::Node) -> void; auto loadMSU1() -> void; //save.cpp auto saveCartridge() -> void; auto saveMemory(AbstractMemory&, Markup::Node) -> void; auto saveRAM(Markup::Node) -> void; auto saveMCC(Markup::Node) -> void; auto saveSA1(Markup::Node) -> void; auto saveSuperFX(Markup::Node) -> void; auto saveARMDSP(Markup::Node) -> void; auto saveHitachiDSP(Markup::Node) -> void; auto saveuPD7725(Markup::Node) -> void; auto saveuPD96050(Markup::Node) -> void; auto saveEpsonRTC(Markup::Node) -> void; auto saveSharpRTC(Markup::Node) -> void; auto saveSPC7110(Markup::Node) -> void; auto saveOBC1(Markup::Node) -> void; friend class ICD; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/sfc/cartridge/debugger.cpp000066400000000000000000000013071415063341600202630ustar00rootroot00000000000000auto Cartridge::Debugger::load(Node::Object parent) -> void { memory.rom = parent->append("Cartridge ROM"); memory.rom->setSize(cartridge.rom.size()); memory.rom->setRead([&](u32 address) -> u8 { return cartridge.rom.read(address); }); memory.rom->setWrite([&](u32 address, u8 data) -> void { return cartridge.rom.program(address, data); }); memory.ram = parent->append("Cartridge RAM"); memory.ram->setSize(cartridge.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cartridge.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return cartridge.ram.write(address, data); }); } ares-126/ares/sfc/cartridge/load.cpp000066400000000000000000000417751415063341600174330ustar00rootroot00000000000000auto Cartridge::loadBoard(string board) -> Markup::Node { string output; if(board.beginsWith("SNSP-")) board.replace("SNSP-", "SHVC-", 1L); if(board.beginsWith("MAXI-")) board.replace("MAXI-", "SHVC-", 1L); if(board.beginsWith("MJSC-")) board.replace("MJSC-", "SHVC-", 1L); if(board.beginsWith("EA-" )) board.replace("EA-", "SHVC-", 1L); if(board.beginsWith("WEI-" )) board.replace("WEI-", "SHVC-", 1L); if(auto fp = system.pak->read("boards.bml")) { auto document = BML::unserialize(fp->reads()); for(auto leaf : document.find("board")) { auto id = leaf.text(); bool matched = id == board; if(!matched && id.match("*(*)*")) { auto part = id.transform("()", "||").split("|"); for(auto& revision : part(1).split(",")) { if(string{part(0), revision, part(2)} == board) matched = true; } } if(matched) return leaf; } } return {}; } auto Cartridge::loadCartridge() -> void { board = loadBoard(information.board); if(auto node = board["memory(type=ROM,content=Program)"]) loadROM(node); if(auto node = board["memory(type=ROM,content=Expansion)"]) loadROM(node); //todo: handle this better if(auto node = board["memory(type=RAM,content=Save)"]) loadRAM(node); if(auto node = board["processor(identifier=ICD)"]) loadICD(node); if(auto node = board["processor(identifier=MCC)"]) loadMCC(node); if(auto node = board["slot(type=BSMemory)"]) loadBSMemory(node); if(auto node = board["slot(type=SufamiTurbo)[0]"]) loadSufamiTurboA(node); if(auto node = board["slot(type=SufamiTurbo)[1]"]) loadSufamiTurboB(node); if(auto node = board["dip"]) loadDIP(node); if(auto node = board["processor(architecture=uPD78214)"]) loadCompetition(node); if(auto node = board["processor(architecture=W65C816S)"]) loadSA1(node); if(auto node = board["processor(architecture=GSU)"]) loadSuperFX(node); if(auto node = board["processor(architecture=ARM6)"]) loadARMDSP(node); if(auto node = board["processor(architecture=HG51BS169)"]) loadHitachiDSP(node, information.board.match("2DC*") ? 2 : 1); if(auto node = board["processor(architecture=uPD7725)"]) loaduPD7725(node); if(auto node = board["processor(architecture=uPD96050)"]) loaduPD96050(node); if(auto node = board["rtc(manufacturer=Epson)"]) loadEpsonRTC(node); if(auto node = board["rtc(manufacturer=Sharp)"]) loadSharpRTC(node); if(auto node = board["processor(identifier=SPC7110)"]) loadSPC7110(node); if(auto node = board["processor(identifier=SDD1)"]) loadSDD1(node); if(auto node = board["processor(identifier=OBC1)"]) loadOBC1(node); if(auto fp = pak->read("msu1.data.rom")) loadMSU1(); debugger.memory.rom->setSize(rom.size()); debugger.memory.ram->setSize(ram.size()); } // auto Cartridge::loadMemory(AbstractMemory& ram, Markup::Node node) -> void { string name; if(auto architecture = node["architecture"].string()) name.append(architecture, "."); name.append(node["content"].string(), "."); name.append(node["type"].string()); name.downcase(); if(auto fp = pak->read(name)) { ram.allocate(fp->size()); fp->read({ram.data(), min(fp->size(), ram.size())}); } } template //T = ReadableMemory, WritableMemory, ProtectableMemory auto Cartridge::loadMap(Markup::Node map, T& memory) -> n32 { auto address = map["address"].text(); auto size = map["size"].natural(); auto base = map["base"].natural(); auto mask = map["mask"].natural(); if(size == 0) size = memory.size(); return bus.map({&T::read, &memory}, {&T::write, &memory}, address, size, base, mask); } auto Cartridge::loadMap( Markup::Node map, const function& reader, const function& writer ) -> n32 { auto address = map["address"].text(); auto size = map["size"].natural(); auto base = map["base"].natural(); auto mask = map["mask"].natural(); return bus.map(reader, writer, address, size, base, mask); } //memory(type=ROM,content=Program) auto Cartridge::loadROM(Markup::Node node) -> void { loadMemory(rom, node); for(auto leaf : node.find("map")) loadMap(leaf, rom); } //memory(type=RAM,content=Save) auto Cartridge::loadRAM(Markup::Node node) -> void { loadMemory(ram, node); for(auto leaf : node.find("map")) loadMap(leaf, ram); } //processor(identifier=ICD) auto Cartridge::loadICD(Markup::Node node) -> void { has.GameBoySlot = true; has.ICD = true; icd.Revision = node["revision"].natural(); if(auto oscillator = pak->attribute("oscillator")) { icd.Frequency = oscillator.natural(); } else { icd.Frequency = 0; } //Game Boy core loads data through ICD interface for(auto map : node.find("map")) { loadMap(map, {&ICD::readIO, &icd}, {&ICD::writeIO, &icd}); } } //processor(identifier=MCC) auto Cartridge::loadMCC(Markup::Node node) -> void { has.MCC = true; for(auto map : node.find("map")) { loadMap(map, {&MCC::read, &mcc}, {&MCC::write, &mcc}); } if(auto mcu = node["mcu"]) { for(auto map : mcu.find("map")) { loadMap(map, {&MCC::mcuRead, &mcc}, {&MCC::mcuWrite, &mcc}); } if(auto memory = mcu["memory(type=ROM,content=Program)"]) { loadMemory(mcc.rom, memory); } if(auto memory = mcu["memory(type=RAM,content=Download)"]) { loadMemory(mcc.psram, memory); } if(auto slot = mcu["slot(type=BSMemory)"]) { loadBSMemory(slot); } } } //slot(type=BSMemory) auto Cartridge::loadBSMemory(Markup::Node node) -> void { has.BSMemorySlot = true; if(auto node = board["slot(type=BSMemory)"]) { for(auto map : node.find("map")) { loadMap(map, {&BSMemoryCartridge::read, &bsmemory}, {&BSMemoryCartridge::write, &bsmemory}); } } } //slot(type=SufamiTurbo)[0] auto Cartridge::loadSufamiTurboA(Markup::Node node) -> void { has.SufamiTurboSlotA = true; for(auto map : node.find("rom/map")) { loadMap(map, {&SufamiTurboCartridge::readROM, &sufamiturboA}, {&SufamiTurboCartridge::writeROM, &sufamiturboA}); } for(auto map : node.find("ram/map")) { loadMap(map, {&SufamiTurboCartridge::readRAM, &sufamiturboA}, {&SufamiTurboCartridge::writeRAM, &sufamiturboA}); } } //slot(type=SufamiTurbo)[1] auto Cartridge::loadSufamiTurboB(Markup::Node node) -> void { has.SufamiTurboSlotB = true; for(auto map : node.find("rom/map")) { loadMap(map, {&SufamiTurboCartridge::readROM, &sufamiturboB}, {&SufamiTurboCartridge::writeROM, &sufamiturboB}); } for(auto map : node.find("ram/map")) { loadMap(map, {&SufamiTurboCartridge::readROM, &sufamiturboB}, {&SufamiTurboCartridge::writeROM, &sufamiturboB}); } } //dip auto Cartridge::loadDIP(Markup::Node node) -> void { has.DIP = true; dip.value = 0; //todo for(auto map : node.find("map")) { loadMap(map, {&DIP::read, &dip}, {&DIP::write, &dip}); } } //processor(architecture=uPD78214) auto Cartridge::loadCompetition(Markup::Node node) -> void { has.Competition = true; competition.board = Competition::Board::Unknown; if(node["identifier"].text() == "Campus Challenge '92") competition.board = Competition::Board::CampusChallenge92; if(node["identifier"].text() == "PowerFest '94") competition.board = Competition::Board::PowerFest94; for(auto map : node.find("map")) { loadMap(map, {&Competition::read, &competition}, {&Competition::write, &competition}); } if(auto mcu = node["mcu"]) { for(auto map : mcu.find("map")) { loadMap(map, {&Competition::mcuRead, &competition}, {&Competition::mcuWrite, &competition}); } if(auto memory = mcu["memory(type=ROM,content=Program)"]) { loadMemory(competition.rom[0], memory); } if(auto memory = mcu["memory(type=ROM,content=Level-1)"]) { loadMemory(competition.rom[1], memory); } if(auto memory = mcu["memory(type=ROM,content=Level-2)"]) { loadMemory(competition.rom[2], memory); } if(auto memory = mcu["memory(type=ROM,content=Level-3)"]) { loadMemory(competition.rom[3], memory); } } } //processor(architecture=W65C816S) auto Cartridge::loadSA1(Markup::Node node) -> void { has.SA1 = true; for(auto map : node.find("map")) { loadMap(map, {&SA1::readIOCPU, &sa1}, {&SA1::writeIOCPU, &sa1}); } if(auto mcu = node["mcu"]) { for(auto map : mcu.find("map")) { loadMap(map, {&SA1::ROM::readCPU, &sa1.rom}, {&SA1::ROM::writeCPU, &sa1.rom}); } if(auto memory = mcu["memory(type=ROM,content=Program)"]) { loadMemory(sa1.rom, memory); } if(auto slot = mcu["slot(type=BSMemory)"]) { loadBSMemory(slot); } } if(auto memory = node["memory(type=RAM,content=Save)"]) { loadMemory(sa1.bwram, memory); for(auto map : memory.find("map")) { loadMap(map, {&SA1::BWRAM::readCPU, &sa1.bwram}, {&SA1::BWRAM::writeCPU, &sa1.bwram}); } } if(auto memory = node["memory(type=RAM,content=Internal)"]) { loadMemory(sa1.iram, memory); for(auto map : memory.find("map")) { loadMap(map, {&SA1::IRAM::readCPU, &sa1.iram}, {&SA1::IRAM::writeCPU, &sa1.iram}); } } } //processor(architecture=GSU) auto Cartridge::loadSuperFX(Markup::Node node) -> void { has.SuperFX = true; if(auto oscillator = pak->attribute("oscillator")) { superfx.Frequency = oscillator.natural(); //GSU-1, GSU-2 } else { superfx.Frequency = system.cpuFrequency(); //MARIO CHIP 1 } for(auto map : node.find("map")) { loadMap(map, {&SuperFX::readIO, &superfx}, {&SuperFX::writeIO, &superfx}); } if(auto memory = node["memory(type=ROM,content=Program)"]) { loadMemory(superfx.rom, memory); for(auto map : memory.find("map")) { loadMap(map, superfx.cpurom); } } if(auto memory = node["memory(type=RAM,content=Save)"]) { loadMemory(superfx.ram, memory); for(auto map : memory.find("map")) { loadMap(map, superfx.cpuram); } } if(auto memory = node["memory(type=RAM,content=Backup)"]) { loadMemory(superfx.bram, memory); for(auto map : memory.find("map")) { loadMap(map, superfx.cpubram); } } } //processor(architecture=ARM6) auto Cartridge::loadARMDSP(Markup::Node node) -> void { has.ARMDSP = true; for(auto& word : armdsp.programROM) word = 0x00; for(auto& word : armdsp.dataROM) word = 0x00; for(auto& word : armdsp.programRAM) word = 0x00; if(auto oscillator = pak->attribute("oscillator")) { armdsp.Frequency = oscillator.natural(); } else { armdsp.Frequency = 21'440'000; } for(auto map : node.find("map")) { loadMap(map, {&ARMDSP::read, &armdsp}, {&ARMDSP::write, &armdsp}); } if(auto fp = pak->read("arm6.program.rom")) { for(u32 n : range(128 * 1024)) armdsp.programROM[n] = fp->read(); } if(auto fp = pak->read("arm6.data.rom")) { for(u32 n : range(32 * 1024)) armdsp.dataROM[n] = fp->read(); } if(auto fp = pak->read("arm6.data.ram")) { for(u32 n : range(16 * 1024)) armdsp.programRAM[n] = fp->read(); } } //processor(architecture=HG51BS169) auto Cartridge::loadHitachiDSP(Markup::Node node, n32 roms) -> void { has.HitachiDSP = true; for(auto& word : hitachidsp.dataROM) word = 0x000000; for(auto& word : hitachidsp.dataRAM) word = 0x00; if(auto oscillator = pak->attribute("oscillator")) { hitachidsp.Frequency = oscillator.natural(); } else { hitachidsp.Frequency = 20'000'000; } hitachidsp.Roms = roms; //1 or 2 hitachidsp.Mapping = 0; //0 or 1 for(auto map : node.find("map")) { loadMap(map, {&HitachiDSP::readIO, &hitachidsp}, {&HitachiDSP::writeIO, &hitachidsp}); } if(auto memory = node["memory(type=ROM,content=Program)"]) { loadMemory(hitachidsp.rom, memory); for(auto map : memory.find("map")) { loadMap(map, {&HitachiDSP::readROM, &hitachidsp}, {&HitachiDSP::writeROM, &hitachidsp}); } } if(auto memory = node["memory(type=RAM,content=Save)"]) { loadMemory(hitachidsp.ram, memory); for(auto map : memory.find("map")) { loadMap(map, {&HitachiDSP::readRAM, &hitachidsp}, {&HitachiDSP::writeRAM, &hitachidsp}); } } if(auto fp = pak->read("hg51bs169.data.rom")) { for(u32 n : range(1 * 1024)) hitachidsp.dataROM[n] = fp->readl(3); } if(auto memory = node["memory(type=RAM,content=Data,architecture=HG51BS169)"]) { if(auto fp = pak->read("hg51bs169.data.ram")) { for(u32 n : range(3 * 1024)) hitachidsp.dataRAM[n] = fp->readl(1); } for(auto map : memory.find("map")) { loadMap(map, {&HitachiDSP::readDRAM, &hitachidsp}, {&HitachiDSP::writeDRAM, &hitachidsp}); } } } //processor(architecture=uPD7725) auto Cartridge::loaduPD7725(Markup::Node node) -> void { has.NECDSP = true; necdsp.revision = NECDSP::Revision::uPD7725; for(auto& word : necdsp.programROM) word = 0x000000; for(auto& word : necdsp.dataROM) word = 0x0000; for(auto& word : necdsp.dataRAM) word = 0x0000; if(auto oscillator = pak->attribute("oscillator")) { necdsp.Frequency = oscillator.natural(); } else { necdsp.Frequency = 7'600'000; } for(auto map : node.find("map")) { loadMap(map, {&NECDSP::read, &necdsp}, {&NECDSP::write, &necdsp}); } if(auto fp = pak->read("upd7725.program.rom")) { for(u32 n : range(2048)) necdsp.programROM[n] = fp->readl(3); } if(auto fp = pak->read("upd7725.data.rom")) { for(u32 n : range(1024)) necdsp.dataROM[n] = fp->readl(2); } if(auto memory = node["memory(type=RAM,content=Data,architecture=uPD7725)"]) { if(auto fp = pak->read("upd7725.data.ram")) { for(u32 n : range(256)) necdsp.dataRAM[n] = fp->readl(2); } for(auto map : memory.find("map")) { loadMap(map, {&NECDSP::readRAM, &necdsp}, {&NECDSP::writeRAM, &necdsp}); } } } //processor(architecture=uPD96050) auto Cartridge::loaduPD96050(Markup::Node node) -> void { has.NECDSP = true; necdsp.revision = NECDSP::Revision::uPD96050; for(auto& word : necdsp.programROM) word = 0x000000; for(auto& word : necdsp.dataROM) word = 0x0000; for(auto& word : necdsp.dataRAM) word = 0x0000; if(auto oscillator = pak->attribute("oscillator")) { necdsp.Frequency = oscillator.natural(); } else { necdsp.Frequency = 11'000'000; } for(auto map : node.find("map")) { loadMap(map, {&NECDSP::read, &necdsp}, {&NECDSP::write, &necdsp}); } if(auto fp = pak->read("upd96050.program.rom")) { for(u32 n : range(16384)) necdsp.programROM[n] = fp->readl(3); } if(auto fp = pak->read("upd96050.data.rom")) { for(u32 n : range(2048)) necdsp.dataROM[n] = fp->readl(2); } if(auto memory = node["memory(type=RAM,content=Data,architecture=uPD96050)"]) { if(auto fp = pak->read("upd96050.data.ram")) { for(u32 n : range(2048)) necdsp.dataRAM[n] = fp->readl(2); } for(auto map : memory.find("map")) { loadMap(map, {&NECDSP::readRAM, &necdsp}, {&NECDSP::writeRAM, &necdsp}); } } } //rtc(manufacturer=Epson) auto Cartridge::loadEpsonRTC(Markup::Node node) -> void { has.EpsonRTC = true; epsonrtc.initialize(); for(auto map : node.find("map")) { loadMap(map, {&EpsonRTC::read, &epsonrtc}, {&EpsonRTC::write, &epsonrtc}); } if(auto fp = pak->read("time.rtc")) { n8 data[16]; for(auto& byte : data) byte = fp->read(); epsonrtc.load(data); } } //rtc(manufacturer=Sharp) auto Cartridge::loadSharpRTC(Markup::Node node) -> void { has.SharpRTC = true; sharprtc.initialize(); for(auto map : node.find("map")) { loadMap(map, {&SharpRTC::read, &sharprtc}, {&SharpRTC::write, &sharprtc}); } if(auto fp = pak->read("time.rtc")) { n8 data[16]; for(auto& byte : data) byte = fp->read(); sharprtc.load(data); } } //processor(identifier=SPC7110) auto Cartridge::loadSPC7110(Markup::Node node) -> void { has.SPC7110 = true; for(auto map : node.find("map")) { loadMap(map, {&SPC7110::read, &spc7110}, {&SPC7110::write, &spc7110}); } if(auto mcu = node["mcu"]) { for(auto map : mcu.find("map")) { loadMap(map, {&SPC7110::mcuromRead, &spc7110}, {&SPC7110::mcuromWrite, &spc7110}); } if(auto memory = mcu["memory(type=ROM,content=Program)"]) { loadMemory(spc7110.prom, memory); } if(auto memory = mcu["memory(type=ROM,content=Data)"]) { loadMemory(spc7110.drom, memory); } } if(auto memory = node["memory(type=RAM,content=Save)"]) { loadMemory(spc7110.ram, memory); for(auto map : memory.find("map")) { loadMap(map, {&SPC7110::mcuramRead, &spc7110}, {&SPC7110::mcuramWrite, &spc7110}); } } } //processor(identifier=SDD1) auto Cartridge::loadSDD1(Markup::Node node) -> void { has.SDD1 = true; for(auto map : node.find("map")) { loadMap(map, {&SDD1::ioRead, &sdd1}, {&SDD1::ioWrite, &sdd1}); } if(auto mcu = node["mcu"]) { for(auto map : mcu.find("map")) { loadMap(map, {&SDD1::mcuRead, &sdd1}, {&SDD1::mcuWrite, &sdd1}); } if(auto memory = mcu["memory(type=ROM,content=Program)"]) { loadMemory(sdd1.rom, memory); } } } //processor(identifier=OBC1) auto Cartridge::loadOBC1(Markup::Node node) -> void { has.OBC1 = true; for(auto map : node.find("map")) { loadMap(map, {&OBC1::read, &obc1}, {&OBC1::write, &obc1}); } if(auto memory = node["memory(type=RAM,content=Save)"]) { loadMemory(obc1.ram, memory); } } //file::exists("msu1.data.rom") auto Cartridge::loadMSU1() -> void { has.MSU1 = true; bus.map({&MSU1::readIO, &msu1}, {&MSU1::writeIO, &msu1}, "00-3f,80-bf:2000-2007"); } ares-126/ares/sfc/cartridge/save.cpp000066400000000000000000000075111415063341600174400ustar00rootroot00000000000000auto Cartridge::saveCartridge() -> void { if(auto node = board["memory(type=RAM,content=Save)"]) saveRAM(node); if(auto node = board["processor(identifier=MCC)"]) saveMCC(node); if(auto node = board["processor(architecture=W65C816S)"]) saveSA1(node); if(auto node = board["processor(architecture=GSU)"]) saveSuperFX(node); if(auto node = board["processor(architecture=ARM6)"]) saveARMDSP(node); if(auto node = board["processor(architecture=HG51BS169)"]) saveHitachiDSP(node); if(auto node = board["processor(architecture=uPD7725)"]) saveuPD7725(node); if(auto node = board["processor(architecture=uPD96050)"]) saveuPD96050(node); if(auto node = board["rtc(manufacturer=Epson)"]) saveEpsonRTC(node); if(auto node = board["rtc(manufacturer=Sharp)"]) saveSharpRTC(node); if(auto node = board["processor(identifier=SPC7110)"]) saveSPC7110(node); if(auto node = board["processor(identifier=OBC1)"]) saveOBC1(node); } // auto Cartridge::saveMemory(AbstractMemory& ram, Markup::Node node) -> void { string name; if(auto architecture = node["architecture"].string()) name.append(architecture, "."); name.append(node["content"].string(), "."); name.append(node["type"].string()); name.downcase(); if(auto fp = pak->write(name)) { fp->write({ram.data(), ram.size()}); } } //memory(type=RAM,content=Save) auto Cartridge::saveRAM(Markup::Node node) -> void { saveMemory(ram, node); } //processor(identifier=MCC) auto Cartridge::saveMCC(Markup::Node node) -> void { if(auto mcu = node["mcu"]) { if(auto memory = mcu["memory(type=RAM,content=Download)"]) { saveMemory(mcc.psram, memory); } } } //processor(architecture=W65C816S) auto Cartridge::saveSA1(Markup::Node node) -> void { if(auto memory = node["memory(type=RAM,content=Save)"]) { saveMemory(sa1.bwram, memory); } if(auto memory = node["memory(type=RAM,content=Internal)"]) { saveMemory(sa1.iram, memory); } } //processor(architecture=GSU) auto Cartridge::saveSuperFX(Markup::Node node) -> void { if(auto memory = node["memory(type=RAM,content=Save)"]) { saveMemory(superfx.ram, memory); } } //processor(architecture=ARM6) auto Cartridge::saveARMDSP(Markup::Node node) -> void { if(auto fp = pak->write("arm6.data.ram")) { for(u32 n : range(16 * 1024)) fp->write(armdsp.programRAM[n]); } } //processor(architecture=HG51BS169) auto Cartridge::saveHitachiDSP(Markup::Node node) -> void { saveMemory(hitachidsp.ram, node["ram"]); if(auto memory = node["memory(type=RAM,content=Save)"]) { saveMemory(hitachidsp.ram, memory); } if(auto fp = pak->write("hg51bs169.data.ram")) { for(u32 n : range(3 * 1024)) fp->write(hitachidsp.dataRAM[n]); } } //processor(architecture=uPD7725) auto Cartridge::saveuPD7725(Markup::Node node) -> void { if(auto fp = pak->write("upd7725.data.ram")) { for(u32 n : range(256)) fp->writel(necdsp.dataRAM[n], 2); } } //processor(architecture=uPD96050) auto Cartridge::saveuPD96050(Markup::Node node) -> void { if(auto fp = pak->write("upd96050.data.ram")) { for(u32 n : range(2 * 1024)) fp->writel(necdsp.dataRAM[n], 2); } } //rtc(manufacturer=Epson) auto Cartridge::saveEpsonRTC(Markup::Node node) -> void { if(auto fp = pak->write("time.rtc")) { n8 data[16]; epsonrtc.save(data); fp->write({data, 16}); } } //rtc(manufacturer=Sharp) auto Cartridge::saveSharpRTC(Markup::Node node) -> void { if(auto fp = pak->write("time.rtc")) { n8 data[16]; sharprtc.save(data); fp->write({data, 16}); } } //processor(identifier=SPC7110) auto Cartridge::saveSPC7110(Markup::Node node) -> void { if(auto memory = node["memory(type=RAM,content=Save)"]) { saveMemory(spc7110.ram, memory); } } //processor(identifier=OBC1) auto Cartridge::saveOBC1(Markup::Node node) -> void { if(auto memory = node["memory(type=RAM,content=Save)"]) { saveMemory(obc1.ram, memory); } } ares-126/ares/sfc/cartridge/serialization.cpp000066400000000000000000000000771415063341600213570ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { s(ram); } ares-126/ares/sfc/cartridge/slot.cpp000066400000000000000000000010471415063341600174610ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port.reset(); } ares-126/ares/sfc/cartridge/slot.hpp000066400000000000000000000003471415063341600174700ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/sfc/controller/000077500000000000000000000000001415063341600162115ustar00rootroot00000000000000ares-126/ares/sfc/controller/controller.cpp000066400000000000000000000014321415063341600211000ustar00rootroot00000000000000#include namespace ares::SuperFamicom { #include "port.cpp" #include "gamepad/gamepad.cpp" #include "justifier/justifier.cpp" #include "justifiers/justifiers.cpp" #include "mouse/mouse.cpp" #include "ntt-data-keypad/ntt-data-keypad.cpp" #include "super-multitap/super-multitap.cpp" #include "super-scope/super-scope.cpp" #include "twin-tap/twin-tap.cpp" auto Controller::iobit() -> bool { if(this == controllerPort1.device.data()) return cpu.pio() & 0x40; if(this == controllerPort2.device.data()) return cpu.pio() & 0x80; return 1; } auto Controller::iobit(n1 data) -> void { if(this == controllerPort1.device.data()) bus.write(0x4201, cpu.pio() & ~0x40 | data << 6); if(this == controllerPort2.device.data()) bus.write(0x4201, cpu.pio() & ~0x80 | data << 7); } } ares-126/ares/sfc/controller/controller.hpp000066400000000000000000000021261415063341600211060ustar00rootroot00000000000000// SNES controller port pinout: // ------------------------------- // | (1) (2) (3) (4) | (5) (6) (7) ) // ------------------------------- // pin name port1 port2 // 1: +5v // 2: clock $4016 read $4017 read // 3: latch $4016.d0 write $4016.d0 write // 4: data1 $4016.d0 read $4017.d0 read // 5: data2 $4016.d1 read $4017.d1 read // 6: iobit $4201.d6 write; $4213.d6 read $4201.d7 write; $4213.d7 read // 7: gnd struct Controller { Node::Peripheral node; virtual ~Controller() = default; auto iobit() -> bool; auto iobit(n1 data) -> void; virtual auto data() -> n2 { return 0; } virtual auto latch(n1 data) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" #include "justifier/justifier.hpp" #include "justifiers/justifiers.hpp" #include "mouse/mouse.hpp" #include "ntt-data-keypad/ntt-data-keypad.hpp" #include "super-multitap/super-multitap.hpp" #include "super-scope/super-scope.hpp" #include "twin-tap/twin-tap.hpp" ares-126/ares/sfc/controller/gamepad/000077500000000000000000000000001415063341600176075ustar00rootroot00000000000000ares-126/ares/sfc/controller/gamepad/gamepad.cpp000066400000000000000000000043401415063341600217120ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); b = node->append("B"); a = node->append("A"); y = node->append("Y"); x = node->append("X"); l = node->append("L"); r = node->append("R"); select = node->append("Select"); start = node->append("Start"); } auto Gamepad::data() -> n2 { if(latched == 1) { platform->input(b); return b->value(); } //note: D-pad physically prevents up+down and left+right from being pressed at the same time switch(counter++) { case 0: return b->value(); case 1: return y->value(); case 2: return select->value(); case 3: return start->value(); case 4: return upLatch; case 5: return downLatch; case 6: return leftLatch; case 7: return rightLatch; case 8: return a->value(); case 9: return x->value(); case 10: return l->value(); case 11: return r->value(); case 12: return 0; //4-bit device signature case 13: return 0; case 14: return 0; case 15: return 0; } counter = 16; return 1; } auto Gamepad::latch(n1 data) -> void { if(latched == data) return; latched = data; counter = 0; if(latched == 0) { platform->input(b); platform->input(y); platform->input(select); platform->input(start); platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(x); platform->input(l); platform->input(r); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } } ares-126/ares/sfc/controller/gamepad/gamepad.hpp000066400000000000000000000010541415063341600217160ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button b; Node::Input::Button a; Node::Input::Button y; Node::Input::Button x; Node::Input::Button l; Node::Input::Button r; Node::Input::Button select; Node::Input::Button start; Gamepad(Node::Port); auto data() -> n2; auto latch(n1 data) -> void; private: n1 latched; n8 counter; n1 yHold; n1 upLatch; n1 downLatch; n1 xHold; n1 leftLatch; n1 rightLatch; }; ares-126/ares/sfc/controller/justifier/000077500000000000000000000000001415063341600202155ustar00rootroot00000000000000ares-126/ares/sfc/controller/justifier/justifier.cpp000066400000000000000000000050601415063341600227260ustar00rootroot00000000000000Justifier::Justifier(Node::Port parent) { node = parent->append("Justifier"); x = node->append("X"); y = node->append("Y"); trigger = node->append("Trigger"); start = node->append("Start"); sprite = node->append("Crosshair"); sprite->setImage(Resource::Sprite::SuperFamicom::CrosshairGreen); ppu.screen->attach(sprite); Thread::create(system.cpuFrequency(), {&Justifier::main, this}); cpu.peripherals.append(this); } Justifier::~Justifier() { cpu.peripherals.removeByValue(this); if(ppu.screen) ppu.screen->detach(sprite); } auto Justifier::main() -> void { u32 next = cpu.vcounter() * 1364 + cpu.hcounter(); s32 px = active == 0 ? (s32)x->value() : -1; s32 py = active == 0 ? (s32)y->value() : -1; bool offscreen = px < 0 || py < 0 || px >= 256 || py >= ppu.vdisp(); if(!offscreen) { u32 target = py * 1364 + (px + 24) * 4; if(next >= target && previous < target) { //CRT raster detected, strobe iobit to latch counters iobit(0); iobit(1); } } if(next < previous) { platform->input(x); platform->input(y); s32 nx = x->value() + cx; s32 ny = y->value() + cy; cx = max(-16, min(256 + 16, nx)); cy = max(-16, min(240 + 16, ny)); sprite->setPosition(cx * 2 - 16, cy * 2 -16); sprite->setVisible(true); } previous = next; step(2); synchronize(cpu); } auto Justifier::data() -> n2 { if(counter == 0) { platform->input(trigger); platform->input(start); } switch(counter++) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 0; case 4: return 0; case 5: return 0; case 6: return 0; case 7: return 0; case 8: return 0; case 9: return 0; case 10: return 0; case 11: return 0; case 12: return 1; //4-bit device signature case 13: return 1; case 14: return 1; case 15: return 0; case 16: return 0; case 17: return 1; case 18: return 0; case 19: return 1; case 20: return 0; case 21: return 1; case 22: return 0; case 23: return 1; case 24: return trigger->value(); case 25: return 0; case 26: return start->value(); case 27: return 0; case 28: return active; case 29: return 0; case 30: return 0; case 31: return 0; } if(counter > 32) counter = 32; return 1; } auto Justifier::latch(n1 data) -> void { if(latched != data) { latched = data; counter = 0; if(!latched) active = !active; //occurs even with only one Justifier } } ares-126/ares/sfc/controller/justifier/justifier.hpp000066400000000000000000000007051415063341600227340ustar00rootroot00000000000000struct Justifier : Controller, Thread { Node::Video::Sprite sprite; Node::Input::Axis x; Node::Input::Axis y; Node::Input::Button trigger; Node::Input::Button start; Justifier(Node::Port); ~Justifier(); auto main() -> void; auto data() -> n2; auto latch(n1 data) -> void; private: i32 cx = 256 / 2; i32 cy = 240 / 2; n1 active; //0 = player 1; 1 = player 2 (disconnected) n32 latched; n32 counter; n32 previous; }; ares-126/ares/sfc/controller/justifiers/000077500000000000000000000000001415063341600204005ustar00rootroot00000000000000ares-126/ares/sfc/controller/justifiers/justifiers.cpp000066400000000000000000000066751415063341600233110ustar00rootroot00000000000000Justifiers::Justifiers(Node::Port parent) { node = parent->append("Justifiers"); x1 = node->append("Player 1: X"); y1 = node->append("Player 1: Y"); trigger1 = node->append("Player 1: Trigger"); start1 = node->append("Player 1: Start"); x2 = node->append("Player 2: X"); y2 = node->append("Player 2: Y"); trigger2 = node->append("Player 2: Trigger"); start2 = node->append("Player 2: Start"); sprite1 = node->append("Crosshair - Player 1"); sprite1->setImage(Resource::Sprite::SuperFamicom::CrosshairGreen); ppu.screen->attach(sprite1); sprite2 = node->append("Crosshair - Player 2"); sprite2->setImage(Resource::Sprite::SuperFamicom::CrosshairRed); ppu.screen->attach(sprite2); Thread::create(system.cpuFrequency(), {&Justifiers::main, this}); cpu.peripherals.append(this); } Justifiers::~Justifiers() { cpu.peripherals.removeByValue(this); if(ppu.screen) { ppu.screen->detach(sprite1); ppu.screen->detach(sprite2); } } auto Justifiers::main() -> void { u32 next = cpu.vcounter() * 1364 + cpu.hcounter(); s32 px = active == 0 ? x1->value() : x2->value(); s32 py = active == 0 ? y1->value() : y2->value(); bool offscreen = px < 0 || py < 0 || px >= 256 || py >= ppu.vdisp(); if(!offscreen) { u32 target = py * 1364 + (px + 24) * 4; if(next >= target && previous < target) { //CRT raster detected, strobe iobit to latch counters iobit(0); iobit(1); } } if(next < previous) { platform->input(x1); platform->input(y1); s32 nx1 = x1->value() + cx1; s32 ny1 = y1->value() + cy1; cx1 = max(-16, min(256 + 16, nx1)); cy1 = max(-16, min(240 + 16, ny1)); sprite1->setPosition(cx1 * 2 - 16, cy1 * 2 - 16); sprite1->setVisible(true); platform->input(x2); platform->input(y2); s32 nx2 = x2->value() + cx2; s32 ny2 = y2->value() + cy2; cx2 = max(-16, min(256 + 16, nx2)); cy2 = max(-16, min(240 + 16, ny2)); sprite2->setPosition(cx2 * 2 - 16, cy2 * 2 - 16); sprite2->setVisible(true); } previous = next; step(2); synchronize(cpu); } auto Justifiers::data() -> n2 { if(counter == 0) { platform->input(trigger1); platform->input(start1); platform->input(trigger2); platform->input(start2); } switch(counter++) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 0; case 4: return 0; case 5: return 0; case 6: return 0; case 7: return 0; case 8: return 0; case 9: return 0; case 10: return 0; case 11: return 0; case 12: return 1; //4-bit device signature case 13: return 1; case 14: return 1; case 15: return 0; case 16: return 0; case 17: return 1; case 18: return 0; case 19: return 1; case 20: return 0; case 21: return 1; case 22: return 0; case 23: return 1; case 24: return trigger1->value(); case 25: return trigger2->value(); case 26: return start1->value(); case 27: return start2->value(); case 28: return active; case 29: return 0; case 30: return 0; case 31: return 0; } if(counter > 32) counter = 32; return 1; } auto Justifiers::latch(n1 data) -> void { if(latched != data) { latched = data; counter = 0; if(!latched) active = !active; } } ares-126/ares/sfc/controller/justifiers/justifiers.hpp000066400000000000000000000012011415063341600232720ustar00rootroot00000000000000struct Justifiers : Controller, Thread { Node::Video::Sprite sprite1; Node::Video::Sprite sprite2; Node::Input::Axis x1; Node::Input::Axis y1; Node::Input::Button trigger1; Node::Input::Button start1; Node::Input::Axis x2; Node::Input::Axis y2; Node::Input::Button trigger2; Node::Input::Button start2; Justifiers(Node::Port); ~Justifiers(); auto main() -> void; auto data() -> n2; auto latch(n1 data) -> void; private: i32 cx1 = 256 / 2 - 16; i32 cy1 = 240 / 2; i32 cx2 = 256 / 2 + 16; i32 cy2 = 240 / 2; n1 active; //0 = player 1; 1 = player 2 n1 latched; n32 counter; n32 previous; }; ares-126/ares/sfc/controller/mouse/000077500000000000000000000000001415063341600173415ustar00rootroot00000000000000ares-126/ares/sfc/controller/mouse/mouse.cpp000066400000000000000000000036741415063341600212070ustar00rootroot00000000000000Mouse::Mouse(Node::Port parent) { node = parent->append("Mouse"); x = node->append("X"); y = node->append("Y"); left = node->append("Left"); right = node->append("Right"); } auto Mouse::data() -> n2 { if(latched == 1) { speed = (speed + 1) % 3; return 0; } switch(counter++) { case 0: return 0; case 1: return 0; case 2: return 0; case 3: return 0; case 4: return 0; case 5: return 0; case 6: return 0; case 7: return 0; case 8: return right->value(); case 9: return left->value(); case 10: return speed.bit(1); case 11: return speed.bit(0); case 12: return 0; //4-bit device signature case 13: return 0; case 14: return 0; case 15: return 1; case 16: return dy; case 17: return cy.bit(6); case 18: return cy.bit(5); case 19: return cy.bit(4); case 20: return cy.bit(3); case 21: return cy.bit(2); case 22: return cy.bit(1); case 23: return cy.bit(0); case 24: return dx; case 25: return cx.bit(6); case 26: return cx.bit(5); case 27: return cx.bit(4); case 28: return cx.bit(3); case 29: return cx.bit(2); case 30: return cx.bit(1); case 31: return cx.bit(0); } counter = 32; return 1; } auto Mouse::latch(n1 data) -> void { if(latched == data) return; latched = data; counter = 0; platform->input(x); //-n = left, 0 = center, +n = right platform->input(y); //-n = up, 0 = center, +n = down platform->input(left); platform->input(right); cx = x->value(); cy = y->value(); dx = cx < 0; //0 = right, 1 = left dy = cy < 0; //0 = down, 1 = up if(cx < 0) cx = -cx; //abs(position_x) if(cy < 0) cy = -cy; //abs(position_y) f64 multiplier = 1.0; if(speed == 1) multiplier = 1.5; if(speed == 2) multiplier = 2.0; cx = (f64)cx * multiplier; cy = (f64)cy * multiplier; cx = min(127, cx); cy = min(127, cy); } ares-126/ares/sfc/controller/mouse/mouse.hpp000066400000000000000000000006331415063341600212040ustar00rootroot00000000000000struct Mouse : Controller { Node::Input::Axis x; Node::Input::Axis y; Node::Input::Button left; Node::Input::Button right; Mouse(Node::Port); auto data() -> n2; auto latch(n1 data) -> void; private: n1 latched; n32 counter; n2 speed; //0 = slow, 1 = normal, 2 = fast i32 cx; //x-coordinate i32 cy; //y-coordinate n1 dx; //x-direction n1 dy; //y-direction }; ares-126/ares/sfc/controller/ntt-data-keypad/000077500000000000000000000000001415063341600212005ustar00rootroot00000000000000ares-126/ares/sfc/controller/ntt-data-keypad/ntt-data-keypad.cpp000066400000000000000000000075301415063341600247000ustar00rootroot00000000000000NTTDataKeypad::NTTDataKeypad(Node::Port parent) { node = parent->append("NTT Data Keypad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); b = node->append("B"); a = node->append("A"); y = node->append("Y"); x = node->append("X"); l = node->append("L"); r = node->append("R"); back = node->append("Back"); next = node->append("Next"); one = node->append("1"); two = node->append("2"); three = node->append("3"); four = node->append("4"); five = node->append("5"); six = node->append("6"); seven = node->append("7"); eight = node->append("8"); nine = node->append("9"); zero = node->append("0"); star = node->append("*"); clear = node->append("C"); pound = node->append("#"); point = node->append("."); end = node->append("End"); } auto NTTDataKeypad::data() -> n2 { if(latched == 1) { platform->input(b); return b->value(); } switch(counter++) { case 0: return b->value(); case 1: return y->value(); case 2: return back->value(); case 3: return next->value(); case 4: return upLatch; case 5: return downLatch; case 6: return leftLatch; case 7: return rightLatch; case 8: return a->value(); case 9: return x->value(); case 10: return l->value(); case 11: return r->value(); case 12: return 1; //4-bit device signature case 13: return 0; case 14: return 1; case 15: return 1; case 16: return zero->value(); case 17: return one->value(); case 18: return two->value(); case 19: return three->value(); case 20: return four->value(); case 21: return five->value(); case 22: return six->value(); case 23: return seven->value(); case 24: return eight->value(); case 25: return nine->value(); case 26: return star->value(); case 27: return pound->value(); case 28: return point->value(); case 29: return clear->value(); case 30: return 0; //unverified (likely correct) case 31: return end->value(); } counter = 32; return 1; //unverified (likely correct) } auto NTTDataKeypad::latch(n1 data) -> void { if(latched == data) return; latched = data; counter = 0; if(latched == 0) { platform->input(b); platform->input(y); platform->input(back); platform->input(next); platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(a); platform->input(x); platform->input(l); platform->input(r); platform->input(zero); platform->input(one); platform->input(two); platform->input(three); platform->input(four); platform->input(five); platform->input(six); platform->input(seven); platform->input(eight); platform->input(nine); platform->input(star); platform->input(pound); platform->input(point); platform->input(clear); platform->input(end); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } } } ares-126/ares/sfc/controller/ntt-data-keypad/ntt-data-keypad.hpp000066400000000000000000000017331415063341600247040ustar00rootroot00000000000000struct NTTDataKeypad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button b; Node::Input::Button a; Node::Input::Button y; Node::Input::Button x; Node::Input::Button l; Node::Input::Button r; Node::Input::Button back; Node::Input::Button next; Node::Input::Button one; Node::Input::Button two; Node::Input::Button three; Node::Input::Button four; Node::Input::Button five; Node::Input::Button six; Node::Input::Button seven; Node::Input::Button eight; Node::Input::Button nine; Node::Input::Button zero; Node::Input::Button star; Node::Input::Button clear; Node::Input::Button pound; Node::Input::Button point; Node::Input::Button end; NTTDataKeypad(Node::Port); auto data() -> n2; auto latch(n1 data) -> void; private: n1 latched; n8 counter; n1 yHold; n1 upLatch; n1 downLatch; n1 xHold; n1 leftLatch; n1 rightLatch; }; ares-126/ares/sfc/controller/port.cpp000066400000000000000000000025031415063341600177010ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Super Famicom"); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({ "Gamepad", "Justifier", "Justifiers", "Mouse", "NTT Data Keypad", "Super Multitap", "Super Scope", "Twin Tap" }); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad" ) device = new Gamepad(port); if(name == "Justifier" ) device = new Justifier(port); if(name == "Justifiers" ) device = new Justifiers(port); if(name == "Mouse" ) device = new Mouse(port); if(name == "NTT Data Keypad") device = new NTTDataKeypad(port); if(name == "Super Multitap" ) device = new SuperMultitap(port); if(name == "Super Scope" ) device = new SuperScope(port); if(name == "Twin Tap" ) device = new TwinTap(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/sfc/controller/port.hpp000066400000000000000000000012151415063341600177050ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto iobit() -> bool { if(device) return device->iobit(); return 0; } auto iobit(n1 data) -> void { if(device) return device->iobit(data); } auto data() -> n2 { if(device) return device->data(); return 0; } auto latch(n1 data) -> void { if(device) return device->latch(data); } auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/sfc/controller/super-multitap/000077500000000000000000000000001415063341600212045ustar00rootroot00000000000000ares-126/ares/sfc/controller/super-multitap/super-multitap.cpp000066400000000000000000000013111415063341600246770ustar00rootroot00000000000000SuperMultitap::SuperMultitap(Node::Port parent): port1{"Controller Port 1"}, port2{"Controller Port 2"}, port3{"Controller Port 3"}, port4{"Controller Port 4"} { node = parent->append("Super Multitap"); port1.load(node); port2.load(node); port3.load(node); port4.load(node); } auto SuperMultitap::data() -> n2 { if(latched) return 2; //Super Multitap device detection if(iobit()) { return port1.data().bit(0) << 0 | port2.data().bit(0) << 1; } else { return port3.data().bit(0) << 0 | port4.data().bit(0) << 1; } } auto SuperMultitap::latch(n1 data) -> void { latched = data; port1.latch(data); port2.latch(data); port3.latch(data); port4.latch(data); } ares-126/ares/sfc/controller/super-multitap/super-multitap.hpp000066400000000000000000000003621415063341600247110ustar00rootroot00000000000000struct SuperMultitap : Controller { ControllerPort port1; ControllerPort port2; ControllerPort port3; ControllerPort port4; SuperMultitap(Node::Port); auto data() -> n2; auto latch(n1 data) -> void; private: n1 latched; }; ares-126/ares/sfc/controller/super-scope/000077500000000000000000000000001415063341600204565ustar00rootroot00000000000000ares-126/ares/sfc/controller/super-scope/super-scope.cpp000066400000000000000000000075011415063341600234320ustar00rootroot00000000000000//The Super Scope is a light-gun: it detects the CRT beam cannon position, //and latches the counters by toggling iobit. This only works on controller //port 2, as iobit there is connected to the PPU H/V counter latch. //(PIO $4201.d7) //It is obviously not possible to perfectly simulate an IR light detecting //a CRT beam cannon, hence this class will read the PPU raster counters. //A Super Scope can still technically be used in port 1, however it would //require manual polling of PIO ($4201.d6) to determine when iobit was written. //Note that no commercial game ever utilizes a Super Scope in port 1. SuperScope::SuperScope(Node::Port parent) { node = parent->append("Super Scope"); x = node->append("X"); y = node->append("Y"); trigger = node->append("Trigger"); cursor = node->append("Cursor"); turbo = node->append("Turbo"); pause = node->append("Pause"); sprite = node->append("Crosshair"); sprite->setImage(Resource::Sprite::SuperFamicom::CrosshairGreen); ppu.screen->attach(sprite); Thread::create(system.cpuFrequency(), {&SuperScope::main, this}); cpu.peripherals.append(this); } SuperScope::~SuperScope() { cpu.peripherals.removeByValue(this); if(ppu.screen) ppu.screen->detach(sprite); } auto SuperScope::main() -> void { u32 next = cpu.vcounter() * 1364 + cpu.hcounter(); if(!offscreen) { u32 target = cy * 1364 + (cx + 24) * 4; if(next >= target && previous < target) { //CRT raster detected, strobe iobit to latch counters iobit(0); iobit(1); } } if(next < previous) { //Vcounter wrapped back to zero; update cursor coordinates for start of new frame platform->input(x); platform->input(y); s32 nx = x->value() + cx; s32 ny = y->value() + cy; cx = max(-16, min(256 + 16, nx)); cy = max(-16, min(240 + 16, ny)); offscreen = (cx < 0 || cy < 0 || cx >= 256 || cy >= ppu.vdisp()); sprite->setPosition(cx * 2 - 16, cy * 2 - 16); sprite->setVisible(true); } previous = next; step(2); synchronize(cpu); } auto SuperScope::data() -> n2 { if(counter == 0) { //turbo is a switch; toggle is edge sensitive platform->input(turbo); bool turboNew = turbo->value(); if(turboNew && !turboOld) { turboEdge = !turboEdge; //toggle state sprite->setImage(turboEdge ? (image)Resource::Sprite::SuperFamicom::CrosshairRed : (image)Resource::Sprite::SuperFamicom::CrosshairGreen ); } turboOld = turboNew; //trigger is a button //if turbo is active, trigger is level sensitive; otherwise, it is edge sensitive triggerValue = false; platform->input(trigger); bool triggerNew = trigger->value(); if(triggerNew && (turboEdge || !triggerLock)) { triggerValue = true; triggerLock = true; } else if(!triggerNew) { triggerLock = false; } //cursor is a button; it is always level sensitive platform->input(cursor); //pause is a button; it is always edge sensitive pauseEdge = false; platform->input(pause); bool pauseNew = pause->value(); if(pauseNew && !pauseLock) { pauseEdge = true; pauseLock = true; } else if(!pauseNew) { pauseLock = false; } offscreen = (cx < 0 || cy < 0 || cx >= 256 || cy >= ppu.vdisp()); } switch(counter++) { case 0: return triggerValue & !offscreen; case 1: return cursor->value(); case 2: return turboEdge; case 3: return pauseEdge; case 4: return 0; case 5: return 0; case 6: return offscreen; case 7: return 0; //noise (1 = yes) } if(counter > 8) counter = 8; return 1; } auto SuperScope::latch(n1 data) -> void { if(latched != data) { latched = data; counter = 0; } } ares-126/ares/sfc/controller/super-scope/super-scope.hpp000066400000000000000000000011041415063341600234300ustar00rootroot00000000000000struct SuperScope : Controller, Thread { Node::Video::Sprite sprite; Node::Input::Axis x; Node::Input::Axis y; Node::Input::Button trigger; Node::Input::Button cursor; Node::Input::Button turbo; Node::Input::Button pause; SuperScope(Node::Port); ~SuperScope(); auto main() -> void; auto data() -> n2; auto latch(n1 data) -> void; private: n1 latched; n32 counter; i32 cx = 256 / 2; i32 cy = 240 / 2; n1 triggerValue; n1 turboEdge; n1 pauseEdge; n1 offscreen; n1 turboOld; n1 triggerLock; n1 pauseLock; n32 previous; }; ares-126/ares/sfc/controller/twin-tap/000077500000000000000000000000001415063341600177545ustar00rootroot00000000000000ares-126/ares/sfc/controller/twin-tap/twin-tap.cpp000066400000000000000000000012771415063341600222320ustar00rootroot00000000000000TwinTap::TwinTap(Node::Port parent) { node = parent->append("Twin Tap"); one = node->append("1"); two = node->append("2"); } auto TwinTap::data() -> n2 { if(latched == 1) { platform->input(two); return two->value(); //unconfirmed } switch(counter++) { case 0: return two->value(); case 1: return one->value(); } if(counter < 24) return 0; //unconfirmed counter = 24; //unconfirmed return 1; //unconfirmed } //unconfirmed auto TwinTap::latch(n1 data) -> void { if(latched == data) return; latched = data; counter = 0; if(latched == 0) { platform->input(two); platform->input(one); } } ares-126/ares/sfc/controller/twin-tap/twin-tap.hpp000066400000000000000000000003121415063341600222240ustar00rootroot00000000000000struct TwinTap : Controller { Node::Input::Button one; Node::Input::Button two; TwinTap(Node::Port); auto data() -> n2; auto latch(n1 data) -> void; private: n1 latched; n8 counter; }; ares-126/ares/sfc/coprocessor/000077500000000000000000000000001415063341600163675ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/armdsp/000077500000000000000000000000001415063341600176555ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/armdsp/armdsp.cpp000066400000000000000000000024161415063341600216520ustar00rootroot00000000000000ARMDSP armdsp; #include "memory.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto ARMDSP::load(Node::Object parent) -> void { node = parent->append("ARM"); debugger.load(node); } auto ARMDSP::unload() -> void { debugger = {}; node = {}; cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto ARMDSP::boot() -> void { //reset hold delay while(bridge.reset) { step(1); continue; } //reset sequence delay if(bridge.ready == false) { step(65'536); bridge.ready = true; } } auto ARMDSP::main() -> void { processor.cpsr.t = 0; //force ARM mode debugger.instruction(); instruction(); } auto ARMDSP::step(u32 clocks) -> void { if(bridge.timer && --bridge.timer == 0); Thread::step(clocks); Thread::synchronize(cpu); } auto ARMDSP::power() -> void { random.array({programRAM, sizeof(programRAM)}); bridge.reset = false; reset(); } auto ARMDSP::reset() -> void { ARM7TDMI::power(); Thread::create(Frequency, [&] { boot(); while(true) scheduler.synchronize(), main(); }); cpu.coprocessors.append(this); bridge.ready = false; bridge.signal = false; bridge.timer = 0; bridge.timerlatch = 0; bridge.cputoarm.ready = false; bridge.armtocpu.ready = false; } ares-126/ares/sfc/coprocessor/armdsp/armdsp.hpp000066400000000000000000000031241415063341600216540ustar00rootroot00000000000000//ARMv3 (ARM60) //note: this coprocessor uses the ARMv4 (ARM7TDMI) core as its base //instruction execution forces ARM mode to remove ARMv4 THUMB access //there is a possibility the ARMv3 supports 26-bit mode; but cannot be verified struct ARMDSP : ARM7TDMI, Thread { Node::Object node; n32 Frequency; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; } tracer; } debugger; //armdsp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto boot() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto power() -> void; auto reset() -> void; //soft reset //memory.cpp auto sleep() -> void override; auto get(u32 mode, n32 address) -> n32 override; auto set(u32 mode, n32 address, n32 word) -> void override; //io.cpp auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; //serialization.cpp auto firmware() const -> vector; auto serialize(serializer&) -> void; n8 programROM[128_KiB]; n8 dataROM[32_KiB]; n8 programRAM[16_KiB]; struct Bridge { struct Buffer { n1 ready; n8 data; }; Buffer cputoarm; Buffer armtocpu; n32 timer; n32 timerlatch; n1 reset; n1 ready; n1 signal; auto status() const -> n8 { n8 data; data.bit(0) = armtocpu.ready; data.bit(2) = signal; data.bit(3) = cputoarm.ready; data.bit(7) = ready; return data; } } bridge; }; extern ARMDSP armdsp; ares-126/ares/sfc/coprocessor/armdsp/debugger.cpp000066400000000000000000000007031415063341600221450ustar00rootroot00000000000000auto ARMDSP::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "ARM"); tracer.instruction->setAddressBits(32); } auto ARMDSP::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(armdsp.pipeline.execute.address)) { tracer.instruction->notify(armdsp.disassembleInstruction(), armdsp.disassembleContext()); } } ares-126/ares/sfc/coprocessor/armdsp/io.cpp000066400000000000000000000014031415063341600207660ustar00rootroot00000000000000//MMIO: 00-3f,80-bf:3800-38ff //3800-3807 mirrored throughout //a0 ignored auto ARMDSP::read(n24 address, n8) -> n8 { cpu.synchronize(*this); n8 data = 0x00; address &= 0xff06; if(address == 0x3800) { if(bridge.armtocpu.ready) { bridge.armtocpu.ready = false; data = bridge.armtocpu.data; } } if(address == 0x3802) { bridge.signal = false; } if(address == 0x3804) { data = bridge.status(); } return data; } auto ARMDSP::write(n24 address, n8 data) -> void { cpu.synchronize(*this); address &= 0xff06; if(address == 0x3802) { bridge.cputoarm.ready = true; bridge.cputoarm.data = data; } if(address == 0x3804) { data &= 1; if(!bridge.reset && data) reset(); bridge.reset = data; } } ares-126/ares/sfc/coprocessor/armdsp/memory.cpp000066400000000000000000000046541415063341600217020ustar00rootroot00000000000000//note: timings are completely unverified //due to the ST018 chip design (on-die ROM), testing is nearly impossible auto ARMDSP::sleep() -> void { step(1); } auto ARMDSP::get(u32 mode, n32 address) -> n32 { step(1); static auto memory = [&](const n8* memory, u32 mode, n32 address) -> n32 { if(mode & Word) { memory += address & ~3; return memory[0] << 0 | memory[1] << 8 | memory[2] << 16 | memory[3] << 24; } else if(mode & Byte) { return memory[address]; } else { return 0; //should never occur } }; switch(address & 0xe000'0000) { case 0x0000'0000: return memory(programROM, mode, address & 0x1ffff); case 0x2000'0000: return pipeline.fetch.instruction; case 0x4000'0000: break; case 0x6000'0000: return 0x40404001; case 0x8000'0000: return pipeline.fetch.instruction; case 0xa000'0000: return memory(dataROM, mode, address & 0x7fff); case 0xc000'0000: return pipeline.fetch.instruction; case 0xe000'0000: return memory(programRAM, mode, address & 0x3fff); } address &= 0xe000'003f; if(address == 0x4000'0010) { if(bridge.cputoarm.ready) { bridge.cputoarm.ready = false; return bridge.cputoarm.data; } } if(address == 0x4000'0020) { return bridge.status(); } return 0; } auto ARMDSP::set(u32 mode, n32 address, n32 word) -> void { step(1); static auto memory = [](n8* memory, u32 mode, n32 address, n32 word) { if(mode & Word) { memory += address & ~3; *memory++ = word >> 0; *memory++ = word >> 8; *memory++ = word >> 16; *memory++ = word >> 24; } else if(mode & Byte) { memory += address; *memory++ = word >> 0; } }; switch(address & 0xe000'0000) { case 0x0000'0000: return; case 0x2000'0000: return; case 0x4000'0000: break; case 0x6000'0000: return; case 0x8000'0000: return; case 0xa000'0000: return; case 0xc000'0000: return; case 0xe000'0000: return memory(programRAM, mode, address & 0x3fff, word); } address &= 0xe000'003f; word &= 0x0000'00ff; if(address == 0x4000'0000) { bridge.armtocpu.ready = true; bridge.armtocpu.data = word; } if(address == 0x4000'0010) bridge.signal = true; if(address == 0x4000'0020) bridge.timerlatch.byte(0) = word; if(address == 0x4000'0024) bridge.timerlatch.byte(1) = word; if(address == 0x4000'0028) bridge.timerlatch.byte(2) = word; if(address == 0x4000'002c) bridge.timer = bridge.timerlatch; } ares-126/ares/sfc/coprocessor/armdsp/serialization.cpp000066400000000000000000000011731415063341600232400ustar00rootroot00000000000000auto ARMDSP::firmware() const -> vector { vector buffer; if(!cartridge.has.ARMDSP) return buffer; buffer.reserve(128_KiB + 32_KiB); for(u32 n : range(128_KiB)) buffer.append(programROM[n]); for(u32 n : range( 32_KiB)) buffer.append(dataROM[n]); return buffer; } auto ARMDSP::serialize(serializer& s) -> void { ARM7TDMI::serialize(s); Thread::serialize(s); s(array_span{programRAM, 16_KiB}); s(bridge.cputoarm.ready); s(bridge.cputoarm.data); s(bridge.armtocpu.ready); s(bridge.armtocpu.data); s(bridge.timer); s(bridge.timerlatch); s(bridge.reset); s(bridge.ready); s(bridge.signal); } ares-126/ares/sfc/coprocessor/competition/000077500000000000000000000000001415063341600207215ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/competition/competition.cpp000066400000000000000000000047741415063341600237730ustar00rootroot00000000000000Competition competition; #include "serialization.cpp" auto Competition::main() -> void { if(scoreActive && scoreSecondsRemaining) { if(--scoreSecondsRemaining == 0) { scoreActive = false; } } if(timerActive && timerSecondsRemaining) { if(--timerSecondsRemaining == 0) { timerActive = false; status |= 0x02; //time over scoreActive = true; scoreSecondsRemaining = 5; } } Thread::step(1); Thread::synchronize(cpu); } auto Competition::unload() -> void { rom[0].reset(); rom[1].reset(); rom[2].reset(); rom[3].reset(); cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto Competition::power() -> void { Thread::create(1, {&Competition::main, this}); cpu.coprocessors.append(this); //DIP switches 0-3 control the time: 3 minutes + 0-15 extra minutes timer = (3 + dip.value.bit(0,3)) * 60; //in seconds //DIP switches 4-5 serve an unknown purpose //DIP switches 6-7 are not connected status = 0x00; select = 0x00; timerActive = false; scoreActive = false; timerSecondsRemaining = 0; scoreSecondsRemaining = 0; } auto Competition::mcuRead(n24 address, n8 data) -> n8 { if(board == Board::CampusChallenge92) { u32 id = 0; if(select == 0x09) id = 1; if(select == 0x05) id = 2; if(select == 0x03) id = 3; if((address & 0x808000) == 0x808000) id = 0; if(address & 0x008000) { address = ((address & 0x7f0000) >> 1) | (address & 0x7fff); return rom[id].read(bus.mirror(address, rom[id].size()), data); } } if(board == Board::PowerFest94) { u32 id = 0; if(select == 0x09) id = 1; if(select == 0x0c) id = 2; if(select == 0x0a) id = 3; if((address & 0x208000) == 0x208000) id = 0; if(address & 0x400000) { address &= 0x3fffff; return rom[id].read(bus.mirror(address, rom[id].size()), data); } if(address & 0x008000) { address &= 0x1fffff; if(id != 2) address = ((address & 0x1f0000) >> 1) | (address & 0x7fff); return rom[id].read(bus.mirror(address, rom[id].size()), data); } } return data; } auto Competition::mcuWrite(n24 address, n8 data) -> void { } auto Competition::read(n24 address, n8 data) -> n8 { if(address == 0x106000 || address == 0xc00000) { return status; } return data; } auto Competition::write(n24 address, n8 data) -> void { if(address == 0x206000 || address == 0xe00000) { select = data; if(timer && data == 0x09) { timerActive = true; timerSecondsRemaining = timer; } } } ares-126/ares/sfc/coprocessor/competition/competition.hpp000066400000000000000000000022131415063341600237620ustar00rootroot00000000000000//HLE of the NEC uPD78P214GC processor found on SNES-EVENT PCBs, used by: //* Campus Challenge '92 //* PowerFest '94 //The NEC uPD78214 family are 8-bit microprocessors containing: //* UART/CSI serial interface //* ALU (MUL, DIV, BCD) //* interrupts (12 internal; 7 external; 2 priority levels) //* 16384 x 8-bit ROM //* 512 x 8-bit RAM //* 4 x timer/counters //None of the SNES-EVENT games have had their uPD78214 firmware dumped. //As such, our only option is very basic high-level emulation, provided here. struct Competition : Thread { //competition.cpp auto main() -> void; auto unload() -> void; auto power() -> void; auto mcuRead(n24 address, n8) -> n8; auto mcuWrite(n24 address, n8) -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; public: ReadableMemory rom[4]; enum class Board : u32 { Unknown, CampusChallenge92, PowerFest94 } board; u32 timer; private: n8 status; n8 select; n1 timerActive; n1 scoreActive; u32 timerSecondsRemaining; u32 scoreSecondsRemaining; }; extern Competition competition; ares-126/ares/sfc/coprocessor/competition/serialization.cpp000066400000000000000000000003051415063341600243000ustar00rootroot00000000000000auto Competition::serialize(serializer& s) -> void { Thread::serialize(s); s(status); s(select); s(timerActive); s(scoreActive); s(timerSecondsRemaining); s(scoreSecondsRemaining); } ares-126/ares/sfc/coprocessor/coprocessor.cpp000066400000000000000000000007501415063341600214360ustar00rootroot00000000000000#include namespace ares::SuperFamicom { #include "armdsp/armdsp.cpp" #include "competition/competition.cpp" #include "dip/dip.cpp" #include "epsonrtc/epsonrtc.cpp" #include "hitachidsp/hitachidsp.cpp" #include "icd/icd.cpp" #include "mcc/mcc.cpp" #include "msu1/msu1.cpp" #include "necdsp/necdsp.cpp" #include "obc1/obc1.cpp" #include "sa1/sa1.cpp" #include "sdd1/sdd1.cpp" #include "sharprtc/sharprtc.cpp" #include "spc7110/spc7110.cpp" #include "superfx/superfx.cpp" } ares-126/ares/sfc/coprocessor/coprocessor.hpp000066400000000000000000000006551415063341600214470ustar00rootroot00000000000000#include "armdsp/armdsp.hpp" #include "competition/competition.hpp" #include "dip/dip.hpp" #include "epsonrtc/epsonrtc.hpp" #include "hitachidsp/hitachidsp.hpp" #include "icd/icd.hpp" #include "mcc/mcc.hpp" #include "msu1/msu1.hpp" #include "necdsp/necdsp.hpp" #include "obc1/obc1.hpp" #include "sa1/sa1.hpp" #include "sdd1/sdd1.hpp" #include "sharprtc/sharprtc.hpp" #include "spc7110/spc7110.hpp" #include "superfx/superfx.hpp" ares-126/ares/sfc/coprocessor/dip/000077500000000000000000000000001415063341600171435ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/dip/dip.cpp000066400000000000000000000003271415063341600204250ustar00rootroot00000000000000//DIP switch //used for Nintendo Super System emulation DIP dip; #include "serialization.cpp" auto DIP::power() -> void { } auto DIP::read(n24, n8) -> n8 { return value; } auto DIP::write(n24, n8) -> void { } ares-126/ares/sfc/coprocessor/dip/dip.hpp000066400000000000000000000003551415063341600204330ustar00rootroot00000000000000struct DIP { //dip.cpp auto power() -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 value = 0x00; }; extern DIP dip; ares-126/ares/sfc/coprocessor/dip/serialization.cpp000066400000000000000000000000731415063341600225240ustar00rootroot00000000000000auto DIP::serialize(serializer& s) -> void { s(value); } ares-126/ares/sfc/coprocessor/epsonrtc/000077500000000000000000000000001415063341600202245ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/epsonrtc/epsonrtc.cpp000066400000000000000000000070511415063341600225700ustar00rootroot00000000000000EpsonRTC epsonrtc; #include "memory.cpp" #include "time.cpp" #include "serialization.cpp" auto EpsonRTC::load(Node::Object parent) -> void { rtc = parent->append("RTC"); } auto EpsonRTC::main() -> void { if(wait) { if(--wait == 0) ready = 1; } clocks++; if((clocks & ~0x00ff) == 0) roundSeconds(); //125 microseconds if((clocks & ~0x3fff) == 0) duty(); //1/128th second if((clocks & ~0x7fff) == 0) irq(0); //1/64th second if(clocks == 0) { //1 second seconds++; irq(1); if(seconds % 60 == 0) irq(2); //1 minute if(seconds % 1440 == 0) irq(3), seconds = 0; //1 hour tick(); } Thread::step(1); Thread::synchronize(cpu); } auto EpsonRTC::initialize() -> void { secondlo = 0; secondhi = 0; batteryfailure = 1; minutelo = 0; minutehi = 0; resync = 0; hourlo = 0; hourhi = 0; meridian = 0; daylo = 0; dayhi = 0; dayram = 0; monthlo = 0; monthhi = 0; monthram = 0; yearlo = 0; yearhi = 0; weekday = 0; hold = 0; calendar = 0; irqflag = 0; roundseconds = 0; irqmask = 0; irqduty = 0; irqperiod = 0; pause = 0; stop = 0; atime = 0; test = 0; } auto EpsonRTC::unload() -> void { cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto EpsonRTC::power() -> void { Thread::create(32'768 * 64, {&EpsonRTC::main, this}); cpu.coprocessors.append(this); clocks = 0; seconds = 0; chipselect = 0; state = State::Mode; offset = 0; wait = 0; ready = 0; holdtick = 0; } auto EpsonRTC::synchronize(n64 timestamp) -> void { time_t systime = timestamp; tm* timeinfo = localtime(&systime); u32 second = min(59, timeinfo->tm_sec); secondlo = second % 10; secondhi = second / 10; u32 minute = timeinfo->tm_min; minutelo = minute % 10; minutehi = minute / 10; u32 hour = timeinfo->tm_hour; if(atime) { hourlo = hour % 10; hourhi = hour / 10; } else { meridian = hour >= 12; hour %= 12; if(hour == 0) hour = 12; hourlo = hour % 10; hourhi = hour / 10; } u32 day = timeinfo->tm_mday; daylo = day % 10; dayhi = day / 10; u32 month = 1 + timeinfo->tm_mon; monthlo = month % 10; monthhi = month / 10; u32 year = timeinfo->tm_year % 100; yearlo = year % 10; yearhi = year / 10; weekday = timeinfo->tm_wday; resync = true; //alert program that time has changed } auto EpsonRTC::read(n24 address, n8 data) -> n8 { cpu.synchronize(*this); address &= 3; if(address == 0) { return chipselect; } if(address == 1) { if(chipselect != 1) return 0; if(ready == 0) return 0; if(state == State::Write) return mdr; if(state != State::Read) return 0; ready = 0; wait = 8; return rtcRead(offset++); } if(address == 2) { return ready << 7; } return data; } auto EpsonRTC::write(n24 address, n8 data) -> void { cpu.synchronize(*this); address &= 3, data &= 15; if(address == 0) { chipselect = data; if(chipselect != 1) rtcReset(); ready = 1; } if(address == 1) { if(chipselect != 1) return; if(ready == 0) return; if(state == State::Mode) { if(data != 0x03 && data != 0x0c) return; state = State::Seek; ready = 0; wait = 8; mdr = data; } else if(state == State::Seek) { if(mdr == 0x03) state = State::Write; if(mdr == 0x0c) state = State::Read; offset = data; ready = 0; wait = 8; mdr = data; } else if(state == State::Write) { rtcWrite(offset++, data); ready = 0; wait = 8; mdr = data; } } } ares-126/ares/sfc/coprocessor/epsonrtc/epsonrtc.hpp000066400000000000000000000031011415063341600225650ustar00rootroot00000000000000//Epson RTC-4513 Real-Time Clock struct EpsonRTC : Thread { Node::Component::RealTimeClock rtc; auto load(Node::Object) -> void; using Thread::synchronize; auto main() -> void; auto initialize() -> void; auto unload() -> void; auto power() -> void; auto synchronize(n64 timestamp) -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; auto serialize(serializer&) -> void; n21 clocks; n32 seconds; n2 chipselect; enum class State : u32 { Mode, Seek, Read, Write } state; n4 mdr; n4 offset; u32 wait; n1 ready; n1 holdtick; n4 secondlo; n3 secondhi; n1 batteryfailure; n4 minutelo; n3 minutehi; n1 resync; n4 hourlo; n2 hourhi; n1 meridian; n4 daylo; n2 dayhi; n1 dayram; n4 monthlo; n1 monthhi; n2 monthram; n4 yearlo; n4 yearhi; n3 weekday; n1 hold; n1 calendar; n1 irqflag; n1 roundseconds; n1 irqmask; n1 irqduty; n2 irqperiod; n1 pause; n1 stop; n1 atime; //astronomical time (24-hour mode) n1 test; //memory.cpp auto rtcReset() -> void; auto rtcRead(n4 address) -> n4; auto rtcWrite(n4 address, n4 data) -> void; auto load(const n8* data) -> void; auto save(n8* data) -> void; //time.cpp auto irq(n2 period) -> void; auto duty() -> void; auto roundSeconds() -> void; auto tick() -> void; auto tickSecond() -> void; auto tickMinute() -> void; auto tickHour() -> void; auto tickDay() -> void; auto tickMonth() -> void; auto tickYear() -> void; }; extern EpsonRTC epsonrtc; ares-126/ares/sfc/coprocessor/epsonrtc/memory.cpp000066400000000000000000000102301415063341600222340ustar00rootroot00000000000000auto EpsonRTC::rtcReset() -> void { state = State::Mode; offset = 0; resync = 0; pause = 0; test = 0; } auto EpsonRTC::rtcRead(n4 address) -> n4 { switch(address) { default: case 0: return secondlo; case 1: return secondhi | batteryfailure << 3; case 2: return minutelo; case 3: return minutehi | resync << 3; case 4: return hourlo; case 5: return hourhi | meridian << 2 | resync << 3; case 6: return daylo; case 7: return dayhi | dayram << 2 | resync << 3; case 8: return monthlo; case 9: return monthhi | monthram << 1 | resync << 3; case 10: return yearlo; case 11: return yearhi; case 12: return weekday | resync << 3; case 13: { n1 readflag = irqflag & !irqmask; irqflag = 0; return hold | calendar << 1 | readflag << 2 | roundseconds << 3; } case 14: return irqmask | irqduty << 1 | irqperiod << 2; case 15: return pause | stop << 1 | atime << 2 | test << 3; } } auto EpsonRTC::rtcWrite(n4 address, n4 data) -> void { switch(address) { case 0: secondlo = data; break; case 1: secondhi = data; batteryfailure = data >> 3; break; case 2: minutelo = data; break; case 3: minutehi = data; break; case 4: hourlo = data; break; case 5: hourhi = data; meridian = data >> 2; if(atime == 1) meridian = 0; if(atime == 0) hourhi &= 1; break; case 6: daylo = data; break; case 7: dayhi = data; dayram = data >> 2; break; case 8: monthlo = data; break; case 9: monthhi = data; monthram = data >> 1; break; case 10: yearlo = data; break; case 11: yearhi = data; break; case 12: weekday = data; break; case 13: { bool held = hold; hold = data; calendar = data >> 1; roundseconds = data >> 3; if(held == 1 && hold == 0 && holdtick == 1) { //if a second has passed during hold, increment one second upon resuming holdtick = 0; tickSecond(); } } break; case 14: irqmask = data; irqduty = data >> 1; irqperiod = data >> 2; break; case 15: pause = data; stop = data >> 1; atime = data >> 2; test = data >> 3; if(atime == 1) meridian = 0; if(atime == 0) hourhi &= 1; if(pause) { secondlo = 0; secondhi = 0; } break; } } auto EpsonRTC::load(const n8* data) -> void { secondlo = data[0] >> 0; secondhi = data[0] >> 4; batteryfailure = data[0] >> 7; minutelo = data[1] >> 0; minutehi = data[1] >> 4; resync = data[1] >> 7; hourlo = data[2] >> 0; hourhi = data[2] >> 4; meridian = data[2] >> 6; daylo = data[3] >> 0; dayhi = data[3] >> 4; dayram = data[3] >> 6; monthlo = data[4] >> 0; monthhi = data[4] >> 4; monthram = data[4] >> 5; yearlo = data[5] >> 0; yearhi = data[5] >> 4; weekday = data[6] >> 0; hold = data[6] >> 4; calendar = data[6] >> 5; irqflag = data[6] >> 6; roundseconds = data[6] >> 7; irqmask = data[7] >> 0; irqduty = data[7] >> 1; irqperiod = data[7] >> 2; pause = data[7] >> 4; stop = data[7] >> 5; atime = data[7] >> 6; test = data[7] >> 7; n64 timestamp = 0; for(auto byte : range(8)) { timestamp |= data[8 + byte] << (byte * 8); } n64 diff = (n64)time(0) - timestamp; while(diff >= 60 * 60 * 24) { tickDay(); diff -= 60 * 60 * 24; } while(diff >= 60 * 60) { tickHour(); diff -= 60 * 60; } while(diff >= 60) { tickMinute(); diff -= 60; } while(diff--) tickSecond(); } auto EpsonRTC::save(n8* data) -> void { data[0] = secondlo << 0 | secondhi << 4 | batteryfailure << 7; data[1] = minutelo << 0 | minutehi << 4 | resync << 7; data[2] = hourlo << 0 | hourhi << 4 | meridian << 6 | resync << 7; data[3] = daylo << 0 | dayhi << 4 | dayram << 6 | resync << 7; data[4] = monthlo << 0 | monthhi << 4 | monthram << 5 | resync << 7; data[5] = yearlo << 0 | yearhi << 4; data[6] = weekday << 0 | resync << 3 | hold << 4 | calendar << 5 | irqflag << 6 | roundseconds << 7; data[7] = irqmask << 0 | irqduty << 1 | irqperiod << 2 | pause << 4 | stop << 5 | atime << 6 | test << 7; n64 timestamp = (n64)time(0); for(auto byte : range(8)) { data[8 + byte] = timestamp; timestamp >>= 8; } } ares-126/ares/sfc/coprocessor/epsonrtc/serialization.cpp000066400000000000000000000011471415063341600236100ustar00rootroot00000000000000auto EpsonRTC::serialize(serializer& s) -> void { Thread::serialize(s); s(clocks); s(seconds); s(chipselect); s((u32&)state); s(mdr); s(offset); s(wait); s(ready); s(holdtick); s(secondlo); s(secondhi); s(batteryfailure); s(minutelo); s(minutehi); s(resync); s(hourlo); s(hourhi); s(meridian); s(daylo); s(dayhi); s(dayram); s(monthlo); s(monthhi); s(monthram); s(yearlo); s(yearhi); s(weekday); s(hold); s(calendar); s(irqflag); s(roundseconds); s(irqmask); s(irqduty); s(irqperiod); s(pause); s(stop); s(atime); s(test); } ares-126/ares/sfc/coprocessor/epsonrtc/time.cpp000066400000000000000000000072721415063341600216760ustar00rootroot00000000000000auto EpsonRTC::irq(n2 period) -> void { if(stop || pause) return; if(period == irqperiod) irqflag = 1; } auto EpsonRTC::duty() -> void { if(irqduty) irqflag = 0; } auto EpsonRTC::roundSeconds() -> void { if(roundseconds == 0) return; roundseconds = 0; if(secondhi >= 3) tickMinute(); secondlo = 0; secondhi = 0; } auto EpsonRTC::tick() -> void { if(stop || pause) return; if(hold) { holdtick = 1; return; } resync = 1; tickSecond(); } //below code provides bit-perfect emulation of invalid BCD values on the RTC-4513 //code makes extensive use of variable-length integers (see epsonrtc.hpp for sizes) auto EpsonRTC::tickSecond() -> void { if(secondlo <= 8 || secondlo == 12) { secondlo++; } else { secondlo = 0; if(secondhi < 5) { secondhi++; } else { secondhi = 0; tickMinute(); } } } auto EpsonRTC::tickMinute() -> void { if(minutelo <= 8 || minutelo == 12) { minutelo++; } else { minutelo = 0; if(minutehi < 5) { minutehi++; } else { minutehi = 0; tickHour(); } } } auto EpsonRTC::tickHour() -> void { if(atime) { if(hourhi < 2) { if(hourlo <= 8 || hourlo == 12) { hourlo++; } else { hourlo = !(hourlo & 1); hourhi++; } } else { if(hourlo != 3 && !(hourlo & 4)) { if(hourlo <= 8 || hourlo >= 12) { hourlo++; } else { hourlo = !(hourlo & 1); hourhi++; } } else { hourlo = !(hourlo & 1); hourhi = 0; tickDay(); } } } else { if(hourhi == 0) { if(hourlo <= 8 || hourlo == 12) { hourlo++; } else { hourlo = !(hourlo & 1); hourhi ^= 1; } } else { if(hourlo & 1) meridian ^= 1; if(hourlo < 2 || hourlo == 4 || hourlo == 5 || hourlo == 8 || hourlo == 12) { hourlo++; } else { hourlo = !(hourlo & 1); hourhi ^= 1; } if(meridian == 0 && !(hourlo & 1)) tickDay(); } } } auto EpsonRTC::tickDay() -> void { if(calendar == 0) return; weekday = (weekday + 1) + (weekday == 6); //January - December = 0x01 - 0x09; 0x10 - 0x12 static constexpr u32 daysinmonth[32] = { 30, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, }; u32 days = daysinmonth[monthhi << 4 | monthlo]; if(days == 28) { //add one day for leap years if((yearhi & 1) == 0 && ((yearlo - 0) & 3) == 0) days++; if((yearhi & 1) == 1 && ((yearlo - 2) & 3) == 0) days++; } if(days == 28 && (dayhi == 3 || (dayhi == 2 && daylo >= 8))) { daylo = 1; dayhi = 0; return tickMonth(); } if(days == 29 && (dayhi == 3 || (dayhi == 2 && (daylo > 8 && daylo != 12)))) { daylo = 1; dayhi = 0; return tickMonth(); } if(days == 30 && (dayhi == 3 || (dayhi == 2 && (daylo == 10 || daylo == 14)))) { daylo = 1; dayhi = 0; return tickMonth(); } if(days == 31 && (dayhi == 3 && (daylo & 3))) { daylo = 1; dayhi = 0; return tickMonth(); } if(daylo <= 8 || daylo == 12) { daylo++; } else { daylo = !(daylo & 1); dayhi++; } } auto EpsonRTC::tickMonth() -> void { if(monthhi == 0 || !(monthlo & 2)) { if(monthlo <= 8 || monthlo == 12) { monthlo++; } else { monthlo = !(monthlo & 1); monthhi ^= 1; } } else { monthlo = !(monthlo & 1); monthhi = 0; tickYear(); } } auto EpsonRTC::tickYear() -> void { if(yearlo <= 8 || yearlo == 12) { yearlo++; } else { yearlo = !(yearlo & 1); if(yearhi <= 8 || yearhi == 12) { yearhi++; } else { yearhi = !(yearhi & 1); } } } ares-126/ares/sfc/coprocessor/hitachidsp/000077500000000000000000000000001415063341600205075ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/hitachidsp/debugger.cpp000066400000000000000000000007321415063341600230010ustar00rootroot00000000000000auto HitachiDSP::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "HIT"); tracer.instruction->setAddressBits(23); } auto HitachiDSP::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(hitachidsp.r.pb << 8 | hitachidsp.r.pc)) { tracer.instruction->notify(hitachidsp.disassembleInstruction(), hitachidsp.disassembleContext()); } } ares-126/ares/sfc/coprocessor/hitachidsp/hitachidsp.cpp000066400000000000000000000013401415063341600233310ustar00rootroot00000000000000HitachiDSP hitachidsp; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto HitachiDSP::load(Node::Object parent) -> void { node = parent->append("Hitachi"); debugger.load(node); } auto HitachiDSP::unload() -> void { node = {}; debugger = {}; rom.reset(); ram.reset(); cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto HitachiDSP::step(u32 clocks) -> void { HG51B::step(clocks); Thread::step(clocks); Thread::synchronize(cpu); } auto HitachiDSP::halt() -> void { HG51B::halt(); if(io.irq == 0) cpu.irq(r.i = 1); } auto HitachiDSP::power() -> void { HG51B::power(); Thread::create(Frequency, [&] { main(); }); cpu.coprocessors.append(this); } ares-126/ares/sfc/coprocessor/hitachidsp/hitachidsp.hpp000066400000000000000000000031241415063341600233400ustar00rootroot00000000000000struct HitachiDSP : HG51B, Thread { Node::Object node; ReadableMemory rom; WritableMemory ram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; //todo: HG51B needs to notify HitachiDSP when instructiosn are executed } tracer; } debugger; //hitachidsp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto step(u32 clocks) -> void override; auto halt() -> void override; auto power() -> void; auto isROM(n24 address) -> bool override; auto isRAM(n24 address) -> bool override; //HG51B read/write auto read(n24 address) -> n8 override; auto write(n24 address, n8 data) -> void override; //CPU ROM read/write auto addressROM(n24 address) const -> maybe; auto readROM(n24 address, n8 data = 0) -> n8; auto writeROM(n24 address, n8 data) -> void; //CPU RAM read/write auto addressRAM(n24 address) const -> maybe; auto readRAM(n24 address, n8 data = 0) -> n8; auto writeRAM(n24 address, n8 data) -> void; //HG51B data RAM read/write auto addressDRAM(n24 address) const -> maybe; auto readDRAM(n24 address, n8 data = 0) -> n8; auto writeDRAM(n24 address, n8 data) -> void; //CPU IO read/write auto addressIO(n24 address) const -> maybe; auto readIO(n24 address, n8 data = 0) -> n8; auto writeIO(n24 address, n8 data) -> void; auto firmware() const -> vector; auto serialize(serializer&) -> void; n32 Frequency; n32 Roms; n1 Mapping; }; extern HitachiDSP hitachidsp; ares-126/ares/sfc/coprocessor/hitachidsp/memory.cpp000066400000000000000000000174631415063341600225360ustar00rootroot00000000000000auto HitachiDSP::isROM(n24 address) -> bool { return (bool)addressROM(address); } auto HitachiDSP::isRAM(n24 address) -> bool { return (bool)addressRAM(address); } auto HitachiDSP::read(n24 address) -> n8 { if(auto linear = addressROM (address)) return readROM (*linear); if(auto linear = addressRAM (address)) return readRAM (*linear); if(auto linear = addressDRAM(address)) return readDRAM(*linear); if(auto linear = addressIO (address)) return readIO (*linear); return 0x00; } auto HitachiDSP::write(n24 address, n8 data) -> void { if(auto linear = addressROM (address)) return writeROM (*linear, data); if(auto linear = addressRAM (address)) return writeRAM (*linear, data); if(auto linear = addressDRAM(address)) return writeDRAM(*linear, data); if(auto linear = addressIO (address)) return writeIO (*linear, data); } // auto HitachiDSP::addressROM(n24 address) const -> maybe { if(Mapping == 0) { //00-3f,80-bf:8000-ffff; c0-ff:0000-ffff if((address & 0x408000) == 0x008000 || (address & 0xc00000) == 0xc00000) { address = (address & 0x3f0000) >> 1 | (address & 0x7fff); return {address & 0x1fffff}; } } else { //00-3f,80-bf:8000-ffff; c0-ff:0000-ffff if((address & 0x408000) == 0x008000 || (address & 0xc00000) == 0xc00000) { return {address & 0x3fffff}; } } return {}; } auto HitachiDSP::readROM(n24 address, n8 data) -> n8 { if(hitachidsp.active() || !busy()) { address = bus.mirror(address, rom.size()); //if(Roms == 2 && mmio.r1f52 == 1 && address >= (bit::round(rom.size()) >> 1)) return 0x00; return rom.read(address, data); } //DSP has the bus acquired: CPU reads from 00:ffc0-ffff return IO registers (including reset vector overrides) if(Mapping == 0 && (address & 0xbfffc0) == 0x007fc0) return readIO(0x7f40 | address & 0x3f); if(Mapping == 1 && (address & 0xbfffc0) == 0x00ffc0) return readIO(0x7f40 | address & 0x3f); return data; } auto HitachiDSP::writeROM(n24 address, n8 data) -> void { } // auto HitachiDSP::addressRAM(n24 address) const -> maybe { if(Mapping == 0) { //70-77:0000-7fff if((address & 0xf88000) == 0x700000) { address = (address & 0x070000) >> 1 | (address & 0x7fff); return {address & 0x03ffff}; } } else { //30-3f,b0-bf:6000-7fff if((address & 0x70e000) == 0x306000) { address = (address & 0x0f0000) >> 3 | (address & 0x1fff); return {address & 0x01ffff}; } } return {}; } auto HitachiDSP::readRAM(n24 address, n8 data) -> n8 { if(ram.size() == 0) return 0x00; //not open bus return ram.read(bus.mirror(address, ram.size()), data); } auto HitachiDSP::writeRAM(n24 address, n8 data) -> void { if(ram.size() == 0) return; return ram.write(bus.mirror(address, ram.size()), data); } // auto HitachiDSP::addressDRAM(n24 address) const -> maybe { if(Mapping == 0) { //00-3f,80-bf:6000-6bff,7000-7bff if((address & 0x40e000) == 0x006000 && (address & 0x0c00) != 0x0c00) { return {address & 0x0fff}; } } else { //00-2f,80-af:6000-6bff,7000-7bff if((address & 0x40e000) == 0x006000 && (address & 0x0c00) != 0x0c00 && (address & 0x300000) != 0x300000) { return {address & 0x0fff}; } } return {}; } auto HitachiDSP::readDRAM(n24 address, n8 data) -> n8 { address &= 0xfff; if(address >= 0xc00) return data; return dataRAM[address]; } auto HitachiDSP::writeDRAM(n24 address, n8 data) -> void { address &= 0xfff; if(address >= 0xc00) return; dataRAM[address] = data; } // auto HitachiDSP::addressIO(n24 address) const -> maybe { if(Mapping == 0) { //00-3f,80-bf:6c00-6fff,7c00-7fff if((address & 0x40ec00) == 0x006c00) { return {address & 0x03ff}; } } else { //00-2f,80-af:6c00-6fff,7c00-7fff if((address & 0x40ec00) == 0x006c00 && (address & 0x300000) != 0x300000) { return {address & 0x03ff}; } } return {}; } auto HitachiDSP::readIO(n24 address, n8 data) -> n8 { address = 0x7c00 | (address & 0x03ff); //IO switch(address) { case 0x7f40: return io.dma.source.byte(0); case 0x7f41: return io.dma.source.byte(1); case 0x7f42: return io.dma.source.byte(2); case 0x7f43: return io.dma.length.byte(0); case 0x7f44: return io.dma.length.byte(1); case 0x7f45: return io.dma.target.byte(0); case 0x7f46: return io.dma.target.byte(1); case 0x7f47: return io.dma.target.byte(2); case 0x7f48: return io.cache.page; case 0x7f49: return io.cache.base.byte(0); case 0x7f4a: return io.cache.base.byte(1); case 0x7f4b: return io.cache.base.byte(2); case 0x7f4c: return io.cache.lock[0] << 0 | io.cache.lock[1] << 1; case 0x7f4d: return io.cache.pb.byte(0); case 0x7f4e: return io.cache.pb.byte(1); case 0x7f4f: return io.cache.pc; case 0x7f50: return io.wait.ram << 0 | io.wait.rom << 4; case 0x7f51: return io.irq; case 0x7f52: return io.rom; case 0x7f53: case 0x7f54: case 0x7f55: case 0x7f56: case 0x7f57: case 0x7f59: case 0x7f5b: case 0x7f5c: case 0x7f5d: case 0x7f5e: case 0x7f5f: return io.suspend.enable << 0 | r.i << 1 | running() << 6 | busy() << 7; } //vectors if(address >= 0x7f60 && address <= 0x7f7f) { return io.vector[address & 0x1f]; } //registers if((address >= 0x7f80 && address <= 0x7faf) || (address >= 0x7fc0 && address <= 0x7fef)) { address &= 0x3f; return r.gpr[address / 3].byte(address % 3); } return 0x00; } auto HitachiDSP::writeIO(n24 address, n8 data) -> void { address = 0x7c00 | (address & 0x03ff); //IO switch(address) { case 0x7f40: io.dma.source.byte(0) = data; return; case 0x7f41: io.dma.source.byte(1) = data; return; case 0x7f42: io.dma.source.byte(2) = data; return; case 0x7f43: io.dma.length.byte(0) = data; return; case 0x7f44: io.dma.length.byte(1) = data; return; case 0x7f45: io.dma.target.byte(0) = data; return; case 0x7f46: io.dma.target.byte(1) = data; return; case 0x7f47: io.dma.target.byte(2) = data; if(io.halt) io.dma.enable = 1; return; case 0x7f48: io.cache.page = data.bit(0); if(io.halt) io.cache.enable = 1; return; case 0x7f49: io.cache.base.byte(0) = data; return; case 0x7f4a: io.cache.base.byte(1) = data; return; case 0x7f4b: io.cache.base.byte(2) = data; return; case 0x7f4c: io.cache.lock[0] = data.bit(0); io.cache.lock[1] = data.bit(1); return; case 0x7f4d: io.cache.pb.byte(0) = data; return; case 0x7f4e: io.cache.pb.byte(1) = data; return; case 0x7f4f: io.cache.pc = data; if(io.halt) { io.halt = 0; r.pb = io.cache.pb; r.pc = io.cache.pc; } return; case 0x7f50: io.wait.ram = data.bit(0,2); io.wait.rom = data.bit(4,6); return; case 0x7f51: io.irq = data.bit(0); if(io.irq == 1) cpu.irq(r.i = 0); return; case 0x7f52: io.rom = data.bit(0); return; case 0x7f53: io.lock = 0; io.halt = 1; return; case 0x7f55: io.suspend.enable = 1; io.suspend.duration = 0; return; //indefinite case 0x7f56: io.suspend.enable = 1; io.suspend.duration = 32; return; case 0x7f57: io.suspend.enable = 1; io.suspend.duration = 64; return; case 0x7f58: io.suspend.enable = 1; io.suspend.duration = 96; return; case 0x7f59: io.suspend.enable = 1; io.suspend.duration = 128; return; case 0x7f5a: io.suspend.enable = 1; io.suspend.duration = 160; return; case 0x7f5b: io.suspend.enable = 1; io.suspend.duration = 192; return; case 0x7f5c: io.suspend.enable = 1; io.suspend.duration = 224; return; case 0x7f5d: io.suspend.enable = 0; return; //resume case 0x7f5e: r.i = 0; //does not deassert CPU IRQ line return; } //vectors if(address >= 0x7f60 && address <= 0x7f7f) { io.vector[address & 0x1f] = data; return; } //registers if((address >= 0x7f80 && address <= 0x7faf) || (address >= 0x7fc0 && address <= 0x7fef)) { address &= 0x3f; r.gpr[address / 3].byte(address % 3) = data; return; } } ares-126/ares/sfc/coprocessor/hitachidsp/serialization.cpp000066400000000000000000000006301415063341600240670ustar00rootroot00000000000000auto HitachiDSP::firmware() const -> vector { vector buffer; if(!cartridge.has.HitachiDSP) return buffer; buffer.reserve(3_KiB); for(u32 n : range(1024)) { buffer.append(dataROM[n] >> 0); buffer.append(dataROM[n] >> 8); buffer.append(dataROM[n] >> 16); } return buffer; } auto HitachiDSP::serialize(serializer& s) -> void { HG51B::serialize(s); Thread::serialize(s); } ares-126/ares/sfc/coprocessor/icd/000077500000000000000000000000001415063341600171265ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/icd/icd.cpp000066400000000000000000000035451415063341600204000ustar00rootroot00000000000000ICD icd; #if defined(CORE_GB) #include "interface.cpp" #include "io.cpp" #include "serialization.cpp" auto ICD::clockFrequency() const -> f64 { return Frequency ? Frequency : (n32)system.cpuFrequency(); } auto ICD::load(Node::Peripheral parent) -> void { node = parent->append("Super Game Boy"); node->setPak(cartridge.pak); GameBoy::superGameBoy = this; GameBoy::system.load(node, "[Nintendo] Super Game Boy"); GameBoy::cpu.version->setValue(!Frequency ? "SGB-CPU 01" : "CPU SGB2"); GameBoy::cpu.version->setLatch(); } auto ICD::unload() -> void { GameBoy::system.unload(); GameBoy::superGameBoy = nullptr; cpu.coprocessors.removeByValue(this); Thread::destroy(); node.reset(); } auto ICD::save() -> void { GameBoy::system.save(); } auto ICD::main() -> void { if(r6003.bit(7)) { GameBoy::system.run(); Thread::step(GameBoy::system.clocksExecuted()); } else { //DMG halted GameBoy::apu.stream->frame(0.0, 0.0); Thread::step(2); //two clocks per audio sample } Thread::synchronize(cpu); } auto ICD::power(bool reset) -> void { //SGB1 uses CPU oscillator; SGB2 uses dedicated oscillator Thread::create(clockFrequency() / 5.0, [&] { while(true) { scheduler.synchronize(); main(); } }); cpu.coprocessors.append(this); for(auto& packet : this->packet) packet = {}; packetSize = 0; joypID = 3; joypLock = 1; pulseLock = 1; strobeLock = 0; packetLock = 0; joypPacket = {}; packetOffset = 0; bitData = 0; bitOffset = 0; for(auto& n : output) n = 0xff; readBank = 0; readAddress = 0; writeBank = 0; r6003 = 0x00; r6004 = 0xff; r6005 = 0xff; r6006 = 0xff; r6007 = 0xff; for(auto& r : r7000) r = 0x00; mltReq = 0; hcounter = 0; vcounter = 0; GameBoy::system.power(); GameBoy::apu.stream->setFrequency(clockFrequency() / 5.0 / 2.0); } #endif ares-126/ares/sfc/coprocessor/icd/icd.hpp000066400000000000000000000034051415063341600204000ustar00rootroot00000000000000#if defined(CORE_GB) struct ICD : Platform, GameBoy::SuperGameBoyInterface, Thread { Node::System node; //icd.cpp auto clockFrequency() const -> f64; auto load(Node::Peripheral) -> void; auto unload() -> void; auto save() -> void; auto main() -> void; auto power(bool reset = false) -> void; //interface.cpp auto ppuHreset() -> void override; auto ppuVreset() -> void override; auto ppuWrite(n2 color) -> void override; auto joypWrite(n1 p14, n1 p15) -> void override; //io.cpp auto readIO(n24 address, n8 data) -> n8; auto writeIO(n24 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n32 Revision = 0; n32 Frequency = 0; private: struct Packet { auto operator[](n4 address) -> n8& { return data[address]; } n8 data[16]; }; Packet packet[64]; n7 packetSize; n2 joypID; n1 joypLock; n1 pulseLock; n1 strobeLock; n1 packetLock; Packet joypPacket; n4 packetOffset; n8 bitData; n3 bitOffset; n8 output[4 * 512]; n2 readBank; n9 readAddress; n2 writeBank; n8 r6003; //control port n8 r6004; //joypad 1 n8 r6005; //joypad 2 n8 r6006; //joypad 3 n8 r6007; //joypad 4 n8 r7000[16]; //JOYP packet data n8 mltReq; //number of active joypads n8 hcounter; n8 vcounter; }; #else struct ICD : Thread { Node::Port port; Node::Peripheral node; auto name() const -> string { return {}; } auto load(Node::Peripheral) -> void {} auto unload() -> void {} auto save() -> void {} auto power(bool reset = false) -> void {} auto readIO(n24, n8) -> n8 { return 0; } auto writeIO(n24, n8) -> void { return; } auto serialize(serializer&) -> void {} n32 Revision = 0; n32 Frequency = 0; }; #endif extern ICD icd; ares-126/ares/sfc/coprocessor/icd/interface.cpp000066400000000000000000000042511415063341600215740ustar00rootroot00000000000000auto ICD::ppuHreset() -> void { hcounter = 0; vcounter++; if((n3)vcounter == 0) writeBank++; } auto ICD::ppuVreset() -> void { hcounter = 0; vcounter = 0; } auto ICD::ppuWrite(n2 color) -> void { auto x = (n8)hcounter++; auto y = (n3)vcounter; if(x >= 160) return; //unverified behavior n11 address = writeBank * 512 + y * 2 + x / 8 * 16; output[address + 0] = output[address + 0] << 1 | color.bit(0); output[address + 1] = output[address + 1] << 1 | color.bit(1); } auto ICD::joypWrite(n1 p14, n1 p15) -> void { //joypad handling if(p14 == 1 && p15 == 1) { if(joypLock == 0) { joypLock = 1; joypID++; if(mltReq == 0) joypID &= 0; //1-player mode if(mltReq == 1) joypID &= 1; //2-player mode if(mltReq == 2) joypID &= 3; //4-player mode (unverified; but the most likely behavior) if(mltReq == 3) joypID &= 3; //4-player mode } } n8 joypad; if(joypID == 0) joypad = r6004; if(joypID == 1) joypad = r6005; if(joypID == 2) joypad = r6006; if(joypID == 3) joypad = r6007; n4 input = 0xf; if(p14 == 1 && p15 == 1) input -= joypID; if(p14 == 0) input &= joypad.bit(0,3); //d-pad if(p15 == 0) input &= joypad.bit(4,7); //buttons GameBoy::cpu.input(input); if(p14 == 0 && p15 == 1); if(p14 == 1 && p15 == 0) joypLock ^= 1; //packet handling if(p14 == 0 && p15 == 0) { //pulse pulseLock = 0; packetOffset = 0; bitOffset = 0; strobeLock = 1; packetLock = 0; return; } if(pulseLock == 1) return; if(p14 == 1 && p15 == 1) { strobeLock = 0; return; } if(strobeLock == 1) { if(p14 == 1 || p15 == 1) { //malformed packet packetLock = 0; pulseLock = 1; bitOffset = 0; packetOffset = 0; } else { return; } } //p14:0, p15:1 = 0 //p14:1, p15:0 = 1 bool bit = p15 == 0; strobeLock = 1; if(packetLock == 1) { if(p14 == 0 && p15 == 1) { if(packetSize < 64) packet[packetSize++] = joypPacket; packetLock = 0; pulseLock = 1; } return; } bitData = bit << 7 | bitData >> 1; if(++bitOffset) return; joypPacket[packetOffset] = bitData; if(++packetOffset) return; packetLock = 1; } ares-126/ares/sfc/coprocessor/icd/io.cpp000066400000000000000000000040651415063341600202460ustar00rootroot00000000000000auto ICD::readIO(n24 address, n8 data) -> n8 { address &= 0x40ffff; //LY counter if(address == 0x6000) { return vcounter & ~7 | writeBank; } //command ready port if(address == 0x6002) { data = packetSize > 0; if(data) { for(auto n : range(16)) r7000[n] = packet[0][n]; packetSize--; for(auto n : range(packetSize)) packet[n] = packet[n + 1]; } return data; } //ICD2 revision if(address == 0x600f) { return 0x21; } //command port if((address & 0x40fff0) == 0x7000) { return r7000[address & 15]; } //VRAM port if(address == 0x7800) { data = output[readBank * 512 + readAddress++]; return data; } return 0x00; } auto ICD::writeIO(n24 address, n8 data) -> void { address &= 0xffff; //VRAM port if(address == 0x6001) { readBank = data.bit(0,1); readAddress = 0; return; } //control port //d7: 0 = halt, 1 = reset //d5,d4: 0 = 1-player, 1 = 2-player, 2 = 4-player, 3 = ??? //d1,d0: 0 = frequency divider (clock rate adjust) if(address == 0x6003) { if(r6003.bit(7) == 0 && data.bit(7) == 1) { power(true); //soft reset } mltReq = data.bit(4,5); if(mltReq == 0) joypID &= ~0; //1-player mode if(mltReq == 1) joypID &= ~1; //2-player mode if(mltReq == 2) joypID &= ~3; //4-player mode (unverified; but the most likely behavior) if(mltReq == 3) joypID &= ~3; //4-player mode auto frequency = system.cpuFrequency(); switch(data.bit(0,1)) { case 0: frequency /= 4; break; //fast (glitchy, even on real hardware) case 1: frequency /= 5; break; //normal case 2: frequency /= 7; break; //slow case 3: frequency /= 9; break; //very slow } Thread::setFrequency(frequency); GameBoy::apu.stream->setFrequency(frequency / 2.0); r6003 = data; return; } if(address == 0x6004) { r6004 = data; return; } //joypad 1 if(address == 0x6005) { r6005 = data; return; } //joypad 2 if(address == 0x6006) { r6006 = data; return; } //joypad 3 if(address == 0x6007) { r6007 = data; return; } //joypad 4 } ares-126/ares/sfc/coprocessor/icd/serialization.cpp000066400000000000000000000010131415063341600225020ustar00rootroot00000000000000auto ICD::serialize(serializer& s) -> void { Thread::serialize(s); GameBoy::system.serialize(s, scheduler.getSynchronize()); for(u32 n : range(64)) s(packet[n].data); s(packetSize); s(joypID); s(joypLock); s(pulseLock); s(strobeLock); s(packetLock); s(joypPacket.data); s(packetOffset); s(bitData); s(bitOffset); s(output); s(readBank); s(readAddress); s(writeBank); s(r6003); s(r6004); s(r6005); s(r6006); s(r6007); s(r7000); s(mltReq); s(hcounter); s(vcounter); } ares-126/ares/sfc/coprocessor/mcc/000077500000000000000000000000001415063341600171315ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/mcc/mcc.cpp000066400000000000000000000213111415063341600203750ustar00rootroot00000000000000MCC mcc; #include "serialization.cpp" auto MCC::unload() -> void { rom.reset(); psram.reset(); } auto MCC::power() -> void { irq.flag = 0; irq.enable = 0; w.mapping = 1; w.psramEnableLo = 1; w.psramEnableHi = 0; w.psramMapping = 3; w.romEnableLo = 1; w.romEnableHi = 1; w.exEnableLo = 1; w.exEnableHi = 0; w.exMapping = 1; w.internallyWritable = 0; w.externallyWritable = 0; commit(); } auto MCC::commit() -> void { r = w; bsmemory.writable(r.externallyWritable); } auto MCC::read(n24 address, n8 data) -> n8 { if((address & 0xf0f000) == 0x005000) { //$00-0f:5000-5fff switch(address.bit(16,19)) { case 0: return irq.flag << 7; case 1: return irq.enable << 7; case 2: return r.mapping << 7; case 3: return r.psramEnableLo << 7; case 4: return r.psramEnableHi << 7; case 5: return r.psramMapping.bit(0) << 7; case 6: return r.psramMapping.bit(1) << 7; case 7: return r.romEnableLo << 7; case 8: return r.romEnableHi << 7; case 9: return r.exEnableLo << 7; case 10: return r.exEnableHi << 7; case 11: return r.exMapping << 7; case 12: return r.internallyWritable << 7; case 13: return r.externallyWritable << 7; case 14: return 0; //commit (always zero) case 15: return 0; //unknown (always zero) } } return data; } auto MCC::write(n24 address, n8 data) -> void { if((address & 0xf0f000) == 0x005000) { //$00-0f:5000-5fff switch(address.bit(16,19)) { case 1: irq.enable = data.bit(7); break; case 2: w.mapping = data.bit(7); break; case 3: w.psramEnableLo = data.bit(7); break; case 4: w.psramEnableHi = data.bit(7); break; case 5: w.psramMapping.bit(0) = data.bit(7); break; case 6: w.psramMapping.bit(1) = data.bit(7); break; case 7: w.romEnableLo = data.bit(7); break; case 8: w.romEnableHi = data.bit(7); break; case 9: w.exEnableLo = data.bit(7); break; case 10: w.exEnableHi = data.bit(7); break; case 11: w.exMapping = data.bit(7); break; case 12: w.internallyWritable = data.bit(7); break; case 13: w.externallyWritable = data.bit(7); break; case 14: if(data.bit(7)) commit(); break; } } } auto MCC::mcuRead(n24 address, n8 data) -> n8 { return mcuAccess(0, address, data); } auto MCC::mcuWrite(n24 address, n8 data) -> void { return mcuAccess(1, address, data), void(); } auto MCC::mcuAccess(bool mode, n24 address, n8 data) -> n8 { //[[ROM]] if(r.romEnableLo) { if((address & 0xc08000) == 0x008000) { //00-3f:8000-ffff return romAccess(mode, (address & 0x3f0000) >> 1 | (address & 0x7fff), data); } } if(r.romEnableHi) { if((address & 0xc08000) == 0x808000) { //80-bf:8000-ffff return romAccess(mode, (address & 0x3f0000) >> 1 | (address & 0x7fff), data); } } //[[PSRAM]] if(r.psramEnableLo && r.mapping == 0) { if(((address & 0xf08000) == 0x008000 && r.psramMapping == 0) //00-0f:8000-ffff || ((address & 0xf08000) == 0x208000 && r.psramMapping == 1) //20-2f:8000-ffff || ((address & 0xf00000) == 0x400000 && r.psramMapping == 2) //40-4f:0000-ffff || ((address & 0xf00000) == 0x600000 && r.psramMapping == 3) //60-6f:0000-ffff ) { return psramAccess(mode, (address & 0x0f0000) >> 1 | (address & 0x7fff), data); } if((address & 0xf08000) == 0x700000) { //70-7d:0000-7fff return psramAccess(mode, (address & 0x0f0000) >> 1 | (address & 0x7fff), data); } } if(r.psramEnableHi && r.mapping == 0) { if(((address & 0xf08000) == 0x808000 && r.psramMapping == 0) //80-8f:8000-ffff || ((address & 0xf08000) == 0xa08000 && r.psramMapping == 1) //a0-af:8000-ffff || ((address & 0xf00000) == 0xc00000 && r.psramMapping == 2) //c0-cf:0000-ffff || ((address & 0xf00000) == 0xe00000 && r.psramMapping == 3) //e0-ef:0000-ffff ) { return psramAccess(mode, (address & 0x0f0000) >> 1 | (address & 0x7fff), data); } if((address & 0xf08000) == 0xf00000) { //f0-ff:0000-7fff return psramAccess(mode, (address & 0x0f0000) >> 1 | (address & 0x7fff), data); } } if(r.psramEnableLo && r.mapping == 1) { if(((address & 0xf88000) == 0x008000 && r.psramMapping == 0) //00-07:8000-ffff || ((address & 0xf88000) == 0x108000 && r.psramMapping == 1) //10-17:8000-ffff || ((address & 0xf88000) == 0x208000 && r.psramMapping == 2) //20-27:8000-ffff || ((address & 0xf88000) == 0x308000 && r.psramMapping == 3) //30-37:8000-ffff || ((address & 0xf80000) == 0x400000 && r.psramMapping == 0) //40-47:0000-ffff || ((address & 0xf80000) == 0x500000 && r.psramMapping == 1) //50-57:0000-ffff || ((address & 0xf80000) == 0x600000 && r.psramMapping == 2) //60-67:0000-ffff || ((address & 0xf80000) == 0x700000 && r.psramMapping == 3) //70-77:0000-ffff ) { return psramAccess(mode, address & 0x07ffff, data); } if((address & 0xe0e000) == 0x206000) { //20-3f:6000-7fff return psramAccess(mode, (address & 0x3f0000) >> 3 | (address & 0x1fff), data); } } if(r.psramEnableHi && r.mapping == 1) { if(((address & 0xf88000) == 0x808000 && r.psramMapping == 0) //80-87:8000-ffff || ((address & 0xf88000) == 0x908000 && r.psramMapping == 1) //90-97:8000-ffff || ((address & 0xf88000) == 0xa08000 && r.psramMapping == 2) //a0-a7:8000-ffff || ((address & 0xf88000) == 0xb08000 && r.psramMapping == 3) //b0-b7:8000-ffff || ((address & 0xf80000) == 0xc00000 && r.psramMapping == 0) //c0-c7:0000-ffff || ((address & 0xf80000) == 0xd00000 && r.psramMapping == 1) //d0-d7:0000-ffff || ((address & 0xf80000) == 0xe00000 && r.psramMapping == 2) //e0-e7:0000-ffff || ((address & 0xf80000) == 0xf00000 && r.psramMapping == 3) //f0-f7:0000-ffff ) { return psramAccess(mode, address & 0x07ffff, data); } if((address & 0xe0e000) == 0xa06000) { //a0-bf:6000-7fff return psramAccess(mode, (address & 0x3f0000) >> 3 | (address & 0x1fff), data); } } //[[EXMEMORY]] if(r.exEnableLo && r.mapping == 0) { if(((address & 0xe08000) == 0x008000 && r.exMapping == 0) //00-1f:8000-ffff || ((address & 0xe00000) == 0x400000 && r.exMapping == 1) //40-5f:0000-ffff ) { return exAccess(mode, (address & 0x1f0000) >> 1 | (address & 0x7fff), data); } } if(r.exEnableLo && r.mapping == 1) { if(((address & 0xf08000) == 0x008000 && r.exMapping == 0) //00-0f:8000-ffff || ((address & 0xf08000) == 0x208000 && r.exMapping == 1) //20-2f:8000-ffff || ((address & 0xf00000) == 0x400000 && r.exMapping == 0) //40-4f:0000-ffff || ((address & 0xf00000) == 0x600000 && r.exMapping == 1) //60-6f:0000-ffff ) { return exAccess(mode, address & 0x0fffff, data); } } if(r.exEnableHi && r.mapping == 0) { if(((address & 0xe08000) == 0x808000 && r.exMapping == 0) //80-9f:8000-ffff || ((address & 0xe00000) == 0xc00000 && r.exMapping == 1) //c0-df:0000-ffff ) { return exAccess(mode, (address & 0x1f0000) >> 1 | (address & 0x7fff), data); } } if(r.exEnableHi && r.mapping == 1) { if(((address & 0xf08000) == 0x808000 && r.exMapping == 0) //80-8f:8000-ffff || ((address & 0xf08000) == 0xa08000 && r.exMapping == 1) //a0-af:8000-ffff || ((address & 0xf00000) == 0xc00000 && r.exMapping == 0) //c0-cf:0000-ffff || ((address & 0xf00000) == 0xe00000 && r.exMapping == 1) //e0-ef:0000-ffff ) { return exAccess(mode, address & 0x0fffff, data); } } //[[BSMEMORY]] if(bsmemory.size() && r.mapping == 0) { if(((address & 0x408000) == 0x008000) //00-3f,80-bf:8000-ffff || ((address & 0x400000) == 0x400000) //40-7d,c0-ff:0000-ffff ) { return bsAccess(mode, (address & 0x3f0000) >> 1 | (address & 0x7fff), data); } } if(bsmemory.size() && r.mapping == 1) { if(((address & 0x408000) == 0x008000) //00-3f,80-bf:8000-ffff || ((address & 0x400000) == 0x400000) //40-7d,c0-ff:0000-ffff ) { return bsAccess(mode, address & 0x3fffff, data); } } return data; } //size: 0x100000 auto MCC::romAccess(bool mode, n24 address, n8 data) -> n8 { address = bus.mirror(address, rom.size()); if(mode == 0) return rom.read(address); return data; } //size: 0x80000 auto MCC::psramAccess(bool mode, n24 address, n8 data) -> n8 { address = bus.mirror(address, psram.size()); if(mode == 0) return psram.read(address); return psram.write(address, data), data; } //size: 0x100000 (?) auto MCC::exAccess(bool mode, n24 address, n8 data) -> n8 { //not physically present on BSC-1A5B9P-01 return data; } //size: 0x100000, 0x200000, 0x400000 auto MCC::bsAccess(bool mode, n24 address, n8 data) -> n8 { address = bus.mirror(address, bsmemory.size()); if(mode == 0) return bsmemory.read(address, data); if(!r.internallyWritable) return data; return bsmemory.write(address, data), data; } ares-126/ares/sfc/coprocessor/mcc/mcc.hpp000066400000000000000000000027461415063341600204150ustar00rootroot00000000000000//MCC - Memory Controller Chip //Custom logic chip inside the BS-X Satellaview base cartridge struct MCC { ReadableMemory rom; WritableMemory psram; //mcc.cpp auto unload() -> void; auto power() -> void; auto commit() -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; auto mcuRead(n24 address, n8 data) -> n8; auto mcuWrite(n24 address, n8 data) -> void; auto mcuAccess(bool mode, n24 address, n8 data) -> n8; auto romAccess(bool mode, n24 address, n8 data) -> n8; auto psramAccess(bool mode, n24 address, n8 data) -> n8; auto exAccess(bool mode, n24 address, n8 data) -> n8; auto bsAccess(bool mode, n24 address, n8 data) -> n8; //serialization.cpp auto serialize(serializer&) -> void; private: struct IRQ { n1 flag; //bit 0 n1 enable; //bit 1 } irq; struct Registers { n1 mapping; //bit 2 (0 = ignore A15; 1 = use A15) n1 psramEnableLo; //bit 3 n1 psramEnableHi; //bit 4 n2 psramMapping; //bits 5-6 n1 romEnableLo; //bit 7 n1 romEnableHi; //bit 8 n1 exEnableLo; //bit 9 n1 exEnableHi; //bit 10 n1 exMapping; //bit 11 n1 internallyWritable; //bit 12 (1 = MCC allows writes to BS Memory Cassette) n1 externallyWritable; //bit 13 (1 = BS Memory Cassette allows writes to flash memory) } r, w; //bit 14 = commit //bit 15 = unknown (test register interface?) }; extern MCC mcc; ares-126/ares/sfc/coprocessor/mcc/serialization.cpp000066400000000000000000000010541415063341600225120ustar00rootroot00000000000000auto MCC::serialize(serializer& s) -> void { s(psram); s(irq.flag); s(irq.enable); s(r.mapping); s(r.psramEnableLo); s(r.psramEnableHi); s(r.psramMapping); s(r.romEnableLo); s(r.romEnableHi); s(r.exEnableLo); s(r.exEnableHi); s(r.exMapping); s(r.internallyWritable); s(r.externallyWritable); s(w.mapping); s(w.psramEnableLo); s(w.psramEnableHi); s(w.psramMapping); s(w.romEnableLo); s(w.romEnableHi); s(w.exEnableLo); s(w.exEnableHi); s(w.exMapping); s(w.internallyWritable); s(w.externallyWritable); } ares-126/ares/sfc/coprocessor/msu1/000077500000000000000000000000001415063341600172545ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/msu1/msu1.cpp000066400000000000000000000102421415063341600206440ustar00rootroot00000000000000MSU1 msu1; #include "serialization.cpp" auto MSU1::load(Node::Object parent) -> void { stream = parent->append("MSU1"); stream->setChannels(2); stream->setFrequency(44100); } auto MSU1::unload(Node::Object parent) -> void { parent->remove(stream); stream.reset(); dataFile.reset(); audioFile.reset(); cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto MSU1::main() -> void { f64 left = 0.0; f64 right = 0.0; if(io.audioPlay) { if(audioFile) { if(audioFile->end()) { if(!io.audioRepeat) { io.audioPlay = false; audioFile->seek(io.audioPlayOffset = 8); } else { audioFile->seek(io.audioPlayOffset = io.audioLoopOffset); } } else { io.audioPlayOffset += 4; left = (f64)(s16)audioFile->readl(2) / 32768.0 * (f64)io.audioVolume / 255.0; right = (f64)(s16)audioFile->readl(2) / 32768.0 * (f64)io.audioVolume / 255.0; if(dsp.mute()) left = 0, right = 0; } } else { io.audioPlay = false; } } stream->frame(left, right); Thread::step(1); Thread::synchronize(cpu); } auto MSU1::power() -> void { Thread::create(44100, {&MSU1::main, this}); cpu.coprocessors.append(this); io.dataSeekOffset = 0; io.dataReadOffset = 0; io.audioPlayOffset = 0; io.audioLoopOffset = 0; io.audioTrack = 0; io.audioVolume = 0; io.audioResumeTrack = ~0; //no resume io.audioResumeOffset = 0; io.audioError = false; io.audioPlay = false; io.audioRepeat = false; io.audioBusy = false; io.dataBusy = false; dataOpen(); audioOpen(); } auto MSU1::dataOpen() -> void { dataFile.reset(); if(dataFile = cartridge.pak->read("msu1.data.rom")) { dataFile->seek(io.dataReadOffset); } } auto MSU1::audioOpen() -> void { audioFile.reset(); if(audioFile = cartridge.pak->read({"msu1.track-", io.audioTrack, ".pcm"})) { if(audioFile->size() >= 8) { n32 header = audioFile->readm(4); if(header == 0x4d535531) { //"MSU1" io.audioLoopOffset = 8 + audioFile->readl(4) * 4; if(io.audioLoopOffset > audioFile->size()) io.audioLoopOffset = 8; io.audioError = false; audioFile->seek(io.audioPlayOffset); return; } } audioFile.reset(); } io.audioError = true; } auto MSU1::readIO(n24 address, n8 data) -> n8 { cpu.synchronize(*this); switch(0x2000 | address & 7) { case 0x2000: data.bit(0,2) = Revision; data.bit(3) = io.audioError; data.bit(4) = io.audioPlay; data.bit(5) = io.audioRepeat; data.bit(6) = io.audioBusy; data.bit(7) = io.dataBusy; return data; case 0x2001: if(io.dataBusy) return 0x00; if(!dataFile) return 0x00; if(dataFile->end()) return 0x00; io.dataReadOffset++; return dataFile->read(); case 0x2002: return 'S'; case 0x2003: return '-'; case 0x2004: return 'M'; case 0x2005: return 'S'; case 0x2006: return 'U'; case 0x2007: return '1'; } return data; //unreachable } auto MSU1::writeIO(n24 address, n8 data) -> void { cpu.synchronize(*this); switch(0x2000 | address & 7) { case 0x2000: io.dataSeekOffset.byte(0) = data; break; case 0x2001: io.dataSeekOffset.byte(1) = data; break; case 0x2002: io.dataSeekOffset.byte(2) = data; break; case 0x2003: io.dataSeekOffset.byte(3) = data; io.dataReadOffset = io.dataSeekOffset; if(dataFile) dataFile->seek(io.dataReadOffset); break; case 0x2004: io.audioTrack.byte(0) = data; break; case 0x2005: io.audioTrack.byte(1) = data; io.audioPlay = false; io.audioRepeat = false; io.audioPlayOffset = 8; if(io.audioTrack == io.audioResumeTrack) { io.audioPlayOffset = io.audioResumeOffset; io.audioResumeTrack = ~0; //erase resume track io.audioResumeOffset = 0; } audioOpen(); break; case 0x2006: io.audioVolume = data; break; case 0x2007: if(io.audioBusy) break; if(io.audioError) break; io.audioPlay = data.bit(0); io.audioRepeat = data.bit(1); boolean audioResume = data.bit(2); if(!io.audioPlay && audioResume) { io.audioResumeTrack = io.audioTrack; io.audioResumeOffset = io.audioPlayOffset; } break; } } ares-126/ares/sfc/coprocessor/msu1/msu1.hpp000066400000000000000000000016711415063341600206570ustar00rootroot00000000000000struct MSU1 : Thread { Node::Audio::Stream stream; VFS::File dataFile; VFS::File audioFile; auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto main() -> void; auto power() -> void; auto dataOpen() -> void; auto audioOpen() -> void; auto readIO(n24 address, n8 data) -> n8; auto writeIO(n24 address, n8 data) -> void; auto serialize(serializer&) -> void; private: enum Flag : u32 { Revision = 0x02, //max: 0x07 AudioError = 0x08, AudioPlaying = 0x10, AudioRepeating = 0x20, AudioBusy = 0x40, DataBusy = 0x80, }; struct IO { n32 dataSeekOffset; n32 dataReadOffset; n32 audioPlayOffset; n32 audioLoopOffset; n16 audioTrack; n8 audioVolume; n32 audioResumeTrack; n32 audioResumeOffset; n1 audioError; n1 audioPlay; n1 audioRepeat; n1 audioBusy; n1 dataBusy; } io; }; extern MSU1 msu1; ares-126/ares/sfc/coprocessor/msu1/serialization.cpp000066400000000000000000000006141415063341600226360ustar00rootroot00000000000000auto MSU1::serialize(serializer& s) -> void { Thread::serialize(s); s(io.dataSeekOffset); s(io.dataReadOffset); s(io.audioPlayOffset); s(io.audioLoopOffset); s(io.audioTrack); s(io.audioVolume); s(io.audioResumeTrack); s(io.audioResumeOffset); s(io.audioError); s(io.audioPlay); s(io.audioRepeat); s(io.audioBusy); s(io.dataBusy); dataOpen(); audioOpen(); } ares-126/ares/sfc/coprocessor/necdsp/000077500000000000000000000000001415063341600176435ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/necdsp/debugger.cpp000066400000000000000000000006621415063341600221370ustar00rootroot00000000000000auto NECDSP::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "NEC"); tracer.instruction->setAddressBits(14); } auto NECDSP::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(necdsp.regs.pc)) { tracer.instruction->notify(necdsp.disassembleInstruction(), necdsp.disassembleContext()); } } ares-126/ares/sfc/coprocessor/necdsp/memory.cpp000066400000000000000000000011261415063341600216570ustar00rootroot00000000000000auto NECDSP::read(n24 address, n8) -> n8 { cpu.synchronize(*this); if(address.bit(0)) { return uPD96050::readSR(); } else { return uPD96050::readDR(); } } auto NECDSP::write(n24 address, n8 data) -> void { cpu.synchronize(*this); if(address.bit(0)) { return uPD96050::writeSR(data); } else { return uPD96050::writeDR(data); } } auto NECDSP::readRAM(n24 address, n8) -> n8 { cpu.synchronize(*this); return uPD96050::readDP(address); } auto NECDSP::writeRAM(n24 address, n8 data) -> void { cpu.synchronize(*this); return uPD96050::writeDP(address, data); } ares-126/ares/sfc/coprocessor/necdsp/necdsp.cpp000066400000000000000000000011241415063341600216210ustar00rootroot00000000000000NECDSP necdsp; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto NECDSP::load(Node::Object parent) -> void { node = parent->append("NEC"); debugger.load(node); } auto NECDSP::unload() -> void { debugger = {}; node = {}; cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto NECDSP::main() -> void { debugger.instruction(); exec(); Thread::step(1); Thread::synchronize(cpu); } auto NECDSP::power() -> void { uPD96050::power(); Thread::create(Frequency, {&NECDSP::main, this}); cpu.coprocessors.append(this); } ares-126/ares/sfc/coprocessor/necdsp/necdsp.hpp000066400000000000000000000013371415063341600216340ustar00rootroot00000000000000struct NECDSP : uPD96050, Thread { Node::Object node; n32 Frequency = 0; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; } tracer; } debugger; //necdsp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto power() -> void; //memory.cpp auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; auto readRAM(n24 address, n8 data) -> n8; auto writeRAM(n24 address, n8 data) -> void; auto firmware() const -> vector; //serialization.cpp auto serialize(serializer&) -> void; }; extern NECDSP necdsp; ares-126/ares/sfc/coprocessor/necdsp/serialization.cpp000066400000000000000000000012121415063341600232200ustar00rootroot00000000000000auto NECDSP::firmware() const -> vector { vector buffer; if(!cartridge.has.NECDSP) return buffer; u32 plength = 2048, dlength = 1024; if(revision == Revision::uPD96050) plength = 16384, dlength = 2048; buffer.reserve(plength * 3 + dlength * 2); for(u32 n : range(plength)) { buffer.append(programROM[n] >> 0); buffer.append(programROM[n] >> 8); buffer.append(programROM[n] >> 16); } for(u32 n : range(dlength)) { buffer.append(dataROM[n] >> 0); buffer.append(dataROM[n] >> 8); } return buffer; } auto NECDSP::serialize(serializer& s) -> void { uPD96050::serialize(s); Thread::serialize(s); } ares-126/ares/sfc/coprocessor/obc1/000077500000000000000000000000001415063341600172135ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/obc1/obc1.cpp000066400000000000000000000036021415063341600205440ustar00rootroot00000000000000OBC1 obc1; #include "serialization.cpp" auto OBC1::unload() -> void { ram.reset(); } auto OBC1::power() -> void { status.baseptr = (ramRead(0x1ff5) & 1) ? 0x1800 : 0x1c00; status.address = (ramRead(0x1ff6) & 0x7f); status.shift = (ramRead(0x1ff6) & 3) << 1; } auto OBC1::read(n24 address, n8) -> n8 { address &= 0x1fff; switch(address) { case 0x1ff0: return ramRead(status.baseptr + (status.address << 2) + 0); case 0x1ff1: return ramRead(status.baseptr + (status.address << 2) + 1); case 0x1ff2: return ramRead(status.baseptr + (status.address << 2) + 2); case 0x1ff3: return ramRead(status.baseptr + (status.address << 2) + 3); case 0x1ff4: return ramRead(status.baseptr + (status.address >> 2) + 0x200); } return ramRead(address); } auto OBC1::write(n24 address, n8 data) -> void { address &= 0x1fff; switch(address) { case 0x1ff0: ramWrite(status.baseptr + (status.address << 2) + 0, data); return; case 0x1ff1: ramWrite(status.baseptr + (status.address << 2) + 1, data); return; case 0x1ff2: ramWrite(status.baseptr + (status.address << 2) + 2, data); return; case 0x1ff3: ramWrite(status.baseptr + (status.address << 2) + 3, data); return; case 0x1ff4: { n8 temp = ramRead(status.baseptr + (status.address >> 2) + 0x200); temp = (temp & ~(3 << status.shift)) | ((data & 3) << status.shift); ramWrite(status.baseptr + (status.address >> 2) + 0x200, temp); } return; case 0x1ff5: status.baseptr = (data & 1) ? 0x1800 : 0x1c00; ramWrite(address, data); return; case 0x1ff6: status.address = (data & 0x7f); status.shift = (data & 3) << 1; ramWrite(address, data); return; case 0x1ff7: ramWrite(address, data); return; } return ramWrite(address, data); } auto OBC1::ramRead(n13 address) -> n8 { return ram.read(address); } auto OBC1::ramWrite(n13 address, n8 data) -> void { ram.write(address, data); } ares-126/ares/sfc/coprocessor/obc1/obc1.hpp000066400000000000000000000006171415063341600205540ustar00rootroot00000000000000struct OBC1 { auto unload() -> void; auto power() -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; auto serialize(serializer&) -> void; WritableMemory ram; private: auto ramRead(n13 address) -> n8; auto ramWrite(n13 address, n8 data) -> void; struct { n16 address; n16 baseptr; n16 shift; } status; }; extern OBC1 obc1; ares-126/ares/sfc/coprocessor/obc1/serialization.cpp000066400000000000000000000001671415063341600226000ustar00rootroot00000000000000auto OBC1::serialize(serializer& s) -> void { s(ram); s(status.address); s(status.baseptr); s(status.shift); } ares-126/ares/sfc/coprocessor/sa1/000077500000000000000000000000001415063341600170535ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/sa1/bwram.cpp000066400000000000000000000071421415063341600206730ustar00rootroot00000000000000inline auto SA1::BWRAM::conflict() const -> bool { if((cpu.r.mar & 0x40e000) == 0x006000) return true; //00-3f,80-bf:6000-7fff if((cpu.r.mar & 0xf00000) == 0x400000) return true; //40-4f:0000-ffff return false; } inline auto SA1::BWRAM::read(n24 address, n8 data) -> n8 { if(!size()) return data; address = bus.mirror(address, size()); return WritableMemory::read(address, data); } inline auto SA1::BWRAM::write(n24 address, n8 data) -> void { if(!size()) return; address = bus.mirror(address, size()); return WritableMemory::write(address, data); } //note: addresses are translated prior to invoking this function: //00-3f,80-bf:6000-7fff size=0x2000 => 00:0000-1fff //40-4f:0000-ffff => untranslated auto SA1::BWRAM::readCPU(n24 address, n8 data) -> n8 { cpu.synchronize(sa1); if(address < 0x2000) { //$00-3f,80-bf:6000-7fff address = sa1.io.sbm * 0x2000 + (address & 0x1fff); } if(dma) return sa1.dmaCC1Read(address); return read(address, data); } auto SA1::BWRAM::writeCPU(n24 address, n8 data) -> void { cpu.synchronize(sa1); if(address < 0x2000) { //$00-3f,80-bf:6000-7fff address = sa1.io.sbm * 0x2000 + (address & 0x1fff); } if(!sa1.io.swen && (n18)address < 0x100 << sa1.io.bwp) return; return write(address, data); } auto SA1::BWRAM::readSA1(n24 address, n8 data) -> n8 { if(sa1.io.sw46 == 0) { //$40-43:0000-ffff x 32 projection address = (sa1.io.cbm & 0x1f) * 0x2000 + (address & 0x1fff); return readLinear(address, data); } else { //$60-6f:0000-ffff x 128 projection address = sa1.io.cbm * 0x2000 + (address & 0x1fff); return readBitmap(address, data); } } //note: CWEN is not emulated, as it breaks Kirby's Dream Land 3: //* BWPA = 02 (protect 400000-4003ff) //* CWEN = 00 (writes disabled) //KDL3 proceeds to write to 4001ax and 40032x which must succeed. auto SA1::BWRAM::writeSA1(n24 address, n8 data) -> void { if(sa1.io.sw46 == 0) { //$40-43:0000-ffff x 32 projection address = (sa1.io.cbm & 0x1f) * 0x2000 + (address & 0x1fff); return writeLinear(address, data); } else { //$60-6f:0000-ffff x 128 projection address = sa1.io.cbm * 0x2000 + (address & 0x1fff); return writeBitmap(address, data); } } auto SA1::BWRAM::readLinear(n24 address, n8 data) -> n8 { return read(address, data); } auto SA1::BWRAM::writeLinear(n24 address, n8 data) -> void { return write(address, data); } auto SA1::BWRAM::readBitmap(n20 address, n8 data) -> n8 { if(sa1.io.bbf == 0) { //4bpp u32 shift = address & 1; address >>= 1; switch(shift) { case 0: return read(address).bit(0,3); case 1: return read(address).bit(4,7); } } else { //2bpp u32 shift = address & 3; address >>= 2; switch(shift) { case 0: return read(address).bit(0,1); case 1: return read(address).bit(2,3); case 2: return read(address).bit(4,5); case 3: return read(address).bit(6,7); } } unreachable; } auto SA1::BWRAM::writeBitmap(n20 address, n8 data) -> void { if(sa1.io.bbf == 0) { //4bpp u32 shift = address & 1; address >>= 1; switch(shift) { case 0: data = read(address) & 0xf0 | data.bit(0,3) << 0; break; case 1: data = read(address) & 0x0f | data.bit(0,3) << 4; break; } } else { //2bpp u32 shift = address & 3; address >>= 2; switch(shift) { case 0: data = read(address) & 0xfc | data.bit(0,1) << 0; break; case 1: data = read(address) & 0xf3 | data.bit(0,1) << 2; break; case 2: data = read(address) & 0xcf | data.bit(0,1) << 4; break; case 3: data = read(address) & 0x3f | data.bit(0,1) << 6; break; } } write(address, data); } ares-126/ares/sfc/coprocessor/sa1/debugger.cpp000066400000000000000000000012131415063341600213400ustar00rootroot00000000000000auto SA1::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "SA1"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "SA1"); } auto SA1::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(sa1.r.pc.d)) { tracer.instruction->notify(sa1.disassembleInstruction(), sa1.disassembleContext()); } } auto SA1::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/sfc/coprocessor/sa1/dma.cpp000066400000000000000000000071551415063341600203300ustar00rootroot00000000000000//direct data transfer auto SA1::dmaNormal() -> void { while(io.dtc--) { n8 data = r.mdr; n24 source = io.dsa++; n16 target = io.dda++; if(io.sd == DMA::SourceROM && io.dd == DMA::DestBWRAM) { step(); step(); if(bwram.conflict()) step(); if(bwram.conflict()) step(); data = rom.readSA1(source, data); bwram.write(target, data); } if(io.sd == DMA::SourceROM && io.dd == DMA::DestIRAM) { step(); if(iram.conflict() || rom.conflict()) step(); if(iram.conflict()) step(); data = rom.readSA1(source, data); iram.write(target, data); } if(io.sd == DMA::SourceBWRAM && io.dd == DMA::DestIRAM) { step(); step(); if(bwram.conflict() || iram.conflict()) step(); if(bwram.conflict()) step(); data = bwram.read(source, data); iram.write(target, data); } if(io.sd == DMA::SourceIRAM && io.dd == DMA::DestBWRAM) { step(); step(); if(bwram.conflict() || iram.conflict()) step(); if(bwram.conflict()) step(); data = iram.read(source, data); bwram.write(target, data); } } io.dma_irqfl = true; if(io.dma_irqen) io.dma_irqcl = 0; } //type-1 character conversion auto SA1::dmaCC1() -> void { bwram.dma = true; io.chdma_irqfl = true; if(io.chdma_irqen) { io.chdma_irqcl = 0; cpu.irq(1); } } //((byte & 6) << 3) + (byte & 1) explanation: //transforms a byte index (0-7) into a planar index: //result[] = {0, 1, 16, 17, 32, 33, 48, 49}; //works for 2bpp, 4bpp and 8bpp modes //type-1 character conversion auto SA1::dmaCC1Read(n24 address) -> n8 { //16 bytes/char (2bpp); 32 bytes/char (4bpp); 64 bytes/char (8bpp) u32 charmask = (1 << (6 - io.dmacb)) - 1; if((address & charmask) == 0) { //buffer next character to I-RAM u32 bpp = 2 << (2 - io.dmacb); u32 bpl = (8 << io.dmasize) >> io.dmacb; u32 bwmask = bwram.size() - 1; u32 tile = ((address - io.dsa) & bwmask) >> (6 - io.dmacb); u32 ty = (tile >> io.dmasize); u32 tx = tile & ((1 << io.dmasize) - 1); u32 bwaddr = io.dsa + ty * 8 * bpl + tx * bpp; for(u32 y : range(8)) { u64 data = 0; for(u32 byte : range(bpp)) { data |= (u64)bwram.read((bwaddr + byte) & bwmask) << (byte << 3); } bwaddr += bpl; u8 out[] = {0, 0, 0, 0, 0, 0, 0, 0}; for(u32 x : range(8)) { out[0] |= (data & 1) << 7 - x; data >>= 1; out[1] |= (data & 1) << 7 - x; data >>= 1; if(io.dmacb == 2) continue; out[2] |= (data & 1) << 7 - x; data >>= 1; out[3] |= (data & 1) << 7 - x; data >>= 1; if(io.dmacb == 1) continue; out[4] |= (data & 1) << 7 - x; data >>= 1; out[5] |= (data & 1) << 7 - x; data >>= 1; out[6] |= (data & 1) << 7 - x; data >>= 1; out[7] |= (data & 1) << 7 - x; data >>= 1; } for(u32 byte : range(bpp)) { u32 p = io.dda + (y << 1) + ((byte & 6) << 3) + (byte & 1); iram.write(p & 0x07ff, out[byte]); } } } return iram.read((io.dda + (address & charmask)) & 0x07ff); } //type-2 character conversion auto SA1::dmaCC2() -> void { //select register file index (0-7 or 8-15) const n8* brf = &io.brf[(dma.line & 1) << 3]; u32 bpp = 2 << (2 - io.dmacb); u32 address = io.dda & 0x07ff; address &= ~((1 << (7 - io.dmacb)) - 1); address += (dma.line & 8) * bpp; address += (dma.line & 7) * 2; for(u32 byte : range(bpp)) { u8 output = 0; for(u32 bit : range(8)) { output |= ((brf[bit] >> byte) & 1) << (7 - bit); } iram.write(address + ((byte & 6) << 3) + (byte & 1), output); } dma.line = (dma.line + 1) & 15; } ares-126/ares/sfc/coprocessor/sa1/io.cpp000066400000000000000000000261621415063341600201750ustar00rootroot00000000000000auto SA1::readIOCPU(n24 address, n8 data) -> n8 { cpu.synchronize(sa1); switch(0x2200 | address.bit(0,8)) { //(SFR) S-CPU flag read case 0x2300: data.bit(0,3) = io.cmeg; data.bit(4) = io.cpu_nvsw; data.bit(5) = io.chdma_irqfl; data.bit(6) = io.cpu_ivsw; data.bit(7) = io.cpu_irqfl; return data; //(VC) version code register case 0x230e: return data; //does not actually exist on real hardware ... always returns open bus } return data; } auto SA1::readIOSA1(n24 address, n8 data) -> n8 { synchronize(cpu); switch(0x2200 | address.bit(0,8)) { //(CFR) SA-1 flag read case 0x2301: data.bit(0,3) = io.smeg; data.bit(4) = io.sa1_nmifl; data.bit(5) = io.dma_irqfl; data.bit(6) = io.timer_irqfl; data.bit(7) = io.sa1_irqfl; return data; //(HCR) hcounter read case 0x2302: //latch counters io.hcr = status.hcounter >> 2; io.vcr = status.vcounter; return io.hcr.byte(0); case 0x2303: return io.hcr.byte(1); //(VCR) vcounter read case 0x2304: return io.vcr.byte(0); case 0x2305: return io.vcr.byte(1); //(MR) arithmetic result case 0x2306: return io.mr.byte(0); case 0x2307: return io.mr.byte(1); case 0x2308: return io.mr.byte(2); case 0x2309: return io.mr.byte(3); case 0x230a: return io.mr.byte(4); //(OF) arithmetic overflow flag case 0x230b: return io.overflow << 7; //(VDPL) variable-length data read port low case 0x230c: { n24 data; data.byte(0) = readVBR(io.va + 0); data.byte(1) = readVBR(io.va + 1); data.byte(2) = readVBR(io.va + 2); data >>= io.vbit; return data.byte(0); } //(VDPH) variable-length data read port high case 0x230d: { n24 data; data.byte(0) = readVBR(io.va + 0); data.byte(1) = readVBR(io.va + 1); data.byte(2) = readVBR(io.va + 2); data >>= io.vbit; if(io.hl == 1) { //auto-increment mode io.vbit += io.vb; io.va += io.vbit >> 3; io.vbit &= 7; } return data.byte(1); } } return 0xff; //unverified } auto SA1::writeIOCPU(n24 address, n8 data) -> void { cpu.synchronize(sa1); switch(0x2200 | address.bit(0,8)) { //(CCNT) SA-1 control case 0x2200: if(io.sa1_resb && !data.bit(5)) { //reset SA-1 CPU (PC bank set to 0x00) r.pc.d = io.crv; } io.smeg = data.bit(0,3); io.sa1_nmi = data.bit(4); io.sa1_resb = data.bit(5); io.sa1_rdyb = data.bit(6); io.sa1_irq = data.bit(7); if(io.sa1_irq) { io.sa1_irqfl = true; if(io.sa1_irqen) io.sa1_irqcl = 0; } if(io.sa1_nmi) { io.sa1_nmifl = true; if(io.sa1_nmien) io.sa1_nmicl = 0; } return; //(SIE) S-CPU interrupt enable case 0x2201: if(!io.chdma_irqen && data.bit(5)) { if(io.chdma_irqfl) { io.chdma_irqcl = 0; cpu.irq(1); } } if(!io.cpu_irqen && data.bit(7)) { if(io.cpu_irqfl) { io.cpu_irqcl = 0; cpu.irq(1); } } io.chdma_irqen = data.bit(5); io.cpu_irqen = data.bit(7); return; //(SIC) S-CPU interrupt clear case 0x2202: io.chdma_irqcl = data.bit(5); io.cpu_irqcl = data.bit(7); if(io.chdma_irqcl) io.chdma_irqfl = 0; if(io.cpu_irqcl ) io.cpu_irqfl = 0; if(!io.chdma_irqfl && !io.cpu_irqfl) cpu.irq(0); return; //(CRV) SA-1 reset vector case 0x2203: io.crv.byte(0) = data; return; case 0x2204: io.crv.byte(1) = data; return; //(CNV) SA-1 NMI vector case 0x2205: io.cnv.byte(0) = data; return; case 0x2206: io.cnv.byte(1) = data; return; //(CIV) SA-1 IRQ vector case 0x2207: io.civ.byte(0) = data; return; case 0x2208: io.civ.byte(1) = data; return; //(CXB) Super MMC bank C case 0x2220: io.cb = data.bit(0,2); io.cbmode = data.bit(7); return; //(DXB) Super MMC bank D case 0x2221: io.db = data.bit(0,2); io.dbmode = data.bit(7); return; //(EXB) Super MMC bank E case 0x2222: io.eb = data.bit(0,2); io.ebmode = data.bit(7); return; //(FXB) Super MMC bank F case 0x2223: io.fb = data.bit(0,2); io.fbmode = data.bit(7); return; //(BMAPS) S-CPU BW-RAM address mapping case 0x2224: io.sbm = data.bit(0,4); return; //(SWBE) S-CPU BW-RAM write enable case 0x2226: io.swen = data.bit(7); return; //(BWPA) BW-RAM write-protected area case 0x2228: io.bwp = data.bit(0,3); return; //(SIWP) S-CPU I-RAM write protection case 0x2229: io.siwp = data; return; case 0x2231: case 0x2232: case 0x2233: case 0x2234: case 0x2235: case 0x2236: case 0x2237: return writeIOShared(address, data); } } auto SA1::writeIOSA1(n24 address, n8 data) -> void { synchronize(cpu); switch(0x2200 | address.bit(0,8)) { //(SCNT) S-CPU control case 0x2209: io.cmeg = data.bit(0,3); io.cpu_nvsw = data.bit(4); io.cpu_ivsw = data.bit(6); io.cpu_irq = data.bit(7); if(io.cpu_irq) { io.cpu_irqfl = 1; if(io.cpu_irqen) { io.cpu_irqcl = 0; cpu.irq(1); } } return; //(CIE) SA-1 interrupt enable case 0x220a: if(!io.sa1_nmien && data.bit(4) && io.sa1_nmifl ) io.sa1_nmicl = 0; if(!io.dma_irqen && data.bit(5) && io.dma_irqfl ) io.dma_irqcl = 0; if(!io.timer_irqen && data.bit(6) && io.timer_irqfl) io.timer_irqcl = 0; if(!io.sa1_irqen && data.bit(7) && io.sa1_irqfl ) io.sa1_irqcl = 0; io.sa1_nmien = data.bit(4); io.dma_irqen = data.bit(5); io.timer_irqen = data.bit(6); io.sa1_irqen = data.bit(7); return; //(CIC) SA-1 interrupt clear case 0x220b: io.sa1_nmicl = data.bit(4); io.dma_irqcl = data.bit(5); io.timer_irqcl = data.bit(6); io.sa1_irqcl = data.bit(7); if(io.sa1_nmicl) io.sa1_nmifl = 0; if(io.sa1_irqcl) io.sa1_irqfl = 0; if(io.timer_irqcl) io.timer_irqfl = 0; if(io.dma_irqcl) io.dma_irqfl = 0; return; //(SNV) S-CPU NMI vector case 0x220c: io.snv.byte(0) = data; return; case 0x220d: io.snv.byte(1) = data; return; //(SIV) S-CPU IRQ vector case 0x220e: io.siv.byte(0) = data; return; case 0x220f: io.siv.byte(1) = data; return; //(TMC) H/V timer control case 0x2210: io.hen = data.bit(0); io.ven = data.bit(1); io.hvselb = data.bit(7); return; //(CTR) SA-1 timer restart case 0x2211: status.vcounter = 0; status.hcounter = 0; return; //(HCNT) H-count case 0x2212: io.hcnt.byte(0) = data; return; case 0x2213: io.hcnt.byte(1) = data; return; //(VCNT) V-count case 0x2214: io.vcnt.byte(0) = data; return; case 0x2215: io.vcnt.byte(1) = data; return; //(BMAP) SA-1 BW-RAM address mapping case 0x2225: io.cbm = data.bit(0,6); io.sw46 = data.bit(7); return; //(CWBE) SA-1 BW-RAM write enable case 0x2227: io.cwen = data.bit(7); return; //(CIWP) SA-1 I-RAM write protection case 0x222a: io.ciwp = data; return; //(DCNT) DMA control case 0x2230: io.sd = data.bit(0,1); io.dd = data.bit(2); io.cdsel = data.bit(4); io.cden = data.bit(5); io.dprio = data.bit(6); io.dmaen = data.bit(7); if(io.dmaen == 0) dma.line = 0; return; case 0x2231: case 0x2232: case 0x2233: case 0x2234: case 0x2235: case 0x2236: case 0x2237: return writeIOShared(address, data); //(DTC) DMA terminal counter case 0x2238: io.dtc.byte(0) = data; return; case 0x2239: io.dtc.byte(1) = data; return; //(BBF) BW-RAM bitmap format case 0x223f: io.bbf = data.bit(7); return; //(BRF) bitmap register files case 0x2240: io.brf[ 0] = data; return; case 0x2241: io.brf[ 1] = data; return; case 0x2242: io.brf[ 2] = data; return; case 0x2243: io.brf[ 3] = data; return; case 0x2244: io.brf[ 4] = data; return; case 0x2245: io.brf[ 5] = data; return; case 0x2246: io.brf[ 6] = data; return; case 0x2247: io.brf[ 7] = data; if(io.dmaen) { if(io.cden == 1 && io.cdsel == 0) { dmaCC2(); } } return; case 0x2248: io.brf[ 8] = data; return; case 0x2249: io.brf[ 9] = data; return; case 0x224a: io.brf[10] = data; return; case 0x224b: io.brf[11] = data; return; case 0x224c: io.brf[12] = data; return; case 0x224d: io.brf[13] = data; return; case 0x224e: io.brf[14] = data; return; case 0x224f: io.brf[15] = data; if(io.dmaen) { if(io.cden == 1 && io.cdsel == 0) { dmaCC2(); } } return; //(MCNT) arithmetic control case 0x2250: io.md = data.bit(0); io.acm = data.bit(1); if(io.acm) io.mr = 0; return; //(MAL) multiplicand / dividend low case 0x2251: io.ma.byte(0) = data; return; //(MAH) multiplicand / dividend high case 0x2252: io.ma.byte(1) = data; return; //(MBL) multiplier / divisor low case 0x2253: io.mb.byte(0) = data; return; //(MBH) multiplier / divisor high //multiplication / cumulative sum only resets MB //division resets both MA and MB case 0x2254: io.mb.byte(1) = data; if(io.acm == 0) { if(io.md == 0) { //signed multiplication io.mr = n32((i16)io.ma * (i16)io.mb); io.mb = 0; } else { //unsigned division if(io.mb == 0) { io.mr = 0; } else { i16 dividend = io.ma; n16 divisor = io.mb; n16 remainder = dividend >= 0 ? n16(dividend % divisor) : n16((dividend % divisor + divisor) % divisor); n16 quotient = (dividend - remainder) / divisor; io.mr = remainder << 16 | quotient; } io.ma = 0; io.mb = 0; } } else { //sigma (accumulative multiplication) io.mr += (i16)io.ma * (i16)io.mb; io.overflow = io.mr >> 40; io.mr = (n40)io.mr; io.mb = 0; } return; //(VBD) variable-length bit processing case 0x2258: io.vb = data.bit(0,3); io.hl = data.bit(7); if(io.vb == 0) io.vb = 16; if(io.hl == 0) { //fixed mode io.vbit += io.vb; io.va += io.vbit >> 3; io.vbit &= 7; } return; //(VDA) variable-length bit game pak ROM start address case 0x2259: io.va.byte(0) = data; return; case 0x225a: io.va.byte(1) = data; return; case 0x225b: io.va.byte(2) = data; io.vbit = 0; return; } } auto SA1::writeIOShared(n24 address, n8 data) -> void { switch(0x2200 | address.bit(0,8)) { //(CDMA) character conversion DMA parameters case 0x2231: io.dmacb = data.bit(0,1); io.dmasize = data.bit(2,4);; io.chdend = data.bit(7); if(io.dmacb > 2) io.dmacb = 2; if(io.dmasize > 5) io.dmasize = 5; if(io.chdend == 1) bwram.dma = 0; return; //(SDA) DMA source device start address case 0x2232: io.dsa.byte(0) = data; return; case 0x2233: io.dsa.byte(1) = data; return; case 0x2234: io.dsa.byte(2) = data; return; //(DDA) DMA destination start address case 0x2235: io.dda.byte(0) = data; return; case 0x2236: io.dda.byte(1) = data; if(io.dmaen) { if(io.cden == 0 && io.dd == DMA::DestIRAM) { dmaNormal(); } else if(io.cden == 1 && io.cdsel == 1) { dmaCC1(); } } return; case 0x2237: io.dda.byte(2) = data; if(io.dmaen) { if(io.cden == 0 && io.dd == DMA::DestBWRAM) { dmaNormal(); } } return; } } ares-126/ares/sfc/coprocessor/sa1/iram.cpp000066400000000000000000000017661415063341600205210ustar00rootroot00000000000000inline auto SA1::IRAM::conflict() const -> bool { if((cpu.r.mar & 0x40f800) == 0x003000) return cpu.refresh() == 0; //00-3f,80-bf:3000-37ff return false; } inline auto SA1::IRAM::read(n24 address, n8 data) -> n8 { if(!size()) return data; address = bus.mirror(address, size()); return WritableMemory::read(address, data); } inline auto SA1::IRAM::write(n24 address, n8 data) -> void { if(!size()) return; address = bus.mirror(address, size()); return WritableMemory::write(address, data); } auto SA1::IRAM::readCPU(n24 address, n8 data) -> n8 { cpu.synchronize(sa1); return read(address, data); } auto SA1::IRAM::writeCPU(n24 address, n8 data) -> void { cpu.synchronize(sa1); if(!sa1.io.siwp.bit(address.bit(8,10))) return; return write(address, data); } auto SA1::IRAM::readSA1(n24 address, n8 data) -> n8 { return read(address, data); } auto SA1::IRAM::writeSA1(n24 address, n8 data) -> void { if(!sa1.io.ciwp.bit(address.bit(8,10))) return; return write(address, data); } ares-126/ares/sfc/coprocessor/sa1/memory.cpp000066400000000000000000000107031415063341600210700ustar00rootroot00000000000000inline auto SA1::idle() -> void { step(); } //RTx, JMx, JSx inline auto SA1::idleJump() -> void { //ROM access penalty cycle: does not apply to BWRAM or IRAM if((r.pc.d & 0x408000) == 0x008000 //00-3f,80-bf:8000-ffff || (r.pc.d & 0xc00000) == 0xc00000 //c0-ff:0000-ffff ) { step(); if(rom.conflict()) step(); } } //Bxx inline auto SA1::idleBranch() -> void { if(r.pc.d & 1) idleJump(); } auto SA1::read(n24 address) -> n8 { r.mar = address; n8 data = r.mdr; if((address & 0x40fe00) == 0x002200 //00-3f,80-bf:2200-23ff ) { step(); return r.mdr = readIOSA1(address, data); } if((address & 0x408000) == 0x008000 //00-3f,80-bf:8000-ffff || (address & 0xc00000) == 0xc00000 //c0-ff:0000-ffff ) { step(); if(rom.conflict()) step(); return r.mdr = rom.readSA1(address, data); } if((address & 0x40e000) == 0x006000 //00-3f,80-bf:6000-7fff || (address & 0xf00000) == 0x400000 //40-4f:0000-ffff || (address & 0xf00000) == 0x600000 //60-6f:0000-ffff ) { step(); step(); if(bwram.conflict()) step(); if(bwram.conflict()) step(); if(address.bit(22) && address.bit(21)) return r.mdr = bwram.readBitmap(address, data); if(address.bit(22)) return r.mdr = bwram.readLinear(address, data); return r.mdr = bwram.readSA1(address, data); } if((address & 0x40f800) == 0x000000 //00-3f,80-bf:0000-07ff || (address & 0x40f800) == 0x003000 //00-3f,80-bf:3000-37ff ) { step(); if(iram.conflict()) step(); if(iram.conflict()) step(); return r.mdr = iram.readSA1(address, data); } step(); return data; } auto SA1::write(n24 address, n8 data) -> void { r.mar = address; r.mdr = data; if((address & 0x40fe00) == 0x002200 //00-3f,80-bf:2200-23ff ) { step(); return writeIOSA1(address, data); } if((address & 0x408000) == 0x008000 //00-3f,80-bf:8000-ffff || (address & 0xc00000) == 0xc00000 //c0-ff:0000-ffff ) { step(); if(rom.conflict()) step(); return rom.writeSA1(address, data); } if((address & 0x40e000) == 0x006000 //00-3f,80-bf:6000-7fff || (address & 0xf00000) == 0x400000 //40-4f:0000-ffff || (address & 0xf00000) == 0x600000 //60-6f:0000-ffff ) { step(); step(); if(bwram.conflict()) step(); if(bwram.conflict()) step(); if(address.bit(22) && address.bit(21)) return bwram.writeBitmap(address, data); if(address.bit(22)) return bwram.writeLinear(address, data); return bwram.writeSA1(address, data); } if((address & 0x40f800) == 0x000000 //00-3f,80-bf:0000-07ff || (address & 0x40f800) == 0x003000 //00-3f,80-bf:3000-37ff ) { step(); if(iram.conflict()) step(); if(iram.conflict()) step(); return iram.writeSA1(address, data); } step(); return; } //$230c (VDPL), $230d (VDPH) use this bus to read variable-length data. //this is used both to keep VBR-reads from accessing MMIO registers, and //to avoid syncing the S-CPU and SA-1*; as both chips are able to access //these ports. auto SA1::readVBR(n24 address, n8 data) -> n8 { if((address & 0x408000) == 0x008000 //00-3f,80-bf:8000-ffff || (address & 0xc00000) == 0xc00000 //c0-ff:0000-ffff ) { return rom.readSA1(address, data); } if((address & 0x40e000) == 0x006000 //00-3f,80-bf:6000-7fff || (address & 0xf00000) == 0x400000 //40-4f:0000-ffff ) { return bwram.read(address, data); } if((address & 0x40f800) == 0x000000 //00-3f,80-bf:0000-07ff || (address & 0x40f800) == 0x003000 //00-3f,80-bf:3000-37ff ) { return iram.read(address, data); } return 0xff; } auto SA1::readDisassembler(n24 address) -> n8 { n8 data = r.mdr; if((address & 0x40fe00) == 0x002200 //00-3f,80-bf:2200-23ff ) { return 0x00; //do not read I/O registers from disassembler } if((address & 0x408000) == 0x008000 //00-3f,80-bf:8000-ffff || (address & 0xc00000) == 0xc00000 //c0-ff:0000-ffff ) { return rom.readSA1(address, data); } if((address & 0x40e000) == 0x006000 //00-3f,80-bf:6000-7fff || (address & 0xf00000) == 0x400000 //40-4f:0000-ffff || (address & 0xf00000) == 0x600000 //60-6f:0000-ffff ) { if(address.bit(22) && address.bit(21)) return bwram.readBitmap(address, data); if(address.bit(22)) return bwram.readLinear(address, data); return bwram.readSA1(address, data); } if((address & 0x40f800) == 0x000000 //00-3f,80-bf:0000-07ff || (address & 0x40f800) == 0x003000 //00-3f,80-bf:3000-37ff ) { return iram.readSA1(address, data); } return data; } ares-126/ares/sfc/coprocessor/sa1/rom.cpp000066400000000000000000000044721415063341600203630ustar00rootroot00000000000000inline auto SA1::ROM::conflict() const -> bool { if((cpu.r.mar & 0x408000) == 0x008000) return true; //00-3f,80-bf:8000-ffff if((cpu.r.mar & 0xc00000) == 0xc00000) return true; //c0-ff:0000-ffff return false; } inline auto SA1::ROM::read(n24 address, n8 data) -> n8 { address = bus.mirror(address, size()); return ReadableMemory::read(address, data); } inline auto SA1::ROM::write(n24 address, n8 data) -> void { } //note: addresses are translated prior to invoking this function: //00-3f,80-bf:8000-ffff mask=0x408000 => 00-3f:0000-ffff //c0-ff:0000-ffff => untranslated auto SA1::ROM::readCPU(n24 address, n8 data) -> n8 { //reset vector overrides if((address & 0xffffe0) == 0x007fe0) { //00:ffe0-ffef if(address == 0x7fea && sa1.io.cpu_nvsw) return sa1.io.snv >> 0; if(address == 0x7feb && sa1.io.cpu_nvsw) return sa1.io.snv >> 8; if(address == 0x7fee && sa1.io.cpu_ivsw) return sa1.io.siv >> 0; if(address == 0x7fef && sa1.io.cpu_ivsw) return sa1.io.siv >> 8; } static auto read = [](n24 address) { if((address & 0x400000) && bsmemory.size()) return bsmemory.read(address, 0x00); return sa1.rom.read(address); }; bool lo = address < 0x400000; //*bmode==0 only applies to 00-3f,80-bf:8000-ffff address &= 0x3fffff; if(address < 0x100000) { //00-1f,8000-ffff; c0-cf:0000-ffff if(lo && sa1.io.cbmode == 0) return read(address); return read(sa1.io.cb << 20 | address & 0x0fffff); } if(address < 0x200000) { //20-3f,8000-ffff; d0-df:0000-ffff if(lo && sa1.io.dbmode == 0) return read(address); return read(sa1.io.db << 20 | address & 0x0fffff); } if(address < 0x300000) { //80-9f,8000-ffff; e0-ef:0000-ffff if(lo && sa1.io.ebmode == 0) return read(address); return read(sa1.io.eb << 20 | address & 0x0fffff); } if(address < 0x400000) { //a0-bf,8000-ffff; f0-ff:0000-ffff if(lo && sa1.io.fbmode == 0) return read(address); return read(sa1.io.fb << 20 | address & 0x0fffff); } return data; //unreachable } auto SA1::ROM::writeCPU(n24 address, n8 data) -> void { } auto SA1::ROM::readSA1(n24 address, n8 data) -> n8 { if((address & 0x408000) == 0x008000) { address = (address & 0x800000) >> 2 | (address & 0x3f0000) >> 1 | address & 0x007fff; } return readCPU(address, data); } auto SA1::ROM::writeSA1(n24 address, n8 data) -> void { } ares-126/ares/sfc/coprocessor/sa1/sa1.cpp000066400000000000000000000132151415063341600202450ustar00rootroot00000000000000SA1 sa1; #include "rom.cpp" #include "bwram.cpp" #include "iram.cpp" #include "dma.cpp" #include "memory.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto SA1::load(Node::Object parent) -> void { node = parent->append("SA1"); debugger.load(node); } auto SA1::unload() -> void { debugger = {}; node = {}; rom.reset(); iram.reset(); bwram.reset(); cpu.coprocessors.removeByValue(this); Thread::destroy(); } //override R65816::interrupt() to support SA-1 vector location I/O registers auto SA1::interrupt() -> void { read(r.pc.d); idle(); if(!r.e) push(r.pc.b); push(r.pc.h); push(r.pc.l); push(r.e ? r.p & ~0x10 : r.p); r.p.i = 1; r.p.d = 0; r.pc.d = r.vector; //PC bank set to 0x00 } auto SA1::main() -> void { if(r.wai) return instructionWait(); if(r.stp) return instructionStop(); if(io.sa1_rdyb || io.sa1_resb) { //SA-1 co-processor is asleep step(); return; } if(status.interruptPending) { status.interruptPending = false; debugger.interrupt("IRQ"); interrupt(); return; } debugger.instruction(); instruction(); } auto SA1::step() -> void { Thread::step(2); Thread::synchronize(cpu); //adjust counters: //note that internally, status counters are in clocks; //whereas IO register counters are in dots (4 clocks = 1 dot) if(io.hvselb == 0) { //HV timer status.hcounter += 2; if(status.hcounter >= 1364) { status.hcounter = 0; if(++status.vcounter >= status.scanlines) { status.vcounter = 0; } } } else { //linear timer status.hcounter += 2; status.vcounter += status.hcounter >> 11; status.hcounter &= 0x07ff; status.vcounter &= 0x01ff; } //test counters for timer IRQ switch(io.hen << 0 | io.ven << 1) { case 0: break; case 1: if(status.hcounter == io.hcnt << 2) triggerIRQ(); break; case 2: if(status.vcounter == io.vcnt && status.hcounter == 0) triggerIRQ(); break; case 3: if(status.vcounter == io.vcnt && status.hcounter == io.hcnt << 2) triggerIRQ(); break; } } inline auto SA1::lastCycle() -> void { if(io.sa1_nmi && !io.sa1_nmicl) { status.interruptPending = true; r.vector = io.cnv; io.sa1_nmifl = true; io.sa1_nmicl = 1; r.wai = false; } else if(!r.p.i) { if(io.timer_irqen && !io.timer_irqcl) { status.interruptPending = true; r.vector = io.civ; io.timer_irqfl = true; r.wai = false; } else if(io.dma_irqen && !io.dma_irqcl) { status.interruptPending = true; r.vector = io.civ; io.dma_irqfl = true; r.wai = false; } else if(io.sa1_irq && !io.sa1_irqcl) { status.interruptPending = true; r.vector = io.civ; io.sa1_irqfl = true; r.wai = false; } } } inline auto SA1::interruptPending() const -> bool { return status.interruptPending; } inline auto SA1::triggerIRQ() -> void { io.timer_irqfl = true; if(io.timer_irqen) io.timer_irqcl = 0; } auto SA1::power() -> void { WDC65816::power(); Thread::create(system.cpuFrequency(), {&SA1::main, this}); cpu.coprocessors.append(this); bwram.dma = false; for(u32 address : range(iram.size())) { iram.write(address, 0x00); } status.counter = 0; status.interruptPending = false; status.scanlines = Region::PAL() ? 312 : 262; status.vcounter = 0; status.hcounter = 0; dma.line = 0; //$2200 CCNT io.sa1_irq = false; io.sa1_rdyb = false; io.sa1_resb = true; io.sa1_nmi = false; io.smeg = 0; //$2201 SIE io.cpu_irqen = false; io.chdma_irqen = false; //$2202 SIC io.cpu_irqcl = false; io.chdma_irqcl = false; //$2203,$2204 CRV io.crv = 0x0000; //$2205,$2206 CNV io.cnv = 0x0000; //$2207,$2208 CIV io.civ = 0x0000; //$2209 SCNT io.cpu_irq = false; io.cpu_ivsw = false; io.cpu_nvsw = false; io.cmeg = 0; //$220a CIE io.sa1_irqen = false; io.timer_irqen = false; io.dma_irqen = false; io.sa1_nmien = false; //$220b CIC io.sa1_irqcl = false; io.timer_irqcl = false; io.dma_irqcl = false; io.sa1_nmicl = false; //$220c,$220d SNV io.snv = 0x0000; //$220e,$220f SIV io.siv = 0x0000; //$2210 io.hvselb = false; io.ven = false; io.hen = false; //$2212,$2213 HCNT io.hcnt = 0x0000; //$2214,$2215 VCNT io.vcnt = 0x0000; //$2220-2223 CXB, DXB, EXB, FXB io.cbmode = 0; io.dbmode = 0; io.ebmode = 0; io.fbmode = 0; io.cb = 0x00; io.db = 0x01; io.eb = 0x02; io.fb = 0x03; //$2224 BMAPS io.sbm = 0x00; //$2225 BMAP io.sw46 = false; io.cbm = 0x00; //$2226 SWBE io.swen = false; //$2227 CWBE io.cwen = false; //$2228 BWPA io.bwp = 0x0f; //$2229 SIWP io.siwp = 0x00; //$222a CIWP io.ciwp = 0x00; //$2230 DCNT io.dmaen = false; io.dprio = false; io.cden = false; io.cdsel = false; io.dd = 0; io.sd = 0; //$2231 CDMA io.chdend = false; io.dmasize = 0; io.dmacb = 0; //$2232-$2234 SDA io.dsa = 0x000000; //$2235-$2237 DDA io.dda = 0x000000; //$2238,$2239 DTC io.dtc = 0x0000; //$223f BBF io.bbf = 0; //$2240-$224f BRF for(auto& n : io.brf) n = 0x00; //$2250 MCNT io.acm = 0; io.md = 0; //$2251,$2252 MA io.ma = 0x0000; //$2253,$2254 MB io.mb = 0x0000; //$2258 VBD io.hl = false; io.vb = 16; //$2259-$225b io.va = 0x000000; io.vbit = 0; //$2300 SFR io.cpu_irqfl = false; io.chdma_irqfl = false; //$2301 CFR io.sa1_irqfl = false; io.timer_irqfl = false; io.dma_irqfl = false; io.sa1_nmifl = false; //$2302,$2303 HCR io.hcr = 0x0000; //$2304,$2305 VCR io.vcr = 0x0000; //$2306-$230a MR io.mr = 0; //$230b io.overflow = false; } ares-126/ares/sfc/coprocessor/sa1/sa1.hpp000066400000000000000000000125341415063341600202550ustar00rootroot00000000000000//Super Accelerator (SA-1) struct SA1 : WDC65816, Thread { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; //sa1.cpp auto load(Node::Object) -> void; auto unload() -> void; auto interrupt() -> void override; auto main() -> void; auto step() -> void; auto lastCycle() -> void override; auto interruptPending() const -> bool override; auto triggerIRQ() -> void; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } auto power() -> void; //dma.cpp struct DMA { enum CDEN : u32 { DmaNormal = 0, DmaCharConversion = 1 }; enum SD : u32 { SourceROM = 0, SourceBWRAM = 1, SourceIRAM = 2 }; enum DD : u32 { DestIRAM = 0, DestBWRAM = 1 }; u32 line; }; auto dmaNormal() -> void; auto dmaCC1() -> void; auto dmaCC1Read(n24 address) -> n8; auto dmaCC2() -> void; //memory.cpp auto idle() -> void override; auto idleJump() -> void override; auto idleBranch() -> void override; auto read(n24 address) -> n8 override; auto write(n24 address, n8 data) -> void override; auto readVBR(n24 address, n8 data = 0) -> n8; auto readDisassembler(n24 address) -> n8 override; //io.cpp auto readIOCPU(n24 address, n8 data) -> n8; auto readIOSA1(n24 address, n8 data) -> n8; auto writeIOCPU(n24 address, n8 data) -> void; auto writeIOSA1(n24 address, n8 data) -> void; auto writeIOShared(n24 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct ROM : ReadableMemory { //rom.cpp auto conflict() const -> bool; auto read(n24 address, n8 data = 0) -> n8 override; auto write(n24 address, n8 data) -> void override; auto readCPU(n24 address, n8 data = 0) -> n8; auto writeCPU(n24 address, n8 data) -> void; auto readSA1(n24 address, n8 data = 0) -> n8; auto writeSA1(n24 address, n8 data) -> void; } rom; struct BWRAM : WritableMemory { //bwram.cpp auto conflict() const -> bool; auto read(n24 address, n8 data = 0) -> n8 override; auto write(n24 address, n8 data) -> void override; auto readCPU(n24 address, n8 data = 0) -> n8; auto writeCPU(n24 address, n8 data) -> void; auto readSA1(n24 address, n8 data = 0) -> n8; auto writeSA1(n24 address, n8 data) -> void; auto readLinear(n24 address, n8 data = 0) -> n8; auto writeLinear(n24 address, n8 data) -> void; auto readBitmap(n20 address, n8 data = 0) -> n8; auto writeBitmap(n20 address, n8 data) -> void; bool dma; } bwram; struct IRAM : WritableMemory { //iram.cpp auto conflict() const -> bool; auto read(n24 address, n8 data = 0) -> n8 override; auto write(n24 address, n8 data) -> void override; auto readCPU(n24 address, n8 data) -> n8; auto writeCPU(n24 address, n8 data) -> void; auto readSA1(n24 address, n8 data = 0) -> n8; auto writeSA1(n24 address, n8 data) -> void; } iram; private: DMA dma; struct Status { n8 counter; bool interruptPending; n16 scanlines; n16 vcounter; n16 hcounter; } status; struct IO { //$2200 CCNT bool sa1_irq; bool sa1_rdyb; bool sa1_resb; bool sa1_nmi; n8 smeg; //$2201 SIE bool cpu_irqen; bool chdma_irqen; //$2202 SIC bool cpu_irqcl; bool chdma_irqcl; //$2203,$2204 CRV n16 crv; //$2205,$2206 CNV n16 cnv; //$2207,$2208 CIV n16 civ; //$2209 SCNT bool cpu_irq; bool cpu_ivsw; bool cpu_nvsw; n8 cmeg; //$220a CIE bool sa1_irqen; bool timer_irqen; bool dma_irqen; bool sa1_nmien; //$220b CIC bool sa1_irqcl; bool timer_irqcl; bool dma_irqcl; bool sa1_nmicl; //$220c,$220d SNV n16 snv; //$220e,$220f SIV n16 siv; //$2210 TMC bool hvselb; bool ven; bool hen; //$2212,$2213 n16 hcnt; //$2214,$2215 n16 vcnt; //$2220 CXB bool cbmode; n32 cb; //$2221 DXB bool dbmode; n32 db; //$2222 EXB bool ebmode; n32 eb; //$2223 FXB bool fbmode; n32 fb; //$2224 BMAPS n8 sbm; //$2225 BMAP bool sw46; n8 cbm; //$2226 SBWE bool swen; //$2227 CBWE bool cwen; //$2228 BWPA n8 bwp; //$2229 SIWP n8 siwp; //$222a CIWP n8 ciwp; //$2230 DCNT bool dmaen; bool dprio; bool cden; bool cdsel; bool dd; n8 sd; //$2231 CDMA bool chdend; n8 dmasize; n8 dmacb; //$2232-$2234 SDA n24 dsa; //$2235-$2237 DDA n24 dda; //$2238,$2239 DTC n16 dtc; //$223f BBF bool bbf; //$2240-224f BRF n8 brf[16]; //$2250 MCNT bool acm; bool md; //$2251,$2252 MA n16 ma; //$2253,$2254 MB n16 mb; //$2258 VBD bool hl; n8 vb; //$2259-$225b VDA n24 va; n8 vbit; //$2300 SFR bool cpu_irqfl; bool chdma_irqfl; //$2301 CFR bool sa1_irqfl; bool timer_irqfl; bool dma_irqfl; bool sa1_nmifl; //$2302,$2303 HCR n16 hcr; //$2304,$2305 VCR n16 vcr; //$2306-230a MR n64 mr; //$230b OF bool overflow; } io; }; extern SA1 sa1; ares-126/ares/sfc/coprocessor/sa1/serialization.cpp000066400000000000000000000027711415063341600224430ustar00rootroot00000000000000auto SA1::serialize(serializer& s) -> void { WDC65816::serialize(s); Thread::serialize(s); s(iram); s(bwram); s(bwram.dma); s(status.counter); s(status.interruptPending); s(status.scanlines); s(status.vcounter); s(status.hcounter); s(dma.line); s(io.sa1_irq); s(io.sa1_rdyb); s(io.sa1_resb); s(io.sa1_nmi); s(io.smeg); s(io.cpu_irqen); s(io.chdma_irqen); s(io.cpu_irqcl); s(io.chdma_irqcl); s(io.crv); s(io.cnv); s(io.civ); s(io.cpu_irq); s(io.cpu_ivsw); s(io.cpu_nvsw); s(io.cmeg); s(io.sa1_irqen); s(io.timer_irqen); s(io.dma_irqen); s(io.sa1_nmien); s(io.sa1_irqcl); s(io.timer_irqcl); s(io.dma_irqcl); s(io.sa1_nmicl); s(io.snv); s(io.siv); s(io.hvselb); s(io.ven); s(io.hen); s(io.hcnt); s(io.vcnt); s(io.cbmode); s(io.cb); s(io.dbmode); s(io.db); s(io.ebmode); s(io.eb); s(io.fbmode); s(io.fb); s(io.sbm); s(io.sw46); s(io.cbm); s(io.swen); s(io.cwen); s(io.bwp); s(io.siwp); s(io.ciwp); s(io.dmaen); s(io.dprio); s(io.cden); s(io.cdsel); s(io.dd); s(io.sd); s(io.chdend); s(io.dmasize); s(io.dmacb); s(io.dsa); s(io.dda); s(io.dtc); s(io.bbf); s(io.brf); s(io.acm); s(io.md); s(io.ma); s(io.mb); s(io.hl); s(io.vb); s(io.va); s(io.vbit); s(io.cpu_irqfl); s(io.chdma_irqfl); s(io.sa1_irqfl); s(io.timer_irqfl); s(io.dma_irqfl); s(io.sa1_nmifl); s(io.hcr); s(io.vcr); s(io.mr); s(io.overflow); } ares-126/ares/sfc/coprocessor/sdd1/000077500000000000000000000000001415063341600172225ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/sdd1/decompressor.cpp000066400000000000000000000162131415063341600224360ustar00rootroot00000000000000//note: decompression module does not need to be serialized with bsnes //this is because decompression only runs during DMA, and bsnes will complete //any pending DMA transfers prior to serialization. //input manager auto SDD1::Decompressor::IM::init(n32 offset_) -> void { offset = offset_; bitCount = 4; } auto SDD1::Decompressor::IM::getCodeWord(n8 codeLength) -> n8 { n8 codeWord; n8 compCount; codeWord = sdd1.mmcRead(offset) << bitCount; bitCount++; if(codeWord & 0x80) { codeWord |= sdd1.mmcRead(offset + 1) >> (9 - bitCount); bitCount += codeLength; } if(bitCount & 0x08) { offset++; bitCount &= 0x07; } return codeWord; } //golomb-code decoder const n8 SDD1::Decompressor::GCD::runCount[] = { 0x00, 0x00, 0x01, 0x00, 0x03, 0x01, 0x02, 0x00, 0x07, 0x03, 0x05, 0x01, 0x06, 0x02, 0x04, 0x00, 0x0f, 0x07, 0x0b, 0x03, 0x0d, 0x05, 0x09, 0x01, 0x0e, 0x06, 0x0a, 0x02, 0x0c, 0x04, 0x08, 0x00, 0x1f, 0x0f, 0x17, 0x07, 0x1b, 0x0b, 0x13, 0x03, 0x1d, 0x0d, 0x15, 0x05, 0x19, 0x09, 0x11, 0x01, 0x1e, 0x0e, 0x16, 0x06, 0x1a, 0x0a, 0x12, 0x02, 0x1c, 0x0c, 0x14, 0x04, 0x18, 0x08, 0x10, 0x00, 0x3f, 0x1f, 0x2f, 0x0f, 0x37, 0x17, 0x27, 0x07, 0x3b, 0x1b, 0x2b, 0x0b, 0x33, 0x13, 0x23, 0x03, 0x3d, 0x1d, 0x2d, 0x0d, 0x35, 0x15, 0x25, 0x05, 0x39, 0x19, 0x29, 0x09, 0x31, 0x11, 0x21, 0x01, 0x3e, 0x1e, 0x2e, 0x0e, 0x36, 0x16, 0x26, 0x06, 0x3a, 0x1a, 0x2a, 0x0a, 0x32, 0x12, 0x22, 0x02, 0x3c, 0x1c, 0x2c, 0x0c, 0x34, 0x14, 0x24, 0x04, 0x38, 0x18, 0x28, 0x08, 0x30, 0x10, 0x20, 0x00, 0x7f, 0x3f, 0x5f, 0x1f, 0x6f, 0x2f, 0x4f, 0x0f, 0x77, 0x37, 0x57, 0x17, 0x67, 0x27, 0x47, 0x07, 0x7b, 0x3b, 0x5b, 0x1b, 0x6b, 0x2b, 0x4b, 0x0b, 0x73, 0x33, 0x53, 0x13, 0x63, 0x23, 0x43, 0x03, 0x7d, 0x3d, 0x5d, 0x1d, 0x6d, 0x2d, 0x4d, 0x0d, 0x75, 0x35, 0x55, 0x15, 0x65, 0x25, 0x45, 0x05, 0x79, 0x39, 0x59, 0x19, 0x69, 0x29, 0x49, 0x09, 0x71, 0x31, 0x51, 0x11, 0x61, 0x21, 0x41, 0x01, 0x7e, 0x3e, 0x5e, 0x1e, 0x6e, 0x2e, 0x4e, 0x0e, 0x76, 0x36, 0x56, 0x16, 0x66, 0x26, 0x46, 0x06, 0x7a, 0x3a, 0x5a, 0x1a, 0x6a, 0x2a, 0x4a, 0x0a, 0x72, 0x32, 0x52, 0x12, 0x62, 0x22, 0x42, 0x02, 0x7c, 0x3c, 0x5c, 0x1c, 0x6c, 0x2c, 0x4c, 0x0c, 0x74, 0x34, 0x54, 0x14, 0x64, 0x24, 0x44, 0x04, 0x78, 0x38, 0x58, 0x18, 0x68, 0x28, 0x48, 0x08, 0x70, 0x30, 0x50, 0x10, 0x60, 0x20, 0x40, 0x00, }; auto SDD1::Decompressor::GCD::getRunCount(n8 codeNumber, n8& mpsCount, bool& lpsIndex) -> void { n8 codeWord = self.im.getCodeWord(codeNumber); if(codeWord & 0x80) { lpsIndex = 1; mpsCount = runCount[codeWord >> (codeNumber ^ 0x07)]; } else { mpsCount = 1 << codeNumber; } } //bits generator auto SDD1::Decompressor::BG::init() -> void { mpsCount = 0; lpsIndex = 0; } auto SDD1::Decompressor::BG::getBit(bool& endOfRun) -> n8 { if(!(mpsCount || lpsIndex)) self.gcd.getRunCount(codeNumber, mpsCount, lpsIndex); n8 bit; if(mpsCount) { bit = 0; mpsCount--; } else { bit = 1; lpsIndex = 0; } endOfRun = !(mpsCount || lpsIndex); return bit; } //probability estimation module const SDD1::Decompressor::PEM::State SDD1::Decompressor::PEM::evolutionTable[33] = { {0, 25, 25}, {0, 2, 1}, {0, 3, 1}, {0, 4, 2}, {0, 5, 3}, {1, 6, 4}, {1, 7, 5}, {1, 8, 6}, {1, 9, 7}, {2, 10, 8}, {2, 11, 9}, {2, 12, 10}, {2, 13, 11}, {3, 14, 12}, {3, 15, 13}, {3, 16, 14}, {3, 17, 15}, {4, 18, 16}, {4, 19, 17}, {5, 20, 18}, {5, 21, 19}, {6, 22, 20}, {6, 23, 21}, {7, 24, 22}, {7, 24, 23}, {0, 26, 1}, {1, 27, 2}, {2, 28, 4}, {3, 29, 8}, {4, 30, 12}, {5, 31, 16}, {6, 32, 18}, {7, 24, 22}, }; auto SDD1::Decompressor::PEM::init() -> void { for(auto n : range(32)) { contextInfo[n].status = 0; contextInfo[n].mps = 0; } } auto SDD1::Decompressor::PEM::getBit(n8 context) -> n8 { ContextInfo& info = contextInfo[context]; n8 currentStatus = info.status; n8 currentMps = info.mps; const State& s = SDD1::Decompressor::PEM::evolutionTable[currentStatus]; n8 bit; bool endOfRun; switch(s.codeNumber) { case 0: bit = self.bg0.getBit(endOfRun); break; case 1: bit = self.bg1.getBit(endOfRun); break; case 2: bit = self.bg2.getBit(endOfRun); break; case 3: bit = self.bg3.getBit(endOfRun); break; case 4: bit = self.bg4.getBit(endOfRun); break; case 5: bit = self.bg5.getBit(endOfRun); break; case 6: bit = self.bg6.getBit(endOfRun); break; case 7: bit = self.bg7.getBit(endOfRun); break; } if(endOfRun) { if(bit) { if(!(currentStatus & 0xfe)) info.mps ^= 0x01; info.status = s.nextIfLps; } else { info.status = s.nextIfMps; } } return bit ^ currentMps; } //context model auto SDD1::Decompressor::CM::init(n32 offset) -> void { bitplanesInfo = sdd1.mmcRead(offset) & 0xc0; contextBitsInfo = sdd1.mmcRead(offset) & 0x30; bitNumber = 0; for(auto n : range(8)) previousBitplaneBits[n] = 0; switch(bitplanesInfo) { case 0x00: currentBitplane = 1; break; case 0x40: currentBitplane = 7; break; case 0x80: currentBitplane = 3; break; } } auto SDD1::Decompressor::CM::getBit() -> n8 { switch(bitplanesInfo) { case 0x00: currentBitplane ^= 0x01; break; case 0x40: currentBitplane ^= 0x01; if(!(bitNumber & 0x7f)) currentBitplane = ((currentBitplane + 2) & 0x07); break; case 0x80: currentBitplane ^= 0x01; if(!(bitNumber & 0x7f)) currentBitplane ^= 0x02; break; case 0xc0: currentBitplane = bitNumber & 0x07; break; } n16& contextBits = previousBitplaneBits[currentBitplane]; n8 currentContext = (currentBitplane & 0x01) << 4; switch(contextBitsInfo) { case 0x00: currentContext |= ((contextBits & 0x01c0) >> 5) | (contextBits & 0x0001); break; case 0x10: currentContext |= ((contextBits & 0x0180) >> 5) | (contextBits & 0x0001); break; case 0x20: currentContext |= ((contextBits & 0x00c0) >> 5) | (contextBits & 0x0001); break; case 0x30: currentContext |= ((contextBits & 0x0180) >> 5) | (contextBits & 0x0003); break; } n8 bit = self.pem.getBit(currentContext); contextBits <<= 1; contextBits |= bit; bitNumber++; return bit; } //output logic auto SDD1::Decompressor::OL::init(n32 offset) -> void { bitplanesInfo = sdd1.mmcRead(offset) & 0xc0; r0 = 0x01; } auto SDD1::Decompressor::OL::decompress() -> n8 { switch(bitplanesInfo) { case 0x00: case 0x40: case 0x80: if(r0 == 0) { r0 = ~r0; return r2; } for(r0 = 0x80, r1 = 0, r2 = 0; r0; r0 >>= 1) { if(self.cm.getBit()) r1 |= r0; if(self.cm.getBit()) r2 |= r0; } return r1; case 0xc0: for(r0 = 0x01, r1 = 0; r0; r0 <<= 1) { if(self.cm.getBit()) r1 |= r0; } return r1; } return 0; //unreachable? } //core SDD1::Decompressor::Decompressor(): im(*this), gcd(*this), bg0(*this, 0), bg1(*this, 1), bg2(*this, 2), bg3(*this, 3), bg4(*this, 4), bg5(*this, 5), bg6(*this, 6), bg7(*this, 7), pem(*this), cm(*this), ol(*this) { } auto SDD1::Decompressor::init(n32 offset) -> void { im.init(offset); bg0.init(); bg1.init(); bg2.init(); bg3.init(); bg4.init(); bg5.init(); bg6.init(); bg7.init(); pem.init(); cm.init(offset); ol.init(offset); } auto SDD1::Decompressor::read() -> n8 { return ol.decompress(); } ares-126/ares/sfc/coprocessor/sdd1/decompressor.hpp000066400000000000000000000042101415063341600224350ustar00rootroot00000000000000struct Decompressor { struct IM { //input manager IM(SDD1::Decompressor& self) : self(self) {} auto init(n32 offset) -> void; auto getCodeWord(n8 codeLength) -> n8; auto serialize(serializer&) -> void; private: Decompressor& self; n32 offset; n32 bitCount; }; struct GCD { //golomb-code decoder GCD(SDD1::Decompressor& self) : self(self) {} auto getRunCount(n8 codeNumber, n8& mpsCount, bool& lpsIndex) -> void; auto serialize(serializer&) -> void; private: Decompressor& self; static const n8 runCount[256]; }; struct BG { //bits generator BG(SDD1::Decompressor& self, n8 codeNumber) : self(self), codeNumber(codeNumber) {} auto init() -> void; auto getBit(bool& endOfRun) -> n8; auto serialize(serializer&) -> void; private: Decompressor& self; const n8 codeNumber; n8 mpsCount; bool lpsIndex; }; struct PEM { //probability estimation module PEM(SDD1::Decompressor& self) : self(self) {} auto init() -> void; auto getBit(n8 context) -> n8; auto serialize(serializer&) -> void; private: Decompressor& self; struct State { n8 codeNumber; n8 nextIfMps; n8 nextIfLps; }; static const State evolutionTable[33]; struct ContextInfo { n8 status; n8 mps; } contextInfo[32]; }; struct CM { //context model CM(SDD1::Decompressor& self) : self(self) {} auto init(n32 offset) -> void; auto getBit() -> n8; auto serialize(serializer&) -> void; private: Decompressor& self; n8 bitplanesInfo; n8 contextBitsInfo; n8 bitNumber; n8 currentBitplane; n16 previousBitplaneBits[8]; }; struct OL { //output logic OL(SDD1::Decompressor& self) : self(self) {} auto init(n32 offset) -> void; auto decompress() -> n8; auto serialize(serializer&) -> void; private: Decompressor& self; n8 bitplanesInfo; n8 r0, r1, r2; }; Decompressor(); auto init(n32 offset) -> void; auto read() -> n8; auto serialize(serializer&) -> void; IM im; GCD gcd; BG bg0, bg1, bg2, bg3, bg4, bg5, bg6, bg7; PEM pem; CM cm; OL ol; }; ares-126/ares/sfc/coprocessor/sdd1/sdd1.cpp000066400000000000000000000071541415063341600205700ustar00rootroot00000000000000SDD1 sdd1; #include "decompressor.cpp" #include "serialization.cpp" auto SDD1::unload() -> void { rom.reset(); } auto SDD1::power() -> void { //hook S-CPU DMA MMIO registers to gather information for struct dma[]; //buffer address and transfer size information for use in SDD1::mcuRead() bus.map({&SDD1::dmaRead, &sdd1}, {&SDD1::dmaWrite, &sdd1}, "00-3f,80-bf:4300-437f"); r4800 = 0x00; r4801 = 0x00; r4804 = 0x00; r4805 = 0x01; r4806 = 0x02; r4807 = 0x03; for(auto& channel : dma) { channel.address = 0; channel.size = 0; } dmaReady = false; } auto SDD1::ioRead(n24 address, n8 data) -> n8 { address = 0x4800 | address.bit(0,3); switch(address) { case 0x4800: return r4800; case 0x4801: return r4801; case 0x4804: return r4804; case 0x4805: return r4805; case 0x4806: return r4806; case 0x4807: return r4807; } //00-3f,80-bf:4802-4803,4808-480f falls through to ROM return rom.read(address); } auto SDD1::ioWrite(n24 address, n8 data) -> void { address = 0x4800 | address.bit(0,3); switch(address) { case 0x4800: r4800 = data; break; case 0x4801: r4801 = data; break; case 0x4804: r4804 = data & 0x8f; break; case 0x4805: r4805 = data & 0x8f; break; case 0x4806: r4806 = data & 0x8f; break; case 0x4807: r4807 = data & 0x8f; break; } } auto SDD1::dmaRead(n24 address, n8 data) -> n8 { return cpu.readDMA(address, data); } auto SDD1::dmaWrite(n24 address, n8 data) -> void { n3 channel = address.bit(4,6); switch(address.bit(0,3)) { case 2: dma[channel].address.byte(0) = data; break; case 3: dma[channel].address.byte(1) = data; break; case 4: dma[channel].address.byte(2) = data; break; case 5: dma[channel].size.byte(0) = data; break; case 6: dma[channel].size.byte(1) = data; break; } return cpu.writeDMA(address, data); } auto SDD1::mmcRead(n24 address) -> n8 { switch(address.bit(20,21)) { case 0: return rom.read((n4)r4804 << 20 | (n20)address); //c0-cf:0000-ffff case 1: return rom.read((n4)r4805 << 20 | (n20)address); //d0-df:0000-ffff case 2: return rom.read((n4)r4806 << 20 | (n20)address); //e0-ef:0000-ffff case 3: return rom.read((n4)r4807 << 20 | (n20)address); //f0-ff:0000-ffff } unreachable; } //map address=00-3f,80-bf:8000-ffff //map address=c0-ff:0000-ffff auto SDD1::mcuRead(n24 address, n8 data) -> n8 { //map address=00-3f,80-bf:8000-ffff if(!address.bit(22)) { if(!address.bit(23) && address.bit(21) && r4805.bit(7)) address.bit(21) = 0; //20-3f:8000-ffff if( address.bit(23) && address.bit(21) && r4807.bit(7)) address.bit(21) = 0; //a0-bf:8000-ffff address = address.bit(16,21) << 15 | (n15)address; return rom.read(address); } //map address=c0-ff:0000-ffff if(r4800 & r4801) { //at least one channel has S-DD1 decompression enabled ... for(u32 n : range(8)) { if(r4800.bit(n) && r4801.bit(n)) { //S-DD1 always uses fixed transfer mode, so address will not change during transfer if(address == dma[n].address) { if(!dmaReady) { //prepare streaming decompression decompressor.init(address); dmaReady = true; } //fetch a decompressed byte; once finished, disable channel and invalidate buffer data = decompressor.read(); if(--dma[n].size == 0) { dmaReady = false; r4801.bit(n) = 0; } return data; } //address matched } //channel enabled } //channel loop } //S-DD1 decompressor enabled //S-DD1 decompression mode inactive; return ROM data return mmcRead(address); } auto SDD1::mcuWrite(n24 address, n8 data) -> void { } ares-126/ares/sfc/coprocessor/sdd1/sdd1.hpp000066400000000000000000000015731415063341600205740ustar00rootroot00000000000000struct SDD1 { auto unload() -> void; auto power() -> void; auto ioRead(n24 address, n8 data) -> n8; auto ioWrite(n24 address, n8 data) -> void; auto dmaRead(n24 address, n8 data) -> n8; auto dmaWrite(n24 address, n8 data) -> void; auto mmcRead(n24 address) -> n8; auto mcuRead(n24 address, n8 data) -> n8; auto mcuWrite(n24 address, n8 data) -> void; auto serialize(serializer&) -> void; ReadableMemory rom; private: n8 r4800; //hard enable n8 r4801; //soft enable n8 r4804; //MMC bank 0 n8 r4805; //MMC bank 1 n8 r4806; //MMC bank 2 n8 r4807; //MMC bank 3 struct DMA { n24 address; //$43x2-$43x4 -- DMA transfer address n16 size; //$43x5-$43x6 -- DMA transfer size } dma[8]; n1 dmaReady; //used to initialize decompression module public: #include "decompressor.hpp" Decompressor decompressor; }; extern SDD1 sdd1; ares-126/ares/sfc/coprocessor/sdd1/serialization.cpp000066400000000000000000000021311415063341600226000ustar00rootroot00000000000000auto SDD1::serialize(serializer& s) -> void { s(r4800); s(r4801); s(r4804); s(r4805); s(r4806); s(r4807); for(auto& channel : dma) { s(channel.address); s(channel.size); } s(dmaReady); s(decompressor); } auto SDD1::Decompressor::serialize(serializer& s) -> void { s(im); s(gcd); s(bg0); s(bg1); s(bg2); s(bg3); s(bg4); s(bg5); s(bg6); s(bg7); s(pem); s(cm); s(ol); } auto SDD1::Decompressor::IM::serialize(serializer& s) -> void { s(offset); s(bitCount); } auto SDD1::Decompressor::GCD::serialize(serializer& s) -> void { } auto SDD1::Decompressor::BG::serialize(serializer& s) -> void { s(mpsCount); s(lpsIndex); } auto SDD1::Decompressor::PEM::serialize(serializer& s) -> void { for(auto& info : contextInfo) { s(info.status); s(info.mps); } } auto SDD1::Decompressor::CM::serialize(serializer& s) -> void { s(bitplanesInfo); s(contextBitsInfo); s(bitNumber); s(currentBitplane); s(previousBitplaneBits); } auto SDD1::Decompressor::OL::serialize(serializer& s) -> void { s(bitplanesInfo); s(r0); s(r1); s(r2); } ares-126/ares/sfc/coprocessor/sharprtc/000077500000000000000000000000001415063341600202155ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/sharprtc/memory.cpp000066400000000000000000000037161415063341600222400ustar00rootroot00000000000000auto SharpRTC::rtcRead(n4 address) -> n4 { switch(address) { case 0: return second % 10; case 1: return second / 10; case 2: return minute % 10; case 3: return minute / 10; case 4: return hour % 10; case 5: return hour / 10; case 6: return day % 10; case 7: return day / 10; case 8: return month; case 9: return year % 10; case 10: return year / 10 % 10; case 11: return year / 100; case 12: return weekday; default: return 0; } } auto SharpRTC::rtcWrite(n4 address, n4 data) -> void { switch(address) { case 0: second = second / 10 * 10 + data; break; case 1: second = data * 10 + second % 10; break; case 2: minute = minute / 10 * 10 + data; break; case 3: minute = data * 10 + minute % 10; break; case 4: hour = hour / 10 * 10 + data; break; case 5: hour = data * 10 + hour % 10; break; case 6: day = day / 10 * 10 + data; break; case 7: day = data * 10 + day % 10; break; case 8: month = data; break; case 9: year = year / 10 * 10 + data; break; case 10: year = year / 100 * 100 + data * 10 + year % 10; break; case 11: year = data * 100 + year % 100; break; case 12: weekday = data; break; } } auto SharpRTC::load(const n8* data) -> void { for(auto byte : range(8)) { rtcWrite(byte * 2 + 0, data[byte] >> 0); rtcWrite(byte * 2 + 1, data[byte] >> 4); } n64 timestamp = 0; for(auto byte : range(8)) { timestamp |= data[8 + byte] << (byte * 8); } n64 diff = (n64)time(0) - timestamp; while(diff >= 60 * 60 * 24) { tickDay(); diff -= 60 * 60 * 24; } while(diff >= 60 * 60) { tickHour(); diff -= 60 * 60; } while(diff >= 60) { tickMinute(); diff -= 60; } while(diff--) tickSecond(); } auto SharpRTC::save(n8* data) -> void { for(auto byte : range(8)) { data[byte] = rtcRead(byte * 2 + 0) << 0; data[byte] |= rtcRead(byte * 2 + 1) << 4; } n64 timestamp = (n64)time(nullptr); for(auto byte : range(8)) { data[8 + byte] = timestamp; timestamp >>= 8; } } ares-126/ares/sfc/coprocessor/sharprtc/serialization.cpp000066400000000000000000000003001415063341600235670ustar00rootroot00000000000000auto SharpRTC::serialize(serializer& s) -> void { Thread::serialize(s); s((u32&)state); s(index); s(second); s(minute); s(hour); s(day); s(month); s(year); s(weekday); } ares-126/ares/sfc/coprocessor/sharprtc/sharprtc.cpp000066400000000000000000000045431415063341600225550ustar00rootroot00000000000000SharpRTC sharprtc; #include "memory.cpp" #include "time.cpp" #include "serialization.cpp" auto SharpRTC::load(Node::Object parent) -> void { rtc = parent->append("RTC"); } auto SharpRTC::main() -> void { tickSecond(); Thread::step(1); Thread::synchronize(cpu); } auto SharpRTC::initialize() -> void { second = 0; minute = 0; hour = 0; day = 0; month = 0; year = 0; weekday = 0; } auto SharpRTC::unload() -> void { cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto SharpRTC::power() -> void { Thread::create(1, {&SharpRTC::main, this}); cpu.coprocessors.append(this); state = State::Read; index = -1; } auto SharpRTC::synchronize(n64 timestamp) -> void { time_t systime = timestamp; tm* timeinfo = localtime(&systime); second = min(59, timeinfo->tm_sec); minute = timeinfo->tm_min; hour = timeinfo->tm_hour; day = timeinfo->tm_mday; month = 1 + timeinfo->tm_mon; year = 900 + timeinfo->tm_year; weekday = timeinfo->tm_wday; } auto SharpRTC::read(n24 address, n8 data) -> n8 { address &= 1; if(address == 0) { if(state != State::Read) return 0; if(index < 0) { index++; return 15; } else if(index > 12) { index = -1; return 15; } else { return rtcRead(index++); } } return data; } auto SharpRTC::write(n24 address, n8 data) -> void { address &= 1, data &= 15; if(address == 1) { if(data == 0x0d) { state = State::Read; index = -1; return; } if(data == 0x0e) { state = State::Command; return; } if(data == 0x0f) return; //unknown behavior if(state == State::Command) { if(data == 0) { state = State::Write; index = 0; } else if(data == 4) { state = State::Ready; index = -1; //reset time second = 0; minute = 0; hour = 0; day = 0; month = 0; year = 0; weekday = 0; } else { //unknown behavior state = State::Ready; } return; } if(state == State::Write) { if(index >= 0 && index < 12) { rtcWrite(index++, data); if(index == 12) { //day of week is automatically calculated and written weekday = calculateWeekday(1000 + year, month, day); } } return; } } } ares-126/ares/sfc/coprocessor/sharprtc/sharprtc.hpp000066400000000000000000000020261415063341600225540ustar00rootroot00000000000000struct SharpRTC : Thread { Node::Component::RealTimeClock rtc; auto load(Node::Object) -> void; using Thread::synchronize; auto main() -> void; auto initialize() -> void; auto unload() -> void; auto power() -> void; auto synchronize(n64 timestamp) -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; auto serialize(serializer&) -> void; enum class State : u32 { Ready, Command, Read, Write } state; s32 index; u32 second; u32 minute; u32 hour; u32 day; u32 month; u32 year; u32 weekday; //memory.cpp auto rtcRead(n4 address) -> n4; auto rtcWrite(n4 address, n4 data) -> void; auto load(const n8* data) -> void; auto save(n8* data) -> void; //time.cpp static const u32 daysInMonth[12]; auto tickSecond() -> void; auto tickMinute() -> void; auto tickHour() -> void; auto tickDay() -> void; auto tickMonth() -> void; auto tickYear() -> void; auto calculateWeekday(u32 year, u32 month, u32 day) -> u32; }; extern SharpRTC sharprtc; ares-126/ares/sfc/coprocessor/sharprtc/time.cpp000066400000000000000000000034711415063341600216640ustar00rootroot00000000000000const u32 SharpRTC::daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; auto SharpRTC::tickSecond() -> void { if(++second < 60) return; second = 0; tickMinute(); } auto SharpRTC::tickMinute() -> void { if(++minute < 60) return; minute = 0; tickHour(); } auto SharpRTC::tickHour() -> void { if(++hour < 24) return; hour = 0; tickDay(); } auto SharpRTC::tickDay() -> void { u32 days = daysInMonth[(month - 1) % 12]; //add one day in February for leap years if(month == 2) { if(year % 400 == 0) days++; else if(year % 100 == 0); else if(year % 4 == 0) days++; } if(day++ < days) return; day = 1; tickMonth(); } auto SharpRTC::tickMonth() -> void { if(month++ < 12) return; month = 1; tickYear(); } auto SharpRTC::tickYear() -> void { year++; year = (n12)year; } //returns day of week for specified date //eg 0 = Sunday, 1 = Monday, ... 6 = Saturday //usage: calculate_weekday(2008, 1, 1) returns weekday of January 1st, 2008 auto SharpRTC::calculateWeekday(u32 year, u32 month, u32 day) -> u32 { u32 y = 1000, m = 1; //SharpRTC epoch is 1000-01-01 u32 sum = 0; //number of days passed since epoch year = max(1000, year); month = max(1, min(12, month)); day = max(1, min(31, day)); while(y < year) { bool leapyear = false; if(y % 4 == 0) { leapyear = true; if(y % 100 == 0 && y % 400 != 0) leapyear = false; } sum += 365 + leapyear; y++; } while(m < month) { u32 days = daysInMonth[(m - 1) % 12]; bool leapyearmonth = false; if(days == 28) { if(y % 4 == 0) { leapyearmonth = true; if(y % 100 == 0 && y % 400 != 0) leapyearmonth = false; } } sum += days + leapyearmonth; m++; } sum += day - 1; return (sum + 3) % 7; //1000-01-01 was a Wednesday } ares-126/ares/sfc/coprocessor/spc7110/000077500000000000000000000000001415063341600174655ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/spc7110/alu.cpp000066400000000000000000000034651415063341600207620ustar00rootroot00000000000000auto SPC7110::aluMultiply() -> void { addClocks(30); if(r482e & 1) { //signed 16-bit x 16-bit multiplication i16 r0 = (i16)(r4824 | r4825 << 8); i16 r1 = (i16)(r4820 | r4821 << 8); i32 result = r0 * r1; r4828 = result; r4829 = result >> 8; r482a = result >> 16; r482b = result >> 24; } else { //unsigned 16-bit x 16-bit multiplication n16 r0 = (n16)(r4824 | r4825 << 8); n16 r1 = (n16)(r4820 | r4821 << 8); n32 result = r0 * r1; r4828 = result; r4829 = result >> 8; r482a = result >> 16; r482b = result >> 24; } r482f &= 0x7f; } auto SPC7110::aluDivide() -> void { addClocks(40); if(r482e & 1) { //signed 32-bit x 16-bit division i32 dividend = (i32)(r4820 | r4821 << 8 | r4822 << 16 | r4823 << 24); i16 divisor = (i16)(r4826 | r4827 << 8); i32 quotient; i16 remainder; if(divisor) { quotient = (i32)(dividend / divisor); remainder = (i32)(dividend % divisor); } else { //illegal division by zero quotient = 0; remainder = dividend; } r4828 = quotient; r4829 = quotient >> 8; r482a = quotient >> 16; r482b = quotient >> 24; r482c = remainder; r482d = remainder >> 8; } else { //unsigned 32-bit x 16-bit division n32 dividend = (n32)(r4820 | r4821 << 8 | r4822 << 16 | r4823 << 24); n16 divisor = (n16)(r4826 | r4827 << 8); n32 quotient; n16 remainder; if(divisor) { quotient = (n32)(dividend / divisor); remainder = (n16)(dividend % divisor); } else { //illegal division by zero quotient = 0; remainder = dividend; } r4828 = quotient; r4829 = quotient >> 8; r482a = quotient >> 16; r482b = quotient >> 24; r482c = remainder; r482d = remainder >> 8; } r482f &= 0x7f; } ares-126/ares/sfc/coprocessor/spc7110/data.cpp000066400000000000000000000036251415063341600211100ustar00rootroot00000000000000auto SPC7110::dataromRead(n24 address) -> n8 { n24 size = 1 << (r4834 & 3); //size in MB n24 mask = 0x100000 * size - 1; n24 offset = address & mask; if((r4834 & 3) != 3 && (address & 0x400000)) return 0x00; return drom.read(Bus::mirror(offset, drom.size())); } auto SPC7110::dataOffset() -> n24 { return r4811 | r4812 << 8 | r4813 << 16; } auto SPC7110::dataAdjust() -> n16 { return r4814 | r4815 << 8; } auto SPC7110::dataStride() -> n16 { return r4816 | r4817 << 8; } auto SPC7110::setDataOffset(n24 address) -> void { r4811 = address; r4812 = address >> 8; r4813 = address >> 16; } auto SPC7110::setDataAdjust(n16 address) -> void { r4814 = address; r4815 = address >> 8; } auto SPC7110::dataPortRead() -> void { n24 offset = dataOffset(); n32 adjust = r4818 & 2 ? dataAdjust() : (n16)0; if(r4818 & 8) adjust = (i16)adjust; r4810 = dataromRead(offset + adjust); } auto SPC7110::dataPortIncrement4810() -> void { n24 offset = dataOffset(); n32 stride = r4818 & 1 ? dataStride() : (n16)1; n32 adjust = dataAdjust(); if(r4818 & 4) stride = (i16)stride; if(r4818 & 8) adjust = (i16)adjust; if((r4818 & 16) == 0) setDataOffset(offset + stride); if((r4818 & 16) != 0) setDataAdjust(adjust + stride); dataPortRead(); } auto SPC7110::dataPortIncrement4814() -> void { if(r4818 >> 5 != 1) return; n24 offset = dataOffset(); n32 adjust = dataAdjust(); if(r4818 & 8) adjust = (i16)adjust; setDataOffset(offset + adjust); dataPortRead(); } auto SPC7110::dataPortIncrement4815() -> void { if(r4818 >> 5 != 2) return; n24 offset = dataOffset(); n32 adjust = dataAdjust(); if(r4818 & 8) adjust = (i16)adjust; setDataOffset(offset + adjust); dataPortRead(); } auto SPC7110::dataPortIncrement481a() -> void { if(r4818 >> 5 != 3) return; n24 offset = dataOffset(); n32 adjust = dataAdjust(); if(r4818 & 8) adjust = (i16)adjust; setDataOffset(offset + adjust); dataPortRead(); } ares-126/ares/sfc/coprocessor/spc7110/dcu.cpp000066400000000000000000000027601415063341600207510ustar00rootroot00000000000000#include "decompressor.cpp" auto SPC7110::dcuLoadAddress() -> void { n24 table = r4801 | r4802 << 8 | r4803 << 16; n24 index = r4804 << 2; n24 address = table + index; dcuMode = dataromRead(address + 0); dcuAddress = dataromRead(address + 1) << 16; dcuAddress |= dataromRead(address + 2) << 8; dcuAddress |= dataromRead(address + 3) << 0; } auto SPC7110::dcuBeginTransfer() -> void { if(dcuMode == 3) return; //invalid mode addClocks(20); decompressor->initialize(dcuMode, dcuAddress); decompressor->decode(); n16 seek = r480b & 2 ? r4805 | r4806 << 8 : 0; while(seek--) decompressor->decode(); r480c |= 0x80; dcuOffset = 0; } auto SPC7110::dcuRead() -> n8 { if((r480c & 0x80) == 0) return 0x00; if(dcuOffset == 0) { for(auto row : range(8)) { switch(decompressor->bpp) { case 1: dcuTile[row] = decompressor->result; break; case 2: dcuTile[row * 2 + 0] = decompressor->result >> 0; dcuTile[row * 2 + 1] = decompressor->result >> 8; break; case 4: dcuTile[row * 2 + 0] = decompressor->result >> 0; dcuTile[row * 2 + 1] = decompressor->result >> 8; dcuTile[row * 2 + 16] = decompressor->result >> 16; dcuTile[row * 2 + 17] = decompressor->result >> 24; break; } n8 seek = r480b & 1 ? r4807 : (n8)1; while(seek--) decompressor->decode(); } } n8 data = dcuTile[dcuOffset++]; dcuOffset &= 8 * decompressor->bpp - 1; return data; } ares-126/ares/sfc/coprocessor/spc7110/decompressor.cpp000066400000000000000000000136651415063341600227110ustar00rootroot00000000000000//SPC7110 decompressor //original implementation: neviksti //optimized implementation: talarubi struct Decompressor { SPC7110& spc7110; Decompressor(SPC7110& spc7110) : spc7110(spc7110) {} auto read() -> n8 { return spc7110.dataromRead(offset++); } //inverse morton code transform: unpack big-endian packed pixels //returns odd bits in lower half; even bits in upper half auto deinterleave(n64 data, n32 bits) -> n32 { data = data & (1ull << bits) - 1; data = 0x5555555555555555ull & (data << bits | data >> 1); data = 0x3333333333333333ull & (data | data >> 1); data = 0x0f0f0f0f0f0f0f0full & (data | data >> 2); data = 0x00ff00ff00ff00ffull & (data | data >> 4); data = 0x0000ffff0000ffffull & (data | data >> 8); return data | data >> 16; } //extract a nibble and move it to the low four bits auto moveToFront(n64 list, n32 nibble) -> n64 { for(n64 n = 0, mask = ~15; n < 64; n += 4, mask <<= 4) { if((list >> n & 15) != nibble) continue; return list = (list & mask) + (list << 4 & ~mask) + nibble; } return list; } auto initialize(n32 mode, n32 origin) -> void { for(auto& root : context) for(auto& node : root) node = {0, 0}; bpp = 1 << mode; offset = origin; bits = 8; range = Max + 1; input = read(); input = input << 8 | read(); output = 0; pixels = 0; colormap = 0xfedcba9876543210ull; } auto decode() -> void { for(n32 pixel = 0; pixel < 8; pixel++) { n64 map = colormap; n32 diff = 0; if(bpp > 1) { n32 pa = (bpp == 2 ? pixels >> 2 & 3 : pixels >> 0 & 15); n32 pb = (bpp == 2 ? pixels >> 14 & 3 : pixels >> 28 & 15); n32 pc = (bpp == 2 ? pixels >> 16 & 3 : pixels >> 32 & 15); if(pa != pb || pb != pc) { n32 match = pa ^ pb ^ pc; diff = 4; //no match; all pixels differ if((match ^ pc) == 0) diff = 3; //a == b; pixel c differs if((match ^ pb) == 0) diff = 2; //c == a; pixel b differs if((match ^ pa) == 0) diff = 1; //b == c; pixel a differs } colormap = moveToFront(colormap, pa); map = moveToFront(map, pc); map = moveToFront(map, pb); map = moveToFront(map, pa); } for(n32 plane = 0; plane < bpp; plane++) { n32 bit = bpp > 1 ? 1 << plane : 1 << (pixel & 3); n32 history = bit - 1 & output; n32 set = 0; if(bpp == 1) set = pixel >= 4; if(bpp == 2) set = diff; if(plane >= 2 && history <= 1) set = diff; auto& ctx = context[set][bit + history - 1]; auto& model = evolution[ctx.prediction]; n8 lps_offset = range - model.probability; bool symbol = input >= (lps_offset << 8); //test only the MSB output = output << 1 | (symbol ^ ctx.swap); if(symbol == MPS) { //[0 ... range-p] range = lps_offset; //range = range-p } else { //[range-p+1 ... range] range -= lps_offset; //range = p-1, with p < 0.75 input -= lps_offset << 8; //therefore, always rescale } while(range <= Max / 2) { //scale back into [0.75 ... 1.5] ctx.prediction = model.next[symbol]; range <<= 1; input <<= 1; if(--bits == 0) { bits = 8; input += read(); } } if(symbol == LPS && model.probability > Half) ctx.swap ^= 1; } n32 index = output & (1 << bpp) - 1; if(bpp == 1) index ^= pixels >> 15 & 1; pixels = pixels << bpp | (map >> 4 * index & 15); } if(bpp == 1) result = pixels; if(bpp == 2) result = deinterleave(pixels, 16); if(bpp == 4) result = deinterleave(deinterleave(pixels, 32), 32); } auto serialize(serializer& s) -> void { for(auto& root : context) { for(auto& node : root) { s(node.prediction); s(node.swap); } } s(bpp); s(offset); s(bits); s(range); s(input); s(output); s(pixels); s(colormap); s(result); } enum : u32 { MPS = 0, LPS = 1 }; enum : u32 { One = 0xaa, Half = 0x55, Max = 0xff }; struct ModelState { n8 probability; //of the more probable symbol (MPS) n8 next[2]; //next state after output {MPS, LPS} }; static ModelState evolution[53]; struct Context { n8 prediction; //current model state n8 swap; //if 1, exchange the role of MPS and LPS } context[5][15]; //not all 75 contexts exists; this simplifies the code n32 bpp; //bits per pixel (1bpp = 1; 2bpp = 2; 4bpp = 4) n32 offset; //SPC7110 data ROM read offset n32 bits; //bits remaining in input n16 range; //arithmetic range: technically 8-bits, but Max+1 = 256 n16 input; //input data from SPC7110 data ROM n8 output; n64 pixels; n64 colormap; //most recently used list n32 result; //decompressed word after calling decode() }; Decompressor::ModelState Decompressor::evolution[53] = { {0x5a, { 1, 1}}, {0x25, { 2, 6}}, {0x11, { 3, 8}}, {0x08, { 4,10}}, {0x03, { 5,12}}, {0x01, { 5,15}}, {0x5a, { 7, 7}}, {0x3f, { 8,19}}, {0x2c, { 9,21}}, {0x20, {10,22}}, {0x17, {11,23}}, {0x11, {12,25}}, {0x0c, {13,26}}, {0x09, {14,28}}, {0x07, {15,29}}, {0x05, {16,31}}, {0x04, {17,32}}, {0x03, {18,34}}, {0x02, { 5,35}}, {0x5a, {20,20}}, {0x48, {21,39}}, {0x3a, {22,40}}, {0x2e, {23,42}}, {0x26, {24,44}}, {0x1f, {25,45}}, {0x19, {26,46}}, {0x15, {27,25}}, {0x11, {28,26}}, {0x0e, {29,26}}, {0x0b, {30,27}}, {0x09, {31,28}}, {0x08, {32,29}}, {0x07, {33,30}}, {0x05, {34,31}}, {0x04, {35,33}}, {0x04, {36,33}}, {0x03, {37,34}}, {0x02, {38,35}}, {0x02, { 5,36}}, {0x58, {40,39}}, {0x4d, {41,47}}, {0x43, {42,48}}, {0x3b, {43,49}}, {0x34, {44,50}}, {0x2e, {45,51}}, {0x29, {46,44}}, {0x25, {24,45}}, {0x56, {48,47}}, {0x4f, {49,47}}, {0x47, {50,48}}, {0x41, {51,49}}, {0x3c, {52,50}}, {0x37, {43,51}}, }; ares-126/ares/sfc/coprocessor/spc7110/serialization.cpp000066400000000000000000000013501415063341600230450ustar00rootroot00000000000000auto SPC7110::serialize(serializer& s) -> void { Thread::serialize(s); s(ram); s(r4801); s(r4802); s(r4803); s(r4804); s(r4805); s(r4806); s(r4807); s(r4809); s(r480a); s(r480b); s(r480c); s(dcuPending); s(dcuMode); s(dcuAddress); s(dcuOffset); s(dcuTile); if(decompressor) s(*decompressor); s(r4810); s(r4811); s(r4812); s(r4813); s(r4814); s(r4815); s(r4816); s(r4817); s(r4818); s(r481a); s(r4820); s(r4821); s(r4822); s(r4823); s(r4824); s(r4825); s(r4826); s(r4827); s(r4828); s(r4829); s(r482a); s(r482b); s(r482c); s(r482d); s(r482e); s(r482f); s(mulPending); s(divPending); s(r4830); s(r4831); s(r4832); s(r4833); s(r4834); } ares-126/ares/sfc/coprocessor/spc7110/spc7110.cpp000066400000000000000000000163251415063341600212760ustar00rootroot00000000000000SPC7110 spc7110; #include "dcu.cpp" #include "data.cpp" #include "alu.cpp" #include "serialization.cpp" SPC7110::SPC7110() { decompressor = new Decompressor(*this); } SPC7110::~SPC7110() { delete decompressor; } auto SPC7110::main() -> void { if(dcuPending) { dcuPending = 0; dcuBeginTransfer(); } if(mulPending) { mulPending = 0; aluMultiply(); } if(divPending) { divPending = 0; aluDivide(); } addClocks(1); } auto SPC7110::addClocks(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto SPC7110::unload() -> void { prom.reset(); drom.reset(); ram.reset(); cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto SPC7110::power() -> void { Thread::create(21'477'272, {&SPC7110::main, this}); cpu.coprocessors.append(this); r4801 = 0x00; r4802 = 0x00; r4803 = 0x00; r4804 = 0x00; r4805 = 0x00; r4806 = 0x00; r4807 = 0x00; r4809 = 0x00; r480a = 0x00; r480b = 0x00; r480c = 0x00; dcuPending = 0; dcuMode = 0; dcuAddress = 0; r4810 = 0x00; r4811 = 0x00; r4812 = 0x00; r4813 = 0x00; r4814 = 0x00; r4815 = 0x00; r4816 = 0x00; r4817 = 0x00; r4818 = 0x00; r481a = 0x00; r4820 = 0x00; r4821 = 0x00; r4822 = 0x00; r4823 = 0x00; r4824 = 0x00; r4825 = 0x00; r4826 = 0x00; r4827 = 0x00; r4828 = 0x00; r4829 = 0x00; r482a = 0x00; r482b = 0x00; r482c = 0x00; r482d = 0x00; r482e = 0x00; r482f = 0x00; mulPending = 0; divPending = 0; r4830 = 0x00; r4831 = 0x00; r4832 = 0x01; r4833 = 0x02; r4834 = 0x00; } auto SPC7110::read(n24 addr, n8 data) -> n8 { cpu.synchronize(*this); if((addr & 0xff0000) == 0x500000) addr = 0x4800; //$50:0000-ffff == $4800 if((addr & 0xff0000) == 0x580000) addr = 0x4808; //$58:0000-ffff == $4808 addr = 0x4800 | (addr & 0x3f); //$00-3f,80-bf:4800-483f switch(addr) { //================== //decompression unit //================== case 0x4800: { n16 counter = r4809 | r480a << 8; counter--; r4809 = counter >> 0; r480a = counter >> 8; return dcuRead(); } case 0x4801: return r4801; case 0x4802: return r4802; case 0x4803: return r4803; case 0x4804: return r4804; case 0x4805: return r4805; case 0x4806: return r4806; case 0x4807: return r4807; case 0x4808: return 0x00; case 0x4809: return r4809; case 0x480a: return r480a; case 0x480b: return r480b; case 0x480c: return r480c; //============== //data port unit //============== case 0x4810: { data = r4810; dataPortIncrement4810(); return data; } case 0x4811: return r4811; case 0x4812: return r4812; case 0x4813: return r4813; case 0x4814: return r4814; case 0x4815: return r4815; case 0x4816: return r4816; case 0x4817: return r4817; case 0x4818: return r4818; case 0x481a: { dataPortIncrement481a(); return 0x00; } //===================== //arithmetic logic unit //===================== case 0x4820: return r4820; case 0x4821: return r4821; case 0x4822: return r4822; case 0x4823: return r4823; case 0x4824: return r4824; case 0x4825: return r4825; case 0x4826: return r4826; case 0x4827: return r4827; case 0x4828: return r4828; case 0x4829: return r4829; case 0x482a: return r482a; case 0x482b: return r482b; case 0x482c: return r482c; case 0x482d: return r482d; case 0x482e: return r482e; case 0x482f: return r482f; //=================== //memory control unit //=================== case 0x4830: return r4830; case 0x4831: return r4831; case 0x4832: return r4832; case 0x4833: return r4833; case 0x4834: return r4834; } return data; } auto SPC7110::write(n24 addr, n8 data) -> void { cpu.synchronize(*this); if((addr & 0xff0000) == 0x500000) addr = 0x4800; //$50:0000-ffff == $4800 if((addr & 0xff0000) == 0x580000) addr = 0x4808; //$58:0000-ffff == $4808 addr = 0x4800 | (addr & 0x3f); //$00-3f,80-bf:4800-483f switch(addr) { //================== //decompression unit //================== case 0x4801: r4801 = data; break; case 0x4802: r4802 = data; break; case 0x4803: r4803 = data; break; case 0x4804: r4804 = data; dcuLoadAddress(); break; case 0x4805: r4805 = data; break; case 0x4806: r4806 = data; r480c &= 0x7f; dcuPending = 1; break; case 0x4807: r4807 = data; break; case 0x4808: break; case 0x4809: r4809 = data; break; case 0x480a: r480a = data; break; case 0x480b: r480b = data & 0x03; break; //============== //data port unit //============== case 0x4811: r4811 = data; break; case 0x4812: r4812 = data; break; case 0x4813: r4813 = data; dataPortRead(); break; case 0x4814: r4814 = data; dataPortIncrement4814(); break; case 0x4815: r4815 = data; if(r4818 & 2) dataPortRead(); dataPortIncrement4815(); break; case 0x4816: r4816 = data; break; case 0x4817: r4817 = data; break; case 0x4818: r4818 = data & 0x7f; dataPortRead(); break; //===================== //arithmetic logic unit //===================== case 0x4820: r4820 = data; break; case 0x4821: r4821 = data; break; case 0x4822: r4822 = data; break; case 0x4823: r4823 = data; break; case 0x4824: r4824 = data; break; case 0x4825: r4825 = data; r482f |= 0x81; mulPending = 1; break; case 0x4826: r4826 = data; break; case 0x4827: r4827 = data; r482f |= 0x80; divPending = 1; break; case 0x482e: r482e = data & 0x01; break; //=================== //memory control unit //=================== case 0x4830: r4830 = data & 0x87; break; case 0x4831: r4831 = data & 0x07; break; case 0x4832: r4832 = data & 0x07; break; case 0x4833: r4833 = data & 0x07; break; case 0x4834: r4834 = data & 0x07; break; } } //=============== //SPC7110::MCUROM //=============== //map address=00-3f,80-bf:8000-ffff mask=0x800000 => 00-3f:8000-ffff //map address=c0-ff:0000-ffff mask=0xc00000 => c0-ff:0000-ffff auto SPC7110::mcuromRead(n24 addr, n8 data) -> n8 { u32 mask = (1 << (r4834 & 3)) - 1; //8mbit, 16mbit, 32mbit, 64mbit DROM if(addr < 0x100000) { //$00-0f,80-8f:8000-ffff; $c0-cf:0000-ffff addr &= 0x0fffff; if(prom.size()) { //8mbit PROM return prom.read(bus.mirror(0x000000 + addr, prom.size())); } addr |= 0x100000 * (r4830 & 7); return dataromRead(addr); } if(addr < 0x200000) { //$10-1f,90-9f:8000-ffff; $d0-df:0000-ffff addr &= 0x0fffff; if(r4834 & 4) { //16mbit PROM return prom.read(bus.mirror(0x100000 + addr, prom.size())); } addr |= 0x100000 * (r4831 & 7); return dataromRead(addr); } if(addr < 0x300000) { //$20-2f,a0-af:8000-ffff; $e0-ef:0000-ffff addr &= 0x0fffff; addr |= 0x100000 * (r4832 & 7); return dataromRead(addr); } if(addr < 0x400000) { //$30-3f,b0-bf:8000-ffff; $f0-ff:0000-ffff addr &= 0x0fffff; addr |= 0x100000 * (r4833 & 7); return dataromRead(addr); } return data; } auto SPC7110::mcuromWrite(n24 addr, n8 data) -> void { } //=============== //SPC7110::MCURAM //=============== //map address=00-3f,80-bf:6000-7fff mask=0x80e000 => 00-07:0000-ffff auto SPC7110::mcuramRead(n24 addr, n8) -> n8 { if(r4830 & 0x80) { addr = bus.mirror(addr, ram.size()); return ram.read(addr); } return 0x00; } auto SPC7110::mcuramWrite(n24 addr, n8 data) -> void { if(r4830 & 0x80) { addr = bus.mirror(addr, ram.size()); ram.write(addr, data); } } ares-126/ares/sfc/coprocessor/spc7110/spc7110.hpp000066400000000000000000000062151415063341600213000ustar00rootroot00000000000000struct Decompressor; struct SPC7110 : Thread { SPC7110(); ~SPC7110(); auto main() -> void; auto unload() -> void; auto power() -> void; auto addClocks(u32 clocks) -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; auto mcuromRead(n24 address, n8 data) -> n8; auto mcuromWrite(n24 address, n8 data) -> void; auto mcuramRead(n24 address, n8 data) -> n8; auto mcuramWrite(n24 address, n8 data) -> void; auto serialize(serializer&) -> void; //dcu.cpp auto dcuLoadAddress() -> void; auto dcuBeginTransfer() -> void; auto dcuRead() -> n8; auto deinterleave1bpp(u32 length) -> void; auto deinterleave2bpp(u32 length) -> void; auto deinterleave4bpp(u32 length) -> void; //data.cpp auto dataromRead(n24 address) -> n8; auto dataOffset() -> n24; auto dataAdjust() -> n16; auto dataStride() -> n16; auto setDataOffset(n24 address) -> void; auto setDataAdjust(n16 address) -> void; auto dataPortRead() -> void; auto dataPortIncrement4810() -> void; auto dataPortIncrement4814() -> void; auto dataPortIncrement4815() -> void; auto dataPortIncrement481a() -> void; //alu.cpp auto aluMultiply() -> void; auto aluDivide() -> void; ReadableMemory prom; //program ROM ReadableMemory drom; //data ROM WritableMemory ram; private: //decompression unit n8 r4801; //compression table B0 n8 r4802; //compression table B1 n7 r4803; //compression table B2 n8 r4804; //compression table index n8 r4805; //adjust length B0 n8 r4806; //adjust length B1 n8 r4807; //stride length n8 r4809; //compression counter B0 n8 r480a; //compression counter B1 n8 r480b; //decompression settings n8 r480c; //decompression status n1 dcuPending; n2 dcuMode; n23 dcuAddress; n32 dcuOffset; n8 dcuTile[32]; Decompressor* decompressor = nullptr; //data port unit n8 r4810; //data port read + seek n8 r4811; //data offset B0 n8 r4812; //data offset B1 n7 r4813; //data offset B2 n8 r4814; //data adjust B0 n8 r4815; //data adjust B1 n8 r4816; //data stride B0 n8 r4817; //data stride B1 n8 r4818; //data port settings n8 r481a; //data port seek //arithmetic logic unit n8 r4820; //16-bit multiplicand B0, 32-bit dividend B0 n8 r4821; //16-bit multiplicand B1, 32-bit dividend B1 n8 r4822; //32-bit dividend B2 n8 r4823; //32-bit dividend B3 n8 r4824; //16-bit multiplier B0 n8 r4825; //16-bit multiplier B1 n8 r4826; //16-bit divisor B0 n8 r4827; //16-bit divisor B1 n8 r4828; //32-bit product B0, 32-bit quotient B0 n8 r4829; //32-bit product B1, 32-bit quotient B1 n8 r482a; //32-bit product B2, 32-bit quotient B2 n8 r482b; //32-bit product B3, 32-bit quotient B3 n8 r482c; //16-bit remainder B0 n8 r482d; //16-bit remainder B1 n8 r482e; //math settings n8 r482f; //math status n1 mulPending; n1 divPending; //memory control unit n8 r4830; //bank 0 mapping + SRAM write enable n8 r4831; //bank 1 mapping n8 r4832; //bank 2 mapping n8 r4833; //bank 3 mapping n8 r4834; //bank mapping settings }; extern SPC7110 spc7110; ares-126/ares/sfc/coprocessor/superfx/000077500000000000000000000000001415063341600200635ustar00rootroot00000000000000ares-126/ares/sfc/coprocessor/superfx/bus.cpp000066400000000000000000000026271415063341600213670ustar00rootroot00000000000000//ROM / RAM access from the S-CPU auto SuperFX::CPUROM::data() -> n8* { return superfx.rom.data(); } auto SuperFX::CPUROM::size() const -> u32 { return superfx.rom.size(); } auto SuperFX::CPUROM::read(n24 address, n8 data) -> n8 { if(superfx.regs.sfr.g && superfx.regs.scmr.ron) { static constexpr u8 vector[16] = { 0x00, 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, 0x01, 0x00, 0x01, 0x08, 0x01, 0x00, 0x01, 0x0c, 0x01, }; return vector[address & 15]; } return superfx.rom.read(address, data); } auto SuperFX::CPUROM::write(n24 address, n8 data) -> void { superfx.rom.write(address, data); } // auto SuperFX::CPURAM::data() -> n8* { return superfx.ram.data(); } auto SuperFX::CPURAM::size() const -> u32 { return superfx.ram.size(); } auto SuperFX::CPURAM::read(n24 address, n8 data) -> n8 { if(superfx.regs.sfr.g && superfx.regs.scmr.ran) return data; return superfx.ram.read(address, data); } auto SuperFX::CPURAM::write(n24 address, n8 data) -> void { superfx.ram.write(address, data); } // auto SuperFX::CPUBRAM::data() -> n8* { return superfx.bram.data(); } auto SuperFX::CPUBRAM::size() const -> u32 { return superfx.bram.size(); } auto SuperFX::CPUBRAM::read(n24 address, n8 data) -> n8 { return superfx.bram.read(address, data); } auto SuperFX::CPUBRAM::write(n24 address, n8 data) -> void { if(!superfx.regs.bramr) return; superfx.bram.write(address, data); } ares-126/ares/sfc/coprocessor/superfx/core.cpp000066400000000000000000000062411415063341600215220ustar00rootroot00000000000000auto SuperFX::stop() -> void { cpu.irq(1); } auto SuperFX::color(n8 source) -> n8 { if(regs.por.highnibble) return (regs.colr & 0xf0) | (source >> 4); if(regs.por.freezehigh) return (regs.colr & 0xf0) | (source & 0x0f); return source; } auto SuperFX::plot(n8 x, n8 y) -> void { if(!regs.por.transparent) { if(regs.scmr.md == 3) { if(regs.por.freezehigh) { if((regs.colr & 0x0f) == 0) return; } else { if(regs.colr == 0) return; } } else { if((regs.colr & 0x0f) == 0) return; } } n8 color = regs.colr; if(regs.por.dither && regs.scmr.md != 3) { if((x ^ y) & 1) color >>= 4; color &= 0x0f; } n16 offset = (y << 5) + (x >> 3); if(offset != pixelcache[0].offset) { flushPixelCache(pixelcache[1]); pixelcache[1] = pixelcache[0]; pixelcache[0].bitpend = 0x00; pixelcache[0].offset = offset; } x = (x & 7) ^ 7; pixelcache[0].data[x] = color; pixelcache[0].bitpend |= 1 << x; if(pixelcache[0].bitpend == 0xff) { flushPixelCache(pixelcache[1]); pixelcache[1] = pixelcache[0]; pixelcache[0].bitpend = 0x00; } } auto SuperFX::rpix(n8 x, n8 y) -> n8 { flushPixelCache(pixelcache[1]); flushPixelCache(pixelcache[0]); u32 cn; //character number switch(regs.por.obj ? 3 : regs.scmr.ht) { case 0: cn = ((x & 0xf8) << 1) + ((y & 0xf8) >> 3); break; case 1: cn = ((x & 0xf8) << 1) + ((x & 0xf8) >> 1) + ((y & 0xf8) >> 3); break; case 2: cn = ((x & 0xf8) << 1) + ((x & 0xf8) << 0) + ((y & 0xf8) >> 3); break; case 3: cn = ((y & 0x80) << 2) + ((x & 0x80) << 1) + ((y & 0x78) << 1) + ((x & 0x78) >> 3); break; } u32 bpp = 2 << (regs.scmr.md - (regs.scmr.md >> 1)); // = [regs.scmr.md]{ 2, 4, 4, 8 }; u32 addr = 0x700000 + (cn * (bpp << 3)) + (regs.scbr << 10) + ((y & 0x07) * 2); n8 data = 0x00; x = (x & 7) ^ 7; for(u32 n : range(bpp)) { u32 byte = ((n >> 1) << 4) + (n & 1); // = [n]{ 0, 1, 16, 17, 32, 33, 48, 49 }; step(regs.clsr ? 5 : 6); data |= ((read(addr + byte) >> x) & 1) << n; } return data; } auto SuperFX::flushPixelCache(PixelCache& cache) -> void { if(cache.bitpend == 0x00) return; n8 x = cache.offset << 3; n8 y = cache.offset >> 5; u32 cn; //character number switch(regs.por.obj ? 3 : regs.scmr.ht) { case 0: cn = ((x & 0xf8) << 1) + ((y & 0xf8) >> 3); break; case 1: cn = ((x & 0xf8) << 1) + ((x & 0xf8) >> 1) + ((y & 0xf8) >> 3); break; case 2: cn = ((x & 0xf8) << 1) + ((x & 0xf8) << 0) + ((y & 0xf8) >> 3); break; case 3: cn = ((y & 0x80) << 2) + ((x & 0x80) << 1) + ((y & 0x78) << 1) + ((x & 0x78) >> 3); break; } u32 bpp = 2 << (regs.scmr.md - (regs.scmr.md >> 1)); // = [regs.scmr.md]{ 2, 4, 4, 8 }; u32 addr = 0x700000 + (cn * (bpp << 3)) + (regs.scbr << 10) + ((y & 0x07) * 2); for(u32 n : range(bpp)) { u32 byte = ((n >> 1) << 4) + (n & 1); // = [n]{ 0, 1, 16, 17, 32, 33, 48, 49 }; n8 data = 0x00; for(u32 x : range(8)) data |= ((cache.data[x] >> n) & 1) << x; if(cache.bitpend != 0xff) { step(regs.clsr ? 5 : 6); data &= cache.bitpend; data |= read(addr + byte) & ~cache.bitpend; } step(regs.clsr ? 5 : 6); write(addr + byte, data); } cache.bitpend = 0x00; } ares-126/ares/sfc/coprocessor/superfx/debugger.cpp000066400000000000000000000006721415063341600223600ustar00rootroot00000000000000auto SuperFX::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "GSU"); tracer.instruction->setAddressBits(24); } auto SuperFX::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(superfx.regs.r[15])) { tracer.instruction->notify(superfx.disassembleInstruction(), superfx.disassembleContext()); } } ares-126/ares/sfc/coprocessor/superfx/io.cpp000066400000000000000000000036431415063341600212040ustar00rootroot00000000000000auto SuperFX::readIO(n24 address, n8) -> n8 { cpu.synchronize(*this); address = 0x3000 | address.bit(0,9); if(address >= 0x3100 && address <= 0x32ff) { return readCache(address - 0x3100); } if(address >= 0x3000 && address <= 0x301f) { return regs.r[address >> 1 & 15] >> ((address & 1) << 3); } switch(address) { case 0x3030: { return regs.sfr >> 0; } case 0x3031: { n8 r = regs.sfr >> 8; regs.sfr.irq = 0; cpu.irq(0); return r; } case 0x3034: { return regs.pbr; } case 0x3036: { return regs.rombr; } case 0x303b: { return regs.vcr; } case 0x303c: { return regs.rambr; } case 0x303e: { return regs.cbr >> 0; } case 0x303f: { return regs.cbr >> 8; } } return 0x00; } auto SuperFX::writeIO(n24 address, n8 data) -> void { cpu.synchronize(*this); address = 0x3000 | address.bit(0,9); if(address >= 0x3100 && address <= 0x32ff) { return writeCache(address - 0x3100, data); } if(address >= 0x3000 && address <= 0x301f) { n4 n = address >> 1 & 15; if(!address.bit(0)) { regs.r[n] = (regs.r[n] & 0xff00) | data; } else { regs.r[n] = (data << 8) | (regs.r[n] & 0xff); } if(n == 14) updateROMBuffer(); if(address == 0x301f) regs.sfr.g = 1; return; } switch(address) { case 0x3030: { bool g = regs.sfr.g; regs.sfr = (regs.sfr & 0xff00) | (data << 0); if(g == 1 && regs.sfr.g == 0) { regs.cbr = 0x0000; flushCache(); } } break; case 0x3031: { regs.sfr = (data << 8) | (regs.sfr & 0x00ff); } break; case 0x3033: { regs.bramr = data & 0x01; } break; case 0x3034: { regs.pbr = data & 0x7f; flushCache(); } break; case 0x3037: { regs.cfgr = data; } break; case 0x3038: { regs.scbr = data; } break; case 0x3039: { regs.clsr = data & 0x01; } break; case 0x303a: { regs.scmr = data; } break; } } ares-126/ares/sfc/coprocessor/superfx/memory.cpp000066400000000000000000000047741415063341600221130ustar00rootroot00000000000000auto SuperFX::read(n24 address, n8 data) -> n8 { if((address & 0xc00000) == 0x000000) { //$00-3f:0000-7fff,:8000-ffff while(!regs.scmr.ron) { step(6); synchronize(cpu); if(scheduler.synchronizing()) break; } return rom.read((((address & 0x3f0000) >> 1) | (address & 0x7fff)) & romMask); } if((address & 0xe00000) == 0x400000) { //$40-5f:0000-ffff while(!regs.scmr.ron) { step(6); synchronize(cpu); if(scheduler.synchronizing()) break; } return rom.read(address & romMask); } if((address & 0xfe0000) == 0x700000) { //$70-71:0000-ffff while(!regs.scmr.ran) { step(6); synchronize(cpu); if(scheduler.synchronizing()) break; } return ram.read(address & ramMask); } return data; } auto SuperFX::write(n24 address, n8 data) -> void { if((address & 0xfe0000) == 0x700000) { //$70-71:0000-ffff while(!regs.scmr.ran) { step(6); synchronize(cpu); if(scheduler.synchronizing()) break; } return ram.write(address & ramMask, data); } } auto SuperFX::readOpcode(n16 address) -> n8 { n16 offset = address - regs.cbr; if(offset < 512) { if(cache.valid[offset >> 4] == false) { u32 dp = offset & 0xfff0; u32 sp = (regs.pbr << 16) + ((regs.cbr + dp) & 0xfff0); for(u32 n : range(16)) { step(regs.clsr ? 5 : 6); cache.buffer[dp++] = read(sp++); } cache.valid[offset >> 4] = true; } else { step(regs.clsr ? 1 : 2); } return cache.buffer[offset]; } if(regs.pbr <= 0x5f) { //$00-5f:0000-ffff ROM syncROMBuffer(); step(regs.clsr ? 5 : 6); return read(regs.pbr << 16 | address); } else { //$60-7f:0000-ffff RAM syncRAMBuffer(); step(regs.clsr ? 5 : 6); return read(regs.pbr << 16 | address); } } inline auto SuperFX::peekpipe() -> n8 { n8 result = regs.pipeline; regs.pipeline = readOpcode(regs.r[15]); regs.r[15].modified = false; return result; } inline auto SuperFX::pipe() -> n8 { n8 result = regs.pipeline; regs.pipeline = readOpcode(++regs.r[15]); regs.r[15].modified = false; return result; } auto SuperFX::flushCache() -> void { for(u32 n : range(32)) cache.valid[n] = false; } auto SuperFX::readCache(n16 address) -> n8 { address = (address + regs.cbr) & 511; return cache.buffer[address]; } auto SuperFX::writeCache(n16 address, n8 data) -> void { address = (address + regs.cbr) & 511; cache.buffer[address] = data; if((address & 15) == 15) cache.valid[address >> 4] = true; } ares-126/ares/sfc/coprocessor/superfx/serialization.cpp000066400000000000000000000001651415063341600234460ustar00rootroot00000000000000auto SuperFX::serialize(serializer& s) -> void { GSU::serialize(s); Thread::serialize(s); s(ram); s(bram); } ares-126/ares/sfc/coprocessor/superfx/superfx.cpp000066400000000000000000000024471415063341600222720ustar00rootroot00000000000000SuperFX superfx; #include "bus.cpp" #include "core.cpp" #include "memory.cpp" #include "io.cpp" #include "timing.cpp" #include "debugger.cpp" #include "serialization.cpp" auto SuperFX::load(Node::Object parent) -> void { node = parent->append("SuperFX"); debugger.load(node); } auto SuperFX::unload() -> void { debugger = {}; node = {}; rom.reset(); ram.reset(); bram.reset(); cpu.coprocessors.removeByValue(this); Thread::destroy(); } auto SuperFX::main() -> void { if(regs.sfr.g == 0) return step(6); auto opcode = peekpipe(); debugger.instruction(); instruction(opcode); if(regs.r[14].modified) { regs.r[14].modified = false; updateROMBuffer(); } if(regs.r[15].modified) { regs.r[15].modified = false; } else { regs.r[15]++; } } auto SuperFX::power() -> void { GSU::power(); Thread::create(Frequency, {&SuperFX::main, this}); cpu.coprocessors.append(this); romMask = rom.size() - 1; ramMask = ram.size() - 1; bramMask = bram.size() - 1; for(u32 n : range(512)) cache.buffer[n] = 0x00; for(u32 n : range(32)) cache.valid[n] = false; for(u32 n : range(2)) { pixelcache[n].offset = ~0; pixelcache[n].bitpend = 0x00; } regs.romcl = 0; regs.romdr = 0; regs.ramcl = 0; regs.ramar = 0; regs.ramdr = 0; } ares-126/ares/sfc/coprocessor/superfx/superfx.hpp000066400000000000000000000044451415063341600222770ustar00rootroot00000000000000struct SuperFX : GSU, Thread { Node::Object node; ReadableMemory rom; WritableMemory ram; WritableMemory bram; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; } tracer; } debugger; //superfx.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto power() -> void; //bus.cpp struct CPUROM : AbstractMemory { auto data() -> n8* override; auto size() const -> u32 override; auto read(n24 address, n8 data) -> n8 override; auto write(n24 address, n8 data) -> void override; }; struct CPURAM : AbstractMemory { auto data() -> n8* override; auto size() const -> u32 override; auto read(n24 address, n8 data) -> n8 override; auto write(n24 address, n8 data) -> void override; }; struct CPUBRAM : AbstractMemory { auto data() -> n8* override; auto size() const -> u32 override; auto read(n24 address, n8 data) -> n8 override; auto write(n24 address, n8 data) -> void override; }; //core.cpp auto stop() -> void override; auto color(n8 source) -> n8 override; auto plot(n8 x, n8 y) -> void override; auto rpix(n8 x, n8 y) -> n8 override; auto flushPixelCache(PixelCache& cache) -> void; //memory.cpp auto read(n24 address, n8 data = 0x00) -> n8 override; auto write(n24 address, n8 data) -> void override; auto readOpcode(n16 address) -> n8; auto peekpipe() -> n8; auto pipe() -> n8 override; auto flushCache() -> void override; auto readCache(n16 address) -> n8; auto writeCache(n16 address, n8 data) -> void; //io.cpp auto readIO(n24 address, n8 data) -> n8; auto writeIO(n24 address, n8 data) -> void; //timing.cpp auto step(u32 clocks) -> void override; auto syncROMBuffer() -> void override; auto readROMBuffer() -> n8 override; auto updateROMBuffer() -> void; auto syncRAMBuffer() -> void override; auto readRAMBuffer(n16 address) -> n8 override; auto writeRAMBuffer(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; n32 Frequency; CPUROM cpurom; CPURAM cpuram; CPUBRAM cpubram; private: n32 romMask; n32 ramMask; n32 bramMask; }; extern SuperFX superfx; ares-126/ares/sfc/coprocessor/superfx/timing.cpp000066400000000000000000000020511415063341600220540ustar00rootroot00000000000000auto SuperFX::step(u32 clocks) -> void { if(regs.romcl) { regs.romcl -= min(clocks, regs.romcl); if(regs.romcl == 0) { regs.sfr.r = 0; regs.romdr = read((regs.rombr << 16) + regs.r[14]); } } if(regs.ramcl) { regs.ramcl -= min(clocks, regs.ramcl); if(regs.ramcl == 0) { write(0x700000 + (regs.rambr << 16) + regs.ramar, regs.ramdr); } } Thread::step(clocks); Thread::synchronize(cpu); } auto SuperFX::syncROMBuffer() -> void { if(regs.romcl) step(regs.romcl); } auto SuperFX::readROMBuffer() -> n8 { syncROMBuffer(); return regs.romdr; } auto SuperFX::updateROMBuffer() -> void { regs.sfr.r = 1; regs.romcl = regs.clsr ? 5 : 6; } auto SuperFX::syncRAMBuffer() -> void { if(regs.ramcl) step(regs.ramcl); } auto SuperFX::readRAMBuffer(n16 address) -> n8 { syncRAMBuffer(); return read(0x700000 + (regs.rambr << 16) + address); } auto SuperFX::writeRAMBuffer(n16 address, n8 data) -> void { syncRAMBuffer(); regs.ramcl = regs.clsr ? 5 : 6; regs.ramar = address; regs.ramdr = data; } ares-126/ares/sfc/cpu/000077500000000000000000000000001415063341600146155ustar00rootroot00000000000000ares-126/ares/sfc/cpu/cpu.cpp000066400000000000000000000050731415063341600161150ustar00rootroot00000000000000#include namespace ares::SuperFamicom { CPU cpu; #include "dma.cpp" #include "memory.cpp" #include "io.cpp" #include "timing.cpp" #include "irq.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); version = parent->append("Version", 2); version->setAllowedValues({1, 2}); debugger.load(node); } auto CPU::unload() -> void { version = {}; debugger = {}; node = {}; } auto CPU::main() -> void { if(r.wai) return instructionWait(); if(r.stp) return instructionStop(); if(!status.interruptPending) { debugger.instruction(); return instruction(); } if(status.nmiPending) { status.nmiPending = 0; r.vector = r.e ? 0xfffa : 0xffea; debugger.interrupt("NMI"); return interrupt(); } if(status.irqPending) { status.irqPending = 0; r.vector = r.e ? 0xfffe : 0xffee; debugger.interrupt("IRQ"); return interrupt(); } if(status.resetPending) { status.resetPending = 0; step(132); r.vector = 0xfffc; debugger.interrupt("Reset"); return interrupt(); //H=186 } status.interruptPending = 0; } auto CPU::map() -> void { function reader; function writer; reader = {&CPU::readRAM, this}; writer = {&CPU::writeRAM, this}; bus.map(reader, writer, "00-3f,80-bf:0000-1fff", 0x2000); bus.map(reader, writer, "7e-7f:0000-ffff", 0x20000); reader = {&CPU::readAPU, this}; writer = {&CPU::writeAPU, this}; bus.map(reader, writer, "00-3f,80-bf:2140-217f"); reader = {&CPU::readCPU, this}; writer = {&CPU::writeCPU, this}; bus.map(reader, writer, "00-3f,80-bf:2180-2183,4016-4017,4200-421f"); reader = {&CPU::readDMA, this}; writer = {&CPU::writeDMA, this}; bus.map(reader, writer, "00-3f,80-bf:4300-437f"); } auto CPU::power(bool reset) -> void { WDC65816::power(); create(system.cpuFrequency(), {&CPU::main, this}); coprocessors.reset(); PPUcounter::reset(); PPUcounter::scanline = {&CPU::scanline, this}; if(!reset) random.array({wram, sizeof(wram)}); for(u32 id : range(8)) { channels[id] = {}; channels[id].id = id; if(id != 7) channels[id].next = channels[id + 1]; } counter = {}; io = {}; io.version = version->value(); alu = {}; status = {}; status.dramRefreshPosition = (io.version == 1 ? 530 : 538); status.hdmaSetupPosition = (io.version == 1 ? 12 + 8 - dmaCounter() : 12 + dmaCounter()); status.hdmaPosition = 1104; status.resetPending = 1; status.interruptPending = 1; } } ares-126/ares/sfc/cpu/cpu.hpp000066400000000000000000000126311415063341600161200ustar00rootroot00000000000000struct CPU : WDC65816, Thread, PPUcounter { Node::Object node; Node::Setting::Natural version; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; auto dma(n8 channelID, n24 addressA, n8 addressB, n8 data) -> void; struct Memory { Node::Debugger::Memory wram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; Node::Debugger::Tracer::Notification dma; } tracer; } debugger; auto interruptPending() const -> bool override { return status.interruptPending; } auto pio() const -> n8 { return io.pio; } auto refresh() const -> bool { return status.dramRefresh == 1; } auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //cpu.cpp auto load(Node::Object parent) -> void; auto unload() -> void; auto main() -> void; auto map() -> void; auto power(bool reset) -> void; //dma.cpp auto dmaEnable() -> bool; auto hdmaEnable() -> bool; auto hdmaActive() -> bool; auto dmaRun() -> void; auto hdmaReset() -> void; auto hdmaSetup() -> void; auto hdmaRun() -> void; //memory.cpp auto idle() -> void override; auto read(n24 address) -> n8 override; auto write(n24 address, n8 data) -> void override; auto wait(n24 address) const -> u32; auto readDisassembler(n24 address) -> n8 override; //io.cpp auto readRAM(n24 address, n8 data) -> n8; auto readAPU(n24 address, n8 data) -> n8; auto readCPU(n24 address, n8 data) -> n8; auto readDMA(n24 address, n8 data) -> n8; auto writeRAM(n24 address, n8 data) -> void; auto writeAPU(n24 address, n8 data) -> void; auto writeCPU(n24 address, n8 data) -> void; auto writeDMA(n24 address, n8 data) -> void; //timing.cpp auto dmaCounter() const -> u32; auto joypadCounter() const -> u32; auto step(u32 clocks) -> void; auto scanline() -> void; auto aluEdge() -> void; auto dmaEdge() -> void; auto joypadEdge() -> void; //irq.cpp auto nmiPoll() -> void; auto irqPoll() -> void; auto nmitimenUpdate(n8 data) -> void; auto rdnmi() -> bool; auto timeup() -> bool; auto nmiTest() -> bool; auto irqTest() -> bool; auto lastCycle() -> void override; //serialization.cpp auto serialize(serializer&) -> void; n8 wram[128_KiB]; vector coprocessors; vector peripherals; private: struct Counter { u32 cpu = 0; u32 dma = 0; } counter; struct Status { u32 clockCount = 0; bool irqLock = 0; u32 dramRefreshPosition = 0; u32 dramRefresh = 0; //0 = not refreshed; 1 = refresh active; 2 = refresh inactive u32 hdmaSetupPosition = 0; bool hdmaSetupTriggered = 0; u32 hdmaPosition = 0; bool hdmaTriggered = 0; boolean nmiValid; boolean nmiLine; boolean nmiTransition; boolean nmiPending; boolean nmiHold; boolean irqValid; boolean irqLine; boolean irqTransition; boolean irqPending; boolean irqHold; bool resetPending = 0; bool interruptPending = 0; bool dmaActive = 0; bool dmaPending = 0; bool hdmaPending = 0; bool hdmaMode = 0; //0 = init, 1 = run u32 autoJoypadCounter = 33; //state machine; 4224 / 128 = 33 (inactive) } status; struct IO { //$2181-$2183 n17 wramAddress; //$4200 boolean hirqEnable; boolean virqEnable; boolean irqEnable; boolean nmiEnable; boolean autoJoypadPoll; //$4201 n8 pio = 0xff; //$4202-$4203 n8 wrmpya = 0xff; n8 wrmpyb = 0xff; //$4204-$4206 n16 wrdiva = 0xffff; n8 wrdivb = 0xff; //$4207-$420a n12 htime = 0x1ff + 1 << 2; n9 vtime = 0x1ff; //$420d u32 romSpeed = 8; //$4210 n4 version = 2; //allowed values: 1, 2 //$4214-$4217 n16 rddiv; n16 rdmpy; //$4218-$421f n16 joy1; n16 joy2; n16 joy3; n16 joy4; } io; struct ALU { u32 mpyctr = 0; u32 divctr = 0; u32 shift = 0; } alu; struct Channel { //dma.cpp auto step(u32 clocks) -> void; auto edge() -> void; auto validA(n24 address) -> bool; auto readA(n24 address) -> n8; auto readB(n8 address, bool valid) -> n8; auto writeA(n24 address, n8 data) -> void; auto writeB(n8 address, n8 data, bool valid) -> void; auto transfer(n24 address, n2 index) -> void; auto dmaRun() -> void; auto hdmaActive() -> bool; auto hdmaFinished() -> bool; auto hdmaReset() -> void; auto hdmaSetup() -> void; auto hdmaReload() -> void; auto hdmaTransfer() -> void; auto hdmaAdvance() -> void; //$420b n1 dmaEnable; //$420c n1 hdmaEnable; //$43x0 n3 transferMode = 7; n1 fixedTransfer = 1; n1 reverseTransfer = 1; n1 unused = 1; n1 indirect = 1; n1 direction = 1; //$43x1 n8 targetAddress = 0xff; //$43x2-$43x3 n16 sourceAddress = 0xffff; //$43x4 n8 sourceBank = 0xff; //$43x5-$43x6 union { n16 transferSize; n16 indirectAddress; }; //$43x7 n8 indirectBank = 0xff; //$43x8-$43x9 n16 hdmaAddress = 0xffff; //$43xa n8 lineCounter = 0xff; //$43xb/$43xf n8 unknown = 0xff; //internal state n1 hdmaCompleted; n1 hdmaDoTransfer; //unserialized: n8 id; maybe next; Channel() : transferSize(0xffff) {} } channels[8]; }; extern CPU cpu; ares-126/ares/sfc/cpu/debugger.cpp000066400000000000000000000035071415063341600171120ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.wram = parent->append("CPU WRAM"); memory.wram->setSize(128_KiB); memory.wram->setRead([&](u32 address) -> u8 { return cpu.wram[n17(address)]; }); memory.wram->setWrite([&](u32 address, u8 data) -> void { cpu.wram[n17(address)] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(24); tracer.interrupt = parent->append("Interrupt", "CPU"); tracer.dma = parent->append("DMA", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.r.pc.d)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext(), { "V:", pad(cpu.vcounter(), 3L), " ", "H:", pad(cpu.hcounter(), 4L), " I:", (u32)cpu.field() }); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } auto CPU::Debugger::dma(n8 channelID, n24 addressA, n8 addressB, n8 data) -> void { if(tracer.dma->enabled()) { string output; output.append("Channel ", channelID, ": "); if(cpu.channels[channelID].direction == 0) { output.append("$", hex(addressA, 6L), " "); output.append("($", hex(data, 2L), ") => "); output.append("$21", hex(addressB, 2L)); } else { output.append("$21", hex(addressB, 2L), " "); output.append("($", hex(data, 2L), ") => "); output.append("$", hex(addressA, 6L)); } output.append(" V:", pad(cpu.vcounter(), 3L)); output.append(" H:", pad(cpu.hcounter(), 4L)); output.append(" I:", (u32)cpu.field()); tracer.dma->notify(output); } } ares-126/ares/sfc/cpu/dma.cpp000066400000000000000000000117411415063341600160660ustar00rootroot00000000000000inline auto CPU::dmaEnable() -> bool { for(auto& channel : channels) if(channel.dmaEnable) return true; return false; } inline auto CPU::hdmaEnable() -> bool { for(auto& channel : channels) if(channel.hdmaEnable) return true; return false; } inline auto CPU::hdmaActive() -> bool { for(auto& channel : channels) if(channel.hdmaActive()) return true; return false; } auto CPU::dmaRun() -> void { counter.dma += 8; step(8); dmaEdge(); for(auto& channel : channels) channel.dmaRun(); status.irqLock = true; } auto CPU::hdmaReset() -> void { for(auto& channel : channels) channel.hdmaReset(); } auto CPU::hdmaSetup() -> void { counter.dma += 8; step(8); for(auto& channel : channels) channel.hdmaSetup(); status.irqLock = true; } auto CPU::hdmaRun() -> void { counter.dma += 8; step(8); for(auto& channel : channels) channel.hdmaTransfer(); for(auto& channel : channels) channel.hdmaAdvance(); status.irqLock = true; } // inline auto CPU::Channel::step(u32 clocks) -> void { cpu.counter.dma += clocks; cpu.step(clocks); } inline auto CPU::Channel::edge() -> void { cpu.dmaEdge(); } inline auto CPU::Channel::validA(n24 address) -> bool { //A-bus cannot access the B-bus or CPU I/O registers if((address & 0x40ff00) == 0x2100) return false; //00-3f,80-bf:2100-21ff if((address & 0x40fe00) == 0x4000) return false; //00-3f,80-bf:4000-41ff if((address & 0x40ffe0) == 0x4200) return false; //00-3f,80-bf:4200-421f if((address & 0x40ff80) == 0x4300) return false; //00-3f,80-bf:4300-437f return true; } inline auto CPU::Channel::readA(n24 address) -> n8 { step(4); cpu.r.mdr = validA(address) ? bus.read(address, cpu.r.mdr) : (n8)0x00; step(4); return cpu.r.mdr; } inline auto CPU::Channel::readB(n8 address, bool valid) -> n8 { step(4); cpu.r.mdr = valid ? bus.read(0x2100 | address, cpu.r.mdr) : (n8)0x00; step(4); return cpu.r.mdr; } inline auto CPU::Channel::writeA(n24 address, n8 data) -> void { if(validA(address)) bus.write(address, data); } inline auto CPU::Channel::writeB(n8 address, n8 data, bool valid) -> void { if(valid) bus.write(0x2100 | address, data); } inline auto CPU::Channel::transfer(n24 addressA, n2 index) -> void { n8 addressB = targetAddress; switch(transferMode) { case 1: case 5: addressB += index.bit(0); break; case 3: case 7: addressB += index.bit(1); break; case 4: addressB += index; break; } //transfers from WRAM to WRAM are invalid bool valid = addressB != 0x80 || ((addressA & 0xfe0000) != 0x7e0000 && (addressA & 0x40e000) != 0x0000); cpu.r.mar = addressA; if(direction == 0) { auto data = readA(addressA); writeB(addressB, data, valid); if(valid) cpu.debugger.dma(id, addressA, addressB, data); } else { auto data = readB(addressB, valid); writeA(addressA, data); if(valid) cpu.debugger.dma(id, addressA, addressB, data); } } inline auto CPU::Channel::dmaRun() -> void { if(!dmaEnable) return; step(8); edge(); n2 index = 0; do { transfer(sourceBank << 16 | sourceAddress, index++); if(!fixedTransfer) !reverseTransfer ? sourceAddress++ : sourceAddress--; edge(); } while(dmaEnable && --transferSize); dmaEnable = false; } inline auto CPU::Channel::hdmaActive() -> bool { return hdmaEnable && !hdmaCompleted; } inline auto CPU::Channel::hdmaFinished() -> bool { auto channel = next; while(channel) { if(channel->hdmaActive()) return false; channel = channel->next; } return true; } inline auto CPU::Channel::hdmaReset() -> void { hdmaCompleted = false; hdmaDoTransfer = false; } inline auto CPU::Channel::hdmaSetup() -> void { hdmaDoTransfer = true; //note: needs hardware verification if(!hdmaEnable) return; dmaEnable = false; //HDMA will stop active DMA mid-transfer hdmaAddress = sourceAddress; lineCounter = 0; hdmaReload(); } inline auto CPU::Channel::hdmaReload() -> void { auto data = readA(cpu.r.mar = sourceBank << 16 | hdmaAddress); if((n7)lineCounter == 0) { lineCounter = data; hdmaAddress++; hdmaCompleted = lineCounter == 0; hdmaDoTransfer = !hdmaCompleted; if(indirect) { data = readA(cpu.r.mar = sourceBank << 16 | hdmaAddress++); indirectAddress = data << 8 | 0x00; //todo: should 0x00 be indirectAddress >> 8 ? if(hdmaCompleted && hdmaFinished()) return; data = readA(cpu.r.mar = sourceBank << 16 | hdmaAddress++); indirectAddress = data << 8 | indirectAddress >> 8; } } } inline auto CPU::Channel::hdmaTransfer() -> void { if(!hdmaActive()) return; dmaEnable = false; //HDMA will stop active DMA mid-transfer if(!hdmaDoTransfer) return; static constexpr u32 lengths[8] = {1, 2, 2, 4, 4, 4, 2, 4}; for(n2 index : range(lengths[transferMode])) { n24 address = !indirect ? sourceBank << 16 | hdmaAddress++ : indirectBank << 16 | indirectAddress++; transfer(address, index); } } inline auto CPU::Channel::hdmaAdvance() -> void { if(!hdmaActive()) return; lineCounter--; hdmaDoTransfer = lineCounter.bit(7); hdmaReload(); } ares-126/ares/sfc/cpu/io.cpp000066400000000000000000000153341415063341600157360ustar00rootroot00000000000000auto CPU::readRAM(n24 address, n8 data) -> n8 { return wram[address]; } auto CPU::readAPU(n24 address, n8 data) -> n8 { synchronize(smp); return smp.portRead(address.bit(0,1)); } auto CPU::readCPU(n24 address, n8 data) -> n8 { switch((n16)address) { case 0x2180: //WMDATA return bus.read(0x7e0000 | io.wramAddress++, data); case 0x4016: //JOYSER0 data.bit(0,1) = controllerPort1.data(); return data; case 0x4017: //JOYSER1 data.bit(0,1) = controllerPort2.data(); data.bit(2,4) = 0b111; //these pins are connected to GND return data; case 0x4210: //RDNMI data.bit(0,3) = io.version; data.bit(7) = rdnmi(); return data; case 0x4211: //TIMEUP data.bit(7) = timeup(); return data; case 0x4212: //HVBJOY data.bit(0) = io.autoJoypadPoll && status.autoJoypadCounter < 33; data.bit(6) = hcounter() <= 2 || hcounter() >= 1096; //Hblank data.bit(7) = vcounter() >= ppu.vdisp(); //Vblank return data; case 0x4213: return io.pio; //RDIO case 0x4214: return io.rddiv.byte(0); //RDDIVL case 0x4215: return io.rddiv.byte(1); //RDDIVH case 0x4216: return io.rdmpy.byte(0); //RDMPYL case 0x4217: return io.rdmpy.byte(1); //RDMPYH case 0x4218: return io.joy1.byte(0); //JOY1L case 0x4219: return io.joy1.byte(1); //JOY1H case 0x421a: return io.joy2.byte(0); //JOY2L case 0x421b: return io.joy2.byte(1); //JOY2H case 0x421c: return io.joy3.byte(0); //JOY3L case 0x421d: return io.joy3.byte(1); //JOY3H case 0x421e: return io.joy4.byte(0); //JOY4L case 0x421f: return io.joy4.byte(1); //JOY4H } return data; } auto CPU::readDMA(n24 address, n8 data) -> n8 { auto& channel = this->channels[address.bit(4,6)]; switch(address & 0xff8f) { case 0x4300: //DMAPx data.bit(0,2) = channel.transferMode; data.bit(3) = channel.fixedTransfer; data.bit(4) = channel.reverseTransfer; data.bit(5) = channel.unused; data.bit(6) = channel.indirect; data.bit(7) = channel.direction; return data; case 0x4301: return channel.targetAddress; //BBADx case 0x4302: return channel.sourceAddress.byte(0); //A1TxL case 0x4303: return channel.sourceAddress.byte(1); //A1TxH case 0x4304: return channel.sourceBank; //A1Bx case 0x4305: return channel.transferSize.byte(0); //DASxL case 0x4306: return channel.transferSize.byte(1); //DASxH case 0x4307: return channel.indirectBank; //DASBx case 0x4308: return channel.hdmaAddress.byte(0); //A2AxL case 0x4309: return channel.hdmaAddress.byte(1); //A2AxH case 0x430a: return channel.lineCounter; //NTRLx case 0x430b: return channel.unknown; //???x case 0x430f: return channel.unknown; //???x (mirror of $43xb) } return data; } auto CPU::writeRAM(n24 address, n8 data) -> void { wram[address] = data; } auto CPU::writeAPU(n24 address, n8 data) -> void { synchronize(smp); return smp.portWrite(address.bit(0,1), data); } auto CPU::writeCPU(n24 address, n8 data) -> void { switch((n16)address) { case 0x2180: //WMDATA return bus.write(0x7e0000 | io.wramAddress++, data); case 0x2181: //WMADDL io.wramAddress.bit(0,7) = data.bit(0,7); return; case 0x2182: //WMADDM io.wramAddress.bit(8,15) = data.bit(0,7); return; case 0x2183: //WMADDH io.wramAddress.bit(16) = data.bit(0); return; case 0x4016: //JOYSER0 //bit 0 is shared between JOYSER0 and JOYSER1: //strobing $4016.d0 affects both controller port latches. //$4017 bit 0 writes are ignored. controllerPort1.latch(data.bit(0)); controllerPort2.latch(data.bit(0)); return; case 0x4200: //NMITIMEN io.autoJoypadPoll = data.bit(0); if(!io.autoJoypadPoll) status.autoJoypadCounter = 33; //disable polling nmitimenUpdate(data); return; case 0x4201: //WRIO if(io.pio.bit(7) && !data.bit(7)) ppu.latchCounters(); io.pio = data; return; case 0x4202: //WRMPYA io.wrmpya = data; return; case 0x4203: //WRMPYB io.rdmpy = 0; if(alu.mpyctr || alu.divctr) return; io.wrmpyb = data; io.rddiv = io.wrmpyb << 8 | io.wrmpya; alu.mpyctr = 8; //perform multiplication over the next eight cycles alu.shift = io.wrmpyb; return; case 0x4204: //WRDIVL io.wrdiva.byte(0) = data; return; case 0x4205: //WRDIVH io.wrdiva.byte(1) = data; return; case 0x4206: //WRDIVB io.rdmpy = io.wrdiva; if(alu.mpyctr || alu.divctr) return; io.wrdivb = data; alu.divctr = 16; //perform division over the next sixteen cycles alu.shift = io.wrdivb << 16; return; case 0x4207: //HTIMEL io.htime = (io.htime >> 2) - 1; io.htime.bit(0,7) = data.bit(0,7); io.htime = (io.htime + 1) << 2; irqPoll(); return; case 0x4208: //HTIMEH io.htime = (io.htime >> 2) - 1; io.htime.bit(8) = data.bit(0); io.htime = (io.htime + 1) << 2; irqPoll(); return; case 0x4209: //VTIMEL io.vtime.bit(0,7) = data.bit(0,7); irqPoll(); return; case 0x420a: //VTIMEH io.vtime.bit(8) = data.bit(0); irqPoll(); return; case 0x420b: //DMAEN for(u32 n : range(8)) channels[n].dmaEnable = data.bit(n); if(data) status.dmaPending = true; return; case 0x420c: //HDMAEN for(u32 n : range(8)) channels[n].hdmaEnable = data.bit(n); return; case 0x420d: //MEMSEL io.romSpeed = data.bit(0) ? 6 : 8; return; } } auto CPU::writeDMA(n24 address, n8 data) -> void { auto& channel = this->channels[address.bit(4,6)]; switch(address & 0xff8f) { case 0x4300: //DMAPx channel.transferMode = data.bit(0,2); channel.fixedTransfer = data.bit(3); channel.reverseTransfer = data.bit(4); channel.unused = data.bit(5); channel.indirect = data.bit(6); channel.direction = data.bit(7); return; case 0x4301: //BBADx channel.targetAddress = data; return; case 0x4302: //A1TxL channel.sourceAddress.byte(0) = data; return; case 0x4303: //A1TxH channel.sourceAddress.byte(1) = data; return; case 0x4304: //A1Bx channel.sourceBank = data; return; case 0x4305: //DASxL channel.transferSize.byte(0) = data; return; case 0x4306: //DASxH channel.transferSize.byte(1) = data; return; case 0x4307: //DASBx channel.indirectBank = data; return; case 0x4308: //A2AxL channel.hdmaAddress.byte(0) = data; return; case 0x4309: //A2AxH channel.hdmaAddress.byte(1) = data; return; case 0x430a: //NTRLx channel.lineCounter = data; return; case 0x430b: //???x channel.unknown = data; return; case 0x430f: //???x (mirror of $43xb) channel.unknown = data; return; } } ares-126/ares/sfc/cpu/irq.cpp000066400000000000000000000051111415063341600161120ustar00rootroot00000000000000//nmiPoll() and irqPoll() are called once every four clock cycles; //as NMI steps by scanlines (divisible by 4) and IRQ by PPU 4-cycle dots. // //ppu.(vh)counter(n) returns the value of said counters n-clocks before current time; //it is used to emulate hardware communication delay between opcode and interrupt units. alwaysinline auto CPU::nmiPoll() -> void { //NMI hold if(status.nmiHold.lower() && io.nmiEnable) { status.nmiTransition = 1; } //NMI test if(status.nmiValid.flip(vcounter(2) >= ppu.vdisp())) { if(status.nmiLine = status.nmiValid) status.nmiHold = 1; //hold /NMI for four cycles } } alwaysinline auto CPU::irqPoll() -> void { //IRQ hold status.irqHold = 0; if(status.irqLine && io.irqEnable) { status.irqTransition = 1; } //IRQ test if(status.irqValid.raise(io.irqEnable && (!io.virqEnable || vcounter(10) == io.vtime) && (!io.hirqEnable || hcounter(10) == io.htime) && (vcounter(6) || hcounter(6)) //IRQs cannot trigger on last dot of fields )) status.irqLine = status.irqHold = 1; //hold /IRQ for four cycles } auto CPU::nmitimenUpdate(n8 data) -> void { io.hirqEnable = data.bit(4); io.virqEnable = data.bit(5); io.irqEnable = io.hirqEnable || io.virqEnable; if(io.virqEnable && !io.hirqEnable && status.irqLine) { status.irqTransition = 1; } else if(!io.irqEnable) { status.irqLine = 0; status.irqTransition = 0; } if(io.nmiEnable.raise(data.bit(7)) && status.nmiLine) { status.nmiTransition = 1; } status.irqLock = 1; } auto CPU::rdnmi() -> bool { bool result = status.nmiLine; if(!status.nmiHold) { status.nmiLine = 0; } return result; } auto CPU::timeup() -> bool { bool result = status.irqLine; if(!status.irqHold) { status.irqLine = 0; status.irqTransition = 0; } return result; } alwaysinline auto CPU::nmiTest() -> bool { if(!status.nmiTransition) return 0; status.nmiTransition = 0; r.wai = 0; return 1; } alwaysinline auto CPU::irqTest() -> bool { if(!status.irqTransition && !r.irq) return 0; status.irqTransition = 0; r.wai = 0; return !r.p.i; } //used to test for NMI/IRQ, which can trigger on the edge of every opcode. //test one cycle early to simulate two-stage pipeline of the 65816 CPU. // //status.irqLock is used to simulate hardware delay before interrupts can //trigger during certain events (immediately after DMA, writes to $4200, etc) alwaysinline auto CPU::lastCycle() -> void { if(!status.irqLock) { if(nmiTest()) status.nmiPending = 1, status.interruptPending = 1; if(irqTest()) status.irqPending = 1, status.interruptPending = 1; } } ares-126/ares/sfc/cpu/memory.cpp000066400000000000000000000021121415063341600166250ustar00rootroot00000000000000auto CPU::idle() -> void { status.clockCount = 6; dmaEdge(); step(6); aluEdge(); } auto CPU::read(n24 address) -> n8 { status.clockCount = wait(address); dmaEdge(); r.mar = address; step(status.clockCount - 4); auto data = bus.read(address, r.mdr); step(4); aluEdge(); //$00-3f,80-bf:4000-43ff reads are internal to CPU, and do not update the MDR if((address & 0x40fc00) != 0x4000) r.mdr = data; return data; } auto CPU::write(n24 address, n8 data) -> void { aluEdge(); status.clockCount = wait(address); dmaEdge(); r.mar = address; step(status.clockCount); bus.write(address, r.mdr = data); } alwaysinline auto CPU::wait(n24 address) const -> u32 { //00-3f,80-bf:8000-ffff; 40-7f,c0-ff:0000-ffff if(address & 0x408000) return address & 0x800000 ? io.romSpeed : 8; //00-3f,80-bf:0000-1fff,6000-7fff if(address + 0x6000 & 0x4000) return 8; //00-3f,80-bf:2000-3fff,4200-5fff if(address - 0x4000 & 0x7e00) return 6; //00-3f,80-bf:4000-41ff return 12; } auto CPU::readDisassembler(n24 address) -> n8 { return bus.read(address, r.mdr); } ares-126/ares/sfc/cpu/serialization.cpp000066400000000000000000000033511415063341600202000ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { WDC65816::serialize(s); Thread::serialize(s); PPUcounter::serialize(s); s(wram); s(counter.cpu); s(counter.dma); s(status.clockCount); s(status.irqLock); s(status.dramRefreshPosition); s(status.dramRefresh); s(status.hdmaSetupPosition); s(status.hdmaSetupTriggered); s(status.hdmaPosition); s(status.hdmaTriggered); s(status.nmiValid); s(status.nmiLine); s(status.nmiTransition); s(status.nmiPending); s(status.nmiHold); s(status.irqValid); s(status.irqLine); s(status.irqTransition); s(status.irqPending); s(status.irqHold); s(status.resetPending); s(status.interruptPending); s(status.dmaActive); s(status.dmaPending); s(status.hdmaPending); s(status.hdmaMode); s(status.autoJoypadCounter); s(io.wramAddress); s(io.hirqEnable); s(io.virqEnable); s(io.irqEnable); s(io.nmiEnable); s(io.autoJoypadPoll); s(io.pio); s(io.wrmpya); s(io.wrmpyb); s(io.wrdiva); s(io.wrdivb); s(io.htime); s(io.vtime); s(io.romSpeed); s(io.version); s(io.rddiv); s(io.rdmpy); s(io.joy1); s(io.joy2); s(io.joy3); s(io.joy4); s(alu.mpyctr); s(alu.divctr); s(alu.shift); for(auto& channel : channels) { s(channel.dmaEnable); s(channel.hdmaEnable); s(channel.direction); s(channel.indirect); s(channel.unused); s(channel.reverseTransfer); s(channel.fixedTransfer); s(channel.transferMode); s(channel.targetAddress); s(channel.sourceAddress); s(channel.sourceBank); s(channel.transferSize); s(channel.indirectBank); s(channel.hdmaAddress); s(channel.lineCounter); s(channel.unknown); s(channel.hdmaCompleted); s(channel.hdmaDoTransfer); } } ares-126/ares/sfc/cpu/timing.cpp000066400000000000000000000122511415063341600166110ustar00rootroot00000000000000//DMA clock divider inline auto CPU::dmaCounter() const -> u32 { return counter.cpu & 7; } //joypad auto-poll clock divider inline auto CPU::joypadCounter() const -> u32 { return counter.cpu & 127; } auto CPU::step(u32 clocks) -> void { status.irqLock = 0; u32 ticks = clocks >> 1; while(ticks--) { counter.cpu += 2; tick(); if(hcounter() & 2) nmiPoll(), irqPoll(); if(joypadCounter() == 0) joypadEdge(); } if(!status.dramRefresh && hcounter() >= status.dramRefreshPosition) { //note: pattern should technically be 5-3, 5-3, 5-3, 5-3, 5-3 per logic analyzer //result averages out the same as no coprocessor polls refresh() at > frequency()/2 status.dramRefresh = 1; step(6); status.dramRefresh = 2; step(2); aluEdge(); status.dramRefresh = 1; step(6); status.dramRefresh = 2; step(2); aluEdge(); status.dramRefresh = 1; step(6); status.dramRefresh = 2; step(2); aluEdge(); status.dramRefresh = 1; step(6); status.dramRefresh = 2; step(2); aluEdge(); status.dramRefresh = 1; step(6); status.dramRefresh = 2; step(2); aluEdge(); } if(!status.hdmaSetupTriggered && hcounter() >= status.hdmaSetupPosition) { status.hdmaSetupTriggered = 1; hdmaReset(); if(hdmaEnable()) { status.hdmaPending = 1; status.hdmaMode = 0; } } if(!status.hdmaTriggered && hcounter() >= status.hdmaPosition) { status.hdmaTriggered = 1; if(hdmaActive()) { status.hdmaPending = 1; status.hdmaMode = 1; } } Thread::step(clocks); for(auto peripheral : peripherals) Thread::synchronize(*peripheral); for(auto coprocessor : coprocessors) Thread::synchronize(*coprocessor); } //called by ppu.tick() when Hcounter=0 auto CPU::scanline() -> void { //forcefully sync S-CPU to other processors, in case chips are not communicating Thread::synchronize(smp, ppu); for(auto coprocessor : coprocessors) Thread::synchronize(*coprocessor); if(vcounter() == 0) { //HDMA setup triggers once every frame status.hdmaSetupPosition = (io.version == 1 ? 12 + 8 - dmaCounter() : 12 + dmaCounter()); status.hdmaSetupTriggered = 0; status.autoJoypadCounter = 33; //33 = inactive } //DRAM refresh occurs once every scanline if(io.version == 2) status.dramRefreshPosition = 530 + 8 - dmaCounter(); status.dramRefresh = 0; //HDMA triggers once every visible scanline if(vcounter() < ppu.vdisp()) { status.hdmaPosition = 1104; status.hdmaTriggered = 0; } } alwaysinline auto CPU::aluEdge() -> void { if(alu.mpyctr) { alu.mpyctr--; if(io.rddiv & 1) io.rdmpy += alu.shift; io.rddiv >>= 1; alu.shift <<= 1; } if(alu.divctr) { alu.divctr--; io.rddiv <<= 1; alu.shift >>= 1; if(io.rdmpy >= alu.shift) { io.rdmpy -= alu.shift; io.rddiv |= 1; } } } alwaysinline auto CPU::dmaEdge() -> void { //H/DMA pending && DMA inactive? //.. Run one full CPU cycle //.. HDMA pending && HDMA enabled ? DMA sync + HDMA run //.. DMA pending && DMA enabled ? DMA sync + DMA run //.... HDMA during DMA && HDMA enabled ? DMA sync + HDMA run //.. Run one bus CPU cycle //.. CPU sync if(status.dmaActive) { if(status.hdmaPending) { status.hdmaPending = 0; if(hdmaEnable()) { if(!dmaEnable()) { step(counter.dma = 8 - dmaCounter()); } status.hdmaMode == 0 ? hdmaSetup() : hdmaRun(); if(!dmaEnable()) { step(status.clockCount - counter.dma % status.clockCount); status.dmaActive = 0; } } } if(status.dmaPending) { status.dmaPending = 0; if(dmaEnable()) { step(counter.dma = 8 - dmaCounter()); dmaRun(); step(status.clockCount - counter.dma % status.clockCount); status.dmaActive = 0; } } } if(!status.dmaActive) { if(status.dmaPending || status.hdmaPending) { status.dmaActive = 1; } } } //called every 128 clocks; see CPU::step() alwaysinline auto CPU::joypadEdge() -> void { //it is not yet confirmed if polling can be stopped early and/or (re)started later if(!io.autoJoypadPoll) return; if(vcounter() == ppu.vdisp() && hcounter() >= 130 && hcounter() <= 256) { //begin new polling sequence status.autoJoypadCounter = 0; } //stop after polling has been completed for this frame if(status.autoJoypadCounter >= 33) return; if(status.autoJoypadCounter == 0) { //latch controller states on the first polling cycle controllerPort1.latch(1); controllerPort2.latch(1); } if(status.autoJoypadCounter == 1) { //release latch and begin reading on the second cycle controllerPort1.latch(0); controllerPort2.latch(0); //shift registers are cleared to zero at start of auto-joypad polling io.joy1 = 0; io.joy2 = 0; io.joy3 = 0; io.joy4 = 0; } if(status.autoJoypadCounter >= 2 && !(status.autoJoypadCounter & 1)) { //sixteen bits are shifted into joy{1-4}, one bit per 256 clocks n2 port0 = controllerPort1.data(); n2 port1 = controllerPort2.data(); io.joy1 = io.joy1 << 1 | port0.bit(0); io.joy2 = io.joy2 << 1 | port1.bit(0); io.joy3 = io.joy3 << 1 | port0.bit(1); io.joy4 = io.joy4 << 1 | port1.bit(1); } status.autoJoypadCounter++; } ares-126/ares/sfc/dsp/000077500000000000000000000000001415063341600146145ustar00rootroot00000000000000ares-126/ares/sfc/dsp/brr.cpp000066400000000000000000000030511415063341600161040ustar00rootroot00000000000000auto DSP::brrDecode(Voice& v) -> void { //brr._byte = apuram[v.brrAddress + v.brrOffset] cached from previous clock cycle s32 nybbles = brr._byte << 8 | apuram[n16(v.brrAddress + v.brrOffset + 1)]; const s32 filter = brr._header.bit(2,3); const s32 scale = brr._header.bit(4,7); //decode four samples for(u32 n : range(4)) { //bits 12-15 = current nybble; sign extend, then shift right to 4-bit precision //result: s = 4-bit sign-extended sample value s32 s = (i16)nybbles >> 12; nybbles <<= 4; //slide nybble so that on next loop iteration, bits 12-15 = current nybble if(scale <= 12) { s <<= scale; s >>= 1; } else { s &= ~0x7ff; } //apply IIR filter (2 is the most commonly used) s32 offset = v.bufferOffset; if(--offset < 0) offset = 11; const s32 p1 = v.buffer[offset]; if(--offset < 0) offset = 11; const s32 p2 = v.buffer[offset] >> 1; switch(filter) { case 0: break; case 1: //s += p1 * 0.46875 s += p1 >> 1; s += (-p1) >> 5; break; case 2: //s += p1 * 0.953125 - p2 * 0.46875 s += p1; s -= p2; s += p2 >> 4; s += (p1 * -3) >> 6; break; case 3: //s += p1 * 0.8984375 - p2 * 0.40625 s += p1; s -= p2; s += (p1 * -13) >> 7; s += (p2 * 3) >> 4; break; } //adjust and write sample (mirror the written sample for wrapping) s = sclamp<16>(s); s = (i16)(s << 1); v.buffer[v.bufferOffset] = s; if(++v.bufferOffset >= 12) v.bufferOffset = 0; } } ares-126/ares/sfc/dsp/counter.cpp000066400000000000000000000021041415063341600167740ustar00rootroot00000000000000//number of samples per counter event //all rates are evenly divisible by counter_range (0x7800, 30720, or 2048 * 5 * 3) //note that rate[0] is a special case, which never triggers const n16 DSP::CounterRate[32] = { 0, 2048, 1536, 1280, 1024, 768, 640, 512, 384, 320, 256, 192, 160, 128, 96, 80, 64, 48, 40, 32, 24, 20, 16, 12, 10, 8, 6, 5, 4, 3, 2, 1, }; //counter offset from zero //counters do not appear to be aligned at zero for all rates const n16 DSP::CounterOffset[32] = { 0, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 536, 0, 1040, 0, 0, }; inline auto DSP::counterTick() -> void { if(!clock.counter) clock.counter = 2048 * 5 * 3; //30720 (0x7800) clock.counter--; } //return true if counter event should trigger inline auto DSP::counterPoll(u32 rate) -> bool { if(rate == 0) return false; return (clock.counter + CounterOffset[rate]) % CounterRate[rate] == 0; } ares-126/ares/sfc/dsp/debugger.cpp000066400000000000000000000005331415063341600171050ustar00rootroot00000000000000auto DSP::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("APU RAM"); memory.ram->setSize(64_KiB); memory.ram->setRead([&](u32 address) -> u8 { return dsp.apuram[n16(address)]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { dsp.apuram[n16(address)] = data; }); } ares-126/ares/sfc/dsp/dsp.cpp000066400000000000000000000062611415063341600161130ustar00rootroot00000000000000#include namespace ares::SuperFamicom { DSP dsp; #include "memory.cpp" #include "gaussian.cpp" #include "counter.cpp" #include "envelope.cpp" #include "brr.cpp" #include "misc.cpp" #include "voice.cpp" #include "echo.cpp" #include "debugger.cpp" #include "serialization.cpp" auto DSP::load(Node::Object parent) -> void { node = parent->append("DSP"); stream = node->append("DSP"); stream->setChannels(2); stream->setFrequency(system.apuFrequency() / 768.0); debugger.load(node); } auto DSP::unload() -> void { debugger = {}; node->remove(stream); stream.reset(); node.reset(); } auto DSP::main() -> void { voice5(voice[0]); voice2(voice[1]); tick(); voice6(voice[0]); voice3(voice[1]); tick(); voice7(voice[0]); voice4(voice[1]); voice1(voice[3]); tick(); voice8(voice[0]); voice5(voice[1]); voice2(voice[2]); tick(); voice9(voice[0]); voice6(voice[1]); voice3(voice[2]); tick(); voice7(voice[1]); voice4(voice[2]); voice1(voice[4]); tick(); voice8(voice[1]); voice5(voice[2]); voice2(voice[3]); tick(); voice9(voice[1]); voice6(voice[2]); voice3(voice[3]); tick(); voice7(voice[2]); voice4(voice[3]); voice1(voice[5]); tick(); voice8(voice[2]); voice5(voice[3]); voice2(voice[4]); tick(); voice9(voice[2]); voice6(voice[3]); voice3(voice[4]); tick(); voice7(voice[3]); voice4(voice[4]); voice1(voice[6]); tick(); voice8(voice[3]); voice5(voice[4]); voice2(voice[5]); tick(); voice9(voice[3]); voice6(voice[4]); voice3(voice[5]); tick(); voice7(voice[4]); voice4(voice[5]); voice1(voice[7]); tick(); voice8(voice[4]); voice5(voice[5]); voice2(voice[6]); tick(); voice9(voice[4]); voice6(voice[5]); voice3(voice[6]); tick(); voice1(voice[0]); voice7(voice[5]); voice4(voice[6]); tick(); voice8(voice[5]); voice5(voice[6]); voice2(voice[7]); tick(); voice9(voice[5]); voice6(voice[6]); voice3(voice[7]); tick(); voice1(voice[1]); voice7(voice[6]); voice4(voice[7]); tick(); voice8(voice[6]); voice5(voice[7]); voice2(voice[0]); tick(); voice3a(voice[0]); voice9(voice[6]); voice6(voice[7]); echo22(); tick(); voice7(voice[7]); echo23(); tick(); voice8(voice[7]); echo24(); tick(); voice3b(voice[0]); voice9(voice[7]); echo25(); tick(); echo26(); tick(); misc27(); echo27(); tick(); misc28(); echo28(); tick(); misc29(); echo29(); tick(); misc30(); voice3c(voice[0]); echo30(); tick(); voice4(voice[0]); voice1(voice[2]); tick(); } auto DSP::tick() -> void { Thread::step(3 * 8); Thread::synchronize(smp); } auto DSP::sample(i16 left, i16 right) -> void { stream->frame(left / 32768.0, right / 32768.0); } auto DSP::power(bool reset) -> void { Thread::create(system.apuFrequency(), {&DSP::main, this}); if(!reset) { random.array({apuram, sizeof(apuram)}); random.array({registers, sizeof(registers)}); } master = {}; echo = {}; noise = {}; brr = {}; latch = {}; for(u32 n : range(8)) { voice[n] = {}; voice[n].index = n << 4; } gaussianConstructTable(); } } ares-126/ares/sfc/dsp/dsp.hpp000066400000000000000000000104121415063341600161110ustar00rootroot00000000000000//Sony CXD1222Q-1 struct DSP : Thread { Node::Object node; Node::Audio::Stream stream; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; struct Memory { Node::Debugger::Memory ram; } memory; } debugger; n8 apuram[64_KiB]; n8 registers[128]; auto mute() const -> bool { return master.mute; } //dsp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto power(bool reset) -> void; //memory.cpp auto read(n7 address) -> n8; auto write(n7 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct Envelope { enum : u32 { Release, Attack, Decay, Sustain, };}; struct Clock { n15 counter; n1 sample = 1; } clock; struct Master { n1 reset = 1; n1 mute = 1; i8 volume[2]; i17 output[2]; } master; struct Echo { i8 feedback; i8 volume[2]; i8 fir[8]; i16 history[2][8]; n8 bank; n4 delay; n1 readonly = 1; i17 input[2]; i17 output[2]; n8 _bank; n1 _readonly; n16 _address; n16 _offset; //offset from ESA into echo buffer n16 _length; //number of bytes that echo offset will stop at n3 _historyOffset; } echo; struct Noise { n5 frequency; n15 lfsr = 0x4000; } noise; struct BRR { n8 bank; n8 _bank; n8 _source; n16 _address; n16 _nextAddress; n8 _header; n8 _byte; } brr; struct Latch { n8 adsr0; n8 envx; n8 outx; n15 pitch; i16 output; } latch; struct Voice { //serialization.cpp auto serialize(serializer&) -> void; n7 index; //voice channel register index: 0x00 for voice 0, 0x10 for voice 1, etc i8 volume[2]; n14 pitch; n8 source; n8 adsr0; n8 adsr1; n8 gain; n8 envx; n1 keyon; n1 keyoff; n1 modulate; //0 = normal, 1 = modulate by previous voice pitch n1 noise; //0 = BRR, 1 = noise n1 echo; //0 = direct, 1 = echo n1 end; //0 = keyed on, 1 = BRR end bit encountered i16 buffer[12]; //12 decoded samples (mirrored for wrapping) n4 bufferOffset; //place in buffer where next samples will be decoded n16 gaussianOffset; //relative fractional position in sample (0x1000 = 1.0) n16 brrAddress; //address of current BRR block n4 brrOffset = 1; //current decoding offset in BRR block (1-8) n3 keyonDelay; //KON delay/current setup phase n2 envelopeMode; n11 envelope; //current envelope level (0-2047) //internal latches i32 _envelope; //used by GAIN mode 7, very obscure quirk n1 _keylatch; n1 _keyon; n1 _keyoff; n1 _modulate; n1 _noise; n1 _echo; n1 _end; n1 _looped; } voice[8]; //gaussian.cpp i16 gaussianTable[512]; auto gaussianConstructTable() -> void; auto gaussianInterpolate(const Voice& v) -> s32; //counter.cpp static const n16 CounterRate[32]; static const n16 CounterOffset[32]; auto counterTick() -> void; auto counterPoll(u32 rate) -> bool; //envelope.cpp auto envelopeRun(Voice& v) -> void; //brr.cpp auto brrDecode(Voice& v) -> void; //misc.cpp auto misc27() -> void; auto misc28() -> void; auto misc29() -> void; auto misc30() -> void; //voice.cpp auto voiceOutput(Voice& v, n1 channel) -> void; auto voice1 (Voice& v) -> void; auto voice2 (Voice& v) -> void; auto voice3 (Voice& v) -> void; auto voice3a(Voice& v) -> void; auto voice3b(Voice& v) -> void; auto voice3c(Voice& v) -> void; auto voice4 (Voice& v) -> void; auto voice5 (Voice& v) -> void; auto voice6 (Voice& v) -> void; auto voice7 (Voice& v) -> void; auto voice8 (Voice& v) -> void; auto voice9 (Voice& v) -> void; //echo.cpp auto calculateFIR(n1 channel, s32 index) -> s32; auto echoOutput(n1 channel) const -> i16; auto echoRead(n1 channel) -> void; auto echoWrite(n1 channel) -> void; auto echo22() -> void; auto echo23() -> void; auto echo24() -> void; auto echo25() -> void; auto echo26() -> void; auto echo27() -> void; auto echo28() -> void; auto echo29() -> void; auto echo30() -> void; //dsp.cpp auto tick() -> void; auto sample(i16 left, i16 right) -> void; }; extern DSP dsp; ares-126/ares/sfc/dsp/echo.cpp000066400000000000000000000057431415063341600162470ustar00rootroot00000000000000auto DSP::calculateFIR(n1 channel, s32 index) -> s32 { s32 sample = echo.history[channel][(n3)(echo._historyOffset + index + 1)]; return (sample * echo.fir[index]) >> 6; } auto DSP::echoOutput(n1 channel) const -> i16 { i16 masterOutput = master.output[channel] * master.volume[channel] >> 7; i16 echoOutput = echo.input[channel] * echo.volume[channel] >> 7; return sclamp<16>(masterOutput + echoOutput); } auto DSP::echoRead(n1 channel) -> void { n16 address = echo._address + channel * 2; n8 lo = apuram[address++]; n8 hi = apuram[address++]; s32 s = (i16)((hi << 8) + lo); echo.history[channel][echo._historyOffset] = s >> 1; } auto DSP::echoWrite(n1 channel) -> void { if(!echo._readonly) { n16 address = echo._address + channel * 2; auto sample = echo.output[channel]; apuram[address++] = sample.byte(0); apuram[address++] = sample.byte(1); } echo.output[channel] = 0; } auto DSP::echo22() -> void { //history echo._historyOffset++; echo._address = (echo._bank << 8) + echo._offset; echoRead(0); //FIR s32 l = calculateFIR(0, 0); s32 r = calculateFIR(1, 0); echo.input[0] = l; echo.input[1] = r; } auto DSP::echo23() -> void { s32 l = calculateFIR(0, 1) + calculateFIR(0, 2); s32 r = calculateFIR(1, 1) + calculateFIR(1, 2); echo.input[0] += l; echo.input[1] += r; echoRead(1); } auto DSP::echo24() -> void { s32 l = calculateFIR(0, 3) + calculateFIR(0, 4) + calculateFIR(0, 5); s32 r = calculateFIR(1, 3) + calculateFIR(1, 4) + calculateFIR(1, 5); echo.input[0] += l; echo.input[1] += r; } auto DSP::echo25() -> void { s32 l = echo.input[0] + calculateFIR(0, 6); s32 r = echo.input[1] + calculateFIR(1, 6); l = (i16)l; r = (i16)r; l += (i16)calculateFIR(0, 7); r += (i16)calculateFIR(1, 7); echo.input[0] = sclamp<16>(l) & ~1; echo.input[1] = sclamp<16>(r) & ~1; } auto DSP::echo26() -> void { //left output volumes //(save sample for next clock so we can output both together) master.output[0] = echoOutput(0); //echo feedback s32 l = echo.output[0] + i16(echo.input[0] * echo.feedback >> 7); s32 r = echo.output[1] + i16(echo.input[1] * echo.feedback >> 7); echo.output[0] = sclamp<16>(l) & ~1; echo.output[1] = sclamp<16>(r) & ~1; } auto DSP::echo27() -> void { s32 outl = master.output[0]; s32 outr = echoOutput(1); master.output[0] = 0; master.output[1] = 0; //todo: global muting isn't this simple //(turns DAC on and off or something, causing small ~37-sample pulse when first muted) if(master.mute) { outl = 0; outr = 0; } //output sample to DAC sample(outl, outr); } auto DSP::echo28() -> void { echo._readonly = echo.readonly; } auto DSP::echo29() -> void { echo._bank = echo.bank; if(!echo._offset) echo._length = echo.delay << 11; echo._offset += 4; if(echo._offset >= echo._length) echo._offset = 0; //write left echo echoWrite(0); echo._readonly = echo.readonly; } auto DSP::echo30() -> void { //write right echo echoWrite(1); } ares-126/ares/sfc/dsp/envelope.cpp000066400000000000000000000032621415063341600171400ustar00rootroot00000000000000auto DSP::envelopeRun(Voice& v) -> void { s32 envelope = v.envelope; if(v.envelopeMode == Envelope::Release) { //60% envelope -= 0x8; if(envelope < 0) envelope = 0; v.envelope = envelope; return; } s32 rate; s32 envelopeData = v.adsr1; if(latch.adsr0.bit(7)) { //99% ADSR if(v.envelopeMode >= Envelope::Decay) { //99% envelope--; envelope -= envelope >> 8; rate = envelopeData & 0x1f; if(v.envelopeMode == Envelope::Decay) { //1% rate = latch.adsr0.bit(4,6) * 2 + 16; } } else { //env_attack rate = latch.adsr0.bit(0,3) * 2 + 1; envelope += rate < 31 ? 0x20 : 0x400; } } else { //GAIN envelopeData = v.gain; s32 mode = envelopeData >> 5; if(mode < 4) { //direct envelope = envelopeData << 4; rate = 31; } else { rate = envelopeData & 0x1f; if(mode == 4) { //4: linear decrease envelope -= 0x20; } else if(mode < 6) { //5: exponential decrease envelope--; envelope -= envelope >> 8; } else { //6, 7: linear increase envelope += 0x20; if(mode > 6 && (u32)v._envelope >= 0x600) { envelope += 0x8 - 0x20; //7: two-slope linear increase } } } } //sustain level if((envelope >> 8) == (envelopeData >> 5) && v.envelopeMode == Envelope::Decay) { v.envelopeMode = Envelope::Sustain; } v._envelope = envelope; //u32 cast because linear decrease underflowing also triggers this if((u32)envelope > 0x7ff) { envelope = (envelope < 0 ? 0 : 0x7ff); if(v.envelopeMode == Envelope::Attack) v.envelopeMode = Envelope::Decay; } if(counterPoll(rate)) v.envelope = envelope; } ares-126/ares/sfc/dsp/gaussian.cpp000066400000000000000000000030721415063341600171340ustar00rootroot00000000000000auto DSP::gaussianConstructTable() -> void { f64 table[512]; for(u32 n : range(512)) { f64 k = 0.5 + n; f64 s = (sin(Math::Pi * k * 1.280 / 1024)); f64 t = (cos(Math::Pi * k * 2.000 / 1023) - 1) * 0.50; f64 u = (cos(Math::Pi * k * 4.000 / 1023) - 1) * 0.08; f64 r = s * (t + u + 1.0) / k; table[511 - n] = r; } for(u32 phase : range(128)) { f64 sum = 0.0; sum += table[phase + 0]; sum += table[phase + 256]; sum += table[511 - phase]; sum += table[255 - phase]; f64 scale = 2048.0 / sum; gaussianTable[phase + 0] = i16(table[phase + 0] * scale + 0.5); gaussianTable[phase + 256] = i16(table[phase + 256] * scale + 0.5); gaussianTable[511 - phase] = i16(table[511 - phase] * scale + 0.5); gaussianTable[255 - phase] = i16(table[255 - phase] * scale + 0.5); } } auto DSP::gaussianInterpolate(const Voice& v) -> s32 { //make pointers into gaussian table based on fractional position between samples n8 offset = v.gaussianOffset >> 4; const i16* forward = gaussianTable + 255 - offset; const i16* reverse = gaussianTable + offset; //mirror left half of gaussian table offset = (v.bufferOffset + (v.gaussianOffset >> 12)) % 12; s32 output; output = forward[ 0] * v.buffer[offset] >> 11; if(++offset >= 12) offset = 0; output += forward[256] * v.buffer[offset] >> 11; if(++offset >= 12) offset = 0; output += reverse[256] * v.buffer[offset] >> 11; if(++offset >= 12) offset = 0; output = i16(output); output += reverse[ 0] * v.buffer[offset] >> 11; return sclamp<16>(output) & ~1; } ares-126/ares/sfc/dsp/memory.cpp000066400000000000000000000043631415063341600166360ustar00rootroot00000000000000auto DSP::read(n7 address) -> n8 { return registers[address]; } auto DSP::write(n7 address, n8 data) -> void { registers[address] = data; switch(address) { case 0x0c: //MVOLL master.volume[0] = data; break; case 0x1c: //MVOLR master.volume[1] = data; break; case 0x2c: //EVOLL echo.volume[0] = data; break; case 0x3c: //EVOLR echo.volume[1] = data; break; case 0x4c: //KON for(u32 n : range(8)) voice[n].keyon = data.bit(n); for(u32 n : range(8)) voice[n]._keylatch = data.bit(n); break; case 0x5c: //KOFF for(u32 n : range(8)) voice[n].keyoff = data.bit(n); break; case 0x6c: //FLG noise.frequency = data.bit(0,4); echo.readonly = data.bit(5); master.mute = data.bit(6); master.reset = data.bit(7); break; case 0x7c: //ENDX for(u32 n : range(8)) voice[n]._end = 0; registers[0x7c] = 0; //always cleared, regardless of data written break; case 0x0d: //EFB echo.feedback = data; break; case 0x2d: //PMON for(u32 n : range(8)) voice[n].modulate = data.bit(n); voice[0].modulate = 0; //voice 0 does not support modulation break; case 0x3d: //NON for(u32 n : range(8)) voice[n].noise = data.bit(n); break; case 0x4d: //EON for(u32 n : range(8)) voice[n].echo = data.bit(n); break; case 0x5d: //DIR brr.bank = data; break; case 0x6d: //ESA echo.bank = data; break; case 0x7d: //EDL echo.delay = data.bit(0,3); break; } n3 n = address.bit(4,6); switch((n4)address) { case 0x00: //VxVOLL voice[n].volume[0] = data; break; case 0x01: //VxVOLR voice[n].volume[1] = data; break; case 0x02: //VxPITCHL voice[n].pitch.bit(0,7) = data.bit(0,7); break; case 0x03: //VxPITCHH voice[n].pitch.bit(8,13) = data.bit(0,5); break; case 0x04: //VxSRCN voice[n].source = data; break; case 0x05: //VxADSR0 voice[n].adsr0 = data; break; case 0x06: //VxADSR1 voice[n].adsr1 = data; break; case 0x07: //VxGAIN voice[n].gain = data; break; case 0x08: //VxENVX latch.envx = data; break; case 0x09: //VxOUTX latch.outx = data; break; case 0x0f: //FIRx echo.fir[n] = data; break; } } ares-126/ares/sfc/dsp/misc.cpp000066400000000000000000000012651415063341600162570ustar00rootroot00000000000000auto DSP::misc27() -> void { for(auto& v : voice) v._modulate = v.modulate; } auto DSP::misc28() -> void { for(auto& v : voice) v._noise = v.noise, v._echo = v.echo; brr._bank = brr.bank; } auto DSP::misc29() -> void { clock.sample = !clock.sample; if(clock.sample) { //clears KON 63 clocks after it was last read for(auto& v : voice) v._keylatch &= !v._keyon; } } auto DSP::misc30() -> void { if(clock.sample) { for(auto& v : voice) v._keyon = v._keylatch, v._keyoff = v.keyoff; } counterTick(); //noise if(counterPoll(noise.frequency)) { s32 feedback = noise.lfsr << 13 ^ noise.lfsr << 14; noise.lfsr = feedback & 0x4000 ^ noise.lfsr >> 1; } } ares-126/ares/sfc/dsp/serialization.cpp000066400000000000000000000024261415063341600202010ustar00rootroot00000000000000auto DSP::serialize(serializer& s) -> void { Thread::serialize(s); s(apuram); s(registers); s(clock.counter); s(clock.sample); s(master.reset); s(master.mute); s(master.volume); s(master.output); s(echo.feedback); s(echo.volume); s(echo.fir); s(echo.history[0]); s(echo.history[1]); s(echo.bank); s(echo.delay); s(echo.readonly); s(echo.input); s(echo.output); s(echo._bank); s(echo._readonly); s(echo._address); s(echo._offset); s(echo._length); s(echo._historyOffset); s(noise.frequency); s(noise.lfsr); s(brr.bank); s(brr._bank); s(brr._source); s(brr._address); s(brr._nextAddress); s(brr._header); s(brr._byte); s(latch.adsr0); s(latch.envx); s(latch.outx); s(latch.pitch); s(latch.output); for(auto& v : voice) s(v); } auto DSP::Voice::serialize(serializer& s) -> void { s(index); s(volume); s(pitch); s(source); s(adsr0); s(adsr1); s(gain); s(envx); s(keyon); s(keyoff); s(modulate); s(noise); s(echo); s(end); s(buffer); s(bufferOffset); s(gaussianOffset); s(brrAddress); s(brrOffset); s(keyonDelay); s(envelopeMode); s(envelope); s(_envelope); s(_keylatch); s(_keyon); s(_keyoff); s(_modulate); s(_noise); s(_echo); s(_end); s(_looped); } ares-126/ares/sfc/dsp/voice.cpp000066400000000000000000000074011415063341600164270ustar00rootroot00000000000000inline auto DSP::voiceOutput(Voice& v, n1 channel) -> void { //apply left/right volume s32 amp = latch.output * v.volume[channel] >> 7; //add to output total master.output[channel] += amp; master.output[channel] = sclamp<16>(master.output[channel]); //optionally add to echo total if(v._echo) { echo.output[channel] += amp; echo.output[channel] = sclamp<16>(echo.output[channel]); } } auto DSP::voice1(Voice& v) -> void { brr._address = (brr._bank << 8) + (brr._source << 2); brr._source = v.source; } auto DSP::voice2(Voice& v) -> void { //read sample pointer (ignored if not needed) n16 address = brr._address; if(!v.keyonDelay) address += 2; brr._nextAddress.byte(0) = apuram[address++]; brr._nextAddress.byte(1) = apuram[address++]; latch.adsr0 = v.adsr0; //read pitch, spread over two clocks latch.pitch = v.pitch & 0xff; } auto DSP::voice3(Voice& v) -> void { voice3a(v); voice3b(v); voice3c(v); } auto DSP::voice3a(Voice& v) -> void { latch.pitch |= v.pitch & ~0xff; } auto DSP::voice3b(Voice& v) -> void { brr._byte = apuram[n16(v.brrAddress + v.brrOffset)]; brr._header = apuram[n16(v.brrAddress)]; } auto DSP::voice3c(Voice& v) -> void { //pitch modulation using previous voice's output if(v._modulate) { latch.pitch += (latch.output >> 5) * latch.pitch >> 10; } if(v.keyonDelay) { //get ready to start BRR decoding on next sample if(v.keyonDelay == 5) { v.brrAddress = brr._nextAddress; v.brrOffset = 1; v.bufferOffset = 0; brr._header = 0; //header is ignored on this sample } //envelope is never run during KON v.envelope = 0; v._envelope = 0; //disable BRR decoding until last three samples v.gaussianOffset = 0; v.keyonDelay--; if(v.keyonDelay & 3) v.gaussianOffset = 0x4000; //pitch is never added during KON latch.pitch = 0; } //gaussian interpolation s32 output = gaussianInterpolate(v); //noise if(v._noise) { output = (i16)(noise.lfsr << 1); } //apply envelope latch.output = output * v.envelope >> 11 & ~1; v.envx = v.envelope >> 4; //immediate silence due to end of sample or soft reset if(master.reset || brr._header.bit(0,1) == 1) { v.envelopeMode = Envelope::Release; v.envelope = 0; } if(clock.sample) { //KOFF if(v._keyoff) { v.envelopeMode = Envelope::Release; } //KON if(v._keyon) { v.keyonDelay = 5; v.envelopeMode = Envelope::Attack; } } //run envelope for next sample if(!v.keyonDelay) envelopeRun(v); } auto DSP::voice4(Voice& v) -> void { //decode BRR v._looped = 0; if(v.gaussianOffset >= 0x4000) { brrDecode(v); v.brrOffset += 2; if(v.brrOffset >= 9) { //start decoding next BRR block v.brrAddress = n16(v.brrAddress + 9); if(brr._header.bit(0)) { v.brrAddress = brr._nextAddress; v._looped = 1; } v.brrOffset = 1; } } //apply pitch v.gaussianOffset = (v.gaussianOffset & 0x3fff) + latch.pitch; //keep from getting too far ahead (when using pitch modulation) if(v.gaussianOffset > 0x7fff) v.gaussianOffset = 0x7fff; //output left voiceOutput(v, 0); } auto DSP::voice5(Voice& v) -> void { //output right voiceOutput(v, 1); //ENDX, OUTX, ENVX won't update if you wrote to them 1-2 clocks earlier v._end |= v._looped; //clear bit in ENDX if KON just began if(v.keyonDelay == 5) v._end = 0; } auto DSP::voice6(Voice& v) -> void { latch.outx = latch.output >> 8; } auto DSP::voice7(Voice& v) -> void { for(u32 n : range(8)) registers[0x7c].bit(n) = voice[n]._end; latch.envx = v.envx; } auto DSP::voice8(Voice& v) -> void { registers[v.index | 0x09] = latch.outx; } auto DSP::voice9(Voice& v) -> void { registers[v.index | 0x08] = latch.envx; } ares-126/ares/sfc/expansion/000077500000000000000000000000001415063341600160325ustar00rootroot00000000000000ares-126/ares/sfc/expansion/21fx/000077500000000000000000000000001415063341600166125ustar00rootroot00000000000000ares-126/ares/sfc/expansion/21fx/21fx.cpp000066400000000000000000000072341415063341600201040ustar00rootroot00000000000000S21FX::S21FX(Node::Port parent) { node = parent->append("21fx"); Thread::create(10'000'000, {&S21FX::main, this}); resetVector.byte(0) = bus.read(0xfffc, 0x00); resetVector.byte(1) = bus.read(0xfffd, 0x00); bus.map({&S21FX::read, this}, {&S21FX::write, this}, "00-3f,80-bf:2184-21ff"); bus.map({&S21FX::read, this}, {&S21FX::write, this}, "00:fffc-fffd"); booted = false; for(auto& byte : ram) byte = 0xdb; //stp ram[0] = 0x6c; //jmp ($fffc) ram[1] = 0xfc; ram[2] = 0xff; if(auto fp = cartridge.pak->read("21fx.rom")) { fp->read({ram, sizeof(ram)}); } //dynamic libraries can only be loaded via filename ... //there's not really much choice but to copy the library to a temporary directory here if(auto fp = cartridge.pak->read("21fx.so")) { if(auto buffer = file::open({Path::temporary(), "21fx.so"}, file::mode::write)) { for(u32 index : range(fp->size())) buffer.write(fp->read()); } } string filename{Path::temporary(), "21fx.so"}; if(link.openAbsolute(filename)) { linkInit = link.sym("fx_init"); linkMain = link.sym("fx_main"); } } S21FX::~S21FX() { scheduler.remove(*this); bus.unmap("00-3f,80-bf:2184-21ff"); bus.unmap("00:fffc-fffd"); //note: this is an awful hack ... //since the bus maps are lambdas, we can't safely restore the original reset vector handler //as such, we install a basic read-only lambda that simply returns the known reset vector //the downside is that if 00:fffc-fffd were anything but ROM; it will now only act as ROM //given that this is the only device that hooks the reset vector like this, //it's not worth the added complexity to support some form of reversible bus mapping hooks u32 vector = resetVector; bus.map([vector](n24 addr, n8) -> n8 { return vector >> addr * 8; }, [](n24, n8) -> void { }, "00:fffc-fffd", 2); if(link.open()) link.close(); linkInit.reset(); linkMain.reset(); } auto S21FX::step(u32 clocks) -> void { Thread::step(clocks); synchronize(cpu); } auto S21FX::main() -> void { if(linkInit) linkInit( {&S21FX::quit, this}, {&S21FX::usleep, this}, {&S21FX::readable, this}, {&S21FX::writable, this}, {&S21FX::read, this}, {&S21FX::write, this} ); if(linkMain) linkMain({}); while(true) scheduler.synchronize(), step(10'000'000); } auto S21FX::read(n24 address, n8 data) -> n8 { address &= 0x40ffff; if(address == 0xfffc) return booted ? resetVector >> 0 : (0x84); if(address == 0xfffd) return booted ? resetVector >> 8 : (booted = true, 0x21); if(address >= 0x2184 && address <= 0x21fd) return ram[address - 0x2184]; if(address == 0x21fe) return !link.open() ? 0 : ( (linkBuffer.size() > 0) << 7 //1 = readable | (snesBuffer.size() < 1024) << 6 //1 = writable | (link.open()) << 5 //1 = connected ); if(address == 0x21ff) { if(linkBuffer.size() > 0) { return linkBuffer.takeLeft(); } } return data; } auto S21FX::write(n24 address, n8 data) -> void { address &= 0x40ffff; if(address == 0x21ff) { if(snesBuffer.size() < 1024) { snesBuffer.append(data); } } } auto S21FX::quit() -> bool { step(1); return false; } auto S21FX::usleep(u32 microseconds) -> void { step(10 * microseconds); } auto S21FX::readable() -> bool { step(1); return snesBuffer.size() > 0; } auto S21FX::writable() -> bool { step(1); return linkBuffer.size() < 1024; } //SNES -> Link auto S21FX::read() -> n8 { step(1); if(snesBuffer.size() > 0) { return snesBuffer.takeLeft(); } return 0x00; } //Link -> SNES auto S21FX::write(n8 data) -> void { step(1); if(linkBuffer.size() < 1024) { linkBuffer.append(data); } } ares-126/ares/sfc/expansion/21fx/21fx.hpp000066400000000000000000000014601415063341600201040ustar00rootroot00000000000000struct S21FX : Expansion { S21FX(Node::Port); ~S21FX(); auto step(u32 clocks) -> void; auto main() -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; private: auto quit() -> bool; auto usleep(u32) -> void; auto readable() -> bool; auto writable() -> bool; auto read() -> n8; auto write(n8) -> void; n1 booted; n16 resetVector; n8 ram[122]; nall::library link; function, //quit function, //usleep function, //readable function, //writable function, //read function //write )> linkInit; function)> linkMain; vector snesBuffer; //SNES -> Link vector linkBuffer; //Link -> SNES }; ares-126/ares/sfc/expansion/expansion.cpp000066400000000000000000000005751415063341600205510ustar00rootroot00000000000000#include namespace ares::SuperFamicom { #include "port.cpp" #include "21fx/21fx.cpp" #include "satellaview/satellaview.cpp" Expansion::Expansion() { if(!handle()) Thread::create(1, {&Expansion::main, this}); cpu.peripherals.append(this); } Expansion::~Expansion() { Thread::destroy(); } auto Expansion::main() -> void { step(1); synchronize(cpu); } } ares-126/ares/sfc/expansion/expansion.hpp000066400000000000000000000003241415063341600205460ustar00rootroot00000000000000struct Expansion : Thread { Node::Peripheral node; Expansion(); virtual ~Expansion(); virtual auto main() -> void; }; #include "port.hpp" #include "satellaview/satellaview.hpp" #include "21fx/21fx.hpp" ares-126/ares/sfc/expansion/port.cpp000066400000000000000000000013271415063341600175250ustar00rootroot00000000000000ExpansionPort expansionPort{"Expansion Port"}; ExpansionPort::ExpansionPort(string name) : name(name) { } auto ExpansionPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Super Famicom"); port->setType("Expansion"); port->setHotSwappable(false); port->setAllocate([&](auto name) { return allocate(name); }); } auto ExpansionPort::unload() -> void { device = {}; port = {}; } auto ExpansionPort::allocate(string name) -> Node::Peripheral { if(name == "Satellaview") device = new Satellaview(port); if(name == "21fx" ) device = new S21FX(port); if(device) return device->node; return {}; } auto ExpansionPort::serialize(serializer& s) -> void { } ares-126/ares/sfc/expansion/port.hpp000066400000000000000000000005101415063341600175230ustar00rootroot00000000000000struct ExpansionPort { Node::Port port; unique_pointer device; ExpansionPort(string name); auto load(Node::Object parent) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto serialize(serializer&) -> void; const string name; }; extern ExpansionPort expansionPort; ares-126/ares/sfc/expansion/satellaview/000077500000000000000000000000001415063341600203525ustar00rootroot00000000000000ares-126/ares/sfc/expansion/satellaview/satellaview.cpp000066400000000000000000000050201415063341600233730ustar00rootroot00000000000000Satellaview::Satellaview(Node::Port parent) { node = parent->append("Satellaview"); bus.map({&Satellaview::read, this}, {&Satellaview::write, this}, "00-3f,80-bf:2188-219f"); regs = {}; } Satellaview::~Satellaview() { bus.unmap("00-3f,80-bf:2188-219f"); } auto Satellaview::read(n24 addr, n8 data) -> n8 { switch(addr &= 0xffff) { case 0x2188: return regs.r2188; case 0x2189: return regs.r2189; case 0x218a: return regs.r218a; case 0x218c: return regs.r218c; case 0x218e: return regs.r218e; case 0x218f: return regs.r218f; case 0x2190: return regs.r2190; case 0x2192: { u32 counter = regs.rtcCounter++; if(regs.rtcCounter >= 18) regs.rtcCounter = 0; if(counter == 0) { time_t rawtime; time(&rawtime); tm* t = localtime(&rawtime); regs.rtcHour = t->tm_hour; regs.rtcMinute = t->tm_min; regs.rtcSecond = t->tm_sec; } switch(counter) { case 0: return 0x00; //??? case 1: return 0x00; //??? case 2: return 0x00; //??? case 3: return 0x00; //??? case 4: return 0x00; //??? case 5: return 0x01; case 6: return 0x01; case 7: return 0x00; case 8: return 0x00; case 9: return 0x00; case 10: return regs.rtcSecond; case 11: return regs.rtcMinute; case 12: return regs.rtcHour; case 13: return 0x00; //??? case 14: return 0x00; //??? case 15: return 0x00; //??? case 16: return 0x00; //??? case 17: return 0x00; //??? } } break; case 0x2193: return regs.r2193 & ~0x0c; case 0x2194: return regs.r2194; case 0x2196: return regs.r2196; case 0x2197: return regs.r2197; case 0x2199: return regs.r2199; } return data; } auto Satellaview::write(n24 addr, n8 data) -> void { switch(addr &= 0xffff) { case 0x2188: { regs.r2188 = data; } break; case 0x2189: { regs.r2189 = data; } break; case 0x218a: { regs.r218a = data; } break; case 0x218b: { regs.r218b = data; } break; case 0x218c: { regs.r218c = data; } break; case 0x218e: { regs.r218e = data; } break; case 0x218f: { regs.r218e >>= 1; regs.r218e = regs.r218f - regs.r218e; regs.r218f >>= 1; } break; case 0x2191: { regs.r2191 = data; regs.rtcCounter = 0; } break; case 0x2192: { regs.r2190 = 0x80; } break; case 0x2193: { regs.r2193 = data; } break; case 0x2194: { regs.r2194 = data; } break; case 0x2197: { regs.r2197 = data; } break; case 0x2199: { regs.r2199 = data; } break; } } ares-126/ares/sfc/expansion/satellaview/satellaview.hpp000066400000000000000000000007401415063341600234040ustar00rootroot00000000000000struct Satellaview : Expansion { Satellaview(Node::Port); ~Satellaview(); auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; private: struct { n8 r2188, r2189, r218a, r218b; n8 r218c, r218d, r218e, r218f; n8 r2190, r2191, r2192, r2193; n8 r2194, r2195, r2196, r2197; n8 r2198, r2199, r219a, r219b; n8 r219c, r219d, r219e, r219f; n8 rtcCounter; n8 rtcHour; n8 rtcMinute; n8 rtcSecond; } regs; }; ares-126/ares/sfc/memory/000077500000000000000000000000001415063341600153365ustar00rootroot00000000000000ares-126/ares/sfc/memory/inline.hpp000066400000000000000000000014351415063341600173300ustar00rootroot00000000000000alwaysinline auto Bus::mirror(u32 address, u32 size) -> u32 { if(size == 0) return 0; u32 base = 0; u32 mask = 1 << 23; while(address >= size) { while(!(address & mask)) mask >>= 1; address -= mask; if(size > mask) { size -= mask; base += mask; } mask >>= 1; } return base + address; } alwaysinline auto Bus::reduce(u32 address, u32 mask) -> u32 { while(mask) { u32 bits = (mask & -mask) - 1; address = (address >> 1 & ~bits) | address & bits; mask = (mask & mask - 1) >> 1; } return address; } alwaysinline auto Bus::read(n24 address, n8 data) -> n8 { return reader[lookup[address]](target[address], data); } alwaysinline auto Bus::write(n24 address, n8 data) -> void { return writer[lookup[address]](target[address], data); } ares-126/ares/sfc/memory/memory.cpp000066400000000000000000000052601415063341600173550ustar00rootroot00000000000000#include namespace ares::SuperFamicom { Bus bus; Bus::~Bus() { if(lookup) delete[] lookup; if(target) delete[] target; } auto Bus::reset() -> void { for(auto id : range(256)) { reader[id].reset(); writer[id].reset(); counter[id] = 0; } if(lookup) delete[] lookup; if(target) delete[] target; lookup = new n8 [16_MiB](); target = new n32[16_MiB](); reader[0] = [](n24, n8 data) -> n8 { return data; }; writer[0] = [](n24, n8) -> void {}; cpu.map(); ppu.map(); } auto Bus::map( const function& read, const function& write, const string& addr, u32 size, u32 base, u32 mask ) -> u32 { u32 id = 1; while(counter[id]) { if(++id >= 256) return print("SFC error: bus map exhausted\n"), 0; } reader[id] = read; writer[id] = write; auto p = addr.split(":", 1L); auto banks = p(0).split(","); auto addrs = p(1).split(","); for(auto& bank : banks) { for(auto& addr : addrs) { auto bankRange = bank.split("-", 1L); auto addrRange = addr.split("-", 1L); u32 bankLo = bankRange(0).hex(); u32 bankHi = bankRange(1, bankRange(0)).hex(); u32 addrLo = addrRange(0).hex(); u32 addrHi = addrRange(1, addrRange(0)).hex(); for(u32 bank = bankLo; bank <= bankHi; bank++) { for(u32 addr = addrLo; addr <= addrHi; addr++) { u32 pid = lookup[bank << 16 | addr]; if(pid && --counter[pid] == 0) { reader[pid].reset(); writer[pid].reset(); } u32 offset = reduce(bank << 16 | addr, mask); if(size) base = mirror(base, size); if(size) offset = base + mirror(offset, size - base); lookup[bank << 16 | addr] = id; target[bank << 16 | addr] = offset; counter[id]++; } } } } return id; } auto Bus::unmap(const string& addr) -> void { auto p = addr.split(":", 1L); auto banks = p(0).split(","); auto addrs = p(1).split(","); for(auto& bank : banks) { for(auto& addr : addrs) { auto bankRange = bank.split("-", 1L); auto addrRange = addr.split("-", 1L); u32 bankLo = bankRange(0).hex(); u32 bankHi = bankRange(1, bankRange(0)).hex(); u32 addrLo = addrRange(0).hex(); u32 addrHi = addrRange(1, addrRange(1)).hex(); for(u32 bank = bankLo; bank <= bankHi; bank++) { for(u32 addr = addrLo; addr <= addrHi; addr++) { u32 pid = lookup[bank << 16 | addr]; if(pid && --counter[pid] == 0) { reader[pid].reset(); writer[pid].reset(); } lookup[bank << 16 | addr] = 0; target[bank << 16 | addr] = 0; } } } } } } ares-126/ares/sfc/memory/memory.hpp000066400000000000000000000024441415063341600173630ustar00rootroot00000000000000struct AbstractMemory { virtual ~AbstractMemory() { reset(); } explicit operator bool() const { return size() > 0; } virtual auto reset() -> void {} virtual auto allocate(u32, n8 = 0xff) -> void {} virtual auto load(shared_pointer fp) -> void {} virtual auto save(shared_pointer fp) -> void {} virtual auto data() -> n8* = 0; virtual auto size() const -> u32 = 0; virtual auto read(n24 address, n8 data = 0) -> n8 = 0; virtual auto write(n24 address, n8 data) -> void = 0; u32 id = 0; }; #include "readable.hpp" #include "writable.hpp" #include "protectable.hpp" struct Bus { //inline.hpp static auto mirror(u32 address, u32 size) -> u32; static auto reduce(u32 address, u32 mask) -> u32; //memory.cpp ~Bus(); //inline.hpp auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; //memory.cpp auto reset() -> void; auto map( const function& read, const function& write, const string& address, u32 size = 0, u32 base = 0, u32 mask = 0 ) -> u32; auto unmap(const string& address) -> void; private: n8* lookup = nullptr; n32* target = nullptr; function reader[256]; function writer[256]; n24 counter[256]; }; extern Bus bus; ares-126/ares/sfc/memory/protectable.hpp000066400000000000000000000023531415063341600203560ustar00rootroot00000000000000struct ProtectableMemory : AbstractMemory { auto reset() -> void override { delete[] self.data; self.data = nullptr; self.size = 0; } auto allocate(u32 size, n8 fill = 0xff) -> void override { delete[] self.data; self.data = new n8[self.size = size]; for(u32 address : range(size)) self.data[address] = fill; } auto load(VFS::File fp) -> void override { if(!self.size) allocate(fp->size()); fp->read({self.data, min(fp->size(), self.size)}); } auto save(VFS::File fp) -> void override { fp->write({self.data, min(fp->size(), self.size)}); } auto data() -> n8* override { return self.data; } auto size() const -> u32 override { return self.size; } auto writable() const -> bool { return self.writable; } auto writable(bool writable) -> void { self.writable = writable; } auto read(n24 address, n8 data = 0) -> n8 override { return self.data[address]; } auto write(n24 address, n8 data) -> void override { if(!self.writable) return; self.data[address] = data; } auto operator[](n24 address) const -> n8 { return self.data[address]; } private: struct { n8* data = nullptr; u32 size = 0; bool writable = false; } self; }; ares-126/ares/sfc/memory/readable.hpp000066400000000000000000000022571415063341600176140ustar00rootroot00000000000000struct ReadableMemory : AbstractMemory { auto reset() -> void override { delete[] self.data; self.data = nullptr; self.size = 0; } auto allocate(u32 size, n8 fill = 0xff) -> void override { delete[] self.data; self.data = new n8[self.size = size]; for(u32 address : range(size)) self.data[address] = fill; } auto load(VFS::File fp) -> void override { if(!self.size) allocate(fp->size()); fp->read({self.data, min(fp->size(), self.size)}); } auto save(VFS::File fp) -> void override { fp->write({self.data, min(fp->size(), self.size)}); } auto data() -> n8* override { return self.data; } auto size() const -> u32 override { return self.size; } auto read(n24 address, n8 data = 0) -> n8 override { return self.data[address]; } auto write(n24 address, n8 data) -> void override { } auto program(n24 address, n8 data) -> void { self.data[address] = data; } auto operator[](n24 address) const -> n8 { return self.data[address]; } auto serialize(serializer& s) -> void { s(array_span{self.data, self.size}); } private: struct { n8* data = nullptr; u32 size = 0; } self; }; ares-126/ares/sfc/memory/writable.hpp000066400000000000000000000021661415063341600176650ustar00rootroot00000000000000struct WritableMemory : AbstractMemory { auto reset() -> void override { delete[] self.data; self.data = nullptr; self.size = 0; } auto allocate(u32 size, n8 fill = 0xff) -> void override { delete[] self.data; self.data = new n8[self.size = size]; for(u32 address : range(size)) self.data[address] = fill; } auto load(VFS::File fp) -> void override { if(!self.size) allocate(fp->size()); fp->read({self.data, min(fp->size(), self.size)}); } auto save(VFS::File fp) -> void override { fp->write({self.data, min(fp->size(), self.size)}); } auto data() -> n8* override { return self.data; } auto size() const -> u32 override { return self.size; } auto read(n24 address, n8 data = 0) -> n8 override { return self.data[address]; } auto write(n24 address, n8 data) -> void override { self.data[address] = data; } auto operator[](n24 address) -> n8& { return self.data[address]; } auto serialize(serializer& s) -> void { s(array_span{self.data, self.size}); } private: struct { n8* data = nullptr; u32 size = 0; } self; }; ares-126/ares/sfc/ppu-performance/000077500000000000000000000000001415063341600171315ustar00rootroot00000000000000ares-126/ares/sfc/ppu-performance/background.cpp000066400000000000000000000132411415063341600217550ustar00rootroot00000000000000auto PPU::Background::render() -> void { if(!io.aboveEnable && !io.belowEnable) return; if(io.mode == Mode::Inactive) return; if(io.mode == Mode::Mode7) return renderMode7(); bool windowAbove[448]; bool windowBelow[448]; self.window.render(window, window.aboveEnable, windowAbove); self.window.render(window, window.belowEnable, windowBelow); bool hires = self.io.bgMode == 5 || self.io.bgMode == 6; bool offsetPerTileMode = self.io.bgMode == 2 || self.io.bgMode == 4 || self.io.bgMode == 6; bool directColorMode = self.dac.io.directColor && id == ID::BG1 && (self.io.bgMode == 3 || self.io.bgMode == 4); u32 colorShift = 3 + io.mode; s32 width = self.width() << hires; u32 tileHeight = 3 + io.tileSize; u32 tileWidth = !hires ? tileHeight : 4; u32 tileMask = 0x0fff >> io.mode; u32 tiledataIndex = io.tiledataAddress >> 3 + io.mode; u32 paletteBase = self.io.bgMode == 0 ? id << 5 : 0; u32 paletteShift = 2 << io.mode; u32 hscroll = io.hoffset; u32 vscroll = io.voffset; u32 hmask = (256 << hires << io.tileSize << !!(io.screenSize & 1)) - 1; u32 vmask = (256 << hires << io.tileSize << !!(io.screenSize & 2)) - 1; u32 y = self.vcounter(); if(hires) { hscroll <<= 1; if(self.io.interlace) y = y << 1 | (self.field() && !io.mosaicEnable); } if(io.mosaicEnable) { y -= self.mosaic.voffset() << (hires && self.io.interlace); } u32 mosaicCounter = 1; u32 mosaicPalette = 0; u32 mosaicPriority = 0; n15 mosaicColor = 0; s32 x1 = 0; s32 x2 = 256; if(self.width() == 352) x1 = -48, x2 = 304; if(self.width() == 448) x1 = -96, x2 = 352; x1 <<= hires; x2 <<= hires; s32 x = x1 - (hscroll & 7); while(x < x2) { u32 hoffset = x + hscroll; u32 voffset = y + vscroll; if(offsetPerTileMode) { u32 validBit = 0x2000 << id; u32 offsetX = x + (hscroll & 7); if(offsetX >= 8) { //first column is exempt u32 hlookup = self.bg3.getTile((offsetX - 8) + (self.bg3.io.hoffset & ~7), self.bg3.io.voffset + 0); if(self.io.bgMode == 4) { if(hlookup & validBit) { if(!(hlookup & 0x8000)) { hoffset = offsetX + (hlookup & ~7); } else { voffset = y + hlookup; } } } else { u32 vlookup = self.bg3.getTile((offsetX - 8) + (self.bg3.io.hoffset & ~7), self.bg3.io.voffset + 8); if(hlookup & validBit) { hoffset = offsetX + (hlookup & ~7); } if(vlookup & validBit) { voffset = y + vlookup; } } } } hoffset &= hmask; voffset &= vmask; u32 tileNumber = getTile(hoffset, voffset); u32 mirrorY = tileNumber & 0x8000 ? 7 : 0; u32 mirrorX = tileNumber & 0x4000 ? 7 : 0; u8 tilePriority = io.priority[bool(tileNumber & 0x2000)]; u32 paletteNumber = tileNumber >> 10 & 7; u32 paletteIndex = paletteBase + (paletteNumber << paletteShift) & 0xff; if(tileWidth == 4 && (bool(hoffset & 8) ^ bool(mirrorX))) tileNumber += 1; if(tileHeight == 4 && (bool(voffset & 8) ^ bool(mirrorY))) tileNumber += 16; tileNumber = (tileNumber & 0x03ff) + tiledataIndex & tileMask; n16 address; address = (tileNumber << colorShift) + (voffset & 7 ^ mirrorY); n64 data; data |= (n64)self.vram[address + 0] << 0; data |= (n64)self.vram[address + 8] << 16; data |= (n64)self.vram[address + 16] << 32; data |= (n64)self.vram[address + 24] << 48; for(u32 tileX = 0; tileX < 8; tileX++, x++) { if(x < x1 || x >= x2) continue; if(--mosaicCounter == 0) { u32 color = 0, shift = mirrorX ? tileX : 7 - tileX; /*if(io.mode >= Mode::BPP2)*/ { color += data >> shift + 0 & 1; color += data >> shift + 7 & 2; } if(io.mode >= Mode::BPP4) { color += data >> shift + 14 & 4; color += data >> shift + 21 & 8; } if(io.mode >= Mode::BPP8) { color += data >> shift + 28 & 16; color += data >> shift + 35 & 32; color += data >> shift + 42 & 64; color += data >> shift + 49 & 128; } mosaicCounter = io.mosaicEnable ? self.mosaic.size << hires : 1; mosaicPalette = color; mosaicPriority = tilePriority; if(directColorMode) { mosaicColor = self.dac.directColor(mosaicPalette, paletteNumber); } else { mosaicColor = self.dac.cgram[paletteIndex + mosaicPalette]; } } if(!mosaicPalette) continue; s32 xp = x + abs(x1); if(!hires) { if(io.aboveEnable && !windowAbove[xp]) self.dac.plotAbove(xp, id, mosaicPriority, mosaicColor); if(io.belowEnable && !windowBelow[xp]) self.dac.plotBelow(xp, id, mosaicPriority, mosaicColor); } else { u32 Xp = xp >> 1; if(xp & 1) { if(io.aboveEnable && !windowAbove[Xp]) self.dac.plotAbove(Xp, id, mosaicPriority, mosaicColor); } else { if(io.belowEnable && !windowBelow[Xp]) self.dac.plotBelow(Xp, id, mosaicPriority, mosaicColor); } } } } } auto PPU::Background::getTile(u32 hoffset, u32 voffset) -> n16 { bool hires = self.io.bgMode == 5 || self.io.bgMode == 6; u32 tileHeight = 3 + io.tileSize; u32 tileWidth = !hires ? tileHeight : 4; u32 screenX = io.screenSize & 1 ? 32 << 5 : 0; u32 screenY = io.screenSize & 2 ? 32 << 5 + (io.screenSize & 1) : 0; u32 tileX = hoffset >> tileWidth; u32 tileY = voffset >> tileHeight; u32 offset = (tileY & 0x1f) << 5 | (tileX & 0x1f); if(tileX & 0x20) offset += screenX; if(tileY & 0x20) offset += screenY; return self.vram[io.screenAddress + offset]; } auto PPU::Background::power() -> void { io = {}; window = {}; } ares-126/ares/sfc/ppu-performance/color.cpp000066400000000000000000000016501415063341600207550ustar00rootroot00000000000000auto PPU::color(n32 color) -> n64 { n32 r = color.bit( 0, 4); n32 g = color.bit( 5, 9); n32 b = color.bit(10,14); n32 l = color.bit(15,18); //luma=0 is not 100% black; but it's much darker than normal linear scaling. //exact effect seems to be analog; requires > 24-bit color depth to represent accurately. f64 L = (1.0 + l) / 16.0 * (l ? 1.0 : 0.25); n64 R = L * image::normalize(r, 5, 16); n64 G = L * image::normalize(g, 5, 16); n64 B = L * image::normalize(b, 5, 16); if(colorEmulation->value()) { static const n8 gammaRamp[32] = { 0x00, 0x01, 0x03, 0x06, 0x0a, 0x0f, 0x15, 0x1c, 0x24, 0x2d, 0x37, 0x42, 0x4e, 0x5b, 0x69, 0x78, 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0, 0xb8, 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, 0xff, }; R = L * gammaRamp[r] * 0x0101; G = L * gammaRamp[g] * 0x0101; B = L * gammaRamp[b] * 0x0101; } return R << 32 | G << 16 | B << 0; } ares-126/ares/sfc/ppu-performance/dac.cpp000066400000000000000000000060711415063341600203700ustar00rootroot00000000000000auto PPU::DAC::prepare() -> void { bool hires = self.io.pseudoHires || self.io.bgMode == 5 || self.io.bgMode == 6; n15 aboveColor = cgram[0]; n15 belowColor = hires ? cgram[0] : fixedColor(); if(self.io.displayDisable) aboveColor = 0, belowColor = 0; for(u32 x : range(self.width())) { above[x] = {PPU::Source::COL, 0, aboveColor}; below[x] = {PPU::Source::COL, 0, belowColor}; } } auto PPU::DAC::render() -> void { self.window.render(window, window.aboveMask, windowAbove); self.window.render(window, window.belowMask, windowBelow); auto vcounter = self.vcounter(); auto output = (n32*)self.screen->pixels().data(); if(!self.state.overscan) vcounter += 8; if(vcounter < 240) { output += vcounter * 2 * 896; if(self.interlace() && self.field()) output += 896; u32 luma = self.io.displayBrightness << 15; if(!self.hires()) { for(u32 x : range(self.width())) { u32 color = luma | pixel(x, above[x], below[x]); *output++ = color; *output++ = color; } } else { for(u32 x : range(self.width())) { *output++ = luma | pixel(x, below[x], above[x]); *output++ = luma | pixel(x, above[x], below[x]); } } } } auto PPU::DAC::pixel(n9 x, Pixel above, Pixel below) const -> n15 { if(!windowAbove[x]) above.color = 0x0000; if(!windowBelow[x]) return above.color; if(!io.colorEnable[above.source]) return above.color; if(!io.blendMode) return blend(above.color, fixedColor(), io.colorHalve && windowAbove[x]); return blend(above.color, below.color, io.colorHalve && windowAbove[x] && below.source != PPU::Source::COL); } auto PPU::DAC::blend(n15 x, n15 y, bool halve) const -> n15 { if(!io.colorMode) { if(!halve) { u32 sum = x + y; u32 carry = (sum - ((x ^ y) & 0x0421)) & 0x8420; return (sum - carry) | (carry - (carry >> 5)); } else { return (x + y - ((x ^ y) & 0x0421)) >> 1; } } else { u32 diff = x - y + 0x8420; u32 borrow = (diff - ((x ^ y) & 0x8420)) & 0x8420; if(!halve) { return (diff - borrow) & (borrow - (borrow >> 5)); } else { return (((diff - borrow) & (borrow - (borrow >> 5))) & 0x7bde) >> 1; } } } inline auto PPU::DAC::plotAbove(n9 x, n8 source, n8 priority, n15 color) -> void { if(priority > above[x].priority) above[x] = {source, priority, color}; } inline auto PPU::DAC::plotBelow(n9 x, n8 source, n8 priority, n15 color) -> void { if(priority > below[x].priority) below[x] = {source, priority, color}; } inline auto PPU::DAC::directColor(n8 palette, n3 paletteGroup) const -> n15 { //palette = -------- BBGGGRRR //group = -------- -----bgr //output = 0BBb00GG Gg0RRRr0 return (palette << 7 & 0x6000) + (paletteGroup << 10 & 0x1000) + (palette << 4 & 0x0380) + (paletteGroup << 5 & 0x0040) + (palette << 2 & 0x001c) + (paletteGroup << 1 & 0x0002); } inline auto PPU::DAC::fixedColor() const -> n15 { return io.colorRed << 0 | io.colorGreen << 5 | io.colorBlue << 10; } auto PPU::DAC::power() -> void { for(auto& color : cgram) color = 0; io = {}; window = {}; } ares-126/ares/sfc/ppu-performance/debugger.cpp000066400000000000000000000115471415063341600214310ustar00rootroot00000000000000auto PPU::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("PPU VRAM"); memory.vram->setSize(self.vram.mask + 1 << 1); memory.vram->setRead([&](u32 address) -> u8 { return self.vram.data[address >> 1 & self.vram.mask].byte(address & 1); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { self.vram.data[address >> 1 & self.vram.mask].byte(address & 1) = data; }); memory.oam = parent->append("PPU OAM"); memory.oam->setSize(512 + 32); memory.oam->setRead([&](u32 address) -> u8 { return self.obj.oam.read(address); }); memory.oam->setWrite([&](u32 address, u8 data) -> void { return self.obj.oam.write(address, data); }); memory.cgram = parent->append("PPU CGRAM"); memory.cgram->setSize(256 << 1); memory.cgram->setRead([&](u32 address) -> u8 { return self.dac.cgram[address >> 1 & 255].byte(address & 1); }); memory.cgram->setWrite([&](u32 address, u8 data) -> void { self.dac.cgram[address >> 1 & 255].byte(address & 1) = data; }); graphics.tiles2bpp = parent->append("2 BPP Tiles"); graphics.tiles2bpp->setSize(512, 512); graphics.tiles2bpp->setCapture([&]() -> vector { vector output; output.resize(512 * 512); for(u32 tileY : range(64)) { for(u32 tileX : range(64)) { n15 address = tileY * 64 + tileX << 3; for(u32 y : range(8)) { n16 d0 = self.vram.data[address + y]; for(u32 x : range(8)) { n2 color; color.bit(0) = d0.bit( 7 - x); color.bit(1) = d0.bit(15 - x); output[(tileY * 8 + y) * 512 + (tileX * 8 + x)] = color * 0x555555; } } } } return output; }); graphics.tiles4bpp = parent->append("4 BPP Tiles"); graphics.tiles4bpp->setSize(512, 256); graphics.tiles4bpp->setCapture([&]() -> vector { vector output; output.resize(512 * 256); for(u32 tileY : range(32)) { for(u32 tileX : range(64)) { n15 address = tileY * 64 + tileX << 4; for(u32 y : range(8)) { n16 d0 = self.vram.data[address + y + 0]; n16 d1 = self.vram.data[address + y + 8]; for(u32 x : range(8)) { n4 color; color.bit(0) = d0.bit( 7 - x); color.bit(1) = d0.bit(15 - x); color.bit(2) = d1.bit( 7 - x); color.bit(3) = d1.bit(15 - x); output[(tileY * 8 + y) * 512 + (tileX * 8 + x)] = color * 0x111111; } } } } return output; }); graphics.tiles8bpp = parent->append("8 BPP Tiles"); graphics.tiles8bpp->setSize(512, 128); graphics.tiles8bpp->setCapture([&]() -> vector { vector output; output.resize(512 * 128); for(u32 tileY : range(16)) { for(u32 tileX : range(64)) { n15 address = tileY * 64 + tileX << 5; for(u32 y : range(8)) { n16 d0 = self.vram.data[address + y + 0]; n16 d1 = self.vram.data[address + y + 8]; n16 d2 = self.vram.data[address + y + 16]; n16 d3 = self.vram.data[address + y + 24]; for(u32 x : range(8)) { n8 color; color.bit(0) = d0.bit( 7 - x); color.bit(1) = d0.bit(15 - x); color.bit(2) = d1.bit( 7 - x); color.bit(3) = d1.bit(15 - x); color.bit(4) = d2.bit( 7 - x); color.bit(5) = d2.bit(15 - x); color.bit(6) = d3.bit( 7 - x); color.bit(7) = d3.bit(15 - x); output[(tileY * 8 + y) * 512 + (tileX * 8 + x)] = color << 16 | color << 8 | color << 0; } } } } return output; }); graphics.tilesMode7 = parent->append("Mode 7 Tiles"); graphics.tilesMode7->setSize(128, 128); graphics.tilesMode7->setCapture([&]() -> vector { vector output; output.resize(128 * 128); for(u32 tileY : range(16)) { for(u32 tileX : range(16)) { n15 address = tileY * 16 + tileX << 6; for(u32 y : range(8)) { for(u32 x : range(8)) { n8 color = self.vram.data[address + y * 8 + x].byte(1); output[(tileY * 8 + y) * 128 + (tileX * 8 + x)] = color << 16 | color << 8 | color << 0; } } } } return output; }); } auto PPU::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.vram); parent->remove(memory.oam); parent->remove(memory.cgram); parent->remove(graphics.tiles2bpp); parent->remove(graphics.tiles4bpp); parent->remove(graphics.tiles8bpp); parent->remove(graphics.tilesMode7); memory.vram.reset(); memory.oam.reset(); memory.cgram.reset(); graphics.tiles2bpp.reset(); graphics.tiles4bpp.reset(); graphics.tiles8bpp.reset(); graphics.tilesMode7.reset(); } ares-126/ares/sfc/ppu-performance/io.cpp000066400000000000000000000417611415063341600202550ustar00rootroot00000000000000auto PPU::latchCounters() -> void { cpu.synchronize(ppu); io.hcounter = cpu.hdot(); io.vcounter = cpu.vcounter(); latch.counters = 1; } alwaysinline auto PPU::addressVRAM() const -> n16 { n16 address = vram.address; switch(vram.mapping) { case 0: return address; case 1: return address.bit( 8,15) << 8 | address.bit(0,4) << 3 | address.bit(5,7); case 2: return address.bit( 9,15) << 9 | address.bit(0,5) << 3 | address.bit(6,8); case 3: return address.bit(10,15) << 10 | address.bit(0,6) << 3 | address.bit(7,9); } unreachable; } alwaysinline auto PPU::readVRAM() -> n16 { if(!io.displayDisable && cpu.vcounter() < vdisp()) return 0x0000; auto address = addressVRAM(); return vram[address]; } alwaysinline auto PPU::writeVRAM(n1 byte, n8 data) -> void { if(!io.displayDisable && cpu.vcounter() < vdisp()) return; auto address = addressVRAM(); vram[address].byte(byte) = data; } alwaysinline auto PPU::readOAM(n10 address) -> n8 { if(!io.displayDisable && cpu.vcounter() < vdisp()) address = 0x0218; return obj.oam.read(address); } alwaysinline auto PPU::writeOAM(n10 address, n8 data) -> void { if(!io.displayDisable && cpu.vcounter() < vdisp()) address = 0x0218; return obj.oam.write(address, data); } alwaysinline auto PPU::readCGRAM(n1 byte, n8 address) -> n8 { if(!io.displayDisable && cpu.vcounter() > 0 && cpu.vcounter() < vdisp() && cpu.hcounter() >= 88 && cpu.hcounter() < 1096 ) address = latch.cgramAddress; return dac.cgram[address].byte(byte); } alwaysinline auto PPU::writeCGRAM(n8 address, n15 data) -> void { if(!io.displayDisable && cpu.vcounter() > 0 && cpu.vcounter() < vdisp() && cpu.hcounter() >= 88 && cpu.hcounter() < 1096 ) address = latch.cgramAddress; dac.cgram[address] = data; } auto PPU::readIO(n24 address, n8 data) -> n8 { cpu.synchronize(ppu); switch((n16)address) { case 0x2104: case 0x2105: case 0x2106: case 0x2108: case 0x2109: case 0x210a: case 0x2114: case 0x2115: case 0x2116: case 0x2118: case 0x2119: case 0x211a: case 0x2124: case 0x2125: case 0x2126: case 0x2128: case 0x2129: case 0x212a: { return ppu1.mdr; } //MPYL case 0x2134: { n24 result = (i16)mode7.a * (i8)(mode7.b >> 8); return ppu1.mdr = result.byte(0); } //MPYM case 0x2135: { n24 result = (i16)mode7.a * (i8)(mode7.b >> 8); return ppu1.mdr = result.byte(1); } //MYPH case 0x2136: { n24 result = (i16)mode7.a * (i8)(mode7.b >> 8); return ppu1.mdr = result.byte(2); } //SLHV case 0x2137: { if(cpu.pio().bit(7)) latchCounters(); return data; //CPU MDR } //OAMDATAREAD case 0x2138: { ppu1.mdr = readOAM(io.oamAddress++); obj.setFirstSprite(); return ppu1.mdr; } //VMDATALREAD case 0x2139: { ppu1.mdr = latch.vram.byte(0); if(vram.mode == 0) { latch.vram = readVRAM(); vram.address += vram.increment; } return ppu1.mdr; } //VMDATAHREAD case 0x213a: { ppu1.mdr = latch.vram.byte(1); if(vram.mode == 1) { latch.vram = readVRAM(); vram.address += vram.increment; } return ppu1.mdr; } //CGDATAREAD case 0x213b: { if(io.cgramAddressLatch++ == 0) { ppu2.mdr.bit(0,7) = readCGRAM(0, io.cgramAddress); } else { ppu2.mdr.bit(0,6) = readCGRAM(1, io.cgramAddress++); } return ppu2.mdr; } //OPHCT case 0x213c: { if(latch.hcounter++ == 0) { ppu2.mdr.bit(0,7) = io.hcounter.bit(0,7); } else { ppu2.mdr.bit(0) = io.hcounter.bit(8); } return ppu2.mdr; } //OPVCT case 0x213d: { if(latch.vcounter++ == 0) { ppu2.mdr.bit(0,7) = io.vcounter.bit(0,7); } else { ppu2.mdr.bit(0) = io.vcounter.bit(8); } return ppu2.mdr; } //STAT77 case 0x213e: { ppu1.mdr.bit(0,3) = ppu1.version; ppu1.mdr.bit(5) = 0; ppu1.mdr.bit(6) = obj.io.rangeOver; ppu1.mdr.bit(7) = obj.io.timeOver; return ppu1.mdr; } //STAT78 case 0x213f: { latch.hcounter = 0; latch.vcounter = 0; ppu2.mdr.bit(0,3) = ppu2.version; ppu2.mdr.bit(4) = Region::PAL(); //0 = NTSC, 1 = PAL if(!cpu.pio().bit(7)) { ppu2.mdr.bit(6) = 1; } else { ppu2.mdr.bit(6) = latch.counters; latch.counters = 0; } ppu2.mdr.bit(7) = cpu.field(); return ppu2.mdr; } } return data; } auto PPU::writeIO(n24 address, n8 data) -> void { cpu.synchronize(ppu); switch((n16)address) { //INIDISP case 0x2100: { if(io.displayDisable && cpu.vcounter() == vdisp()) obj.addressReset(); io.displayBrightness = data.bit(0,3); io.displayDisable = data.bit(7); return; } //OBSEL case 0x2101: { obj.io.tiledataAddress = data.bit(0,2) << 13; obj.io.nameselect = data.bit(3,4); obj.io.baseSize = data.bit(5,7); return; } //OAMADDL case 0x2102: { io.oamBaseAddress.bit(1,8) = data.bit(0,7); obj.addressReset(); return; } //OAMADDH case 0x2103: { io.oamBaseAddress.bit(9) = data.bit(0); io.oamPriority = data.bit(7); obj.addressReset(); return; } //OAMDATA case 0x2104: { n1 latchBit = io.oamAddress.bit(0); n10 address = io.oamAddress++; if(latchBit == 0) latch.oam = data; if(address.bit(9)) { writeOAM(address, data); } else if(latchBit == 1) { writeOAM((address & ~1) + 0, latch.oam); writeOAM((address & ~1) + 1, data); } obj.setFirstSprite(); return; } //BGMODE case 0x2105: { io.bgMode = data.bit(0,2); io.bgPriority = data.bit(3); bg1.io.tileSize = data.bit(4); bg2.io.tileSize = data.bit(5); bg3.io.tileSize = data.bit(6); bg4.io.tileSize = data.bit(7); updateVideoMode(); return; } //MOSAIC case 0x2106: { bool mosaicEnable = mosaic.enable(); bg1.io.mosaicEnable = data.bit(0); bg2.io.mosaicEnable = data.bit(1); bg3.io.mosaicEnable = data.bit(2); bg4.io.mosaicEnable = data.bit(3); mosaic.size = data.bit(4,7) + 1; if(!mosaicEnable && mosaic.enable()) { //mosaic vcounter is reloaded when mosaic becomes enabled mosaic.vcounter = mosaic.size + 1; } return; } //BG1SC case 0x2107: { bg1.io.screenSize = data.bit(0,1); bg1.io.screenAddress = data.bit(2,7) << 10; return; } //BG2SC case 0x2108: { bg2.io.screenSize = data.bit(0,1); bg2.io.screenAddress = data.bit(2,7) << 10; return; } //BG3SC case 0x2109: { bg3.io.screenSize = data.bit(0,1); bg3.io.screenAddress = data.bit(2,7) << 10; return; } //BG4SC case 0x210a: { bg4.io.screenSize = data.bit(0,1); bg4.io.screenAddress = data.bit(2,7) << 10; return; } //BG12NBA case 0x210b: { bg1.io.tiledataAddress = data.bit(0,3) << 12; bg2.io.tiledataAddress = data.bit(4,7) << 12; return; } //BG34NBA case 0x210c: { bg3.io.tiledataAddress = data.bit(0,3) << 12; bg4.io.tiledataAddress = data.bit(4,7) << 12; return; } //BG1HOFS case 0x210d: { mode7.hoffset = data << 8 | latch.mode7; latch.mode7 = data; bg1.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG1VOFS case 0x210e: { mode7.voffset = data << 8 | latch.mode7; latch.mode7 = data; bg1.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //BG2HOFS case 0x210f: { bg2.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG2VOFS case 0x2110: { bg2.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //BG3HOFS case 0x2111: { bg3.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG3VOFS case 0x2112: { bg3.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //BG4HOFS case 0x2113: { bg4.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG4VOFS case 0x2114: { bg4.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //VMAIN case 0x2115: { static constexpr u32 size[4] = {1, 32, 128, 128}; vram.increment = size[data.bit(0,1)]; vram.mapping = data.bit(2,3); vram.mode = data.bit(7); return; } //VMADDL case 0x2116: { vram.address.bit(0,7) = data; latch.vram = readVRAM(); return; } //VHADDH case 0x2117: { vram.address.bit(8,15) = data; latch.vram = readVRAM(); return; } //VMDATAL case 0x2118: { writeVRAM(0, data); if(vram.mode == 0) vram.address += vram.increment; return; } //VMDATAH case 0x2119: { writeVRAM(1, data); if(vram.mode == 1) vram.address += vram.increment; return; } //M7SEL case 0x211a: { mode7.hflip = data.bit(0); mode7.vflip = data.bit(1); mode7.repeat = data.bit(6,7); return; } //M7A case 0x211b: { mode7.a = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7B case 0x211c: { mode7.b = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7C case 0x211d: { mode7.c = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7D case 0x211e: { mode7.d = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7X case 0x211f: { mode7.hcenter = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7Y case 0x2120: { mode7.vcenter = data << 8 | latch.mode7; latch.mode7 = data; return; } //CGADD case 0x2121: { io.cgramAddress = data; io.cgramAddressLatch = 0; return; } //CGDATA case 0x2122: { if(io.cgramAddressLatch++ == 0) { latch.cgram = data; } else { writeCGRAM(io.cgramAddress++, data.bit(0,6) << 8 | latch.cgram); } return; } //W12SEL case 0x2123: { bg1.window.oneInvert = data.bit(0); bg1.window.oneEnable = data.bit(1); bg1.window.twoInvert = data.bit(2); bg1.window.twoEnable = data.bit(3); bg2.window.oneInvert = data.bit(4); bg2.window.oneEnable = data.bit(5); bg2.window.twoInvert = data.bit(6); bg2.window.twoEnable = data.bit(7); return; } //W34SEL case 0x2124: { bg3.window.oneInvert = data.bit(0); bg3.window.oneEnable = data.bit(1); bg3.window.twoInvert = data.bit(2); bg3.window.twoEnable = data.bit(3); bg4.window.oneInvert = data.bit(4); bg4.window.oneEnable = data.bit(5); bg4.window.twoInvert = data.bit(6); bg4.window.twoEnable = data.bit(7); return; } //WOBJSEL case 0x2125: { obj.window.oneInvert = data.bit(0); obj.window.oneEnable = data.bit(1); obj.window.twoInvert = data.bit(2); obj.window.twoEnable = data.bit(3); dac.window.oneInvert = data.bit(4); dac.window.oneEnable = data.bit(5); dac.window.twoInvert = data.bit(6); dac.window.twoEnable = data.bit(7); return; } //WH0 case 0x2126: { window.io.oneLeft = data; return; } //WH1 case 0x2127: { window.io.oneRight = data; return; } //WH2 case 0x2128: { window.io.twoLeft = data; return; } //WH3 case 0x2129: { window.io.twoRight = data; return; } //WBGLOG case 0x212a: { bg1.window.mask = data.bit(0,1); bg2.window.mask = data.bit(2,3); bg3.window.mask = data.bit(4,5); bg4.window.mask = data.bit(6,7); return; } //WOBJLOG case 0x212b: { obj.window.mask = data.bit(0,1); dac.window.mask = data.bit(2,3); return; } //TM case 0x212c: { bg1.io.aboveEnable = data.bit(0); bg2.io.aboveEnable = data.bit(1); bg3.io.aboveEnable = data.bit(2); bg4.io.aboveEnable = data.bit(3); obj.io.aboveEnable = data.bit(4); return; } //TS case 0x212d: { bg1.io.belowEnable = data.bit(0); bg2.io.belowEnable = data.bit(1); bg3.io.belowEnable = data.bit(2); bg4.io.belowEnable = data.bit(3); obj.io.belowEnable = data.bit(4); return; } //TMW case 0x212e: { bg1.window.aboveEnable = data.bit(0); bg2.window.aboveEnable = data.bit(1); bg3.window.aboveEnable = data.bit(2); bg4.window.aboveEnable = data.bit(3); obj.window.aboveEnable = data.bit(4); return; } //TSW case 0x212f: { bg1.window.belowEnable = data.bit(0); bg2.window.belowEnable = data.bit(1); bg3.window.belowEnable = data.bit(2); bg4.window.belowEnable = data.bit(3); obj.window.belowEnable = data.bit(4); return; } //CGWSEL case 0x2130: { dac.io.directColor = data.bit(0); dac.io.blendMode = data.bit(1); dac.window.belowMask = data.bit(4,5); dac.window.aboveMask = data.bit(6,7); return; } //CGADDSUB case 0x2131: { dac.io.colorEnable[Source::BG1 ] = data.bit(0); dac.io.colorEnable[Source::BG2 ] = data.bit(1); dac.io.colorEnable[Source::BG3 ] = data.bit(2); dac.io.colorEnable[Source::BG4 ] = data.bit(3); dac.io.colorEnable[Source::OBJ1] = 0; dac.io.colorEnable[Source::OBJ2] = data.bit(4); dac.io.colorEnable[Source::COL ] = data.bit(5); dac.io.colorHalve = data.bit(6); dac.io.colorMode = data.bit(7); return; } //COLDATA case 0x2132: { if(data.bit(5)) dac.io.colorRed = data.bit(0,4); if(data.bit(6)) dac.io.colorGreen = data.bit(0,4); if(data.bit(7)) dac.io.colorBlue = data.bit(0,4); return; } //SETINI case 0x2133: { io.interlace = data.bit(0); obj.io.interlace = data.bit(1); io.overscan = data.bit(2); io.pseudoHires = data.bit(3); io.extbg = data.bit(6); updateVideoMode(); return; } } } auto PPU::updateVideoMode() -> void { state.vdisp = !io.overscan ? 225 : 240; switch(io.bgMode) { case 0: bg1.io.mode = Background::Mode::BPP2; bg2.io.mode = Background::Mode::BPP2; bg3.io.mode = Background::Mode::BPP2; bg4.io.mode = Background::Mode::BPP2; memory::assign(bg1.io.priority, 8, 11); memory::assign(bg2.io.priority, 7, 10); memory::assign(bg3.io.priority, 2, 5); memory::assign(bg4.io.priority, 1, 4); memory::assign(obj.io.priority, 3, 6, 9, 12); break; case 1: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::BPP4; bg3.io.mode = Background::Mode::BPP2; bg4.io.mode = Background::Mode::Inactive; if(io.bgPriority) { memory::assign(bg1.io.priority, 5, 8); memory::assign(bg2.io.priority, 4, 7); memory::assign(bg3.io.priority, 1, 10); memory::assign(obj.io.priority, 2, 3, 6, 9); } else { memory::assign(bg1.io.priority, 6, 9); memory::assign(bg2.io.priority, 5, 8); memory::assign(bg3.io.priority, 1, 3); memory::assign(obj.io.priority, 2, 4, 7, 10); } break; case 2: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::BPP4; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 3: bg1.io.mode = Background::Mode::BPP8; bg2.io.mode = Background::Mode::BPP4; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 4: bg1.io.mode = Background::Mode::BPP8; bg2.io.mode = Background::Mode::BPP2; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 5: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::BPP2; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 6: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::Inactive; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 2, 5); memory::assign(obj.io.priority, 1, 3, 4, 6); break; case 7: if(!io.extbg) { bg1.io.mode = Background::Mode::Mode7; bg2.io.mode = Background::Mode::Inactive; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 2); memory::assign(obj.io.priority, 1, 3, 4, 5); } else { bg1.io.mode = Background::Mode::Mode7; bg2.io.mode = Background::Mode::Mode7; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 7); } break; } } ares-126/ares/sfc/ppu-performance/mode7.cpp000066400000000000000000000050031415063341600206460ustar00rootroot00000000000000auto PPU::Background::renderMode7() -> void { s32 Y = self.vcounter(); if(io.mosaicEnable) Y -= self.mosaic.voffset(); //BG2 vertical mosaic uses BG1 mosaic enable s32 y = !self.mode7.vflip ? Y : 255 - Y; s32 a = (i16)self.mode7.a; s32 b = (i16)self.mode7.b; s32 c = (i16)self.mode7.c; s32 d = (i16)self.mode7.d; s32 hcenter = (i13)self.mode7.hcenter; s32 vcenter = (i13)self.mode7.vcenter; s32 hoffset = (i13)self.mode7.hoffset; s32 voffset = (i13)self.mode7.voffset; u32 mosaicCounter = 1; u32 mosaicPalette = 0; n8 mosaicPriority = 0; n15 mosaicColor = 0; auto clip = [](s32 n) -> s32 { return n & 0x2000 ? (n | ~1023) : (n & 1023); }; s32 originX = (a * clip(hoffset - hcenter) & ~63) + (b * clip(voffset - vcenter) & ~63) + (b * y & ~63) + (hcenter << 8); s32 originY = (c * clip(hoffset - hcenter) & ~63) + (d * clip(voffset - vcenter) & ~63) + (d * y & ~63) + (vcenter << 8); bool windowAbove[448]; bool windowBelow[448]; self.window.render(window, window.aboveEnable, windowAbove); self.window.render(window, window.belowEnable, windowBelow); s32 x1 = 0; s32 x2 = 255; if(self.width() == 352) x1 = -48, x2 = 303; if(self.width() == 448) x1 = -96, x2 = 351; for(s32 X = x1; X <= x2; X++) { s32 x = !self.mode7.hflip ? X : x2 - X; s32 pixelX = originX + a * x >> 8; s32 pixelY = originY + c * x >> 8; n7 tileX = pixelX >> 3; n7 tileY = pixelY >> 3; bool outOfBounds = (pixelX | pixelY) & ~1023; n16 tileAddress = tileY << 7 | tileX; n16 paletteAddress = (n3)pixelY << 3 | (n3)pixelX; n8 tile = self.mode7.repeat == 3 && outOfBounds ? 0 : self.vram[tileAddress] >> 0; n8 palette = self.mode7.repeat == 2 && outOfBounds ? 0 : self.vram[tile << 6 | paletteAddress] >> 8; n8 priority; if(id == ID::BG1) { priority = io.priority[0]; } else { priority = io.priority[palette.bit(7)]; palette.bit(7) = 0; } if(--mosaicCounter == 0) { mosaicCounter = io.mosaicEnable ? (u32)self.mosaic.size : 1; mosaicPalette = palette; mosaicPriority = priority; if(self.dac.io.directColor && id == ID::BG1) { mosaicColor = self.dac.directColor(palette, 0); } else { mosaicColor = self.dac.cgram[palette]; } } if(!mosaicPalette) continue; u32 Xp = X + abs(x1); if(io.aboveEnable && !windowAbove[Xp]) self.dac.plotAbove(Xp, id, mosaicPriority, mosaicColor); if(io.belowEnable && !windowBelow[Xp]) self.dac.plotBelow(Xp, id, mosaicPriority, mosaicColor); } } ares-126/ares/sfc/ppu-performance/mosaic.cpp000066400000000000000000000011051415063341600211050ustar00rootroot00000000000000inline auto PPU::Mosaic::enable() const -> bool { if(self.bg1.io.mosaicEnable) return true; if(self.bg2.io.mosaicEnable) return true; if(self.bg3.io.mosaicEnable) return true; if(self.bg4.io.mosaicEnable) return true; return false; } inline auto PPU::Mosaic::voffset() const -> u32 { return size - vcounter; } auto PPU::Mosaic::scanline() -> void { if(self.vcounter() == 1) { vcounter = enable() ? size + 1 : 0; } if(vcounter && !--vcounter) { vcounter = enable() ? size + 0 : 0; } } auto PPU::Mosaic::power() -> void { size = 1; vcounter = 0; } ares-126/ares/sfc/ppu-performance/oam.cpp000066400000000000000000000050231415063341600204110ustar00rootroot00000000000000auto PPU::OAM::read(n10 address) -> n8 { n8 data; if(!address.bit(9)) { n7 n = address >> 2; //object# address &= 3; if(address == 0) return objects[n].x.bit(0,7); if(address == 1) return objects[n].y - 1; //-1 => rendering happens one scanline late if(address == 2) return objects[n].character; data.bit(0) = objects[n].nameselect; data.bit(1,3) = objects[n].palette; data.bit(4,5) = objects[n].priority; data.bit(6) = objects[n].hflip; data.bit(7) = objects[n].vflip; return data; } n7 n = (n5)address << 2; //object# data.bit(0) = objects[n + 0].x.bit(8); data.bit(1) = objects[n + 0].size; data.bit(2) = objects[n + 1].x.bit(8); data.bit(3) = objects[n + 1].size; data.bit(4) = objects[n + 2].x.bit(8); data.bit(5) = objects[n + 2].size; data.bit(6) = objects[n + 3].x.bit(8); data.bit(7) = objects[n + 3].size; return data; } auto PPU::OAM::write(n10 address, n8 data) -> void { if(!address.bit(9)) { n7 n = address >> 2; //object# address &= 3; if(address == 0) { objects[n].x.bit(0,7) = data; return; } if(address == 1) { objects[n].y = data + 1; return; } //+1 => rendering happens one scanline late if(address == 2) { objects[n].character = data; return; } objects[n].nameselect = data.bit(0); objects[n].palette = data.bit(1,3); objects[n].priority = data.bit(4,5); objects[n].hflip = data.bit(6); objects[n].vflip = data.bit(7); } else { n7 n = (n5)address << 2; //object# objects[n + 0].x.bit(8) = data.bit(0); objects[n + 0].size = data.bit(1); objects[n + 1].x.bit(8) = data.bit(2); objects[n + 1].size = data.bit(3); objects[n + 2].x.bit(8) = data.bit(4); objects[n + 2].size = data.bit(5); objects[n + 3].x.bit(8) = data.bit(6); objects[n + 3].size = data.bit(7); } } alwaysinline auto PPU::OAM::Object::width() const -> u32 { if(size == 0) { static const u32 width[] = { 8, 8, 8, 16, 16, 32, 16, 16}; return width[ppu.obj.io.baseSize]; } else { static const u32 width[] = {16, 32, 64, 32, 64, 64, 32, 32}; return width[ppu.obj.io.baseSize]; } } alwaysinline auto PPU::OAM::Object::height() const -> u32 { if(size == 0) { if(ppu.obj.io.interlace && ppu.obj.io.baseSize >= 6) return 16; //hardware quirk static const u32 height[] = { 8, 8, 8, 16, 16, 32, 32, 32}; return height[ppu.obj.io.baseSize]; } else { static const u32 height[] = {16, 32, 64, 32, 64, 64, 64, 32}; return height[ppu.obj.io.baseSize]; } } ares-126/ares/sfc/ppu-performance/object.cpp000066400000000000000000000100351415063341600211020ustar00rootroot00000000000000inline auto PPU::Object::addressReset() -> void { self.io.oamAddress = self.io.oamBaseAddress; setFirstSprite(); } inline auto PPU::Object::setFirstSprite() -> void { io.firstSprite = 0; if(self.io.oamPriority) io.firstSprite = self.io.oamAddress >> 2; } auto PPU::Object::render() -> void { if(!io.aboveEnable && !io.belowEnable) return; bool windowAbove[448]; bool windowBelow[448]; self.window.render(window, window.aboveEnable, windowAbove); self.window.render(window, window.belowEnable, windowBelow); u32 itemCount = 0; u32 tileCount = 0; for(u32 n : range(32)) items[n].valid = false; for(u32 n : range(34)) tiles[n].valid = false; u32 width = self.width(); s32 x1 = 0, x2 = 255; if(self.width() == 352) x1 = -48, x2 = 303; if(self.width() == 448) x1 = -96, x2 = 351; for(u32 n : range(128)) { Item item{true, io.firstSprite + n & 127}; const auto& object = oam.objects[item.index]; item.width = object.width(); item.height = object.height(); if(within<-128,+383>(object.x, item.width, x1, x2)) { u32 height = item.height >> io.interlace; if(auto y = within<0,511>(object.y, height, self.vcounter())) { item.y = y(); if(itemCount++ >= 32) break; items[itemCount - 1] = item; } } } for(s32 n : reverse(range(32))) { const auto& item = items[n]; if(!item.valid) continue; const auto& object = oam.objects[item.index]; u32 tileWidth = item.width >> 3; s32 x = object.x; s32 y = item.y; if(io.interlace) y <<= 1; if(object.vflip) { if(item.width == item.height) { y = item.height - 1 - y; } else if(y < item.width) { y = item.width - 1 - y; } else { y = item.width + (item.width - 1) - (y - item.width); } } if(io.interlace) { y = !object.vflip ? y + self.field() : y - self.field(); } x &= 511; y &= 255; n16 tiledataAddress = io.tiledataAddress; if(object.nameselect) tiledataAddress += 1 + io.nameselect << 12; n16 characterX = object.character.bit(0,3); n16 characterY = (object.character.bit(4,7) + (y >> 3) & 15) << 4; for(u32 tileX : range(tileWidth)) { u32 objectX = x + (tileX << 3) & 511; if(x != width && objectX >= width && objectX + 7 < 512 + x1) continue; Tile tile{true}; tile.x = objectX; tile.priority = object.priority; tile.palette = 128 + (object.palette << 4); tile.hflip = object.hflip; u32 mirrorX = !object.hflip ? tileX : tileWidth - 1 - tileX; u32 address = tiledataAddress + ((characterY + (characterX + mirrorX & 15)) << 4); address = (address & 0xfff0) + (y & 7); tile.data.bit( 0,15) = self.vram[address + 0]; tile.data.bit(16,31) = self.vram[address + 8]; if(tileCount++ >= 34) break; tiles[tileCount - 1] = tile; } } io.rangeOver |= itemCount > 32; io.timeOver |= tileCount > 34; n8 palette[448]; n8 priority[448]; for(u32 n : range(34)) { auto& tile = tiles[n]; if(!tile.valid) continue; u32 tileX = tile.x + abs(x1); for(u32 x : range(8)) { tileX &= 511; if(tileX < width) { u32 color = 0, shift = tile.hflip ? x : 7 - x; color += tile.data >> shift + 0 & 1; color += tile.data >> shift + 7 & 2; color += tile.data >> shift + 14 & 4; color += tile.data >> shift + 21 & 8; if(color) { palette[tileX] = tile.palette + color; priority[tileX] = io.priority[tile.priority]; } } tileX++; } } for(s32 x = x1; x <= x2; x++) { u32 xp = x + abs(x1); if(!priority[xp]) continue; n8 source = palette[xp] < 192 ? PPU::Source::OBJ1 : PPU::Source::OBJ2; if(io.aboveEnable && !windowAbove[xp]) self.dac.plotAbove(xp, source, priority[xp], self.dac.cgram[palette[xp]]); if(io.belowEnable && !windowBelow[xp]) self.dac.plotBelow(xp, source, priority[xp], self.dac.cgram[palette[xp]]); } } auto PPU::Object::power() -> void { for(auto& object : oam.objects) object = {}; io = {}; window = {}; } ares-126/ares/sfc/ppu-performance/ppu.cpp000066400000000000000000000101561415063341600204440ustar00rootroot00000000000000#include namespace ares::SuperFamicom { PPU ppu; #include "io.cpp" #include "window.cpp" #include "mosaic.cpp" #include "background.cpp" #include "mode7.cpp" #include "oam.cpp" #include "object.cpp" #include "dac.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" #include "../ppu/counter/serialization.cpp" auto PPU::load(Node::Object parent) -> void { node = parent->append("PPU"); screen = node->append("Screen", 896, 480); screen->colors(1 << 19, {&PPU::color, this}); screen->setSize(512, 480); screen->setScale(0.5, 0.5); screen->setAspect(8.0, 7.0); vramSize = node->append("VRAM", 64_KiB); vramSize->setAllowedValues({64_KiB, 128_KiB}); overscanEnable = screen->append("Overscan", true, [&](auto value) { screen->setSize(screenWidth->value() * 2, overscanEnable->value() ? 480 : 448); }); overscanEnable->setDynamic(true); colorEmulation = screen->append("Color Emulation", true, [&](auto value) { screen->resetPalette(); }); colorEmulation->setDynamic(true); colorBleed = screen->append("Color Bleed", true, [&](auto value) { screen->setColorBleed(value); }); colorBleed->setDynamic(true); screenWidth = screen->append("Width", 256, [&](auto value) { screen->setSize(screenWidth->value() * 2, overscanEnable->value() ? 480 : 448); }); screenWidth->setAllowedValues({256, 352, 448}); debugger.load(node); } auto PPU::unload() -> void { debugger.unload(node); vramSize.reset(); overscanEnable.reset(); colorEmulation.reset(); colorBleed.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto PPU::step(u32 clocks) -> void { tick(clocks); Thread::step(clocks); Thread::synchronize(cpu); } auto PPU::main() -> void { if(vcounter() == 0) { state.interlace = io.interlace; state.overscan = io.overscan; obj.io.rangeOver = 0; obj.io.timeOver = 0; } if(vcounter() && vcounter() < vdisp() && !runAhead()) { step(renderingCycle); mosaic.scanline(); dac.prepare(); if(!io.displayDisable) { bg1.render(); bg2.render(); bg3.render(); bg4.render(); obj.render(); } dac.render(); } if(vcounter() == vdisp()) { if(!io.displayDisable) obj.addressReset(); } if(vcounter() == 240) { if(state.interlace == 0) screen->setProgressive(1); if(state.interlace == 1) screen->setInterlace(field()); if(overscanEnable->value() == 0) screen->setViewport(0, 18, width() * 2, 448); if(overscanEnable->value() == 1) screen->setViewport(0, 0, width() * 2, 480); screen->frame(); scheduler.exit(Event::Frame); } step(hperiod() - hcounter()); } auto PPU::map() -> void { function reader{&PPU::readIO, this}; function writer{&PPU::writeIO, this}; bus.map(reader, writer, "00-3f,80-bf:2100-213f"); } auto PPU::power(bool reset) -> void { Thread::create(system.cpuFrequency(), {&PPU::main, this}); PPUcounter::reset(); screen->power(); ppu1.version = 1, ppu1.mdr = 0x00; ppu2.version = 3, ppu2.mdr = 0x00; if(!reset) for(auto& word : vram.data) word = 0; vram.mask = vramSize->value() / sizeof(n16) - 1; if(vram.mask != 0xffff) vram.mask = 0x7fff; state = {}; latch = {}; io = {}; mode7 = {}; window.power(); mosaic.power(); bg1.power(); bg2.power(); bg3.power(); bg4.power(); obj.power(); dac.power(); updateVideoMode(); string title; for(u32 index : range(21)) { auto byte = bus.read(0xffc0 + index, 0x00); if(byte == 0x00) break; if(byte == 0xff) break; title.append(byte); } title.strip(); renderingCycle = 512; if(title == "ADVENTURES OF FRANKEN") renderingCycle = 32; if(title == "AIR STRIKE PATROL" || title == "DESERT FIGHTER") renderingCycle = 32; if(title == "FIREPOWER 2000" || title == "SUPER SWIV") renderingCycle = 32; if(title == "NHL '94" || title == "NHL PROHOCKEY'94") renderingCycle = 32; if(title == "Suguro Quest++") renderingCycle = 128; } } ares-126/ares/sfc/ppu-performance/ppu.hpp000066400000000000000000000174251415063341600204570ustar00rootroot00000000000000struct PPU : Thread, PPUcounter { Node::Object node; Node::Video::Screen screen; Node::Setting::Natural vramSize; Node::Setting::Boolean overscanEnable; Node::Setting::Boolean colorEmulation; Node::Setting::Boolean colorBleed; Node::Setting::Natural screenWidth; struct Debugger { PPU& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory oam; Node::Debugger::Memory cgram; } memory; struct Graphics { Node::Debugger::Graphics tiles2bpp; Node::Debugger::Graphics tiles4bpp; Node::Debugger::Graphics tiles8bpp; Node::Debugger::Graphics tilesMode7; } graphics; } debugger{*this}; auto width() const -> u32 { return screenWidth->value(); } auto hires() const -> bool { return io.pseudoHires || io.bgMode == 5 || io.bgMode == 6; } auto interlace() const -> bool { return state.interlace; } auto overscan() const -> bool { return state.overscan; } auto vdisp() const -> u32 { return state.vdisp; } //ppu.cpp auto load(Node::Object parent) -> void; auto unload() -> void; auto step(u32 clocks) -> void; auto main() -> void; auto map() -> void; auto power(bool reset) -> void; auto draw(u32* output) -> void; //io.cpp auto latchCounters() -> void; auto addressVRAM() const -> n16; auto readVRAM() -> n16; auto writeVRAM(n1 byte, n8 data) -> void; auto readOAM(n10 address) -> n8; auto writeOAM(n10 address, n8 data) -> void; auto readCGRAM(n1 byte, n8 address) -> n8; auto writeCGRAM(n8 address, n15 data) -> void; auto readIO(n24 address, n8 data) -> n8; auto writeIO(n24 address, n8 data) -> void; auto updateVideoMode() -> void; //color.cpp auto color(n32 color) -> n64; //serialization.cpp auto serialize(serializer&) -> void; //private: struct Source { enum : u32 { BG1, BG2, BG3, BG4, OBJ1, OBJ2, COL }; }; n32 renderingCycle; struct { n4 version; n8 mdr; } ppu1, ppu2; struct VRAM { auto& operator[](u32 address) { return data[address & mask]; } n16 data[64_KiB]; n16 mask = 0x7fff; n16 address; n8 increment; n2 mapping; n1 mode; } vram; struct State { n1 interlace; n1 overscan; n9 vdisp; } state; struct Latches { n16 vram; n8 oam; n8 cgram; n8 bgofsPPU1; n8 bgofsPPU2; n8 mode7; n1 counters; n1 hcounter; n1 vcounter; n10 oamAddress; n8 cgramAddress; } latch; struct IO { //$2100 INIDISP n4 displayBrightness; n1 displayDisable; //$2102 OAMADDL //$2103 OAMADDH n10 oamBaseAddress; n10 oamAddress; n1 oamPriority; //$2105 BGMODE n3 bgMode; n1 bgPriority; //$2121 CGADD n8 cgramAddress; n1 cgramAddressLatch; //$2133 SETINI n1 interlace; n1 overscan; n1 pseudoHires; n1 extbg; //$213c OPHCT n16 hcounter; //$213d OPVCT n16 vcounter; } io; struct Mode7 { //$210d BG1HOFS n16 hoffset; //$210e BG1VOFS n16 voffset; //$211a M7SEL n1 hflip; n1 vflip; n2 repeat; //$211b M7A n16 a; //$211c M7B n16 b; //$211d M7C n16 c; //$211e M7D n16 d; //$211f M7X n16 hcenter; //$2120 M7Y n16 vcenter; } mode7; struct Window { PPU& self; struct Layer; struct Color; //window.cpp auto render(Layer&, bool enable, bool output[448]) -> void; auto render(Color&, u32 mask, bool output[448]) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Layer { n1 oneInvert; n1 oneEnable; n1 twoInvert; n1 twoEnable; n2 mask; n1 aboveEnable; n1 belowEnable; //serialization.cpp auto serialize(serializer&) -> void; }; struct Color { n1 oneInvert; n1 oneEnable; n1 twoInvert; n1 twoEnable; n2 mask; n2 aboveMask; n2 belowMask; //serialization.cpp auto serialize(serializer&) -> void; }; struct IO { //$2126 WH0 n8 oneLeft; //$2127 WH1 n8 oneRight; //$2128 WH2 n8 twoLeft; //$2129 WH3 n8 twoRight; } io; } window{*this}; struct Mosaic { PPU& self; //mosaic.cpp auto enable() const -> bool; auto voffset() const -> u32; auto scanline() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n5 size; n5 vcounter; } mosaic{*this}; struct Background { struct ID { enum : u32 { BG1, BG2, BG3, BG4 }; }; struct Mode { enum : u32 { BPP2, BPP4, BPP8, Mode7, Inactive }; }; PPU& self; const u32 id; Background(PPU& self, u32 id) : self(self), id(id) {} //background.cpp auto render() -> void; auto getTile(u32 hoffset, u32 voffset) -> n16; auto power() -> void; //mode7.cpp auto renderMode7() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n2 screenSize; n16 screenAddress; n16 tiledataAddress; n1 tileSize; n16 hoffset; n16 voffset; n1 aboveEnable; n1 belowEnable; n1 mosaicEnable; n8 mode; n8 priority[2]; } io; PPU::Window::Layer window; }; Background bg1{*this, Background::ID::BG1}; Background bg2{*this, Background::ID::BG2}; Background bg3{*this, Background::ID::BG3}; Background bg4{*this, Background::ID::BG4}; struct OAM { //oam.cpp auto read(n10 address) -> n8; auto write(n10 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Object { //oam.cpp auto width() const -> u32; auto height() const -> u32; n9 x; n8 y; n8 character; n1 nameselect; n1 vflip; n1 hflip; n2 priority; n3 palette; n1 size; } objects[128]; }; struct Object { PPU& self; //object.cpp auto addressReset() -> void; auto setFirstSprite() -> void; auto render() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; OAM oam; struct IO { n1 interlace; n16 tiledataAddress; n2 nameselect; n3 baseSize; n7 firstSprite; n1 aboveEnable; n1 belowEnable; n1 rangeOver; n1 timeOver; n8 priority[4]; } io; PPU::Window::Layer window; //unserialized: struct Item { n1 valid; n7 index; n8 width; n8 height; n8 y; } items[32]; struct Tile { n1 valid; n9 x; n2 priority; n8 palette; n1 hflip; n32 data; } tiles[34]; } obj{*this}; struct DAC { PPU& self; struct Pixel; //dac.cpp auto prepare() -> void; auto render() -> void; auto pixel(n9 x, Pixel above, Pixel below) const -> n15; auto blend(n15 x, n15 y, bool halve) const -> n15; auto plotAbove(n9 x, n8 source, n8 priority, n15 color) -> void; auto plotBelow(n9 x, n8 source, n8 priority, n15 color) -> void; auto directColor(n8 palette, n3 paletteGroup) const -> n15; auto fixedColor() const -> n15; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n15 cgram[256]; struct IO { n1 directColor; n1 blendMode; n1 colorEnable[7]; n1 colorHalve; n1 colorMode; n5 colorRed; n5 colorGreen; n5 colorBlue; } io; PPU::Window::Color window; //unserialized: struct Pixel { n8 source; n8 priority; n15 color; } above[448], below[448]; bool windowAbove[448]; bool windowBelow[448]; } dac{*this}; }; extern PPU ppu; ares-126/ares/sfc/ppu-performance/serialization.cpp000066400000000000000000000053701415063341600225170ustar00rootroot00000000000000auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); PPUcounter::serialize(s); s(ppu1.version); s(ppu1.mdr); s(ppu2.version); s(ppu2.mdr); s(array_span{vram.data, vram.mask + 1}); s(vram.address); s(vram.increment); s(vram.mapping); s(vram.mode); s(state.interlace); s(state.overscan); s(state.vdisp); s(latch.vram); s(latch.oam); s(latch.cgram); s(latch.bgofsPPU1); s(latch.bgofsPPU2); s(latch.mode7); s(latch.counters); s(latch.hcounter); s(latch.vcounter); s(latch.oamAddress); s(latch.cgramAddress); s(io.displayBrightness); s(io.displayDisable); s(io.oamBaseAddress); s(io.oamAddress); s(io.oamPriority); s(io.bgMode); s(io.bgPriority); s(io.cgramAddress); s(io.cgramAddressLatch); s(io.interlace); s(io.overscan); s(io.pseudoHires); s(io.extbg); s(io.hcounter); s(io.vcounter); s(mode7.hoffset); s(mode7.voffset); s(mode7.hflip); s(mode7.vflip); s(mode7.repeat); s(mode7.a); s(mode7.b); s(mode7.c); s(mode7.d); s(mode7.hcenter); s(mode7.vcenter); s(window); s(mosaic); s(bg1); s(bg2); s(bg3); s(bg4); s(obj); s(dac); } auto PPU::Window::Layer::serialize(serializer& s) -> void { s(oneInvert); s(oneEnable); s(twoInvert); s(twoEnable); s(mask); s(aboveEnable); s(belowEnable); } auto PPU::Window::Color::serialize(serializer& s) -> void { s(oneInvert); s(oneEnable); s(twoInvert); s(twoEnable); s(mask); s(aboveMask); s(belowMask); } auto PPU::Window::serialize(serializer& s) -> void { s(io.oneLeft); s(io.oneRight); s(io.twoLeft); s(io.twoRight); } auto PPU::Mosaic::serialize(serializer& s) -> void { s(size); s(vcounter); } auto PPU::Background::serialize(serializer& s) -> void { s(io.screenSize); s(io.screenAddress); s(io.tiledataAddress); s(io.tileSize); s(io.hoffset); s(io.voffset); s(io.aboveEnable); s(io.belowEnable); s(io.mosaicEnable); s(io.mode); s(io.priority); s(window); } auto PPU::OAM::serialize(serializer& s) -> void { for(auto& object : objects) { s(object.x); s(object.y); s(object.character); s(object.nameselect); s(object.vflip); s(object.hflip); s(object.priority); s(object.palette); s(object.size); } } auto PPU::Object::serialize(serializer& s) -> void { s(oam); s(io.interlace); s(io.tiledataAddress); s(io.nameselect); s(io.baseSize); s(io.firstSprite); s(io.aboveEnable); s(io.belowEnable); s(io.rangeOver); s(io.timeOver); s(io.priority); s(window); } auto PPU::DAC::serialize(serializer& s) -> void { s(cgram); s(io.directColor); s(io.blendMode); s(io.colorEnable); s(io.colorHalve); s(io.colorMode); s(io.colorRed); s(io.colorGreen); s(io.colorBlue); s(window); } ares-126/ares/sfc/ppu-performance/window.cpp000066400000000000000000000062521415063341600211510ustar00rootroot00000000000000auto PPU::Window::render(Layer& layer, bool enable, bool output[448]) -> void { if(!enable || (!layer.oneEnable && !layer.twoEnable)) { memory::fill(output, self.width(), 0); return; } s32 oneLeft = io.oneLeft; s32 oneRight = io.oneRight; s32 twoLeft = io.twoLeft; s32 twoRight = io.twoRight; if(self.width() != 256) { s32 x1 = self.width() == 352 ? -40 * 2 : -16 * 2; oneLeft = (oneLeft << 1) + x1; oneRight = (oneRight << 1) + x1; twoLeft = (twoLeft << 1) + x1; twoRight = (twoRight << 1) + x1; } if(layer.oneEnable && !layer.twoEnable) { bool set = 1 ^ layer.oneInvert, clear = !set; for(s32 x : range(self.width())) { output[x] = x >= oneLeft && x <= oneRight ? set : clear; } return; } if(layer.twoEnable && !layer.oneEnable) { bool set = 1 ^ layer.twoInvert, clear = !set; for(s32 x : range(self.width())) { output[x] = x >= twoLeft && x <= twoRight ? set : clear; } return; } for(s32 x : range(self.width())) { bool oneMask = (x >= oneLeft && x <= oneRight) ^ layer.oneInvert; bool twoMask = (x >= twoLeft && x <= twoRight) ^ layer.twoInvert; switch(layer.mask) { case 0: output[x] = (oneMask | twoMask) == 1; break; case 1: output[x] = (oneMask & twoMask) == 1; break; case 2: output[x] = (oneMask ^ twoMask) == 1; break; case 3: output[x] = (oneMask ^ twoMask) == 0; break; } } } auto PPU::Window::render(Color& color, u32 mask, bool output[448]) -> void { bool set, clear; switch(mask) { case 0: memory::fill(output, self.width(), 1); return; //always case 1: set = 1, clear = 0; break; //inside case 2: set = 0, clear = 1; break; //outside case 3: memory::fill(output, self.width(), 0); return; //never } if(!color.oneEnable && !color.twoEnable) { memory::fill(output, self.width(), clear); return; } s32 oneLeft = io.oneLeft; s32 oneRight = io.oneRight; s32 twoLeft = io.twoLeft; s32 twoRight = io.twoRight; if(self.width() != 256) { s32 x1 = self.width() == 352 ? -40 * 2 : -16 * 2; oneLeft = (oneLeft << 1) + x1; oneRight = (oneRight << 1) + x1; twoLeft = (twoLeft << 1) + x1; twoRight = (twoRight << 1) + x1; } if(color.oneEnable && !color.twoEnable) { if(color.oneInvert) set ^= 1, clear ^= 1; for(s32 x : range(self.width())) { output[x] = x >= oneLeft && x <= oneRight ? set : clear; } return; } if(!color.oneEnable && color.twoEnable) { if(color.twoInvert) set ^= 1, clear ^= 1; for(s32 x : range(self.width())) { output[x] = x >= twoLeft && x <= twoRight ? set : clear; } return; } for(s32 x : range(self.width())) { bool oneMask = (x >= oneLeft && x <= oneRight) ^ color.oneInvert; bool twoMask = (x >= twoLeft && x <= twoRight) ^ color.twoInvert; switch(color.mask) { case 0: output[x] = (oneMask | twoMask) == 1 ? set : clear; break; case 1: output[x] = (oneMask & twoMask) == 1 ? set : clear; break; case 2: output[x] = (oneMask ^ twoMask) == 1 ? set : clear; break; case 3: output[x] = (oneMask ^ twoMask) == 0 ? set : clear; break; } } } auto PPU::Window::power() -> void { io = {}; } ares-126/ares/sfc/ppu/000077500000000000000000000000001415063341600146325ustar00rootroot00000000000000ares-126/ares/sfc/ppu/background.cpp000066400000000000000000000152071415063341600174620ustar00rootroot00000000000000inline auto PPU::Background::hires() const -> bool { return self.io.bgMode == 5 || self.io.bgMode == 6; } //V = 0, H = 0 auto PPU::Background::frame() -> void { } //H = 0 auto PPU::Background::scanline() -> void { mosaic.hcounter = self.mosaic.size; mosaic.hoffset = 0; renderingIndex = 0; pixelCounter = (io.hoffset & 7) << hires(); opt.hoffset = 0; opt.voffset = 0; } //H = 56 auto PPU::Background::begin() -> void { //remove partial tile columns that have been scrolled offscreen for(auto& data : tiles[0].data) data >>= pixelCounter << 1; } auto PPU::Background::fetchNameTable() -> void { if(self.vcounter() == 0) return; u32 nameTableIndex = self.hcounter() >> 5 << hires(); s32 x = (self.hcounter() & ~31) >> 2; u32 hpixel = x << hires(); u32 vpixel = self.vcounter(); u32 hscroll = io.hoffset; u32 vscroll = io.voffset; if(hires()) { hscroll <<= 1; if(self.io.interlace) vpixel = vpixel << 1 | (self.field() && !mosaic.enable); } if(mosaic.enable) { vpixel -= self.mosaic.voffset() << (hires() && self.io.interlace); } bool repeated = false; repeat: u32 hoffset = hpixel + hscroll; u32 voffset = vpixel + vscroll; if(self.io.bgMode == 2 || self.io.bgMode == 4 || self.io.bgMode == 6) { auto hlookup = self.bg3.opt.hoffset; auto vlookup = self.bg3.opt.voffset; u32 valid = 13 + id; if(self.io.bgMode == 4) { if(hlookup.bit(valid)) { if(!hlookup.bit(15)) { hoffset = hpixel + (hlookup & ~7) + (hscroll & 7); } else { voffset = vpixel + (vlookup); } } } else { if(hlookup.bit(valid)) hoffset = hpixel + (hlookup & ~7) + (hscroll & 7); if(vlookup.bit(valid)) voffset = vpixel + (vlookup); } } u32 width = 256 << hires(); u32 hsize = width << io.tileSize << io.screenSize.bit(0); u32 vsize = width << io.tileSize << io.screenSize.bit(1); hoffset &= hsize - 1; voffset &= vsize - 1; u32 vtiles = 3 + io.tileSize; u32 htiles = !hires() ? vtiles : 4; u32 htile = hoffset >> htiles; u32 vtile = voffset >> vtiles; u32 hscreen = io.screenSize.bit(0) ? 32 << 5 : 0; u32 vscreen = io.screenSize.bit(1) ? 32 << 5 + io.screenSize.bit(0) : 0; n16 offset = (n5)htile << 0 | (n5)vtile << 5; if(htile & 0x20) offset += hscreen; if(vtile & 0x20) offset += vscreen; n16 address = io.screenAddress + offset; n16 attributes = vram[address]; auto& tile = tiles[nameTableIndex]; tile.character = attributes.bit(0,9); tile.paletteGroup = attributes.bit(10,12); tile.priority = io.priority[attributes.bit(13)]; tile.hmirror = attributes.bit(14); tile.vmirror = attributes.bit(15); if(htiles == 4 && bool(hoffset & 8) != tile.hmirror) tile.character += 1; if(vtiles == 4 && bool(voffset & 8) != tile.vmirror) tile.character += 16; u32 characterMask = vram.mask >> 3 + io.mode; u32 characterIndex = io.tiledataAddress >> 3 + io.mode; n16 origin = tile.character + characterIndex & characterMask; if(tile.vmirror) voffset ^= 7; tile.address = (origin << 3 + io.mode) + (voffset & 7); u32 paletteOffset = self.io.bgMode == 0 ? id << 5 : 0; u32 paletteSize = 2 << io.mode; tile.palette = paletteOffset + (tile.paletteGroup << paletteSize); nameTableIndex++; if(hires() && !repeated) { repeated = true; hpixel += 8; goto repeat; } } auto PPU::Background::fetchOffset(u32 y) -> void { if(self.vcounter() == 0) return; u32 characterIndex = self.hcounter() >> 5 << hires(); u32 x = characterIndex << 3; u32 hoffset = x + (io.hoffset & ~7); u32 voffset = y + (io.voffset); u32 vtiles = 3 + io.tileSize; u32 htiles = !hires() ? vtiles : 4; u32 htile = hoffset >> htiles; u32 vtile = voffset >> vtiles; u32 hscreen = io.screenSize.bit(0) ? 32 << 5 : 0; u32 vscreen = io.screenSize.bit(1) ? 32 << 5 + io.screenSize.bit(0) : 0; n16 offset = (n5)htile << 0 | (n5)vtile << 5; if(htile & 0x20) offset += hscreen; if(vtile & 0x20) offset += vscreen; n16 address = io.screenAddress + offset; if(y == 0) opt.hoffset = vram[address]; if(y == 8) opt.voffset = vram[address]; } auto PPU::Background::fetchCharacter(u32 index, bool half) -> void { if(self.vcounter() == 0) return; u32 characterIndex = (self.hcounter() >> 5 << hires()) + half; auto& tile = tiles[characterIndex]; n16 data = vram[tile.address + (index << 3)]; //reverse bits so that the lowest bit is the left-most pixel if(!tile.hmirror) { data = data >> 4 & 0x0f0f | data << 4 & 0xf0f0; data = data >> 2 & 0x3333 | data << 2 & 0xcccc; data = data >> 1 & 0x5555 | data << 1 & 0xaaaa; } //interleave two bitplanes for faster planar decoding later tile.data[index] = ( ((n8(data >> 0) * 0x0101010101010101ull & 0x8040201008040201ull) * 0x0102040810204081ull >> 49) & 0x5555 | ((n8(data >> 8) * 0x0101010101010101ull & 0x8040201008040201ull) * 0x0102040810204081ull >> 48) & 0xaaaa ); } auto PPU::Background::run(bool screen) -> void { if(self.vcounter() == 0) return; if(screen == Screen::Below) { output.above.priority = 0; output.below.priority = 0; if(!hires()) return; } if(io.mode == Mode::Mode7) return runMode7(); auto& tile = tiles[renderingIndex]; n8 color; if(io.mode >= Mode::BPP2) color.bit(0,1) = tile.data[0] & 3; tile.data[0] >>= 2; if(io.mode >= Mode::BPP4) color.bit(2,3) = tile.data[1] & 3; tile.data[1] >>= 2; if(io.mode >= Mode::BPP8) color.bit(4,5) = tile.data[2] & 3; tile.data[2] >>= 2; if(io.mode >= Mode::BPP8) color.bit(6,7) = tile.data[3] & 3; tile.data[3] >>= 2; Pixel pixel; pixel.priority = tile.priority; pixel.palette = color ? u32(tile.palette + color) : 0; pixel.paletteGroup = tile.paletteGroup; if(++pixelCounter == 0) renderingIndex++; u32 x = self.hcounter() - 56 >> 2; if(x == 0 && (!hires() || screen == Screen::Below)) { mosaic.hcounter = self.mosaic.size; mosaic.pixel = pixel; } else if((!hires() || screen == Screen::Below) && --mosaic.hcounter == 0) { mosaic.hcounter = self.mosaic.size; mosaic.pixel = pixel; } else if(mosaic.enable) { pixel = mosaic.pixel; } if(screen == Screen::Above) x++; if(pixel.palette == 0) return; if(!hires() || screen == Screen::Above) if(io.aboveEnable) output.above = pixel; if(!hires() || screen == Screen::Below) if(io.belowEnable) output.below = pixel; } auto PPU::Background::power() -> void { io = {}; io.tiledataAddress = (random() & 0x0f) << 12; io.screenAddress = (random() & 0xfc) << 8; io.screenSize = random(); io.tileSize = random(); io.aboveEnable = random(); io.belowEnable = random(); io.hoffset = random(); io.voffset = random(); output.above = {}; output.below = {}; mosaic = {}; mosaic.enable = random(); } ares-126/ares/sfc/ppu/color.cpp000066400000000000000000000016501415063341600164560ustar00rootroot00000000000000auto PPU::color(n32 color) -> n64 { n32 r = color.bit( 0, 4); n32 g = color.bit( 5, 9); n32 b = color.bit(10,14); n32 l = color.bit(15,18); //luma=0 is not 100% black; but it's much darker than normal linear scaling. //exact effect seems to be analog; requires > 24-bit color depth to represent accurately. f64 L = (1.0 + l) / 16.0 * (l ? 1.0 : 0.25); n64 R = L * image::normalize(r, 5, 16); n64 G = L * image::normalize(g, 5, 16); n64 B = L * image::normalize(b, 5, 16); if(colorEmulation->value()) { static const n8 gammaRamp[32] = { 0x00, 0x01, 0x03, 0x06, 0x0a, 0x0f, 0x15, 0x1c, 0x24, 0x2d, 0x37, 0x42, 0x4e, 0x5b, 0x69, 0x78, 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0, 0xb8, 0xc0, 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, 0xff, }; R = L * gammaRamp[r] * 0x0101; G = L * gammaRamp[g] * 0x0101; B = L * gammaRamp[b] * 0x0101; } return R << 32 | G << 16 | B << 0; } ares-126/ares/sfc/ppu/counter/000077500000000000000000000000001415063341600163115ustar00rootroot00000000000000ares-126/ares/sfc/ppu/counter/counter.hpp000066400000000000000000000026571415063341600205130ustar00rootroot00000000000000//PPUcounter emulates the H/V latch counters of the S-PPU2. // //real hardware has the S-CPU maintain its own copy of these counters that are //updated based on the state of the S-PPU Vblank and Hblank pins. emulating this //would require full lock-step synchronization for every clock tick. //to bypass this and allow the two to run out-of-order, both the CPU and PPU //classes inherit PPUcounter and keep their own counters. //the timers are kept in sync, as the only differences occur on V=240 and V=261, //based on interlace. thus, we need only synchronize and fetch interlace at any //point before this in the frame, which is handled internally by this class at //V=128. struct PPUcounter { //inline.hpp auto tick() -> void; auto tick(u32 clocks) -> void; private: auto tickScanline() -> void; public: auto interlace() const -> bool; auto field() const -> bool; auto vcounter() const -> u32; auto hcounter() const -> u32; auto hdot() const -> u32; private: auto vperiod() const -> u32; public: auto hperiod() const -> u32; auto vcounter(u32 offset) const -> u32; auto hcounter(u32 offset) const -> u32; auto reset() -> void; //serialization.cpp auto serialize(serializer&) -> void; function scanline; private: struct { bool interlace; bool field; u32 vperiod; u32 hperiod; u32 vcounter; u32 hcounter; } time; struct { u32 vperiod; u32 hperiod; } last; }; ares-126/ares/sfc/ppu/counter/inline.hpp000066400000000000000000000061171415063341600203050ustar00rootroot00000000000000alwaysinline auto PPUcounter::tick() -> void { time.hcounter += 2; //increment by smallest unit of time. if(time.hcounter == hperiod()) { last.hperiod = hperiod(); time.hcounter = 0; tickScanline(); } } alwaysinline auto PPUcounter::tick(u32 clocks) -> void { time.hcounter += clocks; if(time.hcounter >= hperiod()) { last.hperiod = hperiod(); time.hcounter -= hperiod(); tickScanline(); } } alwaysinline auto PPUcounter::tickScanline() -> void { if(++time.vcounter == 128) { //it's not important when interlace is captured: it is only needed at V=240 or V=311. //interlace cannot be captured at V=0,H=0 as the CPU and PPU may be out of sync. time.interlace = ppu.interlace(); time.vperiod += interlace() && !field(); } if(vcounter() == vperiod()) { last.vperiod = vperiod(); //this may be off by one until V=128, hence why vperiod() is a private function. time.vperiod = Region::NTSC() ? 262 : 312; time.vcounter = 0; time.field ^= 1; } time.hperiod = 1364; //NTSC and PAL scanline rates would not match up with color clocks if every scanline were 1364 clocks. //to offset for this error, NTSC has one short scanline, and PAL has one long scanline. if(Region::NTSC() && interlace() == 0 && field() == 1 && vcounter() == 240) time.hperiod -= 4; if(Region::PAL() && interlace() == 1 && field() == 1 && vcounter() == 311) time.hperiod += 4; if(scanline) scanline(); } alwaysinline auto PPUcounter::interlace() const -> bool { return time.interlace; } alwaysinline auto PPUcounter::field() const -> bool { return time.field; } alwaysinline auto PPUcounter::vcounter() const -> u32 { return time.vcounter; } alwaysinline auto PPUcounter::hcounter() const -> u32 { return time.hcounter; } alwaysinline auto PPUcounter::vperiod() const -> u32 { return time.vperiod; } alwaysinline auto PPUcounter::hperiod() const -> u32 { return time.hperiod; } alwaysinline auto PPUcounter::vcounter(u32 offset) const -> u32 { if(offset <= hcounter()) return vcounter(); if(vcounter() > 0) return vcounter() - 1; return last.vperiod - 1; } alwaysinline auto PPUcounter::hcounter(u32 offset) const -> u32 { if(offset <= hcounter()) return hcounter() - offset; return hcounter() + last.hperiod - offset; } //one PPU dot = 4 CPU clocks. // //PPU dots 323 and 327 are 6 CPU clocks long. //this does not apply to NTSC non-interlace scanline 240 on odd fields. this is //because the PPU skips one dot to alter the color burst phase of the video signal. //it is not known what happens for PAL 1368 clock scanlines. // //dot 323 range = {1292, 1294, 1296} //dot 327 range = {1310, 1312, 1314} alwaysinline auto PPUcounter::hdot() const -> u32 { if(hperiod() == 1360) { return hcounter() >> 2; } else { return hcounter() - ((hcounter() > 1292) << 1) - ((hcounter() > 1310) << 1) >> 2; } } inline auto PPUcounter::reset() -> void { time.interlace = 0; time.field = 0; time.vperiod = last.vperiod = Region::NTSC() ? 262 : 312; time.hperiod = last.hperiod = 1364; time.vcounter = 0; time.hcounter = 0; last.vperiod = 0; last.hperiod = 0; } ares-126/ares/sfc/ppu/counter/serialization.cpp000066400000000000000000000003201415063341600216650ustar00rootroot00000000000000auto PPUcounter::serialize(serializer& s) -> void { s(time.interlace); s(time.field); s(time.vperiod); s(time.hperiod); s(time.vcounter); s(time.hcounter); s(last.vperiod); s(last.hperiod); } ares-126/ares/sfc/ppu/dac.cpp000066400000000000000000000141561415063341600160740ustar00rootroot00000000000000auto PPU::DAC::scanline() -> void { line = nullptr; auto vcounter = self.vcounter(); auto output = self.screen->pixels().data(); if(!self.overscan()) vcounter += 8; if(vcounter < 240) { line = output + vcounter * 2 * 512; if(self.interlace() && self.field()) line += 512; } //the first hires pixel of each scanline is transparent //note: exact value initializations are not confirmed on hardware math.above.color = paletteColor(0); math.below.color = math.above.color; math.above.colorEnable = false; math.below.colorEnable = false; math.transparent = true; math.blendMode = false; math.colorHalve = io.colorHalve && !io.blendMode && math.above.colorEnable; } auto PPU::DAC::run() -> void { if(self.vcounter() == 0) return; bool hires = self.io.pseudoHires || self.io.bgMode == 5 || self.io.bgMode == 6; auto belowColor = below(hires); auto aboveColor = above(); if(!line) return; *line++ = self.io.displayBrightness << 15 | (hires ? belowColor : aboveColor); *line++ = self.io.displayBrightness << 15 | (aboveColor); } auto PPU::DAC::below(bool hires) -> n16 { if(self.io.displayDisable || (!self.io.overscan && self.vcounter() >= 225)) return 0; u32 priority = 0; if(bg1.output.below.priority) { priority = bg1.output.below.priority; if(io.directColor && (self.io.bgMode == 3 || self.io.bgMode == 4 || self.io.bgMode == 7)) { math.below.color = directColor(bg1.output.below.palette, bg1.output.below.paletteGroup); } else { math.below.color = paletteColor(bg1.output.below.palette); } } if(bg2.output.below.priority > priority) { priority = bg2.output.below.priority; math.below.color = paletteColor(bg2.output.below.palette); } if(bg3.output.below.priority > priority) { priority = bg3.output.below.priority; math.below.color = paletteColor(bg3.output.below.palette); } if(bg4.output.below.priority > priority) { priority = bg4.output.below.priority; math.below.color = paletteColor(bg4.output.below.palette); } if(obj.output.below.priority > priority) { priority = obj.output.below.priority; math.below.color = paletteColor(obj.output.below.palette); } if(math.transparent = (priority == 0)) math.below.color = paletteColor(0); if(!hires) return 0; if(!math.below.colorEnable) return math.above.colorEnable ? math.below.color : (n15)0; return blend( math.above.colorEnable ? math.below.color : (n15)0, math.blendMode ? math.above.color : fixedColor() ); } auto PPU::DAC::above() -> n16 { if(self.io.displayDisable || (!self.io.overscan && self.vcounter() >= 225)) return 0; u32 priority = 0; if(bg1.output.above.priority) { priority = bg1.output.above.priority; if(io.directColor && (self.io.bgMode == 3 || self.io.bgMode == 4 || self.io.bgMode == 7)) { math.above.color = directColor(bg1.output.above.palette, bg1.output.above.paletteGroup); } else { math.above.color = paletteColor(bg1.output.above.palette); } math.below.colorEnable = io.bg1.colorEnable; } if(bg2.output.above.priority > priority) { priority = bg2.output.above.priority; math.above.color = paletteColor(bg2.output.above.palette); math.below.colorEnable = io.bg2.colorEnable; } if(bg3.output.above.priority > priority) { priority = bg3.output.above.priority; math.above.color = paletteColor(bg3.output.above.palette); math.below.colorEnable = io.bg3.colorEnable; } if(bg4.output.above.priority > priority) { priority = bg4.output.above.priority; math.above.color = paletteColor(bg4.output.above.palette); math.below.colorEnable = io.bg4.colorEnable; } if(obj.output.above.priority > priority) { priority = obj.output.above.priority; math.above.color = paletteColor(obj.output.above.palette); math.below.colorEnable = io.obj.colorEnable && obj.output.above.palette >= 192; } if(priority == 0) { math.above.color = paletteColor(0); math.below.colorEnable = io.back.colorEnable; } if(!window.output.below.colorEnable) math.below.colorEnable = false; math.above.colorEnable = window.output.above.colorEnable; if(!math.below.colorEnable) return math.above.colorEnable ? math.above.color : (n15)0; if(io.blendMode && math.transparent) { math.blendMode = false; math.colorHalve = false; } else { math.blendMode = io.blendMode; math.colorHalve = io.colorHalve && math.above.colorEnable; } return blend( math.above.colorEnable ? math.above.color : (n15)0, math.blendMode ? math.below.color : fixedColor() ); } auto PPU::DAC::blend(u32 x, u32 y) const -> n15 { if(!io.colorMode) { //add if(!math.colorHalve) { u32 sum = x + y; u32 carry = (sum - ((x ^ y) & 0x0421)) & 0x8420; return (sum - carry) | (carry - (carry >> 5)); } else { return (x + y - ((x ^ y) & 0x0421)) >> 1; } } else { //sub u32 diff = x - y + 0x8420; u32 borrow = (diff - ((x ^ y) & 0x8420)) & 0x8420; if(!math.colorHalve) { return (diff - borrow) & (borrow - (borrow >> 5)); } else { return (((diff - borrow) & (borrow - (borrow >> 5))) & 0x7bde) >> 1; } } } inline auto PPU::DAC::paletteColor(n8 palette) const -> n15 { self.latch.cgramAddress = palette; return cgram[palette]; } inline auto PPU::DAC::directColor(n8 palette, n3 paletteGroup) const -> n15 { //palette = -------- BBGGGRRR //group = -------- -----bgr //output = 0BBb00GG Gg0RRRr0 return (palette << 7 & 0x6000) + (paletteGroup << 10 & 0x1000) + (palette << 4 & 0x0380) + (paletteGroup << 5 & 0x0040) + (palette << 2 & 0x001c) + (paletteGroup << 1 & 0x0002); } inline auto PPU::DAC::fixedColor() const -> n15 { return io.colorRed << 0 | io.colorGreen << 5 | io.colorBlue << 10; } auto PPU::DAC::power() -> void { io.blendMode = random(); io.directColor = random(); io.colorMode = random(); io.colorHalve = random(); io.bg1.colorEnable = random(); io.bg2.colorEnable = random(); io.bg3.colorEnable = random(); io.bg4.colorEnable = random(); io.obj.colorEnable = random(); io.back.colorEnable = random(); io.colorBlue = random(); io.colorGreen = random(); io.colorRed = random(); } ares-126/ares/sfc/ppu/debugger.cpp000066400000000000000000000126141415063341600171260ustar00rootroot00000000000000auto PPU::Debugger::load(Node::Object parent) -> void { memory.vram = parent->append("PPU VRAM"); memory.vram->setSize(self.vram.mask + 1 << 1); memory.vram->setRead([&](u32 address) -> u8 { return self.vram.data[address >> 1 & self.vram.mask].byte(address & 1); }); memory.vram->setWrite([&](u32 address, u8 data) -> void { self.vram.data[address >> 1 & self.vram.mask].byte(address & 1) = data; }); memory.oam = parent->append("PPU OAM"); memory.oam->setSize(512 + 32); memory.oam->setRead([&](u32 address) -> u8 { return self.oam.read(address); }); memory.oam->setWrite([&](u32 address, u8 data) -> void { return self.oam.write(address, data); }); memory.cgram = parent->append("PPU CGRAM"); memory.cgram->setSize(256 << 1); memory.cgram->setRead([&](u32 address) -> u8 { return self.dac.cgram[address >> 1 & 255].byte(address & 1); }); memory.cgram->setWrite([&](u32 address, u8 data) -> void { self.dac.cgram[address >> 1 & 255].byte(address & 1) = data; }); graphics.tiles2bpp = parent->append("2 BPP Tiles"); graphics.tiles2bpp->setSize(512, 512); graphics.tiles2bpp->setCapture([&]() -> vector { vector output; output.resize(512 * 512); for(u32 tileY : range(64)) { for(u32 tileX : range(64)) { n15 address = tileY * 64 + tileX << 3; for(u32 y : range(8)) { n16 d0 = self.vram.data[address + y]; for(u32 x : range(8)) { n2 color; color.bit(0) = d0.bit( 7 - x); color.bit(1) = d0.bit(15 - x); output[(tileY * 8 + y) * 512 + (tileX * 8 + x)] = color * 0x555555; } } } } return output; }); graphics.tiles4bpp = parent->append("4 BPP Tiles"); graphics.tiles4bpp->setSize(512, 256); graphics.tiles4bpp->setCapture([&]() -> vector { vector output; output.resize(512 * 256); for(u32 tileY : range(32)) { for(u32 tileX : range(64)) { n15 address = tileY * 64 + tileX << 4; for(u32 y : range(8)) { n16 d0 = self.vram.data[address + y + 0]; n16 d1 = self.vram.data[address + y + 8]; for(u32 x : range(8)) { n4 color; color.bit(0) = d0.bit( 7 - x); color.bit(1) = d0.bit(15 - x); color.bit(2) = d1.bit( 7 - x); color.bit(3) = d1.bit(15 - x); output[(tileY * 8 + y) * 512 + (tileX * 8 + x)] = color * 0x111111; } } } } return output; }); graphics.tiles8bpp = parent->append("8 BPP Tiles"); graphics.tiles8bpp->setSize(512, 128); graphics.tiles8bpp->setCapture([&]() -> vector { vector output; output.resize(512 * 128); for(u32 tileY : range(16)) { for(u32 tileX : range(64)) { n15 address = tileY * 64 + tileX << 5; for(u32 y : range(8)) { n16 d0 = self.vram.data[address + y + 0]; n16 d1 = self.vram.data[address + y + 8]; n16 d2 = self.vram.data[address + y + 16]; n16 d3 = self.vram.data[address + y + 24]; for(u32 x : range(8)) { n8 color; color.bit(0) = d0.bit( 7 - x); color.bit(1) = d0.bit(15 - x); color.bit(2) = d1.bit( 7 - x); color.bit(3) = d1.bit(15 - x); color.bit(4) = d2.bit( 7 - x); color.bit(5) = d2.bit(15 - x); color.bit(6) = d3.bit( 7 - x); color.bit(7) = d3.bit(15 - x); output[(tileY * 8 + y) * 512 + (tileX * 8 + x)] = color << 16 | color << 8 | color << 0; } } } } return output; }); graphics.tilesMode7 = parent->append("Mode 7 Tiles"); graphics.tilesMode7->setSize(128, 128); graphics.tilesMode7->setCapture([&]() -> vector { vector output; output.resize(128 * 128); for(u32 tileY : range(16)) { for(u32 tileX : range(16)) { n15 address = tileY * 16 + tileX << 6; for(u32 y : range(8)) { for(u32 x : range(8)) { n8 color = self.vram.data[address + y * 8 + x].byte(1); output[(tileY * 8 + y) * 128 + (tileX * 8 + x)] = color << 16 | color << 8 | color << 0; } } } } return output; }); properties.registers = parent->append("PPU Registers"); properties.registers->setQuery([&] { return registers(); }); } auto PPU::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.vram); parent->remove(memory.oam); parent->remove(memory.cgram); parent->remove(graphics.tiles2bpp); parent->remove(graphics.tiles4bpp); parent->remove(graphics.tiles8bpp); parent->remove(graphics.tilesMode7); parent->remove(properties.registers); memory.vram.reset(); memory.oam.reset(); memory.cgram.reset(); graphics.tiles2bpp.reset(); graphics.tiles4bpp.reset(); graphics.tiles8bpp.reset(); graphics.tilesMode7.reset(); properties.registers.reset(); } auto PPU::Debugger::registers() -> string { string output; output.append("Display Disable: ", self.io.displayDisable, "\n"); output.append("Display Brightness: ", self.io.displayBrightness, "\n"); output.append("BG Mode: ", self.io.bgMode, "\n"); output.append("BG Priority: ", self.io.bgPriority, "\n"); return output; } ares-126/ares/sfc/ppu/io.cpp000066400000000000000000000424741415063341600157600ustar00rootroot00000000000000auto PPU::latchCounters() -> void { cpu.synchronize(ppu); io.hcounter = hdot(); io.vcounter = vcounter(); latch.counters = 1; } inline auto PPU::addressVRAM() const -> n16 { n16 address = io.vramAddress; switch(io.vramMapping) { case 0: return address; case 1: return address.bit( 8,15) << 8 | address.bit(0,4) << 3 | address.bit(5,7); case 2: return address.bit( 9,15) << 9 | address.bit(0,5) << 3 | address.bit(6,8); case 3: return address.bit(10,15) << 10 | address.bit(0,6) << 3 | address.bit(7,9); } unreachable; } inline auto PPU::readVRAM() -> n16 { if(!io.displayDisable && vcounter() < vdisp()) return 0x0000; auto address = addressVRAM(); return vram[address]; } inline auto PPU::writeVRAM(n1 byte, n8 data) -> void { if(!io.displayDisable && vcounter() < vdisp()) return; auto address = addressVRAM(); vram[address].byte(byte) = data; } inline auto PPU::readOAM(n10 address) -> n8 { if(!io.displayDisable && vcounter() < vdisp()) { if(address.bit(9) == 0) return oam.read(0x000 | latch.oamAddress << 2 | address & 1); if(address.bit(9) == 1) return oam.read(0x200 | latch.oamAddress >> 2); } return oam.read(address); } inline auto PPU::writeOAM(n10 address, n8 data) -> void { if(!io.displayDisable && vcounter() < vdisp()) { if(address.bit(9) == 0) return oam.write(0x000 | latch.oamAddress << 2 | address & 1, data); if(address.bit(9) == 1) return oam.write(0x200 | latch.oamAddress >> 2, data); } return oam.write(address, data); } inline auto PPU::readCGRAM(n1 byte, n8 address) -> n8 { if(!io.displayDisable && vcounter() > 0 && vcounter() < vdisp() && hcounter() >= 88 && hcounter() < 1096 ) address = latch.cgramAddress; return dac.cgram[address].byte(byte); } inline auto PPU::writeCGRAM(n8 address, n15 data) -> void { if(!io.displayDisable && vcounter() > 0 && vcounter() < vdisp() && hcounter() >= 88 && hcounter() < 1096 ) address = latch.cgramAddress; dac.cgram[address] = data; } auto PPU::readIO(n24 address, n8 data) -> n8 { cpu.synchronize(ppu); switch((n16)address) { case 0x2104: case 0x2105: case 0x2106: case 0x2108: case 0x2109: case 0x210a: case 0x2114: case 0x2115: case 0x2116: case 0x2118: case 0x2119: case 0x211a: case 0x2124: case 0x2125: case 0x2126: case 0x2128: case 0x2129: case 0x212a: { return ppu1.mdr; } //MPYL case 0x2134: { n24 result = (i16)io.m7a * (i8)(io.m7b >> 8); return ppu1.mdr = result.byte(0); } //MPYM case 0x2135: { n24 result = (i16)io.m7a * (i8)(io.m7b >> 8); return ppu1.mdr = result.byte(1); } //MPYH case 0x2136: { n24 result = (i16)io.m7a * (i8)(io.m7b >> 8); return ppu1.mdr = result.byte(2); } //SLHV case 0x2137: { if(cpu.pio().bit(7)) latchCounters(); return data; //CPU MDR } //OAMDATAREAD case 0x2138: { ppu1.mdr = readOAM(io.oamAddress++); obj.setFirstSprite(); return ppu1.mdr; } //VMDATALREAD case 0x2139: { ppu1.mdr = latch.vram.byte(0); if(io.vramIncrementMode == 0) { latch.vram = readVRAM(); io.vramAddress += io.vramIncrementSize; } return ppu1.mdr; } //VMDATAHREAD case 0x213a: { ppu1.mdr = latch.vram.byte(1); if(io.vramIncrementMode == 1) { latch.vram = readVRAM(); io.vramAddress += io.vramIncrementSize; } return ppu1.mdr; } //CGDATAREAD case 0x213b: { if(io.cgramAddressLatch++ == 0) { ppu2.mdr.bit(0,7) = readCGRAM(0, io.cgramAddress); } else { ppu2.mdr.bit(0,6) = readCGRAM(1, io.cgramAddress++); } return ppu2.mdr; } //OPHCT case 0x213c: { if(latch.hcounter++ == 0) { ppu2.mdr.bit(0,7) = io.hcounter.bit(0,7); } else { ppu2.mdr.bit(0) = io.hcounter.bit(8); } return ppu2.mdr; } //OPVCT case 0x213d: { if(latch.vcounter++ == 0) { ppu2.mdr.bit(0,7) = io.vcounter.bit(0,7); } else { ppu2.mdr.bit(0) = io.vcounter.bit(8); } return ppu2.mdr; } //STAT77 case 0x213e: { ppu1.mdr.bit(0,3) = ppu1.version; ppu1.mdr.bit(5) = 0; ppu1.mdr.bit(6) = obj.io.rangeOver; ppu1.mdr.bit(7) = obj.io.timeOver; return ppu1.mdr; } //STAT78 case 0x213f: { latch.hcounter = 0; latch.vcounter = 0; ppu2.mdr.bit(0,3) = ppu2.version; ppu2.mdr.bit(4) = Region::PAL(); //0 = NTSC, 1 = PAL if(!cpu.pio().bit(7)) { ppu2.mdr.bit(6) = 1; } else { ppu2.mdr.bit(6) = latch.counters; latch.counters = 0; } ppu2.mdr.bit(7) = field(); return ppu2.mdr; } } return data; } auto PPU::writeIO(n24 address, n8 data) -> void { cpu.synchronize(ppu); switch((n16)address) { //INIDISP case 0x2100: { if(io.displayDisable && vcounter() == vdisp()) obj.addressReset(); io.displayBrightness = data.bit(0,3); io.displayDisable = data.bit(7); return; } //OBSEL case 0x2101: { obj.io.tiledataAddress = data.bit(0,2) << 13; obj.io.nameselect = data.bit(3,4); obj.io.baseSize = data.bit(5,7); return; } //OAMADDL case 0x2102: { io.oamBaseAddress.bit(1,8) = data.bit(0,7); obj.addressReset(); return; } //OAMADDH case 0x2103: { io.oamBaseAddress.bit(9) = data.bit(0); io.oamPriority = data.bit(7); obj.addressReset(); return; } //OAMDATA case 0x2104: { n1 latchBit = io.oamAddress.bit(0); n10 address = io.oamAddress++; if(latchBit == 0) latch.oam = data; if(address.bit(9)) { writeOAM(address, data); } else if(latchBit == 1) { writeOAM((address & ~1) + 0, latch.oam); writeOAM((address & ~1) + 1, data); } obj.setFirstSprite(); return; } //BGMODE case 0x2105: { io.bgMode = data.bit(0,2); io.bgPriority = data.bit(3); bg1.io.tileSize = data.bit(4); bg2.io.tileSize = data.bit(5); bg3.io.tileSize = data.bit(6); bg4.io.tileSize = data.bit(7); updateVideoMode(); return; } //MOSAIC case 0x2106: { bool mosaicEnable = mosaic.enable(); bg1.mosaic.enable = data.bit(0); bg2.mosaic.enable = data.bit(1); bg3.mosaic.enable = data.bit(2); bg4.mosaic.enable = data.bit(3); mosaic.size = data.bit(4,7) + 1; if(!mosaicEnable && mosaic.enable()) { //mosaic vcounter is reloaded when mosaic becomes enabled mosaic.vcounter = mosaic.size + 1; } return; } //BG1SC case 0x2107: { bg1.io.screenSize = data.bit(0,1); bg1.io.screenAddress = data.bit(2,7) << 10; return; } //BG2SC case 0x2108: { bg2.io.screenSize = data.bit(0,1); bg2.io.screenAddress = data.bit(2,7) << 10; return; } //BG3SC case 0x2109: { bg3.io.screenSize = data.bit(0,1); bg3.io.screenAddress = data.bit(2,7) << 10; return; } //BG4SC case 0x210a: { bg4.io.screenSize = data.bit(0,1); bg4.io.screenAddress = data.bit(2,7) << 10; return; } //BG12NBA case 0x210b: { bg1.io.tiledataAddress = data.bit(0,3) << 12; bg2.io.tiledataAddress = data.bit(4,7) << 12; return; } //BG34NBA case 0x210c: { bg3.io.tiledataAddress = data.bit(0,3) << 12; bg4.io.tiledataAddress = data.bit(4,7) << 12; return; } //BG1HOFS case 0x210d: { io.hoffsetMode7 = data << 8 | latch.mode7; latch.mode7 = data; bg1.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG1VOFS case 0x210e: { io.voffsetMode7 = data << 8 | latch.mode7; latch.mode7 = data; bg1.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //BG2HOFS case 0x210f: { bg2.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG2VOFS case 0x2110: { bg2.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //BG3HOFS case 0x2111: { bg3.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG3VOFS case 0x2112: { bg3.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //BG4HOFS case 0x2113: { bg4.io.hoffset = data << 8 | latch.bgofsPPU1 & ~7 | latch.bgofsPPU2 & 7; latch.bgofsPPU1 = data; latch.bgofsPPU2 = data; return; } //BG4VOFS case 0x2114: { bg4.io.voffset = data << 8 | latch.bgofsPPU1; latch.bgofsPPU1 = data; return; } //VMAIN case 0x2115: { static constexpr u32 size[4] = {1, 32, 128, 128}; io.vramIncrementSize = size[data.bit(0,1)]; io.vramMapping = data.bit(2,3); io.vramIncrementMode = data.bit(7); return; } //VMADDL case 0x2116: { io.vramAddress.bit(0,7) = data; latch.vram = readVRAM(); return; } //VMADDH case 0x2117: { io.vramAddress.bit(8,15) = data; latch.vram = readVRAM(); return; } //VMDATAL case 0x2118: { writeVRAM(0, data); if(io.vramIncrementMode == 0) io.vramAddress += io.vramIncrementSize; return; } //VMDATAH case 0x2119: { writeVRAM(1, data); if(io.vramIncrementMode == 1) io.vramAddress += io.vramIncrementSize; return; } //M7SEL case 0x211a: { io.hflipMode7 = data.bit(0); io.vflipMode7 = data.bit(1); io.repeatMode7 = data.bit(6,7); return; } //M7A case 0x211b: { io.m7a = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7B case 0x211c: { io.m7b = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7C case 0x211d: { io.m7c = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7D case 0x211e: { io.m7d = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7X case 0x211f: { io.m7x = data << 8 | latch.mode7; latch.mode7 = data; return; } //M7Y case 0x2120: { io.m7y = data << 8 | latch.mode7; latch.mode7 = data; return; } //CGADD case 0x2121: { io.cgramAddress = data; io.cgramAddressLatch = 0; return; } //CGDATA case 0x2122: { if(io.cgramAddressLatch++ == 0) { latch.cgram = data; } else { writeCGRAM(io.cgramAddress++, data.bit(0,6) << 8 | latch.cgram); } return; } //W12SEL case 0x2123: { window.io.bg1.oneInvert = data.bit(0); window.io.bg1.oneEnable = data.bit(1); window.io.bg1.twoInvert = data.bit(2); window.io.bg1.twoEnable = data.bit(3); window.io.bg2.oneInvert = data.bit(4); window.io.bg2.oneEnable = data.bit(5); window.io.bg2.twoInvert = data.bit(6); window.io.bg2.twoEnable = data.bit(7); return; } //W34SEL case 0x2124: { window.io.bg3.oneInvert = data.bit(0); window.io.bg3.oneEnable = data.bit(1); window.io.bg3.twoInvert = data.bit(2); window.io.bg3.twoEnable = data.bit(3); window.io.bg4.oneInvert = data.bit(4); window.io.bg4.oneEnable = data.bit(5); window.io.bg4.twoInvert = data.bit(6); window.io.bg4.twoEnable = data.bit(7); return; } //WOBJSEL case 0x2125: { window.io.obj.oneInvert = data.bit(0); window.io.obj.oneEnable = data.bit(1); window.io.obj.twoInvert = data.bit(2); window.io.obj.twoEnable = data.bit(3); window.io.col.oneInvert = data.bit(4); window.io.col.oneEnable = data.bit(5); window.io.col.twoInvert = data.bit(6); window.io.col.twoEnable = data.bit(7); return; } //WH0 case 0x2126: { window.io.oneLeft = data; return; } //WH1 case 0x2127: { window.io.oneRight = data; return; } //WH2 case 0x2128: { window.io.twoLeft = data; return; } //WH3 case 0x2129: { window.io.twoRight = data; return; } //WBGLOG case 0x212a: { window.io.bg1.mask = data.bit(0,1); window.io.bg2.mask = data.bit(2,3); window.io.bg3.mask = data.bit(4,5); window.io.bg4.mask = data.bit(6,7); return; } //WOBJLOG case 0x212b: { window.io.obj.mask = data.bit(0,1); window.io.col.mask = data.bit(2,3); return; } //TM case 0x212c: { bg1.io.aboveEnable = data.bit(0); bg2.io.aboveEnable = data.bit(1); bg3.io.aboveEnable = data.bit(2); bg4.io.aboveEnable = data.bit(3); obj.io.aboveEnable = data.bit(4); return; } //TS case 0x212d: { bg1.io.belowEnable = data.bit(0); bg2.io.belowEnable = data.bit(1); bg3.io.belowEnable = data.bit(2); bg4.io.belowEnable = data.bit(3); obj.io.belowEnable = data.bit(4); return; } //TMW case 0x212e: { window.io.bg1.aboveEnable = data.bit(0); window.io.bg2.aboveEnable = data.bit(1); window.io.bg3.aboveEnable = data.bit(2); window.io.bg4.aboveEnable = data.bit(3); window.io.obj.aboveEnable = data.bit(4); return; } //TSW case 0x212f: { window.io.bg1.belowEnable = data.bit(0); window.io.bg2.belowEnable = data.bit(1); window.io.bg3.belowEnable = data.bit(2); window.io.bg4.belowEnable = data.bit(3); window.io.obj.belowEnable = data.bit(4); return; } //CGWSEL case 0x2130: { dac.io.directColor = data.bit(0); dac.io.blendMode = data.bit(1); window.io.col.belowMask = data.bit(4,5); window.io.col.aboveMask = data.bit(6,7); return; } //CGADDSUB case 0x2131: { dac.io.bg1.colorEnable = data.bit(0); dac.io.bg2.colorEnable = data.bit(1); dac.io.bg3.colorEnable = data.bit(2); dac.io.bg4.colorEnable = data.bit(3); dac.io.obj.colorEnable = data.bit(4); dac.io.back.colorEnable = data.bit(5); dac.io.colorHalve = data.bit(6); dac.io.colorMode = data.bit(7); return; } //COLDATA case 0x2132: { if(data.bit(5)) dac.io.colorRed = data.bit(0,4); if(data.bit(6)) dac.io.colorGreen = data.bit(0,4); if(data.bit(7)) dac.io.colorBlue = data.bit(0,4); return; } //SETINI case 0x2133: { io.interlace = data.bit(0); obj.io.interlace = data.bit(1); io.overscan = data.bit(2); io.pseudoHires = data.bit(3); io.extbg = data.bit(6); updateVideoMode(); return; } } } auto PPU::updateVideoMode() -> void { self.vdisp = !io.overscan ? 225 : 240; switch(io.bgMode) { case 0: bg1.io.mode = Background::Mode::BPP2; bg2.io.mode = Background::Mode::BPP2; bg3.io.mode = Background::Mode::BPP2; bg4.io.mode = Background::Mode::BPP2; memory::assign(bg1.io.priority, 8, 11); memory::assign(bg2.io.priority, 7, 10); memory::assign(bg3.io.priority, 2, 5); memory::assign(bg4.io.priority, 1, 4); memory::assign(obj.io.priority, 3, 6, 9, 12); break; case 1: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::BPP4; bg3.io.mode = Background::Mode::BPP2; bg4.io.mode = Background::Mode::Inactive; if(io.bgPriority) { memory::assign(bg1.io.priority, 5, 8); memory::assign(bg2.io.priority, 4, 7); memory::assign(bg3.io.priority, 1, 10); memory::assign(obj.io.priority, 2, 3, 6, 9); } else { memory::assign(bg1.io.priority, 6, 9); memory::assign(bg2.io.priority, 5, 8); memory::assign(bg3.io.priority, 1, 3); memory::assign(obj.io.priority, 2, 4, 7, 10); } break; case 2: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::BPP4; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 3: bg1.io.mode = Background::Mode::BPP8; bg2.io.mode = Background::Mode::BPP4; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 4: bg1.io.mode = Background::Mode::BPP8; bg2.io.mode = Background::Mode::BPP2; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 5: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::BPP2; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3, 7); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 8); break; case 6: bg1.io.mode = Background::Mode::BPP4; bg2.io.mode = Background::Mode::Inactive; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 2, 5); memory::assign(obj.io.priority, 1, 3, 4, 6); break; case 7: if(!io.extbg) { bg1.io.mode = Background::Mode::Mode7; bg2.io.mode = Background::Mode::Inactive; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 2); memory::assign(obj.io.priority, 1, 3, 4, 5); } else { bg1.io.mode = Background::Mode::Mode7; bg2.io.mode = Background::Mode::Mode7; bg3.io.mode = Background::Mode::Inactive; bg4.io.mode = Background::Mode::Inactive; memory::assign(bg1.io.priority, 3); memory::assign(bg2.io.priority, 1, 5); memory::assign(obj.io.priority, 2, 4, 6, 7); } break; } } ares-126/ares/sfc/ppu/main.cpp000066400000000000000000000141021415063341600162600ustar00rootroot00000000000000auto PPU::main() -> void { if(vcounter() == 0) { self.interlace = io.interlace; self.overscan = io.overscan; bg1.frame(); bg2.frame(); bg3.frame(); bg4.frame(); obj.frame(); } mosaic.scanline(); bg1.scanline(); bg2.scanline(); bg3.scanline(); bg4.scanline(); obj.scanline(); window.scanline(); dac.scanline(); if(vcounter() == 240) { if(self.interlace == 0) screen->setProgressive(1); if(self.interlace == 1) screen->setInterlace(field()); if(overscanEnable->value() == 0) screen->setViewport(0, 18, 512, 448); if(overscanEnable->value() == 1) screen->setViewport(0, 0, 512, 480); screen->frame(); scheduler.exit(Event::Frame); } if(vcounter() > 240) { step(hperiod()); return; } #define cycles02(index) cycle() #define cycles04(index) cycles02(index); cycles02(index + 2) #define cycles08(index) cycles04(index); cycles04(index + 4) #define cycles16(index) cycles08(index); cycles08(index + 8) #define cycles32(index) cycles16(index); cycles16(index + 16) #define cycles64(index) cycles32(index); cycles32(index + 32) cycles16( 0); cycles04( 16); //H = 20 cycles04( 20); cycles04( 24); //H = 28 cycles04( 28); cycles32( 32); cycles64( 64); cycles64( 128); cycles64( 192); cycles64( 256); cycles64( 320); cycles64( 384); cycles64( 448); cycles64( 512); cycles64( 576); cycles64( 640); cycles64( 704); cycles64( 768); cycles64( 832); cycles64( 896); cycles64( 960); cycles32(1024); cycles16(1056); cycles08(1072); //H = 1080 obj.fetch(); //H = 1352 (max) step(hperiod() - hcounter()); } //it would be lovely if we could put these functions inside cycle(), //but due to the multiple template instantiations, that destroys L1 cache. //it's a performance penalty of about 25% for the entire(!!) emulator. auto PPU::cycleObjectEvaluate() -> void { obj.evaluate(hcounter() >> 3); } template auto PPU::cycleBackgroundFetch() -> void { switch(io.bgMode) { case 0: if constexpr(Cycle == 0) bg4.fetchNameTable(); if constexpr(Cycle == 1) bg3.fetchNameTable(); if constexpr(Cycle == 2) bg2.fetchNameTable(); if constexpr(Cycle == 3) bg1.fetchNameTable(); if constexpr(Cycle == 4) bg4.fetchCharacter(0); if constexpr(Cycle == 5) bg3.fetchCharacter(0); if constexpr(Cycle == 6) bg2.fetchCharacter(0); if constexpr(Cycle == 7) bg1.fetchCharacter(0); break; case 1: if constexpr(Cycle == 0) bg3.fetchNameTable(); if constexpr(Cycle == 1) bg2.fetchNameTable(); if constexpr(Cycle == 2) bg1.fetchNameTable(); if constexpr(Cycle == 3) bg3.fetchCharacter(0); if constexpr(Cycle == 4) bg2.fetchCharacter(0); if constexpr(Cycle == 5) bg2.fetchCharacter(1); if constexpr(Cycle == 6) bg1.fetchCharacter(0); if constexpr(Cycle == 7) bg1.fetchCharacter(1); break; case 2: if constexpr(Cycle == 0) bg2.fetchNameTable(); if constexpr(Cycle == 1) bg1.fetchNameTable(); if constexpr(Cycle == 2) bg3.fetchOffset(0); if constexpr(Cycle == 3) bg3.fetchOffset(8); if constexpr(Cycle == 4) bg2.fetchCharacter(0); if constexpr(Cycle == 5) bg2.fetchCharacter(1); if constexpr(Cycle == 6) bg1.fetchCharacter(0); if constexpr(Cycle == 7) bg1.fetchCharacter(1); break; case 3: if constexpr(Cycle == 0) bg2.fetchNameTable(); if constexpr(Cycle == 1) bg1.fetchNameTable(); if constexpr(Cycle == 2) bg2.fetchCharacter(0); if constexpr(Cycle == 3) bg2.fetchCharacter(1); if constexpr(Cycle == 4) bg1.fetchCharacter(0); if constexpr(Cycle == 5) bg1.fetchCharacter(1); if constexpr(Cycle == 6) bg1.fetchCharacter(2); if constexpr(Cycle == 7) bg1.fetchCharacter(3); break; case 4: if constexpr(Cycle == 0) bg2.fetchNameTable(); if constexpr(Cycle == 1) bg1.fetchNameTable(); if constexpr(Cycle == 2) bg3.fetchOffset(0); if constexpr(Cycle == 3) bg2.fetchCharacter(0); if constexpr(Cycle == 4) bg1.fetchCharacter(0); if constexpr(Cycle == 5) bg1.fetchCharacter(1); if constexpr(Cycle == 6) bg1.fetchCharacter(2); if constexpr(Cycle == 7) bg1.fetchCharacter(3); break; case 5: if constexpr(Cycle == 0) bg2.fetchNameTable(); if constexpr(Cycle == 1) bg1.fetchNameTable(); if constexpr(Cycle == 2) bg2.fetchCharacter(0, 0); if constexpr(Cycle == 3) bg2.fetchCharacter(0, 1); if constexpr(Cycle == 4) bg1.fetchCharacter(0, 0); if constexpr(Cycle == 5) bg1.fetchCharacter(1, 0); if constexpr(Cycle == 6) bg1.fetchCharacter(0, 1); if constexpr(Cycle == 7) bg1.fetchCharacter(1, 1); break; case 6: if constexpr(Cycle == 0) bg2.fetchNameTable(); if constexpr(Cycle == 1) bg1.fetchNameTable(); if constexpr(Cycle == 2) bg3.fetchOffset(0); if constexpr(Cycle == 3) bg3.fetchOffset(8); if constexpr(Cycle == 4) bg1.fetchCharacter(0, 0); if constexpr(Cycle == 5) bg1.fetchCharacter(1, 0); if constexpr(Cycle == 6) bg1.fetchCharacter(0, 1); if constexpr(Cycle == 7) bg1.fetchCharacter(1, 1); break; case 7: //handled separately by mode7.cpp break; } } auto PPU::cycleBackgroundBegin() -> void { bg1.begin(); bg2.begin(); bg3.begin(); bg4.begin(); } auto PPU::cycleBackgroundBelow() -> void { bg1.run(1); bg2.run(1); bg3.run(1); bg4.run(1); } auto PPU::cycleBackgroundAbove() -> void { bg1.run(0); bg2.run(0); bg3.run(0); bg4.run(0); } auto PPU::cycleRenderPixel() -> void { obj.run(); window.run(); dac.run(); } template auto PPU::cycle() -> void { if constexpr(Cycle >= 0 && Cycle <= 1016 && (Cycle - 0) % 8 == 0) cycleObjectEvaluate(); if constexpr(Cycle >= 0 && Cycle <= 1054 && (Cycle - 0) % 4 == 0) cycleBackgroundFetch<(Cycle - 0) / 4 & 7>(); if constexpr(Cycle == 56 ) cycleBackgroundBegin(); if constexpr(Cycle >= 56 && Cycle <= 1078 && (Cycle - 56) % 4 == 0) cycleBackgroundBelow(); if constexpr(Cycle >= 56 && Cycle <= 1078 && (Cycle - 56) % 4 == 2) cycleBackgroundAbove(); if constexpr(Cycle >= 56 && Cycle <= 1078 && (Cycle - 56) % 4 == 2) cycleRenderPixel(); step(); } ares-126/ares/sfc/ppu/mode7.cpp000066400000000000000000000037541415063341600163620ustar00rootroot00000000000000auto PPU::Background::runMode7() -> void { s32 a = (i16)ppu.io.m7a; s32 b = (i16)ppu.io.m7b; s32 c = (i16)ppu.io.m7c; s32 d = (i16)ppu.io.m7d; s32 hcenter = (i13)ppu.io.m7x; s32 vcenter = (i13)ppu.io.m7y; s32 hoffset = (i13)ppu.io.hoffsetMode7; s32 voffset = (i13)ppu.io.voffsetMode7; u32 x = mosaic.hoffset; u32 y = ppu.vcounter(); if(ppu.bg1.mosaic.enable) y -= ppu.mosaic.voffset(); //BG2 vertical mosaic uses BG1 mosaic enable if(!mosaic.enable) { mosaic.hoffset += 1; } else if(--mosaic.hcounter == 0) { mosaic.hcounter = ppu.mosaic.size; mosaic.hoffset += ppu.mosaic.size; } if(ppu.io.hflipMode7) x = 255 - x; if(ppu.io.vflipMode7) y = 255 - y; //13-bit sign extend: --s---nnnnnnnnnn -> ssssssnnnnnnnnnn auto clip = [](s32 n) -> s32 { return n & 0x2000 ? (n | ~1023) : (n & 1023); }; s32 originX = (a * clip(hoffset - hcenter) & ~63) + (b * clip(voffset - vcenter) & ~63) + (b * y & ~63) + (hcenter << 8); s32 originY = (c * clip(hoffset - hcenter) & ~63) + (d * clip(voffset - vcenter) & ~63) + (d * y & ~63) + (vcenter << 8); s32 pixelX = originX + a * x >> 8; s32 pixelY = originY + c * x >> 8; n16 paletteAddress = (n3)pixelY << 3 | (n3)pixelX; n7 tileX = pixelX >> 3; n7 tileY = pixelY >> 3; n16 tileAddress = tileY << 7 | tileX; bool outOfBounds = (pixelX | pixelY) & ~1023; n8 tile = ppu.io.repeatMode7 == 3 && outOfBounds ? 0 : ppu.vram[tileAddress] >> 0; n8 palette = ppu.io.repeatMode7 == 2 && outOfBounds ? 0 : ppu.vram[tile << 6 | paletteAddress] >> 8; u32 priority; if(id == ID::BG1) { priority = io.priority[0]; } else if(id == ID::BG2) { priority = io.priority[palette.bit(7)]; palette.bit(7) = 0; } if(palette == 0) return; if(io.aboveEnable) { output.above.priority = priority; output.above.palette = palette; output.above.paletteGroup = 0; } if(io.belowEnable) { output.below.priority = priority; output.below.palette = palette; output.below.paletteGroup = 0; } } ares-126/ares/sfc/ppu/mosaic.cpp000066400000000000000000000011241415063341600166070ustar00rootroot00000000000000inline auto PPU::Mosaic::enable() const -> bool { if(self.bg1.mosaic.enable) return true; if(self.bg2.mosaic.enable) return true; if(self.bg3.mosaic.enable) return true; if(self.bg4.mosaic.enable) return true; return false; } inline auto PPU::Mosaic::voffset() const -> u32 { return size - vcounter; } //H = 0 auto PPU::Mosaic::scanline() -> void { if(self.vcounter() == 1) { vcounter = enable() ? size + 1 : 0; } if(vcounter && !--vcounter) { vcounter = enable() ? size + 0 : 0; } } auto PPU::Mosaic::power() -> void { size = (n4)random() + 1; vcounter = 0; } ares-126/ares/sfc/ppu/oam.cpp000066400000000000000000000046251415063341600161210ustar00rootroot00000000000000auto PPU::OAM::read(n10 address) -> n8 { n8 data; if(!address.bit(9)) { n7 n = address >> 2; //object# address &= 3; if(address == 0) return object[n].x.bit(0,7); if(address == 1) return object[n].y; if(address == 2) return object[n].character; data.bit(0) = object[n].nameselect; data.bit(1,3) = object[n].palette; data.bit(4,5) = object[n].priority; data.bit(6) = object[n].hflip; data.bit(7) = object[n].vflip; return data; } n7 n = (n5)address << 2; //object# data.bit(0) = object[n + 0].x.bit(8); data.bit(1) = object[n + 0].size; data.bit(2) = object[n + 1].x.bit(8); data.bit(3) = object[n + 1].size; data.bit(4) = object[n + 2].x.bit(8); data.bit(5) = object[n + 2].size; data.bit(6) = object[n + 3].x.bit(8); data.bit(7) = object[n + 3].size; return data; } auto PPU::OAM::write(n10 address, n8 data) -> void { if(!address.bit(9)) { n7 n = address >> 2; //object# address &= 3; if(address == 0) { object[n].x.bit(0,7) = data; return; } if(address == 1) { object[n].y = data; return; } if(address == 2) { object[n].character = data; return; } object[n].nameselect = data.bit(0); object[n].palette = data.bit(1,3); object[n].priority = data.bit(4,5); object[n].hflip = data.bit(6); object[n].vflip = data.bit(7); } else { n7 n = (n5)address << 2; //object# object[n + 0].x.bit(8) = data.bit(0); object[n + 0].size = data.bit(1); object[n + 1].x.bit(8) = data.bit(2); object[n + 1].size = data.bit(3); object[n + 2].x.bit(8) = data.bit(4); object[n + 2].size = data.bit(5); object[n + 3].x.bit(8) = data.bit(6); object[n + 3].size = data.bit(7); } } inline auto PPU::OAM::Object::width() const -> u32 { if(size == 0) { static constexpr u32 width[] = { 8, 8, 8, 16, 16, 32, 16, 16}; return width[ppu.obj.io.baseSize]; } else { static constexpr u32 width[] = {16, 32, 64, 32, 64, 64, 32, 32}; return width[ppu.obj.io.baseSize]; } } inline auto PPU::OAM::Object::height() const -> u32 { if(size == 0) { if(ppu.obj.io.interlace && ppu.obj.io.baseSize >= 6) return 16; //hardware quirk static constexpr u32 height[] = { 8, 8, 8, 16, 16, 32, 32, 32}; return height[ppu.obj.io.baseSize]; } else { static constexpr u32 height[] = {16, 32, 64, 32, 64, 64, 64, 32}; return height[ppu.obj.io.baseSize]; } } ares-126/ares/sfc/ppu/object.cpp000066400000000000000000000120711415063341600166050ustar00rootroot00000000000000inline auto PPU::Object::addressReset() -> void { self.io.oamAddress = self.io.oamBaseAddress; setFirstSprite(); } inline auto PPU::Object::setFirstSprite() -> void { io.firstSprite = 0; if(self.io.oamPriority) io.firstSprite = self.io.oamAddress >> 2; } auto PPU::Object::frame() -> void { io.timeOver = false; io.rangeOver = false; } auto PPU::Object::scanline() -> void { latch.firstSprite = io.firstSprite; t.x = 0; t.y = self.vcounter(); t.itemCount = 0; t.tileCount = 0; t.active = !t.active; auto oamItem = t.item[t.active]; auto oamTile = t.tile[t.active]; for(u32 n : range(32)) oamItem[n].valid = false; for(u32 n : range(34)) oamTile[n].valid = false; if(t.y == self.vdisp() && !self.io.displayDisable) addressReset(); if(t.y >= self.vdisp() - 1 || self.io.displayDisable) return; } auto PPU::Object::evaluate(n7 index) -> void { if(self.io.displayDisable) return; if(t.itemCount > 32) return; auto oamItem = t.item[t.active]; auto oamTile = t.tile[t.active]; n7 sprite = latch.firstSprite + index; if(!onScanline(oam.object[sprite])) return; self.latch.oamAddress = sprite; if(t.itemCount++ < 32) { oamItem[t.itemCount - 1] = {true, sprite}; } } auto PPU::Object::onScanline(PPU::OAM::Object& sprite) -> bool { if(sprite.x > 256 && sprite.x + sprite.width() - 1 < 512) return false; u32 height = sprite.height() >> io.interlace; return (bool)within<0,511>(sprite.y, height, t.y); } auto PPU::Object::run() -> void { output.above.priority = 0; output.below.priority = 0; auto oamTile = t.tile[!t.active]; u32 x = t.x++; for(u32 n : range(34)) { const auto& tile = oamTile[n]; if(!tile.valid) break; s32 px = x - (i9)tile.x; if(px & ~7) continue; u32 color = 0, shift = tile.hflip ? px : 7 - px; color += tile.data >> shift + 0 & 1; color += tile.data >> shift + 7 & 2; color += tile.data >> shift + 14 & 4; color += tile.data >> shift + 21 & 8; if(color) { if(io.aboveEnable) { output.above.palette = tile.palette + color; output.above.priority = io.priority[tile.priority]; } if(io.belowEnable) { output.below.palette = tile.palette + color; output.below.priority = io.priority[tile.priority]; } } } } auto PPU::Object::fetch() -> void { auto oamItem = t.item[t.active]; auto oamTile = t.tile[t.active]; for(u32 i : reverse(range(32))) { if(!oamItem[i].valid) continue; if(self.io.displayDisable || self.vcounter() >= self.vdisp() - 1) { self.step(8); continue; } self.latch.oamAddress = oamItem[i].index; const auto& sprite = oam.object[self.latch.oamAddress]; u32 tileWidth = sprite.width() >> 3; s32 x = sprite.x; s32 y = t.y - sprite.y & 255; if(io.interlace) y <<= 1; if(sprite.vflip) { if(sprite.width() == sprite.height()) { y = sprite.height() - 1 - y; } else if(y < sprite.width()) { y = sprite.width() - 1 - y; } else { y = sprite.width() + (sprite.width() - 1) - (y - sprite.width()); } } if(io.interlace) { y = !sprite.vflip ? y + self.field() : y - self.field(); } x &= 511; y &= 255; n16 tiledataAddress = io.tiledataAddress; if(sprite.nameselect) tiledataAddress += 1 + io.nameselect << 12; n16 chrx = sprite.character.bit(0,3); n16 chry = (sprite.character.bit(4,7) + (y >> 3) & 15) << 4; for(u32 tx : range(tileWidth)) { u32 sx = x + (tx << 3) & 511; if(x != 256 && sx >= 256 && sx + 7 < 512) continue; if(t.tileCount++ >= 34) break; u32 n = t.tileCount - 1; oamTile[n].valid = true; oamTile[n].x = sx; oamTile[n].priority = sprite.priority; oamTile[n].palette = 128 + (sprite.palette << 4); oamTile[n].hflip = sprite.hflip; u32 mx = !sprite.hflip ? tx : tileWidth - 1 - tx; u32 pos = tiledataAddress + ((chry + (chrx + mx & 15)) << 4); n16 address = (pos & 0xfff0) + (y & 7); if(!self.io.displayDisable) oamTile[n].data.bit( 0,15) = vram[address + 0]; self.step(4); if(!self.io.displayDisable) oamTile[n].data.bit(16,31) = vram[address + 8]; self.step(4); } } io.rangeOver |= t.itemCount > 32; io.timeOver |= t.tileCount > 34; } auto PPU::Object::power() -> void { t.x = 0; t.y = 0; t.itemCount = 0; t.tileCount = 0; t.active = 0; for(u32 p : range(2)) { for(auto& item : t.item[p]) { item.valid = false; item.index = 0; } for(auto& tile : t.tile[p]) { tile.valid = false; tile.x = 0; tile.priority = 0; tile.palette = 0; tile.hflip = 0; tile.data = 0; } } io.aboveEnable = random(); io.belowEnable = random(); io.interlace = random(); io.baseSize = random(); io.nameselect = random(); io.tiledataAddress = (random() & 7) << 13; io.firstSprite = 0; for(auto& p : io.priority) p = 0; io.timeOver = false; io.rangeOver = false; latch = {}; output.above.palette = 0; output.above.priority = 0; output.below.palette = 0; output.below.priority = 0; } ares-126/ares/sfc/ppu/ppu.cpp000066400000000000000000000112351415063341600161440ustar00rootroot00000000000000#if defined(PROFILE_PERFORMANCE) #include "../ppu-performance/ppu.cpp" #else #include namespace ares::SuperFamicom { PPU ppu; #include "main.cpp" #include "io.cpp" #include "mosaic.cpp" #include "background.cpp" #include "mode7.cpp" #include "oam.cpp" #include "object.cpp" #include "window.cpp" #include "dac.cpp" #include "color.cpp" #include "debugger.cpp" #include "serialization.cpp" #include "counter/serialization.cpp" auto PPU::load(Node::Object parent) -> void { node = parent->append("PPU"); screen = node->append("Screen", 512, 480); screen->colors(1 << 19, {&PPU::color, this}); screen->setSize(512, 480); screen->setScale(0.5, 0.5); screen->setAspect(8.0, 7.0); versionPPU1 = node->append("PPU1 Version", 1); versionPPU1->setAllowedValues({1}); versionPPU2 = node->append("PPU2 Version", 3); versionPPU2->setAllowedValues({1, 2, 3}); vramSize = node->append("VRAM", 64_KiB); vramSize->setAllowedValues({64_KiB, 128_KiB}); overscanEnable = screen->append("Overscan", true, [&](auto value) { if(value == 0) screen->setSize(512, 448); if(value == 1) screen->setSize(512, 480); }); overscanEnable->setDynamic(true); colorEmulation = screen->append("Color Emulation", true, [&](auto value) { screen->resetPalette(); }); colorEmulation->setDynamic(true); colorBleed = screen->append("Color Bleed", true, [&](auto value) { screen->setColorBleed(value); }); colorBleed->setDynamic(true); debugger.load(node); } auto PPU::unload() -> void { debugger.unload(node); versionPPU1.reset(); versionPPU2.reset(); vramSize.reset(); overscanEnable.reset(); colorEmulation.reset(); colorBleed.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto PPU::map() -> void { function reader{&PPU::readIO, this}; function writer{&PPU::writeIO, this}; bus.map(reader, writer, "00-3f,80-bf:2100-213f"); } inline auto PPU::step() -> void { tick(2); Thread::step(2); Thread::synchronize(cpu); } inline auto PPU::step(u32 clocks) -> void { clocks >>= 1; while(clocks--) { tick(2); Thread::step(2); Thread::synchronize(cpu); } } auto PPU::power(bool reset) -> void { Thread::create(system.cpuFrequency(), {&PPU::main, this}); PPUcounter::reset(); screen->power(); if(!reset) random.array({vram.data, sizeof(vram.data)}); ppu1.version = versionPPU1->value(); ppu1.mdr = random.bias(0xff); ppu2.version = versionPPU2->value(); ppu2.mdr = random.bias(0xff); vram.mask = vramSize->value() / sizeof(n16) - 1; if(vram.mask != 0xffff) vram.mask = 0x7fff; for(auto& object : oam.object) { object.x = 0; object.y = 0; object.character = 0; object.nameselect = 0; object.vflip = 0; object.hflip = 0; object.priority = 0; object.palette = 0; object.size = 0; } random.array({cgram, sizeof(cgram)}); for(auto& word : cgram) word &= 0x7fff; latch.vram = random(); latch.oam = random(); latch.cgram = random(); latch.bgofsPPU1 = random(); latch.bgofsPPU2 = random(); latch.mode7 = random(); latch.counters = false; latch.hcounter = 0; latch.vcounter = 0; latch.oamAddress = 0x0000; latch.cgramAddress = 0x00; //$2100 INIDISP io.displayDisable = true; io.displayBrightness = 0; //$2102 OAMADDL //$2103 OAMADDH io.oamBaseAddress = random() & ~1; io.oamAddress = random(); io.oamPriority = random(); //$2105 BGMODE io.bgPriority = false; io.bgMode = 0; //$210d BG1HOFS io.hoffsetMode7 = random(); //$210e BG1VOFS io.voffsetMode7 = random(); //$2115 VMAIN io.vramIncrementMode = random.bias(1); io.vramMapping = random(); io.vramIncrementSize = 1; //$2116 VMADDL //$2117 VMADDH io.vramAddress = random(); //$211a M7SEL io.repeatMode7 = random(); io.vflipMode7 = random(); io.hflipMode7 = random(); //$211b M7A io.m7a = random(); //$211c M7B io.m7b = random(); //$211d M7C io.m7c = random(); //$211e M7D io.m7d = random(); //$211f M7X io.m7x = random(); //$2120 M7Y io.m7y = random(); //$2121 CGADD io.cgramAddress = random(); io.cgramAddressLatch = random(); //$2133 SETINI io.extbg = random(); io.pseudoHires = random(); io.overscan = false; io.interlace = false; //$213c OPHCT io.hcounter = 0; //$213d OPVCT io.vcounter = 0; mosaic.power(); bg1.power(); bg2.power(); bg3.power(); bg4.power(); obj.power(); window.power(); dac.power(); updateVideoMode(); } } #endif ares-126/ares/sfc/ppu/ppu.hpp000066400000000000000000000234741415063341600161610ustar00rootroot00000000000000#if defined(PROFILE_PERFORMANCE) #include "../ppu-performance/ppu.hpp" #else struct PPU : Thread, PPUcounter { Node::Object node; Node::Video::Screen screen; Node::Setting::Natural versionPPU1; Node::Setting::Natural versionPPU2; Node::Setting::Natural vramSize; Node::Setting::Boolean overscanEnable; Node::Setting::Boolean colorEmulation; Node::Setting::Boolean colorBleed; struct Debugger { PPU& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto registers() -> string; struct Memory { Node::Debugger::Memory vram; Node::Debugger::Memory oam; Node::Debugger::Memory cgram; } memory; struct Graphics { Node::Debugger::Graphics tiles2bpp; Node::Debugger::Graphics tiles4bpp; Node::Debugger::Graphics tiles8bpp; Node::Debugger::Graphics tilesMode7; } graphics; struct Properties { Node::Debugger::Properties registers; } properties; } debugger{*this}; auto interlace() const -> bool { return self.interlace; } auto overscan() const -> bool { return self.overscan; } auto vdisp() const -> u32 { return self.vdisp; } //ppu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto map() -> void; auto power(bool reset) -> void; //main.cpp auto main() -> void; noinline auto cycleObjectEvaluate() -> void; template noinline auto cycleBackgroundFetch() -> void; noinline auto cycleBackgroundBegin() -> void; noinline auto cycleBackgroundBelow() -> void; noinline auto cycleBackgroundAbove() -> void; noinline auto cycleRenderPixel() -> void; template auto cycle() -> void; //io.cpp auto latchCounters() -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; //private: //ppu.cpp auto step() -> void; auto step(u32 clocks) -> void; //io.cpp auto addressVRAM() const -> n16; auto readVRAM() -> n16; auto writeVRAM(n1 byte, n8 data) -> void; auto readOAM(n10 address) -> n8; auto writeOAM(n10 address, n8 data) -> void; auto readCGRAM(n1 byte, n8 address) -> n8; auto writeCGRAM(n8 address, n15 data) -> void; auto readIO(n24 address, n8 data) -> n8; auto writeIO(n24 address, n8 data) -> void; auto updateVideoMode() -> void; struct VRAM { auto& operator[](u32 address) { return data[address & mask]; } n16 data[64_KiB]; n16 mask = 0x7fff; } vram; struct OAM { //oam.cpp auto read(n10 address) -> n8; auto write(n10 address, n8 data) -> void; struct Object { //oam.cpp auto width() const -> uint; auto height() const -> uint; //serialization.cpp auto serialize(serializer&) -> void; n9 x; n8 y; n8 character; n1 nameselect; n1 vflip; n1 hflip; n2 priority; n3 palette; n1 size; } object[128]; } oam; n15 cgram[256]; struct { n1 interlace; n1 overscan; n9 vdisp; } self; struct { n4 version; n8 mdr; } ppu1, ppu2; struct Latch { n16 vram; n8 oam; n8 cgram; n8 bgofsPPU1; n3 bgofsPPU2; n8 mode7; n1 counters; n1 hcounter; n1 vcounter; n10 oamAddress; n8 cgramAddress; } latch; struct IO { //$2100 INIDISP n4 displayBrightness; n1 displayDisable; //$2102 OAMADDL //$2103 OAMADDH n10 oamBaseAddress; n10 oamAddress; n1 oamPriority; //$2105 BGMODE n3 bgMode; n1 bgPriority; //$210d BG1HOFS n16 hoffsetMode7; //$210e BG1VOFS n16 voffsetMode7; //$2115 VMAIN n8 vramIncrementSize; n2 vramMapping; n1 vramIncrementMode; //$2116 VMADDL //$2117 VMADDH n16 vramAddress; //$211a M7SEL n1 hflipMode7; n1 vflipMode7; n2 repeatMode7; //$211b M7A n16 m7a; //$211c M7B n16 m7b; //$211d M7C n16 m7c; //$211e M7D n16 m7d; //$211f M7X n16 m7x; //$2120 M7Y n16 m7y; //$2121 CGADD n8 cgramAddress; n1 cgramAddressLatch; //$2133 SETINI n1 interlace; n1 overscan; n1 pseudoHires; n1 extbg; //$213c OPHCT n16 hcounter; //$213d OPVCT n16 vcounter; } io; struct Mosaic { PPU& self; //mosaic.cpp auto enable() const -> bool; auto voffset() const -> u32; auto scanline() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; n5 size; n5 vcounter; } mosaic{*this}; struct Background { struct ID { enum : u32 { BG1, BG2, BG3, BG4 }; }; PPU& self; VRAM& vram; const u32 id; //background.cpp auto hires() const -> bool; auto frame() -> void; auto scanline() -> void; auto begin() -> void; auto fetchNameTable() -> void; auto fetchOffset(u32 y) -> void; auto fetchCharacter(u32 index, bool half = 0) -> void; auto run(bool screen) -> void; auto power() -> void; //mode7.cpp auto runMode7() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct Mode { enum : u32 { BPP2, BPP4, BPP8, Mode7, Inactive }; }; struct ScreenSize { enum : u32 { Size32x32, Size32x64, Size64x32, Size64x64 }; }; struct TileSize { enum : u32 { Size8x8, Size16x16 }; }; struct Screen { enum : u32 { Above, Below }; }; struct IO { n2 screenSize; n16 screenAddress; n16 tiledataAddress; n1 tileSize; n8 mode; n8 priority[2]; n1 aboveEnable; n1 belowEnable; n16 hoffset; n16 voffset; } io; struct Pixel { n8 priority; //0 = none (transparent) n8 palette; n3 paletteGroup; } above, below; struct Output { Pixel above; Pixel below; } output; struct Mosaic { n1 enable; n16 hcounter; n16 hoffset; Pixel pixel; } mosaic; struct OffsetPerTile { //set in BG3 only; used by BG1 and BG2 n16 hoffset; n16 voffset; } opt; struct Tile { n16 address; n10 character; n8 palette; n3 paletteGroup; n8 priority; n1 hmirror; n1 vmirror; n16 data[4]; } tiles[66]; n7 renderingIndex; n3 pixelCounter; }; Background bg1{*this, vram, Background::ID::BG1}; Background bg2{*this, vram, Background::ID::BG2}; Background bg3{*this, vram, Background::ID::BG3}; Background bg4{*this, vram, Background::ID::BG4}; struct Object { PPU& self; VRAM& vram; OAM& oam; //object.cpp auto addressReset() -> void; auto setFirstSprite() -> void; auto frame() -> void; auto scanline() -> void; auto evaluate(n7 index) -> void; auto run() -> void; auto fetch() -> void; auto power() -> void; auto onScanline(PPU::OAM::Object&) -> bool; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 aboveEnable; n1 belowEnable; n1 interlace; n16 tiledataAddress; n2 nameselect; n3 baseSize; n7 firstSprite; n8 priority[4]; n1 rangeOver; n1 timeOver; } io; struct Latch { n7 firstSprite; } latch; struct Item { n1 valid; n7 index; }; struct Tile { n1 valid; n9 x; n2 priority; n8 palette; n1 hflip; n32 data; }; struct State { u32 x; u32 y; u32 itemCount; u32 tileCount; bool active; Item item[2][32]; Tile tile[2][34]; } t; struct Output { struct Pixel { n8 priority; //0 = none (transparent) n8 palette; } above, below; } output; } obj{*this, vram, oam}; struct Window { PPU& self; Background& bg1; Background& bg2; Background& bg3; Background& bg4; Object& obj; //window.cpp auto scanline() -> void; auto run() -> void; auto test(bool oneEnable, bool one, bool twoEnable, bool two, u32 mask) -> bool; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { struct Layer { n1 oneInvert; n1 oneEnable; n1 twoInvert; n1 twoEnable; n2 mask; n1 aboveEnable; n1 belowEnable; } bg1, bg2, bg3, bg4, obj; struct Color { n1 oneEnable; n1 oneInvert; n1 twoEnable; n1 twoInvert; n2 mask; n2 aboveMask; n2 belowMask; } col; n8 oneLeft; n8 oneRight; n8 twoLeft; n8 twoRight; } io; struct Output { struct Pixel { n1 colorEnable; } above, below; } output; struct { u32 x; }; } window{*this, bg1, bg2, bg3, bg4, obj}; struct DAC { PPU& self; Background& bg1; Background& bg2; Background& bg3; Background& bg4; Object& obj; Window& window; n15* cgram; //dac.cpp auto scanline() -> void; auto run() -> void; auto power() -> void; auto below(bool hires) -> n16; auto above() -> n16; auto blend(u32 x, u32 y) const -> n15; auto paletteColor(n8 palette) const -> n15; auto directColor(n8 palette, n3 paletteGroup) const -> n15; auto fixedColor() const -> n15; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n1 directColor; n1 blendMode; struct Layer { n1 colorEnable; } bg1, bg2, bg3, bg4, obj, back; n1 colorHalve; n1 colorMode; n5 colorRed; n5 colorGreen; n5 colorBlue; } io; struct Math { struct Screen { n15 color; n1 colorEnable; } above, below; n1 transparent; n1 blendMode; n1 colorHalve; } math; //unserialized: u32* line = nullptr; } dac{*this, bg1, bg2, bg3, bg3, obj, window, cgram}; }; extern PPU ppu; #endif ares-126/ares/sfc/ppu/serialization.cpp000066400000000000000000000113201415063341600202100ustar00rootroot00000000000000auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); PPUcounter::serialize(s); s(self.interlace); s(self.overscan); s(self.vdisp); s(array_span{vram.data, vram.mask + 1}); s(oam.object); s(cgram); s(ppu1.version); s(ppu1.mdr); s(ppu2.version); s(ppu2.mdr); s(latch.vram); s(latch.oam); s(latch.cgram); s(latch.bgofsPPU1); s(latch.bgofsPPU2); s(latch.mode7); s(latch.counters); s(latch.hcounter); s(latch.vcounter); s(latch.oamAddress); s(latch.cgramAddress); s(io.displayBrightness); s(io.displayDisable); s(io.oamBaseAddress); s(io.oamAddress); s(io.oamPriority); s(io.bgMode); s(io.bgPriority); s(io.hoffsetMode7); s(io.voffsetMode7); s(io.vramIncrementSize); s(io.vramMapping); s(io.vramIncrementMode); s(io.vramAddress); s(io.hflipMode7); s(io.vflipMode7); s(io.repeatMode7); s(io.m7a); s(io.m7b); s(io.m7c); s(io.m7d); s(io.m7x); s(io.m7y); s(io.cgramAddress); s(io.cgramAddressLatch); s(io.interlace); s(io.overscan); s(io.pseudoHires); s(io.extbg); s(io.hcounter); s(io.vcounter); s(mosaic); s(bg1); s(bg2); s(bg3); s(bg4); s(obj); s(window); s(dac); } auto PPU::OAM::Object::serialize(serializer& s) -> void { s(x); s(y); s(character); s(nameselect); s(vflip); s(hflip); s(priority); s(palette); s(size); } auto PPU::Mosaic::serialize(serializer& s) -> void { s(size); s(vcounter); } auto PPU::Background::serialize(serializer& s) -> void { s(io.screenSize); s(io.screenAddress); s(io.tiledataAddress); s(io.tileSize); s(io.mode); s(io.priority); s(io.aboveEnable); s(io.belowEnable); s(io.hoffset); s(io.voffset); s(output.above.priority); s(output.above.palette); s(output.above.paletteGroup); s(output.below.priority); s(output.below.palette); s(output.below.paletteGroup); s(mosaic.enable); s(mosaic.hcounter); s(mosaic.hoffset); s(mosaic.pixel.priority); s(mosaic.pixel.palette); s(mosaic.pixel.paletteGroup); s(opt.hoffset); s(opt.voffset); for(auto& tile : tiles) { s(tile.address); s(tile.character); s(tile.palette); s(tile.paletteGroup); s(tile.priority); s(tile.hmirror); s(tile.vmirror); s(tile.data); } s(renderingIndex); s(pixelCounter); } auto PPU::Object::serialize(serializer& s) -> void { s(io.aboveEnable); s(io.belowEnable); s(io.interlace); s(io.tiledataAddress); s(io.nameselect); s(io.baseSize); s(io.firstSprite); s(io.priority); s(io.rangeOver); s(io.timeOver); s(latch.firstSprite); s(t.x); s(t.y); s(t.itemCount); s(t.tileCount); s(t.active); for(u32 p : range(2)) { for(u32 n : range(32)) { s(t.item[p][n].valid); s(t.item[p][n].index); } for(u32 n : range(34)) { s(t.tile[p][n].valid); s(t.tile[p][n].x); s(t.tile[p][n].priority); s(t.tile[p][n].palette); s(t.tile[p][n].hflip); s(t.tile[p][n].data); } } s(output.above.priority); s(output.above.palette); s(output.below.priority); s(output.below.palette); } auto PPU::Window::serialize(serializer& s) -> void { s(io.bg1.oneInvert); s(io.bg1.oneEnable); s(io.bg1.twoInvert); s(io.bg1.twoEnable); s(io.bg1.mask); s(io.bg1.aboveEnable); s(io.bg1.belowEnable); s(io.bg2.oneEnable); s(io.bg2.oneInvert); s(io.bg2.twoEnable); s(io.bg2.twoInvert); s(io.bg2.mask); s(io.bg2.aboveEnable); s(io.bg2.belowEnable); s(io.bg3.oneEnable); s(io.bg3.oneInvert); s(io.bg3.twoEnable); s(io.bg3.twoInvert); s(io.bg3.mask); s(io.bg3.aboveEnable); s(io.bg3.belowEnable); s(io.bg4.oneEnable); s(io.bg4.oneInvert); s(io.bg4.twoEnable); s(io.bg4.twoInvert); s(io.bg4.mask); s(io.bg4.aboveEnable); s(io.bg4.belowEnable); s(io.obj.oneEnable); s(io.obj.oneInvert); s(io.obj.twoEnable); s(io.obj.twoInvert); s(io.obj.mask); s(io.obj.aboveEnable); s(io.obj.belowEnable); s(io.col.oneEnable); s(io.col.oneInvert); s(io.col.twoEnable); s(io.col.twoInvert); s(io.col.mask); s(io.col.aboveMask); s(io.col.belowMask); s(io.oneLeft); s(io.oneRight); s(io.twoLeft); s(io.twoRight); s(output.above.colorEnable); s(output.below.colorEnable); s(x); } auto PPU::DAC::serialize(serializer& s) -> void { s(io.directColor); s(io.blendMode); s(io.bg1.colorEnable); s(io.bg2.colorEnable); s(io.bg3.colorEnable); s(io.bg4.colorEnable); s(io.obj.colorEnable); s(io.back.colorEnable); s(io.colorHalve); s(io.colorMode); s(io.colorRed); s(io.colorGreen); s(io.colorBlue); s(math.above.color); s(math.above.colorEnable); s(math.below.color); s(math.below.colorEnable); s(math.transparent); s(math.blendMode); s(math.colorHalve); } ares-126/ares/sfc/ppu/window.cpp000066400000000000000000000065461415063341600166600ustar00rootroot00000000000000auto PPU::Window::scanline() -> void { x = 0; } auto PPU::Window::run() -> void { bool one = (x >= io.oneLeft && x <= io.oneRight); bool two = (x >= io.twoLeft && x <= io.twoRight); x++; if(test(io.bg1.oneEnable, one ^ io.bg1.oneInvert, io.bg1.twoEnable, two ^ io.bg1.twoInvert, io.bg1.mask)) { if(io.bg1.aboveEnable) bg1.output.above.priority = 0; if(io.bg1.belowEnable) bg1.output.below.priority = 0; } if(test(io.bg2.oneEnable, one ^ io.bg2.oneInvert, io.bg2.twoEnable, two ^ io.bg2.twoInvert, io.bg2.mask)) { if(io.bg2.aboveEnable) bg2.output.above.priority = 0; if(io.bg2.belowEnable) bg2.output.below.priority = 0; } if(test(io.bg3.oneEnable, one ^ io.bg3.oneInvert, io.bg3.twoEnable, two ^ io.bg3.twoInvert, io.bg3.mask)) { if(io.bg3.aboveEnable) bg3.output.above.priority = 0; if(io.bg3.belowEnable) bg3.output.below.priority = 0; } if(test(io.bg4.oneEnable, one ^ io.bg4.oneInvert, io.bg4.twoEnable, two ^ io.bg4.twoInvert, io.bg4.mask)) { if(io.bg4.aboveEnable) bg4.output.above.priority = 0; if(io.bg4.belowEnable) bg4.output.below.priority = 0; } if(test(io.obj.oneEnable, one ^ io.obj.oneInvert, io.obj.twoEnable, two ^ io.obj.twoInvert, io.obj.mask)) { if(io.obj.aboveEnable) obj.output.above.priority = 0; if(io.obj.belowEnable) obj.output.below.priority = 0; } bool value = test(io.col.oneEnable, one ^ io.col.oneInvert, io.col.twoEnable, two ^ io.col.twoInvert, io.col.mask); bool array[] = {true, value, !value, false}; output.above.colorEnable = array[io.col.aboveMask]; output.below.colorEnable = array[io.col.belowMask]; } auto PPU::Window::test(bool oneEnable, bool one, bool twoEnable, bool two, u32 mask) -> bool { if(!oneEnable) return two && twoEnable; if(!twoEnable) return one; if(mask == 0) return (one | two); if(mask == 1) return (one & two); return (one ^ two) == 3 - mask; } auto PPU::Window::power() -> void { io.bg1.oneEnable = random(); io.bg1.oneInvert = random(); io.bg1.twoEnable = random(); io.bg1.twoInvert = random(); io.bg1.mask = random(); io.bg1.aboveEnable = random(); io.bg1.belowEnable = random(); io.bg2.oneEnable = random(); io.bg2.oneInvert = random(); io.bg2.twoEnable = random(); io.bg2.twoInvert = random(); io.bg2.mask = random(); io.bg2.aboveEnable = random(); io.bg2.belowEnable = random(); io.bg3.oneEnable = random(); io.bg3.oneInvert = random(); io.bg3.twoEnable = random(); io.bg3.twoInvert = random(); io.bg3.mask = random(); io.bg3.aboveEnable = random(); io.bg3.belowEnable = random(); io.bg4.oneEnable = random(); io.bg4.oneInvert = random(); io.bg4.twoEnable = random(); io.bg4.twoInvert = random(); io.bg4.mask = random(); io.bg4.aboveEnable = random(); io.bg4.belowEnable = random(); io.obj.oneEnable = random(); io.obj.oneInvert = random(); io.obj.twoEnable = random(); io.obj.twoInvert = random(); io.obj.mask = random(); io.obj.aboveEnable = random(); io.obj.belowEnable = random(); io.col.oneEnable = random(); io.col.oneInvert = random(); io.col.twoEnable = random(); io.col.twoInvert = random(); io.col.mask = random(); io.col.aboveMask = random(); io.col.belowMask = random(); io.oneLeft = random(); io.oneRight = random(); io.twoLeft = random(); io.twoRight = random(); output.above.colorEnable = 0; output.below.colorEnable = 0; x = 0; } ares-126/ares/sfc/sfc.hpp000066400000000000000000000022271415063341600153150ustar00rootroot00000000000000#pragma once //started: 2004-10-14 #include #include #include #include #include #include #include #if defined(CORE_GB) #include #endif namespace ares::SuperFamicom { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Region { static inline auto NTSC() -> bool; static inline auto PAL() -> bool; }; #include #include #include #include #include #include #include #include #include #include #include #include #include #include } ares-126/ares/sfc/slot/000077500000000000000000000000001415063341600150075ustar00rootroot00000000000000ares-126/ares/sfc/slot/bsmemory/000077500000000000000000000000001415063341600166445ustar00rootroot00000000000000ares-126/ares/sfc/slot/bsmemory/bsmemory.cpp000066400000000000000000000412561415063341600212150ustar00rootroot00000000000000BSMemoryCartridge& bsmemory = bsmemorySlot.cartridge; #include "slot.cpp" #include "serialization.cpp" auto BSMemoryCartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append("BS Memory Cartridge"); } auto BSMemoryCartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); if(auto fp = pak->read("program.rom")) { ROM = 1; memory.allocate(fp->size()); fp->read({memory.data(), memory.size()}); } if(auto fp = pak->read("program.flash")) { ROM = 0; memory.allocate(fp->size()); fp->read({memory.data(), memory.size()}); } //some BS Memory cassetes use ROM chips rather than Flash chips ... //do not emulate a flash chip interface for ROM cassettes. if(ROM) return; if(size() != 0x100000 && size() != 0x200000 && size() != 0x400000) { memory.reset(); return; } chip.vendor = 0x00'b0; //Sharp if(size() == 0x100000) chip.device = 0x66'a8; //LH28F800SU if(size() == 0x200000) chip.device = 0x66'88; //LH28F016SU if(size() == 0x400000) chip.device = 0x66'88; //LH28F032SU (same device ID as LH28F016SU per datasheet) chip.serial = 0x00'01'23'45'67'89ull; //serial# should be unique for every cartridge ... //page buffer values decay to random noise upon losing power to the flash chip //the randomness is high entropy (at least compared to SNES SRAM/DRAM chips) for(auto& byte : page.buffer[0]) byte = random(); for(auto& byte : page.buffer[1]) byte = random(); for(auto& block : blocks) { block.erased = 1; block.locked = 1; } if(auto fp = pak->read("flash.bml")) { auto document = BML::unserialize(fp->reads()); if(auto node = document["flash/vendor"]) { chip.vendor = node.natural(); } if(auto node = document["flash/device"]) { chip.device = node.natural(); } if(auto node = document["flash/serial"]) { chip.serial = node.natural(); } for(u32 id : range(block.count())) { if(auto node = document[{"flash/block(id=", id, ")"}]) { if(auto erased = node["erased"]) { block(id).erased = erased.natural(); } if(auto locked = node["locked"]) { block(id).locked = locked.boolean(); } } } } power(); } auto BSMemoryCartridge::disconnect() -> void { if(!node) return; if(!ROM) { if(auto fp = pak->write("flash.bml")) { string manifest; manifest.append("flash\n"); manifest.append(" vendor: 0x", hex(chip.vendor, 4L), "\n"); manifest.append(" device: 0x", hex(chip.device, 4L), "\n"); manifest.append(" serial: 0x", hex(chip.serial, 12L), "\n"); for(n6 id : range(block.count())) { manifest.append(" block\n"); manifest.append(" id: ", id, "\n"); manifest.append(" erased: ", (u32)block(id).erased, "\n"); manifest.append(" locked: ", (bool)block(id).locked, "\n"); } fp->writes(manifest); } cpu.coprocessors.removeByValue(this); Thread::destroy(); } memory.reset(); pak.reset(); node.reset(); } BSMemoryCartridge::BSMemoryCartridge() { page.self = this; u32 blockID = 0; for(auto& block : blocks) block.self = this, block.id = blockID++; block.self = this; } auto BSMemoryCartridge::main() -> void { for(n6 id : range(block.count())) { if(block(id).erasing) return block(id).erase(); block(id).status.ready = 1; } compatible.status.ready = 1; global.status.ready = 1; Thread::step(10'000); //10 milliseconds } auto BSMemoryCartridge::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto BSMemoryCartridge::power() -> void { if(ROM) return; Thread::create(1'000'000, {&BSMemoryCartridge::main, this}); //microseconds cpu.coprocessors.append(this); for(auto& block : blocks) { block.erasing = 0; block.status = {}; } compatible.status = {}; global.status = {}; mode = Mode::Flash; readyBusyMode = ReadyBusyMode::Disable; queue.flush(); } auto BSMemoryCartridge::save() -> void { if(!node) return; if(auto fp = pak->write("program.flash")) { fp->write({memory.data(), memory.size()}); } } auto BSMemoryCartridge::read(n24 address, n8 data) -> n8 { if(!memory) return data; if(ROM) return memory.read(bus.mirror(address, size())); if(mode == Mode::Chip) { if(address == 0) return chip.vendor.byte(0); //only appears once if(address == 1) return chip.device.byte(0); //only appears once if((n3)address == 2) return 0x63; //unknown constant: repeats every eight bytes return 0x20; //unknown constant: fills in all remaining bytes } if(mode == Mode::Page) { return page.read(address); } if(mode == Mode::CompatibleStatus) { return compatible.status(); } if(mode == Mode::ExtendedStatus) { if((n16)address == 0x0002) return block(address >> block.bits()).status(); if((n16)address == 0x0004) return global.status(); return 0x00; //reserved: always zero } return block(address >> block.bits()).read(address); //Mode::Flash } auto BSMemoryCartridge::write(n24 address, n8 data) -> void { if(!memory || ROM) return; queue.push(address, data); //write page to flash if(queue.data(0) == 0x0c) { if(queue.size() < 3) return; n16 count; //1 - 65536 count.byte(0) = queue.data(!queue.address(1).bit(0) ? 1 : 2); count.byte(1) = queue.data(!queue.address(1).bit(0) ? 2 : 1); n24 address = queue.address(2); do { block(address >> block.bits()).write(address, page.read(address)); address++; } while(count--); page.swap(); mode = Mode::CompatibleStatus; return queue.flush(); } //write byte if(queue.data(0) == 0x10) { if(queue.size() < 2) return; block(queue.address(1) >> block.bits()).write(queue.address(1), queue.data(1)); mode = Mode::CompatibleStatus; return queue.flush(); } //erase block if(queue.data(0) == 0x20) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); block(queue.address(1) >> block.bits()).erase(); mode = Mode::CompatibleStatus; return queue.flush(); } //LH28F800SUT-ZI specific? (undocumented / unavailable? for the LH28F800SU) //write signature, identifier, serial# into current page buffer, then swap page buffers if(queue.data(0) == 0x38) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); page.write(0x00, 0x4d); //'M' (memory) page.write(0x02, 0x50); //'P' (pack) page.write(0x04, 0x04); //unknown constant (maybe block count? eg 1<<4 = 16 blocks) page.write(0x06, 0x10 | (n4)log2(size() >> 10)); //d0-d3 = size; d4-d7 = type (1) page.write(0x08, chip.serial >> 40); //serial# (big endian; BCD format) page.write(0x0a, chip.serial >> 32); //smallest observed value: page.write(0x0c, chip.serial >> 24); // 0x00'00'10'62'62'39 page.write(0x0e, chip.serial >> 16); //largest observed value: page.write(0x10, chip.serial >> 8); // 0x00'91'90'70'31'03 page.write(0x12, chip.serial >> 0); //most values are: 0x00'0x'xx'xx'xx'xx page.swap(); return queue.flush(); } //write byte if(queue.data(0) == 0x40) { if(queue.size() < 2) return; block(queue.address(1) >> block.bits()).write(queue.address(1), queue.data(1)); mode = Mode::CompatibleStatus; return queue.flush(); } //clear status register if(queue.data(0) == 0x50) { for(n6 id : range(block.count())) { block(id).status.vppLow = 0; block(id).status.failed = 0; } compatible.status.vppLow = 0; compatible.status.writeFailed = 0; compatible.status.eraseFailed = 0; global.status.failed = 0; return queue.flush(); } //read compatible status register if(queue.data(0) == 0x70) { mode = Mode::CompatibleStatus; return queue.flush(); } //read extended status registers if(queue.data(0) == 0x71) { mode = Mode::ExtendedStatus; return queue.flush(); } //page buffer swap if(queue.data(0) == 0x72) { page.swap(); return queue.flush(); } //single load to page buffer if(queue.data(0) == 0x74) { if(queue.size() < 2) return; page.write(queue.address(1), queue.data(1)); return queue.flush(); } //read page buffer if(queue.data(0) == 0x75) { mode = Mode::Page; return queue.flush(); } //lock block if(queue.data(0) == 0x77) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); block(queue.address(1) >> block.bits()).lock(); return queue.flush(); } //abort //(unsupported) if(queue.data(0) == 0x80) { global.status.sleeping = 1; //abort seems to put the chip into sleep mode return queue.flush(); } //read chip identifiers if(queue.data(0) == 0x90) { mode = Mode::Chip; return queue.flush(); } //update ry/by mode //(unsupported) if(queue.data(0) == 0x96) { if(queue.size() < 2) return; if(queue.data(1) == 0x01) readyBusyMode = ReadyBusyMode::EnableToLevelMode; if(queue.data(1) == 0x02) readyBusyMode = ReadyBusyMode::PulseOnWrite; if(queue.data(1) == 0x03) readyBusyMode = ReadyBusyMode::PulseOnErase; if(queue.data(1) == 0x04) readyBusyMode = ReadyBusyMode::Disable; return queue.flush(); } //upload lock status bits if(queue.data(0) == 0x97) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); for(n6 id : range(block.count())) block(id).update(); return queue.flush(); } //upload device information (number of erase cycles per block) if(queue.data(0) == 0x99) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); page.write(0x06, 0x06); //unknown constant page.write(0x07, 0x00); //unknown constant for(n6 id : range(block.count())) { n8 address; address += id.bit(0,1) * 0x08; //verified for LH28F800SUT-ZI address += id.bit(2,3) * 0x40; //verified for LH28F800SUT-ZI address += id.bit(4) * 0x20; //guessed for LH28F016SU address += id.bit(5) * 0x04; //guessed for LH28F032SU; will overwrite unknown constants n32 erased = 1 << 31 | block(id).erased; //unknown if d31 is set when erased == 0 for(n2 byte : range(4)) { page.write(address + byte, erased >> byte * 8); //little endian } } page.swap(); return queue.flush(); } //erase all blocks if(queue.data(0) == 0xa7) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); for(n6 id : range(block.count())) block(id).erase(); mode = Mode::CompatibleStatus; return queue.flush(); } //erase suspend/resume //(unsupported) if(queue.data(0) == 0xb0) { if(queue.size() < 2) return; if(queue.data(1) != 0xd0) return failed(), queue.flush(); mode = Mode::CompatibleStatus; return queue.flush(); } //sequential load to page buffer if(queue.data(0) == 0xe0) { if(queue.size() < 4) return; //command length = 3 + count n16 count; //1 - 65536 count.byte(0) = queue.data(1); //endian order not affected by queue.address(1).field(0) count.byte(1) = queue.data(2); page.write(queue.address(3), queue.data(3)); if(count--) { queue.history[1].data = count.byte(0); queue.history[2].data = count.byte(1); return queue.pop(); //hack to avoid needing a 65539-entry queue } else { return queue.flush(); } } //sleep //(unsupported) if(queue.data(0) == 0xf0) { //it is currently unknown how to exit sleep mode; other than via chip reset global.status.sleeping = 1; return queue.flush(); } //write word if(queue.data(0) == 0xfb) { if(queue.size() < 3) return; n16 value; value.byte(0) = queue.data(!queue.address(1).bit(0) ? 1 : 2); value.byte(1) = queue.data(!queue.address(1).bit(0) ? 2 : 1); //writes are always word-aligned: a0 toggles, rather than increments block(queue.address(2) >> block.bits()).write(queue.address(2) ^ 0, value.byte(0)); block(queue.address(2) >> block.bits()).write(queue.address(2) ^ 1, value.byte(1)); mode = Mode::CompatibleStatus; return queue.flush(); } //read flash memory if(queue.data(0) == 0xff) { mode = Mode::Flash; return queue.flush(); } //unknown command return queue.flush(); } // auto BSMemoryCartridge::failed() -> void { compatible.status.writeFailed = 1; //datasheet specifies these are for write/erase failures compatible.status.eraseFailed = 1; //yet all errors seem to set both of these bits ... global.status.failed = 1; } // auto BSMemoryCartridge::Page::swap() -> void { self->global.status.page ^= 1; } auto BSMemoryCartridge::Page::read(n8 address) -> n8 { return buffer[self->global.status.page][address]; } auto BSMemoryCartridge::Page::write(n8 address, n8 data) -> void { buffer[self->global.status.page][address] = data; } // inline auto BSMemoryCartridge::BlockInformation::bits() const -> u32 { return 16; } inline auto BSMemoryCartridge::BlockInformation::bytes() const -> u32 { return 1 << bits(); } inline auto BSMemoryCartridge::BlockInformation::count() const -> u32 { return self->size() >> bits(); } // auto BSMemoryCartridge::Block::read(n24 address) -> n8 { address &= bytes() - 1; return self->memory.read(id << bits() | address); } auto BSMemoryCartridge::Block::write(n24 address, n8 data) -> void { if(!self->writable() && status.locked) { status.failed = 1; return self->failed(); } //writes to flash can only clear bits address &= bytes() - 1; data &= self->memory.read(id << bits() | address); self->memory.write(id << bits() | address, data); } auto BSMemoryCartridge::Block::erase() -> void { if(cpu.active()) { //erase command runs even if the block is not currently writable erasing = 1; status.ready = 0; self->compatible.status.ready = 0; self->global.status.ready = 0; return; } self->step(300'000); //300 milliseconds are required to erase one block erasing = 0; if(!self->writable() && status.locked) { //does not set any failure bits when unsuccessful ... return; } for(n24 address : range(bytes())) { self->memory.write(id << bits() | address, 0xff); } erased++; locked = 0; status.locked = 0; } auto BSMemoryCartridge::Block::lock() -> void { if(!self->writable()) { //produces a failure result even if the page was already locked status.failed = 1; return self->failed(); } locked = 1; status.locked = 1; } //at reset, the locked status bit is set //this command refreshes the true locked status bit from the device auto BSMemoryCartridge::Block::update() -> void { status.locked = locked; } // auto BSMemoryCartridge::Blocks::operator()(n6 id) -> Block& { return self->blocks[id & count() - 1]; } // auto BSMemoryCartridge::Block::Status::operator()() -> n8 { return ( //d0-d1 are reserved; always return zero vppLow << 2 | queueFull << 3 | aborted << 4 | failed << 5 |!locked << 6 //note: technically the unlocked flag; so locked is inverted here | ready << 7 ); } // auto BSMemoryCartridge::Compatible::Status::operator()() -> n8 { return ( //d0-d2 are reserved; always return zero vppLow << 3 | writeFailed << 4 | eraseFailed << 5 | eraseSuspended << 6 | ready << 7 ); } // auto BSMemoryCartridge::Global::Status::operator()() -> n8 { return ( page << 0 | pageReady << 1 | pageAvailable << 2 | queueFull << 3 | sleeping << 4 | failed << 5 | suspended << 6 | ready << 7 ); } // auto BSMemoryCartridge::Queue::flush() -> void { history[0] = {}; history[1] = {}; history[2] = {}; history[3] = {}; } auto BSMemoryCartridge::Queue::pop() -> void { if(history[3].valid) { history[3] = {}; return; } if(history[2].valid) { history[2] = {}; return; } if(history[1].valid) { history[1] = {}; return; } if(history[0].valid) { history[0] = {}; return; } } auto BSMemoryCartridge::Queue::push(n24 address, n8 data) -> void { if(!history[0].valid) { history[0] = {true, address, data}; return; } if(!history[1].valid) { history[1] = {true, address, data}; return; } if(!history[2].valid) { history[2] = {true, address, data}; return; } if(!history[3].valid) { history[3] = {true, address, data}; return; } } auto BSMemoryCartridge::Queue::size() -> u32 { if(history[3].valid) return 4; if(history[2].valid) return 3; if(history[1].valid) return 2; if(history[0].valid) return 1; return 0; } auto BSMemoryCartridge::Queue::address(u32 index) -> n24 { if(index > 3 || !history[index].valid) return 0; return history[index].address; } auto BSMemoryCartridge::Queue::data(u32 index) -> n8 { if(index > 3 || !history[index].valid) return 0; return history[index].data; } ares-126/ares/sfc/slot/bsmemory/bsmemory.hpp000066400000000000000000000074441415063341600212230ustar00rootroot00000000000000//MaskROMs supported: // Sharp LH5S4TNI (MaskROM 512K x 8-bit) [BSMC-CR-01: BSMC-ZS5J-JPN, BSMC-YS5J-JPN] // Sharp LH534VNF (MaskROM 512K x 8-bit) [BSMC-BR-01: BSMC-ZX3J-JPN] //Flash chips supported: (16-bit modes unsupported) // Sharp LH28F800SUT-ZI (Flash 16 x 65536 x 8-bit) [BSMC-AF-01: BSMC-HM-JPN] // Sharp LH28F016SU ??? (Flash 32 x 65536 x 8-bit) [unreleased: experimental] // Sharp LH28F032SU ??? (Flash 64 x 65536 x 8-bit) [unreleased: experimental] //unsupported: // Sharp LH28F400SU ??? (Flash 32 x 16384 x 8-bit) [unreleased] {vendor ID: 0x00'b0; device ID: 0x66'21} //notes: //timing emulation is only present for block erase commands //other commands generally complete so quickly that it's unnecessary (eg 70-120ns for writes) //suspend, resume, abort, ready/busy modes are not supported struct BSMemoryCartridge : Thread { Node::Peripheral node; VFS::Pak pak; u32 ROM = 1; auto title() const -> string { return information.title; } auto size() const -> u32 { return memory.size(); } auto writable() const { return pin.writable; } auto writable(bool writable) { pin.writable = !ROM && writable; } //bsmemory.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; BSMemoryCartridge(); auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; auto save() -> void; auto read(n24 address, n8 data) -> n8; auto write(n24 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; WritableMemory memory; struct { string title; } information; private: struct Pin { n1 writable; // => /WP } pin; struct Chip { n16 vendor; n16 device; n48 serial; } chip; struct Page { BSMemoryCartridge* self = nullptr; auto swap() -> void; auto read(n8 address) -> n8; auto write(n8 address, n8 data) -> void; n8 buffer[2][256]; } page; struct BlockInformation { BSMemoryCartridge* self = nullptr; auto bits() const -> u32; auto bytes() const -> u32; auto count() const -> u32; }; struct Block : BlockInformation { auto read(n24 address) -> n8; auto write(n24 address, n8 data) -> void; auto erase() -> void; auto lock() -> void; auto update() -> void; n4 id; n32 erased; n1 locked; n1 erasing; struct Status { auto operator()() -> n8; n1 vppLow; n1 queueFull; n1 aborted; n1 failed; n1 locked = 1; n1 ready = 1; } status; } blocks[64]; //8mbit = 16; 16mbit = 32; 32mbit = 64 struct Blocks : BlockInformation { auto operator()(n6 id) -> Block&; } block; struct Compatible { struct Status { auto operator()() -> n8; n1 vppLow; n1 writeFailed; n1 eraseFailed; n1 eraseSuspended; n1 ready = 1; } status; } compatible; struct Global { struct Status { auto operator()() -> n8; n1 page; n1 pageReady = 1; n1 pageAvailable = 1; n1 queueFull; n1 sleeping; n1 failed; n1 suspended; n1 ready = 1; } status; } global; struct Mode { enum : u32 { Flash, Chip, Page, CompatibleStatus, ExtendedStatus, };}; n3 mode; struct ReadyBusyMode { enum : u32 { EnableToLevelMode, PulseOnWrite, PulseOnErase, Disable, };}; n2 readyBusyMode; struct Queue { auto flush() -> void; auto pop() -> void; auto push(n24 address, n8 data) -> void; auto size() -> u32; auto address(u32 index) -> n24; auto data(u32 index) -> n8; //serialization.cpp auto serialize(serializer&) -> void; struct History { n1 valid; n24 address; n8 data; } history[4]; } queue; auto failed() -> void; }; #include "slot.hpp" extern BSMemoryCartridge& bsmemory; ares-126/ares/sfc/slot/bsmemory/serialization.cpp000066400000000000000000000024561415063341600222340ustar00rootroot00000000000000auto BSMemoryCartridge::serialize(serializer& s) -> void { if(ROM) return; Thread::serialize(s); s(memory); s(pin.writable); s(chip.vendor); s(chip.device); s(chip.serial); s(page.buffer[0]); s(page.buffer[1]); for(auto& block : blocks) { s(block.id); s(block.erased); s(block.locked); s(block.erasing); s(block.status.vppLow); s(block.status.queueFull); s(block.status.aborted); s(block.status.failed); s(block.status.locked); s(block.status.ready); } s(compatible.status.vppLow); s(compatible.status.writeFailed); s(compatible.status.eraseFailed); s(compatible.status.eraseSuspended); s(compatible.status.ready); s(global.status.page); s(global.status.pageReady); s(global.status.pageAvailable); s(global.status.queueFull); s(global.status.sleeping); s(global.status.failed); s(global.status.suspended); s(global.status.ready); s(mode); s(readyBusyMode); s(queue); } auto BSMemoryCartridge::Queue::serialize(serializer& s) -> void { s(history[0].valid); s(history[0].address); s(history[0].data); s(history[1].valid); s(history[1].address); s(history[1].data); s(history[2].valid); s(history[2].address); s(history[2].data); s(history[3].valid); s(history[3].address); s(history[3].data); } ares-126/ares/sfc/slot/bsmemory/slot.cpp000066400000000000000000000010371415063341600203320ustar00rootroot00000000000000BSMemorySlot bsmemorySlot{"BS Memory Slot"}; BSMemorySlot::BSMemorySlot(string name) : name(name) { } auto BSMemorySlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("BS Memory"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto BSMemorySlot::unload() -> void { cartridge.disconnect(); port.reset(); } ares-126/ares/sfc/slot/bsmemory/slot.hpp000066400000000000000000000003531415063341600203370ustar00rootroot00000000000000struct BSMemorySlot { Node::Port port; BSMemoryCartridge cartridge; //slot.cpp BSMemorySlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern BSMemorySlot bsmemorySlot; ares-126/ares/sfc/slot/slot.cpp000066400000000000000000000002031415063341600164670ustar00rootroot00000000000000#include namespace ares::SuperFamicom { #include "bsmemory/bsmemory.cpp" #include "sufamiturbo/sufamiturbo.cpp" } ares-126/ares/sfc/slot/slot.hpp000066400000000000000000000001101415063341600164710ustar00rootroot00000000000000#include "bsmemory/bsmemory.hpp" #include "sufamiturbo/sufamiturbo.hpp" ares-126/ares/sfc/slot/sufamiturbo/000077500000000000000000000000001415063341600173475ustar00rootroot00000000000000ares-126/ares/sfc/slot/sufamiturbo/memory.cpp000066400000000000000000000010711415063341600213620ustar00rootroot00000000000000auto SufamiTurboCartridge::readROM(n24 address, n8 data) -> n8 { if(!rom) return data; return rom.read(address & rom.size() - 1, data); } auto SufamiTurboCartridge::writeROM(n24 address, n8 data) -> void { if(!rom) return; return rom.write(address & rom.size() - 1, data); } auto SufamiTurboCartridge::readRAM(n24 address, n8 data) -> n8 { if(!ram) return data; return ram.read(address & ram.size() - 1, data); } auto SufamiTurboCartridge::writeRAM(n24 address, n8 data) -> void { if(!ram) return; return ram.write(address & ram.size() - 1, data); } ares-126/ares/sfc/slot/sufamiturbo/serialization.cpp000066400000000000000000000001121415063341600227220ustar00rootroot00000000000000auto SufamiTurboCartridge::serialize(serializer& s) -> void { s(ram); } ares-126/ares/sfc/slot/sufamiturbo/slot.cpp000066400000000000000000000011631415063341600210350ustar00rootroot00000000000000SufamiTurboSlot sufamiturboSlotA{"Sufami Turbo Slot A"}; SufamiTurboSlot sufamiturboSlotB{"Sufami Turbo Slot B"}; SufamiTurboSlot::SufamiTurboSlot(string name) : name(name) { } auto SufamiTurboSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily("Sufami Turbo"); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto SufamiTurboSlot::unload() -> void { cartridge.disconnect(); port.reset(); } ares-126/ares/sfc/slot/sufamiturbo/slot.hpp000066400000000000000000000004441415063341600210430ustar00rootroot00000000000000struct SufamiTurboSlot { Node::Port port; SufamiTurboCartridge cartridge; //slot.cpp SufamiTurboSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern SufamiTurboSlot sufamiturboSlotA; extern SufamiTurboSlot sufamiturboSlotB; ares-126/ares/sfc/slot/sufamiturbo/sufamiturbo.cpp000066400000000000000000000021241415063341600224120ustar00rootroot00000000000000SufamiTurboCartridge& sufamiturboA = sufamiturboSlotA.cartridge; SufamiTurboCartridge& sufamiturboB = sufamiturboSlotB.cartridge; #include "slot.cpp" #include "memory.cpp" #include "serialization.cpp" auto SufamiTurboCartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append("Sufami Turbo Cartridge"); } auto SufamiTurboCartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); if(auto fp = pak->read("program.rom")) { rom.allocate(fp->size()); fp->read({rom.data(), rom.size()}); } if(auto fp = pak->read("save.ram")) { ram.allocate(fp->size()); fp->read({ram.data(), ram.size()}); } } auto SufamiTurboCartridge::disconnect() -> void { if(!node) return; save(); rom.reset(); ram.reset(); pak.reset(); node.reset(); } auto SufamiTurboCartridge::power() -> void { } auto SufamiTurboCartridge::save() -> void { if(!node) return; if(auto fp = pak->write("save.ram")) { fp->write({ram.data(), ram.size()}); } } ares-126/ares/sfc/slot/sufamiturbo/sufamiturbo.hpp000066400000000000000000000014011415063341600224140ustar00rootroot00000000000000struct SufamiTurboCartridge { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } //sufamiturbo.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto power() -> void; auto save() -> void; //memory.cpp auto readROM(n24 address, n8 data) -> n8; auto writeROM(n24 address, n8 data) -> void; auto readRAM(n24 address, n8 data) -> n8; auto writeRAM(n24 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; ReadableMemory rom; WritableMemory ram; struct { string title; } information; }; #include "slot.hpp" extern SufamiTurboCartridge& sufamiturboA; extern SufamiTurboCartridge& sufamiturboB; ares-126/ares/sfc/smp/000077500000000000000000000000001415063341600146255ustar00rootroot00000000000000ares-126/ares/sfc/smp/debugger.cpp000066400000000000000000000006421415063341600171170ustar00rootroot00000000000000auto SMP::Debugger::load(Node::Object parent) -> void { tracer.instruction = parent->append("Instruction", "SMP"); tracer.instruction->setAddressBits(16); } auto SMP::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(smp.r.pc.w)) { tracer.instruction->notify(smp.disassembleInstruction(), smp.disassembleContext()); } } ares-126/ares/sfc/smp/io.cpp000066400000000000000000000070501415063341600157420ustar00rootroot00000000000000auto SMP::portRead(n2 port) const -> n8 { if(port == 0) return io.cpu0; if(port == 1) return io.cpu1; if(port == 2) return io.cpu2; if(port == 3) return io.cpu3; unreachable; } auto SMP::portWrite(n2 port, n8 data) -> void { if(port == 0) io.apu0 = data; if(port == 1) io.apu1 = data; if(port == 2) io.apu2 = data; if(port == 3) io.apu3 = data; } inline auto SMP::readIO(n16 address) -> n8 { n8 data; switch(address) { case 0xf0: //TEST (write-only register) return 0x00; case 0xf1: //CONTROL (write-only register) return 0x00; case 0xf2: //DSPADDR return io.dspAddress; case 0xf3: //DSPDATA //0x80-0xff are read-only mirrors of 0x00-0x7f return dsp.read(io.dspAddress); case 0xf4: //CPUIO0 synchronize(cpu); return io.apu0; case 0xf5: //CPUIO1 synchronize(cpu); return io.apu1; case 0xf6: //CPUIO2 synchronize(cpu); return io.apu2; case 0xf7: //CPUIO3 synchronize(cpu); return io.apu3; case 0xf8: //AUXIO4 return io.aux4; case 0xf9: //AUXIO5 return io.aux5; case 0xfa: //T0TARGET case 0xfb: //T1TARGET case 0xfc: //T2TARGET (write-only registers) return 0x00; case 0xfd: //T0OUT (4-bit counter value) data = timer0.stage3; timer0.stage3 = 0; return data; case 0xfe: //T1OUT (4-bit counter value) data = timer1.stage3; timer1.stage3 = 0; return data; case 0xff: //T2OUT (4-bit counter value) data = timer2.stage3; timer2.stage3 = 0; return data; } return data; //unreachable } inline auto SMP::writeIO(n16 address, n8 data) -> void { switch(address) { case 0xf0: //TEST if(r.p.p) break; //writes only valid when P flag is clear io.timersDisable = data.bit(0); io.ramWritable = data.bit(1); io.ramDisable = data.bit(2); io.timersEnable = data.bit(3); io.externalWaitStates = data.bit(4,5); io.internalWaitStates = data.bit(6,7); timer0.synchronizeStage1(); timer1.synchronizeStage1(); timer2.synchronizeStage1(); break; case 0xf1: //CONTROL //0->1 transistion resets timers if(timer0.enable.raise(data.bit(0))) { timer0.stage2 = 0; timer0.stage3 = 0; } if(timer1.enable.raise(data.bit(1))) { timer1.stage2 = 0; timer1.stage3 = 0; } if(!timer2.enable.raise(data.bit(2))) { timer2.stage2 = 0; timer2.stage3 = 0; } if(data.bit(4)) { synchronize(cpu); io.apu0 = 0x00; io.apu1 = 0x00; } if(data.bit(5)) { synchronize(cpu); io.apu2 = 0x00; io.apu3 = 0x00; } io.iplromEnable = data.bit(7); break; case 0xf2: //DSPADDR io.dspAddress = data; break; case 0xf3: //DSPDATA if(io.dspAddress.bit(7)) break; //0x80-0xff are read-only mirrors of 0x00-0x7f dsp.write(io.dspAddress, data); break; case 0xf4: //CPUIO0 synchronize(cpu); io.cpu0 = data; break; case 0xf5: //CPUIO1 synchronize(cpu); io.cpu1 = data; break; case 0xf6: //CPUIO2 synchronize(cpu); io.cpu2 = data; break; case 0xf7: //CPUIO3 synchronize(cpu); io.cpu3 = data; break; case 0xf8: //AUXIO4 io.aux4 = data; break; case 0xf9: //AUXIO5 io.aux5 = data; break; case 0xfa: //T0TARGET timer0.target = data; break; case 0xfb: //T1TARGET timer1.target = data; break; case 0xfc: //T2TARGET timer2.target = data; break; case 0xfd: //T0OUT case 0xfe: //T1OUT case 0xff: //T2OUT (read-only registers) break; } } ares-126/ares/sfc/smp/memory.cpp000066400000000000000000000023031415063341600166370ustar00rootroot00000000000000inline auto SMP::readRAM(n16 address) -> n8 { if(address >= 0xffc0 && io.iplromEnable) return iplrom[address & 0x3f]; if(io.ramDisable) return 0x5a; //0xff on mini-SNES return dsp.apuram[address]; } inline auto SMP::writeRAM(n16 address, n8 data) -> void { //writes to $ffc0-$ffff always go to apuram, even if the iplrom is enabled if(io.ramWritable && !io.ramDisable) dsp.apuram[address] = data; } auto SMP::idle() -> void { wait(0); } auto SMP::read(n16 address) -> n8 { if((address & 0xfffc) == 0x00f4) { //reads from $00f4-$00f7 require more time than internal reads wait(1, address); n8 data = readRAM(address); if((address & 0xfff0) == 0x00f0) data = readIO(address); wait(1, address); return data; } else { wait(0, address); n8 data = readRAM(address); if((address & 0xfff0) == 0x00f0) data = readIO(address); return data; } } auto SMP::write(n16 address, n8 data) -> void { wait(0, address); writeRAM(address, data); //even IO writes affect underlying RAM if((address & 0xfff0) == 0x00f0) writeIO(address, data); } auto SMP::readDisassembler(n16 address) -> n8 { if((address & 0xfff0) == 0x00f0) return 0x00; return readRAM(address); } ares-126/ares/sfc/smp/serialization.cpp000066400000000000000000000012571415063341600202130ustar00rootroot00000000000000auto SMP::serialize(serializer& s) -> void { SPC700::serialize(s); Thread::serialize(s); s(io.clockCounter); s(io.dspCounter); s(io.apu0); s(io.apu1); s(io.apu2); s(io.apu3); s(io.timersDisable); s(io.ramWritable); s(io.ramDisable); s(io.timersEnable); s(io.externalWaitStates); s(io.internalWaitStates); s(io.iplromEnable); s(io.dspAddress); s(io.cpu0); s(io.cpu1); s(io.cpu2); s(io.cpu3); s(io.aux4); s(io.aux5); s(timer0); s(timer1); s(timer2); } template auto SMP::Timer::serialize(serializer& s) -> void { s(stage0); s(stage1); s(stage2); s(stage3); s(line); s(enable); s(target); } ares-126/ares/sfc/smp/smp.cpp000066400000000000000000000014751415063341600161370ustar00rootroot00000000000000#include namespace ares::SuperFamicom { SMP smp; #include "memory.cpp" #include "io.cpp" #include "timing.cpp" #include "debugger.cpp" #include "serialization.cpp" auto SMP::load(Node::Object parent) -> void { node = parent->append("SMP"); debugger.load(node); } auto SMP::unload() -> void { debugger = {}; node = {}; } auto SMP::main() -> void { if(r.wait) return instructionWait(); if(r.stop) return instructionStop(); debugger.instruction(); instruction(); } auto SMP::power(bool reset) -> void { if(auto fp = system.pak->read("ipl.rom")) { fp->read({iplrom, 64}); } SPC700::power(); create(system.apuFrequency() / 12.0, {&SMP::main, this}); r.pc.byte.l = iplrom[62]; r.pc.byte.h = iplrom[63]; io = {}; timer0 = {}; timer1 = {}; timer2 = {}; } } ares-126/ares/sfc/smp/smp.hpp000066400000000000000000000040651415063341600161420ustar00rootroot00000000000000//Sony CXP1100Q-1 struct SMP : SPC700, Thread { Node::Object node; struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; struct Tracer { Node::Debugger::Tracer::Instruction instruction; } tracer; } debugger; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //smp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto power(bool reset) -> void; //io.cpp auto portRead(n2 port) const -> n8; auto portWrite(n2 port, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; n8 iplrom[64]; private: struct IO { //timing u32 clockCounter = 0; u32 dspCounter = 0; //external n8 apu0; n8 apu1; n8 apu2; n8 apu3; //$00f0 n1 timersDisable; n1 ramWritable = true; n1 ramDisable; n1 timersEnable = true; n2 externalWaitStates; n2 internalWaitStates; //$00f1 n1 iplromEnable = true; //$00f2 n8 dspAddress; //$00f4-00f7 n8 cpu0; n8 cpu1; n8 cpu2; n8 cpu3; //$00f8-00f9 n8 aux4; n8 aux5; } io; //memory.cpp auto readRAM(n16 address) -> n8; auto writeRAM(n16 address, n8 data) -> void; auto idle() -> void override; auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto readDisassembler(n16 address) -> n8 override; //io.cpp auto readIO(n16 address) -> n8; auto writeIO(n16 address, n8 data) -> void; template struct Timer { n8 stage0; n8 stage1; n8 stage2; n4 stage3; b1 line; b1 enable; n8 target; //timing.cpp auto step(u32 clocks) -> void; auto synchronizeStage1() -> void; //serialization.cpp auto serialize(serializer&) -> void; }; Timer<128> timer0; Timer<128> timer1; Timer< 16> timer2; //timing.cpp auto wait(bool halve, maybe address = nothing) -> void; auto step(u32 clocks) -> void; auto stepTimers(u32 clocks) -> void; }; extern SMP smp; ares-126/ares/sfc/smp/timing.cpp000066400000000000000000000037241415063341600166260ustar00rootroot00000000000000//DSP clock (~24576khz) / 12 (~2048khz) is fed into the SMP //from here, the wait states value is really a clock divider of {2, 4, 8, 16} //due to an unknown hardware issue, clock dividers of 8 and 16 are glitchy //the SMP ends up consuming 10 and 20 clocks per opcode cycle instead //this causes unpredictable behavior on real hardware //sometimes the SMP will run far slower than expected //other times (and more likely), the SMP will deadlock until the system is reset //the timers are not affected by this and advance by their expected values inline auto SMP::wait(bool halve, maybe address) -> void { static constexpr u32 cycleWaitStates[4] = {2, 4, 10, 20}; static constexpr u32 timerWaitStates[4] = {2, 4, 8, 16}; u32 waitStates = io.externalWaitStates; if(!address) waitStates = io.internalWaitStates; //idle cycles else if((*address & 0xfff0) == 0x00f0) waitStates = io.internalWaitStates; //IO registers else if(*address >= 0xffc0 && io.iplromEnable) waitStates = io.internalWaitStates; //IPLROM step(cycleWaitStates[waitStates] >> halve); stepTimers(timerWaitStates[waitStates] >> halve); } inline auto SMP::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); Thread::synchronize(dsp); } inline auto SMP::stepTimers(u32 clocks) -> void { timer0.step(clocks); timer1.step(clocks); timer2.step(clocks); } template auto SMP::Timer::step(u32 clocks) -> void { //stage 0 increment stage0 += clocks; if(stage0 < Frequency) return; stage0 -= Frequency; //stage 1 increment stage1 ^= 1; synchronizeStage1(); } template auto SMP::Timer::synchronizeStage1() -> void { bool level = stage1; if(!smp.io.timersEnable) level = false; if(smp.io.timersDisable) level = false; if(!line.lower(level)) return; //only pulse on 1->0 transition //stage 2 increment if(!enable) return; if(++stage2 != target) return; //stage 3 increment stage2 = 0; stage3++; } ares-126/ares/sfc/system/000077500000000000000000000000001415063341600153525ustar00rootroot00000000000000ares-126/ares/sfc/system/controls.cpp000066400000000000000000000003541415063341600177230ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); reset = node->append("Reset"); } auto System::Controls::poll() -> void { platform->input(reset); } ares-126/ares/sfc/system/serialization.cpp000066400000000000000000000034341415063341600207370ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(/* reset = */ false); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(random); s(cartridge); s(cpu); s(smp); s(ppu); s(dsp); if(cartridge.has.ICD) s(icd); if(cartridge.has.MCC) s(mcc); if(cartridge.has.DIP) s(dip); if(cartridge.has.Competition) s(competition); if(cartridge.has.SA1) s(sa1); if(cartridge.has.SuperFX) s(superfx); if(cartridge.has.ARMDSP) s(armdsp); if(cartridge.has.HitachiDSP) s(hitachidsp); if(cartridge.has.NECDSP) s(necdsp); if(cartridge.has.EpsonRTC) s(epsonrtc); if(cartridge.has.SharpRTC) s(sharprtc); if(cartridge.has.SPC7110) s(spc7110); if(cartridge.has.SDD1) s(sdd1); if(cartridge.has.OBC1) s(obc1); if(cartridge.has.MSU1) s(msu1); if(cartridge.has.BSMemorySlot) s(bsmemory); if(cartridge.has.SufamiTurboSlotA) s(sufamiturboA); if(cartridge.has.SufamiTurboSlotB) s(sufamiturboB); s(controllerPort1); s(controllerPort2); s(expansionPort); } ares-126/ares/sfc/system/system.cpp000066400000000000000000000056411415063341600174100ustar00rootroot00000000000000#include namespace ares::SuperFamicom { auto enumerate() -> vector { return { "[Nintendo] Super Famicom (NTSC)", "[Nintendo] Super Famicom (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Random random; Scheduler scheduler; System system; #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { #if defined(CORE_GB) if(cartridge.has.GameBoySlot && GameBoy::cartridge.node) { return GameBoy::cartridge.title(); } #endif if(bsmemory.node) { return {cartridge.title(), " + ", bsmemory.title()}; } if(sufamiturboA.node && sufamiturboB.node) { return {sufamiturboA.title(), " + ", sufamiturboB.title()}; } if(sufamiturboA.node) { return sufamiturboA.title(); } if(sufamiturboB.node) { return sufamiturboB.title(); } if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); auto reset = controls.reset->value(); controls.poll(); if(!reset && controls.reset->value()) power(true); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("Super Famicom")) { information.name = "Super Famicom"; } if(name.find("NTSC")) { information.region = Region::NTSC; information.cpuFrequency = Constants::Colorburst::NTSC * 6.0; } if(name.find("PAL")) { information.region = Region::PAL; information.cpuFrequency = Constants::Colorburst::PAL * 4.8; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; scheduler.reset(); bus.reset(); controls.load(node); cpu.load(node); smp.load(node); dsp.load(node); ppu.load(node); cartridgeSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); expansionPort.load(node); return true; } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); smp.unload(); dsp.unload(); ppu.unload(); cartridgeSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); expansionPort.unload(); pak.reset(); node.reset(); } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); random.entropy(Random::Entropy::Low); cpu.power(reset); smp.power(reset); dsp.power(reset); ppu.power(reset); cartridge.power(reset); scheduler.power(cpu); } } ares-126/ares/sfc/system/system.hpp000066400000000000000000000025401415063341600174100ustar00rootroot00000000000000struct System { Node::System node; VFS::Pak pak; struct Controls { Node::Object node; Node::Input::Button reset; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; } controls; enum class Region : u32 { NTSC, PAL }; auto name() const -> string { return information.name; } auto region() const -> Region { return information.region; } auto cpuFrequency() const -> double { return information.cpuFrequency; } auto apuFrequency() const -> double { return information.apuFrequency; } auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset) -> void; //serialization.cpp auto serialize(bool synchronize = true) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "Super Famicom"; Region region = Region::NTSC; f64 cpuFrequency = Constants::Colorburst::NTSC * 6.0; f64 apuFrequency = 32040.0 * 768.0; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; friend class Cartridge; }; extern Random random; extern System system; auto Region::NTSC() -> bool { return system.region() == System::Region::NTSC; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/sg/000077500000000000000000000000001415063341600136645ustar00rootroot00000000000000ares-126/ares/sg/GNUmakefile000066400000000000000000000012551415063341600157410ustar00rootroot00000000000000ares.components += z80 ares.components += tms9918 ares.components += sn76489 ares.objects += ares-sg-cpu ares.objects += ares-sg-vdp ares.objects += ares-sg-psg ares.objects += ares-sg-system ares.objects += ares-sg-cartridge ares.objects += ares-sg-controller $(object.path)/ares-sg-cpu.o: $(ares.path)/sg/cpu/cpu.cpp $(object.path)/ares-sg-vdp.o: $(ares.path)/sg/vdp/vdp.cpp $(object.path)/ares-sg-psg.o: $(ares.path)/sg/psg/psg.cpp $(object.path)/ares-sg-system.o: $(ares.path)/sg/system/system.cpp $(object.path)/ares-sg-cartridge.o: $(ares.path)/sg/cartridge/cartridge.cpp $(object.path)/ares-sg-controller.o: $(ares.path)/sg/controller/controller.cpp ares-126/ares/sg/cartridge/000077500000000000000000000000001415063341600156305ustar00rootroot00000000000000ares-126/ares/sg/cartridge/board/000077500000000000000000000000001415063341600167175ustar00rootroot00000000000000ares-126/ares/sg/cartridge/board/board.cpp000066400000000000000000000012321415063341600205100ustar00rootroot00000000000000namespace Board { #include "linear.cpp" #include "taiwan-a.cpp" #include "taiwan-b.cpp" auto Interface::load(Memory::Readable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::load(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->read(name)) { memory.allocate(fp->size()); memory.load(fp); return true; } return false; } auto Interface::save(Memory::Writable& memory, string name) -> bool { if(auto fp = pak->write(name)) { memory.save(fp); return true; } return false; } } ares-126/ares/sg/cartridge/board/board.hpp000066400000000000000000000012371415063341600205220ustar00rootroot00000000000000namespace Board { struct Interface { VFS::Pak pak; Interface(Cartridge& cartridge) : cartridge(cartridge) {} virtual ~Interface() = default; virtual auto load() -> void {} virtual auto save() -> void {} virtual auto unload() -> void {} virtual auto read(n16 address) -> maybe { return nothing; } virtual auto write(n16 address, n8 data) -> bool { return false; } virtual auto power() -> void {} virtual auto serialize(serializer&) -> void {} auto load(Memory::Readable&, string name) -> bool; auto load(Memory::Writable&, string name) -> bool; auto save(Memory::Writable&, string name) -> bool; Cartridge& cartridge; }; } ares-126/ares/sg/cartridge/board/linear.cpp000066400000000000000000000020661415063341600207010ustar00rootroot00000000000000struct Linear : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); Interface::load(ram, "save.ram"); } auto save() -> void override { Interface::save(ram, "save.ram"); } auto unload() -> void override { } auto read(n16 address) -> maybe override { if(address >= 0x0000 && (address <= 0x7fff || address < rom.size())) { return rom.read(address - 0x0000); } if(address >= 0x8000 && address <= 0xbfff) { return ram.read(address - 0x8000); } return nothing; } auto write(n16 address, n8 data) -> bool override { if(address >= 0x0000 && (address <= 0x7fff || address < rom.size())) { return rom.write(address - 0x0000, data), true; } if(address >= 0x8000 && address <= 0xbfff) { return ram.write(address - 0x8000, data), true; } return false; } auto power() -> void override { } auto serialize(serializer& s) -> void override { s(ram); } }; ares-126/ares/sg/cartridge/board/taiwan-a.cpp000066400000000000000000000017141415063341600211270ustar00rootroot00000000000000struct TaiwanA : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); ram.allocate(8_KiB); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address) -> maybe override { if(address >= 0x2000 && address <= 0x3fff) { return ram.read(address - 0x2000); } if(address >= 0x0000 && address < rom.size()) { return rom.read(address - 0x0000); } return nothing; } auto write(n16 address, n8 data) -> bool override { if(address >= 0x2000 && address <= 0x3fff) { return ram.write(address - 0x2000, data), true; } if(address >= 0x0000 && address < rom.size()) { return rom.write(address - 0x0000, data), true; } return false; } auto power() -> void override { } auto serialize(serializer& s) -> void override { } }; ares-126/ares/sg/cartridge/board/taiwan-b.cpp000066400000000000000000000016321415063341600211270ustar00rootroot00000000000000struct TaiwanB : Interface { using Interface::Interface; Memory::Readable rom; Memory::Writable ram; auto load() -> void override { Interface::load(rom, "program.rom"); ram.allocate(8_KiB); } auto save() -> void override { } auto unload() -> void override { } auto read(n16 address) -> maybe override { if(address >= 0x0000 && address < 0xbfff) { return rom.read(address - 0x0000); } if(address >= 0xc000) { return ram.read(address - 0xc000); } return nothing; } auto write(n16 address, n8 data) -> bool override { if(address >= 0x0000 && address < 0xbfff) { return rom.write(address - 0x0000, data), true; } if(address >= 0xc000) { return ram.write(address - 0xc000, data), true; } return false; } auto power() -> void override { } auto serialize(serializer& s) -> void override { } }; ares-126/ares/sg/cartridge/cartridge.cpp000066400000000000000000000027231415063341600203040ustar00rootroot00000000000000#include namespace ares::SG1000 { Cartridge& cartridge = cartridgeSlot.cartridge; #include "board/board.cpp" #include "slot.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { return node = parent->append(string{system.name(), " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); information.region = pak->attribute("region"); information.board = pak->attribute("board"); if(information.board == "Linear") board = new Board::Linear{*this}; if(information.board == "Taiwan-A") board = new Board::TaiwanA{*this}; if(information.board == "Taiwan-B") board = new Board::TaiwanB{*this}; if(!board) board = new Board::Interface{*this}; board->pak = pak; board->load(); power(); } auto Cartridge::disconnect() -> void { if(!node || !board) return; board->unload(); board->pak.reset(); board.reset(); node.reset(); } auto Cartridge::save() -> void { if(!node) return; if(board) board->save(); } auto Cartridge::power() -> void { if(board) board->power(); } auto Cartridge::read(n16 address) -> maybe { if(!node) return nothing; if (board) return board->read(address); return nothing; } auto Cartridge::write(n16 address, n8 data) -> bool { if(!node) return false; if (board) return board->write(address, data); return false; } } ares-126/ares/sg/cartridge/cartridge.hpp000066400000000000000000000013571415063341600203130ustar00rootroot00000000000000struct Cartridge; #include "board/board.hpp" struct Cartridge { Node::Peripheral node; VFS::Pak pak; auto title() const -> string { return information.title; } auto region() const -> string { return information.region; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto read(n16 address) -> maybe; auto write(n16 address, n8 data) -> bool; //serialization.cpp auto serialize(serializer&) -> void; unique_pointer board; //private: struct Information { string title; string region; string board; } information; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/sg/cartridge/serialization.cpp000066400000000000000000000001141415063341600212050ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { if(board) s(*board); } ares-126/ares/sg/cartridge/slot.cpp000066400000000000000000000010441415063341600173140ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/sg/cartridge/slot.hpp000066400000000000000000000003471415063341600173260ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/sg/controller/000077500000000000000000000000001415063341600160475ustar00rootroot00000000000000ares-126/ares/sg/controller/controller.cpp000066400000000000000000000001461415063341600207370ustar00rootroot00000000000000#include namespace ares::SG1000 { #include "port.cpp" #include "gamepad/gamepad.cpp" } ares-126/ares/sg/controller/controller.hpp000066400000000000000000000003371415063341600207460ustar00rootroot00000000000000struct Controller { Node::Peripheral node; virtual ~Controller() = default; virtual auto read() -> n8 { return 0xff; } virtual auto write(n8 data) -> void {} }; #include "port.hpp" #include "gamepad/gamepad.hpp" ares-126/ares/sg/controller/gamepad/000077500000000000000000000000001415063341600174455ustar00rootroot00000000000000ares-126/ares/sg/controller/gamepad/gamepad.cpp000066400000000000000000000021741415063341600215530ustar00rootroot00000000000000Gamepad::Gamepad(Node::Port parent) { node = parent->append("Gamepad"); up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); one = node->append("1"); two = node->append("2"); } auto Gamepad::read() -> n8 { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(one); platform->input(two); if(!(up->value() & down->value())) { yHold = 0, upLatch = up->value(), downLatch = down->value(); } else if(!yHold) { yHold = 1, swap(upLatch, downLatch); } if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } n8 data = 0xff; data.bit(0) = !upLatch; data.bit(1) = !downLatch; data.bit(2) = !leftLatch; data.bit(3) = !rightLatch; data.bit(4) = !one->value(); data.bit(5) = !two->value(); return data; } ares-126/ares/sg/controller/gamepad/gamepad.hpp000066400000000000000000000005361415063341600215600ustar00rootroot00000000000000struct Gamepad : Controller { Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button one; Node::Input::Button two; Gamepad(Node::Port); auto read() -> n8 override; private: b1 yHold; b1 upLatch; b1 downLatch; b1 xHold; b1 leftLatch; b1 rightLatch; }; ares-126/ares/sg/controller/port.cpp000066400000000000000000000013731415063341600175430ustar00rootroot00000000000000ControllerPort controllerPort1{"Controller Port 1"}; ControllerPort controllerPort2{"Controller Port 2"}; ControllerPort::ControllerPort(string name) : name(name) { } auto ControllerPort::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Controller"); port->setHotSwappable(true); port->setAllocate([&](auto name) { return allocate(name); }); port->setSupported({"Gamepad"}); } auto ControllerPort::unload() -> void { device = {}; port = {}; } auto ControllerPort::allocate(string name) -> Node::Peripheral { if(name == "Gamepad") device = new Gamepad(port); if(device) return device->node; return {}; } auto ControllerPort::serialize(serializer& s) -> void { } ares-126/ares/sg/controller/port.hpp000066400000000000000000000010141415063341600175400ustar00rootroot00000000000000struct ControllerPort { Node::Port port; unique_pointer device; //port.cpp ControllerPort(string name); auto load(Node::Object) -> void; auto unload() -> void; auto allocate(string name) -> Node::Peripheral; auto read() -> n8 { if(device) return device->read(); return 0xff; } auto write(n8 data) -> void { if(device) return device->write(data); } auto serialize(serializer&) -> void; const string name; }; extern ControllerPort controllerPort1; extern ControllerPort controllerPort2; ares-126/ares/sg/cpu/000077500000000000000000000000001415063341600144535ustar00rootroot00000000000000ares-126/ares/sg/cpu/cpu.cpp000066400000000000000000000021441415063341600157470ustar00rootroot00000000000000#include namespace ares::SG1000 { CPU cpu; #include "memory.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { if(Model::SG1000()) ram.allocate(1_KiB); if(Model::SC3000()) ram.allocate(2_KiB); node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { ram.reset(); debugger = {}; node = {}; } auto CPU::main() -> void { if(state.nmiLine) { state.nmiLine = 0; //edge-sensitive debugger.interrupt("NMI"); irq(0, 0x0066, 0xff); } if(state.irqLine) { //level-sensitive debugger.interrupt("IRQ"); irq(1, 0x0038, 0xff); } debugger.instruction(); instruction(); } auto CPU::step(uint clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::setNMI(bool value) -> void { state.nmiLine = value; } auto CPU::setIRQ(bool value) -> void { state.irqLine = value; } auto CPU::power() -> void { Z80::bus = this; Z80::power(); Thread::create(system.colorburst(), {&CPU::main, this}); PC = 0x0000; //reset vector address state = {}; } } ares-126/ares/sg/cpu/cpu.hpp000066400000000000000000000022341415063341600157540ustar00rootroot00000000000000struct CPU : Z80, Z80::Bus, Thread { Node::Object node; Memory::Writable ram; //SG-1000 = 1KB, SC-3000 = 2KB struct Debugger { //debugger.cpp auto load(Node::Object) -> void; auto instruction() -> void; auto interrupt(string_view) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger; auto synchronizing() const -> bool override { return scheduler.synchronizing(); } //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto setNMI(bool value) -> void; auto setIRQ(bool value) -> void; auto power() -> void; //memory.cpp auto read(n16 address) -> n8 override; auto write(n16 address, n8 data) -> void override; auto in(n16 address) -> n8 override; auto out(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; private: struct State { bool nmiLine = 0; bool irqLine = 0; } state; }; extern CPU cpu; ares-126/ares/sg/cpu/debugger.cpp000066400000000000000000000016411415063341600167450ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(cpu.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return cpu.ram[address]; }); memory.ram->setWrite([&](u32 address, u8 data) -> void { cpu.ram[address] = data; }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(16); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::instruction() -> void { if(tracer.instruction->enabled() && tracer.instruction->address(cpu.PC)) { tracer.instruction->notify(cpu.disassembleInstruction(), cpu.disassembleContext()); } } auto CPU::Debugger::interrupt(string_view type) -> void { if(tracer.interrupt->enabled()) { tracer.interrupt->notify(type); } } ares-126/ares/sg/cpu/memory.cpp000066400000000000000000000021101415063341600164610ustar00rootroot00000000000000auto CPU::read(n16 address) -> n8 { n8 data = 0xff; if(auto result = cartridge.read(address)) { data = result(); } else if(address >= 0xc000) { data = ram.read(address); } return data; } auto CPU::write(n16 address, n8 data) -> void { if(cartridge.write(address, data)) { } else if(address >= 0xc000) { ram.write(address, data); } } auto CPU::in(n16 address) -> n8 { switch(address.bit(6,7)) { case 0: { return 0xff; } case 1: { return 0xff; } case 2: { return !address.bit(0) ? vdp.data() : vdp.status(); } case 3: { auto port1 = controllerPort1.read(); auto port2 = controllerPort2.read(); if(address.bit(0) == 0) { return port1.bit(0,5) << 0 | port2.bit(0,1) << 6; } else { return port2.bit(2,5) << 0 | 1 << 4 | 1 << 5 | port1.bit(6) << 6 | port2.bit(6) << 7; } } } return 0xff; } auto CPU::out(n16 address, n8 data) -> void { switch(address.bit(6,7)) { case 1: { return psg.write(data); } case 2: { return !address.bit(0) ? vdp.data(data) : vdp.control(data); } } } ares-126/ares/sg/cpu/serialization.cpp000066400000000000000000000002161415063341600200330ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { Z80::serialize(s); Thread::serialize(s); s(ram); s(state.nmiLine); s(state.irqLine); } ares-126/ares/sg/psg/000077500000000000000000000000001415063341600144555ustar00rootroot00000000000000ares-126/ares/sg/psg/psg.cpp000066400000000000000000000017721415063341600157610ustar00rootroot00000000000000#include namespace ares::SG1000 { PSG psg; #include "serialization.cpp" auto PSG::load(Node::Object parent) -> void { node = parent->append("PSG"); stream = node->append("PSG"); stream->setChannels(1); stream->setFrequency(system.colorburst() / 16.0); stream->addHighPassFilter(20.0, 1); } auto PSG::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto PSG::main() -> void { auto channels = SN76489::clock(); double output = 0.0; output += volume[channels[0]]; output += volume[channels[1]]; output += volume[channels[2]]; output += volume[channels[3]]; stream->frame(output / 4.0); step(1); } auto PSG::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto PSG::power() -> void { SN76489::power(); Thread::create(system.colorburst() / 16.0, {&PSG::main, this}); for(u32 level : range(15)) { volume[level] = pow(2, level * -2.0 / 6.0); } volume[15] = 0; } } ares-126/ares/sg/psg/psg.hpp000066400000000000000000000005321415063341600157570ustar00rootroot00000000000000struct PSG : SN76489, Thread { Node::Object node; Node::Audio::Stream stream; //psg.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; private: f64 volume[16]; }; extern PSG psg; ares-126/ares/sg/psg/serialization.cpp000066400000000000000000000001401415063341600200310ustar00rootroot00000000000000auto PSG::serialize(serializer& s) -> void { SN76489::serialize(s); Thread::serialize(s); } ares-126/ares/sg/sg.hpp000066400000000000000000000013651415063341600150130ustar00rootroot00000000000000#pragma once //started: 2019-02-19 #include #include #include #include namespace ares::SG1000 { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; struct Model { inline static auto SG1000() -> bool; inline static auto SC3000() -> bool; }; struct Region { inline static auto NTSC() -> bool; inline static auto PAL() -> bool; }; #include #include #include #include #include #include } ares-126/ares/sg/system/000077500000000000000000000000001415063341600152105ustar00rootroot00000000000000ares-126/ares/sg/system/controls.cpp000066400000000000000000000004711415063341600175610ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); pause = node->append("Pause"); } auto System::Controls::poll() -> void { auto value = pause->value(); platform->input(pause); if(!value && pause->value()) cpu.setNMI(1); } ares-126/ares/sg/system/serialization.cpp000066400000000000000000000020141415063341600205660ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(cartridge); s(cpu); s(vdp); s(psg); s(controllerPort1); s(controllerPort2); } ares-126/ares/sg/system/system.cpp000066400000000000000000000043731415063341600172470ustar00rootroot00000000000000#include namespace ares::SG1000 { auto enumerate() -> vector { return { "[Sega] SG-1000 (NTSC)", "[Sega] SG-1000 (PAL)", "[Sega] SC-3000 (NTSC)", "[Sega] SC-3000 (PAL)", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; #include "controls.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); controls.poll(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("SG-1000")) { information.name = "SG-1000"; information.model = Model::SG1000; } if(name.find("SC-3000")) { information.name = "SC-3000"; information.model = Model::SC3000; } if(name.find("NTSC")) { information.region = Region::NTSC; information.colorburst = Constants::Colorburst::NTSC; } if(name.find("PAL")) { information.region = Region::PAL; information.colorburst = Constants::Colorburst::PAL * 4.0 / 5.0; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; scheduler.reset(); controls.load(node); cpu.load(node); vdp.load(node); psg.load(node); cartridgeSlot.load(node); controllerPort1.load(node); controllerPort2.load(node); return true; } auto System::save() -> void { if(!node) return; cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); cpu.unload(); vdp.unload(); psg.unload(); cartridgeSlot.unload(); controllerPort1.unload(); controllerPort2.unload(); node = {}; } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); cartridge.power(); cpu.power(); vdp.power(); psg.power(); scheduler.power(cpu); } } ares-126/ares/sg/system/system.hpp000066400000000000000000000027271415063341600172550ustar00rootroot00000000000000struct System { Node::System node; struct Controls { Node::Object node; Node::Input::Button pause; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; } controls; enum class Model : u32 { SG1000, SC3000 }; enum class Region : u32 { NTSC, PAL }; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto region() const -> Region { return information.region; } auto colorburst() const -> double { return information.colorburst; } //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto save() -> void; auto unload() -> void; auto power(bool reset = false) -> void; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; private: struct Information { string name = "SG-1000"; Model model = Model::SG1000; Region region = Region::NTSC; f64 colorburst = Constants::Colorburst::NTSC; } information; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto Model::SG1000() -> bool { return system.model() == System::Model::SG1000; } auto Model::SC3000() -> bool { return system.model() == System::Model::SC3000; } auto Region::NTSC() -> bool { return system.region() == System::Region::NTSC; } auto Region::PAL() -> bool { return system.region() == System::Region::PAL; } ares-126/ares/sg/vdp/000077500000000000000000000000001415063341600144555ustar00rootroot00000000000000ares-126/ares/sg/vdp/color.cpp000066400000000000000000000016161415063341600163030ustar00rootroot00000000000000auto VDP::color(n32 color) -> n64 { switch(color.bit(0,3)) { case 0: return 0x0000'0000'0000ull; //transparent case 1: return 0x0000'0000'0000ull; //black case 2: return 0x2121'c8c8'4242ull; //medium green case 3: return 0x5e5e'dcdc'7878ull; //light green case 4: return 0x5454'5555'ededull; //dark blue case 5: return 0x7d7d'7676'fcfcull; //light blue case 6: return 0xd4d4'5252'4d4dull; //dark red case 7: return 0x4242'ebeb'f5f5ull; //cyan case 8: return 0xfcfc'5555'5454ull; //medium red case 9: return 0xffff'7979'7878ull; //light red case 10: return 0xd4d4'c1c1'5454ull; //dark yellow case 11: return 0xe6e6'cece'8080ull; //light yellow case 12: return 0x2121'b0b0'3b3bull; //dark green case 13: return 0xc9c9'5b5b'babaull; //magenta case 14: return 0xcccc'cccc'ccccull; //gray case 15: return 0xffff'ffff'ffffull; //white } unreachable; } ares-126/ares/sg/vdp/serialization.cpp000066400000000000000000000001401415063341600200310ustar00rootroot00000000000000auto VDP::serialize(serializer& s) -> void { TMS9918::serialize(s); Thread::serialize(s); } ares-126/ares/sg/vdp/vdp.cpp000066400000000000000000000017451415063341600157610ustar00rootroot00000000000000#include namespace ares::SG1000 { VDP vdp; #include "color.cpp" #include "serialization.cpp" auto VDP::load(Node::Object parent) -> void { vram.allocate(16_KiB, 0x00); node = parent->append("VDP"); screen = node->append("Screen", 256, 192); screen->colors(1 << 4, {&VDP::color, this}); screen->setSize(256, 192); screen->setViewport(0, 0, 256, 192); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); TMS9918::load(screen); } auto VDP::unload() -> void { TMS9918::unload(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto VDP::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto VDP::irq(bool line) -> void { cpu.setIRQ(line); } auto VDP::frame() -> void { screen->frame(); scheduler.exit(Event::Frame); } auto VDP::power() -> void { TMS9918::power(); Thread::create(system.colorburst() * 2, [&] { main(); }); screen->power(); } } ares-126/ares/sg/vdp/vdp.hpp000066400000000000000000000006421415063341600157610ustar00rootroot00000000000000struct VDP : TMS9918, Thread { Node::Object node; Node::Video::Screen screen; //vdp.cpp auto load(Node::Object) -> void; auto unload() -> void; auto step(u32 clocks) -> void override; auto irq(bool line) -> void override; auto frame() -> void override; auto power() -> void; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; }; extern VDP vdp; ares-126/ares/ws/000077500000000000000000000000001415063341600137045ustar00rootroot00000000000000ares-126/ares/ws/GNUmakefile000066400000000000000000000013471415063341600157630ustar00rootroot00000000000000ares.components += v30mz ares.components += m93lcx6 ares.objects += ares-ws-system ares.objects += ares-ws-memory ares.objects += ares-ws-eeprom ares.objects += ares-ws-cartridge ares.objects += ares-ws-cpu ares.objects += ares-ws-ppu ares.objects += ares-ws-apu $(object.path)/ares-ws-system.o: $(ares.path)/ws/system/system.cpp $(object.path)/ares-ws-memory.o: $(ares.path)/ws/memory/memory.cpp $(object.path)/ares-ws-eeprom.o: $(ares.path)/ws/eeprom/eeprom.cpp $(object.path)/ares-ws-cartridge.o: $(ares.path)/ws/cartridge/cartridge.cpp $(object.path)/ares-ws-cpu.o: $(ares.path)/ws/cpu/cpu.cpp $(object.path)/ares-ws-ppu.o: $(ares.path)/ws/ppu/ppu.cpp $(object.path)/ares-ws-apu.o: $(ares.path)/ws/apu/apu.cpp ares-126/ares/ws/apu/000077500000000000000000000000001415063341600144715ustar00rootroot00000000000000ares-126/ares/ws/apu/apu.cpp000066400000000000000000000054741415063341600157740ustar00rootroot00000000000000#include namespace ares::WonderSwan { APU apu; #include "io.cpp" #include "dma.cpp" #include "channel1.cpp" #include "channel2.cpp" #include "channel3.cpp" #include "channel4.cpp" #include "channel5.cpp" #include "serialization.cpp" auto APU::load(Node::Object parent) -> void { node = parent->append("APU"); stream = node->append("PSG"); stream->setChannels(2); stream->setFrequency(3'072'000); stream->addHighPassFilter(20.0, 1); } auto APU::unload() -> void { node->remove(stream); stream.reset(); node.reset(); } auto APU::main() -> void { dma.run(); channel1.run(); channel2.run(); channel3.run(); channel4.run(); channel5.run(); dacRun(); if(++state.sweepClock == 0) channel3.sweep(); step(1); } auto APU::sample(u32 channel, n5 index) -> n4 { n8 data = iram.read((io.waveBase << 6) + (--channel << 4) + (index >> 1)); if(index.bit(0) == 0) return data.bit(0,3); if(index.bit(0) == 1) return data.bit(4,7); unreachable; } auto APU::dacRun() -> void { s32 left = 0; if(channel1.io.enable) left += channel1.output.left; if(channel2.io.enable) left += channel2.output.left; if(channel3.io.enable) left += channel3.output.left; if(channel4.io.enable) left += channel4.output.left; if(channel5.io.enable) left += channel5.output.left * io.headphonesConnected; left = sclamp<16>(left << 5); s32 right = 0; if(channel1.io.enable) right += channel1.output.right; if(channel2.io.enable) right += channel2.output.right; if(channel3.io.enable) right += channel3.output.right; if(channel4.io.enable) right += channel4.output.right; if(channel5.io.enable) right += channel5.output.right * io.headphonesConnected; right = sclamp<16>(right << 5); if(!io.headphonesConnected) { left = right = (left + right) / 2 >> 3 - io.speakerShift; //monaural output if(!io.speakerEnable) { left = 0; right = 0; } } else { if(!io.headphonesEnable) { left = 0; right = 0; } } //ASWAN has three volume steps (0%, 50%, 100%); SPHINX and SPHINX2 have four (0%, 33%, 66%, 100%) f64 amplitude = 1.0 / (SoC::ASWAN() ? 2.0 : 3.0) * io.masterVolume; stream->frame(left / 32768.0 * amplitude, right / 32768.0 * amplitude); } auto APU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(cpu); } auto APU::power() -> void { Thread::create(3'072'000, {&APU::main, this}); bus.map(this, 0x004a, 0x004c); bus.map(this, 0x004e, 0x0050); bus.map(this, 0x0052); bus.map(this, 0x006a, 0x006b); bus.map(this, 0x0080, 0x0095); bus.map(this, 0x009e); dma.power(); channel1.power(); channel2.power(); channel3.power(); channel4.power(); channel5.power(); io = {}; io.headphonesConnected = system.headphones->value(); io.masterVolume = SoC::ASWAN() ? 2 : 3; state = {}; } } ares-126/ares/ws/apu/apu.hpp000066400000000000000000000067511415063341600160000ustar00rootroot00000000000000struct APU : Thread, IO { Node::Object node; Node::Audio::Stream stream; //apu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto sample(u32 channel, n5 index) -> n4; auto dacRun() -> void; auto step(u32 clocks) -> void; auto power() -> void; //io.cpp auto readIO(n16 address) -> n8; auto writeIO(n16 address, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct DMA { //dma.cpp auto run() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n20 source; n20 length; n2 rate; n1 unknown; n1 loop; n1 target; n1 direction; n1 enable; } io; struct State { n32 clock; n20 source; n20 length; } state; } dma; struct Channel1 { //channel1.cpp auto run() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n11 pitch; n4 volumeLeft; n4 volumeRight; n1 enable; } io; struct State { n11 period; n5 sampleOffset; } state; struct Output { n8 left; n8 right; } output; } channel1; struct Channel2 { //channel2.cpp auto run() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n11 pitch; n4 volumeLeft; n4 volumeRight; n1 enable; n1 voice; n2 voiceEnableLeft; n2 voiceEnableRight; } io; struct State { n11 period; n5 sampleOffset; } state; struct Output { n8 left; n8 right; } output; } channel2; struct Channel3 { //channel3.cpp auto sweep() -> void; auto run() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n11 pitch; n4 volumeLeft; n4 volumeRight; i8 sweepValue; n5 sweepTime; n1 enable; n1 sweep; } io; struct State { n11 period; n5 sampleOffset; i32 sweepCounter; } state; struct Output { n8 left; n8 right; } output; } channel3; struct Channel4 { //channel4.cpp auto noiseSample() -> n4; auto run() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n11 pitch; n4 volumeLeft; n4 volumeRight; n3 noiseMode; n1 noiseReset; n1 noiseUpdate; n1 enable; n1 noise; } io; struct State { n11 period; n5 sampleOffset; n1 noiseOutput; n15 noiseLFSR; } state; struct Output { n8 left; n8 right; } output; } channel4; struct Channel5 { //channel5.cpp auto run() -> void; auto power() -> void; //serialization.cpp auto serialize(serializer&) -> void; struct IO { n2 volume; n2 scale; n3 speed; n1 enable; n4 unknown; n1 leftEnable; n1 rightEnable; } io; struct State { n32 clock; i8 data; } state; struct Output { i11 left; i11 right; } output; } channel5; struct IO { n8 waveBase; n1 speakerEnable; n2 speakerShift; n1 headphonesEnable; n1 headphonesConnected; n2 masterVolume; } io; struct State { n13 sweepClock; } state; }; extern APU apu; ares-126/ares/ws/apu/channel1.cpp000066400000000000000000000005021415063341600166630ustar00rootroot00000000000000auto APU::Channel1::run() -> void { if(--state.period == io.pitch) { state.period = 0; auto sample = apu.sample(1, state.sampleOffset++); output.left = sample * io.volumeLeft; output.right = sample * io.volumeRight; } } auto APU::Channel1::power() -> void { io = {}; state = {}; output = {}; } ares-126/ares/ws/apu/channel2.cpp000066400000000000000000000010061415063341600166640ustar00rootroot00000000000000auto APU::Channel2::run() -> void { if(io.voice) { n8 volume = io.volumeLeft << 4 | io.volumeRight << 0; output.left = io.voiceEnableLeft ? volume : (n8)0; output.right = io.voiceEnableRight ? volume : (n8)0; } else if(--state.period == io.pitch) { state.period = 0; auto sample = apu.sample(2, state.sampleOffset++); output.left = sample * io.volumeLeft; output.right = sample * io.volumeRight; } } auto APU::Channel2::power() -> void { io = {}; state = {}; output = {}; } ares-126/ares/ws/apu/channel3.cpp000066400000000000000000000007421415063341600166730ustar00rootroot00000000000000auto APU::Channel3::sweep() -> void { if(io.sweep && --state.sweepCounter < 0) { state.sweepCounter = io.sweepTime; io.pitch += io.sweepValue; } } auto APU::Channel3::run() -> void { if(--state.period == io.pitch) { state.period = 0; auto sample = apu.sample(3, state.sampleOffset++); output.left = sample * io.volumeLeft; output.right = sample * io.volumeRight; } } auto APU::Channel3::power() -> void { io = {}; state = {}; output = {}; } ares-126/ares/ws/apu/channel4.cpp000066400000000000000000000015051415063341600166720ustar00rootroot00000000000000auto APU::Channel4::noiseSample() -> n4 { return state.noiseOutput ? 0xf : 0x0; } auto APU::Channel4::run() -> void { if(--state.period == io.pitch) { state.period = 0; auto sample = io.noise ? noiseSample() : apu.sample(4, state.sampleOffset++); output.left = sample * io.volumeLeft; output.right = sample * io.volumeRight; if(io.noiseReset) { io.noiseReset = 0; state.noiseLFSR = 0; state.noiseOutput = 0; } if(io.noiseUpdate) { static constexpr s32 taps[8] = {14, 10, 13, 4, 8, 6, 9, 11}; auto tap = taps[io.noiseMode]; state.noiseOutput = (1 ^ (state.noiseLFSR >> 7) ^ (state.noiseLFSR >> tap)) & 1; state.noiseLFSR = state.noiseLFSR << 1 | state.noiseOutput; } } } auto APU::Channel4::power() -> void { io = {}; state = {}; output = {}; } ares-126/ares/ws/apu/channel5.cpp000066400000000000000000000007551415063341600167010ustar00rootroot00000000000000auto APU::Channel5::run() -> void { i11 sample; switch(io.scale) { case 0: sample = (n8)state.data << 3 - io.volume; break; case 1: sample = (n8)state.data - 0x100 << 3 - io.volume; break; case 2: sample = (i8)state.data << 3 - io.volume; break; case 3: sample = (n8)state.data << 3; break; } output.left = io.leftEnable ? sample : (i11)0; output.right = io.rightEnable ? sample : (i11)0; } auto APU::Channel5::power() -> void { io = {}; state = {}; output = {}; } ares-126/ares/ws/apu/dma.cpp000066400000000000000000000014561415063341600157440ustar00rootroot00000000000000auto APU::DMA::run() -> void { if(!io.enable) return; if(io.rate == 0 && ++state.clock < 768) return; // 4000hz if(io.rate == 1 && ++state.clock < 512) return; // 6000hz if(io.rate == 2 && ++state.clock < 256) return; //12000hz if(io.rate == 3 && ++state.clock < 128) return; //24000hz state.clock = 0; n8 data = bus.read(state.source); if(io.direction == 0) state.source++; if(io.direction == 1) state.source--; if(io.target == 0) { apu.channel2.io.volumeRight = data.bit(0,3); apu.channel2.io.volumeLeft = data.bit(4,7); } else { apu.channel5.state.data = data; } if(--state.length) return; if(io.loop) { state.source = io.source; state.length = io.length; } else { io.enable = 0; } } auto APU::DMA::power() -> void { io = {}; state = {}; } ares-126/ares/ws/apu/io.cpp000066400000000000000000000144541415063341600156140ustar00rootroot00000000000000auto APU::readIO(n16 address) -> n8 { n8 data; switch(address) { case 0x004a ... 0x004c: //SDMA_SRC data = dma.state.source.byte(address - 0x004a); break; case 0x004e ... 0x0050: //SDMA_LEN data = dma.state.length.byte(address - 0x004e); break; case 0x0052: //SDMA_CTRL data.bit(0,1) = dma.io.rate; data.bit(2) = dma.io.unknown; data.bit(3) = dma.io.loop; data.bit(4) = dma.io.target; data.bit(6) = dma.io.direction; data.bit(7) = dma.io.enable; break; case 0x006a: //SND_HYPER_CTRL data.bit(0,1) = channel5.io.volume; data.bit(2,3) = channel5.io.scale; data.bit(4,6) = channel5.io.speed; data.bit(7) = channel5.io.enable; break; case 0x006b: //SND_HYPER_CHAN_CTRL data.bit(0,3) = channel5.io.unknown; data.bit(5) = channel5.io.leftEnable; data.bit(6) = channel5.io.rightEnable; break; case 0x0080 ... 0x0081: //SND_CH1_PITCH data = channel1.io.pitch.byte(address - 0x0080); break; case 0x0082 ... 0x0083: //SND_CH2_PITCH data = channel2.io.pitch.byte(address - 0x0082); break; case 0x0084 ... 0x0085: //SND_CH3_PITCH data = channel3.io.pitch.byte(address - 0x0084); break; case 0x0086 ... 0x0087: //SND_CH4_PITCH data = channel4.io.pitch.byte(address - 0x0086); break; case 0x0088: //SND_CH1_VOL data.bit(0,3) = channel1.io.volumeRight; data.bit(4,7) = channel1.io.volumeLeft; break; case 0x0089: //SND_CH2_VOL data.bit(0,3) = channel2.io.volumeRight; data.bit(4,7) = channel2.io.volumeLeft; break; case 0x008a: //SND_CH3_VOL data.bit(0,3) = channel3.io.volumeRight; data.bit(4,7) = channel3.io.volumeLeft; break; case 0x008b: //SND_CH4_VOL data.bit(0,3) = channel4.io.volumeRight; data.bit(4,7) = channel4.io.volumeLeft; break; case 0x008c: //SND_SWEEP_VALUE data = channel3.io.sweepValue; break; case 0x008d: //SND_SWEEP_TIME data = channel3.io.sweepTime; break; case 0x008e: //SND_NOISE data.bit(0,2) = channel4.io.noiseMode; data.bit(3) = 0; //noiseReset always reads as zero data.bit(4) = channel4.io.noiseUpdate; break; case 0x008f: //SND_WAVE_BASE data = io.waveBase; break; case 0x0090: //SND_CTRL data.bit(0) = channel1.io.enable; data.bit(1) = channel2.io.enable; data.bit(2) = channel3.io.enable; data.bit(3) = channel4.io.enable; data.bit(5) = channel2.io.voice; data.bit(6) = channel3.io.sweep; data.bit(7) = channel4.io.noise; break; case 0x0091: //SND_OUTPUT data.bit(0) = io.speakerEnable; data.bit(1,2) = io.speakerShift; data.bit(3) = io.headphonesEnable; data.bit(7) = io.headphonesConnected; break; case 0x0092 ... 0x0093: //SND_RANDOM data = channel4.state.noiseLFSR.byte(address - 0x0092); break; case 0x0094: //SND_VOICE_CTRL data.bit(0,1) = channel2.io.voiceEnableRight; data.bit(2,3) = channel2.io.voiceEnableLeft; break; case 0x0095: //SND_HYPERVOICE data = channel5.state.data; break; case 0x009e: //SND_VOLUME if(!SoC::ASWAN()) { data.bit(0,1) = io.masterVolume; } break; } return data; } auto APU::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x004a ... 0x004c: //SDMA_SRC dma.io.source.byte(address - 0x004a) = data; break; case 0x004e ... 0x0050: //SDMA_LEN dma.io.length.byte(address - 0x004e) = data; break; case 0x0052: { //SDMA_CTRL bool trigger = !dma.io.enable && data.bit(7); dma.io.rate = data.bit(0,1); dma.io.unknown = data.bit(2); dma.io.loop = data.bit(3); dma.io.target = data.bit(4); dma.io.direction = data.bit(6); dma.io.enable = data.bit(7); if(trigger) { dma.state.source = dma.io.source; dma.state.length = dma.io.length; } } break; case 0x006a: //SND_HYPER_CTRL channel5.io.volume = data.bit(0,1); channel5.io.scale = data.bit(2,3); channel5.io.speed = data.bit(4,6); channel5.io.enable = data.bit(7); break; case 0x006b: //SND_HYPER_CHAN_CTRL channel5.io.unknown = data.bit(0,3); channel5.io.leftEnable = data.bit(5); channel5.io.rightEnable = data.bit(6); break; case 0x0080 ... 0x0081: //SND_CH1_PITCH channel1.io.pitch.byte(address - 0x0080) = data; break; case 0x0082 ... 0x0083: //SND_CH2_PITCH channel2.io.pitch.byte(address - 0x0082) = data; break; case 0x0084 ... 0x0085: //SND_CH3_PITCH channel3.io.pitch.byte(address - 0x0084) = data; break; case 0x0086 ... 0x0087: //SND_CH4_PITCH channel4.io.pitch.byte(address - 0x0086) = data; break; case 0x0088: //SND_CH1_VOL channel1.io.volumeRight = data.bit(0,3); channel1.io.volumeLeft = data.bit(4,7); break; case 0x0089: //SND_CH2_VOL channel2.io.volumeRight = data.bit(0,3); channel2.io.volumeLeft = data.bit(4,7); break; case 0x008a: //SND_CH3_VOL channel3.io.volumeRight = data.bit(0,3); channel3.io.volumeLeft = data.bit(4,7); break; case 0x008b: //SND_CH4_VOL channel4.io.volumeRight = data.bit(0,3); channel4.io.volumeLeft = data.bit(4,7); break; case 0x008c: //SND_SWEEP_VALUE channel3.io.sweepValue = data; break; case 0x008d: //SND_SWEEP_TIME channel3.io.sweepTime = data.bit(0,4); break; case 0x008e: //SND_NOISE channel4.io.noiseMode = data.bit(0,2); channel4.io.noiseReset = data.bit(3); channel4.io.noiseUpdate = data.bit(4); break; case 0x008f: //SND_WAVE_BASE io.waveBase = data; break; case 0x0090: //SND_CTRL channel1.io.enable = data.bit(0); channel2.io.enable = data.bit(1); channel3.io.enable = data.bit(2); channel4.io.enable = data.bit(3); channel2.io.voice = data.bit(5); channel3.io.sweep = data.bit(6); channel4.io.noise = data.bit(7); break; case 0x0091: //SND_OUTPUT io.speakerEnable = data.bit(0); io.speakerShift = data.bit(1,2); io.headphonesEnable = data.bit(3); break; case 0x0094: //SND_VOICE_CTRL channel2.io.voiceEnableRight = data.bit(0,1); channel2.io.voiceEnableLeft = data.bit(2,3); break; case 0x009e: //SND_VOLUME if(!SoC::ASWAN()) { io.masterVolume = data.bit(0,1); ppu.updateIcons(); } break; } return; } ares-126/ares/ws/apu/serialization.cpp000066400000000000000000000035761415063341600200650ustar00rootroot00000000000000auto APU::serialize(serializer& s) -> void { Thread::serialize(s); s(dma); s(channel1); s(channel2); s(channel3); s(channel4); s(channel5); s(io.waveBase); s(io.speakerEnable); s(io.speakerShift); s(io.headphonesEnable); s(io.headphonesConnected); s(io.masterVolume); s(state.sweepClock); } auto APU::DMA::serialize(serializer& s) -> void { s(io.source); s(io.length); s(io.rate); s(io.unknown); s(io.loop); s(io.target); s(io.direction); s(io.enable); s(state.clock); s(state.source); s(state.length); } auto APU::Channel1::serialize(serializer& s) -> void { s(io.pitch); s(io.volumeLeft); s(io.volumeRight); s(io.enable); s(state.period); s(state.sampleOffset); s(output.left); s(output.right); } auto APU::Channel2::serialize(serializer& s) -> void { s(io.pitch); s(io.volumeLeft); s(io.volumeRight); s(io.enable); s(io.voice); s(io.voiceEnableLeft); s(io.voiceEnableRight); s(state.period); s(state.sampleOffset); s(output.left); s(output.right); } auto APU::Channel3::serialize(serializer& s) -> void { s(io.pitch); s(io.volumeLeft); s(io.volumeRight); s(io.sweepValue); s(io.sweepTime); s(io.enable); s(io.sweep); s(state.period); s(state.sampleOffset); s(state.sweepCounter); s(output.left); s(output.right); } auto APU::Channel4::serialize(serializer& s) -> void { s(io.pitch); s(io.volumeLeft); s(io.volumeRight); s(io.noiseMode); s(io.noiseReset); s(io.noiseUpdate); s(io.enable); s(io.noise); s(state.period); s(state.sampleOffset); s(state.noiseOutput); s(state.noiseLFSR); s(output.left); s(output.right); } auto APU::Channel5::serialize(serializer& s) -> void { s(io.volume); s(io.scale); s(io.speed); s(io.enable); s(io.unknown); s(io.leftEnable); s(io.rightEnable); s(state.clock); s(state.data); s(output.left); s(output.right); } ares-126/ares/ws/cartridge/000077500000000000000000000000001415063341600156505ustar00rootroot00000000000000ares-126/ares/ws/cartridge/cartridge.cpp000066400000000000000000000042011415063341600203150ustar00rootroot00000000000000#include namespace ares::WonderSwan { Cartridge& cartridge = cartridgeSlot.cartridge; #include "slot.cpp" #include "memory.cpp" #include "rtc.cpp" #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto Cartridge::allocate(Node::Port parent) -> Node::Peripheral { string name = system.name(); if(Model::SwanCrystal()) name = "WonderSwan Color"; return node = parent->append(string{name, " Cartridge"}); } auto Cartridge::connect() -> void { if(!node->setPak(pak = platform->pak(node))) return; information = {}; information.title = pak->attribute("title"); if(pak->attribute("orientation") == "horizontal") information.orientation = "Horizontal"; if(pak->attribute("orientation") == "vertical" ) information.orientation = "Vertical"; if(auto fp = pak->read("program.rom")) { rom.allocate(fp->size()); rom.load(fp); } if(auto fp = pak->read("save.ram")) { ram.allocate(fp->size()); ram.load(fp); } if(auto fp = pak->read("save.eeprom")) { eeprom.allocate(fp->size(), 16, 1, 0xff); fp->read({eeprom.data, eeprom.size}); } if(auto fp = pak->read("time.rtc")) { rtc.ram.allocate(fp->size()); rtc.ram.load(fp); } debugger.load(node); power(); } auto Cartridge::disconnect() -> void { if(!node) return; save(); debugger.unload(node); Thread::destroy(); rom.reset(); ram.reset(); rtc.ram.reset(); } auto Cartridge::save() -> void { if(!node) return; if(auto fp = pak->write("save.ram")) { ram.save(fp); } if(auto fp = pak->write("save.eeprom")) { fp->write({eeprom.data, eeprom.size}); } if(auto fp = pak->write("time.rtc")) { rtc.ram.save(fp); } } auto Cartridge::main() -> void { if(rtc.ram) { rtc.tickSecond(); rtc.checkAlarm(); } step(3'072'000); } auto Cartridge::step(u32 clocks) -> void { Thread::step(clocks); synchronize(cpu); } auto Cartridge::power() -> void { Thread::create(3'072'000, {&Cartridge::main, this}); eeprom.power(); rtc.power(); bus.map(this, 0x00c0, 0x00c8); if(rtc.ram) bus.map(this, 0x00ca, 0x00cb); bus.map(this, 0x00cc, 0x00cd); io = {}; } } ares-126/ares/ws/cartridge/cartridge.hpp000066400000000000000000000042431415063341600203300ustar00rootroot00000000000000struct Cartridge : Thread, IO { Node::Peripheral node; VFS::Pak pak; Memory::Readable rom; Memory::Writable ram; EEPROM eeprom; struct RTC; struct Debugger { Cartridge& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory rom; Node::Debugger::Memory ram; Node::Debugger::Memory eeprom; } memory; } debugger{*this}; auto title() const { return information.title; } auto orientation() const { return information.orientation; } //cartridge.cpp auto allocate(Node::Port) -> Node::Peripheral; auto connect() -> void; auto disconnect() -> void; auto save() -> void; auto power() -> void; auto main() -> void; auto step(u32 clocks) -> void; //memory.cpp auto readROM(n20 address) -> n8; auto writeROM(n20 address, n8 data) -> void; auto readRAM(n20 address) -> n8; auto writeRAM(n20 address, n8 data) -> void; //io.cpp auto readIO(n16 address) -> n8 override; auto writeIO(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(serializer&) -> void; struct Information { string title; string orientation = "Horizontal"; } information; struct RTC { Cartridge& self; Memory::Writable ram; //rtc.cpp auto load() -> void; auto save() -> void; auto tickSecond() -> void; auto checkAlarm() -> void; auto status() -> n8; auto execute(n8 data) -> void; auto read() -> n8; auto write(n8 data) -> void; auto power() -> void; n8 command; n4 index; n8 alarm; n8 alarmHour; n8 alarmMinute; auto year() -> n8& { return ram[0]; } auto month() -> n8& { return ram[1]; } auto day() -> n8& { return ram[2]; } auto weekday() -> n8& { return ram[3]; } auto hour() -> n8& { return ram[4]; } auto minute() -> n8& { return ram[5]; } auto second() -> n8& { return ram[6]; } } rtc{*this}; struct IO { n8 romBank2 = 0xff; n8 sramBank = 0xff; n8 romBank0 = 0xff; n8 romBank1 = 0xff; n8 gpoEnable; n8 gpoData; } io; }; #include "slot.hpp" extern Cartridge& cartridge; ares-126/ares/ws/cartridge/debugger.cpp000066400000000000000000000025031415063341600201400ustar00rootroot00000000000000auto Cartridge::Debugger::load(Node::Object parent) -> void { if(self.rom) { memory.rom = parent->append("Cartridge ROM"); memory.rom->setSize(self.rom.size()); memory.rom->setRead([&](u32 address) -> u8 { return self.rom.read(address); }); memory.rom->setWrite([&](u32 address, u8 data) -> void { return self.rom.program(address, data); }); } if(self.ram) { memory.ram = parent->append("Cartridge RAM"); memory.ram->setSize(self.ram.size()); memory.ram->setRead([&](u32 address) -> u8 { return self.ram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return self.ram.write(address, data); }); } if(self.eeprom) { memory.eeprom = parent->append("Cartridge EEPROM"); memory.eeprom->setSize(self.eeprom.size); memory.eeprom->setRead([&](u32 address) -> u8 { return self.eeprom.data[address]; }); memory.eeprom->setWrite([&](u32 address, u8 data) -> void { self.eeprom.data[address] = data; }); } } auto Cartridge::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.rom); parent->remove(memory.ram); parent->remove(memory.eeprom); memory.rom.reset(); memory.ram.reset(); memory.eeprom.reset(); } ares-126/ares/ws/cartridge/io.cpp000066400000000000000000000037471415063341600167760ustar00rootroot00000000000000auto Cartridge::readIO(n16 address) -> n8 { n8 data; switch(address) { case 0x00c0: //BANK_ROM2 data = io.romBank2; break; case 0x00c1: //BANK_SRAM data = io.sramBank; break; case 0x00c2: //BANK_ROM0 data = io.romBank0; break; case 0x00c3: //BANK_ROM1 data = io.romBank1; break; case 0x00c4: //EEP_DATALO data = eeprom.read(EEPROM::DataLo); break; case 0x00c5: //EEP_DATAHI data = eeprom.read(EEPROM::DataHi); break; case 0x00c6: //EEP_ADDRLO data = eeprom.read(EEPROM::AddressLo); break; case 0x00c7: //EEP_ADDRHI data = eeprom.read(EEPROM::AddressHi); break; case 0x00c8: //EEP_STATUS data = eeprom.read(EEPROM::Status); break; case 0x00ca: //RTC_STATUS data = rtc.status(); break; case 0x00cb: //RTC_DATA data = rtc.read(); break; case 0x00cc: //GPO_EN data = io.gpoEnable; break; case 0x00cd: //GPO_DATA data = io.gpoData; break; } return data; } auto Cartridge::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x00c0: //BANK_ROM2 io.romBank2 = data; break; case 0x00c1: //BANK_SRAM io.sramBank = data; break; case 0x00c2: //BANK_ROM0 io.romBank0 = data; break; case 0x00c3: //BANK_ROM1 io.romBank1 = data; break; case 0x00c4: //EEP_DATALO eeprom.write(EEPROM::DataLo, data); break; case 0x00c5: //EEP_DATAHI eeprom.write(EEPROM::DataHi, data); break; case 0x00c6: //EEP_ADDRLO eeprom.write(EEPROM::AddressLo, data); break; case 0x00c7: //EEP_ADDRHI eeprom.write(EEPROM::AddressHi, data); break; case 0x00c8: //EEP_CMD eeprom.write(EEPROM::Command, data); break; case 0x00ca: //RTC_CMD rtc.execute(data); break; case 0x00cb: //RTC_DATA rtc.write(data); break; case 0x00cc: //GPO_EN io.gpoEnable = data; break; case 0x00cd: //GPO_DATA io.gpoData = data; break; } return; } ares-126/ares/ws/cartridge/memory.cpp000066400000000000000000000013761415063341600176730ustar00rootroot00000000000000//20000-fffff auto Cartridge::readROM(n20 address) -> n8 { if(!rom) return 0x00; n28 offset; switch(address.bit(16,19)) { case 2: offset = io.romBank0 << 16 | (n16)address; break; //20000-2ffff case 3: offset = io.romBank1 << 16 | (n16)address; break; //30000-3ffff default: offset = io.romBank2 << 20 | (n20)address; break; //40000-fffff } return rom.read(offset); } auto Cartridge::writeROM(n20 address, n8 data) -> void { } //10000-1ffff auto Cartridge::readRAM(n20 address) -> n8 { if(!ram) return 0x00; n24 offset = io.sramBank << 16 | (n16)address; return ram.read(offset); } auto Cartridge::writeRAM(n20 address, n8 data) -> void { if(!ram) return; n24 offset = io.sramBank << 16 | (n16)address; ram.write(offset, data); } ares-126/ares/ws/cartridge/rtc.cpp000066400000000000000000000066041415063341600171520ustar00rootroot00000000000000//calculate time between last play of game and current time; //increment RTC by said amount of seconds auto Cartridge::RTC::load() -> void { n64 timestamp = 0; for(auto n : range(8)) timestamp.byte(n) = ram.read(8 + n); if(!timestamp) return; //new save file timestamp = time(0) - timestamp; while(timestamp--) tickSecond(); } //save time when game is unloaded auto Cartridge::RTC::save() -> void { n64 timestamp = time(0); for(auto n : range(8)) ram.write(8 + n, timestamp.byte(n)); } auto Cartridge::RTC::tickSecond() -> void { if(++second() < 60) return; second() = 0; if(++minute() < 60) return; minute() = 0; if(++hour() < 24) return; hour() = 0; weekday() += 1; weekday() %= 7; u32 daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if(year() && (year() % 100) && !(year() % 4)) daysInMonth[1]++; if(++day() < daysInMonth[month()]) return; day() = 0; if(++month() < 12) return; month() = 0; ++year(); } auto Cartridge::RTC::checkAlarm() -> void { if(!alarm.bit(5)) return; if(hour() == alarmHour && minute() == alarmMinute) { cpu.raise(CPU::Interrupt::Cartridge); } else { cpu.lower(CPU::Interrupt::Cartridge); } } auto Cartridge::RTC::status() -> n8 { n8 data; data.bit(0,6) = 0; //unknown data.bit(7) = 1; //0 = busy; 1 = ready for command return data; } auto Cartridge::RTC::execute(n8 data) -> void { command = data; //RESET if(command == 0x10) { year() = 0; month() = 0; day() = 0; weekday() = 0; hour() = 0; minute() = 0; second() = 0; } //ALARM_FLAG if(command == 0x12) { index = 0; } //SET_DATETIME if(command == 0x14) { index = 0; } //GET_DATETIME if(command == 0x15) { index = 0; } //SET_ALARM if(command == 0x18) { index = 0; } } auto Cartridge::RTC::read() -> n8 { n8 data = 0; static auto encode = [](n8 data) -> n8 { return (data / 10 << 4) + data % 10; }; //GET_DATETIME if(command == 0x15) { switch(index) { case 0: data = encode(year()); break; case 1: data = encode(month() + 1); break; case 2: data = encode(day() + 1); break; case 3: data = encode(weekday()); break; case 4: data = encode(hour()); break; case 5: data = encode(minute()); break; case 6: data = encode(second()); break; } if(++index >= 7) command = 0; } return data; } auto Cartridge::RTC::write(n8 data) -> void { static auto decode = [](n8 data) -> n8 { return (data >> 4) * 10 + (data & 0x0f); }; //ALARM_FLAG if(command == 0x12) { if(data.bit(6)) alarm = data; //todo: is bit6 really required to be set? command = 0; checkAlarm(); } //SET_DATETIME if(command == 0x14) { switch(index) { case 0: year() = decode(data); break; case 1: month() = decode(data) - 1; break; case 2: day() = decode(data) - 1; break; case 3: weekday() = decode(data); break; case 4: hour() = decode(data); break; case 5: minute() = decode(data); break; case 6: second() = decode(data); break; } if(++index >= 7) command = 0; } //SET_ALARM if(command == 0x18) { switch(index) { case 0: alarmHour = decode(data.bit(0,6)); break; case 1: alarmMinute = decode(data); break; } if(++index >= 2) command = 0; } } auto Cartridge::RTC::power() -> void { command = 0; index = 0; alarm = 0; alarmHour = 0; alarmMinute = 0; } ares-126/ares/ws/cartridge/serialization.cpp000066400000000000000000000004751415063341600212370ustar00rootroot00000000000000auto Cartridge::serialize(serializer& s) -> void { Thread::serialize(s); s(ram); s(eeprom); s(rtc.ram); s(rtc.command); s(rtc.index); s(rtc.alarm); s(rtc.alarmHour); s(rtc.alarmMinute); s(io.romBank0); s(io.romBank1); s(io.romBank2); s(io.sramBank); s(io.gpoEnable); s(io.gpoData); } ares-126/ares/ws/cartridge/slot.cpp000066400000000000000000000010441415063341600173340ustar00rootroot00000000000000CartridgeSlot cartridgeSlot{"Cartridge Slot"}; CartridgeSlot::CartridgeSlot(string name) : name(name) { } auto CartridgeSlot::load(Node::Object parent) -> void { port = parent->append(name); port->setFamily(system.name()); port->setType("Cartridge"); port->setAllocate([&](auto name) { return cartridge.allocate(port); }); port->setConnect([&] { return cartridge.connect(); }); port->setDisconnect([&] { return cartridge.disconnect(); }); } auto CartridgeSlot::unload() -> void { cartridge.disconnect(); port = {}; } ares-126/ares/ws/cartridge/slot.hpp000066400000000000000000000003471415063341600173460ustar00rootroot00000000000000struct CartridgeSlot { Node::Port port; Cartridge cartridge; //slot.cpp CartridgeSlot(string name); auto load(Node::Object) -> void; auto unload() -> void; const string name; }; extern CartridgeSlot cartridgeSlot; ares-126/ares/ws/cpu/000077500000000000000000000000001415063341600144735ustar00rootroot00000000000000ares-126/ares/ws/cpu/cpu.cpp000066400000000000000000000021771415063341600157750ustar00rootroot00000000000000#include namespace ares::WonderSwan { CPU cpu; #include "io.cpp" #include "keypad.cpp" #include "interrupt.cpp" #include "dma.cpp" #include "debugger.cpp" #include "serialization.cpp" auto CPU::load(Node::Object parent) -> void { node = parent->append("CPU"); debugger.load(node); } auto CPU::unload() -> void { debugger.unload(node); node.reset(); } auto CPU::main() -> void { poll(); debugger.instruction(); instruction(); } auto CPU::step(u32 clocks) -> void { Thread::step(clocks); Thread::synchronize(); } auto CPU::read(n20 address) -> n8 { return bus.read(address); } auto CPU::write(n20 address, n8 data) -> void { return bus.write(address, data); } auto CPU::in(n16 port) -> n8 { return bus.readIO(port); } auto CPU::out(n16 port, n8 data) -> void { return bus.writeIO(port, data); } auto CPU::power() -> void { V30MZ::power(); Thread::create(3'072'000, {&CPU::main, this}); bus.map(this, 0x00a0); bus.map(this, 0x00b0, 0x00b6); if(Model::WonderSwanColor() || Model::SwanCrystal()) { bus.map(this, 0x0040, 0x0049); bus.map(this, 0x0062); } io = {}; } } ares-126/ares/ws/cpu/cpu.hpp000066400000000000000000000034071415063341600157770ustar00rootroot00000000000000struct CPU : V30MZ, Thread, IO { Node::Object node; struct Debugger { CPU& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; auto instruction() -> void; auto interrupt(n3) -> void; struct Memory { Node::Debugger::Memory ram; } memory; struct Tracer { Node::Debugger::Tracer::Instruction instruction; Node::Debugger::Tracer::Notification interrupt; } tracer; } debugger{*this}; struct Interrupt { enum : u32 { SerialSend, Input, Cartridge, SerialReceive, LineCompare, VblankTimer, Vblank, HblankTimer, };}; //cpu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto step(u32 clocks) -> void override; auto read(n20 address) -> n8 override; auto write(n20 address, n8 data) -> void override; auto in(n16 port) -> n8 override; auto out(n16 port, n8 data) -> void override; auto power() -> void; //io.cpp auto readIO(n16 address) -> n8 override; auto writeIO(n16 address, n8 data) -> void override; //interrupt.cpp auto poll() -> void; auto raise(n3) -> void; auto lower(n3) -> void; //serialization.cpp auto serialize(serializer&) -> void; struct DMA { CPU& self; //dma.cpp auto transfer() -> void; n20 source; n16 target; n16 length; n1 enable; n1 direction; //0 = increment, 1 = increment } dma{*this}; struct Keypad { CPU& self; //keypad.cpp auto read() -> n4; n3 matrix; } keypad{*this}; struct IO { n1 cartridgeEnable; n8 interruptBase; n8 interruptEnable; n8 interruptStatus; n8 serialData; n1 serialBaudRate; //0 = 9600; 1 = 38400 n1 serialEnable; } io; }; extern CPU cpu; ares-126/ares/ws/cpu/debugger.cpp000066400000000000000000000030071415063341600167630ustar00rootroot00000000000000auto CPU::Debugger::load(Node::Object parent) -> void { memory.ram = parent->append("CPU RAM"); memory.ram->setSize(SoC::ASWAN() ? 16_KiB : 64_KiB); memory.ram->setRead([&](u32 address) -> u8 { return iram.read(address); }); memory.ram->setWrite([&](u32 address, u8 data) -> void { return iram.write(address, data); }); tracer.instruction = parent->append("Instruction", "CPU"); tracer.instruction->setAddressBits(20); tracer.interrupt = parent->append("Interrupt", "CPU"); } auto CPU::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.ram); parent->remove(tracer.instruction); parent->remove(tracer.interrupt); memory.ram.reset(); tracer.instruction.reset(); tracer.interrupt.reset(); } auto CPU::Debugger::instruction() -> void { if(likely(!tracer.instruction->enabled())) return; if(tracer.instruction->address(n20(self.PS * 16 + self.PC))) { if(auto instruction = self.disassembleInstruction()) { tracer.instruction->notify(instruction, {self.disassembleContext(), " V:", pad(ppu.vcounter(), 3L), " H:", pad(ppu.hcounter(), 3L)}); } } } auto CPU::Debugger::interrupt(n3 type) -> void { if(likely(!tracer.interrupt->enabled())) return; static const string name[8] = { "SerialSend", "Input", "Cartridge", "SerialReceive", "LineCompare", "VblankTimer", "Vblank", "HblankTimer" }; tracer.interrupt->notify(name[type]); } ares-126/ares/ws/cpu/dma.cpp000066400000000000000000000012031415063341600157340ustar00rootroot00000000000000auto CPU::DMA::transfer() -> void { //length of 0 or SRAM source address cause immediate termination if(length == 0 || source.byte(2) == 1) { enable = 0; return; } self.step(5); while(length) { self.step(2); u16 data = 0; //once DMA is started; SRAM reads still incur time penalty, but do not transfer if(source.byte(2) != 1) { data |= self.read(source + 0) << 0; data |= self.read(source + 1) << 8; self.write(target + 0, data >> 0); self.write(target + 1, data >> 8); } source += direction ? -2 : +2; target += direction ? -2 : +2; length -= 2; }; enable = 0; } ares-126/ares/ws/cpu/interrupt.cpp000066400000000000000000000007711415063341600172400ustar00rootroot00000000000000auto CPU::poll() -> void { if(!state.poll) return; for(auto id : reverse(range(8))) { if(!io.interruptEnable.bit(id)) continue; if(!io.interruptStatus.bit(id)) continue; state.halt = false; if(!PSW.IE) continue; debugger.interrupt(id); interrupt(io.interruptBase + id); return; } } auto CPU::raise(n3 irq) -> void { if(!io.interruptEnable.bit(irq)) return; io.interruptStatus.bit(irq) = 1; } auto CPU::lower(n3 irq) -> void { io.interruptStatus.bit(irq) = 0; } ares-126/ares/ws/cpu/io.cpp000066400000000000000000000055551415063341600156200ustar00rootroot00000000000000auto CPU::readIO(n16 address) -> n8 { n8 data; switch(address) { case 0x0040 ... 0x0042: //DMA_SRC data = dma.source.byte(address - 0x0040); break; case 0x0044 ... 0x0045: //DMA_DST data = dma.target.byte(address - 0x0044); break; case 0x0046 ... 0x0047: //DMA_LEN data = dma.length.byte(address - 0x0046); break; case 0x0048: //DMA_CTRL data.bit(0) = dma.direction; data.bit(7) = dma.enable; break; case 0x0062: //WSC_SYSTEM data.bit(7) = SoC::SPHINX2(); break; case 0x00a0: //HW_FLAGS data.bit(0) = io.cartridgeEnable; data.bit(1) = !SoC::ASWAN(); data.bit(2) = 1; //0 = 8-bit bus width; 1 = 16-bit bus width data.bit(7) = 1; //1 = built-in self-test passed break; case 0x00b0: //INT_BASE data = io.interruptBase; data |= SoC::ASWAN() ? 3 : 0; break; case 0x00b1: //SER_DATA data = io.serialData; break; case 0x00b2: //INT_ENABLE data = io.interruptEnable; break; case 0x00b3: //SER_STATUS data.bit(2) = 1; //hack: always report send buffer as empty data.bit(6) = io.serialBaudRate; data.bit(7) = io.serialEnable; break; case 0x00b4: //INT_STATUS data = io.interruptStatus; break; case 0x00b5: //KEYPAD data.bit(0,3) = keypad.read(); data.bit(4,6) = keypad.matrix; break; } return data; } auto CPU::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x0040 ... 0x0042: //DMA_SRC dma.source.byte(address - 0x0040) = data; dma.source &= ~1; break; case 0x0044 ... 0x0045: //DMA_DST dma.target.byte(address - 0x0044) = data; dma.target &= ~1; break; case 0x0046 ... 0x0047: //DMA_LEN dma.length.byte(address - 0x0046) = data; dma.length &= ~1; break; case 0x0048: //DMA_CTRL dma.direction = data.bit(6); dma.enable = data.bit(7); if(dma.enable) dma.transfer(); break; case 0x0062: //WSC_SYSTEM if(!SoC::ASWAN()) { if(data.bit(0)) scheduler.exit(Event::Power); } break; case 0x00a0: //HW_FLAGS //todo: d2 (bus width) bit is writable; but ... it will do very bad things io.cartridgeEnable |= data.bit(0); //bit can never be unset (boot ROM lockout) break; case 0x00b0: //INT_BASE io.interruptBase = SoC::ASWAN() ? data & ~7 : data & ~1; break; case 0x00b1: //SER_DATA io.serialData = data; break; case 0x00b2: //INT_ENABLE //disabling an interrupt that is pending will *not* clear its pending flag io.interruptEnable = data; break; case 0x00b3: //SER_STATUS io.serialBaudRate = data.bit(6); io.serialEnable = data.bit(7); break; case 0x00b5: //KEYPAD keypad.matrix = data.bit(4,6); break; case 0x00b6: //INT_ACK //acknowledge only edge-sensitive interrupts io.interruptStatus &= ~(data & 0b11110010); break; } return; } ares-126/ares/ws/cpu/keypad.cpp000066400000000000000000000040541415063341600164570ustar00rootroot00000000000000auto CPU::Keypad::read() -> n4 { n4 data; bool horizontal = ppu.screen->rotation() == 0; if(Model::WonderSwan() || Model::WonderSwanColor() || Model::SwanCrystal()) { if(matrix.bit(0)) { //d4 if(horizontal) { data.bit(0) = system.controls.y1->value(); data.bit(1) = system.controls.y2->value(); data.bit(2) = system.controls.y3->value(); data.bit(3) = system.controls.y4->value(); } else { data.bit(0) = system.controls.x4->value(); data.bit(1) = system.controls.x1->value(); data.bit(2) = system.controls.x2->value(); data.bit(3) = system.controls.x3->value(); } } if(matrix.bit(1)) { //d5 if(horizontal) { data.bit(0) = system.controls.x1->value(); data.bit(1) = system.controls.x2->value(); data.bit(2) = system.controls.x3->value(); data.bit(3) = system.controls.x4->value(); } else { data.bit(0) = system.controls.y4->value(); data.bit(1) = system.controls.y1->value(); data.bit(2) = system.controls.y2->value(); data.bit(3) = system.controls.y3->value(); } } if(matrix.bit(2)) { //d6 data.bit(1) = system.controls.start->value(); data.bit(2) = system.controls.a->value(); data.bit(3) = system.controls.b->value(); } } if(Model::PocketChallengeV2()) { //this pin is always forced to logic high, which has the practical effect of bypassing the IPLROM. data.bit(1) = 1; if(matrix.bit(0)) { //d4 data.bit(0) = system.controls.clear->value(); data.bit(2) = system.controls.circle->value(); data.bit(3) = system.controls.pass->value(); } if(matrix.bit(1)) { //d5 data.bit(0) = system.controls.view->value(); data.bit(2) = system.controls.escape->value(); data.bit(3) = system.controls.rightLatch; } if(matrix.bit(2)) { //d6 data.bit(0) = system.controls.leftLatch; data.bit(2) = system.controls.down->value(); data.bit(3) = system.controls.up->value(); } } return data; } ares-126/ares/ws/cpu/serialization.cpp000066400000000000000000000005561415063341600200620ustar00rootroot00000000000000auto CPU::serialize(serializer& s) -> void { V30MZ::serialize(s); Thread::serialize(s); s(dma.source); s(dma.target); s(dma.length); s(dma.enable); s(dma.direction); s(keypad.matrix); s(io.cartridgeEnable); s(io.interruptBase); s(io.interruptEnable); s(io.interruptStatus); s(io.serialData); s(io.serialBaudRate); s(io.serialEnable); } ares-126/ares/ws/eeprom/000077500000000000000000000000001415063341600151735ustar00rootroot00000000000000ares-126/ares/ws/eeprom/eeprom.cpp000066400000000000000000000041011415063341600171620ustar00rootroot00000000000000#include namespace ares::WonderSwan { #include "serialization.cpp" auto EEPROM::power() -> void { M93LCx6::power(); io = {}; } auto EEPROM::read(u32 port) -> n8 { n8 data; if(!size) return data = 0xff; if(port == DataLo) return io.data.byte(0); if(port == DataHi) return io.data.byte(1); if(port == AddressLo) return io.address.byte(0); if(port == AddressHi) return io.address.byte(1); if(port == Status) { data.bit(0) = io.readReady; data.bit(1) = io.writeReady; data.bit(2) = io.eraseReady; data.bit(3) = io.resetReady; data.bit(4) = io.readPending; data.bit(5) = io.writePending; data.bit(6) = io.erasePending; data.bit(7) = io.resetPending; return data; } return data; } auto EEPROM::write(u32 port, n8 data) -> void { if(!size) return; if(port == DataLo) { io.data.byte(0) = data; return; } if(port == DataHi) { io.data.byte(1) = data; return; } if(port == AddressLo) { io.address.byte(0) = data; return; } if(port == AddressHi) { io.address.byte(1) = data; return; } if(port == Command) { io.readPending = data.bit(4); io.writePending = data.bit(5); io.erasePending = data.bit(6); io.resetPending = data.bit(7); //nothing happens unless only one bit is set. if(bit::count(data.bit(4,7)) != 1) return; if(io.resetPending) { M93LCx6::power(); io.resetPending = 0; return; } //start bit + command bits + address bits for(u32 index : reverse(range(1 + 2 + input.addressLength))) input.write(io.address.bit(index)); if(io.readPending) { edge(); output.read(); //padding bit for(u32 index : reverse(range(input.dataLength))) io.data.bit(index) = output.read(); io.readPending = 0; } if(io.writePending) { for(u32 index : reverse(range(input.dataLength))) input.write(io.data.bit(index)); edge(); io.writePending = 0; } if(io.erasePending) { edge(); io.erasePending = 0; } input.flush(); output.flush(); return; } } } ares-126/ares/ws/eeprom/eeprom.hpp000066400000000000000000000011511415063341600171710ustar00rootroot00000000000000struct EEPROM : M93LCx6 { enum : u32 { DataLo, DataHi, AddressLo, AddressHi, Status, Command = Status, }; //eeprom.cpp auto power() -> void; auto read(u32 port) -> n8; auto write(u32 port, n8 data) -> void; //serialization.cpp auto serialize(serializer&) -> void; private: struct IO { n16 data; n16 address; //note: timing is not yet emulated; ready bits always remain set. n1 readReady = 1; n1 writeReady = 1; n1 eraseReady = 1; n1 resetReady = 1; n1 readPending; n1 writePending; n1 erasePending; n1 resetPending; } io; }; ares-126/ares/ws/eeprom/serialization.cpp000066400000000000000000000004201415063341600205500ustar00rootroot00000000000000auto EEPROM::serialize(serializer& s) -> void { M93LCx6::serialize(s); s(io.data); s(io.address); s(io.readReady); s(io.writeReady); s(io.eraseReady); s(io.resetReady); s(io.readPending); s(io.writePending); s(io.erasePending); s(io.resetPending); } ares-126/ares/ws/memory/000077500000000000000000000000001415063341600152145ustar00rootroot00000000000000ares-126/ares/ws/memory/memory.cpp000066400000000000000000000031461415063341600172340ustar00rootroot00000000000000#include namespace ares::WonderSwan { InternalRAM iram; Bus bus; auto InternalRAM::power() -> void { for(auto& byte : memory) byte = 0x00; size = SoC::ASWAN() ? 16_KiB : 64_KiB; maskByte = size - 1; maskWord = size - 2; maskLong = size - 4; } auto InternalRAM::serialize(serializer& s) -> void { s(array_span{memory, SoC::ASWAN() ? 16_KiB : 64_KiB}); } auto Bus::power() -> void { for(auto& io : port) io = nullptr; } auto Bus::read(n20 address) -> n8 { if(!cpu.io.cartridgeEnable && address >= 0x100000 - system.bootROM.size()) { return system.bootROM.read(address); } switch(address.bit(16,19)) { default: case 0x0: return iram.read(address); case 0x1: return cartridge.readRAM(address); case 0x2 ... 0xf: return cartridge.readROM(address); } } auto Bus::write(n20 address, n8 data) -> void { if(!cpu.io.cartridgeEnable && address >= 0x100000 - system.bootROM.size()) { return system.bootROM.write(address, data); } switch(address.bit(16,19)) { default: case 0x0: return iram.write(address, data); case 0x1: return cartridge.writeRAM(address, data); case 0x2 ... 0xf: return cartridge.writeROM(address, data); } } auto Bus::map(IO* io, u16 lo, maybe hi) -> void { for(u32 address = lo; address <= (hi ? hi() : lo); address++) port[address] = io; } auto Bus::readIO(n16 address) -> n8 { if(auto io = port[address]) return io->readIO(address); if(address == 0x00ca) return 0x80; //Mama Mitte (unknown status bit) return 0x00; } auto Bus::writeIO(n16 address, n8 data) -> void { if(auto io = port[address]) return io->writeIO(address, data); } } ares-126/ares/ws/memory/memory.hpp000066400000000000000000000025751415063341600172460ustar00rootroot00000000000000struct IO { virtual auto readIO(n16 address) -> n8 = 0; virtual auto writeIO(n16 address, n8 data) -> void = 0; }; struct InternalRAM { auto power() -> void; auto serialize(serializer&) -> void; auto read(n16 address) -> n8 { if(address >= size) return 0x90; return memory[address & maskByte]; } auto write(n16 address, n8 data) -> void { if(address >= size) return; memory[address & maskByte] = data; } auto read8(n16 address) const -> n16 { return memory[address & maskByte]; } auto read16(n16 address) const -> n16 { n8 d0 = memory[address & maskWord | 0]; n8 d1 = memory[address & maskWord | 1]; return d0 << 0 | d1 << 8; } auto read32(n16 address) const -> n32 { n8 d0 = memory[address & maskLong | 0]; n8 d1 = memory[address & maskLong | 1]; n8 d2 = memory[address & maskLong | 2]; n8 d3 = memory[address & maskLong | 3]; return d0 << 0 | d1 << 8 | d2 << 16 | d3 << 24; } private: n8 memory[65536]; n32 size; n32 maskByte; n32 maskWord; n32 maskLong; }; struct Bus { auto power() -> void; auto read(n20 address) -> n8; auto write(n20 address, n8 data) -> void; auto map(IO* io, u16 lo, maybe hi = nothing) -> void; auto readIO(n16 address) -> n8; auto writeIO(n16 address, n8 data) -> void; private: IO* port[64 * 1024] = {nullptr}; }; extern InternalRAM iram; extern Bus bus; ares-126/ares/ws/ppu/000077500000000000000000000000001415063341600145105ustar00rootroot00000000000000ares-126/ares/ws/ppu/color.cpp000066400000000000000000000010531415063341600163310ustar00rootroot00000000000000auto PPU::color(n32 color) -> n64 { u32 b = color.bit(0, 3); u32 g = color.bit(4, 7); u32 r = color.bit(8,11); u64 R = image::normalize(r, 4, 16); u64 G = image::normalize(g, 4, 16); u64 B = image::normalize(b, 4, 16); if(colorEmulation->value()) { R = (r * 26 + g * 4 + b * 2); G = ( g * 24 + b * 8); B = (r * 6 + g * 4 + b * 22); R = image::normalize(min(480, R), 9, 16); G = image::normalize(min(480, G), 9, 16); B = image::normalize(min(480, B), 9, 16); } return R << 32 | G << 16 | B << 0; } ares-126/ares/ws/ppu/dac.cpp000066400000000000000000000017441415063341600157510ustar00rootroot00000000000000auto PPU::DAC::scanline(n8 y) -> void { output = self.screen->pixels().data() + y * self.screen->width(); enable[0] = enable[1]; contrast[0] = contrast[1]; backdrop[0] = backdrop[1]; } auto PPU::DAC::pixel(n8 x, n8 y) -> void { n12 color = self.backdrop(backdrop[0]); if(enable[0]) { if(screen1.output.valid) color = screen1.output.color; if(screen2.output.valid) color = screen2.output.color; if( sprite.output.valid) color = sprite.output.color; if(Model::WonderSwanColor() && contrast[0] == 1) { n4 b = color.bit(0, 3); n4 g = color.bit(4, 7); n4 r = color.bit(8,11); //this is just a rough approximation, not accurate to the actual effect. color.bit(0, 3) = min(15, b * 1.5); color.bit(4, 7) = min(15, g * 1.5); color.bit(8,11) = min(15, r * 1.5); } } output[x] = color; } auto PPU::DAC::power() -> void { enable[0] = enable[1] = 0; contrast[0] = contrast[1] = 0; backdrop[0] = backdrop[1] = 0; } ares-126/ares/ws/ppu/io.cpp000066400000000000000000000161361415063341600156320ustar00rootroot00000000000000auto PPU::readIO(n16 address) -> n8 { n8 data; switch(address) { case 0x0000: //DISP_CTRL data.bit(0) = screen1.enable[1]; data.bit(1) = screen2.enable[1]; data.bit(2) = sprite.enable[1]; data.bit(3) = sprite.window.enable[1]; data.bit(4) = screen2.window.invert[1]; data.bit(5) = screen2.window.enable[1]; break; case 0x0001: //BACK_COLOR if(grayscale()) { data.bit(0,2) = dac.backdrop[1].bit(0,2); } else { data.bit(0,7) = dac.backdrop[1].bit(0,7); } break; case 0x0002: //LINE_CUR //todo: unknown if this is vcounter or vcounter%(vtotal+1) data = io.vcounter; break; case 0x0003: //LINE_CMP data = io.vcompare; break; case 0x0004: //SPR_BASE if(depth() == 2) { data.bit(0,4) = sprite.oamBase.bit(0,4); } else { data.bit(0,5) = sprite.oamBase.bit(0,5); } break; case 0x0005: //SPR_FIRST data = sprite.first; break; case 0x0006: //SPR_COUNT data = sprite.count; break; case 0x0007: //MAP_BASE if(depth() == 2) { data.bit(0,2) = screen1.mapBase[1].bit(0,2); data.bit(4,6) = screen2.mapBase[1].bit(0,2); } else { data.bit(0,3) = screen1.mapBase[1].bit(0,3); data.bit(4,7) = screen2.mapBase[1].bit(0,3); } break; case 0x0008: //SCR2_WIN_X0 data = screen2.window.x0[1]; break; case 0x0009: //SCR2_WIN_Y0 data = screen2.window.y0[1]; break; case 0x000a: //SCR2_WIN_X1 data = screen2.window.x1[1]; break; case 0x000b: //SCR2_WIN_Y1 data = screen2.window.y1[1]; break; case 0x000c: //SPR_WIN_X0 data = sprite.window.x0[1]; break; case 0x000d: //SPR_WIN_Y0 data = sprite.window.y0[1]; break; case 0x000e: //SPR_WIN_X1 data = sprite.window.x1[1]; break; case 0x000f: //SPR_WIN_Y1 data = sprite.window.y1[1]; break; case 0x0010: //SCR1_X data = screen1.hscroll[1]; break; case 0x0011: //SCR1_Y data = screen1.vscroll[1]; break; case 0x0012: //SCR2_X data = screen2.hscroll[1]; break; case 0x0013: //SCR2_Y data = screen2.vscroll[1]; break; case 0x0014: //LCD_CTRL data.bit(0) = dac.enable[1]; if(SoC::ASWAN()) { data.bit(1,7) = dac.unknown.bit(1,7); } if(SoC::SPHINX()) { data.bit(1) = dac.contrast[1]; data.bit(4,7) = dac.unknown.bit(4,7); } break; case 0x0015: //LCD_ICON data.bit(0) = lcd.icon.sleeping; data.bit(1) = lcd.icon.orientation1; data.bit(2) = lcd.icon.orientation0; data.bit(3) = lcd.icon.auxiliary0; data.bit(4) = lcd.icon.auxiliary1; data.bit(5) = lcd.icon.auxiliary2; break; case 0x0016: //LCD_VTOTAL data = io.vtotal; break; case 0x0017: //LCD_VSYNC data = io.vsync; break; case 0x001c ... 0x001f: //PALMONO_POOL data.bit(0,3) = pram.pool[address.bit(0,1) << 1 | 0]; data.bit(4,7) = pram.pool[address.bit(0,1) << 1 | 1]; break; case 0x0020 ... 0x003f: //PALMONO data.bit(0,3) = pram.palette[address.bit(1,4)].color[address.bit(0) << 1 | 0]; data.bit(4,7) = pram.palette[address.bit(1,4)].color[address.bit(0) << 1 | 1]; break; case 0x00a2: //TMR_CTRL data.bit(0) = htimer.enable; data.bit(1) = htimer.repeat; data.bit(2) = vtimer.enable; data.bit(3) = vtimer.repeat; break; case 0x00a4 ... 0x00a5: //HTMR_FREQ data = htimer.frequency.byte(address - 0x00a4); break; case 0x00a6 ... 0x00a7: //VTMR_FREQ data = vtimer.frequency.byte(address - 0x00a6); break; case 0x00a8 ... 0x00a9: //HTMR_CTR data = htimer.counter.byte(address - 0x00a8); break; case 0x00aa ... 0x00ab: //VTMR_CTR data = vtimer.counter.byte(address - 0x00aa); break; } return data; } auto PPU::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x0000: //DISP_CTRL screen1.enable[1] = data.bit(0); screen2.enable[1] = data.bit(1); sprite.enable[1] = data.bit(2); sprite.window.enable[1] = data.bit(3); screen2.window.invert[1] = data.bit(4); screen2.window.enable[1] = data.bit(5); break; case 0x0001: //BACK_COLOR dac.backdrop[1] = data; break; case 0x0003: //LINE_CMP io.vcompare = data; break; case 0x0004: //SPR_BASE sprite.oamBase = data.bit(0,5); break; case 0x0005: //SPR_FIRST sprite.first = data.bit(0,6); break; case 0x0006: //SPR_COUNT sprite.count = data; break; case 0x0007: //MAP_BASE screen1.mapBase[1] = data.bit(0,3); screen2.mapBase[1] = data.bit(4,7); break; case 0x0008: //SCR2_WIN_X0 screen2.window.x0[1] = data; break; case 0x0009: //SCR2_WIN_Y0 screen2.window.y0[1] = data; break; case 0x000a: //SCR2_WIN_X1 screen2.window.x1[1] = data; break; case 0x000b: //SCR2_WIN_Y1 screen2.window.y1[1] = data; break; case 0x000c: //SPR_WIN_X0 sprite.window.x0[1] = data; break; case 0x000d: //SPR_WIN_Y0 sprite.window.y0[1] = data; break; case 0x000e: //SPR_WIN_X1 sprite.window.x1[1] = data; break; case 0x000f: //SPR_WIN_Y1 sprite.window.y1[1] = data; break; case 0x0010: //SCR1_X screen1.hscroll[1] = data; break; case 0x0011: //SCR1_Y screen1.vscroll[1] = data; break; case 0x0012: //SCR2_X screen2.hscroll[1] = data; break; case 0x0013: //SCR2_Y screen2.vscroll[1] = data; break; case 0x0014: //LCD_CTRL dac.enable[1] = data.bit(0); if(SoC::ASWAN()) { dac.unknown.bit(1,7) = data.bit(1,7); } if(SoC::SPHINX()) { dac.contrast[1] = data.bit(1); dac.unknown.bit(4,7) = data.bit(4,7); } break; case 0x0015: //LCD_ICON lcd.icon.sleeping = data.bit(0); lcd.icon.orientation1 = data.bit(1); lcd.icon.orientation0 = data.bit(2); lcd.icon.auxiliary0 = data.bit(3); lcd.icon.auxiliary1 = data.bit(4); lcd.icon.auxiliary2 = data.bit(5); updateIcons(); updateOrientation(); break; case 0x0016: //LCD_VTOTAL io.vtotal = data; break; case 0x0017: //LCD_VSYNC io.vsync = data; break; case 0x001c ... 0x001f: //PALMONO_POOL pram.pool[address.bit(0,1) << 1 | 0] = data.bit(0,3); pram.pool[address.bit(0,1) << 1 | 1] = data.bit(4,7); break; case 0x0020 ... 0x003f: //PALMONO pram.palette[address.bit(1,4)].color[address.bit(0) << 1 | 0] = data.bit(0,2); pram.palette[address.bit(1,4)].color[address.bit(0) << 1 | 1] = data.bit(4,6); break; case 0x00a2: //TMR_CTRL if(!htimer.enable && data.bit(0)) htimer.counter = htimer.frequency; if(!vtimer.enable && data.bit(1)) vtimer.counter = vtimer.frequency; htimer.enable = data.bit(0); htimer.repeat = data.bit(1); vtimer.enable = data.bit(2); vtimer.repeat = data.bit(3); break; case 0x00a4 ... 0x00a5: //HTMR_FREQ htimer.frequency.byte(address - 0x00a4) = data; htimer.counter .byte(address - 0x00a4) = data; break; case 0x00a6 ... 0x00a7: //VTMR_FREQ vtimer.frequency.byte(address - 0x00a6) = data; vtimer.counter .byte(address - 0x00a6) = data; break; } return; } ares-126/ares/ws/ppu/memory.cpp000066400000000000000000000027631415063341600165340ustar00rootroot00000000000000auto PPU::fetch(n10 tile, n3 x, n3 y) -> n4 { n4 color; if(depth() == 2) tile &= 0x1ff; if(depth() == 4) tile &= 0x3ff; if(planar() && depth() == 2) { n16 data = iram.read16(0x2000 + (tile << 4) + (y << 1)); color.bit(0) = data.bit( 7 - x); color.bit(1) = data.bit(15 - x); } if(planar() && depth() == 4) { n32 data = iram.read32(0x4000 + (tile << 5) + (y << 2)); color.bit(0) = data.bit( 7 - x); color.bit(1) = data.bit(15 - x); color.bit(2) = data.bit(23 - x); color.bit(3) = data.bit(31 - x); } if(packed() && depth() == 2) { n8 data = iram.read8(0x2000 + (tile << 4) + (y << 1) + (x >> 2)); color.bit(0,1) = data >> 6 - (x.bit(0,1) << 1); } if(packed() && depth() == 4) { n8 data = iram.read8(0x4000 + (tile << 5) + (y << 2) + (x >> 1)); color.bit(0,3) = data >> 4 - (x.bit(0) << 2); } return color; } auto PPU::backdrop(n8 color) -> n12 { if(grayscale()) { n4 luma = 15 - pram.pool[color & 7]; return luma << 0 | luma << 4 | luma << 8; } else { return iram.read16(0xfe00 + (color << 1)); } } auto PPU::palette(n4 palette, n4 color) -> n12 { if(grayscale()) { n3 pool = pram.palette[palette].color[color & 3]; n4 luma = 15 - pram.pool[pool]; return luma << 0 | luma << 4 | luma << 8; } else { return iram.read16(0xfe00 + (palette << 5) + (color << 1)); } } auto PPU::opaque(n4 palette, n4 color) -> n1 { if(color) return true; if(depth() == 2 && !palette.bit(2)) return true; return false; } ares-126/ares/ws/ppu/ppu.cpp000066400000000000000000000240571415063341600160300ustar00rootroot00000000000000#include namespace ares::WonderSwan { PPU ppu; #include "io.cpp" #include "memory.cpp" #include "window.cpp" #include "screen.cpp" #include "sprite.cpp" #include "dac.cpp" #include "timer.cpp" #include "color.cpp" #include "serialization.cpp" auto PPU::load(Node::Object parent) -> void { node = parent->append("PPU"); //LCD display icons are simulated as an extended part of the LCD screen using sprites //this isn't ideal as the display icons are vectors, but it's the best we can do for now const u32 width = 224 + (SoC::ASWAN() ? 0 : 13); const u32 height = 144 + (Model::WonderSwan() ? 13 : 0); screen = node->append("Screen", width, height); screen->colors(1 << 12, {&PPU::color, this}); screen->setSize(width, height); screen->setScale(1.0, 1.0); screen->setAspect(1.0, 1.0); screen->setFillColor(SoC::ASWAN() ? 0xfff : 0); colorEmulation = screen->append("Color Emulation", true, [&](auto value) { screen->resetPalette(); }); colorEmulation->setDynamic(true); interframeBlending = screen->append("Interframe Blending", true, [&](auto value) { screen->setInterframeBlending(value); }); interframeBlending->setDynamic(true); if(!Model::PocketChallengeV2()) { orientation = screen->append("Orientation", "Automatic", [&](auto value) { updateOrientation(); }); orientation->setDynamic(true); orientation->setAllowedValues({"Automatic", "Horizontal", "Vertical"}); showIcons = screen->append("Show Icons", true, [&](auto value) { updateIcons(); }); showIcons->setDynamic(true); } if(!Model::PocketChallengeV2()) { icon.auxiliary0 = screen->append("Auxiliary - Small Icon"); icon.auxiliary1 = screen->append("Auxiliary - Medium Icon"); icon.auxiliary2 = screen->append("Auxiliary - Large Icon"); icon.headphones = screen->append("Headphones"); icon.initialized = screen->append("Initialized"); icon.lowBattery = screen->append("Low Battery"); icon.orientation0 = screen->append("Orientation - Horizontal"); icon.orientation1 = screen->append("Orientation - Vertical"); icon.poweredOn = screen->append("Powered On"); icon.sleeping = screen->append("Sleeping"); } if(Model::WonderSwan()) { icon.volumeA0 = screen->append("Volume - 0%"); icon.volumeA1 = screen->append("Volume - 50%"); icon.volumeA2 = screen->append("Volume - 100%"); } if(!SoC::ASWAN()) { icon.volumeB0 = screen->append("Volume - 0%"); icon.volumeB1 = screen->append("Volume - 33%"); icon.volumeB2 = screen->append("Volume - 66%"); icon.volumeB3 = screen->append("Volume - 100%"); } bool invert = SoC::ASWAN(); if(!Model::PocketChallengeV2()) { icon.auxiliary0->setImage(Resource::Sprite::WonderSwan::Auxiliary0, invert); icon.auxiliary1->setImage(Resource::Sprite::WonderSwan::Auxiliary1, invert); icon.auxiliary2->setImage(Resource::Sprite::WonderSwan::Auxiliary2, invert); icon.headphones->setImage(Resource::Sprite::WonderSwan::Headphones, invert); icon.initialized->setImage(Resource::Sprite::WonderSwan::Initialized, invert); icon.lowBattery->setImage(Resource::Sprite::WonderSwan::LowBattery, invert); icon.orientation0->setImage(Resource::Sprite::WonderSwan::Orientation0, invert); icon.orientation1->setImage(Resource::Sprite::WonderSwan::Orientation1, invert); icon.poweredOn->setImage(Resource::Sprite::WonderSwan::PoweredOn, invert); icon.sleeping->setImage(Resource::Sprite::WonderSwan::Sleeping, invert); } if(Model::WonderSwan()) { icon.volumeA0->setImage(Resource::Sprite::WonderSwan::VolumeA0, invert); icon.volumeA1->setImage(Resource::Sprite::WonderSwan::VolumeA1, invert); icon.volumeA2->setImage(Resource::Sprite::WonderSwan::VolumeA2, invert); } if(!SoC::ASWAN()) { icon.volumeB0->setImage(Resource::Sprite::WonderSwan::VolumeB0, invert); icon.volumeB1->setImage(Resource::Sprite::WonderSwan::VolumeB1, invert); icon.volumeB2->setImage(Resource::Sprite::WonderSwan::VolumeB2, invert); icon.volumeB3->setImage(Resource::Sprite::WonderSwan::VolumeB3, invert); } if(Model::WonderSwan()) { icon.poweredOn->setPosition ( 0, 144); icon.initialized->setPosition ( 13, 144); icon.sleeping->setPosition ( 26, 144); icon.lowBattery->setPosition ( 39, 144); icon.volumeA2->setPosition ( 52, 144); icon.volumeA1->setPosition ( 52, 144); icon.volumeA0->setPosition ( 52, 144); icon.headphones->setPosition ( 65, 144); icon.orientation1->setPosition( 78, 144); icon.orientation0->setPosition( 91, 144); icon.auxiliary2->setPosition (104, 144); icon.auxiliary1->setPosition (117, 144); icon.auxiliary0->setPosition (130, 144); } if(!SoC::ASWAN()) { icon.auxiliary0->setPosition (224, 0); icon.auxiliary1->setPosition (224, 13); icon.auxiliary2->setPosition (224, 26); icon.orientation0->setPosition(224, 39); icon.orientation1->setPosition(224, 52); icon.headphones->setPosition (224, 65); icon.volumeB0->setPosition (224, 78); icon.volumeB1->setPosition (224, 78); icon.volumeB2->setPosition (224, 78); icon.volumeB3->setPosition (224, 78); icon.lowBattery->setPosition (224, 91); icon.sleeping->setPosition (224, 104); icon.initialized->setPosition (224, 117); icon.poweredOn->setPosition (224, 130); } if(!Model::PocketChallengeV2()) { screen->attach(icon.auxiliary0); screen->attach(icon.auxiliary1); screen->attach(icon.auxiliary2); screen->attach(icon.headphones); screen->attach(icon.initialized); screen->attach(icon.lowBattery); screen->attach(icon.orientation0); screen->attach(icon.orientation1); screen->attach(icon.poweredOn); screen->attach(icon.sleeping); } if(Model::WonderSwan()) { screen->attach(icon.volumeA0); screen->attach(icon.volumeA1); screen->attach(icon.volumeA2); } if(!SoC::ASWAN()) { screen->attach(icon.volumeB0); screen->attach(icon.volumeB1); screen->attach(icon.volumeB2); screen->attach(icon.volumeB3); } updateOrientation(); updateIcons(); } auto PPU::unload() -> void { icon = {}; showIcons.reset(); orientation.reset(); interframeBlending.reset(); colorEmulation.reset(); screen->quit(); node->remove(screen); screen.reset(); node.reset(); } auto PPU::main() -> void { if(io.vcounter == 142) { sprite.frame(); } if(io.vcounter < 144) { n8 y = io.vcounter % (io.vtotal + 1); screen1.scanline(y); screen2.scanline(y); sprite.scanline(y); dac.scanline(y); for(n8 x : range(224)) { screen1.pixel(x, y); screen2.pixel(x, y); sprite.pixel(x, y); dac.pixel(x, y); step(1); } step(32); } else { step(256); } scanline(); if(htimer.step()) cpu.raise(CPU::Interrupt::HblankTimer); } //vtotal+1 = scanlines per frame //vtotal<143 inhibits vblank and repeats the screen image until vcounter=144 //todo: unknown how votal<143 interferes with vcompare interrupts auto PPU::scanline() -> void { io.vcounter++; if(io.vcounter >= max(144, io.vtotal + 1)) return frame(); if(io.vcounter == io.vcompare) cpu.raise(CPU::Interrupt::LineCompare); if(io.vcounter == 144) { cpu.raise(CPU::Interrupt::Vblank); if(vtimer.step()) cpu.raise(CPU::Interrupt::VblankTimer); } } auto PPU::frame() -> void { io.vcounter = 0; io.field = !io.field; screen->setViewport(0, 0, screen->width(), screen->height()); screen->frame(); scheduler.exit(Event::Frame); } auto PPU::step(u32 clocks) -> void { io.hcounter += clocks; Thread::step(clocks); Thread::synchronize(cpu); } auto PPU::power() -> void { Thread::create(3'072'000, {&PPU::main, this}); screen->power(); bus.map(this, 0x0000, 0x0017); bus.map(this, 0x001c, 0x003f); bus.map(this, 0x00a2); bus.map(this, 0x00a4, 0x00ab); screen1.power(); screen2.power(); sprite.power(); dac.power(); pram = {}; lcd = {}; htimer = {}; vtimer = {}; io = {}; updateIcons(); } auto PPU::updateIcons() -> void { if(Model::PocketChallengeV2() || !showIcons) return; bool visible = showIcons->value(); icon.poweredOn->setVisible(visible); icon.sleeping->setVisible(lcd.icon.sleeping & visible); icon.orientation1->setVisible(lcd.icon.orientation1 & visible); icon.orientation0->setVisible(lcd.icon.orientation0 & visible); icon.auxiliary0->setVisible(lcd.icon.auxiliary0 & visible); icon.auxiliary1->setVisible(lcd.icon.auxiliary1 & visible); icon.auxiliary2->setVisible(lcd.icon.auxiliary2 & visible); auto volume = apu.io.masterVolume; if(Model::WonderSwan()) { icon.volumeA0->setVisible(volume == 0 & visible); icon.volumeA1->setVisible(volume == 1 & visible); icon.volumeA2->setVisible(volume == 2 & visible); } if(Model::WonderSwanColor() || Model::SwanCrystal()) { icon.volumeB0->setVisible(volume == 0 & visible); icon.volumeB1->setVisible(volume == 1 & visible); icon.volumeB2->setVisible(volume == 2 & visible); icon.volumeB3->setVisible(volume == 3 & visible); } auto headphones = apu.io.headphonesConnected; icon.headphones->setVisible(headphones & visible); } auto PPU::updateOrientation() -> void { if(Model::PocketChallengeV2() || !orientation) return; if(lcd.icon.orientation1) io.orientation = 1; if(lcd.icon.orientation0) io.orientation = 0; auto orientation = this->orientation->value(); if(orientation == "Horizontal" || (orientation == "Automatic" && io.orientation == 0)) { screen->setRotation(0); } if(orientation == "Vertical" || (orientation == "Automatic" && io.orientation == 1)) { screen->setRotation(90); } } } ares-126/ares/ws/ppu/ppu.hpp000066400000000000000000000103301415063341600160220ustar00rootroot00000000000000struct PPU : Thread, IO { Node::Object node; Node::Video::Screen screen; Node::Setting::Boolean colorEmulation; Node::Setting::Boolean interframeBlending; Node::Setting::String orientation; Node::Setting::Boolean showIcons; struct Icon { Node::Video::Sprite auxiliary0; Node::Video::Sprite auxiliary1; Node::Video::Sprite auxiliary2; Node::Video::Sprite headphones; Node::Video::Sprite initialized; Node::Video::Sprite lowBattery; Node::Video::Sprite orientation0; Node::Video::Sprite orientation1; Node::Video::Sprite poweredOn; Node::Video::Sprite sleeping; Node::Video::Sprite volumeA0; Node::Video::Sprite volumeA1; Node::Video::Sprite volumeA2; Node::Video::Sprite volumeB0; Node::Video::Sprite volumeB1; Node::Video::Sprite volumeB2; Node::Video::Sprite volumeB3; } icon; auto hcounter() const -> u32 { return io.hcounter; } auto vcounter() const -> u32 { return io.vcounter; } auto field() const -> bool { return io.field; } auto planar() const -> bool { return system.mode().bit(0) == 0; } auto packed() const -> bool { return system.mode().bit(0) == 1; } auto depth() const -> u32 { return system.mode().bit(1,2) != 3 ? 2 : 4; } auto grayscale() const -> bool { return system.mode().bit(1,2) == 0; } //ppu.cpp auto load(Node::Object) -> void; auto unload() -> void; auto main() -> void; auto scanline() -> void; auto frame() -> void; auto step(u32 clocks) -> void; auto power() -> void; auto updateIcons() -> void; auto updateOrientation() -> void; //io.cpp auto readIO(n16 address) -> n8 override; auto writeIO(n16 address, n8 data) -> void override; //memory.cpp auto fetch(n10 tile, n3 x, n3 y) -> n4; auto backdrop(n8 color) -> n12; auto palette(n4 palette, n4 color) -> n12; auto opaque(n4 palette, n4 color) -> n1; //color.cpp auto color(n32) -> n64; //serialization.cpp auto serialize(serializer&) -> void; //private: struct Output { n1 valid; n12 color; }; struct Window { //window.cpp auto scanline(n8 y) -> void; auto inside(n8 x, n8 y) const -> bool; auto outside(n8 x, n8 y) const -> bool; auto power() -> void; n1 enable[2]; n1 invert[2]; //Screen2 only n8 x0[2]; n8 x1[2]; n8 y0[2]; n8 y1[2]; }; struct Screen { PPU& self; //screen.cpp auto scanline(n8 y) -> void; auto pixel(n8 x, n8 y) -> void; auto power() -> void; n1 enable[2]; n4 mapBase[2]; n8 hscroll[2]; n8 vscroll[2]; Output output; }; struct Screen1 : Screen { //screen.cpp auto scanline(n8 y) -> void; auto pixel(n8 x, n8 y) -> void; auto power() -> void; } screen1{*this}; struct Screen2 : Screen { //screen.cpp auto scanline(n8 y) -> void; auto pixel(n8 x, n8 y) -> void; auto power() -> void; Window window; } screen2{*this}; struct Sprite { PPU& self; Screen2& screen2; //sprite.cpp auto frame() -> void; auto scanline(n8 y) -> void; auto pixel(n8 x, n8 y) -> void; auto power() -> void; n1 enable[2]; n6 oamBase; n7 first; n8 count; //0 - 128 n8 valid; //0 - 32 Output output; Window window; queue oam[2]; queue objects; } sprite{*this, screen2}; struct DAC { PPU& self; Screen1& screen1; Screen2& screen2; Sprite& sprite; //dac.cpp auto scanline(n8 y) -> void; auto pixel(n8 x, n8 y) -> void; auto power() -> void; n1 enable[2]; n1 contrast[2]; n8 unknown; n8 backdrop[2]; //unserialized: u32* output = nullptr; } dac{*this, screen1, screen2, sprite}; struct PRAM { n4 pool[8]; struct Palette { n3 color[4]; } palette[16]; } pram; struct LCD { struct Icon { n1 sleeping; n1 orientation1; n1 orientation0; n1 auxiliary0; n1 auxiliary1; n1 auxiliary2; } icon; } lcd; struct Timer { //timer.cpp auto step() -> bool; n1 enable; n1 repeat; n16 frequency; n16 counter; } htimer, vtimer; struct IO { n8 hcounter; n8 vcounter; n8 vsync = 155; n8 vtotal = 158; n8 vcompare; n1 field; n1 orientation; } io; }; extern PPU ppu; ares-126/ares/ws/ppu/screen.cpp000066400000000000000000000027671415063341600165070ustar00rootroot00000000000000auto PPU::Screen::scanline(n8 y) -> void { enable[0] = enable[1]; mapBase[0] = mapBase[1]; hscroll[0] = hscroll[1]; vscroll[0] = vscroll[1]; } auto PPU::Screen1::scanline(n8 y) -> void { Screen::scanline(y); } auto PPU::Screen2::scanline(n8 y) -> void { Screen::scanline(y); window.scanline(y); } auto PPU::Screen::pixel(n8 x, n8 y) -> void { output = {}; if(!enable[0]) return; x += hscroll[0]; y += vscroll[0]; n15 address = x.bit(3,7) << 1 | y.bit(3,7) << 6 | mapBase[0] << 11; n16 attributes = iram.read16(address); n10 tile = attributes.bit( 0, 8) | attributes.bit(13) << 9; n4 palette = attributes.bit( 9,12); n3 hflip = attributes.bit(14) * 7; n3 vflip = attributes.bit(15) * 7; n4 color = self.fetch(tile, x ^ hflip, y ^ vflip); if(self.opaque(palette, color)) { output.valid = 1; output.color = self.palette(palette, color); } } auto PPU::Screen1::pixel(n8 x, n8 y) -> void { Screen::pixel(x, y); } auto PPU::Screen2::pixel(n8 x, n8 y) -> void { Screen::pixel(x, y); if(window.enable[0]) { if(window.invert[0] == 0 && window.outside(x, y)) output = {}; if(window.invert[0] == 1 && window.inside (x, y)) output = {}; } } auto PPU::Screen::power() -> void { enable[0] = enable[1] = 0; mapBase[0] = mapBase[1] = 0; hscroll[0] = hscroll[1] = 0; vscroll[0] = vscroll[1] = 0; output = {}; } auto PPU::Screen1::power() -> void { Screen::power(); } auto PPU::Screen2::power() -> void { Screen::power(); window.power(); } ares-126/ares/ws/ppu/serialization.cpp000066400000000000000000000026321415063341600200740ustar00rootroot00000000000000auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); s(screen1.enable); s(screen1.mapBase); s(screen1.hscroll); s(screen1.vscroll); s(screen1.output.valid); s(screen1.output.color); s(screen2.enable); s(screen2.mapBase); s(screen2.hscroll); s(screen2.vscroll); s(screen2.output.valid); s(screen2.output.color); s(screen2.window.enable); s(screen2.window.invert); s(screen2.window.x0); s(screen2.window.x1); s(screen2.window.y0); s(screen2.window.y1); s(sprite.enable); s(sprite.oamBase); s(sprite.first); s(sprite.count); s(sprite.valid); s(sprite.output.valid); s(sprite.output.color); s(sprite.window.enable); s(sprite.window.x0); s(sprite.window.x1); s(sprite.window.y0); s(sprite.window.y1); for(auto& line : sprite.oam) s(line); s(sprite.objects); s(dac.enable); s(dac.contrast); s(dac.unknown); s(dac.backdrop); s(pram.pool); for(auto& palette : pram.palette) s(palette.color); s(lcd.icon.sleeping); s(lcd.icon.orientation1); s(lcd.icon.orientation0); s(lcd.icon.auxiliary0); s(lcd.icon.auxiliary1); s(lcd.icon.auxiliary2); s(htimer.enable); s(htimer.repeat); s(htimer.frequency); s(htimer.counter); s(vtimer.enable); s(vtimer.repeat); s(vtimer.frequency); s(vtimer.counter); s(io.hcounter); s(io.vcounter); s(io.vsync); s(io.vtotal); s(io.vcompare); s(io.field); s(io.orientation); } ares-126/ares/ws/ppu/sprite.cpp000066400000000000000000000031621415063341600165240ustar00rootroot00000000000000auto PPU::Sprite::frame() -> void { n7 index = first; n16 base = oamBase.bit(0, self.depth() == 2 ? 4 : 5) << 9; oam[self.field()].flush(); for(auto object : range(min(128, count))) { oam[self.field()].write(iram.read32(base + index++ * 4)); } } auto PPU::Sprite::scanline(n8 y) -> void { enable[0] = enable[1]; window.scanline(y); objects.flush(); if(!enable[0]) return; for(auto attributes : oam[!self.field()]) { n8 voffset = attributes.bit(16,23); if(n8(y - voffset) > 7) continue; objects.write(attributes); if(objects.full()) break; } } auto PPU::Sprite::pixel(n8 x, n8 y) -> void { output = {}; if(!enable[0]) return; auto outside = window.outside(x, y); for(auto attributes : objects) { n9 tile = attributes.bit( 0, 8); n4 palette = attributes.bit( 9,11) | 8; n1 region = attributes.bit(12); n1 priority = attributes.bit(13); n3 hflip = attributes.bit(14) * 7; n3 vflip = attributes.bit(15) * 7; n8 voffset = attributes.bit(16,23); n8 hoffset = attributes.bit(24,31); if(window.enable[0] && region != outside) continue; if(n8(x - hoffset) > 7) continue; n4 color = self.fetch(tile, x - hoffset ^ hflip, y - voffset ^ vflip); if(self.opaque(palette, color)) { if(!priority && screen2.output.valid) continue; output.valid = 1; output.color = self.palette(palette, color); break; } } } auto PPU::Sprite::power() -> void { enable[0] = enable[1] = 0; oamBase = 0; first = 0; count = 0; valid = 0; output = {}; window.power(); for(auto& line : oam) line.flush(); objects.flush(); } ares-126/ares/ws/ppu/timer.cpp000066400000000000000000000002251415063341600163330ustar00rootroot00000000000000auto PPU::Timer::step() -> bool { if(enable && counter && !--counter) { if(repeat) counter = frequency; return true; } return false; } ares-126/ares/ws/ppu/window.cpp000066400000000000000000000013301415063341600165200ustar00rootroot00000000000000auto PPU::Window::scanline(n8 y) -> void { enable[0] = enable[1]; invert[0] = invert[1]; x0[0] = x0[1]; x1[0] = x1[1]; y0[0] = y0[1]; y1[0] = y1[1]; } auto PPU::Window::inside(n8 x, n8 y) const -> bool { if((x >= x0[0] && x <= x1[0]) || (x >= x1[0] && x <= x0[0])) { if((y >= y0[0] && y <= y1[0]) || (y >= y1[0] && y <= y0[0])) { return true; } } return false; } auto PPU::Window::outside(n8 x, n8 y) const -> bool { if(x < x0[0] || x > x1[0] || y < y0[0] || y > y1[0]) { return true; } return false; } auto PPU::Window::power() -> void { enable[0] = enable[1] = 0; invert[0] = invert[1] = 0; x0[0] = x0[1] = 0; x1[0] = x1[1] = 0; y0[0] = y0[1] = 0; y1[0] = y1[1] = 0; } ares-126/ares/ws/system/000077500000000000000000000000001415063341600152305ustar00rootroot00000000000000ares-126/ares/ws/system/controls.cpp000066400000000000000000000065631415063341600176110ustar00rootroot00000000000000auto System::Controls::load(Node::Object parent) -> void { node = parent->append("Controls"); if(Model::WonderSwan() || Model::WonderSwanColor() || Model::SwanCrystal()) { y1 = node->append("Y1"); y2 = node->append("Y2"); y3 = node->append("Y3"); y4 = node->append("Y4"); x1 = node->append("X1"); x2 = node->append("X2"); x3 = node->append("X3"); x4 = node->append("X4"); b = node->append("B"); a = node->append("A"); start = node->append("Start"); volume = node->append("Volume"); } if(Model::PocketChallengeV2()) { up = node->append("Up"); down = node->append("Down"); left = node->append("Left"); right = node->append("Right"); pass = node->append("Pass"); circle = node->append("Circle"); clear = node->append("Clear"); view = node->append("View"); escape = node->append("Escape"); } power = node->append("Power"); } auto System::Controls::poll() -> void { if(Model::WonderSwan() || Model::WonderSwanColor() || Model::SwanCrystal()) { platform->input(y1); platform->input(y2); platform->input(y3); platform->input(y4); platform->input(x1); platform->input(x2); platform->input(x3); platform->input(x4); platform->input(b); platform->input(a); platform->input(start); if(y1->value() || y2->value() || y3->value() || y4->value() || x1->value() || x2->value() || x3->value() || x4->value() || b->value() || a->value() || start->value() ) { cpu.raise(CPU::Interrupt::Input); } bool volumeValue = volume->value(); platform->input(volume); if(!volumeValue && volume->value()) { //lower volume by one step. 0 wraps to 3 here (n2 type.) apu.io.masterVolume--; //ASWAN has three volume steps; SPHINX and SPHINX2 have four. if(SoC::ASWAN() && apu.io.masterVolume == 3) apu.io.masterVolume = 2; ppu.updateIcons(); } } if(Model::PocketChallengeV2()) { platform->input(up); platform->input(down); platform->input(left); platform->input(right); platform->input(pass); platform->input(circle); platform->input(clear); platform->input(view); platform->input(escape); //the Y-axis acts as independent buttons. //the X-axis has a rocker, which prevents both keys from being pressed at the same time. if(!(left->value() & right->value())) { xHold = 0, leftLatch = left->value(), rightLatch = right->value(); } else if(!xHold) { xHold = 1, swap(leftLatch, rightLatch); } if(up->value() || down->value() || leftLatch || rightLatch || pass->value() || circle->value() || clear->value() || view->value() || escape->value() ) { cpu.raise(CPU::Interrupt::Input); } } bool powerValue = power->value(); platform->input(power); if(!powerValue && power->value()) { scheduler.exit(Event::Power); } } ares-126/ares/ws/system/debugger.cpp000066400000000000000000000007661415063341600175310ustar00rootroot00000000000000auto System::Debugger::load(Node::Object parent) -> void { memory.eeprom = parent->append("System EEPROM"); memory.eeprom->setSize(self.eeprom.size); memory.eeprom->setRead([&](u32 address) -> u8 { return self.eeprom.data[address]; }); memory.eeprom->setWrite([&](u32 address, u8 data) -> void { self.eeprom.data[address] = data; }); } auto System::Debugger::unload(Node::Object parent) -> void { parent->remove(memory.eeprom); memory.eeprom.reset(); } ares-126/ares/ws/system/io.cpp000066400000000000000000000026131415063341600163450ustar00rootroot00000000000000auto System::readIO(n16 address) -> n8 { n8 data; switch(address) { case 0x0060: //DISP_MODE data.bit(0) = io.unknown0; data.bit(1) = io.unknown1; data.bit(3) = io.unknown3; data.bit(5) = io.mode.bit(0); data.bit(6) = io.mode.bit(1); data.bit(7) = io.mode.bit(2); break; case 0x00ba: //IEEP_DATALO data = eeprom.read(EEPROM::DataLo); break; case 0x00bb: //IEEP_DATAHI data = eeprom.read(EEPROM::DataHi); break; case 0x00bc: //IEEP_ADDRLO data = eeprom.read(EEPROM::AddressLo); break; case 0x00bd: //IEEP_ADDRHI data = eeprom.read(EEPROM::AddressHi); break; case 0x00be: //IEEP_STATUS data = eeprom.read(EEPROM::Status); break; } return data; } auto System::writeIO(n16 address, n8 data) -> void { switch(address) { case 0x0060: //DISP_MODE io.unknown0 = data.bit(0); io.unknown1 = data.bit(1); io.unknown3 = data.bit(3); io.mode = data.bit(5,7); break; case 0x00ba: //IEEP_DATALO eeprom.write(EEPROM::DataLo, data); break; case 0x00bb: //IEEP_DATAHI eeprom.write(EEPROM::DataHi, data); break; case 0x00bc: //IEEP_ADDRLO eeprom.write(EEPROM::AddressLo, data); break; case 0x00bd: //IEEP_ADDRHI eeprom.write(EEPROM::AddressHi, data); break; case 0x00be: //IEEP_CMD eeprom.write(EEPROM::Command, data); break; } return; } ares-126/ares/ws/system/serialization.cpp000066400000000000000000000020741415063341600206140ustar00rootroot00000000000000auto System::serialize(bool synchronize) -> serializer { if(synchronize) scheduler.enter(Scheduler::Mode::Synchronize); serializer s; u32 signature = SerializerSignature; char version[16] = {}; char description[512] = {}; memory::copy(&version, (const char*)SerializerVersion, SerializerVersion.size()); s(signature); s(synchronize); s(version); s(description); serialize(s, synchronize); return s; } auto System::unserialize(serializer& s) -> bool { u32 signature = 0; bool synchronize = true; char version[16] = {}; char description[512] = {}; s(signature); s(synchronize); s(version); s(description); if(signature != SerializerSignature) return false; if(string{version} != SerializerVersion) return false; if(synchronize) power(); serialize(s, synchronize); return true; } auto System::serialize(serializer& s, bool synchronize) -> void { scheduler.setSynchronize(synchronize); s(io.unknown0); s(io.unknown1); s(io.unknown3); s(io.mode); s(eeprom); s(cpu); s(ppu); s(apu); s(cartridge); s(iram); } ares-126/ares/ws/system/system.cpp000066400000000000000000000132051415063341600172610ustar00rootroot00000000000000#include namespace ares::WonderSwan { auto enumerate() -> vector { return { "[Bandai] WonderSwan", "[Bandai] WonderSwan Color", "[Bandai] SwanCrystal", "[Benesse] Pocket Challenge V2", }; } auto load(Node::System& node, string name) -> bool { if(!enumerate().find(name)) return false; return system.load(node, name); } Scheduler scheduler; System system; #define Model ares::WonderSwan::Model #define SoC ares::WonderSwan::SoC #include "controls.cpp" #undef Model #undef SoC #include "io.cpp" #include "debugger.cpp" #include "serialization.cpp" auto System::game() -> string { if(cartridge.node) { return cartridge.title(); } return "(no cartridge connected)"; } auto System::run() -> void { scheduler.enter(); controls.poll(); } auto System::load(Node::System& root, string name) -> bool { if(node) unload(); information = {}; if(name.find("WonderSwan")) { information.name = "WonderSwan"; information.soc = SoC::ASWAN; information.model = Model::WonderSwan; } if(name.find("WonderSwan Color")) { information.name = "WonderSwan Color"; information.soc = SoC::SPHINX; information.model = Model::WonderSwanColor; } if(name.find("SwanCrystal")) { information.name = "SwanCrystal"; information.soc = SoC::SPHINX2; information.model = Model::SwanCrystal; } if(name.find("Pocket Challenge V2")) { information.name = "Pocket Challenge V2"; information.soc = SoC::ASWAN; information.model = Model::PocketChallengeV2; } node = Node::System::create(information.name); node->setGame({&System::game, this}); node->setRun({&System::run, this}); node->setPower({&System::power, this}); node->setSave({&System::save, this}); node->setUnload({&System::unload, this}); node->setSerialize({&System::serialize, this}); node->setUnserialize({&System::unserialize, this}); root = node; if(!node->setPak(pak = platform->pak(node))) return false; headphones = node->append("Headphones", true, [&](auto value) { apu.io.headphonesConnected = value; ppu.updateIcons(); }); headphones->setDynamic(true); //the EEPROMs come factory-programmed to contain various model names and settings. //the model names are confirmed from video recordings of real hardware booting. //the other settings bytes are based on how the IPLROMs configure the EEPROMs after changing settings. //none of this can be considered 100% verified; direct EEPROM dumps from new-old stock would be required. auto initializeName = [&](string name) { //16-character limit, 'A'-'Z' only! for(u32 index : range(name.size())) { eeprom.program(0x60 + index, name[index] - 'A' + 0x0b); } }; if(WonderSwan::Model::WonderSwan()) { if(auto fp = pak->read("boot.rom")) { bootROM.allocate(4_KiB); bootROM.load(fp); } eeprom.allocate(128, 16, 1, 0x00); eeprom.program(0x76, 0x01); eeprom.program(0x77, 0x00); eeprom.program(0x78, 0x24); eeprom.program(0x7c, 0x01); initializeName("WONDERSWAN"); //verified } if(WonderSwan::Model::WonderSwanColor()) { if(auto fp = pak->read("boot.rom")) { bootROM.allocate(8_KiB); bootROM.load(fp); } eeprom.allocate(2048, 16, 1, 0x00); eeprom.program(0x76, 0x01); eeprom.program(0x77, 0x01); eeprom.program(0x78, 0x27); eeprom.program(0x7c, 0x01); eeprom.program(0x80, 0x01); eeprom.program(0x81, 0x01); eeprom.program(0x82, 0x27); eeprom.program(0x83, 0x03); //d0-d1 = volume (0-3); d6 = contrast (0=low, 1=high) initializeName("WONDERSWANCOLOR"); //verified } if(WonderSwan::Model::SwanCrystal()) { if(auto fp = pak->read("boot.rom")) { bootROM.allocate(8_KiB); bootROM.load(fp); } eeprom.allocate(2048, 16, 1, 0x00); //unverified; based on WonderSwan Color IPLROM eeprom.program(0x76, 0x01); eeprom.program(0x77, 0x01); eeprom.program(0x78, 0x27); eeprom.program(0x7c, 0x01); eeprom.program(0x80, 0x01); eeprom.program(0x81, 0x01); eeprom.program(0x82, 0x27); eeprom.program(0x83, 0x03); //d0-d1 = volume (0-3) initializeName("SWANCRYSTAL"); //verified //Mama Mitte (used by the software to detect the specific Mama Mitte SwanCrystal hardware) eeprom.program(0x7a, 0x7f); eeprom.program(0x7b, 0x52); eeprom.program(0x07fe, 0x34); eeprom.program(0x07ff, 0x12); } if(WonderSwan::Model::PocketChallengeV2()) { if(auto fp = pak->read("boot.rom")) { bootROM.allocate(4_KiB); bootROM.load(fp); } //the internal EEPROM has been removed from the Pocket Challenge V2 PCB. } if(auto fp = pak->read("save.eeprom")) { if(fp->attribute("loaded").boolean()) { fp->read({eeprom.data, eeprom.size}); } } scheduler.reset(); controls.load(node); cpu.load(node); ppu.load(node); apu.load(node); cartridgeSlot.load(node); debugger.load(node); return true; } auto System::save() -> void { if(!node) return; if(auto fp = pak->write("save.eeprom")) { fp->write({eeprom.data, eeprom.size}); } cartridge.save(); } auto System::unload() -> void { if(!node) return; save(); debugger.unload(node); bootROM.reset(); eeprom.reset(); cpu.unload(); ppu.unload(); apu.unload(); cartridgeSlot.unload(); headphones.reset(); pak.reset(); node.reset(); } auto System::power(bool reset) -> void { for(auto& setting : node->find()) setting->setLatch(); bus.power(); iram.power(); eeprom.power(); cpu.power(); ppu.power(); apu.power(); cartridge.power(); scheduler.power(cpu); bus.map(this, 0x0060); bus.map(this, 0x00ba, 0x00be); io = {}; } } ares-126/ares/ws/system/system.hpp000066400000000000000000000066111415063341600172710ustar00rootroot00000000000000struct System : IO { Node::System node; Node::Setting::Boolean headphones; VFS::Pak pak; enum class SoC : u32 { ASWAN, SPHINX, SPHINX2, }; enum class Model : u32 { WonderSwan, WonderSwanColor, SwanCrystal, PocketChallengeV2, }; struct Controls { Node::Object node; //WonderSwan, WonderSwan Color, SwanCrystal Node::Input::Button y1; Node::Input::Button y2; Node::Input::Button y3; Node::Input::Button y4; Node::Input::Button x1; Node::Input::Button x2; Node::Input::Button x3; Node::Input::Button x4; Node::Input::Button b; Node::Input::Button a; Node::Input::Button start; Node::Input::Button volume; //Pocket Challenge V2 Node::Input::Button up; Node::Input::Button down; Node::Input::Button left; Node::Input::Button right; Node::Input::Button pass; Node::Input::Button circle; Node::Input::Button clear; Node::Input::Button view; Node::Input::Button escape; //all models Node::Input::Button power; //controls.cpp auto load(Node::Object) -> void; auto poll() -> void; bool xHold = 0; bool leftLatch = 0; bool rightLatch = 0; } controls; struct Debugger { System& self; //debugger.cpp auto load(Node::Object) -> void; auto unload(Node::Object) -> void; struct Memory { Node::Debugger::Memory eeprom; } memory; } debugger{*this}; auto name() const -> string { return information.name; } auto model() const -> Model { return information.model; } auto soc() const -> SoC { return information.soc; } auto mode() const -> n3 { return io.mode; } auto memory() const -> u32 { return io.mode.bit(2) == 0 ? 16_KiB : 64_KiB; } //mode: //xx0 => planar tiledata //xx1 => packed tiledata //x0x => 512 tiles //x1x => 1024 tiles //0xx => 16 KiB memory mode //1xx => 64 KiB memory mode //00x => 2bpp, grayscale //01x => 2bpp, color //10x => 2bpp, color //11x => 4bpp, color //system.cpp auto game() -> string; auto run() -> void; auto load(Node::System& node, string name) -> bool; auto unload() -> void; auto save() -> void; auto power(bool reset = false) -> void; //io.cpp auto readIO(n16 address) -> n8 override; auto writeIO(n16 address, n8 data) -> void override; //serialization.cpp auto serialize(bool synchronize) -> serializer; auto unserialize(serializer&) -> bool; struct Information { string name = "WonderSwan"; SoC soc = SoC::ASWAN; Model model = Model::WonderSwan; } information; Memory::Readable bootROM; EEPROM eeprom; private: struct IO { //$0060 DISP_MODE n1 unknown0; n1 unknown1; n1 unknown3; n3 mode; } io; //serialization.cpp auto serialize(serializer&, bool synchronize) -> void; }; extern System system; auto SoC::ASWAN() -> bool { return system.soc() == System::SoC::ASWAN; } auto SoC::SPHINX() -> bool { return system.soc() == System::SoC::SPHINX; } auto SoC::SPHINX2() -> bool { return system.soc() == System::SoC::SPHINX2; } auto Model::WonderSwan() -> bool { return system.model() == System::Model::WonderSwan; } auto Model::WonderSwanColor() -> bool { return system.model() == System::Model::WonderSwanColor; } auto Model::SwanCrystal() -> bool { return system.model() == System::Model::SwanCrystal; } auto Model::PocketChallengeV2() -> bool { return system.model() == System::Model::PocketChallengeV2; } ares-126/ares/ws/ws.hpp000066400000000000000000000021661415063341600150530ustar00rootroot00000000000000#pragma once //started: 2016-01-26 #include #include #include namespace ares::WonderSwan { #include auto enumerate() -> vector; auto load(Node::System& node, string name) -> bool; enum : u32 { Byte = 1, Word = 2, Long = 4 }; struct SoC { inline static auto ASWAN() -> bool; //Grayscale inline static auto SPHINX() -> bool; //Color + HyperVoice inline static auto SPHINX2() -> bool; //Color + HyperVoice }; struct Model { inline static auto WonderSwan() -> bool; //Bandai (ASWAN) [SW-001] inline static auto WonderSwanColor() -> bool; //Bandai (SPHINX) [WSC-001] inline static auto SwanCrystal() -> bool; //Bandai (SPHINX2) [SCT-001] inline static auto PocketChallengeV2() -> bool; //Benesse (ASWAN) [3AA902] }; #include #include #include #include #include #include #include } ares-126/desktop-ui/000077500000000000000000000000001415063341600144055ustar00rootroot00000000000000ares-126/desktop-ui/GNUmakefile000066400000000000000000000111341415063341600164570ustar00rootroot00000000000000name := ares build := optimized threaded := true openmp := false vulkan := false local := true flags += -I. -I.. -I../ares -DMIA_LIBRARY nall.path := ../nall include $(nall.path)/GNUmakefile ifeq ($(platform),windows) #vulkan := $(if $(shell if exist ..\ares\n64\vulkan\parallel-rdp) echo 1),true,false) vulkan := $(if $(shell test -e ../ares/n64/vulkan/parallel-rdp && echo 1),true,false) local := false else ifeq ($(platform),linux) vulkan := $(if $(shell test -e ../ares/n64/vulkan/parallel-rdp && echo 1),true,false) endif ifeq ($(local),true) flags += -march=native endif libco.path := ../libco include $(libco.path)/GNUmakefile ruby.path := ../ruby include $(ruby.path)/GNUmakefile hiro.path := ../hiro hiro.resource := resource/ares.rc include $(hiro.path)/GNUmakefile profile := performance cores := fc sfc n64 sg ms md ps1 pce ng msx cv gb gba ws ngp #cores += saturn ares.path := ../ares include $(ares.path)/GNUmakefile mia.path := ../mia mia.objects := mia mia-resource mia.objects := $(mia.objects:%=$(object.path)/%.o) $(object.path)/mia.o: $(mia.path)/mia.cpp $(object.path)/mia-resource.o: $(mia.path)/resource/resource.cpp desktop-ui.path = ../desktop-ui desktop-ui.objects += desktop-ui desktop-ui-resource desktop-ui-input desktop-ui-emulator desktop-ui-program desktop-ui.objects += desktop-ui-presentation desktop-ui-settings desktop-ui-tools desktop-ui.objects := $(desktop-ui.objects:%=$(object.path)/%.o) $(object.path)/desktop-ui.o: $(desktop-ui.path)/desktop-ui.cpp $(object.path)/desktop-ui-resource.o: $(desktop-ui.path)/resource/resource.cpp $(object.path)/desktop-ui-input.o: $(desktop-ui.path)/input/input.cpp $(object.path)/desktop-ui-emulator.o: $(desktop-ui.path)/emulator/emulator.cpp $(object.path)/desktop-ui-program.o: $(desktop-ui.path)/program/program.cpp $(object.path)/desktop-ui-presentation.o: $(desktop-ui.path)/presentation/presentation.cpp $(object.path)/desktop-ui-settings.o: $(desktop-ui.path)/settings/settings.cpp $(object.path)/desktop-ui-tools.o: $(desktop-ui.path)/tools/tools.cpp all.objects := $(libco.objects) $(ruby.objects) $(hiro.objects) $(ares.objects) $(mia.objects) $(desktop-ui.objects) all.options := $(libco.options) $(ruby.options) $(hiro.options) $(ares.options) $(mia.options) $(desktop-ui.options) $(options) all: $(all.objects) $(info Linking $(output.path)/$(name) ...) +@$(compiler) -o $(output.path)/$(name) $(all.objects) $(all.options) ifeq ($(platform),macos) # Apply workaround for buggy linker in Xcode < 11.4.1 @$(compiler) -o $(output.path)/macos-fix-jit macos-fix-jit.cpp $(output.path)/macos-fix-jit $(output.path)/$(name) rm -rf $(output.path)/$(name).app mkdir -p $(output.path)/$(name).app/Contents/MacOS/ mkdir -p $(output.path)/$(name).app/Contents/Resources/ mv $(output.path)/$(name) $(output.path)/$(name).app/Contents/MacOS/$(name) cp resource/$(name).plist $(output.path)/$(name).app/Contents/Info.plist cp -R $(ares.path)/Shaders $(output.path)/$(name).app/Contents/Resources/ cp -R $(mia.path)/Database $(output.path)/$(name).app/Contents/Resources/ sips -s format icns resource/$(name).png --out $(output.path)/$(name).app/Contents/Resources/$(name).icns else ifeq ($(platform),windows) cp -R $(ares.path)/Shaders $(output.path)/ cp -R $(mia.path)/Database $(output.path)/ endif verbose: nall.verbose ruby.verbose hiro.verbose all; clean: ifeq ($(platform),macos) rm -rf $(output.path)/$(name).app endif $(call rdelete,$(object.path)/*) $(call rdelete,$(output.path)/*) install: all ifeq ($(platform),windows) mkdir -p $(prefix)/$(name)/ else ifeq ($(shell id -un),root) $(error "make install should not be run as root") else ifeq ($(platform),macos) mkdir -p ~/Library/Application\ Support/$(name)/ cp -R $(output.path)/$(name).app /Applications/$(name).app else ifneq ($(filter $(platform),linux bsd),) mkdir -p $(prefix)/bin/ mkdir -p $(prefix)/share/applications/ mkdir -p $(prefix)/share/icons/hicolor/256x256/apps/ mkdir -p $(prefix)/share/$(name)/Shaders/ cp $(output.path)/$(name) $(prefix)/bin/$(name) cp -R $(ares.path)/Shaders/* $(prefix)/share/$(name)/Shaders/ cp resource/$(name).desktop $(prefix)/share/applications/$(name).desktop cp resource/$(name).png $(prefix)/share/icons/hicolor/256x256/apps/$(name).png endif uninstall: ifeq ($(platform),windows) else ifeq ($(shell id -un),root) $(error "make uninstall should not be run as root") else ifeq ($(platform),macos) rm -rf /Applications/$(name).app else ifneq ($(filter $(platform),linux bsd),) rm -f $(prefix)/bin/$(name) rm -f $(prefix)/share/applications/$(name).desktop rm -f $(prefix)/share/icons/hicolor/256x256/apps/$(name).png endif -include $(object.path)/*.d ares-126/desktop-ui/desktop-ui.cpp000066400000000000000000000027401415063341600172000ustar00rootroot00000000000000#include "desktop-ui.hpp" namespace ruby { Video video; Audio audio; Input input; } auto locate(const string& name) -> string { string location = {Path::program(), name}; if(inode::exists(location)) return location; #if defined(PLATFORM_MACOS) location = {Path::program(), "../Resources/", name}; if(inode::exists(location)) return location; #endif directory::create({Path::userData(), "ares/"}); return {Path::userData(), "ares/", name}; } #include auto nall::main(Arguments arguments) -> void { Application::setName("ares"); Application::setScreenSaver(false); mia::setHomeLocation([]() -> string { if(auto location = settings.paths.home) return location; return {Path::user(), "Emulation/Systems/"}; }); mia::setSaveLocation([]() -> string { return settings.paths.saves; }); for(auto argument : arguments) { if(argument == "--fullscreen") { program.startFullScreen = true; } else if(file::exists(argument)) { program.startGameLoad = argument; } } inputManager.create(); Emulator::construct(); settings.load(); Instances::presentation.construct(); Instances::settingsWindow.construct(); Instances::toolsWindow.construct(); program.create(); presentation.loadEmulators(); Application::onMain({&Program::main, &program}); Application::run(); settings.save(); Instances::presentation.destruct(); Instances::settingsWindow.destruct(); Instances::toolsWindow.destruct(); } ares-126/desktop-ui/desktop-ui.hpp000066400000000000000000000011221415063341600171760ustar00rootroot00000000000000#include //using namespace ruby; #include using namespace hiro; #include #include #include #include #include namespace ruby { extern Video video; extern Audio audio; extern Input input; } #include "resource/resource.hpp" #include "input/input.hpp" #include "emulator/emulator.hpp" #include "program/program.hpp" #include "presentation/presentation.hpp" #include "settings/settings.hpp" #include "tools/tools.hpp" auto locate(const string& name) -> string; ares-126/desktop-ui/emulator/000077500000000000000000000000001415063341600162355ustar00rootroot00000000000000ares-126/desktop-ui/emulator/colecovision.cpp000066400000000000000000000051171415063341600214410ustar00rootroot00000000000000struct ColecoVision : Emulator { ColecoVision(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; ColecoVision::ColecoVision() { manufacturer = "Coleco"; name = "ColecoVision"; firmware.append({"BIOS", "World"}); for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("L", virtualPorts[id].pad.select); device.digital("R", virtualPorts[id].pad.start); device.digital("1", virtualPorts[id].pad.a); device.digital("2", virtualPorts[id].pad.b); device.digital("3", virtualPorts[id].pad.c); device.digital("4", virtualPorts[id].pad.x); device.digital("5", virtualPorts[id].pad.y); device.digital("6", virtualPorts[id].pad.z); device.digital("7", virtualPorts[id].pad.l1); device.digital("8", virtualPorts[id].pad.r1); device.digital("9", virtualPorts[id].pad.l2); device.digital("*", virtualPorts[id].pad.r2); device.digital("0", virtualPorts[id].pad.lt); device.digital("#", virtualPorts[id].pad.rt); port.append(device); } ports.append(port); } } auto ColecoVision::load() -> bool { game = mia::Medium::create("ColecoVision"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("ColecoVision"); if(!system->load(firmware[0].location)) return errorFirmware(firmware[0]), false; auto region = Emulator::region(); if(!ares::ColecoVision::load(root, {"[Coleco] ColecoVision (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto ColecoVision::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto ColecoVision::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "ColecoVision") return system->pak; if(node->name() == "ColecoVision Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/emulator.cpp000066400000000000000000000155441415063341600206020ustar00rootroot00000000000000#include "../desktop-ui.hpp" #include "emulators.cpp" vector> emulators; shared_pointer emulator; auto Emulator::enumeratePorts(string name) -> vector& { for(auto& emulator : emulators) { if(emulator->name == name && emulator->ports) return emulator->ports; } static vector ports; if(!ports) { for(auto id : range(5)) { InputPort port{string{"Controller Port ", 1 + id}}; port.append(virtualPorts[id].pad); port.append(virtualPorts[id].mouse); ports.append(port); } } return ports; } auto Emulator::location() -> string { return {Path::userData(), "ares/Saves/", name, "/"}; } auto Emulator::locate(const string& location, const string& suffix, const string& path, maybe system) -> string { if(!system) system = root->name(); //game path if(!path) return {Location::notsuffix(location), suffix}; //path override string pathname = {path, *system, "/"}; directory::create(pathname); return {pathname, Location::prefix(location), suffix}; } //handles region selection when games support multiple regions auto Emulator::region() -> string { if(game && game->pak) { if(auto regions = game->pak->attribute("region").split(",").strip()) { if(settings.boot.prefer == "NTSC-U" && regions.find("NTSC-U")) return "NTSC-U"; if(settings.boot.prefer == "NTSC-J" && regions.find("NTSC-J")) return "NTSC-J"; if(settings.boot.prefer == "NTSC-U" && regions.find("NTSC" )) return "NTSC"; if(settings.boot.prefer == "NTSC-J" && regions.find("NTSC" )) return "NTSC"; if(settings.boot.prefer == "PAL" && regions.find("PAL" )) return "PAL"; if(regions.first()) return regions.first(); } } if(settings.boot.prefer == "NTSC-J") return "NTSC-J"; if(settings.boot.prefer == "NTSC-U") return "NTSC-U"; if(settings.boot.prefer == "PAL" ) return "PAL"; return {}; } auto Emulator::load(const string& location) -> bool { if(inode::exists(location)) locationQueue.append(location); if(!load()) return false; setBoolean("Color Bleed", settings.video.colorBleed); setBoolean("Color Emulation", settings.video.colorEmulation); setBoolean("Interframe Blending", settings.video.interframeBlending); setOverscan(settings.video.overscan); latch = {}; root->power(); return true; } auto Emulator::load(shared_pointer pak, string& path) -> string { string location; if(locationQueue) { location = locationQueue.takeFirst(); //pull from the game queue if an entry is available } else { BrowserDialog dialog; dialog.setTitle({"Load ", pak->name(), " Game"}); dialog.setPath(path ? path : Path::desktop()); dialog.setAlignment(presentation); string filters{"*.zip:"}; for(auto& extension : pak->extensions()) { filters.append("*.", extension, ":"); } //support both uppercase and lowercase extensions filters.append(string{filters}.upcase()); filters.trimRight(":", 1L); filters.prepend(pak->name(), "|"); dialog.setFilters({filters, "All|*"}); location = program.openFile(dialog); } if(location) { path = Location::dir(location); return location; } return {}; } auto Emulator::loadFirmware(const Firmware& firmware) -> shared_pointer { if(firmware.location.iendsWith(".zip")) { Decode::ZIP archive; if(archive.open(firmware.location) && archive.file) { auto image = archive.extract(archive.file.first()); return vfs::memory::open(image); } } else if(auto image = file::read(firmware.location)) { return vfs::memory::open(image); } return {}; } auto Emulator::unload() -> void { save(); root->unload(); game = {}; system = {}; root.reset(); locationQueue.reset(); } auto Emulator::load(mia::Pak& node, string name) -> bool { if(auto fp = node.pak->read(name)) { if(auto memory = file::read({node.location, name})) { fp->read(memory); return true; } } return false; } auto Emulator::save(mia::Pak& node, string name) -> bool { if(auto memory = node.pak->write(name)) { return file::write({node.location, name}, {memory->data(), memory->size()}); } return false; } auto Emulator::refresh() -> void { if(auto screen = root->scan("Screen")) { screen->refresh(); } } auto Emulator::setBoolean(const string& name, bool value) -> bool { if(auto node = root->scan(name)) { node->setValue(value); //setValue() will not call modify() if value has not changed; node->modify(value); //but that may prevent the initial setValue() from working return true; } return false; } auto Emulator::setOverscan(bool value) -> bool { if(auto screen = root->scan("Screen")) { if(auto overscan = screen->find("Overscan")) { overscan->setValue(value); return true; } } return false; } auto Emulator::error(const string& text) -> void { MessageDialog().setTitle("Error").setText(text).setAlignment(presentation).error(); } auto Emulator::errorFirmware(const Firmware& firmware, string system) -> void { if(!system) system = emulator->name; if(MessageDialog().setText({ "Error: firmware is missing or invalid.\n", system, " - ", firmware.type, " (", firmware.region, ") is required to play this game.\n" "Would you like to configure firmware settings now?" }).question() == "Yes") { settingsWindow.show("Firmware"); firmwareSettings.select(system, firmware.type, firmware.region); } } auto Emulator::input(ares::Node::Input::Input input) -> void { auto device = ares::Node::parent(input); if(!device) return; auto port = ares::Node::parent(device); if(!port) return; for(auto& inputPort : ports) { if(inputPort.name != port->name()) continue; for(auto& inputDevice : inputPort.devices) { if(inputDevice.name != device->name()) continue; for(auto& inputNode : inputDevice.inputs) { if(inputNode.name != input->name()) continue; if(auto button = input->cast()) { auto pressed = inputNode.mapping->pressed(); return button->setValue(pressed); } if(auto axis = input->cast()) { auto value = inputNode.mapping->value(); return axis->setValue(value); } if(auto rumble = input->cast()) { if(auto target = dynamic_cast(inputNode.mapping)) { return target->rumble(rumble->enable()); } } } for(auto& inputPair : inputDevice.pairs) { if(inputPair.name != input->name()) continue; if(auto axis = input->cast()) { auto value = inputPair.mappingHi->value() - inputPair.mappingLo->value(); return axis->setValue(value); } } } } } ares-126/desktop-ui/emulator/emulator.hpp000066400000000000000000000042211415063341600205750ustar00rootroot00000000000000struct Emulator { //emulators.cpp static auto construct() -> void; struct Firmware; virtual ~Emulator() = default; //emulator.cpp static auto enumeratePorts(string name) -> vector&; auto location() -> string; auto locate(const string& location, const string& suffix, const string& path = "", maybe system = {}) -> string; auto region() -> string; auto load(const string& location) -> bool; auto load(shared_pointer pak, string& path) -> string; auto loadFirmware(const Firmware&) -> shared_pointer; auto unload() -> void; auto refresh() -> void; auto setBoolean(const string& name, bool value) -> bool; auto setOverscan(bool value) -> bool; auto error(const string& text) -> void; auto errorFirmware(const Firmware&, string system = "") -> void; auto load(mia::Pak& node, string name) -> bool; auto save(mia::Pak& node, string name) -> bool; auto input(ares::Node::Input::Input) -> void; virtual auto load(Menu) -> void {} virtual auto load() -> bool = 0; virtual auto save() -> bool { return true; } virtual auto pak(ares::Node::Object) -> shared_pointer = 0; virtual auto notify(const string& message) -> void {} struct Firmware { string type; string region; string sha256; //optional string location; }; string manufacturer; string name; ares::Node::System root; vector firmware; shared_pointer system; shared_pointer game; vector ports; vector inputBlacklist; vector portBlacklist; struct Configuration { bool visible = true; //whether or not to show this emulator in the load menu string game; //the most recently used folder for games for each emulator core } configuration; struct Latch { u32 width = 0; u32 height = 0; u32 rotation = 0; bool changed = false; //used to signal Program::main() to resize the presentation window } latch; //queue of pre-specified game locations; used by Program::load() vector locationQueue; }; extern vector> emulators; extern shared_pointer emulator; ares-126/desktop-ui/emulator/emulators.cpp000066400000000000000000000103571415063341600207620ustar00rootroot00000000000000#ifdef CORE_CV namespace ares::ColecoVision { auto load(Node::System& node, string name) -> bool; } #include "colecovision.cpp" #endif #ifdef CORE_FC namespace ares::Famicom { auto load(Node::System& node, string name) -> bool; } #include "famicom.cpp" #include "famicom-disk-system.cpp" #endif #ifdef CORE_GB namespace ares::GameBoy { auto load(Node::System& node, string name) -> bool; } #include "game-boy.cpp" #include "game-boy-color.cpp" #endif #ifdef CORE_GBA namespace ares::GameBoyAdvance { auto load(Node::System& node, string name) -> bool; } #include "game-boy-advance.cpp" #endif #ifdef CORE_MD namespace ares::MegaDrive { auto load(Node::System& node, string name) -> bool; } #include "mega-drive.cpp" #include "mega-32x.cpp" #include "mega-cd.cpp" #include "mega-cd-32x.cpp" #endif #ifdef CORE_MS namespace ares::MasterSystem { auto load(Node::System& node, string name) -> bool; } #include "master-system.cpp" #include "game-gear.cpp" #endif #ifdef CORE_MSX namespace ares::MSX { auto load(Node::System& node, string name) -> bool; } #include "msx.cpp" #include "msx2.cpp" #endif #ifdef CORE_N64 namespace ares::Nintendo64 { auto load(Node::System& node, string name) -> bool; auto option(string name, string value) -> bool; } #include "nintendo-64.cpp" #include "nintendo-64dd.cpp" #endif #ifdef CORE_NG namespace ares::NeoGeo { auto load(Node::System& node, string name) -> bool; } #include "neo-geo-aes.cpp" #include "neo-geo-mvs.cpp" #endif #ifdef CORE_NGP namespace ares::NeoGeoPocket { auto load(Node::System& node, string name) -> bool; } #include "neo-geo-pocket.cpp" #include "neo-geo-pocket-color.cpp" #endif #ifdef CORE_PCE namespace ares::PCEngine { auto load(Node::System& node, string name) -> bool; } #include "pc-engine.cpp" #include "pc-engine-cd.cpp" #include "supergrafx.cpp" #endif #ifdef CORE_PS1 namespace ares::PlayStation { auto load(Node::System& node, string name) -> bool; } #include "playstation.cpp" #endif #ifdef CORE_SATURN namespace ares::Saturn { auto load(Node::System& node, string name) -> bool; } #include "saturn.cpp" #endif #ifdef CORE_SFC namespace ares::SuperFamicom { auto load(Node::System& node, string name) -> bool; } #include "super-famicom.cpp" #endif #ifdef CORE_SG namespace ares::SG1000 { auto load(Node::System& node, string name) -> bool; } #include "sg-1000.cpp" #endif #ifdef CORE_WS namespace ares::WonderSwan { auto load(Node::System& node, string name) -> bool; } #include "wonderswan.cpp" #include "wonderswan-color.cpp" #include "pocket-challenge-v2.cpp" #endif auto Emulator::construct() -> void { #ifdef CORE_FC emulators.append(new Famicom); emulators.append(new FamicomDiskSystem); #endif #ifdef CORE_SFC emulators.append(new SuperFamicom); #endif #ifdef CORE_N64 emulators.append(new Nintendo64); //emulators.append(new Nintendo64DD); #endif #ifdef CORE_SG emulators.append(new SG1000); #endif #ifdef CORE_MS emulators.append(new MasterSystem); #endif #ifdef CORE_MD emulators.append(new MegaDrive); emulators.append(new Mega32X); emulators.append(new MegaCD); emulators.append(new MegaCD32X); #endif #ifdef CORE_SATURN emulators.append(new Saturn); #endif #ifdef CORE_PS1 emulators.append(new PlayStation); #endif #ifdef CORE_PCE emulators.append(new PCEngine); emulators.append(new PCEngineCD); emulators.append(new SuperGrafx); #endif #ifdef CORE_NG emulators.append(new NeoGeoAES); emulators.append(new NeoGeoMVS); #endif #ifdef CORE_MSX emulators.append(new MSX); emulators.append(new MSX2); #endif #ifdef CORE_CV emulators.append(new ColecoVision); #endif #ifdef CORE_GB emulators.append(new GameBoy); emulators.append(new GameBoyColor); #endif #ifdef CORE_GBA emulators.append(new GameBoyAdvance); #endif #ifdef CORE_MS emulators.append(new GameGear); #endif #ifdef CORE_WS emulators.append(new WonderSwan); emulators.append(new WonderSwanColor); emulators.append(new PocketChallengeV2); #endif #ifdef CORE_NGP emulators.append(new NeoGeoPocket); emulators.append(new NeoGeoPocketColor); #endif } ares-126/desktop-ui/emulator/famicom-disk-system.cpp000066400000000000000000000100201415063341600226170ustar00rootroot00000000000000struct FamicomDiskSystem : Emulator { FamicomDiskSystem(); auto load(Menu) -> void override; auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; auto notify(const string& message) -> void override; shared_pointer bios; }; FamicomDiskSystem::FamicomDiskSystem() { manufacturer = "Nintendo"; name = "Famicom Disk System"; firmware.append({"BIOS", "Japan"}); for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("B", virtualPorts[id].pad.a); device.digital("A", virtualPorts[id].pad.b); device.digital("Select", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); device.digital("Microphone", virtualPorts[id].pad.x); port.append(device); } ports.append(port); } } auto FamicomDiskSystem::load(Menu menu) -> void { Group group; Menu diskMenu{&menu}; diskMenu.setText("Disk Drive").setIcon(Icon::Media::Floppy); MenuRadioItem ejected{&diskMenu}; ejected.setText("No Disk").onActivate([&] { emulator->notify("Ejected"); }); group.append(ejected); if(game->pak->count() < 2) return (void)ejected.setChecked(); MenuRadioItem disk1sideA{&diskMenu}; disk1sideA.setText("Disk 1: Side A").onActivate([&] { emulator->notify("Disk 1: Side A"); }); group.append(disk1sideA); if(game->pak->count() < 3) return (void)disk1sideA.setChecked(); MenuRadioItem disk1sideB{&diskMenu}; disk1sideB.setText("Disk 1: Side B").onActivate([&] { emulator->notify("Disk 1: Side B"); }); group.append(disk1sideB); if(game->pak->count() < 4) return (void)disk1sideA.setChecked(); MenuRadioItem disk2sideA{&diskMenu}; disk2sideA.setText("Disk 2: Side A").onActivate([&] { emulator->notify("Disk 2: Side A"); }); group.append(disk2sideA); if(game->pak->count() < 5) return (void)disk1sideA.setChecked(); MenuRadioItem disk2sideB{&diskMenu}; disk2sideB.setText("Disk 2: Side B").onActivate([&] { emulator->notify("Disk 2: Side B"); }); group.append(disk2sideB); return (void)disk1sideA.setChecked(); } auto FamicomDiskSystem::load() -> bool { game = mia::Medium::create("Famicom Disk"); if(!game->load(Emulator::load(game, configuration.game))) return false; bios = mia::Medium::create("Famicom"); if(!bios->load(firmware[0].location)) return errorFirmware(firmware[0]), false; system = mia::System::create("Famicom"); if(!system->load()) return false; if(!ares::Famicom::load(root, "[Nintendo] Famicom (NTSC-J)")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->scan("Disk Slot")) { port->allocate(); port->connect(); } if(auto node = root->scan("State")) { node->setValue("Disk 1: Side A"); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto FamicomDiskSystem::save() -> bool { root->save(); system->save(system->location); bios->save(bios->location); game->save(game->location); return true; } auto FamicomDiskSystem::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Famicom") return system->pak; if(node->name() == "Famicom Cartridge") return bios->pak; if(node->name() == "Famicom Disk") return game->pak; return {}; } auto FamicomDiskSystem::notify(const string& message) -> void { if(auto node = root->scan("State")) { node->setValue(message); } } ares-126/desktop-ui/emulator/famicom.cpp000066400000000000000000000040001415063341600203460ustar00rootroot00000000000000struct Famicom : Emulator { Famicom(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; Famicom::Famicom() { manufacturer = "Nintendo"; name = "Famicom"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("B", virtualPorts[id].pad.a); device.digital("A", virtualPorts[id].pad.b); device.digital("Select", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); device.digital("Microphone", virtualPorts[id].pad.x); port.append(device); } ports.append(port); } } auto Famicom::load() -> bool { game = mia::Medium::create("Famicom"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Famicom"); if(!system->load()) return false; auto region = Emulator::region(); if(!ares::Famicom::load(root, {"[Nintendo] Famicom (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto Famicom::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto Famicom::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Famicom") return system->pak; if(node->name() == "Famicom Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/game-boy-advance.cpp000066400000000000000000000052311415063341600220410ustar00rootroot00000000000000struct GameBoyAdvance : Emulator { GameBoyAdvance(); auto load(Menu) -> void override; auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; GameBoyAdvance::GameBoyAdvance() { manufacturer = "Nintendo"; name = "Game Boy Advance"; firmware.append({"BIOS", "World", "fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570"}); { InputPort port{string{"Game Boy Advance"}}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("B", virtualPorts[0].pad.a); device.digital("A", virtualPorts[0].pad.b); device.digital("L", virtualPorts[0].pad.l1); device.digital("R", virtualPorts[0].pad.r1); device.digital("Select", virtualPorts[0].pad.select); device.digital("Start", virtualPorts[0].pad.start); device.rumble ("Rumble", virtualPorts[0].pad.rumble); port.append(device); } ports.append(port); } } auto GameBoyAdvance::load(Menu menu) -> void { Menu orientationMenu{&menu}; orientationMenu.setText("Orientation").setIcon(Icon::Device::Display); if(auto orientations = root->find("PPU/Screen/Orientation")) { Group group; for(auto& orientation : orientations->readAllowedValues()) { MenuRadioItem item{&orientationMenu}; item.setText(orientation); item.onActivate([=] { if(auto orientations = root->find("PPU/Screen/Orientation")) { orientations->setValue(orientation); } }); group.append(item); } } } auto GameBoyAdvance::load() -> bool { game = mia::Medium::create("Game Boy Advance"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Game Boy Advance"); if(!system->load(firmware[0].location)) return errorFirmware(firmware[0]), false; if(!ares::GameBoyAdvance::load(root, "[Nintendo] Game Boy Advance")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } return true; } auto GameBoyAdvance::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto GameBoyAdvance::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Game Boy Advance") return system->pak; if(node->name() == "Game Boy Advance Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/game-boy-color.cpp000066400000000000000000000040641415063341600215610ustar00rootroot00000000000000struct GameBoyColor : Emulator { GameBoyColor(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; GameBoyColor::GameBoyColor() { manufacturer = "Nintendo"; name = "Game Boy Color"; { InputPort port{"Game Boy Color"}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("B", virtualPorts[0].pad.a); device.digital("A", virtualPorts[0].pad.b); device.digital("Select", virtualPorts[0].pad.select); device.digital("Start", virtualPorts[0].pad.start); device.analog ("A-Up", virtualPorts[0].pad.lup); device.analog ("A-Down", virtualPorts[0].pad.ldown); device.analog ("A-Left", virtualPorts[0].pad.lleft); device.analog ("A-Right", virtualPorts[0].pad.lright); device.rumble ("Rumble", virtualPorts[0].pad.rumble); port.append(device); } ports.append(port); } } auto GameBoyColor::load() -> bool { game = mia::Medium::create("Game Boy Color"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Game Boy Color"); if(!system->load()) return false; if(!ares::GameBoy::load(root, "[Nintendo] Game Boy Color")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto fastBoot = root->find("Fast Boot")) { fastBoot->setValue(settings.boot.fast); } return true; } auto GameBoyColor::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto GameBoyColor::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Game Boy Color") return system->pak; if(node->name() == "Game Boy Color Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/game-boy.cpp000066400000000000000000000037471415063341600204540ustar00rootroot00000000000000struct GameBoy : Emulator { GameBoy(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; GameBoy::GameBoy() { manufacturer = "Nintendo"; name = "Game Boy"; { InputPort port{"Game Boy"}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("B", virtualPorts[0].pad.a); device.digital("A", virtualPorts[0].pad.b); device.digital("Select", virtualPorts[0].pad.select); device.digital("Start", virtualPorts[0].pad.start); device.analog ("A-Up", virtualPorts[0].pad.lup); device.analog ("A-Down", virtualPorts[0].pad.ldown); device.analog ("A-Left", virtualPorts[0].pad.lleft); device.analog ("A-Right", virtualPorts[0].pad.lright); device.rumble ("Rumble", virtualPorts[0].pad.rumble); port.append(device); } ports.append(port); } } auto GameBoy::load() -> bool { game = mia::Medium::create("Game Boy"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Game Boy"); if(!system->load()) return false; if(!ares::GameBoy::load(root, "[Nintendo] Game Boy")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto fastBoot = root->find("Fast Boot")) { fastBoot->setValue(settings.boot.fast); } return true; } auto GameBoy::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto GameBoy::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Game Boy") return system->pak; if(node->name() == "Game Boy Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/game-gear.cpp000066400000000000000000000032521415063341600205700ustar00rootroot00000000000000struct GameGear : Emulator { GameGear(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; GameGear::GameGear() { manufacturer = "Sega"; name = "Game Gear"; //note: disabled because the BIOS is not yet working for Game Gear //firmware.append({"BIOS", "World"}); { InputPort port{"Game Gear"}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("1", virtualPorts[0].pad.a); device.digital("2", virtualPorts[0].pad.b); device.digital("Start", virtualPorts[0].pad.start); port.append(device); } ports.append(port); } } auto GameGear::load() -> bool { game = mia::Medium::create("Game Gear"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Game Gear"); if(!system->load()) return false; //if(!system->load(firmware[0].location)) return false; if(!ares::MasterSystem::load(root, "[Sega] Game Gear")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } return true; } auto GameGear::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto GameGear::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Game Gear") return system->pak; if(node->name() == "Game Gear Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/master-system.cpp000066400000000000000000000052111415063341600215550ustar00rootroot00000000000000struct MasterSystem : Emulator { MasterSystem(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; u32 regionID = 0; }; MasterSystem::MasterSystem() { manufacturer = "Sega"; name = "Master System"; firmware.append({"BIOS", "US"}); //NTSC-U firmware.append({"BIOS", "Japan"}); //NTSC-J firmware.append({"BIOS", "Europe"}); //PAL { InputPort port{"Master System"}; { InputDevice device{"Controls"}; device.digital("Pause", virtualPorts[0].pad.start); device.digital("Reset", virtualPorts[0].pad.rt); port.append(device); } ports.append(port); } for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("1", virtualPorts[id].pad.a); device.digital("2", virtualPorts[id].pad.b); port.append(device); } ports.append(port); } } auto MasterSystem::load() -> bool { game = mia::Medium::create("Master System"); game->load(Emulator::load(game, configuration.game)); auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; system = mia::System::create("Master System"); if(!system->load(firmware[regionID].location)) return false; if(!game->pak && !system->pak->read("bios.rom")) return false; if(!ares::MasterSystem::load(root, {"[Sega] Master System (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Expansion Port")) { port->allocate("FM Sound Unit"); port->connect(); } return true; } auto MasterSystem::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto MasterSystem::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Master System") return system->pak; if(node->name() == "Master System Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/mega-32x.cpp000066400000000000000000000063271415063341600202740ustar00rootroot00000000000000struct Mega32X : Emulator { Mega32X(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer disc; u32 regionID = 0; }; Mega32X::Mega32X() { manufacturer = "Sega"; name = "Mega 32X"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Fighting Pad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.c); device.digital("X", virtualPorts[id].pad.x); device.digital("Y", virtualPorts[id].pad.y); device.digital("Z", virtualPorts[id].pad.z); device.digital("Mode", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto Mega32X::load() -> bool { game = mia::Medium::create("Mega 32X"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; string name; if(game->pak->attribute("megacd").boolean()) { //use Mega CD firmware settings vector firmware; for(auto& emulator : emulators) { if(emulator->name == "Mega CD") firmware = emulator->firmware; } if(!firmware) return false; //should never occur name = "Mega CD 32X"; system = mia::System::create("Mega CD 32X"); if(!system->load(firmware[regionID].location)) return errorFirmware(firmware[regionID], "Mega CD"), false; disc = mia::Medium::create("Mega CD"); if(!disc->load(Emulator::load(disc, configuration.game))) disc.reset(); } else { name = "Mega 32X"; system = mia::System::create("Mega 32X"); if(!system->load()) return false; } if(!ares::MegaDrive::load(root, {"[Sega] ", name, " (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Mega CD/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Fighting Pad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Fighting Pad"); port->connect(); } return true; } auto Mega32X::save() -> bool { root->save(); system->save(system->location); game->save(game->location); if(disc) disc->save(disc->location); return true; } auto Mega32X::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Mega Drive") return system->pak; if(node->name() == "Mega Drive Cartridge") return game->pak; if(node->name() == "Mega CD Disc" && disc) return disc->pak; return {}; } ares-126/desktop-ui/emulator/mega-cd-32x.cpp000066400000000000000000000052111415063341600206470ustar00rootroot00000000000000struct MegaCD32X : Emulator { MegaCD32X(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; u32 regionID = 0; }; MegaCD32X::MegaCD32X() { manufacturer = "Sega"; name = "Mega CD 32X"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Fighting Pad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.c); device.digital("X", virtualPorts[id].pad.x); device.digital("Y", virtualPorts[id].pad.y); device.digital("Z", virtualPorts[id].pad.z); device.digital("Mode", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto MegaCD32X::load() -> bool { game = mia::Medium::create("Mega CD"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; //use Mega CD firmware settings vector firmware; for(auto& emulator : emulators) { if(emulator->name == "Mega CD") firmware = emulator->firmware; } if(!firmware) return false; //should never occur system = mia::System::create("Mega CD 32X"); if(!system->load(firmware[regionID].location)) return errorFirmware(firmware[regionID], "Mega CD"), false; if(!ares::MegaDrive::load(root, {"[Sega] Mega CD 32X (", region, ")"})) return false; if(auto port = root->find("Mega CD/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Fighting Pad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Fighting Pad"); port->connect(); } return true; } auto MegaCD32X::save() -> bool { root->save(); system->save(game->location); game->save(game->location); return true; } auto MegaCD32X::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Mega Drive") return system->pak; if(node->name() == "Mega CD Disc") return game->pak; return {}; } ares-126/desktop-ui/emulator/mega-cd.cpp000066400000000000000000000060071415063341600202410ustar00rootroot00000000000000struct MegaCD : Emulator { MegaCD(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; u32 regionID = 0; }; MegaCD::MegaCD() { manufacturer = "Sega"; name = "Mega CD"; firmware.append({"BIOS", "US"}); //NTSC-U firmware.append({"BIOS", "Japan"}); //NTSC-J firmware.append({"BIOS", "Europe"}); //PAL for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Control Pad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.c); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } { InputDevice device{"Fighting Pad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.c); device.digital("X", virtualPorts[id].pad.x); device.digital("Y", virtualPorts[id].pad.y); device.digital("Z", virtualPorts[id].pad.z); device.digital("Mode", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto MegaCD::load() -> bool { game = mia::Medium::create("Mega CD"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; system = mia::System::create("Mega CD"); if(!system->load(firmware[regionID].location)) return errorFirmware(firmware[regionID]), false; if(!ares::MegaDrive::load(root, {"[Sega] Mega CD (", region, ")"})) return false; if(auto port = root->find("Mega CD/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Control Pad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Control Pad"); port->connect(); } return true; } auto MegaCD::save() -> bool { root->save(); system->save(game->location); game->save(game->location); return true; } auto MegaCD::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Mega Drive") return system->pak; if(node->name() == "Mega CD Disc") return game->pak; return {}; } ares-126/desktop-ui/emulator/mega-drive.cpp000066400000000000000000000073411415063341600207660ustar00rootroot00000000000000struct MegaDrive : Emulator { MegaDrive(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer disc; u32 regionID = 0; }; MegaDrive::MegaDrive() { manufacturer = "Sega"; name = "Mega Drive"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Control Pad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.c); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } { InputDevice device{"Fighting Pad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.c); device.digital("X", virtualPorts[id].pad.x); device.digital("Y", virtualPorts[id].pad.y); device.digital("Z", virtualPorts[id].pad.z); device.digital("Mode", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto MegaDrive::load() -> bool { game = mia::Medium::create("Mega Drive"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; string name; if(game->pak->attribute("megacd").boolean()) { //use Mega CD firmware settings vector firmware; for(auto& emulator : emulators) { if(emulator->name == "Mega CD") firmware = emulator->firmware; } if(!firmware) return false; //should never occur name = "Mega CD"; system = mia::System::create("Mega CD"); if(!system->load(firmware[regionID].location)) return errorFirmware(firmware[regionID], "Mega CD"), false; disc = mia::Medium::create("Mega CD"); if(!disc->load(Emulator::load(disc, configuration.game))) disc.reset(); } else { name = "Mega Drive"; system = mia::System::create("Mega Drive"); if(!system->load()) return false; } if(!ares::MegaDrive::load(root, {"[Sega] ", name, " (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Mega CD/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Control Pad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Control Pad"); port->connect(); } return true; } auto MegaDrive::save() -> bool { root->save(); system->save(system->location); game->save(game->location); if(disc) disc->save(disc->location); return true; } auto MegaDrive::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Mega Drive") return system->pak; if(node->name() == "Mega Drive Cartridge") return game->pak; if(node->name() == "Mega CD Disc" && disc) return disc->pak; return {}; } ares-126/desktop-ui/emulator/msx.cpp000066400000000000000000000033651415063341600175570ustar00rootroot00000000000000struct MSX : Emulator { MSX(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; MSX::MSX() { manufacturer = "Microsoft"; name = "MSX"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); port.append(device); } ports.append(port); } } auto MSX::load() -> bool { game = mia::Medium::create("MSX"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("MSX"); if(!system->load()) return false; auto region = Emulator::region(); if(!ares::MSX::load(root, {"[Microsoft] MSX (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto MSX::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto MSX::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "MSX") return system->pak; if(node->name() == "MSX Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/msx2.cpp000066400000000000000000000034021415063341600176310ustar00rootroot00000000000000struct MSX2 : Emulator { MSX2(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; MSX2::MSX2() { manufacturer = "Microsoft"; name = "MSX2"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); port.append(device); } ports.append(port); } } auto MSX2::load() -> bool { game = mia::Medium::create("MSX2"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("MSX2"); if(!system->load()) return false; auto region = Emulator::region(); if(!ares::MSX::load(root, {"[Microsoft] MSX2 (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto MSX2::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto MSX2::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "MSX2") return system->pak; if(node->name() == "MSX2 Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/neo-geo-aes.cpp000066400000000000000000000043301415063341600210400ustar00rootroot00000000000000struct NeoGeoAES : Emulator { NeoGeoAES(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; NeoGeoAES::NeoGeoAES() { manufacturer = "SNK"; name = "Neo Geo AES"; firmware.append({"BIOS", "World"}); for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Arcade Stick"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.x); device.digital("D", virtualPorts[id].pad.y); device.digital("Select", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto NeoGeoAES::load() -> bool { game = mia::Medium::create("Neo Geo"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Neo Geo AES"); if(!system->load(firmware[0].location)) return errorFirmware(firmware[0]), false; if(!ares::NeoGeo::load(root, "[SNK] Neo Geo AES")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Arcade Stick"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Arcade Stick"); port->connect(); } if(auto port = root->find("Memory Card Slot")) { port->allocate("Memory Card"); port->connect(); } return true; } auto NeoGeoAES::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto NeoGeoAES::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Neo Geo AES") return system->pak; if(node->name() == "Neo Geo Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/neo-geo-mvs.cpp000066400000000000000000000043301415063341600210750ustar00rootroot00000000000000struct NeoGeoMVS : Emulator { NeoGeoMVS(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; NeoGeoMVS::NeoGeoMVS() { manufacturer = "SNK"; name = "Neo Geo MVS"; firmware.append({"BIOS", "World"}); for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Arcade Stick"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("A", virtualPorts[id].pad.a); device.digital("B", virtualPorts[id].pad.b); device.digital("C", virtualPorts[id].pad.x); device.digital("D", virtualPorts[id].pad.y); device.digital("Select", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto NeoGeoMVS::load() -> bool { game = mia::Medium::create("Neo Geo"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Neo Geo MVS"); if(!system->load(firmware[0].location)) return errorFirmware(firmware[0]), false; if(!ares::NeoGeo::load(root, "[SNK] Neo Geo MVS")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Arcade Stick"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Arcade Stick"); port->connect(); } if(auto port = root->find("Memory Card Slot")) { port->allocate("Memory Card"); port->connect(); } return true; } auto NeoGeoMVS::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto NeoGeoMVS::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Neo Geo MVS") return system->pak; if(node->name() == "Neo Geo Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/neo-geo-pocket-color.cpp000066400000000000000000000040611415063341600226720ustar00rootroot00000000000000struct NeoGeoPocketColor : Emulator { NeoGeoPocketColor(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; NeoGeoPocketColor::NeoGeoPocketColor() { manufacturer = "SNK"; name = "Neo Geo Pocket Color"; firmware.append({"BIOS", "World", "8fb845a2f71514cec20728e2f0fecfade69444f8d50898b92c2259f1ba63e10d"}); { InputPort port{"Neo Geo Pocket Color"}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("A", virtualPorts[0].pad.a); device.digital("B", virtualPorts[0].pad.b); device.digital("Option", virtualPorts[0].pad.start); device.digital("Power", virtualPorts[0].pad.lt); device.digital("Debugger", virtualPorts[0].pad.rt); port.append(device); } ports.append(port); } } auto NeoGeoPocketColor::load() -> bool { game = mia::Medium::create("Neo Geo Pocket Color"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Neo Geo Pocket Color"); if(!system->load(firmware[0].location)) return errorFirmware(firmware[0]), false; if(!ares::NeoGeoPocket::load(root, "[SNK] Neo Geo Pocket Color")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto fastBoot = root->find("Fast Boot")) { fastBoot->setValue(settings.boot.fast); } return true; } auto NeoGeoPocketColor::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto NeoGeoPocketColor::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Neo Geo Pocket Color") return system->pak; if(node->name() == "Neo Geo Pocket Color Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/neo-geo-pocket.cpp000066400000000000000000000037441415063341600215650ustar00rootroot00000000000000struct NeoGeoPocket : Emulator { NeoGeoPocket(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; NeoGeoPocket::NeoGeoPocket() { manufacturer = "SNK"; name = "Neo Geo Pocket"; firmware.append({"BIOS", "World", "0293555b21c4fac516d25199df7809b26beeae150e1d4504a050db32264a6ad7"}); { InputPort port{"Neo Geo Pocket"}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("A", virtualPorts[0].pad.a); device.digital("B", virtualPorts[0].pad.b); device.digital("Option", virtualPorts[0].pad.start); device.digital("Power", virtualPorts[0].pad.lt); device.digital("Debugger", virtualPorts[0].pad.rt); port.append(device); } ports.append(port); } } auto NeoGeoPocket::load() -> bool { game = mia::Medium::create("Neo Geo Pocket"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Neo Geo Pocket"); if(!system->load(firmware[0].location)) return errorFirmware(firmware[0]), false; if(!ares::NeoGeoPocket::load(root, "[SNK] Neo Geo Pocket")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto fastBoot = root->find("Fast Boot")) { fastBoot->setValue(settings.boot.fast); } return true; } auto NeoGeoPocket::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto NeoGeoPocket::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Neo Geo Pocket") return system->pak; if(node->name() == "Neo Geo Pocket Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/nintendo-64.cpp000066400000000000000000000072741415063341600210200ustar00rootroot00000000000000struct Nintendo64 : Emulator { Nintendo64(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer gamepad; }; Nintendo64::Nintendo64() { manufacturer = "Nintendo"; name = "Nintendo 64"; for(auto id : range(4)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.analog ("L-Up", virtualPorts[id].pad.lup); device.analog ("L-Down", virtualPorts[id].pad.ldown); device.analog ("L-Left", virtualPorts[id].pad.lleft); device.analog ("L-Right", virtualPorts[id].pad.lright); device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("B", virtualPorts[id].pad.a); device.digital("A", virtualPorts[id].pad.b); device.digital("C-Up", virtualPorts[id].pad.rup); device.digital("C-Down", virtualPorts[id].pad.rdown); device.digital("C-Left", virtualPorts[id].pad.rleft); device.digital("C-Right", virtualPorts[id].pad.rright); device.digital("L", virtualPorts[id].pad.l1); device.digital("R", virtualPorts[id].pad.r1); device.digital("Z", virtualPorts[id].pad.z); device.digital("Start", virtualPorts[id].pad.start); device.rumble ("Rumble", virtualPorts[id].pad.rumble); device.analog ("X-Axis", virtualPorts[id].pad.lleft, virtualPorts[id].pad.lright); device.analog ("Y-Axis", virtualPorts[id].pad.lup, virtualPorts[id].pad.ldown); port.append(device); } ports.append(port); } } auto Nintendo64::load() -> bool { game = mia::Medium::create("Nintendo 64"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Nintendo 64"); if(!system->load()) return false; ares::Nintendo64::option("Quality", settings.video.quality); ares::Nintendo64::option("Supersampling", settings.video.supersampling); auto region = Emulator::region(); if(!ares::Nintendo64::load(root, {"[Nintendo] Nintendo 64 (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } auto controllers = 4; //Jeopardy! does not accept any input if > 3 controllers are plugged in at boot. if(game->pak->attribute("id") == "NJOE") controllers = min(controllers, 3); for(auto id : range(controllers)) { if(auto port = root->find({"Controller Port ", 1 + id})) { auto peripheral = port->allocate("Gamepad"); port->connect(); if(auto port = peripheral->find("Pak")) { if(id == 0 && game->pak->attribute("mempak").boolean()) { gamepad = mia::Pak::create("Nintendo 64"); gamepad->pak->append("save.pak", 32_KiB); gamepad->load("save.pak", ".pak", game->location); port->allocate("Controller Pak"); port->connect(); } else if(game->pak->attribute("rumble").boolean()) { port->allocate("Rumble Pak"); port->connect(); } } } } return true; } auto Nintendo64::save() -> bool { root->save(); system->save(system->location); game->save(game->location); if(gamepad) gamepad->save("save.pak", ".pak", game->location); return true; } auto Nintendo64::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Nintendo 64") return system->pak; if(node->name() == "Nintendo 64 Cartridge") return game->pak; if(node->name() == "Gamepad") return gamepad->pak; return {}; } ares-126/desktop-ui/emulator/nintendo-64dd.cpp000066400000000000000000000067401415063341600213250ustar00rootroot00000000000000//not functional yet struct Nintendo64DD : Emulator { Nintendo64DD(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer bios; }; Nintendo64DD::Nintendo64DD() { manufacturer = "Nintendo"; name = "Nintendo 64DD"; firmware.append({"BIOS", "Japan"}); for(auto id : range(4)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.analog ("L-Up", virtualPorts[id].pad.lup); device.analog ("L-Down", virtualPorts[id].pad.ldown); device.analog ("L-Left", virtualPorts[id].pad.lleft); device.analog ("L-Right", virtualPorts[id].pad.lright); device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("B", virtualPorts[id].pad.a); device.digital("A", virtualPorts[id].pad.b); device.digital("C-Up", virtualPorts[id].pad.rup); device.digital("C-Down", virtualPorts[id].pad.rdown); device.digital("C-Left", virtualPorts[id].pad.rleft); device.digital("C-Right", virtualPorts[id].pad.rright); device.digital("L", virtualPorts[id].pad.l1); device.digital("R", virtualPorts[id].pad.r1); device.digital("Z", virtualPorts[id].pad.z); device.digital("Start", virtualPorts[id].pad.start); device.rumble ("Rumble", virtualPorts[id].pad.rumble); device.analog ("X-Axis", virtualPorts[id].pad.lleft, virtualPorts[id].pad.lright); device.analog ("Y-Axis", virtualPorts[id].pad.lup, virtualPorts[id].pad.ldown); port.append(device); } ports.append(port); } } auto Nintendo64DD::load() -> bool { game = mia::Medium::create("Nintendo 64DD"); if(!game->load(Emulator::load(game, configuration.game))) return false; bios = mia::Medium::create("Nintendo 64"); if(!bios->load(firmware[0].location)) return errorFirmware(firmware[0]), false; system = mia::System::create("Nintendo 64"); if(!system->load()) return false; ares::Nintendo64::option("Quality", settings.video.quality); ares::Nintendo64::option("Supersampling", settings.video.supersampling); auto region = Emulator::region(); if(!ares::Nintendo64::load(root, {"[Nintendo] Nintendo 64 (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 3")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 4")) { port->allocate("Gamepad"); port->connect(); } return true; } auto Nintendo64DD::save() -> bool { root->save(); system->save(system->location); bios->save(bios->location); game->save(game->location); return true; } auto Nintendo64DD::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Nintendo 64") return system->pak; if(node->name() == "Nintendo 64 Cartridge") return bios->pak; if(node->name() == "Nintendo 64DD Disk") return game->pak; return {}; } ares-126/desktop-ui/emulator/pc-engine-cd.cpp000066400000000000000000000054071415063341600212000ustar00rootroot00000000000000struct PCEngineCD : Emulator { PCEngineCD(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer bios; u32 regionID = 0; }; PCEngineCD::PCEngineCD() { manufacturer = "NEC"; name = "PC Engine CD"; firmware.append({"BIOS", "US"}); //NTSC-U firmware.append({"BIOS", "Japan"}); //NTSC-J for(auto id : range(5)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("II", virtualPorts[id].pad.a); device.digital("I", virtualPorts[id].pad.b); device.digital("Select", virtualPorts[id].pad.select); device.digital("Run", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } portBlacklist = {"Controller Port"}; inputBlacklist = {"Multitap"}; } auto PCEngineCD::load() -> bool { game = mia::Medium::create("PC Engine CD"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; bios = mia::Medium::create("PC Engine"); if(!bios->load(firmware[regionID].location)) return errorFirmware(firmware[regionID]), false; system = mia::System::create("PC Engine"); if(!system->load()) return false; auto name = region == "NTSC-J" ? "PC Engine" : "TurboGrafx 16"; if(!ares::PCEngine::load(root, {"[NEC] ", name, " (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("PC Engine CD/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port")) { port->allocate("Multitap"); port->connect(); } for(auto id : range(5)) { if(auto port = root->scan(string{"Controller Port ", 1 + id})) { port->allocate("Gamepad"); port->connect(); } } return true; } auto PCEngineCD::save() -> bool { root->save(); system->save(game->location); bios->save(game->location); game->save(game->location); return true; } auto PCEngineCD::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "PC Engine") return system->pak; if(node->name() == "PC Engine Card") return bios->pak; if(node->name() == "PC Engine CD Disc") return game->pak; return {}; } ares-126/desktop-ui/emulator/pc-engine.cpp000066400000000000000000000041541415063341600206120ustar00rootroot00000000000000struct PCEngine : Emulator { PCEngine(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; PCEngine::PCEngine() { manufacturer = "NEC"; name = "PC Engine"; for(auto id : range(5)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("II", virtualPorts[id].pad.a); device.digital("I", virtualPorts[id].pad.b); device.digital("Select", virtualPorts[id].pad.select); device.digital("Run", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } portBlacklist = {"Controller Port"}; inputBlacklist = {"Multitap"}; } auto PCEngine::load() -> bool { game = mia::Medium::create("PC Engine"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("PC Engine"); if(!system->load()) return false; auto region = Emulator::region(); string name = region == "NTSC-J" ? "PC Engine" : "TurboGrafx 16"; if(!ares::PCEngine::load(root, {"[NEC] ", name, " (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port")) { port->allocate("Multitap"); port->connect(); } for(auto id : range(5)) { if(auto port = root->scan(string{"Controller Port ", 1 + id})) { port->allocate("Gamepad"); port->connect(); } } return true; } auto PCEngine::save() -> bool { root->save(); system->save(game->location); game->save(game->location); return true; } auto PCEngine::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "PC Engine") return system->pak; if(node->name() == "PC Engine Card") return game->pak; return {}; } ares-126/desktop-ui/emulator/playstation.cpp000066400000000000000000000064761415063341600213250ustar00rootroot00000000000000struct PlayStation : Emulator { PlayStation(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer memoryCard; u32 regionID = 0; }; PlayStation::PlayStation() { manufacturer = "Sony"; name = "PlayStation"; firmware.append({"BIOS", "US"}); //NTSC-U firmware.append({"BIOS", "Japan"}); //NTSC-J firmware.append({"BIOS", "Europe"}); //PAL for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Digital Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("Cross", virtualPorts[id].pad.a); device.digital("Circle", virtualPorts[id].pad.b); device.digital("Square", virtualPorts[id].pad.x); device.digital("Triangle", virtualPorts[id].pad.y); device.digital("L1", virtualPorts[id].pad.l1); device.digital("L2", virtualPorts[id].pad.l2); device.digital("R1", virtualPorts[id].pad.r1); device.digital("R2", virtualPorts[id].pad.r2); device.digital("Select", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto PlayStation::load() -> bool { game = mia::Medium::create("PlayStation"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; system = mia::System::create("PlayStation"); if(!system->load(firmware[regionID].location)) return errorFirmware(firmware[regionID]), false; if(!ares::PlayStation::load(root, {"[Sony] PlayStation (", region, ")"})) return false; if(auto fastBoot = root->find("Fast Boot")) { fastBoot->setValue(settings.boot.fast); } if(auto port = root->find("PlayStation/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Digital Gamepad"); port->connect(); } if(auto port = root->find("Memory Card Port 1")) { memoryCard = mia::Pak::create("PlayStation"); memoryCard->pak->append("save.card", 128_KiB); memoryCard->load("save.card", ".card", game->location); port->allocate("Memory Card"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Digital Gamepad"); port->connect(); } return true; } auto PlayStation::save() -> bool { root->save(); system->save(game->location); game->save(game->location); if(memoryCard) memoryCard->save("save.card", ".card", game->location); return true; } auto PlayStation::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "PlayStation") return system->pak; if(node->name() == "PlayStation Disc") return game->pak; if(node->name() == "Memory Card") return memoryCard->pak; return {}; } ares-126/desktop-ui/emulator/pocket-challenge-v2.cpp000066400000000000000000000040701415063341600224740ustar00rootroot00000000000000struct PocketChallengeV2 : Emulator { PocketChallengeV2(); auto load(Menu) -> void override; auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; PocketChallengeV2::PocketChallengeV2() { manufacturer = "Benesse"; name = "Pocket Challenge V2"; { InputPort port{"Pocket Challenge V2"}; { InputDevice device{"Controls"}; device.digital("Up", virtualPorts[0].pad.up); device.digital("Down", virtualPorts[0].pad.down); device.digital("Left", virtualPorts[0].pad.left); device.digital("Right", virtualPorts[0].pad.right); device.digital("Pass", virtualPorts[0].pad.a); device.digital("Circle", virtualPorts[0].pad.b); device.digital("Clear", virtualPorts[0].pad.y); device.digital("View", virtualPorts[0].pad.start); device.digital("Escape", virtualPorts[0].pad.select); port.append(device); } ports.append(port); } } auto PocketChallengeV2::load(Menu menu) -> void { //the Pocket Challenge V2 game library is very small. //no titles for the system use portrait (vertical) orientation. //as such, neither the ares::WonderSwan core nor desktop-ui provide an orientation setting. } auto PocketChallengeV2::load() -> bool { game = mia::Medium::create("Pocket Challenge V2"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Pocket Challenge V2"); if(!system->load()) return false; if(!ares::WonderSwan::load(root, "[Benesse] Pocket Challenge V2")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } return true; } auto PocketChallengeV2::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto PocketChallengeV2::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Pocket Challenge V2") return system->pak; if(node->name() == "Pocket Challenge V2 Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/saturn.cpp000066400000000000000000000030651415063341600202610ustar00rootroot00000000000000struct Saturn : Emulator { Saturn(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; u32 regionID = 0; }; Saturn::Saturn() { manufacturer = "Sega"; name = "Saturn"; firmware.append({"BIOS", "US"}); //NTSC-U firmware.append({"BIOS", "Japan"}); //NTSC-J firmware.append({"BIOS", "Europe"}); //PAL } auto Saturn::load() -> bool { game = mia::Medium::create("Saturn"); if(!game->load(Emulator::load(game, configuration.game))) return false; auto region = Emulator::region(); //if statements below are ordered by lowest to highest priority if(region == "PAL" ) regionID = 2; if(region == "NTSC-J") regionID = 1; if(region == "NTSC-U") regionID = 0; system = mia::System::create("Saturn"); if(!system->load(firmware[regionID].location)) return errorFirmware(firmware[regionID]), false; if(!ares::Saturn::load(root, {"[Sega] Saturn (", region, ")"})) return false; if(auto port = root->find("Saturn/Disc Tray")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } return true; } auto Saturn::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto Saturn::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Saturn") return system->pak; if(node->name() == "Saturn Disc") return game->pak; return {}; } ares-126/desktop-ui/emulator/sg-1000.cpp000066400000000000000000000034331415063341600177330ustar00rootroot00000000000000struct SG1000 : Emulator { SG1000(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; SG1000::SG1000() { manufacturer = "Sega"; name = "SG-1000"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("1", virtualPorts[id].pad.a); device.digital("2", virtualPorts[id].pad.b); port.append(device); } ports.append(port); } } auto SG1000::load() -> bool { game = mia::Medium::create("SG-1000"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("SG-1000"); if(!system->load()) return false; auto region = Emulator::region(); if(!ares::SG1000::load(root, {"[Sega] SG-1000 (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto SG1000::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto SG1000::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "SG-1000") return system->pak; if(node->name() == "SG-1000 Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/super-famicom.cpp000066400000000000000000000124511415063341600215130ustar00rootroot00000000000000struct SuperFamicom : Emulator { SuperFamicom(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; shared_pointer gb, bs, stA, stB; }; SuperFamicom::SuperFamicom() { manufacturer = "Nintendo"; name = "Super Famicom"; for(auto id : range(2)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("B", virtualPorts[id].pad.a); device.digital("A", virtualPorts[id].pad.b); device.digital("Y", virtualPorts[id].pad.x); device.digital("X", virtualPorts[id].pad.y); device.digital("L", virtualPorts[id].pad.l1); device.digital("R", virtualPorts[id].pad.r1); device.digital("Select", virtualPorts[id].pad.select); device.digital("Start", virtualPorts[id].pad.start); port.append(device); } { InputDevice device{"Justifier"}; device.relative("X", virtualPorts[id].mouse.x); device.relative("Y", virtualPorts[id].mouse.y); device.digital ("Trigger", virtualPorts[id].mouse.left); device.digital ("Start", virtualPorts[id].mouse.right); port.append(device); } { InputDevice device{"Mouse"}; device.relative("X", virtualPorts[id].mouse.x); device.relative("Y", virtualPorts[id].mouse.y); device.digital ("Left", virtualPorts[id].mouse.left); device.digital ("Right", virtualPorts[id].mouse.right); port.append(device); } { InputDevice device{"Super Scope"}; device.relative("X", virtualPorts[id].mouse.x); device.relative("Y", virtualPorts[id].mouse.y); device.digital ("Trigger", virtualPorts[id].mouse.left); device.digital ("Cursor", virtualPorts[id].mouse.middle); device.digital ("Turbo", virtualPorts[id].mouse.right); device.digital ("Pause", virtualPorts[id].pad.start); port.append(device); } { InputDevice device{"Twin Tap"}; device.digital("1", virtualPorts[id].pad.a); device.digital("2", virtualPorts[id].pad.b); port.append(device); } ports.append(port); } inputBlacklist = {"Justifiers", "NTT Data Keypad", "Super Multitap"}; } auto SuperFamicom::load() -> bool { game = mia::Medium::create("Super Famicom"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("Super Famicom"); if(!system->load()) return false; auto region = Emulator::region(); if(!ares::SuperFamicom::load(root, {"[Nintendo] Super Famicom (", region, ")"})) return false; if(auto port = root->find("Cartridge Slot")) { auto cartridge = port->allocate(); port->connect(); if(auto slot = cartridge->find("Super Game Boy/Cartridge Slot")) { gb = mia::Medium::create("Game Boy"); if(gb->load(Emulator::load(gb, settings.paths.superFamicom.gameBoy))) { slot->allocate(); slot->connect(); } else { gb.reset(); } } if(auto slot = cartridge->find("BS Memory Slot")) { bs = mia::Medium::create("BS Memory"); if(bs->load(Emulator::load(bs, settings.paths.superFamicom.bsMemory))) { slot->allocate(); slot->connect(); } else { bs.reset(); } } if(auto slot = cartridge->find("Sufami Turbo Slot A")) { stA = mia::Medium::create("Sufami Turbo"); if(stA->load(Emulator::load(stA, settings.paths.superFamicom.sufamiTurbo))) { slot->allocate(); slot->connect(); } else { stA.reset(); } } if(auto slot = cartridge->find("Sufami Turbo Slot B")) { stB = mia::Medium::create("Sufami Turbo"); if(stB->load(Emulator::load(stB, settings.paths.superFamicom.sufamiTurbo))) { slot->allocate(); slot->connect(); } else { stB.reset(); } } } if(auto port = root->find("Controller Port 1")) { port->allocate("Gamepad"); port->connect(); } if(auto port = root->find("Controller Port 2")) { port->allocate("Gamepad"); port->connect(); } return true; } auto SuperFamicom::save() -> bool { root->save(); system->save(system->location); game->save(game->location); if(gb) gb->save(gb->location); if(bs) bs->save(bs->location); if(stA) stA->save(stA->location); if(stB) stB->save(stB->location); return true; } auto SuperFamicom::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "Super Famicom") return system->pak; if(node->name() == "Super Famicom Cartridge") return game->pak; if(node->name() == "Game Boy Cartridge") return gb->pak; if(node->name() == "Game Boy Color Cartridge") return gb->pak; if(node->name() == "BS Memory Cartridge") return bs->pak; if(node->name() == "Sufami Turbo Cartridge") { if(auto parent = node->parent()) { if(auto port = parent.acquire()) { if(port->name() == "Sufami Turbo Slot A") return stA->pak; if(port->name() == "Sufami Turbo Slot B") return stB->pak; } } } return {}; } ares-126/desktop-ui/emulator/supergrafx.cpp000066400000000000000000000037061415063341600211350ustar00rootroot00000000000000struct SuperGrafx : Emulator { SuperGrafx(); auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; SuperGrafx::SuperGrafx() { manufacturer = "NEC"; name = "SuperGrafx"; for(auto id : range(5)) { InputPort port{string{"Controller Port ", 1 + id}}; { InputDevice device{"Gamepad"}; device.digital("Up", virtualPorts[id].pad.up); device.digital("Down", virtualPorts[id].pad.down); device.digital("Left", virtualPorts[id].pad.left); device.digital("Right", virtualPorts[id].pad.right); device.digital("II", virtualPorts[id].pad.a); device.digital("I", virtualPorts[id].pad.b); device.digital("Select", virtualPorts[id].pad.select); device.digital("Run", virtualPorts[id].pad.start); port.append(device); } ports.append(port); } } auto SuperGrafx::load() -> bool { game = mia::Medium::create("SuperGrafx"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("SuperGrafx"); if(!system->load()) return false; if(!ares::PCEngine::load(root, "[NEC] SuperGrafx (NTSC-J)")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } if(auto port = root->find("Controller Port")) { port->allocate("Multitap"); port->connect(); } for(auto id : range(5)) { if(auto port = root->scan(string{"Controller Port ", 1 + id})) { port->allocate("Gamepad"); port->connect(); } } return true; } auto SuperGrafx::save() -> bool { root->save(); system->save(game->location); game->save(game->location); return true; } auto SuperGrafx::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "SuperGrafx") return system->pak; if(node->name() == "SuperGrafx Card") return game->pak; return {}; } ares-126/desktop-ui/emulator/wonderswan-color.cpp000066400000000000000000000047431415063341600222540ustar00rootroot00000000000000struct WonderSwanColor : Emulator { WonderSwanColor(); auto load(Menu) -> void override; auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; WonderSwanColor::WonderSwanColor() { manufacturer = "Bandai"; name = "WonderSwan Color"; { InputPort port{"WonderSwan Color"}; { InputDevice device{"Controls"}; device.digital("Y1", virtualPorts[0].pad.l1); device.digital("Y2", virtualPorts[0].pad.l2); device.digital("Y3", virtualPorts[0].pad.r1); device.digital("Y4", virtualPorts[0].pad.r2); device.digital("X1", virtualPorts[0].pad.up); device.digital("X2", virtualPorts[0].pad.right); device.digital("X3", virtualPorts[0].pad.down); device.digital("X4", virtualPorts[0].pad.left); device.digital("B", virtualPorts[0].pad.a); device.digital("A", virtualPorts[0].pad.b); device.digital("Start", virtualPorts[0].pad.start); port.append(device); } ports.append(port); } } auto WonderSwanColor::load(Menu menu) -> void { Menu orientationMenu{&menu}; orientationMenu.setText("Orientation").setIcon(Icon::Device::Display); if(auto orientations = root->find("PPU/Screen/Orientation")) { Group group; for(auto& orientation : orientations->readAllowedValues()) { MenuRadioItem item{&orientationMenu}; item.setText(orientation); item.onActivate([=] { if(auto orientations = root->find("PPU/Screen/Orientation")) { orientations->setValue(orientation); } }); group.append(item); } } } auto WonderSwanColor::load() -> bool { game = mia::Medium::create("WonderSwan Color"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("WonderSwan Color"); if(!system->load()) return false; if(!ares::WonderSwan::load(root, "[Bandai] WonderSwan Color")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } return true; } auto WonderSwanColor::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto WonderSwanColor::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "WonderSwan Color") return system->pak; if(node->name() == "WonderSwan Color Cartridge") return game->pak; return {}; } ares-126/desktop-ui/emulator/wonderswan.cpp000066400000000000000000000046211415063341600211330ustar00rootroot00000000000000struct WonderSwan : Emulator { WonderSwan(); auto load(Menu) -> void override; auto load() -> bool override; auto save() -> bool override; auto pak(ares::Node::Object) -> shared_pointer override; }; WonderSwan::WonderSwan() { manufacturer = "Bandai"; name = "WonderSwan"; { InputPort port{"WonderSwan"}; { InputDevice device{"Controls"}; device.digital("Y1", virtualPorts[0].pad.l1); device.digital("Y2", virtualPorts[0].pad.l2); device.digital("Y3", virtualPorts[0].pad.r1); device.digital("Y4", virtualPorts[0].pad.r2); device.digital("X1", virtualPorts[0].pad.up); device.digital("X2", virtualPorts[0].pad.right); device.digital("X3", virtualPorts[0].pad.down); device.digital("X4", virtualPorts[0].pad.left); device.digital("B", virtualPorts[0].pad.a); device.digital("A", virtualPorts[0].pad.b); device.digital("Start", virtualPorts[0].pad.start); port.append(device); } ports.append(port); } } auto WonderSwan::load(Menu menu) -> void { Menu orientationMenu{&menu}; orientationMenu.setText("Orientation").setIcon(Icon::Device::Display); if(auto orientations = root->find("PPU/Screen/Orientation")) { Group group; for(auto& orientation : orientations->readAllowedValues()) { MenuRadioItem item{&orientationMenu}; item.setText(orientation); item.onActivate([=] { if(auto orientations = root->find("PPU/Screen/Orientation")) { orientations->setValue(orientation); } }); group.append(item); } } } auto WonderSwan::load() -> bool { game = mia::Medium::create("WonderSwan"); if(!game->load(Emulator::load(game, configuration.game))) return false; system = mia::System::create("WonderSwan"); if(!system->load()) return false; if(!ares::WonderSwan::load(root, "[Bandai] WonderSwan")) return false; if(auto port = root->find("Cartridge Slot")) { port->allocate(); port->connect(); } return true; } auto WonderSwan::save() -> bool { root->save(); system->save(system->location); game->save(game->location); return true; } auto WonderSwan::pak(ares::Node::Object node) -> shared_pointer { if(node->name() == "WonderSwan") return system->pak; if(node->name() == "WonderSwan Cartridge") return game->pak; return {}; } ares-126/desktop-ui/input/000077500000000000000000000000001415063341600155445ustar00rootroot00000000000000ares-126/desktop-ui/input/hotkeys.cpp000066400000000000000000000061451415063341600177440ustar00rootroot00000000000000auto InputManager::createHotkeys() -> void { static bool fastForwardVideoBlocking; static bool fastForwardAudioBlocking; static bool fastForwardAudioDynamic; hotkeys.append(InputHotkey("Toggle Fullscreen").onPress([&] { program.videoFullScreenToggle(); })); hotkeys.append(InputHotkey("Toggle Mouse Capture").onPress([&] { if(!emulator) return; if(!ruby::input.acquired()) { ruby::input.acquire(); } else { ruby::input.release(); } })); hotkeys.append(InputHotkey("Fast Forward").onPress([&] { if(!emulator || program.rewinding) return; program.fastForwarding = true; fastForwardVideoBlocking = ruby::video.blocking(); fastForwardAudioBlocking = ruby::audio.blocking(); fastForwardAudioDynamic = ruby::audio.dynamic(); ruby::video.setBlocking(false); ruby::audio.setBlocking(false); ruby::audio.setDynamic(false); }).onRelease([&] { if(!emulator) return; program.fastForwarding = false; ruby::video.setBlocking(fastForwardVideoBlocking); ruby::audio.setBlocking(fastForwardAudioBlocking); ruby::audio.setDynamic(fastForwardAudioDynamic); })); hotkeys.append(InputHotkey("Rewind").onPress([&] { if(!emulator || program.fastForwarding) return; if(program.rewind.frequency == 0) { return program.showMessage("Please enable rewind support in the emulator settings first."); } program.rewinding = true; program.rewindSetMode(Program::Rewind::Mode::Rewinding); }).onRelease([&] { if(!emulator) return; program.rewinding = false; program.rewindSetMode(Program::Rewind::Mode::Playing); })); hotkeys.append(InputHotkey("Capture Screenshot").onPress([&] { if(!emulator) return; program.requestScreenshot = true; })); hotkeys.append(InputHotkey("Save State").onPress([&] { if(!emulator) return; program.stateSave(program.state.slot); })); hotkeys.append(InputHotkey("Load State").onPress([&] { if(!emulator) return; program.stateLoad(program.state.slot); })); hotkeys.append(InputHotkey("Decrement State Slot").onPress([&] { if(!emulator) return; if(program.state.slot == 1) program.state.slot = 9; else program.state.slot--; program.showMessage({"Selected state slot ", program.state.slot}); })); hotkeys.append(InputHotkey("Increment State Slot").onPress([&] { if(!emulator) return; if(program.state.slot == 9) program.state.slot = 1; else program.state.slot++; program.showMessage({"Selected state slot ", program.state.slot}); })); hotkeys.append(InputHotkey("Pause Emulation").onPress([&] { if(!emulator) return; program.pause(!program.paused); })); hotkeys.append(InputHotkey("Quit Emulator").onPress([&] { program.quit(); })); } auto InputManager::pollHotkeys() -> void { if(Application::modal()) return; if(!presentation.focused() && !ruby::video.fullScreen()) return; for(auto& hotkey : hotkeys) { auto state = hotkey.value(); if(hotkey.state == 0 && state == 1 && hotkey.press) hotkey.press(); if(hotkey.state == 1 && state == 0 && hotkey.release) hotkey.release(); hotkey.state = state; } } ares-126/desktop-ui/input/input.cpp000066400000000000000000000325071415063341600174160ustar00rootroot00000000000000#include "../desktop-ui.hpp" #include "hotkeys.cpp" VirtualPort virtualPorts[5]; InputManager inputManager; auto InputMapping::bind() -> void { for(auto& binding : bindings) binding = {}; for(u32 index : range(BindingLimit)) { auto& assignment = assignments[index]; auto& binding = bindings[index]; auto token = assignment.split("/"); if(token.size() < 3) continue; //ignore invalid mappings binding.deviceID = token[0].natural(); binding.groupID = token[1].natural(); binding.inputID = token[2].natural(); binding.qualifier = Qualifier::None; if(token(3) == "Lo") binding.qualifier = Qualifier::Lo; if(token(3) == "Hi") binding.qualifier = Qualifier::Hi; if(token(3) == "Rumble") binding.qualifier = Qualifier::Rumble; for(auto& device : inputManager.devices) { if(binding.deviceID == device->id()) { binding.device = device; break; } } } } auto InputMapping::bind(u32 binding, string assignment) -> void { if(binding >= BindingLimit) return; assignments[binding] = assignment; bind(); } auto InputMapping::unbind() -> void { for(u32 binding : range(BindingLimit)) unbind(binding); } auto InputMapping::unbind(u32 binding) -> void { if(binding >= BindingLimit) return; bindings[binding] = {}; assignments[binding] = {}; } auto InputMapping::Binding::icon() -> multiFactorImage { if(!device && deviceID) return Icon::Device::Joypad; if(!device) return {}; if(device->isKeyboard()) return Icon::Device::Keyboard; if(device->isMouse()) return Icon::Device::Mouse; if(device->isJoypad()) return Icon::Device::Joypad; return {}; } auto InputMapping::Binding::text() -> string { if(!device && deviceID) return "(disconnected)"; if(!device) return {}; if(groupID >= device->size()) return {}; if(inputID >= device->group(groupID).size()) return {}; if(device->isKeyboard()) { return device->group(groupID).input(inputID).name(); } if(device->isMouse()) { return device->group(groupID).input(inputID).name(); } if(device->isJoypad()) { string name{Hash::CRC16(string{device->id()}).digest().upcase()}; if(device->vendorID() == 0x045e && device->productID() == 0x028e) { name = {"Xbox360{", 1 + device->pathID(), "}"}; } else { name.append(" ", device->group(groupID).name()); } name.append(" ", device->group(groupID).input(inputID).name()); if(qualifier == Qualifier::Lo) name.append(".Lo"); if(qualifier == Qualifier::Hi) name.append(".Hi"); if(qualifier == Qualifier::Rumble) name.append(".Rumble"); return name; } return {}; } // auto InputDigital::bind(u32 binding, shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool { string assignment = {"0x", hex(device->id()), "/", groupID, "/", inputID}; if(device->isNull()) { return unbind(binding), true; } if(device->isKeyboard() && device->group(groupID).input(inputID).name() == "Escape") { return unbind(binding), true; } if(device->isKeyboard() && oldValue == 0 && newValue != 0) { return bind(binding, assignment), true; } if(device->isMouse() && oldValue == 0 && newValue != 0) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Button && oldValue == 0 && newValue != 0) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID != HID::Joypad::GroupID::Button && ( (oldValue >= -16384 && newValue < -16384) || (oldValue <= -16384 && newValue > -16384) )) { return bind(binding, {assignment, "/Lo"}), true; } if(device->isJoypad() && groupID != HID::Joypad::GroupID::Button && ( (oldValue <= +16384 && newValue > +16384) || (oldValue >= +16384 && newValue < +16384) )) { return bind(binding, {assignment, "/Hi"}), true; } return false; } auto InputDigital::value() -> s16 { s16 result = 0; for(auto& binding : bindings) { if(!binding.device) continue; //unbound auto& device = binding.device; auto& groupID = binding.groupID; auto& inputID = binding.inputID; auto& qualifier = binding.qualifier; s16 value = device->group(groupID).input(inputID).value(); s16 output = 0; if(device->isKeyboard() && groupID == HID::Keyboard::GroupID::Button) { output = value != 0; } if(device->isMouse() && groupID == HID::Mouse::GroupID::Button && ruby::input.acquired()) { output = value != 0; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Button) { output = value != 0; } if(device->isJoypad() && groupID != HID::Joypad::GroupID::Button) { if(qualifier == Qualifier::Lo) output = value < -16384; if(qualifier == Qualifier::Hi) output = value > +16384; } result |= output; } return result; } auto InputDigital::pressed() -> bool { return value() != 0; } // auto InputAnalog::bind(u32 binding, shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool { string assignment = {"0x", hex(device->id()), "/", groupID, "/", inputID}; if(device->isNull()) { return unbind(binding), true; } if(device->isKeyboard() && device->group(groupID).input(inputID).name() == "Escape") { return unbind(binding), true; } if(device->isKeyboard() && oldValue == 0 && newValue != 0) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Button && oldValue == 0 && newValue != 0) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID != HID::Joypad::GroupID::Button && ( (oldValue >= -16384 && newValue < -16384) || (oldValue <= -16384 && newValue > -16384) )) { return bind(binding, {assignment, "/Lo"}), true; } if(device->isJoypad() && groupID != HID::Joypad::GroupID::Button && ( (oldValue <= +16384 && newValue > +16384) || (oldValue >= +16384 && newValue < +16384) )) { return bind(binding, {assignment, "/Hi"}), true; } return false; } auto InputAnalog::value() -> s16 { s32 result = 0; for(auto& binding : bindings) { if(!binding.device) continue; //unbound auto& device = binding.device; auto& groupID = binding.groupID; auto& inputID = binding.inputID; auto& qualifier = binding.qualifier; s16 value = device->group(groupID).input(inputID).value(); if(device->isKeyboard() && groupID == HID::Keyboard::GroupID::Button) { result += value != 0 ? 32767 : 0; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Button) { result += value != 0 ? 32767 : 0; } if(device->isJoypad() && groupID != HID::Joypad::GroupID::Button) { if(qualifier == Qualifier::Lo && value < 0) result += abs(value); if(qualifier == Qualifier::Hi && value > 0) result += abs(value); } } return sclamp<16>(result); } auto InputAnalog::pressed() -> bool { return value() > 16384; } // auto InputAbsolute::bind(u32 binding, shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool { string assignment = {"0x", hex(device->id()), "/", groupID, "/", inputID}; if(device->isNull()) { return unbind(binding), true; } if(device->isKeyboard() && device->group(groupID).input(inputID).name() == "Escape") { return unbind(binding), true; } if(device->isMouse() && groupID == HID::Mouse::GroupID::Axis) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Axis && ( (oldValue >= -16384 && newValue < -16384) || (oldValue <= -16384 && newValue > -16384) )) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Axis && ( (oldValue <= +16384 && newValue > +16384) || (oldValue >= +16384 && newValue < +16384) )) { return bind(binding, assignment), true; } return false; } auto InputAbsolute::value() -> s16 { s32 result = 0; for(auto& binding : bindings) { if(!binding.device) continue; //unbound auto& device = binding.device; auto& groupID = binding.groupID; auto& inputID = binding.inputID; auto& qualifier = binding.qualifier; s16 value = device->group(groupID).input(inputID).value(); if(device->isMouse() && groupID == HID::Joypad::GroupID::Axis && ruby::input.acquired()) { result += value; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Axis) { result += value; } } return sclamp<16>(result); } // auto InputRelative::bind(u32 binding, shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool { string assignment = {"0x", hex(device->id()), "/", groupID, "/", inputID}; if(device->isNull()) { return unbind(binding), true; } if(device->isKeyboard() && device->group(groupID).input(inputID).name() == "Escape") { return unbind(binding), true; } if(device->isMouse() && groupID == HID::Mouse::GroupID::Axis) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Axis && ( (oldValue >= -16384 && newValue < -16384) || (oldValue <= -16384 && newValue > -16384) )) { return bind(binding, assignment), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Axis && ( (oldValue <= +16384 && newValue > +16384) || (oldValue >= +16384 && newValue < +16384) )) { return bind(binding, assignment), true; } return false; } auto InputRelative::value() -> s16 { s32 result = 0; for(auto& binding : bindings) { if(!binding.device) continue; //unbound auto& device = binding.device; auto& groupID = binding.groupID; auto& inputID = binding.inputID; auto& qualifier = binding.qualifier; s16 value = device->group(groupID).input(inputID).value(); if(device->isMouse() && groupID == HID::Joypad::GroupID::Axis && ruby::input.acquired()) { result += value; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Axis) { result += value; } } return sclamp<16>(result); } // auto InputRumble::bind(u32 binding, shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool { string assignment = {"0x", hex(device->id()), "/", groupID, "/", inputID}; if(device->isNull()) { return unbind(binding), true; } if(device->isKeyboard() && device->group(groupID).input(inputID).name() == "Escape") { return unbind(binding), true; } if(device->isJoypad() && groupID == HID::Joypad::GroupID::Button && oldValue == 0 && newValue == 1) { return bind(binding, assignment), true; } return false; } auto InputRumble::value() -> s16 { return 0; } auto InputRumble::rumble(bool enable) -> void { for(auto& binding : bindings) { if(!binding.device) continue; ruby::input.rumble(binding.deviceID, enable); } } // VirtualPad::VirtualPad() { InputDevice::name = "Xbox 360 Gamepad"; InputDevice::digital("Up", up); InputDevice::digital("Down", down); InputDevice::digital("Left", left); InputDevice::digital("Right", right); InputDevice::digital("Select", select); InputDevice::digital("Start", start); InputDevice::digital("A", a); InputDevice::digital("B", b); InputDevice::digital("C", c); InputDevice::digital("X", x); InputDevice::digital("Y", y); InputDevice::digital("Z", z); InputDevice::digital("L1", l1); InputDevice::digital("R1", r1); InputDevice::digital("L2", l2); InputDevice::digital("R2", r2); InputDevice::digital("LT", lt); InputDevice::digital("RT", rt); InputDevice::analog ("L-Up", lup); InputDevice::analog ("L-Down", ldown); InputDevice::analog ("L-Left", lleft); InputDevice::analog ("L-Right", lright); InputDevice::analog ("R-Up", rup); InputDevice::analog ("R-Down", rdown); InputDevice::analog ("R-Left", rleft); InputDevice::analog ("R-Right", rright); InputDevice::rumble ("Rumble", rumble); } // VirtualMouse::VirtualMouse() { InputDevice::name = "Mouse"; InputDevice::relative("X", x); InputDevice::relative("Y", y); InputDevice::digital ("Left", left); InputDevice::digital ("Middle", middle); InputDevice::digital ("Right", right); } // auto InputManager::create() -> void { createHotkeys(); } auto InputManager::bind() -> void { for(auto& port : virtualPorts) { for(auto& input : port.pad.inputs) input.mapping->bind(); for(auto& input : port.mouse.inputs) input.mapping->bind(); } for(auto& mapping : hotkeys) mapping.bind(); } auto InputManager::poll(bool force) -> void { //polling actual hardware is very time-consuming; skip call if poll was called too recently auto thisPoll = chrono::millisecond(); if(thisPoll - lastPoll < pollFrequency && !force) return; lastPoll = thisPoll; auto devices = ruby::input.poll(); bool changed = devices.size() != this->devices.size(); if(!changed) { for(u32 index : range(devices.size())) { changed = devices[index] != this->devices[index]; if(changed) break; } } if(changed) { this->devices = devices; bind(); inputSettings.refresh(); hotkeySettings.refresh(); } } auto InputManager::eventInput(shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> void { inputSettings.eventInput(device, groupID, inputID, oldValue, newValue); hotkeySettings.eventInput(device, groupID, inputID, oldValue, newValue); } ares-126/desktop-ui/input/input.hpp000066400000000000000000000121021415063341600174100ustar00rootroot00000000000000enum : u32 { BindingLimit = 3 }; struct InputMapping { enum class Qualifier : u32 { None, Lo, Hi, Rumble }; auto bind() -> void; auto bind(u32 binding, string assignment) -> void; auto unbind() -> void; auto unbind(u32 binding) -> void; virtual auto bind(u32 binding, shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool = 0; virtual auto value() -> s16 = 0; virtual auto pressed() -> bool { return false; } string assignments[BindingLimit]; struct Binding { auto icon() -> multiFactorImage; auto text() -> string; shared_pointer device; u64 deviceID; u32 groupID; u32 inputID; Qualifier qualifier = Qualifier::None; }; Binding bindings[BindingLimit]; }; //0 or 1 struct InputDigital : InputMapping { using InputMapping::bind; auto bind(u32 binding, shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool override; auto value() -> s16 override; auto pressed() -> bool override; }; //0 ... +32767 struct InputAnalog : InputMapping { using InputMapping::bind; auto bind(u32 binding, shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool override; auto value() -> s16 override; auto pressed() -> bool override; }; //-32768 ... +32767 struct InputAbsolute : InputMapping { using InputMapping::bind; auto bind(u32 binding, shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool override; auto value() -> s16 override; }; //-32768 ... +32767 struct InputRelative : InputMapping { using InputMapping::bind; auto bind(u32 binding, shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool override; auto value() -> s16 override; }; //specifies a target joypad for force feedback struct InputRumble : InputMapping { using InputMapping::bind; auto bind(u32 binding, shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> bool override; auto value() -> s16 override; auto rumble(bool enable) -> void; }; struct InputHotkey : InputDigital { InputHotkey(string name) : name(name) {} auto& onPress(function press) { return this->press = press, *this; } auto& onRelease(function release) { return this->release = release, *this; } const string name; private: function press; function release; s16 state = 0; friend class InputManager; }; struct InputNode { enum class Type : u32 { Digital, Analog, Absolute, Relative, Rumble }; Type type; string name; InputMapping* mapping; }; struct InputPair { enum class Type : u32 { Analog }; Type type; string name; InputMapping* mappingLo; InputMapping* mappingHi; }; struct InputDevice { auto digital(string name, InputMapping& mapping) -> void { inputs.append({InputNode::Type::Digital, name, &mapping}); } auto analog(string name, InputMapping& mapping) -> void { inputs.append({InputNode::Type::Analog, name, &mapping}); } auto absolute(string name, InputMapping& mapping) -> void { inputs.append({InputNode::Type::Absolute, name, &mapping}); } auto relative(string name, InputMapping& mapping) -> void { inputs.append({InputNode::Type::Relative, name, &mapping}); } auto rumble(string name, InputMapping& mapping) -> void { inputs.append({InputNode::Type::Rumble, name, &mapping}); } auto analog(string name, InputMapping& mappingLo, InputMapping& mappingHi) -> void { pairs.append({InputPair::Type::Analog, name, &mappingLo, &mappingHi}); } string name; vector inputs; vector pairs; }; struct InputPort { auto append(const InputDevice& device) -> void { devices.append(device); } string name; vector devices; }; struct VirtualPad : InputDevice { VirtualPad(); InputDigital up; InputDigital down; InputDigital left; InputDigital right; InputDigital select; InputDigital start; InputDigital a; InputDigital b; InputDigital c; InputDigital x; InputDigital y; InputDigital z; InputDigital l1; InputDigital r1; InputDigital l2; InputDigital r2; InputDigital lt; InputDigital rt; InputAnalog lup; InputAnalog ldown; InputAnalog lleft; InputAnalog lright; InputAnalog rup; InputAnalog rdown; InputAnalog rleft; InputAnalog rright; InputRumble rumble; }; struct VirtualMouse : InputDevice { VirtualMouse(); InputRelative x; InputRelative y; InputDigital left; InputDigital middle; InputDigital right; }; struct VirtualPort { VirtualPad pad; VirtualMouse mouse; }; struct InputManager { auto create() -> void; auto bind() -> void; auto poll(bool force = false) -> void; auto eventInput(shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> void; //hotkeys.cpp auto createHotkeys() -> void; auto pollHotkeys() -> void; vector> devices; vector hotkeys; u64 pollFrequency = 5; u64 lastPoll = 0; }; extern VirtualPort virtualPorts[5]; extern InputManager inputManager; ares-126/desktop-ui/macos-fix-jit.cpp000066400000000000000000000063721415063341600175730ustar00rootroot00000000000000// macos-fix-jit - Fix Ares JIT support on macOS with old linkers // // Ares JIT requires the data segment to be executable (see // https://github.com/ares-emulator/ares/pull/200 for details on why // this is done instead of allocating a new segment via mmap). // // To do this, it uses mprotect() (bump_allocator::resize), but it also // needs to tell the linker that the data segment can be upgraded to executable // with -Wl,-segprot,__DATA,rwx,rw (nall/GNUmakefile). Unfortunately, for quite // some time, the clang LD had a bug and didn't accept that option for the // data segment. The bug was fixed in Xcode 11.4.1. // // The official CI has a newer linker without the bug, but for developers compiling // ares with an old toolchain, this small tool will patch the binary to // mark the data segment as potentially executable. #include #include #include #include #define VM_PROT_R 1 #define VM_PROT_W 2 #define VM_PROT_X 4 bool is_64bit = false; bool is_le = false; uint32_t read32(FILE *f) { if (is_le) { uint32_t x = fgetc(f); x |= fgetc(f) << 8; x |= fgetc(f) << 16; x |= fgetc(f) << 24; return x; } else { uint32_t x = fgetc(f) << 24; x |= fgetc(f) << 16; x |= fgetc(f) << 8; x |= fgetc(f); return x; } } void write32(FILE *f, uint32_t x) { if (is_le) { fputc(x, f); fputc(x>>8, f); fputc(x>>16, f); fputc(x>>24, f); } else { fputc(x>>24, f); fputc(x>>16, f); fputc(x>>8, f); fputc(x, f); } } int main(int argc, char *argv[]) { if (argc != 2) { fprintf(stderr, "Usage: %s \n", argv[0]); return 1; } FILE *f = fopen(argv[1], "r+w"); if (!f) { fprintf(stderr, "cannot open file: %s\n", argv[1]); return 1; } uint32_t magic = read32(f); switch (magic) { case 4277009102: is_64bit = false; is_le = false; break; case 4277009103: is_64bit = true; is_le = false; break; case 3472551422: is_64bit = false; is_le = true; break; case 3489328638: is_64bit = true; is_le = true; break; case 3405691582: fprintf(stderr, "universal binary is not supported"); return 1; default: fprintf(stderr, "invalid MachO magic number: %u\n", magic); return 1; } fseek(f, 3*4, SEEK_CUR); uint32_t nlcs = read32(f); fseek(f, (2+is_64bit)*4, SEEK_CUR); if (nlcs > 1024) { fprintf(stderr, "too many MachO load commands, header corrupted? (%08x)", nlcs); return 1; } for (int i=0; i presentation; } Presentation& presentation = Instances::presentation(); #if defined(PLATFORM_MACOS) #define ELLIPSIS "\u2026" #else #define ELLIPSIS " ..." #endif Presentation::Presentation() { loadMenu.setText("Load"); systemMenu.setVisible(false); settingsMenu.setText("Settings"); videoSizeMenu.setText("Size").setIcon(Icon::Emblem::Image); //determine the largest multiplier that can be used by the largest monitor found u32 monitorHeight = 1; for(u32 monitor : range(Monitor::count())) { monitorHeight = max(monitorHeight, Monitor::workspace(monitor).height()); } //generate size menu u32 multipliers = max(1, monitorHeight / 240); for(u32 multiplier : range(2, multipliers + 1)) { MenuItem item{&videoSizeMenu}; item.setText({multiplier, "x (", 240 * multiplier, "p)"}); item.onActivate([=] { settings.video.multiplier = multiplier; resizeWindow(); }); } videoSizeMenu.append(MenuSeparator()); MenuItem centerWindow{&videoSizeMenu}; centerWindow.setText("Center Window").setIcon(Icon::Place::Settings).onActivate([&] { setAlignment(Alignment::Center); }); videoOutputMenu.setText("Output").setIcon(Icon::Emblem::Image); videoOutputCenter.setText("Center").onActivate([&] { settings.video.output = "Center"; }); videoOutputScale.setText("Scale").onActivate([&] { settings.video.output = "Scale"; }); videoOutputStretch.setText("Stretch").onActivate([&] { settings.video.output = "Stretch"; }); if(settings.video.output == "Center") videoOutputCenter.setChecked(); if(settings.video.output == "Scale") videoOutputScale.setChecked(); if(settings.video.output == "Stretch") videoOutputStretch.setChecked(); videoAspectCorrection.setText("Aspect Correction").setChecked(settings.video.aspectCorrection).onToggle([&] { settings.video.aspectCorrection = videoAspectCorrection.checked(); if(settings.video.adaptiveSizing) resizeWindow(); }); videoAdaptiveSizing.setText("Adaptive Sizing").setChecked(settings.video.adaptiveSizing).onToggle([&] { if(settings.video.adaptiveSizing = videoAdaptiveSizing.checked()) resizeWindow(); }); videoAutoCentering.setText("Auto Centering").setChecked(settings.video.autoCentering).onToggle([&] { if(settings.video.autoCentering = videoAutoCentering.checked()) resizeWindow(); }); videoShaderMenu.setText("Shader").setIcon(Icon::Emblem::Image); loadShaders(); bootOptionsMenu.setText("Boot Options").setIcon(Icon::Place::Settings); fastBoot.setText("Fast Boot").setChecked(settings.boot.fast).onToggle([&] { settings.boot.fast = fastBoot.checked(); }); launchDebugger.setText("Launch Debugger").setChecked(settings.boot.debugger).onToggle([&] { settings.boot.debugger = launchDebugger.checked(); }); preferNTSCU.setText("Prefer US").onActivate([&] { settings.boot.prefer = "NTSC-U"; }); preferNTSCJ.setText("Prefer Japan").onActivate([&] { settings.boot.prefer = "NTSC-J"; }); preferPAL.setText("Prefer Europe").onActivate([&] { settings.boot.prefer = "PAL"; }); if(settings.boot.prefer == "NTSC-U") preferNTSCU.setChecked(); if(settings.boot.prefer == "NTSC-J") preferNTSCJ.setChecked(); if(settings.boot.prefer == "PAL") preferPAL.setChecked(); muteAudioSetting.setText("Mute Audio").setChecked(settings.audio.mute).onToggle([&] { settings.audio.mute = muteAudioSetting.checked(); }); showStatusBarSetting.setText("Show Status Bar").setChecked(settings.general.showStatusBar).onToggle([&] { settings.general.showStatusBar = showStatusBarSetting.checked(); if(!showStatusBarSetting.checked()) { layout.remove(statusLayout); } else { layout.append(statusLayout, Size{~0, StatusHeight}); } if(visible()) resizeWindow(); }).doToggle(); videoSettingsAction.setText("Video" ELLIPSIS).setIcon(Icon::Device::Display).onActivate([&] { settingsWindow.show("Video"); }); audioSettingsAction.setText("Audio" ELLIPSIS).setIcon(Icon::Device::Speaker).onActivate([&] { settingsWindow.show("Audio"); }); inputSettingsAction.setText("Input" ELLIPSIS).setIcon(Icon::Device::Joypad).onActivate([&] { settingsWindow.show("Input"); }); hotkeySettingsAction.setText("Hotkeys" ELLIPSIS).setIcon(Icon::Device::Keyboard).onActivate([&] { settingsWindow.show("Hotkeys"); }); emulatorSettingsAction.setText("Emulators" ELLIPSIS).setIcon(Icon::Place::Server).onActivate([&] { settingsWindow.show("Emulators"); }); optionSettingsAction.setText("Options" ELLIPSIS).setIcon(Icon::Action::Settings).onActivate([&] { settingsWindow.show("Options"); }); firmwareSettingsAction.setText("Firmware" ELLIPSIS).setIcon(Icon::Emblem::Binary).onActivate([&] { settingsWindow.show("Firmware"); }); pathSettingsAction.setText("Paths" ELLIPSIS).setIcon(Icon::Emblem::Folder).onActivate([&] { settingsWindow.show("Paths"); }); driverSettingsAction.setText("Drivers" ELLIPSIS).setIcon(Icon::Place::Settings).onActivate([&] { settingsWindow.show("Drivers"); }); toolsMenu.setVisible(false).setText("Tools"); saveStateMenu.setText("Save State").setIcon(Icon::Media::Record); for(u32 slot : range(9)) { MenuItem item{&saveStateMenu}; item.setText({"Slot ", 1 + slot}).onActivate([=] { program.stateSave(1 + slot); }); } loadStateMenu.setText("Load State").setIcon(Icon::Media::Rewind); for(u32 slot : range(9)) { MenuItem item{&loadStateMenu}; item.setText({"Slot ", 1 + slot}).onActivate([=] { program.stateLoad(1 + slot); }); } captureScreenshot.setText("Capture Screenshot").setIcon(Icon::Emblem::Image).onActivate([&] { program.requestScreenshot = true; }); pauseEmulation.setText("Pause Emulation").onToggle([&] { program.pause(!program.paused); }); manifestViewerAction.setText("Manifest").setIcon(Icon::Emblem::Binary).onActivate([&] { toolsWindow.show("Manifest"); }); #if !defined(PLATFORM_MACOS) // Cocoa hiro is missing the hex editor widget memoryEditorAction.setText("Memory").setIcon(Icon::Device::Storage).onActivate([&] { toolsWindow.show("Memory"); }); #endif graphicsViewerAction.setText("Graphics").setIcon(Icon::Emblem::Image).onActivate([&] { toolsWindow.show("Graphics"); }); streamManagerAction.setText("Streams").setIcon(Icon::Emblem::Audio).onActivate([&] { toolsWindow.show("Streams"); }); propertiesViewerAction.setText("Properties").setIcon(Icon::Emblem::Text).onActivate([&] { toolsWindow.show("Properties"); }); traceLoggerAction.setText("Tracer").setIcon(Icon::Emblem::Script).onActivate([&] { toolsWindow.show("Tracer"); }); helpMenu.setText("Help"); aboutAction.setText("About" ELLIPSIS).setIcon(Icon::Prompt::Question).onActivate([&] { multiFactorImage logo(Resource::Ares::Logo1x, Resource::Ares::Logo2x); AboutDialog() .setName(ares::Name) .setLogo(logo) .setDescription({ares::Name, " — a simplified multi-system emulator"}) .setVersion(ares::Version) .setCopyright(ares::Copyright) .setLicense(ares::License, ares::LicenseURI) .setWebsite(ares::Website, ares::WebsiteURI) .setAlignment(presentation) .show(); }); viewport.setDroppable().onDrop([&](auto filenames) { if(filenames.size() != 1) return; if(auto emulator = program.identify(filenames.first())) { program.load(emulator, filenames.first()); } }); Application::onOpenFile([&](auto filename) { if(auto emulator = program.identify(filename)) { program.load(emulator, filename); } }); iconLayout.setCollapsible(); iconSpacer.setCollapsible().setColor({0, 0, 0}).setDroppable().onDrop([&](auto filenames) { viewport.doDrop(filenames); }); multiFactorImage icon(Resource::Ares::Icon1x, Resource::Ares::Icon2x); icon.alphaBlend(0x000000); iconCanvas.setCollapsible().setIcon(icon).setDroppable().onDrop([&](auto filenames) { viewport.doDrop(filenames); }); iconPadding.setCollapsible().setColor({0, 0, 0}).setDroppable().onDrop([&](auto filenames) { viewport.doDrop(filenames); }); iconBottom.setCollapsible().setColor({0, 0, 0}).setDroppable().onDrop([&](auto filenames) { viewport.doDrop(filenames); }); spacerLeft .setBackgroundColor({32, 32, 32}); statusLeft .setBackgroundColor({32, 32, 32}).setForegroundColor({255, 255, 255}); statusRight.setBackgroundColor({32, 32, 32}).setForegroundColor({255, 255, 255}); spacerRight.setBackgroundColor({32, 32, 32}); statusLeft .setAlignment(0.0).setFont(Font().setBold()); statusRight.setAlignment(1.0).setFont(Font().setBold()); onClose([&] { program.quit(); }); resizeWindow(); setTitle({ares::Name, " v", ares::Version}); setAssociatedFile(); setBackgroundColor({0, 0, 0}); setAlignment(Alignment::Center); setVisible(); #if defined(PLATFORM_MACOS) Application::Cocoa::onAbout([&] { aboutAction.doActivate(); }); Application::Cocoa::onActivate([&] { setFocused(); }); Application::Cocoa::onPreferences([&] { settingsWindow.show("Video"); }); Application::Cocoa::onQuit([&] { doClose(); }); #endif } auto Presentation::resizeWindow() -> void { if(fullScreen()) setFullScreen(false); if(maximized()) setMaximized(false); u32 multiplier = max(2, settings.video.multiplier); u32 viewportWidth = 320 * multiplier; u32 viewportHeight = 240 * multiplier; if(emulator && program.screens) { auto& node = program.screens.first(); u32 videoWidth = node->width() * node->scaleX(); u32 videoHeight = node->height() * node->scaleY(); if(settings.video.aspectCorrection) videoWidth = videoWidth * node->aspectX() / node->aspectY(); if(node->rotation() == 90 || node->rotation() == 270) swap(videoWidth, videoHeight); u32 multiplierX = viewportWidth / videoWidth; u32 multiplierY = viewportHeight / videoHeight; u32 multiplier = max(1, min(multiplierX, multiplierY)); viewportWidth = videoWidth * multiplier; viewportHeight = videoHeight * multiplier; } u32 statusHeight = showStatusBarSetting.checked() ? StatusHeight : 0; if(settings.video.autoCentering) { setGeometry(Alignment::Center, {viewportWidth, viewportHeight + statusHeight}); } else { setSize({viewportWidth, viewportHeight + statusHeight}); } setMinimumSize({256, 240 + statusHeight}); } auto Presentation::loadEmulators() -> void { loadMenu.reset(); //clean up the recent games history first vector recentGames; for(u32 index : range(9)) { auto entry = settings.recent.game[index]; auto system = entry.split(";", 1L)(0); auto location = entry.split(";", 1L)(1); if(inode::exists(location)) { //remove missing games if(!recentGames.find(entry)) { //remove duplicate entries recentGames.append(entry); } } settings.recent.game[index] = {}; } //build recent games list u32 count = 0; for(auto& game : recentGames) { settings.recent.game[count++] = game; } { Menu recentGames{&loadMenu}; recentGames.setIcon(Icon::Action::Open); recentGames.setText("Recent Games"); for(u32 index : range(count)) { MenuItem item{&recentGames}; auto entry = settings.recent.game[index]; auto system = entry.split(";", 1L)(0); auto location = entry.split(";", 1L)(1); item.setIconForFile(location); item.setText(Location::base(location).trimRight("/")); item.onActivate([=] { for(auto& emulator : emulators) { if(emulator->name == system) { return (void)program.load(emulator, location); } } }); } if(count > 0) { recentGames.append(MenuSeparator()); MenuItem clearHistory{&recentGames}; clearHistory.setIcon(Icon::Edit::Clear); #if !defined(PLATFORM_MACOS) clearHistory.setText("Clear History"); #else clearHistory.setText("Clear Menu"); #endif clearHistory.onActivate([&] { for(u32 index : range(9)) settings.recent.game[index] = {}; loadEmulators(); }); } else { recentGames.setEnabled(false); } } loadMenu.append(MenuSeparator()); //build emulator load list u32 enabled = 0; for(auto& emulator : emulators) { if(!emulator->configuration.visible) continue; enabled++; MenuItem item; item.setIcon(Icon::Place::Server); item.setText({emulator->name, ELLIPSIS}); item.setVisible(emulator->configuration.visible); item.onActivate([=] { program.load(emulator); }); if(settings.general.groupEmulators) { Menu menu; for(auto& action : loadMenu.actions()) { if(auto group = action.cast

()) { if(group.text() == emulator->manufacturer) { menu = group; break; } } } if(!menu) { menu.setIcon(Icon::Emblem::Folder); menu.setText(emulator->manufacturer); loadMenu.append(menu); } menu.append(item); } else { loadMenu.append(item); } } if(enabled == 0) { //if the user disables every system, give an indication for how to re-add systems to the load menu MenuItem item{&loadMenu}; item.setIcon(Icon::Action::Add); item.setText("Add Systems" ELLIPSIS); item.onActivate([&] { settingsWindow.show("Emulators"); }); } #if !defined(PLATFORM_MACOS) loadMenu.append(MenuSeparator()); { MenuItem quit{&loadMenu}; quit.setIcon(Icon::Action::Quit); quit.setText("Quit"); quit.onActivate([&] { program.quit(); }); } #endif } auto Presentation::loadEmulator() -> void { setTitle(emulator->root->game()); setAssociatedFile(emulator->game->location); systemMenu.setText(emulator->name); systemMenu.setVisible(); //allow each emulator core to create any specialized menus necessary: //for instance, floppy disk and CD-ROM swapping support. emulator->load(systemMenu); if(systemMenu.actionCount() > 0) systemMenu.append(MenuSeparator()); u32 portsFound = 0; for(auto port : ares::Node::enumerate(emulator->root)) { //do not add unsupported ports to the port menu if(emulator->portBlacklist.find(port->name())) continue; if(!port->hotSwappable()) continue; if(port->type() != "Controller" && port->type() != "Expansion") continue; portsFound++; Menu portMenu{&systemMenu}; if(port->type() == "Controller") portMenu.setIcon(Icon::Device::Joypad); if(port->type() == "Expansion" ) portMenu.setIcon(Icon::Device::Storage); portMenu.setText(port->name()); Group peripheralGroup; { MenuRadioItem peripheralItem{&portMenu}; peripheralItem.setText("Nothing"); peripheralGroup.append(peripheralItem); } for(auto peripheral : port->supported()) { //do not add unsupported peripherals to the peripheral port menu if(emulator->inputBlacklist.find(peripheral)) continue; MenuRadioItem peripheralItem{&portMenu}; peripheralItem.setAttribute("port", port); peripheralItem.setText(peripheral); peripheralItem.onActivate([=] { auto port = peripheralItem.attribute("port"); port->allocate(peripheralItem.text()); port->connect(); }); peripheralGroup.append(peripheralItem); } //check the peripheral item menu option that is currently connected to said port if(auto connected = port->connected()) { for(auto peripheralItem : peripheralGroup.objects()) { if(peripheralItem.text() == connected->name()) peripheralItem.setChecked(); } } } if(portsFound > 0) systemMenu.append(MenuSeparator()); MenuItem reset{&systemMenu}; reset.setText("Reset").setIcon(Icon::Action::Refresh).onActivate([&] { emulator->root->power(true); program.showMessage("System reset"); }); systemMenu.append(MenuSeparator()); MenuItem unload{&systemMenu}; unload.setText("Unload").setIcon(Icon::Media::Eject).onActivate([&] { program.unload(); if(settings.video.adaptiveSizing) presentation.resizeWindow(); presentation.showIcon(true); }); toolsMenu.setVisible(true); pauseEmulation.setChecked(false); setFocused(); viewport.setFocused(); } auto Presentation::unloadEmulator(bool reloading) -> void { setTitle({ares::Name, " v", ares::Version}); setAssociatedFile(); systemMenu.setVisible(false); systemMenu.reset(); toolsMenu.setVisible(false); } auto Presentation::showIcon(bool visible) -> void { iconLayout.setVisible(visible); iconSpacer.setVisible(visible); iconCanvas.setVisible(visible); iconBottom.setVisible(visible); layout.resize(); } auto Presentation::loadShaders() -> void { videoShaderMenu.reset(); videoShaderMenu.setEnabled(ruby::video.hasShader()); if(!ruby::video.hasShader()) return; Group shaders; MenuRadioItem none{&videoShaderMenu}; none.setText("None").onActivate([&] { settings.video.shader = "None"; ruby::video.setShader(settings.video.shader); }); shaders.append(none); MenuRadioItem blur{&videoShaderMenu}; blur.setText("Blur").onActivate([&] { settings.video.shader = "Blur"; ruby::video.setShader(settings.video.shader); }); shaders.append(blur); auto location = locate("Shaders/"); if(ruby::video.driver() == "OpenGL 3.2") { for(auto shader : directory::folders(location, "*.shader")) { if(shaders.objectCount() == 2) videoShaderMenu.append(MenuSeparator()); MenuRadioItem item{&videoShaderMenu}; item.setText(string{shader}.trimRight(".shader/", 1L)).onActivate([=] { settings.video.shader = {location, shader}; ruby::video.setShader(settings.video.shader); }); shaders.append(item); } } if(settings.video.shader == "None") none.setChecked(); if(settings.video.shader == "Blur") blur.setChecked(); for(auto item : shaders.objects()) { if(settings.video.shader == string{location, item.text(), ".shader/"}) { item.setChecked(); } } } ares-126/desktop-ui/presentation/presentation.hpp000066400000000000000000000075061415063341600223540ustar00rootroot00000000000000struct Presentation : Window { enum : u32 { StatusHeight = 24 }; Presentation(); auto resizeWindow() -> void; auto loadEmulators() -> void; auto loadEmulator() -> void; auto unloadEmulator(bool reloading = false) -> void; auto showIcon(bool visible) -> void; auto loadShaders() -> void; MenuBar menuBar{this}; Menu loadMenu{&menuBar}; Menu systemMenu{&menuBar}; Menu settingsMenu{&menuBar}; Menu videoSizeMenu{&settingsMenu}; Menu videoOutputMenu{&settingsMenu}; MenuRadioItem videoOutputCenter{&videoOutputMenu}; MenuRadioItem videoOutputScale{&videoOutputMenu}; MenuRadioItem videoOutputStretch{&videoOutputMenu}; Group videoOutputGroup{&videoOutputCenter, &videoOutputScale, &videoOutputStretch}; MenuSeparator videoOutputSeparator{&videoOutputMenu}; MenuCheckItem videoAspectCorrection{&videoOutputMenu}; MenuCheckItem videoAdaptiveSizing{&videoOutputMenu}; MenuCheckItem videoAutoCentering{&videoOutputMenu}; Menu videoShaderMenu{&settingsMenu}; Menu bootOptionsMenu{&settingsMenu}; MenuCheckItem fastBoot{&bootOptionsMenu}; MenuCheckItem launchDebugger{&bootOptionsMenu}; MenuSeparator bootOptionsSeparator{&bootOptionsMenu}; MenuRadioItem preferNTSCU{&bootOptionsMenu}; MenuRadioItem preferNTSCJ{&bootOptionsMenu}; MenuRadioItem preferPAL{&bootOptionsMenu}; Group preferRegionGroup{&preferNTSCU, &preferNTSCJ, &preferPAL}; MenuSeparator groupSettingsSeparatpr{&settingsMenu}; MenuCheckItem muteAudioSetting{&settingsMenu}; MenuCheckItem showStatusBarSetting{&settingsMenu}; MenuSeparator audioSettingsSeparator{&settingsMenu}; MenuItem videoSettingsAction{&settingsMenu}; MenuItem audioSettingsAction{&settingsMenu}; MenuItem inputSettingsAction{&settingsMenu}; MenuItem hotkeySettingsAction{&settingsMenu}; MenuItem emulatorSettingsAction{&settingsMenu}; MenuItem optionSettingsAction{&settingsMenu}; MenuItem firmwareSettingsAction{&settingsMenu}; MenuItem pathSettingsAction{&settingsMenu}; MenuItem driverSettingsAction{&settingsMenu}; Menu toolsMenu{&menuBar}; Menu saveStateMenu{&toolsMenu}; Menu loadStateMenu{&toolsMenu}; MenuItem captureScreenshot{&toolsMenu}; MenuSeparator toolsMenuSeparatorA{&toolsMenu}; MenuCheckItem pauseEmulation{&toolsMenu}; MenuSeparator toolsMenuSeparatorB{&toolsMenu}; MenuItem manifestViewerAction{&toolsMenu}; #if !defined(PLATFORM_MACOS) // Cocoa hiro is missing the hex editor widget MenuItem memoryEditorAction{&toolsMenu}; #endif MenuItem graphicsViewerAction{&toolsMenu}; MenuItem streamManagerAction{&toolsMenu}; MenuItem propertiesViewerAction{&toolsMenu}; MenuItem traceLoggerAction{&toolsMenu}; Menu helpMenu{&menuBar}; MenuItem aboutAction{&helpMenu}; VerticalLayout layout{this}; HorizontalLayout viewportLayout{&layout, Size{~0, ~0}, 0}; Viewport viewport{&viewportLayout, Size{~0, ~0}, 0}; VerticalLayout iconLayout{&viewportLayout, Size{128, ~0}, 0}; Canvas iconSpacer{&iconLayout, Size{128, ~0}, 0}; HorizontalLayout iconHorizontal{&iconLayout, Size{128, 128}, 0}; Canvas iconCanvas{&iconHorizontal, Size{112, 128}, 0}; Canvas iconPadding{&iconHorizontal, Size{16, 128}, 0}; Canvas iconBottom{&iconLayout, Size{128, 10}, 0}; HorizontalLayout statusLayout{&layout, Size{~0, StatusHeight}, 0}; Label spacerLeft{&statusLayout, Size{8, ~0}, 0}; Label statusLeft{&statusLayout, Size{~0, ~0}, 0}; Label statusRight{&statusLayout, Size{100, ~0}, 0}; Label spacerRight{&statusLayout, Size{8, ~0}, 0}; }; namespace Instances { extern Instance presentation; } extern Presentation& presentation; ares-126/desktop-ui/program/000077500000000000000000000000001415063341600160545ustar00rootroot00000000000000ares-126/desktop-ui/program/drivers.cpp000066400000000000000000000065571415063341600202530ustar00rootroot00000000000000auto Program::videoDriverUpdate() -> void { ruby::video.create(settings.video.driver); ruby::video.setContext(presentation.viewport.handle()); videoMonitorUpdate(); videoFormatUpdate(); ruby::video.setExclusive(settings.video.exclusive); ruby::video.setBlocking(settings.video.blocking); ruby::video.setFlush(settings.video.flush); ruby::video.setShader(settings.video.shader); if(!ruby::video.ready()) { MessageDialog().setText({"Failed to initialize ", settings.video.driver, " video driver."}).setAlignment(presentation).error(); settings.video.driver = "None"; driverSettings.videoDriverUpdate(); } presentation.loadShaders(); } auto Program::videoMonitorUpdate() -> void { if(!ruby::video.hasMonitor(settings.video.monitor)) { settings.video.monitor = ruby::video.monitor(); } ruby::video.setMonitor(settings.video.monitor); } auto Program::videoFormatUpdate() -> void { if(!ruby::video.hasFormat(settings.video.format)) { settings.video.format = ruby::video.format(); } ruby::video.setFormat(settings.video.format); } auto Program::videoFullScreenToggle() -> void { if(!ruby::video.hasFullScreen()) return; ruby::video.clear(); if(!ruby::video.fullScreen()) { ruby::video.setFullScreen(true); if(!ruby::input.acquired()) { if(ruby::video.exclusive() || ruby::video.hasMonitors().size() == 1) { ruby::input.acquire(); } } } else { if(ruby::input.acquired()) { ruby::input.release(); } ruby::video.setFullScreen(false); presentation.viewport.setFocused(); } } // auto Program::audioDriverUpdate() -> void { ruby::audio.create(settings.audio.driver); ruby::audio.setContext(presentation.viewport.handle()); audioDeviceUpdate(); audioFrequencyUpdate(); audioLatencyUpdate(); ruby::audio.setExclusive(settings.audio.exclusive); ruby::audio.setBlocking(settings.audio.blocking); ruby::audio.setDynamic(settings.audio.dynamic); if(!ruby::audio.ready()) { MessageDialog().setText({"Failed to initialize ", settings.audio.driver, " audio driver."}).setAlignment(presentation).error(); settings.audio.driver = "None"; driverSettings.audioDriverUpdate(); } } auto Program::audioDeviceUpdate() -> void { if(!ruby::audio.hasDevice(settings.audio.device)) { settings.audio.device = ruby::audio.device(); } ruby::audio.setDevice(settings.audio.device); } auto Program::audioFrequencyUpdate() -> void { if(!ruby::audio.hasFrequency(settings.audio.frequency)) { settings.audio.frequency = ruby::audio.frequency(); } ruby::audio.setFrequency(settings.audio.frequency); for(auto& stream : streams) { stream->setResamplerFrequency(ruby::audio.frequency()); } } auto Program::audioLatencyUpdate() -> void { if(!ruby::audio.hasLatency(settings.audio.latency)) { settings.audio.latency = ruby::audio.latency(); } ruby::audio.setLatency(settings.audio.latency); } // auto Program::inputDriverUpdate() -> void { ruby::input.create(settings.input.driver); ruby::input.setContext(presentation.viewport.handle()); ruby::input.onChange({&InputManager::eventInput, &inputManager}); if(!ruby::input.ready()) { MessageDialog().setText({"Failed to initialize ", settings.input.driver, " input driver."}).setAlignment(presentation).error(); settings.input.driver = "None"; driverSettings.inputDriverUpdate(); } inputManager.poll(true); } ares-126/desktop-ui/program/load.cpp000066400000000000000000000055541415063341600175100ustar00rootroot00000000000000auto Program::identify(const string& filename) -> shared_pointer { if(auto system = mia::identify(filename)) { for(auto& emulator : emulators) { if(emulator->name == system) return emulator; } } MessageDialog().setTitle(ares::Name).setText({ "Filename: ", Location::file(filename), "\n\n" "Unable to determine what type of game this file is.\n" "Please use the load menu to choose the appropriate game system instead." }).setAlignment(presentation).error(); return {}; } //location is an optional game to load automatically (for command-line loading) auto Program::load(shared_pointer emulator, string location) -> bool { unload(); ::emulator = emulator; if(!emulator->load(location)) { ::emulator.reset(); if(settings.video.adaptiveSizing) presentation.resizeWindow(); presentation.showIcon(true); return false; } location = emulator->game->location; //this is a safeguard warning in case the user loads their games from a read-only location: string savesPath = settings.paths.saves; if(!savesPath) savesPath = Location::path(location); if(!directory::writable(savesPath)) { MessageDialog().setTitle(ares::Name).setText({ "The current save path is read-only; please choose a writable save path now.\n" "Otherwise, any in-game progress will be lost once this game is unloaded!\n\n" "Current save location: ", savesPath }).warning(); } paletteUpdate(); runAheadUpdate(); presentation.loadEmulator(); presentation.showIcon(false); if(settings.video.adaptiveSizing) presentation.resizeWindow(); manifestViewer.reload(); memoryEditor.reload(); graphicsViewer.reload(); streamManager.reload(); propertiesViewer.reload(); traceLogger.reload(); state = {}; //reset hotkey state slot to 1 if(settings.boot.debugger) { pause(true); traceLogger.traceToTerminal.setChecked(true); traceLogger.traceToFile.setChecked(false); toolsWindow.show("Tracer"); presentation.setFocused(); } else { pause(false); } showMessage({"Loaded ", Location::prefix(location)}); //update recent games list for(s32 index = 7; index >= 0; index--) { settings.recent.game[index + 1] = settings.recent.game[index]; } settings.recent.game[0] = {emulator->name, ";", location}; presentation.loadEmulators(); return true; } auto Program::unload() -> void { if(!emulator) return; settings.save(); showMessage({"Unloaded ", Location::prefix(emulator->game->location)}); emulator->unload(); screens.reset(); streams.reset(); emulator.reset(); rewindReset(); presentation.unloadEmulator(); toolsWindow.setVisible(false); manifestViewer.unload(); memoryEditor.unload(); graphicsViewer.unload(); streamManager.unload(); propertiesViewer.unload(); traceLogger.unload(); message.text = ""; ruby::video.clear(); ruby::audio.clear(); } ares-126/desktop-ui/program/platform.cpp000066400000000000000000000131671415063341600204140ustar00rootroot00000000000000auto Program::attach(ares::Node::Object node) -> void { if(auto screen = node->cast()) { screens = emulator->root->find(); } if(auto stream = node->cast()) { streams = emulator->root->find(); stream->setResamplerFrequency(ruby::audio.frequency()); } } auto Program::detach(ares::Node::Object node) -> void { if(auto screen = node->cast()) { screens = emulator->root->find(); screens.removeByValue(screen); } if(auto stream = node->cast()) { streams = emulator->root->find(); streams.removeByValue(stream); stream->setResamplerFrequency(ruby::audio.frequency()); } } auto Program::pak(ares::Node::Object node) -> shared_pointer { return emulator->pak(node); } auto Program::event(ares::Event event) -> void { } auto Program::log(string_view message) -> void { if(traceLogger.traceToTerminal.checked()) { print(message); } if(traceLogger.traceToFile.checked()) { if(!traceLogger.fp) { auto datetime = chrono::local::datetime().replace("-", "").replace(":", "").replace(" ", "-"); auto location = emulator->locate({Location::notsuffix(emulator->game->location), "-", datetime, ".log"}, ".log", settings.paths.debugging); traceLogger.fp.open(location, file::mode::write); } traceLogger.fp.print(message); //if the trace log file size grows beyond 1GiB, close the file handle so a new log file will be started. //this is done because few text editors can open logs beyond a certain file size. if(traceLogger.fp.size() >= 1_GiB) { traceLogger.fp.close(); } } } auto Program::video(ares::Node::Video::Screen node, const u32* data, u32 pitch, u32 width, u32 height) -> void { if(!screens) return; if(requestScreenshot) { requestScreenshot = false; captureScreenshot(data, pitch, width, height); } if(node->width() != emulator->latch.width || node->height() != emulator->latch.height || node->rotation() != emulator->latch.rotation) { emulator->latch.width = node->width(); emulator->latch.height = node->height(); emulator->latch.rotation = node->rotation(); emulator->latch.changed = true; //signal Program::main() to potentially resize the presentation window } u32 videoWidth = node->width() * node->scaleX(); u32 videoHeight = node->height() * node->scaleY(); if(settings.video.aspectCorrection) videoWidth = videoWidth * node->aspectX() / node->aspectY(); if(node->rotation() == 90 || node->rotation() == 270) swap(videoWidth, videoHeight); ruby::video.lock(); auto [viewportWidth, viewportHeight] = ruby::video.size(); u32 multiplierX = viewportWidth / videoWidth; u32 multiplierY = viewportHeight / videoHeight; u32 multiplier = min(multiplierX, multiplierY); u32 outputWidth = videoWidth * multiplier; u32 outputHeight = videoHeight * multiplier; if(multiplier == 0 || settings.video.output == "Scale") { f32 multiplierX = (f32)viewportWidth / (f32)videoWidth; f32 multiplierY = (f32)viewportHeight / (f32)videoHeight; f32 multiplier = min(multiplierX, multiplierY); outputWidth = videoWidth * multiplier; outputHeight = videoHeight * multiplier; } if(settings.video.output == "Stretch") { outputWidth = viewportWidth; outputHeight = viewportHeight; } pitch >>= 2; if(auto [output, length] = ruby::video.acquire(width, height); output) { length >>= 2; for(auto y : range(height)) { memory::copy(output + y * length, data + y * pitch, width); } ruby::video.release(); ruby::video.output(outputWidth, outputHeight); } ruby::video.unlock(); static u64 frameCounter = 0, previous, current; frameCounter++; current = chrono::timestamp(); if(current != previous) { previous = current; message.framesPerSecond = frameCounter; frameCounter = 0; } } auto Program::audio(ares::Node::Audio::Stream node) -> void { if(!streams) return; //process all pending frames (there may be more than one waiting) while(true) { //only process a frame if all streams have at least one pending frame for(auto& stream : streams) { if(!stream->pending()) return; } //mix all frames together f64 samples[2] = {0.0, 0.0}; for(auto& stream : streams) { f64 buffer[2]; u32 channels = stream->read(buffer); if(channels == 1) { //monaural -> stereo mixing samples[0] += buffer[0]; samples[1] += buffer[0]; } else { samples[0] += buffer[0]; samples[1] += buffer[1]; } } //apply volume, balance, and clamping to the output frame f64 volume = !settings.audio.mute ? settings.audio.volume : 0.0; f64 balance = settings.audio.balance; for(u32 c : range(2)) { samples[c] = max(-1.0, min(+1.0, samples[c] * volume)); if(balance < 0.0) samples[1] *= 1.0 + balance; if(balance > 0.0) samples[0] *= 1.0 - balance; } //send frame to the audio output device ruby::audio.output(samples); } } auto Program::input(ares::Node::Input::Input node) -> void { if(!driverSettings.inputDefocusAllow.checked()) { if(!ruby::video.fullScreen() && !presentation.focused()) { //treat the input as not being active if(auto button = node->cast()) button->setValue(0); if(auto axis = node->cast()) axis->setValue(0); if(auto trigger = node->cast()) trigger->setValue(0); return; } } emulator->input(node); } ares-126/desktop-ui/program/program.cpp000066400000000000000000000044021415063341600202270ustar00rootroot00000000000000#include "../desktop-ui.hpp" #include "platform.cpp" #include "load.cpp" #include "states.cpp" #include "rewind.cpp" #include "status.cpp" #include "utility.cpp" #include "drivers.cpp" Program program; auto Program::create() -> void { ares::platform = this; videoDriverUpdate(); audioDriverUpdate(); inputDriverUpdate(); driverSettings.videoRefresh(); driverSettings.audioRefresh(); driverSettings.inputRefresh(); if(startGameLoad) { if(auto emulator = identify(startGameLoad)) { if(load(emulator, startGameLoad)) { if(startFullScreen) videoFullScreenToggle(); } } } } auto Program::main() -> void { if(Application::modal()) { ruby::audio.clear(); return; } updateMessage(); inputManager.poll(); inputManager.pollHotkeys(); bool defocused = driverSettings.inputDefocusPause.checked() && !ruby::video.fullScreen() && !presentation.focused(); if(emulator && defocused) message.text = "Paused"; if(!emulator || paused || defocused) { ruby::audio.clear(); usleep(20 * 1000); return; } rewindRun(); if(!runAhead || fastForwarding || rewinding) { emulator->root->run(); } else { ares::setRunAhead(true); emulator->root->run(); auto state = emulator->root->serialize(false); ares::setRunAhead(false); emulator->root->run(); state.setReading(); emulator->root->unserialize(state); } if(settings.general.autoSaveMemory) { static u64 previousTime = chrono::timestamp(); u64 currentTime = chrono::timestamp(); if(currentTime - previousTime >= 30) { previousTime = currentTime; emulator->save(); } } //if Platform::video() changed the screen resolution, resize the presentation window here. //window operations must be performed from the main thread. if(emulator->latch.changed) { emulator->latch.changed = false; if(settings.video.adaptiveSizing) presentation.resizeWindow(); } memoryEditor.liveRefresh(); graphicsViewer.liveRefresh(); propertiesViewer.liveRefresh(); } auto Program::quit() -> void { unload(); presentation.setVisible(false); //makes quitting the emulator feel more responsive Application::processEvents(); Application::quit(); ruby::video.reset(); ruby::audio.reset(); ruby::input.reset(); } ares-126/desktop-ui/program/program.hpp000066400000000000000000000045451415063341600202440ustar00rootroot00000000000000struct Program : ares::Platform { auto create() -> void; auto main() -> void; auto quit() -> void; //platform.cpp auto attach(ares::Node::Object) -> void override; auto detach(ares::Node::Object) -> void override; auto pak(ares::Node::Object) -> shared_pointer override; auto event(ares::Event) -> void override; auto log(string_view message) -> void override; auto video(ares::Node::Video::Screen, const u32* data, u32 pitch, u32 width, u32 height) -> void override; auto audio(ares::Node::Audio::Stream) -> void override; auto input(ares::Node::Input::Input) -> void override; //load.cpp auto identify(const string& filename) -> shared_pointer; auto load(shared_pointer emulator, string location = {}) -> bool; auto unload() -> void; //states.cpp auto stateSave(u32 slot) -> bool; auto stateLoad(u32 slot) -> bool; //status.cpp auto updateMessage() -> void; auto showMessage(const string&) -> void; //utility.cpp auto pause(bool) -> void; auto paletteUpdate() -> void; auto runAheadUpdate() -> void; auto captureScreenshot(const u32* data, u32 pitch, u32 width, u32 height) -> void; auto openFile(BrowserDialog&) -> string; auto selectFolder(BrowserDialog&) -> string; //drivers.cpp auto videoDriverUpdate() -> void; auto videoMonitorUpdate() -> void; auto videoFormatUpdate() -> void; auto videoFullScreenToggle() -> void; auto audioDriverUpdate() -> void; auto audioDeviceUpdate() -> void; auto audioFrequencyUpdate() -> void; auto audioLatencyUpdate() -> void; auto inputDriverUpdate() -> void; bool startFullScreen = false; string startGameLoad; vector screens; vector streams; bool paused = false; bool fastForwarding = false; bool rewinding = false; bool runAhead = false; bool requestScreenshot = false; struct State { u32 slot = 1; } state; //rewind.cpp struct Rewind { enum class Mode : u32 { Playing, Rewinding } mode = Mode::Playing; vector history; u32 length = 0; u32 frequency = 0; u32 counter = 0; } rewind; auto rewindSetMode(Rewind::Mode) -> void; auto rewindReset() -> void; auto rewindRun() -> void; struct Message { u64 timestamp = 0; string text; maybe framesPerSecond; } message; }; extern Program program; ares-126/desktop-ui/program/rewind.cpp000066400000000000000000000021601415063341600200470ustar00rootroot00000000000000auto Program::rewindSetMode(Rewind::Mode mode) -> void { rewind.mode = mode; rewind.counter = 0; } auto Program::rewindReset() -> void { rewindSetMode(Rewind::Mode::Playing); rewind.history.reset(); rewind.length = settings.rewind.length; rewind.frequency = settings.rewind.frequency; } auto Program::rewindRun() -> void { if(!settings.general.rewind) return; //rewind disabled? if(rewind.mode == Rewind::Mode::Playing) { if(++rewind.counter < rewind.frequency) return; rewind.counter = 0; if(rewind.history.size() >= rewind.length) rewind.history.takeFirst(); auto s = emulator->root->serialize(0); rewind.history.append(s); } if(rewind.mode == Rewind::Mode::Rewinding) { if(!rewind.history.size()) return rewindSetMode(Rewind::Mode::Playing); //nothing left to rewind? if(++rewind.counter < rewind.frequency / 5) return; //rewind 5x faster than playing rewind.counter = 0; auto s = rewind.history.takeLast(); s.setReading(); emulator->root->unserialize(s); if(!rewind.history) { showMessage("Rewind history exhausted"); rewindReset(); } } } ares-126/desktop-ui/program/states.cpp000066400000000000000000000016301415063341600200630ustar00rootroot00000000000000auto Program::stateSave(u32 slot) -> bool { if(!emulator) return false; auto location = emulator->locate(emulator->game->location, {".bs", slot}, settings.paths.saves); if(auto state = emulator->root->serialize()) { if(file::write(location, {state.data(), state.size()})) { showMessage({"Saved state to slot ", slot}); return true; } } showMessage({"Failed to save state to slot ", slot}); return false; } auto Program::stateLoad(u32 slot) -> bool { if(!emulator) return false; auto location = emulator->locate(emulator->game->location, {".bs", slot}, settings.paths.saves); if(auto memory = file::read(location)) { serializer state{memory.data(), (u32)memory.size()}; if(emulator->root->unserialize(state)) { showMessage({"Loaded state from slot ", slot}); return true; } } showMessage({"Failed to load state from slot ", slot}); return false; } ares-126/desktop-ui/program/status.cpp000066400000000000000000000007761415063341600201150ustar00rootroot00000000000000auto Program::updateMessage() -> void { if(chrono::millisecond() - message.timestamp >= 2000) { presentation.statusLeft.setText(); } if(message.framesPerSecond) { presentation.statusRight.setText({message.framesPerSecond(), " FPS"}); message.framesPerSecond.reset(); } if(!emulator) { presentation.statusRight.setText("Unloaded"); } } auto Program::showMessage(const string& text) -> void { message.timestamp = chrono::millisecond(); presentation.statusLeft.setText(text); } ares-126/desktop-ui/program/utility.cpp000066400000000000000000000042011415063341600202600ustar00rootroot00000000000000auto Program::pause(bool state) -> void { if(paused == state) return; paused = state; presentation.pauseEmulation.setChecked(paused); if(paused) { ruby::audio.clear(); presentation.statusRight.setText("Paused"); } } auto Program::paletteUpdate() -> void { if(!emulator) return; for(auto& screen : emulator->root->find()) { screen->setLuminance(settings.video.luminance); screen->setSaturation(settings.video.saturation); screen->setGamma(settings.video.gamma); } } auto Program::runAheadUpdate() -> void { runAhead = settings.general.runAhead; if(!emulator) return; if(emulator->name == "Game Boy Advance") runAhead = false; //crashes immediately if(emulator->name == "Nintendo 64") runAhead = false; //too demanding if(emulator->name == "PlayStation") runAhead = false; //too demanding } auto Program::captureScreenshot(const u32* data, u32 pitch, u32 width, u32 height) -> void { string filename{emulator->locate({Location::notsuffix(emulator->game->location), " ", chrono::local::datetime().transform(":", "-"), ".png"}, ".png", settings.paths.screenshots)}; if(Encode::PNG::RGB8(filename, data, pitch, width, height)) { showMessage("Captured screenshot"); } else { showMessage("Failed to capture screenshot"); } } auto Program::openFile(BrowserDialog& dialog) -> string { if(settings.general.nativeFileDialogs) { BrowserWindow window; window.setTitle(dialog.title()); window.setPath(dialog.path()); window.setFilters(dialog.filters()); window.setParent(dialog.alignmentWindow()); // Only affects macOS. TODO: are there scenarios where we want to forbid selecting folders? window.setAllowsFolders(true); return window.open(); } if(dialog.filters().size() > 1) return dialog.openObject(); return dialog.openFile(); } auto Program::selectFolder(BrowserDialog& dialog) -> string { if(settings.general.nativeFileDialogs) { BrowserWindow window; window.setTitle(dialog.title()); window.setPath(dialog.path()); window.setParent(dialog.alignmentWindow()); return window.directory(); } return dialog.selectFolder(); } ares-126/desktop-ui/resource/000077500000000000000000000000001415063341600162345ustar00rootroot00000000000000ares-126/desktop-ui/resource/GNUmakefile000066400000000000000000000001401415063341600203010ustar00rootroot00000000000000all: sourcery resource.bml resource.cpp resource.hpp clean: rm resource.cpp rm resource.hpp ares-126/desktop-ui/resource/ares.Manifest000066400000000000000000000015241415063341600206600ustar00rootroot00000000000000 true/pm PerMonitorV2, PerMonitor ares-126/desktop-ui/resource/ares.desktop000066400000000000000000000001711415063341600205600ustar00rootroot00000000000000[Desktop Entry] Name=ares Comment=Emulator Exec=ares Icon=ares Terminal=false Type=Application Categories=Game;Emulator; ares-126/desktop-ui/resource/ares.ico000066400000000000000000000626711415063341600176760ustar00rootroot00000000000000 hF  00 %V *:(  IN.ks+.ks+IN.25|9ISWWSI5|9.1!MS*-BuW_`aa`_WBu+-!MS.1Bu[a__````aZBu.1A6~:VYOƽIJOƽY```aW5}:@GN6C#& #& 6~CO_``_IIN70px#=<(]d O```SFK +.)%(I7DY`aW.ks*59  Pǽ`aW.ks+J_`SFKJ__I59  PǽaW5}:@I8DY[Bu.1 B-ho"NVBu+.!MS:$&(7G6~9.2  JO(++.?( @ #%)582582#%)%('(^dm9EKOOKD9(^dm&)''*&0owHW_aaaaaa_WH/ow')& "OU[DZaa````````aaZD"OU[ *cj|O````````````````O*cj| *cj|Ra````````````````aR*cj| w"PV[Oa```aaaa```````````aO"PU[t47#%'D``a_YSPPSY_a``````````D"%'470pxZa\L9)`frCHJ48:48:CHJ)`gr9L\a````````Z0px,/"$(HaQ3w.17.163wQ````````aH"$(,/L)_fmWI LQ]   LQ]H_``````aW(^emK:G=BH=AHH```````_9 0px$U[`!MS]Qa`````aE  *$&  3x\`````aK#%)"$>C038La````aO582489_````aO59248X*ahrY````aK#%)"%#SXDIKSa```aE 7;48:Pa```_97;48:Pa``aW(^emL#RXDIKSa``aH"$(,/W)ahrY```Z0px9_```D#%'48>B/37La`aO"PV[u3x\`aR*cj| !MS]Qa`O*cj| =AHIaZD"OU[ #RX_GWH0ow'*&"$0px9)_fn&)(* ?~?(0` $+: ? ?:+ C=B)`g5}>DGGD>5})`g=A C"47v/mtDT\`aaaaaa`\TD/mu48v" 36u5{O^aa``````````aa^P4z26u  @*cjM_a````````````````a_M*cj @+.i:[a````````````````````a[:,/i 8<D_````````````````````````_D8< 8<Ga``````````````````````````aG8<,/iDa````````````````````````````aD,/i/2A:_``````````````````````````````_: A.2+cj[`````aa`^]]^`aa`````````````````[*cj47vMa``aaZM?4x,go)_f)_f,ho4y?MZaa``````````````aM37u #5{_```T;#RX$&a2  1$&a#QW;T```````````````_5{" M59vPaaY;<@//=A;Ya````````````aP59vL/nv^aO&X_ : :&X^Oa````````````^/nu  DEbH;?;?H````````````aDC T?CUH25}  25}Ha``````````aT>BR+dlK+4y>BTa````````aD:  0;a````````aG > #RXZ````````aG > @E%'aMa```````aD:1?a```````a>+4y`````````6} ,ho^```````\)ah)_f]``````aT>BS)_f]``````aDD  ,go^``````^/nv4x``````aP59vM1?a`````_5{" ?D%'aMa````aM47u#RXZ`````[+cj 0;a````_; A/2>BTa```aD,/i  :;````aG8<&Y_Y```_D8<  <@Oa`a[:,/i 25|Gaa_M+cj A;@Hb^P5{37v :&Y`KUE/nv58w# x+.-iq+dk>B D 4 -????PNG  IHDR\rf*IDATxyxT$ɾ%-dMPj*֪UVk?[kRUq /a' aIBd#{2qfIf3B/Mk8fD[BB =s3hFց*܂X`*050GI8L[nP;tiy}?Frpvg @='8᫤ ZNs1PvhxR`30lЙSҊL1޸xXh7MHlOaXP]dTҀ%W|LGwեM9歡c0 `z VQ[k2f{]ZatFmm?5m+}t/Y :֥խnL4oV <,w]YŠvG~M%VC[϶?:h6ެcµ)DY33Xry |`p\)ĐsldEE>_vYGmYS3Z@"-wƚq2OosKg$i]b;2N UZH @BOW5fwFXaLƲU'yV7.ϳK@4`/i ֟8wvBhhPV9_9+8z=\$@}Mʤ$G|$gO݅Dtێ0{ݘm۵ OЪ2a̸!5 z %Z p7jam?\eZwǙX= q& BNǹ#;g5ņĺZ;sɷ/ *X -JԼ7 ֯wz@[}!79@js?\Dxfet!7 @e?LJ' I8*upNy-3:i]!(<]n,Ѻ^#Z(?5aкBv f f"{P[iUJal|X&^ucڱ\*@ |W:`?-Ƞ/q3Nv9O<' 7UQֱCmH5u|" wmWߧue._ cZ9T Дf^*Ѻ2c2]H5$@7256Z}v!sK$d&Hb!bMzM~+s%>9yT"Pt*Lۆ6 FmEu,}m)dqJF qBUzHd@M9=TUyO `ЁjU:H@Z[]lq5fP ٳ ؊Jx5dPZ~DEHs|je$ƛxÞM޼h6[RԜպ2W'wu'1ޑVi5g"Qv:w3[zz! dyfi+Wh]uϝNrLz Jv# "T|[¯dzxD PXTs8kv{D 0-eu>JB~tg?0ה nZW)AXVӺ2M:o{zD -׺2M7xZD A $huŸw͐ Q*3)~0+e4,@|(W ¤)u$@U P`G[LHպ2##,s˶kzN -к"оc#*KPI& лGB֕ `Ԛy&KئZJK اZ'\ۮ֕VIaBk\)K4BcI xW E:$;Z.rHĀʙG.1ZWƓN\)G$hiӴG82Iƞ3:N]'I @M :&XG  VwK֦PxS E "P|ϝ]ݶq`cӞ"Ϛq{h]Os .D HĖ+Vz]?2\+6^ -ؚ>3`iaAW0vD7F[V_!PKL({|_x /z'H @P`@İ]R#],o_rgsXՠue{oJ< ϻkV+M 48wHPٳQrh1=֯EoJ]Gc~QD1[ RvGDk]!o++w>47W 7_/h1QZğڿ;l}\"Z~M>u[Pb:Ǘj8چɾsn(Ssݿ?uRRg]) 6!޴v<56+' iZ]1+2 F 6tmGN ]utc#M'NTs_j@' ] yUcj8P[7umk;s,=bY?a!ZWHKEs'*u1>5$a0o[ʒ9vCWrK D^%C%u;۩>"'ƶ0oRW+'+s[`v`ppq2Ѣuhձ/8hX㮔jNdGU.MD71d2j])_`׀|ƅG `Č v8M`!Mؾk{]).ޛ0b8b;| [6!0IɐoS`QG '@%*d]$+jB01.nd(Zx}Tnɇ-2FvoY\4Oj;l|<,}ӵ/w{'ZoKͿ<3dt؍e9fs4J }X=jyun/>d2m7!Ɩ'44({Sh]!_eۉ .qL;OQt _ rT2# 0 x t[2Ԓ_Nmm#{;lt,;wMwI1i1`>':P7ʘ.k])_c>ٺeh|6$xKl+DX3OJrήe+`[y{>)u3 D˒;4G9\J27esZ i0_9Kۯ=_:a`^D ,< iݛ/u|Y]}#3o\)˙;W  -_tÈ]Ã}%? bP7knXp<3r~];4ZNҹC/3 X dq)[~1u^cZ=ՈO/| `UAgظbF-So6n mքtHڒzfߖWs9ͨ{-y?X©!z7t-"C+;f3ZW䟪`vp;vwX *i+O\?2t˦1}t*ҍvs EM\i  JK^Zβv`\XN'19m j(ӆlT.4Ú'>|#QlVԲ_6o+nNoBsA | RL4*OPo?UENǨ\ R<X,V>[ּte?v!TGF|_"jSg܁G$XBw5SOl~ҩݲrFtv:[ْw CuǁZ՗ƊIֺb%{(77sylq.kc{fgO5 l@m?졺3)y{;Y|kc뿏=q O v Sam-j%am51BSPSSAzۺj0Y ;75<`xPm c͞}%9oYj1T6 QxGB G|4QxlЏ):SjO\Ǔ1oa<ػG\ݳ_7Zyc[X"j 먛گwݳKW`<`!P ·..s0Lww^ϐJ'lF#PP;{V6e4ǩ\,u<j^K>)9C I,3$;遹!T޾` `mlʛ^d}_c,_tÑh=Gzw`+0ÿ_Kpj@lq7YaaAZW0мX,VP~^䵼R`Rhh6L|xxoaNÿls:n /d,N1 ]wy=-=? 90ݓF3k6[42lP+]5q?+6:\\ qtoft<ÖO4jXr{Kpq@xYnSRZW: {}rՊs3"oΪ$e:O1h]@W[H8}TkeU5fڴ_/O yZǴȨ>\yXT:`**IE>pڅK^M8nUl-KNJ.BM77݃g5ڴcڛ pVQY__v:}{ &pƫ$f\csP>G~Dpϋjj?!ԼOnf_n.& 'ww3-?f˅#!|k Qm%|Q"0˅-?KVa;{Y$E6>~YG޸7q8{DxyrW?KVHolT?l* 6g>!_AW0ubjӿѶnRU@QLq-~TZWOso69_{z%g_yzSfQbPEjnFCu@ C%TʨtNWҷW_?'z|{xvoFuEz4ޑlFZ%z WfX-+e5P-ml .:5>PyrB(j]|@OXC֦;ƍCqgk?**@ K0?ݕqUzE/>d电]?+DCb{p(󛢄޽m@2jL{Q 1svɟ6);n޺UX֯yo')yVM$^ϦЧl XtU'|u^Mց¢gzMpdS=U0})Lbp{0fi3]@'|߁҆#KbIMz/0VK1GXcQ{&FFG?e -cեs-{N3hU{1̘aUedfC o.d'GK@ iψNiQl\>ISScf8vTpR:VXZVGeUh2&GkҺNu:XnLe 3:ɬ{_=k3.W)xOiB4ǙZO̞ 5ף~z=yW! >~JD7?3g{Qc= 6ȀZIf{w?h]'gAuR|z0~s!3\l8ZɄ MJe풩i-1SEiءu.K~ jAB\t8ۋZ߿Z&\+S{WX1_i|/Pwe̠B_vlgsIzrDxntuO<>|\YbS?Ƞ~2<(|ǖmE̸cuDuc}>~69~͑\M-Xr_J7?O,~P3'+h iJKjAm:c2~ן\lE[Qo~Co0"ZSLm9'oDOԺ^MoJ*0c4$9[R_s+GZ׫1jb%JJX&* ;S\;VRǵWsk5< +:SU'2!i ):S9+l/׮sS=ЧeNru)DGIva~OVrí9hH\mL6&LyUS?o~`jHstEe>?ʠ~I$Gh]/:;VPtƑ#iY5h<}KdȴaOr}9vﵢֺ^H`pl>[z CwS]!㵷gLJaFzIzSPӁ [ )<]͸Q AhG~_ɲ/)XsqE {7lغ+ Ѻn- 0 )!_01(.aB~8o gK|67 HpV0PUmfD1o@X*{m~_l\yRK^Ǝl˫AVl%;S\˃oyS<- -)G=I% ù~E-[ybsp3Ar]R^Uf}~:FmCP?GUScOo7ml?.0ڵZZ -.A,@ZHPƎlumZ~y9T=릅@u6m@9t'- IIi~6w:Nu.V8/E9mNZOjEe֏&sclx muRKo8kJ4~b@D ~iϾb~L&3ObI߀$^ǝu7#1ޤuU(:S^rX  /i]KV+=ylX=Q^6_TYKײ}<:EV`u5.sLk]>;fWh]G_%L@%m?:)GbBEFХn] @Sg> q&s3gP\RyU;[T~?O-NZ!,n?b40sJEzh~; >\yM|x'^_$PC1Ԩ2t&O!XlaʓQ68?r78&%r4~p{:dRQ=No|u=ꎚd2Ԥv`Tڶ ׺>)T~yKccϮշy6<#5txj^cP$nƔ۷`WPŒN闹lqފ_یK+y'/fXƏNfd l1879UkY&.c٨{s ]P3<z$؋ZMkpPy[(*Y)\ @{Y"~ YjElp~m#j݊zB!B!B!B!B!B!B!-q/IENDB`ares-126/desktop-ui/resource/ares.plist000066400000000000000000000015121415063341600202420ustar00rootroot00000000000000 CFBundleIdentifier dev.ares.ares CFBundleDisplayName ares CFBundleExecutable ares CFBundleIconFile ares.icns NSHighResolutionCapable NSSupportsAutomaticGraphicsSwitching CFBundleDocumentTypes CFBundleTypeExtensions * CFBundleTypeName DocumentType CFBundleTypeRole Viewer ares-126/desktop-ui/resource/ares.png000066400000000000000000000256231415063341600177040ustar00rootroot00000000000000PNG  IHDR\rfgAMA a cHRMz&u0`:pQ<bKGDC pHYs``kBtIME Ow~*IDATxyxT$ɾ%-dMPj*֪UVk?[kRUq /a' aIBd#{2qfIf3B/Mk8fD[BB =s3hFց*܂X`*050GI8L[nP;tiy}?Frpvg @='8᫤ ZNs1PvhxR`30lЙSҊL1޸xXh7MHlOaXP]dTҀ%W|LGwեM9歡c0 `z VQ[k2f{]ZatFmm?5m+}t/Y :֥խnL4oV <,w]YŠvG~M%VC[϶?:h6ެcµ)DY33Xry |`p\)ĐsldEE>_vYGmYS3Z@"-wƚq2OosKg$i]b;2N UZH @BOW5fwFXaLƲU'yV7.ϳK@4`/i ֟8wvBhhPV9_9+8z=\$@}Mʤ$G|$gO݅Dtێ0{ݘm۵ OЪ2a̸!5 z %Z p7jam?\eZwǙX= q& BNǹ#;g5ņĺZ;sɷ/ *X -JԼ7 ֯wz@[}!79@js?\Dxfet!7 @e?LJ' I8*upNy-3:i]!(<]n,Ѻ^#Z(?5aкBv f f"{P[iUJal|X&^ucڱ\*@ |W:`?-Ƞ/q3Nv9O<' 7UQֱCmH5u|" wmWߧue._ cZ9T Дf^*Ѻ2c2]H5$@7256Z}v!sK$d&Hb!bMzM~+s%>9yT"Pt*Lۆ6 FmEu,}m)dqJF qBUzHd@M9=TUyO `ЁjU:H@Z[]lq5fP ٳ ؊Jx5dPZ~DEHs|je$ƛxÞM޼h6[RԜպ2W'wu'1ޑVi5g"Qv:w3[zz! dyfi+Wh]uϝNrLz Jv# "T|[¯dzxD PXTs8kv{D 0-eu>JB~tg?0ה nZW)AXVӺ2M:o{zD -׺2M7xZD A $huŸw͐ Q*3)~0+e4,@|(W ¤)u$@U P`G[LHպ2##,s˶kzN -к"оc#*KPI& лGB֕ `Ԛy&KئZJK اZ'\ۮ֕VIaBk\)K4BcI xW E:$;Z.rHĀʙG.1ZWƓN\)G$hiӴG82Iƞ3:N]'I @M :&XG  VwK֦PxS E "P|ϝ]ݶq`cӞ"Ϛq{h]Os .D HĖ+Vz]?2\+6^ -ؚ>3`iaAW0vD7F[V_!PKL({|_x /z'H @P`@İ]R#],o_rgsXՠue{oJ< ϻkV+M 48wHPٳQrh1=֯EoJ]Gc~QD1[ RvGDk]!o++w>47W 7_/h1QZğڿ;l}\"Z~M>u[Pb:Ǘj8چɾsn(Ssݿ?uRRg]) 6!޴v<56+' iZ]1+2 F 6tmGN ]utc#M'NTs_j@' ] yUcj8P[7umk;s,=bY?a!ZWHKEs'*u1>5$a0o[ʒ9vCWrK D^%C%u;۩>"'ƶ0oRW+'+s[`v`ppq2Ѣuhձ/8hX㮔jNdGU.MD71d2j])_`׀|ƅG `Č v8M`!Mؾk{]).ޛ0b8b;| [6!0IɐoS`QG '@%*d]$+jB01.nd(Zx}Tnɇ-2FvoY\4Oj;l|<,}ӵ/w{'ZoKͿ<3dt؍e9fs4J }X=jyun/>d2m7!Ɩ'44({Sh]!_eۉ .qL;OQt _ rT2# 0 x t[2Ԓ_Nmm#{;lt,;wMwI1i1`>':P7ʘ.k])_c>ٺeh|6$xKl+DX3OJrήe+`[y{>)u3 D˒;4G9\J27esZ i0_9Kۯ=_:a`^D ,< iݛ/u|Y]}#3o\)˙;W  -_tÈ]Ã}%? bP7knXp<3r~];4ZNҹC/3 X dq)[~1u^cZ=ՈO/| `UAgظbF-So6n mքtHڒzfߖWs9ͨ{-y?X©!z7t-"C+;f3ZW䟪`vp;vwX *i+O\?2t˦1}t*ҍvs EM\i  JK^Zβv`\XN'19m j(ӆlT.4Ú'>|#QlVԲ_6o+nNoBsA | RL4*OPo?UENǨ\ R<X,V>[ּte?v!TGF|_"jSg܁G$XBw5SOl~ҩݲrFtv:[ْw CuǁZ՗ƊIֺb%{(77sylq.kc{fgO5 l@m?졺3)y{;Y|kc뿏=q O v Sam-j%am51BSPSSAzۺj0Y ;75<`xPm c͞}%9oYj1T6 QxGB G|4QxlЏ):SjO\Ǔ1oa<ػG\ݳ_7Zyc[X"j 먛گwݳKW`<`!P ·..s0Lww^ϐJ'lF#PP;{V6e4ǩ\,u<j^K>)9C I,3$;遹!T޾` `mlʛ^d}_c,_tÑh=Gzw`+0ÿ_Kpj@lq7YaaAZW0мX,VP~^䵼R`Rhh6L|xxoaNÿls:n /d,N1 ]wy=-=? 90ݓF3k6[42lP+]5q?+6:\\ qtoft<ÖO4jXr{Kpq@xYnSRZW: {}rՊs3"oΪ$e:O1h]@W[H8}TkeU5fڴ_/O yZǴȨ>\yXT:`**IE>pڅK^M8nUl-KNJ.BM77݃g5ڴcڛ pVQY__v:}{ &pƫ$f\csP>G~Dpϋjj?!ԼOnf_n.& 'ww3-?f˅#!|k Qm%|Q"0˅-?KVa;{Y$E6>~YG޸7q8{DxyrW?KVHolT?l* 6g>!_AW0ubjӿѶnRU@QLq-~TZWOso69_{z%g_yzSfQbPEjnFCu@ C%TʨtNWҷW_?'z|{xvoFuEz4ޑlFZ%z WfX-+e5P-ml .:5>PyrB(j]|@OXC֦;ƍCqgk?**@ K0?ݕqUzE/>d电]?+DCb{p(󛢄޽m@2jL{Q 1svɟ6);n޺UX֯yo')yVM$^ϦЧl XtU'|u^Mց¢gzMpdS=U0})Lbp{0fi3]@'|߁҆#KbIMz/0VK1GXcQ{&FFG?e -cեs-{N3hU{1̘aUedfC o.d'GK@ iψNiQl\>ISScf8vTpR:VXZVGeUh2&GkҺNu:XnLe 3:ɬ{_=k3.W)xOiB4ǙZO̞ 5ף~z=yW! >~JD7?3g{Qc= 6ȀZIf{w?h]'gAuR|z0~s!3\l8ZɄ MJe풩i-1SEiءu.K~ jAB\t8ۋZ߿Z&\+S{WX1_i|/Pwe̠B_vlgsIzrDxntuO<>|\YbS?Ƞ~2<(|ǖmE̸cuDuc}>~69~͑\M-Xr_J7?O,~P3'+h iJKjAm:c2~ן\lE[Qo~Co0"ZSLm9'oDOԺ^MoJ*0c4$9[R_s+GZ׫1jb%JJX&* ;S\;VRǵWsk5< +:SU'2!i ):S9+l/׮sS=ЧeNru)DGIva~OVrí9hH\mL6&LyUS?o~`jHstEe>?ʠ~I$Gh]/:;VPtƑ#iY5h<}KdȴaOr}9vﵢֺ^H`pl>[z CwS]!㵷gLJaFzIzSPӁ [ )<]͸Q AhG~_ɲ/)XsqE {7lغ+ Ѻn- 0 )!_01(.aB~8o gK|67 HpV0PUmfD1o@X*{m~_l\yRK^Ǝl˫AVl%;S\˃oyS<- -)G=I% ù~E-[ybsp3Ar]R^Uf}~:FmCP?GUScOo7ml?.0ڵZZ -.A,@ZHPƎlumZ~y9T=릅@u6m@9t'- IIi~6w:Nu.V8/E9mNZOjEe֏&sclx muRKo8kJ4~b@D ~iϾb~L&3ObI߀$^ǝu7#1ޤuU(:S^rX  /i]KV+=ylX=Q^6_TYKײ}<:EV`u5.sLk]>;fWh]G_%L@%m?:)GbBEFХn] @Sg> q&s3gP\RyU;[T~?O-NZ!,n?b40sJEzh~; >\yM|x'^_$PC1Ԩ2t&O!XlaʓQ68?r78&%r4~p{:dRQ=No|u=ꎚd2Ԥv`Tڶ ׺>)T~yKccϮշy6<#5txj^cP$nƔ۷`WPŒN闹lqފ_یK+y'/fXƏNfd l1879UkY&.c٨{s ]P3<z$؋ZMkpPy[(*Y)\ @{Y"~ YjElp~m#j݊zB!B!B!B!B!B!B!-q/%tEXtdate:create2020-03-25T03:00:21+09:00%?%tEXtdate:modify2020-03-25T03:00:21+09:00Tb:IENDB`ares-126/desktop-ui/resource/ares.rc000066400000000000000000000000631415063341600175130ustar00rootroot000000000000001 24 "ares.Manifest" 2 ICON DISCARDABLE "ares.ico" ares-126/desktop-ui/resource/font.png000066400000000000000000000055351415063341600177200ustar00rootroot00000000000000PNG  IHDRpo pHYs+ IDATx]r* CVQadڦ^K0G)Y xR>,pycΧ@@  @@@ i568@ g @@@  56j8<[pt'vqFq*d o-;rk5RYl]2oSyo")oˬx|rVûyn.7-e*|~/qt+e]BӳH~i!{CKUI©4!oG=3OnH+j4[dNՖev4+ZZ8M~ݖ@[c#q;oRVg=v߃HӃgh9g$̞\ Zj+os|a>pz=|͉\[@r77ădGg{^ ~k޳:^aH;l^z>yd?D^{Yr/E_G_$;:Y#˪Iv,4>h2YϞ.Vrwl*V D*C y[c*Er孰neFX:,I >-xQ{z]`yp\qEE^xSOY{YƮmq䕲[XJQ˯RW[IK|鞲Y<%g+g0bg=lZZmqz -Ѯ.՜*Cv1z p png3+]NR-SQc{)Sg=vjI+qwKQG|Y3R}GZ;*Wo(ym5ZĎv7:wN]6X Xϗfejq=FZ*ol2T"3G{kMJMH3Tϼ赧<Z@4pZ;], J=* FLK2mDFVi5#S[VYHFsOWϊ^ N=T ~36HegmFjgg4T]8N8r聂uolR.ZijٟUvVڕRg?z,kgn^PvDg\Uʍl^ zG6"9?3盇3{$o^ķLkP ^{?{2Ak!hdmq,տ3|[{jDi|xI1849\;K>h}gV)k+"CùVWO\-t*4֦7n'k(v"tkV$+ &p}lPǑR: 5g@R–=nGE{|gLgF#DD2M(@ͻ'eЛd-7ɦwrz>_7O=?՟xpSţiUY R+8lvXVw56568S8g -pXY ~rUg+.;N14 -L;G-nNog8÷Qk-㡛XW%Up -smВ&igG:j(enA4uDogТ G-u1I#Y8v҂sJU^-'mKތi }%UvxVY&zi void { setCollapsible(); setVisible(false); effectsLabel.setText("Effects").setFont(Font().setBold()); effectsLayout.setSize({3, 2}).setPadding(12_sx, 0); effectsLayout.column(0).setAlignment(1.0); volumeLabel.setText("Volume:"); volumeValue.setAlignment(0.5); volumeSlider.setLength(201).setPosition(settings.audio.volume * 100.0).onChange([&] { settings.audio.volume = volumeSlider.position() / 100.0; volumeValue.setText({volumeSlider.position(), "%"}); }).doChange(); balanceLabel.setText("Balance:"); balanceValue.setAlignment(0.5); balanceSlider.setLength(101).setPosition((settings.audio.balance * 50.0) + 50.0).onChange([&] { settings.audio.balance = ((s32)balanceSlider.position() - 50.0) / 50.0; balanceValue.setText({balanceSlider.position(), "%"}); }).doChange(); } ares-126/desktop-ui/settings/drivers.cpp000066400000000000000000000170521415063341600204340ustar00rootroot00000000000000auto DriverSettings::construct() -> void { setCollapsible(); setVisible(false); videoLabel.setText("Video").setFont(Font().setBold()); videoDriverLabel.setText("Driver:"); videoDriverAssign.setText("Reload").onActivate([&] { settings.video.driver = videoDriverList.selected().text(); videoDriverUpdate(); }); videoMonitorLabel.setText("Fullscreen monitor:"); videoMonitorList.onChange([&] { settings.video.monitor = videoMonitorList.selected().text(); program.videoMonitorUpdate(); videoRefresh(); }); videoFormatLabel.setText("Format:"); videoFormatList.onChange([&] { settings.video.format = videoFormatList.selected().text(); program.videoFormatUpdate(); videoRefresh(); }); videoExclusiveToggle.setText("Exclusive mode").onToggle([&] { settings.video.exclusive = videoExclusiveToggle.checked(); ruby::video.setExclusive(settings.video.exclusive); }); videoBlockingToggle.setText("Synchronize").onToggle([&] { settings.video.blocking = videoBlockingToggle.checked(); ruby::video.setBlocking(settings.video.blocking); }); videoFlushToggle.setText("GPU sync").onToggle([&] { settings.video.flush = videoFlushToggle.checked(); ruby::video.setFlush(settings.video.flush); }); audioLabel.setText("Audio").setFont(Font().setBold()); audioDriverLabel.setText("Driver:"); audioDriverAssign.setText("Reload").onActivate([&] { settings.audio.driver = audioDriverList.selected().text(); audioDriverUpdate(); }); audioDeviceLabel.setText("Output device:"); audioDeviceList.onChange([&] { settings.audio.device = audioDeviceList.selected().text(); program.audioDeviceUpdate(); audioRefresh(); }); audioFrequencyLabel.setText("Frequency:"); audioFrequencyList.onChange([&] { settings.audio.frequency = audioFrequencyList.selected().text().natural(); program.audioFrequencyUpdate(); audioRefresh(); }); audioLatencyLabel.setText("Latency:"); audioLatencyList.onChange([&] { settings.audio.latency = audioLatencyList.selected().text().natural(); program.audioLatencyUpdate(); audioRefresh(); }); audioExclusiveToggle.setText("Exclusive mode").onToggle([&] { settings.audio.exclusive = audioExclusiveToggle.checked(); ruby::audio.setExclusive(settings.audio.exclusive); }); audioBlockingToggle.setText("Synchronize").onToggle([&] { settings.audio.blocking = audioBlockingToggle.checked(); ruby::audio.setBlocking(settings.audio.blocking); }); audioDynamicToggle.setText("Dynamic rate").onToggle([&] { settings.audio.dynamic = audioDynamicToggle.checked(); ruby::audio.setDynamic(settings.audio.dynamic); }); inputLabel.setText("Input").setFont(Font().setBold()); inputDriverLabel.setText("Driver:"); inputDriverAssign.setText("Reload").onActivate([&] { settings.input.driver = inputDriverList.selected().text(); inputDriverUpdate(); }); inputDefocusLabel.setText("When focus is lost:"); inputDefocusPause.setText("Pause emulation").onActivate([&] { settings.input.defocus = "Pause"; }); inputDefocusBlock.setText("Block input").onActivate([&] { settings.input.defocus = "Block"; }); inputDefocusAllow.setText("Allow input").onActivate([&] { settings.input.defocus = "Allow"; }); if(settings.input.defocus == "Pause") inputDefocusPause.setChecked(); if(settings.input.defocus == "Block") inputDefocusBlock.setChecked(); if(settings.input.defocus == "Allow") inputDefocusAllow.setChecked(); videoDriverLayout.setPadding(12_sx, 0); videoPropertyLayout.setPadding(12_sx, 0); videoToggleLayout.setPadding(12_sx, 0); audioDriverLayout.setPadding(12_sx, 0); audioPropertyLayout.setPadding(12_sx, 0); audioToggleLayout.setPadding(12_sx, 0); inputDriverLayout.setPadding(12_sx, 0); inputDefocusLayout.setPadding(12_sx, 0); } auto DriverSettings::videoRefresh() -> void { videoDriverList.reset(); for(auto& driver : ruby::video.hasDrivers()) { ComboButtonItem item{&videoDriverList}; item.setText(driver); if(driver == ruby::video.driver()) item.setSelected(); } videoMonitorList.reset(); for(auto& monitor : ruby::video.hasMonitors()) { ComboButtonItem item{&videoMonitorList}; item.setText(monitor.name); if(monitor.name == ruby::video.monitor()) item.setSelected(); } videoFormatList.reset(); for(auto& format : ruby::video.hasFormats()) { ComboButtonItem item{&videoFormatList}; item.setText(format); if(format == ruby::video.format()) item.setSelected(); } videoMonitorList.setEnabled(videoMonitorList.itemCount() > 1); videoFormatList.setEnabled(0 && videoFormatList.itemCount() > 1); videoExclusiveToggle.setChecked(ruby::video.exclusive()).setEnabled(ruby::video.hasExclusive()); videoBlockingToggle.setChecked(ruby::video.blocking()).setEnabled(ruby::video.hasBlocking()); videoFlushToggle.setChecked(ruby::video.flush()).setEnabled(ruby::video.hasFlush()); VerticalLayout::resize(); } auto DriverSettings::videoDriverUpdate() -> void { if(emulator && settings.video.driver != "None" && MessageDialog( "Warning: incompatible drivers may cause this software to crash.\n" "Are you sure you want to change this driver while a game is loaded?" ).setAlignment(settingsWindow).question() != "Yes") return; program.videoDriverUpdate(); videoRefresh(); } auto DriverSettings::audioRefresh() -> void { audioDriverList.reset(); for(auto& driver : ruby::audio.hasDrivers()) { ComboButtonItem item{&audioDriverList}; item.setText(driver); if(driver == ruby::audio.driver()) item.setSelected(); } audioDeviceList.reset(); for(auto& device : ruby::audio.hasDevices()) { ComboButtonItem item{&audioDeviceList}; item.setText(device); if(device == ruby::audio.device()) item.setSelected(); } audioFrequencyList.reset(); for(auto& frequency : ruby::audio.hasFrequencies()) { ComboButtonItem item{&audioFrequencyList}; item.setText(frequency); if(frequency == ruby::audio.frequency()) item.setSelected(); } audioLatencyList.reset(); for(auto& latency : ruby::audio.hasLatencies()) { ComboButtonItem item{&audioLatencyList}; item.setText(latency); if(latency == ruby::audio.latency()) item.setSelected(); } audioDeviceList.setEnabled(audioDeviceList.itemCount() > 1); audioExclusiveToggle.setChecked(ruby::audio.exclusive()).setEnabled(ruby::audio.hasExclusive()); audioBlockingToggle.setChecked(ruby::audio.blocking()).setEnabled(ruby::audio.hasBlocking()); audioDynamicToggle.setChecked(ruby::audio.dynamic()).setEnabled(ruby::audio.hasDynamic()); VerticalLayout::resize(); } auto DriverSettings::audioDriverUpdate() -> void { if(emulator && settings.audio.driver != "None" && MessageDialog( "Warning: incompatible drivers may cause this software to crash.\n" "Are you sure you want to change this driver while a game is loaded?" ).setAlignment(settingsWindow).question() != "Yes") return; program.audioDriverUpdate(); audioRefresh(); } auto DriverSettings::inputRefresh() -> void { inputDriverList.reset(); for(auto& driver : ruby::input.hasDrivers()) { ComboButtonItem item{&inputDriverList}; item.setText(driver); if(driver == ruby::input.driver()) item.setSelected(); } VerticalLayout::resize(); } auto DriverSettings::inputDriverUpdate() -> void { if(emulator && settings.input.driver != "None" && MessageDialog( "Warning: incompatible drivers may cause this software to crash.\n" "Are you sure you want to change this driver while a game is loaded?" ).setAlignment(settingsWindow).question() != "Yes") return; program.inputDriverUpdate(); inputRefresh(); } ares-126/desktop-ui/settings/emulators.cpp000066400000000000000000000030751415063341600207710ustar00rootroot00000000000000auto EmulatorSettings::construct() -> void { setCollapsible(); setVisible(false); emulatorLabel.setText("Load Menu Emulators").setFont(Font().setBold()); emulatorList.onToggle([&](auto cell) { eventToggle(cell); }); emulatorList.append(TableViewColumn()); emulatorList.append(TableViewColumn().setText("Name").setExpandable()); emulatorList.append(TableViewColumn().setText("Manufacturer").setAlignment(1.0)); emulatorList.setHeadered(); for(auto& emulator : emulators) { TableViewItem item{&emulatorList}; TableViewCell visible{&item}; visible.setAttribute>("emulator", emulator); visible.setCheckable(); visible.setChecked(emulator->configuration.visible); TableViewCell name{&item}; name.setText(emulator->name); TableViewCell manufacturer{&item}; manufacturer.setText(emulator->manufacturer); } emulatorList.resizeColumns(); emulatorList.column(0).setWidth(16); groupEmulatorsLayout.setAlignment(1); groupEmulators.setText("Group Emulators").setChecked(settings.general.groupEmulators).onToggle([&] { settings.general.groupEmulators = groupEmulators.checked(); presentation.loadEmulators(); }); groupEmulatorsHint.setText("Groups emulators by manufacturer in the load menu").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); } auto EmulatorSettings::eventToggle(TableViewCell cell) -> void { if(auto emulator = cell.attribute>("emulator")) { emulator->configuration.visible = cell.checked(); presentation.loadEmulators(); } } ares-126/desktop-ui/settings/firmware.cpp000066400000000000000000000065431415063341600205750ustar00rootroot00000000000000auto FirmwareSettings::construct() -> void { setCollapsible(); setVisible(false); firmwareLabel.setText("BIOS Firmware Locations").setFont(Font().setBold()); firmwareList.setHeadered(); firmwareList.setBatchable(); firmwareList.onChange([&] { eventChange(); }); firmwareList.onActivate([&](auto) { eventAssign(); }); assignButton.setText("Assign").onActivate([&] { eventAssign(); }); clearButton.setText("Clear").onActivate([&] { eventClear(); }); refresh(); } auto FirmwareSettings::refresh() -> void { firmwareList.reset(); firmwareList.append(TableViewColumn().setText("Emulator")); firmwareList.append(TableViewColumn().setText("Type").setVisible(false)); firmwareList.append(TableViewColumn().setText("Region")); firmwareList.append(TableViewColumn().setText("Location").setExpandable()); for(auto& emulator : emulators) { for(auto& firmware : emulator->firmware) { TableViewItem item{&firmwareList}; item.append(TableViewCell().setText(emulator->name).setFont(Font().setBold())); item.append(TableViewCell().setText(firmware.type)); item.append(TableViewCell().setText(firmware.region)); if(file::exists(firmware.location)) { item.append(TableViewCell().setText(string{firmware.location}.replace(Path::user(), "~/"))); } else { item.append(TableViewCell().setText("(unset)").setForegroundColor(SystemColor::PlaceholderText)); } } } firmwareList.resizeColumns(); eventChange(); } auto FirmwareSettings::select(const string& emulator, const string& type, const string& region) -> bool { for(auto& item : firmwareList.items()) { if(item.cell(0).text() != emulator) continue; if(item.cell(1).text() != type) continue; if(item.cell(2).text() != region) continue; firmwareList.selectNone(); item.setSelected(); eventChange(); firmwareList.setFocused(); return true; } return false; } auto FirmwareSettings::eventChange() -> void { auto batched = firmwareList.batched(); assignButton.setEnabled(batched.size() == 1); clearButton.setEnabled(batched.size() >= 1); } auto FirmwareSettings::eventAssign() -> void { auto batched = firmwareList.batched(); if(batched.size() != 1) return; auto& item = batched[0]; auto name = item.cell(0).text(); auto type = item.cell(1).text(); auto region = item.cell(2).text(); for(auto& emulator : emulators) { if(emulator->name != name) continue; for(auto& firmware : emulator->firmware) { if(firmware.type != type) continue; if(firmware.region != region) continue; BrowserDialog dialog; dialog.setTitle({"Select ", name, " ", type, " (", region, ")"}); dialog.setPath(Path::desktop()); dialog.setAlignment(settingsWindow); dialog.setFilters({"All|*"}); if(auto location = program.openFile(dialog)) { firmware.location = location; refresh(); } } } } auto FirmwareSettings::eventClear() -> void { for(auto& item : firmwareList.batched()) { auto name = item.cell(0).text(); auto type = item.cell(1).text(); auto region = item.cell(2).text(); for(auto& emulator : emulators) { if(emulator->name != name) continue; for(auto& firmware : emulator->firmware) { if(firmware.type != type) continue; if(firmware.region != region) continue; firmware.location = ""; } } } refresh(); } ares-126/desktop-ui/settings/home.cpp000066400000000000000000000016161415063341600177050ustar00rootroot00000000000000auto HomePanel::construct() -> void { setCollapsible(); setVisible(false); image icon{Resource::Ares::Icon1x}; image icon2x{Resource::Ares::Icon2x}; icon.shrink(); icon2x.shrink(); for(u32 y : range(icon.height())) { auto data = icon.data() + y * icon.pitch(); for(u32 x : range(icon.width())) { u8 alpha = icon.read(data) >> 24; icon.write(data, u8(alpha * 0.15) << 24); data += icon.stride(); } } for(u32 y : range(icon2x.height())) { auto data = icon2x.data() + y * icon2x.pitch(); for(u32 x : range(icon2x.width())) { u8 alpha = icon2x.read(data) >> 24; icon2x.write(data, u8(alpha * 0.15) << 24); data += icon2x.stride(); } } icon.scale(sx(icon.width() * 0.75), sy(icon.height() * 0.75)); icon2x.scale(sx(icon2x.width() * 0.75), sy(icon2x.height() * 0.75)); canvas.setIcon(multiFactorImage(icon, icon2x)); } ares-126/desktop-ui/settings/hotkeys.cpp000066400000000000000000000071351415063341600204450ustar00rootroot00000000000000auto HotkeySettings::construct() -> void { setCollapsible(); setVisible(false); inputList.setBatchable(); inputList.setHeadered(); inputList.onChange([&] { eventChange(); }); inputList.onActivate([&](auto cell) { eventAssign(cell); }); reload(); assignLabel.setFont(Font().setBold()); spacer.setFocusable(); assignButton.setText("Assign").onActivate([&] { eventAssign(inputList.selected().cell(0)); }); clearButton.setText("Clear").onActivate([&] { eventClear(); }); } auto HotkeySettings::reload() -> void { inputList.reset(); inputList.append(TableViewColumn().setText("Name")); for(u32 binding : range(BindingLimit)) { inputList.append(TableViewColumn().setText({"Mapping #", 1 + binding}).setExpandable()); } for(auto& mapping : inputManager.hotkeys) { TableViewItem item{&inputList}; item.append(TableViewCell().setText(mapping.name).setFont(Font().setBold())); for(u32 binding : range(BindingLimit)) item.append(TableViewCell()); } refresh(); eventChange(); inputList.resizeColumns(); } auto HotkeySettings::refresh() -> void { u32 index = 0; for(auto& mapping : inputManager.hotkeys) { for(u32 binding : range(BindingLimit)) { //do not remove identifier from mappings currently being assigned if(activeMapping && &activeMapping() == &mapping && activeBinding == binding) continue; auto cell = inputList.item(index).cell(1 + binding); cell.setIcon(mapping.bindings[binding].icon()); cell.setText(mapping.bindings[binding].text()); } index++; } } auto HotkeySettings::eventChange() -> void { assignButton.setEnabled(inputList.batched().size() == 1); clearButton.setEnabled(inputList.batched().size() >= 1); } auto HotkeySettings::eventClear() -> void { for(auto& item : inputList.batched()) { auto& mapping = inputManager.hotkeys[item.offset()]; mapping.unbind(); } refresh(); } auto HotkeySettings::eventAssign(TableViewCell cell) -> void { inputManager.poll(true); //clear any pending events first if(ruby::input.driver() == "None") return (void)MessageDialog().setText( "Bindings cannot be set when no input driver has been loaded.\n" "Please go to driver settings and activate an input driver first." ).setAlignment(settingsWindow).error(); if(auto item = inputList.selected()) { if(activeMapping) refresh(); //clear any previous assign arrow prompts activeMapping = inputManager.hotkeys[item.offset()]; activeBinding = max(0, (s32)cell.offset() - 1); item.cell(1 + activeBinding).setIcon(Icon::Go::Right).setText("(assign ...)"); assignLabel.setText({"Press a key or button for mapping #", 1 + activeBinding, " [", activeMapping->name, "] ..."}); refresh(); settingsWindow.setDismissable(false); Application::processEvents(); spacer.setFocused(); } } auto HotkeySettings::eventInput(shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> void { if(!activeMapping) return; if(!settingsWindow.focused()) return; if(device->isMouse()) return; if(activeMapping->bind(activeBinding, device, groupID, inputID, oldValue, newValue)) { activeMapping.reset(); assignLabel.setText(); refresh(); timer.onActivate([&] { timer.setEnabled(false); inputList.setFocused(); settingsWindow.setDismissable(true); }).setInterval(200).setEnabled(); } } auto HotkeySettings::setVisible(bool visible) -> HotkeySettings& { if(visible == 1) refresh(); if(visible == 0) activeMapping.reset(), assignLabel.setText(), settingsWindow.setDismissable(true); VerticalLayout::setVisible(visible); return *this; } ares-126/desktop-ui/settings/input.cpp000066400000000000000000000200161415063341600201070ustar00rootroot00000000000000auto InputSettings::construct() -> void { setCollapsible(); setVisible(false); systemList.append(ComboButtonItem().setText("Virtual Gamepads")); for(auto& emulator : emulators) { systemList.append(ComboButtonItem().setText(emulator->name)); } systemList.onChange([&] { systemChange(); }); portList.onChange([&] { portChange(); }); deviceList.onChange([&] { deviceChange(); }); inputList.setBatchable(); inputList.setHeadered(); inputList.onContext([&](auto cell) { eventContext(cell); }); inputList.onChange([&] { eventChange(); }); inputList.onActivate([&](auto cell) { eventAssign(cell); }); systemChange(); assignLabel.setFont(Font().setBold()); spacer.setFocusable(); assignButton.setText("Assign").onActivate([&] { eventAssign(inputList.selected().cell(0)); }); clearButton.setText("Clear").onActivate([&] { eventClear(); }); } auto InputSettings::systemChange() -> void { portList.reset(); auto& ports = Emulator::enumeratePorts(systemList.selected().text()); for(auto& port : ports) { portList.append(ComboButtonItem().setText(port.name)); } portChange(); } auto InputSettings::portChange() -> void { deviceList.reset(); auto& ports = Emulator::enumeratePorts(systemList.selected().text()); auto& port = ports[portList.selected().offset()]; for(auto& device : port.devices) { deviceList.append(ComboButtonItem().setText(device.name)); } deviceChange(); } auto InputSettings::deviceChange() -> void { inputList.reset(); inputList.append(TableViewColumn().setText("Name")); for(u32 binding : range(BindingLimit)) { inputList.append(TableViewColumn().setText({"Mapping #", 1 + binding}).setExpandable()); } auto& ports = Emulator::enumeratePorts(systemList.selected().text()); auto& port = ports[portList.selected().offset()]; auto& device = port.devices[deviceList.selected().offset()]; for(auto& input : device.inputs) { TableViewItem item{&inputList}; item.setAttribute("type", (u32)input.type); item.append(TableViewCell().setText(input.name).setFont(Font().setBold())); for(u32 binding : range(BindingLimit)) item.append(TableViewCell()); } refresh(); eventChange(); Application::processEvents(); inputList.resizeColumns(); } auto InputSettings::refresh() -> void { u32 index = 0; auto& ports = Emulator::enumeratePorts(systemList.selected().text()); auto& port = ports[portList.selected().offset()]; auto& device = port.devices[deviceList.selected().offset()]; for(auto& input : device.inputs) { for(u32 binding : range(BindingLimit)) { //do not remove identifier from mappings currently being assigned if(activeMapping && &activeMapping() == &input && activeBinding == binding) continue; auto cell = inputList.item(index).cell(1 + binding); cell.setIcon(input.mapping->bindings[binding].icon()); cell.setText(input.mapping->bindings[binding].text()); } index++; } } auto InputSettings::eventContext(TableViewCell cell) -> void { if(!cell) return; if(cell.offset() == 0) return; //ignore label cell if(cell.offset() >= BindingLimit) return; //should never occur auto item = cell->parentTableViewItem(); auto type = (InputNode::Type)item->attribute("type"); menu.setVisible(false); menu.reset(); if(type == InputNode::Type::Relative) { menu.append(MenuItem().setIcon(Icon::Device::Mouse).setText("Mouse X-axis").onActivate([=] { settingsWindow.inputSettings.eventAssign(cell, "X"); })); menu.append(MenuItem().setIcon(Icon::Device::Mouse).setText("Mouse Y-axis").onActivate([=] { settingsWindow.inputSettings.eventAssign(cell, "Y"); })); } if(type == InputNode::Type::Digital) { menu.append(MenuItem().setIcon(Icon::Device::Mouse).setText("Mouse Left Button").onActivate([=] { settingsWindow.inputSettings.eventAssign(cell, "Left"); })); menu.append(MenuItem().setIcon(Icon::Device::Mouse).setText("Mouse Middle Button").onActivate([=] { settingsWindow.inputSettings.eventAssign(cell, "Middle"); })); menu.append(MenuItem().setIcon(Icon::Device::Mouse).setText("Mouse Right Button").onActivate([=] { settingsWindow.inputSettings.eventAssign(cell, "Right"); })); } if(menu.actionCount()) menu.setVisible(true); } auto InputSettings::eventChange() -> void { assignButton.setEnabled(inputList.batched().size() == 1); clearButton.setEnabled(inputList.batched().size() >= 1); } auto InputSettings::eventClear() -> void { auto& ports = Emulator::enumeratePorts(systemList.selected().text()); auto& port = ports[portList.selected().offset()]; auto& device = port.devices[deviceList.selected().offset()]; for(auto& item : inputList.batched()) { auto& mapping = *device.inputs[item.offset()].mapping; mapping.unbind(); } refresh(); } auto InputSettings::eventAssign(TableViewCell cell, string binding) -> void { if(ruby::input.driver() == "None") return (void)MessageDialog().setText( "Bindings cannot be set when no input driver has been loaded.\n" "Please go to driver settings and activate an input driver first." ).setAlignment(settingsWindow).error(); auto& ports = Emulator::enumeratePorts(systemList.selected().text()); auto& port = ports[portList.selected().offset()]; auto& device = port.devices[deviceList.selected().offset()]; if(auto item = inputList.selected()) { if(activeMapping) refresh(); //clear any previous assign arrow prompts activeMapping = device.inputs[item.offset()]; activeBinding = max(0, (s32)cell.offset() - 1); for(auto device : inputManager.devices) { if(device->isMouse()) { for(auto& group : *device) { if(auto inputID = group.find(binding)) { auto groupID = (binding == "X" || binding == "Y") ? HID::Mouse::GroupID::Axis : HID::Mouse::GroupID::Button; activeMapping->mapping->bind(activeBinding, device, groupID, inputID(), 0, 1); } } } } activeMapping.reset(); refresh(); } } auto InputSettings::eventAssign(TableViewCell cell) -> void { inputManager.poll(true); //clear any pending events first if(ruby::input.driver() == "None") return (void)MessageDialog().setText( "Bindings cannot be set when no input driver has been loaded.\n" "Please go to driver settings and activate an input driver first." ).setAlignment(settingsWindow).error(); auto& ports = Emulator::enumeratePorts(systemList.selected().text()); auto& port = ports[portList.selected().offset()]; auto& device = port.devices[deviceList.selected().offset()]; if(auto item = inputList.selected()) { if(activeMapping) refresh(); //clear any previous assign arrow prompts activeMapping = device.inputs[item.offset()]; activeBinding = max(0, (s32)cell.offset() - 1); item.cell(1 + activeBinding).setIcon(Icon::Go::Right).setText("(assign ...)"); assignLabel.setText({"Press a key or button for mapping #", 1 + activeBinding, " [", activeMapping->name, "] ..."}); refresh(); settingsWindow.setDismissable(false); Application::processEvents(); spacer.setFocused(); } } auto InputSettings::eventInput(shared_pointer device, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> void { if(!activeMapping) return; if(!settingsWindow.focused()) return; if(device->isMouse()) return; if(activeMapping->mapping->bind(activeBinding, device, groupID, inputID, oldValue, newValue)) { activeMapping.reset(); assignLabel.setText(); refresh(); timer.onActivate([&] { timer.setEnabled(false); inputList.setFocused(); settingsWindow.setDismissable(true); }).setInterval(200).setEnabled(); } } auto InputSettings::setVisible(bool visible) -> InputSettings& { if(visible == 1) { systemList.items().first().setSelected(); if(emulator) { for(auto item : systemList.items()) { if(item.text() == emulator->name) item.setSelected(); } } systemList.doChange(); } if(visible == 0) activeMapping.reset(), assignLabel.setText(), settingsWindow.setDismissable(true); VerticalLayout::setVisible(visible); return *this; } ares-126/desktop-ui/settings/options.cpp000066400000000000000000000031751415063341600204520ustar00rootroot00000000000000auto OptionSettings::construct() -> void { setCollapsible(); setVisible(false); rewind.setText("Rewind").setChecked(settings.general.rewind).onToggle([&] { settings.general.rewind = rewind.checked(); program.rewindReset(); }).doToggle(); rewindLayout.setAlignment(1); rewindHint.setText("Allows you to reverse time via the rewind hotkey").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); runAhead.setText("Run-Ahead").setEnabled(co_serializable()).setChecked(settings.general.runAhead && co_serializable()).onToggle([&] { settings.general.runAhead = runAhead.checked() && co_serializable(); program.runAheadUpdate(); }); runAheadLayout.setAlignment(1); runAheadHint.setText("Removes one frame of input lag, but doubles system requirements").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); autoSaveMemory.setText("Auto-Save Memory Periodically").setChecked(settings.general.autoSaveMemory).onToggle([&] { settings.general.autoSaveMemory = autoSaveMemory.checked(); }); autoSaveMemoryLayout.setAlignment(1); autoSaveMemoryHint.setText("Helps safeguard game saves from being lost").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); nativeFileDialogs.setText("Use Native File Dialogs").setChecked(settings.general.nativeFileDialogs).onToggle([&] { settings.general.nativeFileDialogs = nativeFileDialogs.checked(); }); nativeFileDialogsLayout.setAlignment(1); nativeFileDialogsHint.setText("More familiar, but lacks advanced loading options").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); } ares-126/desktop-ui/settings/paths.cpp000066400000000000000000000072271415063341600201000ustar00rootroot00000000000000#if defined(PLATFORM_MACOS) #define ELLIPSIS "\u2026" #else #define ELLIPSIS " ..." #endif auto PathSettings::construct() -> void { setCollapsible(); setVisible(false); homeLabel.setText("Home").setFont(Font().setBold()); homeLayout.setPadding(12_sx, 0); homePath.setEditable(false); homeAssign.setText("Assign" ELLIPSIS).onActivate([&] { BrowserDialog dialog; dialog.setTitle("Select Home Path"); dialog.setPath(Path::desktop()); dialog.setAlignment(settingsWindow); if(auto location = program.selectFolder(dialog)) { settings.paths.home = location; refresh(); } }); homeReset.setText("Reset").onActivate([&] { settings.paths.home = ""; refresh(); }); savesLabel.setText("Saves").setFont(Font().setBold()); savesLayout.setPadding(12_sx, 0); savesPath.setEditable(false); savesAssign.setText("Assign" ELLIPSIS).onActivate([&] { BrowserDialog dialog; dialog.setTitle("Select Saves Path"); dialog.setPath(Path::desktop()); dialog.setAlignment(settingsWindow); if(auto location = program.selectFolder(dialog)) { settings.paths.saves = location; refresh(); } }); savesReset.setText("Reset").onActivate([&] { settings.paths.saves = ""; refresh(); }); screenshotsLabel.setText("Screenshots").setFont(Font().setBold()); screenshotsLayout.setPadding(12_sx, 0); screenshotsPath.setEditable(false); screenshotsAssign.setText("Assign" ELLIPSIS).onActivate([&] { BrowserDialog dialog; dialog.setTitle("Select Screenshots Path"); dialog.setPath(Path::desktop()); dialog.setAlignment(settingsWindow); if(auto location = program.selectFolder(dialog)) { settings.paths.screenshots = location; refresh(); } }); screenshotsReset.setText("Reset").onActivate([&] { settings.paths.screenshots = ""; refresh(); }); debuggingLabel.setText("Debugging Files").setFont(Font().setBold()); debuggingLayout.setPadding(12_sx, 0); debuggingPath.setEditable(false); debuggingAssign.setText("Assign" ELLIPSIS).onActivate([&] { BrowserDialog dialog; dialog.setTitle("Select Debugging Path"); dialog.setPath(Path::desktop()); dialog.setAlignment(settingsWindow); if(auto location = program.selectFolder(dialog)) { settings.paths.debugging = location; refresh(); } }); debuggingReset.setText("Reset").onActivate([&] { settings.paths.debugging = ""; refresh(); }); refresh(); } auto PathSettings::refresh() -> void { //simplifies pathnames by abbreviating the home folder and trailing slash auto pathname = [](string name) -> string { if(name.beginsWith(Path::user())) { name.trimLeft(Path::user(), 1L); name.prepend("~/"); } if(name != "/") name.trimRight("/", 1L); return name; }; if(settings.paths.home) { homePath.setText(pathname(settings.paths.home)).setForegroundColor(); } else { homePath.setText(pathname(mia::homeLocation())).setForegroundColor(SystemColor::PlaceholderText); } if(settings.paths.saves) { savesPath.setText(pathname(settings.paths.saves)).setForegroundColor(); } else { savesPath.setText("(same as game path)").setForegroundColor(SystemColor::PlaceholderText); } if(settings.paths.screenshots) { screenshotsPath.setText(pathname(settings.paths.screenshots)).setForegroundColor(); } else { screenshotsPath.setText("(same as game path)").setForegroundColor(SystemColor::PlaceholderText); } if(settings.paths.debugging) { debuggingPath.setText(pathname(settings.paths.debugging)).setForegroundColor(); } else { debuggingPath.setText("(same as game path)").setForegroundColor(SystemColor::PlaceholderText); } } ares-126/desktop-ui/settings/settings.cpp000066400000000000000000000233451415063341600206200ustar00rootroot00000000000000#include "../desktop-ui.hpp" #include "video.cpp" #include "audio.cpp" #include "input.cpp" #include "hotkeys.cpp" #include "emulators.cpp" #include "options.cpp" #include "firmware.cpp" #include "paths.cpp" #include "drivers.cpp" #include "home.cpp" Settings settings; namespace Instances { Instance settingsWindow; } SettingsWindow& settingsWindow = Instances::settingsWindow(); VideoSettings& videoSettings = settingsWindow.videoSettings; AudioSettings& audioSettings = settingsWindow.audioSettings; InputSettings& inputSettings = settingsWindow.inputSettings; HotkeySettings& hotkeySettings = settingsWindow.hotkeySettings; EmulatorSettings& emulatorSettings = settingsWindow.emulatorSettings; OptionSettings& optionSettings = settingsWindow.optionSettings; FirmwareSettings& firmwareSettings = settingsWindow.firmwareSettings; PathSettings& pathSettings = settingsWindow.pathSettings; DriverSettings& driverSettings = settingsWindow.driverSettings; auto Settings::load() -> void { Markup::Node::operator=(BML::unserialize(string::read(locate("settings.bml")), " ")); process(true); save(); } auto Settings::save() -> void { process(false); file::write(locate("settings.bml"), BML::serialize(*this, " ")); } auto Settings::process(bool load) -> void { if(load) { //initialize non-static default settings video.driver = ruby::Video::optimalDriver(); audio.driver = ruby::Audio::optimalDriver(); input.driver = ruby::Input::optimalDriver(); } #define bind(type, path, name) \ if(load) { \ if(auto node = operator[](path)) name = node.type(); \ } else { \ operator()(path).setValue(name); \ } \ bind(string, "Video/Driver", video.driver); bind(string, "Video/Monitor", video.monitor); bind(string, "Video/Format", video.format); bind(boolean, "Video/Exclusive", video.exclusive); bind(boolean, "Video/Blocking", video.blocking); bind(boolean, "Video/Flush", video.flush); bind(string, "Video/Shader", video.shader); bind(natural, "Video/Multiplier", video.multiplier); bind(string, "Video/Output", video.output); bind(boolean, "Video/AspectCorrection", video.aspectCorrection); bind(boolean, "Video/AdaptiveSizing", video.adaptiveSizing); bind(boolean, "Video/AutoCentering", video.autoCentering); bind(real, "Video/Luminance", video.luminance); bind(real, "Video/Saturation", video.saturation); bind(real, "Video/Gamma", video.gamma); bind(boolean, "Video/ColorBleed", video.colorBleed); bind(boolean, "Video/ColorEmulation", video.colorEmulation); bind(boolean, "Video/InterframeBlending", video.interframeBlending); bind(boolean, "Video/Overscan", video.overscan); bind(string, "Video/Quality", video.quality); bind(boolean, "Video/Supersampling", video.supersampling); bind(string, "Audio/Driver", audio.driver); bind(string, "Audio/Device", audio.device); bind(natural, "Audio/Frequency", audio.frequency); bind(natural, "Audio/Latency", audio.latency); bind(boolean, "Audio/Exclusive", audio.exclusive); bind(boolean, "Audio/Blocking", audio.blocking); bind(boolean, "Audio/Dynamic", audio.dynamic); bind(boolean, "Audio/Mute", audio.mute); bind(real, "Audio/Volume", audio.volume); bind(real, "Audio/Balance", audio.balance); bind(string, "Input/Driver", input.driver); bind(string, "Input/Defocus", input.defocus); bind(boolean, "Boot/Fast", boot.fast); bind(boolean, "Boot/Debugger", boot.debugger); bind(string, "Boot/Prefer", boot.prefer); bind(boolean, "General/ShowStatusBar", general.showStatusBar); bind(boolean, "General/Rewind", general.rewind); bind(boolean, "General/RunAhead", general.runAhead); bind(boolean, "General/AutoSaveMemory", general.autoSaveMemory); bind(boolean, "General/NativeFileDialogs", general.nativeFileDialogs); bind(boolean, "General/GroupEmulators", general.groupEmulators); bind(natural, "Rewind/Length", rewind.length); bind(natural, "Rewind/Frequency", rewind.frequency); bind(string, "Paths/Home", paths.home); bind(string, "Paths/Saves", paths.saves); bind(string, "Paths/Screenshots", paths.screenshots); bind(string, "Paths/Debugging", paths.debugging); bind(string, "Paths/SuperFamicom/GameBoy", paths.superFamicom.gameBoy); bind(string, "Paths/SuperFamicom/BSMemory", paths.superFamicom.bsMemory); bind(string, "Paths/SuperFamicom/SufamiTurbo", paths.superFamicom.sufamiTurbo); for(u32 index : range(9)) { string name = {"Recent/Game-", 1 + index}; bind(string, name, recent.game[index]); } for(u32 index : range(5)) { auto& port = virtualPorts[index]; for(auto& input : port.pad.inputs) { string name = {"VirtualPad", 1 + index, "/", input.name}, value; if(load == 0) for(auto& assignment : input.mapping->assignments) value.append(assignment, ";"); if(load == 0) value.trimRight(";", 1L); bind(string, name, value); if(load == 1) for(u32 binding : range(BindingLimit)) input.mapping->assignments[binding] = value.split(";")(binding); } for(auto& input : port.mouse.inputs) { string name = {"VirtualMouse", 1 + index, "/", input.name}, value; if(load == 0) for(auto& assignment : input.mapping->assignments) value.append(assignment, ";"); if(load == 0) value.trimRight(";", 1L); bind(string, name, value); if(load == 1) for(u32 binding : range(BindingLimit)) input.mapping->assignments[binding] = value.split(";")(binding); } } for(auto& mapping : inputManager.hotkeys) { string name = {"Hotkey/", string{mapping.name}.replace(" ", "")}, value; if(load == 0) for(auto& assignment : mapping.assignments) value.append(assignment, ";"); if(load == 0) value.trimRight(";", 1L); bind(string, name, value); if(load == 1) for(u32 binding : range(BindingLimit)) mapping.assignments[binding] = value.split(";")(binding); } for(auto& emulator : emulators) { string base = string{emulator->name}.replace(" ", ""), name; name = {base, "/Visible"}; bind(boolean, name, emulator->configuration.visible); name = {base, "/Path"}; bind(string, name, emulator->configuration.game); for(auto& firmware : emulator->firmware) { string name = {base, "/Firmware/", firmware.type, ".", firmware.region}; bind(string, name, firmware.location); } } #undef bind } // SettingsWindow::SettingsWindow() { onClose([&] { setVisible(false); //cancel any pending input assignment requests, if any inputSettings.setVisible(false); hotkeySettings.setVisible(false); }); panelContainer.setPadding(5_sx, 5_sy); panelList.append(ListViewItem().setText("Video").setIcon(Icon::Device::Display)); panelList.append(ListViewItem().setText("Audio").setIcon(Icon::Device::Speaker)); panelList.append(ListViewItem().setText("Input").setIcon(Icon::Device::Joypad)); panelList.append(ListViewItem().setText("Hotkeys").setIcon(Icon::Device::Keyboard)); panelList.append(ListViewItem().setText("Emulators").setIcon(Icon::Place::Server)); panelList.append(ListViewItem().setText("Options").setIcon(Icon::Action::Settings)); panelList.append(ListViewItem().setText("Firmware").setIcon(Icon::Emblem::Binary)); panelList.append(ListViewItem().setText("Paths").setIcon(Icon::Emblem::Folder)); panelList.append(ListViewItem().setText("Drivers").setIcon(Icon::Place::Settings)); panelList->setUsesSidebarStyle(); panelList.onChange([&] { eventChange(); }); panelContainer.append(videoSettings, Size{~0, ~0}); panelContainer.append(audioSettings, Size{~0, ~0}); panelContainer.append(inputSettings, Size{~0, ~0}); panelContainer.append(hotkeySettings, Size{~0, ~0}); panelContainer.append(emulatorSettings, Size{~0, ~0}); panelContainer.append(optionSettings, Size{~0, ~0}); panelContainer.append(firmwareSettings, Size{~0, ~0}); panelContainer.append(pathSettings, Size{~0, ~0}); panelContainer.append(driverSettings, Size{~0, ~0}); panelContainer.append(homePanel, Size{~0, ~0}); videoSettings.construct(); audioSettings.construct(); inputSettings.construct(); hotkeySettings.construct(); emulatorSettings.construct(); optionSettings.construct(); firmwareSettings.construct(); pathSettings.construct(); driverSettings.construct(); homePanel.construct(); setDismissable(); setTitle("Configuration"); setSize({700_sx, 405_sy}); setAlignment({0.0, 1.0}); setResizable(false); } auto SettingsWindow::show(const string& panel) -> void { for(auto item : panelList.items()) { if(item.text() == panel) { item.setSelected(); eventChange(); break; } } setVisible(); setFocused(); panelList.setFocused(); } auto SettingsWindow::eventChange() -> void { videoSettings.setVisible(false); audioSettings.setVisible(false); inputSettings.setVisible(false); hotkeySettings.setVisible(false); emulatorSettings.setVisible(false); optionSettings.setVisible(false); firmwareSettings.setVisible(false); pathSettings.setVisible(false); driverSettings.setVisible(false); homePanel.setVisible(false); bool found = false; if(auto item = panelList.selected()) { if(item.text() == "Video" ) found = true, videoSettings.setVisible(); if(item.text() == "Audio" ) found = true, audioSettings.setVisible(); if(item.text() == "Input" ) found = true, inputSettings.setVisible(); if(item.text() == "Hotkeys" ) found = true, hotkeySettings.setVisible(); if(item.text() == "Emulators") found = true, emulatorSettings.setVisible(); if(item.text() == "Options" ) found = true, optionSettings.setVisible(); if(item.text() == "Firmware" ) found = true, firmwareSettings.setVisible(); if(item.text() == "Paths" ) found = true, pathSettings.setVisible(); if(item.text() == "Drivers" ) found = true, driverSettings.setVisible(); } if(!found) homePanel.setVisible(); panelContainer.resize(); } ares-126/desktop-ui/settings/settings.hpp000066400000000000000000000330141415063341600206170ustar00rootroot00000000000000struct Settings : Markup::Node { using string = nall::string; auto load() -> void; auto save() -> void; auto process(bool load) -> void; struct Video { string driver; string monitor; string format; bool exclusive = false; bool blocking = false; bool flush = false; string shader = "Blur"; u32 multiplier = 2; string output = "Scale"; bool aspectCorrection = true; bool adaptiveSizing = true; bool autoCentering = false; f64 luminance = 1.0; f64 saturation = 1.0; f64 gamma = 1.0; bool colorBleed = true; bool colorEmulation = true; bool interframeBlending = true; bool overscan = false; string quality = "SD"; bool supersampling = false; } video; struct Audio { string driver; string device; u32 frequency = 0; u32 latency = 0; bool exclusive = false; bool blocking = true; bool dynamic = false; bool mute = false; f64 volume = 1.0; f64 balance = 0.0; } audio; struct Input { string driver; string defocus = "Pause"; } input; struct Boot { bool fast = false; bool debugger = false; string prefer = "NTSC-U"; } boot; struct General { bool showStatusBar = true; bool rewind = false; bool runAhead = false; bool autoSaveMemory = true; bool nativeFileDialogs = true; bool groupEmulators = true; } general; struct Rewind { u32 length = 100; u32 frequency = 10; } rewind; struct Paths { string home; string saves; string screenshots; string debugging; struct SuperFamicom { string gameBoy; string bsMemory; string sufamiTurbo; } superFamicom; } paths; struct Recent { string game[9]; } recent; }; struct VideoSettings : VerticalLayout { auto construct() -> void; Label colorAdjustmentLabel{this, Size{~0, 0}, 5}; TableLayout colorAdjustmentLayout{this, Size{~0, 0}}; Label luminanceLabel{&colorAdjustmentLayout, Size{0, 0}}; Label luminanceValue{&colorAdjustmentLayout, Size{50_sx, 0}}; HorizontalSlider luminanceSlider{&colorAdjustmentLayout, Size{~0, 0}}; // Label saturationLabel{&colorAdjustmentLayout, Size{0, 0}}; Label saturationValue{&colorAdjustmentLayout, Size{50_sx, 0}}; HorizontalSlider saturationSlider{&colorAdjustmentLayout, Size{~0, 0}}; // Label gammaLabel{&colorAdjustmentLayout, Size{0, 0}}; Label gammaValue{&colorAdjustmentLayout, Size{50_sx, 0}}; HorizontalSlider gammaSlider{&colorAdjustmentLayout, Size{~0, 0}}; Label emulatorSettingsLabel{this, Size{~0, 0}, 5}; HorizontalLayout colorBleedLayout{this, Size{~0, 0}, 5}; CheckLabel colorBleedOption{&colorBleedLayout, Size{0, 0}, 5}; Label colorBleedHint{&colorBleedLayout, Size{~0, 0}}; HorizontalLayout colorEmulationLayout{this, Size{~0, 0}, 5}; CheckLabel colorEmulationOption{&colorEmulationLayout, Size{0, 0}, 5}; Label colorEmulationHint{&colorEmulationLayout, Size{~0, 0}}; HorizontalLayout interframeBlendingLayout{this, Size{~0, 0}, 5}; CheckLabel interframeBlendingOption{&interframeBlendingLayout, Size{0, 0}, 5}; Label interframeBlendingHint{&interframeBlendingLayout, Size{~0, 0}}; HorizontalLayout overscanLayout{this, Size{~0, 0}}; CheckLabel overscanOption{&overscanLayout, Size{0, 0}, 5}; Label overscanHint{&overscanLayout, Size{~0, 0}}; // Label renderSettingsLabel{this, Size{~0, 0}, 5}; HorizontalLayout renderQualityLayout{this, Size{~0, 0}, 5}; RadioLabel renderQualitySD{&renderQualityLayout, Size{0, 0}}; RadioLabel renderQualityHD{&renderQualityLayout, Size{0, 0}}; RadioLabel renderQualityUHD{&renderQualityLayout, Size{0, 0}}; Group renderQualityGroup{&renderQualitySD, &renderQualityHD, &renderQualityUHD}; HorizontalLayout renderSupersamplingLayout{this, Size{~0, 0}, 5}; CheckLabel renderSupersamplingOption{&renderSupersamplingLayout, Size{0, 0}, 5}; Label renderSupersamplingHint{&renderSupersamplingLayout, Size{0, 0}}; HorizontalLayout renderSettingsLayout{this, Size{~0, 0}}; Label renderSettingsHint{&renderSettingsLayout, Size{0, 0}}; }; struct AudioSettings : VerticalLayout { auto construct() -> void; Label effectsLabel{this, Size{~0, 0}, 5}; TableLayout effectsLayout{this, Size{~0, 0}}; Label volumeLabel{&effectsLayout, Size{0, 0}}; Label volumeValue{&effectsLayout, Size{50_sx, 0}}; HorizontalSlider volumeSlider{&effectsLayout, Size{~0, 0}}; // Label balanceLabel{&effectsLayout, Size{0, 0}}; Label balanceValue{&effectsLayout, Size{50_sx, 0}}; HorizontalSlider balanceSlider{&effectsLayout, Size{~0, 0}}; }; struct InputSettings : VerticalLayout { auto construct() -> void; auto systemChange() -> void; auto portChange() -> void; auto deviceChange() -> void; auto refresh() -> void; auto eventContext(TableViewCell) -> void; auto eventChange() -> void; auto eventClear() -> void; auto eventAssign(TableViewCell, string binding) -> void; auto eventAssign(TableViewCell) -> void; auto eventInput(shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> void; auto setVisible(bool visible = true) -> InputSettings&; HorizontalLayout indexLayout{this, Size{~0, 0}}; ComboButton systemList{&indexLayout, Size{~0, 0}}; ComboButton portList{&indexLayout, Size{~0, 0}}; ComboButton deviceList{&indexLayout, Size{~0, 0}}; TableView inputList{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Label assignLabel{&controlLayout, Size{~0, 0}}; Canvas spacer{&controlLayout, Size{1, 0}}; Button assignButton{&controlLayout, Size{80, 0}}; Button clearButton{&controlLayout, Size{80, 0}}; maybe activeMapping; u32 activeBinding = 0; Timer timer; PopupMenu menu; }; struct HotkeySettings : VerticalLayout { auto construct() -> void; auto reload() -> void; auto refresh() -> void; auto eventChange() -> void; auto eventClear() -> void; auto eventAssign(TableViewCell) -> void; auto eventInput(shared_pointer, u32 groupID, u32 inputID, s16 oldValue, s16 newValue) -> void; auto setVisible(bool visible = true) -> HotkeySettings&; TableView inputList{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Label assignLabel{&controlLayout, Size{~0, 0}}; Canvas spacer{&controlLayout, Size{1, 0}}; Button assignButton{&controlLayout, Size{80, 0}}; Button clearButton{&controlLayout, Size{80, 0}}; maybe activeMapping; u32 activeBinding = 0; Timer timer; }; struct EmulatorSettings : VerticalLayout { auto construct() -> void; auto eventToggle(TableViewCell cell) -> void; Label emulatorLabel{this, Size{~0, 0}, 5}; TableView emulatorList{this, Size{~0, ~0}}; HorizontalLayout groupEmulatorsLayout{this, Size{~0, 0}}; CheckLabel groupEmulators{&groupEmulatorsLayout, Size{0, 0}, 5}; Label groupEmulatorsHint{&groupEmulatorsLayout, Size{~0, 0}}; }; struct OptionSettings : VerticalLayout { auto construct() -> void; HorizontalLayout rewindLayout{this, Size{~0, 0}, 5}; CheckLabel rewind{&rewindLayout, Size{0, 0}, 5}; Label rewindHint{&rewindLayout, Size{~0, 0}}; HorizontalLayout runAheadLayout{this, Size{~0, 0}, 5}; CheckLabel runAhead{&runAheadLayout, Size{0, 0}, 5}; Label runAheadHint{&runAheadLayout, Size{~0, 0}}; HorizontalLayout autoSaveMemoryLayout{this, Size{~0, 0}, 5}; CheckLabel autoSaveMemory{&autoSaveMemoryLayout, Size{0, 0}, 5}; Label autoSaveMemoryHint{&autoSaveMemoryLayout, Size{~0, 0}}; HorizontalLayout nativeFileDialogsLayout{this, Size{~0, 0}, 5}; CheckLabel nativeFileDialogs{&nativeFileDialogsLayout, Size{0, 0}, 5}; Label nativeFileDialogsHint{&nativeFileDialogsLayout, Size{~0, 0}}; }; struct FirmwareSettings : VerticalLayout { auto construct() -> void; auto refresh() -> void; auto select(const string& emulator, const string& type, const string& region) -> bool; auto eventChange() -> void; auto eventAssign() -> void; auto eventClear() -> void; Label firmwareLabel{this, Size{~0, 0}, 5}; TableView firmwareList{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Canvas spacer{&controlLayout, Size{~0, 0}}; Button assignButton{&controlLayout, Size{80, 0}}; Button clearButton{&controlLayout, Size{80, 0}}; }; struct PathSettings : VerticalLayout { auto construct() -> void; auto refresh() -> void; Label homeLabel{this, Size{~0, 0}, 5}; HorizontalLayout homeLayout{this, Size{~0, 0}}; LineEdit homePath{&homeLayout, Size{~0, 0}}; Button homeAssign{&homeLayout, Size{80, 0}}; Button homeReset{&homeLayout, Size{80, 0}}; Label savesLabel{this, Size{~0, 0}, 5}; HorizontalLayout savesLayout{this, Size{~0, 0}}; LineEdit savesPath{&savesLayout, Size{~0, 0}}; Button savesAssign{&savesLayout, Size{80, 0}}; Button savesReset{&savesLayout, Size{80, 0}}; Label screenshotsLabel{this, Size{~0, 0}, 5}; HorizontalLayout screenshotsLayout{this, Size{~0, 0}}; LineEdit screenshotsPath{&screenshotsLayout, Size{~0, 0}}; Button screenshotsAssign{&screenshotsLayout, Size{80, 0}}; Button screenshotsReset{&screenshotsLayout, Size{80, 0}}; Label debuggingLabel{this, Size{~0, 0}, 5}; HorizontalLayout debuggingLayout{this, Size{~0, 0}}; LineEdit debuggingPath{&debuggingLayout, Size{~0, 0}}; Button debuggingAssign{&debuggingLayout, Size{80, 0}}; Button debuggingReset{&debuggingLayout, Size{80, 0}}; }; struct DriverSettings : VerticalLayout { auto construct() -> void; auto videoRefresh() -> void; auto videoDriverUpdate() -> void; auto audioRefresh() -> void; auto audioDriverUpdate() -> void; auto inputRefresh() -> void; auto inputDriverUpdate() -> void; Label videoLabel{this, Size{~0, 0}, 5}; HorizontalLayout videoDriverLayout{this, Size{~0, 0}}; Label videoDriverLabel{&videoDriverLayout, Size{0, 0}}; ComboButton videoDriverList{&videoDriverLayout, Size{0, 0}}; Button videoDriverAssign{&videoDriverLayout, Size{0, 0}}; Label videoDriverActive{&videoDriverLayout, Size{0, 0}}; HorizontalLayout videoPropertyLayout{this, Size{~0, 0}}; Label videoMonitorLabel{&videoPropertyLayout, Size{0, 0}}; ComboButton videoMonitorList{&videoPropertyLayout, Size{0, 0}}; Label videoFormatLabel{&videoPropertyLayout, Size{0, 0}}; ComboButton videoFormatList{&videoPropertyLayout, Size{0, 0}}; HorizontalLayout videoToggleLayout{this, Size{~0, 0}}; CheckLabel videoExclusiveToggle{&videoToggleLayout, Size{0, 0}}; CheckLabel videoBlockingToggle{&videoToggleLayout, Size{0, 0}}; CheckLabel videoFlushToggle{&videoToggleLayout, Size{0, 0}}; // Label audioLabel{this, Size{~0, 0}, 5}; HorizontalLayout audioDriverLayout{this, Size{~0, 0}}; Label audioDriverLabel{&audioDriverLayout, Size{0, 0}}; ComboButton audioDriverList{&audioDriverLayout, Size{0, 0}}; Button audioDriverAssign{&audioDriverLayout, Size{0, 0}}; Label audioDriverActive{&audioDriverLayout, Size{0, 0}}; HorizontalLayout audioPropertyLayout{this, Size{~0, 0}}; Label audioDeviceLabel{&audioPropertyLayout, Size{0, 0}}; ComboButton audioDeviceList{&audioPropertyLayout, Size{0, 0}}; Label audioFrequencyLabel{&audioPropertyLayout, Size{0, 0}}; ComboButton audioFrequencyList{&audioPropertyLayout, Size{0, 0}}; Label audioLatencyLabel{&audioPropertyLayout, Size{0, 0}}; ComboButton audioLatencyList{&audioPropertyLayout, Size{0, 0}}; HorizontalLayout audioToggleLayout{this, Size{~0, 0}}; CheckLabel audioExclusiveToggle{&audioToggleLayout, Size{0, 0}}; CheckLabel audioBlockingToggle{&audioToggleLayout, Size{0, 0}}; CheckLabel audioDynamicToggle{&audioToggleLayout, Size{0, 0}}; // Label inputLabel{this, Size{~0, 0}, 5}; HorizontalLayout inputDriverLayout{this, Size{~0, 0}}; Label inputDriverLabel{&inputDriverLayout, Size{0, 0}}; ComboButton inputDriverList{&inputDriverLayout, Size{0, 0}}; Button inputDriverAssign{&inputDriverLayout, Size{0, 0}}; Label inputDriverActive{&inputDriverLayout, Size{0, 0}}; HorizontalLayout inputDefocusLayout{this, Size{~0, 0}}; Label inputDefocusLabel{&inputDefocusLayout, Size{0, 0}}; RadioLabel inputDefocusPause{&inputDefocusLayout, Size{0, 0}}; RadioLabel inputDefocusBlock{&inputDefocusLayout, Size{0, 0}}; RadioLabel inputDefocusAllow{&inputDefocusLayout, Size{0, 0}}; Group inputDefocusGroup{&inputDefocusPause, &inputDefocusBlock, &inputDefocusAllow}; }; struct HomePanel : VerticalLayout { auto construct() -> void; Canvas canvas{this, Size{~0, ~0}}; }; struct SettingsWindow : Window { SettingsWindow(); auto show(const string& panel) -> void; auto eventChange() -> void; HorizontalLayout layout{this}; ListView panelList{&layout, Size{125_sx, ~0}}; VerticalLayout panelContainer{&layout, Size{~0, ~0}}; VideoSettings videoSettings; AudioSettings audioSettings; InputSettings inputSettings; HotkeySettings hotkeySettings; EmulatorSettings emulatorSettings; OptionSettings optionSettings; FirmwareSettings firmwareSettings; PathSettings pathSettings; DriverSettings driverSettings; HomePanel homePanel; }; extern Settings settings; namespace Instances { extern Instance settingsWindow; } extern SettingsWindow& settingsWindow; extern VideoSettings& videoSettings; extern AudioSettings& audioSettings; extern InputSettings& inputSettings; extern HotkeySettings& hotkeySettings; extern EmulatorSettings& emulatorSettings; extern OptionSettings& optionSettings; extern FirmwareSettings& firmwareSettings; extern PathSettings& pathSettings; extern DriverSettings& driverSettings; ares-126/desktop-ui/settings/video.cpp000066400000000000000000000121351415063341600200610ustar00rootroot00000000000000auto VideoSettings::construct() -> void { setCollapsible(); setVisible(false); colorAdjustmentLabel.setText("Color Adjustment").setFont(Font().setBold()); colorAdjustmentLayout.setSize({3, 3}).setPadding(12_sx, 0); colorAdjustmentLayout.column(0).setAlignment(1.0); luminanceLabel.setText("Luminance:"); luminanceValue.setAlignment(0.5); luminanceSlider.setLength(101).setPosition(settings.video.luminance * 100.0).onChange([&] { settings.video.luminance = luminanceSlider.position() / 100.0; luminanceValue.setText({luminanceSlider.position(), "%"}); program.paletteUpdate(); }).doChange(); saturationLabel.setText("Saturation:"); saturationValue.setAlignment(0.5); saturationSlider.setLength(201).setPosition(settings.video.saturation * 100.0).onChange([&] { settings.video.saturation = saturationSlider.position() / 100.0; saturationValue.setText({saturationSlider.position(), "%"}); program.paletteUpdate(); }).doChange(); gammaLabel.setText("Gamma:"); gammaValue.setAlignment(0.5); gammaSlider.setLength(101).setPosition((settings.video.gamma - 1.0) * 100.0).onChange([&] { settings.video.gamma = 1.0 + gammaSlider.position() / 100.0; gammaValue.setText({100 + gammaSlider.position(), "%"}); program.paletteUpdate(); }).doChange(); emulatorSettingsLabel.setText("Emulator Settings").setFont(Font().setBold()); colorBleedOption.setText("Color Bleed").setChecked(settings.video.colorBleed).onToggle([&] { settings.video.colorBleed = colorBleedOption.checked(); if(emulator) emulator->setBoolean("Color Bleed", settings.video.colorBleed); }); colorBleedLayout.setAlignment(1).setPadding(12_sx, 0); colorBleedHint.setText("Blurs adjacent pixels for translucency effects").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); colorEmulationOption.setText("Color Emulation").setChecked(settings.video.colorEmulation).onToggle([&] { settings.video.colorEmulation = colorEmulationOption.checked(); if(emulator) emulator->setBoolean("Color Emulation", settings.video.colorEmulation); }); colorEmulationLayout.setAlignment(1).setPadding(12_sx, 0); colorEmulationHint.setText("Matches colors to how they look on real hardware").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); interframeBlendingOption.setText("Interframe Blending").setChecked(settings.video.interframeBlending).onToggle([&] { settings.video.interframeBlending = interframeBlendingOption.checked(); if(emulator) emulator->setBoolean("Interframe Blending", settings.video.interframeBlending); }); interframeBlendingLayout.setAlignment(1).setPadding(12_sx, 0); interframeBlendingHint.setText("Emulates LCD translucency effects, but increases motion blur").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); overscanOption.setText("Overscan").setChecked(settings.video.overscan).onToggle([&] { settings.video.overscan = overscanOption.checked(); if(emulator) emulator->setOverscan(settings.video.overscan); }); overscanLayout.setAlignment(1).setPadding(12_sx, 0); overscanHint.setText("Shows extended PAL CRT lines, but these are usually blank in most games").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); renderSettingsLabel.setText("N64 Render Settings").setFont(Font().setBold()); renderQualityLayout.setPadding(12_sx, 0); renderQualitySD.setText("SD Quality").onActivate([&] { settings.video.quality = "SD"; renderSupersamplingOption.setChecked(false).setEnabled(false); }); renderQualityHD.setText("HD Quality").onActivate([&] { settings.video.quality = "HD"; renderSupersamplingOption.setChecked(settings.video.supersampling).setEnabled(true); }); renderQualityUHD.setText("UHD Quality").onActivate([&] { settings.video.quality = "UHD"; renderSupersamplingOption.setChecked(settings.video.supersampling).setEnabled(true); }); if(settings.video.quality == "SD") renderQualitySD.setChecked(); if(settings.video.quality == "HD") renderQualityHD.setChecked(); if(settings.video.quality == "UHD") renderQualityUHD.setChecked(); renderSupersamplingOption.setText("Supersampling").setChecked(settings.video.supersampling && settings.video.quality != "SD").setEnabled(settings.video.quality != "SD").onToggle([&] { settings.video.supersampling = renderSupersamplingOption.checked(); }); renderSupersamplingLayout.setAlignment(1).setPadding(12_sx, 0); renderSupersamplingHint.setText("Scales HD and UHD resolutions back down to SD").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); renderSettingsLayout.setPadding(12_sx, 0); renderSettingsHint.setText("Note: render settings changes require a game reload to take effect").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel); #if !defined(VULKAN) //hide Vulkan-specific options if Vulkan is not available renderSettingsLabel.setCollapsible(true).setVisible(false); renderQualityLayout.setCollapsible(true).setVisible(false); renderSupersamplingLayout.setCollapsible(true).setVisible(false); renderSettingsHint.setCollapsible(true).setVisible(false); #endif } ares-126/desktop-ui/tools/000077500000000000000000000000001415063341600155455ustar00rootroot00000000000000ares-126/desktop-ui/tools/graphics.cpp000066400000000000000000000050001415063341600200440ustar00rootroot00000000000000auto GraphicsViewer::construct() -> void { setCollapsible(); setVisible(false); graphicsLabel.setText("Graphics Viewer").setFont(Font().setBold()); graphicsList.onChange([&] { eventChange(); }); graphicsView.setAlignment({0.0, 0.0}); exportButton.setText("Export").onActivate([&] { eventExport(); }); liveOption.setText("Live"); refreshButton.setText("Refresh").onActivate([&] { refresh(); }); } auto GraphicsViewer::reload() -> void { graphicsList.reset(); for(auto graphics : ares::Node::enumerate(emulator->root)) { ComboButtonItem item{&graphicsList}; item.setAttribute("node", graphics); item.setText(graphics->name()); } eventChange(); } auto GraphicsViewer::unload() -> void { graphicsList.reset(); eventChange(); } auto GraphicsViewer::refresh() -> void { if(auto item = graphicsList.selected()) { if(auto graphics = item.attribute("node")) { auto width = graphics->width(); auto height = graphics->height(); auto input = graphics->capture(); u32 offset = 0; image view; view.allocate(width, height); for(u32 y : range(height)) { auto output = view.data() + y * view.pitch(); for(u32 x : range(width)) { view.write(output, 255 << 24 | input[offset++]); output += view.stride(); } } graphicsView.setIcon(view); } } else { graphicsView.setIcon(); } } auto GraphicsViewer::liveRefresh() -> void { if(visible() && liveOption.checked()) refresh(); } auto GraphicsViewer::eventChange() -> void { refresh(); } auto GraphicsViewer::eventExport() -> void { if(auto item = graphicsList.selected()) { if(auto graphics = item.attribute("node")) { auto width = graphics->width(); auto height = graphics->height(); auto input = graphics->capture(); auto identifier = graphics->name().downcase().replace(" ", "-"); auto datetime = chrono::local::datetime().replace("-", "").replace(":", "").replace(" ", "-"); auto location = emulator->locate({Location::notsuffix(emulator->game->location), "-", identifier, "-", datetime, ".png"}, ".png", settings.paths.debugging); Encode::PNG::RGB8(location, input.data(), width * sizeof(u32), width, height); } } } auto GraphicsViewer::setVisible(bool visible) -> GraphicsViewer& { if(visible) refresh(); VerticalLayout::setVisible(visible); return *this; } ares-126/desktop-ui/tools/manifest.cpp000066400000000000000000000024601415063341600200610ustar00rootroot00000000000000auto ManifestViewer::construct() -> void { setCollapsible(); setVisible(false); manifestLabel.setText("Manifest Viewer").setFont(Font().setBold()); manifestList.onChange([&] { eventChange(); }); manifestView.setEditable(false).setFont(Font().setFamily(Font::Mono)); } auto ManifestViewer::reload() -> void { manifestList.reset(); for(auto node : ares::Node::enumerate(emulator->root)) { if(auto pak = node->pak()) { if(auto fp = pak->read("manifest.bml")) { ComboButtonItem item{&manifestList}; item.setAttribute("node", node); item.setText(node->name()); } } } eventChange(); } auto ManifestViewer::unload() -> void { manifestList.reset(); eventChange(); } auto ManifestViewer::refresh() -> void { if(auto item = manifestList.selected()) { if(auto node = item.attribute("node")) { if(auto pak = node->pak()) { if(auto fp = pak->read("manifest.bml")) { manifestView.setText(fp->reads()); } } } } else { manifestView.setText(); } } auto ManifestViewer::eventChange() -> void { refresh(); } auto ManifestViewer::setVisible(bool visible) -> ManifestViewer& { if(visible) refresh(); VerticalLayout::setVisible(visible); return *this; } ares-126/desktop-ui/tools/memory.cpp000066400000000000000000000052541415063341600175670ustar00rootroot00000000000000auto MemoryEditor::construct() -> void { setCollapsible(); setVisible(false); memoryLabel.setText("Memory Editor").setFont(Font().setBold()); memoryList.onChange([&] { eventChange(); }); memoryEditor.setFont(Font().setFamily(Font::Mono)); memoryEditor.setRows(24); exportButton.setText("Export").onActivate([&] { eventExport(); }); gotoLabel.setText("Goto:"); gotoAddress.setFont(Font().setFamily(Font::Mono)).onActivate([&] { auto address = gotoAddress.text().hex(); memoryEditor.setAddress(address); gotoAddress.setText(); }); liveOption.setText("Live"); refreshButton.setText("Refresh").onActivate([&] { memoryEditor.update(); }); } auto MemoryEditor::reload() -> void { memoryList.reset(); for(auto memory : ares::Node::enumerate(emulator->root)) { ComboButtonItem item{&memoryList}; item.setAttribute("node", memory); item.setText(memory->name()); } gotoAddress.setText(); eventChange(); } auto MemoryEditor::unload() -> void { memoryList.reset(); gotoAddress.setText(); eventChange(); } auto MemoryEditor::refresh() -> void { memoryEditor.update(); } auto MemoryEditor::liveRefresh() -> void { if(visible() && liveOption.checked()) refresh(); } auto MemoryEditor::eventChange() -> void { if(auto item = memoryList.selected()) { if(auto memory = item.attribute("node")) { memoryEditor.setLength(memory->size()); memoryEditor.onRead([=](u32 address) -> u8 { return memory->read(address); }); memoryEditor.onWrite([=](u32 address, u8 data) -> void { return memory->write(address, data); }); } } else { memoryEditor.setLength(0); memoryEditor.onRead(); memoryEditor.onWrite(); } memoryEditor.setAddress(0); if(visible()) memoryEditor.update(); } auto MemoryEditor::eventExport() -> void { if(auto item = memoryList.selected()) { if(auto memory = item.attribute("node")) { auto identifier = memory->name().downcase().replace(" ", "-"); auto datetime = chrono::local::datetime().replace("-", "").replace(":", "").replace(" ", "-"); auto location = emulator->locate({Location::notsuffix(emulator->game->location), "-", identifier, "-", datetime, ".bin"}, ".bin", settings.paths.debugging); if(auto fp = file::open(location, file::mode::write)) { for(u32 address : range(memory->size())) { fp.write(memory->read(address)); } } } } } auto MemoryEditor::setVisible(bool visible) -> MemoryEditor& { if(visible) refresh(); VerticalLayout::setVisible(visible); return *this; } ares-126/desktop-ui/tools/properties.cpp000066400000000000000000000025371415063341600204540ustar00rootroot00000000000000auto PropertiesViewer::construct() -> void { setCollapsible(); setVisible(false); propertiesLabel.setText("Properties Viewer").setFont(Font().setBold()); propertiesView.setEditable(false).setFont(Font().setFamily(Font::Mono)); liveOption.setText("Live"); refreshButton.setText("Refresh").onActivate([&] { refresh(); }); } auto PropertiesViewer::reload() -> void { propertiesList.reset(); for(auto properties : ares::Node::enumerate(emulator->root)) { ComboButtonItem item{&propertiesList}; item.setAttribute("node", properties); item.setText(properties->name()); } eventChange(); } auto PropertiesViewer::unload() -> void { propertiesList.reset(); eventChange(); } auto PropertiesViewer::refresh() -> void { if(auto item = propertiesList.selected()) { if(auto properties = item.attribute("node")) { propertiesView.setText(properties->query()); } } else { propertiesView.setText(); } } auto PropertiesViewer::liveRefresh() -> void { if(visible() && liveOption.checked()) refresh(); } auto PropertiesViewer::eventChange() -> void { refresh(); } auto PropertiesViewer::setVisible(bool visible) -> PropertiesViewer& { if(visible) refresh(); VerticalLayout::setVisible(visible); return *this; } ares-126/desktop-ui/tools/streams.cpp000066400000000000000000000025141415063341600177310ustar00rootroot00000000000000auto StreamManager::construct() -> void { setCollapsible(); setVisible(false); streamLabel.setText("Audio Streams").setFont(Font().setBold()); streamList.onToggle([&](auto cell) { if(auto item = streamList.selected()) { if(auto stream = item.attribute("node")) { stream->setMuted(!cell.checked()); } } }); } auto StreamManager::reload() -> void { streamList.reset(); streamList.setHeadered(); streamList.append(TableViewColumn().setIcon(Icon::Device::Speaker)); streamList.append(TableViewColumn().setText("Name").setExpandable()); streamList.append(TableViewColumn().setText("Channels").setAlignment(1.0)); streamList.append(TableViewColumn().setText("Frequency").setAlignment(1.0)); for(auto stream : ares::Node::enumerate(emulator->root)) { TableViewItem item{&streamList}; item.setAttribute("node", stream); item.append(TableViewCell().setCheckable().setChecked()); item.append(TableViewCell().setText(stream->name())); item.append(TableViewCell().setText(stream->channels())); item.append(TableViewCell().setText({u32(stream->frequency() + 0.5), "hz"})); } streamList.resizeColumns(); streamList.column(0).setWidth(16); } auto StreamManager::unload() -> void { streamList.reset(); } ares-126/desktop-ui/tools/tools.cpp000066400000000000000000000062611415063341600174160ustar00rootroot00000000000000#include "../desktop-ui.hpp" #include "manifest.cpp" #include "memory.cpp" #include "graphics.cpp" #include "streams.cpp" #include "properties.cpp" #include "tracer.cpp" namespace Instances { Instance toolsWindow; } ToolsWindow& toolsWindow = Instances::toolsWindow(); ManifestViewer& manifestViewer = toolsWindow.manifestViewer; MemoryEditor& memoryEditor = toolsWindow.memoryEditor; GraphicsViewer& graphicsViewer = toolsWindow.graphicsViewer; StreamManager& streamManager = toolsWindow.streamManager; PropertiesViewer& propertiesViewer = toolsWindow.propertiesViewer; TraceLogger& traceLogger = toolsWindow.traceLogger; ToolsWindow::ToolsWindow() { panelList.append(ListViewItem().setText("Manifest").setIcon(Icon::Emblem::Binary)); #if !defined(PLATFORM_MACOS) // Cocoa hiro is missing the hex editor widget panelList.append(ListViewItem().setText("Memory").setIcon(Icon::Device::Storage)); #endif panelList.append(ListViewItem().setText("Graphics").setIcon(Icon::Emblem::Image)); panelList.append(ListViewItem().setText("Streams").setIcon(Icon::Emblem::Audio)); panelList.append(ListViewItem().setText("Properties").setIcon(Icon::Emblem::Text)); panelList.append(ListViewItem().setText("Tracer").setIcon(Icon::Emblem::Script)); panelList->setUsesSidebarStyle(); panelList.onChange([&] { eventChange(); }); panelContainer.setPadding(5_sx, 5_sy); panelContainer.append(manifestViewer, Size{~0, ~0}); panelContainer.append(memoryEditor, Size{~0, ~0}); panelContainer.append(graphicsViewer, Size{~0, ~0}); panelContainer.append(streamManager, Size{~0, ~0}); panelContainer.append(propertiesViewer, Size{~0, ~0}); panelContainer.append(traceLogger, Size{~0, ~0}); panelContainer.append(homePanel, Size{~0, ~0}); manifestViewer.construct(); memoryEditor.construct(); graphicsViewer.construct(); streamManager.construct(); propertiesViewer.construct(); traceLogger.construct(); homePanel.construct(); setDismissable(); setTitle("Tools"); setSize({700_sx, 405_sy}); setAlignment({1.0, 1.0}); setMinimumSize({480_sx, 320_sy}); } auto ToolsWindow::show(const string& panel) -> void { for(auto& item : panelList.items()) { if(item.text() == panel) { item.setSelected(); eventChange(); break; } } setVisible(); setFocused(); panelList.setFocused(); } auto ToolsWindow::eventChange() -> void { manifestViewer.setVisible(false); memoryEditor.setVisible(false); graphicsViewer.setVisible(false); streamManager.setVisible(false); propertiesViewer.setVisible(false); traceLogger.setVisible(false); homePanel.setVisible(false); bool found = false; if(auto item = panelList.selected()) { if(item.text() == "Manifest" ) found = true, manifestViewer.setVisible(); if(item.text() == "Memory" ) found = true, memoryEditor.setVisible(); if(item.text() == "Graphics" ) found = true, graphicsViewer.setVisible(); if(item.text() == "Streams" ) found = true, streamManager.setVisible(); if(item.text() == "Properties") found = true, propertiesViewer.setVisible(); if(item.text() == "Tracer" ) found = true, traceLogger.setVisible(); } if(!found) homePanel.setVisible(); panelContainer.resize(); } ares-126/desktop-ui/tools/tools.hpp000066400000000000000000000100771415063341600174230ustar00rootroot00000000000000struct ManifestViewer : VerticalLayout { auto construct() -> void; auto reload() -> void; auto unload() -> void; auto refresh() -> void; auto eventChange() -> void; auto setVisible(bool visible = true) -> ManifestViewer&; Label manifestLabel{this, Size{~0, 0}, 5}; ComboButton manifestList{this, Size{~0, 0}}; TextEdit manifestView{this, Size{~0, ~0}}; }; struct MemoryEditor : VerticalLayout { auto construct() -> void; auto reload() -> void; auto unload() -> void; auto refresh() -> void; auto liveRefresh() -> void; auto eventChange() -> void; auto eventExport() -> void; auto setVisible(bool visible = true) -> MemoryEditor&; Label memoryLabel{this, Size{~0, 0}, 5}; ComboButton memoryList{this, Size{~0, 0}}; HexEdit memoryEditor{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Button exportButton{&controlLayout, Size{80, 0}}; Label gotoLabel{&controlLayout, Size{0, 0}, 2}; LineEdit gotoAddress{&controlLayout, Size{70, 0}}; Widget spacer{&controlLayout, Size{~0, 0}}; CheckLabel liveOption{&controlLayout, Size{0, 0}, 2}; Button refreshButton{&controlLayout, Size{80, 0}}; }; struct GraphicsViewer : VerticalLayout { auto construct() -> void; auto reload() -> void; auto unload() -> void; auto refresh() -> void; auto liveRefresh() -> void; auto eventChange() -> void; auto eventExport() -> void; auto setVisible(bool visible = true) -> GraphicsViewer&; Label graphicsLabel{this, Size{~0, 0}, 5}; ComboButton graphicsList{this, Size{~0, 0}}; Canvas graphicsView{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Button exportButton{&controlLayout, Size{80, 0}}; Widget spacer{&controlLayout, Size{~0, 0}}; CheckLabel liveOption{&controlLayout, Size{0, 0}, 2}; Button refreshButton{&controlLayout, Size{80, 0}}; }; struct StreamManager : VerticalLayout { auto construct() -> void; auto reload() -> void; auto unload() -> void; Label streamLabel{this, Size{~0, 0}, 5}; TableView streamList{this, Size{~0, ~0}}; }; struct PropertiesViewer : VerticalLayout { auto construct() -> void; auto reload() -> void; auto unload() -> void; auto refresh() -> void; auto liveRefresh() -> void; auto eventChange() -> void; auto setVisible(bool visible = true) -> PropertiesViewer&; Label propertiesLabel{this, Size{~0, 0}, 5}; ComboButton propertiesList{this, Size{~0, 0}}; TextEdit propertiesView{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Widget spacer{&controlLayout, Size{~0, 0}}; CheckLabel liveOption{&controlLayout, Size{0, 0}, 2}; Button refreshButton{&controlLayout, Size{80, 0}}; }; struct TraceLogger : VerticalLayout { auto construct() -> void; auto reload() -> void; auto unload() -> void; auto eventToggle(ListViewItem) -> void; file_buffer fp; Label tracerLabel{this, Size{~0, 0}, 5}; ListView tracerList{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Button selectAllButton{&controlLayout, Size{96, 0}}; Button unselectAllButton{&controlLayout, Size{96, 0}}; CheckLabel traceToTerminal{&controlLayout, Size{0, 0}}; CheckLabel traceToFile{&controlLayout, Size{0, 0}}; CheckLabel traceMask{&controlLayout, Size{0, 0}}; }; struct ToolsWindow : Window { ToolsWindow(); auto show(const string& panel) -> void; auto eventChange() -> void; HorizontalLayout layout{this}; ListView panelList{&layout, Size{125_sx, ~0}}; VerticalLayout panelContainer{&layout, Size{~0, ~0}}; ManifestViewer manifestViewer; MemoryEditor memoryEditor; GraphicsViewer graphicsViewer; StreamManager streamManager; PropertiesViewer propertiesViewer; TraceLogger traceLogger; HomePanel homePanel; }; namespace Instances { extern Instance toolsWindow; } extern ToolsWindow& toolsWindow; extern ManifestViewer& manifestViewer; extern MemoryEditor& memoryEditor; extern GraphicsViewer& graphicsViewer; extern StreamManager& streamManager; extern PropertiesViewer& propertiesViewer; extern TraceLogger& traceLogger; ares-126/desktop-ui/tools/tracer.cpp000066400000000000000000000030311415063341600175260ustar00rootroot00000000000000auto TraceLogger::construct() -> void { setCollapsible(); setVisible(false); tracerLabel.setText("Trace Logger").setFont(Font().setBold()); tracerList.onToggle([&](auto item) { eventToggle(item); }); selectAllButton.setText("Select All").onActivate([&] { for(auto item : tracerList.items()) { if(item.checked()) continue; item.setChecked(true); eventToggle(item); } }); unselectAllButton.setText("Unselect All").onActivate([&] { for(auto item : tracerList.items()) { if(!item.checked()) continue; item.setChecked(false); eventToggle(item); } }); traceToTerminal.setText("Trace To Terminal"); traceToFile.setText("Trace To File"); traceMask.setText("Mask").onToggle([&] { for(auto instruction : ares::Node::enumerate(emulator->root)) { instruction->setMask(traceMask.checked()); } }); } auto TraceLogger::reload() -> void { tracerList.reset(); for(auto tracer : ares::Node::enumerate(emulator->root)) { ListViewItem item{&tracerList}; item.setAttribute("tracer", tracer); item.setCheckable(); item.setText({tracer->component(), " ", tracer->name()}); } } auto TraceLogger::unload() -> void { tracerList.reset(); if(fp) fp.close(); } auto TraceLogger::eventToggle(ListViewItem item) -> void { if(auto tracer = item.attribute("tracer")) { tracer->setEnabled(item.checked()); } } ares-126/genius/000077500000000000000000000000001415063341600136135ustar00rootroot00000000000000ares-126/genius/GNUmakefile000066400000000000000000000030611415063341600156650ustar00rootroot00000000000000name := genius build := stable flags += -I.. nall.path := ../nall include $(nall.path)/GNUmakefile hiro.path := ../hiro hiro.resource := data/$(name).rc include $(hiro.path)/GNUmakefile objects := obj/genius.o obj/genius.o: genius.cpp all: $(hiro.objects) $(objects) $(info Linking out/$(name) ...) +@$(compiler) -o out/$(name) $(hiro.objects) $(objects) $(hiro.options) $(options) ifeq ($(platform),macos) rm -rf out/$(name).app mkdir -p out/$(name).app/Contents/MacOS/ mkdir -p out/$(name).app/Contents/Resources/ mv out/$(name) out/$(name).app/Contents/MacOS/$(name) cp data/$(name).plist out/$(name).app/Contents/Info.plist sips -s format icns data/$(name).png --out out/$(name).app/Contents/Resources/$(name).icns endif verbose: hiro.verbose nall.verbose all; clean: ifeq ($(platform),macos) rm -rf out/$(name).app endif $(call delete,obj/*) $(call delete,out/*) install: all ifeq ($(platform),macos) cp -R out/$(name).app /Applications/$(name).app else ifneq ($(filter $(platform),linux bsd),) mkdir -p $(prefix)/bin/ mkdir -p $(prefix)/share/applications/ mkdir -p $(prefix)/share/icons/ mkdir -p $(prefix)/share/$(name)/ cp out/$(name) $(prefix)/bin/$(name) cp data/$(name).desktop $(prefix)/share/applications/$(name).desktop cp data/$(name).png $(prefix)/share/icons/$(name).png endif uninstall: ifeq ($(platform),macos) rm -rf /Applications/$(name).app else ifneq ($(filter $(platform),linux bsd),) rm -f $(prefix)/bin/$(name) rm -f $(prefix)/share/applications/$(name).desktop rm -f $(prefix)/share/icons/$(name).png endif -include obj/*.d ares-126/genius/data/000077500000000000000000000000001415063341600145245ustar00rootroot00000000000000ares-126/genius/data/genius.Manifest000066400000000000000000000015261415063341600175120ustar00rootroot00000000000000 true/pm PerMonitorV2, PerMonitor ares-126/genius/data/genius.desktop000066400000000000000000000001771415063341600174160ustar00rootroot00000000000000[Desktop Entry] Name=genius Comment=Emulator Exec=genius Icon=genius Terminal=false Type=Application Categories=Game;Emulator; ares-126/genius/data/genius.ico000066400000000000000000001015541415063341600165200ustar00rootroot00000000000000 hF  00 %V nH:(   0ii0'j^'QBB0BeXN>>_Rupe]OveXFJ9`Rh\yWHUF]OTEi0ZKj^~SDcV3ixngZl`YKypiVGl`vleYzqfh[RBmbgZXIfYii]yi\i0|si]YJ~v0ZLlafZfYma(aT(=WHyp>'zq'0ii0( @   !! UV#dWqf#byoN>P@c}SDP@N>i]P@P@P@K:shP@O>P@O?\NP@QAP@N=eYshx~[MO?XIP@TDQAodYJSCrgqfN=XImaM=CP@"P@#`RM=\NxoN=YKZKP@O?O?P@O?P@P@OcVN=WH|sM=]OSCO?P@O?O?[LfYRBjP@`SN>YJ~uM=`RVGO?O?O?^Q|UVGN>fZvM=bUZKO?O?YJxVvO?P@wM=eX^PO>O?i] aSN>`SwMRBzq |O?P@wMUF!zfYtiTDO?\MwMQAbUodSDP@N>mbzpN>VGSDN=zq!vl\NO>N>N>VG|sN>O>\NgZUEy i]ti|sN=YJmbO?si zqMN>^PtiMN>ZK$laLXJTDO?O>b~uN>UEmbc##VV !! ??(0` $ &E`t}}t`E& DDjlaVGj ^}P@O?UF_ )[MO?P@N>k`)IgZO?P@P@P@VGJ]bUO?P@P@P@P@P?^P@P@P@P@/N>]UFM=N>N>P@P@P@N>v^P@P@P@{P@O?^PdW[LgZrhtiUFP@P@N>xnKP@P@P@"P@O?P@VGocpeN>P@N>vk*|]ON>N>UFyoyN>P@N>wmvxntjwmk`O?sP@TP@/P@ P@^g[O?O?O?cVO?P@N>zq]OO?N>N>N>N>O?P@P@P@P@P@ncO?P@O>\NO?P@N>wSCO?P@P@P@P@P@P@O>O?P@P@P@ jqfO?P@O?ZLP@P@O?UEO?P@P@P@P@O?O>UFi]qfO?:P@P@peO?P@O?]OP@P@O?XJO?P@P@P@O?O>YJyoDfZO?P@N>i]PAP@P@]OO?P@P@P@O>WHyoEYJO?P@P@}QAP@P@aTO?P@P@O?RCqf }P@P@O?[MQAP@QAgZO>P@P@O>[M &g[O?P@O?}tQAP@RBqfO?P@P@O?i]&DSCP@O?[MQAP@RC~uP@P@O?RBzpE_h[O>P@O?wQAP@SDSCP@O?UF`r|O?P@O?YKQAP@TEYJO?O?YJs|wmWHP@WIpeRBP@P@O?k`P@P@VGdWO?P@_Q}||MO?N>QB`Szp~vSDP@P@P@O?zpP@P@SD_QP@P?VG}rwvlj^\NSCN>N>N>P@P@P@P@P@N=siP@P@P@O?O?O?P@nbs_vbURBO>P@P@O?P@k`P@P@P@O>eY}sTDN>bT`Dl`TDRCaSP@P@O?aT~SCN>YJE&O?P@TEyQAO?SDv& O?O?XIypP@O?P@pe O?P?XImbO?P@O?bTD_RQAgZO?P?WI_QO?P@O?UFxnEwmQAO?P?TE~O>P?WHRBP@P@P@O>UEjqfO?P@P@O?YJ{O>P@WHh\O>P@P@P@RBkvlO?P@P@P@N>vlxN>P@VGwN>P@O?P@|s_QBO?O?N>SDtj|sN>P@UFN=N>VG{` TDVGaSxnwnN>P@TEmaqg *qfN>P@RC*Jj]N>P@P@J]aSO?P@N>~v^]WHP?P@O?bU^JP@P@P@O?TEJ)g[N>O?N>RBuk) _l`WH_Rqf_ jjDD &D_s||s_E& ????PNG  IHDR\rfH5IDATxw\Gv{; AD&D Z]IUNeimӳ,'e-+<ْeI+i\&$ DΘ;GL7 39UuΩsJ*UTRJ*UTRJ*UTRJ*(vkI~HB tԳ̷2@H?iwT -)SITft|>e6ҥp. Lf\`60hD y%1g B ~p.׀[RқNrS>a6 400X,i[춎B+ |NgȪB( OHءzkPB?w6F'ECVš:]\R q G'8'[STGao-~/ = u+QNQYعSR2xxX:OU~dPC`\2UTG&oH F#20{2v2UԮ i#]TG1vTB2-^D _UqM53)gxTGn/Թk(_}uLEߣ UعSr&473xq`-*JN`,TG*m$1 2B NЯh@L%!վy( *hפDVw:2|:3"!vG#r#NpPEEM]OåGnT20P/K&V:"صKɀDP[_VP{KI{g!Ï.t#nM2KcG}Huΰ=P= :&fl/%A:#ykoB>DJS'hjLj:Ϝ~".\]A-C ^U ? f4+[w%ޙlg(!X :3,i 1m]#^P00&`ތ@g/94 >{;;dNi>V- 3ѓ[rS/;9`Bg_G04 >d*閰ոXb ZW%+ *wd&`BxXtvgPvJ!V{yXpI hsjIm!<>apU'nnBb,¿J?j.j\9PBgO ow(aoi$%ns8!j2̧?%zeǻGz8|(%,dz>w9-|aEE=-k [B!!>:_P +;@l^ٝXsDBM\4z;+)A:|PI\ione*}ViR_P۹bt]|Qp@/.0kbA! >BUiTرCZQrQ[_sH M^ %ۓFGGͥtօ\1TرC".)=I9uM>GA4!ms R ߺ($%P | A)5OPy+C¤͓7i0f  U({`>&ߢLc̜+&teOPjD&W(lb[Q%*@Z&{z55 N򢉊%0@3w.AY y/Wʵ/A:xSwA(*_+,_` 0ým*4R`MuO`p,G%PV `)yusYT,\457I²q%",Agn-Xy;wJb1^ UPs"1)Qnl?M m!?۹/חN,h~6m*6RB]WcAkoѧG CV>a+gmʥPG i(W@Ţ uB?ZT| Tp/'44lH4If|уۊ=UVЫ7d*XQEQ;vH2~ɂuVMlihڽ+;gw}zy~9xX] ߢr;HHޙd(f`G# tBA_pM[2~SN!x*%2 z*';es \+O=B[ ڭ8ia]n ש hiW?5n^ ]WVB mjܮR0sG' uY;)KJMEץTI IAyq|>!Ɲo'ld2tFttp%uME$ӧxi.HJD.LqX̮ވs3I,Ҩq1eI $*bcL"qJv9TZ01,OInw$9qfP@y~OQy $v t] SҞA*5pbGhJZ&-=,h 0vH+""Ppv+K^0`p _ iNe!n%ZU|~)J(3cӛ}[Q.,[Ԫ$|v~]ƍw8ɔ7$8~ze B,i  zT_qJ =nj뿦)hdҰBny $J<7;m>GWo*Bv [}]:{R)[WOw0d=A!%BE : 2ua.Q)ܼ{~/=U.l]eYχM<4]wxzrC<[LB+aW|l-$|fGz:?nk>']S^ ;SNA@ .]d H {;;8}JV&U;vHi~e,VJ) ޲~/⵸SDK,chv?/8 w:l# B?ǁo$SV#/:]í Z`M+7L;h<d  eHc! |xwwrvJ@~aGDŽ2^[GJgoQ,h`9C4nALM+MKx / 8χ&kLG}N* G[oeWkH X$] -اsJnx85ӕc7 )]!x6cu@581$̙yb{p>%!v$ϦP2Z v>$lt+@%CmW+_69r ?ZKKJA>93H25 dZ;%BpN+'gn ڮ]ET c޼&Bm.iɑ}H"Ҽ$Un6s~:Hv=:nT'g5`c;R^6pEݑ2|xtڦFl :+%||jOcn-~ L9jtҾs_YU3pJw H*|4@*-NmHh3R2MlۖC 8V- pV9/Ds=8F" NVrӾ(<|MJ{m)M`:*WIOK~e-P\gpȆh3pv ݽikA_ ̴a|XP䉔hl\SǒAttٳL@*%rPrEp5ɳ{u"̸L~t )U:k#,i  VG ۄIXnŋ3 }فGQ^6[[XiH Ɩ,_*:Z3^t> sר0χ ꗿ!7[3 x_9Zè]!N`]a`}Rv B DhJrRM!;]r?,is@Ǐ }R%ݼ5k|fP>oO cyxbR& YN%YMaGa< =kkRXbBfwLMQ+(RrRGkB$-38w9qaumtlI}{*J !4Sl8֖,?/?9UscK6a5i/b[!(?rg|Pk)!VKI-ЗrV ,(v/|roIH#齬pX0'P)[ц㹾!MofGk`RB%Pڻ롻H?)aT//>ȢyJ?̼vɜۍr5U_aUBPW us㶽I5 Bi_hcPތ.5RW߉Vuw•jY^cKx ޭDX18 '`^ ZUy0vZQ}ϩsJ u5.6c`9l`p2 0d l}R>_ #z;|jggwJ) Ln6!NglI!%4OymY|zS*WHBTpjv\(soJs7X1 8ZwJv ]IV=}y] *d*<I-T؍'R$ƹp5JGWdZ 1.!d ə Qn'xlI rm;}2: 뿐;]nEa֭%௞H#GzQ. 7v`34Wn9%ƭј}M 8cJgT-)(mx5C=lP-n{'VղlaW?(`H ސawnu$x5՛ } am]ٓ2YB[{dVpϣì[Q[V{ +J:#Uq0 P@jpO!2 #{ ~;(Cῧg݉p. a,5&5ټ.BjpO0Jς*W^tAЯQW㢮ƍߧ#lriWC=@<5-%?NJ5ZaL?#2<"mdx{:5@MEcz*)JP_%{.mP ӛ}׺yҊ7H%CWႹAB06H)3Ï ߣ3yC O?^uUqQw40[zY ړ FI9^Ii47yhg4n]Wh y] W4jq$'[IxEhk |&  c d Z'WױpG~)Uƈy̙z<"VDJ.Ba\SG!3ъzO>VGO_ZnmPivb0aŢP5WMEK}2T5ɂ^Z̘#(u" Mdpk֍>H 5.6N7x 2/=`4ú5x'VBb0J! ,["yڻRۅڻ]z7sg7+@Sk̍mFÜQα,/@ކju[eC^ȱ>6#T.)sgԹ8 10.ߤV^1G(gaKJM1#n6#]@ h  )yAzR9owXgfxz}nF@ H:B˧Ժ9qv/PsJMn3VȽӒS7UP6trb\_0c*!f{ؚE²/qj[/m l845yj Wę \9ic 48r &ҶP0 9j^"%ncukCK@7{?ɳaIH J! +*NgJ[s,p6ۏd8\vTSa7$|XoMEK=]YVãEf s>LfGdP.1C9LI맧ϙm4o-p/ޏʼnjYE{k ^VC_Fo~ϫJ͛švٌ89wupbqی6cK㟳8k7~| :݆l?`ۥ"Bsj|Z|EUC\Δ 2?}QLϑ4_`(1;M|M4O*n]a.];"%U|PDqpi0S̏QrAz7n/Pi|=tJP|kƣ2nF)9Th݊q*՗ Xr`tC´^yd&ڰΡ} KI(Lg(cRCQ ~/՛>u+ o3l'5m-at[GJxj {O?'هnZ2dtW(3o@|ǵ[T_- vR/3m}1oZ[S:Ձys3u<;DՇ"'ǵQey| (JB@gO e/x;BcRcnGc f<4(trjLƑAxMJ2n8;7J'GSw ᦃ:7ȳmÔ(aS5Z_h\Є 6;}!ʫowN.\m#8ȱe>tiBJ ! 7{W w'uuE^5;)3m}4S=D=S<޹b)OGyuW'(ɔD#xC:q+[Q~ȒHw*Ž2CJ[Kx?V3& epRww;8unyhj?jeCΠ׿>>9㬱Hjiw~T#$"6JRF F)eXWbǧIacAe͋|@$BUh` z9bI[+kq a}?QG҈v)uEyyho% he ?-^jB.tM̯!Ts// v쐠c0 'Md!%̛gҊP^yD%KJX87=GzH=XH۟!nO2wf=:kηQq8ym!O`u@J6tHIIVg]8(>>BDcsk!tI!̜cv)M~=u&Cדn#.>C-sꩳMu u0 aK]]QPtƂ ɝ$;l:7S'{:S񳗢O}+rk3]y+A {~P4#:\OPjK4q_\ cEO.ތWp~Th1!apyjˈom6'5aov{3: F=YoɔQ#A]E5_Fyޑ-uR6rɽ|?Ͷ)aN:S!tnǷyֶM L\f쾝 @mg2U^V5)aJ-"%iu0a$o5gvRi>ɍ!ݒLFL,; `-Ⱥf22y1+ysm}S Wo&xcOϛM euXodL*=y'`1r/mWlCY%(oN܅mA@#7^m(3p$kװimt"7/mLt^u@͘ZjNONr>bdtKoyNtFڞGJu(4G|KOJ~AU;n җXkE={~Wc:\]WJaڮ Ff4{9'mұ=I6*yXn]9|dڹVrY^g񒲬-^^z%uA k3,zc *P 8LJ۝:7Cm|?T}ĘR+Ty\)&=@i쭤>|]JNo9bxEu|\N)UEsr3= TlƺXJr8R DKڂLᣓ^Dʁk@pH}zU= t Y f8|ONt>a_QA' B XJ&RB}-G?;ǧt=F"W|1j.E݁({_mW?kJp^܈3u7#Gk$+I#w%'x4!cd/Woƹx5Ɲ$=}i 1>G횯2~fH@'eE *Џ # fݎ+PG;dZ·5 3A+Zǖְla#wb y<1)Uy3̙'4۟WeL3$Si|5w^8{qߘB(nah j[nG)> ƌ]:kc_iNrsZ4yTު/*7 cb(l;z=4&7Ag2yA*0H$]dR)dJJI҆ze Y]"4ףj֏ǭ{zɾ }5 ? o~OH/v] 5Qܬ^Z¹lh%aP k̮d}vjiԆ>,#̳H!Ou}/~g~j `KqrwBmA?&bW*m08bDV*;އo!R)q~u#v ^`LUodo6D8dGP/pM)Y+\!r?_Lie#*ڛ(j'۟&PD"~w`J[hlU^p{ҩ"l`X?cB̙0JT qIg Z;˜G8|O.b0 Q1ǿo{<>.2Od:bu 2̺z.vʇV}wf8wɹ܈"U%`0?Zp:3X4/i^||Wn9 I2~HI Ԅ]n>LвƢCtR *6p ?kVy+_4<_f-~ƭ |PB|of0zo:IAT{O'Щ uqQv}K_,iz.^~ ùUZDu`/}oH!!sN2i8I^Ϭk4=|4Z+~@,nn _L)I"?u%UpH( ?,^:S>֗t3YJUF}!G(޹8$uxIe^[;g~&,zӈ&mmQS =l@t]itZE9+K RAKA>#`?*f9|dӆHOvR2IW=8]={#~f^3_QnR~AHCG}f%@^@`xUJb›=}:Mt64ga:54Qf;;^jh7R0L~?pLJq[ ӆ+I$;ீ w%yuW']Z ĪZ\]WUSBp<^* a[k3hW>.@#Ƚ=&MhAj,ر29^.ylr9)9iŷ?k0%4bi,}Q?}S,n :l¹|SJvIA2nlZyFZ-Te\~%`g)Gd(%`زAJ4jIMYR Wa7_njn捡DI+;4oP;P@g:PO}]d"{5"5[)W}ypKnXR\ WNb z"(ThERSY+EY(P;T Mc;󨌨e0xz}p o%Dy5MߨljCׯ~m+VҕüLZJ@iqS,5eI6={?:~ W6)e4p .Ac]82Qs[5B~9*,EPPgԕLzpY_1P? +W3` MLBp{0 hk3MzOIn^oQ;a巀|>,M D\ThU5OC?T /vƃ0g76rϫ1WC{"mQIE(*??2VJc Ԇ :7MGuǤ;P:B_xi^e,@8gׁ#PƾQYi4^6O pLa盘97ѯ_~@tV^y(f)5Ts._bقPAː|;[J;<@_Q?+򯀿G*>'#;vH+ m倻Xm x%z7/?ȤƊP!xJ&S~Au]g;| ^(L}n%x펜I 5!67:=B 0?Ni+Ց{Jb14¨?aLӃ~dJ>T jC:ԭ9%IԖ=@Fm;P8@'-|UA//OxmC2]!w 02(2BD0b1ظ:eTRJ*UTRJ*UTRJ*UTR[:IENDB`ares-126/genius/data/genius.plist000066400000000000000000000010341415063341600170710ustar00rootroot00000000000000 CFBundleIdentifier org.byuu.genius CFBundleDisplayName genius CFBundleExecutable genius CFBundleIconFile genius.icns NSHighResolutionCapable NSSupportsAutomaticGraphicsSwitching ares-126/genius/data/genius.png000066400000000000000000000342151415063341600165310ustar00rootroot00000000000000PNG  IHDR\rfgAMA a cHRMz&u0`:pQ< pHYsZZp#}bKGDC7GIDATx} xVչHzlzZkm{ӞQH$32 2,(0@>ǣk=zZ C IIޕ&dk=<K߻  eYfeYfeYfeYfeYfeYfeYfgJKB))Vn L&Cg?Voo BclYN.bR" МЍ00p1s_ M=?ow> 3G~~ `YfIXcFu=ߕ&I(񀱇˄l~oK:t.\1K}du3aلyaF߈+m #c,dY FhH/ܵORcay-0$mhf~G ^؟pv9O]6F)x8J#Yy0O}M |J(4+EyдH`YZׇZdfb?CXK8A(7Y5?2Ck0?M`1\AO(U6D`+>w:OO/v5g@%KDzmբcծqۀlk qS9\Sl bHI)gd2w o^޽h`V mo#殾+r:nŴ>Zivπ~6?o>jKoik|kbkᄇ JyRY5!pM/s2cZ_kX履˴̶&OϷ6l.B߽K s,Bo^V ."9YJDGxiC{o~K^TB2cRbAS8>j |N<'ڐ_NNL|QL>D=eA(&:G?L'Əﺡ'cVI0-/(ee<.F}Oˉ4Rv1xdY6_ Rq M 7Dw7_xJ/ Lf".r8JrG8KhPZ<`DϘq`6~>ǥ|Bdwպb-) 1(=i\ S|7<0žOizf=  A`< 1:kQPq<#_1Q!bEKEY$r/czwHZeH]C%pnؙTju\Ѻ1k󖒠JL6z 9@ȗ_/|%7p(2$woF6/\I)/ڄW zk1fV@ae_R3<%- mD:&B}rpvTjS2YJx1\;k>4Ҽhv)ځ5`"R3 M[JX-Ee%3=+)9 .02qT;Lo-#/0O:vf> y\|᧣ R}f  t q|yIAs{ /ZϽp}g| N2۲qM R~06&XvW'_Id%( ̞>xPVr9>+sfS *j;=iM~ڼEM^?vN@a}"@].<:xsɋi*A[i]8gjX/."CB "<W"z1hi ,p^c?Jm-~!nlw;m^,,R˔:9!>Y3 4E!?{7`Af/ZTtpԊT}n@iPod@ 4.Bdv&9 [wT71.Hlޢ ʇgZ":@Fzz鳟1[=I)E-<YY1(Z)?y(j]Chĥ;BQpRe'>COIky/8޺`8PD:2=wu"t Zs!&8-0 T^"Y 8D7pVm[ n:``m1!n2 W@(5p@-ۄ=C_/..O:Nxн';#%@KӀApUȣWk&B_4 ٚ}>s[C.1In5ZAlDA$K0}y-Hw_rKRW3$CE1J#g;eYxp%R_?ӂÅ}}OCqmrpcxMVUM˓Bj $nHdCRdg5~zP)]c33c]^R$e:Py(䂒ذ=vB9yX ljk 7U#XHdHo |ic ѹY)%+mC( s1/G_sς`sK# o Nzx@᮫ gzG8@P0ymwogO+Pl<ݿYzND tZ/%%zxc<8^6={b*;]jOklB}fn!yY@Spϵ&k <ÔߒGMp9md85(CPǎ{}tG'W=X0NFB vȥݱA\7w9 yh=t:ZKZBP ^~dEAhxzBL'j(y. +SOl$4r ÄcY΂jw;)Qg3R/ ƏiE] £g_`bP}D&<,YQh5k'Nh3K,S"/=85Huc!_$i&Tv0HyaGs۵}Ki: GLQ\\oS'%]%qϳE7Uzh㕢,i:C5Ĭ7}C91R S&u:XZ$|w':<Eиy$F4Ȑ@\W_$=}OKs30Ir5]CC|}PF 68s>&DLEZ[wx{iRz НW%j3%xmyV0Ȭ!ؐD]Bb󃲵w@:tJviZ=7~f@X:Vp_P!п.K%asvsׇ?jY  ?B~I8T~B>k̔<2i3DAfa$xt\ T7~?R~4(: w'q/;1C 64Pc̘W`~u!* @+o9&D1ZIw҉,O9s,wL4)% ï+[_duUpT@Ju!?18iT͘4 n·#%+vEw(FrȇjG /Z\O|\-@+^` Ed}G)A$xO(!%|(&+#!FH`1:*uUA?胎&>1|;pU ѹƶ%'T>Q7<"2?B6F>@N'cclvl2ƏUu}ʂd' !2BWh)_-lK 4xaE`ԅd@W@d>UW+F8Dchw ~m@#f 4T]}yebLwHo5^C/W0$lATF74-Um)0D=eK3& xVo. 5_1;1ϰSd8';1NO?梋gHš"*2pG+MϚΞ"j1ɕ|^JXjy,FV)_I ;Stm d X1pLApD.h8*"Z-yP8/:fa'_Sc_aU^2P(Td=;x_]~@vp?!ݯ= h0tyDs"5uf~عmK%k9T¦ba<ǔyD)! ~*Aܯ9Rg0 SY. sF9kb ,2~V)}?y?R j Rw!J_dՕ^~_Lȳxy1耾2+b?pB%9h8G#vRIP \ jD1@A; ^vKwb" w; '6i=^"E#Luc\ CmmxG`70UW0],b;#z?1  ƗLk΂ pq|SAҘʃ1~x#b N؀~fUh C߶2KaS HʫÏWg0,@GLp\XC oSe #.4Q|3ز{59vI+de1M ‹\͝еA@i˂2֖ܥ!*!v~b$Ec9)ggǙ^] @N@ ڴUQg>ʴd\ZTAHWr+zOcn_ފ3;εH"Tj5**<51|+ !qs husEX۟}u׸me+ d\HҮwe 1R`U@޵0];H` ګijY5BUɋٶ#n9Ҙ2 Ҵܿ୘GxC]zWRhekbk"k"]e\GY7uuUiN}*Cg0 jV-"C=Hy 1([Yx3MM:;_u`BQmCFـ"[;@ =x`^סvA  g@u]YV;%iU"G4a`"E-MeHMA8 @TDʚ[@2f4XĢe_ʂ^#!^J<\XVv2"Ȃh0jU?0 D H}GfmfF&:ijG@ y]&@[>/kUWFHt `RAxC?- $!t^P1^i=[2ڂz(=Rc<<-P.Z_}RIdF06n4~:=ƹ.mZ/\8DbX7$lX+AkrVf< Tb1( `pP u/عdU&&ճC:4u)>@&bW$ lR" 6^Tv@YA@G J =_<K*;Bv$*G|)ғ\ Bt5>e|籱<Iwb`v 6u  YlڐFh! ү4@[ # Q͆&/%`D@e}ҮE6hDX87_ ʑU,R'x^_ȏŨ7ߍY 5Ca>*3 s'@iT}^=xN_~C8w5(| !JP&`Ta(LC`z ɐG K%zPչ^_lT\jr `~,0 "/+Ω]H&H$a B)1!ھH` T2_v9,B .JY b2j*@uEWͦ(`J]C[ApRYT:T+I8 N1:zX 2xiҍF2)4ԳP)UNzĤ H7) `zJfiǹ ZvpE)=]rT1w0GcYH AN HƏj6=ԥPK0pZ@-j4N\B(#yNHqz=o_5pZ׿u,mLE T.Z *Hq}N8N)@ FҡDQ ^0BeIj+a( *Jm? DVnc.$@5t`WkWQYWLmڭO-1Y7ut ]D.R.!_T @ _zU*]0B[!{8(#&Vwߏn!{918CξPR 0sdumv_|{ԙ G /8FLl>U$`Oԑt0c-`#n3$0es*۱S&^)3@]#uD "QNa2d4=!{G/JE/Z^ȹ/RՋNhAo@Ռ COY GMDp8 /ҤI Aݮ&~N=sY JJWA Xɨ!PL4JII]-iNҡD^2Բ˺>! pr`+w[ NGOaE/q, :îN&.L8@J=Ҥ#] n0ѓjQ2 L匌JT\`΁#* Q#XW$;W#s]@9l\xSlWr{ ^7mST~ 2e{Q&I0@'0㧝G ƶP42 mn9ԥ- W :2@ =.^^`cY{`~;%(䤆OU^%|lueD4RfBȀ>ǰr  &.^O ѥ,o!R~{I>$=˞}]\ d@]@0 gM g8'*1A*̻LVr8Rψc Y1h1A!+BBM5iu$$> A(Wj;0=>g5?F gudzkhNZ۞ǃDG[ }np 6/^U^(ա+\`̐C v+z^͞D(%dV_ @:@Je[KK3u 9]mWyM3=2dxУ_B`{UJyٍlSqdEIR$UL4o"D |Kr/ H%yju?[yK@Ji^%TN  ~YXm_RF(|]w;/*'jA/ Kxm%>J\GBKCjUXJByq0HV=gAQ'l&1$dڃv>'-HHۮmg?!Ӛ<#+j|f&k)36Qk%?r€< CE\X}t`ABD3CU!ʬBv(4N5 F\/VH`L]%‚;-Ǐ^4.řƒ `31~ EćDa".mC2TymHXĎ&Уuڒ @"'_#-ѐܪ;/5̌LOn-`ޢaQUR[V{E;^N>#' !C[v:v; ] !pCVY&2CZd, a.k&C.1DL? W[/-[]C36;jw$羣 u a au 糳~mE..W|ZMӁӋ4#*u Ex`acʀ:1ȖAZ+6!#/펇x:~ meO_] Mg(yzPb]/? 4* =͂Uρ*>**1\ 2 F<7D'\}LƲMSY.\t(t=`$} ‡\D7aL_D0"MJfQywp5Z0prrJ cAJI,zӀ q/0~ϟcЋP$qE mc76Wעc5c@CA 䎑ql\<x s)]TA,ҀsNDsߕsSߓa 0NVy~V%ͅprWU&}Ճ<Fc᫳YcɊBkպbVH"_w@J5y}7)?aKgy:d>}Gz@enwk7&#K4yp|>yLKe%FRR Hfe,!z`J!L=<6%'L^CKD/ʱ㕁|~fW+uVI]jx,&>䷄á'ɺ0te5^>>7 "E/ !@a"q}PL|͝LWI4~b~jܒ5܈iu&G"Tx(d-^&\=;gߔ: "4 WTm$de!{tD8tS$hH=_$ te!#}wxD+`7zIZT`BW> 9 +I*g/zx#.kŋ}m`v~CA;*pZV<Д/ۯla_ԋA.V]\K(:.v'?x`)¿zzNݺ+nK`]ODYzSr=5ϒ#"`#}4Kʆw5{G-q ݏ1!xcr5ϾXP:j}b:ث[| Y/ PB?`_x`B { =0kY1Jêpw8`)?CmHQF<Ie= HƏz(5oq|{4/L H3KN| g0Jw3} @Rlb6T2zn%t#Ohhvz6\ o/,\Yw߭9I ~ƃmqYfeYfeYfeYfeYfeYfeYfem image/svg+xml ares-126/genius/genius.cpp000066400000000000000000000511421415063341600156140ustar00rootroot00000000000000#include using namespace nall; #include using namespace hiro; #include "genius.hpp" namespace Instances { Instance listWindow; Instance gameWindow; Instance memoryWindow; Instance oscillatorWindow; } ListWindow& listWindow = Instances::listWindow(); GameWindow& gameWindow = Instances::gameWindow(); MemoryWindow& memoryWindow = Instances::memoryWindow(); OscillatorWindow& oscillatorWindow = Instances::oscillatorWindow(); // ListWindow::ListWindow() { fileMenu.setText("File"); newAction.setText("New").onActivate([&] { newDatabase(); }); openAction.setText("Open ...").onActivate([&] { if(auto location = BrowserDialog().setAlignment(*this).setFilters({"*.bml"}).openFile()) { loadDatabase(location); } }); saveAction.setText("Save").onActivate([&] { if(!location) return saveAsAction.doActivate(); saveDatabase(location); }); saveAsAction.setText("Save As ...").onActivate([&] { if(auto location = BrowserDialog().setAlignment(*this).setFilters({"*.bml"}).saveFile()) { saveDatabase(location); } }); quitAction.setText("Quit").onActivate([&] { quit(); }); helpMenu.setText("Help"); aboutAction.setText("About ...").onActivate([&] { AboutDialog() .setName("genius") .setVersion("1") .setCopyright("byuu") .setLicense("GPLv3") .setWebsite("https://byuu.org") .setAlignment(*this) .show(); }); layout.setPadding(5); gameList.setHeadered(); gameList.onActivate([&](auto cell) { modifyButton.doActivate(); }); gameList.onChange([&] { updateWindow(); }); appendButton.setText("Append").onActivate([&] { setEnabled(false); gameWindow.show(); }); modifyButton.setText("Modify").onActivate([&] { if(auto item = gameList.selected()) { setEnabled(false); gameWindow.show(games[item.offset()]); } }); removeButton.setText("Remove").onActivate([&] { removeGame(); }); onClose([&] { quit(); }); setSize({820, 600}); reloadList(); updateWindow(); setAlignment(Alignment::Center); } auto ListWindow::quit() -> void { if(!modified || MessageDialog().setAlignment(*this).setText({ "Are you sure you want to quit without saving your changes?" }).question() == "Yes") { Application::quit(); } } auto ListWindow::reloadList() -> void { gameList.reset(); gameList.append(TableViewColumn().setText("Name").setExpandable()); gameList.append(TableViewColumn().setText("Region")); gameList.append(TableViewColumn().setText("Revision")); gameList.append(TableViewColumn().setText("Board")); for(auto& game : games) { TableViewItem item{&gameList}; item.append(TableViewCell().setText(game.name)); item.append(TableViewCell().setText(game.region)); item.append(TableViewCell().setText(game.revision)); item.append(TableViewCell().setText(game.board)); } Application::processEvents(); gameList.resizeColumns(); } auto ListWindow::updateWindow() -> void { modifyButton.setEnabled((bool)gameList.selected()); removeButton.setEnabled((bool)gameList.selected()); string name = Location::base(location); if(!name) name = "(Untitled)"; setTitle({modified ? "*" : "", name, " [", games.size(), "] - genius"}); } auto ListWindow::newDatabase() -> void { games.reset(); modified = false; location = ""; reloadList(); updateWindow(); } auto ListWindow::loadDatabase(string location) -> void { auto document = BML::unserialize(string::read(location)); games.reset(); for(auto node : document.find("game")) { Game game; game.sha256 = node["sha256"].text(); game.label = node["label"].text(); game.name = node["name"].text(); game.region = node["region"].text(); game.revision = node["revision"].text(); game.board = node["board"].text(); for(auto object : node["board"]) { Component component; if(object.name() == "memory") { component.type = Component::Type::Memory; component.memory.type = object["type"].text(); component.memory.size = object["size"].text(); component.memory.content = object["content"].text(); component.memory.manufacturer = object["manufacturer"].text(); component.memory.architecture = object["architecture"].text(); component.memory.identifier = object["identifier"].text(); component.memory.Volatile = (bool)object["volatile"]; } if(object.name() == "oscillator") { component.type = Component::Type::Oscillator; component.oscillator.frequency = object["frequency"].text(); } game.components.append(component); } game.note = node["note"].text(); games.append(game); } modified = false; this->location = location; reloadList(); updateWindow(); } auto ListWindow::saveDatabase(string location) -> void { auto fp = file::open(location, file::mode::write); if(!fp) return MessageDialog().setAlignment(*this).setText({ "Error: failed to write file.\n\n", "Name: ", location }).error(), void(); auto copy = games; copy.sort([](auto x, auto y) { return string::icompare( {x.name, "\n", x.region, "\n", x.revision}, {y.name, "\n", y.region, "\n", y.revision} ) < 0; }); fp.print("database\n"); fp.print(" revision: ", chrono::local::date(), "\n\n"); for(auto& game : copy) { fp.print("game\n"); fp.print(" sha256: ", game.sha256, "\n"); if(game.label) fp.print(" label: ", game.label, "\n"); fp.print(" name: ", game.name, "\n"); fp.print(" region: ", game.region, "\n"); fp.print(" revision: ", game.revision, "\n"); if(game.board) fp.print(" board: ", game.board, "\n"); else if(game.components) fp.print(" board\n"); for(auto& component : game.components) { if(component.type == Component::Type::Memory) { fp.print(" memory\n"); fp.print(" type: ", component.memory.type, "\n"); fp.print(" size: ", component.memory.size, "\n"); fp.print(" content: ", component.memory.content, "\n"); if(component.memory.manufacturer) fp.print(" manufacturer: ", component.memory.manufacturer, "\n"); if(component.memory.architecture) fp.print(" architecture: ", component.memory.architecture, "\n"); if(component.memory.identifier) fp.print(" identifier: ", component.memory.identifier, "\n"); if(component.memory.Volatile) fp.print(" volatile\n"); } if(component.type == Component::Type::Oscillator) { fp.print(" oscillator\n"); fp.print(" frequency: ", component.oscillator.frequency, "\n"); } } if(game.note) fp.print(" note: ", game.note, "\n"); fp.print("\n"); } modified = false; this->location = location; updateWindow(); } auto ListWindow::appendGame(Game game) -> void { modified = true; auto offset = games.size(); games.append(game); reloadList(); gameList.item(offset).setSelected().setFocused(); updateWindow(); } auto ListWindow::modifyGame(Game game) -> void { if(auto item = gameList.selected()) { modified = true; auto offset = item.offset(); games[offset] = game; reloadList(); gameList.item(offset).setSelected().setFocused(); updateWindow(); } } auto ListWindow::removeGame() -> void { if(auto item = gameList.selected()) { if(MessageDialog().setAlignment(*this).setText({ "Are you sure you want to permanently remove this game?\n\n", "Name: ", item.cell(0).text() }).question() == "Yes") { modified = true; games.remove(item.offset()); reloadList(); updateWindow(); } } } // GameWindow::GameWindow() { layout.setPadding(5); hashLabel.setText("SHA256:").setAlignment(1.0); hashEdit.setFont(Font().setFamily(Font::Mono)).onChange([&] { modified = true, updateWindow(); }); regionLabel.setText("Region:").setAlignment(1.0); regionEdit.setFont(Font().setFamily(Font::Mono)).onChange([&] { modified = true, updateWindow(); }); revisionLabel.setText("Revision:"); revisionEdit.setFont(Font().setFamily(Font::Mono)).onChange([&] { modified = true, updateWindow(); }); boardLabel.setText("Board:"); boardEdit.setFont(Font().setFamily(Font::Mono)).onChange([&] { modified = true, updateWindow(); }); nameLabel.setText("Name:").setAlignment(1.0); nameEdit.onChange([&] { modified = true, updateWindow(); }); labelLabel.setText("Label:").setAlignment(1.0); labelEdit.onChange([&] { modified = true, updateWindow(); }); noteLabel.setText("Note:").setAlignment(1.0); noteEdit.onChange([&] { modified = true, updateWindow(); }); componentLabel.setText("Tree:").setAlignment({1.0, 0.0}); componentTree.onActivate([&] { modifyComponentButton.doActivate(); }); componentTree.onChange([&] { updateWindow(); }); appendMemoryButton.setText("Memory").onActivate([&] { setEnabled(false); memoryWindow.show(); }); appendOscillatorButton.setText("Oscillator").onActivate([&] { setEnabled(false); oscillatorWindow.show(); }); modifyComponentButton.setText("Modify").onActivate([&] { if(auto item = componentTree.selected()) { setEnabled(false); auto path = item.path().split("/"); auto offset = path(0).natural(); Component component = game.components[offset]; if(component.type == Component::Type::Memory) { memoryWindow.show(component.memory); } if(component.type == Component::Type::Oscillator) { oscillatorWindow.show(component.oscillator); } } }); removeComponentButton.setText("Remove").onActivate([&] { removeComponent(); }); acceptButton.setText("Accept").onActivate([&] { accept(); }); cancelButton.setText("Cancel").onActivate([&] { cancel(); }); onClose([&] { cancel(); }); setSize({640, 480}); setDismissable(); } auto GameWindow::show(Game game) -> void { this->game = game; modified = false; create = !game.sha256; hashEdit.setText(game.sha256); regionEdit.setText(game.region); revisionEdit.setText(game.revision); boardEdit.setText(game.board); nameEdit.setText(game.name); labelEdit.setText(game.label); noteEdit.setText(game.note); acceptButton.setText(create ? "Create" : "Apply"); reloadList(); updateWindow(); setAlignment(*listWindow); setVisible(); if(create) { hashEdit.setFocused(); } else { cancelButton.setFocused(); } } auto GameWindow::accept() -> void { game.sha256 = hashEdit.text().strip(); game.region = regionEdit.text().strip(); game.revision = revisionEdit.text().strip(); game.board = boardEdit.text().strip(); game.name = nameEdit.text().strip(); game.label = labelEdit.text().strip(); game.note = noteEdit.text().strip(); if(create) { listWindow.appendGame(game); } else { listWindow.modifyGame(game); } memoryWindow.setVisible(false); setVisible(false); listWindow.setEnabled(); listWindow.setFocused(); } auto GameWindow::cancel() -> void { if(!modified || MessageDialog().setAlignment(*this).setText({ "Are you sure you want to discard your changes to this game?" }).question() == "Yes") { memoryWindow->setVisible(false); setVisible(false); listWindow->setEnabled(); listWindow->setFocused(); } } auto GameWindow::reloadList() -> void { componentTree.reset(); uint counter = 1; for(auto& component : game.components) { TreeViewItem item; string index = {"[", counter++, "] "}; if(component.type == Component::Type::Memory) { item.setText({index, "Memory"}); item.append(TreeViewItem().setText({"Type: ", component.memory.type})); item.append(TreeViewItem().setText({"Size: ", component.memory.size})); item.append(TreeViewItem().setText({"Content: ", component.memory.content})); if(component.memory.manufacturer) item.append(TreeViewItem().setText({"Manufacturer: ", component.memory.manufacturer})); if(component.memory.architecture) item.append(TreeViewItem().setText({"Architecture: ", component.memory.architecture})); if(component.memory.identifier) item.append(TreeViewItem().setText({"Identifier: ", component.memory.identifier})); if(component.memory.Volatile) item.append(TreeViewItem().setText({"Volatile"})); } if(component.type == Component::Type::Oscillator) { item.setText({index, "Oscillator"}); item.append(TreeViewItem().setText({"Frequency: ", component.oscillator.frequency})); } componentTree.append(item); } Application::processEvents(); for(auto& item : componentTree.items()) item.setExpanded(); } auto GameWindow::updateWindow() -> void { bool valid = true; bool hashValid = hashEdit.text().strip().size() == 64; hashEdit.setEditable(!hashValid).setBackgroundColor( !create || hashValid ? Color{192, 255, 192} : (valid = false, Color{255, 224, 224})); regionEdit.setBackgroundColor(regionEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); revisionEdit.setBackgroundColor(revisionEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); boardEdit.setBackgroundColor(boardEdit.text().strip() ? Color{} : (Color{255, 255, 240})); nameEdit.setBackgroundColor(nameEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); labelEdit.setBackgroundColor(labelEdit.text().strip() ? Color{} : (Color{255, 255, 240})); noteEdit.setBackgroundColor(noteEdit.text().strip() ? Color{} : (Color{255, 255, 240})); modifyComponentButton.setEnabled((bool)componentTree.selected()); removeComponentButton.setEnabled((bool)componentTree.selected()); acceptButton.setEnabled(valid); setTitle({modified ? "*" : "", create ? "Add New Game" : "Modify Game Details"}); if(create && hashValid && hashEdit.focused()) regionEdit.setFocused(); } auto GameWindow::appendComponent(Component component) -> void { modified = true; auto offset = game.components.size(); game.components.append(component); reloadList(); componentTree.item(offset).setSelected().setFocused(); updateWindow(); } auto GameWindow::modifyComponent(Component component) -> void { if(auto item = componentTree.selected()) { modified = true; auto path = item.path().split("/"); auto offset = path(0).natural(); game.components[offset] = component; reloadList(); componentTree.item(offset).setSelected().setFocused(); updateWindow(); } } auto GameWindow::removeComponent() -> void { if(auto item = componentTree.selected()) { if(MessageDialog().setAlignment(*this).setText({ "Are you sure you want to permanently remove this component?" }).question() == "Yes") { modified = true; auto path = item.path().split("/"); auto offset = path(0).natural(); game.components.remove(offset); reloadList(); updateWindow(); } } } // MemoryWindow::MemoryWindow() { layout.setPadding(5); typeLabel.setText("Type:").setAlignment(1.0); typeEdit.append(ComboEditItem().setText("ROM")); typeEdit.append(ComboEditItem().setText("EEPROM")); typeEdit.append(ComboEditItem().setText("Flash")); typeEdit.append(ComboEditItem().setText("RAM")); typeEdit.append(ComboEditItem().setText("RTC")); typeEdit.onChange([&] { modified = true, updateWindow(); }); sizeLabel.setText("Size:").setAlignment(1.0); sizeEdit.onChange([&] { modified = true, updateWindow(); }); contentLabel.setText("Content:").setAlignment(1.0); contentEdit.append(ComboEditItem().setText("Program")); contentEdit.append(ComboEditItem().setText("Data")); contentEdit.append(ComboEditItem().setText("Character")); contentEdit.append(ComboEditItem().setText("Save")); contentEdit.append(ComboEditItem().setText("Time")); contentEdit.onChange([&] { modified = true, updateWindow(); }); manufacturerLabel.setText("Manufacturer:").setAlignment(1.0); manufacturerEdit.onChange([&] { modified = true, updateWindow(); }); architectureLabel.setText("Architecture:").setAlignment(1.0); architectureEdit.onChange([&] { modified = true, updateWindow(); }); identifierLabel.setText("Identifier:").setAlignment(1.0); identifierEdit.onChange([&] { modified = true, updateWindow(); }); volatileOption.setText("Volatile").onToggle([&] { modified = true, updateWindow(); }); acceptButton.setText("Accept").onActivate([&] { accept(); }); cancelButton.setText("Cancel").onActivate([&] { cancel(); }); onClose([&] { cancel(); }); setSize({320, layout.minimumSize().height()}); setDismissable(); } auto MemoryWindow::show(Memory memory) -> void { this->memory = memory; modified = false; create = !memory.type; typeEdit.setText(memory.type); sizeEdit.setText(memory.size); contentEdit.setText(memory.content); manufacturerEdit.setText(memory.manufacturer); architectureEdit.setText(memory.architecture); identifierEdit.setText(memory.identifier); volatileOption.setChecked(memory.Volatile); updateWindow(); setAlignment(*gameWindow); setVisible(); typeEdit.setFocused(); } auto MemoryWindow::accept() -> void { memory.type = typeEdit.text().strip(); memory.size = sizeEdit.text().strip(); memory.content = contentEdit.text().strip(); memory.manufacturer = manufacturerEdit.text().strip(); memory.architecture = architectureEdit.text().strip(); memory.identifier = identifierEdit.text().strip(); memory.Volatile = volatileOption.checked() && (memory.type == "RAM" || memory.type == "RTC"); Component component{Component::Type::Memory}; component.memory = memory; if(create) { gameWindow.appendComponent(component); } else { gameWindow.modifyComponent(component); } setVisible(false); gameWindow.setEnabled(); gameWindow.setFocused(); } auto MemoryWindow::cancel() -> void { if(!modified || MessageDialog().setAlignment(*this).setText({ "Are you sure you want to discard your changes to this memory?" }).question() == "Yes") { setVisible(false); gameWindow.setEnabled(); gameWindow.setFocused(); } } auto MemoryWindow::updateWindow() -> void { bool valid = true; typeEdit.setBackgroundColor(typeEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); sizeEdit.setBackgroundColor(sizeEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); contentEdit.setBackgroundColor(contentEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); manufacturerEdit.setBackgroundColor(manufacturerEdit.text().strip() ? Color{} : (Color{255, 255, 240})); architectureEdit.setBackgroundColor(architectureEdit.text().strip() ? Color{} : (Color{255, 255, 240})); identifierEdit.setBackgroundColor(identifierEdit.text().strip() ? Color{} : (Color{255, 255, 240})); volatileOption.setEnabled(typeEdit.text().strip() == "RAM" || typeEdit.text().strip() == "RTC"); acceptButton.setEnabled(valid); setTitle({modified ? "*" : "", create ? "Add New Memory" : "Modify Memory Details"}); } // OscillatorWindow::OscillatorWindow() { layout.setPadding(5); frequencyLabel.setText("Frequency:").setAlignment(1.0); frequencyEdit.onChange([&] { modified = true, updateWindow(); }); acceptButton.setText("Accept").onActivate([&] { accept(); }); cancelButton.setText("Cancel").onActivate([&] { cancel(); }); onClose([&] { cancel(); }); setSize({320, layout.minimumSize().height()}); setDismissable(); } auto OscillatorWindow::show(Oscillator oscillator) -> void { this->oscillator = oscillator; modified = false; create = !oscillator.frequency; frequencyEdit.setText(oscillator.frequency); updateWindow(); setAlignment(*gameWindow); setVisible(); frequencyEdit.setFocused(); } auto OscillatorWindow::accept() -> void { oscillator.frequency = frequencyEdit.text().strip(); Component component{Component::Type::Oscillator}; component.oscillator = oscillator; if(create) { gameWindow.appendComponent(component); } else { gameWindow.modifyComponent(component); } setVisible(false); gameWindow->setEnabled(); gameWindow->setFocused(); } auto OscillatorWindow::cancel() -> void { if(!modified || MessageDialog().setAlignment(*this).setText({ "Are you sure you want to discard your changes to this property?" }).question() == "Yes") { setVisible(false); gameWindow->setEnabled(); gameWindow->setFocused(); } } auto OscillatorWindow::updateWindow() -> void { bool valid = true; frequencyEdit.setBackgroundColor(frequencyEdit.text().strip() ? Color{} : (valid = false, Color{255, 224, 224})); acceptButton.setEnabled(valid); setTitle({modified ? "*" : "", create ? "Add New Property" : "Modify Property Details"}); } // #include auto nall::main(Arguments) -> void { Application::setName("genius"); Instances::listWindow.construct(); Instances::gameWindow.construct(); Instances::memoryWindow.construct(); Instances::oscillatorWindow.construct(); listWindow.setVisible(); Application::run(); } ares-126/genius/genius.hpp000066400000000000000000000134301415063341600156170ustar00rootroot00000000000000struct Memory { string type; string size; string content; string manufacturer; string architecture; string identifier; boolean Volatile; }; struct Oscillator { string frequency; }; //variant meta-class struct Component { enum class Type : uint { Memory, Oscillator, } type; Memory memory; Oscillator oscillator; }; struct Game { string sha256; string region; string revision; string board; string name; string label; string note; vector components; }; struct ListWindow : Window { ListWindow(); auto quit() -> void; auto reloadList() -> void; auto updateWindow() -> void; auto newDatabase() -> void; auto loadDatabase(string) -> void; auto saveDatabase(string) -> void; auto appendGame(Game) -> void; auto modifyGame(Game) -> void; auto removeGame() -> void; private: bool modified = false; vector games; string location; MenuBar menuBar{this}; Menu fileMenu{&menuBar}; MenuItem newAction{&fileMenu}; MenuItem openAction{&fileMenu}; MenuItem saveAction{&fileMenu}; MenuItem saveAsAction{&fileMenu}; MenuSeparator quitSeparator{&fileMenu}; MenuItem quitAction{&fileMenu}; Menu helpMenu{&menuBar}; MenuItem aboutAction{&helpMenu}; HorizontalLayout layout{this}; TableView gameList{&layout, Size{~0, ~0}}; VerticalLayout controlLayout{&layout, Size{80, ~0}}; Button appendButton{&controlLayout, Size{~0, 0}}; Button modifyButton{&controlLayout, Size{~0, 0}}; Button removeButton{&controlLayout, Size{~0, 0}}; }; struct GameWindow : Window { GameWindow(); auto show(Game = {}) -> void; auto accept() -> void; auto cancel() -> void; auto reloadList() -> void; auto updateWindow() -> void; auto appendComponent(Component) -> void; auto modifyComponent(Component) -> void; auto removeComponent() -> void; private: bool modified = false; bool create = true; Game game; VerticalLayout layout{this}; HorizontalLayout hashLayout{&layout, Size{~0, 0}}; Label hashLabel{&hashLayout, Size{50, 0}}; LineEdit hashEdit{&hashLayout, Size{~0, 0}}; HorizontalLayout infoLayout{&layout, Size{~0, 0}}; Label regionLabel{&infoLayout, Size{50, 0}}; LineEdit regionEdit{&infoLayout, Size{~0, 0}}; Label revisionLabel{&infoLayout, Size{0, 0}}; LineEdit revisionEdit{&infoLayout, Size{~0, 0}}; Label boardLabel{&infoLayout, Size{0, 0}}; LineEdit boardEdit{&infoLayout, Size{~0, 0}, 0}; HorizontalLayout nameLayout{&layout, Size{~0, 0}}; Label nameLabel{&nameLayout, Size{50, 0}}; LineEdit nameEdit{&nameLayout, Size{~0, 0}}; HorizontalLayout labelLayout{&layout, Size{~0, 0}}; Label labelLabel{&labelLayout, Size{50, 0}}; LineEdit labelEdit{&labelLayout, Size{~0, 0}}; HorizontalLayout noteLayout{&layout, Size{~0, 0}}; Label noteLabel{¬eLayout, Size{50, 0}}; LineEdit noteEdit{¬eLayout, Size{~0, 0}}; HorizontalLayout lowerLayout{&layout, Size{~0, ~0}}; Label componentLabel{&lowerLayout, Size{50, ~0}}; TreeView componentTree{&lowerLayout, Size{~0, ~0}}; VerticalLayout controlLayout{&lowerLayout, Size{0, ~0}}; Button appendMemoryButton{&controlLayout, Size{80, 0}}; Button appendOscillatorButton{&controlLayout, Size{80, 0}}; Button modifyComponentButton{&controlLayout, Size{80, 0}}; Button removeComponentButton{&controlLayout, Size{80, 0}}; Widget controlSpacer{&controlLayout, Size{0, ~0}}; Button acceptButton{&controlLayout, Size{80, 0}}; Button cancelButton{&controlLayout, Size{80, 0}}; }; struct MemoryWindow : Window { MemoryWindow(); auto show(Memory = {}) -> void; auto accept() -> void; auto cancel() -> void; auto updateWindow() -> void; private: bool modified = false; bool create = true; Memory memory; VerticalLayout layout{this}; HorizontalLayout infoLayout{&layout, Size{~0, 0}}; Label typeLabel{&infoLayout, Size{80, 0}}; ComboEdit typeEdit{&infoLayout, Size{~0, 0}}; Label sizeLabel{&infoLayout, Size{0, 0}}; LineEdit sizeEdit{&infoLayout, Size{~0, 0}}; HorizontalLayout contentLayout{&layout, Size{~0, 0}}; Label contentLabel{&contentLayout, Size{80, 0}}; ComboEdit contentEdit{&contentLayout, Size{~0, 0}}; HorizontalLayout manufacturerLayout{&layout, Size{~0, 0}}; Label manufacturerLabel{&manufacturerLayout, Size{80, 0}}; LineEdit manufacturerEdit{&manufacturerLayout, Size{~0, 0}}; HorizontalLayout architectureLayout{&layout, Size{~0, 0}}; Label architectureLabel{&architectureLayout, Size{80, 0}}; LineEdit architectureEdit{&architectureLayout, Size{~0, 0}}; HorizontalLayout identifierLayout{&layout, Size{~0, 0}}; Label identifierLabel{&identifierLayout, Size{80, 0}}; LineEdit identifierEdit{&identifierLayout, Size{~0, 0}}; HorizontalLayout controlLayout{&layout, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}}; CheckLabel volatileOption{&controlLayout, Size{0, 0}}; Button acceptButton{&controlLayout, Size{80, 0}}; Button cancelButton{&controlLayout, Size{80, 0}}; }; struct OscillatorWindow : Window { OscillatorWindow(); auto show(Oscillator = {}) -> void; auto accept() -> void; auto cancel() -> void; auto updateWindow() -> void; private: bool modified = false; bool create = true; Oscillator oscillator; VerticalLayout layout{this}; HorizontalLayout frequencyLayout{&layout, Size{~0, 0}}; Label frequencyLabel{&frequencyLayout, Size{60, 0}}; LineEdit frequencyEdit{&frequencyLayout, Size{~0, 0}}; HorizontalLayout controlLayout{&layout, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}}; Button acceptButton{&controlLayout, Size{80, 0}}; Button cancelButton{&controlLayout, Size{80, 0}}; }; ares-126/genius/obj/000077500000000000000000000000001415063341600143655ustar00rootroot00000000000000ares-126/genius/obj/.gitignore000066400000000000000000000000101415063341600163440ustar00rootroot00000000000000*.o *.d ares-126/genius/out/000077500000000000000000000000001415063341600144225ustar00rootroot00000000000000ares-126/genius/out/.gitignore000066400000000000000000000000071415063341600164070ustar00rootroot00000000000000genius ares-126/hiro/000077500000000000000000000000001415063341600132625ustar00rootroot00000000000000ares-126/hiro/GNUmakefile000066400000000000000000000063201415063341600153350ustar00rootroot00000000000000ifeq ($(platform),windows) ifeq ($(hiro),) hiro := windows endif ifeq ($(hiro),windows) hiro.flags = $(flags.cpp) -DHIRO_WINDOWS hiro.options = -lkernel32 -luser32 -lgdi32 -ladvapi32 -lole32 -lcomctl32 -lcomdlg32 -luxtheme -lmsimg32 -lshlwapi -ldwmapi endif ifeq ($(hiro),gtk2) hiro.flags = $(flags.cpp) -DHIRO_GTK=2 $(shell pkg-config --cflags gtk+-2.0) -Wno-deprecated-declarations hiro.options = $(shell pkg-config --libs gtk+-2.0) endif ifeq ($(hiro),gtk3) hiro.flags = $(flags.cpp) -DHIRO_GTK=3 $(shell pkg-config --cflags gtk+-3.0) -Wno-deprecated-declarations hiro.options = $(shell pkg-config --libs gtk+-3.0) endif endif ifeq ($(platform),macos) ifeq ($(hiro),) hiro := cocoa endif ifeq ($(hiro),cocoa) hiro.flags = $(flags.objcpp) -w -DHIRO_COCOA hiro.options = -framework Cocoa -framework Carbon -framework IOKit -framework Security endif endif ifneq ($(filter $(platform),linux bsd),) ifeq ($(hiro),) hiro := gtk2 endif ifeq ($(hiro),gtk2) hiro.flags = $(flags.cpp) -DHIRO_GTK=2 $(shell pkg-config --cflags gtk+-2.0) -Wno-deprecated-declarations hiro.options = -L/usr/local/lib -lX11 $(shell pkg-config --libs gtk+-2.0) endif ifeq ($(hiro),gtk2-se) flags += -DHiro_SourceEdit hiro.flags = $(flags.cpp) -DHIRO_GTK=2 $(shell pkg-config --cflags gtk+-2.0 gtksourceview-2.0) -Wno-deprecated-declarations hiro.options = -L/usr/local/lib -lX11 $(shell pkg-config --libs gtk+-2.0 gtksourceview-2.0) endif ifeq ($(hiro),gtk3) hiro.flags = $(flags.cpp) -DHIRO_GTK=3 $(shell pkg-config --cflags gtk+-3.0) -Wno-deprecated-declarations hiro.options = -L/usr/local/lib -lX11 $(shell pkg-config --libs gtk+-3.0) endif ifeq ($(hiro),gtk3-se) flags += -DHiro_SourceEdit hiro.flags = $(flags.cpp) -DHIRO_GTK=3 $(shell pkg-config --cflags gtk+-3.0 gtksourceview-3.0) -Wno-deprecated-declarations hiro.options = -L/usr/local/lib -lX11 $(shell pkg-config --libs gtk+-3.0 gtksourceview-3.0) endif ifeq ($(hiro),qt4) moc = /usr/local/lib/qt4/bin/moc hiro.flags = $(flags.cpp) -DHIRO_QT=4 $(shell pkg-config --cflags QtCore QtGui) hiro.options = -L/usr/local/lib -lX11 $(shell pkg-config --libs QtCore QtGui) endif ifeq ($(hiro),qt5) moc = $(shell pkg-config --variable=host_bins Qt5Core)/moc hiro.flags = $(flags.cpp) -DHIRO_QT=5 -fPIC $(shell pkg-config --cflags Qt5Core Qt5Gui Qt5Widgets) hiro.options = -L/usr/local/lib -lX11 $(shell pkg-config --libs Qt5Core Qt5Gui Qt5Widgets) endif endif ifeq ($(hiro.resource),) hiro.resource := $(hiro.path)/windows/hiro.rc endif hiro.objects := \ $(object.path)/hiro-$(hiro).o \ $(if $(filter windows,$(hiro)),$(object.path)/hiro-resource.o) $(object.path)/hiro-$(hiro).o: $(hiro.path)/hiro.cpp $(if $(filter qt%,$(hiro)),$(info Compiling $(hiro.path)/qt/qt.moc ...)) $(if $(filter qt%,$(hiro)),@$(moc) -i -o $(hiro.path)/qt/qt.moc $(hiro.path)/qt/qt.hpp) $(info Compiling $(subst ../,,$<) ...) @$(compiler) $(hiro.flags) $(flags) $(flags.deps) -c $< -o $@ $(object.path)/hiro-resource.o: $(hiro.resource) $(info Compiling $(subst ../,,$<) ...) @$(windres) $< $@ hiro.verbose: $(info hiro Target:) $(info $([space]) $(hiro)) ares-126/hiro/cocoa/000077500000000000000000000000001415063341600143465ustar00rootroot00000000000000ares-126/hiro/cocoa/action/000077500000000000000000000000001415063341600156235ustar00rootroot00000000000000ares-126/hiro/cocoa/action/action.cpp000066400000000000000000000004631415063341600176070ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { auto pAction::construct() -> void { } auto pAction::destruct() -> void { } auto pAction::setEnabled(bool enabled) -> void { [cocoaAction setEnabled:enabled]; } auto pAction::setVisible(bool visible) -> void { [cocoaAction setHidden:!visible]; } } #endif ares-126/hiro/cocoa/action/action.hpp000066400000000000000000000004061415063341600176110ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { struct pAction : pObject { Declare(Action, Object) auto setEnabled(bool enabled) -> void override; auto setVisible(bool visible) -> void override; NSMenuItem* cocoaAction = nullptr; }; } #endif ares-126/hiro/cocoa/action/menu-check-item.cpp000066400000000000000000000021021415063341600212750ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) @implementation CocoaMenuCheckItem : NSMenuItem -(id) initWith:(hiro::mMenuCheckItem&)menuCheckItemReference { if(self = [super initWithTitle:@"" action:@selector(activate) keyEquivalent:@""]) { menuCheckItem = &menuCheckItemReference; [self setTarget:self]; } return self; } -(void) activate { menuCheckItem->state.checked = !menuCheckItem->state.checked; auto state = menuCheckItem->state.checked ? NSOnState : NSOffState; [self setState:state]; menuCheckItem->doToggle(); } @end namespace hiro { auto pMenuCheckItem::construct() -> void { cocoaAction = cocoaMenuCheckItem = [[CocoaMenuCheckItem alloc] initWith:self()]; pAction::construct(); setChecked(state().checked); setText(state().text); } auto pMenuCheckItem::destruct() -> void { } auto pMenuCheckItem::setChecked(bool checked) -> void { auto state = checked ? NSOnState : NSOffState; [cocoaAction setState:state]; } auto pMenuCheckItem::setText(const string& text) -> void { [cocoaAction setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/action/menu-check-item.hpp000066400000000000000000000007011415063341600213050ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) @interface CocoaMenuCheckItem : NSMenuItem { @public hiro::mMenuCheckItem* menuCheckItem; } -(id) initWith:(hiro::mMenuCheckItem&)checkItem; -(void) activate; @end namespace hiro { struct pMenuCheckItem : pAction { Declare(MenuCheckItem, Action) auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; CocoaMenuCheckItem* cocoaMenuCheckItem = nullptr; }; } #endif ares-126/hiro/cocoa/action/menu-item.cpp000066400000000000000000000022211415063341600202240ustar00rootroot00000000000000#if defined(Hiro_MenuItem) @implementation CocoaMenuItem : NSMenuItem -(id) initWith:(hiro::mMenuItem&)menuItemReference { if(self = [super initWithTitle:@"" action:@selector(activate) keyEquivalent:@""]) { menuItem = &menuItemReference; [self setTarget:self]; } return self; } -(void) activate { menuItem->doActivate(); } @end namespace hiro { auto pMenuItem::construct() -> void { cocoaAction = cocoaMenuItem = [[CocoaMenuItem alloc] initWith:self()]; pAction::construct(); setIcon(state().icon); setText(state().text); } auto pMenuItem::destruct() -> void { } auto pMenuItem::setIcon(const multiFactorImage& icon, bool force) -> void { if(!force) return; u32 size = 16; //there is no API to retrieve the optimal size [cocoaAction setImage:NSMakeImage(icon, size, size)]; } auto pMenuItem::setIconForFile(const string& filename) -> void { NSImage* icon = [[NSWorkspace sharedWorkspace] iconForFile:@((const char*)filename)]; icon.size = NSMakeSize(16, 16); [cocoaAction setImage:icon]; } auto pMenuItem::setText(const string& text) -> void { [cocoaAction setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/action/menu-item.hpp000066400000000000000000000007531415063341600202410ustar00rootroot00000000000000#if defined(Hiro_MenuItem) @interface CocoaMenuItem : NSMenuItem { @public hiro::mMenuItem* menuItem; } -(id) initWith:(hiro::mMenuItem&)menuItem; -(void) activate; @end namespace hiro { struct pMenuItem : pAction { Declare(MenuItem, Action) auto setIcon(const multiFactorImage& icon, bool force = false) -> void; auto setIconForFile(const string& filename) -> void; auto setText(const string& text) -> void; CocoaMenuItem* cocoaMenuItem = nullptr; }; } #endif ares-126/hiro/cocoa/action/menu-protocol.hpp000066400000000000000000000000711415063341600211350ustar00rootroot00000000000000@protocol CocoaMenu -(NSMenu*) cocoaMenu; @end ares-126/hiro/cocoa/action/menu-radio-item.cpp000066400000000000000000000030001415063341600213140ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) @implementation CocoaMenuRadioItem : NSMenuItem -(id) initWith:(hiro::mMenuRadioItem&)menuRadioItemReference { if(self = [super initWithTitle:@"" action:@selector(activate) keyEquivalent:@""]) { menuRadioItem = &menuRadioItemReference; [self setTarget:self]; //todo: the default image is a check mark, which is not indicative of radio states. //however, NSMenuRadio does not respect macOS' dark theme, and is barely visible. //[self setOnStateImage:[NSImage imageNamed:@"NSMenuRadio"]]; } return self; } -(void) activate { menuRadioItem->setChecked(); menuRadioItem->doActivate(); } @end namespace hiro { auto pMenuRadioItem::construct() -> void { cocoaAction = cocoaMenuRadioItem = [[CocoaMenuRadioItem alloc] initWith:self()]; pAction::construct(); if(state().checked) setChecked(); setText(state().text); } auto pMenuRadioItem::destruct() -> void { } auto pMenuRadioItem::setChecked() -> void { if(auto group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto self = object->self()) { if(auto p = dynamic_cast(self)) { auto state = this == p ? NSOnState : NSOffState; [p->cocoaAction setState:state]; } } } } } } auto pMenuRadioItem::setGroup(sGroup group) -> void { } auto pMenuRadioItem::setText(const string& text) -> void { [cocoaAction setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/action/menu-radio-item.hpp000066400000000000000000000007401415063341600213310ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) @interface CocoaMenuRadioItem : NSMenuItem { @public hiro::mMenuRadioItem* menuRadioItem; } -(id) initWith:(hiro::mMenuRadioItem&)menuRadioItem; -(void) activate; @end namespace hiro { struct pMenuRadioItem : pAction { Declare(MenuRadioItem, Action) auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setText(const string& text) -> void; CocoaMenuRadioItem* cocoaMenuRadioItem = nullptr; }; } #endif ares-126/hiro/cocoa/action/menu-separator.cpp000066400000000000000000000003551415063341600212740ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { auto pMenuSeparator::construct() -> void { cocoaAction = cocoaSeparator = [NSMenuItem separatorItem]; pAction::construct(); } auto pMenuSeparator::destruct() -> void { } } #endif ares-126/hiro/cocoa/action/menu-separator.hpp000066400000000000000000000002551415063341600213000ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { struct pMenuSeparator : pAction { Declare(MenuSeparator, Action) NSMenuItem* cocoaSeparator = nullptr; }; } #endif ares-126/hiro/cocoa/action/menu.cpp000066400000000000000000000030001415063341600172640ustar00rootroot00000000000000#if defined(Hiro_Menu) @implementation CocoaMenu : NSMenuItem -(id) initWith:(hiro::mMenu&)menuReference { if(self = [super initWithTitle:@"" action:nil keyEquivalent:@""]) { menu = &menuReference; cocoaMenu = [[NSMenu alloc] initWithTitle:@""]; [self setSubmenu:cocoaMenu]; } return self; } -(NSMenu*) cocoaMenu { return cocoaMenu; } @end namespace hiro { auto pMenu::construct() -> void { cocoaAction = cocoaMenu = [[CocoaMenu alloc] initWith:self()]; pAction::construct(); setIcon(state().icon); setText(state().text); } auto pMenu::destruct() -> void { } auto pMenu::append(sAction action) -> void { if(auto pAction = action->self()) { [[cocoaAction cocoaMenu] addItem:pAction->cocoaAction]; } } auto pMenu::remove(sAction action) -> void { if(auto pAction = action->self()) { [[cocoaAction cocoaMenu] removeItem:pAction->cocoaAction]; } } auto pMenu::setIcon(const multiFactorImage& icon, bool force) -> void { if (!force) return; u32 size = 16; //there is no API to retrieve the optimal size [cocoaAction setImage:NSMakeImage(icon, size, size)]; } auto pMenu::setIconForFile(const string& filename) -> void { NSImage* icon = [[NSWorkspace sharedWorkspace] iconForFile:@((const char*)filename)]; icon.size = NSMakeSize(16, 16); [cocoaAction setImage:icon]; } auto pMenu::setText(const string& text) -> void { [[cocoaAction cocoaMenu] setTitle:[NSString stringWithUTF8String:text]]; [cocoaAction setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/action/menu.hpp000066400000000000000000000010521415063341600172760ustar00rootroot00000000000000#if defined(Hiro_Menu) @interface CocoaMenu : NSMenuItem { @public hiro::mMenu* menu; NSMenu* cocoaMenu; } -(id) initWith:(hiro::mMenu&)menu; -(NSMenu*) cocoaMenu; @end namespace hiro { struct pMenu : pAction { Declare(Menu, Action) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setIcon(const multiFactorImage& icon, bool force = false) -> void; auto setIconForFile(const string& filename) -> void; auto setText(const string& text) -> void; CocoaMenu* cocoaMenu = nullptr; }; } #endif ares-126/hiro/cocoa/application.cpp000066400000000000000000000071621415063341600173630ustar00rootroot00000000000000#if defined(Hiro_Application) @implementation CocoaDelegate : NSObject -(NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication*)sender { using hiro::Application; if(Application::state().cocoa.onQuit) Application::Cocoa::doQuit(); else Application::quit(); return NSTerminateCancel; } -(BOOL) applicationShouldHandleReopen:(NSApplication*)application hasVisibleWindows:(BOOL)flag { using hiro::Application; if(Application::state().cocoa.onActivate) Application::Cocoa::doActivate(); return NO; } -(void) run:(NSTimer*)timer { using hiro::Application; if(Application::state().onMain) Application::doMain(); } -(BOOL)application:(NSApplication*)sender openFile:(NSString*)filename { BOOL isDirectory = NO; [[NSFileManager defaultManager] fileExistsAtPath:filename isDirectory:&isDirectory]; if(isDirectory) filename = [filename stringByAppendingString:@"/"]; hiro::Application::doOpenFile(filename.UTF8String); return YES; } @end CocoaDelegate* cocoaDelegate = nullptr; NSTimer* applicationTimer = nullptr; namespace hiro { auto pApplication::exit() -> void { quit(); ::exit(EXIT_SUCCESS); } auto pApplication::modal() -> bool { return Application::state().modal > 0; } auto pApplication::run() -> void { if(Application::state().onMain) { applicationTimer = [NSTimer scheduledTimerWithTimeInterval:0.0 target:cocoaDelegate selector:@selector(run:) userInfo:nil repeats:YES]; //below line is needed to run application during window resize; however it has a large performance penalty on the resize smoothness //[[NSRunLoop currentRunLoop] addTimer:applicationTimer forMode:NSEventTrackingRunLoopMode]; } @autoreleasepool { [NSApp run]; } } auto pApplication::pendingEvents() -> bool { bool result = false; @autoreleasepool { NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:NO]; if(event != nil) result = true; } return result; } auto pApplication::processEvents() -> void { @autoreleasepool { while(!Application::state().quit) { NSEvent* event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate distantPast] inMode:NSDefaultRunLoopMode dequeue:YES]; if(event == nil) break; [NSApp sendEvent:event]; } } } auto pApplication::quit() -> void { @autoreleasepool { [applicationTimer invalidate]; [NSApp stop:nil]; NSEvent* event = [NSEvent otherEventWithType:NSApplicationDefined location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]; [NSApp postEvent:event atStart:true]; } } auto pApplication::setScreenSaver(bool screenSaver) -> void { static IOPMAssertionID powerAssertion = kIOPMNullAssertionID; //default is enabled //do nothing if state has not been changed if(screenSaver == (powerAssertion == kIOPMNullAssertionID)) return; if(screenSaver) { IOPMAssertionRelease(powerAssertion); powerAssertion = kIOPMNullAssertionID; } else { string reason = {Application::state().name, " screensaver suppression"}; NSString* assertionName = [NSString stringWithUTF8String:reason.data()]; if(IOPMAssertionCreateWithName(kIOPMAssertionTypePreventUserIdleDisplaySleep, kIOPMAssertionLevelOn, (__bridge CFStringRef)assertionName, &powerAssertion ) != kIOReturnSuccess) { powerAssertion = kIOPMNullAssertionID; } } } auto pApplication::initialize() -> void { @autoreleasepool { [NSApplication sharedApplication]; cocoaDelegate = [[CocoaDelegate alloc] init]; [NSApp setDelegate:cocoaDelegate]; } } } #endif ares-126/hiro/cocoa/application.hpp000066400000000000000000000012151415063341600173610ustar00rootroot00000000000000#if defined(Hiro_Application) @interface CocoaDelegate : NSObject { } -(NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication*)sender; -(BOOL) applicationShouldHandleReopen:(NSApplication*)application hasVisibleWindows:(BOOL)flag; -(void) run:(NSTimer*)timer; @end namespace hiro { struct pApplication { static auto exit() -> void; static auto modal() -> bool; static auto run() -> void; static auto pendingEvents() -> bool; static auto processEvents() -> void; static auto quit() -> void; static auto setScreenSaver(bool screenSaver) -> void; static auto initialize() -> void; }; } #endif ares-126/hiro/cocoa/browser-window.cpp000066400000000000000000000051361415063341600200470ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { auto pBrowserWindow::directory(BrowserWindow::State& state) -> string { string result; @autoreleasepool { NSOpenPanel* panel = [NSOpenPanel openPanel]; if(state.title) [panel setTitle:[NSString stringWithUTF8String:state.title]]; panel.canChooseDirectories = YES; panel.canChooseFiles = NO; panel.directory = [NSString stringWithUTF8String:state.path]; if([panel runModal] == NSOKButton) { NSArray* names = [panel filenames]; const char* name = [[names objectAtIndex:0] UTF8String]; if(name) result = name; } } return result; } auto pBrowserWindow::open(BrowserWindow::State& state) -> string { string result; @autoreleasepool { NSMutableArray* filters = [[NSMutableArray alloc] init]; for(auto& rule : state.filters) { string pattern = rule.split("|", 1L)(1).replace("*", "").replace(".", ""); if (pattern) { for(auto& extension : pattern.split(":")) { [filters addObject:[NSString stringWithUTF8String:extension]]; } } } NSOpenPanel* panel = [NSOpenPanel openPanel]; if(state.title) [panel setTitle:[NSString stringWithUTF8String:state.title]]; panel.canChooseDirectories = state.allowsFolders; panel.canChooseFiles = YES; panel.allowedFileTypes = filters; panel.allowsOtherFileTypes = NO; panel.directory = [NSString stringWithUTF8String:state.path]; if([panel runModal] == NSOKButton) { NSString* name = panel.filenames.firstObject; BOOL isDirectory = NO; [[NSFileManager defaultManager] fileExistsAtPath:name isDirectory:&isDirectory]; if(isDirectory) name = [name stringByAppendingString:@"/"]; if(name) result = name.UTF8String; } } return result; } auto pBrowserWindow::save(BrowserWindow::State& state) -> string { string result; @autoreleasepool { NSMutableArray* filters = [[NSMutableArray alloc] init]; for(auto& rule : state.filters) { string pattern = rule.split("|", 1L)(1).replace("*", "").replace(".", ""); if (pattern) { for(auto& extension : pattern.split(":")) { [filters addObject:[NSString stringWithUTF8String:extension]]; } } } NSSavePanel* panel = [NSSavePanel savePanel]; if(state.title) [panel setTitle:[NSString stringWithUTF8String:state.title]]; panel.allowedFileTypes = filters; panel.directory = [NSString stringWithUTF8String:state.path]; if([panel runModal] == NSOKButton) { const char* name = panel.URL.path.UTF8String; if(name) result = name; } } return result; } } #endif ares-126/hiro/cocoa/browser-window.hpp000066400000000000000000000004171415063341600200510ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { struct pBrowserWindow { static auto directory(BrowserWindow::State& state) -> string; static auto open(BrowserWindow::State& state) -> string; static auto save(BrowserWindow::State& state) -> string; }; } #endif ares-126/hiro/cocoa/desktop.cpp000066400000000000000000000007531415063341600165300ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { auto pDesktop::size() -> Size { NSRect primary = [[[NSScreen screens] objectAtIndex:0] frame]; return { (s32)primary.size.width, (s32)primary.size.height }; } auto pDesktop::workspace() -> Geometry { auto screen = Desktop::size(); NSRect area = [[[NSScreen screens] objectAtIndex:0] visibleFrame]; return { (s32)area.origin.x, (s32)area.origin.y, (s32)area.size.width, (s32)area.size.height }; } } #endif ares-126/hiro/cocoa/desktop.hpp000066400000000000000000000002221415063341600165240ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { struct pDesktop { static auto size() -> Size; static auto workspace() -> Geometry; }; } #endif ares-126/hiro/cocoa/font.cpp000066400000000000000000000031331415063341600160200ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { auto pFont::size(const Font& font, const string& text) -> Size { if(NSFont* nsFont = create(font)) { return size(nsFont, text); } return {0, 0}; } auto pFont::size(NSFont* font, const string& text) -> Size { NSString* cocoaText = [NSString stringWithUTF8String:text]; NSDictionary* fontAttributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil]; NSSize size = [cocoaText sizeWithAttributes:fontAttributes]; return {(s32)ceil(size.width), (s32)ceil(size.height)}; } auto pFont::family(const string& family) -> string { if(family == Font::Serif) return "Baskerville"; if(family == Font::Mono ) return "Menlo"; return [[[NSFont systemFontOfSize:0] familyName] UTF8String]; } auto pFont::create(const Font& font) -> NSFont* { auto fontName = family(font.family()); NSString* family = [NSString stringWithUTF8String:fontName]; CGFloat size = Application::scale(font.size() ? font.size() : 8); NSFontTraitMask traits = 0; if(font.bold()) traits |= NSBoldFontMask; if(font.italic()) traits |= NSItalicFontMask; //note: below properties are not exposed by hiro::Font; traits are saved here for possible future use //if(font.narrow()) traits |= NSNarrowFontMask; //if(font.expanded()) traits |= NSExpandedFontMask; //if(font.condensed()) traits |= NSCondensedFontMask; //if(font.smallCaps()) traits |= NSSmallCapsFontMask; size *= 1.5; //scale to point sizes (for consistency with other operating systems) return [[NSFontManager sharedFontManager] fontWithFamily:family traits:traits weight:5 size:size]; } } #endif ares-126/hiro/cocoa/font.hpp000066400000000000000000000004601415063341600160250ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { struct pFont { static auto size(const Font& font, const string& text) -> Size; static auto size(NSFont* font, const string& text) -> Size; static auto family(const string& family) -> string; static auto create(const Font& font) -> NSFont*; }; } #endif ares-126/hiro/cocoa/group.cpp000066400000000000000000000002001415063341600161760ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { auto pGroup::construct() -> void { } auto pGroup::destruct() -> void { } } #endif ares-126/hiro/cocoa/group.hpp000066400000000000000000000001551415063341600162140ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { struct pGroup : pObject { Declare(Group, Object); }; } #endif ares-126/hiro/cocoa/header.hpp000066400000000000000000000002601415063341600163050ustar00rootroot00000000000000#include #include #include #include #include #include ares-126/hiro/cocoa/keyboard.cpp000066400000000000000000000003131415063341600166470ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { auto pKeyboard::poll() -> vector { vector result; return result; } auto pKeyboard::pressed(u32 code) -> bool { return false; } } #endif ares-126/hiro/cocoa/keyboard.hpp000066400000000000000000000002361415063341600166600ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { struct pKeyboard { static auto poll() -> vector; static auto pressed(u32 code) -> bool; }; } #endif ares-126/hiro/cocoa/menu-bar.cpp000066400000000000000000000012531415063341600165610ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { auto pMenuBar::construct() -> void { } auto pMenuBar::destruct() -> void { } auto pMenuBar::append(sMenu menu) -> void { if(auto parent = _parent()) { if(auto pMenu = menu->self()) { [[parent->cocoaWindow menuBar] addItem:pMenu->cocoaAction]; } } } auto pMenuBar::remove(sMenu menu) -> void { if(auto parent = _parent()) { if(auto pMenu = menu->self()) { [[parent->cocoaWindow menuBar] removeItem:pMenu->cocoaAction]; } } } auto pMenuBar::_parent() -> maybe { if(auto parent = self().parentWindow()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/cocoa/menu-bar.hpp000066400000000000000000000003371415063341600165700ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { struct pMenuBar : pObject { Declare(MenuBar, Object) auto append(sMenu menu) -> void; auto remove(sMenu menu) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/cocoa/message-window.cpp000066400000000000000000000061731415063341600200120ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { enum class MessageWindowType : u32 { Error, Information, Question, Warning }; auto MessageWindow_dialog(MessageWindow::State& state, MessageWindowType type) -> MessageWindow::Response { @autoreleasepool { NSAlert* alert = [[NSAlert alloc] init]; if(state.title) [alert setMessageText:[NSString stringWithUTF8String:state.title]]; [alert setInformativeText:[NSString stringWithUTF8String:state.text]]; switch(state.buttons) { case MessageWindow::Buttons::Ok: [alert addButtonWithTitle:@"Ok"]; break; case MessageWindow::Buttons::OkCancel: [alert addButtonWithTitle:@"Ok"]; [alert addButtonWithTitle:@"Cancel"]; break; case MessageWindow::Buttons::YesNo: [alert addButtonWithTitle:@"Yes"]; [alert addButtonWithTitle:@"No"]; break; case MessageWindow::Buttons::YesNoCancel: [alert addButtonWithTitle:@"Yes"]; [alert addButtonWithTitle:@"No"]; [alert addButtonWithTitle:@"Cancel"]; break; } switch(type) { case MessageWindowType::Error: [alert setAlertStyle:NSCriticalAlertStyle]; break; case MessageWindowType::Information: [alert setAlertStyle:NSInformationalAlertStyle]; break; case MessageWindowType::Question: [alert setAlertStyle:NSInformationalAlertStyle]; break; case MessageWindowType::Warning: [alert setAlertStyle:NSWarningAlertStyle]; break; } NSInteger response = [alert runModal]; //[alert beginSheetModalForWindow:parent.p.cocoaWindow modalDelegate:self didEndSelector:@selector(...) contextInfo:nil]; switch(state.buttons) { case MessageWindow::Buttons::Ok: if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Ok; break; case MessageWindow::Buttons::OkCancel: if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Ok; if(response == NSAlertSecondButtonReturn) return MessageWindow::Response::Cancel; break; case MessageWindow::Buttons::YesNo: if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Yes; if(response == NSAlertSecondButtonReturn) return MessageWindow::Response::No; break; case MessageWindow::Buttons::YesNoCancel: if(response == NSAlertFirstButtonReturn) return MessageWindow::Response::Yes; if(response == NSAlertSecondButtonReturn) return MessageWindow::Response::No; if(response == NSAlertThirdButtonReturn) return MessageWindow::Response::Cancel; break; } } throw; } auto pMessageWindow::error(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_dialog(state, MessageWindowType::Error); } auto pMessageWindow::information(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_dialog(state, MessageWindowType::Information); } auto pMessageWindow::question(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_dialog(state, MessageWindowType::Question); } auto pMessageWindow::warning(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_dialog(state, MessageWindowType::Warning); } } #endif ares-126/hiro/cocoa/message-window.hpp000066400000000000000000000006301415063341600200070ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { struct pMessageWindow { static auto error(MessageWindow::State& state) -> MessageWindow::Response; static auto information(MessageWindow::State& state) -> MessageWindow::Response; static auto question(MessageWindow::State& state) -> MessageWindow::Response; static auto warning(MessageWindow::State& state) -> MessageWindow::Response; }; } #endif ares-126/hiro/cocoa/monitor.cpp000066400000000000000000000024441415063341600165450ustar00rootroot00000000000000#if defined(Hiro_Monitor) namespace hiro { auto pMonitor::count() -> u32 { return [[NSScreen screens] count]; } auto pMonitor::dpi(u32 monitor) -> Position { //macOS includes built-in HiDPI scaling support. //it may be better to rely on per-application scaling, //but for now we'll let macOS handle it so it works in all hiro applications. #if 0 NSScreen* screen = [[NSScreen screens] objectAtIndex:monitor]; NSDictionary* dictionary = [screen deviceDescription]; NSSize dpi = [[dictionary objectForKey:NSDeviceSize] sizeValue]; return {dpi.width, dpi.height}; #endif return {96.0, 96.0}; } auto pMonitor::geometry(u32 monitor) -> Geometry { NSRect rectangle = [[[NSScreen screens] objectAtIndex:monitor] frame]; return { (s32)rectangle.origin.x, (s32)rectangle.origin.y, (s32)rectangle.size.width, (s32)rectangle.size.height }; } auto pMonitor::primary() -> u32 { //on macOS, the primary monitor is always the first monitor. return 0; } auto pMonitor::workspace(u32 monitor) -> Geometry { NSRect size = [[[NSScreen screens] objectAtIndex:monitor] frame]; NSRect area = [[[NSScreen screens] objectAtIndex:monitor] visibleFrame]; return { (s32)area.origin.x, (s32)area.origin.y, (s32)area.size.width, (s32)area.size.height }; } } #endif ares-126/hiro/cocoa/monitor.hpp000066400000000000000000000004321415063341600165450ustar00rootroot00000000000000#if defined(Hiro_Monitor) namespace hiro { struct pMonitor { static auto count() -> u32; static auto dpi(u32 monitor) -> Position; static auto geometry(u32 monitor) -> Geometry; static auto primary() -> u32; static auto workspace(u32 monitor) -> Geometry; }; } #endif ares-126/hiro/cocoa/mouse.cpp000066400000000000000000000002671415063341600162070ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { auto pMouse::position() -> Position { return {0, 0}; } auto pMouse::pressed(Mouse::Button button) -> bool { return false; } } #endif ares-126/hiro/cocoa/mouse.hpp000066400000000000000000000002441415063341600162070ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { struct pMouse { static auto position() -> Position; static auto pressed(Mouse::Button button) -> bool; }; } #endif ares-126/hiro/cocoa/object.cpp000066400000000000000000000007121415063341600163200ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { auto pObject::construct() -> void { } auto pObject::destruct() -> void { } auto pObject::focused() const -> bool { return false; } auto pObject::remove() -> void { } auto pObject::reset() -> void { } auto pObject::setEnabled(bool enabled) -> void { } auto pObject::setFocused() -> void { } auto pObject::setFont(const Font& font) -> void { } auto pObject::setVisible(bool visible) -> void { } } #endif ares-126/hiro/cocoa/object.hpp000066400000000000000000000012441415063341600163260ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { struct pObject : Lock { pObject(mObject& reference) : reference(reference) {} virtual ~pObject() {} auto self() const -> mObject& { return (mObject&)reference; } auto state() const -> mObject::State& { return self().state; } virtual auto construct() -> void; virtual auto destruct() -> void; virtual auto focused() const -> bool; virtual auto remove() -> void; virtual auto reset() -> void; virtual auto setEnabled(bool enabled) -> void; virtual auto setFocused() -> void; virtual auto setFont(const Font& font) -> void; virtual auto setVisible(bool visible) -> void; mObject& reference; }; } #endif ares-126/hiro/cocoa/platform.cpp000066400000000000000000000031441415063341600167000ustar00rootroot00000000000000#include "platform.hpp" #include "utility.cpp" #include "font.cpp" #include "desktop.cpp" #include "monitor.cpp" #include "keyboard.cpp" #include "mouse.cpp" #include "browser-window.cpp" #include "message-window.cpp" #include "object.cpp" #include "group.cpp" #include "timer.cpp" #include "window.cpp" #include "status-bar.cpp" #include "menu-bar.cpp" #include "popup-menu.cpp" #include "action/action.cpp" #include "action/menu.cpp" #include "action/menu-separator.cpp" #include "action/menu-item.cpp" #include "action/menu-check-item.cpp" #include "action/menu-radio-item.cpp" #include "sizable.cpp" #include "widget/widget.cpp" #include "widget/button.cpp" #include "widget/canvas.cpp" #include "widget/check-button.cpp" #include "widget/check-label.cpp" #include "widget/combo-button.cpp" #include "widget/combo-button-item.cpp" #include "widget/console.cpp" #include "widget/frame.cpp" #include "widget/hex-edit.cpp" #include "widget/horizontal-scroll-bar.cpp" #include "widget/horizontal-slider.cpp" #include "widget/label.cpp" #include "widget/line-edit.cpp" #include "widget/progress-bar.cpp" #include "widget/radio-button.cpp" #include "widget/radio-label.cpp" #include "widget/tab-frame.cpp" #include "widget/tab-frame-item.cpp" #include "widget/table-view.cpp" #include "widget/table-view-column.cpp" #include "widget/table-view-item.cpp" #include "widget/table-view-cell.cpp" #include "widget/text-edit.cpp" #include "widget/tree-view.cpp" #include "widget/tree-view-item.cpp" #include "widget/vertical-scroll-bar.cpp" #include "widget/vertical-slider.cpp" #include "widget/viewport.cpp" #include "application.cpp" ares-126/hiro/cocoa/platform.hpp000066400000000000000000000036211415063341600167050ustar00rootroot00000000000000#define Declare(Name, Base) \ p##Name(m##Name& reference) : p##Base(reference) {} \ auto self() const -> m##Name& { return (m##Name&)reference; } \ auto state() const -> m##Name::State& { return self().state; } \ auto construct() -> void override; \ auto destruct() -> void override; \ #include "font.hpp" #include "desktop.hpp" #include "monitor.hpp" #include "keyboard.hpp" #include "mouse.hpp" #include "browser-window.hpp" #include "message-window.hpp" #include "object.hpp" #include "group.hpp" #include "timer.hpp" #include "window.hpp" #include "status-bar.hpp" #include "menu-bar.hpp" #include "popup-menu.hpp" #include "action/menu-protocol.hpp" #include "action/action.hpp" #include "action/menu.hpp" #include "action/menu-separator.hpp" #include "action/menu-item.hpp" #include "action/menu-check-item.hpp" #include "action/menu-radio-item.hpp" #include "sizable.hpp" #include "widget/widget.hpp" #include "widget/button.hpp" #include "widget/canvas.hpp" #include "widget/check-button.hpp" #include "widget/check-label.hpp" #include "widget/combo-button.hpp" #include "widget/combo-button-item.hpp" #include "widget/console.hpp" #include "widget/frame.hpp" #include "widget/hex-edit.hpp" #include "widget/horizontal-scroll-bar.hpp" #include "widget/horizontal-slider.hpp" #include "widget/label.hpp" #include "widget/line-edit.hpp" #include "widget/progress-bar.hpp" #include "widget/radio-button.hpp" #include "widget/radio-label.hpp" #include "widget/tab-frame.hpp" #include "widget/tab-frame-item.hpp" #include "widget/table-view.hpp" #include "widget/table-view-column.hpp" #include "widget/table-view-item.hpp" #include "widget/table-view-cell.hpp" #include "widget/text-edit.hpp" #include "widget/tree-view.hpp" #include "widget/tree-view-item.hpp" #include "widget/vertical-scroll-bar.hpp" #include "widget/vertical-slider.hpp" #include "widget/viewport.hpp" #undef Declare #include "application.hpp" ares-126/hiro/cocoa/popup-menu.cpp000066400000000000000000000022451415063341600171620ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) @implementation CocoaPopupMenu : NSMenuItem -(id) initWith:(hiro::mPopupMenu&)popupMenuReference { if(self = [super initWithTitle:@"" action:nil keyEquivalent:@""]) { popupMenu = &popupMenuReference; cocoaPopupMenu = [[NSMenu alloc] initWithTitle:@""]; [self setSubmenu:cocoaPopupMenu]; } return self; } -(NSMenu*) cocoaPopupMenu { return cocoaPopupMenu; } @end namespace hiro { auto pPopupMenu::construct() -> void { cocoaPopupMenu = [[CocoaPopupMenu alloc] initWith:self()]; } auto pPopupMenu::destruct() -> void { [cocoaPopupMenu cocoaPopupMenu]; } auto pPopupMenu::append(sAction action) -> void { if(auto pAction = action->self()) { [[cocoaPopupMenu cocoaPopupMenu] addItem:pAction->cocoaAction]; } } auto pPopupMenu::remove(sAction action) -> void { if(auto pAction = action->self()) { [[cocoaPopupMenu cocoaPopupMenu] removeItem:pAction->cocoaAction]; } } auto pPopupMenu::setVisible(bool visible) -> void { if(!visible) return; NSEvent* event = [[NSApplication sharedApplication] currentEvent]; [NSMenu popUpContextMenu:[cocoaPopupMenu cocoaPopupMenu] withEvent:event forView:nil]; } } #endif ares-126/hiro/cocoa/popup-menu.hpp000066400000000000000000000007271415063341600171720ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) @interface CocoaPopupMenu : NSMenuItem { @public hiro::mPopupMenu* popupMenu; NSMenu* cocoaPopupMenu; } -(id) initWith:(hiro::mPopupMenu&)popupMenu; -(NSMenu*) cocoaPopupMenu; @end namespace hiro { struct pPopupMenu : pObject { Declare(PopupMenu, Object) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setVisible(bool visible) -> void; CocoaPopupMenu* cocoaPopupMenu = nullptr; }; } #endif ares-126/hiro/cocoa/sizable.cpp000066400000000000000000000005221415063341600165020ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { auto pSizable::construct() -> void { } auto pSizable::destruct() -> void { } auto pSizable::minimumSize() const -> Size { return {0, 0}; } auto pSizable::setCollapsible(bool collapsible) -> void { } auto pSizable::setGeometry(Geometry geometry) -> void { self().doSize(); } } #endif ares-126/hiro/cocoa/sizable.hpp000066400000000000000000000004171415063341600165120ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { struct pSizable : pObject { Declare(Sizable, Object) virtual auto minimumSize() const -> Size; virtual auto setCollapsible(bool collapsible) -> void; virtual auto setGeometry(Geometry geometry) -> void; }; } #endif ares-126/hiro/cocoa/status-bar.cpp000066400000000000000000000017571415063341600171510ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { auto pStatusBar::construct() -> void { } auto pStatusBar::destruct() -> void { } auto pStatusBar::setEnabled(bool enabled) -> void { if(auto parent = _parent()) { [[parent->cocoaWindow statusBar] setEnabled:enabled]; } } auto pStatusBar::setFont(const Font& font) -> void { if(auto parent = _parent()) { [[parent->cocoaWindow statusBar] setFont:pFont::create(font)]; } } auto pStatusBar::setText(const string& text) -> void { if(auto parent = _parent()) { [[parent->cocoaWindow statusBar] setStringValue:[NSString stringWithUTF8String:state().text]]; } } auto pStatusBar::setVisible(bool visible) -> void { if(auto parent = _parent()) { [[parent->cocoaWindow statusBar] setHidden:!visible]; parent->setGeometry(parent->state().geometry); } } auto pStatusBar::_parent() -> maybe { if(auto parent = self().parentWindow()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/cocoa/status-bar.hpp000066400000000000000000000005421415063341600171450ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { struct pStatusBar : pObject { Declare(StatusBar, Object) auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _parent() -> maybe; }; } #endif ares-126/hiro/cocoa/timer.cpp000066400000000000000000000020331415063341600161700ustar00rootroot00000000000000#if defined(Hiro_Timer) @implementation CocoaTimer : NSObject -(id) initWith:(hiro::mTimer&)timerReference { if(self = [super init]) { timer = &timerReference; instance = nil; } return self; } -(NSTimer*) instance { return instance; } -(void) update { if(instance) { [instance invalidate]; instance = nil; } if(timer->enabled()) { instance = [NSTimer scheduledTimerWithTimeInterval:timer->state.interval / 1000.0 target:self selector:@selector(run:) userInfo:nil repeats:YES ]; } } -(void) run:(NSTimer*)instance { if(hiro::Application::state().quit) return; if(timer->enabled()) { timer->doActivate(); } } @end namespace hiro { auto pTimer::construct() -> void { cocoaTimer = [[CocoaTimer alloc] initWith:self()]; } auto pTimer::destruct() -> void { if([cocoaTimer instance]) [[cocoaTimer instance] invalidate]; } auto pTimer::setEnabled(bool enabled) -> void { [cocoaTimer update]; } auto pTimer::setInterval(u32 interval) -> void { [cocoaTimer update]; } } #endif ares-126/hiro/cocoa/timer.hpp000066400000000000000000000006571415063341600162070ustar00rootroot00000000000000#if defined(Hiro_Timer) @interface CocoaTimer : NSObject { @public hiro::mTimer* timer; NSTimer* instance; } -(id) initWith:(hiro::mTimer&)timer; -(NSTimer*) instance; -(void) update; -(void) run:(NSTimer*)instance; @end namespace hiro { struct pTimer : pObject { Declare(Timer, Object) auto setEnabled(bool enabled) -> void; auto setInterval(u32 interval) -> void; CocoaTimer* cocoaTimer = nullptr; }; } #endif ares-126/hiro/cocoa/utility.cpp000066400000000000000000000071421415063341600165610ustar00rootroot00000000000000auto NSMakeColor(const hiro::Color& color) -> NSColor* { return [NSColor colorWithRed:(color.red() / 255.0) green:(color.green() / 255.0) blue:(color.blue() / 255.0) alpha:(color.alpha() / 255.0)]; } auto NSMakeColor(const hiro::SystemColor color) -> NSColor* { switch(color) { case hiro::SystemColor::Text: return [NSColor textColor]; case hiro::SystemColor::Label: if([NSColor respondsToSelector:@selector(labelColor)]) return [NSColor labelColor]; return [NSColor textColor]; case hiro::SystemColor::Sublabel: if([NSColor respondsToSelector:@selector(secondaryLabelColor)]) return [NSColor secondaryLabelColor]; return [NSColor colorWithWhite:2/3.0 alpha:1.0]; case hiro::SystemColor::Link: if([NSColor respondsToSelector:@selector(linkColor)]) return [NSColor linkColor]; return [NSColor colorWithRed:0.21 green:0.48 blue:1.0 alpha:1.0]; case hiro::SystemColor::PlaceholderText: if([NSColor respondsToSelector:@selector(placeholderTextColor)]) return [NSColor placeholderTextColor]; return [NSColor colorWithWhite:0.5 alpha:1.0]; } return nil; } auto NSMakeCursor(const hiro::MouseCursor& mouseCursor) -> NSCursor* { if(mouseCursor == hiro::MouseCursor::Hand) return [NSCursor pointingHandCursor]; if(mouseCursor == hiro::MouseCursor::HorizontalResize) return [NSCursor resizeLeftRightCursor]; if(mouseCursor == hiro::MouseCursor::VerticalResize) return [NSCursor resizeUpDownCursor]; return nil; } auto NSMakeImage(image icon, u32 scaleWidth = 0, u32 scaleHeight = 0) -> NSImage* { if(!icon) return nil; if(scaleWidth && scaleHeight) icon.scale(scaleWidth, scaleHeight); icon.transform(0, 32, 255u << 24, 255u << 0, 255u << 8, 255u << 16); //Cocoa stores images in ABGR format //create NSImage from memory NSImage* cocoaImage = [[NSImage alloc] initWithSize:NSMakeSize(icon.width(), icon.height())]; NSBitmapImageRep* bitmap = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:nil pixelsWide:icon.width() pixelsHigh:icon.height() bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO colorSpaceName:NSDeviceRGBColorSpace bitmapFormat:NSAlphaNonpremultipliedBitmapFormat bytesPerRow:(4 * icon.width()) bitsPerPixel:32 ]; memory::copy([bitmap bitmapData], icon.data(), icon.width() * icon.height()); [cocoaImage addRepresentation:bitmap]; return cocoaImage; } auto NSMakeImage(multiFactorImage icon, u32 scaleWidth = 0, u32 scaleHeight = 0) -> NSImage* { if(!icon) return nil; NSImage* cocoaImage = NSMakeImage(icon.lowDPI(), scaleWidth, scaleHeight); if(!icon.highDPI()) return cocoaImage; NSImage* retinaCocoaImage = NSMakeImage(icon.highDPI(), scaleWidth * 2, scaleHeight * 2); [cocoaImage addRepresentation:retinaCocoaImage.representations[0]]; return cocoaImage; } auto DropPathsOperation(id sender) -> NSDragOperation { NSPasteboard* pboard = [sender draggingPasteboard]; if([[pboard types] containsObject:NSFilenamesPboardType]) { if([sender draggingSourceOperationMask] & NSDragOperationGeneric) { return NSDragOperationGeneric; } } return NSDragOperationNone; } auto DropPaths(id sender) -> vector { vector paths; NSPasteboard* pboard = [sender draggingPasteboard]; if([[pboard types] containsObject:NSFilenamesPboardType]) { NSArray* files = [pboard propertyListForType:NSFilenamesPboardType]; for(u32 n = 0; n < [files count]; n++) { string path = [[files objectAtIndex:n] UTF8String]; if(directory::exists(path) && !path.endsWith("/")) path.append("/"); paths.append(path); } } return paths; } ares-126/hiro/cocoa/widget/000077500000000000000000000000001415063341600156315ustar00rootroot00000000000000ares-126/hiro/cocoa/widget/button.cpp000066400000000000000000000041471415063341600176560ustar00rootroot00000000000000#if defined(Hiro_Button) @implementation CocoaButton : NSButton -(id) initWith:(hiro::mButton&)buttonReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { button = &buttonReference; [self setTarget:self]; [self setAction:@selector(activate:)]; //NSRoundedBezelStyle has a fixed height; which breaks both icons and larger/smaller text [self setBezelStyle:NSRegularSquareBezelStyle]; } return self; } -(IBAction) activate:(id)sender { button->doActivate(); } @end namespace hiro { auto pButton::construct() -> void { cocoaView = cocoaButton = [[CocoaButton alloc] initWith:self()]; pWidget::construct(); setBordered(state().bordered); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); } auto pButton::destruct() -> void { [cocoaView removeFromSuperview]; } auto pButton::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + (state().text ? 20 : 8), size.height() + 8}; } auto pButton::setBordered(bool bordered) -> void { } auto pButton::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 2, geometry.y() - 2, geometry.width() + 4, geometry.height() + 4 }); } auto pButton::setIcon(const multiFactorImage& icon) -> void { [(CocoaButton*)cocoaView setImage:NSMakeImage(icon)]; } auto pButton::setOrientation(Orientation orientation) -> void { if(orientation == Orientation::Horizontal) [(CocoaButton*)cocoaView setImagePosition:NSImageLeft]; if(orientation == Orientation::Vertical ) [(CocoaButton*)cocoaView setImagePosition:NSImageAbove]; } auto pButton::setText(const string& text) -> void { [(CocoaButton*)cocoaView setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/widget/button.hpp000066400000000000000000000011261415063341600176550ustar00rootroot00000000000000#if defined(Hiro_Button) @interface CocoaButton : NSButton { @public hiro::mButton* button; } -(id) initWith:(hiro::mButton&)button; -(IBAction) activate:(id)sender; @end namespace hiro { struct pButton : pWidget { Declare(Button, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setGeometry(Geometry geometry) -> void override; auto setIcon(const multiFactorImage& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; CocoaButton* cocoaButton = nullptr; }; } #endif ares-126/hiro/cocoa/widget/canvas.cpp000066400000000000000000000110321415063341600176050ustar00rootroot00000000000000#if defined(Hiro_Canvas) @implementation CocoaCanvas : NSView -(id) initWith:(hiro::mCanvas&)canvasReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { canvas = &canvasReference; NSTrackingArea* area = [[NSTrackingArea alloc] initWithRect:[self frame] options:NSTrackingMouseMoved | NSTrackingMouseEnteredAndExited | NSTrackingActiveInKeyWindow | NSTrackingInVisibleRect owner:self userInfo:nil ]; [self addTrackingArea:area]; } return self; } -(void) resetCursorRects { if(auto mouseCursor = NSMakeCursor(canvas->mouseCursor())) { [self addCursorRect:self.bounds cursor:mouseCursor]; } } -(NSDragOperation) draggingEntered:(id)sender { return DropPathsOperation(sender); } -(BOOL) performDragOperation:(id)sender { auto paths = DropPaths(sender); if(!paths) return NO; canvas->doDrop(paths); return YES; } -(void) mouseButton:(NSEvent*)event down:(BOOL)isDown { if(isDown) { switch([event buttonNumber]) { case 0: return canvas->doMousePress(hiro::Mouse::Button::Left); case 1: return canvas->doMousePress(hiro::Mouse::Button::Right); case 2: return canvas->doMousePress(hiro::Mouse::Button::Middle); } } else { switch([event buttonNumber]) { case 0: return canvas->doMouseRelease(hiro::Mouse::Button::Left); case 1: return canvas->doMouseRelease(hiro::Mouse::Button::Right); case 2: return canvas->doMouseRelease(hiro::Mouse::Button::Middle); } } } -(void) mouseEntered:(NSEvent*)event { canvas->doMouseEnter(); } -(void) mouseExited:(NSEvent*)event { canvas->doMouseLeave(); } -(void) mouseMove:(NSEvent*)event { if([event window] == nil) return; NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; canvas->doMouseMove({(s32)location.x, (s32)([self frame].size.height - 1 - location.y)}); } -(void) mouseDown:(NSEvent*)event { [self mouseButton:event down:YES]; } -(void) mouseUp:(NSEvent*)event { [self mouseButton:event down:NO]; } -(void) mouseDragged:(NSEvent*)event { [self mouseMove:event]; } -(void) rightMouseDown:(NSEvent*)event { [self mouseButton:event down:YES]; } -(void) rightMouseUp:(NSEvent*)event { [self mouseButton:event down:NO]; } -(void) rightMouseDragged:(NSEvent*)event { [self mouseMove:event]; } -(void) otherMouseDown:(NSEvent*)event { [self mouseButton:event down:YES]; } -(void) otherMouseUp:(NSEvent*)event { [self mouseButton:event down:NO]; } -(void) otherMouseDragged:(NSEvent*)event { [self mouseMove:event]; } -(void) drawRect:(NSRect)dirtyRect { NSRect frame = self.bounds; s32 width = frame.size.width; s32 height = frame.size.height; if(auto icon = canvas->state.icon) { NSRect alignedFrame = NSMakeRect(canvas->state.alignment.horizontal() * (width - (s32)icon.width()), (1 - canvas->state.alignment.vertical()) * (height - (s32)icon.height()), icon.width(), icon.height()); [NSGraphicsContext currentContext].imageInterpolation = NSImageInterpolationNone; [NSMakeImage(icon) drawInRect:alignedFrame]; } else if(auto& gradient = canvas->state.gradient) { auto& colors = gradient.state.colors; image fill; fill.allocate(width, height); fill.gradient(colors[0].value(), colors[1].value(), colors[2].value(), colors[3].value()); [NSMakeImage(fill) drawInRect:frame]; } else { [NSMakeColor(canvas->state.color) set]; NSRectFill(dirtyRect); } } @end namespace hiro { auto pCanvas::construct() -> void { cocoaView = cocoaCanvas = [[CocoaCanvas alloc] initWith:self()]; pWidget::construct(); } auto pCanvas::destruct() -> void { [cocoaView removeFromSuperview]; } auto pCanvas::minimumSize() const -> Size { if(auto& icon = state().icon) return {(s32)icon.width(), (s32)icon.height()}; return {0, 0}; } auto pCanvas::setAlignment(Alignment) -> void { update(); } auto pCanvas::setColor(Color color) -> void { update(); } auto pCanvas::setDroppable(bool droppable) -> void { if(droppable) { [cocoaCanvas registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; } else { [cocoaCanvas unregisterDraggedTypes]; } } auto pCanvas::setFocusable(bool focusable) -> void { //TODO } auto pCanvas::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); update(); } auto pCanvas::setGradient(Gradient gradient) -> void { update(); } auto pCanvas::setIcon(const image& icon) -> void { update(); } auto pCanvas::update() -> void { [cocoaView setNeedsDisplay:YES]; } } #endif ares-126/hiro/cocoa/widget/canvas.hpp000066400000000000000000000026321415063341600176200ustar00rootroot00000000000000#if defined(Hiro_Canvas) @interface CocoaCanvas : NSView { @public hiro::mCanvas* canvas; } -(id) initWith:(hiro::mCanvas&)canvas; -(void) resetCursorRects; -(NSDragOperation) draggingEntered:(id)sender; -(BOOL) performDragOperation:(id)sender; -(void) mouseButton:(NSEvent*)event down:(BOOL)isDown; -(void) mouseEntered:(NSEvent*)event; -(void) mouseExited:(NSEvent*)event; -(void) mouseMove:(NSEvent*)event; -(void) mouseDown:(NSEvent*)event; -(void) mouseUp:(NSEvent*)event; -(void) mouseDragged:(NSEvent*)event; -(void) rightMouseDown:(NSEvent*)event; -(void) rightMouseUp:(NSEvent*)event; -(void) rightMouseDragged:(NSEvent*)event; -(void) otherMouseDown:(NSEvent*)event; -(void) otherMouseUp:(NSEvent*)event; -(void) otherMouseDragged:(NSEvent*)event; @end namespace hiro { struct pCanvas : pWidget { Declare(Canvas, Widget) auto minimumSize() const -> Size; auto setAlignment(Alignment) -> void; auto setColor(Color color) -> void; auto setDroppable(bool droppable) -> void override; auto setFocusable(bool focusable) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setGradient(Gradient gradient) -> void; auto setIcon(const image& icon) -> void; auto update() -> void; CocoaCanvas* cocoaCanvas = nullptr; NSImage* surface = nullptr; NSBitmapImageRep* bitmap = nullptr; u32 surfaceWidth = 0; u32 surfaceHeight = 0; }; } #endif ares-126/hiro/cocoa/widget/check-button.cpp000066400000000000000000000045701415063341600207310ustar00rootroot00000000000000#if defined(Hiro_CheckButton) @implementation CocoaCheckButton : NSButton -(id) initWith:(hiro::mCheckButton&)checkButtonReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { checkButton = &checkButtonReference; [self setTarget:self]; [self setAction:@selector(activate:)]; [self setBezelStyle:NSRegularSquareBezelStyle]; [self setButtonType:NSOnOffButton]; } return self; } -(IBAction) activate:(id)sender { checkButton->state.checked = [self state] != NSOffState; checkButton->doToggle(); } @end namespace hiro { auto pCheckButton::construct() -> void { cocoaView = cocoaCheckButton = [[CocoaCheckButton alloc] initWith:self()]; pWidget::construct(); setBordered(state().bordered); setChecked(state().checked); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); } auto pCheckButton::destruct() -> void { [cocoaView removeFromSuperview]; } auto pCheckButton::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + (state().text ? 20 : 8), size.height() + 8}; } auto pCheckButton::setBordered(bool bordered) -> void { } auto pCheckButton::setChecked(bool checked) -> void { [(CocoaCheckButton*)cocoaView setState:checked ? NSOnState : NSOffState]; } auto pCheckButton::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 2, geometry.y() - 2, geometry.width() + 4, geometry.height() + 4 }); } auto pCheckButton::setIcon(const multiFactorImage& icon) -> void { [(CocoaCheckButton*)cocoaView setImage:NSMakeImage(icon)]; } auto pCheckButton::setOrientation(Orientation orientation) -> void { if(orientation == Orientation::Horizontal) [(CocoaCheckButton*)cocoaView setImagePosition:NSImageLeft]; if(orientation == Orientation::Vertical ) [(CocoaCheckButton*)cocoaView setImagePosition:NSImageAbove]; } auto pCheckButton::setText(const string& text) -> void { [(CocoaCheckButton*)cocoaView setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/widget/check-button.hpp000066400000000000000000000012611415063341600207300ustar00rootroot00000000000000#if defined(Hiro_CheckButton) @interface CocoaCheckButton : NSButton { @public hiro::mCheckButton* checkButton; } -(id) initWith:(hiro::mCheckButton&)checkButton; -(IBAction) activate:(id)sender; @end namespace hiro { struct pCheckButton : pWidget { Declare(CheckButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked(bool checked) -> void; auto setGeometry(Geometry geometry) -> void override; auto setIcon(const multiFactorImage& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; CocoaCheckButton* cocoaCheckButton = nullptr; }; } #endif ares-126/hiro/cocoa/widget/check-label.cpp000066400000000000000000000025611415063341600204730ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) @implementation CocoaCheckLabel : NSButton -(id) initWith:(hiro::mCheckLabel&)checkLabelReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { checkLabel = &checkLabelReference; [self setTarget:self]; [self setAction:@selector(activate:)]; [self setButtonType:NSSwitchButton]; } return self; } -(IBAction) activate:(id)sender { checkLabel->state.checked = [self state] != NSOffState; checkLabel->doToggle(); } @end namespace hiro { auto pCheckLabel::construct() -> void { cocoaView = cocoaCheckLabel = [[CocoaCheckLabel alloc] initWith:self()]; pWidget::construct(); setChecked(state().checked); setText(state().text); } auto pCheckLabel::destruct() -> void { [cocoaView removeFromSuperview]; } auto pCheckLabel::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); return {size.width() + 20, size.height()}; } auto pCheckLabel::setChecked(bool checked) -> void { [(CocoaCheckLabel*)cocoaView setState:checked ? NSOnState : NSOffState]; } auto pCheckLabel::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 2, geometry.y(), geometry.width() + 4, geometry.height() }); } auto pCheckLabel::setText(const string& text) -> void { [(CocoaCheckLabel*)cocoaView setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/widget/check-label.hpp000066400000000000000000000010051415063341600204700ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) @interface CocoaCheckLabel : NSButton { @public hiro::mCheckLabel* checkLabel; } -(id) initWith:(hiro::mCheckLabel&)checkLabel; -(IBAction) activate:(id)sender; @end namespace hiro { struct pCheckLabel : pWidget { Declare(CheckLabel, Widget) auto minimumSize() const -> Size override; auto setChecked(bool checked) -> void; auto setGeometry(Geometry geometry) -> void; auto setText(const string& text) -> void; CocoaCheckLabel* cocoaCheckLabel = nullptr; }; } #endif ares-126/hiro/cocoa/widget/combo-button-item.cpp000066400000000000000000000014231415063341600217010ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { auto pComboButtonItem::construct() -> void { } auto pComboButtonItem::destruct() -> void { } auto pComboButtonItem::setIcon(const image& icon) -> void { } auto pComboButtonItem::setSelected() -> void { if(auto parent = _parent()) { [(CocoaComboButton*)(parent->cocoaView) selectItemAtIndex:self().offset()]; } } auto pComboButtonItem::setText(const string& text) -> void { if(auto parent = _parent()) { [[(CocoaComboButton*)(parent->cocoaView) itemAtIndex:self().offset()] setTitle:[NSString stringWithUTF8String:text]]; } } auto pComboButtonItem::_parent() -> maybe { if(auto parent = self().parentComboButton()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/cocoa/widget/combo-button-item.hpp000066400000000000000000000004471415063341600217130ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButtonItem : pObject { Declare(ComboButtonItem, Object) auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/cocoa/widget/combo-button.cpp000066400000000000000000000033641415063341600207530ustar00rootroot00000000000000#if defined(Hiro_ComboButton) @implementation CocoaComboButton : NSPopUpButton -(id) initWith:(hiro::mComboButton&)comboButtonReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0) pullsDown:NO]) { comboButton = &comboButtonReference; [self setTarget:self]; [self setAction:@selector(activate:)]; } return self; } -(IBAction) activate:(id)sender { if(auto p = comboButton->self()) p->_updateSelected([self indexOfSelectedItem]); comboButton->doChange(); } @end namespace hiro { auto pComboButton::construct() -> void { cocoaView = cocoaComboButton = [[CocoaComboButton alloc] initWith:self()]; pWidget::construct(); } auto pComboButton::destruct() -> void { [cocoaView removeFromSuperview]; } auto pComboButton::append(sComboButtonItem item) -> void { [(CocoaComboButton*)cocoaView addItemWithTitle:[NSString stringWithUTF8String:item->text()]]; } auto pComboButton::minimumSize() const -> Size { auto font = self().font(true); s32 maximumWidth = 0; for(auto& item : state().items) { maximumWidth = max(maximumWidth, pFont::size(font, item->state.text).width()); } Size size = pFont::size(font, " "); return {maximumWidth + 36, size.height() + 6}; } auto pComboButton::remove(sComboButtonItem item) -> void { [(CocoaComboButton*)cocoaView removeItemAtIndex:item->offset()]; } auto pComboButton::reset() -> void { [(CocoaComboButton*)cocoaView removeAllItems]; } auto pComboButton::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 2, geometry.y(), geometry.width() + 4, geometry.height() }); } auto pComboButton::_updateSelected(signed selected) -> void { for(auto& item : state().items) { item->state.selected = item->offset() == selected; } } } #endif ares-126/hiro/cocoa/widget/combo-button.hpp000066400000000000000000000011561415063341600207550ustar00rootroot00000000000000#if defined(Hiro_ComboButton) @interface CocoaComboButton : NSPopUpButton { @public hiro::mComboButton* comboButton; } -(id) initWith:(hiro::mComboButton&)comboButton; -(IBAction) activate:(id)sender; @end namespace hiro { struct pComboButton : pWidget { Declare(ComboButton, Widget) auto append(sComboButtonItem item) -> void; auto minimumSize() const -> Size override; auto remove(sComboButtonItem item) -> void; auto reset() -> void; auto setGeometry(Geometry geometry) -> void override; auto _updateSelected(signed selected) -> void; CocoaComboButton* cocoaComboButton = nullptr; }; } #endif ares-126/hiro/cocoa/widget/console.cpp000066400000000000000000000013451415063341600200020ustar00rootroot00000000000000#if defined(Hiro_Console) @implementation CocoaConsole : NSScrollView -(id) initWith:(phoenix::Console&)consoleReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { console = &consoleReference; } return self; } @end namespace hiro { auto pConsole::print(string text) -> void { } auto pConsole::reset() -> void { } auto pConsole::setBackgroundColor(Color color) -> void { } auto pConsole::setForegroundColor(Color color) -> void { } auto pConsole::setPrompt(string prompt) -> void { } auto pConsole::constructor() -> void { cocoaView = cocoaConsole = [[CocoaConsole alloc] initWith:console]; } auto pConsole::destructor() -> void { [cocoaView removeFromSuperview]; [cocoaView release]; } } #endif ares-126/hiro/cocoa/widget/console.hpp000066400000000000000000000011411415063341600200010ustar00rootroot00000000000000#if defined(Hiro_Console) @interface CocoaConsole : NSScrollView { @public phoenix::Console* console; } -(id) initWith:(phoenix::Console&)console; @end namespace hiro { struct pConsole : public pWidget { Console& console; CocoaConsole* cocoaConsole = nullptr; auto print(string text) -> void; auto reset() -> void; auto setBackgroundColor(Color color) -> void; auto setForegroundColor(Color color) -> void; auto setPrompt(string prompt) -> void; pConsole(Console& console) : pWidget(console), console(console) {} auto constructor() -> void; auto destructor() -> void; }; } #endif ares-126/hiro/cocoa/widget/frame.cpp000066400000000000000000000033501415063341600174300ustar00rootroot00000000000000#if defined(Hiro_Frame) @implementation CocoaFrame : NSBox -(id) initWith:(hiro::mFrame&)frameReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { frame = &frameReference; [self setTitle:@""]; } return self; } @end namespace hiro { auto pFrame::construct() -> void { cocoaView = cocoaFrame = [[CocoaFrame alloc] initWith:self()]; pWidget::construct(); setText(state().text); } auto pFrame::destruct() -> void { [cocoaView removeFromSuperview]; } auto pFrame::append(sSizable sizable) -> void { } auto pFrame::remove(sSizable sizable) -> void { } auto pFrame::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); if(auto& sizable = state().sizable) sizable->setEnabled(enabled); } auto pFrame::setFont(const Font& font) -> void { [(CocoaFrame*)cocoaView setTitleFont:pFont::create(font)]; if(auto& sizable = state().sizable) sizable->setFont(font); } auto pFrame::setGeometry(Geometry geometry) -> void { bool empty = !state().text; Size size = pFont::size(self().font(true), state().text); pWidget::setGeometry({ geometry.x() - 3, geometry.y() - (empty ? size.height() - 2 : 1), geometry.width() + 6, geometry.height() + (empty ? size.height() + 2 : 5) }); if(auto& sizable = state().sizable) { sizable->setGeometry({ geometry.x() + 1, geometry.y() + (empty ? 1 : size.height() - 2), geometry.width() - 2, geometry.height() - (empty ? 1 : size.height() - 1) }); } } auto pFrame::setText(const string& text) -> void { [(CocoaFrame*)cocoaView setTitle:[NSString stringWithUTF8String:text]]; } auto pFrame::setVisible(bool visible) -> void { pWidget::setVisible(visible); if(auto& sizable = state().sizable) sizable->setVisible(visible); } } #endif ares-126/hiro/cocoa/widget/frame.hpp000066400000000000000000000011131415063341600174300ustar00rootroot00000000000000#if defined(Hiro_Frame) @interface CocoaFrame : NSBox { @public hiro::mFrame* frame; } -(id) initWith:(hiro::mFrame&)frame; @end namespace hiro { struct pFrame : pWidget { Declare(Frame, Widget) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; CocoaFrame* cocoaFrame = nullptr; }; } #endif ares-126/hiro/cocoa/widget/hex-edit.cpp000066400000000000000000000014531415063341600200470ustar00rootroot00000000000000#if defined(Hiro_HexEdit) @implementation CocoaHexEdit : NSScrollView -(id) initWith:(hiro::mHexEdit&)hexEditReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { hexEdit = &hexEditReference; } return self; } @end namespace hiro { auto pHexEdit::construct() -> void { cocoaView = cocoaHexEdit = [[CocoaHexEdit alloc] initWith:self()]; } auto pHexEdit::destruct() -> void { [cocoaView removeFromSuperview]; } auto pHexEdit::setAddress(u32 offset) -> void { } auto pHexEdit::setBackgroundColor(Color color) -> void { } auto pHexEdit::setColumns(u32 columns) -> void { } auto pHexEdit::setForegroundColor(Color color) -> void { } auto pHexEdit::setLength(u32 length) -> void { } auto pHexEdit::setRows(u32 rows) -> void { } auto pHexEdit::update() -> void { } } #endif ares-126/hiro/cocoa/widget/hex-edit.hpp000066400000000000000000000010621415063341600200500ustar00rootroot00000000000000#if defined(Hiro_HexEdit) @interface CocoaHexEdit : NSScrollView { @public hiro::mHexEdit* hexEdit; } -(id) initWith:(hiro::mHexEdit&)hexEdit; @end namespace hiro { struct pHexEdit : public pWidget { Declare(HexEdit, Widget); auto setAddress(u32 address) -> void; auto setBackgroundColor(Color color) -> void; auto setColumns(u32 columns) -> void; auto setForegroundColor(Color color) -> void; auto setLength(u32 length) -> void; auto setRows(u32 rows) -> void; auto update() -> void; CocoaHexEdit* cocoaHexEdit = nullptr; }; } #endif ares-126/hiro/cocoa/widget/horizontal-scroll-bar.cpp000066400000000000000000000037051415063341600225710ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) @implementation CocoaHorizontalScrollBar : NSScroller -(id) initWith:(hiro::mHorizontalScrollBar&)horizontalScrollBarReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 1, 0)]) { horizontalScrollBar = &horizontalScrollBarReference; [self setTarget:self]; [self setAction:@selector(scroll:)]; [self setControlSize:NSRegularControlSize]; [self setScrollerStyle:NSScrollerStyleLegacy]; [self setEnabled:YES]; [self update]; } return self; } -(void) update { f64 d = 1.0 / horizontalScrollBar->state.length; f64 f = d * horizontalScrollBar->state.position; [self setDoubleValue:f]; [self setKnobProportion:d]; } -(IBAction) scroll:(id)sender { auto& state = horizontalScrollBar->state; switch([self hitPart]) { case NSScrollerIncrementLine: case NSScrollerIncrementPage: if(state.position < state.length - 1) state.position++; [self update]; break; case NSScrollerDecrementLine: case NSScrollerDecrementPage: if(state.position) state.position--; [self update]; break; case NSScrollerKnob: state.position = [self doubleValue] * state.length; break; } horizontalScrollBar->doChange(); } @end namespace hiro { auto pHorizontalScrollBar::construct() -> void { cocoaView = cocoaHorizontalScrollBar = [[CocoaHorizontalScrollBar alloc] initWith:self()]; pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pHorizontalScrollBar::destruct() -> void { [cocoaView removeFromSuperview]; } auto pHorizontalScrollBar::minimumSize() const -> Size { return {32, (s32)[NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy]}; } auto pHorizontalScrollBar::setLength(u32 length) -> void { [(CocoaHorizontalScrollBar*)cocoaView update]; } auto pHorizontalScrollBar::setPosition(u32 position) -> void { [(CocoaHorizontalScrollBar*)cocoaView update]; } } #endif ares-126/hiro/cocoa/widget/horizontal-scroll-bar.hpp000066400000000000000000000010731415063341600225720ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) @interface CocoaHorizontalScrollBar : NSScroller { @public hiro::mHorizontalScrollBar* horizontalScrollBar; } -(id) initWith:(hiro::mHorizontalScrollBar&)horizontalScrollBar; -(void) update; -(IBAction) scroll:(id)sender; @end namespace hiro { struct pHorizontalScrollBar : pWidget { Declare(HorizontalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; CocoaHorizontalScrollBar* cocoaHorizontalScrollBar = nullptr; }; } #endif ares-126/hiro/cocoa/widget/horizontal-slider.cpp000066400000000000000000000025111415063341600220050ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) @implementation CocoaHorizontalSlider : NSSlider -(id) initWith:(hiro::mHorizontalSlider&)horizontalSliderReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 1, 0)]) { horizontalSlider = &horizontalSliderReference; [self setTarget:self]; [self setAction:@selector(activate:)]; [self setMinValue:0]; } return self; } -(IBAction) activate:(id)sender { horizontalSlider->state.position = [self doubleValue]; horizontalSlider->doChange(); } @end namespace hiro { auto pHorizontalSlider::construct() -> void { cocoaView = cocoaHorizontalSlider = [[CocoaHorizontalSlider alloc] initWith:self()]; pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pHorizontalSlider::destruct() -> void { [cocoaView removeFromSuperview]; } auto pHorizontalSlider::minimumSize() const -> Size { return {48, 20}; } auto pHorizontalSlider::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 2, geometry.y(), geometry.width() + 4, geometry.height() }); } auto pHorizontalSlider::setLength(u32 length) -> void { [(CocoaHorizontalSlider*)cocoaView setMaxValue:length - 1]; } auto pHorizontalSlider::setPosition(u32 position) -> void { [(CocoaHorizontalSlider*)cocoaView setDoubleValue:position]; } } #endif ares-126/hiro/cocoa/widget/horizontal-slider.hpp000066400000000000000000000010741415063341600220150ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) @interface CocoaHorizontalSlider : NSSlider { @public hiro::mHorizontalSlider* horizontalSlider; } -(id) initWith:(hiro::mHorizontalSlider&)horizontalSlider; -(IBAction) activate:(id)sender; @end namespace hiro { struct pHorizontalSlider : pWidget { Declare(HorizontalSlider, Widget) auto minimumSize() const -> Size override; auto setGeometry(Geometry geometry) -> void; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; CocoaHorizontalSlider* cocoaHorizontalSlider = nullptr; }; } #endif ares-126/hiro/cocoa/widget/label.cpp000066400000000000000000000107341415063341600174210ustar00rootroot00000000000000#if defined(Hiro_Label) @implementation CocoaLabel : NSView { NSColor *_foregroundColor; } -(id) initWith:(hiro::mLabel&)labelReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { label = &labelReference; } return self; } -(void) resetCursorRects { if(auto mouseCursor = NSMakeCursor(label->mouseCursor())) { [self addCursorRect:self.bounds cursor:mouseCursor]; } } -(void) drawRect:(NSRect)dirtyRect { if(auto backgroundColor = label->backgroundColor()) { NSColor* color = NSMakeColor(backgroundColor); [color setFill]; NSRectFill(dirtyRect); } NSFont* font = hiro::pFont::create(label->font(true)); NSColor* color = _foregroundColor; if(!color) { color = NSMakeColor(hiro::SystemColor::Label); } NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; paragraphStyle.alignment = NSTextAlignmentLeft; paragraphStyle.lineBreakMode = NSLineBreakByClipping; NSDictionary* attributes = @{ NSFontAttributeName:font, NSForegroundColorAttributeName:color, NSParagraphStyleAttributeName:paragraphStyle }; auto size = hiro::pFont::size(label->font(true), label->text()); auto alignment = label->alignment(); if(!alignment) alignment = {0.0, 0.5}; auto geometry = label->geometry(); NSRect rect = {{geometry.x(), geometry.y()}, {geometry.width(), geometry.height()}}; rect.origin.x = max(0, (geometry.width() - size.width()) * alignment.horizontal()); rect.origin.y = max(0, (geometry.height() - size.height()) * alignment.vertical()); rect.size.width = min(geometry.width(), size.width()); rect.size.height = min(geometry.height(), size.height()); NSString* string = [NSString stringWithUTF8String:label->text()]; [string drawInRect:rect withAttributes:attributes]; } -(void) mouseButton:(NSEvent*)event down:(BOOL)isDown { if(isDown) { switch([event buttonNumber]) { case 0: return label->doMousePress(hiro::Mouse::Button::Left); case 1: return label->doMousePress(hiro::Mouse::Button::Right); case 2: return label->doMousePress(hiro::Mouse::Button::Middle); } } else { switch([event buttonNumber]) { case 0: return label->doMouseRelease(hiro::Mouse::Button::Left); case 1: return label->doMouseRelease(hiro::Mouse::Button::Right); case 2: return label->doMouseRelease(hiro::Mouse::Button::Middle); } } } -(void) mouseEntered:(NSEvent*)event { label->doMouseEnter(); } -(void) mouseExited:(NSEvent*)event { label->doMouseLeave(); } -(void) mouseMove:(NSEvent*)event { if([event window] == nil) return; NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; label->doMouseMove({(s32)location.x, (s32)([self frame].size.height - 1 - location.y)}); } -(void) mouseDown:(NSEvent*)event { [self mouseButton:event down:YES]; } -(void) mouseUp:(NSEvent*)event { [self mouseButton:event down:NO]; } -(void) mouseDragged:(NSEvent*)event { [self mouseMove:event]; } -(void) rightMouseDown:(NSEvent*)event { [self mouseButton:event down:YES]; } -(void) rightMouseUp:(NSEvent*)event { [self mouseButton:event down:NO]; } -(void) rightMouseDragged:(NSEvent*)event { [self mouseMove:event]; } -(void) otherMouseDown:(NSEvent*)event { [self mouseButton:event down:YES]; } -(void) otherMouseUp:(NSEvent*)event { [self mouseButton:event down:NO]; } -(void) otherMouseDragged:(NSEvent*)event { [self mouseMove:event]; } namespace hiro { auto pLabel::construct() -> void { cocoaView = cocoaLabel = [[CocoaLabel alloc] initWith:self()]; pWidget::construct(); setAlignment(state().alignment); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); setText(state().text); } auto pLabel::destruct() -> void { [cocoaView removeFromSuperview]; } auto pLabel::minimumSize() const -> Size { return pFont::size(self().font(true), state().text); } auto pLabel::setAlignment(Alignment alignment) -> void { [cocoaView setNeedsDisplay:YES]; } auto pLabel::setBackgroundColor(Color color) -> void { [cocoaView setNeedsDisplay:YES]; } auto pLabel::setForegroundColor(Color color) -> void { ((CocoaLabel *)cocoaView)->_foregroundColor = color? NSMakeColor(color): nil; [cocoaView setNeedsDisplay:YES]; } auto pLabel::setForegroundColor(SystemColor color) -> void { ((CocoaLabel *)cocoaView)->_foregroundColor = NSMakeColor(color); [cocoaView setNeedsDisplay:YES]; } auto pLabel::setText(const string& text) -> void { [cocoaView setNeedsDisplay:YES]; } } @end #endif ares-126/hiro/cocoa/widget/label.hpp000066400000000000000000000021371415063341600174240ustar00rootroot00000000000000#if defined(Hiro_Label) @interface CocoaLabel : NSView { @public hiro::mLabel* label; } -(id) initWith:(hiro::mLabel&)label; -(void) resetCursorRects; -(void) drawRect:(NSRect)dirtyRect; -(void) mouseButton:(NSEvent*)event down:(BOOL)isDown; -(void) mouseEntered:(NSEvent*)event; -(void) mouseExited:(NSEvent*)event; -(void) mouseMove:(NSEvent*)event; -(void) mouseDown:(NSEvent*)event; -(void) mouseUp:(NSEvent*)event; -(void) mouseDragged:(NSEvent*)event; -(void) rightMouseDown:(NSEvent*)event; -(void) rightMouseUp:(NSEvent*)event; -(void) rightMouseDragged:(NSEvent*)event; -(void) otherMouseDown:(NSEvent*)event; -(void) otherMouseUp:(NSEvent*)event; -(void) otherMouseDragged:(NSEvent*)event; @end namespace hiro { struct pLabel : pWidget { Declare(Label, Widget) auto minimumSize() const -> Size override; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setForegroundColor(SystemColor color) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; CocoaLabel* cocoaLabel = nullptr; }; } #endif ares-126/hiro/cocoa/widget/line-edit.cpp000066400000000000000000000036411415063341600202130ustar00rootroot00000000000000#if defined(Hiro_LineEdit) @implementation CocoaLineEdit : NSTextField -(id) initWith:(hiro::mLineEdit&)lineEditReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { lineEdit = &lineEditReference; [self setDelegate:self]; [self setTarget:self]; [self setAction:@selector(activate:)]; //prevent focus changes from generating activate event [[self cell] setSendsActionOnEndEditing:NO]; } return self; } -(void) textDidChange:(NSNotification*)n { lineEdit->state.text = [[self stringValue] UTF8String]; lineEdit->doChange(); } -(IBAction) activate:(id)sender { lineEdit->doActivate(); } @end namespace hiro { auto pLineEdit::construct() -> void { cocoaView = cocoaLineEdit = [[CocoaLineEdit alloc] initWith:self()]; pWidget::construct(); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setForegroundColor(state().foregroundColor); setText(state().text); } auto pLineEdit::destruct() -> void { [cocoaView removeFromSuperview]; } auto pLineEdit::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); return {size.width() + 10, size.height() + 8}; } auto pLineEdit::setBackgroundColor(Color color) -> void { } auto pLineEdit::setEditable(bool editable) -> void { [(CocoaLineEdit*)cocoaView setEditable:editable]; } auto pLineEdit::setForegroundColor(SystemColor color) -> void { [[(CocoaLineEdit*)cocoaView cell] setTextColor: NSMakeColor(color)?: NSMakeColor(hiro::SystemColor::Text)]; } auto pLineEdit::setForegroundColor(Color color) -> void { [[(CocoaLineEdit*)cocoaView cell] setTextColor: NSMakeColor(color)?: NSMakeColor(hiro::SystemColor::Text)]; } auto pLineEdit::setText(const string& text) -> void { [(CocoaLineEdit*)cocoaView setStringValue:[NSString stringWithUTF8String:text]]; } /* auto pLineEdit::text() const -> string { return [[cocoaView stringValue] UTF8String]; } */ } #endif ares-126/hiro/cocoa/widget/line-edit.hpp000066400000000000000000000012351415063341600202150ustar00rootroot00000000000000#if defined(Hiro_LineEdit) @interface CocoaLineEdit : NSTextField { @public hiro::mLineEdit* lineEdit; } -(id) initWith:(hiro::mLineEdit&)lineEdit; -(void) textDidChange:(NSNotification*)n; -(IBAction) activate:(id)sender; @end namespace hiro { struct pLineEdit : pWidget { Declare(LineEdit, Widget) auto minimumSize() const -> Size override; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(SystemColor color) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; CocoaLineEdit* cocoaLineEdit = nullptr; }; } #endif ares-126/hiro/cocoa/widget/progress-bar.cpp000066400000000000000000000015051415063341600207440ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) @implementation CocoaProgressBar : NSProgressIndicator -(id) initWith:(hiro::mProgressBar&)progressBarReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { progressBar = &progressBarReference; [self setIndeterminate:NO]; [self setMinValue:0.0]; [self setMaxValue:100.0]; } return self; } @end namespace hiro { auto pProgressBar::construct() -> void { cocoaView = cocoaProgressBar = [[CocoaProgressBar alloc] initWith:self()]; pWidget::construct(); setPosition(state().position); } auto pProgressBar::destruct() -> void { [cocoaView removeFromSuperview]; } auto pProgressBar::minimumSize() const -> Size { return {0, 12}; } auto pProgressBar::setPosition(u32 position) -> void { [(CocoaProgressBar*)cocoaView setDoubleValue:position]; } } #endif ares-126/hiro/cocoa/widget/progress-bar.hpp000066400000000000000000000006371415063341600207560ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) @interface CocoaProgressBar : NSProgressIndicator { @public hiro::mProgressBar* progressBar; } -(id) initWith:(hiro::mProgressBar&)progressBar; @end namespace hiro { struct pProgressBar : pWidget { Declare(ProgressBar, Widget) auto minimumSize() const -> Size override; auto setPosition(u32 position) -> void; CocoaProgressBar* cocoaProgressBar = nullptr; }; } #endif ares-126/hiro/cocoa/widget/radio-button.cpp000066400000000000000000000054001415063341600207430ustar00rootroot00000000000000#if defined(Hiro_RadioButton) @implementation CocoaRadioButton : NSButton -(id) initWith:(hiro::mRadioButton&)radioButtonReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { radioButton = &radioButtonReference; [self setTarget:self]; [self setAction:@selector(activate:)]; [self setBezelStyle:NSRegularSquareBezelStyle]; [self setButtonType:NSOnOffButton]; } return self; } -(IBAction) activate:(id)sender { bool wasChecked = radioButton->state.checked; radioButton->setChecked(); if(!wasChecked) radioButton->doActivate(); } @end namespace hiro { auto pRadioButton::construct() -> void { cocoaView = cocoaRadioButton = [[CocoaRadioButton alloc] initWith:self()]; pWidget::construct(); setBordered(state().bordered); if(state().checked) setChecked(); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); } auto pRadioButton::destruct() -> void { [cocoaView removeFromSuperview]; } auto pRadioButton::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + (state().text ? 20 : 8), size.height() + 8}; } auto pRadioButton::setBordered(bool bordered) -> void { } auto pRadioButton::setChecked() -> void { if(auto group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto self = object->self()) { if(auto p = dynamic_cast(self)) { auto state = this == p ? NSOnState : NSOffState; [(CocoaRadioButton*)p->cocoaView setState:state]; } } } } } } auto pRadioButton::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 2, geometry.y() - 2, geometry.width() + 4, geometry.height() + 4 }); } auto pRadioButton::setGroup(sGroup group) -> void { } auto pRadioButton::setIcon(const multiFactorImage& icon) -> void { [(CocoaRadioButton*)cocoaView setImage:NSMakeImage(icon)]; } auto pRadioButton::setOrientation(Orientation orientation) -> void { if(orientation == Orientation::Horizontal) [(CocoaRadioButton*)cocoaView setImagePosition:NSImageLeft]; if(orientation == Orientation::Vertical ) [(CocoaRadioButton*)cocoaView setImagePosition:NSImageAbove]; } auto pRadioButton::setText(const string& text) -> void { [(CocoaRadioButton*)cocoaView setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/widget/radio-button.hpp000066400000000000000000000013141415063341600207500ustar00rootroot00000000000000#if defined(Hiro_RadioButton) @interface CocoaRadioButton : NSButton { @public hiro::mRadioButton* radioButton; } -(id) initWith:(hiro::mRadioButton&)radioButton; -(IBAction) activate:(id)sender; @end namespace hiro { struct pRadioButton : pWidget { Declare(RadioButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked() -> void; auto setGeometry(Geometry geometry) -> void override; auto setGroup(sGroup group) -> void; auto setIcon(const multiFactorImage& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; CocoaRadioButton* cocoaRadioButton = nullptr; }; } #endif ares-126/hiro/cocoa/widget/radio-label.cpp000066400000000000000000000037271415063341600205210ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) @implementation CocoaRadioLabel : NSButton -(id) initWith:(hiro::mRadioLabel&)radioLabelReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { radioLabel = &radioLabelReference; [self setTarget:self]; [self setAction:@selector(activate:)]; [self setButtonType:NSRadioButton]; } return self; } -(IBAction) activate:(id)sender { radioLabel->setChecked(); radioLabel->doActivate(); } @end namespace hiro { auto pRadioLabel::construct() -> void { cocoaView = cocoaRadioLabel = [[CocoaRadioLabel alloc] initWith:self()]; pWidget::construct(); setGroup(state().group); setText(state().text); } auto pRadioLabel::destruct() -> void { [cocoaView removeFromSuperview]; } auto pRadioLabel::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); return {size.width() + 22, size.height() + 2}; } auto pRadioLabel::setChecked() -> void { setGroup(state().group); } auto pRadioLabel::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 1, geometry.y(), geometry.width() + 2, geometry.height() }); //buttonType:NSRadioButton does not set initial icon via programmatically calling setState:NSOnState. //I can only get the icon to show as checked initially by setting the state on geometry resizes. //adjusting the initWithFrame:NSMakeRect did not help. if(state().checked) setChecked(); } auto pRadioLabel::setGroup(sGroup group) -> void { if(!group) return; for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto self = object->self()) { if(auto p = dynamic_cast(self)) { auto state = p->state().checked ? NSOnState : NSOffState; [(CocoaRadioLabel*)p->cocoaView setState:state]; } } } } } auto pRadioLabel::setText(const string& text) -> void { [(CocoaRadioLabel*)cocoaView setTitle:[NSString stringWithUTF8String:text]]; } } #endif ares-126/hiro/cocoa/widget/radio-label.hpp000066400000000000000000000010511415063341600205120ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) @interface CocoaRadioLabel : NSButton { @public hiro::mRadioLabel* radioLabel; } -(id) initWith:(hiro::mRadioLabel&)radioLabel; -(IBAction) activate:(id)sender; @end namespace hiro { struct pRadioLabel : pWidget { Declare(RadioLabel, Widget) auto minimumSize() const -> Size override; auto setChecked() -> void; auto setGeometry(Geometry geometry) -> void override; auto setGroup(sGroup group) -> void; auto setText(const string& text) -> void; CocoaRadioLabel* cocoaRadioLabel = nullptr; }; } #endif ares-126/hiro/cocoa/widget/tab-frame-item.cpp000066400000000000000000000016201415063341600211260ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { auto pTabFrameItem::construct() -> void { } auto pTabFrameItem::destruct() -> void { } auto pTabFrameItem::append(sSizable sizable) -> void { } auto pTabFrameItem::remove(sSizable sizable) -> void { } auto pTabFrameItem::setClosable(bool closable) -> void { } auto pTabFrameItem::setIcon(const image& icon) -> void { } auto pTabFrameItem::setMovable(bool movable) -> void { } auto pTabFrameItem::setSelected() -> void { if(auto parent = _parent()) { [(CocoaTabFrame*)(parent->cocoaView) selectTabViewItem:cocoaTabFrameItem]; } } auto pTabFrameItem::setText(const string& text) -> void { [cocoaTabFrameItem setLabel:[NSString stringWithUTF8String:state().text]]; } auto pTabFrameItem::_parent() -> maybe { if(auto parent = self().parentTabFrame()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/cocoa/widget/tab-frame-item.hpp000066400000000000000000000007641415063341600211430ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrameItem : pObject { Declare(TabFrameItem, Object) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setClosable(bool closable) -> void; auto setIcon(const image& icon) -> void; auto setMovable(bool movable) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; CocoaTabFrameItem* cocoaTabFrameItem = nullptr; auto _parent() -> maybe; }; } #endif ares-126/hiro/cocoa/widget/tab-frame.cpp000066400000000000000000000105721415063341600202000ustar00rootroot00000000000000#if defined(Hiro_TabFrame) @implementation CocoaTabFrame : NSTabView -(id) initWith:(hiro::mTabFrame&)tabFrameReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { tabFrame = &tabFrameReference; [self setDelegate:self]; } return self; } -(void) tabView:(NSTabView*)tabView didSelectTabViewItem:(NSTabViewItem*)tabViewItem { tabFrame->self()->_synchronizeSizable(); tabFrame->doChange(); } @end @implementation CocoaTabFrameItem : NSTabViewItem -(id) initWith:(hiro::mTabFrame&)tabFrameReference { if(self = [super initWithIdentifier:nil]) { tabFrame = &tabFrameReference; cocoaTabFrame = tabFrame->self()->cocoaTabFrame; } return self; } -(NSSize) sizeOfLabel:(BOOL)shouldTruncateLabel { NSSize sizeOfLabel = [super sizeOfLabel:shouldTruncateLabel]; s32 selection = [cocoaTabFrame indexOfTabViewItem:self]; if(selection >= 0) { if(auto item = tabFrame->item(selection)) { if(item->state.icon) { u32 iconSize = hiro::pFont::size(tabFrame->font(true), " ").height(); sizeOfLabel.width += iconSize + 2; } } } return sizeOfLabel; } -(void) drawLabel:(BOOL)shouldTruncateLabel inRect:(NSRect)tabRect { s32 selection = [cocoaTabFrame indexOfTabViewItem:self]; if(selection >= 0) { if(auto item = tabFrame->item(selection)) { if(item->state.icon) { u32 iconSize = hiro::pFont::size(tabFrame->font(true), " ").height(); NSImage* image = NSMakeImage(item->state.icon); [[NSGraphicsContext currentContext] saveGraphicsState]; NSRect targetRect = NSMakeRect(tabRect.origin.x, tabRect.origin.y + 2, iconSize, iconSize); [image drawInRect:targetRect fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil]; [[NSGraphicsContext currentContext] restoreGraphicsState]; tabRect.origin.x += iconSize + 2; tabRect.size.width -= iconSize + 2; } } } [super drawLabel:shouldTruncateLabel inRect:tabRect]; } @end namespace hiro { auto pTabFrame::construct() -> void { cocoaView = cocoaTabFrame = [[CocoaTabFrame alloc] initWith:self()]; pWidget::construct(); setNavigation(state().navigation); } auto pTabFrame::destruct() -> void { [cocoaView removeFromSuperview]; } auto pTabFrame::append(sTabFrameItem item) -> void { if(auto p = item->self()) { p->cocoaTabFrameItem = [[CocoaTabFrameItem alloc] initWith:self()]; [p->cocoaTabFrameItem setLabel:[NSString stringWithUTF8String:item->state.text]]; [(CocoaTabFrame*)cocoaView addTabViewItem:p->cocoaTabFrameItem]; } } auto pTabFrame::remove(sTabFrameItem item) -> void { if(auto p = item->self()) { [(CocoaTabFrame*)cocoaView removeTabViewItem:p->cocoaTabFrameItem]; } } auto pTabFrame::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { if(auto self = sizable->self()) self->setEnabled(sizable->enabled(true)); } } } auto pTabFrame::setFont(const Font& font) -> void { pWidget::setFont(font); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { if(auto self = sizable->self()) self->setFont(sizable->font(true)); } } } auto pTabFrame::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x() - 7, geometry.y() - 5, geometry.width() + 14, geometry.height() + 6 }); geometry.setGeometry({ geometry.x() + 1, geometry.y() + 22, geometry.width() - 2, geometry.height() - 32 }); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { sizable->setGeometry(geometry); } } _synchronizeSizable(); } auto pTabFrame::setNavigation(Navigation navigation) -> void { } auto pTabFrame::setVisible(bool visible) -> void { pWidget::setVisible(visible); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { if(auto self = sizable->self()) self->setVisible(sizable->visible(true)); } } } auto pTabFrame::_synchronizeSizable() -> void { NSTabViewItem* tabViewItem = [(CocoaTabFrame*)cocoaView selectedTabViewItem]; s32 selected = tabViewItem ? [(CocoaTabFrame*)cocoaView indexOfTabViewItem:tabViewItem] : -1; for(auto& item : state().items) { item->state.selected = item->offset() == selected; if(auto& sizable = item->state.sizable) sizable->setVisible(item->selected()); } } } #endif ares-126/hiro/cocoa/widget/tab-frame.hpp000066400000000000000000000020471415063341600202030ustar00rootroot00000000000000#if defined(Hiro_TabFrame) @interface CocoaTabFrame : NSTabView { @public hiro::mTabFrame* tabFrame; } -(id) initWith:(hiro::mTabFrame&)tabFrame; -(void) tabView:(NSTabView*)tabView didSelectTabViewItem:(NSTabViewItem*)tabViewItem; @end @interface CocoaTabFrameItem : NSTabViewItem { @public hiro::mTabFrame* tabFrame; CocoaTabFrame* cocoaTabFrame; } -(id) initWith:(hiro::mTabFrame&)tabFrame; -(NSSize) sizeOfLabel:(BOOL)shouldTruncateLabel; -(void) drawLabel:(BOOL)shouldTruncateLabel inRect:(NSRect)tabRect; @end namespace hiro { struct pTabFrame : pWidget { Declare(TabFrame, Widget) auto append(sTabFrameItem item) -> void; auto remove(sTabFrameItem item) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setNavigation(Navigation navigation) -> void; auto setVisible(bool visible) -> void override; auto _synchronizeSizable() -> void; CocoaTabFrame* cocoaTabFrame = nullptr; }; } #endif ares-126/hiro/cocoa/widget/table-view-cell.cpp000066400000000000000000000025651415063341600213210ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewCell::construct() -> void { } auto pTableViewCell::destruct() -> void { } auto pTableViewCell::setAlignment(Alignment alignment) -> void { _redraw(); } auto pTableViewCell::setBackgroundColor(Color color) -> void { _redraw(); } auto pTableViewCell::setCheckable(bool checkable) -> void { _redraw(); } auto pTableViewCell::setChecked(bool checked) -> void { _redraw(); } auto pTableViewCell::setForegroundColor(Color color) -> void { _redraw(); } auto pTableViewCell::setIcon(const image& icon) -> void { _redraw(); } auto pTableViewCell::setText(const string& text) -> void { _redraw(); } auto pTableViewCell::_grandparent() -> maybe { if(auto parent = _parent()) return parent->_parent(); return nothing; } auto pTableViewCell::_parent() -> maybe { if(auto parent = self().parentTableViewItem()) { if(auto self = parent->self()) return *self; } return nothing; } auto pTableViewCell::_redraw() -> void { if(auto pTableViewItem = _parent()) { if(auto pTableView = _grandparent()) { auto column = self().offset(); auto row = pTableViewItem->self().offset(); NSRect rect = [[pTableView->cocoaTableView content] frameOfCellAtColumn:column row:row]; [[pTableView->cocoaTableView content] setNeedsDisplayInRect:rect]; } } } } #endif ares-126/hiro/cocoa/widget/table-view-cell.hpp000066400000000000000000000010641415063341600213170ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewCell : pObject { Declare(TableViewCell, Object) auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setText(const string& text) -> void; auto _grandparent() -> maybe; auto _parent() -> maybe; auto _redraw() -> void; }; } #endif ares-126/hiro/cocoa/widget/table-view-column.cpp000066400000000000000000000044001415063341600216650ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewColumn::construct() -> void { if(auto tableView = _parent()) { [(CocoaTableView*)(tableView->cocoaView) reloadColumns]; } } auto pTableViewColumn::destruct() -> void { if(auto tableView = _parent()) { [(CocoaTableView*)(tableView->cocoaView) reloadColumns]; } } auto pTableViewColumn::setActive() -> void { } auto pTableViewColumn::setAlignment(Alignment alignment) -> void { } auto pTableViewColumn::setBackgroundColor(Color color) -> void { } auto pTableViewColumn::setEditable(bool editable) -> void { } auto pTableViewColumn::setExpandable(bool expandable) -> void { } auto pTableViewColumn::setFont(const Font& font) -> void { } auto pTableViewColumn::setForegroundColor(Color color) -> void { } auto pTableViewColumn::setHorizontalAlignment(double alignment) -> void { } auto pTableViewColumn::setIcon(const image& icon) -> void { //TODO } auto pTableViewColumn::setResizable(bool resizable) -> void { } auto pTableViewColumn::setSorting(Sort sorting) -> void { setText(state().text); } auto pTableViewColumn::setText(const string& text) -> void { if(auto parent = _parent()) { string label = text; if(state().sorting == Sort::Ascending ) label.append(" \u25b4"); if(state().sorting == Sort::Descending) label.append(" \u25be"); NSTableColumn* tableColumn = [[(CocoaTableView*)(parent->cocoaView) content] tableColumnWithIdentifier:[[NSNumber numberWithInteger:self().offset()] stringValue]]; [[tableColumn headerCell] setStringValue:[NSString stringWithUTF8String:label]]; [[[(CocoaTableView*)(parent->cocoaView) content] headerView] setNeedsDisplay:YES]; } } auto pTableViewColumn::setVerticalAlignment(double alignment) -> void { } auto pTableViewColumn::setVisible(bool visible) -> void { } auto pTableViewColumn::setWidth(signed width) -> void { if(auto parent = _parent()) { NSTableColumn* tableColumn = [[(CocoaTableView*)(parent->cocoaView) content] tableColumnWithIdentifier:[[NSNumber numberWithInteger:self().offset()] stringValue]]; tableColumn.width = width; } } auto pTableViewColumn::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto self = parent->self()) return *self; } return {}; } } #endif ares-126/hiro/cocoa/widget/table-view-column.hpp000066400000000000000000000015131415063341600216740ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewColumn : pObject { Declare(TableViewColumn, Object) auto setActive() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setExpandable(bool expandable) -> void; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setHorizontalAlignment(double) -> void; auto setIcon(const image& icon) -> void; auto setResizable(bool resizable) -> void; auto setSorting(Sort sorting) -> void; auto setText(const string& text) -> void; auto setVerticalAlignment(double) -> void; auto setVisible(bool visible) -> void override; auto setWidth(signed width) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/cocoa/widget/table-view-item.cpp000066400000000000000000000024561415063341600213370ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewItem::construct() -> void { } auto pTableViewItem::destruct() -> void { } auto pTableViewItem::append(sTableViewCell cell) -> void { if(auto tableView = _parent()) { [[(CocoaTableView*)(tableView->cocoaView) content] reloadData]; } } auto pTableViewItem::remove(sTableViewCell cell) -> void { if(auto tableView = _parent()) { [[(CocoaTableView*)(tableView->cocoaView) content] reloadData]; } } auto pTableViewItem::setAlignment(Alignment alignment) -> void { } auto pTableViewItem::setBackgroundColor(Color color) -> void { } auto pTableViewItem::setFocused() -> void { } auto pTableViewItem::setForegroundColor(Color color) -> void { } auto pTableViewItem::setSelected(bool selected) -> void { if(auto tableView = _parent()) { auto lock = tableView->acquire(); auto indexSet = [[NSMutableIndexSet alloc] init]; for(auto& item : tableView->state().items) { if(item->selected()) [indexSet addIndex:item->offset()]; } [[(CocoaTableView*)(tableView->cocoaView) content] selectRowIndexes:indexSet byExtendingSelection:NO]; } } auto pTableViewItem::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/cocoa/widget/table-view-item.hpp000066400000000000000000000007341415063341600213410ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewItem : pObject { Declare(TableViewItem, Object) auto append(sTableViewCell cell) -> void; auto remove(sTableViewCell cell) -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setFocused() -> void; auto setForegroundColor(Color color) -> void; auto setSelected(bool selected) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/cocoa/widget/table-view.cpp000066400000000000000000000371541415063341600204060ustar00rootroot00000000000000#if defined(Hiro_TableView) @implementation CocoaTableView : NSScrollView -(id) initWith:(hiro::mTableView&)tableViewReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { tableView = &tableViewReference; content = [[CocoaTableViewContent alloc] initWith:tableViewReference]; [self setDocumentView:content]; [self setBorderType:NSBezelBorder]; [self setHasVerticalScroller:YES]; [content setDataSource:self]; [content setDelegate:self]; [content setTarget:self]; [content setDoubleAction:@selector(doubleAction:)]; [content setAllowsColumnReordering:NO]; [content setAllowsColumnResizing:YES]; [content setAllowsColumnSelection:NO]; [content setAllowsEmptySelection:YES]; [content setColumnAutoresizingStyle:NSTableViewLastColumnOnlyAutoresizingStyle]; font = nil; [self setFont:nil]; } return self; } -(void) setUsesSidebarStyle:(bool)usesSidebarStyle { content.selectionHighlightStyle = usesSidebarStyle? NSTableViewSelectionHighlightStyleSourceList : NSTableViewSelectionHighlightStyleRegular; self.borderType = usesSidebarStyle? NSNoBorder : NSBezelBorder; } -(bool) usesSidebarStyle { return content.selectionHighlightStyle == NSTableViewSelectionHighlightStyleSourceList; } -(CocoaTableViewContent*) content { return content; } -(NSFont*) font { return font; } -(void) setFont:(NSFont*)fontPointer { if(!fontPointer) fontPointer = [NSFont systemFontOfSize:12]; font = fontPointer; u32 fontHeight = hiro::pFont::size(font, " ").height(); [content setFont:font]; [content setRowHeight:fontHeight + 4]; [self reloadColumns]; tableView->resizeColumns(); } -(void) reloadColumns { while([[content tableColumns] count]) { [content removeTableColumn:[[content tableColumns] lastObject]]; } for(auto& tableViewColumn : tableView->state.columns) { auto column = tableViewColumn->offset(); NSTableColumn* tableColumn = [[NSTableColumn alloc] initWithIdentifier:[[NSNumber numberWithInteger:column] stringValue]]; NSTableHeaderCell* headerCell = [[NSTableHeaderCell alloc] initTextCell:[NSString stringWithUTF8String:tableViewColumn->state.text]]; CocoaTableViewCell* dataCell = [[CocoaTableViewCell alloc] initWith:*tableView]; [dataCell setEditable:NO]; [tableColumn setResizingMask:NSTableColumnAutoresizingMask | NSTableColumnUserResizingMask]; [tableColumn setHeaderCell:headerCell]; [tableColumn setDataCell:dataCell]; [content addTableColumn:tableColumn]; } } -(NSInteger) numberOfRowsInTableView:(NSTableView*)table { return tableView->state.items.size(); } -(id) tableView:(NSTableView*)table objectValueForTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row { if(auto tableViewItem = tableView->item(row)) { if(auto tableViewCell = tableViewItem->cell([[tableColumn identifier] integerValue])) { NSString* text = [NSString stringWithUTF8String:tableViewCell->state.text]; return @{ @"text":text }; //used by type-ahead } } return @{}; } -(BOOL) tableView:(NSTableView*)table shouldShowCellExpansionForTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row { return NO; } -(NSString*) tableView:(NSTableView*)table toolTipForCell:(NSCell*)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row mouseLocation:(NSPoint)mouseLocation { return nil; } -(void) tableView:(NSTableView*)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row { [cell setFont:[self font]]; } -(void) tableViewSelectionDidChange:(NSNotification*)notification { if(tableView->self()->locked()) return; for(auto& tableViewItem : tableView->state.items) { tableViewItem->state.selected = tableViewItem->offset() == [content selectedRow]; } tableView->doChange(); } -(IBAction) doubleAction:(id)sender { s32 row = [content clickedRow]; if(row >= 0 && row < tableView->state.items.size()) { s32 column = [content clickedColumn]; if(column >= 0 && column < tableView->state.columns.size()) { auto item = tableView->state.items[row]; auto cell = item->cell(column); tableView->doActivate(cell); } } } @end @implementation CocoaTableViewContent : NSTableView -(id) initWith:(hiro::mTableView&)tableViewReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { tableView = &tableViewReference; } return self; } -(void) reloadData { //acquire lock to prevent tableViewSelectionDidChange from invoking the onChange callback auto lock = tableView->self()->acquire(); [super reloadData]; } -(void) keyDown:(NSEvent*)event { auto character = [[event characters] characterAtIndex:0]; if(character == NSEnterCharacter || character == NSCarriageReturnCharacter) { s32 row = [self selectedRow]; if(row >= 0 && row < tableView->state.items.size()) { s32 column = max(0, [self selectedColumn]); //can be -1? if(column >= 0 && column < tableView->state.columns.size()) { auto item = tableView->state.items[row]; auto cell = item->cell(column); tableView->doActivate(cell); } } } [super keyDown:event]; } -(NSMenu*) menuForEvent:(NSEvent*)event { //macOS doesn't set focus to right-clicked items, but this is neccesary for context menus: //todo: select the current column as well so that doContext(cell) works correctly NSInteger row = [self rowAtPoint:[self convertPoint:event.locationInWindow fromView:nil]]; if(row >= 0 && ![self isRowSelected:row]) { [self selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO]; } #if 0 // breaks the build s32 row = [content clickedRow]; if(row >= 0 && _row < tableView->state.items.size()) { s32 column = [content clickedColumn]; if(column >= 0 && column < tableView->state.columns.size()) { auto item = tableView->state.items[row]; auto cell = item->cell(column); tableView->doContext(cell); } } #endif return nil; } - (void)drawRect:(NSRect)dirtyRect { [super drawRect:dirtyRect]; if(((CocoaTableView*)self.enclosingScrollView).usesSidebarStyle) { NSRect frame = self.bounds; frame.origin.x += frame.size.width - 1; frame.size.width = 1; if(@available(macOS 10.14, *)) [[NSColor separatorColor] set]; else if (@available(macOS 10.10, *)) [[NSColor secondaryLabelColor] set]; else [[NSColor shadowColor] set]; [NSBezierPath fillRect:frame]; } } @end @implementation CocoaTableViewCell : NSCell -(id) initWith:(hiro::mTableView&)tableViewReference { if(self = [super initTextCell:@""]) { tableView = &tableViewReference; buttonCell = [[NSButtonCell alloc] initTextCell:@""]; [buttonCell setButtonType:NSSwitchButton]; [buttonCell setControlSize:NSSmallControlSize]; [buttonCell setRefusesFirstResponder:YES]; [buttonCell setTarget:self]; textCell = [[NSTextFieldCell alloc] init]; } return self; } //used by type-ahead -(NSString*) stringValue { return [[self objectValue] objectForKey:@"text"]; } -(void) drawWithFrame:(NSRect)frame inView:(NSView*)_view { NSTableView* view = (NSTableView*)_view; if(auto tableViewItem = tableView->item([view rowAtPoint:frame.origin])) { if(auto tableViewCell = tableViewItem->cell([view columnAtPoint:frame.origin])) { if(tableViewCell->state.checkable) { [buttonCell setHighlighted:YES]; [buttonCell setState:(tableViewCell->state.checked ? NSOnState : NSOffState)]; [buttonCell drawWithFrame:frame inView:view]; frame.origin.x += frame.size.height + 2; frame.size.width -= frame.size.height + 2; } if(tableViewCell->state.icon) { NSImage* image = NSMakeImage(tableViewCell->state.icon, tableViewCell->state.icon.width(), tableViewCell->state.icon.height()); [[NSGraphicsContext currentContext] saveGraphicsState]; NSRect targetRect = NSMakeRect(frame.origin.x + 2, frame.origin.y + (frame.size.height - image.size.height) / 2, image.size.width, image.size.height); NSRect sourceRect = NSMakeRect(0, 0, image.size.width, image.size.height); [image drawInRect:targetRect fromRect:sourceRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil]; [[NSGraphicsContext currentContext] restoreGraphicsState]; frame.origin.x += image.size.width + 4; frame.size.width -= image.size.width + 4; } if(tableViewCell->state.text) { textCell.stringValue = @((const char*)tableViewCell->state.text); textCell.alignment = NSTextAlignmentCenter; textCell.backgroundStyle = self.backgroundStyle; textCell.font = hiro::pFont::create(tableViewCell->font(true)); if(tableViewCell->state.alignment.horizontal() < 0.333) textCell.alignment = NSTextAlignmentLeft; if(tableViewCell->state.alignment.horizontal() > 0.666) textCell.alignment = NSTextAlignmentRight; textCell.textColor = nil; if(![self isHighlighted] && tableView->enabled(true)) { auto systemColor = tableViewCell->state.foregroundSystemColor; if(systemColor != hiro::SystemColor::None) textCell.textColor = NSMakeColor(systemColor); else if(auto color = tableViewCell->state.foregroundColor) textCell.textColor = NSMakeColor(color); } [textCell drawWithFrame:frame inView:view]; } } } } //needed to trigger trackMouse events -(NSUInteger) hitTestForEvent:(NSEvent*)event inRect:(NSRect)frame ofView:(NSView*)view { NSUInteger hitTest = [super hitTestForEvent:event inRect:frame ofView:view]; NSPoint point = [view convertPoint:[event locationInWindow] fromView:nil]; NSRect rect = NSMakeRect(frame.origin.x, frame.origin.y, frame.size.height, frame.size.height); if(NSMouseInRect(point, rect, [view isFlipped])) { hitTest |= NSCellHitTrackableArea; } return hitTest; } //I am unable to get startTrackingAt:, continueTracking:, stopTracking: to work //so instead, I have to run a modal loop on events until the mouse button is released -(BOOL) trackMouse:(NSEvent*)event inRect:(NSRect)frame ofView:(NSView*)_view untilMouseUp:(BOOL)flag { NSTableView* view = (NSTableView*)_view; if([event type] == NSLeftMouseDown) { NSWindow* window = [view window]; NSEvent* nextEvent; while((nextEvent = [window nextEventMatchingMask:(NSLeftMouseDragged | NSLeftMouseUp)])) { if([nextEvent type] == NSLeftMouseUp) { NSPoint point = [view convertPoint:[nextEvent locationInWindow] fromView:nil]; NSRect rect = NSMakeRect(frame.origin.x, frame.origin.y, frame.size.height, frame.size.height); if(NSMouseInRect(point, rect, [view isFlipped])) { if(auto tableViewItem = tableView->item([view rowAtPoint:point])) { if(auto tableViewCell = tableViewItem->cell([view columnAtPoint:point])) { tableViewCell->state.checked = !tableViewCell->state.checked; tableView->doToggle(tableViewCell->instance); } } } break; } } } return YES; } +(BOOL) prefersTrackingUntilMouseUp { return YES; } @end namespace hiro { auto pTableView::construct() -> void { cocoaView = cocoaTableView = [[CocoaTableView alloc] initWith:self()]; pWidget::construct(); setAlignment(state().alignment); setBackgroundColor(state().backgroundColor); setBatchable(state().batchable); setBordered(state().bordered); setFont(self().font(true)); setForegroundColor(state().foregroundColor); setHeadered(state().headered); setSortable(state().sortable); } auto pTableView::destruct() -> void { [cocoaView removeFromSuperview]; } auto pTableView::append(sTableViewColumn column) -> void { [(CocoaTableView*)cocoaView reloadColumns]; resizeColumns(); } auto pTableView::append(sTableViewItem item) -> void { [[(CocoaTableView*)cocoaView content] reloadData]; } auto pTableView::remove(sTableViewColumn column) -> void { [(CocoaTableView*)cocoaView reloadColumns]; resizeColumns(); } auto pTableView::remove(sTableViewItem item) -> void { [[(CocoaTableView*)cocoaView content] reloadData]; } auto pTableView::resizeColumns() -> void { vector widths; s32 minimumWidth = 0; s32 expandable = 0; for(u32 column : range(self().columnCount())) { s32 width = _width(column); widths.append(width); minimumWidth += width; if(state().columns[column]->expandable()) expandable++; } s32 maximumWidth = self().geometry().width() - 18; //include margin for vertical scroll bar s32 expandWidth = 0; if(expandable && maximumWidth > minimumWidth) { expandWidth = (maximumWidth - minimumWidth) / expandable; } for(u32 column : range(self().columnCount())) { if(auto self = state().columns[column]->self()) { s32 width = widths[column]; if(self->state().expandable) width += expandWidth; NSTableColumn* tableColumn = [[(CocoaTableView*)cocoaView content] tableColumnWithIdentifier:[[NSNumber numberWithInteger:column] stringValue]]; [tableColumn setWidth:width]; } } } auto pTableView::setAlignment(Alignment alignment) -> void { } auto pTableView::setBackgroundColor(Color color) -> void { } auto pTableView::setBatchable(bool batchable) -> void { [[(CocoaTableView*)cocoaView content] setAllowsMultipleSelection:(batchable ? YES : NO)]; } auto pTableView::setBordered(bool bordered) -> void { } auto pTableView::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); [[(CocoaTableView*)cocoaView content] setEnabled:enabled]; } auto pTableView::setFont(const Font& font) -> void { [(CocoaTableView*)cocoaView setFont:pFont::create(font)]; } auto pTableView::setForegroundColor(Color color) -> void { } auto pTableView::setHeadered(bool headered) -> void { if(headered) { [[(CocoaTableView*)cocoaView content] setHeaderView:[[NSTableHeaderView alloc] init]]; } else { [[(CocoaTableView*)cocoaView content] setHeaderView:nil]; } } auto pTableView::setSortable(bool sortable) -> void { //TODO } auto pTableView::setUsesSidebarStyle(bool usesSidebarStyle) -> void { ((CocoaTableView*)cocoaView).usesSidebarStyle = usesSidebarStyle; } auto pTableView::_cellWidth(u32 row, u32 column) -> u32 { u32 width = 8; if(auto pTableViewItem = self().item(row)) { if(auto pTableViewCell = pTableViewItem->cell(column)) { if(pTableViewCell->state.checkable) { width += 24; } if(auto& icon = pTableViewCell->state.icon) { width += icon.width() + 2; } if(auto& text = pTableViewCell->state.text) { width += pFont::size(pTableViewCell->font(true), text).width(); } } } return width; } auto pTableView::_columnWidth(u32 column_) -> u32 { u32 width = 8; if(auto column = self().column(column_)) { if(auto& icon = column->state.icon) { width += icon.width() + 2; } if(auto& text = column->state.text) { width += pFont::size(column->font(true), text).width(); } if(column->state.sorting != Sort::None) { width += 16; } } return width; } auto pTableView::_width(u32 column) -> u32 { if(auto width = self().column(column).width()) return width; u32 width = 1; if(!self().column(column).visible()) return width; if(state().headered) width = max(width, _columnWidth(column)); for(auto row : range(state().items.size())) { width = max(width, _cellWidth(row, column)); } return width; } /* auto pTableView::setSelected(bool selected) -> void { if(selected == false) { [[cocoaView content] deselectAll:nil]; } } auto pTableView::setSelection(u32 selection) -> void { [[cocoaView content] selectRowIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(selection, 1)] byExtendingSelection:NO]; } */ } #endif ares-126/hiro/cocoa/widget/table-view.hpp000066400000000000000000000054241415063341600204060ustar00rootroot00000000000000#if defined(Hiro_TableView) @class CocoaTableViewContent; @interface CocoaTableView : NSScrollView { @public hiro::mTableView* tableView; CocoaTableViewContent* content; NSFont* font; } -(id) initWith:(hiro::mTableView&)tableViewReference; -(void) dealloc; -(CocoaTableViewContent*) content; -(NSFont*) font; -(void) setFont:(NSFont*)font; -(void) reloadColumns; -(NSInteger) numberOfRowsInTableView:(NSTableView*)table; -(id) tableView:(NSTableView*)table objectValueForTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row; -(BOOL) tableView:(NSTableView*)table shouldShowCellExpansionForTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row; -(NSString*) tableView:(NSTableView*)table toolTipForCell:(NSCell*)cell rect:(NSRectPointer)rect tableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row mouseLocation:(NSPoint)mouseLocation; -(void) tableView:(NSTableView*)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn*)tableColumn row:(NSInteger)row; -(void) tableViewSelectionDidChange:(NSNotification*)notification; -(IBAction) doubleAction:(id)sender; @end @interface CocoaTableViewContent : NSTableView { hiro::mTableView* tableView; } -(id) initWith:(hiro::mTableView&)tableViewReference; -(void) reloadData; -(void) keyDown:(NSEvent*)event; -(NSMenu*) menuForEvent:(NSEvent*)event; @end @interface CocoaTableViewCell : NSCell { hiro::mTableView* tableView; NSButtonCell* buttonCell; NSTextFieldCell* textCell; } -(id) initWith:(hiro::mTableView&)tableViewReference; -(NSString*) stringValue; -(void) drawWithFrame:(NSRect)frame inView:(NSView*)view; -(NSUInteger) hitTestForEvent:(NSEvent*)event inRect:(NSRect)frame ofView:(NSView*)view; -(BOOL) trackMouse:(NSEvent*)event inRect:(NSRect)frame ofView:(NSView*)view untilMouseUp:(BOOL)flag; +(BOOL) prefersTrackingUntilMouseUp; @end namespace hiro { struct pTableView : pWidget { Declare(TableView, Widget) auto append(sTableViewColumn column) -> void; auto append(sTableViewItem item) -> void; auto remove(sTableViewColumn column) -> void; auto remove(sTableViewItem item) -> void; auto resizeColumns() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setBatchable(bool batchable) -> void; auto setBordered(bool bordered) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setHeadered(bool headered) -> void; auto setSortable(bool sortable) -> void; auto setUsesSidebarStyle(bool usesSidebarStyle) -> void; auto _cellWidth(u32 row, u32 column) -> u32; auto _columnWidth(u32 column) -> u32; auto _width(u32 column) -> u32; CocoaTableView* cocoaTableView = nullptr; }; } #endif ares-126/hiro/cocoa/widget/text-edit.cpp000066400000000000000000000056761415063341600202620ustar00rootroot00000000000000#if defined(Hiro_TextEdit) @implementation CocoaTextEdit : NSScrollView -(id) initWith:(hiro::mTextEdit&)textEditReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { textEdit = &textEditReference; content = [[NSTextView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)]; [content setDelegate:self]; [content setRichText:NO]; [self setBorderType:NSBezelBorder]; [self setDocumentView:content]; [self configure]; } return self; } -(NSTextView*) content { return content; } -(void) configure { [content setMinSize:NSMakeSize(0, 0)]; [content setMaxSize:NSMakeSize(FLT_MAX, FLT_MAX)]; [[content textContainer] setContainerSize:NSMakeSize(FLT_MAX, FLT_MAX)]; [[content textContainer] setWidthTracksTextView:textEdit->wordWrap()]; [content setHorizontallyResizable:YES]; [content setVerticallyResizable:YES]; [content setAutoresizingMask:NSViewNotSizable]; [self setHasHorizontalScroller:!textEdit->wordWrap()]; [self setHasVerticalScroller:YES]; } -(void) textDidChange:(NSNotification*)notification { textEdit->state.text = [[content string] UTF8String]; textEdit->doChange(); } @end namespace hiro { auto pTextEdit::construct() -> void { cocoaView = cocoaTextEdit = [[CocoaTextEdit alloc] initWith:self()]; pWidget::construct(); setEditable(state().editable); setWordWrap(state().wordWrap); setText(state().text); setTextCursor(state().textCursor); } auto pTextEdit::destruct() -> void { [cocoaView removeFromSuperview]; } auto pTextEdit::setBackgroundColor(Color color) -> void { } auto pTextEdit::setEditable(bool editable) -> void { [[(CocoaTextEdit*)cocoaView content] setEditable:(editable && self().enabled(true))]; } auto pTextEdit::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); setEditable(state().editable); //Cocoa lacks NSTextView::setEnabled; simulate via setEnabled() } auto pTextEdit::setFont(const Font& font) -> void { [[(CocoaTextEdit*)cocoaView content] setFont:pFont::create(font)]; } auto pTextEdit::setForegroundColor(Color color) -> void { } auto pTextEdit::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); [(CocoaTextEdit*)cocoaView configure]; } auto pTextEdit::setText(const string& text) -> void { [[(CocoaTextEdit*)cocoaView content] setString:[NSString stringWithUTF8String:text]]; } auto pTextEdit::setTextCursor(TextCursor cursor) -> void { //todo: handle text selection (cursor.length()) string text = [[[(CocoaTextEdit*)cocoaView content] string] UTF8String]; auto offset = min(cursor.offset(), text.length()); [[(CocoaTextEdit*)cocoaView content] setSelectedRange:NSMakeRange(offset, 0)]; } auto pTextEdit::setWordWrap(bool wordWrap) -> void { [(CocoaTextEdit*)cocoaView configure]; } auto pTextEdit::text() const -> string { return [[[(CocoaTextEdit*)cocoaView content] string] UTF8String]; } auto pTextEdit::textCursor() const -> TextCursor { //TODO return state().textCursor; } } #endif ares-126/hiro/cocoa/widget/text-edit.hpp000066400000000000000000000016531415063341600202560ustar00rootroot00000000000000#if defined(Hiro_TextEdit) @interface CocoaTextEdit : NSScrollView { @public hiro::mTextEdit* textEdit; NSTextView* content; } -(id) initWith:(hiro::mTextEdit&)textEdit; -(NSTextView*) content; -(void) configure; -(void) textDidChange:(NSNotification*)notification; @end namespace hiro { struct pTextEdit : pWidget { Declare(TextEdit, Widget) auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; auto setText(const string& text) -> void; auto setTextCursor(TextCursor textCursor) -> void; auto setWordWrap(bool wordWrap) -> void; auto text() const -> string; auto textCursor() const -> TextCursor; CocoaTextEdit* cocoaTextEdit = nullptr; }; } #endif ares-126/hiro/cocoa/widget/tree-view-item.cpp000066400000000000000000000014311415063341600211770ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeViewItem::construct() -> void { } auto pTreeViewItem::destruct() -> void { } // auto pTreeViewItem::append(sTreeViewItem item) -> void { } auto pTreeViewItem::remove(sTreeViewItem item) -> void { } auto pTreeViewItem::setBackgroundColor(Color color) -> void { } auto pTreeViewItem::setCheckable(bool checkable) -> void { } auto pTreeViewItem::setChecked(bool checked) -> void { } auto pTreeViewItem::setExpanded(bool expanded) -> void { } auto pTreeViewItem::setFocused() -> void { } auto pTreeViewItem::setForegroundColor(Color color) -> void { } auto pTreeViewItem::setIcon(const image& icon) -> void { } auto pTreeViewItem::setSelected() -> void { } auto pTreeViewItem::setText(const string& text) -> void { } } #endif ares-126/hiro/cocoa/widget/tree-view-item.hpp000066400000000000000000000011201415063341600211770ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeViewItem : pObject { Declare(TreeViewItem, Object) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setExpanded(bool expanded) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; }; } #endif ares-126/hiro/cocoa/widget/tree-view.cpp000066400000000000000000000010411415063341600202400ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeView::construct() -> void { } auto pTreeView::destruct() -> void { } // auto pTreeView::append(sTreeViewItem item) -> void { } auto pTreeView::remove(sTreeViewItem item) -> void { } auto pTreeView::setActivation(Mouse::Click activation) -> void { } auto pTreeView::setBackgroundColor(Color color) -> void { } auto pTreeView::setFocused() -> void { } auto pTreeView::setForegroundColor(Color color) -> void { } auto pTreeView::setGeometry(Geometry geometry) -> void { } } #endif ares-126/hiro/cocoa/widget/tree-view.hpp000066400000000000000000000007011415063341600202470ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeView : pWidget { Declare(TreeView, Widget) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setActivation(Mouse::Click activation) -> void; auto setBackgroundColor(Color color) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; }; } #endif ares-126/hiro/cocoa/widget/vertical-scroll-bar.cpp000066400000000000000000000036371415063341600222150ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) @implementation CocoaVerticalScrollBar : NSScroller -(id) initWith:(hiro::mVerticalScrollBar&)verticalScrollBarReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 1)]) { verticalScrollBar = &verticalScrollBarReference; [self setTarget:self]; [self setAction:@selector(scroll:)]; [self setControlSize:NSRegularControlSize]; [self setScrollerStyle:NSScrollerStyleLegacy]; [self setEnabled:YES]; [self update]; } return self; } -(void) update { f64 d = 1.0 / verticalScrollBar->state.length; f64 f = d * verticalScrollBar->state.position; [self setDoubleValue:f]; [self setKnobProportion:d]; } -(IBAction) scroll:(id)sender { auto& state = verticalScrollBar->state; switch([self hitPart]) { case NSScrollerIncrementLine: case NSScrollerIncrementPage: if(state.position < state.length - 1) state.position++; [self update]; break; case NSScrollerDecrementLine: case NSScrollerDecrementPage: if(state.position) state.position--; [self update]; break; case NSScrollerKnob: state.position = [self doubleValue] * state.length; break; } verticalScrollBar->doChange(); } @end namespace hiro { auto pVerticalScrollBar::construct() -> void { cocoaView = cocoaVerticalScrollBar = [[CocoaVerticalScrollBar alloc] initWith:self()]; pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pVerticalScrollBar::destruct() -> void { [cocoaView removeFromSuperview]; } auto pVerticalScrollBar::minimumSize() const -> Size { return {(s32)[NSScroller scrollerWidthForControlSize:NSRegularControlSize scrollerStyle:NSScrollerStyleLegacy], 32}; } auto pVerticalScrollBar::setLength(u32 length) -> void { [(CocoaVerticalScrollBar*)cocoaView update]; } auto pVerticalScrollBar::setPosition(u32 position) -> void { [(CocoaVerticalScrollBar*)cocoaView update]; } } #endif ares-126/hiro/cocoa/widget/vertical-scroll-bar.hpp000066400000000000000000000010471415063341600222130ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) @interface CocoaVerticalScrollBar : NSScroller { @public hiro::mVerticalScrollBar* verticalScrollBar; } -(id) initWith:(hiro::mVerticalScrollBar&)verticalScrollBar; -(void) update; -(IBAction) scroll:(id)sender; @end namespace hiro { struct pVerticalScrollBar : pWidget { Declare(VerticalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; CocoaVerticalScrollBar* cocoaVerticalScrollBar = nullptr; }; } #endif ares-126/hiro/cocoa/widget/vertical-slider.cpp000066400000000000000000000024451415063341600214330ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) @implementation CocoaVerticalSlider : NSSlider -(id) initWith:(hiro::mVerticalSlider&)verticalSliderReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 1)]) { verticalSlider = &verticalSliderReference; [self setTarget:self]; [self setAction:@selector(activate:)]; [self setMinValue:0]; } return self; } -(IBAction) activate:(id)sender { verticalSlider->state.position = [self doubleValue]; verticalSlider->doChange(); } @end namespace hiro { auto pVerticalSlider::construct() -> void { cocoaView = cocoaVerticalSlider = [[CocoaVerticalSlider alloc] initWith:self()]; pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pVerticalSlider::destruct() -> void { [cocoaView removeFromSuperview]; } auto pVerticalSlider::minimumSize() const -> Size { return {20, 48}; } auto pVerticalSlider::setGeometry(Geometry geometry) -> void { pWidget::setGeometry({ geometry.x(), geometry.y() - 2, geometry.width(), geometry.height() + 4 }); } auto pVerticalSlider::setLength(u32 length) -> void { [(CocoaVerticalSlider*)cocoaView setMaxValue:length - 1]; } auto pVerticalSlider::setPosition(u32 position) -> void { [(CocoaVerticalSlider*)cocoaView setDoubleValue:position]; } } #endif ares-126/hiro/cocoa/widget/vertical-slider.hpp000066400000000000000000000010611415063341600214310ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) @interface CocoaVerticalSlider : NSSlider { @public hiro::mVerticalSlider* verticalSlider; } -(id) initWith:(hiro::mVerticalSlider&)verticalSlider; -(IBAction) activate:(id)sender; @end namespace hiro { struct pVerticalSlider : pWidget { Declare(VerticalSlider, Widget) auto minimumSize() const -> Size override; auto setGeometry(Geometry geometry) -> void override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; CocoaVerticalSlider* cocoaVerticalSlider = nullptr; }; } #endif ares-126/hiro/cocoa/widget/viewport.cpp000066400000000000000000000027711415063341600202230ustar00rootroot00000000000000#if defined(Hiro_Viewport) @implementation CocoaViewport : NSView -(id) initWith:(hiro::mViewport&)viewportReference { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0)]) { viewport = &viewportReference; } return self; } -(void) resetCursorRects { if(auto mouseCursor = NSMakeCursor(viewport->mouseCursor())) { [self addCursorRect:self.bounds cursor:mouseCursor]; } } -(void) drawRect:(NSRect)rect { [[NSColor blackColor] setFill]; NSRectFillUsingOperation(rect, NSCompositeSourceOver); } -(BOOL) acceptsFirstResponder { return YES; } -(NSDragOperation) draggingEntered:(id)sender { return DropPathsOperation(sender); } -(BOOL) performDragOperation:(id)sender { auto paths = DropPaths(sender); if(!paths) return NO; viewport->doDrop(paths); return YES; } -(void) keyDown:(NSEvent*)event { } -(void) keyUp:(NSEvent*)event { } @end namespace hiro { auto pViewport::construct() -> void { cocoaView = cocoaViewport = [[CocoaViewport alloc] initWith:self()]; pWidget::construct(); } auto pViewport::destruct() -> void { [cocoaView removeFromSuperview]; } auto pViewport::handle() const -> uintptr_t { return (uintptr_t)cocoaViewport; } auto pViewport::setDroppable(bool droppable) -> void { if(droppable) { [cocoaViewport registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; } else { [cocoaViewport unregisterDraggedTypes]; } } auto pViewport::setFocusable(bool focusable) -> void { //TODO } } #endif ares-126/hiro/cocoa/widget/viewport.hpp000066400000000000000000000012751415063341600202260ustar00rootroot00000000000000#if defined(Hiro_Viewport) @interface CocoaViewport : NSView { @public hiro::mViewport* viewport; } -(id) initWith:(hiro::mViewport&)viewport; -(void) resetCursorRects; -(void) drawRect:(NSRect)rect; -(BOOL) acceptsFirstResponder; -(NSDragOperation) draggingEntered:(id)sender; -(BOOL) performDragOperation:(id)sender; -(void) keyDown:(NSEvent*)event; -(void) keyUp:(NSEvent*)event; @end namespace hiro { struct pViewport : pWidget { Declare(Viewport, Widget) auto handle() const -> uintptr_t; auto setDroppable(bool droppable) -> void override; auto setFocusable(bool focusable) -> void override; CocoaViewport* cocoaViewport = nullptr; }; } #endif ares-126/hiro/cocoa/widget/widget.cpp000066400000000000000000000040301415063341600176150ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { auto pWidget::construct() -> void { if(!cocoaView) { abstract = true; cocoaView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)]; [cocoaView setHidden:true]; } if(auto window = self().parentWindow(true)) { if(auto p = window->self()) p->_append(self()); setDroppable(self().droppable()); setEnabled(self().enabled(true)); setFocusable(self().focusable()); setFont(self().font(true)); setMouseCursor(self().mouseCursor()); setToolTip(self().toolTip()); setVisible(self().visible(true)); } } auto pWidget::destruct() -> void { [cocoaView removeFromSuperview]; } auto pWidget::focused() const -> bool { return cocoaView == [[cocoaView window] firstResponder]; } auto pWidget::setDroppable(bool droppable) -> void { //virtual } auto pWidget::setEnabled(bool enabled) -> void { if(abstract) enabled = false; if([cocoaView respondsToSelector:@selector(setEnabled:)]) { [(id)cocoaView setEnabled:enabled]; } } auto pWidget::setFocusable(bool focusable) -> void { //virtual } auto pWidget::setFocused() -> void { [[cocoaView window] makeFirstResponder:cocoaView]; } auto pWidget::setFont(const Font& font) -> void { if([cocoaView respondsToSelector:@selector(setFont:)]) { [(id)cocoaView setFont:pFont::create(font)]; } } auto pWidget::setGeometry(Geometry geometry) -> void { CGFloat windowHeight = [[cocoaView superview] frame].size.height; //round coordinates u32 x = geometry.x(); u32 y = windowHeight - geometry.y() - geometry.height(); u32 width = geometry.width(); u32 height = geometry.height(); [cocoaView setFrame:NSMakeRect(x, y, width, height)]; [[cocoaView superview] setNeedsDisplay:YES]; pSizable::setGeometry(geometry); } auto pWidget::setMouseCursor(const MouseCursor& mouseCursor) -> void { //TODO } auto pWidget::setToolTip(const string& toolTip) -> void { //TODO } auto pWidget::setVisible(bool visible) -> void { if(abstract) visible = false; [cocoaView setHidden:!visible]; } } #endif ares-126/hiro/cocoa/widget/widget.hpp000066400000000000000000000012331415063341600176240ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { struct pWidget : pSizable { Declare(Widget, Sizable) auto focused() const -> bool; virtual auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; virtual auto setFocusable(bool focusable) -> void; auto setFocused() -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setMouseCursor(const MouseCursor& mouseCursor) -> void; auto setToolTip(const string& toolTip) -> void; auto setVisible(bool visible) -> void override; NSView* cocoaView = nullptr; bool abstract = false; }; } #endif ares-126/hiro/cocoa/window.cpp000066400000000000000000000332171415063341600163670ustar00rootroot00000000000000#if defined(Hiro_Window) @implementation CocoaWindow : NSWindow -(id) initWith:(hiro::mWindow&)windowReference { window = &windowReference; NSUInteger style = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask; if(window->state.resizable) style |= NSResizableWindowMask; if(self = [super initWithContentRect:NSMakeRect(0, 0, 640, 480) styleMask:style backing:NSBackingStoreBuffered defer:YES]) { [self setDelegate:self]; [self setReleasedWhenClosed:NO]; [self setAcceptsMouseMovedEvents:YES]; [self setTitle:@""]; NSBundle* bundle = [NSBundle mainBundle]; NSDictionary* dictionary = [bundle infoDictionary]; NSString* applicationName = [dictionary objectForKey:@"CFBundleDisplayName"]; string hiroName = hiro::Application::state().name ? hiro::Application::state().name : string{"hiro"}; if(applicationName == nil) applicationName = [NSString stringWithUTF8String:hiroName]; menuBar = [[NSMenu alloc] init]; NSMenuItem* item; string text; rootMenu = [[NSMenu alloc] init]; item = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; [item setSubmenu:rootMenu]; [menuBar addItem:item]; item = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"About %@…", applicationName] action:@selector(menuAbout) keyEquivalent:@""]; [item setTarget:self]; [rootMenu addItem:item]; [rootMenu addItem:[NSMenuItem separatorItem]]; item = [[NSMenuItem alloc] initWithTitle:@"Preferences…" action:@selector(menuPreferences) keyEquivalent:@""]; [item setTarget:self]; item.keyEquivalentModifierMask = NSCommandKeyMask; item.keyEquivalent = @","; [rootMenu addItem:item]; string result = nall::execute("spctl", "--status").output.strip(); if(result != "assessments disabled") { disableGatekeeper = [[NSMenuItem alloc] initWithTitle:@"Disable Gatekeeper" action:@selector(menuDisableGatekeeper) keyEquivalent:@""]; [disableGatekeeper setTarget:self]; [rootMenu addItem:disableGatekeeper]; } [rootMenu addItem:[NSMenuItem separatorItem]]; NSMenu* servicesMenu = [[NSMenu alloc] initWithTitle:@"Services"]; item = [[NSMenuItem alloc] initWithTitle:@"Services" action:nil keyEquivalent:@""]; [item setTarget:self]; [item setSubmenu:servicesMenu]; [rootMenu addItem:item]; [rootMenu addItem:[NSMenuItem separatorItem]]; [NSApp setServicesMenu:servicesMenu]; item = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"Hide %@", applicationName] action:@selector(hide:) keyEquivalent:@""]; [item setTarget:NSApp]; item.keyEquivalentModifierMask = NSCommandKeyMask; item.keyEquivalent = @"h"; [rootMenu addItem:item]; item = [[NSMenuItem alloc] initWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@""]; [item setTarget:NSApp]; [item setTarget:NSApp]; item.keyEquivalentModifierMask = NSCommandKeyMask | NSAlternateKeyMask; item.keyEquivalent = @"h"; [rootMenu addItem:item]; item = [[NSMenuItem alloc] initWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; [item setTarget:NSApp]; [rootMenu addItem:item]; [rootMenu addItem:[NSMenuItem separatorItem]]; item = [[NSMenuItem alloc] initWithTitle:[NSString stringWithFormat:@"Quit %@", applicationName] action:@selector(menuQuit) keyEquivalent:@""]; [item setTarget:self]; item.keyEquivalentModifierMask = NSCommandKeyMask; item.keyEquivalent = @"q"; [rootMenu addItem:item]; statusBar = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)]; [statusBar setAlignment:NSLeftTextAlignment]; [statusBar setBordered:YES]; [statusBar setBezeled:YES]; [statusBar setBezelStyle:NSTextFieldSquareBezel]; [statusBar setEditable:NO]; [statusBar setHidden:YES]; [[self contentView] addSubview:statusBar positioned:NSWindowBelow relativeTo:nil]; } return self; } -(BOOL) canBecomeKeyWindow { return YES; } -(BOOL) canBecomeMainWindow { return YES; } -(void) windowDidBecomeMain:(NSNotification*)notification { if(window->state.menuBar) { [NSApp setMainMenu:menuBar]; } } -(void) windowDidMove:(NSNotification*)notification { if(auto p = window->self()) p->moveEvent(); } -(void) windowDidResize:(NSNotification*)notification { if(auto p = window->self()) p->sizeEvent(); } -(BOOL) windowShouldClose:(id)sender { if(window->state.onClose) window->doClose(); else window->setVisible(false); if(window->state.modal && !window->visible()) window->setModal(false); return NO; } -(NSDragOperation) draggingEntered:(id)sender { return DropPathsOperation(sender); } -(BOOL) performDragOperation:(id)sender { auto paths = DropPaths(sender); if(!paths) return NO; window->doDrop(paths); return YES; } -(NSMenu*) menuBar { return menuBar; } -(void) menuAbout { hiro::Application::Cocoa::doAbout(); } -(void) menuPreferences { hiro::Application::Cocoa::doPreferences(); } //to hell with gatekeepers -(void) menuDisableGatekeeper { NSAlert* alert = [[NSAlert alloc] init]; [alert setMessageText:@"Disable Gatekeeper"]; AuthorizationRef authorization; OSStatus status = AuthorizationCreate(nullptr, kAuthorizationEmptyEnvironment, kAuthorizationFlagDefaults, &authorization); if(status == errAuthorizationSuccess) { AuthorizationItem items = {kAuthorizationRightExecute, 0, nullptr, 0}; AuthorizationRights rights = {1, &items}; status = AuthorizationCopyRights(authorization, &rights, nullptr, kAuthorizationFlagDefaults | kAuthorizationFlagInteractionAllowed | kAuthorizationFlagPreAuthorize | kAuthorizationFlagExtendRights, nullptr); if(status == errAuthorizationSuccess) { { char program[] = "/usr/sbin/spctl"; char* arguments[] = {"--master-disable", nullptr}; FILE* pipe = nullptr; AuthorizationExecuteWithPrivileges(authorization, program, kAuthorizationFlagDefaults, arguments, &pipe); } { char program[] = "/usr/bin/defaults"; char* arguments[] = {"write /Library/Preferences/com.apple.security GKAutoRearm -bool NO"}; FILE* pipe = nullptr; AuthorizationExecuteWithPrivileges(authorization, program, kAuthorizationFlagDefaults, arguments, &pipe); } } AuthorizationFree(authorization, kAuthorizationFlagDefaults); } string result = nall::execute("spctl", "--status").output.strip(); if(result == "assessments disabled") { [alert setAlertStyle:NSInformationalAlertStyle]; [alert setInformativeText:@"Gatekeeper has been successfully disabled."]; [disableGatekeeper setHidden:YES]; } else { [alert setAlertStyle:NSWarningAlertStyle]; [alert setInformativeText:@"Error: failed to disable Gatekeeper."]; } [alert addButtonWithTitle:@"Ok"]; [alert runModal]; } -(void) menuQuit { hiro::Application::Cocoa::doQuit(); } -(NSTextField*) statusBar { return statusBar; } -(void)windowDidEnterFullScreen:(NSNotification *)notification { window->state.fullScreen = true; } -(void)windowDidExitFullScreen:(NSNotification *)notification { window->state.fullScreen = false; } @end namespace hiro { auto pWindow::construct() -> void { cocoaWindow = [[CocoaWindow alloc] initWith:self()]; static bool once = true; if(once) { once = false; [NSApp setMainMenu:[cocoaWindow menuBar]]; } } auto pWindow::destruct() -> void { } auto pWindow::append(sMenuBar menuBar) -> void { } auto pWindow::append(sSizable sizable) -> void { sizable->setGeometry(self().geometry().setPosition()); statusBarReposition(); } auto pWindow::append(sStatusBar statusBar) -> void { statusBar->setEnabled(statusBar->enabled(true)); statusBar->setFont(statusBar->font(true)); statusBar->setText(statusBar->text()); statusBar->setVisible(statusBar->visible(true)); } auto pWindow::focused() const -> bool { return [cocoaWindow isMainWindow] == YES; } auto pWindow::frameMargin() const -> Geometry { NSRect frame = [cocoaWindow frameRectForContentRect:NSMakeRect(0, 0, 640, 480)]; return {abs(frame.origin.x), (s32)(frame.size.height - 480), (s32)(frame.size.width - 640), abs(frame.origin.y)}; } auto pWindow::handle() const -> uintptr_t { return (uintptr_t)cocoaWindow; } auto pWindow::monitor() const -> u32 { //TODO return 0; } auto pWindow::remove(sMenuBar menuBar) -> void { } auto pWindow::remove(sSizable sizable) -> void { [[cocoaWindow contentView] setNeedsDisplay:YES]; } auto pWindow::remove(sStatusBar statusBar) -> void { [[cocoaWindow statusBar] setHidden:YES]; } auto pWindow::setBackgroundColor(Color color) -> void { NSView* view = cocoaWindow.contentView; view.wantsLayer = YES; [view.layer setBackgroundColor:[[NSColor colorWithCalibratedRed:color.red() / 255.0 green:color.green() / 255.0 blue:color.blue() / 255.0 alpha:color.alpha() / 255.0 ] CGColor] ]; } auto pWindow::setDismissable(bool dismissable) -> void { //todo: not implemented } auto pWindow::setDroppable(bool droppable) -> void { if(droppable) { [cocoaWindow registerForDraggedTypes:[NSArray arrayWithObject:NSFilenamesPboardType]]; } else { [cocoaWindow unregisterDraggedTypes]; } } auto pWindow::setFocused() -> void { [cocoaWindow makeKeyAndOrderFront:nil]; } auto pWindow::setFullScreen(bool fullScreen) -> void { if(fullScreen) { windowedGeometry = state().geometry; [NSApp setPresentationOptions:NSApplicationPresentationFullScreen]; [cocoaWindow setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; [cocoaWindow toggleFullScreen:nil]; state().geometry = _geometry(); } else { [cocoaWindow toggleFullScreen:nil]; [cocoaWindow setCollectionBehavior:NSWindowCollectionBehaviorDefault]; [NSApp setPresentationOptions:NSApplicationPresentationDefault]; state().geometry = windowedGeometry; } } auto pWindow::setGeometry(Geometry geometry) -> void { lock(); [cocoaWindow setFrame:[cocoaWindow frameRectForContentRect:NSMakeRect( geometry.x(), Desktop::size().height() - geometry.y() - geometry.height(), geometry.width(), geometry.height() + statusBarHeight() ) ] display:YES ]; if(auto& sizable = state().sizable) { sizable->setGeometry(self().geometry().setPosition()); } statusBarReposition(); unlock(); } auto pWindow::setMaximized(bool maximized) -> void { //todo } auto pWindow::setMaximumSize(Size size) -> void { [cocoaWindow setContentMaxSize:NSMakeSize(size.width(), size.height())]; } auto pWindow::setMinimized(bool minimized) -> void { [cocoaWindow setIsMiniaturized:minimized]; } auto pWindow::setMinimumSize(Size size) -> void { [cocoaWindow setContentMinSize:NSMakeSize(size.width(), size.height())]; } auto pWindow::setModal(bool modal) -> void { if(modal == true) { [NSApp runModalForWindow:cocoaWindow]; } else { [NSApp stopModal]; NSEvent* event = [NSEvent otherEventWithType:NSApplicationDefined location:NSMakePoint(0, 0) modifierFlags:0 timestamp:0.0 windowNumber:0 context:nil subtype:0 data1:0 data2:0]; [NSApp postEvent:event atStart:true]; } } auto pWindow::setResizable(bool resizable) -> void { NSUInteger style = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask; if(resizable) style |= NSResizableWindowMask; [cocoaWindow setStyleMask:style]; } auto pWindow::setTitle(const string& text) -> void { [cocoaWindow setTitle:[NSString stringWithUTF8String:text]]; } auto pWindow::setAssociatedFile(const string& filename) -> void { [cocoaWindow setRepresentedFilename:[NSString stringWithUTF8String:filename]]; } auto pWindow::setVisible(bool visible) -> void { if(visible) [cocoaWindow makeKeyAndOrderFront:nil]; else [cocoaWindow orderOut:nil]; } auto pWindow::moveEvent() -> void { if(!locked() && !self().fullScreen() && self().visible()) { NSRect area = [cocoaWindow contentRectForFrameRect:[cocoaWindow frame]]; area.size.height -= statusBarHeight(); state().geometry.setX(area.origin.x); state().geometry.setY(Desktop::size().height() - area.origin.y - area.size.height); } if(!locked()) self().doMove(); } auto pWindow::sizeEvent() -> void { if(!locked() && !self().fullScreen() && self().visible()) { NSRect area = [cocoaWindow contentRectForFrameRect:[cocoaWindow frame]]; area.size.height -= statusBarHeight(); state().geometry.setWidth(area.size.width); state().geometry.setHeight(area.size.height); } if(auto& sizable = state().sizable) { sizable->setGeometry(self().geometry().setPosition()); } statusBarReposition(); if(!locked()) self().doSize(); } auto pWindow::statusBarHeight() -> u32 { if(auto& statusBar = state().statusBar) { if(statusBar->visible()) { return pFont::size(statusBar->font(true), " ").height() + 6; } } return 0; } auto pWindow::statusBarReposition() -> void { NSRect area = [cocoaWindow contentRectForFrameRect:[cocoaWindow frame]]; [[cocoaWindow statusBar] setFrame:NSMakeRect(0, 0, area.size.width, statusBarHeight())]; [[cocoaWindow contentView] setNeedsDisplay:YES]; } auto pWindow::_append(mWidget& widget) -> void { if(auto pWidget = widget.self()) { [pWidget->cocoaView removeFromSuperview]; [[cocoaWindow contentView] addSubview:pWidget->cocoaView positioned:NSWindowAbove relativeTo:nil]; pWidget->setGeometry(widget.geometry()); [[cocoaWindow contentView] setNeedsDisplay:YES]; } } auto pWindow::_geometry() -> Geometry { NSRect area = [cocoaWindow contentRectForFrameRect:[cocoaWindow frame]]; area.size.height -= statusBarHeight(); return { (s32)area.origin.x, (s32)(Monitor::geometry(Monitor::primary()).height() - area.origin.y - area.size.height), (s32)area.size.width, (s32)area.size.height }; } } #endif ares-126/hiro/cocoa/window.hpp000066400000000000000000000042451415063341600163730ustar00rootroot00000000000000#if defined(Hiro_Window) @interface CocoaWindow : NSWindow { @public hiro::mWindow* window; NSMenu* menuBar; NSMenu* rootMenu; NSMenuItem* disableGatekeeper; NSTextField* statusBar; } -(id) initWith:(hiro::mWindow&)window; -(BOOL) canBecomeKeyWindow; -(BOOL) canBecomeMainWindow; -(void) windowDidBecomeMain:(NSNotification*)notification; -(void) windowDidMove:(NSNotification*)notification; -(void) windowDidResize:(NSNotification*)notification; -(BOOL) windowShouldClose:(id)sender; -(NSDragOperation) draggingEntered:(id)sender; -(BOOL) performDragOperation:(id)sender; -(NSMenu*) menuBar; -(void) menuAbout; -(void) menuPreferences; -(void) menuDisableGatekeeper; -(void) menuQuit; -(NSTextField*) statusBar; @end namespace hiro { struct pWindow : pObject { Declare(Window, Object) auto append(sMenuBar menuBar) -> void; auto append(sSizable sizable) -> void; auto append(sStatusBar statusBar) -> void; auto focused() const -> bool override; auto frameMargin() const -> Geometry; auto handle() const -> uintptr_t; auto monitor() const -> u32; auto remove(sMenuBar menuBar) -> void; auto remove(sSizable sizable) -> void; auto remove(sStatusBar statusBar) -> void; auto setBackgroundColor(Color color) -> void; auto setDismissable(bool dismissable) -> void; auto setDroppable(bool droppable) -> void; auto setFocused() -> void override; auto setFullScreen(bool fullScreen) -> void; auto setGeometry(Geometry geometry) -> void; auto setMaximized(bool maximized) -> void; auto setMaximumSize(Size size) -> void; auto setMinimized(bool minimized) -> void; auto setMinimumSize(Size size) -> void; auto setModal(bool modal) -> void; auto setResizable(bool resizable) -> void; auto setTitle(const string& text) -> void; auto setAssociatedFile(const string& filename) -> void; auto setVisible(bool visible) -> void; auto moveEvent() -> void; auto sizeEvent() -> void; auto statusBarHeight() -> u32; auto statusBarReposition() -> void; auto _append(mWidget& widget) -> void; auto _geometry() -> Geometry; CocoaWindow* cocoaWindow = nullptr; Geometry windowedGeometry; }; } #endif ares-126/hiro/components.hpp000066400000000000000000000054271415063341600161700ustar00rootroot00000000000000/* hiro components * * By commenting out lines below, individual components of hiro can be disabled.) * This can be useful to avoid dependencies (eg GTK+ relies on GtkSourceView for SourceEdit.) * It's also very useful for porting hiro to new targets; or performing major core changes. * * Note that the core classes (Application, Window, Sizable, etc) have circular dependencies. * Disabling only certain core pieces will result in compilation errors. * As such, this file is really only meant for disabling individual widgets or menu items. */ #define Hiro_Color #define Hiro_Gradient #define Hiro_Alignment #define Hiro_TextCursor #define Hiro_Position #define Hiro_Size #define Hiro_Geometry #define Hiro_Font #define Hiro_MouseCursor #define Hiro_Application #define Hiro_Desktop #define Hiro_Monitor #define Hiro_Keyboard #define Hiro_Mouse #define Hiro_BrowserWindow #define Hiro_MessageWindow #define Hiro_Attribute #define Hiro_Object #define Hiro_Group #define Hiro_Hotkey #define Hiro_Timer #define Hiro_Window #define Hiro_StatusBar #define Hiro_MenuBar #define Hiro_PopupMenu #define Hiro_Action #define Hiro_Menu #define Hiro_MenuSeparator #define Hiro_MenuItem #define Hiro_MenuCheckItem #define Hiro_MenuRadioItem #define Hiro_Sizable #define Hiro_Widget #define Hiro_Button #define Hiro_Canvas #define Hiro_CheckButton #define Hiro_CheckLabel #define Hiro_ComboButton #define Hiro_ComboEdit #define Hiro_Console #define Hiro_Frame #define Hiro_HexEdit #define Hiro_HorizontalScrollBar #define Hiro_HorizontalSlider #define Hiro_IconView #define Hiro_Label #define Hiro_LineEdit #define Hiro_ProgressBar #define Hiro_RadioButton #define Hiro_RadioLabel //#define Hiro_SourceEdit //added via GNUmakefile #define Hiro_TabFrame #define Hiro_TableView #define Hiro_TextEdit #define Hiro_TreeView #define Hiro_VerticalScrollBar #define Hiro_VerticalSlider #define Hiro_Viewport //platform-specific exclusions #if defined(HIRO_WINDOWS) || defined(HIRO_COCOA) || defined(HIRO_QT) #undef Hiro_ComboEdit #undef Hiro_Console #undef Hiro_IconView #undef Hiro_SourceEdit #endif //extensions #define Hiro_FixedLayout #define Hiro_HorizontalLayout #define Hiro_VerticalLayout #define Hiro_TableLayout #if defined(Hiro_Timer) && defined(Hiro_Canvas) #define Hiro_HorizontalResizeGrip #define Hiro_VerticalResizeGrip #endif #if defined(Hiro_TableView) #define Hiro_ListView #endif #if defined(Hiro_Button) && defined(Hiro_Canvas) && defined(Hiro_Label) #define Hiro_MessageDialog #define Hiro_NameDialog #endif #if defined(Hiro_Button) && defined(Hiro_ComboButton) && defined(Hiro_LineEdit) && defined(Hiro_ListView) && defined(Hiro_MessageDialog) && defined(Hiro_NameDialog) #define Hiro_BrowserDialog #endif #if defined(Hiro_Canvas) && defined(Hiro_Label) #define Hiro_AboutDialog #endif ares-126/hiro/core/000077500000000000000000000000001415063341600142125ustar00rootroot00000000000000ares-126/hiro/core/action/000077500000000000000000000000001415063341600154675ustar00rootroot00000000000000ares-126/hiro/core/action/action.cpp000066400000000000000000000006041415063341600174500ustar00rootroot00000000000000#if defined(Hiro_Action) auto mAction::allocate() -> pObject* { return new pAction(*this); } // auto mAction::remove() -> type& { if(auto menu = parentMenu()) menu->remove(*this); if(auto menuBar = parentMenuBar()) menuBar->remove((mMenu&)*this); #if defined(Hiro_PopupMenu) if(auto popupMenu = parentPopupMenu()) popupMenu->remove(*this); #endif return *this; } #endif ares-126/hiro/core/action/action.hpp000066400000000000000000000002341415063341600174540ustar00rootroot00000000000000#if defined(Hiro_Action) struct mAction : mObject { Declare(Action) auto remove() -> type& override; //private: struct State { } state; }; #endif ares-126/hiro/core/action/menu-check-item.cpp000066400000000000000000000013611415063341600211470ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) auto mMenuCheckItem::allocate() -> pObject* { return new pMenuCheckItem(*this); } // auto mMenuCheckItem::checked() const -> bool { return state.checked; } auto mMenuCheckItem::doToggle() const -> void { if(state.onToggle) return state.onToggle(); } auto mMenuCheckItem::onToggle(const function& callback) -> type& { state.onToggle = callback; return *this; } auto mMenuCheckItem::setChecked(bool checked) -> type& { state.checked = checked; signal(setChecked, checked); return *this; } auto mMenuCheckItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mMenuCheckItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/action/menu-check-item.hpp000066400000000000000000000007361415063341600211610ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) struct mMenuCheckItem : mAction { Declare(MenuCheckItem) auto checked() const -> bool; auto doToggle() const -> void; auto onToggle(const function& callback = {}) -> type&; auto setChecked(bool checked = true) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool checked = false; function onToggle; string text; } state; }; #endif ares-126/hiro/core/action/menu-item.cpp000066400000000000000000000022151415063341600200730ustar00rootroot00000000000000#if defined(Hiro_MenuItem) // LIJI: TODO: is there a more reasonable place to have this include? #include "../../resource/icon.hpp" auto mMenuItem::allocate() -> pObject* { return new pMenuItem(*this); } // auto mMenuItem::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mMenuItem::icon() const -> multiFactorImage { return state.icon; } auto mMenuItem::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mMenuItem::setIcon(const multiFactorImage& icon, bool force) -> type& { state.icon = icon; signal(setIcon, icon, force); return *this; } auto mMenuItem::setIconForFile(const string& filename) -> type& { #if defined(PLATFORM_MACOS) state.icon = {}; signal(setIconForFile, filename); #else if(directory::exists(filename)) setIcon(Icon::Emblem::Folder, true); else setIcon(Icon::Emblem::File, true); #endif return *this; } auto mMenuItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mMenuItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/action/menu-item.hpp000066400000000000000000000010661415063341600201030ustar00rootroot00000000000000#if defined(Hiro_MenuItem) struct mMenuItem : mAction { Declare(MenuItem) auto doActivate() const -> void; auto icon() const -> multiFactorImage; auto onActivate(const function& callback = {}) -> type&; auto setIcon(const multiFactorImage& icon = {}, bool force = false) -> type&; auto setIconForFile(const string& filename) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { multiFactorImage icon; function onActivate; string text; } state; }; #endif ares-126/hiro/core/action/menu-radio-item.cpp000066400000000000000000000023261415063341600211720ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) auto mMenuRadioItem::allocate() -> pObject* { return new pMenuRadioItem(*this); } // auto mMenuRadioItem::checked() const -> bool { return state.checked; } auto mMenuRadioItem::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mMenuRadioItem::group() const -> Group { return state.group; } auto mMenuRadioItem::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mMenuRadioItem::setChecked() -> type& { if(auto group = this->group()) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto menuRadioItem = dynamic_cast(object.data())) { menuRadioItem->state.checked = false; } } } } state.checked = true; signal(setChecked); return *this; } auto mMenuRadioItem::setGroup(sGroup group) -> type& { state.group = group ? group : Group{&instance}; signal(setGroup, group); return *this; } auto mMenuRadioItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mMenuRadioItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/action/menu-radio-item.hpp000066400000000000000000000011011415063341600211650ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) struct mMenuRadioItem : mAction { Declare(MenuRadioItem) auto checked() const -> bool; auto doActivate() const -> void; auto group() const -> Group override; auto onActivate(const function& callback = {}) -> type&; auto setChecked() -> type&; auto setGroup(sGroup group = {}) -> type& override; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool checked = false; sGroup group; function onActivate; string text; } state; }; #endif ares-126/hiro/core/action/menu-separator.cpp000066400000000000000000000001751415063341600211400ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) auto mMenuSeparator::allocate() -> pObject* { return new pMenuSeparator(*this); } #endif ares-126/hiro/core/action/menu-separator.hpp000066400000000000000000000002151415063341600211400ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) struct mMenuSeparator : mAction { Declare(MenuSeparator) //private: struct State { } state; }; #endif ares-126/hiro/core/action/menu.cpp000066400000000000000000000041641415063341600171440ustar00rootroot00000000000000#if defined(Hiro_Menu) // LIJI: TODO: is there a more reasonable place to have this include? #include "../../resource/icon.hpp" auto mMenu::allocate() -> pObject* { return new pMenu(*this); } auto mMenu::destruct() -> void { for(auto& action : state.actions) action->destruct(); mAction::destruct(); } // auto mMenu::action(u32 position) const -> Action { if(position < actionCount()) return state.actions[position]; return {}; } auto mMenu::actionCount() const -> u32 { return state.actions.size(); } auto mMenu::actions() const -> vector { vector actions; for(auto& action : state.actions) actions.append(action); return actions; } auto mMenu::append(sAction action) -> type& { state.actions.append(action); action->setParent(this, actionCount() - 1); signal(append, action); return *this; } auto mMenu::icon() const -> multiFactorImage { return state.icon; } auto mMenu::remove(sAction action) -> type& { signal(remove, action); state.actions.remove(action->offset()); for(auto n : range(action->offset(), actionCount())) { state.actions[n]->adjustOffset(-1); } action->setParent(); return *this; } auto mMenu::reset() -> type& { while(state.actions) remove(state.actions.right()); return *this; } auto mMenu::setIcon(const multiFactorImage& icon, bool force) -> type& { state.icon = icon; signal(setIcon, icon, force); return *this; } auto mMenu::setIconForFile(const string& filename) -> type& { #if defined(PLATFORM_MACOS) state.icon = {}; signal(setIconForFile, filename); #else if(directory::exists(filename)) setIcon(Icon::Emblem::Folder, true); else setIcon(Icon::Emblem::File, true); #endif return *this; } auto mMenu::setParent(mObject* parent, s32 offset) -> type& { for(auto& action : reverse(state.actions)) action->destruct(); mObject::setParent(parent, offset); for(auto& action : state.actions) action->setParent(this, action->offset()); return *this; } auto mMenu::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mMenu::text() const -> string { return state.text; } #endif ares-126/hiro/core/action/menu.hpp000066400000000000000000000014701415063341600171460ustar00rootroot00000000000000#if defined(Hiro_Menu) struct mMenu : mAction { Declare(Menu) using mObject::remove; auto action(u32 position) const -> Action; auto actionCount() const -> u32; auto actions() const -> vector; auto append(sAction action) -> type&; auto icon() const -> multiFactorImage; auto remove(sAction action) -> type&; auto reset() -> type& override; auto setIcon(const multiFactorImage& icon = {}, bool force = false) -> type&; auto setIconForFile(const string& filename) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { vector actions; multiFactorImage icon; string text; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/alignment.cpp000066400000000000000000000017161415063341600167010ustar00rootroot00000000000000#if defined(Hiro_Alignment) const Alignment Alignment::Center = {0.5, 0.5}; Alignment::Alignment() { setAlignment(-1.0, -1.0); } Alignment::Alignment(f32 horizontal, f32 vertical) { setAlignment(horizontal, vertical); } Alignment::operator bool() const { return state.horizontal >= 0.0 && state.horizontal <= 1.0 && state.vertical >= 0.0 && state.vertical <= 1.0; } auto Alignment::horizontal() const -> f32 { return state.horizontal; } auto Alignment::reset() -> type& { return setAlignment(-1.0, -1.0); } auto Alignment::setAlignment(f32 horizontal, f32 vertical) -> type& { state.horizontal = horizontal; state.vertical = vertical; return *this; } auto Alignment::setHorizontal(f32 horizontal) -> type& { state.horizontal = horizontal; return *this; } auto Alignment::setVertical(f32 vertical) -> type& { state.vertical = vertical; return *this; } auto Alignment::vertical() const -> f32 { return state.vertical; } #endif ares-126/hiro/core/alignment.hpp000066400000000000000000000012311415063341600166760ustar00rootroot00000000000000#if defined(Hiro_Alignment) struct Alignment { using type = Alignment; static const Alignment Center; Alignment(); Alignment(f32 horizontal, f32 vertical = 0.5); explicit operator bool() const; auto operator==(const Alignment& source) const -> bool; auto operator!=(const Alignment& source) const -> bool; auto horizontal() const -> f32; auto reset() -> type&; auto setAlignment(f32 horizontal = -1.0, f32 vertical = 0.5) -> type&; auto setHorizontal(f32 horizontal) -> type&; auto setVertical(f32 vertical) -> type&; auto vertical() const -> f32; //private: struct State { f32 horizontal; f32 vertical; } state; }; #endif ares-126/hiro/core/application.cpp000066400000000000000000000065241415063341600172300ustar00rootroot00000000000000#if defined(Hiro_Application) auto Application::abort() -> void { quit(); ::abort(); } auto Application::doMain() -> void { if(state().onMain) return state().onMain(); } auto Application::doOpenFile(const string& path) -> void { if(state().onOpenFile) return state().onOpenFile(path); } auto Application::exit() -> void { state().quit = true; return pApplication::exit(); } auto Application::font() -> Font { return state().font; } auto Application::locale() -> Locale& { return state().locale; } auto Application::modal() -> bool { return pApplication::modal(); } auto Application::name() -> string { return state().name; } auto Application::onMain(const function& callback) -> void { state().onMain = callback; } auto Application::onOpenFile(const function& callback) -> void { state().onOpenFile = callback; } auto Application::run() -> void { return pApplication::run(); } auto Application::pendingEvents() -> bool { return pApplication::pendingEvents(); } auto Application::processEvents() -> void { return pApplication::processEvents(); } auto Application::quit() -> void { state().quit = true; return pApplication::quit(); } auto Application::scale() -> f32 { return state().scale; } auto Application::scale(f32 value) -> f32 { return value * state().scale; } auto Application::screenSaver() -> bool { return state().screenSaver; } auto Application::setFont(const Font& font) -> void { state().font = font; } auto Application::setName(const string& name) -> void { state().name = name; } auto Application::setScale(f32 scale) -> void { state().scale = scale; } auto Application::setScreenSaver(bool screenSaver) -> void { state().screenSaver = screenSaver; if(state().initialized) pApplication::setScreenSaver(screenSaver); } auto Application::setToolTips(bool toolTips) -> void { state().toolTips = toolTips; } //this ensures Application::state is initialized prior to use auto Application::state() -> State& { static State state; return state; } auto Application::toolTips() -> bool { return state().toolTips; } auto Application::unscale(f32 value) -> f32 { return value * (1.0 / state().scale); } //Cocoa //===== auto Application::Cocoa::doAbout() -> void { if(state().cocoa.onAbout) return state().cocoa.onAbout(); } auto Application::Cocoa::doActivate() -> void { if(state().cocoa.onActivate) return state().cocoa.onActivate(); } auto Application::Cocoa::doPreferences() -> void { if(state().cocoa.onPreferences) return state().cocoa.onPreferences(); } auto Application::Cocoa::doQuit() -> void { if(state().cocoa.onQuit) return state().cocoa.onQuit(); } auto Application::Cocoa::onAbout(const function& callback) -> void { state().cocoa.onAbout = callback; } auto Application::Cocoa::onActivate(const function& callback) -> void { state().cocoa.onActivate = callback; } auto Application::Cocoa::onPreferences(const function& callback) -> void { state().cocoa.onPreferences = callback; } auto Application::Cocoa::onQuit(const function& callback) -> void { state().cocoa.onQuit = callback; } //Internal //======== auto Application::initialize() -> void { if(!state().initialized) { state().initialized = true; pApplication::initialize(); pApplication::setScreenSaver(state().screenSaver); } } #endif ares-126/hiro/core/application.hpp000066400000000000000000000043561415063341600172360ustar00rootroot00000000000000#if defined(Hiro_Application) struct Application { Application() = delete; static auto abort() -> void; static auto doMain() -> void; static auto doOpenFile(const string& path) -> void; static auto exit() -> void; static auto font() -> Font; static auto locale() -> Locale&; static auto modal() -> bool; static auto name() -> string; static auto onMain(const function& callback = {}) -> void; static auto onOpenFile(const function& callback = {}) -> void; static auto run() -> void; static auto scale() -> f32; static auto scale(f32 value) -> f32; static auto pendingEvents() -> bool; static auto processEvents() -> void; static auto quit() -> void; static auto screenSaver() -> bool; static auto setFont(const Font& font = {}) -> void; static auto setName(const string& name = "") -> void; static auto setScale(f32 scale = 1.0) -> void; static auto setScreenSaver(bool screenSaver = true) -> void; static auto setToolTips(bool toolTips = true) -> void; static auto toolTips() -> bool; static auto unscale(f32 value) -> f32; struct Cocoa { static auto doAbout() -> void; static auto doActivate() -> void; static auto doPreferences() -> void; static auto doQuit() -> void; static auto onAbout(const function& callback = {}) -> void; static auto onActivate(const function& callback = {}) -> void; static auto onPreferences(const function& callback = {}) -> void; static auto onQuit(const function& callback = {}) -> void; }; struct Namespace : Locale::Namespace { Namespace(const string& value) : Locale::Namespace(Application::locale(), value) {} }; //private: struct State { Font font; bool initialized = false; Locale locale; s32 modal = 0; string name; function onMain; function onOpenFile; bool quit = false; f32 scale = 1.0; bool screenSaver = true; bool toolTips = true; struct Cocoa { function onAbout; function onActivate; function onPreferences; function onQuit; } cocoa; }; static auto initialize() -> void; static auto state() -> State&; }; #endif ares-126/hiro/core/attribute.cpp000066400000000000000000000011221415063341600167150ustar00rootroot00000000000000#if defined(Hiro_Attribute) Attribute::Attribute(const string& name, const any& value) { state.name = name; state.value = value; } auto Attribute::operator==(const Attribute& source) const -> bool { return state.name == source.state.name; } auto Attribute::operator<(const Attribute& source) const -> bool { return state.name < source.state.name; } auto Attribute::name() const -> string { return state.name; } auto Attribute::setValue(const any& value) -> type& { state.value = value; return *this; } auto Attribute::value() const -> any& { return state.value; } #endif ares-126/hiro/core/attribute.hpp000066400000000000000000000006761415063341600167370ustar00rootroot00000000000000#if defined(Hiro_Attribute) struct Attribute { using type = Attribute; Attribute(const string& name, const any& value = {}); auto operator==(const Attribute& source) const -> bool; auto operator< (const Attribute& source) const -> bool; auto name() const -> string; auto setValue(const any& value = {}) -> type&; auto value() const -> any&; private: struct State { string name; mutable any value; } state; }; #endif ares-126/hiro/core/browser-window.cpp000066400000000000000000000016351415063341600177130ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) auto BrowserWindow::directory() -> string { return pBrowserWindow::directory(state); } auto BrowserWindow::open() -> string { return pBrowserWindow::open(state); } auto BrowserWindow::save() -> string { return pBrowserWindow::save(state); } auto BrowserWindow::setFilters(const vector& filters) -> type& { state.filters = filters; return *this; } auto BrowserWindow::setParent(shared_pointer parent) -> type& { state.parent = parent; return *this; } auto BrowserWindow::setPath(const string& path) -> type& { state.path = path; return *this; } auto BrowserWindow::setTitle(const string& title) -> type& { state.title = title; return *this; } auto BrowserWindow::setAllowsFolders(bool allows) -> type& { state.allowsFolders = allows; return *this; } auto BrowserWindow::allowsFolders() const -> bool { return state.allowsFolders; } #endif ares-126/hiro/core/browser-window.hpp000066400000000000000000000011641415063341600177150ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) struct BrowserWindow { using type = BrowserWindow; auto directory() -> string; auto open() -> string; auto save() -> string; auto setFilters(const vector& filters = {"*"}) -> type&; auto setParent(sWindow parent) -> type&; auto setPath(const string& path = "") -> type&; auto setTitle(const string& title = "") -> type&; auto setAllowsFolders(bool allows = false) -> type&; auto allowsFolders() const -> bool; //private: struct State { vector filters; sWindow parent; string path; string title; bool allowsFolders; } state; }; #endif ares-126/hiro/core/color.cpp000066400000000000000000000045041415063341600160370ustar00rootroot00000000000000#if defined(Hiro_Color) Color::Color() { setColor(0, 0, 0, 0); } Color::Color(s32 red, s32 green, s32 blue, s32 alpha) { setColor(red, green, blue, alpha); } Color::Color(SystemColor color) { switch (color) { case SystemColor::Text: setColor(0, 0, 0, 255); return; case SystemColor::Label: setColor(0, 0, 0, 255); return; case SystemColor::Sublabel: setColor(80, 80, 80, 255); return; case SystemColor::Link: setColor(0, 85, 255, 255); return; case SystemColor::PlaceholderText: setColor(128, 128, 128, 255); return; default: setColor(0, 0, 0, 0); return; } } Color::operator bool() const { return state.red || state.green || state.blue || state.alpha; } auto Color::operator==(const Color& source) const -> bool { return red() == source.red() && green() == source.green() && blue() == source.blue() && alpha() == source.alpha(); } auto Color::operator!=(const Color& source) const -> bool { return !operator==(source); } auto Color::alpha() const -> u8 { return state.alpha; } auto Color::blue() const -> u8 { return state.blue; } auto Color::green() const -> u8 { return state.green; } auto Color::red() const -> u8 { return state.red; } auto Color::reset() -> type& { return setColor(0, 0, 0, 0); } auto Color::setAlpha(s32 alpha) -> type& { state.alpha = max(0, min(255, alpha)); return *this; } auto Color::setBlue(s32 blue) -> type& { state.blue = max(0, min(255, blue)); return *this; } auto Color::setColor(Color color) -> type& { return setColor(color.red(), color.green(), color.blue(), color.alpha()); } auto Color::setColor(s32 red, s32 green, s32 blue, s32 alpha) -> type& { state.red = max(0, min(255, red )); state.green = max(0, min(255, green)); state.blue = max(0, min(255, blue )); state.alpha = max(0, min(255, alpha)); return *this; } auto Color::setGreen(s32 green) -> type& { state.green = max(0, min(255, green)); return *this; } auto Color::setRed(s32 red) -> type& { state.red = max(0, min(255, red)); return *this; } auto Color::setValue(u32 value) -> type& { state.alpha = value >> 24 & 255; state.red = value >> 16 & 255; state.green = value >> 8 & 255; state.blue = value >> 0 & 255; return *this; } auto Color::value() const -> u32 { return state.alpha << 24 | state.red << 16 | state.green << 8 | state.blue << 0; } #endif ares-126/hiro/core/color.hpp000066400000000000000000000015371415063341600160470ustar00rootroot00000000000000#if defined(Hiro_Color) struct Color { using type = Color; Color(); Color(s32 red, s32 green, s32 blue, s32 alpha = 255); Color(SystemColor color); explicit operator bool() const; auto operator==(const Color& source) const -> bool; auto operator!=(const Color& source) const -> bool; auto alpha() const -> u8; auto blue() const -> u8; auto green() const -> u8; auto red() const -> u8; auto reset() -> type&; auto setAlpha(s32 alpha) -> type&; auto setBlue(s32 blue) -> type&; auto setColor(Color color = {}) -> type&; auto setColor(s32 red, s32 green, s32 blue, s32 alpha = 255) -> type&; auto setGreen(s32 green) -> type&; auto setRed(s32 red) -> type&; auto setValue(u32 value) -> type&; auto value() const -> u32; //private: struct State { u8 red; u8 green; u8 blue; u8 alpha; } state; }; #endif ares-126/hiro/core/core.cpp000066400000000000000000000057121415063341600156530ustar00rootroot00000000000000#include #if defined(HIRO_WINDOWS) #include "../windows/header.hpp" #elif defined(HIRO_QT) #include "../qt/header.hpp" #elif defined(HIRO_GTK) #include "../gtk/header.hpp" #elif defined(HIRO_COCOA) #include "../cocoa/header.hpp" #endif #include "core.hpp" using namespace nall; #if defined(HIRO_WINDOWS) #include "../windows/platform.cpp" #elif defined(HIRO_QT) #include "../qt/platform.cpp" #elif defined(HIRO_GTK) #include "../gtk/platform.cpp" #elif defined(HIRO_COCOA) #include "../cocoa/platform.cpp" #endif #define signal(function, ...) \ (delegate ? self()->function(__VA_ARGS__) : decltype(self()->function(__VA_ARGS__))()) #define signalex(object, function, ...) \ (object->delegate ? object->self()->function(__VA_ARGS__) : decltype(object->self()->function(__VA_ARGS__))()) namespace hiro { #include "color.cpp" #include "gradient.cpp" #include "alignment.cpp" #include "text-cursor.cpp" #include "position.cpp" #include "size.cpp" #include "geometry.cpp" #include "font.cpp" #include "mouse-cursor.cpp" #include "application.cpp" #include "desktop.cpp" #include "monitor.cpp" #include "keyboard.cpp" #include "mouse.cpp" #include "browser-window.cpp" #include "message-window.cpp" #include "attribute.cpp" #include "object.cpp" #include "group.cpp" #include "hotkey.cpp" #include "timer.cpp" #include "window.cpp" #include "status-bar.cpp" #include "menu-bar.cpp" #include "popup-menu.cpp" #include "action/action.cpp" #include "action/menu.cpp" #include "action/menu-separator.cpp" #include "action/menu-item.cpp" #include "action/menu-check-item.cpp" #include "action/menu-radio-item.cpp" #include "sizable.cpp" #include "widget/widget.cpp" #include "widget/button.cpp" #include "widget/canvas.cpp" #include "widget/check-button.cpp" #include "widget/check-label.cpp" #include "widget/combo-button.cpp" #include "widget/combo-button-item.cpp" #include "widget/combo-edit.cpp" #include "widget/combo-edit-item.cpp" #include "widget/console.cpp" #include "widget/frame.cpp" #include "widget/hex-edit.cpp" #include "widget/horizontal-scroll-bar.cpp" #include "widget/horizontal-slider.cpp" #include "widget/icon-view.cpp" #include "widget/icon-view-item.cpp" #include "widget/label.cpp" #include "widget/line-edit.cpp" #include "widget/progress-bar.cpp" #include "widget/radio-button.cpp" #include "widget/radio-label.cpp" #include "widget/source-edit.cpp" #include "widget/tab-frame.cpp" #include "widget/tab-frame-item.cpp" #include "widget/table-view.cpp" #include "widget/table-view-column.cpp" #include "widget/table-view-item.cpp" #include "widget/table-view-cell.cpp" #include "widget/text-edit.cpp" #include "widget/tree-view.cpp" #include "widget/tree-view-item.cpp" #include "widget/vertical-scroll-bar.cpp" #include "widget/vertical-slider.cpp" #include "widget/viewport.cpp" } #undef signal #undef signalex ares-126/hiro/core/core.hpp000066400000000000000000000123171415063341600156570ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using nall::any; using nall::function; using nall::image; using nall::multiFactorImage; using nall::Locale; using nall::maybe; using nall::nothing; using nall::set; using nall::shared_pointer; using nall::shared_pointer_weak; using nall::string; using nall::unique_pointer; using nall::vector; namespace hiro { struct Font; struct Keyboard; #define Declare(Name) \ struct Name; \ struct m##Name; \ struct p##Name; \ using s##Name = shared_pointer; \ using w##Name = shared_pointer_weak; \ Declare(Object) Declare(Group) Declare(Timer) Declare(Window) Declare(StatusBar) Declare(MenuBar) Declare(PopupMenu) Declare(Action) Declare(Menu) Declare(MenuSeparator) Declare(MenuItem) Declare(MenuCheckItem) Declare(MenuRadioItem) Declare(Sizable) Declare(Widget) Declare(Button) Declare(Canvas) Declare(CheckButton) Declare(CheckLabel) Declare(ComboButton) Declare(ComboButtonItem) Declare(ComboEdit) Declare(ComboEditItem) Declare(Console) Declare(Frame) Declare(HexEdit) Declare(HorizontalScrollBar) Declare(HorizontalSlider) Declare(IconView) Declare(IconViewItem) Declare(Label) Declare(LineEdit) Declare(ProgressBar) Declare(RadioButton) Declare(RadioLabel) Declare(SourceEdit) Declare(TabFrame) Declare(TabFrameItem) Declare(TableView) Declare(TableViewHeader) Declare(TableViewColumn) Declare(TableViewItem) Declare(TableViewCell) Declare(TextEdit) Declare(TreeView) Declare(TreeViewItem) Declare(VerticalScrollBar) Declare(VerticalSlider) Declare(Viewport) #undef Declare enum class Orientation : u32 { Horizontal, Vertical }; enum class Navigation : u32 { Top, Bottom, Left, Right }; enum class Sort : u32 { None, Ascending, Descending }; #include "system-color.hpp" #include "color.hpp" #include "gradient.hpp" #include "alignment.hpp" #include "text-cursor.hpp" #include "position.hpp" #include "size.hpp" #include "geometry.hpp" #include "font.hpp" #include "mouse-cursor.hpp" #include "hotkey.hpp" #include "application.hpp" #include "desktop.hpp" #include "monitor.hpp" #include "keyboard.hpp" #include "mouse.hpp" #include "browser-window.hpp" #include "message-window.hpp" #include "attribute.hpp" #define Declare(Name) \ using type = m##Name; \ operator s##Name() const { return instance; } \ auto self() -> p##Name* { return (p##Name*)delegate; } \ auto self() const -> const p##Name* { return (const p##Name*)delegate; } \ auto bind(const s##Name& instance) -> void { \ this->instance = instance; \ setGroup(); \ if(!abstract()) construct(); \ } \ auto unbind() -> void { \ reset(); \ destruct(); \ instance.reset(); \ } \ virtual auto allocate() -> pObject*; \ #include "object.hpp" #undef Declare #define Declare(Name) \ using type = m##Name; \ operator s##Name() const { return instance; } \ auto self() -> p##Name* { return (p##Name*)delegate; } \ auto self() const -> const p##Name* { return (const p##Name*)delegate; } \ auto bind(const s##Name& instance) -> void { \ this->instance = instance; \ setGroup(); \ if(!abstract()) construct(); \ } \ auto unbind() -> void { \ reset(); \ destruct(); \ instance.reset(); \ } \ auto allocate() -> pObject* override; \ #include "group.hpp" #include "timer.hpp" #include "window.hpp" #include "status-bar.hpp" #include "menu-bar.hpp" #include "popup-menu.hpp" #include "action/action.hpp" #include "action/menu.hpp" #include "action/menu-separator.hpp" #include "action/menu-item.hpp" #include "action/menu-check-item.hpp" #include "action/menu-radio-item.hpp" #include "sizable.hpp" #include "widget/widget.hpp" #include "widget/button.hpp" #include "widget/canvas.hpp" #include "widget/check-button.hpp" #include "widget/check-label.hpp" #include "widget/combo-button.hpp" #include "widget/combo-button-item.hpp" #include "widget/combo-edit.hpp" #include "widget/combo-edit-item.hpp" #include "widget/console.hpp" #include "widget/frame.hpp" #include "widget/hex-edit.hpp" #include "widget/horizontal-scroll-bar.hpp" #include "widget/horizontal-slider.hpp" #include "widget/icon-view.hpp" #include "widget/icon-view-item.hpp" #include "widget/label.hpp" #include "widget/line-edit.hpp" #include "widget/progress-bar.hpp" #include "widget/radio-button.hpp" #include "widget/radio-label.hpp" #include "widget/source-edit.hpp" #include "widget/tab-frame.hpp" #include "widget/tab-frame-item.hpp" #include "widget/table-view.hpp" #include "widget/table-view-column.hpp" #include "widget/table-view-item.hpp" #include "widget/table-view-cell.hpp" #include "widget/text-edit.hpp" #include "widget/tree-view.hpp" #include "widget/tree-view-item.hpp" #include "widget/vertical-scroll-bar.hpp" #include "widget/vertical-slider.hpp" #include "widget/viewport.hpp" #undef Declare #include "lock.hpp" #include "shared.hpp" } ares-126/hiro/core/desktop.cpp000066400000000000000000000002521415063341600163660ustar00rootroot00000000000000#if defined(Hiro_Desktop) auto Desktop::size() -> Size { return pDesktop::size(); } auto Desktop::workspace() -> Geometry { return pDesktop::workspace(); } #endif ares-126/hiro/core/desktop.hpp000066400000000000000000000002211415063341600163670ustar00rootroot00000000000000#if defined(Hiro_Desktop) struct Desktop { Desktop() = delete; static auto size() -> Size; static auto workspace() -> Geometry; }; #endif ares-126/hiro/core/font.cpp000066400000000000000000000026701415063341600156710ustar00rootroot00000000000000#if defined(Hiro_Font) const string Font::Sans = "{sans}"; const string Font::Serif = "{serif}"; const string Font::Mono = "{mono}"; Font::Font(const string& family, f32 size) { setFamily(family); setSize(size); state.bold = false; state.italic = false; } Font::operator bool() const { return state.family || state.size || state.bold || state.italic; } auto Font::operator==(const Font& source) const -> bool { return family() == source.family() && size() == source.size() && bold() == source.bold() && italic() == source.italic(); } auto Font::operator!=(const Font& source) const -> bool { return !operator==(source); } auto Font::bold() const -> bool { return state.bold; } auto Font::family() const -> string { return state.family; } auto Font::italic() const -> bool { return state.italic; } auto Font::reset() -> type& { state.family = ""; state.size = 0; state.bold = false; state.italic = false; return *this; } auto Font::setBold(bool bold) -> type& { state.bold = bold; return *this; } auto Font::setFamily(const string& family) -> type& { state.family = family; return *this; } auto Font::setItalic(bool italic) -> type& { state.italic = italic; return *this; } auto Font::setSize(f32 size) -> type& { state.size = size; return *this; } auto Font::size() const -> f32 { return state.size; } auto Font::size(const string& text) const -> Size { return pFont::size(*this, text); } #endif ares-126/hiro/core/font.hpp000066400000000000000000000015121415063341600156700ustar00rootroot00000000000000#if defined(Hiro_Font) struct Font { using type = Font; Font(const string& family = "", f32 size = 0.0); explicit operator bool() const; auto operator==(const Font& source) const -> bool; auto operator!=(const Font& source) const -> bool; auto bold() const -> bool; auto family() const -> string; auto italic() const -> bool; auto reset() -> type&; auto setBold(bool bold = true) -> type&; auto setFamily(const string& family = "") -> type&; auto setItalic(bool italic = true) -> type&; auto setSize(f32 size = 0.0) -> type&; auto size() const -> f32; auto size(const string& text) const -> Size; static const string Sans; static const string Serif; static const string Mono; struct State { string family; f32 size = 0.0; char bold = false; char italic = false; } state; }; #endif ares-126/hiro/core/geometry.cpp000066400000000000000000000044461415063341600165610ustar00rootroot00000000000000#if defined(Hiro_Geometry) Geometry::Geometry() { setGeometry(0, 0, 0, 0); } Geometry::Geometry(Position position, Size size) { setGeometry(position, size); } Geometry::Geometry(f32 x, f32 y, f32 width, f32 height) { setGeometry(x, y, width, height); } Geometry::operator bool() const { return state.x || state.y || state.width || state.height; } auto Geometry::operator==(const Geometry& source) const -> bool { return x() == source.x() && y() == source.y() && width() == source.width() && height() == source.height(); } auto Geometry::operator!=(const Geometry& source) const -> bool { return !operator==(source); } auto Geometry::height() const -> f32 { return state.height; } auto Geometry::position() const -> Position { return {state.x, state.y}; } auto Geometry::reset() -> type& { return setGeometry(0, 0, 0, 0); } auto Geometry::setHeight(f32 height) -> type& { state.height = height; return *this; } auto Geometry::setGeometry(Geometry geometry) -> type& { return setGeometry(geometry.x(), geometry.y(), geometry.width(), geometry.height()); } auto Geometry::setGeometry(Position position, Size size) -> type& { setGeometry(position.x(), position.y(), size.width(), size.height()); return *this; } auto Geometry::setGeometry(f32 x, f32 y, f32 width, f32 height) -> type& { state.x = x; state.y = y; state.width = width; state.height = height; return *this; } auto Geometry::setPosition(Position position) -> type& { return setPosition(position.x(), position.y()); } auto Geometry::setPosition(f32 x, f32 y) -> type& { state.x = x; state.y = y; return *this; } auto Geometry::setSize(Size size) -> type& { return setSize(size.width(), size.height()); } auto Geometry::setSize(f32 width, f32 height) -> type& { state.width = width; state.height = height; return *this; } auto Geometry::setWidth(f32 width) -> type& { state.width = width; return *this; } auto Geometry::setX(f32 x) -> type& { state.x = x; return *this; } auto Geometry::setY(f32 y) -> type& { state.y = y; return *this; } auto Geometry::size() const -> Size { return {state.width, state.height}; } auto Geometry::width() const -> f32 { return state.width; } auto Geometry::x() const -> f32 { return state.x; } auto Geometry::y() const -> f32 { return state.y; } #endif ares-126/hiro/core/geometry.hpp000066400000000000000000000024001415063341600165520ustar00rootroot00000000000000#if defined(Hiro_Geometry) struct Geometry { using type = Geometry; Geometry(); Geometry(Position position, Size size); Geometry(f32 x, f32 y, f32 width, f32 height); template Geometry(X x, Y y, W width, H height) : Geometry((f32)x, (f32)y, (f32)width, (f32)height) {} explicit operator bool() const; auto operator==(const Geometry& source) const -> bool; auto operator!=(const Geometry& source) const -> bool; auto height() const -> f32; auto position() const -> Position; auto reset() -> type&; auto setGeometry(Geometry geometry = {}) -> type&; auto setGeometry(Position position, Size size) -> type&; auto setGeometry(f32 x, f32 y, f32 width, f32 height) -> type&; auto setHeight(f32 height) -> type&; auto setPosition(Position position = {}) -> type&; auto setPosition(f32 x, f32 y) -> type&; auto setSize(Size size = {}) -> type&; auto setSize(f32 width, f32 height) -> type&; auto setWidth(f32 width) -> type&; auto setX(f32 x) -> type&; auto setY(f32 y) -> type&; auto size() const -> Size; auto width() const -> f32; auto x() const -> f32; auto y() const -> f32; //private: struct State { f32 x; f32 y; f32 width; f32 height; } state; }; #endif ares-126/hiro/core/gradient.cpp000066400000000000000000000016571415063341600165240ustar00rootroot00000000000000#if defined(Hiro_Gradient) Gradient::Gradient() { } Gradient::operator bool() const { return state.colors.size() == 4; } auto Gradient::operator==(const Gradient& source) const -> bool { if(state.colors.size() != source.state.colors.size()) return false; for(auto n : range(state.colors.size())) { if(state.colors[n] != source.state.colors[n]) return false; } return true; } auto Gradient::operator!=(const Gradient& source) const -> bool { return !operator==(source); } auto Gradient::setBilinear(Color topLeft, Color topRight, Color bottomLeft, Color bottomRight) -> type& { state.colors = {topLeft, topRight, bottomLeft, bottomRight}; return *this; } auto Gradient::setHorizontal(Color left, Color right) -> type& { state.colors = {left, right, left, right}; return *this; } auto Gradient::setVertical(Color top, Color bottom) -> type& { state.colors = {top, top, bottom, bottom}; return *this; } #endif ares-126/hiro/core/gradient.hpp000066400000000000000000000010061415063341600165150ustar00rootroot00000000000000#if defined(Hiro_Gradient) struct Gradient { using type = Gradient; Gradient(); explicit operator bool() const; auto operator==(const Gradient& source) const -> bool; auto operator!=(const Gradient& source) const -> bool; auto setBilinear(Color topLeft, Color topRight, Color bottomLeft, Color bottomRight) -> type&; auto setHorizontal(Color left, Color right) -> type&; auto setVertical(Color top, Color bottom) -> type&; //private: struct State { vector colors; } state; }; #endif ares-126/hiro/core/group.cpp000066400000000000000000000020141415063341600160470ustar00rootroot00000000000000#if defined(Hiro_Group) auto mGroup::allocate() -> pObject* { return new pGroup(*this); } // auto mGroup::append(sObject object) -> type& { if(auto group = instance.acquire()) { state.objects.append(object); object->setGroup(group); } return *this; } auto mGroup::object(u32 position) const -> Object { if(position < objectCount()) { if(auto object = state.objects[position].acquire()) { return object; } } return {}; } auto mGroup::objectCount() const -> u32 { return state.objects.size(); } auto mGroup::objects() const -> vector { vector objects; for(auto& weak : state.objects) { if(auto object = weak.acquire()) objects.append(object); } return objects; } auto mGroup::remove(sObject object) -> type& { object->setGroup(); for(auto offset : range(state.objects.size())) { if(auto shared = state.objects[offset].acquire()) { if(object == shared) { state.objects.remove(offset); break; } } } return *this; } #endif ares-126/hiro/core/group.hpp000066400000000000000000000005641415063341600160640ustar00rootroot00000000000000#if defined(Hiro_Group) struct mGroup : mObject { Declare(Group) using mObject::remove; auto append(sObject object) -> type&; auto object(u32 offset) const -> Object; auto objectCount() const -> u32; auto objects() const -> vector; auto remove(sObject object) -> type&; //private: struct State { vector objects; } state; }; #endif ares-126/hiro/core/hotkey.cpp000066400000000000000000000024131415063341600162210ustar00rootroot00000000000000#if defined(Hiro_Hotkey) Hotkey::Hotkey() : state(new Hotkey::State) { setSequence(); } Hotkey::Hotkey(const string& sequence) : state(new Hotkey::State) { setSequence(sequence); } Hotkey::operator bool() const { return (bool)state->sequence; } auto Hotkey::operator==(const Hotkey& source) const -> bool { return state == source.state; } auto Hotkey::operator!=(const Hotkey& source) const -> bool { return !operator==(source); } auto Hotkey::doPress() const -> void { if(state->onPress) state->onPress(); } auto Hotkey::doRelease() const -> void { if(state->onRelease) state->onRelease(); } auto Hotkey::onPress(const function& callback) -> type& { state->onPress = callback; return *this; } auto Hotkey::onRelease(const function& callback) -> type& { state->onRelease = callback; return *this; } auto Hotkey::reset() -> type& { setSequence(); return *this; } auto Hotkey::sequence() const -> string { return state->sequence; } auto Hotkey::setSequence(const string& sequence) -> type& { state->active = false; state->sequence = sequence; state->keys.reset(); for(auto& key : sequence.split("+")) { if(auto position = Keyboard::keys.find(key)) { state->keys.append(*position); } } return *this; } #endif ares-126/hiro/core/hotkey.hpp000066400000000000000000000014141415063341600162260ustar00rootroot00000000000000#if defined(Hiro_Hotkey) struct Hotkey { using type = Hotkey; Hotkey(); Hotkey(const string& sequence); explicit operator bool() const; auto operator==(const Hotkey& source) const -> bool; auto operator!=(const Hotkey& source) const -> bool; auto doPress() const -> void; auto doRelease() const -> void; auto onPress(const function& callback = {}) -> type&; auto onRelease(const function& callback = {}) -> type&; auto reset() -> type&; auto sequence() const -> string; auto setSequence(const string& sequence = "") -> type&; //private: struct State { bool active = false; vector keys; function onPress; function onRelease; string sequence; }; shared_pointer state; }; #endif ares-126/hiro/core/keyboard.cpp000066400000000000000000000045511415063341600165230ustar00rootroot00000000000000#if defined(Hiro_Keyboard) Keyboard::State Keyboard::state; const vector Keyboard::keys = { //physical keyboard buttons "Escape", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "PrintScreen", "ScrollLock", "Pause", "Insert", "Delete", "Home", "End", "PageUp", "PageDown", "Up", "Down", "Left", "Right", "Grave", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "Dash", "Equal", "Backspace", "Tab", "CapsLock", "LeftEnter", "LeftShift", "RightShift", "LeftControl", "RightControl", "LeftAlt", "RightAlt", "LeftSuper", "RightSuper", "Menu", "Space", "OpenBracket", "CloseBracket", "Backslash", "Semicolon", "Apostrophe", "Comma", "Period", "Slash", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "NumLock", "Divide", "Multiply", "Subtract", "Add", "RightEnter", "Point", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Zero", //group aliases "Shift", //"LeftShift" | "RightShift" "Control", //"LeftControl" | "RightControl" "Alt", //"LeftAlt" | "RightAlt" "Super", //"LeftSuper" | "RightSuper" "Enter", //"LeftEnter" | "RightEnter" }; auto Keyboard::append(Hotkey hotkey) -> void { state.hotkeys.append(hotkey); } auto Keyboard::hotkey(u32 position) -> Hotkey { if(position < hotkeyCount()) return state.hotkeys[position]; return {}; } auto Keyboard::hotkeyCount() -> u32 { return state.hotkeys.size(); } auto Keyboard::hotkeys() -> vector { return state.hotkeys; } auto Keyboard::poll() -> vector { auto pressed = pKeyboard::poll(); for(auto& hotkey : state.hotkeys) { bool active = hotkey.state->sequence.size() > 0; for(auto& key : hotkey.state->keys) { if(pressed[key]) continue; active = false; break; } if(hotkey.state->active != active) { hotkey.state->active = active; active ? hotkey.doPress() : hotkey.doRelease(); } } return pressed; } auto Keyboard::pressed(const string& key) -> bool { if(auto code = keys.find(key)) return pKeyboard::pressed(*code); return false; } auto Keyboard::released(const string& key) -> bool { return !pressed(key); } auto Keyboard::remove(Hotkey hotkey) -> void { if(auto offset = state.hotkeys.find(hotkey)) { state.hotkeys.remove(*offset); } } #endif ares-126/hiro/core/keyboard.hpp000066400000000000000000000010521415063341600165210ustar00rootroot00000000000000#if defined(Hiro_Keyboard) struct Keyboard { Keyboard() = delete; static auto append(Hotkey hotkey) -> void; static auto hotkey(u32 position) -> Hotkey; static auto hotkeyCount() -> u32; static auto hotkeys() -> vector; static auto poll() -> vector; static auto pressed(const string& key) -> bool; static auto released(const string& key) -> bool; static auto remove(Hotkey hotkey) -> void; static const vector keys; //private: struct State { vector hotkeys; }; static State state; }; #endif ares-126/hiro/core/lock.hpp000066400000000000000000000015111415063341600156510ustar00rootroot00000000000000#pragma once //shared functionality used for pObject on all platforms struct Lock { struct Handle { Handle(const Lock* self) : self(self) { if(self) ++self->locks; } ~Handle() { release(); } auto release() -> bool { if(self) { --self->locks; self = nullptr; return true; } return false; } const Lock* self = nullptr; }; auto acquired() const -> bool { return locks || Application::state().quit; } auto acquire() const -> Handle { return {this}; } //deprecated C-style manual functions //prefer RAII acquire() functionality instead in newly written code auto locked() const -> bool { return acquired(); } auto lock() -> void { ++locks; } auto unlock() -> void { --locks; } mutable s32 locks = 0; }; ares-126/hiro/core/menu-bar.cpp000066400000000000000000000026601415063341600164300ustar00rootroot00000000000000#if defined(Hiro_MenuBar) auto mMenuBar::allocate() -> pObject* { return new pMenuBar(*this); } auto mMenuBar::destruct() -> void { for(auto& menu : state.menus) menu->destruct(); mObject::destruct(); } // auto mMenuBar::append(sMenu menu) -> type& { state.menus.append(menu); menu->setParent(this, menuCount() - 1); signal(append, menu); return *this; } auto mMenuBar::menu(u32 position) const -> Menu { if(position < menuCount()) return state.menus[position]; return {}; } auto mMenuBar::menuCount() const -> u32 { return state.menus.size(); } auto mMenuBar::menus() const -> vector { vector menus; for(auto& menu : state.menus) menus.append(menu); return menus; } auto mMenuBar::remove() -> type& { if(auto window = parentWindow()) window->remove(window->menuBar()); return *this; } auto mMenuBar::remove(sMenu menu) -> type& { s32 offset = menu->offset(); signal(remove, menu); state.menus.remove(offset); for(auto n : range(offset, menuCount())) { state.menus[n]->adjustOffset(-1); } menu->setParent(); return *this; } auto mMenuBar::reset() -> type& { while(state.menus) remove(state.menus.right()); return *this; } auto mMenuBar::setParent(mObject* parent, s32 offset) -> type& { for(auto& menu : reverse(state.menus)) menu->destruct(); mObject::setParent(parent, offset); for(auto& menu : state.menus) menu->setParent(this, menu->offset()); return *this; } #endif ares-126/hiro/core/menu-bar.hpp000066400000000000000000000010071415063341600164270ustar00rootroot00000000000000#if defined(Hiro_MenuBar) struct mMenuBar : mObject { Declare(MenuBar) auto append(sMenu menu) -> type&; auto menu(u32 position) const -> Menu; auto menuCount() const -> u32; auto menus() const -> vector; auto remove() -> type& override; auto remove(sMenu menu) -> type&; auto reset() -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; //private: struct State { vector menus; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/message-window.cpp000066400000000000000000000017171415063341600176550ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) MessageWindow::MessageWindow(const string& text) { state.text = text; } auto MessageWindow::error(Buttons buttons) -> Response { state.buttons = buttons; return pMessageWindow::error(state); } auto MessageWindow::information(Buttons buttons) -> Response { state.buttons = buttons; return pMessageWindow::information(state); } auto MessageWindow::question(Buttons buttons) -> Response { state.buttons = buttons; return pMessageWindow::question(state); } auto MessageWindow::setParent(shared_pointer parent) -> type& { state.parent = parent; return *this; } auto MessageWindow::setText(const string& text) -> type& { state.text = text; return *this; } auto MessageWindow::setTitle(const string& title) -> type& { state.title = title; return *this; } auto MessageWindow::warning(MessageWindow::Buttons buttons) -> Response { state.buttons = buttons; return pMessageWindow::warning(state); } #endif ares-126/hiro/core/message-window.hpp000066400000000000000000000014051415063341600176540ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) struct MessageWindow { enum class Buttons : u32 { Ok, OkCancel, YesNo, YesNoCancel }; enum class Response : u32 { Ok, Cancel, Yes, No }; using type = MessageWindow; MessageWindow(const string& text = ""); auto error(Buttons = Buttons::Ok) -> Response; auto information(Buttons = Buttons::Ok) -> Response; auto question(Buttons = Buttons::YesNo) -> Response; auto setParent(sWindow parent) -> type&; auto setText(const string& text = "") -> type&; auto setTitle(const string& title = "") -> type&; auto warning(Buttons = Buttons::Ok) -> Response; //private: struct State { MessageWindow::Buttons buttons = MessageWindow::Buttons::Ok; sWindow parent; string text; string title; } state; }; #endif ares-126/hiro/core/monitor.cpp000066400000000000000000000010101415063341600163750ustar00rootroot00000000000000#if defined(Hiro_Monitor) auto Monitor::count() -> u32 { return pMonitor::count(); } auto Monitor::dpi(maybe monitor) -> Position { return pMonitor::dpi(monitor ? monitor() : primary()); } auto Monitor::geometry(maybe monitor) -> Geometry { return pMonitor::geometry(monitor ? monitor() : primary()); } auto Monitor::primary() -> u32 { return pMonitor::primary(); } auto Monitor::workspace(maybe monitor) -> Geometry { return pMonitor::workspace(monitor ? monitor() : primary()); } #endif ares-126/hiro/core/monitor.hpp000066400000000000000000000014631415063341600164160ustar00rootroot00000000000000#if defined(Hiro_Monitor) struct Monitor { Monitor() = delete; static auto count() -> u32; static auto dpi(maybe monitor = nothing) -> Position; static auto geometry(maybe monitor = nothing) -> Geometry; static auto primary() -> u32; static auto workspace(maybe monitor = nothing) -> Geometry; }; //DPI scale X inline auto sx(f32 x) -> f32 { //round DPI scalar to increments of 0.5 (eg 1.0, 1.5, 2.0, ...) static auto scale = round(Monitor::dpi().x() / 96.0 * 2.0) / 2.0; return x * scale; } //DPI scale y inline auto sy(f32 y) -> f32 { static auto scale = round(Monitor::dpi().y() / 96.0 * 2.0) / 2.0; return y * scale; } inline auto operator"" _sx(unsigned long long x) -> f32 { return sx(x); } inline auto operator"" _sy(unsigned long long y) -> f32 { return sy(y); } #endif ares-126/hiro/core/mouse-cursor.cpp000066400000000000000000000013741415063341600173660ustar00rootroot00000000000000#if defined(Hiro_MouseCursor) const string MouseCursor::Default = ""; const string MouseCursor::Hand = "{hand}"; const string MouseCursor::HorizontalResize = "{horizontal-resize}"; const string MouseCursor::VerticalResize = "{vertical-resize}"; MouseCursor::MouseCursor(const string& name) { setName(name); } MouseCursor::operator bool() const { return state.name; } auto MouseCursor::operator==(const MouseCursor& source) const -> bool { return name() == source.name(); } auto MouseCursor::operator!=(const MouseCursor& source) const -> bool { return name() != source.name(); } auto MouseCursor::name() const -> string { return state.name; } auto MouseCursor::setName(const string& name) -> type& { state.name = name; return *this; } #endif ares-126/hiro/core/mouse-cursor.hpp000066400000000000000000000010621415063341600173650ustar00rootroot00000000000000#if defined(Hiro_MouseCursor) struct MouseCursor { using type = MouseCursor; MouseCursor(const string& name = ""); explicit operator bool() const; auto operator==(const MouseCursor& source) const -> bool; auto operator!=(const MouseCursor& source) const -> bool; auto name() const -> string; auto setName(const string& name = "") -> type&; static const string Default; static const string Hand; static const string HorizontalResize; static const string VerticalResize; //private: struct State { string name; } state; }; #endif ares-126/hiro/core/mouse.cpp000066400000000000000000000004211415063341600160430ustar00rootroot00000000000000#if defined(Hiro_Mouse) auto Mouse::position() -> Position { return pMouse::position(); } auto Mouse::pressed(Mouse::Button button) -> bool { return pMouse::pressed(button); } auto Mouse::released(Mouse::Button button) -> bool { return !pressed(button); } #endif ares-126/hiro/core/mouse.hpp000066400000000000000000000004341415063341600160540ustar00rootroot00000000000000#if defined(Hiro_Mouse) struct Mouse { enum class Button : u32 { Left, Middle, Right }; enum class Click : u32 { Single, Double }; Mouse() = delete; static auto position() -> Position; static auto pressed(Button) -> bool; static auto released(Button) -> bool; }; #endif ares-126/hiro/core/object.cpp000066400000000000000000000172001415063341600161640ustar00rootroot00000000000000#if defined(Hiro_Object) mObject::mObject() { Application::initialize(); } mObject::~mObject() { } auto mObject::allocate() -> pObject* { return new pObject(*this); } auto mObject::construct() -> void { if(delegate) return; delegate = allocate(); signal(construct); } auto mObject::destruct() -> void { if(!delegate) return; signal(destruct); delete delegate; delegate = nullptr; } // //used to test if returned items "exist" from eg Window::sizable(), ListView::selected(), etc. mObject::operator bool() const { return parent() || !abstract(); } //this is used to control dynamic allocation of pObject delegates //an mObject is abstract only if it has no top-level object (eg a Button not attached to any Window) //if the mObject is not abstract, the pObject delegate is allocated immediately //otherwise, the pObject is not allocated until it is attached to a non-abstract parent auto mObject::abstract() const -> bool { #if defined(Hiro_Group) if(dynamic_cast(this)) return false; #endif #if defined(Hiro_Timer) if(dynamic_cast(this)) return false; #endif #if defined(Hiro_Window) if(dynamic_cast(this)) return false; #endif #if defined(Hiro_PopupMenu) if(dynamic_cast(this)) return false; #endif if(auto object = parent()) return object->abstract(); return true; } auto mObject::adjustOffset(s32 displacement) -> type& { state.offset += displacement; return *this; } auto mObject::enabled(bool recursive) const -> bool { if(!recursive || !state.enabled) return state.enabled; if(auto object = parent()) return object->enabled(true); return true; } auto mObject::focused() const -> bool { return signal(focused); } auto mObject::font(bool recursive) const -> Font { if(!recursive || state.font) return state.font; if(auto object = parent()) return object->font(true); return Application::font(); } auto mObject::group() const -> Group { return {}; } auto mObject::offset() const -> s32 { return state.offset; } auto mObject::parent() const -> mObject* { return state.parent; } #if defined(Hiro_ComboButton) auto mObject::parentComboButton(bool recursive) const -> mComboButton* { if(auto comboButton = dynamic_cast(parent())) return comboButton; if(recursive) { if(auto object = parent()) return object->parentComboButton(true); } return nullptr; } #endif #if defined(Hiro_ComboEdit) auto mObject::parentComboEdit(bool recursive) const -> mComboEdit* { if(auto comboEdit = dynamic_cast(parent())) return comboEdit; if(recursive) { if(auto object = parent()) return object->parentComboEdit(true); } return nullptr; } #endif #if defined(Hiro_Frame) auto mObject::parentFrame(bool recursive) const -> mFrame* { if(auto frame = dynamic_cast(parent())) return frame; if(recursive) { if(auto object = parent()) return object->parentFrame(true); } return nullptr; } #endif #if defined(Hiro_IconView) auto mObject::parentIconView(bool recursive) const -> mIconView* { if(auto iconView = dynamic_cast(parent())) return iconView; if(recursive) { if(auto object = parent()) return object->parentIconView(true); } return nullptr; } #endif #if defined(Hiro_Menu) auto mObject::parentMenu(bool recursive) const -> mMenu* { if(auto menu = dynamic_cast(parent())) return menu; if(recursive) { if(auto object = parent()) return object->parentMenu(true); } return nullptr; } #endif #if defined(Hiro_MenuBar) auto mObject::parentMenuBar(bool recursive) const -> mMenuBar* { if(auto menuBar = dynamic_cast(parent())) return menuBar; if(recursive) { if(auto object = parent()) return object->parentMenuBar(true); } return nullptr; } #endif #if defined(Hiro_PopupMenu) auto mObject::parentPopupMenu(bool recursive) const -> mPopupMenu* { if(auto popupMenu = dynamic_cast(parent())) return popupMenu; if(recursive) { if(auto object = parent()) return object->parentPopupMenu(true); } return nullptr; } #endif #if defined(Hiro_Sizable) auto mObject::parentSizable(bool recursive) const -> mSizable* { if(auto sizable = dynamic_cast(parent())) return sizable; if(recursive) { if(auto object = parent()) return object->parentSizable(true); } return nullptr; } #endif #if defined(Hiro_TabFrame) auto mObject::parentTabFrame(bool recursive) const -> mTabFrame* { if(auto tabFrame = dynamic_cast(parent())) return tabFrame; if(recursive) { if(auto object = parent()) return object->parentTabFrame(true); } return nullptr; } #endif #if defined(Hiro_TabFrame) auto mObject::parentTabFrameItem(bool recursive) const -> mTabFrameItem* { if(auto tabFrameItem = dynamic_cast(parent())) return tabFrameItem; if(recursive) { if(auto object = parent()) return object->parentTabFrameItem(true); } return nullptr; } #endif #if defined(Hiro_TableView) auto mObject::parentTableView(bool recursive) const -> mTableView* { if(auto tableView = dynamic_cast(parent())) return tableView; if(recursive) { if(auto object = parent()) return object->parentTableView(true); } return nullptr; } #endif #if defined(Hiro_TableView) auto mObject::parentTableViewItem(bool recursive) const -> mTableViewItem* { if(auto tableViewItem = dynamic_cast(parent())) return tableViewItem; if(recursive) { if(auto object = parent()) return object->parentTableViewItem(true); } return nullptr; } #endif #if defined(Hiro_TreeView) auto mObject::parentTreeView(bool recursive) const -> mTreeView* { if(auto treeView = dynamic_cast(parent())) return treeView; if(recursive) { if(auto object = parent()) return object->parentTreeView(true); } return nullptr; } #endif #if defined(Hiro_TreeView) auto mObject::parentTreeViewItem(bool recursive) const -> mTreeViewItem* { if(auto treeViewItem = dynamic_cast(parent())) return treeViewItem; if(recursive) { if(auto object = parent()) return object->parentTreeViewItem(true); } return nullptr; } #endif #if defined(Hiro_Widget) auto mObject::parentWidget(bool recursive) const -> mWidget* { if(auto widget = dynamic_cast(parent())) return widget; if(recursive) { if(auto object = parent()) return object->parentWidget(true); } return nullptr; } #endif #if defined(Hiro_Window) auto mObject::parentWindow(bool recursive) const -> mWindow* { if(auto window = dynamic_cast(parent())) return window; if(recursive) { if(auto object = parent()) return object->parentWindow(true); } return nullptr; } #endif auto mObject::remove() -> type& { signal(remove); return *this; } auto mObject::reset() -> type& { signal(reset); return *this; } auto mObject::setEnabled(bool enabled) -> type& { state.enabled = enabled; signal(setEnabled, this->enabled(true)); return *this; } auto mObject::setFocused() -> type& { signal(setFocused); return *this; } auto mObject::setFont(const Font& font) -> type& { state.font = font; signal(setFont, this->font(true)); return *this; } auto mObject::setGroup(sGroup group) -> type& { return *this; } auto mObject::setParent(mObject* parent, s32 offset) -> type& { destruct(); state.parent = parent; state.offset = offset; if(!abstract()) construct(); return *this; } auto mObject::setVisible(bool visible) -> type& { state.visible = visible; signal(setVisible, this->visible(true)); return *this; } auto mObject::visible(bool recursive) const -> bool { if(!recursive || !state.visible) return state.visible; if(auto object = parent()) return object->visible(true); return true; } #endif ares-126/hiro/core/object.hpp000066400000000000000000000074231415063341600161770ustar00rootroot00000000000000#if defined(Hiro_Object) struct mObject { Declare(Object) mObject(); virtual ~mObject(); mObject(const mObject&) = delete; mObject& operator=(const mObject&) = delete; explicit operator bool() const; auto abstract() const -> bool; auto adjustOffset(s32 displacement) -> type&; auto enabled(bool recursive = false) const -> bool; virtual auto focused() const -> bool; auto font(bool recursive = false) const -> Font; virtual auto group() const -> Group; auto offset() const -> s32; auto parent() const -> mObject*; auto parentComboButton(bool recursive = false) const -> mComboButton*; auto parentComboEdit(bool recursive = false) const -> mComboEdit*; auto parentFrame(bool recursive = false) const -> mFrame*; auto parentIconView(bool recursive = false) const -> mIconView*; auto parentMenu(bool recursive = false) const -> mMenu*; auto parentMenuBar(bool recursive = false) const -> mMenuBar*; auto parentPopupMenu(bool recursive = false) const -> mPopupMenu*; auto parentSizable(bool recursive = false) const -> mSizable*; auto parentTabFrame(bool recursive = false) const -> mTabFrame*; auto parentTabFrameItem(bool recursive = false) const -> mTabFrameItem*; auto parentTableView(bool recursive = false) const -> mTableView*; auto parentTableViewItem(bool recursive = false) const -> mTableViewItem*; auto parentTreeView(bool recursive = false) const -> mTreeView*; auto parentTreeViewItem(bool recursive = false) const -> mTreeViewItem*; auto parentWidget(bool recursive = false) const -> mWidget*; auto parentWindow(bool recursive = false) const -> mWindow*; virtual auto remove() -> type&; virtual auto reset() -> type&; virtual auto setEnabled(bool enabled = true) -> type&; virtual auto setFocused() -> type&; virtual auto setFont(const Font& font = {}) -> type&; virtual auto setGroup(sGroup group = {}) -> type&; virtual auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type&; virtual auto setVisible(bool visible = true) -> type&; auto visible(bool recursive = false) const -> bool; template auto attribute(const string& name) const -> T { if(auto attribute = state.attributes.find(name)) { if(attribute->value().is()) return attribute->value().get(); } return {}; } template auto hasAttribute(const string& name) const -> bool { if(auto attribute = state.attributes.find(name)) { if(attribute->value().is()) return true; } return false; } //this template basically disables implicit template type deduction: //if setAttribute(name, value) is called without a type, the type will be a string, so attribute(name) will just work. //if setAttribute(name, value) is called, the type will be T. as such, U must be cast to T on assignment. //when T = string, value must be convertible to a string. //U defaults to a string, so that setAttribute(name, {values, ...}) will deduce U as a string. template auto setAttribute(const string& name, const U& value) -> type& { if constexpr(std::is_same_v && !std::is_same_v) { return setAttribute(name, string{value}); } if(auto attribute = state.attributes.find(name)) { if((const T&)value) attribute->setValue((const T&)value); else state.attributes.remove(*attribute); } else { if((const T&)value) state.attributes.insert({name, (const T&)value}); } return *this; } //private: struct State { set attributes; Font font; mObject* parent = nullptr; s32 offset = -1; char enabled = true; char visible = true; } state; wObject instance; pObject* delegate = nullptr; virtual auto construct() -> void; virtual auto destruct() -> void; }; #endif ares-126/hiro/core/popup-menu.cpp000066400000000000000000000027571415063341600170360ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) auto mPopupMenu::allocate() -> pObject* { return new pPopupMenu(*this); } auto mPopupMenu::destruct() -> void { for(auto& action : state.actions) action->destruct(); mObject::destruct(); } // auto mPopupMenu::action(u32 position) const -> Action { if(position < actionCount()) return state.actions[position]; return {}; } auto mPopupMenu::actionCount() const -> u32 { return state.actions.size(); } auto mPopupMenu::actions() const -> vector { vector actions; for(auto& action : state.actions) actions.append(action); return actions; } auto mPopupMenu::append(sAction action) -> type& { state.actions.append(action); action->setParent(this, actionCount() - 1); signal(append, action); return *this; } auto mPopupMenu::remove(sAction action) -> type& { s32 offset = action->offset(); signal(remove, action); state.actions.remove(offset); for(auto n : range(offset, actionCount())) { state.actions[n]->adjustOffset(-1); } action->setParent(); return *this; } auto mPopupMenu::reset() -> type& { while(state.actions) remove(state.actions.right()); return *this; } auto mPopupMenu::setParent(mObject* parent, s32 offset) -> type& { for(auto& action : reverse(state.actions)) action->destruct(); mObject::setParent(parent, offset); for(auto& action : state.actions) action->construct(); return *this; } auto mPopupMenu::setVisible(bool visible) -> type& { signal(setVisible, visible); return *this; } #endif ares-126/hiro/core/popup-menu.hpp000066400000000000000000000011231415063341600170250ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) struct mPopupMenu : mObject { Declare(PopupMenu) using mObject::remove; auto action(u32 position) const -> Action; auto actionCount() const -> u32; auto actions() const -> vector; auto append(sAction action) -> type&; auto remove(sAction action) -> type&; auto reset() -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setVisible(bool visible = true) -> type& override; //private: struct State { vector actions; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/position.cpp000066400000000000000000000016721415063341600165700ustar00rootroot00000000000000#if defined(Hiro_Position) Position::Position() { setPosition(0, 0); } Position::Position(f32 x, f32 y) { setPosition(x, y); } Position::operator bool() const { return state.x || state.y; } auto Position::operator==(const Position& source) const -> bool { return x() == source.x() && y() == source.y(); } auto Position::operator!=(const Position& source) const -> bool { return !operator==(source); } auto Position::reset() -> type& { return setPosition(0, 0); } auto Position::setPosition(Position position) -> type& { return setPosition(position.x(), position.y()); } auto Position::setPosition(f32 x, f32 y) -> type& { state.x = x; state.y = y; return *this; } auto Position::setX(f32 x) -> type& { state.x = x; return *this; } auto Position::setY(f32 y) -> type& { state.y = y; return *this; } auto Position::x() const -> f32 { return state.x; } auto Position::y() const -> f32 { return state.y; } #endif ares-126/hiro/core/position.hpp000066400000000000000000000012101415063341600165610ustar00rootroot00000000000000#if defined(Hiro_Position) struct Position { using type = Position; Position(); Position(f32 x, f32 y); template Position(X x, Y y) : Position((f32)x, (f32)y) {} explicit operator bool() const; auto operator==(const Position& source) const -> bool; auto operator!=(const Position& source) const -> bool; auto reset() -> type&; auto setPosition(Position position = {}) -> type&; auto setPosition(f32 x, f32 y) -> type&; auto setX(f32 x) -> type&; auto setY(f32 y) -> type&; auto x() const -> f32; auto y() const -> f32; //private: struct State { f32 x; f32 y; } state; }; #endif ares-126/hiro/core/shared.hpp000066400000000000000000001400601415063341600161720ustar00rootroot00000000000000#define DeclareShared(Name) \ using type = Name; \ using internalType = m##Name; \ Name() : s##Name(new m##Name, [](auto p) { \ p->unbind(); \ delete p; \ }) { \ (*this)->bind(*this); \ } \ Name(const s##Name& source) : s##Name(source) { assert(source); } \ template Name(const T& source, \ std::enable_if_t::value>* = 0) : \ s##Name((s##Name&)source) { assert(source); } \ explicit operator bool() const { return self().operator bool(); } \ auto self() const -> m##Name& { return (m##Name&)operator*(); } \ #define DeclareSharedObject(Name) \ DeclareShared(Name) \ template Name(T* parent, P&&... p) : Name() { \ if(parent) (*parent)->append(*this, std::forward

(p)...); \ } \ template auto is() -> bool { \ return dynamic_cast(s##Name::data()); \ } \ template auto cast() -> T { \ if(auto pointer = dynamic_cast(s##Name::data())) { \ if(auto shared = pointer->instance.acquire()) return T(shared); \ } \ return T(); \ } \ template auto attribute(const string& name) const { return self().attribute(name); } \ auto enabled(bool recursive = false) const { return self().enabled(recursive); } \ auto focused() const { return self().focused(); } \ auto font(bool recursive = false) const { return self().font(recursive); } \ auto offset() const { return self().offset(); } \ auto parent() const { \ if(auto object = self().parent()) { \ if(auto instance = object->instance.acquire()) return Object(instance); \ } \ return Object(); \ } \ auto remove() { return self().remove(), *this; } \ template auto setAttribute(const string& name, const U& value = {}) { return self().setAttribute(name, value), *this; } \ auto setEnabled(bool enabled = true) { return self().setEnabled(enabled), *this; } \ auto setFocused() { return self().setFocused(), *this; } \ auto setFont(const Font& font = {}) { return self().setFont(font), *this; } \ auto setVisible(bool visible = true) { return self().setVisible(visible), *this; } \ auto visible(bool recursive = false) const { return self().visible(recursive); } \ #define DeclareSharedAction(Name) \ DeclareSharedObject(Name) \ #define DeclareSharedSizable(Name) \ DeclareSharedObject(Name) \ auto collapsible() const { return self().collapsible(); } \ auto doSize() const { return self().doSize(); } \ auto geometry() const { return self().geometry(); } \ auto minimumSize() const { return self().minimumSize(); } \ auto onSize(const function& callback = {}) { return self().onSize(callback), *this; } \ auto setCollapsible(bool collapsible = true) { return self().setCollapsible(collapsible), *this; } \ auto setGeometry(Geometry geometry) { return self().setGeometry(geometry), *this; } \ #define DeclareSharedWidget(Name) \ DeclareSharedSizable(Name) \ auto droppable() const { return self().droppable(); } \ auto doDrop(vector names) { return self().doDrop(names); } \ auto doMouseEnter() const { return self().doMouseEnter(); } \ auto doMouseLeave() const { return self().doMouseLeave(); } \ auto doMouseMove(Position position) const { return self().doMouseMove(position); } \ auto doMousePress(Mouse::Button button) const { return self().doMousePress(button); } \ auto doMouseRelease(Mouse::Button button) const { return self().doMouseRelease(button); } \ auto focusable() const { return self().focusable(); } \ auto mouseCursor() const { return self().mouseCursor(); } \ auto onDrop(const function)>& callback = {}) { return self().onDrop(callback), *this; } \ auto onMouseEnter(const function& callback = {}) { return self().onMouseEnter(callback), *this; } \ auto onMouseLeave(const function& callback = {}) { return self().onMouseLeave(callback), *this; } \ auto onMouseMove(const function& callback = {}) { return self().onMouseMove(callback), *this; } \ auto onMousePress(const function& callback = {}) { return self().onMousePress(callback), *this; } \ auto onMouseRelease(const function& callback = {}) { return self().onMouseRelease(callback), *this; } \ auto setDroppable(bool droppable = true) { return self().setDroppable(droppable), *this; } \ auto setFocusable(bool focusable = true) { return self().setFocusable(focusable), *this; } \ auto setMouseCursor(const MouseCursor& mouseCursor = {}) { return self().setMouseCursor(mouseCursor), *this; } \ auto setToolTip(const string& toolTip = "") { return self().setToolTip(toolTip), *this; } \ auto toolTip() const { return self().toolTip(); } \ #if defined(Hiro_Object) struct Object : sObject { DeclareSharedObject(Object) }; #endif #if defined(Hiro_Group) struct Group : sGroup { DeclareShared(Group) template Group(P&&... p) : Group() { _append(std::forward

(p)...); } auto append(sObject object) -> type& { return self().append(object), *this; } auto object(u32 position) const { return self().object(position); } auto objectCount() const { return self().objectCount(); } template auto objects() const -> vector { vector objects; for(auto object : self().objects()) { if(auto casted = object.cast()) objects.append(casted); } return objects; } auto remove(sObject object) -> type& { return self().remove(object), *this; } private: auto _append() {} template auto _append(T* object, P&&... p) { append(*object); _append(std::forward

(p)...); } }; #endif #if defined(Hiro_Timer) struct Timer : sTimer { DeclareSharedObject(Timer) auto doActivate() const { return self().doActivate(); } auto interval() const { return self().interval(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto setInterval(u32 interval = 0) { return self().setInterval(interval), *this; } }; #endif #if defined(Hiro_Action) struct Action : sAction { DeclareSharedAction(Action) }; #endif #if defined(Hiro_Menu) struct Menu : sMenu { DeclareSharedAction(Menu) auto action(u32 position) const { return self().action(position); } auto actionCount() const { return self().actionCount(); } auto actions() const { return self().actions(); } auto append(sAction action) { return self().append(action), *this; } auto icon() const { return self().icon(); } auto remove(sAction action) { return self().remove(action), *this; } auto reset() { return self().reset(), *this; } auto setIcon(const multiFactorImage& icon = {}, bool forced = false) { return self().setIcon(icon, forced), *this; } auto setIconForFile(const string& filename) { return self().setIconForFile(filename), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_MenuSeparator) struct MenuSeparator : sMenuSeparator { DeclareSharedAction(MenuSeparator) }; #endif #if defined(Hiro_MenuItem) struct MenuItem : sMenuItem { DeclareSharedAction(MenuItem) auto doActivate() const { return self().doActivate(); } auto icon() const { return self().icon(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto setIcon(const multiFactorImage& icon = {}, bool forced = false) { return self().setIcon(icon, forced), *this; } auto setIconForFile(const string& filename) { return self().setIconForFile(filename), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_MenuCheckItem) struct MenuCheckItem : sMenuCheckItem { DeclareSharedAction(MenuCheckItem) auto checked() const { return self().checked(); } auto doToggle() const { return self().doToggle(); } auto onToggle(const function& callback = {}) { return self().onToggle(callback), *this; } auto setChecked(bool checked = true) { return self().setChecked(checked), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_MenuRadioItem) struct MenuRadioItem : sMenuRadioItem { DeclareSharedAction(MenuRadioItem) auto checked() const { return self().checked(); } auto doActivate() const { return self().doActivate(); } auto group() const { return self().group(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto setChecked() { return self().setChecked(), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_Sizable) struct Sizable : sSizable { DeclareSharedSizable(Sizable) }; #endif #if defined(Hiro_Widget) struct Widget : sWidget { DeclareSharedWidget(Widget) }; #endif #if defined(Hiro_Button) struct Button : sButton { DeclareSharedWidget(Button) auto bordered() const { return self().bordered(); } auto doActivate() const { return self().doActivate(); } auto icon() const { return self().icon(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto orientation() const { return self().orientation(); } auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_Canvas) struct Canvas : sCanvas { DeclareSharedWidget(Canvas) auto alignment() const { return self().alignment(); } auto color() const { return self().color(); } auto data() { return self().data(); } auto gradient() const { return self().gradient(); } auto icon() const { return self().icon(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setColor(Color color) { return self().setColor(color), *this; } auto setGradient(Gradient gradient = {}) { return self().setGradient(gradient), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setSize(Size size = {}) { return self().setSize(size), *this; } auto update() { return self().update(), *this; } }; #endif #if defined(Hiro_CheckButton) struct CheckButton : sCheckButton { DeclareSharedWidget(CheckButton) auto bordered() const { return self().bordered(); } auto checked() const { return self().checked(); } auto doToggle() const { return self().doToggle(); } auto icon() const { return self().icon(); } auto onToggle(const function& callback = {}) { return self().onToggle(callback), *this; } auto orientation() const { return self().orientation(); } auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; } auto setChecked(bool checked = true) { return self().setChecked(checked), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_CheckLabel) struct CheckLabel : sCheckLabel { DeclareSharedWidget(CheckLabel) auto checked() const { return self().checked(); } auto doToggle() const { return self().doToggle(); } auto onToggle(const function& callback = {}) { return self().onToggle(callback), *this; } auto setChecked(bool checked = true) { return self().setChecked(checked), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_ComboButton) struct ComboButtonItem : sComboButtonItem { DeclareSharedObject(ComboButtonItem) auto icon() const { return self().icon(); } auto selected() const { return self().selected(); } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setSelected() { return self().setSelected(), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_ComboButton) struct ComboButton : sComboButton { DeclareSharedWidget(ComboButton) auto append(sComboButtonItem item) { return self().append(item), *this; } auto doChange() const { return self().doChange(); } auto item(u32 position) const { return self().item(position); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto remove(sComboButtonItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto selected() const { return self().selected(); } auto setParent(mObject* parent = nullptr, s32 offset = -1) { return self().setParent(parent, offset), *this; } }; #endif #if defined(Hiro_ComboEdit) struct ComboEditItem : sComboEditItem { DeclareSharedObject(ComboEditItem) auto icon() const { return self().icon(); } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_ComboEdit) struct ComboEdit : sComboEdit { DeclareSharedWidget(ComboEdit) auto append(sComboEditItem item) { return self().append(item), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto doActivate() const { return self().doActivate(); } auto doChange() const { return self().doChange(); } auto editable() const { return self().editable(); } auto foregroundColor() const { return self().foregroundColor(); } auto item(u32 position) const { return self().item(position); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto remove(sComboEditItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setEditable(bool editable = true) { return self().setEditable(editable), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_Console) struct Console : sConsole { DeclareSharedWidget(Console) auto backgroundColor() const { return self().backgroundColor(); } auto doActivate(string command) const { return self().doActivate(command); } auto foregroundColor() const { return self().foregroundColor(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto print(const string& text) { return self().print(text), *this; } auto prompt() const { return self().prompt(); } auto reset() { return self().reset(), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setPrompt(const string& prompt = "") { return self().setPrompt(prompt), *this; } }; #endif #if defined(Hiro_Frame) struct Frame : sFrame { DeclareSharedWidget(Frame) auto append(sSizable sizable) { return self().append(sizable), *this; } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto reset() { return self().reset(), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto sizable() const { return self().sizable(); } auto text() const { return self().text(); } }; #endif #if defined(Hiro_HexEdit) struct HexEdit : sHexEdit { DeclareSharedWidget(HexEdit) auto address() const { return self().address(); } auto backgroundColor() const { return self().backgroundColor(); } auto columns() const { return self().columns(); } auto doRead(u32 offset) const { return self().doRead(offset); } auto doWrite(u32 offset, u8 data) const { return self().doWrite(offset, data); } auto foregroundColor() const { return self().foregroundColor(); } auto length() const { return self().length(); } auto onRead(const function& callback = {}) { return self().onRead(callback), *this; } auto onWrite(const function& callback = {}) { return self().onWrite(callback), *this; } auto rows() const { return self().rows(); } auto setAddress(u32 address) { return self().setAddress(address), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setColumns(u32 columns = 16) { return self().setColumns(columns), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setLength(u32 length) { return self().setLength(length), *this; } auto setRows(u32 rows = 16) { return self().setRows(rows), *this; } auto update() { return self().update(), *this; } }; #endif #if defined(Hiro_HorizontalScrollBar) struct HorizontalScrollBar : sHorizontalScrollBar { DeclareSharedWidget(HorizontalScrollBar) auto doChange() const { return self().doChange(); } auto length() const { return self().length(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto position() const { return self().position(); } auto setLength(u32 length = 101) { return self().setLength(length), *this; } auto setPosition(u32 position = 0) { return self().setPosition(position), *this; } }; #endif #if defined(Hiro_HorizontalSlider) struct HorizontalSlider : sHorizontalSlider { DeclareSharedWidget(HorizontalSlider) auto doChange() const { return self().doChange(); } auto length() const { return self().length(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto position() const { return self().position(); } auto setLength(u32 length = 101) { return self().setLength(length), *this; } auto setPosition(u32 position = 0) { return self().setPosition(position), *this; } }; #endif #if defined(Hiro_IconView) struct IconViewItem : sIconViewItem { DeclareSharedObject(IconViewItem) auto icon() const { return self().icon(); } auto selected() const { return self().selected(); } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setSelected(bool selected = true) { return self().setSelected(selected), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_IconView) struct IconView : sIconView { DeclareSharedWidget(IconView) auto append(sIconViewItem item) { return self().append(item), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto batchable() const { return self().batchable(); } auto batched() const { return self().batched(); } auto doActivate() const { return self().doActivate(); } auto doChange() const { return self().doChange(); } auto doContext() const { return self().doContext(); } auto flow() const { return self().flow(); } auto foregroundColor() const { return self().foregroundColor(); } auto item(u32 position) const { return self().item(position); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onContext(const function& callback = {}) { return self().onContext(callback), *this; } auto orientation() const { return self().orientation(); } auto remove(sIconViewItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto selected() const { return self().selected(); } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setBatchable(bool batchable = true) { return self().setBatchable(batchable), *this; } auto setFlow(Orientation orientation = Orientation::Vertical) { return self().setFlow(orientation), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; } auto setSelected(const vector& selections) { return self().setSelected(selections), *this; } }; #endif #if defined(Hiro_Label) struct Label : sLabel { DeclareSharedWidget(Label) auto alignment() const { return self().alignment(); } auto backgroundColor() const { return self().backgroundColor(); } auto foregroundColor() const { return self().foregroundColor(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setForegroundColor(SystemColor color) { return self().setForegroundColor(color), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_LineEdit) struct LineEdit : sLineEdit { DeclareSharedWidget(LineEdit) auto backgroundColor() const { return self().backgroundColor(); } auto doActivate() const { return self().doActivate(); } auto doChange() const { return self().doChange(); } auto editable() const { return self().editable(); } auto foregroundColor() const { return self().foregroundColor(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setEditable(bool editable = true) { return self().setEditable(editable), *this; } auto setForegroundColor(SystemColor color) { return self().setForegroundColor(color), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_ProgressBar) struct ProgressBar : sProgressBar { DeclareSharedWidget(ProgressBar) auto position() const { return self().position(); } auto setPosition(u32 position = 0) { return self().setPosition(position), *this; } }; #endif #if defined(Hiro_RadioButton) struct RadioButton : sRadioButton { DeclareSharedWidget(RadioButton) auto bordered() const { return self().bordered(); } auto checked() const { return self().checked(); } auto doActivate() const { return self().doActivate(); } auto group() const { return self().group(); } auto icon() const { return self().icon(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto orientation() const { return self().orientation(); } auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; } auto setChecked() { return self().setChecked(), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setOrientation(Orientation orientation = Orientation::Horizontal) { return self().setOrientation(orientation), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_RadioLabel) struct RadioLabel : sRadioLabel { DeclareSharedWidget(RadioLabel) auto checked() const { return self().checked(); } auto doActivate() const { return self().doActivate(); } auto group() const { return self().group(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto setChecked() { return self().setChecked(), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_SourceEdit) struct SourceEdit : sSourceEdit { DeclareSharedWidget(SourceEdit) auto doChange() const { return self().doChange(); } auto doMove() const { return self().doMove(); } auto editable() const { return self().editable(); } auto language() const { return self().language(); } auto numbered() const { return self().numbered(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onMove(const function& callback = {}) { return self().onMove(callback), *this; } auto scheme() const { return self().scheme(); } auto setEditable(bool editable = true) { return self().setEditable(editable), *this; } auto setLanguage(const string& language = "") { return self().setLanguage(language), *this; } auto setNumbered(bool numbered = true) { return self().setNumbered(numbered), *this; } auto setScheme(const string& scheme = "") { return self().setScheme(scheme), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto setTextCursor(TextCursor textCursor = {}) { return self().setTextCursor(textCursor), *this; } auto setWordWrap(bool wordWrap = true) { return self().setWordWrap(wordWrap), *this; } auto text() const { return self().text(); } auto textCursor() const { return self().textCursor(); } auto wordWrap() const { return self().wordWrap(); } }; #endif #if defined(Hiro_TabFrame) struct TabFrameItem : sTabFrameItem { DeclareSharedObject(TabFrameItem) auto append(sSizable sizable) { return self().append(sizable), *this; } auto closable() const { return self().closable(); } auto icon() const { return self().icon(); } auto movable() const { return self().movable(); } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto reset() { return self().reset(), *this; } auto selected() const { return self().selected(); } auto setClosable(bool closable = true) { return self().setClosable(closable), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setMovable(bool movable = true) { return self().setMovable(movable), *this; } auto setSelected() { return self().setSelected(), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto sizable() const { return self().sizable(); } auto text() const { return self().text(); } }; #endif #if defined(Hiro_TabFrame) struct TabFrame : sTabFrame { DeclareSharedWidget(TabFrame) auto append(sTabFrameItem item) { return self().append(item), *this; } auto doChange() const { return self().doChange(); } auto doClose(sTabFrameItem item) const { return self().doClose(item); } auto doMove(sTabFrameItem from, sTabFrameItem to) const { return self().doMove(from, to); } auto item(u32 position) const { return self().item(position); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto navigation() const { return self().navigation(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onClose(const function& callback = {}) { return self().onClose(callback), *this; } auto onMove(const function& callback = {}) { return self().onMove(callback), *this; } auto remove(sTabFrameItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto selected() const { return self().selected(); } auto setNavigation(Navigation navigation = Navigation::Top) { return self().setNavigation(navigation), *this; } }; #endif #if defined(Hiro_TableView) struct TableViewColumn : sTableViewColumn { DeclareSharedObject(TableViewColumn) auto active() const { return self().active(); } auto alignment() const { return self().alignment(); } auto backgroundColor() const { return self().backgroundColor(); } auto editable() const { return self().editable(); } auto expandable() const { return self().expandable(); } auto foregroundColor() const { return self().foregroundColor(); } auto horizontalAlignment() const { return self().horizontalAlignment(); } auto icon() const { return self().icon(); } auto resizable() const { return self().resizable(); } auto setActive() { return self().setActive(), *this; } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setEditable(bool editable = true) { return self().setEditable(editable), *this; } auto setExpandable(bool expandable = true) { return self().setExpandable(expandable), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setHorizontalAlignment(f32 alignment = 0.0) { return self().setHorizontalAlignment(alignment), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setResizable(bool resizable = true) { return self().setResizable(resizable), *this; } auto setSorting(Sort sorting = Sort::None) { return self().setSorting(sorting), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto setVerticalAlignment(f32 alignment = 0.5) { return self().setVerticalAlignment(alignment), *this; } auto setWidth(f32 width = 0) { return self().setWidth(width), *this; } auto sort(Sort sorting) { return self().sort(sorting), *this; } auto sorting() const { return self().sorting(); } auto text() const { return self().text(); } auto verticalAlignment() const { return self().verticalAlignment(); } auto width() const { return self().width(); } }; #endif #if defined(Hiro_TableView) struct TableViewCell : sTableViewCell { DeclareSharedObject(TableViewCell) auto alignment() const { return self().alignment(); } auto backgroundColor() const { return self().backgroundColor(); } auto checkable() const { return self().checkable(); } auto checked() const { return self().checked(); } auto foregroundColor() const { return self().foregroundColor(); } auto icon() const { return self().icon(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setCheckable(bool checkable = true) const { return self().setCheckable(checkable), *this; } auto setChecked(bool checked = true) const { return self().setChecked(checked), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setForegroundColor(SystemColor color) { return self().setForegroundColor(color), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_TableView) struct TableViewItem : sTableViewItem { DeclareSharedObject(TableViewItem) auto alignment() const { return self().alignment(); } auto append(sTableViewCell cell) { return self().append(cell), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto cell(u32 position) const { return self().cell(position); } auto cellCount() const { return self().cellCount(); } auto cells() const { return self().cells(); } auto foregroundColor() const { return self().foregroundColor(); } auto remove(sTableViewCell cell) { return self().remove(cell), *this; } auto reset() { return self().reset(), *this; } auto selected() const { return self().selected(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setSelected(bool selected = true) { return self().setSelected(selected), *this; } }; #endif #if defined(Hiro_TableView) struct TableView : sTableView { DeclareSharedWidget(TableView) auto alignment() const { return self().alignment(); } auto append(sTableViewColumn column) { return self().append(column), *this; } auto append(sTableViewItem item) { return self().append(item), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto batchable() const { return self().batchable(); } auto batched() const { return self().batched(); } auto bordered() const { return self().bordered(); } auto column(u32 position) const { return self().column(position); } auto columnCount() const { return self().columnCount(); } auto columns() const { return self().columns(); } auto doActivate(sTableViewCell cell) const { return self().doActivate(cell); } auto doChange() const { return self().doChange(); } auto doContext(sTableViewCell cell) const { return self().doContext(cell); } auto doEdit(sTableViewCell cell) const { return self().doEdit(cell); } auto doSort(sTableViewColumn column) const { return self().doSort(column); } auto doToggle(sTableViewCell cell) const { return self().doToggle(cell); } auto foregroundColor() const { return self().foregroundColor(); } auto headered() const { return self().headered(); } auto item(u32 position) const { return self().item(position); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onContext(const function& callback = {}) { return self().onContext(callback), *this; } auto onEdit(const function& callback = {}) { return self().onEdit(callback), *this; } auto onSort(const function& callback = {}) { return self().onSort(callback), *this; } auto onToggle(const function& callback = {}) { return self().onToggle(callback), *this; } auto remove(sTableViewColumn column) { return self().remove(column), *this; } auto remove(sTableViewItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto resizeColumns() { return self().resizeColumns(), *this; } auto selectAll() { return self().selectAll(), *this; } auto selectNone() { return self().selectNone(), *this; } auto selected() const { return self().selected(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setBatchable(bool batchable = true) { return self().setBatchable(batchable), *this; } auto setBordered(bool bordered = true) { return self().setBordered(bordered), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setHeadered(bool headered = true) { return self().setHeadered(headered), *this; } auto setSortable(bool sortable = true) { return self().setSortable(sortable), *this; } auto setUsesSidebarStyle(bool usesSidebarStyle = true) { return self().setUsesSidebarStyle(usesSidebarStyle), *this; } auto sort() { return self().sort(), *this; } auto sortable() const { return self().sortable(); } }; #endif #if defined(Hiro_TextEdit) struct TextEdit : sTextEdit { DeclareSharedWidget(TextEdit) auto backgroundColor() const { return self().backgroundColor(); } auto doChange() const { return self().doChange(); } auto doMove() const { return self().doMove(); } auto editable() const { return self().editable(); } auto foregroundColor() const { return self().foregroundColor(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onMove(const function& callback = {}) { return self().onMove(callback), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setEditable(bool editable = true) { return self().setEditable(editable), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto setTextCursor(TextCursor textCursor = {}) { return self().setTextCursor(textCursor), *this; } auto setWordWrap(bool wordWrap = true) { return self().setWordWrap(wordWrap), *this; } auto text() const { return self().text(); } auto textCursor() const { return self().textCursor(); } auto wordWrap() const { return self().wordWrap(); } }; #endif #if defined(Hiro_TreeView) struct TreeViewItem : sTreeViewItem { DeclareSharedObject(TreeViewItem) auto append(sTreeViewItem item) { return self().append(item), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto checkable() const { return self().checkable(); } auto checked() const { return self().checked(); } auto collapse(bool recursive = true) { return self().collapse(recursive), *this; } auto expand(bool recursive = true) { return self().expand(recursive), *this; } auto expanded() const { return self().expanded(); } auto foregroundColor() const { return self().foregroundColor(); } auto icon() const { return self().icon(); } auto item(const string& path) const { return self().item(path); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto path() const { return self().path(); } auto remove(sTreeViewItem item) { return self().remove(item), *this; } auto selected() const { return self().selected(); } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setCheckable(bool checkable = true) { return self().setCheckable(checkable), *this; } auto setChecked(bool checked = true) { return self().setChecked(checked), *this; } auto setExpanded(bool expanded = true) { return self().setExpanded(expanded), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setSelected() { return self().setSelected(), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_TreeView) struct TreeView : sTreeView { DeclareSharedWidget(TreeView) auto activation() const { return self().activation(); } auto append(sTreeViewItem item) { return self().append(item), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto collapse(bool recursive = true) { return self().collapse(recursive), *this; } auto doActivate() const { return self().doActivate(); } auto doChange() const { return self().doChange(); } auto doContext() const { return self().doContext(); } auto doToggle(sTreeViewItem item) const { return self().doToggle(item); } auto expand(bool recursive = true) { return self().expand(recursive), *this; } auto foregroundColor() const { return self().foregroundColor(); } auto item(const string& path) const { return self().item(path); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onContext(const function& callback = {}) { return self().onContext(callback), *this; } auto onToggle(const function& callback = {}) { return self().onToggle(callback), *this; } auto remove(sTreeViewItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto selectNone() { return self().selectNone(), *this; } auto selected() const { return self().selected(); } auto setActivation(Mouse::Click activation = Mouse::Click::Double) { return self().setActivation(activation), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } }; #endif #if defined(Hiro_VerticalScrollBar) struct VerticalScrollBar : sVerticalScrollBar { DeclareSharedWidget(VerticalScrollBar) auto doChange() const { return self().doChange(); } auto length() const { return self().length(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto position() const { return self().position(); } auto setLength(u32 length = 101) { return self().setLength(length), *this; } auto setPosition(u32 position = 0) { return self().setPosition(position), *this; } }; #endif #if defined(Hiro_VerticalSlider) struct VerticalSlider : sVerticalSlider { DeclareSharedWidget(VerticalSlider) auto doChange() const { return self().doChange(); } auto length() const { return self().length(); } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto position() const { return self().position(); } auto setLength(u32 length = 101) { return self().setLength(length), *this; } auto setPosition(u32 position = 0) { return self().setPosition(position), *this; } }; #endif #if defined(Hiro_Viewport) struct Viewport : sViewport { DeclareSharedWidget(Viewport) auto handle() const { return self().handle(); } }; #endif #if defined(Hiro_StatusBar) struct StatusBar : sStatusBar { DeclareSharedObject(StatusBar) auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; #endif #if defined(Hiro_PopupMenu) struct PopupMenu : sPopupMenu { DeclareSharedObject(PopupMenu) auto action(u32 position) const { return self().action(position); } auto actionCount() const { return self().actionCount(); } auto actions() const { return self().actions(); } auto append(sAction action) { return self().append(action), *this; } auto remove(sAction action) { return self().remove(action), *this; } auto reset() { return self().reset(), *this; } }; #endif #if defined(Hiro_MenuBar) struct MenuBar : sMenuBar { DeclareSharedObject(MenuBar) auto append(sMenu menu) { return self().append(menu), *this; } auto menu(u32 position) const { return self().menu(position); } auto menuCount() const { return self().menuCount(); } auto menus() const { return self().menus(); } auto remove(sMenu menu) { return self().remove(menu), *this; } auto reset() { return self().reset(), *this; } }; #endif #if defined(Hiro_Window) struct Window : sWindow { DeclareSharedObject(Window) auto append(sMenuBar menuBar) { return self().append(menuBar), *this; } auto append(sSizable sizable) { return self().append(sizable), *this; } auto append(sStatusBar statusBar) { return self().append(statusBar), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto dismissable() const { return self().dismissable(); } auto doClose() const { return self().doClose(); } auto doDrop(vector names) const { return self().doDrop(names); } auto doKeyPress(s32 key) const { return self().doKeyPress(key); } auto doKeyRelease(s32 key) const { return self().doKeyRelease(key); } auto doMove() const { return self().doMove(); } auto doSize() const { return self().doSize(); } auto droppable() const { return self().droppable(); } auto frameGeometry() const { return self().frameGeometry(); } auto fullScreen() const { return self().fullScreen(); } auto geometry() const { return self().geometry(); } auto handle() const { return self().handle(); } auto maximized() const { return self().maximized(); } auto maximumSize() const { return self().maximumSize(); } auto menuBar() const { return self().menuBar(); } auto minimized() const { return self().minimized(); } auto minimumSize() const { return self().minimumSize(); } auto modal() const { return self().modal(); } auto monitor() const { return self().monitor(); } auto onClose(const function& callback = {}) { return self().onClose(callback), *this; } auto onDrop(const function)>& callback = {}) { return self().onDrop(callback), *this; } auto onKeyPress(const function& callback = {}) { return self().onKeyPress(callback), *this; } auto onKeyRelease(const function& callback = {}) { return self().onKeyRelease(callback), *this; } auto onMove(const function& callback = {}) { return self().onMove(callback), *this; } auto onSize(const function& callback = {}) { return self().onSize(callback), *this; } auto remove(sMenuBar menuBar) { return self().remove(menuBar), *this; } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto remove(sStatusBar statusBar) { return self().remove(statusBar), *this; } auto reset() { return self().reset(), *this; } auto resizable() const { return self().resizable(); } auto setAlignment(Alignment alignment = Alignment::Center) { return self().setAlignment(alignment), *this; } auto setAlignment(sWindow relativeTo, Alignment alignment = Alignment::Center) { return self().setAlignment(relativeTo, alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setDismissable(bool dismissable = true) { return self().setDismissable(dismissable), *this; } auto setDroppable(bool droppable = true) { return self().setDroppable(droppable), *this; } auto setFrameGeometry(Geometry geometry) { return self().setFrameGeometry(geometry), *this; } auto setFramePosition(Position position) { return self().setFramePosition(position), *this; } auto setFrameSize(Size size) { return self().setFrameSize(size), *this; } auto setFullScreen(bool fullScreen = true) { return self().setFullScreen(fullScreen), *this; } auto setGeometry(Geometry geometry) { return self().setGeometry(geometry), *this; } auto setGeometry(Alignment alignment, Size size) { return self().setGeometry(alignment, size), *this; } auto setMaximized(bool maximized) { return self().setMaximized(maximized), *this; } auto setMaximumSize(Size size = {}) { return self().setMaximumSize(size), *this; } auto setMinimized(bool minimized) { return self().setMinimized(minimized), *this; } auto setMinimumSize(Size size = {}) { return self().setMinimumSize(size), *this; } auto setModal(bool modal = true) { return self().setModal(modal), *this; } auto setPosition(Position position) { return self().setPosition(position), *this; } auto setPosition(sWindow relativeTo, Position position) { return self().setPosition(relativeTo, position), *this; } auto setResizable(bool resizable = true) { return self().setResizable(resizable), *this; } auto setSize(Size size) { return self().setSize(size), *this; } auto setTitle(const string& title = "") { return self().setTitle(title), *this; } auto setAssociatedFile(const string& filename = "") { return self().setAssociatedFile(filename), *this; } auto sizable() const { return self().sizable(); } auto statusBar() const { return self().statusBar(); } auto title() const { return self().title(); } }; #endif ares-126/hiro/core/sizable.cpp000066400000000000000000000014701415063341600163510ustar00rootroot00000000000000#if defined(Hiro_Sizable) auto mSizable::allocate() -> pObject* { return new pSizable(*this); } auto mSizable::collapsible() const -> bool { return state.collapsible; } auto mSizable::doSize() const -> void { if(state.onSize) return state.onSize(); } auto mSizable::geometry() const -> Geometry { return state.geometry; } auto mSizable::minimumSize() const -> Size { return signal(minimumSize); } auto mSizable::onSize(const function& callback) -> type& { state.onSize = callback; return *this; } auto mSizable::setCollapsible(bool collapsible) -> type& { state.collapsible = collapsible; signal(setCollapsible, collapsible); return *this; } auto mSizable::setGeometry(Geometry geometry) -> type& { state.geometry = geometry; signal(setGeometry, geometry); return *this; } #endif ares-126/hiro/core/sizable.hpp000066400000000000000000000010341415063341600163520ustar00rootroot00000000000000#if defined(Hiro_Sizable) struct mSizable : mObject { Declare(Sizable) auto collapsible() const -> bool; auto doSize() const -> void; auto geometry() const -> Geometry; virtual auto minimumSize() const -> Size; auto onSize(const function& callback = {}) -> type&; virtual auto setCollapsible(bool collapsible = true) -> type&; virtual auto setGeometry(Geometry geometry) -> type&; //private: struct State { bool collapsible = false; Geometry geometry; function onSize; } state; }; #endif ares-126/hiro/core/size.cpp000066400000000000000000000017251415063341600156750ustar00rootroot00000000000000#if defined(Hiro_Size) Size::Size() { setSize(0, 0); } Size::Size(f32 width, f32 height) { setSize(width, height); } Size::operator bool() const { return state.width || state.height; } auto Size::operator==(const Size& source) const -> bool { return width() == source.width() && height() == source.height(); } auto Size::operator!=(const Size& source) const -> bool { return !operator==(source); } auto Size::height() const -> f32 { return state.height; } auto Size::reset() -> type& { return setSize(0, 0); } auto Size::setHeight(f32 height) -> type& { state.height = height; return *this; } auto Size::setSize(Size size) -> type& { return setSize(size.width(), size.height()); } auto Size::setSize(f32 width, f32 height) -> type& { state.width = width; state.height = height; return *this; } auto Size::setWidth(f32 width) -> type& { state.width = width; return *this; } auto Size::width() const -> f32 { return state.width; } #endif ares-126/hiro/core/size.hpp000066400000000000000000000013551415063341600157010ustar00rootroot00000000000000#if defined(Hiro_Size) struct Size { using type = Size; Size(); Size(f32 width, f32 height); template Size(W width, H height) : Size((f32)width, (f32)height) {} explicit operator bool() const; auto operator==(const Size& source) const -> bool; auto operator!=(const Size& source) const -> bool; auto height() const -> f32; auto reset() -> type&; auto setHeight(f32 height) -> type&; auto setSize(Size source = {}) -> type&; auto setSize(f32 width, f32 height) -> type&; auto setWidth(f32 width) -> type&; auto width() const -> f32; static constexpr f32 Maximum = -1.0; static constexpr f32 Minimum = +0.0; //private: struct State { f32 width; f32 height; } state; }; #endif ares-126/hiro/core/status-bar.cpp000066400000000000000000000006601415063341600170050ustar00rootroot00000000000000#if defined(Hiro_StatusBar) auto mStatusBar::allocate() -> pObject* { return new pStatusBar(*this); } // auto mStatusBar::remove() -> type& { if(auto window = parentWindow()) window->remove(window->statusBar()); return *this; } auto mStatusBar::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mStatusBar::text() const -> string { return state.text; } #endif ares-126/hiro/core/status-bar.hpp000066400000000000000000000004071415063341600170110ustar00rootroot00000000000000#if defined(Hiro_StatusBar) struct mStatusBar : mObject { Declare(StatusBar) auto remove() -> type& override; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { string text; } state; }; #endif ares-126/hiro/core/system-color.hpp000066400000000000000000000004321415063341600173620ustar00rootroot00000000000000#if defined(Hiro_Color) enum class SystemColor : u32 { None, // Not a system color Text, // Text inside textfields Label, // Labels inside dialogs Sublabel, // Sublabels inside dialogs Link, // Clickable links PlaceholderText, // Greyed out placeholder text }; #endif ares-126/hiro/core/text-cursor.cpp000066400000000000000000000015761415063341600172260ustar00rootroot00000000000000#if defined(Hiro_TextCursor) TextCursor::TextCursor(s32 offset, s32 length) { setTextCursor(offset, length); } TextCursor::operator bool() const { return offset() || length(); } auto TextCursor::operator==(const TextCursor& source) const -> bool { return offset() == source.offset() && length() == source.length(); } auto TextCursor::operator!=(const TextCursor& source) const -> bool { return !operator==(source); } auto TextCursor::length() const -> s32 { return state.length; } auto TextCursor::offset() const -> s32 { return state.offset; } auto TextCursor::setLength(s32 length) -> type& { state.length = length; return *this; } auto TextCursor::setOffset(s32 offset) -> type& { state.offset = offset; return *this; } auto TextCursor::setTextCursor(s32 offset, s32 length) -> type& { state.offset = offset; state.length = length; return *this; } #endif ares-126/hiro/core/text-cursor.hpp000066400000000000000000000010701415063341600172200ustar00rootroot00000000000000#if defined(Hiro_TextCursor) struct TextCursor { using type = TextCursor; TextCursor(s32 offset = 0, s32 length = 0); explicit operator bool() const; auto operator==(const TextCursor& source) const -> bool; auto operator!=(const TextCursor& source) const -> bool; auto length() const -> s32; auto offset() const -> s32; auto setLength(s32 length = 0) -> type&; auto setOffset(s32 offset = 0) -> type&; auto setTextCursor(s32 offset = 0, s32 length = 0) -> type&; //private: struct State { s32 offset; s32 length; } state; }; #endif ares-126/hiro/core/timer.cpp000066400000000000000000000010761415063341600160420ustar00rootroot00000000000000#if defined(Hiro_Timer) mTimer::mTimer() { mObject::state.enabled = false; } auto mTimer::allocate() -> pObject* { return new pTimer(*this); } // auto mTimer::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mTimer::interval() const -> u32 { return state.interval; } auto mTimer::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mTimer::setInterval(u32 interval) -> type& { state.interval = interval; signal(setInterval, interval); return *this; } #endif ares-126/hiro/core/timer.hpp000066400000000000000000000005611415063341600160450ustar00rootroot00000000000000#if defined(Hiro_Timer) struct mTimer : mObject { Declare(Timer) mTimer(); auto doActivate() const -> void; auto interval() const -> u32; auto onActivate(const function& callback = {}) -> type&; auto setInterval(u32 interval = 0) -> type&; //private: struct State { u32 interval = 0; function onActivate; } state; }; #endif ares-126/hiro/core/widget/000077500000000000000000000000001415063341600154755ustar00rootroot00000000000000ares-126/hiro/core/widget/button.cpp000066400000000000000000000021751415063341600175210ustar00rootroot00000000000000#if defined(Hiro_Button) auto mButton::allocate() -> pObject* { return new pButton(*this); } // auto mButton::bordered() const -> bool { return state.bordered; } auto mButton::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mButton::icon() const -> multiFactorImage { return state.icon; } auto mButton::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mButton::orientation() const -> Orientation { return state.orientation; } auto mButton::setBordered(bool bordered) -> type& { state.bordered = bordered; signal(setBordered, bordered); return *this; } auto mButton::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mButton::setOrientation(Orientation orientation) -> type& { state.orientation = orientation; signal(setOrientation, orientation); return *this; } auto mButton::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mButton::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/button.hpp000066400000000000000000000014071415063341600175230ustar00rootroot00000000000000#if defined(Hiro_Button) struct mButton : mWidget { Declare(Button) auto bordered() const -> bool; auto doActivate() const -> void; auto icon() const -> multiFactorImage; auto onActivate(const function& callback = {}) -> type&; auto orientation() const -> Orientation; auto setBordered(bool bordered = true) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool bordered = true; multiFactorImage icon; function onActivate; Orientation orientation = Orientation::Horizontal; string text; } state; }; #endif ares-126/hiro/core/widget/canvas.cpp000066400000000000000000000026221415063341600174560ustar00rootroot00000000000000#if defined(Hiro_Canvas) auto mCanvas::allocate() -> pObject* { return new pCanvas(*this); } // auto mCanvas::alignment() const -> Alignment { return state.alignment; } auto mCanvas::color() const -> Color { return state.color; } auto mCanvas::data() -> u32* { return (u32*)state.icon.data(); } auto mCanvas::gradient() const -> Gradient { return state.gradient; } auto mCanvas::icon() const -> multiFactorImage { return state.icon; } auto mCanvas::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; signal(setAlignment, alignment); return *this; } auto mCanvas::setColor(Color color) -> type& { state.color = color; state.gradient = {}; state.icon = {}; signal(setColor, color); return *this; } auto mCanvas::setGradient(Gradient gradient) -> type& { state.color = {}; state.gradient = gradient; state.icon = {}; signal(setGradient, gradient); return *this; } auto mCanvas::setIcon(const multiFactorImage& icon) -> type& { state.color = {}; state.gradient = {}; state.icon = icon; signal(setIcon, icon); return *this; } auto mCanvas::setSize(Size size) -> type& { multiFactorImage icon; icon.allocate(size.width(), size.height()); return setIcon(icon); } auto mCanvas::size() const -> Size { return {(s32)state.icon.width(), (s32)state.icon.height()}; } auto mCanvas::update() -> type& { signal(update); return *this; } #endif ares-126/hiro/core/widget/canvas.hpp000066400000000000000000000012651415063341600174650ustar00rootroot00000000000000#if defined(Hiro_Canvas) struct mCanvas : mWidget { Declare(Canvas) auto alignment() const -> Alignment; auto color() const -> Color; auto data() -> u32*; auto gradient() const -> Gradient; auto icon() const -> multiFactorImage; auto setAlignment(Alignment alignment = {}) -> type&; auto setColor(Color color = {}) -> type&; auto setGradient(Gradient gradient = {}) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setSize(Size size = {}) -> type&; auto size() const -> Size; auto update() -> type&; //private: struct State { Alignment alignment; Color color; Gradient gradient; multiFactorImage icon; } state; }; #endif ares-126/hiro/core/widget/check-button.cpp000066400000000000000000000026001415063341600205650ustar00rootroot00000000000000#if defined(Hiro_CheckButton) auto mCheckButton::allocate() -> pObject* { return new pCheckButton(*this); } // auto mCheckButton::bordered() const -> bool { return state.bordered; } auto mCheckButton::checked() const -> bool { return state.checked; } auto mCheckButton::doToggle() const -> void { if(state.onToggle) return state.onToggle(); } auto mCheckButton::icon() const -> multiFactorImage { return state.icon; } auto mCheckButton::onToggle(const function& callback) -> type& { state.onToggle = callback; return *this; } auto mCheckButton::orientation() const -> Orientation { return state.orientation; } auto mCheckButton::setBordered(bool bordered) -> type& { state.bordered = bordered; signal(setBordered, bordered); return *this; } auto mCheckButton::setChecked(bool checked) -> type& { state.checked = checked; signal(setChecked, checked); return *this; } auto mCheckButton::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mCheckButton::setOrientation(Orientation orientation) -> type& { state.orientation = orientation; signal(setOrientation, orientation); return *this; } auto mCheckButton::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mCheckButton::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/check-button.hpp000066400000000000000000000015731415063341600206020ustar00rootroot00000000000000#if defined(Hiro_CheckButton) struct mCheckButton : mWidget { Declare(CheckButton) auto bordered() const -> bool; auto checked() const -> bool; auto doToggle() const -> void; auto icon() const -> multiFactorImage; auto onToggle(const function& callback = {}) -> type&; auto orientation() const -> Orientation; auto setBordered(bool bordered = true) -> type&; auto setChecked(bool checked = true) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool bordered = true; bool checked = false; multiFactorImage icon; function onToggle; Orientation orientation = Orientation::Horizontal; string text; } state; }; #endif ares-126/hiro/core/widget/check-label.cpp000066400000000000000000000013261415063341600203350ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) auto mCheckLabel::allocate() -> pObject* { return new pCheckLabel(*this); } // auto mCheckLabel::checked() const -> bool { return state.checked; } auto mCheckLabel::doToggle() const -> void { if(state.onToggle) return state.onToggle(); } auto mCheckLabel::onToggle(const function& callback) -> type& { state.onToggle = callback; return *this; } auto mCheckLabel::setChecked(bool checked) -> type& { state.checked = checked; signal(setChecked, checked); return *this; } auto mCheckLabel::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mCheckLabel::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/check-label.hpp000066400000000000000000000007251415063341600203440ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) struct mCheckLabel : mWidget { Declare(CheckLabel) auto checked() const -> bool; auto doToggle() const -> void; auto onToggle(const function& callback = {}) -> type&; auto setChecked(bool checked = true) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool checked = false; function onToggle; string text; } state; }; #endif ares-126/hiro/core/widget/combo-button-item.cpp000066400000000000000000000017431415063341600215520ustar00rootroot00000000000000#if defined(Hiro_ComboButton) auto mComboButtonItem::allocate() -> pObject* { return new pComboButtonItem(*this); } // auto mComboButtonItem::icon() const -> multiFactorImage { return state.icon; } auto mComboButtonItem::remove() -> type& { if(auto comboButton = parentComboButton()) comboButton->remove(*this); return *this; } auto mComboButtonItem::selected() const -> bool { return state.selected; } auto mComboButtonItem::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mComboButtonItem::setSelected() -> type& { if(auto parent = parentComboButton()) { for(auto& item : parent->state.items) item->state.selected = false; } state.selected = true; signal(setSelected); return *this; } auto mComboButtonItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mComboButtonItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/combo-button-item.hpp000066400000000000000000000007601415063341600215550ustar00rootroot00000000000000#if defined(Hiro_ComboButton) struct mComboButtonItem : mObject { Declare(ComboButtonItem) auto icon() const -> multiFactorImage; auto remove() -> type& override; auto selected() const -> bool; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setSelected() -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { multiFactorImage icon; bool selected = false; string text; } state; }; #endif ares-126/hiro/core/widget/combo-button.cpp000066400000000000000000000034441415063341600206160ustar00rootroot00000000000000#if defined(Hiro_ComboButton) auto mComboButton::allocate() -> pObject* { return new pComboButton(*this); } auto mComboButton::destruct() -> void { for(auto& item : state.items) item->destruct(); mWidget::destruct(); } // auto mComboButton::append(sComboButtonItem item) -> type& { if(!state.items) item->state.selected = true; state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mComboButton::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mComboButton::item(u32 position) const -> ComboButtonItem { if(position < itemCount()) return state.items[position]; return {}; } auto mComboButton::itemCount() const -> u32 { return state.items.size(); } auto mComboButton::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mComboButton::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mComboButton::remove(sComboButtonItem item) -> type& { signal(remove, item); state.items.remove(item->offset()); for(u32 n : range(item->offset(), itemCount())) { state.items[n]->adjustOffset(-1); } item->setParent(); return *this; } auto mComboButton::reset() -> type& { while(state.items) remove(state.items.last()); return *this; } auto mComboButton::selected() const -> ComboButtonItem { for(auto& item : state.items) { if(item->selected()) return item; } return {}; } auto mComboButton::setParent(mObject* parent, s32 offset) -> type& { for(auto& item : reverse(state.items)) item->destruct(); mObject::setParent(parent, offset); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } #endif ares-126/hiro/core/widget/combo-button.hpp000066400000000000000000000013571415063341600206240ustar00rootroot00000000000000#if defined(Hiro_ComboButton) struct mComboButton : mWidget { Declare(ComboButton) using mObject::remove; auto append(sComboButtonItem item) -> type&; auto doChange() const -> void; auto item(u32 position) const -> ComboButtonItem; auto itemCount() const -> u32; auto items() const -> vector; auto onChange(const function& callback = {}) -> type&; auto remove(sComboButtonItem item) -> type&; auto reset() -> type& override; auto selected() const -> ComboButtonItem; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; //private: struct State { vector items; function onChange; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/combo-edit-item.cpp000066400000000000000000000012261415063341600211600ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) auto mComboEditItem::allocate() -> pObject* { return new pComboEditItem(*this); } // auto mComboEditItem::icon() const -> multiFactorImage { return state.icon; } auto mComboEditItem::remove() -> type& { if(auto comboEdit = parentComboEdit()) comboEdit->remove(*this); return *this; } auto mComboEditItem::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mComboEditItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mComboEditItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/combo-edit-item.hpp000066400000000000000000000006171415063341600211700ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) struct mComboEditItem : mObject { Declare(ComboEditItem) auto icon() const -> multiFactorImage; auto remove() -> type& override; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { multiFactorImage icon; string text; } state; }; #endif ares-126/hiro/core/widget/combo-edit.cpp000066400000000000000000000052371415063341600202320ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) auto mComboEdit::allocate() -> pObject* { return new pComboEdit(*this); } auto mComboEdit::destruct() -> void { for(auto& item : state.items) item->destruct(); mWidget::destruct(); } // auto mComboEdit::append(sComboEditItem item) -> type& { state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mComboEdit::backgroundColor() const -> Color { return state.backgroundColor; } auto mComboEdit::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mComboEdit::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mComboEdit::editable() const -> bool { return state.editable; } auto mComboEdit::foregroundColor() const -> Color { return state.foregroundColor; } auto mComboEdit::item(u32 position) const -> ComboEditItem { if(position < itemCount()) return state.items[position]; return {}; } auto mComboEdit::itemCount() const -> u32 { return state.items.size(); } auto mComboEdit::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mComboEdit::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mComboEdit::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mComboEdit::remove(sComboEditItem item) -> type& { signal(remove, item); state.items.remove(item->offset()); for(auto n : range(item->offset(), itemCount())) { state.items[n]->adjustOffset(-1); } item->setParent(); return *this; } auto mComboEdit::reset() -> type& { signal(reset); for(auto& item : state.items) item->setParent(); state.items.reset(); return *this; } auto mComboEdit::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mComboEdit::setEditable(bool editable) -> type& { state.editable = editable; signal(setEditable, editable); return *this; } auto mComboEdit::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mComboEdit::setParent(mObject* parent, s32 offset) -> type& { for(auto& item : state.items) item->destruct(); mObject::setParent(parent, offset); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } auto mComboEdit::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mComboEdit::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/combo-edit.hpp000066400000000000000000000024001415063341600202240ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) struct mComboEdit : mWidget { Declare(ComboEdit) using mObject::remove; auto append(sComboEditItem item) -> type&; auto backgroundColor() const -> Color; auto doActivate() const -> void; auto doChange() const -> void; auto editable() const -> bool; auto foregroundColor() const -> Color; auto item(u32 position) const -> ComboEditItem; auto itemCount() const -> u32; auto items() const -> vector; auto onActivate(const function& callback = {}) -> type&; auto onChange(const function& callback = {}) -> type&; auto remove(sComboEditItem item) -> type&; auto reset() -> type& override; auto setBackgroundColor(Color color = {}) -> type&; auto setEditable(bool editable = true) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { Color backgroundColor; bool editable = true; Color foregroundColor; vector items; function onActivate; function onChange; string text; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/console.cpp000066400000000000000000000022401415063341600176410ustar00rootroot00000000000000#if defined(Hiro_Console) auto mConsole::allocate() -> pObject* { return new pConsole(*this); } // auto mConsole::backgroundColor() const -> Color { return state.backgroundColor; } auto mConsole::doActivate(string command) const -> void { if(state.onActivate) return state.onActivate(command); } auto mConsole::foregroundColor() const -> Color { return state.foregroundColor; } auto mConsole::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mConsole::print(const string& text) -> type& { signal(print, text); return *this; } auto mConsole::prompt() const -> string { return state.prompt; } auto mConsole::reset() -> type& { signal(reset); return *this; } auto mConsole::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mConsole::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mConsole::setPrompt(const string& prompt) -> type& { state.prompt = prompt; signal(setPrompt, prompt); return *this; } #endif ares-126/hiro/core/widget/console.hpp000066400000000000000000000013021415063341600176440ustar00rootroot00000000000000#if defined(Hiro_Console) struct mConsole : mWidget { Declare(Console) auto backgroundColor() const -> Color; auto doActivate(string) const -> void; auto foregroundColor() const -> Color; auto onActivate(const function& callback = {}) -> type&; auto print(const string& text) -> type&; auto prompt() const -> string; auto reset() -> type& override; auto setBackgroundColor(Color color = {}) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setPrompt(const string& prompt = "") -> type&; //private: struct State { Color backgroundColor; Color foregroundColor; function onActivate; string prompt; } state; }; #endif ares-126/hiro/core/widget/frame.cpp000066400000000000000000000022161415063341600172740ustar00rootroot00000000000000#if defined(Hiro_Frame) auto mFrame::allocate() -> pObject* { return new pFrame(*this); } auto mFrame::destruct() -> void { if(auto& sizable = state.sizable) sizable->destruct(); mWidget::destruct(); } // auto mFrame::append(sSizable sizable) -> type& { if(auto& sizable = state.sizable) remove(sizable); state.sizable = sizable; sizable->setParent(this, 0); signal(append, sizable); return *this; } auto mFrame::remove(sSizable sizable) -> type& { signal(remove, sizable); sizable->setParent(); state.sizable.reset(); return *this; } auto mFrame::reset() -> type& { if(auto& sizable = state.sizable) remove(sizable); return *this; } auto mFrame::setParent(mObject* object, s32 offset) -> type& { if(auto& sizable = state.sizable) sizable->destruct(); mObject::setParent(object, offset); if(auto& sizable = state.sizable) sizable->setParent(this, 0); return *this; } auto mFrame::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mFrame::sizable() const -> Sizable { return state.sizable; } auto mFrame::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/frame.hpp000066400000000000000000000010251415063341600172760ustar00rootroot00000000000000#if defined(Hiro_Frame) struct mFrame : mWidget { Declare(Frame) using mObject::remove; auto append(sSizable sizable) -> type&; auto remove(sSizable sizable) -> type&; auto reset() -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setText(const string& text = "") -> type&; auto sizable() const -> Sizable; auto text() const -> string; //private: struct State { sSizable sizable; string text; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/hex-edit.cpp000066400000000000000000000035061415063341600177140ustar00rootroot00000000000000#if defined(Hiro_HexEdit) auto mHexEdit::allocate() -> pObject* { return new pHexEdit(*this); } // auto mHexEdit::address() const -> u32 { return state.address; } auto mHexEdit::backgroundColor() const -> Color { return state.backgroundColor; } auto mHexEdit::columns() const -> u32 { return state.columns; } auto mHexEdit::doRead(u32 offset) const -> u8 { if(state.onRead) return state.onRead(offset); return 0x00; } auto mHexEdit::doWrite(u32 offset, u8 data) const -> void { if(state.onWrite) return state.onWrite(offset, data); } auto mHexEdit::foregroundColor() const -> Color { return state.foregroundColor; } auto mHexEdit::length() const -> u32 { return state.length; } auto mHexEdit::onRead(const function& callback) -> type& { state.onRead = callback; return *this; } auto mHexEdit::onWrite(const function& callback) -> type& { state.onWrite = callback; return *this; } auto mHexEdit::rows() const -> u32 { return state.rows; } auto mHexEdit::setAddress(u32 address) -> type& { state.address = address; signal(setAddress, address); return *this; } auto mHexEdit::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mHexEdit::setColumns(u32 columns) -> type& { state.columns = columns; signal(setColumns, columns); return *this; } auto mHexEdit::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mHexEdit::setLength(u32 length) -> type& { state.length = length; signal(setLength, length); return *this; } auto mHexEdit::setRows(u32 rows) -> type& { state.rows = rows; signal(setRows, rows); return *this; } auto mHexEdit::update() -> type& { signal(update); return *this; } #endif ares-126/hiro/core/widget/hex-edit.hpp000066400000000000000000000020461415063341600177170ustar00rootroot00000000000000#if defined(Hiro_HexEdit) struct mHexEdit : mWidget { Declare(HexEdit) auto address() const -> u32; auto backgroundColor() const -> Color; auto columns() const -> u32; auto doRead(u32 offset) const -> u8; auto doWrite(u32 offset, u8 data) const -> void; auto foregroundColor() const -> Color; auto length() const -> u32; auto onRead(const function& callback = {}) -> type&; auto onWrite(const function& callback = {}) -> type&; auto rows() const -> u32; auto setAddress(u32 address = 0) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setColumns(u32 columns = 16) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setLength(u32 length) -> type&; auto setRows(u32 rows = 16) -> type&; auto update() -> type&; //private: struct State { u32 address = 0; Color backgroundColor; u32 columns = 16; Color foregroundColor; u32 length = 0; function onRead; function onWrite; u32 rows = 16; } state; }; #endif ares-126/hiro/core/widget/horizontal-scroll-bar.cpp000066400000000000000000000014601415063341600224310ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) auto mHorizontalScrollBar::allocate() -> pObject* { return new pHorizontalScrollBar(*this); } // auto mHorizontalScrollBar::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mHorizontalScrollBar::length() const -> u32 { return state.length; } auto mHorizontalScrollBar::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mHorizontalScrollBar::position() const -> u32 { return state.position; } auto mHorizontalScrollBar::setLength(u32 length) -> type& { state.length = length; signal(setLength, length); return *this; } auto mHorizontalScrollBar::setPosition(u32 position) -> type& { state.position = position; signal(setPosition, position); return *this; } #endif ares-126/hiro/core/widget/horizontal-scroll-bar.hpp000066400000000000000000000007511415063341600224400ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) struct mHorizontalScrollBar : mWidget { Declare(HorizontalScrollBar) auto doChange() const -> void; auto length() const -> u32; auto onChange(const function& callback = {}) -> type&; auto position() const -> u32; auto setLength(u32 length = 101) -> type&; auto setPosition(u32 position = 0) -> type&; //private: struct State { u32 length = 101; function onChange; u32 position = 0; } state; }; #endif ares-126/hiro/core/widget/horizontal-slider.cpp000066400000000000000000000014251415063341600216540ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) auto mHorizontalSlider::allocate() -> pObject* { return new pHorizontalSlider(*this); } // auto mHorizontalSlider::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mHorizontalSlider::length() const -> u32 { return state.length; } auto mHorizontalSlider::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mHorizontalSlider::position() const -> u32 { return state.position; } auto mHorizontalSlider::setLength(u32 length) -> type& { state.length = length; signal(setLength, length); return *this; } auto mHorizontalSlider::setPosition(u32 position) -> type& { state.position = position; signal(setPosition, position); return *this; } #endif ares-126/hiro/core/widget/horizontal-slider.hpp000066400000000000000000000007401415063341600216600ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) struct mHorizontalSlider : mWidget { Declare(HorizontalSlider) auto doChange() const -> void; auto length() const -> u32; auto onChange(const function& callback = {}) -> type&; auto position() const -> u32; auto setLength(u32 length = 101) -> type&; auto setPosition(u32 position = 0) -> type&; //private: struct State { u32 length = 101; function onChange; u32 position = 0; } state; }; #endif ares-126/hiro/core/widget/icon-view-item.cpp000066400000000000000000000015411415063341600210360ustar00rootroot00000000000000#if defined(Hiro_IconView) auto mIconViewItem::allocate() -> pObject* { return new pIconViewItem(*this); } // auto mIconViewItem::icon() const -> multiFactorImage { return state.icon; } auto mIconViewItem::remove() -> type& { if(auto iconView = parentIconView()) iconView->remove(*this); return *this; } auto mIconViewItem::selected() const -> bool { return state.selected; } auto mIconViewItem::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mIconViewItem::setSelected(bool selected) -> type& { state.selected = selected; signal(setSelected, selected); return *this; } auto mIconViewItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mIconViewItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/icon-view-item.hpp000066400000000000000000000007731415063341600210510ustar00rootroot00000000000000#if defined(Hiro_IconView) struct mIconViewItem : mObject { Declare(IconViewItem) auto icon() const -> multiFactorImage; auto remove() -> type& override; auto selected() const -> bool; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setSelected(bool selected = true) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { multiFactorImage icon; bool selected = false; string text; } state; }; #endif ares-126/hiro/core/widget/icon-view.cpp000066400000000000000000000076311415063341600201100ustar00rootroot00000000000000#if defined(Hiro_IconView) auto mIconView::allocate() -> pObject* { return new pIconView(*this); } auto mIconView::destruct() -> void { for(auto& item : state.items) item->destruct(); mWidget::destruct(); } // auto mIconView::append(sIconViewItem item) -> type& { state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mIconView::backgroundColor() const -> Color { return state.backgroundColor; } auto mIconView::batchable() const -> bool { return state.batchable; } auto mIconView::batched() const -> vector { vector items; for(auto& item : state.items) { if(item->selected()) items.append(item); } return items; } auto mIconView::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mIconView::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mIconView::doContext() const -> void { if(state.onContext) return state.onContext(); } auto mIconView::flow() const -> Orientation { return state.flow; } auto mIconView::foregroundColor() const -> Color { return state.foregroundColor; } auto mIconView::item(u32 position) const -> IconViewItem { if(position < itemCount()) return state.items[position]; return {}; } auto mIconView::itemCount() const -> u32 { return state.items.size(); } auto mIconView::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mIconView::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mIconView::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mIconView::onContext(const function& callback) -> type& { state.onContext = callback; return *this; } auto mIconView::orientation() const -> Orientation { return state.orientation; } auto mIconView::remove(sIconViewItem item) -> type& { signal(remove, item); state.items.remove(item->offset()); for(auto n : range(item->offset(), itemCount())) { state.items[n]->adjustOffset(-1); } item->setParent(); return *this; } auto mIconView::reset() -> type& { signal(reset); for(auto& item : state.items) item->setParent(); state.items.reset(); return *this; } auto mIconView::selected() const -> IconViewItem { for(auto& item : state.items) { if(item->selected()) return item; } return {}; } auto mIconView::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mIconView::setBatchable(bool batchable) -> type& { state.batchable = batchable; signal(setBatchable, batchable); return *this; } auto mIconView::setFlow(Orientation flow) -> type& { state.flow = flow; signal(setFlow, flow); return *this; } auto mIconView::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mIconView::setOrientation(Orientation orientation) -> type& { state.orientation = orientation; signal(setOrientation, orientation); return *this; } auto mIconView::setParent(mObject* parent, s32 offset) -> type& { for(auto& item : reverse(state.items)) item->destruct(); mObject::setParent(parent, offset); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } auto mIconView::setSelected(const vector& selections) -> type& { bool selectAll = selections(0, 0) == ~0; for(auto& item : state.items) item->state.selected = selectAll; if(selectAll) return signal(setItemSelectedAll), *this; if(!selections) return signal(setItemSelectedNone), *this; for(auto& position : selections) { if(position >= itemCount()) continue; state.items[position]->state.selected = true; } signal(setItemSelected, selections); return *this; } #endif ares-126/hiro/core/widget/icon-view.hpp000066400000000000000000000034001415063341600201030ustar00rootroot00000000000000#if defined(Hiro_IconView) struct mIconView : mWidget { Declare(IconView) using mObject::remove; auto append(sIconViewItem item) -> type&; auto backgroundColor() const -> Color; auto batchable() const -> bool; auto batched() const -> vector; auto doActivate() const -> void; auto doChange() const -> void; auto doContext() const -> void; auto flow() const -> Orientation; auto foregroundColor() const -> Color; auto item(u32 position) const -> IconViewItem; auto itemCount() const -> u32; auto items() const -> vector; auto onActivate(const function& callback = {}) -> type&; auto onChange(const function& callback = {}) -> type&; auto onContext(const function& callback = {}) -> type&; auto orientation() const -> Orientation; auto remove(sIconViewItem item) -> type&; auto reset() -> type& override; auto selected() const -> IconViewItem; auto setBackgroundColor(Color color = {}) -> type&; auto setBatchable(bool batchable = true) -> type&; auto setFlow(Orientation flow = Orientation::Vertical) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&; auto setParent(mObject* object = nullptr, s32 offset = -1) -> type& override; auto setSelected(const vector& selections) -> type&; //private: struct State { Color backgroundColor; bool batchable = false; Color foregroundColor; Orientation flow = Orientation::Vertical; vector items; function onActivate; function onChange; function onContext; Orientation orientation = Orientation::Horizontal; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/label.cpp000066400000000000000000000021331415063341600172570ustar00rootroot00000000000000#if defined(Hiro_Label) auto mLabel::allocate() -> pObject* { return new pLabel(*this); } // auto mLabel::alignment() const -> Alignment { return state.alignment; } auto mLabel::backgroundColor() const -> Color { return state.backgroundColor; } auto mLabel::foregroundColor() const -> Color { return state.foregroundColor; } auto mLabel::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; signal(setAlignment, alignment); return *this; } auto mLabel::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mLabel::setForegroundColor(SystemColor color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mLabel::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mLabel::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mLabel::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/label.hpp000066400000000000000000000011731415063341600172670ustar00rootroot00000000000000#if defined(Hiro_Label) struct mLabel : mWidget { Declare(Label) auto alignment() const -> Alignment; auto backgroundColor() const -> Color; auto foregroundColor() const -> Color; auto setAlignment(Alignment alignment = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setForegroundColor(SystemColor color) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { Alignment alignment; Color backgroundColor; Color foregroundColor; string text; } state; }; #endif ares-126/hiro/core/widget/line-edit.cpp000066400000000000000000000030351415063341600200540ustar00rootroot00000000000000#if defined(Hiro_LineEdit) auto mLineEdit::allocate() -> pObject* { return new pLineEdit(*this); } // auto mLineEdit::backgroundColor() const -> Color { return state.backgroundColor; } auto mLineEdit::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mLineEdit::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mLineEdit::editable() const -> bool { return state.editable; } auto mLineEdit::foregroundColor() const -> Color { return state.foregroundColor; } auto mLineEdit::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mLineEdit::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mLineEdit::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mLineEdit::setEditable(bool editable) -> type& { state.editable = editable; signal(setEditable, editable); return *this; } auto mLineEdit::setForegroundColor(SystemColor color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mLineEdit::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mLineEdit::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mLineEdit::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/line-edit.hpp000066400000000000000000000016061415063341600200630ustar00rootroot00000000000000#if defined(Hiro_LineEdit) struct mLineEdit : mWidget { Declare(LineEdit) auto backgroundColor() const -> Color; auto doActivate() const -> void; auto doChange() const -> void; auto editable() const -> bool; auto foregroundColor() const -> Color; auto onActivate(const function& callback = {}) -> type&; auto onChange(const function& callback = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setEditable(bool editable = true) -> type&; auto setForegroundColor(SystemColor color) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { Color backgroundColor; bool editable = true; Color foregroundColor; function onActivate; function onChange; string text; } state; }; #endif ares-126/hiro/core/widget/progress-bar.cpp000066400000000000000000000005151415063341600206100ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) auto mProgressBar::allocate() -> pObject* { return new pProgressBar(*this); } // auto mProgressBar::position() const -> u32 { return state.position; } auto mProgressBar::setPosition(u32 position) -> type& { state.position = position; signal(setPosition, position); return *this; } #endif ares-126/hiro/core/widget/progress-bar.hpp000066400000000000000000000003511415063341600206130ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) struct mProgressBar : mWidget { Declare(ProgressBar) auto position() const -> u32; auto setPosition(u32 position) -> type&; //private: struct State { u32 position = 0; } state; }; #endif ares-126/hiro/core/widget/radio-button.cpp000066400000000000000000000035331415063341600206140ustar00rootroot00000000000000#if defined(Hiro_RadioButton) auto mRadioButton::allocate() -> pObject* { return new pRadioButton(*this); } // auto mRadioButton::bordered() const -> bool { return state.bordered; } auto mRadioButton::checked() const -> bool { return state.checked; } auto mRadioButton::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mRadioButton::group() const -> Group { return state.group; } auto mRadioButton::icon() const -> multiFactorImage { return state.icon; } auto mRadioButton::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mRadioButton::orientation() const -> Orientation { return state.orientation; } auto mRadioButton::setBordered(bool bordered) -> type& { state.bordered = bordered; signal(setBordered, bordered); return *this; } auto mRadioButton::setChecked() -> type& { if(auto group = this->group()) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { radioButton->state.checked = false; } } } } state.checked = true; signal(setChecked); return *this; } auto mRadioButton::setGroup(sGroup group) -> type& { state.group = group ? group : Group{&instance}; signal(setGroup, group); return *this; } auto mRadioButton::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mRadioButton::setOrientation(Orientation orientation) -> type& { state.orientation = orientation; signal(setOrientation, orientation); return *this; } auto mRadioButton::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mRadioButton::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/radio-button.hpp000066400000000000000000000017361415063341600206240ustar00rootroot00000000000000#if defined(Hiro_RadioButton) struct mRadioButton : mWidget { Declare(RadioButton) auto bordered() const -> bool; auto checked() const -> bool; auto doActivate() const -> void; auto group() const -> Group override; auto icon() const -> multiFactorImage; auto onActivate(const function& callback = {}) -> type&; auto orientation() const -> Orientation; auto setBordered(bool bordered = true) -> type&; auto setChecked() -> type&; auto setGroup(sGroup group = {}) -> type& override; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setOrientation(Orientation orientation = Orientation::Horizontal) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool bordered = true; bool checked = false; sGroup group; multiFactorImage icon; function onActivate; Orientation orientation = Orientation::Horizontal; string text; } state; }; #endif ares-126/hiro/core/widget/radio-label.cpp000066400000000000000000000022541415063341600203570ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) auto mRadioLabel::allocate() -> pObject* { return new pRadioLabel(*this); } // auto mRadioLabel::checked() const -> bool { return state.checked; } auto mRadioLabel::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mRadioLabel::group() const -> Group { return state.group; } auto mRadioLabel::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mRadioLabel::setChecked() -> type& { if(auto group = this->group()) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioLabel = dynamic_cast(object.data())) { radioLabel->state.checked = false; } } } } state.checked = true; signal(setChecked); return *this; } auto mRadioLabel::setGroup(sGroup group) -> type& { state.group = group ? group : Group{&instance}; signal(setGroup, group); return *this; } auto mRadioLabel::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mRadioLabel::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/radio-label.hpp000066400000000000000000000010701415063341600203570ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) struct mRadioLabel : mWidget { Declare(RadioLabel) auto checked() const -> bool; auto doActivate() const -> void; auto group() const -> Group override; auto onActivate(const function& callback = {}) -> type&; auto setChecked() -> type&; auto setGroup(sGroup group = {}) -> type& override; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { bool checked = false; sGroup group; function onActivate; string text; } state; }; #endif ares-126/hiro/core/widget/source-edit.cpp000066400000000000000000000037531415063341600204340ustar00rootroot00000000000000#if defined(Hiro_SourceEdit) auto mSourceEdit::allocate() -> pObject* { return new pSourceEdit(*this); } // auto mSourceEdit::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mSourceEdit::doMove() const -> void { if(state.onMove) return state.onMove(); } auto mSourceEdit::editable() const -> bool { return state.editable; } auto mSourceEdit::language() const -> string { return state.language; } auto mSourceEdit::numbered() const -> bool { return state.numbered; } auto mSourceEdit::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mSourceEdit::onMove(const function& callback) -> type& { state.onMove = callback; return *this; } auto mSourceEdit::scheme() const -> string { return state.scheme; } auto mSourceEdit::setEditable(bool editable) -> type& { state.editable = editable; signal(setEditable, editable); return *this; } auto mSourceEdit::setLanguage(const string& language) -> type& { state.language = language; signal(setLanguage, language); return *this; } auto mSourceEdit::setNumbered(bool numbered) -> type& { state.numbered = numbered; signal(setNumbered, numbered); return *this; } auto mSourceEdit::setScheme(const string& scheme) -> type& { state.scheme = scheme; signal(setScheme, scheme); return *this; } auto mSourceEdit::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mSourceEdit::setTextCursor(TextCursor textCursor) -> type& { state.textCursor = textCursor; signal(setTextCursor, textCursor); return *this; } auto mSourceEdit::setWordWrap(bool wordWrap) -> type& { state.wordWrap = wordWrap; signal(setWordWrap, wordWrap); return *this; } auto mSourceEdit::text() const -> string { return signal(text); } auto mSourceEdit::textCursor() const -> TextCursor { return signal(textCursor); } auto mSourceEdit::wordWrap() const -> bool { return state.wordWrap; } #endif ares-126/hiro/core/widget/source-edit.hpp000066400000000000000000000022051415063341600204300ustar00rootroot00000000000000#if defined(Hiro_SourceEdit) struct mSourceEdit : mWidget { Declare(SourceEdit) auto doChange() const -> void; auto doMove() const -> void; auto editable() const -> bool; auto language() const -> string; auto numbered() const -> bool; auto onChange(const function& callback = {}) -> type&; auto onMove(const function& callback = {}) -> type&; auto scheme() const -> string; auto setEditable(bool editable) -> type&; auto setLanguage(const string& language = "") -> type&; auto setNumbered(bool numbered = true) -> type&; auto setScheme(const string& scheme = "") -> type&; auto setText(const string& text = "") -> type&; auto setTextCursor(TextCursor textCursor = {}) -> type&; auto setWordWrap(bool wordWrap = true) -> type&; auto text() const -> string; auto textCursor() const -> TextCursor; auto wordWrap() const -> bool; //private: struct State { bool editable = true; string language; bool numbered = true; function onChange; function onMove; string scheme; string text; TextCursor textCursor; bool wordWrap = true; } state; }; #endif ares-126/hiro/core/widget/tab-frame-item.cpp000066400000000000000000000054461415063341600210040ustar00rootroot00000000000000#if defined(Hiro_TabFrame) auto mTabFrameItem::allocate() -> pObject* { return new pTabFrameItem(*this); } auto mTabFrameItem::destruct() -> void { if(auto& sizable = state.sizable) sizable->destruct(); mObject::destruct(); } // auto mTabFrameItem::append(sSizable sizable) -> type& { if(auto& sizable = state.sizable) remove(sizable); state.sizable = sizable; sizable->setParent(this, 0); signal(append, sizable); return *this; } auto mTabFrameItem::closable() const -> bool { return state.closable; } auto mTabFrameItem::icon() const -> multiFactorImage { return state.icon; } auto mTabFrameItem::movable() const -> bool { return state.movable; } auto mTabFrameItem::remove() -> type& { if(auto tabFrame = parentTabFrame()) tabFrame->remove(*this); return *this; } auto mTabFrameItem::remove(sSizable sizable) -> type& { signal(remove, sizable); state.sizable.reset(); sizable->setParent(); return *this; } auto mTabFrameItem::reset() -> type& { if(auto& sizable = state.sizable) remove(sizable); return *this; } auto mTabFrameItem::selected() const -> bool { return state.selected; } auto mTabFrameItem::setClosable(bool closable) -> type& { state.closable = closable; signal(setClosable, closable); return *this; } auto mTabFrameItem::setEnabled(bool enabled) -> type& { mObject::setEnabled(enabled); if(auto& sizable = state.sizable) sizable->setEnabled(sizable->enabled()); return *this; } auto mTabFrameItem::setFont(const Font& font) -> type& { mObject::setFont(font); if(auto& sizable = state.sizable) sizable->setFont(sizable->font()); return *this; } auto mTabFrameItem::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mTabFrameItem::setMovable(bool movable) -> type& { state.movable = movable; signal(setMovable, movable); return *this; } auto mTabFrameItem::setParent(mObject* parent, s32 offset) -> type& { if(auto& sizable = state.sizable) sizable->destruct(); mObject::setParent(parent, offset); if(auto& sizable = state.sizable) sizable->setParent(this, sizable->offset()); return *this; } auto mTabFrameItem::setSelected() -> type& { if(auto parent = parentTabFrame()) { for(auto& item : parent->state.items) item->state.selected = false; } state.selected = true; signal(setSelected); return *this; } auto mTabFrameItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mTabFrameItem::setVisible(bool visible) -> type& { mObject::setVisible(visible); if(auto& sizable = state.sizable) sizable->setVisible(sizable->visible()); return *this; } auto mTabFrameItem::sizable() const -> Sizable { return state.sizable; } auto mTabFrameItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/tab-frame-item.hpp000066400000000000000000000022221415063341600207760ustar00rootroot00000000000000#if defined(Hiro_TabFrame) struct mTabFrameItem : mObject { Declare(TabFrameItem) auto append(sSizable sizable) -> type&; auto closable() const -> bool; auto icon() const -> multiFactorImage; auto movable() const -> bool; auto remove() -> type& override; auto remove(sSizable sizable) -> type&; auto reset() -> type& override; auto selected() const -> bool; auto setClosable(bool closable = true) -> type&; auto setEnabled(bool enabled = true) -> type& override; auto setFont(const Font& font = {}) -> type& override; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setMovable(bool movable = true) -> type&; auto setParent(mObject* object = nullptr, s32 offset = -1) -> type& override; auto setSelected() -> type&; auto setText(const string& text = "") -> type&; auto setVisible(bool visible = true) -> type& override; auto sizable() const -> Sizable; auto text() const -> string; //private: struct State { bool closable = false; multiFactorImage icon; bool movable = false; bool selected = false; sSizable sizable; string text; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/tab-frame.cpp000066400000000000000000000057041415063341600200450ustar00rootroot00000000000000#if defined(Hiro_TabFrame) auto mTabFrame::allocate() -> pObject* { return new pTabFrame(*this); } auto mTabFrame::destruct() -> void { for(auto& item : state.items) item->destruct(); mWidget::destruct(); } // auto mTabFrame::append(sTabFrameItem item) -> type& { if(!state.items) item->state.selected = true; state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mTabFrame::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mTabFrame::doClose(sTabFrameItem item) const -> void { if(state.onClose) return state.onClose(item); } auto mTabFrame::doMove(sTabFrameItem from, sTabFrameItem to) const -> void { if(state.onMove) return state.onMove(from, to); } auto mTabFrame::item(unsigned position) const -> TabFrameItem { return state.items(position, {}); } auto mTabFrame::itemCount() const -> unsigned { return state.items.size(); } auto mTabFrame::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mTabFrame::navigation() const -> Navigation { return state.navigation; } auto mTabFrame::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mTabFrame::onClose(const function& callback) -> type& { state.onClose = callback; return *this; } auto mTabFrame::onMove(const function& callback) -> type& { state.onMove = callback; return *this; } auto mTabFrame::remove(sTabFrameItem item) -> type& { auto offset = item->offset(); item->setParent(); signal(remove, item); state.items.remove(item->offset()); for(auto n : range(offset, itemCount())) { state.items[n]->adjustOffset(-1); } return *this; } auto mTabFrame::reset() -> type& { while(state.items) remove(state.items.right()); return *this; } auto mTabFrame::selected() const -> TabFrameItem { for(auto& item : state.items) { if(item->selected()) return item; } return {}; } auto mTabFrame::setEnabled(bool enabled) -> type& { mWidget::setEnabled(enabled); for(auto& item : state.items) item->setEnabled(item->enabled()); return *this; } auto mTabFrame::setFont(const Font& font) -> type& { mWidget::setFont(font); for(auto& item : state.items) item->setFont(item->font()); return *this; } auto mTabFrame::setNavigation(Navigation navigation) -> type& { state.navigation = navigation; signal(setNavigation, navigation); return *this; } auto mTabFrame::setParent(mObject* parent, s32 offset) -> type& { for(auto& item : reverse(state.items)) item->destruct(); mObject::setParent(parent, offset); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } auto mTabFrame::setVisible(bool visible) -> type& { mWidget::setVisible(visible); for(auto& item : state.items) item->setVisible(item->visible()); return *this; } #endif ares-126/hiro/core/widget/tab-frame.hpp000066400000000000000000000026761415063341600200570ustar00rootroot00000000000000#if defined(Hiro_TabFrame) struct mTabFrame : mWidget { Declare(TabFrame) using mObject::remove; friend class mTabFrameItem; auto append(sTabFrameItem item) -> type&; auto doChange() const -> void; auto doClose(sTabFrameItem item) const -> void; auto doMove(sTabFrameItem from, sTabFrameItem to) const -> void; auto item(uint position) const -> TabFrameItem; auto itemCount() const -> uint; auto items() const -> vector; auto navigation() const -> Navigation; auto onChange(const function& callback = {}) -> type&; auto onClose(const function& callback = {}) -> type&; auto onMove(const function& callback = {}) -> type&; auto remove(sTabFrameItem item) -> type&; auto reset() -> type& override; auto selected() const -> TabFrameItem; auto setEnabled(bool enabled = true) -> type& override; auto setFont(const Font& font = {}) -> type& override; auto setNavigation(Navigation navigation = Navigation::Top) -> type&; auto setParent(mObject* object = nullptr, s32 offset = -1) -> type& override; auto setVisible(bool visible = true) -> type& override; //private: struct State { vector items; Navigation navigation = Navigation::Top; function onChange; function onClose; function onMove; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/table-view-cell.cpp000066400000000000000000000101741415063341600211600ustar00rootroot00000000000000#if defined(Hiro_TableView) auto mTableViewCell::allocate() -> pObject* { return new pTableViewCell(*this); } // auto mTableViewCell::alignment(bool recursive) const -> Alignment { if(auto alignment = state.alignment) return alignment; if(recursive) { if(auto parent = parentTableViewItem()) { if(auto alignment = parent->state.alignment) return alignment; if(auto grandparent = parent->parentTableView()) { if(offset() < grandparent->columnCount()) { if(auto column = grandparent->state.columns[offset()]) { if(auto alignment = column->state.alignment) return alignment; } } if(auto alignment = grandparent->state.alignment) return alignment; } } } return {}; } auto mTableViewCell::backgroundColor(bool recursive) const -> Color { if(auto color = state.backgroundColor) return color; if(recursive) { if(auto parent = parentTableViewItem()) { if(auto color = parent->state.backgroundColor) return color; if(auto grandparent = parent->parentTableView()) { if(offset() < grandparent->columnCount()) { if(auto column = grandparent->state.columns[offset()]) { if(auto color = column->state.backgroundColor) return color; } } if(auto color = grandparent->state.backgroundColor) return color; } } } return {}; } auto mTableViewCell::checkable() const -> bool { return state.checkable; } auto mTableViewCell::checked() const -> bool { return state.checkable && state.checked; } auto mTableViewCell::font(bool recursive) const -> Font { if(auto font = mObject::font()) return font; if(recursive) { if(auto parent = parentTableViewItem()) { if(auto font = parent->font()) return font; if(auto grandparent = parent->parentTableView()) { if(offset() < grandparent->columnCount()) { if(auto column = grandparent->state.columns[offset()]) { if(auto font = column->font()) return font; } } if(auto font = grandparent->font(true)) return font; } } } return {}; } auto mTableViewCell::foregroundColor(bool recursive) const -> Color { if(auto color = state.foregroundColor) return color; if(recursive) { if(auto parent = parentTableViewItem()) { if(auto color = parent->state.foregroundColor) return color; if(auto grandparent = parent->parentTableView()) { if(offset() < grandparent->columnCount()) { if(auto column = grandparent->state.columns[offset()]) { if(auto color = column->state.foregroundColor) return color; } } if(auto color = grandparent->state.foregroundColor) return color; } } } return state.foregroundColor; } auto mTableViewCell::icon() const -> multiFactorImage { return state.icon; } auto mTableViewCell::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; signal(setAlignment, alignment); return *this; } auto mTableViewCell::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTableViewCell::setCheckable(bool checkable) -> type& { state.checkable = checkable; signal(setCheckable, checkable); return *this; } auto mTableViewCell::setChecked(bool checked) -> type& { setCheckable(true); state.checked = checked; signal(setChecked, checked); return *this; } auto mTableViewCell::setForegroundColor(Color color) -> type& { state.foregroundColor = color; state.foregroundSystemColor = SystemColor::None; signal(setForegroundColor, color); return *this; } auto mTableViewCell::setForegroundColor(SystemColor color) -> type& { state.foregroundColor = color; state.foregroundSystemColor = color; signal(setForegroundColor, color); return *this; } auto mTableViewCell::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mTableViewCell::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mTableViewCell::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/table-view-cell.hpp000066400000000000000000000022111415063341600211560ustar00rootroot00000000000000#if defined(Hiro_TableView) struct mTableViewCell : mObject { Declare(TableViewCell) auto alignment(bool recursive = false) const -> Alignment; auto backgroundColor(bool recursive = false) const -> Color; auto checkable() const -> bool; auto checked() const -> bool; auto font(bool recursive = false) const -> Font; auto foregroundColor(bool recursive = false) const -> Color; auto icon() const -> multiFactorImage; auto setAlignment(Alignment alignment = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setCheckable(bool checkable = true) -> type&; auto setChecked(bool checked = true) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setForegroundColor(SystemColor color) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { Alignment alignment; Color backgroundColor; bool checkable = false; bool checked = false; Color foregroundColor; SystemColor foregroundSystemColor; multiFactorImage icon; string text; } state; }; #endif ares-126/hiro/core/widget/table-view-column.cpp000066400000000000000000000074411415063341600215410ustar00rootroot00000000000000#if defined(Hiro_TableView) auto mTableViewColumn::allocate() -> pObject* { return new pTableViewColumn(*this); } // //TODO: active(), setActive() ... is this the best way to do this? auto mTableViewColumn::active() const -> bool { if(auto tableView = parentTableView(true)) return tableView->state.activeColumn == offset(); return false; } auto mTableViewColumn::alignment() const -> Alignment { return state.alignment; } auto mTableViewColumn::backgroundColor() const -> Color { return state.backgroundColor; } auto mTableViewColumn::editable() const -> bool { return state.editable; } auto mTableViewColumn::expandable() const -> bool { return state.expandable; } auto mTableViewColumn::foregroundColor() const -> Color { return state.foregroundColor; } auto mTableViewColumn::horizontalAlignment() const -> f32 { return state.horizontalAlignment; } auto mTableViewColumn::icon() const -> multiFactorImage { return state.icon; } auto mTableViewColumn::remove() -> type& { if(auto tableView = parentTableView()) tableView->remove(*this); return *this; } auto mTableViewColumn::resizable() const -> bool { return state.resizable; } auto mTableViewColumn::setActive() -> type& { if(auto tableView = parentTableView(true)) tableView->state.activeColumn = offset(); signal(setActive); return *this; } auto mTableViewColumn::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; signal(setAlignment, alignment); return *this; } auto mTableViewColumn::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTableViewColumn::setEditable(bool editable) -> type& { state.editable = editable; signal(setEditable, editable); return *this; } auto mTableViewColumn::setExpandable(bool expandable) -> type& { state.expandable = expandable; signal(setExpandable, expandable); return *this; } auto mTableViewColumn::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mTableViewColumn::setHorizontalAlignment(f32 alignment) -> type& { alignment = max(0.0, min(1.0, alignment)); state.horizontalAlignment = alignment; signal(setHorizontalAlignment, alignment); return *this; } auto mTableViewColumn::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mTableViewColumn::setResizable(bool resizable) -> type& { state.resizable = resizable; signal(setResizable, resizable); return *this; } auto mTableViewColumn::setSorting(Sort sorting) -> type& { if(auto tableView = parentTableView()) { for(auto& column : tableView->state.columns) { column->state.sorting = Sort::None; signalex(column, setSorting, Sort::None); } } state.sorting = sorting; signal(setSorting, sorting); return *this; } auto mTableViewColumn::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mTableViewColumn::setVerticalAlignment(f32 alignment) -> type& { alignment = max(0.0, min(1.0, alignment)); state.verticalAlignment = alignment; signal(setVerticalAlignment, alignment); return *this; } auto mTableViewColumn::setVisible(bool visible) -> type& { state.visible = visible; signal(setVisible, visible); return *this; } auto mTableViewColumn::setWidth(f32 width) -> type& { state.width = max(0, width); signal(setWidth, width); return *this; } auto mTableViewColumn::sorting() const -> Sort { return state.sorting; } auto mTableViewColumn::text() const -> string { return state.text; } auto mTableViewColumn::verticalAlignment() const -> f32 { return state.verticalAlignment; } auto mTableViewColumn::width() const -> f32 { return state.width; } #endif ares-126/hiro/core/widget/table-view-column.hpp000066400000000000000000000034021415063341600215370ustar00rootroot00000000000000#if defined(Hiro_TableView) struct mTableViewColumn : mObject { Declare(TableViewColumn) auto active() const -> bool; auto alignment() const -> Alignment; auto backgroundColor() const -> Color; auto editable() const -> bool; auto expandable() const -> bool; auto foregroundColor() const -> Color; auto horizontalAlignment() const -> f32; auto icon() const -> multiFactorImage; auto remove() -> type& override; auto resizable() const -> bool; auto setActive() -> type&; auto setAlignment(Alignment alignment = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setEditable(bool editable = true) -> type&; auto setExpandable(bool expandable = true) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setHorizontalAlignment(f32 alignment = 0.0) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setResizable(bool resizable = true) -> type&; auto setSorting(Sort sorting = Sort::None) -> type&; auto setText(const string& text = "") -> type&; auto setVerticalAlignment(f32 alignment = 0.5) -> type&; auto setVisible(bool visible = true) -> type& override; auto setWidth(f32 width = 0) -> type&; auto sort(Sort sorting) -> type&; auto sorting() const -> Sort; auto text() const -> string; auto verticalAlignment() const -> f32; auto width() const -> f32; //private: struct State { bool active = false; Alignment alignment; Color backgroundColor; bool editable = false; bool expandable = false; Color foregroundColor; f32 horizontalAlignment = 0.0; multiFactorImage icon; bool resizable = true; Sort sorting = Sort::None; string text; f32 verticalAlignment = 0.5; bool visible = true; f32 width = 0; } state; }; #endif ares-126/hiro/core/widget/table-view-item.cpp000066400000000000000000000054241415063341600212010ustar00rootroot00000000000000#if defined(Hiro_TableView) auto mTableViewItem::allocate() -> pObject* { return new pTableViewItem(*this); } auto mTableViewItem::destruct() -> void { for(auto& cell : state.cells) cell->destruct(); mObject::destruct(); } // auto mTableViewItem::alignment() const -> Alignment { return state.alignment; } auto mTableViewItem::append(sTableViewCell cell) -> type& { state.cells.append(cell); cell->setParent(this, cellCount() - 1); signal(append, cell); return *this; } auto mTableViewItem::backgroundColor() const -> Color { return state.backgroundColor; } auto mTableViewItem::cell(u32 position) const -> TableViewCell { if(position < cellCount()) return state.cells[position]; return {}; } auto mTableViewItem::cellCount() const -> u32 { return state.cells.size(); } auto mTableViewItem::cells() const -> vector { vector cells; for(auto& cell : state.cells) cells.append(cell); return cells; } auto mTableViewItem::foregroundColor() const -> Color { return state.foregroundColor; } auto mTableViewItem::remove() -> type& { if(auto tableView = parentTableView()) tableView->remove(*this); return *this; } auto mTableViewItem::remove(sTableViewCell cell) -> type& { signal(remove, cell); state.cells.remove(cell->offset()); for(auto n : range(cell->offset(), cellCount())) { state.cells[n]->adjustOffset(-1); } cell->setParent(); return *this; } auto mTableViewItem::reset() -> type& { while(state.cells) remove(state.cells.right()); return *this; } auto mTableViewItem::selected() const -> bool { return state.selected; } auto mTableViewItem::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; signal(setAlignment, alignment); return *this; } auto mTableViewItem::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTableViewItem::setFocused() -> type& { signal(setFocused); return *this; } auto mTableViewItem::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mTableViewItem::setParent(mObject* parent, s32 offset) -> type& { for(auto& cell : state.cells) cell->destruct(); mObject::setParent(parent, offset); for(auto& cell : state.cells) cell->setParent(this, cell->offset()); return *this; } auto mTableViewItem::setSelected(bool selected) -> type& { //if in single-selection mode, selecting one item must deselect all other items in the TableView if(auto parent = parentTableView()) { if(!parent->state.batchable && selected) { for(auto& item : parent->state.items) item->state.selected = false; } } state.selected = selected; signal(setSelected, selected); return *this; } #endif ares-126/hiro/core/widget/table-view-item.hpp000066400000000000000000000021041415063341600211760ustar00rootroot00000000000000#if defined(Hiro_TableView) struct mTableViewItem : mObject { Declare(TableViewItem) auto alignment() const -> Alignment; auto append(sTableViewCell cell) -> type&; auto backgroundColor() const -> Color; auto cell(u32 position) const -> TableViewCell; auto cellCount() const -> u32; auto cells() const -> vector; auto foregroundColor() const -> Color; auto remove() -> type& override; auto remove(sTableViewCell cell) -> type&; auto reset() -> type& override; auto selected() const -> bool; auto setAlignment(Alignment alignment = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setFocused() -> type& override; auto setForegroundColor(Color color = {}) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSelected(bool selected = true) -> type&; //private: struct State { Alignment alignment; Color backgroundColor; vector cells; Color foregroundColor; bool selected = false; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/table-view.cpp000066400000000000000000000157761415063341600202600ustar00rootroot00000000000000#if defined(Hiro_TableView) auto mTableView::allocate() -> pObject* { return new pTableView(*this); } auto mTableView::destruct() -> void { for(auto& item : state.items) item->destruct(); for(auto& column : state.columns) column->destruct(); mWidget::destruct(); } // auto mTableView::alignment() const -> Alignment { return state.alignment; } auto mTableView::append(sTableViewColumn column) -> type& { state.columns.append(column); column->setParent(this, columnCount() - 1); signal(append, column); return *this; } auto mTableView::append(sTableViewItem item) -> type& { state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mTableView::backgroundColor() const -> Color { return state.backgroundColor; } auto mTableView::batchable() const -> bool { return state.batchable; } auto mTableView::batched() const -> vector { vector items; for(auto& item : state.items) { if(item->selected()) items.append(item); } return items; } auto mTableView::bordered() const -> bool { return state.bordered; } auto mTableView::column(u32 position) const -> TableViewColumn { if(position < columnCount()) return state.columns[position]; return {}; } auto mTableView::columnCount() const -> u32 { return state.columns.size(); } auto mTableView::columns() const -> vector { vector columns; for(auto& column : columns) columns.append(column); return columns; } auto mTableView::doActivate(sTableViewCell cell) const -> void { if(state.onActivate) return state.onActivate(cell); } auto mTableView::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mTableView::doContext(sTableViewCell cell) const -> void { if(state.onContext) return state.onContext(cell); } auto mTableView::doEdit(sTableViewCell cell) const -> void { if(state.onEdit) return state.onEdit(cell); } auto mTableView::doSort(sTableViewColumn column) const -> void { if(state.onSort) return state.onSort(column); } auto mTableView::doToggle(sTableViewCell cell) const -> void { if(state.onToggle) return state.onToggle(cell); } auto mTableView::foregroundColor() const -> Color { return state.foregroundColor; } auto mTableView::headered() const -> bool { return state.headered; } auto mTableView::item(u32 position) const -> TableViewItem { if(position < itemCount()) return state.items[position]; return {}; } auto mTableView::itemCount() const -> u32 { return state.items.size(); } auto mTableView::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mTableView::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mTableView::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mTableView::onContext(const function& callback) -> type& { state.onContext = callback; return *this; } auto mTableView::onEdit(const function& callback) -> type& { state.onEdit = callback; return *this; } auto mTableView::onSort(const function& callback) -> type& { state.onSort = callback; return *this; } auto mTableView::onToggle(const function& callback) -> type& { state.onToggle = callback; return *this; } auto mTableView::remove(sTableViewColumn column) -> type& { signal(remove, column); state.columns.remove(column->offset()); for(u32 n : range(column->offset(), columnCount())) { state.columns[n]->adjustOffset(-1); } column->setParent(); return *this; } auto mTableView::remove(sTableViewItem item) -> type& { signal(remove, item); state.items.remove(item->offset()); for(u32 n : range(item->offset(), itemCount())) { state.items[n]->adjustOffset(-1); } item->setParent(); return *this; } auto mTableView::reset() -> type& { while(state.items) remove(state.items.last()); while(state.columns) remove(state.columns.last()); return *this; } auto mTableView::resizeColumns() -> type& { signal(resizeColumns); return *this; } auto mTableView::selectAll() -> type& { if(!state.batchable) return *this; for(auto& item : state.items) { item->setSelected(true); } return *this; } auto mTableView::selectNone() -> type& { for(auto& item : state.items) { item->setSelected(false); } return *this; } auto mTableView::selected() const -> TableViewItem { for(auto& item : state.items) { if(item->selected()) return item; } return {}; } auto mTableView::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; signal(setAlignment, alignment); return *this; } auto mTableView::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTableView::setBatchable(bool batchable) -> type& { state.batchable = batchable; signal(setBatchable, batchable); return *this; } auto mTableView::setBordered(bool bordered) -> type& { state.bordered = bordered; signal(setBordered, bordered); return *this; } auto mTableView::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mTableView::setHeadered(bool headered) -> type& { state.headered = headered; signal(setHeadered, headered); return *this; } auto mTableView::setParent(mObject* parent, s32 offset) -> type& { for(auto& item : reverse(state.items)) item->destruct(); for(auto& column : reverse(state.columns)) column->destruct(); mObject::setParent(parent, offset); for(auto& column : state.columns) column->setParent(this, column->offset()); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } auto mTableView::setUsesSidebarStyle(bool usesSidebarStyle) -> type& { #if defined(PLATFORM_MACOS) signal(setUsesSidebarStyle, usesSidebarStyle); #endif return *this; } auto mTableView::setSortable(bool sortable) -> type& { state.sortable = sortable; signal(setSortable, sortable); return *this; } auto mTableView::sort() -> type& { Sort sorting = Sort::None; u32 offset = 0; for(auto& column : state.columns) { if(column->sorting() == Sort::None) continue; sorting = column->sorting(); offset = column->offset(); break; } auto sorted = state.items; sorted.sort([&](auto& lhs, auto& rhs) { string x = offset < lhs->cellCount() ? lhs->state.cells[offset]->state.text : ""; string y = offset < rhs->cellCount() ? rhs->state.cells[offset]->state.text : ""; if(sorting == Sort::Ascending ) return string::icompare(x, y) < 0; if(sorting == Sort::Descending) return string::icompare(y, x) < 0; return false; //unreachable }); while(state.items) remove(state.items.last()); for(auto& item : sorted) append(item); return *this; } auto mTableView::sortable() const -> bool { return state.sortable; } #endif ares-126/hiro/core/widget/table-view.hpp000066400000000000000000000056241415063341600202540ustar00rootroot00000000000000#if defined(Hiro_TableView) struct mTableView : mWidget { Declare(TableView) using mObject::remove; auto alignment() const -> Alignment; auto append(sTableViewColumn column) -> type&; auto append(sTableViewItem item) -> type&; auto backgroundColor() const -> Color; auto batchable() const -> bool; auto batched() const -> vector; auto bordered() const -> bool; auto column(u32 position) const -> TableViewColumn; auto columnCount() const -> u32; auto columns() const -> vector; auto doActivate(sTableViewCell cell) const -> void; auto doChange() const -> void; auto doContext(sTableViewCell cell) const -> void; auto doEdit(sTableViewCell cell) const -> void; auto doSort(sTableViewColumn column) const -> void; auto doToggle(sTableViewCell cell) const -> void; auto foregroundColor() const -> Color; auto headered() const -> bool; auto item(u32 position) const -> TableViewItem; auto itemCount() const -> u32; auto items() const -> vector; auto onActivate(const function& callback = {}) -> type&; auto onChange(const function& callback = {}) -> type&; auto onContext(const function& callback = {}) -> type&; auto onEdit(const function& callback = {}) -> type&; auto onSort(const function& callback = {}) -> type&; auto onToggle(const function& callback = {}) -> type&; auto remove(sTableViewColumn column) -> type&; auto remove(sTableViewItem item) -> type&; auto reset() -> type& override; auto resizeColumns() -> type&; auto selectAll() -> type&; auto selectNone() -> type&; auto selected() const -> TableViewItem; auto setAlignment(Alignment alignment = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setBatchable(bool batchable = true) -> type&; auto setBordered(bool bordered = true) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setHeadered(bool headered = true) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSortable(bool sortable = true) -> type&; auto setUsesSidebarStyle(bool usesSidebarStyle = true) -> type&; auto sort() -> type&; auto sortable() const -> bool; //private: struct State { u32 activeColumn = 0; Alignment alignment; Color backgroundColor; bool batchable = false; bool bordered = false; vector columns; Color foregroundColor; bool headered = false; vector items; function onActivate; function onChange; function onContext; function onEdit; function onSort; function onToggle; bool sortable = false; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/text-edit.cpp000066400000000000000000000034451415063341600201160ustar00rootroot00000000000000#if defined(Hiro_TextEdit) auto mTextEdit::allocate() -> pObject* { return new pTextEdit(*this); } // auto mTextEdit::backgroundColor() const -> Color { return state.backgroundColor; } auto mTextEdit::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mTextEdit::doMove() const -> void { if(state.onMove) return state.onMove(); } auto mTextEdit::editable() const -> bool { return state.editable; } auto mTextEdit::foregroundColor() const -> Color { return state.foregroundColor; } auto mTextEdit::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mTextEdit::onMove(const function& callback) -> type& { state.onMove = callback; return *this; } auto mTextEdit::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTextEdit::setEditable(bool editable) -> type& { state.editable = editable; signal(setEditable, editable); return *this; } auto mTextEdit::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mTextEdit::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mTextEdit::setTextCursor(TextCursor textCursor) -> type& { state.textCursor = textCursor; signal(setTextCursor, textCursor); return *this; } auto mTextEdit::setWordWrap(bool wordWrap) -> type& { state.wordWrap = wordWrap; signal(setWordWrap, wordWrap); return *this; } auto mTextEdit::text() const -> string { return signal(text); } auto mTextEdit::textCursor() const -> TextCursor { return signal(textCursor); } auto mTextEdit::wordWrap() const -> bool { return state.wordWrap; } #endif ares-126/hiro/core/widget/text-edit.hpp000066400000000000000000000020601415063341600201130ustar00rootroot00000000000000#if defined(Hiro_TextEdit) struct mTextEdit : mWidget { Declare(TextEdit) auto backgroundColor() const -> Color; auto doChange() const -> void; auto doMove() const -> void; auto editable() const -> bool; auto foregroundColor() const -> Color; auto onChange(const function& callback = {}) -> type&; auto onMove(const function& callback = {}) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setEditable(bool editable = true) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setText(const string& text = "") -> type&; auto setTextCursor(TextCursor textCursor = {}) -> type&; auto setWordWrap(bool wordWrap = true) -> type&; auto text() const -> string; auto textCursor() const -> TextCursor; auto wordWrap() const -> bool; //private: struct State { Color backgroundColor; bool editable = true; Color foregroundColor; function onChange; function onMove; string text; TextCursor textCursor; bool wordWrap = true; } state; }; #endif ares-126/hiro/core/widget/tree-view-item.cpp000066400000000000000000000110401415063341600210400ustar00rootroot00000000000000#if defined(Hiro_TreeView) auto mTreeViewItem::allocate() -> pObject* { return new pTreeViewItem(*this); } auto mTreeViewItem::destruct() -> void { for(auto& item : state.items) item->destruct(); mObject::destruct(); } // auto mTreeViewItem::append(sTreeViewItem item) -> type& { state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mTreeViewItem::backgroundColor(bool recursive) const -> Color { if(auto color = state.backgroundColor) return color; if(recursive) { if(auto parent = parentTreeViewItem()) { if(auto color = parent->backgroundColor(true)) return color; } if(auto parent = parentTreeView()) { if(auto color = parent->backgroundColor()) return color; } } return {}; } auto mTreeViewItem::checkable() const -> bool { return state.checkable; } auto mTreeViewItem::checked() const -> bool { return state.checked; } auto mTreeViewItem::collapse(bool recursive) -> type& { if(recursive) for(auto& item : state.items) item->collapse(recursive); setExpanded(false); return *this; } auto mTreeViewItem::expand(bool recursive) -> type& { setExpanded(true); if(recursive) for(auto& item : state.items) item->expand(recursive); return *this; } auto mTreeViewItem::expanded() const -> bool { return state.expanded; } auto mTreeViewItem::foregroundColor(bool recursive) const -> Color { if(auto color = state.foregroundColor) return color; if(recursive) { if(auto parent = parentTreeViewItem()) { if(auto color = parent->foregroundColor(true)) return color; } if(auto parent = parentTreeView()) { if(auto color = parent->foregroundColor()) return color; } } return {}; } auto mTreeViewItem::icon() const -> multiFactorImage { return state.icon; } auto mTreeViewItem::item(const string& path) const -> TreeViewItem { if(!path) return {}; auto paths = path.split("/"); u32 position = paths.takeLeft().natural(); if(position >= itemCount()) return {}; if(!paths) return state.items[position]; return state.items[position]->item(paths.merge("/")); } auto mTreeViewItem::itemCount() const -> u32 { return state.items.size(); } auto mTreeViewItem::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mTreeViewItem::path() const -> string { if(auto treeViewItem = parentTreeViewItem()) return {treeViewItem->path(), "/", offset()}; return {offset()}; } auto mTreeViewItem::remove() -> type& { if(auto treeView = parentTreeView()) treeView->remove(*this); if(auto treeViewItem = parentTreeViewItem()) treeViewItem->remove(*this); return *this; } auto mTreeViewItem::remove(sTreeViewItem item) -> type& { signal(remove, item); state.items.remove(item->offset()); for(auto n : range(item->offset(), itemCount())) { state.items[n]->adjustOffset(-1); } item->setParent(); return *this; } auto mTreeViewItem::selected() const -> bool { if(auto treeView = parentTreeView(true)) { return path() == treeView->state.selectedPath; } return false; } auto mTreeViewItem::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTreeViewItem::setCheckable(bool checkable) -> type& { state.checkable = checkable; signal(setCheckable, checkable); return *this; } auto mTreeViewItem::setChecked(bool checked) -> type& { state.checked = checked; signal(setChecked, checked); return *this; } auto mTreeViewItem::setExpanded(bool expanded) -> type& { state.expanded = expanded; signal(setExpanded, expanded); return *this; } auto mTreeViewItem::setFocused() -> type& { signal(setFocused); return *this; } auto mTreeViewItem::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mTreeViewItem::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; signal(setIcon, icon); return *this; } auto mTreeViewItem::setParent(mObject* parent, s32 offset) -> type& { for(auto& item : reverse(state.items)) item->destruct(); mObject::setParent(parent, offset); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } auto mTreeViewItem::setSelected() -> type& { signal(setSelected); return *this; } auto mTreeViewItem::setText(const string& text) -> type& { state.text = text; signal(setText, text); return *this; } auto mTreeViewItem::text() const -> string { return state.text; } #endif ares-126/hiro/core/widget/tree-view-item.hpp000066400000000000000000000031231415063341600210500ustar00rootroot00000000000000#if defined(Hiro_TreeView) struct mTreeViewItem : mObject { Declare(TreeViewItem) auto append(sTreeViewItem item) -> type&; auto backgroundColor(bool recursive = false) const -> Color; auto checkable() const -> bool; auto checked() const -> bool; auto collapse(bool recursive = true) -> type&; auto expand(bool recursive = true) -> type&; auto expanded() const -> bool; auto foregroundColor(bool recursive = false) const -> Color; auto icon() const -> multiFactorImage; auto item(const string& path) const -> TreeViewItem; auto itemCount() const -> u32; auto items() const -> vector; auto path() const -> string; auto remove() -> type& override; auto remove(sTreeViewItem item) -> type&; auto selected() const -> bool; auto setBackgroundColor(Color color = {}) -> type&; auto setCheckable(bool checkable = true) -> type&; auto setChecked(bool checked = true) -> type&; auto setExpanded(bool expanded = true) -> type&; auto setFocused() -> type& override; auto setForegroundColor(Color color = {}) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSelected() -> type&; auto setText(const string& text = "") -> type&; auto text() const -> string; //private: struct State { Color backgroundColor; bool checkable = false; bool checked = false; bool expanded = false; Color foregroundColor; multiFactorImage icon; vector items; string text; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/tree-view.cpp000066400000000000000000000071021415063341600201100ustar00rootroot00000000000000#if defined(Hiro_TreeView) auto mTreeView::allocate() -> pObject* { return new pTreeView(*this); } auto mTreeView::destruct() -> void { for(auto& item : state.items) item->destruct(); mWidget::destruct(); } // auto mTreeView::activation() const -> Mouse::Click { return state.activation; } auto mTreeView::append(sTreeViewItem item) -> type& { state.items.append(item); item->setParent(this, itemCount() - 1); signal(append, item); return *this; } auto mTreeView::backgroundColor() const -> Color { return state.backgroundColor; } auto mTreeView::collapse(bool recursive) -> type& { for(auto& item : state.items) item->collapse(recursive); return *this; } auto mTreeView::doActivate() const -> void { if(state.onActivate) return state.onActivate(); } auto mTreeView::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mTreeView::doContext() const -> void { if(state.onContext) return state.onContext(); } auto mTreeView::doToggle(sTreeViewItem item) const -> void { if(state.onToggle) return state.onToggle(item); } auto mTreeView::expand(bool recursive) -> type& { for(auto& item : state.items) item->expand(recursive); return *this; } auto mTreeView::foregroundColor() const -> Color { return state.foregroundColor; } auto mTreeView::item(const string& path) const -> TreeViewItem { if(!path) return {}; auto paths = path.split("/"); u32 position = paths.takeLeft().natural(); if(position >= itemCount()) return {}; if(!paths) return state.items[position]; return state.items[position]->item(paths.merge("/")); } auto mTreeView::itemCount() const -> u32 { return state.items.size(); } auto mTreeView::items() const -> vector { vector items; for(auto& item : state.items) items.append(item); return items; } auto mTreeView::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mTreeView::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mTreeView::onContext(const function& callback) -> type& { state.onContext = callback; return *this; } auto mTreeView::onToggle(const function& callback) -> type& { state.onToggle = callback; return *this; } auto mTreeView::remove(sTreeViewItem item) -> type& { signal(remove, item); state.items.remove(item->offset()); for(auto n : range(item->offset(), itemCount())) { state.items[n]->adjustOffset(-1); } item->setParent(); return *this; } auto mTreeView::reset() -> type& { state.selectedPath.reset(); while(state.items) remove(state.items.right()); return *this; } auto mTreeView::selectNone() -> type& { if(auto item = selected()) { //TODO //item->setSelected(false); } return *this; } auto mTreeView::selected() const -> TreeViewItem { return item(state.selectedPath); } auto mTreeView::setActivation(Mouse::Click activation) -> type& { state.activation = activation; signal(setActivation, activation); return *this; } auto mTreeView::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mTreeView::setForegroundColor(Color color) -> type& { state.foregroundColor = color; signal(setForegroundColor, color); return *this; } auto mTreeView::setParent(mObject* object, s32 offset) -> type& { for(auto& item : reverse(state.items)) item->destruct(); mObject::setParent(object, offset); for(auto& item : state.items) item->setParent(this, item->offset()); return *this; } #endif ares-126/hiro/core/widget/tree-view.hpp000066400000000000000000000033211415063341600201140ustar00rootroot00000000000000#if defined(Hiro_TreeView) struct mTreeView : mWidget { Declare(TreeView) using mObject::remove; auto activation() const -> Mouse::Click; auto append(sTreeViewItem item) -> type&; auto backgroundColor() const -> Color; auto collapse(bool recursive = true) -> type&; auto doActivate() const -> void; auto doChange() const -> void; auto doContext() const -> void; auto doToggle(sTreeViewItem item) const -> void; auto expand(bool recursive = true) -> type&; auto foregroundColor() const -> Color; auto item(const string& path) const -> TreeViewItem; auto itemCount() const -> u32; auto items() const -> vector; auto onActivate(const function& callback = {}) -> type&; auto onChange(const function& callback = {}) -> type&; auto onContext(const function& callback = {}) -> type&; auto onToggle(const function& callback = {}) -> type&; auto remove(sTreeViewItem item) -> type&; auto reset() -> type& override; auto selectNone() -> type&; auto selected() const -> TreeViewItem; auto setActivation(Mouse::Click activation = Mouse::Click::Double) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setForegroundColor(Color color = {}) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; //private: struct State { Mouse::Click activation = Mouse::Click::Double; Color backgroundColor; Color foregroundColor; vector items; function onActivate; function onChange; function onContext; function onToggle; string selectedPath; } state; auto destruct() -> void override; }; #endif ares-126/hiro/core/widget/vertical-scroll-bar.cpp000066400000000000000000000014361415063341600220540ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) auto mVerticalScrollBar::allocate() -> pObject* { return new pVerticalScrollBar(*this); } // auto mVerticalScrollBar::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mVerticalScrollBar::length() const -> u32 { return state.length; } auto mVerticalScrollBar::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mVerticalScrollBar::position() const -> u32 { return state.position; } auto mVerticalScrollBar::setLength(u32 length) -> type& { state.length = length; signal(setLength, length); return *this; } auto mVerticalScrollBar::setPosition(u32 position) -> type& { state.position = position; signal(setPosition, position); return *this; } #endif ares-126/hiro/core/widget/vertical-scroll-bar.hpp000066400000000000000000000007431415063341600220610ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) struct mVerticalScrollBar : mWidget { Declare(VerticalScrollBar) auto doChange() const -> void; auto length() const -> u32; auto onChange(const function& callback = {}) -> type&; auto position() const -> u32; auto setLength(u32 length = 101) -> type&; auto setPosition(u32 position = 0) -> type&; //private: struct State { u32 length = 101; function onChange; u32 position = 0; } state; }; #endif ares-126/hiro/core/widget/vertical-slider.cpp000066400000000000000000000014031415063341600212700ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) auto mVerticalSlider::allocate() -> pObject* { return new pVerticalSlider(*this); } // auto mVerticalSlider::doChange() const -> void { if(state.onChange) return state.onChange(); } auto mVerticalSlider::length() const -> u32 { return state.length; } auto mVerticalSlider::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mVerticalSlider::position() const -> u32 { return state.position; } auto mVerticalSlider::setLength(u32 length) -> type& { state.length = length; signal(setLength, length); return *this; } auto mVerticalSlider::setPosition(u32 position) -> type& { state.position = position; signal(setPosition, position); return *this; } #endif ares-126/hiro/core/widget/vertical-slider.hpp000066400000000000000000000007321415063341600213010ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) struct mVerticalSlider : mWidget { Declare(VerticalSlider) auto doChange() const -> void; auto length() const -> u32; auto onChange(const function& callback = {}) -> type&; auto position() const -> u32; auto setLength(u32 length = 101) -> type&; auto setPosition(u32 position = 0) -> type&; //private: struct State { u32 length = 101; function onChange; u32 position = 0; } state; }; #endif ares-126/hiro/core/widget/viewport.cpp000066400000000000000000000002741415063341600200630ustar00rootroot00000000000000#if defined(Hiro_Viewport) auto mViewport::allocate() -> pObject* { return new pViewport(*this); } // auto mViewport::handle() const -> uintptr_t { return signal(handle); } #endif ares-126/hiro/core/widget/viewport.hpp000066400000000000000000000002431415063341600200640ustar00rootroot00000000000000#if defined(Hiro_Viewport) struct mViewport : mWidget { Declare(Viewport) auto handle() const -> uintptr_t; //private: struct State { } state; }; #endif ares-126/hiro/core/widget/widget.cpp000066400000000000000000000053331415063341600174700ustar00rootroot00000000000000#if defined(Hiro_Widget) auto mWidget::allocate() -> pObject* { return new pWidget(*this); } // auto mWidget::doDrop(vector names) const -> void { if(state.onDrop) return state.onDrop(names); } auto mWidget::doMouseEnter() const -> void { if(state.onMouseEnter) return state.onMouseEnter(); } auto mWidget::doMouseLeave() const -> void { if(state.onMouseLeave) return state.onMouseLeave(); } auto mWidget::doMouseMove(Position position) const -> void { if(state.onMouseMove) return state.onMouseMove(position); } auto mWidget::doMousePress(Mouse::Button button) const -> void { if(state.onMousePress) return state.onMousePress(button); } auto mWidget::doMouseRelease(Mouse::Button button) const -> void { if(state.onMouseRelease) return state.onMouseRelease(button); } auto mWidget::droppable() const -> bool { return state.droppable; } auto mWidget::focusable() const -> bool { return state.focusable; } auto mWidget::mouseCursor() const -> MouseCursor { return state.mouseCursor; } auto mWidget::onDrop(const function)>& callback) -> type& { state.onDrop = callback; return *this; } auto mWidget::onMouseEnter(const function& callback) -> type& { state.onMouseEnter = callback; return *this; } auto mWidget::onMouseLeave(const function& callback) -> type& { state.onMouseLeave = callback; return *this; } auto mWidget::onMouseMove(const function& callback) -> type& { state.onMouseMove = callback; return *this; } auto mWidget::onMousePress(const function& callback) -> type& { state.onMousePress = callback; return *this; } auto mWidget::onMouseRelease(const function& callback) -> type& { state.onMouseRelease = callback; return *this; } auto mWidget::remove() -> type& { //TODO: how to implement this after removing mLayout? //if(auto layout = parentLayout()) layout->remove(layout->sizable(offset())); setParent(); return *this; } auto mWidget::setDroppable(bool droppable) -> type& { state.droppable = droppable; signal(setDroppable, droppable); return *this; } auto mWidget::setFocusable(bool focusable) -> type& { state.focusable = focusable; signal(setFocusable, focusable); return *this; } auto mWidget::setMouseCursor(const MouseCursor& mouseCursor) -> type& { state.mouseCursor = mouseCursor; signal(setMouseCursor, mouseCursor); return *this; } auto mWidget::setToolTip(const string& toolTip) -> type& { state.toolTip = toolTip; //TODO: allow this option to dynamically control tool tips if(!Application::state().toolTips) return *this; signal(setToolTip, toolTip); return *this; } auto mWidget::toolTip() const -> string { return state.toolTip; } #endif ares-126/hiro/core/widget/widget.hpp000066400000000000000000000031771415063341600175010ustar00rootroot00000000000000#if defined(Hiro_Widget) struct mWidget : mSizable { Declare(Widget) auto doDrop(vector names) const -> void; auto doMouseEnter() const -> void; auto doMouseLeave() const -> void; auto doMouseMove(Position position) const -> void; auto doMousePress(Mouse::Button button) const -> void; auto doMouseRelease(Mouse::Button button) const -> void; auto droppable() const -> bool; auto focusable() const -> bool; auto mouseCursor() const -> MouseCursor; auto onDrop(const function)>& callback = {}) -> type&; auto onMouseEnter(const function& callback = {}) -> type&; auto onMouseLeave(const function& callback = {}) -> type&; auto onMouseMove(const function& callback = {}) -> type&; auto onMousePress(const function& callback = {}) -> type&; auto onMouseRelease(const function& callback = {}) -> type&; auto remove() -> type& override; auto setDroppable(bool droppable = true) -> type&; auto setFocusable(bool focusable = true) -> type&; auto setMouseCursor(const MouseCursor& mouseCursor = {}) -> type&; auto setToolTip(const string& toolTip = "") -> type&; auto toolTip() const -> string; //private: struct State { bool droppable = false; bool focusable = false; MouseCursor mouseCursor; function)> onDrop; function onMouseEnter; function onMouseLeave; function onMouseMove; function onMousePress; function onMouseRelease; string toolTip; } state; }; #endif ares-126/hiro/core/window.cpp000066400000000000000000000242011415063341600162240ustar00rootroot00000000000000#if defined(Hiro_Window) mWindow::mWindow() { mObject::state.visible = false; } auto mWindow::allocate() -> pObject* { return new pWindow(*this); } auto mWindow::destruct() -> void { if(auto& menuBar = state.menuBar) menuBar->destruct(); if(auto& sizable = state.sizable) sizable->destruct(); if(auto& statusBar = state.statusBar) statusBar->destruct(); mObject::destruct(); } // auto mWindow::append(sMenuBar menuBar) -> type& { if(auto& menuBar = state.menuBar) remove(menuBar); menuBar->setParent(this, 0); state.menuBar = menuBar; signal(append, menuBar); return *this; } auto mWindow::append(sSizable sizable) -> type& { if(auto& sizable = state.sizable) remove(sizable); state.sizable = sizable; sizable->setParent(this, 0); signal(append, sizable); return *this; } auto mWindow::append(sStatusBar statusBar) -> type& { if(auto& statusBar = state.statusBar) remove(statusBar); statusBar->setParent(this, 0); state.statusBar = statusBar; signal(append, statusBar); return *this; } auto mWindow::backgroundColor() const -> Color { return state.backgroundColor; } auto mWindow::dismissable() const -> bool { return state.dismissable; } auto mWindow::doClose() const -> void { if(state.onClose) return state.onClose(); } auto mWindow::doDrop(vector names) const -> void { if(state.onDrop) return state.onDrop(names); } auto mWindow::doKeyPress(s32 key) const -> void { if(state.onKeyPress) return state.onKeyPress(key); } auto mWindow::doKeyRelease(s32 key) const -> void { if(state.onKeyRelease) return state.onKeyRelease(key); } auto mWindow::doMove() const -> void { if(state.onMove) return state.onMove(); } auto mWindow::doSize() const -> void { if(state.onSize) return state.onSize(); } auto mWindow::droppable() const -> bool { return state.droppable; } auto mWindow::frameGeometry() const -> Geometry { Geometry margin = signal(frameMargin); return { state.geometry.x() - margin.x(), state.geometry.y() - margin.y(), state.geometry.width() + margin.width(), state.geometry.height() + margin.height() }; } auto mWindow::fullScreen() const -> bool { return state.fullScreen; } auto mWindow::geometry() const -> Geometry { return state.geometry; } auto mWindow::handle() const -> uintptr_t { return signal(handle); } auto mWindow::maximized() const -> bool { return state.maximized; } auto mWindow::maximumSize() const -> Size { return state.maximumSize; } auto mWindow::menuBar() const -> MenuBar { return state.menuBar; } auto mWindow::minimized() const -> bool { return state.minimized; } auto mWindow::minimumSize() const -> Size { return state.minimumSize; } auto mWindow::modal() const -> bool { return state.modal; } auto mWindow::monitor() const -> u32 { return signal(monitor); } auto mWindow::onClose(const function& callback) -> type& { state.onClose = callback; return *this; } auto mWindow::onDrop(const function)>& callback) -> type& { state.onDrop = callback; return *this; } auto mWindow::onKeyPress(const function& callback) -> type& { state.onKeyPress = callback; return *this; } auto mWindow::onKeyRelease(const function& callback) -> type& { state.onKeyRelease = callback; return *this; } auto mWindow::onMove(const function& callback) -> type& { state.onMove = callback; return *this; } auto mWindow::onSize(const function& callback) -> type& { state.onSize = callback; return *this; } auto mWindow::remove(sMenuBar menuBar) -> type& { signal(remove, menuBar); menuBar->setParent(); state.menuBar.reset(); return *this; } auto mWindow::remove(sSizable sizable) -> type& { signal(remove, sizable); sizable->setParent(); state.sizable.reset(); return *this; } auto mWindow::remove(sStatusBar statusBar) -> type& { signal(remove, statusBar); statusBar->setParent(); state.statusBar.reset(); return *this; } auto mWindow::reset() -> type& { if(auto& menuBar = state.menuBar) remove(menuBar); if(auto& sizable = state.sizable) remove(sizable); if(auto& statusBar = state.statusBar) remove(statusBar); return *this; } auto mWindow::resizable() const -> bool { return state.resizable; } auto mWindow::setAlignment(Alignment alignment) -> type& { auto workspace = Monitor::workspace(); auto geometry = frameGeometry(); auto x = workspace.x() + alignment.horizontal() * (workspace.width() - geometry.width()); auto y = workspace.y() + alignment.vertical() * (workspace.height() - geometry.height()); setFramePosition({(s32)x, (s32)y}); return *this; } auto mWindow::setAlignment(sWindow relativeTo, Alignment alignment) -> type& { if(!relativeTo) return setAlignment(alignment); auto parent = relativeTo->frameGeometry(); auto window = frameGeometry(); //+0 .. +1 => within parent window auto x = parent.x() + (parent.width() - window.width()) * alignment.horizontal(); auto y = parent.y() + (parent.height() - window.height()) * alignment.vertical(); //-1 .. -0 => beyond parent window //... I know, relying on -0 IEE754 here is ... less than ideal if(signbit(alignment.horizontal())) { x = (parent.x() - window.width()) + abs(alignment.horizontal()) * (parent.width() + window.width()); } if(signbit(alignment.vertical())) { y = (parent.y() - window.height()) + abs(alignment.vertical()) * (parent.height() + window.height()); } setFramePosition({(s32)x, (s32)y}); return *this; } auto mWindow::setBackgroundColor(Color color) -> type& { state.backgroundColor = color; signal(setBackgroundColor, color); return *this; } auto mWindow::setDismissable(bool dismissable) -> type& { state.dismissable = dismissable; signal(setDismissable, dismissable); return *this; } auto mWindow::setDroppable(bool droppable) -> type& { state.droppable = droppable; signal(setDroppable, droppable); return *this; } auto mWindow::setFrameGeometry(Geometry geometry) -> type& { Geometry margin = signal(frameMargin); return setGeometry({ geometry.x() + margin.x(), geometry.y() + margin.y(), geometry.width() - margin.width(), geometry.height() - margin.height() }); } auto mWindow::setFramePosition(Position position) -> type& { Geometry margin = signal(frameMargin); return setGeometry({ position.x() + margin.x(), position.y() + margin.y(), state.geometry.width(), state.geometry.height() }); } auto mWindow::setFrameSize(Size size) -> type& { Geometry margin = signal(frameMargin); return setGeometry({ state.geometry.x(), state.geometry.y(), size.width() - margin.width(), size.height() - margin.height() }); } auto mWindow::setFullScreen(bool fullScreen) -> type& { if(fullScreen != state.fullScreen) { state.fullScreen = fullScreen; signal(setFullScreen, fullScreen); } return *this; } auto mWindow::setGeometry(Geometry geometry) -> type& { //round fractional bits of geometry coordinates that window managers cannot display. //the pWindow classes lose this precision and so not doing so here can cause off-by-1 issues. geometry.setX(round(geometry.x())); geometry.setY(round(geometry.y())); geometry.setWidth(round(geometry.width())); geometry.setHeight(round(geometry.height())); state.geometry = geometry; signal(setGeometry, geometry); if(auto& sizable = state.sizable) sizable->setGeometry(sizable->geometry()); return *this; } auto mWindow::setGeometry(Alignment alignment, Size size) -> type& { auto margin = signal(frameMargin); auto width = margin.width() + size.width(); auto height = margin.height() + size.height(); auto workspace = Monitor::workspace(); auto x = workspace.x() + alignment.horizontal() * (workspace.width() - width); auto y = workspace.y() + alignment.vertical() * (workspace.height() - height); setFrameGeometry({(s32)x, (s32)y, (s32)width, (s32)height}); return *this; } auto mWindow::setMaximized(bool maximized) -> type& { state.maximized = maximized; signal(setMaximized, maximized); return *this; } auto mWindow::setMaximumSize(Size size) -> type& { state.maximumSize = size; signal(setMaximumSize, size); return *this; } auto mWindow::setMinimized(bool minimized) -> type& { state.minimized = minimized; signal(setMinimized, minimized); return *this; } auto mWindow::setMinimumSize(Size size) -> type& { state.minimumSize = size; signal(setMinimumSize, size); return *this; } auto mWindow::setModal(bool modal) -> type& { if(state.modal == modal) return *this; state.modal = modal; if(modal) { Application::state().modal++; } else { Application::state().modal--; assert(Application::state().modal >= 0); } signal(setModal, modal); return *this; } auto mWindow::setPosition(Position position) -> type& { return setGeometry({ position.x(), position.y(), state.geometry.width(), state.geometry.height() }); } auto mWindow::setPosition(sWindow relativeTo, Position position) -> type& { if(!relativeTo) return setPosition(position); auto geometry = relativeTo->frameGeometry(); return setFramePosition({ geometry.x() + position.x(), geometry.y() + position.y() }); } auto mWindow::setResizable(bool resizable) -> type& { state.resizable = resizable; signal(setResizable, resizable); return *this; } auto mWindow::setSize(Size size) -> type& { return setGeometry({ state.geometry.x(), state.geometry.y(), size.width(), size.height() }); } auto mWindow::setTitle(const string& title) -> type& { state.title = title; signal(setTitle, title); return *this; } auto mWindow::setAssociatedFile(const string& filename) -> type& { #if defined(PLATFORM_MACOS) signal(setAssociatedFile, filename); #endif return *this; } auto mWindow::setVisible(bool visible) -> type& { mObject::setVisible(visible); if(auto& menuBar = state.menuBar) menuBar->setVisible(menuBar->visible()); if(auto& sizable = state.sizable) sizable->setVisible(sizable->visible()); if(auto& statusBar = state.statusBar) statusBar->setVisible(statusBar->visible()); return *this; } auto mWindow::sizable() const -> Sizable { return state.sizable; } auto mWindow::statusBar() const -> StatusBar { return state.statusBar; } auto mWindow::title() const -> string { return state.title; } #endif ares-126/hiro/core/window.hpp000066400000000000000000000067741415063341600162500ustar00rootroot00000000000000#if defined(Hiro_Window) struct mWindow : mObject { Declare(Window) using mObject::remove; mWindow(); auto append(sMenuBar menuBar) -> type&; auto append(sSizable sizable) -> type&; auto append(sStatusBar statusBar) -> type&; auto backgroundColor() const -> Color; auto dismissable() const -> bool; auto doClose() const -> void; auto doDrop(vector) const -> void; auto doKeyPress(s32) const -> void; auto doKeyRelease(s32) const -> void; auto doMove() const -> void; auto doSize() const -> void; auto droppable() const -> bool; auto frameGeometry() const -> Geometry; auto fullScreen() const -> bool; auto geometry() const -> Geometry; auto handle() const -> uintptr_t; auto maximized() const -> bool; auto maximumSize() const -> Size; auto menuBar() const -> MenuBar; auto minimized() const -> bool; auto minimumSize() const -> Size; auto modal() const -> bool; auto monitor() const -> u32; auto onClose(const function& callback = {}) -> type&; auto onDrop(const function)>& callback = {}) -> type&; auto onKeyPress(const function& callback = {}) -> type&; auto onKeyRelease(const function& callback = {}) -> type&; auto onMove(const function& callback = {}) -> type&; auto onSize(const function& callback = {}) -> type&; auto remove(sMenuBar menuBar) -> type&; auto remove(sSizable sizable) -> type&; auto remove(sStatusBar statusBar) -> type&; auto reset() -> type& override; auto resizable() const -> bool; auto setAlignment(Alignment = Alignment::Center) -> type&; auto setAlignment(sWindow relativeTo, Alignment = Alignment::Center) -> type&; auto setBackgroundColor(Color color = {}) -> type&; auto setDismissable(bool dismissable = true) -> type&; auto setDroppable(bool droppable = true) -> type&; auto setFrameGeometry(Geometry geometry) -> type&; auto setFramePosition(Position position) -> type&; auto setFrameSize(Size size) -> type&; auto setFullScreen(bool fullScreen = true) -> type&; auto setGeometry(Geometry geometry) -> type&; auto setGeometry(Alignment, Size) -> type&; auto setMaximized(bool maximized = true) -> type&; auto setMaximumSize(Size size = {}) -> type&; auto setMinimized(bool minimized = true) -> type&; auto setMinimumSize(Size size = {}) -> type&; auto setModal(bool modal = true) -> type&; auto setPosition(Position) -> type&; auto setPosition(sWindow relativeTo, Position) -> type&; auto setResizable(bool resizable = true) -> type&; auto setSize(Size size) -> type&; auto setTitle(const string& title = "") -> type&; auto setAssociatedFile(const string& filename = "") -> type&; auto setVisible(bool visible = true) -> type& override; auto sizable() const -> Sizable; auto statusBar() const -> StatusBar; auto title() const -> string; //private: struct State { Color backgroundColor; bool dismissable = false; bool droppable = false; bool fullScreen = false; Geometry geometry = {128, 128, 256, 256}; bool maximized = false; Size maximumSize; bool minimized = false; Size minimumSize; sMenuBar menuBar; bool modal = false; function onClose; function)> onDrop; function onKeyPress; function onKeyRelease; function onMove; function onSize; bool resizable = true; sSizable sizable; sStatusBar statusBar; string title; } state; auto destruct() -> void override; }; #endif ares-126/hiro/extension/000077500000000000000000000000001415063341600152765ustar00rootroot00000000000000ares-126/hiro/extension/about-dialog.cpp000066400000000000000000000125111415063341600203510ustar00rootroot00000000000000#if defined(Hiro_AboutDialog) auto AboutDialog::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = {}; return *this; } auto AboutDialog::setAlignment(sWindow relativeTo, Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = relativeTo; return *this; } auto AboutDialog::setCopyright(const string& copyright, const string& uri) -> type& { state.copyright = copyright; state.copyrightURI = uri; return *this; } auto AboutDialog::setDescription(const string& description) -> type& { state.description = description; return *this; } auto AboutDialog::setLicense(const string& license, const string& uri) -> type& { state.license = license; state.licenseURI = uri; return *this; } auto AboutDialog::setLogo(const multiFactorImage& logo) -> type& { state.logo = logo; state.logo.transform(); return *this; } auto AboutDialog::setName(const string& name) -> type& { state.name = name; return *this; } auto AboutDialog::setVersion(const string& version) -> type& { state.version = version; return *this; } auto AboutDialog::setWebsite(const string& website, const string& uri) -> type& { state.website = website; state.websiteURI = uri; return *this; } auto AboutDialog::show() -> void { Window window; window.onClose([&] { window.setModal(false); }); VerticalLayout layout{&window}; layout.setPadding(5_sx, 5_sy); Label nameLabel{&layout, Size{~0, 0}}; nameLabel.setCollapsible(); nameLabel.setAlignment(0.5); nameLabel.setFont(Font().setFamily(Font::Serif).setBold().setSize(36.0)); nameLabel.setText(state.name ? state.name : Application::name()); nameLabel.setVisible((bool)state.name && !(bool)state.logo); Canvas logoCanvas{&layout, Size{~0, state.logo.height()}, 5_sy}; logoCanvas.setCollapsible(); if(state.logo) { logoCanvas.setIcon(state.logo); } else { logoCanvas.setVisible(false); } Label descriptionLabel{&layout, Size{~0, 0}}; descriptionLabel.setCollapsible(); descriptionLabel.setAlignment(0.5); descriptionLabel.setText(state.description); if(!state.description) descriptionLabel.setVisible(false); HorizontalLayout versionLayout{&layout, Size{~0, 0}, 0}; versionLayout.setCollapsible(); Label versionLabel{&versionLayout, Size{~0, 0}, 3_sx}; versionLabel.setAlignment(1.0); versionLabel.setFont(Font().setBold()); versionLabel.setText("Version:"); Label versionValue{&versionLayout, Size{~0, 0}}; versionValue.setAlignment(0.0); versionValue.setText(state.version); if(!state.version) versionLayout.setVisible(false); HorizontalLayout copyrightLayout{&layout, Size{~0, 0}, 0}; copyrightLayout.setCollapsible(); Label copyrightLabel{©rightLayout, Size{~0, 0}, 3_sx}; copyrightLabel.setAlignment(1.0); copyrightLabel.setFont(Font().setBold()); copyrightLabel.setText("Copyright:"); HorizontalLayout copyrightValueLayout{©rightLayout, Size{~0, 0}}; Label copyrightValue{©rightValueLayout, Size{~0, 0}}; copyrightValue.setAlignment(0.0); copyrightValue.setText(state.copyright); if(state.copyrightURI) { copyrightValue.setForegroundColor(SystemColor::Link).setFont(Font().setBold());; copyrightValue.setMouseCursor(MouseCursor::Hand); copyrightValue.onMouseRelease([&](auto button) { if(button == Mouse::Button::Left) invoke(state.copyrightURI); }); } if(!state.copyright) copyrightLayout.setVisible(false); HorizontalLayout licenseLayout{&layout, Size{~0, 0}, 0}; licenseLayout.setCollapsible(); Label licenseLabel{&licenseLayout, Size{~0, 0}, 3_sx}; licenseLabel.setAlignment(1.0); licenseLabel.setFont(Font().setBold()); licenseLabel.setText("License:"); HorizontalLayout licenseValueLayout{&licenseLayout, Size{~0, 0}}; Label licenseValue{&licenseValueLayout, Size{0, 0}}; licenseValue.setAlignment(0.0); licenseValue.setText(state.license); if(state.licenseURI) { licenseValue.setForegroundColor(SystemColor::Link).setFont(Font().setBold());; licenseValue.setMouseCursor(MouseCursor::Hand); licenseValue.onMouseRelease([&](auto button) { if(button == Mouse::Button::Left) invoke(state.licenseURI); }); } if(!state.license) licenseLayout.setVisible(false); HorizontalLayout websiteLayout{&layout, Size{~0, 0}, 0}; websiteLayout.setCollapsible(); Label websiteLabel{&websiteLayout, Size{~0, 0}, 3_sx}; websiteLabel.setAlignment(1.0); websiteLabel.setFont(Font().setBold()); websiteLabel.setText("Website:"); HorizontalLayout websiteValueLayout{&websiteLayout, Size{~0, 0}}; Label websiteValue{&websiteValueLayout, Size{0, 0}}; websiteValue.setAlignment(0.0); websiteValue.setText(state.website); if(state.websiteURI) { websiteValue.setForegroundColor(SystemColor::Link).setFont(Font().setBold());; websiteValue.setMouseCursor(MouseCursor::Hand); websiteValue.onMouseRelease([&](auto button) { if(button == Mouse::Button::Left) invoke(state.websiteURI); }); } if(!state.website) websiteLayout.setVisible(false); window.setTitle({"About ", state.name ? state.name : Application::name()}); window.setSize({max(320_sx, layout.minimumSize().width()), layout.minimumSize().height()}); window.setResizable(false); window.setAlignment(state.relativeTo, state.alignment); window.setDismissable(); window.setVisible(); window.setModal(); window.setVisible(false); } #endif ares-126/hiro/extension/about-dialog.hpp000066400000000000000000000020431415063341600203550ustar00rootroot00000000000000#if defined(Hiro_AboutDialog) struct AboutDialog { using type = AboutDialog; auto setAlignment(Alignment = Alignment::Center) -> type&; auto setAlignment(sWindow relativeTo, Alignment = Alignment::Center) -> type&; auto setCopyright(const string& copyright = "", const string& uri = "") -> type&; auto setDescription(const string& description = "") -> type&; auto setLicense(const string& license = "", const string& uri = "") -> type&; auto setLogo(const multiFactorImage& logo = {}) -> type&; auto setName(const string& name = "") -> type&; auto setVersion(const string& version = "") -> type&; auto setWebsite(const string& website = "", const string& uri = "") -> type&; auto show() -> void; private: struct State { Alignment alignment = Alignment::Center; string copyright; string copyrightURI; string description; string license; string licenseURI; multiFactorImage logo; string name; sWindow relativeTo; string version; string website; string websiteURI; } state; }; #endif ares-126/hiro/extension/browser-dialog.cpp000066400000000000000000000417631415063341600207350ustar00rootroot00000000000000#if defined(Hiro_BrowserDialog) struct BrowserDialogWindow { Application::Namespace tr{"BrowserDialog"}; BrowserDialogWindow(BrowserDialog::State& state) : state(state) {} auto accept() -> void; auto activate() -> void; auto change() -> void; auto context() -> void; auto isObject(const string& name) -> bool; auto isFile(const string& name) -> bool; auto isFolder(const string& name) -> bool; auto isMatch(const string& name) -> bool; auto run() -> BrowserDialog::Response; auto setPath(string path, const string& contains = "") -> void; private: Window window; VerticalLayout layout{&window}; HorizontalLayout pathLayout{&layout, Size{~0, 0}, 5_sx}; LineEdit pathName{&pathLayout, Size{~0, 0}, 0}; Button pathRefresh{&pathLayout, Size{0, 0}, 0}; Button pathHome{&pathLayout, Size{0, 0}, 0}; Button pathUp{&pathLayout, Size{0, 0}, 0}; ListView view{&layout, Size{~0, ~0}, 5_sx}; HorizontalLayout controlLayout{&layout, Size{~0, 0}}; ComboButton filterList{&controlLayout, Size{0, 0}, 0}; Button searchButton{&controlLayout, Size{0, 0}, 0}; LineEdit fileName{&controlLayout, Size{~0, 0}, 5_sx}; ComboButton optionList{&controlLayout, Size{0, 0}, 5_sx}; Button acceptButton{&controlLayout, Size{80_sx, 0}, 5_sx}; Button cancelButton{&controlLayout, Size{80_sx, 0}, 5_sx}; PopupMenu contextMenu; MenuItem renameAction{&contextMenu}; MenuItem removeAction{&contextMenu}; MenuItem createAction{&contextMenu}; MenuSeparator contextSeparator{&contextMenu}; MenuCheckItem showHiddenOption{&contextMenu}; BrowserDialog::State& state; BrowserDialog::Response response; vector> filters; }; //accept button clicked, or enter pressed inside file name field //also called by table view activate after special case handling auto BrowserDialogWindow::accept() -> void { auto batched = view.batched(); if(state.action == "openFile" && batched.size() == 1) { string name = batched[0].text(); if(isFolder(name)) return setPath({state.path, name}); response.selected.append({state.path, name}); } if(state.action == "openFiles" && batched) { string name = batched[0].text(); if(isFolder(name) && batched.size() == 1) return setPath({state.path, name}); for(auto item : batched) { string name = item.text(); if(isFolder(name)) { response.selected.reset(); return; } response.selected.append({state.path, name}); } } if(state.action == "openFolder" && batched.size() == 1) { string name = batched[0].text(); if(!isMatch(name)) return setPath({state.path, name}); response.selected.append({state.path, name, "/"}); } if(state.action == "openObject" && batched.size() == 1) { string name = batched[0].text(); if(!isMatch(name) && isFolder(name)) return setPath({state.path, name}); response.selected.append({state.path, name, isFolder(name) ? "/" : ""}); } if(state.action == "saveFile") { string name = fileName.text(); if(!name || isFolder(name)) return; if(file::exists({state.path, name})) { if(MessageDialog("File already exists. Overwrite it?").question() != "Yes") return; } response.selected.append({state.path, name}); } if(state.action == "selectFolder") { if(!batched) { response.selected.append(state.path); } else if(batched.size() == 1) { string name = batched[0].text(); if(isFolder(name)) response.selected.append({state.path, name, "/"}); } } if(response.selected) window.setModal(false); } //table view item double-clicked, or enter pressed on selected table view item auto BrowserDialogWindow::activate() -> void { auto batched = view.batched(); if(state.action == "saveFile" && batched.size() == 1) { string name = batched[0].text(); if(isFolder(name)) return setPath({state.path, name}); fileName.setText(name); } if(state.action == "selectFolder" && batched.size() == 1) { string name = batched[0].text(); if(isFolder(name)) return setPath({state.path, name}); } accept(); } //table view item changed auto BrowserDialogWindow::change() -> void { auto batched = view.batched(); if(state.action == "openFile") { acceptButton.setEnabled(batched.size() == 1); } if(state.action == "openFiles") { bool enabled = true; for(auto item : batched) enabled &= !isFolder(item.text()); if(batched.size() == 1 && isFolder(batched[0].text())) enabled = true; acceptButton.setEnabled(enabled); } if(state.action == "openFolder") { acceptButton.setEnabled(batched.size() == 1); } if(state.action == "openObject") { acceptButton.setEnabled(batched.size() == 1); } if(state.action == "saveFile") { string result; if(batched.size() == 1) { string name = batched[0].text(); if(!isFolder(name)) result = name; } if(result != fileName.text()) { fileName.setText(result).doChange(); } } if(state.action == "selectFolder") { acceptButton.setEnabled(!batched || (batched.size() == 1 && isFolder(batched[0].text()))); } } auto BrowserDialogWindow::context() -> void { auto batched = view.batched(); if(!batched) { renameAction.setVisible(false); removeAction.setVisible(false); createAction.setVisible(true); } else if(batched.size() == 1) { renameAction.setVisible(true); removeAction.setVisible(true); createAction.setVisible(true); } else { renameAction.setVisible(false); removeAction.setVisible(true); createAction.setVisible(true); } contextMenu.setVisible(); } auto BrowserDialogWindow::isObject(const string& name) -> bool { return inode::exists({state.path, name}); } auto BrowserDialogWindow::isFile(const string& name) -> bool { return file::exists({state.path, name}); } auto BrowserDialogWindow::isFolder(const string& name) -> bool { return directory::exists({state.path, name}); } auto BrowserDialogWindow::isMatch(const string& name) -> bool { if(auto selectedItem = filterList.selected()) { for(auto& filter : filters[selectedItem->offset()]) { if(name.match(filter)) return true; } } return false; } auto BrowserDialogWindow::run() -> BrowserDialog::Response { response = {}; auto document = BML::unserialize(file::read({Path::userSettings(), "hiro/browser-dialog.bml"})); struct Settings { bool showHidden = true; } settings; if(auto node = document["BrowserDialog/ShowHidden"]) settings.showHidden = node.boolean(); layout.setPadding(5_sx, 5_sy); pathName.onActivate([&] { setPath(pathName.text()); }); image iconRefresh{Icon::Action::Refresh}; iconRefresh.scale(16_sx, 16_sy); pathRefresh.setBordered(false).setIcon(iconRefresh).onActivate([&] { setPath(state.path); }); image iconHome{Icon::Go::Home}; iconHome.scale(16_sx, 16_sy); pathHome.setBordered(false).setIcon(iconHome).onActivate([&] { setPath(Path::user()); }); image iconUp{Icon::Go::Up}; iconUp.scale(16_sx, 16_sy); pathUp.setBordered(false).setIcon(iconUp).onActivate([&] { setPath(Location::dir(state.path)); }); view.setBatchable(state.action == "openFiles").onActivate([&] { activate(); }).onChange([&] { change(); }); view.onContext([&] { context(); }); filterList.setCollapsible().setVisible(state.action != "selectFolder").onChange([&] { setPath(state.path); }); for(auto& filter : state.filters) { auto part = filter.split("|", 1L); filterList.append(ComboButtonItem().setText(part.left())); } optionList.setCollapsible().setVisible((bool)state.options).onChange([&] { response.option = optionList.selected().text(); }); for(auto& option : state.options) { optionList.append(ComboButtonItem().setText(option)); } optionList.doChange(); //updates response.option to point to the default (first) option image iconSearch{Icon::Action::Search}; iconSearch.scale(16_sx, 16_sy); searchButton.setIcon(iconSearch).setBordered(false).onActivate([&] { setPath(state.path, fileName.text()); }); fileName.onActivate([&] { string name = fileName.text(); if((state.action == "openFile" || state.action == "openFiles") && isFile(name)) { response.selected.append({state.path, name}); return (void)window.setModal(false); } if((state.action == "openFolder" || state.action == "selectFolder") && isFolder(name)) { response.selected.append({state.path, name}); return (void)window.setModal(false); } if(state.action == "openObject" && isObject(name)) { response.selected.append({state.path, name}); return (void)window.setModal(false); } if(state.action == "saveFile") return accept(); setPath(state.path, name); }).onChange([&] { auto name = fileName.text(); if(state.action == "saveFile") acceptButton.setEnabled(name && !isFolder(name)); }); acceptButton.setEnabled(false).onActivate([&] { accept(); }); if(state.action.beginsWith("open")) acceptButton.setText(tr("Open")); if(state.action.beginsWith("save")) acceptButton.setText(tr("Save")); if(state.action.beginsWith("select")) acceptButton.setText(tr("Select")); cancelButton.setText(tr("Cancel")).onActivate([&] { window.setModal(false); }); if(!state.filters) state.filters.append("All|*"); for(auto& filter : state.filters) { auto part = filter.split("|", 1L); filters.append(part.right().split(":")); } renameAction.setIcon(Icon::Application::TextEditor).setText("Rename ...").onActivate([&] { auto batched = view.batched(); if(batched.size() != 1) return; auto name = batched[0].text(); if(directory::exists({state.path, name})) { if(auto rename = NameDialog() .setTitle({"Rename ", name}) .setText("Enter the new folder name:") .setIcon(Icon::Emblem::Folder) .setAlignment(window) .rename(name) ) { if(name == rename) return; if(!directory::rename({state.path, name}, {state.path, rename})) return (void)MessageDialog() .setTitle("Error") .setText("Failed to rename folder.") .setAlignment(window) .error(); pathRefresh.doActivate(); } } else if(file::exists({state.path, name})) { if(auto rename = NameDialog() .setTitle({"Rename ", name}) .setText("Enter the new file name:") .setIcon(Icon::Emblem::File) .setAlignment(window) .rename(name) ) { if(name == rename) return; if(!file::rename({state.path, name}, {state.path, rename})) return (void)MessageDialog() .setTitle("Error") .setText("Failed to rename file.") .setAlignment(window) .error(); pathRefresh.doActivate(); } } }); removeAction.setIcon(Icon::Action::Remove).setText("Delete ...").onActivate([&] { auto batched = view.batched(); if(!batched) return; if(MessageDialog() .setTitle("Remove Selected") .setText({"Are you sure you want to permanently delete the selected item", batched.size() == 1 ? "" : "s", "?"}) .setAlignment(window) .question() == "No") return; for(auto& item : batched) { auto name = item.text(); if(directory::exists({state.path, name})) { if(!directory::remove({state.path, name})) { if(MessageDialog() .setTitle("Warning") .setText({"Failed to remove ", name, "\n\nContinue trying to remove remaining items?"}) .question() == "No") break; } } else if(file::exists({state.path, name})) { if(!file::remove({state.path, name})) { if(MessageDialog() .setTitle("Warning") .setText({"Failed to remove ", name, "\n\nContinue trying to remove remaining items?"}) .question() == "No") break; } } } pathRefresh.doActivate(); }); createAction.setIcon(Icon::Action::NewFolder).setText("Create Folder ...").onActivate([&] { if(auto name = NameDialog() .setTitle("Create Folder") .setText("Enter a new folder name:") .setIcon(Icon::Emblem::Folder) .setAlignment(window) .create() ) { directory::create({state.path, name}); pathRefresh.doActivate(); } }); showHiddenOption.setChecked(settings.showHidden).setText("Show Hidden").onToggle([&] { auto document = BML::unserialize(file::read({Path::userSettings(), "hiro/browser-dialog.bml"})); document("BrowserDialog/ShowHidden").setValue(showHiddenOption.checked()); directory::create({Path::userSettings(), "hiro/"}); file::write({Path::userSettings(), "hiro/browser-dialog.bml"}, BML::serialize(document)); pathRefresh.doActivate(); }); setPath(state.path); window.onClose([&] { window.setModal(false); }); window.setTitle(state.title); window.setSize({640_sx, 480_sy}); window.setAlignment(state.relativeTo, state.alignment); window.setDismissable(); window.setVisible(); fileName.setText(state.name).setFocused().doChange(); Application::processEvents(); view->resizeColumns(); window.setModal(); window.setVisible(false); return response; } auto BrowserDialogWindow::setPath(string path, const string& contains) -> void { path.transform("\\", "/"); if((path || Path::root() == "/") && !path.endsWith("/")) path.append("/"); pathName.setText(state.path = path); view.reset(); auto contents = directory::icontents(path); for(auto content : contents) { bool isFolder = content.endsWith("/"); if(isFolder) { content.trimRight("/", 1L); if(state.action == "openFolder" || state.action == "openObject") { if(isMatch(content)) continue; } } else { continue; } if(!showHiddenOption.checked() && directory::hidden({state.path, content})) continue; view.append(ListViewItem().setText(content).setIcon(Icon::Emblem::Folder)); } for(auto content : contents) { bool isFolder = content.endsWith("/"); if(isFolder) { content.trimRight("/", 1L); if(state.action != "openFolder" && state.action != "openObject") continue; } else { if(state.action == "openFolder") continue; } if(!isMatch(content)) continue; if(contains && !content.ifind(contains)) continue; if(!showHiddenOption.checked() && file::hidden({state.path, content})) continue; view.append(ListViewItem().setText(content).setIcon(isFolder ? (image)Icon::Action::Open : (image)Icon::Emblem::File)); } Application::processEvents(); view->resizeColumns(); //todo: on Windows, adding items may add vertical scrollbar; this hack corrects column width view.doChange(); } // BrowserDialog::BrowserDialog() { } auto BrowserDialog::alignment() const -> Alignment { return state.alignment; } auto BrowserDialog::alignmentWindow() const -> Window { return state.relativeTo; } auto BrowserDialog::filters() const -> vector { return state.filters; } auto BrowserDialog::openFile() -> string { state.action = "openFile"; if(!state.title) state.title = "Open File"; if(auto result = _run()) return result.left(); return {}; } auto BrowserDialog::openFiles() -> vector { state.action = "openFiles"; if(!state.title) state.title = "Open Files"; if(auto result = _run()) return result; return {}; } auto BrowserDialog::openFolder() -> string { state.action = "openFolder"; if(!state.title) state.title = "Open Folder"; if(auto result = _run()) return result.left(); return {}; } auto BrowserDialog::openObject() -> string { state.action = "openObject"; if(!state.title) state.title = "Open Object"; if(auto result = _run()) return result.left(); return {}; } auto BrowserDialog::option() -> string { return response.option; } auto BrowserDialog::path() const -> string { return state.path; } auto BrowserDialog::saveFile() -> string { state.action = "saveFile"; if(!state.title) state.title = "Save File"; if(auto result = _run()) return result.left(); return {}; } auto BrowserDialog::selected() -> vector { return response.selected; } auto BrowserDialog::selectFolder() -> string { state.action = "selectFolder"; if(!state.title) state.title = "Select Folder"; if(auto result = _run()) return result.left(); return {}; } auto BrowserDialog::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = {}; return *this; } auto BrowserDialog::setAlignment(sWindow relativeTo, Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = relativeTo; return *this; } auto BrowserDialog::setFilters(const vector& filters) -> type& { state.filters = filters; return *this; } auto BrowserDialog::setName(const string& name) -> type& { state.name = name; return *this; } auto BrowserDialog::setOptions(const vector& options) -> type& { state.options = options; return *this; } auto BrowserDialog::setPath(const string& path) -> type& { state.path = path; return *this; } auto BrowserDialog::setTitle(const string& title) -> type& { state.title = title; return *this; } auto BrowserDialog::title() const -> string { return state.title; } auto BrowserDialog::_run() -> vector { if(!state.path) state.path = Path::user(); response = BrowserDialogWindow(state).run(); return response.selected; } #endif ares-126/hiro/extension/browser-dialog.hpp000066400000000000000000000030461415063341600207320ustar00rootroot00000000000000#if defined(Hiro_BrowserDialog) struct BrowserDialogWindow; struct BrowserDialog { using type = BrowserDialog; BrowserDialog(); auto alignment() const -> Alignment; auto alignmentWindow() const -> Window; auto filters() const -> vector; auto openFile() -> string; //one existing file auto openFiles() -> vector; //any existing files auto openFolder() -> string; //one existing folder auto openObject() -> string; //one existing file or folder auto option() -> string; auto path() const -> string; auto saveFile() -> string; //one file auto selected() -> vector; auto selectFolder() -> string; //one existing folder auto setAlignment(Alignment = Alignment::Center) -> type&; auto setAlignment(sWindow relativeTo, Alignment = Alignment::Center) -> type&; auto setFilters(const vector& filters = {}) -> type&; auto setName(const string& name = "") -> type&; auto setOptions(const vector& options = {}) -> type&; auto setPath(const string& path = "") -> type&; auto setTitle(const string& title = "") -> type&; auto title() const -> string; private: struct State { string action; Alignment alignment = Alignment::Center; vector filters = {"*"}; string name; vector options; string path; sWindow relativeTo; string title; } state; struct Response { string option; vector selected; } response; auto _run() -> vector; friend class BrowserDialogWindow; }; #endif ares-126/hiro/extension/extension.cpp000066400000000000000000000007571415063341600200270ustar00rootroot00000000000000#include "extension.hpp" using namespace nall; namespace hiro { #include "../resource/resource.cpp" #include "../resource/icon.cpp" #include "fixed-layout.cpp" #include "horizontal-layout.cpp" #include "vertical-layout.cpp" #include "table-layout.cpp" #include "horizontal-resize-grip.cpp" #include "vertical-resize-grip.cpp" #include "list-view.cpp" #include "message-dialog.cpp" #include "name-dialog.cpp" #include "browser-dialog.cpp" #include "about-dialog.cpp" } ares-126/hiro/extension/extension.hpp000066400000000000000000000007271415063341600200310ustar00rootroot00000000000000namespace hiro { #include "../resource/resource.hpp" #include "../resource/icon.hpp" #include "fixed-layout.hpp" #include "horizontal-layout.hpp" #include "vertical-layout.hpp" #include "table-layout.hpp" #include "horizontal-resize-grip.hpp" #include "vertical-resize-grip.hpp" #include "list-view.hpp" #include "shared.hpp" #include "message-dialog.hpp" #include "name-dialog.hpp" #include "browser-dialog.hpp" #include "about-dialog.hpp" } ares-126/hiro/extension/fixed-layout.cpp000066400000000000000000000102371415063341600204170ustar00rootroot00000000000000#if defined(Hiro_FixedLayout) auto mFixedLayout::append(sSizable sizable, Geometry geometry) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return *this; } FixedLayoutCell cell; cell->setSizable(sizable); cell->setGeometry(geometry); cell->setParent(this, cellCount()); state.cells.append(cell); return synchronize(); } auto mFixedLayout::cell(u32 position) const -> FixedLayoutCell { return state.cells(position, {}); } auto mFixedLayout::cell(sSizable sizable) const -> FixedLayoutCell { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return cell; } return {}; } auto mFixedLayout::cells() const -> vector { return state.cells; } auto mFixedLayout::cellCount() const -> u32 { return state.cells.size(); } auto mFixedLayout::destruct() -> void { for(auto& cell : state.cells) cell->destruct(); return mSizable::destruct(); } auto mFixedLayout::minimumSize() const -> Size { f32 width = 0, height = 0; for(auto& cell : state.cells) { width = max(width, cell.sizable().minimumSize().width()); height = max(height, cell.sizable().minimumSize().height()); } return {width, height}; } auto mFixedLayout::remove(sSizable sizable) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return remove(cell); } return *this; } auto mFixedLayout::remove(sFixedLayoutCell cell) -> type& { if(cell->parent() != this) return *this; auto offset = cell->offset(); cell->setParent(); state.cells.remove(offset); for(u32 n : range(offset, cellCount())) state.cells[n]->adjustOffset(-1); return synchronize(); } auto mFixedLayout::reset() -> type& { while(state.cells) remove(state.cells.right()); return synchronize(); } auto mFixedLayout::resize() -> type& { setGeometry(geometry()); return *this; } auto mFixedLayout::setEnabled(bool enabled) -> type& { mSizable::setEnabled(enabled); for(auto& cell : state.cells) cell.sizable().setEnabled(cell.sizable().enabled()); return *this; } auto mFixedLayout::setFont(const Font& font) -> type& { mSizable::setFont(font); for(auto& cell : state.cells) cell.sizable().setFont(cell.sizable().font()); return *this; } auto mFixedLayout::setParent(mObject* parent, s32 offset) -> type& { for(auto& cell : reverse(state.cells)) cell->destruct(); mSizable::setParent(parent, offset); for(auto& cell : state.cells) cell->setParent(this, cell->offset()); return *this; } auto mFixedLayout::setVisible(bool visible) -> type& { mSizable::setVisible(visible); for(auto& cell : state.cells) cell.sizable().setVisible(cell.sizable().visible()); return synchronize(); } auto mFixedLayout::synchronize() -> type& { setGeometry(geometry()); return *this; } // auto mFixedLayoutCell::destruct() -> void { if(auto& sizable = state.sizable) sizable->destruct(); mObject::destruct(); } auto mFixedLayoutCell::geometry() const -> Geometry { return state.geometry; } auto mFixedLayoutCell::setEnabled(bool enabled) -> type& { mObject::setEnabled(enabled); state.sizable->setEnabled(state.sizable->enabled()); return *this; } auto mFixedLayoutCell::setFont(const Font& font) -> type& { mObject::setFont(font); state.sizable->setFont(state.sizable->font()); return *this; } auto mFixedLayoutCell::setGeometry(Geometry geometry) -> type& { state.geometry = geometry; return synchronize(); } auto mFixedLayoutCell::setParent(mObject* parent, s32 offset) -> type& { state.sizable->destruct(); mObject::setParent(parent, offset); state.sizable->setParent(this, 0); return *this; } auto mFixedLayoutCell::setSizable(sSizable sizable) -> type& { state.sizable = sizable; return synchronize(); } auto mFixedLayoutCell::setVisible(bool visible) -> type& { mObject::setVisible(visible); state.sizable->setVisible(state.sizable->visible()); return *this; } auto mFixedLayoutCell::sizable() const -> Sizable { return state.sizable ? state.sizable : Sizable(); } auto mFixedLayoutCell::synchronize() -> type& { if(auto parent = this->parent()) { if(auto fixedLayout = dynamic_cast(parent)) { fixedLayout->synchronize(); } } return *this; } #endif ares-126/hiro/extension/fixed-layout.hpp000066400000000000000000000034201415063341600204200ustar00rootroot00000000000000#if defined(Hiro_FixedLayout) struct FixedLayout; struct FixedLayoutCell; struct mFixedLayout; struct mFixedLayoutCell; using sFixedLayout = shared_pointer; using sFixedLayoutCell = shared_pointer; struct mFixedLayout : mSizable { using type = mFixedLayout; using mSizable::remove; auto append(sSizable sizable, Geometry geometry) -> type&; auto cell(u32 position) const -> FixedLayoutCell; auto cell(sSizable sizable) const -> FixedLayoutCell; auto cells() const -> vector; auto cellCount() const -> u32; auto minimumSize() const -> Size override; auto remove(sSizable sizable) -> type&; auto remove(sFixedLayoutCell cell) -> type&; auto reset() -> type& override; auto resize() -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setVisible(bool visible) ->type& override; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { vector cells; } state; }; struct mFixedLayoutCell : mObject { using type = mFixedLayoutCell; auto geometry() const -> Geometry; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setGeometry(Geometry geometry) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSizable(sSizable sizable) -> type&; auto setVisible(bool visible) -> type& override; auto sizable() const -> Sizable; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { Geometry geometry; sSizable sizable; } state; friend class mFixedLayout; }; #endif ares-126/hiro/extension/horizontal-layout.cpp000066400000000000000000000213701415063341600215110ustar00rootroot00000000000000#if defined(Hiro_HorizontalLayout) auto mHorizontalLayout::alignment() const -> maybe { return state.alignment; } auto mHorizontalLayout::append(sSizable sizable, Size size, f32 spacing) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return *this; } HorizontalLayoutCell cell; cell->setSizable(sizable); cell->setSize(size); cell->setSpacing(spacing); cell->setParent(this, cellCount()); state.cells.append(cell); return synchronize(); } auto mHorizontalLayout::cell(u32 position) const -> HorizontalLayoutCell { return state.cells(position, {}); } auto mHorizontalLayout::cell(sSizable sizable) const -> HorizontalLayoutCell { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return cell; } return {}; } auto mHorizontalLayout::cells() const -> vector { return state.cells; } auto mHorizontalLayout::cellCount() const -> u32 { return state.cells.size(); } auto mHorizontalLayout::destruct() -> void { for(auto& cell : state.cells) cell->destruct(); mSizable::destruct(); } auto mHorizontalLayout::minimumSize() const -> Size { f32 width = 0; f32 spacing = 0; for(auto index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(cell.size().width() == Size::Minimum || cell.size().width() == Size::Maximum) { width += cell.sizable().minimumSize().width(); } else { width += cell.size().width(); } width += spacing; spacing = cell.spacing(); } f32 height = 0; for(auto index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(cell.size().height() == Size::Minimum || cell.size().height() == Size::Maximum) { height = max(height, cell.sizable().minimumSize().height()); continue; } height = max(height, cell.size().height()); } return { padding().x() + width + padding().width(), padding().y() + height + padding().height() }; } auto mHorizontalLayout::padding() const -> Geometry { return state.padding; } auto mHorizontalLayout::remove(sSizable sizable) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return remove(cell); } return *this; } auto mHorizontalLayout::remove(sHorizontalLayoutCell cell) -> type& { if(cell->parent() != this) return *this; auto offset = cell->offset(); cell->setParent(); state.cells.remove(offset); for(u32 n : range(offset, cellCount())) state.cells[n]->adjustOffset(-1); return synchronize(); } auto mHorizontalLayout::reset() -> type& { while(state.cells) remove(state.cells.right()); return synchronize(); } auto mHorizontalLayout::resize() -> type& { setGeometry(geometry()); return *this; } auto mHorizontalLayout::setAlignment(maybe alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mHorizontalLayout::setEnabled(bool enabled) -> type& { mSizable::setEnabled(enabled); for(auto& cell : state.cells) cell.sizable().setEnabled(cell.sizable().enabled()); return *this; } auto mHorizontalLayout::setFont(const Font& font) -> type& { mSizable::setFont(font); for(auto& cell : state.cells) cell.sizable().setFont(cell.sizable().font()); return *this; } auto mHorizontalLayout::setGeometry(Geometry requestedGeometry) -> type& { //if(!visible(true)) return mSizable::setGeometry(requestedGeometry), *this; auto geometry = requestedGeometry; geometry.setX(geometry.x() + padding().x()); geometry.setY(geometry.y() + padding().y()); geometry.setWidth (geometry.width() - padding().x() - padding().width()); geometry.setHeight(geometry.height() - padding().y() - padding().height()); vector widths; widths.resize(cellCount()); u32 maximumWidths = 0; for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; f32 width = 0; if(cell.size().width() == Size::Maximum) { width = Size::Maximum; maximumWidths++; } else if(cell.size().width() == Size::Minimum) { width = cell.sizable().minimumSize().width(); } else { width = cell.size().width(); } widths[index] = width; } f32 fixedWidth = 0; f32 spacing = 0; for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(widths[index] != Size::Maximum) fixedWidth += widths[index]; fixedWidth += spacing; spacing = cell.spacing(); } f32 maximumWidth = (geometry.width() - fixedWidth) / maximumWidths; for(auto& width : widths) { if(width == Size::Maximum) width = maximumWidth; } f32 height = 0; for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(cell.size().height() == Size::Maximum) { height = geometry.height(); break; } else if(cell.size().height() == Size::Minimum) { height = max(height, cell.sizable().minimumSize().height()); } else { height = max(height, cell.size().height()); } } f32 geometryX = geometry.x(); f32 geometryY = geometry.y(); for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; f32 geometryWidth = widths[index]; f32 geometryHeight = height; auto alignment = cell.alignment(); if(!alignment) alignment = this->alignment(); if(!alignment) alignment = 0.5; f32 cellWidth = geometryWidth; f32 cellHeight = cell.size().height(); if(cellHeight == Size::Minimum) cellHeight = cell.sizable()->minimumSize().height(); if(cellHeight == Size::Maximum) cellHeight = geometryHeight; f32 cellX = geometryX; f32 cellY = geometryY + alignment() * (geometryHeight - cellHeight); cell.sizable().setGeometry({cellX, cellY, cellWidth, cellHeight}); geometryX += geometryWidth + cell.spacing(); } mSizable::setGeometry(requestedGeometry); return *this; } auto mHorizontalLayout::setPadding(Geometry padding) -> type& { state.padding = padding; return synchronize(); } auto mHorizontalLayout::setParent(mObject* parent, s32 offset) -> type& { for(auto& cell : reverse(state.cells)) cell->destruct(); mSizable::setParent(parent, offset); for(auto& cell : state.cells) cell->setParent(this, cell->offset()); return *this; } auto mHorizontalLayout::setSpacing(f32 spacing) -> type& { state.spacing = spacing; return synchronize(); } auto mHorizontalLayout::setVisible(bool visible) -> type& { mSizable::setVisible(visible); for(auto& cell : state.cells) cell.sizable().setVisible(cell.sizable().visible()); return synchronize(); } auto mHorizontalLayout::spacing() const -> f32 { return state.spacing; } auto mHorizontalLayout::synchronize() -> type& { setGeometry(geometry()); return *this; } // auto mHorizontalLayoutCell::alignment() const -> maybe { return state.alignment; } auto mHorizontalLayoutCell::collapsible() const -> bool { if(state.sizable) return state.sizable->collapsible() && !state.sizable->visible(); return false; } auto mHorizontalLayoutCell::destruct() -> void { if(auto& sizable = state.sizable) sizable->destruct(); mObject::destruct(); } auto mHorizontalLayoutCell::setAlignment(maybe alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mHorizontalLayoutCell::setEnabled(bool enabled) -> type& { mObject::setEnabled(enabled); state.sizable->setEnabled(state.sizable->enabled()); return *this; } auto mHorizontalLayoutCell::setFont(const Font& font) -> type& { mObject::setFont(font); state.sizable->setFont(state.sizable->font()); return *this; } auto mHorizontalLayoutCell::setParent(mObject* parent, s32 offset) -> type& { state.sizable->destruct(); mObject::setParent(parent, offset); state.sizable->setParent(this, 0); return *this; } auto mHorizontalLayoutCell::setSizable(sSizable sizable) -> type& { state.sizable = sizable; return synchronize(); } auto mHorizontalLayoutCell::setSize(Size size) -> type& { state.size = size; return synchronize(); } auto mHorizontalLayoutCell::setSpacing(f32 spacing) -> type& { state.spacing = spacing; return synchronize(); } auto mHorizontalLayoutCell::setVisible(bool visible) -> type& { mObject::setVisible(visible); state.sizable->setVisible(state.sizable->visible()); return *this; } auto mHorizontalLayoutCell::sizable() const -> Sizable { return state.sizable ? state.sizable : Sizable(); } auto mHorizontalLayoutCell::size() const -> Size { return state.size; } auto mHorizontalLayoutCell::spacing() const -> f32 { return state.spacing; } auto mHorizontalLayoutCell::synchronize() -> type& { if(auto parent = this->parent()) { if(auto horizontalLayout = dynamic_cast(parent)) { horizontalLayout->synchronize(); } } return *this; } #endif ares-126/hiro/extension/horizontal-layout.hpp000066400000000000000000000047211415063341600215170ustar00rootroot00000000000000#if defined(Hiro_HorizontalLayout) struct HorizontalLayout; struct HorizontalLayoutCell; struct mHorizontalLayout; struct mHorizontalLayoutCell; using sHorizontalLayout = shared_pointer; using sHorizontalLayoutCell = shared_pointer; struct mHorizontalLayout : mSizable { using type = mHorizontalLayout; using mSizable::remove; auto alignment() const -> maybe; auto append(sSizable sizable, Size size, f32 spacing = 5_sy) -> type&; auto cell(u32 position) const -> HorizontalLayoutCell; auto cell(sSizable sizable) const -> HorizontalLayoutCell; auto cells() const -> vector; auto cellCount() const -> u32; auto minimumSize() const -> Size override; auto padding() const -> Geometry; auto remove(sSizable sizable) -> type&; auto remove(sHorizontalLayoutCell cell) -> type&; auto reset() -> type& override; auto resize() -> type&; auto setAlignment(maybe alignment) -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setGeometry(Geometry geometry) -> type& override; auto setPadding(Geometry padding) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSpacing(f32 spacing) -> type&; auto setVisible(bool visible) -> type& override; auto spacing() const -> f32; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { maybe alignment; vector cells; Geometry padding; f32 spacing = 5_sx; } state; }; struct mHorizontalLayoutCell : mObject { using type = mHorizontalLayoutCell; auto alignment() const -> maybe; auto collapsible() const -> bool; auto setAlignment(maybe alignment) -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSizable(sSizable sizable) -> type&; auto setSize(Size size) -> type&; auto setSpacing(f32 spacing) -> type&; auto setVisible(bool visible) -> type& override; auto sizable() const -> Sizable; auto size() const -> Size; auto spacing() const -> f32; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { maybe alignment; sSizable sizable; Size size; f32 spacing = 5_sx; } state; friend class mHorizontalLayout; }; #endif ares-126/hiro/extension/horizontal-resize-grip.cpp000066400000000000000000000031261415063341600224330ustar00rootroot00000000000000#if defined(Hiro_HorizontalResizeGrip) mHorizontalResizeGrip::mHorizontalResizeGrip() { image icon; icon.allocate(5, 15); for(u32 y : range(icon.height())) { auto data = icon.data() + y * icon.pitch(); icon.write(data, 0x00000000); data += icon.stride(); icon.write(data, 0xff9f9f9f); data += icon.stride(); icon.write(data, 0x00000000); data += icon.stride(); icon.write(data, 0xff9f9f9f); data += icon.stride(); icon.write(data, 0x00000000); data += icon.stride(); } mCanvas::setIcon(icon); mCanvas::setMouseCursor(MouseCursor::HorizontalResize); mCanvas::onMousePress([&](auto button) { if(button == Mouse::Button::Left && !state.timer.enabled()) { doActivate(); state.offset = 0; state.origin = Mouse::position(); state.timer.setEnabled(); } }); state.timer.setInterval(10).onActivate([&] { if(!Mouse::pressed(Mouse::Button::Left)) return (void)state.timer.setEnabled(false); auto position = Mouse::position(); auto offset = position.x() - state.origin.x(); if(offset != state.offset) doResize(offset), offset = state.offset; }); } auto mHorizontalResizeGrip::doActivate() const -> void { if(state.onActivate) state.onActivate(); } auto mHorizontalResizeGrip::doResize(s32 offset) const -> void { if(state.onResize) state.onResize(offset); } auto mHorizontalResizeGrip::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mHorizontalResizeGrip::onResize(const function& callback) -> type& { state.onResize = callback; return *this; } #endif ares-126/hiro/extension/horizontal-resize-grip.hpp000066400000000000000000000012231415063341600224340ustar00rootroot00000000000000#if defined(Hiro_HorizontalResizeGrip) struct HorizontalResizeGrip; struct mHorizontalResizeGrip; using sHorizontalResizeGrip = shared_pointer; struct mHorizontalResizeGrip : mCanvas { using type = mHorizontalResizeGrip; mHorizontalResizeGrip(); auto doActivate() const -> void; auto doResize(s32 offset) const -> void; auto onActivate(const function& callback) -> type&; auto onResize(const function& callback) -> type&; //private: struct State { function onActivate; function onResize; s32 offset = 0; Position origin; Timer timer; } state; }; #endif ares-126/hiro/extension/list-view.cpp000066400000000000000000000062211415063341600177260ustar00rootroot00000000000000#if defined(Hiro_ListView) mListView::mListView() { mTableView::onActivate([&](auto) { doActivate(); }); mTableView::onChange([&] { doChange(); }); mTableView::onContext([&](auto cell) { doContext(); }); mTableView::onToggle([&](TableViewCell cell) { if(auto item = cell->parentTableViewItem()) { if(auto shared = item->instance.acquire()) { doToggle(ListViewItem{shared}); } } }); append(TableViewColumn().setExpandable()); } auto mListView::batched() const -> vector { auto batched = mTableView::batched(); vector result; for(auto item : batched) result.append(ListViewItem{item}); return result; } auto mListView::doActivate() const -> void { if(state.onActivate) state.onActivate(); } auto mListView::doChange() const -> void { if(state.onChange) state.onChange(); } auto mListView::doContext() const -> void { if(state.onContext) state.onContext(); } auto mListView::doToggle(ListViewItem item) const -> void { if(state.onToggle) state.onToggle(item); } auto mListView::item(u32 position) const -> ListViewItem { return ListViewItem{mTableView::item(position)}; } auto mListView::items() const -> vector { auto items = mTableView::items(); vector result; for(auto item : items) result.append(ListViewItem{item}); return result; } auto mListView::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mListView::onChange(const function& callback) -> type& { state.onChange = callback; return *this; } auto mListView::onContext(const function& callback) -> type& { state.onContext = callback; return *this; } auto mListView::onToggle(const function& callback) -> type& { state.onToggle = callback; return *this; } auto mListView::reset() -> type& { mTableView::reset(); append(TableViewColumn().setExpandable()); return *this; } auto mListView::resizeColumn() -> type& { mTableView::resizeColumns(); return *this; } auto mListView::selected() const -> ListViewItem { return ListViewItem{mTableView::selected()}; } auto mListView::setVisible(bool visible) -> type& { mTableView::setVisible(visible); return *this; } // mListViewItem::mListViewItem() { append(TableViewCell()); } auto mListViewItem::checkable() const -> bool { return cell(0).checkable(); } auto mListViewItem::checked() const -> bool { return cell(0).checked(); } auto mListViewItem::icon() const -> multiFactorImage { return cell(0).icon(); } auto mListViewItem::reset() -> type& { mTableViewItem::reset(); append(TableViewCell()); return *this; } auto mListViewItem::setCheckable(bool checkable) -> type& { cell(0).setCheckable(checkable); return *this; } auto mListViewItem::setChecked(bool checked) -> type& { cell(0).setChecked(checked); return *this; } auto mListViewItem::setIcon(const multiFactorImage& icon) -> type& { cell(0).setIcon(icon); return *this; } auto mListViewItem::setText(const string& text) -> type& { cell(0).setText(text); return *this; } auto mListViewItem::text() const -> string { return cell(0).text(); } #endif ares-126/hiro/extension/list-view.hpp000066400000000000000000000033371415063341600177400ustar00rootroot00000000000000#if defined(Hiro_ListView) struct ListView; struct ListViewItem; struct mListView; struct mListViewItem; using sListView = shared_pointer; using sListViewItem = shared_pointer; struct mListView : mTableView { using type = mListView; using mTableView::append; using mTableView::remove; mListView(); auto batched() const -> vector; auto doActivate() const -> void; auto doChange() const -> void; auto doContext() const -> void; auto doToggle(ListViewItem) const -> void; auto item(u32 position) const -> ListViewItem; auto items() const -> vector; auto onActivate(const function& callback) -> type&; auto onChange(const function& callback) -> type&; auto onContext(const function& callback) -> type&; auto onToggle(const function& callback) -> type&; auto reset() -> type& override; auto resizeColumn() -> type&; auto selected() const -> ListViewItem; auto setVisible(bool visible = true) -> type& override; //private: struct State { function onActivate; function onChange; function onContext; function onToggle; } state; }; struct mListViewItem : mTableViewItem { using type = mListViewItem; using mTableViewItem::append; using mTableViewItem::remove; mListViewItem(); auto checkable() const -> bool; auto checked() const -> bool; auto icon() const -> multiFactorImage; auto reset() -> type&; auto setCheckable(bool checkable) -> type&; auto setChecked(bool checked) -> type&; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setText(const string& text) -> type&; auto text() const -> string; }; #endif ares-126/hiro/extension/message-dialog.cpp000066400000000000000000000076711415063341600206760ustar00rootroot00000000000000#if defined(Hiro_MessageDialog) MessageDialog::MessageDialog(const string& text) { state.text = text; } auto MessageDialog::checked() const -> bool { return state.checked; } auto MessageDialog::error(const vector& buttons) -> string { state.buttons = buttons; state.icon = Icon::Prompt::Error; return _run(); } auto MessageDialog::information(const vector& buttons) -> string { state.buttons = buttons; state.icon = Icon::Prompt::Information; return _run(); } auto MessageDialog::question(const vector& buttons) -> string { state.buttons = buttons; state.icon = Icon::Prompt::Question; return _run(); } auto MessageDialog::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = {}; return *this; } auto MessageDialog::setAlignment(sWindow relativeTo, Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = relativeTo; return *this; } auto MessageDialog::setChecked(bool checked) -> type& { state.checked = checked; return *this; } auto MessageDialog::setOption(const string& option) -> type& { state.option = option; return *this; } auto MessageDialog::setText(const string& text) -> type& { state.text = text; return *this; } auto MessageDialog::setTitle(const string& title) -> type& { state.title = title; return *this; } auto MessageDialog::warning(const vector& buttons) -> string { state.buttons = buttons; state.icon = Icon::Prompt::Warning; return _run(); } auto MessageDialog::_run() -> string { if(!state.buttons) return {}; //nothing to do Application::Namespace tr{"MessageDialog"}; Window window; VerticalLayout layout{&window}; HorizontalLayout messageLayout{&layout, Size{~0, 0}, 5_sy}; VerticalLayout messageIconLayout{&messageLayout, Size{16_sx, ~0}, 5_sx}; Canvas messageIcon{&messageIconLayout, Size{16_sx, 16_sy}, 0}; Widget messageIconSpacer{&messageIconLayout, Size{16_sx, ~0}}; Label messageText{&messageLayout, Size{~0, 0}}; Widget optionSpacer{&layout, Size{0, 0}}; CheckLabel optionText{&layout, Size{~0, 0}}; HorizontalLayout controlLayout{&layout, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}}; layout.setPadding(5_sx, 5_sy); image icon{state.icon}; icon.scale(16_sx, 16_sy); messageIcon.setIcon(icon); messageText.setText(state.text); optionSpacer.setCollapsible().setVisible((bool)state.option); optionText.setCollapsible().setChecked(state.checked).setText(state.option).setVisible((bool)state.option).onToggle([&] { state.checked = optionText.checked(); }); for(auto n : range(state.buttons.size())) { Button button{&controlLayout, Size{80_sx, 0}, 5_sx}; button.onActivate([&, n] { state.response = state.buttons[n]; window.setModal(false); }); button.setText(tr(state.buttons[n])); button.setFocused(); //the last button will have effective focus } s32 widthMessage = 5_sx + 16 + 5_sx + Font().size(state.text).width() + 5_sx; s32 widthButtons = 5_sx + state.buttons.size() * 85_sx; s32 width = max(320_sx, widthMessage, widthButtons); window.onClose([&] { //if the dialog is dismissed (escape pressed, or window manager close button clicked), //set the response to the last button shown (which is also the default selected button), //and set a flag to indicate that the dialog was dismissed to the caller. //note that the safest option should always be the last option in the buttons list. if(!state.response) { state.response = state.buttons.last(); state.dismissed = true; } window.setModal(false); }); window.setTitle(state.title); window.setResizable(false); window.setSize({width, layout.minimumSize().height()}); window.setAlignment(state.relativeTo, state.alignment); window.setDismissable(); window.setVisible(); window.setModal(); window.setVisible(false); return state.response; } #endif ares-126/hiro/extension/message-dialog.hpp000066400000000000000000000021551415063341600206730ustar00rootroot00000000000000#if defined(Hiro_MessageDialog) struct MessageDialog { using type = MessageDialog; MessageDialog(const string& text = ""); auto checked() const -> bool; auto dismissed() const -> bool; auto error(const vector& buttons = {"Ok"}) -> string; auto information(const vector& buttons = {"Ok"}) -> string; auto question(const vector& buttons = {"Yes", "No"}) -> string; auto setAlignment(Alignment = Alignment::Center) -> type&; auto setAlignment(sWindow relativeTo, Alignment = Alignment::Center) -> type&; auto setChecked(bool checked = true) -> type&; auto setOption(const string& option = "") -> type&; auto setText(const string& text = "") -> type&; auto setTitle(const string& title = "") -> type&; auto warning(const vector& buttons = {"Ok"}) -> string; private: struct State { Alignment alignment = Alignment::Center; vector buttons; bool checked = false; bool dismissed = false; image icon; string option; sWindow relativeTo; string response; string text; string title; } state; auto _run() -> string; }; #endif ares-126/hiro/extension/name-dialog.cpp000066400000000000000000000036771415063341600201740ustar00rootroot00000000000000#if defined(Hiro_NameDialog) NameDialog::NameDialog() { layout.setPadding(5_sx, 5_sy); typeIcon.setCollapsible(); nameValue.onActivate([&] { acceptButton.doActivate(); }); acceptButton.onActivate([&] { response = nameValue.text(); window.doClose(); }); cancelButton.setText("Cancel").onActivate([&] { window.doClose(); }); window.onClose([&] { window.setModal(false); window.setVisible(false); }); window.setDismissable(); } auto NameDialog::create(string name) -> string { return show("Create", name); } auto NameDialog::rename(string name) -> string { return show("Rename", name); } auto NameDialog::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = {}; return *this; } auto NameDialog::setAlignment(sWindow relativeTo, Alignment alignment) -> type& { state.alignment = alignment; state.relativeTo = relativeTo; return *this; } auto NameDialog::setIcon(const multiFactorImage& icon) -> type& { state.icon = icon; return *this; } auto NameDialog::setText(const string& text) -> type& { state.text = text; return *this; } auto NameDialog::setTitle(const string& title) -> type& { state.title = title; return *this; } auto NameDialog::show(string mode, string name) -> string { response = {}; setTitle(state.title); if(!state.title && mode == "Create") setTitle("Create"); if(!state.title && mode == "Rename") setTitle({"Rename ", name}); textLabel.setText(state.text ? state.text : "Enter a name:"); if(state.icon) { image icon{state.icon}; icon.scale(16_sx, 16_sy); typeIcon.setIcon(icon); } else { typeIcon.setVisible(false); } nameValue.setText(name); acceptButton.setText(mode); window.setTitle(state.title); window.setSize({400_sx, layout.minimumSize().height()}); window.setAlignment(state.relativeTo, state.alignment); window.setVisible(); nameValue.setFocused(); window.setModal(); return response; } #endif ares-126/hiro/extension/name-dialog.hpp000066400000000000000000000023051415063341600201640ustar00rootroot00000000000000#if defined(Hiro_NameDialog) struct NameDialog { using type = NameDialog; NameDialog(); auto create(string name = "") -> string; auto rename(string name) -> string; auto setIcon(const multiFactorImage& icon = {}) -> type&; auto setAlignment(Alignment = Alignment::Center) -> type&; auto setAlignment(sWindow relativeTo, Alignment = Alignment::Center) -> type&; auto setText(const string& text = {}) -> type&; auto setTitle(const string& title = {}) -> type&; private: auto show(string mode, string name) -> string; Window window; VerticalLayout layout{&window}; Label textLabel{&layout, Size{~0, 0}}; HorizontalLayout nameLayout{&layout, Size{~0, 0}}; Canvas typeIcon{&nameLayout, Size{16_sx, 16_sy}}; LineEdit nameValue{&nameLayout, Size{~0, 0}}; HorizontalLayout controlLayout{&layout, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}}; Button acceptButton{&controlLayout, Size{80, 0}}; Button cancelButton{&controlLayout, Size{80, 0}}; struct State { Alignment alignment = Alignment::Center; image icon; sWindow relativeTo; string text; string title; } state; string response; }; #endif ares-126/hiro/extension/shared.hpp000066400000000000000000000276241415063341600172700ustar00rootroot00000000000000#if defined(Hiro_FixedLayout) struct FixedLayoutCell : sFixedLayoutCell { DeclareSharedObject(FixedLayoutCell) auto geometry() const { return self().geometry(); } auto setGeometry(Geometry geometry) { return self().setGeometry(geometry), *this; } auto setSizable(sSizable sizable) { return self().setSizable(sizable), *this; } auto sizable() const { return self().sizable(); } }; struct FixedLayout : sFixedLayout { DeclareSharedSizable(FixedLayout) auto append(sSizable sizable, Geometry geometry) { return self().append(sizable, geometry), *this; } auto cell(uint position) const { return self().cell(position); } auto cell(sSizable sizable) const { return self().cell(sizable); } auto cells() const { return self().cells(); } auto cellCount() const { return self().cellCount(); } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto remove(sFixedLayoutCell cell) { return self().remove(cell), *this; } auto reset() { return self().reset(), *this; } auto resize() { return self().resize(), *this; } }; #endif #if defined(Hiro_HorizontalLayout) struct HorizontalLayoutCell : sHorizontalLayoutCell { DeclareSharedObject(HorizontalLayoutCell) auto alignment() const { return self().alignment(); } auto collapsible() const { return self().collapsible(); } auto setAlignment(maybe alignment = {}) { return self().setAlignment(alignment), *this; } auto setSizable(sSizable sizable) { return self().setSizable(sizable), *this; } auto setSize(Size size) { return self().setSize(size), *this; } auto setSpacing(float spacing = 5_sx) { return self().setSpacing(spacing), *this; } auto sizable() const { return self().sizable(); } auto size() const { return self().size(); } auto spacing() const { return self().spacing(); } }; struct HorizontalLayout : sHorizontalLayout { DeclareSharedSizable(HorizontalLayout) auto alignment() const { return self().alignment(); } auto append(sSizable sizable, Size size, float spacing = 5_sx) { return self().append(sizable, size, spacing), *this; } auto cell(uint position) const { return self().cell(position); } auto cell(sSizable sizable) const { return self().cell(sizable); } auto cells() const { return self().cells(); } auto cellCount() const { return self().cellCount(); } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto remove(sHorizontalLayoutCell cell) { return self().remove(cell), *this; } auto reset() { return self().reset(), *this; } auto resize() { return self().resize(), *this; } auto setAlignment(maybe alignment = {}) { return self().setAlignment(alignment), *this; } auto setPadding(float padding) { return self().setPadding({padding, padding, padding, padding}), *this; } auto setPadding(float x, float y) { return self().setPadding({x, y, x, y}), *this; } auto setPadding(Geometry padding = {}) { return self().setPadding(padding), *this; } auto setSpacing(float spacing = 5_sx) { return self().setSpacing(spacing), *this; } }; #endif #if defined(Hiro_VerticalLayout) struct VerticalLayoutCell : sVerticalLayoutCell { DeclareSharedObject(VerticalLayoutCell) auto alignment() const { return self().alignment(); } auto collapsible() const { return self().collapsible(); } auto setAlignment(maybe alignment = {}) { return self().setAlignment(alignment), *this; } auto setSizable(sSizable sizable) { return self().setSizable(sizable), *this; } auto setSize(Size size) { return self().setSize(size), *this; } auto setSpacing(float spacing = 5_sy) { return self().setSpacing(spacing), *this; } auto sizable() const { return self().sizable(); } auto size() const { return self().size(); } auto spacing() const { return self().spacing(); } }; struct VerticalLayout : sVerticalLayout { DeclareSharedSizable(VerticalLayout) auto alignment() const { return self().alignment(); } auto append(sSizable sizable, Size size, float spacing = 5_sy) { return self().append(sizable, size, spacing), *this; } auto cell(uint position) const { return self().cell(position); } auto cell(sSizable sizable) const { return self().cell(sizable); } auto cells() const { return self().cells(); } auto cellCount() const { return self().cellCount(); } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto remove(sVerticalLayoutCell cell) { return self().remove(cell), *this; } auto reset() { return self().reset(), *this; } auto resize() { return self().resize(), *this; } auto setAlignment(maybe alignment = {}) { return self().setAlignment(alignment), *this; } auto setPadding(float padding) { return self().setPadding({padding, padding, padding, padding}), *this; } auto setPadding(float x, float y) { return self().setPadding({x, y, x, y}), *this; } auto setPadding(Geometry padding = {}) { return self().setPadding(padding), *this; } auto setSpacing(float spacing = 5_sy) { return self().setSpacing(spacing), *this; } }; #endif #if defined(Hiro_TableLayout) struct TableLayoutCell : sTableLayoutCell { DeclareSharedObject(TableLayoutCell) auto alignment() const { return self().alignment(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setSizable(sSizable sizable) { return self().setSizable(sizable), *this; } auto setSize(Size size) { return self().setSize(size), *this; } auto sizable() const { return self().sizable(); } auto size() const { return self().size(); } }; struct TableLayoutColumn : sTableLayoutColumn { DeclareSharedObject(TableLayoutColumn) auto alignment() const { return self().alignment(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setSpacing(float spacing = 5_sx) { return self().setSpacing(spacing), *this; } auto spacing() const { return self().spacing(); } }; struct TableLayoutRow : sTableLayoutRow { DeclareSharedObject(TableLayoutRow) auto alignment() const { return self().alignment(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setSpacing(float spacing = 5_sy) { return self().setSpacing(spacing), *this; } auto spacing() const { return self().spacing(); } }; struct TableLayout : sTableLayout { DeclareSharedSizable(TableLayout) auto alignment() const { return self().alignment(); } auto append(sSizable sizable, Size size) { return self().append(sizable, size), *this; } auto cell(uint position) const { return self().cell(position); } auto cell(uint x, uint y) const { return self().cell(x, y); } auto cell(sSizable sizable) const { return self().cell(sizable); } auto cells() const { return self().cells(); } auto cellCount() const { return self().cellCount(); } auto column(uint position) const { return self().column(position); } auto columns() const { return self().columns(); } auto columnCount() const { return self().columnCount(); } auto padding() const { return self().padding(); } auto remove(sSizable sizable) { return self().remove(sizable), *this; } auto remove(sTableLayoutCell cell) { return self().remove(cell), *this; } auto reset() { return self().reset(), *this; } auto resize() { return self().resize(), *this; } auto row(uint position) const { return self().row(position); } auto rows() const { return self().rows(); } auto rowCount() const { return self().rowCount(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setPadding(float padding) { return self().setPadding({padding, padding, padding, padding}), *this; } auto setPadding(float x, float y) { return self().setPadding({x, y, x, y}), *this; } auto setPadding(Geometry padding = {}) { return self().setPadding(padding), *this; } auto setSize(Size size) { return self().setSize(size), *this; } auto size() const { return self().size(); } }; #endif #if defined(Hiro_HorizontalResizeGrip) struct HorizontalResizeGrip : sHorizontalResizeGrip { DeclareSharedWidget(HorizontalResizeGrip) auto doActivate() const { return self().doActivate(); } auto doResize(int offset) const { return self().doResize(offset); } auto onActivate(const function& callback) { return self().onActivate(callback), *this; } auto onResize(const function& callback) { return self().onResize(callback), *this; } }; #endif #if defined(Hiro_VerticalResizeGrip) struct VerticalResizeGrip : sVerticalResizeGrip { DeclareSharedWidget(VerticalResizeGrip) auto doActivate() const { return self().doActivate(); } auto doResize(int offset) const { return self().doResize(offset); } auto onActivate(const function& callback) { return self().onActivate(callback), *this; } auto onResize(const function& callback) { return self().onResize(callback), *this; } }; #endif #if defined(Hiro_ListView) struct ListViewItem : sListViewItem { DeclareSharedObject(ListViewItem) auto alignment() const { return self().alignment(); } auto backgroundColor() const { return self().backgroundColor(); } auto checkable() const { return self().checkable(); } auto checked() const { return self().checked(); } auto foregroundColor() const { return self().foregroundColor(); } auto icon() const { return self().icon(); } auto reset() { return self().reset(), *this; } auto selected() const { return self().selected(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setCheckable(bool checkable = true) { return self().setCheckable(checkable), *this; } auto setChecked(bool checked = true) { return self().setChecked(checked), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } auto setIcon(const multiFactorImage& icon = {}) { return self().setIcon(icon), *this; } auto setSelected(bool selected = true) { return self().setSelected(selected), *this; } auto setText(const string& text = "") { return self().setText(text), *this; } auto text() const { return self().text(); } }; struct ListView : sListView { DeclareSharedWidget(ListView) auto alignment() const { return self().alignment(); } auto append(sListViewItem item) { return self().append(item), *this; } auto backgroundColor() const { return self().backgroundColor(); } auto batchable() const { return self().batchable(); } auto batched() const { return self().batched(); } auto doActivate() const { return self().doActivate(); } auto doChange() const { return self().doChange(); } auto doContext() const { return self().doContext(); } auto doToggle(ListViewItem item) const { return self().doToggle(item); } auto foregroundColor() const { return self().foregroundColor(); } auto item(uint position) const { return self().item(position); } auto itemCount() const { return self().itemCount(); } auto items() const { return self().items(); } auto onActivate(const function& callback = {}) { return self().onActivate(callback), *this; } auto onChange(const function& callback = {}) { return self().onChange(callback), *this; } auto onContext(const function& callback = {}) { return self().onContext(callback), *this; } auto onToggle(const function& callback = {}) { return self().onToggle(callback), *this; } auto remove(sListViewItem item) { return self().remove(item), *this; } auto reset() { return self().reset(), *this; } auto resizeColumn() { return self().resizeColumn(), *this; } auto selectNone() { return self().selectNone(), *this; } auto selected() { return self().selected(); } auto setAlignment(Alignment alignment = {}) { return self().setAlignment(alignment), *this; } auto setBackgroundColor(Color color = {}) { return self().setBackgroundColor(color), *this; } auto setBatchable(bool batchable = true) { return self().setBatchable(batchable), *this; } auto setForegroundColor(Color color = {}) { return self().setForegroundColor(color), *this; } }; #endif ares-126/hiro/extension/table-layout.cpp000066400000000000000000000300461415063341600204070ustar00rootroot00000000000000#if defined(Hiro_TableLayout) auto mTableLayout::alignment() const -> Alignment { return state.alignment; } auto mTableLayout::append(sSizable sizable, Size size) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return *this; } TableLayoutCell cell; cell->setSizable(sizable); cell->setSize(size); cell->setParent(this, cellCount()); state.cells.append(cell); return *this; } auto mTableLayout::cell(u32 position) const -> TableLayoutCell { return state.cells(position, {}); } auto mTableLayout::cell(u32 x, u32 y) const -> TableLayoutCell { if(auto cell = state.cells(y * columnCount() + x, {})) return cell; return {}; } auto mTableLayout::cell(sSizable sizable) const -> TableLayoutCell { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return cell; } return {}; } auto mTableLayout::cells() const -> vector { return state.cells; } auto mTableLayout::cellCount() const -> u32 { return state.cells.size(); } auto mTableLayout::column(u32 position) const -> TableLayoutColumn { return state.columns(position, {}); } auto mTableLayout::columns() const -> vector { return state.columns; } auto mTableLayout::columnCount() const -> u32 { return state.columns.size(); } auto mTableLayout::destruct() -> void { for(auto& cell : state.cells) cell->destruct(); for(auto& column : state.columns) column->destruct(); for(auto& row : state.rows) row->destruct(); mSizable::destruct(); } auto mTableLayout::minimumSize() const -> Size { f32 minimumWidth = 0; for(u32 x : range(columnCount())) { f32 width = 0; auto column = this->column(x); for(u32 y : range(rowCount())) { auto row = this->row(y); auto cell = this->cell(x, y); if(cell.size().width() == Size::Minimum || cell.size().width() == Size::Maximum) { width = max(width, cell.sizable()->minimumSize().width()); } else { width = max(width, cell.size().width()); } } minimumWidth += width; if(x != columnCount() - 1) minimumWidth += column.spacing(); } f32 minimumHeight = 0; for(u32 y : range(rowCount())) { f32 height = 0; auto row = this->row(y); for(u32 x : range(columnCount())) { auto column = this->column(x); auto cell = this->cell(x, y); if(cell.size().height() == Size::Minimum || cell.size().height() == Size::Maximum) { height = max(height, cell.sizable()->minimumSize().height()); } else { height = max(height, cell.size().height()); } } minimumHeight += height; if(y != rowCount() - 1) minimumHeight += row.spacing(); } return { padding().x() + minimumWidth + padding().width(), padding().y() + minimumHeight + padding().height() }; } auto mTableLayout::padding() const -> Geometry { return state.padding; } auto mTableLayout::remove(sSizable sizable) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return remove(cell); } return *this; } auto mTableLayout::remove(sTableLayoutCell cell) -> type& { if(cell->parent() != this) return *this; auto offset = cell->offset(); cell->setParent(); state.cells.remove(offset); for(u32 n : range(offset, cellCount())) state.cells[n]->adjustOffset(-1); return synchronize(); } auto mTableLayout::reset() -> type& { while(state.cells) remove(state.cells.right()); return synchronize(); } auto mTableLayout::resize() -> type& { setGeometry(geometry()); return *this; } auto mTableLayout::row(u32 position) const -> TableLayoutRow { return state.rows(position, {}); } auto mTableLayout::rows() const -> vector { return state.rows; } auto mTableLayout::rowCount() const -> u32 { return state.rows.size(); } auto mTableLayout::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mTableLayout::setEnabled(bool enabled) -> type& { mSizable::setEnabled(enabled); for(auto& cell : state.cells) cell.setEnabled(cell.enabled()); return *this; } auto mTableLayout::setFont(const Font& font) -> type& { mSizable::setFont(font); for(auto& cell : state.cells) cell.setFont(cell.font()); return *this; } auto mTableLayout::setGeometry(Geometry requestedGeometry) -> type& { //if(!visible(true)) return mSizable::setGeometry(requestedGeometry), *this; auto geometry = requestedGeometry; geometry.setX(geometry.x() + padding().x()); geometry.setY(geometry.y() + padding().y()); geometry.setWidth (geometry.width() - padding().x() - padding().width()); geometry.setHeight(geometry.height() - padding().y() - padding().height()); vector widths; widths.resize(columnCount()); u32 maximumWidths = 0; for(u32 x : range(columnCount())) { f32 width = 0; auto column = this->column(x); for(u32 y : range(rowCount())) { auto row = this->row(y); auto cell = this->cell(x, y); if(cell.size().width() == Size::Maximum) { width = Size::Maximum; maximumWidths++; break; } if(cell.size().width() == Size::Minimum) { width = max(width, cell.sizable()->minimumSize().width()); } else { width = max(width, cell.size().width()); } } widths[x] = width; } vector heights; heights.resize(rowCount()); u32 maximumHeights = 0; for(u32 y : range(rowCount())) { f32 height = 0; auto row = this->row(y); for(u32 x : range(columnCount())) { auto column = this->column(x); auto cell = this->cell(x, y); if(cell.size().height() == Size::Maximum) { height = Size::Maximum; maximumHeights++; break; } if(cell.size().height() == Size::Minimum) { height = max(height, cell.sizable()->minimumSize().height()); } else { height = max(height, cell.size().height()); } } heights[y] = height; } f32 fixedWidth = 0; for(u32 x : range(columnCount())) { if(widths[x] != Size::Maximum) fixedWidth += widths[x]; if(x != columnCount() - 1) fixedWidth += column(x)->spacing(); } f32 maximumWidth = (geometry.width() - fixedWidth) / maximumWidths; for(auto& width : widths) { if(width == Size::Maximum) width = maximumWidth; } f32 fixedHeight = 0; for(u32 y : range(rowCount())) { if(heights[y] != Size::Maximum) fixedHeight += heights[y]; if(y != rowCount() - 1) fixedHeight += row(y)->spacing(); } f32 maximumHeight = (geometry.height() - fixedHeight) / maximumHeights; for(auto& height : heights) { if(height == Size::Maximum) height = maximumHeight; } f32 geometryY = geometry.y(); for(u32 y : range(rowCount())) { f32 geometryX = geometry.x(); auto row = this->row(y); for(u32 x : range(columnCount())) { auto column = this->column(x); auto cell = this->cell(x, y); f32 geometryWidth = widths [x]; f32 geometryHeight = heights[y]; auto alignment = cell.alignment(); if(!alignment) alignment = column.alignment(); if(!alignment) alignment = row.alignment(); if(!alignment) alignment = this->alignment(); if(!alignment) alignment = {0.0, 0.5}; f32 cellWidth = cell.size().width(); if(cellWidth == Size::Minimum) cellWidth = cell.sizable()->minimumSize().width(); if(cellWidth == Size::Maximum) cellWidth = geometryWidth; cellWidth = min(cellWidth, geometryWidth); f32 cellHeight = cell.size().height(); if(cellHeight == Size::Minimum) cellHeight = cell.sizable()->minimumSize().height(); if(cellHeight == Size::Maximum) cellHeight = geometryHeight; cellHeight = min(cellHeight, geometryHeight); f32 cellX = geometryX + alignment.horizontal() * (geometryWidth - cellWidth); f32 cellY = geometryY + alignment.vertical() * (geometryHeight - cellHeight); cell.sizable()->setGeometry({cellX, cellY, cellWidth, cellHeight}); geometryX += widths[x] + column.spacing(); } geometryY += heights[y] + row.spacing(); } mSizable::setGeometry(requestedGeometry); return *this; } auto mTableLayout::setPadding(Geometry padding) -> type& { state.padding = padding; return synchronize(); } auto mTableLayout::setParent(mObject* parent, s32 offset) -> type& { for(auto& cell : reverse(state.cells)) cell->destruct(); for(auto& column : reverse(state.columns)) column->destruct(); for(auto& row : reverse(state.rows)) row->destruct(); mObject::setParent(parent, offset); for(auto& cell : state.cells) cell->setParent(this, cell->offset()); for(auto& column : state.columns) column->setParent(this, column->offset()); for(auto& row : state.rows) row->setParent(this, row->offset()); return *this; } auto mTableLayout::setSize(Size size) -> type& { state.size = size; state.columns.reset(); state.rows.reset(); for(auto x : range(size.width())) state.columns.append(TableLayoutColumn()); for(auto y : range(size.height())) state.rows.append(TableLayoutRow()); return synchronize(); } auto mTableLayout::setVisible(bool visible) -> type& { mSizable::setVisible(visible); for(auto& cell : state.cells) cell.setVisible(cell.visible()); return synchronize(); } auto mTableLayout::size() const -> Size { return state.size; } auto mTableLayout::synchronize() -> type& { setGeometry(geometry()); return *this; } // auto mTableLayoutColumn::alignment() const -> Alignment { return state.alignment; } auto mTableLayoutColumn::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mTableLayoutColumn::setSpacing(f32 spacing) -> type& { state.spacing = spacing; return synchronize(); } auto mTableLayoutColumn::spacing() const -> f32 { return state.spacing; } auto mTableLayoutColumn::synchronize() -> type& { if(auto parent = this->parent()) { if(auto tableLayout = dynamic_cast(parent)) { tableLayout->synchronize(); } } return *this; } // auto mTableLayoutRow::alignment() const -> Alignment { return state.alignment; } auto mTableLayoutRow::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mTableLayoutRow::setSpacing(f32 spacing) -> type& { state.spacing = spacing; return synchronize(); } auto mTableLayoutRow::spacing() const -> f32 { return state.spacing; } auto mTableLayoutRow::synchronize() -> type& { if(auto parent = this->parent()) { if(auto tableLayout = dynamic_cast(parent)) { tableLayout->synchronize(); } } return *this; } // auto mTableLayoutCell::alignment() const -> Alignment { return state.alignment; } auto mTableLayoutCell::destruct() -> void { if(auto& sizable = state.sizable) sizable->destruct(); mObject::destruct(); } auto mTableLayoutCell::setAlignment(Alignment alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mTableLayoutCell::setEnabled(bool enabled) -> type& { mObject::setEnabled(enabled); state.sizable->setEnabled(state.sizable->enabled()); return *this; } auto mTableLayoutCell::setFont(const Font& font) -> type& { mObject::setFont(font); state.sizable->setFont(state.sizable->font()); return *this; } auto mTableLayoutCell::setParent(mObject* parent, s32 offset) -> type& { state.sizable->destruct(); mObject::setParent(parent, offset); state.sizable->setParent(this, 0); return *this; } auto mTableLayoutCell::setSizable(sSizable sizable) -> type& { state.sizable = sizable; state.sizable->setParent(this, 0); return synchronize(); } auto mTableLayoutCell::setSize(Size size) -> type& { state.size = size; return synchronize(); } auto mTableLayoutCell::setVisible(bool visible) -> type& { mObject::setVisible(visible); state.sizable->setVisible(state.sizable->visible()); return *this; } auto mTableLayoutCell::sizable() const -> Sizable { return state.sizable ? state.sizable : Sizable(); } auto mTableLayoutCell::size() const -> Size { return state.size; } auto mTableLayoutCell::synchronize() -> type& { if(auto parent = this->parent()) { if(auto tableLayout = dynamic_cast(parent)) { tableLayout->synchronize(); } } return *this; } #endif ares-126/hiro/extension/table-layout.hpp000066400000000000000000000070571415063341600204220ustar00rootroot00000000000000#if defined(Hiro_TableLayout) struct TableLayout; struct TableLayoutColumn; struct TableLayoutRow; struct TableLayoutCell; struct mTableLayout; struct mTableLayoutColumn; struct mTableLayoutRow; struct mTableLayoutCell; using sTableLayout = shared_pointer; using sTableLayoutColumn = shared_pointer; using sTableLayoutRow = shared_pointer; using sTableLayoutCell = shared_pointer; struct mTableLayout : mSizable { using type = mTableLayout; using mSizable::remove; auto alignment() const -> Alignment; auto append(sSizable sizable, Size size) -> type&; auto cell(u32 position) const -> TableLayoutCell; auto cell(u32 x, u32 y) const -> TableLayoutCell; auto cell(sSizable sizable) const -> TableLayoutCell; auto cells() const -> vector; auto cellCount() const -> u32; auto column(u32 position) const -> TableLayoutColumn; auto columns() const -> vector; auto columnCount() const -> u32; auto minimumSize() const -> Size override; auto padding() const -> Geometry; auto remove(sSizable sizable) -> type&; auto remove(sTableLayoutCell cell) -> type&; auto reset() -> type& override; auto resize() -> type&; auto row(u32 position) const -> TableLayoutRow; auto rows() const -> vector; auto rowCount() const -> u32; auto setAlignment(Alignment alignment) -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setGeometry(Geometry geometry) -> type& override; auto setPadding(Geometry padding) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSize(Size size) -> type&; auto setVisible(bool visible) -> type& override; auto size() const -> Size; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { Alignment alignment; vector cells; vector columns; Geometry padding; vector rows; Size size; } state; }; struct mTableLayoutColumn : mObject { using type = mTableLayoutColumn; auto alignment() const -> Alignment; auto setAlignment(Alignment alignment) -> type&; auto setSpacing(f32 spacing) -> type&; auto spacing() const -> f32; auto synchronize() -> type&; private: struct State { Alignment alignment; f32 spacing = 5_sx; } state; friend class mTableLayout; }; struct mTableLayoutRow : mObject { using type = mTableLayoutRow; auto alignment() const -> Alignment; auto setAlignment(Alignment alignment) -> type&; auto setSpacing(f32 spacing) -> type&; auto spacing() const -> f32; auto synchronize() -> type&; private: struct State { Alignment alignment; f32 spacing = 5_sy; } state; friend class mTableLayout; }; struct mTableLayoutCell : mObject { using type = mTableLayoutCell; auto alignment() const -> Alignment; auto setAlignment(Alignment alignment) -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSizable(sSizable sizable) -> type&; auto setSize(Size size) -> type&; auto setVisible(bool visible) -> type& override; auto sizable() const -> Sizable; auto size() const -> Size; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { Alignment alignment; sSizable sizable; Size size; } state; friend class mTableLayout; }; #endif ares-126/hiro/extension/vertical-layout.cpp000066400000000000000000000212431415063341600211300ustar00rootroot00000000000000#if defined(Hiro_VerticalLayout) auto mVerticalLayout::alignment() const -> maybe { return state.alignment; } auto mVerticalLayout::append(sSizable sizable, Size size, f32 spacing) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return *this; } VerticalLayoutCell cell; cell->setSizable(sizable); cell->setSize(size); cell->setSpacing(spacing); cell->setParent(this, cellCount()); state.cells.append(cell); return synchronize(); } auto mVerticalLayout::cell(u32 position) const -> VerticalLayoutCell { return state.cells(position, {}); } auto mVerticalLayout::cell(sSizable sizable) const -> VerticalLayoutCell { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return cell; } return {}; } auto mVerticalLayout::cells() const -> vector { return state.cells; } auto mVerticalLayout::cellCount() const -> u32 { return state.cells.size(); } auto mVerticalLayout::destruct() -> void { for(auto& cell : state.cells) cell->destruct(); mSizable::destruct(); } auto mVerticalLayout::minimumSize() const -> Size { f32 width = 0; for(auto index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(cell.size().width() == Size::Minimum || cell.size().width() == Size::Maximum) { width = max(width, cell.sizable().minimumSize().width()); continue; } width = max(width, cell.size().width()); } f32 height = 0; f32 spacing = 0; for(auto index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(cell.size().height() == Size::Minimum || cell.size().height() == Size::Maximum) { height += cell.sizable().minimumSize().height(); } else { height += cell.size().height(); } height += spacing; spacing = cell.spacing(); } return { padding().x() + width + padding().width(), padding().y() + height + padding().height() }; } auto mVerticalLayout::padding() const -> Geometry { return state.padding; } auto mVerticalLayout::remove(sSizable sizable) -> type& { for(auto& cell : state.cells) { if(cell->state.sizable == sizable) return remove(cell); } return *this; } auto mVerticalLayout::remove(sVerticalLayoutCell cell) -> type& { if(cell->parent() != this) return *this; auto offset = cell->offset(); cell->setParent(); state.cells.remove(offset); for(u32 n : range(offset, cellCount())) state.cells[n]->adjustOffset(-1); return synchronize(); } auto mVerticalLayout::reset() -> type& { while(state.cells) remove(state.cells.right()); return synchronize(); } auto mVerticalLayout::resize() -> type& { setGeometry(geometry()); return *this; } auto mVerticalLayout::setAlignment(maybe alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mVerticalLayout::setEnabled(bool enabled) -> type& { mSizable::setEnabled(enabled); for(auto& cell : state.cells) cell.sizable().setEnabled(cell.sizable().enabled()); return *this; } auto mVerticalLayout::setFont(const Font& font) -> type& { mSizable::setFont(font); for(auto& cell : state.cells) cell.sizable().setFont(cell.sizable().font()); return *this; } auto mVerticalLayout::setGeometry(Geometry requestedGeometry) -> type& { //if(!visible(true)) return mSizable::setGeometry(requestedGeometry), *this; auto geometry = requestedGeometry; geometry.setX(geometry.x() + padding().x()); geometry.setY(geometry.y() + padding().y()); geometry.setWidth (geometry.width() - padding().x() - padding().width()); geometry.setHeight(geometry.height() - padding().y() - padding().height()); f32 width = 0; for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(cell.size().width() == Size::Maximum) { width = geometry.width(); break; } else if(cell.size().width() == Size::Minimum) { width = max(width, cell.sizable().minimumSize().width()); } else { width = max(width, cell.size().width()); } } vector heights; heights.resize(cellCount()); u32 maximumHeights = 0; for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; f32 height = 0; if(cell.size().height() == Size::Maximum) { height = Size::Maximum; maximumHeights++; } else if(cell.size().height() == Size::Minimum) { height = cell.sizable().minimumSize().height(); } else { height = cell.size().height(); } heights[index] = height; } f32 fixedHeight = 0; f32 spacing = 0; for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; if(heights[index] != Size::Maximum) fixedHeight += heights[index]; fixedHeight += spacing; spacing = cell.spacing(); } f32 maximumHeight = (geometry.height() - fixedHeight) / maximumHeights; for(auto& height : heights) { if(height == Size::Maximum) height = maximumHeight; } f32 geometryX = geometry.x(); f32 geometryY = geometry.y(); for(u32 index : range(cellCount())) { auto cell = this->cell(index); if(cell.collapsible()) continue; f32 geometryWidth = width; f32 geometryHeight = heights[index]; auto alignment = cell.alignment(); if(!alignment) alignment = this->alignment(); if(!alignment) alignment = 0.0; f32 cellWidth = cell.size().width(); f32 cellHeight = geometryHeight; if(cellWidth == Size::Minimum) cellWidth = cell.sizable()->minimumSize().width(); if(cellWidth == Size::Maximum) cellWidth = geometryWidth; f32 cellX = geometryX + alignment() * (geometryWidth - cellWidth); f32 cellY = geometryY; cell.sizable().setGeometry({cellX, cellY, cellWidth, cellHeight}); geometryY += geometryHeight + cell.spacing(); } mSizable::setGeometry(requestedGeometry); return *this; } auto mVerticalLayout::setPadding(Geometry padding) -> type& { state.padding = padding; return synchronize(); } auto mVerticalLayout::setParent(mObject* parent, s32 offset) -> type& { for(auto& cell : reverse(state.cells)) cell->destruct(); mSizable::setParent(parent, offset); for(auto& cell : state.cells) cell->setParent(this, cell->offset()); return *this; } auto mVerticalLayout::setSpacing(f32 spacing) -> type& { state.spacing = spacing; return synchronize(); } auto mVerticalLayout::setVisible(bool visible) -> type& { mSizable::setVisible(visible); for(auto& cell : state.cells) cell.sizable().setVisible(cell.sizable().visible()); return synchronize(); } auto mVerticalLayout::spacing() const -> f32 { return state.spacing; } auto mVerticalLayout::synchronize() -> type& { setGeometry(geometry()); return *this; } // auto mVerticalLayoutCell::alignment() const -> maybe { return state.alignment; } auto mVerticalLayoutCell::collapsible() const -> bool { if(state.sizable) return state.sizable->collapsible() && !state.sizable->visible(); return false; } auto mVerticalLayoutCell::destruct() -> void { if(auto& sizable = state.sizable) sizable->destruct(); mObject::destruct(); } auto mVerticalLayoutCell::setAlignment(maybe alignment) -> type& { state.alignment = alignment; return synchronize(); } auto mVerticalLayoutCell::setEnabled(bool enabled) -> type& { mObject::setEnabled(enabled); state.sizable->setEnabled(state.sizable->enabled()); return *this; } auto mVerticalLayoutCell::setFont(const Font& font) -> type& { mObject::setFont(font); state.sizable->setFont(state.sizable->font()); return *this; } auto mVerticalLayoutCell::setParent(mObject* parent, s32 offset) -> type& { state.sizable->destruct(); mObject::setParent(parent, offset); state.sizable->setParent(this, 0); return *this; } auto mVerticalLayoutCell::setSizable(sSizable sizable) -> type& { state.sizable = sizable; return synchronize(); } auto mVerticalLayoutCell::setSize(Size size) -> type& { state.size = size; return synchronize(); } auto mVerticalLayoutCell::setSpacing(f32 spacing) -> type& { state.spacing = spacing; return synchronize(); } auto mVerticalLayoutCell::setVisible(bool visible) -> type& { mObject::setVisible(visible); state.sizable->setVisible(state.sizable->visible()); return *this; } auto mVerticalLayoutCell::sizable() const -> Sizable { return state.sizable ? state.sizable : Sizable(); } auto mVerticalLayoutCell::size() const -> Size { return state.size; } auto mVerticalLayoutCell::spacing() const -> f32 { return state.spacing; } auto mVerticalLayoutCell::synchronize() -> type& { if(auto parent = this->parent()) { if(auto verticalLayout = dynamic_cast(parent)) { verticalLayout->synchronize(); } } return *this; } #endif ares-126/hiro/extension/vertical-layout.hpp000066400000000000000000000046531415063341600211430ustar00rootroot00000000000000#if defined(Hiro_VerticalLayout) struct VerticalLayout; struct VerticalLayoutCell; struct mVerticalLayout; struct mVerticalLayoutCell; using sVerticalLayout = shared_pointer; using sVerticalLayoutCell = shared_pointer; struct mVerticalLayout : mSizable { using type = mVerticalLayout; using mSizable::remove; auto alignment() const -> maybe; auto append(sSizable sizable, Size size, f32 spacing = 5_sy) -> type&; auto cell(u32 position) const -> VerticalLayoutCell; auto cell(sSizable sizable) const -> VerticalLayoutCell; auto cells() const -> vector; auto cellCount() const -> u32; auto minimumSize() const -> Size override; auto padding() const -> Geometry; auto remove(sSizable sizable) -> type&; auto remove(sVerticalLayoutCell cell) -> type&; auto reset() -> type& override; auto resize() -> type&; auto setAlignment(maybe alignment) -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setGeometry(Geometry geometry) -> type& override; auto setPadding(Geometry padding) -> type&; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSpacing(f32 spacing) -> type&; auto setVisible(bool visible) -> type& override; auto spacing() const -> f32; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { maybe alignment; vector cells; Geometry padding; f32 spacing = 5_sy; } state; }; struct mVerticalLayoutCell : mObject { using type = mVerticalLayoutCell; auto alignment() const -> maybe; auto collapsible() const -> bool; auto setAlignment(maybe alignment) -> type&; auto setEnabled(bool enabled) -> type& override; auto setFont(const Font& font) -> type& override; auto setParent(mObject* parent = nullptr, s32 offset = -1) -> type& override; auto setSizable(sSizable sizable) -> type&; auto setSize(Size size) -> type&; auto setSpacing(f32 spacing) -> type&; auto setVisible(bool visible) -> type& override; auto sizable() const -> Sizable; auto size() const -> Size; auto spacing() const -> f32; auto synchronize() -> type&; private: auto destruct() -> void override; struct State { maybe alignment; sSizable sizable; Size size; f32 spacing = 5_sy; } state; friend class mVerticalLayout; }; #endif ares-126/hiro/extension/vertical-resize-grip.cpp000066400000000000000000000031011415063341600220440ustar00rootroot00000000000000#if defined(Hiro_VerticalResizeGrip) mVerticalResizeGrip::mVerticalResizeGrip() { image icon; icon.allocate(15, 5); for(u32 x : range(icon.width())) { auto data = icon.data() + x * icon.stride(); icon.write(data, 0x00000000); data += icon.pitch(); icon.write(data, 0xff9f9f9f); data += icon.pitch(); icon.write(data, 0x00000000); data += icon.pitch(); icon.write(data, 0xff9f9f9f); data += icon.pitch(); icon.write(data, 0x00000000); data += icon.pitch(); } mCanvas::setIcon(icon); mCanvas::setMouseCursor(MouseCursor::VerticalResize); mCanvas::onMousePress([&](auto button) { if(button == Mouse::Button::Left && !state.timer.enabled()) { doActivate(); state.offset = 0; state.origin = Mouse::position(); state.timer.setEnabled(); } }); state.timer.setInterval(10).onActivate([&] { if(!Mouse::pressed(Mouse::Button::Left)) return (void)state.timer.setEnabled(false); auto position = Mouse::position(); auto offset = position.y() - state.origin.y(); if(offset != state.offset) doResize(offset), offset = state.offset; }); } auto mVerticalResizeGrip::doActivate() const -> void { if(state.onActivate) state.onActivate(); } auto mVerticalResizeGrip::doResize(s32 offset) const -> void { if(state.onResize) state.onResize(offset); } auto mVerticalResizeGrip::onActivate(const function& callback) -> type& { state.onActivate = callback; return *this; } auto mVerticalResizeGrip::onResize(const function& callback) -> type& { state.onResize = callback; return *this; } #endif ares-126/hiro/extension/vertical-resize-grip.hpp000066400000000000000000000012031415063341600220520ustar00rootroot00000000000000#if defined(Hiro_VerticalResizeGrip) struct VerticalResizeGrip; struct mVerticalResizeGrip; using sVerticalResizeGrip = shared_pointer; struct mVerticalResizeGrip : mCanvas { using type = mVerticalResizeGrip; mVerticalResizeGrip(); auto doActivate() const -> void; auto doResize(s32 offset) const -> void; auto onActivate(const function& callback) -> type&; auto onResize(const function& callback) -> type&; //private: struct State { function onActivate; function onResize; s32 offset = 0; Position origin; Timer timer; } state; }; #endif ares-126/hiro/gtk/000077500000000000000000000000001415063341600140475ustar00rootroot00000000000000ares-126/hiro/gtk/action/000077500000000000000000000000001415063341600153245ustar00rootroot00000000000000ares-126/hiro/gtk/action/action.cpp000066400000000000000000000010341415063341600173030ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { auto pAction::construct() -> void { } auto pAction::destruct() -> void { } auto pAction::setEnabled(bool enabled) -> void { gtk_widget_set_sensitive(widget, enabled); } auto pAction::setFont(const Font& font) -> void { pFont::setFont(widget, font); } auto pAction::setVisible(bool visible) -> void { gtk_widget_set_visible(widget, visible); } //GTK+ uses _ for mnemonics, __ for _ auto pAction::_mnemonic(string text) -> string { text.replace("_", "__"); return text; } } #endif ares-126/hiro/gtk/action/action.hpp000066400000000000000000000005211415063341600173100ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { struct pAction : pObject { Declare(Action, Object) auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; auto _mnemonic(string text) -> string; GtkWidget* widget = nullptr; }; } #endif ares-126/hiro/gtk/action/menu-check-item.cpp000066400000000000000000000017001415063341600210010ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) namespace hiro { static auto MenuCheckItem_toggle(GtkCheckMenuItem* gtkCheckMenuItem, pMenuCheckItem* p) -> void { p->state().checked = gtk_check_menu_item_get_active(gtkCheckMenuItem); if(!p->locked()) p->self().doToggle(); } auto pMenuCheckItem::construct() -> void { widget = gtk_check_menu_item_new_with_mnemonic(""); setChecked(state().checked); setText(state().text); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(MenuCheckItem_toggle), (gpointer)this); } auto pMenuCheckItem::destruct() -> void { gtk_widget_destroy(widget); } auto pMenuCheckItem::orphan() -> void { destruct(); construct(); } auto pMenuCheckItem::setChecked(bool checked) -> void { lock(); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), checked); unlock(); } auto pMenuCheckItem::setText(const string& text) -> void { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), _mnemonic(text)); } } #endif ares-126/hiro/gtk/action/menu-check-item.hpp000066400000000000000000000003631415063341600210120ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) namespace hiro { struct pMenuCheckItem : pAction { Declare(MenuCheckItem, Action) auto orphan() -> void; auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; }; } #endif ares-126/hiro/gtk/action/menu-item.cpp000066400000000000000000000016331415063341600177330ustar00rootroot00000000000000#if defined(Hiro_MenuItem) namespace hiro { static auto MenuItem_activate(GtkMenuItem*, pMenuItem* p) -> void { p->self().doActivate(); } auto pMenuItem::construct() -> void { widget = gtk_image_menu_item_new_with_mnemonic(""); g_signal_connect(G_OBJECT(widget), "activate", G_CALLBACK(MenuItem_activate), (gpointer)this); setIcon(state().icon); setText(state().text); } auto pMenuItem::destruct() -> void { if(widget) gtk_widget_destroy(widget), widget = nullptr; } auto pMenuItem::setIcon(const image& icon, bool force) -> void { if(icon) { GtkImage* gtkImage = CreateImage(icon, true); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), (GtkWidget*)gtkImage); } else { gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), nullptr); } } auto pMenuItem::setText(const string& text) -> void { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), _mnemonic(text)); } } #endif ares-126/hiro/gtk/action/menu-item.hpp000066400000000000000000000003411415063341600177330ustar00rootroot00000000000000#if defined(Hiro_MenuItem) namespace hiro { struct pMenuItem : pAction { Declare(MenuItem, Action) auto setIcon(const image& icon, bool force = false) -> void; auto setText(const string& text) -> void; }; } #endif ares-126/hiro/gtk/action/menu-radio-item.cpp000066400000000000000000000043531415063341600210310ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) namespace hiro { static auto MenuRadioItem_activate(GtkCheckMenuItem* gtkCheckMenuItem, pMenuRadioItem* p) -> void { p->_doActivate(); } auto pMenuRadioItem::construct() -> void { widget = gtk_radio_menu_item_new_with_mnemonic(0, ""); gtkCheckMenuItem = GTK_CHECK_MENU_ITEM(widget); gtkRadioMenuItem = GTK_RADIO_MENU_ITEM(widget); setText(state().text); g_signal_connect(G_OBJECT(widget), "toggled", G_CALLBACK(MenuRadioItem_activate), (gpointer)this); } auto pMenuRadioItem::destruct() -> void { if(widget) gtk_widget_destroy(widget), widget = nullptr; } auto pMenuRadioItem::setChecked() -> void { lock(); gtk_check_menu_item_set_active(gtkCheckMenuItem, true); unlock(); } auto pMenuRadioItem::setGroup(sGroup group) -> void { maybe gtkRadioMenuItem; for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto menuRadioItem = dynamic_cast(object.data())) { if(auto self = menuRadioItem->self()) { self->lock(); gtk_radio_menu_item_set_group(self->gtkRadioMenuItem, nullptr); if(!gtkRadioMenuItem) { gtkRadioMenuItem = self->gtkRadioMenuItem; gtk_check_menu_item_set_active(self->gtkCheckMenuItem, menuRadioItem->state.checked = true); } else { gtk_radio_menu_item_set_group(self->gtkRadioMenuItem, gtk_radio_menu_item_get_group(*gtkRadioMenuItem)); gtk_check_menu_item_set_active(self->gtkCheckMenuItem, menuRadioItem->state.checked = false); } self->unlock(); } } } } } auto pMenuRadioItem::setText(const string& text) -> void { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), _mnemonic(text)); } auto pMenuRadioItem::groupLocked() const -> bool { if(auto group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto self = object->self()) { if(self->locked()) return true; } } } return false; } return locked(); } auto pMenuRadioItem::_doActivate() -> void { if(groupLocked()) return; bool wasChecked = state().checked; self().setChecked(); if(!wasChecked) self().doActivate(); } } #endif ares-126/hiro/gtk/action/menu-radio-item.hpp000066400000000000000000000006321415063341600210320ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) namespace hiro { struct pMenuRadioItem : pAction { Declare(MenuRadioItem, Action) auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setText(const string& text) -> void; auto groupLocked() const -> bool; auto _doActivate() -> void; GtkCheckMenuItem* gtkCheckMenuItem = nullptr; GtkRadioMenuItem* gtkRadioMenuItem = nullptr; }; } #endif ares-126/hiro/gtk/action/menu-separator.cpp000066400000000000000000000003751415063341600207770ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { auto pMenuSeparator::construct() -> void { widget = gtk_separator_menu_item_new(); } auto pMenuSeparator::destruct() -> void { if(widget) gtk_widget_destroy(widget), widget = nullptr; } } #endif ares-126/hiro/gtk/action/menu-separator.hpp000066400000000000000000000002041415063341600207730ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { struct pMenuSeparator : pAction { Declare(MenuSeparator, Action) }; } #endif ares-126/hiro/gtk/action/menu.cpp000066400000000000000000000026671415063341600170070ustar00rootroot00000000000000#if defined(Hiro_Menu) namespace hiro { auto pMenu::construct() -> void { gtkMenu = gtk_menu_new(); widget = gtk_image_menu_item_new_with_mnemonic(""); gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget), gtkMenu); setIcon(state().icon); setText(state().text); for(auto& action : state().actions) append(*action); } auto pMenu::destruct() -> void { gtk_widget_destroy(gtkMenu); gtk_widget_destroy(widget); } auto pMenu::append(sAction action) -> void { if(action->self()) { gtk_menu_shell_append(GTK_MENU_SHELL(gtkMenu), action->self()->widget); action->self()->setEnabled(action->enabled(true)); action->self()->setFont(action->font(true)); action->self()->setVisible(action->visible()); //hidden parent will hide child; no need to inherit visibility } } auto pMenu::remove(sAction action) -> void { } auto pMenu::setFont(const Font& font) -> void { pAction::setFont(font); for(auto& action : state().actions) { if(action->self()) action->self()->setFont(action->font(true)); } } auto pMenu::setIcon(const image& icon, bool force) -> void { if(icon) { GtkImage* gtkImage = CreateImage(icon, true); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), (GtkWidget*)gtkImage); } else { gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(widget), nullptr); } } auto pMenu::setText(const string& text) -> void { gtk_menu_item_set_label(GTK_MENU_ITEM(widget), _mnemonic(text)); } } #endif ares-126/hiro/gtk/action/menu.hpp000066400000000000000000000005671415063341600170110ustar00rootroot00000000000000#if defined(Hiro_Menu) namespace hiro { struct pMenu : pAction { Declare(Menu, Action) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setFont(const Font& font) -> void override; auto setIcon(const image& icon, bool force = false) -> void; auto setText(const string& text) -> void; GtkWidget* gtkMenu = nullptr; }; } #endif ares-126/hiro/gtk/application.cpp000066400000000000000000000166741415063341600170740ustar00rootroot00000000000000#if defined(Hiro_Application) #include namespace hiro { auto Log_Ignore(const char* logDomain, GLogLevelFlags logLevel, const char* message, void* userData) -> void { } auto Log_Filter(const char* logDomain, GLogLevelFlags logLevel, const char* message, void* userData) -> void { //FreeBSD 12.0: caused by gtk_combo_box_size_allocate() internal function being defective if(string{message}.find("gtk_widget_size_allocate():")) return; //print all other messages print(terminal::color::yellow("hiro: "), logDomain, "::", message, "\n"); } auto pApplication::exit() -> void { quit(); ::exit(EXIT_SUCCESS); } auto pApplication::modal() -> bool { return Application::state().modal > 0; } auto pApplication::run() -> void { while(!Application::state().quit) { Application::doMain(); processEvents(); //avoid spinlooping the thread when there is no main loop ... //when there is one, Application::onMain() is expected to sleep when possible instead if(!Application::state().onMain) usleep(2000); } } auto pApplication::pendingEvents() -> bool { return gtk_events_pending(); } auto pApplication::processEvents() -> void { //GTK can sometimes return gtk_pending_events() == true forever, //no matter how many times gtk_main_iteration_do() is called. //implement a timeout to prevent hiro from hanging forever in this case. auto time = chrono::millisecond(); while(pendingEvents() && chrono::millisecond() - time < 50) { gtk_main_iteration_do(false); } for(auto& window : state().windows) window->_synchronizeGeometry(); } auto pApplication::quit() -> void { //if gtk_main() was invoked, call gtk_main_quit() if(gtk_main_level()) gtk_main_quit(); #if defined(DISPLAY_XORG) if(state().display) { if(state().screenSaverXDG && state().screenSaverWindow) { //this needs to run synchronously, so that XUnmapWindow() won't happen before xdg-screensaver is finished execute("xdg-screensaver", "resume", string{"0x", hex(state().screenSaverWindow)}); XUnmapWindow(state().display, state().screenSaverWindow); state().screenSaverWindow = 0; } XCloseDisplay(state().display); state().display = nullptr; } #endif } auto pApplication::setScreenSaver(bool screenSaver) -> void { #if defined(DISPLAY_XORG) if(state().screenSaverXDG && state().screenSaverWindow) { //when invoking this command on Linux under Xfce, the follow message is written to the terminal: //"org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files" //to silence this message, stdout and stderr are redirected to /dev/null while invoking this command. auto fd = open("/dev/null", O_NONBLOCK); auto fo = dup(STDOUT_FILENO); auto fe = dup(STDERR_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); invoke("xdg-screensaver", screenSaver ? "resume" : "suspend", string{"0x", hex(state().screenSaverWindow)}); dup2(fo, STDOUT_FILENO); dup2(fe, STDERR_FILENO); close(fd); close(fo); close(fe); } #endif } auto pApplication::state() -> State& { static State state; return state; } auto pApplication::initialize() -> void { #if defined(DISPLAY_XORG) // If running on Wayland, force usage of XWayland setenv("GDK_BACKEND", "x11", 1); XInitThreads(); state().display = XOpenDisplay(nullptr); state().screenSaverXDG = (bool)execute("xdg-screensaver", "--version").output.find("xdg-screensaver"); if(state().screenSaverXDG) { auto screen = DefaultScreen(state().display); auto rootWindow = RootWindow(state().display, screen); XSetWindowAttributes attributes{}; attributes.background_pixel = BlackPixel(state().display, screen); attributes.border_pixel = 0; attributes.override_redirect = true; state().screenSaverWindow = XCreateWindow(state().display, rootWindow, 0, 0, 1, 1, 0, DefaultDepth(state().display, screen), InputOutput, DefaultVisual(state().display, screen), CWBackPixel | CWBorderPixel | CWOverrideRedirect, &attributes ); XStoreName(state().display, state().screenSaverWindow, "hiro-screen-saver-window"); XFlush(state().display); } #endif //prevent useless terminal messages: //GVFS-RemoteVolumeMonitor: "invoking List() failed for type GProxyVolumeMonitorHal: method not implemented" g_log_set_handler("GVFS-RemoteVolumeMonitor", G_LOG_LEVEL_MASK, Log_Ignore, nullptr); //GLib-GIO: "excluding {path} from kernel notification, falling back to poll g_log_set_handler("GLib-GIO", G_LOG_LEVEL_MASK, Log_Ignore, nullptr); //Gtk: "gtk_widget_size_allocate(): attempt to allocate widget with (width or height < 1)" g_log_set_handler("Gtk", G_LOG_LEVEL_MASK, Log_Filter, nullptr); //set WM_CLASS to Application::name() auto name = Application::state().name ? Application::state().name : string{"hiro"}; gdk_set_program_class(name); #if 0 && defined(BUILD_DEBUG) //force a trap on Gtk-CRITICAL and Gtk-WARNING messages //this allows gdb to perform a backtrace to find an error's origin point int argc = 3; char* argv[] = {name.get(), new char[7], new char[19], nullptr}; strcpy(argv[1], "--sync"); strcpy(argv[2], "--g-fatal-warnings"); g_log_set_always_fatal(GLogLevelFlags(G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING)); #else int argc = 1; char* argv[] = {name.get(), nullptr}; #endif char** argvp = argv; gtk_init(&argc, &argvp); GtkSettings* gtkSettings = gtk_settings_get_default(); //allow buttons to show icons g_type_class_unref(g_type_class_ref(GTK_TYPE_BUTTON)); g_object_set(gtkSettings, "gtk-button-images", true, nullptr); #if defined(DISPLAY_WINDOWS) //there is a serious bug in GTK 2.24 for Windows with the "ime" (Windows IME) input method: //by default, it will be impossible to type in text fields at all. //there are various tricks to get around this; but they are unintuitive and unreliable. //the "ime" method is chosen when various international system locales (eg Japanese) are selected. //here, we override the default input method to use the "Simple" type instead to avoid the bug. //obviously, this has a drawback: in-place editing for IMEs will not work in this mode. g_object_set(gtkSettings, "gtk-im-module", "gtk-im-context-simple", nullptr); #endif #if HIRO_GTK==2 gtk_rc_parse_string(R"( style "HiroWindow" { GtkWindow::resize-grip-width = 0 GtkWindow::resize-grip-height = 0 } class "GtkWindow" style "HiroWindow" style "HiroTreeView" { GtkTreeView::vertical-separator = 0 } class "GtkTreeView" style "HiroTreeView" style "HiroTabFrameCloseButton" { GtkWidget::focus-line-width = 0 GtkWidget::focus-padding = 0 GtkButton::default-border = {0, 0, 0, 0} GtkButton::default-outer-border = {0, 0, 0, 0} GtkButton::inner-border = {0, 1, 0, 0} } widget_class "*..." style "HiroTabFrameCloseButton" )"); #elif HIRO_GTK==3 GtkCssProvider* provider = gtk_css_provider_new(); gtk_css_provider_load_from_data(GTK_CSS_PROVIDER(provider), R"( * { font-size: 8pt; padding-top: 0px; padding-bottom: 0px; } menu { border-width: 0px; } menuitem { padding: 3px 5px; } entry { min-height: 0px; } )", -1, nullptr); GdkScreen* screen = gdk_screen_get_default(); gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #endif pKeyboard::initialize(); } } #endif ares-126/hiro/gtk/application.hpp000066400000000000000000000011441415063341600170630ustar00rootroot00000000000000#if defined(Hiro_Application) namespace hiro { struct pApplication { static auto exit() -> void; static auto modal() -> bool; static auto run() -> void; static auto pendingEvents() -> bool; static auto processEvents() -> void; static auto quit() -> void; static auto setScreenSaver(bool screenSaver) -> void; static auto initialize() -> void; struct State { vector windows; #if defined(DISPLAY_XORG) XlibDisplay* display = nullptr; XlibWindow screenSaverWindow = 0; bool screenSaverXDG = false; #endif }; static auto state() -> State&; }; } #endif ares-126/hiro/gtk/browser-window.cpp000066400000000000000000000057001415063341600175450ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { static auto BrowserWindow_addFilters(GtkWidget* dialog, vector filters) -> void { for(auto& filter : filters) { auto part = filter.split("|", 1L); if(part.size() != 2) continue; GtkFileFilter* gtkFilter = gtk_file_filter_new(); gtk_file_filter_set_name(gtkFilter, part[0]); auto patterns = part[1].split(":"); for(auto& pattern : patterns) gtk_file_filter_add_pattern(gtkFilter, pattern); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), gtkFilter); } } auto pBrowserWindow::directory(BrowserWindow::State& state) -> string { string name; GtkWidget* dialog = gtk_file_chooser_dialog_new( state.title ? state.title : "Select Directory", state.parent && state.parent->self() ? GTK_WINDOW(state.parent->self()->widget) : (GtkWindow*)nullptr, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, (const gchar*)nullptr ); if(state.path) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), state.path); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char* temp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); name = temp; g_free(temp); } gtk_widget_destroy(dialog); if(name && !name.endsWith("/")) name.append("/"); return name; } auto pBrowserWindow::open(BrowserWindow::State& state) -> string { string name; GtkWidget* dialog = gtk_file_chooser_dialog_new( state.title ? state.title : "Open File", state.parent && state.parent->self() ? GTK_WINDOW(state.parent->self()->widget) : (GtkWindow*)nullptr, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, (const gchar*)nullptr ); if(state.path) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), state.path); BrowserWindow_addFilters(dialog, state.filters); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char* temp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); name = temp; g_free(temp); } gtk_widget_destroy(dialog); return name; } auto pBrowserWindow::save(BrowserWindow::State& state) -> string { string name; GtkWidget* dialog = gtk_file_chooser_dialog_new( state.title ? state.title : "Save File", state.parent && state.parent->self() ? GTK_WINDOW(state.parent->self()->widget) : (GtkWindow*)nullptr, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, (const gchar*)nullptr ); if(state.path) gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), state.path); BrowserWindow_addFilters(dialog, state.filters); if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char* temp = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); name = temp; g_free(temp); } gtk_widget_destroy(dialog); return name; } } #endif ares-126/hiro/gtk/browser-window.hpp000066400000000000000000000004171415063341600175520ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { struct pBrowserWindow { static auto directory(BrowserWindow::State& state) -> string; static auto open(BrowserWindow::State& state) -> string; static auto save(BrowserWindow::State& state) -> string; }; } #endif ares-126/hiro/gtk/desktop.cpp000066400000000000000000000026031415063341600162250ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { auto pDesktop::size() -> Size { return { gdk_screen_get_width(gdk_screen_get_default()), gdk_screen_get_height(gdk_screen_get_default()) }; } auto pDesktop::workspace() -> Geometry { #if defined(DISPLAY_WINDOWS) RECT rc; SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0); return {rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top}; #endif #if defined(DISPLAY_XORG) auto display = XOpenDisplay(nullptr); s32 screen = DefaultScreen(display); s32 format; unsigned char* data = nullptr; unsigned long items, after; XlibAtom returnAtom; XlibAtom netWorkarea = XInternAtom(display, "_NET_WORKAREA", XlibTrue); s32 result = XGetWindowProperty( display, RootWindow(display, screen), netWorkarea, 0, 4, XlibFalse, XInternAtom(display, "CARDINAL", XlibTrue), &returnAtom, &format, &items, &after, &data ); XlibAtom cardinal = XInternAtom(display, "CARDINAL", XlibTrue); if(result == Success && returnAtom == cardinal && format == 32 && items == 4) { unsigned long* workarea = (unsigned long*)data; XCloseDisplay(display); return {(s32)workarea[0], (s32)workarea[1], (s32)workarea[2], (s32)workarea[3]}; } XCloseDisplay(display); return { 0, 0, gdk_screen_get_width(gdk_screen_get_default()), gdk_screen_get_height(gdk_screen_get_default()) }; #endif return {}; } } #endif ares-126/hiro/gtk/desktop.hpp000066400000000000000000000002221415063341600162250ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { struct pDesktop { static auto size() -> Size; static auto workspace() -> Geometry; }; } #endif ares-126/hiro/gtk/font.cpp000066400000000000000000000043251415063341600155250ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { auto pFont::size(const Font& font, const string& text) -> Size { PangoFontDescription* description = create(font); Size size = pFont::size(description, text); free(description); return size; } auto pFont::size(PangoFontDescription* font, const string& text) -> Size { PangoContext* context = gdk_pango_context_get_for_screen(gdk_screen_get_default()); PangoLayout* layout = pango_layout_new(context); pango_layout_set_font_description(layout, font); pango_layout_set_text(layout, text, -1); s32 width = 0, height = 0; pango_layout_get_pixel_size(layout, &width, &height); g_object_unref(layout); g_object_unref(context); return {width, height}; } auto pFont::family(const string& family) -> string { #if defined(DISPLAY_WINDOWS) if(family == Font::Sans ) return "Tahoma"; if(family == Font::Serif) return "Georgia"; if(family == Font::Mono ) return "Lucida Console"; return family ? family : "Tahoma"; #elif defined(DISPLAY_XORG) if(family == Font::Sans ) return "Sans"; if(family == Font::Serif) return "Serif"; if(family == Font::Mono ) return "Monospace"; return family ? family : "Sans"; #else return family; #endif } auto pFont::create(const Font& font) -> PangoFontDescription* { auto p = pango_font_description_new(); pango_font_description_set_family(p, family(font.family())); pango_font_description_set_size(p, Application::scale(font.size() ? font.size() : 8) * PANGO_SCALE); pango_font_description_set_weight(p, font.bold() ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL); pango_font_description_set_style(p, font.italic() ? PANGO_STYLE_OBLIQUE : PANGO_STYLE_NORMAL); return p; } auto pFont::free(PangoFontDescription* font) -> void { pango_font_description_free(font); } auto pFont::setFont(GtkWidget* widget, const Font& font) -> void { auto gtkFont = pFont::create(font); pFont::setFont(widget, (gpointer)gtkFont); pFont::free(gtkFont); } auto pFont::setFont(GtkWidget* widget, gpointer font) -> void { if(font == nullptr) return; gtk_widget_modify_font(widget, (PangoFontDescription*)font); if(GTK_IS_CONTAINER(widget)) { gtk_container_foreach(GTK_CONTAINER(widget), (GtkCallback)pFont::setFont, font); } } } #endif ares-126/hiro/gtk/font.hpp000066400000000000000000000010111415063341600155170ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { struct pFont { static auto size(const Font& font, const string& text) -> Size; static auto size(PangoFontDescription* font, const string& text) -> Size; static auto family(const string& family) -> string; static auto create(const Font& font) -> PangoFontDescription*; static auto free(PangoFontDescription* font) -> void; static auto setFont(GtkWidget* widget, const Font& font) -> void; static auto setFont(GtkWidget* widget, gpointer font) -> void; }; } #endif ares-126/hiro/gtk/group.cpp000066400000000000000000000002001415063341600156770ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { auto pGroup::construct() -> void { } auto pGroup::destruct() -> void { } } #endif ares-126/hiro/gtk/group.hpp000066400000000000000000000001541415063341600157140ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { struct pGroup : pObject { Declare(Group, Object) }; } #endif ares-126/hiro/gtk/header.hpp000066400000000000000000000025121415063341600160100ustar00rootroot00000000000000#if defined(DISPLAY_WINDOWS) #define TBS_TRANSPARENTBKGND 0x1000 #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(Hiro_SourceEdit) #if HIRO_GTK==2 #include #include #include #elif HIRO_GTK==3 #include #endif #endif #include #include #include #endif #if defined(DISPLAY_XORG) #include #include #include #include #include #include #include #if defined(Hiro_SourceEdit) #if HIRO_GTK==2 #include #include #include #elif HIRO_GTK==3 #include #endif #endif #include #endif ares-126/hiro/gtk/keyboard.cpp000066400000000000000000000157001415063341600163560ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { auto pKeyboard::poll() -> vector { if(Application::state().quit) return {}; vector result; char state[256]; #if defined(DISPLAY_XORG) XQueryKeymap(pApplication::state().display, state); #endif for(auto& code : settings.keycodes) { result.append(_pressed(state, code)); } return result; } auto pKeyboard::pressed(u32 code) -> bool { char state[256]; #if defined(DISPLAY_XORG) XQueryKeymap(pApplication::state().display, state); #endif return _pressed(state, code); } auto pKeyboard::_pressed(const char* state, u16 code) -> bool { u8 lo = code >> 0; u8 hi = code >> 8; #if defined(DISPLAY_WINDOWS) if(lo && GetAsyncKeyState(lo) & 0x8000) return true; if(hi && GetAsyncKeyState(hi) & 0x8000) return true; #endif #if defined(DISPLAY_XORG) if(lo && state[lo >> 3] & (1 << (lo & 7))) return true; if(hi && state[hi >> 3] & (1 << (hi & 7))) return true; #endif return false; } auto pKeyboard::_translate(u32 code) -> s32 { switch(code) { case GDK_KEY_Escape: return 0; case GDK_KEY_F1: return 0; case GDK_KEY_F2: return 0; case GDK_KEY_F3: return 0; case GDK_KEY_F4: return 0; case GDK_KEY_F5: return 0; case GDK_KEY_F6: return 0; case GDK_KEY_F7: return 0; case GDK_KEY_F8: return 0; case GDK_KEY_F9: return 0; case GDK_KEY_F10: return 0; case GDK_KEY_F11: return 0; case GDK_KEY_F12: return 0; case GDK_KEY_Print: return 0; case GDK_KEY_Scroll_Lock: return 0; case GDK_KEY_Pause: return 0; case GDK_KEY_Insert: return 0; case GDK_KEY_Delete: return 0; case GDK_KEY_Home: return 0; case GDK_KEY_End: return 0; case GDK_KEY_Prior: return 0; case GDK_KEY_Next: return 0; case GDK_KEY_Up: return 0; case GDK_KEY_Down: return 0; case GDK_KEY_Left: return 0; case GDK_KEY_Right: return 0; case GDK_KEY_grave: return '`'; case GDK_KEY_1: return '1'; case GDK_KEY_2: return '2'; case GDK_KEY_3: return '3'; case GDK_KEY_4: return '4'; case GDK_KEY_5: return '5'; case GDK_KEY_6: return '6'; case GDK_KEY_7: return '7'; case GDK_KEY_8: return '8'; case GDK_KEY_9: return '9'; case GDK_KEY_0: return '0'; case GDK_KEY_minus: return '-'; case GDK_KEY_equal: return '='; case GDK_KEY_BackSpace: return '\b'; case GDK_KEY_asciitilde: return '~'; case GDK_KEY_exclam: return '!'; case GDK_KEY_at: return '@'; case GDK_KEY_numbersign: return '#'; case GDK_KEY_dollar: return '$'; case GDK_KEY_percent: return '%'; case GDK_KEY_asciicircum: return '^'; case GDK_KEY_ampersand: return '&'; case GDK_KEY_asterisk: return '*'; case GDK_KEY_parenleft: return '('; case GDK_KEY_parenright: return ')'; case GDK_KEY_underscore: return '_'; case GDK_KEY_plus: return '+'; case GDK_KEY_Tab: return '\t'; case GDK_KEY_Caps_Lock: return 0; case GDK_KEY_Return: return '\n'; case GDK_KEY_Shift_L: return 0; case GDK_KEY_Shift_R: return 0; case GDK_KEY_Control_L: return 0; case GDK_KEY_Control_R: return 0; case GDK_KEY_Alt_L: return 0; case GDK_KEY_Alt_R: return 0; case GDK_KEY_Super_L: return 0; case GDK_KEY_Super_R: return 0; case GDK_KEY_Menu: return 0; case GDK_KEY_space: return ' '; case GDK_KEY_bracketleft: return '['; case GDK_KEY_bracketright: return ']'; case GDK_KEY_backslash: return '\\'; case GDK_KEY_semicolon: return ';'; case GDK_KEY_apostrophe: return '\''; case GDK_KEY_comma: return ','; case GDK_KEY_period: return '.'; case GDK_KEY_slash: return '/'; case GDK_KEY_braceleft: return '{'; case GDK_KEY_braceright: return '}'; case GDK_KEY_bar: return '|'; case GDK_KEY_colon: return ':'; case GDK_KEY_quotedbl: return '\"'; case GDK_KEY_less: return '<'; case GDK_KEY_greater: return '>'; case GDK_KEY_question: return '?'; case GDK_KEY_A: return 'A'; case GDK_KEY_B: return 'B'; case GDK_KEY_C: return 'C'; case GDK_KEY_D: return 'D'; case GDK_KEY_E: return 'E'; case GDK_KEY_F: return 'F'; case GDK_KEY_G: return 'G'; case GDK_KEY_H: return 'H'; case GDK_KEY_I: return 'I'; case GDK_KEY_J: return 'J'; case GDK_KEY_K: return 'K'; case GDK_KEY_L: return 'L'; case GDK_KEY_M: return 'M'; case GDK_KEY_N: return 'N'; case GDK_KEY_O: return 'O'; case GDK_KEY_P: return 'P'; case GDK_KEY_Q: return 'Q'; case GDK_KEY_R: return 'R'; case GDK_KEY_S: return 'S'; case GDK_KEY_T: return 'T'; case GDK_KEY_U: return 'U'; case GDK_KEY_V: return 'V'; case GDK_KEY_W: return 'W'; case GDK_KEY_X: return 'X'; case GDK_KEY_Y: return 'Y'; case GDK_KEY_Z: return 'Z'; case GDK_KEY_a: return 'a'; case GDK_KEY_b: return 'b'; case GDK_KEY_c: return 'c'; case GDK_KEY_d: return 'd'; case GDK_KEY_e: return 'e'; case GDK_KEY_f: return 'f'; case GDK_KEY_g: return 'g'; case GDK_KEY_h: return 'h'; case GDK_KEY_i: return 'i'; case GDK_KEY_j: return 'j'; case GDK_KEY_k: return 'k'; case GDK_KEY_l: return 'l'; case GDK_KEY_m: return 'm'; case GDK_KEY_n: return 'n'; case GDK_KEY_o: return 'o'; case GDK_KEY_p: return 'p'; case GDK_KEY_q: return 'q'; case GDK_KEY_r: return 'r'; case GDK_KEY_s: return 's'; case GDK_KEY_t: return 't'; case GDK_KEY_u: return 'u'; case GDK_KEY_v: return 'v'; case GDK_KEY_w: return 'w'; case GDK_KEY_x: return 'x'; case GDK_KEY_y: return 'y'; case GDK_KEY_z: return 'z'; case GDK_KEY_Num_Lock: return 0; case GDK_KEY_KP_Divide: return '/'; case GDK_KEY_KP_Multiply: return '*'; case GDK_KEY_KP_Subtract: return '-'; case GDK_KEY_KP_Add: return '+'; case GDK_KEY_KP_Enter: return '\n'; case GDK_KEY_KP_Decimal: return '.'; case GDK_KEY_KP_1: return '1'; case GDK_KEY_KP_2: return '2'; case GDK_KEY_KP_3: return '3'; case GDK_KEY_KP_4: return '4'; case GDK_KEY_KP_5: return '5'; case GDK_KEY_KP_6: return '6'; case GDK_KEY_KP_7: return '7'; case GDK_KEY_KP_8: return '8'; case GDK_KEY_KP_9: return '9'; case GDK_KEY_KP_0: return '0'; case GDK_KEY_KP_Home: return 0; case GDK_KEY_KP_End: return 0; case GDK_KEY_KP_Page_Up: return 0; case GDK_KEY_KP_Page_Down: return 0; case GDK_KEY_KP_Up: return 0; case GDK_KEY_KP_Down: return 0; case GDK_KEY_KP_Left: return 0; case GDK_KEY_KP_Right: return 0; case GDK_KEY_KP_Begin: return 0; case GDK_KEY_KP_Insert: return 0; case GDK_KEY_KP_Delete: return 0; } return 0; } auto pKeyboard::initialize() -> void { auto append = [](u32 lo, u32 hi = 0) { #if defined(DISPLAY_XORG) lo = lo ? (u8)XKeysymToKeycode(pApplication::state().display, lo) : 0; hi = hi ? (u8)XKeysymToKeycode(pApplication::state().display, hi) : 0; #endif settings.keycodes.append(lo | (hi << 8)); }; #define map(name, ...) if(key == name) { append(__VA_ARGS__); continue; } for(auto& key : Keyboard::keys) { #if defined(DISPLAY_WINDOWS) #include #endif #if defined(DISPLAY_XORG) #include #endif //print("[hiro/gtk] warning: unhandled key: ", key, "\n"); append(0); } #undef map } } #endif ares-126/hiro/gtk/keyboard.hpp000066400000000000000000000004541415063341600163630ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { struct pKeyboard { static auto poll() -> vector; static auto pressed(u32 code) -> bool; static auto _pressed(const char* state, u16 code) -> bool; static auto _translate(u32 code) -> s32; static auto initialize() -> void; }; } #endif ares-126/hiro/gtk/menu-bar.cpp000066400000000000000000000016261415063341600162660ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { auto pMenuBar::construct() -> void { } auto pMenuBar::destruct() -> void { } auto pMenuBar::append(sMenu menu) -> void { if(auto parent = _parent()) { parent->_append(*menu); if(menu->self()) { menu->self()->setFont(menu->font(true)); menu->self()->setVisible(menu->visible()); } } } auto pMenuBar::remove(sMenu menu) -> void { } auto pMenuBar::setEnabled(bool enabled) -> void { if(auto parent = _parent()) { parent->_setMenuEnabled(enabled); } } auto pMenuBar::setFont(const Font& font) -> void { if(auto parent = _parent()) { parent->_setMenuFont(font); } } auto pMenuBar::setVisible(bool visible) -> void { if(auto parent = _parent()) { parent->_setMenuVisible(visible); } } auto pMenuBar::_parent() -> pWindow* { if(auto parent = self().parentWindow()) return parent->self(); return nullptr; } } #endif ares-126/hiro/gtk/menu-bar.hpp000066400000000000000000000005571415063341600162750ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { struct pMenuBar : pObject { Declare(MenuBar, Object) auto append(sMenu menu) -> void; auto remove(sMenu menu) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; auto _parent() -> pWindow*; }; } #endif ares-126/hiro/gtk/message-window.cpp000066400000000000000000000051271415063341600175110ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { static auto Message(MessageWindow::State& state, GtkMessageType messageStyle) -> MessageWindow::Response { GtkWidget* dialog = gtk_message_dialog_new( state.parent && state.parent->self() ? GTK_WINDOW(state.parent->self()->widget) : (GtkWindow*)nullptr, GTK_DIALOG_MODAL, messageStyle, GTK_BUTTONS_NONE, "%s", (const char*)state.text ); if(state.title) gtk_window_set_title(GTK_WINDOW(dialog), state.title); else if(Application::state().name) gtk_window_set_title(GTK_WINDOW(dialog), Application::state().name); switch(state.buttons) { case MessageWindow::Buttons::Ok: gtk_dialog_add_buttons(GTK_DIALOG(dialog), "Ok", GTK_RESPONSE_OK, nullptr); break; case MessageWindow::Buttons::OkCancel: gtk_dialog_add_buttons(GTK_DIALOG(dialog), "Ok", GTK_RESPONSE_OK, "Cancel", GTK_RESPONSE_CANCEL, nullptr); break; case MessageWindow::Buttons::YesNo: gtk_dialog_add_buttons(GTK_DIALOG(dialog), "Yes", GTK_RESPONSE_YES, "No", GTK_RESPONSE_NO, nullptr); break; case MessageWindow::Buttons::YesNoCancel: gtk_dialog_add_buttons(GTK_DIALOG(dialog), "Yes", GTK_RESPONSE_YES, "No", GTK_RESPONSE_NO, "Cancel", GTK_RESPONSE_CANCEL, nullptr); break; } auto response = gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(dialog); if(response == GTK_RESPONSE_OK) return MessageWindow::Response::Ok; if(response == GTK_RESPONSE_CANCEL) return MessageWindow::Response::Cancel; if(response == GTK_RESPONSE_YES) return MessageWindow::Response::Yes; if(response == GTK_RESPONSE_NO) return MessageWindow::Response::No; //if dialog was closed without choosing a button, choose the most appropriate response if(state.buttons == MessageWindow::Buttons::Ok) return MessageWindow::Response::Ok; if(state.buttons == MessageWindow::Buttons::OkCancel) return MessageWindow::Response::Cancel; if(state.buttons == MessageWindow::Buttons::YesNo) return MessageWindow::Response::No; if(state.buttons == MessageWindow::Buttons::YesNoCancel) return MessageWindow::Response::Cancel; throw; } auto pMessageWindow::error(MessageWindow::State& state) -> MessageWindow::Response { return Message(state, GTK_MESSAGE_ERROR); } auto pMessageWindow::information(MessageWindow::State& state) -> MessageWindow::Response { return Message(state, GTK_MESSAGE_INFO); } auto pMessageWindow::question(MessageWindow::State& state) -> MessageWindow::Response { return Message(state, GTK_MESSAGE_QUESTION); } auto pMessageWindow::warning(MessageWindow::State& state) -> MessageWindow::Response { return Message(state, GTK_MESSAGE_WARNING); } } #endif ares-126/hiro/gtk/message-window.hpp000066400000000000000000000006301415063341600175100ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { struct pMessageWindow { static auto error(MessageWindow::State& state) -> MessageWindow::Response; static auto information(MessageWindow::State& state) -> MessageWindow::Response; static auto question(MessageWindow::State& state) -> MessageWindow::Response; static auto warning(MessageWindow::State& state) -> MessageWindow::Response; }; } #endif ares-126/hiro/gtk/monitor.cpp000066400000000000000000000040751415063341600162500ustar00rootroot00000000000000#if defined(Hiro_Monitor) //GTK 3.22 adds new monitor functions //using GTK 2.x functions as FreeBSD 10.1 uses GTK 3.8 namespace hiro { auto pMonitor::count() -> u32 { #if HIRO_GTK==2 || 1 return gdk_screen_get_n_monitors(gdk_screen_get_default()); #elif HIRO_GTK==3 return gdk_display_get_n_monitors(gdk_display_get_default()); #endif } auto pMonitor::dpi(u32 monitor) -> Position { #if HIRO_GTK==2 || 1 //GTK2 does not support either per-monitor or per-axis DPI reporting float dpi = round(gdk_screen_get_resolution(gdk_screen_get_default())); return {dpi, dpi}; #elif HIRO_GTK==3 auto gdkMonitor = gdk_display_get_monitor(gdk_display_get_default(), monitor); return { round(gdk_monitor_get_width(gdkMonitor) / (gdk_monitor_get_width_mm(gdkMonitor) / 25.4)), round(gdk_monitor_get_height(gdkMonitor) / (gdk_monitor_get_height_mm(gdkMonitor) / 25.4)) }; #endif } auto pMonitor::geometry(u32 monitor) -> Geometry { GdkRectangle rectangle = {}; #if HIRO_GTK==2 || 1 gdk_screen_get_monitor_geometry(gdk_screen_get_default(), monitor, &rectangle); #elif HIRO_GTK==3 auto gdkMonitor = gdk_display_get_monitor(gdk_display_get_default(), monitor); gdk_monitor_get_geometry(monitor, &rectangle); #endif return {rectangle.x, rectangle.y, rectangle.width, rectangle.height}; } auto pMonitor::primary() -> u32 { #if HIRO_GTK==2 || 1 return gdk_screen_get_primary_monitor(gdk_screen_get_default()); #elif HIRO_GTK==3 return gdk_display_get_primary_monitor(gdk_display_get_default()); #endif } auto pMonitor::workspace(u32 monitor) -> Geometry { #if HIRO_GTK==2 || 1 if(Monitor::count() == 1) { return Desktop::workspace(); } else { //it is currently unknown how to get per-monitor workspace areas, use geometry instead return Monitor::geometry(monitor); } #elif HIRO_GTK==3 auto gdkMonitor = gdk_display_get_monitor(gdk_display_get_default(), monitor); GdkRectangle rectangle = {}; gdk_monitor_get_workarea(monitor, &rectangle); return {rectangle.x, rectangle.y, rectangle.width, rectangle.height}; #endif } } #endif ares-126/hiro/gtk/monitor.hpp000066400000000000000000000004321415063341600162460ustar00rootroot00000000000000#if defined(Hiro_Monitor) namespace hiro { struct pMonitor { static auto count() -> u32; static auto dpi(u32 monitor) -> Position; static auto geometry(u32 monitor) -> Geometry; static auto primary() -> u32; static auto workspace(u32 monitor) -> Geometry; }; } #endif ares-126/hiro/gtk/mouse.cpp000066400000000000000000000024211415063341600157020ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { auto pMouse::position() -> Position { #if defined(DISPLAY_WINDOWS) POINT point{}; GetCursorPos(&point); return {point.x, point.y}; #endif #if defined(DISPLAY_XORG) XlibWindow root, child; s32 rootx, rooty, winx, winy; u32 mask; XQueryPointer(pApplication::state().display, DefaultRootWindow(pApplication::state().display), &root, &child, &rootx, &rooty, &winx, &winy, &mask); return {rootx, rooty}; #endif } auto pMouse::pressed(Mouse::Button button) -> bool { #if defined(DISPLAY_WINDOWS) switch(button) { case Mouse::Button::Left: return GetAsyncKeyState(VK_LBUTTON) & 0x8000; case Mouse::Button::Middle: return GetAsyncKeyState(VK_MBUTTON) & 0x8000; case Mouse::Button::Right: return GetAsyncKeyState(VK_RBUTTON) & 0x8000; } #endif #if defined(DISPLAY_XORG) XlibWindow root, child; s32 rootx, rooty, winx, winy; u32 mask; XQueryPointer(pApplication::state().display, DefaultRootWindow(pApplication::state().display), &root, &child, &rootx, &rooty, &winx, &winy, &mask); switch(button) { case Mouse::Button::Left: return mask & Button1Mask; case Mouse::Button::Middle: return mask & Button2Mask; case Mouse::Button::Right: return mask & Button3Mask; } #endif return false; } } #endif ares-126/hiro/gtk/mouse.hpp000066400000000000000000000002441415063341600157100ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { struct pMouse { static auto position() -> Position; static auto pressed(Mouse::Button button) -> bool; }; } #endif ares-126/hiro/gtk/object.cpp000066400000000000000000000007121415063341600160210ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { auto pObject::construct() -> void { } auto pObject::destruct() -> void { } auto pObject::focused() const -> bool { return false; } auto pObject::remove() -> void { } auto pObject::reset() -> void { } auto pObject::setEnabled(bool enabled) -> void { } auto pObject::setFocused() -> void { } auto pObject::setFont(const Font& font) -> void { } auto pObject::setVisible(bool visible) -> void { } } #endif ares-126/hiro/gtk/object.hpp000066400000000000000000000012441415063341600160270ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { struct pObject : Lock { pObject(mObject& reference) : reference(reference) {} virtual ~pObject() {} auto self() const -> mObject& { return (mObject&)reference; } auto state() const -> mObject::State& { return self().state; } virtual auto construct() -> void; virtual auto destruct() -> void; virtual auto focused() const -> bool; virtual auto remove() -> void; virtual auto reset() -> void; virtual auto setEnabled(bool enabled) -> void; virtual auto setFocused() -> void; virtual auto setFont(const Font& font) -> void; virtual auto setVisible(bool visible) -> void; mObject& reference; }; } #endif ares-126/hiro/gtk/platform.cpp000066400000000000000000000034521415063341600164030ustar00rootroot00000000000000#include "platform.hpp" #include "utility.cpp" #include "font.cpp" #include "desktop.cpp" #include "monitor.cpp" #include "keyboard.cpp" #include "mouse.cpp" #include "browser-window.cpp" #include "message-window.cpp" #include "object.cpp" #include "group.cpp" #include "timer.cpp" #include "window.cpp" #include "status-bar.cpp" #include "menu-bar.cpp" #include "popup-menu.cpp" #include "action/action.cpp" #include "action/menu.cpp" #include "action/menu-separator.cpp" #include "action/menu-item.cpp" #include "action/menu-check-item.cpp" #include "action/menu-radio-item.cpp" #include "sizable.cpp" #include "widget/widget.cpp" #include "widget/button.cpp" #include "widget/canvas.cpp" #include "widget/check-button.cpp" #include "widget/check-label.cpp" #include "widget/combo-button.cpp" #include "widget/combo-button-item.cpp" #include "widget/combo-edit.cpp" #include "widget/combo-edit-item.cpp" #include "widget/console.cpp" #include "widget/frame.cpp" #include "widget/hex-edit.cpp" #include "widget/horizontal-scroll-bar.cpp" #include "widget/horizontal-slider.cpp" #include "widget/icon-view.cpp" #include "widget/icon-view-item.cpp" #include "widget/label.cpp" #include "widget/line-edit.cpp" #include "widget/progress-bar.cpp" #include "widget/radio-button.cpp" #include "widget/radio-label.cpp" #include "widget/source-edit.cpp" #include "widget/tab-frame.cpp" #include "widget/tab-frame-item.cpp" #include "widget/table-view.cpp" #include "widget/table-view-column.cpp" #include "widget/table-view-item.cpp" #include "widget/table-view-cell.cpp" #include "widget/text-edit.cpp" #include "widget/tree-view.cpp" #include "widget/tree-view-item.cpp" #include "widget/vertical-scroll-bar.cpp" #include "widget/vertical-slider.cpp" #include "widget/viewport.cpp" #include "application.cpp" #include "settings.cpp" ares-126/hiro/gtk/platform.hpp000066400000000000000000000040631415063341600164070ustar00rootroot00000000000000#define Declare(Name, Base) \ p##Name(m##Name& reference) : p##Base(reference) {} \ auto self() const -> m##Name& { return (m##Name&)reference; } \ auto state() const -> m##Name::State& { return self().state; } \ auto construct() -> void override; \ auto destruct() -> void override; \ #include "font.hpp" #include "desktop.hpp" #include "monitor.hpp" #include "keyboard.hpp" #include "mouse.hpp" #include "browser-window.hpp" #include "message-window.hpp" #include "object.hpp" #include "group.hpp" #include "timer.hpp" #include "window.hpp" #include "status-bar.hpp" #include "menu-bar.hpp" #include "popup-menu.hpp" #include "action/action.hpp" #include "action/menu.hpp" #include "action/menu-separator.hpp" #include "action/menu-item.hpp" #include "action/menu-check-item.hpp" #include "action/menu-radio-item.hpp" #include "sizable.hpp" #include "widget/widget.hpp" #include "widget/button.hpp" #include "widget/canvas.hpp" #include "widget/check-button.hpp" #include "widget/check-label.hpp" #include "widget/combo-button.hpp" #include "widget/combo-button-item.hpp" #include "widget/combo-edit.hpp" #include "widget/combo-edit-item.hpp" #include "widget/console.hpp" #include "widget/frame.hpp" #include "widget/hex-edit.hpp" #include "widget/horizontal-scroll-bar.hpp" #include "widget/horizontal-slider.hpp" #include "widget/icon-view.hpp" #include "widget/icon-view-item.hpp" #include "widget/label.hpp" #include "widget/line-edit.hpp" #include "widget/progress-bar.hpp" #include "widget/radio-button.hpp" #include "widget/radio-label.hpp" #include "widget/source-edit.hpp" #include "widget/tab-frame.hpp" #include "widget/tab-frame-item.hpp" #include "widget/table-view.hpp" #include "widget/table-view-column.hpp" #include "widget/table-view-item.hpp" #include "widget/table-view-cell.hpp" #include "widget/text-edit.hpp" #include "widget/tree-view.hpp" #include "widget/tree-view-item.hpp" #include "widget/vertical-scroll-bar.hpp" #include "widget/vertical-slider.hpp" #include "widget/viewport.hpp" #undef Declare #include "application.hpp" #include "settings.hpp" ares-126/hiro/gtk/popup-menu.cpp000066400000000000000000000015251415063341600166630ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) namespace hiro { auto pPopupMenu::construct() -> void { gtkMenu = gtk_menu_new(); } auto pPopupMenu::destruct() -> void { gtk_widget_destroy(gtkMenu); } auto pPopupMenu::append(sAction action) -> void { if(action->self()) { gtk_menu_shell_append(GTK_MENU_SHELL(gtkMenu), action->self()->widget); action->self()->setFont(action->font(true)); action->self()->setVisible(action->visible(true)); } } auto pPopupMenu::remove(sAction action) -> void { } auto pPopupMenu::setFont(const Font& font) -> void { for(auto& action : state().actions) { if(action->self()) action->self()->setFont(action->font(true)); } } auto pPopupMenu::setVisible(bool visible) -> void { if(visible) gtk_menu_popup(GTK_MENU(gtkMenu), nullptr, nullptr, nullptr, nullptr, 0, gtk_get_current_event_time()); } } #endif ares-126/hiro/gtk/popup-menu.hpp000066400000000000000000000005151415063341600166660ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) namespace hiro { struct pPopupMenu : pObject { Declare(PopupMenu, Object) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; GtkWidget* gtkMenu = nullptr; }; } #endif ares-126/hiro/gtk/settings.cpp000066400000000000000000000031231415063341600164120ustar00rootroot00000000000000namespace hiro { Settings::Settings() { string path = {Path::userData(), "hiro/"}; #if HIRO_GTK==2 auto document = BML::unserialize(file::read({path, "gtk2.bml"})); #elif HIRO_GTK==3 auto document = BML::unserialize(file::read({path, "gtk3.bml"})); #endif #define get(name, type, value) \ if(auto node = document[name]) value = node.type() get("Geometry/FrameX", integer, geometry.frameX); get("Geometry/FrameY", integer, geometry.frameY); get("Geometry/FrameWidth", integer, geometry.frameWidth); get("Geometry/FrameHeight", integer, geometry.frameHeight); get("Geometry/MenuHeight", integer, geometry.menuHeight); get("Geometry/StatusHeight", integer, geometry.statusHeight); get("Theme/ActionIcons", boolean, theme.actionIcons); get("Theme/WidgetColors", boolean, theme.widgetColors); #undef get } Settings::~Settings() { string path = {Path::userData(), "hiro/"}; directory::create(path, 0755); Markup::Node document; #define set(name, value) \ document(name).setValue(value) set("Geometry/FrameX", geometry.frameX); set("Geometry/FrameY", geometry.frameY); set("Geometry/FrameWidth", geometry.frameWidth); set("Geometry/FrameHeight", geometry.frameHeight); set("Geometry/MenuHeight", geometry.menuHeight); set("Geometry/StatusHeight", geometry.statusHeight); set("Theme/ActionIcons", theme.actionIcons); set("Theme/WidgetColors", theme.widgetColors); #undef set #if HIRO_GTK==2 file::write({path, "gtk2.bml"}, BML::serialize(document)); #elif HIRO_GTK==3 file::write({path, "gtk3.bml"}, BML::serialize(document)); #endif } } ares-126/hiro/gtk/settings.hpp000066400000000000000000000006031415063341600164170ustar00rootroot00000000000000namespace hiro { struct Settings { Settings(); ~Settings(); vector keycodes; struct Geometry { s32 frameX = 4; s32 frameY = 24; s32 frameWidth = 8; s32 frameHeight = 28; s32 menuHeight = 8; s32 statusHeight = 4; } geometry; struct Theme { bool actionIcons = true; bool widgetColors = true; } theme; }; static Settings settings; } ares-126/hiro/gtk/sizable.cpp000066400000000000000000000005221415063341600162030ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { auto pSizable::construct() -> void { } auto pSizable::destruct() -> void { } auto pSizable::minimumSize() const -> Size { return {0, 0}; } auto pSizable::setCollapsible(bool collapsible) -> void { } auto pSizable::setGeometry(Geometry geometry) -> void { self().doSize(); } } #endif ares-126/hiro/gtk/sizable.hpp000066400000000000000000000004171415063341600162130ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { struct pSizable : pObject { Declare(Sizable, Object) virtual auto minimumSize() const -> Size; virtual auto setCollapsible(bool collapsible) -> void; virtual auto setGeometry(Geometry geometry) -> void; }; } #endif ares-126/hiro/gtk/status-bar.cpp000066400000000000000000000014171415063341600166430ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { auto pStatusBar::construct() -> void { } auto pStatusBar::destruct() -> void { } auto pStatusBar::setEnabled(bool enabled) -> void { if(auto parent = _parent()) { parent->_setStatusEnabled(enabled); } } auto pStatusBar::setFont(const Font& font) -> void { if(auto parent = _parent()) { parent->_setStatusFont(font); } } auto pStatusBar::setText(const string& text) -> void { if(auto parent = _parent()) { parent->_setStatusText(text); } } auto pStatusBar::setVisible(bool visible) -> void { if(auto parent = _parent()) { parent->_setStatusVisible(visible); } } auto pStatusBar::_parent() -> pWindow* { if(auto parent = self().parentWindow()) return parent->self(); return nullptr; } } #endif ares-126/hiro/gtk/status-bar.hpp000066400000000000000000000005331415063341600166460ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { struct pStatusBar : pObject { Declare(StatusBar, Object) auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _parent() -> pWindow*; }; } #endif ares-126/hiro/gtk/timer.cpp000066400000000000000000000015641415063341600157010ustar00rootroot00000000000000#if defined(Hiro_Timer) namespace hiro { static auto Timer_trigger(pTimer* p) -> int { //prevent all timers from firing once the program has been terminated if(Application::state().quit) return false; //timer may have been disabled prior to triggering, so check state if(p->self().enabled(true)) p->self().doActivate(); //callback may have disabled timer, so check state again if(p->self().enabled(true)) { g_timeout_add(p->state().interval, (GSourceFunc)Timer_trigger, (gpointer)p); } //kill this timer instance (it is spawned above if needed again) return false; } auto pTimer::construct() -> void { } auto pTimer::destruct() -> void { } auto pTimer::setEnabled(bool enabled) -> void { if(enabled) { g_timeout_add(state().interval, (GSourceFunc)Timer_trigger, (gpointer)this); } } auto pTimer::setInterval(u32 interval) -> void { } } #endif ares-126/hiro/gtk/timer.hpp000066400000000000000000000003111415063341600156730ustar00rootroot00000000000000#if defined(Hiro_Timer) namespace hiro { struct pTimer : pObject { Declare(Timer, Object) auto setEnabled(bool enabled) -> void override; auto setInterval(u32 interval) -> void; }; } #endif ares-126/hiro/gtk/utility.cpp000066400000000000000000000033211415063341600162550ustar00rootroot00000000000000namespace hiro { #if defined(Hiro_Color) static auto CreateColor(const Color& color) -> GdkColor { GdkColor gdkColor; gdkColor.pixel = (color.red() << 16) | (color.green() << 8) | (color.blue() << 0); gdkColor.red = (color.red() << 8) | (color.red() << 0); gdkColor.green = (color.green() << 8) | (color.green() << 0); gdkColor.blue = (color.blue() << 8) | (color.blue() << 0); return gdkColor; } #endif static auto CreatePixbuf(image icon, bool scale = false) -> GdkPixbuf* { if(!icon) return nullptr; if(scale) icon.scale(15, 15); icon.transform(0, 32, 255u << 24, 255u << 0, 255u << 8, 255u << 16); //GTK stores images in ABGR format auto pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, icon.width(), icon.height()); memory::copy(gdk_pixbuf_get_pixels(pixbuf), icon.data(), icon.size()); if(scale) { auto scaled = gdk_pixbuf_scale_simple(pixbuf, 15, 15, GDK_INTERP_BILINEAR); g_object_unref(pixbuf); pixbuf = scaled; } return pixbuf; } static auto CreateImage(const image& icon, bool scale = false) -> GtkImage* { auto pixbuf = CreatePixbuf(icon, scale); auto gtkIcon = (GtkImage*)gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); return gtkIcon; } static auto DropPaths(GtkSelectionData* data) -> vector { gchar** uris = gtk_selection_data_get_uris(data); if(uris == nullptr) return {}; vector paths; for(u32 n = 0; uris[n] != nullptr; n++) { gchar* pathname = g_filename_from_uri(uris[n], nullptr, nullptr); if(pathname == nullptr) continue; string path = pathname; g_free(pathname); if(directory::exists(path) && !path.endsWith("/")) path.append("/"); paths.append(path); } g_strfreev(uris); return paths; } } ares-126/hiro/gtk/widget/000077500000000000000000000000001415063341600153325ustar00rootroot00000000000000ares-126/hiro/gtk/widget/button.cpp000066400000000000000000000037551415063341600173630ustar00rootroot00000000000000#if defined(Hiro_Button) namespace hiro { static auto Button_activate(GtkButton* gtkButton, pButton* p) -> void { p->_doActivate(); } auto pButton::construct() -> void { gtkWidget = gtk_button_new(); gtkButton = GTK_BUTTON(gtkWidget); setBordered(state().bordered); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); g_signal_connect(G_OBJECT(gtkButton), "clicked", G_CALLBACK(Button_activate), (gpointer)this); pWidget::construct(); } auto pButton::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pButton::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + (state().text ? 24 : 12), size.height() + 12}; } auto pButton::setBordered(bool bordered) -> void { gtk_button_set_relief(gtkButton, bordered ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE); } auto pButton::setIcon(const image& icon) -> void { if(icon) { auto gtkImage = CreateImage(icon); gtk_button_set_image(gtkButton, (GtkWidget*)gtkImage); } else { gtk_button_set_image(gtkButton, nullptr); } } auto pButton::setOrientation(Orientation orientation) -> void { switch(orientation) { case Orientation::Horizontal: gtk_button_set_image_position(gtkButton, GTK_POS_LEFT); break; case Orientation::Vertical: gtk_button_set_image_position(gtkButton, GTK_POS_TOP); break; } } auto pButton::setText(const string& text) -> void { gtk_button_set_label(gtkButton, text); setFont(self().font(true)); //gtk_button_set_label() recreates label, which destroys currently assigned font } auto pButton::_doActivate() -> void { self().doActivate(); } } #endif ares-126/hiro/gtk/widget/button.hpp000066400000000000000000000006311415063341600173560ustar00rootroot00000000000000#if defined(Hiro_Button) namespace hiro { struct pButton : pWidget { Declare(Button, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto _doActivate() -> void; GtkButton* gtkButton = nullptr; }; } #endif ares-126/hiro/gtk/widget/canvas.cpp000066400000000000000000000144101415063341600173110ustar00rootroot00000000000000#if defined(Hiro_Canvas) namespace hiro { //GTK3 static auto Canvas_draw(GtkWidget* widget, cairo_t* context, pCanvas* p) -> s32 { p->_onDraw(context); return true; } //GTK2 static auto Canvas_expose(GtkWidget* widget, GdkEventExpose* event, pCanvas* p) -> s32 { p->_onExpose(event); return true; } static auto Canvas_keyPress(GtkWidget* widget, GdkEventKey* event, pViewport* p) -> s32 { //canvass that have been set focusable are intended for games. //to prevent arrow keys, tab, etc from losing focus on the game viewport, block key propagation here. if(p->self().focusable()) return true; //for all other cases, allow the key to propagate. return false; } static auto Canvas_mousePress(GtkWidget* widget, GdkEventButton* event, pCanvas* p) -> s32 { //gtk_widget_set_focus_on_click() is a GTK 3.2+ feature. //implement this functionality manually for GTK 2.0+ compatibility. if(event->button == 1 && p->self().focusable()) gtk_widget_grab_focus(widget); return Widget_mousePress(widget, event, p); } auto pCanvas::construct() -> void { gtkWidget = gtk_drawing_area_new(); gtk_widget_add_events(gtkWidget, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_EXPOSURE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK); _rasterize(); _redraw(); //todo: need to work around GTK+ library bug: //after calling destruct(), construct() with state.droppable == true; //GTK+ will throw SIGBUS inside g_signal_connect_data() on one of the below connections g_signal_connect(G_OBJECT(gtkWidget), "button-press-event", G_CALLBACK(Canvas_mousePress), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "button-release-event", G_CALLBACK(Widget_mouseRelease), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "drag-data-received", G_CALLBACK(Widget_drop), (gpointer)this); #if HIRO_GTK==2 g_signal_connect(G_OBJECT(gtkWidget), "expose-event", G_CALLBACK(Canvas_expose), (gpointer)this); #elif HIRO_GTK==3 g_signal_connect(G_OBJECT(gtkWidget), "draw", G_CALLBACK(Canvas_draw), (gpointer)this); #endif g_signal_connect(G_OBJECT(gtkWidget), "key-press-event", G_CALLBACK(Canvas_keyPress), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "enter-notify-event", G_CALLBACK(Widget_mouseEnter), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "leave-notify-event", G_CALLBACK(Widget_mouseLeave), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "motion-notify-event", G_CALLBACK(Widget_mouseMove), (gpointer)this); pWidget::construct(); } auto pCanvas::destruct() -> void { _release(); if(gtkWidget) gtk_widget_destroy(gtkWidget), gtkWidget = nullptr; gtkParent = nullptr; } auto pCanvas::handle() const -> uintptr { #if defined(DISPLAY_WINDOWS) return (uintptr)GDK_WINDOW_HWND(gtk_widget_get_window(gtkWidget)); #endif #if defined(DISPLAY_XORG) return (uintptr)GDK_WINDOW_XID(gtk_widget_get_window(gtkWidget)); #endif return (uintptr)nullptr; } auto pCanvas::minimumSize() const -> Size { if(auto& icon = state().icon) return {(s32)icon.width(), (s32)icon.height()}; return {0, 0}; } auto pCanvas::setAlignment(Alignment) -> void { update(); } auto pCanvas::setColor(Color color) -> void { update(); } auto pCanvas::setFocusable(bool focusable) -> void { gtk_widget_set_can_focus(gtkWidget, focusable); } auto pCanvas::setGeometry(Geometry geometry) -> void { update(); pWidget::setGeometry(geometry); } auto pCanvas::setGradient(Gradient gradient) -> void { update(); } auto pCanvas::setIcon(const image& icon) -> void { update(); } auto pCanvas::update() -> void { _rasterize(); _redraw(); } auto pCanvas::_onDraw(cairo_t* context) -> void { if(!surface) return; s32 sx = 0, sy = 0, dx = 0, dy = 0; s32 width = surfaceWidth, height = surfaceHeight; auto geometry = pSizable::state().geometry; auto alignment = state().alignment ? state().alignment : Alignment{0.5, 0.5}; if(width <= geometry.width()) { sx = 0; dx = (geometry.width() - width) * alignment.horizontal(); } else { sx = (width - geometry.width()) * alignment.horizontal(); dx = 0; } if(height <= geometry.height()) { sy = 0; dy = (geometry.height() - height) * alignment.vertical(); } else { sy = (height - geometry.height()) * alignment.vertical(); dy = 0; } cairo_set_source_rgba(context, 0.0, 0.0, 0.0, 0.0); cairo_paint(context); gdk_cairo_set_source_pixbuf(context, surface, dx - sx, dy - sy); cairo_rectangle(context, dx, dy, width, height); cairo_paint(context); } auto pCanvas::_onExpose(GdkEventExpose* expose) -> void { if(!surface) return; cairo_t* context = gdk_cairo_create(gtk_widget_get_window(gtkWidget)); _onDraw(context); cairo_destroy(context); } auto pCanvas::_rasterize() -> void { s32 width = 0; s32 height = 0; if(auto& icon = state().icon) { width = icon.width(); height = icon.height(); } else { width = pSizable::state().geometry.width(); height = pSizable::state().geometry.height(); } if(width <= 0 || height <= 0) return; if(width != surfaceWidth || height != surfaceHeight) _release(); surfaceWidth = width; surfaceHeight = height; if(!surface) surface = gdk_pixbuf_new(GDK_COLORSPACE_RGB, true, 8, width, height); auto buffer = (u32*)gdk_pixbuf_get_pixels(surface); if(auto& icon = state().icon) { memory::copy(buffer, state().icon.data(), width * height); } else if(auto& gradient = state().gradient) { auto& colors = gradient.state.colors; image fill; fill.allocate(width, height); fill.gradient(colors[0].value(), colors[1].value(), colors[2].value(), colors[3].value()); memory::copy(buffer, fill.data(), fill.size()); } else { u32 color = state().color.value(); for(auto n : range(width * height)) buffer[n] = color; } //ARGB -> ABGR conversion for(auto n : range(width * height)) { u32 color = *buffer; color = (color & 0xff00ff00) | ((color & 0xff0000) >> 16) | ((color & 0x0000ff) << 16); *buffer++ = color; } } auto pCanvas::_redraw() -> void { if(gtk_widget_get_realized(gtkWidget)) { gdk_window_invalidate_rect(gtk_widget_get_window(gtkWidget), nullptr, true); } } auto pCanvas::_release() -> void { if(surface) { g_object_unref(surface); surface = nullptr; } surfaceWidth = 0; surfaceHeight = 0; } } #endif ares-126/hiro/gtk/widget/canvas.hpp000066400000000000000000000013561415063341600173230ustar00rootroot00000000000000#if defined(Hiro_Canvas) namespace hiro { struct pCanvas : pWidget { Declare(Canvas, Widget) auto handle() const -> uintptr; auto minimumSize() const -> Size override; auto setAlignment(Alignment) -> void; auto setColor(Color color) -> void; auto setFocusable(bool focusable) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setGradient(Gradient gradient) -> void; auto setIcon(const image& icon) -> void; auto update() -> void; auto _onDraw(cairo_t* context) -> void; auto _onExpose(GdkEventExpose* event) -> void; auto _rasterize() -> void; auto _redraw() -> void; auto _release() -> void; GdkPixbuf* surface = nullptr; u32 surfaceWidth = 0; u32 surfaceHeight = 0; }; } #endif ares-126/hiro/gtk/widget/check-button.cpp000066400000000000000000000044211415063341600204250ustar00rootroot00000000000000#if defined(Hiro_CheckButton) namespace hiro { static auto CheckButton_toggle(GtkToggleButton* toggleButton, pCheckButton* p) -> void { p->state().checked = gtk_toggle_button_get_active(toggleButton); if(!p->locked()) p->self().doToggle(); } auto pCheckButton::construct() -> void { gtkWidget = gtk_toggle_button_new(); setBordered(state().bordered); setChecked(state().checked); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); g_signal_connect(G_OBJECT(gtkWidget), "toggled", G_CALLBACK(CheckButton_toggle), (gpointer)this); pWidget::construct(); } auto pCheckButton::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pCheckButton::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + 24, size.height() + 12}; } auto pCheckButton::setBordered(bool bordered) -> void { gtk_button_set_relief(GTK_BUTTON(gtkWidget), bordered ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE); } auto pCheckButton::setChecked(bool checked) -> void { lock(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkWidget), checked); unlock(); } auto pCheckButton::setIcon(const image& icon) -> void { if(icon) { GtkImage* gtkImage = CreateImage(icon); gtk_button_set_image(GTK_BUTTON(gtkWidget), (GtkWidget*)gtkImage); } else { gtk_button_set_image(GTK_BUTTON(gtkWidget), nullptr); } } auto pCheckButton::setOrientation(Orientation orientation) -> void { switch(orientation) { case Orientation::Horizontal: gtk_button_set_image_position(GTK_BUTTON(gtkWidget), GTK_POS_LEFT); break; case Orientation::Vertical: gtk_button_set_image_position(GTK_BUTTON(gtkWidget), GTK_POS_TOP); break; } } auto pCheckButton::setText(const string& text) -> void { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); setFont(self().font(true)); //gtk_button_set_label() recreates label, which destroys currently assigned font } } #endif ares-126/hiro/gtk/widget/check-button.hpp000066400000000000000000000006171415063341600204350ustar00rootroot00000000000000#if defined(Hiro_CheckButton) namespace hiro { struct pCheckButton : pWidget { Declare(CheckButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked(bool checked) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; }; } #endif ares-126/hiro/gtk/widget/check-label.cpp000066400000000000000000000021641415063341600201730ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) namespace hiro { static auto CheckLabel_toggle(GtkToggleButton* toggleButton, pCheckLabel* p) -> void { p->state().checked = gtk_toggle_button_get_active(toggleButton); if(!p->locked()) p->self().doToggle(); } auto pCheckLabel::construct() -> void { gtkWidget = gtk_check_button_new_with_label(""); setChecked(state().checked); setText(state().text); g_signal_connect(G_OBJECT(gtkWidget), "toggled", G_CALLBACK(CheckLabel_toggle), (gpointer)this); pWidget::construct(); } auto pCheckLabel::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pCheckLabel::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); return {size.width() + 28, size.height() + 4}; } auto pCheckLabel::setChecked(bool checked) -> void { lock(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkWidget), checked); unlock(); } auto pCheckLabel::setText(const string& text) -> void { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); setFont(self().font(true)); //gtk_button_set_label() recreates label, which destroys currently assigned font } } #endif ares-126/hiro/gtk/widget/check-label.hpp000066400000000000000000000003761415063341600202030ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) namespace hiro { struct pCheckLabel : pWidget { Declare(CheckLabel, Widget) auto minimumSize() const -> Size override; auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; }; } #endif ares-126/hiro/gtk/widget/combo-button-item.cpp000066400000000000000000000017141415063341600214050ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { auto pComboButtonItem::construct() -> void { if(auto parent = _parent()) parent->_append(self()); } auto pComboButtonItem::destruct() -> void { } auto pComboButtonItem::setIcon(const image& icon) -> void { if(auto parent = _parent()) { auto pixbuf = CreatePixbuf(icon, true); gtk_list_store_set(parent->gtkListStore, >kIter, 0, pixbuf, -1); } } auto pComboButtonItem::setSelected() -> void { if(auto parent = _parent()) { parent->lock(); gtk_combo_box_set_active(parent->gtkComboBox, self().offset()); parent->unlock(); } } auto pComboButtonItem::setText(const string& text) -> void { if(auto parent = _parent()) { gtk_list_store_set(parent->gtkListStore, >kIter, 1, text.data(), -1); } } auto pComboButtonItem::_parent() -> maybe { if(auto parent = self().parentComboButton()) { if(auto self = parent->self()) return *self; } return {}; } } #endif ares-126/hiro/gtk/widget/combo-button-item.hpp000066400000000000000000000004771415063341600214170ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButtonItem : pObject { Declare(ComboButtonItem, Object) auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; GtkTreeIter gtkIter; }; } #endif ares-126/hiro/gtk/widget/combo-button.cpp000066400000000000000000000053761415063341600204610ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { static auto ComboButton_change(GtkComboBox* comboBox, pComboButton* p) -> void { p->_updateSelected(); } auto pComboButton::construct() -> void { gtkListStore = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING); gtkTreeModel = GTK_TREE_MODEL(gtkListStore); gtkWidget = gtk_combo_box_new_with_model(gtkTreeModel); gtkComboBox = GTK_COMBO_BOX(gtkWidget); gtkCellIcon = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkWidget), gtkCellIcon, false); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkWidget), gtkCellIcon, "pixbuf", 0, nullptr); gtkCellText = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkWidget), gtkCellText, true); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkWidget), gtkCellText, "text", 1, nullptr); g_signal_connect(G_OBJECT(gtkWidget), "changed", G_CALLBACK(ComboButton_change), (gpointer)this); pWidget::construct(); } auto pComboButton::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pComboButton::append(sComboButtonItem item) -> void { } auto pComboButton::minimumSize() const -> Size { auto font = self().font(true); s32 maximumWidth = 0; for(auto& item : state().items) { maximumWidth = max(maximumWidth, (item->state.icon ? pFont::size(font, " ").height() + 2 : 0) + pFont::size(font, item->state.text).width() ); } return {maximumWidth + 40, pFont::size(font, " ").height() + 12}; } auto pComboButton::remove(sComboButtonItem item) -> void { lock(); if(auto delegate = item->self()) { gtk_list_store_remove(gtkListStore, &delegate->gtkIter); if(gtk_combo_box_get_active(gtkComboBox) < 0) { if(auto item = self().item(0)) item->setSelected(); } } unlock(); } auto pComboButton::reset() -> void { lock(); gtk_list_store_clear(gtkListStore); unlock(); } auto pComboButton::setFont(const Font& font) -> void { pWidget::setFont(font); auto fontDescription = pFont::create(font); g_object_set(G_OBJECT(gtkCellText), "font-desc", fontDescription, nullptr); } auto pComboButton::_append(sComboButtonItem item) -> void { lock(); if(auto self = item->self()) { gtk_list_store_append(gtkListStore, &self->gtkIter); self->setIcon(item->state.icon); if(item->state.selected) self->setSelected(); self->setText(item->state.text); } if(gtk_combo_box_get_active(gtkComboBox) < 0) item->setSelected(); unlock(); } auto pComboButton::_updateSelected() -> void { for(auto& item : state().items) item->state.selected = false; s32 selected = gtk_combo_box_get_active(gtkComboBox); if(selected >= 0) { if(auto item = self().item(selected)) { item->state.selected = true; if(!locked()) self().doChange(); } } } } #endif ares-126/hiro/gtk/widget/combo-button.hpp000066400000000000000000000011711415063341600204530ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButton : pWidget { Declare(ComboButton, Widget) auto append(sComboButtonItem item) -> void; auto minimumSize() const -> Size override; auto remove(sComboButtonItem item) -> void; auto reset() -> void override; auto setFont(const Font& font) -> void override; auto _append(sComboButtonItem item) -> void; auto _updateSelected() -> void; GtkListStore* gtkListStore = nullptr; GtkTreeModel* gtkTreeModel = nullptr; GtkComboBox* gtkComboBox = nullptr; GtkCellRenderer* gtkCellIcon = nullptr; GtkCellRenderer* gtkCellText = nullptr; }; } #endif ares-126/hiro/gtk/widget/combo-edit-item.cpp000066400000000000000000000013061415063341600210140ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) namespace hiro { auto pComboEditItem::construct() -> void { } auto pComboEditItem::destruct() -> void { } auto pComboEditItem::setIcon(const image& icon) -> void { if(auto parent = _parent()) { auto pixbuf = CreatePixbuf(icon, true); gtk_list_store_set(parent->gtkListStore, >kIter, 0, pixbuf, -1); } } auto pComboEditItem::setText(const string& text) -> void { if(auto parent = _parent()) { gtk_list_store_set(parent->gtkListStore, >kIter, 1, text.data(), -1); } } auto pComboEditItem::_parent() -> maybe { if(auto parent = self().parentComboEdit()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/gtk/widget/combo-edit-item.hpp000066400000000000000000000004311415063341600210170ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) namespace hiro { struct pComboEditItem : pObject { Declare(ComboEditItem, Object) auto setIcon(const image& icon) -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; GtkTreeIter gtkIter; }; } #endif ares-126/hiro/gtk/widget/combo-edit.cpp000066400000000000000000000101661415063341600200640ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) namespace hiro { static auto ComboEdit_activate(GtkComboBox* comboBox, pComboEdit* p) -> void { p->self().doActivate(); } static auto ComboEdit_change(GtkComboBox* comboBox, pComboEdit* p) -> void { p->_updateText(); } auto pComboEdit::construct() -> void { gtkListStore = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING); gtkTreeModel = GTK_TREE_MODEL(gtkListStore); gtkWidget = gtk_combo_box_new_with_model_and_entry(gtkTreeModel); gtkComboBox = GTK_COMBO_BOX(gtkWidget); gtk_cell_layout_clear(GTK_CELL_LAYOUT(gtkWidget)); gtkCellIcon = gtk_cell_renderer_pixbuf_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkWidget), gtkCellIcon, false); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkWidget), gtkCellIcon, "pixbuf", 0, nullptr); gtkCellText = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(gtkWidget), gtkCellText, true); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(gtkWidget), gtkCellText, "text", 1, nullptr); //we must call gtk_combo_box_set_entry_text_column(1) in order for GtkComboBoxEntry to pull text //however, this API call throws a Gtk-CRITICAL assertion that column 1 is not a cell renderer //this is, however, incorrect. it *is* a renderer, and the API call works as expected //so in order to suppress the error message, we redirect stderr to /dev/null temporarily s32 stdErr = dup(STDERR_FILENO); s32 devNull = open("/dev/null", 0); dup2(devNull, STDERR_FILENO); gtk_combo_box_set_entry_text_column(gtkComboBox, 1); dup2(stdErr, STDERR_FILENO); close(devNull); close(stdErr); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setForegroundColor(state().foregroundColor); for(auto& item : state().items) append(item); g_signal_connect(G_OBJECT(gtk_bin_get_child(GTK_BIN(gtkComboBox))), "activate", G_CALLBACK(ComboEdit_activate), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "changed", G_CALLBACK(ComboEdit_change), (gpointer)this); pWidget::construct(); } auto pComboEdit::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pComboEdit::append(sComboEditItem item) -> void { lock(); if(auto self = item->self()) { gtk_list_store_append(gtkListStore, &self->gtkIter); self->setIcon(item->state.icon); self->setText(item->state.text); } unlock(); } auto pComboEdit::minimumSize() const -> Size { auto font = self().font(true); s32 maximumWidth = 0; for(auto& item : state().items) { maximumWidth = max(maximumWidth, (item->state.icon ? pFont::size(font, " ").height() + 2 : 0) + pFont::size(font, item->state.text).width() ); } return {maximumWidth + 40, pFont::size(font, " ").height() + 12}; } auto pComboEdit::remove(sComboEditItem item) -> void { lock(); if(auto delegate = item->self()) { gtk_list_store_remove(gtkListStore, &delegate->gtkIter); } unlock(); } auto pComboEdit::reset() -> void { lock(); gtk_list_store_clear(gtkListStore); unlock(); } auto pComboEdit::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(gtk_bin_get_child(GTK_BIN(gtkComboBox)), GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pComboEdit::setEditable(bool editable) -> void { gtk_editable_set_editable(GTK_EDITABLE(gtk_bin_get_child(GTK_BIN(gtkComboBox))), editable); } auto pComboEdit::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(gtk_bin_get_child(GTK_BIN(gtkComboBox)), GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pComboEdit::setFont(const Font& font) -> void { pWidget::setFont(font); auto fontDescription = pFont::create(font); g_object_set(G_OBJECT(gtkCellText), "font-desc", fontDescription, nullptr); } auto pComboEdit::setText(const string& text) -> void { lock(); gtk_entry_set_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(gtkComboBox))), text); unlock(); } auto pComboEdit::_updateText() -> void { string text = gtk_entry_get_text(GTK_ENTRY(gtk_bin_get_child(GTK_BIN(gtkComboBox)))); if(text == state().text) return; state().text = text; if(!locked()) self().doChange(); } } #endif ares-126/hiro/gtk/widget/combo-edit.hpp000066400000000000000000000013631415063341600200700ustar00rootroot00000000000000#if defined(Hiro_ComboEdit) namespace hiro { struct pComboEdit : pWidget { Declare(ComboEdit, Widget) auto append(sComboEditItem item) -> void; auto minimumSize() const -> Size override; auto remove(sComboEditItem item) -> void; auto reset() -> void override; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(Color color) -> void; auto setFont(const Font& font) -> void override; auto setText(const string& text) -> void; auto _updateText() -> void; GtkListStore* gtkListStore = nullptr; GtkTreeModel* gtkTreeModel = nullptr; GtkComboBox* gtkComboBox = nullptr; GtkCellRenderer* gtkCellIcon = nullptr; GtkCellRenderer* gtkCellText = nullptr; }; } #endif ares-126/hiro/gtk/widget/console.cpp000066400000000000000000000146411415063341600175060ustar00rootroot00000000000000#if defined(Hiro_Console) namespace hiro { static auto Console_keyPress(GtkWidget*, GdkEventKey* event, pConsole* p) -> s32 { return p->_keyPress(event->keyval, event->state); } auto pConsole::construct() -> void { gtkWidget = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkWidget), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(gtkWidget), GTK_SHADOW_ETCHED_IN); subWidget = gtk_text_view_new(); gtk_widget_show(subWidget); gtk_text_view_set_editable(GTK_TEXT_VIEW(subWidget), false); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(subWidget), GTK_WRAP_NONE); gtk_container_add(GTK_CONTAINER(gtkWidget), subWidget); textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(subWidget)); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); g_signal_connect(G_OBJECT(subWidget), "key-press-event", G_CALLBACK(Console_keyPress), (gpointer)this); pWidget::construct(); } auto pConsole::destruct() -> void { gtk_widget_destroy(subWidget); gtk_widget_destroy(gtkWidget); } auto pConsole::print(const string& text) -> void { //insert text before prompt and command GtkTextIter iter; gtk_text_buffer_get_iter_at_line_offset(textBuffer, &iter, gtk_text_buffer_get_line_count(textBuffer), 0); gtk_text_buffer_insert(textBuffer, &iter, text, -1); _seekToEnd(); } auto pConsole::reset() -> void { //flush history and redraw prompt gtk_text_buffer_set_text(textBuffer, state().prompt, -1); _seekToEnd(); } auto pConsole::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pConsole::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pConsole::setPrompt(const string& prompt) -> void { //erase previous prompt and replace it with new prompt GtkTextIter lhs, rhs; gtk_text_buffer_get_iter_at_line_offset(textBuffer, &lhs, gtk_text_buffer_get_line_count(textBuffer), 0); gtk_text_buffer_get_iter_at_line_offset(textBuffer, &rhs, gtk_text_buffer_get_line_count(textBuffer), previousPrompt.size()); gtk_text_buffer_delete(textBuffer, &lhs, &rhs); gtk_text_buffer_get_iter_at_line_offset(textBuffer, &lhs, gtk_text_buffer_get_line_count(textBuffer), 0); gtk_text_buffer_insert(textBuffer, &lhs, previousPrompt = prompt, -1); _seekToEnd(); } auto pConsole::_keyPress(u32 scancode, u32 mask) -> bool { if(mask & (GDK_CONTROL_MASK | GDK_MOD1_MASK | GDK_SUPER_MASK)) return false; //allow actions such as Ctrl+C (copy) GtkTextMark* mark = gtk_text_buffer_get_mark(textBuffer, "insert"); GtkTextIter start, cursor, end; gtk_text_buffer_get_iter_at_line_offset(textBuffer, &start, gtk_text_buffer_get_line_count(textBuffer), state().prompt.size()); gtk_text_buffer_get_iter_at_mark(textBuffer, &cursor, mark); gtk_text_buffer_get_end_iter(textBuffer, &end); if(scancode == GDK_KEY_Return || scancode == GDK_KEY_KP_Enter) { char* temp = gtk_text_buffer_get_text(textBuffer, &start, &end, true); string s = temp; g_free(temp); gtk_text_buffer_insert(textBuffer, &end, string{"\n", state().prompt}, -1); self().doActivate(s); if(s) history.prepend(s); if(history.size() > 128) history.removeRight(); historyOffset = 0; _seekToEnd(); return true; } if(scancode == GDK_KEY_Up) { gtk_text_buffer_delete(textBuffer, &start, &end); gtk_text_buffer_get_end_iter(textBuffer, &end); if(historyOffset < history.size()) { gtk_text_buffer_insert(textBuffer, &end, history[historyOffset++], -1); } _seekToEnd(); return true; } if(scancode == GDK_KEY_Down) { gtk_text_buffer_delete(textBuffer, &start, &end); gtk_text_buffer_get_end_iter(textBuffer, &end); if(historyOffset > 0) { gtk_text_buffer_insert(textBuffer, &end, history[--historyOffset], -1); } _seekToEnd(); return true; } if(scancode == GDK_KEY_Left) { if(gtk_text_iter_get_offset(&cursor) <= gtk_text_iter_get_offset(&start)) { gtk_text_buffer_place_cursor(textBuffer, &start); } else { gtk_text_iter_set_offset(&cursor, gtk_text_iter_get_offset(&cursor) - 1); gtk_text_buffer_place_cursor(textBuffer, &cursor); } _seekToMark(); return true; } if(scancode == GDK_KEY_Right) { if(gtk_text_iter_get_offset(&cursor) < gtk_text_iter_get_offset(&start)) { gtk_text_buffer_place_cursor(textBuffer, &end); } else if(gtk_text_iter_get_offset(&cursor) < gtk_text_iter_get_offset(&end)) { gtk_text_iter_set_offset(&cursor, gtk_text_iter_get_offset(&cursor) + 1); gtk_text_buffer_place_cursor(textBuffer, &cursor); } _seekToMark(); return true; } if(scancode == GDK_KEY_Home) { gtk_text_buffer_place_cursor(textBuffer, &start); _seekToMark(); return true; } if(scancode == GDK_KEY_End) { gtk_text_buffer_place_cursor(textBuffer, &end); _seekToMark(); return true; } if(scancode == GDK_KEY_BackSpace) { if(gtk_text_iter_get_offset(&cursor) <= gtk_text_iter_get_offset(&start)) return true; GtkTextIter lhs = cursor; gtk_text_iter_set_offset(&lhs, gtk_text_iter_get_offset(&cursor) - 1); gtk_text_buffer_delete(textBuffer, &lhs, &cursor); _seekToMark(); return true; } if(scancode == GDK_KEY_Delete) { if(gtk_text_iter_get_offset(&cursor) < gtk_text_iter_get_offset(&start)) return true; if(gtk_text_iter_get_offset(&cursor) == gtk_text_iter_get_offset(&end)) return true; GtkTextIter rhs = cursor; gtk_text_iter_set_offset(&rhs, gtk_text_iter_get_offset(&cursor) + 1); gtk_text_buffer_delete(textBuffer, &cursor, &rhs); _seekToMark(); return true; } if(scancode >= 0x20 && scancode <= 0x7e) { if(gtk_text_iter_get_offset(&cursor) < gtk_text_iter_get_offset(&start)) return true; gtk_text_buffer_insert(textBuffer, &cursor, string{(char)scancode}, -1); _seekToMark(); return true; } return false; } auto pConsole::_seekToEnd() -> void { GtkTextIter iter; gtk_text_buffer_get_end_iter(textBuffer, &iter); gtk_text_buffer_place_cursor(textBuffer, &iter); _seekToMark(); } auto pConsole::_seekToMark() -> void { GtkTextMark* mark = gtk_text_buffer_get_mark(textBuffer, "insert"); gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(subWidget), mark); } } #endif ares-126/hiro/gtk/widget/console.hpp000066400000000000000000000011221415063341600175010ustar00rootroot00000000000000#if defined(Hiro_Console) namespace hiro { struct pConsole : pWidget { Declare(Console, Widget) auto print(const string& text) -> void; auto reset() -> void override; auto setBackgroundColor(Color color) -> void; auto setForegroundColor(Color color) -> void; auto setPrompt(const string& prompt) -> void; auto _keyPress(u32 scancode, u32 mask) -> bool; auto _seekToEnd() -> void; auto _seekToMark() -> void; GtkWidget* subWidget = nullptr; GtkTextBuffer* textBuffer = nullptr; string previousPrompt; vector history; u32 historyOffset = 0; }; } #endif ares-126/hiro/gtk/widget/frame.cpp000066400000000000000000000052141415063341600171320ustar00rootroot00000000000000#if defined(Hiro_Frame) namespace hiro { auto pFrame::construct() -> void { gtkWidget = gtk_frame_new(nullptr); gtkLabel = gtk_label_new(""); gtk_frame_set_label_widget(GTK_FRAME(gtkWidget), gtkLabel); gtk_widget_show(gtkLabel); gtkChild = gtk_fixed_new(); gtk_container_add(GTK_CONTAINER(gtkWidget), gtkChild); gtk_widget_show(gtkChild); setText(state().text); pWidget::construct(); } auto pFrame::destruct() -> void { gtk_widget_destroy(gtkChild); gtk_widget_destroy(gtkLabel); gtk_widget_destroy(gtkWidget); } auto pFrame::append(sSizable sizable) -> void { if(auto sizable = _sizable()) { sizable->setFont(sizable->self().font(true)); sizable->setVisible(sizable->self().visible(true)); } } auto pFrame::container(mWidget& widget) -> GtkWidget* { if(auto parent = widget.parentFrame(true)) { if(auto self = parent->self()) { return self->gtkChild; } } return gtk_widget_get_parent(gtkWidget); } auto pFrame::remove(sSizable sizable) -> void { } auto pFrame::setEnabled(bool enabled) -> void { if(auto sizable = _sizable()) sizable->setEnabled(sizable->self().enabled(true)); pWidget::setEnabled(enabled); } auto pFrame::setFont(const Font& font) -> void { if(auto sizable = _sizable()) sizable->setFont(sizable->self().font(true)); pFont::setFont(gtkLabel, font); } auto pFrame::setGeometry(Geometry geometry) -> void { if(!state().text) { //a frame without a title is generally used as a border box (client edge) //remove the excess spacing so that the frame renders around the entire widget //todo: it may be better to custom draw the frame in this case to avoid hard-coded offsets geometry.setY(geometry.y() - 7); geometry.setHeight(geometry.height() + 8); } //match the dimensions of other client edge widgets (eg GtkTreeView) geometry.setWidth(geometry.width() + 1); pWidget::setGeometry(geometry); if(auto& sizable = state().sizable) { Size size = pFont::size(self().font(true), state().text); if(!state().text) size.setHeight(18); geometry.setPosition({4, 0}); geometry.setWidth(geometry.width() - 13); geometry.setHeight(geometry.height() - (size.height() + 2)); sizable->setGeometry(geometry); } } auto pFrame::setText(const string& text) -> void { gtk_label_set_text(GTK_LABEL(gtkLabel), text); setGeometry(self().geometry()); } auto pFrame::setVisible(bool visible) -> void { if(auto& sizable = state().sizable) sizable->setVisible(visible); pWidget::setVisible(visible); } auto pFrame::_sizable() -> maybe { if(auto& sizable = state().sizable) { if(auto self = sizable->self()) return *self; } return {}; } } #endif ares-126/hiro/gtk/widget/frame.hpp000066400000000000000000000011371415063341600171370ustar00rootroot00000000000000#if defined(Hiro_Frame) namespace hiro { struct pFrame : pWidget { Declare(Frame, Widget) auto append(sSizable sizable) -> void; auto container(mWidget& widget) -> GtkWidget* override; auto remove(sSizable sizable) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _sizable() -> maybe; GtkWidget* gtkLabel = nullptr; GtkWidget* gtkChild = nullptr; }; } #endif ares-126/hiro/gtk/widget/hex-edit.cpp000066400000000000000000000223511415063341600175500ustar00rootroot00000000000000#if defined(Hiro_HexEdit) namespace hiro { static auto HexEdit_keyPress(GtkWidget* widget, GdkEventKey* event, pHexEdit* p) -> s32 { return p->keyPress(event->keyval, event->state); } static auto HexEdit_mouseScroll(GtkWidget* widget, GdkEventScroll* event, pHexEdit* p) -> s32 { f64 position = gtk_range_get_value(GTK_RANGE(p->scrollBar)); if(event->direction == GDK_SCROLL_UP) { p->scroll(position - 1); } if(event->direction == GDK_SCROLL_DOWN) { p->scroll(position + 1); } return true; //do not propagate event further } static auto HexEdit_scroll(GtkRange* range, GtkScrollType scroll, f64 value, pHexEdit* p) -> s32 { p->scroll((s32)value); return true; //do not propagate event further } auto pHexEdit::construct() -> void { #if HIRO_GTK==2 gtkWidget = gtk_hbox_new(false, 0); #elif HIRO_GTK==3 gtkWidget = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); #endif container = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(container), GTK_POLICY_AUTOMATIC, GTK_POLICY_NEVER); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(container), GTK_SHADOW_ETCHED_IN); subWidget = gtk_text_view_new(); gtk_text_view_set_editable(GTK_TEXT_VIEW(subWidget), false); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(subWidget), GTK_WRAP_NONE); gtk_container_add(GTK_CONTAINER(container), subWidget); #if HIRO_GTK==2 scrollBar = gtk_vscrollbar_new(nullptr); #elif HIRO_GTK==3 scrollBar = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, nullptr); #endif gtk_range_set_range(GTK_RANGE(scrollBar), 0, 255); gtk_range_set_increments(GTK_RANGE(scrollBar), 1, 16); gtk_widget_set_sensitive(scrollBar, false); gtk_box_pack_start(GTK_BOX(gtkWidget), container, true, true, 0); gtk_box_pack_start(GTK_BOX(gtkWidget), scrollBar, false, false, 1); textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(subWidget)); textCursor = gtk_text_buffer_get_mark(textBuffer, "insert"); gtk_widget_show(scrollBar); gtk_widget_show(subWidget); gtk_widget_show(container); setAddress(state().address); setBackgroundColor(state().backgroundColor); setColumns(state().columns); setForegroundColor(state().foregroundColor); setRows(state().rows); setLength(state().length); update(); g_signal_connect(G_OBJECT(subWidget), "key-press-event", G_CALLBACK(HexEdit_keyPress), (gpointer)this); g_signal_connect(G_OBJECT(subWidget), "scroll-event", G_CALLBACK(HexEdit_mouseScroll), (gpointer)this); g_signal_connect(G_OBJECT(scrollBar), "change-value", G_CALLBACK(HexEdit_scroll), (gpointer)this); g_signal_connect(G_OBJECT(scrollBar), "scroll-event", G_CALLBACK(HexEdit_mouseScroll), (gpointer)this); pWidget::construct(); } auto pHexEdit::destruct() -> void { gtk_widget_destroy(scrollBar); gtk_widget_destroy(subWidget); gtk_widget_destroy(container); gtk_widget_destroy(gtkWidget); } auto pHexEdit::focused() const -> bool { return gtk_widget_has_focus(subWidget) || gtk_widget_has_focus(scrollBar); } auto pHexEdit::setAddress(u32 address) -> void { setScroll(); updateScroll(); update(); } auto pHexEdit::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pHexEdit::setColumns(u32 columns) -> void { setScroll(); update(); } auto pHexEdit::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pHexEdit::setLength(u32 length) -> void { setScroll(); update(); } auto pHexEdit::setRows(u32 rows) -> void { setScroll(); update(); } auto pHexEdit::update() -> void { if(!state().onRead) { gtk_text_buffer_set_text(textBuffer, "", -1); return; } u32 position = cursorPosition(); string output; u32 address = state().address; for(auto row : range(state().rows)) { output.append(hex(address, 8L)); output.append(" "); string hexdata; string ansidata = " "; for(auto column : range(state().columns)) { if(address < state().length) { u8 data = self().doRead(address++); hexdata.append(hex(data, 2L)); hexdata.append(" "); ansidata.append(data >= 0x20 && data <= 0x7e ? (char)data : '.'); } else { hexdata.append(" "); ansidata.append(" "); } } output.append(hexdata); output.append(ansidata); if(address >= state().length) break; if(row != state().rows - 1) output.append("\n"); } gtk_text_buffer_set_text(textBuffer, output, -1); if(position == 0) position = 10; //start at first position where hex values can be entered setCursorPosition(position); } auto pHexEdit::cursorPosition() -> u32 { GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(textBuffer, &iter, textCursor); return gtk_text_iter_get_offset(&iter); } auto pHexEdit::keyPress(u32 scancode, u32 mask) -> bool { if(!state().onRead) return false; if(mask & (GDK_CONTROL_MASK | GDK_MOD1_MASK | GDK_SUPER_MASK)) return false; //allow actions such as Ctrl+C (copy) s32 position = cursorPosition(); s32 lineWidth = 10 + (state().columns * 3) + 1 + state().columns + 1; s32 cursorY = position / lineWidth; s32 cursorX = position % lineWidth; if(scancode == GDK_KEY_Home) { setCursorPosition(cursorY * lineWidth + 10); return true; } if(scancode == GDK_KEY_End) { setCursorPosition(cursorY * lineWidth + 10 + (state().columns * 3 - 1)); return true; } if(scancode == GDK_KEY_Up) { if(cursorY != 0) return false; s32 newAddress = state().address - state().columns; if(newAddress >= 0) { self().setAddress(newAddress); update(); } return true; } if(scancode == GDK_KEY_Down) { if(cursorY >= rows() - 1) return true; if(cursorY != state().rows - 1) return false; s32 newAddress = state().address + state().columns; if(newAddress + state().columns * state().rows - (state().columns - 1) <= state().length) { self().setAddress(newAddress); update(); } return true; } if(scancode == GDK_KEY_Page_Up) { s32 newAddress = state().address - state().columns * state().rows; if(newAddress >= 0) { self().setAddress(newAddress); } else { self().setAddress(0); } update(); return true; } if(scancode == GDK_KEY_Page_Down) { s32 newAddress = state().address + state().columns * state().rows; for(auto n : range(state().rows)) { if(newAddress + state().columns * state().rows - (state().columns - 1) <= state().length) { self().setAddress(newAddress); update(); break; } newAddress -= state().columns; } return true; } //convert scancode to hex nibble if(scancode >= '0' && scancode <= '9') scancode = scancode - '0'; else if(scancode >= 'A' && scancode <= 'F') scancode = scancode - 'A' + 10; else if(scancode >= 'a' && scancode <= 'f') scancode = scancode - 'a' + 10; else return false; //not a valid hex value if(cursorX >= 10) { //not on an offset cursorX -= 10; if((cursorX % 3) != 2) { //not on a space bool cursorNibble = (cursorX % 3) == 1; //0 = high, 1 = low cursorX /= 3; if(cursorX < state().columns) { //not in ANSI region u32 address = state().address + (cursorY * state().columns + cursorX); if(address >= state().length) return false; //do not edit past end of data u8 data = self().doRead(address); //write modified value if(cursorNibble == 1) { data = (data & 0xf0) | (scancode << 0); } else { data = (data & 0x0f) | (scancode << 4); } self().doWrite(address, data); //auto-advance cursor to next nibble/byte position++; if(cursorNibble && cursorX != state().columns - 1) position++; setCursorPosition(position); //refresh output to reflect modified data update(); } } } return true; } //number of actual rows auto pHexEdit::rows() -> s32 { return (max(1u, state().length) + state().columns - 1) / state().columns; } //number of scrollable row positions auto pHexEdit::rowsScrollable() -> s32 { return max(0u, rows() - state().rows); } auto pHexEdit::scroll(s32 position) -> void { if(position > rowsScrollable()) position = rowsScrollable(); if(position < 0) position = 0; self().setAddress(position * state().columns); } auto pHexEdit::setCursorPosition(u32 position) -> void { GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(textBuffer, &iter, textCursor); //GTK+ will throw many errors to the terminal if you set iterator past end of buffer GtkTextIter endIter; gtk_text_buffer_get_end_iter(textBuffer, &iter); u32 endPosition = gtk_text_iter_get_offset(&iter); gtk_text_iter_set_offset(&iter, min(position, endPosition)); gtk_text_buffer_place_cursor(textBuffer, &iter); } auto pHexEdit::setScroll() -> void { if(rowsScrollable() > 0) { gtk_range_set_range(GTK_RANGE(scrollBar), 0, rowsScrollable()); gtk_widget_set_sensitive(scrollBar, true); } else { gtk_widget_set_sensitive(scrollBar, false); } } auto pHexEdit::updateScroll() -> void { u32 row = state().address / state().columns; gtk_range_set_value(GTK_RANGE(scrollBar), row); } } #endif ares-126/hiro/gtk/widget/hex-edit.hpp000066400000000000000000000015701415063341600175550ustar00rootroot00000000000000#if defined(Hiro_HexEdit) namespace hiro { struct pHexEdit : pWidget { Declare(HexEdit, Widget) auto focused() const -> bool override; auto setAddress(u32 address) -> void; auto setBackgroundColor(Color color) -> void; auto setColumns(u32 columns) -> void; auto setForegroundColor(Color color) -> void; auto setLength(u32 length) -> void; auto setRows(u32 rows) -> void; auto update() -> void; auto cursorPosition() -> u32; auto keyPress(u32 scancode, u32 mask) -> bool; auto rows() -> s32; auto rowsScrollable() -> s32; auto scroll(s32 position) -> void; auto setCursorPosition(u32 position) -> void; auto setScroll() -> void; auto updateScroll() -> void; GtkWidget* container = nullptr; GtkWidget* subWidget = nullptr; GtkWidget* scrollBar = nullptr; GtkTextBuffer* textBuffer = nullptr; GtkTextMark* textCursor = nullptr; }; } #endif ares-126/hiro/gtk/widget/horizontal-scroll-bar.cpp000066400000000000000000000024041415063341600222650ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) namespace hiro { static auto HorizontalScrollBar_change(GtkRange* gtkRange, pHorizontalScrollBar* p) -> void { auto position = (u32)gtk_range_get_value(gtkRange); if(p->state().position == position) return; p->state().position = position; if(!p->locked()) p->self().doChange(); } auto pHorizontalScrollBar::construct() -> void { #if HIRO_GTK==2 gtkWidget = gtk_hscrollbar_new(nullptr); #elif HIRO_GTK==3 gtkWidget = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, nullptr); #endif setLength(state().length); setPosition(state().position); g_signal_connect(G_OBJECT(gtkWidget), "value-changed", G_CALLBACK(HorizontalScrollBar_change), (gpointer)this); pWidget::construct(); } auto pHorizontalScrollBar::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pHorizontalScrollBar::minimumSize() const -> Size { return {0, 20}; } auto pHorizontalScrollBar::setLength(u32 length) -> void { auto lock = acquire(); length += length == 0; gtk_range_set_range(GTK_RANGE(gtkWidget), 0, max(1u, length - 1)); gtk_range_set_increments(GTK_RANGE(gtkWidget), 1, length >> 3); } auto pHorizontalScrollBar::setPosition(u32 position) -> void { gtk_range_set_value(GTK_RANGE(gtkWidget), position); } } #endif ares-126/hiro/gtk/widget/horizontal-scroll-bar.hpp000066400000000000000000000004241415063341600222720ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) namespace hiro { struct pHorizontalScrollBar : pWidget { Declare(HorizontalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; }; } #endif ares-126/hiro/gtk/widget/horizontal-slider.cpp000066400000000000000000000024331415063341600215110ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) namespace hiro { static auto HorizontalSlider_change(GtkRange* gtkRange, pHorizontalSlider* p) -> void { auto position = (u32)gtk_range_get_value(gtkRange); if(p->state().position == position) return; p->state().position = position; if(!p->locked()) p->self().doChange(); } auto pHorizontalSlider::construct() -> void { #if HIRO_GTK==2 gtkWidget = gtk_hscale_new_with_range(0, 100, 1); #elif HIRO_GTK==3 gtkWidget = gtk_scale_new_with_range(GTK_ORIENTATION_HORIZONTAL, 0, 100, 1); #endif gtk_scale_set_draw_value(GTK_SCALE(gtkWidget), false); setLength(state().length); setPosition(state().position); g_signal_connect(G_OBJECT(gtkWidget), "value-changed", G_CALLBACK(HorizontalSlider_change), (gpointer)this); pWidget::construct(); } auto pHorizontalSlider::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pHorizontalSlider::minimumSize() const -> Size { return {3, 20}; } auto pHorizontalSlider::setLength(u32 length) -> void { length += length == 0; gtk_range_set_range(GTK_RANGE(gtkWidget), 0, max(1u, length - 1)); gtk_range_set_increments(GTK_RANGE(gtkWidget), 1, length >> 3); } auto pHorizontalSlider::setPosition(u32 position) -> void { gtk_range_set_value(GTK_RANGE(gtkWidget), position); } } #endif ares-126/hiro/gtk/widget/horizontal-slider.hpp000066400000000000000000000004131415063341600215120ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) namespace hiro { struct pHorizontalSlider : pWidget { Declare(HorizontalSlider, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; }; } #endif ares-126/hiro/gtk/widget/icon-view-item.cpp000066400000000000000000000013201415063341600206660ustar00rootroot00000000000000#if defined(Hiro_IconView) namespace hiro { auto pIconViewItem::construct() -> void { } auto pIconViewItem::destruct() -> void { } auto pIconViewItem::setIcon(const image& icon) -> void { if(auto parent = _parent()) { parent->setItemIcon(self().offset(), icon); } } auto pIconViewItem::setSelected(bool selected) -> void { if(auto parent = _parent()) { parent->setItemSelected(self().offset(), selected); } } auto pIconViewItem::setText(const string& text) -> void { if(auto parent = _parent()) { parent->setItemText(self().offset(), text); } } auto pIconViewItem::_parent() -> pIconView* { if(auto parent = self().parentIconView()) return parent->self(); return nullptr; } } #endif ares-126/hiro/gtk/widget/icon-view-item.hpp000066400000000000000000000004411415063341600206760ustar00rootroot00000000000000#if defined(Hiro_IconView) namespace hiro { struct pIconViewItem : pObject { Declare(IconViewItem, Object) auto setIcon(const image& icon) -> void; auto setSelected(bool selected) -> void; auto setText(const string& text) -> void; auto _parent() -> pIconView*; }; } #endif ares-126/hiro/gtk/widget/icon-view.cpp000066400000000000000000000162561415063341600177500ustar00rootroot00000000000000#if defined(Hiro_IconView) namespace hiro { static auto IconView_activate(GtkIconView* iconView, GtkTreePath* path, pIconView* p) -> void { if(!p->locked()) p->self().doActivate(); } static auto IconView_buttonEvent(GtkTreeView* treeView, GdkEventButton* event, pIconView* p) -> s32 { if(event->type == GDK_BUTTON_RELEASE && event->button == 3) { if(!p->locked()) p->self().doContext(); return false; } return false; } static auto IconView_change(GtkIconView* iconView, pIconView* p) -> void { p->_updateSelected(); } auto pIconView::construct() -> void { gtkWidget = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkWidget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(gtkWidget), GTK_SHADOW_ETCHED_IN); store = gtk_list_store_new(2, GDK_TYPE_PIXBUF, G_TYPE_STRING); subWidget = gtk_icon_view_new_with_model(GTK_TREE_MODEL(store)); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(subWidget), 0); gtk_icon_view_set_text_column(GTK_ICON_VIEW(subWidget), 1); gtk_icon_view_set_reorderable(GTK_ICON_VIEW(subWidget), false); gtk_icon_view_set_margin(GTK_ICON_VIEW(subWidget), 0); gtk_icon_view_set_spacing(GTK_ICON_VIEW(subWidget), 0); gtk_icon_view_set_column_spacing(GTK_ICON_VIEW(subWidget), 0); gtk_icon_view_set_row_spacing(GTK_ICON_VIEW(subWidget), 0); gtk_icon_view_set_item_padding(GTK_ICON_VIEW(subWidget), 0); gtk_container_add(GTK_CONTAINER(gtkWidget), subWidget); gtk_widget_show(subWidget); setBackgroundColor(state().backgroundColor); setBatchable(state().batchable); setFlow(state().flow); setForegroundColor(state().foregroundColor); setOrientation(state().orientation); for(auto position : range(self().itemCount())) { auto& item = state().items[position]; append(item); } _updateSelected(); g_signal_connect(G_OBJECT(subWidget), "button-press-event", G_CALLBACK(IconView_buttonEvent), (gpointer)this); g_signal_connect(G_OBJECT(subWidget), "button-release-event", G_CALLBACK(IconView_buttonEvent), (gpointer)this); g_signal_connect(G_OBJECT(subWidget), "item-activated", G_CALLBACK(IconView_activate), (gpointer)this); g_signal_connect(G_OBJECT(subWidget), "selection-changed", G_CALLBACK(IconView_change), (gpointer)this); pWidget::construct(); } auto pIconView::destruct() -> void { gtk_widget_destroy(subWidget); gtk_widget_destroy(gtkWidget); } auto pIconView::append(sIconViewItem item) -> void { GtkTreeIter iter; gtk_list_store_append(store, &iter); setItemIcon(item->offset(), item->state.icon); setItemSelected(item->offset(), item->state.selected); setItemText(item->offset(), item->state.text); } auto pIconView::remove(sIconViewItem item) -> void { lock(); GtkTreeIter iter; if(gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, string{item->offset()})) { gtk_list_store_remove(store, &iter); } _updateSelected(); unlock(); } auto pIconView::reset() -> void { lock(); gtk_list_store_clear(store); _updateSelected(); unlock(); } auto pIconView::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pIconView::setBatchable(bool batchable) -> void { gtk_icon_view_set_selection_mode(GTK_ICON_VIEW(subWidget), batchable ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE ); } auto pIconView::setFlow(Orientation flow) -> void { //GTK+ does not support vertical flow ... the closest we can get is a horizontal flow with only one column if(flow == Orientation::Horizontal) { gtk_icon_view_set_columns(GTK_ICON_VIEW(subWidget), -1); gtk_icon_view_set_item_width(GTK_ICON_VIEW(subWidget), -1); } else { gtk_icon_view_set_columns(GTK_ICON_VIEW(subWidget), 1); gtk_icon_view_set_item_width(GTK_ICON_VIEW(subWidget), max(128, pSizable::state().geometry.width() - 64)); } } auto pIconView::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pIconView::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); if(state().flow == Orientation::Vertical) { gtk_icon_view_set_item_width(GTK_ICON_VIEW(subWidget), max(128, pSizable::state().geometry.width() - 64)); } } auto pIconView::setItemIcon(u32 position, const image& icon) -> void { if(position >= self().itemCount()) return; GtkTreeIter iter; if(gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, string{position})) { if(icon) { GdkPixbuf* pixbuf = CreatePixbuf(icon); gtk_list_store_set(store, &iter, 0, pixbuf, -1); } else { gtk_list_store_set(store, &iter, 0, nullptr, -1); } } } auto pIconView::setItemSelected(u32 position, bool selected) -> void { if(position >= self().itemCount()) return; lock(); GtkTreePath* path = gtk_tree_path_new_from_string(string{position}); if(selected) { gtk_icon_view_select_path(GTK_ICON_VIEW(subWidget), path); } else { gtk_icon_view_unselect_path(GTK_ICON_VIEW(subWidget), path); } gtk_tree_path_free(path); _updateSelected(); unlock(); } auto pIconView::setItemSelected(const vector& selections) -> void { lock(); setItemSelectedNone(); for(auto& position : selections) setItemSelected(position, true); _updateSelected(); unlock(); } auto pIconView::setItemSelectedAll() -> void { lock(); gtk_icon_view_select_all(GTK_ICON_VIEW(subWidget)); _updateSelected(); unlock(); } auto pIconView::setItemSelectedNone() -> void { lock(); gtk_icon_view_unselect_all(GTK_ICON_VIEW(subWidget)); _updateSelected(); unlock(); } auto pIconView::setItemText(u32 position, const string& text) -> void { if(position >= self().itemCount()) return; GtkTreeIter iter; if(gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, string{position})) { gtk_list_store_set(store, &iter, 1, (const char*)text, -1); } } auto pIconView::setOrientation(Orientation orientation) -> void { gtk_icon_view_set_item_orientation(GTK_ICON_VIEW(subWidget), orientation == Orientation::Horizontal ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL ); } auto pIconView::_updateSelected() -> void { vector selected; GList* list = gtk_icon_view_get_selected_items(GTK_ICON_VIEW(subWidget)); GList* p = list; while(p) { auto path = (GtkTreePath*)p->data; char* pathString = gtk_tree_path_to_string(path); u32 position = toNatural(pathString); g_free(pathString); selected.append(position); p = p->next; } g_list_foreach(list, (GFunc)gtk_tree_path_free, nullptr); g_list_free(list); bool identical = selected.size() == currentSelection.size(); if(identical) { for(u32 n = 0; n < selected.size(); n++) { if(selected[n] != currentSelection[n]) { identical = false; break; } } } if(identical) return; currentSelection = selected; for(auto& item : state().items) item->state.selected = false; for(auto& position : currentSelection) { if(position >= self().itemCount()) continue; state().items[position]->state.selected = true; } if(!locked()) self().doChange(); } } #endif ares-126/hiro/gtk/widget/icon-view.hpp000066400000000000000000000017351415063341600177510ustar00rootroot00000000000000#if defined(Hiro_IconView) namespace hiro { struct pIconView : pWidget { Declare(IconView, Widget) auto append(sIconViewItem item) -> void; auto remove(sIconViewItem item) -> void; auto reset() -> void override; auto setBackgroundColor(Color color) -> void; auto setBatchable(bool batchable) -> void; auto setFlow(Orientation flow) -> void; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; auto setItemIcon(u32 position, const image& icon) -> void; auto setItemSelected(u32 position, bool selected) -> void; auto setItemSelected(const vector& selections) -> void; auto setItemSelectedAll() -> void; auto setItemSelectedNone() -> void; auto setItemText(u32 position, const string& text) -> void; auto setOrientation(Orientation orientation) -> void; auto _updateSelected() -> void; GtkWidget* subWidget = nullptr; GtkListStore* store = nullptr; vector currentSelection; }; } #endif ares-126/hiro/gtk/widget/label.cpp000066400000000000000000000114461415063341600171230ustar00rootroot00000000000000#if defined(Hiro_Label) namespace hiro { static auto Label_draw(GtkWidget* widget, cairo_t* context, pLabel* p) -> s32 { auto color = p->state().backgroundColor; if(auto window = p->self().parentWindow(true)) { if(!color) color = window->backgroundColor(); } if(color) { f64 red = (f64)color.red() / 255.0; f64 green = (f64)color.green() / 255.0; f64 blue = (f64)color.blue() / 255.0; f64 alpha = (f64)color.alpha() / 255.0; if(gdk_screen_is_composited(gdk_screen_get_default()) && gdk_screen_get_rgba_visual(gdk_screen_get_default()) ) { cairo_set_source_rgba(context, red, green, blue, alpha); } else { cairo_set_source_rgb(context, red, green, blue); } cairo_set_operator(context, CAIRO_OPERATOR_SOURCE); cairo_paint(context); } else { #if HIRO_GTK==3 auto style = gtk_widget_get_style_context(widget); if(auto tabFrame = p->self().parentTabFrame(true)) { if(auto self = tabFrame->self()) style = gtk_widget_get_style_context(self->gtkWidget); } GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); gtk_render_background(style, context, 0, 0, allocation.width, allocation.height); #endif } return false; } static auto Label_expose(GtkWidget* widget, GdkEvent* event, pLabel* p) -> s32 { cairo_t* context = gdk_cairo_create(gtk_widget_get_window(widget)); Label_draw(widget, context, p); cairo_destroy(context); return false; } static auto Label_mouseEnter(GtkWidget* widget, GdkEventButton* event, pCanvas* p) -> s32 { Widget_mouseEnter(widget, event, p); return true; } static auto Label_mouseLeave(GtkWidget* widget, GdkEventButton* event, pCanvas* p) -> s32 { Widget_mouseLeave(widget, event, p); return true; } static auto Label_mousePress(GtkWidget* widget, GdkEventButton* event, pLabel* p) -> s32 { switch(event->button) { case 1: p->self().doMousePress(Mouse::Button::Left); break; case 2: p->self().doMousePress(Mouse::Button::Middle); break; case 3: p->self().doMousePress(Mouse::Button::Right); break; } return true; } static auto Label_mouseRelease(GtkWidget* widget, GdkEventButton* event, pLabel* p) -> s32 { switch(event->button) { case 1: p->self().doMouseRelease(Mouse::Button::Left); break; case 2: p->self().doMouseRelease(Mouse::Button::Middle); break; case 3: p->self().doMouseRelease(Mouse::Button::Right); break; } return true; } auto pLabel::construct() -> void { gtkWidget = gtk_event_box_new(); subWidget = gtk_label_new(""); gtk_widget_show(subWidget); gtk_container_add(GTK_CONTAINER(gtkWidget), subWidget); setAlignment(state().alignment); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); setText(state().text); g_signal_connect(G_OBJECT(gtkWidget), "button-press-event", G_CALLBACK(Label_mousePress), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "button-release-event", G_CALLBACK(Label_mouseRelease), (gpointer)this); #if HIRO_GTK==2 g_signal_connect(G_OBJECT(subWidget), "expose-event", G_CALLBACK(Label_expose), (gpointer)this); #elif HIRO_GTK==3 g_signal_connect(G_OBJECT(subWidget), "draw", G_CALLBACK(Label_draw), (gpointer)this); #endif g_signal_connect(G_OBJECT(gtkWidget), "enter-notify-event", G_CALLBACK(Label_mouseEnter), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "leave-notify-event", G_CALLBACK(Label_mouseLeave), (gpointer)this); pWidget::construct(); } auto pLabel::destruct() -> void { gtk_widget_destroy(subWidget); gtk_widget_destroy(gtkWidget); } auto pLabel::minimumSize() const -> Size { auto size = pFont::size(self().font(true), state().text); return {size.width(), size.height()}; } auto pLabel::setAlignment(Alignment alignment) -> void { if(!alignment) alignment = {0.0, 0.5}; gtk_misc_set_alignment(GTK_MISC(subWidget), alignment.horizontal(), alignment.vertical()); auto justify = GTK_JUSTIFY_CENTER; if(alignment.horizontal() < 0.333) justify = GTK_JUSTIFY_LEFT; if(alignment.horizontal() > 0.666) justify = GTK_JUSTIFY_RIGHT; gtk_label_set_justify(GTK_LABEL(subWidget), justify); } auto pLabel::setBackgroundColor(Color color) -> void { //GTK3 will paint the wrong background color when a label is inside of a TabFrame //this is caused by the GtkEventBox wrapper that is required to paint custom backgrounds //handle background painting via "draw" or "expose-event" signals instead } auto pLabel::setForegroundColor(Color color) -> void { auto gdkColor = CreateColor(color); gtk_widget_modify_fg(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pLabel::setText(const string& text) -> void { gtk_label_set_text(GTK_LABEL(subWidget), text); } auto pLabel::setVisible(bool visible) -> void { setBackgroundColor(state().backgroundColor); return pWidget::setVisible(visible); } } #endif ares-126/hiro/gtk/widget/label.hpp000066400000000000000000000006551415063341600171300ustar00rootroot00000000000000#if defined(Hiro_Label) namespace hiro { struct pLabel : pWidget { Declare(Label, Widget) auto minimumSize() const -> Size override; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; GtkWidget* subWidget = nullptr; }; } #endif ares-126/hiro/gtk/widget/line-edit.cpp000066400000000000000000000031341415063341600177110ustar00rootroot00000000000000#if defined(Hiro_LineEdit) namespace hiro { static auto LineEdit_activate(GtkEntry*, pLineEdit* p) -> void { p->self().doActivate(); } static auto LineEdit_change(GtkEditable*, pLineEdit* p) -> void { p->state().text = gtk_entry_get_text(GTK_ENTRY(p->gtkWidget)); if(!p->locked()) p->self().doChange(); } auto pLineEdit::construct() -> void { gtkWidget = gtk_entry_new(); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setForegroundColor(state().foregroundColor); setText(state().text); g_signal_connect(G_OBJECT(gtkWidget), "activate", G_CALLBACK(LineEdit_activate), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "changed", G_CALLBACK(LineEdit_change), (gpointer)this); pWidget::construct(); } auto pLineEdit::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pLineEdit::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); return {size.width() + 10, size.height() + 10}; } auto pLineEdit::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(gtkWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pLineEdit::setEditable(bool editable) -> void { gtk_editable_set_editable(GTK_EDITABLE(gtkWidget), editable); } auto pLineEdit::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(gtkWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pLineEdit::setText(const string& text) -> void { lock(); gtk_entry_set_text(GTK_ENTRY(gtkWidget), text); unlock(); } } #endif ares-126/hiro/gtk/widget/line-edit.hpp000066400000000000000000000005321415063341600177150ustar00rootroot00000000000000#if defined(Hiro_LineEdit) namespace hiro { struct pLineEdit : pWidget { Declare(LineEdit, Widget) auto minimumSize() const -> Size override; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; }; } #endif ares-126/hiro/gtk/widget/progress-bar.cpp000066400000000000000000000010261415063341600204430ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) namespace hiro { auto pProgressBar::construct() -> void { gtkWidget = gtk_progress_bar_new(); setPosition(state().position); pWidget::construct(); } auto pProgressBar::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pProgressBar::minimumSize() const -> Size { return {0, 25}; } auto pProgressBar::setPosition(u32 position) -> void { position = position <= 100 ? position : 0; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gtkWidget), (f64)position / 100.0); } } #endif ares-126/hiro/gtk/widget/progress-bar.hpp000066400000000000000000000003261415063341600204520ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) namespace hiro { struct pProgressBar : pWidget { Declare(ProgressBar, Widget) auto minimumSize() const -> Size override; auto setPosition(u32 position) -> void; }; } #endif ares-126/hiro/gtk/widget/radio-button.cpp000066400000000000000000000065261415063341600204560ustar00rootroot00000000000000#if defined(Hiro_RadioButton) namespace hiro { static auto RadioButton_activate(GtkToggleButton*, pRadioButton* p) -> void { if(p->groupLocked()) return; bool wasChecked = p->state().checked; p->self().setChecked(); if(!wasChecked) p->self().doActivate(); } auto pRadioButton::construct() -> void { gtkWidget = gtk_toggle_button_new(); setBordered(state().bordered); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); g_signal_connect(G_OBJECT(gtkWidget), "toggled", G_CALLBACK(RadioButton_activate), (gpointer)this); pWidget::construct(); } auto pRadioButton::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pRadioButton::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + 24, size.height() + 12}; } auto pRadioButton::setBordered(bool bordered) -> void { gtk_button_set_relief(GTK_BUTTON(gtkWidget), bordered ? GTK_RELIEF_NORMAL : GTK_RELIEF_NONE); } auto pRadioButton::setChecked() -> void { for(auto& weak : self().group()->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { if(auto self = radioButton->self()) { self->lock(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->gtkWidget), radioButton->state.checked); self->unlock(); } } } } } auto pRadioButton::setGroup(sGroup group) -> void { bool first = true; for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { if(auto self = radioButton->self()) { self->lock(); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(self->gtkWidget), radioButton->state.checked = first); first = false; self->unlock(); } } } } } auto pRadioButton::setIcon(const image& icon) -> void { if(icon) { GtkImage* gtkImage = CreateImage(icon); gtk_button_set_image(GTK_BUTTON(gtkWidget), (GtkWidget*)gtkImage); } else { gtk_button_set_image(GTK_BUTTON(gtkWidget), nullptr); } } auto pRadioButton::setOrientation(Orientation orientation) -> void { switch(orientation) { case Orientation::Horizontal: gtk_button_set_image_position(GTK_BUTTON(gtkWidget), GTK_POS_LEFT); break; case Orientation::Vertical: gtk_button_set_image_position(GTK_BUTTON(gtkWidget), GTK_POS_TOP); break; } } auto pRadioButton::setText(const string& text) -> void { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); setFont(self().font(true)); //gtk_button_set_label() recreates label, which destroys currently assigned font } auto pRadioButton::groupLocked() const -> bool { if(auto group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto self = object->self()) { if(self->locked()) return true; } } } return false; } return locked(); } } #endif ares-126/hiro/gtk/widget/radio-button.hpp000066400000000000000000000007171415063341600204570ustar00rootroot00000000000000#if defined(Hiro_RadioButton) namespace hiro { struct pRadioButton : pWidget { Declare(RadioButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto groupLocked() const -> bool; }; } #endif ares-126/hiro/gtk/widget/radio-label.cpp000066400000000000000000000045521415063341600202170ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) namespace hiro { static auto RadioLabel_activate(GtkToggleButton*, pRadioLabel* p) -> void { if(p->groupLocked()) return; bool wasChecked = p->state().checked; p->self().setChecked(); if(!wasChecked) p->self().doActivate(); } auto pRadioLabel::construct() -> void { gtkWidget = gtk_radio_button_new_with_label(nullptr, ""); gtkToggleButton = GTK_TOGGLE_BUTTON(gtkWidget); gtkRadioButton = GTK_RADIO_BUTTON(gtkWidget); setGroup(state().group); setText(state().text); g_signal_connect(G_OBJECT(gtkWidget), "toggled", G_CALLBACK(RadioLabel_activate), (gpointer)this); pWidget::construct(); } auto pRadioLabel::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pRadioLabel::minimumSize() const -> Size { Size size = pFont::size(self().font(true), state().text); return {size.width() + 28, size.height() + 4}; } auto pRadioLabel::setChecked() -> void { auto lock = acquire(); gtk_toggle_button_set_active(gtkToggleButton, true); } auto pRadioLabel::setGroup(sGroup group) -> void { maybe gtkRadioButton; for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioLabel = dynamic_cast(object.data())) { if(auto self = radioLabel->self()) { auto lock = self->acquire(); gtk_radio_button_set_group(self->gtkRadioButton, nullptr); if(!gtkRadioButton) { gtkRadioButton = self->gtkRadioButton; gtk_toggle_button_set_active(self->gtkToggleButton, radioLabel->state.checked = true); } else { gtk_radio_button_set_group(self->gtkRadioButton, gtk_radio_button_get_group(*gtkRadioButton)); gtk_toggle_button_set_active(self->gtkToggleButton, radioLabel->state.checked = false); } } } } } } auto pRadioLabel::setText(const string& text) -> void { gtk_button_set_label(GTK_BUTTON(gtkWidget), text); setFont(self().font(true)); //gtk_button_set_label() recreates label, which destroys currently assigned font } auto pRadioLabel::groupLocked() const -> bool { if(auto group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto self = object->self()) { if(self->locked()) return true; } } } return false; } return locked(); } } #endif ares-126/hiro/gtk/widget/radio-label.hpp000066400000000000000000000006311415063341600202160ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) namespace hiro { struct pRadioLabel : pWidget { Declare(RadioLabel, Widget) auto minimumSize() const -> Size override; auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setText(const string& text) -> void; auto groupLocked() const -> bool; GtkToggleButton* gtkToggleButton = nullptr; GtkRadioButton* gtkRadioButton = nullptr; }; } #endif ares-126/hiro/gtk/widget/source-edit.cpp000066400000000000000000000147671415063341600203000ustar00rootroot00000000000000#if defined(Hiro_SourceEdit) namespace hiro { static auto SourceEdit_change(GtkTextBuffer*, pSourceEdit* p) -> void { if(!p->locked()) p->self().doChange(); } static auto SourceEdit_move(GObject*, GParamSpec*, pSourceEdit* p) -> void { p->state().textCursor = p->textCursor(); if(!p->locked()) p->self().doMove(); } auto pSourceEdit::construct() -> void { gtkScrolledWindow = (GtkScrolledWindow*)gtk_scrolled_window_new(0, 0); gtkContainer = GTK_CONTAINER(gtkScrolledWindow); gtkWidget = GTK_WIDGET(gtkScrolledWindow); gtk_scrolled_window_set_policy(gtkScrolledWindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(gtkScrolledWindow, GTK_SHADOW_ETCHED_IN); gtkSourceLanguageManager = gtk_source_language_manager_get_default(); gtkSourceLanguage = gtk_source_language_manager_get_language(gtkSourceLanguageManager, ""); gtkSourceStyleSchemeManager = gtk_source_style_scheme_manager_get_default(); gtkSourceStyleScheme = gtk_source_style_scheme_manager_get_scheme(gtkSourceStyleSchemeManager, "classic"); gtkSourceBuffer = gtk_source_buffer_new(nullptr); gtkTextBuffer = GTK_TEXT_BUFFER(gtkSourceBuffer); gtk_source_buffer_set_highlight_matching_brackets(gtkSourceBuffer, true); gtk_source_buffer_set_highlight_syntax(gtkSourceBuffer, true); gtk_source_buffer_set_language(gtkSourceBuffer, gtkSourceLanguage); gtk_source_buffer_set_style_scheme(gtkSourceBuffer, gtkSourceStyleScheme); gtkSourceView = (GtkSourceView*)gtk_source_view_new_with_buffer(gtkSourceBuffer); gtkTextView = GTK_TEXT_VIEW(gtkSourceView); gtkWidgetSourceView = GTK_WIDGET(gtkSourceView); gtk_source_view_set_auto_indent(gtkSourceView, false); gtk_source_view_set_draw_spaces(gtkSourceView, (GtkSourceDrawSpacesFlags)0); gtk_source_view_set_highlight_current_line(gtkSourceView, true); gtk_source_view_set_indent_on_tab(gtkSourceView, false); gtk_source_view_set_indent_width(gtkSourceView, 4); gtk_source_view_set_insert_spaces_instead_of_tabs(gtkSourceView, false); gtk_source_view_set_right_margin_position(gtkSourceView, 80); gtk_source_view_set_show_line_marks(gtkSourceView, false); gtk_source_view_set_show_line_numbers(gtkSourceView, true); gtk_source_view_set_show_right_margin(gtkSourceView, true); gtk_source_view_set_smart_home_end(gtkSourceView, GTK_SOURCE_SMART_HOME_END_DISABLED); gtk_source_view_set_tab_width(gtkSourceView, 4); gtk_container_add(gtkContainer, gtkWidgetSourceView); gtk_widget_show(gtkWidgetSourceView); setEditable(state().editable); setLanguage(state().language); setNumbered(state().numbered); setScheme(state().scheme); setText(state().text); setTextCursor(state().textCursor); setWordWrap(state().wordWrap); g_signal_connect(G_OBJECT(gtkSourceBuffer), "changed", G_CALLBACK(SourceEdit_change), (gpointer)this); g_signal_connect(G_OBJECT(gtkSourceBuffer), "notify::cursor-position", G_CALLBACK(SourceEdit_move), (gpointer)this); pWidget::construct(); } auto pSourceEdit::destruct() -> void { state().text = text(); gtk_widget_destroy(gtkWidgetSourceView); gtk_widget_destroy(gtkWidget); } auto pSourceEdit::setEditable(bool editable) -> void { gtk_text_view_set_editable(gtkTextView, editable); } auto pSourceEdit::setFocused() -> void { gtk_widget_grab_focus(gtkWidgetSourceView); } auto pSourceEdit::setLanguage(const string& language) -> void { string name; if(language == "C") name = "c"; if(language == "C++") name = "cpp"; if(language == "Makefile") name = "makefile"; gtkSourceLanguage = gtk_source_language_manager_get_language(gtkSourceLanguageManager, name); gtk_source_buffer_set_language(gtkSourceBuffer, gtkSourceLanguage); } auto pSourceEdit::setNumbered(bool numbered) -> void { gtk_source_view_set_show_line_numbers(gtkSourceView, numbered); } auto pSourceEdit::setScheme(const string& requestedScheme) -> void { auto scheme = requestedScheme ? requestedScheme : "classic"; gtkSourceStyleScheme = gtk_source_style_scheme_manager_get_scheme(gtkSourceStyleSchemeManager, scheme.downcase()); if(!gtkSourceStyleScheme) gtkSourceStyleScheme = gtk_source_style_scheme_manager_get_scheme(gtkSourceStyleSchemeManager, "classic"); gtk_source_buffer_set_style_scheme(gtkSourceBuffer, gtkSourceStyleScheme); } auto pSourceEdit::setText(const string& text) -> void { lock(); //prevent Ctrl+Z from undoing the newly assigned text ... //for instance, a text editor widget setting the initial document here gtk_source_buffer_begin_not_undoable_action(gtkSourceBuffer); gtk_text_buffer_set_text(gtkTextBuffer, text, -1); gtk_source_buffer_end_not_undoable_action(gtkSourceBuffer); unlock(); } auto pSourceEdit::setTextCursor(TextCursor cursor) -> void { lock(); GtkTextIter offset, length; gtk_text_buffer_get_end_iter(gtkTextBuffer, &offset); gtk_text_buffer_get_end_iter(gtkTextBuffer, &length); s32 end = gtk_text_iter_get_offset(&offset); gtk_text_iter_set_offset(&offset, max(0, min(end, cursor.offset()))); gtk_text_iter_set_offset(&length, max(0, min(end, cursor.offset() + cursor.length()))); gtk_text_buffer_select_range(gtkTextBuffer, &offset, &length); auto mark = gtk_text_buffer_get_mark(gtkTextBuffer, "insert"); gtk_text_view_scroll_mark_onscreen(gtkTextView, mark); unlock(); } auto pSourceEdit::setWordWrap(bool wordWrap) -> void { gtk_text_view_set_wrap_mode(gtkTextView, wordWrap ? GTK_WRAP_WORD_CHAR : GTK_WRAP_NONE); gtk_scrolled_window_set_policy(gtkScrolledWindow, wordWrap ? GTK_POLICY_NEVER : GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); } auto pSourceEdit::text() const -> string { GtkTextIter startIter; gtk_text_buffer_get_start_iter(gtkTextBuffer, &startIter); GtkTextIter endIter; gtk_text_buffer_get_end_iter(gtkTextBuffer, &endIter); char* textBuffer = gtk_text_buffer_get_text(gtkTextBuffer, &startIter, &endIter, true); string text = textBuffer; g_free(textBuffer); return text; } auto pSourceEdit::textCursor() const -> TextCursor { TextCursor cursor; s32 offset = 0; g_object_get(G_OBJECT(gtkSourceBuffer), "cursor-position", &offset, nullptr); cursor.setOffset(offset); GtkTextIter start, end; if(gtk_text_buffer_get_selection_bounds(gtkTextBuffer, &start, &end)) { //if selecting text from left to right, the cursor may be ahead of the selection start ... //since hiro combines selection bounds (end-start) into length, move the offset to the start s32 origin = gtk_text_iter_get_offset(&start); cursor.setOffset(origin); s32 length = gtk_text_iter_get_offset(&end) - origin; cursor.setLength(length); } return cursor; } } #endif ares-126/hiro/gtk/widget/source-edit.hpp000066400000000000000000000021171415063341600202670ustar00rootroot00000000000000#if defined(Hiro_SourceEdit) namespace hiro { struct pSourceEdit : pWidget { Declare(SourceEdit, Widget) auto setEditable(bool editable) -> void; auto setFocused() -> void override; auto setLanguage(const string& language) -> void; auto setNumbered(bool numbered) -> void; auto setScheme(const string& scheme) -> void; auto setText(const string& text) -> void; auto setTextCursor(TextCursor textCursor) -> void; auto setWordWrap(bool wordWrap) -> void; auto text() const -> string; auto textCursor() const -> TextCursor; GtkScrolledWindow* gtkScrolledWindow = nullptr; GtkContainer* gtkContainer = nullptr; GtkSourceBuffer* gtkSourceBuffer = nullptr; GtkTextBuffer* gtkTextBuffer = nullptr; GtkSourceLanguageManager* gtkSourceLanguageManager = nullptr; GtkSourceLanguage* gtkSourceLanguage = nullptr; GtkSourceStyleSchemeManager* gtkSourceStyleSchemeManager = nullptr; GtkSourceStyleScheme* gtkSourceStyleScheme = nullptr; GtkSourceView* gtkSourceView = nullptr; GtkTextView* gtkTextView = nullptr; GtkWidget* gtkWidgetSourceView = nullptr; }; } #endif ares-126/hiro/gtk/widget/tab-frame-item.cpp000066400000000000000000000024431415063341600206330ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { auto pTabFrameItem::construct() -> void { if(auto parent = _parent()) parent->_append(); if(auto& sizable = state().sizable) sizable->construct(); } auto pTabFrameItem::destruct() -> void { if(auto& sizable = state().sizable) sizable->destruct(); } auto pTabFrameItem::append(sSizable sizable) -> void { } auto pTabFrameItem::remove(sSizable sizable) -> void { } auto pTabFrameItem::setClosable(bool closable) -> void { if(auto parent = _parent()) { parent->setItemClosable(self().offset(), closable); } } auto pTabFrameItem::setIcon(const image& icon) -> void { if(auto parent = _parent()) { parent->setItemIcon(self().offset(), icon); } } auto pTabFrameItem::setMovable(bool movable) -> void { if(auto parent = _parent()) { parent->setItemMovable(self().offset(), movable); } } auto pTabFrameItem::setSelected() -> void { if(auto parent = _parent()) { parent->setItemSelected(self().offset()); } } auto pTabFrameItem::setText(const string& text) -> void { if(auto parent = _parent()) { parent->setItemText(self().offset(), text); } } auto pTabFrameItem::_parent() -> maybe { if(auto parent = self().parentTabFrame()) { if(auto self = parent->self()) return *self; } return {}; } } #endif ares-126/hiro/gtk/widget/tab-frame-item.hpp000066400000000000000000000007011415063341600206330ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrameItem : pObject { Declare(TabFrameItem, Object) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setClosable(bool closable) -> void; auto setIcon(const image& icon) -> void; auto setMovable(bool movable) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/gtk/widget/tab-frame.cpp000066400000000000000000000226471415063341600177070ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { static auto TabFrame_change(GtkNotebook* notebook, GtkWidget* page, u32 position, pTabFrame* p) -> void { for(auto& item : p->state().items) item->state.selected = false; if(auto item = p->self().item(position)) item->state.selected = true; p->_synchronizeLayout(); if(!p->locked()) p->self().doChange(); } static auto TabFrame_close(GtkButton* button, pTabFrame* p) -> void { maybe position; for(auto n : range(p->tabs.size())) { if(button == (GtkButton*)p->tabs[n].close) { position = n; break; } } if(position) { if(!p->locked()) p->self().doClose(p->self().item(*position)); } } static auto TabFrame_move(GtkNotebook* notebook, GtkWidget* page, u32 moveTo, pTabFrame* p) -> void { u32 position = gtk_notebook_get_current_page(notebook); for(auto& item : p->state().items) item->state.selected = false; if(auto item = p->self().item(position)) item->state.selected = true; maybe moveFrom; for(auto n : range(p->tabs.size())) { if(page == p->tabs[n].child) { moveFrom = n; break; } } if(moveFrom) { p->state().items.insert(moveTo, p->state().items.take(*moveFrom)); p->tabs.insert(moveTo, p->tabs.take(*moveFrom)); if(!p->locked()) p->self().doMove(p->self().item(*moveFrom), p->self().item(moveTo)); } } auto pTabFrame::construct() -> void { gtkWidget = gtk_notebook_new(); gtk_notebook_set_show_border(GTK_NOTEBOOK(gtkWidget), false); gtk_notebook_set_tab_pos(GTK_NOTEBOOK(gtkWidget), GTK_POS_TOP); tabs.reset(); //todo: memory leak, need to release each tab for(auto& item : state().items) append(item); setNavigation(state().navigation); g_signal_connect(G_OBJECT(gtkWidget), "page-reordered", G_CALLBACK(TabFrame_move), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "switch-page", G_CALLBACK(TabFrame_change), (gpointer)this); pWidget::construct(); } auto pTabFrame::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pTabFrame::append(sTabFrameItem item) -> void { lock(); setFont(self().font(true)); setItemMovable(item->offset(), item->movable()); if(item->selected()) setItemSelected(item->offset()); _synchronizeTab(tabs.size() - 1); setGeometry(self().geometry()); unlock(); } auto pTabFrame::container(mWidget& widget) -> GtkWidget* { //TabFrame holds multiple TabFrameItem controls //each TabFrameItem has its own GtkWindow; plus its own layout //we need to recurse up from the widget to its topmost layout before the TabFrameItem //once we know the topmost layout, we search through all TabFrameItems for a match mObject* object = &widget; while(object) { if(object->parentTabFrameItem()) break; if(auto parent = object->parent()) { object = parent; continue; } break; } u32 position = 0; for(auto& item : state().items) { if(item->state.sizable.data() == object) return tabs[position].child; position++; } return nullptr; } auto pTabFrame::remove(sTabFrameItem item) -> void { lock(); //if we are removing the current tab, we have to select another tab manually if(item->offset() == gtk_notebook_get_current_page(GTK_NOTEBOOK(gtkWidget))) { //the new tab will be the one after this one u32 displacement = 1; //... unless it's the last tab, in which case it's the one before it if(item->offset() == self().itemCount() - 1) displacement = -1; //... unless there are no tabs left, in which case nothing is selected if(self().itemCount() > 1) { setItemSelected(item->offset() + displacement); } } tabs.remove(item->offset()); gtk_notebook_remove_page(GTK_NOTEBOOK(gtkWidget), item->offset()); u32 position = gtk_notebook_get_current_page(GTK_NOTEBOOK(gtkWidget)); for(auto& item : state().items) item->state.selected = false; if(auto item = self().item(position)) item->state.selected = true; unlock(); } auto pTabFrame::setFont(const Font& font) -> void { for(auto n : range(tabs.size())) { pFont::setFont(tabs[n].title, font); if(auto sizable = state().items[n]->state.sizable) { if(auto self = sizable->self()) { self->setFont(sizable->font(true)); } } } } auto pTabFrame::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); geometry.setPosition(); if(state().navigation == Navigation::Top || state().navigation == Navigation::Bottom) { geometry.setWidth(geometry.width() - 6); geometry.setHeight(geometry.height() - (15 + _tabHeight())); } else { geometry.setWidth(geometry.width() - (17 + _tabWidth())); geometry.setHeight(geometry.height() - 6); } for(auto& item : state().items) { if(item->state.sizable) item->state.sizable->setGeometry(geometry); } } auto pTabFrame::setItemClosable(u32 position, bool closable) -> void { _synchronizeTab(position); } auto pTabFrame::setItemIcon(u32 position, const image& icon) -> void { _synchronizeTab(position); } auto pTabFrame::setItemMovable(u32 position, bool movable) -> void { lock(); gtk_notebook_set_tab_reorderable(GTK_NOTEBOOK(gtkWidget), tabs[position].child, movable); unlock(); } auto pTabFrame::setItemSelected(u32 position) -> void { lock(); gtk_notebook_set_current_page(GTK_NOTEBOOK(gtkWidget), position); unlock(); } auto pTabFrame::setItemSizable(u32 position, sSizable sizable) -> void { //if(layout->self()) layout->self()->setParent(); } auto pTabFrame::setItemText(u32 position, const string& text) -> void { _synchronizeTab(position); } auto pTabFrame::setNavigation(Navigation navigation) -> void { GtkPositionType type; switch(navigation) { default: case Navigation::Top: type = GTK_POS_TOP; break; case Navigation::Bottom: type = GTK_POS_BOTTOM; break; case Navigation::Left: type = GTK_POS_LEFT; break; case Navigation::Right: type = GTK_POS_RIGHT; break; } gtk_notebook_set_tab_pos(GTK_NOTEBOOK(gtkWidget), type); setGeometry(self().geometry()); } //called by pTabFrameItem::construct(), before pTabFrame::append() //tab needs to be created early, so that pTabFrameItem child widgets calling pWidget::container() can find the tab auto pTabFrame::_append() -> void { lock(); Tab tab; tab.child = gtk_fixed_new(); #if HIRO_GTK==2 tab.container = gtk_hbox_new(false, 0); #elif HIRO_GTK==3 tab.container = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); #endif tab.image = gtk_image_new(); tab.title = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(tab.title), 0.0, 0.5); tab.close = gtk_button_new_with_label("\u00d7"); //Unicode multiplication sign (looks better than 'X') gtk_button_set_focus_on_click(GTK_BUTTON(tab.close), false); gtk_button_set_relief(GTK_BUTTON(tab.close), GTK_RELIEF_NONE); pFont::setFont(tab.close, Font("sans", 9).setBold()); auto color = CreateColor({255, 0, 0}); gtk_widget_modify_fg(gtk_bin_get_child(GTK_BIN(tab.close)), GTK_STATE_PRELIGHT, &color); tabs.append(tab); gtk_widget_show(tab.child); gtk_widget_show(tab.container); gtk_widget_show(tab.image); gtk_widget_show(tab.title); gtk_widget_show(tab.close); gtk_box_pack_start(GTK_BOX(tab.container), tab.image, false, false, 0); gtk_box_pack_start(GTK_BOX(tab.container), tab.title, true, true, 0); gtk_box_pack_start(GTK_BOX(tab.container), tab.close, false, false, 0); g_signal_connect(G_OBJECT(tab.close), "clicked", G_CALLBACK(TabFrame_close), (gpointer)this); gtk_notebook_append_page(GTK_NOTEBOOK(gtkWidget), tab.child, tab.container); unlock(); } auto pTabFrame::_synchronizeLayout() -> void { for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { if(auto self = sizable->self()) { self->setVisible(sizable->visible() && item->selected()); } } } } auto pTabFrame::_synchronizeTab(u32 position) -> void { auto& item = state().items[position]; auto& tab = tabs[position]; gtk_widget_set_visible(tab.close, item->closable()); if(auto& icon = item->state.icon) { u32 size = pFont::size(self().font(true), " ").height(); auto pixbuf = CreatePixbuf(icon, true); gtk_image_set_from_pixbuf(GTK_IMAGE(tab.image), pixbuf); } else { gtk_image_clear(GTK_IMAGE(tab.image)); } string text = { item->state.icon && item->state.text ? " " : "", item->state.text, item->state.text && item->state.closable ? " " : "" }; gtk_label_set_text(GTK_LABEL(tab.title), text); } //compute the height of the tallest tab for child layout geometry calculations auto pTabFrame::_tabHeight() -> u32 { s32 height = 1; for(auto n : range(self().itemCount())) { GtkAllocation imageAllocation, titleAllocation, closeAllocation; gtk_widget_get_allocation(tabs[n].image, &imageAllocation); gtk_widget_get_allocation(tabs[n].title, &titleAllocation); gtk_widget_get_allocation(tabs[n].close, &closeAllocation); height = max(height, imageAllocation.height); height = max(height, titleAllocation.height); if(!state().items[n]->closable()) continue; height = max(height, closeAllocation.height); } return height; } auto pTabFrame::_tabWidth() -> u32 { s32 width = 1; for(auto n : range(self().itemCount())) { GtkAllocation imageAllocation, titleAllocation, closeAllocation; gtk_widget_get_allocation(tabs[n].image, &imageAllocation); gtk_widget_get_allocation(tabs[n].title, &titleAllocation); gtk_widget_get_allocation(tabs[n].close, &closeAllocation); width = max(width, imageAllocation.width + titleAllocation.width + (state().items[n]->closable() ? closeAllocation.width : 0) ); } return width; } } #endif ares-126/hiro/gtk/widget/tab-frame.hpp000066400000000000000000000022311415063341600176770ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrame : pWidget { Declare(TabFrame, Widget) auto append(sTabFrameItem item) -> void; auto container(mWidget& widget) -> GtkWidget* override; auto remove(sTabFrameItem item) -> void; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setItemClosable(u32 position, bool closable) -> void; auto setItemIcon(u32 position, const image& icon) -> void; auto setItemMovable(u32 position, bool movable) -> void; auto setItemSelected(u32 position) -> void; auto setItemSizable(u32 position, sSizable sizable) -> void; auto setItemText(u32 position, const string& text) -> void; auto setNavigation(Navigation navigation) -> void; auto _append() -> void; auto _synchronizeLayout() -> void; auto _synchronizeTab(u32 position) -> void; auto _tabHeight() -> u32; auto _tabWidth() -> u32; struct Tab { GtkWidget* child = nullptr; GtkWidget* container = nullptr; GtkWidget* layout = nullptr; GtkWidget* image = nullptr; GtkWidget* title = nullptr; GtkWidget* close = nullptr; }; vector tabs; }; } #endif ares-126/hiro/gtk/widget/table-view-cell.cpp000066400000000000000000000030721415063341600210140ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewCell::construct() -> void { _setState(); } auto pTableViewCell::destruct() -> void { } auto pTableViewCell::setAlignment(Alignment alignment) -> void { } auto pTableViewCell::setBackgroundColor(Color color) -> void { } auto pTableViewCell::setCheckable(bool checkable) -> void { } auto pTableViewCell::setChecked(bool checked) -> void { _setState(); } auto pTableViewCell::setForegroundColor(Color color) -> void { } auto pTableViewCell::setIcon(const image& icon) -> void { _setState(); } auto pTableViewCell::setText(const string& text) -> void { _setState(); } auto pTableViewCell::_grandparent() -> maybe { if(auto parent = _parent()) return parent->_parent(); return nothing; } auto pTableViewCell::_parent() -> maybe { if(auto parent = self().parentTableViewItem()) { if(auto self = parent->self()) return *self; } return nothing; } auto pTableViewCell::_setState() -> void { if(auto parent = _parent()) { if(auto grandparent = _grandparent()) { if(self().offset() < grandparent->self().columnCount()) { auto lock = grandparent->acquire(); gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 0, state().checked, -1); gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 1, CreatePixbuf(state().icon), -1); gtk_list_store_set(grandparent->gtkListStore, &parent->gtkIter, 3 * self().offset() + 2, state().text.data(), -1); } } } } } #endif ares-126/hiro/gtk/widget/table-view-cell.hpp000066400000000000000000000010661415063341600210220ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewCell : pObject { Declare(TableViewCell, Object) auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setText(const string& text) -> void; auto _grandparent() -> maybe; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/gtk/widget/table-view-column.cpp000066400000000000000000000114511415063341600213720ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewColumn::construct() -> void { if(auto parent = _parent()) { auto handle = parent.data(); u32 offset = self().offset(); #if HIRO_GTK==2 gtkHeader = gtk_hbox_new(false, 0); #elif HIRO_GTK==3 gtkHeader = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); #endif gtkHeaderIcon = gtk_image_new(); gtk_box_pack_start(GTK_BOX(gtkHeader), gtkHeaderIcon, false, false, 0); gtkHeaderText = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(gtkHeader), gtkHeaderText, true, false, 2); gtkHeaderSort = gtk_label_new(""); gtk_box_pack_start(GTK_BOX(gtkHeader), gtkHeaderSort, false, false, 0); gtkColumn = gtk_tree_view_column_new(); gtk_tree_view_column_set_sizing(gtkColumn, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_title(gtkColumn, ""); gtk_tree_view_column_set_widget(gtkColumn, gtkHeader); gtkCellToggle = gtk_cell_renderer_toggle_new(); gtk_tree_view_column_pack_start(gtkColumn, gtkCellToggle, false); gtk_tree_view_column_set_attributes(gtkColumn, gtkCellToggle, "active", 3 * offset + 0, nullptr); gtk_tree_view_column_set_cell_data_func(gtkColumn, GTK_CELL_RENDERER(gtkCellToggle), (GtkTreeCellDataFunc)TableView_dataFunc, (gpointer)handle, nullptr); gtkCellIcon = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(gtkColumn, gtkCellIcon, false); gtk_tree_view_column_set_attributes(gtkColumn, gtkCellIcon, "pixbuf", 3 * offset + 1, nullptr); gtk_tree_view_column_set_cell_data_func(gtkColumn, GTK_CELL_RENDERER(gtkCellIcon), (GtkTreeCellDataFunc)TableView_dataFunc, (gpointer)handle, nullptr); gtkCellText = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(gtkColumn, gtkCellText, true); //text must expand to cell width for horizontal alignment to work gtk_tree_view_column_set_attributes(gtkColumn, gtkCellText, "text", 3 * offset + 2, nullptr); gtk_tree_view_column_set_cell_data_func(gtkColumn, GTK_CELL_RENDERER(gtkCellText), (GtkTreeCellDataFunc)TableView_dataFunc, (gpointer)handle, nullptr); g_signal_connect(G_OBJECT(gtkColumn), "clicked", G_CALLBACK(TableView_headerActivate), (gpointer)handle); g_signal_connect(G_OBJECT(gtkCellText), "edited", G_CALLBACK(TableView_edit), (gpointer)handle); g_signal_connect(G_OBJECT(gtkCellToggle), "toggled", G_CALLBACK(TableView_toggle), (gpointer)handle); gtk_tree_view_append_column(parent->gtkTreeView, gtkColumn); gtk_widget_show_all(gtkHeader); parent->_createModel(); gtk_tree_view_column_set_clickable(gtkColumn, parent->state().sortable); if(state().active) setActive(); setEditable(state().editable); setIcon(state().icon); setResizable(state().resizable); setSorting(state().sorting); setText(state().text); setVisible(state().visible); } } auto pTableViewColumn::destruct() -> void { if(auto parent = _parent()) { gtk_tree_view_remove_column(parent->gtkTreeView, gtkColumn); gtkColumn = nullptr; parent->_createModel(); } } auto pTableViewColumn::setActive() -> void { if(auto parent = _parent()) { gtk_tree_view_set_search_column(parent->gtkTreeView, 3 * self().offset() + 2); } } auto pTableViewColumn::setAlignment(Alignment alignment) -> void { } auto pTableViewColumn::setBackgroundColor(Color color) -> void { } auto pTableViewColumn::setEditable(bool editable) -> void { g_object_set(G_OBJECT(gtkCellText), "editable", editable ? true : false, nullptr); } auto pTableViewColumn::setExpandable(bool expandable) -> void { if(auto parent = _parent()) { parent->resizeColumns(); } } auto pTableViewColumn::setFont(const Font& font) -> void { } auto pTableViewColumn::setForegroundColor(Color color) -> void { } auto pTableViewColumn::setIcon(const image& icon) -> void { if(icon) { gtk_image_set_from_pixbuf(GTK_IMAGE(gtkHeaderIcon), CreatePixbuf(icon)); } else { gtk_image_clear(GTK_IMAGE(gtkHeaderIcon)); } } auto pTableViewColumn::setResizable(bool resizable) -> void { gtk_tree_view_column_set_resizable(gtkColumn, resizable); } auto pTableViewColumn::setSorting(Sort sorting) -> void { string text; if(sorting == Sort::Ascending ) text = "\u25b4"; if(sorting == Sort::Descending) text = "\u25be"; gtk_label_set_text(GTK_LABEL(gtkHeaderSort), text); } auto pTableViewColumn::setText(const string& text) -> void { gtk_label_set_text(GTK_LABEL(gtkHeaderText), text); } auto pTableViewColumn::setVisible(bool visible) -> void { gtk_tree_view_column_set_visible(gtkColumn, visible); } auto pTableViewColumn::setWidth(s32 width) -> void { if(auto parent = _parent()) { parent->resizeColumns(); } } auto pTableViewColumn::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto self = parent->self()) return *self; } return {}; } } #endif ares-126/hiro/gtk/widget/table-view-column.hpp000066400000000000000000000022131415063341600213730ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewColumn : pObject { Declare(TableViewColumn, Object) auto setActive() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setExpandable(bool expandable) -> void; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setHorizontalAlignment(double) -> void {} auto setIcon(const image& icon) -> void; auto setResizable(bool resizable) -> void; auto setSorting(Sort sorting) -> void; auto setText(const string& text) -> void; auto setVerticalAlignment(double) -> void {} auto setVisible(bool visible) -> void override; auto setWidth(s32 width) -> void; auto _parent() -> maybe; GtkTreeViewColumn* gtkColumn = nullptr; GtkWidget* gtkHeader = nullptr; GtkWidget* gtkHeaderIcon = nullptr; GtkWidget* gtkHeaderText = nullptr; GtkWidget* gtkHeaderSort = nullptr; GtkCellRenderer* gtkCellToggle = nullptr; GtkCellRenderer* gtkCellIcon = nullptr; GtkCellRenderer* gtkCellText = nullptr; }; } #endif ares-126/hiro/gtk/widget/table-view-item.cpp000066400000000000000000000037031415063341600210340ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewItem::construct() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); gtk_list_store_append(parent->gtkListStore, >kIter); _setState(); } } auto pTableViewItem::destruct() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); gtk_list_store_remove(parent->gtkListStore, >kIter); parent->_updateSelected(); } } auto pTableViewItem::append(sTableViewCell cell) -> void { } auto pTableViewItem::remove(sTableViewCell cell) -> void { } auto pTableViewItem::setAlignment(Alignment alignment) -> void { } auto pTableViewItem::setBackgroundColor(Color color) -> void { } auto pTableViewItem::setFocused() -> void { if(auto parent = _parent()) { //calling setSelected() and then setFocused() right after sometimes fails to set focus Application::processEvents(); auto lock = parent->acquire(); GtkTreePath* path = gtk_tree_path_new_from_string(string{self().offset()}); gtk_tree_view_set_cursor(parent->gtkTreeView, path, nullptr, false); gtk_tree_view_scroll_to_cell(parent->gtkTreeView, path, nullptr, true, 0.5, 0.0); gtk_tree_path_free(path); } } auto pTableViewItem::setForegroundColor(Color color) -> void { } auto pTableViewItem::setSelected(bool selected) -> void { _setState(); } auto pTableViewItem::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto self = parent->self()) return *self; } return nothing; } auto pTableViewItem::_setState() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); if(state().selected) { gtk_tree_selection_select_iter(parent->gtkTreeSelection, >kIter); } else { gtk_tree_selection_unselect_iter(parent->gtkTreeSelection, >kIter); } parent->_updateSelected(); for(auto& cell : state().cells) { if(auto self = cell->self()) self->_setState(); } } } } #endif ares-126/hiro/gtk/widget/table-view-item.hpp000066400000000000000000000010311415063341600210310ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewItem : pObject { Declare(TableViewItem, Object) auto append(sTableViewCell cell) -> void; auto remove(sTableViewCell cell) -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setSelected(bool selected) -> void; auto _parent() -> maybe; auto _setState() -> void; GtkTreeIter gtkIter; }; } #endif ares-126/hiro/gtk/widget/table-view.cpp000066400000000000000000000504761415063341600201110ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { static auto TableView_activate(GtkTreeView*, GtkTreePath* gtkRow, GtkTreeViewColumn* gtkColumn, pTableView* p) -> void { return p->_doActivate(gtkRow, gtkColumn); } static auto TableView_buttonEvent(GtkTreeView* treeView, GdkEventButton* event, pTableView* p) -> s32 { return p->_doEvent(event); } static auto TableView_change(GtkTreeSelection*, pTableView* p) -> void { return p->_doChange(); } static auto TableView_edit(GtkCellRendererText* renderer, const char* path, const char* text, pTableView* p) -> void { return p->_doEdit(renderer, path, text); } static auto TableView_headerActivate(GtkTreeViewColumn* column, pTableView* p) -> void { return p->_doHeaderActivate(column); } static auto TableView_keyPressEvent(GtkTreeView* treeView, GdkEventKey* event, pTableView* p) -> bool { return p->_doKeyPress(event); } static auto TableView_mouseMoveEvent(GtkWidget*, GdkEvent*, pTableView* p) -> s32 { return p->_doMouseMove(); } static auto TableView_popup(GtkTreeView*, pTableView* p) -> void { return p->_doContext(); } static auto TableView_dataFunc(GtkTreeViewColumn* column, GtkCellRenderer* renderer, GtkTreeModel* model, GtkTreeIter* iter, pTableView* p) -> void { return p->_doDataFunc(column, renderer, iter); } static auto TableView_toggle(GtkCellRendererToggle* toggle, const char* path, pTableView* p) -> void { return p->_doToggle(toggle, path); } static auto TableView_realize(GtkTreeView*, pTableView* p) -> void { //the initial geometry for column sizing is most likely wrong at this point: //having to call processEvents() twice is very heavy-handed, but necessary here. for(u32 repeat : range(2)) { Application::processEvents(); p->resizeColumns(); } } auto pTableView::construct() -> void { gtkWidget = gtk_scrolled_window_new(0, 0); gtkScrolledWindow = GTK_SCROLLED_WINDOW(gtkWidget); gtk_scrolled_window_set_policy(gtkScrolledWindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(gtkScrolledWindow, GTK_SHADOW_ETCHED_IN); gtkWidgetChild = gtk_tree_view_new(); gtkTreeView = GTK_TREE_VIEW(gtkWidgetChild); gtkTreeSelection = gtk_tree_view_get_selection(gtkTreeView); gtk_container_add(GTK_CONTAINER(gtkWidget), gtkWidgetChild); gtk_tree_view_set_rubber_banding(gtkTreeView, true); gtk_widget_show(gtkWidgetChild); setBackgroundColor(state().backgroundColor); setBatchable(state().batchable); setBordered(state().bordered); setFont(self().font(true)); setForegroundColor(state().foregroundColor); setHeadered(state().headered); setSortable(state().sortable); g_signal_connect(G_OBJECT(gtkTreeView), "button-press-event", G_CALLBACK(TableView_buttonEvent), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeView), "button-release-event", G_CALLBACK(TableView_buttonEvent), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeView), "key-press-event", G_CALLBACK(TableView_keyPressEvent), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeView), "motion-notify-event", G_CALLBACK(TableView_mouseMoveEvent), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeView), "popup-menu", G_CALLBACK(TableView_popup), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeView), "realize", G_CALLBACK(TableView_realize), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeView), "row-activated", G_CALLBACK(TableView_activate), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeSelection), "changed", G_CALLBACK(TableView_change), (gpointer)this); //searching doesn't currently work anyway ... gtkEntry = (GtkEntry*)gtk_entry_new(); gtk_tree_view_set_search_entry(gtkTreeView, gtkEntry); pWidget::construct(); } auto pTableView::destruct() -> void { gtk_widget_destroy(GTK_WIDGET(gtkEntry)); gtk_widget_destroy(gtkWidgetChild); gtk_widget_destroy(gtkWidget); } auto pTableView::append(sTableViewColumn column) -> void { _updateRulesHint(); } auto pTableView::append(sTableViewItem item) -> void { } auto pTableView::focused() const -> bool { return gtk_widget_has_focus(GTK_WIDGET(gtkTreeView)); } auto pTableView::remove(sTableViewColumn column) -> void { _updateRulesHint(); } auto pTableView::remove(sTableViewItem item) -> void { } auto pTableView::resizeColumns() -> void { auto lock = acquire(); vector widths; s32 minimumWidth = 0; s32 expandable = 0; for(u32 position : range(self().columnCount())) { s32 width = _width(position); widths.append(width); minimumWidth += width; if(self().column(position).expandable()) expandable++; } s32 maximumWidth = self().geometry().width() - 6; if(auto scrollBar = gtk_scrolled_window_get_vscrollbar(gtkScrolledWindow)) { GtkAllocation allocation; gtk_widget_get_allocation(scrollBar, &allocation); if(gtk_widget_get_visible(scrollBar)) maximumWidth -= allocation.width; } s32 expandWidth = 0; if(expandable && maximumWidth > minimumWidth) { expandWidth = (maximumWidth - minimumWidth) / expandable; } for(u32 position : range(self().columnCount())) { if(auto column = self().column(position)->self()) { s32 width = widths[position]; if(column->state().expandable) width += expandWidth; gtk_tree_view_column_set_fixed_width(column->gtkColumn, width); } } } auto pTableView::setAlignment(Alignment alignment) -> void { _updateRulesHint(); } auto pTableView::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(gtkWidgetChild, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); _updateRulesHint(); } auto pTableView::setBatchable(bool batchable) -> void { gtk_tree_selection_set_mode(gtkTreeSelection, batchable ? GTK_SELECTION_MULTIPLE : GTK_SELECTION_SINGLE); } auto pTableView::setBordered(bool bordered) -> void { gtk_tree_view_set_grid_lines(gtkTreeView, bordered ? GTK_TREE_VIEW_GRID_LINES_BOTH : GTK_TREE_VIEW_GRID_LINES_NONE); } auto pTableView::setFocused() -> void { lock(); //gtk_widget_grab_focus() will select the first item if nothing is currently selected //this behavior is undesirable. detect selection state first, and restore if required if(!state().batchable) { //gtk_tree_selection_get_selected() will throw a critical exception in batchable mode bool selected = gtk_tree_selection_get_selected(gtkTreeSelection, nullptr, nullptr); gtk_widget_grab_focus(gtkWidgetChild); if(!selected) gtk_tree_selection_unselect_all(gtkTreeSelection); } else { gtk_widget_grab_focus(gtkWidgetChild); } unlock(); } auto pTableView::setFont(const Font& font) -> void { } auto pTableView::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(gtkWidgetChild, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); _updateRulesHint(); } auto pTableView::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); for(auto& column : state().columns) { if(column->expandable()) { Application::processEvents(); return resizeColumns(); } } } auto pTableView::setHeadered(bool headered) -> void { gtk_tree_view_set_headers_visible(gtkTreeView, headered); } auto pTableView::setSortable(bool sortable) -> void { for(auto& column : state().columns) { if(auto self = column->self()) gtk_tree_view_column_set_clickable(self->gtkColumn, sortable); } } auto pTableView::_cellWidth(u32 _row, u32 _column) -> u32 { u32 width = 8; if(auto item = self().item(_row)) { if(auto cell = item->cell(_column)) { if(cell->state.checkable) { width += 16 + (cell->state.icon || cell->state.text ? 4 : 0); } if(auto& icon = cell->state.icon) { width += icon.width() + 2; } if(auto& text = cell->state.text) { width += pFont::size(cell->font(true), text).width(); } } } return width; } auto pTableView::_columnWidth(u32 _column) -> u32 { u32 width = 6; if(auto column = self().column(_column)) { if(auto& icon = column->state.icon) { width += icon.width() + 2; } if(auto& text = column->state.text) { width += pFont::size(column->font(true), text).width() + 8; } if(column->state.sorting != Sort::None) { width += 20; } } return width; } auto pTableView::_createModel() -> void { auto lock = acquire(); gtk_tree_view_set_model(gtkTreeView, nullptr); gtkListStore = nullptr; gtkTreeModel = nullptr; vector types; for(auto& column : state().columns) { if(auto self = column->self()) { if(!self->gtkColumn) continue; //may not have been created yet; or recently destroyed types.append(G_TYPE_BOOLEAN); types.append(GDK_TYPE_PIXBUF); types.append(G_TYPE_STRING); } } if(!types) return; //no columns available gtkListStore = gtk_list_store_newv(types.size(), types.data()); gtkTreeModel = GTK_TREE_MODEL(gtkListStore); gtk_tree_view_set_model(gtkTreeView, gtkTreeModel); } auto pTableView::_doActivate(GtkTreePath* gtkRow, GtkTreeViewColumn* gtkColumn) -> void { if(locked()) return; if(gtkRow && gtkColumn) { auto path = gtk_tree_path_to_string(gtkRow); auto item = self().item(toNatural(path)); auto cell = item.cell(0); for(auto& column : state().columns) { if(auto self = column->self()) { if(self->gtkColumn == gtkColumn) { cell = item.cell(column->offset()); break; } } } g_free(path); self().doActivate(cell); } else { self().doActivate({}); } } auto pTableView::_doChange() -> void { if(!locked()) _updateSelected(); } auto pTableView::_doContext() -> void { if(locked()) return; if(auto item = self().selected()) { //keyboard context menu cannot report the currently selected cell; so return first cell rather than nothing self().doContext(item.cell(0)); } else { self().doContext(TableViewCell()); } } auto pTableView::_doDataFunc(GtkTreeViewColumn* gtkColumn, GtkCellRenderer* renderer, GtkTreeIter* iter) -> void { auto path = gtk_tree_model_get_string_from_iter(gtkTreeModel, iter); auto row = toNatural(path); g_free(path); for(auto& column : state().columns) { if(auto p = column->self()) { if(renderer != GTK_CELL_RENDERER(p->gtkCellToggle) && renderer != GTK_CELL_RENDERER(p->gtkCellIcon) && renderer != GTK_CELL_RENDERER(p->gtkCellText) ) continue; if(auto item = self().item(row)) { if(auto cell = item->cell(column->offset())) { if(renderer == GTK_CELL_RENDERER(p->gtkCellToggle)) { gtk_cell_renderer_set_visible(renderer, cell->state.checkable); } else if(renderer == GTK_CELL_RENDERER(p->gtkCellText)) { auto alignment = cell->alignment(true); if(!alignment) alignment = {0.0, 0.5}; //note: below line will center column header text; but causes strange glitches //(specifically, windows fail to respond to the close button ... some kind of heap corruption inside GTK+) //gtk_tree_view_column_set_alignment(gtkColumn, alignment.horizontal()); gtk_cell_renderer_set_alignment(renderer, alignment.horizontal(), alignment.vertical()); auto pangoAlignment = PANGO_ALIGN_CENTER; if(alignment.horizontal() < 0.333) pangoAlignment = PANGO_ALIGN_LEFT; if(alignment.horizontal() > 0.666) pangoAlignment = PANGO_ALIGN_RIGHT; g_object_set(G_OBJECT(renderer), "alignment", pangoAlignment, nullptr); auto font = pFont::create(cell->font(true)); g_object_set(G_OBJECT(renderer), "font-desc", font, nullptr); pango_font_description_free(font); if(auto color = cell->foregroundColor(true)) { auto gdkColor = CreateColor(color); if(settings.theme.widgetColors) g_object_set(G_OBJECT(renderer), "foreground-gdk", &gdkColor, nullptr); } else { g_object_set(G_OBJECT(renderer), "foreground-set", false, nullptr); } } if(auto color = cell->backgroundColor(true)) { auto gdkColor = CreateColor(color); if(settings.theme.widgetColors) g_object_set(G_OBJECT(renderer), "cell-background-gdk", &gdkColor, nullptr); } else { g_object_set(G_OBJECT(renderer), "cell-background-set", false, nullptr); } } } } } } auto pTableView::_doEdit(GtkCellRendererText* gtkCellRendererText, const char* path, const char* text) -> void { for(auto& column : state().columns) { if(auto delegate = column->self()) { if(gtkCellRendererText == GTK_CELL_RENDERER_TEXT(delegate->gtkCellText)) { auto row = toNatural(path); if(auto item = self().item(row)) { if(auto cell = item->cell(column->offset())) { if(string{text} != cell->state.text) { cell->setText(text); if(!locked()) self().doEdit(cell); } return; } } } } } } auto pTableView::_doEvent(GdkEventButton* gdkEvent) -> s32 { GtkTreePath* gtkRow = nullptr; GtkTreeViewColumn* gtkColumn = nullptr; gtk_tree_view_get_path_at_pos(gtkTreeView, gdkEvent->x, gdkEvent->y, >kRow, >kColumn, nullptr, nullptr); if(gdkEvent->type == GDK_BUTTON_PRESS) { //detect when the empty space of the GtkTreeView is clicked; and clear the selection if(!gtkRow) { //the first time a GtkTreeView widget is clicked, even if the empty space of the widget is clicked, //a "changed" signal will be sent after the "button-press-event", to activate the first item in the tree //this is undesirable, so set a flag to undo the next selection change during the "changed" signal suppressChange = true; if(gtk_tree_selection_count_selected_rows(gtkTreeSelection) > 0) { gtk_tree_selection_unselect_all(gtkTreeSelection); for(auto& item : state().items) item->setSelected(false); self().doChange(); return true; } } if(gdkEvent->button == 3) { //multi-selection mode: //if multiple items are selected, and one item is right-clicked on (for a context menu), GTK clears selection on all other items //block this behavior so that onContext() handler can work on more than one selected item at a time if(gtkRow && gtk_tree_selection_path_is_selected(gtkTreeSelection, gtkRow)) return true; } } if(gdkEvent->type == GDK_BUTTON_RELEASE) { suppressChange = false; if(gdkEvent->button == 3) { //handle action during right-click release; as button-press-event is sent prior to selection update //without this, the callback handler would see the previous selection state instead if(gtkRow && gtkColumn) { auto path = gtk_tree_path_to_string(gtkRow); auto item = self().item(toNatural(path)); auto cell = item.cell(0); for(auto& column : state().columns) { if(auto self = column->self()) { if(self->gtkColumn == gtkColumn) { cell = item.cell(column->offset()); break; } } } g_free(path); self().doContext(cell); } else { self().doContext(TableViewCell()); } return false; } } return false; } auto pTableView::_doHeaderActivate(GtkTreeViewColumn* gtkTreeViewColumn) -> void { for(auto& column : state().columns) { if(auto delegate = column->self()) { if(gtkTreeViewColumn == delegate->gtkColumn) { if(!locked()) self().doSort(column); return; } } } } auto pTableView::_doKeyPress(GdkEventKey* event) -> bool { //TODO: GCC 8.2.0 on FreeBSD 12.0 (amd64) seems to miscompile this function periodically to always return true. return false; if(state().batchable && event->type == GDK_KEY_PRESS) { //when using keyboard to activate tree view items in GTK_SELECTION_MULTIPLE mode, GTK will deselect all but the last item //this code detects said case, blocks the key from being propagated, and calls the activate callback directly //the result is that the enter key can be used to activate multiple selected items at a time //there are four ways to activate items via the keyboard in GTK, so we have to detect all of them here u32 modifiers = event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_SUPER_MASK); //ignore other modifiers (eg mouse buttons) if((event->keyval == GDK_KEY_Return && !modifiers) || (event->keyval == GDK_KEY_KP_Enter && !modifiers) || (event->keyval == GDK_KEY_space && !modifiers) || (event->keyval == GDK_KEY_space && modifiers == GDK_SHIFT_MASK) ) { _doActivate(); return true; //block GTK from handling this keypress } } return false; //allow GTK to handle this keypress } //GtkTreeView::cursor-changed and GtkTreeSelection::changed do not send signals for changes during rubber-banding selection //so here we capture motion-notify-event, and if the selections have changed, invoke TableView::onChange auto pTableView::_doMouseMove() -> s32 { if(gtk_tree_view_is_rubber_banding_active(gtkTreeView)) { if(!locked()) _updateSelected(); } return false; } auto pTableView::_doToggle(GtkCellRendererToggle* gtkCellRendererToggle, const char* path) -> void { for(auto& column : state().columns) { if(auto delegate = column->self()) { if(gtkCellRendererToggle == GTK_CELL_RENDERER_TOGGLE(delegate->gtkCellToggle)) { auto row = toNatural(path); if(auto item = self().item(row)) { if(auto cell = item->cell(column->offset())) { //GTK+ sends the "toggled" signal *before* changing the currently selected item //if TableView::doToggle calls TableView::selected(), it will retrieve the old state instead //gtk_tree_selection_get_selected_rows() will also report incorrectly, so _updateSelected() cannot be used here //note: this hack here also works correctly in batchable (multi-selection) mode, so it seems safe in practice for(auto& item : state().items) item->state.selected = item->offset() == row; cell->setChecked(!cell->checked()); if(!locked()) self().doToggle(cell); return; } } } } } } //the rules hint draws each row with alternating background colors //this isn't currently exposed as a hiro API call, so try and determine if we should apply it here //basically, if there's two or more columns and no custom colors applied, then we do so auto pTableView::_updateRulesHint() -> void { bool rules = false; //true if(state().backgroundColor) rules = false; if(state().foregroundColor) rules = false; if(state().columns.size() <= 1) rules = false; gtk_tree_view_set_rules_hint(gtkTreeView, rules); } //compare currently selected items to previously selected items //if different, invoke the onChange callback unless locked, and cache current selection //this prevents firing an onChange event when the actual selection has not changed //this is particularly important for the motion-notify-event binding auto pTableView::_updateSelected() -> void { if(suppressChange) { suppressChange = false; gtk_tree_selection_unselect_all(gtkTreeSelection); return; } vector selected; GList* list = gtk_tree_selection_get_selected_rows(gtkTreeSelection, >kTreeModel); GList* p = list; while(p) { GtkTreeIter iter; if(gtk_tree_model_get_iter(gtkTreeModel, &iter, (GtkTreePath*)p->data)) { char* pathname = gtk_tree_model_get_string_from_iter(gtkTreeModel, &iter); u32 selection = toNatural(pathname); g_free(pathname); selected.append(selection); } p = p->next; } g_list_foreach(list, (GFunc)gtk_tree_path_free, nullptr); g_list_free(list); bool identical = selected.size() == currentSelection.size(); if(identical) { for(auto n : range(selected.size())) { if(selected[n] != currentSelection[n]) { identical = false; break; } } } if(identical) return; currentSelection = selected; for(auto& item : state().items) item->state.selected = false; for(auto& position : currentSelection) { if(position >= self().itemCount()) continue; self().item(position)->state.selected = true; } if(!locked()) self().doChange(); } auto pTableView::_width(u32 column) -> u32 { if(auto width = self().column(column).width()) return width; u32 width = 1; if(!self().column(column).visible()) return width; if(self().headered()) width = max(width, _columnWidth(column)); for(auto row : range(self().itemCount())) { width = max(width, _cellWidth(row, column)); } return width; } } #endif ares-126/hiro/gtk/widget/table-view.hpp000066400000000000000000000037621415063341600201120ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableView : pWidget { Declare(TableView, Widget) auto append(sTableViewColumn column) -> void; auto append(sTableViewItem item) -> void; auto focused() const -> bool override; auto remove(sTableViewColumn column) -> void; auto remove(sTableViewItem item) -> void; auto resizeColumns() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setBatchable(bool batchable) -> void; auto setBordered(bool bordered) -> void; auto setFocused() -> void override; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; auto setHeadered(bool headered) -> void; auto setSortable(bool sortable) -> void; auto _cellWidth(u32 row, u32 column) -> u32; auto _columnWidth(u32 column) -> u32; auto _createModel() -> void; auto _doActivate(GtkTreePath* = nullptr, GtkTreeViewColumn* = nullptr) -> void; auto _doChange() -> void; auto _doContext() -> void; auto _doDataFunc(GtkTreeViewColumn* column, GtkCellRenderer* renderer, GtkTreeIter* iter) -> void; auto _doEdit(GtkCellRendererText* gtkCellRendererText, const char* path, const char* text) -> void; auto _doEvent(GdkEventButton* event) -> s32; auto _doHeaderActivate(GtkTreeViewColumn* column) -> void; auto _doKeyPress(GdkEventKey* event) -> bool; auto _doMouseMove() -> s32; auto _doToggle(GtkCellRendererToggle* gtkCellRendererToggle, const char* path) -> void; auto _updateRulesHint() -> void; auto _updateSelected() -> void; auto _width(u32 column) -> u32; GtkScrolledWindow* gtkScrolledWindow = nullptr; GtkWidget* gtkWidgetChild = nullptr; GtkTreeView* gtkTreeView = nullptr; GtkTreeSelection* gtkTreeSelection = nullptr; GtkListStore* gtkListStore = nullptr; GtkTreeModel* gtkTreeModel = nullptr; GtkEntry* gtkEntry = nullptr; vector currentSelection; bool suppressChange = false; }; } #endif ares-126/hiro/gtk/widget/text-edit.cpp000066400000000000000000000102361415063341600177470ustar00rootroot00000000000000#if defined(Hiro_TextEdit) namespace hiro { static auto TextEdit_change(GtkTextBuffer* textBuffer, pTextEdit* p) -> void { if(!p->locked()) p->self().doChange(); } static auto TextEdit_move(GObject* object, GParamSpec* spec, pTextEdit* p) -> void { p->state().textCursor = p->textCursor(); if(!p->locked()) p->self().doMove(); } auto pTextEdit::construct() -> void { gtkWidget = gtk_scrolled_window_new(0, 0); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkWidget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(gtkWidget), GTK_SHADOW_ETCHED_IN); subWidget = gtk_text_view_new(); gtk_widget_show(subWidget); gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(subWidget), GTK_WRAP_WORD_CHAR); gtk_container_add(GTK_CONTAINER(gtkWidget), subWidget); textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(subWidget)); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setForegroundColor(state().foregroundColor); setText(state().text); setTextCursor(state().textCursor); setWordWrap(state().wordWrap); g_signal_connect(G_OBJECT(textBuffer), "changed", G_CALLBACK(TextEdit_change), (gpointer)this); g_signal_connect(G_OBJECT(textBuffer), "notify::cursor-position", G_CALLBACK(TextEdit_move), (gpointer)this); pWidget::construct(); } auto pTextEdit::destruct() -> void { state().text = text(); gtk_widget_destroy(subWidget); gtk_widget_destroy(gtkWidget); } auto pTextEdit::focused() const -> bool { return gtk_widget_has_focus(subWidget); } auto pTextEdit::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_base(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pTextEdit::setEditable(bool editable) -> void { gtk_text_view_set_editable(GTK_TEXT_VIEW(subWidget), editable); } auto pTextEdit::setFocused() -> void { gtk_widget_grab_focus(subWidget); } auto pTextEdit::setForegroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_text(subWidget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pTextEdit::setText(const string& text) -> void { lock(); textBuffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(subWidget)); gtk_text_buffer_set_text(textBuffer, text, -1); unlock(); } auto pTextEdit::setTextCursor(TextCursor cursor) -> void { lock(); GtkTextIter offset, length; gtk_text_buffer_get_end_iter(textBuffer, &offset); gtk_text_buffer_get_end_iter(textBuffer, &length); s32 end = gtk_text_iter_get_offset(&offset); gtk_text_iter_set_offset(&offset, max(0, min(end, cursor.offset()))); gtk_text_iter_set_offset(&length, max(0, min(end, cursor.offset() + cursor.length()))); gtk_text_buffer_select_range(textBuffer, &offset, &length); auto mark = gtk_text_buffer_get_mark(textBuffer, "insert"); gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(subWidget), mark); unlock(); } auto pTextEdit::setWordWrap(bool wordWrap) -> void { gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(subWidget), wordWrap ? GTK_WRAP_WORD_CHAR : GTK_WRAP_NONE); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(gtkWidget), wordWrap ? GTK_POLICY_NEVER : GTK_POLICY_ALWAYS, GTK_POLICY_ALWAYS); } auto pTextEdit::text() const -> string { GtkTextIter start, end; gtk_text_buffer_get_start_iter(textBuffer, &start); gtk_text_buffer_get_end_iter(textBuffer, &end); char* temp = gtk_text_buffer_get_text(textBuffer, &start, &end, true); string text = temp; g_free(temp); return text; } auto pTextEdit::textCursor() const -> TextCursor { TextCursor cursor; s32 offset = 0; g_object_get(G_OBJECT(textBuffer), "cursor-position", &offset, nullptr); cursor.setOffset(offset); GtkTextIter start, end; if(gtk_text_buffer_get_selection_bounds(textBuffer, &start, &end)) { //if selecting text from left to right, the cursor may be ahead of the selection start ... //since hiro combines selection bounds (end-start) into length, move the offset to the start s32 origin = gtk_text_iter_get_offset(&start); cursor.setOffset(origin); s32 length = gtk_text_iter_get_offset(&end) - origin; cursor.setLength(length); } return cursor; } } #endif ares-126/hiro/gtk/widget/text-edit.hpp000066400000000000000000000011561415063341600177550ustar00rootroot00000000000000#if defined(Hiro_TextEdit) namespace hiro { struct pTextEdit : pWidget { Declare(TextEdit, Widget) auto focused() const -> bool override; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; auto setTextCursor(TextCursor textCursor) -> void; auto setWordWrap(bool wordWrap) -> void; auto text() const -> string; auto textCursor() const -> TextCursor; GtkWidget* subWidget = nullptr; GtkTextBuffer* textBuffer = nullptr; }; } #endif ares-126/hiro/gtk/widget/tree-view-item.cpp000066400000000000000000000105671415063341600207120ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeViewItem::construct() -> void { if(auto parentWidget = _parentWidget()) { if(auto parentItem = _parentItem()) { gtk_tree_store_append(parentWidget->gtkTreeStore, >kIter, &parentItem->gtkIter); } else { gtk_tree_store_append(parentWidget->gtkTreeStore, >kIter, nullptr); } setChecked(state().checked); setIcon(state().icon); setText(state().text); } } auto pTreeViewItem::destruct() -> void { if(auto parent = _parentWidget()) { gtk_tree_store_remove(parent->gtkTreeStore, >kIter); } } // auto pTreeViewItem::append(sTreeViewItem item) -> void { } auto pTreeViewItem::remove(sTreeViewItem item) -> void { } auto pTreeViewItem::setBackgroundColor(Color color) -> void { } auto pTreeViewItem::setCheckable(bool checkable) -> void { _updateWidth(); } auto pTreeViewItem::setChecked(bool checked) -> void { if(auto parentWidget = _parentWidget()) { gtk_tree_store_set(parentWidget->gtkTreeStore, >kIter, 0, checked, -1); } } auto pTreeViewItem::setExpanded(bool expanded) -> void { if(auto parentWidget = _parentWidget()) { auto path = gtk_tree_model_get_path(parentWidget->gtkTreeModel, >kIter); if(expanded) { gtk_tree_view_expand_row(parentWidget->gtkTreeView, path, false); //if you collapse a parent node, GTK collapses all child nodes //this isn't very desirable, so restore any child expansions recursively here for(auto& item : state().items) { item->setExpanded(item->expanded()); } } else { gtk_tree_view_collapse_row(parentWidget->gtkTreeView, path); } gtk_tree_path_free(path); } } auto pTreeViewItem::setFocused() -> void { if(auto parentWidget = _parentWidget()) { GtkTreePath* path = gtk_tree_path_new_from_string(self().path().transform("/", ":")); gtk_tree_view_set_cursor(parentWidget->gtkTreeView, path, nullptr, false); gtk_tree_view_scroll_to_cell(parentWidget->gtkTreeView, path, nullptr, true, 0.5, 0.0); gtk_tree_path_free(path); } } auto pTreeViewItem::setForegroundColor(Color color) -> void { } auto pTreeViewItem::setIcon(const image& icon) -> void { if(auto parentWidget = _parentWidget()) { if(icon) { auto pixbuf = CreatePixbuf(icon); gtk_tree_store_set(parentWidget->gtkTreeStore, >kIter, 1, pixbuf, -1); } else { gtk_tree_store_set(parentWidget->gtkTreeStore, >kIter, 1, nullptr, -1); } } _updateWidth(); } auto pTreeViewItem::setSelected() -> void { if(auto parentWidget = _parentWidget()) { parentWidget->lock(); //in order to select an item, it must first be visible auto gtkPath = gtk_tree_model_get_path(parentWidget->gtkTreeModel, >kIter); gtk_tree_view_expand_to_path(parentWidget->gtkTreeView, gtkPath); gtk_tree_path_free(gtkPath); gtk_tree_selection_select_iter(parentWidget->gtkTreeSelection, >kIter); parentWidget->unlock(); } } auto pTreeViewItem::setText(const string& text) -> void { if(auto parentWidget = _parentWidget()) { gtk_tree_store_set(parentWidget->gtkTreeStore, >kIter, 2, (const char*)text, -1); } _updateWidth(); } // //recursive function to find the minimum (pre-computed / cached) width of a TreeViewItem tree auto pTreeViewItem::_minimumWidth(u32 depth) -> u32 { u32 width = TreeViewIndentation * depth + _width; for(auto& item : state().items) { if(auto self = item->self()) { width = max(width, self->_minimumWidth(depth + 1)); } } return width; } auto pTreeViewItem::_parentItem() -> pTreeViewItem* { if(auto parentItem = self().parentTreeViewItem()) return parentItem->self(); return nullptr; } auto pTreeViewItem::_parentWidget() -> pTreeView* { if(auto parentWidget = self().parentTreeView(true)) return parentWidget->self(); return nullptr; } //this is called any time a TreeViewItem's checkability, icon, or text is updated //in other words, whenever the width of the item might have changed //it may change the requirement of the TreeView needing a scrollbar, so notify the TreeView as well auto pTreeViewItem::_updateWidth() -> void { _width = 4; if(state().checkable) _width += 16 + (state().icon || state().text ? 4 : 0); if(auto& icon = state().icon) _width += icon.width() + 2; if(auto& text = state().text) _width += pFont::size(self().font(true), text).width(); if(auto parent = _parentWidget()) parent->_updateScrollBars(); } } #endif ares-126/hiro/gtk/widget/tree-view-item.hpp000066400000000000000000000014241415063341600207070ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeViewItem : pObject { Declare(TreeViewItem, Object) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setExpanded(bool expanded) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _minimumWidth(u32 depth = 0) -> u32; auto _parentItem() -> pTreeViewItem*; auto _parentWidget() -> pTreeView*; auto _updateWidth() -> void; GtkTreeIter gtkIter; u32 _width = 0; }; } #endif ares-126/hiro/gtk/widget/tree-view.cpp000066400000000000000000000313211415063341600177450ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { static const u32 TreeViewIndentation = 20; //gtk_tree_view_collapse_all(gtkTreeView); //gtk_tree_view_expand_all(gtkTreeView); static auto TreeView_activate(GtkTreeView*, GtkTreePath* gtkPath, GtkTreeViewColumn*, pTreeView* p) -> void { p->_activatePath(gtkPath); } static auto TreeView_buttonEvent(GtkTreeView*, GdkEventButton* gdkEvent, pTreeView* p) -> s32 { return p->_buttonEvent(gdkEvent); } static auto TreeView_change(GtkTreeSelection*, pTreeView* p) -> void { p->_updateSelected(); } static auto TreeView_context(GtkTreeView*, pTreeView* p) -> void { p->self().doContext(); } static auto TreeView_dataFunc(GtkTreeViewColumn* column, GtkCellRenderer* renderer, GtkTreeModel* model, GtkTreeIter* iter, pTreeView* p) -> void { return p->_doDataFunc(column, renderer, iter); } static auto TreeView_keyPress(GtkWidget*, GdkEventKey*, pTreeView* p) -> s32 { p->suppressActivate = false; return false; } static auto TreeView_toggle(GtkCellRendererToggle*, char* path, pTreeView* p) -> void { p->_togglePath(path); } auto pTreeView::construct() -> void { gtkWidget = gtk_scrolled_window_new(0, 0); gtkScrolledWindow = GTK_SCROLLED_WINDOW(gtkWidget); gtk_scrolled_window_set_policy(gtkScrolledWindow, GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_scrolled_window_set_shadow_type(gtkScrolledWindow, GTK_SHADOW_ETCHED_IN); gtkTreeStore = gtk_tree_store_new(3, G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF, G_TYPE_STRING); gtkTreeModel = GTK_TREE_MODEL(gtkTreeStore); gtkWidgetChild = gtk_tree_view_new_with_model(gtkTreeModel); gtkTreeView = GTK_TREE_VIEW(gtkWidgetChild); gtkTreeSelection = gtk_tree_view_get_selection(gtkTreeView); gtk_tree_view_set_headers_visible(gtkTreeView, false); gtk_tree_view_set_show_expanders(gtkTreeView, false); gtk_tree_view_set_level_indentation(gtkTreeView, TreeViewIndentation); gtk_container_add(GTK_CONTAINER(gtkWidget), gtkWidgetChild); gtk_widget_show(gtkWidgetChild); gtkTreeViewColumn = gtk_tree_view_column_new(); gtkCellToggle = gtk_cell_renderer_toggle_new(); gtk_tree_view_column_pack_start(gtkTreeViewColumn, gtkCellToggle, false); gtk_tree_view_column_set_attributes(gtkTreeViewColumn, gtkCellToggle, "active", 0, nullptr); gtk_tree_view_column_set_cell_data_func(gtkTreeViewColumn, GTK_CELL_RENDERER(gtkCellToggle), (GtkTreeCellDataFunc)TreeView_dataFunc, (gpointer)this, nullptr); gtkCellPixbuf = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_pack_start(gtkTreeViewColumn, gtkCellPixbuf, false); gtk_tree_view_column_set_attributes(gtkTreeViewColumn, gtkCellPixbuf, "pixbuf", 1, nullptr); gtk_tree_view_column_set_cell_data_func(gtkTreeViewColumn, GTK_CELL_RENDERER(gtkCellPixbuf), (GtkTreeCellDataFunc)TreeView_dataFunc, (gpointer)this, nullptr); gtkCellText = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start(gtkTreeViewColumn, gtkCellText, true); gtk_tree_view_column_set_attributes(gtkTreeViewColumn, gtkCellText, "text", 2, nullptr); gtk_tree_view_column_set_cell_data_func(gtkTreeViewColumn, GTK_CELL_RENDERER(gtkCellText), (GtkTreeCellDataFunc)TreeView_dataFunc, (gpointer)this, nullptr); gtk_tree_view_append_column(gtkTreeView, gtkTreeViewColumn); gtk_tree_view_set_search_column(gtkTreeView, 2); setActivation(state().activation); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); g_signal_connect(G_OBJECT(gtkWidgetChild), "button-press-event", G_CALLBACK(TreeView_buttonEvent), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidgetChild), "button-release-event", G_CALLBACK(TreeView_buttonEvent), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidgetChild), "key-press-event", G_CALLBACK(TreeView_keyPress), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidgetChild), "popup-menu", G_CALLBACK(TreeView_context), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidgetChild), "row-activated", G_CALLBACK(TreeView_activate), (gpointer)this); g_signal_connect(G_OBJECT(gtkTreeSelection), "changed", G_CALLBACK(TreeView_change), (gpointer)this); g_signal_connect(G_OBJECT(gtkCellToggle), "toggled", G_CALLBACK(TreeView_toggle), (gpointer)this); //Ctrl+F triggers a small popup window at the bottom of the GtkTreeView, which clears the currently selected item(s) //this is undesirable for amethyst, which uses the active item to display a document to edit, and binds Ctrl+F to a document find function //for now, disable GtkTreeView's interactive search: longer term, more thought will need to go into if this is ever desirable or not //gtk_tree_view_set_enable_search(gtkTreeView, false) does not work //gtk_tree_view_set_search_column(gtkTreeView, -1) does not work gtkEntry = (GtkEntry*)gtk_entry_new(); gtk_tree_view_set_search_entry(gtkTreeView, gtkEntry); pWidget::construct(); } auto pTreeView::destruct() -> void { gtk_widget_destroy(GTK_WIDGET(gtkEntry)); gtk_widget_destroy(gtkWidgetChild); gtk_widget_destroy(gtkWidget); } // auto pTreeView::append(sTreeViewItem item) -> void { } auto pTreeView::remove(sTreeViewItem item) -> void { } auto pTreeView::setActivation(Mouse::Click activation) -> void { //handled by callbacks } auto pTreeView::setBackgroundColor(Color color) -> void { auto gdkColor = CreateColor(color); gtk_widget_modify_base(gtkWidgetChild, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pTreeView::setFocused() -> void { //gtk_widget_grab_focus() will select the first item if nothing is currently selected //this behavior is undesirable. detect selection state first, and restore if required lock(); bool selected = gtk_tree_selection_get_selected(gtkTreeSelection, nullptr, nullptr); gtk_widget_grab_focus(gtkWidgetChild); if(!selected) gtk_tree_selection_unselect_all(gtkTreeSelection); unlock(); } auto pTreeView::setForegroundColor(Color color) -> void { auto gdkColor = CreateColor(color); gtk_widget_modify_text(gtkWidgetChild, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pTreeView::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); _updateScrollBars(); } // auto pTreeView::_activatePath(GtkTreePath* gtkPath) -> void { if(suppressActivate) { suppressActivate = false; return; } char* path = gtk_tree_path_to_string(gtkPath); if(auto item = self().item(string{path}.transform(":", "/"))) { if(!locked()) self().doActivate(); } g_free(path); } auto pTreeView::_buttonEvent(GdkEventButton* gdkEvent) -> s32 { if(gdkEvent->type == GDK_BUTTON_PRESS) { //detect when the empty space of the GtkTreeView is clicked; and clear the selection GtkTreePath* gtkPath = nullptr; gtk_tree_view_get_path_at_pos(gtkTreeView, gdkEvent->x, gdkEvent->y, >kPath, nullptr, nullptr, nullptr); if(!gtkPath) { //the first time a GtkTreeView widget is clicked, even if the empty space of the widget is clicked, //a "changed" signal will be sent after the "button-press-event", to activate the first item in the tree //this is undesirable, so set a flag to undo the next selection change during the "changed" signal suppressChange = true; if(gtk_tree_selection_count_selected_rows(gtkTreeSelection) > 0) { gtk_tree_selection_unselect_all(gtkTreeSelection); state().selectedPath.reset(); self().doChange(); return true; } } if(gdkEvent->button == 1) { //emulate activate-on-single-click, which is only available in GTK+ 3.8 and later if(gtkPath && self().activation() == Mouse::Click::Single) { //selectedPath must be updated for TreeView::doActivate() to act on the correct TreeViewItem. //as this will then cause "changed" to not see that the path has changed, we must handle that case here as well. char* path = gtk_tree_path_to_string(gtkPath); string selectedPath = string{path}.transform(":", "/"); g_free(path); if(state().selectedPath != selectedPath) { state().selectedPath = selectedPath; self().doChange(); } self().doActivate(); //"row-activated" is sent before "button-press-event" (GDK_2BUTTON_PRESS); //so stop a double-click from calling TreeView::doActivate() twice by setting a flag after single-clicks suppressActivate = true; //key presses will clear this flag to allow key-activations to work correctly } } if(gdkEvent->button == 3) { //multi-selection mode: (not implemented in TreeView yet ... but code is here anyway for future use) //if multiple items are selected, and one item is right-clicked on (for a context menu), GTK clears selection on all other items //block this behavior so that onContext() handler can work on more than one selected item at a time if(gtkPath && gtk_tree_selection_path_is_selected(gtkTreeSelection, gtkPath)) return true; } } if(gdkEvent->type == GDK_BUTTON_RELEASE) { suppressChange = false; if(gdkEvent->button == 3) { //handle action during right-click release; as button-press-event is sent prior to selection update //without this, the callback handler would see the previous selection state instead self().doContext(); return false; } } return false; } auto pTreeView::_doDataFunc(GtkTreeViewColumn* column, GtkCellRenderer* renderer, GtkTreeIter* iter) -> void { auto path = gtk_tree_model_get_string_from_iter(gtkTreeModel, iter); auto parts = string{path}.split(":"); g_free(path); auto item = self().item(parts.takeLeft().natural()); if(!item) return; while(parts) { item = item.item(parts.takeLeft().natural()); if(!item) return; } if(renderer == GTK_CELL_RENDERER(gtkCellToggle)) { gtk_cell_renderer_set_visible(renderer, item->state.checkable); } else if(renderer == GTK_CELL_RENDERER(gtkCellPixbuf)) { gtk_cell_renderer_set_visible(renderer, (bool)item->state.icon); } else if(renderer == GTK_CELL_RENDERER(gtkCellText)) { auto font = pFont::create(item->font(true)); g_object_set(G_OBJECT(renderer), "font-desc", font, nullptr); pango_font_description_free(font); if(auto color = item->foregroundColor(true)) { auto gdkColor = CreateColor(color); g_object_set(G_OBJECT(renderer), "foreground-gdk", &gdkColor, nullptr); } else { g_object_set(G_OBJECT(renderer), "foreground-set", false, nullptr); } } if(auto color = item->backgroundColor(true)) { auto gdkColor = CreateColor(color); g_object_set(G_OBJECT(renderer), "cell-background-gdk", &gdkColor, nullptr); } else { g_object_set(G_OBJECT(renderer), "cell-background-set", false, nullptr); } } auto pTreeView::_togglePath(string path) -> void { if(auto item = self().item(path.transform(":", "/"))) { bool checked = !item->checked(); gtk_tree_store_set(gtkTreeStore, &item->self()->gtkIter, 0, checked, -1); item->state.checked = checked; if(!locked()) self().doToggle(item); } } //it is necessary to compute the minimum width necessary to show all items in a tree, //before a horizontal scroll bar must be shown. this is because GTK2 (and possibly GTK3) //fail to subtract the tree view indentation level on items before determining if the //horizontal scroll bar is necessary. as a result, without this, the scroll bar shows up //far before it is necessary, and gets worse the more nested the tree is. // //this is called whenever the TreeView geometry changes, or whenever a TreeViewItem's //checkability, icon, or text is updated. in other words, whenever the need for a horizontal //scroll bar to show all items in the tree is necessary or not. auto pTreeView::_updateScrollBars() -> void { s32 maximumWidth = self().geometry().width() - 6; if(auto scrollBar = gtk_scrolled_window_get_vscrollbar(gtkScrolledWindow)) { GtkAllocation allocation; gtk_widget_get_allocation(scrollBar, &allocation); if(gtk_widget_get_visible(scrollBar)) maximumWidth -= allocation.width; } s32 minimumWidth = 0; for(auto& item : state().items) { if(auto self = item->self()) { minimumWidth = max(minimumWidth, self->_minimumWidth()); } } gtk_scrolled_window_set_policy(gtkScrolledWindow, minimumWidth >= maximumWidth ? GTK_POLICY_ALWAYS : GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); } auto pTreeView::_updateSelected() -> void { if(suppressChange) { suppressChange = false; gtk_tree_selection_unselect_all(gtkTreeSelection); return; } GtkTreeIter iter; if(gtk_tree_selection_get_selected(gtkTreeSelection, >kTreeModel, &iter)) { char* gtkPath = gtk_tree_model_get_string_from_iter(gtkTreeModel, &iter); string path = string{gtkPath}.transform(":", "/"); g_free(gtkPath); if(state().selectedPath != path) { state().selectedPath = path; if(!locked()) self().doChange(); } } else if(state().selectedPath) { state().selectedPath.reset(); if(!locked()) self().doChange(); } } } #endif ares-126/hiro/gtk/widget/tree-view.hpp000066400000000000000000000025561415063341600177620ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeView : pWidget { Declare(TreeView, Widget) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setActivation(Mouse::Click activation) -> void; auto setBackgroundColor(Color color) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; auto _activatePath(GtkTreePath* gtkPath) -> void; auto _buttonEvent(GdkEventButton* gdkEvent) -> s32; auto _doDataFunc(GtkTreeViewColumn* column, GtkCellRenderer* renderer, GtkTreeIter* iter) -> void; auto _togglePath(string path) -> void; auto _updateScrollBars() -> void; auto _updateSelected() -> void; auto _width(sTreeViewItem item, u32 depth = 0) -> u32; auto _widthRecursive() -> u32; GtkScrolledWindow* gtkScrolledWindow = nullptr; GtkWidget* gtkWidgetChild = nullptr; GtkTreeStore* gtkTreeStore = nullptr; GtkTreeModel* gtkTreeModel = nullptr; GtkTreeSelection* gtkTreeSelection = nullptr; GtkTreeView* gtkTreeView = nullptr; GtkTreeViewColumn* gtkTreeViewColumn = nullptr; GtkCellRenderer* gtkCellToggle = nullptr; GtkCellRenderer* gtkCellPixbuf = nullptr; GtkCellRenderer* gtkCellText = nullptr; GtkEntry* gtkEntry = nullptr; bool suppressActivate = false; bool suppressChange = false; }; } #endif ares-126/hiro/gtk/widget/vertical-scroll-bar.cpp000066400000000000000000000023601415063341600217060ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) namespace hiro { static auto VerticalScrollBar_change(GtkRange* gtkRange, pVerticalScrollBar* p) -> void { auto position = (u32)gtk_range_get_value(gtkRange); if(p->state().position == position) return; p->state().position = position; if(!p->locked()) p->self().doChange(); } auto pVerticalScrollBar::construct() -> void { #if HIRO_GTK==2 gtkWidget = gtk_vscrollbar_new(nullptr); #elif HIRO_GTK==3 gtkWidget = gtk_scrollbar_new(GTK_ORIENTATION_VERTICAL, nullptr); #endif setLength(state().length); setPosition(state().position); g_signal_connect(G_OBJECT(gtkWidget), "value-changed", G_CALLBACK(VerticalScrollBar_change), (gpointer)this); pWidget::construct(); } auto pVerticalScrollBar::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pVerticalScrollBar::minimumSize() const -> Size { return {20, 0}; } auto pVerticalScrollBar::setLength(u32 length) -> void { auto lock = acquire(); length += length == 0; gtk_range_set_range(GTK_RANGE(gtkWidget), 0, max(1u, length - 1)); gtk_range_set_increments(GTK_RANGE(gtkWidget), 1, length >> 3); } auto pVerticalScrollBar::setPosition(u32 position) -> void { gtk_range_set_value(GTK_RANGE(gtkWidget), position); } } #endif ares-126/hiro/gtk/widget/vertical-scroll-bar.hpp000066400000000000000000000004161415063341600217130ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) namespace hiro { struct pVerticalScrollBar : pWidget { Declare(VerticalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; }; } #endif ares-126/hiro/gtk/widget/vertical-slider.cpp000066400000000000000000000024071415063341600211320ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) namespace hiro { static auto VerticalSlider_change(GtkRange* gtkRange, pVerticalSlider* p) -> void { auto position = (u32)gtk_range_get_value(gtkRange); if(p->state().position == position) return; p->state().position = position; if(!p->locked()) p->self().doChange(); } auto pVerticalSlider::construct() -> void { #if HIRO_GTK==2 gtkWidget = gtk_vscale_new_with_range(0, 100, 1); #elif HIRO_GTK==3 gtkWidget = gtk_scale_new_with_range(GTK_ORIENTATION_VERTICAL, 0, 100, 1); #endif gtk_scale_set_draw_value(GTK_SCALE(gtkWidget), false); setLength(state().length); setPosition(state().position); g_signal_connect(G_OBJECT(gtkWidget), "value-changed", G_CALLBACK(VerticalSlider_change), (gpointer)this); pWidget::construct(); } auto pVerticalSlider::destruct() -> void { gtk_widget_destroy(gtkWidget); } auto pVerticalSlider::minimumSize() const -> Size { return {20, 3}; } auto pVerticalSlider::setLength(u32 length) -> void { length += length == 0; gtk_range_set_range(GTK_RANGE(gtkWidget), 0, max(1u, length - 1)); gtk_range_set_increments(GTK_RANGE(gtkWidget), 1, length >> 3); } auto pVerticalSlider::setPosition(u32 position) -> void { gtk_range_set_value(GTK_RANGE(gtkWidget), position); } } #endif ares-126/hiro/gtk/widget/vertical-slider.hpp000066400000000000000000000004051415063341600211330ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) namespace hiro { struct pVerticalSlider : pWidget { Declare(VerticalSlider, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; }; } #endif ares-126/hiro/gtk/widget/viewport.cpp000066400000000000000000000062051415063341600177200ustar00rootroot00000000000000#if defined(Hiro_Viewport) namespace hiro { //GTK3 static auto Viewport_draw(GtkWidget* widget, cairo_t* context, pViewport* p) -> s32 { p->_onDraw(context); return true; } //GTK2 static auto Viewport_expose(GtkWidget* widget, GdkEventExpose* event, pViewport* p) -> s32 { p->_onExpose(event); return true; } static auto Viewport_keyPress(GtkWidget* widget, GdkEventKey* event, pViewport* p) -> s32 { //viewports that have been set focusable are intended for games. //to prevent arrow keys, tab, etc from losing focus on the game viewport, block key propagation here. if(p->self().focusable()) return true; //for all other cases, allow the key to propagate. return false; } static auto Viewport_mousePress(GtkWidget* widget, GdkEventButton* event, pViewport* p) -> s32 { //gtk_widget_set_focus_on_click() is a GTK 3.2+ feature. //implement this functionality manually for GTK 2.0+ compatibility. if(event->button == 1 && p->self().focusable()) gtk_widget_grab_focus(widget); return Widget_mousePress(widget, event, p); } auto pViewport::construct() -> void { gtkWidget = gtk_drawing_area_new(); gtk_widget_add_events(gtkWidget, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_EXPOSURE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_POINTER_MOTION_MASK); g_signal_connect(G_OBJECT(gtkWidget), "button-press-event", G_CALLBACK(Viewport_mousePress), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "button-release-event", G_CALLBACK(Widget_mouseRelease), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "drag-data-received", G_CALLBACK(Widget_drop), (gpointer)this); #if HIRO_GTK==2 g_signal_connect(G_OBJECT(gtkWidget), "expose-event", G_CALLBACK(Viewport_expose), (gpointer)this); #elif HIRO_GTK==3 g_signal_connect(G_OBJECT(gtkWidget), "draw", G_CALLBACK(Viewport_draw), (gpointer)this); #endif g_signal_connect(G_OBJECT(gtkWidget), "key-press-event", G_CALLBACK(Viewport_keyPress), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "enter-notify-event", G_CALLBACK(Widget_mouseEnter), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "leave-notify-event", G_CALLBACK(Widget_mouseLeave), (gpointer)this); g_signal_connect(G_OBJECT(gtkWidget), "motion-notify-event", G_CALLBACK(Widget_mouseMove), (gpointer)this); pWidget::construct(); } auto pViewport::destruct() -> void { if(gtkWidget) gtk_widget_destroy(gtkWidget), gtkWidget = nullptr; gtkParent = nullptr; } auto pViewport::handle() const -> uintptr { #if defined(DISPLAY_WINDOWS) return (uintptr)GDK_WINDOW_HWND(gtk_widget_get_window(gtkWidget)); #endif #if defined(DISPLAY_XORG) return (uintptr)GDK_WINDOW_XID(gtk_widget_get_window(gtkWidget)); #endif return (uintptr)nullptr; } auto pViewport::setFocusable(bool focusable) -> void { gtk_widget_set_can_focus(gtkWidget, focusable); } auto pViewport::_onDraw(cairo_t* context) -> void { cairo_set_source_rgba(context, 0.0, 0.0, 0.0, 1.0); cairo_paint(context); } auto pViewport::_onExpose(GdkEventExpose* expose) -> void { cairo_t* context = gdk_cairo_create(gtk_widget_get_window(gtkWidget)); _onDraw(context); cairo_destroy(context); } } #endif ares-126/hiro/gtk/widget/viewport.hpp000066400000000000000000000004531415063341600177240ustar00rootroot00000000000000#if defined(Hiro_Viewport) namespace hiro { struct pViewport : pWidget { Declare(Viewport, Widget) auto handle() const -> uintptr; auto setFocusable(bool focusable) -> void override; auto _onDraw(cairo_t* context) -> void; auto _onExpose(GdkEventExpose* expose) -> void; }; } #endif ares-126/hiro/gtk/widget/widget.cpp000066400000000000000000000116151415063341600173250ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { static auto Widget_drop(GtkWidget* widget, GdkDragContext* context, s32 x, s32 y, GtkSelectionData* data, u32 type, u32 timestamp, pWidget* p) -> void { if(!p->state().droppable) return; auto paths = DropPaths(data); if(!paths) return; p->self().doDrop(paths); } static auto Widget_mouseEnter(GtkWidget* widget, GdkEventButton* event, pWidget* p) -> s32 { if(auto cursor = p->gdkMouseCursor) { if(auto window = gtk_widget_get_parent_window(widget)) { gdk_window_set_cursor(window, cursor); } } p->self().doMouseEnter(); return true; } static auto Widget_mouseLeave(GtkWidget* widget, GdkEventButton* event, pWidget* p) -> s32 { if(auto cursor = p->gdkMouseCursor) { if(auto window = gtk_widget_get_parent_window(widget)) { gdk_window_set_cursor(window, nullptr); } } p->self().doMouseLeave(); return true; } static auto Widget_mouseMove(GtkWidget* widget, GdkEventButton* event, pWidget* p) -> s32 { p->self().doMouseMove({(s32)event->x, (s32)event->y}); return true; } static auto Widget_mousePress(GtkWidget* widget, GdkEventButton* event, pWidget* p) -> s32 { switch(event->button) { case 1: p->self().doMousePress(Mouse::Button::Left); break; case 2: p->self().doMousePress(Mouse::Button::Middle); break; case 3: p->self().doMousePress(Mouse::Button::Right); break; } return true; } static auto Widget_mouseRelease(GtkWidget* widget, GdkEventButton* event, pWidget* p) -> s32 { switch(event->button) { case 1: p->self().doMouseRelease(Mouse::Button::Left); break; case 2: p->self().doMouseRelease(Mouse::Button::Middle); break; case 3: p->self().doMouseRelease(Mouse::Button::Right); break; } return true; } auto pWidget::construct() -> void { if(!gtkWidget) return; if(auto window = self().parentWindow(true)) { if(window->self()) window->self()->_append(self()); setDroppable(self().droppable()); setEnabled(self().enabled(true)); setFocusable(self().focusable()); setFont(self().font(true)); setMouseCursor(self().mouseCursor()); setToolTip(self().toolTip()); setVisible(self().visible(true)); } } auto pWidget::destruct() -> void { } auto pWidget::container(mWidget& widget) -> GtkWidget* { return nullptr; } auto pWidget::focused() const -> bool { if(!gtkWidget) return false; return gtk_widget_has_focus(gtkWidget); } auto pWidget::setDroppable(bool droppable) -> void { if(!gtkWidget) return; if(droppable) { gtk_drag_dest_set(gtkWidget, GTK_DEST_DEFAULT_ALL, nullptr, 0, GDK_ACTION_COPY); gtk_drag_dest_add_uri_targets(gtkWidget); } } auto pWidget::setEnabled(bool enabled) -> void { if(!gtkWidget) return; gtk_widget_set_sensitive(gtkWidget, enabled); } auto pWidget::setFocusable(bool focusable) -> void { //virtual overload: only configurable for Canvas and Viewport } auto pWidget::setFocused() -> void { if(!gtkWidget) return; gtk_widget_grab_focus(gtkWidget); } auto pWidget::setFont(const Font& font) -> void { if(!gtkWidget) return; return pFont::setFont(gtkWidget, font); } auto pWidget::setGeometry(Geometry geometry) -> void { if(!gtkWidget) return; if(gtkParent) gtk_fixed_move(GTK_FIXED(gtkParent), gtkWidget, geometry.x(), geometry.y()); if(geometry.width() < 1) geometry.setWidth (1); if(geometry.height() < 1) geometry.setHeight(1); gtk_widget_set_size_request(gtkWidget, geometry.width(), geometry.height()); if(0 && gtk_widget_get_realized(gtkWidget)) { static bool locked = false; if(!locked) { locked = true; auto time = chrono::millisecond(); while(chrono::millisecond() - time < 20) { GtkAllocation allocation; gtk_widget_get_allocation(gtkWidget, &allocation); if(allocation.width == geometry.width() && allocation.height == geometry.height()) break; gtk_main_iteration_do(false); } locked = false; } } pSizable::setGeometry(geometry); //this is needed to prevent some repainting issues (specifically with a Label which has a background color set for it) gtk_widget_queue_draw(gtkWidget); } auto pWidget::setMouseCursor(const MouseCursor& mouseCursor) -> void { //TODO: this should be freed, yet this code seems to break the cursor assignment completely ... //if(gdkMouseCursor) { // gdk_cursor_unref(gdkMouseCursor); // gdkMouseCursor = nullptr; //} if(mouseCursor) { string name; if(mouseCursor == MouseCursor::Hand) name = "hand1"; if(mouseCursor == MouseCursor::HorizontalResize) name = "sb_h_double_arrow"; if(mouseCursor == MouseCursor::VerticalResize) name = "sb_v_double_arrow"; if(name) { gdkMouseCursor = gdk_cursor_new_from_name(gdk_display_get_default(), name); } } } auto pWidget::setToolTip(const string& toolTip) -> void { gtk_widget_set_tooltip_text(gtkWidget, toolTip); } auto pWidget::setVisible(bool visible) -> void { if(!gtkWidget) return; gtk_widget_set_visible(gtkWidget, visible); } } #endif ares-126/hiro/gtk/widget/widget.hpp000066400000000000000000000014101415063341600173220ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { struct pWidget : pSizable { Declare(Widget, Sizable) virtual auto container(mWidget& widget) -> GtkWidget*; auto focused() const -> bool override; auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; virtual auto setFocusable(bool focusable) -> void; auto setFocused() -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setMouseCursor(const MouseCursor& mouseCursor) -> void; auto setToolTip(const string& toolTip) -> void; auto setVisible(bool visible) -> void override; GtkWidget* gtkWidget = nullptr; GtkWidget* gtkParent = nullptr; GdkCursor* gdkMouseCursor = nullptr; }; } #endif ares-126/hiro/gtk/window.cpp000066400000000000000000000546001415063341600160670ustar00rootroot00000000000000#if defined(Hiro_Window) namespace hiro { static auto Window_close(GtkWidget* widget, GdkEvent* event, pWindow* p) -> s32 { if(p->state().onClose) { p->self().doClose(); } else { p->self().setVisible(false); } if(p->self().modal() && !p->self().visible()) p->self().setModal(false); return true; } //GTK3 draw: called into by GTK2 expose-event static auto Window_draw(GtkWidget* widget, cairo_t* context, pWindow* p) -> s32 { if(auto color = p->state().backgroundColor) { f64 red = (f64)color.red() / 255.0; f64 green = (f64)color.green() / 255.0; f64 blue = (f64)color.blue() / 255.0; f64 alpha = (f64)color.alpha() / 255.0; if(gdk_screen_is_composited(gdk_screen_get_default()) && gdk_screen_get_rgba_visual(gdk_screen_get_default()) ) { cairo_set_source_rgba(context, red, green, blue, alpha); } else { cairo_set_source_rgb(context, red, green, blue); } cairo_set_operator(context, CAIRO_OPERATOR_SOURCE); cairo_paint(context); } else { #if HIRO_GTK==3 auto style = gtk_widget_get_style_context(widget); GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); gtk_render_background(style, context, 0, 0, allocation.width, allocation.height); #endif } return false; } //GTK2 expose-event static auto Window_expose(GtkWidget* widget, GdkEvent* event, pWindow* p) -> s32 { cairo_t* context = gdk_cairo_create(gtk_widget_get_window(widget)); Window_draw(widget, context, p); cairo_destroy(context); return false; } static auto Window_configure(GtkWidget* widget, GdkEvent* event, pWindow* p) -> s32 { p->_synchronizeMargin(); return false; } static auto Window_drop(GtkWidget* widget, GdkDragContext* context, s32 x, s32 y, GtkSelectionData* data, u32 type, u32 timestamp, pWindow* p) -> void { if(!p->state().droppable) return; auto paths = DropPaths(data); if(!paths) return; p->self().doDrop(paths); } static auto Window_getPreferredWidth(GtkWidget* widget, s32* minimalWidth, s32* naturalWidth) -> void { if(auto p = (pWindow*)g_object_get_data(G_OBJECT(widget), "hiro::window")) { *minimalWidth = 1; *naturalWidth = p->state().geometry.width(); } } static auto Window_getPreferredHeight(GtkWidget* widget, s32* minimalHeight, s32* naturalHeight) -> void { if(auto p = (pWindow*)g_object_get_data(G_OBJECT(widget), "hiro::window")) { *minimalHeight = 1; *naturalHeight = p->state().geometry.height(); } } static auto Window_keyPress(GtkWidget* widget, GdkEventKey* event, pWindow* p) -> s32 { if(auto key = pKeyboard::_translate(event->keyval)) { p->self().doKeyPress(key); } if(p->state().dismissable && event->keyval == GDK_KEY_Escape) { if(p->state().onClose) { p->self().doClose(); } else { p->self().setVisible(false); } if(p->state().modal && !p->pObject::state().visible) p->self().setModal(false); } return false; } static auto Window_keyRelease(GtkWidget* widget, GdkEventKey* event, pWindow* p) -> s32 { if(auto key = pKeyboard::_translate(event->keyval)) { p->self().doKeyRelease(key); } return false; } static auto Window_realize(GtkWidget* widget, pWindow* p) -> void { } static auto Window_sizeAllocate(GtkWidget* widget, GtkAllocation* allocation, pWindow* p) -> void { p->_synchronizeState(); p->_synchronizeGeometry(); p->_synchronizeMargin(); return; } static auto Window_sizeRequest(GtkWidget* widget, GtkRequisition* requisition, pWindow* p) -> void { requisition->width = p->state().geometry.width(); requisition->height = p->state().geometry.height(); } static auto Window_stateEvent(GtkWidget* widget, GdkEvent* event, pWindow* p) -> void { p->_synchronizeState(); if(event->type == GDK_WINDOW_STATE) { auto windowStateEvent = (GdkEventWindowState*)event; if(windowStateEvent->changed_mask & GDK_WINDOW_STATE_MAXIMIZED) { p->state().maximized = windowStateEvent->new_window_state & GDK_WINDOW_STATE_MAXIMIZED; } if(windowStateEvent->changed_mask & GDK_WINDOW_STATE_ICONIFIED) { p->state().minimized = windowStateEvent->new_window_state & GDK_WINDOW_STATE_ICONIFIED; } } } static auto Window_unrealize(GtkWidget* widget, pWindow* p) -> void { } auto pWindow::construct() -> void { widget = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_resizable(GTK_WINDOW(widget), true); //if program was given a name, try and set the window taskbar icon from one of the pixmaps folders if(!Application::state().name); else if(_setIcon({Path::user(), ".local/share/icons/"})); else if(_setIcon("/usr/local/share/pixmaps/")); else if(_setIcon("/usr/share/pixmaps/")); auto visual = gdk_screen_get_rgba_visual(gdk_screen_get_default()); if(!visual) visual = gdk_screen_get_system_visual(gdk_screen_get_default()); if(visual) gtk_widget_set_visual(widget, visual); gtk_widget_set_app_paintable(widget, true); gtk_widget_add_events(widget, GDK_CONFIGURE); #if HIRO_GTK==2 menuContainer = gtk_vbox_new(false, 0); #elif HIRO_GTK==3 menuContainer = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); #endif gtk_container_add(GTK_CONTAINER(widget), menuContainer); gtk_widget_show(menuContainer); gtkMenu = gtk_menu_bar_new(); gtk_box_pack_start(GTK_BOX(menuContainer), gtkMenu, false, false, 0); formContainer = gtk_fixed_new(); gtk_box_pack_start(GTK_BOX(menuContainer), formContainer, true, true, 0); gtk_widget_show(formContainer); statusContainer = gtk_event_box_new(); gtkStatus = gtk_statusbar_new(); #if HIRO_GTK==2 gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(gtkStatus), true); #elif HIRO_GTK==3 gtk_window_set_has_resize_grip(GTK_WINDOW(widget), true); #endif gtk_container_add(GTK_CONTAINER(statusContainer), gtkStatus); gtk_box_pack_start(GTK_BOX(menuContainer), statusContainer, false, false, 0); gtk_widget_show(statusContainer); setBackgroundColor(state().backgroundColor); setDroppable(state().droppable); setGeometry(state().geometry); setResizable(state().resizable); setMaximized(state().maximized); setMinimized(state().minimized); setTitle(state().title); g_signal_connect(G_OBJECT(widget), "delete-event", G_CALLBACK(Window_close), (gpointer)this); #if HIRO_GTK==2 g_signal_connect(G_OBJECT(widget), "expose-event", G_CALLBACK(Window_expose), (gpointer)this); #elif HIRO_GTK==3 g_signal_connect(G_OBJECT(widget), "draw", G_CALLBACK(Window_draw), (gpointer)this); #endif g_signal_connect(G_OBJECT(widget), "configure-event", G_CALLBACK(Window_configure), (gpointer)this); g_signal_connect(G_OBJECT(widget), "drag-data-received", G_CALLBACK(Window_drop), (gpointer)this); g_signal_connect(G_OBJECT(widget), "key-press-event", G_CALLBACK(Window_keyPress), (gpointer)this); g_signal_connect(G_OBJECT(widget), "key-release-event", G_CALLBACK(Window_keyRelease), (gpointer)this); g_signal_connect(G_OBJECT(widget), "realize", G_CALLBACK(Window_realize), (gpointer)this); g_signal_connect(G_OBJECT(formContainer), "size-allocate", G_CALLBACK(Window_sizeAllocate), (gpointer)this); #if HIRO_GTK==2 g_signal_connect(G_OBJECT(formContainer), "size-request", G_CALLBACK(Window_sizeRequest), (gpointer)this); #elif HIRO_GTK==3 auto widgetClass = GTK_WIDGET_GET_CLASS(formContainer); widgetClass->get_preferred_width = Window_getPreferredWidth; widgetClass->get_preferred_height = Window_getPreferredHeight; #endif g_signal_connect(G_OBJECT(widget), "unrealize", G_CALLBACK(Window_unrealize), (gpointer)this); g_signal_connect(G_OBJECT(widget), "window-state-event", G_CALLBACK(Window_stateEvent), (gpointer)this); g_object_set_data(G_OBJECT(widget), "hiro::window", (gpointer)this); g_object_set_data(G_OBJECT(formContainer), "hiro::window", (gpointer)this); pApplication::state().windows.append(this); } auto pWindow::destruct() -> void { for(u32 offset : range(pApplication::state().windows.size())) { if(pApplication::state().windows[offset] == this) { pApplication::state().windows.remove(offset); break; } } gtk_widget_destroy(widget); } auto pWindow::append(sMenuBar menuBar) -> void { _setMenuEnabled(menuBar->enabled(true)); _setMenuFont(menuBar->font(true)); _setMenuVisible(menuBar->visible(true)); } auto pWindow::append(sSizable sizable) -> void { } auto pWindow::append(sStatusBar statusBar) -> void { _setStatusEnabled(statusBar->enabled(true)); _setStatusFont(statusBar->font(true)); _setStatusText(statusBar->text()); _setStatusVisible(statusBar->visible(true)); } auto pWindow::focused() const -> bool { return gtk_window_is_active(GTK_WINDOW(widget)); } auto pWindow::frameMargin() const -> Geometry { if(state().fullScreen) return { 0, _menuHeight(), 0, _menuHeight() + _statusHeight() }; return { settings.geometry.frameX, settings.geometry.frameY + _menuHeight(), settings.geometry.frameWidth, settings.geometry.frameHeight + _menuHeight() + _statusHeight() }; } auto pWindow::handle() const -> uintptr { #if defined(DISPLAY_WINDOWS) return (uintptr)GDK_WINDOW_HWND(gtk_widget_get_window(widget)); #endif #if defined(DISPLAY_XORG) return GDK_WINDOW_XID(gtk_widget_get_window(widget)); #endif return (uintptr)nullptr; } auto pWindow::monitor() const -> u32 { if(!gtk_widget_get_realized(widget)) return 0; auto window = gtk_widget_get_window(widget); return gdk_screen_get_monitor_at_window(gdk_screen_get_default(), window); } auto pWindow::remove(sMenuBar menuBar) -> void { _setMenuVisible(false); } auto pWindow::remove(sSizable sizable) -> void { } auto pWindow::remove(sStatusBar statusBar) -> void { _setStatusVisible(false); } auto pWindow::setBackgroundColor(Color color) -> void { GdkColor gdkColor = CreateColor(color); gtk_widget_modify_bg(widget, GTK_STATE_NORMAL, color ? &gdkColor : nullptr); } auto pWindow::setDismissable(bool dismissable) -> void { } auto pWindow::setDroppable(bool droppable) -> void { gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_ALL, nullptr, 0, GDK_ACTION_COPY); if(droppable) gtk_drag_dest_add_uri_targets(widget); } auto pWindow::setEnabled(bool enabled) -> void { if(auto& menuBar = state().menuBar) { if(auto self = menuBar->self()) self->setEnabled(menuBar->enabled(true)); } if(auto& statusBar = state().statusBar) { if(auto self = statusBar->self()) self->setEnabled(statusBar->enabled(true)); } } auto pWindow::setFocused() -> void { gtk_window_present(GTK_WINDOW(widget)); } auto pWindow::setFullScreen(bool fullScreen) -> void { if(fullScreen) { gtk_window_fullscreen(GTK_WINDOW(widget)); } else { gtk_window_unfullscreen(GTK_WINDOW(widget)); } auto time = chrono::millisecond(); while(chrono::millisecond() - time < 20) { Application::processEvents(); } } auto pWindow::setGeometry(Geometry geometry) -> void { auto margin = frameMargin(); setMaximumSize(state().maximumSize); setMinimumSize(state().minimumSize); auto time1 = chrono::millisecond(); while(chrono::millisecond() - time1 < 20) { Application::processEvents(); } gtk_window_move(GTK_WINDOW(widget), geometry.x() - margin.x(), geometry.y() - margin.y()); gtk_window_resize(GTK_WINDOW(widget), geometry.width(), geometry.height() + _menuHeight() + _statusHeight()); auto time2 = chrono::millisecond(); while(chrono::millisecond() - time2 < 20) { Application::processEvents(); } } auto pWindow::setMaximized(bool maximized) -> void { auto lock = acquire(); if(maximized) { gtk_window_maximize(GTK_WINDOW(widget)); } else { gtk_window_unmaximize(GTK_WINDOW(widget)); } } auto pWindow::setMaximumSize(Size size) -> void { if(!state().resizable) size = state().geometry.size(); //TODO: this doesn't have any effect in GTK2 or GTK3 GdkGeometry geometry; if(size.height()) size.setHeight(size.height() + _menuHeight() + _statusHeight()); geometry.max_width = !state().resizable ? state().geometry.width() : size.width() ? size.width() : 32767; geometry.max_height = !state().resizable ? state().geometry.height() : size.height() ? size.height() : 32767; gtk_window_set_geometry_hints(GTK_WINDOW(widget), nullptr, &geometry, GDK_HINT_MAX_SIZE); } auto pWindow::setMinimized(bool minimized) -> void { auto lock = acquire(); if(minimized) { gtk_window_iconify(GTK_WINDOW(widget)); } else { gtk_window_deiconify(GTK_WINDOW(widget)); } } auto pWindow::setMinimumSize(Size size) -> void { if(!state().resizable) size = state().geometry.size(); //for GTK3 gtk_widget_set_size_request(formContainer, size.width(), size.height()); //for GTK2 GdkGeometry geometry; if(size.height()) size.setHeight(size.height() + _menuHeight() + _statusHeight()); geometry.min_width = !state().resizable ? state().geometry.width() : size.width() ? size.width() : 1; geometry.min_height = !state().resizable ? state().geometry.height() : size.height() ? size.height() : 1; gtk_window_set_geometry_hints(GTK_WINDOW(widget), nullptr, &geometry, GDK_HINT_MIN_SIZE); //for GTK2 } auto pWindow::setModal(bool modal) -> void { if(modal) { gtk_window_set_modal(GTK_WINDOW(widget), true); while(!Application::state().quit && state().modal) { if(Application::state().onMain) { Application::doMain(); } else { usleep(20 * 1000); } Application::processEvents(); } gtk_window_set_modal(GTK_WINDOW(widget), false); } } auto pWindow::setResizable(bool resizable) -> void { gtk_window_set_resizable(GTK_WINDOW(widget), resizable); #if HIRO_GTK==2 gtk_statusbar_set_has_resize_grip(GTK_STATUSBAR(gtkStatus), resizable); #elif HIRO_GTK==3 bool statusBarVisible = false; if(auto statusBar = state().statusBar) statusBarVisible = statusBar->visible(); gtk_window_set_has_resize_grip(GTK_WINDOW(widget), resizable && statusBarVisible); #endif setMaximumSize(state().maximumSize); setMinimumSize(state().minimumSize); } auto pWindow::setTitle(const string& title) -> void { gtk_window_set_title(GTK_WINDOW(widget), title ? title : " "); } auto pWindow::setVisible(bool visible) -> void { gtk_widget_set_visible(widget, visible); _synchronizeGeometry(); _synchronizeMargin(); } auto pWindow::_append(mWidget& widget) -> void { if(auto pWidget = widget.self()) { if(auto parent = widget.parentWidget(true)) { if(auto instance = parent->self()) { pWidget->gtkParent = instance->container(widget); } } else { pWidget->gtkParent = formContainer; } if(pWidget->gtkParent) { gtk_fixed_put(GTK_FIXED(pWidget->gtkParent), pWidget->gtkWidget, 0, 0); } } } auto pWindow::_append(mMenu& menu) -> void { if(auto pMenu = menu.self()) { gtk_menu_shell_append(GTK_MENU_SHELL(gtkMenu), pMenu->widget); } } auto pWindow::_menuHeight() const -> s32 { if(auto& menuBar = state().menuBar) { if(menuBar->visible()) { return settings.geometry.menuHeight + _menuTextHeight(); } } return 0; } auto pWindow::_menuTextHeight() const -> s32 { s32 height = 0; if(auto& menuBar = state().menuBar) { for(auto& menu : menuBar->state.menus) { height = max(height, menu->font(true).size(menu->text()).height()); } } return height; } auto pWindow::_setIcon(const string& pathname) -> bool { string filename; filename = {pathname, Application::state().name, ".svg"}; if(file::exists(filename)) { gtk_window_set_icon_from_file(GTK_WINDOW(widget), filename, nullptr); return true; } filename = {pathname, Application::state().name, ".png"}; if(file::exists(filename)) { //maximum image size GTK+ supports is 256x256; scale image down if necessary to prevent error image icon(filename); icon.scale(min(256u, icon.width()), min(256u, icon.height()), true); auto pixbuf = CreatePixbuf(icon); gtk_window_set_icon(GTK_WINDOW(widget), pixbuf); g_object_unref(G_OBJECT(pixbuf)); return true; } return false; } auto pWindow::_setMenuEnabled(bool enabled) -> void { gtk_widget_set_sensitive(gtkMenu, enabled); } auto pWindow::_setMenuFont(const Font& font) -> void { pFont::setFont(gtkMenu, font); } auto pWindow::_setMenuVisible(bool visible) -> void { gtk_widget_set_visible(gtkMenu, visible); } auto pWindow::_setStatusEnabled(bool enabled) -> void { gtk_widget_set_sensitive(gtkStatus, enabled); } auto pWindow::_setStatusFont(const Font& font) -> void { pFont::setFont(gtkStatus, font); } auto pWindow::_setStatusText(const string& text) -> void { gtk_statusbar_pop(GTK_STATUSBAR(gtkStatus), 1); gtk_statusbar_push(GTK_STATUSBAR(gtkStatus), 1, text); } auto pWindow::_setStatusVisible(bool visible) -> void { gtk_widget_set_visible(gtkStatus, visible); setResizable(self().resizable()); } auto pWindow::_statusHeight() const -> s32 { if(auto& statusBar = state().statusBar) { if(statusBar->visible()) { return settings.geometry.statusHeight + _statusTextHeight(); } } return 0; } auto pWindow::_statusTextHeight() const -> s32 { s32 height = 0; if(auto& statusBar = state().statusBar) { height = statusBar->font(true).size(statusBar->text()).height(); } return height; } //GTK is absolutely hopeless with window sizing //it will send size-allocate events during resizing of widgets during size-allocate events //instead of fighting with configure-event and size-allocate, just poll the state instead auto pWindow::_synchronizeGeometry() -> void { if(locked()) return; auto lock = acquire(); if(!gtk_widget_get_realized(widget)) return; if(!gtk_widget_get_visible(widget)) return; //get_allocation(formContainer) returns the same values as get_allocation(widget) ... //as a result, we have to compensate for the window margin ourselves here. GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); allocation.height -= _menuHeight(); allocation.height -= _statusHeight(); if(allocation.width != lastSize.width || allocation.height != lastSize.height) { auto size = self().geometry().size(); state().geometry.setSize({allocation.width, allocation.height}); if(auto& sizable = state().sizable) { sizable->setGeometry(self().geometry().setPosition()); } self().doSize(); //for GTK3: the window will not update after changing widget sizes until sending size-allocate //size-allocate will also call _synchronizeMargin() which is also important for window sizing //GtkAllocation is a typedef of GdkRectangle GtkAllocation rectangle; gtk_widget_get_allocation(widget, &rectangle); g_signal_emit_by_name(G_OBJECT(widget), "size-allocate", &rectangle, (gpointer)this, nullptr); } lastSize = allocation; auto gdkWindow = gtk_widget_get_window(widget); gdk_window_get_origin(gdkWindow, &allocation.x, &allocation.y); allocation.y += _menuHeight(); if(allocation.x != lastMove.x || allocation.y != lastMove.y) { state().geometry.setPosition({allocation.x, allocation.y}); self().doMove(); } lastMove = allocation; } auto pWindow::_synchronizeMargin() -> void { if(locked()) return; auto lock = acquire(); if(!gtk_widget_get_realized(widget)) return; if(!gtk_widget_get_visible(widget)) return; if(state().fullScreen || state().maximized || state().minimized) return; auto window = gtk_widget_get_window(widget); GdkRectangle border, client; gdk_window_get_frame_extents(window, &border); gdk_window_get_origin(window, &client.x, &client.y); #if HIRO_GTK==2 gdk_window_get_geometry(window, nullptr, nullptr, &client.width, &client.height, nullptr); #elif HIRO_GTK==3 gdk_window_get_geometry(window, nullptr, nullptr, &client.width, &client.height); #endif settings.geometry.frameX = client.x - border.x; settings.geometry.frameY = client.y - border.y; settings.geometry.frameWidth = border.width - client.width; settings.geometry.frameHeight = border.height - client.height; if(gtk_widget_get_visible(gtkMenu)) { GtkAllocation allocation; auto time = chrono::millisecond(); while(chrono::millisecond() - time < 20) { gtk_widget_get_allocation(gtkMenu, &allocation); if(allocation.height > 1) { settings.geometry.menuHeight = allocation.height - _menuTextHeight(); break; } } } if(gtk_widget_get_visible(gtkStatus)) { GtkAllocation allocation; auto time = chrono::millisecond(); while(chrono::millisecond() - time < 20) { gtk_widget_get_allocation(gtkStatus, &allocation); if(allocation.height > 1) { settings.geometry.statusHeight = allocation.height - _statusTextHeight(); break; } } } } //GTK doesn't add gtk_window_is_maximized() until 3.12; //and doesn't appear to have a companion gtk_window_is_(hidden,iconic,minimized); //so we have to do this the hard way auto pWindow::_synchronizeState() -> void { if(locked()) return; auto lock = acquire(); if(!gtk_widget_get_realized(widget)) return; #if defined(DISPLAY_WINDOWS) auto window = (HWND)GDK_WINDOW_HWND(gtk_widget_get_window(widget)); bool maximized = IsZoomed(window); bool minimized = IsIconic(window); bool doSize = false; if(state().minimized != minimized) doSize = true; state().maximized = maximized; state().minimized = minimized; if(doSize) self().doSize(); #endif #if defined(DISPLAY_XORG) auto display = XOpenDisplay(nullptr); s32 screen = DefaultScreen(display); auto window = GDK_WINDOW_XID(gtk_widget_get_window(widget)); XlibAtom wmState = XInternAtom(display, "_NET_WM_STATE", XlibTrue); XlibAtom atom; s32 format; unsigned long items, after; unsigned char* data = nullptr; s32 result = XGetWindowProperty( display, window, wmState, 0, LONG_MAX, XlibFalse, AnyPropertyType, &atom, &format, &items, &after, &data ); auto atoms = (unsigned long*)data; if(result == Success) { bool maximizedHorizontal = false; bool maximizedVertical = false; bool minimized = false; for(auto index : range(items)) { auto memory = XGetAtomName(display, atoms[index]); auto name = string{memory}; if(name == "_NET_WM_STATE_MAXIMIZED_HORZ") maximizedHorizontal = true; if(name == "_NET_WM_STATE_MAXIMIZED_VERT") maximizedVertical = true; if(name == "_NET_WM_STATE_HIDDEN") minimized = true; XFree(memory); } bool doSize = false; //maximize sends size-allocate, which triggers doSize() if(state().minimized != minimized) doSize = true; //windows do not act bizarrely when maximized in only one direction //so for this reason, consider a window maximized only if it's in both directions state().maximized = maximizedHorizontal && maximizedVertical; state().minimized = minimized; if(doSize) self().doSize(); } XCloseDisplay(display); #endif } } #endif ares-126/hiro/gtk/window.hpp000066400000000000000000000042521415063341600160720ustar00rootroot00000000000000#if defined(Hiro_Window) namespace hiro { struct pWindow : pObject { Declare(Window, Object) auto append(sMenuBar menuBar) -> void; auto append(sSizable sizable) -> void; auto append(sStatusBar statusBar) -> void; auto focused() const -> bool override; auto frameMargin() const -> Geometry; auto handle() const -> uintptr; auto monitor() const -> u32; auto remove(sMenuBar menuBar) -> void; auto remove(sSizable sizable) -> void; auto remove(sStatusBar statusBar) -> void; auto setBackgroundColor(Color color) -> void; auto setDismissable(bool dismissable) -> void; auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; auto setFocused() -> void override; auto setFullScreen(bool fullScreen) -> void; auto setGeometry(Geometry geometry) -> void; auto setMaximized(bool maximized) -> void; auto setMaximumSize(Size size) -> void; auto setMinimized(bool minimized) -> void; auto setMinimumSize(Size size) -> void; auto setModal(bool modal) -> void; auto setResizable(bool resizable) -> void; auto setTitle(const string& title) -> void; auto setVisible(bool visible) -> void override; auto _append(mWidget& widget) -> void; auto _append(mMenu& menu) -> void; auto _menuHeight() const -> s32; auto _menuTextHeight() const -> s32; auto _setIcon(const string& basename) -> bool; auto _setMenuEnabled(bool enabled) -> void; auto _setMenuFont(const Font& font) -> void; auto _setMenuVisible(bool visible) -> void; auto _setStatusEnabled(bool enabled) -> void; auto _setStatusFont(const Font& font) -> void; auto _setStatusText(const string& text) -> void; auto _setStatusVisible(bool visible) -> void; auto _statusHeight() const -> s32; auto _statusTextHeight() const -> s32; auto _synchronizeGeometry() -> void; auto _synchronizeMargin() -> void; auto _synchronizeState() -> void; GtkWidget* widget = nullptr; GtkWidget* menuContainer = nullptr; GtkWidget* formContainer = nullptr; GtkWidget* statusContainer = nullptr; GtkWidget* gtkMenu = nullptr; GtkWidget* gtkStatus = nullptr; GtkAllocation lastMove = {}; GtkAllocation lastSize = {}; bool screenSaver = true; }; } #endif ares-126/hiro/hiro.cpp000066400000000000000000000002011415063341600147200ustar00rootroot00000000000000#ifndef HIRO_CPP #define HIRO_CPP #include "components.hpp" #include "core/core.cpp" #include "extension/extension.cpp" #endif ares-126/hiro/hiro.hpp000066400000000000000000000004021415063341600147300ustar00rootroot00000000000000#pragma once #include "components.hpp" #include "core/core.hpp" #include "extension/extension.hpp" #undef DeclareShared #undef DeclareSharedObject #undef DeclareSharedAction #undef DeclareSharedSizable #undef DeclareSharedLayout #undef DeclareSharedWidget ares-126/hiro/platform/000077500000000000000000000000001415063341600151065ustar00rootroot00000000000000ares-126/hiro/platform/windows/000077500000000000000000000000001415063341600166005ustar00rootroot00000000000000ares-126/hiro/platform/windows/keyboard.hpp000066400000000000000000000045521415063341600211170ustar00rootroot00000000000000map("Escape", VK_ESCAPE); map("F1", VK_F1); map("F2", VK_F2); map("F3", VK_F3); map("F4", VK_F4); map("F5", VK_F5); map("F6", VK_F6); map("F7", VK_F7); map("F8", VK_F8); map("F9", VK_F9); map("F10", VK_F10); map("F11", VK_F11); map("F12", VK_F12); map("PrintScreen", VK_SNAPSHOT); map("ScrollLock", VK_SCROLL); map("Pause", VK_PAUSE); map("Insert", VK_INSERT); map("Delete", VK_DELETE); map("Home", VK_HOME); map("End", VK_END); map("PageUp", VK_PRIOR); map("PageDown", VK_NEXT); map("Up", VK_UP); map("Down", VK_DOWN); map("Left", VK_LEFT); map("Right", VK_RIGHT); map("Grave", VK_OEM_3); map("1", '1'); map("2", '2'); map("3", '3'); map("4", '4'); map("5", '5'); map("6", '6'); map("7", '7'); map("8", '8'); map("9", '9'); map("0", '0'); map("Dash", VK_OEM_MINUS); map("Equal", VK_OEM_PLUS); map("Backspace", VK_BACK); map("Tab", VK_TAB); map("CapsLock", VK_CAPITAL); map("LeftEnter", VK_RETURN); map("LeftShift", VK_LSHIFT); map("RightShift", VK_RSHIFT); map("LeftControl", VK_LCONTROL); map("RightControl", VK_RCONTROL); map("LeftAlt", VK_LMENU); map("RightAlt", VK_RMENU); map("LeftSuper", VK_LWIN); map("RightSuper", VK_RWIN); map("Menu", VK_APPS); map("Space", VK_SPACE); map("OpenBracket", VK_OEM_4); map("CloseBracket", VK_OEM_6); map("Backslash", VK_OEM_5); map("Semicolon", VK_OEM_1); map("Apostrophe", VK_OEM_7); map("Comma", VK_OEM_COMMA); map("Period", VK_OEM_PERIOD); map("Slash", VK_OEM_2); map("A", 'A'); map("B", 'B'); map("C", 'C'); map("D", 'D'); map("E", 'E'); map("F", 'F'); map("G", 'G'); map("H", 'H'); map("I", 'I'); map("J", 'J'); map("K", 'K'); map("L", 'L'); map("M", 'M'); map("N", 'N'); map("O", 'O'); map("P", 'P'); map("Q", 'Q'); map("R", 'R'); map("S", 'S'); map("T", 'T'); map("U", 'U'); map("V", 'V'); map("W", 'W'); map("X", 'X'); map("Y", 'Y'); map("Z", 'Z'); map("NumLock", VK_NUMLOCK); map("Divide", VK_DIVIDE); map("Multiply", VK_MULTIPLY); map("Subtract", VK_SUBTRACT); map("Add", VK_ADD); //map("RightEnter", ...); map("Point", VK_DECIMAL); map("One", VK_NUMPAD1); map("Two", VK_NUMPAD2); map("Three", VK_NUMPAD3); map("Four", VK_NUMPAD4); map("Five", VK_NUMPAD5); map("Six", VK_NUMPAD6); map("Seven", VK_NUMPAD7); map("Eight", VK_NUMPAD8); map("Nine", VK_NUMPAD9); map("Zero", VK_NUMPAD0); map("Shift", VK_LSHIFT, VK_RSHIFT); map("Control", VK_LCONTROL, VK_RCONTROL); map("Alt", VK_LMENU, VK_RMENU); map("Super", VK_LWIN, VK_RWIN); map("Enter", VK_RETURN); ares-126/hiro/platform/xorg/000077500000000000000000000000001415063341600160655ustar00rootroot00000000000000ares-126/hiro/platform/xorg/keyboard.hpp000066400000000000000000000047001415063341600203770ustar00rootroot00000000000000map("Escape", XK_Escape); map("F1", XK_F1); map("F2", XK_F2); map("F3", XK_F3); map("F4", XK_F4); map("F5", XK_F5); map("F6", XK_F6); map("F7", XK_F7); map("F8", XK_F8); map("F9", XK_F9); map("F10", XK_F10); map("F11", XK_F11); map("F12", XK_F12); map("PrintScreen", XK_Print); map("ScrollLock", XK_Scroll_Lock); map("Pause", XK_Pause); map("Insert", XK_Insert); map("Delete", XK_Delete); map("Home", XK_Home); map("End", XK_End); map("PageUp", XK_Prior); map("PageDown", XK_Next); map("Up", XK_Up); map("Down", XK_Down); map("Left", XK_Left); map("Right", XK_Right); map("Grave", XK_asciitilde); map("1", XK_1); map("2", XK_2); map("3", XK_3); map("4", XK_4); map("5", XK_5); map("6", XK_6); map("7", XK_7); map("8", XK_8); map("9", XK_9); map("0", XK_0); map("Dash", XK_minus); map("Equal", XK_equal); map("Backspace", XK_BackSpace); map("Tab", XK_Tab); map("CapsLock", XK_Caps_Lock); map("LeftEnter", XK_Return); map("LeftShift", XK_Shift_L); map("RightShift", XK_Shift_R); map("LeftControl", XK_Control_L); map("RightControl", XK_Control_R); map("LeftAlt", XK_Alt_L); map("RightAlt", XK_Alt_R); map("LeftSuper", XK_Super_L); map("RightSuper", XK_Super_R); map("Menu", XK_Menu); map("Space", XK_space); map("OpenBracket", XK_bracketleft); map("CloseBracket", XK_bracketright); map("Backslash", XK_backslash); map("Semicolon", XK_semicolon); map("Apostrophe", XK_apostrophe); map("Comma", XK_comma); map("Period", XK_period); map("Slash", XK_slash); map("A", XK_A); map("B", XK_B); map("C", XK_C); map("D", XK_D); map("E", XK_E); map("F", XK_F); map("G", XK_G); map("H", XK_H); map("I", XK_I); map("J", XK_J); map("K", XK_K); map("L", XK_L); map("M", XK_M); map("N", XK_N); map("O", XK_O); map("P", XK_P); map("Q", XK_Q); map("R", XK_R); map("S", XK_S); map("T", XK_T); map("U", XK_U); map("V", XK_V); map("W", XK_W); map("X", XK_X); map("Y", XK_Y); map("Z", XK_Z); map("NumLock", XK_Num_Lock); map("Divide", XK_KP_Divide); map("Multiply", XK_KP_Multiply); map("Subtract", XK_KP_Subtract); map("Add", XK_KP_Add); map("RightEnter", XK_KP_Enter); map("Point", XK_KP_Decimal); map("One", XK_KP_1); map("Two", XK_KP_2); map("Three", XK_KP_3); map("Four", XK_KP_4); map("Five", XK_KP_5); map("Six", XK_KP_6); map("Seven", XK_KP_7); map("Eight", XK_KP_8); map("Nine", XK_KP_9); map("Zero", XK_KP_0); map("Shift", XK_Shift_L, XK_Shift_R); map("Control", XK_Control_L, XK_Control_R); map("Alt", XK_Alt_L, XK_Alt_R); map("Super", XK_Super_L, XK_Super_R); map("Enter", XK_Return, XK_KP_Enter); ares-126/hiro/qt/000077500000000000000000000000001415063341600137065ustar00rootroot00000000000000ares-126/hiro/qt/action/000077500000000000000000000000001415063341600151635ustar00rootroot00000000000000ares-126/hiro/qt/action/action.cpp000066400000000000000000000015651415063341600171530ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { auto pAction::construct() -> void { } auto pAction::destruct() -> void { } auto pAction::setEnabled(bool enabled) -> void { _setState(); } auto pAction::setFont(const Font& font) -> void { _setState(); } auto pAction::setVisible(bool visible) -> void { _setState(); } auto pAction::_parentMenu() -> maybe { if(auto parent = self().parentMenu()) { if(auto self = parent->self()) return *self; } return nothing; } auto pAction::_parentMenuBar() -> maybe { if(auto parent = self().parentMenuBar()) { if(auto self = parent->self()) return *self; } return nothing; } auto pAction::_parentPopupMenu() -> maybe { if(auto parent = self().parentPopupMenu()) { if(auto self = parent->self()) return *self; } return nothing; } auto pAction::_setState() -> void { } } #endif ares-126/hiro/qt/action/action.hpp000066400000000000000000000006611415063341600171540ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { struct pAction : pObject { Declare(Action, Object) auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; auto _parentMenu() -> maybe; auto _parentMenuBar() -> maybe; auto _parentPopupMenu() -> maybe; virtual auto _setState() -> void; }; } #endif ares-126/hiro/qt/action/menu-check-item.cpp000066400000000000000000000017401415063341600206440ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) namespace hiro { auto pMenuCheckItem::construct() -> void { qtMenuCheckItem = new QtMenuCheckItem(*this); qtMenuCheckItem->setCheckable(true); qtMenuCheckItem->connect(qtMenuCheckItem, SIGNAL(triggered()), SLOT(onToggle())); if(auto parent = _parentMenu()) { parent->qtMenu->addAction(qtMenuCheckItem); } if(auto parent = _parentPopupMenu()) { parent->qtPopupMenu->addAction(qtMenuCheckItem); } _setState(); } auto pMenuCheckItem::destruct() -> void { delete qtMenuCheckItem; qtMenuCheckItem = nullptr; } auto pMenuCheckItem::setChecked(bool checked) -> void { _setState(); } auto pMenuCheckItem::setText(const string& text) -> void { _setState(); } auto pMenuCheckItem::_setState() -> void { qtMenuCheckItem->setChecked(state().checked); qtMenuCheckItem->setText(QString::fromUtf8(state().text)); } auto QtMenuCheckItem::onToggle() -> void { p.state().checked = isChecked(); p.self().doToggle(); } } #endif ares-126/hiro/qt/action/menu-check-item.hpp000066400000000000000000000004571415063341600206550ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) namespace hiro { struct pMenuCheckItem : pAction { Declare(MenuCheckItem, Action) auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; auto _setState() -> void override; QtMenuCheckItem* qtMenuCheckItem = nullptr; }; } #endif ares-126/hiro/qt/action/menu-item.cpp000066400000000000000000000015331415063341600175710ustar00rootroot00000000000000#if defined(Hiro_MenuItem) namespace hiro { auto pMenuItem::construct() -> void { qtMenuItem = new QtMenuItem(*this); qtMenuItem->connect(qtMenuItem, SIGNAL(triggered()), SLOT(onActivate())); if(auto parent = _parentMenu()) { parent->qtMenu->addAction(qtMenuItem); } if(auto parent = _parentPopupMenu()) { parent->qtPopupMenu->addAction(qtMenuItem); } _setState(); } auto pMenuItem::destruct() -> void { delete qtMenuItem; qtMenuItem = nullptr; } auto pMenuItem::setIcon(const image& icon, bool force) -> void { _setState(); } auto pMenuItem::setText(const string& text) -> void { _setState(); } auto pMenuItem::_setState() -> void { qtMenuItem->setIcon(CreateIcon(state().icon)); qtMenuItem->setText(QString::fromUtf8(state().text)); } auto QtMenuItem::onActivate() -> void { p.self().doActivate(); } } #endif ares-126/hiro/qt/action/menu-item.hpp000066400000000000000000000004541415063341600175770ustar00rootroot00000000000000#if defined(Hiro_MenuItem) namespace hiro { struct pMenuItem : pAction { Declare(MenuItem, Action) auto setIcon(const image& icon, bool force = false) -> void; auto setText(const string& text) -> void; auto _setState() -> void override; QtMenuItem* qtMenuItem = nullptr; }; } #endif ares-126/hiro/qt/action/menu-radio-item.cpp000066400000000000000000000040161415063341600206640ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) namespace hiro { auto pMenuRadioItem::construct() -> void { qtMenuRadioItem = new QtMenuRadioItem(*this); qtActionGroup = new QActionGroup(nullptr); qtMenuRadioItem->setCheckable(true); qtMenuRadioItem->setActionGroup(qtActionGroup); qtMenuRadioItem->setChecked(true); qtMenuRadioItem->connect(qtMenuRadioItem, SIGNAL(triggered()), SLOT(onActivate())); if(auto parent = _parentMenu()) { parent->qtMenu->addAction(qtMenuRadioItem); } if(auto parent = _parentPopupMenu()) { parent->qtPopupMenu->addAction(qtMenuRadioItem); } setGroup(state().group); _setState(); } auto pMenuRadioItem::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtMenuRadioItem; delete qtActionGroup; qtMenuRadioItem = nullptr; qtActionGroup = nullptr; } auto pMenuRadioItem::setChecked() -> void { _setState(); } auto pMenuRadioItem::setGroup(sGroup group) -> void { bool first = true; if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto menuRadioItem = dynamic_cast(object.data())) { if(auto self = menuRadioItem->self()) { self->qtMenuRadioItem->setChecked(menuRadioItem->state.checked = first); first = false; } } } } } _setState(); } auto pMenuRadioItem::setText(const string& text) -> void { _setState(); } auto pMenuRadioItem::_setState() -> void { if(auto& group = state().group) { if(auto object = group->object(0)) { if(auto menuRadioItem = dynamic_cast(object.data())) { if(auto self = menuRadioItem->self()) { qtMenuRadioItem->setActionGroup(self->qtActionGroup); } } } } qtMenuRadioItem->setChecked(state().checked); qtMenuRadioItem->setText(QString::fromUtf8(state().text)); } auto QtMenuRadioItem::onActivate() -> void { if(p.state().checked) return; p.self().setChecked(); p.self().doActivate(); } } #endif ares-126/hiro/qt/action/menu-radio-item.hpp000066400000000000000000000005631415063341600206740ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) namespace hiro { struct pMenuRadioItem : pAction { Declare(MenuRadioItem, Action) auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setText(const string& text) -> void; auto _setState() -> void override; QtMenuRadioItem* qtMenuRadioItem = nullptr; QActionGroup* qtActionGroup = nullptr; }; } #endif ares-126/hiro/qt/action/menu-separator.cpp000066400000000000000000000007341415063341600206350ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { auto pMenuSeparator::construct() -> void { qtMenuSeparator = new QAction(nullptr); qtMenuSeparator->setSeparator(true); if(auto parent = _parentMenu()) { parent->qtMenu->addAction(qtMenuSeparator); } if(auto parent = _parentPopupMenu()) { parent->qtPopupMenu->addAction(qtMenuSeparator); } } auto pMenuSeparator::destruct() -> void { delete qtMenuSeparator; qtMenuSeparator = nullptr; } } #endif ares-126/hiro/qt/action/menu-separator.hpp000066400000000000000000000002531415063341600206360ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { struct pMenuSeparator : pAction { Declare(MenuSeparator, Action) QAction* qtMenuSeparator = nullptr; }; } #endif ares-126/hiro/qt/action/menu.cpp000066400000000000000000000022501415063341600166320ustar00rootroot00000000000000#if defined(Hiro_Menu) namespace hiro { auto pMenu::construct() -> void { qtMenu = new QMenu; if(auto parent = _parentMenu()) { parent->qtMenu->addMenu(qtMenu); } if(auto parent = _parentMenuBar()) { if(auto window = parent->_parent()) { window->qtMenuBar->addMenu(qtMenu); } } if(auto parent = _parentPopupMenu()) { parent->qtPopupMenu->addMenu(qtMenu); } _setState(); } auto pMenu::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtMenu; qtMenu = nullptr; } auto pMenu::append(sAction action) -> void { } auto pMenu::remove(sAction action) -> void { } auto pMenu::setIcon(const image& icon, bool force) -> void { _setState(); } auto pMenu::setText(const string& text) -> void { _setState(); } auto pMenu::_setState() -> void { qtMenu->setEnabled(self().enabled()); qtMenu->setFont(pFont::create(self().font(true))); qtMenu->setIcon(CreateIcon(state().icon)); qtMenu->setTitle(QString::fromUtf8(state().text)); qtMenu->menuAction()->setVisible(self().visible()); for(auto& action : state().actions) { if(auto self = action->self()) self->setFont(action->font(true)); } } } #endif ares-126/hiro/qt/action/menu.hpp000066400000000000000000000005541415063341600166440ustar00rootroot00000000000000#if defined(Hiro_Menu) namespace hiro { struct pMenu : public pAction { Declare(Menu, Action) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setIcon(const image& icon, bool force = false) -> void; auto setText(const string& text) -> void; auto _setState() -> void override; QMenu* qtMenu = nullptr; }; } #endif ares-126/hiro/qt/application.cpp000066400000000000000000000076751415063341600167340ustar00rootroot00000000000000#if defined(Hiro_Application) namespace hiro { auto pApplication::exit() -> void { quit(); ::exit(EXIT_SUCCESS); } auto pApplication::modal() -> bool { return Application::state().modal > 0; } auto pApplication::run() -> void { if(Application::state().onMain) { while(!Application::state().quit) { Application::doMain(); processEvents(); } } else { QApplication::exec(); } } auto pApplication::pendingEvents() -> bool { return QApplication::hasPendingEvents(); } auto pApplication::processEvents() -> void { while(pendingEvents()) QApplication::processEvents(); } auto pApplication::quit() -> void { QApplication::quit(); qtApplication = nullptr; //note: deleting QApplication will crash libQtGui if(state().display) { if(state().screenSaverXDG && state().screenSaverWindow) { //this needs to run synchronously, so that XUnmapWindow() won't happen before xdg-screensaver is finished execute("xdg-screensaver", "resume", string{"0x", hex(state().screenSaverWindow)}); XUnmapWindow(state().display, state().screenSaverWindow); state().screenSaverWindow = 0; } XCloseDisplay(state().display); state().display = nullptr; } } auto pApplication::setScreenSaver(bool screenSaver) -> void { #if defined(DISPLAY_XORG) if(state().screenSaverXDG && state().screenSaverWindow) { //when invoking this command on Linux under Xfce, the follow message is written to the terminal: //"org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.SessionManager was not provided by any .service files" //to silence this message, stdout and stderr are redirected to /dev/null while invoking this command. auto fd = open("/dev/null", O_NONBLOCK); auto fo = dup(STDOUT_FILENO); auto fe = dup(STDERR_FILENO); dup2(fd, STDOUT_FILENO); dup2(fd, STDERR_FILENO); invoke("xdg-screensaver", screenSaver ? "resume" : "suspend", string{"0x", hex(state().screenSaverWindow)}); dup2(fo, STDOUT_FILENO); dup2(fe, STDERR_FILENO); close(fd); close(fo); close(fe); } #endif } auto pApplication::state() -> State& { static State state; return state; } //this is sadly necessary for things like determining window frame geometry //obviously, it is used as sparingly as possible auto pApplication::synchronize() -> void { for(auto n : range(8)) { #if HIRO_QT==4 && defined(DISPLAY_XORG) QApplication::syncX(); #elif HIRO_QT==5 QApplication::sync(); #endif Application::processEvents(); usleep(2000); } } auto pApplication::initialize() -> void { #if HIRO_QT==5 && defined(PLATFORM_BSD) setenv("QTCOMPOSE", "/usr/local/lib/X11/locale/", 0); #endif #if defined(DISPLAY_XORG) XInitThreads(); state().display = XOpenDisplay(nullptr); state().screenSaverXDG = (bool)execute("xdg-screensaver", "--version").output.find("xdg-screensaver"); if(state().screenSaverXDG) { auto screen = DefaultScreen(state().display); auto rootWindow = RootWindow(state().display, screen); XSetWindowAttributes attributes{}; attributes.background_pixel = BlackPixel(state().display, screen); attributes.border_pixel = 0; attributes.override_redirect = true; state().screenSaverWindow = XCreateWindow(state().display, rootWindow, 0, 0, 1, 1, 0, DefaultDepth(state().display, screen), InputOutput, DefaultVisual(state().display, screen), CWBackPixel | CWBorderPixel | CWOverrideRedirect, &attributes ); XStoreName(state().display, state().screenSaverWindow, "hiro-screen-saver-window"); XFlush(state().display); } #endif static auto name = Application::state().name ? Application::state().name : string{"hiro"}; //QApplication stores references to argc; //and will access them after pApplication::initialize() returns static int argc = 1; static char* argv[] = {name.get(), nullptr}; static char** argvp = argv; qtApplication = new QApplication(argc, argvp); pKeyboard::initialize(); } } #endif ares-126/hiro/qt/application.hpp000066400000000000000000000012311415063341600167170ustar00rootroot00000000000000#if defined(Hiro_Application) namespace hiro { struct pApplication { static auto exit() -> void; static auto modal() -> bool; static auto run() -> void; static auto pendingEvents() -> bool; static auto processEvents() -> void; static auto quit() -> void; static auto setScreenSaver(bool screenSaver) -> void; static auto initialize() -> void; static auto synchronize() -> void; struct State { #if defined(DISPLAY_XORG) XlibDisplay* display = nullptr; XlibWindow screenSaverWindow = 0; bool screenSaverXDG = false; #endif }; static auto state() -> State&; }; static QApplication* qtApplication = nullptr; } #endif ares-126/hiro/qt/browser-window.cpp000066400000000000000000000033011415063341600173770ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { auto pBrowserWindow::directory(BrowserWindow::State& state) -> string { QString directory = QFileDialog::getExistingDirectory( state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : "Select Directory", QString::fromUtf8(state.path), QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks ); string name = directory.toUtf8().constData(); if(name && name.endsWith("/") == false) name.append("/"); return name; } auto pBrowserWindow::open(BrowserWindow::State& state) -> string { string filters; for(auto& filter : state.filters) { auto part = filter.split("|", 1L); if(part.size() != 2) continue; filters.append(part[0], " (", part[1].transform(":", " "), ");;"); } filters.trimRight(";;", 1L); QString filename = QFileDialog::getOpenFileName( state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : "Open File", QString::fromUtf8(state.path), QString::fromUtf8(filters) ); return filename.toUtf8().constData(); } auto pBrowserWindow::save(BrowserWindow::State& state) -> string { string filters; for(auto& filter : state.filters) { auto part = filter.split("|", 1L); if(part.size() != 2) continue; filters.append(part[0], " (", part[1].transform(":", " "), ");;"); } filters.trimRight(";;", 1L); QString filename = QFileDialog::getSaveFileName( state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : "Save File", QString::fromUtf8(state.path), QString::fromUtf8(filters) ); return filename.toUtf8().constData(); } } #endif ares-126/hiro/qt/browser-window.hpp000066400000000000000000000004171415063341600174110ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { struct pBrowserWindow { static auto directory(BrowserWindow::State& state) -> string; static auto open(BrowserWindow::State& state) -> string; static auto save(BrowserWindow::State& state) -> string; }; } #endif ares-126/hiro/qt/desktop.cpp000066400000000000000000000037771415063341600161010ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { auto pDesktop::size() -> Size { #if defined(DISPLAY_WINDOWS) return {GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN)}; #elif defined(DISPLAY_XORG) auto display = XOpenDisplay(nullptr); s32 screen = DefaultScreen(display); XWindowAttributes attributes; XGetWindowAttributes(display, RootWindow(display, screen), &attributes); XCloseDisplay(display); return {attributes.width, attributes.height}; #else //this only returns the geometry of the primary monitor rather than the entire desktop QRect rect = QApplication::desktop()->screenGeometry(); return {rect.width(), rect.height()}; #endif } auto pDesktop::workspace() -> Geometry { #if defined(DISPLAY_WINDOWS) RECT rc; SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0); return {rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top}; #elif defined(DISPLAY_XORG) auto display = XOpenDisplay(nullptr); s32 screen = DefaultScreen(display); s32 format; unsigned char* data = nullptr; unsigned long items, after; XlibAtom returnAtom; XlibAtom netWorkarea = XInternAtom(display, "_NET_WORKAREA", XlibTrue); s32 result = XGetWindowProperty( display, RootWindow(display, screen), netWorkarea, 0, 4, XlibFalse, XInternAtom(display, "CARDINAL", XlibTrue), &returnAtom, &format, &items, &after, &data ); XlibAtom cardinal = XInternAtom(display, "CARDINAL", XlibTrue); if(result == Success && returnAtom == cardinal && format == 32 && items == 4) { unsigned long* workarea = (unsigned long*)data; XCloseDisplay(display); return {(s32)workarea[0], (s32)workarea[1], (s32)workarea[2], (s32)workarea[3]}; } XCloseDisplay(display); auto size = Desktop::size(); return {0, 0, size.width(), size.height()}; #else //this only returns the workspace of the primary monitor rather than the entire desktop QRect rect = QApplication::desktop()->availableGeometry(); return {rect.x(), rect.y(), rect.width(), rect.height()}; #endif } } #endif ares-126/hiro/qt/desktop.hpp000066400000000000000000000002221415063341600160640ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { struct pDesktop { static auto size() -> Size; static auto workspace() -> Geometry; }; } #endif ares-126/hiro/qt/font.cpp000066400000000000000000000017601415063341600153640ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { auto pFont::size(const Font& font, const string& text) -> Size { return pFont::size(pFont::create(font), text); } auto pFont::size(const QFont& qtFont, const string& text) -> Size { QFontMetrics metrics(qtFont); s32 maxWidth = 0; auto lines = text.split("\n"); for(auto& line : lines) { maxWidth = max(maxWidth, metrics.width(QString::fromUtf8(line))); } return {maxWidth, metrics.height() * (signed)lines.size()}; } auto pFont::family(const string& family) -> QString { if(family == Font::Sans ) return "Sans"; if(family == Font::Serif) return "Serif"; if(family == Font::Mono ) return "Liberation Mono"; return family ? QString::fromUtf8(family) : "Sans"; } auto pFont::create(const Font& font) -> QFont { QFont qtFont; qtFont.setFamily(family(font.family())); qtFont.setPointSize(Application::scale(font.size() ? font.size() : 8)); qtFont.setBold(font.bold()); qtFont.setItalic(font.italic()); return qtFont; } } #endif ares-126/hiro/qt/font.hpp000066400000000000000000000004661415063341600153730ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { struct pFont { static auto size(const Font& font, const string& text) -> Size; static auto size(const QFont& qtFont, const string& text) -> Size; static auto family(const string& family) -> QString; static auto create(const Font& font) -> QFont; }; } #endif ares-126/hiro/qt/group.cpp000066400000000000000000000002001415063341600155360ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { auto pGroup::construct() -> void { } auto pGroup::destruct() -> void { } } #endif ares-126/hiro/qt/group.hpp000066400000000000000000000001541415063341600155530ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { struct pGroup : pObject { Declare(Group, Object) }; } #endif ares-126/hiro/qt/header.hpp000066400000000000000000000011031415063341600156420ustar00rootroot00000000000000#include #include #if HIRO_QT==5 #include #endif #undef foreach #include #define XK_MISCELLANY #define XK_LATIN1 #include #include #undef XK_MISCELLANY #undef XK_LATIN1 #include //Qt 4.8.0 and earlier improperly define the QLOCATION macro //in C++11, it is detected as a malformed user-defined literal //below is a workaround to fix compilation errors caused by this #if HIRO_QT==4 #undef QLOCATION #define QLOCATION "\0" __FILE__ ":" QTOSTRING(__LINE__) #endif ares-126/hiro/qt/keyboard.cpp000066400000000000000000000027131415063341600162150ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { auto pKeyboard::poll() -> vector { if(Application::state().quit) return {}; vector result; char state[256]; #if defined(DISPLAY_XORG) XQueryKeymap(pApplication::state().display, state); #endif for(auto& code : settings.keycodes) { result.append(_pressed(state, code)); } return result; } auto pKeyboard::pressed(unsigned code) -> bool { char state[256]; #if defined(DISPLAY_XORG) XQueryKeymap(pApplication::state().display, state); #endif return _pressed(state, code); } auto pKeyboard::_pressed(const char* state, u16 code) -> bool { u8 lo = code >> 0; u8 hi = code >> 8; #if defined(DISPLAY_XORG) if(lo && state[lo >> 3] & (1 << (lo & 7))) return true; if(hi && state[hi >> 3] & (1 << (hi & 7))) return true; #endif return false; } auto pKeyboard::initialize() -> void { auto append = [](u32 lo, u32 hi = 0) { #if defined(DISPLAY_XORG) lo = lo ? (u8)XKeysymToKeycode(pApplication::state().display, lo) : 0; hi = hi ? (u8)XKeysymToKeycode(pApplication::state().display, hi) : 0; #endif settings.keycodes.append(lo << 0 | hi << 8); }; #define map(name, ...) if(key == name) { append(__VA_ARGS__); continue; } for(auto& key : Keyboard::keys) { #if defined(DISPLAY_XORG) #include #endif //print("[hiro/qt] warning: unhandled key: ", key, "\n"); append(0); } #undef map } } #endif ares-126/hiro/qt/keyboard.hpp000066400000000000000000000004011415063341600162120ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { struct pKeyboard { static auto poll() -> vector; static auto pressed(u32 code) -> bool; static auto _pressed(const char* state, u16 code) -> bool; static auto initialize() -> void; }; } #endif ares-126/hiro/qt/menu-bar.cpp000066400000000000000000000014471415063341600161260ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { auto pMenuBar::construct() -> void { _setState(); } auto pMenuBar::destruct() -> void { } auto pMenuBar::append(sMenu menu) -> void { } auto pMenuBar::remove(sMenu menu) -> void { } auto pMenuBar::setEnabled(bool enabled) -> void { _setState(); } auto pMenuBar::setFont(const Font& font) -> void { _setState(); } auto pMenuBar::setVisible(bool visible) -> void { _setState(); } auto pMenuBar::_parent() -> maybe { if(auto parent = self().parentWindow()) { if(auto self = parent->self()) return *self; } return nothing; } auto pMenuBar::_setState() -> void { if(auto parent = _parent()) { parent->qtMenuBar->setFont(pFont::create(self().font(true))); parent->qtMenuBar->setVisible(self().visible()); } } } #endif ares-126/hiro/qt/menu-bar.hpp000066400000000000000000000006221415063341600161250ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { struct pMenuBar : pObject { Declare(MenuBar, Object) auto append(sMenu menu) -> void; auto remove(sMenu menu) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/qt/message-window.cpp000066400000000000000000000056351415063341600173540ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { static auto MessageWindow_buttons(MessageWindow::Buttons buttons) -> QMessageBox::StandardButtons { QMessageBox::StandardButtons standardButtons = QMessageBox::NoButton; if(buttons == MessageWindow::Buttons::Ok) standardButtons = QMessageBox::Ok; if(buttons == MessageWindow::Buttons::OkCancel) standardButtons = QMessageBox::Ok | QMessageBox::Cancel; if(buttons == MessageWindow::Buttons::YesNo) standardButtons = QMessageBox::Yes | QMessageBox::No; if(buttons == MessageWindow::Buttons::YesNoCancel) standardButtons = QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel; return standardButtons; } static auto MessageWindow_response(MessageWindow::Buttons buttons, QMessageBox::StandardButton response) -> MessageWindow::Response { if(response == QMessageBox::Ok) return MessageWindow::Response::Ok; if(response == QMessageBox::Cancel) return MessageWindow::Response::Cancel; if(response == QMessageBox::Yes) return MessageWindow::Response::Yes; if(response == QMessageBox::No) return MessageWindow::Response::No; //MessageWindow was closed via window manager, rather than by a button; assume a cancel/no response if(buttons == MessageWindow::Buttons::Ok) return MessageWindow::Response::Ok; if(buttons == MessageWindow::Buttons::OkCancel) return MessageWindow::Response::Cancel; if(buttons == MessageWindow::Buttons::YesNo) return MessageWindow::Response::No; if(buttons == MessageWindow::Buttons::YesNoCancel) return MessageWindow::Response::Cancel; throw; } auto pMessageWindow::error(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_response( state.buttons, QMessageBox::critical(state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : " ", QString::fromUtf8(state.text), MessageWindow_buttons(state.buttons)) ); } auto pMessageWindow::information(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_response( state.buttons, QMessageBox::information(state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : " ", QString::fromUtf8(state.text), MessageWindow_buttons(state.buttons)) ); } auto pMessageWindow::question(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_response( state.buttons, QMessageBox::question(state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : " ", QString::fromUtf8(state.text), MessageWindow_buttons(state.buttons)) ); } auto pMessageWindow::warning(MessageWindow::State& state) -> MessageWindow::Response { return MessageWindow_response( state.buttons, QMessageBox::warning(state.parent ? state.parent->self()->qtWindow : nullptr, state.title ? QString::fromUtf8(state.title) : " ", QString::fromUtf8(state.text), MessageWindow_buttons(state.buttons)) ); } } #endif ares-126/hiro/qt/message-window.hpp000066400000000000000000000006301415063341600173470ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { struct pMessageWindow { static auto error(MessageWindow::State& state) -> MessageWindow::Response; static auto information(MessageWindow::State& state) -> MessageWindow::Response; static auto question(MessageWindow::State& state) -> MessageWindow::Response; static auto warning(MessageWindow::State& state) -> MessageWindow::Response; }; } #endif ares-126/hiro/qt/monitor.cpp000066400000000000000000000014451415063341600161050ustar00rootroot00000000000000#if defined(Hiro_Monitor) namespace hiro { auto pMonitor::count() -> u32 { return QApplication::desktop()->screenCount(); } auto pMonitor::dpi(u32 monitor) -> Position { //Qt does not support per-monitor DPI retrieval return { QApplication::desktop()->logicalDpiX(), QApplication::desktop()->logicalDpiY() }; } auto pMonitor::geometry(u32 monitor) -> Geometry { QRect rectangle = QApplication::desktop()->screenGeometry(monitor); return {rectangle.x(), rectangle.y(), rectangle.width(), rectangle.height()}; } auto pMonitor::primary() -> u32 { return QApplication::desktop()->primaryScreen(); } auto pMonitor::workspace(u32 monitor) -> Geometry { if(Monitor::count() == 1) { return Desktop::workspace(); } else { return Monitor::geometry(monitor); } } } #endif ares-126/hiro/qt/monitor.hpp000066400000000000000000000004331415063341600161060ustar00rootroot00000000000000#if defined(Hiro_Monitor) namespace hiro { struct pMonitor { static auto count() -> uint; static auto dpi(u32 monitor) -> Position; static auto geometry(u32 monitor) -> Geometry; static auto primary() -> u32; static auto workspace(u32 monitor) -> Geometry; }; } #endif ares-126/hiro/qt/mouse.cpp000066400000000000000000000007641415063341600155510ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { auto pMouse::position() -> Position { QPoint point = QCursor::pos(); return {point.x(), point.y()}; } auto pMouse::pressed(Mouse::Button button) -> bool { Qt::MouseButtons buttons = QApplication::mouseButtons(); switch(button) { case Mouse::Button::Left: return buttons & Qt::LeftButton; case Mouse::Button::Middle: return buttons & Qt::MidButton; case Mouse::Button::Right: return buttons & Qt::RightButton; } return false; } } #endif ares-126/hiro/qt/mouse.hpp000066400000000000000000000002441415063341600155470ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { struct pMouse { static auto position() -> Position; static auto pressed(Mouse::Button button) -> bool; }; } #endif ares-126/hiro/qt/object.cpp000066400000000000000000000007121415063341600156600ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { auto pObject::construct() -> void { } auto pObject::destruct() -> void { } auto pObject::focused() const -> bool { return false; } auto pObject::remove() -> void { } auto pObject::reset() -> void { } auto pObject::setEnabled(bool enabled) -> void { } auto pObject::setFocused() -> void { } auto pObject::setFont(const Font& font) -> void { } auto pObject::setVisible(bool visible) -> void { } } #endif ares-126/hiro/qt/object.hpp000066400000000000000000000012441415063341600156660ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { struct pObject : Lock { pObject(mObject& reference) : reference(reference) {} virtual ~pObject() {} auto self() const -> mObject& { return (mObject&)reference; } auto state() const -> mObject::State& { return self().state; } virtual auto construct() -> void; virtual auto destruct() -> void; virtual auto focused() const -> bool; virtual auto remove() -> void; virtual auto reset() -> void; virtual auto setEnabled(bool enabled) -> void; virtual auto setFocused() -> void; virtual auto setFont(const Font& font) -> void; virtual auto setVisible(bool visible) -> void; mObject& reference; }; } #endif ares-126/hiro/qt/platform.cpp000066400000000000000000000034011415063341600162340ustar00rootroot00000000000000#pragma clang diagnostic push #pragma clang diagnostic ignored "-Winconsistent-missing-override" #include "qt.hpp" #include "qt.moc" #pragma clang diagnostic pop #include "platform.hpp" #include "utility.cpp" #include "settings.cpp" #include "font.cpp" #include "desktop.cpp" #include "monitor.cpp" #include "keyboard.cpp" #include "mouse.cpp" #include "browser-window.cpp" #include "message-window.cpp" #include "object.cpp" #include "group.cpp" #include "timer.cpp" #include "window.cpp" #include "status-bar.cpp" #include "menu-bar.cpp" #include "popup-menu.cpp" #include "action/action.cpp" #include "action/menu.cpp" #include "action/menu-separator.cpp" #include "action/menu-item.cpp" #include "action/menu-check-item.cpp" #include "action/menu-radio-item.cpp" #include "sizable.cpp" #include "widget/widget.cpp" #include "widget/button.cpp" #include "widget/canvas.cpp" #include "widget/check-button.cpp" #include "widget/check-label.cpp" #include "widget/combo-button.cpp" #include "widget/combo-button-item.cpp" #include "widget/frame.cpp" #include "widget/hex-edit.cpp" #include "widget/horizontal-scroll-bar.cpp" #include "widget/horizontal-slider.cpp" #include "widget/label.cpp" #include "widget/line-edit.cpp" #include "widget/progress-bar.cpp" #include "widget/radio-button.cpp" #include "widget/radio-label.cpp" #include "widget/tab-frame.cpp" #include "widget/tab-frame-item.cpp" #include "widget/table-view.cpp" #include "widget/table-view-column.cpp" #include "widget/table-view-item.cpp" #include "widget/table-view-cell.cpp" #include "widget/text-edit.cpp" #include "widget/tree-view.cpp" #include "widget/tree-view-item.cpp" #include "widget/vertical-scroll-bar.cpp" #include "widget/vertical-slider.cpp" #include "widget/viewport.cpp" #include "application.cpp" ares-126/hiro/qt/platform.hpp000066400000000000000000000070131415063341600162440ustar00rootroot00000000000000#define Declare(Name, Base) \ p##Name(m##Name& reference) : p##Base(reference) {} \ auto self() const -> m##Name& { return (m##Name&)reference; } \ auto state() const -> m##Name::State& { return self().state; } \ auto construct() -> void override; \ auto destruct() -> void override; \ #include "application.hpp" #include "settings.hpp" #include "font.hpp" #include "desktop.hpp" #include "monitor.hpp" #include "keyboard.hpp" #include "mouse.hpp" #include "browser-window.hpp" #include "message-window.hpp" #include "object.hpp" #include "group.hpp" #include "timer.hpp" #include "window.hpp" #include "status-bar.hpp" #include "menu-bar.hpp" #include "popup-menu.hpp" #include "action/action.hpp" #include "action/menu.hpp" #include "action/menu-separator.hpp" #include "action/menu-item.hpp" #include "action/menu-check-item.hpp" #include "action/menu-radio-item.hpp" #include "sizable.hpp" #include "widget/widget.hpp" #include "widget/button.hpp" #include "widget/canvas.hpp" #include "widget/check-button.hpp" #include "widget/check-label.hpp" #include "widget/combo-button.hpp" #include "widget/combo-button-item.hpp" #include "widget/frame.hpp" #include "widget/hex-edit.hpp" #include "widget/horizontal-scroll-bar.hpp" #include "widget/horizontal-slider.hpp" #include "widget/label.hpp" #include "widget/line-edit.hpp" #include "widget/progress-bar.hpp" #include "widget/radio-button.hpp" #include "widget/radio-label.hpp" #include "widget/tab-frame.hpp" #include "widget/tab-frame-item.hpp" #include "widget/table-view.hpp" #include "widget/table-view-column.hpp" #include "widget/table-view-item.hpp" #include "widget/table-view-cell.hpp" #include "widget/text-edit.hpp" #include "widget/tree-view.hpp" #include "widget/tree-view-item.hpp" #include "widget/vertical-scroll-bar.hpp" #include "widget/vertical-slider.hpp" #include "widget/viewport.hpp" namespace hiro { #if defined(Hiro_Console) struct pConsole : public QObject, public pWidget { Q_OBJECT public: Console& console; struct QtConsole : public QTextEdit { pConsole& self; void keyPressEvent(QKeyEvent*); void keyPressEventAcknowledge(QKeyEvent*); QtConsole(pConsole& self) : self(self) {} }; QtConsole* qtConsole; void print(string text); void reset(); void setBackgroundColor(Color color); void setForegroundColor(Color color); void setPrompt(string prompt); pConsole(Console& console) : pWidget(console), console(console) {} void constructor(); void destructor(); void orphan(); void keyPressEvent(QKeyEvent*); }; #endif #if defined(Hiro_IconView) struct pIconView : public QObject, public pWidget { Q_OBJECT public: IconView& iconView; struct QtListWidget : public QListWidget { void resizeEvent(QResizeEvent*); }; QtListWidget* qtIconView; void append(); void remove(unsigned selection); void reset(); void setBackgroundColor(Color color); void setFlow(Orientation flow); void setForegroundColor(Color color); void setImage(unsigned selection, const image& image); void setOrientation(Orientation orientation); void setSelected(unsigned selection, bool selected); void setSelected(const vector& selections); void setSelectedAll(); void setSelectedNone(); void setSingleSelection(bool singleSelection); void setText(unsigned selection, const string& text); pIconView(IconView& iconView) : pWidget(iconView), iconView(iconView) {} void constructor(); void destructor(); void orphan(); public slots: void onActivate(); void onChange(); void onContext(); }; #endif #undef Declare } ares-126/hiro/qt/popup-menu.cpp000066400000000000000000000013431415063341600165200ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) namespace hiro { auto pPopupMenu::construct() -> void { qtPopupMenu = new QMenu; _setState(); } auto pPopupMenu::destruct() -> void { delete qtPopupMenu; qtPopupMenu = nullptr; } auto pPopupMenu::append(sAction action) -> void { _setState(); } auto pPopupMenu::remove(sAction action) -> void { _setState(); } auto pPopupMenu::setFont(const Font& font) -> void { _setState(); } auto pPopupMenu::setVisible(bool visible) -> void { if(visible) qtPopupMenu->popup(QCursor::pos()); } auto pPopupMenu::_setState() -> void { qtPopupMenu->setFont(pFont::create(self().font(true))); for(auto& action : state().actions) { if(auto self = action->self()) self->_setState(); } } } #endif ares-126/hiro/qt/popup-menu.hpp000066400000000000000000000005521415063341600165260ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) namespace hiro { struct pPopupMenu : pObject { Declare(PopupMenu, Object) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; auto _setState() -> void; QMenu* qtPopupMenu = nullptr; }; } #endif ares-126/hiro/qt/qt.hpp000066400000000000000000000161451415063341600150520ustar00rootroot00000000000000//$(moc) -i -o qt.moc qt.hpp /* Qt requires moc in order to bind callbacks, which causes many complications. First, moc is not C++11-aware. Thus, all of the "public slots:" functions must be declared using C++98 syntax. Second, multiple inheritance with QObject (eg pWindow : QObject, pObject) seems to cause heap corruption. As such, we need to have separate classes for inheriting from QObject, which are defined in this file. Third, moc preprocessor output is required for every Q_OBJECT class. So to avoid needing to generate several .moc files, all QObject classes are placed inside this one file instead. */ #if !defined(HIRO_QT) #include "../components.hpp" #endif namespace hiro { #if defined(Hiro_Timer) struct QtTimer : public QTimer { Q_OBJECT public: QtTimer(pTimer& p) : p(p) {} pTimer& p; public slots: void onActivate(); }; #endif #if defined(Hiro_Window) struct QtWindow : public QWidget { QtWindow(pWindow& p) : p(p) {} auto closeEvent(QCloseEvent*) -> void; auto dragEnterEvent(QDragEnterEvent*) -> void; auto dropEvent(QDropEvent*) -> void; auto keyPressEvent(QKeyEvent*) -> void; auto keyReleaseEvent(QKeyEvent*) -> void; auto moveEvent(QMoveEvent*) -> void; auto resizeEvent(QResizeEvent*) -> void; auto sizeHint() const -> QSize; pWindow& p; }; #endif #if defined(Hiro_MenuItem) struct QtMenuItem : public QAction { Q_OBJECT public: QtMenuItem(pMenuItem& p) : QAction(nullptr), p(p) {} pMenuItem& p; public slots: void onActivate(); }; #endif #if defined(Hiro_MenuCheckItem) struct QtMenuCheckItem : public QAction { Q_OBJECT public: QtMenuCheckItem(pMenuCheckItem& p) : QAction(nullptr), p(p) {} pMenuCheckItem& p; public slots: void onToggle(); }; #endif #if defined(Hiro_MenuRadioItem) struct QtMenuRadioItem : public QAction { Q_OBJECT public: QtMenuRadioItem(pMenuRadioItem& p) : QAction(nullptr), p(p) {} pMenuRadioItem& p; public slots: void onActivate(); }; #endif #if defined(Hiro_Button) struct QtButton : public QToolButton { Q_OBJECT public: QtButton(pButton& p) : p(p) {} pButton& p; public slots: void onActivate(); }; #endif #if defined(Hiro_Canvas) struct QtCanvas : public QWidget { Q_OBJECT public: QtCanvas(pCanvas& p) : p(p) {} auto dragEnterEvent(QDragEnterEvent*) -> void; auto dropEvent(QDropEvent*) -> void; auto leaveEvent(QEvent*) -> void; auto mouseMoveEvent(QMouseEvent*) -> void; auto mousePressEvent(QMouseEvent*) -> void; auto mouseReleaseEvent(QMouseEvent*) -> void; auto paintEvent(QPaintEvent*) -> void; pCanvas& p; }; #endif #if defined(Hiro_CheckButton) struct QtCheckButton : public QToolButton { Q_OBJECT public: QtCheckButton(pCheckButton& p) : p(p) {} pCheckButton& p; public slots: void onToggle(bool checked); }; #endif #if defined(Hiro_CheckLabel) struct QtCheckLabel : public QCheckBox { Q_OBJECT public: QtCheckLabel(pCheckLabel& p) : p(p) {} pCheckLabel& p; public slots: void onToggle(); }; #endif #if defined(Hiro_ComboButton) struct QtComboButton : public QComboBox { Q_OBJECT public: QtComboButton(pComboButton& p) : p(p) {} pComboButton& p; public slots: void onChange(int offset); }; #endif #if defined(Hiro_HexEdit) struct QtHexEdit : public QTextEdit { Q_OBJECT public: QtHexEdit(pHexEdit& p) : p(p) {} auto keyPressEvent(QKeyEvent*) -> void; auto keyPressEventAcknowledge(QKeyEvent*) -> void; auto wheelEvent(QWheelEvent*) -> void; pHexEdit& p; }; struct QtHexEditScrollBar : public QScrollBar { Q_OBJECT public: QtHexEditScrollBar(pHexEdit& p) : p(p) {} auto event(QEvent*) -> bool; pHexEdit& p; public slots: void onScroll(); }; #endif #if defined(Hiro_HorizontalScrollBar) struct QtHorizontalScrollBar : public QScrollBar { Q_OBJECT public: QtHorizontalScrollBar(pHorizontalScrollBar& p) : QScrollBar(Qt::Horizontal), p(p) {} pHorizontalScrollBar& p; public slots: void onChange(); }; #endif #if defined(Hiro_HorizontalSlider) struct QtHorizontalSlider : public QSlider { Q_OBJECT public: QtHorizontalSlider(pHorizontalSlider& p) : QSlider(Qt::Horizontal), p(p) {} pHorizontalSlider& p; public slots: void onChange(); }; #endif #if defined(Hiro_Label) struct QtLabel : public QWidget { Q_OBJECT public: QtLabel(pLabel& p) : p(p) {} auto mousePressEvent(QMouseEvent*) -> void; auto mouseReleaseEvent(QMouseEvent*) -> void; auto paintEvent(QPaintEvent*) -> void; pLabel& p; }; #endif #if defined(Hiro_LineEdit) struct QtLineEdit : public QLineEdit { Q_OBJECT public: QtLineEdit(pLineEdit& p) : p(p) {} pLineEdit& p; public slots: void onActivate(); void onChange(); }; #endif #if defined(Hiro_RadioLabel) struct QtRadioLabel : public QRadioButton { Q_OBJECT public: QtRadioLabel(pRadioLabel& p) : p(p) {} pRadioLabel& p; public slots: void onActivate(); }; #endif #if defined(Hiro_RadioButton) struct QtRadioButton : public QToolButton { Q_OBJECT public: QtRadioButton(pRadioButton& p) : p(p) {} pRadioButton& p; public slots: void onActivate(); }; #endif #if defined(Hiro_TabFrame) struct QtTabFrame : public QTabWidget { Q_OBJECT public: QtTabFrame(pTabFrame& p) : p(p) {} pTabFrame& p; auto showEvent(QShowEvent*) -> void override; public slots: void onChange(int selection); }; #endif #if defined(Hiro_TableView) struct QtTableView : public QTreeWidget { Q_OBJECT public: QtTableView(pTableView& p) : p(p) {} auto mousePressEvent(QMouseEvent*) -> void override; auto resizeEvent(QResizeEvent*) -> void override; auto showEvent(QShowEvent*) -> void override; pTableView& p; public slots: void onActivate(QTreeWidgetItem* item, int column); void onChange(); void onContext(const QPoint&); void onSort(int column); void onToggle(QTreeWidgetItem* item, int column); }; struct QtTableViewDelegate : public QStyledItemDelegate { QtTableViewDelegate(pTableView& p); auto paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const -> void; pTableView& p; }; #endif #if defined(Hiro_TextEdit) struct QtTextEdit : public QTextEdit { Q_OBJECT public: QtTextEdit(pTextEdit& p) : p(p) {} pTextEdit& p; public slots: void onChange(); }; #endif #if defined(Hiro_TreeView) struct QtTreeView : public QTreeView { Q_OBJECT public: QtTreeView(pTreeView& p) : p(p) {} pTreeView& p; }; #endif #if defined(Hiro_VerticalScrollBar) struct QtVerticalScrollBar : public QScrollBar { Q_OBJECT public: QtVerticalScrollBar(pVerticalScrollBar& p) : QScrollBar(Qt::Vertical), p(p) {} pVerticalScrollBar& p; public slots: void onChange(); }; #endif #if defined(Hiro_VerticalSlider) struct QtVerticalSlider : public QSlider { Q_OBJECT public: QtVerticalSlider(pVerticalSlider& p) : QSlider(Qt::Vertical), p(p) {} pVerticalSlider& p; public slots: void onChange(); }; #endif #if defined(Hiro_Viewport) struct QtViewport : public QWidget { Q_OBJECT public: QtViewport(pViewport& p) : p(p) {} auto dragEnterEvent(QDragEnterEvent*) -> void; auto dropEvent(QDropEvent*) -> void; auto leaveEvent(QEvent*) -> void; auto mouseMoveEvent(QMouseEvent*) -> void; auto mousePressEvent(QMouseEvent*) -> void; auto mouseReleaseEvent(QMouseEvent*) -> void; pViewport& p; }; #endif } ares-126/hiro/qt/qt.moc000066400000000000000000001430111415063341600150320ustar00rootroot00000000000000/**************************************************************************** ** Meta object code from reading C++ file 'qt.hpp' ** ** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.7) ** ** WARNING! All changes made in this file will be lost! *****************************************************************************/ #if !defined(Q_MOC_OUTPUT_REVISION) #error "The header file 'qt.hpp' doesn't include ." #elif Q_MOC_OUTPUT_REVISION != 63 #error "This file was generated using the moc from 4.8.7. It" #error "cannot be used with the include files from this version of Qt." #error "(The moc has changed too much.)" #endif QT_BEGIN_MOC_NAMESPACE static const uint qt_meta_data_hiro__QtTimer[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 14, 27, 27, 27, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtTimer[] = { "hiro::QtTimer\0onActivate()\0\0" }; void hiro::QtTimer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtTimer *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtTimer::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtTimer::staticMetaObject = { { &QTimer::staticMetaObject, qt_meta_stringdata_hiro__QtTimer, qt_meta_data_hiro__QtTimer, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtTimer::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtTimer::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtTimer::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtTimer)) return static_cast(const_cast< QtTimer*>(this)); return QTimer::qt_metacast(_clname); } int hiro::QtTimer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTimer::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtMenuItem[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 17, 30, 30, 30, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtMenuItem[] = { "hiro::QtMenuItem\0onActivate()\0\0" }; void hiro::QtMenuItem::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtMenuItem *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtMenuItem::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtMenuItem::staticMetaObject = { { &QAction::staticMetaObject, qt_meta_stringdata_hiro__QtMenuItem, qt_meta_data_hiro__QtMenuItem, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtMenuItem::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtMenuItem::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtMenuItem::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtMenuItem)) return static_cast(const_cast< QtMenuItem*>(this)); return QAction::qt_metacast(_clname); } int hiro::QtMenuItem::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAction::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtMenuCheckItem[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 22, 33, 33, 33, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtMenuCheckItem[] = { "hiro::QtMenuCheckItem\0onToggle()\0\0" }; void hiro::QtMenuCheckItem::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtMenuCheckItem *_t = static_cast(_o); switch (_id) { case 0: _t->onToggle(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtMenuCheckItem::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtMenuCheckItem::staticMetaObject = { { &QAction::staticMetaObject, qt_meta_stringdata_hiro__QtMenuCheckItem, qt_meta_data_hiro__QtMenuCheckItem, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtMenuCheckItem::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtMenuCheckItem::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtMenuCheckItem::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtMenuCheckItem)) return static_cast(const_cast< QtMenuCheckItem*>(this)); return QAction::qt_metacast(_clname); } int hiro::QtMenuCheckItem::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAction::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtMenuRadioItem[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 22, 35, 35, 35, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtMenuRadioItem[] = { "hiro::QtMenuRadioItem\0onActivate()\0\0" }; void hiro::QtMenuRadioItem::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtMenuRadioItem *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtMenuRadioItem::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtMenuRadioItem::staticMetaObject = { { &QAction::staticMetaObject, qt_meta_stringdata_hiro__QtMenuRadioItem, qt_meta_data_hiro__QtMenuRadioItem, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtMenuRadioItem::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtMenuRadioItem::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtMenuRadioItem::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtMenuRadioItem)) return static_cast(const_cast< QtMenuRadioItem*>(this)); return QAction::qt_metacast(_clname); } int hiro::QtMenuRadioItem::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QAction::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtButton[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 15, 28, 28, 28, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtButton[] = { "hiro::QtButton\0onActivate()\0\0" }; void hiro::QtButton::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtButton *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtButton::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtButton::staticMetaObject = { { &QToolButton::staticMetaObject, qt_meta_stringdata_hiro__QtButton, qt_meta_data_hiro__QtButton, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtButton::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtButton::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtButton::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtButton)) return static_cast(const_cast< QtButton*>(this)); return QToolButton::qt_metacast(_clname); } int hiro::QtButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QToolButton::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtCanvas[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 0, 0, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount 0 // eod }; static const char qt_meta_stringdata_hiro__QtCanvas[] = { "hiro::QtCanvas\0" }; void hiro::QtCanvas::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { Q_UNUSED(_o); Q_UNUSED(_id); Q_UNUSED(_c); Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtCanvas::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtCanvas::staticMetaObject = { { &QWidget::staticMetaObject, qt_meta_stringdata_hiro__QtCanvas, qt_meta_data_hiro__QtCanvas, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtCanvas::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtCanvas::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtCanvas::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtCanvas)) return static_cast(const_cast< QtCanvas*>(this)); return QWidget::qt_metacast(_clname); } int hiro::QtCanvas::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; return _id; } static const uint qt_meta_data_hiro__QtCheckButton[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 20, 35, 43, 43, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtCheckButton[] = { "hiro::QtCheckButton\0onToggle(bool)\0" "checked\0\0" }; void hiro::QtCheckButton::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtCheckButton *_t = static_cast(_o); switch (_id) { case 0: _t->onToggle((*reinterpret_cast< bool(*)>(_a[1]))); break; default: ; } } } const QMetaObjectExtraData hiro::QtCheckButton::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtCheckButton::staticMetaObject = { { &QToolButton::staticMetaObject, qt_meta_stringdata_hiro__QtCheckButton, qt_meta_data_hiro__QtCheckButton, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtCheckButton::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtCheckButton::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtCheckButton::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtCheckButton)) return static_cast(const_cast< QtCheckButton*>(this)); return QToolButton::qt_metacast(_clname); } int hiro::QtCheckButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QToolButton::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtCheckLabel[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 19, 30, 30, 30, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtCheckLabel[] = { "hiro::QtCheckLabel\0onToggle()\0\0" }; void hiro::QtCheckLabel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtCheckLabel *_t = static_cast(_o); switch (_id) { case 0: _t->onToggle(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtCheckLabel::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtCheckLabel::staticMetaObject = { { &QCheckBox::staticMetaObject, qt_meta_stringdata_hiro__QtCheckLabel, qt_meta_data_hiro__QtCheckLabel, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtCheckLabel::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtCheckLabel::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtCheckLabel::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtCheckLabel)) return static_cast(const_cast< QtCheckLabel*>(this)); return QCheckBox::qt_metacast(_clname); } int hiro::QtCheckLabel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QCheckBox::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtComboButton[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 20, 34, 41, 41, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtComboButton[] = { "hiro::QtComboButton\0onChange(int)\0" "offset\0\0" }; void hiro::QtComboButton::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtComboButton *_t = static_cast(_o); switch (_id) { case 0: _t->onChange((*reinterpret_cast< int(*)>(_a[1]))); break; default: ; } } } const QMetaObjectExtraData hiro::QtComboButton::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtComboButton::staticMetaObject = { { &QComboBox::staticMetaObject, qt_meta_stringdata_hiro__QtComboButton, qt_meta_data_hiro__QtComboButton, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtComboButton::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtComboButton::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtComboButton::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtComboButton)) return static_cast(const_cast< QtComboButton*>(this)); return QComboBox::qt_metacast(_clname); } int hiro::QtComboButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QComboBox::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtHexEdit[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 0, 0, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount 0 // eod }; static const char qt_meta_stringdata_hiro__QtHexEdit[] = { "hiro::QtHexEdit\0" }; void hiro::QtHexEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { Q_UNUSED(_o); Q_UNUSED(_id); Q_UNUSED(_c); Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtHexEdit::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtHexEdit::staticMetaObject = { { &QTextEdit::staticMetaObject, qt_meta_stringdata_hiro__QtHexEdit, qt_meta_data_hiro__QtHexEdit, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtHexEdit::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtHexEdit::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtHexEdit::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtHexEdit)) return static_cast(const_cast< QtHexEdit*>(this)); return QTextEdit::qt_metacast(_clname); } int hiro::QtHexEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTextEdit::qt_metacall(_c, _id, _a); if (_id < 0) return _id; return _id; } static const uint qt_meta_data_hiro__QtHexEditScrollBar[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 25, 36, 36, 36, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtHexEditScrollBar[] = { "hiro::QtHexEditScrollBar\0onScroll()\0" "\0" }; void hiro::QtHexEditScrollBar::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtHexEditScrollBar *_t = static_cast(_o); switch (_id) { case 0: _t->onScroll(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtHexEditScrollBar::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtHexEditScrollBar::staticMetaObject = { { &QScrollBar::staticMetaObject, qt_meta_stringdata_hiro__QtHexEditScrollBar, qt_meta_data_hiro__QtHexEditScrollBar, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtHexEditScrollBar::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtHexEditScrollBar::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtHexEditScrollBar::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtHexEditScrollBar)) return static_cast(const_cast< QtHexEditScrollBar*>(this)); return QScrollBar::qt_metacast(_clname); } int hiro::QtHexEditScrollBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QScrollBar::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtHorizontalScrollBar[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 28, 39, 39, 39, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtHorizontalScrollBar[] = { "hiro::QtHorizontalScrollBar\0onChange()\0" "\0" }; void hiro::QtHorizontalScrollBar::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtHorizontalScrollBar *_t = static_cast(_o); switch (_id) { case 0: _t->onChange(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtHorizontalScrollBar::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtHorizontalScrollBar::staticMetaObject = { { &QScrollBar::staticMetaObject, qt_meta_stringdata_hiro__QtHorizontalScrollBar, qt_meta_data_hiro__QtHorizontalScrollBar, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtHorizontalScrollBar::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtHorizontalScrollBar::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtHorizontalScrollBar::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtHorizontalScrollBar)) return static_cast(const_cast< QtHorizontalScrollBar*>(this)); return QScrollBar::qt_metacast(_clname); } int hiro::QtHorizontalScrollBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QScrollBar::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtHorizontalSlider[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 25, 36, 36, 36, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtHorizontalSlider[] = { "hiro::QtHorizontalSlider\0onChange()\0" "\0" }; void hiro::QtHorizontalSlider::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtHorizontalSlider *_t = static_cast(_o); switch (_id) { case 0: _t->onChange(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtHorizontalSlider::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtHorizontalSlider::staticMetaObject = { { &QSlider::staticMetaObject, qt_meta_stringdata_hiro__QtHorizontalSlider, qt_meta_data_hiro__QtHorizontalSlider, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtHorizontalSlider::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtHorizontalSlider::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtHorizontalSlider::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtHorizontalSlider)) return static_cast(const_cast< QtHorizontalSlider*>(this)); return QSlider::qt_metacast(_clname); } int hiro::QtHorizontalSlider::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QSlider::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtLabel[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 0, 0, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount 0 // eod }; static const char qt_meta_stringdata_hiro__QtLabel[] = { "hiro::QtLabel\0" }; void hiro::QtLabel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { Q_UNUSED(_o); Q_UNUSED(_id); Q_UNUSED(_c); Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtLabel::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtLabel::staticMetaObject = { { &QWidget::staticMetaObject, qt_meta_stringdata_hiro__QtLabel, qt_meta_data_hiro__QtLabel, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtLabel::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtLabel::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtLabel::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtLabel)) return static_cast(const_cast< QtLabel*>(this)); return QWidget::qt_metacast(_clname); } int hiro::QtLabel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; return _id; } static const uint qt_meta_data_hiro__QtLineEdit[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 2, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 17, 30, 30, 30, 0x0a, 31, 30, 30, 30, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtLineEdit[] = { "hiro::QtLineEdit\0onActivate()\0\0" "onChange()\0" }; void hiro::QtLineEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtLineEdit *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; case 1: _t->onChange(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtLineEdit::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtLineEdit::staticMetaObject = { { &QLineEdit::staticMetaObject, qt_meta_stringdata_hiro__QtLineEdit, qt_meta_data_hiro__QtLineEdit, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtLineEdit::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtLineEdit::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtLineEdit::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtLineEdit)) return static_cast(const_cast< QtLineEdit*>(this)); return QLineEdit::qt_metacast(_clname); } int hiro::QtLineEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QLineEdit::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 2) qt_static_metacall(this, _c, _id, _a); _id -= 2; } return _id; } static const uint qt_meta_data_hiro__QtRadioLabel[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 19, 32, 32, 32, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtRadioLabel[] = { "hiro::QtRadioLabel\0onActivate()\0\0" }; void hiro::QtRadioLabel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtRadioLabel *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtRadioLabel::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtRadioLabel::staticMetaObject = { { &QRadioButton::staticMetaObject, qt_meta_stringdata_hiro__QtRadioLabel, qt_meta_data_hiro__QtRadioLabel, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtRadioLabel::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtRadioLabel::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtRadioLabel::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtRadioLabel)) return static_cast(const_cast< QtRadioLabel*>(this)); return QRadioButton::qt_metacast(_clname); } int hiro::QtRadioLabel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QRadioButton::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtRadioButton[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 20, 33, 33, 33, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtRadioButton[] = { "hiro::QtRadioButton\0onActivate()\0\0" }; void hiro::QtRadioButton::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtRadioButton *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtRadioButton::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtRadioButton::staticMetaObject = { { &QToolButton::staticMetaObject, qt_meta_stringdata_hiro__QtRadioButton, qt_meta_data_hiro__QtRadioButton, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtRadioButton::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtRadioButton::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtRadioButton::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtRadioButton)) return static_cast(const_cast< QtRadioButton*>(this)); return QToolButton::qt_metacast(_clname); } int hiro::QtRadioButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QToolButton::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtTabFrame[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 17, 31, 41, 41, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtTabFrame[] = { "hiro::QtTabFrame\0onChange(int)\0selection\0" "\0" }; void hiro::QtTabFrame::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtTabFrame *_t = static_cast(_o); switch (_id) { case 0: _t->onChange((*reinterpret_cast< int(*)>(_a[1]))); break; default: ; } } } const QMetaObjectExtraData hiro::QtTabFrame::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtTabFrame::staticMetaObject = { { &QTabWidget::staticMetaObject, qt_meta_stringdata_hiro__QtTabFrame, qt_meta_data_hiro__QtTabFrame, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtTabFrame::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtTabFrame::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtTabFrame::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtTabFrame)) return static_cast(const_cast< QtTabFrame*>(this)); return QTabWidget::qt_metacast(_clname); } int hiro::QtTabFrame::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTabWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtTableView[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 5, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 18, 51, 63, 63, 0x0a, 64, 63, 63, 63, 0x0a, 75, 63, 63, 63, 0x0a, 87, 99, 63, 63, 0x0a, 106, 51, 63, 63, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtTableView[] = { "hiro::QtTableView\0onActivate(QTreeWidgetItem*,int)\0" "item,column\0\0onChange()\0onContext()\0" "onSort(int)\0column\0onToggle(QTreeWidgetItem*,int)\0" }; void hiro::QtTableView::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtTableView *_t = static_cast(_o); switch (_id) { case 0: _t->onActivate((*reinterpret_cast< QTreeWidgetItem*(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; case 1: _t->onChange(); break; case 2: _t->onContext(); break; case 3: _t->onSort((*reinterpret_cast< int(*)>(_a[1]))); break; case 4: _t->onToggle((*reinterpret_cast< QTreeWidgetItem*(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break; default: ; } } } const QMetaObjectExtraData hiro::QtTableView::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtTableView::staticMetaObject = { { &QTreeWidget::staticMetaObject, qt_meta_stringdata_hiro__QtTableView, qt_meta_data_hiro__QtTableView, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtTableView::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtTableView::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtTableView::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtTableView)) return static_cast(const_cast< QtTableView*>(this)); return QTreeWidget::qt_metacast(_clname); } int hiro::QtTableView::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTreeWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 5) qt_static_metacall(this, _c, _id, _a); _id -= 5; } return _id; } static const uint qt_meta_data_hiro__QtTextEdit[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 17, 28, 28, 28, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtTextEdit[] = { "hiro::QtTextEdit\0onChange()\0\0" }; void hiro::QtTextEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtTextEdit *_t = static_cast(_o); switch (_id) { case 0: _t->onChange(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtTextEdit::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtTextEdit::staticMetaObject = { { &QTextEdit::staticMetaObject, qt_meta_stringdata_hiro__QtTextEdit, qt_meta_data_hiro__QtTextEdit, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtTextEdit::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtTextEdit::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtTextEdit::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtTextEdit)) return static_cast(const_cast< QtTextEdit*>(this)); return QTextEdit::qt_metacast(_clname); } int hiro::QtTextEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTextEdit::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtTreeView[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 0, 0, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount 0 // eod }; static const char qt_meta_stringdata_hiro__QtTreeView[] = { "hiro::QtTreeView\0" }; void hiro::QtTreeView::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { Q_UNUSED(_o); Q_UNUSED(_id); Q_UNUSED(_c); Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtTreeView::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtTreeView::staticMetaObject = { { &QTreeView::staticMetaObject, qt_meta_stringdata_hiro__QtTreeView, qt_meta_data_hiro__QtTreeView, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtTreeView::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtTreeView::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtTreeView::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtTreeView)) return static_cast(const_cast< QtTreeView*>(this)); return QTreeView::qt_metacast(_clname); } int hiro::QtTreeView::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QTreeView::qt_metacall(_c, _id, _a); if (_id < 0) return _id; return _id; } static const uint qt_meta_data_hiro__QtVerticalScrollBar[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 26, 37, 37, 37, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtVerticalScrollBar[] = { "hiro::QtVerticalScrollBar\0onChange()\0" "\0" }; void hiro::QtVerticalScrollBar::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtVerticalScrollBar *_t = static_cast(_o); switch (_id) { case 0: _t->onChange(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtVerticalScrollBar::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtVerticalScrollBar::staticMetaObject = { { &QScrollBar::staticMetaObject, qt_meta_stringdata_hiro__QtVerticalScrollBar, qt_meta_data_hiro__QtVerticalScrollBar, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtVerticalScrollBar::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtVerticalScrollBar::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtVerticalScrollBar::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtVerticalScrollBar)) return static_cast(const_cast< QtVerticalScrollBar*>(this)); return QScrollBar::qt_metacast(_clname); } int hiro::QtVerticalScrollBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QScrollBar::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtVerticalSlider[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 1, 14, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount // slots: signature, parameters, type, tag, flags 23, 34, 34, 34, 0x0a, 0 // eod }; static const char qt_meta_stringdata_hiro__QtVerticalSlider[] = { "hiro::QtVerticalSlider\0onChange()\0\0" }; void hiro::QtVerticalSlider::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { if (_c == QMetaObject::InvokeMetaMethod) { Q_ASSERT(staticMetaObject.cast(_o)); QtVerticalSlider *_t = static_cast(_o); switch (_id) { case 0: _t->onChange(); break; default: ; } } Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtVerticalSlider::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtVerticalSlider::staticMetaObject = { { &QSlider::staticMetaObject, qt_meta_stringdata_hiro__QtVerticalSlider, qt_meta_data_hiro__QtVerticalSlider, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtVerticalSlider::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtVerticalSlider::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtVerticalSlider::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtVerticalSlider)) return static_cast(const_cast< QtVerticalSlider*>(this)); return QSlider::qt_metacast(_clname); } int hiro::QtVerticalSlider::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QSlider::qt_metacall(_c, _id, _a); if (_id < 0) return _id; if (_c == QMetaObject::InvokeMetaMethod) { if (_id < 1) qt_static_metacall(this, _c, _id, _a); _id -= 1; } return _id; } static const uint qt_meta_data_hiro__QtViewport[] = { // content: 6, // revision 0, // classname 0, 0, // classinfo 0, 0, // methods 0, 0, // properties 0, 0, // enums/sets 0, 0, // constructors 0, // flags 0, // signalCount 0 // eod }; static const char qt_meta_stringdata_hiro__QtViewport[] = { "hiro::QtViewport\0" }; void hiro::QtViewport::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { Q_UNUSED(_o); Q_UNUSED(_id); Q_UNUSED(_c); Q_UNUSED(_a); } const QMetaObjectExtraData hiro::QtViewport::staticMetaObjectExtraData = { 0, qt_static_metacall }; const QMetaObject hiro::QtViewport::staticMetaObject = { { &QWidget::staticMetaObject, qt_meta_stringdata_hiro__QtViewport, qt_meta_data_hiro__QtViewport, &staticMetaObjectExtraData } }; #ifdef Q_NO_DATA_RELOCATION const QMetaObject &hiro::QtViewport::getStaticMetaObject() { return staticMetaObject; } #endif //Q_NO_DATA_RELOCATION const QMetaObject *hiro::QtViewport::metaObject() const { return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; } void *hiro::QtViewport::qt_metacast(const char *_clname) { if (!_clname) return 0; if (!strcmp(_clname, qt_meta_stringdata_hiro__QtViewport)) return static_cast(const_cast< QtViewport*>(this)); return QWidget::qt_metacast(_clname); } int hiro::QtViewport::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QWidget::qt_metacall(_c, _id, _a); if (_id < 0) return _id; return _id; } QT_END_MOC_NAMESPACE ares-126/hiro/qt/settings.cpp000066400000000000000000000025671415063341600162640ustar00rootroot00000000000000namespace hiro { Settings::Settings() { string path = {Path::userData(), "hiro/"}; #if HIRO_QT==4 auto document = BML::unserialize(file::read({path, "qt4.bml"})); #elif HIRO_QT==5 auto document = BML::unserialize(file::read({path, "qt5.bml"})); #endif #define get(name, type, value) \ if(auto node = document[name]) value = node.type() get("Geometry/FrameX", integer, geometry.frameX); get("Geometry/FrameY", integer, geometry.frameY); get("Geometry/FrameWidth", integer, geometry.frameWidth); get("Geometry/FrameHeight", integer, geometry.frameHeight); get("Geometry/MenuHeight", integer, geometry.menuHeight); get("Geometry/StatusHeight", integer, geometry.statusHeight); #undef get } Settings::~Settings() { string path = {Path::userData(), "hiro/"}; directory::create(path, 0755); Markup::Node document; #define set(name, value) \ document(name).setValue(value) set("Geometry/FrameX", geometry.frameX); set("Geometry/FrameY", geometry.frameY); set("Geometry/FrameWidth", geometry.frameWidth); set("Geometry/FrameHeight", geometry.frameHeight); set("Geometry/MenuHeight", geometry.menuHeight); set("Geometry/StatusHeight", geometry.statusHeight); #undef set #if HIRO_QT==4 file::write({path, "qt4.bml"}, BML::serialize(document)); #elif HIRO_QT==5 file::write({path, "qt5.bml"}, BML::serialize(document)); #endif } } ares-126/hiro/qt/settings.hpp000066400000000000000000000004601415063341600162570ustar00rootroot00000000000000namespace hiro { struct Settings { Settings(); ~Settings(); vector keycodes; struct Geometry { s32 frameX = 4; s32 frameY = 24; s32 frameWidth = 8; s32 frameHeight = 28; s32 menuHeight = 9; s32 statusHeight = 9; } geometry; }; static Settings settings; } ares-126/hiro/qt/sizable.cpp000066400000000000000000000005221415063341600160420ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { auto pSizable::construct() -> void { } auto pSizable::destruct() -> void { } auto pSizable::minimumSize() const -> Size { return {0, 0}; } auto pSizable::setCollapsible(bool collapsible) -> void { } auto pSizable::setGeometry(Geometry geometry) -> void { self().doSize(); } } #endif ares-126/hiro/qt/sizable.hpp000066400000000000000000000004171415063341600160520ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { struct pSizable : pObject { Declare(Sizable, Object) virtual auto minimumSize() const -> Size; virtual auto setCollapsible(bool collapsible) -> void; virtual auto setGeometry(Geometry geometry) -> void; }; } #endif ares-126/hiro/qt/status-bar.cpp000066400000000000000000000015601415063341600165010ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { auto pStatusBar::construct() -> void { _setState(); } auto pStatusBar::destruct() -> void { } auto pStatusBar::setEnabled(bool enabled) -> void { _setState(); } auto pStatusBar::setFont(const Font& font) -> void { _setState(); } auto pStatusBar::setText(const string& text) -> void { _setState(); } auto pStatusBar::setVisible(bool visible) -> void { _setState(); } auto pStatusBar::_parent() -> maybe { if(auto parent = self().parentWindow()) { if(auto self = parent->self()) return *self; } return nothing; } auto pStatusBar::_setState() -> void { if(auto parent = _parent()) { parent->qtStatusBar->setFont(pFont::create(self().font(true))); parent->qtStatusBar->showMessage(QString::fromUtf8(state().text), 0); parent->qtStatusBar->setVisible(self().visible()); } } } #endif ares-126/hiro/qt/status-bar.hpp000066400000000000000000000005761415063341600165140ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { struct pStatusBar : pObject { Declare(StatusBar, Object) auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/qt/timer.cpp000066400000000000000000000011151415063341600155300ustar00rootroot00000000000000#if defined(Hiro_Timer) namespace hiro { auto pTimer::construct() -> void { qtTimer = new QtTimer(*this); qtTimer->setInterval(0); qtTimer->connect(qtTimer, SIGNAL(timeout()), SLOT(onActivate())); } auto pTimer::destruct() -> void { delete qtTimer; } auto pTimer::setEnabled(bool enabled) -> void { if(enabled) { qtTimer->start(); } else { qtTimer->stop(); } } auto pTimer::setInterval(u32 interval) -> void { qtTimer->setInterval(interval); } auto QtTimer::onActivate() -> void { if(Application::state().quit) return; p.self().doActivate(); } } #endif ares-126/hiro/qt/timer.hpp000066400000000000000000000003501415063341600155350ustar00rootroot00000000000000#if defined(Hiro_Timer) namespace hiro { struct pTimer : pObject { Declare(Timer, Object) auto setEnabled(bool enabled) -> void override; auto setInterval(u32 interval) -> void; QtTimer* qtTimer = nullptr; }; } #endif ares-126/hiro/qt/utility.cpp000066400000000000000000000026701415063341600161220ustar00rootroot00000000000000namespace hiro { static auto CalculateAlignment(Alignment alignment) -> s32 { s32 result = 0; if(alignment.horizontal() < 0.333) result |= Qt::AlignLeft; else if(alignment.horizontal() > 0.666) result |= Qt::AlignRight; else result |= Qt::AlignCenter; if(alignment.vertical() < 0.333) result |= Qt::AlignTop; else if(alignment.vertical() > 0.666) result |= Qt::AlignBottom; else result |= Qt::AlignVCenter; return result; } static auto CreateBrush(Color color) -> QBrush { return color ? QColor(color.red(), color.green(), color.blue()) : QBrush(); } static auto CreateColor(Color color, QColor fallback = {}) -> QColor { return color ? QColor(color.red(), color.green(), color.blue()) : fallback; } static auto CreateIcon(const image& icon, bool scale = false) -> QIcon { if(!icon) return QIcon(); auto qtBuffer = icon; qtBuffer.transform(); if(scale) qtBuffer.scale(16, 16, true); QImage qtImage(qtBuffer.data(), qtBuffer.width(), qtBuffer.height(), QImage::Format_ARGB32); return QIcon(QPixmap::fromImage(qtImage)); } static auto DropPaths(QDropEvent* event) -> vector { QList urls = event->mimeData()->urls(); if(urls.size() == 0) return {}; vector paths; for(auto n : range(urls.size())) { string path{urls[n].path().toUtf8().constData()}; if(!path) continue; if(directory::exists(path) && !path.endsWith("/")) path.append("/"); paths.append(path); } return paths; } } ares-126/hiro/qt/widget/000077500000000000000000000000001415063341600151715ustar00rootroot00000000000000ares-126/hiro/qt/widget/button.cpp000066400000000000000000000034231415063341600172120ustar00rootroot00000000000000#if defined(Hiro_Button) namespace hiro { auto pButton::construct() -> void { qtWidget = qtButton = new QtButton(*this); qtButton->setToolButtonStyle(Qt::ToolButtonTextOnly); qtButton->connect(qtButton, SIGNAL(released()), SLOT(onActivate())); setBordered(state().bordered); setIcon(state().icon); setOrientation(state().orientation); setText(state().text); pWidget::construct(); } auto pButton::destruct() -> void { delete qtButton; qtWidget = qtButton = nullptr; } auto pButton::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text ? state().text : " "); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + (state().text ? 20 : 12), size.height() + 12}; } auto pButton::setBordered(bool bordered) -> void { qtButton->setAutoRaise(!bordered); } auto pButton::setIcon(const image& icon) -> void { qtButton->setIconSize(QSize(icon.width(), icon.height())); qtButton->setIcon(CreateIcon(icon)); qtButton->setStyleSheet("text-align: top;"); } auto pButton::setOrientation(Orientation orientation) -> void { switch(orientation) { case Orientation::Horizontal: qtButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); break; case Orientation::Vertical: qtButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); break; } } auto pButton::setText(const string& text) -> void { qtButton->setText(QString::fromUtf8(text)); } auto QtButton::onActivate() -> void { p.self().doActivate(); } } #endif ares-126/hiro/qt/widget/button.hpp000066400000000000000000000005701415063341600172170ustar00rootroot00000000000000#if defined(Hiro_Button) namespace hiro { struct pButton : pWidget { Declare(Button, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; QtButton* qtButton = nullptr; }; } #endif ares-126/hiro/qt/widget/canvas.cpp000066400000000000000000000102431415063341600171500ustar00rootroot00000000000000#if defined(Hiro_Canvas) namespace hiro { auto pCanvas::construct() -> void { qtWidget = qtCanvas = new QtCanvas(*this); qtCanvas->setMouseTracking(true); pWidget::construct(); _rasterize(); qtCanvas->update(); } auto pCanvas::destruct() -> void { _release(); delete qtCanvas; qtWidget = qtCanvas = nullptr; } auto pCanvas::minimumSize() const -> Size { if(auto& icon = state().icon) return {icon.width(), icon.height()}; return {0, 0}; } auto pCanvas::setAlignment(Alignment) -> void { update(); } auto pCanvas::setColor(Color color) -> void { update(); } auto pCanvas::setDroppable(bool droppable) -> void { qtCanvas->setAcceptDrops(droppable); } auto pCanvas::setFocusable(bool focusable) -> void { //TODO } auto pCanvas::setGeometry(Geometry geometry) -> void { update(); pWidget::setGeometry(geometry); } auto pCanvas::setGradient(Gradient gradient) -> void { update(); } auto pCanvas::setIcon(const image& icon) -> void { update(); } auto pCanvas::update() -> void { _rasterize(); qtCanvas->update(); } auto pCanvas::_rasterize() -> void { s32 width = 0; s32 height = 0; if(auto& icon = state().icon) { width = icon.width(); height = icon.height(); } else { width = pSizable::state().geometry.width(); height = pSizable::state().geometry.height(); } if(width <= 0 || height <= 0) return; if(width != qtImageWidth || height != qtImageHeight) _release(); qtImageWidth = width; qtImageHeight = height; if(!qtImage) qtImage = new QImage(width, height, QImage::Format_ARGB32); auto buffer = (u32*)qtImage->bits(); if(auto& icon = state().icon) { memory::copy(buffer, state().icon.data(), width * height); } else if(auto& gradient = state().gradient) { auto& colors = gradient.state.colors; image fill; fill.allocate(width, height); fill.gradient(colors[0].value(), colors[1].value(), colors[2].value(), colors[3].value()); memory::copy(buffer, fill.data(), fill.size()); } else { u32 color = state().color.value(); for(auto n : range(width * height)) buffer[n] = color; } } auto pCanvas::_release() -> void { if(qtImage) { delete qtImage; qtImage = nullptr; } qtImageWidth = 0; qtImageHeight = 0; } auto QtCanvas::dragEnterEvent(QDragEnterEvent* event) -> void { if(event->mimeData()->hasUrls()) { event->acceptProposedAction(); } } auto QtCanvas::dropEvent(QDropEvent* event) -> void { if(auto paths = DropPaths(event)) p.self().doDrop(paths); } auto QtCanvas::leaveEvent(QEvent* event) -> void { p.self().doMouseLeave(); } auto QtCanvas::mouseMoveEvent(QMouseEvent* event) -> void { p.self().doMouseMove({event->pos().x(), event->pos().y()}); } auto QtCanvas::mousePressEvent(QMouseEvent* event) -> void { switch(event->button()) { case Qt::LeftButton: p.self().doMousePress(Mouse::Button::Left); break; case Qt::MidButton: p.self().doMousePress(Mouse::Button::Middle); break; case Qt::RightButton: p.self().doMousePress(Mouse::Button::Right); break; } } auto QtCanvas::mouseReleaseEvent(QMouseEvent* event) -> void { switch(event->button()) { case Qt::LeftButton: p.self().doMouseRelease(Mouse::Button::Left); break; case Qt::MidButton: p.self().doMouseRelease(Mouse::Button::Middle); break; case Qt::RightButton: p.self().doMouseRelease(Mouse::Button::Right); break; } } auto QtCanvas::paintEvent(QPaintEvent* event) -> void { if(!p.qtImage) return; s32 sx = 0, sy = 0, dx = 0, dy = 0; s32 width = p.qtImageWidth; s32 height = p.qtImageHeight; auto geometry = p.pSizable::state().geometry; auto alignment = p.state().alignment ? p.state().alignment : Alignment{0.5, 0.5}; if(width <= geometry.width()) { sx = 0; dx = (geometry.width() - width) * alignment.horizontal(); } else { sx = (width - geometry.width()) * alignment.horizontal(); dx = 0; width = geometry.width(); } if(height <= geometry.height()) { sy = 0; dy = (geometry.height() - height) * alignment.vertical(); } else { sy = (height - geometry.height()) * alignment.vertical(); dy = 0; height = geometry.height(); } QPainter painter(p.qtCanvas); painter.drawImage(dx, dy, *p.qtImage, sx, sy, width, height); } } #endif ares-126/hiro/qt/widget/canvas.hpp000066400000000000000000000012521415063341600171550ustar00rootroot00000000000000#if defined(Hiro_Canvas) namespace hiro { struct pCanvas : pWidget { Declare(Canvas, Widget) auto minimumSize() const -> Size override; auto setAlignment(Alignment) -> void; auto setColor(Color color) -> void; auto setDroppable(bool droppable) -> void override; auto setFocusable(bool focusable) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setGradient(Gradient gradient) -> void; auto setIcon(const image& icon) -> void; auto update() -> void; auto _rasterize() -> void; auto _release() -> void; QtCanvas* qtCanvas = nullptr; QImage* qtImage = nullptr; u32 qtImageWidth = 0; u32 qtImageHeight = 0; }; } #endif ares-126/hiro/qt/widget/check-button.cpp000066400000000000000000000041501415063341600202630ustar00rootroot00000000000000#if defined(Hiro_CheckButton) namespace hiro { auto pCheckButton::construct() -> void { qtWidget = qtCheckButton = new QtCheckButton(*this); qtCheckButton->setCheckable(true); qtCheckButton->setToolButtonStyle(Qt::ToolButtonTextOnly); qtCheckButton->connect(qtCheckButton, SIGNAL(toggled(bool)), SLOT(onToggle(bool))); pWidget::construct(); _setState(); } auto pCheckButton::destruct() -> void { delete qtCheckButton; qtCheckButton = nullptr; } auto pCheckButton::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + 20, size.height() + 12}; } auto pCheckButton::setBordered(bool bordered) -> void { _setState(); } auto pCheckButton::setChecked(bool checked) -> void { _setState(); } auto pCheckButton::setIcon(const image& icon) -> void { _setState(); } auto pCheckButton::setOrientation(Orientation orientation) -> void { _setState(); } auto pCheckButton::setText(const string& text) -> void { _setState(); } auto pCheckButton::_setState() -> void { lock(); qtCheckButton->setAutoRaise(!state().bordered); qtCheckButton->setChecked(state().checked); qtCheckButton->setIconSize(QSize(state().icon.width(), state().icon.height())); qtCheckButton->setIcon(CreateIcon(state().icon)); qtCheckButton->setStyleSheet("text-align: top;"); switch(state().orientation) { case Orientation::Horizontal: qtCheckButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); break; case Orientation::Vertical: qtCheckButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); break; } qtCheckButton->setText(QString::fromUtf8(state().text)); unlock(); } auto QtCheckButton::onToggle(bool checked) -> void { p.state().checked = checked; if(!p.locked()) p.self().doToggle(); } } #endif ares-126/hiro/qt/widget/check-button.hpp000066400000000000000000000007271415063341600202760ustar00rootroot00000000000000#if defined(Hiro_CheckButton) namespace hiro { struct pCheckButton : pWidget { Declare(CheckButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked(bool checked) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto _setState() -> void; QtCheckButton* qtCheckButton = nullptr; }; } #endif ares-126/hiro/qt/widget/check-label.cpp000066400000000000000000000017311415063341600200310ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) namespace hiro { auto pCheckLabel::construct() -> void { qtWidget = qtCheckLabel = new QtCheckLabel(*this); qtCheckLabel->connect(qtCheckLabel, SIGNAL(stateChanged(int)), SLOT(onToggle())); pWidget::construct(); _setState(); } auto pCheckLabel::destruct() -> void { delete qtCheckLabel; qtWidget = qtCheckLabel = nullptr; } auto pCheckLabel::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text); return {size.width() + 26, size.height() + 6}; } auto pCheckLabel::setChecked(bool checked) -> void { _setState(); } auto pCheckLabel::setText(const string& text) -> void { _setState(); } auto pCheckLabel::_setState() -> void { lock(); qtCheckLabel->setChecked(state().checked); qtCheckLabel->setText(QString::fromUtf8(state().text)); unlock(); } auto QtCheckLabel::onToggle() -> void { p.state().checked = p.qtCheckLabel->isChecked(); if(!p.locked()) p.self().doToggle(); } } #endif ares-126/hiro/qt/widget/check-label.hpp000066400000000000000000000005041415063341600200330ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) namespace hiro { struct pCheckLabel : pWidget { Declare(CheckLabel, Widget) auto minimumSize() const -> Size override; auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; auto _setState() -> void; QtCheckLabel* qtCheckLabel = nullptr; }; } #endif ares-126/hiro/qt/widget/combo-button-item.cpp000066400000000000000000000022611415063341600212420ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { auto pComboButtonItem::construct() -> void { if(auto parent = _parent()) { parent->lock(); parent->qtComboButton->addItem(""); _setState(); parent->unlock(); } } auto pComboButtonItem::destruct() -> void { if(auto parent = _parent()) { parent->lock(); parent->qtComboButton->removeItem(self().offset()); parent->unlock(); } } auto pComboButtonItem::setIcon(const image& icon) -> void { _setState(); } auto pComboButtonItem::setSelected() -> void { _setState(); } auto pComboButtonItem::setText(const string& text) -> void { _setState(); } auto pComboButtonItem::_parent() -> maybe { if(auto parent = self().parentComboButton()) { if(auto self = parent->self()) return *self; } return nothing; } auto pComboButtonItem::_setState() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); parent->qtComboButton->setItemIcon(self().offset(), CreateIcon(state().icon)); if(state().selected) parent->qtComboButton->setCurrentIndex(self().offset()); parent->qtComboButton->setItemText(self().offset(), QString::fromUtf8(state().text)); } } } #endif ares-126/hiro/qt/widget/combo-button-item.hpp000066400000000000000000000005031415063341600212440ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButtonItem : pObject { Declare(ComboButtonItem, Object) auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/qt/widget/combo-button.cpp000066400000000000000000000023411415063341600203050ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { auto pComboButton::construct() -> void { qtWidget = qtComboButton = new QtComboButton(*this); qtComboButton->connect(qtComboButton, SIGNAL(currentIndexChanged(int)), SLOT(onChange(int))); pWidget::construct(); } auto pComboButton::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtComboButton; qtWidget = qtComboButton = nullptr; } auto pComboButton::append(sComboButtonItem item) -> void { } auto pComboButton::minimumSize() const -> Size { signed maximumWidth = 0; for(auto& item : state().items) { maximumWidth = max(maximumWidth, pFont::size(qtWidget->font(), item->state.text).width()); } auto size = pFont::size(qtWidget->font(), " "); return {maximumWidth + 32, size.height() + 12}; } auto pComboButton::remove(sComboButtonItem item) -> void { } auto pComboButton::reset() -> void { auto lock = acquire(); while(qtComboButton->count()) qtComboButton->removeItem(0); } auto QtComboButton::onChange(int offset) -> void { for(auto& item : p.state().items) { item->state.selected = false; } if(auto item = p.self().item(offset)) { item->state.selected = true; } if(!p.locked()) p.self().doChange(); } } #endif ares-126/hiro/qt/widget/combo-button.hpp000066400000000000000000000005241415063341600203130ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButton : pWidget { Declare(ComboButton, Widget) auto append(sComboButtonItem item) -> void; auto minimumSize() const -> Size override; auto remove(sComboButtonItem item) -> void; auto reset() -> void override; QtComboButton* qtComboButton = nullptr; }; } #endif ares-126/hiro/qt/widget/frame.cpp000066400000000000000000000032141415063341600167670ustar00rootroot00000000000000#if defined(Hiro_Frame) namespace hiro { auto pFrame::construct() -> void { qtWidget = qtFrame = new QGroupBox; if(QApplication::style()->objectName() == "gtk+") { //QGtkStyle (gtk+) theme disrespects font weight and omits the border, even if native GTK+ theme does not //bold Label controls already exist; so this style sheet forces QGtkStyle to look like a Frame instead qtFrame->setStyleSheet( "QGroupBox { border: 1px solid #aaa; border-radius: 5px; margin-top: 0.5em; }\n" "QGroupBox::title { left: 5px; subcontrol-origin: margin; }\n" ); } pWidget::construct(); _setState(); } auto pFrame::destruct() -> void { delete qtFrame; qtWidget = qtFrame = nullptr; } auto pFrame::append(sSizable sizable) -> void { } auto pFrame::remove(sSizable sizable) -> void { } auto pFrame::setEnabled(bool enabled) -> void { if(auto& sizable = state().sizable) sizable->setEnabled(sizable->enabled()); pWidget::setEnabled(enabled); } auto pFrame::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); if(auto& sizable = state().sizable) { auto size = pFont::size(qtFrame->font(), state().text); if(!state().text) size.setHeight(8); sizable->setGeometry({ 4, size.height(), geometry.width() - 8, geometry.height() - size.height() - 4 }); } } auto pFrame::setText(const string& text) -> void { _setState(); } auto pFrame::setVisible(bool visible) -> void { if(auto& sizable = state().sizable) sizable->setVisible(sizable->visible()); pWidget::setVisible(visible); } auto pFrame::_setState() -> void { qtFrame->setTitle(QString::fromUtf8(state().text)); } } #endif ares-126/hiro/qt/widget/frame.hpp000066400000000000000000000007051415063341600167760ustar00rootroot00000000000000#if defined(Hiro_Frame) namespace hiro { struct pFrame : pWidget { Declare(Frame, Widget) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setEnabled(bool enabled) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _setState() -> void; QGroupBox* qtFrame = nullptr; }; } #endif ares-126/hiro/qt/widget/hex-edit.cpp000066400000000000000000000204511415063341600174060ustar00rootroot00000000000000#if defined(Hiro_HexEdit) namespace hiro { auto pHexEdit::construct() -> void { qtWidget = qtHexEdit = new QtHexEdit(*this); qtHexEdit->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); qtHexEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); qtHexEdit->setTextInteractionFlags(Qt::TextSelectableByKeyboard | Qt::TextSelectableByMouse); qtLayout = new QHBoxLayout; qtLayout->setAlignment(Qt::AlignRight); qtLayout->setMargin(0); qtLayout->setSpacing(0); qtHexEdit->setLayout(qtLayout); qtScrollBar = new QtHexEditScrollBar(*this); qtScrollBar->setSingleStep(1); qtLayout->addWidget(qtScrollBar); qtScrollBar->connect(qtScrollBar, SIGNAL(actionTriggered(int)), SLOT(onScroll())); pWidget::construct(); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); _setState(); } auto pHexEdit::destruct() -> void { delete qtScrollBar; delete qtLayout; delete qtHexEdit; qtWidget = qtHexEdit = nullptr; qtLayout = nullptr; qtScrollBar = nullptr; } auto pHexEdit::setAddress(u32 address) -> void { _setState(); } auto pHexEdit::setBackgroundColor(Color color) -> void { static auto defaultColor = qtHexEdit->palette().color(QPalette::Base); auto palette = qtHexEdit->palette(); palette.setColor(QPalette::Base, CreateColor(color, defaultColor)); qtHexEdit->setPalette(palette); qtHexEdit->setAutoFillBackground((bool)color); } auto pHexEdit::setColumns(u32 columns) -> void { _setState(); } auto pHexEdit::setForegroundColor(Color color) -> void { static auto defaultColor = qtHexEdit->palette().color(QPalette::Text); auto palette = qtHexEdit->palette(); palette.setColor(QPalette::Text, color ? CreateColor(color) : defaultColor); qtHexEdit->setPalette(palette); } auto pHexEdit::setLength(u32 length) -> void { _setState(); } auto pHexEdit::setRows(u32 rows) -> void { _setState(); } auto pHexEdit::update() -> void { if(!state().onRead) { qtHexEdit->setPlainText(""); return; } u32 cursorPosition = qtHexEdit->textCursor().position(); string output; u32 address = state().address; for(u32 row = 0; row < state().rows; row++) { output.append(hex(address, 8L)); output.append(" "); string hexdata; string ansidata = " "; for(u32 column = 0; column < state().columns; column++) { if(address < state().length) { u8 data = self().doRead(address++); hexdata.append(hex(data, 2L)); hexdata.append(" "); ansidata.append(data >= 0x20 && data <= 0x7e ? (char)data : '.'); } else { hexdata.append(" "); ansidata.append(" "); } } output.append(hexdata); output.append(ansidata); if(address >= state().length) break; if(row != state().rows - 1) output.append("\n"); } qtHexEdit->setPlainText(QString::fromUtf8(output)); QTextCursor cursor = qtHexEdit->textCursor(); cursor.setPosition(cursorPosition); qtHexEdit->setTextCursor(cursor); } auto pHexEdit::_keyPressEvent(QKeyEvent* event) -> void { if(!state().onRead) return; //allow Ctrl+C (copy) if(event->key() == Qt::Key_C && event->modifiers() == Qt::ControlModifier) { qtHexEdit->keyPressEventAcknowledge(event); return; } //disallow other text operations (cut, paste, etc) if(event->modifiers() & (Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier)) return; QTextCursor cursor = qtHexEdit->textCursor(); s32 lineWidth = 10 + (state().columns * 3) + 1 + state().columns + 1; s32 cursorY = cursor.position() / lineWidth; s32 cursorX = cursor.position() % lineWidth; u32 nibble = 0; switch(event->key()) { default: return; case Qt::Key_Left: if(cursorX > 0) { cursor.setPosition(cursor.position() - 1); qtHexEdit->setTextCursor(cursor); } return; case Qt::Key_Right: if(cursorX < lineWidth - 1) { cursor.setPosition(cursor.position() + 1); qtHexEdit->setTextCursor(cursor); } return; case Qt::Key_Home: cursor.setPosition(cursorY * lineWidth + 10); qtHexEdit->setTextCursor(cursor); return; case Qt::Key_End: cursor.setPosition(cursorY * lineWidth + 57); qtHexEdit->setTextCursor(cursor); return; case Qt::Key_Up: if(cursorY > 0) { cursor.setPosition(cursor.position() - lineWidth); qtHexEdit->setTextCursor(cursor); } else { _scrollTo(qtScrollBar->sliderPosition() - 1); } return; case Qt::Key_Down: if(cursorY >= _rows() - 1) { //cannot scroll down further } else if(cursorY < state().rows - 1) { cursor.setPosition(cursor.position() + lineWidth); qtHexEdit->setTextCursor(cursor); } else { _scrollTo(qtScrollBar->sliderPosition() + 1); } return; case Qt::Key_PageUp: _scrollTo(qtScrollBar->sliderPosition() - state().rows); return; case Qt::Key_PageDown: _scrollTo(qtScrollBar->sliderPosition() + state().rows); return; case Qt::Key_0: nibble = 0; break; case Qt::Key_1: nibble = 1; break; case Qt::Key_2: nibble = 2; break; case Qt::Key_3: nibble = 3; break; case Qt::Key_4: nibble = 4; break; case Qt::Key_5: nibble = 5; break; case Qt::Key_6: nibble = 6; break; case Qt::Key_7: nibble = 7; break; case Qt::Key_8: nibble = 8; break; case Qt::Key_9: nibble = 9; break; case Qt::Key_A: nibble = 10; break; case Qt::Key_B: nibble = 11; break; case Qt::Key_C: nibble = 12; break; case Qt::Key_D: nibble = 13; break; case Qt::Key_E: nibble = 14; break; case Qt::Key_F: nibble = 15; break; } if(cursorX >= 10) { //not on an offset cursorX -= 10; if((cursorX % 3) != 2) { //not on a space bool cursorNibble = (cursorX % 3) == 1; //0 = high, 1 = low cursorX /= 3; if(cursorX < state().columns) { //not in ANSI region u32 address = state().address + (cursorY * state().columns + cursorX); if(address >= state().length) return; //do not edit past end of file u8 data = self().doRead(address); //write modified value if(cursorNibble == 1) { data = (data & 0xf0) | (nibble << 0); } else { data = (data & 0x0f) | (nibble << 4); } self().doWrite(address, data); //auto-advance cursor to next nibble/byte u32 step = 1; if(cursorNibble && cursorX != state().columns - 1) step = 2; cursor.setPosition(cursor.position() + step); qtHexEdit->setTextCursor(cursor); //refresh output to reflect modified data update(); } } } } //number of actual rows auto pHexEdit::_rows() -> s32 { return (max(1u, state().length) + state().columns - 1) / state().columns; } //number of scrollable row positions auto pHexEdit::_rowsScrollable() -> s32 { return max(0u, _rows() - state().rows); } auto pHexEdit::_scrollTo(s32 position) -> void { if(position > _rowsScrollable()) position = _rowsScrollable(); if(position < 0) position = 0; qtScrollBar->setSliderPosition(position); } auto pHexEdit::_setState() -> void { auto lock = acquire(); //add one if last row is not equal to column length (eg only part of the row is present) bool indivisible = state().columns == 0 || (state().length % state().columns) != 0; qtScrollBar->setRange(0, state().length / state().columns + indivisible - state().rows); qtScrollBar->setSliderPosition(state().address / state().columns); qtScrollBar->setPageStep(state().rows); update(); } auto QtHexEdit::keyPressEvent(QKeyEvent* event) -> void { p._keyPressEvent(event); } auto QtHexEdit::keyPressEventAcknowledge(QKeyEvent* event) -> void { QTextEdit::keyPressEvent(event); } auto QtHexEdit::wheelEvent(QWheelEvent* event) -> void { if(event->orientation() == Qt::Vertical) { s32 offset = event->delta() < 0 ? +1 : -1; p._scrollTo(p.qtScrollBar->sliderPosition() + offset); event->accept(); } } auto QtHexEditScrollBar::event(QEvent* event) -> bool { if(event->type() == QEvent::Wheel) { auto wheelEvent = (QWheelEvent*)event; if(wheelEvent->orientation() == Qt::Vertical) { s32 offset = wheelEvent->delta() < 0 ? +1 : -1; p._scrollTo(sliderPosition() + offset); return true; } } return QScrollBar::event(event); } auto QtHexEditScrollBar::onScroll() -> void { if(p.locked()) return; u32 address = sliderPosition(); p.state().address = address * p.state().columns; p.update(); } } #endif ares-126/hiro/qt/widget/hex-edit.hpp000066400000000000000000000012371415063341600174140ustar00rootroot00000000000000#if defined(Hiro_HexEdit) namespace hiro { struct pHexEdit : pWidget { Declare(HexEdit, Widget) auto setAddress(u32 address) -> void; auto setBackgroundColor(Color color) -> void; auto setColumns(u32 columns) -> void; auto setForegroundColor(Color color) -> void; auto setLength(u32 length) -> void; auto setRows(u32 rows) -> void; auto update() -> void; auto _keyPressEvent(QKeyEvent*) -> void; auto _rows() -> s32; auto _rowsScrollable() -> s32; auto _scrollTo(s32 position) -> void; auto _setState() -> void; QtHexEdit* qtHexEdit = nullptr; QHBoxLayout* qtLayout = nullptr; QtHexEditScrollBar* qtScrollBar = nullptr; }; } #endif ares-126/hiro/qt/widget/horizontal-scroll-bar.cpp000066400000000000000000000022041415063341600221220ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) namespace hiro { auto pHorizontalScrollBar::construct() -> void { qtWidget = qtHorizontalScrollBar = new QtHorizontalScrollBar(*this); qtHorizontalScrollBar->setRange(0, 100); qtHorizontalScrollBar->setPageStep(101 >> 3); qtHorizontalScrollBar->connect(qtHorizontalScrollBar, SIGNAL(valueChanged(int)), SLOT(onChange())); pWidget::construct(); _setState(); } auto pHorizontalScrollBar::destruct() -> void { delete qtHorizontalScrollBar; qtWidget = qtHorizontalScrollBar = nullptr; } auto pHorizontalScrollBar::minimumSize() const -> Size { return {0, 15}; } auto pHorizontalScrollBar::setLength(u32 length) -> void { _setState(); } auto pHorizontalScrollBar::setPosition(u32 position) -> void { _setState(); } auto pHorizontalScrollBar::_setState() -> void { s32 length = state().length + (state().length == 0); qtHorizontalScrollBar->setRange(0, length - 1); qtHorizontalScrollBar->setPageStep(length >> 3); qtHorizontalScrollBar->setValue(state().position); } auto QtHorizontalScrollBar::onChange() -> void { p.state().position = value(); p.self().doChange(); } } #endif ares-126/hiro/qt/widget/horizontal-scroll-bar.hpp000066400000000000000000000005541415063341600221350ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) namespace hiro { struct pHorizontalScrollBar : pWidget { Declare(HorizontalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto _setState() -> void; QtHorizontalScrollBar* qtHorizontalScrollBar = nullptr; }; } #endif ares-126/hiro/qt/widget/horizontal-slider.cpp000066400000000000000000000021131415063341600213430ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) namespace hiro { auto pHorizontalSlider::minimumSize() const -> Size { return {0, 20}; } auto pHorizontalSlider::setLength(u32 length) -> void { _setState(); } auto pHorizontalSlider::setPosition(u32 position) -> void { _setState(); } auto pHorizontalSlider::construct() -> void { qtWidget = qtHorizontalSlider = new QtHorizontalSlider(*this); qtHorizontalSlider->setRange(0, 100); qtHorizontalSlider->setPageStep(101 >> 3); qtHorizontalSlider->connect(qtHorizontalSlider, SIGNAL(valueChanged(int)), SLOT(onChange())); pWidget::construct(); _setState(); } auto pHorizontalSlider::destruct() -> void { delete qtHorizontalSlider; qtWidget = qtHorizontalSlider = nullptr; } auto pHorizontalSlider::_setState() -> void { s32 length = state().length + (state().length == 0); qtHorizontalSlider->setRange(0, length - 1); qtHorizontalSlider->setPageStep(length >> 3); qtHorizontalSlider->setValue(state().position); } auto QtHorizontalSlider::onChange() -> void { p.state().position = value(); p.self().doChange(); } } #endif ares-126/hiro/qt/widget/horizontal-slider.hpp000066400000000000000000000005351415063341600213560ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) namespace hiro { struct pHorizontalSlider : pWidget { Declare(HorizontalSlider, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto _setState() -> void; QtHorizontalSlider* qtHorizontalSlider = nullptr; }; } #endif ares-126/hiro/qt/widget/label.cpp000066400000000000000000000040641415063341600167600ustar00rootroot00000000000000#if defined(Hiro_Label) namespace hiro { auto pLabel::construct() -> void { qtWidget = qtLabel = new QtLabel(*this); pWidget::construct(); qtLabel->update(); } auto pLabel::destruct() -> void { delete qtLabel; qtWidget = qtLabel = nullptr; } auto pLabel::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text); return {size.width(), size.height()}; } auto pLabel::setAlignment(Alignment alignment) -> void { qtLabel->update(); } auto pLabel::setBackgroundColor(Color color) -> void { qtLabel->update(); } auto pLabel::setFont(const Font& font) -> void { pWidget::setFont(font); qtLabel->update(); } auto pLabel::setForegroundColor(Color color) -> void { qtLabel->update(); } auto pLabel::setText(const string& text) -> void { qtLabel->update(); } auto QtLabel::mousePressEvent(QMouseEvent* event) -> void { switch(event->button()) { case Qt::LeftButton: p.self().doMousePress(Mouse::Button::Left); break; case Qt::MidButton: p.self().doMousePress(Mouse::Button::Middle); break; case Qt::RightButton: p.self().doMousePress(Mouse::Button::Right); break; } } auto QtLabel::mouseReleaseEvent(QMouseEvent* event) -> void { switch(event->button()) { case Qt::LeftButton: p.self().doMouseRelease(Mouse::Button::Left); break; case Qt::MidButton: p.self().doMouseRelease(Mouse::Button::Middle); break; case Qt::RightButton: p.self().doMouseRelease(Mouse::Button::Right); break; } } //QLabel ignores QPalette ... so we have to implement our own Label class atop QWidget ... auto QtLabel::paintEvent(QPaintEvent* event) -> void { QPainter painter(p.qtLabel); if(auto& color = p.state().backgroundColor) { painter.fillRect(event->rect(), CreateColor(color)); } if(auto& text = p.state().text) { if(auto& color = p.state().foregroundColor) { QPen pen(CreateColor(color)); painter.setPen(pen); } auto alignment = p.state().alignment ? p.state().alignment : Alignment{0.0, 0.5}; painter.drawText(event->rect(), CalculateAlignment(alignment), QString::fromUtf8(text)); } } } #endif ares-126/hiro/qt/widget/label.hpp000066400000000000000000000006521415063341600167640ustar00rootroot00000000000000#if defined(Hiro_Label) namespace hiro { struct pLabel : pWidget { Declare(Label, Widget) auto minimumSize() const -> Size override; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; QtLabel* qtLabel = nullptr; }; } #endif ares-126/hiro/qt/widget/line-edit.cpp000066400000000000000000000033311415063341600175470ustar00rootroot00000000000000#if defined(Hiro_LineEdit) namespace hiro { auto pLineEdit::construct() -> void { qtWidget = qtLineEdit = new QtLineEdit(*this); qtLineEdit->connect(qtLineEdit, SIGNAL(returnPressed()), SLOT(onActivate())); qtLineEdit->connect(qtLineEdit, SIGNAL(textEdited(const QString&)), SLOT(onChange())); pWidget::construct(); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setForegroundColor(state().foregroundColor); setText(state().text); } auto pLineEdit::destruct() -> void { delete qtLineEdit; qtWidget = qtLineEdit = nullptr; } auto pLineEdit::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text); return {size.width() + 12, size.height() + 12}; } auto pLineEdit::setBackgroundColor(Color color) -> void { static auto defaultColor = qtLineEdit->palette().color(QPalette::Base); auto palette = qtLineEdit->palette(); palette.setColor(QPalette::Base, CreateColor(color, defaultColor)); qtLineEdit->setPalette(palette); qtLineEdit->setAutoFillBackground((bool)color); } auto pLineEdit::setEditable(bool editable) -> void { qtLineEdit->setReadOnly(!state().editable); } auto pLineEdit::setForegroundColor(Color color) -> void { static auto defaultColor = qtLineEdit->palette().color(QPalette::Text); auto palette = qtLineEdit->palette(); palette.setColor(QPalette::Text, CreateColor(color, defaultColor)); qtLineEdit->setPalette(palette); } auto pLineEdit::setText(const string& text) -> void { qtLineEdit->setText(QString::fromUtf8(state().text)); } auto QtLineEdit::onActivate() -> void { p.self().doActivate(); } auto QtLineEdit::onChange() -> void { p.state().text = text().toUtf8().constData(); p.self().doChange(); } } #endif ares-126/hiro/qt/widget/line-edit.hpp000066400000000000000000000005771415063341600175650ustar00rootroot00000000000000#if defined(Hiro_LineEdit) namespace hiro { struct pLineEdit : pWidget { Declare(LineEdit, Widget) auto minimumSize() const -> Size override; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; QtLineEdit* qtLineEdit = nullptr; }; } #endif ares-126/hiro/qt/widget/progress-bar.cpp000066400000000000000000000011321415063341600203000ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) namespace hiro { auto pProgressBar::construct() -> void { qtWidget = qtProgressBar = new QProgressBar; qtProgressBar->setRange(0, 100); qtProgressBar->setTextVisible(false); pWidget::construct(); _setState(); } auto pProgressBar::destruct() -> void { delete qtProgressBar; qtWidget = qtProgressBar = nullptr; } auto pProgressBar::minimumSize() const -> Size { return {0, 25}; } auto pProgressBar::setPosition(u32 position) -> void { _setState(); } auto pProgressBar::_setState() -> void { qtProgressBar->setValue(state().position); } } #endif ares-126/hiro/qt/widget/progress-bar.hpp000066400000000000000000000004351415063341600203120ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) namespace hiro { struct pProgressBar : pWidget { Declare(ProgressBar, Widget) auto minimumSize() const -> Size override; auto setPosition(u32 position) -> void; auto _setState() -> void; QProgressBar* qtProgressBar = nullptr; }; } #endif ares-126/hiro/qt/widget/radio-button.cpp000066400000000000000000000060631415063341600203110ustar00rootroot00000000000000#if defined(Hiro_RadioButton) namespace hiro { auto pRadioButton::construct() -> void { qtWidget = qtRadioButton = new QtRadioButton(*this); qtRadioButton->setCheckable(true); qtRadioButton->setToolButtonStyle(Qt::ToolButtonTextOnly); qtRadioButton->connect(qtRadioButton, SIGNAL(toggled(bool)), SLOT(onActivate())); pWidget::construct(); setGroup(state().group); _setState(); } auto pRadioButton::destruct() -> void { if(qtRadioButton) delete qtRadioButton; qtWidget = qtRadioButton = nullptr; } auto pRadioButton::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text); if(state().orientation == Orientation::Horizontal) { size.setWidth(size.width() + state().icon.width()); size.setHeight(max(size.height(), state().icon.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(size.width(), state().icon.width())); size.setHeight(size.height() + state().icon.height()); } return {size.width() + 20, size.height() + 12}; } auto pRadioButton::setBordered(bool bordered) -> void { } auto pRadioButton::setChecked() -> void { _setState(); } auto pRadioButton::setGroup(sGroup group) -> void { bool first = true; if(auto& group = state().group) { group->self()->lock(); for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { if(auto self = radioButton->self()) { self->qtRadioButton->setChecked(radioButton->state.checked = first); first = false; } } } } group->self()->unlock(); } } auto pRadioButton::setIcon(const image& icon) -> void { _setState(); } auto pRadioButton::setOrientation(Orientation orientation) -> void { _setState(); } auto pRadioButton::setText(const string& text) -> void { _setState(); } auto pRadioButton::_setState() -> void { if(auto& group = state().group) { group->self()->lock(); for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { if(auto self = radioButton->self()) { self->qtRadioButton->setChecked(radioButton->state.checked); } } } } group->self()->unlock(); } qtRadioButton->setIconSize(QSize(state().icon.width(), state().icon.height())); qtRadioButton->setIcon(CreateIcon(state().icon)); qtRadioButton->setStyleSheet("text-align: top;"); switch(state().orientation) { case Orientation::Horizontal: qtRadioButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); break; case Orientation::Vertical: qtRadioButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); break; } qtRadioButton->setText(QString::fromUtf8(state().text)); } auto QtRadioButton::onActivate() -> void { if(auto& group = p.state().group) { if(!group->self()->locked()) { bool wasChecked = p.state().checked; p.self().setChecked(); if(!wasChecked) p.self().doActivate(); } } } } #endif ares-126/hiro/qt/widget/radio-button.hpp000066400000000000000000000007621415063341600203160ustar00rootroot00000000000000#if defined(Hiro_RadioButton) namespace hiro { struct pRadioButton : pWidget { Declare(RadioButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto _setState() -> void; QtRadioButton* qtRadioButton = nullptr; }; } #endif ares-126/hiro/qt/widget/radio-label.cpp000066400000000000000000000037571415063341600200640ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) namespace hiro { auto pRadioLabel::construct() -> void { qtWidget = qtRadioLabel = new QtRadioLabel(*this); qtRadioLabel->setAutoExclusive(false); qtRadioLabel->connect(qtRadioLabel, SIGNAL(toggled(bool)), SLOT(onActivate())); pWidget::construct(); setGroup(state().group); _setState(); } auto pRadioLabel::destruct() -> void { if(qtRadioLabel) delete qtRadioLabel; qtWidget = qtRadioLabel = nullptr; } auto pRadioLabel::minimumSize() const -> Size { auto size = pFont::size(qtWidget->font(), state().text); return {size.width() + 26, size.height() + 6}; } auto pRadioLabel::setChecked() -> void { _setState(); } auto pRadioLabel::setGroup(sGroup group) -> void { bool first = true; if(auto& group = state().group) { group->self()->lock(); for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioLabel = dynamic_cast(object.data())) { if(auto self = radioLabel->self()) { self->qtRadioLabel->setChecked(radioLabel->state.checked = first); first = false; } } } } group->self()->unlock(); } } auto pRadioLabel::setText(const string& text) -> void { _setState(); } auto pRadioLabel::_setState() -> void { if(auto& group = state().group) { group->self()->lock(); for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioLabel = dynamic_cast(object.data())) { if(auto self = radioLabel->self()) { self->qtRadioLabel->setChecked(radioLabel->state.checked); } } } } group->self()->unlock(); } qtRadioLabel->setText(QString::fromUtf8(state().text)); } auto QtRadioLabel::onActivate() -> void { if(auto& group = p.state().group) { if(!group->self()->locked()) { bool wasChecked = p.state().checked; p.self().setChecked(); if(!wasChecked) p.self().doActivate(); } } } } #endif ares-126/hiro/qt/widget/radio-label.hpp000066400000000000000000000005371415063341600200620ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) namespace hiro { struct pRadioLabel : pWidget { Declare(RadioLabel, Widget) auto minimumSize() const -> Size override; auto setChecked() -> void; auto setGroup(sGroup group) -> void; auto setText(const string& text) -> void; auto _setState() -> void; QtRadioLabel* qtRadioLabel = nullptr; }; } #endif ares-126/hiro/qt/widget/tab-frame-item.cpp000066400000000000000000000041001415063341600204620ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { auto pTabFrameItem::construct() -> void { qtTabFrameItem = new QWidget; if(auto parent = _parent()) { parent->qtTabFrame->addTab(qtTabFrameItem, ""); } _setState(); } auto pTabFrameItem::destruct() -> void { } auto pTabFrameItem::append(sSizable sizable) -> void { } auto pTabFrameItem::remove(sSizable sizable) -> void { } auto pTabFrameItem::setClosable(bool closable) -> void { } auto pTabFrameItem::setGeometry(Geometry geometry) -> void { if(auto& sizable = state().sizable) { auto offset = qtTabFrameItem->geometry(); geometry.setPosition(); geometry.setWidth(geometry.width() - (geometry.width() - offset.width())); geometry.setHeight(geometry.height() - (geometry.height() - offset.height())); sizable->setGeometry(geometry); } } auto pTabFrameItem::setIcon(const image& icon) -> void { _setState(); } auto pTabFrameItem::setMovable(bool movable) -> void { } auto pTabFrameItem::setSelected() -> void { _setState(); } auto pTabFrameItem::setText(const string& text) -> void { _setState(); } auto pTabFrameItem::setVisible(bool visible) -> void { _setState(); } auto pTabFrameItem::_parent() -> maybe { if(auto parent = self().parentTabFrame()) { if(auto self = parent->self()) return *self; } return nothing; } auto pTabFrameItem::_setState() -> void { if(auto parent = _parent()) { parent->qtTabFrame->setTabIcon(self().offset(), CreateIcon(state().icon)); if(state().selected) parent->qtTabFrame->setCurrentIndex(self().offset()); parent->qtTabFrame->setTabText(self().offset(), QString::fromUtf8(state().text)); if(auto& sizable = state().sizable) { auto geometry = parent->self().geometry(); auto offset = qtTabFrameItem->geometry(); geometry.setPosition({0, 0}); geometry.setWidth(geometry.width() - (geometry.width() - offset.width())); geometry.setHeight(geometry.height() - (geometry.height() - offset.height())); sizable->setGeometry(geometry); sizable->setVisible(sizable->visible()); } } } } #endif ares-126/hiro/qt/widget/tab-frame-item.hpp000066400000000000000000000011441415063341600204740ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrameItem : pObject { Declare(TabFrameItem, Object) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setClosable(bool closable) -> void; auto setIcon(const image& icon) -> void; auto setGeometry(Geometry geometry) -> void; auto setMovable(bool movable) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _parent() -> maybe; auto _setState() -> void; QWidget* qtTabFrameItem = nullptr; }; } #endif ares-126/hiro/qt/widget/tab-frame.cpp000066400000000000000000000035721415063341600175420ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { auto pTabFrame::construct() -> void { qtWidget = qtTabFrame = new QtTabFrame(*this); qtTabFrame->connect(qtTabFrame, SIGNAL(currentChanged(int)), SLOT(onChange(int))); pWidget::construct(); _setState(); } auto pTabFrame::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtTabFrame; qtWidget = qtTabFrame = nullptr; } auto pTabFrame::append(sTabFrameItem item) -> void { setGeometry(self().geometry()); } auto pTabFrame::remove(sTabFrameItem item) -> void { } auto pTabFrame::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); for(auto& item : state().items) { if(auto self = item->self()) self->setGeometry(geometry); } } auto pTabFrame::setNavigation(Navigation navigation) -> void { _setState(); } auto pTabFrame::_setState() -> void { switch(state().navigation) { default: case Navigation::Top: qtTabFrame->setTabPosition(QTabWidget::TabPosition::North); break; case Navigation::Bottom: qtTabFrame->setTabPosition(QTabWidget::TabPosition::South); break; case Navigation::Left: qtTabFrame->setTabPosition(QTabWidget::TabPosition::West); break; case Navigation::Right: qtTabFrame->setTabPosition(QTabWidget::TabPosition::East); break; } for(auto& item : state().items) { if(auto self = item->self()) self->_setState(); } } auto QtTabFrame::showEvent(QShowEvent* event) -> void { QTabWidget::showEvent(event); p._setState(); //needed to capture geometry of TabFrame for TabFrameItem layouts } auto QtTabFrame::onChange(int selection) -> void { //geometry of tab frames is only valid once said tab frame is visible //as such, as need to call _setState() to update the TabFrameItem's geometry here if(auto item = p.self().item(selection)) { if(auto self = item->self()) self->_setState(); } if(!p.locked()) p.self().doChange(); } } #endif ares-126/hiro/qt/widget/tab-frame.hpp000066400000000000000000000005731415063341600175450ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrame : pWidget { Declare(TabFrame, Widget) auto append(sTabFrameItem item) -> void; auto remove(sTabFrameItem item) -> void; auto setGeometry(Geometry geometry) -> void override; auto setNavigation(Navigation navigation) -> void; auto _setState() -> void; QtTabFrame* qtTabFrame = nullptr; }; } #endif ares-126/hiro/qt/widget/table-view-cell.cpp000066400000000000000000000037371415063341600206630ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewCell::construct() -> void { } auto pTableViewCell::destruct() -> void { } auto pTableViewCell::setAlignment(Alignment alignment) -> void { _setState(); } auto pTableViewCell::setBackgroundColor(Color color) -> void { _setState(); } auto pTableViewCell::setCheckable(bool checkable) -> void { _setState(); } auto pTableViewCell::setChecked(bool checked) -> void { _setState(); } auto pTableViewCell::setFont(const string& font) -> void { _setState(); } auto pTableViewCell::setForegroundColor(Color color) -> void { _setState(); } auto pTableViewCell::setIcon(const image& icon) -> void { _setState(); } auto pTableViewCell::setText(const string& text) -> void { _setState(); } auto pTableViewCell::_parent() -> maybe { if(auto parent = self().parentTableViewItem()) { if(auto delegate = parent->self()) return *delegate; } return nothing; } auto pTableViewCell::_setState() -> void { if(auto parent = _parent()) { if(auto grandparent = parent->_parent()) { auto lock = grandparent->acquire(); parent->qtItem->setBackground(self().offset(), CreateBrush(self().backgroundColor(true))); if(state().checkable) { parent->qtItem->setCheckState(self().offset(), state().checked ? Qt::Checked : Qt::Unchecked); } else { //extremely unintuitive; but this is the only way to remove an existing checkbox from a cell parent->qtItem->setData(self().offset(), Qt::CheckStateRole, QVariant()); } parent->qtItem->setFont(self().offset(), pFont::create(self().font(true))); parent->qtItem->setForeground(self().offset(), CreateBrush(self().foregroundColor(true))); parent->qtItem->setIcon(self().offset(), CreateIcon(state().icon)); parent->qtItem->setText(self().offset(), QString::fromUtf8(state().text)); parent->qtItem->setTextAlignment(self().offset(), CalculateAlignment(self().alignment(true))); } } } } #endif ares-126/hiro/qt/widget/table-view-cell.hpp000066400000000000000000000010651415063341600206600ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewCell : pObject { Declare(TableViewCell, Object) auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setFont(const string& font) -> void; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/qt/widget/table-view-column.cpp000066400000000000000000000064561415063341600212420ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewColumn::construct() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); //parent->qtTableView->setAlternatingRowColors(parent->self().columnCount() >= 2); parent->qtTableView->setColumnCount(parent->self().columnCount()); for(auto& column : parent->state().columns) { if(auto delegate = column->self()) { delegate->setIcon(delegate->state().icon); delegate->setText(delegate->state().text); //also handles setSorting(); delegate->_setState(); } } } } auto pTableViewColumn::destruct() -> void { } auto pTableViewColumn::setActive() -> void { //unsupported } auto pTableViewColumn::setAlignment(Alignment alignment) -> void { _setState(); } auto pTableViewColumn::setBackgroundColor(Color color) -> void { _setState(); } auto pTableViewColumn::setEditable(bool editable) -> void { //unsupported } auto pTableViewColumn::setExpandable(bool expandable) -> void { _setState(); } auto pTableViewColumn::setFont(const Font& font) -> void { _setState(); } auto pTableViewColumn::setForegroundColor(Color color) -> void { _setState(); } auto pTableViewColumn::setHorizontalAlignment(double alignment) -> void { _setState(); } auto pTableViewColumn::setIcon(const image& icon) -> void { if(auto parent = _parent()) { parent->qtTableView->headerItem()->setIcon(self().offset(), CreateIcon(icon)); } } auto pTableViewColumn::setResizable(bool resizable) -> void { _setState(); } auto pTableViewColumn::setSorting(Sort) -> void { if(auto parent = _parent()) { string label = state().text; if(state().sorting == Sort::Ascending ) label.append(" \u25b4"); if(state().sorting == Sort::Descending) label.append(" \u25be"); parent->qtTableView->headerItem()->setText(self().offset(), QString::fromUtf8(label)); } } auto pTableViewColumn::setText(const string&) -> void { if(auto parent = _parent()) { string label = state().text; if(state().sorting == Sort::Ascending ) label.append(" \u25b4"); if(state().sorting == Sort::Descending) label.append(" \u25be"); parent->qtTableView->headerItem()->setText(self().offset(), QString::fromUtf8(label)); } } auto pTableViewColumn::setVerticalAlignment(double alignment) -> void { _setState(); } auto pTableViewColumn::setVisible(bool visible) -> void { _setState(); } auto pTableViewColumn::setWidth(s32 width) -> void { _setState(); } auto pTableViewColumn::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto delegate = parent->self()) return *delegate; } return {}; } auto pTableViewColumn::_setState() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); #if HIRO_QT==4 parent->qtTableView->header()->setResizeMode(self().offset(), state().resizable ? QHeaderView::Interactive : QHeaderView::Fixed); #elif HIRO_QT==5 parent->qtTableView->header()->setSectionResizeMode(self().offset(), state().resizable ? QHeaderView::Interactive : QHeaderView::Fixed); #endif parent->qtTableView->setColumnHidden(self().offset(), !self().visible()); for(auto& item : parent->state().items) { if(auto cell = item->cell(self().offset())) { if(auto self = cell->self()) self->_setState(); } } } } } #endif ares-126/hiro/qt/widget/table-view-column.hpp000066400000000000000000000015701415063341600212370ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewColumn : pObject { Declare(TableViewColumn, Object) auto setActive() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setExpandable(bool expandable) -> void; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setHorizontalAlignment(double alignment) -> void; auto setIcon(const image& icon) -> void; auto setResizable(bool resizable) -> void; auto setSorting(Sort sorting) -> void; auto setText(const string& text) -> void; auto setVerticalAlignment(double alignment) -> void; auto setVisible(bool visible) -> void override; auto setWidth(s32 width) -> void; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/qt/widget/table-view-item.cpp000066400000000000000000000025231415063341600206720ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewItem::construct() -> void { } auto pTableViewItem::destruct() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); if(qtItem) { delete qtItem; qtItem = nullptr; } } } auto pTableViewItem::append(sTableViewCell cell) -> void { _setState(); } auto pTableViewItem::remove(sTableViewCell cell) -> void { _setState(); } auto pTableViewItem::setAlignment(Alignment alignment) -> void { _setState(); } auto pTableViewItem::setBackgroundColor(Color color) -> void { _setState(); } auto pTableViewItem::setFont(const Font& font) -> void { _setState(); } auto pTableViewItem::setForegroundColor(Color color) -> void { _setState(); } auto pTableViewItem::setSelected(bool selected) -> void { _setState(); } auto pTableViewItem::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto delegate = parent->self()) return *delegate; } return nothing; } auto pTableViewItem::_setState() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); qtItem->setSelected(state().selected); if(state().selected) { parent->qtTableView->setCurrentItem(qtItem); } for(auto& cell : state().cells) { if(auto self = cell->self()) self->_setState(); } } } } #endif ares-126/hiro/qt/widget/table-view-item.hpp000066400000000000000000000010641415063341600206760ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewItem : pObject { Declare(TableViewItem, Object) auto append(sTableViewCell cell) -> void; auto remove(sTableViewCell cell) -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setFont(const Font& font) -> void override; auto setForegroundColor(Color color) -> void; auto setSelected(bool selected) -> void; auto _parent() -> maybe; auto _setState() -> void; QTreeWidgetItem* qtItem = nullptr; }; } #endif ares-126/hiro/qt/widget/table-view.cpp000066400000000000000000000174461415063341600177500ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableView::construct() -> void { qtWidget = qtTableView = new QtTableView(*this); qtTableView->setAllColumnsShowFocus(true); qtTableView->setContextMenuPolicy(Qt::CustomContextMenu); qtTableView->setRootIsDecorated(false); qtTableView->setHeaderHidden(true); #if HIRO_QT==4 qtTableView->header()->setMovable(false); #elif HIRO_QT==5 qtTableView->header()->setSectionsMovable(false); #endif qtTableViewDelegate = new QtTableViewDelegate(*this); qtTableView->setItemDelegate(qtTableViewDelegate); qtTableView->connect(qtTableView, SIGNAL(itemActivated(QTreeWidgetItem*, int)), SLOT(onActivate(QTreeWidgetItem*, int))); qtTableView->connect(qtTableView, SIGNAL(itemSelectionChanged()), SLOT(onChange())); qtTableView->connect(qtTableView, SIGNAL(customContextMenuRequested(const QPoint&)), SLOT(onContext(const QPoint&))); qtTableView->connect(qtTableView->header(), SIGNAL(sectionClicked(int)), SLOT(onSort(int))); qtTableView->connect(qtTableView, SIGNAL(itemChanged(QTreeWidgetItem*, int)), SLOT(onToggle(QTreeWidgetItem*, int))); setBackgroundColor(state().backgroundColor); setBatchable(state().batchable); setBordered(state().bordered); setForegroundColor(state().foregroundColor); setHeadered(state().headered); setSortable(state().sortable); pWidget::construct(); } auto pTableView::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtTableViewDelegate; delete qtTableView; qtWidget = qtTableView = nullptr; qtTableViewDelegate = nullptr; } auto pTableView::append(sTableViewColumn column) -> void { } auto pTableView::append(sTableViewItem item) -> void { lock(); if(auto self = item->self()) { self->qtItem = new QTreeWidgetItem(qtTableView); self->_setState(); } unlock(); } auto pTableView::remove(sTableViewColumn column) -> void { } auto pTableView::remove(sTableViewItem item) -> void { } auto pTableView::resizeColumns() -> void { auto lock = acquire(); vector widths; s32 minimumWidth = 0; s32 expandable = 0; for(auto column : range(self().columnCount())) { s32 width = _width(column); widths.append(width); minimumWidth += width; if(self().column(column).expandable()) expandable++; } s32 maximumWidth = self().geometry().width() - 6; if(auto scrollBar = qtTableView->verticalScrollBar()) { if(scrollBar->isVisible()) maximumWidth -= scrollBar->geometry().width(); } s32 expandWidth = 0; if(expandable && maximumWidth > minimumWidth) { expandWidth = (maximumWidth - minimumWidth) / expandable; } for(auto column : range(self().columnCount())) { s32 width = widths[column]; if(self().column(column).expandable()) width += expandWidth; qtTableView->setColumnWidth(column, width); } } auto pTableView::setAlignment(Alignment alignment) -> void { } auto pTableView::setBackgroundColor(Color color) -> void { //note: QPalette::AlternateBase can be used for alternating row colors static auto defaultColor = qtTableView->palette().color(QPalette::Base); auto palette = qtTableView->palette(); palette.setColor(QPalette::Base, CreateColor(color, defaultColor)); qtTableView->setPalette(palette); qtTableView->setAutoFillBackground((bool)color); } auto pTableView::setBatchable(bool batchable) -> void { lock(); qtTableView->setSelectionMode(batchable ? QAbstractItemView::ExtendedSelection : QAbstractItemView::SingleSelection); unlock(); } auto pTableView::setBordered(bool bordered) -> void { qtTableView->repaint(); } auto pTableView::setForegroundColor(Color color) -> void { static auto defaultColor = qtTableView->palette().color(QPalette::Text); auto palette = qtTableView->palette(); palette.setColor(QPalette::Text, CreateColor(color, defaultColor)); qtTableView->setPalette(palette); qtTableView->setAutoFillBackground((bool)color); } auto pTableView::setHeadered(bool headered) -> void { qtTableView->setHeaderHidden(!headered); } auto pTableView::setSortable(bool sortable) -> void { #if HIRO_QT==4 qtTableView->header()->setClickable(sortable); #elif HIRO_QT==5 qtTableView->header()->setSectionsClickable(sortable); #endif } //called on resize/show events auto pTableView::_onSize() -> void { //resize columns only if at least one column is expandable for(auto& column : state().columns) { if(column->expandable()) return resizeColumns(); } } auto pTableView::_width(u32 column) -> u32 { if(auto width = self().column(column).width()) return width; u32 width = 1; if(!self().column(column).visible()) return width; if(state().headered) width = max(width, _widthOfColumn(column)); for(auto row : range(state().items.size())) { width = max(width, _widthOfCell(row, column)); } return width; } auto pTableView::_widthOfColumn(u32 _column) -> u32 { u32 width = 8; if(auto column = self().column(_column)) { if(auto& icon = column->state.icon) { width += icon.width() + 4; } if(auto& text = column->state.text) { width += pFont::size(column->font(true), text).width(); } if(column->state.sorting != Sort::None) { width += 12; } } return width; } auto pTableView::_widthOfCell(u32 _row, u32 _column) -> u32 { u32 width = 8; if(auto item = self().item(_row)) { if(auto cell = item->cell(_column)) { if(cell->state.checkable) { width += 16 + 4; } if(auto& icon = cell->state.icon) { width += icon.width() + 4; } if(auto& text = cell->state.text) { width += pFont::size(cell->font(true), text).width(); } } } return width; } auto QtTableView::onActivate(QTreeWidgetItem* qtItem, int column) -> void { if(p.locked()) return; for(auto& item : p.state().items) { if(auto self = item->self()) { if(qtItem == self->qtItem) { if(auto cell = item->cell(column)) { return p.self().doActivate(cell); } } } } p.self().doActivate({}); } auto QtTableView::onChange() -> void { for(auto& item : p.state().items) { item->state.selected = false; if(auto self = item->self()) { if(self->qtItem->isSelected()) item->state.selected = true; } } if(!p.locked()) p.self().doChange(); } auto QtTableView::onContext(const QPoint&) -> void { if(p.locked()) return; //todo: determine actual cell clicked instead of returning the first cell auto item = p.self().selected(); auto cell = item.cell(0); p.self().doContext(cell); } auto QtTableView::onSort(int columnNumber) -> void { if(auto column = p.self().column(columnNumber)) { if(!p.locked() && p.state().sortable) p.self().doSort(column); } } auto QtTableView::onToggle(QTreeWidgetItem* qtItem, int column) -> void { for(auto& item : p.state().items) { if(auto self = item->self()) { if(qtItem == self->qtItem) { if(auto cell = item->cell(column)) { cell->state.checked = (qtItem->checkState(column) == Qt::Checked); if(!p.locked()) p.self().doToggle(cell); } } } } } auto QtTableView::mousePressEvent(QMouseEvent* event) -> void { QTreeWidget::mousePressEvent(event); if(event->button() == Qt::RightButton) onContext(); } auto QtTableView::resizeEvent(QResizeEvent* event) -> void { QTreeWidget::resizeEvent(event); p._onSize(); } auto QtTableView::showEvent(QShowEvent* event) -> void { QTreeWidget::showEvent(event); p._onSize(); } QtTableViewDelegate::QtTableViewDelegate(pTableView& p) : QStyledItemDelegate(p.qtTableView), p(p) { } auto QtTableViewDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const -> void { QStyledItemDelegate::paint(painter, option, index); if(p.state().bordered) { QPen pen; pen.setColor(QColor(160, 160, 160)); pen.setWidth(1); painter->setPen(pen); painter->drawRect(option.rect); } } } #endif ares-126/hiro/qt/widget/table-view.hpp000066400000000000000000000016061415063341600177440ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableView : pWidget { Declare(TableView, Widget) auto append(sTableViewColumn header) -> void; auto append(sTableViewItem item) -> void; auto remove(sTableViewColumn header) -> void; auto remove(sTableViewItem item) -> void; auto resizeColumns() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setBatchable(bool batchable) -> void; auto setBordered(bool bordered) -> void; auto setForegroundColor(Color color) -> void; auto setHeadered(bool headered) -> void; auto setSortable(bool sortable) -> void; auto _onSize() -> void; auto _width(u32 column) -> u32; auto _widthOfColumn(u32 column) -> u32; auto _widthOfCell(u32 row, u32 column) -> u32; QtTableView* qtTableView = nullptr; QtTableViewDelegate* qtTableViewDelegate = nullptr; }; } #endif ares-126/hiro/qt/widget/text-edit.cpp000066400000000000000000000050151415063341600176050ustar00rootroot00000000000000#if defined(Hiro_TextEdit) namespace hiro { auto pTextEdit::construct() -> void { qtWidget = qtTextEdit = new QtTextEdit(*this); qtTextEdit->connect(qtTextEdit, SIGNAL(textChanged()), SLOT(onChange())); pWidget::construct(); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); _setState(); } auto pTextEdit::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtTextEdit; qtWidget = qtTextEdit = nullptr; } auto pTextEdit::setBackgroundColor(Color color) -> void { static auto defaultColor = qtTextEdit->palette().color(QPalette::Base); auto palette = qtTextEdit->palette(); palette.setColor(QPalette::Base, CreateColor(color, defaultColor)); qtTextEdit->setPalette(palette); qtTextEdit->setAutoFillBackground((bool)color); } auto pTextEdit::setEditable(bool editable) -> void { _setState(); } auto pTextEdit::setForegroundColor(Color color) -> void { static auto defaultColor = qtTextEdit->palette().color(QPalette::Text); auto palette = qtTextEdit->palette(); palette.setColor(QPalette::Text, CreateColor(color, defaultColor)); qtTextEdit->setPalette(palette); } auto pTextEdit::setText(const string& text) -> void { qtTextEdit->setPlainText(QString::fromUtf8(text)); } auto pTextEdit::setTextCursor(TextCursor cursor) -> void { _setState(); } auto pTextEdit::setWordWrap(bool wordWrap) -> void { _setState(); } auto pTextEdit::text() const -> string { return qtTextEdit->toPlainText().toUtf8().constData(); } auto pTextEdit::textCursor() const -> TextCursor { //TODO return state().textCursor; } auto pTextEdit::_setState() -> void { QTextCursor cursor = qtTextEdit->textCursor(); s32 lastCharacter = strlen(qtTextEdit->toPlainText().toUtf8().constData()); cursor.setPosition(max(0, min(lastCharacter, state().textCursor.offset()))); cursor.setPosition(max(0, min(lastCharacter, state().textCursor.offset() + state().textCursor.length())), QTextCursor::KeepAnchor); qtTextEdit->setTextCursor(cursor); qtTextEdit->setTextInteractionFlags(state().editable ? Qt::TextEditorInteraction : Qt::TextSelectableByKeyboard | Qt::TextSelectableByMouse ); qtTextEdit->setWordWrapMode(state().wordWrap ? QTextOption::WordWrap : QTextOption::NoWrap); qtTextEdit->setHorizontalScrollBarPolicy(state().wordWrap ? Qt::ScrollBarAlwaysOff : Qt::ScrollBarAlwaysOn); qtTextEdit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); } auto QtTextEdit::onChange() -> void { //p.state().text = text(); p.self().doChange(); } } #endif ares-126/hiro/qt/widget/text-edit.hpp000066400000000000000000000010231415063341600176050ustar00rootroot00000000000000#if defined(Hiro_TextEdit) namespace hiro { struct pTextEdit : pWidget { Declare(TextEdit, Widget) auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; auto setTextCursor(TextCursor cursor) -> void; auto setWordWrap(bool wordWrap) -> void; auto text() const -> string; auto textCursor() const -> TextCursor; auto _setState() -> void; QtTextEdit* qtTextEdit = nullptr; }; } #endif ares-126/hiro/qt/widget/tree-view-item.cpp000066400000000000000000000057271415063341600205530ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeViewItem::construct() -> void { qtStandardItem = new QStandardItem; qtStandardItem->setEditable(false); if(auto parentWidget = _parentWidget()) { auto parentItem = _parentItem(); if(auto parentItem = _parentItem()) { parentItem->qtStandardItem->appendRow(qtStandardItem); } else { parentWidget->qtStandardItemModel->appendRow(qtStandardItem); } } setBackgroundColor(state().backgroundColor); setCheckable(state().checkable); setChecked(state().checked); setExpanded(state().expanded); setForegroundColor(state().foregroundColor); setIcon(state().icon); setText(state().text); } auto pTreeViewItem::destruct() -> void { delete qtStandardItem; qtStandardItem = nullptr; } // auto pTreeViewItem::append(sTreeViewItem item) -> void { } auto pTreeViewItem::remove(sTreeViewItem item) -> void { } auto pTreeViewItem::setBackgroundColor(Color color) -> void { qtStandardItem->setBackground(CreateBrush(self().backgroundColor(true))); } auto pTreeViewItem::setCheckable(bool checkable) -> void { if(checkable) { qtStandardItem->setCheckState(state().checked? Qt::Checked : Qt::Unchecked); } else { qtStandardItem->setData(QVariant(), Qt::CheckStateRole); } } auto pTreeViewItem::setChecked(bool checked) -> void { if(state().checkable) { qtStandardItem->setCheckState(state().checked ? Qt::Checked : Qt::Unchecked); } } auto pTreeViewItem::setExpanded(bool expanded) -> void { if(auto parentWidget = _parentWidget()) { auto index = parentWidget->qtStandardItemModel->indexFromItem(qtStandardItem); if(expanded) { parentWidget->qtTreeView->expand(index); } else { parentWidget->qtTreeView->collapse(index); } } } auto pTreeViewItem::setFocused() -> void { //todo } //todo: not connected in TreeViewItem yet auto pTreeViewItem::setFont(const string& font) -> void { qtStandardItem->setFont(pFont::create(self().font(true))); } auto pTreeViewItem::setForegroundColor(Color color) -> void { qtStandardItem->setForeground(CreateBrush(self().foregroundColor(true))); } auto pTreeViewItem::setIcon(const image& icon) -> void { qtStandardItem->setIcon(CreateIcon(state().icon)); } auto pTreeViewItem::setSelected() -> void { if(auto parentWidget = _parentWidget()) { auto index = parentWidget->qtStandardItemModel->indexFromItem(qtStandardItem); auto selectionModel = parentWidget->qtTreeView->selectionModel(); selectionModel->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows); } } auto pTreeViewItem::setText(const string& text) -> void { qtStandardItem->setText(QString::fromUtf8(text)); } // auto pTreeViewItem::_parentItem() -> pTreeViewItem* { if(auto parentItem = self().parentTreeViewItem()) return parentItem->self(); return nullptr; } auto pTreeViewItem::_parentWidget() -> pTreeView* { if(auto parentWidget = self().parentTreeView(true)) return parentWidget->self(); return nullptr; } } #endif ares-126/hiro/qt/widget/tree-view-item.hpp000066400000000000000000000013671415063341600205540ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeViewItem : pObject { Declare(TreeViewItem, Object) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setExpanded(bool expanded) -> void; auto setFocused() -> void override; auto setFont(const string& font) -> void; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parentItem() -> pTreeViewItem*; auto _parentWidget() -> pTreeView*; QStandardItem* qtStandardItem = nullptr; }; } #endif ares-126/hiro/qt/widget/tree-view.cpp000066400000000000000000000027111415063341600176050ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeView::construct() -> void { qtWidget = qtTreeView = new QtTreeView(*this); qtStandardItemModel = new QStandardItemModel; qtTreeView->setHeaderHidden(true); qtTreeView->setModel(qtStandardItemModel); qtTreeView->setUniformRowHeights(true); setActivation(state().activation); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); pWidget::construct(); } auto pTreeView::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtTreeView; delete qtStandardItemModel; qtWidget = qtTreeView = nullptr; qtStandardItemModel = nullptr; } // auto pTreeView::append(sTreeViewItem item) -> void { } auto pTreeView::remove(sTreeViewItem item) -> void { } auto pTreeView::setActivation(Mouse::Click activation) -> void { } auto pTreeView::setBackgroundColor(Color color) -> void { static auto defaultColor = qtTreeView->palette().color(QPalette::Base); auto palette = qtTreeView->palette(); palette.setColor(QPalette::Base, CreateColor(color, defaultColor)); qtTreeView->setPalette(palette); qtTreeView->setAutoFillBackground((bool)color); } auto pTreeView::setForegroundColor(Color color) -> void { static auto defaultColor = qtTreeView->palette().color(QPalette::Text); auto palette = qtTreeView->palette(); palette.setColor(QPalette::Text, CreateColor(color, defaultColor)); qtTreeView->setPalette(palette); } } #endif ares-126/hiro/qt/widget/tree-view.hpp000066400000000000000000000006751415063341600176210ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeView : pWidget { Declare(TreeView, Widget) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setActivation(Mouse::Click activation) -> void; auto setBackgroundColor(Color color) -> void; auto setForegroundColor(Color color) -> void; QtTreeView* qtTreeView = nullptr; QStandardItemModel* qtStandardItemModel = nullptr; }; } #endif ares-126/hiro/qt/widget/vertical-scroll-bar.cpp000066400000000000000000000021361415063341600215460ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) namespace hiro { auto pVerticalScrollBar::construct() -> void { qtWidget = qtVerticalScrollBar = new QtVerticalScrollBar(*this); qtVerticalScrollBar->setRange(0, 100); qtVerticalScrollBar->setPageStep(101 >> 3); qtVerticalScrollBar->connect(qtVerticalScrollBar, SIGNAL(valueChanged(int)), SLOT(onChange())); pWidget::construct(); _setState(); } auto pVerticalScrollBar::destruct() -> void { delete qtVerticalScrollBar; qtWidget = qtVerticalScrollBar = nullptr; } auto pVerticalScrollBar::minimumSize() const -> Size { return {15, 0}; } auto pVerticalScrollBar::setLength(u32 length) -> void { _setState(); } auto pVerticalScrollBar::setPosition(u32 position) -> void { _setState(); } auto pVerticalScrollBar::_setState() -> void { s32 length = state().length + (state().length == 0); qtVerticalScrollBar->setRange(0, length - 1); qtVerticalScrollBar->setPageStep(length >> 3); qtVerticalScrollBar->setValue(state().position); } auto QtVerticalScrollBar::onChange() -> void { p.state().position = value(); p.self().doChange(); } } #endif ares-126/hiro/qt/widget/vertical-scroll-bar.hpp000066400000000000000000000005421415063341600215520ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) namespace hiro { struct pVerticalScrollBar : pWidget { Declare(VerticalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto _setState() -> void; QtVerticalScrollBar* qtVerticalScrollBar = nullptr; }; } #endif ares-126/hiro/qt/widget/vertical-slider.cpp000066400000000000000000000021261415063341600207670ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) namespace hiro { auto pVerticalSlider::minimumSize() const -> Size { return {20, 0}; } auto pVerticalSlider::setLength(u32 length) -> void { _setState(); } auto pVerticalSlider::setPosition(u32 position) -> void { _setState(); } auto pVerticalSlider::construct() -> void { qtWidget = qtVerticalSlider = new QtVerticalSlider(*this); qtVerticalSlider->setInvertedAppearance(true); qtVerticalSlider->setRange(0, 100); qtVerticalSlider->setPageStep(101 >> 3); qtVerticalSlider->connect(qtVerticalSlider, SIGNAL(valueChanged(int)), SLOT(onChange())); pWidget::construct(); _setState(); } auto pVerticalSlider::destruct() -> void { delete qtVerticalSlider; qtWidget = qtVerticalSlider = nullptr; } auto pVerticalSlider::_setState() -> void { s32 length = state().length + (state().length == 0); qtVerticalSlider->setRange(0, length - 1); qtVerticalSlider->setPageStep(length >> 3); qtVerticalSlider->setValue(state().position); } auto QtVerticalSlider::onChange() -> void { p.state().position = value(); p.self().doChange(); } } #endif ares-126/hiro/qt/widget/vertical-slider.hpp000066400000000000000000000005231415063341600207730ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) namespace hiro { struct pVerticalSlider : pWidget { Declare(VerticalSlider, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto _setState() -> void; QtVerticalSlider* qtVerticalSlider = nullptr; }; } #endif ares-126/hiro/qt/widget/viewport.cpp000066400000000000000000000035251415063341600175610ustar00rootroot00000000000000#if defined(Hiro_Viewport) namespace hiro { auto pViewport::construct() -> void { qtWidget = qtViewport = new QtViewport(*this); qtViewport->setMouseTracking(true); qtViewport->setAttribute(Qt::WA_PaintOnScreen, true); qtViewport->setStyleSheet("background: #000000"); pWidget::construct(); _setState(); } auto pViewport::destruct() -> void { delete qtViewport; qtWidget = qtViewport = nullptr; } auto pViewport::handle() const -> uintptr_t { return (uintptr_t)qtViewport->winId(); } auto pViewport::setDroppable(bool droppable) -> void { _setState(); } auto pViewport::setFocusable(bool focusable) -> void { //TODO } auto pViewport::_setState() -> void { qtViewport->setAcceptDrops(self().droppable()); } auto QtViewport::dragEnterEvent(QDragEnterEvent* event) -> void { if(event->mimeData()->hasUrls()) { event->acceptProposedAction(); } } auto QtViewport::dropEvent(QDropEvent* event) -> void { if(auto paths = DropPaths(event)) p.self().doDrop(paths); } auto QtViewport::leaveEvent(QEvent* event) -> void { p.self().doMouseLeave(); } auto QtViewport::mouseMoveEvent(QMouseEvent* event) -> void { p.self().doMouseMove({event->pos().x(), event->pos().y()}); } auto QtViewport::mousePressEvent(QMouseEvent* event) -> void { switch(event->button()) { case Qt::LeftButton: p.self().doMousePress(Mouse::Button::Left); break; case Qt::MidButton: p.self().doMousePress(Mouse::Button::Middle); break; case Qt::RightButton: p.self().doMousePress(Mouse::Button::Right); break; } } auto QtViewport::mouseReleaseEvent(QMouseEvent* event) -> void { switch(event->button()) { case Qt::LeftButton: p.self().doMouseRelease(Mouse::Button::Left); break; case Qt::MidButton: p.self().doMouseRelease(Mouse::Button::Middle); break; case Qt::RightButton: p.self().doMouseRelease(Mouse::Button::Right); break; } } } #endif ares-126/hiro/qt/widget/viewport.hpp000066400000000000000000000005101415063341600175550ustar00rootroot00000000000000#if defined(Hiro_Viewport) namespace hiro { struct pViewport : pWidget { Declare(Viewport, Widget) auto handle() const -> uintptr_t; auto setDroppable(bool droppable) -> void override; auto setFocusable(bool focusable) -> void override; auto _setState() -> void; QtViewport* qtViewport = nullptr; }; } #endif ares-126/hiro/qt/widget/widget.cpp000066400000000000000000000047121415063341600171640ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { static auto ParentContainer(mObject& object) -> QWidget* { if(auto frame = object.parentFrame()) { if(auto self = frame->self()) return self->qtFrame; } if(auto tabFrameItem = object.parentTabFrameItem()) { if(auto self = tabFrameItem->self()) return self->qtTabFrameItem; } if(auto window = object.parentWindow()) { if(auto self = window->self()) return self->qtContainer; } if(auto parent = object.parent()) { return ParentContainer(*parent); } return nullptr; } auto pWidget::construct() -> void { if(!qtWidget) return; if(auto container = ParentContainer(self())) { qtWidget->setParent(container); } setDroppable(self().droppable()); setEnabled(self().enabled(true)); setFocusable(self().focusable()); setFont(self().font(true)); setMouseCursor(self().mouseCursor()); setToolTip(self().toolTip()); setVisible(self().visible(true)); } auto pWidget::destruct() -> void { } auto pWidget::focused() const -> bool { if(!qtWidget) return false; return qtWidget->hasFocus(); } auto pWidget::setDroppable(bool droppable) -> void { //virtual overload, implemented on a per-widget basis } auto pWidget::setEnabled(bool enabled) -> void { if(!qtWidget) return; qtWidget->setEnabled(enabled); } auto pWidget::setFocusable(bool focusable) -> void { //virtual overload, implemented on a per-widget basis } auto pWidget::setFocused() -> void { if(!qtWidget) return; qtWidget->setFocus(Qt::OtherFocusReason); } auto pWidget::setFont(const Font& font) -> void { if(!qtWidget) return; qtWidget->setFont(pFont::create(font)); } auto pWidget::setGeometry(Geometry geometry) -> void { if(!qtWidget) return; qtWidget->setGeometry(geometry.x(), geometry.y(), geometry.width(), geometry.height()); pSizable::setGeometry(geometry); } auto pWidget::setMouseCursor(const MouseCursor& mouseCursor) -> void { auto cursorID = Qt::ArrowCursor; if(mouseCursor.name() == MouseCursor::Hand) cursorID = Qt::PointingHandCursor; if(mouseCursor.name() == MouseCursor::HorizontalResize) cursorID = Qt::SizeHorCursor; if(mouseCursor.name() == MouseCursor::VerticalResize) cursorID = Qt::SizeVerCursor; qtWidget->setCursor(cursorID); } auto pWidget::setToolTip(const string& toolTip) -> void { if(!qtWidget) return; qtWidget->setToolTip(QString::fromUtf8(toolTip)); } auto pWidget::setVisible(bool visible) -> void { if(!qtWidget) return; qtWidget->setVisible(visible); } } #endif ares-126/hiro/qt/widget/widget.hpp000066400000000000000000000012131415063341600171620ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { struct pWidget : pSizable { Declare(Widget, Sizable) auto focused() const -> bool override; virtual auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; virtual auto setFocusable(bool focusable) -> void; auto setFocused() -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setMouseCursor(const MouseCursor& mouseCursor) -> void; auto setToolTip(const string& toolTip) -> void; auto setVisible(bool visible) -> void override; QWidget* qtWidget = nullptr; }; } #endif ares-126/hiro/qt/window.cpp000066400000000000000000000260071415063341600157260ustar00rootroot00000000000000#if defined(Hiro_Window) namespace hiro { auto pWindow::construct() -> void { qtWindow = new QtWindow(*this); qtWindow->setWindowTitle(" "); //if program was given a name, try and set the window taskbar icon to a matching pixmap image if(auto name = Application::state().name) { if(file::exists({Path::user(), ".local/share/icons/", name, ".png"})) { qtWindow->setWindowIcon(QIcon(QString::fromUtf8(string{Path::user(), ".local/share/icons/", name, ".png"}))); } else if(file::exists({"/usr/local/share/pixmaps/", name, ".png"})) { qtWindow->setWindowIcon(QIcon(QString::fromUtf8(string{"/usr/local/share/pixmaps/", name, ".png"}))); } else if(file::exists({"/usr/share/pixmaps/", name, ".png"})) { qtWindow->setWindowIcon(QIcon(QString::fromUtf8(string{"/usr/share/pixmaps/", name, ".png"}))); } } qtLayout = new QVBoxLayout(qtWindow); qtLayout->setMargin(0); qtLayout->setSpacing(0); qtWindow->setLayout(qtLayout); qtMenuBar = new QMenuBar(qtWindow); qtMenuBar->setVisible(false); qtLayout->addWidget(qtMenuBar); qtContainer = new QWidget(qtWindow); qtContainer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); qtContainer->setVisible(true); qtLayout->addWidget(qtContainer); qtStatusBar = new QStatusBar(qtWindow); qtStatusBar->setSizeGripEnabled(true); qtStatusBar->setVisible(false); qtLayout->addWidget(qtStatusBar); setBackgroundColor(state().backgroundColor); setDroppable(state().droppable); setGeometry(state().geometry); setResizable(state().resizable); setTitle(state().title); } auto pWindow::destruct() -> void { if(Application::state().quit) return; //TODO: hack delete qtStatusBar; delete qtContainer; delete qtMenuBar; delete qtLayout; delete qtWindow; } auto pWindow::append(sMenuBar menuBar) -> void { } auto pWindow::append(sSizable sizable) -> void { } auto pWindow::append(sStatusBar statusBar) -> void { } auto pWindow::focused() const -> bool { return qtWindow->isActiveWindow() && !qtWindow->isMinimized(); } auto pWindow::frameMargin() const -> Geometry { if(state().fullScreen) return { 0, _menuHeight(), 0, _menuHeight() + _statusHeight() }; return { settings.geometry.frameX, settings.geometry.frameY + _menuHeight(), settings.geometry.frameWidth, settings.geometry.frameHeight + _menuHeight() + _statusHeight() }; } auto pWindow::handle() const -> uintptr_t { return (uintptr_t)qtWindow->winId(); } auto pWindow::monitor() const -> u32 { s32 monitor = QDesktopWidget().screenNumber(qtWindow); if(monitor < 0) monitor = Monitor::primary(); return monitor; } auto pWindow::remove(sMenuBar menuBar) -> void { //QMenuBar::removeMenu() does not exist //qtMenu->clear(); //for(auto& menu : window.state.menu) append(menu); } auto pWindow::remove(sSizable sizable) -> void { } auto pWindow::remove(sStatusBar statusBar) -> void { } auto pWindow::setBackgroundColor(Color color) -> void { static auto defaultColor = qtContainer->palette().color(QPalette::Background); auto palette = qtContainer->palette(); palette.setColor(QPalette::Background, CreateColor(color, defaultColor)); qtContainer->setPalette(palette); qtContainer->setAutoFillBackground((bool)color); //translucency results are very unpleasant without a compositor; so disable for now //qtWindow->setAttribute(Qt::WA_TranslucentBackground, color && color.alpha() != 255); } auto pWindow::setDismissable(bool dismissable) -> void { } auto pWindow::setDroppable(bool droppable) -> void { qtWindow->setAcceptDrops(droppable); } auto pWindow::setEnabled(bool enabled) -> void { } auto pWindow::setFocused() -> void { qtWindow->raise(); qtWindow->activateWindow(); } auto pWindow::setFullScreen(bool fullScreen) -> void { lock(); if(fullScreen) { windowedGeometry = state().geometry; qtLayout->setSizeConstraint(QLayout::SetDefaultConstraint); auto monitorGeometry = Monitor::geometry(monitor()); qtContainer->setFixedSize(monitorGeometry.width() - frameMargin().width(), monitorGeometry.height() - frameMargin().height()); qtWindow->showFullScreen(); state().geometry = Monitor::geometry(Monitor::primary()); } else { setResizable(state().resizable); qtWindow->showNormal(); qtWindow->adjustSize(); self().setGeometry(windowedGeometry); } unlock(); } auto pWindow::setGeometry(Geometry geometry) -> void { auto lock = acquire(); Application::processEvents(); #if HIRO_QT==4 QApplication::syncX(); #elif HIRO_QT==5 QApplication::sync(); #endif setResizable(state().resizable); qtWindow->move(geometry.x() - frameMargin().x(), geometry.y() - frameMargin().y()); //qtWindow->adjustSize() fails if larger than 2/3rds screen size qtWindow->resize(qtWindow->sizeHint()); qtContainer->setMinimumSize(1, 1); if(state().resizable) { setMaximumSize(state().maximumSize); setMinimumSize(state().minimumSize); } else { setMaximumSize(geometry.size()); setMinimumSize(geometry.size()); } } auto pWindow::setMaximized(bool maximized) -> void { //todo } auto pWindow::setMaximumSize(Size size) -> void { static auto maximumSize = qtWindow->maximumSize(); if(!state().resizable) size = state().geometry.size(); if(size) { qtWindow->setMaximumSize(size.width(), size.height() + _menuHeight() + _statusHeight()); } else { qtWindow->setMaximumSize(maximumSize); } } auto pWindow::setMinimized(bool minimized) -> void { //todo } auto pWindow::setMinimumSize(Size size) -> void { if(!state().resizable) size = state().geometry.size(); qtWindow->setMinimumSize(size.width(), size.height() + _menuHeight() + _statusHeight()); } auto pWindow::setModal(bool modal) -> void { if(modal) { //Qt stupidly only allows you to change window modality while the window is invisible. //this is an artificial limitation that isn't necessary for Windows, macOS, or Xorg. //but we can't exactly fix Qt, so we'll have to hide and show windows as needed here. bool isVisible = qtWindow->isVisible(); if(isVisible) setVisible(false); qtWindow->setWindowModality(Qt::ApplicationModal); if(isVisible) setVisible(true); while(!Application::state().quit && state().modal) { if(Application::state().onMain) { Application::doMain(); } else { usleep(20 * 1000); } Application::processEvents(); } isVisible = qtWindow->isVisible(); if(isVisible) setVisible(false); qtWindow->setWindowModality(Qt::NonModal); if(isVisible) setVisible(true); } } auto pWindow::setResizable(bool resizable) -> void { if(resizable) { qtLayout->setSizeConstraint(QLayout::SetDefaultConstraint); //qtContainer->setMinimumSize(state().geometry.width(), state().geometry.height()); } else { qtLayout->setSizeConstraint(QLayout::SetFixedSize); //qtContainer->setFixedSize(state().geometry.width(), state().geometry.height()); } qtStatusBar->setSizeGripEnabled(resizable); setMaximumSize(state().maximumSize); setMinimumSize(state().minimumSize); } auto pWindow::setTitle(const string& text) -> void { qtWindow->setWindowTitle(text ? QString::fromUtf8(text) : " "); } auto pWindow::setVisible(bool visible) -> void { auto lock = acquire(); qtWindow->setVisible(visible); if(visible) { _updateFrameGeometry(); setGeometry(state().geometry); } } auto pWindow::_append(mWidget& widget) -> void { if(auto self = widget.self()) { self->qtWidget->setParent(qtContainer); } } auto pWindow::_menuHeight() const -> u32 { if(auto& menuBar = state().menuBar) { if(menuBar->visible()) return settings.geometry.menuHeight + _menuTextHeight(); } return 0; } auto pWindow::_menuTextHeight() const -> u32 { u32 height = 0; if(auto& menuBar = state().menuBar) { for(auto& menu : menuBar->state.menus) { height = max(height, menu->font(true).size(menu->text()).height()); } } return height; } auto pWindow::_statusHeight() const -> u32 { if(auto& statusBar = state().statusBar) { if(statusBar->visible()) return settings.geometry.statusHeight + _statusTextHeight(); } return 0; } auto pWindow::_statusTextHeight() const -> u32 { u32 height = 0; if(auto& statusBar = state().statusBar) { height = statusBar->font(true).size(statusBar->text()).height(); } return height; } auto pWindow::_updateFrameGeometry() -> void { pApplication::synchronize(); QRect border = qtWindow->frameGeometry(); QRect client = qtWindow->geometry(); settings.geometry.frameX = client.x() - border.x(); settings.geometry.frameY = client.y() - border.y(); settings.geometry.frameWidth = border.width() - client.width(); settings.geometry.frameHeight = border.height() - client.height(); if(qtMenuBar->isVisible()) { pApplication::synchronize(); settings.geometry.menuHeight = qtMenuBar->height() - _menuTextHeight(); } if(qtStatusBar->isVisible()) { pApplication::synchronize(); settings.geometry.statusHeight = qtStatusBar->height() - _statusTextHeight(); } } auto QtWindow::closeEvent(QCloseEvent* event) -> void { event->ignore(); if(p.state().onClose) p.self().doClose(); else p.self().setVisible(false); if(p.state().modal && !p.self().visible()) p.self().setModal(false); } auto QtWindow::moveEvent(QMoveEvent* event) -> void { if(!p.locked() && !p.state().fullScreen && p.qtWindow->isVisible()) { p.state().geometry.setPosition({ p.state().geometry.x() + event->pos().x() - event->oldPos().x(), p.state().geometry.y() + event->pos().y() - event->oldPos().y() }); } if(!p.locked()) { p.self().doMove(); } } auto QtWindow::dragEnterEvent(QDragEnterEvent* event) -> void { if(event->mimeData()->hasUrls()) { event->acceptProposedAction(); } } auto QtWindow::dropEvent(QDropEvent* event) -> void { if(auto paths = DropPaths(event)) p.self().doDrop(paths); } auto QtWindow::keyPressEvent(QKeyEvent* event) -> void { //Keyboard::Keycode sym = Keysym(event->nativeVirtualKey()); //if(sym != Keyboard::Keycode::None && self.window.onKeyPress) self.window.onKeyPress(sym); if(p.state().dismissable && event->key() == Qt::Key_Escape) { if(p.state().onClose) p.self().doClose(); else p.self().setVisible(false); if(p.state().modal && !p.self().visible()) p.self().setModal(false); } } auto QtWindow::keyReleaseEvent(QKeyEvent* event) -> void { //Keyboard::Keycode sym = Keysym(event->nativeVirtualKey()); //if(sym != Keyboard::Keycode::None && self.window.onKeyRelease) self.window.onKeyRelease(sym); } auto QtWindow::resizeEvent(QResizeEvent* event) -> void { if(!p.locked() && !p.state().fullScreen && p.qtWindow->isVisible()) { p.state().geometry.setSize({ p.qtContainer->geometry().width(), p.qtContainer->geometry().height() }); } if(auto& sizable = p.state().sizable) { sizable->setGeometry(p.self().geometry().setPosition()); } if(!p.locked()) { p.self().doSize(); } } auto QtWindow::sizeHint() const -> QSize { u32 width = p.state().geometry.width(); u32 height = p.state().geometry.height(); height += p._menuHeight(); height += p._statusHeight(); return QSize(width, height); } } #endif ares-126/hiro/qt/window.hpp000066400000000000000000000031531415063341600157300ustar00rootroot00000000000000#if defined(Hiro_Window) namespace hiro { struct pWindow : pObject { Declare(Window, Object) auto append(sMenuBar menuBar) -> void; auto append(sSizable sizable) -> void; auto append(sStatusBar statusBar) -> void; auto focused() const -> bool override; auto frameMargin() const -> Geometry; auto handle() const -> uintptr_t; auto monitor() const -> u32; auto remove(sMenuBar menuBar) -> void; auto remove(sSizable sizable) -> void; auto remove(sStatusBar statusBar) -> void; auto setBackgroundColor(Color color) -> void; auto setDismissable(bool dismissable) -> void; auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; auto setFocused() -> void override; auto setFullScreen(bool fullScreen) -> void; auto setGeometry(Geometry geometry) -> void; auto setMaximized(bool maximized) -> void; auto setMaximumSize(Size size) -> void; auto setMinimized(bool minimized) -> void; auto setMinimumSize(Size size) -> void; auto setModal(bool modal) -> void; auto setResizable(bool resizable) -> void; auto setTitle(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _append(mWidget& widget) -> void; auto _menuHeight() const -> u32; auto _menuTextHeight() const -> u32; auto _statusHeight() const -> u32; auto _statusTextHeight() const -> u32; auto _updateFrameGeometry() -> void; QtWindow* qtWindow = nullptr; QVBoxLayout* qtLayout = nullptr; QMenuBar* qtMenuBar = nullptr; QStatusBar* qtStatusBar = nullptr; QWidget* qtContainer = nullptr; Geometry windowedGeometry{128, 128, 256, 256}; }; } #endif ares-126/hiro/resource/000077500000000000000000000000001415063341600151115ustar00rootroot00000000000000ares-126/hiro/resource/GNUmakefile000066400000000000000000000004751415063341600171710ustar00rootroot00000000000000all: sourcery resource.bml resource.cpp resource.hpp permissions: chmod +w icon/action/*.png chmod +w icon/application/*.png chmod +w icon/device/*.png chmod +w icon/edit/*.png chmod +w icon/emblem/*.png chmod +w icon/go/*.png chmod +w icon/media/*.png chmod +w icon/place/*.png chmod +w icon/prompt/*.png ares-126/hiro/resource/icon.cpp000066400000000000000000000027651415063341600165570ustar00rootroot00000000000000#include "icon.hpp" #define ICON(x) const nall::multiFactorImage x(x##1x, x##2x) namespace Icon { namespace Action { ICON(Add); ICON(Attach); ICON(Bookmark); ICON(Close); ICON(FullScreen); ICON(Mute); ICON(NewFile); ICON(NewFolder); ICON(Open); ICON(Properties); ICON(Quit); ICON(Refresh); ICON(Remove); ICON(Save); ICON(Search); ICON(Settings); ICON(Stop); } namespace Application { ICON(Browser); ICON(Calculator); ICON(Calendar); ICON(Chat); ICON(FileManager); ICON(Mail); ICON(Monitor); ICON(Terminal); ICON(TextEditor); } namespace Device { ICON(Clock); ICON(Display); ICON(Joypad); ICON(Keyboard); ICON(Microphone); ICON(Mouse); ICON(Network); ICON(Optical); ICON(Printer); ICON(Speaker); ICON(Storage); } namespace Edit { ICON(Clear); ICON(Copy); ICON(Cut); ICON(Delete); ICON(Find); ICON(Paste); ICON(Redo); ICON(Replace); ICON(Undo); } namespace Emblem { ICON(Archive); ICON(Audio); ICON(Binary); ICON(File); ICON(Folder); ICON(FolderOpen); ICON(FolderTemplate); ICON(Font); ICON(Image); ICON(Markup); ICON(Program); ICON(Script); ICON(Text); ICON(Video); } namespace Go { ICON(Down); ICON(Home); ICON(Left); ICON(Right); ICON(Up); } namespace Media { ICON(Back); ICON(Eject); ICON(Flash); ICON(Floppy); ICON(Next); ICON(Optical); ICON(Pause); ICON(Play); ICON(Record); ICON(Rewind); ICON(Skip); ICON(Stop); } namespace Place { ICON(Bookmarks); ICON(Desktop); ICON(Home); ICON(Server); ICON(Settings); ICON(Share); } namespace Prompt { ICON(Error); ICON(Information); ICON(Question); ICON(Warning); } } #undef ICON ares-126/hiro/resource/icon.hpp000066400000000000000000000077111415063341600165600ustar00rootroot00000000000000namespace Icon { namespace Action { extern const nall::multiFactorImage Add; extern const nall::multiFactorImage Attach; extern const nall::multiFactorImage Bookmark; extern const nall::multiFactorImage Close; extern const nall::multiFactorImage FullScreen; extern const nall::multiFactorImage Mute; extern const nall::multiFactorImage NewFile; extern const nall::multiFactorImage NewFolder; extern const nall::multiFactorImage Open; extern const nall::multiFactorImage Properties; extern const nall::multiFactorImage Quit; extern const nall::multiFactorImage Refresh; extern const nall::multiFactorImage Remove; extern const nall::multiFactorImage Save; extern const nall::multiFactorImage Search; extern const nall::multiFactorImage Settings; extern const nall::multiFactorImage Stop; } namespace Application { extern const nall::multiFactorImage Browser; extern const nall::multiFactorImage Calculator; extern const nall::multiFactorImage Calendar; extern const nall::multiFactorImage Chat; extern const nall::multiFactorImage FileManager; extern const nall::multiFactorImage Mail; extern const nall::multiFactorImage Monitor; extern const nall::multiFactorImage Terminal; extern const nall::multiFactorImage TextEditor; } namespace Device { extern const nall::multiFactorImage Clock; extern const nall::multiFactorImage Display; extern const nall::multiFactorImage Joypad; extern const nall::multiFactorImage Keyboard; extern const nall::multiFactorImage Microphone; extern const nall::multiFactorImage Mouse; extern const nall::multiFactorImage Network; extern const nall::multiFactorImage Optical; extern const nall::multiFactorImage Printer; extern const nall::multiFactorImage Speaker; extern const nall::multiFactorImage Storage; } namespace Edit { extern const nall::multiFactorImage Clear; extern const nall::multiFactorImage Copy; extern const nall::multiFactorImage Cut; extern const nall::multiFactorImage Delete; extern const nall::multiFactorImage Find; extern const nall::multiFactorImage Paste; extern const nall::multiFactorImage Redo; extern const nall::multiFactorImage Replace; extern const nall::multiFactorImage Undo; } namespace Emblem { extern const nall::multiFactorImage Archive; extern const nall::multiFactorImage Audio; extern const nall::multiFactorImage Binary; extern const nall::multiFactorImage File; extern const nall::multiFactorImage Folder; extern const nall::multiFactorImage FolderOpen; extern const nall::multiFactorImage FolderTemplate; extern const nall::multiFactorImage Font; extern const nall::multiFactorImage Image; extern const nall::multiFactorImage Markup; extern const nall::multiFactorImage Program; extern const nall::multiFactorImage Script; extern const nall::multiFactorImage Text; extern const nall::multiFactorImage Video; } namespace Go { extern const nall::multiFactorImage Down; extern const nall::multiFactorImage Home; extern const nall::multiFactorImage Left; extern const nall::multiFactorImage Right; extern const nall::multiFactorImage Up; } namespace Media { extern const nall::multiFactorImage Back; extern const nall::multiFactorImage Eject; extern const nall::multiFactorImage Flash; extern const nall::multiFactorImage Floppy; extern const nall::multiFactorImage Next; extern const nall::multiFactorImage Optical; extern const nall::multiFactorImage Pause; extern const nall::multiFactorImage Play; extern const nall::multiFactorImage Record; extern const nall::multiFactorImage Rewind; extern const nall::multiFactorImage Skip; extern const nall::multiFactorImage Stop; } namespace Place { extern const nall::multiFactorImage Bookmarks; extern const nall::multiFactorImage Desktop; extern const nall::multiFactorImage Home; extern const nall::multiFactorImage Server; extern const nall::multiFactorImage Settings; extern const nall::multiFactorImage Share; } namespace Prompt { extern const nall::multiFactorImage Error; extern const nall::multiFactorImage Information; extern const nall::multiFactorImage Question; extern const nall::multiFactorImage Warning; } } ares-126/hiro/resource/icon/000077500000000000000000000000001415063341600160415ustar00rootroot00000000000000ares-126/hiro/resource/icon/action/000077500000000000000000000000001415063341600173165ustar00rootroot00000000000000ares-126/hiro/resource/icon/action/add.png000066400000000000000000000005031415063341600205520ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME DxIDAT8͑``rҺ`6[;tqDdZ &g7Z,Vi1v`9=0+n/\ϵUR>.009xrbD["[-$mx\9XwV2@@PiAkeRjt&Rȿ&ROXNOӅ43kgO=TrK wIENDB`ares-126/hiro/resource/icon/action/attach.png000066400000000000000000000012111415063341600212630ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8kQrL/Xp3ƨ ^x@ HDu*lnՅY\9yxZҼ$YT1`H?U5,v3]ѽv676b,->^T<0QW\}1VVWM$Ʉ2IH8fyjk0>>'\mNC'LR\naر`w;c3VcIA4AWiuf f*H@YJ'zl:-@WTi'rZ P*(\W_20iv\ BG9q$VhX Gf( l֠I&d&o^7<>$$-kم&Əm7j4޽KRƵ͡?ڮ _<H}V<@Xk #!ҙt~$j> S40 ~) QLIENDB`ares-126/hiro/resource/icon/action/bookmark.png000066400000000000000000000012561415063341600216350ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 4A1=;IDAT8˕AHa}ݻr[#k-,/BE¨ A{СvCt%((+ЦA!xqS DZmv+]?k:s؈ "ݧ"&&.ݫr= ]5AV> P}T] [|䘜S01>8z}C:7KPYZ^f~a[p+E ]ܚ:2(g))jJJPrV(;+TVܲxP-1;eiPM0Kwց1FFM:c,;߄iѦlLv Ob`gn rU݁a( C R&q@ eY Ɨ0B fx`ϫ#MfDd{n'B||3yy2?@mp)\?umڶm!x²S \ivYVꑦiе,TD.[b:J O9Rj G<"\ `ҔR0L vg4FыB='Lh4x0{hwV\.]jnw;? Zk]]׵ZT*}~ұXl6|f:޺a;ߖ8T*H$2\n8΍87\n,"ȰR4u{ȡgb|2!"d29)랉ȡ "\Û۶|R8IENDB`ares-126/hiro/resource/icon/action/full-screen.png000066400000000000000000000012121415063341600222370ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 5wߚ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDAT8˝;hQ5i%Hq *v*_P*AppH`APVQtPq -%-EjMSMLuؼrsϹȉEo4g Xm֜XԵ%'ýHp".qSK$~QM :yCυoePO9/hYk>H0=@{g<wdvBV))`Fdn<nz=\`)Tdb|B4߽sEhAǯ'um1(.۶< "g Nkqjݰ|e'm 1GGVC p\uWN%cY]:nnln=3CS-R.(ܧ~r?zhI&щX""ʉ~a8G&Smj30_,b1a}c$?.aZv{;W''A)$@kXXAD~{t~::&BA$(ؐѨ́~ЃG k]# (=z{R-\R/Bxzڗ3[0 )&B"9IENDB`ares-126/hiro/resource/icon/action/new-file.png000066400000000000000000000007351415063341600215370ustar00rootroot00000000000000PNG  IHDRabKGDO4ױ pHYs  tIME&Ӷ)jIDAT8˭OK[QsV$}%[\f qYE޲w#ĂM7*RJRJIZEbwDž&Tz63 s3R.kZ\go˟oϾdRIxS/Oh缠'+⮶23l6 ! "=c~!"f L&jǷ[SW{jky`1*F_^^o: L8 n4Y:OPEi@дޛzƦ织'Z_YD)]Cu4MP\g/[}C(˧=}$?  il ci1 l22v\ޛБl*gH֡(UmSk繼Pa3. rf_>cvMl/~p0Urs0~d4Ydi1S(e`6H<%A4jF')εbm;M  T -v[7H0t]|TtZ|}OT#[mm:%b@VXF"R AbH 0"duE\6%,V4_=EP ԅ0Z`={QmAP pkk/Ggs]H"/\7ᚩIENDB`ares-126/hiro/resource/icon/action/open.png000066400000000000000000000012401415063341600207620ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8KQ?}oIkRK?% rjХ7#M+hh!EB-siꛖ`p{9+CCCD͆."@Q""}ݸ\Uo/,-9s@D'&_Lslppp936&N3cxhͳ nTUnH)[fz+D07f cd "BUU]keY"=va#AUM5s}Eιvp5bPRJc MZd;8bL; y/qk"K;ʢX JJ_(H `|LH)YJ pJ[GDY Nq)%SMPPXlb{ט dr4f4ScD$mφI1s̝lNVJa.X33؎l7zԝ, ܉wgm`^Z?q!SKwY^ZôldoKu2IENDB`ares-126/hiro/resource/icon/action/properties.png000066400000000000000000000007201415063341600222170ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME  +T]IDAT8˭jP l"ނfuء-8(q%.]tiQpNDdМ)v1}qAG%rE"糈d0M3%Q~¥Dz׍j5z^u:JR r}Vv5Zk`:bfneYXVjWwpθX,<A$v{sN-fb1FA0$ C!Zm6& B\.|>RJ;pza4$h\..v-4))? ``0x}+ڶm1$IENDB`ares-126/hiro/resource/icon/action/quit.png000066400000000000000000000014371415063341600210130ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8uOhIz{ a/EAѫhPê( ,.WEP/DP$jwB&l@gd:=?z~_=2I~P"b,ϳgΟ0IC\&"f8IӔ ΣBkR f3iA$ ijpΡ@)1c/hmYW|0 raع[kADы<ؾvNk-ιNnA),!j"_3:mZkOe^t  .߻eO:mTG6x;Xn4>Mі֚nޤs'?Ct>($}}Rt گ[X](`sZqLѠ5?"XDP| o^bXD! .MuJe6JV`r77ܰ,.,Rj!l~\D$//񺺞~a`hbb ˗XֿץZ6>c0QzS†> ϣ&jYٻw@`xGV%Y\`Mxs-곀|mk,+#Za7u9 ?=]eIENDB`ares-126/hiro/resource/icon/action/refresh.png000066400000000000000000000016201415063341600214610ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<"IDAT8mRMlTe={3m[ 3јF7`XDa M ta1L%47!«qВF;̴Yp=''\bfHe4jՄ'¸.ؖp|t&E@O*}]gQ(V02v|g'-lzW6ÌĈdǂЉ  3EW Ŋ 5>.W f43=gOk40ĭCձž _M^l8l?3]X1/23ǕgƧg^hڷuS( wD-HU/<A2e^ۏ^,}?,az  ,Hc$UgnSui&vn{'v>Eq4Akw_?߼''k'W%߼[0j>AX-/?ԩT=eYcJ奎Go@W!'$_ԓSln\{&?3 DV%r=?JeFmXv@x\qqah=Ѿ2;}З|9r-k5tT2>hMA҄ǡ̖MD, z=*];[x 8wyIuI1MN<-I7, #?[FՕD(̗ˣRmcer-0{ W1oR ]!PՑl.UvjeIENDB`ares-126/hiro/resource/icon/action/remove.png000066400000000000000000000003671415063341600213270ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME ;"\IDAT8푱 Pi:+#mF stԶ"DO!ʳ3w&H6暺`?S-FIENDB`ares-126/hiro/resource/icon/action/save.png000066400000000000000000000016171415063341600207670ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME 7*ؿtEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggGIDAT8˝MHTaL1͑QlQQ4&E.B(,V-*ETR( "((j["DETjܛN al6<=_'?[ظ3 T[&Ÿ?ͻϝ 4wt퍭Uk:#km'-Q7˺; <}۝;ƨf(ce#+s >b$y,%_FDDdsZzD/Hϫ/.wY%<r$qDxXBAA(W'n۱wp=/x|vl_PPP#wҘX̌M4єXi^"2"0e1.XͻǪ Q_ͭ{h\Î,4M9H*|!mkص)i8(m41MCRO-hm aPYYޚ <۶qy!<]s?D30DQ,@.x]:R,Fs4_;3L"bmIENDB`ares-126/hiro/resource/icon/action/search.png000066400000000000000000000016471415063341600213010ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIMElx4IDAT8˥[hTwgn646>|P4B5M5TZ4DThk&/}/Hh@[d޷=9%Z 3Ïo>W~7ߊ*qBfyxE |ͲQE&NgRg2{v[c ;֦[aHR,(ĥ\6J>iTw=6DrQcJK6 hDčآŃCro::毫<MqIʥ"3d"rIP\fU[,X6n0y}V34ݑApw־D$I v(x/7br]Hė4ʀ+m$yZ$QO&ژ LhbN80@D<ޙw2>s79(" q0ȭXt}rL&zee` DQJx+V5`rGArPpylxo#Eԉ} 6.@o{`rO^Z&`lZ[[[TCz ;fhOIENDB`ares-126/hiro/resource/icon/action/settings.png000066400000000000000000000011431415063341600216630ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME  9cHIDAT8˥KhaLM JƅE.4bfBp!T-RCBkAte@‰bW6IUiӗ DD:3nf1³{?'#Q X"M4QlRTlb4u#Q ZêEtFZdfx>XBr"2>06א:%Z,1`o %nFa~N(/;+tHRa %Nʿ4J'{( LA0: ԬN Gl6y75 irtI4Mk @ҾB0L8;77TIENDB`ares-126/hiro/resource/icon/action/stop.png000066400000000000000000000014641415063341600210160ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME - kIDAT8mOSasm%@+xij 6X\:8iL q1P$(Ji;&_M{Ua==1DUv \Be3?k.]vͭhRJiY|x23^(X5*FN><}j&1}QPȑ|8v728emZ:M W,JgZg&xccw6ǪG Df8޻w$_r<֍TD"̻w Ծ>Ԗu~ ڷEJJ.hϟ( %BaՑppq]Qpz<8;wu@ y%%}]pzXb1mc6 ;Rww(8vԅB*,e_)D V[Z޺e=gutǃ=<혹Ʒoȕt)冚a ,6\Uxqx4рԝ:iբ)+@[VJ$(~MOnޤP^\$k$oF4|~?%r^S'[AW*gX-kSH c:`C6"Orbizi~inU|^L= 1mv?x.ElBZVO$֧lvƆ(,nƭ"zvWiEay3MR׆IENDB`ares-126/hiro/resource/icon/application/000077500000000000000000000000001415063341600203445ustar00rootroot00000000000000ares-126/hiro/resource/icon/application/browser.png000066400000000000000000000016401415063341600225360ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME,ޏ5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDAT8˭]h[ec4i棍mТ,uī)0o)Ee8oR]GAL70v+\?,Mrs {.~8)-] , Xtދ4uljdȁ4c(ˢ\oiɍe!ɹ`W'M d(=ؤQV9?r!'hɊ'2yGDpZmHC6y.KOho~GxhnChCJLC$h/C 죤i- <R.r އR+@hc\_$b) kN;Np@f"lR,BRlޡl2Z^G,-Roa<K6BBEzːR5hi!iQh R4L:]Vdz8þTB(HC򷶊ÇƓdF&M/ȧ^]~Zk77 ;sK[x =ءw vǶm*X]|/|xBHРeq弢pk9.žVίs3S/RPpl71IENDB`ares-126/hiro/resource/icon/application/calculator.png000066400000000000000000000012561415063341600232070ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME /]J5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDAT8˝jSA93^֒6Zm uaRHnĥJEtV 'P=,Z$mJńcrH"v6|s̘CF,-g:sS7ZGvks,.84>Z!:llq\%SSS91*1fK5<>z¥ ~nc~u:}U@D-ZY |c~F" 7\EU Ð|>0 rFŰ8_$Jv+HUMB0t:xU`N,\:D6Nc2U2(PH#bo sz|PpQ(*7+ vsxZsHwKOR'0yy[0Ͳ]%=tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDAT8˝Q;sgPP{ |+ b n1Ā ZM/b%"&!02wg%S͜{wcb"fݛ;8 nel6! PLRt,x6'|>_w)$ qHR, K7>}4M NdBZ%㺮Ηe, !k`tXV}f9.zĶmLv;6uumۺ0$#A.c^3 ,D)eYz=%vq˲hZu9FX,tG v-` H)#4 NkR(B}}H$px ^(.?l[*ʋ |7? h}-)kIENDB`ares-126/hiro/resource/icon/application/chat.png000066400000000000000000000006461415063341600217770ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME ;r3IDAT8˕AN0Om"oaƕ8:`Fc4.0+cJ*¢{[QQxP( yR[ Q\Xxz;dی9l/ ˲^8N3 Mh)nCN@@EU)/_FA1J-Ogwel,K)`Ci{kƂ~2^lۖi~X] 3ת\&[=gS_s]GzMՂH3 dkIENDB`ares-126/hiro/resource/icon/application/file-manager.png000066400000000000000000000005721415063341600234050ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME)0,C]ZIDAT8˽JAEI,|h%"h pNxZh{k%^R8; }IgN.I{Z!$Q }ӗ0ƙ17:#;֔v/Fٷ՗R^;Zא FrS(ҿs痔#\Q4<˕ZGڂOG,@0!`+c{R>8'Z;k LT_Ze҆IENDB`ares-126/hiro/resource/icon/application/mail.png000066400000000000000000000010461415063341600217750ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  ~tIME 6/e+IDAT8œAHaYFwpױXhԒAfaDDE>8҂t&UZ ~>ΤәTL݁'}I3b/t߹ϋ}I̹|xUU14-R6X$L ۷~o\%V]MEadYrׯri`Y6=wx* D"QO466nfKXR _~!D0D-,憍8mΟ_RҐhna` 5'kRG㎆dNبIENDB`ares-126/hiro/resource/icon/application/monitor.png000066400000000000000000000011431415063341600225400ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME :4$gIDAT8˥=hAݙݽ"Ka BH!`as`$jRXF.1VHXB*AD=I 4 w;11!'J|eg&(sl#iJoj93T*zF;ORG p Er%cg.C2 <6r>dDi١:J& i.E%)"$ ֘k*F$1={s #B vA(Fk˥]SH$1Qq՟ N,A0ǟPߍ,Som7?5;Xcz x(UX !?pY# . `uG9.=hmVcqZg po&S:9.JqJBR((n Qo>B]#p67mll4(!aFEkb'Z5hYY)hi 䗾_6d֕Q6 e5FX;$"עMIENDB`ares-126/hiro/resource/icon/application/text-editor.png000066400000000000000000000010761415063341600233260ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 7);RHIDAT8˥MhA3ݣH"-)X+xEж'< "~1[M\bӍLlZx0Cmj+ ofރ a]VzxG/fw؎XM9WOJݬ;-T@YXݓ zV_LKNJ7qĉ?}MeM}'O2t3@zz}KAI{|-Mu=۶m;R>n&X^Q@dct| UsEΟ0 M ҽ \y7}7FdY~C;>Yz=iv4nK!?y%;nL&q]7\OPV<G;+H%H`YeExA,CkMVCk5Bl:ud})0oZy IENDB`ares-126/hiro/resource/icon/device/000077500000000000000000000000001415063341600173005ustar00rootroot00000000000000ares-126/hiro/resource/icon/device/clock.png000066400000000000000000000016011415063341600210770ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME :.UIDAT8eKL\ew8w`"#Xl0⢱;ܘ 6&DW5&,McDM5>ML.MU(:X+L ̽ wύm(9G`ҒaCzZU~^e^l0htG{ GZCqTKӃ< "uP|apx.U(vgqxA;S͍͕7=sп]I>>8<`X+Phִ-nkwoh. ȧy};vG[W#-[DJ3CDt4Y.gimmHg}w?K*^'rx{‘0B)gQv,F^چsm9lBûѡ()9DbLLLBkae+Z+U::کTPJQ,ïrUjRJRh H4 SrX;R ?5W=A:bRAkM 4M_My輷kna6c\!m[!7ʐ٥Lr:7Wf45Ģm-xEJ~r̭-.߮v@NlJ=gSu)]wB:pXv(@(_$d6IENDB`ares-126/hiro/resource/icon/device/display.png000066400000000000000000000012261415063341600214540ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8jASUsmH2 b#& 6pc|7QP1|l\ "`&aH:.:A<*wΡn?:yWջNUo\&ygtn[_Z|ĩjmttIzQM"^(@ߧυc"Z,o=SS%QP DI6ggg1J=!cRf+;>aZ|X[czz$IpIP#l @T^ez4g8FbLAp$lhpOKEkIEQk#aLoš>EQqB(j8Q!F1"%smcſ)Ҝ t:j@ 0S8WV@Yi>̇WРʮ}B No]x*[[YyKKIop%2O#1fެ?mFk֚32nwF IENDB`ares-126/hiro/resource/icon/device/joypad.png000066400000000000000000000014541415063341600213000ustar00rootroot00000000000000PNG  IHDRabKGDM4{ pHYs  tIME 'ɣtEXtCommentMenu-sized icon ========== (c) 2003 Jakub 'jimmac' Steiner, http://jimmac.musichall.cz created with the GIMP, http://www.gimp.orggG!IDAT8˕kSA&Ҥ6чI{ X݈.D H]պDЅ"TD*55iuo游iB7(:dz3a)_|*`P:>_(Tu|5]fzOMFcC+ckخ#V R]a  ^ƉƙVJOwZ7VTtG(ܪCET4*]=sX"`./pmlƭ) 5Ba 9ro?hU/bYA3hZVחXԧ>4Q"Gx" }e*+++߾3i`ƏaD$#H]# R+QZ^]%GyIs]Dobhlʇ&ZDH$$IDJ0F`&GdL۩mor2Je;A6u]vRJ-H$DVjxFFy5aIENDB`ares-126/hiro/resource/icon/device/keyboard.png000066400000000000000000000011131415063341600216020ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8kSQs__I&"f"ԨH-t  8U㒢UpԾ4}m5s.|߽Rqz%00PT:X<ﻈdXcǘWLJH&Rj-9{lE;g2 cVlﳮj̟hno( 4]2C;8 sw殣ʩhPպrq[=Rpoee`M--%Nv9FV{h 9{^=XxXVx-Spjfzk=D+c 8G0 1ZhTn_]}v>aͯH%ӠJ)6\8l6Oj4ob.AΑ=c4st]2cfijwEx'Z7pbh7_q䤗IENDB`ares-126/hiro/resource/icon/device/microphone.png000066400000000000000000000012771415063341600221600ustar00rootroot00000000000000PNG  IHDRabKGD: pHYs B(xtIME *!wLIDAT8}_HSaͶSH,ȴ ٔX^v%AtMiwAԍ 7u jFЋmHM]ډlzl8y8"why{3qO#јR(|zT!._oUtհ"[#/ܓBWv_R+bh* 󬭮C̕C 3Z' Vh(n^~k_u|333(@ƁBi;u|=[YYA4, `6Y^^FccB!f}7&tHDhgΞJ%t0 :| ȲL&RI2_0aj H$j.J)5Ӄ$IdYDQdrr GcQ[ &P+](l;H":?)j 3xgNt]\.:kgR$sP4twpFl5rz)y€_"N\1TOyO46IENDB`ares-126/hiro/resource/icon/device/mouse.png000066400000000000000000000013201415063341600211320ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME 3f5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDAT8ˍKTQɫsu\(ЦU rMBj#L[k3mbP#ڵ DW"QL39|~4Hcqht'0P.ocő8|l6K<_VVVhkkcppvbjjtvt03;{uΝ9/ւ˿hDA F"oшhТD "#jZc+ `&tO7|{=R8ZQ(\) `-$wj5 A*2=L }ՌUIAЃN,`߅FH4TSUETQWDCFpˇ`0`804 By^ 0!.^Ib v OL&F!ݿ]č7jA@E?~DS!_YY9O^.a'u]r/~]St:.E>!I߻gUqe/,oT7elnݾsk{nYݹW}-"[o?'IENDB`ares-126/hiro/resource/icon/device/printer.png000066400000000000000000000007411415063341600214730ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  d_tIME5 znIDAT8˥N"Q[!z̊"10bިi$;#c7joo[[W*LX,~hLV9:"T.3<{*VkQDVe<ϮP('ι 1tz/֒^L&Lj}Y]R%I @U Ðh`0`8z4M^_;xLT" C4]R2, "L h2N18g[H|.qu Z+1bED.fxq DU9x9o~hAIENDB`ares-126/hiro/resource/icon/device/speaker.png000066400000000000000000000011201415063341600214320ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8OSQ?D?@cBqdGX(X.$j:1] iąĨE:L]=A9{{*#F~: O 8ԁ i?TU^pzvy.MO@󼯨I333J :h5<ߨL~in H|V+Jё3x@nv8rm' h|͂ S=Ы TeYFuLAEQ . 땪0Ɛ)Ʉc@$ btk-{vPv;mmKa<m[=㑪PUT$I8c97*"|2N#hLE ,ZKYwj\2gzվU&l IENDB`ares-126/hiro/resource/icon/edit/000077500000000000000000000000001415063341600167665ustar00rootroot00000000000000ares-126/hiro/resource/icon/edit/clear.png000066400000000000000000000014051415063341600205620ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8KhgLHBHը+& ҂JKvэ" ]Rƅ`Ku 1-i411qFIe?O+Ec!pQG`s8Ʋ @4߯mڰ1zt^`qET*-XHs~SIՙJV|Rt}#ה]K뙋Lɧʕ7M/JDڧNWrUsK;=rT%'_A*vitsGWvjUC3F%њdS}k9$j&]toeQP5~Pν_ ` )RI(r;͵:.iB `dA϶Ր wj2[ԯVI8RwU{#e`g!^̌#^UVJo5RLZ[P">WXPFDJOz'yMwqcLL˥ep)DX6 EЃ18o #z)u=<p ݘܺy%oLe‘ߤYQ{/'e52 CC}Y‘wҀ1t =v咆?jӣkr ;8TR-S>L8xK~C(IENDB`ares-126/hiro/resource/icon/edit/copy.png000066400000000000000000000007621415063341600204530ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME /4IDAT8˕KKQ#3cڀ ZuBEvDDD616e007itFGoy;$3,F(Ͻmwa(z&vj5BЄ'sj^wcfnyu$IBTGE@QNV9TlGr(( ,˞H$?dYv pPRšz-,EA08vaSiJ%K дc,61Ӷ(XY^ePT䮳6֣yyrl;KUUn(zi.y}*($bBYIENDB`ares-126/hiro/resource/icon/edit/cut.png000066400000000000000000000014471415063341600202750ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME 1hAd^IDAT8˅]HQǟsw}lhxUtaIWEd"hiXi}J$ 0m36c6uu_vMaZ? <}rG$d F`Jiym7TDb$[cc| ;YqڍLhs(lEat 岵M$A.f$IBy@f.Ql64EQ ("INyΊт h4`j"úDnKL!Vg"gc8LYd :~E @`P Z_4wqR\}T.)S{&Ъ MiZ7+˲QyGk~C^]7!Ztpi8#Hy~$6 #F ('t)mG^(,+"}߱o_}d$I{= XvT,>L q3s_^y)nr:]ͬ8 +Ϟ:өٶQKKEǏ$d"ݧ( ^zCQtJvM;N!#Lv B]wf2f_Kдkw߾J9zjmŋi+dk&nߌĢ5(4]#Ns ^R>q>sƕ]$ ORpsӶQ %#6Kot Kz Xd4,U~_e% EJvK0n \$[5ܪ-]pi-Nlc5ߣ-F}=kr+Bt4M¹|'+7*|\YT[z,?",+| 0p8TNVdT앬/dߧ>xtXtk뗧d3 ;e+D, X\qKa{UEEȝ<9DAU21 (mnh>A_4!5纀VҨ)onP^CDz\Z14I3XpcZ7l/D#팦$1fSU;`\13TKOxiIENDB`ares-126/hiro/resource/icon/edit/redo.png000066400000000000000000000011171415063341600204250ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME '?!IDAT8˝MkQ;_MBLcm6v*~Tc B8nD+p;~Vu)D RjMu!)bL&Md'Ag^ùnjnjQgk[7<~`Mm.8q<LME^vx>'TpuXMUa?)}[PNeڧt5ɹ={V7c3Xu,O# : 6ĥ,-(靳㓱tw$Z 4nUxEG:=x{ `@fM{Uv"3C0c\@nFȂTbTZL\>{tWwvYk-0U4lQ4l69n7J]HaN3E.En ͽZ65$ݖ/܏nխϯ;v?$#P6$E/K^5IENDB`ares-126/hiro/resource/icon/edit/replace.png000066400000000000000000000014101415063341600211030ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIMEvhIDAT8˭Ml a3H,VЉࠉ4q RIcKZAD"qD6уK}DHEb[nwg?];;i/Nɓ<y7Wbh4MhTz-?$kKe]KVԈS%U_w?j,a aYd+ԉ˥(cRU5o:H|J[]$t3l`}'ǎ6;{s;ǼlA6W uh 8^o%osy,\j!pp$Cm9XM(O=*|%~2]M:'7yeP*̙Sbr|N JgYtkikypO;o?E[v pXVcnyJ6>~O3ZTϑ{Inn>! /h2 0䛼YĂw;3ɐ ?xHa ? |`U}rb<.v>he~gj6fyc9$Ir<21Hz ɐH$f(`O(rB˹B SKiry νYIENDB`ares-126/hiro/resource/icon/edit/undo.png000066400000000000000000000012121415063341600204350ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME #!IDAT8˕Ohaǿ҈ABCxbDP];<Aui%+$IENDB`ares-126/hiro/resource/icon/emblem/000077500000000000000000000000001415063341600173025ustar00rootroot00000000000000ares-126/hiro/resource/icon/emblem/archive.png000066400000000000000000000010341415063341600214270ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME IDAT8˭1hTAww=b A I#MR (X( ;H) h,Ebl"*Q]۱x9#xQفٙ4h0lڑВF4ѳWc[6#H>/bJi"/3sV,1;ZEsSpZ8vKo[G-Cb 4ET }W(Pٲ ٰ|r@ UPmҏHV?1(>9! d Bj}Xk`<h~pb+@zP$3_F0׌Q3_Aszy]❇{ 3Al'2=֮G%J=.]q{ klf_o҇)IENDB`ares-126/hiro/resource/icon/emblem/audio.png000066400000000000000000000012601415063341600211100ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<-IDAT8?hSq?{}ɋ4H9TQ E,+AtU7QAE`6mmӦM^wuĥ7qw|DUImn{1U FG8(mYOu +GqȲVT\ѓm>AP,!r^VT.#Z'[IzLW!ICd( ^|_o62QlQUL:11[lU =n)ͤtSUQ@""<X^d)a5CJG,vnS@;dm V053pmznĈedji5C"8VcPĽxm9Ϟ99|J哳QCB3xžC* u\9ZG?iE45v8{gāﭷ,WSq$ 1C*\cS. izָ.s݉VDeAeFT LD$q\Gs+oge1Fb1%Myu15&IENDB`ares-126/hiro/resource/icon/emblem/binary.png000066400000000000000000000010601415063341600212710ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME8rJIDAT8˵NaofMH(`; (h aH7Mܰ`p.a4ހѕqB Q i e(.ffvY>ON!Y\ZYxz:IDd9gw=J"bi{vDҸ3>Lbd(T"/]{w]ItM31 ,;sDBO8=Xvf*dk38F 7Pp4Vھ݉\3o"5 egWָ:o]\9P$flX>o,;3`2{50$Lj3 r |C|.[8_.R,LDRxFMIENDB`ares-126/hiro/resource/icon/emblem/file.png000066400000000000000000000013451415063341600207320ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlePaper SheetstEXtAuthorLapo Calamandreiߑ*'tEXtDescriptionwith a HUGE help from JakubTIDAT8MkSA3Phk7@D*G( ?A,U.*?РmP5əޛܦ3 >=313_Wob4fY1<{:af}jZq_}h/W>}G̱5viol 7ݪN|nilzBP|VsW._8ҫKc'1c$O+u.Xl~}."SS2s9z_|q`QVU>sDU+i Ađ.;(-2x->5  KFVhp8g l' snx&2@C(< i "xUB$Vd"_-T0@L\ΒlFݚՎv;k?kˌN+'0GRV ?ƺAIENDB`ares-126/hiro/resource/icon/emblem/folder-open.png000066400000000000000000000011611415063341600222210ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8;OA]G!^-0!VvZl?0&Β ,P-LJH" ˜3X,,(d9s.Lpw'Kwpwܝpwfgg?wOU ӓSSSTUEQv,--uUfrsFB @K ̨mw?P%)%SUr,"P;:f,B_KUED9ۋ<}|"#vًK18p |b ܸ{Z U~{=pݾ8!6 VLUoMn`U՚&=jmr4U}ι`p_eه<ڎ$IENDB`ares-126/hiro/resource/icon/emblem/folder.png000066400000000000000000000011051415063341600212600ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT81kQsW,)2v._?VW(Ĺ`Y)$Pi&%߽&6XZw9{yy_v7 w2 nY33 w~?t:ϗ9gBe8~T9gWU& $vxLӪ+bfkvܤjc$h4b<?\YPUS-~H̚??́={U9gO)1m!rx5)_;9x~J)N ˲|@+U%猈u#j9xs3DظiQ ATc;YuiIjAbR7 inPEar6_TRJ/sN ggD FNuk"ERR;'|:uxlQew"E‹G!c1IENDB`ares-126/hiro/resource/icon/emblem/font.png000066400000000000000000000011631415063341600207570ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8KQ3wgth\ji]mi!!ҢMDT-rQA%SI:c8N6|s=yU aRJ9dX]Sr$H(flb9DY<2:>C\eDž3ۃh+6@ogc8!CwƠ1.RRU_,InJj7NCY]z6-o2Aczȳ٭ RN\ 죩twiwn߹u?_.mxXIENDB`ares-126/hiro/resource/icon/emblem/image.png000066400000000000000000000010561415063341600210740ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME 6IDAT8˝MkA4ݘॅ\ĢSɃ@g(1 z @ ՞TD*C"&nٙab !{fgDQ[3ZyBQ3ZjQ31nKVWpf,µM4(HakM0؂33sZ$(l~{?CR@4yò,.1SrzoD'S@)_@JNh'-\̟.@:} b}x{_ʧ|=({hmh9%_}z=oj%1@usIo?GN7.nքaQN&x3iv$ĉqǨLdk&|[Z? Ƚk^CrB0EJXᖋBIENDB`ares-126/hiro/resource/icon/emblem/markup.png000066400000000000000000000013051415063341600213060ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME3ŢRIDAT8˕OSQ+PlzB!B|HD]0!&FeM1!] &1.`\@&!-M-+ƄgzObvve"tqzzzP(dUPȮ:B4,@TBrz˲D" B000k_Im%ZYEٲqRw]}qoꉃoOZ Ц2y;iPy˱Ǘn?0F$R68?>pt`5zM1UG<5đJ*koKP"[EL鱠#>~ze4ʲ$A$㮳iPd| +ޝŏ"N4wt`` a,W0 M|t`ˆj.L#!m<~2[9X!-^6!PUbxdunBHDhiDưd2yjq0G{T|b`(fR(!4Mc~^~{@951Vҙ,ޭQv0LnMtv(IENDB`ares-126/hiro/resource/icon/emblem/program.png000066400000000000000000000011411415063341600214540ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME :IDAT8˥=hSQ{{iiRFMZ'gnA]:?vEEإ(iO" $i|M3}sυ ld.lut8qLS]yh8&}-J;?1K{j Fl#4#[nnQ(L.5JdzCogo bY6DNH 7і:72eCT8Oc X5dm7Jvk'0' %cp3ĮL1Z]ElƷsjv7mDj1R <=z8ۛ|^?>B>@5やb鑃^`JƘ. mEJ_1ψ %F)վx+%S^|ADmt@k6!w>z7)̄t}pmb;Q.}xZd86'zT_d#l^IENDB`ares-126/hiro/resource/icon/emblem/script.png000066400000000000000000000010041415063341600213070ustar00rootroot00000000000000PNG  IHDRabKGD#6 pHYs  tIME  ;IDAT8˕@V  7H[DR r4#M$ށTH+h+Nwэ47dr8~9ig0Jꐌ{i H1P1D$-7bd T" |X)SP䷊$yn{@L&1^ t:\׷R *'1OOy>Պ nj%EI$n1PIӔ(A4@͆H$wc)j5(Zh(h4b8bt:>Q4sY״Z-9Fwvn?K_,KIENDB`ares-126/hiro/resource/icon/emblem/text.png000066400000000000000000000005151415063341600207750ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME8`&BIDAT8˭=n0H[!!l"A!QsL$^Xj,{|3m1 Z;騬8xt/5ǒ4MW(w=ιURW/P&AH৞"bَ$w"V"rzM\T*( ,KRbȅvHx<"" '@ h4f儿P5N۶Ry =we;7\?2#w=CIENDB`ares-126/hiro/resource/icon/go/000077500000000000000000000000001415063341600164465ustar00rootroot00000000000000ares-126/hiro/resource/icon/go/down.png000066400000000000000000000012531415063341600201240ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<=IDAT8MhAߙk`C"I"/*AU*mك١E&MADEt>S8zVO޼)c>. Q51Qw&zgO/Dk00(nCȽ{[a~5鈴@bLQ= &$dY[AOXZloxz.Ҽ6?_h8|E7sJ*hIENDB`ares-126/hiro/resource/icon/go/home.png000066400000000000000000000011361415063341600201050ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs B(xtIME %S*;IDAT8˕kSQ{K@$UdQ{hU\BJ'\:n%`?y[\ZbQ!y!ٗP!g\s)Uz0{JiO=Iqhx87oW"nbY'Nq8'&Skk\Rnu@~Sa12jJ\~zdt*M*@kh,B~D0.`vКErn. RTk69?## |Ά\N>=6o3V?Et0F,/-yx0!O"^SyZk&3úӲ,L0K;t~ 0 R"Ē`So/:"Z$c`(.Ns5Cq.KMB~8pA$mpg,+:bwVգIENDB`ares-126/hiro/resource/icon/go/left.png000066400000000000000000000012171415063341600201070ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<!IDAT8OHqǿof~;RblB n["VLD"%t-z;$% n$W"KPl0wz{RJ7+[Z+a X&殅 e>p-f)7",3x_3ԁ1|tSSRƣqwp5Xb55~ԋ+U?cjJZۆ25|I=/b1 lܺ?n%&Fs'0۶К"IENDB`ares-126/hiro/resource/icon/media/000077500000000000000000000000001415063341600171205ustar00rootroot00000000000000ares-126/hiro/resource/icon/media/back.png000066400000000000000000000014021415063341600205230ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME -|geIDAT8˥SKHTQν8:3>sBAeBh!Ҳ$hI-*Z S we14e", qQEBcf^Q4Zo~*r& 5Hs# \'_!(PCpE^vf M̫8bۧ!;Y?*h޶}kc}镕uujO>~TUU厀ƣZJ)vi)*(,kmm+BDf%lf/B"RhM8Rt_ "7"JR-f% E499`&ȸ)x\υȸx (.P0tax-!&AQTz#ɄK,pΡ8\,[vj"G7 @)MJܘsB@4\ 爕v3ko~KqvlV94.~UQ!exƽ'i[919>"\qʞI|_'g9㺞 $]3AJi!_Bk´LIENDB`ares-126/hiro/resource/icon/media/eject.png000066400000000000000000000011641415063341600207220ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<IDAT8SMha}vi,An+bBAZ#AO^DkS˲\W +1nI@,U}gO 6IENDB`ares-126/hiro/resource/icon/media/flash.png000066400000000000000000000011371415063341600207250ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDAT8;kAn+((1 B,  {؋ 2? ,A`4FcA7K={7f<3s;Ngg怫 f6PD\8Z[pũ9`6_>9ɱ8\y%KW.t2cr33u,#Mif8Jy.d8a0!'`֋1 8ƞ$ۿ& msg0g@@@m _-g]4D$^XXNRiEQV\.W!n^\pgCJSO.4'Ep .C͉h4rr]̠[G'Bm.[oYZ<{ TUU_|͚C-hcKFǍcȅp۸LToYS @̳~?S)%k٬ơgi~ r%c? 4Lv*~ [456] X Dі';q!аLl9[n!@lۮ'3 U,|(G%m.RJsTJI? sD MIENDB`ares-126/hiro/resource/icon/media/optical.png000066400000000000000000000016431415063341600212650ustar00rootroot00000000000000PNG  IHDRabKGD pHYs B(xtIME55*})K0IDAT8mO\ew8g@R(e. Mim5֔Ru+[(ӈؤlبEع@$,`(0snJb˳xGpↆ/}@L_/NcD۷?xղfz^|21M_~y^.,,R)\\\ rXVCٙcN;v/﹑#@aH)i4"u'mV,hCÃǷ.//K9PP?G5Bt03yyҧw|v7Uq]]7hnn!NkkDJu&ՄO-..n@γJR sͬ/޸αR^&Oygt$3MS)0M! /<#}b1 8a@N?S)E躎mH)?4Lq<! @H`hxJ)R:h;ץRꙮo]{[Ty>t: Оjgwog_$=D"vvwCRrJոi躎eZU/TZS!RŽ{ԏhBi =cXG+"@J ]7Fv)%GGGdYO޿;:P,XMێd2q0 ,L&#_g4Bhs$;;;Kڕi˲'''W ʼne߰_Rt !Dd9 QnJ:IENDB`ares-126/hiro/resource/icon/media/pause.png000066400000000000000000000007201415063341600207420ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME  +J`D]IDAT8͒KnA *(؊8@r HHp(;DgH0ia/J\~?_Gڻ=;-"#:kΟ=y/Y C>f_ywnyfWfps_L-{>}`t]7#7Svw)@T0sEDkv(?$д;AT@v7Zq4mC"!yt0FU_,n>&C *fO,e`n; ﻩ_dQxh 6N1-F$j\BB|9Q*Ώ몞l7D"ic#)HsJtV:mJ8IENDB`ares-126/hiro/resource/icon/media/play.png000066400000000000000000000012241415063341600205720ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME $!٭^!IDAT8˝Kk<2$M&1ibZI0#JHRlgt'XB\H/r . BMXlJФ3M23.Ħb)wus9@wx`]: z`0,>0LDz/nZϵZMB4>7ԤʥOSL4-kuhpf.^x06 Îx""@0Sx}LQ*̝d t 6x=>褃bxuhEFo͎0,kf,BoZ;5e>Y& x' F\419T^)$B$[=xJ<_8LN&m?Ϝg# HxNl\ߕ/qk.IENDB`ares-126/hiro/resource/icon/media/rewind.png000066400000000000000000000013741415063341600211230ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME ' IDAT8˽KTaƟ;3x;glf:fJ:AmEe!-]l҅Z" iUfBRr%,J%ihDDQ\&JTU!,B ڸ%ECtTpG|@Lx`zq- Qa3~_>3}?Hf.   [*xqRBAy$q vX,fj P_Pmȫۺ[d\eR]TwEmUUUUUi;"1z<ϟ 3Se|㑖r9#]]U^9ZrԂStO[ϙǎF(zW竼WpM/ ou[JČD";─ aއ—U OAL|XBPh!˲[g!Ib lSuQ6|JRJvG~6H~HIENDB`ares-126/hiro/resource/icon/media/stop.png000066400000000000000000000006551415063341600206210ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME (.:IDAT8͒_J1줯 f,ćOd2_7ez/so`o4ui2.qu``NOMJDM`)"wWUH8<:v$":@;IԣPTB* )luEIENDB`ares-126/hiro/resource/icon/place/000077500000000000000000000000001415063341600171255ustar00rootroot00000000000000ares-126/hiro/resource/icon/place/bookmarks.png000066400000000000000000000013611415063341600216240ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME *(d5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًo=IDAT8˕MOSA޹`?PjbL1&h `ܘ… ,L=`„ 0VT -bBO29ϼ9gTqac~,*.̍H=C<_:ZSH)Ǚ ?^Yٽ"K yAFvT>C=TM"xZ8u pG#s$]P2JamR ]81'{\W;_*DzD-V mD vlnBZz!G>ڵQMw|:j+1$T Fb"稉g!9!]Tn+?_$-D,Szu@[nIdn7{ )L6MI~E5ZtmEĹS`@)t:$\J h 5ZY~% - B lAݐjoO-[ܿy!)lr{wX^¥3T6wέn5Ýj ]W;zLɘ879U\isjlIENDB`ares-126/hiro/resource/icon/place/desktop.png000066400000000000000000000013221415063341600213020ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME* >L_IDAT8˥]LQ?O0f.ͬ4.p Hfdi sm#̺p) /),o1/KHդqQqasn=9s̢eTW3}v^?oky@N?,[WbEƇwc;@TaCƘd3 Φjio:~,Q@ʣl+)f+_{FBr_1_Rnعu151={~CbBca9'l,^1u;+9Qs 'Fq]q{vctuǙ3wXb~8 (CK pDiɉtuǙIݵL)e&)((fknr ;rEwQ@4.7o]?b0[IENDB`ares-126/hiro/resource/icon/place/home.png000066400000000000000000000012471415063341600205670ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<$IDAT8MkSA3skĪX0BE"{ɪ t/н?]7DN("V)MI6i;3w|Ƴ9xGjcU]LU4bz~3HUxhlT`=Ƙs9@N<c J Az^4M/{0t  s.۽ܼK I="5) oߤ~FhT{a +Y;5`Ao)_aAܹ1,3,g.p4^1@CI'laaeTe G6FXB9jipPƊB$=X#v#H1""d>RN|xAɣRN\Ue("[?ZI 팾i$Nwg}Wm/6 OIENDB`ares-126/hiro/resource/icon/place/server.png000066400000000000000000000012021415063341600211340ustar00rootroot00000000000000PNG  IHDRabKGD```efJ pHYs  ~tIME ) E9>tEXtCommentCreated with The GIMP (c) 2003 Jakub 'jimmac' Steiner'3XIDAT8ˍ"Q6b>F |6d755/1ыMw;ݫ2{Bq=TOZ|`,K}_|u]q]W1bx,Zk^r>NPRD)h4V+ӉrT*n}?@Df>|o8EfJ)8B!:n " & v۶q]bU`6:j5|.7|yAD<FDv;6 DzM,66ܻ+ ÁL&@R!Jl6IRj5MK痗?|PsIENDB`ares-126/hiro/resource/icon/place/settings.png000066400000000000000000000011651415063341600214760ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME  7 ѩgtEXtCommentCreated with The GIMPd%nIDAT8œMkaik44#&C7݄dBHXu%5Y!dA\u!+7--CQ XA$4%YqagHtՅwuyp9stٓ?Zz|ܘܽw'q@J 3X][9$s t=nseJn ci4M Yťi? [,%FO֨2Kbvm=;No7NP*c8*Zg_ QT$>\ 8zba b|>lnnoN,{91܅յBAX"\z nrno^]+~19]q&?nIyy3NET}6iZvuFEQ/A3J̍-Ƒu4Mcާ`Tu f={p TI13 E'ON%_Y+ -IENDB`ares-126/hiro/resource/icon/place/share.png000066400000000000000000000012711415063341600207360ustar00rootroot00000000000000PNG  IHDRasBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<6IDAT8}KA?ok&ZP-BD[].A$)AEu:U.% T4B`AR~f^]75]ofW6.wmPoJf@Vcfff6tc9s.ONNF,`JZ%؆8;LoBzc mT6H\*Jtuu9GRauu&0Sդw7Fhf8=|aݗ,`EQPύ[!r)vPc#YQIU#sfy_vxK;/-1T"s! 3IJB !N4yHdfMj3FVhFJF2#hSd^hjD$+A%d^M(<*| hc}8n@N*ADRhΎf_>`~bP?^F@RJz39LLL077'SS|xq`I޾[X.Y@Z af,..qs=^ N)]n3;("]GWiIENDB`ares-126/hiro/resource/icon/prompt/000077500000000000000000000000001415063341600173625ustar00rootroot00000000000000ares-126/hiro/resource/icon/prompt/error.png000066400000000000000000000012151415063341600212200ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME 2SIDAT8˝OQm 壾Mh ĔD2iҁ";2tf#@XD0hc$-M[(=}KOrs9nTR<ƽ,e`z!~; -L&a|*3ef39x7Lr{UE XCwOMRSWt2^,F{sm4@UAEAi|?öj2CX[C*zbŅ1S)>olPkf-`~2rguPqTqy<`>?>|DE+OoA5?JDQ`zpT?P&×AĽQ7<7UD (Y "":'V][x%u7:NCPcG" lZlg w(CO4Fz`VW*H$p }0vrjܺLv_“QEEpM::_΋nOGfXvwIENDB`ares-126/hiro/resource/icon/prompt/information.png000066400000000000000000000015371415063341600224230ustar00rootroot00000000000000PNG  IHDRabKGDC pHYs  tIME 2:P5tEXtComment(c) 2004 Jakub Steiner Created with The GIMPًoIDAT8˕KHTqƿ;:G&YjfR>E"ġ%ԤlbpaE1EM%It&JJ͊4Lqtwo5~s~s8T\L)%) 1ek^v}STޔ0bmeZqU7S{z?\!&,zIW׈%ooߓc,RFg}ZUYEӣm%Y{[n=v_0kEI珖D N Jhs;u&%srm'$=Wn/@ ,C-f PPn(.*rraB+YWUH43 sW߽%::6ilZN̾24PU}z YXXx(7VL6^|IENDB`ares-126/hiro/resource/icon/prompt/question.png000066400000000000000000000016441415063341600217440ustar00rootroot00000000000000PNG  IHDRasBIT|dtEXtSoftwarewww.inkscape.org<6IDAT8m[lTeZQN6NSMS.F-Ą+IL'Ai$A  G#ՠiZۂcb-P{ivCK엝W^YKSJqcok u@p~Dָq_PErWw>ξ'B;tdz x;B-/=윊p=FO0kJxƵO@m {0tr߇.R:˖0$i`Yi {FR<ځc[2<P\ \@I17ȴ;gsȀx݀/|zyxpG@uOHRZXXОRZ VC 0a/ zbwLIt8l,z>ϓ-e !v{^aR Z v "8=bc.| f̙\xrg\uݑ[Ra&#lח=8`^K=@Dn=|C>y' f"/t 4}IENDB`ares-126/hiro/resource/icon@2x/000077500000000000000000000000001415063341600164135ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/action/000077500000000000000000000000001415063341600176705ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/action/add.png000066400000000000000000000011311415063341600211220ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX햱kAH$D+AX?B[CF+AA\aai#v"B,LD"hlryMv݋Zx ;70cDU۳z?v{:d֕3vO"ae3No3A d홆9{!K|=Swz"(-g˙Z|w͛ܐOK1ђ<'!${V3K8̈́ N΁u}'l('Aq)m/Ǒp0VLq &o3 s R7~1j>,$jt mPcT&tlV%~~3# jiw] (0[@ 4w$H^wIH|4N rZc'2Se_T0/]X&΍-OV +0JOhC3o? WLvIENDB`ares-126/hiro/resource/icon@2x/action/attach.png000066400000000000000000000033231415063341600216430ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXmlSϽ~ q IUea*պikjRM]D'[UAVS7it/jJ$0881$>Ͼ)J!ҾHG>6M59SH2Bu tv{QT, q0S*d҄ YJJtW]+{r?f^VScFd)"QN*wA|ZXXzUצEVs_w~a ogxRqȱ-[v!IP7i%LMO^K{AgJvg{ɗ|fP'TGk͵e {ڵ߫5ؘL(^&HRAQiۨѪF9pt#LZ\+4ւcqT18w[Z)iB )\zh^GzгOp*5p DJܾ /@fͯ?VYY#1([KxP(. BSNuˋ`0Cm0WJtÅm۵.b[H}]Ci2wbB܅zwkR!7`,BL+/ 6qÄw^"&u?JG f|ya{k6\v]B"8et؏u/BPT:vVV{ Ȍ ]c055w|^l!NxJ&֭⺌t:}7Т||o᰿U/Y7}Fq|!/Ʂu ,ͬBXStV7&|9BmXary.q :N$7{ bZru CBB:^:P߈+× p߄.HYn?kEHd f?HŤnBH#G_j,Cd2@?OED#ju9?)_zJܸ9Yw*MU|~9vIij0#(Ou3`eؼy5ph4f_SiTc/'"%gG`$āWT:F%} *+;4|+ }6;w=,'w=KR'ޣ,땬W랩ojx\<<~OިkgV3Je*ﮩE4<3s iu`0P $?vZq)=y20sKeJ RX\Z9?9~ (gTطo_USsO4r~<er+\ʒ\2 :s>dY b%Ca1˹&H29[k98CIENDB`ares-126/hiro/resource/icon@2x/action/bookmark.png000066400000000000000000000027741415063341600222150ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXMl\Wޛo;N&-cDZ V* #؀`Z(a!6,@Mn @ *Җ:rRǮ&vө{fwef!=ӛ7{==xꛞQvaQ¿o6af:5||{2WXH|[08,΅pb]2l"BiDM^Z?yxXa3&hx!0*4J̀]r*G 7awq78!bA*Ļ[^\At( -\c$ZsmC<|K/>88ٳgch2%ttskON`; 5F|6`\%r$,LNN6)i#zA|"ug$EthV(E{tT+ͳYA,bdd$tȰSQ,r>(~'j1a ."wOWqUSkksO?13g/`•LhaW>)~ѕR/q=?:\WFO/}%-A4K333Zq_ Ε'gp1<<ܹs\d2D siRDQč7+ =tT9P"JD[Ծ&kOk胅 ^[PQ<:`{) "4S{@A)+ Dk-Ƙ^YÚpXjyXXKQ|pV]XX)p 5kQ?ɉ K@|'Ne?:uTf!IENDB`ares-126/hiro/resource/icon@2x/action/close.png000066400000000000000000000037751415063341600215170ustar00rootroot00000000000000PNG  IHDR s pHYs B(xiTXtXML:com.adobe.xmp IDATHOKAƟE:uHAPI y(C^P=h`U"j&\ۑT;StN LFܱǬ9m=t4~z/:xA[!m uvD4ula*l<^@ ɣ|"@` ܓ ="h :#uf$nɍQs[x kRqłVU̲2bi\!)TX5 p+eVU^rO )󔱄GMb)f܃|ӕ<3LjbQj` 2nYIENDB`ares-126/hiro/resource/icon@2x/action/full-screen.png000066400000000000000000000023501415063341600226150ustar00rootroot00000000000000PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<zIDATXŗ[Tu?sϜUggg5*KOFd"i=P[ x)JX"P=*治[og߃;̙q$c|?9GH)?Ug4ƂjB=ڧsH߳r/?l[Y4_)>YaLa<uQ;( l {I\'e B0$7t GIYTkC%DgiO'Q`2<>li3`a p}:rJv{2\wD,y <|:D~e6EuE^Up,2\(@QNVi*V-tϚW'HLF,h:WԦ;  UV4K[HnW@4p; uϬ6"]JI._l>0)e rZu#Kf+LLϐJ[2OsLDY764nFƣ W=D,d,A<5U53M2M0z=+@y~u0)7C8('r^ u7d:T4T,$ӱSW-|l͓ReXx/ie))KǁeZtlT,9[ g?a2jSyL?Z.G)}B !|Xx]U@"@DT !T8]R?2uIENDB`ares-126/hiro/resource/icon@2x/action/mute.png000066400000000000000000000033751415063341600213600ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXlUg?9=sRnQ:Dnj?dmbLLX3d11Ѱ2m uDI+a26,嶽?{9m`sϾɓ''}?K䮮]>* ,J" Ou>Mh %hmK~4b EJLkh}!g={vLF5:Nƺ:V],KYons?~nNc-TH;ײìj[Κ˚MOEyWhjj xX {Dض[R+Tu]'#&i -1I$7 i:T{4sydMhSoOyo[H@ڒ@J 48399_xW vnкuO`dd7T*d2WmCAQr[Yg&?c=ڼIKBk׬v_x{XE0$  9!'D88x#sss4bZ=ZoP@]N>?C0-~r9Z'r JyqL 8 hКMuٖj3(H$b eFe,$VVPVkEh4LRŖRXcKI>S/P,ZcXRJ--I%b|bq0Ms=aJE^.TZQ*() xR"-TU"|E aYZk\%X.{>QƼ% ÛI(QgnB0LY&'F'BJ?g~D23J>_cK \а LӼ>34K2J)l;Hۖ#ׯXO0ĶL꥽)N˧>08\Jtt(1Kkjfpp_WA,$h澵\! 9b1ZXI0D+0 ",Gw@X|a0^:vbX>Wb&c1RVDQֵ5Vo87SXӳ'Oz,맺--ɤ7REkqRyTQR_^kNrϞ]@OWUKo;Ag}i뺼ʟm%b\X(Vtk ۻxCCn M oڶѱOl{Ko](O,],d>_>s?|4UBJukאH1 I2,VjD0fTm<еJD[< =$>֜#{/U@K8|1ཏUX#u[^csg zb&F 3yƂ zUFdoKqas/@RhBbj9<1jKԣJpݝ_/n 7AFSWrY?]W8i1iqs^E/Ӷ9&P? 2ŋHarfqL9B$7 œ=,7K/@Z ¬LUi&@ו۞ ig"@Jeh):FH<6660f0q4da^jee%bJR8I A՜3![RC0Ҭ,*H*Qz䁻[Y2F譌,UM(cNU\.Ag

9&>yp],CDBJG}xA!&7T8#pDuVjU~`]I@4@ w0&Domho"S',ymbnKe@D0DƘ޻wg~cݾngv($yZo:',Tz^GaYzܤөqsc6[\p]ltc@BC7yJ sln_s$/KҬ3E;+mD]ԴHuH> 8::Z9pQ_ч?o|8鍺|[_۽Dg:jf(>aMA#vWG!sΧiJ"4jy0p`ۭisfcPqvx2L&,{pցl<3 MՄsE(ߦV2TiT&$ф1EM{}]|E[0Ш&d3w%UIIdJyD, `uol20(64| wtjT+3"PL&]w+(jƖZZräbRlaM3όhY&3^TueY& ANk"XJ5*e!8JU%mthh´/Q=&/^na%ʥp9ӬdgT!"Ye/ Qe^eYqMV/>(.(!]3Ge<+*Gk"2- $/k= pp{{"4D y8(\BNsf6"+ΟVzhr$TO8f%!wz /VPɂ3rc(. */)1F(8O^AaTύyj@ @vyp H^3rNJ/HjiIENDB`ares-126/hiro/resource/icon@2x/action/open.png000066400000000000000000000030161415063341600213370ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXŖ͏G13 L>8:bD!=ł+$$ BI-$$2N80H !h3;3Uag{gzfF#}DE|з(.T^ObAͦS3yn_zw;Y}'P.^(Ozq#s1q̷N#y{㵷k}3˾__./d!RBkRJBTU<U@eiV7oޤjcER$I?]#֎o(T8sAR:u c ys]w~g(1Ibiik-ι RJ^{UYyc<À PJaCt:ۍ .ƘdBiZ6V=J)jaͷˁ2A=?,رcIQ cc߇Rs#+eFCnmmO:jW.c EPrv]0??oVWW&>t\}!8 dWF{nuFΏ6_;oFz/_`105c ߒ#>3?&AU5YftYZlngz- w!@ &J*',Iާji. 5ޥh9M?35$g/nB@YKj<5pba71d#Ԓ81kmjGix@"n[K yTE?N3!\cc;&w(%X11H-xQ1P~ pԩO-֖̋jc8Y&NM]\hmkj ؐ1enzL^{1AQjƲӋjj!2unl؍ qf1ZNIFOs`0խ思SnČ$-;GAFߎuZIsnH;0dƍYu gDbl\JNr|pHVC)2ׯ_5]077GEcxAf0ESZKx z TIh4XZZ$I$I,"yA1ձbZWiŕR\|<|'y(MFΉ(z=uGv1UZJDQ<.]'Ou떛7BDQDVj1 xYTOg{{/$՝;w)۱8{gΜ1Zfee~_ ~`}}H{Sa)@yfy+jpl)([@yUjaȷo\(=ߟ;;;i BngϞEDNWYvpY@C)ϲh4\{7.P`X~2:׿޽v*6@6`ր'όnP'qcdfCG^tlIENDB`ares-126/hiro/resource/icon@2x/action/quit.png000066400000000000000000000032751415063341600213670ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<:IDATXMh\}η ƶƑT0&'Q0V`hM[ȦU7M'fM I?tQhCHƦ"""nbۖFo׽f43 =p7ͻ?̽ 5 \' D:~EѵY u]\Ƕ1 FJEw޻Q]񕟲H"" C(JGH),bիW?ZyUQ 4M,BJ^+PJ0 ǡ\0M !D P*fn88XmH)ZwĴ8CXIJڡ7 #@T]\qض *Z*ض8Q/:3iaf p'H'Y`w /1! TG$4C-4quS'mn˲zIss?oz7oR8wwߵ1 Akt7(ƍT*fggq]wrmO33;}@K#v h )_08qaFGGrܽ{y}>}a4GOh`YmI(yzЛJٳgYYYAG*?I嗠¶4"R;`z۶assjcnmNL,-", (C6 h ,Bm"Ы~zz8i4j ůfLBxf@1rgxc?@oJ%ܺu ˲r:v"g?-/G3g0 ESMCy hX>K}"O}!w|ɱ1gk>p0 D@>zbҠ$ (Xag?g* < RJn7 CÁ1 b&KKuj'=<;˽~'(W@i^1p;uhI3kyQ{.)~m--%.ׁ ( ! Cb@TJS0Mˍj?GklZo r!n'TU\%qx \t?Oŋ !{"C0 j՟7_+eVq  AG27)%<|2vɡCh6wY2c<15Aa6Zi($_Zk@H;9귔%8aZR+vY|@ZC)*JnjV;Eq!R?9m~ѵ~AΓfBc;~x7ݦ3cˍc\IENDB`ares-126/hiro/resource/icon@2x/action/refresh.png000066400000000000000000000037501415063341600220410ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXŗilT޷q ij,\5(%%QBZ〚㦊RRPFE,iIҪ qC Mc xggz7͹;w= 66O7.(;U8[9sX n#u13mǷ[SZ[[Č5~0-ݰXtM#%Lp@`ʽ|s }?EAӢ߷xSt ~]U..eD$IK)s~3@ }Cn#e!XƇE]70-m]=kad^@ q$ %A )$|t}p&_[7U8y^e].jx:0+KrKdaX!P lWr$HlI0m3=6Yͬx)w|e"y`D8S'<&"F: &x\H"خBMb߉)ronmܸ(ۋo2'q>BI˝ vq3kwRgp͖:/177 @M 0f4Iv p*/>, N]YQUmk[cO2idmxmtF.i_pjH$w0XBL }f7{G 9w> kʷ uGkª8eME"9.^%8c_GO, %F,F%Y"/uvj}#_ TGѴPw枹Ա /S֤w?ڌ""/Ep UhP{'dt!qvKA hX~ɚ.q nIoK[6`{Cۉg:9@{@ݘ&n?s퍽ͅ{QZȒEJ)eii cp$`6҆d2&cmf}_y5n̓@r{Q8{s)*[ee5zQٗB 9*׈}8t\?Y 篆L*j~w;8l"1XN~aAX`l#BL ?َ.S!F=HA^UK /x!Nѻ$k >_=ˆm2svIENDB`ares-126/hiro/resource/icon@2x/action/remove.png000066400000000000000000000004751415063341600217010ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX!NCA}k8 p pE3 HȈRҤo+7$I$g_>~r }绋ugv.^N@)5Ng= ^HKc/Jj{kT퓦{5Sd L07-Mj%/^^g˶o^UFCj.a&c?pb>RUf/I$I2odIENDB`ares-126/hiro/resource/icon@2x/action/save.png000066400000000000000000000036631415063341600213440ustar00rootroot00000000000000PNG  IHDR szzsBIT|djIDATXŗ}pTn6k@0 !"hXc3֑q?ڙRgNu--B:h &;޽}MH̜ys=wE\i̵wh#6Ia"p0⹾=[_ԯ|2mo؂ymӪ5`Hqʿ3Wniϙ?JH1=b[X,)R 9~F$_ ̭vumW7Q63<͊ؕӧ+IKJBCTd볽ySyr+_,17z~zW:{/)(1t_= O 9caNZ18@ߟvpp2ʶ$~)g I ڈ+~H$IJ ~kndvj,ʢg_|/TWJ)w]={';Z[٦Mvvv" 74Ɛwܶi/hmIv;wb3˖-F"͗Xd-|>mcPJ*D9wfO#+(7w\0(#u]:::l߾]^N,Z6P(RQ,)h7sv#ϞF,­sy^cqpyAmxG2dΜ93>"!V\I. 1&D,Ï6si92ϑ`g3>RJRhq]ŋcY֖ ֭^Ѐ8(H)Rrooohw` Ch(++CA.CkMPή֯_o"Q|'HljF!,[CSlJSDQ8dd2y8)%H .Å: u%222 ¶eY$I`ߜN4PQn#Dkz,_ߑRJ{R!L2dddgϢFʱ,+4ԏb1=g!8ZkL@ @8\ Z%>/oX]xIENDB`ares-126/hiro/resource/icon@2x/action/search.png000066400000000000000000000042471415063341600216520ustar00rootroot00000000000000PNG  IHDR szzsBIT|d^IDATX͖l[ǿNL֩ I[!-AMnLӤ`eBbRX Bۘ6uu"M)LMeWmc;Ѧ4ؑ޹Ws)HD"rԂÇ !_>AضmB{1CGumBP<σR 0d066QrRy#5#GB+ۡ*4MimAE(ۍR! !/b?8|pP 2 .'JvM+죫ܿ>e| Μ9˲ּKeuj5z g;/&J&oOڥ84P5]R]mk~s1<<ݍYĥJ]u_ZoEY8^9^vҪޣH%HWBT6C~EQ011+l``8%X'O~cOL&-JPUb|tx###f5M[0zf!":;;d`0b/ZD", ؊~3R~__O?-}GGSpT*I 2N:d2~ٳ'k׮=o>0P(`6<>S\p}]ןo[\oO*to7ND"ѳqF^EB@A}}=z{{qڵulVFXcǎڴiS]t:!mۆٹhq URttt@$W^|A---n{rxUe(ku]:ugϞ޷~J6E( B,Bjw/bsNStAg]]dI3~.{|O>+l&=Hp`ڬ$IwYuuuSeu_-.(@bJaWx;(eRUU^$d-Ȧ zÂ꣯NZwLƛLf֜EVAAhR%o2STUUk%/Lz\8YV3˲e$I H [ /&`^漂(#{VͲK'4*r,Zrs$8h a0 dY?0EV "k pGYq٢;!L'Tvsg.j% Т(j6 Hhuu X3v~)dKW)"T1ߔa?[[ "q^', .WfzP̒Wǚ##ڽb<6b$;:! $g(׮64>gTTTx'紟ⰥnޮenŞ&- (2&!!!ʍ5_:N䥦lȲn..L&z9<ƛM5#?g.hp8IY K mnn{Z|.n.^*qˍN06 <~YwKrPqSH%?f^Eԕ A~ ~`!> .7~)EQ@$^(XNl91uuuS:%@Zq.>\̤>} NVDK,K  Qbk6[Vx)/֚Y3`S^!)> %vԍPZZިʖˍ^AdYX"Vn<7H.n[m1Z< 14F =.pxr8սm\sX E3?=c-)(s~9+#3fFiqftv . Hm.X)iOF{WeYE  \D^8p`PWbLCFi3M8xz`6@ꬸ7*RTPg$MzQq!~x<DEE$,N-CL:]:vf4MHEk[wn?ݤhgK?рa2"(,*y94QNB׃6vbO/4q( @?W\yy9w{_pI#^oOe"ֶ'+M3.]BWx_ . "a0j%{LaE[Q C Xύ[>[8h¹!LOT(BDcL̊6&,Y{[n>扨V8<c.Sx|b%W/IENDB`ares-126/hiro/resource/icon@2x/action/stop.png000066400000000000000000000036071415063341600213710ustar00rootroot00000000000000PNG  IHDR szzsBIT|d>IDATXilTow6@I FƮ UAEi+5!JժkUZሆ)D UT8iTZjPdaM0ۛ7oyockW:zۙs]F`}Z$pd%?a%WU})-um,ml6M~X(t4a,m64vv~x.ǐk/A@۵̋/љ^/孭ϜAxEg$ ~SSgȋhqXc׮AEٮ.A@Ee6 J)om%yxn6b:MՅ Y jve-#q\8LA weΝk$Qy'@!E&B!Z ))]J`E2M"(QQs"11י%HK|_(IJm" ](U@U]c"X#-۲;uĸnZxʛ71;;|IL<ٙx3PUl*D0OAH)ToLEOGE絓&p z5 ROXVN}OR}YFE$]Grۘ؇~ dzl%krՍPL՞=h H("fHo41~f{;eauu!2>@״XJmK_FOf\/]bG") `j !**eLM+P2iRaÒW<8TF?tMoHùZ֯؈fM\ŢH_`cG_lx 燇xeNM`]kkA|CJrrDSs= 9 `;?_?=>ޱW6fgQgg"f>UUT1|*s_| `m6lڄ7by$X&cc"|yfp_N߾M"*MԠNO/ϒ׋XVF&+e-̤R_,)<̧mݪZ=#B{(_z*_n:L HB40L?L8g2kǢ^L+K(4mJ83>>PNCt!:\ߕTG''wV U͋X-\xhڶYhk00]LNL5Xmqkjj-MH[ A˝+]; /oξ{wi,,w\`;۲ gf,@ѹ72k p^ZƷdKíKp*@5$`/B{c  r!4@f1xJ0.Puhu#-u ^NII brr$aN2ayV%m;<'/hk{(Z⣕(|GNa|ڤ}+b;.dGѝ)Zע*B0:?,9pqsz)@GvK,(0,]UPUEU(OXjm#8iRJ*+˸a$ehk{(co񋸦| cyt1lڨl//9DU˩MUJr9 aOf];o}@~[B,<}):;5|^߇(xk45F|>;>h供\(B)}U HxuM#Wƹyc#ãY,[۸B;ݓ9M64.?CU*kmr$y[!Q+8.B‚ҲgeRVײ=T.JR ׏мWʍ}EIF#6Hu*b3 XBb iKL!$U^Bu})Q?7{!B[Vs~(R骠*Plf)CKdlV( >$Ä HCH9xi)};RJlƶmTUAE29#?[0ΞːhXBrk1ԓ'1,A޴ɛ6)Sn|4,k?% Mg&}U;\Tyri7u kY)_+.qi铞^ԥ$c? 9uzRri\TNSPDq}gi2==âd%ac"=ޙ  Cyk[Q?gPQ,<`>y ^E[_KK8,K-Ew,LNz^f c:θIM2Ʈ z3333t&C8p3Yr  à<{'١CCer@m^4|"&e0B~]%Zd9.`4蘦ɅW4;#epxiYC,?~" J `C '>ZB"Xm$?H{4=/hA8> UW;5д}^]Yd"#D OX/La=}c/2CgY'ˮ{"`; W_sm' haXx)z 4M_rl(BzC)%s |G.vl6˱Fp-Mp# bM|>CýLQ;4]y(}F c B.GYZD@׵J&\m̺(CQ- hkp!::ldn\N7Ѵ&tF[  ׊ʧ}ɩS9",{74$T,1;{6\nw9Mgq~yč0 -Gh4jcqq:qi !=~?ћ i:tn3Oca CJ!]eY1t&ۨkBpEⱢgpxGfc=7$A:}3s9neWUU# r>|x XJJ11 P(4/X,eYrrfҲ 4m"%rig R  @q󙹹Zu6}6O&M.]W22:J$u @ )%\.jjjp~f9KJhq^aX]Yw߮]`||]];zO{aa9;wt-rRn ðCq!G[[QJ4qONPJ!\93f@JPlibM{ L-zY&&&Bm۷F*/=|ɚ:)p5,_ĴOy q])>\eYTUVr^eee,g==<{)y!%%%x<(2ZZZ ܜt:'_>Oܺsĉs!LLL9Hkkk_ iJMHp8̥sdWٰqc*PRR093(t]lN!z+LLCݳVvfϾS̅LaZe,ziii=Ǜ6ohJ88t})@Nx_l;.DX,Ƒ#G?yd(  e2*b"41!&-H$m2].W֒´8'>'[aMH懇pႥiǏiu|B)iDQ0Oof͸ݳV$! RQQӳ%@)PXXȕ+W,%K3I)Yt)p4$TJ-BP__F̓4D"R*I+|iin )!ǿ3τYL݀s}{;1@=o!xsW/ĀJ ~IENDB`ares-126/hiro/resource/icon@2x/application/chat.png000066400000000000000000000014171415063341600223460ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXkPǿbYWf¨L>6p v`nscc!ăx9?ؠ' ; BmҐTm5%K,}~~KK]t4Es]%0f1Rdmm0(iYVv[j5ӿf& @fm{b8ΈMJb.!?7@q?8PeN9 $IE\E"!ċ,˱FQ, (˧8e94 Qض8o:2N  ,ʈү}}) m㲼X,lP(shZ`}"Ҙ:X]]=ymJ;aT8󩙙+㍅^+$ <>4M{T_ڱmAbdffssC0~JRLvy, N!twww?]Tn Dt]|a0CA}V L]ݽ/>{ƞB[[[YPU\GGGeK)4g0C!便$0&PDͰA4??T*wL|iZMu7d_[jD)FiBlll|L0 )c_R` }IENDB`ares-126/hiro/resource/icon@2x/application/file-manager.png000066400000000000000000000012331415063341600237520ustar00rootroot00000000000000PNG  IHDR szzsBIT|dRIDATXkQ$T0AJl"KAn֥V].\_(]몈Up A\h…jdb&&d&Ѕx0w=:b.] |w ii Q>͆Rw863sl]D-Z5Dۦh.Qը2DmU!vmSZIؕu.}^9<˚(dߝ[6Ss0ǘsmg 8nL\{K-D&$>)ؑ/G6)_ <Ǟ_}hW9pƠK RX/kN&fŢW{Kkb.ZM;}@C^tvh㞐? ?T\:7wG|-pٌ]*nOޕ @(r~=E5C̈tߌ(Fv@0{2CՈ"a(ԃ>PJ(ύO#@+D4B{Dߚ vb,[w/qpBwǾ^r2]5L7qA&*LrOY*BIENDB`ares-126/hiro/resource/icon@2x/application/mail.png000066400000000000000000000026221415063341600223500ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIIDATXoSeǿzZڵe3]62ݥ  .#ޑ8@qqjb4x_ 6a l0XUdڞsbe/%YހV]~nʆRORXY[.c*S忖QP Nm PT̍c3{`8r>}ZVQitF:|(07P*I.ڱZ39p!Cneh֫ޚ60ƐrHg IhZEy95uiV@)@^r͞ $<GUyMV"+Ɲ`;r Ƹ |^clUfV&Al RW_HQ™銵qs/``1 fmsJ"͠(@@/"f";  Ck~!a mxg^uIENDB`ares-126/hiro/resource/icon@2x/application/monitor.png000066400000000000000000000035361415063341600231220ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXo\G?g_]qI_Si_i#  @ZUUF$ @V8qR8;N;3{0螙3 E qt.'.zW3O߼ Ν;bϟ*!c*U{\o}%·N8QR`m_ .@TXgqKi#޽83o'Cgݳc#cT~?{q6 T#|$8sO gB}. 3XkyENfdR#֚DPPESݮɾWT{P;_1,,;5{G_Y `y١$I&W+^1xruv" ;2,.9\uZ; c>Ͷ幃C|n2dt(_319f3;^=K<"B!З $9\[m-xṀ}OjyPyѡ>v>S3-+OXZi>1 `ߓPoZ>7o:A>RI{;;Ý;=FVO&3$0sT#O9gi4ssʢʟ/gYdQ1*B!12 3OZhN[sIA9:7L:ܧܙ_򠂳۳Wܜ(ꆭӎmG h q豎 >|IFA;z("0&#.,3m;a&Iߠ`!dVVVt/eP*bbrZߧX*d;X\Zi`0Yk'?낱_%N*Rax(ՑUw @=gF/1vqga\n~x2/޳"f.N_ #^ [ja$*Plbp?ѭkĹ$*9IENDB`ares-126/hiro/resource/icon@2x/application/terminal.png000066400000000000000000000027201415063341600232400ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX]E?3sv/KقH*mIȊZ5jW`b|a !"?^@ ?\kBD(Bn-l*w3gf_s=wƔ_=s3y3sOvF&JFDO^B}iqם |ͺ߼uڑU$|"^CQklKя^epxhX{,IF.Zv|s??ܘxK.9:o@tBkcL/3\a=AXhnHT$ZLLI@ /mO"BWz?v.|=Fk @n!R(?F5l4yXh q"1whm/Zq.ID:H Lq1"Y(욃>`9Kz& $f`+ ̤WU+q$bL@ i`)`XvR=f/8h4kU:KԗN1͛0hdfXBLiԫTiz>U1g-sxv0d |[oa6[/235E>ѐ6+1}ɥ9RE(j ZZ\} @DPIĘsāMח8,3CV_B00OsEG1`9WL6i!M= K81^_m;3k5 ;װyQJt,JkDDxDDeer~,} ^Uk-N1 O _z!c7lcbE#14t%ʻ}lp+HĹ 1`M y&܋{S1]W~%,@X6۴'~]1_+ثP|lYg-^X0Z#6WvHcAkݓֲHҮ Eh!HjWmW[sՆN?`=AJv DRPZ{~ wB_ĝy=_gNr4#ۯd &FYi=|0~ULM.5^K9$IZkyUɴ6]ļ44$IrOp,uT555DdEvsL?FÛԗfr ?Õ˯q lΣ3j˲=CggK2:.ul٭lzN,}C>K&j^vo>y>| =ϳ1ߎǗ#3<>L\ xJKes~߾}75"Rx܊Z2[ eף ln8T,F bbgӻGUږ5<i Vb17"ظO9o%U0&֬o|51c̜b6`k0O_CKo 9*k׳1Rg0 @SSST iHzݺMMMs29qGqO $,k尜v};1LMM%Z`i >55wNj.J)6ǒ3K@5r0 C{ӦM3 bkkncţ϶mc9̎\4C@pf|g[9SH(XvnIENDB`ares-126/hiro/resource/icon@2x/device/000077500000000000000000000000001415063341600176525ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/device/clock.png000066400000000000000000000045371415063341600214640ustar00rootroot00000000000000PNG  IHDR szzsBIT|d IDATXil\s,{۱'! JR J#J[ DE*ZPUAND)U"Z5FP!dqb8v}v{ 'ʼRnGAssuOr/hnPqwVQuN|V7Ѓgʆ 愙Y 2 RRb-4-c.CQYv㦛1*`ϛ{t&:x޾ u۲= @UUq])Ao?=4lug-BsL1冪( f*4MSW"t/EQo y$ ֭]g~Sw>Hk}!Sm$<~s2\TEeYx< r˭8qxc7H@4M#Oc|!e?2e{R<'J;VIvzp8<̉7}m@$D2J!zR$Y\qB W^^+HdN}B=DT:+37if@*nڪFXy(Ϲ4?I:$ _LA8\śȑ4}<;cܒ?9u$?H3/Qpu9rN>ڽwқOg~Aa z;mrK{ >{ʱb%\ˈV@Q "dws;{il[8gOڻ$`gU޶`3oA ȤLRXV۲A膎 V191`_oa2rȔLm5hV%P)^oj7|e^]͚+ha˶(X㩌̤Xtzws `/A$JNȹ`5CONUUKqPeRM7t m%3ɮwOr'l)ǁ)vC@|(d0jdjf;]| ]Կ0zItpjf]w/RIENDB`ares-126/hiro/resource/icon@2x/device/display.png000066400000000000000000000030741415063341600220310ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXWKcGVuv7&- tÂ$hDfeX/dCHH l?!!#DLF0QixI?jnU:CF#哎ԭ9=j3 ʔ7n<~p?13D4љ !τ}Owvv^#~mkڵ/|7S97>Ϗ Տ^o_&! b3 x,u(@η߻s( 9EiᱫL,ig|2:fמނ+J3u䤏`<!0O^c { R#4[#u pI{w%XcG *|/)p˸teZGX8~B$'0- 8>{{XY`KfT*E!ctS7a$s"5wqaA\ AT*f ??JZ] yɀqP?B\1p@Lhu8(mϜN(ıB:L`$)  xBD1 #ec @ 9#C i?(C)fsGVr~ .B)AB^3o kcf0Dhz OBDJ)YJJIM".j3K/\~򩧟Z{sxo+s=_?;;j: UjT,g|Tz/ĥRf?UX__G\6`u܏`4#IVsjrҷ6i66d"PwwV !Ӟ|tx[fp(S69#[ݽ?_ظsKWVWW.q<3;nnwNOvM d du+´4 YzROHI8"[SD22Y)}:Y2 iS=`=Lg‚6϶OSTMiIENDB`ares-126/hiro/resource/icon@2x/device/joypad.png000066400000000000000000000026761415063341600216610ustar00rootroot00000000000000PNG  IHDR szzsBIT|duIDATX_h?WZYzklU5BJKb8[yy * %9K}(y<5BJC8V1jǑ;3}oD`؝|ߝ̮!Zjt]!ěJNDɏ;ˌ%3[RF.ǫ ^)^zJ!?O%!XAfz0!a/JgΜt3F'֯lHFwlBWJWޥO~~ZYΎ#]DaeXJ?ﳻ1Zd7QeRWR&P4"V(tDĸԾA#FJFp=6BQxzCqRD~!?*o} m;PAא.NBL>y#mx"w|dR|YΎ< 8b ].A6K155N:$-uC< NL&j,GڝGy]:͍: N8R(<uRR*T*TՍ~~zrZ]E>RJl&Ja[nEkR]ӧ?=w@bU>w^oZk!fiǡZb6}}}IEܻw9 \u(bppphtt .J###$ZI8w2;; 333!KKKIOOOG):t0^]30::LX%CgYi&8ZJR )IzΝ;ٲerd0D^O_mX32 )JW(9!ZF@U !m4[Ih&]]]veD,Bkɓ'Ӿ{azw7Ap~FlۦET3R ð-"lfϞ=.]z27~Yu yEnݺj5:Q!lI1a8KKKa6Zk|g߾}N:e-ܾ}5?ξ͹Āq~[?ڼo֣(bǎd2ÇիWmk5(OT*xzL62f W&و\-/6AXl2rmNX !6MIׯw[+cccqFim;[hŕRH)۰E+WB qjbbwBBJysyy Y{cfxů15`sj|}I"C&qӒIENDB`ares-126/hiro/resource/icon@2x/device/keyboard.png000066400000000000000000000021261415063341600221610ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXkUǿޙMҺIF5i4 ZS ECQ )<$E0A1PŽ>C⃐n%PڸMu&{ݤ)4!V0_̹;|mRF u cK?ǫ(./ZZ3TCukhL q>畕d2CCC;_x<.magn7iB@ !$J}+?=J)]rKu|]}>[|Px~:J' aI)j5R@`HkE,a3${ޗn K$:+]@\x 61`x+ TIl޼ֆǏxZ[[zQSSMۋ tttf8٢lFMM ocBPU/_\.6lχTWWݻM#m N:9`yCee%8DQiD"@__&&&irssv`XqܹO8vX #GbFGG{n`ڵ|(//GSSEA~~>F7o>+'Ol6l6,#77$ 1b1<{ D<zQVVUUq5Ԕ̋9UPP \~.]E dW\A8Fgg'0Fc0]E3PWWgp@/^ӧOۋBTTT`͚5p8yKiXVݺuk?d2<@2Dvv6jkk0zzz0::i# a[|ݻ/,!%Iw^1  ><֭[ǃ*ȲY\z-|Q]GEa12|>PJq!xv; AR>@? //PhaQJzjC4##AU'Ge7jiigggr`Z!{˅ OD)=ب466mmmep\lE|}RpHۥ>lݴiS}2 577ѣG;w@)eǑ,`0|R'CCC[ ࣗҚkk6 *1j*~/$I7s @k}4r޷K]r!y/҆a|8:2.xFvfE&G)BPZKJֈ?r471xY%5vnn^={3~/]-fff'_ !_H)x񢨷& x}|(OGUU,tl6T`D2{UB;w7=l61tڵr266V˲~ Y'N$)#HRʔuΝ"ȕUBW~@իWׯ__R~q&4Mk>8sަN:`0p8cǎٳgrzz<77RJoض[n&''7B>.eXrYEyٳk]|9^;!>|8GJTUE a T*אR4Mu]PJ1<<>|ɓ7n'?R)BÇmۆ_@ Kypǁi8rHvBCǁRJ!FA <!hkkֲ,R)- FL&iZg4Bs9(RT*H$RR²,tuu160::nRzR1VgAUU*.c 1|NCj6<88۶ 9  `pp.\!4Ața&߲#w rlݤX,¶m$ PJv@P@kk+t]V0 nJ)EJכ<~xi6!:\ׅy(x< "4MmۈDb~n^ y&fBh,;^Ʉl_{ck<0cmO<&G>zd|_` ?VȾr/fSs:N6kJ D=u#"EDD bk-k9qBs_o/3/\Q<%( 5" aP_'v(_-Rx(e>`u@RBQX . 1 T"GJ=`"`֚_;4()f PjѶC Ý]](a@ڵfr2J G*mj HЌ ᅵvRi?2jՌ8}XqҔqn㩡a^ٹ5kc8Äk#3 q6P"f B 0h;6_܂\;*a&Ʉ>Z4VY(:.dFJajZƵX}[i1d2Y(?+8OغT*u7Q~ 1P\9dZMw} zL" R!PjӧO|rw@dc/qbs辻Ꮈߴb4 / 1w b{(Y ?&IyUuU9T-׀͍FSS ˒fd\)dK-E%矻'0qq//5L&۟@<fIl90˖.ҥbpo$ۻ-}l  R"KUV8äR)8N!ZЉW}"-mֳ$24ּL6ތφ]YuQTpבRǿqΟIENDB`ares-126/hiro/resource/icon@2x/device/optical.png000066400000000000000000000024721415063341600220200ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXMkW;3Fm81J1Bdg1I: 6n ?q@ EC8El#![3sdl5]B_t99GwY"877w$0FX,~}޽/'Oׯ_hR `q\)8ѥ?P(tqrSSSJ%,BcXY R'&&ѨSpT';m$IFGG_|x7 jGz|>pm_x<>dVA~,b||H$2`vh4͙f)ehOviLNNloorI*ʁyPz'N  pҥGFF&mkKD J144tP(i/^V8ήZrVhp)MJ.EMӴϳ,j)~ձm\.a ѣs)!f{H)㌏z>؂+gϞ:"NհmӧO t:M^*n[VVűcPJ{H$ѣGmN/-۶V+8{ۂvT*nܸC_u&''w<BB)^SÇ>iJ)z{{㻪qMP866H)}(۶FA&appZCHӻi8B,"Hw0@.ٳgH)9|0ia`Y4LbY_FA" Rׯ^b #1FIܹsai0 v:RbH\FJix˲hZeVVVCut]$5ԟ<d2 "\p0,Hgl6B`rwL&b~?8O^PR黥ou]O{$I޼yC>gttԷ7wkMӐRcVWWy J]׉D"!Rmll|;G~v^ v=f6pff\6SӃiAU)EVX,/nիW ; TI ؑORԔiК*Wէkkkݿ׍-7T:@(d4 ;+HwW%-TBx-2\}wxq濡Q-˲ IENDB`ares-126/hiro/resource/icon@2x/device/printer.png000066400000000000000000000016251415063341600220470ustar00rootroot00000000000000PNG  IHDR szzsBIT|dLIDATXO$U]c,`ee+0NIFYmc" ,\s,]Cxdbu=v=q=] _ν}}[U*]Z=r(4_ZZz|UPo5u^@gD$pxxHc4cc\.Vލ `llƉD-®uLoOxG䝠-ޞ;A[vvvZ[P&\.fѴfܯT*W$8p?<<ܾOgNOO999L']ܜ~G7r‚o[*_M4~) 8CXöVVVH4M|ffM˲mDA* LOOU$P((ڲ 2ɓǍ6*y%"088xN&cb6JHXU:j~A)켌|` PA8yc0L_e;ϋTHv9>?+{'GLJB3I&fҘft:n2fMٳ߀ڭ݌Kw-~0t&N15XC(AIWa}5"KTl%^F /A}{vvvR JD5|i\*iZ؀UxR|[,~ml\M(J?D] Džl'"zqkk8? ӡ;@`'Y^8 \'@)mhn B!.ͧĿYn7hIENDB`ares-126/hiro/resource/icon@2x/device/speaker.png000066400000000000000000000034761415063341600220240ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXmTW{;/23˲ah6TشQRc/1Q11i~~0M&BLmԚl R ]fwٷٙrvP<朜yN%߆.`>m u}_-&h͵شi#uu)Ky CCc"!O}CGOO\cw|?ξq5D];۶8BVkuyVruGʷw(֑kkO~ *5m458PWŗ^OuD3Ǿ}d*8BV˕1# sW$D +iOc`ǣBġܟxaaνown{ b ۓ ̇zpU{댎r{.S^(#?QeK91, !%x & spH|{Ͼt]{~<gjRlģ[:{rQ'ղeT+U([8=8DbӺ,[IR(BOƼ2W-Νb]f~~Hk֮Yv8Wtb6M"@:@R0 f޶->;;Ga--.i]嫗:čhL7Τ$T( 1={(m!):ă5X@kM&TRm[i:;;dyrd4R UG)U.;@" D RjC_9-QJdhiicu;FR-B[LGh4BJBŒp'a5@SsSEiCFS*-vGqnJ9XV#hjab) B eYss+-x*Je8NI$F1F`+{݄8N c BJؖER^Qʹ[cJDdM c~ЮBJI204T [YdY:Va$ 'FRpTu+\}d"E,bLk;rєmFvȥm uq R0>9I6J8 9adG3hyk+RZ,P$)Ƙc Q}0 Z0>1?HKWNhA'~z{fMq:&i/+BM'˕/hdd|}C ॗy\nR@qDRauden9Q:gk`"4F\{zGv!^2xkYV{XqᭋtsF3;3ϥKA[7t5 l>^8,yVsX%L=bKVڜmneYrEn9w]C&FJ|+hB[Nxvf n1w,nݰA/}Ėv&zShBs;~7$cZ271@b*@u]_݊-榸%39IENDB`ares-126/hiro/resource/icon@2x/device/storage.png000066400000000000000000000022031415063341600220210ustar00rootroot00000000000000PNG  IHDR szzsBIT|d:IDATXoG j T(mA H""BDI*(z˭rg=s?@/p+\!$cٻJ+3;G4{{PXR:51R*M?0ѣGZwRonݺ866qÇ;88xNw):N B x+дJ988&7&ovmmmVJIE;XrBvT*1ZΕQIiJ0 lAkc RJ\׵mq$ ApU1?7q@ZmXv0*8A1'OĉkrK))T** ~*}WJqEWk}B\^^& C:]EQDݦ롔QVj5J^vM6y͡beeuKWx%Zk{2nAEcyΫoA֚ӧO>'PLdڍ> P rtC#?&>` |>IENDB`ares-126/hiro/resource/icon@2x/edit/000077500000000000000000000000001415063341600173405ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/edit/clear.png000066400000000000000000000032221415063341600211330ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIIDATX}l]u9vm׭vٱ=̈dVS6j1bD F 2@c1D]]DCW>޶❔tv7wrr9s~})d}hf7G0G%![mk\&ov#7=Ef.ҕKf?r(FIEqaV3p`Wx1;ssM|9X39*kVz=-R8 4|[]F 7Ϛ/)>i2 M3|һnֺ#t={㧓sNJCS2TUٜ;0;;϶N|;5n33N:V!b+`Az%2N.cs僖K7ߺ^=@_p8PU}aN4# Njʆ_[ƞ9X` d jCti=|0gt^6}a~ )a޲(pbZ[?0mQ48"}8knV/~8GmaLκ6īx p.SRD|ܶ]XXdsA\#0jYȸ x wcz!>nE1 f'}4F t VZglvӈeǰ9°!OQ }/f@Ѱ<Ѹ@ SJ&Pѳ~-A,^(.1j̥6mLq5\*GR3T5F %nHArvXMW=V.9Ok`W3qCUAdtuAHbh94JV3yylG_5 ӉHV줒 2AJʋ<^1 f&uRrz x+#uCB":ER(*qT#GR(e5k~oZ pZN45EN(Jd8 ۸sl2Ֆ6&}l:B`|(_;0Z):^OZҾﱹy O&F<9T̩hO)ywm)h.B)Qk` Xt!bjS\1k]@!49)IENDB`ares-126/hiro/resource/icon@2x/edit/copy.png000066400000000000000000000013231415063341600210170ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX͗MkAxI~dA=-F'KтxWR-ţjU!I٤K^f<,;􁐙<8h1˅MY54fByv3/j(ES|>O=t%ʩDF5ոaPV%{˫ p`iiIy "%" a0Y"*Y!"OXqBT*AeIe tС( Dsev`px(@&,T),+ L]LjH BSU(HR璂~9BxHZ_H"D0n~$?T), DM c'a)iƘia IbJ{"~{b`{ fPi&"<|iLp4D>.k*q`n9We7;{7  I*c@O{a=?\I ڵJXup1 `6}9Y.W& TD"i҇1!}3?NP]zo.'[F񩤰nߵ1v0擕յiט{VT MIENDB`ares-126/hiro/resource/icon@2x/edit/cut.png000066400000000000000000000040471415063341600206460ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX{lǿ3;ww;M b40U$-U*"l7D@CMTJ64QԪ"`@0X6=vwf9dvl?]ff &ٵ0b/Gæ&v֛c9M6EƋ5fr7<^SI^S\V'w,TW\mwY8RJڝ{/}ʯJN55;Tۂ3.;lۓ]dP!$JKK5'SkJeeNW8R"7ap83%߹sg tWn0!Dzz&RL @?oHHiZXUҥĜƜ g6E8'P8@O8BJ CCAA]5SkRBSss٥) oJ-uRuuu?-`S˖L GunZ'*q~ƆÇtUR0Ŧ-$Ph25-5!!|͊S[V/DŽP hjjB %E=nOA]]:۞ʥ-w)%laD&BENi2cR"aE*7e~9XZH5ѯnթDMUU/ PUU.sıp|*=HR@uKrsX|o ! ݾ~SHt{wOg0 ,¼B,(uE"H)ii-^EEQӲk%3^xS0ݓPXgkXp9k}_ ndBL'*e +S\N'] B5?!Mѧ[7n#TQ,WФC(CDzRS^ @ڻHtFavCKw{_R !h z@nS!@ @EiHN~dNAsi $H{9@ngmmlGҎ`3@t[lRr} cÙ99ߜSͺŹv7`Yo% YV̟5K&{zA]Wcb…yӆ$`lE07Pz:1P@H.lC`$WSؖef:|>@OokkͲh`}Z12P7{Nw2SNɌ=3 gL۰r .LIJ1W~>>2bL]?K?{4HWIENDB`ares-126/hiro/resource/icon@2x/edit/delete.png000066400000000000000000000040011415063341600213030ustar00rootroot00000000000000PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<IDATXW[]Wuۗ9sfN3$M&Ѧ R-xy*} R+} ->ւh*AHiSۦA3Ld.͙9s}u߇ 3әPeֿBmx(C"Rʙo;;o#PJFU`l?z0"fF3_Ms "h`fcŶ&{{ z\ Q k-fggeٶ"yFFF+O;gxZ<=6&8w=}m ODӹ:Nf_wn?8F[crC6^g]f.v3ϝnx:[ND@s։{vt>'_..1sFM(X9!7=|= 3;rFIENDB`ares-126/hiro/resource/icon@2x/edit/find.png000066400000000000000000000031441415063341600207700ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXmh[^]ٖ7َ_j`[RҒMIf4Qؗ 01ePɖt]^x mΛ_f/8NHeɺ{!)v¾큇sAiJß1<4}/ܲf|Vnfx3~V:B21H}{9j'o[KU@)PXBޡu|Z'uouu󝷿Dvr)N S,sQL q;?ā0_}%r|AƁݍwŴž}/'!m{Ť{vos{ÁhNMrQS?4ĶۙGJ%Ⱦ (2/7f "M CZDZ`CT[,3Tϕ\u7e az~ SϰLk E I Kw-r{0t$@y&MsbH`ˢġ9q]L PYI34m'#  N#K* ̭UWW*}}]= /?wPeraFZ1 ~sss՗xloD68+$2** ز`G7CLMMH$n\RѦMܸq(羽w~!#3<꣺B0,F兩n"m5%IϹzcc /Auv2@"6>'m \l{&thNgΜYb!Rz1MVVҌ{*vCs:1I,O?PDQ4Mc|b1,ŋE=j_p(@4Eav6(3wI.'~p8B=LϹ_PQQA0n0??dv>ʵkWL>{Ote5^=A_rUv|8P`]s.8R>EQmx<z\ܿ%]IR,//L&I$$ 8TGbs۳,FZ67 vzzGNS k`)FU¥K;vVw X}Psj W ?Nj>dsuueV"4u2naa۶Τ!"!Y9uEqۏ$\*B2STJ,>j` 8X4(X(<( 7ZMG3-s8-J ރbvЩ-f&/ً `!B;!@2  oсlۦP(D`gSoD`Xbó6 /ޡe zH*/l&^*@G.BK6hMO> R8]g6@)5fa LϽ :NI >+8g/^۫qh5[RV \W!Nv6砃;Fۙn (fgN5zxڽt7mTe~~Ev$ˀdvBOuIYX6;Xnw D?y|M@)CP `Ht_{#Q{M0u<:,G<@ oUEIENDB`ares-126/hiro/resource/icon@2x/edit/redo.png000066400000000000000000000027361415063341600210070ustar00rootroot00000000000000PNG  IHDR szzsBIT|dtEXtSoftwarewww.inkscape.org<pIDATXŖ[lUߙٝݶR)޸GBT MVcFYD|GQLLKb$5ATB@*ZJwv/s;nn|9̜93Aqx|ڗvܳB~PpUB)O+yX<sY:h9]@ڪze/ *Fn,Rǧ5" <_Ϫ7r5.mmǧh WYf. لrbgO[MfWkO(<9|RMH6a ȃ{f(p%69mOsg- _vW-D B0L)08 lf1;XTrYEoe^=tVN,{lC5:&$[H։'EMҵt\{WO0ԩV/|tGWkTB0nm6OԔr$d '4-X§Uŵݠ> ?${0w$(q@ qnoѿHd ۣX Rf@!Gy0dP98rJmglij@tHMZ|G;X99'@Dw s4ɍKSFPHiQl:ysKoOm:H)ʁƑΎ`aq(|Dpr&wN AMȤ>ND$aJ(i[XtlCN @id6aO$pj{EU_c΋MW0%3(4vz9s;7N tYf<ȔK63ۓ>H2܆D$3!QPuQ݊JW'Dҥ,f@e։U?V!R%lf'$ˤ eS|LI8gMI5Mۼk׮_I}I0MM<?8@0 <0tv;99.#''ILPz$|h(ǭQ]S** 't:YY߀ `.Y,˚ dρ.p  w41ާ| lٲ9_ cl~!DyCpU9y`%,1s𸟿'nq----ٴq֯&pvn" so- ;.cgCC1uɓ)%4T;l9/QC׃;ANÁ+IEia6y)֬^C8<ʊ+(//aR䭟O4 KQWWGM5,,@QUFphwEK&dff='Գ[> 29aG=0mX)oUj->Ehl ]vH2V6dI)i_.@lh!;Ym*uuu’8z|BNn$ E,.,Ae$IBQΝa(8'>YTW9sd_ yz!Ě˗GF+$UVx< ff!2Qm-חPPq?əx6<oR`d_RZJ'TWՒ]D<GeE0P%c~|ݍ7dr Hct&(`J, Yljmm]ϑ, EQp:N]]$zu5ظ29pT OjGdYu ۂ@MD^npIPU˅i|>LD$"#|w;kĘ 05|FۀLaz+\la92e=I#qr(AװG^~-p!ޖRcv8ǖ~!9'д'#p++d4roRY ]7%;3X 8. Վw>vP9AD|J_}vTϯ }5If6 qs{1v.jD]{ѥO-k^ ӠYT1Tf#>Wsq<g`oD6  Q&\0jC` 죈SK}27h&}qZI֦Mo^@OM/ ULo|/\A>S~7jE3=bml)|>cG^6Ԣ&& &j,pP Ac" 6̟Ϗu{ G_^xE"*~04H f CbD?e2{[ꐕ`cD?|xASDjwA3h09qOAYv=\WlkwNزY!XwdWŞ߸܂'Ѕ{?:{/cu}VSV5Ț {HJ%7|X놭e^|]ک"vdew<.1|KgPn©X7xC>BBXU3v|6* 5pu-311Η2_]v&!T%Vuf}MǿngG*ڀqmf[d8/e@¨I@#-Ϟ9 fJۅrv~BdUjf vvy̓?[|#mܨI]≄ 36 @&[#cgSඈX0{i "e$FYi:"B@8Hz@(+g}j,A<J/*lD""P9y"D>лp~4ՖW#H<̏&[E\(I$¹|}m!71b́DŽLnԨvn_V3gڦ#uT*FG:N*fU59 Og.}ՕQ$s͝t P87Wՠ0v]* D`**85w5q-u,}b1į^Jhu?5XU]Sx+ᕷQY{3gH&q"A- tRqqo5P$}-,=P3@~YxnGXtS@P T`JaIENDB`ares-126/hiro/resource/icon@2x/emblem/000077500000000000000000000000001415063341600176545ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/emblem/archive.png000066400000000000000000000020531415063341600220030ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX_U?ffgXf(1$D YT z,Y7 %*Tԥ e383߽=uVs9f1;Z/?x3 k<;KF-rYyƎD`ߖ%~:skRmDQ ?LL P: u/qъ}sWu jMe+:[-C ug&NpQӂтL'-d{]8ׅFsE˶T+]$]ݶzBX +(%DP 5/.OOrSNj˯zA3bUxa^2,濻'ݳz/,Yp.\dEv"_}E\x& lUDod͕b~EИyjDcb^) uq"^EJ/8;93  ݿ=7tǍ*b`_wCbQuQDy4F5v3ΈĶ.o(x~OVp v7mtc nF|:|mgw fL%8v^ݒ&JLB H6d%(m u!7܌6~( {FNgK&ÃtM:AQ`tΔYQ_r >jTM8Hu  U]#>;r{K?x|رSmNZmjD7h5*)3tݧsıOZDv(E\{v탋Hez?to;;is>D6X]L~kCV+7(dQDo}whɝ(g_{1?^:yk-+? wgsi<+"BoLo>}5jKnZ]'?{w?rL#UT4~W_D@O QU]w9 W›Ϳ>`Sҷz m_p?ڞ<0L+Z"ڈgtCc 7iPlRkGiH k&vS,'&kSq8IIDo&r헞 d7CRnv}0"IENDB`ares-126/hiro/resource/icon@2x/emblem/binary.png000066400000000000000000000032131415063341600216450ustar00rootroot00000000000000PNG  IHDR szzsBIT|dBIDATXsTUǿwNҷ;ktHЀ hʒOS֤4> >X5%fE :AQB;[ol`!I{nbgVꜪ{|WuvtwjL%^ꋿ}$kg~^ CڇmǺN<:Ic缾X8FϸOvtwjC>;-(UD[vtwӅW^{E*+7iYzf§ǒض@[G8zi閧ůA C04߁]0[,< q7utŸ^K--Mvp^+ic 9oGCSےx@[G1p!iϞfD@,DK8dd[J-P<|!TC`|Ufw㘻s[wBH(tRb>~#;>6'g {q%Q9(PaNDvs nv}~h?} L=QpFc&EgGܜ3p{;&IAETp~Awm b4++)pTanaT};@DXLʵƦJݚd dT7kH3طۅ\}}ShO`] &xZGfbQbM Nܽ'®TC(ʃsBm7bmU$rՖC1P]iNDCa;a*VO^g[u$-2? PUPlq:B gm,f?]Noo*`FVk9?zp7dYC*$k()P_WՕiC1 Pf)mr:V_R`DÝS*(@9dQ@nG%"#ܪ08@Ot&P;2<t8jH*2aV Xp * WyxCDӳwdh趟żSPvRjuG"siQ{zӪ9n ߖ@N"hwbɊ*rwXa.)*f"Ғ" ^Oozumtߗ3$@P@Oll<~% M EWR,ch8w{..KW9Fic:[k'bnki:MYٞK|/?~gkn<xN@2DAbf:+U*&rةamƧ'r=7B@QBNB dDd'E+hΛ_0@@-øf1/ s,n5~cHiCRY$h ekq]!nnOÍ1(n׏+?Fx~2M|"IENDB`ares-126/hiro/resource/icon@2x/emblem/file.png000066400000000000000000000024761415063341600213120ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<tEXtTitlePaper SheetstEXtAuthorLapo Calamandreiߑ*'tEXtDescriptionwith a HUGE help from JakubTGIDATXWMk$U=uw:TE2*~?.DGpFw "#(1a BD4BV:(0SޫWIg(ϹQB0xGz7QߩS3_JԥۗB@ܼ㟯pώ?nmm@K/9}9 UAPRA(RA*^#M$c~v~'x@UUUATP2'\*nhO>7B+IOV_@F&`mDEIA-&F{2+ Xk+W8C3ސ1uXU{pi& '&INY(UO0aъYIGr)`Dm~80ބ_bvƤTP3n($ vwwk"Eq=#8LnJo1ѪO8IWHAtCܣY!fvuu5uHDX/; ۫w՗R0kY|6_V.X{w3hhD#;MLimPGHI?( hKsIENDB`ares-126/hiro/resource/icon@2x/emblem/folder-open.png000066400000000000000000000022401415063341600225720ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX͗͋EڙEG䔣 ݋O9- TrHBE'QE0 &擝z0l+ /tu_EUU0#8T@p…0Eu08Ǘ.] rSZg%IBQ{&DUyf˗ IENDB`ares-126/hiro/resource/icon@2x/emblem/folder-template.png000066400000000000000000000014041415063341600234450ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATX헱nAݽ$+}\ӥxʴIYFLMd!FQ ޻H.rc3`-n4Y%"O_hxq}g$"x]VDJꓕٓN;AZ@R*Z(JN)59p@^/W*OLǝьИY^nll|SIZ)X,bmR"J9NOO-|O.1fh fZW677cYj`a3G"&s0͌@@]̉ <@$>@JDhCH@ɊE(wޗ{:wrR(Kvvvy~<3" C^k_nܸ+~6ƼwBZÇ\@[J坛7oIZ 0?;wѣG+PJejtp-5!Gh,ĥKc֞ \̄jZ?<aTnH(sd<TZeDKȍE-n/D[ZT J>D%T/l,4> SzQJ  cѿBS^/| 6kd%5J_<^TR N R8ݝ;>3$!J WToV)iR $UziU*$AX;XhbggDbpdDC$v- xxQˡLgX?515k`mZt8)\ȍ1*Kky>:a[BH `|S@ 0 ,-27+IENDB`ares-126/hiro/resource/icon@2x/emblem/font.png000066400000000000000000000021411415063341600213260ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXŗoE?!΃<".Dk˱ڼ[O7ΤJS+8c;U(BB*Z)-i^NqwcǏة ?i473 s5-s DZ"7x|IKGq["%#.St-(Zk(PJyn88ضm[XeYu^ 6V{}#y4v!Xţt"d!FDH$"DEALNMIk](JR'⺮#8ض%mebYfNL3'\VrdDऌ-Rq{JU1 u<>毒rÝ n(.2P@;wYqхU hOXSW't!iŕl-.kՌS&^7u^Odhoi]mἁm*ו{S|#RG[w|Zi#"uZeUΣ#cgL[msހ3arb;5N\/67ThQZeH۰>K& K^z+Y@0e|kMe%ӌ VR+,'<@;{CȋU{۬m;3|#M2> i"^T݈Dɹ7 AKQJhhK-VK[L~ə뙳/ˇImCA^}{7^Ź>xߝf-"xhpNNuNv.&Ja ϥ=8voLԫ\DH,lu~H'P $\{}|}^T*@9 iG_;[A) P:H.86D+@aZ=˩FV]]=#5]<ЭL:HJ-o{ 6"IeO^^* kn,LHro!K\6wt4A6qi6YAìy$7: mOP:BQ!TȌlɤnbi_FWI'e Betnz:sl:E/1t$pS#$Ą2"1KҿMvy]aH2Bq" "!?z}uiET֗9.c-Hy.0@kMP bAGuPG8gTKDi`L*vzsc,Ze<aL-9hFRp|qok-Au;C4[+k+9wf@)ŗ_;w/cZxժk̜319};9y0]]^x܅F ^r~AR\~pff~ ԁ -NK 7</?nײIENDB`ares-126/hiro/resource/icon@2x/emblem/markup.png000066400000000000000000000033371415063341600216670ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX[lW3ޫ^{}8I]N5 !OEa DE@ЂJ6B`ZMۑ/:g;3;s!^N%9}n3g|rAIE۶,PL,<[i'sm O:\c&. q֌+no}@,C,"#y:r\h '[_/G۶8-v455Ux$D|ܶ*imm+`Y֚ U8 DB{ r.Hc)@^RI899eYۖ]$ βƹ9 @hd:;#O®5bbbs퍛}I=7CMȏ1+ #5GB}p}d[eAX&,R':g|r߾ttni=ѣGO?~UUqp8 % ^),d<9ty[wאs$4E!(y.:[`h``wvf?qO¶6 GlF??Il6T姾@^ZSUۀOȁ_q{47NP̦'WIŋg`= ܏n K²s.>{׋(|1* 7U̡{4׮Qùra'pbϖ1>C֕AZzLJ8,n18ݫ7V7l#I_XHopX%["Tpxކi^}450tc 5142ISS5ђ hf=Ԅ*0]d 9%dѳ&Z@ |A'vqvVT9rl6[PL |YMH$Dl94 A^4Fna jXPTs<$I\4q0 LIh|gp$t]2fH)D%C8.M!FQH}u ,gEYLjb:&̠*t/^#gfnQU N/<[S闘ƣXwbI*+NJՑ>EeE!1`zvӦ :4**R!W,hF6% ˲ ANg0sR3 U1WWkmRsQzX\\$H뾳$r>Fbnd2I|)EEM37)i{lfdνzed9br&fI:IE#U",!OAoeqEQǩBE WN<}d{[bd7s x42k,_{p\,vwwhii1L\.hIC.vF!?öYe!bn|,F2;;{ a Jᾰn|(zuzC;]0-;KGm;'wI`P+7]u:>W'4@Yu݈ zeIENDB`ares-126/hiro/resource/icon@2x/emblem/program.png000066400000000000000000000027221415063341600220340ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX[l盛|Yq QR42[5ԄT(R՗HDQlJyzQ}BB[%AR (I 7p:1}f>x찶O˜sO^tf/[﵆q؟ ZL/[gvj᏷gɴ5: jaL?62ܭ89_+obP{_fE_|jہl/;0oӋ DB&{ir{|ˁl/;0o|.@kܛA"ތ9>LE%k՞Ӂ@\lVJ@DD]P˯6O\N@$~S@8kA4~ϧ^:Hn.9] l?UDs?3( D)+GoN v_Ot52" A)cF [Bө%xۯ[B1DP}RieAK-%۶d+dz?luMHSuo/\IkOa/^=Hq@qllG)9K(Pf)l5͈HB"ɩGYaXUX( QYL-d /͞(iZQE(;sG~Hܰ,X1L-8 څi#H 3Euo D^zܼt&=ZY݈Z$:PST!'?QKDdzنȁbZO5߸DbnFƃqDX8v%Ik4 !A;mkVT @(N~1j;X҅5hz; PШyK-]v-7/B&fZQ'׾s@x/AcS'ǨkG8^kASװ`סGO!>/26NKB֒.PA!sl;UV~Ӷ;N(`U㍜+M]Ϳ5gU TίbU\Hemfs'np4H4P|ܿR 3\vsߑE_.XI!J}aG/s,&^P[ZXD/Zgnu[ZԷ⏜8gA Qk `fPrHWVLڠoJoY'1Ѹe0cƿY3Ϟ;B("lv,Ê, gD!-|ay6GS/>3;qr_w?k GIENDB`ares-126/hiro/resource/icon@2x/emblem/script.png000066400000000000000000000026101415063341600216650ustar00rootroot00000000000000PNG  IHDR szzbKGD pHYs B(xtIME +3ϑJIDATXkSYcLo{h6Q( TE\? ҅ EBqaҝBȈb\b n tD:~&cӹ7wIf5O&add/J0M_"PD+{*"H0;;ݻwU$6n_YY!Jq|躎!mC àr6^?~L>GUU B> GA__RJ%4QO&VRۋ8|۶Fb1('N`ݘɹs$7 +IR\py VׯD"9B$aǎ(J(byy711Q~ 7 kN"͛ m6AxMӪ][QsUUJՍco۵kܿ'O hFT ܛKܸqCRd2KMs|2333b1VWWyO>eϞ=u^{7Z `bbt:MWWRSN|{*I:vMՁf$!pnݺBpct:d*R%8ü{bX!ccchHWUuqB@`0iڊiP,BpyfffP(( ;w댌 ˡ(J hf:qرh4: 4LsmDCJo߾Ų,TUEJY|ϟ? XJ^> hBv@4Mo/wkwԩ "` |>Nˋ +\RnU&'/"q`U*IENDB`ares-126/hiro/resource/icon@2x/emblem/text.png000066400000000000000000000013501415063341600213450ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXMj13Rܖb(M+N c5zt]m]y z, ] M;uk5_na$~i$n;0J)G@]AqR*(Jv;o h4dǓ[⢾iERJ֩~v jJ)YF Au}%@k1ܶȶq jZ,2AZJ 0\!fPJv!n~iAjv"`K 0|E8QJ.$J1ӷ*T`p0l6LV`q n3Eb` ddsDŽ&)pgj ʷBDVft:M9)zjeh_n>35eY vtZE۲-!'}7 X3VURr||\]Qnpe1wV$sf'|H 0 KQZRMk@VT:e>k {,/PSlq,Sxya~Z?o4J)*;6f jwkrԁv-a\~6 x4'=8{+?O7?yľ|I"IENDB`ares-126/hiro/resource/icon@2x/emblem/video.png000066400000000000000000000034051415063341600214720ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX[LS]hA mӂ@ (g&3 bxE'F}3>%!&D#[:@Թ!`@ZYzǥx4kݽ.{s$b ^J'LOO /#تV ~NBB@k2-V`sbbb`1o߾Љ'ċ/Ȉx/ EQZ}h4}4L{۹spM;wx^ JܸqV+=lXw;~V~m˖-"l6dY8 |pN} Ht?~vv6'))IX,tvƍgϞhx^Yvꢵ5tΝ>4`(z@oTYYRUKK pݴhx UUUl68vŅ  t:<O|+ U?-jI%%%Bٳ<2z=*@ K***f^|)#㩩hx LLL4<~xOQQ:S8s ,smNEx<LL̿y%%''䤰ZA\zUlڴ)h6oZ.F$^׋ettk׮( ZCq:?O@$&&>}Q!(//#G 2ddd ICCCܽ{!8pN㡮9Z-FB{q ّQRR"RSSEjjذanba2 4^ゅ-+޾}+D]]h4ׯbnnNdffF@.غu9Ve 33<֬Y8bcc9tqqqHĽ{]8 2]]]455!fQYYɎ;DGG@^^ޟ~E !BgJ-|>Ea *=Jww7WXA_=647738812ZE4QzV]M^q !p8cX~:֭nrrrx5>| {^1ֿH@$I `0߿m۶1;;KZZ*]vqFf_`0a;99IWW[n( ]^iL=[m?@ARR& EQlX,>|HJJJ`0p,`͑yE 2n;_L$;;)<cccFEӧO333 MMMF֫+[Lģl9|0ގb1 \.z{{#E`E(++cxxdf aaNtF@8Z%}gZ ,'ѱTXu ~jY1LD6(j @LxQFGGW%Z*YlXXWCf*"X VBh {H$JX: "|^X}rNh#!+!)ύtq.@xjOn=Ff1k g?ѸDOo:mA[z6R0*h@'^{ZvwS_'ڷ p+ȤkY=E*&W"r=s~Ӊ t8s5^μbeCęWƻ) 650xsw{̘<_B_xxp~"[l%4=3ko}*2捦:.v]:os :8e35jOpV~cS `(QJTuVG:k䔦#go] U`^0i 6~OOX}}~9vԵPf4x:XXPQf6gZbRз  uO^Ŀ5/vmIENDB`ares-126/hiro/resource/icon@2x/go/home.png000066400000000000000000000033561415063341600204650ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX՗ilTwyo6`v0x "G8jP*iJ"ATJOQ.PV)i+5 @bb0`ƈ,7oA۬Y#4ABؓ;X NZ|q[[[)q@Yدԏjkj9Q"%(B,l){B^ohjzzŪUuJJ0ŦRa2`r囙\q/QCwt=cMثԓ55unޮQ x7yhKXuMIp8ڙS~oh^$RZynr.&7,y c Zeԩ3,גFQ { 0]?vA8ԡ9 )߸91~1#Gdpt7 cÓʗdd2dϞY Q q %rY{k̺CJ@)1݌|9##~U_|J)c,c SSSClR:⬔dhDN ɹ--sR}k/,:xĺu8ZFKI켼BDHZ)VMkC70@1. rGY~y<&9|</`^FGyD)R"0}FqN_c#qsH)BܗِǼ^#3?4 )!oǭcN|*5:iSl+Hk-rAV-@kbNYC֭)Gx$59k-[~rnו"}񱊣bǎsI>)<-1ƒ/Xr BTfc{@4Lr [索eÚ?(Ps.0ƀs/ 2_\)Mq;Sձ#P( >y܂f<ܳU۴l+˕z QYkBV5<P>'ͭj%RR( T>P/٬zNz^tu K~;T*Ν;8zcͯ{/!{0`L jKJw&y p d(DJH㵊8PreE_kzIENDB`ares-126/hiro/resource/icon@2x/go/left.png000066400000000000000000000022601415063341600204600ustar00rootroot00000000000000PNG  IHDR szzsBIT|dgIDATXmhU?̊"ôYݩeVكJ SM{^ ^AA7EM0EJEe|u=޻{y۽׭@?tLa FU_้-; NȄ<&V oG޿sK_*S̵%>C- R xRւ0a MP͌Iڊ9KoKlޤoܣu n2 "Ey@|֔@zRTST #bc}+W'網Y$(_|C9A)xAGjC S-m[o$^ZJoD9YY4auXŎF GvUmOO_vSk#Cr~𗀄{4|il5N|he7vnbaͪ?P&uСd$mBR S$Ч>ןv7-q I`H9ybµF{M] /άGp;^>GpMpt2Ab̶.1CŘYttLT6rõu5)cFIENDB`ares-126/hiro/resource/icon@2x/go/right.png000066400000000000000000000023031415063341600206410ustar00rootroot00000000000000PNG  IHDR szzsBIT|dzIDATXhUe?{qd3S ~.(*- C2#( B7#  D#,ei6r*͙S7ڶ{~yw_{=y}mhEQl=wu$O{b{% Zh-r凯}kǓ0nzloZR0p1'p˄JS.Ggjofe,(g0Z$8G*9b|rF [^Z=OAmti}wh,S.hdOdLl$=A-ݺ5 ,^e9H$BfJa &;k4SF?HyMi=I̯ؽS3> ).B,m (Z:NӞ:*glU_.=L3W]|Zx( d#;Nr7YqwsFmYh@"VatxhKJIsh;%m%S||VKkÒ6h Fq< gR?c FC=NGI.Ffw;2 l#"UDftӔ>qXrԮ0?rsIBB-0-g! vkK>ru"OW|1D^ 򡬢=pdA4.|,cҾdA}!/wtlɡx-H@ERF677-߳Z}ETA)ɊXIENDB`ares-126/hiro/resource/icon@2x/go/up.png000066400000000000000000000022511415063341600201520ustar00rootroot00000000000000PNG  IHDR szzsBIT|d`IDATX[lU5{OO{jCXD$JZM1T%DLDD1KO $Q  Q iz93{0rz5>==k ܴ봅;)bn4w=)_*6̼}W~[ -+3-rJ= .?_)vMf&Sl_rg>#0 .lU6LLtb&uk8--NCZ`ĚX~[{SnC:Ѹ=1g֝s "8 !-Xs״es쮉+PQk*]ʲ5'0idOGo#K{?t;JM?P^k/:c3U㿶ӝh5<?CقoNV\:<^1bkX,U-=k`^<&_=meunc ]_s_j:~n %+ }GJw4ڵ_VW/*:]N@U#QQcςg1J@E?{3 `(|~`%5ߐ N5!sHnax-]g\Xm[ۛgݶX玍5liY7hލ5;!1ؙ} $=m8 Q@*5PՁ ?\W~x0[f_p*tg TbAJ^7``PP{;#$䋑P+K_Ə$q\?GB;9wNah~ @ $FZaRKIh$Q:Eya&.] c)MalTfπ+PPoԆ1πg$sH>O m UIQ#:c  022i 4AzGj(VW_?T0R qP554Kgde2&l˂CD3CnPh'Ӵfg<9ioご|~IENDB`ares-126/hiro/resource/icon@2x/media/000077500000000000000000000000001415063341600174725ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/media/back.png000066400000000000000000000023241415063341600211010ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX[lTEs3gK!HL&U$o"@hbbՐvHA}E.xReUbƺ@lS(]텲rr_f~7\2{HJdʜ`$e pAxyBU$,B ]/YR\8{"0+/Oz cs f[SZZT>o~Ƒ#c)Ç3!]{ hтG]xeuD~pX @.,q2|eeOOXIQ)DH&g.7+<OZ `ڿ'*O:BZ~ w݈F#H$$ d2|JpTt[PJ'w6lbKYFc‘0 HܩLɊϭ5]oĞ-[JÑqܸ9 I", .` ι%鴄.wbw B>\ B,$"B&/Ly׮/bx/I^kB#1H.RM-+ ;. vJe(UUqB`FHP?~>Йp9Yy 0 K4-kC}޸}k$pP2JFXº4koھ~<8 lD.`,K)paCU;>k8s=Ua!RuBdOOOw†?U;wny]4Tp!ӈF#Pdv]M958p=@)YRw˕4BiV0AIN$[wW؂&iZ 4MT  gNĘ=a *RoFګSL`jj4KOy?vQ2ƶ͉BWg +AYƼ٪[ ===!ӱ_8a JDQ{WC9DQ(mzsp M[B}~xpc݁/$O ?.\^^{7{ϵL/x8zWοv4L.E ? @l!"Ip8T;05d)Q}p@, yoxoo3fPv#{](²ly0Hs: Q**0-〈8LDVAl@7tt D9+A qqXci Y%OA``"y @ps DQEW?ո\D4u?pU8=.`'c.)d IENDB`ares-126/hiro/resource/icon@2x/media/flash.png000066400000000000000000000024531415063341600213010ustar00rootroot00000000000000PNG  IHDR szzsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org<IDATXŖMlUޙ{,+B&\I"!ĕ &~.Xո(Qd΅.$1UAh"{3s{\׾jf23gsU"iQ#o"ٴ J@4U_w*#JFo^~k-\k%M2) 17nܠ1bقje :C~O^?6ŞsbYz߮WL݂'WOk 4xm}ۆAڂ:"\w3xBxBi?.B /}8'y<< جAܣR?£{8f=ŦԀZJ,H#-..lFx 6MҔJ-(,n+"m/}j/Be4y6"8t q,͒Y c!K$IB;R8Ađ!e)` tJ`mF.qyJҚڌ@wPC1h6% Ű= 'Mqyu%\Qf䭋3_R,1F9(QwmI֒&)3|06#M3@(n%"c(TF0:hiYRw0Dۜ$C [D1b- 1P@RFQe~" ;Me~?`Pw]LW^囟R#UTr"pO7iȇ?*b(Е*YɏC@tmll+@61[H<nFFHҐHe-A8n`P<' "dv"&C]` MeE{`6t _{{/ٳ#IP?дy .|a12]Č?$ mg,DZ% C(" þek-qchH3:1j5(⫯awg z}0 1jq'NK`Y`R/V*0dwg[kXki۹~D)=1(ɍ1 WG@Pmh`4\#(j-6ݖHp/ RGon3;U΃ #^scufϬ}=4@ 8] Axq|1K4xGd-$' 3Of=&n_x]j`%_ft1>GI֥Ǿ<@EKj3?ȰsϏIENDB`ares-126/hiro/resource/icon@2x/media/next.png000066400000000000000000000023111415063341600211530ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX[LUƿ3Ι2]cz@/5\0nj՗FC^H&m4B%%E!MII%5-T]hrۋ ̅ekZ|$g~?|fhEwu5 C{T@X)>]pm75ݨ 5%;)hQEQl-zs!ػoIхW0@`=$I"t H%G&7{K_ܴaÆg<[ߒZZ[=s)õΏޭ {$=P0L86p'vUm#?S9j88`:sx[jjr-[JYڜ )1_f!>C,} M8I hp\8vQ \yeOE>QB=@kI HY4y)#PxJh"G|$@x3шyAAp%P`hg tzv9tF4b|s|;ko} ߋ|y_%"w7o֗e&IRc.)Zy_yV"0}ve5>>JH*j޻w ZCv<Ϗ=XvPJ}}fbb,); (1Xc6all 쬏1>e}~/NNNNڵK.KKKrh!*1hmJƚFR4K"c;]yVG#/<9;;WZz;wc1@8GPaH,uNmeݺu?Ro@7cuwQJdp"G~IYht]bD#8TefHzh=w޴( bh6! .\ĥ%^O١n@X*i;1gO:2R<9 zZk )KR |h(P@ݣ;|ڭ.NUU11~⣏>:6_ڹs!Bk Zb^DD\2kkc|QBڽ.-S%8!05M̊SSS91H b^JCEYʲqShfF&'?/^ZZTS@e!VXkUCRQbt$zOJ<>E)\6>|{ƘCι]$i~zyK NviRXպ;6vc$I4FS_b[o~(,:zg[˻ΑeJ1 .%Day[ˣGp1=ZGd:65XZ}(l4lA?| DT@7PxZ<ZGۧ2#XEY "Y-+391!!DEA!@ $xDcC"Ph."b@4{?z\).]o=֛Q"h-X-RQւ҈6(eր`RJPFdP'#>y>?}ί@h,,, .V}n|1c*B#q >DB5g^}եaW&H`%gϺÇa oz74ru^#`h1Xa3O??p@ 5 [={l߿&;mVozcU.NVsӧO3N_W||#4m~P/hV.,V@Wnn6t1LiڳLt0*] ,\.u8e8N&Y`X HY~N&Y`e o-A,Ḁ<8u]*(p $z—xlfao,K̎#$ }/*p=!*W,,u]^\Y@3$ (3Cf5kcG2MȬW'fM(my~i~$ H:;ιfΜ9H '0IENDB`ares-126/hiro/resource/icon@2x/media/play.png000066400000000000000000000020041415063341600211410ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXOh\Eǿ&MYfw4Cbƞm%5 [$j4-,Z`( ^Z(BfKnm43a76ۘƃœ}w~iOx}=f.-MP2zc?f'OOM}[ZO,.Ο47aa~qN!Qr CCtл " u(%9_CSJ̚沋mGWH)%8g>SL&3k~4c6 rG@(`CR ~S93{"dw}>DZ5@2 CQE0"R Ģ1aT7AX Z[S(LӬTiz X37|Z{Iv]wifffSGXh8sJ( W`;6VV wѱu%HaRmv,ضuy(BH (Fkj, X:cmmm(*b14  PP5&&]q?}3~|>oNOOoz2*DQ"k c Bs LNNxw2?'϶=[0VL-u1c sX]һ~l1|ԩWB人V*]@*  uEógM#IDUQU( D#{.^U |,,=T ÀRC +W.{~sppUet]~Fۙox'n(Wm 7f_x.BUlmzT*`Qa' ob+rRJ)])բ{Oz*|^IENDB`ares-126/hiro/resource/icon@2x/media/record.png000066400000000000000000000023621415063341600214610ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXOLWǿof̲U k"K$" Օ/dI6,=Dr@ҋ=1kcAMctV@K$R 03;_-ݡ?_{y3}?޼7Vloc8 _\[J`@O;^40J)lJK?M?cl<ܶwb;mm`C!PJaP>D5W/f|>߯Ba4777~w3ghss0_- ><(|1pA*r,ϻ:'^Aؑ)Gv z"X\UU4ӄ0=} >$or,; nzh4[*o>u*D8lE4@W u0UZNJ#u~˽ji+Cq@ӀrUt 26~nL$~ ÁMx]F w.ǭj*v;wiGH,Sts÷ʲ<B/<%t!!X:RJoYZe Ȃ&/ܗ9wrq,+ @ Yaym/~ғ1x]]];=}~wog\.^p{ikgXl[Ŗw\w&TU}~@]E{{[P5H4I@(~uEElm(2!`8cY8⪩zl7}f 6ӛ407(Ks: ͗{onj VA4 g| NAt:}0d2577t z/aڑX[A&% C0 ΎꋅO=W>y7 KTVV*v[jXf#e2B`Yvt7GmE|x"Q$IXLN'nom~+FNtWr&34h'#ݷeyk1qyjwV۷bZ2<rcFyDp14±܌wvQes,Ą86h$ HJ=o,g䏏}(Y@@EYJĮg/?9%(J(~PbTR1*tQB u9$AЀ]~vUUR0\ׁivl[soaIlnmme[ C:Ku=7ooT*$BQHX,ˁc€Rlƅ_DLfE+WƦ_!EQ4m.|e󣗗L.P[=7[y.x}v%EQfA¸s/tIR-I|QџLSg+fgm$=iYId29gke%(b E#>JTTDq_BY(}"gIENDB`ares-126/hiro/resource/icon@2x/media/stop.png000066400000000000000000000010731415063341600211660ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATX@Iۓ "DAo XdyۢF/ !s}28餓wE=}/ dO?$O۶xѡ9Gʲ2OӔg/RH3~n:;;@ˑlkM_snDOGS0$IQ"ks7ԶVfAEQ$8&vǦ -ZE1 kh4ڦB!wBhiCCK!MSem E [nQ<";HIY b/DqDDW$FKwX,v*M"H1ؘtG`6aeY&)c; ̘L&LfFAwgP]#ZToja54 I'm3ia;̦z_d6%G$rVۺoƟtI\?;:`oIENDB`ares-126/hiro/resource/icon@2x/place/000077500000000000000000000000001415063341600174775ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/place/bookmarks.png000066400000000000000000000033121415063341600221740ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXŗˏG?U鞞ٗ^YؖlD".<Bp_B.A8 G D (\@BPlߏݵwgw='Kr'Z]U}׿5Mm8:F~cg!կݙhp'{}[!-N/Vhy7zgi`V>Ye\C:)h4)ya석<\eZZ"{[;}HT)oeiV:?8o)p≯ u]zY uVnn6:{3\*C(5Hi,؟TtR RL8n^MmEa$QE`l~$'}vq@%F3[r}ցYJ[5^Mxw"i9/,sU!Wx D:"`EY8P%XBg9gmv%I(Esia)喃seV7(-s)`P9GTbJ̕?Mkq4ZBY =3ej&X;3O6Z;yCKW 6Ø0iF¿IөinT+lMj:7+AOE^`GNMN qP"K"6?p%N"6L8I1C+vL BBf4G&{J@A9Hsgf=+P9bv\ Ͻg^rKT 8uÏh@$d_Z+;!, շGƼ0 P]>|Nch1ZaFkviuي`B*k:E1 CRolW^ck*\`cyL @k5af2Ty5B۟-HlOIENDB`ares-126/hiro/resource/icon@2x/place/desktop.png000066400000000000000000000016161415063341600216620ustar00rootroot00000000000000PNG  IHDR szzsBIT|dEIDATXUKOQf:tJ) RTP)hhx5i##*&¨qZcܸD AO4GqڙNgu1S0`EvKNss=",wpVFxA0CV/_oi*y.i %ٮ=W2C7n9?&7L $Ԭmk΅ݼ#i>,+% z,.{&.c `Ɨ~ tJBElL+ڗ6ysaFH?+*KX'4AQjL0|x! QDUi-<uJ25 k)[Ro[F#Vp8RPEMA"Mjψa״vk||tBHf$K<7+@ `%奜͛7,>5ƼD$/ IJ۷oqZ PϮ;w|{,jO'9; `1݁OU&5lu0,"(yS-_&>dęa8=Q$" J>Xƚ$3dUF4L{L~3ia9X\R(& xx1d] (-RmɭF8jaS~j"A[HOYm 'Edj)a>a K=1alxZ@5ʫqm7K$l|8W@(!I - ДhV=jǃ] (X_ qXt:r-F{NK9=8~yl0 ?|5_]?vqNfNln^Z--$7di|n:aQ@43I$@nU8-"6IENDB`ares-126/hiro/resource/icon@2x/place/server.png000066400000000000000000000015171415063341600215170ustar00rootroot00000000000000PNG  IHDR szzsBIT|dIDATXK$G?=c,qK" z=DL𐃂=!ыg1A={ $2MOMrY'auk\sJ|UWʔ'm?noox[`aaanee}{{+yXF^osss}l6z u]nnnX]]8nggA|+סR֞@k(RmU* WWWdYfB'")Z...5skP;0LfOn`ffJoE"~6@x$+G~LNOOj/--jYV*"m:8yYZ)$QZb֝nR,eׁZ,I8eJ)˲,522D6ggg}'''P"RHuPl0s* R t:i>>>~y^mooYZփayy͠ucZ-2"B}2c*j=99R p]q>DT(6QeYo^)ET23>D頔7j,?[ ܡbYq m@k~Swxr 01a ۣymX럓ÀPK0ʀ, | D з/kj&QIENDB`ares-126/hiro/resource/icon@2x/place/settings.png000066400000000000000000000043001415063341600220420ustar00rootroot00000000000000PNG  IHDR szzsBIT|dwIDATXVml[~ν^_76qXVT@ZGMB?P%Jm?&:$"*1QQTU"TJPkBd-Mm4$sb׾|8)#y}/M'lTU97TUx 7sMw kضw}w͜/Rt: )p3VtOB<{;F!s׻ӿY9OI)QwVRklkt:t,Ϟ=;x:::h4<2 y3FcX?{n۶mtttx]uEQ"v]wHR0 x^R)ɤ7n7oV SoXEQ>T cΝؘ8( 4M!1D"]ֳB[oU-(pGKp/V!DEm㠹s TS MӖ@UU!i À뺕灁7ɜS%S@'˂8PU|RJ]חSB0.8研"L"LfZe`B3CCC" -#4"BJsp!R3)˲˲|Pqga0 |Re!sض;vPEQ,\IJ---Z(B6렔BUU!N:Uojs^ֆ[1VqmB!a-JN-7|377VAWWzj0P[9۶qy˲et]0<߶m0 4N< ])d}A)=3NK)æiHssi&Ŷm(R`xqxx؋/L[='.)G(mHӘccclzzy饗L*l޻w/49ŊOtsՕj8Ϋ_}-[x1qpΡ( "F{W*T}>+ U&!DY`j%1Jb[!!PUiBJJS0:: !Lӄ녦id@^QEi7M3.\ׅ8aB!pq5qGJI*O?1!zu|>|gi92\EGG900#G6vwwe#Gh333of6]‪r8~84MB\ Pe aYRzk}4\x^O$"R7 uL !0;;;D:`!a||b}Yi*(${EQP__Vh>dp]{GJFKq6}bnnN[_O>) CCCw655mmmFkk+BUUD"?x&i|>UUqܹ뺻k,eYJ0Tggg/_ Á۷nF)ݴgöm\pA\r3g XKKsm:tP^xRĉ$I @F__uꔪV FZ+`b_EQ[3Wlh,)Add~g}STJ53r\/zȕ/8-|7ڿ0B_B1A /&eEЌ 8:X cMD k9n6[_IxK #- wOQh.t3 PD ,1rl:n'"b3Dd-3V E~)Fh?!e+0 #+e9jz+tH9] ""(LE34hІ;X7qиA, EDꁆ6s{5vF#0f}Y)EXP8^0D#=!9S#EJQ==!d0sЗ۲ 5DD@cqIpUb:aE$pGz[쮒 lw}nm{a(E(r#|kd+󘞞n?|2PپVQ>!JBtNtibb\>~Ou]7I;Wcccxyg:޽{Q$I<~/c֞QT{G቉ !cFe9`gY3sRꃳg:8x |Oƍ|EQ>99j+|PDƺ |aɓ'FGGqGZcnnN_z^+8$'$"8z>q8AN"&3gOnj')q]m_iJ _1IENDB`ares-126/hiro/resource/icon@2x/prompt/000077500000000000000000000000001415063341600177345ustar00rootroot00000000000000ares-126/hiro/resource/icon@2x/prompt/error.png000066400000000000000000000031551415063341600215770ustar00rootroot00000000000000PNG  IHDR szzsBIT|d$IDATXŗ]lW{gnv N@"/*o}HH!ďPQӢ"2xTIDlk{ٝ3];NW:3g󝟹wC³PhSq~)jJ!KJǒrh)uJӰ?8eF7Jz3H sôk87YpQ)-a_2k-Lu׿"J5VWN78e&+K6s;FB8 EM5{}Ǟ勅)֟n 3R.}{90+kl3>?~֓P@Z_84m]F0JdD%}X&QG>{'dRb!',ucq[> KUĽO|V<7х H Sv F1uZ!:=Ċ0P /1X!V u; 5JnJ)|Gk镰!ˠBێo{T7;6ΟǫV;+!656[J%7[G5*=kCGc6N_.]qJ={:46hs<hKG2=MS*Vۯ ɱ61z\ج[O1[-nDd 2$۲!85![}cxu[󅢸o͡^CC_ޘW./&F䳷E>U`\3SZGDF,#kWxx& `oQP'NӝzG*lE'`Yzoյ)}c`k v0_(Gƿv$朿Rm-:<K9gyoZ[nƒ[}ny{M}8e. QNs0k8Mjr_?nzn{ O>խ|m{1xU b~ymѺSV.Ml,[:wůZp$ 42LNÏH2PٱB*YbxNVA{ukMmYpMpNd  G=0$s݇ <U}_3y੧B 2ܦ&r=j6yg{ZWS]V:4F=tqibV+/z BΘNiش6D9"!7Bٲ_ɹ?|p:3k՚칳 kO㤋7{(iM:41rAA2"D(/PWٜ9sd }ntscړ$HD0N6'KdrFVXxC(NlKslMun? l\U,l)@A9D9#1f2N,3s2U:^Δ}ݧ;߄Z E.É9Ĕd 3RW]cDŠ UV4u(E5S6LsBsal`A O|WT W7]|?Z71e'^Z!͈,8#sA*_Yӝw ""1ֽXESTw -Ze6ld&dh Gz%%̚U˛ZX&<.W67z\#b5D*ϕtN-V쉹9\1qY6b27h@h3 mTr_={jl i]koY昮,'BH%#-Mn\% Cx/Yр}bW^͟o՗u|H6u6 FJ  k_8t=ӆ7ėXXT-gIbL2];ڞ5Qڮ\&yv)sR\e ՆS}ᱯ]{.~rt'VJpb=N}>XJnm{۳cU%/L 8vn5+E:Uuzq;nX籇lAOZ4F#\# [;oС;6ڲنxO.J A>7/xMKY@z?]+= d YvՓ3 z@G"C])8qcSp]{;00ch\G….B[ugrwwӚaL\6ALCX蹏05y\RbPg29|Y q@EpzdNNf;;{essw?6mze;8rdj喝׃jPK Btz㞱Q?Ϗ?~yuT_s%^E Dhooo}g2bM`B`l [՜^PJqˍoMJAXke<z h·!\(OՌ_"8ap$MǟY^:9|O>[O8ΆXm}UOIX~7i<ۍ4$!R )/Zk,(d-WS:'X_},>V|hSep'{K!Lba`)1 iHCr)dҨ,+Jpɖk['>@.7ܒn=ʞaibYnpmƤIe0${E\[15ˊ3}sCC-L V˛vT2di PQ GnV:}aZ?A(V V$lݛr .^eûGw47߼zÐyL,Ϫٜj'.IIa8]0rM x]meʻm<8Ri;@LO(  3? ,ebY&4ؽ#4pk 4Z6[^],9K'A<s4 [q|?5; s{Mi \|?$!m\ttssʢk-n^[C1N 7I0xy,,ٮA)1KI, ƕ>!ŎhU45d*,$4ncY N"`͒TZs?ek֠¥!*K Z/ gN_n=Wrf*2 NsRJc8 4?2@m<\tkO nhg0iN`%1lO$ Ȝ̴Td7H!RLc8Ջ(PJa6u^1;NoLR 3S-HM( @ χ8I).+I/+82DWedR/G X8/Թ@ "UfRӍJ)"):{yGHy"CݱWt.MhLB<c4⟲ce=)HH5<thMɲX;'5^>֏Ra$va|FC~Ebu47Ԇ /uMuBיS{4VXXұDMV([9SwI۶d>c|?XWN՝pS">1ĄM"amlN=ZSFia.}wl8KMMhN3\ܪ, M=(ZH"kJs&a;>h&a+D%l]]JV`W}%훪7҄j`sH)q[fZ 7.%h` /5շ63 8 fW[FUK .+ 8o(@v'<#a,([+*0>a_k:v=>>gYHx|ƧW~^<ʩ~Z O0# 'K/\8s0?hSw{p_t-D ~Aov;7,~k+W^Qˣ\;b8JeoOI3iaPwBW< AiqnqqJ<-ͺw|s:boG)`[QDXu5d RP4T{C((?OYJmt *+ۤAg/18#Ѐс/'.p*~8|z2ʬYhaԹs]J6ߕBt¡ PԔmm-[~?B\.WbBLIUTD&'K7 B5kx[UpwLyqՑ Nm᫤ٳsܦ)څLJJ8r8((躞ĵw/OR&M]C8 TSav G/,L8IdӉ|o^sSi#+'GSwg [`k)={xb4\$`4nɏw0 M@ k耝}@L i( p M/IENDB`ares-126/hiro/resource/resource.bml000066400000000000000000000230141415063341600174340ustar00rootroot00000000000000namespace name=Icon namespace name=Action binary name=Add1x file=icon/action/add.png binary name=Add2x file=icon@2x/action/add.png binary name=Attach1x file=icon/action/attach.png binary name=Attach2x file=icon@2x/action/attach.png binary name=Bookmark1x file=icon/action/bookmark.png binary name=Bookmark2x file=icon@2x/action/bookmark.png binary name=Close1x file=icon/action/close.png binary name=Close2x file=icon@2x/action/close.png binary name=FullScreen1x file=icon/action/full-screen.png binary name=FullScreen2x file=icon@2x/action/full-screen.png binary name=Mute1x file=icon/action/mute.png binary name=Mute2x file=icon@2x/action/mute.png binary name=NewFile1x file=icon/action/new-file.png binary name=NewFile2x file=icon@2x/action/new-file.png binary name=NewFolder1x file=icon/action/new-folder.png binary name=NewFolder2x file=icon@2x/action/new-folder.png binary name=Open1x file=icon/action/open.png binary name=Open2x file=icon@2x/action/open.png binary name=Properties1x file=icon/action/properties.png binary name=Properties2x file=icon@2x/action/properties.png binary name=Quit1x file=icon/action/quit.png binary name=Quit2x file=icon@2x/action/quit.png binary name=Refresh1x file=icon/action/refresh.png binary name=Refresh2x file=icon@2x/action/refresh.png binary name=Remove1x file=icon/action/remove.png binary name=Remove2x file=icon@2x/action/remove.png binary name=Save1x file=icon/action/save.png binary name=Save2x file=icon@2x/action/save.png binary name=Search1x file=icon/action/search.png binary name=Search2x file=icon@2x/action/search.png binary name=Settings1x file=icon/action/settings.png binary name=Settings2x file=icon@2x/action/settings.png binary name=Stop1x file=icon/action/stop.png binary name=Stop2x file=icon@2x/action/stop.png namespace name=Application binary name=Browser1x file=icon/application/browser.png binary name=Browser2x file=icon@2x/application/browser.png binary name=Calculator1x file=icon/application/calculator.png binary name=Calculator2x file=icon@2x/application/calculator.png binary name=Calendar1x file=icon/application/calendar.png binary name=Calendar2x file=icon@2x/application/calendar.png binary name=Chat1x file=icon/application/chat.png binary name=Chat2x file=icon@2x/application/chat.png binary name=FileManager1x file=icon/application/file-manager.png binary name=FileManager2x file=icon@2x/application/file-manager.png binary name=Mail1x file=icon/application/mail.png binary name=Mail2x file=icon@2x/application/mail.png binary name=Monitor1x file=icon/application/monitor.png binary name=Monitor2x file=icon@2x/application/monitor.png binary name=Terminal1x file=icon/application/terminal.png binary name=Terminal2x file=icon@2x/application/terminal.png binary name=TextEditor1x file=icon/application/text-editor.png binary name=TextEditor2x file=icon@2x/application/text-editor.png namespace name=Device binary name=Clock1x file=icon/device/clock.png binary name=Clock2x file=icon@2x/device/clock.png binary name=Display1x file=icon/device/display.png binary name=Display2x file=icon@2x/device/display.png binary name=Joypad1x file=icon/device/joypad.png binary name=Joypad2x file=icon@2x/device/joypad.png binary name=Keyboard1x file=icon/device/keyboard.png binary name=Keyboard2x file=icon@2x/device/keyboard.png binary name=Microphone1x file=icon/device/microphone.png binary name=Microphone2x file=icon@2x/device/microphone.png binary name=Mouse1x file=icon/device/mouse.png binary name=Mouse2x file=icon@2x/device/mouse.png binary name=Network1x file=icon/device/network.png binary name=Network2x file=icon@2x/device/network.png binary name=Optical1x file=icon/device/optical.png binary name=Optical2x file=icon@2x/device/optical.png binary name=Printer1x file=icon/device/printer.png binary name=Printer2x file=icon@2x/device/printer.png binary name=Speaker1x file=icon/device/speaker.png binary name=Speaker2x file=icon@2x/device/speaker.png binary name=Storage1x file=icon/device/storage.png binary name=Storage2x file=icon@2x/device/storage.png namespace name=Edit binary name=Clear1x file=icon/edit/clear.png binary name=Clear2x file=icon@2x/edit/clear.png binary name=Copy1x file=icon/edit/copy.png binary name=Copy2x file=icon@2x/edit/copy.png binary name=Cut1x file=icon/edit/cut.png binary name=Cut2x file=icon@2x/edit/cut.png binary name=Delete1x file=icon/edit/delete.png binary name=Delete2x file=icon@2x/edit/delete.png binary name=Find1x file=icon/edit/find.png binary name=Find2x file=icon@2x/edit/find.png binary name=Paste1x file=icon/edit/paste.png binary name=Paste2x file=icon@2x/edit/paste.png binary name=Redo1x file=icon/edit/redo.png binary name=Redo2x file=icon@2x/edit/redo.png binary name=Replace1x file=icon/edit/replace.png binary name=Replace2x file=icon@2x/edit/replace.png binary name=Undo1x file=icon/edit/undo.png binary name=Undo2x file=icon@2x/edit/undo.png namespace name=Emblem binary name=Archive1x file=icon/emblem/archive.png binary name=Archive2x file=icon@2x/emblem/archive.png binary name=Audio1x file=icon/emblem/audio.png binary name=Audio2x file=icon@2x/emblem/audio.png binary name=Binary1x file=icon/emblem/binary.png binary name=Binary2x file=icon@2x/emblem/binary.png binary name=File1x file=icon/emblem/file.png binary name=File2x file=icon@2x/emblem/file.png binary name=Folder1x file=icon/emblem/folder.png binary name=Folder2x file=icon@2x/emblem/folder.png binary name=FolderOpen1x file=icon/emblem/folder-open.png binary name=FolderOpen2x file=icon@2x/emblem/folder-open.png binary name=FolderTemplate1x file=icon/emblem/folder-template.png binary name=FolderTemplate2x file=icon@2x/emblem/folder-template.png binary name=Font1x file=icon/emblem/font.png binary name=Font2x file=icon@2x/emblem/font.png binary name=Image1x file=icon/emblem/image.png binary name=Image2x file=icon@2x/emblem/image.png binary name=Markup1x file=icon/emblem/markup.png binary name=Markup2x file=icon@2x/emblem/markup.png binary name=Program1x file=icon/emblem/program.png binary name=Program2x file=icon@2x/emblem/program.png binary name=Script1x file=icon/emblem/script.png binary name=Script2x file=icon@2x/emblem/script.png binary name=Text1x file=icon/emblem/text.png binary name=Text2x file=icon@2x/emblem/text.png binary name=Video1x file=icon/emblem/video.png binary name=Video2x file=icon@2x/emblem/video.png namespace name=Go binary name=Down1x file=icon/go/down.png binary name=Down2x file=icon@2x/go/down.png binary name=Home1x file=icon/go/home.png binary name=Home2x file=icon@2x/go/home.png binary name=Left1x file=icon/go/left.png binary name=Left2x file=icon@2x/go/left.png binary name=Right1x file=icon/go/right.png binary name=Right2x file=icon@2x/go/right.png binary name=Up1x file=icon/go/up.png binary name=Up2x file=icon@2x/go/up.png namespace name=Media binary name=Back1x file=icon/media/back.png binary name=Back2x file=icon@2x/media/back.png binary name=Eject1x file=icon/media/eject.png binary name=Eject2x file=icon@2x/media/eject.png binary name=Flash1x file=icon/media/flash.png binary name=Flash2x file=icon@2x/media/flash.png binary name=Floppy1x file=icon/media/floppy.png binary name=Floppy2x file=icon@2x/media/floppy.png binary name=Next1x file=icon/media/next.png binary name=Next2x file=icon@2x/media/next.png binary name=Optical1x file=icon/media/optical.png binary name=Optical2x file=icon@2x/media/optical.png binary name=Pause1x file=icon/media/pause.png binary name=Pause2x file=icon@2x/media/pause.png binary name=Play1x file=icon/media/play.png binary name=Play2x file=icon@2x/media/play.png binary name=Record1x file=icon/media/record.png binary name=Record2x file=icon@2x/media/record.png binary name=Rewind1x file=icon/media/rewind.png binary name=Rewind2x file=icon@2x/media/rewind.png binary name=Skip1x file=icon/media/skip.png binary name=Skip2x file=icon@2x/media/skip.png binary name=Stop1x file=icon/media/stop.png binary name=Stop2x file=icon@2x/media/stop.png namespace name=Place binary name=Bookmarks1x file=icon/place/bookmarks.png binary name=Bookmarks2x file=icon@2x/place/bookmarks.png binary name=Desktop1x file=icon/place/desktop.png binary name=Desktop2x file=icon@2x/place/desktop.png binary name=Home1x file=icon/place/home.png binary name=Home2x file=icon@2x/place/home.png binary name=Server1x file=icon/place/server.png binary name=Server2x file=icon@2x/place/server.png binary name=Settings1x file=icon/place/settings.png binary name=Settings2x file=icon@2x/place/settings.png binary name=Share1x file=icon/place/share.png binary name=Share2x file=icon@2x/place/share.png namespace name=Prompt binary name=Error1x file=icon/prompt/error.png binary name=Error2x file=icon@2x/prompt/error.png binary name=Information1x file=icon/prompt/information.png binary name=Information2x file=icon@2x/prompt/information.png binary name=Question1x file=icon/prompt/question.png binary name=Question2x file=icon@2x/prompt/question.png binary name=Warning1x file=icon/prompt/warning.png binary name=Warning2x file=icon@2x/prompt/warning.png ares-126/hiro/resource/resource.cpp000066400000000000000000023735741415063341600174710ustar00rootroot00000000000000#include "resource.hpp" namespace Icon { namespace Action { const unsigned char Add1x[323] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,214,1,11,16,0,17,148,68,120,161,0,0,0,208,73, 68,65,84,56,203,205,145,189,14,193,96,20,134,31,210,197,96,183,114,7,210,186,129,198,96,54,91,59,116,113,7,68, 210,196,100,23,177,90,13,38,131,132,27,232,103,55,90,44,86,105,226,167,223,49,16,138,250,139,4,239,118,242,157,188, 249,158,231,192,175,147,184,247,96,57,61,31,48,143,163,242,187,21,43,110,47,249,160,220,244,92,27,207,181,137,20,189, 85,240,82,62,46,48,238,48,199,57,145,200,120,114,98,68,153,91,213,34,91,45,36,128,109,120,222,247,92,27,17,16, 57,88,175,119,198,230,205,15,0,86,235,144,249,50,64,4,180,22,180,64,176,17,194,80,216,105,65,107,200,101,82,241, 8,128,106,116,38,23,8,229,82,1,128,193,200,191,38,82,79,229,88,78,79,134,211,133,52,251,51,185,226,255,242,25, 243,217,244,107,103,140,137,170,181,79,182,21,127,155,61,84,114,75,11,139,178,119,142,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Add2x[601] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,2,16,73,68,65,84,88,133,237,150,177,107,20, 65,20,198,127,187,155,187,189,72,36,4,68,43,65,176,16,20,171,88,165,20,196,63,193,66,91,67,180,17,253,15,196, 194,70,16,43,65,65,155,216,92,97,97,105,35,118,34,130,130,130,193,66,44,76,68,34,104,238,108,114,185,121,159,197, 204,237,133,77,118,207,221,139,90,120,31,12,59,188,157,247,222,247,190,153,55,187,48,193,4,19,252,99,68,85,29,230, 23,219,179,145,122,63,118,123,247,234,254,133,202,241,166,170,58,0,164,141,100,243,214,149,51,233,118,219,213,219,79,235, 132,34,174,229,21,176,178,218,97,101,181,51,78,136,241,8,236,5,246,132,128,169,190,111,173,51,144,65,32,192,100,127, 135,192,137,203,237,153,134,185,57,153,166,228,243,123,18,33,255,201,75,143,230,138,124,223,222,61,255,189,18,129,83,23, 151,119,8,27,247,183,122,14,34,226,40,145,133,242,137,178,45,216,103,172,237,22,203,153,90,20,180,124,169,2,119,174, 157,205,155,154,224,247,220,144,79,14,152,137,27,75,167,49,209,146,60,27,39,33,129,36,174,223,123,86,152,163,148,128, 51,241,225,75,151,56,242,228,205,132,9,156,249,192,78,222,246,230,211,6,206,129,19,244,157,178,117,125,39,142,28,108, 149,165,40,39,176,222,217,228,253,231,208,231,65,113,41,242,149,229,109,128,180,221,230,159,251,167,203,47,199,145,135,112, 225,216,1,20,212,48,27,86,237,76,188,254,184,129,20,113,252,240,12,38,111,51,9,115,194,240,10,140,234,208,82,2, 55,31,60,47,124,183,116,110,33,171,220,36,30,62,126,49,170,150,106,4,138,62,44,243,139,237,217,36,218,250,106,166, 116,32,179,11,109,80,231,99,84,251,38,116,166,108,175,157,171,127,21,86,37,16,245,126,126,139,51,2,3,5,148,17, 248,35,10,196,248,173,106,2,105,119,237,93,154,17,32,40,48,188,137,91,64,10,52,128,228,119,8,141,234,130,36,16, 72,6,243,94,119,189,73,72,124,244,208,52,78,134,134,10,164,128,11,195,114,243,90,4,180,99,30,39,50,83,186,252, 228,101,153,95,84,48,47,93,88,182,38,206,141,129,45,79,86,12,43,183,48,74,79,104,229,67,51,194,111,140,63,131, 9,254,87,252,2,243,76,15,230,168,240,118,155,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Attach1x[649] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,27,73,68,65,84,56,141, 133,211,223,107,146,81,24,192,241,175,250,170,140,114,25,221,76,47,212,205,233,88,233,162,112,51,2,7,131,193,198,168, 219,32,168,151,94,120,137,186,136,8,130,160,191,160,174,130,26,196,64,144,12,162,187,230,72,27,68,174,117,185,173,232, 231,42,236,23,25,182,145,166,108,110,234,252,213,133,89,175,154,235,92,29,158,243,240,57,207,121,120,142,170,90,173,210, 188,36,89,84,3,19,192,49,96,4,72,1,247,128,169,128,63,184,162,204,85,53,3,146,44,118,0,51,93,166,174,209, 189,253,253,216,29,118,54,55,54,137,197,98,44,45,62,253,94,169,84,60,1,127,48,81,207,87,183,92,15,151,157,125, 206,209,241,177,49,86,86,87,185,21,184,77,36,242,0,147,201,132,203,237,50,1,23,149,201,127,0,73,22,207,72,178, 248,25,56,231,243,249,152,158,14,177,252,102,121,106,107,171,48,148,254,153,62,31,141,62,198,235,245,2,156,250,39,0, 92,241,249,134,109,192,174,78,67,39,153,76,6,224,82,192,31,92,4,110,172,175,173,97,216,177,19,96,119,59,160,99, 208,51,8,128,86,208,214,99,21,73,22,143,2,215,0,4,65,7,208,208,52,65,177,87,105,117,186,102,192,12,132,204, 102,179,42,145,72,160,17,132,22,64,89,129,74,39,252,6,180,186,122,108,15,160,58,45,159,5,64,87,131,219,3,245, 155,133,191,21,84,149,21,105,212,255,1,234,39,149,114,21,181,90,13,208,3,80,42,149,0,40,150,138,219,3,249,92, 30,128,87,175,95,50,224,222,15,48,105,179,118,243,241,211,7,0,242,185,92,11,208,208,196,66,161,6,204,205,71,57, 113,252,36,86,139,205,104,177,88,9,71,102,0,40,20,10,219,2,235,217,108,214,160,215,235,73,38,127,100,38,111,94, 55,246,218,29,60,138,62,36,187,145,197,209,235,36,254,45,14,16,107,247,132,217,133,165,5,38,198,143,208,211,109,55, 106,52,26,222,189,127,75,185,82,198,181,207,205,161,161,195,204,63,153,3,184,218,174,130,11,207,95,60,27,72,165,146, 125,86,139,149,131,7,60,8,130,64,169,88,226,107,252,11,247,35,33,210,153,116,24,184,163,4,26,126,163,36,139,6, 106,179,62,2,12,83,155,131,52,48,11,220,5,194,1,127,176,172,4,126,1,41,32,186,81,242,76,218,213,0,0,0, 0,73,69,78,68,174,66,96,130, }; const unsigned char Attach2x[1747] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,138,73,68,65,84,88,133,237,150,109,108,83, 231,21,199,255,207,189,126,15,9,113,28,231,165,16,231,197,9,73,147,166,20,18,160,188,4,85,101,168,234,246,97,42, 213,186,15,149,170,105,107,181,142,106,211,82,134,77,156,160,93,68,18,39,6,153,173,91,85,65,217,86,169,83,55,105, 116,31,182,47,3,161,106,139,74,8,224,36,16,48,224,56,56,137,49,134,36,141,227,196,239,247,250,62,207,190,24,41, 74,141,33,172,210,190,244,72,71,231,232,234,158,243,255,233,232,220,231,62,192,183,246,127,54,242,77,53,234,57,209,83, 174,72,163,157,50,188,66,128,117,0,210,32,184,202,24,231,236,176,116,156,251,198,0,236,118,123,21,199,203,31,81,130, 185,84,44,253,174,32,8,113,187,163,251,7,60,167,248,184,186,166,106,109,105,121,41,180,90,45,192,128,80,40,4,207, 45,15,139,197,226,29,29,214,206,254,255,25,128,49,70,250,142,245,254,167,177,177,161,109,118,118,14,161,185,208,107,148, 176,162,53,58,221,233,109,59,182,145,240,194,34,124,62,31,194,225,48,83,42,148,196,100,170,128,169,210,132,193,11,23, 89,74,74,190,116,232,87,93,3,43,123,114,171,1,232,63,222,251,102,145,94,223,86,83,99,70,100,41,34,81,78,142, 42,21,138,15,119,238,218,65,124,19,147,24,25,30,25,90,88,88,122,85,167,206,215,166,69,86,225,187,115,231,95,211, 211,119,177,161,126,3,97,12,111,103,235,169,120,82,113,225,3,161,128,164,200,177,45,173,91,224,118,187,33,73,162,147, 80,238,151,141,207,55,105,194,225,37,76,77,79,94,75,198,211,123,4,65,136,103,74,2,118,187,253,103,193,123,129,201, 151,247,124,7,215,199,198,246,102,235,251,196,19,80,39,84,71,107,205,181,101,32,4,254,169,233,123,160,236,250,218,181, 5,223,171,53,215,225,218,216,152,76,40,222,94,38,14,0,72,165,82,65,81,148,160,211,105,1,144,162,167,6,232,235, 235,219,168,209,170,246,183,180,180,194,229,186,2,70,209,201,8,57,250,226,246,29,112,223,116,35,149,76,158,178,90,187, 92,43,235,52,26,197,214,130,130,2,196,99,113,0,196,243,84,0,140,49,194,56,249,119,91,90,183,41,252,254,105,132, 66,11,231,41,152,185,166,198,92,173,211,234,224,245,122,230,104,154,28,206,94,71,122,27,27,155,16,8,4,0,208,179, 79,5,224,112,216,223,42,53,150,180,153,171,205,112,13,187,68,16,250,129,74,165,180,236,220,190,11,131,23,47,64,150, 169,205,102,179,205,175,172,235,63,222,251,166,177,216,216,86,89,89,5,143,199,35,49,153,255,40,91,255,156,75,120,226, 132,80,40,202,232,223,221,246,18,46,14,13,66,20,83,78,2,188,187,117,203,139,234,96,48,136,153,153,153,161,67,7, 109,127,48,87,213,241,147,147,222,221,74,165,116,237,253,247,133,208,195,133,109,219,181,27,195,195,46,136,98,202,217,209, 209,233,91,245,4,146,162,234,72,125,93,67,105,50,153,132,119,98,220,15,66,220,133,122,195,119,107,170,205,24,28,250, 82,230,128,247,8,33,204,55,229,253,220,96,44,254,66,76,43,47,11,130,192,169,19,170,163,141,207,54,149,113,132,195, 132,119,252,94,34,38,117,63,74,227,145,0,14,71,207,11,26,141,250,189,166,198,102,124,121,97,0,140,177,195,4,164, 123,107,235,54,92,118,93,66,34,145,56,101,177,116,142,216,143,117,191,166,47,212,127,255,149,189,175,66,161,80,152,84, 58,213,118,173,86,189,127,243,166,86,252,123,224,11,200,140,182,11,130,16,93,21,0,99,140,48,224,247,207,53,53,243, 119,124,94,132,23,23,206,1,204,108,170,168,172,4,33,240,78,120,230,212,74,201,38,8,130,142,3,247,155,214,214,173, 184,226,186,140,116,58,125,154,128,217,55,189,208,162,24,247,222,198,252,124,232,124,135,165,235,111,185,166,156,21,192,225, 176,191,85,168,47,218,89,164,55,192,125,243,70,138,113,124,23,33,220,47,26,234,159,133,203,117,9,44,205,172,237,237, 66,88,163,83,116,86,172,55,153,24,3,38,124,222,57,66,216,109,131,190,168,173,196,88,138,145,209,97,145,114,248,121, 46,113,32,203,18,58,157,78,173,36,167,28,27,155,55,225,134,123,12,98,90,114,130,178,150,242,117,235,11,67,161,16, 66,161,249,27,22,139,237,19,66,228,58,94,169,58,208,80,223,136,43,195,151,192,168,220,11,112,29,27,159,223,132,145, 171,46,72,146,232,180,89,186,110,63,14,224,107,19,144,164,228,27,69,250,162,146,72,100,9,15,102,238,63,72,197,164, 110,66,72,155,190,176,8,254,128,31,20,248,237,145,35,71,148,20,220,95,106,205,27,212,247,130,1,44,132,67,131,140, 145,154,138,245,166,178,100,50,137,64,224,174,63,25,79,247,60,78,60,43,0,37,216,171,47,212,195,31,152,6,99,172, 55,115,188,214,42,120,5,226,241,24,8,97,51,26,157,242,51,163,177,164,165,32,191,0,158,241,91,34,161,228,148,82, 169,218,111,170,168,194,117,247,24,64,113,32,215,226,229,4,32,132,62,167,209,232,16,139,69,1,202,15,0,0,1,153, 140,68,35,208,106,117,224,57,197,63,158,41,95,247,122,197,250,74,220,184,57,6,89,150,14,130,176,119,42,77,85,124, 240,126,0,209,232,210,57,171,213,118,230,73,196,179,3,48,18,167,140,130,35,28,40,79,117,0,0,134,51,193,96,0, 101,165,229,216,216,188,25,121,186,53,112,187,199,228,104,52,102,1,229,22,243,214,228,239,204,95,83,128,105,255,84,138, 242,220,99,23,47,39,0,3,134,34,145,37,228,231,23,128,103,236,71,0,96,181,218,206,36,197,196,129,177,235,163,193, 145,171,87,22,188,19,158,129,84,58,249,178,70,37,125,12,14,199,42,43,170,224,191,59,133,52,149,157,182,3,182,241, 213,0,124,237,43,32,140,125,54,59,251,160,189,161,190,17,243,161,249,119,236,253,61,19,135,44,182,227,132,16,39,0, 231,242,119,251,28,61,159,150,24,75,140,148,82,132,22,230,253,169,28,39,222,163,44,235,149,172,223,209,251,87,131,161, 248,135,235,158,169,128,111,106,2,145,200,210,8,7,242,235,120,92,60,15,0,234,60,126,7,161,220,79,243,242,242,222, 168,171,107,128,103,252,22,146,241,196,235,86,171,237,239,171,5,200,250,51,74,196,197,31,127,197,230,202,101,42,239,174, 169,174,69,52,26,217,60,51,115,255,159,140,32,13,128,215,105,117,196,96,48,162,216,80,12,223,212,29,36,18,241,63, 31,178,118,174,90,28,200,113,41,61,121,242,164,50,20,254,234,48,207,115,7,75,140,101,26,131,161,24,74,165,18,0, 32,166,82,88,92,90,196,236,220,3,57,18,137,29,251,227,233,63,57,252,126,191,12,128,1,160,153,40,103,242,135,241, 137,1,20,0,84,153,168,216,183,111,95,85,83,115,195,79,52,26,205,30,142,227,202,24,3,210,114,250,126,60,26,27, 29,29,25,253,252,236,217,243,190,101,194,114,198,211,43,92,202,146,211,92,19,224,50,0,202,12,140,58,19,249,204,115, 62,227,100,89,15,186,12,98,37,192,67,97,49,147,203,185,38,144,203,72,142,200,50,57,91,145,127,107,57,237,191,56, 2,2,187,148,67,4,157,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Bookmark1x[686] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,17,21,6,52,65,49,61,207,0,0,2,59,73, 68,65,84,56,203,149,210,65,72,147,97,28,199,241,239,255,125,158,247,221,187,185,114,91,35,107,172,21,45,17,44,47, 129,66,69,247,194,168,32,130,14,65,135,162,123,208,161,162,118,176,67,167,162,171,116,173,131,224,37,40,138,40,43,208, 166,65,33,120,113,83,9,209,201,212,68,90,178,215,109,239,246,118,152,168,43,19,252,93,158,231,240,252,63,252,255,207, 243,8,107,233,58,115,231,22,240,24,240,216,136,7,32,34,243,247,174,231,146,221,167,127,181,129,238,130,218,34,212,210, 192,162,6,232,237,237,237,207,231,243,151,38,38,167,200,46,198,228,193,221,171,245,114,169,19,15,31,61,143,13,166,93, 167,53,17,231,192,161,19,24,214,65,86,150,62,12,238,9,142,221,80,0,157,157,157,125,169,84,138,93,193,32,3,233, 31,132,91,162,124,207,228,152,156,249,137,83,170,48,49,62,205,237,155,199,232,56,122,4,171,249,2,166,125,8,67,251, 19,218,253,58,167,55,181,75,161,80,192,173,20,89,90,94,102,126,97,25,0,91,215,112,43,69,10,191,93,220,154,139, 174,58,136,50,40,23,103,240,41,41,24,155,129,106,181,74,181,178,74,185,228,80,114,86,40,59,43,84,86,29,220,178, 195,216,120,137,153,156,80,45,14,224,21,223,49,59,157,6,175,242,173,1,0,16,101,161,181,133,105,249,80,166,15,165, 77,196,48,217,31,75,16,217,119,22,167,214,129,152,49,70,70,77,160,58,218,0,136,8,218,244,99,218,1,44,59,136, 207,223,132,105,251,209,166,159,220,108,142,76,118,10,79,98,96,29,103,110,161,9,221,242,114,85,255,221,129,97,40,12, 67,161,180,9,128,82,38,134,210,196,227,113,218,218,218,64,4,17,141,231,9,0,13,128,101,89,235,251,189,145,32,181, 218,198,151,176,253,138,173,210,48,66,32,16,168,255,30,15,190,188,31,102,120,96,4,207,171,35,77,129,102,68,100,123, 192,231,243,1,240,233,237,16,137,216,110,14,39,66,124,124,51,132,231,121,228,243,121,50,153,204,63,64,195,8,182,109, 3,112,237,242,41,174,92,60,137,97,24,244,191,26,230,217,139,207,180,183,183,147,76,38,183,7,162,209,40,79,238,159, 67,41,69,54,155,69,68,232,104,13,243,52,117,158,112,56,188,254,82,255,5,66,161,16,161,80,8,17,89,63,184,121, 221,234,14,26,128,72,36,194,78,163,215,90,127,221,211,211,211,189,147,194,104,52,218,7,240,7,70,86,184,198,50,151, 228,191,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Bookmark2x[1532] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,179,73,68,65,84,88,133,173,151,77,108,92, 87,21,199,127,231,222,251,222,155,111,59,78,227,38,8,236,196,45,173,99,199,177,131,32,86,128,42,32,181,8,35,216, 128,96,129,90,165,40,97,195,2,33,54,44,64,221,241,177,131,77,216,21,161,110,16,11,216,32,138,64,32,160,128,138, 42,210,150,58,114,82,199,174,191,38,118,211,169,237,216,30,123,102,236,119,223,101,241,102,220,241,188,25,167,33,61,210, 211,155,55,247,220,123,127,247,127,206,61,247,61,225,16,187,240,133,31,252,204,120,234,155,158,81,153,118,237,187,97,24, 133,81,244,194,191,127,247,163,111,28,54,206,97,102,58,53,124,124,226,123,19,31,27,237,187,50,60,120,44,147,233,122, 184,173,79,109,47,84,207,255,226,197,167,129,3,0,206,17,112,55,117,2,223,246,96,77,26,0,29,86,216,213,107,116, 87,151,69,216,109,248,74,235,160,87,175,94,253,178,231,121,191,124,237,230,122,126,97,101,151,59,165,53,158,121,246,139, 109,1,172,141,248,245,175,254,194,196,120,128,115,14,107,45,233,212,6,71,186,214,201,101,55,201,164,43,24,179,71,20, 69,88,171,107,199,123,75,63,127,98,252,173,223,32,149,105,201,83,106,171,128,214,250,249,203,151,47,231,69,132,242,118, 149,137,175,255,144,165,183,215,9,67,139,107,149,79,41,0,198,199,199,185,120,241,34,190,183,134,184,41,196,205,130,43, 130,43,33,84,112,206,129,100,131,191,254,109,251,91,136,55,135,68,25,231,106,215,68,88,75,0,132,97,216,45,34,204, 205,205,81,169,238,225,28,108,239,212,216,40,87,227,129,154,236,72,33,78,141,181,181,53,74,165,219,100,130,41,124,243, 38,70,205,226,153,101,180,148,112,18,71,64,201,46,31,254,208,78,0,169,17,28,176,165,118,156,171,188,156,0,104,76, 34,34,241,5,100,211,30,91,59,59,68,209,65,128,92,198,219,247,213,242,14,70,223,193,232,21,60,189,140,86,101,68, 63,14,114,180,238,189,70,239,177,73,16,127,16,162,50,68,37,202,185,91,9,128,40,138,14,0,32,96,148,67,162,16, 105,1,240,84,252,188,180,180,68,177,184,65,79,215,12,93,249,121,186,114,203,224,157,70,185,199,209,186,47,30,143,219, 104,111,11,88,253,8,232,34,168,99,72,245,225,67,1,234,146,64,100,113,145,197,181,0,184,40,2,231,232,235,235,99, 224,84,134,116,240,46,190,246,49,186,128,152,94,68,245,131,62,87,31,88,16,245,22,72,193,195,237,21,16,201,16,233, 124,91,128,230,48,0,56,44,206,133,137,28,112,206,2,176,184,184,200,226,98,134,158,238,18,93,185,50,185,108,136,18, 139,34,66,105,129,68,250,214,77,203,94,2,192,90,187,63,121,16,120,88,27,97,180,198,51,38,145,3,198,104,0,250, 251,251,25,120,228,33,60,85,195,211,27,24,181,138,168,13,68,150,193,190,90,247,190,141,139,222,5,183,25,130,221,194, 185,29,140,77,238,130,102,0,207,40,34,7,65,144,34,149,78,39,0,130,32,0,17,22,23,23,153,158,134,66,110,155, 66,78,200,103,179,164,130,89,148,177,104,115,167,238,189,142,221,155,7,236,34,216,21,136,74,220,173,189,125,40,64,195, 124,63,32,229,167,137,90,66,224,123,1,0,39,79,158,228,209,199,62,133,167,186,48,42,143,150,52,74,21,209,204,128, 189,93,247,174,114,231,157,42,71,10,181,55,97,119,14,113,55,229,56,219,29,1,154,33,98,5,246,18,0,65,42,5, 196,187,224,250,245,91,248,94,141,92,6,210,65,150,116,234,40,169,192,167,144,143,183,170,241,10,204,45,92,99,240,209, 218,27,176,251,6,217,234,36,180,169,132,214,90,156,115,239,109,67,192,243,60,124,223,75,0,24,47,238,62,56,56,200, 217,179,103,99,104,134,209,50,139,146,21,148,220,37,116,21,0,180,116,115,107,246,6,19,79,218,127,144,173,78,138,96, 59,2,180,154,210,10,173,53,70,132,124,54,96,179,92,37,114,14,173,226,36,44,22,139,76,78,78,54,41,23,224,153, 30,210,105,195,35,167,122,65,124,34,117,130,255,188,246,103,36,183,253,250,129,69,116,2,104,86,192,40,69,224,123,116, 23,210,84,182,43,244,30,205,179,190,89,65,235,248,44,24,26,26,98,100,100,36,1,14,196,203,116,224,200,176,83,81, 137,246,247,5,160,141,230,161,238,44,175,188,114,157,255,190,62,195,249,243,167,25,25,253,40,170,126,24,205,207,207,39, 106,4,128,49,134,225,225,97,32,46,241,141,34,119,79,128,214,193,172,181,188,244,247,87,113,187,85,158,251,246,83,188, 240,219,107,252,107,115,155,79,63,49,6,192,153,51,103,24,24,24,216,7,222,47,96,137,194,149,132,76,104,18,134,97, 194,233,197,223,255,147,158,172,225,187,87,62,203,208,224,41,126,242,253,175,209,149,82,252,241,15,47,3,113,61,216,63, 188,58,92,192,251,87,160,177,138,70,199,79,142,246,243,213,47,125,130,165,165,37,202,229,45,0,190,242,249,65,254,244, 210,52,75,197,18,51,51,51,172,174,174,30,168,29,0,90,235,3,185,113,95,0,13,251,206,149,39,249,220,103,198,112, 206,49,60,60,188,15,166,148,226,220,185,115,92,24,191,201,249,177,147,100,50,153,68,8,32,150,189,157,244,29,1,194, 240,224,161,115,241,194,105,148,82,68,81,196,141,27,55,176,214,30,152,168,43,13,211,211,211,7,198,216,223,61,198,116, 220,29,247,84,160,57,4,141,251,208,208,80,34,182,74,169,68,172,91,21,248,191,0,218,217,212,212,212,190,2,237,38, 107,253,79,107,205,232,232,232,131,133,160,217,26,10,180,174,186,157,26,240,94,252,91,147,243,80,128,7,81,192,243,60, 198,198,198,58,246,127,96,128,123,41,32,34,247,140,249,3,1,52,172,245,149,173,83,123,227,247,253,228,64,65,41,181, 233,156,43,20,10,5,68,4,107,45,198,152,251,94,89,195,154,195,229,251,254,22,112,28,88,7,106,173,0,121,224,88, 177,88,252,241,165,75,151,158,19,169,127,81,124,112,86,93,88,88,248,41,112,2,208,192,10,16,53,107,24,0,189,192, 81,160,187,254,172,63,168,201,137,23,187,13,172,1,75,64,25,218,124,156,214,39,78,213,239,157,247,207,253,153,5,246, 136,101,175,209,244,158,254,63,27,58,117,84,102,33,229,156,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Close1x[586] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,1,199,73,68,65,84,56,141,165,147,205,106,26,97,20,134,31,51,14, 5,77,71,218,136,100,83,20,131,67,118,198,149,76,93,185,51,5,23,221,100,153,69,46,32,189,130,118,81,122,3,189, 130,118,147,149,12,130,139,226,118,50,232,106,4,133,4,162,208,162,20,132,128,197,159,90,181,240,165,167,27,45,147,161, 41,20,15,156,205,57,231,121,57,63,223,23,18,17,182,177,157,173,232,7,4,18,64,26,136,250,98,81,224,96,157,251, 167,192,126,62,159,63,214,117,253,163,109,219,230,26,140,218,182,109,234,186,254,33,159,207,31,3,251,247,8,17,217,120, 194,178,172,83,160,11,92,105,154,118,89,173,86,143,170,213,234,145,166,105,151,192,21,208,181,44,235,84,68,18,27,46, 228,91,98,58,149,74,189,31,12,6,79,0,1,30,133,195,225,57,128,82,106,23,248,9,132,146,201,228,184,223,239,191, 2,190,4,71,184,245,60,239,34,147,201,92,3,11,96,172,148,210,148,82,26,48,6,22,153,76,230,218,243,188,11,224, 118,3,133,2,103,52,70,163,209,139,66,161,240,188,215,235,61,243,39,76,211,252,218,104,52,154,241,120,252,19,48,123, 104,137,119,173,86,171,183,92,46,247,214,93,252,241,213,106,245,180,221,110,119,129,59,63,224,239,32,90,175,215,15,202, 229,242,107,165,148,2,230,1,241,93,93,215,181,90,173,246,174,84,42,125,6,126,4,5,210,177,88,236,205,108,54,251, 5,124,7,200,102,179,223,0,58,157,206,222,186,230,177,97,24,59,211,233,244,237,223,150,56,175,84,42,205,72,36,50, 4,22,185,92,110,232,56,206,141,227,56,55,185,92,110,8,44,34,145,200,176,82,169,52,239,117,231,123,7,136,200,161, 235,186,103,197,98,241,124,50,153,156,136,136,33,34,198,100,50,57,41,22,139,231,174,235,158,137,200,161,159,9,10,32, 34,166,136,188,92,195,155,152,177,142,153,193,250,224,25,255,219,182,254,141,191,1,124,82,8,56,142,215,29,200,0,0, 0,0,73,69,78,68,174,66,96,130, }; const unsigned char Close2x[2045] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,4,0,0,0,217,115,178, 127,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13,215,1,66,40,155,120,0,0,6,0,105,84,88,116,88,77, 76,58,99,111,109,46,97,100,111,98,101,46,120,109,112,0,0,0,0,0,60,63,120,112,97,99,107,101,116,32,98,101, 103,105,110,61,34,239,187,191,34,32,105,100,61,34,87,53,77,48,77,112,67,101,104,105,72,122,114,101,83,122,78,84, 99,122,107,99,57,100,34,63,62,32,60,120,58,120,109,112,109,101,116,97,32,120,109,108,110,115,58,120,61,34,97,100, 111,98,101,58,110,115,58,109,101,116,97,47,34,32,120,58,120,109,112,116,107,61,34,65,100,111,98,101,32,88,77,80, 32,67,111,114,101,32,53,46,54,45,99,49,52,53,32,55,57,46,49,54,51,52,57,57,44,32,50,48,49,56,47,48, 56,47,49,51,45,49,54,58,52,48,58,50,50,32,32,32,32,32,32,32,32,34,62,32,60,114,100,102,58,82,68,70, 32,120,109,108,110,115,58,114,100,102,61,34,104,116,116,112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,49,57, 57,57,47,48,50,47,50,50,45,114,100,102,45,115,121,110,116,97,120,45,110,115,35,34,62,32,60,114,100,102,58,68, 101,115,99,114,105,112,116,105,111,110,32,114,100,102,58,97,98,111,117,116,61,34,34,32,120,109,108,110,115,58,120,109, 112,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,34, 32,120,109,108,110,115,58,100,99,61,34,104,116,116,112,58,47,47,112,117,114,108,46,111,114,103,47,100,99,47,101,108, 101,109,101,110,116,115,47,49,46,49,47,34,32,120,109,108,110,115,58,112,104,111,116,111,115,104,111,112,61,34,104,116, 116,112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,112,104,111,116,111,115,104,111,112,47,49,46,48,47, 34,32,120,109,108,110,115,58,120,109,112,77,77,61,34,104,116,116,112,58,47,47,110,115,46,97,100,111,98,101,46,99, 111,109,47,120,97,112,47,49,46,48,47,109,109,47,34,32,120,109,108,110,115,58,115,116,69,118,116,61,34,104,116,116, 112,58,47,47,110,115,46,97,100,111,98,101,46,99,111,109,47,120,97,112,47,49,46,48,47,115,84,121,112,101,47,82, 101,115,111,117,114,99,101,69,118,101,110,116,35,34,32,120,109,112,58,67,114,101,97,116,111,114,84,111,111,108,61,34, 65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48,49,57,32,40,77,97,99,105,110,116,111, 115,104,41,34,32,120,109,112,58,67,114,101,97,116,101,68,97,116,101,61,34,50,48,50,49,45,48,56,45,50,55,84, 50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,120,109,112,58,77,111,100,105,102,121,68,97,116,101,61,34, 50,48,50,49,45,48,57,45,48,49,84,49,57,58,52,56,58,49,55,43,48,51,58,48,48,34,32,120,109,112,58,77, 101,116,97,100,97,116,97,68,97,116,101,61,34,50,48,50,49,45,48,57,45,48,49,84,49,57,58,52,56,58,49,55, 43,48,51,58,48,48,34,32,100,99,58,102,111,114,109,97,116,61,34,105,109,97,103,101,47,112,110,103,34,32,112,104, 111,116,111,115,104,111,112,58,67,111,108,111,114,77,111,100,101,61,34,51,34,32,112,104,111,116,111,115,104,111,112,58, 73,67,67,80,114,111,102,105,108,101,61,34,115,82,71,66,32,73,69,67,54,49,57,54,54,45,50,46,49,34,32,120, 109,112,77,77,58,73,110,115,116,97,110,99,101,73,68,61,34,120,109,112,46,105,105,100,58,98,55,53,51,55,100,54, 52,45,54,49,101,52,45,52,97,98,57,45,56,53,101,49,45,55,51,97,53,51,52,50,98,49,56,102,55,34,32,120, 109,112,77,77,58,68,111,99,117,109,101,110,116,73,68,61,34,97,100,111,98,101,58,100,111,99,105,100,58,112,104,111, 116,111,115,104,111,112,58,49,100,98,48,50,49,99,101,45,97,51,55,50,45,102,99,52,98,45,57,57,50,52,45,98, 98,57,50,54,97,50,50,55,57,97,50,34,32,120,109,112,77,77,58,79,114,105,103,105,110,97,108,68,111,99,117,109, 101,110,116,73,68,61,34,120,109,112,46,100,105,100,58,54,54,51,56,49,56,98,51,45,56,102,52,57,45,52,100,56, 49,45,56,49,49,51,45,102,53,102,51,49,48,100,56,97,55,52,54,34,62,32,60,120,109,112,77,77,58,72,105,115, 116,111,114,121,62,32,60,114,100,102,58,83,101,113,62,32,60,114,100,102,58,108,105,32,115,116,69,118,116,58,97,99, 116,105,111,110,61,34,99,114,101,97,116,101,100,34,32,115,116,69,118,116,58,105,110,115,116,97,110,99,101,73,68,61, 34,120,109,112,46,105,105,100,58,54,54,51,56,49,56,98,51,45,56,102,52,57,45,52,100,56,49,45,56,49,49,51, 45,102,53,102,51,49,48,100,56,97,55,52,54,34,32,115,116,69,118,116,58,119,104,101,110,61,34,50,48,50,49,45, 48,56,45,50,55,84,50,48,58,49,49,58,52,52,43,48,51,58,48,48,34,32,115,116,69,118,116,58,115,111,102,116, 119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48, 49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,47,62,32,60,114,100,102,58,108,105,32,115,116,69,118,116,58, 97,99,116,105,111,110,61,34,115,97,118,101,100,34,32,115,116,69,118,116,58,105,110,115,116,97,110,99,101,73,68,61, 34,120,109,112,46,105,105,100,58,98,55,53,51,55,100,54,52,45,54,49,101,52,45,52,97,98,57,45,56,53,101,49, 45,55,51,97,53,51,52,50,98,49,56,102,55,34,32,115,116,69,118,116,58,119,104,101,110,61,34,50,48,50,49,45, 48,57,45,48,49,84,49,57,58,52,56,58,49,55,43,48,51,58,48,48,34,32,115,116,69,118,116,58,115,111,102,116, 119,97,114,101,65,103,101,110,116,61,34,65,100,111,98,101,32,80,104,111,116,111,115,104,111,112,32,67,67,32,50,48, 49,57,32,40,77,97,99,105,110,116,111,115,104,41,34,32,115,116,69,118,116,58,99,104,97,110,103,101,100,61,34,47, 34,47,62,32,60,47,114,100,102,58,83,101,113,62,32,60,47,120,109,112,77,77,58,72,105,115,116,111,114,121,62,32, 60,47,114,100,102,58,68,101,115,99,114,105,112,116,105,111,110,62,32,60,47,114,100,102,58,82,68,70,62,32,60,47, 120,58,120,109,112,109,101,116,97,62,32,60,63,120,112,97,99,107,101,116,32,101,110,100,61,34,114,34,63,62,199,198, 29,147,0,0,1,163,73,68,65,84,72,199,237,148,79,75,2,65,24,198,159,69,156,253,26,230,189,252,58,117,232,15, 18,72,65,129,135,130,242,80,20,22,149,73,10,5,121,40,200,67,94,234,80,7,61,104,144,135,60,88,160,176,145,208, 135,169,103,103,198,101,255,202,130,167,160,253,49,243,142,207,251,206,51,195,236,172,248,193,116,224,223,192,54,8,121,18, 136,169,42,3,127,34,131,51,152,129,90,65,53,227,183,12,219,193,28,44,124,227,220,103,33,80,166,106,49,27,178,3, 239,244,1,190,48,34,110,11,129,146,212,70,24,122,45,252,6,179,248,192,39,177,100,59,209,22,130,35,203,225,157,85, 17,6,9,28,114,253,49,67,182,99,90,8,246,67,151,62,96,85,34,106,7,38,138,92,193,166,175,219,145,84,250,26, 59,83,116,159,78,240,12,76,28,160,231,240,70,220,177,199,172,57,249,16,109,139,61,116,241,234,52,187,239,234,126,223, 255,122,195,47,146,137,2,58,120,65,91,210,33,109,217,10,193,219,17,117,19,5,118,209,68,139,52,117,108,97,135,42, 226,27,108,225,137,60,203,94,177,29,223,64,32,143,7,201,163,142,138,124,208,34,204,64,96,19,13,220,147,134,140,13, 61,178,227,134,223,34,104,32,176,142,58,185,35,238,168,198,117,102,197,36,3,129,28,110,201,141,195,26,81,163,177,158, 115,91,120,13,12,172,160,134,107,82,211,113,149,197,130,253,181,86,85,204,178,50,98,7,105,92,224,202,33,171,215,18, 28,41,229,146,84,88,53,225,12,210,252,112,43,168,146,101,215,86,5,127,85,165,94,114,79,15,127,11,41,254,243,148, 177,132,164,71,77,98,145,234,41,102,226,220,131,20,22,124,211,149,197,60,51,222,199,136,186,137,6,98,170,81,6,177, 159,191,106,96,248,12,166,227,23,234,50,147,249,110,139,89,8,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FullScreen1x[650] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,214,3,16,19,13,53,226,119,223,154,0,0,0,53,116, 69,88,116,67,111,109,109,101,110,116,0,40,99,41,32,50,48,48,52,32,74,97,107,117,98,32,83,116,101,105,110,101, 114,10,10,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80,144,217,139,111,0,0,1,214, 73,68,65,84,56,203,157,147,59,104,147,81,20,199,127,255,155,27,53,21,105,211,37,72,241,5,113,8,8,130,32,148, 42,118,42,20,95,80,197,201,199,224,208,193,42,213,197,65,112,112,72,249,154,224,168,96,6,193,65,80,2,237,224,179, 86,81,116,80,113,13,45,138,37,45,22,69,106,77,83,21,77,76,251,117,248,146,216,188,28,114,224,192,133,115,207,239, 254,207,185,231,200,137,69,111,0,253,52,103,9,156,88,212,109,214,156,88,212,181,37,212,238,254,219,21,232,39,195,189, 0,72,6,112,233,185,248,168,34,254,46,113,28,0,83,173,201,24,253,75,6,36,144,196,211,248,126,140,81,77,13,166, 58,121,67,192,207,133,235,111,188,151,101,80,209,79,57,47,104,89,107,177,62,213,7,72,48,230,244,178,177,61,64,184, 163,149,123,175,103,144,60,25,119,158,127,100,199,214,118,66,193,0,227,241,131,248,86,41,41,247,96,60,118,0,128,107, 131,123,25,125,53,77,40,24,224,253,167,69,172,53,132,59,218,88,99,125,92,58,177,11,23,241,236,234,161,90,128,228, 85,45,160,111,223,54,38,166,51,68,182,180,97,100,248,48,187,64,103,36,92,190,231,174,170,188,12,176,182,116,244,32, 126,191,197,250,252,200,136,245,45,235,240,89,11,18,194,5,87,245,122,96,144,132,145,33,241,96,130,185,133,63,76,125, 206,50,59,247,147,236,175,60,35,47,167,138,191,98,74,114,43,1,221,231,71,145,12,199,174,60,102,114,38,67,42,253, 157,237,155,130,108,14,181,146,74,207,243,118,242,43,71,46,63,4,96,207,217,100,45,192,117,161,123,112,132,204,143,28, 233,47,139,156,59,186,19,73,72,226,100,79,132,84,122,158,111,217,223,116,13,36,27,207,193,178,11,185,191,75,220,119, 14,123,157,40,2,36,49,22,239,99,105,217,253,255,32,149,172,107,32,137,49,194,200,115,100,232,60,115,183,238,54,217, 234,217,110,100,141,226,182,80,40,220,28,142,15,157,110,102,151,243,185,252,173,21,142,211,185,159,81,219,35,189,0,0, 0,0,73,69,78,68,174,66,96,130, }; const unsigned char FullScreen2x[1256] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,4,122,73,68,65,84,88,133, 197,151,91,136,84,117,28,199,63,255,115,206,220,207,156,85,103,103,103,156,53,161,242,18,186,42,162,75,79,70,145,100, 34,105,61,4,246,80,15,173,16,161,153,180,148,152,5,91,32,120,41,74,88,180,160,30,34,234,161,203,26,186,80,4, 18,148,61,42,230,178,187,230,150,91,176,151,185,24,237,220,111,103,230,223,131,59,235,236,204,153,113,36,183,190,240,99, 134,249,255,206,124,63,231,251,255,159,255,57,71,72,41,249,63,165,85,190,188,251,254,241,103,145,162,223,52,139,198,130, 155,106,182,4,66,238,235,61,240,218,167,115,0,72,209,223,179,231,5,195,227,114,47,180,63,233,108,198,248,248,163,15, 251,129,91,0,166,89,52,60,110,15,27,119,159,108,120,160,203,174,113,172,119,59,93,43,2,13,123,70,126,139,112,224, 216,32,153,92,177,97,207,240,64,47,149,164,149,58,186,76,193,178,74,102,153,190,189,91,155,154,3,172,89,17,224,157, 87,119,160,106,42,69,179,108,89,213,170,3,104,164,35,47,63,70,119,215,178,150,122,215,175,10,114,252,192,182,150,122, 91,6,248,246,194,53,10,5,19,1,183,173,66,193,228,187,159,175,225,114,218,254,61,128,0,2,62,157,216,95,41,62, 27,188,140,89,19,97,173,76,179,204,192,249,97,18,233,60,157,29,6,30,183,189,117,0,81,59,40,32,232,247,18,108, 215,9,182,123,73,229,138,92,184,252,39,101,9,66,136,186,146,192,149,177,48,229,146,36,228,55,8,249,189,116,250,13, 188,30,71,221,73,89,2,84,228,180,107,156,232,221,206,67,155,238,37,176,68,103,105,187,151,160,79,39,228,211,81,132, 96,50,60,3,178,62,250,108,166,128,219,105,163,51,96,208,217,97,16,234,184,9,241,112,247,125,156,58,188,211,114,74, 180,218,31,156,118,141,247,14,238,160,123,237,50,30,92,119,15,159,156,189,68,201,44,225,247,121,9,248,60,4,124,58, 134,238,68,212,198,5,232,30,7,157,126,3,101,54,17,69,8,150,117,24,60,249,232,90,156,118,141,211,135,119,242,226, 145,179,205,1,78,30,122,130,205,107,58,1,240,184,236,244,60,181,153,159,46,142,99,183,105,4,218,117,2,62,157,69, 94,151,85,112,0,44,50,92,40,138,64,81,4,139,189,78,186,86,6,177,105,42,0,235,86,45,229,244,27,187,154,3, 116,207,154,87,39,242,72,247,253,76,70,227,44,242,186,104,243,58,27,154,87,212,166,59,177,169,10,14,135,13,85,153, 31,213,250,149,193,230,0,86,210,52,133,229,75,23,91,198,222,72,110,87,243,213,223,16,64,52,112,185,19,243,59,209, 60,128,202,106,94,104,85,123,212,39,240,31,0,84,107,62,128,16,11,151,117,173,207,172,234,54,34,171,189,93,74,73, 46,95,108,233,62,48,183,41,101,11,148,203,210,114,172,90,117,0,163,215,35,243,154,75,102,153,43,215,194,76,76,207, 144,74,231,91,50,79,166,115,76,68,226,252,242,235,20,166,89,154,55,54,52,22,110,14,208,243,214,25,70,198,163,32, 4,5,179,204,87,231,135,25,249,61,194,68,44,201,100,44,65,60,157,191,53,85,22,53,147,202,51,25,77,50,17,77, 48,122,61,198,23,223,15,145,43,150,64,8,174,140,133,217,243,246,153,121,126,117,139,48,149,41,208,211,55,192,169,67, 187,56,247,227,40,127,39,114,132,252,94,164,4,164,4,9,170,16,117,55,24,128,100,58,207,84,52,206,84,44,193,244, 141,36,211,177,20,83,177,4,87,255,184,193,142,45,171,217,127,124,144,108,205,147,82,221,101,88,129,120,238,205,47,105, 211,29,132,252,6,101,41,41,75,137,148,18,175,199,129,199,101,183,188,90,116,183,157,108,174,200,84,44,57,91,9,166, 103,63,191,249,97,164,206,199,50,129,106,197,83,121,164,76,220,60,113,41,9,250,116,54,174,14,213,109,175,21,41,66, 176,113,117,136,209,241,40,19,209,248,156,121,42,83,104,232,113,219,7,146,68,58,207,68,52,142,219,105,227,153,199,55, 224,176,107,150,207,2,149,178,217,84,118,111,219,64,155,238,100,50,218,220,188,37,0,184,57,37,79,111,237,194,237,176, 181,116,21,56,237,26,59,183,60,64,58,219,220,188,101,0,128,125,199,206,49,124,61,210,82,239,165,171,83,188,116,98, 176,165,222,150,1,82,153,2,207,247,13,48,58,30,109,218,55,52,22,102,239,209,179,152,102,9,155,166,88,86,181,230, 22,161,170,106,137,108,54,107,140,124,253,74,83,3,85,81,208,180,198,220,155,214,46,231,226,231,251,155,254,71,54,155, 69,85,181,228,28,128,16,66,57,116,248,224,235,167,62,232,63,90,46,151,244,166,71,223,5,41,138,146,14,135,195,125, 66,8,183,168,188,29,11,33,124,128,15,88,2,120,129,248,93,246,85,129,197,64,6,152,1,34,64,68,84,191,158,11, 33,84,192,1,56,129,236,93,6,208,0,27,144,3,242,82,202,18,192,63,50,183,177,117,23,21,218,2,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Mute1x[632] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,10,73,68,65,84,56,141, 165,147,207,75,84,81,24,134,159,115,61,215,51,214,140,46,100,26,17,141,22,226,70,178,50,23,21,65,11,33,152,85, 139,113,156,153,173,155,41,92,70,250,31,68,45,204,173,182,82,180,140,68,72,9,4,17,90,185,147,72,200,12,209,96, 108,51,11,113,225,189,206,56,115,127,124,45,6,103,97,72,86,31,156,213,199,251,188,223,11,239,81,34,194,255,140,117, 222,98,48,55,216,159,207,231,237,127,2,100,179,169,190,6,212,90,181,90,109,248,107,64,54,155,234,179,27,35,159,68, 164,249,79,98,0,157,201,165,29,32,162,181,62,70,100,210,110,140,60,25,30,30,110,158,122,61,21,92,4,96,41,84, 100,98,124,66,143,141,142,181,8,140,142,140,140,52,223,189,115,15,173,245,69,244,104,65,136,199,175,16,143,39,16,17, 117,235,230,109,140,49,40,165,46,6,0,216,250,246,181,238,184,179,243,29,219,182,241,60,143,135,11,239,243,243,211,211, 207,4,34,103,133,10,78,4,158,107,0,199,113,234,0,207,247,16,106,221,176,124,255,101,39,24,109,12,150,49,4,71, 71,232,214,86,252,195,67,2,17,10,240,202,2,112,92,7,199,117,16,17,188,170,135,87,245,78,141,204,37,99,232,89, 93,229,250,250,58,177,238,110,110,108,110,210,61,51,67,83,45,162,209,0,174,235,82,46,151,1,40,252,220,167,179,163, 163,126,170,233,234,226,114,127,63,202,24,122,182,183,1,104,73,38,209,137,4,20,139,88,34,34,139,139,139,193,202,202, 202,137,165,172,169,165,165,15,238,126,97,191,14,56,217,218,226,71,38,83,203,109,213,106,179,51,48,128,95,44,214,98, 2,49,17,137,134,97,24,125,251,230,221,99,175,18,36,151,63,46,187,97,24,90,0,118,123,59,87,39,39,65,41,36, 8,64,132,107,179,179,88,177,88,205,65,68,126,123,233,116,250,126,58,147,58,158,3,249,210,214,38,149,66,65,188,131, 3,217,203,229,36,40,149,196,221,216,144,207,209,168,204,129,168,243,126,227,208,208,208,131,71,11,11,107,93,160,35,137, 4,13,209,40,149,189,61,154,122,123,169,236,238,82,45,149,216,5,255,92,0,192,188,82,47,66,120,122,218,151,51,227, 91,48,254,11,41,211,229,38,66,238,34,57,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Mute2x[1789] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,180,73,68,65,84,88,133,237,150,127,108,85, 103,25,199,63,239,57,231,61,247,222,115,127,180,189,183,220,82,110,153,148,81,28,58,216,4,6,162,68,153,6,199,140, 26,153,178,63,156,17,100,145,24,246,135,109,98,76,76,150,88,51,19,253,3,215,198,100,49,49,209,176,136,50,19,208, 109,209,12,117,202,28,68,73,133,43,97,50,54,44,229,182,189,208,246,182,165,189,189,63,218,123,207,57,239,235,31,189, 109,96,20,115,23,150,248,207,190,201,147,156,243,158,39,207,247,147,39,231,125,222,23,222,215,251,250,63,75,188,155,228, 174,174,174,93,152,236,7,62,42,12,44,161,141,139,74,171,23,26,34,13,191,236,238,238,174,190,231,0,79,117,62,181, 77,104,241,19,32,37,132,104,109,75,181,177,126,253,253,52,196,98,20,10,69,74,229,18,153,76,134,236,181,107,104,173, 125,33,196,219,2,241,195,103,15,61,123,228,174,1,186,187,187,141,220,212,248,127,190,246,149,175,174,118,156,16,153,76, 134,134,134,70,14,31,249,53,255,58,127,1,165,20,78,216,225,147,31,223,198,186,251,58,168,86,93,44,203,228,205,75, 151,188,89,111,110,205,115,63,126,110,176,30,0,227,78,31,178,99,217,45,169,214,212,234,182,84,138,159,254,236,231,72, 59,192,211,223,255,1,215,178,195,172,106,91,206,154,246,20,203,154,162,244,157,77,243,226,239,79,16,139,69,121,241,229, 87,104,106,106,180,12,207,120,188,222,14,88,11,15,123,14,238,137,68,189,134,239,216,182,189,91,8,163,82,158,43,157, 84,202,199,117,93,190,249,141,39,249,238,211,223,35,222,16,193,150,38,134,105,32,45,137,25,49,73,36,4,55,166,10, 252,229,228,105,30,255,242,23,24,184,58,136,167,84,189,254,243,0,123,14,238,137,52,234,166,115,159,121,100,231,170,77, 31,217,104,143,142,142,242,183,83,175,111,184,220,223,79,121,182,204,111,142,253,22,91,26,72,203,64,218,146,128,29,64, 74,11,211,52,17,134,129,227,56,140,140,142,51,57,57,197,212,212,20,158,235,95,120,87,0,9,209,252,139,199,118,239, 110,255,208,186,117,242,79,175,158,96,100,100,148,137,27,55,228,242,229,173,84,230,42,100,50,87,145,150,129,109,219,4, 67,65,2,129,0,182,148,152,150,133,16,243,191,81,235,114,193,91,151,251,89,214,28,103,38,63,179,21,248,99,61,0, 198,19,251,246,173,15,4,131,187,30,218,188,73,158,75,255,147,66,161,128,175,20,107,215,172,229,222,246,118,206,95,120, 3,229,123,88,150,69,48,24,36,20,12,18,10,133,8,57,33,28,39,68,56,236,224,56,14,241,120,35,115,115,115,52, 196,98,248,90,61,90,111,7,140,80,64,30,252,236,174,93,78,62,63,67,246,218,48,45,201,22,158,252,250,126,198,114, 57,90,151,39,185,114,245,10,74,121,4,3,1,154,226,141,196,19,113,76,195,32,16,8,224,56,243,230,11,16,209,104, 4,223,247,208,154,77,7,14,28,144,117,1,128,216,217,150,106,51,135,178,131,40,165,72,36,226,196,98,141,12,13,101, 137,70,163,148,138,101,44,203,36,222,28,167,163,163,131,142,142,14,86,164,86,80,169,86,107,230,225,69,144,104,52,76, 165,82,197,150,82,150,203,229,213,245,0,88,174,231,222,99,75,73,62,159,7,192,83,154,139,23,47,80,44,149,208,90, 99,88,6,82,74,18,137,4,45,45,73,150,37,151,161,180,98,124,98,2,199,113,48,77,19,141,198,115,61,194,97,135, 74,213,69,24,6,30,94,162,46,0,165,148,84,90,81,42,21,1,40,206,228,41,22,10,120,158,135,231,185,216,82,34, 45,137,239,251,84,170,85,138,197,34,158,235,161,124,69,200,9,97,89,22,90,107,92,215,37,88,46,227,123,62,190,239, 81,173,170,186,198,188,37,12,195,155,157,157,181,132,152,159,73,19,147,19,40,165,81,218,103,110,174,66,48,24,192,180, 76,242,249,25,178,195,89,38,198,39,152,158,158,70,218,18,39,20,66,74,137,63,150,131,103,126,68,50,51,8,74,209, 62,95,251,244,99,75,24,10,240,5,92,208,176,251,9,24,180,76,211,188,62,51,147,191,199,52,230,129,75,165,50,74, 41,108,59,192,248,248,4,145,72,4,219,150,8,4,35,215,175,163,181,192,146,22,27,30,88,79,48,20,196,182,3,76, 31,234,165,189,41,78,203,167,62,141,48,238,56,92,1,208,74,153,185,116,250,129,129,116,250,40,240,49,75,107,253,106, 102,112,112,95,60,222,104,0,72,41,113,93,151,72,216,97,248,218,117,82,169,86,38,39,199,65,107,98,177,38,98,177, 24,209,88,148,112,56,140,109,7,112,156,16,99,151,222,166,101,255,126,110,60,255,60,218,117,255,39,128,144,146,228,222, 189,70,127,58,189,5,192,152,154,202,31,62,211,215,87,142,132,163,4,2,65,44,203,36,145,104,230,190,181,29,244,15, 92,33,28,10,177,172,57,137,16,98,49,140,90,88,150,73,48,24,68,43,133,48,12,180,235,34,44,139,200,246,237,183, 25,71,119,236,64,88,214,124,142,97,160,193,4,48,94,58,118,236,98,177,88,62,151,185,154,241,87,180,182,98,24,38, 99,185,49,218,218,218,24,28,202,82,169,86,136,68,162,132,195,81,180,214,181,0,173,53,190,175,168,86,111,189,6,56, 27,55,242,193,83,167,88,217,211,179,184,182,178,167,135,181,39,79,18,122,240,193,219,192,44,192,250,251,235,167,186,4, 250,196,214,45,155,19,45,201,164,25,176,3,252,227,204,25,213,220,28,55,180,82,4,164,69,107,170,149,201,241,113,148, 82,248,190,143,235,121,84,171,213,197,81,188,160,82,95,31,185,222,94,146,157,157,139,107,201,206,78,114,189,189,148,207, 158,93,18,64,244,247,247,79,87,85,245,75,229,185,217,111,59,65,103,187,214,202,31,25,25,125,179,161,177,105,135,235, 186,188,252,202,159,249,226,231,31,161,173,109,37,197,98,161,182,205,92,132,152,165,88,40,221,86,116,184,171,107,209,24, 32,215,219,187,184,182,20,128,7,120,67,3,67,185,161,129,161,110,32,4,4,77,211,12,111,218,182,237,254,145,209,177, 230,79,108,123,136,75,111,93,166,227,222,213,196,26,26,8,133,130,0,40,173,200,79,23,176,151,44,93,159,44,160,194, 252,197,100,161,151,62,224,250,190,95,185,158,205,62,115,252,165,63,124,203,52,205,85,66,8,163,255,74,134,117,107,215, 144,72,196,49,12,131,137,201,73,50,153,44,239,60,121,86,246,244,44,182,253,230,78,44,213,5,11,40,1,106,193,184, 6,100,3,86,54,147,249,107,54,147,57,185,144,60,243,225,245,59,7,50,131,159,179,12,107,147,48,12,91,105,255,223, 66,137,23,30,133,67,11,57,206,230,205,139,230,55,27,38,59,59,185,113,244,40,165,190,190,219,0,52,80,6,230,106, 198,1,64,50,191,77,110,238,140,190,124,241,141,35,192,225,90,110,165,6,13,55,1,204,158,63,207,229,135,31,166,240, 218,107,139,38,195,93,93,76,29,63,78,57,157,94,178,3,11,82,181,194,115,181,247,155,205,169,129,46,196,45,18,224, 107,165,76,33,37,218,117,111,49,95,80,241,244,233,249,92,41,231,231,70,13,222,186,45,243,86,160,186,100,64,95,46, 157,222,154,220,187,215,168,99,20,147,75,167,149,1,125,53,248,187,215,175,224,3,2,126,167,97,195,194,132,187,147,222, 121,24,189,23,254,119,165,255,2,42,94,210,26,247,166,50,222,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char NewFile1x[477] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,252,0,233,0,79,52,215,177,13,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,2,18,14,38,28,211,182,25,41,0,0,1,106,73, 68,65,84,56,203,173,144,79,75,91,81,16,197,127,115,239,141,86,36,125,37,130,208,202,91,22,220,212,238,92,102,169, 27,243,13,178,113,89,191,69,222,178,221,119,35,4,196,130,223,192,77,55,221,42,133,82,74,178,82,74,73,90,132,16, 255,69,98,155,222,119,199,133,38,198,24,147,84,122,54,51,12,115,230,156,51,82,46,151,183,107,181,90,145,17,152,157, 253,203,220,92,155,103,209,111,242,203,159,223,229,162,111,31,225,207,190,100,195,25,165,82,73,199,225,252,120,83,47,79, 223,104,231,188,160,151,39,43,157,139,198,226,174,182,178,235,218,50,51,174,171,210,108,54,9,33,0,32,34,61,245,140, 217,99,218,126,33,227,190,34,102,9,235,76,38,216,246,106,199,183,91,83,206,87,123,7,6,201,221,106,228,8,107,234, 136,121,133,184,2,96,49,42,70,211,95,139,224,94,186,254,172,131,228,235,94,111,58,11,76,129,56,16,11,130,0,23, 110,52,89,8,58,79,208,231,216,80,69,211,105,64,208,180,162,222,155,122,198,166,21,247,208,231,187,135,2,175,241,225, 39,224,177,90,1,20,239,95,232,233,89,235,211,204,252,247,131,145,17,68,4,229,41,29,93,67,117,129,52,253,1,60, 97,107,231,208,108,108,108,191,5,112,163,200,183,53,139,215,60,34,66,20,69,52,26,73,79,212,48,33,250,127,211,143, 123,17,134,57,120,136,124,199,193,176,165,193,217,176,29,51,169,221,177,17,114,185,28,143,129,139,227,248,67,146,36,197, 127,33,197,113,252,158,255,133,43,204,61,153,96,123,172,20,201,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char NewFile2x[1008] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,167,73,68,65,84,88,133,197,151,75,79,91, 71,20,128,191,51,115,109,12,198,46,16,76,32,37,155,170,82,217,100,209,13,21,139,238,186,233,182,127,128,5,187,254, 136,110,187,236,138,238,42,245,15,244,31,84,106,165,46,42,161,134,70,65,106,67,34,226,146,18,8,184,53,132,151,31, 220,153,211,197,181,145,177,239,195,184,84,61,210,104,102,52,215,115,190,243,154,241,192,255,44,242,95,108,170,202,24,39, 133,5,242,110,6,23,140,3,96,195,6,109,91,103,170,185,47,66,59,17,96,125,125,253,179,92,46,247,173,136,148,140, 49,24,99,240,222,227,189,39,12,67,156,115,177,125,119,60,94,120,203,244,59,199,76,22,79,153,24,111,16,4,87,120, 239,113,206,182,230,231,106,95,127,252,209,203,239,144,198,115,41,81,3,8,250,1,172,181,223,172,173,173,149,68,34,182, 48,12,9,130,160,99,153,246,89,170,55,199,250,6,209,223,16,221,1,221,3,173,33,52,162,53,41,142,253,240,227,197, 231,72,174,138,248,9,213,214,99,17,234,3,0,97,24,78,137,8,213,106,21,17,193,57,71,177,88,164,221,110,211,133, 234,239,163,113,155,188,221,34,31,108,19,152,29,114,193,62,86,106,168,68,17,48,210,102,241,193,229,24,20,30,161,192, 153,185,84,109,252,60,0,208,181,74,68,174,91,239,60,9,192,202,17,129,61,36,176,7,228,236,62,214,156,35,246,3, 144,123,157,47,234,204,85,182,64,242,75,224,207,193,215,56,159,124,49,0,224,189,143,85,152,6,2,16,4,167,88,243, 22,35,117,172,212,16,187,4,178,132,152,197,232,91,94,99,115,103,192,223,15,193,238,129,169,32,205,251,169,0,195,122, 162,235,98,145,38,70,154,32,227,32,51,136,121,8,246,195,206,198,130,152,151,32,229,28,122,85,70,100,2,111,75,177, 0,113,97,136,115,127,47,64,82,104,162,66,187,153,188,215,98,229,106,0,192,57,151,170,60,49,15,164,128,106,1,165, 128,250,75,196,212,163,74,112,221,157,95,163,254,47,208,211,16,220,25,170,151,4,110,176,10,226,0,146,230,55,173,157, 65,153,70,153,197,83,199,250,87,145,221,114,216,89,63,198,93,253,1,184,87,224,14,192,215,56,105,189,49,105,0,155, 155,155,177,0,113,205,115,31,229,1,94,223,197,249,69,156,47,130,219,6,247,164,211,182,57,60,106,130,182,182,209,118, 21,209,103,50,207,69,162,7,0,150,151,151,175,235,63,59,20,5,60,239,225,180,17,253,88,139,40,179,224,163,121,144, 43,83,221,125,204,210,251,173,167,208,126,74,177,185,5,49,39,161,115,14,85,141,172,186,101,73,42,21,156,62,2,38, 80,63,141,145,19,32,2,176,50,197,139,157,223,249,244,19,247,19,197,230,150,72,148,29,169,30,232,151,97,114,2,102, 113,76,163,28,227,57,66,244,28,36,143,55,11,252,242,235,247,200,228,197,147,222,61,135,174,130,44,229,55,75,47,64, 169,160,90,137,166,10,202,4,151,141,129,148,27,14,160,215,194,172,242,76,18,85,189,14,105,38,64,255,173,215,149,219, 158,13,105,183,103,34,64,24,134,177,74,179,128,226,0,250,101,104,15,196,41,206,58,7,70,5,72,60,136,0,54,54, 54,48,102,48,113,134,5,52,198,100,230,198,192,238,97,24,94,199,106,101,101,37,245,98,74,82,156,228,161,56,73,13, 65,255,213,156,230,137,248,51,33,91,82,67,48,140,210,172,181,44,152,216,42,72,42,195,81,192,186,199,122,146,140,228, 129,187,148,91,221,5,89,50,138,231,70,2,232,173,140,44,16,85,77,5,235,7,40,27,99,78,85,181,92,46,151,17, 137,222,5,65,16,252,235,188,0,200,231,243,103,192,60,112,12,180,250,1,74,64,101,111,111,239,203,213,213,213,47,68, 58,47,138,187,147,230,238,238,238,87,192,2,96,129,3,192,247,250,112,12,152,3,238,1,83,157,185,189,43,229,68,198, 94,0,117,224,79,224,28,226,95,199,99,64,161,211,223,213,235,217,1,87,68,110,111,209,243,63,253,31,124,49,200,214, 41,116,130,201,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char NewFolder1x[635] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,11,17,15,7,0,85,79,247,45,0,0,2,8,73, 68,65,84,56,203,165,144,61,104,83,97,20,134,159,239,246,222,150,123,83,73,219,180,36,164,181,10,86,92,21,7,21, 252,157,196,201,74,20,69,7,21,23,65,196,193,77,16,93,157,4,17,65,80,91,39,17,113,112,178,69,176,149,46,186, 212,64,37,14,45,65,45,66,219,104,171,33,189,247,230,187,63,199,33,33,173,165,65,197,135,15,190,225,156,243,158,247, 188,234,196,201,220,141,76,38,115,147,53,104,173,107,127,85,95,28,122,244,248,62,77,80,151,175,92,146,243,103,47,172, 91,244,125,143,135,67,15,40,151,203,167,159,61,125,254,36,156,63,170,0,11,8,204,244,11,105,8,228,142,29,167,240, 177,208,108,9,99,227,175,105,49,132,222,12,12,108,22,250,50,50,118,228,160,92,7,222,155,0,182,237,208,145,236,108, 42,144,27,28,164,187,227,27,3,27,103,233,72,245,16,132,214,161,216,40,222,85,241,220,109,83,107,141,231,185,188,250, 80,97,170,228,172,51,46,12,164,127,114,102,95,17,171,189,23,195,62,133,99,118,177,236,77,108,47,126,30,189,215,112, 48,85,114,184,115,245,48,190,142,126,15,137,144,100,235,52,89,187,132,237,100,105,49,83,40,101,96,153,54,161,72,194, 4,240,60,23,128,185,37,159,226,194,242,26,129,152,148,3,65,247,6,178,209,52,237,106,2,203,218,70,168,39,41,206, 181,98,250,190,143,109,59,77,239,23,12,150,188,30,10,165,157,84,244,12,253,250,45,118,91,30,55,72,48,146,239,199, 116,93,183,225,160,25,145,152,124,247,210,84,116,146,217,242,22,218,90,124,146,237,125,204,204,79,210,200,224,207,24,84, 35,135,170,91,235,109,179,109,170,129,137,177,58,131,191,37,138,98,252,64,0,86,28,88,70,140,0,34,130,82,10,17, 65,4,98,17,162,72,8,162,24,29,10,213,48,34,136,132,100,162,117,69,192,243,92,54,37,171,44,86,52,95,23,61, 16,69,140,80,127,136,128,32,136,212,133,129,48,90,229,96,190,180,192,142,61,123,201,127,250,81,31,170,109,23,129,24, 65,80,32,210,112,181,107,107,23,163,47,71,232,244,103,135,213,254,115,183,198,93,171,247,0,255,72,34,248,242,238,205, 240,181,221,252,47,191,0,92,182,248,138,55,225,154,169,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char NewFolder2x[1399] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,46,73,68,65,84,88,133,237,150,203,142,28, 73,21,134,191,136,204,172,172,123,85,219,237,246,116,247,152,49,140,25,152,25,216,33,193,14,137,89,176,2,36,216,120, 5,66,60,128,247,214,72,120,205,30,9,158,129,87,48,59,132,64,130,141,5,140,4,152,25,172,158,238,174,174,170,118, 221,178,50,43,35,226,28,22,229,174,190,84,219,110,35,143,52,18,28,233,72,169,80,196,249,191,248,79,68,102,194,255, 122,152,207,162,168,78,185,65,72,219,68,90,65,77,32,90,204,168,51,48,134,242,185,0,247,239,223,127,232,189,255,224, 42,2,81,20,61,76,211,244,187,15,30,60,144,53,97,155,220,38,36,219,216,184,139,152,20,36,96,116,10,190,135,231, 137,217,40,62,57,187,38,62,121,240,222,127,112,247,238,93,178,44,67,68,16,17,66,8,136,8,170,186,74,128,71,143, 30,125,179,223,239,127,7,120,184,18,207,216,65,171,239,33,233,29,140,189,133,38,55,176,84,193,56,8,35,112,7,68, 229,117,157,86,106,166,85,126,180,6,96,173,93,236,237,237,165,251,251,251,136,8,222,251,21,200,73,158,64,52,26,141, 186,136,252,224,4,64,143,233,32,213,119,48,213,247,161,242,30,38,254,18,68,111,128,109,0,14,227,7,104,244,111,34, 83,39,44,208,121,109,98,234,249,167,23,29,144,110,183,75,150,101,132,16,214,242,4,64,68,48,198,68,198,152,159,222, 187,119,239,103,198,24,126,241,235,99,251,133,221,190,185,245,230,200,238,110,103,118,163,27,153,40,222,5,211,36,137,23, 121,90,217,111,162,7,29,20,176,58,39,44,134,170,28,24,131,172,0,84,181,232,245,122,181,94,175,71,8,97,229,192, 137,248,89,0,128,122,189,222,216,220,220,164,211,169,113,115,243,99,182,54,3,91,215,23,92,219,112,216,248,93,108,116, 7,99,175,17,252,172,134,253,215,28,216,64,247,222,66,147,67,8,55,121,74,11,24,159,115,160,217,108,210,110,183,241, 222,227,189,95,115,224,36,159,1,47,207,75,24,210,172,30,226,218,199,24,51,69,233,2,59,152,232,43,216,232,109,148, 190,193,152,4,211,23,228,224,6,68,93,212,180,72,235,117,152,159,2,136,72,62,24,12,56,58,58,90,57,112,81,60, 132,176,118,32,27,245,156,110,107,76,81,100,72,40,17,137,176,164,64,27,27,127,121,57,207,212,13,164,6,76,12,26, 131,141,32,172,221,2,95,175,215,105,183,219,252,125,96,249,221,94,243,69,55,113,21,77,63,103,58,123,140,102,9,173, 66,169,134,146,138,76,80,191,143,240,7,68,38,204,221,211,182,47,75,70,211,173,27,143,62,222,254,226,95,158,220,250, 209,135,63,252,229,111,206,1,168,234,124,56,28,210,239,247,233,141,186,124,255,219,223,224,91,95,219,189,18,68,183,250, 103,58,213,14,157,106,133,102,250,152,40,62,192,216,4,232,97,77,65,148,236,35,118,136,154,29,190,254,206,87,249,253, 71,33,166,203,244,28,128,115,206,167,105,74,171,213,34,204,234,52,106,21,254,121,48,227,112,148,191,20,96,163,30,177, 219,173,177,221,105,115,179,189,201,102,227,19,226,228,24,99,150,183,80,228,152,241,188,201,113,118,29,175,215,120,50,76, 38,198,44,123,112,214,129,108,60,30,51,24,12,152,21,77,234,213,132,210,203,115,69,207,198,40,223,166,86,25,147,216, 2,128,50,84,105,84,38,36,209,132,160,49,69,249,6,163,252,26,227,252,77,202,240,22,123,125,25,156,172,93,1,132, 16,124,20,69,203,91,48,171,208,168,38,100,51,119,37,0,85,203,209,228,206,210,73,73,201,202,14,181,100,74,28,121, 68,44,11,223,96,148,117,152,150,111,147,23,239,163,252,181,127,25,192,108,50,153,48,26,141,40,220,54,181,52,161,124, 186,184,18,0,128,151,10,7,163,119,153,21,155,116,106,135,84,43,51,34,227,80,181,76,139,38,251,163,93,154,181,29, 140,119,4,180,183,6,224,156,43,163,40,162,213,106,225,198,150,90,26,227,194,213,90,176,114,2,195,164,216,98,82,108, 97,77,0,132,133,51,20,207,140,220,104,89,38,51,7,94,246,215,0,84,117,154,101,25,211,89,6,220,38,137,13,65, 244,149,0,78,107,193,34,88,74,7,162,167,53,42,145,101,150,151,33,160,159,174,1,56,231,74,85,37,109,116,104,104, 194,180,240,47,21,81,61,21,208,229,38,16,1,47,130,94,194,110,140,97,150,149,37,202,165,135,112,146,231,57,227,210, 211,172,199,100,103,0,84,33,136,34,170,4,89,230,101,2,47,11,81,101,156,229,94,141,30,175,1,148,101,89,136,8, 113,181,77,154,86,152,47,2,62,40,46,40,33,8,255,93,51,206,71,16,101,60,43,213,42,71,107,0,34,50,201,243, 156,145,45,177,13,195,241,172,36,47,195,107,144,61,13,23,132,172,112,198,112,201,123,192,123,175,34,178,136,170,205,52, 68,9,121,25,150,187,190,176,245,171,56,241,188,246,20,165,176,40,92,66,133,225,26,128,170,78,156,115,102,186,16,170, 54,34,43,2,206,159,86,122,161,176,190,104,206,114,212,0,147,220,227,36,84,254,244,171,31,31,195,79,214,0,140,136, 56,146,102,37,168,33,119,178,250,228,234,122,189,11,3,47,249,185,86,80,3,195,201,130,8,51,7,179,170,114,238,99, 180,40,189,29,46,170,236,196,9,11,247,42,47,161,171,29,209,209,211,41,170,254,49,208,5,70,231,0,142,142,142,254, 40,183,191,151,56,31,243,248,31,79,94,65,252,234,97,84,134,135,127,251,237,207,207,141,157,121,174,1,155,207,232,106, 64,250,26,181,29,32,64,6,28,1,3,158,217,118,177,121,230,153,112,13,72,94,51,128,3,114,78,254,197,254,31,159, 151,248,15,186,190,74,254,47,72,106,105,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Open1x[672] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,29,73,68,65,84,56,141,141,147,191,75,151,81,20,198,63,231,125, 175,111,73,160,107,4,225,210,82,208,24,168,75,63,164,37,13,114,106,208,165,197,193,160,230,134,254,130,134,16,55,135, 138,6,251,15,4,35,133,8,77,43,104,104,138,16,33,181,69,66,45,205,239,247,222,115,207,105,248,234,155,150,96,207, 112,238,185,151,123,159,231,57,231,222,43,67,67,67,28,68,202,205,134,136,148,238,46,34,2,64,81,20,34,34,180,181, 181,125,254,181,221,184,92,85,213,250,254,254,208,213,213,245,212,221,111,238,47,44,45,127,57,241,236,201,115,138,162,64, 68,216,39,17,17,38,95,76,158,159,158,158,250,128,115,17,248,1,16,204,108,112,112,112,176,211,204,200,57,51,54,254, 152,149,149,21,154,205,38,0,238,78,206,25,51,99,120,104,152,173,205,205,179,11,239,23,230,227,110,186,84,85,213,110, 72,41,185,170,178,190,190,142,170,238,91,102,241,221,226,161,210,122,186,187,1,24,29,189,43,229,68,184,48,55,255,102, 12,99,100,143,32,161,170,152,25,34,66,85,85,244,93,235,195,221,107,23,101,89,214,34,189,61,189,242,118,97,238,182, 25,35,65,85,77,53,147,115,174,29,132,16,152,153,125,69,206,185,118,112,245,202,53,98,140,173,137,128,153,21,80,16, 82,74,30,99,172,9,246,186,77,255,141,129,90,253,239,177,253,100,59,56,6,16,98,140,166,170,76,204,59,13,13,208, 121,139,129,135,47,113,107,137,249,129,216,34,216,75,218,251,59,202,162,88,13,170,74,74,137,157,8,143,238,95,231,40, 72,29,254,32,170,241,96,124,230,76,72,41,89,74,9,112,74,129,143,203,91,71,146,28,68,89,10,231,78,159,2,113, 15,41,37,83,77,8,80,136,80,133,226,88,130,108,142,27,8,98,123,215,152,17,9,196,100,148,114,176,226,195,208,236, 52,147,161,102,52,83,6,240,160,170,22,99,68,36,240,109,163,193,207,134,162,217,73,217,49,115,204,157,108,78,210,86, 14,16,74,97,245,251,46,136,88,16,17,51,51,4,216,216,142,108,55,148,164,255,122,8,165,212,157,44,10,216,220,137, 136,187,7,119,103,109,163,245,96,94,127,90,173,63,207,113,216,217,217,5,145,175,33,23,237,179,83,75,29,119,192,89, 94,90,251,175,195,180,188,108,100,228,222,111,248,2,75,29,117,50,217,195,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Open2x[1550] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,5,139,73,68,65,84,88,133,197,150,205,143,28,71,25,198,127,245,49, 221,51,187,227,241,238,26,17,197,6,129,129,149,18,11,129,76,62,128,56,201,58,7,98,229,224,68,33,144,61,244,197, 130,43,7,254,1,36,255,5,36,23,20,32,66,73,20,205,45,178,184,36,36,50,78,2,56,7,48,72,17,200,226,176, 9,193,33,235,104,179,51,59,187,179,51,211,31,213,85,197,97,103,123,103,122,102,140,197,70,202,35,149,234,179,223,231, 169,247,125,171,171,68,20,69,124,150,208,183,179,40,203,19,127,187,6,165,148,46,168,84,94,79,98,179,26,4,65,239, 208,2,154,205,166,248,225,234,83,252,230,249,23,168,215,235,51,215,121,191,167,177,221,110,203,23,95,122,225,177,119,255, 254,238,59,89,146,125,39,8,130,248,80,2,46,94,188,40,174,255,243,31,172,175,175,79,16,122,239,113,206,225,156,35, 207,115,140,49,196,113,204,183,78,223,35,142,223,121,252,27,191,123,227,181,183,230,107,243,15,245,251,125,51,203,190,252, 95,2,174,95,191,46,0,47,165,100,191,8,33,144,82,162,148,66,107,141,82,138,74,165,66,16,4,84,171,85,164,148, 60,254,248,19,60,250,189,115,247,247,227,222,27,89,150,169,91,122,96,121,121,89,103,89,118,197,90,251,64,121,129,247, 158,27,255,249,64,40,165,10,55,3,188,253,135,183,113,206,142,173,211,90,115,223,189,247,147,101,25,97,24,242,253,39, 159,18,222,251,179,151,175,92,254,237,242,87,150,159,88,91,91,115,83,5,36,73,242,229,106,181,122,239,249,243,231,117, 28,199,5,145,115,14,107,45,191,122,254,57,164,148,99,100,103,87,206,22,237,209,113,231,28,141,70,131,75,151,46,1, 240,133,19,95,20,167,191,121,250,177,107,127,253,203,79,181,12,126,62,85,64,150,101,105,173,86,243,55,111,222,164,213, 106,21,241,245,222,99,173,69,8,129,82,138,36,73,8,195,16,128,63,93,253,35,214,142,111,40,168,84,56,115,230,65, 148,82,156,58,117,10,99,12,121,158,115,247,93,119,171,247,255,181,246,179,231,126,241,235,103,162,40,242,19,2,140,49, 73,154,166,98,105,105,17,107,45,206,185,9,1,82,74,94,123,253,85,30,89,121,132,165,165,99,60,252,208,195,128,152, 240,130,148,146,32,8,80,74,97,173,197,24,67,16,4,116,58,219,141,11,23,46,132,198,152,100,66,0,144,166,105,170, 90,173,54,173,86,171,16,176,31,2,239,61,74,41,158,254,193,106,97,248,205,183,222,28,203,129,50,188,247,4,65,192, 3,223,61,131,214,26,63,170,178,44,224,216,177,99,73,167,211,81,139,139,11,24,99,198,4,24,99,138,236,223,135,82, 138,115,143,158,27,35,43,147,143,182,181,214,0,179,5,172,173,173,101,141,70,67,110,109,109,21,30,0,138,243,189,79, 58,106,252,247,87,46,99,173,155,32,31,69,80,169,176,178,114,182,248,118,26,196,254,93,48,63,63,111,86,87,87,245, 230,230,38,215,62,116,92,125,223,23,132,251,33,56,12,172,181,32,100,190,183,25,241,242,87,187,175,254,8,70,254,132, 222,123,211,110,183,117,187,221,230,70,171,206,143,159,252,54,95,59,177,200,193,252,176,190,21,203,20,111,148,70,244,122, 171,199,47,95,185,246,96,49,48,162,208,212,235,243,53,99,12,230,223,146,35,181,128,15,62,233,179,51,200,1,63,204, 247,18,166,14,150,38,196,65,85,15,53,89,102,16,130,214,254,116,145,89,214,90,211,233,108,211,110,183,233,103,142,122, 45,32,119,30,33,64,32,134,38,74,197,207,42,254,160,184,189,226,156,39,206,44,73,154,131,23,27,19,30,240,222,167, 213,106,200,194,194,2,105,46,152,11,53,222,165,104,57,185,77,63,179,51,219,53,189,36,103,238,136,166,187,147,227,156, 47,110,182,66,64,158,231,89,183,187,75,167,179,141,177,159,167,22,106,60,30,53,20,112,219,15,130,210,98,239,97,55, 49,100,185,35,212,146,56,49,206,218,252,230,132,0,107,109,26,4,21,106,71,22,105,204,5,120,64,34,110,17,231,91, 240,14,191,177,222,211,75,12,214,121,180,18,84,3,69,63,78,51,33,196,230,132,0,231,92,186,187,219,99,99,59,227, 232,252,18,38,119,40,37,166,88,159,185,217,49,164,198,49,72,45,120,81,132,49,80,146,221,126,154,11,14,146,112,212, 3,137,214,26,21,134,212,169,208,79,45,214,150,204,139,177,106,152,99,190,168,173,243,56,15,89,238,38,78,164,24,170, 221,222,77,93,238,253,164,0,231,92,220,235,245,104,109,107,106,11,1,189,216,144,230,14,49,220,101,110,29,198,122,76, 238,200,237,94,134,123,49,65,81,106,141,15,196,198,178,211,139,149,144,106,106,8,18,33,4,50,172,163,117,133,110,108, 216,141,13,113,102,49,198,237,185,90,148,237,78,73,144,146,151,70,209,79,115,250,137,209,204,8,193,96,48,232,179,213, 173,18,214,224,198,230,128,157,193,193,83,110,214,254,196,140,36,45,59,71,0,221,65,70,150,219,202,223,142,191,183,117, 215,90,73,128,115,110,0,2,167,231,72,173,163,59,48,100,198,141,89,152,117,32,103,68,98,108,92,74,193,230,78,130, 20,114,16,141,60,205,198,114,32,142,99,186,177,229,248,157,33,115,85,77,53,248,255,200,198,150,12,93,36,133,32,78, 82,164,20,59,163,243,163,2,250,0,198,87,168,87,5,243,122,226,253,88,24,155,133,242,252,104,223,121,79,167,147,34, 188,216,154,16,208,108,54,131,149,149,21,219,29,100,108,15,60,31,109,108,15,159,223,83,89,110,155,116,180,239,61,108, 108,236,216,204,12,254,220,108,54,117,20,69,57,236,121,78,2,159,59,121,242,228,211,39,238,91,125,54,57,250,117,53, 229,247,127,40,120,112,2,200,211,254,71,31,190,243,242,79,90,239,93,189,10,236,68,81,228,246,175,182,6,240,37,29, 134,119,84,171,71,27,148,78,248,97,224,156,51,214,90,159,35,156,29,116,186,192,199,192,58,16,71,81,228,69,20,69, 52,155,77,9,4,128,226,224,190,253,180,225,135,197,0,121,20,69,14,70,158,100,159,21,254,11,203,184,36,40,178,187, 82,47,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Properties1x[464] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,11,4,10,21,27,198,210,43,84,0,0,1,93,73, 68,65,84,56,203,173,147,189,106,194,80,24,134,159,175,186,25,13,145,108,14,14,130,34,222,130,102,117,232,216,161,215, 224,45,56,40,113,200,37,136,46,93,116,105,233,218,193,81,112,245,2,78,68,232,162,100,208,156,213,41,118,16,131,49, 162,8,125,167,195,251,113,158,239,239,28,1,24,143,199,223,65,16,188,241,156,222,251,253,254,23,0,174,235,30,159,149, 235,186,71,128,236,37,114,191,223,19,69,17,0,34,18,251,231,179,136,144,201,100,48,77,51,142,37,0,81,20,225,251, 126,226,194,165,68,132,122,189,158,240,178,215,141,213,106,53,0,122,189,94,236,117,58,29,74,165,82,10,8,240,114,157, 193,247,125,86,171,21,237,118,27,173,53,90,107,60,207,67,41,133,82,234,62,0,96,58,157,98,24,6,205,102,147,110, 183,139,101,89,88,86,129,106,181,26,87,119,23,112,206,184,88,44,240,60,15,17,65,36,203,118,251,123,115,151,169,22, 78,25,45,102,179,25,197,98,49,142,141,70,31,4,65,240,184,130,203,222,195,48,36,12,67,180,214,28,14,7,134,195, 33,187,221,238,254,22,90,173,22,142,227,196,21,109,54,27,38,147,9,133,66,129,92,46,199,124,62,167,82,169,220,6, 136,8,74,169,212,59,112,28,135,245,122,141,97,24,228,243,249,199,239,224,52,184,36,164,209,104,176,92,46,239,3,46, 135,118,45,211,52,41,151,203,41,63,11,96,219,246,207,96,48,120,125,230,43,218,182,253,201,127,232,15,224,142,163,230, 109,49,155,36,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Properties2x[1115] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,18,73,68,65,84,88,133,229,151,223,106,20, 73,20,198,127,167,170,187,39,155,56,99,194,152,33,131,130,160,56,147,68,80,17,17,124,141,125,1,23,124,143,189,221, 203,189,18,188,204,19,236,43,8,222,8,138,34,248,143,104,192,191,152,139,137,177,153,36,211,51,221,93,213,123,17,187, 232,233,244,100,50,113,239,246,192,161,186,206,64,125,95,125,231,156,170,26,248,191,155,148,3,247,239,223,255,221,247,253, 13,17,169,43,165,80,74,97,173,197,90,75,154,166,24,99,42,199,105,49,17,217,139,227,248,143,141,141,141,127,142,101, 244,224,193,131,31,198,152,204,90,155,89,107,179,56,142,221,183,49,102,204,211,52,117,158,36,201,152,199,113,236,124,52, 26,101,163,209,40,187,119,239,222,143,50,158,87,14,164,105,186,40,34,124,248,240,1,17,193,24,195,194,194,2,113,28, 35,114,40,88,121,116,114,202,17,65,1,200,178,140,86,171,69,146,36,139,83,9,100,89,230,22,203,189,56,63,13,129, 73,241,74,2,214,218,74,64,17,97,107,107,11,99,76,229,130,85,49,173,53,157,78,103,34,248,84,2,69,112,17,225, 202,149,43,149,74,76,34,80,182,92,221,169,4,170,210,32,34,188,127,255,30,99,76,37,224,36,5,186,221,238,108,4, 138,0,229,58,232,116,58,99,187,15,195,144,87,175,94,97,173,101,97,97,129,243,231,207,211,110,183,143,45,198,83,17, 200,231,101,5,210,52,37,138,34,210,52,101,48,24,176,179,179,195,214,214,22,205,102,19,17,65,107,205,234,234,234,233, 9,60,127,254,156,27,55,110,184,121,183,219,61,146,255,110,183,203,227,199,143,137,162,8,165,20,73,146,112,238,220,57, 218,237,246,175,41,0,112,251,246,109,215,255,34,194,187,119,239,42,107,160,217,108,242,241,227,71,172,181,24,99,120,253, 250,53,223,191,127,199,243,60,214,214,214,102,39,144,101,25,34,114,164,37,59,157,14,74,169,202,179,225,243,231,207,192, 97,225,137,8,215,174,93,59,2,150,175,119,98,5,138,54,24,12,120,250,244,41,75,75,75,248,190,239,226,34,66,150, 101,206,211,52,197,90,203,203,151,47,241,60,143,245,245,245,217,21,40,238,46,247,253,253,125,60,207,99,111,111,143,155, 55,111,82,175,215,93,33,62,124,248,144,225,112,72,173,86,67,41,197,242,242,50,215,175,95,255,53,5,202,93,48,55, 55,71,20,69,24,99,120,244,232,17,65,16,160,181,102,48,24,16,69,145,83,197,90,75,24,134,188,120,241,130,32,8, 184,122,245,170,219,253,137,9,84,73,213,104,52,88,90,90,226,224,224,128,36,73,136,227,152,36,73,220,209,44,34,248, 190,143,231,121,4,65,128,49,134,213,213,213,177,98,173,90,87,149,3,105,154,142,205,243,197,149,82,92,190,124,153,252, 141,160,148,194,243,60,124,223,39,8,2,167,136,231,121,40,165,136,162,136,205,205,77,183,70,174,206,137,20,40,2,23, 137,244,122,61,230,231,231,217,221,221,117,71,118,49,85,214,90,167,74,28,199,68,81,196,252,252,60,151,46,93,154,157, 0,192,147,39,79,184,117,235,150,155,175,173,173,185,55,66,24,134,68,81,68,173,86,163,213,106,49,24,12,120,246,236, 25,89,150,185,84,248,190,79,191,223,103,123,123,155,139,23,47,30,1,175,36,144,166,169,203,213,157,59,119,136,227,216, 41,240,246,237,219,177,235,56,31,123,189,30,0,103,206,156,161,215,235,49,28,14,209,90,163,181,102,101,101,133,126,191, 95,9,126,172,2,229,131,8,96,125,125,253,72,123,230,7,83,238,97,24,178,185,185,137,214,218,41,161,181,158,157,64, 149,189,121,243,102,172,234,139,228,138,223,121,43,106,173,185,112,225,194,108,4,138,41,40,91,174,64,121,215,85,106,132, 97,200,183,111,223,92,183,156,152,192,175,40,224,251,190,187,61,23,23,15,223,159,59,59,59,255,29,129,105,10,228,247, 66,110,103,207,158,69,68,78,87,132,199,89,241,201,118,220,239,112,216,25,199,89,153,64,67,41,213,207,178,172,209,104, 52,92,207,123,158,55,177,46,166,153,136,80,175,215,1,8,130,96,15,88,1,126,0,163,50,129,58,176,252,245,235,215, 191,238,222,189,251,167,136,252,118,42,196,201,54,252,244,233,211,223,64,27,208,192,54,96,139,26,214,128,22,208,4,22, 127,206,39,247,207,140,224,28,110,246,0,216,5,190,0,251,80,241,231,244,39,240,220,207,113,250,99,255,100,102,128,132, 67,217,71,128,203,231,191,94,165,116,248,246,108,4,213,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Quit1x[799] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,156,73,68,65,84,56,141,117,147,79,104,20,73,20,198,127,175,170, 186,187,122,178,131,123,136,30,140,32,234,206,97,47,226,69,65,133,16,209,171,104,80,195,170,228,40,30,12,44,26,15, 146,187,46,30,246,224,31,140,160,87,69,80,47,158,68,80,20,36,106,4,133,21,28,221,29,119,66,38,108,64,103,162, 201,244,100,58,157,238,169,61,196,25,255,63,248,168,122,151,175,126,95,61,158,28,28,220,127,50,73,146,17,126,80,34, 130,239,251,216,192,98,140,1,17,178,44,197,6,246,207,179,103,206,159,48,73,146,140,244,239,218,67,185,92,38,138,34, 26,141,6,205,102,147,56,142,73,211,148,11,23,206,163,148,66,107,131,82,10,128,102,220,228,236,185,51,195,192,105,3, 16,4,1,65,16,144,36,9,105,154,210,106,181,112,206,161,181,6,64,41,141,49,230,99,47,104,109,232,89,217,3,144, 87,0,249,124,158,48,12,201,229,114,132,97,216,185,91,107,1,65,4,68,20,165,209,139,60,216,190,29,17,193,218,16, 192,152,118,78,107,45,206,185,78,110,17,65,41,133,8,184,44,227,217,209,33,178,106,149,15,197,34,245,191,95,195,127, 211,252,51,58,218,109,150,16,21,90,107,180,214,248,190,79,150,101,29,179,180,94,231,201,254,131,116,23,10,172,30,24, 32,46,151,25,223,187,143,101,201,2,79,203,19,247,58,4,109,19,165,84,71,54,138,120,216,219,199,218,29,59,88,190, 110,29,233,244,52,235,15,29,2,17,196,24,238,28,62,188,20,161,77,209,150,214,154,220,212,20,171,110,222,164,176,115, 39,63,25,67,116,255,62,40,181,36,17,242,125,125,136,82,116,12,218,175,183,207,238,91,183,88,93,40,96,227,152,232, 249,115,90,113,76,171,209,160,53,63,143,238,234,34,88,179,6,68,80,159,19,124,30,225,237,224,32,111,94,189,98,186, 88,68,133,33,139,149,10,217,220,28,46,77,201,234,117,146,74,5,151,101,159,8,218,255,208,54,74,86,172,96,234,200, 17,114,55,174,19,55,155,172,220,176,1,29,134,44,46,44,208,82,138,249,106,21,156,147,14,193,247,166,145,134,33,183, 183,108,193,21,126,161,92,169,144,68,17,127,141,143,243,239,228,36,47,138,47,241,186,186,158,126,97,96,140,233,104,98, 98,130,192,250,12,13,31,227,215,203,151,88,214,191,155,215,165,18,218,90,54,62,30,99,242,248,48,251,162,168,255,139, 8,158,231,81,122,83,194,134,62,191,29,24,32,159,207,163,181,38,106,212,89,254,251,16,178,170,135,217,187,119,153,157, 251,64,181,246,14,96,222,0,120,158,71,173,86,37,89,92,96,243,214,77,120,158,143,115,45,230,234,179,128,124,218,204, 109,189,252,188,173,151,247,239,107,204,204,204,44,25,248,190,127,234,234,181,43,35,181,90,21,17,97,236,209,216,55,235, 252,117,57,231,8,130,224,15,32,253,31,63,61,253,93,147,0,165,101,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Quit2x[1725] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,6,58,73,68,65,84,88,133,157,151,77,104,92,215,21,199,127,247,125, 206,183,173,177,12,178,198,182,198,145,210,84,137,141,48,38,8,39,81,179,48,169,86,193,96,18,104,136,77,91,178,200, 166,197,219,224,85,55,77,19,39,133,102,149,77,10,73,63,232,190,116,81,104,67,178,72,198,166,245,34,24,34,172,34, 169,184,110,98,235,219,150,70,111,222,215,189,183,139,153,247,252,102,52,51,10,61,112,153,55,239,205,187,231,247,63,231, 204,189,231,10,173,53,255,135,9,192,4,28,192,234,92,39,166,1,9,68,157,161,58,247,250,154,5,240,250,149,215,126, 25,69,209,181,239,228,89,8,12,195,192,117,93,242,249,2,185,92,14,199,182,49,12,3,141,70,74,69,24,134,184,174, 251,193,245,119,222,187,6,4,29,160,193,0,81,20,93,251,241,149,159,178,184,184,72,171,213,34,138,34,130,32,32,12, 67,162,40,74,71,28,199,72,41,177,44,139,98,161,192,213,171,87,25,31,63,134,16,162,19,20,208,90,227,121,30,239, 253,250,250,85,224,237,142,243,129,81,176,210,11,203,194,52,77,44,203,66,74,153,94,43,165,80,74,145,164,202,48,12, 28,199,161,92,174,144,207,231,48,77,11,33,68,7,162,13,80,42,149,24,25,169,2,148,128,102,135,110,56,128,227,56, 88,150,133,109,219,72,41,209,90,119,141,196,180,214,56,142,67,177,88,196,178,218,161,55,12,35,19,1,5,64,169,84, 2,200,209,93,31,131,1,92,215,197,113,28,164,148,216,182,13,144,42,215,90,167,42,181,214,216,182,141,227,56,24,134, 145,81,47,58,51,25,128,198,105,207,97,102,30,12,7,112,28,39,5,72,20,39,142,129,212,89,2,96,119,10,47,49, 33,32,9,84,155,71,36,52,67,45,253,129,16,2,211,52,113,28,7,215,117,83,39,182,109,227,186,110,154,30,203,178, 210,122,73,224,250,137,20,143,239,137,191,60,253,116,225,143,66,156,27,26,129,36,148,134,97,96,154,38,174,235,166,247, 18,229,66,8,148,82,25,128,193,2,19,182,133,247,223,47,54,239,220,249,179,128,105,160,56,52,2,217,156,38,223,19, 197,89,245,143,1,6,135,22,96,253,139,47,74,183,223,122,235,175,83,175,188,50,147,63,118,172,111,49,118,1,100,29, 247,2,37,213,110,154,102,166,242,97,80,141,9,207,227,179,249,249,79,190,247,234,171,211,147,87,174,88,131,104,173,174, 151,50,16,189,64,174,235,50,53,53,197,222,222,30,219,219,219,153,252,239,183,112,107,139,252,175,174,243,228,203,47,215, 79,188,244,146,169,118,119,65,41,227,79,66,60,234,249,233,55,251,0,250,169,79,114,111,219,54,71,143,30,229,200,145, 35,52,155,201,250,146,125,31,252,245,13,62,155,251,1,211,115,115,140,159,63,111,122,55,111,82,56,119,142,185,119,223, 181,49,12,27,173,65,107,116,28,243,183,55,222,40,30,24,129,236,223,239,198,141,27,84,42,21,102,103,103,113,93,119, 159,114,127,109,141,79,159,127,129,227,51,51,28,59,125,26,175,209,64,75,201,206,231,159,35,204,118,9,104,165,32,142, 41,95,184,48,56,5,189,234,147,113,248,240,97,70,71,71,201,229,114,220,189,123,183,203,121,235,254,125,62,125,97,142, 218,244,52,71,79,157,162,217,104,128,148,96,89,109,231,73,205,40,133,150,18,229,121,251,1,122,163,208,155,142,74,165, 194,217,179,103,89,89,89,233,212,65,71,249,234,42,127,63,255,28,181,201,73,142,140,141,177,247,229,151,160,20,194,182, 193,52,17,166,137,142,34,180,82,24,174,59,28,96,144,122,219,182,153,153,153,97,115,115,147,133,133,5,106,181,218,99, 245,15,30,16,110,109,225,78,76,16,44,45,17,173,174,34,44,11,29,4,40,207,67,54,155,232,32,104,11,180,44,140, 66,129,252,233,211,109,127,131,34,208,171,126,122,122,154,56,142,105,52,26,233,106,153,216,200,204,12,179,191,251,132,197, 175,190,162,245,232,17,102,185,76,176,178,66,120,239,30,241,230,102,234,28,64,199,49,114,103,135,120,99,163,63,64,111, 26,132,16,148,74,37,132,16,220,186,117,11,203,178,200,229,114,233,58,144,164,161,118,241,34,103,63,254,152,127,45,47, 227,71,17,249,51,103,210,194,195,48,246,13,29,69,253,83,144,77,67,242,233,121,30,11,11,11,104,173,201,231,243,88, 150,149,62,75,204,247,125,14,189,248,34,79,125,248,33,119,222,124,147,201,177,49,138,103,206,208,250,250,107,138,207,62, 139,112,28,48,12,68,7,64,249,62,122,16,192,160,191,98,210,160,36,247,131,32,192,205,229,16,40,226,88,18,199,17, 165,231,159,227,248,7,191,97,241,103,63,103,42,12,169,60,243,12,82,74,110,55,26,145,12,67,187,199,213,195,129,0, 253,138,49,11,98,154,38,75,75,203,212,235,117,170,213,106,39,21,237,61,176,60,59,203,189,215,126,132,248,253,31,252, 39,162,40,87,154,152,64,105,29,94,134,243,128,15,180,146,49,112,59,235,117,154,180,104,73,51,162,148,194,107,121,236, 238,238,16,199,81,123,147,178,147,231,46,193,228,41,214,231,230,126,177,188,190,238,109,45,45,37,205,194,46,176,215,129, 8,128,189,161,0,217,13,40,233,11,28,199,33,12,67,132,128,98,161,64,169,84,74,187,166,180,83,206,231,48,77,147, 226,229,203,141,255,212,106,63,249,239,246,182,71,28,107,224,17,176,3,108,1,219,90,235,168,111,10,178,0,137,114,33, 4,15,31,110,163,208,212,39,234,212,235,19,84,171,85,92,215,37,150,113,218,120,11,3,242,249,28,134,16,92,186,116, 233,193,63,79,156,184,253,205,197,139,23,220,32,248,33,176,166,123,14,34,67,139,208,48,12,242,249,60,107,235,107,248, 45,143,122,189,206,201,147,39,41,87,202,184,142,139,0,162,40,76,222,2,52,74,105,100,28,227,7,62,213,106,213,159, 159,159,15,241,253,127,0,55,95,239,227,43,3,160,187,148,151,203,101,214,214,86,249,246,254,6,245,250,4,227,181,113, 10,133,2,182,237,32,12,65,20,71,196,50,218,55,161,210,26,41,37,173,150,15,237,60,31,124,50,130,118,141,152,166, 201,161,67,135,104,54,119,89,249,247,50,181,227,99,60,49,53,65,206,205,97,217,54,90,105,162,40,36,138,178,29,95, 247,244,90,107,164,146,248,173,22,64,72,59,57,7,3,0,140,140,28,230,254,234,183,148,203,37,158,250,254,147,56,174, 131,97,90,196,82,18,43,213,118,218,89,124,178,157,64,215,236,90,163,148,162,229,167,0,67,15,159,41,192,250,198,42, 74,199,140,142,86,59,69,7,113,20,33,227,184,237,240,160,6,240,177,127,148,82,4,237,245,63,57,156,14,7,176,109, 251,237,143,126,251,209,181,126,187,224,65,206,147,102,165,27,66,99,219,246,59,28,16,126,0,209,231,120,222,219,236,127, 55,233,221,166,51,99,168,253,15,134,203,141,231,99,92,133,151,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Refresh1x[912] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,3,34,73,68,65,84,56,141, 109,82,77,108,84,101,20,61,247,123,239,149,249,173,51,109,7,91,168,182,10,134,18,166,161,162,51,141,127,209,152,70, 55,196,96,88,168,188,68,140,144,129,240,179,97,7,27,12,77,12,17,116,97,162,224,3,163,49,76,37,152,52,1,55, 252,4,33,146,212,194,171,113,209,208,146,212,210,198,1,70,59,180,29,232,204,180,243,222,251,190,235,162,243,146,89,112, 146,155,220,197,61,39,39,231,92,98,102,248,72,101,178,207,52,232,218,17,16,222,244,164,106,213,132,152,39,194,184,227, 202,19,0,46,216,150,233,214,221,30,4,112,130,124,129,116,38,187,69,211,196,64,79,215,42,125,93,103,179,209,214,20, 1,152,81,40,86,48,50,118,191,124,103,250,161,39,21,239,182,45,243,108,122,87,54,195,140,239,0,196,136,153,145,202, 100,215,27,186,24,217,218,215,29,138,199,130,208,137,208,28,13,32,28,208,17,13,25,8,26,2,51,197,69,28,207,14, 87,10,197,138,29,13,53,244,62,46,87,13,102,52,17,51,227,213,61,103,79,245,172,107,251,52,24,48,196,173,209,28, 170,174,7,67,215,228,154,213,177,197,190,244,243,225,222,245,173,164,9,130,16,132,95,174,77,168,183,94,108,23,7,190, 190,234,56,174,108,209,1,128,153,63,188,51,93,16,174,167,88,49,47,50,227,51,199,149,103,198,167,103,147,19,247,230, 143,94,239,104,238,218,183,117,83,40,17,11,225,227,119,187,68,45,6,2,160,4,0,72,169,194,85,199,243,146,47,60, 251,131,148,234,17,128,65,219,50,243,182,101,94,249,227,219,143,94,26,157,44,236,221,125,236,18,238,63,44,97,122,166, 12,169,24,0,3,0,11,44,175,170,233,169,72,127,99,36,240,85,103,251,202,110,0,83,117,105,235,186,38,118,110,123, 39,233,118,62,29,69,162,113,5,52,65,190,3,214,107,119,241,95,63,223,188,128,39,227,180,39,213,107,23,135,39,171, 87,237,169,37,223,188,227,170,0,0,246,91,168,2,48,106,4,174,155,223,0,236,4,224,62,65,88,183,45,243,158,47, 224,157,63,250,190,6,16,152,25,23,237,127,212,169,243,127,229,164,84,61,182,101,22,235,89,135,179,99,171,74,229,165, 142,223,71,198,111,0,136,233,0,64,4,16,17,238,254,87,134,33,24,39,7,255,36,0,95,212,147,83,153,108,152,136, 238,246,110,92,123,38,63,51,151,2,160,1,168,10,0,16,68,4,0,29,137,16,86,183,132,241,229,254,183,169,173,37, 114,236,149,61,63,223,74,101,178,233,154,198,246,21,134,174,231,242,179,7,242,133,226,235,154,70,174,109,153,174,88,118, 64,120,92,113,113,97,104,138,61,143,209,190,50,138,195,59,222,8,125,208,151,124,185,181,57,114,45,189,107,192,53,116, 241,141,84,50,62,247,104,1,77,141,65,210,132,24,4,0,255,145,168,255,199,161,165,137,220,220,228,165,225,201,206,204, 150,77,225,68,44,136,238,181,9,122,174,61,30,42,150,93,252,59,91,130,227,120,20,9,26,56,119,121,180,226,73,117, 4,0,150,31,73,49,77,228,230,78,223,60,185,45,249,160,176,240,73,255,247,55,230,143,15,220,44,13,223,206,35,63, 91,70,213,149,16,68,40,204,151,228,185,203,163,139,82,169,140,109,153,99,0,224,183,240,19,128,237,182,101,114,45,48, 3,192,123,13,134,182,87,49,111,144,82,197,13,93,155,33,194,80,213,145,135,108,203,252,219,15,247,127,46,85,118,106, 19,101,204,198,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Refresh2x[2024] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,159,73,68,65,84,88,133,197,151,105,108,84, 215,21,199,255,247,222,183,204,230,25,15,182,217,113,13,105,106,132,161,44,6,92,53,228,3,40,37,37,81,139,66,21, 90,227,128,154,20,227,166,138,20,181,82,148,150,182,82,251,161,249,80,169,173,212,70,69,161,44,105,176,73,5,161,202, 210,170,9,17,113,67,9,77,0,99,150,26,18,136,177,13,120,183,103,179,103,230,173,247,244,195,204,208,231,5,219,223, 122,164,171,55,247,205,185,231,255,59,119,206,61,239,13,240,127,54,54,19,167,213,79,55,46,243,249,213,239,40,28,143, 59,14,85,56,174,91,196,57,115,24,88,150,11,214,110,187,242,35,215,117,222,49,147,190,51,109,199,183,91,83,197,90, 91,127,228,91,23,254,180,243,196,140,0,214,213,31,173,210,53,126,48,18,242,45,221,176,178,60,84,62,175,88,132,131, 26,116,77,129,35,37,76,195,198,112,202,64,207,96,202,189,124,115,32,125,183,63,69,140,211,65,211,162,223,183,30,172, 235,26,31,175,250,153,198,205,224,120,175,229,192,83,247,116,239,11,176,174,190,233,187,126,93,249,195,246,175,85,5,151, 46,46,101,68,128,36,2,73,130,75,4,41,115,126,4,128,51,64,225,12,169,140,141,214,27,125,246,233,243,157,182,67, 110,147,35,177,183,101,255,142,33,0,88,251,189,198,135,20,69,156,180,93,55,48,45,192,186,134,166,109,1,93,61,242, 252,183,107,2,197,97,31,100,94,144,64,32,153,3,113,36,129,136,32,37,65,18,32,41,7,162,171,28,174,36,124,116, 233,182,125,186,165,211,112,128,6,38,233,186,16,252,95,91,55,85,133,222,56,121,5,94,0,101,188,248,250,93,127,46, 225,140,31,106,120,162,58,48,43,226,131,75,4,195,114,16,75,100,97,88,14,20,33,80,20,212,16,9,233,32,2,108, 87,194,114,36,72,18,108,73,48,109,23,130,51,60,188,186,66,173,172,40,83,255,114,242,202,129,120,50,27,120,98,211, 50,90,56,55,60,33,217,9,0,20,80,235,215,47,159,175,207,43,43,194,213,246,1,122,255,227,91,114,48,145,225,140, 129,17,81,206,135,72,10,206,236,197,243,163,230,170,165,243,67,149,21,37,220,167,50,164,77,23,25,211,70,50,99,33, 149,73,33,168,43,216,177,101,85,32,107,216,208,116,149,185,146,166,7,208,5,223,83,83,181,192,119,232,237,139,238,173, 187,9,56,146,132,224,220,180,44,167,155,184,187,163,101,255,174,79,0,160,122,207,177,200,245,91,67,53,237,221,241,221, 128,124,124,77,229,2,182,162,114,158,31,92,32,109,184,112,37,16,79,219,24,53,93,204,137,232,104,239,27,197,178,133, 19,119,96,76,13,84,239,121,37,224,87,138,7,87,86,206,209,46,126,218,135,104,56,168,40,10,71,223,80,34,46,28, 245,139,255,62,184,61,54,89,205,172,120,182,41,234,119,249,179,130,179,159,124,101,229,34,223,202,202,121,202,96,210,68, 60,99,67,74,66,33,243,181,15,68,241,235,87,207,80,203,129,58,94,88,203,189,129,56,21,45,38,80,224,210,103,189, 226,11,11,74,88,73,52,24,19,66,244,131,88,219,253,196,1,224,234,190,186,248,185,253,181,47,25,22,85,158,189,220, 117,242,213,55,47,160,36,164,160,188,52,0,162,92,177,2,0,231,12,156,193,28,163,233,157,72,38,185,97,57,208,124, 190,225,144,223,247,65,64,215,63,112,28,231,38,145,59,225,76,79,102,173,135,106,123,0,250,88,81,184,165,40,10,226, 163,22,136,0,34,128,49,128,179,137,135,110,76,13,40,54,92,71,0,179,163,161,127,4,3,250,53,198,121,178,56,18, 12,12,13,143,204,168,99,86,215,55,126,63,236,215,127,92,251,216,42,173,63,105,32,145,182,32,145,235,21,133,29,152, 18,32,235,200,46,85,112,140,102,178,31,246,119,59,237,182,34,70,147,217,132,233,186,246,232,116,226,53,13,77,91,125, 186,246,219,93,223,88,237,215,117,21,65,159,134,242,210,0,192,0,6,6,85,112,8,6,15,78,206,38,32,173,123,250, 245,69,231,15,215,222,153,73,198,5,91,179,251,181,77,12,252,212,76,253,167,236,132,213,187,27,73,112,150,45,204,37, 145,66,4,117,178,64,210,213,102,183,30,222,62,56,83,225,39,159,60,38,186,34,70,249,185,3,187,58,10,247,38,244, 1,0,120,249,133,175,251,129,92,241,72,34,216,174,132,148,185,66,234,232,77,98,223,137,243,41,219,114,171,167,19,111, 110,238,240,109,220,184,216,40,204,219,139,173,111,50,226,127,133,39,113,62,217,66,73,132,203,157,9,180,118,196,113,185, 51,129,107,119,82,136,141,154,24,136,103,112,224,205,150,180,227,58,155,47,30,220,249,249,148,233,18,49,55,170,150,55, 183,13,204,253,159,24,185,64,174,137,77,9,48,222,102,133,52,168,130,225,143,199,206,73,195,118,235,10,221,112,42,251, 197,47,193,174,223,205,62,44,32,171,78,93,237,127,160,185,185,89,81,85,109,107,238,91,99,26,0,79,161,50,6,148, 20,105,200,100,109,0,196,5,120,109,245,158,163,165,211,1,116,70,46,133,227,105,247,171,0,95,166,112,170,106,139,207, 217,72,36,119,48,6,88,66,140,76,9,224,125,102,16,1,55,123,71,32,57,199,15,119,62,132,13,107,202,183,9,142, 246,117,245,71,158,175,169,107,156,216,220,243,150,150,246,163,170,194,170,56,163,101,137,180,181,246,248,233,235,77,69,225, 34,193,57,31,185,186,175,46,94,240,155,180,8,37,17,56,99,152,95,234,71,79,44,11,219,37,196,70,44,196,70,128, 37,139,202,212,89,209,34,245,242,167,189,47,117,118,15,253,106,125,195,209,19,182,35,95,211,12,156,255,164,233,169,84, 245,139,239,71,138,132,239,185,209,180,243,226,242,138,80,234,237,179,119,230,158,185,212,177,32,16,240,145,47,224,83,19, 137,212,5,175,214,164,199,240,119,63,218,140,172,229,34,145,202,34,28,242,163,47,145,69,247,112,22,253,9,19,174,148, 208,85,129,104,80,133,148,132,174,158,152,123,183,39,150,142,143,100,116,33,20,157,113,5,148,127,118,75,199,65,32,168, 187,209,104,88,209,3,126,220,233,234,25,201,154,230,15,46,190,178,163,113,202,29,32,2,110,222,73,200,195,111,181,240, 7,203,75,178,91,54,60,232,87,4,7,99,4,2,144,49,29,164,13,7,66,48,68,163,97,49,187,44,18,38,9,140, 164,13,164,13,27,142,75,224,156,49,174,104,112,73,42,142,11,164,146,105,88,134,49,106,198,213,99,94,173,241,0,12, 0,110,245,38,208,248,247,214,145,225,219,231,31,181,83,21,155,58,122,98,63,95,179,116,161,186,164,98,182,146,76,219, 136,165,45,216,14,193,114,36,76,91,66,18,221,91,206,53,29,66,230,250,134,229,186,0,49,100,50,89,12,246,245,103, 141,68,207,174,182,227,47,48,228,106,79,2,128,240,136,115,0,250,130,234,109,63,187,114,163,63,61,116,251,82,237,173, 119,127,115,171,191,237,189,207,204,108,242,111,35,124,246,188,207,111,199,23,250,117,5,115,162,33,238,215,21,48,134,252, 123,33,64,50,119,149,36,243,121,228,118,43,62,156,148,3,189,131,153,204,96,123,67,219,137,189,103,243,58,57,7,64, 178,123,232,128,6,64,171,222,221,152,202,38,110,63,115,237,141,189,205,133,123,133,81,90,245,200,146,249,203,31,171,245, 69,74,31,41,14,7,101,105,105,212,31,12,248,152,166,169,0,99,112,36,96,154,54,210,134,133,100,50,237,38,99,137, 172,109,102,254,211,125,241,173,159,246,95,121,167,3,128,53,110,152,204,147,189,6,64,255,114,237,203,123,174,188,254,220, 81,0,250,56,128,123,115,205,31,41,42,91,190,101,101,241,194,21,53,122,81,217,151,184,166,151,129,184,66,140,9,6, 57,42,29,179,215,136,247,125,56,116,227,159,239,14,92,63,213,89,16,243,10,231,175,134,247,20,76,42,150,31,234,184, 207,106,190,126,132,119,59,1,56,0,108,207,24,159,241,152,236,1,152,222,34,180,49,246,88,22,130,186,249,192,78,126, 97,65,88,96,108,35,163,188,175,215,223,246,172,243,66,25,249,235,164,127,76,10,63,135,138,177,217,142,23,46,20,83, 33,70,1,184,0,61,25,72,65,248,94,175,157,238,85,75,228,133,11,16,220,3,224,21,47,0,120,33,188,194,78,254, 222,4,155,209,187,222,36,107,188,163,32,238,133,152,248,15,228,62,246,95,132,61,194,136,109,50,115,118,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Remove1x[247] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,214,1,11,15,59,34,0,92,18,194,0,0,0,132,73, 68,65,84,56,203,237,145,177,9,131,80,16,134,191,7,105,220,192,58,43,232,8,25,35,173,109,70,8,25,32,11,136, 173,115,196,5,116,136,212,182,34,68,243,238,79,33,202,179,179,51,133,31,28,28,7,255,119,28,7,7,251,227,230,38, 205,202,26,72,54,230,154,186,184,166,0,167,96,152,60,111,23,70,19,14,24,189,86,9,105,42,7,220,243,215,178,40, 20,208,125,60,239,182,71,2,51,97,130,126,16,222,139,175,9,51,56,199,209,74,28,10,154,71,94,109,62,225,248,254, 63,241,3,172,83,45,219,70,228,128,216,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Remove2x[317] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,244,73,68,65,84,88,133,237,146,33,78,67, 65,16,134,191,125,143,144,18,130,107,208,56,4,22,213,11,112,2,20,154,11,112,3,20,26,69,130,168,170,226,18,132, 51,32,72,170,73,16,8,146,162,200,235,204,143,152,82,210,164,111,43,26,130,153,207,236,230,207,238,206,55,147,133,36, 73,146,36,249,103,202,95,62,126,114,254,176,219,12,187,125,128,231,187,139,143,117,103,118,250,46,159,94,78,180,173,64, 41,157,53,78,103,174,1,61,205,246,10,0,220,94,157,173,205,5,72,194,5,18,184,132,75,200,99,47,129,197,218,74, 106,175,239,31,123,107,84,5,204,197,244,237,147,166,132,188,123,20,53,15,1,83,100,230,194,12,76,48,55,45,207,205, 77,28,29,14,106,37,234,2,239,179,47,94,94,103,203,182,163,243,130,22,251,149,140,152,198,111,22,235,193,94,253,155, 85,5,0,70,199,67,180,152,134,251,106,215,46,97,38,220,99,228,63,153,155,112,98,2,155,62,82,85,224,102,252,180, 201,47,73,146,36,73,182,230,27,50,111,151,157,5,100,235,163,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Save1x[911] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,11,10,13,55,15,158,42,216,191,0,0,0,140,116, 69,88,116,67,111,109,109,101,110,116,0,77,101,110,117,45,115,105,122,101,100,32,105,99,111,110,10,61,61,61,61,61, 61,61,61,61,61,10,10,40,99,41,32,50,48,48,51,32,74,97,107,117,98,32,39,106,105,109,109,97,99,39,32,83, 116,101,105,110,101,114,44,32,10,104,116,116,112,58,47,47,106,105,109,109,97,99,46,109,117,115,105,99,104,97,108,108, 46,99,122,10,10,99,114,101,97,116,101,100,32,119,105,116,104,32,116,104,101,32,71,73,77,80,44,10,104,116,116,112, 58,47,47,119,119,119,46,103,105,109,112,46,111,114,103,103,138,199,71,0,0,2,132,73,68,65,84,56,203,157,146,77, 72,84,97,20,134,159,185,221,241,230,207,228,76,224,181,49,205,145,178,81,108,81,81,52,38,20,184,200,22,69,20,46, 66,40,44,130,138,169,193,86,45,42,202,69,17,84,16,6,82,180,40,10,34,176,40,40,106,91,208,34,137,68,138,166, 69,153,84,106,134,164,232,220,155,206,253,249,78,11,97,108,178,54,189,155,243,193,225,60,156,247,61,95,224,200,217,227, 39,63,91,21,218,216,184,51,9,84,1,91,129,134,160,38,217,208,194,159,63,22,25,206,205,187,231,207,157,224,31,10, 52,119,116,237,141,173,172,143,85,151,155,131,171,107,202,58,170,35,133,107,109,207,39,253,45,195,235,222,231,234,195,215, 81,226,145,55,203,186,59,239,12,255,21,144,60,125,190,219,157,26,59,236,137,198,168,31,102,218,40,99,129,30,164,173, 101,35,203,43,22,115,249,254,11,252,161,62,98,5,227,127,155,239,36,121,44,37,95,70,6,68,68,100,224,115,90,122, 211,3,146,186,246,68,18,7,47,72,207,171,47,210,245,244,173,180,158,186,46,239,6,135,229,119,89,150,37,169,142,164, 232,134,238,179,180,60,198,196,196,4,225,146,114,180,192,36,133,226,0,208,247,113,20,179,68,231,251,120,134,247,3,159, 88,178,168,16,2,0,66,65,65,1,0,186,231,130,40,193,87,138,237,39,110,204,219,177,119,112,2,215,243,185,216,243, 146,139,61,47,1,120,124,118,31,200,108,95,3,80,162,80,190,162,235,80,35,0,237,187,119,210,152,88,199,204,140,77, 52,164,209,148,88,207,222,214,237,0,236,105,94,129,242,21,34,50,7,16,17,34,145,48,21,101,49,46,29,88,199,205, 187,15,136,199,170,208,8,160,17,32,81,95,205,173,123,143,104,219,92,195,142,166,245,20,21,23,229,3,0,44,203,194, 52,77,170,163,181,57,72,227,170,229,212,198,42,185,124,251,33,109,155,107,216,181,41,129,105,154,56,142,147,179,168,3, 40,165,176,109,27,0,211,52,49,77,147,238,163,133,28,187,218,67,214,245,217,223,82,79,251,182,45,104,154,198,212,212, 20,182,109,19,10,133,230,0,134,97,80,89,89,153,23,222,154,134,13,60,187,178,1,0,219,182,113,28,135,233,233,233, 121,33,235,0,253,253,253,184,174,155,215,240,60,15,93,215,115,239,63,21,137,68,242,51,240,60,143,116,58,205,200,200, 8,153,76,6,17,65,68,48,12,131,161,161,33,66,161,80,174,90,150,133,101,89,249,87,80,74,81,92,92,68,48,24, 204,125,18,0,215,117,17,53,11,19,53,123,62,229,251,249,22,194,225,48,165,165,165,68,163,81,0,178,217,44,64,46, 237,120,93,28,165,20,241,186,58,148,82,44,137,70,115,150,3,169,142,228,25,224,52,255,167,206,95,147,59,51,76,213, 34,98,109,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Save2x[1971] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,106,73,68,65,84,88,133,197,151,125,112,84, 213,21,192,127,247,190,183,187,201,110,54,107,214,64,48,31,16,140,13,33,161,148,154,26,20,144,34,200,231,16,104,133, 88,235,160,14,163,165,99,255,177,51,181,3,173,253,160,29,167,214,145,113,198,63,218,153,82,103,250,135,211,78,117,176, 142,45,45,149,14,209,66,139,58,104,149,160,29,32,160,1,3,164,139,38,155,205,190,151,221,247,222,189,183,127,132,125, 77,2,72,29,233,244,204,156,121,247,235,221,243,219,115,206,61,119,31,252,159,69,92,105,193,204,181,143,119,104,35,54, 73,97,22,131,136,34,112,140,210,7,48,226,185,190,61,91,95,251,159,1,212,175,124,50,109,219,222,111,18,241,216,130, 121,109,141,137,233,211,170,228,53,149,229,4,129,162,127,96,72,191,113,164,175,144,25,202,191,173,240,239,236,223,253,189, 51,87,21,160,110,245,227,245,17,105,246,183,207,153,145,155,63,183,169,74,72,49,61,98,91,88,18,44,41,145,82,32, 4,28,57,126,70,237,217,127,36,95,12,204,173,253,127,218,118,228,170,0,180,117,109,143,230,243,177,87,22,181,55,157, 3,81,127,54,51,60,205,138,216,149,211,167,165,43,231,182,212,73,75,74,138,158,66,27,67,60,102,51,240,97,142,95, 239,126,61,163,61,127,222,169,151,30,57,247,73,1,172,201,3,241,198,21,15,93,91,149,88,120,46,147,107,233,237,207, 236,31,202,186,143,14,13,59,47,244,157,57,95,126,236,228,185,153,55,52,214,68,236,136,69,209,83,228,11,62,233,84, 156,100,162,172,252,189,254,161,235,179,189,127,121,238,83,121,160,190,235,201,114,43,95,236,182,44,49,199,55,122,205,7, 127,252,238,129,241,243,141,171,126,122,87,186,58,241,203,123,215,47,168,24,26,41,18,40,141,49,134,154,116,130,95,61, 127,32,247,225,240,232,162,79,26,10,57,190,99,141,20,230,25,97,78,7,90,221,49,217,56,64,223,159,183,253,118,112, 112,244,247,199,251,50,202,182,36,126,160,41,250,26,103,212,231,243,173,141,9,11,179,249,147,24,135,73,30,152,177,230, 209,13,218,136,150,155,43,222,126,214,24,243,139,72,36,178,196,178,172,9,144,195,126,156,209,107,110,100,249,226,118,6, 6,243,4,106,44,23,202,162,146,103,95,124,153,47,84,30,195,24,19,174,87,74,41,223,247,159,119,93,247,222,61,123, 246,20,39,3,216,227,59,90,91,167,165,14,254,161,181,254,217,166,77,155,150,118,118,118,34,165,12,55,52,198,144,119, 139,220,182,229,105,164,4,47,208,104,109,24,25,245,169,73,167,144,118,156,157,59,119,98,140,25,175,214,51,207,60,115, 103,119,119,247,27,192,19,31,11,80,244,245,233,249,77,31,140,136,65,49,127,197,138,21,252,225,149,30,190,249,228,75, 23,185,205,182,37,66,8,60,95,161,181,65,27,67,44,98,225,20,60,102,111,124,106,194,218,47,125,177,153,135,186,86, 211,221,221,253,0,176,3,48,19,246,26,223,201,236,123,228,95,209,107,54,124,117,217,237,183,167,45,203,162,99,118,13, 223,191,127,17,79,191,216,195,210,133,159,165,188,44,138,37,5,182,37,17,128,231,107,180,49,104,109,48,2,182,109,89, 141,148,2,99,224,245,195,239,115,110,224,60,223,248,242,92,82,169,20,109,109,109,205,66,136,165,187,118,237,218,119,89, 128,11,114,255,170,85,171,200,231,243,248,190,207,202,142,70,50,131,46,187,15,254,147,219,110,105,35,147,29,197,45,4, 24,12,198,140,133,197,45,6,188,240,215,19,184,197,128,246,230,26,2,175,192,145,163,125,252,252,91,75,209,42,192,113, 28,150,47,95,206,187,239,190,251,117,96,2,192,132,4,219,176,97,195,245,83,167,78,93,90,87,87,135,227,56,216,182, 141,109,219,108,94,59,151,27,155,171,121,245,173,99,76,173,42,71,25,67,54,95,100,224,35,135,247,206,14,115,230,124, 158,108,190,72,83,109,138,50,27,254,254,230,49,30,123,112,49,233,84,28,41,37,163,163,163,52,55,55,83,81,81,177, 126,221,186,117,53,151,5,16,66,60,176,113,227,70,225,186,110,169,143,214,26,165,20,15,223,221,193,180,84,140,87,223, 58,65,58,89,70,118,164,72,206,245,80,122,44,164,181,213,21,204,188,174,146,125,7,223,225,219,119,183,51,243,186,74, 140,49,8,33,48,198,224,251,62,203,150,45,139,70,34,145,205,151,4,88,178,100,137,45,132,184,175,189,189,157,124,62, 143,109,219,24,99,80,74,17,4,1,42,240,249,193,230,249,68,241,57,217,119,134,155,102,79,35,26,25,43,164,149,137, 40,55,181,212,240,242,193,119,232,92,48,131,142,150,169,40,165,194,211,35,165,196,117,93,58,58,58,0,182,108,223,190, 93,94,4,144,78,167,215,44,90,180,168,54,18,137,80,40,20,144,82,18,4,1,158,231,81,44,22,41,22,139,104,21, 240,232,3,55,147,203,14,115,118,224,35,230,207,158,70,188,44,194,173,115,235,121,237,237,94,234,171,99,220,113,235,140, 112,189,231,121,4,65,128,109,219,120,158,71,50,153,100,206,156,57,51,15,31,62,188,226,34,0,33,196,215,86,174,92, 73,46,151,3,32,8,2,140,49,225,38,198,24,180,214,68,44,195,143,54,183,115,252,228,105,6,179,57,214,222,50,147, 222,247,207,145,203,14,243,96,103,51,158,231,225,251,62,190,239,19,4,1,82,74,148,82,104,173,113,93,151,197,139,23, 99,89,214,150,9,0,235,214,173,171,173,174,174,94,213,208,208,128,227,56,40,165,200,231,243,0,148,151,151,135,197,72, 41,133,82,138,202,114,201,15,239,249,28,111,30,238,229,111,111,158,160,231,104,31,15,119,181,96,9,67,16,4,104,173, 1,40,43,43,67,8,65,46,151,67,107,77,161,80,160,169,169,137,202,202,202,206,174,174,174,186,16,192,182,237,251,214, 175,95,111,187,174,139,16,34,212,209,209,81,124,223,39,145,72,16,143,199,137,70,163,8,33,176,44,139,218,234,4,91, 239,154,67,207,209,83,108,253,74,27,83,171,18,68,163,81,226,241,56,201,100,146,100,50,137,231,121,56,142,131,148,18, 41,37,145,72,4,165,20,11,23,46,180,181,214,247,195,133,58,32,132,184,187,189,189,29,215,117,169,173,173,37,155,205, 50,50,50,130,16,130,32,8,194,182,101,89,36,147,73,96,236,252,223,156,78,243,187,159,52,80,81,110,35,165,68,107, 141,214,122,44,95,180,14,223,145,82,146,74,165,168,174,174,166,191,191,159,142,142,14,246,238,221,123,15,240,227,82,33, 250,76,50,153,100,100,100,132,179,103,207,162,181,70,202,177,244,176,44,43,52,168,181,14,243,161,212,143,217,224,251,254, 4,207,197,98,49,132,248,207,61,103,140,33,159,207,227,56,14,90,107,166,76,153,130,214,250,134,208,3,64,204,243,60, 108,219,14,95,28,127,1,149,158,37,168,203,205,143,159,43,233,248,185,82,110,12,12,12,132,237,176,20,7,65,192,241, 227,199,47,218,64,107,61,249,118,187,228,216,127,187,22,160,182,182,54,132,13,127,82,137,8,224,208,161,67,244,244,244, 208,219,219,75,127,127,63,153,76,134,108,54,139,227,56,20,139,197,176,200,148,170,156,49,134,193,193,65,26,26,26,200, 102,179,52,52,52,48,52,52,196,244,233,211,201,102,179,52,54,54,134,207,201,182,66,128,241,238,42,197,253,114,114,41, 183,79,158,187,92,56,0,148,82,31,239,129,88,44,54,33,222,31,7,50,121,243,201,115,151,146,241,182,194,28,40,81, 25,99,104,109,109,69,41,21,150,208,146,203,149,82,8,33,38,212,249,43,193,76,30,43,29,109,64,135,0,198,152,190, 83,167,78,53,206,154,53,43,76,156,82,242,148,218,87,210,186,186,58,180,214,180,182,182,226,121,30,45,45,45,20,10, 5,154,155,155,113,28,135,166,166,38,114,185,28,169,84,170,116,212,143,1,101,54,128,235,186,223,217,177,99,199,19,82, 202,250,43,250,253,42,136,82,170,63,147,201,60,6,68,75,213,162,12,184,22,168,2,42,129,40,16,185,202,118,61,198, 62,132,10,64,14,56,15,156,31,255,183,92,0,137,11,90,198,37,190,154,62,165,4,23,180,0,228,47,0,241,111,88, 158,93,127,255,164,218,120,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Search1x[935] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,6,29,17,18,8,200,223,108,120,0,0,3,52,73, 68,65,84,56,203,165,147,91,104,84,119,16,198,103,254,231,178,231,156,205,222,226,110,54,169,27,52,136,26,139,151,54, 27,91,179,84,173,164,62,24,124,80,52,20,20,162,146,66,169,171,173,15,53,77,53,84,90,52,68,193,18,164,84,104, 107,21,164,133,38,47,125,170,180,198,16,47,72,172,104,64,163,193,91,196,100,147,205,222,183,155,205,238,158,61,57,243, 247,37,27,90,241,173,31,12,51,204,195,143,111,24,62,132,87,212,214,126,248,55,189,144,223,138,136,42,113,66,206,249, 140,205,102,191,216,121,188,235,19,120,141,196,210,240,69,251,225,13,185,124,254,175,230,157,205,178,195,81,142,69,195,228, 38,7,144,5,180,78,103,82,31,103,50,211,123,237,118,91,99,231,241,174,155,255,6,32,0,192,177,175,59,214,166,211, 233,91,193,253,159,97,223,221,201,226,72,82,44,40,154,166,154,196,165,92,54,155,241,191,1,74,227,219,62,185,251,204, 105,170,240,84,212,119,28,61,54,244,31,7,137,68,114,224,211,3,135,240,247,219,81,99,74,183,75,187,54,249,178,11, 23,104,255,152,68,174,161,231,233,196,141,145,216,162,233,191,195,197,131,193,67,114,247,153,111,175,1,128,173,4,16,58, 190,58,210,230,175,171,223,60,154,20,205,209,25,77,250,168,113,73,164,202,165,162,34,51,137,8,100,213,34,166,114,250, 236,195,231,73,170,177,80,206,240,186,20,92,189,102,85,246,234,192,181,91,0,0,44,145,136,159,244,215,249,165,193,23, 134,28,88,238,54,4,6,110,221,48,157,121,125,86,51,137,4,211,52,221,145,148,238,65,192,240,112,4,228,119,214,190, 171,68,163,145,238,249,19,36,73,226,4,12,173,118,7,40,178,120,47,147,55,152,98,114,93,20,176,72,196,151,246,220, 8,157,52,136,202,128,131,43,109,136,159,171,170,6,146,36,241,121,0,17,205,90,36,81,146,24,231,79,38,166,167,24, 218,152,171,12,76,189,104,134,199,98,185,144,78,20,23,56,18,48,174,204,26,134,169,235,186,64,68,198,60,192,235,245, 222,153,152,152,168,119,200,50,62,30,143,151,143,199,115,55,57,131,40,34,139,32,113,183,0,48,3,200,173,201,88,116, 125,237,162,114,76,38,19,122,101,101,213,96,9,192,68,81,252,177,127,224,74,120,171,223,43,168,86,53,96,114,178,1, 71,6,156,139,28,200,65,8,114,161,80,168,112,121,60,239,111,121,203,195,126,190,112,46,147,78,167,250,231,191,112,165, 175,127,104,197,155,181,109,86,139,168,175,92,86,163,141,198,139,245,177,112,200,163,170,234,51,226,84,27,25,127,177,221, 229,118,239,222,177,74,132,193,235,127,114,85,209,48,22,139,53,212,44,89,124,225,225,131,145,172,0,0,176,99,231,246, 203,195,15,238,239,231,185,212,212,174,166,128,221,0,177,114,166,200,63,224,40,172,169,91,90,81,181,205,239,134,115,103, 79,83,96,93,128,77,78,77,74,68,166,196,24,107,105,104,88,215,135,37,43,93,167,78,172,30,27,27,255,195,227,246, 20,156,206,114,217,95,231,119,86,87,87,219,122,122,123,30,61,121,250,72,213,243,198,55,78,151,253,167,166,45,77,112, 111,248,62,108,120,111,35,253,242,235,69,134,175,134,163,235,212,137,125,0,208,28,10,133,54,2,128,230,243,249,46,1, 64,111,123,219,209,243,193,96,176,19,25,255,114,79,203,94,176,90,203,224,251,179,223,1,190,38,96,108,174,176,148,149, 185,206,1,0,90,91,91,91,84,205,242,195,220,238,67,248,191,122,9,59,169,102,147,104,79,162,5,0,0,0,0,73, 69,78,68,174,66,96,130, }; const unsigned char Search2x[2215] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,8,94,73,68,65,84,88,133,205,150,127,108,91, 213,21,199,191,247,253,138,253,158,237,216,78,76,146,214,169,11,73,91,210,31,33,45,180,5,211,65,167,166,77,233,8, 236,7,160,177,170,147,166,110,76,211,164,177,127,96,101,66,194,98,82,88,165,174,12,254,66,219,152,54,117,147,166,117, 160,34,164,77,41,76,77,210,210,101,26,140,244,87,146,166,182,227,196,109,176,99,59,241,143,247,236,231,247,227,222,253, 209,166,178,186,134,52,219,254,216,145,142,222,185,87,247,188,243,185,231,188,115,239,3,150,41,145,72,132,139,68,34,220, 114,253,22,19,178,212,130,195,135,15,187,9,33,95,163,148,62,65,8,249,18,207,243,18,0,216,182,109,19,66,254,204, 24,123,143,49,246,167,67,135,14,21,254,167,0,71,143,30,117,26,134,241,188,223,239,127,109,251,246,237,8,133,66,80, 20,5,60,207,131,82,10,195,48,144,201,100,48,54,54,134,209,209,81,152,166,249,114,165,82,121,35,18,137,168,255,53, 192,145,35,71,66,140,177,179,189,189,189,43,218,219,219,161,170,42,52,77,131,105,154,176,109,27,28,199,65,20,69,40, 138,2,183,219,141,82,169,132,161,161,33,140,143,143,151,9,33,157,47,190,248,98,236,63,6,56,124,248,112,80,150,229, 228,129,3,7,32,8,2,50,153,12,46,39,231,74,127,60,115,53,62,118,181,28,208,77,171,1,224,224,148,184,220,250, 160,43,251,236,163,171,214,220,191,62,228,148,101,25,159,124,242,9,206,156,57,3,203,178,214,188,244,210,75,209,101,3, 188,249,230,155,117,213,106,53,122,240,224,193,32,0,164,103,179,248,233,59,227,23,47,38,74,161,230,38,111,226,174,6, 79,218,165,56,52,0,80,53,93,153,205,21,155,82,233,252,221,93,109,158,107,175,126,115,235,186,198,6,31,134,135,135, 49,60,60,60,87,169,84,90,35,145,72,121,41,0,161,118,80,169,84,190,183,119,239,222,160,32,8,248,236,179,20,126, 240,203,145,137,170,205,203,143,60,184,110,240,161,123,3,254,182,102,87,200,229,16,28,186,73,205,108,177,90,186,152,44, 166,174,92,205,79,158,31,75,110,252,206,207,207,36,126,251,194,206,213,93,93,93,72,165,82,254,68,34,241,60,128,215, 150,2,224,23,140,163,71,143,58,101,89,62,221,221,221,141,217,217,89,188,254,222,196,165,180,74,133,93,225,117,227,95, 223,17,90,127,111,208,211,226,145,69,89,224,56,94,224,57,94,118,240,210,170,6,165,222,163,72,156,37,72,87,146,233, 66,227,196,84,54,255,216,67,237,126,69,81,48,49,49,177,43,28,14,255,108,96,96,192,248,60,128,155,253,108,89,214, 227,155,55,111,134,170,170,184,150,85,171,255,136,22,238,186,127,67,104,236,241,45,43,215,249,20,73,225,57,194,75,2, 47,240,60,33,60,71,24,207,17,74,8,216,170,70,185,126,133,223,41,223,215,177,234,210,223,198,231,234,175,76,165,105, 67,67,3,90,91,91,33,203,242,87,151,202,192,77,0,198,216,147,205,205,205,40,151,203,248,195,224,212,76,115,192,59, 211,213,222,224,119,57,4,135,77,25,163,140,153,166,77,117,198,80,5,80,229,65,170,28,129,78,56,162,23,52,35,207, 113,156,213,20,240,94,251,77,255,88,78,20,69,172,88,177,2,140,177,39,239,24,0,192,22,73,146,96,219,54,206,79, 171,238,70,191,43,211,234,119,122,76,219,182,109,74,117,211,100,101,211,102,154,77,161,49,202,202,148,161,12,160,82,212, 204,89,173,98,205,1,164,20,240,123,210,31,71,243,162,109,219,240,249,124,0,208,181,20,64,237,71,24,34,132,128,82, 138,178,78,221,178,203,161,213,137,188,104,81,232,156,5,10,80,202,81,216,28,71,44,202,152,201,192,76,198,96,93,72, 22,198,64,136,14,48,234,84,196,140,90,49,21,195,48,224,116,58,1,96,229,114,0,42,140,49,153,16,2,220,104,79, 221,180,117,145,231,24,33,176,97,115,22,199,193,226,24,51,193,96,216,148,89,87,210,106,116,114,86,77,130,65,225,8, 33,4,196,9,224,230,129,5,128,46,7,224,51,219,182,27,4,65,128,203,201,107,101,85,87,114,37,35,47,10,156,4, 192,4,165,6,39,240,134,64,72,149,49,166,199,82,218,232,233,139,233,105,2,200,0,33,12,76,40,21,43,14,143,34, 233,140,49,177,82,169,0,64,114,57,0,127,159,159,159,223,216,210,210,130,7,218,235,49,145,81,3,151,175,22,198,56, 2,167,207,45,65,22,121,195,210,237,124,177,106,78,159,143,23,70,83,243,154,202,24,100,142,112,28,5,234,8,96,206, 230,138,43,195,29,13,34,0,100,50,25,88,150,53,116,199,0,140,177,247,46,95,190,124,176,173,173,13,207,124,97,181, 239,249,95,140,32,147,15,140,228,138,198,12,5,242,0,242,28,80,176,129,60,24,242,4,204,6,136,72,193,108,0,212, 180,41,95,40,168,247,237,223,181,217,97,24,6,166,166,166,160,105,218,137,165,0,110,118,129,174,235,253,211,211,211,179, 243,243,243,88,223,30,196,23,55,53,138,231,198,167,31,164,28,207,129,35,28,7,198,83,48,142,112,76,0,199,156,140, 23,100,0,34,7,194,51,74,248,139,163,211,95,217,183,45,232,106,244,72,72,167,211,136,197,98,147,146,36,253,229,142, 1,34,145,136,65,41,253,241,224,224,32,0,224,71,223,216,230,106,116,146,224,200,185,216,99,86,197,116,81,2,137,128, 56,96,19,133,39,156,135,7,188,32,68,169,26,85,239,200,165,216,183,87,53,58,214,255,240,169,205,226,252,252,60,134, 134,134,160,170,106,49,145,72,72,75,1,240,181,131,231,158,123,238,124,50,153,124,212,48,140,213,161,80,8,79,236,104, 151,98,201,89,207,71,231,147,15,104,154,33,129,193,20,235,4,211,170,90,114,102,174,120,247,84,50,211,157,152,206,124, 119,207,150,214,150,87,191,181,93,152,159,203,161,174,174,14,94,175,23,213,106,181,57,26,141,238,10,6,131,239,199,98, 49,109,49,128,127,187,142,251,250,250,2,130,32,124,180,97,195,134,53,91,183,110,133,207,231,195,248,84,22,239,12,94, 182,135,199,178,86,174,84,21,0,70,26,61,14,123,199,166,22,225,169,157,247,146,70,5,200,229,114,112,56,28,136,199, 227,56,119,238,28,252,126,63,84,85,197,137,19,39,38,1,244,246,247,247,95,186,35,0,0,56,114,228,72,35,165,244, 120,115,115,243,206,206,206,78,52,53,53,65,81,20,136,162,8,158,231,97,219,54,44,203,66,185,92,134,166,105,72,167, 211,56,125,250,52,118,239,222,141,68,34,129,106,181,138,84,42,5,159,207,7,198,24,222,125,247,221,66,165,82,121,230, 131,15,62,56,249,185,37,88,144,147,39,79,150,31,126,248,225,99,186,174,79,197,227,241,174,76,38,227,45,149,74,80, 85,21,197,98,17,249,124,30,233,116,26,241,120,28,35,35,35,24,30,30,190,144,205,102,167,53,77,91,217,210,210,2, 195,48,224,245,122,145,205,102,33,138,34,58,59,59,29,201,100,242,217,96,48,152,137,197,98,31,47,153,129,90,137,68, 34,130,44,203,221,0,190,12,224,1,198,216,138,27,126,51,148,210,193,82,169,244,126,95,95,223,192,211,79,63,45,2, 248,125,71,71,199,83,225,112,24,229,242,245,127,145,84,42,5,73,146,32,203,50,78,157,58,133,100,50,249,186,219,237, 126,225,248,241,227,246,29,1,220,2,187,160,139,250,238,217,179,231,39,107,215,174,61,180,111,223,62,24,134,1,195,48, 80,40,20,96,219,54,60,30,15,62,253,244,83,92,184,112,225,125,93,215,159,25,24,24,208,111,91,2,92,111,79,30, 215,15,42,1,128,116,27,21,111,55,23,139,197,78,187,221,238,169,68,34,209,179,113,227,70,94,20,69,16,66,64,8, 65,125,125,61,122,123,123,113,237,218,181,117,217,108,86,136,70,163,127,173,221,5,185,17,148,171,1,88,176,185,99,199, 142,173,218,180,105,83,155,215,235,93,237,116,58,155,8,33,178,109,219,134,174,235,217,185,185,185,228,232,232,104,252,192, 129,3,113,0,12,0,13,135,195,219,2,129,192,239,246,239,223,239,85,20,5,148,82,116,116,116,64,146,36,204,204,204, 224,149,87,94,185,218,223,223,223,202,221,18,124,65,133,26,21,187,187,187,221,45,45,45,173,110,183,123,157,203,229,186, 207,229,114,237,168,175,175,223,235,241,120,30,85,20,101,139,162,40,107,117,93,247,6,2,1,23,128,58,0,117,103,207, 158,253,231,228,228,228,222,183,223,126,251,74,54,155,69,40,20,130,32,8,16,4,1,133,66,1,0,44,0,220,66,6, 106,119,205,47,98,115,78,167,83,232,236,236,116,4,131,65,103,93,93,157,152,201,100,236,201,201,73,51,26,141,26,184, 126,245,46,168,189,240,188,231,158,123,60,109,109,109,191,234,233,233,121,164,167,167,7,185,92,14,111,189,245,22,178,217, 236,203,31,126,248,97,223,98,37,88,180,20,55,214,45,60,107,253,89,141,214,194,80,183,219,205,111,219,182,237,251,130, 32,60,203,24,179,0,252,58,28,14,191,17,137,68,232,98,93,80,27,140,199,226,129,111,5,184,29,200,66,54,22,148, 213,248,44,187,13,111,245,89,176,107,95,202,110,51,247,255,43,255,2,77,26,246,122,177,134,64,221,0,0,0,0,73, 69,78,68,174,66,96,130, }; const unsigned char Settings1x[611] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,9,26,12,19,57,139,99,194,72,0,0,1,240,73, 68,65,84,56,203,165,146,75,104,19,97,20,133,191,153,248,76,138,77,20,10,130,74,176,204,198,133,182,221,69,172,46, 52,20,98,102,235,66,112,33,84,164,168,181,45,18,82,2,21,3,67,66,160,107,65,116,101,64,138,226,194,137,141,208, 98,87,130,210,54,137,73,23,21,130,85,105,211,151,134,32,68,68,58,51,110,102,134,49,29,235,194,179,251,185,231,156, 123,239,185,63,252,39,4,231,35,157,81,162,128,10,200,241,88,34,247,23,77,52,157,81,108,142,216,82,84,251,175,246, 3,168,166,153,171,248,250,181,1,205,108,180,29,233,140,98,52,26,117,35,157,81,12,247,90,195,170,69,1,196,116,70, 137,90,100,171,171,215,219,230,102,28,5,120,240,240,62,241,88,66,6,114,0,34,160,14,222,28,50,158,62,155,48,0, 245,246,173,17,54,215,215,144,58,37,234,245,175,247,90,179,137,221,25,21,44,49,128,96,21,111,12,12,26,154,182,37, 232,186,110,232,186,70,97,126,78,40,188,47,2,200,59,5,43,180,116,176,17,233,187,72,185,82,97,185,246,5,32,25, 143,37,238,254,243,140,78,188,202,191,52,74,149,18,221,39,123,40,150,11,152,19,76,2,186,171,65,48,146,58,12,212, 172,247,149,144,78,215,9,137,163,71,142,209,108,54,121,55,247,22,183,53,60,78,241,248,112,152,190,80,39,29,1,47, 217,153,77,142,183,127,75,46,125,94,58,215,125,170,135,128,63,192,74,109,249,242,133,240,249,249,233,169,215,85,192,0, 16,131,145,84,23,80,123,52,38,51,91,94,100,182,188,72,199,65,31,0,230,222,114,46,255,2,73,146,56,123,186,215, 250,100,118,30,34,80,28,31,14,51,245,166,196,150,166,35,238,243,179,81,111,218,35,154,35,203,217,39,143,57,208,238, 231,76,168,23,96,204,105,0,192,238,93,30,246,248,14,241,243,199,47,178,249,5,128,112,171,73,46,175,82,253,88,253, 35,108,17,96,101,227,59,251,125,1,218,246,122,120,62,243,1,32,252,105,114,116,218,73,52,77,146,107,235,171,11,64, 210,190,66,48,146,186,4,76,56,184,219,196,59,225,55,55,226,213,246,234,188,84,188,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Settings2x[2129] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,8,8,73,68,65,84,88,133,237,150,107,80,84, 231,25,199,255,231,186,247,93,129,101,193,101,65,46,106,21,144,155,58,136,241,66,172,162,226,68,99,106,173,237,76,167, 173,218,241,139,83,149,96,65,116,82,167,41,176,98,117,180,214,100,72,140,153,100,58,109,194,180,90,13,70,136,134,161, 157,198,154,78,210,40,226,133,5,21,185,45,236,194,194,46,44,123,238,167,31,194,102,86,5,177,147,15,253,210,103,230, 153,247,125,207,121,159,231,255,123,158,247,157,51,7,248,191,253,143,141,152,110,67,77,77,213,114,154,165,223,7,72,29, 8,220,151,5,225,195,96,80,120,235,240,225,195,220,243,138,84,31,127,167,72,3,245,139,146,146,157,190,255,10,224,200, 145,35,38,149,144,2,105,169,179,145,151,187,16,254,64,0,173,183,91,56,239,160,215,205,5,133,130,131,7,15,14,76, 39,126,228,196,187,251,21,85,169,161,40,170,91,16,164,229,135,74,119,62,138,124,79,62,43,184,172,172,108,148,38,169, 149,221,61,143,198,253,129,128,226,72,112,96,237,154,245,218,172,204,236,36,131,73,119,254,89,177,117,117,117,212,209,83, 239,157,101,117,154,95,45,46,40,64,98,74,138,157,97,168,127,87,158,120,59,235,185,1,0,160,180,180,252,239,156,40, 173,250,228,202,101,82,85,85,94,146,36,100,45,200,166,12,122,195,130,234,163,175,23,78,90,245,145,119,76,15,7,198, 155,76,102,243,214,156,188,69,6,86,163,65,130,195,65,217,29,142,104,82,37,111,214,214,214,50,83,2,84,85,85,197, 60,249,172,98,127,197,231,0,252,162,40,246,2,0,207,243,72,77,77,51,176,180,102,203,164,212,58,234,171,248,248,248, 252,172,220,28,3,69,83,0,0,89,145,225,245,122,130,4,65,252,120,215,174,93,226,164,0,78,103,229,90,146,86,7, 79,157,58,241,253,200,231,213,199,170,115,1,88,104,154,14,210,52,13,146,36,97,52,26,9,154,166,83,38,211,39,84, 196,204,153,157,162,17,4,1,162,192,67,18,121,180,223,109,227,4,94,108,40,223,187,253,15,145,123,31,3,96,52,204, 217,156,236,92,72,138,244,199,218,218,55,94,6,128,154,154,202,28,66,82,46,205,73,155,251,154,193,96,72,209,104,52, 208,106,181,224,56,78,5,224,126,82,220,233,172,181,200,138,60,67,146,68,8,124,8,178,40,96,208,227,81,125,67,222, 17,130,147,127,246,228,126,250,49,0,134,25,74,116,36,217,147,103,165,208,127,189,120,238,188,179,166,18,10,128,204,5, 11,78,173,88,86,88,161,170,170,86,146,36,208,52,141,222,222,30,73,20,197,199,10,56,92,91,171,39,56,182,121,254, 188,52,81,149,37,198,239,243,33,20,26,71,95,159,135,32,20,101,83,89,217,206,209,167,186,21,185,56,126,162,166,50, 125,126,102,89,110,206,66,138,36,31,191,30,178,44,35,24,12,66,81,20,48,12,3,94,224,209,208,80,207,9,146,184, 109,127,73,249,133,195,181,181,122,109,136,105,202,202,152,147,103,182,152,152,150,86,215,120,32,48,118,23,42,62,133,138, 107,229,37,219,47,76,122,92,145,139,202,202,202,56,163,89,239,218,242,202,86,51,203,178,144,101,25,36,73,130,32,8, 72,146,4,138,162,224,243,249,208,218,218,10,155,205,6,91,156,13,13,13,245,28,47,202,27,21,38,246,96,94,230,188, 130,168,40,35,123,227,86,251,248,240,176,255,205,178,189,219,75,39,19,141,52,42,114,209,212,212,20,44,90,183,198,237, 114,181,173,115,36,56,104,171,213,10,134,97,192,48,12,100,89,134,63,48,2,69,86,32,138,34,8,226,107,246,244,140, 12,218,245,112,224,71,89,233,223,113,196,217,162,217,214,59,29,33,239,224,200,219,229,251,182,151,76,39,254,84,7,194, 118,244,168,115,19,205,210,103,140,6,163,46,198,106,37,131,193,160,226,241,12,208,162,40,106,54,20,191,164,10,188,72, 0,128,170,170,104,117,117,195,26,19,13,251,204,88,180,220,233,224,251,221,222,51,229,251,118,236,126,30,241,41,1,128, 175,191,100,15,30,220,75,87,41,34,142,84,136,49,134,209,223,148,229,208,28,138,97,63,91,91,180,222,32,240,34,113, 235,94,39,44,22,11,18,29,241,184,211,246,16,238,158,46,129,87,134,102,31,122,245,80,247,183,6,152,204,146,214,87, 165,199,154,177,35,35,129,218,189,98,225,60,54,198,98,192,172,36,59,218,58,30,129,33,9,36,217,103,40,215,174,127, 54,52,62,198,103,84,84,84,120,159,39,231,180,159,226,176,165,110,168,222,174,101,153,127,189,178,110,197,158,144,38,149, 250,221,249,14,24,45,209,232,184,223,13,40,50,210,231,38,33,33,33,145,204,206,202,141,214,25,53,95,58,157,78,203, 243,228,165,166,223,2,164,108,168,218,200,178,236,217,31,110,46,212,23,46,76,38,181,122,3,57,60,202,227,131,198,155, 200,77,53,35,63,103,46,104,154,6,207,243,112,56,18,73,89,146,13,254,209,225,205,75,242,11,222,109,110,110,22,159, 149,123,90,128,228,226,170,124,154,162,46,110,46,94,166,15,242,42,254,113,203,141,78,247,48,236,54,11,6,60,126,89, 30,119,203,75,114,231,80,0,1,138,162,192,113,28,146,147,83,72,127,192,31,37,138,252,218,252,252,130,247,155,155,155, 229,169,242,63,243,8,102,173,175,94,69,145,212,149,245,171,243,245,10,65,193,235,27,131,251,126,11,186,239,126,142,241, 96,16,163,33,62,232,13,138,251,46,55,126,204,41,170,2,69,81,64,146,36,2,129,0,94,40,88,78,199,218,108,57, 49,214,25,245,117,117,117,83,22,58,37,64,90,113,213,46,134,165,62,218,92,188,204,164,213,233,136,62,143,31,195,125, 247,16,10,142,32,193,145,136,142,78,175,192,243,194,141,243,167,15,158,86,68,233,229,134,198,75,188,44,75,0,0,130, 32,16,12,6,81,184,98,21,107,54,91,86,14,120,251,254,164,170,234,164,23,254,41,128,185,47,253,214,154,178,193,89, 175,51,232,143,253,96,83,161,94,33,41,136,2,143,177,1,23,252,195,62,216,237,9,24,26,37,133,238,190,129,118,132, 212,141,0,80,90,90,222,168,168,202,150,203,141,151,4,94,224,65,16,4,100,89,6,207,243,88,253,221,34,86,171,209, 110,60,253,198,201,55,167,5,72,46,174,250,133,4,241,161,221,110,91,179,109,243,139,6,5,4,28,49,90,244,60,184, 13,239,224,32,226,227,227,49,52,70,9,157,61,3,46,112,120,225,193,213,114,127,56,246,213,189,191,172,135,130,109,159, 92,185,204,115,28,7,154,166,191,129,88,245,226,26,13,69,51,63,61,249,251,99,7,158,4,248,166,45,41,197,206,21, 172,134,249,40,115,126,154,57,43,35,5,51,244,20,102,70,105,113,238,227,102,116,118,245,32,46,214,10,129,178,72,109, 237,189,46,240,88,26,41,30,105,199,79,30,221,70,168,196,123,171,87,175,101,89,134,69,32,16,192,224,224,32,28,14, 7,26,175,92,230,68,94,182,31,56,112,96,248,169,14,168,80,87,197,217,98,76,171,151,206,67,70,146,25,105,51,77, 56,215,120,29,157,143,122,96,54,154,64,234,172,184,215,209,55,42,16,82,209,84,226,0,80,178,103,255,7,36,77,237, 188,122,181,81,8,113,33,248,253,126,120,60,30,4,2,1,68,69,69,201,36,169,44,154,226,8,148,78,45,67,134,76, 58,26,93,253,1,156,185,240,5,58,31,118,128,102,52,136,77,72,69,107,91,119,136,31,243,110,237,169,63,228,195,19, 255,17,17,221,164,1,104,246,236,222,247,103,158,227,75,154,155,63,21,162,162,163,144,158,158,14,131,209,128,145,145,97, 50,20,18,219,34,131,40,0,44,0,189,42,140,121,57,173,227,231,160,52,218,81,78,66,215,131,54,8,188,128,164,148, 185,232,118,251,5,159,183,255,98,79,147,243,47,0,180,0,52,19,113,228,132,40,11,64,63,225,6,0,134,171,87,155, 92,121,121,57,30,119,191,123,249,128,167,95,112,185,238,73,195,195,35,135,94,255,245,111,174,79,232,18,0,20,2,128, 101,34,169,214,182,232,39,43,77,51,231,215,46,93,156,169,229,3,253,0,163,135,66,25,240,229,87,183,199,251,254,249, 214,247,120,95,231,32,0,46,194,229,9,151,34,138,97,1,48,225,185,213,106,37,178,179,179,163,219,219,219,123,187,186, 186,2,0,4,0,226,196,200,19,0,76,97,0,0,26,219,226,29,69,6,91,218,81,179,217,32,147,20,67,13,251,252, 228,88,207,141,215,6,91,62,252,91,56,104,194,185,136,185,28,33,76,79,192,132,171,84,1,40,17,160,225,28,66,184, 3,68,4,177,14,0,99,76,204,138,54,38,44,89,8,146,212,7,123,91,110,140,62,186,230,137,168,86,136,232,128,56, 145,60,242,30,144,19,99,216,213,8,136,240,252,177,128,201,46,83,120,140,124,175,98,146,4,223,214,254,3,174,151,133, 37,87,153,47,161,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Stop1x[820] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,17,23,45,13,107,192,156,192,0,0,2,193,73, 68,65,84,56,203,109,147,187,79,83,97,24,135,159,115,233,5,109,141,198,200,224,37,134,198,64,43,120,105,106,184,9, 169,54,136,154,152,144,184,177,16,88,252,15,92,58,56,24,105,28,28,76,28,140,11,113,208,193,187,49,184,152,80,36, 154,176,136,193,196,14,14,40,181,212,22,74,105,161,7,225,180,231,59,159,3,165,130,242,38,95,190,228,77,158,223,123, 249,229,85,216,18,143,194,97,61,61,49,241,68,192,85,118,8,13,198,4,92,142,66,101,51,167,252,3,63,107,244,249, 46,93,188,118,205,173,104,26,0,82,74,16,2,105,89,124,120,248,208,252,50,51,243,94,192,149,40,88,53,129,42,252, 194,239,243,245,70,134,134,220,243,227,227,152,249,252,182,234,78,175,151,250,142,14,62,60,125,106,38,146,201,49,1,125, 81,176,180,145,80,200,145,157,156,124,25,56,118,172,55,50,56,184,1,175,174,130,101,109,19,16,170,202,90,58,77,32, 18,209,87,231,230,142,44,149,74,103,6,195,225,231,90,103,38,243,230,120,99,99,207,249,129,1,119,54,30,199,170,175, 71,143,197,32,153,68,102,179,27,179,159,56,193,222,187,119,169,36,18,24,95,191,114,60,28,214,141,84,234,232,143,68, 34,168,245,168,234,227,254,235,215,245,204,187,119,148,11,5,212,190,62,212,150,22,148,142,14,248,254,29,117,255,126,246, 12,15,227,218,183,15,69,74,74,227,227,252,46,20,104,14,135,245,169,207,159,3,186,162,40,32,37,229,66,97,163,213, 145,17,112,185,112,245,246,226,190,113,3,93,81,112,122,60,152,241,56,249,59,119,176,129,117,195,64,10,129,2,168,255, 121,37,37,226,254,125,228,212,20,206,93,187,112,122,189,88,211,211,228,98,49,132,109,99,3,54,32,171,59,82,119,244, 187,185,25,119,40,132,174,235,56,28,14,118,7,131,212,133,66,200,42,44,202,101,196,220,220,95,1,41,68,13,86,91, 90,240,222,186,133,211,235,101,61,30,103,117,116,20,167,199,131,239,222,61,60,237,237,152,185,28,198,183,111,200,149,21, 0,116,41,229,134,154,97,32,44,139,186,182,54,92,85,120,113,120,24,219,52,209,128,3,253,253,212,157,58,197,250,131, 7,160,105,216,213,162,218,5,41,187,43,197,226,225,64,91,155,86,74,36,40,189,126,77,229,231,79,22,110,222,164,156, 201,80,94,92,36,247,234,21,107,179,179,36,111,223,70,209,52,124,126,63,233,165,37,251,199,242,114,94,137,129,83,131, 183,39,27,26,186,91,131,65,87,42,30,103,173,88,172,45,107,235,83,28,14,26,154,154,72,23,10,226,99,58,189,96, 67,167,54,6,34,2,79,114,197,98,151,105,24,135,2,173,173,122,105,126,158,138,105,110,131,85,135,131,6,191,159,217, 124,94,76,254,250,149,178,161,61,10,169,218,49,109,118,226,63,120,176,251,236,233,211,46,69,8,108,203,66,90,86,237, 79,36,147,214,167,108,118,198,134,174,40,44,110,187,198,173,34,2,122,118,178,87,133,105,27,206,69,97,121,51,247,7, 199,77,82,246,215,134,247,20,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Stop2x[1927] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,62,73,68,65,84,88,133,157,151,105,108,84, 215,21,199,127,111,27,119,198,54,6,239,64,16,73,176,13,70,216,198,174,177,195,20,9,197,85,149,15,169,26,65,69, 105,43,53,33,74,213,170,18,107,17,4,21,85,21,173,90,225,136,134,144,20,26,41,249,128,149,68,9,249,18,85,170, 84,181,56,168,105,84,90,136,161,106,149,80,100,236,97,22,219,227,77,246,48,219,155,55,111,235,135,121,111,198,99,143, 107,183,87,58,122,219,153,251,251,223,115,206,93,70,96,21,237,151,240,125,1,222,90,141,175,219,36,248,205,203,112,100, 37,63,97,37,135,87,224,7,85,181,181,175,125,247,212,41,175,236,243,45,117,176,109,176,44,176,109,108,211,4,203,194, 54,77,126,247,230,155,234,88,40,116,249,52,156,250,191,5,156,135,31,173,171,171,251,245,183,143,30,245,166,195,97,226, 15,30,44,133,3,182,109,231,238,29,243,54,52,176,118,251,118,126,127,245,170,26,25,27,187,120,6,206,46,199,144,150, 251,208,15,135,107,234,235,47,28,60,118,204,155,142,68,136,143,142,130,32,20,12,242,215,197,163,48,146,73,12,85,165, 253,233,167,149,201,64,160,187,39,145,240,12,194,159,87,45,160,31,142,86,215,215,247,31,60,118,204,155,10,133,72,4, 2,32,8,8,162,136,176,8,238,182,82,34,204,76,134,182,189,123,149,104,32,208,211,155,76,218,131,240,233,138,2,94, 129,19,181,141,141,191,250,214,209,163,190,100,48,72,242,225,67,4,7,238,142,94,16,132,146,185,203,191,115,82,99,36, 147,152,154,70,219,158,61,202,88,32,224,247,167,82,153,65,248,219,178,2,250,225,100,93,99,227,47,14,28,57,226,75, 4,2,164,130,193,28,84,20,115,182,48,252,37,70,237,130,11,143,54,122,50,137,169,235,116,248,253,74,36,16,216,243, 149,116,58,117,29,110,45,17,208,15,167,26,214,175,255,249,55,143,28,241,37,70,71,73,134,66,185,112,59,2,202,101, 153,141,30,15,9,211,196,46,166,20,65,107,20,133,58,69,225,145,97,96,219,54,54,144,77,38,177,76,147,246,222,94, 37,28,8,236,245,171,234,220,32,12,229,5,156,135,51,141,27,54,252,108,255,225,195,190,248,240,48,169,112,56,31,106, 4,129,114,89,166,182,161,129,244,190,125,172,27,25,33,153,205,22,68,44,16,176,206,227,161,188,165,5,189,167,135,53, 225,48,113,199,207,6,52,71,196,142,238,110,37,28,8,244,61,165,105,83,55,224,174,4,208,7,159,190,116,238,156,18, 251,252,243,28,220,13,177,3,175,169,175,103,238,236,89,244,45,91,160,190,158,234,123,247,72,106,90,110,250,57,173,186, 172,140,138,230,102,98,167,79,147,109,107,67,54,77,214,134,195,60,210,180,188,79,38,153,4,219,166,107,247,110,229,206, 157,59,223,248,24,206,137,121,152,44,147,12,133,138,70,100,219,54,13,64,250,217,103,177,125,62,4,65,64,219,181,139, 204,139,47,178,177,178,18,209,153,247,213,94,47,229,173,173,196,207,156,65,244,120,16,69,17,245,153,103,168,4,202,36, 9,11,176,156,126,227,83,83,136,138,146,103,200,139,235,104,113,88,131,186,206,99,215,174,65,69,5,217,174,46,4,65, 64,239,237,69,144,101,54,14,12,144,74,167,41,111,109,37,121,252,120,110,166,216,54,98,58,77,213,133,11,4,179,89, 210,11,106,193,118,6,133,101,45,35,192,113,92,56,157,76,65,32,18,139,177,233,221,119,17,101,153,236,206,157,8,130, 128,177,107,23,162,36,81,121,227,6,137,19,39,64,20,17,1,33,149,162,242,226,69,38,66,33,226,170,90,4,206,11, 41,41,192,93,74,157,31,96,219,249,69,199,50,77,34,209,40,155,222,127,31,81,81,208,219,219,115,34,186,187,49,186, 187,201,231,49,149,162,252,245,215,153,24,29,37,158,72,20,160,255,75,4,176,237,252,124,95,40,196,178,109,34,193,32, 143,93,187,134,40,8,232,29,29,133,85,17,64,85,241,93,185,194,248,253,251,196,99,177,34,184,165,235,88,134,129,229, 166,35,155,45,29,1,219,178,138,59,117,196,184,213,110,90,22,233,120,156,202,155,55,49,59,59,139,124,165,201,73,164, 76,134,228,252,60,217,153,25,140,120,28,51,149,194,80,85,108,203,42,68,0,48,234,234,150,79,65,190,6,220,72,184, 5,41,8,84,111,222,76,69,79,15,153,231,159,71,20,69,231,181,147,166,166,38,212,231,158,227,137,112,152,127,13,13, 161,235,122,17,212,53,11,138,82,144,79,159,237,236,233,88,86,78,177,19,17,247,125,245,147,79,82,229,247,147,125,225, 5,4,89,70,20,69,36,93,71,154,154,114,244,219,152,157,157,216,135,15,211,126,240,32,146,199,179,4,108,185,207,37, 107,192,178,114,230,134,213,141,0,80,221,220,76,213,158,61,104,7,14,32,72,18,162,40,34,102,179,72,111,188,129,52, 49,129,126,232,16,102,123,59,150,101,97,117,117,33,202,50,29,62,31,255,24,24,64,215,180,2,152,5,133,88,74,128, 109,219,75,194,95,219,214,70,165,223,79,102,255,254,2,92,211,16,47,93,98,228,189,247,136,71,34,180,41,10,178,162, 96,180,182,230,106,165,173,13,241,208,33,186,42,42,248,236,242,101,76,77,43,18,80,50,5,150,105,82,190,97,195,146, 240,87,60,254,56,230,230,205,224,158,5,84,21,241,202,21,70,63,248,128,185,145,17,116,77,227,159,111,191,141,241,225, 135,72,195,195,185,173,90,16,176,214,175,199,215,216,136,178,102,77,17,92,16,197,162,20,72,0,95,131,154,233,96,176, 99,71,95,159,108,166,211,232,241,120,190,32,231,135,135,169,244,120,144,101,25,179,186,26,207,192,0,163,239,188,195,220, 253,251,249,78,77,195,96,234,238,93,234,107,107,17,27,27,65,146,240,124,244,17,67,175,190,74,114,114,178,8,254,68, 83,19,115,137,132,61,26,139,9,31,195,57,9,96,16,254,208,59,63,95,63,61,62,222,177,163,183,87,54,102,103,81, 199,198,208,103,103,209,34,17,102,62,249,132,181,85,85,84,141,141,49,124,245,42,115,95,124,177,164,186,13,195,96,242, 246,109,54,108,218,132,55,20,98,232,252,121,18,227,227,249,239,162,36,177,165,165,133,88,38,99,221,8,135,99,34,124, 121,16,102,139,206,20,253,112,177,161,166,230,135,95,239,235,243,78,223,190,77,34,20,42,228,77,146,240,212,212,160,78, 79,47,169,238,133,207,146,215,139,88,86,70,38,22,43,192,101,153,45,205,205,204,164,82,214,95,194,225,153,44,236,254, 41,60,204,167,192,109,131,240,199,221,170,90,61,17,141,238,236,240,251,21,35,149,66,123,244,40,95,185,122,42,245,95, 225,110,58,140,76,166,32,72,150,217,210,210,66,52,145,48,255,26,137,76,0,189,63,129,252,158,191,228,76,56,8,127, 242,103,50,107,199,162,209,206,206,222,94,197,76,167,201,196,227,43,130,75,153,172,40,52,109,221,74,56,22,51,254,62, 62,254,80,132,167,78,67,116,33,175,228,169,248,58,92,223,149,201,84,71,39,39,119,238,236,238,86,12,85,205,139,88, 45,92,241,120,104,218,182,141,145,217,89,227,179,104,244,193,29,248,234,107,48,185,152,181,220,255,130,242,27,48,180,93, 211,214,205,76,78,238,232,236,234,146,245,76,6,53,145,88,29,188,172,140,166,109,219,248,247,244,180,113,107,106,106,248, 45,248,222,77,72,147,91,229,179,11,65,203,157,174,43,93,59,9,47,111,173,168,248,206,190,189,123,203,4,119,105,182, 44,44,119,229,92,96,238,59,219,178,184,19,12,234,183,103,102,238,253,22,142,207,194,44,144,0,226,64,204,209,185,172, 0,55,50,107,128,10,160,226,199,112,178,22,94,90,198,183,100,75,195,173,75,112,42,1,243,64,138,220,53,142,179,31, 173,36,96,161,144,47,185,66,156,123,143,99,10,185,149,212,237,195,2,12,114,33,206,230,52,144,0,146,64,102,49,120, 181,2,74,249,139,142,48,23,46,80,60,65,76,10,181,186,98,251,15,67,43,9,239,189,81,246,108,0,0,0,0,73, 69,78,68,174,66,96,130, }; } namespace Application { const unsigned char Browser1x[928] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,26,7,44,7,230,25,222,143,0,0,0,53,116, 69,88,116,67,111,109,109,101,110,116,0,40,99,41,32,50,48,48,52,32,74,97,107,117,98,32,83,116,101,105,110,101, 114,10,10,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80,144,217,139,111,0,0,2,236, 73,68,65,84,56,203,173,147,93,104,91,101,28,135,159,247,156,247,156,99,147,52,105,155,230,163,141,109,214,208,162,44, 184,117,178,200,196,171,41,168,48,20,111,148,41,221,69,101,56,16,111,132,161,160,183,82,16,197,251,93,136,21,71,65, 196,233,141,76,134,55,179,48,181,179,150,141,118,43,174,235,92,63,179,156,44,31,77,114,146,115,146,156,215,11,217,196, 237,214,231,250,255,123,46,254,252,126,130,7,56,254,222,236,41,224,45,93,202,253,10,44,229,251,13,165,88,208,116,237, 236,220,204,212,23,15,222,139,251,193,247,191,156,52,117,237,199,137,177,100,226,200,129,52,99,169,40,1,203,162,92,111, 178,182,105,179,184,178,201,141,141,194,101,33,196,201,185,153,169,171,255,17,188,246,238,231,185,96,184,231,183,87,142,30, 20,7,39,226,148,235,77,236,157,13,100,40,14,61,253,224,216,164,18,81,22,86,182,57,63,191,114,23,33,158,189,39, 145,0,209,104,232,167,231,159,201,138,39,50,3,148,138,121,6,71,179,68,6,135,112,90,109,242,155,235,72,223,67,235, 54,121,46,151,161,235,171,232,133,75,215,207,0,79,3,104,111,126,248,213,71,201,120,127,248,104,110,28,67,243,233,200, 16,104,2,67,74,76,67,18,176,36,137,104,47,67,241,24,177,190,32,185,236,163,164,135,7,142,188,241,193,217,105,0, 45,28,9,156,60,156,29,165,82,46,114,199,13,16,31,222,135,82,224,43,64,104,8,223,99,183,212,224,251,139,203,92, 152,95,36,98,41,246,143,15,3,188,10,32,107,78,59,150,78,246,179,112,163,64,102,34,142,175,254,253,108,189,82,226, 169,201,44,66,8,148,82,108,239,222,161,213,108,50,20,139,0,28,6,208,90,94,71,179,44,19,45,20,167,82,111,97, 215,60,28,183,75,205,241,240,234,54,66,252,163,19,66,144,136,69,185,186,122,19,203,144,0,3,0,82,215,53,191,218, 104,105,193,214,14,33,105,81,104,12,82,52,76,58,93,159,86,169,195,100,187,141,235,122,244,134,130,56,142,195,190,84, 140,66,211,3,40,1,72,67,211,242,183,182,138,195,135,198,147,100,70,134,184,189,185,205,252,218,30,30,38,77,47,200, 167,223,94,193,18,93,222,126,249,0,181,90,141,165,107,55,161,55,13,240,59,128,166,186,221,115,75,171,91,120,190,4, 32,61,146,226,216,161,24,187,133,18,119,171,13,170,174,224,118,217,199,182,109,170,213,42,143,244,167,88,93,207,3,124, 3,160,47,253,124,238,252,120,238,165,211,66,215,205,72,208,160,199,212,249,101,113,153,229,188,162,214,112,217,107,184,236, 57,46,185,17,157,194,158,199,86,217,231,218,218,206,175,115,51,83,239,220,47,82,165,80,60,113,241,178,255,157,239,195, 147,143,37,248,225,74,149,178,103,226,117,186,184,94,7,203,16,108,84,20,127,21,218,92,250,99,173,44,132,56,245,208, 22,142,77,127,252,250,104,102,100,54,28,233,51,31,207,36,73,14,134,177,44,3,167,213,102,215,174,240,231,173,60,91, 59,197,235,66,151,199,31,218,194,61,250,6,198,204,23,78,156,158,213,173,192,139,232,178,15,132,80,202,239,168,78,123, 93,9,237,179,175,63,153,62,195,255,205,223,112,108,55,247,49,218,29,149,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Browser2x[2251] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,8,130,73,68,65,84,88,133,229,151,91,108,28, 213,29,198,127,115,217,93,239,174,215,246,198,107,99,135,56,118,156,196,77,76,46,96,211,4,227,38,65,9,41,215,22, 4,15,32,158,82,42,90,181,42,82,169,224,161,15,69,106,165,170,23,30,184,20,169,45,18,73,91,21,90,90,160,37, 226,78,82,2,152,36,228,98,147,196,33,49,113,156,248,146,245,250,186,182,119,119,46,103,206,204,244,97,199,38,14,14, 42,106,223,122,164,79,163,157,57,58,255,223,249,190,51,103,207,192,255,123,83,190,76,231,214,214,239,196,194,225,208,77, 161,146,232,189,138,162,92,227,73,89,229,186,78,66,213,66,57,85,213,198,60,223,239,114,133,245,87,33,156,183,142,30, 125,198,248,159,1,220,112,195,15,43,28,87,121,180,36,162,127,111,235,141,45,218,245,95,91,31,90,177,188,134,178,120, 132,80,72,103,52,107,144,30,47,208,119,126,132,3,239,117,230,79,28,249,68,115,164,247,187,72,72,249,217,190,125,79, 76,253,87,0,237,237,15,222,165,135,67,187,190,245,192,55,99,183,222,220,162,143,103,115,104,184,172,92,182,100,174,207, 111,159,253,51,205,109,55,163,248,30,97,93,5,207,229,213,87,58,196,7,111,126,104,73,207,219,113,160,227,169,127,92, 110,124,237,139,138,111,218,244,208,79,235,234,175,120,98,231,206,135,99,203,27,171,213,254,129,65,102,10,38,137,170,37, 36,99,26,7,15,29,230,133,151,119,179,100,229,58,34,241,36,134,237,146,205,217,172,172,141,178,173,189,73,187,250,171, 95,137,28,57,212,115,103,42,117,77,104,104,240,163,125,95,10,96,211,150,31,253,120,99,219,85,63,121,236,87,223,14, 31,56,114,140,41,195,5,85,163,255,194,48,53,181,181,188,191,247,109,102,220,24,27,54,223,132,149,159,194,83,116,244, 80,152,181,117,37,100,199,210,156,58,59,200,170,198,197,220,121,199,245,250,209,174,51,237,137,196,26,57,56,112,176,227, 210,58,11,70,176,105,211,131,183,213,53,92,249,210,31,119,62,28,217,223,117,154,104,117,35,45,117,17,210,233,12,134, 94,78,73,73,140,169,201,9,98,137,114,28,199,197,114,36,158,231,97,78,141,50,156,25,97,244,194,121,238,186,227,86, 22,37,162,152,166,137,109,59,60,240,221,39,237,201,241,220,221,251,247,255,230,181,47,4,104,107,123,40,90,154,8,15, 190,248,226,163,149,137,210,40,0,185,124,1,71,8,78,157,238,97,124,218,164,181,125,43,0,174,235,98,59,46,150,144, 100,199,71,209,157,41,218,90,215,162,170,42,0,158,231,145,203,229,16,66,48,58,154,229,251,63,248,253,164,20,44,57, 112,224,113,115,182,158,122,41,64,184,132,71,118,220,127,75,178,44,17,155,187,151,40,141,147,30,206,48,154,147,44,93, 185,26,31,240,1,85,211,80,85,21,69,85,40,79,166,88,187,106,5,150,109,35,28,167,56,184,170,162,105,26,82,74, 42,43,203,184,97,235,234,36,170,251,240,101,29,104,107,123,40,26,141,235,99,111,189,241,139,184,166,21,217,124,223,231, 249,23,254,142,12,149,177,225,250,205,196,99,241,121,192,142,116,49,108,135,218,168,160,239,108,47,47,239,57,68,235,85, 203,169,77,85,176,172,254,74,146,21,229,228,114,57,12,195,192,247,97,199,253,79,26,174,163,165,102,93,152,231,128,239, 59,219,111,220,222,18,214,245,207,214,230,191,246,125,64,178,126,29,91,182,221,66,44,26,159,155,253,172,60,223,199,247, 125,142,247,244,227,41,58,59,238,189,19,53,177,152,142,211,19,236,124,179,155,151,94,223,135,162,40,120,158,135,174,107, 52,53,213,70,124,223,217,62,59,190,62,207,254,104,228,190,155,182,183,134,92,215,229,227,227,221,40,138,66,231,185,41, 182,125,189,29,207,7,85,9,170,206,1,251,72,183,120,163,117,77,35,229,165,197,216,22,87,198,185,121,99,35,195,163, 89,162,17,29,223,247,176,44,27,91,8,174,219,184,66,59,221,147,185,15,216,253,57,0,77,211,54,52,46,171,229,231, 143,63,67,228,138,85,196,195,42,107,175,109,199,114,36,121,91,33,81,162,205,43,238,56,46,66,186,164,194,130,242,210, 178,185,103,101,137,82,0,86,212,215,178,251,141,61,84,46,74,82,26,13,241,183,215,143,208,188,180,26,87,202,141,179, 125,231,69,224,73,153,138,70,35,164,150,54,211,220,212,72,117,253,42,164,175,98,218,14,51,134,32,155,23,88,66,98, 9,137,105,75,76,33,177,133,36,85,94,194,66,205,243,60,190,182,177,149,174,79,135,137,132,195,220,181,117,61,99,5, 137,170,106,21,11,2,56,66,70,51,99,147,220,115,227,122,170,244,105,242,5,19,203,150,24,150,131,97,10,166,242,130, 177,105,155,169,188,77,222,20,24,182,131,226,251,68,194,225,5,1,28,199,193,247,61,116,207,164,183,63,205,47,159,254, 19,94,40,1,158,95,58,219,103,94,4,170,166,230,199,13,181,226,217,55,14,177,114,145,79,52,46,216,216,176,146,209, 241,9,44,98,76,152,33,84,69,41,46,62,207,195,117,125,28,41,137,203,81,154,155,26,63,55,123,33,4,66,8,218, 91,86,115,126,40,131,82,177,28,233,170,160,42,249,5,1,80,181,177,137,108,190,162,178,102,41,67,182,75,100,108,136, 186,234,86,234,170,203,40,20,12,62,252,36,195,132,19,11,10,248,72,215,67,72,151,189,163,57,210,233,15,249,180,183, 143,120,105,41,247,221,125,59,82,74,108,219,198,182,109,84,85,65,69,50,57,157,35,63,147,199,247,25,91,48,2,240, 186,206,158,203,144,136,104,88,66,114,237,213,107,230,158,196,227,49,182,181,212,147,240,39,49,44,65,222,180,201,155,54, 134,41,176,252,8,239,158,83,185,16,190,138,110,163,142,153,124,1,211,52,177,44,107,14,226,233,63,252,147,37,13,77, 140,103,38,125,85,241,59,23,4,144,182,243,92,231,193,19,185,84,121,4,195,114,168,154,191,231,160,105,26,183,183,55, 243,141,117,9,20,107,138,130,89,4,41,152,2,95,43,193,18,46,134,229,208,113,228,20,166,105,206,233,147,158,94,198, 212,165,212,36,99,164,251,6,243,158,235,63,191,32,128,162,132,222,57,221,117,26,197,243,208,20,159,3,199,122,145,82, 114,105,171,92,84,78,247,225,247,201,27,197,226,5,83,80,176,68,113,177,218,14,125,153,226,206,103,24,6,166,105,50, 61,61,195,162,100,37,97,197,99,34,61,142,162,132,222,153,155,212,197,3,15,13,29,148,245,13,27,67,121,219,107,91, 187,174,81,63,220,103,80,238,141,81,153,44,199,243,60,252,96,215,235,62,121,154,131,131,128,30,197,10,94,69,91,20, 95,75,75,56,44,75,133,168,45,211,230,28,24,25,25,69,141,148,211,119,162,207,44,76,78,253,122,255,254,167,246,94, 102,13,128,20,234,99,199,58,142,206,184,150,73,77,50,198,174,142,9,122,251,206,51,51,51,51,167,116,38,131,67,56, 112,224,51,23,140,89,23,114,211,20,10,5,12,195,160,183,239,60,123,142,156,39,162,192,240,217,161,188,231,133,31,155, 23,235,165,0,67,67,7,101,170,114,245,64,127,207,224,109,155,183,94,19,154,52,124,170,34,38,101,177,48,66,8,222, 126,183,131,93,175,29,37,156,90,142,237,184,216,193,198,100,57,18,203,46,170,96,152,52,215,232,152,166,201,133,244,8, 229,87,52,241,209,59,135,141,236,248,224,35,157,157,187,206,0,214,101,1,128,216,240,112,215,120,105,89,67,44,221,63, 190,126,243,150,245,186,34,13,74,195,32,132,96,247,222,67,152,169,13,8,39,176,62,184,90,66,34,132,131,231,88,204, 228,109,154,171,36,170,166,210,63,156,231,72,199,25,123,52,61,240,151,147,221,47,190,2,184,128,19,104,65,128,56,144, 24,25,62,214,27,9,85,87,156,59,53,208,180,185,125,181,94,93,89,198,222,247,15,178,231,100,14,162,169,34,128,35, 17,142,68,10,7,79,88,248,142,133,47,76,18,97,136,248,22,61,125,99,28,222,223,47,50,67,103,223,60,217,253,210, 115,128,8,228,0,230,229,0,34,64,20,136,142,100,186,207,120,50,52,245,113,215,88,75,122,100,66,45,169,170,85,150, 175,90,139,234,187,56,194,198,151,54,210,54,9,43,146,82,221,103,113,50,204,234,37,21,212,167,226,244,28,31,116,79, 117,246,203,129,115,135,158,63,219,187,231,117,192,8,100,2,57,192,134,133,207,132,17,160,18,88,20,40,25,139,37,151, 52,44,219,114,79,69,69,221,117,213,75,107,168,107,90,22,74,166,42,40,41,9,161,135,53,44,195,194,44,24,76,140, 76,114,161,119,64,102,71,179,100,179,3,157,231,250,222,123,213,178,102,210,64,22,152,12,52,1,12,3,222,229,0,8, 28,168,4,42,46,82,89,40,20,175,170,169,89,211,178,168,178,225,218,112,164,172,86,81,245,152,134,18,118,61,207,241, 124,105,8,123,102,100,98,252,220,241,145,145,19,199,165,180,38,129,153,64,83,129,38,128,76,176,14,248,34,128,217,120, 146,64,57,144,8,84,10,196,2,192,8,197,255,146,217,24,61,138,217,138,192,102,3,40,4,118,79,3,35,193,239,139, 142,52,255,217,167,153,26,20,44,11,32,74,2,133,2,128,217,189,196,11,102,38,40,230,91,8,102,61,151,247,66,237, 75,125,156,94,4,164,95,84,92,37,56,30,6,0,50,184,250,151,27,224,226,246,111,16,152,132,111,125,241,69,247,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Calculator1x[686] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,6,6,13,47,29,93,206,74,167,0,0,0,53,116, 69,88,116,67,111,109,109,101,110,116,0,40,99,41,32,50,48,48,52,32,74,97,107,117,98,32,83,116,101,105,110,101, 114,10,10,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80,144,217,139,111,0,0,1,250, 73,68,65,84,56,203,157,147,193,106,83,65,20,134,191,57,51,193,94,210,214,146,54,8,90,109,11,117,97,82,72,218, 110,196,165,175,16,74,23,69,16,116,227,86,220,27,10,238,196,39,80,240,61,164,186,44,90,219,36,205,109,192,130,138, 74,139,168,237,197,132,18,99,114,231,184,72,188,165,139,34,118,54,195,240,207,124,115,254,255,204,152,165,229,210,67,160, 204,217,70,217,44,45,151,244,206,221,219,103,58,253,236,233,115,220,223,197,230,214,203,83,55,182,90,71,164,211,1,237, 118,7,107,133,161,161,115,44,46,220,4,56,6,52,155,7,167,2,62,188,223,195,90,33,58,108,209,108,30,113,253,198, 92,162,37,128,153,153,185,83,1,83,83,57,140,49,168,42,198,24,140,49,137,102,150,150,75,26,53,219,60,184,127,239, 191,252,175,62,122,194,165,11,153,126,5,221,110,143,242,234,99,126,117,58,125,85,21,253,7,64,68,142,45,220,90,89, 225,213,218,11,188,135,139,147,147,124,221,223,199,251,152,145,243,99,180,126,70,168,247,4,233,17,140,8,209,225,1,34, 134,254,13,30,23,4,1,149,173,55,92,157,157,69,85,9,195,144,124,62,143,181,150,48,12,201,229,114,136,8,141,70, 3,197,176,56,95,36,149,74,209,237,118,169,213,43,72,187,221,198,199,30,85,77,66,2,136,227,24,48,116,58,29,188, 247,0,120,85,172,181,232,96,78,44,92,153,154,225,245,250,58,24,195,68,54,203,206,78,3,239,99,198,50,227,188,219, 221,5,85,198,50,19,40,80,171,213,18,72,2,248,252,233,35,197,98,161,111,161,209,32,151,187,134,115,142,122,189,206, 124,177,136,136,80,173,214,112,206,81,40,20,146,42,55,43,27,200,32,118,156,115,120,239,241,189,30,214,90,156,115,136, 72,210,119,17,3,244,75,79,165,82,39,187,48,121,121,154,202,230,91,192,48,158,205,178,93,175,227,172,37,61,60,204, 118,24,98,84,25,10,2,126,15,218,60,58,58,74,20,69,39,95,226,252,194,2,0,214,90,226,233,105,12,96,68,208, 65,128,70,132,189,189,47,124,255,241,141,195,232,96,16,114,31,80,174,86,55,206,252,157,255,0,132,92,203,16,0,89, 204,210,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Calculator2x[1382] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,29,73,68,65,84,88,133,197,151,205,111,27, 69,24,198,127,227,100,109,199,113,252,149,214,105,226,56,31,36,166,31,170,148,210,164,45,81,123,66,21,161,23,75,28, 10,170,64,130,63,4,4,7,144,224,192,21,33,161,130,16,66,156,160,85,17,106,73,14,64,21,137,182,66,52,105,19, 209,10,218,180,77,19,103,109,39,177,173,216,142,119,237,29,14,254,168,157,181,99,71,8,241,28,86,154,103,102,223,121, 230,157,103,222,157,133,255,25,162,186,49,57,57,121,30,184,168,235,122,215,127,53,161,162,40,169,66,161,240,246,173,91, 183,46,1,180,239,232,255,252,131,15,63,234,10,6,3,187,6,145,178,97,79,157,62,89,245,132,229,39,203,174,247,223, 123,247,34,96,22,160,235,186,59,24,12,240,197,87,95,115,109,250,39,12,195,104,178,158,214,97,177,88,120,229,229,41, 222,122,243,13,52,77,243,150,249,157,25,0,224,231,95,127,225,194,235,175,114,108,236,40,66,136,122,67,246,4,41,37, 115,243,11,124,127,249,71,46,188,118,190,166,175,174,128,108,54,203,177,177,163,172,70,30,112,239,222,239,45,77,178,112, 231,1,35,163,253,228,11,5,98,209,77,124,62,23,137,196,22,67,195,189,76,140,159,229,216,216,81,190,249,246,59,52, 93,171,121,207,210,40,160,16,2,125,199,224,70,200,231,11,196,99,9,226,241,4,66,8,158,46,71,89,90,138,176,252, 68,5,64,215,181,74,38,181,92,109,204,186,25,40,67,81,172,45,9,104,107,179,112,252,196,33,58,58,108,24,134,100, 236,133,16,110,183,147,92,78,55,197,209,180,38,2,116,189,248,210,242,211,21,130,253,163,4,250,70,91,18,209,12,170, 26,5,32,215,138,0,171,213,202,167,159,125,201,169,83,19,28,57,28,194,231,241,34,44,123,55,163,52,36,201,84,138, 191,30,44,49,59,123,147,246,246,54,180,92,110,119,1,57,77,103,226,248,113,126,187,121,147,217,217,27,204,206,222,216, 243,196,141,48,16,12,182,144,1,45,71,104,52,132,213,106,99,113,113,145,248,198,58,178,113,229,105,10,33,4,142,14, 7,61,126,63,251,187,187,209,155,9,200,105,58,153,116,154,110,175,151,51,167,79,99,24,6,134,97,32,13,3,67,202, 74,187,33,183,163,93,205,101,178,89,211,49,172,227,1,141,116,38,195,221,249,219,168,107,17,0,252,254,30,66,135,142, 112,255,207,69,226,177,162,153,186,247,237,103,112,120,132,71,15,255,102,99,61,14,128,199,235,163,55,16,36,177,185,65, 60,186,86,49,180,162,40,236,243,31,192,229,246,152,74,181,73,128,150,211,200,100,50,168,107,17,194,225,48,0,87,174, 92,97,120,116,148,120,44,90,195,5,7,6,217,88,143,215,112,131,67,195,196,212,8,83,83,83,184,92,46,0,82,169, 20,211,211,211,120,188,94,211,135,196,44,64,211,72,167,211,0,36,18,137,10,47,44,210,196,217,29,86,19,215,209,105, 35,159,207,227,114,185,112,56,28,85,153,213,113,118,117,34,105,65,192,246,246,54,94,159,143,235,215,175,3,224,239,241, 3,180,204,41,138,66,42,149,170,196,76,165,82,40,138,66,155,197,210,124,11,202,8,14,12,113,226,228,68,165,173,70, 215,75,220,56,197,107,132,100,45,186,78,255,192,32,19,39,199,17,101,78,93,39,16,28,96,102,102,166,82,245,172,86, 43,135,14,31,164,80,40,52,223,130,114,138,30,63,90,226,206,220,31,0,184,61,94,122,250,2,168,171,43,181,92,111, 0,53,178,194,221,185,219,53,156,205,222,193,228,153,73,108,86,133,226,231,70,162,105,121,34,106,12,163,217,22,72,41, 145,72,146,137,205,90,115,13,15,215,225,134,76,220,192,240,16,81,53,202,195,191,238,215,156,2,223,126,63,46,183,199, 148,233,186,2,202,34,107,204,229,176,153,56,187,195,94,103,156,157,245,168,202,185,115,231,112,58,157,0,108,109,109,113, 245,218,85,60,158,22,78,65,73,134,201,92,146,22,77,40,33,159,207,87,38,7,112,58,157,228,245,60,93,174,78,140, 166,30,144,69,23,4,130,3,76,156,24,71,8,129,68,178,166,198,9,244,7,75,92,113,33,107,106,204,196,69,212,88, 37,150,219,237,6,32,153,76,2,208,102,177,180,98,194,34,150,31,63,98,97,126,174,24,200,227,193,127,160,143,232,218, 42,11,119,230,43,220,254,3,125,196,76,92,111,253,164,54,128,249,70,100,24,32,37,201,68,130,112,56,76,56,28,38, 153,72,96,179,91,77,156,189,46,103,171,132,74,38,147,149,213,151,23,183,243,195,86,55,3,229,33,213,230,114,212,49, 92,61,174,195,97,167,189,189,157,84,42,85,99,66,69,81,40,94,219,91,170,3,18,175,207,251,204,92,254,146,225,188, 181,156,172,195,129,164,47,24,100,122,102,26,93,43,29,67,171,194,243,7,67,24,5,243,53,223,124,10,12,16,8,250, 74,230,42,255,60,173,170,81,122,131,253,140,87,85,189,70,156,213,102,103,242,244,139,216,108,54,144,2,132,36,167,233, 168,107,241,234,153,236,192,118,141,0,33,68,250,201,211,229,206,179,103,95,170,236,67,185,50,142,140,132,138,237,42,126, 248,185,208,179,113,165,142,193,161,145,242,0,83,186,67,35,7,89,93,93,69,8,145,1,220,64,174,70,128,148,242,157, 31,46,95,250,88,88,106,46,128,255,254,207,164,34,9,33,13,67,102,179,217,79,40,213,104,83,112,135,195,209,171,40, 74,160,80,40,184,164,148,138,148,114,215,171,123,171,16,66,232,128,208,52,109,83,215,245,40,176,2,232,141,86,103,7, 58,1,7,187,252,188,236,17,121,64,7,210,64,134,210,230,253,3,159,9,192,80,44,64,103,237,0,0,0,0,73,69, 78,68,174,66,96,130, }; const unsigned char Calendar1x[603] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,251,0,251,0,251,85,89,109,150,0,0,0,9,112,72,89,115,0,0,11,18,0, 0,11,18,1,210,221,126,252,0,0,0,7,116,73,77,69,7,213,6,3,15,29,43,75,94,175,19,0,0,0,62,116, 69,88,116,67,111,109,109,101,110,116,0,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80, 10,10,40,99,41,32,50,48,48,51,32,74,97,107,117,98,32,39,106,105,109,109,97,99,39,32,83,116,101,105,110,101, 114,39,51,239,88,0,0,1,158,73,68,65,84,56,203,157,147,177,138,26,81,20,134,191,59,115,103,28,80,80,176,16, 123,11,5,17,130,1,21,124,5,43,9,193,98,11,193,224,110,49,181,181,189,196,128,32,90,167,77,47,250,2,98,37, 34,193,38,33,149,133,173,144,197,217,48,222,20,50,119,103,214,221,37,155,83,205,156,123,206,119,207,255,159,25,241,225, 99,243,27,208,228,255,98,34,129,102,247,211,221,155,59,227,241,56,159,191,12,110,101,144,216,108,54,0,8,33,254,9, 80,171,213,0,144,0,153,76,134,82,169,116,213,44,132,120,54,39,165,228,124,62,95,0,229,119,239,41,22,139,36,147, 201,200,4,225,230,167,32,199,113,72,165,82,44,22,11,228,75,55,62,125,14,194,52,77,12,195,0,192,243,78,24,225, 230,201,100,66,181,90,37,159,207,227,186,174,206,151,203,101,178,217,44,167,211,9,33,4,190,239,107,96,4,208,233,116, 88,173,86,244,251,125,102,179,153,214,57,26,141,46,122,165,196,182,109,76,211,212,0,25,6,236,118,59,218,237,54,135, 195,1,215,117,117,161,109,219,186,198,48,140,136,36,35,236,65,46,151,99,189,94,51,24,12,24,143,199,248,190,31,209, 44,165,68,41,133,101,89,215,19,0,244,122,61,150,203,37,158,231,209,237,118,113,28,7,203,178,104,181,90,212,235,117, 230,243,57,141,70,131,88,44,246,188,132,233,116,170,71,12,118,45,132,96,191,223,235,13,72,41,35,18,52,32,157,78, 107,211,2,151,149,82,40,165,16,66,160,148,194,247,125,125,150,72,36,30,1,199,227,145,225,112,120,245,13,188,246,94, 40,20,46,128,135,135,63,108,183,91,42,149,202,139,197,225,8,12,13,124,144,219,239,155,27,224,235,253,253,239,55,255, 145,63,127,253,184,249,11,104,130,125,246,45,41,107,239,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Calendar2x[1298] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,201,73,68,65,84,88,133,237,150,75,104,84, 87,24,199,127,231,220,185,51,99,154,52,153,196,196,196,73,66,26,243,180,46,138,34,166,19,95,20,2,109,22,21,52, 116,81,21,109,154,6,103,86,129,110,196,138,15,170,184,177,22,107,227,163,160,22,138,209,90,112,97,160,11,187,209,200, 160,118,225,19,68,226,104,2,9,84,146,48,36,205,99,94,247,222,211,69,50,151,76,50,177,218,196,69,105,255,48,12, 124,223,189,231,255,187,223,247,157,123,15,252,175,255,186,68,186,160,223,239,95,39,132,232,84,74,101,47,132,137,166,105, 97,195,48,62,58,125,250,244,239,51,115,142,57,110,248,206,231,243,101,87,85,85,241,232,209,35,202,202,202,230,5,16, 10,133,114,31,62,124,120,12,88,251,74,0,74,169,138,177,177,49,186,187,187,49,12,131,80,40,52,47,128,88,44,134, 101,89,213,233,114,114,102,224,192,129,3,210,178,172,12,211,52,25,31,31,159,151,177,109,34,37,192,219,233,114,105,103, 32,16,8,220,2,234,148,82,11,2,32,132,64,8,113,174,189,189,253,243,153,185,185,90,144,177,117,219,54,234,125,190, 215,54,179,166,160,147,79,38,132,160,235,230,77,46,93,188,152,147,238,250,180,0,186,174,87,148,150,150,50,50,58,74, 36,26,229,117,234,32,133,64,10,129,144,18,41,37,139,92,46,106,106,106,112,187,221,31,164,189,126,102,160,185,185,57, 75,74,185,104,113,94,30,134,97,216,230,177,88,140,93,173,173,172,89,181,138,119,171,171,249,176,161,129,223,174,93,3, 96,124,124,156,155,93,93,28,59,122,148,79,154,154,248,225,204,25,123,189,132,97,144,151,155,139,97,24,57,59,119,238, 116,255,45,128,148,114,181,148,82,184,221,110,12,195,176,227,67,131,131,20,21,21,113,240,208,33,246,238,219,71,207,243, 231,248,91,91,81,74,241,203,229,203,52,239,216,193,141,235,215,233,186,113,131,167,79,159,78,246,29,80,74,33,164,164, 188,188,92,57,28,142,173,51,253,102,181,64,74,217,80,190,108,25,134,105,98,77,139,123,139,139,217,127,240,32,76,45, 122,238,236,89,38,38,38,16,66,176,165,169,137,109,219,183,19,141,70,169,42,47,167,175,175,15,129,61,124,152,166,201, 154,186,58,209,221,221,253,41,112,246,165,0,154,166,53,44,95,190,156,196,180,167,79,234,199,243,231,121,22,10,113,255, 238,93,242,242,242,248,254,212,41,0,178,178,178,236,255,28,143,135,254,190,62,219,92,8,129,101,89,84,85,86,226,114, 185,234,94,165,5,213,101,101,101,24,137,196,44,128,103,161,16,189,61,61,252,241,226,5,15,30,60,224,254,189,123,41, 121,33,4,37,37,37,244,247,247,207,2,240,120,60,40,165,50,90,90,90,150,204,9,208,220,220,156,229,116,58,223,202, 207,207,39,158,166,2,95,31,62,204,79,29,29,220,186,115,7,221,225,160,253,196,137,20,115,33,4,197,197,197,76,76, 76,16,14,135,237,57,72,230,107,107,107,149,174,235,95,204,9,160,105,218,74,77,211,200,200,200,72,25,192,112,56,204, 165,142,14,6,6,6,248,115,100,132,171,87,175,18,14,135,217,176,113,99,42,0,80,82,82,2,48,57,7,51,170,208, 216,216,40,116,93,255,108,78,0,33,196,122,175,215,43,76,211,76,217,251,67,131,131,236,221,179,135,247,86,172,160,166, 178,146,175,118,239,102,151,223,207,190,253,251,83,204,133,16,148,148,150,2,76,182,97,90,101,44,165,240,22,23,227,245, 122,223,105,105,105,169,181,61,167,3,248,253,254,224,199,155,54,249,214,111,216,192,200,232,104,74,249,19,241,56,3,3, 3,56,116,157,252,252,252,228,251,125,242,41,132,64,78,189,120,146,229,207,95,188,152,156,236,108,59,46,165,68,147,146, 88,44,198,145,35,71,134,134,134,134,222,63,121,242,100,40,5,32,16,8,12,183,181,181,101,23,20,22,50,17,141,242, 42,18,144,98,34,165,180,129,180,52,49,33,38,45,219,218,218,72,36,18,235,236,109,24,8,4,50,93,46,87,214,146, 194,194,180,3,56,39,192,180,62,39,91,97,155,77,131,72,230,135,135,135,185,112,225,130,165,105,218,207,199,143,31,15, 218,0,166,105,174,212,117,157,183,167,246,244,124,164,148,66,41,133,105,154,68,163,81,194,225,48,79,158,60,33,24,12, 98,24,6,35,35,35,102,34,145,104,1,148,99,218,77,107,70,71,71,101,32,16,152,151,185,16,2,167,203,133,238,112, 224,116,58,201,204,204,36,51,51,147,220,220,92,170,171,171,121,252,248,49,69,69,69,177,222,222,222,141,192,175,54,128, 166,105,107,125,62,31,183,111,223,102,243,230,205,184,221,179,190,27,243,86,36,18,33,24,12,82,81,81,145,209,211,211, 179,37,5,64,41,181,218,227,241,80,88,88,200,149,43,87,176,44,235,37,75,253,51,73,41,89,186,116,41,5,5,5, 210,225,112,52,2,206,36,128,84,74,45,18,66,80,95,95,255,70,204,147,210,52,141,68,34,129,82,42,15,16,73,0, 43,18,137,124,217,217,217,249,173,105,154,105,207,110,11,41,33,132,25,143,199,191,1,226,51,207,132,89,76,30,30,221, 128,115,129,125,147,123,59,14,132,129,49,64,165,61,148,2,218,212,111,33,165,0,19,120,115,253,253,87,234,47,148,164, 196,128,74,9,165,126,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Chat1x[422] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,6,6,13,5,59,224,168,3,114,0,0,1,51,73, 68,65,84,56,203,149,147,65,78,132,48,24,133,223,79,155,176,109,34,18,247,19,111,97,244,30,198,149,196,3,152,56, 25,131,58,139,137,16,96,244,4,70,99,226,17,52,46,245,2,156,132,160,48,43,23,99,169,27,74,42,3,136,127,194, 162,180,239,235,123,253,91,130,81,81,18,28,1,120,194,248,154,163,5,80,255,169,40,9,20,239,194,230,121,14,165,20, 148,82,189,91,187,174,11,0,224,81,18,92,1,88,232,137,120,25,14,122,222,223,59,192,100,178,219,140,57,128,197,108, 234,143,14,29,47,195,13,0,0,32,203,178,94,17,17,129,136,224,56,78,51,222,0,12,9,77,193,104,128,41,110,67, 180,147,78,64,151,176,237,64,159,69,85,41,143,247,217,29,3,241,207,47,31,248,95,150,187,0,70,171,137,155,185,138, 162,0,17,65,8,49,216,74,249,45,79,24,103,119,0,20,133,209,245,177,101,209,253,108,234,163,44,75,41,132,96,67, 151,105,123,107,231,214,243,188,179,198,130,126,3,250,50,197,203,16,159,31,197,225,203,243,235,187,94,196,24,171,108,219, 150,0,214,105,154,126,1,88,155,93,32,51,215,170,92,157,38,241,205,91,61,103,1,144,0,170,250,83,245,255,95,0, 165,115,93,248,243,71,0,172,22,178,122,77,213,130,72,51,210,15,141,12,145,160,100,148,198,107,0,0,0,0,73,69, 78,68,174,66,96,130, }; const unsigned char Chat2x[783] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,2,198,73,68,65,84,88,133,237,150,193,107,211, 80,28,199,191,239,189,98,176,89,87,102,139,194,168,76,25,136,245,62,240,54,112,12,143,130,199,30,118,23,198,96,151, 110,115,141,8,99,203,14,99,135,33,196,131,120,144,57,240,63,216,160,176,129,39,175,10,59,137,32,226,193,66,109,210, 144,84,109,242,158,135,53,37,75,147,44,233,244,180,125,225,145,240,242,222,251,126,242,126,191,223,75,128,75,93,116,145, 52,131,21,69,153,115,93,247,37,231,252,234,48,102,140,49,155,82,250,100,109,109,237,205,48,243,161,40,138,105,89,150, 24,86,237,118,91,212,106,53,211,191,102,38,13,64,183,219,29,201,102,179,176,109,123,224,153,16,98,160,5,251,199,198, 198,224,56,206,136,127,30,77,191,15,131,74,98,46,132,0,33,131,17,63,55,64,152,113,28,212,63,5,56,143,177,167, 129,28,80,20,101,78,8,161,57,142,147,13,155,176,178,178,18,187,160,36,73,152,157,157,69,185,92,30,8,69,34,0, 33,196,139,229,229,229,172,44,203,177,70,81,178,44,11,219,219,219,40,151,203,167,204,19,3,56,142,147,147,101,57,52, 211,3,160,167,12,188,251,209,209,81,216,182,157,56,20,169,202,208,111,30,5,16,28,147,58,7,206,50,78,11,16,236, 31,10,32,206,44,202,136,16,210,175,125,175,254,125,207,41,0,158,8,32,238,109,227,178,188,88,44,162,217,108,162,80, 40,128,115,14,0,104,181,90,96,140,217,240,125,131,34,1,210,152,134,1,28,30,30,58,211,211,211,25,0,88,93,93, 61,121,109,74,59,134,97,84,1,184,137,0,206,218,238,56,128,253,253,253,15,156,243,169,153,153,153,43,227,227,227,141, 133,133,133,251,0,244,94,235,43,242,36,12,150,16,231,60,244,62,170,212,52,77,123,84,175,215,95,169,170,218,177,109, 251,250,226,226,226,20,0,171,231,217,15,65,98,128,168,22,132,241,100,154,102,102,115,115,243,249,241,241,241,67,195,48, 126,74,146,244,174,82,169,76,244,118,157,121,16,193,16,244,129,188,44,246,135,32,78,33,153,206,0,116,119,119,119,63, 1,184,93,169,84,110,20,10,133,187,0,190,226,164,2,68,24,128,196,24,179,116,93,151,243,249,124,127,97,195,48,144, 207,231,67,65,130,125,173,86,11,153,76,198,238,153,252,234,93,221,189,189,189,47,0,62,123,198,158,130,0,66,215,245, 167,91,91,91,170,235,186,89,0,80,85,21,185,92,14,71,71,71,206,193,193,193,153,101,75,41,237,52,26,141,103,0, 218,0,226,207,243,16,17,0,215,0,220,4,48,185,179,179,243,67,8,33,234,245,250,239,165,165,165,247,146,36,221,1, 48,25,211,38,0,220,2,80,68,194,255,205,176,65,4,128,52,63,63,255,184,84,42,189,229,156,119,76,211,124,173,105, 90,77,215,117,55,100,188,95,28,128,3,224,15,2,91,157,6,0,213,106,181,68,41,253,70,8,105,18,66,30,108,108, 108,124,76,178,216,48,10,141,41,165,244,30,99,172,180,190,190,254,253,127,25,95,234,82,158,254,2,241,140,161,96,32, 125,197,246,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FileManager1x[378] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,6,16,18,41,48,44,67,93,90,0,0,1,7,73, 68,65,84,56,203,189,146,189,74,3,65,28,196,127,251,145,69,177,176,73,44,124,128,128,207,225,19,8,130,136,31,129, 136,104,37,34,104,173,32,10,130,181,165,112,6,242,20,190,78,138,120,8,90,104,178,183,123,107,17,15,205,37,94,238, 82,56,229,252,255,59,179,179,179,226,168,221,4,216,19,130,136,10,8,129,125,224,73,103,135,175,78,46,73,146,1,225, 123,90,4,33,36,215,15,183,81,8,32,142,15,154,225,188,125,138,148,211,151,245,48,198,153,250,4,175,134,49,55,157, 14,58,35,30,163,59,250,214,148,186,254,138,177,180,118,47,70,6,25,217,183,134,237,213,151,82,2,221,94,131,193,231, 59,90,215,144,204,9,169,70,222,114,150,83,183,215,40,20,210,191,115,253,181,156,231,151,148,35,245,14,231,146,31,129, 245,250,219,92,81,52,128,181,31,60,199,203,149,90,216,202,71,168,218,130,79,253,236,71,44,213,6,64,234,221,255,182, 48,33,96,236,43,155,27,135,99,131,212,123,164,82,164,222,231,62,208,56,39,90,59,107,247,139,11,254,76,235,218,84, 7,231,146,194,8,95,134,90,101,183,231,143,210,134,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FileManager2x[667] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,2,82,73,68,65,84,88,133,237,148,205,107,19, 81,20,197,127,153,36,218,84,48,65,138,164,74,186,16,108,236,34,75,65,148,110,252,8,214,165,127,128,165,160,224,206, 86,93,136,46,92,186,16,138,244,95,40,93,235,170,136,85,112,163,130,11,65,92,104,235,194,133,133,150,154,106,172,249, 232,100,230,189,235,98,38,166,38,157,201,100,38,208,133,30,120,48,195,220,243,238,185,119,238,61,240,31,255,58,98,221, 2,46,93,200,223,32,158,124,148,140,119,13,237,128,105,105,12,81,183,22,151,62,205,134,82,119,177,56,54,51,115,245, 108,93,153,191,68,180,45,90,53,68,219,166,104,171,46,186,81,21,213,168,136,50,183,68,109,255,20,85,255,33,118,109, 83,236,90,73,236,234,134,216,149,117,217,46,125,150,235,147,227,245,137,226,137,219,94,57,60,203,154,40,230,239,141,100, 15,223,157,155,91,24,180,54,222,83,253,178,212,115,1,169,163,167,48,210,199,152,190,115,179,190,250,109,243,254,211,103, 203,15,3,11,56,127,110,76,22,159,188,196,92,123,75,45,68,242,38,6,142,156,36,150,62,206,229,169,41,158,191,248, 216,145,47,225,71,54,146,41,222,205,95,9,157,220,193,60,133,201,199,158,95,125,5,104,219,4,224,195,87,155,181,178, 238,57,245,112,198,160,144,75,32,170,17,82,128,178,0,88,47,107,78,143,38,187,175,204,14,8,240,102,197,162,144,195, 87,128,225,123,137,75,20,2,236,107,27,98,46,15,90,133,132,16,224,77,236,5,161,59,160,125,136,189,192,239,158,64, 67,184,27,94,173,116,118,231,204,104,210,227,158,144,2,154,191,160,249,63,219,231,32,63,84,253,243,188,92,58,240,55, 119,71,124,132,45,112,136,217,140,193,235,93,42,110,79,218,222,149,225,140,225,10,240,158,165,64,29,40,228,18,20,114, 126,145,254,8,61,3,205,214,69,53,162,240,67,232,18,247,204,136,116,223,140,40,162,19,70,133,223,16,118,233,64,159, 156,48,180,15,248,16,123,50,162,168,67,24,213,136,34,175,97,31,141,40,5,212,131,8,24,132,150,242,62,26,209,8, 80,6,74,128,242,18,16,3,210,224,40,207,141,79,35,162,64,43,68,52,162,21,136,66,180,123,68,187,223,154,239,10, 180,118,98,155,188,150,128,44,206,224,91,192,119,47,1,113,247,112,237,193,66,248,178,119,199,190,246,156,94,254,114,8, 24,2,50,192,0,93,214,53,0,76,55,113,21,167,253,171,128,246,19,0,206,28,28,4,246,247,65,128,237,38,220,2, 42,180,76,114,239,241,27,4,79,89,165,234,42,236,66,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Mail1x[550] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,18,0, 0,11,18,1,210,221,126,252,0,0,0,7,116,73,77,69,7,213,6,6,12,23,54,231,47,101,43,0,0,1,179,73, 68,65,84,56,203,197,147,65,72,20,97,24,134,159,89,70,247,119,112,23,215,177,173,131,167,234,88,104,23,221,240,212, 146,134,134,129,6,65,25,102,97,68,68,224,69,139,60,111,108,219,65,17,4,145,144,78,118,232,32,136,29,234,166,201, 222,108,219,14,9,230,213,52,88,171,63,98,254,29,115,103,60,168,131,131,163,16,8,126,199,247,251,222,231,127,127,62, 62,56,238,210,130,196,116,38,85,15,228,2,90,23,158,14,12,126,62,148,152,206,164,234,211,153,148,27,84,233,76,202, 221,129,7,39,216,125,249,73,255,51,150,22,243,252,150,146,98,209,230,231,250,47,254,252,149,116,223,185,207,139,151,207, 125,73,180,131,204,185,124,158,120,252,20,85,85,49,52,45,132,82,54,170,88,36,153,76,250,32,250,158,0,185,219,183, 186,249,240,126,134,229,229,111,180,180,92,37,86,93,77,69,133,129,97,24,0,100,179,89,166,167,222,114,175,167,151,137, 215,175,114,128,182,23,128,105,214,96,89,54,61,119,31,120,166,221,42,20,10,152,166,137,8,235,68,34,81,79,247,1, 132,16,52,54,54,240,110,102,154,75,201,203,0,88,150,133,82,10,165,20,139,95,191,208,126,173,3,33,68,48,0,224, 68,60,78,226,98,130,55,147,147,156,61,115,26,128,242,176,206,202,202,15,58,175,119,162,135,252,155,215,131,86,25,141, 68,49,99,149,52,95,105,246,180,209,145,33,202,117,13,219,182,17,84,122,122,104,159,219,117,153,155,155,229,198,205,46, 79,114,74,155,60,124,244,152,143,243,243,40,101,249,198,247,1,62,45,44,208,218,214,198,230,134,141,235,56,148,254,109, 160,161,225,148,28,234,206,159,227,251,234,218,193,95,144,82,210,144,104,218,110,232,97,223,96,25,32,140,8,53,39,107, 145,82,6,2,134,199,198,71,251,254,227,142,134,143,228,26,183,0,252,253,172,100,78,184,216,168,0,0,0,0,73,69, 78,68,174,66,96,130, }; const unsigned char Mail2x[1426] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,73,73,68,65,84,88,133,229,151,221,111,83, 101,28,199,191,207,233,122,90,250,198,216,218,181,180,101,51,93,183,142,173,142,224,54,50,221,165,198,12,8,226,32,128, 23,4,46,252,7,188,35,222,145,56,19,64,17,29,113,113,23,106,98,52,241,202,120,225,95,32,54,8,139,97,9,108, 48,88,193,185,141,85,100,221,218,158,246,156,211,115,158,231,241,98,235,241,244,101,172,19,18,47,252,37,191,156,243,188, 253,190,159,231,229,60,207,115,128,255,216,200,118,42,143,142,142,134,92,78,219,151,154,166,30,224,156,115,70,25,40,227, 224,156,129,82,6,193,34,204,229,114,153,51,151,46,125,54,251,194,73,47,95,24,125,109,252,243,79,255,204,100,50,156, 82,202,41,165,92,215,245,50,207,229,178,252,202,229,139,233,115,231,222,59,88,111,92,75,93,226,151,63,124,221,23,8, 254,120,230,236,187,94,66,8,36,73,66,161,80,48,92,146,36,72,146,4,171,85,196,224,171,67,59,150,22,254,56,210, 179,183,235,222,47,137,235,247,158,27,224,202,149,11,135,131,129,208,247,39,79,157,222,165,170,42,100,89,6,165,20,140, 177,50,167,148,26,101,3,7,6,109,139,139,243,135,186,246,118,204,37,18,191,206,252,107,128,241,171,31,191,29,10,183, 126,51,114,236,84,99,161,80,128,162,40,85,194,149,174,40,10,116,93,199,192,129,65,219,210,226,210,193,142,206,232,195, 235,215,111,76,111,27,96,124,236,163,55,90,130,193,239,142,30,61,209,152,207,231,235,18,47,185,170,170,208,117,29,125, 253,3,182,249,223,31,189,217,209,254,210,228,141,201,223,30,213,13,112,245,234,39,47,55,123,189,63,141,140,188,211,180, 93,241,146,203,178,12,198,24,250,251,7,108,179,247,103,15,199,186,34,63,76,78,222,74,111,9,48,54,118,49,220,184, 115,231,207,39,78,158,110,81,20,5,133,66,161,42,56,231,188,174,60,89,150,97,177,88,240,74,95,191,99,250,246,237, 99,237,209,206,111,167,166,166,10,102,189,178,125,96,98,98,194,33,54,240,91,39,79,157,238,164,140,33,155,205,150,5, 46,189,111,149,71,41,69,38,147,129,170,170,240,120,60,104,109,109,133,166,105,124,98,98,252,182,195,225,238,59,127,254, 188,94,210,20,204,0,54,145,140,13,31,122,43,74,4,1,153,76,6,148,210,186,92,215,117,72,146,132,133,133,5,200, 178,12,191,223,143,161,161,33,12,15,15,163,88,44,226,241,227,199,112,58,157,228,248,241,19,221,185,220,234,7,102,205, 6,115,130,81,253,152,207,215,34,44,47,47,27,159,218,102,189,149,101,25,233,116,26,162,40,34,20,10,33,26,141,194, 225,112,148,213,215,52,13,189,189,189,152,158,158,198,210,210,18,34,145,246,6,70,217,89,0,239,215,4,224,224,132,16, 2,206,121,21,128,174,235,72,167,211,80,85,21,187,119,239,70,36,18,193,254,253,251,65,8,41,91,253,156,243,245,88, 156,131,115,14,183,219,13,77,211,64,41,133,197,98,1,33,229,211,94,6,0,0,132,16,232,76,7,231,28,153,76,6, 107,107,107,104,106,106,66,48,24,68,44,22,67,67,67,131,49,207,197,98,209,16,50,11,155,1,24,99,136,199,227,88, 89,89,129,32,8,149,114,213,0,0,224,247,249,49,61,59,141,238,174,110,56,157,78,99,68,204,162,102,145,90,194,230, 247,84,42,133,96,48,184,158,102,124,107,0,198,24,98,237,49,220,189,127,23,177,104,12,130,32,212,45,102,46,103,140, 33,153,76,98,207,158,61,70,186,210,202,198,196,28,128,16,130,182,112,27,18,55,19,80,85,181,230,202,223,234,235,120, 240,224,1,188,94,47,172,86,107,25,224,166,0,230,158,48,198,32,138,34,122,98,61,184,118,227,26,100,89,70,177,88, 132,170,170,208,52,13,154,166,25,16,181,96,230,230,230,224,118,187,225,118,187,141,120,181,108,211,41,40,193,184,156,46, 196,162,49,36,110,38,176,175,123,31,128,245,133,90,217,27,115,94,42,149,130,197,98,129,207,231,219,180,231,207,4,168, 156,75,95,147,15,225,80,24,83,51,83,104,105,110,65,114,62,89,222,128,0,4,4,28,28,86,139,21,254,93,126,196, 227,241,154,235,162,110,128,202,134,145,214,8,82,79,82,88,89,91,193,200,225,17,184,156,46,99,42,204,83,179,184,188, 136,229,191,150,81,80,10,176,139,246,170,78,109,9,80,218,84,204,141,24,99,184,51,123,7,225,96,24,241,174,56,114, 185,28,158,62,125,90,86,135,16,2,81,20,17,105,139,192,219,236,197,204,253,25,116,70,58,225,220,225,124,230,40,212, 4,48,55,80,139,42,146,243,73,244,246,244,194,46,218,177,186,186,90,51,160,57,207,229,112,33,30,139,227,225,194,67, 4,188,1,184,157,110,163,30,101,186,104,214,171,222,154,54,130,48,198,144,147,114,72,103,210,24,236,27,4,24,32,73, 146,1,104,246,90,167,162,69,176,160,163,173,3,121,57,143,172,148,53,117,144,151,105,86,141,64,41,64,94,201,195,233, 114,194,223,226,175,217,235,205,158,149,22,240,6,32,21,36,228,229,60,28,14,71,85,121,77,128,162,86,132,223,231,135, 34,43,198,157,96,59,162,149,230,114,184,160,233,26,24,175,222,11,204,0,30,198,184,32,8,2,124,94,31,24,99,176, 219,237,176,217,108,85,219,237,102,7,208,86,38,8,2,8,17,4,0,65,0,18,128,108,9,192,3,160,137,82,221,243, 245,87,95,72,148,81,194,153,233,138,181,113,136,252,115,47,96,96,140,131,49,10,102,252,25,109,148,115,6,206,74,229, 188,34,205,160,40,178,7,64,0,64,26,0,47,157,205,34,128,102,0,141,0,220,0,172,27,254,34,173,136,245,59,168, 10,32,7,224,9,128,213,202,127,67,171,201,107,126,33,207,97,12,0,5,160,109,120,237,195,225,127,103,127,3,94,204, 217,235,137,31,210,117,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Monitor1x[611] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,19,17,58,52,159,194,36,103,0,0,1,240,73, 68,65,84,56,203,165,147,61,104,20,65,24,134,159,221,153,157,221,189,194,20,34,18,209,75,97,12,66,208,72,2,1, 33,96,97,115,96,17,36,106,180,17,82,88,137,193,70,17,15,46,133,164,176,178,49,130,149,86,134,147,72,136,88,156, 66,42,27,65,68,61,73,180,9,130,7,241,206,52,10,130,119,59,127,22,49,49,33,39,74,124,225,101,186,103,158,225, 251,38,40,149,138,15,128,115,108,35,222,251,105,74,165,162,111,181,154,190,217,106,250,191,197,57,231,51,157,173,183,84, 42,122,185,70,155,184,59,79,185,82,253,167,155,71,11,135,185,112,162,7,0,9,16,69,138,114,165,138,234,0,37,99, 136,20,103,142,46,67,16,50,251,166,11,156,7,60,24,139,54,134,114,165,202,248,233,62,0,194,141,100,21,167,68,105, 202,217,161,58,23,135,7,17,74,146,38,9,105,46,69,37,41,34,151,144,36,9,0,214,152,223,6,107,17,42,70,36, 49,253,61,123,8,115,5,250,187,27,168,232,19,143,23,14,32,188,3,35,201,66,13,128,177,118,171,65,148,40,70,6, 107,236,219,213,193,203,165,6,93,249,83,136,72,146,36,49,81,162,16,113,132,138,213,159,13,78,14,212,8,3,137,200, 21,224,219,44,65,48,130,144,130,171,199,159,179,80,223,141,179,14,235,44,83,111,3,140,109,3,184,60,122,157,128,128, 143,181,25,222,47,127,37,191,23,14,229,119,114,164,211,48,216,55,142,247,0,158,169,251,183,218,3,110,207,220,68,40, 129,148,17,66,10,62,55,230,232,221,63,202,195,215,53,204,247,59,88,99,177,198,254,122,130,221,10,120,242,174,155,40, 85,168,88,17,197,10,33,63,112,176,243,25,190,89,35,12,2,158,46,245,210,252,145,1,139,237,13,96,117,222,22,71, 232,29,206,57,46,61,234,192,249,29,104,109,208,86,99,113,171,6,27,1,90,103,140,13,15,112,111,238,213,38,220,226, 60,192,139,182,155,184,242,101,101,179,193,149,243,67,92,27,59,134,214,25,89,43,67,27,141,214,107,231,134,26,77,163, 81,95,135,73,96,122,114,242,198,246,127,227,255,230,39,112,67,0,83,217,168,244,129,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Monitor2x[1886] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,21,73,68,65,84,88,133,181,151,223,111,92, 71,21,199,63,103,238,221,95,222,93,219,113,226,159,73,155,95,141,83,133,168,105,155,95,18,105,35,212,199,10,130,16, 188,32,30,170,138,7,158,16,249,19,64,149,16,18,15,20,144,90,85,85,5,130,135,70,205,3,8,36,4,10,130,134, 64,21,129,144,146,86,56,113,82,151,56,181,29,59,78,156,245,254,240,238,222,59,51,135,135,123,189,187,174,157,8,161, 48,210,232,158,153,185,247,252,252,158,51,231,10,192,187,239,254,242,69,9,194,31,199,113,116,200,198,46,231,189,39,153, 142,46,157,172,157,243,155,246,122,215,201,249,230,239,188,247,0,145,136,249,87,51,138,190,243,230,79,223,188,4,32,231, 206,157,59,98,2,249,235,169,207,159,42,141,140,140,18,134,33,143,99,168,42,170,218,85,220,123,214,214,26,92,159,190, 198,249,247,206,215,227,168,245,226,27,111,188,125,37,204,228,194,183,78,156,56,81,26,30,25,161,82,173,96,109,252,95, 9,16,145,46,141,64,186,84,175,88,103,113,206,226,172,75,105,135,243,14,35,194,222,189,251,56,243,229,51,165,223,254, 230,215,111,1,39,67,103,221,179,99,35,99,84,170,21,126,242,243,63,240,206,123,23,113,137,187,54,9,84,213,255,217, 35,198,8,175,124,229,36,223,56,115,146,3,79,29,32,142,226,103,1,66,239,125,46,12,51,88,107,121,231,252,69,246, 78,30,102,100,168,140,8,136,152,196,82,35,244,229,3,214,154,30,68,80,5,17,80,5,69,83,203,1,214,221,174,201, 190,87,84,19,28,220,123,80,227,23,191,250,59,95,255,226,49,178,217,44,206,251,44,192,134,128,59,231,217,53,186,141, 131,123,71,19,166,169,95,179,89,161,127,32,96,121,217,161,36,130,73,133,171,38,241,246,233,129,87,159,196,223,43,94, 21,245,30,239,21,49,134,217,25,143,136,193,247,120,114,19,226,28,130,117,235,118,1,34,12,244,9,195,59,50,44,46, 57,92,26,157,117,30,154,90,239,1,60,120,36,89,123,159,42,176,238,17,211,13,101,79,136,205,103,21,80,21,98,167, 196,22,98,7,206,41,99,99,25,198,71,179,96,192,250,100,58,4,235,5,235,32,246,116,158,201,119,218,115,38,88,15, 94,165,163,64,175,7,54,41,224,85,136,156,98,189,18,59,69,66,216,57,158,103,104,91,158,124,33,192,186,196,218,108, 86,137,215,133,167,66,172,23,156,118,215,177,131,86,228,153,95,174,115,103,165,209,85,160,199,3,155,66,224,211,16,128, 32,2,3,3,1,195,219,243,20,242,33,131,131,194,210,10,148,243,194,196,132,225,218,77,135,119,9,40,147,48,120,212, 67,59,246,84,235,45,86,235,77,42,213,38,214,186,78,200,146,108,218,66,129,245,188,158,95,174,83,111,122,10,133,44, 165,190,12,147,79,151,232,47,135,4,6,202,101,131,247,176,99,24,14,236,13,249,232,70,76,181,225,105,71,142,118,100, 105,69,150,102,219,18,69,113,26,127,7,18,96,2,65,125,194,223,136,121,180,7,154,145,210,174,180,48,213,152,193,65, 195,142,225,60,171,205,85,84,33,87,108,113,251,254,42,207,60,95,224,137,93,5,178,165,26,179,51,130,0,3,101,79, 182,160,100,242,130,106,6,239,60,234,77,82,134,173,39,138,225,94,98,233,214,89,32,8,153,140,161,92,54,136,49,24, 99,216,243,100,150,61,59,139,60,168,37,22,141,143,102,153,24,207,114,104,127,137,76,70,56,245,124,145,233,153,54,19, 35,202,203,95,40,146,207,102,211,186,144,164,39,29,75,61,213,102,141,215,127,152,199,124,38,11,186,30,16,216,189,167, 192,183,191,53,76,62,147,3,132,192,8,227,59,10,252,99,234,62,205,182,229,185,131,67,124,110,50,100,116,40,207,213, 233,7,28,218,95,230,232,51,49,167,143,23,57,242,212,16,102,51,166,59,227,94,61,75,161,207,60,26,132,34,66,33, 23,208,151,13,193,36,57,254,241,92,133,91,243,109,26,45,120,225,185,128,125,79,244,209,106,121,174,220,80,246,237,242, 156,121,169,159,209,161,62,254,118,245,62,83,51,45,212,43,138,79,139,146,130,247,88,239,240,214,210,90,243,105,26,62, 4,132,179,183,214,248,209,219,21,144,16,145,0,49,1,198,4,152,32,96,223,147,80,111,90,14,62,217,199,237,197,22, 55,111,229,184,58,211,226,244,145,65,62,184,82,227,247,151,148,187,247,243,73,1,178,201,237,231,157,195,123,197,59,193, 59,195,157,59,173,180,16,61,164,18,70,145,167,86,79,4,38,51,36,48,201,115,225,30,172,84,35,246,79,20,185,57, 103,105,52,115,252,115,202,162,186,202,159,47,103,89,174,100,81,60,138,67,69,16,113,136,40,72,0,162,32,154,222,33, 230,33,30,160,91,169,146,105,48,98,16,19,32,198,208,106,27,22,238,90,198,182,123,110,47,10,158,28,243,139,25,106, 141,144,149,106,14,99,28,105,65,78,97,167,136,6,24,85,84,12,34,190,195,127,107,12,172,95,239,29,5,164,135,54, 88,27,242,239,133,54,187,198,34,22,238,22,48,65,136,243,134,202,106,30,49,30,163,2,88,84,13,162,154,222,164,126, 35,63,54,23,34,211,149,47,61,79,73,169,148,78,25,220,93,9,248,228,78,147,218,90,136,49,6,19,134,72,152,208, 98,100,147,242,27,120,164,252,141,17,252,150,24,232,54,56,164,119,92,119,166,237,213,194,98,200,96,73,136,34,65,140, 118,242,57,105,191,122,95,87,54,108,116,38,15,207,2,16,130,208,224,92,140,4,65,143,26,218,97,216,104,26,102,230, 2,188,243,136,186,78,135,164,222,163,222,161,105,47,176,174,176,170,118,26,22,231,226,180,223,124,88,33,82,229,236,171, 47,243,250,207,126,135,179,155,91,178,20,30,20,10,33,107,107,118,203,243,71,141,32,12,56,251,202,75,68,81,180,53, 8,173,179,124,243,107,167,121,245,171,47,224,156,235,105,193,147,150,218,165,221,45,74,23,160,176,17,176,233,13,218,5, 221,58,38,18,15,199,113,196,210,242,210,6,197,58,10,168,42,205,86,147,216,198,88,27,99,99,219,161,99,107,177,54, 198,57,215,249,48,142,99,226,118,68,161,216,151,34,27,90,205,38,198,8,185,124,62,49,42,182,180,163,136,66,33,143, 49,221,50,157,9,51,29,186,179,235,189,79,90,104,219,219,78,91,172,115,73,139,189,65,184,229,211,217,57,170,213,58, 55,174,223,76,0,58,183,192,220,167,243,220,153,95,162,242,160,130,179,142,219,179,183,169,87,235,220,156,254,152,40,234, 134,173,23,132,198,24,211,142,109,140,17,131,179,137,192,71,9,7,104,212,234,12,13,13,113,244,232,177,142,245,10,28, 62,124,152,201,201,73,234,245,6,141,70,131,254,254,65,142,29,59,142,17,195,122,145,18,17,226,40,34,48,38,2,196, 24,35,31,46,44,204,51,180,109,59,97,38,211,73,159,20,223,160,96,140,33,8,130,100,154,128,254,193,1,86,86,86, 184,116,233,47,148,202,101,130,192,80,42,23,153,154,154,98,234,218,20,197,98,31,165,114,137,90,173,202,251,23,223,167, 88,42,146,201,100,59,216,88,92,90,2,145,105,96,48,156,189,245,201,89,107,253,133,19,39,142,247,141,141,141,19,140, 4,233,63,158,235,130,177,247,95,207,37,23,205,196,216,78,234,245,42,165,82,25,17,97,120,199,40,213,145,85,156,119, 20,10,5,64,201,61,157,103,173,182,70,190,47,135,49,134,118,20,113,103,97,129,203,31,92,110,126,120,245,163,239,1, 25,1,50,175,189,246,221,47,237,222,179,251,251,34,102,191,181,46,252,127,253,156,170,170,181,214,205,78,95,159,254,193, 133,11,127,250,35,176,184,94,255,12,208,15,148,128,28,91,180,106,143,97,248,36,166,196,192,42,80,3,156,108,241,98, 183,112,63,254,209,173,201,233,248,15,107,246,196,185,36,0,42,57,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Terminal1x[668] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,18,21,37,27,70,252,216,25,0,0,2,41,73, 68,65,84,56,203,125,147,207,75,84,81,20,199,63,119,124,51,42,100,65,134,209,194,192,18,10,87,174,92,181,168,69, 203,54,237,130,210,106,145,186,8,23,65,96,173,130,54,181,14,74,176,69,98,130,254,1,181,45,37,8,194,162,52,80, 35,157,177,24,43,29,125,142,153,239,221,95,167,197,27,103,70,45,15,28,238,189,220,115,63,247,123,14,231,168,161,231, 131,7,141,177,253,214,218,238,56,142,27,140,49,84,220,98,108,245,57,113,103,221,122,20,199,143,181,214,15,2,165,212, 253,163,77,199,122,78,182,180,166,51,181,117,128,128,240,79,243,222,177,94,44,146,95,202,55,142,79,188,190,157,91,204, 166,3,224,250,137,150,214,244,149,174,78,166,63,77,179,159,137,36,228,211,109,167,232,237,233,205,228,22,179,61,129,136, 212,41,149,226,203,220,28,163,47,31,225,197,33,34,120,113,120,239,17,73,220,121,65,196,225,189,163,243,66,63,169,148, 66,68,14,5,21,121,194,212,199,89,192,225,189,148,64,201,227,109,144,23,193,121,11,128,117,201,90,5,240,52,54,53, 36,193,222,227,177,120,239,240,37,64,108,182,8,215,151,9,55,11,0,56,231,118,2,68,132,169,15,51,244,245,222,229, 217,200,19,150,11,121,4,193,57,75,33,252,73,20,109,38,129,74,37,31,238,1,120,161,190,33,195,171,55,47,184,209, 213,71,97,109,153,193,145,135,172,21,126,65,141,165,254,64,109,9,64,41,133,93,0,47,158,217,233,121,86,127,252,161, 163,253,28,153,160,150,247,147,159,17,239,203,143,80,149,237,158,20,16,32,112,220,236,190,197,240,216,0,111,39,39,8, 210,10,168,41,41,87,59,20,184,221,69,4,248,58,251,141,75,87,47,130,8,40,120,55,62,83,190,211,58,230,204,249, 246,242,217,57,191,171,6,128,243,46,169,145,74,1,208,113,182,173,74,186,66,165,82,251,40,16,40,174,110,253,191,13, 171,242,223,81,3,165,148,6,169,111,62,222,204,194,194,66,185,93,247,179,198,35,135,137,226,8,165,212,239,0,212,112, 54,55,127,109,108,108,52,216,216,40,18,134,33,97,184,70,20,69,24,107,176,214,98,183,39,209,90,172,53,104,163,89, 89,41,104,224,105,32,226,239,228,151,190,147,205,205,95,54,198,100,180,214,149,81,54,166,12,217,30,101,173,53,70,155, 216,88,59,36,34,247,254,2,215,162,130,23,152,77,245,29,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Terminal2x[1488] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,135,73,68,65,84,88,133,229,150,239,143,93, 69,25,199,63,51,115,118,47,139,187,75,3,217,130,72,163,20,42,109,73,200,138,237,90,160,24,53,209,18,106,196,196, 87,96,98,124,97,136,9,137,127,128,33,17,21,2,34,63,94,25,224,133,188,64,8,9,63,92,107,196,20,66,2,68, 40,216,66,151,110,45,108,149,178,219,42,148,237,238,182,187,189,119,239,189,51,103,102,30,95,156,115,207,61,119,239,221, 198,148,26,95,248,220,204,61,115,158,51,231,121,190,243,253,206,51,115,224,255,221,20,192,19,79,255,118,139,70,255,38, 74,188,70,68,206,251,79,94,20,17,66,8,196,24,139,214,125,31,137,177,237,19,161,169,20,147,105,154,222,113,215,157, 247,188,13,160,158,124,242,241,205,186,223,188,117,237,232,216,224,218,145,139,85,146,36,231,124,150,34,130,136,224,156,227, 159,31,29,147,23,94,248,67,173,81,107,108,187,247,222,7,223,75,148,209,143,141,94,179,101,112,120,104,88,205,28,157, 198,123,127,206,1,180,44,73,18,70,46,90,171,118,124,115,231,224,174,63,141,63,6,220,152,120,252,214,75,46,254,172, 154,57,58,205,27,111,252,133,253,239,28,64,162,116,189,172,148,66,107,141,214,26,99,76,209,47,183,51,249,141,209,92, 177,97,61,178,65,88,183,238,243,170,209,104,110,5,72,136,84,146,36,193,90,203,196,254,3,76,76,190,137,73,250,64, 218,32,164,245,47,109,79,25,162,148,198,34,66,235,87,122,153,24,3,63,184,245,118,46,191,124,61,70,107,156,179,149, 12,64,110,33,4,148,82,40,165,249,233,221,63,70,0,145,152,5,202,53,108,5,205,52,141,121,252,88,104,12,165,113, 34,29,49,30,190,235,119,104,109,176,214,226,189,47,164,238,90,113,169,247,204,207,46,21,73,68,58,147,72,9,76,113, 141,49,131,34,89,226,40,17,132,236,154,131,240,62,96,140,193,57,75,122,38,0,32,36,231,181,102,169,16,178,96,146, 43,32,197,204,164,228,87,249,172,85,6,2,149,43,166,218,113,36,98,76,206,64,154,182,1,132,16,218,11,13,240,105, 96,238,248,41,204,96,133,180,218,204,88,136,173,25,231,140,228,180,118,82,159,61,203,102,47,56,239,104,52,107,212,27, 85,154,205,58,167,171,75,5,128,212,151,0,148,203,78,27,131,16,49,21,225,138,205,155,48,104,254,254,254,4,161,233, 242,100,237,154,206,102,88,150,4,66,76,105,212,171,84,151,23,105,218,122,30,20,250,62,147,85,145,49,6,103,45,169, 115,120,159,118,3,48,198,100,12,124,178,200,23,174,134,29,91,111,97,253,231,54,243,218,91,47,50,51,53,69,176,62, 219,209,144,54,43,49,226,125,202,201,165,57,170,181,197,82,69,40,148,106,11,219,90,3,214,90,92,154,226,125,232,13, 64,68,80,73,228,208,193,189,196,152,242,229,141,215,115,235,183,127,196,129,77,251,216,243,215,151,56,249,241,44,226,51, 186,67,244,156,174,158,164,86,95,66,148,48,48,212,79,145,115,69,71,145,49,96,157,195,57,87,228,76,188,247,197,54, 105,180,33,77,61,11,179,75,196,227,167,56,246,222,49,94,30,220,205,213,95,26,229,218,209,109,220,246,189,59,216,245, 242,51,188,253,210,107,212,235,53,22,171,11,196,16,59,215,176,162,167,121,31,81,74,21,18,116,2,136,17,231,44,74, 107,162,68,68,7,148,138,160,20,202,120,68,5,68,101,101,230,197,114,186,126,2,235,44,125,21,157,137,12,217,216,94, 153,85,241,24,0,107,45,214,218,78,0,49,230,12,24,141,79,3,11,179,139,12,95,122,33,99,55,108,231,235,99,223, 98,237,69,151,240,250,187,175,240,232,35,15,49,253,183,195,196,52,116,37,232,202,187,194,239,125,108,3,112,43,1,72, 196,185,20,163,13,49,6,210,96,217,242,213,235,249,225,77,183,243,238,209,9,30,121,250,1,38,223,220,139,175,123,140, 6,83,49,93,201,87,211,126,37,24,235,44,174,204,64,154,230,18,88,139,54,6,219,180,28,155,249,23,159,204,30,231, 254,39,126,201,238,93,127,164,49,95,43,157,3,173,216,171,80,190,146,148,124,108,244,89,0,103,45,205,94,18,88,231, 48,90,35,128,54,154,87,118,191,72,99,174,134,4,65,107,221,147,214,178,179,235,145,234,184,20,231,72,246,161,210,174, 188,188,10,178,69,104,140,33,134,72,189,106,169,87,109,87,148,177,91,182,115,213,134,141,171,78,245,195,15,63,96,207, 248,171,61,153,137,65,74,253,118,229,228,12,68,82,231,80,90,23,123,126,11,119,139,66,128,141,95,220,196,157,223,255, 121,143,240,153,61,248,251,95,177,103,252,213,78,181,114,52,229,35,219,175,100,32,22,251,128,38,70,161,89,247,160,186, 105,61,124,248,48,191,126,246,190,85,1,76,77,29,194,46,231,53,94,2,14,16,75,31,57,229,243,167,216,7,172,179, 36,73,31,90,107,22,142,159,238,153,224,249,135,198,121,158,241,85,1,156,201,180,54,133,246,93,0,162,196,188,52,52, 191,248,217,221,36,73,114,198,79,173,179,177,16,60,115,115,39,186,1,132,16,236,114,173,86,209,218,176,188,92,163,94, 175,157,85,130,178,125,231,39,163,76,46,252,153,153,167,46,101,113,113,177,240,175,89,179,166,56,144,148,82,22,64,7, 239,247,237,159,120,71,190,50,182,141,129,129,129,79,157,28,96,223,137,231,176,161,94,220,15,13,13,113,217,101,235,48, 198,112,193,240,5,204,205,207,137,68,38,129,97,117,243,119,111,30,93,51,60,244,250,206,29,59,207,191,242,202,13,170, 82,169,16,66,32,196,72,12,33,235,183,90,12,196,16,9,177,211,31,243,241,157,247,173,126,123,188,181,150,249,249,57, 57,50,125,164,57,117,104,234,182,131,7,223,223,171,128,254,237,95,187,238,27,35,35,35,247,107,173,175,2,233,63,39, 52,244,52,149,250,52,157,254,224,31,71,30,56,116,112,106,15,112,178,85,39,3,192,133,192,80,222,239,99,213,99,230, 172,77,128,8,4,160,1,156,2,230,203,73,20,208,95,106,255,13,75,1,15,216,28,200,255,222,254,13,111,233,1,150, 24,15,8,92,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char TextEditor1x[574] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,9,22,18,55,41,59,82,2,72,0,0,1,203,73, 68,65,84,56,203,165,147,77,104,19,65,20,199,127,51,221,163,72,22,34,45,226,177,224,41,160,88,43,1,15,130,21, 132,120,236,69,208,182,39,175,165,23,21,60,138,32,197,32,245,34,126,128,154,22,138,49,189,91,26,17,77,92,16,237, 193,98,211,141,27,76,253,192,213,108,235,16,21,90,145,205,120,48,67,179,109,106,43,190,203,255,13,204,251,207,111,102, 222,131,255,12,97,146,226,93,250,128,25,224,216,86,122,120,136,188,169,147,0,151,71,47,157,1,102,14,30,119,216,142, 182,18,88,77,189,1,240,237,249,57,182,163,87,79,74,221,172,59,45,141,211,222,84,64,89,21,88,221,147,167,172,10, 252,232,122,216,86,95,76,75,6,199,138,28,233,31,6,24,55,4,196,227,113,196,137,165,63,139,125,77,101,77,125,223, 39,127,79,50,116,237,25,31,158,140,51,183,16,132,64,135,213,122,31,165,20,245,122,125,195,75,7,65,128,155,73,173, 21,123,203,124,45,77,117,0,61,17,3,219,182,177,109,59,82,236,251,62,110,38,197,224,88,145,197,199,25,94,149,151, 81,165,28,64,207,200,100,99,246,175,4,230,228,129,116,129,197,124,134,185,183,10,85,202,241,115,255,69,206,159,189,48, 11,136,77,9,180,214,20,210,189,12,92,121,138,55,125,135,202,231,239,168,249,7,188,239,26,166,179,205,55,70,8,180, 214,100,179,89,126,201,67,204,59,14,239,62,213,89,122,61,5,189,105,118,173,172,0,218,52,161,110,75,16,134,33,187, 63,166,121,244,165,155,251,185,28,221,242,37,59,251,110,145,76,38,113,93,151,55,149,5,140,139,92,79,80,173,86,241, 60,143,145,201,6,71,59,43,172,238,72,16,30,24,37,145,72,96,89,22,150,101,69,186,120,3,65,44,22,67,107,77, 173,86,67,107,141,148,18,173,53,66,8,132,16,173,219,27,17,3,165,20,142,227,108,58,117,198,100,125,24,131,137,155, 183,175,159,250,135,41,158,48,201,111,90,157,232,152,121,9,252,18,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char TextEditor2x[1523] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,170,73,68,65,84,88,133,229,151,93,108,28, 87,21,199,127,119,230,206,236,108,179,107,59,235,143,196,41,37,45,9,109,66,82,160,164,47,128,65,248,35,171,180,10, 162,106,42,90,250,84,53,15,1,41,85,196,183,252,22,9,164,244,5,33,162,130,140,146,242,161,150,22,210,74,37,128, 146,216,177,13,201,3,34,162,193,78,105,140,149,15,187,137,237,218,105,156,196,245,218,222,217,221,153,123,120,168,103,187, 142,189,182,99,224,137,191,116,71,71,103,238,220,243,63,255,123,231,156,25,248,127,135,42,119,227,39,173,206,11,249,124, 248,140,235,218,191,2,88,169,189,239,64,97,239,178,8,28,60,120,176,194,117,221,158,208,132,31,67,132,204,197,231,248, 250,222,52,109,47,116,0,172,216,142,223,247,99,4,136,185,177,119,44,203,250,244,158,61,123,222,47,37,160,75,236,199, 214,223,251,209,123,170,171,171,1,161,251,130,144,72,122,32,2,176,98,123,235,39,183,130,8,227,227,227,31,185,54,118, 125,23,240,139,5,9,136,72,93,34,145,176,223,123,111,140,241,27,227,40,165,152,202,248,40,245,129,72,69,91,150,176, 41,153,143,226,236,217,55,169,175,175,167,178,162,202,86,74,213,221,190,5,69,2,90,235,90,203,182,173,208,132,0,36, 235,155,57,220,118,154,196,218,102,64,56,220,118,154,85,107,26,1,56,220,118,138,187,234,190,132,136,112,168,237,20,94, 205,23,1,56,212,118,138,88,245,23,144,89,219,73,53,16,0,97,16,96,89,182,210,90,175,93,140,192,186,212,234,20, 219,30,218,134,136,65,228,41,164,40,79,81,165,219,159,47,241,73,241,42,34,80,50,85,41,197,200,200,48,195,67,195, 229,21,80,74,213,85,86,84,162,181,94,34,80,121,95,185,57,74,41,18,137,36,182,109,175,41,75,0,168,113,28,7, 99,12,237,237,237,243,22,186,83,50,165,72,167,211,184,174,139,136,164,202,18,16,145,170,40,251,116,58,125,71,129,150, 82,66,68,34,101,87,151,37,96,140,169,116,28,7,17,161,163,163,99,209,140,238,132,12,64,75,75,11,90,107,38,111, 12,165,118,167,147,127,48,98,53,219,138,119,253,130,217,89,186,5,73,173,53,198,24,90,90,90,86,20,168,156,18,87, 46,157,227,216,43,7,184,220,247,102,114,103,227,227,59,91,182,61,169,206,116,255,122,227,239,122,142,255,86,3,236,223, 191,223,181,44,203,86,74,33,34,156,60,121,114,201,64,219,183,111,95,114,206,165,190,51,28,123,229,121,198,174,254,139, 237,59,158,230,153,111,255,156,100,239,63,149,247,250,27,52,244,143,240,146,54,91,52,64,109,109,109,202,117,221,130,136, 216,34,82,84,96,177,189,141,236,133,130,247,247,158,230,216,171,207,115,243,218,32,13,15,63,192,83,143,124,149,112,106, 132,194,208,85,134,253,28,250,196,81,126,115,127,62,112,44,117,84,3,228,243,249,213,53,53,53,5,17,241,68,100,69, 146,139,8,231,207,118,115,252,213,3,76,191,63,70,195,195,155,248,212,151,159,160,144,25,102,114,176,139,32,63,195,149, 203,175,113,166,167,195,12,108,156,206,163,172,23,167,51,153,239,106,0,203,178,170,61,207,19,17,193,24,67,103,103,231, 146,193,75,238,50,58,240,15,46,252,253,117,108,201,210,248,217,173,108,249,196,231,200,221,122,135,201,193,78,242,185,44, 125,67,62,23,199,224,250,196,75,226,38,106,94,158,118,172,111,190,214,62,121,19,62,124,11,170,61,207,179,140,49,136, 8,205,205,205,203,202,250,220,223,142,243,199,151,127,136,35,51,236,248,252,131,60,176,241,62,252,137,203,76,92,234,32, 231,231,120,235,74,150,75,215,20,185,192,165,101,215,115,216,21,27,166,7,6,175,254,126,223,190,125,55,163,53,34,5, 82,241,120,220,138,228,239,234,234,90,50,248,192,91,237,12,244,28,101,215,163,13,108,184,247,110,252,27,23,153,24,56, 193,84,182,192,185,129,44,23,70,13,98,175,98,195,103,190,194,211,187,191,71,252,174,85,244,246,246,218,150,53,60,167, 24,105,128,32,8,86,199,98,49,55,34,208,216,216,184,232,22,252,229,79,135,24,57,127,140,189,223,111,37,85,179,134, 177,206,31,48,145,241,233,25,244,25,188,38,164,214,172,231,137,111,124,139,205,15,53,22,187,169,49,6,207,243,28,99, 204,156,98,20,29,194,26,173,181,54,198,96,140,161,171,171,107,129,189,254,48,243,161,183,79,240,236,179,95,67,75,142, 161,139,111,243,231,158,12,3,163,57,42,107,215,179,165,241,49,82,245,31,103,244,150,48,218,221,13,64,83,83,83,84, 13,181,136,204,105,72,122,150,221,186,168,15,136,8,77,77,77,115,50,15,130,0,223,247,57,113,228,71,156,255,235,17, 60,47,206,207,126,250,75,148,82,172,170,72,145,170,127,144,29,233,39,89,123,207,253,196,98,49,92,215,197,243,60,226, 241,56,209,186,97,24,162,181,38,8,130,117,11,41,80,23,245,129,232,12,148,34,12,67,110,141,191,75,220,75,210,244, 248,119,72,166,238,198,137,87,97,176,41,20,10,216,182,77,44,22,99,102,102,166,72,58,42,235,198,152,98,50,142,227, 144,207,231,107,231,17,240,125,191,216,9,141,49,101,207,128,49,134,32,8,40,20,10,4,65,80,84,204,178,44,148,82, 104,173,113,28,7,203,178,176,44,139,210,154,98,140,65,107,141,239,251,53,243,8,100,179,217,148,235,186,132,97,184,96, 181,139,16,5,209,90,207,241,47,84,49,163,204,35,24,99,112,28,7,223,247,171,22,82,160,34,146,108,177,18,187,220, 15,144,114,62,199,113,152,158,158,158,79,32,147,201,36,171,170,170,176,44,107,222,195,229,176,156,118,125,59,140,49,76, 77,77,37,129,90,96,18,200,105,32,62,53,53,229,245,247,247,211,215,215,119,199,139,46,23,74,41,54,111,222,204,204, 204,140,51,75,64,3,215,53,224,228,114,185,48,12,67,123,211,166,77,255,51,2,0,190,239,147,203,229,12,16,7,166, 1,173,129,28,240,98,107,107,235,110,99,140,189,210,197,163,138,183,152,207,182,109,99,140,57,2,204,204,142,92,52,67, 3,149,64,2,112,102,199,127,27,1,31,124,172,103,129,91,179,4,22,252,57,181,202,248,255,83,72,201,40,226,223,231, 245,88,118,110,179,155,6,0,0,0,0,73,69,78,68,174,66,96,130, }; } namespace Device { const unsigned char Clock1x[897] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,9,15,8,58,5,128,132,46,85,0,0,3,14,73, 68,65,84,56,203,101,146,75,76,92,101,28,197,127,223,119,239,188,152,185,119,96,34,8,210,202,35,88,29,108,48,150, 190,226,162,177,59,220,152,138,193,186,32,26,54,38,68,87,181,53,38,44,77,99,26,31,137,198,68,77,172,53,177,139, 62,240,17,77,76,163,46,176,5,77,85,40,5,58,88,43,218,17,233,76,167,204,12,195,204,189,195,12,119,190,207,141, 109,40,158,228,236,206,57,255,71,142,96,19,142,28,24,25,210,146,23,5,226,97,148,14,8,67,122,90,138,27,85,181, 126,230,157,207,94,127,101,179,94,108,48,246,104,248,116,247,190,71,123,182,247,198,9,71,194,8,1,90,67,113,181,196, 204,84,130,75,151,230,211,131,195,231,142,245,60,146,10,34,117,146,80,242,180,185,193,124,97,112,120,192,46,27,138,85, 159,131,40,190,118,103,138,221,113,140,120,224,65,26,59,83,205,141,205,149,55,61,189,115,213,208,191,172,8,183,93,73, 0,141,62,62,56,60,96,223,88,43,208,254,80,136,104,245,237,187,214,180,235,45,182,110,107,161,119,111,142,104,195,46, 131,192,187,13,200,167,163,192,14,121,228,192,200,208,238,125,59,118,150,180,71,91,87,35,45,91,226,155,207,68,74,137, 16,2,51,16,67,178,68,165,116,2,167,52,19,4,253,131,4,6,182,247,198,89,46,103,105,109,109,166,144,255,135,248, 227,167,72,103,125,119,63,75,8,42,94,31,158,232,39,149,172,114,242,195,7,170,120,242,156,169,209,123,194,145,48,150, 23,66,41,133,207,103,81,118,139,132,234,44,70,94,218,134,223,222,203,115,109,57,108,219,66,200,24,210,127,16,195,187, 201,194,212,199,209,161,23,250,131,18,168,23,2,154,154,26,200,23,242,40,165,168,41,141,227,20,57,250,222,239,68,98, 221,76,76,76,160,148,66,107,133,97,26,152,134,4,165,5,208,101,2,43,90,19,43,187,85,58,58,218,169,84,214,80, 74,81,44,22,233,238,238,230,229,195,175,114,237,218,85,106,181,26,82,74,180,82,104,13,72,52,176,32,5,226,162,83, 114,88,252,59,141,82,10,207,243,240,60,143,67,135,14,147,72,36,200,100,210,88,150,69,173,86,195,178,108,202,110,25, 167,228,128,207,112,63,57,253,150,35,129,179,115,147,243,216,134,133,83,114,241,249,252,140,141,141,49,58,58,74,42,181, 116,39,48,28,142,160,53,44,95,207,50,55,57,79,133,218,12,128,124,227,203,163,39,126,62,63,53,217,24,182,25,255, 254,87,180,214,244,245,61,65,58,157,98,173,82,65,107,77,32,16,192,52,77,242,153,28,238,178,203,197,31,167,171,95, 77,156,121,6,192,0,232,188,183,107,110,97,54,249,236,254,253,143,249,255,252,99,145,92,33,207,253,109,91,8,6,130, 4,131,33,252,190,0,55,255,202,144,191,190,194,201,15,206,234,217,165,217,247,167,230,127,154,3,178,6,192,76,114,58, 239,55,253,87,150,174,102,246,52,53,196,162,109,45,173,120,69,143,74,126,141,114,182,204,173,228,45,46,143,207,242,245, 231,223,174,143,255,118,225,248,249,233,239,190,1,210,64,78,108,232,74,61,208,249,228,174,254,231,239,187,103,235,83,117, 254,186,22,41,164,169,209,202,93,119,139,233,66,58,241,197,248,169,143,128,20,112,5,88,4,180,224,255,136,252,23,118, 155,26,40,3,171,64,22,40,0,234,182,248,95,201,36,100,6,22,194,54,223,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char Clock2x[2399] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,9,22,73,68,65,84,88,133,141,151,105,108,92, 213,25,134,159,115,183,241,44,158,205,123,28,219,177,147,24,39,33,161,9,4,74,22,82,32,165,4,165,128,74,35,74, 91,10,5,68,69,161,42,21,8,90,80,85,255,65,173,232,78,68,171,178,41,164,85,171,4,138,18,168,26,34,90,53, 133,70,80,8,33,100,113,98,156,56,118,226,125,118,123,60,119,238,157,185,247,244,135,199,19,59,113,3,159,244,233,110, 71,223,251,220,247,158,239,232,92,193,103,140,206,206,78,165,255,68,118,181,170,170,95,147,82,94,231,74,119,1,18,47, 72,16,194,84,132,232,147,142,252,135,20,236,108,233,8,124,208,217,217,233,126,150,186,226,211,6,108,217,242,3,111,64, 211,190,7,242,71,117,13,117,70,243,194,182,138,104,77,149,162,235,58,186,166,225,184,46,102,206,100,114,210,36,17,139, 185,67,103,6,114,227,201,84,81,40,202,79,179,197,226,214,157,219,127,93,131,171,87,83,212,116,84,199,68,218,195,162, 146,216,103,2,184,247,142,199,110,21,10,207,47,94,218,81,185,124,213,10,143,64,144,76,167,73,165,198,177,76,11,51, 103,226,74,7,77,85,81,84,21,191,223,139,207,31,160,80,40,50,218,127,196,242,85,124,156,191,246,154,238,63,95,190, 186,111,4,87,120,16,100,193,25,64,152,93,194,95,248,16,64,251,127,206,124,251,142,199,158,10,70,66,15,95,119,211, 23,189,186,161,115,118,96,132,137,76,6,143,199,33,24,80,17,149,46,154,230,67,81,20,132,80,112,93,136,141,78,208, 119,106,4,143,33,88,185,186,232,169,142,122,60,138,234,189,63,30,175,27,171,174,202,197,17,110,6,89,56,137,75,88, 78,226,10,127,225,163,185,0,196,125,223,120,124,103,227,130,230,205,215,108,92,95,49,58,154,36,30,79,16,12,20,153, 223,168,209,214,182,136,154,112,30,97,247,80,48,135,169,172,191,9,205,59,31,211,204,19,139,197,24,27,75,80,200,119, 65,241,24,209,208,40,141,243,28,21,229,210,122,179,224,139,122,61,163,41,232,174,7,64,146,150,67,133,110,245,124,245, 123,190,254,232,143,27,90,154,239,217,112,253,53,222,254,190,33,204,92,134,104,164,200,170,85,203,88,88,219,131,217,223, 73,166,239,15,72,89,100,200,92,77,58,231,161,174,182,30,77,83,9,6,131,212,215,215,82,93,53,72,93,237,32,225, 96,63,154,177,12,163,98,173,80,212,229,154,43,67,154,170,76,186,144,0,156,81,132,56,165,157,39,190,177,50,20,122, 124,253,181,235,188,189,167,206,128,98,82,87,107,176,230,170,14,70,14,127,159,209,201,211,68,155,182,96,84,182,131,44, 144,24,243,1,160,40,10,0,174,235,34,132,32,224,87,208,21,29,77,49,144,162,14,161,118,160,25,87,96,155,127,175, 40,58,199,189,154,80,66,72,2,168,174,167,12,176,101,203,22,85,160,188,120,205,245,95,240,15,14,142,98,23,178,204, 111,244,178,238,234,37,156,126,103,19,190,200,231,168,94,246,4,210,181,113,157,113,164,99,179,32,154,165,122,225,151,202, 194,231,210,3,194,131,170,8,164,154,195,117,134,41,218,7,64,38,201,91,102,192,111,72,75,168,210,66,81,39,203,0, 149,106,243,189,45,11,91,107,80,21,98,177,24,205,77,6,107,215,172,226,23,63,108,225,195,158,90,126,191,245,6,92, 199,4,215,68,58,121,92,199,194,149,204,18,158,14,87,134,145,162,10,71,214,160,202,83,40,2,236,156,7,68,2,199, 62,173,12,39,253,202,188,134,137,17,2,185,184,82,110,71,161,60,181,116,229,114,239,153,190,65,170,162,42,43,87,174, 192,83,17,224,190,135,158,38,24,170,229,246,187,127,70,42,25,195,41,140,227,20,50,20,237,20,142,53,54,75,124,250, 220,113,23,80,116,90,41,56,139,40,22,117,40,30,64,225,29,178,153,131,196,18,81,113,224,224,188,14,91,154,111,11, 129,173,0,220,125,251,35,87,68,107,171,61,2,129,153,203,18,10,121,168,171,171,5,4,245,237,247,179,125,199,126,214, 174,185,154,219,238,250,29,3,3,67,56,118,6,183,4,49,87,72,130,20,220,21,20,156,21,88,197,149,228,139,151,147, 47,44,231,248,137,122,250,7,91,233,234,110,151,223,189,247,193,96,121,29,16,10,95,109,108,110,246,39,19,41,188,62, 65,115,115,227,236,190,20,130,167,127,245,2,181,117,79,114,251,253,47,240,252,211,235,104,110,80,113,157,60,82,74,164, 148,231,196,75,231,174,172,199,114,55,32,104,69,48,140,91,44,144,202,14,115,248,136,192,52,61,222,162,210,127,27,240, 190,50,229,191,178,41,92,21,86,50,169,12,225,176,65,67,67,67,185,216,204,124,244,241,167,232,236,252,9,119,61,188, 143,67,71,7,113,236,204,5,99,102,134,235,26,20,138,109,228,237,171,177,156,245,52,183,222,72,124,212,162,50,20,84, 132,100,83,217,1,41,221,22,77,55,200,231,77,60,158,0,62,159,119,86,81,215,117,203,78,124,243,174,7,136,86,55, 240,208,131,223,1,4,170,190,132,103,159,221,202,134,13,27,230,132,153,89,163,166,182,10,219,50,209,13,15,82,208,82, 6,0,188,170,170,98,229,45,52,45,140,148,146,99,199,15,3,130,229,203,46,67,81,148,89,173,118,227,166,155,49,42, 158,96,207,155,123,0,216,116,227,38,14,29,58,120,1,128,148,146,222,190,30,164,132,230,249,11,208,117,29,219,178,209, 61,6,2,225,157,9,64,177,232,224,186,18,85,85,113,93,23,41,65,136,217,111,63,61,219,211,233,52,217,108,22,215, 117,103,45,66,115,1,76,25,49,229,134,170,40,32,102,127,42,173,244,216,52,77,83,87,20,129,34,20,164,148,116,180, 47,69,8,81,182,111,26,32,30,143,179,121,243,205,36,18,9,214,173,93,135,223,239,231,153,103,126,83,30,119,62,72, 107,203,194,242,125,33,4,154,174,83,176,109,36,210,60,215,5,130,126,115,50,183,92,209,84,138,69,137,101,89,120,60, 158,11,172,143,199,19,220,114,203,173,156,56,113,130,142,142,14,222,120,99,55,145,72,228,2,241,185,64,52,77,35,17, 79,99,232,30,172,124,30,33,101,63,128,50,101,31,123,82,177,132,235,243,249,24,60,27,39,149,74,151,139,204,204,59, 239,252,86,73,252,18,118,237,122,141,112,56,60,235,249,180,248,204,137,55,125,109,24,30,222,219,127,144,64,36,194,68, 50,233,74,33,246,148,1,4,188,26,27,30,201,122,253,1,134,135,82,36,147,153,89,5,92,215,197,113,28,66,161,32, 87,94,185,154,215,94,251,43,145,72,100,78,200,243,129,206,125,66,141,247,223,61,68,164,186,134,137,84,58,43,16,175, 150,1,182,237,248,229,1,51,55,105,155,102,14,132,198,208,64,188,60,201,102,230,246,237,47,179,123,247,174,178,184,227, 56,115,138,158,127,172,168,240,210,117,248,19,138,82,80,176,242,152,249,188,189,109,199,47,15,148,1,0,233,58,242,201, 129,222,211,185,72,77,45,7,15,116,51,54,154,40,11,204,37,52,211,153,139,57,0,224,49,188,236,248,227,235,52,47, 92,204,96,95,95,14,215,125,114,186,53,166,1,200,113,230,197,137,84,58,81,176,242,120,253,33,246,255,251,99,98,177, 212,44,1,199,113,102,229,197,132,167,143,193,202,8,219,158,123,5,127,164,10,59,159,35,55,49,145,122,107,255,142,63, 77,235,150,119,68,93,93,93,250,252,198,182,62,199,42,110,158,223,218,170,199,70,226,88,121,147,154,186,40,186,174,207, 185,52,159,238,63,73,58,147,36,20,12,95,240,76,8,65,56,92,197,155,175,239,227,200,145,147,52,182,182,209,219,125, 194,60,59,216,251,200,225,99,31,244,3,22,224,206,220,146,249,63,57,117,36,217,60,191,221,111,231,243,43,22,44,190, 68,235,63,61,200,200,224,24,173,139,154,208,84,5,201,108,145,116,38,13,64,101,32,56,235,190,207,23,160,178,50,196, 182,231,118,114,244,216,105,90,151,44,165,231,232,17,107,108,228,236,95,246,254,235,149,93,128,3,20,1,123,38,128,15, 240,157,232,249,168,123,97,83,199,50,51,155,173,111,106,91,164,141,103,38,249,239,59,7,168,170,169,34,26,141,160,168, 42,32,113,28,135,96,101,136,96,101,168,220,231,62,159,159,128,63,72,239,201,51,252,246,231,47,81,112,117,26,154,154, 233,57,114,212,78,198,199,62,218,189,119,251,214,210,155,79,103,126,230,127,65,16,136,0,97,32,122,211,198,59,30,172, 175,109,250,114,75,123,187,225,11,4,24,62,123,6,199,202,177,98,229,37,92,249,249,203,136,86,133,169,168,168,64,81, 20,10,133,34,169,100,154,119,255,115,144,15,222,59,132,170,123,105,108,91,200,228,196,56,103,79,158,178,135,134,251,222, 218,187,239,149,151,128,36,144,2,210,192,24,96,206,4,208,103,0,132,129,240,85,171,174,223,216,222,182,236,129,202,96, 208,51,111,65,155,238,13,4,200,164,146,76,164,82,88,86,30,219,178,65,186,232,134,142,238,169,32,24,137,18,137,86, 49,57,49,193,96,95,111,97,50,155,181,143,127,114,232,229,15,15,191,189,15,200,148,132,211,76,109,139,19,165,53,104, 86,24,37,136,80,41,131,94,111,160,106,205,21,55,124,101,94,93,211,205,154,174,43,161,104,181,17,8,7,133,97,24, 24,134,7,0,203,182,40,88,22,227,169,140,204,164,18,5,167,88,116,6,134,122,247,190,119,240,159,127,203,231,115,9, 96,2,24,47,65,36,74,78,200,185,0,96,170,53,67,165,79,18,152,78,85,85,253,75,22,175,188,180,185,113,209,250, 80,101,244,82,77,55,170,20,161,24,0,174,116,10,182,109,37,198,51,201,174,254,161,158,119,187,79,29,238,114,28,39, 7,228,128,108,41,199,129,24,144,159,41,118,177,127,67,5,240,151,64,124,128,23,168,40,185,100,48,213,194,106,169,134, 100,106,102,59,128,93,202,124,9,32,93,18,183,231,18,249,212,191,227,25,48,122,73,184,162,116,174,207,0,112,153,106, 171,2,231,102,184,93,186,119,209,248,31,47,161,150,21,248,147,82,198,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Display1x[662] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,19,73,68,65,84,56,141,165,147,203,106,20,65,20,134,191,83,85, 115,109,72,50,32,6,98,18,35,38,11,183,222,54,186,112,99,6,29,240,25,124,4,55,130,184,81,80,4,241,49,124, 131,108,92,8,9,17,34,226,222,96,188,129,38,16,131,97,72,156,233,234,233,158,238,58,46,58,17,19,3,65,60,155, 42,170,234,255,207,119,206,161,164,221,110,243,63,225,58,157,206,29,17,121,168,170,181,127,17,138,136,87,213,187,78,85, 31,183,111,92,143,154,141,38,121,174,199,103,116,130,181,134,110,183,91,95,90,124,245,196,169,106,109,116,116,132,249,155, 207,73,233,3,160,122,132,209,222,81,77,34,94,190,184,205,200,232,40,64,195,237,223,167,161,207,133,171,99,136,200,30, 34,128,148,171,0,90,238,223,44,111,179,250,238,61,83,83,147,37,81,154,166,128,160,226,136,211,80,10,20,68,228,128, 73,54,204,217,238,254,4,28,103,103,103,49,18,74,3,239,61,33,20,24,99,24,228,82,102,43,155,4,148,194,205,31, 59,196,62,5,160,97,90,124,88,91,99,122,122,146,36,73,112,73,146,80,20,1,140,35,201,203,108,138,32,64,156,164, 236,244,18,84,29,149,250,94,181,137,101,122,230,52,21,103,240,222,227,226,56,70,131,98,76,133,65,112,251,0,36,233, 144,108,104,112,181,232,224,248,172,229,243,199,79,204,205,205,210,239,247,75,2,69,17,107,73,131,3,5,69,81,107,169, 216,35,134,97,135,76,156,154,192,24,202,18,188,247,0,24,227,176,213,232,111,197,161,24,154,62,69,81,160,8,113,28, 227,66,40,187,217,106,56,178,205,193,177,6,81,213,33,70,49,34,37,129,115,174,183,254,109,163,245,236,209,249,99,197, 191,41,210,156,245,245,13,128,29,233,116,58,183,106,181,218,3,17,141,64,12,48,83,169,56,87,169,86,197,26,3,64, 17,2,89,150,105,62,204,135,192,87,208,160,202,174,247,201,125,151,231,249,66,158,231,11,0,170,26,181,78,140,189,157, 111,183,207,93,186,120,153,241,147,227,168,42,91,91,223,89,121,189,162,75,203,75,171,73,111,112,37,203,50,191,79,35, 135,191,179,49,102,164,222,172,63,109,70,205,107,214,154,51,128,22,161,248,50,240,131,197,222,110,255,158,136,196,127,190, 255,5,119,143,242,70,185,147,13,30,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Display2x[1596] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,5,185,73,68,65,84,88,133,197,87,75,143,99,71,21,254,170,234,86, 213,117,143,237,238,118,55,25,38,45,2,211,243,32,201,116,195,130,36,104,68,136,130,130,176,102,17,20,101,1,172,88, 231,47,100,17,177,67,72,72,217,5,137,5,10,108,16,63,33,222,33,196,35,68,76,147,153,70,48,81,128,105,210,120, 218,73,63,252,106,191,110,85,157,195,194,247,58,190,182,211,67,70,35,229,147,142,235,212,173,242,57,223,61,231,212,227, 138,106,181,138,207,18,242,51,245,14,32,202,148,27,55,110,60,173,181,126,147,153,191,112,191,63,49,51,136,8,68,52, 209,153,9,33,208,252,24,19,152,198,207,132,16,125,231,220,79,119,118,118,94,159,35,160,181,126,109,107,251,218,181,205, 205,47,157,237,124,234,55,83,57,55,202,227,62,207,143,13,6,195,242,155,191,248,213,143,183,183,183,127,190,187,187,219, 203,17,0,176,177,182,94,193,111,127,183,143,95,254,250,38,172,149,16,16,0,0,33,4,192,12,164,173,16,98,162,51, 11,224,227,238,120,44,117,40,0,248,64,248,206,183,174,226,251,223,187,134,165,165,115,136,162,40,180,219,237,10,128,57, 2,69,29,105,252,253,31,31,225,177,171,17,76,44,144,135,152,105,103,245,124,140,50,180,58,3,252,229,102,29,215,158, 16,216,218,222,130,214,218,43,165,74,217,248,132,0,51,23,117,20,225,228,164,143,96,60,134,163,5,182,31,0,33,16, 194,48,193,19,79,94,133,16,4,99,13,123,239,203,11,8,208,82,164,35,52,91,35,168,117,6,232,225,16,32,22,112, 73,192,123,119,222,199,230,230,37,88,99,4,17,205,71,128,136,11,42,138,224,124,0,19,47,182,246,41,208,235,143,112, 220,234,226,168,217,197,230,185,203,184,116,101,19,90,71,176,133,88,56,231,242,17,184,126,253,186,20,66,24,165,36,156, 39,48,45,202,237,253,209,237,13,209,236,244,209,234,244,144,56,159,62,21,24,185,128,123,245,123,88,89,174,96,169,16, 75,102,206,19,168,84,42,69,33,132,99,134,241,129,1,250,116,251,83,183,55,192,193,97,27,163,36,115,170,160,34,53, 25,119,142,113,254,243,231,97,180,65,28,23,244,92,10,6,131,65,185,84,42,6,102,134,15,12,254,63,243,63,74,2, 142,90,93,244,7,9,0,9,165,205,194,121,201,128,113,80,63,192,234,234,26,226,66,28,17,209,92,17,150,180,49,30, 204,112,129,192,164,22,26,202,64,76,104,117,6,56,29,140,0,8,40,109,207,156,239,78,25,143,156,255,28,140,177,40, 196,177,20,66,172,230,8,132,16,202,58,210,76,96,36,1,16,252,201,41,232,13,19,244,250,9,136,1,21,157,237,120, 66,128,25,206,7,68,17,193,198,49,32,177,150,35,192,204,101,99,13,64,12,151,16,20,235,57,35,158,8,253,161,67, 8,12,17,105,156,29,163,60,72,6,116,59,9,172,49,136,109,12,14,92,201,17,32,162,146,49,70,18,19,28,1,153, 121,102,32,48,195,7,66,8,0,164,134,122,128,243,147,116,130,118,123,136,202,90,1,113,108,193,204,203,57,2,33,132, 178,181,70,245,251,1,36,5,28,71,233,73,150,238,7,82,61,144,227,12,35,29,208,110,39,160,192,176,214,34,4,159, 39,224,189,47,89,99,85,191,55,2,69,10,44,199,181,249,176,46,11,28,57,180,90,67,4,10,176,177,69,8,84,204, 17,32,162,178,141,173,238,245,28,160,228,212,137,246,112,16,217,8,135,199,67,132,16,80,92,138,225,156,203,19,16,66, 84,172,177,194,198,10,87,87,52,112,186,232,36,122,240,237,153,13,112,249,114,9,68,1,214,26,132,16,150,114,4,0, 174,168,72,161,88,210,120,237,213,175,220,215,32,5,194,104,224,32,132,132,144,2,38,158,62,213,63,153,40,19,67,41, 5,102,142,115,4,146,196,29,237,239,239,187,71,31,253,186,86,114,126,9,46,196,234,253,167,204,66,41,137,198,65,3, 66,136,94,142,0,51,255,236,15,191,255,227,203,111,255,233,237,13,107,99,102,48,152,8,68,60,115,239,99,16,147,98, 34,61,59,70,76,12,230,209,184,159,191,23,102,112,206,161,219,237,146,16,226,213,28,129,221,221,221,187,0,46,93,188, 120,241,17,41,123,18,0,188,247,162,211,233,136,36,73,164,82,74,14,70,131,31,90,107,126,0,224,138,142,166,67,62, 6,131,197,104,152,28,122,10,239,156,182,79,127,66,68,31,74,41,89,74,201,74,169,73,203,204,77,34,154,20,153,152, 253,46,168,213,106,18,227,21,168,51,249,238,75,47,190,181,188,92,126,242,169,167,159,90,234,247,123,184,245,215,219,115, 4,180,214,120,246,185,111,224,159,239,255,43,185,115,231,61,95,63,184,247,226,206,59,59,127,3,224,166,196,3,160,106, 181,58,9,203,228,85,106,181,154,0,160,0,152,84,44,128,248,153,103,190,246,124,177,84,218,122,225,219,47,196,165,82, 17,205,102,19,143,63,254,229,5,249,85,88,95,95,71,169,92,54,182,96,117,226,220,143,0,188,2,96,52,35,73,173, 86,115,213,106,149,114,4,210,183,54,0,226,105,169,215,27,199,23,54,54,100,227,195,6,172,253,34,182,183,190,138,231, 190,249,60,86,150,87,16,199,5,120,239,209,110,183,208,108,53,209,104,28,224,223,119,247,240,81,227,40,52,143,155,117, 0,107,0,58,105,36,85,234,67,0,160,90,173,198,213,106,149,103,147,41,82,201,210,32,235,245,250,209,250,221,245,55, 136,232,149,253,199,62,80,183,119,119,181,181,86,8,136,244,11,128,33,133,132,243,30,189,211,158,255,207,222,7,124,116, 120,248,238,237,91,183,223,194,248,102,169,166,236,205,237,112,211,4,40,205,83,54,57,35,132,91,239,222,250,205,222,221, 189,63,95,216,184,240,236,185,115,75,87,86,87,87,46,197,113,225,60,51,23,133,16,206,59,127,210,110,183,254,219,110, 119,247,78,142,79,118,27,141,198,77,0,199,0,134,11,100,4,32,100,117,144,43,194,180,14,178,2,204,234,192,224,227, 130,52,0,10,89,122,148,82,133,16,130,79,137,143,0,244,211,214,3,72,210,231,73,234,56,235,135,233,34,156,91,5, 83,68,50,50,89,8,163,41,125,58,172,89,244,50,9,105,235,83,61,96,188,61,230,170,255,76,2,103,16,194,130,54, 3,207,182,139,28,206,226,127,22,79,15,83,151,84,77,105,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Joypad1x[812] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,172,0,77,0,0,52,214,215,123,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,7,15,10,39,178,201,163,153,0,0,0,140,116, 69,88,116,67,111,109,109,101,110,116,0,77,101,110,117,45,115,105,122,101,100,32,105,99,111,110,10,61,61,61,61,61, 61,61,61,61,61,10,10,40,99,41,32,50,48,48,51,32,74,97,107,117,98,32,39,106,105,109,109,97,99,39,32,83, 116,101,105,110,101,114,44,32,10,104,116,116,112,58,47,47,106,105,109,109,97,99,46,109,117,115,105,99,104,97,108,108, 46,99,122,10,10,99,114,101,97,116,101,100,32,119,105,116,104,32,116,104,101,32,71,73,77,80,44,10,104,116,116,112, 58,47,47,119,119,119,46,103,105,109,112,46,111,114,103,103,138,199,71,0,0,2,33,73,68,65,84,56,203,149,146,203, 107,83,65,20,198,127,147,220,228,38,214,210,164,177,54,245,209,135,160,184,73,176,20,255,130,130,123,17,138,136,130,168, 32,88,8,193,133,173,15,180,221,136,46,68,10,10,130,72,22,93,213,186,19,68,208,133,187,34,84,179,19,68,20,42, 21,53,53,183,105,244,230,117,111,230,184,184,105,154,66,178,232,129,3,195,240,205,55,191,249,230,40,58,212,199,179,132, 255,170,221,51,97,41,95,2,124,235,42,178,96,80,191,58,62,95,40,181,234,84,167,195,117,124,223,250,14,237,141,27, 225,16,162,53,142,93,102,237,251,186,181,161,122,6,79,204,231,237,77,173,175,157,129,70,165,99,67,177,184,175,43,140, 235,247,99,21,107,216,174,143,129,35,253,189,192,253,86,173,175,195,11,82,129,93,97,252,166,137,17,12,16,12,26,252, 94,181,136,14,198,137,200,198,153,86,161,145,74,79,206,0,119,90,55,203,86,6,167,84,193,202,217,116,71,187,40,230, 255,225,214,28,220,170,67,69,153,209,84,250,178,52,164,179,42,149,158,148,185,135,143,182,93,255,235,229,61,170,203,115, 88,185,34,249,181,18,162,96,223,240,30,162,177,46,234,135,47,112,240,212,109,108,219,230,198,173,41,12,0,173,53,133, 66,97,11,235,248,57,114,111,30,211,63,212,199,200,104,15,134,25,160,248,243,15,185,85,135,3,231,47,98,89,22,65, 51,184,149,129,104,241,90,188,86,129,16,3,215,151,88,212,167,249,186,244,133,207,239,62,241,170,52,206,254,155,239,81, 129,16,34,2,141,71,120,4,162,209,34,32,226,125,172,0,134,137,27,234,101,228,193,42,43,43,43,228,223,190,134,128, 137,214,26,192,51,105,18,136,96,189,184,198,143,233,97,214,23,167,26,68,26,183,238,182,36,35,72,93,35,186,209,13, 3,163,153,252,242,2,82,43,81,90,94,160,251,228,93,0,142,37,71,121,250,236,73,115,93,23,221,68,111,230,181,25, 98,104,108,130,202,135,231,132,198,38,208,90,163,68,72,36,146,36,18,73,68,20,74,137,135,223,48,216,70,96,154,38, 71,175,100,128,76,219,169,178,109,111,114,203,229,50,0,149,74,101,59,65,54,155,197,117,93,118,82,74,169,45,131,72, 36,210,68,2,168,86,171,0,212,106,181,142,6,142,227,120,70,237,70,121,7,53,251,31,168,192,0,159,97,230,172,204, 0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Joypad2x[1470] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,117,73,68,65,84,88,133,189,151,95,104,28, 199,29,199,63,179,187,247,87,90,89,177,122,190,107,108,85,137,26,53,142,173,66,74,193,134,22,218,218,14,174,75,98, 21,25,29,20,154,151,56,24,185,137,91,8,121,233,139,193,121,11,42,24,10,37,57,75,15,125,40,121,177,176,221,60, 53,208,66,31,74,177,67,193,170,147,56,86,28,169,142,49,178,106,199,145,238,180,187,183,187,183,59,51,125,144,111,209, 233,228,68,231,226,252,96,216,157,239,236,124,127,223,157,249,206,204,174,224,33,226,248,241,227,195,90,235,223,106,173,127, 14,116,3,174,16,226,93,33,196,155,149,74,229,163,78,184,68,167,201,143,29,59,246,203,140,37,254,248,194,51,91,82, 187,158,216,70,46,155,199,171,215,245,7,243,11,226,189,235,94,20,41,94,154,154,154,122,231,145,8,24,31,31,31,74, 33,63,250,245,143,31,79,247,233,37,244,205,247,33,88,65,102,122,48,158,252,33,139,97,150,202,197,47,26,74,24,195, 103,206,156,249,116,51,156,70,39,2,180,214,175,253,108,208,72,247,70,119,145,31,255,133,108,180,66,87,74,144,14,171, 132,87,222,165,79,126,206,254,126,149,214,90,191,182,89,206,142,4,0,35,187,6,182,17,204,93,68,8,129,97,128,101, 8,132,88,29,74,255,63,239,179,187,255,49,128,145,205,18,90,157,100,55,81,133,180,101,82,175,87,177,82,38,129,128, 134,80,52,164,34,86,154,40,116,200,24,26,224,27,143,68,128,196,184,229,174,212,190,173,204,28,65,228,35,149,70,8, 144,74,19,70,146,216,204,209,112,61,128,207,54,203,217,233,20,252,249,234,66,21,81,120,138,122,67,226,133,113,82,252, 134,68,244,126,139,143,239,4,8,33,206,63,42,1,111,255,125,193,10,150,205,109,24,59,190,135,219,80,184,65,140,215, 144,136,210,46,150,178,253,252,243,78,202,23,66,76,62,18,1,147,147,147,243,129,20,191,121,231,19,3,227,187,35,4, 185,109,184,17,120,153,34,193,119,158,231,236,124,138,134,100,188,82,169,124,182,89,206,142,60,0,32,132,56,219,208,98, 210,26,250,9,93,165,239,227,186,46,158,231,65,54,75,164,174,49,53,53,245,167,78,248,58,157,130,36,180,214,45,117, 165,212,67,241,60,180,128,245,9,191,78,1,229,76,38,211,6,106,173,177,44,139,163,71,143,218,157,144,181,157,5,71, 142,28,121,93,8,241,58,240,205,141,58,20,10,5,78,156,56,129,82,138,40,138,240,60,15,215,117,145,82,82,42,149, 168,84,42,84,171,213,141,186,126,168,181,126,249,252,249,243,255,122,160,128,114,185,156,214,90,135,19,19,19,244,247,247, 183,188,93,243,26,4,1,158,231,17,69,17,190,239,227,251,62,82,74,108,219,38,149,74,97,24,6,91,183,110,69,107, 221,82,174,93,187,198,233,211,167,63,61,119,238,220,211,64,98,160,150,85,160,181,62,178,119,239,94,182,111,223,206,194, 194,2,90,107,132,16,8,33,200,102,179,164,211,105,28,199,161,90,173,98,219,54,125,125,125,152,166,73,20,69,220,187, 119,143,185,185,57,10,133,2,185,92,14,215,117,137,162,40,225,24,26,26,98,112,112,112,104,116,116,244,185,11,23,46, 252,181,153,179,197,3,74,169,227,35,35,35,172,172,172,36,166,210,90,147,207,231,73,167,211,0,56,142,131,148,146,187, 119,239,50,59,59,203,204,204,12,51,51,51,204,207,207,19,134,33,75,75,75,152,166,73,79,79,79,210,71,41,133,239, 251,28,58,116,8,195,48,94,93,155,51,17,48,58,58,250,76,177,88,252,209,192,192,0,158,231,37,67,103,89,22,166, 105,38,245,56,142,209,90,163,148,74,176,230,189,82,138,32,8,146,41,203,231,243,73,162,122,189,206,206,157,59,217,178, 101,203,225,114,185,252,100,155,0,195,48,198,199,198,198,68,189,94,79,146,172,95,235,0,189,189,189,109,88,51,50,153, 12,195,195,195,27,182,41,165,136,227,152,3,7,14,24,74,169,87,154,184,0,40,151,203,57,33,196,237,201,201,201,222, 90,173,70,163,209,64,136,85,127,10,33,176,109,27,211,52,91,8,29,199,73,204,104,154,38,93,93,93,244,244,244,180, 136,118,28,167,101,68,44,203,66,107,205,201,147,39,171,192,227,211,211,211,190,5,160,181,254,197,193,131,7,123,133,16, 132,97,136,122,239,20,119,254,253,55,178,150,65,225,217,231,112,126,250,70,139,15,0,108,219,166,187,187,187,69,84,51, 145,82,10,207,243,8,195,176,165,45,138,34,108,219,102,207,158,61,189,151,46,93,122,17,152,50,238,55,190,188,127,255, 126,28,199,89,117,237,226,135,12,244,229,121,162,208,197,242,236,69,110,221,186,133,235,186,212,106,53,234,245,58,81,20, 33,165,108,73,24,199,49,97,24,226,56,14,75,75,75,132,97,216,54,141,90,107,124,223,103,223,190,125,0,191,7,176, 78,157,58,101,204,206,206,238,45,22,139,220,190,125,27,173,53,181,231,255,192,63,206,190,197,205,185,5,6,127,240,2, 135,138,197,196,128,113,28,227,251,126,219,91,63,232,218,188,111,214,163,40,98,199,142,29,100,50,153,220,225,195,135,243, 214,213,171,87,109,107,53,40,222,79,84,42,149,120,122,248,76,155,145,54,50,229,102,176,245,245,32,8,154,155,87,38, 217,136,92,215,229,242,229,203,45,138,215,47,179,175,194,54,131,27,134,65,177,88,108,142,134,50,30,164,114,109,231,141, 240,78,158,253,178,163,219,88,11,10,33,54,77,212,73,210,245,245,166,128,235,215,175,119,91,211,211,211,43,99,99,99, 255,189,113,227,70,105,247,238,221,109,59,91,179,104,173,19,231,175,197,149,82,72,41,219,176,181,248,250,246,197,197,69, 26,141,198,226,149,43,87,66,11,208,113,28,255,106,98,98,226,119,66,136,167,248,26,66,74,121,115,121,121,249,13,192, 89,123,28,155,192,99,172,254,237,102,120,136,239,197,175,8,197,234,49,28,3,53,96,25,136,31,244,115,106,242,127,124, 174,125,73,200,251,34,18,67,252,15,38,245,181,113,211,146,231,231,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Keyboard1x[587] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,1,200,73,68,65,84,56,141,181,146,177,107,83,81,20,198,127,247,222, 115,95,95,8,73,159,136,180,209,38,177,21,7,165,21,26,16,204,228,34,102,8,8,34,212,168,127,72,193,191,160,131, 45,174,29,178,184,180,116,17,212,12,25,4,23,137,32,168,56,85,227,146,162,85,112,145,212,190,151,52,125,185,14,109, 53,29,164,193,226,7,151,115,46,231,124,223,189,231,240,169,82,169,196,113,160,15,146,122,189,174,142,37,48,191,48,159, 30,134,80,169,84,252,193,187,58,24,161,88,156,157,242,60,223,3,239,187,136,216,100,210,88,99,196,199,152,139,190,245, 175,2,87,28,76,3,30,74,189,72,38,82,229,106,181,26,203,31,45,127,195,57,123,201,250,186,108,69,143,59,103,50, 32,99,86,108,216,239,179,174,148,187,15,242,174,213,106,253,204,159,157,104,110,111,255,40,0,175,127,11,52,26,141,93, 224,205,254,249,219,247,131,252,228,196,50,142,157,173,173,206,251,67,59,56,10,115,119,230,174,163,226,183,202,169,200,104, 175,80,171,213,186,0,114,20,113,239,229,91,151,193,61,82,112,111,101,101,237,249,96,77,45,173,45,37,78,118,131,166, 159,24,57,163,181,70,27,141,86,123,209,104,131,214,10,173,13,206,57,0,246,123,94,61,88,120,88,4,144,157,86,120, 45,83,184,112,106,102,122,6,107,61,68,4,43,22,99,4,173,13,56,71,223,245,137,162,136,48,10,49,90,211,104,188, 156,173,84,110,158,95,93,125,220,20,17,239,118,144,62,225,133,97,135,205,175,159,72,37,211,160,0,20,74,41,218,237, 54,249,92,142,56,142,249,178,249,153,108,54,79,106,52,144,245,15,31,111,0,139,98,180,46,7,65,0,206,145,61,157, 99,183,31,31,154,127,52,157,166,215,235,1,138,169,201,115,116,186,93,50,99,227,102,196,179,119,129,69,137,227,120,227, 233,179,39,90,169,225,157,236,156,3,199,55,24,112,226,191,98,104,31,252,55,129,95,252,113,137,228,164,151,154,151,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Keyboard2x[1110] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,3,211,73,68,65,84,88,133,237,150,223,107,28,85,20,199,191,231,222, 153,77,154,233,166,249,225,210,186,73,154,154,70,27,53,105,139,52,32,90,83,10,202,4,69,2,21,161,248,15,232,67, 81,8,17,243,32,228,41,184,134,60,36,245,69,48,65,31,4,245,49,80,194,142,232,203,62,232,67,226,131,144,110,37, 80,147,218,184,77,141,117,127,38,155,157,153,123,143,15,211,221,164,41,52,33,166,86,48,95,184,204,185,151,59,231,124, 238,185,231,206,29,178,109,27,143,82,226,145,70,223,7,216,7,216,7,216,10,16,143,199,255,117,32,99,75,63,28,143, 199,171,138,40,134,22,146,191,212,46,47,223,90,213,90,51,14,84,67,175,234,245,117,107,189,104,230,76,23,0,10,133, 2,183,181,181,113,62,159,231,149,149,21,6,128,100,50,201,67,67,67,220,219,219,203,59,5,160,205,95,194,120,60,46, 22,22,174,181,20,138,174,109,8,227,188,97,154,103,0,110,55,164,1,105,24,16,66,64,10,1,33,36,136,0,173,25, 74,249,240,125,31,190,239,193,43,63,61,15,74,41,93,114,75,127,248,190,183,232,251,222,117,205,124,93,17,125,62,22, 27,91,124,80,6,120,126,254,183,188,172,226,164,214,58,74,160,39,4,137,18,9,97,73,41,106,164,144,53,82,202,16, 17,17,64,96,214,196,204,196,0,152,25,0,72,107,69,172,153,24,44,0,28,97,198,17,128,158,7,51,36,243,7,3, 239,191,123,25,28,26,30,29,29,205,222,151,129,189,212,224,224,160,225,186,110,11,75,239,152,36,58,198,192,43,0,93, 4,64,4,92,25,29,25,127,29,120,136,167,32,22,139,249,174,235,222,54,137,231,161,49,203,192,167,96,254,4,0,24, 120,174,60,111,79,51,48,60,60,108,66,248,31,10,97,244,41,237,29,245,125,85,239,251,30,60,215,131,175,252,205,83, 111,248,37,156,24,31,31,47,109,173,129,93,107,96,224,210,81,179,90,254,40,200,140,102,115,25,120,174,11,173,84,94, 177,254,11,140,52,4,50,96,164,153,232,187,236,159,249,137,201,201,73,23,184,191,8,119,47,41,206,134,204,80,52,149, 186,121,67,51,247,27,164,127,24,249,248,242,242,118,175,85,182,192,113,28,250,246,251,233,143,0,12,0,144,123,6,182, 33,87,10,122,123,36,54,246,197,230,65,163,28,188,185,185,185,154,64,239,180,182,182,72,203,10,223,61,243,18,66,202, 13,187,210,68,208,40,168,97,205,26,90,151,155,130,214,10,74,171,160,175,2,59,147,77,135,150,110,46,245,59,142,243, 53,0,215,182,109,93,1,0,96,188,215,127,233,101,16,204,194,218,26,32,104,35,69,20,216,4,2,40,232,7,118,240, 36,194,38,59,152,155,203,229,224,186,37,68,34,135,65,129,19,120,190,2,3,39,250,250,94,61,53,53,53,253,51,128, 245,205,0,178,165,185,249,205,134,250,250,170,199,15,71,3,71,68,72,223,185,131,108,46,139,187,145,43,43,14,226,148, 33,2,168,227,199,219,43,64,181,225,122,172,172,164,80,92,45,33,26,141,2,0,172,3,97,228,115,89,188,116,238,220, 27,83,83,211,201,10,128,227,56,4,32,100,29,172,121,205,178,194,50,100,86,87,86,159,206,100,113,178,235,212,182,155, 155,74,165,144,201,100,80,119,168,14,204,229,204,25,88,186,245,59,34,143,69,64,130,32,165,68,93,109,99,168,169,41, 122,1,64,204,113,28,97,219,182,54,0,200,193,193,129,51,107,171,197,154,171,215,174,98,241,215,43,21,199,79,182,183, 99,98,226,179,109,1,26,27,27,176,186,86,64,54,151,171,140,117,117,117,194,178,44,124,245,205,151,80,204,96,197,232, 232,120,10,0,90,123,122,122,90,19,137,68,14,128,54,0,136,131,181,135,222,138,70,155,204,103,58,158,5,206,158,191, 199,249,139,47,108,27,255,129,234,124,250,228,61,253,153,159,102,244,233,211,157,23,19,137,196,28,16,212,128,118,221,98, 116,102,102,6,179,179,179,222,63,11,183,189,152,89,122,74,55,0,80,0,130,26,2,96,116,119,119,55,70,34,225,170, 221,56,149,82,236,248,254,95,88,88,46,205,205,205,165,109,219,118,129,135,120,27,238,84,255,173,127,194,125,128,255,37, 192,223,118,68,166,42,45,136,103,210,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Microphone1x[703] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,234,0,234,0,234,127,141,58,17,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,11,3,22,42,33,208,235,186,119,0,0,2,76,73, 68,65,84,56,203,125,147,95,72,83,97,24,198,127,147,205,182,83,179,72,234,44,200,180,11,239,148,4,217,148,88,151, 94,118,37,178,65,116,209,77,105,119,65,212,141,12,138,254,152,55,117,227,134,32,212,244,106,30,70,187,216,31,208,139, 188,137,8,141,109,72,77,93,218,137,153,108,122,108,24,56,143,121,56,235,34,119,218,104,250,192,199,247,247,121,222,231, 123,191,247,51,113,136,1,79,255,35,192,199,209,152,3,178,82,40,124,187,122,209,84,33,187,156,46,95,111,239,85,186, 174,116,213,176,138,197,34,0,91,202,22,35,47,158,1,220,147,66,225,87,149,253,134,195,222,231,118,95,163,245,82,43, 197,98,209,104,138,162,160,170,42,11,11,243,172,173,174,242,224,254,67,128,151,213,1,204,149,129,67,188,128,215,235,5, 32,22,139,17,143,199,25,27,27,51,14,90,173,39,176,9,86,132,147,2,245,4,30,139,162,232,243,251,253,104,154,134, 162,40,184,221,110,186,187,187,255,94,126,238,29,0,171,107,95,145,191,203,117,5,124,51,51,51,140,142,142,26,14,162, 209,40,129,64,160,198,129,165,209,66,211,105,59,117,147,24,124,61,229,91,89,89,65,211,52,44,22,11,130,32,96,54, 155,89,94,94,70,150,191,241,99,99,131,66,33,207,230,102,129,125,245,55,246,38,251,155,233,144,116,235,72,7,137,68, 130,137,137,137,154,104,103,206,158,198,227,241,146,74,37,153,159,255,116,3,48,4,158,244,245,245,13,183,183,183,163,235, 58,249,124,158,142,142,14,130,193,32,187,187,187,200,178,76,38,147,225,195,199,247,164,82,73,50,95,150,48,97,106,168, 206,193,240,236,236,172,225,32,18,137,144,72,36,24,31,31,199,106,181,26,14,218,46,183,145,74,166,41,151,203,216,237, 167,226,53,207,216,211,211,131,36,73,0,100,179,89,68,81,100,114,114,210,32,71,99,81,28,162,131,240,91,9,193,38, 80,218,43,93,175,17,40,108,230,17,207,59,72,167,211,0,168,170,202,226,226,34,154,166,161,235,58,7,218,1,219,63, 21,0,154,155,155,41,173,151,106,11,201,31,240,51,120,103,136,206,206,78,116,93,167,92,46,163,235,58,154,166,177,243, 107,135,204,210,103,82,169,36,192,158,211,233,178,229,214,115,255,4,164,80,216,52,116,119,112,255,249,200,211,70,142,199, 18,224,0,108,255,149,178,178,189,53,221,114,177,133,220,122,14,41,20,190,121,148,194,128,167,127,170,238,95,0,34,78, 167,235,92,197,218,49,136,84,79,254,0,227,216,1,121,79,52,137,54,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Microphone2x[2105] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,240,73,68,65,84,88,133,173,150,91,108,19, 235,17,199,255,223,174,215,27,219,123,98,156,216,73,144,109,200,5,37,193,28,236,36,194,96,34,113,41,137,26,9,68, 85,144,128,7,36,46,47,71,66,58,82,165,230,129,34,46,77,185,168,170,84,9,142,196,11,229,33,15,160,22,129,80, 105,9,10,226,4,26,14,36,32,66,210,132,198,164,185,223,3,198,141,99,199,142,217,205,238,247,109,31,48,41,61,61, 113,128,211,145,70,251,48,159,102,126,223,204,236,55,67,240,9,114,226,196,137,221,6,131,225,215,154,166,125,73,8,1, 207,243,175,116,93,191,175,105,90,19,128,239,206,157,59,55,250,41,254,0,128,124,236,193,186,186,186,11,70,163,241,171, 64,32,96,42,42,42,2,33,4,83,83,83,24,29,29,213,199,199,199,229,104,52,106,228,56,110,154,49,246,55,93,215, 255,34,8,194,159,235,234,234,228,255,11,192,201,147,39,191,146,36,233,194,193,131,7,77,132,16,168,170,10,74,41,8, 33,224,56,14,60,207,67,211,52,12,15,15,99,108,108,76,31,25,25,121,171,40,74,28,192,174,51,103,206,60,249,81, 0,123,246,236,225,61,30,207,155,29,59,118,100,173,92,185,18,138,162,0,0,24,99,160,148,46,192,80,74,193,243,60, 120,158,135,201,100,66,107,107,171,30,12,6,101,0,107,206,158,61,59,188,152,127,110,41,128,226,226,98,63,33,68,50, 26,141,152,157,157,5,199,113,32,228,29,183,174,235,11,95,198,24,146,201,36,34,145,8,38,38,38,224,247,251,137,211, 233,52,114,28,247,155,116,254,13,75,1,16,66,106,50,51,51,185,219,183,111,163,171,171,11,115,115,115,40,42,42,66, 109,109,45,198,198,198,32,73,18,204,102,243,2,12,0,168,170,138,215,175,95,195,235,245,242,175,94,189,218,241,163,0, 12,6,195,174,178,178,50,131,199,227,65,36,18,65,87,87,23,226,241,56,24,99,56,118,236,24,218,218,218,80,88,88, 8,175,215,11,175,215,11,159,207,135,101,203,150,65,85,85,216,237,118,48,198,178,210,94,48,157,241,232,209,163,86,65, 16,34,86,171,149,19,4,1,102,179,25,110,183,27,165,165,165,208,52,13,148,82,76,76,76,224,201,147,39,120,254,252, 57,186,187,187,33,203,50,138,138,138,176,101,203,22,108,221,186,21,205,205,205,209,51,103,206,216,62,43,3,130,32,84, 73,146,164,108,222,188,217,212,214,214,134,199,143,31,163,165,165,5,245,245,245,120,241,226,5,90,91,91,225,245,122,225, 247,251,81,83,83,3,77,211,16,14,135,209,219,219,139,137,137,9,116,116,116,232,0,154,211,102,56,157,145,231,249,29, 217,217,217,162,217,108,70,77,77,13,182,111,223,14,198,24,24,99,8,133,66,80,85,21,151,47,95,198,208,208,16,92, 46,23,54,108,216,0,159,207,135,146,146,18,84,87,87,227,238,221,187,138,174,235,127,77,23,35,109,9,78,157,58,21, 178,219,237,57,193,96,16,3,3,3,224,121,30,251,246,237,67,101,101,37,226,241,56,68,81,132,166,105,136,68,34,232, 232,232,64,95,95,31,38,38,38,160,105,26,114,115,115,225,118,187,153,193,96,88,113,238,220,185,201,79,6,56,118,236, 88,177,32,8,193,35,71,142,24,98,177,24,70,71,71,209,222,222,14,143,199,3,158,231,177,123,247,110,228,228,228,96, 237,218,181,240,249,124,40,47,47,71,83,83,19,20,69,65,126,126,62,166,166,166,16,141,70,229,155,55,111,154,62,43, 3,39,79,158,252,218,108,54,255,222,108,54,139,178,44,35,55,55,23,165,165,165,144,36,9,140,49,196,98,49,60,123, 246,12,237,237,237,24,28,28,68,60,30,199,242,229,203,225,245,122,81,86,86,6,85,85,113,237,218,53,218,212,212,148, 182,204,139,26,57,142,219,85,80,80,32,10,130,128,150,150,22,92,191,126,29,186,174,163,190,190,30,151,46,93,130,195, 225,128,215,235,69,32,16,0,165,20,201,100,18,87,174,92,65,56,28,70,103,103,39,194,225,48,140,70,99,48,93,240, 69,51,80,87,87,103,164,148,206,6,2,1,209,225,112,64,20,197,5,27,165,20,23,47,94,196,211,167,79,209,219,219, 139,194,194,66,84,84,84,96,205,154,53,112,56,28,184,121,243,230,194,75,105,177,88,86,221,186,117,107,240,147,1,142, 31,63,30,16,4,161,217,100,50,137,15,30,60,64,50,153,68,118,118,54,106,107,107,145,145,145,177,48,7,18,137,4, 122,122,122,48,58,58,138,233,233,105,204,207,207,35,20,10,97,91,245,22,124,215,220,194,238,221,187,199,47,149,129,31, 44,1,33,196,37,73,146,186,119,239,94,49,16,8,32,24,12,162,167,167,7,28,199,225,252,249,243,184,127,255,62,60, 30,15,214,173,91,7,143,199,131,170,170,42,200,178,140,217,217,89,92,189,122,21,0,160,235,140,45,21,124,81,0,93, 215,71,20,69,97,140,49,8,130,128,178,178,50,248,124,62,80,74,113,232,208,33,148,151,151,163,187,187,27,157,157,157, 120,244,232,17,236,118,59,10,10,10,144,155,155,11,65,16,82,62,64,63,27,160,175,175,239,239,30,143,135,13,12,12, 32,47,47,15,161,80,104,97,226,81,74,177,122,245,106,20,23,23,67,211,52,204,207,207,35,28,14,35,22,139,65,85, 213,15,39,228,71,101,224,7,199,241,141,27,55,168,174,235,191,106,105,105,145,103,103,103,225,114,185,96,181,90,33,8, 194,2,200,123,5,0,155,205,6,151,203,133,202,202,202,255,154,138,159,13,0,0,167,79,159,190,68,41,61,213,216,216, 168,52,54,54,202,109,109,109,144,101,25,133,133,133,112,185,92,176,217,108,16,69,17,132,16,136,162,136,252,252,124,204, 205,205,125,82,112,0,72,219,165,15,31,62,108,221,180,105,83,125,50,153,12,53,55,55,255,228,209,163,71,252,157,59, 119,64,41,101,28,199,145,172,172,44,228,229,229,193,96,48,160,191,191,159,189,124,249,82,158,156,154,132,219,237,226,199, 199,39,19,67,67,67,191,91,10,224,163,151,210,154,154,154,167,107,189,107,54,12,244,15,42,162,152,49,183,106,213,42, 27,0,242,126,47,148,36,73,55,155,205,115,13,13,13,230,64,165,159,107,125,252,52,114,239,222,183,217,75,249,93,114, 33,121,47,148,210,134,161,193,97,191,175,124,173,56,58,50,46,246,252,179,7,137,120,2,70,163,17,22,139,5,118,187, 157,240,60,47,89,36,11,52,85,131,36,125,97,171,175,175,255,197,225,195,135,191,249,190,175,235,215,175,243,110,183,219, 199,24,139,45,249,80,0,200,88,183,110,93,69,70,70,198,31,50,50,76,198,193,129,97,194,113,28,172,214,76,184,87, 184,144,155,235,128,217,98,70,34,30,71,34,145,64,225,170,2,68,103,162,208,117,16,191,223,255,211,173,91,183,146,134, 134,134,118,0,12,0,11,6,131,70,163,209,248,75,93,215,145,76,38,187,211,149,128,7,96,6,96,170,170,170,186,187, 126,253,250,50,187,221,78,230,231,231,145,76,38,209,215,215,135,153,153,25,48,157,129,16,130,47,36,9,89,217,54,204, 207,171,248,87,120,26,21,21,21,80,20,69,175,174,174,214,100,89,190,240,246,237,219,54,155,205,198,73,146,116,128,16, 242,237,198,141,27,191,33,132,232,139,1,144,84,112,51,0,115,117,117,117,223,254,253,251,141,147,147,147,16,4,1,162, 40,66,16,4,188,121,243,6,145,72,4,186,174,67,20,69,200,178,12,66,8,114,114,114,192,24,131,44,203,24,28,28, 212,14,28,56,240,71,139,197,178,146,227,184,36,165,244,79,219,182,109,187,74,8,209,129,197,123,128,75,41,15,128,103, 140,245,76,79,79,123,237,118,59,9,133,66,160,148,66,16,4,88,173,86,216,108,239,214,61,74,41,52,77,131,170,170, 80,85,21,162,40,34,30,143,235,211,211,211,61,59,119,238,252,45,128,36,128,57,0,9,0,11,143,197,98,61,160,167, 224,120,0,188,32,8,255,152,153,153,249,185,211,233,20,242,243,243,9,33,4,138,162,64,81,20,200,178,12,69,81,192, 216,187,82,88,44,22,56,28,14,68,163,81,189,189,189,61,57,50,50,242,117,36,18,121,13,64,73,105,242,251,169,78, 39,166,84,25,76,37,37,37,95,58,157,206,11,86,171,117,69,73,73,137,232,116,58,57,73,146,22,70,181,162,40,72, 36,18,152,156,156,100,189,189,189,74,44,22,27,31,31,31,175,237,239,239,15,2,120,155,186,249,220,135,183,255,24,0, 224,93,41,140,41,16,209,235,245,250,51,51,51,127,38,138,226,38,0,206,20,36,82,65,38,21,69,121,28,141,70,27, 186,187,187,219,0,200,169,160,10,222,253,5,255,35,31,253,16,125,112,158,195,127,202,243,190,87,144,10,192,0,208,15, 116,201,193,240,111,115,166,151,162,61,90,180,242,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Mouse1x[720] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,8,13,24,4,51,189,102,0,0,0,0,53,116, 69,88,116,67,111,109,109,101,110,116,0,40,99,41,32,50,48,48,52,32,74,97,107,117,98,32,83,116,101,105,110,101, 114,10,10,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80,144,217,139,111,0,0,2,28, 73,68,65,84,56,203,141,144,205,75,84,81,24,198,127,247,220,201,171,115,239,117,162,146,92,40,217,31,208,166,85,208, 252,5,17,148,182,9,114,178,77,66,187,208,106,22,5,35,76,16,238,91,180,107,51,109,98,80,35,218,181,9,68,87, 34,81,249,17,129,76,14,51,166,57,141,227,215,124,220,243,158,22,126,52,234,72,190,155,195,251,156,231,252,206,195,99, 113,104,210,233,116,39,48,80,46,151,111,27,99,60,192,120,190,251,170,251,102,207,147,122,223,216,187,209,235,91,155,91, 253,138,163,115,105,187,188,29,243,124,247,123,44,22,243,61,223,237,43,254,89,187,150,74,165,150,82,111,82,217,209,177, 145,27,187,190,23,97,55,60,109,29,126,157,76,38,95,182,182,250,189,197,226,218,38,240,49,145,72,244,213,165,187,80, 171,85,223,27,216,106,110,118,230,122,186,111,221,179,158,39,135,18,74,169,33,108,11,165,20,149,237,128,104,52,74,46, 159,101,97,33,67,147,99,163,131,0,9,164,168,148,250,240,244,89,162,183,254,195,80,40,20,26,186,223,255,192,216,182, 109,133,195,97,134,135,135,209,90,227,52,181,96,97,49,240,240,49,165,82,137,194,234,239,200,200,72,250,14,112,0,160, 0,42,213,170,245,115,113,113,95,204,229,114,84,42,149,127,123,62,143,215,26,177,26,244,197,145,18,227,241,56,249,124, 158,108,54,75,60,30,231,127,19,170,95,86,86,86,104,107,107,99,112,112,240,128,118,98,192,106,161,192,106,161,128,239, 251,116,118,116,48,51,59,123,178,4,27,165,117,206,157,57,187,47,214,130,26,203,191,150,15,104,27,165,245,227,1,158, 231,238,68,181,192,194,194,24,65,139,32,70,16,173,209,34,180,159,111,231,184,18,167,196,24,180,209,136,104,180,14,208, 162,17,17,68,11,34,6,35,178,231,159,106,4,152,213,90,99,43,155,32,16,180,214,232,96,23,38,130,136,208,116,202, 217,243,79,55,2,124,154,159,159,195,243,60,90,90,154,177,148,66,139,160,245,78,124,215,117,137,156,142,48,51,243,13, 224,71,163,14,222,126,253,242,185,207,113,156,104,87,215,69,60,207,195,0,24,195,206,97,200,100,22,88,90,202,1,188, 110,4,168,85,171,213,187,147,19,227,143,38,39,198,47,3,87,26,116,149,1,174,2,107,135,47,254,2,161,171,0,195, 167,31,206,166,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Mouse2x[1695] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,86,73,68,65,84,88,133,197,151,95,104,20, 219,29,199,191,231,204,204,254,153,108,54,113,187,27,99,122,81,73,150,108,72,215,52,18,80,193,10,62,220,218,198,102, 69,175,38,246,226,165,197,71,41,148,66,185,80,218,23,159,90,251,231,166,237,75,223,74,222,20,214,136,198,63,247,225, 170,8,1,145,114,137,52,1,55,49,133,120,89,37,6,179,217,53,153,157,153,157,153,243,167,15,118,246,110,226,110,186, 94,161,61,240,123,152,51,156,243,253,252,126,191,239,25,230,0,255,231,161,252,175,5,47,93,186,212,214,221,221,45,102, 102,102,4,0,168,239,179,217,228,228,228,39,156,243,95,10,33,168,148,242,95,156,243,127,72,41,167,151,150,150,190,188, 120,241,162,168,183,38,18,137,180,15,12,12,244,3,120,4,0,244,125,0,0,124,166,40,202,79,133,16,71,85,85,253, 44,28,14,163,165,165,229,207,233,116,250,171,108,54,251,233,212,212,84,235,214,5,193,96,176,18,137,68,50,254,243,123, 85,0,128,16,66,172,157,59,119,174,132,55,25,61,2,240,199,108,54,155,162,148,254,138,49,182,116,237,218,181,191,114, 206,255,50,54,54,86,6,128,142,142,14,203,178,172,147,0,126,13,0,164,89,165,19,39,78,36,41,165,35,145,72,228, 7,82,202,148,148,178,117,231,206,157,223,34,132,200,149,149,149,85,66,200,87,174,235,126,233,186,238,23,129,64,224,193, 213,171,87,203,215,175,95,239,225,156,95,148,82,126,159,16,242,7,199,113,38,52,77,107,167,148,62,56,115,230,204,222, 166,0,78,157,58,245,221,96,48,248,183,112,56,60,120,250,244,105,117,223,190,125,129,88,44,134,108,54,139,100,50,137, 74,165,130,124,62,143,99,199,142,225,217,179,103,114,122,122,186,60,55,55,167,82,74,111,216,182,253,243,91,183,110,21, 38,39,39,191,3,224,55,0,142,19,66,60,33,196,239,71,71,71,255,244,95,179,206,100,50,250,216,216,88,241,241,227, 199,194,117,93,105,219,182,52,77,83,46,45,45,201,241,241,113,249,252,249,115,249,244,233,83,57,62,62,46,231,231,231, 101,177,88,148,229,114,89,22,139,69,121,229,202,21,239,236,217,179,143,107,247,155,152,152,8,93,190,124,57,94,59,183, 173,7,8,33,31,30,62,124,56,208,215,215,71,74,165,18,84,85,69,32,16,128,97,24,32,132,160,84,42,225,245,235, 215,144,82,194,52,77,172,175,175,195,117,93,80,74,49,60,60,172,62,124,248,176,247,228,201,147,131,55,110,220,248,39, 0,156,63,127,190,2,160,82,171,177,237,41,8,133,66,195,135,14,29,210,109,219,134,16,95,159,170,64,32,0,207,243, 240,242,229,75,228,243,121,112,206,17,14,135,171,239,29,199,129,105,154,56,114,228,72,0,192,240,118,26,219,2,16,66, 134,247,236,217,67,28,199,129,148,18,82,74,8,33,16,141,70,65,8,193,204,204,12,242,249,60,8,33,104,107,107,131, 148,178,186,214,178,44,164,82,41,45,24,12,158,250,70,0,153,76,38,174,105,90,103,52,26,133,235,186,16,66,128,115, 14,206,57,162,209,40,82,169,20,150,151,151,177,188,188,140,84,42,133,72,36,82,5,148,82,194,178,44,116,117,117,129, 49,54,48,58,58,26,110,164,211,16,128,82,122,244,192,129,3,172,82,169,128,49,86,21,103,140,65,85,85,140,140,140, 160,191,191,31,253,253,253,24,25,25,1,165,180,42,46,132,0,99,12,140,49,244,245,245,185,142,227,124,175,145,78,67, 19,106,154,54,60,56,56,168,219,182,13,206,57,10,133,2,132,16,32,132,32,16,8,96,112,112,16,23,46,92,0,0, 8,33,176,184,184,8,211,52,65,200,155,147,29,14,135,97,154,38,246,239,223,223,178,176,176,240,35,0,119,223,9,128, 16,114,108,247,238,221,164,88,44,194,182,109,36,18,9,80,74,171,177,182,182,134,246,246,118,0,64,161,80,64,107,107, 43,116,93,175,86,202,48,12,24,134,129,238,238,110,74,41,205,0,248,69,221,74,215,155,60,126,252,120,167,166,105,137, 182,182,54,8,33,160,235,58,92,215,133,231,121,213,40,151,203,120,241,226,5,242,249,60,12,195,216,212,34,198,24,52, 77,131,109,219,136,199,227,0,240,237,209,209,209,68,211,0,170,170,30,29,26,26,98,126,249,183,110,94,11,226,121,222, 38,143,248,102,21,66,192,243,60,88,150,133,116,58,205,61,207,251,176,105,128,80,40,244,195,116,58,173,155,166,249,150, 248,214,168,5,172,133,240,223,111,108,108,160,175,175,79,87,20,37,83,79,171,174,7,8,33,251,118,237,218,69,202,229, 50,56,231,0,176,233,59,224,27,205,159,23,66,84,99,43,236,198,198,6,58,59,59,65,8,25,104,26,128,115,254,129, 174,235,88,89,89,1,33,4,82,202,170,249,8,33,111,1,212,66,212,182,137,49,6,199,113,208,213,213,5,41,229,7, 77,3,8,33,162,138,162,192,113,28,80,74,161,170,42,20,69,129,16,2,148,110,238,90,45,192,214,236,125,143,40,138, 2,206,121,75,211,0,148,82,195,178,172,144,223,83,95,192,175,2,128,106,101,106,179,247,1,252,236,125,143,88,150,5, 74,169,221,52,0,33,100,181,84,42,37,8,33,112,28,7,66,8,40,138,178,169,13,245,202,95,175,2,148,82,172,175, 175,131,16,178,254,46,45,248,124,113,113,49,213,219,219,171,148,203,229,77,0,245,60,80,11,176,181,10,209,104,20,249, 124,94,74,41,31,212,173,118,189,73,198,216,196,244,244,180,213,210,210,2,198,24,92,215,133,227,56,112,28,7,174,235, 54,21,126,255,195,225,48,158,60,121,98,122,158,119,173,105,128,169,169,169,156,105,154,179,179,179,179,34,145,72,188,181, 185,15,178,29,148,47,190,186,186,138,229,229,229,210,208,208,208,173,166,1,0,128,115,254,241,157,59,119,214,43,149,10, 226,241,120,93,241,218,185,218,103,223,249,173,173,173,184,127,255,190,201,57,255,89,163,123,66,195,155,209,252,252,252,70, 111,111,239,211,185,185,185,76,50,153,12,116,116,116,192,178,172,77,255,6,190,203,183,126,29,35,145,8,118,236,216,129, 187,119,239,86,86,86,86,166,110,222,188,249,187,70,58,219,94,205,22,22,22,22,122,122,122,30,229,114,185,143,24,99, 36,153,76,42,186,174,67,74,89,21,247,60,15,192,155,99,169,235,58,98,177,24,42,149,10,110,223,190,109,191,122,245, 234,139,96,48,248,227,92,46,39,27,105,52,117,47,200,100,50,113,74,233,111,85,85,253,201,222,189,123,89,79,79,79, 75,44,22,67,40,20,130,166,105,112,28,7,134,97,160,88,44,202,92,46,103,21,10,5,102,24,198,167,247,238,221,251, 59,128,186,165,127,39,0,127,28,60,120,112,103,36,18,25,209,117,253,35,85,85,251,1,236,144,82,134,1,84,8,33, 5,198,216,124,169,84,202,206,206,206,126,110,24,198,26,128,134,153,127,35,128,255,12,10,32,12,64,7,160,225,107,35, 115,0,22,0,19,0,107,118,179,127,3,133,1,126,93,19,53,41,250,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Network1x[408] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,18,0, 0,11,18,1,210,221,126,252,0,0,0,7,116,73,77,69,7,214,2,16,22,3,20,11,54,9,17,0,0,1,37,73, 68,65,84,56,203,157,146,61,75,195,80,20,134,159,155,92,242,63,164,46,221,2,226,238,32,226,38,82,255,131,17,10, 34,56,74,196,42,232,228,80,63,210,95,32,4,99,5,255,134,131,110,46,130,56,152,22,170,129,214,170,225,82,18,7, 13,26,242,97,240,29,207,121,207,203,121,206,189,130,2,181,246,182,61,160,65,185,58,178,164,217,88,152,95,164,86,55, 115,155,131,167,7,188,174,107,149,5,80,171,155,44,55,47,48,140,180,77,169,9,87,206,10,0,165,1,66,8,12,67, 98,206,78,3,49,32,0,184,189,190,39,138,190,60,178,140,245,180,189,207,220,20,168,151,30,143,98,134,247,15,197,235, 56,76,121,100,69,86,122,207,111,223,21,29,128,56,142,127,16,170,176,70,163,97,170,254,123,131,74,172,238,225,82,102, 179,204,17,117,93,163,63,24,231,178,58,71,7,121,132,118,42,224,230,174,15,177,200,101,93,91,109,166,38,53,77,227, 196,105,183,100,98,82,106,130,49,28,101,110,144,40,8,130,220,35,203,132,231,242,184,81,248,10,0,238,249,89,97,64, 199,235,186,214,31,127,222,182,183,118,118,139,2,172,141,245,77,194,48,204,157,76,88,129,194,0,124,223,231,191,146,101, 124,85,244,9,241,192,132,130,214,14,135,66,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Network2x[1293] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,214,5,29,7,1,11,233,166,171,236,0,0,4,154,73, 68,65,84,88,195,205,151,75,108,84,85,24,199,127,231,156,25,218,78,157,233,240,144,204,240,46,76,5,130,44,52,81, 140,209,88,154,152,152,200,74,18,93,216,133,34,104,35,49,196,13,66,42,154,32,138,184,112,99,212,241,65,140,80,37, 168,113,163,11,162,66,52,38,36,128,137,218,5,218,70,10,212,148,86,233,195,233,157,231,109,239,249,92,220,153,210,150, 182,76,59,36,122,147,201,156,123,238,189,231,252,207,247,253,127,223,61,23,254,227,67,205,230,230,103,119,62,243,104,44, 30,59,94,201,132,217,108,238,203,215,95,123,99,107,233,60,48,155,135,99,241,216,241,109,79,60,197,224,208,224,156,38, 143,132,163,131,71,218,62,122,100,124,95,96,182,131,20,10,238,149,237,173,63,30,86,129,200,190,114,159,17,47,211,214, 246,102,83,115,58,227,140,78,190,54,107,1,74,169,128,10,68,246,61,190,117,35,34,130,69,240,68,16,15,68,9,214, 10,98,5,107,45,0,174,107,57,113,242,66,115,95,111,47,1,51,47,92,185,0,173,3,0,162,1,81,190,141,60,1, 37,40,5,32,160,53,34,10,17,97,192,201,1,80,95,191,26,39,149,118,129,154,138,4,136,181,166,40,196,95,45,2, 6,148,82,120,30,40,101,16,132,238,62,135,254,225,2,133,130,31,137,139,23,187,8,152,96,117,197,17,64,161,199,0, 82,130,66,161,81,88,229,11,193,131,223,46,12,49,156,29,1,32,24,84,215,34,224,164,71,129,170,74,61,96,0,172, 242,167,182,34,215,96,214,154,95,59,175,226,186,22,19,52,40,41,102,9,232,232,248,157,218,80,184,106,218,8,148,203, 248,209,182,143,67,15,223,9,195,157,93,215,93,27,40,132,241,212,29,152,224,152,97,64,252,230,218,181,235,200,102,114, 50,173,128,74,25,15,204,11,243,197,231,71,184,42,26,109,193,106,13,22,180,154,72,208,140,30,152,11,227,225,133,181, 188,179,231,118,134,82,105,127,192,128,6,140,63,177,8,50,174,216,106,163,213,140,2,230,200,56,125,189,189,88,235,15, 213,113,238,210,148,133,200,29,113,155,141,186,190,242,7,110,22,227,169,161,97,0,94,217,185,152,53,107,18,24,99,198, 15,221,236,56,195,132,107,35,51,11,168,144,113,0,54,172,219,80,242,29,34,190,102,1,234,194,11,232,253,171,199,66, 9,227,169,48,172,128,241,161,161,127,0,104,59,214,54,173,95,220,130,171,175,92,233,219,59,147,7,42,97,28,128,166, 198,38,242,249,60,133,66,1,215,117,57,115,246,204,215,198,152,45,74,169,253,198,152,216,202,149,203,159,60,120,232,192, 99,74,169,29,123,118,183,254,52,89,128,6,80,70,33,162,80,158,32,34,244,14,102,248,59,149,199,67,79,203,120,218, 201,0,112,242,212,201,9,171,174,169,169,217,82,108,190,212,221,253,103,83,109,109,232,72,40,20,186,191,186,186,250,43, 32,62,201,132,62,167,90,52,86,89,196,40,58,46,167,200,100,70,177,74,97,130,106,90,198,181,246,179,151,88,125,91, 105,49,100,50,89,26,26,26,40,20,242,156,63,127,158,21,43,56,149,203,229,79,136,216,186,84,42,117,8,152,55,81, 0,126,10,206,253,49,80,92,157,248,198,8,154,162,57,100,90,198,77,192,119,125,9,209,250,250,122,186,186,186,232,238, 190,76,34,145,32,82,23,33,26,157,207,80,106,224,161,211,167,79,183,124,114,244,216,119,64,100,130,0,99,140,18,47, 211,214,113,246,98,115,185,133,232,190,187,22,225,142,184,148,24,223,180,233,238,98,52,13,139,22,47,242,163,163,12,155, 227,49,60,107,65,4,199,25,78,2,235,1,51,201,3,112,248,224,189,205,209,186,249,99,125,158,245,232,236,236,24,59, 159,130,113,198,51,126,236,248,167,55,20,221,223,223,255,22,144,3,114,19,4,100,210,25,187,112,193,173,90,198,194,239, 171,223,176,126,99,17,104,185,33,227,123,118,183,46,43,178,62,158,119,13,216,98,123,20,40,0,89,32,63,38,224,151, 159,219,31,4,190,157,73,121,85,117,85,57,140,247,84,178,45,215,128,222,127,224,229,145,205,141,155,137,70,231,83,83, 19,2,32,151,203,146,207,231,102,100,92,41,213,8,100,75,140,151,45,160,165,165,69,37,147,201,224,174,231,159,187,39, 30,143,253,48,151,215,113,145,113,183,200,248,174,189,47,188,24,47,235,53,14,144,76,38,131,219,159,222,246,64,60,30, 251,102,73,108,57,145,186,48,203,150,46,229,210,165,203,211,237,138,202,98,28,112,111,36,192,0,180,238,219,187,45,30, 143,125,182,108,201,10,18,13,9,180,82,244,244,244,34,248,149,16,241,255,75,191,85,171,86,225,56,195,164,82,41,226, 241,56,78,218,33,90,183,0,19,208,137,246,246,246,87,223,125,251,189,19,165,15,161,178,34,16,14,223,242,254,142,237, 45,164,29,7,109,20,214,179,36,18,165,50,52,213,214,188,60,198,203,78,129,181,246,251,15,62,76,54,222,140,143,205, 241,140,207,134,2,93,204,89,117,81,84,112,18,25,215,145,82,14,227,227,250,255,191,199,191,167,170,113,206,159,129,237, 192,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Optical1x[720] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,5,17,7,21,115,1,202,165,0,0,0,140,116, 69,88,116,67,111,109,109,101,110,116,0,77,101,110,117,45,115,105,122,101,100,32,105,99,111,110,10,61,61,61,61,61, 61,61,61,61,61,10,10,40,99,41,32,50,48,48,51,32,74,97,107,117,98,32,39,106,105,109,109,97,99,39,32,83, 116,101,105,110,101,114,44,32,10,104,116,116,112,58,47,47,106,105,109,109,97,99,46,109,117,115,105,99,104,97,108,108, 46,99,122,10,10,99,114,101,97,116,101,100,32,119,105,116,104,32,116,104,101,32,71,73,77,80,44,10,104,116,116,112, 58,47,47,119,119,119,46,103,105,109,112,46,111,114,103,103,138,199,71,0,0,1,197,73,68,65,84,56,203,157,146,77, 107,19,81,20,134,159,51,153,102,22,195,224,100,96,22,83,157,44,252,248,3,69,212,141,40,110,10,34,234,90,93,184, 149,72,200,63,208,130,80,68,132,88,104,69,65,17,17,68,255,129,74,214,217,104,73,180,38,168,203,102,25,33,208,132, 4,146,185,199,197,164,205,4,233,34,61,171,195,185,231,62,239,123,238,61,82,174,148,30,2,15,56,90,172,81,174,148, 244,40,209,239,247,181,92,41,169,13,96,140,161,215,235,45,36,157,119,242,0,216,0,106,20,53,10,178,0,65,153,1, 140,26,140,42,232,20,50,61,76,211,255,10,233,125,213,140,3,85,140,73,0,65,208,131,78,157,245,131,128,152,140,129, 44,96,223,133,0,70,1,145,153,160,234,1,216,72,150,152,29,193,24,52,209,84,83,4,85,69,84,81,217,87,19,68, 20,213,67,70,112,28,135,229,227,203,135,190,215,96,48,0,96,56,28,2,48,26,141,230,29,52,26,13,198,227,241,66, 223,232,121,94,10,48,137,33,159,207,243,230,237,171,133,0,151,46,94,73,1,98,9,237,118,11,128,167,79,170,76,38, 19,70,163,33,221,191,93,154,205,6,182,189,196,141,235,55,169,213,106,4,65,64,20,69,172,63,126,68,16,4,83,128, 8,190,239,19,134,33,219,219,95,89,89,57,139,239,23,240,253,2,167,79,157,1,160,94,175,227,186,46,97,24,242,249, 203,39,28,199,193,117,93,0,114,231,47,156,147,223,127,126,93,222,219,235,179,243,243,7,190,239,83,140,139,0,116,58, 29,186,221,46,158,231,17,69,17,31,62,190,167,213,222,33,73,18,154,223,27,136,200,218,220,242,150,238,223,187,150,179, 173,103,241,137,248,228,234,234,85,138,113,140,101,229,216,237,236,154,23,47,183,44,160,5,172,111,84,55,223,101,246,139, 108,110,221,190,115,107,169,16,28,123,110,89,214,221,185,213,87,125,45,34,91,27,213,205,111,217,250,63,189,144,236,196, 0,156,143,39,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Optical2x[1338] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,241,73,68,65,84,88,133,237,151,77,107,27, 87,20,134,159,59,51,146,70,182,136,109,197,56,49,162,162,182,28,74,49,66,100,103,199,49,73,136,146,58,24,28,210, 32,10,134,54,110,146,210,254,12,183,244,63,20,186,113,23,165,139,64,32,139,236,146,69,26,67,233,162,14,56,31,16, 146,69,157,144,16,108,35,33,91,31,51,250,184,115,187,240,204,100,236,140,108,53,93,148,66,95,24,116,239,209,204,57, 207,57,71,119,238,21,252,175,127,89,34,204,56,55,55,119,36,26,141,254,168,148,154,1,162,255,48,70,19,248,185,88, 44,126,125,239,222,189,246,222,47,141,176,39,162,209,232,79,215,175,95,159,201,231,243,104,154,134,82,10,96,215,231,222, 113,216,92,41,133,227,56,209,165,165,165,171,203,203,203,127,0,63,28,8,80,40,20,116,199,113,114,83,83,83,148,74, 37,44,203,66,8,129,16,162,99,144,253,236,177,88,140,217,217,89,150,151,151,191,10,3,208,246,26,148,82,231,39,38, 38,134,163,209,168,31,220,83,112,28,84,39,59,128,109,219,36,147,73,70,71,71,143,95,190,124,249,120,55,0,11,179, 179,179,212,106,181,208,236,222,71,245,122,157,124,62,15,112,109,95,128,249,249,249,129,120,60,62,151,201,100,168,86,171, 65,168,208,241,126,182,160,44,203,98,124,124,156,72,36,50,191,176,176,96,118,4,104,52,26,159,205,205,205,153,205,102, 19,41,101,104,79,247,246,189,27,136,118,187,141,166,105,76,78,78,14,108,111,111,127,218,17,0,184,114,242,228,73,42, 149,202,129,191,252,189,182,176,121,80,245,122,157,19,39,78,32,132,184,26,10,112,233,210,165,143,71,70,70,38,6,6, 6,176,109,251,192,236,247,107,75,24,68,163,209,32,149,74,49,52,52,116,166,80,40,140,188,3,160,105,218,23,23,47, 94,164,86,171,225,56,206,174,140,14,90,114,221,86,163,209,104,112,234,212,41,77,74,249,229,46,128,197,197,69,77,211, 180,207,179,217,44,213,106,181,171,245,221,41,248,126,213,177,109,155,92,46,135,97,24,11,139,139,139,154,15,240,232,209, 163,115,211,211,211,41,33,4,205,102,179,235,242,135,205,195,2,123,247,72,41,137,199,227,140,143,143,127,176,186,186,122, 62,216,130,43,103,207,158,245,179,15,58,232,6,34,236,254,78,213,176,109,155,211,167,79,163,235,250,181,32,192,153,116, 58,77,189,94,239,42,251,110,91,17,86,141,86,171,197,177,99,199,80,74,157,131,183,123,193,145,72,36,194,209,163,71, 223,235,109,215,233,153,78,47,45,219,182,1,250,130,0,162,86,171,177,178,178,178,43,147,224,229,56,206,123,219,130,118, 128,84,42,229,3,249,187,161,183,244,110,220,184,225,143,247,147,183,67,6,129,15,186,95,215,117,38,39,39,119,249,247, 1,60,7,66,8,18,137,4,133,66,1,41,165,31,168,94,175,83,175,215,1,216,220,220,228,225,195,135,62,128,148,146, 233,233,105,18,137,4,74,41,122,123,123,137,199,227,187,170,113,243,230,77,255,249,80,0,207,56,54,54,198,214,214,22, 195,195,195,72,41,125,40,219,182,217,222,222,70,8,65,38,147,97,112,112,144,90,173,6,192,161,67,135,72,167,211,187, 230,166,105,226,56,14,66,8,44,203,34,145,72,208,215,215,119,48,64,46,151,227,217,179,103,72,41,57,124,248,48,142, 227,160,105,26,134,97,96,89,150,239,52,153,76,98,89,150,95,129,70,163,65,34,145,32,30,143,251,129,148,82,232,186, 206,235,215,175,25,26,26,242,237,94,98,176,179,12,35,158,49,22,139,17,141,70,73,167,211,220,185,115,7,165,20,134, 97,160,105,26,142,227,16,139,197,48,12,131,118,187,205,250,250,58,165,82,137,98,177,72,185,92,70,74,137,105,154,120, 7,25,203,178,104,181,90,148,203,101,86,86,86,232,235,235,67,215,117,116,93,247,0,36,16,53,128,30,165,212,159,15, 30,60,24,201,100,50,0,12,14,14,34,165,228,246,237,219,92,184,112,1,195,48,252,237,217,203,44,145,72,248,153,232, 186,238,103,212,108,54,17,66,96,24,6,229,114,153,187,119,239,146,76,38,137,197,98,126,165,159,63,127,142,227,56,79, 129,94,3,80,165,82,233,187,165,165,165,111,117,93,79,123,142,164,148,36,147,73,222,188,121,67,62,159,103,116,116,212, 183,55,155,205,119,2,107,154,134,16,2,77,211,144,82,242,248,241,99,86,87,87,121,242,228,9,149,74,5,93,215,137, 68,34,8,33,144,82,174,109,108,108,124,15,180,4,59,71,243,126,118,94,12,9,118,142,225,17,183,61,102,54,155,253, 112,102,102,230,155,254,254,254,92,54,155,213,83,169,148,209,211,211,131,105,154,254,65,85,41,69,173,86,163,88,44,242, 242,229,203,246,139,23,47,228,250,250,250,239,183,110,221,250,229,213,171,87,27,128,13,148,129,22,59,199,244,26,176,9, 84,130,167,73,13,136,185,151,151,154,14,244,0,230,216,216,216,145,169,169,169,79,82,169,212,148,105,154,31,185,208,154, 219,18,169,148,42,87,171,213,167,107,107,107,191,221,191,127,255,215,141,141,141,45,55,176,5,84,129,58,208,14,64,40, 232,240,199,100,143,52,32,14,152,1,192,8,59,43,72,119,191,87,238,37,221,0,45,160,225,2,84,220,192,161,234,6, 192,147,238,66,120,45,50,220,224,158,15,15,160,237,6,183,92,144,125,245,119,0,130,210,120,155,189,231,195,113,1,28, 23,230,191,161,191,0,81,45,240,203,178,133,12,186,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Printer1x[481] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,17,0, 0,11,17,1,127,100,95,145,0,0,0,7,116,73,77,69,7,213,8,18,15,53,11,122,248,175,234,0,0,1,110,73, 68,65,84,56,203,165,147,205,78,34,81,16,133,191,91,176,224,33,122,235,204,138,16,34,179,49,242,24,227,248,48,218, 254,60,129,154,209,103,16,120,2,122,199,154,37,59,113,167,38,36,205,95,104,18,187,105,238,45,87,32,61,252,77,244, 38,149,155,186,73,157,58,85,231,92,248,230,49,171,73,189,81,187,2,252,255,168,187,62,249,253,231,98,237,181,222,168, 105,146,36,59,35,142,99,173,55,106,186,168,201,111,130,111,183,219,91,91,87,42,149,76,190,17,160,88,44,126,206,104, 76,230,86,213,221,0,206,57,58,157,14,0,34,178,6,84,46,151,247,51,240,60,15,17,193,24,179,22,123,25,168,42, 173,86,107,217,81,68,168,86,171,187,101,60,247,207,174,0,191,80,40,240,227,224,39,206,185,12,253,213,241,140,49,116, 159,159,136,227,24,224,122,193,192,191,240,47,177,214,146,166,233,94,19,76,38,199,136,8,247,15,127,125,89,93,82,183, 219,37,73,18,130,32,64,85,9,195,144,209,104,196,96,48,96,56,28,210,239,247,233,245,122,52,155,77,222,94,95,178, 59,136,162,136,248,253,157,241,120,76,169,84,34,12,67,0,210,52,93,82,7,176,214,50,232,135,196,201,44,11,32,34, 76,162,136,32,104,50,157,78,1,152,207,231,136,49,56,103,153,91,139,72,142,124,46,199,209,113,117,179,10,214,90,14, 43,191,254,49,140,226,156,98,173,69,68,150,242,46,150,188,4,152,205,102,120,158,183,213,113,11,21,68,4,85,197,57, 151,1,120,188,189,187,57,253,194,111,126,252,0,186,104,203,229,25,65,188,29,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char Printer2x[917] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,76,73,68,65,84,88,133,229,151,203,79,36, 85,20,198,127,213,93,213,213,205,99,44,170,7,131,163,221,24,96,101,156,16,135,137,255,128,137,243,7,176,101,43,48, 147,134,224,78,73,70,89,184,109,196,16,99,34,11,183,44,92,139,186,115,246,44,93,25,67,120,100,228,17,98,117,3, 61,118,61,238,113,209,213,61,93,5,13,253,192,153,133,95,250,164,206,189,231,220,251,125,125,238,173,91,85,240,127,135, 214,42,176,182,182,246,93,181,90,157,5,18,61,114,40,211,52,191,95,90,90,122,124,85,80,111,53,202,117,221,217,197, 197,197,94,201,1,18,235,235,235,179,64,103,2,68,36,1,112,120,120,216,19,251,200,200,72,99,174,142,4,52,99,127, 127,191,99,226,92,46,215,86,222,141,2,12,195,96,108,108,236,198,137,68,164,45,194,174,4,236,237,237,117,76,158,207, 231,111,79,192,248,248,120,71,228,157,160,45,1,187,187,187,29,19,143,142,142,222,158,128,137,137,137,142,200,59,65,91, 2,118,118,118,90,146,91,150,197,208,208,80,203,241,158,231,245,38,160,92,46,147,205,102,209,180,151,135,102,220,175,84, 42,87,246,3,36,147,201,238,5,184,174,219,56,136,174,19,112,157,63,60,60,220,190,128,249,249,249,15,147,201,228,79, 190,239,103,1,78,79,79,57,57,57,137,76,28,39,186,169,93,175,192,220,220,156,232,186,126,228,186,238,71,27,27,27, 191,55,114,235,206,194,194,130,169,235,250,159,203,203,203,111,91,150,197,234,234,42,147,147,147,156,159,159,95,154,252,186, 77,216,28,215,52,141,254,254,126,182,183,183,41,20,10,56,142,67,177,88,252,195,182,237,247,86,86,86,252,72,5,52, 77,251,124,102,102,230,77,203,178,0,176,109,155,227,227,227,150,68,237,226,226,226,130,193,193,65,42,149,10,3,3,3, 76,79,79,191,187,185,185,249,25,240,85,36,177,80,40,252,29,4,129,40,165,218,178,32,8,186,50,223,247,229,201,147, 199,141,178,54,42,224,121,158,37,34,252,245,252,0,195,48,56,56,120,78,38,99,98,219,54,74,1,72,88,218,218,85, 132,154,17,58,8,162,106,237,230,126,17,65,41,225,236,188,140,239,249,124,240,96,138,32,80,253,151,4,0,4,65,128, 227,56,228,243,121,252,192,99,240,206,48,153,76,95,24,149,250,239,101,155,144,59,2,137,245,213,6,29,29,31,241,207, 139,23,84,171,213,72,118,228,57,29,4,62,63,255,242,43,190,31,144,123,39,71,218,76,147,74,165,66,51,73,153,38, 102,195,210,152,102,154,116,58,110,25,50,153,102,235,3,77,227,217,179,223,128,218,173,221,140,75,21,184,119,239,45,158, 126,241,229,165,19,172,151,227,215,48,116,238,223,127,31,0,239,38,1,15,31,78,49,53,245,0,165,4,17,213,88,67, 17,133,40,65,73,204,87,97,142,8,18,230,213,125,21,230,213,226,53,223,245,162,2,34,75,160,84,208,245,191,108,23, 241,37,136,237,129,255,94,128,231,70,151,246,149,11,136,47,65,125,15,164,18,137,132,123,118,118,150,170,221,118,130,82, 32,162,162,190,8,74,174,243,5,68,53,124,105,236,1,16,20,162,160,92,42,161,105,90,0,216,128,163,135,85,120,163, 82,169,124,91,44,126,253,233,109,190,108,92,5,77,211,40,149,74,63,132,2,68,3,146,192,93,32,251,232,209,199,133, 108,246,238,39,34,210,214,235,122,23,8,28,199,249,113,107,107,235,27,224,20,56,170,63,13,211,161,162,59,64,31,96, 208,251,39,89,28,94,56,167,11,92,0,39,64,41,254,109,104,0,169,208,110,27,10,8,66,33,46,205,167,250,235,196, 191,89,213,31,195,110,216,55,104,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Speaker1x[592] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,1,226,73,68,65,84,56,141, 165,147,191,79,83,81,20,199,63,231,246,245,165,68,168,3,193,201,63,64,99,66,4,139,128,113,100,241,71,88,40,88, 162,46,36,242,106,58,233,0,127,132,49,93,173,12,13,137,160,169,105,2,196,133,196,168,131,131,137,16,23,69,172,147, 58,176,184,152,247,76,244,93,222,61,14,198,218,22,140,65,191,227,57,159,156,123,190,223,123,175,168,42,255,35,243,167, 70,126,58,159,11,130,32,253,79,3,10,133,137,193,20,242,56,142,227,212,129,7,20,10,19,131,105,63,243,84,85,179, 173,245,161,224,94,112,122,118,121,172,147,247,46,77,79,134,64,198,243,188,175,168,222,73,251,153,235,51,51,51,217,202, 221,74,210,10,58,167,239,141,104,53,23,60,236,223,168,76,126,105,110,32,72,166,124,187,236,205,207,205,31,86,152,43, 149,74,217,209,145,51,120,158,7,64,110,118,169,56,114,109,233,232,230,194,213,39,10,235,104,124,179,205,130,162,244,245, 29,225,248,177,19,168,170,12,156,60,69,38,211,133,136,0,32,66,111,34,148,1,68,101,69,144,209,61,25,188,217,122, 205,187,198,91,0,26,141,109,182,183,183,176,214,2,144,114,44,2,99,34,136,26,247,10,116,72,4,105,102,0,16,134, 97,115,101,187,107,81,126,191,141,93,163,137,168,164,0,172,209,196,79,164,45,120,3,16,70,33,97,20,162,170,216,216, 98,99,219,4,4,83,64,244,153,42,234,37,169,1,96,83,91,78,48,0,81,20,177,179,179,3,192,135,79,31,137,109, 220,26,191,167,164,111,252,132,245,130,194,139,182,107,84,85,173,215,235,137,136,88,35,102,113,117,117,229,242,248,197,241, 238,95,192,203,133,43,183,0,134,139,247,71,129,60,98,250,59,45,244,168,106,183,115,174,123,121,233,65,209,126,79,206, 173,61,90,139,156,115,109,94,93,226,134,65,139,27,149,233,207,173,117,217,239,51,77,77,77,157,197,184,245,67,93,61, 189,213,106,245,219,30,160,51,196,78,213,106,181,231,56,115,222,247,253,100,191,254,95,55,56,136,126,0,228,148,200,42, 201,231,90,24,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Speaker2x[1854] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,245,73,68,65,84,88,133,237,150,109,140,84, 87,25,199,127,231,220,123,238,220,59,47,251,50,51,187,203,178,3,97,23,22,104,129,54,186,84,216,180,81,191,212,82, 99,141,47,133,15,181,49,8,149,24,136,81,162,49,49,105,226,26,141,126,209,126,48,161,77,27,209,38,162,169,66,76, 109,212,154,168,188,108,181,32,150,82,177,11,21,22,152,93,102,223,119,217,183,153,217,153,251,114,142,31,118,169,200,80, 163,169,137,137,225,159,60,185,247,230,156,156,255,239,220,231,121,78,14,220,209,29,253,143,37,254,147,201,251,247,239,223, 134,197,46,96,171,144,216,194,200,62,109,244,11,245,201,250,31,245,244,244,248,255,117,128,125,95,220,215,45,140,248,30, 208,38,132,104,205,181,229,216,180,105,35,245,117,117,204,207,23,41,149,75,228,243,121,10,67,67,24,99,34,33,196,223, 4,226,219,79,125,231,169,67,239,26,160,167,167,71,142,79,79,92,250,244,99,143,119,196,227,30,249,124,158,250,250,6, 158,63,244,19,206,190,113,14,173,53,241,68,156,15,220,223,205,93,235,59,241,253,0,219,182,56,127,225,66,184,16,86, 214,28,248,238,129,129,27,107,117,237,121,86,193,114,117,230,185,71,202,183,250,200,119,2,40,140,21,222,215,214,218,214, 145,107,107,227,153,231,14,162,156,24,79,126,253,155,12,21,174,177,42,183,140,53,237,109,52,53,166,56,253,218,235,188, 248,203,223,80,87,151,226,197,151,94,166,177,177,193,150,161,220,241,79,187,140,188,117,68,51,143,221,206,199,190,241,178, 125,239,246,100,42,172,255,138,227,56,31,23,66,86,203,149,210,49,173,35,130,32,224,115,159,221,205,87,159,252,26,233, 250,36,142,178,144,150,68,217,10,43,105,145,201,8,174,79,207,243,251,99,127,96,199,163,31,229,202,213,1,66,173,1, 216,242,196,161,220,159,190,255,120,97,97,206,189,24,111,244,119,110,216,123,32,217,247,244,190,98,13,192,246,189,219,147, 13,166,241,204,135,30,122,112,85,215,123,222,235,140,142,142,114,226,149,222,123,46,246,247,83,94,40,243,211,35,63,199, 81,18,101,75,148,163,136,57,49,148,178,177,44,11,33,37,241,120,156,145,209,9,166,166,166,153,158,158,38,12,162,115, 244,244,200,112,72,124,163,123,247,207,190,116,242,224,142,235,93,123,126,60,24,243,27,214,1,103,106,82,144,17,217,31, 108,255,196,163,237,221,91,182,58,199,123,143,114,236,196,81,198,39,199,213,178,101,173,84,43,85,242,249,171,40,91,226, 56,14,158,231,225,197,61,226,241,56,241,68,98,241,25,143,211,186,44,203,91,23,251,73,165,82,232,40,216,66,79,143, 150,198,188,25,200,234,3,0,50,18,87,45,193,250,154,26,248,212,206,157,155,98,174,187,237,190,205,93,234,204,235,127, 102,126,126,158,72,107,214,174,89,203,234,246,118,222,56,247,87,116,20,98,219,54,174,235,226,185,238,77,16,30,137,196, 34,64,58,221,64,165,82,161,190,174,142,200,232,135,1,48,166,207,24,185,25,32,18,102,216,8,179,170,6,192,139,169, 189,31,222,182,45,62,59,59,71,97,232,26,45,205,45,236,254,204,46,198,198,199,105,93,214,204,229,171,151,209,58,196, 141,197,104,76,55,144,206,164,177,164,36,22,139,189,189,251,27,16,169,84,146,40,10,49,134,174,61,123,246,40,109,137, 33,41,244,58,0,133,25,3,179,178,6,0,196,131,185,182,156,53,88,24,64,107,77,38,147,166,174,174,129,193,193,2, 169,84,138,82,177,140,109,91,164,179,105,58,59,59,233,236,236,100,121,219,114,170,190,191,100,254,143,52,164,82,9,170, 85,31,71,41,85,46,151,59,64,207,34,196,10,128,162,227,204,8,68,182,6,32,8,131,149,142,82,204,206,206,2,16, 106,67,95,223,57,138,165,18,198,24,164,45,81,74,145,201,100,104,105,105,166,99,117,59,141,233,70,228,82,241,45,214, 66,28,207,91,76,71,104,52,66,74,66,194,140,147,112,39,180,97,53,64,83,115,83,69,27,145,168,105,67,173,181,210, 70,83,42,45,118,71,113,110,150,226,252,60,97,24,18,134,1,142,82,40,91,17,69,17,85,223,167,88,44,18,6,33, 58,210,120,113,15,219,182,49,198,16,4,1,110,185,76,20,70,68,81,136,239,107,1,32,32,121,195,76,220,230,220,177, 133,148,225,194,194,130,45,196,226,216,228,212,36,90,27,180,137,168,84,170,184,110,12,203,182,152,157,157,163,112,173,192, 228,196,36,51,51,51,40,71,17,247,60,148,82,24,99,168,250,62,74,57,88,86,21,191,234,35,162,104,106,97,186,212, 98,41,167,31,128,241,9,23,204,66,13,128,101,89,195,115,115,179,43,45,185,120,42,151,74,101,180,214,56,78,140,137, 137,73,146,201,36,142,163,16,8,70,134,135,49,70,96,43,155,123,238,221,132,235,185,56,78,12,99,12,66,74,140,214, 216,150,69,177,180,16,218,82,94,81,202,185,91,99,6,1,74,68,141,192,100,77,13,24,99,126,151,31,24,208,174,231, 1,160,148,66,74,73,50,17,231,218,208,48,233,198,52,201,84,10,91,89,100,178,89,58,86,183,179,97,227,221,36,18, 9,28,39,70,60,238,225,121,46,142,163,208,6,74,197,18,190,239,255,229,240,225,195,62,82,172,16,112,30,192,84,117, 43,194,92,171,1,152,158,158,125,254,212,233,211,229,100,34,69,44,230,98,219,22,153,76,150,245,107,59,233,191,114,153, 132,231,209,148,109,70,8,241,118,200,165,176,109,11,215,117,113,28,135,32,8,145,82,48,62,57,73,168,245,175,0,180, 54,247,74,56,5,32,4,57,97,100,190,6,224,23,71,142,244,21,139,229,51,249,171,249,104,121,107,43,82,90,140,141, 143,145,203,229,24,24,44,80,245,171,36,147,41,18,137,20,198,152,165,0,99,12,81,164,241,125,159,48,12,153,24,159, 162,90,169,48,62,49,133,14,195,63,2,72,204,22,75,87,78,0,104,65,39,152,190,26,0,192,126,181,247,149,253,199, 122,123,167,6,175,21,162,230,166,102,154,179,77,156,60,117,74,103,179,105,140,214,196,148,77,107,91,43,182,109,163,181, 38,138,34,130,48,196,247,125,202,229,5,134,135,71,8,194,128,40,12,105,108,104,64,27,179,17,32,12,253,93,39,15, 62,113,253,225,207,255,58,38,132,105,47,43,231,66,77,17,2,162,191,191,127,198,215,254,39,203,149,133,47,199,221,248, 3,198,232,104,100,100,244,124,125,67,227,7,131,32,224,165,151,127,203,199,30,121,136,92,110,5,197,226,252,82,155,5, 8,177,64,113,190,68,181,82,97,230,250,117,142,246,158,100,101,110,57,81,24,58,0,103,127,184,107,2,96,34,152,236, 52,70,92,237,123,122,71,241,118,0,33,16,14,94,25,28,31,188,50,216,3,120,128,107,89,86,162,171,187,123,227,200, 232,88,246,253,221,247,113,225,173,139,116,174,238,160,174,190,30,207,115,1,208,70,51,59,51,207,165,75,253,4,65,200, 253,91,55,243,234,201,215,116,53,12,143,220,108,210,62,229,94,56,187,44,121,233,86,115,88,188,17,37,151,76,61,192, 5,98,75,225,228,86,173,218,156,109,110,249,130,101,89,171,132,16,114,69,110,57,119,173,93,67,38,147,70,74,201,228, 212,20,249,124,129,43,3,131,104,173,145,66,20,140,224,91,167,78,156,120,230,118,102,239,4,32,110,49,119,150,194,6, 44,110,186,182,173,221,176,233,65,47,225,125,196,150,118,151,144,210,209,38,122,83,104,241,66,197,115,158,237,59,126,188, 230,247,254,187,0,55,36,151,140,99,128,90,50,151,55,205,49,64,196,98,202,42,64,117,233,251,93,233,95,221,138,229, 45,227,230,166,184,163,255,31,253,29,127,37,1,140,156,153,51,57,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Storage1x[603] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,5,15,53,8,235,207,124,119,0,0,0,140,116, 69,88,116,67,111,109,109,101,110,116,0,77,101,110,117,45,115,105,122,101,100,32,105,99,111,110,10,61,61,61,61,61, 61,61,61,61,61,10,10,40,99,41,32,50,48,48,51,32,74,97,107,117,98,32,39,106,105,109,109,97,99,39,32,83, 116,101,105,110,101,114,44,32,10,104,116,116,112,58,47,47,106,105,109,109,97,99,46,109,117,115,105,99,104,97,108,108, 46,99,122,10,10,99,114,101,97,116,101,100,32,119,105,116,104,32,116,104,101,32,71,73,77,80,44,10,104,116,116,112, 58,47,47,119,119,119,46,103,105,109,112,46,111,114,103,103,138,199,71,0,0,1,80,73,68,65,84,56,203,165,147,77, 110,194,48,16,133,191,160,64,164,32,203,201,38,106,36,246,112,55,36,196,13,218,222,144,21,39,64,44,216,65,108,16, 249,153,233,34,224,40,237,162,85,153,133,237,25,207,123,126,51,182,225,69,139,54,219,245,7,240,254,79,252,39,155,237, 90,255,99,206,57,221,108,215,26,3,136,8,231,243,25,85,133,40,2,213,177,76,64,159,67,4,160,204,102,51,0,98, 0,21,165,19,233,179,69,6,0,16,17,33,170,125,140,168,199,247,206,64,32,42,72,39,68,15,144,2,168,62,0,202, 83,24,170,61,177,208,171,13,10,84,201,243,140,211,233,244,167,206,101,89,70,215,117,0,76,158,65,231,28,69,81,252, 10,46,138,130,186,174,131,31,154,232,189,15,9,0,215,235,149,170,170,0,48,198,144,166,41,147,201,132,203,229,130,247, 30,99,204,64,144,36,9,139,197,98,116,146,181,22,107,45,0,222,123,234,186,230,118,187,253,80,20,3,236,118,59,154, 166,25,109,180,109,75,28,199,97,253,221,242,60,31,247,160,109,91,246,251,61,199,227,145,170,170,80,85,84,149,36,73, 56,28,14,24,99,194,236,156,195,57,55,16,168,42,34,194,124,158,50,157,78,195,35,1,104,154,6,149,158,76,69,250, 220,199,13,132,18,178,44,195,90,75,89,150,0,220,239,119,128,208,237,229,106,137,136,176,92,173,16,17,222,202,50,148, 252,250,103,122,213,190,0,151,85,237,38,182,108,181,11,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Storage2x[1155] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,58,73,68,65,84,88,133,237,150,205,111,19, 71,24,198,127,179,179,142,13,246,218,106,10,84,178,235,40,109,168,65,9,183,72,233,1,132,34,34,66,168,148,68,21, 73,15,136,22,42,40,253,27,122,203,173,7,114,234,173,103,206,61,115,203,63,64,47,112,43,92,138,20,33,20,36,99, 217,187,235,253,240,204,244,146,157,174,191,128,74,220,202,43,189,154,143,29,189,207,51,207,59,243,206,194,71,251,191,155, 152,52,185,187,187,123,214,24,243,123,161,80,88,149,82,58,255,53,168,49,198,246,149,82,42,77,211,63,194,48,252,225, 209,163,71,241,232,90,119,82,0,173,245,111,183,110,221,186,178,185,185,137,227,56,54,224,164,54,243,209,113,206,229,195, 135,15,191,59,56,56,248,19,120,240,78,2,119,238,220,41,249,190,255,245,250,250,58,157,78,135,32,8,16,66,32,132, 120,43,208,180,249,74,165,194,245,235,215,57,56,56,184,7,236,3,38,143,55,38,111,175,215,251,118,109,109,109,86,74, 73,28,199,20,139,69,0,132,16,184,174,59,228,142,227,88,114,66,8,164,148,118,14,160,84,42,17,199,49,181,90,141, 165,165,165,214,206,206,206,149,81,188,73,249,189,187,177,177,129,239,251,164,105,74,154,166,22,48,11,108,140,65,107,141, 214,26,99,12,82,74,92,215,181,109,230,113,28,147,36,9,65,16,112,245,234,85,140,49,63,191,149,192,141,27,55,190, 60,115,230,204,149,70,163,65,16,4,67,192,25,160,82,10,165,20,90,107,171,74,182,235,209,148,100,138,244,251,125,90, 173,22,149,74,101,123,107,107,235,179,169,4,132,16,247,118,118,118,68,24,134,86,246,60,104,230,198,152,33,201,129,33, 69,242,158,17,75,211,148,181,181,181,153,66,161,240,227,68,2,171,171,171,174,16,226,246,242,242,50,190,239,227,186,46, 198,152,49,112,0,199,113,144,82,90,130,121,192,108,60,4,226,56,132,97,200,202,202,10,192,253,189,189,61,103,140,192, 236,236,236,55,151,46,93,170,23,10,5,162,40,194,113,28,187,171,44,104,6,156,223,245,232,121,24,189,170,66,8,138, 197,34,105,154,226,121,30,23,46,92,248,226,201,147,39,235,99,4,132,16,63,93,187,118,141,110,183,107,3,100,36,178, 124,230,119,253,54,240,188,205,204,204,216,126,191,223,231,242,229,203,72,41,239,15,17,216,218,218,170,159,58,117,106,163, 217,108,18,4,1,198,24,130,32,192,113,28,202,229,178,61,136,121,192,81,117,38,201,94,46,151,145,82,226,251,62,0, 113,28,179,176,176,64,181,90,221,220,221,221,109,88,2,174,235,222,222,222,222,118,195,48,28,42,56,65,16,16,199,49, 39,79,158,228,196,137,19,184,174,107,213,201,192,243,114,75,41,41,22,139,84,42,21,42,149,10,253,126,223,42,154,125, 87,74,113,241,226,69,87,107,125,215,18,16,66,220,92,94,94,38,12,67,234,245,58,158,231,217,93,69,81,68,187,221, 166,215,235,161,148,178,0,158,231,81,173,86,173,215,106,53,74,165,18,0,189,94,143,118,187,77,28,199,54,142,231,121, 204,205,205,161,148,98,101,101,5,215,117,191,135,127,75,241,87,158,231,209,235,245,120,249,242,37,90,107,123,208,50,203, 110,65,20,69,99,121,206,171,144,181,163,111,136,239,251,4,65,128,214,154,211,167,79,163,181,62,155,39,80,76,146,100, 172,218,141,182,249,60,79,123,160,242,107,71,191,101,41,123,245,234,149,237,219,199,104,48,24,240,236,217,179,177,0,147, 138,203,164,185,247,93,11,80,175,215,45,89,171,115,198,8,224,241,227,199,60,125,250,148,231,207,159,115,120,120,200,209, 209,145,125,25,227,56,30,170,134,89,224,118,187,77,179,217,164,211,233,208,108,54,121,243,230,13,115,115,115,116,58,29, 230,231,231,109,59,138,101,9,228,229,146,82,78,204,243,52,249,39,125,155,150,14,192,86,212,169,10,20,139,197,177,67, 56,141,200,180,2,52,109,126,20,203,158,129,140,149,49,134,197,197,69,148,82,184,174,75,146,36,86,114,165,20,66,8, 59,126,31,50,163,115,66,8,6,131,1,128,182,4,140,49,127,191,120,241,98,254,220,185,115,99,229,117,82,229,155,228, 141,70,3,173,53,139,139,139,36,73,194,249,243,231,137,162,136,86,171,69,16,4,44,44,44,208,237,118,169,213,106,217, 85,255,11,40,185,0,97,24,254,178,191,191,255,192,113,156,207,223,169,251,7,48,165,212,225,209,209,209,175,192,76,246, 87,92,2,62,5,62,1,170,192,12,80,248,192,184,9,32,129,8,232,2,175,129,215,249,223,114,1,148,143,189,116,188, 248,67,218,224,216,35,192,63,38,244,209,62,26,255,0,149,96,129,13,164,124,187,62,0,0,0,0,73,69,78,68,174, 66,96,130, }; } namespace Edit { const unsigned char Clear1x[773] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,151,73,68,65,84,56,141, 149,146,75,104,148,103,20,134,159,239,155,153,232,76,18,155,219,72,66,147,72,188,213,168,20,43,38,139,10,210,130,139, 74,75,118,130,151,133,139,209,141,130,34,252,11,5,93,24,23,6,28,144,82,16,132,142,198,133,96,75,117,161,11,233, 141,22,49,45,180,105,52,49,138,49,141,154,113,70,73,147,201,101,204,63,243,79,254,255,251,142,43,69,99,33,248,172, 207,251,112,206,203,81,71,190,96,115,56,196,5,17,162,198,178,247,212,13,249,145,247,64,135,52,223,175,109,142,173,218, 176,162,188,49,164,185,122,116,155,218,250,94,2,96,113,69,84,179,180,42,194,199,45,177,88,72,115,246,244,126,165,83, 73,213,153,74,170,218,5,5,86,232,28,124,82,116,125,35,212,215,148,17,93,172,234,171,26,233,5,142,3,75,23,20, 136,240,141,235,153,139,183,6,243,238,76,201,167,169,157,202,149,173,27,55,196,227,77,47,128,186,133,4,74,68,0,232, 218,167,78,196,87,114,252,147,182,207,85,115,75,59,61,167,187,189,233,127,198,114,236,84,147,198,200,37,17,206,39,28, 25,255,95,65,42,169,118,105,173,190,253,116,115,71,180,174,174,129,127,191,254,155,167,87,31,178,254,236,118,106,215,85, 145,30,237,247,238,223,253,67,140,245,190,51,70,142,37,28,201,206,23,236,209,154,100,83,125,107,57,151,36,106,38,93, 182,116,111,101,81,141,6,21,133,80,53,126,80,206,189,193,95,253,129,254,223,13,226,255,96,12,41,224,230,235,19,82, 73,181,40,114,142,59,21,205,181,171,58,46,31,14,105,253,28,66,13,96,198,192,100,177,65,30,207,182,224,205,213,144, 201,12,200,227,145,1,119,106,50,91,212,175,86,73,56,82,242,119,211,85,123,176,177,164,35,101,96,103,33,24,1,147, 5,243,31,94,225,25,179,185,235,204,140,157,35,94,141,218,212,254,85,133,86,74,194,111,53,82,193,207,217,76,90,91, 171,80,254,8,34,62,254,156,135,87,154,165,88,152,161,80,152,70,68,208,225,74,210,79,122,3,148,252,166,223,204,39, 28,121,230,207,77,143,164,211,119,153,113,99,76,76,140,146,203,165,153,204,101,112,221,41,68,132,88,245,54,10,69,205, 208,131,254,146,49,56,111,9,0,2,35,135,250,122,127,41,250,172,198,117,61,138,197,60,214,6,232,112,13,149,241,29, 228,221,152,220,186,121,37,111,76,240,101,194,145,204,235,18,223,164,251,140,234,89,253,81,123,219,242,21,173,17,47,255, 39,101,177,53,232,200,50,30,13,247,4,67,67,125,227,214,242,89,194,145,135,0,225,119,210,128,49,116,12,61,248,235, 118,229,146,134,15,63,168,106,211,163,163,247,252,225,225,159,2,107,188,235,214,114,32,225,200,196,59,159,56,159,84,82, 45,83,138,62,165,16,224,154,181,156,76,56,242,120,254,220,75,126,7,67,8,40,132,18,218,0,0,0,0,73,69,78, 68,174,66,96,130, }; const unsigned char Clear2x[1682] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,73,73,68,65,84,88,133,181,213,125,108,93, 117,29,199,241,247,57,247,220,199,246,222,219,118,109,215,173,118,237,186,149,135,181,133,217,177,177,141,61,176,17,16,204, 136,137,147,177,100,86,83,54,106,226,3,49,232,98,68,209,9,70,13,160,24,216,50,21,18,202,64,99,218,49,19,148, 2,219,68,93,93,217,68,217,67,87,186,167,146,62,220,199,222,182,247,225,220,199,243,232,31,222,226,157,148,116,118,235, 55,249,230,228,119,114,114,206,235,247,57,191,115,126,2,5,245,220,125,216,41,179,188,100,194,125,152,104,2,102,55,170, 241,237,71,186,136,48,71,37,20,14,158,223,33,253,164,230,134,91,30,109,185,231,107,246,92,38,129,111,224,152,118,246, 248,235,35,186,170,55,61,218,69,102,46,0,210,149,28,243,75,183,220,217,102,63,114,224,187,40,170,70,73,69,141,180, 176,190,113,97,224,195,254,86,208,127,51,23,0,177,112,96,24,166,87,142,6,177,184,202,120,240,169,139,200,209,49,234, 27,215,59,4,129,31,238,217,115,229,181,115,2,16,17,222,77,199,124,166,161,164,57,248,88,51,18,57,42,107,155,240, 148,86,122,61,23,45,247,207,5,192,82,56,184,183,217,252,32,52,124,161,245,238,29,143,91,93,70,4,183,17,4,12, 138,189,149,182,176,255,242,210,55,207,154,47,204,41,224,173,62,130,159,105,50,132,9,255,249,213,77,27,91,173,169,80, 31,217,232,16,165,139,150,51,124,249,131,210,187,110,214,186,15,159,35,116,61,1,31,123,175,209,6,227,167,147,161,145, 115,23,78,30,210,74,22,175,67,83,50,200,193,1,22,84,85,217,156,14,225,7,239,254,214,254,252,223,59,48,59,59, 175,196,207,182,132,233,78,254,124,59,53,22,139,165,191,229,246,141,110,51,51,78,58,30,194,86,33,98,43,153,96,65, 195,122,37,50,242,15,139,145,78,46,185,99,23,195,115,2,0,248,229,131,150,7,172,14,235,75,55,223,186,176,200,94, 26,196,61,175,134,250,21,173,64,25,175,180,127,95,185,112,56,150,80,85,179,125,31,252,97,78,0,189,175,176,52,35, 11,199,139,188,222,202,134,149,95,192,91,177,140,19,175,246,240,198,158,163,212,57,139,88,96,136,28,9,4,100,13,106, 247,67,116,182,0,105,186,147,61,29,124,203,48,196,103,22,222,116,163,94,185,232,54,130,125,97,246,239,126,13,41,97, 210,222,178,26,175,40,226,243,249,112,132,195,98,90,215,91,128,63,207,22,48,109,2,199,14,176,81,52,56,34,8,213, 198,251,29,154,125,228,196,56,107,28,110,86,214,47,161,180,170,138,247,2,126,254,56,208,71,205,109,166,190,234,97,6, 76,195,248,206,186,54,186,175,27,0,224,196,171,120,186,218,9,213,231,112,46,211,193,83,82,130,236,245,242,183,68,4, 235,124,193,220,182,175,93,88,188,162,142,88,100,144,225,115,175,167,179,242,208,65,175,131,135,27,183,161,92,23,0,192, 35,48,180,14,106,221,192,89,135,200,184,13,182,252,120,11,235,119,182,99,230,122,33,247,62,138,110,69,49,26,9,14, 246,102,39,125,199,206,228,52,238,221,212,70,236,186,0,190,2,159,181,11,116,9,86,156,159,222,90,204,246,103,159,16, 108,118,21,211,136,163,101,199,176,8,227,232,186,31,57,145,194,176,173,33,25,79,171,161,129,206,81,12,125,195,218,47, 227,191,102,64,30,209,176,245,23,60,209,184,233,254,237,243,171,171,64,11,163,83,74,38,149,196,238,80,209,179,126,20, 45,65,44,26,197,230,94,135,40,46,49,134,207,252,106,194,204,165,54,172,109,227,252,76,247,159,113,135,251,53,92,42, 154,71,82,51,84,20,53,5,70,12,37,29,196,110,19,72,140,135,65,144,208,114,6,118,135,151,88,160,27,77,27,16, 235,87,61,86,46,57,203,79,246,28,224,246,107,6,0,96,224,87,51,113,67,85,65,211,100,116,117,18,65,72,98,104, 57,178,169,52,74,86,199,212,51,20,121,235,153,28,121,155,108,162,71,168,95,253,184,167,200,221,240,206,241,151,249,226, 53,3,12,129,15,211,137,72,86,211,236,164,146,9,16,50,164,19,65,74,202,139,137,4,130,184,60,94,146,49,13,132, 8,238,138,102,38,134,143,18,15,117,82,183,114,183,171,164,122,243,11,189,7,120,177,183,19,231,172,1,2,252,43,35, 135,117,67,240,144,146,19,24,134,66,34,58,142,69,82,40,42,113,19,30,245,225,242,84,35,71,82,152,218,40,101,53, 107,137,250,254,201,216,224,126,22,222,244,128,163,250,214,111,182,138,90,241,200,241,14,182,206,10,112,199,16,3,90,78, 22,52,53,69,78,181,161,228,146,40,74,142,100,60,74,105,85,29,137,9,25,139,148,67,148,170,73,199,38,49,244,81, 42,151,222,73,106,124,144,145,211,63,195,93,214,96,187,97,253,115,229,162,205,123,176,167,131,246,194,123,95,213,150,250, 163,191,98,238,252,60,45,54,151,103,153,40,21,161,164,71,17,68,137,180,156,198,233,46,198,238,90,68,120,168,159,138, 186,102,162,254,8,130,101,28,171,195,139,103,254,114,76,205,74,224,194,33,82,227,103,148,100,98,116,239,87,159,225,233, 72,4,227,255,74,0,144,98,113,94,142,5,251,101,167,187,137,148,172,98,181,219,136,79,100,200,36,252,20,151,215,131, 88,76,42,122,145,121,139,87,33,143,9,168,153,48,46,207,26,138,43,150,163,103,227,185,160,175,191,99,211,67,60,217, 223,143,19,112,2,54,64,184,154,4,172,128,173,187,23,255,182,205,233,93,158,202,6,183,97,120,81,149,203,88,29,117, 200,19,1,28,30,15,78,79,45,161,193,211,148,85,55,224,240,52,19,29,189,76,42,126,94,9,93,122,51,254,151,147, 250,67,59,247,208,153,159,176,80,216,51,1,44,121,128,53,155,69,186,103,53,178,195,18,221,80,81,187,197,154,24,59, 133,187,162,150,88,32,132,40,37,113,149,46,199,196,129,146,210,177,57,75,140,120,232,180,22,10,70,122,191,241,20,187, 186,14,227,43,120,104,97,153,51,253,9,165,124,84,86,192,230,116,98,123,107,47,239,124,170,113,243,82,201,190,66,52, 245,83,72,214,26,70,251,187,168,107,249,58,233,248,160,30,26,56,36,78,200,250,123,191,251,19,123,127,255,54,151,0, 21,80,62,233,56,19,224,163,4,166,32,187,219,184,241,115,27,133,238,234,198,29,174,108,50,133,213,150,54,38,125,167, 212,108,58,66,96,204,124,163,235,40,7,95,59,194,48,160,3,90,190,213,255,233,41,128,58,227,94,144,79,193,90,208, 210,190,239,177,185,121,9,79,234,38,70,60,193,137,211,23,57,252,244,139,244,165,84,204,169,104,243,173,79,3,41,4, 229,174,6,0,255,121,119,31,1,242,109,41,104,145,255,46,176,66,128,145,239,41,196,212,81,201,247,140,107,96,186,178, 20,32,196,252,88,224,227,159,116,33,98,106,214,83,137,92,49,179,107,173,194,213,93,152,64,33,226,19,235,223,52,193, 219,4,57,147,41,1,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Copy1x[498] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,26,20,8,47,131,20,52,155,0,0,1,127,73, 68,65,84,56,203,149,147,75,75,2,81,24,134,223,35,51,99,218,128,253,10,207,8,221,22,253,143,8,90,182,136,160, 117,23,240,66,182,176,69,145,118,219,68,68,68,27,177,54,5,254,4,49,179,54,129,101,48,163,191,160,154,48,5,55, 205,237,180,105,116,70,71,177,111,245,157,195,121,31,222,247,227,59,228,232,36,51,175,235,250,44,70,40,193,207,189,109, 174,197,239,156,119,156,97,24,211,241,232,214,40,122,164,15,246,38,1,184,1,118,211,106,53,193,24,235,19,17,66,0, 0,161,208,132,39,148,115,30,106,181,26,94,171,149,133,198,119,99,102,144,139,253,204,110,202,238,121,158,191,117,1,36, 73,66,177,84,152,250,71,164,69,23,64,81,148,78,140,86,171,57,84,108,71,114,1,40,165,40,150,10,157,179,44,203, 158,226,72,36,210,63,3,198,24,100,89,118,13,210,249,112,80,185,0,148,82,148,202,197,161,14,122,161,156,45,182,44, 6,69,25,205,65,48,56,142,118,187,221,5,232,186,14,198,24,194,97,138,242,83,105,168,3,74,37,152,166,129,202,75, 165,11,208,180,31,4,2,99,176,44,54,212,238,229,213,5,30,30,239,221,17,4,158,175,158,157,159,186,22,135,49,203, 211,182,40,138,88,89,94,133,101,153,80,191,84,228,174,179,224,54,214,163,121,0,121,199,114,108,27,134,225,235,21,59, 75,85,85,228,110,178,0,240,236,243,26,146,166,233,240,251,253,16,4,1,162,40,130,16,130,122,189,14,128,224,227,243, 221,22,167,18,177,228,28,233,21,31,30,167,179,166,105,46,121,125,172,191,42,0,40,36,98,201,29,0,248,5,66,89, 166,3,21,136,247,216,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Copy2x[723] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,2,138,73,68,65,84,88,133,205,151,77,107,19, 65,24,199,255,207,206,238,154,120,73,14,150,126,130,100,139,18,191,129,224,65,164,167,28,252,14,61,232,45,132,70,145, 130,39,75,27,209,130,248,130,120,240,164,130,87,239,82,45,197,163,162,30,2,106,85,132,134,234,33,73,217,164,75,94, 102,60,196,221,236,44,59,251,162,27,244,129,144,153,157,217,249,255,230,255,60,179,217,0,255,56,8,0,182,182,154,23, 157,225,104,49,203,133,77,211,248,89,175,53,238,198,205,211,1,192,25,142,22,175,52,174,102,169,143,141,230,250,66,146, 121,186,191,211,237,118,51,17,47,22,139,137,231,106,153,40,254,69,232,241,83,146,7,231,124,62,0,79,159,61,190,116, 216,235,37,202,169,27,68,192,70,243,250,53,213,184,97,24,239,235,181,198,233,80,128,86,171,37,245,15,123,189,133,203, 171,217,22,233,230,141,245,10,160,112,96,105,105,73,234,191,220,121,1,32,155,34,37,34,20,10,5,175,255,127,22,97, 48,5,89,133,16,34,25,128,42,5,89,8,7,33,34,79,129,234,88,165,113,200,21,20,66,160,84,42,65,215,101,73, 101,10,162,206,116,208,161,40,225,32,68,172,3,156,115,148,203,101,233,218,206,238,118,172,96,156,112,216,120,40,64,16, 38,44,84,41,136,18,180,44,43,244,30,9,192,21,76,155,130,168,93,7,199,136,72,13,224,66,4,83,176,251,250,85, 40,72,82,187,231,146,130,164,130,192,212,126,21,132,7,192,57,247,4,163,236,23,66,120,249,140,179,219,253,246,183,137, 72,90,95,2,72,34,158,68,48,110,126,36,128,63,130,215,220,5,84,41,136,131,177,44,11,68,148,77,10,254,164,0, 25,99,234,39,97,214,41,240,143,105,154,6,198,152,7,160,105,179,31,97,9,32,151,203,73,16,254,137,193,98,74,178, 123,34,146,132,221,246,126,123,31,2,98,6,96,154,198,193,157,123,183,149,255,11,136,102,80,105,236,38,34,60,124,244, 0,166,105,2,0,76,195,196,112,52,68,62,151,159,46,234,2,212,107,141,251,42,113,96,250,110,199,57,87,218,28,101, 55,0,156,59,123,30,238,253,142,227,224,237,187,55,32,208,19,15,32,73,132,1,248,219,42,187,25,99,224,156,163,211, 233,64,8,129,79,123,31,97,31,217,61,167,63,92,73,13,160,218,181,74,88,215,117,112,206,49,24,12,96,219,54,190, 125,255,138,193,145,221,57,89,169,156,169,46,87,7,169,0,38,147,9,242,249,188,84,140,68,4,34,130,166,105,210,135, 49,6,33,4,250,125,27,0,176,247,229,51,218,63,218,2,2,219,199,78,28,191,80,93,174,122,111,183,20,46,39,199, 205,91,155,31,70,227,241,169,164,176,110,136,223,181,174,49,118,48,230,147,149,181,213,181,231,105,215,152,123,252,2,86, 84,12,239,30,77,244,187,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Cut1x[807] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,28,22,29,49,104,65,100,94,0,0,2,180,73, 68,65,84,56,203,133,147,93,72,147,81,24,199,159,115,222,119,175,175,219,212,125,165,219,108,248,21,104,120,209,85,16, 116,97,148,73,87,69,222,100,34,17,104,105,150,88,168,105,129,144,4,149,165,125,129,136,16,148,24,232,16,244,74,144, 36,186,12,2,181,48,109,51,54,242,99,239,54,117,155,238,117,95,239,118,206,219,77,206,97,90,231,238,252,255,15,63, 254,207,243,156,131,32,229,60,235,125,114,14,0,222,243,60,239,109,186,121,187,116,143,215,207,178,236,165,59,205,173,186, 84,29,167,94,24,134,25,187,213,216,172,141,70,163,203,125,253,175,59,83,61,5,171,184,112,230,116,185,230,197,171,158, 79,7,2,8,33,252,79,135,29,215,213,214,87,16,66,142,237,232,79,123,30,151,153,115,205,166,237,144,136,40,165,39, 14,4,96,140,67,75,75,191,128,79,75,67,177,88,172,116,39,5,203,178,83,133,133,133,224,113,123,40,165,212,241,175, 4,21,54,155,13,86,93,43,168,174,182,190,56,145,72,156,234,121,222,61,80,82,82,162,64,128,193,225,116,0,0,88, 15,4,220,109,189,247,25,99,188,188,184,104,7,62,141,71,146,36,29,215,235,244,215,100,10,176,190,177,70,1,96,162, 173,165,227,225,129,0,0,0,74,105,229,194,143,5,121,109,205,3,141,55,154,84,241,68,28,137,98,16,230,230,230,36, 0,232,218,91,255,23,160,173,165,99,26,99,60,100,95,180,209,96,112,11,107,52,26,16,220,130,44,203,242,187,182,150, 142,233,255,2,254,164,152,154,157,153,198,78,167,3,210,57,30,50,223,14,70,16,66,111,246,171,69,123,133,49,163,177, 151,80,122,61,190,185,169,38,229,101,50,51,249,17,21,24,115,64,32,116,11,33,52,80,233,241,180,239,11,24,51,153, 58,227,126,255,131,163,38,19,36,40,69,222,173,77,217,23,222,30,102,101,84,85,144,157,195,240,28,71,37,89,6,231, 250,58,40,178,178,174,86,186,221,67,201,22,198,205,230,26,201,231,235,42,54,26,233,194,202,202,84,48,18,150,2,65, 17,215,196,105,77,148,35,58,150,193,52,16,18,19,142,213,213,15,71,244,122,18,243,249,6,199,205,230,221,151,58,106, 48,8,243,69,69,100,132,97,238,3,0,204,88,44,33,171,82,153,216,241,71,24,134,124,201,53,7,1,0,134,49,110, 255,150,159,79,70,13,6,97,119,136,177,152,94,146,36,82,69,200,163,9,149,234,165,130,101,121,132,177,61,57,105,142, 155,81,243,233,170,201,140,140,190,203,148,118,131,44,83,32,196,176,11,224,56,65,173,84,50,95,243,242,98,38,157,174, 105,94,16,188,138,204,204,43,201,143,164,213,54,124,119,185,54,14,31,58,212,48,107,177,196,8,165,24,48,14,0,0, 48,0,0,213,90,173,207,229,247,159,244,75,18,27,0,144,57,181,250,236,69,65,72,238,220,42,138,238,234,236,108,143, 55,16,200,241,135,195,26,95,36,226,83,168,84,231,173,162,232,254,13,160,243,58,7,220,52,193,60,0,0,0,0,73, 69,78,68,174,66,96,130, }; const unsigned char Cut2x[2087] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,222,73,68,65,84,88,133,173,151,123,108,20, 199,29,199,191,51,59,183,119,183,119,231,59,227,183,77,252,136,13,152,98,140,2,177,17,52,16,48,143,166,85,162,182, 127,212,17,36,45,85,19,176,42,148,170,34,1,108,55,68,151,64,169,29,67,77,155,166,141,251,84,74,147,54,52,81, 136,212,170,34,96,16,161,64,138,129,6,48,88,54,196,6,191,176,207,216,24,223,237,61,118,119,102,250,135,57,100,30, 118,108,165,63,233,167,93,237,252,230,251,251,236,204,254,102,102,9,38,176,159,239,217,181,221,48,98,47,71,195,166,199, 239,247,135,38,138,189,215,118,215,215,214,155,166,245,99,149,57,181,77,155,54,69,198,139,163,227,53,212,214,214,102,114, 193,55,165,165,166,197,60,94,231,171,83,73,94,83,243,218,92,128,86,164,164,164,198,4,172,23,39,138,29,23,192,166, 210,119,23,150,44,84,87,173,92,109,7,200,15,119,238,218,89,56,153,228,82,74,162,218,157,123,23,47,250,170,125,245, 202,175,217,21,74,183,78,212,247,129,0,53,53,59,22,219,84,219,130,25,5,51,153,148,4,139,22,46,178,59,108,234, 219,147,1,168,219,93,179,222,227,241,228,231,100,231,80,33,36,74,75,75,53,39,83,107,167,4,0,74,231,101,101,78, 87,56,231,144,82,34,55,247,97,234,112,56,230,212,238,250,217,51,19,37,223,185,115,103,10,165,116,87,217,242,149,110, 195,48,33,165,68,122,122,38,149,82,150,76,9,64,0,231,63,111,191,162,72,72,0,128,105,90,88,85,182,210,165,16, 250,134,255,151,254,132,241,196,156,154,250,198,156,175,20,169,140,217,32,165,4,165,20,103,206,54,69,56,231,39,167,4, 80,189,165,250,56,64,234,79,156,56,30,166,148,66,74,9,135,67,67,65,65,129,195,195,93,53,15,234,83,179,107,199, 82,66,201,83,115,139,138,237,156,115,0,128,174,7,209,217,217,165,235,161,232,186,41,1,0,128,30,140,188,214,213,221, 21,10,6,111,129,16,2,206,5,74,30,45,117,82,138,117,117,117,63,45,30,27,219,208,208,96,83,21,251,159,203,150, 173,208,76,211,2,0,168,170,13,141,71,26,117,110,90,235,39,42,225,113,1,252,126,127,216,226,198,134,198,195,135,116, 85,29,29,82,195,48,241,216,226,165,14,197,166,190,45,165,36,241,216,80,104,184,50,53,45,53,217,231,155,6,33,4, 8,33,184,124,185,205,138,25,209,83,91,183,86,239,31,47,199,132,0,0,80,185,249,229,143,12,195,104,106,187,220,106, 17,66,32,37,144,145,145,69,61,110,79,65,93,93,205,58,0,168,171,219,158,7,138,202,165,143,45,119,25,134,1,41, 37,20,133,160,233,108,147,97,68,248,15,38,210,255,66,0,0,136,69,173,231,78,159,105,50,24,99,144,82,34,22,139, 97,69,217,42,55,101,228,23,245,245,126,31,179,57,255,88,90,178,72,53,205,209,175,222,110,183,227,147,127,31,213,169, 68,77,85,85,213,213,47,13,80,85,85,213,46,165,216,115,252,196,177,112,124,42,8,161,152,61,187,72,229,82,251,64, 117,216,75,114,115,242,88,124,232,135,111,13,33,16,8,12,186,221,190,7,126,172,83,6,0,128,208,72,116,123,119,79, 103,48,20,10,2,0,44,203,194,188,185,243,28,138,66,151,151,44,40,117,69,34,17,72,41,161,105,26,14,31,105,212, 45,195,252,94,69,69,133,249,127,3,240,251,253,81,211,178,158,107,60,114,72,215,52,13,82,74,68,34,81,44,91,90, 70,206,157,255,12,66,8,48,198,112,161,249,156,193,5,255,215,150,45,213,71,39,163,59,105,0,0,168,220,252,147,127, 26,166,249,233,149,207,219,44,198,24,46,95,105,69,98,98,34,84,85,197,213,107,29,80,152,130,11,205,23,98,220,208, 55,78,86,115,74,0,0,192,141,200,250,166,211,167,12,187,221,142,238,158,110,4,2,1,60,190,100,25,90,219,90,112, 168,241,128,206,5,175,220,188,217,31,152,138,166,50,149,224,131,7,143,12,63,153,157,241,252,160,20,137,101,43,158,64, 124,149,36,225,48,174,31,59,106,186,15,28,46,255,199,245,235,98,42,154,108,42,193,111,105,120,212,246,209,251,121,131, 121,249,56,123,230,20,172,63,53,32,114,233,34,98,131,55,224,52,98,46,120,124,175,0,216,54,21,77,242,197,33,163, 214,0,216,152,135,92,154,159,254,112,62,203,206,37,29,211,51,209,247,193,94,20,120,83,48,221,147,4,80,224,88,103, 107,88,112,57,107,125,4,221,95,26,224,29,32,17,148,110,100,148,174,229,66,76,39,4,42,101,10,43,202,201,83,92, 78,39,206,244,93,141,12,233,193,15,153,66,190,53,63,241,33,77,181,219,209,167,15,91,157,195,55,110,217,35,176,1, 160,84,81,186,44,203,250,27,19,226,87,229,192,208,164,1,222,1,190,67,40,253,67,138,207,199,178,82,83,157,94,151, 11,18,64,255,208,16,218,187,187,225,72,116,70,7,162,250,97,247,8,255,118,208,67,222,75,119,123,191,158,198,60,118, 183,166,161,121,168,7,171,139,74,64,0,220,28,25,65,71,79,79,164,103,96,192,2,231,207,175,5,246,125,33,192,95, 41,125,137,42,138,191,56,63,223,101,90,22,58,251,251,111,5,117,93,85,20,197,54,127,246,108,22,142,68,112,177,179, 163,95,137,89,89,229,0,127,51,5,110,103,140,126,146,239,77,157,231,130,141,82,135,13,237,157,61,35,66,8,146,148, 144,64,242,178,178,220,148,82,52,181,180,232,22,231,219,215,88,214,93,167,163,187,202,240,93,160,156,82,250,234,130,194, 66,87,103,127,127,248,98,123,123,215,205,96,240,251,138,16,73,17,110,86,95,106,111,71,90,82,18,164,41,18,202,1, 14,0,27,7,16,10,49,177,172,99,40,0,203,70,112,181,171,119,36,22,139,173,225,166,89,120,125,112,176,242,63,205, 205,55,175,245,245,69,23,23,23,187,24,165,219,254,162,40,79,63,16,96,31,224,37,148,254,174,120,198,12,173,163,183, 55,60,52,50,114,202,43,196,140,239,2,251,203,129,136,42,240,247,72,44,22,185,189,41,221,85,61,63,26,194,136,45, 34,185,203,229,130,97,154,140,0,103,214,0,189,207,2,111,42,66,228,245,6,2,109,87,186,186,98,37,115,230,184,24, 240,219,125,192,180,251,0,44,74,43,146,19,19,25,0,220,184,121,51,228,229,252,137,111,0,177,120,187,0,150,248,220, 110,51,168,235,96,140,117,220,59,117,76,97,29,46,197,14,143,166,89,2,88,22,127,94,14,220,82,132,88,218,27,8, 68,9,128,172,212,84,155,69,233,134,251,0,20,74,215,77,79,73,209,186,7,6,194,92,136,29,99,147,55,0,154,162, 40,175,207,204,201,73,232,236,235,139,10,206,247,222,11,32,56,223,219,213,215,23,205,205,200,72,80,40,221,221,0,104, 99,33,4,240,250,181,190,190,104,110,86,150,211,198,216,157,35,218,29,0,206,121,158,219,229,130,30,14,27,0,206,142, 77,238,101,236,227,140,148,20,175,170,170,232,14,4,76,67,136,223,220,11,160,8,241,235,158,64,192,84,85,21,73,62, 95,82,130,162,28,28,11,33,132,104,10,234,122,212,235,241,192,180,172,220,251,0,64,136,5,0,110,167,83,33,64,241, 11,64,194,239,129,181,30,69,105,207,72,78,126,100,78,65,129,243,228,185,115,250,16,176,105,29,32,1,36,1,72,142, 123,57,64,110,16,242,226,103,109,109,250,204,236,108,71,178,207,247,136,155,210,142,6,96,237,51,64,2,161,116,129,91, 211,108,148,82,16,224,206,114,125,167,12,223,99,236,195,153,57,57,223,156,230,245,146,83,205,205,186,197,185,146,224,118, 155,133,185,185,30,135,170,226,228,249,243,225,235,156,55,188,96,89,111,221,6,167,184,187,140,37,0,177,135,177,13,89, 148,86,204,159,53,75,139,154,38,218,123,122,130,65,93,87,25,99,98,197,194,133,206,225,145,17,121,186,165,229,192,211, 134,241,36,0,30,23,96,181,192,140,108,69,249,180,48,55,215,253,80,122,58,181,49,134,145,80,8,29,189,189,209,238, 64,128,183,72,233,223,46,196,199,0,108,24,221,67,226,174,96,180,36,173,184,87,83,186,178,8,216,150,153,154,170,228, 101,102,58,146,124,62,0,64,79,127,191,248,111,107,107,176,205,178,30,127,5,104,5,96,142,125,3,90,15,20,167,49, 182,27,163,127,50,148,80,218,55,196,249,254,247,133,216,123,4,8,222,78,22,119,50,198,229,24,231,0,248,18,192,83, 78,233,179,201,140,61,5,206,51,8,32,4,165,103,187,76,243,165,173,192,185,219,176,114,188,189,32,46,76,239,73,74, 31,224,192,232,156,202,49,87,126,251,62,62,50,98,76,219,93,246,63,75,63,123,197,52,72,87,169,0,0,0,0,73, 69,78,68,174,66,96,130, }; const unsigned char Delete1x[680] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,141,0,142,0,139,33,244,163,126,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,214,6,19,15,29,9,72,179,203,198,0,0,0,15,116, 69,88,116,67,111,109,109,101,110,116,0,105,100,32,108,111,103,111,134,198,119,185,0,0,2,26,73,68,65,84,56,203, 165,144,191,79,19,113,24,198,159,251,165,119,45,180,165,215,214,90,42,20,162,12,180,14,110,110,80,40,131,236,154,56, 105,106,127,128,17,77,77,220,26,233,96,82,7,147,66,212,52,197,70,5,55,39,117,49,49,182,22,249,3,100,48,186, 181,139,169,24,19,56,174,114,87,238,122,119,14,114,23,67,137,81,124,167,247,251,230,121,62,239,251,124,9,236,213,226, 253,194,59,89,150,198,241,23,197,113,182,218,141,185,76,20,0,104,115,40,203,210,248,108,250,26,20,69,177,132,134,97, 116,153,13,195,192,147,229,178,181,136,14,77,231,231,1,228,0,29,146,36,65,16,132,46,163,249,102,24,6,36,73,2, 0,66,211,121,3,64,142,6,144,203,102,46,160,190,186,4,81,20,209,108,54,15,52,3,0,69,81,32,8,2,162,40, 34,155,73,225,78,225,121,206,138,240,177,209,130,32,8,104,52,26,127,140,96,106,135,199,246,34,152,195,186,28,68,252, 110,165,75,76,16,7,33,130,86,103,1,34,103,99,56,76,89,128,216,25,254,255,0,159,190,136,255,100,28,13,58,126, 69,12,157,203,215,64,96,236,80,235,13,172,90,95,52,119,253,170,113,249,82,92,125,84,46,41,147,147,83,204,218,218, 123,38,26,157,208,170,213,10,25,139,77,105,181,90,149,154,136,198,244,183,149,55,228,226,194,3,170,43,2,203,178,170, 218,81,183,121,175,71,107,181,126,16,67,161,225,94,93,55,228,193,193,33,90,211,116,201,225,112,248,105,134,217,228,56, 155,237,247,35,72,179,225,121,126,135,36,201,215,54,155,13,35,167,70,32,237,238,40,3,3,39,116,151,203,41,187,251, 220,109,0,136,132,195,71,189,94,175,218,5,40,44,220,43,1,208,34,225,211,23,125,30,223,177,141,111,95,125,0,100, 158,247,144,36,73,212,123,29,61,157,254,254,32,88,150,211,237,118,187,84,44,62,76,239,191,32,113,51,115,139,95,94, 121,172,3,248,188,181,181,41,240,110,222,239,114,58,233,93,165,205,172,175,127,56,9,0,43,207,158,58,211,169,217,182, 218,81,206,239,7,148,75,75,69,248,253,199,143,36,19,233,209,100,34,221,167,40,10,94,190,122,209,67,81,116,224,74, 60,73,164,146,51,68,32,16,152,185,61,159,253,206,178,220,134,9,248,9,228,204,195,8,165,247,44,101,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Delete2x[2049] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,7,147,73,68,65,84,88,133, 197,87,91,136,93,87,25,254,254,117,219,151,179,207,57,115,102,78,51,151,36,77,38,147,180,182,209,166,22,196,22,131, 32,241,82,8,45,120,121,42,125,168,8,130,20,251,32,82,43,8,125,13,45,212,27,62,136,130,214,130,104,132,42,213, 228,65,176,182,182,181,72,105,83,219,166,65,51,201,76,154,100,46,205,153,57,115,230,156,125,246,117,173,223,135,153,9, 51,211,153,196,80,193,239,101,237,189,214,191,255,255,251,191,197,218,251,219,196,204,248,127,66,109,183,240,212,247,159,120, 179,40,203,67,255,139,34,82,202,153,111,127,235,59,59,111,136,0,136,198,31,254,198,35,80,74,225,70,85,218,28,255, 227,159,252,96,108,187,216,15,16,24,63,122,204,3,48,240,240,17,34,102,70,187,221,6,51,95,77,186,21,153,205,115, 204,12,34,2,17,161,209,104,172,229,221,3,96,102,234,196,99,197,182,4,38,238,123,226,123,32,122,92,10,81,20,214, 249,204,12,107,45,102,103,103,145,101,217,182,4,182,34,227,121,30,70,70,70,174,222,43,165,79,59,103,139,137,251,158, 120,244,220,31,31,253,217,90,60,173,5,140,31,61,54,38,132,56,119,215,61,135,125,109,12,246,247,79,226,161,7,31, 68,167,211,185,170,192,181,58,221,78,137,102,179,137,95,60,253,115,76,70,95,68,119,185,131,211,167,94,239,179,115,99, 83,39,30,235,108,86,224,193,225,209,81,23,85,124,100,133,67,28,199,104,181,90,232,116,58,104,181,90,87,21,216,220, 169,49,6,205,102,243,154,91,19,199,125,32,2,170,181,58,26,67,67,104,183,90,95,7,240,228,6,5,246,223,255,228, 212,221,247,124,114,175,14,35,76,191,243,10,246,203,127,194,51,6,236,220,53,37,191,30,164,148,176,214,226,212,226,46, 236,189,235,94,116,151,59,120,247,212,27,45,231,236,232,212,137,199,74,5,0,227,71,143,29,242,125,175,185,115,116,8, 151,90,9,138,172,143,23,38,151,0,16,132,16,0,8,36,4,64,4,2,1,36,86,100,39,2,109,121,189,121,78,34, 210,29,200,60,193,96,99,0,65,37,240,227,110,239,43,0,126,163,0,64,8,241,181,219,110,157,240,173,99,48,128,155, 239,56,130,155,239,56,242,161,58,95,131,233,119,112,251,139,79,99,223,171,39,129,151,126,137,115,119,127,25,253,143,126, 33,58,245,238,228,227,235,8,200,195,19,123,135,85,55,41,110,248,204,95,15,94,214,195,39,162,24,19,143,124,19,112, 14,213,55,222,193,66,179,134,83,224,189,227,71,143,141,40,0,112,236,170,134,44,22,23,90,232,37,197,245,114,226,70, 40,46,65,227,201,143,60,132,91,95,127,1,133,50,56,119,240,171,184,89,104,68,149,32,235,44,199,187,20,0,176,115, 203,231,47,204,240,193,125,195,68,20,108,95,152,1,6,131,29,195,241,10,21,231,86,231,152,193,12,184,213,145,153,225, 86,30,0,3,112,163,247,66,0,216,207,12,231,250,200,179,92,2,40,137,153,49,126,244,216,157,128,123,14,16,187,111, 160,185,15,7,230,223,79,157,252,238,151,174,30,195,7,30,184,191,121,231,199,15,63,117,232,208,199,14,189,253,206,219, 103,210,52,165,35,159,249,236,231,147,52,77,1,160,223,239,167,245,90,61,90,92,92,232,140,142,142,13,79,95,152,186, 228,121,190,105,54,155,131,90,105,53,55,63,183,80,22,133,29,104,52,170,141,129,70,125,110,126,246,74,28,199,105,24, 132,222,75,175,252,237,181,3,251,15,68,251,246,237,219,161,148,161,31,253,240,169,135,143,31,127,246,101,0,16,107,132, 202,210,79,123,113,183,0,96,108,89,42,2,68,94,20,165,179,206,173,190,241,200,58,203,245,122,61,210,90,235,34,47, 10,33,132,80,82,74,107,173,5,179,85,74,177,86,90,50,179,115,206,89,65,2,74,41,169,164,162,40,170,120,129,31, 120,214,22,5,192,201,90,93,177,78,148,36,238,197,185,49,134,140,167,115,109,116,46,133,132,16,196,66,8,39,132,112, 96,182,188,82,72,10,41,172,16,194,50,96,165,20,144,74,58,18,100,25,92,10,33,72,41,237,148,214,37,17,21,213, 90,212,175,215,235,101,88,9,93,89,150,61,64,127,144,192,241,227,199,109,63,137,99,99,12,41,165,115,165,84,238,7, 62,60,207,99,99,140,243,60,99,149,82,37,128,146,136,40,8,2,167,148,42,141,214,214,247,3,225,121,158,213,74,91, 165,84,225,121,30,249,190,207,70,107,43,149,42,140,49,153,231,121,206,24,131,44,207,98,231,92,186,149,2,40,138,162, 163,148,38,207,168,92,43,149,215,170,53,51,58,58,54,168,181,46,194,32,228,48,12,65,130,250,190,239,187,122,189,174, 194,32,176,82,202,172,86,171,25,99,76,25,85,35,210,74,229,97,24,98,176,49,232,51,115,95,43,149,5,190,159,6, 190,207,70,27,244,251,253,132,121,235,45,64,146,38,61,165,36,107,19,148,32,81,54,26,141,112,105,169,61,93,175,213, 84,165,82,193,142,29,195,131,23,166,167,206,248,190,143,198,64,67,7,65,224,140,49,5,17,186,97,16,186,90,173,174, 180,214,133,82,42,27,26,26,138,74,91,180,61,207,179,198,243,172,210,218,42,173,168,31,199,125,231,220,214,4,132,16, 169,115,46,11,2,143,118,141,237,26,142,162,72,189,123,230,244,155,245,122,221,107,12,14,86,181,214,229,114,175,123,177, 40,242,247,27,141,193,40,12,67,246,124,159,243,60,111,251,129,239,42,97,69,105,99,10,33,68,90,173,86,253,52,77, 219,59,119,238,28,17,66,66,107,93,106,165,209,94,234,100,89,150,109,77,128,8,9,24,153,16,74,221,113,232,206,131, 66,136,114,185,219,153,51,198,80,84,169,152,43,87,222,63,179,123,247,206,229,153,153,203,167,131,32,168,41,165,108,24, 132,94,146,38,173,60,203,59,149,74,165,34,165,44,181,86,112,206,37,75,75,139,51,97,24,86,234,181,129,166,148,210, 42,165,168,187,220,73,78,158,60,153,109,73,128,153,251,165,45,243,70,163,78,127,127,245,229,151,230,230,102,47,75,33, 185,23,199,201,197,75,23,167,206,78,254,123,202,24,227,38,207,159,125,203,57,167,242,60,151,73,210,239,207,207,207,189, 127,225,226,244,244,226,226,194,188,179,86,245,147,36,95,238,46,247,164,148,197,159,78,60,247,107,99,84,75,74,193,0, 84,183,219,139,215,215,220,96,201,74,203,113,81,228,185,148,198,16,97,230,175,47,254,229,183,59,134,111,42,158,127,254, 207,199,147,36,243,71,199,134,151,140,49,110,104,104,48,121,246,15,191,251,169,146,202,19,82,36,158,49,54,8,3,251, 218,235,255,152,75,146,212,16,96,133,20,28,85,42,54,170,70,179,67,67,141,250,170,196,106,177,221,238,108,79,160,44, 227,60,47,114,227,105,61,50,50,124,117,159,170,213,106,1,160,183,118,239,251,190,189,229,150,3,203,0,224,156,35,33, 4,3,192,192,192,64,14,160,143,77,144,74,41,96,197,183,165,105,210,91,191,182,113,11,192,73,158,21,169,20,194,108, 78,178,29,214,138,95,51,134,72,9,33,148,45,203,130,8,201,250,181,141,182,156,144,196,105,156,14,202,129,32,203,50, 157,231,249,246,255,13,55,128,74,165,82,169,2,170,40,139,156,216,109,79,32,77,211,162,189,176,96,119,142,140,53,157, 227,189,204,164,9,0,136,32,8,0,129,152,9,180,226,205,64,96,128,4,173,140,107,131,88,21,155,137,136,192,76,148, 166,121,152,229,69,213,113,143,91,139,109,67,68,85,102,238,110,32,64,68,242,192,129,3,252,214,174,189,249,225,79,125, 122,212,243,189,168,40,138,85,191,189,22,197,155,205,200,202,199,31,91,152,148,117,207,16,9,242,61,63,188,240,222,133, 165,249,217,121,9,96,152,136,20,51,183,215,43,96,206,158,61,219,159,216,63,62,119,254,252,228,149,219,110,63,56,70, 0,173,210,91,99,185,210,248,134,114,27,67,54,94,174,232,103,93,233,102,46,207,118,158,249,213,51,151,207,157,155,110, 1,8,0,120,192,58,91,78,68,2,64,115,226,214,137,131,123,118,239,249,156,20,116,19,136,62,156,39,95,135,210,217, 238,197,247,46,158,158,252,215,228,219,0,218,0,46,49,115,70,235,77,40,173,252,226,248,0,170,88,57,33,215,55,136, 255,61,130,213,124,61,0,9,51,59,0,248,15,136,226,182,218,114,146,70,188,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char Find1x[617] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,240,0,240,0,239,52,6,103,27,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,11,5,16,15,5,37,253,173,47,0,0,1,246,73, 68,65,84,56,203,157,146,77,107,19,81,24,133,159,59,201,36,77,154,102,134,74,82,10,10,181,93,104,26,69,20,193, 133,184,20,10,85,119,226,38,191,192,111,169,244,31,136,182,36,65,68,20,116,89,119,85,16,197,77,168,59,65,236,162, 84,40,164,137,86,171,150,80,53,141,205,71,39,77,50,51,215,69,72,73,66,82,170,103,119,15,239,61,239,225,188,71, 60,121,250,120,49,247,39,119,140,61,64,85,213,231,19,183,38,47,182,144,211,209,187,150,220,35,238,77,223,145,237,162, 78,41,235,92,62,191,185,235,118,77,211,59,242,78,33,196,206,35,153,76,118,28,10,133,66,93,133,119,28,180,15,102, 50,25,102,95,204,2,144,152,75,0,208,180,107,119,7,223,190,175,146,74,167,57,122,106,140,109,197,139,105,43,184,100, 133,212,252,107,38,110,223,140,196,162,247,159,53,254,40,237,14,52,93,35,149,78,115,232,228,24,159,11,94,6,7,2, 140,28,8,82,18,62,180,209,113,252,154,62,115,237,198,149,227,93,29,36,230,18,12,135,79,179,82,112,115,233,204,16, 190,30,21,211,182,81,29,10,239,150,37,193,35,227,54,75,111,22,0,1,160,116,10,75,122,3,12,13,232,88,182,100, 219,52,169,212,44,202,85,139,126,159,155,95,101,181,37,9,69,74,137,148,118,75,48,110,183,11,132,160,92,181,168,214, 36,155,91,53,220,170,131,253,253,30,164,16,45,93,112,2,182,105,154,45,78,108,99,131,53,163,138,223,163,162,247,185, 176,45,137,223,227,228,211,70,129,125,61,150,157,107,114,174,212,43,234,66,211,116,52,77,231,194,185,243,164,23,222,18, 236,19,124,249,153,39,155,43,145,55,42,124,92,89,167,84,174,144,91,122,229,44,21,139,63,26,2,34,26,159,154,177, 44,43,210,124,13,195,48,112,56,84,78,156,141,176,188,86,100,203,84,24,236,149,172,47,190,100,248,224,8,0,31,230, 223,167,30,62,120,116,88,116,107,216,213,235,151,167,2,129,224,100,51,231,235,245,17,30,13,243,59,155,173,247,101,245, 43,130,127,68,44,30,149,13,145,255,18,0,148,88,60,106,1,148,13,131,191,6,140,246,211,127,51,231,46,0,0,0, 0,73,69,78,68,174,66,96,130, }; const unsigned char Find2x[1636] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,27,73,68,65,84,88,133,229,151,109,104,91, 215,25,199,127,231,94,93,189,217,150,228,55,217,142,95,106,167,177,164,188,180,201,210,96,199,91,154,82,210,146,213,77, 250,161,73,26,146,177,102,52,140,81,216,151,177,15,27,12,214,48,6,131,49,24,131,101,152,80,152,201,150,177,145,224, 116,30,219,242,201,29,93,94,214,120,13,109,236,206,155,95,102,47,56,78,228,151,72,178,101,201,186,247,220,123,247,33, 150,144,21,41,118,194,190,237,129,135,115,207,209,229,60,191,251,63,207,115,206,17,252,191,155,40,28,56,123,246,236,155, 154,166,245,10,33,42,20,69,65,81,20,44,203,194,178,44,164,148,152,166,89,180,93,111,76,8,177,164,235,250,215,122, 123,123,251,30,75,212,211,211,19,51,77,211,182,44,203,182,44,203,214,117,61,247,108,154,230,26,151,82,230,220,48,140, 53,174,235,122,206,51,153,140,157,201,100,236,211,167,79,199,10,227,57,10,7,164,148,1,33,4,147,147,147,8,33,48, 77,147,178,178,50,116,93,71,136,135,130,21,182,57,57,197,35,130,2,96,219,54,193,96,16,195,48,2,235,2,216,182, 157,155,44,235,249,253,167,1,40,53,94,20,192,178,172,162,1,133,16,140,143,143,99,154,102,209,9,139,141,169,170,74, 40,20,42,25,124,93,128,252,224,66,8,218,219,219,139,42,81,10,160,208,178,234,174,11,80,108,25,132,16,140,141,141, 97,154,102,209,128,165,20,8,135,195,79,6,144,31,160,48,15,66,161,80,201,60,248,159,41,80,12,32,219,127,26,5, 34,145,200,211,3,220,186,117,139,93,187,118,229,250,225,112,248,177,95,190,158,10,79,4,0,208,209,209,145,171,127,33, 4,163,163,163,185,223,147,201,37,162,115,247,89,90,90,68,74,137,162,168,148,151,149,83,89,89,69,77,117,45,138,162, 224,112,56,216,186,117,235,147,3,216,182,141,16,226,145,146,12,135,195,164,82,203,92,255,219,53,92,46,23,95,62,248, 26,181,181,65,156,154,19,105,74,226,137,24,195,159,15,49,60,52,196,254,125,47,209,220,220,178,102,238,236,124,27,86, 160,208,110,15,221,102,120,248,51,14,29,126,131,150,230,86,250,255,58,66,223,251,159,50,49,179,72,125,149,151,131,123, 26,57,249,106,39,207,239,216,201,111,127,247,27,154,26,91,216,255,226,75,143,85,64,41,5,80,88,5,66,8,166,239, 222,161,187,251,117,124,254,90,142,188,247,39,254,117,223,224,155,111,117,240,203,239,117,243,157,183,191,68,198,118,114,236, 204,21,166,162,41,78,158,248,10,147,83,19,44,167,150,115,185,81,76,129,13,1,0,204,204,220,197,227,113,211,220,220, 202,59,63,25,224,196,129,48,95,125,37,196,230,186,114,124,30,7,65,159,198,129,221,141,156,234,222,198,119,223,255,152, 197,180,197,190,125,47,242,201,39,131,8,33,176,109,123,227,0,197,164,26,155,24,229,133,221,123,248,224,163,17,118,182, 111,162,115,123,19,170,195,129,170,170,104,14,7,78,77,195,237,114,81,83,233,231,192,222,16,63,189,52,196,182,173,219, 153,152,28,71,74,185,241,37,200,190,156,181,172,10,179,209,40,222,50,47,253,55,102,216,25,10,34,77,11,67,90,232, 210,68,90,22,96,163,8,155,21,67,210,84,91,193,237,201,7,44,167,51,84,6,2,204,205,207,149,92,130,117,55,162, 172,101,244,12,186,158,97,122,126,9,83,207,176,148,76,161,107,10,14,69,0,15,229,253,207,253,24,11,11,73,12,75, 224,209,4,119,238,45,224,114,123,48,116,189,36,64,201,28,0,184,121,243,38,138,242,240,21,77,115,98,72,131,96,192, 203,162,14,170,230,196,161,57,113,186,93,184,221,30,76,225,32,80,89,73,219,51,141,52,109,170,39,35,193,182,12,22, 19,9,156,78,231,35,129,75,42,32,165,204,173,85,87,87,23,250,42,125,125,93,61,233,212,10,47,63,23,224,227,219, 119,80,101,154,114,183,138,3,19,97,27,168,194,70,90,144,49,5,211,11,6,213,229,26,213,126,23,115,115,115,212,213, 213,151,4,120,108,21,228,111,68,145,200,54,134,134,135,56,241,234,14,22,226,43,36,50,42,21,254,42,130,245,13,180, 182,182,17,14,133,216,178,165,157,170,96,3,215,71,30,240,173,55,67,76,77,77,145,72,36,152,157,141,110,92,129,82, 27,209,166,134,77,220,184,113,141,249,185,40,231,190,189,159,119,126,252,33,35,19,51,60,223,234,163,186,66,197,48,44, 70,239,165,184,249,207,7,188,247,246,110,34,109,53,140,141,37,232,216,211,73,207,185,30,14,31,122,99,99,10,228,47, 65,161,117,191,118,136,15,255,50,64,34,54,203,229,31,30,230,208,222,22,254,62,190,196,207,250,39,249,253,224,2,109, 13,213,92,250,193,235,108,123,38,192,196,196,24,137,216,18,233,116,134,23,190,176,135,254,254,203,104,78,7,103,206,156, 89,19,243,145,227,235,248,241,227,246,249,243,231,137,197,98,8,33,144,82,226,245,122,49,77,147,145,145,17,86,86,210, 140,255,123,140,170,170,42,186,246,118,17,172,173,67,115,58,49,165,73,44,254,128,79,63,187,197,192,192,0,225,80,132, 166,198,22,164,148,68,163,81,52,77,99,124,98,140,207,255,49,252,7,44,229,228,197,139,23,147,69,1,142,30,61,106, 95,184,112,161,40,64,182,52,21,69,97,118,54,202,232,248,40,51,119,167,73,46,39,209,28,26,126,127,128,112,56,66, 168,61,76,207,185,95,80,81,81,65,251,150,48,134,110,48,63,63,143,211,233,100,118,62,202,181,107,87,135,76,205,62, 216,247,235,190,123,79,116,24,101,237,225,53,187,142,250,250,134,220,94,145,61,65,179,246,141,175,191,203,249,95,245,114, 253,198,85,246,118,124,145,154,154,26,226,241,56,145,80,132,96,93,237,115,151,251,46,255,28,56,82,152,3,62,69,81, 22,109,219,198,231,243,225,243,249,240,251,253,120,60,30,202,202,202,240,122,189,184,92,174,220,191,37,93,215,73,165,82, 44,47,47,147,76,38,73,36,18,36,18,9,226,241,56,169,84,138,163,71,222,98,115,219,179,252,249,202,31,177,44,147, 166,230,70,90,54,55,210,217,217,9,240,10,172,173,130,10,160,118,122,122,250,71,167,78,157,250,190,16,194,83,248,229, 217,11,107,246,96,41,246,156,175,70,214,85,135,194,165,190,75,28,59,118,140,86,119,11,131,131,131,88,182,125,21,80, 243,115,192,5,4,129,106,32,176,218,87,11,24,212,60,87,86,93,205,107,69,158,219,128,181,234,233,182,103,219,90,119, 108,223,126,194,229,118,70,44,203,252,40,37,51,239,94,249,224,202,84,177,75,156,11,112,175,182,165,46,121,162,0,32, 31,104,141,104,171,174,3,25,32,5,164,87,199,0,248,47,32,222,70,11,170,8,255,164,0,0,0,0,73,69,78,68, 174,66,96,130, }; const unsigned char Paste1x[561] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213, 10,14,0,28,21,175,226,241,24,0,0,1,208,73,68,65,84,56,203,149,147,177,107,83,81,20,198,127,247,189,52,130, 36,49,141,212,148,12,133,34,6,92,92,180,106,98,4,209,18,112,118,208,33,56,20,69,109,29,196,197,65,151,130,56, 8,142,250,15,52,131,187,155,168,75,213,46,186,56,41,145,82,168,209,72,66,94,111,108,208,70,239,57,14,161,49,47, 109,32,126,219,253,206,61,63,206,249,224,24,6,84,42,149,140,239,123,207,157,147,217,126,223,247,189,23,206,73,177,92, 46,107,191,111,0,110,206,154,43,6,30,42,140,43,30,118,242,18,185,220,17,60,207,0,32,162,172,172,124,96,95,237, 41,6,1,104,170,234,173,199,47,89,50,243,103,137,248,158,9,46,156,57,24,251,210,201,240,46,200,210,180,29,166,167, 167,48,102,27,32,172,173,173,147,76,68,57,154,252,204,164,191,206,179,215,171,86,84,83,17,32,230,121,102,44,26,241, 121,95,207,178,120,255,17,65,16,80,169,84,66,171,205,205,29,34,149,74,113,239,238,109,46,102,190,33,170,49,32,26, 233,255,212,222,130,68,34,129,170,48,51,115,108,48,30,226,241,56,91,127,192,169,233,121,61,128,106,40,27,150,223,188, 13,189,11,249,28,187,41,194,16,157,62,149,231,31,92,16,113,195,1,186,75,97,123,2,85,69,69,200,157,60,254,127, 19,20,242,57,68,4,17,65,85,176,214,50,49,145,30,13,208,223,40,210,109,110,253,104,141,62,129,136,235,65,170,95, 171,52,26,245,29,33,135,1,3,53,231,186,128,86,203,210,168,215,41,22,207,15,219,20,111,216,4,214,110,80,251,94, 67,68,122,254,245,249,171,92,158,90,30,190,194,222,49,165,25,52,73,167,51,164,211,25,178,217,195,88,187,129,170,112, 99,225,90,175,217,55,26,2,108,138,232,239,246,47,183,231,68,242,35,15,22,239,240,211,237,140,166,176,255,19,171,237, 3,0,36,181,138,49,102,83,85,59,6,96,225,92,247,26,49,140,51,130,84,187,215,248,228,21,75,127,1,79,230,225, 152,120,105,196,218,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Paste2x[1027] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,186,73,68,65,84,88,133,173,151,221,139,27, 85,24,135,159,249,202,199,166,179,217,15,104,137,120,163,173,36,87,5,175,74,23,10,11,46,94,8,171,66,175,132,69, 2,254,1,186,98,45,248,7,8,186,32,10,165,34,40,20,217,11,189,17,69,172,80,86,65,42,182,122,163,20,75,22, 170,166,149,165,136,44,217,166,155,143,205,36,115,94,47,178,51,153,153,76,146,73,221,23,14,156,153,57,231,252,158,243, 254,206,156,57,163,49,101,172,173,173,221,1,78,141,120,252,199,230,230,230,83,211,140,103,78,11,0,156,58,119,238,105, 116,93,11,221,84,74,184,126,253,215,81,96,35,67,155,220,4,202,229,151,223,237,245,212,235,128,1,112,250,244,19,52, 155,141,80,155,92,238,24,183,110,85,189,75,215,52,245,247,174,92,249,244,205,196,0,23,95,56,190,209,85,242,154,136, 54,148,149,221,249,103,89,89,57,139,97,12,30,237,239,215,67,109,108,59,239,215,93,183,199,214,214,13,22,107,215,208, 34,83,212,144,158,161,105,239,111,124,253,239,5,8,88,208,85,172,159,95,90,48,162,29,0,46,255,14,133,194,227,212, 235,123,104,135,13,50,153,76,127,192,72,7,77,211,152,157,157,67,228,6,171,103,242,100,83,122,232,121,183,39,230,87, 63,63,88,7,194,0,34,248,226,191,89,231,121,232,230,2,221,42,228,243,243,136,8,32,136,0,136,215,111,232,222,204, 76,191,239,143,218,75,164,245,52,0,89,26,44,254,243,57,79,30,183,16,233,91,25,2,8,198,67,55,199,197,11,111, 249,215,229,114,153,106,245,14,166,105,5,68,61,240,192,197,33,64,173,86,195,48,12,214,95,125,3,219,182,1,120,103, 227,109,84,176,233,56,0,47,234,245,7,0,172,172,60,195,213,171,91,40,165,198,53,247,67,215,117,150,150,206,210,104, 236,163,148,75,62,63,215,199,139,233,62,4,160,100,24,115,117,117,149,229,229,101,154,205,86,34,0,0,211,52,252,117, 50,110,236,97,0,5,3,135,6,97,219,182,159,206,164,33,34,33,139,18,89,16,3,57,117,4,69,195,245,4,0,113, 148,219,219,219,143,36,92,42,149,66,162,137,50,16,231,83,169,84,74,44,62,106,246,137,1,166,181,96,32,12,227,246, 134,56,160,88,128,164,22,196,205,52,40,88,40,60,198,236,172,253,40,22,12,55,138,90,16,77,247,168,217,71,51,240, 191,45,24,231,115,56,237,209,250,232,177,19,45,194,74,165,18,18,25,22,12,222,131,98,177,24,130,240,118,208,169,45, 240,102,215,127,157,38,47,182,184,217,139,200,0,32,134,96,162,5,147,133,227,33,66,59,224,33,64,50,11,2,31,12, 111,144,168,5,209,129,108,219,166,80,40,68,96,250,103,3,195,24,236,235,83,111,68,158,96,177,88,98,242,236,195,179, 54,12,195,47,222,161,101,170,183,32,122,248,72,42,172,235,186,47,108,154,38,189,94,143,234,189,42,130,196,30,64,71, 46,66,239,75,54,206,231,104,186,77,211,228,163,79,62,12,141,151,178,82,56,93,103,232,232,54,17,64,41,53,102,97, 13,251,28,76,247,243,207,189,232,11,58,78,135,239,127,248,14,167,211,73,6,32,62,128,27,43,56,202,103,175,136,136, 47,94,219,171,113,243,151,159,104,53,91,164,82,86,210,12,244,5,92,87,141,20,142,250,236,213,29,199,33,157,78,163, 148,226,118,229,54,127,221,253,19,231,160,131,157,59,70,167,219,153,110,13,40,165,200,102,103,134,78,53,154,166,161,235, 122,168,120,175,218,189,191,239,210,233,116,248,246,218,55,180,219,109,84,215,101,126,126,142,133,133,69,118,238,239,36,203, 128,8,100,164,193,165,203,31,196,118,24,23,66,255,79,199,237,117,73,89,22,88,22,173,131,54,173,251,59,88,110,3, 119,12,128,142,134,234,246,68,63,121,194,226,164,124,17,252,136,29,77,232,64,41,67,219,17,208,80,192,9,96,215,3, 72,31,116,212,199,95,222,220,123,5,180,152,35,233,81,134,184,123,77,245,25,48,3,24,193,117,145,5,22,129,60,144, 58,44,71,25,14,253,60,28,0,187,64,13,232,254,7,111,237,85,69,232,242,20,202,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Redo1x[591] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,214,7,26,10,39,21,63,184,237,33,0,0,1,220,73, 68,65,84,56,203,157,147,77,107,19,81,24,133,159,59,95,77,140,164,66,76,99,131,31,109,54,213,118,211,210,42,126, 84,99,13,66,169,56,110,68,43,130,184,26,112,173,59,193,191,224,126,86,221,117,41,68,10,133,138,197,82,186,106,164, 168,27,193,77,117,33,41,98,76,38,77,154,201,100,198,205,24,39,157,65,130,103,249,94,158,195,185,231,190,23,250,144, 110,106,158,110,106,211,81,103,18,253,107,91,55,181,194,127,27,60,126,96,0,188,209,77,109,46,56,23,17,113,7,128, 60,176,8,76,1,147,1,3,150,150,77,128,27,69,195,94,15,25,232,166,118,1,120,62,39,180,84,182,112,117,88,77, 141,230,16,2,85,142,97,217,63,41,125,91,225,202,232,189,30,19,17,128,23,128,23,143,242,249,243,242,80,78,170,217, 101,188,218,167,158,116,31,155,53,128,174,201,185,61,123,86,248,240,4,240,242,225,181,235,55,99,153,51,88,149,117,44, 79,35,238,218,0,12,58,13,54,219,206,223,226,132,196,165,145,187,44,45,155,40,254,236,233,157,179,227,147,177,116,150, 250,175,119,36,90,13,18,52,24,110,85,120,69,2,71,234,237,58,61,120,178,123,13,5,96,64,213,102,143,143,77,167, 227,214,123,178,251,85,118,164,4,154,34,168,29,137,51,238,67,23,21,48,235,22,153,99,167,217,92,253,208,237,64,1, 232,184,110,70,200,130,84,195,98,171,84,247,214,90,149,208,235,76,92,62,17,130,187,123,224,116,156,228,209,198,87,182, 119,118,89,107,181,45,224,25,48,85,52,108,81,52,108,1,240,54,57,20,130,129,110,7,236,55,171,238,74,93,72,192, 253,162,97,175,30,78,224,195,51,69,195,46,69,110,162,170,200,7,128,23,5,251,10,193,193,4,27,205,189,178,90,144, 189,24,166,54,127,216,228,207,53,162,36,3,140,221,150,221,47,7,237,250,173,153,220,143,212,110,249,148,208,213,173,207, 175,59,118,63,127,36,184,137,35,192,2,80,5,54,158,36,221,239,2,188,249,69,167,243,47,131,223,215,75,186,5,94, 207,53,222,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Redo2x[1502] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,5,112,73,68,65,84,88,133, 197,150,91,108,20,85,24,199,255,223,153,217,157,221,182,212,222,236,133,82,139,5,41,22,161,222,184,71,66,184,84,12, 77,86,99,136,70,209,23,89,68,158,124,145,71,163,81,76,76,212,248,164,137,75,98,192,132,168,36,132,53,65,84,66, 64,20,42,210,2,133,130,148,90,74,233,133,222,119,233,118,47,115,59,159,15,236,110,182,235,110,161,144,192,217,124,57, 231,204,156,57,191,223,249,230,204,206,16,51,227,65,22,113,175,19,120,124,218,151,30,159,118,215,243,220,179,0,128,237, 66,193,175,30,159,230,126,80,2,180,112,246,138,85,66,193,41,143,79,43,121,16,2,88,60,127,141,115,89,221,250,58, 18,104,245,248,180,57,247,93,64,144,130,218,170,122,101,237,211,47,150,147,16,205,30,159,182,248,190,9,16,8,2,42, 70,205,110,204,44,173,22,27,151,191,82,160,8,245,168,199,167,53,222,31,1,34,8,18,32,8,4,140,30,60,148,95, 8,207,170,55,114,53,167,235,7,207,46,109,219,109,175,159,206,255,128,199,167,229,0,104,32,129,87,137,232,89,102,46, 21,172,206,216,214,248,17,250,245,11,176,217,132,205,6,114,149,98,144,165,226,231,166,239,195,19,177,241,175,14,188,165, 239,184,103,1,143,79,91,77,2,251,102,22,87,107,181,213,79,230,21,207,40,163,60,173,16,57,206,124,8,82,209,31, 189,0,139,77,72,54,97,177,9,151,200,131,138,28,28,254,123,127,248,102,40,112,144,37,54,251,189,186,57,109,1,143, 79,115,146,192,103,5,238,242,45,13,139,95,118,87,23,45,68,212,10,66,231,48,76,25,131,41,163,48,56,10,155,13, 216,108,193,102,3,49,59,132,254,88,27,84,114,161,204,89,139,243,151,206,69,6,135,111,156,101,137,23,252,94,61,116, 199,2,30,159,86,78,2,127,44,123,108,67,213,242,249,27,53,27,58,162,242,38,36,91,176,216,72,214,137,212,39,4, 174,69,154,17,181,131,0,0,77,228,161,210,181,8,255,116,92,212,123,250,186,175,177,196,18,191,87,31,79,48,212,169, 86,47,20,124,179,116,254,250,71,87,206,107,84,66,214,48,4,110,109,54,224,214,238,79,212,148,114,36,100,13,39,225, 0,144,171,22,195,52,45,140,142,140,88,0,246,167,194,167,20,240,248,180,181,85,197,181,235,151,204,221,160,4,205,62, 0,0,147,10,128,147,63,36,123,137,22,48,164,119,36,231,40,113,214,64,179,11,113,226,244,241,136,110,198,222,247,111, 209,191,72,231,100,20,136,223,247,221,235,158,218,228,10,219,163,176,88,135,128,10,6,131,152,224,82,102,64,33,71,202, 21,132,190,216,121,140,155,131,48,100,4,0,80,166,205,3,233,57,56,209,114,60,98,154,230,118,191,87,223,157,137,149, 45,3,155,107,42,22,20,229,230,230,34,96,244,64,144,10,6,144,175,150,193,193,110,252,59,216,202,189,35,87,162,35, 227,67,50,24,26,205,121,179,225,61,193,44,49,108,116,2,0,42,92,117,176,194,2,167,206,252,25,177,109,235,53,191, 87,247,103,203,116,102,1,194,130,154,242,58,215,132,53,2,201,22,8,2,249,206,50,244,143,117,226,112,203,190,104,40, 26,216,203,140,163,0,218,5,41,127,49,75,12,232,237,136,217,55,49,211,245,4,162,227,54,154,207,157,12,75,41,27, 253,94,253,88,54,120,86,1,161,208,227,69,185,21,100,200,40,108,182,80,224,168,68,103,127,155,125,168,229,187,1,150, 216,228,247,234,77,137,177,47,237,114,243,96,172,3,163,122,23,102,185,235,17,28,157,144,103,219,90,66,44,121,157,223, 171,55,79,5,207,158,1,70,141,195,225,128,46,67,80,133,19,81,35,130,95,154,247,26,204,88,234,247,234,125,169,67, 37,75,132,237,81,204,114,215,99,120,96,204,190,208,222,26,96,201,207,249,189,250,229,219,193,179,10,48,115,137,69,81, 72,182,161,81,46,90,59,155,162,12,251,211,116,120,162,88,28,67,207,245,94,171,163,235,202,0,75,172,244,123,245,235, 119,2,7,178,188,140,4,161,45,16,25,194,173,71,75,226,218,64,59,51,35,227,46,6,128,203,29,151,140,142,174,43, 87,89,226,153,233,192,179,10,104,49,185,103,44,216,109,18,8,38,27,48,141,136,101,134,101,144,136,4,17,41,68,164, 38,2,0,122,251,123,218,2,93,114,197,79,91,141,177,248,121,37,62,150,238,74,192,109,242,254,254,158,139,103,108,105, 193,144,17,20,106,238,64,232,178,116,2,72,15,77,90,124,176,237,71,235,249,227,59,173,88,218,57,7,0,7,17,57, 226,178,25,133,254,39,64,68,226,219,119,237,9,115,52,242,201,141,145,75,17,83,70,80,250,72,105,81,229,108,177,58, 29,14,192,121,236,3,115,75,231,111,210,206,0,79,109,171,137,58,158,157,164,136,72,1,19,17,41,0,20,0,202,129, 157,198,145,254,206,142,29,227,225,193,96,97,113,133,40,124,68,219,240,112,21,114,210,38,119,78,12,65,77,200,164,175, 62,14,78,132,146,26,68,36,128,148,183,97,252,128,18,151,74,182,183,30,40,105,156,91,179,232,237,88,116,220,108,255, 189,237,235,67,159,199,78,143,13,194,6,64,105,25,100,0,242,54,97,167,247,137,153,17,79,201,36,112,106,123,227,199, 69,85,203,27,234,95,15,155,99,206,139,77,87,15,30,249,48,212,17,14,37,51,40,210,224,246,52,218,118,122,6,210, 5,146,253,226,57,138,115,205,59,149,213,5,179,149,154,161,171,19,55,78,237,9,116,15,180,89,102,60,19,169,25,200, 148,137,244,149,75,0,54,51,219,147,62,72,50,220,134,68,36,51,228,200,33,81,177,80,117,22,207,81,221,138,3,74, 176,87,234,221,39,245,152,25,5,199,225,153,68,210,165,44,102,150,147,246,64,138,4,101,129,167,214,137,85,167,63,86, 156,33,82,37,108,102,182,39,241,166,250,36,139,203,164,10,101,130,83,124,242,76,18,73,56,103,1,77,235,179,60,77, 44,217,77,21,200,6,202,86,254,3,228,143,217,228,225,119,212,115,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Replace1x[776] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,214,1,6,22,4,3,245,118,104,130,0,0,2,149,73, 68,65,84,56,203,173,147,77,108,12,97,24,199,127,51,179,179,181,72,183,204,44,193,129,86,208,137,224,160,137,131,160, 184,52,113,32,82,73,137,175,99,75,138,90,65,164,68,16,130,138,34,113,173,68,19,196,54,18,209,131,75,125,180,68, 72,137,143,157,165,69,98,91,149,212,110,119,103,63,186,93,187,59,175,3,59,105,47,78,254,201,147,60,239,155,252,127, 121,158,55,255,87,98,156,246,29,104,212,52,77,139,20,207,209,104,84,191,218,122,45,202,63,36,21,27,255,161,3,107, 75,189,101,93,75,86,212,136,20,83,37,85,140,137,190,151,15,164,132,21,95,119,169,165,245,209,63,1,141,251,247,106, 186,238,139,44,172,170,97,32,237,97,229,226,89,152,225,24,233,100,2,43,212,137,203,165,160,40,178,99,82,85,53,224, 111,58,188,5,192,5,160,235,190,72,249,226,149,124,177,74,168,91,93,206,36,183,130,170,200,116,135,4,51,150,108,96, 248,125,39,199,142,54,59,128,243,23,207,214,22,123,151,115,59,217,199,188,233,165,20,108,65,54,87,32,155,179,241,149, 150,240,117,104,12,9,176,172,56,0,94,111,25,37,111,142,115,121,171,44,128,29,206,92,106,33,193,224,112,130,112,36, 67,60,157,103,142,230,193,45,23,208,167,216,0,132,66,33,0,90,183,41,236,186,210,67,117,237,126,128,155,50,64,194, 138,175,235,123,221,197,204,82,9,115,96,132,145,212,24,47,204,239,196,82,25,162,239,239,179,105,227,38,12,195,160,173, 65,99,247,213,103,12,62,109,231,157,57,88,0,144,1,166,149,77,239,170,40,159,79,248,213,61,42,124,37,244,132,126, 146,28,205,50,252,186,3,93,211,24,77,143,58,230,129,39,55,121,215,31,101,196,236,80,128,42,233,204,153,83,98,238, 188,114,124,186,78,208,12,146,74,167,156,103,89,182,116,25,213,107,170,105,107,208,216,121,169,155,112,79,59,111,63,69, 137,153,1,128,170,166,91,118,175,11,112,204,7,155,252,88,86,220,217,23,248,99,110,121,74,255,195,54,62,126,79,18, 51,3,252,90,84,207,145,147,215,123,1,73,110,110,62,33,5,205,32,249,194,47,187,104,50,12,3,195,48,168,172,172, 228,155,188,130,224,243,231,244,15,89,196,130,119,169,59,253,2,219,51,219,201,144,12,224,63,120,72,2,16,194,97,32, 132,224,198,30,157,207,63,162,220,9,4,136,124,232,96,85,125,7,147,180,5,228,114,185,98,4,132,60,46,149,118,62, 159,159,0,104,186,101,179,126,230,103,106,54,239,102,121,195,99,196,228,57,36,147,73,114,185,60,128,50,49,72,128,170, 186,241,122,221,14,32,147,201,144,72,36,200,102,179,40,138,130,170,170,127,203,5,96,79,0,40,138,114,251,66,203,185, 237,66,136,9,83,20,75,146,156,127,135,199,227,105,7,114,252,15,253,6,121,205,27,12,206,189,173,89,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Replace2x[2104] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,7,239,73,68,65,84,88,133,229,151,121,112,85, 213,29,199,63,119,121,75,222,35,203,3,178,188,144,132,132,16,72,66,22,53,213,72,234,6,197,182,1,161,81,234,82, 91,17,165,213,46,58,195,76,157,218,25,151,193,58,116,58,142,254,225,140,180,113,148,74,59,130,211,113,68,173,67,103, 40,54,3,76,213,8,68,36,219,51,132,132,188,188,23,8,121,201,203,246,214,187,157,254,129,188,33,144,8,214,254,215, 223,204,111,206,189,103,238,185,191,207,253,222,223,57,191,115,224,255,221,164,75,59,118,236,216,113,151,205,102,219,37,73, 82,186,44,203,200,178,140,101,89,88,150,133,97,24,152,166,57,107,123,165,62,73,146,166,53,77,219,188,107,215,174,189, 95,73,212,220,220,60,110,154,166,176,44,75,88,150,37,52,77,75,93,155,166,57,195,13,195,72,185,174,235,51,92,211, 180,148,39,147,73,145,76,38,197,150,45,91,198,47,141,167,94,218,97,24,70,150,36,73,156,62,125,26,73,146,48,77, 19,183,219,77,60,30,199,63,56,64,48,24,32,60,30,198,48,116,236,118,59,57,57,185,148,149,46,35,39,39,23,73, 186,76,80,0,132,16,228,228,228,160,235,122,214,21,1,132,16,231,255,141,36,165,124,104,40,200,199,173,31,81,93,83, 205,247,27,27,201,202,244,160,42,42,154,174,17,10,141,208,250,233,39,116,249,58,89,89,223,128,203,229,190,12,96,46, 176,89,1,44,203,154,1,16,28,10,208,213,221,193,143,239,255,9,178,234,100,207,129,46,246,31,251,136,225,112,140,210, 252,12,238,186,169,136,13,119,52,49,24,24,224,131,15,222,167,124,249,10,28,14,7,0,138,162,176,108,217,178,57,131, 95,17,32,22,143,241,217,241,99,108,126,240,33,250,206,68,121,234,141,67,252,112,85,57,191,121,96,37,138,44,49,28, 142,115,240,184,159,191,28,216,199,206,39,110,163,177,113,45,45,45,45,220,217,180,113,214,175,190,160,238,197,38,207,6, 112,225,193,206,206,118,110,190,249,22,34,9,193,115,111,30,231,249,45,13,172,185,174,128,236,12,59,46,187,132,215,99, 103,67,67,49,117,21,185,60,252,98,11,69,69,37,216,157,118,14,29,62,132,207,231,227,228,201,147,41,37,175,26,192, 52,205,84,59,24,244,179,172,108,57,47,252,237,4,15,223,81,67,137,215,131,59,205,65,154,195,78,154,195,129,43,205, 73,186,219,69,105,97,54,133,121,243,217,255,233,41,214,172,94,67,56,60,202,138,21,43,40,47,47,255,239,1,194,227, 97,60,89,89,76,69,19,116,13,140,83,234,205,36,150,208,136,37,146,104,154,134,166,37,209,147,113,166,167,167,152,28, 31,195,235,81,121,251,240,0,89,89,243,241,249,124,116,119,119,211,211,211,115,69,128,203,114,32,165,128,97,224,112,56, 25,28,30,35,221,101,199,176,4,154,9,178,44,33,201,10,78,135,140,162,168,132,163,38,5,222,108,50,99,6,7,63, 59,139,166,39,137,198,162,84,85,85,93,22,236,107,1,216,29,14,226,137,56,170,108,18,137,105,140,78,37,16,166,142, 132,133,36,4,177,120,156,179,161,113,226,73,29,83,72,12,79,104,164,59,101,194,225,16,8,232,236,236,68,85,85,42, 42,42,0,208,146,113,230,197,63,227,233,251,75,134,166,163,211,147,145,132,182,97,231,254,169,83,179,2,8,33,88,48, 127,1,211,147,211,120,23,166,147,191,208,205,209,158,115,44,93,148,73,70,154,138,77,6,155,108,163,168,192,11,72,196, 53,11,223,25,63,43,203,51,232,59,61,64,121,121,5,53,53,53,169,119,70,38,199,104,126,105,51,63,93,191,145,27, 22,221,146,63,122,248,239,249,191,239,220,243,22,112,253,156,10,76,78,78,144,212,146,12,14,6,216,218,180,148,167,255, 218,137,42,188,100,58,193,161,88,56,84,176,203,22,146,36,113,106,56,73,123,239,24,175,60,254,45,254,188,243,85,86, 148,87,211,209,209,129,170,170,100,123,210,120,243,197,45,52,174,251,21,43,240,192,190,125,44,252,168,21,123,158,40,128, 57,146,176,179,171,131,127,181,124,72,117,85,13,105,78,39,101,69,57,60,115,127,13,7,142,6,8,142,11,220,153,217, 228,230,45,66,157,151,203,17,191,197,225,238,73,94,126,236,70,2,254,1,210,28,46,214,174,93,71,109,109,45,118,49, 201,238,23,31,160,233,158,173,24,11,203,56,230,114,97,124,248,33,251,28,1,17,145,196,9,184,164,26,110,219,182,77, 22,152,102,78,110,54,139,188,133,132,66,163,8,33,168,187,254,90,138,10,23,163,216,156,236,57,208,205,254,99,103,56, 27,142,81,150,159,193,15,26,10,104,186,181,146,174,174,14,154,95,109,230,206,166,141,184,93,110,250,78,252,147,96,251, 59,220,125,199,106,100,43,74,242,76,6,193,37,141,156,221,241,184,209,102,141,126,28,138,219,215,189,125,48,20,145,46, 10,62,207,225,82,247,228,230,228,173,159,159,181,16,191,223,79,52,26,165,172,172,12,75,232,244,245,247,81,87,87,71, 77,205,53,44,240,44,64,81,85,180,164,70,112,104,144,119,246,238,69,75,38,217,252,224,195,100,102,102,242,143,61,191, 39,212,179,159,181,223,91,133,62,21,32,50,252,57,19,97,27,71,250,220,4,194,61,175,231,221,48,253,232,182,109,88, 41,5,182,111,223,238,149,85,177,127,241,226,226,106,135,45,141,190,190,62,20,69,161,164,164,132,104,108,10,93,215,249, 206,234,239,210,127,186,143,142,206,118,2,129,0,145,72,4,167,211,201,210,210,50,26,86,54,176,100,73,41,150,105,176, 251,229,95,144,46,2,220,220,208,64,108,180,155,248,104,15,254,17,157,246,33,59,189,163,89,188,181,175,109,134,234,42, 128,162,242,202,117,117,117,213,194,146,56,122,228,24,30,143,135,252,252,124,66,225,17,210,28,78,110,250,246,173,36,18, 9,162,145,24,69,5,197,44,46,44,65,150,101,36,73,66,81,20,206,157,27,97,40,56,200,39,239,62,207,245,21,89, 84,87,213,19,57,115,148,196,100,16,95,32,193,23,161,121,220,247,216,14,158,122,254,229,217,215,1,33,196,154,229,203, 151,19,141,71,136,70,43,144,36,137,193,160,31,85,86,169,187,166,142,120,60,142,174,235,228,230,230,2,231,11,149,205, 102,195,102,179,33,203,50,177,233,81,222,109,254,45,183,215,151,80,80,176,136,169,193,127,147,136,140,113,188,63,201,153, 120,54,143,60,187,27,111,225,82,96,14,0,100,14,245,247,247,175,95,82,90,74,150,39,147,246,246,19,84,87,213,146, 239,93,68,60,30,71,150,101,20,69,161,183,183,23,195,48,80,20,37,245,245,211,99,126,124,135,254,196,221,141,55,146, 153,225,100,114,224,32,145,72,132,99,167,116,38,40,96,235,31,222,199,233,74,191,44,240,12,0,89,24,191,108,253,180, 213,106,109,109,93,29,141,198,210,31,249,217,207,145,144,176,44,11,69,81,112,58,157,232,186,78,93,93,29,146,36,165, 128,122,142,183,208,117,228,53,30,216,184,26,155,136,50,57,112,136,240,84,146,182,1,9,79,241,106,30,221,250,71,100, 89,153,117,9,158,1,240,228,147,219,130,64,19,192,166,77,155,68,94,110,30,225,112,24,73,146,80,85,21,151,203,133, 105,154,248,124,62,76,211,68,146,36,34,19,35,124,178,119,59,155,238,107,196,152,12,48,53,124,130,224,168,70,219,128, 76,97,237,122,170,26,238,163,179,179,139,218,218,218,43,3,92,108,134,97,204,57,160,178,178,50,165,192,235,219,239,101, 195,61,27,73,175,188,133,177,35,175,113,114,40,65,215,176,139,166,71,94,160,182,126,45,112,190,248,8,33,190,222,150, 236,194,82,60,155,117,119,119,99,154,38,103,7,78,160,26,33,114,243,11,208,38,252,124,225,159,226,243,33,55,171,238, 125,142,154,27,26,231,28,255,141,1,42,43,43,17,194,162,101,247,175,89,181,110,19,7,223,219,77,95,96,138,229,215, 222,206,19,47,189,65,122,230,130,175,148,251,27,3,0,236,221,249,12,253,167,122,96,223,30,234,111,127,136,250,31,221, 134,101,9,70,70,39,56,23,26,79,37,232,133,105,106,179,217,82,121,116,53,0,25,178,44,79,9,33,50,50,50,50, 82,231,2,85,85,17,66,96,154,6,238,116,15,191,123,245,99,178,189,37,51,78,66,151,238,166,21,69,65,85,85,20, 69,65,81,20,100,89,198,110,183,79,3,121,192,56,144,132,153,197,40,29,200,169,175,175,191,187,184,184,248,89,73,146, 210,174,82,197,171,181,68,111,111,239,11,109,109,109,239,1,35,192,89,192,186,24,192,1,228,0,11,128,172,47,239,149, 255,85,112,206,171,29,5,194,64,0,136,192,44,135,211,47,3,59,191,108,231,158,63,95,207,76,64,231,188,236,73,32, 149,169,255,1,125,174,253,144,40,89,191,100,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Undo1x[650] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,214,7,26,10,14,0,22,35,150,33,0,0,2,23,73, 68,65,84,56,203,149,147,79,104,146,97,28,199,191,207,243,190,207,212,229,254,232,198,26,210,136,214,193,242,16,20,132, 65,131,21,4,66,176,67,120,8,130,98,68,80,93,59,140,60,120,40,199,140,29,34,186,116,169,88,65,16,52,233,80, 44,22,193,82,140,90,118,138,148,180,104,13,114,19,92,190,58,231,134,239,235,243,60,29,194,165,155,150,125,111,207,23, 190,159,231,121,126,207,247,1,154,40,58,5,137,22,164,110,53,230,238,161,151,41,200,162,69,209,218,133,223,199,108,76, 65,214,237,13,181,154,255,115,2,191,143,217,60,78,35,231,246,134,128,194,213,205,107,232,164,39,195,5,205,128,182,197, 195,201,236,197,241,9,189,84,11,32,91,195,70,110,28,42,213,0,139,23,144,21,112,46,1,136,242,155,217,199,95,25, 5,121,149,40,120,2,65,227,71,21,160,248,125,172,221,227,52,86,221,222,16,140,159,215,65,40,69,185,12,128,47,66, 95,79,65,91,137,65,202,146,58,232,58,209,103,182,40,189,54,228,79,15,236,171,188,142,68,197,50,0,40,19,23,132, 94,13,83,170,252,166,170,12,82,74,8,193,33,132,128,224,107,40,175,167,96,178,152,200,142,174,93,157,157,98,237,208, 238,253,250,163,72,84,24,244,101,146,217,231,67,94,176,142,147,0,0,206,117,44,124,251,136,197,239,113,164,211,95,234, 6,86,212,226,176,247,187,96,110,103,7,134,157,221,225,237,51,24,25,195,66,226,38,246,184,174,64,240,98,93,88,20, 239,34,147,101,40,235,28,61,142,75,248,244,118,186,116,252,108,218,170,2,64,32,104,104,240,49,59,48,153,115,143,140, 1,0,98,51,119,234,223,203,66,224,58,114,25,133,204,3,152,204,58,8,145,106,93,15,2,65,67,155,77,50,251,252, 179,201,205,204,208,40,200,208,40,8,128,131,165,188,60,149,152,187,253,190,111,224,28,184,232,0,145,210,132,191,213,184, 81,149,195,247,225,120,55,77,229,234,242,13,17,121,104,147,219,154,88,187,115,35,127,248,60,150,20,97,149,27,197,56, 132,106,207,55,5,52,131,68,167,48,216,237,56,44,180,236,18,0,220,106,248,153,254,161,163,93,59,247,206,124,142,61, 169,28,59,163,93,251,111,128,108,235,183,166,62,60,127,65,117,237,105,213,251,5,5,22,226,37,43,190,36,20,0,0, 0,0,73,69,78,68,174,66,96,130, }; const unsigned char Undo2x[1601] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,5,211,73,68,65,84,88,133, 197,150,125,108,85,119,25,199,63,207,57,231,222,222,190,93,144,118,117,27,20,186,14,161,50,100,171,194,34,173,155,56, 230,31,37,154,249,135,36,51,1,6,203,162,115,9,38,154,104,50,199,98,124,153,38,102,70,17,255,113,142,217,209,45, 234,166,46,190,100,217,116,51,200,104,129,241,166,161,172,140,82,70,75,129,74,105,239,229,246,246,190,156,151,223,227,31, 237,189,94,46,151,174,47,75,124,146,39,191,223,185,247,119,206,247,243,123,126,207,243,156,35,170,202,255,211,172,217,223, 42,210,245,188,124,255,232,51,50,111,46,0,206,108,110,58,244,162,68,141,242,71,133,245,99,97,126,50,23,128,25,71, 96,255,30,89,102,140,156,88,180,226,193,123,45,219,113,231,34,62,99,128,206,118,217,224,56,149,199,150,181,126,187,190, 174,241,243,33,133,57,39,208,180,1,14,236,145,39,35,243,26,254,112,199,250,167,43,43,170,171,4,100,174,218,192,52, 114,224,111,29,82,89,13,191,93,176,232,190,251,23,55,127,37,162,222,59,4,217,51,88,225,219,248,32,32,166,4,56, 216,46,13,213,142,245,247,197,119,62,182,164,118,241,250,80,144,57,130,6,151,65,156,15,68,124,74,128,174,95,203,125, 118,164,250,149,166,214,31,84,151,207,175,151,32,125,20,53,73,192,102,226,228,4,17,177,195,54,23,15,188,32,113,132, 115,26,240,123,49,188,186,118,171,158,154,46,128,148,106,68,93,123,228,27,229,209,165,79,45,107,253,94,196,9,5,4, 217,211,160,89,84,179,249,49,84,213,6,102,140,192,143,227,187,35,184,201,62,18,87,222,115,135,251,255,229,171,113,223, 240,60,30,185,103,155,14,207,8,96,111,187,68,194,54,237,11,22,174,127,160,161,249,171,17,13,250,81,127,8,0,197, 7,245,38,1,92,48,30,106,174,18,248,67,96,198,16,171,10,187,236,163,136,83,207,232,224,191,253,75,125,135,50,158, 55,250,104,235,38,125,113,90,0,157,207,73,181,21,162,243,214,166,77,203,111,94,246,64,216,79,31,1,77,146,47,20, 13,0,31,85,15,76,18,111,124,47,26,92,191,65,177,62,132,83,126,55,106,223,69,127,247,159,51,227,163,61,7,98, 163,180,181,109,215,108,41,128,124,25,182,62,172,99,8,187,71,6,247,7,94,54,134,229,212,162,38,3,38,13,38,141, 106,6,213,44,26,196,112,147,175,151,20,7,80,19,195,27,127,157,32,213,65,99,243,231,34,11,22,54,183,204,159,207, 143,166,117,4,0,157,123,164,205,9,71,95,94,222,250,120,69,164,34,42,126,230,48,168,15,24,52,72,224,141,191,9, 154,102,162,10,166,238,67,98,215,224,68,31,162,247,237,63,101,50,241,190,123,91,182,234,225,247,5,0,232,234,144,149, 96,255,99,233,154,199,22,68,63,124,167,237,143,239,195,120,3,248,233,183,65,83,0,68,106,119,128,6,168,166,65,51, 104,48,138,159,57,129,113,79,3,65,254,89,118,217,199,240,204,26,237,61,244,92,255,188,8,203,87,108,212,107,218,119, 201,78,216,178,89,187,33,88,217,119,100,87,207,197,158,223,184,226,220,130,241,206,229,197,39,208,133,238,127,238,242,123, 246,63,159,58,123,252,47,99,255,233,239,117,125,86,83,86,243,53,236,200,154,252,178,32,123,146,72,165,74,244,166,37, 55,197,210,124,169,88,235,134,173,184,101,179,94,206,250,172,185,124,246,205,215,206,30,253,93,218,169,250,34,118,100,245, 255,22,168,135,239,101,2,119,60,182,46,49,124,225,193,75,103,143,127,171,247,80,199,197,247,142,181,167,196,110,194,169, 88,55,249,120,67,144,62,66,180,182,190,66,132,21,211,6,0,88,183,85,51,159,220,196,23,146,163,231,118,158,234,124, 54,173,214,42,156,202,251,1,11,53,19,209,112,161,183,117,171,190,250,169,45,186,51,30,163,49,49,28,251,233,201,206, 151,50,190,95,129,93,118,7,0,38,24,33,84,230,136,37,172,154,17,192,228,86,117,237,102,125,220,77,199,191,252,110, 103,71,42,155,14,17,170,218,128,154,113,138,147,176,109,187,102,91,30,210,29,26,100,159,24,56,185,47,101,133,26,64, 194,168,73,226,132,64,225,35,179,0,152,176,150,45,250,130,241,188,207,158,57,250,218,213,248,229,11,102,162,18,74,219, 133,114,118,166,147,201,243,137,145,126,21,187,14,193,66,100,28,85,106,102,13,0,176,118,155,118,121,170,205,131,239,30, 63,127,241,244,91,158,168,150,124,35,109,220,168,129,26,158,73,93,189,226,137,132,193,170,32,51,54,140,8,239,204,10, 64,38,204,18,17,251,211,91,24,232,235,225,19,35,131,231,15,27,99,194,221,103,8,137,136,83,224,182,136,88,198,48, 230,123,105,31,12,34,101,36,70,227,89,19,240,215,105,1,20,8,58,34,18,2,66,64,56,231,155,127,72,122,251,207, 217,224,186,236,238,191,64,8,40,43,252,31,8,103,125,162,106,44,65,3,60,215,16,27,74,248,150,207,47,175,211,42, 108,68,34,34,147,80,57,151,162,121,177,19,141,34,137,68,62,27,21,208,187,155,112,126,246,4,7,151,52,213,213,150, 87,133,130,193,211,35,214,200,72,230,233,207,60,204,143,1,163,170,38,167,233,20,136,91,69,226,165,92,40,130,73,36, 242,194,185,209,124,125,27,109,149,213,33,55,20,49,167,134,6,98,243,227,241,204,129,29,187,217,197,196,199,132,76,110, 212,168,170,138,170,230,118,110,23,137,21,95,23,254,86,8,146,51,3,152,103,191,203,218,166,165,214,35,117,245,225,84, 42,238,70,71,135,205,201,239,252,130,167,222,58,78,42,183,102,210,3,85,53,57,128,27,9,79,103,46,128,185,125,17, 246,147,143,178,174,177,129,213,149,81,178,233,36,161,115,3,188,241,205,157,236,187,116,9,183,80,56,55,87,213,160,48, 2,165,118,93,42,10,215,68,96,245,42,42,238,249,56,53,119,53,113,251,45,117,44,244,125,198,98,49,134,246,30,228, 196,175,94,225,74,177,104,193,117,144,63,130,201,28,184,17,196,53,137,88,85,133,93,83,131,211,120,43,225,149,183,81, 89,123,51,229,21,22,142,103,240,135,6,72,238,239,38,113,236,20,217,34,65,45,2,9,116,82,248,186,215,113,209,113, 188,111,21,20,216,53,149,80,36,156,27,125,45,18,44,249,61,80,0,51,21,64,126,89,145,120,110,204,71,160,88,116, 218,0,83,64,149,18,159,80,158,225,3,255,11,231,4,232,84,96,74,192,97,0,0,0,0,73,69,78,68,174,66,96, 130, }; } namespace Emblem { const unsigned char Archive1x[540] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,6,16,18,24,9,181,27,210,224,0,0,1,169,73, 68,65,84,56,203,173,146,49,104,84,65,16,134,191,217,219,221,119,119,201,61,98,12,65,174,16,17,4,145,32,73,35, 138,77,196,198,82,9,40,135,141,88,40,150,17,11,59,175,72,41,30,164,17,148,20,177,9,104,21,44,4,69,15,181, 20,244,154,136,98,108,140,152,34,42,81,162,225,93,222,219,177,120,57,21,35,120,81,167,153,217,129,255,155,217,153,129, 127,52,1,104,212,204,48,240,108,147,218,145,241,153,208,146,70,205,52,129,209,179,87,23,244,253,252,99,21,91,54,160, 0,24,35,185,23,72,62,47,98,74,3,25,105,34,47,158,222,51,115,15,167,1,234,22,224,244,229,86,150,44,191,49, 179,147,167,196,59,7,192,218,90,27,31,69,8,130,115,14,83,112,248,184,90,56,118,241,14,75,111,159,179,251,192,24, 175,91,247,71,45,176,67,140,152,144,165,98,10,158,52,228,253,69,189,3,0,84,250,171,32,6,128,234,174,125,180,87, 222,17,40,80,217,178,13,13,217,176,5,250,146,149,15,188,124,114,155,147,23,166,64,179,13,159,85,5,80,8,109,210, 143,175,72,86,63,225,138,49,0,22,40,62,186,57,33,135,143,158,131,244,11,100,171,160,1,213,12,66,138,106,200,125, 88,7,107,96,207,222,253,60,152,189,14,104,209,2,126,112,251,144,98,140,224,43,64,229,199,122,80,36,175,189,254,166, 51,95,134,70,14,178,48,215,140,164,81,51,151,128,250,95,158,65,189,115,7,122,228,196,121,150,231,155,93,169,226,157, 135,184,123,235,10,227,51,65,108,39,233,163,50,61,241,214,174,0,206,71,223,227,159,0,37,136,251,187,2,152,168,184, 17,224,74,61,216,46,1,169,251,93,7,113,149,224,123,255,32,205,247,17,130,252,2,176,229,107,211,19,199,207,108,102, 252,95,19,189,193,255,176,111,224,210,135,204,19,41,165,180,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Archive2x[1067] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,226,73,68,65,84,88,133,237,150,95,136,212, 85,20,199,63,231,222,251,251,253,102,102,103,255,142,166,27,150,150,88,144,102,127,31,218,40,49,200,36,136,68,200,30, 20,218,212,13,89,84,8,138,30,138,222,10,122,232,205,212,44,89,55,145,192,146,32,168,232,37,42,208,212,84,212,165, 32,162,168,101,21,203,221,213,253,51,237,56,51,191,223,189,61,252,134,217,217,117,86,155,26,240,161,253,194,225,222,115, 239,253,157,251,189,231,158,223,57,23,102,49,139,255,59,228,90,147,189,47,164,151,26,63,120,51,12,243,107,156,184,60, 14,59,229,75,135,2,130,234,70,5,45,114,196,89,121,233,185,247,198,142,215,68,96,223,150,166,37,126,144,58,168,148, 190,115,249,163,107,82,205,109,237,68,81,136,32,24,63,0,229,163,76,2,209,1,202,76,138,232,4,202,11,80,58,32, 180,206,253,240,117,143,244,159,250,232,47,27,113,209,138,125,165,115,87,246,208,117,9,236,239,106,190,77,18,254,137,101, 43,58,91,231,45,186,67,141,12,156,117,103,15,127,38,78,0,231,112,81,30,163,4,163,193,211,130,209,130,167,193,76, 235,39,146,45,100,30,123,195,93,56,190,215,133,131,167,213,207,231,70,115,69,203,182,141,239,142,247,84,238,167,43,149, 3,93,201,5,36,147,199,239,93,221,221,182,248,129,213,122,252,66,31,167,191,249,88,10,133,43,216,40,196,218,8,37, 160,68,80,10,180,18,148,18,180,2,53,173,47,46,79,225,242,79,114,83,199,139,146,255,227,20,173,137,208,27,30,203, 175,122,250,65,51,240,233,201,98,223,85,30,120,191,171,97,94,50,149,60,185,108,229,166,246,246,37,29,218,141,253,138, 23,52,80,140,38,157,100,157,5,107,65,25,68,123,177,168,88,40,181,162,13,136,46,27,78,54,207,167,144,27,167,175, 119,45,162,52,191,93,24,155,112,214,110,234,220,147,61,88,38,208,179,49,61,55,104,76,29,107,91,176,116,161,56,114, 67,3,125,233,71,158,121,141,230,185,183,146,27,57,55,121,95,162,64,52,136,138,5,13,74,226,13,69,202,115,18,7, 40,0,65,67,134,200,193,151,59,214,227,108,33,151,12,252,68,54,151,15,113,172,239,220,147,61,36,123,55,55,181,25, 99,135,1,252,32,117,62,44,230,191,187,253,190,39,215,221,179,122,27,209,200,47,224,44,206,89,112,46,182,234,92,172, 151,250,255,100,204,207,220,69,118,228,34,95,125,240,242,69,92,120,38,178,246,9,0,177,108,85,198,68,111,3,160,100, 205,149,98,126,69,208,152,121,106,249,170,173,68,163,191,99,139,19,216,98,14,23,94,41,139,13,167,233,197,220,117,199, 242,127,158,165,113,206,34,238,94,185,161,69,180,30,182,74,47,22,56,234,20,59,167,252,5,7,182,207,57,252,248,230, 221,15,167,51,11,175,153,31,254,11,190,221,191,61,55,116,254,199,141,157,187,42,98,0,96,95,119,211,67,98,237,81, 165,117,81,68,121,162,52,206,70,53,152,118,51,206,136,196,182,28,46,111,163,40,0,120,126,79,86,166,16,112,32,31, 118,55,183,0,20,109,116,169,99,237,171,12,28,235,169,110,177,70,220,124,255,58,190,255,124,7,158,210,109,0,158,248, 197,103,119,13,102,1,76,153,37,56,118,143,94,6,232,221,146,38,145,74,147,76,165,235,66,32,72,54,2,176,161,100, 191,18,230,170,213,37,40,109,240,147,13,117,33,160,141,55,227,220,140,4,180,241,240,19,245,241,128,54,126,237,4,140, 246,8,18,245,241,128,249,247,30,184,145,4,60,143,160,78,49,96,252,242,21,248,64,225,90,4,2,160,21,226,138,103, 252,20,184,90,114,65,21,136,66,169,114,209,189,5,24,3,46,1,81,53,2,205,64,198,41,111,112,184,255,204,220,204, 194,142,210,112,69,146,113,149,9,199,149,117,87,117,77,220,14,245,247,97,197,27,2,230,151,246,140,74,36,166,16,208, 37,221,251,226,244,196,91,216,157,175,11,97,75,141,231,173,10,135,25,249,228,196,196,59,64,2,240,168,120,135,76,207, 249,173,64,166,212,6,196,119,86,15,20,0,5,100,137,79,126,30,40,86,35,0,144,4,90,74,155,207,24,164,53,34, 36,190,143,81,96,28,38,31,183,215,171,122,245,170,138,51,87,170,89,220,104,252,13,162,179,143,166,193,167,182,66,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Audio1x[688] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,45,73,68,65,84,56,141,165,146,63,104,83,113,16,199,63,247,123, 239,165,125,201,139,173,182,52,181,162,130,72,139,184,57,84,193,81,232,32,69,28,44,22,43,213,65,176,168,139,131,139, 130,116,18,156,156,85,4,7,55,209,81,23,5,65,28,28,212,69,7,161,96,165,54,109,109,211,166,77,94,146,247,239, 119,14,117,146,196,165,55,222,113,31,190,119,124,68,85,217,73,153,29,109,3,110,187,230,165,27,123,159,138,232,49,85, 12,136,3,8,162,70,21,71,20,163,130,128,56,40,171,109,1,89,166,231,199,199,79,117,15,244,13,179,43,216,71,193, 239,195,243,2,140,113,200,178,136,86,84,165,222,92,230,209,147,7,253,109,1,0,131,3,251,201,251,62,65,16,80,44, 148,8,252,33,114,94,145,86,84,161,22,46,144,247,3,16,180,35,160,90,155,39,177,91,196,73,141,122,163,76,87,174, 7,193,33,73,67,162,100,147,40,222,0,171,210,17,144,164,13,94,188,124,95,111,54,50,81,139,108,255,3,81,85,227, 229,76,58,49,49,230,91,181,157,1,160,108,85,211,32,197,61,136,155,196,110,230,165,41,205,164,133,159,20,163,116,83, 85,81,254,147,64,213,34,34,60,127,88,94,208,127,100,153,154,41,97,53,67,173,74,71,15,172,166,128,232,236,44,210, 118,110,83,64,59,139,100,109,138,8,188,235,32,155,181,9,86,255,158,48,53,51,112,218,245,204,109,207,20,142,231,186, 242,226,122,110,166,196,136,160,195,101,100,242,106,105,172,203,53,247,242,249,222,67,34,226,56,174,177,86,99,80,196,189, 120,109,240,130,231,57,143,207,158,57,151,31,57,124,146,176,185,196,74,229,147,179,81,155,67,21,66,51,120,179,191,183, 231,238,244,228,173,194,158,221,67,132,205,21,150,42,31,217,10,231,0,196,117,140,92,25,57,90,200,71,250,149,239,63, 23,105,69,235,52,163,53,204,118,56,5,123,103,244,196,129,194,239,173,183,44,87,83,154,113,133,36,9,49,198,67,21, 227,42,250,225,199,92,99,180,216,83,46,248,254,10,105,170,132,245,140,122,173,129,181,214,184,142,172,46,150,127,21,115, 221,137,136,24,162,86,68,101,189,65,101,173,145,0,70,84,149,233,235,165,251,32,151,179,76,251,68,36,113,92,153,71, 245,115,26,235,43,208,111,142,103,158,101,153,30,49,70,98,133,204,49,242,37,77,236,27,140,121,253,7,117,49,14,53, 175,233,38,194,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Audio2x[1486] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,5,75,73,68,65,84,88,133,237,151,91,111,92,213,21,199,127,107,159, 57,103,46,190,197,30,103,198,78,99,55,14,77,104,176,73,105,170,132,136,84,85,81,73,145,202,11,237,131,165,10,247, 1,9,138,210,34,168,4,66,45,79,230,3,180,223,160,162,125,168,90,241,208,23,30,42,40,106,131,68,133,40,74,155, 42,81,19,40,40,41,132,56,246,140,61,227,185,156,57,115,46,123,241,224,51,48,197,9,216,181,43,94,186,164,165,45, 29,237,181,214,127,255,215,101,239,35,170,202,231,41,230,115,141,254,127,0,64,230,127,225,116,126,94,28,179,103,252,54, 199,152,57,148,59,29,215,156,16,116,220,180,187,247,63,255,124,173,190,107,0,158,123,78,204,165,235,165,25,81,153,53, 98,231,50,158,185,27,203,81,119,172,188,111,116,116,172,187,255,11,251,101,188,88,44,12,143,228,205,75,47,191,226,183, 221,164,4,252,247,0,22,30,157,56,105,141,126,195,245,228,36,112,52,142,202,83,147,227,19,209,161,195,115,220,54,115, 52,63,53,121,196,236,25,217,71,46,55,132,181,161,215,233,86,105,119,86,8,163,117,94,249,211,159,19,215,138,253,164, 207,109,1,208,12,103,79,158,56,158,153,218,119,208,217,55,113,152,210,248,97,6,10,101,207,117,6,200,56,89,68,28, 18,219,165,27,214,169,53,223,165,214,120,139,70,235,61,28,227,146,36,33,145,35,155,122,126,123,41,80,117,190,114,231, 172,147,113,115,136,211,166,214,124,139,181,198,37,162,184,69,16,214,233,4,21,130,176,70,28,119,48,38,131,49,30,34, 6,193,224,152,156,120,182,189,51,6,0,26,254,53,154,254,123,8,138,72,6,207,29,34,159,29,167,144,47,81,28,185, 131,40,246,89,171,93,167,186,182,66,181,90,141,155,205,102,248,213,99,135,10,168,146,168,217,57,128,56,246,25,30,152, 194,117,10,4,65,66,171,229,179,252,193,138,173,84,223,246,111,44,45,219,70,163,149,51,25,89,17,229,66,28,219,55, 92,207,251,201,236,172,45,128,197,102,119,88,3,61,121,245,236,185,214,210,7,235,158,24,26,198,200,63,147,216,190,161, 150,127,168,114,33,94,223,123,249,133,23,46,134,189,189,15,63,57,253,24,176,199,162,226,132,193,206,106,64,68,80,96, 101,197,247,146,40,153,249,237,47,43,215,183,98,167,170,144,168,36,118,115,10,182,63,9,213,130,85,73,114,210,216,202, 118,35,130,98,81,32,201,109,78,193,54,1,8,86,19,20,21,178,217,100,43,22,86,21,213,4,139,74,38,220,220,134, 219,102,64,53,65,85,165,21,231,54,157,230,150,32,108,130,42,196,201,46,164,192,218,24,107,213,116,138,239,108,137,1, 0,171,9,88,149,124,193,217,5,0,26,3,200,217,69,182,14,192,70,40,74,108,91,187,195,0,40,186,141,167,148,181, 49,170,42,94,103,199,53,160,36,54,66,132,45,231,95,84,213,218,8,85,149,104,104,23,106,32,73,162,13,36,91,20, 77,65,131,74,152,108,174,129,207,28,68,243,243,115,94,118,116,185,216,173,85,87,220,177,18,113,18,97,63,65,255,119, 158,56,148,29,11,154,167,141,199,67,106,185,207,24,49,32,161,162,177,181,148,32,66,85,201,181,204,103,79,66,17,145, 239,63,82,190,55,227,201,143,17,115,255,216,244,80,214,117,39,163,96,112,204,233,248,117,172,141,16,62,30,40,11,143, 22,247,23,189,204,235,163,123,135,70,78,28,191,103,240,75,7,191,38,195,131,147,116,187,77,58,65,141,229,213,243,212, 218,231,81,144,96,220,253,116,6,22,206,148,159,89,248,81,249,233,3,95,252,114,225,212,201,251,10,7,166,238,16,171, 62,157,238,106,198,239,84,184,182,252,230,198,77,152,214,192,252,188,56,185,189,19,127,189,253,72,177,244,189,7,158,117, 134,7,166,9,163,22,237,206,18,173,224,10,141,246,85,252,240,93,170,149,0,35,178,62,59,114,173,123,75,0,63,120, 124,242,231,249,130,243,216,177,227,19,3,223,254,250,83,128,16,197,109,252,78,133,90,227,109,106,205,127,17,68,55,104, 53,19,140,145,42,128,41,150,143,184,174,51,116,207,221,167,157,27,213,115,196,177,79,16,173,179,90,191,68,165,118,158, 40,246,169,173,69,92,252,123,203,239,118,237,131,139,139,232,226,162,72,127,7,101,122,180,63,116,166,252,195,111,222,59, 59,128,105,115,245,250,31,25,29,62,68,24,54,88,93,191,76,165,126,1,107,67,86,43,17,23,207,55,253,40,100,81, 68,220,111,125,119,104,201,157,40,4,103,95,123,49,63,94,202,58,142,121,25,107,45,137,141,168,175,197,250,239,43,29, 63,10,181,225,119,226,103,127,255,171,213,115,105,60,43,34,182,7,66,216,232,4,111,225,76,249,111,7,14,14,222,62, 125,208,53,158,187,241,188,178,106,241,253,14,75,215,2,251,254,213,110,144,196,90,93,175,39,63,123,241,119,213,63,164, 182,114,234,244,200,204,244,76,246,167,142,35,167,0,85,84,5,52,142,184,188,244,126,248,235,87,95,170,191,6,68,64, 183,79,19,32,81,85,149,20,213,224,220,93,131,119,29,57,150,255,133,155,145,163,8,168,226,0,10,18,181,155,201,235, 87,222,233,254,230,194,155,205,191,0,62,96,83,224,210,183,122,169,175,12,224,164,223,109,95,112,63,213,14,16,2,177, 170,218,158,131,60,48,6,76,228,243,206,1,43,90,138,34,235,218,136,128,141,103,116,5,168,2,235,169,67,219,99,32, 181,55,105,80,183,15,128,108,28,128,24,8,82,237,164,107,212,207,192,71,105,72,129,12,164,107,38,165,170,155,26,118, 83,228,253,189,44,252,39,16,167,239,244,38,221,107,83,16,113,26,56,238,5,135,141,73,73,175,16,251,232,236,169,222, 68,111,38,114,19,237,151,158,173,5,180,191,11,100,55,127,207,211,67,220,82,110,118,129,125,8,131,154,186,48,34,246, 217,6,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Binary1x[560] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,4,22,20,7,56,114,185,172,74,0,0,1,189,73, 68,65,84,56,203,181,147,205,78,19,97,20,134,159,239,155,111,102,164,77,72,40,130,164,96,59,13,144,9,198,40,104, 32,97,163,27,72,240,6,184,0,55,77,220,176,96,227,206,112,1,46,154,184,97,195,5,52,222,128,209,149,113,229,66, 170,9,218,81,204,12,161,105,11,180,252,101,250,135,40,46,148,102,20,102,118,188,201,89,62,79,78,242,158,3,33,89, 92,90,157,156,89,120,122,182,184,180,58,73,68,100,24,236,57,238,250,243,103,143,241,28,119,61,74,34,163,224,98,105, 135,137,123,118,164,68,134,193,155,149,26,186,210,184,51,62,76,98,100,40,84,34,47,93,123,119,31,93,73,116,77,131, 51,232,49,12,44,59,115,169,68,252,15,151,234,135,8,4,66,128,16,130,79,197,18,166,161,56,61,253,201,23,183,138, 231,184,88,118,102,42,159,203,22,0,100,16,174,30,28,163,107,26,186,250,51,237,246,15,248,5,137,222,56,183,70,147, 12,247,247,5,55,153,3,80,231,112,237,184,129,174,52,132,16,8,4,141,86,135,218,190,207,221,137,155,92,51,21,239, 222,111,34,17,164,7,250,1,240,28,247,53,32,164,101,103,230,151,87,214,184,222,27,167,213,58,193,111,180,249,238,237, 178,181,93,167,92,57,164,217,232,80,174,28,161,164,36,102,26,108,237,213,241,28,151,212,88,234,62,128,204,231,178,111, 44,59,51,181,188,178,198,200,96,31,27,197,50,123,53,31,223,239,48,150,30,36,149,76,208,106,158,16,51,13,156,114, 181,11,191,124,241,228,67,183,133,124,46,91,56,151,60,122,120,155,184,105,16,55,13,142,14,154,72,33,80,66,242,209, 43,93,128,255,169,49,40,121,48,59,78,204,52,24,77,15,96,234,138,183,27,223,240,28,151,164,117,99,58,8,119,107, 12,59,166,175,197,29,94,21,62,95,168,46,82,16,148,252,173,44,20,142,76,224,27,231,184,202,252,6,31,155,240,68, 82,120,70,77,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Binary2x[1675] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,66,73,68,65,84,88,133,229,151,217,115,84, 85,30,199,191,231,119,238,146,78,210,183,59,107,147,116,167,151,132,152,72,132,208,128,27,13,9,104,160,28,202,146,161, 3,79,83,214,164,242,52,207,62,251,224,195,252,13,62,88,53,37,102,134,69,12,250,162,165,14,58,162,65,81,17,179, 66,7,59,91,111,233,108,244,96,210,33,73,247,237,123,231,161,23,110,98,2,1,103,158,230,86,253,234,156,170,123,239, 249,124,206,249,253,234,87,117,128,255,247,135,253,158,159,143,118,116,119,106,76,239,37,157,94,253,234,139,191,125,242,36, 107,208,239,129,103,152,126,94,177,213,32,67,218,135,109,199,186,78,60,201,58,252,73,225,26,99,231,188,190,131,242,169, 147,29,88,211,56,159,137,70,207,184,234,247,254,28,154,24,8,254,79,5,142,118,116,119,106,132,243,222,67,62,217,225, 170,195,59,189,223,224,224,179,45,40,85,20,30,143,68,30,91,226,177,4,142,118,116,119,130,211,133,87,94,123,69,42, 171,182,225,131,43,55,161,105,192,157,169,89,28,122,174,5,102,197,194,167,195,225,199,146,216,182,64,91,71,151,159,56, 191,248,122,215,105,241,233,150,167,240,246,197,175,0,157,65,32,2,17,67,48,52,7,223,129,93,48,91,44,60,22,10, 159,113,55,236,187,25,26,239,31,251,175,8,180,117,116,249,193,232,194,159,94,247,75,45,45,77,24,15,207,195,251,180, 19,7,118,185,112,247,94,18,43,171,105,16,99,24,11,207,227,57,111,19,20,139,149,71,67,83,219,146,120,164,64,91, 71,151,159,49,186,112,224,240,33,105,207,158,102,68,226,255,6,24,64,44,187,243,249,68,18,139,75,171,16,56,129,24, 195,100,100,1,251,91,159,202,74,132,31,45,241,80,129,60,124,223,33,159,84,235,172,67,96,124,6,85,21,102,16,17, 194,211,119,241,237,207,227,152,187,187,4,129,19,4,226,16,136,192,115,239,188,187,119,66,177,150,241,72,40,116,198,221, 224,221,82,98,203,62,208,126,172,251,20,35,186,224,245,249,164,29,14,59,62,191,54,130,180,154,1,39,2,103,12,137, 123,247,113,127,37,5,81,224,16,57,135,40,80,97,78,68,184,118,115,12,110,143,27,190,246,118,137,129,125,212,126,188, 251,15,219,22,104,63,214,125,10,76,191,232,61,152,133,255,235,251,81,112,70,133,99,38,202,206,69,158,135,103,71,129, 19,132,220,156,51,194,15,131,147,112,215,123,224,59,210,38,211,22,18,191,73,65,30,190,247,69,159,84,227,112,224,155, 159,126,1,129,65,224,4,119,109,5,170,203,205,32,98,208,52,29,43,43,41,168,25,173,112,244,198,84,8,156,192,25, 97,110,97,17,187,154,60,80,172,86,33,58,21,58,237,118,183,254,52,53,57,48,182,169,192,145,227,93,127,4,195,251, 173,47,100,119,254,93,255,120,1,46,16,161,209,85,13,171,82,12,98,12,101,74,49,26,221,54,164,83,42,150,150,215, 10,223,100,225,188,48,231,68,88,72,36,209,220,232,130,181,204,42,132,67,225,51,70,137,7,41,120,235,45,210,117,246, 81,149,221,37,181,182,54,227,198,208,36,56,123,144,87,145,115,216,42,20,112,198,178,117,64,12,196,24,86,83,234,186, 111,178,115,130,73,22,81,91,109,133,44,8,224,140,16,28,159,197,97,223,126,212,185,93,178,78,236,211,223,158,192,213, 171,122,125,189,119,96,121,121,209,207,4,19,111,110,116,98,62,177,84,200,125,185,165,4,205,245,59,64,68,88,76,174, 224,202,181,0,198,166,230,145,74,169,133,221,154,100,17,12,217,230,100,171,84,240,236,30,55,146,203,107,72,165,51,216, 183,219,133,196,92,28,125,125,215,83,200,104,175,230,79,96,93,10,166,38,6,238,120,26,90,71,102,98,81,191,217,98, 229,77,13,78,220,189,151,4,39,194,174,134,26,84,150,149,130,17,67,40,150,192,226,210,202,131,156,115,66,133,181,4, 109,207,55,98,109,85,133,36,114,212,213,150,67,49,155,80,93,105,198,254,221,78,68,67,97,156,59,255,97,42,147,86, 79,94,253,242,236,103,91,22,225,212,248,192,168,167,161,117,36,30,139,250,45,214,50,190,211,227,192,210,242,26,246,63, 227,130,32,16,136,17,130,147,179,80,85,173,80,108,2,113,232,58,208,224,172,66,173,205,10,103,109,5,44,102,19,136, 8,149,229,165,24,25,30,197,63,206,93,78,111,132,111,42,96,148,152,142,70,252,86,107,57,63,122,112,55,100,89,0, 67,182,251,217,42,21,36,147,107,40,41,150,80,95,87,133,213,149,20,158,105,178,67,49,155,10,29,146,136,80,102,41, 198,224,208,109,244,252,253,114,58,147,86,95,219,8,223,82,96,189,68,180,179,185,201,195,157,142,26,164,83,42,136,8, 178,40,64,18,57,100,81,64,131,179,26,110,71,37,148,210,34,16,35,176,28,220,170,152,48,56,20,64,79,207,229,116, 38,157,222,20,254,80,129,188,132,171,222,59,50,60,28,232,116,56,106,72,42,50,97,240,86,12,153,140,134,88,252,30, 150,146,171,112,218,203,193,11,13,42,11,87,204,121,120,239,67,225,143,20,0,128,208,68,255,168,211,179,119,100,104,232, 182,159,139,197,188,178,170,28,247,151,83,80,211,26,154,118,238,128,82,106,2,203,117,71,34,6,115,105,81,246,216,123, 122,211,170,150,57,249,245,23,239,110,9,223,150,64,78,34,104,119,182,4,98,145,200,201,138,138,42,254,114,219,30,216, 119,88,97,46,41,42,180,102,34,134,210,146,34,12,15,7,240,94,79,111,122,117,109,229,116,223,151,239,253,51,183,132, 254,36,2,4,64,2,80,4,64,14,79,14,133,170,108,158,224,108,60,126,130,139,37,188,169,209,9,77,211,11,69,87, 82,44,99,104,56,128,119,123,46,169,139,191,46,252,249,135,190,75,87,1,8,57,70,190,225,105,219,21,16,1,200,27, 99,58,18,8,91,202,107,39,98,177,217,227,110,151,157,219,107,170,161,105,58,138,77,89,248,217,158,75,234,194,124,244, 47,253,63,126,220,103,128,231,5,8,217,107,128,110,60,145,205,4,120,78,64,50,68,65,98,102,58,24,43,85,42,38, 127,25,139,190,228,114,216,169,206,97,195,224,208,109,156,237,185,164,198,167,39,222,24,233,191,114,61,7,55,66,141,247, 15,29,64,230,81,2,66,78,66,200,9,228,133,100,0,242,220,204,68,188,200,100,14,7,39,166,219,18,137,69,250,248, 211,43,153,104,248,206,155,163,195,95,223,48,64,141,64,45,23,25,195,184,165,128,102,176,231,134,49,47,198,1,136,11, 115,161,184,44,149,196,18,191,174,30,142,132,110,253,53,24,184,126,99,3,72,221,16,105,67,20,82,240,176,171,89,190, 14,36,195,104,12,209,32,152,223,101,30,144,218,16,107,134,113,93,33,110,231,110,152,79,135,132,245,169,201,195,141,133, 149,49,236,222,40,179,110,215,143,43,176,217,63,70,120,126,141,141,185,222,214,243,31,50,77,124,34,176,20,164,223,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char File1x[741] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,0,18,116,69,88,116,84,105,116,108,101,0,80,97,112,101,114,32,83, 104,101,101,116,115,185,175,145,249,0,0,0,23,116,69,88,116,65,117,116,104,111,114,0,76,97,112,111,32,67,97,108, 97,109,97,110,100,114,101,105,223,145,26,42,0,0,0,39,116,69,88,116,68,101,115,99,114,105,112,116,105,111,110,0, 119,105,116,104,32,97,32,72,85,71,69,32,104,101,108,112,32,102,114,111,109,32,74,97,107,117,98,134,84,7,179,0, 0,1,238,73,68,65,84,56,141,133,147,77,107,83,65,20,134,159,51,247,166,26,80,209,104,177,181,136,27,107,55,138, 127,64,68,220,248,1,42,184,240,71,40,226,170,11,23,130,63,65,20,44,85,132,46,42,22,63,176,208,160,155,254,27, 181,177,109,154,144,80,53,201,153,153,227,226,222,155,220,166,130,7,14,51,12,243,62,231,61,51,28,49,51,234,95,87, 111,136,200,98,8,241,52,24,102,134,25,128,1,252,1,89,143,49,60,191,123,231,222,58,227,97,102,172,174,125,252,190, 211,106,90,140,113,95,14,6,125,219,104,252,176,181,47,171,191,87,62,188,125,156,193,71,233,0,250,253,254,204,177,163, 53,118,127,237,210,233,182,217,105,111,179,213,108,176,241,243,27,155,219,13,186,157,14,55,175,221,170,78,158,152,124,178, 252,110,105,190,108,192,1,168,122,0,66,80,124,240,132,16,178,140,17,245,202,86,115,19,231,28,87,46,95,173,30,152, 56,248,244,205,210,171,75,99,0,5,216,39,142,49,16,99,36,196,192,251,79,43,212,235,117,46,156,191,88,197,108,126, 15,192,171,2,150,139,125,46,204,196,209,34,83,211,83,204,205,205,50,115,230,20,206,57,233,245,122,215,95,188,124,150, 236,113,96,249,131,154,25,6,8,130,147,81,86,171,85,142,28,62,196,236,217,115,168,250,68,85,43,0,105,249,13,138, 16,192,4,16,65,196,145,166,46,59,23,161,40,24,45,50,2,120,45,62,53,147,11,8,142,196,9,137,75,70,224,2, 224,21,139,86,2,104,1,112,56,103,24,130,12,189,148,151,108,227,189,39,134,184,23,32,128,115,110,120,187,168,38,185, 163,50,64,213,19,67,40,3,60,32,164,105,2,150,139,165,228,162,0,152,32,34,120,85,66,25,224,243,22,146,36,29, 86,23,100,228,34,95,45,27,16,84,149,48,222,2,64,226,146,76,92,206,146,131,108,182,254,1,16,145,70,187,221,154, 174,213,142,243,191,232,118,59,128,180,212,107,63,107,203,140,135,143,30,220,78,43,233,130,14,6,39,205,192,48,200,71, 186,188,7,163,82,153,216,86,213,251,139,11,175,63,3,252,5,198,186,65,227,184,230,144,207,0,0,0,0,73,69,78, 68,174,66,96,130, }; const unsigned char File2x[1342] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,0,18,116,69,88,116,84,105,116,108,101,0,80,97,112,101,114,32,83, 104,101,101,116,115,185,175,145,249,0,0,0,23,116,69,88,116,65,117,116,104,111,114,0,76,97,112,111,32,67,97,108, 97,109,97,110,100,114,101,105,223,145,26,42,0,0,0,39,116,69,88,116,68,101,115,99,114,105,112,116,105,111,110,0, 119,105,116,104,32,97,32,72,85,71,69,32,104,101,108,112,32,102,114,111,109,32,74,97,107,117,98,134,84,7,179,0, 0,4,71,73,68,65,84,88,195,197,87,77,107,36,85,20,61,247,117,119,58,213,233,84,156,24,69,226,4,50,42,126, 164,231,63,136,46,20,68,24,21,71,112,239,70,119,130,11,183,34,35,184,14,40,184,49,132,97,132,12,204,66,144,129, 1,127,195,68,6,52,66,86,58,147,196,40,249,48,31,83,211,211,239,30,23,245,222,171,87,213,221,73,103,16,166,160, 40,186,186,186,207,185,247,156,251,81,66,18,143,243,48,120,204,71,189,122,227,214,207,55,223,81,181,223,169,234,83,0, 224,51,148,95,24,174,229,239,8,17,233,137,200,31,74,254,212,165,253,250,242,219,151,239,141,66,64,170,18,220,188,245, 227,159,175,189,250,198,249,241,230,248,144,159,16,17,135,112,220,207,142,241,247,63,219,216,216,220,232,110,109,109,244,64, 249,248,221,75,239,47,159,57,3,189,158,125,166,57,214,196,253,236,24,170,10,85,5,65,80,1,82,65,40,168,132,82, 65,42,148,132,170,162,94,175,35,77,167,144,36,227,99,211,211,231,198,214,214,126,255,118,229,198,15,157,15,222,251,240, 243,126,186,39,120,64,85,195,85,85,65,18,84,230,192,80,168,50,39,194,92,14,42,1,2,221,110,23,135,135,7,104, 79,164,152,62,55,131,206,194,66,43,73,146,79,86,174,95,187,14,64,70,38,96,109,68,192,69,73,20,128,65,2,175, 161,228,255,45,16,0,196,230,214,38,166,159,152,70,123,50,197,194,43,11,237,250,88,227,205,107,43,87,191,56,67,6, 172,51,150,7,173,158,222,144,49,137,60,70,49,6,89,118,12,64,48,213,158,66,163,209,64,167,211,105,67,249,217,242, 242,247,151,206,38,129,3,84,39,65,142,90,156,225,163,39,1,192,136,160,86,171,67,4,72,146,22,90,201,4,90,201, 4,58,23,47,38,48,122,117,105,105,105,252,84,19,122,9,200,220,108,33,233,172,38,63,198,47,36,54,70,240,203,157, 219,56,60,60,66,150,101,72,167,166,48,55,55,135,86,187,173,123,123,123,111,1,184,49,162,4,204,221,239,83,239,16, 139,178,101,201,90,226,164,168,213,106,16,49,168,25,3,146,184,119,247,46,182,255,218,198,75,47,190,156,214,196,124,116, 186,4,33,3,229,166,83,138,159,94,248,178,7,0,65,171,213,194,204,204,147,120,118,238,60,46,60,119,1,243,243,243, 216,217,217,193,243,243,47,160,251,240,225,235,139,139,139,205,19,37,80,106,145,94,18,148,24,20,16,34,191,231,18,64, 199,64,2,39,129,49,6,117,0,205,177,38,38,219,147,152,157,157,69,146,180,32,16,88,107,19,0,15,78,240,128,141, 0,115,52,138,251,115,250,124,8,196,51,145,56,13,101,73,170,213,175,3,6,223,16,19,22,253,95,92,212,136,34,12, 18,136,175,255,1,104,3,154,31,93,133,157,44,65,120,136,16,145,64,34,64,73,145,242,161,161,198,36,88,60,55,18, 1,47,129,72,30,169,24,7,93,34,33,229,152,69,6,98,123,163,208,253,210,82,1,236,143,146,1,129,136,1,132,14, 188,0,14,208,65,254,33,209,75,81,57,18,85,216,254,169,18,184,50,52,34,32,4,82,5,23,41,116,47,121,96,200, 232,142,172,96,213,86,19,48,64,2,245,18,24,8,24,0,165,98,186,210,16,26,194,33,95,84,226,224,70,168,2,159, 1,49,2,176,12,28,64,93,231,233,51,103,165,0,40,149,205,233,44,85,224,35,19,41,3,199,224,125,230,140,244,207, 181,167,171,162,156,128,165,29,161,10,212,150,83,236,53,143,200,4,99,246,153,179,212,52,243,78,10,130,238,91,159,221, 83,36,96,225,226,168,134,99,240,144,137,62,127,160,188,192,250,18,117,18,88,85,0,123,167,16,112,105,146,190,38,227, 183,14,9,211,39,38,227,73,248,22,78,22,89,40,130,235,85,224,79,48,97,209,138,89,73,71,156,227,114,207,41,221, 96,188,190,68,109,126,127,200,56,150,252,48,222,132,3,95,152,220,98,228,118,162,210,198,164,84,80,243,51,236,146,110, 151,40,36,32,118,119,119,107,34,69,113,214,61,184,35,211,240,173,56,76,127,14,235,241,110,74,146,160,111,219,213,49, 20,150,26,247,209,170,172,175,175,79,0,56,16,145,30,73,173,87,228,72,65,238,28,28,252,251,116,154,166,67,166,220, 163,29,89,150,33,235,102,118,117,117,53,117,3,225,72,68,88,47,59,12,141,219,171,119,190,185,242,213,151,159,82,48, 137,234,107,89,136,170,124,29,244,234,54,224,217,236,183,95,215,86,142,142,142,154,46,88,3,192,138,123,175,19,119,51, 1,144,2,104,3,104,68,15,202,35,166,194,59,218,2,232,185,77,232,192,157,15,2,1,231,3,227,192,76,4,250,127, 105,16,109,178,80,71,72,73,242,63,40,12,148,104,246,75,213,115,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Folder1x[581] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,1,194,73,68,65,84,56,141,165,144,49,107,147,81,20,134,159,115,239, 87,44,41,226,224,16,186,20,28,156,50,118,235,46,153,28,130,208,213,95,160,187,208,63,224,226,86,87,255,135,40,196, 185,96,196,89,41,138,36,146,80,105,191,38,37,223,189,231,158,227,144,38,54,88,90,193,119,57,220,123,207,121,238,121, 95,233,118,187,252,143,170,221,221,221,55,238,254,248,154,183,11,119,127,50,24,12,142,110,4,152,89,175,215,235,221,51, 51,204,12,119,7,224,244,244,244,126,191,223,63,236,116,58,207,151,205,57,103,66,8,101,56,28,126,172,235,186,0,84, 57,103,87,85,38,147,9,165,148,21,36,132,192,246,246,118,7,120,187,132,2,76,167,211,170,148,242,170,174,235,131,43, 128,140,170,98,102,107,144,118,187,221,218,220,220,164,213,106,17,99,36,132,192,104,52,98,60,30,63,92,89,80,85,83, 45,28,126,72,204,154,63,63,129,0,224,204,129,249,234,214,61,0,123,251,236,236,237,199,24,190,85,57,103,79,41,49, 109,156,151,207,30,33,114,217,120,53,41,95,59,1,144,212,57,120,253,126,167,74,41,153,170,2,78,12,240,233,248,236, 234,2,203,178,158,124,20,30,180,183,64,220,43,85,37,231,140,136,16,131,16,227,117,35,235,202,106,184,57,130,120,149, 115,182,156,51,184,19,68,216,184,1,160,197,105,178,81,204,9,65,0,22,0,213,197,6,243,84,8,128,249,162,185,184, 99,230,152,59,89,23,117,105,161,73,182,2,184,106,65,164,98,82,55,12,127,205,105,212,110,180,80,69,97,114,54,95, 0,84,213,82,74,224,145,47,163,115,78,166,13,127,103,190,174,24,132,159,103,151,22,68,196,204,12,17,161,201,70,235, 78,117,107,136,34,194,69,82,128,82,185,59,199,39,134,8,124,254,58,186,117,120,169,217,108,142,192,81,101,27,91,253, 119,199,119,159,130,243,227,251,248,159,1,34,140,69,194,139,223,71,22,33,158,28,99,167,49,0,0,0,0,73,69,78, 68,174,66,96,130, }; const unsigned char Folder2x[1176] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,4,21,73,68,65,84,88,133,237,151,61,111,28,69,24,199,127,51,187, 119,123,175,246,57,145,48,9,5,86,148,194,31,0,9,5,33,83,110,149,130,26,137,2,90,58,62,64,36,62,64,74, 132,68,133,104,161,67,72,167,64,23,201,138,2,138,210,69,194,198,196,40,22,198,247,186,119,222,151,153,157,25,138,123, 201,58,119,142,19,114,82,40,248,75,143,118,118,118,247,121,126,243,60,51,179,187,34,12,67,94,167,228,107,141,254,95, 0,240,1,110,220,184,225,43,165,126,54,198,188,119,209,3,66,136,220,90,251,249,195,135,15,191,92,25,64,154,166,91, 149,74,229,157,155,55,111,250,73,146,224,156,3,192,90,11,48,63,159,182,253,59,119,238,220,222,222,222,254,254,209,163, 71,199,43,1,80,74,101,213,106,213,29,29,29,209,233,116,112,206,45,53,0,33,4,155,155,155,249,193,193,193,71,192, 237,149,0,104,173,211,44,203,196,165,75,27,24,99,176,214,158,9,92,204,132,16,130,106,181,90,63,60,60,252,98,123, 123,251,214,172,127,153,156,115,218,90,251,241,222,222,222,143,207,5,0,178,44,203,188,78,167,75,167,211,153,3,204,142, 179,32,197,64,91,91,91,245,70,163,65,179,217,68,8,129,16,2,0,41,229,188,29,69,17,247,238,221,187,5,60,31, 224,242,229,203,105,191,223,247,54,54,90,104,173,23,0,150,149,98,166,56,142,1,230,16,69,139,227,24,99,76,237,188, 224,115,128,221,221,93,117,237,218,53,217,235,245,230,25,0,150,130,204,178,81,212,108,196,197,224,82,202,25,64,229,66, 0,0,99,140,109,54,215,100,154,102,220,63,180,220,221,63,27,228,188,58,63,171,25,204,228,153,22,206,93,185,206,219, 31,232,226,61,158,39,190,93,255,253,155,79,206,0,56,231,116,183,219,245,187,221,46,143,59,13,62,253,240,93,174,191, 181,81,112,54,61,62,47,250,18,200,105,207,60,206,147,206,152,175,190,187,255,254,236,188,152,1,221,104,212,171,90,107, 212,31,146,102,181,204,254,223,99,162,56,159,140,108,233,104,207,35,17,11,77,1,52,42,62,42,211,8,65,103,118,121, 190,21,27,99,116,191,63,160,219,237,18,103,150,122,181,132,53,147,27,228,212,193,179,134,59,207,220,83,179,19,179,214, 145,100,134,52,203,193,137,249,6,86,44,65,86,169,4,180,90,45,50,35,168,5,37,172,83,120,114,53,175,139,113,154, 83,111,250,140,134,57,214,186,39,11,0,121,158,171,40,26,209,239,15,208,230,13,170,129,143,115,14,79,158,155,231,23, 147,131,81,170,209,185,37,240,37,113,170,173,49,249,209,2,128,49,38,43,151,75,84,155,27,172,213,202,56,64,10,177, 188,248,47,40,227,28,163,84,147,91,135,231,9,130,178,199,105,146,41,33,196,201,2,128,181,54,27,141,198,28,15,20, 235,245,75,232,220,190,210,232,51,109,137,51,3,78,224,79,253,148,61,201,232,84,229,130,167,147,176,152,129,212,247,125, 188,32,160,73,153,76,217,11,131,76,230,152,195,186,201,62,97,236,196,84,110,151,173,72,156,131,193,40,181,185,115,139, 0,214,218,100,60,30,211,25,248,84,90,101,162,68,147,233,233,75,8,200,141,69,27,135,206,45,185,153,110,203,47,153, 149,68,25,134,227,196,19,210,91,90,130,84,8,129,12,26,148,74,62,163,68,19,37,154,84,25,148,182,47,29,108,153, 226,44,231,52,209,62,231,148,32,142,227,83,122,81,133,74,13,30,159,196,12,99,189,212,209,191,145,0,134,177,66,25, 83,250,245,234,94,47,124,252,12,128,181,54,6,129,245,107,100,185,37,138,53,74,95,60,15,94,84,82,10,78,134,9, 82,200,56,220,221,157,59,62,51,7,146,36,33,74,12,87,175,4,84,3,143,160,188,186,111,86,41,4,105,170,144,82, 12,139,253,197,18,36,0,154,18,235,85,143,122,105,21,85,127,42,231,28,253,36,65,88,59,88,0,104,183,219,98,103, 103,199,68,177,98,112,234,248,243,100,136,236,190,226,14,184,68,199,199,67,155,36,195,7,187,237,118,45,12,195,120,14, 0,120,81,20,253,244,203,161,248,76,173,227,255,182,255,202,31,187,103,228,192,2,88,157,30,28,63,248,225,235,226,53, 49,251,53,107,183,219,205,96,109,237,205,90,208,218,116,56,41,133,92,201,18,200,141,49,42,75,107,185,16,121,62,58, 233,1,127,133,97,216,91,0,152,66,72,32,96,146,153,124,21,0,83,5,64,10,168,48,12,207,44,45,241,255,207,233, 235,6,248,7,188,50,165,151,203,8,55,43,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FolderOpen1x[625] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,1,238,73,68,65,84,56,141,165,147,59,79,148,65,20,134,159,153,239, 219,93,195,71,178,33,94,18,27,45,181,48,33,86,212,118,22,90,108,225,63,48,177,163,38,196,206,146,248,11,44,164, 129,127,161,198,80,24,45,76,136,196,196,74,140,72,34,176,11,24,216,203,156,51,231,88,44,139,44,40,20,158,100,170, 57,239,115,46,239,76,112,119,254,39,194,252,252,252,75,119,127,248,151,187,174,136,60,90,88,88,120,127,46,96,110,110, 110,175,213,106,53,205,12,51,99,212,81,167,211,97,101,101,229,85,85,85,15,70,201,235,235,235,0,44,46,46,14,252, 40,177,20,17,87,85,182,183,183,201,57,143,65,106,181,218,76,187,221,62,112,119,220,157,170,170,112,119,102,103,103,63, 1,119,79,0,4,85,197,204,198,32,211,211,211,147,83,83,83,84,85,69,81,20,196,24,233,118,187,44,45,45,221,25, 117,85,170,170,169,102,114,254,115,70,0,17,161,219,237,18,66,32,132,64,140,17,128,148,210,241,230,75,17,241,148,210, 24,32,231,204,168,109,119,63,3,80,213,227,37,150,41,37,83,85,114,206,44,127,140,236,245,34,80,59,215,58,171,238, 215,102,158,44,247,66,140,95,75,85,69,68,200,57,179,219,139,60,125,124,143,34,134,35,143,128,127,188,147,164,118,233, 217,139,183,183,75,17,49,17,193,204,8,56,19,141,130,181,239,191,112,31,234,9,167,124,7,98,12,220,184,60,65,8, 88,41,34,166,58,4,20,49,80,196,64,12,225,140,240,68,101,250,253,76,188,10,128,31,217,56,92,90,89,20,20,49, 208,40,227,25,225,64,140,94,202,100,115,26,69,28,141,105,165,170,90,74,137,131,1,52,39,235,108,237,15,232,167,140, 251,176,218,64,51,73,109,108,21,101,17,216,218,235,15,71,8,33,152,153,241,101,167,206,245,107,77,118,15,133,190,24, 189,164,199,162,211,35,197,16,216,216,57,36,134,184,85,186,195,234,38,172,254,172,115,171,89,231,205,234,15,178,93,252, 67,59,237,125,178,219,235,50,55,174,188,251,176,89,221,4,103,237,243,183,11,133,39,98,3,179,231,191,1,223,162,81, 163,208,43,119,152,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FolderOpen2x[1184] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,4,29,73,68,65,84,88,133,205,151,205,139,28,69,24,135,159,234,233, 249,218,153,217,221,201,230,3,226,193,69,242,71,136,135,28,188,228,148,163,32,10,222,221,139,1,79,57,45,17,9,4, 84,114,72,4,239,66,254,128,16,69,163,39,81,201,69,48,7,13,38,176,184,230,147,157,217,233,249,216,254,170,122,235, 245,144,244,48,155,153,221,108,178,43,235,11,47,221,116,117,245,239,169,95,189,69,85,27,85,229,48,35,56,84,245,255, 3,64,8,112,225,194,133,48,207,243,31,69,228,173,23,117,48,198,56,239,253,199,151,46,93,250,242,32,0,140,170,114, 254,252,249,83,181,90,237,247,179,103,207,206,37,73,66,81,23,222,123,0,38,235,68,85,185,121,243,102,182,181,181,245, 250,229,203,151,159,236,23,32,4,200,243,60,171,215,235,250,240,225,67,58,157,14,170,58,51,1,140,49,156,56,113,194, 173,173,173,189,15,124,113,32,0,214,218,52,203,50,115,228,72,27,17,193,123,191,77,120,210,9,99,12,245,122,189,177, 190,190,254,201,185,115,231,86,139,231,179,66,85,173,247,254,131,43,87,174,124,179,43,0,144,101,89,86,234,116,186,116, 58,157,49,64,113,45,68,38,133,150,151,151,27,205,102,147,86,171,133,49,6,99,12,0,65,16,140,239,7,131,1,183, 110,221,90,5,118,7,88,90,90,74,123,189,94,169,221,94,196,90,59,5,48,107,42,138,136,227,24,96,12,49,153,113, 28,35,34,115,59,137,143,1,86,87,87,243,149,149,149,96,115,115,115,236,0,48,19,164,112,99,50,138,17,79,138,7, 65,80,0,212,94,8,0,32,34,190,213,154,15,210,52,195,123,191,171,11,147,16,179,196,139,44,151,203,56,231,170,123, 2,80,85,219,237,118,195,110,183,59,5,48,233,198,44,7,118,2,200,243,28,17,217,27,128,136,216,102,179,81,47,106, 224,249,220,173,14,158,119,161,40,196,103,0,149,61,3,244,122,17,133,3,185,83,190,91,63,74,230,130,29,71,189,83, 20,64,80,67,26,103,22,222,252,240,90,127,178,189,20,152,27,63,95,125,247,189,109,0,170,154,213,106,85,22,23,23, 17,17,250,137,226,77,200,167,43,111,239,89,120,39,30,96,30,64,129,78,148,240,249,215,191,158,41,26,199,0,206,185, 124,48,24,18,69,17,170,74,47,49,52,235,11,24,19,112,251,239,104,191,16,0,84,203,1,141,208,80,42,153,199,83, 0,34,146,85,42,229,177,3,137,129,134,45,147,228,14,241,251,63,51,168,66,37,132,238,32,1,53,235,83,0,222,251, 108,56,28,21,107,151,40,46,83,41,159,100,16,59,172,219,31,128,170,146,230,158,90,185,196,70,47,193,138,220,157,2, 16,145,52,12,67,22,22,22,16,17,30,101,1,245,185,42,131,196,146,59,217,135,56,164,86,16,175,56,41,179,17,109, 89,175,186,54,5,224,189,79,70,163,17,206,57,68,132,7,253,54,175,29,111,48,74,28,153,245,175,44,158,88,193,63, 155,66,43,158,110,63,78,21,238,207,2,72,141,49,180,219,109,156,115,244,31,207,113,170,94,97,152,58,114,121,57,0, 239,33,23,143,117,219,251,89,81,186,253,216,171,215,127,166,0,68,36,142,227,45,172,181,164,214,211,79,154,212,107,21, 250,113,190,167,34,244,30,156,247,136,40,110,198,251,97,96,232,111,229,12,71,105,189,170,149,191,102,57,16,195,83,7, 126,187,15,199,150,230,137,51,79,146,109,31,133,87,69,188,162,10,226,21,175,138,247,202,11,17,203,1,15,158,244,9, 2,115,231,151,175,222,217,156,5,144,36,73,66,175,23,113,251,201,113,150,223,152,103,115,16,147,59,143,149,98,100,158, 87,61,197,139,11,216,216,232,165,222,251,107,219,156,25,191,32,146,0,220,29,29,165,84,46,83,9,21,103,115,212,123, 66,32,44,65,181,244,106,226,0,206,89,162,104,168,163,71,127,124,63,5,96,140,49,167,79,159,150,123,81,131,53,91, 162,214,12,233,245,71,4,129,153,253,181,151,12,85,37,138,210,44,237,119,110,252,121,253,98,207,152,139,115,170,26,143, 1,128,210,96,48,248,225,222,232,200,71,90,194,12,163,132,97,148,28,136,56,128,130,207,162,7,63,221,249,246,179,171, 64,121,178,205,76,28,44,90,173,163,39,79,134,38,60,166,104,16,152,192,30,132,184,19,145,120,43,170,185,116,148,2, 35,224,177,170,142,139,208,76,110,179,198,152,0,168,242,212,25,119,16,0,207,162,10,164,64,174,170,219,150,149,121,153, 125,254,191,136,67,255,55,60,116,128,127,1,16,0,26,26,62,130,17,220,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FolderTemplate1x[429] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,1,42,73,68,65,84,56,141,165,147,189,78,66,65,16,133,207,254,112, 67,110,76,172,120,0,236,180,161,247,13,160,208,6,223,194,119,241,5,76,72,40,120,1,11,254,172,165,177,176,39,177, 177,147,144,72,65,76,238,236,156,177,187,202,37,144,92,60,201,169,102,231,219,57,217,89,103,102,248,143,226,124,62,123, 4,236,182,90,32,177,85,213,126,175,215,123,61,6,112,211,233,228,171,221,190,56,15,33,236,20,54,155,13,86,171,213, 76,85,111,170,77,221,110,183,0,96,0,224,85,213,154,205,38,242,60,223,113,171,213,66,8,225,154,212,109,213,147,201, 248,173,140,32,34,230,189,71,140,113,55,91,140,232,116,58,103,251,209,136,197,226,229,170,60,151,82,98,8,97,15,112, 72,36,33,34,191,23,29,154,224,56,32,253,5,36,214,1,152,25,72,229,112,56,252,246,222,191,71,17,65,157,8,0, 208,239,223,101,170,9,163,209,232,50,170,10,157,3,170,207,120,76,33,4,144,17,69,33,244,69,145,72,214,223,70,51, 131,136,152,23,17,35,89,27,64,18,41,37,122,85,229,41,255,161,4,0,56,9,176,94,175,209,104,52,62,61,0,168, 106,109,192,114,185,52,85,125,142,206,185,167,193,96,112,95,23,144,101,217,135,136,60,252,0,218,142,189,133,140,36,139, 153,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char FolderTemplate2x[772] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,129,73,68,65,84,88,133,237,151,177,110,19,65,16,134,255,221,189, 156,157,24,26,36,139,23,8,138,197,3,240,6,1,43,125,92,208,211,165,227,17,120,4,20,202,180,73,149,14,89,17, 5,70,138,76,77,19,132,100,217,33,70,81,10,11,139,203,217,222,187,189,153,161,72,46,114,18,99,159,149,51,161,96, 164,45,110,52,187,243,237,191,179,186,89,37,34,184,79,211,247,154,253,95,0,240,0,160,209,104,120,113,28,125,18,145, 103,25,230,36,34,120,93,173,86,223,229,1,160,68,4,7,7,7,171,74,225,203,234,234,147,149,153,217,147,4,157,78, 59,18,65,165,90,173,30,223,21,64,3,128,82,42,210,90,179,214,26,179,134,239,251,40,149,74,78,41,169,221,53,57, 112,169,64,189,94,47,27,163,190,87,42,79,151,179,76,138,162,8,199,199,157,1,17,209,140,208,152,89,94,110,108,108, 124,248,83,128,151,174,73,196,90,41,149,137,186,88,44,98,109,173,82,34,74,166,198,5,193,57,78,79,79,223,0,152, 14,16,134,161,45,20,124,79,235,249,46,133,49,102,6,104,12,102,154,90,87,26,0,54,55,55,99,17,209,89,106,96, 158,97,140,1,51,23,167,1,164,71,0,34,38,0,115,171,48,205,140,241,64,148,17,64,132,93,254,0,6,204,137,159, 9,128,153,29,128,229,60,1,60,207,67,146,112,54,0,17,56,17,65,158,0,190,239,131,153,30,236,237,237,254,26,247, 107,109,222,215,106,181,151,55,0,56,202,27,64,107,141,245,245,231,75,68,180,148,250,134,195,1,154,205,207,47,210,239, 177,35,144,56,111,0,224,66,133,113,11,195,16,0,206,38,0,112,196,204,185,3,220,52,107,45,152,249,100,34,192,34, 20,184,105,195,225,16,206,185,214,36,0,251,55,20,24,12,6,113,28,199,157,73,0,35,102,90,56,64,16,4,150,153, 187,183,0,68,196,18,45,94,129,32,8,132,153,127,220,2,32,162,33,209,98,21,32,34,244,251,253,101,231,220,183,137, 0,73,50,253,247,122,87,235,118,187,48,198,124,221,218,218,250,153,250,174,182,235,156,27,45,26,160,213,106,141,70,163, 209,238,184,239,26,128,115,110,97,201,173,181,56,58,58,66,187,221,190,214,156,164,61,161,58,63,15,40,142,227,133,36, 143,162,8,251,251,251,113,175,215,171,111,111,111,247,149,82,87,77,74,90,3,230,228,164,251,177,217,108,190,58,60,60, 204,212,23,2,192,60,175,170,94,175,215,216,217,217,121,11,96,105,220,175,210,69,148,82,15,203,229,242,99,102,126,116, 217,29,229,117,30,202,90,187,18,134,161,5,16,2,56,19,145,171,34,84,227,187,80,74,105,0,5,92,40,147,103,69, 22,0,88,0,177,136,240,53,186,255,143,211,251,6,248,13,135,18,101,93,66,12,61,82,0,0,0,0,73,69,78,68, 174,66,96,130, }; const unsigned char Font1x[627] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,5,73,68,65,84,56,141, 157,147,205,75,148,81,20,198,127,51,119,26,103,116,104,132,176,15,130,138,172,137,92,181,16,218,106,6,173,219,105,229, 190,93,224,127,16,109,6,134,105,33,17,33,180,210,162,77,68,84,16,168,45,114,81,65,37,83,145,31,73,58,99,56, 78,227,152,54,239,124,221,251,222,247,180,136,25,169,209,192,14,28,184,220,115,249,61,231,121,224,250,18,201,248,85,32, 97,173,141,176,139,82,74,57,192,16,137,100,188,88,169,148,197,243,188,93,181,83,114,36,145,140,23,253,214,218,72,40, 20,102,108,98,14,128,177,137,57,68,132,209,241,89,60,207,50,58,62,67,177,92,101,248,233,60,90,107,180,174,81,171, 85,105,107,109,195,90,27,241,215,87,186,114,254,20,0,151,251,98,136,8,151,206,157,68,68,24,232,61,193,147,183,171, 164,243,37,106,198,34,34,136,72,195,74,3,80,87,254,187,231,87,138,188,251,186,129,118,45,217,245,202,206,128,186,242, 214,3,161,102,44,83,51,5,180,54,24,237,178,178,94,218,221,6,227,169,60,61,93,251,136,134,20,218,184,44,231,255, 1,168,123,174,171,103,214,202,212,140,203,209,142,48,29,123,131,104,227,146,206,57,59,3,238,77,206,55,134,174,245,120, 254,62,199,133,51,29,136,8,7,219,131,104,237,178,148,43,54,1,2,245,195,64,111,103,99,56,249,33,207,199,244,6, 67,119,215,208,198,160,181,139,49,46,217,82,133,82,85,19,14,6,154,1,247,95,44,208,223,211,73,110,179,74,106,241, 7,55,6,78,227,67,240,60,97,41,87,228,250,88,10,109,44,153,239,14,177,195,209,102,11,253,61,199,241,196,227,193, 203,12,23,207,30,162,173,69,17,14,42,90,91,20,7,218,67,104,227,162,141,203,98,246,231,246,25,120,158,240,248,205, 10,1,37,28,219,223,250,71,160,126,31,191,1,218,101,250,75,1,216,6,240,240,213,55,166,62,231,89,93,175,242,122, 54,223,0,204,45,111,50,252,232,19,65,191,16,218,227,99,122,161,192,200,179,217,173,12,148,82,78,185,92,138,12,246, 197,24,236,163,169,186,187,162,116,119,29,105,186,119,28,7,165,148,19,0,134,110,223,185,117,243,63,191,243,181,95,46, 181,156,109,120,254,28,88,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Font2x[1121] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,24,73,68,65,84,88,133,197,151,203,111,27, 69,28,199,63,235,212,33,206,131,60,169,162,34,46,165,68,2,212,107,203,177,18,226,218,188,91,241,79,128,4,55,206, 164,74,83,132,128,43,18,28,56,180,182,99,59,85,40,66,1,21,16,66,170,42,90,41,16,30,45,1,218,6,165,105, 94,78,156,216,251,156,249,113,176,119,99,199,143,216,169,10,63,105,52,187,179,179,251,253,206,231,55,51,187,11,255,115, 24,254,193,135,31,189,31,53,45,115,188,184,237,9,133,68,90,34,241,55,223,120,235,124,73,235,197,75,23,180,252,71, 113,241,210,5,237,235,134,2,91,34,37,35,143,198,46,83,116,45,40,90,107,180,214,40,165,80,74,225,121,30,158,231, 225,186,110,161,56,56,142,131,227,216,216,182,141,109,91,88,150,133,101,153,152,166,89,166,117,164,26,167,243,231,94,15, 196,11,54,200,31,86,175,139,251,151,215,123,125,138,35,180,191,193,31,121,52,118,25,17,33,22,191,2,8,209,88,190, 142,197,163,128,16,159,142,1,194,116,34,14,8,137,100,28,17,33,145,156,70,68,72,166,18,136,8,169,153,36,34,194, 204,213,68,69,3,65,76,78,77,148,228,73,107,93,40,74,148,82,162,148,39,158,231,137,231,185,226,186,174,184,174,35, 142,227,136,227,216,226,56,182,216,182,37,182,109,137,101,153,98,89,166,152,102,78,76,51,39,185,92,86,114,185,172,100, 179,187,146,205,238,138,136,200,228,212,68,224,164,140,128,143,45,22,191,82,200,251,193,248,139,113,123,74,184,185,184,85, 49,13,117,165,192,239,60,62,230,175,146,198,114,255,195,157,13,110,252,145,174,40,46,21,50,80,147,64,163,226,59,166, 203,119,191,166,89,223,113,209,133,85,179,127,16,13,17,104,20,255,220,79,235,88,174,194,83,154,244,174,27,180,151,222, 87,39,129,248,116,180,33,2,203,105,139,197,149,108,240,140,181,140,243,184,4,206,213,45,46,192,181,219,107,140,156,234, 15,246,241,213,140,83,38,94,55,129,226,117,94,79,238,23,30,100,104,111,105,226,248,209,8,93,109,225,188,129,109,187, 226,42,170,139,128,8,140,141,142,215,149,123,215,83,124,253,243,6,175,157,236,5,160,175,35,140,82,154,71,91,214,227, 17,240,119,184,131,8,124,255,251,22,3,199,90,233,105,15,35,34,244,117,132,209,90,179,178,101,85,189,239,0,3,249, 206,163,35,99,7,138,103,76,143,91,127,109,115,230,197,222,128,200,51,29,97,148,22,114,150,98,59,231,53,78,192,239, 92,139,128,47,54,55,191,198,233,19,157,180,132,141,192,84,223,211,205,104,165,81,90,179,186,101,29,72,160,194,219,176, 62,2,75,27,38,11,75,25,94,122,246,24,139,43,89,180,22,64,48,237,188,184,136,176,178,101,241,124,127,107,77,2, 101,6,252,209,37,146,211,140,12,143,86,220,82,181,192,236,143,43,228,44,197,39,223,60,64,180,4,59,159,214,123,245, 195,205,67,17,200,139,85,19,23,129,249,123,219,172,109,59,188,51,124,156,35,77,161,50,129,15,62,255,147,229,13,139, 135,105,127,34,238,127,206,94,84,221,136,146,169,68,201,185,191,60,109,87,115,237,214,35,94,61,217,67,71,36,76,164, 57,68,75,184,41,168,91,194,33,250,59,155,81,90,179,188,97,214,20,175,104,192,239,60,60,52,82,145,192,87,243,171, 0,156,58,209,77,181,249,113,180,243,41,180,210,108,238,218,152,142,170,42,94,147,64,106,166,148,0,8,75,235,38,223, 254,178,206,153,151,123,104,10,81,81,92,68,232,237,104,70,233,252,60,248,103,61,87,85,188,38,129,161,193,82,2,155, 59,14,159,94,191,143,235,41,158,235,141,212,92,158,121,113,141,86,154,133,251,153,198,12,236,17,72,6,231,55,238,166, 153,76,221,101,61,227,160,148,240,241,220,223,124,113,123,165,204,196,230,174,195,123,169,59,124,118,253,94,176,23,204,222, 92,230,221,232,111,108,236,216,21,13,84,93,5,67,131,195,129,153,87,6,186,56,253,66,87,217,136,247,227,239,110,11, 243,246,208,64,205,156,87,35,16,124,167,251,55,207,92,77,249,45,117,191,150,139,235,58,162,27,48,124,2,237,197,87, 68,132,193,179,67,21,63,40,234,49,81,103,116,1,174,111,32,100,24,134,0,70,107,107,91,35,15,57,84,20,180,66, 128,248,6,114,134,97,204,78,78,77,156,53,140,39,251,111,90,248,189,251,18,72,3,185,98,53,3,104,1,90,11,117, 213,223,182,67,134,87,40,22,144,45,28,243,47,118,211,151,170,126,248,225,254,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char Image1x[558] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,11,10,16,7,18,54,148,178,182,0,0,1,187,73, 68,65,84,56,203,157,211,77,107,19,65,24,192,241,255,236,219,52,221,152,212,5,161,165,5,161,224,165,133,92,196,162, 23,83,232,201,131,159,64,232,103,40,158,235,49,24,131,245,11,8,222,122,245,32,210,64,181,216,30,10,213,158,84,68, 15,42,210,67,34,5,149,38,155,110,183,217,153,233,97,233,234,98,10,33,3,3,243,250,123,102,134,103,68,189,81,91, 3,238,51,90,121,66,189,81,51,90,235,145,106,189,81,51,14,128,49,134,7,143,158,178,181,243,110,168,176,75,213,5, 86,87,150,1,112,0,132,16,236,238,127,102,238,230,29,44,203,194,181,21,133,130,226,247,145,77,162,52,137,210,40,165, 1,72,148,97,107,231,77,30,48,198,224,216,130,160,236,51,51,25,115,183,90,36,40,5,108,236,126,231,237,123,63,67, 82,64,211,254,231,52,206,121,195,178,44,46,249,146,27,243,49,179,83,139,8,225,114,251,122,151,111,7,167,68,39,2, 165,83,64,41,147,187,206,95,64,8,74,227,146,78,104,19,39,45,92,187,204,159,163,46,190,156,64,58,160,207,1,125, 1,32,128,98,193,163,125,120,133,215,123,95,8,202,167,124,61,8,40,142,123,104,109,104,255,248,196,228,213,57,244,133, 128,5,37,95,130,16,244,142,125,122,61,131,231,128,235,167,111,244,106,239,37,133,49,143,153,217,249,193,64,210,239,19, 117,14,115,147,6,3,6,180,73,163,238,111,63,167,31,71,131,129,78,55,228,217,250,139,244,46,233,110,180,214,132,199, 17,97,24,81,153,78,135,155,205,38,120,151,51,192,202,105,158,196,118,36,8,135,190,22,196,137,193,113,199,168,76,159, 100,107,166,38,24,124,2,128,197,91,21,90,63,127,13,200,189,107,185,94,235,195,199,255,129,165,234,2,27,155,219,67, 167,114,14,16,66,176,186,178,156,165,231,48,69,74,153,1,235,141,199,15,239,141,250,157,207,0,181,88,225,150,139,66, 18,171,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Image2x[1163] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,66,73,68,65,84,88,133,237,150,219,107,92, 85,20,135,191,125,206,220,50,147,73,50,147,54,77,108,165,84,20,5,13,213,71,17,161,47,253,39,44,62,248,55,248, 170,32,244,65,139,248,238,75,81,74,235,155,193,23,159,26,104,104,75,45,5,173,86,75,91,76,27,218,230,126,153,201, 153,235,153,179,47,203,135,185,156,73,166,109,20,67,65,236,130,205,94,251,194,249,125,123,173,181,55,7,94,216,255,221, 20,192,197,185,139,23,16,62,120,206,202,223,157,60,113,242,20,0,179,115,179,78,158,179,205,206,205,58,128,4,128,136, 40,128,249,249,249,24,80,169,158,47,34,59,224,187,227,103,245,207,90,155,158,158,238,105,38,118,71,230,235,179,231,81, 202,195,235,7,64,16,39,56,17,156,115,136,115,56,231,176,157,222,185,246,188,181,182,51,142,155,181,182,179,175,189,231, 244,167,31,239,208,219,1,160,148,34,225,251,108,165,223,194,243,20,74,65,62,171,201,102,45,181,166,34,168,120,104,163, 112,78,176,78,176,214,117,252,184,183,78,118,172,219,46,156,19,38,155,215,7,74,97,32,2,190,239,147,207,165,241,61, 56,118,164,193,187,111,251,76,140,21,169,212,171,92,251,173,193,173,187,195,68,150,182,184,72,44,108,227,8,117,253,126, 72,39,130,223,242,246,6,80,10,178,233,36,249,92,196,123,199,125,222,124,229,125,18,94,145,201,241,128,84,242,42,165, 64,179,182,57,212,9,105,71,168,95,188,59,223,91,139,65,41,15,232,15,2,32,194,80,58,201,72,46,162,56,54,68, 194,43,2,30,190,26,163,144,31,227,64,97,149,90,61,213,203,169,235,213,70,220,219,86,21,93,93,195,27,61,182,35, 53,213,93,197,60,0,208,173,222,76,58,129,72,134,74,45,192,140,111,226,123,227,136,11,168,54,3,140,25,34,155,73, 246,21,101,187,23,137,79,94,94,185,131,232,16,193,144,42,190,142,181,10,1,2,107,7,110,212,19,0,44,217,76,18, 72,114,111,33,196,75,92,161,144,31,166,30,54,185,119,31,116,52,65,54,163,16,137,129,219,16,237,113,105,233,54,186, 89,65,146,195,172,255,121,141,163,239,28,36,55,58,9,192,166,167,216,109,79,140,192,80,58,129,66,81,173,29,226,230, 31,33,153,84,139,200,140,211,108,165,201,164,188,110,166,98,0,105,95,213,70,165,196,195,219,87,73,231,39,200,101,178, 32,66,101,233,22,147,135,143,2,116,110,150,122,58,0,128,115,142,108,58,69,188,47,141,49,224,1,185,180,116,132,1, 36,134,0,162,200,112,227,250,143,132,205,6,227,83,35,36,253,246,7,196,132,140,230,50,29,0,239,217,0,34,2,206, 49,146,75,210,191,77,118,121,93,97,0,235,132,72,27,230,127,191,206,246,230,50,0,133,66,129,141,149,135,0,188,250, 198,113,14,140,182,1,252,189,34,32,34,212,27,33,63,255,122,159,254,125,253,117,211,19,182,142,176,165,105,69,6,163, 27,84,214,151,24,57,248,26,0,139,203,27,4,171,143,24,46,30,99,45,72,178,121,227,46,0,205,48,218,27,64,107, 77,80,169,0,244,32,98,0,65,27,71,171,165,209,198,244,230,117,24,80,171,71,56,103,0,240,84,132,75,191,68,181, 105,96,187,76,42,163,129,118,122,247,4,136,180,166,210,1,0,133,115,14,99,44,198,90,180,177,237,7,101,192,60,252, 220,20,97,181,76,45,216,196,57,203,104,225,16,205,70,149,82,112,135,252,216,4,185,124,113,111,0,107,45,65,16,16, 233,117,156,147,129,59,187,167,169,20,153,145,67,52,170,91,172,173,60,98,180,56,69,163,82,166,94,95,160,48,225,200, 58,7,64,169,92,66,58,254,19,82,16,177,189,189,253,207,132,119,155,151,33,145,245,41,149,214,56,243,201,135,125,11, 39,88,90,93,100,105,101,17,173,245,32,0,180,243,84,169,85,255,29,64,207,210,104,99,121,121,234,8,174,115,98,99, 12,75,43,75,210,8,27,95,61,21,224,112,118,99,159,0,32,10,67,172,181,108,109,109,225,251,62,43,107,43,18,182, 194,199,231,190,57,119,102,0,64,41,197,151,95,156,238,249,253,243,187,253,191,59,119,243,214,47,24,99,208,90,243,120, 249,177,171,213,170,107,223,207,204,156,154,155,155,51,49,128,194,57,231,188,233,233,233,125,59,57,180,163,121,229,167,203, 220,127,48,207,214,246,150,93,93,94,189,120,254,220,133,207,23,22,22,22,129,70,12,0,223,94,186,114,233,163,238,127, 218,126,152,136,176,177,190,65,181,82,165,92,222,126,112,237,242,213,207,102,102,126,184,9,212,129,13,32,2,216,45,168, 128,161,78,75,237,23,12,237,55,60,234,180,6,224,246,241,219,47,236,63,110,127,1,15,19,154,238,130,175,215,178,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Markup1x[709] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,22,20,19,51,203,197,162,151,0,0,2,82,73, 68,65,84,56,203,149,146,189,79,83,81,24,198,127,231,246,210,43,80,108,122,129,66,33,66,172,124,72,136,128,24,28, 28,140,68,93,48,33,38,14,70,101,209,77,227,232,162,49,33,93,252,7,12,38,24,163,131,31,3,49,46,234,224,228, 96,92,64,38,33,166,45,1,77,173,20,232,237,135,45,247,182,183,237,189,14,166,216,43,198,132,103,122,79,242,158,231, 252,222,243,188,98,118,118,246,101,34,145,184,192,222,116,113,122,122,122,14,128,80,40,100,239,85,161,80,200,174,58,201, 213,66,211,52,44,203,2,64,8,177,243,84,181,22,66,224,114,185,240,122,189,14,148,29,3,203,178,136,68,34,142,11, 181,18,66,48,48,48,176,107,22,185,246,208,223,223,255,95,130,127,73,174,109,172,37,168,234,243,90,134,165,175,89,178, 134,69,217,178,113,203,18,82,169,157,203,119,158,93,125,113,111,234,137,131,160,175,175,111,199,224,251,230,79,30,190,90, 32,208,166,50,121,230,24,7,59,155,105,80,20,210,121,131,149,216,22,139,203,177,199,151,110,63,189,238,48,136,70,163, 0,36,82,6,175,23,54,56,63,62,204,112,175,159,116,222,96,53,250,5,217,227,135,122,31,77,251,224,202,196,8,243, 203,241,49,199,8,85,130,185,71,239,153,60,53,196,145,160,74,42,153,160,165,107,16,111,75,0,189,80,34,17,91,69, 182,76,164,138,193,233,177,160,243,19,35,145,8,159,194,26,62,223,126,198,199,122,200,101,52,202,178,7,36,65,157,36, 227,174,179,105,80,100,124,13,10,1,127,43,138,226,222,157,194,219,197,143,156,24,237,34,147,78,146,52,27,241,119,116, 96,219,96,3,8,9,97,153,172,167,44,22,87,150,240,213,219,206,20,194,225,48,9,77,167,187,221,199,124,116,147,96, 175,31,203,134,106,46,249,76,138,227,35,131,8,33,176,109,155,248,250,6,210,223,4,5,179,140,162,184,145,60,126,50, 249,2,91,57,19,189,88,33,167,155,152,249,45,199,94,180,181,54,255,33,80,85,245,247,98,200,18,217,237,2,141,133, 31,120,100,133,205,237,22,146,117,110,202,21,139,66,170,204,72,169,68,177,104,210,228,105,68,215,117,196,204,204,204,155, 100,50,121,174,106,20,183,14,113,246,228,48,71,123,84,130,7,2,124,139,197,249,176,98,96,226,198,40,150,201,102,82, 40,162,194,141,201,33,52,77,99,215,126,94,187,251,252,126,123,64,189,57,53,49,202,225,238,86,0,210,153,44,15,222, 173,81,193,197,118,193,196,48,76,110,77,116,146,203,229,248,5,131,250,25,20,161,246,118,40,0,0,0,0,73,69,78, 68,174,66,96,130, }; const unsigned char Markup2x[1759] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,150,73,68,65,84,88,133,229,151,91,108,28, 87,25,199,127,51,179,222,171,215,94,123,125,141,227,56,73,235,93,231,130,27,163,218,78,218,16,53,18,23,137,10,25, 33,17,16,79,1,69,2,97,196,229,165,226,1,161,192,11,188,128,68,69,64,136,22,252,208,130,132,74,170,144,54,148, 244,66,210,96,146,90,216,77,28,219,145,47,201,58,177,29,103,237,181,215,59,51,59,179,187,115,227,33,222,205,218,94, 187,78,37,158,248,164,163,57,231,204,217,243,253,230,255,125,231,178,240,255,110,194,250,142,51,103,206,124,201,229,114,245, 1,65,73,146,16,69,17,219,182,177,44,171,80,76,211,44,60,139,235,91,245,1,138,105,154,39,251,250,250,206,22,251, 115,109,32,18,132,151,79,157,58,21,92,173,99,154,38,46,151,11,199,113,214,140,43,110,111,179,30,236,237,237,125,25, 216,26,192,178,172,16,64,44,22,67,16,4,44,203,34,16,8,144,203,229,242,128,8,194,35,225,138,235,165,218,121,144, 186,186,58,114,185,92,104,253,187,13,0,142,227,20,156,228,39,91,95,47,245,220,204,249,71,217,6,0,219,182,215,56, 45,118,52,53,53,85,120,191,29,167,146,36,17,137,68,214,124,220,182,0,242,42,172,7,105,109,109,253,223,43,96,89, 214,154,9,139,85,248,56,10,68,163,209,66,123,219,10,148,114,46,8,2,145,72,228,99,41,144,239,223,22,64,94,129, 82,73,56,57,57,137,101,89,219,150,93,146,36,218,218,218,10,237,199,2,0,24,26,26,162,163,163,163,0,144,151,179, 24,206,178,28,6,6,198,185,210,127,139,241,137,57,148,148,10,64,176,178,156,104,164,137,100,18,58,59,35,143,7,144, 79,194,174,174,174,53,235,127,98,98,98,141,2,163,163,115,252,237,141,155,180,125,226,73,158,61,214,193,55,190,217,67, 77,200,143,150,49,137,205,43,12,143,222,229,252,219,35,252,238,247,255,224,7,223,251,226,227,135,192,182,237,53,18,71, 163,209,66,251,143,125,239,112,125,100,142,159,252,236,91,180,237,173,101,65,206,210,88,233,38,24,44,231,82,255,0,222, 218,39,232,58,188,159,231,142,238,103,124,114,150,223,190,116,129,116,170,28,30,110,255,5,18,105,61,192,209,163,71,79, 31,63,126,28,85,85,17,4,1,199,113,112,187,221,56,142,195,196,196,4,11,11,11,188,242,234,37,230,151,12,94,252, 197,41,44,199,100,226,222,60,57,19,116,121,153,193,91,119,241,148,215,144,115,36,52,69,33,40,166,121,250,192,46,58, 187,91,249,96,104,158,96,96,159,119,118,102,224,157,188,63,113,171,16,172,79,194,182,182,54,12,195,71,108,70,229,151, 63,63,73,108,54,142,145,203,210,84,229,167,190,161,129,64,221,94,90,247,181,83,85,219,128,79,200,129,169,18,95,146, 113,123,220,52,55,134,249,233,143,78,80,17,174,234,237,238,238,253,204,166,0,171,39,87,73,27,27,187,197,139,103,222, 224,133,23,190,140,223,231,229,96,164,133,61,205,13,204,220,143,163,167,21,220,30,15,110,183,11,151,75,194,178,161,115, 223,46,62,123,172,19,159,215,139,40,138,132,171,130,124,253,228,49,191,224,42,251,13,156,22,55,85,160,248,171,139,139, 162,136,236,216,211,204,161,131,123,0,208,52,157,203,215,174,211,28,237,160,162,170,22,199,1,81,16,17,4,145,250,160, 195,197,247,255,195,185,183,251,153,188,29,195,229,114,97,24,6,159,234,222,39,238,216,221,212,112,228,200,98,207,150,0, 165,236,242,149,49,62,247,233,67,136,171,185,241,214,149,65,90,159,122,6,183,199,135,3,216,249,226,56,44,165,210,28, 235,110,199,231,245,49,56,149,224,221,171,55,86,231,55,233,234,108,246,35,73,95,131,143,88,134,235,243,224,230,72,140, 111,247,246,112,254,189,15,88,210,37,26,91,158,34,165,25,84,7,202,112,120,152,222,134,105,145,94,158,231,240,161,125, 0,52,53,214,3,48,116,99,12,53,173,49,52,50,73,83,83,53,192,209,146,10,20,231,192,192,192,0,162,248,104,136, 166,102,240,251,61,212,132,42,48,93,229,100,13,27,57,157,37,161,100,209,179,38,90,198,64,213,13,124,146,177,65,189, 39,118,239,228,218,245,113,118,212,86,146,22,131,14,182,19,222,84,129,188,29,57,114,132,108,54,91,80,0,199,225,206, 3,157,233,184,76,184,12,124,89,27,77,19,208,203,27,72,186,36,68,192,180,108,2,153,244,154,57,29,199,193,52,13, 26,195,65,94,187,52,70,164,173,189,240,110,211,16,228,235,197,97,168,168,10,178,176,172,144,150,106,88,80,84,190,115, 60,138,36,73,92,184,52,192,178,167,5,219,113,48,12,139,76,198,207,252,155,151,73,172,104,124,245,249,103,112,187,36, 116,93,167,170,50,128,102,72,168,41,205,68,20,146,37,67,176,254,56,46,182,157,77,33,70,199,238,81,238,145,168,242, 154,72,210,195,125,236,243,207,117,17,13,174,160,44,221,103,69,209,89,209,76,198,228,106,98,217,58,38,238,204,160,170, 42,233,116,154,215,47,94,35,24,170,103,102,110,81,4,254,85,18,32,159,3,165,78,185,47,60,127,152,91,31,142,83, 233,151,152,142,171,24,198,163,88,119,28,140,98,164,230,73,42,26,43,138,78,74,213,145,211,25,62,28,159,69,150,101, 20,69,33,177,146,166,49,28,96,122,228,118,6,203,250,211,166,10,148,58,52,0,42,42,28,82,241,7,220,26,159,33, 28,174,229,87,175,188,133,44,203,104,154,70,54,155,37,182,12,203,178,190,10,144,65,78,103,48,115,25,82,169,20,51, 179,247,9,85,215,49,31,87,244,165,185,7,241,171,87,107,207,109,25,130,82,16,7,14,236,231,251,223,237,225,253,115, 239,81,233,17,200,122,155,88,92,92,36,145,72,240,235,190,179,36,114,62,146,178,70,178,8,98,228,110,146,100,50,73, 124,41,69,69,77,51,55,222,253,183,163,41,241,31,194,105,123,203,16,108,102,237,237,187,249,100,251,14,206,189,122,129, 29,149,101,100,178,57,98,211,247,184,114,199,38,169,102,73,202,58,73,69,35,169,232,164,85,133,184,34,178,184,44,163, 218,33,250,255,222,79,226,65,236,220,240,240,159,111,2,101,176,113,21,4,69,81,148,29,199,169,8,133,66,5,69,202, 202,202,10,138,152,166,201,87,78,60,139,250,135,139,156,125,233,175,100,123,158,198,91,25,98,127,100,55,115,9,149,180, 150,197,227,24,120,3,2,245,149,229,52,132,27,25,190,175,50,252,207,107,172,44,141,155,195,215,95,123,29,240,240,112, 211,92,243,215,44,8,212,118,119,119,159,104,105,105,249,49,224,219,76,133,92,46,135,174,235,104,154,27,195,222,73,67, 203,46,118,70,159,164,174,33,132,63,224,195,182,29,20,89,101,33,158,98,110,124,138,196,236,44,142,21,179,230,230,70, 255,50,59,59,123,30,24,4,166,0,187,24,192,13,212,3,97,32,180,74,185,225,190,176,110,124,149,40,122,170,155,154, 14,117,134,170,247,30,242,122,67,59,93,146,232,5,48,45,59,163,235,203,15,146,75,183,71,231,231,135,7,109,59,39, 3,119,129,73,96,26,80,215,43,144,55,15,224,93,117,176,157,139,190,184,58,62,0,248,87,127,39,1,22,144,1,52, 64,89,117,152,1,178,20,221,136,254,11,210,252,122,24,159,159,101,167,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Program1x[609] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,214,1,5,14,9,17,179,225,58,161,0,0,1,238,73, 68,65,84,56,203,165,147,61,104,83,81,20,128,191,123,238,123,105,140,177,105,82,7,155,162,173,70,170,77,148,214,90, 39,7,21,7,103,135,110,65,156,93,172,17,7,137,173,58,184,137,139,160,131,63,136,118,214,69,212,69,196,216,165,40, 175,138,105,165,224,79,138,144,34,181,146,180,9,36,105,124,215,193,164,160,77,176,234,129,51,221,251,125,231,222,115,207, 133,255,12,213,108,193,137,211,1,100,1,180,176,175,239,46,175,214,108,117,226,116,56,113,76,241,83,202,93,154,121,104, 156,56,38,125,156,45,141,246,74,179,202,59,206,63,49,75,233,123,106,254,241,9,182,158,188,70,165,202,108,35,137,52, 130,35,137,91,110,110,226,178,18,81,40,183,76,46,53,74,100,248,122,67,137,172,134,111,186,185,231,103,197,242,172,199, 246,111,194,227,11,98,89,54,249,241,139,68,78,173,150,72,13,238,7,178,219,19,55,220,252,139,17,209,150,141,29,236, 166,58,55,129,50,101,188,225,189,248,163,67,84,191,56,244,156,187,79,165,202,236,155,99,12,2,88,53,209,100,228,244, 109,55,159,74,138,214,22,118,107,39,246,134,48,170,180,128,39,180,13,29,236,1,37,24,99,112,23,51,196,174,76,49, 149,136,189,4,212,202,21,90,2,93,69,221,226,199,14,108,198,183,115,136,106,118,28,17,176,55,198,16,109,163,68,106, 169,49,197,249,82,157,171,159,32,60,61,122,56,219,155,124,144,255,94,204,4,150,63,62,66,219,62,172,64,23,162,53, 198,24,20,6,227,130,132,98,165,233,145,131,94,96,207,74,15,6,198,152,3,194,239,46,29,13,216,109,209,69,74,95, 49,133,207,136,183,13,37,130,136,70,41,141,213,190,171,14,135,7,198,120,253,203,43,212,37,83,23,142,180,174,235,27, 94,176,124,65,68,129,136,254,153,109,189,165,116,242,64,29,158,107,54,202,250,234,33,186,247,119,242,62,122,230,206,55, 41,204,132,116,168,7,183,125,112,249,109,98,183,253,59,252,199,81,46,125,120,90,168,100,158,149,157,56,166,54,39,127, 245,153,250,129,201,122,147,215,84,249,95,226,7,144,100,183,170,35,108,244,94,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char Program2x[1490] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,137,73,68,65,84,88,133,237,150,91,108,20, 231,21,199,127,231,155,155,151,181,124,89,3,181,113,193,183,13,16,81,82,21,225,52,50,1,132,91,53,20,212,132,155, 212,84,149,18,161,40,82,213,151,72,68,81,108,212,74,121,168,122,81,165,190,24,171,125,141,218,226,66,171,66,91,37, 65,145,82,225,2,9,6,148,132,40,73,9,55,219,4,112,146,58,49,23,239,125,102,190,62,204,236,120,236,176,182,1, 169,79,29,233,232,236,203,156,255,239,252,207,249,190,29,248,255,115,31,79,182,135,157,153,94,116,102,47,91,239,181,134, 186,31,113,173,216,159,173,249,10,90,243,215,76,47,91,254,103,0,217,30,118,106,225,143,183,219,215,219,250,225,103,201, 180,173,179,53,28,186,23,136,187,6,8,58,151,253,147,233,13,142,151,106,97,226,76,63,238,194,54,50,237,143,222,19, 132,220,173,56,134,57,144,95,243,3,43,111,8,147,31,253,3,180,7,98,80,189,226,123,152,159,95,102,193,197,227,69, 129,237,201,95,240,234,124,106,206,219,129,108,47,59,48,204,1,111,211,139,150,145,254,22,217,11,175,160,68,163,148,66, 137,38,123,225,21,252,133,105,114,233,245,129,19,123,249,238,124,234,206,203,129,108,47,59,180,48,224,111,124,193,150,150, 46,138,19,23,64,107,4,184,253,225,1,220,155,163,160,65,139,34,153,222,140,57,62,76,213,197,227,69,17,182,37,127, 206,107,179,213,158,211,129,64,92,6,178,15,108,180,189,134,86,74,19,23,17,64,68,16,17,204,68,93,224,130,161,80, 2,185,203,175,227,54,180,145,79,175,179,181,230,240,92,78,204,234,64,36,158,126,212,246,83,203,64,187,56,141,107,65, 160,52,126,142,252,245,147,248,185,207,167,94,208,58,72,8,137,214,110,140,241,17,170,46,189,57,171,19,21,29,200,246, 176,93,139,12,228,210,235,108,63,245,85,242,163,255,68,187,249,168,115,63,51,6,133,137,160,251,40,12,68,41,148,8, 249,43,71,241,26,150,145,111,127,196,22,164,226,78,220,17,32,219,195,118,95,228,79,217,116,151,237,213,53,147,191,50, 136,8,129,128,8,34,10,17,65,41,99,70,168,169,12,20,174,30,195,91,216,66,182,173,211,169,4,241,37,128,178,120, 174,227,17,219,175,91,66,225,234,49,20,160,68,161,172,5,80,158,125,205,82,204,228,226,105,226,18,101,21,65,20,175, 158,192,75,45,37,219,182,214,17,228,208,100,15,155,43,2,100,122,217,22,136,63,108,251,117,77,20,174,190,137,8,72, 185,168,83,27,117,111,47,92,73,242,107,79,97,47,94,61,189,243,16,72,194,113,136,64,113,108,8,175,174,153,108,235, 26,71,41,57,28,135,136,0,244,75,40,224,80,177,190,209,102,201,215,41,140,157,14,108,151,169,249,154,53,205,136,72, 232,66,0,34,165,201,169,217,71,89,97,88,85,88,245,29,40,195,10,156,248,236,29,212,3,143,81,168,89,236,136,76, 45,100,4,32,47,225,227,179,205,158,248,164,40,215,222,193,105,90,19,21,20,81,24,201,69,40,59,137,136,160,115,227, 228,222,221,71,238,221,126,252,204,245,72,220,176,18,209,8,140,154,165,44,88,190,29,179,182,5,49,76,18,45,221,56, 185,12,206,237,255,20,181,158,218,133,105,35,72,254,138,191,9,250,251,137,225,51,69,243,198,117,236,198,111,32,202,68, 148,194,94,180,122,234,4,220,188,140,200,116,203,205,234,38,18,15,61,131,149,90,142,89,221,136,149,90,142,8,36,58, 182,80,219,245,83,18,84,33,39,250,139,190,231,63,81,253,75,142,68,141,223,233,20,100,122,217,134,200,129,98,251,90, 219,79,53,225,223,184,68,98,245,110,148,225,128,8,197,243,127,70,231,198,131,113,68,173,88,56,171,118,163,37,236,73, 107,52,160,18,13,232,145,33,244,241,254,146,246,220,199,227,226,21,1,166,65,164,59,109,107,197,86,84,162,1,9,174, 64,40,78,226,126,252,6,160,49,106,59,240,198,223,195,88,210,133,170,237,8,133,53,104,144,170,122,244,232,16,254,177, 59,139,207,10,80,134,208,168,131,170,251,121,75,45,93,131,206,127,17,118,45,248,55,47,66,225,38,102,227,90,180,214, 81,169,224,183,6,39,20,255,215,190,138,226,115,2,64,120,47,24,230,65,99,211,30,83,39,171,241,174,31,199,168,107, 71,223,56,15,94,1,107,229,15,65,153,83,215,176,214,96,215,161,71,79,226,205,33,62,47,128,50,132,54,140,3,254, 242,78,75,234,27,17,237,66,241,22,214,146,46,164,174,131,80,25,173,65,236,26,252,209,33,188,193,190,146,214,238,19, 115,253,27,206,247,131,196,248,108,15,59,146,85,242,7,86,126,211,182,59,127,140,246,242,168,240,78,40,3,96,85,227, 141,156,194,27,236,43,77,228,220,93,205,191,225,53,192,3,252,138,133,103,17,85,128,13,84,1,206,175,223,98,244,201, 85,92,72,101,174,109,241,201,24,102,115,39,248,110,112,52,145,72,188,52,216,231,190,255,169,251,244,131,253,28,5,204, 80,163,124,220,191,4,82,9,192,2,156,153,241,219,51,92,249,118,27,151,155,115,195,223,145,69,29,134,170,95,134,248, 46,88,73,252,145,33,74,131,125,238,209,97,247,71,221,47,115,44,38,94,6,80,4,142,135,91,90,25,192,8,1,236, 88,68,16,47,159,229,90,103,147,30,110,187,117,170,91,26,90,149,212,183,226,143,156,164,56,216,231,30,254,183,187,103, 215,65,222,10,197,227,162,241,81,107,130,177,204,10,96,134,16,102,8,80,6,114,0,231,192,7,140,173,72,249,87,86, 76,158,218,160,111,127,170,74,111,255,197,251,253,89,247,39,207,252,157,211,49,209,184,160,31,134,23,203,21,1,252,24, 189,17,203,101,48,3,176,14,159,99,172,165,198,191,182,218,26,89,255,187,51,254,207,158,59,194,233,25,66,238,140,40, 197,34,26,193,108,167,160,188,7,118,44,199,195,138,1,150,187,44,11,20,103,68,33,150,167,45,226,124,142,97,121,28, 54,211,71,83,22,143,47,150,23,235,62,14,51,173,235,187,5,184,211,59,113,241,114,141,153,179,158,215,243,95,119,198, 63,107,9,247,71,127,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Script1x[516] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,236,0,236,0,236,29,35,22,54,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,9,15,10,59,4,237,28,251,236,0,0,1,145,73, 68,65,84,56,203,149,147,191,142,218,64,16,198,127,131,86,162,12,206,3,32,10,10,55,72,199,91,68,138,168,82,240, 8,185,154,198,13,7,114,7,244,20,52,244,156,174,35,77,36,222,129,148,84,200,72,8,176,131,43,26,104,152,43,214, 235,24,78,119,209,141,52,187,171,209,206,55,223,252,147,201,100,242,114,56,28,126,240,57,105,247,251,253,103,0,194,48, 212,207,74,24,134,234,144,140,123,164,105,154,195,11,130,10,72,49,166,216,227,171,231,221,80,49,247,220,68,36,187,45, 16,128,170,3,211,55,185,152,98,4,231,128,8,162,5,187,100,12,84,222,7,144,34,3,205,12,130,5,18,7,252,17, 3,196,230,238,254,139,229,227,124,149,251,162,88,41,21,83,80,209,236,143,228,183,138,213,36,137,121,252,249,200,110,183, 123,7,64,29,135,2,227,76,255,38,49,189,94,143,32,8,232,116,58,92,175,215,183,0,82,228,231,10,42,16,39,49, 79,79,214,121,179,217,224,251,62,171,213,138,32,8,30,110,106,160,242,175,255,37,4,69,73,226,36,143,188,221,110,49, 198,80,175,215,73,211,148,40,138,150,65,16,52,239,230,64,17,205,134,72,36,119,222,239,247,24,99,242,25,41,151,203, 212,106,53,162,40,90,150,238,219,104,251,173,40,202,104,52,98,56,28,98,140,201,245,116,58,225,251,62,81,20,1,52, 115,0,207,243,240,60,143,74,165,98,245,75,133,106,181,202,96,48,96,58,157,98,140,225,114,185,0,176,88,44,0,154, 179,217,236,143,140,199,227,95,199,227,241,251,71,171,119,62,159,89,175,215,180,90,45,230,243,57,141,70,227,119,183,219, 253,118,195,252,191,251,219,110,63,0,75,23,217,217,95,1,152,44,191,17,163,238,139,75,0,0,0,0,73,69,78,68, 174,66,96,130, }; const unsigned char Script2x[1416] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,215,8,23,10,12,43,51,207,145,74,0,0,5,21,73, 68,65,84,88,195,229,151,205,107,83,89,24,198,127,247,158,99,76,111,123,147,104,167,31,177,54,81,40,214,15,168,13, 84,69,92,248,63,12,210,133,185,139,161,10,69,3,66,113,97,177,210,157,152,216,224,66,200,136,3,98,23,22,92,205, 98,150,210,10,110,12,116,225,184,16,68,169,182,58,126,129,227,208,244,38,99,211,185,55,119,22,147,155,185,73,147,180, 21,102,53,7,14,247,205,201,225,60,207,251,188,239,121,207,57,240,127,111,74,237,64,38,147,249,94,74,57,13,232,66, 8,84,85,165,84,42,97,219,118,165,91,150,85,249,122,237,102,99,128,105,89,214,15,211,211,211,63,123,241,228,58,70, 138,114,231,236,217,179,122,217,198,178,44,164,148,56,142,83,53,207,251,123,147,182,158,72,36,238,0,205,9,216,182,29, 2,88,92,92,68,81,20,108,219,166,181,181,149,181,181,53,151,32,138,162,120,9,215,58,176,78,102,199,113,232,236,236, 100,109,109,45,84,251,159,172,55,217,5,113,23,171,181,235,125,27,129,111,212,214,17,40,149,74,85,160,94,160,87,175, 94,109,25,160,191,191,191,110,72,154,18,112,85,168,37,210,215,215,247,223,43,96,219,118,213,130,94,21,22,22,22,182, 12,112,224,192,129,173,43,208,40,4,251,246,237,251,38,5,220,241,77,17,112,21,168,151,132,47,95,190,108,232,233,193, 131,7,55,12,193,150,8,0,60,121,242,132,88,44,86,33,176,127,255,254,134,187,194,181,77,211,4,64,215,245,111,39, 224,38,225,209,163,71,171,246,127,35,101,220,246,233,211,39,50,153,12,0,151,46,93,90,71,162,30,1,181,89,8,74, 165,210,58,15,27,245,124,62,79,38,147,97,100,100,132,139,23,47,146,74,165,48,77,179,138,164,155,95,155,34,80,155, 68,141,138,147,43,123,42,149,34,145,72,48,59,59,203,221,187,119,137,199,227,85,36,182,164,128,183,26,54,218,17,110, 95,89,89,33,149,74,113,230,204,25,150,151,151,241,249,124,0,60,120,240,0,195,48,72,38,147,149,188,216,148,2,229, 147,171,241,241,89,199,243,120,60,206,163,71,143,40,22,139,28,58,116,8,93,215,177,44,139,217,217,89,12,195,224,218, 181,107,228,114,185,186,4,54,220,134,141,186,105,154,36,147,73,226,241,56,217,108,150,92,46,135,101,89,188,121,243,134, 66,161,128,16,2,203,178,152,155,155,195,48,12,38,39,39,235,58,180,169,28,168,109,43,43,43,36,147,73,12,195,32, 155,205,98,154,38,82,74,124,62,31,189,189,189,232,186,142,16,2,33,4,182,109,243,240,225,67,12,195,160,171,171,139, 209,209,209,240,150,114,160,54,238,94,217,31,63,126,76,62,159,71,85,85,130,193,32,66,8,62,127,254,12,128,223,239, 71,8,65,95,95,31,82,74,150,150,150,24,30,30,6,248,224,37,209,52,7,230,231,231,81,213,127,167,184,224,167,79, 159,38,155,205,86,164,150,82,210,219,219,139,227,56,124,248,240,1,219,182,137,70,163,196,98,49,162,209,40,39,78,156, 96,247,238,221,152,166,201,185,115,231,214,202,36,6,55,12,193,241,227,199,43,137,147,207,231,73,165,82,92,184,112,129, 249,249,121,10,133,2,170,170,86,188,239,238,238,230,235,215,175,68,34,17,142,28,57,66,36,18,97,199,142,29,168,170, 138,162,40,168,170,74,40,20,98,121,121,217,55,49,49,81,2,126,29,29,29,13,55,12,129,107,187,210,235,186,78,34, 145,224,230,205,155,12,13,13,177,109,219,54,132,16,4,131,65,6,6,6,200,231,243,188,120,241,2,0,77,211,170,128, 93,91,81,20,194,225,176,115,245,234,85,85,74,185,247,246,237,219,31,213,141,142,99,111,219,181,107,23,227,227,227,220, 191,127,159,147,39,79,210,223,223,207,224,224,32,171,171,171,104,154,70,169,84,162,167,167,167,10,220,155,75,221,221,221, 220,184,113,67,145,82,238,205,100,50,75,77,115,160,209,201,22,8,4,184,124,249,50,51,51,51,196,98,49,86,87,87, 121,246,236,25,79,159,62,101,207,158,61,248,253,254,117,94,123,192,241,130,55,221,5,205,90,32,16,96,98,98,130,116, 58,77,87,87,23,82,254,83,78,190,124,249,130,123,149,247,42,208,217,217,73,58,157,118,15,171,165,77,213,129,102,36, 28,199,33,16,8,112,229,202,21,110,221,186,197,208,208,16,66,8,194,225,112,197,99,23,188,163,163,131,116,58,205,228, 228,100,221,42,187,229,82,236,37,209,214,214,198,248,248,56,247,238,221,227,240,225,195,188,123,247,142,98,177,88,33,209, 222,222,206,212,212,20,99,99,99,104,154,182,169,195,72,87,85,117,197,113,28,66,161,16,129,64,128,96,48,136,166,105, 180,181,181,209,218,218,138,166,105,180,180,180,0,80,44,22,17,66,112,254,252,121,102,102,102,24,24,24,160,80,40,160, 40,10,59,119,238,228,250,245,235,140,140,140,32,132,32,151,203,161,40,74,30,216,11,104,245,158,102,58,208,113,236,216, 177,225,104,52,58,9,180,52,242,222,251,76,115,159,109,138,162,16,137,68,24,27,27,67,74,201,212,212,20,111,223,190, 197,178,44,84,85,69,74,89,124,253,250,245,143,207,159,63,255,5,248,13,88,4,74,94,2,62,160,11,104,7,66,192, 118,64,52,185,77,111,47,119,159,107,183,183,183,127,119,234,212,169,9,128,185,185,185,159,22,22,22,150,128,34,96,2, 22,176,12,124,4,22,128,223,235,62,78,203,139,249,203,11,43,27,92,233,253,229,222,82,254,110,239,233,233,233,6,148, 247,239,223,255,1,252,85,38,240,39,144,47,19,200,1,171,238,34,127,3,163,217,113,200,236,96,85,42,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Text1x[333] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,4,22,20,15,56,186,96,38,66,0,0,0,218,73, 68,65,84,56,203,173,146,61,110,132,48,16,133,191,7,72,187,91,33,33,159,129,159,179,108,153,34,199,65,230,22,28, 33,81,218,28,6,115,1,26,250,173,76,138,136,21,36,94,88,162,188,106,44,123,222,124,51,30,181,109,251,49,12,195, 11,199,244,90,215,245,59,0,214,218,233,168,172,181,211,236,148,204,193,56,142,120,239,1,144,116,47,53,199,146,136,227, 152,52,77,87,40,119,3,239,61,206,185,85,194,82,146,168,170,234,87,47,201,242,80,20,197,38,65,72,201,242,225,146, 224,167,158,34,200,243,60,80,241,198,52,157,136,162,104,155,0,160,239,251,213,101,89,150,192,5,184,1,231,253,22,66, 4,146,144,46,15,23,98,69,224,156,219,28,222,55,209,206,47,132,9,180,79,32,137,174,235,130,149,231,233,135,140,130, 4,33,147,221,61,200,178,140,191,40,49,198,124,54,77,115,61,146,100,140,121,227,191,244,5,84,81,95,185,252,185,63, 236,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Text2x[744] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,2,159,73,68,65,84,88,133,229,151,77,106,27, 49,20,199,127,51,82,220,150,224,98,40,77,219,3,248,43,78,32,1,99,200,53,122,129,116,145,93,238,208,109,151,93, 121,25,240,9,122,144,44,188,181,177,13,1,23,210,93,11,77,3,177,59,26,117,17,107,170,145,53,95,110,187,234,131, 97,36,205,248,189,191,126,239,105,36,195,255,110,129,59,48,28,14,223,74,41,71,64,93,8,65,24,134,196,113,140,82, 42,185,162,40,74,238,118,59,111,12,184,139,162,232,221,104,52,250,100,199,147,91,138,130,224,234,226,226,162,190,105,19, 69,17,82,74,180,214,169,247,236,126,201,118,253,242,242,242,10,200,23,160,148,106,0,220,220,220,16,4,1,74,41,246, 247,247,89,175,215,70,32,65,240,27,156,221,246,245,141,144,131,131,3,214,235,117,195,125,182,37,64,107,157,4,49,206, 220,182,239,158,21,188,200,182,4,196,113,156,10,106,7,90,44,22,201,243,50,65,133,16,180,90,173,212,228,74,9,48, 20,92,33,205,102,243,223,19,80,74,165,28,218,20,118,33,208,110,183,147,126,105,2,190,224,65,16,208,106,181,118,34, 96,198,75,9,48,4,124,69,56,159,207,81,74,149,198,46,132,160,211,233,36,253,74,2,0,198,227,49,167,167,167,137, 0,131,211,183,42,138,196,84,18,96,138,112,48,24,164,214,255,108,54,171,76,160,219,237,86,23,96,28,199,113,156,10, 208,110,183,51,191,15,69,98,128,173,2,206,21,96,155,9,100,8,100,5,115,199,132,16,28,30,30,38,253,202,41,112, 103,106,10,202,183,66,178,68,217,86,138,192,102,231,242,218,116,58,77,57,41,218,7,132,16,244,122,189,106,2,220,101, 104,95,221,110,183,212,62,225,51,173,245,238,53,144,101,89,169,240,5,135,10,4,178,118,196,233,116,154,90,134,69,219, 178,16,130,163,163,163,45,33,185,2,236,26,184,190,190,166,223,239,39,125,55,5,190,203,22,227,11,88,138,128,177,179, 179,51,86,171,85,226,212,16,176,131,228,225,151,82,114,124,124,92,93,128,81,110,112,27,231,101,8,216,239,255,49,1, 119,86,147,201,36,115,179,242,253,102,39,2,166,6,124,72,13,129,48,12,75,81,208,90,23,82,200,77,129,107,134,64, 86,254,165,148,156,156,156,84,58,25,101,166,192,62,150,25,179,107,32,139,130,123,44,47,162,80,233,83,108,155,113,234, 138,44,83,120,121,2,234,97,24,126,215,90,63,111,52,30,143,240,74,41,246,246,246,42,59,54,102,11,172,213,106,119, 192,107,224,27,176,114,5,212,129,151,183,183,183,31,206,207,207,223,3,207,118,138,152,45,228,97,185,92,126,4,222,0, 2,248,2,196,54,191,26,240,10,120,1,52,128,39,155,23,255,134,61,240,56,217,123,224,43,240,25,248,1,158,63,167, 155,192,79,55,130,170,31,244,253,22,3,63,121,196,190,2,146,124,254,2,1,73,132,34,19,146,251,201,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Video1x[592] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,4,28,9,32,30,1,50,75,149,0,0,1,221,73, 68,65,84,56,203,165,147,191,170,26,81,16,198,127,251,71,55,55,70,238,53,32,65,13,168,205,54,194,86,203,130,205, 54,10,130,104,231,59,228,33,146,34,16,244,17,52,15,96,17,172,197,70,43,27,219,72,34,9,11,130,141,165,138,112, 37,146,213,157,20,234,230,154,164,72,110,6,206,97,102,190,153,57,243,13,103,20,203,118,94,37,19,119,239,1,2,225, 44,114,190,5,4,68,4,80,78,30,57,97,135,195,33,248,238,251,175,177,108,71,122,189,158,108,183,91,25,14,135,82, 42,149,174,108,215,117,255,136,183,90,45,177,108,71,176,108,71,14,135,131,172,86,43,73,167,211,226,186,238,95,217,205, 102,83,44,219,17,149,255,20,237,69,58,243,54,249,60,129,105,154,56,142,195,100,50,33,22,139,133,246,120,60,38,30, 143,255,134,111,54,27,62,127,249,138,98,217,142,36,19,119,60,102,136,247,223,246,170,14,144,121,153,225,126,187,253,167, 214,159,221,222,6,31,63,205,84,21,224,137,97,0,208,237,118,169,86,171,24,134,65,52,26,37,18,137,80,175,215,209, 52,13,85,85,169,215,235,40,138,194,57,71,7,80,1,162,209,40,34,66,16,4,100,179,89,114,185,220,245,160,52,45, 76,20,57,209,208,117,29,128,83,149,51,56,157,78,201,231,243,152,166,73,173,86,3,192,243,60,42,149,10,166,105,226, 121,30,134,97,176,223,239,209,53,141,176,131,167,55,55,136,8,237,118,155,217,108,198,104,52,162,211,233,176,88,44,240, 125,159,76,38,67,54,155,101,50,153,224,251,62,34,18,210,86,1,34,145,8,0,229,114,153,245,122,77,185,92,166,84, 42,145,203,229,40,20,10,44,151,75,82,169,20,197,98,145,227,241,200,133,118,72,225,120,60,34,34,12,6,131,144,39, 64,191,223,7,32,159,207,211,104,52,174,102,16,4,193,207,2,23,231,229,132,191,225,172,207,231,243,80,255,53,78,191, 4,219,182,29,82,121,152,12,132,175,61,212,119,187,29,0,138,101,59,239,128,55,143,92,133,15,63,0,208,50,35,119, 229,61,168,67,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Video2x[1797] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,188,73,68,65,84,88,133,181,151,91,76,83, 93,22,199,127,231,244,6,167,104,65,10,109,211,130,14,166,145,64,21,5,9,32,40,26,103,38,51,18,18,131,10,98, 120,250,136,153,239,69,39,70,125,51,62,249,228,211,224,37,25,231,193,33,38,227,131,68,162,35,23,141,196,91,58,64, 212,185,136,22,33,96,64,229,90,185,89,164,20,122,217,243,128,237,199,165,31,223,120,153,149,52,107,159,221,189,215,255, 191,46,123,237,115,36,254,191,98,5,10,12,6,195,94,149,74,181,219,239,247,39,76,79,79,151,0,255,12,47,144,190, 35,152,14,216,170,86,171,11,13,6,195,239,252,126,127,78,66,66,130,186,160,160,64,147,150,150,22,107,50,153,24,31, 31,231,242,229,203,45,227,227,227,191,249,30,128,86,224,144,193,96,248,115,98,98,98,151,193,96,248,148,145,145,49,187, 111,223,190,208,137,19,39,196,139,23,47,196,200,200,136,120,247,238,157,168,168,168,16,138,162,136,139,23,47,10,69,81, 166,23,27,145,191,192,187,2,181,90,125,210,104,52,182,196,197,197,125,52,153,76,189,123,246,236,249,219,185,115,231,254, 112,247,238,221,77,29,29,29,250,157,59,119,198,120,189,94,169,173,173,13,149,74,197,216,216,24,157,157,157,220,184,113, 3,128,152,152,24,172,86,43,128,61,108,88,189,138,119,59,18,18,18,126,173,86,171,139,253,126,191,109,203,150,45,161, 162,162,34,197,108,54,171,100,89,230,253,251,247,56,28,14,10,11,11,241,249,124,212,212,212,112,229,202,21,0,78,158, 60,137,70,163,65,171,213,50,49,49,193,249,243,231,17,66,240,230,205,27,62,125,250,4,32,150,19,72,208,233,116,63, 196,199,199,255,126,118,118,54,39,41,41,73,149,158,158,174,179,88,44,218,244,244,116,118,239,222,205,198,141,27,153,159, 159,167,180,180,148,103,207,158,161,209,104,120,244,232,17,94,175,23,89,150,233,238,238,230,224,193,131,216,237,118,170,171, 171,233,234,234,162,181,181,53,116,231,206,157,249,190,190,62,52,26,205,96,40,20,122,252,241,227,199,235,64,111,152,128, 4,144,156,156,220,84,89,89,249,219,210,210,82,85,75,75,11,141,141,141,196,198,198,226,243,249,112,187,221,180,182,182, 162,209,104,120,242,228,9,85,85,85,216,108,54,170,170,170,56,118,236,24,26,141,6,151,203,197,133,11,23,232,235,235, 11,13,15,15,207,207,204,204,248,116,58,221,127,60,30,79,243,252,252,124,43,11,85,63,27,45,212,106,0,73,146,212, 37,37,37,170,194,194,66,170,171,171,169,175,175,231,236,217,179,60,127,254,156,178,178,50,244,122,61,42,149,138,64,32, 192,165,75,151,232,233,233,193,227,241,132,42,42,42,102,94,190,124,41,3,35,192,227,169,169,169,22,224,31,192,187,233, 233,233,104,120,209,9,76,76,76,52,60,126,252,120,79,81,81,145,58,16,8,144,144,144,192,169,83,167,56,115,230,12, 178,44,115,251,246,109,156,78,167,175,165,165,69,120,60,30,127,76,76,204,191,166,166,166,154,3,129,128,19,248,247,207, 121,247,37,178,37,39,39,231,227,228,228,164,176,90,173,226,193,131,7,162,161,161,65,92,189,122,85,108,218,180,41,104, 54,155,31,2,135,129,212,111,5,90,46,225,70,36,165,164,164,188,153,158,158,254,149,94,175,167,166,166,6,175,215,139, 215,235,101,116,116,148,107,215,174,161,40,10,90,173,246,155,1,67,161,144,208,235,245,127,113,58,157,63,194,79,167,64, 36,38,38,154,159,62,125,202,246,237,219,81,20,133,161,161,33,0,178,178,178,40,47,47,167,190,190,158,35,71,142,32, 203,50,249,249,249,100,100,100,32,73,18,67,67,67,220,189,123,23,33,4,241,241,241,28,56,112,0,157,78,135,199,227, 161,174,174,142,185,185,57,180,90,45,229,229,229,24,141,70,66,161,144,148,155,155,123,20,248,113,9,179,172,172,172,217, 145,145,17,81,82,82,34,82,83,83,69,106,106,170,216,176,97,131,176,219,237,194,110,183,139,226,226,98,97,50,153,4, 32,52,26,141,168,173,173,21,175,94,189,18,157,157,157,226,248,241,227,130,133,179,45,246,238,221,43,222,190,125,43,6, 6,6,68,93,93,157,208,104,52,2,16,235,215,175,23,189,189,189,98,110,110,78,100,102,102,70,250,64,228,46,216,186, 117,171,183,185,185,57,86,150,101,26,27,27,233,233,233,1,32,51,51,147,188,188,60,214,172,89,195,248,248,56,245,245, 245,4,2,1,98,99,99,57,116,232,16,113,113,113,72,146,196,189,123,247,232,237,93,56,222,249,249,249,20,20,20,32, 203,50,93,93,93,52,53,53,33,132,192,102,179,81,89,89,201,142,29,59,68,71,71,135,188,132,64,94,94,222,159,252, 126,255,31,21,69,249,170,220,10,33,8,133,66,145,103,149,74,21,45,255,248,124,62,20,69,249,171,211,233,252,97,9, 1,0,171,213,42,142,30,61,74,119,119,55,146,180,240,87,88,135,65,132,16,95,61,54,26,141,52,55,55,51,56,56, 24,49,186,226,50,90,236,69,52,81,171,213,232,245,122,138,138,138,86,93,23,77,162,217,94,113,25,133,23,9,33,112, 56,28,164,167,167,99,177,88,184,126,253,58,235,214,173,163,184,184,152,238,238,110,114,114,114,120,253,250,53,31,62,124, 136,236,13,123,155,148,148,132,219,237,94,49,31,214,191,72,64,8,129,36,73,12,12,12,96,179,217,48,26,141,236,223, 191,159,109,219,182,49,59,59,75,90,90,26,42,149,138,93,187,118,113,243,230,205,21,70,205,102,243,18,2,95,20,129, 96,48,24,97,59,57,57,73,87,87,23,14,135,131,91,183,110,161,40,10,181,181,181,172,93,187,22,189,94,31,105,76, 139,61,91,109,252,63,167,64,8,65,82,82,18,38,147,9,69,81,176,217,108,88,44,22,30,62,124,72,74,74,74,196, 96,48,24,196,225,112,44,1,139,139,139,3,96,243,230,205,145,121,151,203,69,32,16,248,50,2,110,183,59,146,95,151, 203,197,204,204,76,4,36,59,59,155,169,169,41,60,30,15,99,99,99,24,141,70,20,69,161,191,191,159,211,167,79,51, 51,51,195,224,224,32,77,77,77,164,166,166,70,162,26,214,171,18,8,6,131,43,138,229,243,91,76,196,163,236,236,108, 218,219,219,57,124,248,48,138,162,208,222,222,142,197,98,161,161,161,129,177,177,49,10,11,11,177,219,237,184,92,46,122, 123,123,35,246,162,69,96,69,31,40,43,43,99,120,120,152,228,228,100,204,102,243,138,13,97,18,203,199,97,157,155,155, 139,78,167,195,233,116,70,250,64,56,5,90,173,150,182,182,182,37,125,224,103,143,161,219,237,142,90,201,203,9,44,39, 209,209,209,177,130,84,88,127,117,10,126,137,196,106,17,89,172,191,168,8,147,147,147,49,153,76,171,146,232,239,239,199, 227,241,68,5,140,54,183,40,2,106,32,176,156,64,76,120,145,16,130,209,209,81,70,71,71,87,37,176,90,42,162,145, 89,244,108,5,60,192,100,152,128,12,172,149,36,41,20,12,6,101,131,193,16,217,176,252,183,216,88,56,172,139,199,240, 83,20,151,147,249,220,97,5,144,244,25,211,191,152,128,44,73,210,223,239,223,191,191,127,85,183,191,81,132,16,15,88, 136,188,10,150,30,195,53,192,58,192,0,232,1,205,119,198,246,179,224,232,60,48,13,124,0,38,150,127,29,171,63,131, 199,178,240,61,248,61,37,200,66,225,249,128,79,159,199,252,23,167,27,171,202,82,178,3,134,0,0,0,0,73,69,78, 68,174,66,96,130, }; } namespace Go { const unsigned char Down1x[683] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,61,73,68,65,84,56,141, 133,147,77,104,19,65,24,134,223,153,236,230,15,107,192,96,210,67,252,193,170,245,34,26,143,73,180,224,193,139,241,34, 20,47,30,42,226,65,20,234,161,85,241,42,8,210,21,60,169,80,132,156,20,33,162,82,83,91,114,177,214,85,8,181, 45,20,123,168,85,180,84,205,154,174,253,11,233,38,179,179,159,135,214,26,155,24,223,227,55,223,60,243,190,243,205,48, 34,66,181,226,221,106,30,132,48,234,137,193,208,123,68,115,117,73,169,105,34,132,111,93,72,195,118,4,108,71,96,201, 42,96,201,50,1,0,119,31,221,168,1,215,2,0,48,198,144,155,121,142,178,93,66,161,56,131,143,115,99,104,63,120, 181,174,41,94,175,88,29,202,163,248,235,110,108,8,0,17,136,28,16,17,20,238,110,8,80,18,151,85,157,28,196,214, 237,187,96,57,36,189,146,108,72,178,177,92,54,81,189,22,239,82,215,13,50,142,55,10,57,72,69,66,45,209,139,39, 175,251,20,151,10,34,199,43,73,130,152,4,184,68,81,22,160,122,57,184,194,112,254,212,53,47,8,16,162,130,116,54, 85,154,95,156,75,49,34,66,162,91,77,183,69,143,39,143,68,147,158,247,249,87,144,92,64,162,140,21,123,17,211,243, 57,16,104,45,22,71,219,246,211,24,157,24,41,79,78,141,247,189,238,17,237,124,45,114,199,203,177,140,241,197,152,162, 72,112,47,136,87,0,151,141,66,101,26,170,143,193,237,227,80,125,46,68,35,71,97,46,152,52,249,97,220,32,194,153, 245,75,212,53,81,4,33,249,112,240,158,229,229,77,8,248,131,40,209,79,148,93,139,112,123,57,220,62,23,182,109,217, 131,144,175,5,217,161,140,69,14,146,186,38,138,127,77,65,215,196,68,69,172,116,62,24,188,83,218,17,56,0,155,149, 160,122,86,79,222,188,41,128,253,161,99,232,203,62,46,9,81,233,212,53,49,81,119,140,186,38,122,103,141,79,47,134, 199,6,68,107,48,1,174,48,40,110,142,67,225,19,200,189,123,91,249,97,126,235,215,53,209,219,240,29,144,131,142,161, 145,129,239,166,177,64,187,155,98,216,229,143,193,252,186,76,185,81,61,239,200,213,220,13,1,186,38,138,36,145,204,100, 159,89,91,177,15,65,167,21,79,251,159,88,142,252,147,187,90,108,227,111,252,173,120,151,122,46,210,188,243,54,0,204, 230,63,95,218,104,253,191,0,0,56,124,69,189,15,0,195,55,197,217,127,245,252,2,115,74,18,42,134,104,28,203,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Down2x[1187] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,90,73,68,65,84,88,133,237,151,75,108,84, 85,24,199,127,231,220,123,167,45,136,80,192,52,106,164,166,74,133,38,8,49,32,6,35,226,2,35,77,148,5,232,198, 4,19,20,81,23,110,208,184,37,238,8,52,65,99,98,98,208,196,4,23,4,173,152,64,8,226,163,60,218,130,242,48, 66,169,60,3,161,180,180,5,250,160,157,199,189,231,156,207,197,204,180,211,50,45,23,35,97,195,151,252,115,103,230,156, 57,255,223,247,157,199,189,23,238,199,61,14,21,167,211,162,117,190,248,94,0,128,136,96,157,185,237,127,18,147,76,89, 195,122,210,183,235,231,199,1,0,248,116,205,215,56,103,177,98,176,206,96,197,224,156,193,58,139,43,248,45,178,33,223, 212,215,133,253,41,83,2,255,35,0,192,129,11,219,137,76,154,200,101,136,108,134,200,166,137,108,134,208,166,137,108,72, 198,36,89,54,251,93,4,36,238,152,58,110,71,149,155,45,165,110,157,181,124,27,18,219,247,206,1,226,132,195,221,61, 0,201,85,85,138,100,153,111,139,179,56,255,51,64,206,29,65,16,25,169,124,155,187,155,0,34,130,19,151,203,54,47, 134,128,34,151,25,170,196,93,1,200,90,57,68,28,174,64,144,5,75,71,131,119,108,14,69,182,225,162,117,126,54,13, 69,10,64,9,9,33,159,105,22,64,16,80,130,210,130,136,97,48,186,142,40,139,26,222,12,37,37,214,239,94,244,17, 38,199,94,6,208,84,103,110,217,66,183,158,3,162,62,88,88,179,244,243,229,139,87,149,129,67,200,102,42,34,88,177, 160,29,10,135,86,66,104,7,232,13,187,16,207,226,123,26,17,72,36,74,88,243,250,58,196,17,32,4,34,194,15,191, 124,27,94,235,237,248,164,88,5,138,30,197,207,127,236,125,185,114,241,251,171,159,168,172,78,156,232,104,192,216,8,35, 33,142,8,43,33,41,219,207,141,116,27,25,155,28,113,46,136,8,226,64,156,160,8,120,169,106,21,199,79,254,153,110, 61,127,172,254,224,70,251,102,49,175,162,107,32,221,103,63,220,209,184,229,68,79,111,143,173,156,58,7,135,1,109,65, 91,122,194,54,186,82,231,48,42,133,31,104,252,64,225,39,20,94,160,134,190,123,129,230,217,202,90,174,118,119,184,83, 231,143,95,244,39,218,183,139,249,140,9,112,244,43,162,200,164,107,183,254,252,89,223,4,61,69,42,38,87,34,218,114, 61,115,153,126,211,137,14,192,11,116,214,56,161,115,159,53,94,206,188,186,98,1,101,186,156,134,67,187,7,196,153,87, 198,187,41,141,185,11,154,54,209,53,48,120,115,217,119,123,190,200,204,152,60,135,132,95,66,95,120,21,207,215,120,254, 112,166,126,34,91,129,108,37,52,15,61,248,24,51,203,23,178,107,111,125,42,50,230,141,166,58,46,141,229,1,224,141, 215,216,118,200,93,153,58,111,160,179,247,230,245,165,115,171,159,11,58,146,173,56,29,101,51,245,53,158,159,189,106,79, 161,60,69,105,48,145,133,15,175,100,79,195,206,100,103,79,251,166,166,141,102,203,120,227,223,22,0,224,114,179,59,86, 90,211,254,164,88,53,235,153,234,23,252,246,100,43,218,147,97,243,64,227,121,10,79,107,22,84,172,160,165,165,37,58, 113,250,175,198,198,13,102,204,121,47,140,88,7,81,239,68,187,246,88,107,227,63,93,237,55,236,188,138,151,209,158,66, 123,249,133,167,240,18,138,154,233,75,184,217,147,148,198,35,251,186,83,68,43,136,121,75,142,5,208,178,158,80,133,166, 118,111,227,206,222,68,56,149,170,201,243,81,26,148,86,104,95,241,232,164,217,148,171,42,126,220,85,159,138,172,94,118, 116,3,125,113,198,141,13,0,112,96,51,29,153,76,248,218,142,221,219,83,51,202,230,51,189,244,113,0,30,240,166,49, 115,194,18,190,255,105,91,210,100,82,107,15,111,10,255,142,59,38,196,88,3,57,72,31,8,218,154,93,215,180,167,163, 222,171,221,109,47,46,153,183,60,232,9,47,51,183,252,85,126,221,247,91,250,194,197,51,219,26,235,236,102,32,200,73, 23,36,56,230,116,140,5,144,55,45,201,169,52,175,43,127,184,83,147,106,250,159,50,198,84,45,158,181,194,111,61,115, 210,52,31,62,112,238,232,86,243,158,25,196,7,18,5,16,126,206,195,99,248,212,29,1,83,12,96,40,227,81,74,228, 84,210,117,86,246,171,71,58,107,147,201,228,148,166,35,7,147,103,247,132,111,245,93,32,85,96,150,207,94,141,18,48, 242,177,105,188,10,140,214,208,32,54,133,24,227,126,79,79,232,88,125,237,140,125,231,210,126,57,157,27,216,1,118,212, 181,80,102,52,192,120,239,5,58,7,88,88,198,194,236,242,80,249,144,81,102,54,103,152,151,163,200,90,136,245,98,82, 208,183,152,10,1,10,117,231,79,168,247,227,94,196,191,235,53,47,22,118,148,109,219,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Home1x[606] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,10,14,20,37,19,83,42,210,59,0,0,1,235,73, 68,65,84,56,203,149,147,191,107,83,81,20,128,191,123,251,222,75,211,64,242,36,160,85,135,100,81,123,19,104,85,172, 17,92,28,140,66,19,167,135,212,74,39,145,162,163,24,92,58,180,110,193,169,254,24,234,212,37,139,245,199,96,19,240, 15,240,63,16,121,91,92,196,90,219,240,98,81,137,33,121,215,33,246,217,151,80,33,103,186,92,206,247,221,115,14,231, 194,1,225,41,85,172,128,174,128,246,148,122,200,48,177,7,123,74,105,79,169,61,73,113,104,120,177,56,163,203,55,111, 252,87,34,250,225,154,235,110,20,148,98,253,220,89,182,39,78,113,228,240,56,39,188,38,83,107,107,212,92,151,130,82, 215,14,185,110,117,64,176,31,126,83,156,97,247,248,49,148,202,50,22,141,210,106,181,24,219,252,74,182,92,30,144,136, 126,184,122,251,22,157,100,146,116,42,77,42,149,2,64,107,104,183,219,236,214,235,156,44,149,66,18,177,31,126,247,160, 68,199,48,201,229,46,96,219,118,208,154,214,26,0,223,247,249,185,181,69,114,110,46,144,136,10,232,130,82,188,127,84, 198,107,54,57,63,157,35,30,143,35,132,8,9,124,223,15,206,134,16,140,230,243,212,92,23,3,184,3,172,78,157,62, 195,253,210,61,54,170,111,3,240,201,202,51,86,30,63,69,139,17,116,167,133,48,70,209,221,223,44,47,45,209,238,165, 204,202,121,120,190,48,153,33,17,79,0,160,212,4,153,140,34,155,205,244,94,20,146,145,244,149,222,196,83,121,144,22, 90,107,22,38,51,204,195,186,236,239,211,178,44,76,211,196,48,140,224,254,75,227,7,0,31,234,59,116,187,126,144,11, 48,32,144,82,34,165,196,146,159,1,232,96,241,241,83,3,128,111,222,47,58,34,18,90,36,99,96,179,254,14,207,231, 40,0,151,46,78,115,53,26,67,234,113,46,75,147,237,77,66,21,24,253,21,252,155,126,239,165,239,222,14,162,217,56, 112,245,3,65,36,18,193,182,109,18,137,4,2,137,16,16,139,197,112,28,103,0,178,44,43,252,23,174,207,58,175,0, 135,225,98,245,229,139,215,119,255,0,86,248,213,163,133,187,128,26,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Home2x[1774] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,165,73,68,65,84,88,133,213,151,105,108,84, 215,21,199,127,119,121,111,54,143,199,96,199,118,48,120,12,184,200,20,8,187,218,34,71,8,186,56,106,80,165,162,42, 180,105,138,132,148,168,74,34,65,84,5,169,223,218,74,249,148,79,17,81,149,46,18,4,186,80,86,41,105,43,149,6, 21,53,4,137,184,13,132,8,154,64,98,226,98,48,216,96,60,216,99,207,246,238,189,253,48,11,94,134,85,202,135,30, 233,74,119,222,61,239,156,255,57,231,127,206,220,7,255,207,178,79,202,151,255,32,196,173,189,48,231,97,109,136,135,121, 105,63,248,40,181,167,177,161,225,137,150,154,154,218,211,189,189,253,129,49,223,120,26,62,249,194,1,236,129,198,136,214, 239,44,152,55,111,65,219,172,89,225,220,208,16,35,233,52,167,251,250,6,242,65,240,157,31,66,247,131,216,147,15,162, 252,59,88,17,11,133,78,175,90,190,124,113,91,91,91,24,41,113,64,196,247,89,222,218,218,20,246,188,191,254,17,190, 249,133,0,216,175,212,143,106,107,106,254,222,217,217,57,171,190,177,81,34,37,40,5,66,224,128,144,231,177,44,153,108, 8,249,254,159,246,41,245,131,251,181,123,207,18,252,28,228,66,165,94,111,104,106,122,122,197,170,85,117,74,74,48,6, 172,197,166,82,216,225,97,50,198,96,0,7,4,214,114,238,242,229,155,153,92,238,23,155,172,221,113,47,251,234,174,81, 67,226,17,173,143,182,119,116,60,177,100,245,234,90,169,74,234,66,96,135,134,112,195,195,20,140,33,164,20,198,57,140, 115,32,4,245,181,181,145,145,92,238,171,223,181,182,246,128,181,255,120,168,12,236,134,5,49,207,59,178,108,205,154,217, 77,173,173,26,107,193,24,92,16,96,47,93,34,184,117,139,51,195,67,92,29,188,193,202,100,146,230,104,148,113,107,201, 58,135,3,44,112,113,96,96,100,52,157,62,248,61,99,158,21,197,4,77,147,170,28,216,171,212,147,181,53,53,239,117, 110,216,208,214,212,222,174,81,10,164,196,25,131,189,120,145,241,155,55,121,127,104,144,196,75,219,88,117,234,20,255,77, 196,232,73,143,18,149,146,112,137,19,56,199,220,198,198,218,153,137,196,83,7,180,126,235,24,232,251,202,192,1,173,127, 22,111,104,216,246,149,174,174,25,94,36,82,140,218,90,220,200,8,230,252,121,110,142,142,114,46,147,38,249,203,55,136, 44,121,12,99,12,194,90,174,253,244,101,212,169,51,44,138,215,146,3,70,140,193,81,12,123,32,149,202,12,14,15,127, 48,28,4,93,63,134,241,170,0,118,65,56,166,212,161,57,11,22,60,190,120,253,250,184,152,72,182,129,1,204,133,11, 92,74,167,185,18,9,51,255,205,221,200,250,122,130,32,64,74,137,148,18,107,45,67,191,122,131,244,222,189,44,79,212, 97,132,32,101,12,22,112,206,145,74,167,115,253,55,110,156,79,7,193,218,45,144,42,251,85,0,191,135,217,81,173,79, 44,237,236,92,249,165,181,107,163,229,246,66,8,108,111,47,193,133,11,156,75,167,73,127,121,33,237,187,247,32,227,113, 140,49,68,34,17,102,206,156,73,44,22,195,24,67,120,197,74,188,214,57,124,124,228,8,205,218,35,170,53,89,231,176, 128,239,251,58,234,251,245,217,241,241,167,190,237,220,129,183,32,93,201,192,62,41,251,31,223,184,177,57,49,127,126,49, 35,214,226,130,0,243,209,71,100,251,250,248,112,116,148,25,155,55,211,244,194,11,24,99,176,214,18,139,197,8,135,195, 147,202,151,201,100,200,100,50,100,207,158,165,231,249,231,89,18,10,81,19,10,113,221,24,10,37,114,230,179,89,219,123, 245,234,21,107,204,186,239,67,143,4,208,74,229,18,237,237,2,165,64,41,156,49,4,221,221,140,124,254,57,221,35,35, 204,126,245,85,154,95,124,17,231,28,74,41,18,137,4,190,239,99,173,173,44,99,12,190,239,83,83,83,67,108,233,82, 58,14,29,226,172,148,220,200,100,104,212,26,191,68,78,29,10,201,185,45,45,115,164,82,255,156,220,5,165,201,230,198, 198,8,222,125,151,107,151,47,243,161,181,44,58,120,144,196,186,117,56,231,208,90,19,141,70,75,73,154,236,188,188,23, 66,16,137,68,8,183,180,176,248,237,183,185,212,216,72,239,216,24,141,90,19,41,129,144,158,135,86,202,77,107,67,55, 48,64,225,216,49,46,12,14,114,233,209,71,89,126,228,8,225,121,243,0,240,60,15,207,243,38,57,158,234,124,226,242, 60,15,47,145,96,225,254,253,140,173,94,205,127,70,71,121,68,41,226,82,34,197,237,230,171,0,48,159,125,70,238,248, 113,78,246,247,19,172,95,207,99,135,15,35,227,113,156,115,72,41,17,66,220,151,243,169,217,144,158,199,188,215,94,35, 252,204,51,188,63,52,196,12,41,153,33,111,199,173,1,2,99,194,215,78,158,228,124,42,53,58,190,105,83,108,197,43, 175,72,107,45,184,226,240,114,206,225,220,228,65,86,254,45,132,64,107,141,16,98,154,78,89,207,24,67,203,214,173,28, 239,233,41,4,71,143,6,29,241,120,36,31,4,53,21,0,57,107,215,255,187,175,239,196,220,45,91,126,114,184,174,110, 215,215,149,34,8,2,142,30,125,135,177,241,177,138,163,169,18,141,196,232,234,234,98,199,142,215,201,231,115,211,206,1, 60,63,196,75,219,182,146,207,231,25,156,63,63,104,59,113,226,91,31,244,247,255,165,96,237,154,10,128,205,240,49,206, 205,100,231,78,182,111,223,190,171,194,234,144,207,167,61,231,39,25,20,66,84,192,44,236,88,132,115,142,124,62,135,73, 62,137,239,41,60,45,49,198,146,47,88,114,133,0,174,252,13,231,28,133,66,1,165,84,102,99,127,255,123,64,221,52, 14,76,148,114,13,91,231,180,162,181,174,16,208,247,253,202,222,243,60,146,173,73,172,181,37,96,32,5,40,33,138,36, 155,144,176,114,25,172,181,211,106,84,245,15,194,57,135,181,150,100,50,137,214,85,85,0,104,104,104,168,0,24,207,6, 228,242,134,241,92,192,173,177,28,35,99,57,50,57,195,215,162,197,128,74,99,59,255,64,0,148,214,149,72,68,105,35, 25,71,139,94,242,174,3,4,21,0,255,250,228,90,117,148,81,38,118,69,97,234,241,93,75,80,118,44,40,165,84,128, 39,62,101,195,154,63,163,196,40,80,157,249,213,196,24,131,115,46,152,250,252,142,25,48,198,128,115,147,217,47,32,207, 50,14,28,95,92,41,77,113,232,248,172,171,59,83,213,177,246,138,35,187,80,40,32,165,204,62,16,0,237,121,20,131, 159,220,130,158,231,21,241,8,200,102,179,60,247,220,179,85,219,180,108,43,151,203,149,203,122,207,12,132,202,81,89,107, 145,66,86,53,60,17,80,62,159,39,159,191,205,173,106,37,145,82,82,40,20,8,130,192,2,13,20,239,3,193,84,0, 62,80,47,132,8,178,217,172,142,199,227,147,122,254,78,18,143,199,239,122,94,6,116,253,250,117,10,133,130,1,154,75, 126,7,1,59,17,128,6,252,84,42,245,230,206,157,59,183,56,231,238,122,99,6,248,205,175,127,123,47,149,138,8,33, 178,221,221,221,123,129,48,197,96,5,76,190,19,10,160,190,180,106,75,74,119,30,2,15,38,121,138,183,175,12,112,11, 184,12,100,167,2,40,139,7,68,74,72,31,234,227,181,138,56,160,80,114,154,101,194,21,253,127,69,252,95,225,237,227, 107,122,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Left1x[655] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,33,73,68,65,84,56,141, 133,147,79,72,20,113,20,199,191,111,102,126,179,59,187,82,98,108,173,27,181,66,8,17,9,130,149,110,91,135,220,34, 86,211,76,68,34,136,14,37,116,178,162,45,186,122,137,16,3,59,196,30,36,240,208,37,10,130,176,110,29,36,87,138, 142,21,30,34,75,247,80,185,108,146,187,237,204,238,204,239,247,235,48,153,174,140,238,131,119,122,127,248,188,239,123,15, 82,74,212,242,163,55,181,43,241,91,90,198,43,166,97,11,139,167,88,29,17,38,163,225,230,174,133,31,159,13,175,28, 101,139,226,22,16,62,157,60,220,223,115,109,224,158,103,49,0,111,130,120,138,13,25,190,186,241,139,201,97,99,207,206, 102,82,104,115,208,170,200,42,242,190,200,129,174,193,83,87,13,147,175,224,227,247,105,28,137,246,128,84,88,241,20,147, 85,213,132,159,36,165,92,135,76,83,137,67,125,141,29,7,59,217,215,95,31,80,176,242,208,84,134,88,83,31,136,20, 16,0,9,64,74,1,33,5,238,164,47,184,4,241,20,27,10,26,219,31,244,159,184,228,175,175,111,160,247,139,175,192, 165,3,166,232,16,146,99,102,254,25,136,8,4,130,132,171,126,123,180,215,29,225,216,109,246,168,169,113,255,249,238,227, 131,70,174,180,128,119,223,222,128,49,31,116,77,7,87,4,44,81,128,105,22,80,180,86,80,182,75,80,72,133,159,5, 209,186,59,177,166,1,231,54,44,251,15,76,231,55,74,50,15,112,1,135,155,168,8,19,92,114,72,46,193,29,9,199, 22,224,142,59,114,174,152,117,215,56,51,106,95,206,46,125,185,254,248,101,218,132,237,147,173,123,19,144,122,25,66,47, 129,5,0,127,64,133,30,80,193,12,5,204,175,64,213,168,90,199,245,34,146,130,169,182,150,88,184,189,45,166,207,21, 94,35,95,153,135,144,192,233,200,13,136,127,20,220,118,29,0,210,79,238,174,53,248,191,70,21,147,187,118,68,146,231, 206,12,4,138,108,17,115,203,211,232,12,13,227,254,196,136,197,43,240,111,186,198,141,135,196,116,125,188,183,251,172,17, 14,135,40,168,132,48,250,112,4,153,49,155,54,230,122,158,114,102,204,158,176,43,149,142,231,47,158,102,103,103,223,150, 203,229,138,87,90,181,6,94,182,58,82,195,182,80,50,191,156,11,120,17,212,124,229,90,239,252,23,109,243,52,116,236, 202,203,9,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Left2x[1200] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,103,73,68,65,84,88,133,237,150,109,104,213, 85,28,199,63,231,156,255,127,187,206,204,138,28,164,34,195,180,21,17,20,89,179,221,169,101,86,155,217,131,74,11,2, 83,18,77,123,145,216,230,94,198,32,164,94,168,65,65,208,19,204,55,69,77,202,48,240,69,74,150,232,69,3,137,5, 234,22,101,234,124,218,117,222,61,222,187,123,239,121,232,197,255,191,219,189,215,173,246,64,239,246,133,31,191,63,231,207, 249,253,190,231,247,116,14,76,97,10,147,196,226,70,85,95,221,224,185,137,238,151,147,240,45,162,59,188,157,11,238,186, 127,175,239,149,78,216,200,132,8,60,221,200,244,154,38,239,192,226,251,86,188,245,250,11,111,71,60,229,79,152,128,55, 222,13,85,77,204,77,226,31,90,179,116,211,252,69,247,46,243,149,84,19,118,14,227,140,64,117,163,247,216,116,239,214, 182,55,86,191,179,240,225,202,37,126,123,215,73,172,211,147,34,48,230,8,68,27,212,250,89,51,103,127,180,245,197,230, 50,229,43,58,186,78,146,49,105,28,32,192,252,127,4,154,145,209,164,183,187,114,206,67,91,54,212,237,136,244,101,226, 156,239,254,29,99,53,206,89,112,14,7,106,44,157,112,124,183,22,227,34,16,109,98,6,131,222,254,154,7,234,170,159, 139,110,136,92,234,105,39,145,186,138,117,6,107,13,198,105,164,144,52,191,246,9,214,89,28,6,235,108,40,6,23,106, 99,13,239,182,188,57,52,174,8,212,108,143,204,119,194,28,94,187,108,227,156,69,149,79,248,29,93,39,72,102,250,112, 184,156,97,235,12,177,191,190,197,88,141,177,26,29,106,99,179,104,155,205,233,229,247,188,58,234,33,71,36,80,211,232, 61,94,226,251,223,173,171,219,49,99,246,157,243,68,219,229,31,201,154,116,248,215,225,176,32,28,22,131,197,224,164,198, 162,113,46,208,195,228,172,51,56,44,206,141,158,157,155,8,68,27,252,45,119,204,44,223,179,174,118,251,52,233,67,219, 229,35,65,174,133,64,8,16,18,16,0,22,43,12,22,27,144,16,26,39,13,228,165,39,8,191,6,44,14,70,236,215, 2,2,209,38,255,171,138,242,202,231,215,175,108,140,92,234,59,75,103,247,89,4,2,33,4,82,6,90,0,66,16,156, 12,75,202,244,147,204,244,50,164,147,104,147,198,26,135,112,10,233,124,20,37,97,109,88,112,140,56,173,10,8,88,107, 171,133,7,131,153,4,125,67,215,209,38,3,4,206,149,16,1,25,28,131,153,30,250,51,113,250,179,215,201,216,84,208, 9,14,156,5,107,29,86,59,172,113,24,237,240,136,144,214,169,177,165,96,238,121,83,113,142,179,187,62,222,191,115,243, 179,75,95,42,83,210,231,204,181,24,165,37,62,210,3,67,26,45,210,32,13,82,9,132,20,120,82,224,16,224,28,214, 130,48,97,134,0,231,32,155,77,229,19,80,20,205,140,130,73,216,218,138,57,182,75,111,239,237,75,108,221,247,195,222, 164,111,202,220,163,21,117,164,237,32,3,217,110,50,12,34,148,69,121,18,229,137,64,124,129,231,139,127,214,148,64,122, 2,169,4,82,129,84,5,173,239,83,84,11,35,141,98,25,219,99,190,238,191,146,169,253,254,167,125,137,43,87,175,234, 39,23,174,231,182,178,89,161,209,192,129,242,36,202,23,40,95,162,124,137,244,67,199,57,231,65,234,130,218,41,136,120, 65,212,71,106,67,9,200,83,45,186,109,222,18,150,28,179,135,91,111,36,186,238,94,90,245,74,233,111,221,7,137,167, 255,68,229,57,89,89,209,0,142,176,6,130,52,4,218,97,117,88,19,198,21,216,14,197,142,70,32,135,11,71,137,247, 118,232,85,186,190,109,79,79,95,162,118,213,83,107,35,157,67,191,114,126,240,151,128,132,23,212,193,123,31,52,255,155, 153,124,140,105,20,187,144,157,3,108,239,53,134,78,124,104,182,101,55,118,110,254,98,160,165,97,205,170,250,200,237,229, 229,156,238,63,132,80,38,151,227,227,187,117,20,208,161,100,243,36,147,247,109,243,236,231,66,82,12,83,36,26,208,167, 62,215,159,118,158,238,217,244,229,55,45,3,131,113,231,170,202,235,153,230,223,18,12,166,0,73,96,8,72,23,57,213, 121,98,194,181,28,70,123,77,184,17,190,93,252,140,187,32,21,7,47,167,206,172,136,168,178,178,71,22,60,163,74,84, 41,71,99,71,184,24,179,239,23,157,184,152,68,54,36,87,208,134,163,213,128,11,13,216,60,209,128,119,238,103,221,62, 112,137,229,206,30,253,172,171,59,94,181,186,182,62,146,23,129,225,240,22,71,112,152,208,77,151,194,127,189,167,134,29, 155,112,179,1,116,50,65,234,98,204,182,150,46,184,49,189,227,143,246,7,147,67,3,222,197,152,221,89,116,242,116,158, 76,238,217,84,4,17,18,247,0,127,241,54,245,114,248,24,241,195,181,220,117,53,133,41,140,5,127,3,141,99,70,166, 140,152,25,26,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Right1x[676] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,54,73,68,65,84,56,141, 149,146,75,72,84,97,28,197,127,223,227,206,195,70,195,20,82,196,94,68,32,104,20,4,133,211,70,104,209,34,130,4, 91,70,129,66,184,201,114,140,54,66,43,55,141,144,139,40,114,19,20,189,164,69,98,62,112,17,45,102,208,41,164,20, 55,209,34,44,51,157,177,129,30,227,120,239,220,251,181,8,95,51,19,212,129,179,249,254,135,195,249,159,255,135,49,134, 124,134,187,116,172,177,83,183,21,155,229,83,82,4,198,163,113,119,245,129,190,112,151,53,16,142,88,161,98,154,53,20, 53,0,184,210,210,27,60,121,244,236,105,4,179,225,136,213,240,223,6,74,106,154,14,159,241,181,55,95,175,13,250,67, 19,225,136,213,86,76,39,26,35,250,43,134,157,91,30,21,217,155,237,131,129,169,207,99,84,149,237,195,39,183,241,120, 252,214,202,135,249,153,97,99,56,31,139,58,63,55,12,58,181,233,185,120,31,41,20,74,40,132,144,8,4,0,137,79, 67,120,184,148,249,119,176,171,188,158,248,244,184,51,54,57,176,128,49,167,98,81,103,6,64,3,184,94,142,216,199,103, 40,169,81,66,129,16,8,1,66,1,194,99,217,158,35,189,52,207,193,186,35,86,77,213,158,218,167,99,119,39,194,17, 171,35,22,117,250,53,64,206,91,37,157,89,192,118,179,216,110,22,165,52,165,37,101,148,4,66,248,45,63,70,184,216, 94,142,119,75,163,212,132,234,68,107,115,87,201,208,171,71,125,199,175,90,199,52,192,210,143,57,222,39,95,175,119,160, 125,130,148,35,209,89,137,214,10,191,47,136,79,6,80,248,41,205,149,163,76,144,172,157,49,235,43,108,41,80,130,212, 2,101,201,63,244,129,167,178,160,44,26,42,154,72,47,102,204,131,151,119,86,178,171,153,141,21,0,90,14,93,91,55, 80,150,64,105,201,200,92,47,218,39,169,14,237,167,110,251,9,38,223,196,237,196,219,248,87,227,178,169,68,193,226,237, 39,61,91,206,40,45,178,151,206,117,7,148,82,212,87,54,81,161,247,50,240,252,97,102,49,249,101,196,184,121,103,52, 198,20,124,142,112,196,50,151,91,187,249,229,37,73,166,82,230,197,232,224,138,237,216,29,177,27,78,127,190,182,160,131, 53,56,57,155,196,84,98,117,122,118,106,209,219,20,185,160,179,191,37,168,40,175,204,124,251,158,26,54,46,23,54,71, 254,167,4,66,18,95,78,167,238,197,162,133,145,243,241,27,65,222,9,180,110,118,229,182,0,0,0,0,73,69,78,68, 174,66,96,130, }; const unsigned char Right2x[1219] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,122,73,68,65,84,88,133,237,150,127,104,85, 101,24,199,63,239,123,206,113,222,100,234,166,206,20,51,83,11,138,126,151,46,231,40,42,19,45,9,203,250,67,138,50, 35,40,12,66,55,35,9,194,160,162,200,254,145,68,35,44,132,229,15,164,133,24,101,172,105,179,54,220,114,42,230,175, 208,205,153,83,55,155,218,182,187,187,123,126,188,239,219,31,247,156,121,119,221,230,156,224,95,123,224,185,207,203,61,231, 121,190,223,243,125,158,243,190,7,6,109,208,6,104,5,69,182,153,81,108,61,119,189,117,228,245,36,79,30,123,231,198, 194,98,123,37,32,6,90,195,26,104,226,45,5,114,229,135,175,125,107,199,147,173,143,48,181,110,122,222,108,189,237,220, 111,248,215,90,231,186,20,144,82,48,191,112,241,208,5,143,189,49,39,150,112,246,229,191,203,132,27,74,192,83,46,71, 155,171,184,103,106,190,243,250,188,247,111,31,102,101,31,44,40,182,103,220,48,2,90,7,36,131,56,71,155,42,25,57, 98,184,124,251,133,143,114,70,13,31,91,94,176,204,90,212,223,26,61,14,79,65,145,109,16,116,246,153,105,136,125,250, 214,119,28,104,44,195,83,46,198,104,198,100,79,100,76,108,18,155,203,214,36,235,155,14,127,61,190,65,45,221,186,21, 53,32,2,31,44,94,139,101,57,72,36,66,8,4,2,162,24,102,74,97,243,231,169,31,241,181,139,214,10,131,38,59, 107,52,83,70,63,72,121,77,105,178,250,232,206,61,73,25,204,175,253,140,214,222,8,216,189,83,51,236,62,177,9,41, 172,46,23,66,164,145,185,44,133,214,26,109,12,218,40,90,58,78,211,158,188,192,163,15,205,29,58,42,103,108,225,207, 85,155,255,202,95,46,159,172,254,220,61,222,19,76,175,51,160,140,194,87,30,190,246,8,180,135,175,93,124,149,90,7, 120,40,60,116,24,149,240,80,194,69,145,186,222,238,94,160,230,212,118,38,78,184,205,126,105,206,146,9,195,156,172,218, 153,69,246,83,215,68,192,24,157,2,83,30,190,114,241,181,27,130,132,46,124,2,225,161,132,143,22,62,10,151,184,223, 194,197,100,35,231,59,78,114,174,173,142,221,199,55,225,89,113,241,234,188,119,178,115,70,228,109,155,185,220,89,218,239, 22,104,173,8,180,135,64,34,165,196,22,86,138,175,148,97,255,5,202,4,116,120,151,104,75,182,144,240,219,209,74,161, 149,73,115,104,254,187,129,59,242,166,243,242,220,37,177,109,21,37,31,83,124,124,86,229,170,224,153,171,18,240,181,75, 194,107,195,146,54,142,227,16,104,131,9,20,70,5,4,198,197,213,113,60,149,192,8,0,131,180,9,103,4,82,63,26, 99,12,70,67,160,61,60,237,162,77,32,128,41,253,82,32,225,181,211,212,86,143,144,96,57,18,203,22,88,182,64,218, 2,105,9,164,4,233,164,222,9,131,192,104,131,142,192,133,1,35,192,8,238,30,255,4,121,177,201,108,217,177,174,179, 181,253,226,234,202,85,193,138,171,17,232,54,23,210,18,72,43,140,182,192,10,163,148,2,17,222,105,12,24,29,41,96, 0,131,45,98,60,60,233,89,252,184,54,223,151,109,232,76,116,116,190,89,189,90,109,2,76,95,4,68,250,127,66,166, 246,123,41,195,167,142,192,187,84,16,33,1,131,209,225,147,3,195,156,92,166,221,252,60,245,39,235,130,138,154,178,182, 214,70,179,224,208,102,85,75,234,240,83,233,36,50,9,200,116,5,94,124,96,69,23,80,164,130,144,41,249,133,76,245, 187,236,204,151,248,129,139,86,169,154,99,98,19,185,55,247,105,42,247,238,246,14,30,169,173,59,245,71,176,240,76,13, 103,195,186,225,36,95,222,29,123,106,129,0,88,187,229,147,30,46,117,183,226,37,43,176,28,129,14,135,239,214,236,251, 152,20,203,103,251,47,165,201,134,211,13,59,143,108,84,203,218,91,136,167,215,37,99,247,205,36,96,0,93,245,69,48, 28,24,2,56,161,167,175,29,192,41,44,182,43,16,100,89,150,64,27,139,187,70,62,78,204,29,71,73,233,6,247,223, 127,46,174,169,253,70,173,3,252,176,102,186,119,59,27,50,9,232,208,21,16,132,108,35,239,34,216,85,68,8,134,102, 221,196,253,185,179,184,116,182,211,148,252,180,62,113,238,88,114,233,177,31,212,174,48,63,114,149,182,238,115,8,73,3, 190,66,153,180,66,22,128,45,134,48,45,103,33,251,247,239,11,118,253,254,107,75,227,62,253,202,201,114,117,34,3,220, 79,139,87,124,49,245,68,192,0,94,8,24,1,7,225,189,22,209,32,9,140,242,161,172,162,220,61,112,100,239,193,250, 29,254,162,166,195,252,151,65,52,138,46,244,124,44,247,231,99,210,190,2,28,100,65,145,125,33,47,119,156,223,116,254, 108,201,161,245,234,189,120,156,128,203,45,140,72,251,189,1,247,165,64,166,69,82,70,179,208,245,170,54,55,55,45,223, 179,90,125,69,247,1,139,84,27,180,65,235,151,253,15,204,19,30,41,201,138,88,137,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Up1x[652] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,30,73,68,65,84,56,141, 149,147,79,104,19,65,20,198,191,55,187,51,217,141,133,122,104,76,255,209,130,4,237,193,64,42,168,208,213,138,104,68, 98,69,45,20,114,107,74,201,73,144,98,22,193,171,199,82,145,160,23,15,69,79,30,165,66,241,226,77,42,94,68,80, 208,67,41,180,42,149,148,52,137,166,154,38,217,217,25,15,81,172,33,169,246,29,223,251,230,199,124,223,155,33,173,53, 218,213,201,155,124,30,0,150,102,189,233,118,26,214,110,224,184,60,221,223,21,73,246,117,29,76,58,46,79,239,9,224, 184,60,26,16,251,178,87,206,76,6,199,70,147,193,128,8,102,29,151,71,255,11,224,184,188,3,132,197,137,115,211,214, 150,151,199,150,183,137,248,200,37,11,132,69,199,229,29,255,4,16,225,209,232,112,162,167,55,52,72,159,75,31,240,177, 244,30,157,157,157,20,27,58,209,13,194,195,93,1,142,203,211,253,7,34,137,179,71,199,249,74,254,13,12,198,97,50, 142,87,107,11,136,13,29,23,161,253,61,137,230,60,216,142,195,81,193,237,108,42,225,218,235,229,101,104,242,32,132,137, 58,125,199,54,21,241,46,255,28,23,78,95,13,154,166,248,43,15,182,211,247,212,88,198,82,228,161,34,75,16,1,1, 30,224,40,203,117,8,219,64,65,174,162,168,86,113,254,212,69,139,216,159,60,216,111,223,241,99,227,221,135,250,98,148, 175,172,193,228,6,56,55,80,81,5,84,141,175,16,54,131,176,25,150,191,189,64,184,55,68,71,14,15,135,137,53,242, 160,145,140,153,30,232,142,100,111,76,220,177,5,15,64,65,194,135,135,215,185,5,188,45,60,131,100,21,16,35,36,6, 50,208,90,67,41,160,94,175,225,241,211,249,74,177,180,57,99,18,67,234,83,110,197,158,185,119,185,225,137,163,122,247, 250,19,171,44,115,240,141,109,112,193,192,76,130,193,9,115,15,110,87,101,77,91,191,236,7,137,33,101,46,205,122,78, 211,38,180,214,10,165,250,23,48,131,96,112,6,30,104,64,100,77,91,47,231,60,218,245,29,0,128,210,62,126,212,139, 141,43,251,26,178,174,160,85,235,63,99,182,106,250,74,162,90,219,134,50,53,160,21,124,73,240,189,61,0,164,47,17, 31,188,6,98,0,49,2,17,246,0,32,108,220,186,63,25,110,37,38,194,70,115,239,39,48,247,197,219,182,208,154,34, 0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Up2x[1193] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,96,73,68,65,84,88,133,237,150,91,108,21, 85,20,134,191,53,123,79,79,123,106,67,209,88,229,22,16,68,169,36,74,90,77,161,165,4,49,84,226,37,165,68,76, 68,209,68,162,49,193,75,144,2,79,18,12,198,24,19,140,36,198,7,194,19,193,224,131,81,12,225,1,19,12,81,210, 234,131,196,11,105,20,17,164,180,180,182,5,122,161,237,233,57,51,123,249,48,231,148,114,122,7,53,62,176,146,149,61, 151,61,235,255,214,218,107,207,12,220,180,235,180,133,59,200,41,223,98,171,110,52,142,119,189,15,22,246,153,61,190,228, 28,41,175,245,95,255,207,1,42,54,251,175,204,188,125,254,218,87,159,126,155,91,242,10,222,45,175,181,43,254,51,128, 138,45,182,114,74,193,173,187,170,151,61,27,239,13,46,178,250,225,231,242,173,245,63,95,178,41,118,247,191,14,176,236, 77,102,249,38,231,208,83,143,108,136,95,184,114,138,227,103,62,35,48,9,170,150,172,46,240,108,240,85,233,54,166,76, 22,192,76,116,98,233,14,226,38,180,117,107,150,191,56,45,22,183,210,208,242,45,78,67,90,187,255,96,193,244,135,196, 154,88,126,91,123,83,249,226,233,110,127,67,3,58,209,184,19,173,128,228,246,218,3,203,23,61,49,103,214,157,115,188, 134,214,227,128,32,34,56,13,249,254,220,33,22,45,88,156,115,215,180,249,101,205,115,236,174,137,138,195,4,43,80,81, 107,223,42,158,93,242,194,202,178,53,185,39,154,142,48,144,234,195,105,152,246,128,100,208,79,71,111,35,75,239,123,210, 63,219,116,234,254,59,74,18,77,141,245,250,211,63,2,80,94,107,30,47,154,58,99,247,51,85,27,227,191,182,213,211, 157,104,31,20,15,53,24,60,238,29,232,164,63,213,67,217,130,149,254,111,231,78,86,205,92,204,209,198,58,215,60,94, 252,49,151,160,98,107,236,222,88,44,254,233,250,85,155,226,45,61,167,233,236,255,107,204,96,127,94,250,133,214,222,211, 60,186,180,38,95,61,14,151,109,101,230,117,3,148,110,99,138,186,224,232,243,171,222,200,15,164,143,11,93,191,95,115, 95,7,251,236,106,191,169,58,126,110,254,26,155,11,149,37,43,11,125,181,71,74,119,16,159,52,192,218,181,152,152,179, 95,86,87,174,47,42,154,58,93,78,183,159,64,85,35,81,81,196,3,99,4,207,130,103,5,49,74,64,2,149,16,69, 169,63,123,144,217,51,230,154,226,185,15,204,203,237,181,7,0,25,13,96,196,30,40,124,204,126,248,96,241,178,234,21, 37,53,177,147,173,223,144,12,163,224,78,2,144,16,53,33,206,115,168,164,72,184,110,18,97,15,120,14,207,19,196,3, 167,1,45,93,103,169,92,88,109,91,219,155,103,221,182,232,138,223,88,231,142,141,164,53,140,108,105,173,89,55,163,104, 222,222,141,53,59,243,16,33,21,246,227,8,49,158,225,216,153,125,4,12,16,184,36,61,169,14,186,19,109,56,13,81, 64,29,168,42,53,197,219,80,141,142,213,129,11,149,253,135,63,238,239,25,232,92,87,255,126,120,48,91,207,102,95,112, 42,159,180,116,156,103,251,222,13,17,161,224,84,241,182,191,244,17,98,20,65,233,74,94,160,55,184,140,248,96,240,96, 80,80,240,140,176,123,223,59,136,146,194,35,36,130,203,19,228,139,145,18,30,6,80,183,43,16,8,6,207,75,95,198, 143,21,216,36,158,130,113,92,236,63,71,66,59,177,57,2,146,142,151,22,119,78,17,3,162,132,97,104,239,177,126,162, 11,64,12,132,3,36,70,90,130,97,0,217,246,195,30,82,229,155,1,148,75,3,231,73,104,23,198,23,36,189,222,81, 134,130,58,69,156,224,121,2,30,97,202,38,46,127,247,30,93,227,197,31,23,32,99,41,77,208,19,182,97,108,84,102, 207,128,164,43,160,170,184,80,144,80,17,111,212,134,191,49,128,190,160,19,207,128,103,36,130,176,130,151,174,128,115,130, 72,244,62,144,201,233,79,28,32,233,250,240,109,12,188,212,85,8,19,169,73,168,81,35,58,29,99,199,223,32,128,162, 8,130,10,145,136,48,8,224,50,194,50,105,253,9,1,216,52,65,122,127,71,153,106,40,132,184,232,86,152,190,166,87, 95,204,29,63,18,7,6,136,182,84,48,82,224,177,0,12,224,15,113,172,228,80,53,251,53,60,143,104,7,200,181,77, 152,1,115,14,80,228,74,51,133,128,3,82,89,30,142,7,96,128,156,44,231,131,189,59,71,45,209,8,230,39,218,177, 64,94,90,195,16,125,119,132,168,42,46,51,113,164,37,19,32,150,206,60,3,224,15,25,51,62,52,176,75,103,22,100, 101,155,28,50,38,211,226,201,108,177,209,204,203,130,176,67,68,51,194,67,191,166,110,8,200,80,152,140,104,0,195,255, 21,39,211,180,153,18,102,143,164,3,103,60,3,146,57,191,105,255,111,251,27,250,226,227,129,148,124,126,213,0,0,0, 0,73,69,78,68,174,66,96,130, }; } namespace Media { const unsigned char Back1x[770] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,45,2,189,124,103,101,0,0,2,143,73, 68,65,84,56,203,165,83,75,72,84,81,24,254,206,189,215,251,56,231,58,51,62,152,115,238,216,66,169,241,65,153,20, 101,66,104,17,33,210,178,168,36,104,17,73,45,42,90,181,13,83,194,32,13,119,17,101,49,52,139,138,158,154,101,229, 34,136,44,180,32,113,81,173,194,69,138,66,216,99,102,238,189,94,157,211,194,81,52,90,8,254,240,111,190,255,255,126, 190,255,5,172,209,200,42,114,20,0,38,0,9,192,253,7,183,53,0,206,127,72,147,185,4,150,115,146,35,187,0,12, 0,145,92,28,26,179,25,154,154,26,39,22,153,3,207,95,196,8,33,150,162,40,249,144,80,67,225,112,69,60,190,97, 255,200,200,135,11,65,16,148,100,179,217,226,104,52,26,41,47,143,31,24,30,30,238,208,120,84,0,0,238,222,185,135, 195,205,135,32,184,3,69,85,34,233,116,58,182,62,94,118,212,102,246,9,0,129,174,235,215,77,211,204,171,170,170,56, 98,231,219,167,8,33,243,130,59,29,138,227,136,21,218,253,89,63,42,132,104,222,182,125,107,255,142,218,218,99,125,189, 253,150,150,167,233,149,149,241,157,117,117,181,189,155,106,170,79,62,126,244,196,84,85,85,229,142,128,198,163,28,148,90, 0,0,74,41,118,237,105,232,41,42,40,44,107,109,109,43,8,133,66,68,102,37,108,102,27,156,243,203,29,23,47,177, 130,194,66,34,179,18,148,82,104,170,14,77,56,2,127,82,191,150,20,116,95,233,174,9,135,34,154,55,235,34,157,74, 129,82,134,150,227,45,164,190,190,193,246,102,189,37,140,217,12,69,5,22,52,193,57,130,57,31,0,96,154,38,166,166, 167,164,174,235,200,184,41,120,190,15,198,24,92,207,133,231,187,200,184,25,120,158,11,198,24,24,165,40,46,226,80,162, 130,195,48,116,0,128,97,232,120,248,224,254,183,151,131,3,191,45,147,33,38,214,65,81,84,188,29,122,35,147,201,132, 171,231,25,75,152,197,44,112,206,161,56,92,44,155,129,133,205,213,91,118,127,249,252,245,106,34,209,243,243,211,232,71, 55,152,11,64,41,243,77,202,206,222,74,220,152,233,127,214,231,7,115,1,24,165,16,66,64,227,130,195,52,141,92,11, 6,4,231,136,149,236,235,118,51,153,107,239,222,15,181,143,141,141,30,228,130,207,111,172,172,126,154,158,75,189,154,153, 254,113,250,118,242,230,153,108,86,18,193,57,52,46,22,214,216,214,126,30,0,192,29,1,85,81,167,33,101,184,180,180, 244,220,248,196,120,215,235,193,193,206,198,189,194,39,144,105,25,91,223,57,49,57,158,156,248,62,217,197,29,1,34,165, 92,113,202,158,231,193,178,172,73,0,240,124,95,39,144,139,103,235,27,134,57,227,186,158,10,192,6,36,93,237,51,65, 74,105,0,0,33,196,95,134,145,133,66,107,180,191,249,146,220,194,180,154,76,242,0,0,0,0,73,69,78,68,174,66, 96,130, }; const unsigned char Back2x[1236] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,139,73,68,65,84,88,133,237,147,91,108,84, 69,24,199,255,115,230,156,51,179,103,206,238,158,179,221,75,33,165,72,76,20,181,246,134,38,85,136,36,148,136,111,218, 34,250,64,196,26,137,104,162,149,98,98,213,144,118,27,18,72,139,65,16,125,69,46,149,0,133,22,120,192,130,152,240, 82,181,101,85,98,3,198,186,150,182,208,64,108,83,40,93,186,187,236,229,248,176,219,237,133,178,136,15,190,216,127,114, 114,146,153,95,102,126,243,205,55,192,92,230,50,151,255,123,72,250,239,74,127,100,202,156,5,96,36,253,101,139,12,192, 13,128,3,24,5,112,227,65,120,121,66,224,249,85,229,127,204,36,191,239,232,44,8,133,66,247,18,32,0,12,93,215, 231,47,89,82,92,205,56,123,235,204,233,239,30,206,34,48,43,47,79,153,196,233,246,179,25,122,213,11,229,99,156,115, 22,10,133,102,91,204,6,192,83,90,90,84,62,111,126,238,182,138,138,213,198,145,35,135,1,128,222,99,243,41,252,252, 173,149,149,149,230,225,195,135,0,128,202,51,201,225,145,33,184,93,158,123,172,3,10,192,189,104,209,130,71,30,93,188, 216,255,120,193,19,101,117,155,253,154,211,225,68,219,241,214,24,128,228,253,248,250,205,126,205,225,112,162,181,237,88,12, 64,242,46,129,44,113,50,198,124,101,101,79,191,233,246,184,223,253,232,227,79,88,73,81,41,141,68,195,72,38,103,238, 251,207,249,187,4,200,204,1,128,1,240,150,148,20,46,155,151,55,175,241,165,23,43,60,175,191,246,6,79,90,9,220, 10,141,2,176,96,227,218,191,230,39,4,172,137,1,42,79,58,17,66,172,188,188,188,162,130,194,199,234,30,90,184,176, 188,190,126,11,119,187,221,136,70,35,72,36,226,144,36,9,100,186,50,153,202,251,235,183,240,156,236,124,74,192,225,112, 128,210,84,255,208,116,91,80,74,165,226,226,39,215,218,29,246,119,54,214,108,98,75,159,89,70,99,241,24,194,145,48, 0,11,132,72,211,220,169,76,201,138,21,207,173,53,93,230,135,239,111,220,196,158,45,91,74,195,145,113,220,184,57,2, 11,73,192,34,176,44,11,32,128,46,236,96,170,10,206,185,37,3,128,211,233,180,132,46,0,0,119,98,119,0,0,186, 174,11,66,200,7,187,62,255,18,185,222,92,12,223,24,66,44,22,3,149,36,16,34,129,16,2,66,38,47,141,171,76, 182,121,185,127,215,174,47,224,243,230,98,120,228,47,196,226,241,73,94,154,206,107,66,35,140,49,72,0,192,24,131,46, 82,2,170,162,166,0,77,187,45,43,242,167,13,254,186,241,243,231,59,19,46,167,11,118,221,1,74,101,40,138,2,85, 85,161,170,28,140,113,16,66,96,24,70,156,72,196,223,208,80,63,126,62,208,153,112,25,57,89,121,161,9,203,48,12, 75,2,0,211,52,45,145,22,224,140,3,0,132,16,201,107,131,67,205,3,253,125,203,247,31,216,215,222,184,125,107,36, 26,137,194,112,152,80,20,21,50,149,161,202,74,70,88,232,194,186,216,253,251,129,254,190,171,203,15,52,239,107,111,218, 190,237,126,60,56,231,169,10,216,108,182,140,192,68,132,46,96,24,6,44,75,238,254,41,112,97,67,239,229,203,85,59, 62,107,26,56,115,182,61,194,20,6,85,97,0,33,144,82,117,133,16,2,66,136,100,79,79,79,119,160,235,194,134,63, 131,189,85,59,119,110,31,248,246,236,233,217,121,93,192,52,205,84,15,112,206,33,244,212,211,136,70,35,80,100,5,118, 93,7,231,146,213,214,246,77,20,192,160,199,227,57,53,56,112,61,64,41,89,127,241,82,119,245,203,149,175,178,252,252, 133,52,30,143,129,2,16,66,135,166,105,86,48,24,140,6,131,193,65,73,146,78,245,246,246,7,136,36,173,191,244,91, 119,245,234,138,87,216,130,169,188,38,160,105,90,234,10,52,77,203,84,32,18,13,103,78,196,152,61,243,60,79,158,60, 57,166,235,122,95,160,235,215,29,125,3,87,87,182,29,111,57,119,244,216,161,241,100,34,153,190,83,14,206,121,166,130, 29,29,29,99,57,57,57,125,129,174,11,59,174,244,95,89,217,122,226,232,185,99,173,71,50,188,166,217,38,159,161,97, 24,153,38,116,187,188,233,18,217,96,154,230,180,107,105,105,105,73,0,24,170,242,85,141,117,253,248,203,186,146,146,88, 249,254,175,247,52,21,23,150,154,140,51,230,112,56,200,108,188,207,87,53,118,253,135,159,215,197,158,138,151,55,31,252, 170,169,168,176,196,228,140,49,175,215,75,100,0,80,85,53,41,116,129,230,131,123,38,123,64,232,118,89,150,35,152,37, 123,247,238,141,0,184,230,241,188,119,226,230,205,219,157,76,101,53,66,136,183,109,54,91,34,27,79,41,61,225,243,249, 58,101,69,169,17,122,138,39,0,80,91,91,235,4,224,140,199,227,153,19,200,178,108,1,24,109,108,108,28,157,109,209, 137,172,89,179,134,230,231,231,155,225,112,216,70,41,29,221,189,123,247,173,7,225,179,177,115,153,203,92,254,147,252,13, 221,87,160,118,124,238,51,204,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Eject1x[628] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,6,73,68,65,84,56,141, 149,83,77,104,19,97,16,125,179,155,152,118,105,44,65,232,154,221,110,18,130,43,98,2,66,65,5,181,90,35,136,138, 20,255,218,24,155,24,5,65,17,4,79,94,148,30,60,121,82,207,158,12,90,170,130,224,201,131,182,122,240,162,222,60, 24,17,84,234,15,173,105,77,211,109,218,36,187,109,50,30,154,72,210,36,37,14,124,48,135,247,30,111,102,222,71,204, 140,102,69,68,118,0,196,204,86,51,140,109,13,242,122,77,211,54,51,179,64,68,159,153,217,104,89,128,136,236,46,151, 75,219,179,119,215,83,129,32,189,126,245,230,32,17,37,153,217,172,3,51,115,205,3,64,0,60,39,78,29,127,50,54, 246,98,233,221,251,183,203,131,225,147,227,0,124,229,113,106,240,141,28,108,216,183,191,247,72,32,24,232,239,235,11,217, 64,192,246,29,59,119,103,178,115,209,151,207,199,239,1,152,110,234,0,128,164,235,122,111,44,30,205,230,242,57,206,46, 204,243,124,214,96,211,50,249,252,133,120,174,167,103,219,97,81,20,59,106,56,149,70,81,20,209,239,247,111,58,61,20, 254,144,252,148,44,230,11,121,78,205,76,241,239,233,73,94,88,204,242,196,247,137,210,153,88,248,71,48,24,220,234,245, 122,109,117,35,248,124,190,141,221,30,229,202,129,80,104,139,174,235,66,102,46,13,34,2,17,33,151,95,132,170,40,20, 30,136,200,204,143,110,78,254,156,186,10,224,23,42,75,137,68,34,157,197,98,241,144,236,238,186,127,231,246,221,54,81, 16,27,158,150,153,113,99,248,122,225,219,151,175,215,28,142,246,135,137,68,34,99,3,0,85,85,59,102,254,164,6,102, 211,233,117,151,46,95,180,168,106,55,88,213,155,166,101,111,107,119,196,84,165,251,25,128,21,1,143,199,179,228,118,187, 135,13,195,184,69,68,171,51,81,215,75,146,84,112,58,157,22,80,14,146,166,105,210,232,227,145,143,13,125,55,169,254, 163,199,2,0,82,21,7,34,0,140,60,24,109,137,124,246,92,180,168,40,138,88,237,160,36,8,194,114,44,62,68,107, 83,255,21,203,178,92,2,202,87,0,208,9,160,11,43,49,110,73,0,64,26,192,44,85,125,103,250,79,1,6,128,191, 20,183,247,30,217,9,206,54,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Eject2x[987] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,146,73,68,65,84,88,133,237,86,75,108,27, 85,20,61,111,230,217,147,52,99,39,184,137,212,218,49,86,105,27,234,32,36,100,49,178,27,106,154,212,160,162,40,49, 205,50,45,133,72,40,106,23,8,88,80,132,196,38,11,4,165,236,64,93,176,11,203,10,177,39,146,17,97,7,109,176, 10,200,162,18,74,132,66,154,84,81,60,99,79,198,191,249,248,178,112,32,160,122,18,59,45,108,154,163,121,243,209,155, 123,239,153,123,207,125,111,128,125,60,234,96,15,96,235,1,112,120,235,126,13,128,181,23,39,226,30,131,51,0,161,248, 144,242,82,127,127,48,122,119,101,117,21,128,254,127,18,232,61,113,226,216,211,145,112,228,134,220,37,143,50,70,95,111, 108,168,69,0,229,61,250,107,11,157,178,44,15,142,141,143,46,221,93,93,169,255,177,178,92,31,27,31,93,146,101,121, 16,64,103,187,206,218,205,128,0,160,127,100,228,249,153,201,201,201,196,208,201,231,184,44,251,152,229,88,93,122,81,235, 93,92,92,186,137,70,41,168,93,34,173,226,144,162,196,166,47,93,122,189,98,219,54,21,138,42,105,69,149,44,203,162, 203,151,167,43,138,18,155,6,112,232,191,10,238,143,68,34,67,233,244,216,102,161,160,81,169,108,208,134,186,78,27,234, 58,109,26,58,229,213,60,165,211,99,155,145,72,100,8,128,255,97,7,247,72,146,52,112,110,98,252,246,173,133,155,182, 105,153,164,22,242,164,21,183,71,173,86,165,31,110,125,239,76,76,140,223,246,249,124,3,104,180,233,174,104,73,3,193, 96,48,148,76,158,122,59,245,194,153,179,47,167,39,188,149,106,25,140,9,96,76,0,0,80,189,14,211,50,113,36,114, 132,229,53,181,135,234,117,209,182,157,159,53,77,219,181,53,119,93,136,82,169,212,193,3,7,164,212,225,80,240,139,207, 62,189,222,97,148,12,212,204,42,24,195,223,82,163,173,179,215,219,1,127,151,31,111,190,245,70,237,222,218,218,171,149, 138,153,153,155,155,83,247,76,96,106,106,170,195,52,75,79,121,164,142,185,143,63,186,118,208,223,237,135,81,50,192,4, 6,6,6,198,182,205,137,8,4,66,87,103,23,12,195,192,149,43,239,228,65,206,89,198,188,185,217,217,217,170,91,12, 215,18,204,204,204,8,61,61,61,33,211,177,174,95,56,127,97,32,26,29,20,74,149,18,68,81,4,231,28,156,123,26, 87,145,67,20,57,68,81,132,40,8,176,109,27,221,254,30,244,245,245,122,127,189,115,231,201,112,255,227,223,12,15,15, 235,243,243,243,77,91,147,187,17,8,133,66,125,191,228,126,186,120,252,232,177,196,200,112,138,3,192,99,221,129,157,18, 246,47,36,79,157,230,11,63,46,156,92,94,94,190,24,123,230,217,207,1,172,55,123,207,181,4,153,76,230,137,47,191, 186,177,232,241,120,224,56,14,234,245,122,139,161,239,255,208,87,206,191,118,52,153,76,46,181,69,32,151,203,5,0,4, 216,63,11,13,64,146,164,22,137,108,209,33,34,73,146,212,112,56,220,84,140,59,137,48,176,53,30,100,203,6,26,41, 81,183,198,125,112,213,64,44,22,11,156,121,241,244,111,173,120,111,254,176,141,111,51,223,29,207,102,179,237,17,80,20, 133,137,156,227,234,7,215,118,227,176,35,222,123,255,93,40,138,194,178,217,108,211,121,193,205,48,145,72,128,115,14,162, 58,242,218,6,10,186,6,221,208,81,42,27,168,214,42,48,45,19,142,227,128,136,224,56,14,76,203,68,181,86,65,169, 108,64,55,116,20,116,13,68,4,206,57,18,137,132,43,65,215,12,196,227,113,252,190,178,4,219,113,208,237,235,6,88, 99,241,105,28,13,89,252,37,79,65,96,96,140,3,34,7,121,8,32,128,64,112,28,27,156,115,196,227,241,246,9,68, 163,81,18,69,17,87,63,249,208,213,184,21,136,92,68,52,26,117,253,63,112,85,56,17,61,212,46,96,140,237,184,39, 236,99,31,143,46,254,4,140,41,100,197,10,235,11,217,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Flash1x[607] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,1,220,73,68,65,84,56,141,133,147,59,107,148,65,24,133,159,249,110, 43,209,40,134,40,152,8,171,177,49,177,241,2,134,32,66,44,20,4,11,11,27,11,123,241,31,216,139,32,22,234,191, 208,50,8,130,133,63,32,44,22,65,188,173,96,52,70,99,130,65,55,155,221,253,246,75,230,61,22,123,55,31,241,133, 153,102,230,60,51,115,206,59,78,18,103,166,103,230,128,171,128,241,255,10,128,183,102,54,187,80,154,175,68,0,146,174, 92,186,56,19,7,1,4,8,156,90,91,165,1,165,112,136,128,242,167,197,169,229,149,213,57,96,54,234,95,62,57,242, 156,201,177,175,56,6,133,173,213,214,92,254,121,28,239,175,37,75,223,87,46,0,116,1,50,99,114,236,51,51,215,31, 18,186,117,0,178,44,35,77,155,164,105,147,102,179,137,56,132,74,143,121,179,234,187,224,46,192,100,56,28,97,60,74, 90,253,64,218,104,80,175,87,169,109,254,96,227,207,55,178,172,198,248,177,91,4,65,56,240,180,222,13,4,56,71,181, 178,200,175,229,87,212,106,117,26,141,12,23,12,179,119,120,156,131,133,136,125,251,71,219,15,177,28,128,9,73,84,42, 155,100,156,35,26,218,102,228,0,36,145,17,199,34,137,33,9,214,144,60,222,231,1,36,22,190,28,5,61,2,183,51, 187,78,189,91,58,130,247,189,13,81,199,99,147,241,162,116,138,151,175,167,112,78,168,63,9,117,124,2,111,142,98,49, 199,3,83,11,98,190,35,112,109,173,6,32,32,212,215,110,189,62,48,33,19,166,157,39,247,131,28,96,214,139,49,232, 233,141,213,245,13,146,56,160,16,135,173,145,244,198,158,36,162,144,132,172,253,222,196,219,191,38,10,228,141,208,109,115, 251,242,225,60,239,186,117,239,89,21,41,39,5,51,99,203,66,206,222,184,191,43,192,63,189,137,229,196,168,45,111,156, 152,152,224,99,249,125,238,95,104,93,212,81,44,22,241,38,104,255,92,39,137,211,231,167,31,32,238,8,134,216,181,11, 218,28,104,2,119,23,74,243,79,254,2,78,177,239,207,22,156,213,133,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Flash2x[1323] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,4,168,73,68,65,84,88,133,197,150,77,108,21,85,20,199,127,247,222, 153,247,201,123,197,210,22,44,5,186,16,240,43,24,146,66,26,22,38,174,92,73,34,137,33,196,149,137,137,11,23,38, 126,236,140,46,88,147,176,213,184,195,40,81,100,225,206,133,46,36,49,85,131,16,65,162,17,19,104,3,130,34,175,237, 123,175,51,115,231,222,123,92,244,195,215,210,215,190,106,19,207,102,50,51,103,206,249,205,255,156,115,239,85,34,194,255, 105,81,231,205,193,241,35,111,34,242,22,136,217,180,12,74,181,64,157,190,52,241,205,233,85,95,119,42,240,212,225,241, 228,233,35,135,74,70,111,94,126,107,45,151,175,92,107,207,37,233,169,203,223,77,188,187,242,253,50,5,16,41,21,11, 49,55,110,220,160,49,211,98,186,217,130,224,209,106,227,101,10,162,208,58,226,225,29,67,28,60,240,68,245,242,149,159, 222,56,56,62,126,235,210,196,196,251,221,1,22,236,222,253,25,138,250,79,94,63,54,197,158,161,22,26,221,115,98,89, 186,122,174,223,174,242,241,87,163,76,221,130,39,31,219,87,253,246,135,31,79,2,107,3,132,32,204,52,231,120,245,232, 109,158,125,238,4,219,134,31,65,153,218,130,171,131,208,2,20,232,58,34,224,92,130,119,51,120,15,66,157,16,60,185, 109,227,242,38,59,103,238,99,237,167,124,240,69,141,221,187,118,130,208,191,50,223,3,0,62,120,66,8,236,27,105,208, 63,188,23,229,46,66,24,0,21,131,228,32,13,130,7,47,125,56,39,228,121,147,60,251,131,60,7,244,32,185,243,216, 172,65,154,220,163,82,63,194,163,123,218,56,31,254,145,102,61,128,197,166,212,128,90,252,74,44,72,134,136,35,207,45, 46,15,4,202,228,46,224,108,70,154,164,120,15,232,12,231,29,54,77,201,210,148,74,45,199,40,181,44,110,15,0,43, 30,168,26,34,109,156,47,224,125,129,220,106,178,244,47,172,157,66,164,134,15,101,178,52,193,121,133,54,22,231,29,34, 158,56,134,200,116,198,13,189,1,172,148,202,235,199,113,249,44,206,205,146,219,89,130,12,162,138,251,137,99,33,75,238, 144,165,147,36,73,66,187,245,59,165,82,131,56,142,65,218,196,145,33,138,101,41,96,207,10,116,74,96,109,70,214,254, 26,239,20,46,20,113,121,74,210,154,196,218,140,64,25,161,130,137,119,80,235,127,134,173,67,49,138,20,173,193,104,141, 54,6,37,9,168,197,176,61,151,160,19,32,39,77,18,2,3,248,160,113,121,142,117,37,92,136,81,102,144,224,155,228, 173,139,164,51,95,82,44,247,19,197,49,70,57,162,40,16,23,182,81,170,141,173,26,119,109,128,142,73,182,214,146,38, 41,162,51,124,48,228,54,35,77,51,144,64,169,16,40,20,234,168,242,110,240,37,34,99,40,84,70,48,58,160,104,162, 105,16,27,89,82,180,119,128,48,239,24,68,145,219,156,185,36,67,153,20,31,12,193,91,180,242,68,49,20,98,193,24, 153,159,20,45,152,8,10,49,24,173,80,128,18,64,197,248,133,230,235,189,7,16,180,82,252,60,213,199,112,227,46,133, 202,97,76,92,195,152,24,200,193,55,80,6,10,133,126,180,81,104,50,68,166,49,218,16,197,3,104,13,18,230,16,159, 208,108,204,242,203,100,13,109,212,210,143,245,0,0,149,114,145,207,46,140,80,41,158,103,116,187,69,22,102,121,153,169, 165,254,90,221,36,112,243,78,137,115,23,70,169,150,138,29,165,93,7,32,72,160,94,45,211,156,131,83,231,42,196,177, 67,175,153,105,117,243,65,225,188,161,90,46,82,223,82,36,244,186,14,136,128,210,80,223,82,166,190,165,220,117,9,93, 245,143,186,248,42,69,239,37,144,16,30,108,152,255,10,33,27,106,194,133,15,86,70,90,227,72,176,158,175,136,244,14, 16,58,20,216,136,204,107,65,132,213,84,237,6,32,225,65,218,127,173,198,226,102,42,178,129,30,64,152,109,37,20,98, 133,54,255,253,108,24,124,192,5,24,216,72,9,18,235,56,190,251,251,158,18,104,109,64,65,240,190,171,207,217,155,99, 27,25,195,133,3,137,137,120,225,196,203,168,213,22,33,224,243,243,103,152,107,183,56,118,252,37,180,49,124,242,225,123, 107,130,134,158,75,176,0,112,244,228,53,162,106,181,107,192,231,199,222,94,118,255,226,161,119,186,250,158,57,122,140,110, 141,179,4,160,148,82,7,198,14,47,1,56,231,200,243,188,107,208,141,218,98,92,165,148,150,142,227,81,180,152,28,40, 116,58,58,231,112,206,109,86,250,206,201,218,170,148,106,1,185,136,200,162,2,6,120,8,72,218,115,105,121,215,200,78, 174,94,187,74,177,88,92,103,228,122,201,237,217,49,180,157,52,181,72,8,45,96,63,240,43,208,0,188,98,126,83,43, 0,195,163,123,247,190,86,235,219,250,138,18,34,214,217,236,54,100,10,1,37,211,141,251,103,39,127,187,254,17,112,21, 184,11,56,37,34,40,165,12,208,7,236,2,6,171,245,250,246,77,5,0,242,52,109,91,107,167,129,123,192,20,48,43, 34,65,117,52,71,4,148,129,34,243,37,217,108,19,192,3,25,144,136,136,7,248,27,34,54,151,220,107,72,206,19,0, 0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Floppy1x[561] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,1,195,73,68,65,84,56,141, 149,147,191,139,19,65,20,199,63,51,187,185,132,228,20,148,52,70,136,44,28,92,35,40,34,28,136,86,138,165,133,181, 216,28,162,127,131,98,103,165,157,40,254,3,162,133,216,88,164,201,157,88,168,136,88,92,171,22,129,92,97,227,110,147, 236,50,155,157,247,198,34,119,249,33,39,196,47,51,195,131,225,251,229,243,30,60,179,117,239,245,91,17,185,201,84,129, 185,22,235,35,255,172,181,175,98,17,185,241,112,251,42,91,31,158,130,170,9,170,160,74,8,106,56,172,85,65,101,94, 135,192,206,245,7,60,123,243,249,118,12,32,26,248,253,226,49,65,132,85,165,215,238,3,16,3,70,68,56,245,232,57, 132,191,169,255,173,202,203,44,0,47,129,147,183,238,174,108,6,144,119,223,23,3,20,17,97,56,28,174,100,78,146,100, 137,192,136,40,81,20,145,36,201,234,4,94,231,4,114,48,188,193,96,176,146,185,219,237,46,207,160,58,72,251,31,130, 229,22,188,178,253,228,35,141,236,43,81,177,127,180,195,76,159,73,227,12,121,235,44,27,167,143,207,9,188,8,76,10, 162,98,159,43,151,47,81,175,215,169,213,106,179,107,173,165,44,75,242,60,103,119,247,61,249,218,6,222,183,0,176,135, 56,170,138,181,17,237,118,155,126,191,79,175,215,163,217,108,34,34,140,199,99,70,163,17,69,81,128,177,168,42,126,177, 5,149,128,170,98,12,180,90,173,25,117,154,166,148,101,137,115,14,231,28,101,89,18,66,32,168,80,85,11,67,156,84, 158,216,78,55,36,203,178,89,64,150,101,75,102,231,28,1,80,85,42,239,167,1,214,152,47,123,63,127,157,223,236,172, 55,198,89,32,77,83,58,157,14,222,123,210,52,93,50,59,231,32,192,137,99,107,51,2,115,241,206,203,117,99,248,84, 183,126,243,92,252,173,110,76,76,32,48,61,7,187,177,176,35,134,192,158,191,144,139,169,27,145,240,227,15,253,243,15, 58,103,73,91,81,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Floppy2x[890] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,49,73,68,65,84,88,133,229,151,63,108,28, 69,20,135,191,245,46,246,113,113,46,152,156,229,88,142,165,184,64,164,176,133,67,153,130,63,18,37,18,14,113,136,104, 80,10,10,40,104,136,132,82,69,20,208,65,73,129,33,21,22,52,20,110,64,2,4,66,178,68,1,52,40,18,21,200, 138,29,219,66,54,69,116,156,143,187,157,121,143,98,119,246,102,125,119,123,142,188,174,120,146,229,217,217,153,121,191,249, 230,55,59,55,240,127,143,192,21,230,159,125,227,163,118,187,245,38,218,173,59,169,120,100,180,242,229,239,235,31,95,3, 136,92,165,233,196,55,86,86,62,8,70,162,8,81,101,126,253,14,168,162,34,160,234,253,9,234,202,222,59,77,223,101, 207,126,63,96,253,153,183,80,20,17,229,246,173,119,151,93,222,76,128,6,18,136,194,141,87,94,228,229,155,159,82,127, 255,157,172,243,177,35,8,248,238,212,85,84,149,231,22,167,114,175,34,255,193,138,112,229,237,79,16,17,230,55,165,156, 228,105,200,135,63,129,42,98,243,227,230,4,136,40,226,208,149,28,42,201,210,89,201,143,221,67,64,173,160,116,27,109, 108,108,28,43,241,220,220,28,64,54,49,91,72,192,166,4,60,1,110,128,227,70,70,192,218,193,2,172,72,210,144,242, 151,224,72,4,172,149,30,2,101,45,65,151,192,16,19,186,134,135,7,56,110,136,19,96,6,8,80,60,2,39,184,11, 140,12,34,160,158,7,244,100,118,129,170,34,133,38,236,67,160,236,93,96,10,77,216,199,3,101,69,215,3,133,4,236, 201,123,96,216,54,116,13,95,123,239,123,20,178,147,47,251,15,217,179,35,229,183,73,170,244,80,63,208,180,174,208,3, 226,121,192,13,46,251,191,209,217,253,25,149,124,199,97,49,50,18,18,156,93,196,140,63,153,156,202,36,130,10,9,24, 143,128,155,109,103,247,23,174,44,189,68,181,90,37,12,67,162,40,34,12,195,190,101,107,45,113,28,99,140,161,209,104, 240,217,234,231,72,245,137,28,1,51,216,3,154,219,5,25,58,49,212,106,53,162,40,226,171,175,191,97,119,103,11,128, 153,217,11,188,122,125,153,48,12,49,198,208,106,181,178,228,113,28,39,166,19,147,78,168,75,96,200,89,96,243,4,82, 47,86,42,21,194,48,100,119,103,139,214,228,18,0,219,91,107,88,107,105,183,219,185,196,126,25,220,25,144,248,68,41, 248,18,2,61,4,156,128,177,177,49,162,40,215,20,128,131,131,131,129,201,141,49,9,87,71,64,21,80,226,162,109,104, 204,96,2,135,209,1,52,155,205,92,194,35,17,40,254,18,106,15,129,0,178,245,45,131,192,16,1,54,249,221,150,137, 72,4,184,153,14,18,240,112,30,232,47,32,82,209,71,239,111,110,51,59,85,231,222,206,131,244,211,9,35,94,162,179, 245,115,252,189,183,6,192,99,19,117,154,205,102,207,172,125,17,61,4,52,231,129,211,64,195,9,56,243,207,222,198,213, 245,31,190,93,189,252,252,11,149,139,23,166,3,21,65,20,254,216,236,18,120,250,210,2,113,124,49,75,52,136,128,120, 71,238,244,100,45,243,149,136,248,36,39,0,9,128,16,168,3,245,250,249,197,203,19,51,79,173,248,136,22,102,26,61, 232,31,38,238,110,159,238,169,19,219,249,241,207,95,191,120,29,248,203,93,195,106,192,227,192,25,96,28,24,37,161,95, 102,116,210,49,255,5,26,192,62,176,231,223,3,71,73,214,165,154,150,203,14,199,190,5,60,0,218,64,225,69,180,236, 75,106,223,51,254,63,200,176,115,154,207,143,225,230,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Next1x[771] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,45,27,217,23,207,165,0,0,2,144,73, 68,65,84,56,203,189,146,205,75,84,81,24,135,127,231,222,59,247,156,123,103,70,156,132,57,231,14,153,180,8,196,116, 6,197,153,6,218,180,16,170,255,32,136,136,218,180,206,2,147,74,164,54,130,81,88,67,209,70,8,103,81,145,86,138, 50,72,43,69,173,69,148,203,180,175,77,230,76,126,204,140,51,222,249,242,158,22,142,34,214,50,122,224,133,195,195,121, 15,191,243,242,2,255,128,26,0,202,62,103,0,48,255,226,255,128,0,176,170,103,7,64,26,64,17,64,109,245,17,9, 32,95,45,103,207,221,93,52,183,219,68,36,18,233,94,88,88,28,78,165,82,105,69,81,86,92,46,87,33,28,110,239, 94,92,252,60,146,205,100,62,129,192,112,28,103,67,74,137,83,167,79,46,237,52,39,18,147,1,69,112,11,134,201,46, 6,67,205,137,104,52,114,206,235,245,114,93,215,3,204,160,231,91,130,71,39,66,109,193,46,143,199,91,111,89,129,90, 193,183,3,60,123,250,28,0,192,253,2,10,183,4,84,85,85,95,189,124,205,154,67,45,151,162,209,200,104,99,227,145, 227,154,75,211,199,70,199,141,99,145,200,133,246,112,219,184,16,226,76,177,84,244,239,141,111,89,2,26,247,251,161,83, 13,138,162,226,193,64,204,179,190,182,230,238,190,126,173,63,159,203,83,41,37,250,250,250,107,178,217,172,183,183,183,231, 198,161,195,245,103,21,16,0,128,105,154,224,126,14,205,18,2,133,178,13,0,200,231,114,160,6,37,15,99,143,60,211, 211,83,187,78,115,169,228,78,255,221,3,153,108,186,166,179,243,242,110,2,97,9,104,92,8,172,172,38,65,8,176,158, 89,5,99,6,32,37,236,130,13,66,128,181,204,42,24,165,144,142,68,50,149,148,140,49,0,0,99,12,130,115,40,156, 115,24,110,3,138,162,34,32,14,66,119,81,196,227,79,236,153,217,105,185,227,12,230,198,228,155,68,118,100,248,197,55, 74,117,0,0,165,58,252,130,67,19,66,32,249,235,7,202,149,50,38,38,198,138,95,191,127,217,244,249,234,186,76,211, 125,191,92,41,179,143,243,239,237,183,115,179,197,236,70,254,113,176,165,117,96,118,110,106,105,123,6,6,44,46,160,9, 206,241,97,94,146,161,248,96,201,231,171,139,181,134,219,99,110,205,83,172,84,202,247,134,226,131,165,92,62,63,210,26, 10,223,52,76,211,118,42,21,194,24,173,126,129,130,11,14,141,91,2,170,162,204,52,53,54,93,9,88,13,203,68,193, 166,4,209,150,39,127,190,59,209,209,113,181,33,208,176,76,128,2,8,201,108,57,91,28,0,110,221,238,217,222,3,33, 64,108,219,174,174,39,217,4,144,51,12,182,85,44,22,124,0,40,0,71,130,164,25,165,37,0,176,109,219,218,25,226, 46,82,74,175,148,146,236,115,84,74,73,241,63,248,13,221,115,236,68,32,12,77,214,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Next2x[1225] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,128,73,68,65,84,88,133,237,149,91,76,28, 85,28,198,191,179,51,195,204,206,153,238,50,93,99,122,17,219,64,140,47,53,20,149,154,20,92,48,197,22,147,250,110, 106,213,151,22,19,163,70,67,27,94,72,220,38,109,52,177,66,37,37,69,136,5,141,33,77,73,169,73,27,183,37,53, 166,150,45,84,218,93,192,138,169,149,130,104,217,114,219,139,11,204,133,101,142,15,179,107,183,20,90,250,226,139,124,201, 201,36,103,126,243,63,223,124,231,127,102,128,21,173,104,69,255,119,145,212,117,53,0,23,0,13,192,20,128,228,67,158, 123,84,222,3,64,205,88,15,0,24,128,41,62,93,112,251,142,109,55,53,221,168,233,13,246,53,37,18,137,59,0,226, 41,104,81,3,143,192,19,69,81,214,108,45,122,225,250,194,27,29,231,191,207,115,164,33,0,168,216,187,247,29,111,73, 209,133,130,130,252,87,1,228,0,144,150,48,64,0,96,239,158,61,203,225,137,36,73,34,165,116,250,252,185,11,72,15, 128,37,0,16,71,38,185,251,245,55,165,230,230,175,215,123,75,188,95,148,151,191,220,180,97,195,134,103,1,60,14,128, 91,204,197,27,187,223,146,90,90,150,207,91,150,133,201,200,196,61,115,142,133,144,211,41,226,179,195,181,206,143,14,28, 216,246,220,243,249,29,197,222,173,239,139,162,152,11,123,207,239,147,36,61,26,191,80,247,25,48,76,19,137,153,56,54, 231,23,112,173,173,39,233,174,215,118,85,150,109,127,169,35,63,127,83,57,236,152,197,197,249,205,203,226,31,106,128,227, 56,16,56,96,152,58,230,147,115,168,168,120,91,106,106,252,114,227,150,45,91,190,218,241,74,89,221,218,156,181,207,32, 163,217,238,242,6,146,41,190,49,131,95,147,179,102,19,33,228,30,62,67,44,125,10,152,32,8,0,0,77,159,133,131, 56,0,226,128,73,12,204,104,179,112,185,92,56,118,172,81,234,12,92,218,121,244,232,231,101,147,79,69,62,17,4,251, 81,66,136,61,64,192,24,131,166,107,240,172,246,160,161,161,73,234,12,252,184,179,174,238,72,89,52,22,175,231,121,158, 0,0,207,241,41,35,60,220,110,55,120,0,112,185,92,80,20,10,27,16,82,69,1,198,0,198,24,166,103,167,97,152, 6,74,188,165,124,94,94,158,178,111,223,135,7,25,179,95,202,52,205,251,248,25,109,6,89,66,22,188,47,150,242,185, 185,121,74,101,229,7,85,78,167,19,132,0,166,105,0,0,40,149,145,157,157,109,39,224,118,187,25,165,182,1,81,148, 64,136,253,189,96,204,130,101,89,200,18,68,72,162,136,43,63,117,37,91,90,154,117,2,242,177,76,229,67,203,225,155, 155,143,235,28,207,29,165,84,126,15,32,84,16,178,82,6,20,72,146,100,39,32,138,34,210,6,164,44,17,32,4,204, 178,0,0,130,144,133,72,52,130,35,71,14,235,99,99,227,254,161,191,70,14,142,14,143,198,74,74,139,14,61,136,175, 173,253,84,31,31,31,247,15,253,57,114,104,110,118,46,185,110,253,186,119,211,134,211,9,168,170,106,39,160,170,42,163, 169,45,224,120,30,204,178,64,120,1,140,49,124,119,238,172,126,165,59,16,30,189,61,182,63,20,234,239,50,77,115,82, 150,229,39,150,226,253,254,179,122,119,247,229,240,216,216,157,253,3,3,191,119,9,130,16,81,85,245,105,217,73,65,8, 1,231,176,251,158,42,20,178,44,219,6,156,78,231,191,91,48,63,63,15,129,23,48,52,124,43,217,126,186,205,136,71, 163,53,221,221,193,22,77,211,38,66,161,80,2,0,188,94,239,34,252,96,242,84,123,155,17,139,197,106,250,66,191,180, 196,98,177,137,64,32,144,240,249,124,142,27,55,126,102,138,66,193,24,131,97,26,224,121,1,138,162,216,61,7,0,146, 36,65,161,50,0,96,206,52,209,254,109,155,54,26,190,125,113,248,214,144,111,100,36,60,88,92,92,28,241,249,124,86, 250,236,184,221,110,40,41,3,115,166,137,83,167,79,106,225,240,232,197,63,134,134,125,35,35,225,193,194,194,194,123,120, 81,92,197,168,108,215,215,13,29,84,86,64,169,12,74,169,157,128,44,203,140,42,20,193,80,143,22,12,93,141,76,78, 70,170,250,66,215,127,136,199,227,83,126,191,223,56,115,230,76,230,217,5,165,148,81,69,198,181,80,143,22,188,214,19, 153,154,140,86,245,245,45,205,171,170,10,153,202,32,132,192,163,62,6,0,80,236,30,176,19,240,120,60,140,82,138,80, 239,213,250,254,222,95,27,34,145,200,196,137,19,39,18,88,226,111,72,41,101,148,82,244,247,7,235,111,254,54,220,160, 235,250,146,188,207,231,99,213,213,213,186,32,240,202,55,173,199,239,214,80,148,85,110,183,219,226,1,128,227,184,88,224, 82,207,147,201,100,82,139,70,163,209,182,182,182,249,197,22,78,139,227,184,216,229,206,171,203,229,217,244,244,244,68,111, 112,96,99,230,36,207,243,12,192,223,15,90,103,69,43,90,209,127,162,127,0,249,122,45,195,125,20,111,61,0,0,0, 0,73,69,78,68,174,66,96,130, }; const unsigned char Optical1x[931] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,13,215,0, 0,13,215,1,66,40,155,120,0,0,0,7,116,73,77,69,7,213,4,1,17,53,53,42,125,41,75,0,0,3,48,73, 68,65,84,56,203,109,147,203,79,92,101,24,198,127,223,119,206,249,56,103,206,64,231,82,24,40,101,46,13,139,138,181, 11,77,105,162,27,218,196,109,53,154,214,148,82,117,211,24,132,181,43,255,0,141,91,40,184,211,136,216,164,186,108,216, 168,69,161,216,185,64,36,182,44,96,8,129,4,40,48,131,23,152,14,115,174,110,74,98,136,239,242,201,251,203,179,120, 158,71,112,226,134,134,7,47,3,31,2,125,64,238,133,188,6,76,3,95,141,142,140,229,255,251,47,78,192,99,201,68, 242,245,219,183,63,216,239,232,232,120,213,178,172,102,128,122,189,94,219,218,218,124,50,49,241,77,164,186,95,157,27,29, 25,27,228,127,156,167,30,205,205,126,231,121,94,176,180,180,20,46,44,44,132,165,82,41,92,92,92,12,203,229,114,88, 173,86,67,223,247,131,217,217,153,169,161,225,193,169,99,78,59,118,238,239,31,16,47,157,239,185,145,207,231,229,193,193, 1,190,239,35,132,64,8,129,97,24,72,41,105,52,26,34,155,205,117,39,18,137,253,136,109,190,86,44,148,30,104,67, 195,131,151,147,137,228,199,183,250,7,174,46,47,47,75,223,247,169,213,14,57,172,29,80,171,29,80,175,63,71,211,53, 154,148,66,211,116,194,48,164,187,187,187,51,159,127,28,121,229,226,133,121,173,183,247,210,167,119,238,124,148,118,29,55, 85,175,215,113,93,7,93,55,104,110,110,33,213,214,78,107,107,27,137,68,146,74,117,151,38,213,132,227,184,248,190,79, 170,45,229,46,46,254,110,233,64,223,217,206,179,185,74,165,130,82,10,215,115,137,218,205,172,174,174,146,47,252,6,16, 222,184,254,158,200,229,206,177,82,94,38,17,79,226,121,30,103,206,116,158,6,250,36,144,51,77,83,41,165,48,77,19, 33,32,30,143,147,47,60,14,35,150,125,209,247,253,214,239,127,184,31,196,98,49,170,213,10,158,231,225,56,14,134,97, 24,64,78,63,142,83,41,69,16,4,232,186,142,109,219,72,41,130,63,255,218,223,0,208,52,205,1,76,199,113,240,60, 15,33,4,190,239,11,64,72,96,173,209,104,120,74,41,148,82,156,58,21,163,209,104,240,238,59,215,165,82,234,153,174, 235,171,111,93,123,91,173,175,175,163,84,19,174,235,226,121,30,135,135,135,62,176,166,3,211,219,219,219,201,116,58,221, 10,208,158,106,103,119,111,135,158,158,30,241,249,103,95,152,128,185,177,177,193,207,15,127,36,151,61,135,235,186,68,34, 17,118,118,119,234,192,67,173,183,247,82,165,188,186,114,237,74,223,213,184,166,105,232,186,142,101,90,236,85,246,152,159, 47,242,228,201,31,84,170,21,218,90,83,8,33,145,82,210,213,213,197,189,123,147,255,212,143,234,159,104,197,66,105,243, 229,11,61,231,99,177,88,71,186,43,221,34,132,64,74,13,93,55,136,70,155,137,199,19,216,118,20,41,37,71,71,71, 100,179,89,138,197,194,223,79,151,158,222,191,59,58,254,165,6,80,44,148,30,88,17,243,77,219,142,158,206,100,50,166, 148,18,199,113,8,130,128,48,12,1,176,44,139,76,38,195,220,220,35,231,151,95,167,103,238,142,142,223,4,52,237,184, 211,197,66,233,219,104,115,36,59,59,59,147,75,165,218,149,105,154,178,165,165,5,203,178,0,216,220,218,244,39,39,39, 158,175,148,87,190,30,29,25,187,249,2,11,197,137,101,234,183,6,250,223,176,237,200,251,186,166,95,17,82,116,9,33, 68,16,4,155,158,231,253,100,24,198,248,201,57,255,11,186,149,81,110,74,152,180,58,0,0,0,0,73,69,78,68,174, 66,96,130, }; const unsigned char Optical2x[2288] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,8,167,73,68,65,84,88,133,229,151,91,140,93, 85,25,199,127,223,186,236,189,207,57,115,105,41,183,82,10,237,204,116,90,138,9,98,138,180,99,73,108,98,76,42,62, 153,152,24,227,131,74,192,104,34,198,71,124,218,36,64,120,51,18,209,136,4,121,65,229,65,159,180,137,21,112,148,208, 0,137,37,80,96,104,103,10,116,122,133,210,118,230,220,247,222,235,226,195,57,211,116,70,52,98,124,115,237,124,217,59, 217,107,175,255,111,125,235,178,255,11,254,223,139,124,146,202,121,158,95,37,34,119,55,26,141,111,199,24,167,157,171,214, 151,101,149,38,73,82,24,99,46,41,165,142,182,90,173,167,128,3,121,158,95,252,159,1,228,121,190,163,86,171,253,34, 132,48,179,125,251,118,181,101,203,22,53,62,62,74,150,213,72,147,4,231,42,138,162,164,217,106,241,222,187,239,133,185, 119,222,9,90,171,67,237,118,231,222,60,207,143,253,215,0,143,61,246,88,218,237,118,159,80,74,125,125,247,238,221,102, 98,98,130,178,44,41,138,14,222,59,136,32,40,180,49,88,99,177,54,97,108,108,12,165,20,199,230,231,249,203,236,172, 143,49,62,147,101,217,125,247,223,127,127,241,137,0,30,126,248,225,235,180,214,47,78,78,78,78,237,218,181,75,186,221, 46,75,75,75,136,114,104,165,33,42,172,49,104,109,208,74,163,181,198,154,132,70,163,129,82,138,52,75,137,34,188,248, 226,223,226,209,99,199,230,59,157,206,93,121,158,127,184,86,71,127,156,248,35,143,60,114,141,214,122,238,142,59,238,184, 113,199,142,29,114,242,228,73,154,205,38,162,28,50,188,98,80,132,32,40,1,162,0,130,53,22,173,7,77,6,31,16, 96,106,106,74,178,44,219,112,230,204,153,123,246,238,221,251,212,236,236,108,247,223,2,228,121,158,36,73,242,202,238,221, 187,111,218,188,121,51,39,78,156,160,223,239,163,180,27,8,69,32,42,98,208,32,122,144,194,33,64,146,100,136,104,68, 4,17,32,66,12,129,235,55,110,164,209,168,215,62,248,224,131,47,207,204,204,60,57,59,59,235,87,244,212,90,128,122, 189,254,147,233,233,233,29,147,147,147,156,59,119,14,0,99,3,49,64,240,145,224,193,251,128,15,17,2,56,7,206,71, 188,7,173,204,80,148,97,189,72,240,129,170,44,185,117,231,78,166,182,109,187,101,221,186,117,63,190,82,111,21,64,158, 231,55,26,99,190,117,231,157,119,202,249,243,231,81,74,145,164,160,100,208,112,240,145,16,34,193,71,202,126,73,89,246, 104,183,250,116,219,93,98,24,8,14,68,35,17,129,56,168,31,3,84,101,201,231,102,246,72,140,241,158,135,30,122,104, 211,199,2,140,141,141,61,177,119,239,222,180,40,10,98,140,104,173,209,218,14,199,54,33,4,232,245,10,46,92,184,196, 165,165,37,250,189,130,94,175,79,179,217,161,221,238,211,110,245,168,170,64,88,129,141,130,143,145,170,42,105,183,59,184, 202,49,179,103,79,58,50,82,127,226,159,0,242,60,191,202,57,247,133,137,137,9,122,189,30,90,107,140,141,24,173,209, 198,32,162,41,75,199,210,82,139,170,10,248,10,124,136,104,3,165,139,40,157,80,185,64,171,221,163,232,59,124,128,202, 5,218,173,46,237,78,15,31,2,85,85,49,49,177,149,126,191,248,226,163,143,62,58,190,54,3,95,218,185,115,167,14, 33,160,148,66,107,131,209,22,165,12,90,25,98,128,94,175,68,68,225,92,129,50,17,107,107,140,175,31,99,124,244,26, 234,181,81,188,23,66,20,218,189,130,165,229,22,151,46,45,83,148,37,222,7,156,243,56,231,137,33,48,53,181,77,245, 251,253,187,1,204,138,250,232,232,232,189,83,83,83,202,57,135,49,134,72,9,98,8,94,240,74,232,246,150,209,218,224, 67,69,150,89,202,178,231,15,191,113,168,83,20,197,104,154,102,205,233,137,219,70,38,39,63,165,47,94,60,79,171,213, 36,73,53,27,54,172,7,45,136,15,3,112,9,84,174,98,235,214,155,213,226,226,226,189,192,175,47,3,196,24,167,199, 199,199,7,107,211,4,98,180,68,239,8,90,8,253,138,16,4,80,36,73,141,24,11,191,176,176,112,17,248,174,49,230, 80,81,244,103,142,204,189,242,51,209,102,67,189,190,65,119,75,71,21,60,141,210,145,138,30,172,118,21,176,81,40,43, 199,232,232,40,33,132,233,85,25,40,203,114,93,189,94,167,223,239,163,181,38,70,193,59,64,60,206,41,32,5,177,36, 54,99,238,232,161,86,140,241,155,121,158,31,24,126,254,187,60,207,123,199,230,15,63,115,215,93,95,93,247,225,133,11, 160,132,110,191,66,25,5,18,6,153,80,32,14,108,146,82,85,213,250,85,115,192,57,151,38,73,130,136,194,104,75,244, 26,239,44,193,25,148,88,70,71,50,54,108,168,179,113,99,131,94,175,59,102,173,125,237,202,21,100,173,125,173,215,239, 142,105,219,70,169,128,171,42,122,165,163,244,145,42,4,156,139,184,16,112,222,99,172,161,170,170,116,21,128,49,166,112, 206,97,108,24,238,229,6,101,20,90,25,68,12,222,107,156,19,124,208,212,235,141,118,85,85,183,95,9,80,85,213,237, 181,90,173,147,232,62,90,90,131,127,134,246,84,206,83,184,64,229,2,101,229,241,33,210,237,86,88,107,139,85,67,144, 166,233,82,81,20,215,219,196,98,116,36,122,79,173,6,74,60,62,26,150,155,21,69,17,41,92,224,150,233,207,54,14, 191,62,251,171,7,31,124,240,123,198,152,67,206,185,25,17,249,249,174,93,183,141,4,218,36,105,151,126,25,177,122,28, 161,196,121,75,165,5,9,130,143,129,78,167,131,181,118,105,21,128,82,234,88,171,213,186,254,186,235,174,198,59,143,54, 130,118,17,99,132,36,73,169,213,234,52,70,83,180,206,24,173,95,163,145,98,195,91,111,31,126,170,40,139,209,44,203, 58,183,127,122,103,227,214,91,183,203,187,239,206,145,101,130,214,5,74,28,49,10,2,20,46,162,180,37,68,97,121,185, 137,136,28,91,5,176,188,188,252,203,163,71,231,246,222,112,195,231,149,49,134,224,61,90,71,148,247,100,245,58,155,54, 53,88,90,238,226,125,164,40,186,108,222,52,165,183,108,158,24,19,213,65,164,63,226,124,151,247,142,191,9,68,210,84, 147,166,138,64,147,200,216,192,55,136,80,120,161,30,234,156,90,60,17,90,173,214,19,171,0,128,3,71,142,188,229,247, 237,219,167,140,50,4,35,128,198,88,69,89,6,10,34,89,45,163,215,43,16,60,231,63,58,71,171,121,17,133,195,199, 54,89,22,48,182,194,88,131,73,18,34,16,124,73,164,28,252,190,163,34,184,140,8,156,60,121,34,0,7,86,77,194, 60,207,47,166,105,250,220,252,252,2,198,24,172,181,36,214,160,181,26,236,140,74,145,101,25,245,90,13,99,12,69,89, 96,140,66,84,196,42,131,18,141,171,28,74,60,68,7,56,4,7,244,136,120,8,21,137,17,78,188,255,46,54,77,14, 230,121,190,180,54,3,52,155,205,239,60,255,252,11,11,219,38,167,18,165,20,81,129,72,64,91,133,114,17,145,64,146, 90,132,132,117,235,199,169,10,3,33,129,152,96,172,66,169,26,33,180,169,188,195,71,197,192,112,5,80,158,16,82,148, 4,22,230,94,47,171,170,184,111,69,115,149,33,121,225,133,23,154,251,247,239,223,220,106,181,62,51,57,49,33,33,68, 4,69,240,17,65,240,8,33,64,229,10,36,120,146,68,99,18,141,177,67,3,34,1,80,184,104,240,46,226,163,34,98, 64,52,181,218,24,243,239,188,25,123,221,246,147,63,122,224,129,223,92,158,252,172,41,151,46,93,250,254,219,111,207,29, 61,242,214,155,24,163,81,34,104,173,16,45,88,45,136,82,248,16,81,214,130,210,136,54,40,101,209,214,128,164,96,82, 180,74,80,166,70,100,80,39,177,35,156,62,121,130,143,62,60,251,78,175,219,253,193,149,122,107,45,153,153,157,157,77, 69,201,1,224,27,181,90,45,219,184,241,6,16,33,134,72,4,156,31,108,40,136,31,108,173,3,55,70,140,1,148,12, 28,155,40,124,4,165,13,214,140,113,246,212,25,222,59,62,191,244,231,131,7,247,63,253,244,211,125,6,198,206,175,5, 176,64,3,104,44,44,44,168,11,23,46,252,177,86,175,125,161,221,110,141,221,124,211,22,49,214,16,99,164,170,42,66, 8,3,199,35,113,32,62,188,3,68,17,2,66,154,53,128,140,249,163,243,241,212,226,226,169,103,159,253,237,215,94,125, 245,213,165,97,214,87,38,72,181,22,96,37,146,179,103,207,186,195,135,15,255,97,227,13,27,111,122,243,173,55,182,142, 52,26,114,237,117,215,94,238,177,15,3,225,24,35,200,96,104,180,49,88,155,97,146,148,197,247,207,241,250,223,15,135, 51,167,79,63,247,248,227,63,253,225,226,226,226,242,176,215,30,112,64,9,184,181,231,130,20,168,3,53,32,91,137,61, 123,246,108,223,191,127,255,3,214,38,59,183,109,155,86,155,111,158,144,122,99,20,165,19,180,85,148,253,46,157,78,147, 86,115,137,211,167,79,197,51,167,78,135,162,95,204,29,60,248,167,71,95,126,249,229,121,160,63,140,222,48,90,64,1, 255,250,96,98,174,128,73,129,4,72,166,167,167,175,158,153,153,217,55,181,109,219,87,140,49,155,131,15,35,206,85,137, 49,166,20,165,218,174,170,78,30,63,126,252,247,47,189,244,210,95,231,231,231,63,2,170,97,79,187,195,40,134,189,191, 92,254,211,195,233,202,184,13,221,197,229,231,149,54,226,240,217,3,225,138,84,251,43,222,125,108,249,7,245,56,85,181, 81,113,17,188,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Pause1x[464] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,32,43,74,96,129,68,0,0,1,93,73, 68,65,84,56,203,205,146,75,110,20,65,12,134,191,42,187,153,238,40,234,213,216,138,56,64,114,12,136,224,72,72,112, 164,40,202,25,0,133,59,68,16,16,172,103,150,72,48,105,250,97,22,253,200,0,19,177,4,47,74,165,175,92,191,126, 63,224,95,71,218,187,159,254,61,59,45,159,34,226,35,16,58,191,173,215,107,206,159,61,121,191,47,250,246,245,245,89, 12,67,62,127,254,244,102,159,95,191,121,119,182,217,110,19,16,121,134,102,134,170,198,229,197,21,151,23,87,168,234,224, 102,172,15,112,115,95,76,45,14,220,29,17,161,239,123,62,125,249,128,136,96,238,116,93,183,240,219,207,55,35,55,251, 83,192,204,16,17,118,119,223,41,180,64,84,48,115,186,182,69,68,184,107,118,136,40,162,130,63,36,208,180,59,154,166, 65,84,16,17,220,215,64,26,118,205,55,218,246,7,229,170,90,156,205,113,223,3,31,29,52,109,67,34,33,121,116,48, 246,70,136,8,202,85,137,228,95,29,44,2,110,62,38,14,3,67,12,168,42,102,134,79,165,229,44,148,101,133,170,96, 110,15,59,32,160,239,187,169,4,95,184,100,229,81,177,154,154,120,104,10,54,78,225,228,228,49,146,5,45,70,7,36, 16,17,170,163,106,226,197,92,66,28,154,66,188,124,245,2,0,201,57,215,245,81,189,42,143,191,254,206,143,235,170,158, 5,150,237,218,108,55,167,68,34,165,105,99,35,17,41,72,115,74,26,143,116,191,185,183,252,23,241,19,86,58,109,31, 74,23,56,251,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Pause2x[481] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,1,152,73,68,65,84,88,133,237,150,221,138,211, 64,24,134,159,73,38,33,95,82,200,38,109,8,245,220,43,82,92,240,226,4,241,64,252,187,33,47,192,19,105,151,234, 170,176,54,243,122,176,181,80,108,217,217,57,53,239,209,48,239,195,228,97,134,15,2,115,230,204,249,223,227,34,152,39, 64,115,161,251,1,124,137,100,206,198,71,8,212,207,175,159,125,62,87,124,124,247,233,233,35,152,52,129,182,109,5,240, 254,237,7,238,126,223,1,80,248,130,235,151,47,104,219,86,187,221,46,138,185,148,44,86,64,18,155,205,87,110,110,54, 255,116,49,76,178,192,213,213,213,241,240,105,218,179,159,246,76,211,116,210,197,48,201,2,171,213,42,0,4,133,227,158, 14,235,191,93,12,147,44,176,92,46,117,56,17,151,101,56,28,146,78,186,24,38,89,96,177,88,8,32,72,228,89,126, 248,142,78,186,24,38,89,96,24,6,149,101,9,18,223,111,191,241,243,215,45,65,129,178,44,25,134,65,177,204,165,60, 56,134,117,93,135,202,42,132,40,138,2,112,32,168,172,162,174,235,16,203,36,223,192,122,189,150,153,1,142,194,151,120, 127,239,108,102,199,17,139,97,146,111,160,44,75,153,25,14,240,222,31,223,214,204,142,35,22,195,36,11,244,125,47,171, 42,112,14,239,61,33,28,14,175,42,250,190,87,44,147,44,208,117,93,184,191,94,200,92,6,89,64,8,51,163,235,186, 16,203,36,11,140,227,40,51,67,18,102,53,146,14,107,99,28,71,197,50,201,2,77,211,200,172,226,245,155,87,39,251, 102,21,77,211,40,150,185,148,7,255,7,182,219,109,155,231,121,126,174,155,166,105,234,251,126,23,195,36,11,0,72,58, 59,174,206,185,240,24,102,206,156,57,231,242,7,129,72,10,39,48,222,244,211,0,0,0,0,73,69,78,68,174,66,96, 130, }; const unsigned char Play1x[660] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,36,33,206,217,173,94,0,0,2,33,73, 68,65,84,56,203,157,147,75,107,19,1,20,133,207,60,50,201,36,77,38,49,153,105,98,19,19,90,73,48,35,186,74, 209,212,72,82,108,138,5,193,103,116,39,88,16,193,66,182,221,249,7,92,244,23,72,151,130,47,186,114,163,136,32,46, 12,66,77,21,177,88,108,160,17,74,250,208,164,51,77,50,51,185,46,196,166,98,41,177,119,117,238,230,131,115,239,57, 64,119,120,28,96,184,93,58,2,192,1,160,9,128,122,5,176,187,151,252,248,216,235,96,48,152,6,224,235,21,192,252, 17,138,44,31,25,62,149,250,198,48,76,199,178,204,47,229,15,159,110,182,90,173,207,181,90,77,239,201,66,52,22,147, 188,62,169,248,236,233,28,239,145,60,254,106,117,101,178,191,95,25,233,48,244,102,32,52,80,175,213,106,180,47,32,169, 170,146,40,58,138,215,11,55,216,72,100,128,157,56,63,193,245,185,221,225,141,245,245,219,162,83,76,58,69,215,187,100, 242,88,99,121,185,178,55,96,56,149,146,56,142,41,94,189,114,141,5,1,174,62,55,212,164,202,165,79,167,5,151,83, 76,252,168,255,156,52,45,107,117,104,112,168,178,180,180,212,252,7,144,203,102,165,182,217,46,94,186,120,153,221,210,235, 48,140,54,12,163,13,187,195,142,120,34,193,229,243,227,14,34,186,64,48,83,137,120,252,125,230,76,166,81,42,149,204, 157,223,7,100,5,13,173,14,0,208,116,13,32,2,1,176,241,54,120,61,62,232,164,131,200,98,252,135,252,134,215,19, 144,120,142,117,3,104,238,0,20,69,70,245,251,111,127,186,190,5,155,205,142,195,193,48,44,211,196,236,236,3,107,241, 235,226,102,44,22,189,163,4,66,111,1,90,187,59,53,101,252,149,62,89,150,201,38,8,0,8,209,240,32,120,158,199, 227,39,143,172,133,143,11,70,60,113,244,94,102,36,251,176,211,233,172,22,10,133,22,246,138,175,44,43,16,4,27,117, 136,240,242,213,11,42,151,231,45,183,199,243,60,123,118,116,90,16,236,149,92,46,171,237,245,198,46,64,9,64,20,237, 52,51,115,223,210,116,109,101,52,59,122,43,32,135,230,143,171,234,198,126,65,234,222,32,32,99,123,187,181,121,110,44, 53,125,66,61,57,7,48,155,138,162,80,207,81,38,162,48,0,3,192,26,195,48,214,127,215,146,136,216,131,212,249,23, 48,70,193,31,65,224,78,98,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Play2x[1028] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,187,73,68,65,84,88,133,237,150,79,104,92, 69,28,199,191,191,153,247,222,38,152,221,77,186,89,179,102,119,155,205,214,28,52,193,67,216,98,172,198,158,2,109,18, 227,37,53,233,161,16,138,32,5,139,7,17,91,169,36,162,135,106,52,185,21,164,45,246,20,145,28,44,90,16,169,96, 138,40,10,94,90,40,66,168,202,102,75,146,110,246,109,220,52,201,251,183,51,227,97,55,138,16,54,219,152,198,131,249, 194,156,230,189,249,125,222,119,126,243,157,7,236,105,79,255,177,248,22,243,205,0,26,0,120,229,177,235,0,145,163,125, 61,31,25,186,102,46,45,153,22,0,7,128,216,77,128,80,50,217,122,161,189,189,227,165,230,232,99,173,203,249,63,102, 215,215,215,5,0,27,128,218,21,128,3,143,39,79,79,77,125,198,91,90,18,79,44,46,206,159,136,52,55,97,97,126, 113,78,8,33,81,114,228,225,3,12,14,30,67,67,168,158,6,6,6,116,195,208,187,164,18,199,2,254,186,244,252,252, 194,10,128,34,0,247,161,2,12,13,13,195,117,29,40,37,209,222,209,193,143,28,57,234,95,202,229,250,67,251,234,159, 83,74,204,154,230,178,139,109,246,71,213,0,158,87,250,72,41,37,56,103,232,238,62,204,83,169,131,177,76,38,51,220, 28,107,126,52,183,148,187,99,219,54,202,32,114,71,0,2,129,64,40,22,143,254,3,96,67,82,10,248,3,126,244,245, 245,243,253,241,248,83,57,51,123,34,210,212,100,229,243,203,119,125,62,31,28,199,177,255,53,64,50,153,12,5,131,254, 211,67,195,199,81,20,69,48,34,16,177,191,7,8,82,10,196,162,49,234,127,97,192,0,84,55,65,188,88,23,12,254, 90,91,83,187,222,216,216,40,76,211,172,216,31,84,105,178,167,167,167,141,152,156,189,122,245,11,88,182,5,162,138,143, 131,51,142,251,171,171,24,255,224,188,55,151,206,124,127,223,90,123,155,73,150,118,93,119,105,102,102,102,83,71,88,165, 5,163,209,104,137,146,24,56,231,224,140,131,115,14,198,74,14,40,165,32,165,128,87,244,96,59,54,86,86,11,144,170, 136,209,209,119,244,209,177,177,195,193,186,186,239,2,245,117,175,37,18,137,248,200,200,72,205,3,3,132,195,97,0,128, 82,18,150,109,193,118,44,216,182,5,199,117,224,121,14,132,40,66,72,9,40,5,70,4,141,107,240,249,106,192,25,199, 194,252,130,180,44,11,156,88,58,28,14,99,109,109,109,211,40,215,42,1,196,98,49,220,254,229,22,136,24,52,174,129, 177,141,30,32,16,168,180,129,10,80,229,80,212,53,3,153,204,28,38,38,199,93,199,113,63,125,246,208,51,19,126,255, 190,133,124,62,111,78,79,79,111,122,50,42,2,68,163,81,24,186,1,34,250,107,11,24,99,32,198,192,136,176,209,66, 156,115,20,10,5,76,78,78,120,119,231,50,63,39,18,251,207,182,181,61,249,91,48,24,204,246,246,246,86,76,203,45, 29,208,117,29,4,128,17,3,49,2,99,12,172,220,11,156,115,88,235,22,174,93,251,210,187,126,253,235,108,184,49,124, 230,212,169,87,127,16,66,228,186,186,186,86,42,173,93,189,3,134,14,5,64,42,9,146,4,9,9,198,24,164,144,184, 117,243,166,188,252,201,69,187,190,190,225,195,179,103,206,77,213,214,214,230,35,145,136,73,68,85,7,81,85,14,40,165, 32,68,177,244,130,166,35,123,239,30,46,94,250,216,85,10,159,191,124,242,149,241,206,206,206,44,128,44,17,61,240,229, 84,17,0,0,12,195,128,82,18,154,166,67,10,133,43,87,46,123,233,244,239,183,15,166,158,126,115,112,112,232,14,128, 28,17,85,101,247,182,0,116,93,7,231,26,126,250,241,70,241,219,153,111,204,120,188,229,220,251,231,39,110,0,40,148, 139,87,109,247,246,0,12,29,239,190,55,102,251,31,241,95,120,227,245,183,46,133,66,161,85,108,211,238,109,1,180,182, 182,142,29,234,122,254,171,84,42,149,3,96,18,81,97,39,10,111,168,98,184,43,165,14,160,148,150,133,114,241,29,253, 31,220,82,74,41,93,41,229,219,213,162,123,250,223,233,79,122,42,124,149,23,233,94,217,0,0,0,0,73,69,78,68, 174,66,96,130, }; const unsigned char Record1x[653] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,2,31,73,68,65,84,56,141, 165,146,191,79,83,81,20,199,191,231,222,190,246,181,233,15,250,196,244,17,219,69,23,41,97,0,177,9,152,72,28,28, 193,137,85,7,255,2,13,187,131,110,44,46,50,59,43,115,19,226,212,116,168,77,108,9,67,141,44,150,0,173,37,64, 109,74,222,123,188,182,247,29,135,214,154,98,49,38,124,147,179,220,156,243,201,61,223,243,37,102,198,117,36,174,53,13, 192,55,238,177,64,20,212,128,199,18,88,80,64,18,64,81,2,249,57,230,175,151,123,233,242,10,59,68,15,69,52,250, 97,106,109,205,8,77,79,251,68,56,76,238,254,190,247,51,151,235,182,10,133,247,12,188,188,199,108,143,5,148,136,30, 197,102,103,179,169,245,117,189,231,186,232,53,155,240,92,23,50,24,132,223,52,225,148,74,170,186,185,249,101,190,219,93, 196,96,112,8,40,18,69,3,177,216,247,187,27,27,55,156,131,3,168,118,27,96,238,151,231,1,74,33,152,78,227,60, 159,239,214,183,182,94,204,51,191,27,49,81,2,79,110,173,174,70,187,167,167,232,213,235,128,101,1,142,3,216,54,96, 89,96,203,130,93,46,35,190,188,172,105,209,232,171,191,76,20,192,3,61,153,212,46,118,119,161,26,13,144,223,15,105, 24,32,162,225,15,188,94,15,189,86,11,122,42,101,20,136,140,69,230,230,159,43,16,221,145,74,161,83,46,131,29,7, 66,8,176,148,16,145,8,40,18,1,2,1,176,235,66,213,106,240,199,98,42,208,191,78,115,184,130,98,46,116,78,78, 88,155,156,132,32,130,16,2,130,8,100,89,64,163,1,175,90,133,119,116,4,65,132,139,90,77,234,192,183,17,15,8, 200,183,247,246,58,250,204,12,136,8,52,128,72,41,251,48,33,160,153,38,72,215,97,55,26,149,52,115,103,4,176,192, 252,233,172,88,252,204,68,28,202,100,32,164,4,6,32,16,65,24,6,66,75,75,168,103,179,29,184,238,243,171,114,48, 165,133,195,229,228,202,202,77,221,52,165,58,62,6,92,23,52,49,1,17,143,163,190,189,221,57,175,84,94,207,41,245, 230,202,36,150,136,66,36,196,91,61,145,120,22,74,165,60,95,56,76,78,173,38,156,195,195,31,174,109,63,189,207,156, 251,103,148,127,235,35,145,188,13,164,25,72,120,192,78,134,249,108,92,223,149,128,255,213,47,18,206,244,197,113,23,107, 46,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Record2x[1266] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,169,73,68,65,84,88,133,237,150,79,76,20, 87,28,199,191,111,102,246,207,204,178,255,177,129,85,10,107,34,75,36,34,161,9,213,149,26,47,214,100,15,180,73,133, 54,30,44,141,61,24,155,210,212,68,175,114,241,64,210,139,61,181,49,189,149,139,7,107,99,228,232,65,77,99,116,86, 64,75,36,234,194,82,5,171,11,238,226,48,51,59,127,95,15,195,210,45,221,161,208,63,233,133,95,242,242,123,121,51, 239,125,63,239,251,222,188,55,192,86,108,197,255,28,228,111,246,99,1,240,0,56,0,12,0,19,128,14,160,252,95,3, 248,1,212,3,16,92,158,91,0,74,0,138,0,236,127,27,96,27,128,232,215,64,79,59,240,94,144,144,52,203,48,17, 74,41,108,74,75,18,165,63,77,2,63,14,2,183,0,24,0,158,99,3,142,108,4,128,240,60,159,248,220,182,119,191, 175,235,23,98,157,157,59,223,232,237,245,241,109,109,96,67,33,80,74,97,21,139,80,31,62,68,225,218,53,237,213,253, 251,211,87,188,222,47,190,241,249,102,124,62,223,175,133,66,97,249,31,1,52,55,55,55,126,249,242,229,193,131,192,119, 201,51,103,4,161,171,139,104,115,115,48,95,189,130,45,203,0,165,32,62,31,60,209,40,124,137,4,228,177,49,154,191, 112,65,185,1,156,248,42,30,207,114,28,247,44,159,207,187,58,193,174,39,222,222,222,94,247,65,177,216,145,41,151,71, 118,13,15,7,185,250,122,34,143,143,195,88,92,4,85,85,192,52,1,211,132,173,170,48,23,22,160,61,125,10,62,153, 36,177,158,30,111,221,245,235,239,114,44,59,154,11,135,141,133,133,133,215,110,26,204,122,0,209,104,52,214,91,42,157, 111,62,117,42,68,56,14,242,216,24,108,69,1,209,52,64,215,87,11,209,117,192,48,0,85,133,148,205,2,0,90,78, 156,8,246,150,74,231,35,145,136,231,192,129,3,117,155,6,232,235,235,243,126,146,203,189,21,106,105,217,43,236,217,67, 148,241,113,64,211,128,114,217,201,85,0,116,13,140,50,54,6,126,247,110,18,76,36,246,126,154,207,239,9,135,195,129, 77,3,120,60,158,192,174,82,233,195,134,195,135,3,229,233,105,216,170,234,8,25,134,35,86,129,208,52,16,93,7,49, 12,192,48,64,101,25,230,179,103,80,110,222,196,182,206,206,64,107,169,244,17,207,243,2,92,246,155,43,128,32,8,94, 94,215,223,225,147,73,152,115,115,142,200,90,235,53,13,80,85,216,47,94,192,124,244,8,134,40,194,16,69,88,185,28, 180,7,15,32,52,53,129,215,245,158,120,60,78,134,134,134,60,181,116,56,55,0,191,223,207,50,182,29,37,150,5,115, 126,30,132,101,1,66,0,203,114,156,80,20,216,146,4,40,10,40,165,0,165,0,0,66,156,137,218,178,12,54,24,4, 177,237,104,32,16,160,75,75,75,53,55,188,43,64,99,99,163,5,0,116,105,9,230,212,20,96,89,32,132,128,48,140, 147,87,10,86,242,42,4,195,0,182,237,192,174,68,56,28,70,44,22,171,121,50,186,46,1,207,243,6,101,217,162,37, 73,96,131,193,85,33,66,8,24,134,113,45,149,119,216,96,16,150,36,129,178,108,49,30,143,211,134,134,6,115,83,0, 0,84,91,16,110,168,51,51,240,236,216,1,2,252,97,230,21,55,24,134,249,147,43,132,16,120,182,111,135,154,207,195, 20,132,155,130,32,104,253,253,253,214,166,0,78,159,62,93,214,218,218,70,10,119,239,46,243,169,20,8,199,173,186,128, 106,152,42,241,213,118,142,131,191,181,21,133,59,119,150,105,71,199,72,44,22,83,220,116,214,115,128,154,195,195,183,202, 178,60,161,60,121,66,3,233,244,239,79,42,107,95,17,172,106,3,0,97,255,126,40,185,28,213,101,121,98,249,220,185, 9,195,48,36,55,145,117,143,226,100,50,169,39,67,161,159,149,209,209,254,104,87,151,223,215,212,4,99,126,30,196,182, 87,103,76,1,103,243,81,10,112,28,248,116,26,212,227,193,236,229,203,175,201,177,99,3,108,58,253,203,145,35,71,92, 239,130,191,188,140,38,39,39,189,250,201,147,25,122,251,246,247,59,50,25,161,174,181,149,104,83,83,176,158,63,7,149, 36,199,133,96,16,108,34,1,111,42,5,249,241,99,250,116,116,84,161,251,246,29,175,187,120,241,70,42,149,90,88,111, 252,13,93,199,162,40,114,252,240,240,219,218,213,171,223,250,227,241,157,245,93,93,126,190,185,217,249,58,0,88,146,4, 117,118,22,139,247,238,149,213,197,197,105,207,209,163,159,209,179,103,39,58,58,58,74,43,99,208,13,232,212,132,35,112, 246,9,123,232,208,33,78,20,197,250,123,221,221,199,179,145,200,15,89,142,43,100,9,49,178,132,24,89,142,43,136,145, 200,21,177,187,251,99,81,20,223,188,116,233,82,29,156,229,101,87,250,87,198,218,148,3,213,157,42,117,50,48,48,192, 102,50,25,33,20,10,249,88,150,245,48,12,67,52,77,179,12,195,48,102,103,103,213,193,193,65,181,106,214,149,130,53, 245,13,1,212,130,168,149,171,131,174,147,107,46,195,102,254,9,137,75,189,22,192,218,250,86,108,133,107,252,6,191,56, 1,108,78,79,135,199,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Rewind1x[764] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,39,32,146,243,206,11,0,0,2,137,73, 68,65,84,56,203,189,147,203,75,84,97,24,198,159,239,59,183,153,243,157,51,206,120,59,103,108,186,200,232,228,128,102, 58,102,74,58,16,65,16,109,211,69,101,33,129,45,170,93,23,108,17,210,133,90,212,34,250,11,2,105,85,102,19,66, 132,82,139,194,114,22,225,37,44,138,74,37,203,209,105,200,60,115,142,142,206,215,102,144,2,187,64,208,11,239,230,247, 240,91,189,239,3,252,135,161,0,220,191,224,30,241,15,34,203,173,3,192,206,113,5,128,55,151,67,88,67,36,30,143, 238,82,20,197,87,84,84,92,29,137,212,118,204,37,147,143,100,89,6,33,196,160,148,110,240,251,253,129,186,186,72,199, 236,108,226,9,249,209,12,133,66,50,231,220,107,89,214,250,96,121,105,155,198,180,14,0,153,145,225,177,45,182,109,123, 40,165,82,56,188,121,191,166,107,199,8,33,43,175,199,223,148,83,0,136,70,163,180,185,57,234,181,109,39,236,55,205, 3,117,219,106,251,182,215,215,183,223,143,245,185,37,89,146,40,165,222,138,138,242,29,13,13,245,177,202,234,170,163,189, 119,239,185,4,65,16,12,191,9,177,181,165,213,55,58,54,186,33,176,49,16,138,238,108,58,83,224,203,47,237,234,58, 239,243,120,60,132,103,57,152,202,196,166,230,198,27,76,211,106,46,95,186,194,124,249,249,132,103,57,84,85,133,40,200, 16,13,191,225,42,44,246,157,211,116,125,215,169,147,167,89,158,199,43,58,75,54,172,133,5,168,42,131,174,107,66,87, 215,133,198,194,130,2,209,89,114,86,57,211,24,10,124,110,80,211,48,225,86,93,94,213,237,146,102,18,51,220,118,210, 176,172,111,248,242,53,9,66,0,93,215,179,51,137,207,220,89,180,145,78,91,72,229,56,83,85,24,166,9,106,154,230, 76,184,162,170,197,178,210,157,61,119,110,191,127,216,255,96,222,237,98,40,49,3,160,84,128,172,72,188,183,183,231,109, 119,247,77,91,150,148,85,238,102,110,24,134,1,33,22,139,241,88,44,102,119,118,158,29,46,49,215,221,26,123,57,42, 189,26,31,171,20,37,145,23,23,27,210,80,252,121,166,166,58,18,89,90,201,188,27,124,246,180,105,110,118,150,6,131, 101,226,208,208,224,114,89,48,116,253,167,51,198,227,113,2,112,150,78,219,133,47,70,226,23,53,198,90,178,28,153,173, 149,181,65,14,80,107,121,65,73,37,146,199,83,169,228,137,169,169,143,124,207,238,189,165,100,173,23,156,156,156,164,224, 60,239,195,244,196,166,199,253,253,87,15,31,58,178,143,3,243,4,156,241,44,212,233,79,19,102,255,192,192,181,182,182, 246,131,228,119,37,112,22,23,101,2,238,5,144,81,20,87,10,0,108,219,17,0,104,0,87,255,186,77,156,115,101,13, 70,56,231,250,63,87,245,59,186,53,233,69,8,225,63,138,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Rewind2x[1074] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,233,73,68,65,84,88,133,237,148,93,76,91, 85,0,199,255,247,156,123,123,111,91,164,20,74,91,109,49,41,108,56,148,143,66,8,48,16,113,217,226,150,24,31,48, 225,73,33,60,104,76,124,80,48,243,97,70,93,140,79,62,66,231,147,47,60,227,18,19,147,37,4,199,116,33,194,144, 33,88,58,176,161,82,74,111,219,89,90,232,101,10,133,222,15,31,6,200,130,5,38,139,47,246,151,220,151,155,223,57, 231,119,238,199,1,114,228,200,241,127,135,254,203,113,44,0,43,0,11,0,6,64,250,9,251,89,97,0,152,243,204,121, 149,109,47,183,126,245,202,197,243,26,128,210,147,248,228,49,22,215,3,120,182,190,190,246,245,182,150,150,155,93,93,93, 157,59,247,179,61,197,125,126,235,119,221,221,221,111,30,225,103,133,2,176,185,92,174,151,46,94,186,112,235,131,15,123, 254,148,164,148,166,105,154,246,234,107,151,182,1,148,157,196,103,143,88,220,196,243,188,189,241,108,195,91,197,150,162,119, 175,92,249,136,119,215,212,209,244,214,38,84,85,125,18,126,214,0,1,64,177,219,93,213,250,140,195,241,69,123,123,187, 165,171,179,91,80,53,5,235,127,72,0,52,232,5,195,73,252,172,1,4,64,145,195,225,40,171,170,126,254,19,151,203, 117,238,234,213,207,244,69,69,22,108,109,165,161,40,50,8,33,96,192,236,31,195,56,28,14,247,99,248,89,3,56,139, 197,226,170,169,169,122,163,192,108,186,220,211,211,203,55,159,125,145,102,228,12,54,211,155,0,52,48,204,238,55,171,1, 0,40,75,153,115,231,219,58,139,10,205,151,223,123,191,151,111,110,106,161,155,233,13,172,165,86,161,65,5,52,6,154, 166,1,12,144,103,124,10,188,78,7,65,16,180,116,58,125,48,192,100,50,229,53,55,55,116,10,122,225,227,254,254,47, 97,179,218,145,88,91,65,38,147,1,37,4,12,67,192,48,12,24,6,192,206,142,4,29,207,234,139,133,79,251,250,174, 61,244,87,227,200,200,242,223,62,121,212,55,24,13,12,207,243,216,31,176,247,75,84,86,86,42,201,228,218,226,211,118, 91,106,252,206,88,131,205,102,35,101,174,50,66,8,133,170,170,96,89,118,231,226,192,178,28,116,156,14,55,71,134,229, 109,69,254,124,226,206,120,131,245,24,254,240,240,144,34,138,81,143,36,73,169,3,1,177,88,76,141,199,227,146,78,39, 204,110,111,109,126,43,70,194,78,159,207,235,116,87,215,114,5,38,51,52,104,160,132,128,163,15,39,166,132,226,251,219, 35,202,196,216,221,183,101,121,235,107,49,18,113,250,238,121,157,238,106,119,86,255,135,219,183,212,224,98,232,90,50,153, 60,24,176,251,114,99,177,216,70,121,249,153,68,112,49,52,194,177,220,140,119,118,186,81,150,101,190,252,212,115,44,165, 236,222,196,132,16,252,56,54,170,138,225,104,127,36,18,11,72,169,245,17,74,152,25,223,61,111,163,44,103,248,211,255, 228,143,143,170,209,200,125,143,40,138,89,3,0,0,129,64,64,17,69,241,129,211,89,18,74,172,196,174,103,228,173,204, 244,47,63,215,57,157,37,164,176,176,144,40,170,2,74,40,126,154,156,80,195,203,98,255,212,212,84,82,20,197,7,6, 131,49,180,154,252,253,186,172,42,25,239,236,116,157,211,81,66,204,251,252,201,201,9,117,57,36,246,7,131,65,233,208, 128,93,252,126,255,118,85,85,237,250,82,48,60,195,82,114,35,26,19,75,35,145,176,173,252,244,25,142,227,56,76,79, 79,170,75,75,97,207,194,194,130,4,0,225,112,120,187,182,182,126,61,180,20,158,161,68,119,35,118,127,185,52,18,141, 216,202,79,237,248,51,119,213,95,231,23,60,199,14,0,128,185,185,57,45,16,8,108,84,84,188,176,178,28,18,135,12, 122,222,239,15,204,55,169,138,202,174,36,227,124,44,26,239,243,249,124,169,131,126,197,74,40,36,14,233,5,157,127,225, 183,249,38,69,86,216,68,34,206,199,227,201,71,252,163,142,226,61,6,6,6,210,0,98,249,249,249,223,88,173,214,113, 142,247,246,26,141,198,119,244,122,189,114,148,95,144,144,198,89,150,235,53,230,29,244,179,31,81,135,48,56,56,72,71, 71,71,11,21,69,17,40,165,146,199,227,89,63,204,239,232,232,160,118,187,253,216,126,142,28,57,254,83,254,2,73,119, 244,97,100,22,31,73,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Skip1x[782] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,39,8,167,70,102,241,0,0,2,155,73, 68,65,84,56,203,189,147,59,76,19,113,28,199,191,255,123,244,238,218,43,82,192,222,181,64,33,62,18,104,4,68,211, 68,133,193,129,81,6,28,28,25,157,92,140,38,74,84,210,85,33,44,190,66,28,12,218,184,24,37,6,69,67,116,84, 112,144,71,124,64,76,120,212,96,160,143,163,244,122,215,235,113,45,127,23,32,81,97,51,126,167,95,62,223,228,51,125, 127,192,63,72,25,0,102,23,46,237,193,127,11,11,160,2,128,12,192,3,160,8,160,180,213,201,0,246,1,32,91,156, 238,42,240,120,220,222,246,246,182,30,199,113,82,133,66,65,230,121,158,147,36,201,113,9,2,215,214,118,170,183,88,44, 102,1,106,10,130,80,178,237,141,210,95,130,80,109,200,171,6,149,135,138,226,239,246,251,247,219,186,158,91,100,24,166, 92,150,101,82,93,19,28,84,20,127,119,69,165,207,109,26,249,21,85,85,139,85,85,85,142,166,105,59,34,182,49,28, 246,122,60,238,139,207,159,13,139,147,51,83,205,101,178,124,214,227,145,150,114,57,35,93,93,27,60,255,98,120,68,154, 155,251,22,22,68,225,28,207,242,122,42,173,25,45,45,45,118,125,125,221,70,60,30,167,164,171,171,43,224,18,184,133, 216,227,39,34,97,8,50,107,107,180,231,218,85,211,52,140,41,128,156,120,52,20,227,9,67,160,235,58,141,70,123,51, 90,102,109,49,153,76,221,92,142,47,127,111,58,210,244,131,11,168,42,10,142,5,0,48,13,3,130,36,144,123,119,238, 203,105,77,59,25,141,222,96,182,57,199,179,164,191,111,160,34,171,175,151,245,245,223,122,112,248,224,129,119,44,235,186, 192,41,170,138,180,150,0,33,64,38,171,65,20,37,128,82,36,146,171,212,235,245,110,18,2,102,45,171,65,20,4,208, 77,138,68,50,65,221,146,200,151,74,78,121,69,185,31,156,162,40,48,11,58,24,134,69,80,173,129,97,26,136,197,134, 172,68,50,181,228,18,248,67,219,220,178,242,24,123,251,70,159,253,58,187,106,154,249,187,141,13,77,49,2,178,206,169, 170,138,68,234,39,156,162,131,209,209,17,123,97,105,62,239,243,85,94,57,222,90,255,114,230,243,212,130,83,116,248,233, 153,79,214,196,248,7,91,207,153,131,199,142,70,6,40,161,122,231,153,206,2,0,144,137,241,241,192,235,177,87,139,181, 181,213,196,231,171,188,237,243,87,222,241,112,178,77,128,205,233,47,147,243,12,1,111,152,230,211,214,230,200,117,183,91, 74,3,196,140,68,34,59,163,226,148,128,10,150,97,222,135,27,194,151,130,129,186,85,194,32,79,65,76,2,148,173,142, 173,124,60,221,209,113,185,62,88,183,4,66,178,161,80,104,243,207,33,17,203,178,2,91,103,30,128,33,73,98,9,0, 108,187,224,3,192,83,144,117,81,16,54,246,124,6,74,169,151,82,74,118,225,2,254,71,126,1,54,156,22,72,126,132, 128,72,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Skip2x[1205] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,4,108,73,68,65,84,88,133,237,148,91,108,20, 85,24,199,255,103,46,59,187,59,179,179,179,51,238,178,203,46,119,234,75,129,181,152,96,140,73,11,65,10,137,23,192, 88,31,154,82,133,23,158,172,37,248,166,17,34,17,18,185,147,240,42,226,131,15,154,130,15,38,213,196,4,120,65,132, 64,107,140,6,148,118,139,41,88,218,238,236,110,187,219,185,207,241,97,105,173,101,219,194,155,137,253,39,147,124,201,249, 157,201,47,223,249,206,1,22,178,144,133,252,223,195,78,171,85,0,139,0,8,0,44,0,254,60,123,159,150,159,87,32, 221,188,117,115,223,226,76,154,41,232,133,1,219,182,221,71,63,158,45,79,203,207,43,160,173,90,189,242,221,61,187,247, 60,55,94,46,181,72,114,100,112,232,193,144,14,192,6,224,214,216,171,174,90,189,178,227,157,183,119,55,148,43,99,45, 81,69,25,44,232,5,221,117,221,217,248,185,5,100,89,86,51,75,210,29,71,63,61,206,111,105,110,150,239,229,114,219, 98,106,52,203,113,129,59,166,105,218,182,109,155,0,232,36,159,72,36,98,201,212,162,142,99,71,79,112,91,154,183,202, 185,254,190,109,178,28,201,134,66,225,59,12,195,88,229,114,217,154,206,207,43,144,72,36,98,241,184,214,177,171,173,29, 148,250,120,245,149,215,248,186,103,235,150,223,249,253,118,235,51,113,205,23,195,210,128,44,203,158,174,235,22,0,164,82, 41,53,166,42,51,248,213,203,127,187,253,107,107,84,145,125,53,166,221,147,101,217,205,231,243,246,19,9,44,91,182,44, 22,137,136,239,237,106,107,199,120,101,28,142,107,35,147,89,202,180,188,249,86,192,52,39,54,140,230,31,238,12,5,133, 190,88,76,43,105,154,102,201,178,44,135,66,66,109,222,48,94,24,26,190,191,83,12,135,251,83,169,116,73,150,101,107, 100,100,196,171,37,64,38,139,198,198,198,21,193,16,223,255,253,119,63,160,56,86,0,1,1,8,192,179,28,4,33,132, 135,195,67,56,112,224,35,115,232,225,95,221,166,227,28,98,60,166,8,226,61,198,115,44,135,224,12,222,3,14,5,217, 224,159,217,108,182,112,240,224,193,127,221,150,169,14,52,52,52,40,32,180,179,181,181,13,133,146,14,207,243,224,122,62, 92,215,129,105,25,144,164,8,118,108,127,131,91,156,206,212,253,242,115,111,27,97,73,145,16,108,110,109,109,131,101,91, 32,12,1,67,24,0,128,235,58,144,164,8,182,191,190,131,75,167,211,117,61,55,111,182,249,190,111,84,42,19,131,170, 170,150,7,6,6,166,36,152,201,66,81,20,72,146,8,0,224,88,30,44,203,129,99,25,16,194,128,82,160,60,81,70, 105,188,136,77,77,155,184,19,39,78,71,66,65,225,176,40,86,121,219,182,171,159,99,193,180,76,24,166,129,226,88,1, 165,241,34,54,54,109,226,78,158,60,19,9,8,220,97,223,183,90,214,174,93,27,158,222,1,110,178,208,52,141,22,138, 85,49,65,8,130,144,234,233,80,234,195,247,125,4,120,1,65,65,192,181,159,126,116,207,127,113,206,136,202,209,195,142, 235,28,153,159,191,234,126,126,254,156,17,83,98,159,68,163,218,151,225,112,120,162,166,64,60,30,167,182,83,93,11,6, 4,128,16,80,191,42,196,243,1,232,122,30,167,78,31,55,244,188,222,173,38,226,135,228,160,172,15,222,31,56,50,39, 127,234,152,161,235,122,119,34,149,250,88,141,168,247,58,59,59,75,132,16,90,83,32,18,137,80,241,209,17,176,28,7, 223,247,193,242,60,168,79,209,221,253,173,121,253,198,181,7,12,97,247,103,215,173,191,106,24,70,129,231,249,100,161,52, 50,59,127,253,218,3,158,103,247,103,215,61,127,213,48,140,194,222,189,123,157,125,251,246,97,102,166,4,162,209,40,213, 139,85,1,207,243,192,115,60,250,115,125,238,197,111,186,44,223,247,142,173,169,111,248,204,52,205,124,123,123,123,5,0, 186,186,186,232,228,12,252,195,223,117,47,92,236,178,40,245,143,174,89,211,112,110,58,63,91,166,4,84,85,197,200,104, 117,62,108,219,198,133,139,95,27,163,249,145,203,201,68,226,195,76,102,69,255,149,43,87,198,166,95,33,69,81,168,52, 109,8,187,46,124,101,228,243,163,151,151,164,23,127,144,76,46,205,205,228,231,21,80,20,133,138,146,136,91,61,55,140, 222,222,91,121,46,16,120,127,125,118,195,37,69,81,138,245,245,245,143,189,102,154,166,65,148,194,184,217,115,221,232,237, 185,149,23,2,161,253,47,189,216,116,73,16,132,82,45,254,73,4,124,81,20,209,159,251,227,76,83,227,203,103,43,149, 138,158,205,102,103,109,223,36,159,203,221,61,179,177,105,203,89,73,146,244,100,50,57,103,187,107,101,234,37,28,30,30, 150,40,165,98,32,16,176,20,69,25,35,132,204,217,62,74,169,84,169,84,68,199,113,158,136,95,200,66,22,242,159,205, 223,89,195,40,125,34,103,205,222,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Stop1x[429] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,12,6,17,40,46,242,211,255,195,0,0,1,58,73, 68,65,84,56,203,205,146,95,74,3,49,16,135,191,236,164,175,22,10,102,60,128,88,240,20,34,30,66,196,75,8,226, 137,68,188,130,136,215,16,84,4,69,41,138,62,172,44,180,187,221,221,196,135,253,171,173,138,79,26,8,204,100,50,95, 230,55,25,248,235,101,122,246,198,47,115,111,128,96,27,111,52,26,177,189,179,117,105,140,145,159,50,207,207,46,198,113, 28,155,15,0,117,142,193,96,96,78,142,79,191,77,222,219,223,245,170,74,28,199,0,68,77,96,213,41,34,213,227,183, 119,87,60,78,238,121,121,125,230,45,137,73,179,20,239,61,0,214,90,156,106,11,108,1,170,29,64,196,214,91,144,72, 48,192,60,207,234,152,160,206,45,2,156,186,22,16,69,2,6,124,8,20,101,65,154,165,204,102,211,10,96,5,183,12, 176,214,171,32,4,79,89,150,20,197,156,44,75,153,165,83,166,105,5,176,34,104,79,130,237,122,224,152,60,61,0,80, 150,37,222,123,202,162,226,251,26,216,200,115,234,22,1,234,58,9,121,158,19,8,24,32,16,240,222,183,77,20,43,168, 91,82,129,246,122,48,94,223,252,242,27,165,147,16,62,85,160,136,72,56,60,58,248,118,14,36,138,34,231,58,64,59, 202,73,146,212,163,28,170,227,80,217,193,84,66,42,191,185,17,24,174,12,175,249,23,235,29,41,108,117,184,218,69,135, 206,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Stop2x[571] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,1,242,73,68,65,84,88,133,237,150,237,138,211, 64,20,134,159,164,73,219,147,4,178,161,13,177,139,127,189,34,191,240,230,68,20,5,65,111,200,11,88,100,23,132,237, 226,7,221,204,121,253,145,182,219,162,219,70,3,254,177,47,12,153,33,115,230,125,50,231,204,16,56,233,164,147,254,119, 69,61,230,156,3,249,0,143,175,192,197,125,47,147,30,11,100,79,158,63,254,148,36,201,234,79,157,219,182,29,127,120, 255,241,209,161,57,71,1,202,178,20,192,219,215,239,198,238,142,187,247,50,79,211,148,103,47,158,82,150,165,174,175,175, 135,3,72,226,242,234,51,174,126,0,231,15,30,110,227,15,1,196,199,22,58,59,59,19,64,240,128,203,145,247,108,107, 208,77,252,95,3,204,231,115,135,110,7,254,68,190,158,191,137,191,79,71,83,48,155,205,36,28,73,196,81,140,239,34, 107,191,115,55,212,182,86,102,179,217,65,242,163,0,69,81,232,230,219,18,36,226,56,38,210,254,201,213,198,118,199,166, 13,45,90,3,20,69,49,12,160,174,107,253,184,248,14,192,104,52,218,166,66,18,33,180,4,119,66,104,105,67,192,67, 75,27,156,8,193,188,33,77,83,234,186,30,6,144,101,153,155,25,238,226,182,109,9,161,69,193,9,10,91,16,232,110, 180,81,60,34,142,59,72,73,152,25,89,150,13,171,129,197,98,161,171,47,151,68,113,68,68,87,7,36,17,177,70,221, 246,171,75,130,180,233,119,230,162,3,88,44,22,195,118,160,170,42,153,77,137,34,72,146,49,146,175,191,16,216,152,233, 206,116,211,71,96,54,165,170,170,97,0,101,89,186,153,17,17,147,38,41,238,190,99,228,251,0,59,13,192,204,152,76, 38,195,0,204,76,102,70,20,65,28,119,103,80,18,142,211,93,35,90,183,253,84,111,106,160,170,170,97,53,208,52,141, 204,12,73,140,39,147,109,206,127,247,132,245,177,20,184,28,51,163,105,154,97,59,144,231,185,204,166,188,122,243,242,216, 212,95,100,54,37,207,243,131,0,71,255,7,36,21,192,184,175,233,114,185,220,27,175,86,171,219,186,174,111,250,198,159, 116,210,73,255,92,63,1,150,249,59,58,96,29,111,5,0,0,0,0,73,69,78,68,174,66,96,130, }; } namespace Place { const unsigned char Bookmarks1x[753] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,10,6,3,42,40,185,100,186,202,0,0,0,53,116, 69,88,116,67,111,109,109,101,110,116,0,40,99,41,32,50,48,48,52,32,74,97,107,117,98,32,83,116,101,105,110,101, 114,10,10,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80,144,217,139,111,0,0,2,61, 73,68,65,84,56,203,149,147,77,79,83,65,20,134,159,153,222,185,247,246,131,182,96,63,80,106,20,98,76,140,49,38, 198,104,252,13,154,96,220,152,16,226,194,133,127,193,164,11,8,44,76,252,31,132,61,145,159,96,226,194,132,13,10,6, 48,86,180,84,161,32,45,183,237,237,237,244,142,139,98,161,194,66,79,50,155,153,57,207,188,239,57,103,4,192,84,113, 97,14,152,225,223,99,126,241,213,244,44,128,152,42,46,204,141,72,61,243,226,249,67,60,95,227,181,58,4,90,83,243, 218,0,72,41,0,16,199,153,13,63,160,94,89,230,217,189,34,169,236,228,75,11,152,121,252,232,65,24,134,70,118,131, 14,217,84,140,141,242,62,141,202,1,67,229,61,84,171,77,168,34,120,163,25,90,153,20,249,145,56,117,32,149,157,164, 182,183,244,218,2,112,28,71,26,224,224,208,35,26,115,161,222,36,93,170,80,187,50,74,144,136,97,249,109,82,165,10, 93,21,129,145,56,49,39,232,123,177,0,92,87,1,134,150,223,59,144,95,42,212,199,178,68,130,14,185,213,45,140,16, 252,186,86,32,249,109,23,198,243,68,237,206,32,192,118,108,194,110,216,223,20,135,30,237,66,142,204,90,137,122,33,71, 226,199,62,218,181,81,77,31,128,119,159,124,58,106,131,143,43,49,36,128,173,20,230,84,161,8,13,70,8,164,238,98, 34,17,16,2,231,168,137,142,218,103,218,33,1,132,16,128,57,33,196,93,84,195,199,31,30,234,189,110,43,146,219,63, 169,95,206,247,248,36,6,45,156,68,143,16,142,143,146,220,44,83,187,122,17,29,117,64,136,129,91,110,73,241,100,17, 110,175,55,123,0,131,1,3,185,11,41,0,76,54,77,189,173,73,126,223,69,53,90,116,109,69,245,230,196,185,19,213, 83,96,64,41,139,116,58,129,223,209,228,135,227,36,163,14,92,31,235,235,74,13,104,252,11,224,53,90,188,89,126,139, 37,13,161,233,45,173,13,66,10,108,21,65,8,129,0,186,221,144,175,229,106,152,111,30,201,207,235,235,0,79,45,128, 15,171,91,220,191,17,239,143,237,121,33,165,164,41,210,108,236,7,114,123,252,22,119,143,197,88,0,135,94,131,137,220, 16,133,194,165,51,137,226,84,1,215,54,119,206,173,193,252,251,205,234,140,110,53,195,157,106,32,93,87,161,59,122,192, 240,31,132,238,134,76,222,201,152,165,149,170,56,221,55,57,85,92,152,253,207,239,204,226,171,105,1,240,27,115,187,219, 217,106,190,108,255,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Bookmarks2x[1738] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,129,73,68,65,84,88,133,197,151,203,143,28, 71,29,199,63,85,213,207,233,158,158,217,151,189,94,219,89,155,216,150,136,108,68,162,24,34,19,17,46,4,5,14,60, 2,66,112,201,95,128,224,66,46,8,65,14,17,28,130,16,7,56,32,164,32,71,2,9,68,16,10,132,40,18,92,64, 66,138,80,132,18,136,108,130,223,143,221,181,119,103,119,231,61,253,168,31,135,153,157,157,217,25,39,75,114,224,39,181, 90,93,213,85,245,249,125,235,215,191,250,53,252,159,77,237,109,56,251,248,183,142,58,70,126,99,145,7,0,253,206,195, 197,19,193,236,103,33,163,213,175,254,246,242,247,190,188,183,221,153,104,112,249,233,39,30,123,232,225,207,125,230,17,149, 91,33,45,132,78,47,167,211,203,17,17,180,86,104,165,238,121,55,122,178,173,215,233,242,157,103,127,254,169,105,96,19, 0,86,236,199,62,253,248,89,101,92,67,237,206,58,185,41,209,104,167,52,218,41,121,97,247,227,236,132,157,60,92,101, 182,90,170,252,245,188,90,209,34,15,159,123,138,91,59,125,19,18,139,72,84,41,135,3,111,223,101,7,246,105,86,160, 58,19,19,206,63,56,111,133,175,140,246,141,41,112,226,137,175,249,10,196,117,93,122,89,222,7,144,201,9,117,86,16, 110,110,227,54,58,152,60,71,180,162,240,61,186,213,50,189,114,52,17,89,89,97,89,156,139,105,171,101,199,113,94,63, 125,79,128,5,235,68,174,239,101,90,43,99,119,20,40,70,223,16,226,149,26,209,157,13,178,40,164,87,46,209,245,61, 148,21,220,78,151,202,181,21,242,208,103,123,249,16,133,187,59,117,158,91,42,213,132,118,90,37,129,15,222,19,32,45, 188,56,41,249,86,13,60,24,3,16,168,94,89,193,233,165,212,78,45,147,133,254,152,151,29,18,154,139,243,36,215,87, 169,94,186,73,237,228,125,136,233,111,97,154,23,84,42,49,219,173,10,101,203,241,49,53,71,31,148,54,73,88,242,11, 80,32,130,54,187,95,88,233,246,93,76,47,101,227,212,125,131,197,5,211,77,241,154,29,176,130,42,44,88,97,235,216, 33,80,138,120,173,182,171,64,97,137,162,50,191,254,243,235,188,120,57,90,248,230,51,209,115,83,1,28,71,162,82,224, 1,253,192,25,6,97,47,163,116,167,198,246,241,37,68,107,116,94,48,251,246,13,230,47,92,161,122,229,22,7,222,186, 68,114,99,149,228,230,26,40,69,115,113,142,160,182,61,156,55,203,45,113,185,196,125,71,63,201,147,95,248,54,69,33, 223,152,10,96,69,162,48,244,135,33,164,6,123,97,214,106,244,146,152,220,239,195,37,55,215,80,2,119,79,159,224,206, 153,19,212,143,28,36,220,108,96,157,190,98,89,41,192,100,57,58,235,239,95,86,88,226,40,224,218,173,107,104,165,8, 195,114,250,244,119,75,75,19,0,130,68,81,20,14,219,204,96,11,116,189,69,158,68,59,148,4,91,77,26,135,230,135, 11,118,171,101,138,192,27,238,185,232,129,15,131,91,158,91,74,97,64,187,29,144,102,117,226,120,54,203,145,99,19,0, 202,82,142,194,160,63,76,4,181,51,67,47,27,70,181,201,114,16,161,8,220,209,161,136,82,216,1,176,215,234,82,184, 238,16,208,138,160,140,70,108,76,154,55,73,146,121,35,133,62,6,123,51,161,162,92,42,5,67,40,53,240,72,105,141, 178,253,44,216,159,84,225,116,82,10,183,15,225,244,82,76,183,135,56,6,172,16,175,110,208,94,168,140,77,109,69,97, 36,162,242,145,239,243,81,69,244,96,108,126,240,36,188,180,39,21,235,200,247,29,179,147,125,118,20,176,113,136,211,236, 64,37,70,140,166,51,91,166,114,125,133,214,129,89,0,74,235,91,160,53,94,163,77,120,119,147,34,240,105,29,152,27, 155,57,47,44,179,115,85,150,159,251,33,177,171,185,241,147,31,87,26,23,255,253,196,120,12,136,68,190,239,58,34,96, 173,69,6,89,176,56,80,37,88,223,66,103,57,0,245,163,139,180,230,103,240,235,109,156,118,151,237,229,37,186,73,132, 40,69,115,105,97,240,41,142,187,150,229,150,131,115,101,86,206,255,130,252,141,55,40,45,31,115,5,142,143,41,96,148, 170,134,129,135,136,80,20,57,198,237,71,189,84,98,210,74,196,204,149,219,212,238,63,130,24,77,107,113,142,214,200,216, 52,90,66,89,217,13,192,61,150,21,5,179,51,101,106,38,228,88,179,137,59,51,227,24,173,79,140,159,54,90,205,6, 59,121,192,22,67,5,0,154,203,75,136,130,185,139,87,9,54,235,195,152,0,48,105,70,188,186,193,194,191,254,131,73, 211,169,0,105,110,169,84,43,108,25,15,154,77,156,106,21,148,58,185,55,8,43,65,208,79,177,69,94,96,71,8,196, 209,212,78,28,165,180,190,77,188,178,78,229,218,10,214,113,80,34,232,194,210,75,34,54,63,112,132,194,243,166,2,228, 185,37,78,34,54,76,128,180,154,56,73,130,192,145,49,0,133,148,131,192,67,0,43,118,76,129,254,11,138,246,66,149, 246,66,21,147,102,152,52,71,140,38,247,189,123,74,191,171,64,65,57,137,185,224,132,72,115,21,103,102,6,172,61,184, 231,43,80,137,231,57,136,8,98,5,153,118,22,15,172,240,92,10,207,189,103,255,94,203,114,75,84,13,216,56,117,6, 255,195,143,14,156,148,104,28,64,36,14,2,23,100,16,3,22,148,234,95,90,245,203,43,59,33,203,254,44,205,11,226, 146,207,213,183,175,240,207,231,159,71,131,213,198,188,48,10,160,173,80,246,93,23,199,209,28,62,124,152,78,154,99,197, 195,104,141,239,246,149,49,90,97,180,70,107,118,235,190,105,117,225,224,217,138,96,148,66,27,141,163,21,183,42,139,183, 207,246,107,130,58,69,49,150,9,67,144,82,16,248,172,111,108,243,251,87,94,99,107,179,142,239,42,92,199,96,222,99, 121,22,149,60,80,176,182,222,166,222,232,32,194,12,16,1,29,32,27,5,240,5,2,165,224,133,95,254,137,251,143,36, 124,246,177,51,168,119,142,173,125,217,43,127,185,68,109,171,197,229,171,183,10,107,37,4,2,192,31,5,80,128,163,4, 111,245,206,38,245,122,155,115,15,157,198,117,39,138,230,161,169,119,33,219,233,223,110,244,184,120,121,3,0,173,117,239, 246,213,215,158,6,220,193,53,126,24,137,194,116,58,253,68,226,7,49,115,179,209,251,90,28,160,20,101,24,173,41,172, 197,113,180,114,189,120,231,144,144,81,0,1,10,69,113,161,209,104,63,80,46,135,252,246,213,55,249,234,231,31,97,126, 166,188,239,133,61,207,193,117,38,127,148,158,250,210,163,188,248,199,191,179,182,238,57,126,144,84,233,87,154,233,40,0, 64,122,247,230,91,95,255,217,249,240,119,31,63,247,161,240,250,141,53,245,236,143,94,154,190,146,244,19,213,255,106,70, 105,215,113,131,8,232,2,189,189,0,157,203,111,254,225,31,10,251,197,87,155,237,103,148,113,206,72,63,88,38,77,97, 17,178,233,93,147,9,116,164,175,213,109,111,188,12,212,25,212,219,123,53,245,129,24,8,153,242,219,246,62,76,6,11, 22,64,107,0,176,3,53,97,102,0,50,253,84,121,239,0,217,200,53,180,255,2,66,219,159,254,45,72,108,79,0,0, 0,0,73,69,78,68,174,66,96,130, }; const unsigned char Desktop1x[722] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,2,23,0,42,10,182,151,62,76,0,0,2,95,73, 68,65,84,56,203,165,147,93,76,207,81,24,199,63,231,247,79,180,48,179,24,27,235,154,102,46,136,205,172,197,52,46, 112,161,194,13,174,72,102,140,214,100,105,11,115,229,109,35,204,186,112,41,11,139,27,47,155,41,169,141,44,111,49,47, 75,72,249,139,213,164,214,239,229,156,231,113,81,254,254,255,113,97,115,110,206,246,61,223,231,57,159,243,221,115,204,162, 101,197,84,87,149,51,240,125,8,128,246,246,118,94,63,171,227,111,107,199,238,179,188,121,215,3,64,247,135,78,154,239, 63,192,44,204,91,87,239,197,98,69,201,198,135,119,235,99,207,59,26,5,64,84,177,97,200,246,178,218,67,198,152,170, 100,159,170,222,51,139,150,21,235,191,16,244,13,206,166,186,106,255,31,4,105,0,111,222,245,208,210,246,130,129,175,189, 184,225,247,156,58,126,44,81,248,139,64,129,178,202,163,108,43,41,165,225,102,43,3,95,123,1,70,27,0,163,66,24, 167,114,95,49,95,250,186,82,110,247,253,17,172,141,216,185,117,49,53,231,207,49,61,123,126,226,204,251,133,67,24,167, 98,239,154,148,66,21,193,218,8,99,60,98,177,52,198,165,167,179,107,251,18,250,62,60,77,120,98,51,179,231,204,253, 220,211,153,115,160,124,19,198,132,191,209,69,80,21,84,65,85,176,206,34,206,33,78,200,156,48,204,203,87,189,136,198, 14,123,143,154,174,108,152,58,49,78,86,214,20,0,156,115,88,107,113,206,34,162,168,42,65,24,160,162,88,107,241,131, 17,188,152,146,53,169,151,182,198,203,7,19,25,8,58,214,192,162,40,6,16,129,48,244,113,206,33,170,132,81,136,136, 36,191,210,75,203,205,47,186,248,237,71,72,198,248,76,6,198,8,140,49,40,6,107,35,48,6,85,37,138,2,212,9, 34,14,128,254,161,25,228,230,23,174,242,140,49,27,243,150,175,165,116,207,73,84,21,17,71,24,133,248,254,8,65,224, 19,4,62,97,20,224,156,224,156,195,57,199,195,39,131,108,44,94,143,49,222,117,15,160,171,59,206,226,165,43,57,81, 115,11,39,163,70,113,14,17,193,217,209,93,196,225,196,113,237,198,123,118,148,150,209,252,248,99,234,28,116,117,199,153, 183,160,128,51,181,119,88,189,98,22,126,56,12,40,145,181,140,197,67,75,219,32,155,183,148,112,225,210,237,68,8,105, 201,137,116,117,199,153,144,145,73,221,181,183,76,155,252,41,101,38,134,252,41,172,40,40,162,225,102,107,138,110,114,243, 11,59,140,241,114,146,69,17,119,228,81,211,213,211,64,255,152,52,46,55,191,168,226,111,159,137,255,93,63,1,185,254, 98,48,219,255,91,223,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Desktop2x[910] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,69,73,68,65,84,88,133,237,85,75,79,19, 81,20,254,102,58,116,74,41,24,10,82,84,80,1,41,4,161,104,162,193,104,120,5,53,105,226,35,16,27,227,35,42, 38,234,194,168,113,235,198,31,225,90,99,220,184,208,68,141,6,13,137,10,65,23,154,168,173,79,52,241,133,198,71,113, 164,5,218,153,78,103,206,117,49,83,168,48,96,69,118,246,75,78,230,158,115,231,158,243,157,115,239,61,23,200,34,139, 44,254,119,112,86,70,175,183,189,177,168,120,65,48,215,229,26,27,141,140,67,86,19,47,95,4,111,174,203,212,105,195, 42,255,30,151,203,121,46,169,105,9,37,174,216,193,217,174,61,15,245,236,180,250,87,176,50,138,174,188,67,171,55,110, 197,215,17,57,63,250,184,31,14,38,55,181,181,181,177,76,9,36,212,4,132,156,2,212,172,109,182,107,206,133,8,221, 188,216,2,35,217,105,62,44,43,176,190,37,32,229,22,122,220,44,46,161,123,255,38,212,214,46,3,3,3,99,12,96, 198,151,24,126,211,25,12,157,116,29,74,66,69,108,76,198,229,43,247,17,29,211,17,143,171,218,151,143,159,54,188,121, 115,231,97,70,21,136,72,63,221,43,42,75,176,247,88,39,136,52,252,144,190,25,65,166,8,81,106,76,48,184,144,169, 27,227,237,219,124,120,255,33,140,11,231,251,5,81,68,177,85,172,105,4,2,129,128,45,60,28,141,117,31,240,231,201, 74,196,50,176,53,9,107,41,91,82,4,111,181,91,137,70,35,21,86,4,248,169,134,112,56,220,82,223,80,69,188,77, 7,17,65,215,245,127,18,34,29,77,235,106,28,162,200,31,207,136,128,195,97,223,215,180,118,181,107,124,124,212,116,66, 179,72,102,36,75,60,133,0,176,184,163,163,195,55,43,129,64,32,96,3,184,174,37,229,165,156,170,170,19,25,204,236, 60,157,196,108,36,25,170,189,75,29,28,135,163,179,18,144,36,169,181,170,170,130,35,74,78,43,227,220,183,193,32,177, 188,162,76,32,98,187,253,126,191,56,35,1,187,93,216,183,102,77,163,107,116,52,98,153,201,244,113,230,36,69,81,64, 161,59,159,100,89,238,76,143,105,75,13,234,124,155,79,71,34,218,137,7,15,95,115,117,117,139,33,138,2,136,104,66, 140,19,159,210,89,218,119,82,82,183,226,247,121,99,77,60,158,192,192,192,144,168,40,98,87,209,194,202,178,225,240,219, 235,128,217,136,86,174,12,216,69,167,60,210,218,181,203,249,244,209,19,36,165,119,56,216,221,10,158,199,95,95,59,171, 121,34,134,158,158,23,240,84,212,131,92,139,16,234,189,36,51,141,149,15,14,222,150,120,0,208,245,31,91,106,26,234, 237,195,49,192,227,93,5,93,40,64,111,239,51,203,114,255,233,212,91,109,69,48,248,9,5,238,69,176,149,84,131,119, 228,193,93,86,153,67,164,30,6,204,70,196,9,182,147,165,229,203,132,239,177,8,100,69,67,97,101,61,30,245,223,128, 207,87,10,142,99,208,117,29,201,164,54,153,85,42,75,152,237,151,116,179,251,165,90,179,217,21,205,249,80,240,51,154, 119,236,199,136,108,60,5,197,203,107,133,159,159,223,29,1,112,198,236,132,172,250,249,171,65,240,57,134,170,200,9,0, 192,173,158,123,83,111,205,156,160,233,60,134,191,124,68,52,174,2,28,7,128,3,35,242,76,84,128,17,157,29,122,26, 58,53,117,97,95,95,95,251,124,16,240,214,180,93,13,221,237,93,144,110,99,28,174,2,136,165,191,134,28,128,60,0, 78,0,14,164,221,144,121,130,6,128,0,200,0,198,1,168,243,236,63,139,44,178,152,27,126,1,33,210,84,125,239,90, 212,11,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Home1x[679] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,36,73,68,65,84,56,141,165,146,77,107,83,65,20,134,159,51,115, 107,211,196,170,88,48,196,66,193,69,237,34,27,161,226,162,123,201,170,139,32,116,235,47,208,189,208,63,224,198,93,221, 250,55,68,20,226,78,40,24,237,198,34,149,86,41,77,73,168,54,183,105,155,59,51,119,142,139,124,180,129,226,198,179, 25,230,204,57,207,249,120,71,106,181,26,255,99,201,242,242,242,27,85,93,189,226,237,76,85,159,52,155,205,205,127,2, 98,140,245,122,189,126,51,198,72,140,17,85,5,224,248,248,120,174,209,104,108,84,171,213,231,163,96,239,61,198,152,252, 224,224,224,115,154,166,57,64,226,189,215,16,2,157,78,135,60,207,199,16,99,12,149,74,165,10,188,27,65,1,122,189, 94,146,231,249,171,52,77,215,47,1,60,33,4,98,140,19,144,114,185,92,44,20,10,20,139,69,172,181,24,99,104,181, 90,180,219,237,197,241,8,33,132,24,66,206,198,71,199,105,118,81,9,4,0,165,15,244,199,94,85,3,172,172,177,176, 178,102,173,249,153,120,239,213,57,71,47,83,94,62,123,140,200,48,240,242,166,116,226,6,128,11,202,250,235,15,11,137, 115,46,134,16,0,197,26,248,178,219,189,220,192,232,152,220,188,21,238,149,75,32,170,73,8,1,239,61,34,130,53,130, 181,23,41,215,11,9,143,22,111,147,24,225,211,247,223,164,231,126,160,70,136,104,84,4,209,196,123,31,189,247,160,138, 17,97,202,10,198,8,247,43,215,89,186,59,139,53,3,96,237,65,153,111,251,41,95,247,186,184,160,152,129,127,0,8, 97,208,65,223,229,220,185,49,205,210,252,44,51,215,44,103,46,31,143,175,170,204,207,205,112,171,52,197,214,94,151,204, 197,49,64,67,200,17,73,232,164,25,219,251,39,108,238,252,97,245,97,101,84,101,176,11,129,204,71,222,54,15,177,70, 88,152,155,25,0,66,8,209,57,7,106,217,105,157,112,212,203,80,224,168,231,198,138,140,150,233,66,36,61,247,88,35, 28,118,135,35,136,72,140,49,34,34,100,62,82,156,78,0,232,251,124,152,120,65,201,163,82,154,78,16,17,206,92,0, 200,19,85,101,247,40,34,2,91,63,90,227,224,237,189,195,73,9,135,237,140,190,245,233,105,31,129,205,36,78,149,26, 239,119,103,159,130,178,255,171,125,133,234,87,155,8,109,17,243,226,47,238,171,54,255,32,151,176,79,0,0,0,0,73, 69,78,68,174,66,96,130, }; const unsigned char Home2x[1416] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,5,5,73,68,65,84,88,133,237,151,207,139,91,215,21,128,191,115,223, 147,158,52,146,70,154,25,234,177,211,144,12,198,208,89,180,13,133,150,226,16,156,77,65,43,47,186,14,100,209,108,179, 235,31,16,232,31,144,101,41,116,85,186,109,119,165,32,156,236,10,83,55,77,194,20,10,110,51,206,216,99,108,50,30, 73,35,61,73,239,215,125,247,222,46,36,189,145,44,141,13,169,193,93,244,192,69,239,157,123,222,57,223,61,231,220,251, 244,164,221,110,243,42,69,189,210,232,255,11,0,62,192,205,155,55,253,44,203,62,53,198,188,253,162,7,68,36,183,214, 254,242,240,240,240,215,47,13,32,73,146,189,74,165,242,227,219,183,111,251,113,28,227,156,3,192,90,11,80,220,207,174, 253,59,119,238,124,188,191,191,255,199,123,247,238,157,190,20,128,44,203,210,106,181,234,158,60,121,66,183,219,197,57,183, 118,0,136,8,187,187,187,249,241,241,241,123,192,199,47,5,64,107,157,164,105,42,219,219,91,24,99,176,214,46,5,94, 204,132,136,80,173,86,107,39,39,39,191,218,223,223,255,104,174,95,39,206,57,109,173,125,255,232,232,232,207,207,5,0, 210,52,77,189,110,183,71,183,219,45,0,230,191,243,32,139,129,246,246,246,106,245,122,157,70,163,129,136,32,34,0,40, 165,138,235,48,12,185,123,247,238,71,192,243,1,118,118,118,146,243,243,115,111,107,171,133,214,122,5,96,93,41,230,18, 69,17,64,1,177,56,162,40,194,24,179,113,89,240,2,224,224,224,32,187,126,253,186,234,247,251,69,6,128,181,32,243, 108,44,202,124,197,139,193,149,82,115,128,202,11,1,0,140,49,182,209,216,84,73,146,242,217,137,229,47,247,151,131,92, 86,231,103,101,14,51,125,166,133,115,215,110,240,230,187,122,209,198,243,228,247,205,175,127,247,139,37,0,231,156,238,245, 122,126,175,215,227,97,183,206,7,63,255,41,55,190,187,181,224,108,246,251,188,232,107,32,103,154,34,206,227,238,152,223, 252,225,179,119,230,247,139,25,208,245,122,173,170,181,38,123,160,104,84,203,220,127,58,38,140,242,233,202,214,174,246,50, 18,89,185,20,160,94,241,201,82,141,8,221,249,116,113,20,27,99,244,249,249,128,94,175,71,148,90,106,213,18,214,76, 13,212,204,193,179,3,119,217,112,23,195,78,135,181,142,56,53,36,105,14,78,138,3,108,177,4,105,165,18,208,106,181, 72,141,176,17,148,176,46,195,83,47,126,93,124,167,25,240,131,55,154,252,245,223,61,162,212,172,181,25,39,57,181,134, 207,104,152,99,173,123,188,2,144,231,121,22,134,35,206,207,7,104,115,133,106,224,227,156,195,83,151,230,25,223,19,126, 114,99,155,183,246,154,40,17,174,239,214,248,244,31,79,57,233,70,23,70,14,70,137,70,231,150,192,87,68,137,182,198, 228,79,86,0,140,49,105,185,92,162,218,216,98,115,163,140,3,148,200,250,226,3,87,91,21,222,254,222,14,141,170,79, 166,45,200,180,39,126,246,195,43,252,243,81,200,23,95,15,208,214,50,74,52,185,117,120,158,16,148,61,38,113,154,137, 200,217,10,128,181,54,29,141,198,156,14,50,154,181,109,116,110,215,174,190,228,43,222,122,179,201,222,149,26,0,137,182, 75,243,34,112,227,90,157,86,173,196,39,135,79,193,9,254,204,79,217,83,140,38,89,46,92,52,225,98,6,18,223,247, 241,130,128,6,101,210,108,217,49,192,181,173,10,223,127,163,73,80,82,36,218,76,27,78,150,119,223,244,192,130,74,217, 163,253,163,171,252,237,171,62,199,79,39,179,57,24,140,18,155,59,183,10,96,173,141,199,227,49,221,129,79,165,85,38, 140,53,233,108,117,14,48,214,242,224,44,34,40,121,188,190,83,45,130,95,38,2,28,62,24,242,176,27,145,100,6,7, 196,153,97,56,142,61,81,222,218,18,36,34,130,10,234,148,74,62,163,88,19,198,154,36,51,100,218,22,7,208,235,219, 85,70,241,210,193,198,225,241,52,16,76,123,160,22,76,221,126,51,136,233,133,105,97,23,165,57,147,88,251,92,82,130, 40,138,38,244,195,10,149,13,120,120,22,49,140,150,3,1,100,185,93,210,11,194,217,40,45,160,82,109,201,173,70,128, 254,56,155,150,106,150,145,97,148,145,25,83,250,252,181,163,126,251,225,106,6,34,16,172,191,65,154,91,194,72,79,187, 251,89,0,109,9,39,249,69,158,129,225,100,106,235,41,97,146,228,133,62,156,228,133,15,165,132,179,97,140,18,21,181, 15,14,10,199,75,61,16,199,49,97,108,120,237,90,64,53,240,8,202,171,135,144,239,131,113,211,109,55,175,75,185,36, 108,214,124,130,146,194,56,87,232,131,64,40,151,167,33,148,8,73,146,161,148,12,151,252,45,148,32,6,208,148,104,86, 61,106,165,245,175,157,163,199,131,21,93,160,32,40,3,88,254,245,168,95,232,235,165,11,27,231,28,231,113,140,88,187, 228,192,7,232,116,58,114,235,214,45,19,70,25,131,137,227,209,217,16,213,123,78,139,127,75,57,61,29,218,56,30,126, 121,208,233,108,180,219,237,168,0,0,188,48,12,63,249,251,137,124,152,53,241,191,186,255,95,255,217,93,18,7,22,192, 234,228,248,244,203,63,253,118,113,78,230,159,102,157,78,167,17,108,110,94,221,8,90,187,14,167,148,168,213,45,240,45, 36,55,198,100,105,178,145,139,228,249,232,172,15,124,211,110,183,139,58,201,226,183,97,167,211,81,64,192,52,51,249,203, 0,152,73,0,36,64,214,110,183,151,182,150,252,255,227,244,85,3,252,7,56,45,2,128,34,54,254,2,0,0,0,0, 73,69,78,68,174,66,96,130, }; const unsigned char Server1x[642] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,96,0,96,0,96,101,20,102,74,0,0,0,9,112,72,89,115,0,0,11,18,0, 0,11,18,1,210,221,126,252,0,0,0,7,116,73,77,69,7,213,5,24,13,41,13,225,69,167,57,0,0,0,62,116, 69,88,116,67,111,109,109,101,110,116,0,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80, 10,10,40,99,41,32,50,48,48,51,32,74,97,107,117,98,32,39,106,105,109,109,97,99,39,32,83,116,101,105,110,101, 114,39,51,239,88,0,0,1,197,73,68,65,84,56,203,141,146,189,138,34,81,16,133,191,235,54,218,6,6,98,172,160, 145,8,3,254,177,6,194,226,62,192,198,70,3,247,5,140,134,13,124,2,31,192,23,16,246,17,54,22,100,2,3,55, 145,53,53,145,246,47,16,49,209,139,77,119,215,6,59,221,171,163,50,123,224,66,113,239,61,167,234,84,149,226,26,79, 90,235,223,124,128,193,96,240,25,248,197,29,178,44,151,75,241,125,95,124,223,23,207,243,196,117,93,113,93,87,140,49, 98,140,145,241,120,44,90,107,1,190,94,177,181,214,114,62,159,175,200,247,4,78,167,147,236,247,251,80,4,235,82,68, 41,197,104,52,250,200,1,173,86,43,138,173,247,143,167,211,137,114,185,252,144,60,157,78,49,198,252,19,208,90,127,1, 190,135,23,201,100,18,99,12,34,130,136,16,4,1,34,130,239,251,127,9,150,69,16,4,161,237,159,86,183,219,5,160, 215,235,1,112,60,30,153,207,231,0,136,72,148,41,140,67,33,128,78,167,51,179,66,98,136,70,163,17,125,10,43,80, 74,33,34,24,99,136,199,227,40,165,0,232,247,251,79,214,96,48,120,5,94,181,214,98,89,22,195,225,144,213,106,69, 62,159,167,84,42,177,221,110,241,125,63,170,64,68,200,102,179,225,62,124,139,189,111,146,227,56,20,139,69,102,179,25, 74,41,226,241,56,133,66,33,58,151,22,110,166,32,34,20,10,5,38,147,9,237,118,27,219,182,113,93,151,197,98,17, 85,96,219,54,135,195,225,241,24,235,245,58,213,106,53,234,124,46,151,187,219,204,55,124,186,177,224,121,30,65,16,68, 222,29,199,193,243,60,28,199,1,136,70,248,134,68,236,209,194,236,118,59,0,54,155,13,137,68,130,245,122,77,44,22, 139,54,54,220,187,43,11,135,195,129,76,38,3,64,165,82,33,149,74,209,108,54,73,165,82,212,106,53,210,233,244,77, 162,75,129,231,151,151,151,31,252,63,158,1,254,0,124,80,17,254,250,115,5,147,0,0,0,0,73,69,78,68,174,66, 96,130, }; const unsigned char Server2x[847] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,3,6,73,68,65,84,88,133,237,151,207,75,36, 71,20,199,63,213,211,61,253,99,163,44,113,8,134,157,153,75,14,234,34,11,122,200,238,31,145,219,28,131,61,68,17, 188,76,240,144,131,130,158,61,4,6,33,224,209,139,103,49,255,192,230,224,65,150,61,140,8,130,123,10,138,6,15,30, 36,50,77,79,77,183,253,114,89,39,97,117,166,107,92,115,74,190,151,162,171,190,124,223,247,21,239,85,87,193,127,29, 202,148,184,184,184,248,179,214,250,39,19,174,109,219,63,110,111,111,255,242,120,91,159,96,97,97,97,110,101,101,165,125, 123,123,43,121,136,227,88,26,141,70,187,94,175,127,111,162,157,187,3,115,115,115,175,125,223,127,219,108,54,159,185,174, 139,214,122,32,223,117,93,110,110,110,88,93,93,141,227,56,254,110,103,103,231,183,65,124,43,215,161,82,239,214,214,214, 158,249,190,159,27,28,64,107,205,232,232,40,235,235,235,190,82,234,109,30,223,206,85,4,42,149,10,87,87,87,100,89, 102,66,39,138,34,202,229,178,17,215,200,0,192,254,254,190,41,21,128,90,173,246,180,6,0,227,172,46,46,46,140,53, 115,107,224,223,198,80,59,48,76,102,79,110,96,102,102,6,207,243,140,184,74,25,159,111,230,6,14,15,15,141,69,225, 255,34,252,27,155,155,155,239,154,205,230,139,126,235,54,64,163,209,120,153,36,201,43,224,27,165,212,243,143,243,5,192, 142,162,168,71,126,76,17,78,79,79,127,219,106,181,222,47,45,45,253,106,89,86,42,34,169,109,219,127,58,142,243,187, 227,56,251,182,136,168,131,131,131,162,231,121,89,16,4,90,41,165,147,36,81,90,235,98,154,166,238,214,214,214,157,208, 208,193,1,166,166,166,212,209,209,209,248,252,252,188,237,186,110,82,44,22,187,158,231,145,101,217,23,215,215,215,129,173, 148,146,90,173,214,17,145,44,73,146,130,136,56,150,101,217,74,41,203,178,44,53,50,50,2,128,136,244,68,219,237,54, 103,103,103,125,131,186,174,203,196,196,4,0,39,39,39,162,181,190,218,216,216,80,34,82,16,17,27,72,139,197,226,117, 161,80,136,108,128,221,221,221,15,192,135,135,196,194,48,252,1,224,244,244,148,243,243,115,42,149,10,165,82,9,223,247, 25,27,27,187,199,239,116,58,164,105,218,251,62,62,62,126,239,121,94,109,111,111,239,143,135,244,141,187,224,242,242,146, 217,217,89,90,173,214,131,129,251,97,121,121,249,205,160,117,99,3,227,227,227,180,90,45,202,229,50,34,66,28,199,125, 139,50,8,2,99,131,198,6,170,213,42,213,106,181,247,61,57,57,137,82,138,32,8,112,93,23,199,113,140,131,62,202, 192,29,68,4,165,84,175,40,219,237,54,81,20,145,101,89,111,94,41,69,169,84,50,210,51,62,136,68,4,17,161,211, 233,160,148,186,55,106,173,177,44,203,232,214,244,217,6,128,129,227,63,91,246,201,12,220,161,219,237,98,89,214,192,113, 24,12,109,64,107,221,219,242,126,227,83,26,184,119,1,120,132,129,175,134,114,244,9,190,14,195,48,247,49,210,15,97, 24,10,240,18,232,219,163,121,109,88,0,168,215,235,159,147,132,195,128,7,80,222,221,233,75,224,5,48,202,128,44,250, 160,11,220,2,23,192,131,255,1,19,3,124,12,254,156,225,11,182,11,68,192,13,208,183,47,255,2,107,242,173,196,220, 106,38,81,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Settings1x[629] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,11,4,11,55,32,209,169,238,103,0,0,0,29,116, 69,88,116,67,111,109,109,101,110,116,0,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80, 239,100,37,110,0,0,1,217,73,68,65,84,56,203,197,147,77,107,19,97,20,133,159,105,107,131,52,157,52,35,161,38, 67,55,129,198,221,132,100,66,72,138,88,117,37,53,89,137,8,21,4,33,100,254,65,17,92,117,33,136,43,17,55,45, 253,3,165,45,8,67,178,81,12,88,65,145,188,249,152,162,130,219,36,148,137,52,37,89,180,136,31,113,97,103,72,219, 116,213,133,119,117,121,207,229,112,239,57,231,133,115,150,116,22,240,244,217,147,190,211,63,90,122,124,230,220,152,211,220, 189,119,39,163,235,113,19,64,136,74,22,32,159,51,88,93,91,57,134,157,36,115,9,116,61,110,230,115,6,150,101,1, 152,161,160,74,203,110,16,10,170,160,99,166,146,105,52,77,3,232,15,146,140,13,178,89,150,197,165,105,63,183,179,11, 238,91,44,17,37,70,212,197,79,214,168,211,248,21,191,248,211,255,189,24,185,50,75,171,209,98,251,221,118,175,109,183, 61,59,214,78,111,202,55,229,153,240,78,80,42,149,16,162,146,253,242,249,235,183,99,27,56,130,133,130,42,0,181,90, 173,103,219,223,95,9,81,221,84,20,229,170,36,141,62,92,200,220,10,56,231,232,122,220,213,98,196,97,202,231,12,98, 137,127,171,250,124,62,185,217,108,110,110,172,111,153,157,78,231,189,44,123,3,206,57,249,156,49,220,133,213,181,21,66, 65,149,88,34,202,193,193,225,225,220,92,122,9,32,28,14,27,221,110,183,7,200,213,114,157,194,110,241,180,6,111,94, 191,93,246,43,126,49,57,233,93,188,113,237,38,63,127,253,184,208,110,183,3,145,200,236,3,73,226,242,252,245,121,121, 220,51,78,69,84,16,162,146,125,241,252,229,253,161,54,166,146,105,90,118,3,117,70,69,157,81,47,30,65,178,51,147, 74,166,1,204,141,245,45,215,198,145,193,117,52,77,99,207,222,167,96,22,169,150,235,0,84,203,117,10,102,145,61,123, 223,201,193,112,13,142,84,237,187,73,212,49,51,211,25,10,187,69,39,153,230,199,79,31,78,37,241,220,127,225,255,215, 95,179,89,175,43,2,12,187,45,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Settings2x[2240] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,8,119,73,68,65,84,88,133,157,86,109,108,91, 213,25,126,206,189,231,94,95,219,55,54,113,88,18,172,148,186,129,212,26,144,86,84,8,181,64,90,71,26,180,77,25, 66,29,63,80,37,74,181,161,6,109,26,63,38,58,36,154,134,219,8,34,42,49,132,248,81,81,84,85,19,131,34,84, 129,212,74,168,138,80,107,179,66,155,137,100,45,27,77,192,27,109,234,52,36,115,98,242,225,216,215,190,247,124,236,7, 182,229,56,41,130,190,210,35,235,30,251,156,231,121,159,247,125,143,47,193,77,196,193,131,7,255,39,165,108,84,85,181, 192,57,55,84,85,189,120,224,192,129,13,55,115,22,189,153,77,138,162,4,119,239,222,13,175,215,107,216,182,141,119,223, 125,119,237,205,156,3,0,202,207,221,240,242,203,47,175,166,148,130,82,138,116,58,13,159,207,7,41,165,222,223,223,223, 112,51,2,86,116,224,224,193,131,79,19,66,250,1,60,218,219,219,123,177,250,59,198,216,250,198,198,70,193,24,3,33, 4,156,115,212,215,215,187,211,211,211,191,4,240,89,205,57,79,73,41,223,81,20,229,119,189,189,189,199,86,226,82,107, 23,250,250,250,254,108,24,198,107,237,237,237,161,116,58,253,116,44,22,179,207,158,61,59,232,241,120,26,58,58,58,254, 0,224,104,52,26,165,141,141,141,4,0,60,30,15,50,153,12,153,153,153,121,178,179,179,51,31,139,197,70,99,177,88, 221,246,237,219,63,172,171,171,123,110,219,182,109,244,250,245,235,143,116,116,116,136,120,60,254,89,45,31,169,126,176,44, 235,57,85,85,95,223,181,107,151,234,241,120,96,219,54,78,159,62,93,152,157,157,117,21,69,81,34,145,136,118,215,93, 119,233,145,72,4,139,139,139,144,82,194,48,12,120,189,94,164,82,41,140,140,140,20,147,201,164,228,156,27,27,55,110, 228,155,55,111,86,1,32,159,207,227,240,225,195,2,192,83,189,189,189,199,111,88,2,69,81,132,199,227,145,62,159,15, 169,84,10,186,174,99,231,206,157,198,216,216,152,17,14,135,225,243,249,224,56,14,22,22,22,160,40,10,52,77,3,33, 4,140,49,68,34,17,172,93,187,214,179,176,176,128,66,161,128,91,111,189,85,45,22,139,40,187,164,235,186,112,28,167, 241,71,75,112,246,236,217,47,18,137,196,86,33,68,184,165,165,69,177,109,27,142,227,160,185,185,25,156,115,20,10,133, 31,84,83,10,77,211,150,64,85,85,8,33,160,105,26,12,195,128,235,186,149,231,129,129,1,55,147,201,156,234,233,233, 249,83,173,128,37,83,64,8,145,132,144,39,190,252,242,203,130,227,56,240,251,253,80,85,21,249,124,30,82,74,232,186, 14,93,215,151,145,83,250,131,145,66,8,48,198,224,186,46,56,231,160,148,34,153,76,34,153,76,102,138,197,226,158,90, 242,101,2,0,96,255,254,253,147,66,136,51,67,67,67,34,20,10,45,35,211,52,173,34,66,215,245,74,230,156,115,112, 206,33,132,168,128,82,138,243,231,207,51,198,216,41,203,178,22,127,146,0,203,178,2,132,144,206,7,31,124,80,113,28, 103,25,185,97,24,240,251,253,48,12,3,249,124,190,82,146,178,3,101,33,156,115,216,182,141,29,59,118,80,69,81,158, 180,44,203,92,73,192,74,247,192,19,45,45,45,90,40,20,66,54,155,133,174,235,160,148,66,85,85,24,134,1,33,4, 78,157,58,85,248,230,155,111,160,170,106,150,115,94,215,214,214,134,173,91,183,26,138,162,128,49,86,113,192,182,109,132, 66,33,132,195,97,45,149,74,237,4,240,78,45,25,1,128,55,223,124,211,51,55,55,183,86,8,17,5,240,65,87,87, 151,178,122,245,106,48,198,80,190,245,202,14,188,245,214,91,57,219,182,223,113,28,231,121,203,178,242,150,101,249,116,93, 127,205,48,140,221,207,60,243,140,223,182,109,48,198,32,165,172,52,225,212,212,20,78,158,60,9,93,215,255,41,132,24, 100,140,125,65,41,61,211,211,211,51,78,250,250,250,174,75,41,195,166,105,22,26,26,26,72,115,115,179,190,105,211,38, 197,182,109,40,138,82,17,96,24,6,226,241,120,113,120,120,248,216,139,47,190,248,251,218,76,250,251,251,15,175,91,183, 238,183,15,61,244,144,39,155,205,46,41,71,40,20,130,109,219,72,167,211,152,154,154,146,99,99,99,108,122,122,218,121, 233,165,151,76,42,165,108,222,187,119,47,209,52,205,203,57,7,0,20,139,197,138,237,229,79,0,184,116,233,18,115,28, 231,213,149,106,233,56,206,171,95,125,245,213,238,45,91,182,120,170,167,129,49,134,241,241,113,112,206,161,40,10,34,145, 8,137,70,163,218,123,239,189,87,4,0,42,165,84,125,62,31,22,23,23,43,13,85,38,166,148,130,16,2,33,68,89, 152,1,96,106,37,1,0,166,28,199,49,74,98,192,24,91,2,33,4,8,33,80,85,21,166,105,66,74,233,7,74,83, 48,58,58,10,33,4,2,129,0,76,211,132,215,235,133,166,105,0,176,100,188,2,129,64,94,81,148,246,149,216,21,69, 105,55,77,51,239,186,46,92,215,133,227,56,21,132,195,97,132,66,33,112,206,113,237,218,53,196,227,113,71,74,73,0, 128,42,138,242,199,79,63,253,244,49,33,196,122,215,117,27,124,62,159,124,246,217,103,105,57,243,50,92,215,69,71,71, 135,57,48,48,240,246,145,35,71,54,118,119,119,187,101,242,35,71,142,104,51,51,51,111,223,127,255,253,102,54,155,93, 226,128,170,170,200,229,114,56,126,252,56,52,77,27,20,66,92,228,156,255,11,192,80,101,10,202,97,89,150,143,82,122, 190,171,171,107,125,52,26,173,92,167,229,18,120,189,94,156,60,121,210,30,27,27,75,186,174,187,95,74,249,31,66,72, 155,170,170,175,220,126,251,237,107,187,186,186,188,19,19,19,112,28,167,82,255,96,48,136,201,201,73,12,13,13,125,220, 211,211,243,104,173,115,75,254,11,18,137,132,187,121,243,102,135,49,246,200,221,119,223,173,85,11,224,156,195,117,93,180, 183,183,107,94,175,183,41,159,207,63,38,165,236,174,175,175,255,205,125,247,221,183,234,129,7,30,208,38,39,39,81,40, 20,42,228,156,115,52,55,55,227,194,133,11,118,62,159,239,79,36,18,255,174,21,176,236,34,242,251,253,31,164,82,169, 215,211,233,180,55,24,12,194,117,221,202,76,11,33,48,59,59,139,59,238,184,131,68,163,209,58,0,96,140,33,151,203, 97,124,124,188,98,125,89,128,105,154,152,159,159,199,236,236,172,42,165,60,177,98,239,212,46,236,219,183,47,199,24,251, 123,60,30,23,154,166,45,187,231,25,99,88,88,88,64,58,157,198,119,223,125,135,137,137,9,204,204,204,160,80,40,84, 154,174,220,136,182,109,163,88,44,66,74,169,83,74,155,126,146,0,203,178,238,164,148,254,42,22,139,41,185,92,110,89, 35,86,119,119,53,89,45,170,223,27,214,175,95,47,8,33,39,202,157,127,195,30,176,44,75,247,120,60,231,58,58,58, 154,86,173,90,69,10,133,2,8,33,240,249,124,16,66,44,169,111,217,234,106,48,198,80,87,87,135,214,214,86,152,166, 137,92,46,135,92,46,135,104,52,74,82,169,212,47,6,6,6,178,137,68,226,31,55,116,64,85,213,191,250,253,254,59, 55,108,216,64,114,185,92,229,141,103,112,112,80,102,179,89,132,66,33,248,124,62,40,138,178,36,123,69,81,80,95,95, 143,214,214,86,104,154,134,143,62,250,200,29,28,28,100,173,173,173,8,4,2,112,93,23,247,222,123,175,71,74,249,70, 173,3,75,154,144,16,242,113,54,155,125,98,110,110,78,189,229,150,91,240,245,215,95,227,147,79,62,41,22,10,133,203, 67,67,67,119,54,53,53,233,109,109,109,70,107,107,43,234,234,234,240,237,183,223,66,85,85,68,34,17,140,140,140,224, 243,207,63,183,231,230,230,120,38,147,249,139,105,154,247,124,255,253,247,143,62,252,240,195,30,85,85,113,238,220,185,130, 235,186,187,107,5,44,171,137,101,89,207,235,186,254,74,48,24,84,103,103,103,167,47,95,190,188,247,253,247,223,31,9, 135,195,129,237,219,183,255,250,182,219,110,219,70,41,221,180,103,207,30,140,142,142,194,239,247,195,182,109,92,184,112,65, 92,185,114,229,192,153,51,103,226,19,19,19,11,0,220,238,238,238,88,75,75,203,27,156,115,175,109,219,251,14,29,58, 116,24,128,3,128,221,80,0,0,253,133,23,94,120,146,82,186,229,196,137,19,175,36,147,73,9,64,175,70,95,95,223, 233,199,31,127,60,120,237,218,53,52,52,52,224,234,213,171,34,30,143,31,61,122,244,232,223,0,184,37,146,34,0,167, 179,179,179,97,205,154,53,77,199,142,29,59,87,90,43,2,224,43,150,160,20,236,208,161,67,39,0,156,42,17,122,240, 67,179,138,18,164,227,56,169,185,185,185,246,96,48,136,64,32,128,76,38,227,78,78,78,94,41,237,23,37,2,1,128, 199,227,241,241,120,60,254,223,82,214,172,154,252,70,2,4,0,187,244,195,50,88,41,51,29,64,49,151,203,93,154,159, 159,191,103,221,186,117,196,117,93,204,207,207,211,171,87,175,14,1,152,175,114,160,22,75,50,255,49,1,229,40,111,84, 1,104,37,80,0,212,113,156,196,240,240,240,83,195,195,195,40,137,203,143,140,140,140,86,137,45,163,44,230,134,177,82, 15,252,212,80,170,246,203,42,252,172,248,63,176,232,199,235,200,160,88,139,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Share1x[697] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,2,54,73,68,65,84,56,141,125,147,207,75,212,65,20,192,63,111,230, 107,172,38,90,80,45,66,132,68,157,194,91,93,130,46,65,7,15,29,36,242,210,41,130,14,65,157,69,188,117,144,16, 58,85,215,46,5,37,228,31,32,84,22,221,52,163,31,134,66,96,65,184,225,82,173,185,201,126,191,243,102,94,135,93, 55,53,233,93,30,243,230,205,231,253,28,25,29,29,189,111,102,231,249,87,54,204,236,194,248,248,248,236,46,119,109,145, 145,145,145,218,208,208,80,111,74,137,148,18,102,6,64,173,86,99,102,102,102,54,165,116,99,211,57,132,128,115,46,174, 172,172,204,79,78,78,70,128,44,132,96,170,74,181,90,37,198,216,134,56,231,232,235,235,59,1,76,111,66,1,234,245, 122,22,99,188,13,140,109,1,4,84,149,148,210,54,72,185,92,238,42,149,74,116,117,117,225,189,199,57,71,165,82,97, 117,117,245,248,38,48,83,213,164,26,185,251,162,224,119,254,55,18,8,0,70,3,104,180,173,102,14,56,61,124,234,234, 195,97,239,221,151,44,132,96,69,81,80,207,141,91,215,207,33,210,114,220,218,41,219,118,2,160,80,99,236,222,211,35, 89,81,20,73,85,1,35,115,240,102,121,173,25,95,118,233,120,75,59,47,28,45,239,5,49,203,84,149,16,2,34,130, 115,130,247,187,188,220,33,170,9,51,16,196,178,16,66,10,33,128,25,78,132,142,255,0,52,26,121,72,196,100,248,102, 138,77,128,106,51,131,70,17,145,86,201,26,141,104,70,74,70,50,35,104,83,3,100,94,104,20,218,6,152,106,68,36, 163,250,43,167,242,163,65,174,233,191,37,100,94,168,174,229,77,128,170,166,162,40,192,60,159,42,235,124,175,231,237,9, 104,99,125,219,56,178,206,110,64,240,78,248,182,214,42,65,68,82,140,17,193,104,228,129,206,142,102,15,150,95,62,96, 189,178,216,126,159,98,162,251,80,63,199,206,94,193,249,140,141,70,142,64,204,82,74,242,122,225,51,165,159,57,243,207, 22,219,209,194,215,247,76,76,76,48,55,55,215,222,204,39,83,83,124,120,254,24,201,246,16,130,146,113,96,73,222,190, 91,88,46,237,235,235,223,89,231,181,203,23,25,24,24,64,90,11,97,102,44,46,46,113,115,226,14,61,189,251,241,94, 180,167,179,227,149,12,14,14,30,78,41,93,2,14,110,5,152,217,25,51,59,185,213,230,156,251,40,34,211,214,252,93, 234,189,127,244,7,187,71,87,220,223,105,176,149,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Share2x[1446] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,9,112,72,89,115,0,0,13,215,0,0,13, 215,1,66,40,155,120,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,119,119,119,46,105,110,107,115,99, 97,112,101,46,111,114,103,155,238,60,26,0,0,5,35,73,68,65,84,88,133,197,150,77,104,84,87,20,199,255,231,190, 55,243,222,76,102,146,73,4,99,84,48,4,151,165,10,210,22,74,17,193,46,220,184,232,178,180,184,104,41,21,233,66, 232,166,46,36,177,59,55,173,80,43,133,118,87,168,11,187,17,36,27,91,144,82,40,98,173,164,110,132,54,181,198,26, 19,51,31,153,143,188,143,123,223,61,167,139,100,198,23,51,147,68,147,210,63,28,222,155,119,239,61,231,119,207,189,247, 204,37,17,193,255,41,23,0,206,157,59,231,106,173,127,180,214,190,190,209,0,34,74,152,249,227,243,231,207,95,218,14, 0,18,17,156,57,115,102,191,239,251,83,199,143,31,207,135,97,136,118,86,152,25,0,144,206,146,136,224,250,245,235,241, 210,210,210,190,11,23,46,204,111,21,192,5,0,173,117,156,203,229,100,118,118,22,229,114,25,34,210,213,0,128,136,48, 60,60,156,220,191,127,255,29,0,159,109,11,128,49,38,138,227,152,134,134,6,97,173,5,51,175,10,156,206,4,17,33, 151,203,245,205,204,204,124,122,250,244,233,241,246,247,110,18,17,195,204,39,46,94,188,56,185,46,0,128,56,142,99,167, 92,174,160,92,46,119,0,218,207,118,144,116,160,209,209,209,190,66,161,128,98,177,8,34,2,17,1,0,148,82,157,247, 70,163,129,155,55,111,142,3,88,31,96,199,142,29,81,173,86,115,6,7,75,48,198,172,1,232,182,20,109,5,65,0, 0,29,136,180,5,65,0,107,109,190,87,240,14,192,248,248,184,62,117,234,148,170,86,171,157,12,0,232,10,210,206,70, 90,237,25,167,131,43,165,218,0,254,134,0,0,96,173,229,98,177,95,69,81,140,91,51,140,159,167,87,7,217,108,189, 104,195,44,143,41,65,100,100,255,171,31,126,103,210,125,28,135,190,253,229,210,219,239,173,2,16,17,83,169,84,220,74, 165,130,7,229,2,222,127,235,53,236,223,51,152,114,182,242,92,47,122,23,200,149,47,157,56,143,202,45,124,245,253,173, 55,218,191,211,25,48,133,66,95,206,24,3,253,183,66,49,151,197,244,147,22,26,65,178,60,179,174,179,237,69,66,107, 94,9,64,193,119,161,99,3,34,148,219,205,42,13,80,171,45,162,82,169,32,136,25,125,185,12,216,46,119,80,43,14, 158,53,72,47,147,167,198,203,198,44,8,99,139,40,78,0,161,78,1,75,47,65,236,251,30,74,165,18,98,75,200,123, 25,176,104,56,170,195,184,37,181,162,4,125,69,23,205,122,2,102,121,180,6,32,73,18,221,104,52,81,171,45,194,216, 157,200,121,46,68,4,142,234,153,231,205,73,128,102,100,96,18,134,231,42,4,145,97,107,147,217,53,0,214,218,56,155, 205,32,87,28,68,127,62,11,1,160,136,186,47,254,38,101,69,208,140,12,18,22,56,14,193,203,58,88,10,99,77,68, 11,107,0,152,57,110,54,91,152,95,212,24,232,27,130,73,120,75,179,143,13,35,136,45,32,4,119,197,79,214,81,104, 46,233,132,240,116,19,166,51,16,185,174,11,199,243,80,68,22,177,230,13,131,44,239,49,1,203,114,157,176,188,108,58, 225,110,39,18,34,192,98,51,226,68,100,45,0,51,135,173,86,11,229,69,23,126,41,139,70,104,16,155,149,63,33,0, 137,101,24,43,48,9,35,177,43,101,249,57,179,18,106,139,122,43,116,72,57,93,151,32,34,34,40,175,128,76,198,69, 51,52,104,132,6,145,182,208,134,159,59,88,55,5,113,130,165,208,184,232,177,4,65,16,44,161,218,240,225,231,129,7, 11,1,234,129,233,234,232,69,68,0,234,129,134,182,54,115,123,247,159,213,53,0,204,28,0,4,118,243,136,19,70,35, 48,208,102,227,125,176,89,41,69,88,168,135,80,164,2,25,31,239,56,94,181,7,194,48,68,35,180,216,61,226,33,231, 57,240,178,219,83,132,128,229,35,29,69,26,74,81,61,253,61,189,4,33,0,24,100,48,144,115,208,151,217,222,219,178, 136,160,22,134,32,230,197,53,0,68,68,135,15,31,182,141,64,99,113,73,240,112,161,14,85,217,98,5,236,162,249,249, 58,135,97,253,14,17,229,69,36,232,0,0,112,26,141,198,15,191,206,208,71,122,0,238,31,211,91,190,236,174,146,0, 12,0,108,162,251,243,119,174,125,157,110,163,212,109,183,232,245,247,239,202,123,165,97,129,40,69,170,231,17,40,22,114, 35,163,251,246,124,183,107,100,196,43,228,243,152,158,158,110,205,63,169,124,50,191,80,251,237,217,190,137,181,86,199,81, 62,33,74,146,230,66,21,192,156,136,116,78,1,173,220,116,105,98,98,130,174,92,185,226,62,126,252,216,79,146,196,117, 93,55,73,59,234,239,239,87,99,99,99,159,3,120,23,0,121,158,103,15,29,58,148,181,214,226,222,189,123,81,171,213, 202,36,73,194,204,60,126,247,238,221,47,211,99,181,214,158,239,251,81,169,84,210,123,247,238,181,71,142,28,225,137,137, 9,17,17,33,17,193,177,99,199,70,136,232,101,17,57,0,96,103,183,89,51,115,159,82,234,131,179,103,207,58,179,179, 179,56,120,240,32,124,223,79,183,227,198,141,27,184,124,249,178,6,240,69,175,236,17,81,5,192,20,17,253,62,57,57, 249,15,137,8,170,213,106,255,208,208,208,43,204,124,80,68,198,186,13,124,248,240,97,254,228,201,147,39,70,71,71,149, 234,113,71,208,90,99,110,110,78,95,189,122,245,155,94,0,43,186,229,56,206,36,128,39,36,34,56,122,244,232,62,199, 113,14,0,56,160,148,26,232,65,78,34,242,38,51,191,180,158,103,165,212,79,0,110,247,106,39,162,22,128,41,199,113, 166,174,93,187,246,23,109,246,182,251,95,105,251,74,221,11,234,95,237,165,49,157,128,222,238,20,0,0,0,0,73,69, 78,68,174,66,96,130, }; } namespace Prompt { const unsigned char Error1x[653] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,11,10,9,50,14,147,83,180,176,0,0,2,26,73, 68,65,84,56,203,157,147,189,79,147,81,20,198,127,247,109,11,229,163,190,160,196,26,77,160,104,155,2,182,11,196,148, 68,135,142,186,50,105,210,129,17,254,34,59,50,116,102,35,178,144,64,88,68,7,48,146,22,154,104,99,248,176,36,164, 45,77,91,40,246,61,199,225,125,75,16,137,26,79,114,115,147,155,243,252,158,228,57,247,24,110,84,14,82,192,60,144, 6,198,189,231,18,176,14,44,101,96,235,122,191,185,33,126,59,28,10,45,76,38,147,4,195,97,124,3,3,168,42,157, 179,51,206,203,101,138,133,2,213,102,51,155,129,197,223,0,57,120,55,157,76,190,28,153,153,225,114,123,27,231,244,20, 28,7,85,69,12,88,67,119,241,79,77,82,221,221,229,83,177,184,154,129,87,0,190,174,243,116,50,249,250,94,44,70, 123,115,19,109,52,64,4,85,65,69,65,4,105,182,232,28,124,163,63,22,195,182,172,232,139,106,245,193,50,172,152,28, 164,134,67,161,247,207,230,230,184,88,91,67,157,14,170,138,42,168,122,98,5,197,133,169,49,4,83,41,62,111,108,80, 107,181,102,45,96,126,50,145,224,114,103,7,117,28,16,80,1,21,113,15,234,129,20,84,193,113,184,200,231,121,60,22, 1,152,247,3,233,96,248,62,63,62,124,68,69,25,43,127,231,79,181,111,223,65,170,53,2,15,31,1,164,253,192,184, 213,63,136,138,27,216,223,74,68,81,237,96,122,2,0,227,22,112,149,246,191,0,240,250,84,5,0,63,80,234,212,207, 38,20,131,170,195,151,145,17,183,65,196,189,81,55,60,55,85,68,221,32,181,217,2,40,89,192,250,249,201,9,198,30, 186,34,255,34,238,58,138,39,86,193,26,28,164,93,171,1,172,91,192,210,254,222,30,129,120,220,37,203,117,145,55,58, 237,78,67,80,99,240,71,34,148,14,15,1,150,172,12,108,213,90,173,108,165,144,167,103,234,169,11,185,230,138,119,171, 40,24,67,79,52,70,227,224,128,122,187,157,205,192,150,15,96,25,86,158,87,42,179,182,207,23,29,72,36,112,26,13, 228,162,125,245,19,21,48,118,136,222,248,4,141,114,153,194,241,241,106,6,222,220,186,76,118,95,223,194,147,209,81,2, 182,141,233,237,69,69,112,154,77,58,245,58,95,143,142,186,206,139,183,110,227,255,172,243,79,194,71,102,30,185,88,118, 119,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Error2x[1645] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,6,36,73,68,65,84,88,133,197,151,93,108,28, 87,21,128,191,123,103,246,215,235,221,236,110,215,118,138,147,170,9,78,236,64,171,164,21,133,34,129,8,47,253,175,161, 161,145,168,170,42,111,125,2,169,2,193,3,15,72,72,188,33,196,143,250,80,222,194,3,81,211,162,34,165,50,169,120, 168,16,84,148,134,168,173,237,196,73,20,154,68,174,236,108,214,107,123,237,157,221,217,157,185,247,242,176,51,155,217,93, 59,78,17,18,87,58,186,51,103,238,158,243,157,159,185,119,22,254,207,67,220,237,194,179,80,104,195,83,113,219,126,1, 41,15,106,165,138,74,235,33,75,74,199,146,114,197,104,189,224,41,117,74,192,204,211,176,246,63,3,56,3,19,182,101, 253,70,195,55,74,163,163,122,247,23,14,165,51,187,199,72,228,11,196,115,195,180,107,27,184,171,171,56,203,55,89,190, 112,177,81,41,151,45,97,204,95,60,99,94,153,134,171,255,53,192,105,136,103,164,252,53,112,226,243,15,29,137,223,255, 248,99,210,242,61,88,89,5,199,129,86,27,124,15,236,24,36,98,48,52,4,197,60,202,182,249,247,204,59,250,147,217, 185,22,198,156,92,212,250,251,47,131,247,153,0,102,160,132,16,239,220,51,50,50,245,224,75,47,38,227,202,135,107,55, 160,233,14,172,53,253,215,233,20,220,55,78,219,146,124,252,251,63,184,171,149,149,11,218,152,199,159,129,149,187,2,120, 27,242,66,136,185,125,83,83,163,7,159,63,102,115,249,50,172,111,220,209,169,49,102,64,207,174,28,28,220,199,149,55, 255,228,223,88,184,124,211,49,230,139,199,161,214,239,207,138,222,156,6,43,41,196,187,251,39,39,39,14,28,251,150,205, 220,60,212,27,131,81,6,78,117,244,62,50,107,192,184,45,76,117,141,226,215,191,34,205,74,53,229,86,87,143,78,195, 201,55,250,56,101,244,38,43,229,207,75,197,194,3,19,207,127,219,54,115,23,59,70,66,163,198,244,136,137,56,11,69, 133,206,195,245,77,23,53,123,137,125,199,158,141,229,139,133,195,25,41,127,214,159,129,110,9,254,8,187,51,82,46,28, 125,229,123,57,185,184,4,27,155,3,169,141,206,253,186,48,43,3,107,140,129,108,6,51,62,202,63,126,251,187,245,150, 214,147,211,80,30,200,64,90,202,95,30,56,52,149,145,109,15,93,219,232,70,169,183,145,48,74,19,100,68,5,37,209, 17,125,88,38,189,81,71,248,62,123,39,15,100,226,82,254,98,160,4,167,33,167,141,153,190,247,153,39,44,117,99,113, 91,199,3,165,136,62,11,75,19,232,85,31,136,186,190,196,189,79,124,211,86,198,60,55,3,217,30,128,20,60,85,44, 228,149,80,10,221,106,247,58,142,68,169,183,136,178,171,23,162,35,145,244,135,58,37,37,170,237,33,132,36,151,29,214, 30,60,214,3,16,19,226,187,163,19,251,51,170,186,142,137,24,209,161,17,41,49,82,118,13,154,64,167,45,11,99,89, 24,41,49,17,189,10,214,119,37,208,251,107,27,20,247,237,205,216,66,188,16,2,216,65,195,76,166,247,238,65,55,26, 93,67,8,1,175,191,30,45,23,130,207,112,120,4,163,121,252,120,167,153,133,64,55,91,164,62,183,27,241,209,133,169, 30,0,13,165,248,72,9,83,174,118,136,131,12,200,237,172,70,134,49,6,173,117,247,90,8,129,148,18,33,58,168,161, 61,0,237,249,196,138,187,48,80,10,127,47,1,180,49,153,88,33,143,86,170,147,218,32,117,59,13,173,53,74,169,110, 163,133,16,74,41,124,223,71,107,221,233,149,176,23,140,33,150,203,160,141,25,238,1,144,66,212,219,142,131,142,197,111, 215,123,7,0,165,84,55,242,59,1,54,206,159,199,171,86,59,189,18,139,225,150,43,8,33,54,195,53,54,128,128,91, 205,74,37,55,148,140,163,91,173,29,141,238,228,184,7,180,209,192,159,159,71,164,211,196,238,31,199,53,30,2,42,61, 0,192,165,250,213,107,19,67,71,14,99,54,157,78,3,2,238,137,19,157,212,26,131,95,46,227,93,191,142,113,156,238, 14,23,246,74,207,238,23,217,61,123,244,142,131,229,58,52,54,234,104,184,216,3,224,27,115,170,60,127,241,104,233,75, 71,50,61,77,83,175,163,42,21,252,165,165,206,27,178,205,86,219,175,235,7,12,159,201,177,2,181,203,215,54,181,49, 167,122,0,92,152,217,216,172,91,237,197,79,240,254,181,128,49,160,91,45,140,235,110,25,229,221,68,223,3,100,12,50, 157,192,196,36,142,219,178,129,179,33,128,4,56,14,53,33,196,91,203,255,156,245,229,125,99,120,181,26,202,117,187,167, 91,184,243,133,162,184,189,213,246,111,205,161,94,133,231,67,160,143,29,216,67,249,131,5,95,26,222,152,134,205,30,0, 0,87,235,31,46,47,149,235,38,155,70,228,179,183,157,69,14,154,1,167,220,62,134,85,31,96,20,92,230,51,144,142, 83,189,181,90,247,225,71,68,70,23,224,24,44,35,196,107,87,223,253,160,145,120,120,18,147,140,239,24,189,218,2,38, 10,174,141,193,164,18,164,30,154,96,241,111,179,142,20,226,213,232,81,220,3,0,80,215,250,39,78,211,157,253,244,239, 31,122,201,71,31,192,164,18,3,169,221,42,250,158,108,69,162,39,157,96,232,203,7,89,122,111,174,237,182,218,31,213, 181,254,41,125,99,96,107,127,11,118,217,48,95,40,229,71,198,191,118,36,230,156,191,132,191,82,235,109,184,45,58,60, 170,7,176,75,57,134,14,239,103,249,189,121,111,179,90,91,110,194,131,91,125,19,110,121,182,156,129,123,4,156,77,165, 146,135,246,30,125,56,101,26,46,205,11,215,81,78,115,219,215,48,20,107,56,77,106,114,28,145,138,243,233,95,63,110, 122,110,123,174,13,79,62,7,213,173,124,109,123,184,189,6,177,49,120,85,10,241,98,126,180,144,24,121,228,144,196,109, 209,186,185,138,191,238,160,221,22,218,83,16,179,144,201,4,86,46,77,108,44,143,140,91,220,58,119,197,175,221,90,243, 218,112,242,36,252,224,12,52,182,243,179,21,128,0,50,192,16,144,249,14,76,78,195,143,179,240,72,50,149,80,217,177, 66,42,89,204,98,15,167,177,135,146,120,78,147,86,173,65,123,117,131,245,155,107,77,207,109,89,235,112,238,77,248,213, 219,112,5,168,3,78,100,222,17,32,29,0,12,71,231,61,48,246,36,60,122,24,190,154,133,177,4,100,108,136,251,224, 185,80,95,135,202,135,240,254,159,225,220,82,167,211,235,116,222,247,112,222,164,243,159,81,221,77,9,210,116,190,219,194, 76,164,131,57,21,72,2,136,211,249,95,97,2,163,30,224,2,77,58,41,15,37,116,188,217,239,252,78,0,209,231,177, 192,97,10,72,6,142,227,129,222,6,252,8,64,27,104,5,142,221,64,55,224,52,58,254,3,231,154,16,69,179,153,170, 92,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Information1x[863] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,0,0,0,0,0,249,67,187,127,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,213,3,2,6,32,50,58,80,156,247,0,0,0,53,116, 69,88,116,67,111,109,109,101,110,116,0,40,99,41,32,50,48,48,52,32,74,97,107,117,98,32,83,116,101,105,110,101, 114,10,10,67,114,101,97,116,101,100,32,119,105,116,104,32,84,104,101,32,71,73,77,80,144,217,139,111,0,0,2,171, 73,68,65,84,56,203,149,146,75,72,84,113,20,198,191,255,220,59,227,189,58,215,71,38,89,106,102,82,62,8,69,34, 19,196,161,6,37,212,164,162,144,108,98,202,112,97,180,8,19,178,69,203,16,49,170,69,143,77,162,139,136,160,2,3, 3,37,200,16,73,116,38,74,74,205,138,52,149,76,157,113,116,156,185,119,174,247,245,111,229,160,53,17,126,171,115,224, 251,126,156,115,56,4,17,84,92,217,212,76,41,28,6,37,41,32,132,152,136,49,203,16,250,180,255,101,107,227,159,94, 118,125,83,84,222,148,193,48,164,239,98,109,101,90,185,189,0,113,2,15,85,55,224,241,5,83,123,122,63,92,33,38, 230,44,165,122,73,127,87,235,215,136,0,150,37,111,239,181,212,111,223,147,185,99,44,16,82,70,103,125,146,18,90,85, 89,69,211,163,109,37,249,89,233,233,201,123,91,110,61,118,1,136,95,203,48,107,69,73,213,213,219,245,231,143,150,21, 31,204,249,172,168,186,155,183,152,21,0,68,167,32,170,78,13,239,74,104,150,139,230,16,205,115,59,117,38,37,115,114, 252,109,39,0,152,194,36,134,61,87,110,47,64,32,164,142,177,44,67,45,102,198,32,132,80,80,24,154,110,40,148,194, 232,26,156,236,46,42,204,1,195,114,167,214,114,97,192,170,66,227,5,43,15,89,209,87,85,205,72,52,51,166,11,137, 177,156,115,87,178,224,200,223,189,213,1,37,144,58,229,17,253,60,207,33,32,169,92,109,93,131,105,195,13,8,33,68, 209,116,72,178,106,50,12,42,38,88,163,224,245,75,46,81,10,49,43,65,73,27,158,150,134,21,69,55,169,170,177,22, 225,1,136,97,64,12,207,74,94,95,32,70,148,85,203,138,164,250,51,146,99,49,250,195,247,94,84,116,58,183,36,41, 238,111,139,30,193,106,73,240,250,131,136,19,120,181,163,173,89,220,176,130,153,209,6,122,222,12,131,143,98,115,39,126, 45,139,0,240,211,39,234,31,39,188,254,222,225,153,133,37,81,54,87,236,79,171,24,114,141,193,202,97,226,175,27,108, 19,66,199,59,187,250,229,153,233,249,236,180,36,235,161,107,237,3,55,207,28,206,186,228,254,50,31,98,88,146,232,180, 103,85,251,23,151,114,220,131,35,170,192,250,74,195,171,175,255,131,99,167,27,171,100,42,60,47,43,45,178,20,30,200, 70,52,207,65,213,117,248,150,69,12,185,198,241,206,53,162,197,113,210,229,39,237,55,30,68,4,0,64,109,93,67,98, 136,110,113,5,100,164,59,78,36,49,132,0,44,11,116,117,207,5,25,205,191,175,163,237,206,20,254,167,154,26,187,213, 233,180,81,207,98,31,21,101,23,253,62,249,140,58,157,54,26,201,203,254,131,161,2,192,253,187,15,145,157,155,141,233, 169,105,108,90,78,167,141,206,204,190,50,2,210,16,253,52,250,194,216,236,4,0,80,85,125,242,122,141,32,196,31,89, 88,88,120,157,151,23,251,40,146,233,55,86,76,54,94,124,138,29,4,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Information2x[1910] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,214,5,29,20,51,56,165,102,131,162,0,0,7,3,73, 68,65,84,88,195,197,150,91,108,84,215,21,134,255,181,247,217,103,110,30,207,140,7,95,48,99,67,112,13,56,16,163, 36,38,82,44,5,82,85,109,26,165,17,85,43,171,37,180,64,11,69,77,85,169,141,90,69,125,169,148,23,162,190,180, 36,202,67,37,231,210,54,162,74,19,171,109,26,145,160,114,105,16,74,8,16,27,156,16,219,164,216,229,98,60,30,95, 230,62,115,174,251,156,221,135,12,21,15,5,60,17,85,143,180,180,165,163,125,214,255,173,127,95,206,2,254,207,15,213, 51,121,224,169,167,66,145,10,182,50,30,220,166,160,250,224,201,38,0,0,215,114,4,26,246,61,235,181,106,3,254,54, 180,127,191,121,199,1,190,191,231,103,123,193,248,175,90,87,173,215,83,93,189,145,182,214,86,132,195,58,52,70,240,61, 23,139,139,139,184,116,241,188,113,105,98,212,86,158,252,197,43,47,253,122,240,142,0,12,12,60,163,71,19,214,80,99, 178,229,75,189,253,91,35,16,13,200,228,171,200,85,13,184,210,1,200,135,208,128,229,137,48,122,82,9,68,4,240,247, 131,111,26,153,233,43,71,203,249,224,192,208,208,51,206,173,242,107,183,3,140,38,236,161,101,171,214,63,178,225,254,47, 7,254,53,103,194,83,121,172,106,19,184,103,117,35,98,17,225,11,206,125,203,145,170,80,117,252,201,76,78,73,87,241, 129,111,111,11,31,61,246,238,87,39,206,158,25,2,240,117,0,234,102,2,252,150,182,255,224,233,31,70,91,87,62,185, 254,129,199,66,159,206,152,232,78,105,216,180,54,138,182,68,192,143,134,132,20,26,147,156,147,212,57,247,34,33,225,183, 55,133,213,66,217,178,206,95,201,185,143,63,124,127,112,58,51,191,178,107,213,154,236,185,179,239,15,215,13,176,107,215, 79,227,164,139,55,123,31,218,22,187,186,40,177,105,77,16,157,173,58,52,14,143,49,114,25,65,18,65,50,34,23,68, 18,128,7,40,47,222,16,80,87,230,202,213,217,156,161,30,221,220,23,57,115,250,100,255,198,13,125,131,163,163,167,172, 255,166,195,110,6,192,116,182,189,185,115,99,216,246,5,218,147,132,150,132,6,2,36,72,185,68,228,48,78,54,39,178, 25,193,230,4,75,227,100,114,70,86,88,215,236,120,67,192,40,155,78,161,108,75,187,175,127,115,152,233,108,251,77,117, 110,234,63,11,236,108,237,92,23,202,85,44,172,108,211,225,195,247,136,41,151,64,14,65,57,68,176,57,35,139,49,102, 50,78,22,17,44,141,51,131,115,50,3,130,85,130,58,171,94,206,148,138,125,247,221,167,129,233,59,235,223,132,190,215, 213,16,141,227,90,166,138,128,8,0,32,9,69,46,227,176,25,145,195,137,57,196,148,100,32,23,128,239,51,82,202,87, 176,93,207,99,68,197,160,174,133,10,85,155,86,52,167,154,161,188,213,117,3,40,229,69,53,161,193,83,54,76,199,115, 130,66,115,137,224,16,200,97,140,108,198,96,127,6,65,18,32,79,3,124,87,249,84,168,184,11,193,0,87,140,200,55, 93,15,186,224,164,124,63,90,55,0,49,173,4,101,39,25,147,152,94,168,90,241,136,238,1,204,33,130,205,136,44,6, 178,56,35,155,24,115,25,65,42,95,249,89,211,157,119,164,180,131,26,11,17,145,34,34,174,0,159,49,170,214,189,7, 136,248,88,185,148,69,83,84,119,22,10,150,145,45,90,101,0,54,129,108,206,200,100,28,38,231,100,104,12,21,71,122, 179,243,37,243,188,37,229,204,154,21,137,166,160,174,85,130,140,153,203,155,194,90,174,88,182,24,211,38,235,6,240,60, 243,183,215,46,142,150,87,54,55,122,92,35,231,242,98,53,191,241,174,68,42,164,19,207,149,173,116,177,236,78,45,86, 236,137,185,188,57,92,49,220,113,193,89,54,98,207,127,165,50,55,249,104,64,104,134,174,51,227,11,109,137,229,31,142, 140,84,165,114,95,171,251,30,24,61,123,106,108,221,218,13,223,105,93,209,25,107,111,89,230,152,174,44,180,39,66,72, 37,35,45,237,77,193,110,174,92,157,60,155,251,118,57,170,193,94,29,34,123,75,50,30,237,41,148,171,83,20,108,60, 159,138,55,222,173,115,213,121,224,15,191,151,220,47,238,28,25,25,113,235,59,134,128,34,215,222,58,124,244,175,182,144, 229,96,87,75,60,50,60,153,29,55,28,47,59,126,181,240,22,152,42,45,139,133,187,58,219,146,15,38,227,209,30,14, 202,131,107,231,34,205,119,13,166,154,98,107,155,162,250,198,23,158,127,142,219,210,219,57,56,56,104,124,238,159,209,142, 61,63,233,13,233,161,127,124,115,199,110,67,137,200,228,138,166,128,34,206,51,134,233,140,69,66,90,62,28,224,37,157, 11,67,144,187,129,120,208,47,89,18,209,128,254,163,125,251,158,21,165,98,241,201,87,94,252,205,159,111,149,159,221,14, 224,213,151,158,255,216,117,173,239,158,124,247,136,72,54,134,18,153,156,117,213,54,10,9,70,74,10,206,28,157,11,131, 152,107,95,188,56,145,116,61,231,211,134,128,232,158,24,31,55,139,133,242,224,237,196,151,4,0,0,228,211,233,185,244, 181,88,88,240,144,84,158,149,158,153,45,103,231,210,73,98,76,50,93,185,239,29,59,218,158,158,157,157,212,53,81,225, 196,218,174,92,153,38,5,121,118,41,185,151,4,240,242,203,251,115,82,250,31,207,92,155,161,101,13,193,213,134,83,137, 125,244,225,177,175,93,250,231,123,219,46,126,114,116,231,216,248,201,39,86,175,140,234,4,74,112,98,61,167,78,125,16, 211,25,62,88,74,110,109,169,29,145,237,154,123,255,242,250,129,19,223,219,179,99,85,170,37,169,47,76,11,56,118,241, 110,166,128,53,221,43,16,141,69,191,232,58,85,117,240,237,195,215,28,215,25,122,113,240,185,217,59,222,19,110,223,241, 248,193,88,162,231,177,135,183,108,65,79,207,90,52,70,35,224,92,3,35,32,155,91,192,59,111,31,198,248,248,196,229, 249,140,190,238,208,161,23,236,59,234,0,0,180,54,231,31,218,178,217,134,175,24,222,120,227,79,200,46,148,224,74,15, 13,13,1,8,205,65,62,55,229,228,22,47,120,135,14,77,216,75,205,89,23,64,122,166,194,63,25,187,128,93,187,190, 129,7,251,31,128,43,61,228,22,11,152,203,100,160,148,133,11,227,89,189,144,15,118,213,147,147,213,51,217,243,228,179, 11,243,6,142,31,127,31,122,64,71,34,17,67,170,163,5,93,221,41,156,56,113,26,99,19,83,112,93,247,245,255,25, 0,231,180,239,222,123,59,48,48,240,99,104,92,0,0,28,71,226,194,133,171,232,237,237,197,250,158,46,132,66,226,91, 117,229,172,103,114,119,119,243,211,154,166,132,97,76,161,92,54,65,76,67,161,88,130,16,192,232,185,143,48,53,121,25, 217,92,241,82,60,238,255,110,102,198,148,183,234,134,235,57,5,90,45,68,127,127,199,186,198,198,208,94,33,2,79,0, 42,204,57,131,82,62,148,98,80,138,103,149,50,14,159,57,147,249,229,252,124,177,252,89,147,10,23,128,172,141,238,231, 113,64,7,16,168,69,112,122,186,100,78,78,102,135,59,59,123,101,115,115,119,223,238,221,63,215,54,109,122,4,211,211, 101,59,157,174,28,56,114,100,228,213,106,213,22,181,239,168,182,196,215,131,106,80,75,6,160,27,170,255,143,11,0,66, 233,116,122,186,163,163,227,158,177,177,177,214,209,209,81,63,159,207,143,29,63,126,252,143,158,231,121,0,252,154,208,117, 7,84,237,157,95,115,163,174,37,160,154,168,94,27,69,13,68,7,16,104,111,111,111,246,125,159,103,50,153,98,77,192, 5,96,215,66,214,194,1,96,221,108,9,234,185,9,175,91,170,213,156,187,209,94,220,80,229,245,74,175,187,113,203,141, 248,111,77,74,60,229,108,227,134,136,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Question1x[932] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114, 101,0,119,119,119,46,105,110,107,115,99,97,112,101,46,111,114,103,155,238,60,26,0,0,3,54,73,68,65,84,56,141, 109,147,91,108,84,101,20,133,191,243,255,231,90,81,26,192,134,78,161,244,54,237,128,78,169,83,130,5,77,83,46,70, 45,250,162,162,134,196,132,152,24,19,43,6,73,76,39,65,140,105,162,173,23,36,241,65,13,137,17,210,248,224,131,9, 160,71,35,130,142,213,160,5,105,25,90,219,130,99,167,98,157,161,45,80,123,153,105,167,118,206,239,67,75,3,193,157, 236,151,157,189,87,214,94,89,75,83,74,113,99,21,111,107,9,0,207,0,117,64,112,126,220,5,68,128,214,184,27,238, 187,113,95,187,14,80,188,173,69,0,141,139,114,204,87,119,62,186,206,190,39,224,19,149,229,249,0,156,191,152,164,243, 66,194,59,116,236,215,204,100,122,166,9,120,59,238,134,189,5,128,249,227,182,251,170,138,66,45,47,61,236,156,138,14, 112,162,61,70,79,255,48,0,107,74,242,120,160,198,207,198,181,171,8,191,255,245,212,79,157,3,29,64,109,220,13,123, 250,60,147,198,77,235,74,67,111,238,122,200,217,179,255,75,174,141,165,217,251,220,102,42,253,249,164,167,102,248,161,35, 78,171,219,201,241,95,98,188,187,231,17,231,149,3,110,245,143,29,241,70,160,153,162,250,230,64,112,251,123,169,191,135, 199,212,211,225,79,85,81,125,179,122,177,229,136,202,102,61,213,211,63,164,70,199,211,74,41,165,78,158,142,169,154,157, 31,169,134,183,190,80,137,145,113,21,220,190,63,93,84,223,28,144,185,254,173,47,191,240,228,134,77,163,227,105,237,208, 177,179,0,24,134,206,103,199,207,115,216,61,71,123,247,95,60,190,229,110,86,46,207,229,243,239,123,25,25,77,81,186, 98,9,37,43,150,202,83,209,63,39,4,80,87,85,225,211,78,180,199,0,176,76,157,75,151,199,72,94,77,97,91,6, 85,21,62,0,174,254,147,198,48,116,114,28,139,206,223,135,8,173,46,16,82,136,58,29,8,6,203,150,19,189,152,196, 48,36,166,105,96,89,6,150,105,16,10,20,176,123,199,70,148,82,28,60,218,129,99,91,8,161,145,184,50,201,234,226, 60,60,165,130,215,69,68,8,13,67,215,49,141,185,182,76,131,189,207,214,98,234,146,195,95,69,233,187,52,74,142,99, 34,132,192,177,76,52,52,52,64,0,93,93,177,203,132,2,5,24,134,156,99,97,232,44,190,221,102,32,57,198,153,222, 4,109,209,65,28,219,196,177,45,114,28,147,242,194,101,196,6,175,33,164,232,18,64,228,220,133,132,183,101,125,25,186, 46,209,117,137,97,232,104,66,240,115,247,32,167,123,147,72,41,177,109,99,1,164,210,159,71,247,31,67,94,54,235,69, 4,208,250,241,145,51,153,13,107,87,177,254,174,149,232,82,162,75,65,238,34,135,221,79,221,75,195,99,213,228,56,38, 150,101,98,219,38,107,138,239,164,204,151,203,129,214,72,70,41,213,42,226,110,184,111,34,149,105,218,247,193,55,83,175, 63,191,153,80,192,135,148,2,41,181,5,191,27,243,186,4,10,151,240,68,109,41,175,125,248,237,244,68,42,211,20,119, 195,125,55,89,121,107,141,191,250,141,134,7,237,104,108,152,104,108,152,196,149,73,108,123,238,231,202,210,101,148,228,47, 166,233,224,201,105,183,173,231,236,204,191,179,181,113,55,236,221,18,166,59,110,179,247,237,218,113,191,93,85,225,211,202, 11,151,162,105,26,241,196,40,191,245,143,120,239,124,242,93,102,124,114,186,41,235,121,55,135,233,255,226,44,165,168,83, 74,5,1,164,148,93,179,179,217,136,82,234,150,56,255,7,102,247,76,148,162,219,138,97,0,0,0,0,73,69,78,68, 174,66,96,130, }; const unsigned char Question2x[2231] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,8,110,73,68,65,84,88,133,197,151,123,112,85, 213,21,198,127,123,159,115,110,110,110,222,185,151,32,132,71,94,4,18,2,17,5,5,34,5,68,10,162,40,214,226,76, 167,117,168,118,172,163,51,58,99,103,180,211,135,109,28,43,125,77,255,104,203,216,86,29,41,118,170,69,198,231,12,161, 169,160,17,90,1,141,65,30,1,204,131,36,74,66,66,114,243,188,175,220,220,179,119,255,56,231,222,36,213,25,105,167, 51,238,153,53,231,220,57,119,175,245,157,111,125,107,173,179,225,75,94,226,74,255,184,110,93,173,217,145,97,173,17,136, 237,2,177,70,67,0,200,113,31,143,8,24,16,232,35,54,122,95,113,120,226,72,67,67,109,226,255,2,160,104,91,109, 174,24,79,251,49,130,251,202,230,205,224,198,21,165,89,43,170,230,138,171,2,89,248,179,211,1,24,28,141,210,27,28, 163,177,249,162,62,244,65,251,88,107,231,101,208,60,171,211,198,127,214,249,122,237,240,255,12,160,104,243,206,135,165,33, 158,220,92,179,40,253,254,175,175,180,202,231,5,174,136,179,182,79,131,60,243,202,241,137,253,135,207,70,149,150,143,119, 214,125,255,119,255,21,128,162,117,181,94,237,243,254,117,113,233,204,77,79,62,248,213,140,202,226,2,16,142,227,127,157, 252,132,19,31,95,34,56,26,97,112,36,134,16,16,200,77,199,159,147,193,178,242,89,172,94,58,151,146,57,249,0,124, 220,217,207,227,79,191,21,62,221,214,91,79,56,250,205,206,134,218,216,23,2,88,188,189,214,19,14,167,189,191,109,125, 85,197,79,238,223,224,73,247,88,180,126,26,228,185,55,26,105,60,219,141,52,36,134,148,8,33,144,82,32,16,41,47, 90,107,180,214,44,175,40,100,199,45,87,83,58,39,159,88,60,193,83,207,190,29,127,229,208,233,115,62,95,236,186,230, 125,181,241,169,241,140,233,225,181,200,44,62,246,234,182,27,171,86,238,124,104,83,154,101,26,188,222,112,150,39,158,123, 155,75,3,33,76,211,192,154,98,166,97,96,154,6,134,41,49,12,137,105,24,72,67,114,41,24,226,173,227,237,100,249, 210,168,44,158,193,141,43,74,141,190,161,112,222,201,150,129,107,134,91,14,238,133,39,62,31,64,241,22,239,163,171,174, 46,186,247,55,143,220,146,110,24,146,223,239,61,202,158,253,31,97,24,6,166,105,98,89,110,112,203,249,109,154,198,164, 73,3,195,101,199,48,36,0,141,231,123,8,69,226,92,91,49,155,53,203,138,205,51,237,125,115,67,217,251,227,67,45, 7,223,251,76,10,10,239,216,233,207,212,86,203,155,191,253,118,254,188,153,185,188,84,127,146,231,222,248,16,211,50,167, 188,173,100,105,217,12,150,148,20,80,81,20,160,32,207,71,110,86,58,227,241,4,125,131,97,154,90,250,168,63,222,65, 40,26,199,86,10,219,86,36,108,197,221,155,151,114,231,250,10,46,94,30,101,235,195,187,7,71,137,151,119,191,246,195, 224,52,6,252,165,55,237,186,231,246,229,215,223,188,122,161,60,115,161,143,159,239,57,140,105,24,88,46,0,203,114,238, 127,253,192,87,88,52,223,207,140,92,31,62,175,7,195,144,164,121,76,242,178,188,44,154,159,207,170,170,217,156,106,239, 39,22,183,29,157,0,167,218,251,168,46,155,73,73,97,30,19,182,242,156,56,221,93,48,212,114,240,77,0,9,176,120, 93,109,166,101,202,187,238,185,109,133,161,209,60,189,239,56,82,200,105,20,59,64,76,132,16,8,225,16,23,79,40,226, 9,133,148,18,233,10,51,63,203,203,246,245,11,177,44,19,143,101,98,89,38,134,52,216,189,255,35,52,112,247,150,107, 12,211,52,238,90,188,174,54,19,192,4,136,248,188,91,214,94,93,44,243,179,211,57,213,214,75,203,39,65,60,30,115, 138,232,220,52,152,6,9,91,113,252,124,63,239,53,247,210,59,20,193,16,130,13,203,231,115,123,77,105,10,92,229,124, 63,30,203,36,33,109,92,172,116,116,15,115,174,115,128,202,162,0,107,175,45,145,7,143,182,110,1,94,150,142,246,245, 142,155,174,91,224,67,192,145,143,186,28,49,25,78,222,13,55,247,73,48,191,120,233,4,175,253,243,2,3,163,227,164, 121,44,44,143,197,217,174,65,180,214,41,49,75,73,138,177,169,44,190,223,220,13,192,198,149,229,62,33,197,142,20,3, 104,150,85,149,205,4,160,245,147,224,52,53,155,198,100,42,44,211,36,52,110,99,89,166,11,78,34,165,96,205,146,194, 84,15,208,90,115,177,63,140,101,25,174,107,141,214,160,148,230,194,165,33,0,42,75,10,208,90,47,155,4,32,240,23, 228,103,2,78,95,151,110,240,169,230,0,145,147,61,192,181,154,197,87,177,170,114,102,42,184,173,20,239,158,238,195,50, 13,208,78,115,82,74,99,24,146,145,208,56,8,193,140,220,12,52,218,63,149,1,242,220,193,50,22,137,187,162,18,147, 64,164,147,18,195,109,60,201,210,92,187,116,22,107,22,79,9,110,219,28,104,236,166,103,48,138,105,24,78,96,37,49, 108,199,79,36,230,12,200,156,204,180,84,253,203,100,55,24,26,141,186,15,189,72,33,166,155,148,24,82,76,99,163,186, 56,159,213,139,2,40,165,80,74,97,219,54,117,31,94,226,227,238,49,183,59,78,111,76,82,10,178,51,189,0,140,132, 199,83,45,72,2,8,77,176,127,40,12,64,32,207,135,16,56,138,150,142,73,41,16,46,43,73,135,215,47,244,167,130, 43,165,56,214,50,68,87,127,212,101,202,1,156,100,82,184,47,146,159,237,0,8,14,71,16,16,156,4,32,228,137,230, 11,151,1,88,56,47,224,212,185,16,8,64,32,220,242,34,85,102,82,8,178,211,141,20,245,74,41,218,250,34,41,134, 164,16,8,145,188,58,123,17,130,146,217,121,0,156,235,236,71,72,121,34,165,1,173,245,158,67,199,219,214,221,177,190, 210,87,179,116,46,7,142,182,77,246,104,145,188,76,25,156,66,240,135,250,14,210,60,22,30,143,133,199,99,162,52,169, 6,229,226,159,178,156,221,203,23,205,2,224,173,99,173,17,101,171,61,41,0,190,72,172,238,72,211,5,53,60,22,163, 178,164,128,5,243,252,116,245,142,144,20,104,242,77,209,201,178,210,236,88,59,39,53,146,1,94,62,214,143,82,202,97, 36,185,7,141,118,157,20,205,202,97,193,156,124,70,67,227,188,243,126,171,242,69,98,117,169,20,52,55,212,134,18,9, 181,247,47,117,77,182,0,238,189,117,25,66,8,215,153,83,199,201,123,165,52,202,86,88,6,88,6,152,210,177,248,68, 130,137,132,77,194,86,40,91,57,255,83,26,173,28,224,119,173,175,0,1,127,251,199,73,219,182,213,222,230,134,218,208, 100,21,0,241,132,245,216,238,215,62,24,238,238,31,99,209,124,63,223,216,88,229,4,87,78,142,237,228,213,157,112,83, 5,168,148,34,62,49,193,196,132,77,34,97,147,176,109,108,219,78,61,219,90,83,70,105,97,46,125,193,16,127,218,119, 108,56,22,183,30,75,198,77,77,195,209,246,250,104,78,217,6,221,209,51,92,179,185,166,220,170,44,10,16,142,77,208, 222,61,228,40,90,72,167,34,132,147,209,107,74,115,177,181,38,97,59,160,62,104,27,38,97,43,7,128,203,196,68,194, 230,134,37,133,108,93,93,74,194,86,252,96,87,125,164,173,171,255,169,174,3,143,30,250,15,137,37,151,22,165,183,254, 234,245,237,155,170,55,253,244,187,27,210,132,16,28,106,236,96,239,161,115,72,41,221,233,150,252,24,113,155,147,91,102, 90,131,210,14,253,9,55,5,183,173,46,225,134,37,133,104,96,231,243,13,227,47,214,53,213,183,189,249,232,54,16,250, 51,12,56,235,9,102,87,223,240,234,201,243,3,91,7,70,162,129,85,75,231,25,11,230,250,169,46,43,32,56,26,165, 111,40,226,64,118,183,39,243,60,245,227,35,97,219,44,40,204,229,91,27,43,168,42,14,48,62,97,243,203,23,14,199, 95,172,107,58,147,150,22,217,220,127,118,189,61,189,62,62,103,205,89,245,72,186,149,31,120,169,186,124,206,198,167,30, 186,217,87,234,126,229,94,188,60,202,169,246,126,90,187,135,24,11,79,48,22,139,35,133,32,39,211,75,142,47,141,178, 194,92,170,138,253,204,14,56,115,165,227,210,48,63,218,245,247,104,83,243,133,119,123,143,189,112,95,116,176,45,8,68, 191,16,0,224,3,178,11,215,126,239,65,111,118,224,145,59,55,44,243,126,231,107,43,204,249,87,229,94,209,81,234,211, 203,163,60,255,70,99,226,229,3,31,142,71,131,93,207,116,31,253,227,110,96,204,181,33,64,125,17,128,52,32,11,200, 74,47,40,157,237,175,220,246,128,149,225,223,86,85,58,75,108,94,83,153,126,109,69,161,152,145,231,35,39,195,11,2, 70,67,227,12,140,68,104,58,223,163,235,14,55,199,206,180,246,232,216,88,79,125,240,212,171,127,30,31,238,233,117,3, 135,128,65,32,124,37,12,128,83,162,25,64,54,144,97,89,190,172,236,242,141,43,125,5,11,54,90,233,217,213,96,228, 104,33,125,142,19,21,69,219,163,241,240,208,153,72,223,249,119,70,219,222,105,74,36,98,33,28,186,67,192,176,11,226, 51,231,197,43,61,156,26,128,5,120,93,118,188,56,93,212,114,129,42,192,6,226,174,197,128,113,247,254,138,14,169,95, 218,250,55,61,135,185,234,249,164,187,3,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Warning1x[603] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,16,0,0,0,16,8,6,0,0,0,31,243,255, 97,0,0,0,6,98,75,71,68,0,255,0,255,0,255,160,189,167,147,0,0,0,9,112,72,89,115,0,0,11,19,0, 0,11,19,1,0,154,156,24,0,0,0,7,116,73,77,69,7,214,2,16,14,39,45,183,238,146,119,0,0,1,232,73, 68,65,84,56,203,149,147,193,74,27,97,20,133,191,59,153,206,52,137,51,131,16,153,74,237,70,67,196,32,134,65,74, 154,48,4,130,72,99,131,116,23,186,16,34,93,116,231,48,27,241,9,92,27,116,101,192,66,192,69,73,86,5,173,175, 80,8,62,128,80,92,4,10,133,22,92,212,64,73,49,127,55,214,18,200,180,246,192,189,139,203,225,59,103,115,133,8, 133,240,200,128,183,0,3,120,221,128,47,227,124,122,20,192,132,163,121,120,14,112,1,71,64,117,156,79,139,72,247,82, 176,90,88,88,208,158,164,82,90,10,86,67,240,238,13,48,97,47,13,122,98,119,151,76,179,73,26,116,19,246,238,5, 8,161,56,5,197,108,185,44,122,62,143,158,207,147,45,151,101,10,138,33,20,249,151,118,160,123,2,195,94,167,163,60, 207,83,158,231,169,94,167,163,78,96,184,3,221,191,54,8,97,197,133,165,140,239,139,225,251,56,142,131,227,56,24,190, 79,198,247,197,133,165,16,86,34,1,38,236,103,193,72,4,1,162,105,88,150,133,101,89,136,166,145,8,2,178,96,152, 176,63,22,16,194,250,52,164,231,10,5,140,82,9,17,193,182,109,108,219,70,68,48,74,37,230,10,5,166,33,29,194, 250,8,32,4,49,160,177,120,155,174,233,58,34,242,167,129,8,154,174,147,8,2,22,193,48,160,17,130,192,237,10,225, 213,44,180,94,44,47,27,147,103,103,16,139,161,148,162,223,239,3,144,76,38,17,17,184,185,225,106,109,141,15,231,231, 131,75,168,55,224,157,132,16,123,12,87,79,193,154,63,62,230,97,181,138,82,10,165,20,181,90,13,128,118,187,141,136, 32,34,252,56,61,229,98,99,131,46,124,255,12,147,154,192,102,28,204,153,92,142,120,165,114,103,20,17,92,215,197,117, 221,145,91,188,82,97,38,151,35,14,166,192,166,108,195,215,151,144,154,61,56,96,162,94,191,75,255,61,192,8,64,68, 184,110,181,184,220,218,226,61,124,147,67,24,62,3,121,192,255,233,39,240,17,148,254,9,14,7,240,102,34,226,47,162, 116,13,195,30,52,127,1,151,222,125,8,28,180,225,19,0,0,0,0,73,69,78,68,174,66,96,130, }; const unsigned char Warning2x[1391] = { 137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,0,32,0,0,0,32,8,6,0,0,0,115,122,122, 244,0,0,0,4,115,66,73,84,8,8,8,8,124,8,100,136,0,0,5,38,73,68,65,84,88,133,229,151,91,104,84, 71,24,128,191,153,115,206,238,217,139,187,49,137,171,89,27,147,38,235,221,136,203,170,136,151,120,201,130,151,128,196,10, 86,68,163,21,31,52,144,82,21,37,245,130,90,91,233,131,136,125,242,197,198,88,106,31,242,34,141,32,38,18,163,162, 96,144,32,68,37,17,188,34,102,19,132,218,205,198,102,147,120,206,233,67,146,37,38,70,155,139,79,253,97,152,97,102, 254,255,255,254,51,255,204,207,129,255,187,40,35,81,46,7,101,38,40,215,193,28,174,13,57,92,197,95,97,111,59,252, 157,9,177,50,56,62,92,59,98,56,74,101,144,111,79,73,249,51,180,105,147,130,97,80,119,225,66,87,60,26,221,246, 13,252,241,217,1,202,65,105,23,162,113,110,113,113,182,250,224,129,16,170,74,60,45,205,186,119,254,124,115,20,190,252, 22,58,134,98,111,200,71,208,6,133,41,193,96,166,91,81,68,172,166,134,88,117,53,222,228,100,225,9,4,82,220,80, 52,84,123,67,2,40,7,135,162,40,63,79,89,181,74,109,189,116,9,153,154,10,169,169,196,42,43,153,22,14,219,164, 16,199,206,65,210,103,3,248,7,138,211,22,47,30,171,181,180,208,241,248,49,250,129,3,56,142,29,35,222,208,128,222, 209,129,47,39,199,46,224,251,207,2,112,1,198,42,186,126,56,176,124,185,214,122,249,50,202,172,89,104,249,249,216,194, 97,212,185,115,137,93,189,74,246,226,197,54,169,170,223,149,66,250,168,3,116,194,161,244,188,60,187,249,240,33,93,145, 8,250,254,253,8,217,173,238,40,41,161,243,213,43,148,166,38,252,161,144,144,112,98,84,1,74,33,221,238,245,22,103, 206,155,167,197,170,170,208,150,46,69,91,184,16,33,4,66,8,180,96,16,219,234,213,196,110,220,32,35,24,212,164,195, 177,233,28,228,140,26,128,132,19,153,43,87,138,206,59,119,48,98,49,244,125,251,16,162,251,6,247,246,206,253,251,49, 98,49,204,198,70,50,230,205,51,37,156,26,21,128,179,48,203,49,126,252,38,255,148,41,106,219,245,235,216,10,10,80, 167,79,199,48,12,90,91,91,137,70,163,152,166,137,146,145,129,99,203,22,222,214,214,226,15,4,84,213,235,93,81,10, 43,70,12,160,194,169,236,252,124,43,94,83,131,101,89,56,118,239,6,32,18,137,16,12,6,9,6,131,68,34,17,132, 16,56,139,139,177,20,133,174,123,247,200,154,63,31,21,78,91,159,120,236,62,10,80,6,185,238,172,172,188,212,148,20, 229,109,109,45,246,173,91,145,126,63,66,8,92,46,87,98,159,203,229,66,8,129,76,73,193,85,84,68,251,253,251,164, 38,39,75,155,207,55,173,12,190,30,22,128,5,66,8,241,203,212,53,107,120,91,85,133,112,187,209,119,238,76,156,121, 127,0,232,206,7,231,142,29,200,113,227,136,215,213,145,29,10,169,18,78,150,131,109,200,0,231,225,171,164,217,179,115, 220,166,41,219,235,235,177,239,218,133,76,74,74,56,114,56,28,40,138,130,162,40,232,186,158,184,17,210,233,196,181,119, 47,29,79,158,224,149,82,184,38,77,242,189,133,93,67,2,56,10,170,84,148,147,83,194,97,217,118,229,10,210,239,71, 47,44,76,56,73,100,190,211,137,211,233,124,111,94,8,129,115,195,6,180,169,83,105,175,171,35,43,39,71,83,164,252, 225,119,240,252,103,128,12,216,225,91,176,96,162,253,245,107,209,241,244,41,142,61,123,144,186,158,136,190,183,247,120,60, 120,60,158,1,96,82,85,241,28,58,68,87,115,51,142,104,20,111,86,150,110,12,242,68,15,0,248,13,92,138,174,255, 148,149,155,171,197,42,43,81,103,204,64,47,40,24,224,92,8,49,224,11,244,93,115,132,195,216,23,45,34,94,95,79, 230,228,201,54,161,105,123,206,195,196,79,2,152,176,119,98,110,238,24,217,216,72,87,75,11,206,146,18,144,114,128,3, 128,138,138,10,42,42,42,6,28,65,111,75,58,114,4,35,22,67,109,106,98,92,32,128,5,63,126,20,160,20,198,217, 188,222,146,140,80,72,139,85,87,163,45,90,132,182,100,201,7,157,11,33,216,182,109,27,133,61,185,209,119,189,183,217, 231,204,193,181,110,29,29,143,30,49,209,239,183,73,93,47,44,131,153,131,2,40,112,120,82,94,158,106,222,189,139,209, 214,134,179,164,100,208,232,132,16,104,154,134,236,41,72,253,215,122,231,146,14,30,196,178,44,196,139,23,164,5,2,38, 253,158,232,4,64,41,100,217,124,190,162,180,236,108,173,237,214,45,236,107,215,162,229,228,12,26,189,16,130,242,242,114, 46,94,188,56,168,115,33,4,182,204,76,60,219,183,211,249,236,25,19,188,94,85,115,187,195,101,144,219,235,87,237,19, 253,241,204,101,203,172,174,219,183,49,227,113,244,245,235,161,181,21,171,199,24,66,188,55,78,180,110,111,88,125,250,254, 123,220,27,55,18,61,115,6,243,249,115,252,233,233,214,203,134,134,147,192,252,190,0,210,130,124,95,118,182,26,187,118, 13,128,232,150,45,253,243,101,196,98,188,121,67,82,122,186,242,28,66,71,65,63,10,241,94,0,231,59,104,142,220,188, 57,230,139,205,155,165,212,52,176,44,44,195,0,211,196,50,140,238,177,97,96,153,102,119,223,111,60,96,173,255,156,105, 98,198,227,52,191,124,105,89,240,215,209,158,34,213,91,169,92,69,176,34,4,103,37,248,70,61,244,62,98,194,235,251, 176,243,52,92,2,186,250,150,202,36,96,236,52,152,160,128,110,246,201,143,145,138,132,119,128,48,32,222,8,77,64,11, 208,14,3,107,181,2,232,128,157,17,252,182,125,64,76,160,11,232,236,105,214,40,218,30,153,252,11,112,11,162,158,225, 77,47,180,0,0,0,0,73,69,78,68,174,66,96,130, }; } } ares-126/hiro/resource/resource.hpp000066400000000000000000000166621415063341600174640ustar00rootroot00000000000000namespace Icon { namespace Action { extern const unsigned char Add1x[323]; extern const unsigned char Add2x[601]; extern const unsigned char Attach1x[649]; extern const unsigned char Attach2x[1747]; extern const unsigned char Bookmark1x[686]; extern const unsigned char Bookmark2x[1532]; extern const unsigned char Close1x[586]; extern const unsigned char Close2x[2045]; extern const unsigned char FullScreen1x[650]; extern const unsigned char FullScreen2x[1256]; extern const unsigned char Mute1x[632]; extern const unsigned char Mute2x[1789]; extern const unsigned char NewFile1x[477]; extern const unsigned char NewFile2x[1008]; extern const unsigned char NewFolder1x[635]; extern const unsigned char NewFolder2x[1399]; extern const unsigned char Open1x[672]; extern const unsigned char Open2x[1550]; extern const unsigned char Properties1x[464]; extern const unsigned char Properties2x[1115]; extern const unsigned char Quit1x[799]; extern const unsigned char Quit2x[1725]; extern const unsigned char Refresh1x[912]; extern const unsigned char Refresh2x[2024]; extern const unsigned char Remove1x[247]; extern const unsigned char Remove2x[317]; extern const unsigned char Save1x[911]; extern const unsigned char Save2x[1971]; extern const unsigned char Search1x[935]; extern const unsigned char Search2x[2215]; extern const unsigned char Settings1x[611]; extern const unsigned char Settings2x[2129]; extern const unsigned char Stop1x[820]; extern const unsigned char Stop2x[1927]; } namespace Application { extern const unsigned char Browser1x[928]; extern const unsigned char Browser2x[2251]; extern const unsigned char Calculator1x[686]; extern const unsigned char Calculator2x[1382]; extern const unsigned char Calendar1x[603]; extern const unsigned char Calendar2x[1298]; extern const unsigned char Chat1x[422]; extern const unsigned char Chat2x[783]; extern const unsigned char FileManager1x[378]; extern const unsigned char FileManager2x[667]; extern const unsigned char Mail1x[550]; extern const unsigned char Mail2x[1426]; extern const unsigned char Monitor1x[611]; extern const unsigned char Monitor2x[1886]; extern const unsigned char Terminal1x[668]; extern const unsigned char Terminal2x[1488]; extern const unsigned char TextEditor1x[574]; extern const unsigned char TextEditor2x[1523]; } namespace Device { extern const unsigned char Clock1x[897]; extern const unsigned char Clock2x[2399]; extern const unsigned char Display1x[662]; extern const unsigned char Display2x[1596]; extern const unsigned char Joypad1x[812]; extern const unsigned char Joypad2x[1470]; extern const unsigned char Keyboard1x[587]; extern const unsigned char Keyboard2x[1110]; extern const unsigned char Microphone1x[703]; extern const unsigned char Microphone2x[2105]; extern const unsigned char Mouse1x[720]; extern const unsigned char Mouse2x[1695]; extern const unsigned char Network1x[408]; extern const unsigned char Network2x[1293]; extern const unsigned char Optical1x[720]; extern const unsigned char Optical2x[1338]; extern const unsigned char Printer1x[481]; extern const unsigned char Printer2x[917]; extern const unsigned char Speaker1x[592]; extern const unsigned char Speaker2x[1854]; extern const unsigned char Storage1x[603]; extern const unsigned char Storage2x[1155]; } namespace Edit { extern const unsigned char Clear1x[773]; extern const unsigned char Clear2x[1682]; extern const unsigned char Copy1x[498]; extern const unsigned char Copy2x[723]; extern const unsigned char Cut1x[807]; extern const unsigned char Cut2x[2087]; extern const unsigned char Delete1x[680]; extern const unsigned char Delete2x[2049]; extern const unsigned char Find1x[617]; extern const unsigned char Find2x[1636]; extern const unsigned char Paste1x[561]; extern const unsigned char Paste2x[1027]; extern const unsigned char Redo1x[591]; extern const unsigned char Redo2x[1502]; extern const unsigned char Replace1x[776]; extern const unsigned char Replace2x[2104]; extern const unsigned char Undo1x[650]; extern const unsigned char Undo2x[1601]; } namespace Emblem { extern const unsigned char Archive1x[540]; extern const unsigned char Archive2x[1067]; extern const unsigned char Audio1x[688]; extern const unsigned char Audio2x[1486]; extern const unsigned char Binary1x[560]; extern const unsigned char Binary2x[1675]; extern const unsigned char File1x[741]; extern const unsigned char File2x[1342]; extern const unsigned char Folder1x[581]; extern const unsigned char Folder2x[1176]; extern const unsigned char FolderOpen1x[625]; extern const unsigned char FolderOpen2x[1184]; extern const unsigned char FolderTemplate1x[429]; extern const unsigned char FolderTemplate2x[772]; extern const unsigned char Font1x[627]; extern const unsigned char Font2x[1121]; extern const unsigned char Image1x[558]; extern const unsigned char Image2x[1163]; extern const unsigned char Markup1x[709]; extern const unsigned char Markup2x[1759]; extern const unsigned char Program1x[609]; extern const unsigned char Program2x[1490]; extern const unsigned char Script1x[516]; extern const unsigned char Script2x[1416]; extern const unsigned char Text1x[333]; extern const unsigned char Text2x[744]; extern const unsigned char Video1x[592]; extern const unsigned char Video2x[1797]; } namespace Go { extern const unsigned char Down1x[683]; extern const unsigned char Down2x[1187]; extern const unsigned char Home1x[606]; extern const unsigned char Home2x[1774]; extern const unsigned char Left1x[655]; extern const unsigned char Left2x[1200]; extern const unsigned char Right1x[676]; extern const unsigned char Right2x[1219]; extern const unsigned char Up1x[652]; extern const unsigned char Up2x[1193]; } namespace Media { extern const unsigned char Back1x[770]; extern const unsigned char Back2x[1236]; extern const unsigned char Eject1x[628]; extern const unsigned char Eject2x[987]; extern const unsigned char Flash1x[607]; extern const unsigned char Flash2x[1323]; extern const unsigned char Floppy1x[561]; extern const unsigned char Floppy2x[890]; extern const unsigned char Next1x[771]; extern const unsigned char Next2x[1225]; extern const unsigned char Optical1x[931]; extern const unsigned char Optical2x[2288]; extern const unsigned char Pause1x[464]; extern const unsigned char Pause2x[481]; extern const unsigned char Play1x[660]; extern const unsigned char Play2x[1028]; extern const unsigned char Record1x[653]; extern const unsigned char Record2x[1266]; extern const unsigned char Rewind1x[764]; extern const unsigned char Rewind2x[1074]; extern const unsigned char Skip1x[782]; extern const unsigned char Skip2x[1205]; extern const unsigned char Stop1x[429]; extern const unsigned char Stop2x[571]; } namespace Place { extern const unsigned char Bookmarks1x[753]; extern const unsigned char Bookmarks2x[1738]; extern const unsigned char Desktop1x[722]; extern const unsigned char Desktop2x[910]; extern const unsigned char Home1x[679]; extern const unsigned char Home2x[1416]; extern const unsigned char Server1x[642]; extern const unsigned char Server2x[847]; extern const unsigned char Settings1x[629]; extern const unsigned char Settings2x[2240]; extern const unsigned char Share1x[697]; extern const unsigned char Share2x[1446]; } namespace Prompt { extern const unsigned char Error1x[653]; extern const unsigned char Error2x[1645]; extern const unsigned char Information1x[863]; extern const unsigned char Information2x[1910]; extern const unsigned char Question1x[932]; extern const unsigned char Question2x[2231]; extern const unsigned char Warning1x[603]; extern const unsigned char Warning2x[1391]; } } ares-126/hiro/windows/000077500000000000000000000000001415063341600147545ustar00rootroot00000000000000ares-126/hiro/windows/action/000077500000000000000000000000001415063341600162315ustar00rootroot00000000000000ares-126/hiro/windows/action/action.cpp000066400000000000000000000015721415063341600202170ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { auto pAction::construct() -> void { } auto pAction::destruct() -> void { } auto pAction::setEnabled(bool enabled) -> void { _synchronize(); } auto pAction::setVisible(bool visible) -> void { _synchronize(); } auto pAction::_parentMenu() -> maybe { if(auto parent = self().parentMenu()) { if(auto self = parent->self()) return *self; } return nothing; } auto pAction::_parentMenuBar() -> maybe { if(auto parent = self().parentMenuBar(true)) { if(auto self = parent->self()) return *self; } return nothing; } auto pAction::_parentPopupMenu() -> maybe { if(auto parent = self().parentPopupMenu(true)) { if(auto self = parent->self()) return *self; } return nothing; } auto pAction::_synchronize() -> void { if(auto parent = _parentMenuBar()) parent->_update(); } } #endif ares-126/hiro/windows/action/action.hpp000066400000000000000000000006161415063341600202220ustar00rootroot00000000000000#if defined(Hiro_Action) namespace hiro { struct pAction : pObject { Declare(Action, Object) auto setEnabled(bool enabled) -> void override; auto setVisible(bool visible) -> void override; auto _parentMenu() -> maybe; auto _parentMenuBar() -> maybe; auto _parentPopupMenu() -> maybe; auto _synchronize() -> void; u32 position = 0; }; } #endif ares-126/hiro/windows/action/menu-check-item.cpp000066400000000000000000000010611415063341600217060ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) namespace hiro { auto pMenuCheckItem::construct() -> void { } auto pMenuCheckItem::destruct() -> void { } auto pMenuCheckItem::setChecked(bool checked) -> void { if(auto menu = _parentMenu()) { CheckMenuItem(menu->hmenu, position, MF_BYPOSITION | (checked ? MF_CHECKED : MF_UNCHECKED)); } } auto pMenuCheckItem::setText(const string& text) -> void { _synchronize(); } auto pMenuCheckItem::onToggle() -> void { state().checked = !state().checked; setChecked(state().checked); self().doToggle(); } } #endif ares-126/hiro/windows/action/menu-check-item.hpp000066400000000000000000000003661415063341600217220ustar00rootroot00000000000000#if defined(Hiro_MenuCheckItem) namespace hiro { struct pMenuCheckItem : pAction { Declare(MenuCheckItem, Action) auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; auto onToggle() -> void; }; } #endif ares-126/hiro/windows/action/menu-item.cpp000066400000000000000000000015131415063341600206350ustar00rootroot00000000000000#if defined(Hiro_MenuItem) namespace hiro { auto pMenuItem::construct() -> void { _createBitmap(); } auto pMenuItem::destruct() -> void { if(hbitmap) { DeleteObject(hbitmap); hbitmap = nullptr; } } auto pMenuItem::setIcon(const image& icon, bool force) -> void { _createBitmap(); _synchronize(); } auto pMenuItem::setText(const string& text) -> void { _synchronize(); } auto pMenuItem::onActivate() -> void { self().doActivate(); } auto pMenuItem::_createBitmap() -> void { if(hbitmap) { DeleteObject(hbitmap); hbitmap = nullptr; } if(auto icon = state().icon) { icon.alphaBlend(GetSysColor(COLOR_MENU)); //Windows does not alpha blend menu icons properly (leaves black outline) icon.scale(GetSystemMetrics(SM_CXMENUCHECK), GetSystemMetrics(SM_CYMENUCHECK)); hbitmap = CreateBitmap(icon); } } } #endif ares-126/hiro/windows/action/menu-item.hpp000066400000000000000000000004701415063341600206430ustar00rootroot00000000000000#if defined(Hiro_MenuItem) namespace hiro { struct pMenuItem : pAction { Declare(MenuItem, Action) auto setIcon(const image& icon, bool force = false) -> void; auto setText(const string& text) -> void; auto onActivate() -> void; auto _createBitmap() -> void; HBITMAP hbitmap = 0; }; } #endif ares-126/hiro/windows/action/menu-radio-item.cpp000066400000000000000000000033061415063341600217330ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) namespace hiro { auto pMenuRadioItem::construct() -> void { setGroup(state().group); } auto pMenuRadioItem::destruct() -> void { } auto pMenuRadioItem::setChecked() -> void { if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto menuRadioItem = dynamic_cast(object.data())) { if(auto self = menuRadioItem->self()) { if(auto menu = self->_parentMenu()) { //CheckMenuRadioItem takes: lo, hi, id; checking only id when lo <= id <= hi //hiro does not force IDs to be linear, so to uncheck id, we use: lo == hi == id + 1 (out of range) //to check id, we use: lo == hi == id (only ID, but in range) CheckMenuRadioItem( menu->hmenu, self->position, self->position, self->position + (position != self->position), MF_BYPOSITION ); } } } } } } } auto pMenuRadioItem::setGroup(sGroup group) -> void { bool first = true; if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto menuRadioItem = dynamic_cast(object.data())) { if(auto self = menuRadioItem->self()) { menuRadioItem->state.checked = first; first = false; } } } } } setChecked(); } auto pMenuRadioItem::setText(const string& text) -> void { _synchronize(); } auto pMenuRadioItem::onActivate() -> void { if(state().checked) return; self().setChecked(); self().doActivate(); } } #endif ares-126/hiro/windows/action/menu-radio-item.hpp000066400000000000000000000004341415063341600217370ustar00rootroot00000000000000#if defined(Hiro_MenuRadioItem) namespace hiro { struct pMenuRadioItem : pAction { Declare(MenuRadioItem, Action) auto setChecked() -> void; auto setGroup(sGroup group) -> void override; auto setText(const string& text) -> void; auto onActivate() -> void; }; } #endif ares-126/hiro/windows/action/menu-separator.cpp000066400000000000000000000002301415063341600216720ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { auto pMenuSeparator::construct() -> void { } auto pMenuSeparator::destruct() -> void { } } #endif ares-126/hiro/windows/action/menu-separator.hpp000066400000000000000000000002041415063341600217000ustar00rootroot00000000000000#if defined(Hiro_MenuSeparator) namespace hiro { struct pMenuSeparator : pAction { Declare(MenuSeparator, Action) }; } #endif ares-126/hiro/windows/action/menu.cpp000066400000000000000000000073301415063341600177040ustar00rootroot00000000000000#if defined(Hiro_Menu) namespace hiro { auto pMenu::construct() -> void { _createBitmap(); } auto pMenu::destruct() -> void { if(hbitmap) { DeleteObject(hbitmap); hbitmap = nullptr; } if(hmenu) { DestroyMenu(hmenu); hmenu = nullptr; } } auto pMenu::append(sAction action) -> void { _synchronize(); } auto pMenu::remove(sAction action) -> void { _synchronize(); } auto pMenu::setIcon(const image& icon, bool force) -> void { _createBitmap(); _synchronize(); } auto pMenu::setText(const string& text) -> void { _synchronize(); } auto pMenu::_createBitmap() -> void { if(hbitmap) { DeleteObject(hbitmap); hbitmap = 0; } if(auto icon = state().icon) { icon.alphaBlend(GetSysColor(COLOR_MENU)); //Windows does not alpha blend menu icons properly (leaves black outline) icon.scale(GetSystemMetrics(SM_CXMENUCHECK), GetSystemMetrics(SM_CYMENUCHECK)); hbitmap = CreateBitmap(icon); } } //Windows actions lack the ability to toggle visibility. //To support this, menus must be destroyed and recreated when toggling any action's visibility. auto pMenu::_update() -> void { if(hmenu) DestroyMenu(hmenu); hmenu = CreatePopupMenu(); MENUINFO mi{sizeof(MENUINFO)}; mi.fMask = MIM_STYLE; mi.dwStyle = MNS_NOTIFYBYPOS; //| MNS_MODELESS; SetMenuInfo(hmenu, &mi); u32 position = 0; for(auto& action : state().actions) { if(!action->self()) continue; action->self()->position = position; u32 enabled = action->enabled() ? 0 : MF_GRAYED; MENUITEMINFO mii{sizeof(MENUITEMINFO)}; mii.fMask = MIIM_DATA; mii.dwItemData = (ULONG_PTR)action.data(); if(auto menu = dynamic_cast(action.data())) { if(menu->visible()) { menu->self()->_update(); AppendMenu(hmenu, MF_STRING | MF_POPUP | enabled, (UINT_PTR)menu->self()->hmenu, utf16_t(menu->text())); if(auto bitmap = menu->self()->hbitmap) { //Windows XP and below displays MIIM_BITMAP + hbmpItem in its own column (separate from check/radio marks) //this causes too much spacing, so use a custom checkmark image instead mii.fMask |= MIIM_CHECKMARKS; mii.hbmpUnchecked = bitmap; } SetMenuItemInfo(hmenu, position++, true, &mii); } } #if defined(Hiro_MenuSeparator) else if(auto menuSeparator = dynamic_cast(action.data())) { if(menuSeparator->visible()) { AppendMenu(hmenu, MF_SEPARATOR | enabled, position, L""); SetMenuItemInfo(hmenu, position++, true, &mii); } } #endif #if defined(Hiro_MenuItem) else if(auto menuItem = dynamic_cast(action.data())) { if(menuItem->visible()) { AppendMenu(hmenu, MF_STRING | enabled, position, utf16_t(menuItem->text())); if(auto bitmap = menuItem->self()->hbitmap) { mii.fMask |= MIIM_CHECKMARKS; mii.hbmpUnchecked = bitmap; } SetMenuItemInfo(hmenu, position++, true, &mii); } } #endif #if defined(Hiro_MenuCheckItem) else if(auto menuCheckItem = dynamic_cast(action.data())) { if(menuCheckItem->visible()) { AppendMenu(hmenu, MF_STRING | enabled, position, utf16_t(menuCheckItem->text())); SetMenuItemInfo(hmenu, position++, true, &mii); if(menuCheckItem->checked()) menuCheckItem->setChecked(); } } #endif #if defined(Hiro_MenuRadioItem) else if(auto menuRadioItem = dynamic_cast(action.data())) { if(menuRadioItem->visible()) { AppendMenu(hmenu, MF_STRING | enabled, position, utf16_t(menuRadioItem->text())); SetMenuItemInfo(hmenu, position++, true, &mii); if(menuRadioItem->checked()) menuRadioItem->setChecked(); } } #endif } } } #endif ares-126/hiro/windows/action/menu.hpp000066400000000000000000000006111415063341600177040ustar00rootroot00000000000000#if defined(Hiro_Menu) namespace hiro { struct pMenu : pAction { Declare(Menu, Action) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setIcon(const image& icon, bool force = false) -> void; auto setText(const string& text) -> void; auto _createBitmap() -> void; auto _update() -> void; HMENU hmenu = 0; HBITMAP hbitmap = 0; }; } #endif ares-126/hiro/windows/application.cpp000066400000000000000000000131051415063341600177630ustar00rootroot00000000000000#if defined(Hiro_Application) namespace hiro { static auto Application_keyboardProc(HWND, UINT, WPARAM, LPARAM) -> bool; static auto Application_processDialogMessage(MSG&) -> void; static auto CALLBACK Window_windowProc(HWND, UINT, WPARAM, LPARAM) -> LRESULT; auto pApplication::exit() -> void { quit(); auto processID = GetCurrentProcessId(); auto handle = OpenProcess(SYNCHRONIZE | PROCESS_TERMINATE, true, processID); TerminateProcess(handle, 0); } auto pApplication::modal() -> bool { return state().modalCount > 0; } auto pApplication::run() -> void { while(!Application::state().quit) { if(Application::state().onMain) { //doMain() is responsible for sleeping the thread where practical Application::doMain(); if(Application::state().quit) break; } else { //avoid consuming 100% CPU thread usage usleep(20 * 1000); } //called after doMain(), in case doMain() calls Application::quit() processEvents(); } } auto pApplication::pendingEvents() -> bool { MSG msg; return PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE); } auto pApplication::processEvents() -> void { while(pendingEvents()) { MSG msg; if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { Application_processDialogMessage(msg); } } //process any deferred menu updates for(auto menu : pApplication::state().menuBarsToRebuild) { menu->_rebuild(); } pApplication::state().menuBarsToRebuild.reset(); } auto Application_processDialogMessage(MSG& msg) -> void { if(msg.message == WM_KEYDOWN || msg.message == WM_KEYUP || msg.message == WM_SYSKEYDOWN || msg.message == WM_SYSKEYUP) { if(Application_keyboardProc(msg.hwnd, msg.message, msg.wParam, msg.lParam)) { DispatchMessage(&msg); return; } } if(!IsDialogMessage(GetForegroundWindow(), &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } auto pApplication::quit() -> void { PostQuitMessage(0); } auto pApplication::setScreenSaver(bool screenSaver) -> void { } auto pApplication::initialize() -> void { CoInitialize(0); InitCommonControls(); WNDCLASS wc{}; #if defined(Hiro_Window) wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(2)); wc.hInstance = GetModuleHandle(0); wc.lpfnWndProc = Window_windowProc; wc.lpszClassName = L"hiroWindow"; wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); #endif #if defined(Hiro_PopupMenu) wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(2)); wc.hInstance = GetModuleHandle(0); wc.lpfnWndProc = Menu_windowProc; wc.lpszClassName = L"hiroPopupMenu"; wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); #endif #if defined(Hiro_Widget) wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hInstance = GetModuleHandle(0); wc.lpfnWndProc = ToolTip_windowProc; wc.lpszClassName = L"hiroToolTip"; wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); #endif #if defined(Hiro_Widget) wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hInstance = GetModuleHandle(0); wc.lpfnWndProc = Default_windowProc; wc.lpszClassName = L"hiroWidget"; wc.lpszMenuName = 0; wc.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&wc); #endif pKeyboard::initialize(); pWindow::initialize(); } auto pApplication::state() -> State& { static State state; return state; } static auto Application_keyboardProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> bool { if(msg != WM_KEYDOWN && msg != WM_SYSKEYDOWN && msg != WM_KEYUP && msg != WM_SYSKEYUP) return false; GUITHREADINFO info{sizeof(GUITHREADINFO)}; GetGUIThreadInfo(GetCurrentThreadId(), &info); auto object = (mObject*)GetWindowLongPtr(info.hwndFocus, GWLP_USERDATA); if(!object) return false; auto objectWindow = (mObject*)GetWindowLongPtr(GetAncestor(info.hwndFocus, GA_ROOT), GWLP_USERDATA); if(!objectWindow) return false; if(auto window = dynamic_cast(objectWindow)) { if(auto self = window->self()) { if(!self->_modalityDisabled()) { if(auto code = pKeyboard::_translate(wparam, lparam)) { if(msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN) { window->doKeyPress(code); } if(msg == WM_KEYUP || msg == WM_SYSKEYUP) { window->doKeyRelease(code); } } //TODO: does this really need to be hooked here? if(msg == WM_KEYDOWN && wparam == VK_ESCAPE && window->state.dismissable) { if(auto result = self->windowProc(self->hwnd, WM_CLOSE, wparam, lparam)) return result(); } } } } if(auto window = object->parentWindow(true)) { if(auto self = window->self()) { if(self->_modalityDisabled()) return false; } } if(msg == WM_KEYDOWN) { //TODO: does this really need to be hooked here? #if defined(Hiro_Widget) if(auto widget = dynamic_cast(object)) { if(auto self = widget->self()) { if(auto result = self->windowProc(self->hwnd, msg, wparam, lparam)) { return result(); } } } #endif } return false; } } #endif ares-126/hiro/windows/application.hpp000066400000000000000000000013111415063341600177640ustar00rootroot00000000000000#if defined(Hiro_Application) namespace hiro { struct pApplication { static auto exit() -> void; static auto modal() -> bool; static auto run() -> void; static auto pendingEvents() -> bool; static auto processEvents() -> void; static auto quit() -> void; static auto setScreenSaver(bool screenSaver) -> void; static auto initialize() -> void; struct State { vector menuBarsToRebuild; //deferred menu bars to update s32 modalCount = 0; //number of modal loops Timer modalTimer; //to run Application during modal events pToolTip* toolTip = nullptr; //active toolTip }; static auto state() -> State&; }; } #endif ares-126/hiro/windows/browser-window.cpp000066400000000000000000000063721415063341600204600ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { static auto CALLBACK BrowserWindowCallbackProc(HWND hwnd, UINT msg, LPARAM lparam, LPARAM lpdata) -> s32 { if(msg == BFFM_INITIALIZED) { if(lpdata) { auto state = (BrowserWindow::State*)lpdata; utf16_t wpath(string{state->path}.transform("/", "\\")); if(state->title) SetWindowText(hwnd, utf16_t(state->title)); SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(wchar_t*)wpath); } } return 0; } static auto BrowserWindow_fileDialog(bool save, BrowserWindow::State& state) -> string { string path = string{state.path}.replace("/", "\\"); string filters; for(auto& filter : state.filters) { auto part = filter.split("|", 1L); if(part.size() != 2) continue; filters.append(part[0], "\t", part[1].transform(":", ";"), "\t"); } utf16_t wfilters(filters); wchar_t wname[PATH_MAX + 1] = L""; utf16_t wpath(path); utf16_t wtitle(state.title); wchar_t* p = wfilters; while(*p != L'\0') { if(*p == L'\t') *p = L'\0'; p++; } if(path) { //clear COMDLG32 MRU (most recently used) file list //this is required in order for lpstrInitialDir to be honored in Windows 7 and above registry::remove("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\LastVisitedPidlMRU\\"); registry::remove("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ComDlg32\\OpenSavePidlMRU\\"); } OPENFILENAME ofn; memset(&ofn, 0, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = state.parent ? state.parent->self()->hwnd : 0; ofn.lpstrFilter = wfilters; ofn.lpstrInitialDir = wpath; ofn.lpstrFile = wname; ofn.lpstrTitle = wtitle; ofn.nMaxFile = PATH_MAX; ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; ofn.lpstrDefExt = L""; bool result = (save == false ? GetOpenFileName(&ofn) : GetSaveFileName(&ofn)); if(result == false) return ""; string name = (const char*)utf8_t(wname); name.transform("\\", "/"); return name; } auto pBrowserWindow::directory(BrowserWindow::State& state) -> string { wchar_t wname[PATH_MAX + 1] = L""; BROWSEINFO bi; bi.hwndOwner = state.parent ? state.parent->self()->hwnd : 0; bi.pidlRoot = NULL; bi.pszDisplayName = wname; bi.lpszTitle = L"\nChoose a directory:"; bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS; bi.lpfn = BrowserWindowCallbackProc; bi.lParam = (LPARAM)&state; bi.iImage = 0; bool result = false; LPITEMIDLIST pidl = SHBrowseForFolder(&bi); if(pidl) { if(SHGetPathFromIDList(pidl, wname)) { result = true; IMalloc *imalloc = 0; if(SUCCEEDED(SHGetMalloc(&imalloc))) { imalloc->Free(pidl); imalloc->Release(); } } } if(result == false) return ""; string name = (const char*)utf8_t(wname); if(!name) return ""; name.transform("\\", "/"); if(name.endsWith("/") == false) name.append("/"); return name; } auto pBrowserWindow::open(BrowserWindow::State& state) -> string { return BrowserWindow_fileDialog(0, state); } auto pBrowserWindow::save(BrowserWindow::State& state) -> string { return BrowserWindow_fileDialog(1, state); } } #endif ares-126/hiro/windows/browser-window.hpp000066400000000000000000000004171415063341600204570ustar00rootroot00000000000000#if defined(Hiro_BrowserWindow) namespace hiro { struct pBrowserWindow { static auto directory(BrowserWindow::State& state) -> string; static auto open(BrowserWindow::State& state) -> string; static auto save(BrowserWindow::State& state) -> string; }; } #endif ares-126/hiro/windows/desktop.cpp000066400000000000000000000005401415063341600171300ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { auto pDesktop::size() -> Size { return {GetSystemMetrics(SM_CXVIRTUALSCREEN), GetSystemMetrics(SM_CYVIRTUALSCREEN)}; } auto pDesktop::workspace() -> Geometry { RECT rc; SystemParametersInfo(SPI_GETWORKAREA, 0, &rc, 0); return {rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top}; } } #endif ares-126/hiro/windows/desktop.hpp000066400000000000000000000002221415063341600171320ustar00rootroot00000000000000#if defined(Hiro_Desktop) namespace hiro { struct pDesktop { static auto size() -> Size; static auto workspace() -> Geometry; }; } #endif ares-126/hiro/windows/font.cpp000066400000000000000000000020641415063341600164300ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { auto pFont::size(const Font& font, const string& text) -> Size { auto hfont = pFont::create(font); auto size = pFont::size(hfont, text); pFont::free(hfont); return size; } auto pFont::size(HFONT hfont, const string& text) -> Size { HDC hdc = GetDC(0); SelectObject(hdc, hfont); RECT rc = {0, 0, 0, 0}; DrawText(hdc, utf16_t(text), -1, &rc, DT_CALCRECT); ReleaseDC(0, hdc); return {rc.right, rc.bottom}; } auto pFont::family(const string& family) -> string { if(family == Font::Sans ) return "Tahoma"; if(family == Font::Serif) return "Georgia"; if(family == Font::Mono ) return "Lucida Console"; return family ? family : "Tahoma"; } auto pFont::create(const Font& font) -> HFONT { static f32 dpi = Monitor::dpi().x(); return CreateFont( -((font.size() ? font.size() : 8) * dpi / 72.0 + 0.5), 0, 0, 0, font.bold() ? FW_BOLD : FW_NORMAL, font.italic(), 0, 0, 0, 0, 0, 0, 0, utf16_t(family(font.family())) ); } auto pFont::free(HFONT hfont) -> void { DeleteObject(hfont); } } #endif ares-126/hiro/windows/font.hpp000066400000000000000000000005261415063341600164360ustar00rootroot00000000000000#if defined(Hiro_Font) namespace hiro { struct pFont { static auto size(const Font& font, const string& text) -> Size; static auto size(HFONT hfont, const string& text) -> Size; static auto family(const string& family) -> string; static auto create(const Font& font) -> HFONT; static auto free(HFONT hfont) -> void; }; } #endif ares-126/hiro/windows/group.cpp000066400000000000000000000002001415063341600166040ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { auto pGroup::construct() -> void { } auto pGroup::destruct() -> void { } } #endif ares-126/hiro/windows/group.hpp000066400000000000000000000001541415063341600166210ustar00rootroot00000000000000#if defined(Hiro_Group) namespace hiro { struct pGroup : pObject { Declare(Group, Object) }; } #endif ares-126/hiro/windows/header.hpp000066400000000000000000000033451415063341600167220ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include #include #include #include //MinGW/32-bit has painfully outdated platform headers ... #if !defined(Button_SetImageList) typedef struct { HIMAGELIST himl; RECT margin; UINT uAlign; } BUTTON_IMAGELIST, *PBUTTON_IMAGELIST; #define BUTTON_IMAGELIST_ALIGN_LEFT 0 #define BUTTON_IMAGELIST_ALIGN_RIGHT 1 #define BUTTON_IMAGELIST_ALIGN_TOP 2 #define BUTTON_IMAGELIST_ALIGN_BOTTOM 3 #define BUTTON_IMAGELIST_ALIGN_CENTER 4 #define BCM_FIRST 0x1600 #define BCM_SETIMAGELIST (BCM_FIRST+2) #define Button_SetImageList(hwnd, pbuttonImagelist) (WINBOOL)SNDMSG((hwnd),BCM_SETIMAGELIST,0,(LPARAM)(pbuttonImagelist)) #endif #if !defined(BP_PUSHBUTTON) #define BP_PUSHBUTTON 1 #endif #if !defined(PBS_NORMAL) #define PBS_NORMAL 1 #endif #if !defined(PBS_HOT) #define PBS_HOT 2 #endif #if !defined(PBS_PRESSED) #define PBS_PRESSED 3 #endif #if !defined(PBS_DISABLED) #define PBS_DISABLED 4 #endif #if !defined(PBS_DEFAULTED) #define PBS_DEFAULTED 5 #endif #if !defined(BP_CHECKBOX) #define BP_CHECKBOX 3 #endif #if !defined(CBS_UNCHECKEDNORMAL) #define CBS_UNCHECKEDNORMAL 1 #endif #if !defined(CBS_CHECKEDNORMAL) #define CBS_CHECKEDNORMAL 5 #endif #if !defined(LVCFMT_FIXED_WIDTH) #define LVCFMT_FIXED_WIDTH 0x0100 #endif #if !defined(TBS_TRANSPARENTBKGND) #define TBS_TRANSPARENTBKGND 0x1000 #endif #if !defined(TTP_STANDARD) #define TTP_STANDARD 1 #endif #if !defined(TTSS_NORMAL) #define TTSS_NORMAL 1 #endif ares-126/hiro/windows/hiro.Manifest000066400000000000000000000015241415063341600174070ustar00rootroot00000000000000 true/pm PerMonitorV2, PerMonitor ares-126/hiro/windows/hiro.rc000066400000000000000000000000251415063341600162400ustar00rootroot000000000000001 24 "hiro.Manifest" ares-126/hiro/windows/keyboard.cpp000066400000000000000000000063771415063341600172750ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { vector pKeyboard::keycodes; auto pKeyboard::poll() -> vector { vector result; for(auto& code : keycodes) result.append(pressed(code)); return result; } auto pKeyboard::pressed(u32 code) -> bool { u8 lo = code >> 0; u8 hi = code >> 8; if(lo && GetAsyncKeyState(lo) & 0x8000) return true; if(hi && GetAsyncKeyState(hi) & 0x8000) return true; return false; } auto pKeyboard::initialize() -> void { auto append = [](u32 lo, u32 hi = 0) { keycodes.append(lo << 0 | hi << 8); }; #define map(name, ...) if(key == name) { append(__VA_ARGS__); continue; } for(auto& key : Keyboard::keys) { #include //print("[hiro/windows] warning: unhandled key: ", key, "\n"); append(0); } #undef map } auto pKeyboard::_translate(u32 code, u32 flags) -> s32 { bool numLock = GetKeyState(VK_NUMLOCK); bool capsLock = GetKeyState(VK_CAPITAL); bool shifted = (GetAsyncKeyState(VK_LSHIFT) & 0x8000) || (GetAsyncKeyState(VK_RSHIFT) & 0x8000); bool pressed = GetAsyncKeyState(code) & 0x8000; bool extended = flags & (1 << 24); switch(code) { case VK_OEM_3: return !shifted ? '`' : '~'; case '1': return !shifted ? '1' : '!'; case '2': return !shifted ? '2' : '@'; case '3': return !shifted ? '3' : '#'; case '4': return !shifted ? '4' : '$'; case '5': return !shifted ? '5' : '%'; case '6': return !shifted ? '6' : '^'; case '7': return !shifted ? '7' : '&'; case '8': return !shifted ? '8' : '*'; case '9': return !shifted ? '9' : '('; case '0': return !shifted ? '0' : ')'; case VK_OEM_MINUS: return !shifted ? '-' : '_'; case VK_OEM_PLUS: return !shifted ? '=' : '+'; case VK_BACK: return '\b'; case VK_TAB: return '\t'; case VK_RETURN: return '\n'; case VK_SPACE: return ' '; case VK_OEM_4: return !shifted ? '[' : '{'; case VK_OEM_6: return !shifted ? ']' : '}'; case VK_OEM_5: return !shifted ? '\\' : '|'; case VK_OEM_1: return !shifted ? ';' : ':'; case VK_OEM_7: return !shifted ? '\'' : '\"'; case VK_OEM_COMMA: return !shifted ? ',' : '<'; case VK_OEM_PERIOD: return !shifted ? '.' : '>'; case VK_OEM_2: return !shifted ? '/' : '?'; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': if(capsLock) return !shifted ? code : code + 32; else return !shifted ? code + 32 : code; case VK_DIVIDE: return '/'; case VK_MULTIPLY: return '*'; case VK_SUBTRACT: return '-'; case VK_ADD: return '+'; case VK_DECIMAL: return '.'; case VK_NUMPAD1: return numLock ? '1' : 0; case VK_NUMPAD2: return numLock ? '2' : 0; case VK_NUMPAD3: return numLock ? '3' : 0; case VK_NUMPAD4: return numLock ? '4' : 0; case VK_NUMPAD5: return numLock ? '5' : 0; case VK_NUMPAD6: return numLock ? '6' : 0; case VK_NUMPAD7: return numLock ? '7' : 0; case VK_NUMPAD8: return numLock ? '8' : 0; case VK_NUMPAD9: return numLock ? '9' : 0; case VK_NUMPAD0: return numLock ? '0' : 0; } return 0; } } #endif ares-126/hiro/windows/keyboard.hpp000066400000000000000000000004351415063341600172670ustar00rootroot00000000000000#if defined(Hiro_Keyboard) namespace hiro { struct pKeyboard { static auto poll() -> vector; static auto pressed(u32 code) -> bool; static auto initialize() -> void; static auto _translate(u32 code, u32 flags) -> signed; static vector keycodes; }; } #endif ares-126/hiro/windows/menu-bar.cpp000066400000000000000000000043361415063341600171740ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { auto pMenuBar::construct() -> void { _update(); } auto pMenuBar::destruct() -> void { pApplication::state().menuBarsToRebuild.removeByValue(this); if(hmenu) { DestroyMenu(hmenu); hmenu = nullptr; } if(auto parent = _parent()) { SetMenu(parent->hwnd, nullptr); } } auto pMenuBar::append(sMenu) -> void { _update(); } auto pMenuBar::remove(sMenu) -> void { _update(); } auto pMenuBar::setEnabled(bool enabled) -> void { _update(); } auto pMenuBar::setFont(const Font& font) -> void { //unsupported } auto pMenuBar::setVisible(bool visible) -> void { if(auto parent = _parent()) { SetMenu(parent->hwnd, visible ? hmenu : nullptr); parent->setGeometry(parent->state().geometry); } } auto pMenuBar::_parent() -> maybe { if(auto parent = self().parentWindow(true)) { if(auto self = parent->self()) return *self; } return nothing; } auto pMenuBar::_rebuild() -> void { if(hmenu) DestroyMenu(hmenu); hmenu = CreateMenu(); MENUINFO mi{sizeof(MENUINFO)}; mi.fMask = MIM_STYLE; mi.dwStyle = MNS_NOTIFYBYPOS; //| MNS_MODELESS; SetMenuInfo(hmenu, &mi); u32 position = 0; #if defined(Hiro_Menu) for(auto& menu : state().menus) { u32 enabled = menu->enabled() ? 0 : MF_GRAYED; MENUITEMINFO mii{sizeof(MENUITEMINFO)}; mii.fMask = MIIM_DATA; mii.dwItemData = (ULONG_PTR)menu.data(); if(menu->visible()) { if(auto self = menu->self()) { self->_update(); AppendMenu(hmenu, MF_STRING | MF_POPUP | enabled, (UINT_PTR)self->hmenu, utf16_t(menu->text())); SetMenuItemInfo(hmenu, position++, true, &mii); } } } #endif if(auto parent = _parent()) { SetMenu(parent->hwnd, self().visible(true) ? hmenu : nullptr); parent->setGeometry(parent->state().geometry); } } auto pMenuBar::_update() -> void { //if there is no menu bar, build it immediately to ensure correct window geometry calculations if(auto parent = _parent()) { if(!GetMenu(parent->hwnd)) return _rebuild(); } //otherwise, defer the menu bar update for later to reduce flickering pApplication::state().menuBarsToRebuild.removeByValue(this); pApplication::state().menuBarsToRebuild.append(this); } } #endif ares-126/hiro/windows/menu-bar.hpp000066400000000000000000000007321415063341600171750ustar00rootroot00000000000000#if defined(Hiro_MenuBar) namespace hiro { struct pMenuBar : pObject { Declare(MenuBar, Object) auto append(sMenu menu) -> void; auto remove(sMenu menu) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; auto _parent() -> maybe; auto _rebuild() -> void; auto _update() -> void; HMENU hmenu = 0; vector objects; }; } #endif ares-126/hiro/windows/message-window.cpp000066400000000000000000000047151415063341600204200ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { static auto MessageWindow_response(MessageWindow::Buttons buttons, UINT response) -> MessageWindow::Response { if(response == IDOK) return MessageWindow::Response::Ok; if(response == IDCANCEL) return MessageWindow::Response::Cancel; if(response == IDYES) return MessageWindow::Response::Yes; if(response == IDNO) return MessageWindow::Response::No; //default responses if window was closed without a button selected if(buttons == MessageWindow::Buttons::Ok) return MessageWindow::Response::Ok; if(buttons == MessageWindow::Buttons::OkCancel) return MessageWindow::Response::Cancel; if(buttons == MessageWindow::Buttons::YesNo) return MessageWindow::Response::No; if(buttons == MessageWindow::Buttons::YesNoCancel) return MessageWindow::Response::Cancel; throw; } static auto MessageWindow_buttons(MessageWindow::Buttons buttons) -> UINT { if(buttons == MessageWindow::Buttons::Ok) return MB_OK; if(buttons == MessageWindow::Buttons::OkCancel) return MB_OKCANCEL; if(buttons == MessageWindow::Buttons::YesNo) return MB_YESNO; if(buttons == MessageWindow::Buttons::YesNoCancel) return MB_YESNOCANCEL; throw; } auto pMessageWindow::error(MessageWindow::State& state) -> MessageWindow::Response { UINT flags = MB_ICONERROR | MessageWindow_buttons(state.buttons); return MessageWindow_response(state.buttons, MessageBox( state.parent ? state.parent->self()->hwnd : 0, utf16_t(state.text), utf16_t(state.title), flags )); } auto pMessageWindow::information(MessageWindow::State& state) -> MessageWindow::Response { UINT flags = MB_ICONINFORMATION | MessageWindow_buttons(state.buttons); return MessageWindow_response(state.buttons, MessageBox( state.parent ? state.parent->self()->hwnd : 0, utf16_t(state.text), utf16_t(state.title), flags )); } auto pMessageWindow::question(MessageWindow::State& state) -> MessageWindow::Response { UINT flags = MB_ICONQUESTION | MessageWindow_buttons(state.buttons); return MessageWindow_response(state.buttons, MessageBox( state.parent ? state.parent->self()->hwnd : 0, utf16_t(state.text), utf16_t(state.title), flags )); } auto pMessageWindow::warning(MessageWindow::State& state) -> MessageWindow::Response { UINT flags = MB_ICONWARNING | MessageWindow_buttons(state.buttons); return MessageWindow_response(state.buttons, MessageBox( state.parent ? state.parent->self()->hwnd : 0, utf16_t(state.text), utf16_t(state.title), flags )); } } #endif ares-126/hiro/windows/message-window.hpp000066400000000000000000000006301415063341600204150ustar00rootroot00000000000000#if defined(Hiro_MessageWindow) namespace hiro { struct pMessageWindow { static auto error(MessageWindow::State& state) -> MessageWindow::Response; static auto information(MessageWindow::State& state) -> MessageWindow::Response; static auto question(MessageWindow::State& state) -> MessageWindow::Response; static auto warning(MessageWindow::State& state) -> MessageWindow::Response; }; } #endif ares-126/hiro/windows/monitor.cpp000066400000000000000000000031061415063341600171470ustar00rootroot00000000000000#if defined(Hiro_Monitor) //per-monitor API is only on Windows 10+ namespace hiro { struct MonitorInfo { u32 monitor = 0; u32 primary = 0; Geometry geometry; u32 index = 0; }; static auto CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) -> BOOL { MonitorInfo& info = *(MonitorInfo*)dwData; MONITORINFOEX mi{}; mi.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(hMonitor, &mi); string displayName = (const char*)utf8_t(mi.szDevice); if(displayName.beginsWith(R"(\\.\DISPLAYV)")) return true; //ignore pseudo-monitors if(mi.dwFlags & MONITORINFOF_PRIMARY) info.primary = info.index; if(info.monitor == info.index) { info.geometry = {lprcMonitor->left, lprcMonitor->top, lprcMonitor->right - lprcMonitor->left, lprcMonitor->bottom - lprcMonitor->top}; } info.index++; return true; } auto pMonitor::count() -> u32 { return GetSystemMetrics(SM_CMONITORS); } auto pMonitor::dpi(uint monitor) -> Position { HDC hdc = GetDC(0); auto dpiX = (f32)GetDeviceCaps(hdc, LOGPIXELSX); auto dpiY = (f32)GetDeviceCaps(hdc, LOGPIXELSY); ReleaseDC(0, hdc); return {dpiX, dpiY}; } auto pMonitor::geometry(u32 monitor) -> Geometry { MonitorInfo info; info.monitor = monitor; EnumDisplayMonitors(nullptr, nullptr, MonitorEnumProc, (LPARAM)&info); return info.geometry; } auto pMonitor::primary() -> u32 { MonitorInfo info; EnumDisplayMonitors(nullptr, nullptr, MonitorEnumProc, (LPARAM)&info); return info.primary; } auto pMonitor::workspace(u32 monitor) -> Geometry { return pDesktop::workspace(); } } #endif ares-126/hiro/windows/monitor.hpp000066400000000000000000000004321415063341600171530ustar00rootroot00000000000000#if defined(Hiro_Monitor) namespace hiro { struct pMonitor { static auto count() -> u32; static auto dpi(u32 monitor) -> Position; static auto geometry(u32 monitor) -> Geometry; static auto primary() -> u32; static auto workspace(u32 monitor) -> Geometry; }; } #endif ares-126/hiro/windows/mouse.cpp000066400000000000000000000007441415063341600166150ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { auto pMouse::position() -> Position { POINT point{}; GetCursorPos(&point); return {point.x, point.y}; } auto pMouse::pressed(Mouse::Button button) -> bool { switch(button) { case Mouse::Button::Left: return GetAsyncKeyState(VK_LBUTTON) & 0x8000; case Mouse::Button::Middle: return GetAsyncKeyState(VK_MBUTTON) & 0x8000; case Mouse::Button::Right: return GetAsyncKeyState(VK_RBUTTON) & 0x8000; } return false; } } #endif ares-126/hiro/windows/mouse.hpp000066400000000000000000000002441415063341600166150ustar00rootroot00000000000000#if defined(Hiro_Mouse) namespace hiro { struct pMouse { static auto position() -> Position; static auto pressed(Mouse::Button button) -> bool; }; } #endif ares-126/hiro/windows/object.cpp000066400000000000000000000010451415063341600167260ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { auto pObject::construct() -> void { } auto pObject::destruct() -> void { } auto pObject::reconstruct() -> void { } auto pObject::focused() const -> bool { return false; } auto pObject::remove() -> void { } auto pObject::reset() -> void { } auto pObject::setEnabled(bool enabled) -> void { } auto pObject::setFocused() -> void { } auto pObject::setFont(const Font& font) -> void { } auto pObject::setGroup(sGroup group) -> void { } auto pObject::setVisible(bool visible) -> void { } } #endif ares-126/hiro/windows/object.hpp000066400000000000000000000012001415063341600167240ustar00rootroot00000000000000#if defined(Hiro_Object) namespace hiro { struct pObject : Lock { pObject(mObject& reference) : reference(reference) {} virtual ~pObject() = default; virtual auto construct() -> void; virtual auto destruct() -> void; virtual auto reconstruct() -> void; virtual auto focused() const -> bool; virtual auto remove() -> void; virtual auto reset() -> void; virtual auto setEnabled(bool enabled) -> void; virtual auto setFocused() -> void; virtual auto setFont(const Font& font) -> void; virtual auto setGroup(sGroup group) -> void; virtual auto setVisible(bool visible) -> void; mObject& reference; }; } #endif ares-126/hiro/windows/platform.cpp000066400000000000000000000031671415063341600173130ustar00rootroot00000000000000#include "platform.hpp" #include "utility.cpp" #include "desktop.cpp" #include "monitor.cpp" #include "keyboard.cpp" #include "mouse.cpp" #include "browser-window.cpp" #include "message-window.cpp" #include "object.cpp" #include "group.cpp" #include "font.cpp" #include "timer.cpp" #include "window.cpp" #include "status-bar.cpp" #include "menu-bar.cpp" #include "popup-menu.cpp" #include "action/action.cpp" #include "action/menu.cpp" #include "action/menu-separator.cpp" #include "action/menu-item.cpp" #include "action/menu-check-item.cpp" #include "action/menu-radio-item.cpp" #include "sizable.cpp" #include "tool-tip.cpp" #include "widget/widget.cpp" #include "widget/button.cpp" #include "widget/canvas.cpp" #include "widget/check-button.cpp" #include "widget/check-label.cpp" #include "widget/combo-button.cpp" #include "widget/combo-button-item.cpp" #include "widget/frame.cpp" #include "widget/hex-edit.cpp" #include "widget/horizontal-scroll-bar.cpp" #include "widget/horizontal-slider.cpp" #include "widget/label.cpp" #include "widget/line-edit.cpp" #include "widget/progress-bar.cpp" #include "widget/radio-button.cpp" #include "widget/radio-label.cpp" #include "widget/tab-frame.cpp" #include "widget/tab-frame-item.cpp" #include "widget/table-view.cpp" #include "widget/table-view-column.cpp" #include "widget/table-view-item.cpp" #include "widget/table-view-cell.cpp" #include "widget/text-edit.cpp" #include "widget/tree-view.cpp" #include "widget/tree-view-item.cpp" #include "widget/vertical-scroll-bar.cpp" #include "widget/vertical-slider.cpp" #include "widget/viewport.cpp" #include "application.cpp" #include "settings.cpp" ares-126/hiro/windows/platform.hpp000066400000000000000000000043221415063341600173120ustar00rootroot00000000000000namespace hiro { struct AppMessage { enum : uint { None = WM_APP, TableView_doPaint, TableView_onActivate, TableView_onChange, }; }; using WindowProc = auto CALLBACK (*)(HWND, UINT, WPARAM, LPARAM) -> LRESULT; static vector windows; } #define Declare(Name, Base) \ p##Name(m##Name& reference) : p##Base(reference) {} \ auto self() const -> m##Name& { return (m##Name&)reference; } \ auto state() const -> m##Name::State& { return self().state; } \ auto construct() -> void override; \ auto destruct() -> void override; \ auto reconstruct() -> void override { destruct(), construct(); } \ #include "font.hpp" #include "desktop.hpp" #include "monitor.hpp" #include "keyboard.hpp" #include "mouse.hpp" #include "browser-window.hpp" #include "message-window.hpp" #include "object.hpp" #include "group.hpp" #include "timer.hpp" #include "window.hpp" #include "status-bar.hpp" #include "menu-bar.hpp" #include "popup-menu.hpp" #include "action/action.hpp" #include "action/menu.hpp" #include "action/menu-separator.hpp" #include "action/menu-item.hpp" #include "action/menu-check-item.hpp" #include "action/menu-radio-item.hpp" #include "sizable.hpp" #include "tool-tip.hpp" #include "widget/widget.hpp" #include "widget/button.hpp" #include "widget/canvas.hpp" #include "widget/check-button.hpp" #include "widget/check-label.hpp" #include "widget/combo-button.hpp" #include "widget/combo-button-item.hpp" #include "widget/frame.hpp" #include "widget/hex-edit.hpp" #include "widget/horizontal-scroll-bar.hpp" #include "widget/horizontal-slider.hpp" #include "widget/label.hpp" #include "widget/line-edit.hpp" #include "widget/progress-bar.hpp" #include "widget/radio-button.hpp" #include "widget/radio-label.hpp" #include "widget/tab-frame.hpp" #include "widget/tab-frame-item.hpp" #include "widget/table-view.hpp" #include "widget/table-view-column.hpp" #include "widget/table-view-item.hpp" #include "widget/table-view-cell.hpp" #include "widget/text-edit.hpp" #include "widget/tree-view.hpp" #include "widget/tree-view-item.hpp" #include "widget/vertical-scroll-bar.hpp" #include "widget/vertical-slider.hpp" #include "widget/viewport.hpp" #include "application.hpp" #include "settings.hpp" #undef Declare ares-126/hiro/windows/popup-menu.cpp000066400000000000000000000064551415063341600175770ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) namespace hiro { auto pPopupMenu::construct() -> void { hwnd = CreateWindow(L"hiroPopupMenu", L"", ResizableStyle, 0, 0, 0, 0, 0, 0, GetModuleHandle(0), 0); } auto pPopupMenu::destruct() -> void { if(hmenu) { DestroyMenu(hmenu); hmenu = nullptr; } DestroyWindow(hwnd); } auto pPopupMenu::append(sAction action) -> void { } auto pPopupMenu::remove(sAction action) -> void { } auto pPopupMenu::setFont(const Font& font) -> void { } auto pPopupMenu::setVisible(bool visible) -> void { if(!visible) return; if(hmenu) DestroyMenu(hmenu); hmenu = CreatePopupMenu(); MENUINFO mi{sizeof(MENUINFO)}; mi.fMask = MIM_STYLE; mi.dwStyle = MNS_NOTIFYBYPOS; //| MNS_MODELESS; SetMenuInfo(hmenu, &mi); u32 position = 0; for(auto& action : state().actions) { if(!action->self()) continue; action->self()->position = position; u32 enabled = action->enabled() ? 0 : MF_GRAYED; MENUITEMINFO mii{sizeof(MENUITEMINFO)}; mii.fMask = MIIM_DATA; mii.dwItemData = (ULONG_PTR)action.data(); if(auto menu = dynamic_cast(action.data())) { if(menu->visible()) { menu->self()->_update(); AppendMenu(hmenu, MF_STRING | MF_POPUP | enabled, (UINT_PTR)menu->self()->hmenu, utf16_t(menu->text())); if(auto bitmap = menu->self()->hbitmap) { //Windows XP and below displays MIIM_BITMAP + hbmpItem in its own column (separate from check/radio marks) //this causes too much spacing, so use a custom checkmark image instead mii.fMask |= MIIM_CHECKMARKS; mii.hbmpUnchecked = bitmap; } SetMenuItemInfo(hmenu, position++, true, &mii); } } #if defined(Hiro_MenuSeparator) else if(auto menuSeparator = dynamic_cast(action.data())) { if(menuSeparator->visible()) { AppendMenu(hmenu, MF_SEPARATOR | enabled, position, L""); SetMenuItemInfo(hmenu, position++, true, &mii); } } #endif #if defined(Hiro_MenuItem) else if(auto menuItem = dynamic_cast(action.data())) { if(menuItem->visible()) { AppendMenu(hmenu, MF_STRING | enabled, position, utf16_t(menuItem->text())); if(auto bitmap = menuItem->self()->hbitmap) { mii.fMask |= MIIM_CHECKMARKS; mii.hbmpUnchecked = bitmap; } SetMenuItemInfo(hmenu, position++, true, &mii); } } #endif #if defined(Hiro_MenuCheckItem) else if(auto menuCheckItem = dynamic_cast(action.data())) { if(menuCheckItem->visible()) { AppendMenu(hmenu, MF_STRING | enabled, position, utf16_t(menuCheckItem->text())); SetMenuItemInfo(hmenu, position++, true, &mii); if(menuCheckItem->checked()) menuCheckItem->setChecked(); } } #endif #if defined(Hiro_MenuRadioItem) else if(auto menuRadioItem = dynamic_cast(action.data())) { if(menuRadioItem->visible()) { AppendMenu(hmenu, MF_STRING | enabled, position, utf16_t(menuRadioItem->text())); SetMenuItemInfo(hmenu, position++, true, &mii); if(menuRadioItem->checked()) menuRadioItem->setChecked(); } } #endif } POINT point{0}; GetCursorPos(&point); TrackPopupMenu(hmenu, TPM_LEFTALIGN | TPM_TOPALIGN, point.x, point.y, 0, hwnd, nullptr); } } #endif ares-126/hiro/windows/popup-menu.hpp000066400000000000000000000005351415063341600175750ustar00rootroot00000000000000#if defined(Hiro_PopupMenu) namespace hiro { struct pPopupMenu : pObject { Declare(PopupMenu, Object) auto append(sAction action) -> void; auto remove(sAction action) -> void; auto setFont(const Font& font) -> void override; auto setVisible(bool visible) -> void override; HWND hwnd = nullptr; HMENU hmenu = nullptr; }; } #endif ares-126/hiro/windows/settings.cpp000066400000000000000000000037631415063341600173310ustar00rootroot00000000000000namespace hiro { Settings::Settings() { string path = {Path::userData(), "hiro/"}; auto document = BML::unserialize(file::read({path, "windows.bml"})); document["extendedFrameBounds/popup/x"].value(efbPopup.x); document["extendedFrameBounds/popup/y"].value(efbPopup.y); document["extendedFrameBounds/popup/width"].value(efbPopup.width); document["extendedFrameBounds/popup/height"].value(efbPopup.height); document["extendedFrameBounds/fixed/x"].value(efbFixed.x); document["extendedFrameBounds/fixed/y"].value(efbFixed.y); document["extendedFrameBounds/fixed/width"].value(efbFixed.width); document["extendedFrameBounds/fixed/height"].value(efbFixed.height); document["extendedFrameBounds/resizable/x"].value(efbResizable.x); document["extendedFrameBounds/resizable/y"].value(efbResizable.y); document["extendedFrameBounds/resizable/width"].value(efbResizable.width); document["extendedFrameBounds/resizable/height"].value(efbResizable.height); } Settings::~Settings() { string path = {Path::userData(), "hiro/"}; directory::create(path, 0755); Markup::Node document; document("extendedFrameBounds/popup/x").setValue(efbPopup.x); document("extendedFrameBounds/popup/y").setValue(efbPopup.y); document("extendedFrameBounds/popup/width").setValue(efbPopup.width); document("extendedFrameBounds/popup/height").setValue(efbPopup.height); document("extendedFrameBounds/fixed/x").setValue(efbFixed.x); document("extendedFrameBounds/fixed/y").setValue(efbFixed.y); document("extendedFrameBounds/fixed/width").setValue(efbFixed.width); document("extendedFrameBounds/fixed/height").setValue(efbFixed.height); document("extendedFrameBounds/resizable/x").setValue(efbResizable.x); document("extendedFrameBounds/resizable/y").setValue(efbResizable.y); document("extendedFrameBounds/resizable/width").setValue(efbResizable.width); document("extendedFrameBounds/resizable/height").setValue(efbResizable.height); file::write({path, "windows.bml"}, BML::serialize(document)); } } ares-126/hiro/windows/settings.hpp000066400000000000000000000017151415063341600173310ustar00rootroot00000000000000namespace hiro { struct Settings { Settings(); ~Settings(); //Windows 8+ draws windows with almost no visible borders //to allow resizing the window, the OS places transparent margins around each window //this causes AdjustFrameRect and SetWindowPos to hold values larger than the actual window //as a result, attempts to call Window::setAlignment(Window) fail to position windows correctly //pWindow::setVisible() attempts to compute the actual window bounds to correct Window::frameMargin() //note: different window styles have different extended frame bounds struct ExtendedFrameBounds { u32 x = 0; u32 y = 0; u32 width = 0; u32 height = 0; }; //these are the default values for Windows 10 ... they will be updated later if they are incorrect ExtendedFrameBounds efbPopup { 0, 0, 0, 0}; ExtendedFrameBounds efbFixed { 2, 0, 4, 2}; ExtendedFrameBounds efbResizable{10, 0, 20, 10}; }; static Settings settings; } ares-126/hiro/windows/sizable.cpp000066400000000000000000000005221415063341600171100ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { auto pSizable::construct() -> void { } auto pSizable::destruct() -> void { } auto pSizable::minimumSize() const -> Size { return {0, 0}; } auto pSizable::setCollapsible(bool collapsible) -> void { } auto pSizable::setGeometry(Geometry geometry) -> void { self().doSize(); } } #endif ares-126/hiro/windows/sizable.hpp000066400000000000000000000004171415063341600171200ustar00rootroot00000000000000#if defined(Hiro_Sizable) namespace hiro { struct pSizable : pObject { Declare(Sizable, Object) virtual auto minimumSize() const -> Size; virtual auto setCollapsible(bool collapsible) -> void; virtual auto setGeometry(Geometry geometry) -> void; }; } #endif ares-126/hiro/windows/status-bar.cpp000066400000000000000000000032211415063341600175430ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { auto pStatusBar::construct() -> void { if(auto parent = _parent()) { hwnd = CreateWindow(STATUSCLASSNAME, L"", WS_CHILD, 0, 0, 0, 0, parent->hwnd, nullptr, GetModuleHandle(0), 0); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)&reference); setEnabled(self().enabled()); setFont(self().font()); setText(self().text()); setVisible(self().visible()); } } auto pStatusBar::destruct() -> void { if(hfont) { DeleteObject(hfont); hfont = nullptr; } if(hwnd) { DestroyWindow(hwnd); hwnd = nullptr; } if(auto parent = _parent()) { parent->setGeometry(parent->state().geometry); } } auto pStatusBar::setEnabled(bool) -> void { //unsupported } auto pStatusBar::setFont(const Font&) -> void { auto font = self().font(true); if(hfont) DeleteObject(hfont); hfont = pFont::create(font); SendMessage(hwnd, WM_SETFONT, (WPARAM)hfont, 0); auto& text = state().text; auto height = font.size(text ? text : " ").height(); SendMessage(hwnd, SB_SETMINHEIGHT, (WPARAM)height, 0); if(auto parent = _parent()) { parent->setGeometry(parent->state().geometry); } } auto pStatusBar::setText(const string&) -> void { auto& text = state().text; SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)(wchar_t*)utf16_t(text)); } auto pStatusBar::setVisible(bool) -> void { ShowWindow(hwnd, self().visible() ? SW_SHOWNORMAL : SW_HIDE); if(auto parent = _parent()) { parent->setGeometry(parent->state().geometry); } } auto pStatusBar::_parent() -> maybe { if(auto parent = self().parentWindow(true)) { if(auto self = parent->self()) return *self; } return {}; } } #endif ares-126/hiro/windows/status-bar.hpp000066400000000000000000000006071415063341600175550ustar00rootroot00000000000000#if defined(Hiro_StatusBar) namespace hiro { struct pStatusBar : pObject { Declare(StatusBar, Object) auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto _parent() -> maybe; HWND hwnd = 0; HFONT hfont = 0; }; } #endif ares-126/hiro/windows/timer.cpp000066400000000000000000000017661415063341600166120ustar00rootroot00000000000000#if defined(Hiro_Timer) //timeBeginPeriod(1) + timeSetEvent does not seem any more performant than SetTimer //it also seems buggier, and requires libwinmm namespace hiro { static vector timers; static auto CALLBACK Timer_timeoutProc(HWND hwnd, UINT msg, UINT_PTR timerID, DWORD time) -> void { if(Application::state().quit) return; for(auto& timer : timers) { if(timer->htimer == timerID) return timer->self().doActivate(); } } auto pTimer::construct() -> void { timers.append(this); htimer = 0; } auto pTimer::destruct() -> void { setEnabled(false); if(auto index = timers.find(this)) timers.remove(*index); } auto pTimer::setEnabled(bool enabled) -> void { if(htimer) { KillTimer(nullptr, htimer); htimer = 0; } if(enabled == true) { htimer = SetTimer(nullptr, 0, state().interval, Timer_timeoutProc); } } auto pTimer::setInterval(u32 interval) -> void { //destroy and recreate timer if interval changed setEnabled(self().enabled(true)); } } #endif ares-126/hiro/windows/timer.hpp000066400000000000000000000003411415063341600166030ustar00rootroot00000000000000#if defined(Hiro_Timer) namespace hiro { struct pTimer : pObject { Declare(Timer, Object) auto setEnabled(bool enabled) -> void override; auto setInterval(u32 interval) -> void; UINT_PTR htimer = 0; }; } #endif ares-126/hiro/windows/tool-tip.cpp000066400000000000000000000113341415063341600172310ustar00rootroot00000000000000namespace hiro { static auto CALLBACK ToolTip_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { if(auto toolTip = (pToolTip*)GetWindowLongPtr(hwnd, GWLP_USERDATA)) { if(auto result = toolTip->windowProc(hwnd, msg, wparam, lparam)) { return result(); } } return DefWindowProc(hwnd, msg, wparam, lparam); } pToolTip::pToolTip(const string& toolTipText) { text = toolTipText; htheme = OpenThemeData(hwnd, L"TOOLTIP"); hwnd = CreateWindowEx( WS_EX_TOOLWINDOW | WS_EX_TOPMOST | (htheme ? WS_EX_LAYERED : 0), L"hiroToolTip", L"", WS_POPUP, 0, 0, 0, 0, 0, 0, GetModuleHandle(0), 0 ); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)this); tracking.x = -1; tracking.y = -1; timeout.setInterval(Timeout); timeout.onActivate([&] { hide(); }); } pToolTip::~pToolTip() { hide(); if(htheme) { CloseThemeData(htheme); htheme = nullptr; } if(hwnd) { DestroyWindow(hwnd); hwnd = nullptr; } } auto pToolTip::drawLayered() -> void { auto hdcOutput = GetDC(nullptr); u32* below = nullptr; auto hdcBelow = CreateCompatibleDC(hdcOutput); auto hbmBelow = CreateBitmap(hdcBelow, size.cx, size.cy, below); SelectObject(hdcBelow, hbmBelow); RECT rc{}; rc.left = 0, rc.top = 0, rc.right = size.cx, rc.bottom = size.cy; DrawThemeBackground(htheme, hdcBelow, TTP_STANDARD, TTSS_NORMAL, &rc, nullptr); u32* above = nullptr; auto hdcAbove = CreateCompatibleDC(hdcOutput); auto hbmAbove = CreateBitmap(hdcAbove, size.cx, size.cy, above); SelectObject(hdcAbove, hbmAbove); memory::copy(above, below, size.cx * size.cy); auto hfont = pFont::create(Font()); SelectObject(hdcAbove, hfont); SetBkMode(hdcAbove, TRANSPARENT); SetTextColor(hdcAbove, RGB(0, 0, 0)); utf16_t drawText(text); rc.left += 6, rc.top += 6, rc.right -= 6, rc.bottom -= 6; DrawText(hdcAbove, drawText, -1, &rc, DT_LEFT | DT_TOP); DeleteObject(hfont); for(u32 n : range(size.cx * size.cy)) { below[n] = (below[n] & 0xff000000) | (above[n] & 0x00ffffff); } BLENDFUNCTION blend{}; blend.BlendOp = AC_SRC_OVER; blend.SourceConstantAlpha = 255; blend.AlphaFormat = AC_SRC_ALPHA; POINT zero{}; zero.x = 0, zero.y = 0; UpdateLayeredWindow(hwnd, hdcOutput, &position, &size, hdcBelow, &zero, RGB(0, 0, 0), &blend, ULW_ALPHA); DeleteObject(hbmAbove); DeleteObject(hbmBelow); DeleteDC(hdcAbove); DeleteDC(hdcBelow); ReleaseDC(nullptr, hdcOutput); } auto pToolTip::drawOpaque() -> void { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); RECT rc{}; GetClientRect(hwnd, &rc); auto brush = CreateSolidBrush(RGB(0, 0, 0)); FillRect(ps.hdc, &rc, brush); DeleteObject(brush); rc.left += 1, rc.top += 1, rc.right -= 1, rc.bottom -= 1; brush = CreateSolidBrush(RGB(255, 255, 225)); FillRect(ps.hdc, &rc, brush); DeleteObject(brush); rc.left += 5, rc.top += 5, rc.right -= 5, rc.bottom -= 5; SetBkMode(ps.hdc, TRANSPARENT); auto font = pFont::create(Font()); SelectObject(ps.hdc, font); SetTextColor(ps.hdc, RGB(0, 0, 0)); DrawText(ps.hdc, utf16_t(text), -1, &rc, DT_LEFT | DT_TOP); DeleteObject(font); EndPaint(hwnd, &ps); } auto pToolTip::show() -> void { if(auto toolTip = pApplication::state().toolTip) { if(toolTip != this) toolTip->hide(); } pApplication::state().toolTip = this; GetCursorPos(&position); if(position.x == tracking.x && position.y == tracking.y) return; tracking.x = position.x, tracking.y = position.y; position.y += 18; auto textSize = pFont::size(Font(), text ? text : " "); size.cx = 12 + textSize.width(); size.cy = 12 + textSize.height(); //try to keep the tool-tip onscreen auto desktop = pDesktop::size(); if(position.x + size.cx >= desktop.width ()) position.x = desktop.width () - size.cx; if(position.y + size.cy >= desktop.height()) position.y = desktop.height() - size.cy; if(position.x < 0) position.x = 0; if(position.y < 0) position.y = 0; SetWindowPos(hwnd, HWND_TOP, position.x, position.y, size.cx, size.cy, SWP_NOACTIVATE | SWP_SHOWWINDOW); if(htheme) drawLayered(); timeout.setEnabled(true); } auto pToolTip::hide() -> void { pApplication::state().toolTip = nullptr; timeout.setEnabled(false); ShowWindow(hwnd, SW_HIDE); GetCursorPos(&tracking); } auto pToolTip::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { switch(msg) { case WM_ERASEBKGND: case WM_PAINT: if(htheme) break; drawOpaque(); return msg == WM_ERASEBKGND; case WM_MOUSEMOVE: case WM_MOUSELEAVE: { POINT point{}; GetCursorPos(&point); if(point.x != tracking.x || point.y != tracking.y) hide(); } break; case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_MBUTTONDOWN: case WM_MBUTTONUP: case WM_RBUTTONDOWN: case WM_RBUTTONUP: hide(); break; } return {}; } } ares-126/hiro/windows/tool-tip.hpp000066400000000000000000000006771415063341600172460ustar00rootroot00000000000000namespace hiro { struct pToolTip { enum : u32 { Delay = 1000, Timeout = 10000 }; pToolTip(const string& text); ~pToolTip(); auto drawLayered() -> void; auto drawOpaque() -> void; auto show() -> void; auto hide() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe; HWND hwnd = nullptr; HTHEME htheme = nullptr; POINT position{}; SIZE size{}; POINT tracking{}; string text; Timer timeout; }; } ares-126/hiro/windows/utility.cpp000066400000000000000000000362541415063341600171750ustar00rootroot00000000000000namespace hiro { static constexpr u32 Windows2000 = 0x0500; static constexpr u32 WindowsXP = 0x0501; static constexpr u32 WindowsVista = 0x0600; static constexpr u32 Windows7 = 0x0601; static auto Button_CustomDraw(HWND, PAINTSTRUCT&, bool, bool, bool, u32, const Font&, const image&, Orientation, const string&) -> void; static auto OsVersion() -> u32 { OSVERSIONINFO versionInfo{0}; versionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&versionInfo); return (versionInfo.dwMajorVersion << 8) + (versionInfo.dwMajorVersion << 0); } static auto CreateBitmap(HDC hdc, u32 width, u32 height, u32*& data) -> HBITMAP { BITMAPINFO info{}; info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); info.bmiHeader.biWidth = width; info.bmiHeader.biHeight = -(s32)height; //bitmaps are stored upside down unless we negate height info.bmiHeader.biPlanes = 1; info.bmiHeader.biBitCount = 32; info.bmiHeader.biCompression = BI_RGB; info.bmiHeader.biSizeImage = width * height * sizeof(u32); void* bits = nullptr; auto bitmap = CreateDIBSection(hdc, &info, DIB_RGB_COLORS, &bits, nullptr, 0); data = (u32*)bits; return bitmap; } static auto CreateBitmap(image icon) -> HBITMAP { icon.alphaMultiply(); //Windows AlphaBlend() requires premultiplied image data icon.transform(); u32* data = nullptr; auto hdc = GetDC(nullptr); auto bitmap = CreateBitmap(hdc, icon.width(), icon.height(), data); memory::copy(data, icon.data(), icon.size()); ReleaseDC(nullptr, hdc); return bitmap; } static auto CreateRGB(const Color& color) -> COLORREF { return RGB(color.red(), color.green(), color.blue()); } static auto DropPaths(WPARAM wparam) -> vector { auto dropList = HDROP(wparam); auto fileCount = DragQueryFile(dropList, ~0u, nullptr, 0); vector paths; for(auto n : range(fileCount)) { auto length = DragQueryFile(dropList, n, nullptr, 0); auto buffer = new wchar_t[length + 1]; if(DragQueryFile(dropList, n, buffer, length + 1)) { string path = (const char*)utf8_t(buffer); path.transform("\\", "/"); if(directory::exists(path) && !path.endsWith("/")) path.append("/"); paths.append(path); } delete[] buffer; } return paths; } static auto WINAPI EnumVisibleChildWindowsProc(HWND hwnd, LPARAM lparam) -> BOOL { auto children = (vector*)lparam; if(IsWindowVisible(hwnd)) children->append(hwnd); return true; } static auto EnumVisibleChildWindows(HWND hwnd) -> vector { vector children; EnumChildWindows(hwnd, EnumVisibleChildWindowsProc, (LPARAM)&children); return children; } static auto GetWindowZOrder(HWND hwnd) -> u32 { u32 z = 0; for(HWND next = hwnd; next != nullptr; next = GetWindow(next, GW_HWNDPREV)) z++; return z; } static auto ImageList_Append(HIMAGELIST imageList, image icon, u32 scale) -> void { if(icon) { icon.scale(scale, scale); } else { icon.allocate(scale, scale); icon.fill(GetSysColor(COLOR_WINDOW)); } HBITMAP bitmap = CreateBitmap(icon); ImageList_Add(imageList, bitmap, nullptr); DeleteObject(bitmap); } //post message only if said message is not already pending in the queue static auto PostMessageOnce(HWND hwnd, UINT id, WPARAM wparam, LPARAM lparam) -> void { MSG msg; if(!PeekMessage(&msg, hwnd, id, id, PM_NOREMOVE)) { PostMessage(hwnd, id, wparam, lparam); } } static auto ScrollEvent(HWND hwnd, WPARAM wparam) -> u32 { SCROLLINFO info; memset(&info, 0, sizeof(SCROLLINFO)); info.cbSize = sizeof(SCROLLINFO); info.fMask = SIF_ALL; GetScrollInfo(hwnd, SB_CTL, &info); switch(LOWORD(wparam)) { case SB_LEFT: info.nPos = info.nMin; break; case SB_RIGHT: info.nPos = info.nMax; break; case SB_LINELEFT: info.nPos--; break; case SB_LINERIGHT: info.nPos++; break; case SB_PAGELEFT: info.nPos -= info.nMax >> 3; break; case SB_PAGERIGHT: info.nPos += info.nMax >> 3; break; case SB_THUMBTRACK: info.nPos = info.nTrackPos; break; } info.fMask = SIF_POS; SetScrollInfo(hwnd, SB_CTL, &info, TRUE); //Windows may clamp position to scrollbar range GetScrollInfo(hwnd, SB_CTL, &info); return info.nPos; } static auto CALLBACK Default_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { return DefWindowProc(hwnd, msg, wparam, lparam); } //separate because PopupMenu HWND does not contain GWLP_USERDATA pointing at Window needed for Shared_windowProc static auto CALLBACK Menu_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { switch(msg) { case WM_MENUCOMMAND: { MENUITEMINFO mii{sizeof(MENUITEMINFO)}; mii.fMask = MIIM_DATA; GetMenuItemInfo((HMENU)lparam, wparam, true, &mii); auto object = (mObject*)mii.dwItemData; if(!object) break; #if defined(Hiro_MenuItem) if(auto menuItem = dynamic_cast(object)) { return menuItem->self()->onActivate(), false; } #endif #if defined(Hiro_MenuCheckItem) if(auto menuCheckItem = dynamic_cast(object)) { return menuCheckItem->self()->onToggle(), false; } #endif #if defined(Hiro_MenuRadioItem) if(auto menuRadioItem = dynamic_cast(object)) { return menuRadioItem->self()->onActivate(), false; } #endif break; } } return DefWindowProc(hwnd, msg, wparam, lparam); } static auto CALLBACK Shared_windowProc(WindowProc windowProc, HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { if(Application::state().quit) return DefWindowProc(hwnd, msg, wparam, lparam); auto object = (mObject*)GetWindowLongPtr(hwnd, GWLP_USERDATA); if(!object) return DefWindowProc(hwnd, msg, wparam, lparam); auto window = dynamic_cast(object); if(!window) window = object->parentWindow(true); if(!window) return DefWindowProc(hwnd, msg, wparam, lparam); auto pWindow = window->self(); if(!pWindow) return DefWindowProc(hwnd, msg, wparam, lparam); switch(msg) { case WM_CTLCOLORBTN: case WM_CTLCOLOREDIT: case WM_CTLCOLORSTATIC: { auto object = (mObject*)GetWindowLongPtr((HWND)lparam, GWLP_USERDATA); if(!object) break; //allow custom colors for various widgets //note that this happens always: default colors are black text on a white background, unless overridden //this intentionally overrides the default behavior of Windows to paint disabled controls with the window background color #if defined(Hiro_Window) && defined(Hiro_TabFrame) if(!object->parentTabFrame(true) && window->self()->hbrush) { SetBkColor((HDC)wparam, window->self()->hbrushColor); return (LRESULT)window->self()->hbrush; } #endif #if defined(Hiro_HexEdit) if(auto hexEdit = dynamic_cast(object)) { if(auto background = hexEdit->backgroundColor()) SetBkColor((HDC)wparam, CreateRGB(background)); if(auto foreground = hexEdit->foregroundColor()) SetTextColor((HDC)wparam, CreateRGB(foreground)); return (LRESULT)hexEdit->self()->backgroundBrush; } #endif #if defined(Hiro_LineEdit) if(auto lineEdit = dynamic_cast(object)) { if(auto background = lineEdit->backgroundColor()) SetBkColor((HDC)wparam, CreateRGB(background)); if(auto foreground = lineEdit->foregroundColor()) SetTextColor((HDC)wparam, CreateRGB(foreground)); return (LRESULT)lineEdit->self()->backgroundBrush; } #endif #if defined(Hiro_TextEdit) if(auto textEdit = dynamic_cast(object)) { if(auto background = textEdit->backgroundColor()) SetBkColor((HDC)wparam, CreateRGB(background)); if(auto foreground = textEdit->foregroundColor()) SetTextColor((HDC)wparam, CreateRGB(foreground)); return (LRESULT)textEdit->self()->backgroundBrush; } #endif break; } case WM_GETMINMAXINFO: { auto info = (LPMINMAXINFO)lparam; auto frameMargin = pWindow->frameMargin(); if(auto minimumSize = window->state.minimumSize) { info->ptMinTrackSize.x = minimumSize.width() + frameMargin.width(); info->ptMinTrackSize.y = minimumSize.height() + frameMargin.height(); } if(auto maximumSize = window->state.maximumSize) { info->ptMaxTrackSize.x = maximumSize.width() + frameMargin.width(); info->ptMaxTrackSize.y = maximumSize.height() + frameMargin.height(); } break; } case WM_MENUCOMMAND: { return Menu_windowProc(hwnd, msg, wparam, lparam); } case WM_COMMAND: { if(!lparam) break; auto object = (mObject*)GetWindowLongPtr((HWND)lparam, GWLP_USERDATA); if(!object) break; #if defined(Hiro_Button) if(auto button = dynamic_cast(object)) { return button->self()->onActivate(), false; } #endif #if defined(Hiro_CheckButton) if(auto checkButton = dynamic_cast(object)) { return checkButton->self()->onToggle(), false; } #endif #if defined(Hiro_CheckLabel) if(auto checkLabel = dynamic_cast(object)) { return checkLabel->self()->onToggle(), false; } #endif #if defined(Hiro_ComboButton) if(auto comboButton = dynamic_cast(object)) { if(HIWORD(wparam) == CBN_SELCHANGE) { return comboButton->self()->onChange(), false; } } #endif #if defined(Hiro_LineEdit) if(auto lineEdit = dynamic_cast(object)) { if(HIWORD(wparam) == EN_CHANGE) { return lineEdit->self()->onChange(), false; } } #endif #if defined(Hiro_RadioButton) if(auto radioButton = dynamic_cast(object)) { return radioButton->self()->onActivate(), false; } #endif #if defined(Hiro_RadioLabel) if(auto radioLabel = dynamic_cast(object)) { return radioLabel->self()->onActivate(), false; } #endif #if defined(Hiro_TextEdit) if(auto textEdit = dynamic_cast(object)) { if(HIWORD(wparam) == EN_CHANGE) { return textEdit->self()->onChange(), false; } } #endif break; } case WM_NOTIFY: { //Widgets inside a TabFrame must be parented to it rather than the Window. //This is critical for proper inheritance of styles and message passing. //However, by doing this, some WM_NOTIFY messages end up being sent to both //the TabFrame and the Window; while others are only sent to the TabFrame. //To save code, hiro uses a shared callback for both of these cases. //So when a message is sent to both, we ignore the TabFrame message. bool isWindowCallback = (object == window); auto header = (LPNMHDR)lparam; auto object = (mObject*)GetWindowLongPtr((HWND)header->hwndFrom, GWLP_USERDATA); if(!object) break; #if defined(Hiro_TableView) if(auto tableView = dynamic_cast(object)) { if(header->code == LVN_ITEMACTIVATE) { tableView->self()->onActivate(lparam); break; } if(header->code == LVN_ITEMCHANGED) { tableView->self()->onChange(lparam); break; } if(header->code == LVN_COLUMNCLICK) { if(isWindowCallback) tableView->self()->onSort(lparam); break; } if(header->code == NM_CLICK || header->code == NM_DBLCLK) { //onToggle performs the test to ensure the TableViewItem clicked was checkable if(isWindowCallback) tableView->self()->onToggle(lparam); break; } if(header->code == NM_RCLICK) { if(isWindowCallback) tableView->self()->onContext(lparam); break; } if(header->code == NM_CUSTOMDRAW) { return tableView->self()->onCustomDraw(lparam); } } #endif #if defined(Hiro_TabFrame) if(auto tabFrame = dynamic_cast(object)) { if(header->code == TCN_SELCHANGE) { tabFrame->self()->onChange(); break; } } #endif break; } case WM_SIZE: { bool maximized = IsZoomed(pWindow->hwnd); bool minimized = IsIconic(pWindow->hwnd); window->state.maximized = maximized; window->state.minimized = minimized; //todo: call Window::doSize() ? break; } case WM_HSCROLL: case WM_VSCROLL: { if(!lparam) break; auto object = (mObject*)GetWindowLongPtr((HWND)lparam, GWLP_USERDATA); if(!object) break; #if defined(Hiro_HorizontalScrollBar) if(auto horizontalScrollBar = dynamic_cast(object)) { return horizontalScrollBar->self()->onChange(wparam), true; } #endif #if defined(Hiro_HorizontalSlider) if(auto horizontalSlider = dynamic_cast(object)) { return horizontalSlider->self()->onChange(), true; } #endif #if defined(Hiro_VerticalScrollBar) if(auto verticalScrollBar = dynamic_cast(object)) { return verticalScrollBar->self()->onChange(wparam), true; } #endif #if defined(Hiro_VerticalSlider) if(auto verticalSlider = dynamic_cast(object)) { return verticalSlider->self()->onChange(), true; } #endif break; } //catch mouse events over disabled windows case WM_MOUSEMOVE: case WM_MOUSELEAVE: case WM_MOUSEHOVER: { POINT p{}; GetCursorPos(&p); ScreenToClient(hwnd, &p); for(auto window : EnumVisibleChildWindows(hwnd)) { if(auto widget = (mWidget*)GetWindowLongPtr(window, GWLP_USERDATA)) { auto geometry = widget->geometry(); if(p.x < geometry.x()) continue; if(p.y < geometry.y()) continue; if(p.x >= geometry.x() + geometry.width ()) continue; if(p.y >= geometry.y() + geometry.height()) continue; if(msg == WM_MOUSEMOVE) { TRACKMOUSEEVENT event{sizeof(TRACKMOUSEEVENT)}; event.hwndTrack = hwnd; event.dwFlags = TME_LEAVE | TME_HOVER; event.dwHoverTime = pToolTip::Delay; TrackMouseEvent(&event); POINT p{}; GetCursorPos(&p); widget->self()->doMouseMove(p.x, p.y); if(auto toolTip = pApplication::state().toolTip) { toolTip->windowProc(hwnd, msg, wparam, lparam); } } if(msg == WM_MOUSELEAVE) { widget->self()->doMouseLeave(); } if(msg == WM_MOUSEHOVER) { widget->self()->doMouseHover(); } } } break; } #if defined(Hiro_TableView) case AppMessage::TableView_doPaint: { if(auto tableView = (mTableView*)lparam) { if(auto self = tableView->self()) { InvalidateRect(self->hwnd, nullptr, true); } } break; } case AppMessage::TableView_onActivate: { if(auto tableView = (mTableView*)lparam) { if(auto self = tableView->self()) { tableView->doActivate(self->activateCell); } } break; } case AppMessage::TableView_onChange: { if(auto tableView = (mTableView*)lparam) { tableView->doChange(); } } #endif } return CallWindowProc(windowProc, hwnd, msg, wparam, lparam); } } ares-126/hiro/windows/widget/000077500000000000000000000000001415063341600162375ustar00rootroot00000000000000ares-126/hiro/windows/widget/button.cpp000066400000000000000000000144221415063341600202610ustar00rootroot00000000000000#if defined(Hiro_Button) namespace hiro { auto pButton::construct() -> void { hwnd = CreateWindow( L"BUTTON", L"", WS_CHILD | WS_TABSTOP, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); _setState(); } auto pButton::destruct() -> void { DestroyWindow(hwnd); } auto pButton::minimumSize() const -> Size { Size icon = {(s32)state().icon.width(), (s32)state().icon.height()}; Size text = state().text ? pFont::size(self().font(true), state().text) : Size{}; Size size; if(state().orientation == Orientation::Horizontal) { size.setWidth(icon.width() + (icon && text ? 5 : 0) + text.width()); size.setHeight(max(icon.height(), text.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(icon.width(), text.width())); size.setHeight(icon.height() + (icon && text ? 5 : 0) + text.height()); } size.setHeight(max(size.height(), pFont::size(self().font(true), " ").height())); return {size.width() + (state().bordered && text ? 20 : 10), size.height() + 10}; } auto pButton::setBordered(bool bordered) -> void { _setState(); } auto pButton::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); _setState(); } auto pButton::setFont(const Font& font) -> void { pWidget::setFont(font); _setState(); } auto pButton::setIcon(const image& icon) -> void { _setState(); } auto pButton::setOrientation(Orientation orientation) -> void { _setState(); } auto pButton::setText(const string& text) -> void { _setState(); } auto pButton::setVisible(bool visible) -> void { pWidget::setVisible(visible); _setState(); } // auto pButton::onActivate() -> void { self().doActivate(); } //BUTTON cannot draw borderless buttons on its own //BS_OWNERDRAW will send WM_DRAWITEM; but will disable hot-tracking notifications //to gain hot-tracking plus borderless buttons; BUTTON is superclassed and WM_PAINT is hijacked //note: letting hiro paint bordered buttons will lose the fade animations on Vista+; //however, it will allow placing icons immediately next to text (original forces icon left alignment) auto pButton::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_KEYDOWN) { //very useful for MessageDialog self().doActivate(); } if(msg == WM_PAINT) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); auto buttonState = Button_GetState(hwnd); Button_CustomDraw(hwnd, ps, state().bordered, false, self().enabled(true), buttonState, self().font(true), state().icon, state().orientation, state().text ); EndPaint(hwnd, &ps); return false; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } // auto pButton::_setState() -> void { InvalidateRect(hwnd, 0, false); } //this function is designed to be used with Button, CheckButton, and RadioButton auto Button_CustomDraw(HWND hwnd, PAINTSTRUCT& ps, bool bordered, bool checked, bool enabled, u32 state, const Font& font, const image& icon, Orientation orientation, const string& text) -> void { RECT rc; GetClientRect(hwnd, &rc); Geometry geometry{rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top}, iconGeometry, textGeometry; if(icon) iconGeometry.setSize({(s32)icon.width(), (s32)icon.height()}); if(text) textGeometry.setSize(pFont::size(font, text)); Position position; Size size; switch(orientation) { case Orientation::Horizontal: size = {iconGeometry.width() + (icon && text ? 5 : 0) + textGeometry.width(), max(iconGeometry.height(), textGeometry.height())}; position = {(geometry.width() - size.width()) / 2, (geometry.height() - size.height()) / 2}; iconGeometry.setPosition({position.x(), position.y() + (size.height() - iconGeometry.height()) / 2}); textGeometry.setPosition({position.x() + size.width() - textGeometry.width(), position.y() + (size.height() - textGeometry.height()) / 2}); break; case Orientation::Vertical: size = {max(iconGeometry.width(), textGeometry.width()), iconGeometry.height() + (icon && text ? 5 : 0) + textGeometry.height()}; position = {(geometry.width() - size.width()) / 2, (geometry.height() - size.height()) / 2}; iconGeometry.setPosition({position.x() + (size.width() - iconGeometry.width()) / 2, position.y()}); textGeometry.setPosition({position.x() + (size.width() - textGeometry.width()) / 2, position.y() + size.height() - textGeometry.height()}); break; } if(auto theme = OpenThemeData(hwnd, L"BUTTON")) { DrawThemeParentBackground(hwnd, ps.hdc, &rc); u32 flags = 0; if(state & BST_PUSHED || checked) flags = PBS_PRESSED; else if(state & BST_HOT) flags = PBS_HOT; else if(bordered) flags = enabled ? PBS_NORMAL : PBS_DISABLED; if(bordered || flags) DrawThemeBackground(theme, ps.hdc, BP_PUSHBUTTON, flags, &rc, &ps.rcPaint); CloseThemeData(theme); } else { //Windows Classic FillRect(ps.hdc, &rc, GetSysColorBrush(COLOR_3DFACE)); u32 flags = (state & BST_PUSHED || checked) ? DFCS_PUSHED : 0; if(bordered || flags) DrawFrameControl(ps.hdc, &rc, DFC_BUTTON, DFCS_BUTTONPUSH | flags | (enabled ? 0 : DFCS_INACTIVE)); } if(GetFocus() == hwnd) { s32 offset = state ? 4 : 1; RECT rcFocus{rc.left + offset, rc.top + offset, rc.right - offset, rc.bottom - offset}; if(!(state & BST_PUSHED) && !(state & BST_HOT)) DrawFocusRect(ps.hdc, &rcFocus); } if(icon) { HDC hdcSource = CreateCompatibleDC(ps.hdc); auto bitmap = CreateBitmap(icon); SelectBitmap(hdcSource, bitmap); BLENDFUNCTION blend{AC_SRC_OVER, 0, (BYTE)(IsWindowEnabled(hwnd) ? 255 : 128), AC_SRC_ALPHA}; AlphaBlend( ps.hdc, iconGeometry.x(), iconGeometry.y(), icon.width(), icon.height(), hdcSource, 0, 0, icon.width(), icon.height(), blend ); DeleteObject(bitmap); DeleteDC(hdcSource); } if(text) { utf16_t wText(text); SetBkMode(ps.hdc, TRANSPARENT); SetTextColor(ps.hdc, GetSysColor(IsWindowEnabled(hwnd) ? COLOR_BTNTEXT : COLOR_GRAYTEXT)); auto hFont = pFont::create(font); SelectObject(ps.hdc, hFont); RECT rcText{ LONG(textGeometry.x()), LONG(textGeometry.y()), LONG(textGeometry.x() + textGeometry.width()), LONG(textGeometry.y() + textGeometry.height()) }; DrawText(ps.hdc, wText, -1, &rcText, DT_NOPREFIX | DT_END_ELLIPSIS); DeleteObject(hFont); } } } #endif ares-126/hiro/windows/widget/button.hpp000066400000000000000000000011631415063341600202640ustar00rootroot00000000000000#if defined(Hiro_Button) namespace hiro { struct pButton : pWidget { Declare(Button, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto onActivate() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; auto _setState() -> void; }; } #endif ares-126/hiro/windows/widget/canvas.cpp000066400000000000000000000113321415063341600202160ustar00rootroot00000000000000#if defined(Hiro_Canvas) namespace hiro { auto pCanvas::construct() -> void { hwnd = CreateWindow(L"hiroWidget", L"", WS_CHILD, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); update(); } auto pCanvas::destruct() -> void { DestroyWindow(hwnd); } auto pCanvas::minimumSize() const -> Size { if(auto& icon = state().icon) return {(s32)icon.width(), (s32)icon.height()}; return {0, 0}; } auto pCanvas::setAlignment(Alignment) -> void { update(); } auto pCanvas::setColor(Color color) -> void { update(); } auto pCanvas::setDroppable(bool droppable) -> void { DragAcceptFiles(hwnd, droppable); } auto pCanvas::setFocusable(bool focusable) -> void { //handled by windowProc() } auto pCanvas::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); update(); } auto pCanvas::setGradient(Gradient gradient) -> void { update(); } auto pCanvas::setIcon(const image& icon) -> void { update(); } auto pCanvas::update() -> void { _rasterize(); _redraw(); } // auto pCanvas::doMouseLeave() -> void { return self().doMouseLeave(); } auto pCanvas::doMouseMove(s32 x, s32 y) -> void { return self().doMouseMove({x, y}); } auto pCanvas::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_DROPFILES) { if(auto paths = DropPaths(wparam)) self().doDrop(paths); return false; } if(msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN || msg == WM_KEYUP || msg == WM_SYSKEYUP) { if(self().focusable()) return true; } if(msg == WM_GETDLGCODE) { return DLGC_STATIC | DLGC_WANTCHARS; } if(msg == WM_ERASEBKGND || msg == WM_PAINT) { _paint(); return msg == WM_ERASEBKGND; } if(msg == WM_LBUTTONDOWN) { if(self().focusable()) setFocused(); } return pWidget::windowProc(hwnd, msg, wparam, lparam); } // auto pCanvas::_paint() -> void { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); s32 sx = 0, sy = 0, dx = 0, dy = 0; s32 width = this->width; s32 height = this->height; auto geometry = self().geometry(); auto alignment = state().alignment ? state().alignment : Alignment{0.5, 0.5}; if(width <= geometry.width()) { sx = 0; dx = (geometry.width() - width) * alignment.horizontal(); } else { sx = (width - geometry.width()) * alignment.horizontal(); dx = 0; width = geometry.width(); } if(height <= geometry.height()) { sy = 0; dy = (geometry.height() - height) * alignment.vertical(); } else { sy = (height - geometry.height()) * alignment.vertical(); dy = 0; height = geometry.height(); } HDC hdc = CreateCompatibleDC(ps.hdc); BITMAPINFO bmi{}; bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = BI_RGB; bmi.bmiHeader.biWidth = width; bmi.bmiHeader.biHeight = -height; //GDI stores bitmaps upside now; negative height flips bitmap bmi.bmiHeader.biSizeImage = width * height * sizeof(u32); void* bits = nullptr; HBITMAP bitmap = CreateDIBSection(hdc, &bmi, DIB_RGB_COLORS, &bits, nullptr, 0); if(bits) { for(u32 y : range(height)) { auto source = (const u8*)pixels.data() + (sy + y) * this->width * sizeof(u32) + sx * sizeof(u32); auto target = (u8*)bits + y * width * sizeof(u32); for(u32 x : range(width)) { target[0] = (source[0] * source[3]) / 255; target[1] = (source[1] * source[3]) / 255; target[2] = (source[2] * source[3]) / 255; target[3] = (source[3]); source += 4, target += 4; } } } SelectObject(hdc, bitmap); RECT rc; GetClientRect(hwnd, &rc); DrawThemeParentBackground(hwnd, ps.hdc, &rc); BLENDFUNCTION bf{AC_SRC_OVER, 0, (BYTE)255, AC_SRC_ALPHA}; AlphaBlend(ps.hdc, dx, dy, width, height, hdc, 0, 0, width, height, bf); DeleteObject(bitmap); DeleteDC(hdc); EndPaint(hwnd, &ps); } auto pCanvas::_rasterize() -> void { if(auto& icon = state().icon) { width = icon.width(); height = icon.height(); } else { width = self().geometry().width(); height = self().geometry().height(); } if(width <= 0 || height <= 0) return; pixels.reset(); pixels.resize(width * height); if(auto& icon = state().icon) { memory::copy(pixels.data(), icon.data(), width * height); } else if(auto& gradient = state().gradient) { auto& colors = gradient.state.colors; image fill; fill.allocate(width, height); fill.gradient(colors[0].value(), colors[1].value(), colors[2].value(), colors[3].value()); memory::copy(pixels.data(), fill.data(), fill.size()); } else { u32 color = state().color.value(); for(auto& pixel : pixels) pixel = color; } } auto pCanvas::_redraw() -> void { InvalidateRect(hwnd, 0, false); } } #endif ares-126/hiro/windows/widget/canvas.hpp000066400000000000000000000014631415063341600202270ustar00rootroot00000000000000#if defined(Hiro_Canvas) namespace hiro { struct pCanvas : pWidget { Declare(Canvas, Widget) auto minimumSize() const -> Size override; auto setAlignment(Alignment) -> void; auto setColor(Color color) -> void; auto setDroppable(bool droppable) -> void override; auto setFocusable(bool focusable) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setGradient(Gradient gradient) -> void; auto setIcon(const image& icon) -> void; auto update() -> void; auto doMouseLeave() -> void override; auto doMouseMove(s32 x, s32 y) -> void override; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; auto _paint() -> void; auto _rasterize() -> void; auto _redraw() -> void; vector pixels; s32 width = 0; s32 height = 0; }; } #endif ares-126/hiro/windows/widget/check-button.cpp000066400000000000000000000050731415063341600213360ustar00rootroot00000000000000#if defined(Hiro_CheckButton) namespace hiro { auto pCheckButton::construct() -> void { hwnd = CreateWindow(L"BUTTON", L"", WS_CHILD | WS_TABSTOP | BS_CHECKBOX | BS_PUSHLIKE, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); _setState(); setChecked(state().checked); } auto pCheckButton::destruct() -> void { DestroyWindow(hwnd); } auto pCheckButton::minimumSize() const -> Size { Size icon = {(s32)state().icon.width(), (s32)state().icon.height()}; Size text = state().text ? pFont::size(self().font(true), state().text) : Size{}; Size size; if(state().orientation == Orientation::Horizontal) { size.setWidth(icon.width() + (icon && text ? 5 : 0) + text.width()); size.setHeight(max(icon.height(), text.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(icon.width(), text.width())); size.setHeight(icon.height() + (icon && text ? 5 : 0) + text.height()); } size.setHeight(max(size.height(), pFont::size(self().font(true), " ").height())); return {size.width() + (state().bordered && text ? 20 : 10), size.height() + 10}; } auto pCheckButton::setBordered(bool bordered) -> void { _setState(); } auto pCheckButton::setChecked(bool checked) -> void { SendMessage(hwnd, BM_SETCHECK, (WPARAM)checked, 0); } auto pCheckButton::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); _setState(); } auto pCheckButton::setFont(const Font& font) -> void { pWidget::setFont(font); _setState(); } auto pCheckButton::setIcon(const image& icon) -> void { _setState(); } auto pCheckButton::setOrientation(Orientation orientation) -> void { _setState(); } auto pCheckButton::setText(const string& text) -> void { _setState(); } auto pCheckButton::setVisible(bool visible) -> void { pWidget::setVisible(visible); _setState(); } // auto pCheckButton::onToggle() -> void { state().checked = !state().checked; setChecked(state().checked); self().doToggle(); } auto pCheckButton::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_PAINT) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); auto buttonState = Button_GetState(hwnd); Button_CustomDraw(hwnd, ps, state().bordered, state().checked, self().enabled(true), buttonState, self().font(true), state().icon, state().orientation, state().text ); EndPaint(hwnd, &ps); return false; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } // auto pCheckButton::_setState() -> void { InvalidateRect(hwnd, 0, false); } } #endif ares-126/hiro/windows/widget/check-button.hpp000066400000000000000000000012511415063341600213350ustar00rootroot00000000000000#if defined(Hiro_CheckButton) namespace hiro { struct pCheckButton : pWidget { Declare(CheckButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setChecked(bool checked) -> void; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto onToggle() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; auto _setState() -> void; }; } #endif ares-126/hiro/windows/widget/check-label.cpp000066400000000000000000000016351415063341600211020ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) namespace hiro { auto pCheckLabel::construct() -> void { hwnd = CreateWindow( L"BUTTON", L"", WS_CHILD | WS_TABSTOP | BS_CHECKBOX, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); setChecked(state().checked); setText(state().text); } auto pCheckLabel::destruct() -> void { DestroyWindow(hwnd); } auto pCheckLabel::minimumSize() const -> Size { auto size = pFont::size(self().font(true), state().text ? state().text : " "); return {size.width() + 20_sx, size.height() + 4_sy}; } auto pCheckLabel::setChecked(bool checked) -> void { SendMessage(hwnd, BM_SETCHECK, (WPARAM)checked, 0); } auto pCheckLabel::setText(const string& text) -> void { SetWindowText(hwnd, utf16_t(text)); } auto pCheckLabel::onToggle() -> void { state().checked = !state().checked; setChecked(state().checked); self().doToggle(); } } #endif ares-126/hiro/windows/widget/check-label.hpp000066400000000000000000000004321415063341600211010ustar00rootroot00000000000000#if defined(Hiro_CheckLabel) namespace hiro { struct pCheckLabel : pWidget { Declare(CheckLabel, Widget) auto minimumSize() const -> Size override; auto setChecked(bool checked) -> void; auto setText(const string& text) -> void; auto onToggle() -> void; }; } #endif ares-126/hiro/windows/widget/combo-button-item.cpp000066400000000000000000000017041415063341600223110ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { auto pComboButtonItem::construct() -> void { } auto pComboButtonItem::destruct() -> void { } auto pComboButtonItem::setIcon(const image& icon) -> void { //unsupported } auto pComboButtonItem::setSelected() -> void { if(auto parent = _parent()) { parent->lock(); SendMessage(parent->hwnd, CB_SETCURSEL, self().offset(), 0); parent->unlock(); } } auto pComboButtonItem::setText(const string& text) -> void { if(auto parent = _parent()) { parent->lock(); SendMessage(parent->hwnd, CB_DELETESTRING, self().offset(), 0); SendMessage(parent->hwnd, CB_INSERTSTRING, self().offset(), (LPARAM)(wchar_t*)utf16_t(state().text)); if(state().selected) setSelected(); parent->unlock(); } } auto pComboButtonItem::_parent() -> maybe { if(auto parent = self().parentComboButton()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/windows/widget/combo-button-item.hpp000066400000000000000000000004471415063341600223210ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButtonItem : pObject { Declare(ComboButtonItem, Object) auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/windows/widget/combo-button.cpp000066400000000000000000000046071415063341600213620ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { auto pComboButton::construct() -> void { hwnd = CreateWindow( L"COMBOBOX", L"", WS_CHILD | WS_TABSTOP | CBS_DROPDOWNLIST | CBS_HASSTRINGS, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); for(auto& item : state().items) append(item); } auto pComboButton::destruct() -> void { DestroyWindow(hwnd); } auto pComboButton::append(sComboButtonItem item) -> void { lock(); SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM)(wchar_t*)utf16_t(item->state.text)); if(item->state.selected) SendMessage(hwnd, CB_SETCURSEL, item->offset(), 0); if(SendMessage(hwnd, CB_GETCURSEL, 0, 0) == CB_ERR) item->setSelected(); unlock(); } auto pComboButton::minimumSize() const -> Size { s32 width = 0; for(auto& item : state().items) { width = max(width, pFont::size(hfont, item->state.text).width()); } return {width + 24_sx, pFont::size(hfont, " ").height() + 10_sy}; } auto pComboButton::remove(sComboButtonItem item) -> void { lock(); SendMessage(hwnd, CB_DELETESTRING, item->offset(), 0); if(item->state.selected) SendMessage(hwnd, CB_SETCURSEL, 0, 0); unlock(); } auto pComboButton::reset() -> void { SendMessage(hwnd, CB_RESETCONTENT, 0, 0); } //Windows overrides the height parameter for a ComboButton's SetWindowPos to be the drop-down list height. //the canonical way to set the actual height is through CB_SETITEMHEIGHT. However, doing so is bugged. //the ComboButton will end up not being painted for ~500ms after calling ShowWindow(hwnd, SW_NORMAL) on it. //thus, implementing windows that use multiple pages of controls via toggling visibility will flicker heavily. //as a result, the best we can do is center the actual widget within the requested space. auto pComboButton::setGeometry(Geometry geometry) -> void { //since the ComboButton has a fixed height, it will always be the same, even before calling setGeometry() once. RECT rc; GetWindowRect(hwnd, &rc); geometry.setY(geometry.y() + (geometry.height() - (rc.bottom - rc.top))); pWidget::setGeometry({geometry.x(), geometry.y(), geometry.width(), 1}); } auto pComboButton::onChange() -> void { s32 offset = SendMessage(hwnd, CB_GETCURSEL, 0, 0); if(offset == CB_ERR) return; for(auto& item : state().items) item->state.selected = false; if(auto item = self().item(offset)) item->setSelected(); self().doChange(); } } #endif ares-126/hiro/windows/widget/combo-button.hpp000066400000000000000000000005751415063341600213670ustar00rootroot00000000000000#if defined(Hiro_ComboButton) namespace hiro { struct pComboButton : pWidget { Declare(ComboButton, Widget) auto append(sComboButtonItem item) -> void; auto minimumSize() const -> Size override; auto remove(sComboButtonItem item) -> void; auto reset() -> void override; auto setGeometry(Geometry geometry) -> void override; auto onChange() -> void; }; } #endif ares-126/hiro/windows/widget/frame.cpp000066400000000000000000000030371415063341600200400ustar00rootroot00000000000000#if defined(Hiro_Frame) namespace hiro { auto pFrame::construct() -> void { hwnd = CreateWindowEx( //WS_EX_TRANSPARENT fixes rendering issues caused by Windows using WS_CLIPCHILDREN WS_EX_TRANSPARENT, L"BUTTON", L"", WS_CHILD | BS_GROUPBOX, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); setText(state().text); } auto pFrame::destruct() -> void { DestroyWindow(hwnd); } auto pFrame::append(sSizable sizable) -> void { } auto pFrame::remove(sSizable sizable) -> void { } auto pFrame::setEnabled(bool enabled) -> void { if(auto& sizable = state().sizable) sizable->setEnabled(sizable->enabled()); pWidget::setEnabled(enabled); } auto pFrame::setGeometry(Geometry geometry) -> void { bool empty = !state().text; auto size = pFont::size(hfont, state().text); //offsets are based on the default Windows 10 theme pWidget::setGeometry({ geometry.x(), geometry.y() - (empty ? 6_sy : 3_sy), geometry.width(), geometry.height() + (empty ? 7_sy : 4_sy) }); if(auto& sizable = state().sizable) { sizable->setGeometry({ geometry.x() + 5_sx, geometry.y() + (empty ? 5_sy : size.height()), geometry.width() - 10_sx, geometry.height() - (empty ? 10_sy : size.height() + 5_sy) }); } } auto pFrame::setText(const string& text) -> void { SetWindowText(hwnd, utf16_t(text)); } auto pFrame::setVisible(bool visible) -> void { if(auto& sizable = state().sizable) sizable->setVisible(sizable->visible()); pWidget::setVisible(visible); } } #endif ares-126/hiro/windows/widget/frame.hpp000066400000000000000000000006071415063341600200450ustar00rootroot00000000000000#if defined(Hiro_Frame) namespace hiro { struct pFrame : pWidget { Declare(Frame, Widget) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setEnabled(bool enabled) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; }; } #endif ares-126/hiro/windows/widget/hex-edit.cpp000066400000000000000000000146431415063341600204620ustar00rootroot00000000000000#if defined(Hiro_HexEdit) namespace hiro { auto pHexEdit::construct() -> void { hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_TABSTOP | ES_AUTOHSCROLL | ES_READONLY | ES_MULTILINE | ES_WANTRETURN, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); scrollBar = CreateWindowEx( 0, L"SCROLLBAR", L"", WS_VISIBLE | WS_CHILD | SBS_VERT, 0, 0, 0, 0, hwnd, nullptr, GetModuleHandle(0), 0 ); SetWindowLongPtr(scrollBar, GWLP_USERDATA, (LONG_PTR)&reference); pWidget::construct(); setAddress(state().address); setBackgroundColor(state().backgroundColor); setLength(state().length); update(); PostMessage(hwnd, EM_SETSEL, 10, 10); } auto pHexEdit::destruct() -> void { DestroyWindow(hwnd); } auto pHexEdit::setAddress(u32 address) -> void { SetScrollPos(scrollBar, SB_CTL, address / state().columns, true); update(); } auto pHexEdit::setBackgroundColor(Color color) -> void { if(backgroundBrush) DeleteObject(backgroundBrush); backgroundBrush = CreateSolidBrush(color ? CreateRGB(color) : GetSysColor(COLOR_WINDOW)); } auto pHexEdit::setColumns(u32 columns) -> void { update(); } auto pHexEdit::setForegroundColor(Color color) -> void { } auto pHexEdit::setLength(u32 length) -> void { SetScrollRange(scrollBar, SB_CTL, 0, rowsScrollable(), true); EnableWindow(scrollBar, rowsScrollable() > 0); update(); } auto pHexEdit::setRows(u32 rows) -> void { update(); } auto pHexEdit::update() -> void { if(!state().onRead) { SetWindowText(hwnd, L""); return; } u32 cursorPosition = Edit_GetSel(hwnd); string output; u32 address = state().address; for(auto row : range(state().rows)) { output.append(hex(address, 8L)); output.append(" "); string hexdata; string ansidata = " "; for(auto column : range(state().columns)) { if(address < state().length) { u8 data = self().doRead(address++); hexdata.append(hex(data, 2L)); hexdata.append(" "); ansidata.append(data >= 0x20 && data <= 0x7e ? (char)data : '.'); } else { hexdata.append(" "); ansidata.append(" "); } } output.append(hexdata); output.append(ansidata); if(address >= state().length) break; if(row != state().rows - 1) output.append("\r\n"); } SetWindowText(hwnd, utf16_t(output)); Edit_SetSel(hwnd, LOWORD(cursorPosition), HIWORD(cursorPosition)); } auto pHexEdit::keyPress(u32 scancode) -> bool { if(!state().onRead) return false; s32 position = LOWORD(Edit_GetSel(hwnd)); s32 lineWidth = 10 + (state().columns * 3) + 1 + state().columns + 2; s32 cursorY = position / lineWidth; s32 cursorX = position % lineWidth; if(scancode == VK_HOME) { s32 offset = cursorY * lineWidth + 10; Edit_SetSel(hwnd, offset, offset); return true; } if(scancode == VK_END) { s32 offset = cursorY * lineWidth + 57; Edit_SetSel(hwnd, offset, offset); return true; } if(scancode == VK_UP) { if(cursorY > 0) return false; scrollTo(scrollPosition() - 1); return true; } if(scancode == VK_DOWN) { if(cursorY >= rows() - 1) return true; if(cursorY < state().rows - 1) return false; scrollTo(scrollPosition() + 1); return true; } if(scancode == VK_PRIOR) { scrollTo(scrollPosition() - state().rows); return true; } if(scancode == VK_NEXT) { scrollTo(scrollPosition() + state().rows); return true; } //convert scancode to hex nibble if(scancode >= '0' && scancode <= '9') scancode = scancode - '0'; else if(scancode >= 'A' && scancode <= 'F') scancode = scancode - 'A' + 10; else if(scancode >= 'a' && scancode <= 'f') scancode = scancode - 'a' + 10; else return false; if(cursorX >= 10) { //not on an address cursorX -= 10; if((cursorX % 3) != 2) { //not on a space bool cursorNibble = (cursorX % 3) == 1; //0 = high, 1 = low cursorX /= 3; if(cursorX < state().columns) { //not in ANSI region u32 address = state().address + (cursorY * state().columns + cursorX); if(address >= state().length) return false; //do not edit past end of data u8 data = self().doRead(address); //write modified value if(cursorNibble == 1) { data = (data & 0xf0) | (scancode << 0); } else { data = (data & 0x0f) | (scancode << 4); } self().doWrite(address, data); //auto-advance cursor to next nibble or byte position++; if(cursorNibble && cursorX != state().columns - 1) position++; Edit_SetSel(hwnd, position, position); //refresh output to reflect modified data update(); } } } return true; } auto pHexEdit::rows() -> s32 { return (max(1u, state().length) + state().columns - 1) / state().columns; } auto pHexEdit::rowsScrollable() -> s32 { return max(0u, rows() - state().rows); } auto pHexEdit::scrollPosition() -> s32 { return state().address / state().columns; } auto pHexEdit::scrollTo(s32 position) -> void { if(position > rowsScrollable()) position = rowsScrollable(); if(position < 0) position = 0; if(position == scrollPosition()) return; self().setAddress(position * state().columns); } auto pHexEdit::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_KEYDOWN) { if(keyPress(wparam)) return 0; } if(msg == WM_MOUSEWHEEL) { s32 offset = -((s16)HIWORD(wparam) / WHEEL_DELTA); scrollTo(scrollPosition() + offset); return true; } if(msg == WM_SIZE) { RECT rc; GetClientRect(hwnd, &rc); SetWindowPos(scrollBar, HWND_TOP, rc.right - 18, 0, 18, rc.bottom, SWP_SHOWWINDOW); } if(msg == WM_VSCROLL) { SCROLLINFO info{sizeof(SCROLLINFO)}; info.fMask = SIF_ALL; GetScrollInfo((HWND)lparam, SB_CTL, &info); switch(LOWORD(wparam)) { case SB_LEFT: info.nPos = info.nMin; break; case SB_RIGHT: info.nPos = info.nMax; break; case SB_LINELEFT: info.nPos--; break; case SB_LINERIGHT: info.nPos++; break; case SB_PAGELEFT: info.nPos -= info.nMax >> 3; break; case SB_PAGERIGHT: info.nPos += info.nMax >> 3; break; case SB_THUMBTRACK: info.nPos = info.nTrackPos; break; } info.fMask = SIF_POS; SetScrollInfo((HWND)lparam, SB_CTL, &info, TRUE); GetScrollInfo((HWND)lparam, SB_CTL, &info); //get clamped position scrollTo(info.nPos); return true; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } } #endif ares-126/hiro/windows/widget/hex-edit.hpp000066400000000000000000000012571415063341600204640ustar00rootroot00000000000000#if defined(Hiro_HexEdit) namespace hiro { struct pHexEdit : pWidget { Declare(HexEdit, Widget) auto setAddress(u32 address) -> void; auto setBackgroundColor(Color color) -> void; auto setColumns(u32 columns) -> void; auto setForegroundColor(Color color) -> void; auto setLength(u32 length) -> void; auto setRows(u32 rows) -> void; auto update() -> void; auto keyPress(u32 key) -> bool; auto rows() -> s32; auto rowsScrollable() -> s32; auto scrollPosition() -> s32; auto scrollTo(s32 position) -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; HWND scrollBar = nullptr; HBRUSH backgroundBrush = nullptr; }; } #endif ares-126/hiro/windows/widget/horizontal-scroll-bar.cpp000066400000000000000000000017061415063341600231760ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) namespace hiro { auto pHorizontalScrollBar::construct() -> void { hwnd = CreateWindow( L"SCROLLBAR", L"", WS_CHILD | WS_TABSTOP | SBS_HORZ, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pHorizontalScrollBar::destruct() -> void { DestroyWindow(hwnd); } auto pHorizontalScrollBar::minimumSize() const -> Size { return {0, 18_sy}; } auto pHorizontalScrollBar::setLength(u32 length) -> void { length += (length == 0); SetScrollRange(hwnd, SB_CTL, 0, length - 1, TRUE); } auto pHorizontalScrollBar::setPosition(u32 position) -> void { SetScrollPos(hwnd, SB_CTL, position, TRUE); } auto pHorizontalScrollBar::onChange(WPARAM wparam) -> void { u32 position = ScrollEvent(hwnd, wparam); if(position == state().position) return; state().position = position; self().doChange(); } } #endif ares-126/hiro/windows/widget/horizontal-scroll-bar.hpp000066400000000000000000000004751415063341600232050ustar00rootroot00000000000000#if defined(Hiro_HorizontalScrollBar) namespace hiro { struct pHorizontalScrollBar : pWidget { Declare(HorizontalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto onChange(WPARAM wparam) -> void; }; } #endif ares-126/hiro/windows/widget/horizontal-slider.cpp000066400000000000000000000032661415063341600224230ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) namespace hiro { auto pHorizontalSlider::construct() -> void { //TBS_TRANSPARENTBKGND is needed to render the transparent area of sliders properly inside TabFrame controls //however, this flag will prevent the slider control from redrawing during vertical window resizes when not inside TabFrame controls //this is because WM_PRINTCLIENT must be implemented in the parent window for this case //however, WM_PRINTCLIENT is incompatible with WM_PAINT, which is how most hiro custom widgets are rendered //as a hacky workaround, TBS_TRANSPARENTBKGND is enabled only when sliders are placed inside of TabFrame controls auto style = WS_CHILD | WS_TABSTOP | TBS_NOTICKS | TBS_BOTH | TBS_HORZ; if(self().parentTabFrame(true)) style |= TBS_TRANSPARENTBKGND; hwnd = CreateWindow(TRACKBAR_CLASS, L"", style, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pHorizontalSlider::destruct() -> void { DestroyWindow(hwnd); } auto pHorizontalSlider::minimumSize() const -> Size { return {0, 25_sy}; } auto pHorizontalSlider::setLength(u32 length) -> void { length += (length == 0); SendMessage(hwnd, TBM_SETRANGE, (WPARAM)true, (LPARAM)MAKELONG(0, length - 1)); SendMessage(hwnd, TBM_SETPAGESIZE, 0, (LPARAM)(length >> 3)); } auto pHorizontalSlider::setPosition(u32 position) -> void { SendMessage(hwnd, TBM_SETPOS, (WPARAM)true, (LPARAM)position); } auto pHorizontalSlider::onChange() -> void { u32 position = SendMessage(hwnd, TBM_GETPOS, 0, 0); if(position == state().position) return; state().position = position; self().doChange(); } } #endif ares-126/hiro/windows/widget/horizontal-slider.hpp000066400000000000000000000004471415063341600224260ustar00rootroot00000000000000#if defined(Hiro_HorizontalSlider) namespace hiro { struct pHorizontalSlider : pWidget { Declare(HorizontalSlider, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto onChange() -> void; }; } #endif ares-126/hiro/windows/widget/label.cpp000066400000000000000000000062501415063341600200250ustar00rootroot00000000000000#if defined(Hiro_Label) namespace hiro { //warning: WS_CLIPSIBLINGS flag will prevent Label widgets from rendering inside of Frame widgets auto pLabel::construct() -> void { hwnd = CreateWindow(L"hiroWidget", L"", WS_CHILD, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); setText(state().text); } auto pLabel::destruct() -> void { DestroyWindow(hwnd); } auto pLabel::minimumSize() const -> Size { auto size = pFont::size(self().font(true), state().text ? state().text : " "); return {size.width(), size.height()}; } auto pLabel::setAlignment(Alignment alignment) -> void { InvalidateRect(hwnd, 0, false); } auto pLabel::setBackgroundColor(Color color) -> void { InvalidateRect(hwnd, 0, false); } auto pLabel::setForegroundColor(Color color) -> void { InvalidateRect(hwnd, 0, false); } auto pLabel::setText(const string& text) -> void { InvalidateRect(hwnd, 0, false); } auto pLabel::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_GETDLGCODE) { return DLGC_STATIC | DLGC_WANTCHARS; } if(msg == WM_ERASEBKGND || msg == WM_PAINT) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); RECT rc; GetClientRect(hwnd, &rc); auto hdcMemory = CreateCompatibleDC(ps.hdc); auto hbmMemory = CreateCompatibleBitmap(ps.hdc, rc.right - rc.left, rc.bottom - rc.top); SelectObject(hdcMemory, hbmMemory); if(auto color = state().backgroundColor) { auto brush = CreateSolidBrush(CreateRGB(color)); FillRect(hdcMemory, &rc, brush); DeleteObject(brush); } else if(self().parentTabFrame(true)) { DrawThemeParentBackground(hwnd, hdcMemory, &rc); } else if(auto window = self().parentWindow(true)) { if(auto color = window->backgroundColor()) { auto brush = CreateSolidBrush(CreateRGB(color)); FillRect(hdcMemory, &rc, brush); DeleteObject(brush); } else { DrawThemeParentBackground(hwnd, hdcMemory, &rc); } } utf16_t text(state().text); SetBkMode(hdcMemory, TRANSPARENT); SelectObject(hdcMemory, hfont); DrawText(hdcMemory, text, -1, &rc, DT_CALCRECT | DT_END_ELLIPSIS); u32 height = rc.bottom; GetClientRect(hwnd, &rc); rc.top = (rc.bottom - height) / 2; rc.bottom = rc.top + height; u32 horizontalAlignment = DT_CENTER; if(state().alignment.horizontal() < 0.333) horizontalAlignment = DT_LEFT; if(state().alignment.horizontal() > 0.666) horizontalAlignment = DT_RIGHT; u32 verticalAlignment = DT_VCENTER; if(state().alignment.vertical() < 0.333) verticalAlignment = DT_TOP; if(state().alignment.vertical() > 0.666) verticalAlignment = DT_BOTTOM; if(auto color = state().foregroundColor) { SetTextColor(hdcMemory, CreateRGB(color)); } DrawText(hdcMemory, text, -1, &rc, DT_END_ELLIPSIS | horizontalAlignment | verticalAlignment); GetClientRect(hwnd, &rc); BitBlt(ps.hdc, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, hdcMemory, 0, 0, SRCCOPY); DeleteObject(hbmMemory); DeleteObject(hdcMemory); EndPaint(hwnd, &ps); return msg == WM_ERASEBKGND; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } } #endif ares-126/hiro/windows/widget/label.hpp000066400000000000000000000006431415063341600200320ustar00rootroot00000000000000#if defined(Hiro_Label) namespace hiro { struct pLabel : pWidget { Declare(Label, Widget) auto minimumSize() const -> Size override; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; }; } #endif ares-126/hiro/windows/widget/line-edit.cpp000066400000000000000000000035161415063341600206220ustar00rootroot00000000000000#if defined(Hiro_LineEdit) namespace hiro { auto pLineEdit::construct() -> void { hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_TABSTOP | ES_AUTOHSCROLL | ES_AUTOVSCROLL, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setText(state().text); } auto pLineEdit::destruct() -> void { if(backgroundBrush) { DeleteObject(backgroundBrush); backgroundBrush = 0; } DestroyWindow(hwnd); } auto pLineEdit::minimumSize() const -> Size { auto size = pFont::size(hfont, state().text ? state().text : " "); return {size.width() + 12, size.height() + 10}; } auto pLineEdit::setBackgroundColor(Color color) -> void { if(backgroundBrush) { DeleteObject(backgroundBrush); backgroundBrush = 0; } backgroundBrush = CreateSolidBrush(color ? CreateRGB(color) : GetSysColor(COLOR_WINDOW)); InvalidateRect(hwnd, 0, true); } auto pLineEdit::setEditable(bool editable) -> void { SendMessage(hwnd, EM_SETREADONLY, editable == false, 0); } auto pLineEdit::setForegroundColor(Color color) -> void { InvalidateRect(hwnd, 0, true); } auto pLineEdit::setText(const string& text) -> void { auto lock = acquire(); SetWindowText(hwnd, utf16_t(text)); } // auto pLineEdit::onChange() -> void { state().text = _text(); if(!locked()) self().doChange(); } auto pLineEdit::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_KEYDOWN && wparam == VK_RETURN) { self().doActivate(); } return pWidget::windowProc(hwnd, msg, wparam, lparam); } // auto pLineEdit::_text() -> string { u32 length = GetWindowTextLength(hwnd); wchar_t text[length + 1]; GetWindowText(hwnd, text, length + 1); text[length] = 0; return (const char*)utf8_t(text); } } #endif ares-126/hiro/windows/widget/line-edit.hpp000066400000000000000000000010001415063341600206110ustar00rootroot00000000000000#if defined(Hiro_LineEdit) namespace hiro { struct pLineEdit : pWidget { Declare(LineEdit, Widget) auto minimumSize() const -> Size override; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(Color color) -> void; auto setText(const string& text) -> void; auto onChange() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; auto _text() -> string; HBRUSH backgroundBrush = nullptr; }; } #endif ares-126/hiro/windows/widget/progress-bar.cpp000066400000000000000000000012211415063341600213450ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) namespace hiro { auto pProgressBar::construct() -> void { hwnd = CreateWindow(PROGRESS_CLASS, L"", WS_CHILD | PBS_SMOOTH, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); SendMessage(hwnd, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); SendMessage(hwnd, PBM_SETSTEP, MAKEWPARAM(1, 0), 0); setPosition(state().position); } auto pProgressBar::destruct() -> void { DestroyWindow(hwnd); } auto pProgressBar::minimumSize() const -> Size { return {0, 23}; } auto pProgressBar::setPosition(u32 position) -> void { SendMessage(hwnd, PBM_SETPOS, (WPARAM)position, 0); } } #endif ares-126/hiro/windows/widget/progress-bar.hpp000066400000000000000000000003261415063341600213570ustar00rootroot00000000000000#if defined(Hiro_ProgressBar) namespace hiro { struct pProgressBar : pWidget { Declare(ProgressBar, Widget) auto minimumSize() const -> Size override; auto setPosition(u32 position) -> void; }; } #endif ares-126/hiro/windows/widget/radio-button.cpp000066400000000000000000000065161415063341600213620ustar00rootroot00000000000000#if defined(Hiro_RadioButton) namespace hiro { auto pRadioButton::construct() -> void { hwnd = CreateWindow(L"BUTTON", L"", WS_CHILD | WS_TABSTOP | BS_CHECKBOX | BS_PUSHLIKE, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); setGroup(state().group); _setState(); } auto pRadioButton::destruct() -> void { DestroyWindow(hwnd); } auto pRadioButton::minimumSize() const -> Size { Size icon = {(s32)state().icon.width(), (s32)state().icon.height()}; Size text = state().text ? pFont::size(self().font(true), state().text) : Size{}; Size size; if(state().orientation == Orientation::Horizontal) { size.setWidth(icon.width() + (icon && text ? 5 : 0) + text.width()); size.setHeight(max(icon.height(), text.height())); } if(state().orientation == Orientation::Vertical) { size.setWidth(max(icon.width(), text.width())); size.setHeight(icon.height() + (icon && text ? 5 : 0) + text.height()); } size.setHeight(max(size.height(), pFont::size(self().font(true), " ").height())); return {size.width() + (state().bordered && text ? 20 : 10), size.height() + 10}; } auto pRadioButton::setBordered(bool bordered) -> void { _setState(); } auto pRadioButton::setChecked() -> void { if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { if(auto self = radioButton->self()) { SendMessage(self->hwnd, BM_SETCHECK, (WPARAM)(&self->reference == &reference), 0); } } } } } } auto pRadioButton::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); _setState(); } auto pRadioButton::setFont(const Font& font) -> void { pWidget::setFont(font); _setState(); } auto pRadioButton::setGroup(sGroup group) -> void { bool first = true; if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioButton = dynamic_cast(object.data())) { if(auto self = radioButton->self()) { SendMessage(self->hwnd, BM_SETCHECK, (WPARAM)(radioButton->state.checked = first), 0); first = false; } } } } } } auto pRadioButton::setIcon(const image& icon) -> void { _setState(); } auto pRadioButton::setOrientation(Orientation orientation) -> void { _setState(); } auto pRadioButton::setText(const string& text) -> void { _setState(); } auto pRadioButton::setVisible(bool visible) -> void { pWidget::setVisible(visible); _setState(); } // auto pRadioButton::onActivate() -> void { if(state().checked) return; self().setChecked(); self().doActivate(); } auto pRadioButton::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_PAINT) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); auto buttonState = Button_GetState(hwnd); Button_CustomDraw(hwnd, ps, state().bordered, state().checked, self().enabled(true), buttonState, self().font(true), state().icon, state().orientation, state().text ); EndPaint(hwnd, &ps); return false; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } // auto pRadioButton::_setState() -> void { InvalidateRect(hwnd, 0, false); } } #endif ares-126/hiro/windows/widget/radio-button.hpp000066400000000000000000000013171415063341600213610ustar00rootroot00000000000000#if defined(Hiro_RadioButton) namespace hiro { struct pRadioButton : pWidget { Declare(RadioButton, Widget) auto minimumSize() const -> Size override; auto setBordered(bool bordered) -> void; auto setChecked() -> void; auto setEnabled(bool enabled) -> void override; auto setFont(const Font& font) -> void override; auto setGroup(sGroup group) -> void override; auto setIcon(const image& icon) -> void; auto setOrientation(Orientation orientation) -> void; auto setText(const string& text) -> void; auto setVisible(bool visible) -> void override; auto onActivate() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; auto _setState() -> void; }; } #endif ares-126/hiro/windows/widget/radio-label.cpp000066400000000000000000000033461415063341600211240ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) namespace hiro { auto pRadioLabel::construct() -> void { hwnd = CreateWindow( L"BUTTON", L"", WS_CHILD | WS_TABSTOP | BS_RADIOBUTTON, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)&reference); pWidget::construct(); setGroup(state().group); setText(state().text); } auto pRadioLabel::destruct() -> void { DestroyWindow(hwnd); } auto pRadioLabel::minimumSize() const -> Size { auto size = pFont::size(self().font(true), state().text ? state().text : " "); return {size.width() + 20_sx, size.height() + 4_sy}; } auto pRadioLabel::setChecked() -> void { if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioLabel = dynamic_cast(object.data())) { if(auto self = radioLabel->self()) { SendMessage(self->hwnd, BM_SETCHECK, (WPARAM)(&self->reference == &reference), 0); } } } } } } auto pRadioLabel::setGroup(sGroup group) -> void { bool first = true; if(auto& group = state().group) { for(auto& weak : group->state.objects) { if(auto object = weak.acquire()) { if(auto radioLabel = dynamic_cast(object.data())) { if(auto self = radioLabel->self()) { SendMessage(self->hwnd, BM_SETCHECK, (WPARAM)(radioLabel->state.checked = first), 0); first = false; } } } } } } auto pRadioLabel::setText(const string& text) -> void { SetWindowText(hwnd, utf16_t(text)); } auto pRadioLabel::onActivate() -> void { if(state().checked) return; self().setChecked(); self().doActivate(); } } #endif ares-126/hiro/windows/widget/radio-label.hpp000066400000000000000000000005001415063341600211160ustar00rootroot00000000000000#if defined(Hiro_RadioLabel) namespace hiro { struct pRadioLabel : pWidget { Declare(RadioLabel, Widget) auto minimumSize() const -> Size override; auto setChecked() -> void; auto setGroup(sGroup group) -> void override; auto setText(const string& text) -> void; auto onActivate() -> void; }; } #endif ares-126/hiro/windows/widget/tab-frame-item.cpp000066400000000000000000000024161415063341600215400ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { auto pTabFrameItem::construct() -> void { } auto pTabFrameItem::destruct() -> void { } auto pTabFrameItem::append(sSizable sizable) -> void { if(auto parent = _parent()) { parent->_synchronizeSizable(); } } auto pTabFrameItem::remove(sSizable sizable) -> void { if(auto parent = _parent()) { parent->_synchronizeSizable(); } } auto pTabFrameItem::setClosable(bool closable) -> void { //unsupported } auto pTabFrameItem::setIcon(const image& icon) -> void { if(auto parent = _parent()) { parent->_buildImageList(); } } auto pTabFrameItem::setMovable(bool movable) -> void { //unsupported } auto pTabFrameItem::setSelected() -> void { if(auto parent = _parent()) { TabCtrl_SetCurSel(parent->hwnd, self().offset()); parent->_synchronizeSizable(); } } auto pTabFrameItem::setText(const string& text) -> void { if(auto parent = _parent()) { utf16_t wText(text); TCITEM tcItem; tcItem.mask = TCIF_TEXT; tcItem.pszText = (wchar_t*)wText; TabCtrl_SetItem(parent->hwnd, self().offset(), &tcItem); } } auto pTabFrameItem::_parent() -> maybe { if(auto parent = self().parentTabFrame()) { if(auto self = parent->self()) return *self; } return nothing; } } #endif ares-126/hiro/windows/widget/tab-frame-item.hpp000066400000000000000000000007011415063341600215400ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrameItem : pObject { Declare(TabFrameItem, Object) auto append(sSizable sizable) -> void; auto remove(sSizable sizable) -> void; auto setClosable(bool closable) -> void; auto setIcon(const image& icon) -> void; auto setMovable(bool movable) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; }; } #endif ares-126/hiro/windows/widget/tab-frame.cpp000066400000000000000000000074621415063341600206120ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { static auto CALLBACK TabFrame_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { if(auto tabFrame = (mTabFrame*)GetWindowLongPtr(hwnd, GWLP_USERDATA)) { if(auto self = tabFrame->self()) { return Shared_windowProc(self->defaultWindowProc, hwnd, msg, wparam, lparam); } } return DefWindowProc(hwnd, msg, wparam, lparam); } auto pTabFrame::construct() -> void { hwnd = CreateWindow( WC_TABCONTROL, L"", WS_CHILD | WS_TABSTOP, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)TabFrame_windowProc); for(auto& item : state().items) append(item); } auto pTabFrame::destruct() -> void { if(imageList) { ImageList_Destroy(imageList); imageList = nullptr; } DestroyWindow(hwnd); } auto pTabFrame::append(sTabFrameItem item) -> void { wchar_t text[] = L""; TCITEM tcItem; tcItem.mask = TCIF_TEXT; tcItem.pszText = text; TabCtrl_InsertItem(hwnd, item->offset(), &tcItem); if(auto self = item->self()) { self->setClosable(item->state.closable); self->setIcon(item->state.icon); self->setMovable(item->state.movable); self->setText(item->state.text); if(item->selected()) self->setSelected(); } _buildImageList(); _synchronizeSizable(); } auto pTabFrame::remove(sTabFrameItem item) -> void { TabCtrl_DeleteItem(hwnd, item->offset()); _buildImageList(); } auto pTabFrame::setEnabled(bool enabled) -> void { pWidget::setEnabled(enabled); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { if(auto self = sizable->self()) self->setEnabled(sizable->enabled()); } } } auto pTabFrame::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); geometry.setX(geometry.x() + 1); geometry.setY(geometry.y() + 21); geometry.setWidth(geometry.width() - 4); geometry.setHeight(geometry.height() - 23); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { sizable->setGeometry(geometry); } } } auto pTabFrame::setNavigation(Navigation navigation) -> void { //unsupported } auto pTabFrame::setVisible(bool visible) -> void { pWidget::setVisible(visible); for(auto& item : state().items) { if(auto& sizable = item->state.sizable) { if(auto self = sizable->self()) self->setVisible(sizable->visible(true)); } } } // auto pTabFrame::_buildImageList() -> void { u32 size = pFont::size(hfont, " ").height(); if(imageList) { ImageList_Destroy(imageList); imageList = nullptr; } imageList = ImageList_Create(size, size, ILC_COLOR32, 1, 0); for(auto& item : state().items) { ImageList_Append(imageList, item->state.icon, size); } TabCtrl_SetImageList(hwnd, imageList); for(auto offset : range(state().items.size())) { TCITEM tcItem; tcItem.mask = TCIF_IMAGE; tcItem.iImage = state().items[offset]->state.icon ? offset : -1; TabCtrl_SetItem(hwnd, offset, &tcItem); } } //hide all TabFrameItems, and then display the selected TabFrameItem auto pTabFrame::_synchronizeSizable() -> void { for(auto& item : state().items) { if(auto& sizable = item->state.sizable) sizable->setVisible(false); } //without this call, widgets from the previous tab will remain visible //alongside widgets from the newly selected tab for about one frame ... Application::processEvents(); u32 selected = TabCtrl_GetCurSel(hwnd); if(auto item = self().item(selected)) { if(auto& sizable = item->state.sizable) sizable->setVisible(true); } } auto pTabFrame::onChange() -> void { u32 selected = TabCtrl_GetCurSel(hwnd); for(auto& item : state().items) item->state.selected = false; if(auto item = self().item(selected)) item->state.selected = true; _synchronizeSizable(); self().doChange(); } } #endif ares-126/hiro/windows/widget/tab-frame.hpp000066400000000000000000000010451415063341600206060ustar00rootroot00000000000000#if defined(Hiro_TabFrame) namespace hiro { struct pTabFrame : pWidget { Declare(TabFrame, Widget) auto append(sTabFrameItem item) -> void; auto remove(sTabFrameItem item) -> void; auto setEnabled(bool enabled) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setNavigation(Navigation navigation) -> void; auto setVisible(bool visible) -> void override; auto onChange() -> void; auto _buildImageList() -> void; auto _synchronizeSizable() -> void; HIMAGELIST imageList = nullptr; }; } #endif ares-126/hiro/windows/widget/table-view-cell.cpp000066400000000000000000000031351415063341600217210ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewCell::construct() -> void { } auto pTableViewCell::destruct() -> void { } auto pTableViewCell::setAlignment(Alignment alignment) -> void { } auto pTableViewCell::setBackgroundColor(Color color) -> void { _repaint(); } auto pTableViewCell::setCheckable(bool checkable) -> void { _repaint(); } auto pTableViewCell::setChecked(bool checked) -> void { _repaint(); } auto pTableViewCell::setForegroundColor(Color color) -> void { _repaint(); } auto pTableViewCell::setIcon(const image& icon) -> void { _repaint(); } auto pTableViewCell::setText(const string& text) -> void { _repaint(); } auto pTableViewCell::_parent() -> maybe { if(auto parent = self().parentTableViewItem()) { if(auto self = parent->self()) return *self; } return nothing; } auto pTableViewCell::_repaint() -> void { if(auto parent = _parent()) { if(auto tableView = parent->_parent()) { //TableView uses a custom drawing routine; so we need to tell the control to repaint itself manually PostMessageOnce(tableView->_parentHandle(), AppMessage::TableView_doPaint, 0, (LPARAM)&tableView->reference); } } } auto pTableViewCell::_setState() -> void { if(auto item = _parent()) { if(auto parent = item->_parent()) { parent->lock(); wchar_t text[] = L""; LVITEM lvItem; lvItem.mask = LVIF_TEXT; lvItem.iItem = item->self().offset(); lvItem.iSubItem = self().offset(); lvItem.pszText = text; ListView_SetItem(parent->hwnd, &lvItem); parent->unlock(); } } } } #endif ares-126/hiro/windows/widget/table-view-cell.hpp000066400000000000000000000010441415063341600217230ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewCell : pObject { Declare(TableViewCell, Object) auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setText(const string& text) -> void; auto _parent() -> maybe; auto _repaint() -> void; auto _setState() -> void; }; } #endif ares-126/hiro/windows/widget/table-view-column.cpp000066400000000000000000000052111415063341600222740ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewColumn::construct() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); wchar_t text[] = L""; LVCOLUMN lvColumn{0}; lvColumn.mask = LVCF_FMT | LVCF_TEXT | LVCF_SUBITEM; lvColumn.fmt = LVCFMT_LEFT; lvColumn.iSubItem = self().offset(); lvColumn.pszText = text; ListView_InsertColumn(parent->hwnd, self().offset(), &lvColumn); _setState(); } } auto pTableViewColumn::destruct() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); ListView_DeleteColumn(parent->hwnd, self().offset()); } } auto pTableViewColumn::setActive() -> void { //unsupported } auto pTableViewColumn::setAlignment(Alignment alignment) -> void { } auto pTableViewColumn::setBackgroundColor(Color color) -> void { } auto pTableViewColumn::setEditable(bool editable) -> void { //unsupported } auto pTableViewColumn::setExpandable(bool expandable) -> void { } auto pTableViewColumn::setForegroundColor(Color color) -> void { } auto pTableViewColumn::setHorizontalAlignment(f64 alignment) -> void { _setState(); } auto pTableViewColumn::setIcon(const image& icon) -> void { _setState(); } auto pTableViewColumn::setResizable(bool resizable) -> void { _setState(); } auto pTableViewColumn::setSorting(Sort sorting) -> void { _setState(); } auto pTableViewColumn::setText(const string& text) -> void { _setState(); } auto pTableViewColumn::setVerticalAlignment(f64 alignment) -> void { } auto pTableViewColumn::setWidth(s32 width) -> void { _setState(); } auto pTableViewColumn::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto self = parent->self()) return *self; } return {}; } auto pTableViewColumn::_setState() -> void { if(auto parent = _parent()) { auto lock = parent->acquire(); parent->_setIcons(); string text = state().text; if(state().sorting == Sort::Ascending ) text.append(" ^"); if(state().sorting == Sort::Descending) text.append(" v"); utf16_t wtext(text); LVCOLUMN lvColumn; lvColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH; lvColumn.fmt = LVCFMT_CENTER; lvColumn.iSubItem = self().offset(); lvColumn.iImage = self().offset(); lvColumn.pszText = wtext; lvColumn.cx = _width; if(state().horizontalAlignment < 0.333) lvColumn.fmt = LVCFMT_LEFT; if(state().horizontalAlignment > 0.666) lvColumn.fmt = LVCFMT_RIGHT; if(state().icon) lvColumn.mask |= LVCF_IMAGE; if(!state().resizable) lvColumn.fmt |= LVCFMT_FIXED_WIDTH; ListView_SetColumn(parent->hwnd, self().offset(), &lvColumn); } } } #endif ares-126/hiro/windows/widget/table-view-column.hpp000066400000000000000000000015261415063341600223060ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewColumn : pObject { Declare(TableViewColumn, Object) auto setActive() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setExpandable(bool expandable) -> void; auto setForegroundColor(Color color) -> void; auto setHorizontalAlignment(f64 alignment) -> void; auto setIcon(const image& icon) -> void; auto setResizable(bool resizable) -> void; auto setSorting(Sort sorting) -> void; auto setText(const string& text) -> void; auto setVerticalAlignment(f64 alignment) -> void; auto setWidth(s32 width) -> void; auto _parent() -> maybe; auto _setState() -> void; signed _width = 128; //computed width (via TableView::resizeColumns) }; } #endif ares-126/hiro/windows/widget/table-view-item.cpp000066400000000000000000000032561415063341600217440ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableViewItem::construct() -> void { if(auto parent = _parent()) { parent->lock(); wchar_t text[] = L""; LVITEM lvItem{0}; lvItem.mask = LVIF_TEXT; lvItem.iItem = self().offset(); lvItem.iSubItem = 0; lvItem.pszText = text; ListView_InsertItem(parent->hwnd, &lvItem); _setState(); parent->unlock(); } } auto pTableViewItem::destruct() -> void { if(auto parent = _parent()) { parent->lock(); ListView_DeleteItem(parent->hwnd, self().offset()); parent->unlock(); } } auto pTableViewItem::append(sTableViewCell cell) -> void { } auto pTableViewItem::remove(sTableViewCell cell) -> void { } auto pTableViewItem::setAlignment(Alignment alignment) -> void { } auto pTableViewItem::setBackgroundColor(Color color) -> void { } auto pTableViewItem::setFocused() -> void { if(auto parent = _parent()) { parent->lock(); ListView_SetItemState(parent->hwnd, self().offset(), LVIS_FOCUSED, LVIS_FOCUSED); parent->unlock(); } } auto pTableViewItem::setForegroundColor(Color color) -> void { } auto pTableViewItem::setSelected(bool selected) -> void { _setState(); } auto pTableViewItem::_parent() -> maybe { if(auto parent = self().parentTableView()) { if(auto self = parent->self()) return *self; } return nothing; } auto pTableViewItem::_setState() -> void { if(auto parent = _parent()) { parent->lock(); ListView_SetItemState(parent->hwnd, self().offset(), state().selected ? LVIS_SELECTED : 0, LVIS_SELECTED); for(auto& cell : state().cells) { if(auto self = cell->self()) self->_setState(); } parent->unlock(); } } } #endif ares-126/hiro/windows/widget/table-view-item.hpp000066400000000000000000000010011415063341600217330ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableViewItem : pObject { Declare(TableViewItem, Object) auto append(sTableViewCell cell) -> void; auto remove(sTableViewCell cell) -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setSelected(bool selected) -> void; auto _parent() -> maybe; auto _setState() -> void; }; } #endif ares-126/hiro/windows/widget/table-view.cpp000066400000000000000000000364231415063341600210120ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { auto pTableView::construct() -> void { hwnd = CreateWindowEx( WS_EX_CLIENTEDGE | LVS_EX_DOUBLEBUFFER, WC_LISTVIEW, L"", WS_CHILD | WS_TABSTOP | LVS_REPORT | LVS_SHOWSELALWAYS, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); ListView_SetExtendedListViewStyle(hwnd, LVS_EX_FULLROWSELECT | LVS_EX_SUBITEMIMAGES); pWidget::construct(); setBackgroundColor(state().backgroundColor); setBatchable(state().batchable); setBordered(state().bordered); setHeadered(state().headered); setSortable(state().sortable); _setIcons(); resizeColumns(); } auto pTableView::destruct() -> void { if(imageList) { ImageList_Destroy(imageList); imageList = nullptr; } DestroyWindow(hwnd); } auto pTableView::append(sTableViewColumn column) -> void { resizeColumns(); } auto pTableView::append(sTableViewItem item) -> void { } auto pTableView::remove(sTableViewColumn column) -> void { } auto pTableView::remove(sTableViewItem item) -> void { } auto pTableView::resizeColumns() -> void { auto lock = acquire(); vector widths; s32 minimumWidth = 0; s32 expandable = 0; for(auto column : range(self().columnCount())) { s32 width = _width(column); widths.append(width); minimumWidth += width; if(state().columns[column]->expandable()) expandable++; } s32 maximumWidth = self().geometry().width() - 4; SCROLLBARINFO sbInfo{sizeof(SCROLLBARINFO)}; if(GetScrollBarInfo(hwnd, OBJID_VSCROLL, &sbInfo)) { if(!(sbInfo.rgstate[0] & STATE_SYSTEM_INVISIBLE)) { maximumWidth -= sbInfo.rcScrollBar.right - sbInfo.rcScrollBar.left; } } s32 expandWidth = 0; if(expandable && maximumWidth > minimumWidth) { expandWidth = (maximumWidth - minimumWidth) / expandable; } for(auto column : range(self().columnCount())) { if(auto self = state().columns[column]->self()) { s32 width = widths[column]; if(self->state().expandable) width += expandWidth; self->_width = width; self->_setState(); } } } auto pTableView::setAlignment(Alignment alignment) -> void { } auto pTableView::setBackgroundColor(Color color) -> void { if(!color) color = {255, 255, 255}; ListView_SetBkColor(hwnd, RGB(color.red(), color.green(), color.blue())); } auto pTableView::setBatchable(bool batchable) -> void { auto style = GetWindowLong(hwnd, GWL_STYLE); !batchable ? style |= LVS_SINGLESEL : style &=~ LVS_SINGLESEL; SetWindowLong(hwnd, GWL_STYLE, style); } auto pTableView::setBordered(bool bordered) -> void { //rendered via onCustomDraw } auto pTableView::setForegroundColor(Color color) -> void { } auto pTableView::setGeometry(Geometry geometry) -> void { pWidget::setGeometry(geometry); for(auto& column : state().columns) { if(column->state.expandable) return resizeColumns(); } } auto pTableView::onActivate(LPARAM lparam) -> void { auto nmlistview = (LPNMLISTVIEW)lparam; if(ListView_GetSelectedCount(hwnd) == 0) return; if(!locked()) { activateCell = TableViewCell(); LVHITTESTINFO hitTest{}; GetCursorPos(&hitTest.pt); ScreenToClient(nmlistview->hdr.hwndFrom, &hitTest.pt); ListView_SubItemHitTest(nmlistview->hdr.hwndFrom, &hitTest); if(hitTest.flags & LVHT_ONITEM) { s32 row = hitTest.iItem; if(row >= 0 && row < state().items.size()) { s32 column = hitTest.iSubItem; if(column >= 0 && column < state().columns.size()) { auto item = state().items[row]; activateCell = item->cell(column); } } } //LVN_ITEMACTIVATE is not re-entrant until DispatchMessage() completes //thus, we don't call self().doActivate() here PostMessageOnce(_parentHandle(), AppMessage::TableView_onActivate, 0, (LPARAM)&reference); } } auto pTableView::onChange(LPARAM lparam) -> void { auto nmlistview = (LPNMLISTVIEW)lparam; if(!(nmlistview->uChanged & LVIF_STATE)) return; bool modified = false; for(auto& item : state().items) { bool selected = ListView_GetItemState(hwnd, item->offset(), LVIS_SELECTED) & LVIS_SELECTED; if(item->state.selected != selected) { modified = true; item->state.selected = selected; } } if(modified && !locked()) { //state event change messages are sent for every item //so when doing a batch select/deselect; this can generate several messages //we use a delayed AppMessage so that only one callback event is fired off PostMessageOnce(_parentHandle(), AppMessage::TableView_onChange, 0, (LPARAM)&reference); } } auto pTableView::onContext(LPARAM lparam) -> void { auto nmitemactivate = (LPNMITEMACTIVATE)lparam; if(ListView_GetSelectedCount(hwnd) > 0) { LVHITTESTINFO hitTest{}; GetCursorPos(&hitTest.pt); ScreenToClient(nmitemactivate->hdr.hwndFrom, &hitTest.pt); ListView_SubItemHitTest(nmitemactivate->hdr.hwndFrom, &hitTest); if(hitTest.flags & LVHT_ONITEM) { s32 row = hitTest.iItem; if(row >= 0 && row < state().items.size()) { s32 column = hitTest.iSubItem; if(column >= 0 && column < state().columns.size()) { auto item = state().items[row]; return self().doContext(item->cell(column)); } } } } return self().doContext(TableViewCell()); } auto pTableView::onCustomDraw(LPARAM lparam) -> LRESULT { auto lvcd = (LPNMLVCUSTOMDRAW)lparam; switch(lvcd->nmcd.dwDrawStage) { default: return CDRF_DODEFAULT; case CDDS_PREPAINT: return CDRF_NOTIFYITEMDRAW; case CDDS_ITEMPREPAINT: return CDRF_NOTIFYSUBITEMDRAW | CDRF_NOTIFYPOSTPAINT; case CDDS_ITEMPREPAINT | CDDS_SUBITEM: return CDRF_SKIPDEFAULT; case CDDS_ITEMPOSTPAINT: { HDC hdc = lvcd->nmcd.hdc; HDC hdcSource = CreateCompatibleDC(hdc); u32 row = lvcd->nmcd.dwItemSpec; for(auto column : range(self().columnCount())) { RECT rc, rcLabel; ListView_GetSubItemRect(hwnd, row, column, LVIR_BOUNDS, &rc); ListView_GetSubItemRect(hwnd, row, column, LVIR_LABEL, &rcLabel); rc.right = rcLabel.right; //bounds of column 0 returns width of entire item s32 iconSize = rc.bottom - rc.top - 1; bool selected = state().items(row)->state.selected; if(auto cell = self().item(row)->cell(column)) { auto backgroundColor = cell->backgroundColor(true); HBRUSH brush = CreateSolidBrush( selected ? GetSysColor(COLOR_HIGHLIGHT) : backgroundColor ? CreateRGB(backgroundColor) : GetSysColor(COLOR_WINDOW) ); FillRect(hdc, &rc, brush); DeleteObject(brush); if(cell->state.checkable) { if(auto htheme = OpenThemeData(hwnd, L"BUTTON")) { u32 state = cell->state.checked ? CBS_CHECKEDNORMAL : CBS_UNCHECKEDNORMAL; SIZE size; GetThemePartSize(htheme, hdc, BP_CHECKBOX, state, nullptr, TS_TRUE, &size); s32 center = max(0, (rc.bottom - rc.top - size.cy) / 2); RECT rd{rc.left + center, rc.top + center, rc.left + center + size.cx, rc.top + center + size.cy}; DrawThemeBackground(htheme, hdc, BP_CHECKBOX, state, &rd, nullptr); CloseThemeData(htheme); } else { //Windows Classic rc.left += 2; RECT rd{rc.left, rc.top, rc.left + iconSize, rc.top + iconSize}; DrawFrameControl(hdc, &rd, DFC_BUTTON, DFCS_BUTTONCHECK | (cell->state.checked ? DFCS_CHECKED : 0)); } rc.left += iconSize + 2; } else { rc.left += 2; } if(auto& icon = cell->state.icon) { auto bitmap = CreateBitmap(icon); SelectBitmap(hdcSource, bitmap); BLENDFUNCTION blend{AC_SRC_OVER, 0, (BYTE)(selected ? 128 : 255), AC_SRC_ALPHA}; AlphaBlend(hdc, rc.left, rc.top, iconSize, iconSize, hdcSource, 0, 0, icon.width(), icon.height(), blend); DeleteObject(bitmap); rc.left += iconSize + 2; } if(auto text = cell->state.text) { auto alignment = cell->alignment(true); if(!alignment) alignment = {0.0, 0.5}; utf16_t wText(text); SetBkMode(hdc, TRANSPARENT); auto foregroundColor = cell->foregroundColor(true); SetTextColor(hdc, selected ? GetSysColor(COLOR_HIGHLIGHTTEXT) : foregroundColor ? CreateRGB(foregroundColor) : GetSysColor(COLOR_WINDOWTEXT) ); auto style = DT_SINGLELINE | DT_NOPREFIX | DT_END_ELLIPSIS; style |= alignment.horizontal() < 0.333 ? DT_LEFT : alignment.horizontal() > 0.666 ? DT_RIGHT : DT_CENTER; style |= alignment.vertical() < 0.333 ? DT_TOP : alignment.vertical() > 0.666 ? DT_BOTTOM : DT_VCENTER; rc.right -= 2; auto font = pFont::create(cell->font(true)); SelectObject(hdc, font); DrawText(hdc, wText, -1, &rc, style); DeleteObject(font); } } else { auto backgroundColor = state().backgroundColor; HBRUSH brush = CreateSolidBrush( selected ? GetSysColor(COLOR_HIGHLIGHT) : backgroundColor ? CreateRGB(backgroundColor) : GetSysColor(COLOR_WINDOW) ); FillRect(hdc, &rc, brush); DeleteObject(brush); } if(state().bordered) { ListView_GetSubItemRect(hwnd, row, column, LVIR_BOUNDS, &rc); rc.top = rc.bottom - 1; FillRect(hdc, &rc, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); ListView_GetSubItemRect(hwnd, row, column, LVIR_LABEL, &rc); rc.left = rc.right - 1; FillRect(hdc, &rc, (HBRUSH)GetStockObject(LTGRAY_BRUSH)); } } DeleteDC(hdcSource); return CDRF_SKIPDEFAULT; } } return CDRF_SKIPDEFAULT; } auto pTableView::onSort(LPARAM lparam) -> void { auto nmlistview = (LPNMLISTVIEW)lparam; if(auto column = self().column(nmlistview->iSubItem)) { if(state().sortable) self().doSort(column); } } auto pTableView::onToggle(LPARAM lparam) -> void { auto itemActivate = (LPNMITEMACTIVATE)lparam; LVHITTESTINFO hitTestInfo{0}; hitTestInfo.pt = itemActivate->ptAction; ListView_SubItemHitTest(hwnd, &hitTestInfo); if(auto cell = self().item(hitTestInfo.iItem).cell(hitTestInfo.iSubItem)) { if(cell->state.checkable) { cell->state.checked = !cell->state.checked; if(!locked()) self().doToggle(cell); //todo: try to find a way to only repaint this cell instead of the entire control to reduce flickering PostMessageOnce(_parentHandle(), AppMessage::TableView_doPaint, 0, (LPARAM)&reference); } } } auto pTableView::setHeadered(bool headered) -> void { auto style = GetWindowLong(hwnd, GWL_STYLE); headered ? style &=~ LVS_NOCOLUMNHEADER : style |= LVS_NOCOLUMNHEADER; SetWindowLong(hwnd, GWL_STYLE, style); } auto pTableView::setSortable(bool sortable) -> void { //note: this won't change the visual style: WC_LISTVIEW caches this in CreateWindow auto style = GetWindowLong(hwnd, GWL_STYLE); sortable ? style &=~ LVS_NOSORTHEADER : style |= LVS_NOSORTHEADER; SetWindowLong(hwnd, GWL_STYLE, style); } // auto pTableView::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_KEYDOWN || msg == WM_KEYUP || msg == WM_SYSKEYDOWN || msg == WM_SYSKEYUP) { if(!self().enabled(true)) { //WC_LISTVIEW responds to key messages even when its HWND is disabled //the control should be inactive when disabled; so we intercept the messages here return false; } if(msg == WM_KEYDOWN && wparam == VK_RETURN) { if(self().selected()) { //returning true generates LVN_ITEMACTIVATE message return true; } } } //when hovering over a WC_LISTVIEW item, it will become selected after a very short pause (~200ms usually) //this is extremely annoying; so intercept the hover event and block it to suppress the LVN_ITEMCHANGING message if(msg == WM_MOUSEHOVER) { return false; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } // auto pTableView::_backgroundColor(u32 _row, u32 _column) -> Color { if(auto item = self().item(_row)) { if(auto cell = item->cell(_column)) { if(auto color = cell->backgroundColor()) return color; } if(auto color = item->backgroundColor()) return color; } //if(auto column = self().column(_column)) { // if(auto color = column->backgroundColor()) return color; //} if(auto color = self().backgroundColor()) return color; //if(state().columns.size() >= 2 && _row % 2) return {240, 240, 240}; return {255, 255, 255}; } auto pTableView::_cellWidth(u32 _row, u32 _column) -> u32 { u32 width = 6; if(auto item = self().item(_row)) { if(auto cell = item->cell(_column)) { if(cell->state.checkable) { width += 16 + 2; } if(auto& icon = cell->state.icon) { width += 16 + 2; } if(auto& text = cell->state.text) { width += pFont::size(_font(_row, _column), text).width(); } } } return width; } auto pTableView::_columnWidth(u32 _column) -> u32 { u32 width = 12; if(auto column = self().column(_column)) { if(auto& icon = column->state.icon) { width += 16 + 12; //yes; icon spacing in column headers is excessive } if(auto& text = column->state.text) { width += pFont::size(self().font(true), text).width(); } if(column->state.sorting != Sort::None) { width += 12; } } return width; } auto pTableView::_font(u32 _row, u32 _column) -> Font { if(auto item = self().item(_row)) { if(auto cell = item->cell(_column)) { if(auto font = cell->font()) return font; } if(auto font = item->font()) return font; } //if(auto column = self().column(_column)) { // if(auto font = column->font()) return font; //} if(auto font = self().font(true)) return font; return {}; } auto pTableView::_foregroundColor(u32 _row, u32 _column) -> Color { if(auto item = self().item(_row)) { if(auto cell = item->cell(_column)) { if(auto color = cell->foregroundColor()) return color; } if(auto color = item->foregroundColor()) return color; } //if(auto column = self().column(_column)) { // if(auto color = column->foregroundColor()) return color; //} if(auto color = self().foregroundColor()) return color; return {0, 0, 0}; } auto pTableView::_setIcons() -> void { ListView_SetImageList(hwnd, nullptr, LVSIL_SMALL); if(imageList) ImageList_Destroy(imageList); imageList = ImageList_Create(16, 16, ILC_COLOR32, 1, 0); ListView_SetImageList(hwnd, imageList, LVSIL_SMALL); for(auto column : range(self().columnCount())) { image icon; if(auto& sourceIcon = state().columns[column]->state.icon) { icon.allocate(sourceIcon.width(), sourceIcon.height()); memory::copy(icon.data(), sourceIcon.data(), icon.size()); icon.scale(16, 16); } else { icon.allocate(16, 16); icon.fill(0x00ffffff); } auto bitmap = CreateBitmap(icon); ImageList_Add(imageList, bitmap, nullptr); DeleteObject(bitmap); } //empty icon used for ListViewItems (drawn manually via onCustomDraw) image icon; icon.allocate(16, 16); icon.fill(0x00ffffff); auto bitmap = CreateBitmap(icon); ImageList_Add(imageList, bitmap, nullptr); DeleteObject(bitmap); } auto pTableView::_width(u32 column) -> u32 { if(auto width = self().column(column).width()) return width; u32 width = 1; if(state().headered) width = max(width, _columnWidth(column)); for(auto row : range(state().items.size())) { width = max(width, _cellWidth(row, column)); } return width; } } #endif ares-126/hiro/windows/widget/table-view.hpp000066400000000000000000000026151415063341600210130ustar00rootroot00000000000000#if defined(Hiro_TableView) namespace hiro { struct pTableView : pWidget { Declare(TableView, Widget) auto append(sTableViewColumn column) -> void; auto append(sTableViewItem item) -> void; auto remove(sTableViewColumn column) -> void; auto remove(sTableViewItem item) -> void; auto resizeColumns() -> void; auto setAlignment(Alignment alignment) -> void; auto setBackgroundColor(Color color) -> void; auto setBatchable(bool batchable) -> void; auto setBordered(bool bordered) -> void; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; auto setHeadered(bool headered) -> void; auto setSortable(bool sortable) -> void; auto onActivate(LPARAM lparam) -> void; auto onChange(LPARAM lparam) -> void; auto onContext(LPARAM lparam) -> void; auto onCustomDraw(LPARAM lparam) -> LRESULT; auto onSort(LPARAM lparam) -> void; auto onToggle(LPARAM lparam) -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; auto _backgroundColor(u32 row, u32 column) -> Color; auto _cellWidth(u32 row, u32 column) -> u32; auto _columnWidth(u32 column) -> u32; auto _font(u32 row, u32 column) -> Font; auto _foregroundColor(u32 row, u32 column) -> Color; auto _setIcons() -> void; auto _width(u32 column) -> u32; TableViewCell activateCell; HIMAGELIST imageList = 0; vector icons; }; } #endif ares-126/hiro/windows/widget/text-edit.cpp000066400000000000000000000072241415063341600206570ustar00rootroot00000000000000#if defined(Hiro_TextEdit) namespace hiro { auto pTextEdit::construct() -> void { hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, L"EDIT", L"", WS_CHILD | WS_TABSTOP | WS_VSCROLL | ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN | (!state().wordWrap ? WS_HSCROLL | ES_AUTOHSCROLL : 0), 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); setBackgroundColor(state().backgroundColor); setEditable(state().editable); setText(state().text); setTextCursor(state().textCursor); } auto pTextEdit::destruct() -> void { state().text = text(); if(backgroundBrush) { DeleteObject(backgroundBrush); backgroundBrush = 0; } DestroyWindow(hwnd); } auto pTextEdit::setBackgroundColor(Color color) -> void { if(backgroundBrush) { DeleteObject(backgroundBrush); backgroundBrush = 0; } backgroundBrush = CreateSolidBrush(color ? CreateRGB(color) : GetSysColor(COLOR_WINDOW)); InvalidateRect(hwnd, 0, true); } auto pTextEdit::setEditable(bool editable) -> void { SendMessage(hwnd, EM_SETREADONLY, editable == false, (LPARAM)0); } auto pTextEdit::setForegroundColor(Color color) -> void { InvalidateRect(hwnd, 0, true); } auto pTextEdit::setText(string text) -> void { auto lock = acquire(); text.replace("\r", ""); text.replace("\n", "\r\n"); SetWindowText(hwnd, utf16_t(text)); } auto pTextEdit::setTextCursor(TextCursor cursor) -> void { s32 end = GetWindowTextLength(hwnd); s32 offset = max(0, min(end, cursor.offset())); s32 length = max(0, min(end, cursor.offset() + cursor.length())); Edit_SetSel(hwnd, offset, length); Edit_ScrollCaret(hwnd); } auto pTextEdit::setWordWrap(bool wordWrap) -> void { //ES_AUTOHSCROLL cannot be changed after widget creation. //As a result, we must destroy and re-create widget to change this setting. reconstruct(); } auto pTextEdit::text() const -> string { u32 length = GetWindowTextLength(hwnd); wchar_t buffer[length + 1]; GetWindowText(hwnd, buffer, length + 1); buffer[length] = 0; string text = (const char*)utf8_t(buffer); text.replace("\r", ""); return text; } auto pTextEdit::textCursor() const -> TextCursor { return state().textCursor; } // auto pTextEdit::onChange() -> void { if(!locked()) self().doChange(); } auto pTextEdit::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_KEYDOWN) { if(wparam == 'A' && GetKeyState(VK_CONTROL) < 0) { //Ctrl+A = select all text //note: this is not a standard accelerator on Windows Edit_SetSel(hwnd, 0, ~0); return true; } else if(wparam == 'V' && GetKeyState(VK_CONTROL) < 0) { //Ctrl+V = paste text //note: this formats Unix (LF) and OS9 (CR) line-endings to Windows (CR+LF) line-endings //this is necessary as the EDIT control only supports Windows line-endings OpenClipboard(hwnd); if(auto handle = GetClipboardData(CF_UNICODETEXT)) { if(auto text = (wchar_t*)GlobalLock(handle)) { string data = (const char*)utf8_t(text); data.replace("\r\n", "\n"); data.replace("\r", "\n"); data.replace("\n", "\r\n"); GlobalUnlock(handle); utf16_t output(data); if(auto resource = GlobalAlloc(GMEM_MOVEABLE, (wcslen(output) + 1) * sizeof(wchar_t))) { if(auto write = (wchar_t*)GlobalLock(resource)) { wcscpy(write, output); GlobalUnlock(write); if(SetClipboardData(CF_UNICODETEXT, resource) == nullptr) { GlobalFree(resource); } } } } } CloseClipboard(); } } return pWidget::windowProc(hwnd, msg, wparam, lparam); } } #endif ares-126/hiro/windows/widget/text-edit.hpp000066400000000000000000000011311415063341600206530ustar00rootroot00000000000000#if defined(Hiro_TextEdit) namespace hiro { struct pTextEdit : pWidget { Declare(TextEdit, Widget) auto setBackgroundColor(Color color) -> void; auto setEditable(bool editable) -> void; auto setForegroundColor(Color color) -> void; auto setText(string text) -> void; auto setTextCursor(TextCursor textCursor) -> void; auto setWordWrap(bool wordWrap) -> void; auto text() const -> string; auto textCursor() const -> TextCursor; auto onChange() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; HBRUSH backgroundBrush = nullptr; }; } #endif ares-126/hiro/windows/widget/tree-view-item.cpp000066400000000000000000000053161415063341600216130ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeViewItem::construct() -> void { if(auto parentWidget = _parentWidget()) { parentWidget->lock(); auto parentItem = _parentItem(); wchar_t wtext[] = L""; TVINSERTSTRUCT tvItem; tvItem.hParent = !parentItem ? TVI_ROOT : parentItem->hTreeItem; tvItem.hInsertAfter = TVI_LAST; tvItem.item.pszText = wtext; tvItem.item.cchTextMax = PATH_MAX + 1; tvItem.item.mask = TVIF_TEXT; hTreeItem = (HTREEITEM)SendMessage(parentWidget->hwnd, TVM_INSERTITEM, 0, (LPARAM)&tvItem); parentWidget->unlock(); } setBackgroundColor(state().backgroundColor); setCheckable(state().checkable); setChecked(state().checked); setExpanded(state().expanded); setForegroundColor(state().foregroundColor); setIcon(state().icon); setText(state().text); } auto pTreeViewItem::destruct() -> void { if(auto parentWidget = _parentWidget()) { parentWidget->lock(); SendMessage(parentWidget->hwnd, TVM_DELETEITEM, 0, (LPARAM)hTreeItem); parentWidget->unlock(); } } auto pTreeViewItem::append(sTreeViewItem item) -> void { } auto pTreeViewItem::remove(sTreeViewItem item) -> void { } auto pTreeViewItem::setBackgroundColor(Color color) -> void { } auto pTreeViewItem::setCheckable(bool checkable) -> void { } auto pTreeViewItem::setChecked(bool checked) -> void { } auto pTreeViewItem::setExpanded(bool expanded) -> void { if(auto parentWidget = _parentWidget()) { parentWidget->lock(); SendMessage(parentWidget->hwnd, TVM_EXPAND, expanded ? TVE_EXPAND : TVE_COLLAPSE, (LPARAM)hTreeItem); parentWidget->unlock(); } } auto pTreeViewItem::setFocused() -> void { } auto pTreeViewItem::setForegroundColor(Color color) -> void { } auto pTreeViewItem::setIcon(const image& icon) -> void { } auto pTreeViewItem::setSelected() -> void { if(auto parentWidget = _parentWidget()) { parentWidget->lock(); SendMessage(parentWidget->hwnd, TVM_SELECTITEM, TVGN_CARET, (LPARAM)&hTreeItem); parentWidget->unlock(); } } auto pTreeViewItem::setText(const string& text) -> void { if(auto parentWidget = _parentWidget()) { parentWidget->lock(); utf16_t wtext{text}; TVITEMW tvItem{}; tvItem.hItem = hTreeItem; tvItem.cchTextMax = PATH_MAX + 1; tvItem.pszText = wtext; tvItem.mask = TVIF_TEXT; SendMessage(parentWidget->hwnd, TVM_SETITEM, 0, (LPARAM)&tvItem); parentWidget->unlock(); } } // auto pTreeViewItem::_parentItem() -> pTreeViewItem* { if(auto parentItem = self().parentTreeViewItem()) return parentItem->self(); return nullptr; } auto pTreeViewItem::_parentWidget() -> pTreeView* { if(auto parentWidget = self().parentTreeView(true)) return parentWidget->self(); return nullptr; } } #endif ares-126/hiro/windows/widget/tree-view-item.hpp000066400000000000000000000013011415063341600216060ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeViewItem : pObject { Declare(TreeViewItem, Object) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setBackgroundColor(Color color) -> void; auto setCheckable(bool checkable) -> void; auto setChecked(bool checked) -> void; auto setExpanded(bool expanded) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setIcon(const image& icon) -> void; auto setSelected() -> void; auto setText(const string& text) -> void; auto _parentItem() -> pTreeViewItem*; auto _parentWidget() -> pTreeView*; HTREEITEM hTreeItem = nullptr; }; } #endif ares-126/hiro/windows/widget/tree-view.cpp000066400000000000000000000026251415063341600206570ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { auto pTreeView::construct() -> void { hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, WC_TREEVIEW, L"", WS_CHILD | WS_TABSTOP | TVS_HASLINES | TVS_SHOWSELALWAYS, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); TreeView_SetExtendedStyle(hwnd, TVS_EX_DOUBLEBUFFER, TVS_EX_DOUBLEBUFFER); pWidget::construct(); setActivation(state().activation); setBackgroundColor(state().backgroundColor); setForegroundColor(state().foregroundColor); } auto pTreeView::destruct() -> void { DestroyWindow(hwnd); } // auto pTreeView::append(sTreeViewItem item) -> void { } auto pTreeView::remove(sTreeViewItem item) -> void { } auto pTreeView::setActivation(Mouse::Click activation) -> void { } auto pTreeView::setBackgroundColor(Color color) -> void { if(color) { TreeView_SetBkColor(hwnd, CreateRGB(color)); } } auto pTreeView::setFocused() -> void { } auto pTreeView::setForegroundColor(Color color) -> void { if(color) { TreeView_SetTextColor(hwnd, CreateRGB(color)); } } auto pTreeView::setGeometry(Geometry geometry) -> void { } // auto pTreeView::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_ERASEBKGND) { return 0; } if(msg == WM_GETDLGCODE) { if(wparam == VK_RETURN) return DLGC_WANTALLKEYS; } return pWidget::windowProc(hwnd, msg, wparam, lparam); } } #endif ares-126/hiro/windows/widget/tree-view.hpp000066400000000000000000000010141415063341600206530ustar00rootroot00000000000000#if defined(Hiro_TreeView) namespace hiro { struct pTreeView : pWidget { Declare(TreeView, Widget) auto append(sTreeViewItem item) -> void; auto remove(sTreeViewItem item) -> void; auto setActivation(Mouse::Click activation) -> void; auto setBackgroundColor(Color color) -> void; auto setFocused() -> void override; auto setForegroundColor(Color color) -> void; auto setGeometry(Geometry geometry) -> void override; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; }; } #endif ares-126/hiro/windows/widget/vertical-scroll-bar.cpp000066400000000000000000000016531415063341600226170ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) namespace hiro { auto pVerticalScrollBar::construct() -> void { hwnd = CreateWindow( L"SCROLLBAR", L"", WS_CHILD | SBS_VERT, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0 ); pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pVerticalScrollBar::destruct() -> void { DestroyWindow(hwnd); } auto pVerticalScrollBar::minimumSize() const -> Size { return {18_sx, 0}; } auto pVerticalScrollBar::setLength(u32 length) -> void { length += (length == 0); SetScrollRange(hwnd, SB_CTL, 0, length - 1, TRUE); } auto pVerticalScrollBar::setPosition(u32 position) -> void { SetScrollPos(hwnd, SB_CTL, position, TRUE); } auto pVerticalScrollBar::onChange(WPARAM wparam) -> void { u32 position = ScrollEvent(hwnd, wparam); if(position == state().position) return; state().position = position; self().doChange(); } } #endif ares-126/hiro/windows/widget/vertical-scroll-bar.hpp000066400000000000000000000004671415063341600226260ustar00rootroot00000000000000#if defined(Hiro_VerticalScrollBar) namespace hiro { struct pVerticalScrollBar : pWidget { Declare(VerticalScrollBar, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto onChange(WPARAM wparam) -> void; }; } #endif ares-126/hiro/windows/widget/vertical-slider.cpp000066400000000000000000000032501415063341600220340ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) namespace hiro { auto pVerticalSlider::construct() -> void { //TBS_TRANSPARENTBKGND is needed to render the transparent area of sliders properly inside TabFrame controls //however, this flag will prevent the slider control from redrawing during vertical window resizes when not inside TabFrame controls //this is because WM_PRINTCLIENT must be implemented in the parent window for this case //however, WM_PRINTCLIENT is incompatible with WM_PAINT, which is how most hiro custom widgets are rendered //as a hacky workaround, TBS_TRANSPARENTBKGND is enabled only when sliders are placed inside of TabFrame controls auto style = WS_CHILD | WS_TABSTOP | TBS_NOTICKS | TBS_BOTH | TBS_VERT; if(self().parentTabFrame(true)) style |= TBS_TRANSPARENTBKGND; hwnd = CreateWindow(TRACKBAR_CLASS, L"", style, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); setLength(state().length); setPosition(state().position); } auto pVerticalSlider::destruct() -> void { DestroyWindow(hwnd); } auto pVerticalSlider::minimumSize() const -> Size { return {25_sx, 0}; } auto pVerticalSlider::setLength(u32 length) -> void { length += (length == 0); SendMessage(hwnd, TBM_SETRANGE, (WPARAM)true, (LPARAM)MAKELONG(0, length - 1)); SendMessage(hwnd, TBM_SETPAGESIZE, 0, (LPARAM)(length >> 3)); } auto pVerticalSlider::setPosition(u32 position) -> void { SendMessage(hwnd, TBM_SETPOS, (WPARAM)true, (LPARAM)position); } auto pVerticalSlider::onChange() -> void { u32 position = SendMessage(hwnd, TBM_GETPOS, 0, 0); if(position == state().position) return; state().position = position; self().doChange(); } } #endif ares-126/hiro/windows/widget/vertical-slider.hpp000066400000000000000000000004411415063341600220400ustar00rootroot00000000000000#if defined(Hiro_VerticalSlider) namespace hiro { struct pVerticalSlider : pWidget { Declare(VerticalSlider, Widget) auto minimumSize() const -> Size override; auto setLength(u32 length) -> void; auto setPosition(u32 position) -> void; auto onChange() -> void; }; } #endif ares-126/hiro/windows/widget/viewport.cpp000066400000000000000000000031331415063341600206220ustar00rootroot00000000000000#if defined(Hiro_Viewport) namespace hiro { auto pViewport::construct() -> void { hwnd = CreateWindow(L"hiroWidget", L"", WS_CHILD | WS_DISABLED, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); pWidget::construct(); } auto pViewport::destruct() -> void { DestroyWindow(hwnd); } auto pViewport::handle() const -> uintptr_t { return (uintptr_t)hwnd; } auto pViewport::setDroppable(bool droppable) -> void { DragAcceptFiles(hwnd, droppable); } auto pViewport::setFocusable(bool focusable) -> void { //handled by windowProc() } // auto pViewport::doMouseLeave() -> void { return self().doMouseLeave(); } auto pViewport::doMouseMove(s32 x, s32 y) -> void { return self().doMouseMove({x, y}); } auto pViewport::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_DROPFILES) { if(auto paths = DropPaths(wparam)) self().doDrop(paths); return false; } if(msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN || msg == WM_KEYUP || msg == WM_SYSKEYUP) { if(self().focusable()) return true; } if(msg == WM_ERASEBKGND) { return false; } if(msg == WM_PAINT) { PAINTSTRUCT ps; BeginPaint(hwnd, &ps); auto brush = CreateSolidBrush(RGB(0, 0, 0)); RECT rc{}; GetClientRect(hwnd, &rc); FillRect(ps.hdc, &rc, brush); DeleteObject(brush); EndPaint(hwnd, &ps); return true; } if(msg == WM_GETDLGCODE) { return DLGC_STATIC | DLGC_WANTCHARS; } if(msg == WM_LBUTTONDOWN) { if(self().focusable()) setFocused(); } return pWidget::windowProc(hwnd, msg, wparam, lparam); } } #endif ares-126/hiro/windows/widget/viewport.hpp000066400000000000000000000006541415063341600206340ustar00rootroot00000000000000#if defined(Hiro_Viewport) namespace hiro { struct pViewport : pWidget { Declare(Viewport, Widget) auto handle() const -> uintptr_t; auto setDroppable(bool droppable) -> void override; auto setFocusable(bool focusable) -> void override; auto doMouseLeave() -> void override; auto doMouseMove(s32 x, s32 y) -> void override; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe override; }; } #endif ares-126/hiro/windows/widget/widget.cpp000066400000000000000000000137551415063341600202410ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { static auto CALLBACK Widget_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { if(auto object = (mObject*)GetWindowLongPtr(hwnd, GWLP_USERDATA)) { if(auto widget = dynamic_cast(object)) { if(auto self = widget->self()) { if(auto result = self->windowProc(hwnd, msg, wparam, lparam)) { return result(); } return CallWindowProc(self->defaultWindowProc, hwnd, msg, wparam, lparam); } } } return DefWindowProc(hwnd, msg, wparam, lparam); } auto pWidget::construct() -> void { if(!hwnd) { abstract = true; hwnd = CreateWindow(L"hiroWidget", L"", WS_CHILD, 0, 0, 0, 0, _parentHandle(), nullptr, GetModuleHandle(0), 0); } SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)&reference); defaultWindowProc = (WindowProc)GetWindowLongPtr(hwnd, GWLP_WNDPROC); SetWindowLongPtr(hwnd, GWLP_WNDPROC, (LONG_PTR)Widget_windowProc); _setState(); } auto pWidget::destruct() -> void { toolTip.reset(); if(hfont) { DeleteObject(hfont); hfont = nullptr; } if(hwnd) { DestroyWindow(hwnd); hwnd = nullptr; } } auto pWidget::focused() const -> bool { auto focused = GetFocus(); return hwnd == focused || IsChild(hwnd, focused); } auto pWidget::minimumSize() const -> Size { return {0, 0}; } auto pWidget::setDroppable(bool droppable) -> void { //TODO } auto pWidget::setEnabled(bool enabled) -> void { if(!self().parentWindow(true)) enabled = false; if(!self().enabled(true)) enabled = false; if(abstract) enabled = false; EnableWindow(hwnd, enabled); } auto pWidget::setFocusable(bool focusable) -> void { //TODO } auto pWidget::setFocused() -> void { SetFocus(hwnd); } auto pWidget::setFont(const Font&) -> void { if(hfont) DeleteObject(hfont); hfont = pFont::create(self().font(true)); SendMessage(hwnd, WM_SETFONT, (WPARAM)hfont, 0); } auto pWidget::setGeometry(Geometry geometry) -> void { if(auto parent = _parentWidget()) { auto displacement = parent->self().geometry().position(); geometry.setX(geometry.x() - displacement.x()); geometry.setY(geometry.y() - displacement.y()); } SetWindowPos(hwnd, nullptr, geometry.x(), geometry.y(), geometry.width(), geometry.height(), SWP_NOZORDER); //RedrawWindow fixes painting problems when adjusting Layouts manually RedrawWindow(hwnd, nullptr, nullptr, RDW_INVALIDATE | RDW_ALLCHILDREN); pSizable::setGeometry(geometry); } auto pWidget::setMouseCursor(const MouseCursor& mouseCursor) -> void { //TODO } auto pWidget::setToolTip(const string& toolTipText) -> void { if(toolTipText) { toolTip = new pToolTip{toolTipText}; } else { toolTip.reset(); } } auto pWidget::setVisible(bool visible) -> void { if(!self().parentWindow(true)) visible = false; if(!self().visible(true)) visible = false; if(abstract) visible = false; ShowWindow(hwnd, visible ? SW_SHOWNORMAL : SW_HIDE); } // auto pWidget::doMouseHover() -> void { if(toolTip) toolTip->show(); } auto pWidget::doMouseLeave() -> void { } auto pWidget::doMouseMove(s32 x, s32 y) -> void { } auto pWidget::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_SETCURSOR) { if(auto cursor = self().mouseCursor()) { maybe cursorID; if(cursor.name() == MouseCursor::Hand) cursorID = IDC_HAND; if(cursor.name() == MouseCursor::HorizontalResize) cursorID = IDC_SIZEWE; if(cursor.name() == MouseCursor::VerticalResize) cursorID = IDC_SIZENS; if(cursorID) return SetCursor(LoadCursor(0, cursorID())), true; } } if(msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { //if using a (Horizontal,Vertical)ResizeGrip, it's possible to move the cursor off the widget momentarily. //ordinarily, this will cause the cursor to revert to the newly hovered Widget. //by capturing the mouse until the mouse button is released, this prevents said cursor flickering. //if(msg == WM_LBUTTONDOWN && self().mouseCursor()) SetCapture(hwnd); switch(msg) { case WM_LBUTTONDOWN: self().doMousePress(Mouse::Button::Left); break; case WM_MBUTTONDOWN: self().doMousePress(Mouse::Button::Middle); break; case WM_RBUTTONDOWN: self().doMousePress(Mouse::Button::Right); break; } } if(msg == WM_LBUTTONUP || msg == WM_MBUTTONUP || msg == WM_RBUTTONUP) { //if(msg == WM_LBUTTONUP && self().mouseCursor() && GetCapture() == hwnd) ReleaseCapture(); switch(msg) { case WM_LBUTTONUP: self().doMouseRelease(Mouse::Button::Left); break; case WM_MBUTTONUP: self().doMouseRelease(Mouse::Button::Middle); break; case WM_RBUTTONUP: self().doMouseRelease(Mouse::Button::Right); break; } } if(msg == WM_MOUSEMOVE) { TRACKMOUSEEVENT event{sizeof(TRACKMOUSEEVENT)}; event.hwndTrack = hwnd; event.dwFlags = TME_LEAVE | TME_HOVER; event.dwHoverTime = pToolTip::Delay; TrackMouseEvent(&event); POINT p{}; GetCursorPos(&p); doMouseMove(p.x, p.y); if(auto toolTip = pApplication::state().toolTip) { toolTip->windowProc(hwnd, msg, wparam, lparam); } } if(msg == WM_MOUSELEAVE) { doMouseLeave(); } if(msg == WM_MOUSEHOVER) { doMouseHover(); } return {}; } // auto pWidget::_parentHandle() -> HWND { if(auto parent = _parentWidget()) return parent->hwnd; if(auto parent = _parentWindow()) return parent->hwnd; return nullptr; } auto pWidget::_parentWidget() -> maybe { #if defined(Hiro_TabFrame) if(auto parent = self().parentTabFrame(true)) { if(auto self = parent->self()) return *self; } #endif return {}; } auto pWidget::_parentWindow() -> maybe { if(auto parent = self().parentWindow(true)) { if(auto self = parent->self()) return *self; } return {}; } auto pWidget::_setState() -> void { setDroppable(self().droppable()); setEnabled(self().enabled()); setFocusable(self().focusable()); setFont(self().font()); setMouseCursor(self().mouseCursor()); setToolTip(self().toolTip()); setVisible(self().visible()); } } #endif ares-126/hiro/windows/widget/widget.hpp000066400000000000000000000022151415063341600202330ustar00rootroot00000000000000#if defined(Hiro_Widget) namespace hiro { struct pWidget : pSizable { Declare(Widget, Sizable) auto focused() const -> bool override; auto minimumSize() const -> Size override; virtual auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; virtual auto setFocusable(bool focusable) -> void; auto setFocused() -> void override; auto setFont(const Font& font) -> void override; auto setGeometry(Geometry geometry) -> void override; auto setMouseCursor(const MouseCursor& mouseCursor) -> void; auto setToolTip(const string& toolTip) -> void; auto setVisible(bool visible) -> void override; virtual auto doMouseHover() -> void; virtual auto doMouseLeave() -> void; virtual auto doMouseMove(s32 x, s32 y) -> void; virtual auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe; auto _parentHandle() -> HWND; auto _parentWidget() -> maybe; auto _parentWindow() -> maybe; auto _setState() -> void; bool abstract = false; WindowProc defaultWindowProc = nullptr; HWND hwnd = nullptr; HFONT hfont = nullptr; unique_pointer toolTip; }; } #endif ares-126/hiro/windows/window.cpp000066400000000000000000000303151415063341600167710ustar00rootroot00000000000000#if defined(Hiro_Window) namespace hiro { static auto CALLBACK Window_windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { if(Application::state().quit) return DefWindowProc(hwnd, msg, wparam, lparam); if(auto window = (mWindow*)GetWindowLongPtr(hwnd, GWLP_USERDATA)) { if(auto self = window->self()) { if(auto result = self->windowProc(hwnd, msg, wparam, lparam)) { return result(); } } } return Shared_windowProc(DefWindowProc, hwnd, msg, wparam, lparam); } static constexpr u32 PopupStyle = WS_POPUP | WS_CLIPCHILDREN; static constexpr u32 FixedStyle = WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_BORDER | WS_CLIPCHILDREN; static constexpr u32 ResizableStyle = WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_THICKFRAME | WS_CLIPCHILDREN; u32 pWindow::minimumStatusHeight = 0; auto pWindow::initialize() -> void { pApplication::state().modalTimer.setInterval(1); pApplication::state().modalTimer.onActivate([] { Application::doMain(); }); HWND hwnd = CreateWindow(L"hiroWindow", L"", ResizableStyle, 128, 128, 256, 256, 0, 0, GetModuleHandle(0), 0); HWND hstatus = CreateWindow(STATUSCLASSNAME, L"", WS_CHILD, 0, 0, 0, 0, hwnd, nullptr, GetModuleHandle(0), 0); SetWindowPos(hstatus, nullptr, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED); RECT rc; GetWindowRect(hstatus, &rc); minimumStatusHeight = rc.bottom - rc.top; DestroyWindow(hstatus); DestroyWindow(hwnd); } auto pWindow::construct() -> void { hwnd = CreateWindow(L"hiroWindow", L"", ResizableStyle, 128, 128, 256, 256, 0, 0, GetModuleHandle(0), 0); SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)&reference); setDroppable(state().droppable); setGeometry({128, 128, 256, 256}); windows.append(self().instance); } auto pWindow::destruct() -> void { if(auto position = windows.find(self().instance)) windows.remove(*position); if(hbrush) { DeleteObject(hbrush); hbrush = nullptr; } DestroyWindow(hwnd); } auto pWindow::append(sMenuBar menuBar) -> void { } auto pWindow::append(sSizable sizable) -> void { } auto pWindow::append(sStatusBar statusBar) -> void { } auto pWindow::focused() const -> bool { return focus; } auto pWindow::frameMargin() const -> Geometry { RECT rc{0, 0, 640, 480}; u32 style = state().fullScreen ? 0 : state().resizable ? ResizableStyle : FixedStyle; bool menuVisible = state().menuBar && state().menuBar->visible(); AdjustWindowRect(&rc, style, menuVisible); auto& efb = state().fullScreen ? settings.efbPopup : !state().resizable ? settings.efbFixed : settings.efbResizable; return { abs(rc.left) - efb.x, abs(rc.top) - efb.y, (rc.right - rc.left) - 640 - efb.width, (rc.bottom - rc.top) + _statusHeight() - 480 - efb.height }; } auto pWindow::handle() const -> uintptr_t { return (uintptr_t)hwnd; } auto pWindow::monitor() const -> u32 { //TODO return 0; } auto pWindow::remove(sMenuBar menuBar) -> void { } auto pWindow::remove(sSizable sizable) -> void { } auto pWindow::remove(sStatusBar statusBar) -> void { } auto pWindow::setBackgroundColor(Color color) -> void { hbrushColor = CreateRGB(color); if(hbrush) { DeleteObject(hbrush); hbrush = nullptr; } if(color) hbrush = CreateSolidBrush(hbrushColor); } auto pWindow::setDismissable(bool dismissable) -> void { } auto pWindow::setDroppable(bool droppable) -> void { DragAcceptFiles(hwnd, droppable); } auto pWindow::setEnabled(bool enabled) -> void { if(auto& sizable = state().sizable) { if(auto self = sizable->self()) self->setEnabled(sizable->enabled(true)); } } auto pWindow::setFocused() -> void { if(!self().visible()) self().setVisible(true); SetFocus(hwnd); } auto pWindow::setFont(const Font& font) -> void { if(auto& sizable = state().sizable) { if(auto self = sizable->self()) self->setFont(sizable->font(true)); } } auto pWindow::setFullScreen(bool fullScreen) -> void { auto lock = acquire(); auto style = GetWindowLongPtr(hwnd, GWL_STYLE) & WS_VISIBLE; if(fullScreen) { windowedGeometry = self().geometry(); HMONITOR monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); MONITORINFOEX info; memset(&info, 0, sizeof(MONITORINFOEX)); info.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(monitor, &info); RECT rc = info.rcMonitor; Geometry geometry = {rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top}; SetWindowLongPtr(hwnd, GWL_STYLE, style | WS_POPUP); Geometry margin = frameMargin(); self().setGeometry({ geometry.x() + margin.x(), geometry.y() + margin.y(), geometry.width() - margin.width(), geometry.height() - margin.height() }); } else { SetWindowLongPtr(hwnd, GWL_STYLE, style | (state().resizable ? ResizableStyle : FixedStyle)); self().setGeometry(windowedGeometry); } } auto pWindow::setGeometry(Geometry geometry) -> void { auto lock = acquire(); Geometry margin = frameMargin(); auto& efb = state().fullScreen ? settings.efbPopup : !state().resizable ? settings.efbFixed : settings.efbResizable; SetWindowPos( hwnd, nullptr, geometry.x() - margin.x() - efb.x, geometry.y() - margin.y() - efb.y, geometry.width() + margin.width() + efb.width, geometry.height() + margin.height() + efb.height, SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED ); if(auto& statusBar = state().statusBar) { if(auto self = statusBar->self()) { SetWindowPos(self->hwnd, nullptr, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED); } } if(auto& sizable = state().sizable) { sizable->setGeometry(geometry.setPosition()); } } auto pWindow::setMaximized(bool maximized) -> void { if(state().minimized) return; auto lock = acquire(); ShowWindow(hwnd, maximized ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); } auto pWindow::setMaximumSize(Size size) -> void { } auto pWindow::setMinimized(bool minimized) -> void { auto lock = acquire(); ShowWindow(hwnd, minimized ? SW_MINIMIZE : state().maximized ? SW_MAXIMIZE : SW_SHOWNOACTIVATE); } auto pWindow::setMinimumSize(Size size) -> void { } //never call this directly: use Window::setModal() instead //this function does not confirm the modality has actually changed before adjusting modalCount auto pWindow::setModal(bool modality) -> void { if(modality) { modalIncrement(); _modalityUpdate(); while(!Application::state().quit && state().modal) { if(Application::state().onMain) { Application::doMain(); } else { usleep(20 * 1000); } Application::processEvents(); } _modalityUpdate(); } else { modalDecrement(); } } auto pWindow::setResizable(bool resizable) -> void { auto style = GetWindowLongPtr(hwnd, GWL_STYLE) & WS_VISIBLE; SetWindowLongPtr(hwnd, GWL_STYLE, style | (state().resizable ? ResizableStyle : FixedStyle)); setGeometry(state().geometry); } auto pWindow::setTitle(string text) -> void { SetWindowText(hwnd, utf16_t(text)); } auto pWindow::setVisible(bool visible) -> void { auto lock = acquire(); ShowWindow(hwnd, visible ? SW_SHOWNORMAL : SW_HIDE); if(auto& sizable = state().sizable) { sizable->setGeometry(self().geometry().setPosition()); } if(!visible) self().setModal(false); //calculate window extended frame bounds: DwmGetWindowAttributes is only valid after the window is visible //by then, it's too late to position the window correctly, but we can cache the results here for next time //because GetWindowRect and DwmGetWindowAttribute returns different unit types, the hiro application *must* be DPI aware if(visible) { //in logical units RECT rc; GetWindowRect(hwnd, &rc); //in physical units RECT fc; DwmGetWindowAttribute(hwnd, DWMWA_EXTENDED_FRAME_BOUNDS, &fc, sizeof(RECT)); //convert to offsets useful to hiro auto& efb = state().fullScreen ? settings.efbPopup : !state().resizable ? settings.efbFixed : settings.efbResizable; efb.x = fc.left - rc.left; efb.y = fc.top - rc.top; efb.width = efb.x + (rc.right - fc.right); efb.height = efb.y + (rc.bottom - fc.bottom); //sanitize inputs: if the bounds are obviously nonsense, give up on trying to compensate for them if(efb.x > 100 || efb.y > 100 || efb.width > 100 || efb.height > 100) efb = {}; } } // auto pWindow::modalIncrement() -> void { if(pApplication::state().modalCount++ == 0) { pApplication::state().modalTimer.setEnabled(true); } } auto pWindow::modalDecrement() -> void { if(--pApplication::state().modalCount == 0) { pApplication::state().modalTimer.setEnabled(false); } } auto pWindow::windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> maybe { if(msg == WM_CLOSE || (msg == WM_KEYDOWN && wparam == VK_ESCAPE && state().dismissable)) { if(state().onClose) { self().doClose(); //doClose() may end up destroying the window when terminating the application ... //forcefully return early in said case, so that the modal check below doesn't access the destroyed pWindow object if(Application::state().quit) return true; } else { self().setVisible(false); } if(state().modal && !self().visible()) self().setModal(false); return true; } if(msg == WM_MOVE && !locked()) { state().geometry.setPosition(_geometry().position()); self().doMove(); } if(msg == WM_SIZE && !locked()) { if(auto statusBar = state().statusBar) { if(auto self = statusBar->self()) { SetWindowPos(self->hwnd, nullptr, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOZORDER | SWP_FRAMECHANGED); } } state().geometry.setSize(_geometry().size()); if(auto& sizable = state().sizable) { sizable->setGeometry(_geometry().setPosition()); } self().doSize(); } if(msg == WM_DROPFILES) { if(auto paths = DropPaths(wparam)) self().doDrop(paths); return false; } if(msg == WM_ERASEBKGND && hbrush) { RECT rc; GetClientRect(hwnd, &rc); PAINTSTRUCT ps; BeginPaint(hwnd, &ps); FillRect(ps.hdc, &rc, hbrush); EndPaint(hwnd, &ps); return true; } if(msg == WM_ENTERMENULOOP || msg == WM_ENTERSIZEMOVE) { modalIncrement(); return false; } if(msg == WM_EXITMENULOOP || msg == WM_EXITSIZEMOVE) { modalDecrement(); return false; } if(msg == WM_SYSCOMMAND) { if(wparam == SC_SCREENSAVE || wparam == SC_MONITORPOWER) { if(!Application::screenSaver()) return 0; } } if(msg == WM_ACTIVATE) { focus = LOWORD(wparam) != WA_INACTIVE; return false; } return {}; } // auto pWindow::_geometry() -> Geometry { Geometry margin = frameMargin(); RECT rc; if(IsIconic(hwnd)) { //GetWindowRect returns x=-32000,y=-32000 when window is minimized WINDOWPLACEMENT wp; GetWindowPlacement(hwnd, &wp); rc = wp.rcNormalPosition; } else { GetWindowRect(hwnd, &rc); } auto& efb = state().fullScreen ? settings.efbPopup : !state().resizable ? settings.efbFixed : settings.efbResizable; auto x = rc.left + margin.x() + efb.x; auto y = rc.top + margin.y() + efb.y; auto width = (rc.right - rc.left) - margin.width() - efb.width; auto height = (rc.bottom - rc.top) - margin.height() - efb.height; return {x, y, width, height}; } auto pWindow::_modalityCount() -> u32 { u32 modalWindows = 0; for(auto& weak : windows) { if(auto object = weak.acquire()) { if(auto window = dynamic_cast(object.data())) { if(window->modal()) modalWindows++; } } } return modalWindows; } auto pWindow::_modalityDisabled() -> bool { if(_modalityCount() == 0) return false; return !state().modal; } auto pWindow::_modalityUpdate() -> void { u32 modalWindows = _modalityCount(); for(auto& weak : windows) { if(auto object = weak.acquire()) { if(auto window = dynamic_cast(object.data())) { if(auto self = window->self()) { bool enabled = !modalWindows || window->modal(); if(IsWindowEnabled(self->hwnd) != enabled) { EnableWindow(self->hwnd, enabled); } } } } } } auto pWindow::_statusHeight() const -> s32 { s32 height = 0; if(auto& statusBar = state().statusBar) { if(statusBar->visible()) { auto& text = statusBar->state.text; height = statusBar->font(true).size(text ? text : " ").height(); height = max(height, minimumStatusHeight); } } return height; } } #endif ares-126/hiro/windows/window.hpp000066400000000000000000000033761415063341600170050ustar00rootroot00000000000000#if defined(Hiro_Window) namespace hiro { struct pWindow : pObject { Declare(Window, Object) static auto initialize() -> void; static u32 minimumStatusHeight; auto append(sMenuBar menuBar) -> void; auto append(sSizable sizable) -> void; auto append(sStatusBar statusBar) -> void; auto focused() const -> bool override; auto frameMargin() const -> Geometry; auto handle() const -> uintptr_t; auto monitor() const -> u32; auto remove(sMenuBar menuBar) -> void; auto remove(sSizable sizable) -> void; auto remove(sStatusBar statusBar) -> void; auto setBackgroundColor(Color color) -> void; auto setDismissable(bool dismissable) -> void; auto setDroppable(bool droppable) -> void; auto setEnabled(bool enabled) -> void override; auto setFocused() -> void override; auto setFont(const Font& font) -> void override; auto setFullScreen(bool fullScreen) -> void; auto setGeometry(Geometry geometry) -> void; auto setMaximized(bool maximized) -> void; auto setMaximumSize(Size size) -> void; auto setMinimized(bool minimized) -> void; auto setMinimumSize(Size size) -> void; auto setModal(bool modal) -> void; auto setResizable(bool resizable) -> void; auto setTitle(string text) -> void; auto setVisible(bool visible) -> void override; auto modalIncrement() -> void; auto modalDecrement() -> void; auto windowProc(HWND, UINT, WPARAM, LPARAM) -> maybe; auto _geometry() -> Geometry; auto _modalityCount() -> u32; auto _modalityDisabled() -> bool; auto _modalityUpdate() -> void; auto _statusHeight() const -> s32; HWND hwnd = nullptr; HFONT hstatusfont = nullptr; HBRUSH hbrush = nullptr; COLORREF hbrushColor = 0; Geometry windowedGeometry{128, 128, 256, 256}; bool focus = false; }; } #endif ares-126/libco/000077500000000000000000000000001415063341600134115ustar00rootroot00000000000000ares-126/libco/GNUmakefile000066400000000000000000000001751415063341600154660ustar00rootroot00000000000000libco.objects := libco libco.objects := $(libco.objects:%=$(object.path)/%.o) $(object.path)/libco.o: $(libco.path)/libco.c ares-126/libco/aarch64.c000066400000000000000000000060321415063341600150060ustar00rootroot00000000000000#define LIBCO_C #include "libco.h" #include "settings.h" #include #include #include #ifdef LIBCO_MPROTECT #include #include #endif #ifdef __cplusplus extern "C" { #endif static thread_local unsigned long co_active_buffer[64]; static thread_local cothread_t co_active_handle = 0; static void (*co_swap)(cothread_t, cothread_t) = 0; #ifdef LIBCO_MPROTECT alignas(4096) #else section(text) #endif static const uint32_t co_swap_function[1024] = { 0x910003f0, /* mov x16,sp */ 0xa9007830, /* stp x16,x30,[x1] */ 0xa9407810, /* ldp x16,x30,[x0] */ 0x9100021f, /* mov sp,x16 */ 0xa9015033, /* stp x19,x20,[x1, 16] */ 0xa9415013, /* ldp x19,x20,[x0, 16] */ 0xa9025835, /* stp x21,x22,[x1, 32] */ 0xa9425815, /* ldp x21,x22,[x0, 32] */ 0xa9036037, /* stp x23,x24,[x1, 48] */ 0xa9436017, /* ldp x23,x24,[x0, 48] */ 0xa9046839, /* stp x25,x26,[x1, 64] */ 0xa9446819, /* ldp x25,x26,[x0, 64] */ 0xa905703b, /* stp x27,x28,[x1, 80] */ 0xa945701b, /* ldp x27,x28,[x0, 80] */ 0xf900303d, /* str x29, [x1, 96] */ 0xf940301d, /* ldr x29, [x0, 96] */ 0x6d072428, /* stp d8, d9, [x1,112] */ 0x6d472408, /* ldp d8, d9, [x0,112] */ 0x6d082c2a, /* stp d10,d11,[x1,128] */ 0x6d482c0a, /* ldp d10,d11,[x0,128] */ 0x6d09342c, /* stp d12,d13,[x1,144] */ 0x6d49340c, /* ldp d12,d13,[x0,144] */ 0x6d0a3c2e, /* stp d14,d15,[x1,160] */ 0x6d4a3c0e, /* ldp d14,d15,[x0,160] */ 0xd61f03c0, /* br x30 */ }; static void co_init() { #ifdef LIBCO_MPROTECT unsigned long addr = (unsigned long)co_swap_function; unsigned long base = addr - (addr % sysconf(_SC_PAGESIZE)); unsigned long size = (addr - base) + sizeof co_swap_function; mprotect((void*)base, size, PROT_READ | PROT_EXEC); #endif } cothread_t co_active() { if(!co_active_handle) co_active_handle = &co_active_buffer; return co_active_handle; } cothread_t co_derive(void* memory, unsigned int size, void (*entrypoint)(void)) { unsigned long* handle; if(!co_swap) { co_init(); co_swap = (void (*)(cothread_t, cothread_t))co_swap_function; } if(!co_active_handle) co_active_handle = &co_active_buffer; if(handle = (unsigned long*)memory) { unsigned int offset = (size & ~15); unsigned long* p = (unsigned long*)((unsigned char*)handle + offset); handle[0] = (unsigned long)p; /* x16 (stack pointer) */ handle[1] = (unsigned long)entrypoint; /* x30 (link register) */ handle[12] = (unsigned long)p; /* x29 (frame pointer) */ } return handle; } cothread_t co_create(unsigned int size, void (*entrypoint)(void)) { void* memory = malloc(size); if(!memory) return (cothread_t)0; return co_derive(memory, size, entrypoint); } void co_delete(cothread_t handle) { free(handle); } void co_switch(cothread_t handle) { cothread_t co_previous_handle = co_active_handle; co_swap(co_active_handle = handle, co_previous_handle); } int co_serializable() { return 1; } #ifdef __cplusplus } #endif ares-126/libco/amd64.c000066400000000000000000000140341415063341600144720ustar00rootroot00000000000000#define LIBCO_C #include "libco.h" #include "settings.h" #include #include #ifdef __cplusplus extern "C" { #endif static thread_local long long co_active_buffer[64]; static thread_local cothread_t co_active_handle = 0; static void (*co_swap)(cothread_t, cothread_t) = 0; #ifdef LIBCO_MPROTECT alignas(4096) #else section(text) #endif #ifdef _WIN32 /* ABI: Win64 */ static const unsigned char co_swap_function[4096] = { 0x48, 0x89, 0x22, /* mov [rdx],rsp */ 0x48, 0x8b, 0x21, /* mov rsp,[rcx] */ 0x58, /* pop rax */ 0x48, 0x89, 0x6a, 0x08, /* mov [rdx+ 8],rbp */ 0x48, 0x89, 0x72, 0x10, /* mov [rdx+16],rsi */ 0x48, 0x89, 0x7a, 0x18, /* mov [rdx+24],rdi */ 0x48, 0x89, 0x5a, 0x20, /* mov [rdx+32],rbx */ 0x4c, 0x89, 0x62, 0x28, /* mov [rdx+40],r12 */ 0x4c, 0x89, 0x6a, 0x30, /* mov [rdx+48],r13 */ 0x4c, 0x89, 0x72, 0x38, /* mov [rdx+56],r14 */ 0x4c, 0x89, 0x7a, 0x40, /* mov [rdx+64],r15 */ #if !defined(LIBCO_NO_SSE) 0x0f, 0x29, 0x72, 0x50, /* movaps [rdx+ 80],xmm6 */ 0x0f, 0x29, 0x7a, 0x60, /* movaps [rdx+ 96],xmm7 */ 0x44, 0x0f, 0x29, 0x42, 0x70, /* movaps [rdx+112],xmm8 */ 0x48, 0x83, 0xc2, 0x70, /* add rdx,112 */ 0x44, 0x0f, 0x29, 0x4a, 0x10, /* movaps [rdx+ 16],xmm9 */ 0x44, 0x0f, 0x29, 0x52, 0x20, /* movaps [rdx+ 32],xmm10 */ 0x44, 0x0f, 0x29, 0x5a, 0x30, /* movaps [rdx+ 48],xmm11 */ 0x44, 0x0f, 0x29, 0x62, 0x40, /* movaps [rdx+ 64],xmm12 */ 0x44, 0x0f, 0x29, 0x6a, 0x50, /* movaps [rdx+ 80],xmm13 */ 0x44, 0x0f, 0x29, 0x72, 0x60, /* movaps [rdx+ 96],xmm14 */ 0x44, 0x0f, 0x29, 0x7a, 0x70, /* movaps [rdx+112],xmm15 */ #endif 0x48, 0x8b, 0x69, 0x08, /* mov rbp,[rcx+ 8] */ 0x48, 0x8b, 0x71, 0x10, /* mov rsi,[rcx+16] */ 0x48, 0x8b, 0x79, 0x18, /* mov rdi,[rcx+24] */ 0x48, 0x8b, 0x59, 0x20, /* mov rbx,[rcx+32] */ 0x4c, 0x8b, 0x61, 0x28, /* mov r12,[rcx+40] */ 0x4c, 0x8b, 0x69, 0x30, /* mov r13,[rcx+48] */ 0x4c, 0x8b, 0x71, 0x38, /* mov r14,[rcx+56] */ 0x4c, 0x8b, 0x79, 0x40, /* mov r15,[rcx+64] */ #if !defined(LIBCO_NO_SSE) 0x0f, 0x28, 0x71, 0x50, /* movaps xmm6, [rcx+ 80] */ 0x0f, 0x28, 0x79, 0x60, /* movaps xmm7, [rcx+ 96] */ 0x44, 0x0f, 0x28, 0x41, 0x70, /* movaps xmm8, [rcx+112] */ 0x48, 0x83, 0xc1, 0x70, /* add rcx,112 */ 0x44, 0x0f, 0x28, 0x49, 0x10, /* movaps xmm9, [rcx+ 16] */ 0x44, 0x0f, 0x28, 0x51, 0x20, /* movaps xmm10,[rcx+ 32] */ 0x44, 0x0f, 0x28, 0x59, 0x30, /* movaps xmm11,[rcx+ 48] */ 0x44, 0x0f, 0x28, 0x61, 0x40, /* movaps xmm12,[rcx+ 64] */ 0x44, 0x0f, 0x28, 0x69, 0x50, /* movaps xmm13,[rcx+ 80] */ 0x44, 0x0f, 0x28, 0x71, 0x60, /* movaps xmm14,[rcx+ 96] */ 0x44, 0x0f, 0x28, 0x79, 0x70, /* movaps xmm15,[rcx+112] */ #endif 0xff, 0xe0, /* jmp rax */ }; #include static void co_init() { #ifdef LIBCO_MPROTECT DWORD old_privileges; VirtualProtect((void*)co_swap_function, sizeof co_swap_function, PAGE_EXECUTE_READ, &old_privileges); #endif } #else /* ABI: SystemV */ static const unsigned char co_swap_function[4096] = { 0x48, 0x89, 0x26, /* mov [rsi],rsp */ 0x48, 0x8b, 0x27, /* mov rsp,[rdi] */ 0x58, /* pop rax */ 0x48, 0x89, 0x6e, 0x08, /* mov [rsi+ 8],rbp */ 0x48, 0x89, 0x5e, 0x10, /* mov [rsi+16],rbx */ 0x4c, 0x89, 0x66, 0x18, /* mov [rsi+24],r12 */ 0x4c, 0x89, 0x6e, 0x20, /* mov [rsi+32],r13 */ 0x4c, 0x89, 0x76, 0x28, /* mov [rsi+40],r14 */ 0x4c, 0x89, 0x7e, 0x30, /* mov [rsi+48],r15 */ 0x48, 0x8b, 0x6f, 0x08, /* mov rbp,[rdi+ 8] */ 0x48, 0x8b, 0x5f, 0x10, /* mov rbx,[rdi+16] */ 0x4c, 0x8b, 0x67, 0x18, /* mov r12,[rdi+24] */ 0x4c, 0x8b, 0x6f, 0x20, /* mov r13,[rdi+32] */ 0x4c, 0x8b, 0x77, 0x28, /* mov r14,[rdi+40] */ 0x4c, 0x8b, 0x7f, 0x30, /* mov r15,[rdi+48] */ 0xff, 0xe0, /* jmp rax */ }; #ifdef LIBCO_MPROTECT #include #include #endif static void co_init() { #ifdef LIBCO_MPROTECT unsigned long long addr = (unsigned long long)co_swap_function; unsigned long long base = addr - (addr % sysconf(_SC_PAGESIZE)); unsigned long long size = (addr - base) + sizeof co_swap_function; mprotect((void*)base, size, PROT_READ | PROT_EXEC); #endif } #endif static void crash() { assert(0); /* called only if cothread_t entrypoint returns */ } cothread_t co_active() { if(!co_active_handle) co_active_handle = &co_active_buffer; return co_active_handle; } cothread_t co_derive(void* memory, unsigned int size, void (*entrypoint)(void)) { cothread_t handle; if(!co_swap) { co_init(); co_swap = (void (*)(cothread_t, cothread_t))co_swap_function; } if(!co_active_handle) co_active_handle = &co_active_buffer; if(handle = (cothread_t)memory) { unsigned int offset = (size & ~15) - 32; long long *p = (long long*)((char*)handle + offset); /* seek to top of stack */ *--p = (long long)crash; /* crash if entrypoint returns */ *--p = (long long)entrypoint; /* start of function */ *(long long*)handle = (long long)p; /* stack pointer */ } return handle; } cothread_t co_create(unsigned int size, void (*entrypoint)(void)) { void* memory = malloc(size); if(!memory) return (cothread_t)0; return co_derive(memory, size, entrypoint); } void co_delete(cothread_t handle) { free(handle); } void co_switch(cothread_t handle) { register cothread_t co_previous_handle = co_active_handle; co_swap(co_active_handle = handle, co_previous_handle); } int co_serializable() { return 1; } #ifdef __cplusplus } #endif ares-126/libco/arm.c000066400000000000000000000037661415063341600143500ustar00rootroot00000000000000#define LIBCO_C #include "libco.h" #include "settings.h" #include #include #ifdef LIBCO_MPROTECT #include #include #endif #ifdef __cplusplus extern "C" { #endif static thread_local unsigned long co_active_buffer[64]; static thread_local cothread_t co_active_handle = 0; static void (*co_swap)(cothread_t, cothread_t) = 0; #ifdef LIBCO_MPROTECT alignas(4096) #else section(text) #endif static const unsigned long co_swap_function[1024] = { 0xe8a16ff0, /* stmia r1!, {r4-r11,sp,lr} */ 0xe8b0aff0, /* ldmia r0!, {r4-r11,sp,pc} */ 0xe12fff1e, /* bx lr */ }; static void co_init() { #ifdef LIBCO_MPROTECT unsigned long addr = (unsigned long)co_swap_function; unsigned long base = addr - (addr % sysconf(_SC_PAGESIZE)); unsigned long size = (addr - base) + sizeof co_swap_function; mprotect((void*)base, size, PROT_READ | PROT_EXEC); #endif } cothread_t co_active() { if(!co_active_handle) co_active_handle = &co_active_buffer; return co_active_handle; } cothread_t co_derive(void* memory, unsigned int size, void (*entrypoint)(void)) { unsigned long* handle; if(!co_swap) { co_init(); co_swap = (void (*)(cothread_t, cothread_t))co_swap_function; } if(!co_active_handle) co_active_handle = &co_active_buffer; if(handle = (unsigned long*)memory) { unsigned int offset = (size & ~15); unsigned long* p = (unsigned long*)((unsigned char*)handle + offset); handle[8] = (unsigned long)p; handle[9] = (unsigned long)entrypoint; } return handle; } cothread_t co_create(unsigned int size, void (*entrypoint)(void)) { void* memory = malloc(size); if(!memory) return (cothread_t)0; return co_derive(memory, size, entrypoint); } void co_delete(cothread_t handle) { free(handle); } void co_switch(cothread_t handle) { cothread_t co_previous_handle = co_active_handle; co_swap(co_active_handle = handle, co_previous_handle); } int co_serializable() { return 1; } #ifdef __cplusplus } #endif ares-126/libco/fiber.c000066400000000000000000000020561415063341600146470ustar00rootroot00000000000000#define LIBCO_C #include "libco.h" #include "settings.h" #define WINVER 0x0400 #define _WIN32_WINNT 0x0400 #include #ifdef __cplusplus extern "C" { #endif static thread_local cothread_t co_active_ = 0; static void __stdcall co_thunk(void* coentry) { ((void (*)(void))coentry)(); } cothread_t co_active() { if(!co_active_) { ConvertThreadToFiber(0); co_active_ = GetCurrentFiber(); } return co_active_; } cothread_t co_derive(void* memory, unsigned int heapsize, void (*coentry)(void)) { //Windows fibers do not allow users to supply their own memory return (cothread_t)0; } cothread_t co_create(unsigned int heapsize, void (*coentry)(void)) { if(!co_active_) { ConvertThreadToFiber(0); co_active_ = GetCurrentFiber(); } return (cothread_t)CreateFiber(heapsize, co_thunk, (void*)coentry); } void co_delete(cothread_t cothread) { DeleteFiber(cothread); } void co_switch(cothread_t cothread) { co_active_ = cothread; SwitchToFiber(cothread); } int co_serializable() { return 0; } #ifdef __cplusplus } #endif ares-126/libco/libco.c000066400000000000000000000016671415063341600146570ustar00rootroot00000000000000#if defined(__clang__) #pragma clang diagnostic ignored "-Wparentheses" /* placing code in section(text) does not mark it executable with Clang. */ #undef LIBCO_MPROTECT #define LIBCO_MPROTECT #endif #if defined(__clang__) || defined(__GNUC__) #if defined(__i386__) #include "x86.c" #elif defined(__amd64__) #include "amd64.c" #elif defined(__arm__) #include "arm.c" #elif defined(__aarch64__) #include "aarch64.c" #elif defined(__powerpc64__) && defined(_CALL_ELF) && _CALL_ELF == 2 #include "ppc64v2.c" #elif defined(_ARCH_PPC) && !defined(__LITTLE_ENDIAN__) #include "ppc.c" #elif defined(_WIN32) #include "fiber.c" #else #include "sjlj.c" #endif #elif defined(_MSC_VER) #if defined(_M_IX86) #include "x86.c" #elif defined(_M_AMD64) #include "amd64.c" #else #include "fiber.c" #endif #else #error "libco: unsupported processor, compiler or operating system" #endif ares-126/libco/libco.h000066400000000000000000000005741415063341600146600ustar00rootroot00000000000000#ifndef LIBCO_H #define LIBCO_H #ifdef __cplusplus extern "C" { #endif typedef void* cothread_t; cothread_t co_active(void); cothread_t co_derive(void*, unsigned int, void (*)(void)); cothread_t co_create(unsigned int, void (*)(void)); void co_delete(cothread_t); void co_switch(cothread_t); int co_serializable(void); #ifdef __cplusplus } #endif /* ifndef LIBCO_H */ #endif ares-126/libco/ppc.c000066400000000000000000000325311415063341600143430ustar00rootroot00000000000000/* ppc64le (ELFv2) is not currently supported */ #define LIBCO_C #include "libco.h" #include "settings.h" #include #include #include #ifdef LIBCO_MPROTECT #include #include #endif /* state format (offsets in 32-bit words) +0 pointer to swap code rest of function descriptor for entry function +8 PC +10 SP special registers GPRs FPRs VRs stack */ enum { state_size = 1024 }; enum { above_stack = 2048 }; enum { stack_align = 256 }; static thread_local cothread_t co_active_handle = 0; /* determine environment */ #define LIBCO_PPC64 (_ARCH_PPC64 || __PPC64__ || __ppc64__ || __powerpc64__) /* whether function calls are indirect through a descriptor, or are directly to function */ #ifndef LIBCO_PPCDESC #if !_CALL_SYSV && (_CALL_AIX || _CALL_AIXDESC || (LIBCO_PPC64 && (!defined(_CALL_ELF) || _CALL_ELF == 1))) #define LIBCO_PPCDESC 1 #endif #endif #ifdef LIBCO_MPROTECT alignas(4096) #else section(text) #endif static const uint32_t libco_ppc_code[1024] = { #if LIBCO_PPC64 0x7d000026, /* mfcr r8 */ 0xf8240028, /* std r1,40(r4) */ 0x7d2802a6, /* mflr r9 */ 0xf9c40048, /* std r14,72(r4) */ 0xf9e40050, /* std r15,80(r4) */ 0xfa040058, /* std r16,88(r4) */ 0xfa240060, /* std r17,96(r4) */ 0xfa440068, /* std r18,104(r4) */ 0xfa640070, /* std r19,112(r4) */ 0xfa840078, /* std r20,120(r4) */ 0xfaa40080, /* std r21,128(r4) */ 0xfac40088, /* std r22,136(r4) */ 0xfae40090, /* std r23,144(r4) */ 0xfb040098, /* std r24,152(r4) */ 0xfb2400a0, /* std r25,160(r4) */ 0xfb4400a8, /* std r26,168(r4) */ 0xfb6400b0, /* std r27,176(r4) */ 0xfb8400b8, /* std r28,184(r4) */ 0xfba400c0, /* std r29,192(r4) */ 0xfbc400c8, /* std r30,200(r4) */ 0xfbe400d0, /* std r31,208(r4) */ 0xf9240020, /* std r9,32(r4) */ 0xe8e30020, /* ld r7,32(r3) */ 0xe8230028, /* ld r1,40(r3) */ 0x48000009, /* bl 1 */ 0x7fe00008, /* trap */ 0x91040030, /*1:stw r8,48(r4) */ 0x80c30030, /* lwz r6,48(r3) */ 0x7ce903a6, /* mtctr r7 */ 0xe9c30048, /* ld r14,72(r3) */ 0xe9e30050, /* ld r15,80(r3) */ 0xea030058, /* ld r16,88(r3) */ 0xea230060, /* ld r17,96(r3) */ 0xea430068, /* ld r18,104(r3) */ 0xea630070, /* ld r19,112(r3) */ 0xea830078, /* ld r20,120(r3) */ 0xeaa30080, /* ld r21,128(r3) */ 0xeac30088, /* ld r22,136(r3) */ 0xeae30090, /* ld r23,144(r3) */ 0xeb030098, /* ld r24,152(r3) */ 0xeb2300a0, /* ld r25,160(r3) */ 0xeb4300a8, /* ld r26,168(r3) */ 0xeb6300b0, /* ld r27,176(r3) */ 0xeb8300b8, /* ld r28,184(r3) */ 0xeba300c0, /* ld r29,192(r3) */ 0xebc300c8, /* ld r30,200(r3) */ 0xebe300d0, /* ld r31,208(r3) */ 0x7ccff120, /* mtcr r6 */ #else 0x7d000026, /* mfcr r8 */ 0x90240028, /* stw r1,40(r4) */ 0x7d2802a6, /* mflr r9 */ 0x91a4003c, /* stw r13,60(r4) */ 0x91c40040, /* stw r14,64(r4) */ 0x91e40044, /* stw r15,68(r4) */ 0x92040048, /* stw r16,72(r4) */ 0x9224004c, /* stw r17,76(r4) */ 0x92440050, /* stw r18,80(r4) */ 0x92640054, /* stw r19,84(r4) */ 0x92840058, /* stw r20,88(r4) */ 0x92a4005c, /* stw r21,92(r4) */ 0x92c40060, /* stw r22,96(r4) */ 0x92e40064, /* stw r23,100(r4) */ 0x93040068, /* stw r24,104(r4) */ 0x9324006c, /* stw r25,108(r4) */ 0x93440070, /* stw r26,112(r4) */ 0x93640074, /* stw r27,116(r4) */ 0x93840078, /* stw r28,120(r4) */ 0x93a4007c, /* stw r29,124(r4) */ 0x93c40080, /* stw r30,128(r4) */ 0x93e40084, /* stw r31,132(r4) */ 0x91240020, /* stw r9,32(r4) */ 0x80e30020, /* lwz r7,32(r3) */ 0x80230028, /* lwz r1,40(r3) */ 0x48000009, /* bl 1 */ 0x7fe00008, /* trap */ 0x91040030, /*1:stw r8,48(r4) */ 0x80c30030, /* lwz r6,48(r3) */ 0x7ce903a6, /* mtctr r7 */ 0x81a3003c, /* lwz r13,60(r3) */ 0x81c30040, /* lwz r14,64(r3) */ 0x81e30044, /* lwz r15,68(r3) */ 0x82030048, /* lwz r16,72(r3) */ 0x8223004c, /* lwz r17,76(r3) */ 0x82430050, /* lwz r18,80(r3) */ 0x82630054, /* lwz r19,84(r3) */ 0x82830058, /* lwz r20,88(r3) */ 0x82a3005c, /* lwz r21,92(r3) */ 0x82c30060, /* lwz r22,96(r3) */ 0x82e30064, /* lwz r23,100(r3) */ 0x83030068, /* lwz r24,104(r3) */ 0x8323006c, /* lwz r25,108(r3) */ 0x83430070, /* lwz r26,112(r3) */ 0x83630074, /* lwz r27,116(r3) */ 0x83830078, /* lwz r28,120(r3) */ 0x83a3007c, /* lwz r29,124(r3) */ 0x83c30080, /* lwz r30,128(r3) */ 0x83e30084, /* lwz r31,132(r3) */ 0x7ccff120, /* mtcr r6 */ #endif #ifndef LIBCO_PPC_NOFP 0xd9c400e0, /* stfd f14,224(r4) */ 0xd9e400e8, /* stfd f15,232(r4) */ 0xda0400f0, /* stfd f16,240(r4) */ 0xda2400f8, /* stfd f17,248(r4) */ 0xda440100, /* stfd f18,256(r4) */ 0xda640108, /* stfd f19,264(r4) */ 0xda840110, /* stfd f20,272(r4) */ 0xdaa40118, /* stfd f21,280(r4) */ 0xdac40120, /* stfd f22,288(r4) */ 0xdae40128, /* stfd f23,296(r4) */ 0xdb040130, /* stfd f24,304(r4) */ 0xdb240138, /* stfd f25,312(r4) */ 0xdb440140, /* stfd f26,320(r4) */ 0xdb640148, /* stfd f27,328(r4) */ 0xdb840150, /* stfd f28,336(r4) */ 0xdba40158, /* stfd f29,344(r4) */ 0xdbc40160, /* stfd f30,352(r4) */ 0xdbe40168, /* stfd f31,360(r4) */ 0xc9c300e0, /* lfd f14,224(r3) */ 0xc9e300e8, /* lfd f15,232(r3) */ 0xca0300f0, /* lfd f16,240(r3) */ 0xca2300f8, /* lfd f17,248(r3) */ 0xca430100, /* lfd f18,256(r3) */ 0xca630108, /* lfd f19,264(r3) */ 0xca830110, /* lfd f20,272(r3) */ 0xcaa30118, /* lfd f21,280(r3) */ 0xcac30120, /* lfd f22,288(r3) */ 0xcae30128, /* lfd f23,296(r3) */ 0xcb030130, /* lfd f24,304(r3) */ 0xcb230138, /* lfd f25,312(r3) */ 0xcb430140, /* lfd f26,320(r3) */ 0xcb630148, /* lfd f27,328(r3) */ 0xcb830150, /* lfd f28,336(r3) */ 0xcba30158, /* lfd f29,344(r3) */ 0xcbc30160, /* lfd f30,352(r3) */ 0xcbe30168, /* lfd f31,360(r3) */ #endif #ifdef __ALTIVEC__ 0x7ca042a6, /* mfvrsave r5 */ 0x39040180, /* addi r8,r4,384 */ 0x39240190, /* addi r9,r4,400 */ 0x70a00fff, /* andi. r0,r5,4095 */ 0x90a40034, /* stw r5,52(r4) */ 0x4182005c, /* beq- 2 */ 0x7e8041ce, /* stvx v20,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7ea049ce, /* stvx v21,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7ec041ce, /* stvx v22,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7ee049ce, /* stvx v23,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7f0041ce, /* stvx v24,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7f2049ce, /* stvx v25,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7f4041ce, /* stvx v26,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7f6049ce, /* stvx v27,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7f8041ce, /* stvx v28,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7fa049ce, /* stvx v29,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7fc041ce, /* stvx v30,r0,r8 */ 0x7fe049ce, /* stvx v31,r0,r9 */ 0x80a30034, /*2:lwz r5,52(r3) */ 0x39030180, /* addi r8,r3,384 */ 0x39230190, /* addi r9,r3,400 */ 0x70a00fff, /* andi. r0,r5,4095 */ 0x7ca043a6, /* mtvrsave r5 */ 0x4d820420, /* beqctr */ 0x7e8040ce, /* lvx v20,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7ea048ce, /* lvx v21,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7ec040ce, /* lvx v22,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7ee048ce, /* lvx v23,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7f0040ce, /* lvx v24,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7f2048ce, /* lvx v25,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7f4040ce, /* lvx v26,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7f6048ce, /* lvx v27,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7f8040ce, /* lvx v28,r0,r8 */ 0x39080020, /* addi r8,r8,32 */ 0x7fa048ce, /* lvx v29,r0,r9 */ 0x39290020, /* addi r9,r9,32 */ 0x7fc040ce, /* lvx v30,r0,r8 */ 0x7fe048ce, /* lvx v31,r0,r9 */ #endif 0x4e800420, /* bctr */ }; #if LIBCO_PPCDESC /* function call goes through indirect descriptor */ #define CO_SWAP_ASM(x, y) ((void (*)(cothread_t, cothread_t))(uintptr_t)x)(x, y) #else /* function call goes directly to code */ #define CO_SWAP_ASM(x, y) ((void (*)(cothread_t, cothread_t))(uintptr_t)libco_ppc_code)(x, y) #endif static uint32_t* co_derive_(void* memory, unsigned size, uintptr_t entry) { (void)entry; uint32_t* t = (uint32_t*)memory; #if LIBCO_PPCDESC if(t) { memcpy(t, (void*)entry, sizeof(void*) * 3); /* copy entry's descriptor */ *(const void**)t = libco_ppc_code; /* set function pointer to swap routine */ } #endif return t; } cothread_t co_derive(void* memory, unsigned int size, void (*entry_)(void)) { uintptr_t entry = (uintptr_t)entry_; uint32_t* t = 0; /* be sure main thread was successfully allocated */ if(co_active()) { t = co_derive_(memory, size, entry); } if(t) { uintptr_t sp; int shift; /* save current registers into new thread, so that any special ones will have proper values when thread is begun */ CO_SWAP_ASM(t, t); #if LIBCO_PPCDESC entry = (uintptr_t)*(void**)entry; /* get real address */ #endif /* put stack near end of block, and align */ sp = (uintptr_t)t + size - above_stack; sp -= sp % stack_align; /* on PPC32, we save and restore GPRs as 32 bits. for PPC64, we save and restore them as 64 bits, regardless of the size the ABI uses. so, we manually write pointers at the proper size. we always save and restore at the same address, and since PPC is big-endian, we must put the low byte first on PPC32. */ /* if uintptr_t is 32 bits, >>32 is undefined behavior, so we do two shifts and don't have to care how many bits uintptr_t is. */ #if LIBCO_PPC64 shift = 16; #else shift = 0; #endif /* set up so entry will be called on next swap */ t[ 8] = (uint32_t)(entry >> shift >> shift); t[ 9] = (uint32_t)entry; t[10] = (uint32_t)(sp >> shift >> shift); t[11] = (uint32_t)sp; } return t; } static uint32_t* co_create_(unsigned size, uintptr_t entry) { (void)entry; uint32_t* t = (uint32_t*)malloc(size); #if LIBCO_PPCDESC if(t) { memcpy(t, (void*)entry, sizeof(void*) * 3); /* copy entry's descriptor */ *(const void**)t = libco_ppc_code; /* set function pointer to swap routine */ } #endif return t; } cothread_t co_create(unsigned int size, void (*entry_)(void)) { uintptr_t entry = (uintptr_t)entry_; uint32_t* t = 0; /* be sure main thread was successfully allocated */ if(co_active()) { size += state_size + above_stack + stack_align; t = co_create_(size, entry); } if(t) { uintptr_t sp; int shift; /* save current registers into new thread, so that any special ones will have proper values when thread is begun */ CO_SWAP_ASM(t, t); #if LIBCO_PPCDESC entry = (uintptr_t)*(void**)entry; /* get real address */ #endif /* put stack near end of block, and align */ sp = (uintptr_t)t + size - above_stack; sp -= sp % stack_align; /* on PPC32, we save and restore GPRs as 32 bits. for PPC64, we save and restore them as 64 bits, regardless of the size the ABI uses. so, we manually write pointers at the proper size. we always save and restore at the same address, and since PPC is big-endian, we must put the low byte first on PPC32. */ /* if uintptr_t is 32 bits, >>32 is undefined behavior, so we do two shifts and don't have to care how many bits uintptr_t is. */ #if LIBCO_PPC64 shift = 16; #else shift = 0; #endif /* set up so entry will be called on next swap */ t[ 8] = (uint32_t)(entry >> shift >> shift); t[ 9] = (uint32_t)entry; t[10] = (uint32_t)(sp >> shift >> shift); t[11] = (uint32_t)sp; } return t; } void co_delete(cothread_t t) { free(t); } static void co_init_(void) { #if LIBCO_MPROTECT long page_size = sysconf(_SC_PAGESIZE); if(page_size > 0) { uintptr_t align = page_size; uintptr_t begin = (uintptr_t)libco_ppc_code; uintptr_t end = begin + sizeof libco_ppc_code; /* align beginning and end */ end += align - 1; end -= end % align; begin -= begin % align; mprotect((void*)begin, end - begin, PROT_READ | PROT_EXEC); } #endif co_active_handle = co_create_(state_size, (uintptr_t)&co_switch); } cothread_t co_active() { if(!co_active_handle) co_init_(); return co_active_handle; } void co_switch(cothread_t t) { cothread_t old = co_active_handle; co_active_handle = t; CO_SWAP_ASM(t, old); } int co_serializable() { return 0; } ares-126/libco/ppc64v2.c000066400000000000000000000125341415063341600147660ustar00rootroot00000000000000/* author: Shawn Anastasio */ #define LIBCO_C #include "libco.h" #include "settings.h" #include #include #ifdef __cplusplus extern "C" { #endif struct ppc64_context { //GPRs uint64_t gprs[32]; uint64_t lr; uint64_t ccr; //FPRs uint64_t fprs[32]; #ifdef __ALTIVEC__ //Altivec (VMX) uint64_t vmx[12 * 2]; uint32_t vrsave; #endif }; static thread_local struct ppc64_context* co_active_handle = 0; #define MAX(x, y) ((x) > (y) ? (x) : (y)) #define ALIGN(p, x) ((void*)((uintptr_t)(p) & ~((x) - 1))) #define MIN_STACK 0x10000lu #define MIN_STACK_FRAME 0x20lu #define STACK_ALIGN 0x10lu void swap_context(struct ppc64_context* read, struct ppc64_context* write); __asm__( ".text\n" ".align 4\n" ".type swap_context @function\n" "swap_context:\n" ".cfi_startproc\n" //save GPRs "std 1, 8(4)\n" "std 2, 16(4)\n" "std 12, 96(4)\n" "std 13, 104(4)\n" "std 14, 112(4)\n" "std 15, 120(4)\n" "std 16, 128(4)\n" "std 17, 136(4)\n" "std 18, 144(4)\n" "std 19, 152(4)\n" "std 20, 160(4)\n" "std 21, 168(4)\n" "std 22, 176(4)\n" "std 23, 184(4)\n" "std 24, 192(4)\n" "std 25, 200(4)\n" "std 26, 208(4)\n" "std 27, 216(4)\n" "std 28, 224(4)\n" "std 29, 232(4)\n" "std 30, 240(4)\n" "std 31, 248(4)\n" //save LR "mflr 5\n" "std 5, 256(4)\n" //save CCR "mfcr 5\n" "std 5, 264(4)\n" //save FPRs "stfd 14, 384(4)\n" "stfd 15, 392(4)\n" "stfd 16, 400(4)\n" "stfd 17, 408(4)\n" "stfd 18, 416(4)\n" "stfd 19, 424(4)\n" "stfd 20, 432(4)\n" "stfd 21, 440(4)\n" "stfd 22, 448(4)\n" "stfd 23, 456(4)\n" "stfd 24, 464(4)\n" "stfd 25, 472(4)\n" "stfd 26, 480(4)\n" "stfd 27, 488(4)\n" "stfd 28, 496(4)\n" "stfd 29, 504(4)\n" "stfd 30, 512(4)\n" "stfd 31, 520(4)\n" #ifdef __ALTIVEC__ //save VMX "li 5, 528\n" "stvxl 20, 4, 5\n" "addi 5, 5, 16\n" "stvxl 21, 4, 5\n" "addi 5, 5, 16\n" "stvxl 22, 4, 5\n" "addi 5, 5, 16\n" "stvxl 23, 4, 5\n" "addi 5, 5, 16\n" "stvxl 24, 4, 5\n" "addi 5, 5, 16\n" "stvxl 25, 4, 5\n" "addi 5, 5, 16\n" "stvxl 26, 4, 5\n" "addi 5, 5, 16\n" "stvxl 27, 4, 5\n" "addi 5, 5, 16\n" "stvxl 28, 4, 5\n" "addi 5, 5, 16\n" "stvxl 29, 4, 5\n" "addi 5, 5, 16\n" "stvxl 30, 4, 5\n" "addi 5, 5, 16\n" "stvxl 31, 4, 5\n" "addi 5, 5, 16\n" //save VRSAVE "mfvrsave 5\n" "stw 5, 736(4)\n" #endif //restore GPRs "ld 1, 8(3)\n" "ld 2, 16(3)\n" "ld 12, 96(3)\n" "ld 13, 104(3)\n" "ld 14, 112(3)\n" "ld 15, 120(3)\n" "ld 16, 128(3)\n" "ld 17, 136(3)\n" "ld 18, 144(3)\n" "ld 19, 152(3)\n" "ld 20, 160(3)\n" "ld 21, 168(3)\n" "ld 22, 176(3)\n" "ld 23, 184(3)\n" "ld 24, 192(3)\n" "ld 25, 200(3)\n" "ld 26, 208(3)\n" "ld 27, 216(3)\n" "ld 28, 224(3)\n" "ld 29, 232(3)\n" "ld 30, 240(3)\n" "ld 31, 248(3)\n" //restore LR "ld 5, 256(3)\n" "mtlr 5\n" //restore CCR "ld 5, 264(3)\n" "mtcr 5\n" //restore FPRs "lfd 14, 384(3)\n" "lfd 15, 392(3)\n" "lfd 16, 400(3)\n" "lfd 17, 408(3)\n" "lfd 18, 416(3)\n" "lfd 19, 424(3)\n" "lfd 20, 432(3)\n" "lfd 21, 440(3)\n" "lfd 22, 448(3)\n" "lfd 23, 456(3)\n" "lfd 24, 464(3)\n" "lfd 25, 472(3)\n" "lfd 26, 480(3)\n" "lfd 27, 488(3)\n" "lfd 28, 496(3)\n" "lfd 29, 504(3)\n" "lfd 30, 512(3)\n" "lfd 31, 520(3)\n" #ifdef __ALTIVEC__ //restore VMX "li 5, 528\n" "lvxl 20, 3, 5\n" "addi 5, 5, 16\n" "lvxl 21, 3, 5\n" "addi 5, 5, 16\n" "lvxl 22, 3, 5\n" "addi 5, 5, 16\n" "lvxl 23, 3, 5\n" "addi 5, 5, 16\n" "lvxl 24, 3, 5\n" "addi 5, 5, 16\n" "lvxl 25, 3, 5\n" "addi 5, 5, 16\n" "lvxl 26, 3, 5\n" "addi 5, 5, 16\n" "lvxl 27, 3, 5\n" "addi 5, 5, 16\n" "lvxl 28, 3, 5\n" "addi 5, 5, 16\n" "lvxl 29, 3, 5\n" "addi 5, 5, 16\n" "lvxl 30, 3, 5\n" "addi 5, 5, 16\n" "lvxl 31, 3, 5\n" "addi 5, 5, 16\n" //restore VRSAVE "lwz 5, 720(3)\n" "mtvrsave 5\n" #endif //branch to LR "blr\n" ".cfi_endproc\n" ".size swap_context, .-swap_context\n" ); cothread_t co_active() { if(!co_active_handle) { co_active_handle = (struct ppc64_context*)malloc(MIN_STACK + sizeof(struct ppc64_context)); } return (cothread_t)co_active_handle; } cothread_t co_derive(void* memory, unsigned int size, void (*coentry)(void)) { uint8_t* sp; struct ppc64_context* context = (struct ppc64_context*)memory; //save current context into new context to initialize it swap_context(context, context); //align stack sp = (uint8_t*)memory + size - STACK_ALIGN; sp = (uint8_t*)ALIGN(sp, STACK_ALIGN); //write 0 for initial backchain *(uint64_t*)sp = 0; //create new frame with backchain sp -= MIN_STACK_FRAME; *(uint64_t*)sp = (uint64_t)(sp + MIN_STACK_FRAME); //update context with new stack (r1) and entrypoint (r12, lr) context->gprs[ 1] = (uint64_t)sp; context->gprs[12] = (uint64_t)coentry; context->lr = (uint64_t)coentry; return (cothread_t)memory; } cothread_t co_create(unsigned int size, void (*coentry)(void)) { void* memory = malloc(size); if(!memory) return (cothread_t)0; return co_derive(memory, size, coentry); } void co_delete(cothread_t handle) { free(handle); } void co_switch(cothread_t to) { struct ppc64_context* from = co_active_handle; co_active_handle = (struct ppc64_context*)to; swap_context((struct ppc64_context*)to, from); } int co_serializable() { return 1; } #ifdef __cplusplus } #endif ares-126/libco/settings.h000066400000000000000000000016641415063341600154310ustar00rootroot00000000000000#if defined(LIBCO_C) /*[amd64, arm, ppc, x86]: by default, co_swap_function is marked as a text (code) section if not supported, uncomment the below line to use mprotect instead */ /* #define LIBCO_MPROTECT */ /*[amd64]: Win64 only: provides a substantial speed-up, but will thrash XMM regs do not use this unless you are certain your application won't use SSE */ /* #define LIBCO_NO_SSE */ #if defined(LIBCO_C) #if defined(LIBCO_MP) #define thread_local __thread #else #define thread_local #endif #endif #if __STDC_VERSION__ >= 201112L #if !defined(_MSC_VER) #include #endif #else #define alignas(bytes) #endif #if defined(_MSC_VER) #define section(name) __declspec(allocate("." #name)) #elif defined(__APPLE__) #define section(name) __attribute__((section("__TEXT,__" #name))) #else #define section(name) __attribute__((section("." #name "#"))) #endif /* if defined(LIBCO_C) */ #endif ares-126/libco/sjlj.c000066400000000000000000000065151415063341600145260ustar00rootroot00000000000000/* note this was designed for UNIX systems. Based on ideas expressed in a paper by Ralf Engelschall. for SJLJ on other systems, one would want to rewrite springboard() and co_create() and hack the jmb_buf stack pointer. */ #define LIBCO_C #include "libco.h" #include "settings.h" #define _BSD_SOURCE #define _XOPEN_SOURCE 500 #include #include #include #ifdef __cplusplus extern "C" { #endif typedef struct { sigjmp_buf context; void (*coentry)(void); void* stack; } cothread_struct; static thread_local cothread_struct co_primary; static thread_local cothread_struct* creating; static thread_local cothread_struct* co_running = 0; static void springboard(int ignored) { if(sigsetjmp(creating->context, 0)) { co_running->coentry(); } } cothread_t co_active() { if(!co_running) co_running = &co_primary; return (cothread_t)co_running; } cothread_t co_derive(void* memory, unsigned int size, void (*coentry)(void)) { if(!co_running) co_running = &co_primary; cothread_struct* thread = (cothread_struct*)memory; memory = (unsigned char*)memory + sizeof(cothread_struct); size -= sizeof(cothread_struct); if(thread) { struct sigaction handler; struct sigaction old_handler; stack_t stack; stack_t old_stack; thread->coentry = thread->stack = 0; stack.ss_flags = 0; stack.ss_size = size; thread->stack = stack.ss_sp = memory; if(stack.ss_sp && !sigaltstack(&stack, &old_stack)) { handler.sa_handler = springboard; handler.sa_flags = SA_ONSTACK; sigemptyset(&handler.sa_mask); creating = thread; if(!sigaction(SIGUSR1, &handler, &old_handler)) { if(!raise(SIGUSR1)) { thread->coentry = coentry; } sigaltstack(&old_stack, 0); sigaction(SIGUSR1, &old_handler, 0); } } if(thread->coentry != coentry) { co_delete(thread); thread = 0; } } return (cothread_t)thread; } cothread_t co_create(unsigned int size, void (*coentry)(void)) { if(!co_running) co_running = &co_primary; cothread_struct* thread = (cothread_struct*)malloc(sizeof(cothread_struct)); if(thread) { struct sigaction handler; struct sigaction old_handler; stack_t stack; stack_t old_stack; thread->coentry = thread->stack = 0; stack.ss_flags = 0; stack.ss_size = size; thread->stack = stack.ss_sp = malloc(size); if(stack.ss_sp && !sigaltstack(&stack, &old_stack)) { handler.sa_handler = springboard; handler.sa_flags = SA_ONSTACK; sigemptyset(&handler.sa_mask); creating = thread; if(!sigaction(SIGUSR1, &handler, &old_handler)) { if(!raise(SIGUSR1)) { thread->coentry = coentry; } sigaltstack(&old_stack, 0); sigaction(SIGUSR1, &old_handler, 0); } } if(thread->coentry != coentry) { co_delete(thread); thread = 0; } } return (cothread_t)thread; } void co_delete(cothread_t cothread) { if(cothread) { if(((cothread_struct*)cothread)->stack) { free(((cothread_struct*)cothread)->stack); } free(cothread); } } void co_switch(cothread_t cothread) { if(!sigsetjmp(co_running->context, 0)) { co_running = (cothread_struct*)cothread; siglongjmp(co_running->context, 1); } } int co_serializable() { return 0; } #ifdef __cplusplus } #endif ares-126/libco/ucontext.c000066400000000000000000000044311415063341600154300ustar00rootroot00000000000000/* WARNING: the overhead of POSIX ucontext is very high, assembly versions of libco or libco_sjlj should be much faster this library only exists for two reasons: 1: as an initial test for the viability of a ucontext implementation 2: to demonstrate the power and speed of libco over existing implementations, such as pth (which defaults to wrapping ucontext on unix targets) use this library only as a *last resort* */ #define LIBCO_C #include "libco.h" #include "settings.h" #define _BSD_SOURCE #define _XOPEN_SOURCE 500 #include #include #ifdef __cplusplus extern "C" { #endif static thread_local ucontext_t co_primary; static thread_local ucontext_t* co_running = 0; cothread_t co_active() { if(!co_running) co_running = &co_primary; return (cothread_t)co_running; } cothread_t co_derive(void* memory, unsigned int heapsize, void (*coentry)(void)) { if(!co_running) co_running = &co_primary; ucontext_t* thread = (ucontext_t*)memory; memory = (unsigned char*)memory + sizeof(ucontext_t); heapsize -= sizeof(ucontext_t); if(thread) { if((!getcontext(thread) && !(thread->uc_stack.ss_sp = 0)) && (thread->uc_stack.ss_sp = memory)) { thread->uc_link = co_running; thread->uc_stack.ss_size = heapsize; makecontext(thread, coentry, 0); } else { thread = 0; } } return (cothread_t)thread; } cothread_t co_create(unsigned int heapsize, void (*coentry)(void)) { if(!co_running) co_running = &co_primary; ucontext_t* thread = (ucontext_t*)malloc(sizeof(ucontext_t)); if(thread) { if((!getcontext(thread) && !(thread->uc_stack.ss_sp = 0)) && (thread->uc_stack.ss_sp = malloc(heapsize))) { thread->uc_link = co_running; thread->uc_stack.ss_size = heapsize; makecontext(thread, coentry, 0); } else { co_delete((cothread_t)thread); thread = 0; } } return (cothread_t)thread; } void co_delete(cothread_t cothread) { if(cothread) { if(((ucontext_t*)cothread)->uc_stack.ss_sp) { free(((ucontext_t*)cothread)->uc_stack.ss_sp); } free(cothread); } } void co_switch(cothread_t cothread) { ucontext_t* old_thread = co_running; co_running = (ucontext_t*)cothread; swapcontext(old_thread, co_running); } int co_serializable() { return 0; } #ifdef __cplusplus } #endif ares-126/libco/x86.c000066400000000000000000000061461415063341600142110ustar00rootroot00000000000000#define LIBCO_C #include "libco.h" #include "settings.h" #include #include #ifdef __cplusplus extern "C" { #endif #if defined(__clang__) || defined(__GNUC__) #define fastcall __attribute__((fastcall)) #elif defined(_MSC_VER) #define fastcall __fastcall #else #error "libco: please define fastcall macro" #endif static thread_local long co_active_buffer[64]; static thread_local cothread_t co_active_handle = 0; static void (fastcall *co_swap)(cothread_t, cothread_t) = 0; #ifdef LIBCO_MPROTECT alignas(4096) #else section(text) #endif /* ABI: fastcall */ static const unsigned char co_swap_function[4096] = { 0x89, 0x22, /* mov [edx],esp */ 0x8b, 0x21, /* mov esp,[ecx] */ 0x58, /* pop eax */ 0x89, 0x6a, 0x04, /* mov [edx+ 4],ebp */ 0x89, 0x72, 0x08, /* mov [edx+ 8],esi */ 0x89, 0x7a, 0x0c, /* mov [edx+12],edi */ 0x89, 0x5a, 0x10, /* mov [edx+16],ebx */ 0x8b, 0x69, 0x04, /* mov ebp,[ecx+ 4] */ 0x8b, 0x71, 0x08, /* mov esi,[ecx+ 8] */ 0x8b, 0x79, 0x0c, /* mov edi,[ecx+12] */ 0x8b, 0x59, 0x10, /* mov ebx,[ecx+16] */ 0xff, 0xe0, /* jmp eax */ }; #ifdef _WIN32 #include static void co_init() { #ifdef LIBCO_MPROTECT DWORD old_privileges; VirtualProtect((void*)co_swap_function, sizeof co_swap_function, PAGE_EXECUTE_READ, &old_privileges); #endif } #else #ifdef LIBCO_MPROTECT #include #include #endif static void co_init() { #ifdef LIBCO_MPROTECT unsigned long addr = (unsigned long)co_swap_function; unsigned long base = addr - (addr % sysconf(_SC_PAGESIZE)); unsigned long size = (addr - base) + sizeof co_swap_function; mprotect((void*)base, size, PROT_READ | PROT_EXEC); #endif } #endif static void crash() { assert(0); /* called only if cothread_t entrypoint returns */ } cothread_t co_active() { if(!co_active_handle) co_active_handle = &co_active_buffer; return co_active_handle; } cothread_t co_derive(void* memory, unsigned int size, void (*entrypoint)(void)) { cothread_t handle; if(!co_swap) { co_init(); co_swap = (void (fastcall*)(cothread_t, cothread_t))co_swap_function; } if(!co_active_handle) co_active_handle = &co_active_buffer; if(handle = (cothread_t)memory) { unsigned int offset = (size & ~15) - 32; long *p = (long*)((char*)handle + offset); /* seek to top of stack */ *--p = (long)crash; /* crash if entrypoint returns */ *--p = (long)entrypoint; /* start of function */ *(long*)handle = (long)p; /* stack pointer */ } return handle; } cothread_t co_create(unsigned int size, void (*entrypoint)(void)) { void* memory = malloc(size); if(!memory) return (cothread_t)0; return co_derive(memory, size, entrypoint); } void co_delete(cothread_t handle) { free(handle); } void co_switch(cothread_t handle) { register cothread_t co_previous_handle = co_active_handle; co_swap(co_active_handle = handle, co_previous_handle); } int co_serializable() { return 1; } #ifdef __cplusplus } #endif ares-126/mia/000077500000000000000000000000001415063341600130675ustar00rootroot00000000000000ares-126/mia/Database/000077500000000000000000000000001415063341600145735ustar00rootroot00000000000000ares-126/mia/Database/BS Memory.bml000066400000000000000000000020501415063341600170210ustar00rootroot00000000000000database revision: 2021-03-04 //BS Memory (JPN) database revision: 2021-03-04 game sha256: 80c34b50817d58820bc8c88d2d9fa462550b4a76372e19c6467cbfbc8cf5d9ef title: 鮫亀 キャラカセット name: Same Game - Chara Cassette region: BSMC-ZS5J-JPN revision: BSMC-ZS5J-0 board: BSMC-CR-01 memory type: ROM size: 0x80000 content: Program game sha256: 859c7f7b4771d920a5bdb11f1d247ab6b43fb026594d1062f6f72d32cd340a0a title: 鮫亀 キャラデータ集 name: Same Game - Chara Data Shuu region: BSMC-YS5J-JPN revision: BSMC-YS5J-0 board: BSMC-CR-01 memory type: ROM size: 0x80000 content: Program game sha256: c92a15fdd9b0133f9ea69105d0230a3acd1cdeef98567462eca86ea02a959e4e title: SDガンダム ジーネクスト ユニット&マップコレクション name: SD Gundam G Next - Unit & Map Collection region: BSMC-ZX3J-JPN revision: BSMC-ZX3J-0 board: BSMC-BR-01 memory type: ROM size: 0x80000 content: Program ares-126/mia/Database/Famicom.bml000066400000000000000000005174731415063341600166630ustar00rootroot00000000000000database revision: 2021-11-27 game sha256: 4fb12ad1c791c7ee8d5ec824eff871d71b43b92c4e93b45ed0b60f022459b917 name: After Burner (Japan) title: After Burner (Japan) region: NTSC-J board: SUNSOFT-4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 21b10e8d4cf775aa1f4027c4afb4f64e72e221a506a485cf4ffdf98bed01a524 name: Ai Sensei no Oshiete - Watashi no Hoshi (Japan) title: Ai Sensei no Oshiete - Watashi no Hoshi (Japan) region: NTSC-J board: IREM-G101 chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: caa7f0a9aa265625cc375ea6fe21d410b661476b5a665344eda1c5a9dff404f4 name: Akira (Japan) title: Akira (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: fec392d252eda8203bfaee45c95ccfc8c1689b90ab6de5cce3f45320d9c69c74 name: Akuma-kun - Makai no Wana (Japan) title: Akuma-kun - Makai no Wana (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: c70f0f5d4054ce7c4850259879c9823add73ccc234ddcf96d95681bb78bd2c58 name: Akumajou Densetsu (Japan) title: Akumajou Densetsu (Japan) region: NTSC-J board: KONAMI-VRC-6 chip type: VRC6 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ff5b96853cf67171918aad5157661dc223e0002e0373e2580cee2e207bb0a682 name: Akumajou Special - Boku Dracula-kun (Japan) title: Akumajou Special - Boku Dracula-kun (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 2 a1: 3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 722096b8929442310bc268f9cfea10b26cff8a7e900197b54c73b4a8603b5d96 name: Aladdin (Europe) title: Aladdin (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 5fe3435b99c10cd641e3f5509ec34e16559fdbd607e11b830f5a2ad572dff50f name: Arch Rivals - A Basketbrawl! (Europe) title: Arch Rivals - A Basketbrawl! (Europe) region: PAL board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: bb834eb82f0ac53114035e6f353434a934d4aa47742644740de5fa8b2b033b5b name: Arch Rivals - A Basketbrawl! (USA) title: Arch Rivals - A Basketbrawl! (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 7768ef85519c94dc40d09bc598121825d103fcf1d4927be59f597b0a3509d15f name: Argus (Japan) title: Argus (Japan) region: NTSC-J board: JALECO-JF-07 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 8593b6ae7b19b2e767ad2c207c5a83dea90030414f45eef4c0dec3c3a5530364 name: Arkanoid II (Japan) title: Arkanoid II (Japan) region: NTSC-J board: BANDAI-74161A memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 54526dc9444c0eb4b0e5814f98b5e522bcb9881a6f2c0644fc7a21ca8c03502b name: Armadillo (Japan) title: Armadillo (Japan) region: NTSC-J board: HVC-TLSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: f3601248633f47a0ef10723e42a1072c76dd487d7ddf943e618611bb7cfec737 name: Atlantis no Nazo (Japan) title: Atlantis no Nazo (Japan) region: NTSC-J board: SUNSOFT-1 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 2b4ac20082e2f45a8f8fd4922a0e995829719a523e118a9eec891c3206adf25b name: B-Wings (Japan) title: B-Wings (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x33 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: a9d7e89bd4ea28cfd169e32c4516ef5d059e19afb9dfa4ede8412f2373dfb0a7 name: Babel no Tou (Japan) title: Babel no Tou (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: a04479f081dedd31fb5b3f1cfb2741c1a18946cc8f71c0c0ce9488835ce37563 name: Bakushou!! Jinsei Gekijou (Japan) title: Bakushou!! Jinsei Gekijou (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 74b3668bfd13400d296866403a4cfce126c54f6278ab5a8edfc3179f899d0894 name: Bakushou!! Jinsei Gekijou 2 (Japan) title: Bakushou!! Jinsei Gekijou 2 (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 698144cfbd23188ad39a02209a40dc9ad7cbd38c8c04d8957df4482f57a6c6fb name: Bakushou!! Jinsei Gekijou 3 (Japan) title: Bakushou!! Jinsei Gekijou 3 (Japan) region: NTSC-J board: TAITO-TC0690 chip type: TC0690 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: b5f98350a10270ed1675ac4c9abe986e54e71f9f58982526351f937857ac6c66 name: Barcode World (Japan) title: Barcode World (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 299075061656934b3a1610748af3eb2a1cf4008889615e0d78811507cf5f4924 name: Batman (Japan) title: Batman (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 24576b117dbbf9bed5738d7bde982ae5e335abc3998c42f171830a8973e86154 name: Batman - Return of the Joker (Europe) title: Batman - Return of the Joker (Europe) region: PAL board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 183ede1115b428b046ae223f27e2db366a5b62c43f52b6fced5f22a57d39e663 name: Batman - Return of the Joker (USA) title: Batman - Return of the Joker (USA) region: NTSC-U board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 263b133697e368b60a6a11a82d9f0ab0fca94da1bef8c5f823d593b4f2f64e7e name: Battle Fleet (Japan) title: Battle Fleet (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 3250141266d44dd7c134bb728d6a9a7ccfa77a5b12088b60a25feff34bdc1bcc name: Battletoads (Europe) title: Battletoads (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 98acdd3df3ea257aec561804baf7ec7995d057b3723eb167a51f2029d8bdd009 name: Battletoads (Japan) title: Battletoads (Japan) region: NTSC-J board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 56d25e05dde2048c3a9b4e36ab5325091310ce2b65171615b5596fc542db66fa name: Battletoads (USA) title: Battletoads (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 0188e4f9d260b5ba3c1fa456469ec8ed6c4348b09f5ee37993d1351af270cd4c name: Battletoads-Double Dragon (Europe) title: Battletoads-Double Dragon (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 4f67a81cc978e5aaf8aa03046c27ddc954f835e2110e346bc28d35f6b4ac61ca name: Battletoads-Double Dragon (USA) title: Battletoads-Double Dragon (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: b9434d2f359f6e464da36fbcf6d9eb794b7edff03b89467d1609158f13bfef52 name: Beetlejuice (USA) title: Beetlejuice (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 92c481350b63c57385834dfa0ab02aeb527df7e80cec14a3e1a1a77118cd38d1 name: Bio Miracle Bokutte Upa (Japan) title: Bio Miracle Bokutte Upa (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: bad75642a65cde63265f5f0bf0ad8d002da0ae5834a27aae4eb62651de7980cf name: Bio Senshi Dan - Increaser Tono Tatakai (Japan) title: Bio Senshi Dan - Increaser Tono Tatakai (Japan) region: NTSC-J board: JALECO-JF-14 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: acf054b0886a2ca74a0280fc36bc1d55e9845acc29759f1893c1da4c1389f9c2 name: Bird Week (Japan) title: Bird Week (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x0f mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x4000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: caab4e955514d17ff9b08251d09a52cf2fc1126788724e28c3ac3300599694c1 name: Bubble Bobble 2 (Japan) title: Bubble Bobble 2 (Japan) region: NTSC-J board: TAITO-TC0690 chip type: TC0690 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 47dfae941b3c660be476bc28f199474b6c418431e3d493da4384a6aef3cc5016 name: Cabal (USA) title: Cabal (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 2ac39a3e3892cc4e4ec616348a9646be8c8cb8b229c9f5d8868e3a5a5c7e8397 name: Captain Saver (Japan) title: Captain Saver (Japan) region: NTSC-J board: TAITO-TC0690 chip type: TC0690 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: dd1b495734c4ce99d3cca16286ca07f9e75d22fae198fc2626a07cc52d59a80b name: Captain Skyhawk (Europe) title: Captain Skyhawk (Europe) region: PAL board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 141cda262aad72971c00dd9a9655f32cee03e259d371bd8937a864e3300e9e58 name: Captain Skyhawk (USA) title: Captain Skyhawk (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: ffcce36b7ccbec820c664163441ec8c9b94742f250ffd01a10ac8489ce5c88ca name: Captain Skyhawk (USA) (Rev 1) title: Captain Skyhawk (USA) (Rev 1) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 59f228976854136f7988c309ad5baa68687b363df27810e28bb6959b771d5af6 name: Chibi Maruko-chan - Uki Uki Shopping (Japan) title: Chibi Maruko-chan - Uki Uki Shopping (Japan) region: NTSC-J board: NAMCO-175 chip type: 175 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: d5aa44754e9b2bdd3c747ca49e2e52b653889fc235d7ed0ca49177942fa8e9fe name: Choplifter (Japan) title: Choplifter (Japan) region: NTSC-J board: JALECO-JF-08 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 3ad002d6db25da0e1383ca22acba42fdfdf6fd37eba4264dee4c6dcb48568138 name: Choplifter (Japan) (Rev 1) title: Choplifter (Japan) (Rev 1) region: NTSC-J board: JALECO-JF-08 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 72c69f068099e42844bfe17e7d37f439243fad10b283650cac041e78443e0300 name: City Connection (Japan) title: City Connection (Japan) region: NTSC-J board: JALECO-JF-05 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x4000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: f34872482c6c1359b1b87373b620960590915e9805ac4e970666768cfc27172b name: Cobra Triangle (Europe) title: Cobra Triangle (Europe) region: PAL board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: db26936868427b5b01b7823a781ec09ed15bb5dd06945bba0147ffb12215234b name: Cobra Triangle (USA) title: Cobra Triangle (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 62c9d4e0578cb1e615ce9bb2c8ebc15b1e8de4c928c5c07ba9a85c11aa36ae4d name: Contra (Japan) title: Contra (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 3f243f6cf4b33d25d76c7cf9459e82bcd5367aa001f4c36fdf1c5728429bed0a name: Crayon Shin-chan - Ora to Poi Poi (Japan) title: Crayon Shin-chan - Ora to Poi Poi (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: e24d3c754dce20e27046afeacb2dfc217950d4be766ded80c20283392cb3891e name: Crazy Climber (Japan) title: Crazy Climber (Japan) region: NTSC-J board: HVC-UNROMA mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: b504d0ebff8aa6439f1f9606526d8739f5007c1fdac31f9550caa7ca26edce16 name: Crisis Force (Japan) title: Crisis Force (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 2 a1: 3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x20000 content: Character game sha256: a1d9bcf389d6837581cd33a26b4e13917d084e3e69dbe89453e443fc9976fa22 name: Daiku no Gen-san 2 - Akage no Dan no Gyakushuu (Japan) title: Daiku no Gen-san 2 - Akage no Dan no Gyakushuu (Japan) region: NTSC-J board: IREM-H3001 chip type: H3001 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: aa9e3be1451ad009111c587cd2adb9275b052402461f27257617baa7d7cd6767 name: Danny Sullivan's Indy Heat (Europe) title: Danny Sullivan's Indy Heat (Europe) region: PAL board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 4cbf1c1d0be227127513065ccbc8ecf5e5ee61a7a58b6dea79ff01f0eb9f26af name: Danny Sullivan's Indy Heat (USA) title: Danny Sullivan's Indy Heat (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: cbc404d57879beca0b65b855b19fda9e017e7d8cc716941b52bbea8f8a6ee859 name: Datach - Battle Rush - Build Up Robot Tournament (Japan) title: Datach - Battle Rush - Build Up Robot Tournament (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: 0acc10d731fbd33ca07cc6c81ce44850b9668f743012260b526e1053d332e37b name: Datach - Crayon Shin-chan - Ora to Poi Poi (Japan) title: Datach - Crayon Shin-chan - Ora to Poi Poi (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: a1370e7410a98a4a2de19f4872281a065b1d7d7cd7b5f2ba0da70504b4a1d52d name: Datach - Dragon Ball Z - Gekitou Tenkaichi Budoukai (Japan) title: Datach - Dragon Ball Z - Gekitou Tenkaichi Budoukai (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: a7b1e4693093c8a155747f9023399ebb2537064e788970ecdcccee467108b62e name: Datach - J.League Super Top Players (Japan) title: Datach - J.League Super Top Players (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: a6a909d829e3d9ef1a14d002f8ac3c59173420530d467c09fe338b28143f4308 name: Datach - SD Gundam - Gundam Wars (Japan) title: Datach - SD Gundam - Gundam Wars (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: 85f0ab77ae56df26e18bf55caafb795ec24712c168912f0963756fe4daa2ef65 name: Datach - Ultraman Club - Supokon Fight! (Japan) title: Datach - Ultraman Club - Supokon Fight! (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: acc54496853ce6306589790857b0d56145d8382bd00f5d0f40ecdfa2906ad349 name: Datach - Yu Yu Hakusho - Bakutou Ankoku Bujutsukai (Japan) title: Datach - Yu Yu Hakusho - Bakutou Ankoku Bujutsukai (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile memory type: EEPROM size: 0x100 content: Save game sha256: 0115356b0791cc8ddcb7d3163d6ef7aa664f3ff4e68dba561ffffb79eefcbca9 name: Deadly Towers (USA) title: Deadly Towers (USA) region: NTSC-U board: HVC-BNROM mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: a18f143cce068d9df46473f968b31c65beb5246b521843b7653d5993b707d310 name: Densetsu no Kishi - Elrond (Japan) title: Densetsu no Kishi - Elrond (Japan) region: NTSC-J board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: d2140fc2e6354a9f4d0154dabac757e5559890edba4885799c1c979d8b7a8b20 name: Devil Man (Japan) title: Devil Man (Japan) region: NTSC-J board: NAMCO-3453 chip type: 118 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 721c464598519132fbb62f74c39a5b0ef67d1b74ebc571e77d33b5b2b4fae8c4 name: Digger - The Legend of the Lost City (USA) title: Digger - The Legend of the Lost City (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 2203c9fa52130574d846635cc4f7bdb282f9f4696dbd9fb7bb20c0ced970925d name: Digger T. Rock - The Legend of the Lost City (Europe) title: Digger T. Rock - The Legend of the Lost City (Europe) region: PAL board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 0cfdba2ec06229dfda9d68720d1ce45085e430e75f696092829d4a9325704b73 name: Digital Devil Story - Megami Tensei (Japan) title: Digital Devil Story - Megami Tensei (Japan) region: NTSC-J board: NAMCO-3446 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 49ab761441ead1619021d6762bc5db727684de80790ac4f48ff3e3034ae9d278 name: Digital Devil Story - Megami Tensei II (Japan) title: Digital Devil Story - Megami Tensei II (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 168d15dc4727edc7ac7f20c36ce497f58b8066e66a28b1fcba94324ed5410e54 name: Digital Devil Story - Megami Tensei II (Japan) (Rev A) title: Digital Devil Story - Megami Tensei II (Japan) (Rev A) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 86e140846743a3e37888ff3c6ffd5f0102b5c750d7dadc1df5ec68c6f28756e2 name: Dokuganryuu Masamune (Japan) title: Dokuganryuu Masamune (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1eaa6da0a158dd99c5dc46e0c75b8dcec07ee26300847b3e775c8b8ef1e7484a name: Don Doko Don (Japan) title: Don Doko Don (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: fb0b3aab3fb22ab78b1d94fcbc730ed440591fdc359caec9e9f1d45682a38d01 name: Don Doko Don 2 (Japan) title: Don Doko Don 2 (Japan) region: NTSC-J board: TAITO-TC0690 chip type: TC0690 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: de15604ba1f819b12dd35dec557a5f20c9821210c4bc853c29c763466d0ede94 name: Doraemon (Japan) title: Doraemon (Japan) region: NTSC-J board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: b7d636165bee933d258f3d0c832d23c38083d3984dc1bf3bc00dddc4d91a40db name: Doraemon (Japan) (Rev A) title: Doraemon (Japan) (Rev A) region: NTSC-J board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 56cb5897c539b6874e311a314767df85186184690f10d9982b02cb90ff606537 name: Double Dare (USA) title: Double Dare (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: d36b8989cbaf9ceafd91d15edd7b990dce6f9aede1bf9ac696ea8d288ec53d44 name: Dragon Ball - Daimaou Fukkatsu (Japan) title: Dragon Ball - Daimaou Fukkatsu (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 656a10fd06a7d75df48bfc452a6610db1c4e115b552c2811b037336db506cdf5 name: Dragon Ball - Le Secret du Dragon (France) title: Dragon Ball - Le Secret du Dragon (France) region: PAL board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: a2a08b732bfb304345c06b045ef8a3fd53c281c909f177182ff54e26581f6bfe name: Dragon Ball - Le Secret du Dragon (France) (Rev 1) title: Dragon Ball - Le Secret du Dragon (France) (Rev 1) region: PAL board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: e7181cc1e4789719f98ccd1d1857af35f7fb2b58bbf64007fd623c3d40ed6a9c name: Dragon Ball - Shen Long no Nazo (Japan) title: Dragon Ball - Shen Long no Nazo (Japan) region: NTSC-J board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 4d48c60b8bb151d76a08f9af9aab2fff7e5b2b763192aa6fa0512ffd0db97fc6 name: Dragon Ball 3 - Gokuu Den (Japan) title: Dragon Ball 3 - Gokuu Den (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 47acdebfe2beb53eb7cba0ca2920d5d19ff297ebe4c6373635d352111ad94ddb name: Dragon Ball 3 - Gokuu Den (Japan) (Rev 1) title: Dragon Ball 3 - Gokuu Den (Japan) (Rev 1) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 4654f20e7b6dc8bea64b7d0be9aa4f75a4276b4d7f4bc9a06c39172b9e5ae9bf name: Dragon Ball Z - Kyoushuu! Saiya Jin (Japan) title: Dragon Ball Z - Kyoushuu! Saiya Jin (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x80 content: Save game sha256: a0a735282c3ba19f743b7ff2a7178a83cb9dfaf60c6e6c233d5b85c76003b974 name: Dragon Ball Z Gaiden - Saiya Jin Zetsumetsu Keikaku (Japan) title: Dragon Ball Z Gaiden - Saiya Jin Zetsumetsu Keikaku (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: 54d19b5d717bcc6367989e77eb30c7a820b2772aa311d4cca7b235f448cbce0a name: Dragon Ball Z II - Gekishin Freeza!! (Japan) title: Dragon Ball Z II - Gekishin Freeza!! (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: 5287ce3be3b449abead802a5512029b11acb7a1ed10af6303f7fbd575d31af0f name: Dragon Ball Z II - Gekishin Freeza!! (Japan) (Rev 1) title: Dragon Ball Z II - Gekishin Freeza!! (Japan) (Rev 1) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: bb88e85c73125466ebf4943715c66bbe77175d234842a0c9ea542f3cfcf2c528 name: Dragon Ball Z III - Ressen Jinzou Ningen (Japan) title: Dragon Ball Z III - Ressen Jinzou Ningen (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: b1a7377282123b3b18107e0d929666af8831bebde78ceaf7fe410c2132cd61ce name: Dragon Buster (Japan) title: Dragon Buster (Japan) region: NTSC-J board: NAMCO-3425 chip type: 118 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: d5b68bd4da4c796d0d630365b25bacfe640e5c7c1c8655e9ce5aaebd268dd45a name: Dragon Buster II - Yami no Fuuin (Japan) title: Dragon Buster II - Yami no Fuuin (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 456caa33251d5b666913b193036c99d9ba78a0170d9d8606b70ab1e1b02d49f3 name: Dragon Ninja (Japan) title: Dragon Ninja (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 283f13f4d070e8ad076d8f308000070735852dddda831461883d3d61c06ec5cc name: Dragon Ninja (Japan) (Rev A) title: Dragon Ninja (Japan) (Rev A) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 038f2241fd6e58600ce234623be752cca47875ef7295fe92c30c328c81ffe7ec name: Dragon Power (USA) title: Dragon Power (USA) region: NTSC-U board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 8f7a7ce842ce3135e1cfaea50da3029e7fe8de28384c8db45ef8371ba42b45a9 name: Dragon Scroll - Yomigaerishi Maryuu (Japan) title: Dragon Scroll - Yomigaerishi Maryuu (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: e0f89b912ba25143efc0fcbb09ec452ef711ed64371d527b75be1b6338e24f18 name: Dragon Slayer IV - Drasle Family (Japan) title: Dragon Slayer IV - Drasle Family (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: a2df31ef4a5df9835b9d2ae8defba0a185db40fd47d8d2e3eeb75339983f2859 name: Dragon Spirit - Aratanaru Densetsu (Japan) title: Dragon Spirit - Aratanaru Densetsu (Japan) region: NTSC-J board: NAMCO-3433 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 165a5cc2a460463e24b8596c9004434d7a50aab1d2bd0435c2047f618fbd1309 name: Dynamite Batman (Japan) title: Dynamite Batman (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: badedff174fd32fcaad914ea72d04763b828ed4d1d883e8c902cb668ea52b92a name: Eric Cantona Football Challenge - Goal! 2 (Europe) title: Eric Cantona Football Challenge - Goal! 2 (Europe) region: PAL board: HVC-TLSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ccc7685722b9a512846a1c385e9db91d4365712af00afb823f6989c5bf40f96d name: Erika to Satoru no Yume Bouken (Japan) title: Erika to Satoru no Yume Bouken (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 761df2c2e04f9ffec5eec59afd821bd74af3b155546519d649876aad37160c06 name: Esper Dream 2 - Aratanaru Tatakai (Japan) title: Esper Dream 2 - Aratanaru Tatakai (Japan) region: NTSC-J board: KONAMI-VRC-6 chip type: VRC6 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 19e1f9b0f4dfbfb126c936db4ffc266ad224a4dd611a4bfacab00547e521267f name: Exciting Boxing (Japan) title: Exciting Boxing (Japan) region: NTSC-J board: KONAMI-VRC-1 chip type: VRC1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 342f0e5ad45d040e538e6b1c576d02c264e7982d2b440afcb4f12cedccbb11de name: Famicom Jump - Eiyuu Retsuden (Japan) title: Famicom Jump - Eiyuu Retsuden (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: dd031b72924e1d080f8758412c73224a274ae5e5a50d90310d578975df74101f name: Famicom Jump II - Saikyou no 7 Nin (Japan) title: Famicom Jump II - Saikyou no 7 Nin (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x2000 content: Character volatile game sha256: 7586cdd8b742ba3c4f0ea3eefaa2f6f2215af197a5269e3de9026bcdf236e981 name: Famicom Wars (Japan) title: Famicom Wars (Japan) region: NTSC-J board: HVC-FKROM chip type: MMC4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x10000 content: Character game sha256: c8c0b6c21bdda7503bab7592aea0f945a0259c18504bb241aafb1eabe65846f3 name: Family BASIC V3 (Japan) title: Family BASIC V3 (Japan) region: NTSC-J board: HVC-NROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: RAM size: 0x1000 content: Save memory type: ROM size: 0x2000 content: Character game sha256: d3bbb6a0600d527de22d1bd0494f727b2910e8efd814cc91e1233bf6025b1413 name: Family Block (Japan) title: Family Block (Japan) region: NTSC-J board: HVC-GNROM mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: ec95dd9fde710a1902ab5fdeac51dee27aa75ae8d202280a01979a6a2bb3fb60 name: Family Boxing (Japan) title: Family Boxing (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 93b6b3e8f826c0de7c0d634024ef3a317f496ca9542a828d7d5f05e32e1f0d04 name: Family Circuit (Japan) title: Family Circuit (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 0396d4e3ec774acab0713dcea7d7cf4e62e13f1991765864d97b567621213fd0 name: Family Circuit '91 (Japan) title: Family Circuit '91 (Japan) region: NTSC-J board: NAMCO-175 chip type: 175 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 4dd1ccb16d8af15d5cb029f69cf8551c5c720a69ec314bd618be892f0fc20f86 name: Family Jockey (Japan) title: Family Jockey (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: a02f812324b3718694588c60bc5fbb57e93be8872694b01b88db1c4614f0d9b5 name: Family Mahjong (Japan) title: Family Mahjong (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 2ce83c0ceaee3fa7f44767e530ef6c66baf8cfd26b4b16f473b206d9bb397ecd name: Family Mahjong (Japan) (Rev A) title: Family Mahjong (Japan) (Rev A) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: d909a238ce7d1c2eca85c1be0edde8bd1c913b085ffbab4548a4b9134b9e4b47 name: Family Mahjong II - Shanghai e no Michi (Japan) title: Family Mahjong II - Shanghai e no Michi (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: c7c62664d722346a0759d5927c282bd9acd9b8deb430113e9c6597408247dc2b name: Family Pinball (Japan) title: Family Pinball (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: a4e66b5151eb098e98c1cbb63cf40c88deb01ccaad3c3ee876471d1e19bfad1b name: Family Tennis (Japan) title: Family Tennis (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 0b13a37ba5cc35f743669b803d119dda47dd136d211be060614817830609eed9 name: Family Trainer 4 - Jogging Race (Japan) title: Family Trainer 4 - Jogging Race (Japan) region: NTSC-J board: BANDAI-74161 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: d25bd1e575ca131e524236fb97ebea89ccfea42c09e0a16b404abdd747768a9f name: Family Trainer 5 - Meiro Daisakusen (Japan) title: Family Trainer 5 - Meiro Daisakusen (Japan) region: NTSC-J board: BANDAI-74161 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 6257cc5bdee40b901305a1fa9d1537196378c5a96b02ec59260696e9390f8050 name: Family Trainer 6 - Manhattan Police (Japan) title: Family Trainer 6 - Manhattan Police (Japan) region: NTSC-J board: BANDAI-74161 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 95d3ae878eb2e0d0fd8a8dc55b7cf03524e5f1975cdcef4a90e8651da642c1a2 name: Family Trainer 9 - Fuuun Takeshi-jou 2 (Japan) title: Family Trainer 9 - Fuuun Takeshi-jou 2 (Japan) region: NTSC-J board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 0b8796fc3f09e20bb570fc66bbf688c13e5dfe3cd4bec3bd5e834a0313fb9527 name: Famista '89 - Kaimaku Ban!! (Japan) title: Famista '89 - Kaimaku Ban!! (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 89ffb8634f667f237bd623326a638bc94fb0629358dc31f7b01cf0a5c30369aa name: Famista '90 (Japan) title: Famista '90 (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: dcc5c7e37da015cae9b2a296e406628453de71df21ed934993901cb999966b4b name: Famista '91 (Japan) title: Famista '91 (Japan) region: NTSC-J board: NAMCO-175 chip type: 175 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: adb959cca18b207aea36d79ba41ee3c57edcf6a0d8e92e8e79f856021c4ec1e9 name: Famista '92 (Japan) title: Famista '92 (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: f6959e92c4d8e596fed4c585be1416df29b0ab5ac3c7a50d9321da9bc19eb764 name: Famista '93 (Japan) title: Famista '93 (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 0d9319a3cc0e12ad9670a14b625f33eb8c5f4cc6ff93a2fe5bbf64f7bfe57b61 name: Famista '94 (Japan) title: Famista '94 (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 4a12bc4bec5b713862a75559c32dd6e4bb205ef2d997ad16eb16db02326b2c34 name: Fantasy Zone (Japan) title: Fantasy Zone (Japan) region: NTSC-J board: SUNSOFT-2 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 0b6b072ad31e0b7d66271ccd76c9ff4b08cb4dcee912c537e6ef81a962304e27 name: Fantasy Zone II - Opa-Opa no Namida (Japan) title: Fantasy Zone II - Opa-Opa no Namida (Japan) region: NTSC-J board: SUNSOFT-3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 9f9e96423a8a322cd79676dadb7d24a27733f834a88049bda3acc98c2d2df026 name: Final Lap (Japan) title: Final Lap (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 60db7fd78cc849658a42ca648f0d294ebf21e477ddf0753f0e6bbffaad6192ab name: Fire Emblem - Ankoku Ryuu to Hikari no Tsurugi (Japan) title: Fire Emblem - Ankoku Ryuu to Hikari no Tsurugi (Japan) region: NTSC-J board: HVC-FKROM chip type: MMC4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 0d899d67c7a61b13151f465c38c63a0d2d6a42d6be2d4ecac0fef87d55d92f92 name: Fire Emblem Gaiden (Japan) title: Fire Emblem Gaiden (Japan) region: NTSC-J board: HVC-FKROM chip type: MMC4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 41fea670ccfb999d2693ff2233466c632dd379a6ac07d9789d8a1259da714383 name: Flintstones, The - The Rescue of Dino & Hoppy (Japan) title: Flintstones, The - The Rescue of Dino & Hoppy (Japan) region: NTSC-J board: TAITO-TC0690 chip type: TC0690 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 3de53c75e43927ad7a09e717b8827ae15e2ce210ea788df0852819b57ce26de8 name: Fudou Myouou Den (Japan) title: Fudou Myouou Den (Japan) region: NTSC-J board: TAITO-X1-005A chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 270b84c1f6fcac20f2ce66bdf702882d44fc5345cdf76ff62d7823ccda9f2cba name: Ganbare Goemon 2 (Japan) title: Ganbare Goemon 2 (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2613db1559a07137af1f3cfda4175ac09be465604c651956dd98d971aedae6bc name: Ganbare Goemon Gaiden - Kieta Ougon Kiseru (Japan) title: Ganbare Goemon Gaiden - Kieta Ougon Kiseru (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 7c27ab834d0dcc03498d46d9944c9ea5498b1a7af9606a835217e141e2b3c662 name: Ganbare Goemon Gaiden - Kieta Ougon Kiseru (Japan) (Rev 1) title: Ganbare Goemon Gaiden - Kieta Ougon Kiseru (Japan) (Rev 1) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 50770ffec21bd47eadc9b502b73323f976e48e6f8f589a6717300119bde99de3 name: Ganbare Goemon Gaiden 2 - Tenka no Zaihou (Japan) title: Ganbare Goemon Gaiden 2 - Tenka no Zaihou (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 6 a1: 7 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 8d0090fb9ed391c28c241cbdd111cf9de2abc34bf492b849985bc337bf4dd17c name: Ganbare Goemon! - Karakuri Douchuu (Japan) title: Ganbare Goemon! - Karakuri Douchuu (Japan) region: NTSC-J board: KONAMI-VRC-1 chip type: VRC1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: a5697c59cdbd3859662199825c50cb338762c379c700701f75cdf157b3c13829 name: Ganbare Pennant Race! (Japan) title: Ganbare Pennant Race! (Japan) region: NTSC-J board: KONAMI-VRC-2A chip type: VRC2 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: fd2a8520314fb183e15fd62f48df97f92eb9c81140da4e6ab9ff0386e4797071 name: Gauntlet (USA) title: Gauntlet (USA) region: NTSC-U board: NAMCO-118 chip type: 118 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character memory type: RAM size: 0x800 content: Character volatile game sha256: 992e63eef393060170d03c2558c7bc090428c8ed553ba496ddda6432fcbff0ac name: Gegege no Kitarou 2 - Youkai Gundan no Chousen (Japan) title: Gegege no Kitarou 2 - Youkai Gundan no Chousen (Japan) region: NTSC-J board: BANDAI-74161A memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: c0f0fad3abcb7c284eca6bf17b263d22ea1749316d6321a8b83969bd4a7c22ee name: Genpei Touma Den - Computer Boardgame (Japan) title: Genpei Touma Den - Computer Boardgame (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 963ef31970fb4f7aa84dbfa2eacf96c084effeaeb8ba276387fb9875e4daf7c5 name: Getsu Fuuma Den (Japan) title: Getsu Fuuma Den (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1bbe4b3e20a004a4f741018e31e6ae291772b8876d6fb6f01494c9c5b0917c6c name: Gimmick! (Japan) title: Gimmick! (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 7911375ab98da4ac5c628ba4dfffcba8ba4fc13a341901aed120ab967be5e26c name: Goal! Two (USA) title: Goal! Two (USA) region: NTSC-U board: HVC-TLSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 4ca57e0bff08c5308073382af56138f31fe60c30cea7ab5fb1e4863b86e0b5d7 name: Goal!! (Japan) title: Goal!! (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: d530bfd8bae1fd38d29d776e663bcf5e774590866a5ee8a09e2c1d992e28a008 name: Golfkko Open (Japan) title: Golfkko Open (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: f837e0807ade4bb8036d40746e2433ed66986f043fc2be722e765e45a676cd5d name: Goonies (Japan) title: Goonies (Japan) region: NTSC-J board: JALECO-JF-05 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 2974ad16b994cfdc9418310ced6c7f4ed64433063d12439a7b37a816f797dd0e name: Gradius II (Japan) title: Gradius II (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 029c4a8b572bdf3a655fb06a2e6ac67bd1c89c15d472d5078c8e77376c40102f name: Gremlin 2 - Shinshu Tanjou (Japan) title: Gremlin 2 - Shinshu Tanjou (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 4628f32db9b826d19fe5dd8e2c45a9f70e1041f15b7b44b06dee2f01731566e8 name: Gumshoe (USA, Europe) title: Gumshoe (USA, Europe) region: NTSC-U board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 02be25c6e4b9a0514b8d6299e93048e442866a74c092453cdc1748e45fbc02e5 name: Hebereke (Japan) title: Hebereke (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 429c833eb61c0728b0d9335c61f4bd8d3fb19c3bf8a18564917bf75526f104af name: Heisei Tensai Bakabon (Japan) title: Heisei Tensai Bakabon (Japan) region: NTSC-J board: NAMCO-175 chip type: 175 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 0ba8c48be4033b02a28be9e7da664a03e3956ba381a3d45bf66e9c080df47167 name: High Speed (Europe) title: High Speed (Europe) region: PAL board: HVC-TQROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character memory type: RAM size: 0x2000 content: Character volatile game sha256: 710e907230bbd82143286b40a56a298b25cf326697a9f07bfd8e043c1936a4b1 name: High Speed (USA) title: High Speed (USA) region: NTSC-U board: HVC-TQROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character memory type: RAM size: 0x2000 content: Character volatile game sha256: 1c1ad2992f728c7fb6a8f3980b1a0f8e01e5b24a0c43c713300846d87be5987a name: Holy Diver (Japan) title: Holy Diver (Japan) region: NTSC-J board: IREM-IF-12 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1d7d435fe2aa494f5752a3098d1d627b99f91b0c5ded99038f36e80c22d6a162 name: Honoo no Toukyuuji - Dodge Danpei (Japan) title: Honoo no Toukyuuji - Dodge Danpei (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: c5bd759e942ac617efaba493585294d85e5ce8fcb7686fceb6efc8944d6c954b name: Honoo no Toukyuuji - Dodge Danpei 2 (Japan) title: Honoo no Toukyuuji - Dodge Danpei 2 (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 8a18ba7a4d8708ea21ae973fa1871824c55bec30570d0808e2852760f07ce59b name: Hydlide 3 - Yami kara no Houmonsha (Japan) title: Hydlide 3 - Yami kara no Houmonsha (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: c4bf5a80d8c2a941e9809338f97a86b7764e3c3101ad102bcfd76832cd72d27f name: Hyper Olympic (Japan) (Genteiban!) title: Hyper Olympic (Japan) (Genteiban!) region: NTSC-J board: JALECO-JF-05 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: c9707547555d8c38014540204649125f7b36d3990433bfebb63c49742e2dc3a2 name: Image Fight (Japan) title: Image Fight (Japan) region: NTSC-J board: IREM-G101 chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 0f406a7c853b919ed880868420808b945855146db9817ebc3102f08da13fa703 name: Insector X (Japan) title: Insector X (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 5af57c3a96a040db0c12dcf6f398e32ce7556c62dd2f148d30045443f1887883 name: IronSword - Wizards & Warriors II (Europe) title: IronSword - Wizards & Warriors II (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: aab5e0ecc46e575b1b396bd63d8fa4f3bd740061f3157a1d4afdf9f7f2dabd88 name: IronSword - Wizards & Warriors II (USA) title: IronSword - Wizards & Warriors II (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: cc7b41335ca8c0f3fb399e3647d5489effcdf804a5f45509e5f0f684b9edd947 name: Ivan 'Ironman' Stewart's Super Off Road (Europe) title: Ivan 'Ironman' Stewart's Super Off Road (Europe) region: PAL board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: acc3b89bcbe3ccc2ee29d0b2eb3fb9cec143236f48d88680b462c3dfab0784bf name: Ivan 'Ironman' Stewart's Super Off Road (USA) title: Ivan 'Ironman' Stewart's Super Off Road (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: ea770788f68e4bb089e4205807931d64b83175a0106e7563d0a6d3ebac369991 name: Jajamaru Gekimaden - Maboroshi no Kinmajou (Japan) title: Jajamaru Gekimaden - Maboroshi no Kinmajou (Japan) region: NTSC-J board: JALECO-JF-27B chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: f0e2cd32fa12097bc7d6387b3cebce66f3790cf2f858244060663b605b37607e name: Jajamaru Ninpou Chou (Japan) title: Jajamaru Ninpou Chou (Japan) region: NTSC-J board: KONAMI-VRC-1 chip type: VRC1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2e5520ba75f0d1b0e2d56588ea28838cb4555413919019372541b86cb5c36b15 name: Jajamaru no Daibouken (Japan) title: Jajamaru no Daibouken (Japan) region: NTSC-J board: JALECO-JF-08 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: e9c28ba4b940583e4a486ac5b401ac42e9aafa909d27c798f4fb3fc0045a3971 name: Jarinko Chie - Bakudan Musume no Shiawase Sagashi (Japan) title: Jarinko Chie - Bakudan Musume no Shiawase Sagashi (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 4b744bf7205495f80cdf7c3230034ed40ef61a37ae9b716bccd8bad5af0ee166 name: Jeopardy! (USA) title: Jeopardy! (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 7f28fa007f219e4ee7e6c512ec58bc828b1ac4a3bc785f2f0ccf1d48437de5ce name: Jeopardy! (USA) (Rev 1) title: Jeopardy! (USA) (Rev 1) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 0244b219abbde241e7982790d52fe7fd9af2e181ddeb5ad089a7cc77fe8026f5 name: Jeopardy! 25th Anniversary Edition (USA) title: Jeopardy! 25th Anniversary Edition (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 5e2aac273c63b38925e47c2c69b32fdea10c11a78c6696514b5107f25f40ad6f name: Jeopardy! Junior Edition (USA) title: Jeopardy! Junior Edition (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 740de2e292b8ba92ee87c2cac51ccdfa6a2e5bfe230078f3e02fd3f4f83af34d name: Jetsons, The - Cogswell's Caper (Japan) title: Jetsons, The - Cogswell's Caper (Japan) region: NTSC-J board: TAITO-TC0690 chip type: TC0690 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: bf1ba232b8c3dce3c021d4bc7d1d4e1710d1d0b11a0b0fc1d0258fd69c371f6e name: Jikuu Yuuden - Debias (Japan) title: Jikuu Yuuden - Debias (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 670d4bb81befa1957b47a712d0234dd5169ee03a41b0700b28615a73ef211ce3 name: Juvei Quest (Japan) title: Juvei Quest (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 69e3aaaa116c394cfae92d13706cd08d9094c62df0ab35945d27bf5340078753 name: Juvei Quest (Japan) title: Juvei Quest (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 722035257431bbc43bbc612ccf36f5c8346c4f7073b298dcf6d46d95866f860a name: Kage no Densetsu (Japan) title: Kage no Densetsu (Japan) region: NTSC-J board: JALECO-JF-05 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 4d302aae428b6189c3e12261eeb42fcf1d104ab799cce71522824e1524298f46 name: Kaijuu Monogatari (Japan) title: Kaijuu Monogatari (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ced7f840a0cae6fe82aca994858e3c407d2ff9b2396f0b43cdbaddc7e9f2bc1d name: Kaiketsu Yancha Maru (Japan) title: Kaiketsu Yancha Maru (Japan) region: NTSC-J board: IREM-TAM-S1 chip type: TAM-S1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: afbe54670d674ff80ce65382f33f8d227540a1502190467b790fd1fed3c72ba4 name: Kaiketsu Yancha Maru 2 - Karakuri Land (Japan) title: Kaiketsu Yancha Maru 2 - Karakuri Land (Japan) region: NTSC-J board: IREM-G101 chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ce0bbce545ad5d94f5c8cb6f58b0dd9ecaa72df24cede815aebb2a82b103d534 name: Kaiketsu Yancha Maru 3 - Taiketsu! Zouringen (Japan) title: Kaiketsu Yancha Maru 3 - Taiketsu! Zouringen (Japan) region: NTSC-J board: IREM-H3001 chip type: H3001 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2241728a8072ccdf13c3bb913d2d16abd62bb43c71757d80a376c4f65cd060cf name: Kamen Rider Club (Japan) title: Kamen Rider Club (Japan) region: NTSC-J board: BANDAI-74161 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 683514860ec52aaab636ffcdef33c442270c85000190dfd4956cfb8f224ea7a3 name: Kanshakudama Nage Kantarou no Toukaidou Gojuusan Tsugi (Japan) title: Kanshakudama Nage Kantarou no Toukaidou Gojuusan Tsugi (Japan) region: NTSC-J board: SUNSOFT-1 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 048f6f1df73a1cef21de4de8b58ba0d12bfabdf64d106497faedaa7be1b85786 name: Karaoke Studio (Japan) title: Karaoke Studio (Japan) region: NTSC-J board: BANDAI-KARAOKE memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: c04e4c43095e7b0caf169ccf8b262b2bb71dcb07335b2ee9f5e30cfc5798f68f name: Karaoke Studio Senyou Cassette Vol. 1 (Japan) title: Karaoke Studio Senyou Cassette Vol. 1 (Japan) region: NTSC-J board: BANDAI-KARAOKE memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Option memory type: RAM size: 0x2000 content: Character volatile game sha256: 3cfadf91ec98e5bd108bf44422b517c444bf8974432010bc4fd780949126a68f name: Karaoke Studio Senyou Cassette Vol. 2 (Japan) title: Karaoke Studio Senyou Cassette Vol. 2 (Japan) region: NTSC-J board: BANDAI-KARAOKE memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Option memory type: RAM size: 0x2000 content: Character volatile game sha256: 9905d9999767b7428ba770f855e9b8904123c84fa46b9e6cc0a178fef3ad4e2c name: Karnov (Japan) title: Karnov (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 253f10f7003d6093b58a7529a9c1b3dd18a8696adc0be3a055070887f1fee5b7 name: Karnov (Japan) (Rev 1) title: Karnov (Japan) (Rev 1) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 4ece74fde0b86ecef96d1909c517f55f2da71fd00e29102b8f2780606606e777 name: Karnov (USA) title: Karnov (USA) region: NTSC-U board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 67123fe28cf5fbadeafc77400a0812f0135ab36706ec7d1267f84931d044e71d name: Ki no Bouken - The Quest of Ki (Japan) title: Ki no Bouken - The Quest of Ki (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 73982959bbf7dad73dd2e57b08ed79dbdcf7399aa87f0ca602995c366a3732bb name: Kidou Senshi Z Gundam - Hot Scramble (Japan) title: Kidou Senshi Z Gundam - Hot Scramble (Japan) region: NTSC-J board: HVC-GNROM mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: a8f2987d83253adb573aa760c1bb926e951f2c2d72daff4e2d2e125ec1a181c4 name: King Kong 2 - Ikari no Megaton Punch (Japan) title: King Kong 2 - Ikari no Megaton Punch (Japan) region: NTSC-J board: KONAMI-VRC-1 chip type: VRC1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 6e1c333bd8434ef0da15995dc01afb21d145d20b9504ee8b7e6700b7470969ca name: King of Kings (Japan) title: King of Kings (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: d13fa0e0694a8318d7a7c51c759c254415bf1b41869a4cc04d3233062f7256ae name: Konami Wai Wai World (Japan) title: Konami Wai Wai World (Japan) region: NTSC-J board: KONAMI-VRC-2 chip type: VRC2 pinout a0: 0 a1: 1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 3b3419873ea0d53d6fd18ed9b58c4c77fc111e2971ed7f3715bd114dc6d24d84 name: Kyonshiizu 2 (Japan) title: Kyonshiizu 2 (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: b0e11b917f5c604e8a6ad5a196a40219e5b19b484c8972e3255c81c4df4bda31 name: Kyoto Ryuu no Tera Satsujin Jiken (Japan) title: Kyoto Ryuu no Tera Satsujin Jiken (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: f5bee7faa68e7ecff675a749d3c3ac481b565ad9d74a893f8d3fce2b17f36180 name: Kyuukyoku Harikiri Koushien (Japan) title: Kyuukyoku Harikiri Koushien (Japan) region: NTSC-J board: TAITO-X1-017 chip type: X1-017 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 509210e6700523b088312827cca7db7c1878d80015724994fed04a74f3762e96 name: Kyuukyoku Harikiri Stadium (Japan) title: Kyuukyoku Harikiri Stadium (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: ce47e39f55e083dee4f91752c5ca945722b3ec949d3cc629e4648d6110cb37d2 name: Kyuukyoku Harikiri Stadium - '88 Senshu Shin Data Version (Japan) title: Kyuukyoku Harikiri Stadium - '88 Senshu Shin Data Version (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: ae174747b3c89b00c4a8b86225aaab28c01b8e051ac960ae667d9a921d85d7ef name: Kyuukyoku Harikiri Stadium - Heisei Gannen Ban (Japan) title: Kyuukyoku Harikiri Stadium - Heisei Gannen Ban (Japan) region: NTSC-J board: TAITO-X1-017 chip type: X1-017 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 8df64c366873557f81216e9338498df628999469b765499cafe77a49f56b6dc5 name: Kyuukyoku Harikiri Stadium III (Japan) title: Kyuukyoku Harikiri Stadium III (Japan) region: NTSC-J board: TAITO-X1-017 chip type: X1-017 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: a45d30c949f9d0942700826e4433ebad39e08da8252ecb541cae9d495928d63f name: Lagrange Point (Japan) title: Lagrange Point (Japan) region: NTSC-J board: KONAMI-VRC-7 chip type: VRC7 pinout a0: 4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x2000 content: Character volatile game sha256: 857ca06844ea37341368f25fa4659e37f828c4c579085480aad4ddb977376983 name: Lasalle Ishii no Child's Quest (Japan) title: Lasalle Ishii no Child's Quest (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: cecc797ffc82c5764e89038262c00b325f44afc0d9fc4b5bef295ea227e1dd22 name: Lion King, The (Europe) title: Lion King, The (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 98331d734fb2ad1e619301e4558492517b6e47ab213e4dcec5b8d7c536c526b9 name: Lord of King, The (Japan) title: Lord of King, The (Japan) region: NTSC-J board: JALECO-JF-25 chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 8c801e6fb86ff4174d7c02cd576a1ada260130b403d09ddc76f6aeae9792bf12 name: Lupin Sansei - Pandora no Isan (Japan) title: Lupin Sansei - Pandora no Isan (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: dc541137d79000fe3e0bdf5ce35b687a5b137c3a09160c5742599b4ff257cfae name: Madoola no Tsubasa (Japan) title: Madoola no Tsubasa (Japan) region: NTSC-J board: SUNSOFT-1 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 497c3015516cb6ae2f20d70b8fb1b70b8c4cfcd64e118992c438cfe7b0579f2b name: Magic John (Japan) title: Magic John (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 06dd2c356d2e09929525827f10dda83030a24e743b2648833dc0c56b39edce2f name: Magical Taruruuto-kun - Fantastic World!! (Japan) title: Magical Taruruuto-kun - Fantastic World!! (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character memory type: EEPROM size: 0x80 content: Save game sha256: a1a4e50c09c3983e79a9a1098202a82d82426eaf2e3d898b4a4a8dd55d38e2e7 name: Magical Taruruuto-kun - Fantastic World!! (Japan) (Rev 1) title: Magical Taruruuto-kun - Fantastic World!! (Japan) (Rev 1) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character memory type: EEPROM size: 0x80 content: Save game sha256: f4295cfe1d7d75fd5eebe972e4a63cb626ffb90008ace74377518ef4762d29c0 name: Magical Taruruuto-kun 2 - Mahou Daibouken (Japan) title: Magical Taruruuto-kun 2 - Mahou Daibouken (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character memory type: EEPROM size: 0x80 content: Save game sha256: 9935c7ef77152a4d91e757a02f2c58b05d3635d10d1f249129ea036fb945e69e name: Maharaja (Japan) title: Maharaja (Japan) region: NTSC-J board: SUNSOFT-4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 4ef61de405406bfa9eeaf19ed1d882444c41bb606ac78673b7ec8ee323d0e073 name: Major League (Japan) title: Major League (Japan) region: NTSC-J board: IREM-G101A chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 383e8a225f32b06704e4e5563d8970fd7c7d9ec99446f7001214d1c6e0b3cd62 name: Mappy Kids (Japan) title: Mappy Kids (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 481ddd49134a5e2ae6beb35227dbd2384d9968dc22391eb89cafb40f2a48db6a name: Mappy-Land (Japan) title: Mappy-Land (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 1be87ef4b1b6520b57bf91ea3f3b64d813a73b1f28e76df75994a964727eac62 name: Marble Madness (Europe) title: Marble Madness (Europe) region: PAL board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: d77ed527cf081019dc8e1cad72872ef3bd640114221b89f030e0c03229c54ddc name: Marble Madness (USA) title: Marble Madness (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 4ac0926d1e4704e75e7dfc27c4d990ebdbe685002b9af1a80a385604f3cb162c name: Mashou (Japan) title: Mashou (Japan) region: NTSC-J board: HVC-BNROM mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: c9a294e5ac3490c346e24db8125761fac7e8ba57df0456a6dd29d62a34dbfda7 name: Meikyuu-jima (Japan) title: Meikyuu-jima (Japan) region: NTSC-J board: IREM-G101 chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: f7d8a3732396d928d80dafd32a3873c71a10434fa31b05e4882b28a774c4bcb9 name: Meimon! Daisan Yakyuubu (Japan) title: Meimon! Daisan Yakyuubu (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: fa44773e3c2f1a435cbe7a8e098508b92cd79ba88c71f798b76c08aa0e257316 name: Metro-Cross (Japan) title: Metro-Cross (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 32c6893e0f8a14714dd2082803cfde62f8981010d23fc9cf00a5a18066d063cb name: Mezase! Top Pro - Green ni Kakeru Yume (Japan) title: Mezase! Top Pro - Green ni Kakeru Yume (Japan) region: NTSC-J board: JALECO-JF-40 chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 02d86ba60b7f43f9d04131522263e7560d9ad1d4cc474b909d487cc0d470ccc3 name: Mighty Bomb Jack (Japan) title: Mighty Bomb Jack (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x11 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: c011721745c92916542dd1c82f8b38def52e7aeb7dfdb02609cfd049f436b82a name: Mighty Bomb Jack (Japan) (Rev 1) title: Mighty Bomb Jack (Japan) (Rev 1) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x11 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: eb2a2a5e15bb2b35b8284e15e85eede46de1765be9fa7d62c4d3fc6015e20bcc name: Mike Tyson's Punch-Out!! (Europe) title: Mike Tyson's Punch-Out!! (Europe) region: PAL board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 75424927a74dd2de318c166c0e1950f2bea14534d691cefe5efe23bbf6b5d550 name: Mike Tyson's Punch-Out!! (Europe) (Rev 1) title: Mike Tyson's Punch-Out!! (Europe) (Rev 1) region: PAL board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 752f9d07450e6ec075b109f5be1b1933e8385ad687ceaf24f70a590767bb5a27 name: Mike Tyson's Punch-Out!! (Japan, USA) title: Mike Tyson's Punch-Out!! (Japan, USA) region: NTSC-J board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2ebab487204c42b0d9cf19c37bdc395e396226ca3eaa664907bf7f8216b3c4d3 name: Mike Tyson's Punch-Out!! (Japan, USA) (Rev 1) title: Mike Tyson's Punch-Out!! (Japan, USA) (Rev 1) region: NTSC-J board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: abe5fabba427d3247b31236aba26a2669c8b79733b97b1a14ac9370eee09018b name: Mindseeker (Japan) title: Mindseeker (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: c673fd919abe12938881e274c92064fe5d6f8998700e9f2a5944598ca20ac700 name: Minelvaton Saga - Ragon no Fukkatsu (Japan) title: Minelvaton Saga - Ragon no Fukkatsu (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 96772d6ffccf3e0ca66c1dd59c7f03b7749ef94169e949ae0bcf8bdc9aa49aa8 name: Mirai Shinwa Jarvas (Japan) title: Mirai Shinwa Jarvas (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 3d510de6ca2e4445da5f5d33ae6ed6e5e552953d5852d365ab7a7a2d6bd1c589 name: Mississippi Satsujin Jiken (Japan) title: Mississippi Satsujin Jiken (Japan) region: NTSC-J board: JALECO-JF-11 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: ad55139cc2fb72835e30683df6fc918c14503ca48795d6078077d1ad37298d79 name: Mississippi Satsujin Jiken (Japan) (Rev A) title: Mississippi Satsujin Jiken (Japan) (Rev A) region: NTSC-J board: JALECO-JF-11 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: a3e9409fddd7b4eb6a30fb91aff75957b9f730a511c6be2087151dbb3e9b4852 name: Mito Koumon - Sekai Manyuu Ki (Japan) title: Mito Koumon - Sekai Manyuu Ki (Japan) region: NTSC-J board: SUNSOFT-3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 14868615d1ca04bf91cfa4ab5a9c55aef090cc957f786f9b337247047b7b179e name: Moe Pro! '90 - Kandou Hen (Japan) title: Moe Pro! '90 - Kandou Hen (Japan) region: NTSC-J board: JALECO-JF-29A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: d5f44543ac0d9775b3e2ca331ff1797fa6269371a420c1bff5d00335c5f63510 name: Moe Pro! - Saikyou Hen (Japan) title: Moe Pro! - Saikyou Hen (Japan) region: NTSC-J board: JALECO-JF-29A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 4ba739e8e46e9c2c9086fe001e2733f9cffba9002422b85185a87a2041c32b73 name: Moero!! Junior Basket - Two on Two (Japan) title: Moero!! Junior Basket - Two on Two (Japan) region: NTSC-J board: KONAMI-VRC-1 chip type: VRC1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 47780815892d5d28d72656dd37e4643146c3dc297703b3b2aad2d5cc4aaff712 name: Moero!! Juudou Warriors (Japan) title: Moero!! Juudou Warriors (Japan) region: NTSC-J board: JALECO-JF-17 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 21c904f1577720871d98e0b374b7bfd63e192d1707879cda986aa4cff4fb2e09 name: Moero!! Pro Soccer (Japan) title: Moero!! Pro Soccer (Japan) region: NTSC-J board: JALECO-JF-19 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2c54c5e66cb960ee8647acbe086b2b3386fabf24f7f0d9d2d0e17bd19d681eda name: Moero!! Pro Tennis (Japan) title: Moero!! Pro Tennis (Japan) region: NTSC-J board: JALECO-JF-17 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 0ef0db4c35c27d2cd90716f868ba88326901f70e3ac3333f84b42b88e8477d9c name: Moero!! Pro Yakyuu (Japan) title: Moero!! Pro Yakyuu (Japan) region: NTSC-J board: JALECO-JF-13 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 76f6b0d5a50cb829bdac14a0dfcfa87a9f999cffba66963c81825e8d614cd13d name: Moero!! Pro Yakyuu (Japan) (Rev 1) title: Moero!! Pro Yakyuu (Japan) (Rev 1) region: NTSC-J board: JALECO-JF-13 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: b9637180e1f0261cf68aa978a4d89562ae65ae9eb664f8aad5703e887c39cbb6 name: Moero!! Pro Yakyuu (Japan) (Rev 2) title: Moero!! Pro Yakyuu (Japan) (Rev 2) region: NTSC-J board: JALECO-JF-13 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: a7c4164414920239aca2f282713b08b2c69608089f43edcaffd513b65eb44247 name: Moero!! Pro Yakyuu (Japan) (Rev 3) title: Moero!! Pro Yakyuu (Japan) (Rev 3) region: NTSC-J board: JALECO-JF-13 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: db5639fb3843b8f1aa86ff398b2e8a442efd3389323029899f2b2cf88e4e6230 name: Moero!! Pro Yakyuu '88 - Ketteiban (Japan) title: Moero!! Pro Yakyuu '88 - Ketteiban (Japan) region: NTSC-J board: JALECO-JF-19 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: f2aef1a9ade54330ff821083fda7e03c7a5f93d77f4da359069d84f98ab1f852 name: Money Game, The (Japan) title: Money Game, The (Japan) region: NTSC-J board: HVC-SJROM chip type: MMC1A memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x8000 content: Character game sha256: 97ff1ac9e6061ba5fb02b4626abf3521f84ee1542fa8093d617ede08dbb17cdc name: Mouryou Senki Madara (Japan) title: Mouryou Senki Madara (Japan) region: NTSC-J board: KONAMI-VRC-6 chip type: VRC6 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 3264e4c57ffaf64df816cc97b1d6d278042545a4be248f5c195d82037f0a9bfd name: Mr. Gimmick (Europe) title: Mr. Gimmick (Europe) region: PAL board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1f1bd720199dfd46035845ef24ea4234c2440d748ebed75da9720701228045cd name: Namco Classic (Japan) title: Namco Classic (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 09fe0f41c99a27f4d38bbcf1c1a71524f568f8ae550a35afb9d6c280862ae34b name: Namco Classic II (Japan) title: Namco Classic II (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: de6cb9b8644fe4c3477ba29a7ef1c6102f4ca0c18a7c909616442b9068f28ca3 name: Namco Prism Zone - Dream Master (Japan) title: Namco Prism Zone - Dream Master (Japan) region: NTSC-J board: NAMCO-175 chip type: 175 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 0f062dd5c779305a28873b49e45e5b108b79f141a4361be0ac0683e4b0cd738c name: Namcot Mahjong III - Mahjong Tengoku (Japan) title: Namcot Mahjong III - Mahjong Tengoku (Japan) region: NTSC-J board: NAMCO-3433 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: cb6cc5ceddb82e92fc36b8948588d19556706b3f89810395613ab21c0954aad9 name: Nantettatte!! Baseball (Japan) title: Nantettatte!! Baseball (Japan) region: NTSC-J board: SUNSOFT-4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 4e693127c64f0194c04db3d5aace6c26499f7c42adb2645c7af3f872e5b34323 name: Nantettatte!! Baseball + Ko-Game Cassette - '91 Kaimaku Hen (Japan) title: Nantettatte!! Baseball + Ko-Game Cassette - '91 Kaimaku Hen (Japan) region: NTSC-J board: SUNSOFT-4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x4000 content: Option memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 32a4f87305a1d44a90aba8ee3bc0a314bfc6f7a71c7eca12d871845dcf409003 name: Nantettatte!! Baseball + Ko-Game Cassette - OB All Star Hen (Japan) title: Nantettatte!! Baseball + Ko-Game Cassette - OB All Star Hen (Japan) region: NTSC-J board: SUNSOFT-4 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x4000 content: Option memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 83d326a461cca8dc539283dc8017985e9a6cd1893db4674de1a086c7cb8b0269 name: Napoleon Senki (Japan) title: Napoleon Senki (Japan) region: NTSC-J board: IREM-LROG017 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character memory type: RAM size: 0x2000 content: Character volatile game sha256: dc71dadc3f4eae03f26ac4afec8ef044e7874ad8fdee1567a9b9b9e2c112669e name: NARC (USA) title: NARC (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 4b382baa70cbc52977fd766f49a3c7c9a3239f0d9581cd961b8b26700c53247d name: NES Play Action Football (USA) title: NES Play Action Football (USA) region: NTSC-U board: HVC-TLSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 58be6a811ee3370882160115253b610581e8b4af7228669eb3fbd56e7a13117c name: Nightmare on Elm Street, A (USA) title: Nightmare on Elm Street, A (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 648cf7ac553517573cc9b3955ab50566a91974b2348154910bfa53ef15d55b56 name: Ninja Jajamaru - Ginga Daisakusen (Japan) title: Ninja Jajamaru - Ginga Daisakusen (Japan) region: NTSC-J board: JALECO-JF-25 chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: bf546b0ce7fc60d89020ff7c0fadc7369925ba68a84d25b03de4190a91c46a95 name: Ninja Jajamaru-kun (Japan) title: Ninja Jajamaru-kun (Japan) region: NTSC-J board: JALECO-JF-06 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x4000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 98433ab0b15d19d23c544c2237988abf4a489914e63e18efc28fe2d92ae8c84a name: Nishimura Kyoutarou Mystery - Blue Train Satsujin Jiken (Japan) title: Nishimura Kyoutarou Mystery - Blue Train Satsujin Jiken (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 6f1d8f1b3c18ce3030188a3a8e6ba0231d84699e71ce8a6e02aaeabeb34f7b89 name: Oeka Kids - Anpanman no Hiragana Daisuki (Japan) title: Oeka Kids - Anpanman no Hiragana Daisuki (Japan) region: NTSC-J board: BANDAI-OEKA mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x8000 content: Character volatile game sha256: 9d93ed7137f0376edc07f64d482719b701765129b9e125b40fabc42f3a7ebaaf name: Oeka Kids - Anpanman to Oekaki Shiyou!! (Japan) title: Oeka Kids - Anpanman to Oekaki Shiyou!! (Japan) region: NTSC-J board: BANDAI-OEKA mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x8000 content: Character volatile game sha256: adf95de2cdff7b606ceedf5908679ef9bb8ffeec37d3d1dad3446ef85ca17026 name: Operation Wolf (Japan) title: Operation Wolf (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 8b7bfbd2e0d636ff1683d08119c39f468f20074233b8c82c18b22956a4a9dd03 name: Othello (Japan) title: Othello (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x22 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: 1eee67e8734bdfcdd380fd033b3b0e9e7a1781bb94fc57138afdce5fc327c5a4 name: Othello (Japan) (Rev 1) title: Othello (Japan) (Rev 1) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x22 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: 035383efbc5131942ba7df721ba406fd57c08a9ff87e3aa6e6f3d272bda86c44 name: Paris-Dakar Rally Special (Japan) title: Paris-Dakar Rally Special (Japan) region: NTSC-J board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 7c9ac15848defca1f6977a167e50e80e6a59c7cad040c5190629f29c2998ea16 name: Parodius Da! (Japan) title: Parodius Da! (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 2 a1: 3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 6d2887d978262401f315836411537a208272cba7721f598308d92983f1f5731a name: Perman (Japan) title: Perman (Japan) region: NTSC-J board: IREM-G101 chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ece3f1fefbcc9c4a6da801d931a5bda85241975d96b5b4931bcd635bc3e0f1a5 name: Perman Part 2 - Himitsu Kessha Madoodan o Taose! (Japan) title: Perman Part 2 - Himitsu Kessha Madoodan o Taose! (Japan) region: NTSC-J board: IREM-G101 chip type: G101 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1067b39e520810e55300a4ec1c94f4dddee17e899090af30cf5d626058dbe531 name: Pin Bot (Europe) title: Pin Bot (Europe) region: PAL board: HVC-TQROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character memory type: RAM size: 0x2000 content: Character volatile game sha256: f4ddb0f1a02f823ebed30b55547344de3c8fb9d87254ff993584373ecadd9141 name: Pin Bot (USA) title: Pin Bot (USA) region: NTSC-U board: HVC-TQROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character memory type: RAM size: 0x2000 content: Character volatile game sha256: b7daa24069d54f56fb71e7659b4ad40a6e9f4695f73e7a0d0e56d5c80e2e6474 name: Pinball Quest (Japan) title: Pinball Quest (Japan) region: NTSC-J board: JALECO-JF-17 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 18c82e04c90a19e7148018245fffaaadc4dd92f294332a84605098ddc375b653 name: Pizza Pop! (Japan) title: Pizza Pop! (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2063bcc2134fb472338e953b8d0e52d39701ef7d91f44f19c6c6daae0aaf1bda name: Plasma Ball (Japan) title: Plasma Ball (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 6eabf52d9e7250d74a8b2186dc0da2ae89771c207dcb5d905e0328b24c8984c4 name: Pocket Zaurus - Juu Ouken no Nazo (Japan) title: Pocket Zaurus - Juu Ouken no Nazo (Japan) region: NTSC-J board: BANDAI-74161A memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1f5a86488d8bbc8fbc09fdb91a33fa2530ed124949a7001576e7c631f87bd9df name: Power Blazer (Japan) title: Power Blazer (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 3910ae7495a71e6a55f70ed31eb345d28d6e9d524fe88679719d831f8f2553ce name: Pro Sport Hockey (USA) title: Pro Sport Hockey (USA) region: NTSC-U board: HVC-TLSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 6d37214ca4c4fa53d0dc0dd0c3a287667c3e2618c5f0cbcc41e5436d3b31379b name: Pro Yakyuu - Family Stadium '87 (Japan) title: Pro Yakyuu - Family Stadium '87 (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 808b30aa3547a1ea2fffd6926d706a254b827715e2441a0229452c1cbcc150c2 name: Pro Yakyuu - Family Stadium '88 (Japan) title: Pro Yakyuu - Family Stadium '88 (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 60466dc2c2853b8f068f117001f4a262cd55d58e6be79f7a767e7d56ee4239df name: Pro Yakyuu - Family Stadium (Japan) title: Pro Yakyuu - Family Stadium (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 17f4b9a5c8175c2f6650d451e7d96f9ddd5b5dabfe87f8f8d6a84adcb1439bec name: Punch-Out!! (Europe) title: Punch-Out!! (Europe) region: PAL board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 542c826a30acd04fe26aa60ef6816572478cc1b41091574c5091bed61449d05f name: Punch-Out!! (Japan) (Gold Edition) title: Punch-Out!! (Japan) (Gold Edition) region: NTSC-J board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 635271fe654636ec37c882f76c5f8cd39b7b3a476c9aa75cefb548d82de8f896 name: Punch-Out!! (USA) title: Punch-Out!! (USA) region: NTSC-J board: HVC-PNROM chip type: MMC2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 1a8cafde15dd16dee6c651ff8ab8bbf5b977d1b7047cb84d913c0aab02727ef7 name: Pyokotan no Daimeiro (Japan) title: Pyokotan no Daimeiro (Japan) region: NTSC-J board: SUNSOFT-5B chip type: 5B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 7cb999c28339dfca0fd4aff85aa93c7af87fb40698d4035ab5b23620b695940a name: Quinty (Japan) title: Quinty (Japan) region: NTSC-J board: NAMCO-3433 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: d4f1650059a011455577561ea607993a5046d452ba987b1c7381cad56550be0a name: R.B.I. Baseball (USA) title: R.B.I. Baseball (USA) region: NTSC-U board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 3941ec3db80fd2eabce48a4dc06c5d5411db47fede972a7660a76e583fcd8773 name: R.C. Pro-Am (Europe) title: R.C. Pro-Am (Europe) region: PAL board: HVC-AN1ROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: aec6beb5b7e4d291a2bef75cb6dc43dc4db34f0313d26a8582ddf61b5b6a67c5 name: R.C. Pro-Am (USA) title: R.C. Pro-Am (USA) region: NTSC-U board: HVC-AN1ROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 282c84315ccb22895a3831b2cea301c12a54ca645429e12bf641504060ad4556 name: R.C. Pro-Am II (Europe) title: R.C. Pro-Am II (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 730399227c1566636f2e3475c398924165b21d88fc3321f60b29f4e6321a3c9c name: R.C. Pro-Am II (USA) title: R.C. Pro-Am II (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 6b5f7dbd2c4e7512b27e8492a8af8ad08701ba125e0fe7d4ac679f5782f7eb9b name: Racer Mini Yonku - Japan Cup (Japan) title: Racer Mini Yonku - Japan Cup (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: bcc8a24ab99f85933ff2cd0787daab6093710ef04f95b4c7bec842961ee0e3ad name: Rad Racer II (USA) title: Rad Racer II (USA) region: NTSC-U board: HVC-TVROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x10000 content: Character memory type: RAM size: 0x800 content: Character volatile game sha256: f17df83a3e714c9f839dcd428d31a0b8b3cdb5fe1a78f24f43f158cb379720c1 name: Ring King (USA) title: Ring King (USA) region: NTSC-U board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 03bb4abbbab7bc91844dd65b808d1281ae22f9e4460479b27dd9d9b186b40647 name: Rokudenashi Blues (Japan) title: Rokudenashi Blues (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: ed8c07ac72403ef5d131e9e5eb9b90578b40a1fec0b2925bab9ce06aa308477a name: Rolling Thunder (Japan) title: Rolling Thunder (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ff5d21cadd406e368a622f940a272efcfc441c08aa736cf3a82fddd6e7d8a097 name: RPG Jinsei Game (Japan) title: RPG Jinsei Game (Japan) region: NTSC-J board: HVC-TKSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 4d6e58f232dc1a592583889f858eac230b8e8921e715276e580073ab2dd18546 name: Saint Seiya - Ougon Densetsu (Japan) title: Saint Seiya - Ougon Densetsu (Japan) region: NTSC-J board: BANDAI-74161A memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 840723003ce183494e9aa5081462f085db2b3846b4680976b32bff0fae0d3968 name: Saiyuuki World 2 - Tenjoukai no Majin (Japan) title: Saiyuuki World 2 - Tenjoukai no Majin (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: fda768dba543b9dcdff48ffb1e241c944f34fbd1c12dfddc2cebea6835a62d1c name: Sakigake!! Otoko Juku - Shippuu Ichi Gou Sei (Japan) title: Sakigake!! Otoko Juku - Shippuu Ichi Gou Sei (Japan) region: NTSC-J board: BANDAI-FCG chip type: FCG memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 9e8eb95ec2917597650131db254067ff59bc3669417563165518927357812c73 name: Salamander (Japan) title: Salamander (Japan) region: NTSC-J board: KONAMI-VRC-3 chip type: VRC3 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x2000 content: Character volatile game sha256: 6a258031a63ea324b02d865ef7860bde15bd0b29be1071311c45d87a2f1d56f2 name: Sangokushi - Chuugen no Hasha (Japan) title: Sangokushi - Chuugen no Hasha (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: fcd7bb633e020aeeeba74dd330eca2c5af59a7fbacdbcb271b9bab129e3f2dd2 name: Sangokushi II - Haou no Tairiku (Japan) title: Sangokushi II - Haou no Tairiku (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x40000 content: Character game sha256: 83bffec6356bc787041747d36f088134ceebb14bd476a508a931ee291b95d74b name: Sanma no Meitantei (Japan) title: Sanma no Meitantei (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: a5e173f9b25b9024807108afb59ca89fa3704cddb97ac2543f41bc4a6c02f4bd name: Sansuu 1 Nen - Keisan Game (Japan) title: Sansuu 1 Nen - Keisan Game (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x22 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: 77ddaff6948aa4d88cdacde3692c94e5cab92e3ec9ce86c6228ed973956f41ca name: Sansuu 2 Nen - Keisan Game (Japan) title: Sansuu 2 Nen - Keisan Game (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x22 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: d2fa2e6d93bed19b33e4ab2163705ea8d69d4119baf1663dc155e3777e9b0e94 name: Sansuu 3 Nen - Keisan Game (Japan) title: Sansuu 3 Nen - Keisan Game (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x2a mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: cd6e7fb18348488f256d08d8c02802dea3980cdb5b46bd0ea200324b913c1a07 name: SD Gundam Gaiden - Knight Gundam Monogatari (Japan) title: SD Gundam Gaiden - Knight Gundam Monogatari (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character memory type: EEPROM size: 0x80 content: Save game sha256: 976fa847a4e2ea4ec678539ddef9794a457c85c5c8f89f6cd12622c8476ab44f name: SD Gundam Gaiden - Knight Gundam Monogatari (Japan) (Rev 1) title: SD Gundam Gaiden - Knight Gundam Monogatari (Japan) (Rev 1) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character memory type: EEPROM size: 0x80 content: Save game sha256: c960e211e1859825d6de21fcde325816444cd63dd7212456eedb85884f2649ca name: SD Gundam Gaiden - Knight Gundam Monogatari 2 - Hikari no Knight (Japan) title: SD Gundam Gaiden - Knight Gundam Monogatari 2 - Hikari no Knight (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: 4ea5d6ad94d5cf257819167aa87e45f38079d0194db4218a75a989ba6d5e3736 name: SD Gundam Gaiden - Knight Gundam Monogatari 3 - Densetsu no Kishi Dan (Japan) title: SD Gundam Gaiden - Knight Gundam Monogatari 3 - Densetsu no Kishi Dan (Japan) region: NTSC-J board: BANDAI-LZ93D50 chip type: LZ93D50 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character memory type: EEPROM size: 0x100 content: Save game sha256: 2d3d6f009b1f81640867a5b5102c10e4d26c8ad6280c30e43d65dcd1acce9fb3 name: SD Keiji - Blader (Japan) title: SD Keiji - Blader (Japan) region: NTSC-J board: TAITO-X1-017 chip type: X1-017 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 269c410730fde0184a39f3063fbccb06c2488ffb7b2638738b106fae8a2f0acb name: Seicross (Japan) (Rev 1) title: Seicross (Japan) (Rev 1) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x20 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: dbc22a40e8a79c5ccf1d6e5126c9b10bb3d9b3e708fe5316c298c3d03dbc7977 name: Senjou no Ookami (Japan) title: Senjou no Ookami (Japan) region: NTSC-J board: HVC-UN1ROM mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: f7271a7030e2f5298f3931f08c84fdbe1dad3108aaf1259a766f05b80b12910a name: Shanghai (Japan) title: Shanghai (Japan) region: NTSC-J board: SUNSOFT-2 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 52b9b0d7137c458b2dc3a96e693af96ce044feedcdc1edf736c728a25e2fe4d8 name: Shin Moero!! Pro Yakyuu (Japan) title: Shin Moero!! Pro Yakyuu (Japan) region: NTSC-J board: JALECO-JF-23A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: df38854a6c9e86244f8160f43aa2d650736f6c54183d2cc54a22eb2285cc5316 name: Side Pocket (Japan) title: Side Pocket (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 4fbd928f06fbc4ea537cdae7f6a906053df7cd80c35b5cfeac9dfb9d3033efb8 name: Sky Kid (Japan) title: Sky Kid (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: d217aae4c1eff6e05b09b6ed1828a1d1f01a047f6a7932818e985569f2d9ff7a name: Solar Jetman - Hunt for the Golden Warpship (Europe) title: Solar Jetman - Hunt for the Golden Warpship (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 45a0fd35f3141c140fb8d1f652876011f28d772b987da123c597aa8c924437b2 name: Solar Jetman - Hunt for the Golden Warpship (USA) title: Solar Jetman - Hunt for the Golden Warpship (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 5848c7e2009e2263184cd95fe060ff52d0554e6b1277666a76098cb7eaa673b9 name: Solstice (Japan) title: Solstice (Japan) region: NTSC-J board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: f4ced076b9ee9211c7fe95b58d1536ea173d102d08fbaee77728562f6fa4e7ab name: Solstice - The Quest for the Staff of Demnos (Europe) title: Solstice - The Quest for the Staff of Demnos (Europe) region: PAL board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: e437dbafa7e20dd72412c869b9433901c3e9302cfa16b6e8379ecc56ae8dcc22 name: Solstice - The Quest for the Staff of Demnos (USA) title: Solstice - The Quest for the Staff of Demnos (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 82d59a71189043d8a3e690b41a339c27cbc5e1343466fcc02f8cb66d9f6757f5 name: Space Shadow (Japan) title: Space Shadow (Japan) region: NTSC-J board: BANDAI-74161 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: dbd587ef5a12e03a336cda61cd120b4e8c585f45d82821e144ee8afdea9ee84e name: Spartan X 2 (Japan) title: Spartan X 2 (Japan) region: NTSC-J board: IREM-H3001 chip type: H3001 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 387d82471ca5f54e70b3c4d445ae5c692640d99c47b30a6bf67f5a17b6236c85 name: Splatterhouse - Wanpaku Graffiti (Japan) title: Splatterhouse - Wanpaku Graffiti (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: a9cf92ec1a080faa195d0b3dcb48fbb5ee3362f0f2f14e14e4257def48ac4346 name: Spy vs Spy (Japan) title: Spy vs Spy (Japan) region: NTSC-J board: HVC-CNROM-SEC chip type: SECURITY key: 0x21 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x2000 content: Character game sha256: 6b42e1b3fba910280016616a24050d3aec19d32480c4b5863c3f3734d44681bc name: Star Wars (Japan) title: Star Wars (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ecdd3a46ab46c0b6c344c86290db53d0fe5a27beb685c93c49049a8d18971d78 name: Super Chinese (Japan) title: Super Chinese (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: a361572ebc2e2cb2fb579b4de6d1f34e8a797eed3bee7142caadbf1bc35559cd name: Super Mario Bros. + Duck Hunt (Europe) title: Super Mario Bros. + Duck Hunt (Europe) region: PAL board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 5dde385041aa7364c78205f2ba49615f416c701b6025e38aa1d7b9c4f99a62db name: Super Mario Bros. + Duck Hunt (USA) title: Super Mario Bros. + Duck Hunt (USA) region: NTSC-U board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x10000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 301d41b370e56cf3c57f22f760da55cb0dc726acf0a2b45182abe5e9dbe186a2 name: Super Xevious - Gump no Nazo (Japan) title: Super Xevious - Gump no Nazo (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 054097cbfccd8ec2d343c0adc134d69f2b6b9067f880ec51464696e0581326c0 name: Taito Grand Prix - Eikou e no License (Japan) title: Taito Grand Prix - Eikou e no License (Japan) region: NTSC-J board: TAITO-X1-005 chip type: X1-005 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x80 content: Save memory type: ROM size: 0x20000 content: Character game sha256: ad34a5b9519724119c9def06f8b8c5be5454c4f99f13aade6d1fd5aefad76ddd name: Takahashi Meijin no Bugutte Honey (Japan) title: Takahashi Meijin no Bugutte Honey (Japan) region: NTSC-J board: HVC-GNROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 819a989fd3a7190136b07a4a3c7ee484c23c4d34dd8b91435c40c3c1009a214c name: Takeshi no Sengoku Fuuunji (Japan) title: Takeshi no Sengoku Fuuunji (Japan) region: NTSC-J board: TAITO-TC0190 chip type: TC0190 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: a086ff08e7eae822285975d04f5d227f2434d5f1819969e233ff8670f7d57439 name: Tatakae!! Rahmen Man - Sakuretsu Choujin 102 Gei (Japan) title: Tatakae!! Rahmen Man - Sakuretsu Choujin 102 Gei (Japan) region: NTSC-J board: HVC-SKROM chip type: MMC1A memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character game sha256: 6fff1bfc89bb2f3c160b88736990c764920b0c44107b265f642a50324ca3adfb name: Teenage Mutant Ninja Turtles (Japan) title: Teenage Mutant Ninja Turtles (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 3 a1: 2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 76b488345b40aa2868e6d4b4f2f06fdaf626601ec76daf9da15c41800ecc5be8 name: Teenage Mutant Ninja Turtles 2 - The Manhattan Project (Japan) title: Teenage Mutant Ninja Turtles 2 - The Manhattan Project (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 3 a1: 2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 3ad469c7d183db6a9d9829802fc43a95d90aefd83ec8193d8d2da4aca36063c5 name: Tenka no Goikenban - Mito Koumon (Japan) title: Tenka no Goikenban - Mito Koumon (Japan) region: NTSC-J board: SUNSOFT-2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 2e76e65be48d2ae1ec6a91a83cc58468fc80cdf98ae34b99a1a71e633760b0a6 name: Tenkaichi Bushi - Keru Naguuru (Japan) title: Tenkaichi Bushi - Keru Naguuru (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 7735cce529485771897277685d4e5b7a6d11de52076cac80f600b7776ff5cc66 name: Terao no Dosukoi Oozumou (Japan) title: Terao no Dosukoi Oozumou (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 95706907214a6df6230d5ff33400437b651440d3f2e974fb9482b70c472e6898 name: Tetsuwan Atom (Japan) title: Tetsuwan Atom (Japan) region: NTSC-J board: KONAMI-VRC-1 chip type: VRC1 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: e3be0290f198fceed633b037d9201aa4b95460617551b3a9fb5bb212b153a2d4 name: Thunder & Lightning (USA) title: Thunder & Lightning (USA) region: NTSC-U board: HVC-GNROM mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 26de06cbb05dea83e8d3bcd0d3de345d3f17c64fa1f87bb20628935a97e59cdd name: Time Lord (Europe) title: Time Lord (Europe) region: PAL board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 13353e4e94633eba066e024ea7050b0801a8ccbe4c03bd97656852df4d2f3359 name: Time Lord (USA) title: Time Lord (USA) region: NTSC-U board: HVC-AMROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 4b80a1db42ecde039f01c52a74146887f9dfc2ad54fe3706bcdf625ec3e2de97 name: Tiny Toon Adventures (Japan) title: Tiny Toon Adventures (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 2 a1: 3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: dabde0dbf12d01237350cf6ad6463ce79651ac1e80d57b7b3b55c1819e72fd8a name: Tiny Toon Adventures 2 - Montana Land e Youkoso (Japan) title: Tiny Toon Adventures 2 - Montana Land e Youkoso (Japan) region: NTSC-J board: KONAMI-VRC-7 chip type: VRC7 pinout a0: 3 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 5094752e3f001c1eeff60116cf64fd35a090e14bf95ef5f563afc41d59fc3445 name: Top Striker (Japan) title: Top Striker (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 4fcadd486cdd108ffd1ebc6585658c86e89626dc86815b41bc28424a67e7d133 name: Toukon Club (Japan) title: Toukon Club (Japan) region: NTSC-J board: JALECO-JF-37 chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: e532491e590505b49f65c771e938c0f1a0d7ccbe6b3fb2cbf42693db39d878d9 name: Tsuru Pika Hagemaru - Mezase! Tsuru Seko no Akashi (Japan) title: Tsuru Pika Hagemaru - Mezase! Tsuru Seko no Akashi (Japan) region: NTSC-J board: JALECO-JF-24A chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 4b9c46714fa085d61ad1177b72bdaa9428d104a171eb6335a03bf06ad9782389 name: TwinBee (Japan) title: TwinBee (Japan) region: NTSC-J board: JALECO-JF-05 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x4000 content: Character game sha256: 092db8cfadf0a96c67dd0734c966c47dfb80ffb830485d8ee702284ae8eac4aa name: TwinBee 3 - Poko Poko Daimaou (Japan) title: TwinBee 3 - Poko Poko Daimaou (Japan) region: NTSC-J board: KONAMI-VRC-2A chip type: VRC2 pinout a0: 1 a1: 0 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 407e54848ad9991399f0383118f138d3a0532bb03bb488ed856deb7f2eb4efbf name: Uchuusen Cosmo Carrier (Japan) title: Uchuusen Cosmo Carrier (Japan) region: NTSC-J board: JALECO-JF-16 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 81aa477b7f5b873d19b845fa15d6830267889d912475d8393d2ecc8d6c037e75 name: Urusei Yatsura - Lum no Wedding Bell (Japan) title: Urusei Yatsura - Lum no Wedding Bell (Japan) region: NTSC-J board: JALECO-JF-10 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 37085157b388353d7f4ce8e904ad6545dc66b798878a959793b151e78b903537 name: USA Ice Hockey in FC (Japan) title: USA Ice Hockey in FC (Japan) region: NTSC-J board: JALECO-JF-37 chip type: SS88006 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 8374e40b94d13047e6304a4b2d4057f0ef29103bd9fae0f31feafe50889cde76 name: Valkyrie no Bouken - Toki no Kagi Densetsu (Japan) title: Valkyrie no Bouken - Toki no Kagi Densetsu (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: horizontal memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: 26ff208f2b133e66c602765778107c5938386c24fc03a197bbf9b2b659cb8792 name: Videomation (USA) title: Videomation (USA) region: NTSC-U board: HVC-CPROM mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x8000 content: Program memory type: RAM size: 0x4000 content: Character volatile game sha256: 2737968efa4bdb5576a6ad36e08712ba76a752a0f88b741bf72a463b451a9dfe name: Wagyan Land (Japan) title: Wagyan Land (Japan) region: NTSC-J board: NAMCO-118 chip type: 118 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x10000 content: Character game sha256: 8b415e22a0479560517eb62dc11a4e9869d86a4a32191253d73d5b71ee249462 name: Wagyan Land 2 (Japan) title: Wagyan Land 2 (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: eb7010c9e745d8a61d325e6bac7b8cbb16f34ad8fd01b5996131ba35cf528d26 name: Wagyan Land 3 (Japan) title: Wagyan Land 3 (Japan) region: NTSC-J board: NAMCO-340 chip type: 340 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x40000 content: Character game sha256: 375a2fef345cabaab35ad7cc238b2cf0298cbf93f047ea57a79c3dae598b4287 name: Wai Wai World 2 - SOS!! Paseri Jou (Japan) title: Wai Wai World 2 - SOS!! Paseri Jou (Japan) region: NTSC-J board: KONAMI-VRC-4 chip type: VRC4 pinout a0: 1 a1: 2 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: 88691067f122467f2dae85e40b927013b91fe848f88d694616ed2f26ab1f3f4d name: Wheel of Fortune (USA) title: Wheel of Fortune (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 7157801d42484e58b81387c95f24d6e8acaa513fa588828398f5b7a69f2c14bd name: Wheel of Fortune (USA) (Rev 1) title: Wheel of Fortune (USA) (Rev 1) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 9178fba5cbb412cc6d437f301ab93ba8c897235a5c8f2985756d3441061ecbe2 name: Wheel of Fortune - Family Edition (USA) title: Wheel of Fortune - Family Edition (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 84e3a018cbaaf2311d7e9414112cb05cf3b43608de0b9f8a2f77bc4da33ce8e6 name: Wheel of Fortune - Junior Edition (USA) title: Wheel of Fortune - Junior Edition (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 0dcd6d458d26cda8673abfc4110abde301fb34b44b7075d6453e97b7dcb42d12 name: Wheel of Fortune Featuring Vanna White (USA) title: Wheel of Fortune Featuring Vanna White (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 700ebc3c2dd27420bbdcccb987ba60d3f0680469101353de15a1b2bd565ac701 name: Who Framed Roger Rabbit (USA) title: Who Framed Roger Rabbit (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: a870c1add0839708b2524b5ca4ae64547001c13bbd664a51f998656936dd1075 name: Wizards & Warriors (Europe) title: Wizards & Warriors (Europe) region: PAL board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 3ba4f6fd63a74338e438df43ddd1195f8913d69c11f6668d3bbf23a2a3cea459 name: Wizards & Warriors (USA) title: Wizards & Warriors (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: d30e480e7a99b5c3d8fe8faecf0bc0a14a9b163025eca9bf787f600fa927bb89 name: Wizards & Warriors (USA) (Rev 1) title: Wizards & Warriors (USA) (Rev 1) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: c3d0fbc9395e2e0106c1ec6e11b15727c95d6424bf053dc8d24eeaa5f4889eb8 name: Wizards & Warriors III - Kuros...Visions of Power (Europe) title: Wizards & Warriors III - Kuros...Visions of Power (Europe) region: PAL board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 2fa3ee5f9ef17dcd63f2f3936dc79b95a71f9e58521080250d4b4e7efbd471d2 name: Wizards & Warriors III - Kuros...Visions of Power (USA) title: Wizards & Warriors III - Kuros...Visions of Power (USA) region: NTSC-U board: HVC-AOROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 6449c6d072fd1df14a346fbd17c11f76d7470185041b1181c36770ce11ae71e6 name: World Games (USA) title: World Games (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 306599be84494284eb8132aaceb7fc8e23ad0f9b410825b6271ebdbd8b4ed7c2 name: WWF Wrestlemania (Europe) title: WWF Wrestlemania (Europe) region: PAL board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: a6f98e57ffb4544152138f109b00d1016ae957f7d842f29b41e118045fd54056 name: WWF Wrestlemania (USA) title: WWF Wrestlemania (USA) region: NTSC-U board: HVC-ANROM memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: RAM size: 0x2000 content: Character volatile game sha256: 703411cb92283840c096d7e1e422582ecda18bd9b27604a253cb0b0702383043 name: Youkai Club (Japan) title: Youkai Club (Japan) region: NTSC-J board: JALECO-JF-11 mirror mode: vertical memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x8000 content: Character game sha256: a6f31393dc6b343560125aaaf9241dbbed4553870778ef882d149cf4706fc41b name: Youkai Douchuuki (Japan) title: Youkai Douchuuki (Japan) region: NTSC-J board: NAMCO-163 chip type: 163 memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x20000 content: Program memory type: ROM size: 0x20000 content: Character game sha256: ec1d85479d72847d3adbd76e2e79221143e6c9324d5647be2c4a11aa87123f75 name: Ys III - Wanderers from Ys (Japan) title: Ys III - Wanderers from Ys (Japan) region: NTSC-J board: HVC-TKSROM chip type: MMC3B memory type: ROM size: 0x10 content: iNES memory type: ROM size: 0x40000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x20000 content: Character ares-126/mia/Database/MSX.bml000066400000000000000000000004041415063341600157340ustar00rootroot00000000000000database revision: 2021-07-10 game sha256: a93058238d63b05c8bd30498d695b3769b8d94b76ea7b24d55e2e9f32e270dac title: R-Type name: R-Type region: NTSC board: ASC16 memory type: ROM size: 0x60000 content: Program ares-126/mia/Database/Sufami Turbo.bml000066400000000000000000000133661415063341600176000ustar00rootroot00000000000000database revision: 2021-03-04 //Sufami Turbo (JPN) database revision: 2021-03-04 game sha256: f73bda08743565e0bd101632ebbac2d363d703a3ab39d23f49d95217cab29269 title: 美少女戦士セーラームーン セーラースターズ ふわふわパニック2 name: Bishoujo Senshi Sailor Moon Sailor Stars - Fuwafuwa Panic 2 region: SFT-0112-JPN revision: SAILOR MOON board: PT-911 memory type: ROM size: 0x100000 content: Program note: Unlinkable game sha256: afb3f2a83b5bfcb1b8829b6995f108cc4d64ca322d1ba4a50b83af6e1f2e89bd title: クレヨンしんちゃん 長ぐつドボン!! name: Crayon Shin-chan - Nagagutsu Dobon!! region: SFT-0113-JPN revision: SHINCYAN board: PT-911 memory type: ROM size: 0x80000 content: Program note: Unlinkable game sha256: d93b3a570e7cf343f680ab0768a50b77e3577f9c555007e2de3decd6bc4765c8 title: ゲゲゲの鬼太郎 妖怪ドンジャラ name: Gegege no Kitarou - Youkai Donjara region: SFT-0106-JPN revision: KITARO DONJYAR board: PT-911 memory type: ROM size: 0x80000 content: Program note: Unlinkable game sha256: 89aecd4e23d8219c8de3e71bb75db3dfe667d51c1eba4ea7239d2f772743d0cc title: 激走戦隊カーレンジャ 全開!レーサー戦士 name: Gekisou Sentai Carranger - Zenkai! Racer Senshi region: SFT-0109-JPN revision: CAR RANGER board: PT-911 memory type: ROM size: 0x80000 content: Program note: Unlinkable game sha256: 602b20b788640f5743487108a10f3f77bca5ce2d24208b25b1ca498a96eb0d69 title: ぽいぽい忍者ワールド name: Poi Poi Ninja World region: SFT-0103-JPN revision: POI POI NINJYA board: PT-911 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save note: Linkable: SFT-0103-JPN game sha256: 2a9d7c9a61318861028a73ca03e32a48cff162d76cba36fbaab8690b212efe9b title: SDガンダムジェネレーション アクシズ戦記 name: SD Gundam Generation - Axis Senki region: SFT-0107-JPN revision: GUNDAM C board: PT-912 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save note: Linkable: SFT-0104-JPN, SFT-0105-JPN, SFT-0107-JPN, SFT-0108-JPN, SFT-0110-JPN, SFT-0111-JPN game sha256: 60ac017c18f534e8cf24ca7f38e22ce92db95ea6c30b2d59d76f13c4f1c8a6e4 title: SDガンダムジェネレーション バビロニア建国戦記 name: SD Gundam Generation - Babylonia Kenkoku Senki region: SFT-0108-JPN revision: GUNDAM D board: PT-912 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save note: Linkable: SFT-0104-JPN, SFT-0105-JPN, SFT-0107-JPN, SFT-0108-JPN, SFT-0110-JPN, SFT-0111-JPN game sha256: e639b5d5d722432b6809ccc6801dc584e1a3016379f34b335ed2dfa73b1ebf69 title: SDガンダムジェネレーション コロニー格闘記 name: SD Gundam Generation - Colony Kakutouki region: SFT-0111-JPN revision: GUNDAM F board: PT-912 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save note: Linkable: SFT-0104-JPN, SFT-0105-JPN, SFT-0107-JPN, SFT-0108-JPN, SFT-0110-JPN, SFT-0111-JPN game sha256: 8547a08ed11fe408eac282a90ac46654bd2e5f49bda3aec8e5edf166a0a4b9af title: SDガンダムジェネレーション グリプス戦記 name: SD Gundam Generation - Gryps Senki region: SFT-0105-JPN revision: GUNDAM B board: PT-912 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save note: Linkable: SFT-0104-JPN, SFT-0105-JPN, SFT-0107-JPN, SFT-0108-JPN, SFT-0110-JPN, SFT-0111-JPN game sha256: 3e82215bed08274874b30d461fc4a965c6bca932229da5d46d56e36f484d65eb title: SDガンダムジェネレーション 一年戦争記 name: SD Gundam Generation - Ichinen Sensouki region: SFT-0104-JPN revision: GUNDAM A board: PT-912 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save note: Linkable: SFT-0104-JPN, SFT-0105-JPN, SFT-0107-JPN, SFT-0108-JPN, SFT-0110-JPN, SFT-0111-JPN game sha256: 5951a58a91d8e397d0a237ccc2b1248e17c7312cb9cc11cbc350200a97b4e021 title: SDガンダムジェネレーション ザンスカール戦記 name: SD Gundam Generation - Zanscare Senki region: SFT-0110-JPN revision: GUNDAM E board: PT-912 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save note: Linkable: SFT-0104-JPN, SFT-0105-JPN, SFT-0107-JPN, SFT-0108-JPN, SFT-0110-JPN, SFT-0111-JPN game sha256: 2fec5f2bc7dee010af10569a3d2bc18715a79a126940800c3eade5abbd625e3f title: SDウルトラバトル セブン伝説 name: SD Ultra Battle - Seven Densetsu region: SFT-0102-JPN revision: ULTRA SEVEN 1 board: PT-911 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save note: Linkable: SFT-0101-JPN, SFT-0102-JPN game sha256: 2bb55214fb668ca603d7b944b14f105dfb10b987a8902d420fe4ae1cb69c1d4a title: SDウルトラバトル ウルトラマン伝説 name: SD Ultra Battle - Ultraman Densetsu region: SFT-0101-JPN revision: ULTRA MAN 1 board: PT-911 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save note: Linkable: SFT-0101-JPN, SFT-0102-JPN ares-126/mia/Database/Super Famicom Boards.bml000066400000000000000000000762301415063341600211240ustar00rootroot00000000000000database revision: 2020-11-09 //Boards (Production) database revision: 2020-01-21 board: BANDAI-PT-923 memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 slot type=SufamiTurbo rom map address=20-3f,a0-bf:8000-ffff mask=0x8000 ram map address=60-6f,e0-ef:0000-ffff slot type=SufamiTurbo rom map address=40-5f,c0-df:0000-ffff mask=0x8000 ram map address=70-7d,f0-ff:0000-ffff board: BSC-1A5B9P-01 memory type=RAM content=Save map address=10-17:5000-5fff mask=0xf000 processor identifier=MCC map address=00-0f:5000-5fff mcu map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff map address=20-3f,a0-bf:6000-7fff memory type=ROM content=Program memory type=RAM content=Download slot type=BSMemory board: BSC-1A5M-02 memory type=ROM content=Program map address=00-1f:8000-ffff mask=0xe08000 base=0x000000 map address=20-3f:8000-ffff mask=0xe08000 base=0x100000 map address=80-9f:8000-ffff mask=0xe08000 base=0x200000 map address=a0-bf:8000-ffff mask=0xe08000 base=0x100000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 slot type=BSMemory map address=c0-ef:0000-ffff board: BSC-1A7M-(01,10) memory type=ROM content=Program map address=00-1f:8000-ffff mask=0xe08000 base=0x000000 map address=20-3f:8000-ffff mask=0xe08000 base=0x100000 map address=80-9f:8000-ffff mask=0xe08000 base=0x200000 map address=a0-bf:8000-ffff mask=0xe08000 base=0x100000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 slot type=BSMemory map address=c0-ef:0000-ffff board: BSC-1J3M-01 memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 slot type=BSMemory map address=20-3f,a0-bf:8000-ffff map address=60-7d,e0-ff:0000-ffff board: BSC-1J5M-01 memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 slot type=BSMemory map address=20-3f,a0-bf:8000-ffff map address=60-7d,e0-ff:0000-ffff board: BSC-1L3B-01 processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program slot type=BSMemory memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: BSC-1L5B-01 processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program slot type=BSMemory memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: SGB-R-10 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 processor identifier=ICD revision=2 map address=00-3f,80-bf:6000-67ff,7000-7fff memory type=ROM content=Boot architecture=SM83 slot type=GameBoy board: SHVC-1A0N-(01,02,10,20,30) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 board: SHVC-1A1B-(04,05,06) memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff board: SHVC-1A1M-(01,10,11,20) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-1A3B-(11,12,13) memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff board: SHVC-1A3B-20 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-1A3M-(10,20,21,30) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-1A5B-(02,04) memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff board: SHVC-1A5M-(01,11,20) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-1B0N-(02,03,10) memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 processor architecture=uPD7725 map address=30-3f,b0-bf:8000-ffff mask=0x3fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: SHVC-1B5B-02 memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff processor architecture=uPD7725 map address=20-3f,a0-bf:8000-ffff mask=0x3fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: SHVC-1C0N processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=60-7d,e0-ff:0000-ffff board: SHVC-1C0N5S-01 processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=60-7d,e0-ff:0000-ffff board: SHVC-1CA0N5S-01 processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71,f0-f1:0000-ffff board: SHVC-1CA0N6S-01 processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71,f0-f1:0000-ffff board: SHVC-1CA6B-01 processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71,f0-f1:0000-ffff board: SHVC-1CB0N7S-01 processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f:8000-ffff mask=0x8000 map address=40-5f:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71:0000-ffff board: SHVC-1CB5B-(01,20) processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f:8000-ffff mask=0x8000 map address=40-5f:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71:0000-ffff board: SHVC-1CB7B-01 processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f:8000-ffff mask=0x8000 map address=40-5f:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71:0000-ffff board: SHVC-1DC0N-01 processor architecture=HG51BS169 map address=00-3f,80-bf:6c00-6fff,7c00-7fff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-77:0000-7fff memory type=ROM content=Data architecture=HG51BS169 memory type=RAM content=Data architecture=HG51BS169 map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000 oscillator board: SHVC-1DS0B-20 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 processor architecture=uPD96050 map address=60-67,e0-e7:0000-3fff memory type=ROM content=Program architecture=uPD96050 memory type=ROM content=Data architecture=uPD96050 memory type=RAM content=Data architecture=uPD96050 map address=68-6f,e8-ef:0000-7fff mask=0x8000 oscillator board: SHVC-1J0N-(01,10,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff board: SHVC-1J1M-(11,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: SHVC-1J3B-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: SHVC-1J3M-(01,11,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: SHVC-1J5M-(01,11,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: SHVC-1K0N-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff processor architecture=uPD7725 map address=00-1f,80-9f:6000-7fff mask=0xfff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: SHVC-1K1B-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 processor architecture=uPD7725 map address=00-1f,80-9f:6000-7fff mask=0xfff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: SHVC-1K1X-10 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 processor architecture=uPD7725 map address=00-1f,80-9f:6000-7fff mask=0xfff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: SHVC-1L0N3S-01 processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: SHVC-1L3B-(02,11) processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: SHVC-1L5B-(11,20) processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: SHVC-1N0N-(01,10) processor identifier=SDD1 map address=00-3f,80-bf:4800-480f mcu map address=00-3f,80-bf:8000-ffff map address=c0-ff:0000-ffff memory type=ROM content=Program board: SHVC-2A0N-01#A memory type=ROM content=Program map address=00-2f,80-af:8000-ffff mask=0x8000 map address=40-6f,c0-ef:0000-ffff mask=0x8000 board: SHVC-2A0N-(01,10,11,20) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 board: SHVC-2A1M-01 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-2A3B-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-2A3M-01#A memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-2A3M-(01,11,20) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-2A5M-01 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-2B3B-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 processor architecture=uPD7725 map address=60-6f,e0-ef:0000-7fff mask=0x3fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: SHVC-2DC0N-01 processor architecture=HG51BS169 map address=00-3f,80-bf:6c00-6fff,7c00-7fff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-77:0000-7fff memory type=ROM content=Data architecture=HG51BS169 memory type=RAM content=Data architecture=HG51BS169 map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000 oscillator board: SHVC-2E3M-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 processor identifier=OBC1 map address=00-3f,80-bf:6000-7fff mask=0xe000 map address=70-71,f0-f1:6000-7fff,e000-ffff mask=0xe000 memory type=RAM content=Save board: SHVC-2J0N-(01,10,11,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff board: SHVC-2J3M-(01,11,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=10-1f,30-3f,90-9f,b0-bf:6000-7fff mask=0xe000 board: SHVC-2J5M-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=10-1f,30-3f,90-9f,b0-bf:6000-7fff mask=0xe000 board: SHVC-3J0N-01 memory type=ROM content=Program map address=00-2f,80-af:8000-ffff map address=40-6f,c0-ef:0000-ffff board: SHVC-BA0N-(01,10) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 board: SHVC-BA1M-01 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-BA3M-(01,10) memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: SHVC-BJ0N-(01,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff board: SHVC-BJ1M-(10,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: SHVC-BJ3M-(10,20) memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: SHVC-LDH3C-01 processor identifier=SPC7110 map address=00-3f,80-bf:4800-483f map address=50,58:0000-ffff mcu map address=00-3f,80-bf:8000-ffff mask=0x800000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=ROM content=Program memory type=ROM content=Data memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff mask=0xe000 rtc manufacturer=Epson map address=00-3f,80-bf:4840-4842 memory type=RTC content=Time manufacturer=Epson board: SHVC-LJ3M-01 memory type=ROM content=Program map address=00-3f:8000-ffff base=0x400000 map address=40-7d:0000-ffff base=0x400000 map address=80-bf:8000-ffff mask=0xc00000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=RAM content=Save map address=80-bf:6000-7fff mask=0xe000 board: SHVC-LN3B-01 memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff mask=0xe000 map address=70-73:0000-ffff processor identifier=SDD1 map address=00-3f,80-bf:4800-480f mcu map address=00-3f,80-bf:8000-ffff map address=c0-ff:0000-ffff memory type=ROM content=Program board: SHVC-SGB2-01 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 processor identifier=ICD revision=2 map address=00-3f,80-bf:6000-67ff,7000-7fff memory type=ROM content=Boot architecture=SM83 oscillator slot type=GameBoy board: SHVC-YA0N-01 memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 board: SHVC-YJ0N-01 memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff //Boards (Generic) database revision: 2020-11-09 board: ARM-LOROM-RAM memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-6f,c0-ef:0000-7fff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff processor architecture=ARM6 map address=00-3f,80-bf:3800-38ff memory type=ROM content=Program architecture=ARM6 memory type=ROM content=Data architecture=ARM6 memory type=RAM content=Data architecture=ARM6 oscillator board: BS-HIROM-RAM memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 slot type=BSMemory map address=20-3f,a0-bf:8000-ffff map address=60-7d,e0-ff:0000-ffff board: BS-LOROM-RAM memory type=ROM content=Program map address=00-1f:8000-ffff mask=0xe08000 base=0x000000 map address=20-3f:8000-ffff mask=0xe08000 base=0x100000 map address=80-9f:8000-ffff mask=0xe08000 base=0x200000 map address=a0-bf:8000-ffff mask=0xe08000 base=0x100000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 slot type=BSMemory map address=c0-ef:0000-ffff board: BS-MCC-RAM memory type=RAM content=Save map address=10-17:5000-5fff mask=0xf000 processor identifier=MCC map address=00-0f:5000-5fff mcu map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff map address=20-3f,a0-bf:6000-7fff memory type=ROM content=Program memory type=RAM content=Download slot type=BSMemory board: BS-SA1-RAM processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program slot type=BSMemory memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: EVENT-CC92 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 processor manufacturer=NEC architecture=uPD78214 identifier: Campus Challenge '92 map address=c0,e0:0000 mcu map address=00-1f,80-9f:8000-ffff memory type=ROM content=Program memory type=ROM content=Level-1 memory type=ROM content=Level-2 memory type=ROM content=Level-3 dip processor manufacturer=NEC architecture=uPD7725 map address=20-3f,a0-bf:8000-ffff mask=0x7fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: EVENT-PF94 memory type=RAM content=Save map address=30-3f,b0-bf:6000-7fff mask=0xe000 processor manufacturer=NEC architecture=uPD78214 identifier: PowerFest '94 map address=10,20:6000 mcu map address=00-3f,80-bf:8000-ffff map address=c0-ff:0000-ffff memory type=ROM content=Program memory type=ROM content=Level-1 memory type=ROM content=Level-2 memory type=ROM content=Level-3 dip processor manufacturer=NEC architecture=uPD7725 map address=00-0f,80-8f:6000-7fff mask=0xfff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: EXHIROM memory type=ROM content=Program map address=00-3f:8000-ffff base=0x400000 map address=40-7d:0000-ffff base=0x400000 map address=80-bf:8000-ffff mask=0xc00000 map address=c0-ff:0000-ffff mask=0xc00000 board: EXHIROM-RAM memory type=ROM content=Program map address=00-3f:8000-ffff base=0x400000 map address=40-7d:0000-ffff base=0x400000 map address=80-bf:8000-ffff mask=0xc00000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: EXHIROM-RAM-SHARPRTC memory type=ROM content=Program map address=00-3f:8000-ffff base=0x400000 map address=40-7d:0000-ffff base=0x400000 map address=80-bf:8000-ffff mask=0xc00000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 rtc manufacturer=Sharp map address=00-3f,80-bf:2800-2801 memory type=RTC content=Time manufacturer=Sharp board: EXLOROM memory type=ROM content=Program map address=00-7d:8000-ffff mask=0x808000 base=0x400000 map address=80-ff:8000-ffff mask=0x808000 base=0x000000 board: EXLOROM-RAM memory type=ROM content=Program map address=00-7d:8000-ffff mask=0x808000 base=0x400000 map address=80-ff:8000-ffff mask=0x808000 base=0x000000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: EXNEC-LOROM memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 processor architecture=uPD96050 map address=60-67,e0-e7:0000-3fff memory type=ROM content=Program architecture=uPD96050 memory type=ROM content=Data architecture=uPD96050 memory type=RAM content=Data architecture=uPD96050 map address=68-6f,e8-ef:0000-7fff mask=0x8000 oscillator board: EXSPC7110-RAM-EPSONRTC memory type=ROM content=Expansion map address=40-4f:0000-ffff processor identifier=SPC7110 map address=00-3f,80-bf:4800-483f map address=50,58:0000-ffff mcu map address=00-3f,80-bf:8000-ffff mask=0x800000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=ROM content=Program memory type=ROM content=Data memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff mask=0xe000 rtc manufacturer=Epson map address=00-3f,80-bf:4840-4842 memory type=RTC content=Time manufacturer=Epson board: GB-LOROM memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 map address=40-7d,c0-ff:0000-7fff mask=0x8000 processor identifier=ICD revision=2 map address=00-3f,80-bf:6000-67ff,7000-7fff memory type=ROM content=Boot architecture=SM83 oscillator slot type=GameBoy board: GSU-RAM processor architecture=GSU map address=00-3f,80-bf:3000-34ff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 map address=40-5f,c0-df:0000-ffff memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=70-71,f0-f1:0000-ffff board: HIROM memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff board: HIROM-RAM memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 board: HITACHI-LOROM processor architecture=HG51BS169 map address=00-3f,80-bf:6c00-6fff,7c00-7fff memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-77:0000-7fff memory type=ROM content=Data architecture=HG51BS169 memory type=RAM content=Data architecture=HG51BS169 map address=00-3f,80-bf:6000-6bff,7000-7bff mask=0xf000 oscillator board: LOROM memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 board: LOROM-RAM memory type=ROM content=Program map address=00-7d,80-ff:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 board: LOROM-RAM#A memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff mask=0x8000 board: NEC-HIROM memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff processor architecture=uPD7725 map address=00-1f,80-9f:6000-7fff mask=0xfff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: NEC-HIROM-RAM memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff map address=40-7d,c0-ff:0000-ffff memory type=RAM content=Save map address=20-3f,a0-bf:6000-7fff mask=0xe000 processor architecture=uPD7725 map address=00-1f,80-9f:6000-7fff mask=0xfff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: NEC-LOROM memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 processor architecture=uPD7725 map address=30-3f,b0-bf:8000-ffff mask=0x3fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: NEC-LOROM-RAM memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-7fff mask=0x8000 processor architecture=uPD7725 map address=60-6f,e0-ef:0000-7fff mask=0x3fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: NEC-LOROM-RAM#A memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 memory type=RAM content=Save map address=70-7d,f0-ff:0000-ffff processor architecture=uPD7725 map address=20-3f,a0-bf:8000-ffff mask=0x3fff memory type=ROM content=Program architecture=uPD7725 memory type=ROM content=Data architecture=uPD7725 memory type=RAM content=Data architecture=uPD7725 oscillator board: OBC1-LOROM-RAM memory type=ROM content=Program map address=00-3f,80-bf:8000-ffff mask=0x8000 processor identifier=OBC1 map address=00-3f,80-bf:6000-7fff mask=0xe000 map address=70-71,f0-f1:6000-7fff,e000-ffff mask=0xe000 memory type=RAM content=Save board: SA1 processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: SA1-RAM processor architecture=W65C816S map address=00-3f,80-bf:2200-23ff mcu map address=00-3f,80-bf:8000-ffff mask=0x408000 map address=c0-ff:0000-ffff memory type=ROM content=Program memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff size=0x2000 map address=40-4f:0000-ffff memory type=RAM content=Internal map address=00-3f,80-bf:3000-37ff size=0x800 board: SDD1 processor identifier=SDD1 map address=00-3f,80-bf:4800-480f mcu map address=00-3f,80-bf:8000-ffff map address=c0-ff:0000-ffff memory type=ROM content=Program board: SDD1-RAM memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff mask=0xe000 map address=70-73:0000-ffff mask=0x8000 processor identifier=SDD1 map address=00-3f,80-bf:4800-480f mcu map address=00-3f,80-bf:8000-ffff map address=c0-ff:0000-ffff memory type=ROM content=Program board: SPC7110-RAM processor identifier=SPC7110 map address=00-3f,80-bf:4800-483f map address=50,58:0000-ffff mcu map address=00-3f,80-bf:8000-ffff mask=0x800000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=ROM content=Program memory type=ROM content=Data memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff mask=0xe000 board: SPC7110-RAM-EPSONRTC processor identifier=SPC7110 map address=00-3f,80-bf:4800-483f map address=50,58:0000-ffff mcu map address=00-3f,80-bf:8000-ffff mask=0x800000 map address=c0-ff:0000-ffff mask=0xc00000 memory type=ROM content=Program memory type=ROM content=Data memory type=RAM content=Save map address=00-3f,80-bf:6000-7fff mask=0xe000 rtc manufacturer=Epson map address=00-3f,80-bf:4840-4842 memory type=RTC content=Time manufacturer=Epson board: ST-LOROM memory type=ROM content=Program map address=00-1f,80-9f:8000-ffff mask=0x8000 slot type=SufamiTurbo rom map address=20-3f,a0-bf:8000-ffff mask=0x8000 ram map address=60-6f,e0-ef:0000-ffff slot type=SufamiTurbo rom map address=40-5f,c0-df:0000-ffff mask=0x8000 ram map address=70-7d,f0-ff:0000-ffff ares-126/mia/Database/Super Famicom.bml000066400000000000000000013425661415063341600177420ustar00rootroot00000000000000database revision: 2021-03-04 //Prototypes (JPN) database revision: 2021-03-04 game sha256: 182cd72c2ef57119b56bef1f7c18660498422a912f1bb652771d465cd183b04e title: From TV Animation - Slam Dunk - 集英社Limited name: From TV Animation - Slam Dunk - Shuueisha Limited region: JPN revision: 1.0 board: SHVC-4PV5B-01 memory type: ROM size: 0x180000 content: Program game sha256: bcba4ca39f0279f7a52657bccbffa84564eaea455e2565597b93942ec245fdb1 title: くにおくんのドッジボールだよ 全員集合! トーナメントスペシャル name: Kunio-kun no Dodgeball da yo - Zen'in Shuugou! - Tournament Special region: JPN revision: 1.0 board: SHVC-2P3B-01 memory type: ROM size: 0x80000 content: Program //Super Comboy (KOR) database revision: 2021-03-04 game sha256: b820ef79c16b3f43139cc9622c685020db3e87364c3a0f3946242bff93b787c8 title: 드래곤볼Z 초무투전3 name: Dragon Ball Z - Chomutujeon region: SNSN-AZ4K-KOR revision: SNS-AZ4K-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9170aacd61bd2f936818db901451e44c18f3e88fd8d534553c2650ccad082466 title: 한국프로야구 name: Hanguk Pro Yagu region: SNSN-3D-KOR revision: SKOR-3D-0 board: SHVC-2B3B-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 1bb9ba72dfec638ed4cc7c721e31fde2f3e08d160b266a62b6e3997f711cf7cd title: 태권도 name: Taekwondo region: SNSN-II-KOR revision: SKOR-II-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program //Super Famicom (HKG) database revision: 2021-03-04 game sha256: bd763c1a56365c244be92e6cffefd318780a2a19eda7d5baf1c6d5bd6c1b3e06 title: Super Mario World 2: Yoshi's Island name: Super Mario World 2 - Yoshi's Island region: SNSN-YI-HKG revision: SNS-YI-1 board: SHVC-1CB5B-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save oscillator frequency: 21440000 //Super Famicom (JPN) database revision: 2021-03-04 game sha256: 5c4e283efc338958b8dd45ebd6daf133a9eb280420a98e2e1df358ae0242c366 title: スパイダーマン リーサルフォーズ name: Amazing Spider-Man, The - Lethal Foes region: SHVC-ASPJ-JPN revision: SHVC-ASPJ-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 6f6bacdd73aef29ff6a015c25db4a5cd8ba31142b2cc3fe56261d23bbf8329ea title: アンジェリーク プレミアムBox name: Angelique - Premium Box region: SHVC-AAZJ-JPN revision: SHVC-AAZJ-0 board: SHVC-1J5M-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 1f7619ea0d02f16e2b2dcbb36013bb3405eb791885f23884b583eb63768614c4 title: アンジェリーク ヴォイス・ファンタジー name: Angelique - Voice Fantasy region: SHVC-AQLJ-JPN revision: SHVC-AQLJ-0 board: SHVC-1J5M-01 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: a98eb5f0521746e6ce6d208591e86d366b6e0479d96474bfff43856fe8cfec12 title: バハムートラグーン name: Bahamut Lagoon region: SHVC-AXBJ-JPN revision: SHVC-AXBJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 47779500c43a0c2e75d7684078489a17baea31170a123063b8ece6ce77359413 title: ボール・ブレット・ガン name: Ball Bullet Gun region: SHVC-AAGJ-JPN revision: SHVC-AAGJ-0 board: SHVC-1A3M-30 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a05f76cbceffc7b015491a1c4d4913758484d392471bca20af1dce6fd62d878b title: バトルトードインバトルマニアック name: Battletoads in Battlemaniacs region: SHVC-8T revision: SHVC-8T-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: af12d61733f120ef25cac2c095e0152345143025eb9d8ef820c7f857207d46ac title: バイオメタル name: Bio Metal region: SHVC-BV revision: SHVC-BV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ecd772c4a21101d079a795e47abbe00052bef69cc1c854a328f0077016c53311 title: ボンバーマン ビーダマン name: Bomberman B-Daman region: SHVC-AH9J-JPN revision: SHVC-AH9J-0 board: SHVC-1J3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3ce321496edc5d77038de2034eb3fb354d7724afd0bc7fd0319f3eb5d57b984d title: BS-X それは名前を盗まれた街の物語 name: BS-X - Sore wa Namae o Nusumareta Machi no Monogatari region: SHVC-ZBSJ-JPN revision: SHVC-ZBSJ-1 board: BSC-1A5B9P-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save memory type: RAM size: 0x80000 content: Download game sha256: 6e7dcbb4df32903d6ff5da1e308342c0a72f5af3f11479cf49391dc3a17d5d7b title: キャプテンコマンドー name: Captain Commando region: SHVC-QM revision: SHVC-QM-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 0938ff33f5bab359e383bb5499f4fcc2a488fe49747026db355c2d3d5c7c2fdb title: クロノ・トリガー name: Chrono Trigger region: SHVC-ACTJ-JPN revision: SHVC-ACTJ-0 board: SHVC-BJ3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0a8e5b78caf79f4710de3ccc41e2d1975cff3a6cb4146be9ed1c8767be1b0c5d title: クロノ・トリガー 体験版サンプルROM name: Chrono Trigger - Taikenban Sample ROM region: SHVC-AC9J-JPN revision: SHVC-AC9J-0 board: SHVC-1J3M-11 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save volatile note: No battery on PCB game sha256: c195641a1b472590cb3d0be0c48d682b9fee94d7b700dd7bd3297bb995b49307 title: Conveni Wars Barcode Battler 戦記 スーパー戦士 出撃せよ! name: Conveni Wars - Barcode Battler Senki - Super Senshi Shutsugeki seyo! region: SHVC-B5 revision: SHVC-B5-0 board: SHVC-1J3B-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7fccf61a698b250f01b548fd20a7c133ef1c6dbb8172d3ee6c24657b60820a00 title: であえ殿さま あっぱれ一番 name: Deae Tonosama Appare Ichiban region: SHVC-ADTJ-JPN revision: SHVC-ADTJ-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: 248217975279bbf9db8e74da11a906a6dd867a3ec88441b0b031ecf900466618 title: デモンズ・ブレイゾン 魔界村紋章編 name: Demon's Blazon - Makaimura Monshou Hen region: SHVC-3Z revision: SHVC-3Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 700e5d0a79a46d343216b822e28e6f3d0f33f68906f59b1c719735365c129553 title: デア ラングリッサー name: Der Langrisser region: SHVC-ALGJ-JPN revision: SHVC-ALGJ-1 board: SHVC-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 38a855229eab468c3ede7573db73082c66b157adfc7af787ccac50559b747f5f title: ダービースタリオン96 name: Derby Stallion '96 region: SHVC-ZDBJ-JPN revision: SHVC-ZDBJ-0 board: BSC-1A5M-02 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: b7209ec3a5a0d28724f5867343195aef7cb85aeb453aa84a6cbe201b61b0d083 title: ドレミファンタジー ミロンのドキドキ大冒険 name: DoReMi Fantasy - Milon no Dokidoki Daibouken region: SHVC-AM4J-JPN revision: SHVC-AM4J-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: dcb14c95f058a32f40cc329793f5d95fd6cf1755cffe02c0594d1c583a06d356 title: エミット Vol. 1 時の迷子 name: Emit Vol. 1 - Toki no Maigo region: SHVC-AEMJ-JPN revision: SHVC-AEMJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: dc1ecf27d9ce4fdf674c9405339016f5a812f7c4687e588cc6404e2b3b92541a title: エミット Vol. 2 命がけの旅 name: Emit Vol. 2 - Inochigake no Tabi region: SHVC-AEIJ-JPN revision: SHVC-AEIJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: f49417cb8759a30e12439e846f7d581afd1519c625e6a0522876666098521fcc title: エミット Vol. 3 私にさよならを name: Emit Vol. 3 - Watashi ni Sayonara o region: SHVC-AETJ-JPN revision: SHVC-AETJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 69d06a3f3a4f3ba769541fe94e92b42142e423e9f0924eab97865b2d826ec82d title: Far East of Eden 天外魔境Zero 少年ジャンプの章 name: Far East of Eden - Tengai Makyou Zero - Shounen Jump no Shou region: SHVC-AZQJ-JPN revision: SHVC-AZQJ-0 board: SHVC-LDH3C-01 memory type: ROM size: 0x100000 content: Program memory type: ROM size: 0x400000 content: Data memory type: RAM size: 0x2000 content: Save memory type: RTC size: 0x10 content: Time manufacturer: Epson identifier: RTC4513 game sha256: 74aa3a26b66f34819fbbdcdb2475cf9161cc2590fb1ec89fb24940ef10e44332 title: ファイナルファンタジーIV name: Final Fantasy IV region: SHVC-F4 revision: SHVC-F4-0 board: SHVC-1A3B-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 32125257a20c4a6495131f5df79128d189cf6dfb6d45e5314f8b0173ac6f6ebd title: ファイナルファイト タフ name: Final Fight Tough region: SHVC-AFZJ-JPN revision: SHVC-AFZJ-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 2d0e06e970ad7a1305db754a3a92b6e07e2eab848be196c8182b48dc416f1762 title: ファイアーエムブレム トラキア776 name: Fire Emblem - Thracia 776 region: SHVC-BFRJ-JPN revision: SHVC-BFRJ-0 board: SHVC-1A5M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: db337a2e8cf6de653d092ba3489cabc658f91c63ec8a9db4e1866400aadf913f title: ゲットインザホール name: Get in the Hole region: SHVC-AGHJ-JPN revision: SHVC-AGHJ-0 board: SHVC-2J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b248b2122a0caf99298ebd9a4f66ad8047dbfce1e4bbac8219ba3ea9fb7488b5 title: ゴーストチェイサー電精 name: Ghost Chaser Densei region: SHVC-ET revision: SHVC-ET-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 3a59d7d8df992e9e19c3944f1e17b8a3e9500b266412f51af306e14ff543ab45 title: グール・パトロール name: Ghoul Patrol region: SHVC-AGJJ-JPN revision: SHVC-AGJJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 4e790991a1dc4a9df209f68895412597b4069b42971683c3a3092a160556f305 title: ごきんじょ冒険隊 name: Gokinjo Boukentai region: SHVC-A3LJ-JPN revision: SHVC-A3LJ-0 board: SHVC-1J1M-20 memory type: ROM size: 0x280000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 8d4e736e1876182a5cc6d9dcc3ca4eb36b16485bc35e2f40e750d023138ada43 title: 美食戦隊 薔薇野郎 name: Gourmet Sentai - Bara Yarou region: SHVC-AV6J-JPN revision: SHVC-AV6J-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 4a910531609abb6e0a8bab15c1c6269b608eb72cb2fbf227c0e706d0d6f6fe5b title: ザ・グレイトバトルV name: Great Battle V, The region: SHVC-AG5J-JPN revision: SHVC-AG5J-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: 83a9d5c7732677838fd4812071aacf04e513e43b3a52e68bd7242db23b2ecc95 title: 鋼 name: Hagane region: SHVC-AHGJ-JPN revision: SHVC-AHGJ-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 8e0d620a307a225a757bbc9ef2a2a666792e5d533aa0279d3c0060a1b93ead82 title: アイアンコマンドー 鋼鉄の戦士 name: Iron Commando - Koutetsu no Senshi region: SHVC-AICJ-JPN revision: SHVC-AICJ-0 board: SHVC-2A0N-20 memory type: ROM size: 0x140000 content: Program game sha256: 4dfba33201de6b5dec952d0f327aeb44ed784c025a72c982356dd41b52efc219 title: 糸井重里のバス釣りNo. 1 name: Itoi Shigesato no Bass Tsuri No. 1 region: SHVC-ZBPJ-JPN revision: SHVC-ZBPJ-0 board: BSC-1L3B-01 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: 23b320be74b9fc20de512080be3051575ba36c3246d5c4ee224f31a2fa7808f5 title: 常勝麻雀天牌 name: Joushou Mahjong Tenpai region: SHVC-ZTMJ-JPN revision: SHVC-ZTMJ-0 board: BSC-1J3M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: ff19a9c3f5a1ccb3ac6261886f54870ac910b0f25df9e46a436e4a621f8a0a59 title: 化学者ハリーの波乱万丈 name: Kagakusha Harley no Haran Banjou region: SHVC-HV revision: SHVC-HV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: f9ec39546e18b15b8f6a738204d0227c1542cd8157e3e0ea16934e76f39e288c title: 迦楼羅王 name: Karuraou region: SHVC-OH revision: SHVC-OH-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 1281841d3b9624e3b4cc3234f46350ce65473fba8d963b30a9f25b5385b8dd83 title: 奇々怪界 謎の黒マント name: Kiki Kaikai - Nazo no Kuro Manto region: SHVC-KK revision: SHVC-KK-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 374e411f64e4fd581a32296c90a5c74c0adf2936003077565e0672d0a91affdf title: 奇々快界 月夜草子 name: Kiki Kaikai - Tsukiyo Soushi region: SHVC-3N revision: SHVC-3N-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 1906b351d51fc0fc6d5a3cfa0fe7cb45b10d09aba256c411f5abad827bce95c6 title: カービイのきらきらきっず name: Kirby no Kirakira Kids region: SHVC-BKKJ-JPN revision: SHVC-BKKJ-0 board: SHVC-1A1M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 0266520683f2df2179a2e6abf62754d0e8c7d82d12e59d3d3cbf7ae403a2625f title: レナスII 封印の使徒 name: Lennus II - Fuuin no Shito region: SHVC-ALNJ-JPN revision: SHVC-ALNJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: fe44f9d0db9f04f704764577b94e5bf2e18bc7a1c4ff1e6bdaca06d49ed6813c title: リーサルエンフォーサーズ name: Lethal Enforcers region: SHVC-LK revision: SHVC-LK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 106c8158a10f493e0f57bd66ee3b3db36af01964bc44a48819498bf02cb1af7c title: マジカルドロップ2 文化放送スペシャルバージョン name: Magical Drop 2 - Bunka Housou Special Version region: SHVC-AOQJ-JPN revision: SHVC-AOQJ-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: ed617ad12c865fc9c9c5c75de840d3afeded57d13ca3a3062bf8e30095629414 title: マジカルポップン name: Magical Pop'n region: SHVC-AIAJ-JPN revision: SHVC-AIAJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 78d0f6dd9ce0813e0532c7b25c7fa0b6b945d12a4ace21aa940e98babf4dacb1 title: 魔獣王 name: Majuuou region: SHVC-AOHJ-JPN revision: SHVC-AOHJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: c51c5930b344f553415d54c3c964c050e1eb6355b10f5966deabb686e70e1750 title: マリオとワリオ name: Mario & Wario region: SHVC-WE revision: SHVC-WE-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: e842cac1a4301be196f1e137fbd1a16866d5c913f24dbca313f4dd8bd7472f45 title: マリオペイント name: Mario Paint region: SHVC-MP revision: SHVC-MP-0 board: SHVC-1A5B-04 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: dd314086a62e587bc6ad50c84a38a6ff9082b2d2d06dc50be5fa4c096bed5da3 title: マイティ・モーフィン・パワーレンジャー name: Mighty Morphin Power Rangers region: SHVC-52 revision: SHVC-52-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 2298d92acdfecc7270a6c9a57a6ddc55d7fa841fe9c0e7c0d64e33682fffa429 title: ミニ四駆シャイニングスコーピオン レッツ&ゴー!! name: Mini Yonku Shining Scorpion - Let's & Go!! region: SHVC-A4WJ-JPN revision: SHVC-A4WJ-0 board: SHVC-1L5B-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x8000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: a5bfdaaf490d834917f7ac23ec115147b4c94bf4c18c62e18c64431d7cc79b01 title: もと子ちゃんのワンダーキッチン name: Motoko-chan no Wonder Kitchen region: SHVC-WK revision: SHVC-WK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 97c5dcdc457fb29e6294ed93bc2a74117126c45eb399c7caf5920eca36fb63ec title: 忍者龍剣伝巴 name: Ninja Ryuukenden Tomoe region: SHVC-ANRJ-JPN revision: SHVC-ANRJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: c48a4ca22d001eb269fd85110fbe459034bf89f14b5b2733ee70b2d10c0687c0 title: ザ・ニンジャウォリアーズアゲイン name: Ninja Warriors, The - Again region: SHVC-NI revision: SHVC-NI-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: b41126e52ce1696da2efe524f7fd7467d76dcc3fbfa52ff6666671137587b089 title: ノーマーク暴牌党 史上最強の雀士達 name: Nomark Baku Haitou - Shijou Saikyou no Janshi-tachi region: SHVC-AAPJ-JPN revision: SHVC-AAPJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: d712adecbde70a74c4a580fe90a45d0d19f2641d1b4e091d507bddeec9601de1 title: 音楽ツクールかなでーる name: Ongaku Tsukuuru Kanadeeru region: SHVC-ZMCJ-JPN revision: SHVC-ZMCJ-0 board: BSC-1J5M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 18434c35fe5196bf699494bb5dbabda23019cfea099f4ca638437fda43133b39 title: パチンコファン 勝利宣言 name: Pachinko Fan - Shouri Sengen region: SHVC-APSJ-JPN revision: SHVC-APSJ-1 board: SHVC-1A3M-30 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 87e8e3f8b4fc83d2e56662c8b6844b104f6b562744c090d96cdacfcb9523af39 title: パチンコ鉄人 七番勝負 name: Pachinko Tetsujin - Nanaban Shoubu region: SHVC-A77J-JPN revision: SHVC-A77J-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e9a1f5cf088e060293b5566e7f518b0da89aeaebffb1c3f73fcc3f36fac036ae title: ピットフォール マヤの大冒険 name: Pitfall - Maya no Daibouken region: SHVC-APAJ-JPN revision: SHVC-APAJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 96af51216ee7d2978265a474e382835a88b78d12b456a57f39f944a048e95574 title: プロック name: Plok! region: SHVC-P4 revision: SHVC-P4-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: e98821977389fe0ae16ec22e1f63d226698b5f869b2228885bd231a8a551c003 title: ポコニャン! へんぽこりんアドベンチャー name: Pokonyan! - Henpokorin Adventure region: SHVC-APOJ-JPN revision: SHVC-APOJ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 82a9ee11b5640409c67772363f1148517b26127cef13aa2a8ffc2480b487d81f title: レンダリング・レンジャーR² name: Rendering Ranger R2 region: SHVC-AVCJ-JPN revision: SHVC-AVCJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 4fc2832e7aa01d105ca67977b38840ec1188869b5e74d20e58613c1cd127d78f title: ロックマン&フォルテ name: Rockman & Forte region: SHVC-AR6J-JPN revision: SHVC-AR6J-0 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 2626625f29e451746c8762f9e313d1140457fe68b27d36ce0cbee9b5c5be9743 title: ロックマンエックス name: Rockman X region: SHVC-RX revision: SHVC-RX-0 board: SHVC-2A0N-01#A memory type: ROM size: 0x180000 content: Program note: Custom wiring on PCB game sha256: 76f80cdf704a0e1daf1af5bbf564e427b425a5ee42329417de6f29219fe63e5f title: ロックマンエックス name: Rockman X region: SHVC-RX revision: SHVC-RX-1 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 6dfc016c571a16e5d42045060b1a88b6f3da5831e05b33c22035e1d990deccf3 title: ロマンシング サ・ガ3 体験版サンプルROM name: Romancing SaGa 3 - Taikenban Sample ROM region: SHVC-AL9J-JPN revision: SHVC-AL9J-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: d1e0d1c930011d22423cb7cde8feac445a00705da8067a4e53a735b08389a19d title: RPGツクール2 name: RPG Tsukuuru 2 region: SHVC-ZR2J-JPN revision: SHVC-ZR2J-0 board: BSC-1A7M-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x10000 content: Save game sha256: 00e78318926e5cae79bce0535fddd3dccaa732f5c70e43acefc2769a9899eaed title: ラッシング・ビート修羅 name: Rushing Beat Shura region: SHVC-R6 revision: SHVC-R6-0 board: SHVC-1J0N-01 memory type: ROM size: 0x200000 content: Program game sha256: 3a709383208d8258dceb20a5e566903326515ba42931bf97fd389a415a13a72d title: 鮫亀 name: Same Game region: SHVC-ZS5J-JPN revision: SHVC-ZS5J-0 board: BSC-1J3M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 208f5ecb7a82b33629e67f39e96b7aa7a992cb2fcc3d1e4eb959abb0a8b7dd95 title: SDガンダム ジーネクスト name: SD Gundam G Next region: SHVC-ZX3J-JPN revision: SHVC-ZX3J-0 board: BSC-1L5B-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x8000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: f1acb9fb0c73b4799b28c26d339823a8c6713106fdf1a15260e75ebb47b376f7 title: 聖剣伝説3 体験版サンプルROM name: Seiken Densetsu 3 - Taikenban Sample ROM region: SHVC-A3EJ-JPN revision: SHVC-A3EJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save volatile note: No battery on PCB game sha256: 601161a459e68824a24e635190e9e786dc93081803b4db66ac5a4744bb422841 title: 少年忍者サスケ name: Shounen Ninja Sasuke region: SHVC-EO revision: SHVC-EO-0 board: SHVC-2A3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 302ba8a084081bbdd4f1f25bb473fe072b07d1514716c5a3ffd258595e9a176d title: ソニックブラストマンII name: Sonic Blast Man II region: SHVC-2C revision: SHVC-2C-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 7be858fc681df6728650f460d67fe6c80d816d5fbfc530c11153f652f8b1878e title: サウンドノベルツクール name: Sound Novel Tsukuuru region: SHVC-ZSNJ-JPN revision: SHVC-ZSNJ-0 board: BSC-1A7M-10 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x10000 content: Save game sha256: efae37be832d0ea1490784d57bef00761a8bf0b5bcef9c23f558e063441c3876 title: スターオーシャン name: Star Ocean region: SHVC-ARFJ-JPN revision: SHVC-ARFJ-0 board: SHVC-LN3B-01 memory type: ROM size: 0x600000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e722d20b9c264f81bbdb37d77338c5767f6b549af489486e75a648a0a65d5bfc title: ストーンプロテクターズ name: Stone Protectors region: SHVC-ASOJ-JPN revision: SHVC-ASOJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: f15731675e22dbf3882b777b2d8cd541a637dfdf5d8880c83903cf1e0b64590e title: ストリートファイターZero 2 name: Street Fighter Zero 2 region: SHVC-AUZJ-JPN revision: SHVC-AUZJ-0 board: SHVC-1N0N-10 memory type: ROM size: 0x400000 content: Program game sha256: edacb453da14f825f05d1134d6035f4bf034e55f7cfb97c70c4ee107eabc7342 title: スーファミターボ name: Sufami Turbo region: SHVC-A9PJ-JPN revision: SHVC-A9PJ-0 board: BANDAI-PT-923 memory type: ROM size: 0x40000 content: Program game sha256: e57aa265b2fbfb7ee7f5488a3df06ae771db202d59ebbd13df8fc2db80a856f3 title: スーパー・バック・トゥ・ザ・フューチャーII name: Super Back to the Future - Part II region: SHVC-B2 revision: SHVC-B2-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 442397be57b3740ca236cfb37633b95f88a2c80dafc94b56a805229793563ce1 title: スーパーボンバーマン2 体験版 name: Super Bomberman 2 - Taikenban region: SHVC-9B revision: SHVC-9B-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 5f8e6894f71c62bc5e70485715dbd2e2d8f3c0383ec54211dc5fe180098d0e3f title: スーパーボンバーマン5 コロコロコミック name: Super Bomberman 5 - CoroCoro Comic region: SHVC-AK8J-JPN revision: SHVC-AK8J-0 board: SHVC-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: f73238b97807fc37911d9e94ad7b671be2746baf11200974e12aeb089b7f3c35 title: スーパーフォーメーションサッカー95 デッラセリエA ザクア name: Super Formation Soccer '95 - della Serie A - Xaqua region: SHVC-ADEJ-JPN revision: SHVC-ADEJ-0 board: SHVC-2J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4d7fc331a811b8dc630b469262fd6f45e289243cef83101f32038158967d1b28 title: スーパーゲームボーイ name: Super Game Boy region: SHVC-SGB revision: SYS-SGB-2 board: SGB-R-10 memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x100 content: Boot manufacturer: Nintendo architecture: SM83 identifier: SGB1 game sha256: e1db895a9da7ce992941c1238f711437a9110c2793083bb04e0b4d49b7915916 title: スーパーゲームボーイ2 name: Super Game Boy 2 region: SHVC-SGB2-JPN revision: SYS-SGB2-10 board: SHVC-SGB2-01 memory type: ROM size: 0x80000 content: Program memory type: ROM size: 0x100 content: Boot manufacturer: Nintendo architecture: SM83 identifier: SGB2 oscillator frequency: 20971520 game sha256: f56c083e54bc94efdc46c5224b3ceebc56c8ba7a0c38ee8620b0f73cd1317677 title: スーパー麻雀大会 name: Super Mahjong Taikai region: SHVC-IQ revision: SHVC-IQ-0 board: SHVC-1A3B-13 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 96c0cb3c670c36e068c36b38d1edae145f24f60159537da4988bf956eee58d59 title: スーパー麻雀大会 name: Super Mahjong Taikai region: SHVC-IQ revision: SHVC-IQ-1 board: SHVC-1A3B-13 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b3204162def67b0dc40097344074e9b660ed296e5b5e22e778f373f0b985645b title: スーパー麻雀大会 name: Super Mahjong Taikai region: SHVC-IQ revision: SHVC-IQ-2 board: SHVC-1A3B-13 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 15d1187d17fa10c77152f691197d33674e64c33a1f8ceb37e8570588be507b89 title: スーパー麻雀大会 name: Super Mahjong Taikai region: SHVC-IQ revision: SHVC-IQ-3 board: SHVC-1A3B-13 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 68def3754ee32d6bce8f7e346e4d46dc2861c2c590835f8151c291c78f37b21b title: スーパー桃太郎電鉄DX JR西日本Presents name: Super Momotarou Dentetsu DX - JR Nishi Nihon Presents region: SHVC-ANWJ-JPN revision: SHVC-ANWJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3972e52c1a6641842160ed70bac59c51d0d68a234deb8b2ad3b1e5daea38446e title: す~ぱ~忍者くん name: Super Ninja-kun region: SHVC-8Q revision: SHVC-8Q-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ecd462c64516169cc83dd266af354fe676fcf53811863a361d78cc918619da0d title: スーパー三国志II 復刻版 name: Super Sangokushi II region: SHVC-XL revision: SHVC-XL-1 board: SHVC-1A5M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: fde83367c1caf6edfb41a0c609bacc90084e9808b32ba52b13d204eb59535ab5 title: スーパースコープ6 name: Super Scope 6 region: SHVC-LR revision: SHVC-LR-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8dda3b0888a32005041f2feb9be4e14807d40291f951a4612461cf41dac9cb78 title: Super Tetris 2 + Bombliss name: Super Tetris 2 + Bombliss region: SHVC-T2 revision: SHVC-T2-0 board: SHVC-1A1B-06 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: a72b6f6722decc1c9e3f979f3d637794d3016b525822dd97f2aeba88696959aa title: スーパータリカン name: Super Turrican region: SHVC-T9 revision: SHVC-T9-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: db04fad1cfb1b8a58cb05ce62ae9e66532923699b54499344869cf8143f06098 title: すってはっくん name: Sutte Hakkun region: SHVC-BSHJ-JPN revision: SHVC-BSHJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x2e0000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 77b2d5450ce3c87185f913c2584673530c13dfbe8cc433b1e9fe5e9a653bf7d5 title: テイルズオブファンタジア name: Tales of Phantasia region: SHVC-ATVJ-JPN revision: SHVC-ATVJ-0 board: SHVC-LJ3M-01 memory type: ROM size: 0x600000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c9002e77bcc656e033c35e2574ee6067c4c0d070943359a850806c123a558949 title: 戦え原始人3 主役はやっぱりジョーアンドマック name: Tatakae Genshijin 3 - Shuyaku wa Yappari Joe & Mac region: SHVC-J3 revision: SHVC-J3-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b97f1bb3c7258d500660757a57c1c7e1d90a719dfcf7b3de5e8a0d06f7f8e814 title: ティーンエージ ミュータント ニンジャ タートルズ/タートルズ イン タイム name: Teenage Mutant Ninja Turtles - Turtles in Time region: SHVC-TM revision: SHVC-TM-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: d844223275a9f8d428c73d5540c6e9ddd2781c53ba8a8d733bde5835ebfa4e25 title: UFO仮面ヤキソバン ケトラーの黒い陰謀 景品版 name: UFO Kamen Yakisoban - Kettler no Kuroi Inbou - Keihinban region: SHVC-Y7 revision: SHVC-Y7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b66da2a23f249e525b1dd444596a3f10559cb3c30fa3c0bca83ed8f4405fcfcf title: Undake 30 鮫亀大作戦 マリオバージョン name: Undake 30 - Same Game Daisakusen - Mario Version region: SHVC-ANZJ-JPN revision: SHVC-ANZJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x60000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: cb8073cf95eace56ba4324a2106164fa540900c2de083aff490c4afe91ae95f7 title: アンダーカバーコップス name: Undercover Cops region: SHVC-AUCJ-JPN revision: SHVC-AUCJ-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 6b37c3bd79db2553bf71b79efbb131d96c40462cffac54c40dbc783f1ef44428 title: ワイルドガンズ name: Wild Guns region: SHVC-4W revision: SHVC-4W-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 491b5d20c0e00eaa7ae89e9f4cde044408258aa31042bb3ed16dff082e01a7a7 title: レッキングクルー'98 name: Wrecking Crew '98 region: SHVC-BWCJ-JPN revision: SHVC-BWCJ-0 board: SHVC-1J3M-20 memory type: ROM size: 0x1e0000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c06e3c14a2f73180a7a6ff50ee76790c4542d58e8994bb3fae06412f7303d089 title: やまねこバブジーの大冒険 name: Yamaneko Bubsy no Daibouken region: SHVC-UY revision: SHVC-UY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 2b2fe61ac7a79c3cfaa0bc16f1b1f4da544fcc37cfdf3c18879d31b8b9f87941 title: ヨッシーのクッキー クルッポンオーブンでクッキー name: Yoshi no Cookie - Kuruppon Oven de Cookie region: SHVC-YO revision: SHVC-YO-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 64a124461cc12dd073191563729f559d0cf8911890ca7ede051e32024f6d9695 title: 妖怪バスター ルカの大冒険 name: Youkai Buster - Ruka no Daibouken region: SHVC-AYOJ-JPN revision: SHVC-AYOJ-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program //Super Famicom (ROC) database revision: 2021-03-04 game sha256: 1cf13dac329f83a7fe5347dcc20f92c3a09b3eab1511dd461f9cec90e9258403 title: 三国志III name: Sanguozhi III region: SNSN-S3-ROC revision: SCHN-S3-0 board: SHVC-1J5M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x8000 content: Save //Super Nintendo (AUS) database revision: 2021-03-04 game sha256: 7dbaebb1007984610623cb0b571f0e7167d73d89274598bfffc845cfb2de4aac title: Lufia name: Lufia region: SNSP-ANIP-AUS revision: SPAL-ANIP-0 board: SHVC-1A3M-30 memory type: ROM size: 0x280000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0483780080d10bae49f62c3e4bf6954f891a29c0b1356b3a073cc894784593b8 title: Space Invaders name: Space Invaders region: SNSP-IC-AUS revision: SPAL-IC-0 board: SHVC-1A0N-30 memory type: ROM size: 0x40000 content: Program game sha256: a1daaaaacf723ddfa4fcb406d0218a045d8f8a78674b6449a2322a0306e0af9f title: Super Chase HQ name: Super Chase HQ region: SNSP-QT-AUS revision: SPAL-QT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program //Super Nintendo (BRA) database revision: 2021-03-04 game sha256: 1edcceab07d1544dcbd0fd681148b0fbefeea58b7077136fa0c3011973bf34df title: FIFA: A Caminho da Copa '98 name: FIFA - A Caminho da Copa '98 region: SNS-A8FB-BRA revision: SNS-A8FB-0 board: EA-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save note: Serial# is from ROM data; it is not present on cartridge or ROM chip //Super Nintendo (CAN) database revision: 2021-03-04 game sha256: dd499445275fca6692c0487a8bd70a23f6c8e78e766df0e3c58fbbe53f8adb06 title: The Legend of Zelda: A Link to the Past name: Legend of Zelda, The - A Link to the Past region: SNS-ZF-CAN revision: SNS-ZF-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save //Super Nintendo (ESP) database revision: 2021-03-04 game sha256: bd5e7a6bc08f64d39c54204b82c6c156f144c03e13c890128588c5faa560659c title: The Addams Family: Pugsley's Scavenger Hunt name: Addams Family, The - Pugsley's Scavenger Hunt region: SNSP-AH-ESP revision: SPAL-AH-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 7a75021fb390d04645b654a3dbd986c82cee1dbf34018e7ff7bf4b6ea125fa35 title: Bram Stoker's Dracula name: Bram Stoker's Dracula region: SNSP-5D-ESP revision: SPAL-5D-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6582c8f0ebec73d9dee61c1ff95b7b8e7c753a30c7bdd5dab560025dc531a43e title: Cool World name: Cool World region: SNSP-CD-ESP revision: SPAL-CD-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4a4803056afb251b06a2e9fa68d8062b6999156535bb66ff9fb069de180f32c1 title: Jack Nicklaus Golf name: Jack Nicklaus Golf region: SNSP-JN-ESP revision: SPAL-JN-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 929e15c8439b3beea249730e598e72cb192a3a70af0624ab7f91300f8f786a13 title: Jurassic Park name: Jurassic Park region: SNSP-J8-ESP revision: SESP-J8-0 board: SHVC-2A0N-01 memory type: ROM size: 0x200000 content: Program game sha256: bd7e98db82d6b52307be1f3e1fd171e1e7204dc1f8810a95ee2cc64757087e4a title: The Lost Vikings name: Lost Vikings, The region: SNSP-LV-ESP revision: SESP-LV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6eecabd46305ac95d9cf3a17e1392c24a1b68a7a313173ef0c5b5a3a24cf3353 title: Lufia name: Lufia region: SNSP-ANIS-ESP revision: SPAL-ANIS-0 board: SHVC-1A3M-30 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: d70bc7916ed5132c3b0053f2adbb5004d78ccb986210c9440fedf642cac68554 title: MechWarrior name: MechWarrior region: SNSP-WM-ESP revision: SESP-WM-0 board: SHVC-1A1M-10 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: d2233d6310522bbf183b6ca9bbe3e2afaf24de0cc4304bff6d0d547d678aed6f title: Sonic Blast Man name: Sonic Blast Man region: SNSP-SK-ESP revision: SPAL-SK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a20d346da18ddabf70dc43f5095c4189c4a646ca8e6d4ed6c68c20e380f50332 title: Super Battletank 2 name: Super Battletank 2 region: SNSP-2X-ESP revision: SESP-2X-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9eaf1c46d8a068c910d66f582e23b1155882ddfa4b9fd0813819fc5c008167e2 title: Super James Pond name: Super James Pond region: SNSP-J5-ESP revision: SPAL-J5-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: bd9cbb4c115716ec0f5d2d438bb812d02d496c41b7677a1d9520ff454254247b title: Syvalion name: Syvalion region: SNSP-SY-ESP revision: SPAL-SY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 7f731f4bb620e682132660da39641dda5762211dca4732f8192dd2411211b822 title: Terranigma name: Terranigma region: SNSP-AQTS-ESP revision: SPAL-AQTS-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 981128c93f0753dec7af29ec084f13e704cc5d02414be55bb477fc4b2fef5e58 title: Tiny Toon Adventures: Buster Busts Loose! name: Tiny Toon Adventures - Buster Busts Loose! region: SNSP-TA-ESP revision: SESP-TA-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ce2445ecd0a43f6025dc80857d91dae7c46d33f7821bf98232c2894ca1959da2 title: Turn and Burn: No-Fly Zone name: Turn and Burn - No-Fly Zone region: SNSP-ZN-ESP revision: SESP-ZN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9ed876a632aa699047e9efba8a64ab57abc55086a0aab6b5fa67d87ea4647f3f title: Whirlo name: Whirlo region: SNSP-SH-ESP revision: SPAL-SH-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: ffcdce24171d9dc225a8a8b52e7d24a7832873f85135767359952537a8b9f8f1 title: World Cup USA '94 name: World Cup USA '94 region: SNSP-U4-ESP revision: SPAL-U4-0 board: SHVC-2J3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: d897f80465d02a92f17e1eecb727b99211ec2fb9c58cbabfa76b35c554096ea6 title: Young Merlin name: Young Merlin region: SNSP-Y6-ESP revision: SPAL-Y6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program //Super Nintendo (EUR) database revision: 2021-03-04 game sha256: ec3e81d628a293514e303b44e3b1ac03461ddd1da32764b10b7fab1e507602df title: Aaahh!!! Real Monsters name: Aaahh!!! Real Monsters region: SNSP-ANNP-EUR revision: SPAL-ANNP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a0baba78c9cad02957b80ed74fc8d09fac3c77e131e47333ef42ba471dc61228 title: The Adventures of Batman & Robin name: Adventures of Batman & Robin, The region: SNSP-ABTP-EUR revision: SPAL-ABTP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: e0c065aecfb6167cdb6dee8368b5f36d52fe55131ed4f6adbb3b2c62a39aafca title: The Adventures of Mighty Max name: Adventures of Mighty Max, The region: SNSP-AMOP-EUR revision: SPAL-AMOP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ffd634dbfa9ad88a81cfc59adcc889c15e03730536c171d358bf58b37c6bca6a title: Air Cavalry name: Air Cavalry region: SNSP-ACCP-EUR revision: SPAL-ACCP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 65feac0ff8bf834bdb3f1eade09102496e1bd021a261ca05fc3a75983c357c84 title: Alien 3 name: Alien 3 region: SNSP-A3-EUR revision: SPAL-A3-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 79ff74b758bb5df40d9fb6f830e9370de799c7a1423c482b2cc74eee78c55127 title: Animaniacs name: Animaniacs region: SNSP-ANCP-EUR revision: SPAL-ANCP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 41084f83e269d46b9d589f11c802a15e84fede57d604c7986053f2858f757adc title: Archer Maclean's Super Dropzone name: Archer Maclean's Super Dropzone region: SNSP-ASDP-EUR revision: SPAL-ASDP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ea4240989114fd2c6dbbf2bfcafb2047ab482ebc4aa276f30f3dc7b551197808 title: Ardy Lightfoot name: Ardy Lightfoot region: SNSP-A9-EUR revision: SPAL-A9-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: f0cfaab9a4be5b2bac0cb3dafea14cea4cf8d7cbfa562323ab3026466985c9e1 title: Bass Masters Classic: Pro Edition name: Bass Masters Classic - Pro Edition region: SNSP-A9BP-EUR revision: SPAL-A9BP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a10f7406d76a85e27ae340ed2dd2379897321ed388b439e247b3437fa07806cb title: Batman Forever name: Batman Forever region: SNSP-A3BP-EUR revision: SPAL-A3BP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 4d347d60795008852ec11bc8e0256a3d1f159bf48c130b9798cb2961e560f319 title: Beavis and Butt-Head name: Beavis and Butt-Head region: SNSP-ABUP-EUR revision: SPAL-ABUP-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: a73c8864743dd64a61d756ebe001a1244d6ae387621a46f9da4421d061c6b7ac title: Boogerman: A Pick and Flick Adventure name: Boogerman - A Pick and Flick Adventure region: SNSP-AB4P-EUR revision: SPAL-AB4P-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 597894334926c326e332ecdea0d4ad61430ab6af03830a9beeb2c007c280c843 title: Breath of Fire II name: Breath of Fire II region: SNSP-AF2P-EUR revision: SPAL-AF2P-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a057383e41bd5735b1c554c555b89fe0ff9b7eb7e9f9d46dbefbdd749c8d2181 title: Brutal: Paws of Fury name: Brutal - Paws of Fury region: SNSP-ABLP-EUR revision: SPAL-ABLP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: be86b8b9c390f1a85384117ce19170567e1234ddb08b538e1361af2feee63869 title: Bubsy II name: Bubsy II region: SNSP-ABBP-EUR revision: SPAL-ABBP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 3545306505c463c627bc4ced91ff4413481c945a658860ddc1f6e8e7b4cc6144 title: Cannon Fodder name: Cannon Fodder region: SNSP-ACNP-EUR revision: SPAL-ACNP-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 04a347e7d600c8aff435e769f72273ac1ae8160838905f325f03ef4c5aa93bbe title: Captain Commando name: Captain Commando region: SNSP-QM-EUR revision: SPAL-QM-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 0f37da5beb0beb5e8f8c34443bf0734575649f8222074e3394926c3b697589cc title: Carrier Aces name: Carrier Aces region: SNSP-ACAP-EUR revision: SPAL-ACAP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: ca99787148aac7053ae9d1a1b06c8a5f42f2bfdd70c2942282a9dd0c1c0fda4f title: Castlevania: Vampire's Kiss name: Castlevania - Vampire's Kiss region: SNSP-ADZP-EUR revision: SPAL-ADZP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: e1e2cc6b7ef58b512bb8aa6848dd67fce9e5d092ea67e6b4f31f156b060cc2b1 title: Clay Fighter 2: Judgment Clay name: Clay Fighter 2 - Judgment Clay region: SNSP-ACZP-EUR revision: SPAL-ACZP-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: b9d6cf21e7a280b83fadcf513029158be6f4dcdc51f73b699b7c215a5150be42 title: CutThroat Island name: CutThroat Island region: SNSP-AC8P-EUR revision: SPAL-AC8P-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 3a158e49478bd9a25b487a347c25f401cd0ed1cd1ccf72d8010752139a2143dc title: Demolition Man name: Demolition Man region: SNSP-AD6P-EUR revision: SPAL-AD6P-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: f6afe40ced7033c845df84b895230fd26ea0b48e6a58d6b6e18beee9b594ad6e title: Demon's Crest name: Demon's Crest region: SNSP-3Z-EUR revision: SPAL-3Z-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a2dc5ffc82e8d055d030c3f021d8df3ae8b08571c8301cdd1d7652248d6f9b55 title: Dino Dini's Soccer name: Dino Dini's Soccer region: SNSP-ADSP-EUR revision: SPAL-ADSP-0 board: SHVC-1A3M-21 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 574c61ab1a670a79b8dc69445b8f55aa5b4caa95ed0e1504fae8a1e3d336e7f1 title: Donkey Kong Country 3: Dixie Kong's Double Trouble name: Donkey Kong Country 3 - Dixie Kong's Double Trouble region: SNSP-A3CP-EUR revision: SPAL-A3CP-0 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 753467f4e343a563a1e4f5da43b731968a47cf3fc035f98575134e680a596f27 title: Dragon: The Bruce Lee Story name: Dragon - The Bruce Lee Story region: SNSP-4N-EUR revision: SPAL-4N-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 89dddd495d29db4542d45bf4a89d387bf2465eb8d2bd5b300c5397d8b24dc4af title: Dragon Ball Z: Hyper Dimension name: Dragon Ball Z - Hyper Dimension region: SNSP-AZIF-EUR revision: SPAL-AZIF-0 board: SNSP-1L0N3S-01 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save volatile memory type: RAM size: 0x800 content: Internal volatile game sha256: 4a96f3c0a7694a1d8235e2bf03b583ed2e99488d1dc0e26691db003fd23191f7 title: Earthworm Jim name: Earthworm Jim region: SNSP-AEJP-EUR revision: SPAL-AEJP-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: df2b34467581f8ffdad24f59119d54a03875f355d33ab552459b60f8f0de3e78 title: Earthworm Jim 2 name: Earthworm Jim 2 region: SNSP-A2EP-EUR revision: SPAL-A2EP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: f4cabd80dd20b076ff90bf1f394b5dff5800900fa1fe178a42b6af967fd80c25 title: Fatal Fury 2 name: Fatal Fury 2 region: SNSP-DJ-EUR revision: SPAL-DJ-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x280000 content: Program game sha256: a12391775fa9770f85f383ffaec6441a686c33b2e1800de7c01a79a0b7c93154 title: Fatal Fury Special name: Fatal Fury Special region: SNSP-3R-EUR revision: SPAL-3R-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 20af141280d75c29a0981c6a4decfa1835c3613a47636a4ae0967948a7878f7c title: Fever Pitch Soccer name: Fever Pitch Soccer region: SNSP-AVSP-EUR revision: SPAL-AVSP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: ea769b616ad5d6f7b0a5e42951c31096191800347dc9fd6c8c9845f2afa95f5b title: FIFA '97 name: FIFA '97 region: SNSP-A7IP-EUR revision: SPAL-A7IP-0 board: EA-1A3M-30 memory type: ROM size: 0x1e0000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 14e8f7963bd71a3d8792952ae0c0def733178ac720417b954ea5cb12cc76dece title: Final Fight 3 name: Final Fight 3 region: SNSP-AFZP-EUR revision: SPAL-AFZP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: a0106f9cff7abbf25e081e2531f6d4b4aedf6f0dc8d155a66506817bff267d12 title: The Firemen name: Firemen, The region: SNSP-AFMP-EUR revision: SPAL-AFMP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 21d79cd5382ad5503fdee1c44416a7a425904cebe37bb531d508ef62aa4f2ed0 title: Frank Thomas' Big Hurt Baseball name: Frank Thomas' Big Hurt Baseball region: SNSP-AFKP-EUR revision: SPAL-AFKP-0 board: SHVC-1A3M-30 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 6a6a95528e4c8cfdf46cade2a354f3e28f63b55bba002e10af0f60227ec4c833 title: Frantic Flea name: Frantic Flea region: SNSP-AF8P-EUR revision: SPAL-AF8P-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 0d7a1649915d45b4c6e0752ea06ad353c2b1a590370912c18deeb42986821624 title: Ghoul Patrol name: Ghoul Patrol region: SNSP-AGJP-EUR revision: SPAL-AGJP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ee4ab0df49db4024b5da62d04c18c8c866830b54d286dec69440af7285ec2854 title: Hagane name: Hagane region: SNSP-AHGP-EUR revision: SPAL-AHGP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: d98487781da9307309eec8830c6a28c907b0f1848e351df7f5b6d005c653b4ac title: Hurricanes name: Hurricanes region: SNSP-AHUP-EUR revision: SPAL-AHUP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 21e8632a6da085cae5d4bcf7334c63fbda0028c2a37c0b0c3041ab59f307ebd3 title: Incantation name: Incantation region: SNSP-AIYP-EUR revision: SPAL-AIYP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 09d937a73595df67c473f1a4beba2f302570c1434d8093051d027ec1e440b984 title: Indiana Jones' Greatest Adventures name: Indiana Jones' Greatest Adventures region: SNSP-AIJP-EUR revision: SPAL-AIJP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 6fe482f91a59a71992e14014a0a4e23fb866cf4e870c10d57c81b0c20ae6688e title: International Superstar Soccer name: International Superstar Soccer region: SNSP-3U-EUR revision: SPAL-3U-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 686f2507e9969fd7617fc544c139e124668294d102e79a0eb34478c8deb75271 title: Izzy's Quest for the Olympic Rings name: Izzy's Quest for the Olympic Rings region: SNSP-AIZP-EUR revision: SPAL-AIZP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 02cb423199be3368fc2b40148f83b7a48900394983e04d43f94bb7d76ce44e94 title: Judge Dredd name: Judge Dredd region: SNSP-AJDP-EUR revision: SPAL-AJDP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 2516843fa405ab1aa1f242b57f19977519aefb68599474d2c7065aaef88ecb88 title: Jungle Strike name: Jungle Strike region: SNSP-AJGP-EUR revision: SPAL-AJGP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 9b1dbcac063b524eef533e78cf7051e3f566a49d5ac13d23474dc6afb293d6be title: Jurassic Park Part 2: The Chaos Continues name: Jurassic Park Part 2 - The Chaos Continues region: SNSP-A2JP-EUR revision: SPAL-A2JP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 07386ef7dfcc70a67beb01fa7e2300249914b2ce0b010a74cbfbf0714c32fcf1 title: Justice League Task Force name: Justice League Task Force region: SNSP-AJLP-EUR revision: SPAL-AJLP-0 board: SHVC-BA0N-01 memory type: ROM size: 0x280000 content: Program game sha256: 51364bc86ba8f00f0eeb2dcd59c68b42f94595af5ce272e914dedb5fc4ffa191 title: Lemmings 2: The Tribes name: Lemmings 2 - The Tribes region: SNSP-L2-EUR revision: SPAL-L2-0 board: SHVC-1A1M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x800 content: Save game sha256: bf0d2739c2bd1aeba9cc979928e0702341cb290023dbc39bd25f18c1412fe674 title: Marko's Magic Football name: Marko's Magic Football region: SNSP-AMRP-EUR revision: SPAL-AMRP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 4f83fc7c1fa4fae99568ae8e049a45e6e65176761fe3ac74315bee8eff846fd4 title: Marvel Super Heroes in War of the Gems name: Marvel Super Heroes in War of the Gems region: SNSP-AHZP-EUR revision: SPAL-AHZP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9da7274457995b39ae7b00387c1eaab92f1fdb0beac55372726c3a3af1cb8f7e title: MechWarrior 3050 name: MechWarrior 3050 region: SNSP-A35P-EUR revision: SPAL-A35P-0 board: SHVC-1J0N-20 memory type: ROM size: 0x180000 content: Program game sha256: 81f90a36c07221546c441d67689d951864f071f3218aa96994c0c54e93998a67 title: Mega Man 7 name: Mega Man 7 region: SNSP-A7RP-EUR revision: SPAL-A7RP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: ae6fb12b5077eaa9c13c6124368343bfef076bc1e42f53f442973576266255c4 title: Mega Man X2 name: Mega Man X2 region: SNSP-ARXP-EUR revision: SPAL-ARXP-0 board: SHVC-2DC0N-01 memory type: ROM size: 0x180000 content: Program memory type: ROM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 memory type: RAM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 volatile oscillator frequency: 20000000 game sha256: 14cd1e5d7a810426c566c1c4eff16398cace6e7a4c0d7f048fdb1f4c22c1c135 title: Mega Man X3 name: Mega Man X3 region: SNSP-AR3P-EUR revision: SPAL-AR3P-0 board: SHVC-1DC0N-01 memory type: ROM size: 0x200000 content: Program memory type: ROM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 memory type: RAM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 volatile oscillator frequency: 20000000 game sha256: 02a85c9e783add4e3d44f8f4718c014743f252585fedd9ae5583458237122b35 title: Mohawk & Headphone Jack name: Mohawk & Headphone Jack region: SNSP-AJYP-EUR revision: SPAL-AJYP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: b7fa4b79590ecdef2d0303b5cbccf1e1a3af31fca289652acbdb3d5381137f24 title: Mortal Kombat 3 name: Mortal Kombat 3 region: SNSP-A3MP-EUR revision: SPAL-A3MP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 964f8391806bc8d674f24aa2f201b20982d2f2f3e3efb2f730c4a34a289c3007 title: Mortal Kombat II name: Mortal Kombat II region: SNSP-28-EUR revision: SPAL-28-1 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: bfec7d5afdf0d41cfce7f4e73dc20d91981db0edc2a0f41c5737d861efd4ab2a title: Mr. Do! name: Mr. Do! region: SNSP-AUNP-EUR revision: SPAL-AUNP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x40000 content: Program game sha256: 65377b1f6dbf1b3258c0554fe54ab0fbe59d6c3f07d3cad1c69ff692e0872b9a title: NBA Jam: Tournament Edition name: NBA Jam - Tournament Edition region: SNSP-AJTP-EUR revision: SPAL-AJTP-0 board: SHVC-BA1M-01 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x800 content: Save game sha256: aa3f0608fa8723a21a4a5121f04098c53a76b5188f4dc30fcc26db9232c734d8 title: NHL '96 name: NHL '96 region: SNSP-A6HP-EUR revision: SPAL-A6HP-0 board: SHVC-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 25d04bba3f3b12c63ae7ee4450e1d924df7aff077515d634721e22e6420c09b9 title: Ninja Warriors: The New Generation name: Ninja Warriors - The New Generation region: SNSP-NI-EUR revision: SPAL-NI-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: d9860f4f9b5e71290c5419b88c49b545f947a35cfe0549c2f32e54f05bc55815 title: Olympic Summer Games name: Olympic Summer Games region: SNSP-AO9P-EUR revision: SPAL-AO9P-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 2ec71aca4efc3791b6b3e65956df3eafd2a46e223d5ea71aead07d30ca48b6c9 title: Operation Starfi5h name: Operation Starfi5h region: SNSP-AOSP-EUR revision: SPAL-AOSP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 908b1b18403a1330e1af5844f8c9d11a66279ff107cf14b56e6be849fbd4a7f9 title: Phantom 2040 name: Phantom 2040 region: SNSP-A24P-EUR revision: SPAL-A24P-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 166fe888ac03f88cce5759c1008021082bd81254aab8fea8203cdb13080709d7 title: Pinball Fantasies name: Pinball Fantasies region: SNSP-APFP-EUR revision: SPAL-APFP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 1744a87d4817be07948e1b37b59c4de49c85e6aec2cf49879c7b9649d1b1fc90 title: Primal Rage name: Primal Rage region: SNSP-AR9P-EUR revision: SPAL-AR9P-0 board: SHVC-BJ0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 00e2c72fd82d78c5bb6f144101df6145d0a7f68dd77632f49969f13c5623c59a title: Realm name: Realm region: SNSP-ARQP-EUR revision: SPAL-ARQP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 862a53905b9e2ed33bae8e01e755ab6ca9fe2f181567510cb0840ed9a19f20d8 title: Rise of the Robots name: Rise of the Robots region: SNSP-AROP-EUR revision: SPAL-AROP-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x400000 content: Program game sha256: 2d5e3091ce4912e2325dedf99b439c5b4cb6ba6899e25bf8957b19eda942de88 title: RoboCop vs. The Terminator name: RoboCop vs. The Terminator region: SNSP-VR-EUR revision: SPAL-VR-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 09fdef0c959e7275563f65d8267d95a20104f054e9438e9ac739ef7f46120a2d title: Smash Tennis name: Smash Tennis region: SNSP-JA-EUR revision: SPAL-JA-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 9638d4daa7bc63fd178b77c4487c3b080def5b808c0b7ccc959101f33e221b42 title: Spider-Man & Venom: Maximum Carnage name: Spider-Man & Venom - Maximum Carnage region: SNSP-AMCP-EUR revision: SPAL-AMCP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 4001418ceb26f38efbea10b7bcc8233adc7bfcaa7e11dfb401d820f3254f06ef title: Street Fighter Alpha 2 name: Street Fighter Alpha 2 region: SNSP-AUZP-EUR revision: SPAL-AUZP-0 board: SNSP-1N0N-01 memory type: ROM size: 0x400000 content: Program game sha256: 4ef0053b294be64353df47e4f7d079cb97044e18263b55d46b6e4f9adda55766 title: Super B.C. Kid name: Super BC Kid region: SNSP-ZH-EUR revision: SPAL-ZH-0 board: SHVC-2J0N-20 memory type: ROM size: 0x180000 content: Program game sha256: 640acb63dae038ad6f0ae65e103416f5a1f84d4a37ddaeeab5046122def774d5 title: Super Metroid name: Super Metroid region: SNSP-RI-EUR revision: SPAL-RI-0 board: SHVC-1A3M-30 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 148f6bbf0578ff6ec62e6dacb9e3d266f6d7a427baa104e8ecd3cb2df64bca14 title: Super Soccer name: Super Soccer region: SNSP-FS-EUR revision: SPAL-FS-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 92946358ee4fbc5cb1df81a26ebd323c2f4e8cc76acd038e1191b8aa31ad1c24 title: Super Star Wars III: Return of the Jedi name: Super Star Wars III - Return of the Jedi region: SNSP-ARJP-EUR revision: SPAL-ARJP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: a52b98da8f65bf2210b7d2e931548c672838fa7e44d852f2e3c6f3cd2ba950d6 title: Super Street Fighter II: The New Challengers name: Super Street Fighter II - The New Challengers region: SNSP-XW-EUR revision: SPAL-XW-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 299984b4148ee4503d67cba8469c5023f7ecb204949bc70c3271cc56b117bb8e title: Super Tennis name: Super Tennis region: SNSP-ST-EUR revision: SPAL-ST-1 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 93ba50d853e98e1ca227a2ca72389c0e3ac18d6b50c946b3f618c16c2d3edd38 title: Terranigma name: Terranigma region: SNSP-AQTP-EUR revision: SPAL-AQTP-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 41648e6d73bd1b998f5c0737a4e61cd603e574ce4a3439e579d2b74b14390159 title: Tiny Toon Adventures: Wild & Wacky Sports name: Tiny Toon Adventures - Wild & Wacky Sports region: SNSP-5Z-EUR revision: SPAL-5Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4ad736a9e1c7f34740afaa7777b8f1a31da4bb4a021e7ae341d1dafd74fa0acc title: True Lies name: True Lies region: SNSP-ATLP-EUR revision: SPAL-ATLP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: dbf11d4c77b9aa3416f687201d57d71a23bb8fb0b8fe5e9e8212db3fac036631 title: Turbo Toons name: Turbo Toons region: SNSP-ATTP-EUR revision: SPAL-ATTP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 03540084486c21724819515d1cb967c658f7f08ec180855fa7c191ca13d8bef1 title: Ultimate Mortal Kombat 3 name: Ultimate Mortal Kombat 3 region: SNSP-A3ZP-EUR revision: SPAL-A3ZP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: fc8c611bc46c850515a933d4388e2123e20ab24a3a3d3c1ac95afdc76c82c3d4 title: Urban Strike name: Urban Strike region: SNSP-AUSP-EUR revision: SPAL-AUSP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 1217ddf2fe475661a54f50e111864102faf854397ce5aceea4297204ebd6cbb6 title: Val d'isère Championship name: Val d'isere Championship region: SNSP-8Z-EUR revision: SPAL-8Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 150073c04e9c0e8b283a8eb237acea8fda3268c722f922ee42642009e17dc729 title: Vortex name: Vortex region: SNSP-4V-EUR revision: SPAL-4V-0 board: SHVC-1CA0N5S-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x8000 content: Save volatile oscillator frequency: 21440000 game sha256: f47f1665d97d350dda8bf968543ed38b1daf63081d6f71e517867a5533ce4776 title: Wild Guns name: Wild Guns region: SNSP-4W-EUR revision: SPAL-4W-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: aceb9ac7cfd68e6740de47ad1a19be70d4efe3974caa4aa8ec50b0a0a6672e47 title: Winter Gold name: Winter Gold region: SNSP-AXSP-EUR revision: SPAL-AXSP-0 board: SHVC-1CB7B-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x10000 content: Save oscillator frequency: 21440000 game sha256: 142b9b3f99811c2314a94d2c4b66aa9d434f5bdc9ccbb1574e3a6cbf2176b378 title: X-Kaliber 2097 name: X-Kaliber 2097 region: SNSP-X7-EUR revision: SPAL-X7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program //Super Nintendo (FAH) database revision: 2021-03-04 game sha256: 0aafd04a43ae29266e43920a7f9954d4a49f6fe43a5abffecc9c2fd5ad7d6cea title: Aero the Acro-Bat 2 name: Aero the Acro-Bat 2 region: SNSP-AE2P-FAH revision: SPAL-AE2P-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: a4b1e125b421c5a58e2fd73edc4d58b31d7a596c07dee263c565f00ee712223f title: Alfred Chicken name: Alfred Chicken region: SNSP-8A-FAH revision: SPAL-8A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d54d2703e474d7f469766d2d095ffcbbcab893e3fe58bbbcc57e24082a44bb40 title: Astérix name: Asterix region: SNSP-XE-FAH revision: SPAL-XE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: d9127808fb02c47dd74fd22f39582c69f19936a794a8efc153cc0e51a0d4d782 title: Astérix & Obelix name: Asterix & Obelix region: SNSP-AXOP-FAH revision: SPAL-AXOP-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: e6adeeee287204b06300b790fe048358f54e322306806142fb4e667ae8b57378 title: Le Cobaye name: Cobaye, Le region: SNSP-LW-FAH revision: SPAL-LW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: dde314fea056445685b97f9c8b554d2be81ea1fe6ace935934592464908d05fb title: Donkey Kong Country name: Donkey Kong Country region: SNSP-8X-FAH revision: SPAL-8X-0 board: SHVC-BJ1M-10 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 259537561fc1a0ddf0beacf9169ccb5fbe8ad88a322c07fccb862a39b379ae62 title: Donkey Kong Country 2: Diddy's Kong Quest name: Donkey Kong Country 2 - Diddy's Kong Quest region: SNSP-ADNP-FAH revision: SPAL-ADNP-1 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 826a328f401cdf5a9ee87aaa7a2784cbb21813b165a6c7ca3f702fe6ba8c0804 title: Eric Cantona: Football Challenge name: Eric Cantona - Football Challenge region: SNSP-EC-FAH revision: SPAL-EC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: ce09743d44a54f64862d8c53c11c2c84f2f861ec74c778bd8b05b0a3b07708d6 title: FIFA International Soccer name: FIFA International Soccer region: SNSP-84-FAH revision: SPAL-84-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 5a181f25055298579d24571b4f1cd21dd81583fb41a235fc4f226fa28d9df916 title: Jack Nicklaus Golf name: Jack Nicklaus Golf region: SNSP-JN-FAH revision: SFRA-JN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 9b52a2848b78aa7ecb7cac295bce7ae033089af6099e127c2c904f518c6d4b89 title: The Lost Vikings name: Lost Vikings, The region: SNSP-LV-FAH revision: SFRA-LV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8510491f99400115ccf33570269bc4e484fb56370f7ac36f12e73eec19d342da title: Lucky Luke name: Lucky Luke region: SNSP-ALYP-FAH revision: SPAL-ALYP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: 1c41bb11c9df5aa8a6ca98caa5215418f37025f7a5e88ff62188b257338af3ab title: Mega Man X name: Mega Man X region: SNSP-RX-FAH revision: SPAL-RX-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: a6772914f3d0c2fda5bfde855a41f211c89d9452b7bd437b41d69b46727ed6e8 title: Nintendo Scope 6 name: Nintendo Scope 6 region: SNSP-LR-FAH revision: SPAL-LR-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 558b437e10915c2ca79f376634fa4623c87efdb9292a5878b886c7a6fbef61e2 title: Parodius name: Parodius region: SNSP-PD-FAH revision: SPAL-PD-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 034850392507ec2ea7219970a8be7ad4a4418a11eccbda9df7a5bbf4c74f0287 title: Plok name: Plok region: SNSP-P4-FAH revision: SFRA-P4-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 3a30a6aff66e1ab44b7f742eafde45710cd5a7165681649470c3f04afa579927 title: R-Type III: The Third Lightning name: R-Type III - The Third Lightning region: SNSP-ER-FAH revision: SPAL-ER-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 553940ad4b0bbcf375cf2a06f092b44fcd880db820828c8c900c4cd9d4f5753f title: Starwing name: Starwing region: SNSP-FO-FAH revision: SPAL-FO-0 board: SNSP-1C0N5S-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: 35c1d6623748f66e254843cf340121e3e268a8301951f35c7ba3ef666bc293bf title: Street Fighter II: The World Warrior name: Street Fighter II - The World Warrior region: SNSP-S2-FAH revision: SPAL-S2-0 board: SHVC-1A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 54ac1f0c99f1521e4c390f43af5da2138ec0526a97912790bdb53f9ab1b10b63 title: Street Fighter II Turbo: Hyper Fighting name: Street Fighter II Turbo - Hyper Fighting region: SNSP-TI-FAH revision: SPAL-TI-1 board: SHVC-BJ0N-01 memory type: ROM size: 0x280000 content: Program game sha256: abe8db202f9bd12d845a4c7ecb97d85fb149d7f17a608b3eae015d92f52f2c04 title: Stunt Race FX name: Stunt Race FX region: SNSP-CQ-FAH revision: SPAL-CQ-0 board: SHVC-1CA6B-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x10000 content: Save oscillator frequency: 21440000 game sha256: 2b097fb72be6aff2030a488df87a349667eb204c2281fb0a2bb7eeafca33d5ed title: Super Hockey name: Super Hockey region: SNSP-NH-FAH revision: SFRA-NH-0 board: SHVC-1A1M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 9760fb407282d91005044fb08f9c15dc3e0ae65063a02eedfbbd285566501fd0 title: Super Mario All-Stars name: Super Mario All-Stars region: SNSP-4M-FAH revision: SPAL-4M-0 board: SHVC-1A3B-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 12d04359329bd646fc65c62db6121b4a7e4ece68556d68252e81ced421069f4c title: Super Mario Kart name: Super Mario Kart region: SNSP-MK-FAH revision: SPAL-MK-0 board: SHVC-1K1B-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 5cc54b1e5c8d3c7701a5e20514145c3b36f15f26fe0a4fe6d2e43677e4b4eda9 title: Super Mario World name: Super Mario World region: SNSP-MW-FAH revision: SPAL-MW-1 board: SHVC-1A1B-06 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 824f07e93c9ad38fe408af561e8979e3c0211f0c6c98aeb6e6bc85cd6f9edc91 title: Super Mario World 2: Yoshi's Island name: Super Mario World 2 - Yoshi's Island region: SNSP-YI-FAH revision: SPAL-YI-1 board: SHVC-1CB5B-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save oscillator frequency: 21440000 game sha256: 640acb63dae038ad6f0ae65e103416f5a1f84d4a37ddaeeab5046122def774d5 title: Super Metroid name: Super Metroid region: SNSP-RI-FAH revision: SPAL-RI-0 board: SHVC-BA3M-10 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 71de4dec6a8e8be685627b6e929317f7cefb836997059bbd3b438ccc07a60044 title: Tintin: Le Temple du Soleil name: Tintin - Le Temple du Soleil region: SNSP-A2VP-FAH revision: SPAL-A2VP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: da8b8bccebf51b70213adecda37387d1bdb55aeb7bc0805bb1be1cd9b514daf6 title: Tintin au Tibet name: Tintin au Tibet region: SNSP-AT6P-FAH revision: SPAL-AT6P-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: 5a9103b04b9246f63af9018cbbd7934c6b79076dd9b0062887bd16077cd37c81 title: Val d'Isère Championship name: Val d'Isere Championship region: SNSP-8V-FAH revision: SPAL-8V-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program //Super Nintendo (FRA) database revision: 2021-03-04 game sha256: 65df600780021f13ced52e7fbc507b7b2e6491b2c5c25fe78d0515dcbe669403 title: Aladdin name: Aladdin region: SNSP-RJ-FRA revision: SFRA-RJ-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 7baaa65ced8fed14e161615e1fffff971f10be4b723523b4a7302891db02ba09 title: Blanco World Class Rugby name: Blanco World Class Rugby region: SNSP-WY-FRA revision: SFRA-WY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: dd920a8f29dde8712a246a56d28ac0825d15c041d7f77f97dbeb37680751ce68 title: Dragon Ball Z: La Légende Saien name: Dragon Ball Z - La Legende Saien region: SNSP-EF-FRA revision: SFRA-EF-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: e135511707c68c16d07b656f63e2b9dc42f436a37b0c85a949fc9e75e1111b34 title: Dragon Ball Z: Super Butouden name: Dragon Ball Z - Super Butouden region: SNSP-Z2-FRA revision: SFRA-Z2-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 663116d015cad3398644608ca6f2506071ab23d38b03b4890e1a6caecb1a55aa title: Dragon Ball Z: Ultime Menace name: Dragon Ball Z - Ultime Menace region: SNSP-AZ4F-FRA revision: SPAL-AZ4F-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a97a5ffdef892d7574e5cb807ec657059fd65490186feae975079cd11baa2df7 title: Goof Troop name: Goof Troop region: SNSP-G6-FRA revision: SFRA-G6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: b2a44f5bb49f6a033e5c82f05356246f5918cacf6f026b88cab5a0b410659b01 title: Illusion of Time name: Illusion of Time region: SNSP-JG-FRA revision: SFRA-JG-0 board: SHVC-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 8dc982c6dd0dfd094b74e4af94a2b10ddc51d334f7f0fa77a9f70917fa324e84 title: Jimmy Connors Pro Tennis Tour name: Jimmy Connors Pro Tennis Tour region: SNSP-JC-FRA revision: SFRA-JC-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 7ba2709cffa654f73b3b1364c13d6a5b595b820629102fe3d51c10bca30d0e4e title: Jurassic Park name: Jurassic Park region: SNSP-J8-FRA revision: SFRA-J8-0 board: SHVC-2A0N-01 memory type: ROM size: 0x200000 content: Program game sha256: 29a0d5812ccbb4b11bdb55d8f751a2a797b4110bf402ca8ba15eb2bf85db7b39 title: The Legend of Zelda: A Link to the Past name: Legend of Zelda, The - A Link to the Past region: SNSP-ZL-FRA revision: SFRA-ZL-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 6d37b2ed794b2f3e5f3d28490ffe89a0ff3c8a0cfc0418bd2aa8e0c66d4868ff title: Le Livre de la Jungle name: Livre de la Jungle, Le region: SNSP-7K-FRA revision: SPAL-7K-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 18f5666860c36fabebc909d262e234bb0bf51a87b55945c134118a4c36b49b52 title: Mario is Missing! name: Mario is Missing! region: SNSP-MU-FRA revision: SFRA-MU-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 600df7da79c95e14c1b9e6e54e0b3a061d079831d015ef6f31bc3772c1d0efc6 title: MechWarrior name: MechWarrior region: SNSP-WM-FRA revision: SFRA-WM-0 board: SHVC-1A1M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 1432590492b63d7103caa715e10e3c3ebbc77b63b6472ee9dee0e5afda311551 title: Mystic Quest Legend name: Mystic Quest Legend region: SNSP-MQ-FRA revision: SFRA-MQ-0 board: SHVC-1A3M-20 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a4621118ef174d2c8a9ffe934e31ff3a00f66a3aaa13340983eec43625a773f6 title: Pac-Man 2: The New Adventures name: Pac-Man 2 - The New Adventures region: SNSP-25-FRA revision: SFRA-25-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: febcb3325240293cc82b4038630b89bbd936f092cb172107eb82452a5555859e title: Ranma ½ name: Ranma Half region: SNSP-R2-FRA revision: SFRA-R2-0 board: SHVC-2J0N-01 memory type: ROM size: 0x180000 content: Program game sha256: 896e09a0d24bfec0412aa75d121063b015153a754ed542f7db7d66366b555de4 title: Le Roi Lion name: Roi Lion, Le region: SNSP-ALKP-FRA revision: SPAL-ALKP-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 0aa16d6b588ba05ab00936201e68a694746fc5e1b2e4f2dbf7cda09265a81379 title: Sailor Moon name: Sailor Moon region: SNSP-AE-FRA revision: SFRA-AE-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: b730adcbb34a19f8fd1c2abe27455cc3256329a9b8a021291e3009ea33004127 title: Secret of Mana name: Secret of Mana region: SNSP-K2-FRA revision: SFRA-K2-1 board: SHVC-1J3M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: f73e6da9e979c839c7c22ec487bea6667d3e65e7d8f9fcc97a2bcdeb4487cddf title: SimCity name: SimCity region: SNSP-SC-FRA revision: SFRA-SC-0 board: SHVC-1A5M-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 1f226553ba05fe738d085a88154469bbc9f9058f7dfc320a327259d84ae5f393 title: Soul Blazer name: Soul Blazer region: SNSP-SO-FRA revision: SFRA-SO-0 board: SHVC-1J3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 5d0a234a2fcb343d169206d9d7d578507c44f800ead9cc9ccfa0b1d4cb1cc9e5 title: Terranigma name: Terranigma region: SNSP-AQTF-FRA revision: SPAL-AQTF-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save //Super Nintendo (FRG) database revision: 2021-03-04 game sha256: f415cafaaac4d5fe062b61be35e64ee6b5e8b925f12b9c82777b4566d31de8f4 title: Choplifter III name: Choplifter III region: SNSP-3C-FRG revision: SPAL-3C-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 5e1cce5ccedb20eff9d188eca445e54bd413db63570fd281f76b3ab56abffd82 title: Claymates name: Claymates region: SNSP-Y5-FRG revision: SPAL-Y5-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: ddad4a3708b8cf760e520b784f42d7085154b0699f3824b8d722512ccab687cb title: Killer Instinct name: Killer Instinct region: SNSP-AKLP-FRG revision: SPAL-AKLP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program //Super Nintendo (GPS) database revision: 2021-03-04 game sha256: 0d4c05f75c95d5b8c0fc00e61027ce3fda2dd288fcf6695656232176fce7843e title: Super Hockey name: Super Hockey region: SNSP-NH-GPS revision: SPAL-NH-0 board: SHVC-1A1M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save //Super Nintendo (HOL) database revision: 2021-03-04 game sha256: dc8b3144329a23459bfcce93c89e0e561d133709aca6bfc74f9e0755f1a04b91 title: Lufia name: Lufia region: SNSP-ANIH-HOL revision: SPAL-ANIH-0 board: SHVC-1A3M-30 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save //Super Nintendo (ITA) database revision: 2021-03-04 game sha256: deab7aad7c168423e43eae14e9e31efa29c7341ab84f936be508911ce508b372 title: MechWarrior name: MechWarrior region: SNSP-WM-ITA revision: SITA-WM-0 board: SHVC-1A1M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: aafbae4c2a7a5a35c81a183df0470027b4b5690f836592af21c15af6b259328d title: Super Strike Gunner name: Super Strike Gunner region: SNSP-SG-ITA revision: SPAL-SG-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program //Super Nintendo (LTN) database revision: 2021-03-04 game sha256: e678a29a93111cf2016c487ba9977b14de8f719040651a42c74bd74eea2d0d81 title: The Death and Return of Superman name: Death and Return of Superman, The region: SNS-9D-LTN revision: SNS-9D-1 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program //Super Nintendo (NOE) database revision: 2021-03-04 game sha256: b342d12d71729edebc1911725ea23d58c1a397b27253a5c8cd96cfb58af242a9 title: Addams Family Values name: Addams Family Values region: SNSP-VY-NOE revision: SPAL-VY-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 475c601df7384621539ebcf2586a50720cc8de5d089b71fc65ff3f605cff7c8f title: The Addams Family name: Addams Family, The region: SNSP-AF-NOE revision: SPAL-AF-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 12c00475e5d881c26fbdce025d05ca32d4f5534bfa441d9887624a843df74222 title: Aero the Acro-Bat name: Aero the Acro-Bat region: SNSP-XB-NOE revision: SPAL-XB-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a4b1e125b421c5a58e2fd73edc4d58b31d7a596c07dee263c565f00ee712223f title: Alfred Chicken name: Alfred Chicken region: SNSP-8A-NOE revision: SPAL-8A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b2df16101a2daa0f718853be92e3cf5d88f8e8843d04962e4b403d13769c1119 title: Alien vs. Predator name: Alien vs. Predator region: SNSP-AP-NOE revision: SPAL-AP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: daa9a6a3872f252d74d7112094b6c97409fc166dae564e032b5158d12443b68c title: An American Tail: Fievel Goes West name: American Tail, An - Fievel Goes West region: SNSP-9W-NOE revision: SPAL-9W-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 85b88af9b1f2071804e27c3ff9d42da6b26417c26b6f8a9e878733b8c35724ab title: Another World name: Another World region: SNSP-TW-NOE revision: SPAL-TW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d54d2703e474d7f469766d2d095ffcbbcab893e3fe58bbbcc57e24082a44bb40 title: Asterix name: Asterix region: SNSP-XE-NOE revision: SPAL-XE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: bb81d1730222c518084d06c5ce456ee860d5ccb6a410f14a73e68971305bdd12 title: Axelay name: Axelay region: SNSP-AX-NOE revision: SPAL-AX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ffd6668607ee279d79ef3f2b35713b99f8b046a53c608a82df9d37ef39bb079b title: Batman Returns name: Batman Returns region: SNSP-BJ-NOE revision: SPAL-BJ-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 716214f0b17233021f8ee07500530947655c4c871cd041290adb204523984821 title: Battletoads in Battlemaniacs name: Battletoads in Battlemaniacs region: SNSP-NX-NOE revision: SPAL-NX-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 13cd21706cbb02536714c9f0a4d14b37d59a9161abe155e043fd74ba4d5dea15 title: Beethoven: The Ultimate Canine Caper! name: Beethoven - The Ultimate Canine Caper! region: SNSP-2V-NOE revision: SPAL-2V-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 08e02381cf59bdb3ad4d561587c8ccd001c722c7731705a9d84b39cb0337ca53 title: Blackhawk name: Blackhawk region: SNSP-6Z-NOE revision: SPAL-6Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 34221406999172e342b9442e30d12c467fbcd9afa86bedb5ec5ddb5ebc2ee8a1 title: The Blues Brothers name: Blues Brothers, The region: SNSP-B6-NOE revision: SPAL-B6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 5a054466ffe0694599498b9d94427b25d4f4d55ab4fc1542335f69025e817a3f title: B.O.B. name: BOB region: SNSP-B4-NOE revision: SPAL-B4-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6df9b702c65183ef13dd2a66d1bc95e7ec1452e088e9c19a0e3beb9ef952e939 title: Brawl Brothers: Rival Turf! 2 name: Brawl Brothers - Rival Turf! 2 region: SNSP-RE-NOE revision: SPAL-RE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 0a49023824d812c64cd262db6e85ce9900c88af7ac6dab3e47078ab0dd1e546c title: Bubsy in Claws Encounters of the Furred Kind name: Bubsy in Claws Encounters of the Furred Kind region: SNSP-YN-NOE revision: SPAL-YN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 6795e22c6ddcbfa48de1e5b1b22ad72890214533a12e59763cb4b8d5b2535aef title: Bugs Bunny: Rabbit Rampage name: Bugs Bunny - Rabbit Rampage region: SNSP-R7-NOE revision: SPAL-R7-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: a20bdbdafccee20bf17eae28fdb0b79fced5b53f90a1cad259461a37903f9ad1 title: California Games II name: California Games II region: SNSP-C2-NOE revision: SPAL-C2-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: a2e3a81f7dfbd50423bebfce8c2f6b85d58f7336810ee6c813fb74ac7d4427a3 title: Captain America and The Avengers name: Captain America and The Avengers region: SNSP-6A-NOE revision: SPAL-6A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a60886ea6459861bb8d149023a975c4e83c172847264756840ca0754eb9f1f15 title: Championship Pool name: Championship Pool region: SNSP-5P-NOE revision: SPAL-5P-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: fd7e471b7855614f1a4782c2194e6d268406c694d0f674350317a3efed26c4aa title: The Chaos Engine name: Chaos Engine, The region: SNSP-UD-NOE revision: SPAL-UD-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 9f072794e9f379e35dabd50a714e08b98deab61e3dd97ef982d7504b85b28d24 title: The Chessmaster name: Chessmaster, The region: SNSP-CH-NOE revision: SPAL-CH-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 9ae517aef04a7157f9e8e13c874a9ac5f452d02ad6343e03fed9cce0aa515171 title: Chuck Rock name: Chuck Rock region: SNSP-CK-NOE revision: SPAL-CK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: f000606a504c7a51617c0e32865924a68bf899170aea2647cf403fede8491c0e title: Clay Fighter name: Clay Fighter region: SNSP-8C-NOE revision: SPAL-8C-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 1ee967210f980b76b6c810a8b130049405183d20e4c308b17c7ef982912fc628 title: Cliffhanger name: Cliffhanger region: SNSP-6C-NOE revision: SPAL-6C-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: e0c51ca00f22716531cb9138cfe8d5af4680cde1c95bfbfcd52c35f246763e65 title: Congo's Caper name: Congo's Caper region: SNSP-J2-NOE revision: SPAL-J2-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 81220ffa1f167d9b5b909b0315a6734fae8957b8d708b3887fb0e9105f816edb title: Cool Spot name: Cool Spot region: SNSP-C8-NOE revision: SPAL-C8-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 5d42cef66c529939b6038f4ecaf1aeb06acda2dabbf7bcf4e7203f3cb6b43f7a title: Cybernator name: Cybernator region: SNSP-AV-NOE revision: SPAL-AV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a9ababea552f9d7f756e99bfc0f7f88b30898297c762d35d603837475e713f86 title: Daffy Duck: The Marvin Missions name: Daffy Duck - The Marvin Missions region: SNSP-YF-NOE revision: SPAL-YF-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6ce516e3d1a7068cc9732cd3517cfd1e92179f2340c63a244625a1ff49815085 title: Daze Before Christmas name: Daze Before Christmas region: SNSP-ADCP-NOE revision: SPAL-ADCP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 3e4e16a5d47197a2f7bc724e3a6875b682f738800c7377ea655a6d7f54156a0e title: Dennis name: Dennis region: SNSP-4D-NOE revision: SPAL-4D-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a7612dbb5fd122090d4fcbffec81d295c0911ff5c83fa865c441c7b3996fcc92 title: DinoCity name: DinoCity region: SNSP-DW-NOE revision: SPAL-DW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 984107f2dbccbcaec1f7e74b62af82785918438144221bd0228fa36419a11ed8 title: Dragon's Lair name: Dragon's Lair region: SNSP-DI-NOE revision: SPAL-DI-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: dddacae010766c1201f50810fcf15dff7c0f6d41ac1a1004c8eea4873a71db12 title: F-Zero name: F-Zero region: SNSP-FZ-NOE revision: SPAL-FZ-0 board: SHVC-1A1B-06 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 450df78c9b7c92e9f8ce5c2ee0e1dbf939031c1e4f9e10c52c8d8f874364d1d6 title: Fatal Fury name: Fatal Fury region: SNSP-GN-NOE revision: SPAL-GN-0 board: SHVC-2A0N-10 memory type: ROM size: 0x180000 content: Program game sha256: c7abc997e0f685a726dacd82e2734f557028490c1c9b8e575bc6cbc18de243a4 title: Final Fight 2 name: Final Fight 2 region: SNSP-F2-NOE revision: SPAL-F2-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: b7ab3afb4f63b95c2ceafcaf03fd691fe9fc53b173d7fd22a8a111b40f8713b3 title: First Samurai name: First Samurai region: SNSP-FK-NOE revision: SPAL-FK-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 6cce3d0c8b2eec350475e3c274d7ad80c9a208ba101d9cf9ac637c5d09760ab7 title: Flashback name: Flashback region: SNSP-5F-NOE revision: SPAL-5F-0 board: SHVC-2J0N-01 memory type: ROM size: 0x200000 content: Program game sha256: c7935e5e147a8c1b2646fbb7776cf73198967bd053f2a58f4f01e9a3a5c2911a title: The Flintstones: The Treasure of Sierra Madrock name: Flintstones, The - The Treasure of Sierra Madrock region: SNSP-9F-NOE revision: SPAL-9F-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6d0095422fe380202e62ed5b34f038681f777dcd9a943cf3534645068e118fb2 title: George Foreman's KO Boxing name: George Foreman's KO Boxing region: SNSP-GK-NOE revision: SPAL-GK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ddda02bc9fff44c702ce6b2d043c8c2dc520c568a1df221de0bde24e16e1618d title: Harley's Humongous Adventure name: Harley's Humongous Adventure region: SNSP-HV-NOE revision: SPAL-HV-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 320c9a88c2fa3221d8e8d2dc8eaae9d6143753b0b881166b5376bcd50031e1da title: Home Alone name: Home Alone region: SNSP-HA-NOE revision: SPAL-HA-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: ca2d67f208e3dc7aaeea88b60d7008b6e00b525bf935c259b642ad5cad783bb1 title: Home Alone 2: Lost in New York name: Home Alone 2 - Lost in New York region: SNSP-HN-NOE revision: SPAL-HN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: e4b315f714529a9ba593ffa16ac7456db178294405e26811313c08177969a05f title: Hook name: Hook region: SNSP-HO-NOE revision: SPAL-HO-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a9dffa5d97855733f14b1b888bc478e8e0630107812b7b3df729c499e0e0734f title: Hyper Zone name: Hyper Zone region: SNSP-HZ-NOE revision: SPAL-HZ-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 039beb46f81ad9e0844ecec420cc78bfdbf2b1ae940adb4fdf08dbf1b55ac7ed title: Illusion of Time name: Illusion of Time region: SNSP-JG-NOE revision: SFRG-JG-1 board: SHVC-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 42bc8987dda4f8e4a1d135f3327ef89fb51b9bea97a79dba0060f6fdf9f4c0ba title: The Incredible Crash Dummies name: Incredible Crash Dummies, The region: SNSP-C7-NOE revision: SPAL-C7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 2c08b32ecbba97bea0fbb569186294f9ad738a301d90245d9729046ba0ecabab title: James Bond Jr. name: James Bond Jr. region: SNSP-JJ-NOE revision: SPAL-JJ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 09299d142e485ba2fcdbd9b3a6d1a5acfbc7fc70b06cf22be28479686419a7a9 title: Jimmy Connors Pro Tennis Tour name: Jimmy Connors Pro Tennis Tour region: SNSP-JC-NOE revision: SFRG-JC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 74c55ea3c9733bf263628a260df7492fc840d7de1c3fceebb7bcf6d99a8c81d6 title: Joe & Mac: Caveman Ninja name: Joe & Mac - Caveman Ninja region: SNSP-JT-NOE revision: SPAL-JT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 3fa82117fe88b0b5398995b68624f3027184259456123f2a61d55f668326c769 title: Kevin Keegan's Player Manager name: Kevin Keegan's Player Manager region: SNSP-PJ-NOE revision: SFRG-PJ-0 board: SHVC-1A3M-10 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 53ccf6970d4577608893f38633cc0609ba0eec1b393f891df31e2e5c2f903a9c title: Kid Klown in Crazy Chase name: Kid Klown in Crazy Chase region: SNSP-ZI-NOE revision: SPAL-ZI-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 11a6c5de89b25836c8b66d3e3077bacdcaf52faab5a0f7fe2bc751aa85a8dd68 title: King of the Monsters name: King of the Monsters region: SNSP-KM-NOE revision: SPAL-KM-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 9bc7afdb9ffaca90db4390697e80a75bf4889cd8529e21c28ad42c41171e2630 title: Knights of the Round name: Knights of the Round region: SNSP-LO-NOE revision: SPAL-LO-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 9ed408bb30b32c0a86605ea80e2b431563a33d54354a4b68e8b7d4eedde25295 title: Last Action Hero name: Last Action Hero region: SNSP-L5-NOE revision: SPAL-L5-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4a7444780a750f97943d974589586d4cf89d8957e396cc5a7ad565cd4c1b70a7 title: The Legend of the Mystical Ninja name: Legend of the Mystical Ninja, The region: SNSP-GG-NOE revision: SFRG-GG-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 5ec66298ddb579b35cc5d3df5bfeeee05bdf71347565c7c5f5f3869bf4f1e469 title: Looney Tunes Basketball name: Looney Tunes Basketball region: SNSP-ALTP-NOE revision: SPAL-ALTP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 0ecdd9d6fc78c0bdbc2f684c682ec834cda1148ed2e675cc783a95c601000d3b title: Lothar Matthäus Super Soccer name: Lothar Matthaus Super Soccer region: SNSP-AOMD-NOE revision: SPAL-AOMD-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 8510491f99400115ccf33570269bc4e484fb56370f7ac36f12e73eec19d342da title: Lucky Luke name: Lucky Luke region: SNSP-ALYP-NOE revision: SPAL-ALYP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: be9c42913fee053a8d854054a27a0fb4d1cf6c092b46c7291d2743e94204a323 title: Magic Boy name: Magic Boy region: SNSP-YG-NOE revision: SPAL-YG-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 8f6920549b28a065a030fbdbe2ea2e9d966d42ab5ac1ef0e9dabc99875a51df2 title: MechWarrior name: MechWarrior region: SNSP-WM-NOE revision: SFRG-WM-0 board: SHVC-1A1M-10 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 9283ac563e3d8244fb103db13256c669063e67be5eaf6e82b94527f079c9d8a3 title: Michael Jordan: Chaos in the Windy City name: Michael Jordan - Chaos in the Windy City region: SNSP-AWCP-NOE revision: SPAL-AWCP-0 board: SHVC-2J0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 4703cb071611874b0d9e9555f102278e33dd494202875dc994a232029148bf67 title: Mortal Kombat name: Mortal Kombat region: SNSP-KX-NOE revision: SPAL-KX-0 board: SHVC-2A0N-01 memory type: ROM size: 0x200000 content: Program game sha256: 41803805d28cad8873029c4b648cc6dd7503b7a33afa8ff584434a970dc9d8c1 title: Mr. Nutz name: Mr. Nutz region: SNSP-N8-NOE revision: SPAL-N8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 558b437e10915c2ca79f376634fa4623c87efdb9292a5878b886c7a6fbef61e2 title: Parodius name: Parodius region: SNSP-PD-NOE revision: SPAL-PD-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b8fcbad3c712a2ff69a5f9bb9fbe4c4284f91bbe96fe849275a8bcfcb497d204 title: Phalanx: The Enforce Fighter A-144 name: Phalanx - The Enforce Fighter A-144 region: SNSP-PH-NOE revision: SPAL-PH-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ec6f444dcab84d251c12eb4f47aeac23ed997bf0416c5a537bac6bb9d40b725d title: The Pirates of Dark Water name: Pirates of Dark Water, The region: SNSP-8P-NOE revision: SPAL-8P-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 9932ed1419bc606ea19337b74a8ef17adaa6b31be5fca8d2b6b266b3f6383e39 title: Revolution X name: Revolution X region: SNSP-AXRD-NOE revision: SPAL-AXRD-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: b2717bec03b627c4f02bd6dd77cfa790ea4eab91f0f47626ea452c50369d35d4 title: Rival Turf name: Rival Turf region: SNSP-RB-NOE revision: SPAL-RB-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a0888a9c02b0ca0c9e95246c9ea60407f7f9c4dfde1ff1c15b7f6d5bd4ea5b85 title: Samurai Shodown name: Samurai Shodown region: SNSP-A7SP-NOE revision: SPAL-A7SP-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x400000 content: Program game sha256: c341668847170d36fa5cfb720568b0b1ecbb24fc426a821f665f1d3853a46a6d title: Secret of Evermore name: Secret of Evermore region: SNSP-AEOD-NOE revision: SPAL-AEOD-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 1444ab11f96f7750db992e9a4160532b27abede8a7054128c09f448300c91ebf title: Secret of Mana name: Secret of Mana region: SNSP-K2-NOE revision: SFRG-K2-0 board: SHVC-1J3M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: bc819454a2082f93b03ad3dc11795eb8cd4ccec72a41560462a91b6f0edd432f title: Starwing name: Starwing region: SNSP-FO-NOE revision: SFRG-FO-0 board: SHVC-1C0N memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: e4df822294a12919b35cd73a1ca24105418ca2c2bc5e08f887fe1d10b3e4f200 title: Starwing Competition name: Starwing Competition region: SNSP-FU-NOE revision: SFRG-FU-0 board: SHVC-1C0N memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: 35c1d6623748f66e254843cf340121e3e268a8301951f35c7ba3ef666bc293bf title: Street Fighter II: The World Warrior name: Street Fighter II - The World Warrior region: SNSP-S2-NOE revision: SPAL-S2-0 board: SHVC-1A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 54ac1f0c99f1521e4c390f43af5da2138ec0526a97912790bdb53f9ab1b10b63 title: Street Fighter II Turbo: Hyper Fighting name: Street Fighter II Turbo - Hyper Fighting region: SNSP-TI-NOE revision: SPAL-TI-1 board: SHVC-BJ0N-01 memory type: ROM size: 0x280000 content: Program game sha256: 30291b60cb7bb0bf92dc48b922daff71f6bc4b29200bef5540a522bcb0a64cee title: Super Air Diver name: Super Air Diver region: SNSP-AZ-NOE revision: SPAL-AZ-0 board: SHVC-1K0N-01 memory type: ROM size: 0x80000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 4dcf9213cf22c9e28e58b42ca7808224399d89b9b33f1fd592be6866db42755d title: Super Battleship name: Super Battleship region: SNSP-8B-NOE revision: SPAL-8B-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 3b8e4da1435a548927a120a827eac01fef7d3636f3f763923063e5613adad42f title: Super Castlevania IV name: Super Castlevania IV region: SNSP-AD-NOE revision: SPAL-AD-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: bbedc3b9263993c1294793895b5901973fbb159157db4c6d1b79ee8245007791 title: Super Double Dragon name: Super Double Dragon region: SNSP-WD-NOE revision: SPAL-WD-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 4d7fc331a811b8dc630b469262fd6f45e289243cef83101f32038158967d1b28 title: Super Game Boy name: Super Game Boy region: SNSP-A-SG-NOE revision: SYS-SGB-2 board: SGB-R-10 memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x100 content: Boot manufacturer: Nintendo architecture: SM83 identifier: SGB1 game sha256: 4c5b426ea5950b66098ba4377f6a86d091d7af2f4783895086a621aa98811596 title: Super Ice Hockey name: Super Ice Hockey region: SNSP-OX-NOE revision: SPAL-OX-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 2b1ca521975c3010650fd2055be8c6b964ea4eff765ad03198ac71995285fee7 title: Super Probotector: Alien Rebels name: Super Probotector - Alien Rebels region: SNSP-CS-NOE revision: SPAL-CS-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 7c7e90fb7c762769219234baf7b5fa6bf574fff7dc63b7134d49ec7c8b38ea7e title: Super R-Type name: Super R-Type region: SNSP-SR-NOE revision: SPAL-SR-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 70c07b2c7bdff9353d3849e2d4bde2bfa631b29e0743862635c2212ac551cb27 title: Super SWIV name: Super SWIV region: SNSP-WV-NOE revision: SPAL-WV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 1bc2b230d6bb6091412fcc9b957192d9a729496f9f2123449d968afb088fc525 title: Super Turrican name: Super Turrican region: SNSP-TU-NOE revision: SPAL-TU-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 454dbc5383f36e1d611fcc76a23162ae03e269c76c98919b1e7505ea4c7c2402 title: Super Turrican 2 name: Super Turrican 2 region: SNSP-A2TP-NOE revision: SPAL-A2TP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: eea3584fe574b1e7ba6c559ef32f86a990f54c7fa36b25242656b4c6dc18e6f0 title: Syndicate name: Syndicate region: SNSP-AFYP-NOE revision: SPAL-AFYP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 3e26fbb8004635f4128f8e989d96f89fddc0a2cf85a8ede6b93ae6648bd6a717 title: Teenage Mutant Hero Turtles V: Tournament Fighters name: Teenage Mutant Hero Turtles V - Tournament Fighters region: SNSP-8F-NOE revision: SPAL-8F-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: d6968f79ec66cec751dcf54a1fd0c7321a8e1b69722d81b10d1969a8415412a6 title: Terminator 2: The Arcade Game name: Terminator 2 - The Arcade Game region: SNSP-XV-NOE revision: SPAL-XV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 2465335e0a16e65d41d42067f53d97ce0929d003ef41ec605d160cfb30c20df7 title: Terranigma name: Terranigma region: SNSP-AQTD-NOE revision: SPAL-AQTD-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 613cd1a31eaded18648168bd7453a57830ca9a6f3c10de5154625436fbd49556 title: Terranigma name: Terranigma region: SNSP-AQTD-NOE revision: SPAL-AQTD-1 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3c94c600fefcf34e5d251885c209d6b61b40de119589b67badec38deeffb46f9 title: Tiny Toon Adventures: Buster Busts Loose! name: Tiny Toon Adventures - Buster Busts Loose! region: SNSP-TA-NOE revision: SPAL-TA-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 94e6fe78bb1a1d89ccfd74ad92e2a489f8e2e257d6dfe62404155741763f962f title: True Lies name: True Lies region: SNSP-ATLD-NOE revision: SPAL-ATLD-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a1105819d48c04d680c8292bbfa9abbce05224f1bc231afd66af43b7e0a1fd4e title: Unirally name: Unirally region: SNSP-4L-NOE revision: SPAL-4L-0 board: SHVC-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 847c9189580fc92e785c8124cbde4f1d72be75e1941b35021f6b159e0470c1b0 title: WeaponLord name: WeaponLord region: SNSP-ADWP-NOE revision: SPAL-AWDP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 8315596b4fe517b970d004336c86ed2bc74e167692ffaa51c529a41e2197519e title: Winter Olympics: Lillehammer '94 name: Winter Olympics - Lillehammer '94 region: SNSP-W4-NOE revision: SPAL-W4-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 9eb2f90cae9958ae7f387d797cb28797b5ccaf520c41d4c5ca9494c74a87c422 title: World Heroes name: World Heroes region: SNSP-WZ-NOE revision: SPAL-WZ-0 board: SHVC-1J0N-01 memory type: ROM size: 0x200000 content: Program game sha256: 92dd66642e86b9b4156352a583bd479c200c342820a8b6cf906cca6bb923cf25 title: Worms name: Worms region: SNSP-AW3P-NOE revision: SPAL-AW3P-0 board: SHVC-1A0N-30 memory type: ROM size: 0x1e0000 content: Program game sha256: 24aad9739f8ffe9319f20d4fa1c4f58108e73843d20d65296926e00ba9c456be title: Zombies name: Zombies region: SNSP-ZA-NOE revision: SPAL-ZA-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program //Super Nintendo (SCN) database revision: 2021-03-04 game sha256: beb379ba48f63561c0f939ecd8f623ec06c1b5e06976eef9887e5c62f3df2766 title: Gods name: Gods region: SNSP-GZ-SCN revision: SPAL-GZ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 896e09a0d24bfec0412aa75d121063b015153a754ed542f7db7d66366b555de4 title: The Lion King name: Lion King, The region: SNSP-ALKP-SCN revision: SPAL-ALKP-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 4fb9eb8fa4d9c3a0b6c24bac5b0a0b0f079f083f5e6dfa937a161c8f4bcde853 title: Shadowrun name: Shadowrun region: SNSP-WR-SCN revision: SSWE-WR-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e15247495311e91db9431d61777a264d4b42def011291d512b273fc8acd1cbfa title: Soul Blazer name: Soul Blazer region: SNSP-SO-SCN revision: SPAL-SO-0 board: SHVC-1A3B-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 687c4f9a14cc16605f5e92aa0fe33bf083fe8e39ba781676259fadf932480890 title: Tintin i Tibet name: Tintin i Tibet region: SNSP-AT6X-SCN revision: SPAL-AT6X-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: a6297356fb06f1575b432fae463171f53e3b786fd77b841557547a9117fb52fe title: X-Zone name: X-Zone region: SNSP-XZ-SCN revision: SPAL-XZ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program //Super Nintendo (UKV) database revision: 2021-03-04 game sha256: 38e050ac3ffec01031c6dd8ead20676aacec78ebf8d890a3a00d1badaaba3d3b title: The Adventures of Dr. Franken name: Adventures of Dr. Franken, The region: SNSP-6F-UKV revision: SPAL-6F-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 8c5f2f8d45d86b27e48313d136477ba6f30989c93748d800ad6bf82f14ecd4a1 title: Battletoads & Double Dragon name: Battletoads & Double Dragon region: SNSP-UL-UKV revision: SPAL-UL-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0a49023824d812c64cd262db6e85ce9900c88af7ac6dab3e47078ab0dd1e546c title: Bubsy in Claws Encounters of the Furred Kind name: Bubsy in Claws Encounters of the Furred Kind region: SNSP-YN-UKV revision: SPAL-YN-0 board: SHVC-2A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 536f9c2ff7dfdc6e5b51389142151b1c9e9d73f1c2451eafe16d0224d15ad35f title: Desert Fighter name: Desert Fighter region: SNSP-OS-UKV revision: SPAL-OS-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 1c12660c99571692d2fba4ba871a1086b115486697e789f85fb939c55eeec7c7 title: Doom name: Doom region: SNSP-AD8P-UKV revision: SPAL-AD8P-0 board: SHVC-1CB0N7S-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x10000 content: Save volatile oscillator frequency: 21440000 game sha256: 3d4715ce44045fbb27b72c0925020a52b748c9236db1e7782ee62f74615182fc title: Eek! The Cat name: Eek! The Cat region: SNSP-E7-UKV revision: SPAL-E7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: dddacae010766c1201f50810fcf15dff7c0f6d41ac1a1004c8eea4873a71db12 title: F-Zero name: F-Zero region: SNSP-FZ-UKV revision: SPAL-FZ-0 board: SHVC-1A1B-05 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: b0d2439944b6ae85d4ec6f39c91e3c8b9c740a43d077f4d0675dc2c2235204df title: Family Dog name: Family Dog region: SNSP-D8-UKV revision: SPAL-D8-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 7d423c7d5ac4fef6ae608ae87e77608294ef7e51a6f0afff1042ed66a1c639fe title: The Flintstones name: Flintstones, The region: SNSP-AFNP-UKV revision: SPAL-AFNP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: e9e2152411fec3bd10e8cd4587b62717169a25a4cd28f491f8e477b9aae2fcee title: fun 'n games name: Fun & Games region: SNSP-7N-UKV revision: SPAL-7N-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 94b2e68503514afe956cbc8ef4fb2cb93a323761e9b7d205e44e544049a4ae3b title: The Incredible Hulk name: Incredible Hulk, The region: SNSP-8U-UKV revision: SPAL-8U-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9d936f3b0b5bea0b7c4588e65fa147fff1108d0e630337dd75eb16133a55e317 title: International Sensible Soccer: World Champions name: International Sensible Soccer - World Champions region: SNSP-8S-UKV revision: SPAL-8S-1 board: SHVC-1A3M-20 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 975397a09ec1dfa518f1f0a2029ecb74e5b4c1113bf3376de94711672ff4e054 title: James Pond's Crazy Sports name: James Pond's Crazy Sports region: SNSP-JX-UKV revision: SPAL-JX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: f5e74f09c485d58b444ef2b168d041a1d451056b5feb295901974ca73190dbdb title: Jelly Boy name: Jelly Boy region: SNSP-AJBP-UKV revision: SPAL-AJBP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 1be41a3a2d490be97b98f2ab8934d8e8812d7d2596598a7841e3027b23e95261 title: Jurassic Park name: Jurassic Park region: SNSP-J8-UKV revision: SPAL-J8-0 board: SHVC-2A0N-11 memory type: ROM size: 0x200000 content: Program game sha256: ddad4a3708b8cf760e520b784f42d7085154b0699f3824b8d722512ccab687cb title: Killer Instinct name: Killer Instinct region: SNSP-AKLP-UKV revision: SPAL-AKLP-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 6379d7d476a29ae2655e30fc20699772af81abefc903f5816872dd46e4e88242 title: Legend name: Legend region: SNSP-6L-UKV revision: SPAL-6L-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 654183585e88abf965b19570c194f3d69ef209a7f2d32f71881eceaea6a3487e title: The Legend of Zelda: A Link to the Past name: Legend of Zelda, The - A Link to the Past region: SNSP-ZL-UKV revision: SPAL-ZL-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0c4038eb0ee37c0faac6a04928b37b5c2f1047ab59c5345da16de48c92db5021 title: Lethal Enforcers name: Lethal Enforcers region: SNSP-LK-UKV revision: SPAL-LK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 528f9697cdb5b50504aa4f6d6f7882c4997e7141898f9a00a630692b964204eb title: Lethal Weapon name: Lethal Weapon region: SNSP-L3-UKV revision: SPAL-L3-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 1c41bb11c9df5aa8a6ca98caa5215418f37025f7a5e88ff62188b257338af3ab title: Mega Man X name: Mega Man X region: SNSP-RX-UKV revision: SPAL-RX-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: d33f682605b3d6c8a162506ef333a24933ae26a32f10ff8e49fc113bcd189137 title: Mighty Morphin Power Rangers: The Fighting Edition name: Mighty Morphin Power Rangers - The Fighting Edition region: SNSP-A3RP-UKV revision: SPAL-A3RP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: d147bfe392e8c2129fb887379410804d79be426bbffdd01cec7bd2332e03f39e title: Pilotwings name: Pilotwings region: SNSP-PW-UKV revision: SPAL-PW-0 board: SHVC-1B0N-10 memory type: ROM size: 0x80000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1B memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1B memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1B volatile oscillator frequency: 7600000 game sha256: 5702fb6978229e398075cf0d20927b47a5881b572532813557e86b8e9cf63db0 title: Secret of Mana name: Secret of Mana region: SNSP-K2-UKV revision: SPAL-K2-1 board: SHVC-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e95278ec68bf983111a52e38d5e6031c41141858e87e2cb8ef92fdfe17e41a15 title: Sensible Soccer: European Champions name: Sensible Soccer - European Champions region: SNSP-8S-UKV revision: SPAL-8S-0 board: SHVC-1A3M-20 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 21f4b54ed90de7bb0f5f02d64d11f80ba9f2147197b7a3bd09fc7aa1858ba0f5 title: Side Pocket name: Side Pocket region: SNSP-4P-UKV revision: SPAL-4P-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d02f8e6b75f9b9ede20a32b8ec93c06475f18160ced1eb069cd6a3cbbc3cba2e title: Spectre name: Spectre region: SNSP-7Q-UKV revision: SPAL-7Q-0 board: SHVC-1A0N-20 memory type: ROM size: 0xe0000 content: Program game sha256: 8c7a8aa1d16aeef31244b016ac951eab0b9ccd46daea61adbe890e5c5daa29c6 title: Star Trek: The Next Generation - Future's Past name: Star Trek - The Next Generation - Future's Past region: SNSP-XN-UKV revision: SPAL-XN-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 80e7ba7c756c70eedd55ca4548c1965f84f9ef01d3a5ca91a2e5465a6930c49a title: Starwing name: Starwing region: SNSP-FO-UKV revision: SPAL-FO-1 board: SNSP-1C0N5S-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: 2a25bf4c1a4fc64f9312ddf039f5b3e8949054cbaeb4f86d1ccd9ea2bb779643 title: Starwing Competition name: Starwing Competition region: SNSP-FU-UKV revision: SPAL-FU-0 board: SHVC-1C0N memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: b8ee1b5b9deae5c84fa209815515030109cc271b645a18de882aaf1b254cda1f title: Street Fighter II Turbo: Hyper Fighting name: Street Fighter II Turbo - Hyper Fighting region: SNSP-TI-UKV revision: SPAL-TI-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x280000 content: Program game sha256: df43b3a4f511401a4d162ee6e7e3b08485533600dc44a29ee0a829b937b144d4 title: Striker name: Striker region: SNSP-KE-UKV revision: SPAL-KE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: f1a75578e6711716340bb26ea93bf05d5762bc7da21dbc19576fc65de1e885b5 title: Super Aleste name: Super Aleste region: SNSP-AT-UKV revision: SPAL-AT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: e8b1639acd44a536f060d6d8dbcc4ef368279e3e17e1e3862a463d3ebf07ea14 title: Super Battletank 2 name: Super Battletank 2 region: SNSP-2X-UKV revision: SPAL-2X-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 8bc56d4d23638ff592715e089dfd697fe7884a388c5ac95e147973bc2ff71e72 title: Super International Cricket name: Super International Cricket region: SNSP-ACIP-UKV revision: SPAL-ACIP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 9760fb407282d91005044fb08f9c15dc3e0ae65063a02eedfbbd285566501fd0 title: Super Mario All-Stars name: Super Mario All-Stars region: SNSP-4M-UKV revision: SPAL-4M-0 board: SHVC-2A3M-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 12d04359329bd646fc65c62db6121b4a7e4ece68556d68252e81ced421069f4c title: Super Mario Kart name: Super Mario Kart region: SNSP-MK-UKV revision: SPAL-MK-0 board: SHVC-1K1B-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 640acb63dae038ad6f0ae65e103416f5a1f84d4a37ddaeeab5046122def774d5 title: Super Metroid name: Super Metroid region: SNSP-RI-UKV revision: SPAL-RI-0 board: SHVC-BA3M-10 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3438e78d35634d0ed7f58cb395c77da548fb601248725a18365edaed38a565d5 title: Super Punch-Out!! name: Super Punch-Out!! region: SNSP-4Q-UKV revision: SPAL-4Q-0 board: SHVC-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7c7e90fb7c762769219234baf7b5fa6bf574fff7dc63b7134d49ec7c8b38ea7e title: Super R-Type name: Super R-Type region: SNSP-SR-UKV revision: SPAL-SR-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: a52b98da8f65bf2210b7d2e931548c672838fa7e44d852f2e3c6f3cd2ba950d6 title: Super Street Fighter II: The New Challengers name: Super Street Fighter II - The New Challengers region: SNSP-XW-UKV revision: SPAL-XW-0 board: SHVC-BJ0N-20 memory type: ROM size: 0x400000 content: Program game sha256: d92b74678e58360db9b47a7044cedd6c57f191570a5677b1a1bf5e476f92721d title: Terminator 2: Judgment Day name: Terminator 2 - Judgment Day region: SNSP-TP-UKV revision: SPAL-TP-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: c0a7e27131a7d8c9ef52a5227329e6de5846c045a9da1f3f84845e3be8e4efba title: Theme Park name: Theme Park region: SNSP-ATQP-UKV revision: SPAL-ATQP-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: f899b083b29f34bee62cc022262ab4ff6aad9b16423011faff37f2c21a45fd89 title: Total Carnage name: Total Carnage region: SNSP-XC-UKV revision: SPAL-XC-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 717fe462a79c298581423c614f62e22dbf6a33e0bf75e691d96848086869418e title: Tuff E Nuff name: Tuff E Nuff region: SNSP-TE-UKV revision: SPAL-TE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program //Super Nintendo (USA) database revision: 2021-03-04 game sha256: 2ffe8828480f943056fb1ab5c3c84d48a0bf8cbe3ed7c9960b349b59adb07f3b title: 3 Ninjas Kick Back name: 3 Ninjas Kick Back region: SNS-A3NE-USA revision: SNS-A3NE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 4dd631433c867ba920997fd3add2c838b62e70e06e0ef55c53884b8b68b0dd27 title: The 7th Saga name: 7th Saga, The region: SNS-EL-USA revision: SNS-EL-0 board: SHVC-2J3M-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: ce164872c4f5814bce04cf0565edcdb5b7969ae95a3b5cd515cfb626b5cde7b3 title: Aaahh!!! Real Monsters name: Aaahh!!! Real Monsters region: SNS-ANNE-USA revision: SNS-ANNE-0 board: MAXI-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: bb83f982961c33b81fefc1f545e18ab572d1c43cf6c241948544f05a1a71f2ba title: ABC Monday Night Football name: ABC Monday Night Football region: SNS-N5-USA revision: SNS-N5-0 board: SHVC-1A3M-10 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: d07e8802a6d9c777247874e05ec08fce7e0fa1bf122cc1ab9913f7d828e4072b title: ACME Animation Factory name: ACME Animation Factory region: SNS-ACME-USA revision: SNS-ACME-0 board: SHVC-1A5M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: b8055844825653210d252d29a2229f9a3e7e512004e83940620173c57d8723f0 title: ActRaiser name: ActRaiser region: SNS-AR-USA revision: SNS-AR-0 board: SHVC-1A3B-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 71bdd448a30b88725864e55594ebb67a118b1f197a3f9e5dd39dbf23399efa15 title: ActRaiser 2 name: ActRaiser 2 region: SNS-A8-USA revision: SNS-A8-0 board: SHVC-2J0N-01 memory type: ROM size: 0x180000 content: Program game sha256: f59a0a8ed11ea2ba6217b1640e74bab8d8d8161a4585f5ae4a02edd7958ad9a3 title: Addams Family Values name: Addams Family Values region: SNS-VY-USA revision: SNS-VY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: e645310d2406ace85523ed91070ee7ff6aa245217267dacb158ae9fc75109692 title: The Addams Family name: Addams Family, The region: SNS-AF-USA revision: SNS-AF-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: b6957bae7fd97ba681afbf8962fe2138e209649fd88ed9add2d5233178680aaa title: The Addams Family: Pugsley's Scavenger Hunt name: Addams Family, The - Pugsley's Scavenger Hunt region: SNS-AH-USA revision: SNS-AH-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 0a8cd5101f849ccd4e40d55fdc4edce914b2825b69eb76ec31cf53b59719e79e title: Advanced Dungeons & Dragons: Eye of the Beholder name: Advanced Dungeons & Dragons - Eye of the Beholder region: SNS-IB-USA revision: SNS-IB-0 board: SHVC-1A5M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 8083307f3f4b7df9e5bf53d5f25877c2e548f0f677540d4ee62d60ccca3098f8 title: The Adventures of Batman & Robin name: Adventures of Batman & Robin, The region: SNS-ABTE-USA revision: SNS-ABTE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: ecd964ae44e61203bc8759cfc6441365bf0c6e7bae6ad2a0fd553d4c7efab71e title: The Adventures of Dr. Franken name: Adventures of Dr. Franken, The region: SNS-6F-USA revision: SNS-6F-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 670d898bdcf97d7ca3aab6c2dd1641f1270fcc2a070bbd3028ab413aef2b2ecc title: The Adventures of Kid Kleets name: Adventures of Kid Kleets, The region: SNS-YK-USA revision: SNS-YK-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 889beb58d2a48a05a6230cabda14555cb030e2e986c0293bdf396e85af5c6798 title: The Adventures of Mighty Max name: Adventures of Mighty Max, The region: SNS-AMOE-USA revision: SNS-AMOE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b70099186d3774355ac5db370240e370c73f9ce5341f6c805cf9f771374b43ae title: The Adventures of Rocky and Bullwinkle and Friends name: Adventures of Rocky and Bullwinkle and Friends, The region: SNS-RZ-USA revision: SNS-RZ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8049175767eddbc3e21ca5b94ee23fc225f834ccfab4ded30d2e981b0ef73ab6 title: Adventures of Yogi Bear name: Adventures of Yogi Bear region: SNS-Y8-USA revision: SNS-Y8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b737de81315eef8ded7cfd5df6b37aba01d9e6e14566486db7ec83eb0c1aa85e title: Aero Fighters name: Aero Fighters region: SNS-AERE-USA revision: SNS-AERE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 18a553dafd4980cc2869180b05f9fdf6e980bf092cc683e498ec6373c9701c6e title: Aero the Acro-Bat name: Aero the Acro-Bat region: SNS-XB-USA revision: SNS-XB-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: fc5df5db0a96d39d3df651f63993adf0f5cb5a6b92a36211f3a05d460d92c72d title: Aero the Acro-Bat 2 name: Aero the Acro-Bat 2 region: SNS-AE2E-USA revision: SNS-AE2E-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: d5f0fbeed3774bbccbd769698fc4051487a0a5eb699790a8a094451595600f60 title: Aerobiz name: Aerobiz region: SNS-AL-USA revision: SNS-AL-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 6b6921d7aba9ba353e96e39c8d79d24eef1b84eb5c7fa54edaa83d2447dcd954 title: Aerobiz Supersonic name: Aerobiz Supersonic region: SNS-AG-USA revision: SNS-AG-0 board: SHVC-1A3M-21 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 1f5738552c51de25ffe8aa44ff396c1ab238435296f1e8f99f8cf335483c03d5 title: Air Cavalry name: Air Cavalry region: SNS-ACCE-USA revision: SNS-ACCE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 69c5805ad0494703e7d636d3d40d615d33e79bebef9d2cdb4a23b73d44c7b6f9 title: Air Strike Patrol name: Air Strike Patrol region: SNS-4A-USA revision: SNS-4A-0 board: SHVC-1A3M-21 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0099bdb56e4190f81440c8c29395ecc15d78eeabfc38a93dca4773817d6f720f title: Al Unser Jr.'s Road to the Top name: Al Unser Jr.'s Road to the Top region: SNS-AUJE-USA revision: SNS-AUJE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: aa768b8b00123717c8d49f2c6731cdbfd80ab6a54128bae7594e93f45e38a19e title: Aladdin name: Aladdin region: SNS-RJ-USA revision: SNS-RJ-0 board: MAXI-1A0N-30 memory type: ROM size: 0x140000 content: Program game sha256: e637b8241d55ee334a3452888df5e30d72c520dbb55c498db1a984438bab3e55 title: Alien 3 name: Alien 3 region: SNS-A3-USA revision: SNS-A3-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 05eb897d7696555790591c431c9d55a43ff9a1c12162443c17c5fcddfa5eb3c5 title: Alien vs. Predator name: Alien vs. Predator region: SNS-AP-USA revision: SNS-AP-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: dc9cefb4dd50dce2e9d626ac71d4a06306516cba4bc784c90e4a30fe4e7ff4ef title: American Gladiators name: American Gladiators region: SNS-AA-USA revision: SNS-AA-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6931a3eacb7ab3c2f2fb57ba7d59c6da56fe6c7d60484cebec9332e6caca3ae9 title: An American Tail: Fievel Goes West name: American Tail, An - Fievel Goes West region: SNS-9W-USA revision: SNS-9W-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 9abb426bac62e03e4437f5a9a8455c3000042f339125cc60ae29382ae89d8493 title: Andre Agassi Tennis name: Andre Agassi Tennis region: SNS-7A-USA revision: SNS-7A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 626f1fe52b0df0f8ede23f0062cd842321c8dabf14aefdca12e526876ecf383a title: Animaniacs name: Animaniacs region: SNS-ANCE-USA revision: SNS-ANCE-0 board: MJSC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 31569bef662bc438194726967970bf19f504101060763cbd649350362fb6ef2f title: Arcade's Greatest Hits: The Atari Collection 1 name: Arcade's Greatest Hits - The Atari Collection 1 region: SNS-AW7E-USA revision: SNS-AW7E-0 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: aac9d6f2b8408e4bbdc83ebbba755428caf8021fefbfac7220fb4c772abd9944 title: Arcana name: Arcana region: SNS-RF-USA revision: SNS-RF-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0f474dafe5a26f3dea491d18073dd490d2f1f91313a7e91086565510d38d9a09 title: Ardy Light Foot name: Ardy Light Foot region: SNS-A9-USA revision: SNS-A9-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 14d3ece30898587eda20c661a4a55ec595ba6352ca1f0bfc177542aa0eef0039 title: Arkanoid: Doh It Again! name: Arkanoid - Doh It Again! region: SNS-A6-USA revision: SNS-A6-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 55e57c5e012583ff0fafd1aee16b3f8269ee2b34fe10f10b93ba0dde72f2b78d title: Art of Fighting name: Art of Fighting region: SNS-RW-USA revision: SNS-RW-0 board: SHVC-1J0N-01 memory type: ROM size: 0x200000 content: Program game sha256: 2431f8dc067ba27c6c3a846929f3deac6a45aa53a9a9ac20ede8ec5ca6854ea2 title: Axelay name: Axelay region: SNS-AX-USA revision: SNS-AX-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: a3213e40d7abbc25a5b909642433103b06d8f90500c930bf64093ade0329da78 title: Ballz 3D name: Ballz 3D region: SNS-ABZE-USA revision: SNS-ABZE-0 board: SHVC-1K0N-01 memory type: ROM size: 0x100000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1B memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1B memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1B volatile oscillator frequency: 7600000 game sha256: 865919b25a9d241c907bcda18b380e3c704f33f4997ad44559046f0f08c4968b title: Barbie Super Model name: Barbie Super Model region: SNS-8L-USA revision: SNS-8L-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: fe1ad128313b2b9a47f89cf0d95d4c0cc2cb35a817ac5d915ee6c4d98d47d675 title: Barkley Shut Up and Jam! name: Barkley Shut Up and Jam! region: SNS-U5-USA revision: SNS-U5-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: c670e16c076f6d92ba581b78769b604e79ad567c04c647dac557f45a48c3448f title: Bass Masters Classic name: Bass Masters Classic region: SNS-ABAE-USA revision: SNS-ABAE-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: db1ac03cc8b7daaa812da239029bcf999b30b2afe1c03d51f7ae849a796617ea title: Bass Masters Classic: Pro Edition name: Bass Masters Classic - Pro Edition region: SNS-A9BE-USA revision: SNS-A9BE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: e2be173c77bd1957787be36d13334f655e14d32dad99cacb0fd5e5fc65d96fa1 title: Bassin's Black Bass name: Bassin's Black Bass region: SNS-AB2E-USA revision: SNS-AB2E-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e36aaba64be016cabc33a2dcf88913341e2edacc722e2a1ebe04eccda2a5d6e7 title: Batman Forever name: Batman Forever region: SNS-A3BE-USA revision: SNS-A3BE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: f8d5c51f74df33edc827fbf8df7aab70160770ab0a896db6e59438ad9208cc6e title: Batman Returns name: Batman Returns region: SNS-BJ-USA revision: SNS-BJ-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 983022203546e031773db0d1af7552c489187954882843f13ff123f09064c1d3 title: Battle Blaze name: Battle Blaze region: SNS-BZ-USA revision: SNS-BZ-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: d19113964c4d268e986018e256e9358cde9a23a05e6053b54c0f2d950dcdf395 title: Battle Cars name: Battle Cars region: SNS-4B-USA revision: SNS-4B-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 32f42fda0667d9435a2de84c7ce7b067bcbab1164f8f6d837992ad6cfac4f8de title: Battle Clash name: Battle Clash region: SNS-BT-USA revision: SNS-BT-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 6e436020d967d35a0f7ce43e38e83a616b70696ae7d35b37cd56601cfb3822ba title: Battle Grand Prix name: Battle Grand Prix region: SNS-BG-USA revision: SNS-BG-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: c7f0269498d190e4fd0f6f880a148fbe3713cd3a632083bac1e5bd18f8172371 title: Battletoads & Double Dragon name: Battletoads & Double Dragon region: SNS-UL-USA revision: SNS-UL-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: b0dbd4d7e5689c32234e80b0c5362ef67c425ab72d6ddb49d1cb1133ef630ef7 title: Battletoads in Battlemaniacs name: Battletoads in Battlemaniacs region: SNS-NX-USA revision: SNS-NX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0b0f991da7ce4b3c2974d6adf62191ec554db9793c5def14cdfb62b7ae28cc98 title: Bazooka Blitzkrieg name: Bazooka Blitzkrieg region: SNS-BY-USA revision: SNS-BY-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: d7271ca08400bbf5ae165b0aaa6e8a8a1b266f72e6e0ae10aae529732a472f7c title: Beauty and the Beast name: Beauty and the Beast region: SNS-EW-USA revision: SNS-EW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 15d4fc90cb202a9391718cd40b9f0384165aef03018ed932540e8f7c18b397dd title: Beavis and Butt-Head name: Beavis and Butt-Head region: SNS-ABUE-USA revision: SNS-ABUE-0 board: MAXI-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: 4958eda26f2419f473449017c64121caee5e49c480ffa205422e7dd45cd23e31 title: Bebe's Kids name: Bebe's Kids region: SNS-6B-USA revision: SNS-6B-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4d22279e534848012e0f1595468687742ae18cabc3fe44eeef938bc3a4dd08bf title: Beethoven: The Ultimate Canine Caper! name: Beethoven - The Ultimate Canine Caper! region: SNS-2V-USA revision: SNS-2V-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: e4e9beaeeb3e968af772d1c4c9e4c1b4dfdba4e47c0205b458e1ab3a62a96060 title: Best of the Best: Championship Karate name: Best of the Best - Championship Karate region: SNS-BE-USA revision: SNS-BE-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 4cb601168c91fa0608c16a8cf2f292d991c6a5615d51861dee2f9b91c8d6bb19 title: Big Sky Trooper name: Big Sky Trooper region: SNS-AB9E-USA revision: SNS-AB9E-0 board: SHVC-1A1M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 91ba5691dea3cdf103177ae5779110fc372fce8229cf91f263073667e7a8b5b7 title: Biker Mice from Mars name: Biker Mice from Mars region: SNS-ABME-USA revision: SNS-ABME-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6fa6b8a8804ff6544bdedf94339a86ba64ce0b6dbf059605abb1cd6f102d3483 title: Bill Laimbeer's Combat Basketball name: Bill Laimbeer's Combat Basketball region: SNS-CB-USA revision: SNS-CB-0 board: SHVC-1A3B-12 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: ec2d91e238c26a5ddf7067d104b3b3e2eaee89255377e1eb6c4df8f301300e64 title: Bill Walsh College Football name: Bill Walsh College Football region: SNS-7F-USA revision: SNS-7F-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: de1de85ad549a6aaf0431cceb47cbd07e1f6e81f9e16fd62575305e2c1f06240 title: Bio Metal name: Bio Metal region: SNS-BV-USA revision: SNS-BV-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 328c8f57e2ea371f6fd5b8a9834c56e35eb3bfe710502dd80f370739f9ccb7e1 title: Blackthorne name: Blackthorne region: SNS-6Z-USA revision: SNS-6Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0d4e0d134396bd1c7254cdc1da356eb944ca14910b6690f484a75a9c3a8106e7 title: BlaZeon: The Bio-Cyborg Challenge name: BlaZeon - The Bio-Cyborg Challenge region: SNS-BL-USA revision: SNS-BL-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 99f40f06fa4dbeeea4fe67d2de5b4c1bf301bedac1958ba1c239dcaf39b0a998 title: The Blues Brothers name: Blues Brothers, The region: SNS-B6-USA revision: SNS-B6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 9e6ebebcf14609c2a38a5f4409d0c8c859949cded70c5b6fd16fd15d9983d9d3 title: B.O.B. name: BOB region: SNS-B4-USA revision: SNS-B4-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 854d2492d1cb059749bb0904ca5f92a5eeec09167abf84f7cca4023b1819e4f0 title: Bonkers name: Bonkers region: SNS-ABNE-USA revision: SNS-ABNE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8f131182b286bd87f12cf4f00453336538ce690d0e1f0972ac0be98df4d48987 title: Boogerman: A Pick and Flick Adventure name: Boogerman - A Pick and Flick Adventure region: SNS-AB4E-USA revision: SNS-AB4E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: e67940a2106c1507f3a8d38790f263bbbf814578ebf3dbc4e3eb6007d310793c title: Boxing Legends of the Ring name: Boxing Legends of the Ring region: SNS-LL-USA revision: SNS-LL-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: f4666355e7fea434843dc6d5119673bd6c23e69b884aac0b382ff036997e52b5 title: Brain Lord name: Brain Lord region: SNS-3B-USA revision: SNS-3B-0 board: SHVC-2J3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 9885ca148d32c4df6230642bcfa153f7e51b9559415042a831db14d07b3e6c3d title: The Brainies name: Brainies, The region: SNS-B7-USA revision: SNS-B7-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: bbde8b46c7262f9d4a5b3926a00850cb00b4f7711f6421f0adf4e2b0c847a5d6 title: Bram Stoker's Dracula name: Bram Stoker's Dracula region: SNS-5D-USA revision: SNS-5D-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 130a74e76369b0ec4d6378a014550921433f1ae1ac1dddffb51f77c9f21a818f title: Brandish name: Brandish region: SNS-QF-USA revision: SNS-QF-0 board: SHVC-2J5M-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 044b61613ed66eae08abd5fa5dcd13b24aab11a942e3309cdff624d198c47440 title: Brawl Brothers name: Brawl Brothers region: SNS-RE-USA revision: SNS-RE-0 board: SHVC-2A0N-10 memory type: ROM size: 0x180000 content: Program game sha256: aad8c9be1b7a9662256b0c3d76f5b7a273bcd497aa838232d307e9f2e80cf699 title: BreakThru! name: BreakThru! region: SNS-ABXE-USA revision: SNS-ABXE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: cbc496a7879ba78f32c51c3df4ba1a1a42f17d78d48a39ea9c709d1ad18cb8df title: Breath of Fire name: Breath of Fire region: SNS-BF-USA revision: SNS-BF-0 board: SHVC-2A3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: fede9d4aec8c35ed11e2868c3c517bce53ee3e6af724085c92500e99e43e63de title: Breath of Fire II name: Breath of Fire II region: SNS-AF2E-USA revision: SNS-AF2E-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 99450b45ccc70a1ed387f968c8f863a3c7f6a4b86809e841c25a71e1e904ac61 title: Brett Hull Hockey name: Brett Hull Hockey region: SNS-5Y-USA revision: SNS-5Y-0 board: SHVC-2A0N-01 memory type: ROM size: 0x200000 content: Program game sha256: a427db4860cb5140935f263ba872fe14949c3548db644fed46b2edf3dff3d4a8 title: Brett Hull Hockey '95 name: Brett Hull Hockey '95 region: SNS-ABHE-USA revision: SNS-ABHE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: f2bc4cb460dfc5d5288065a2f529190b72e69d4e02634246086244c20f30521c title: Bronkie the Bronchiasaurus name: Bronkie the Bronchiasaurus region: SNS-AB6E-USA revision: SNS-AB6E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: ee00c57ddfa9b967d1857acb518df039ba73055bdebe78db014de0f5da262fd9 title: Brunswick World Tournament of Champions name: Brunswick World Tournament of Champions region: SNS-AWUE-USA revision: SNS-AWUE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9e3ad5e521e759a2e2260ea8072eb3314b6fcf67a3b7247357a5de9bcb24eeaa title: Brutal: Paws of Fury name: Brutal - Paws of Fury region: SNS-ABLE-USA revision: SNS-ABLE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 2357d344af77d25dda030520ce203045fd9060f83e3b9609a228dba859d9017b title: Bubsy II name: Bubsy II region: SNS-ABBE-USA revision: SNS-ABBE-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 811cbc3287c0959e8eb242e817684d36de664ebebc5873a1fa9958693857c438 title: Bubsy in Claws Encounters of the Furred Kind name: Bubsy in Claws Encounters of the Furred Kind region: SNS-UY-USA revision: SNS-UY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 49020695a017acc3dfadea97a60e28609e583571f69c5abeb3c6b1c2db8113fa title: Bugs Bunny: Rabbit Rampage name: Bugs Bunny - Rabbit Rampage region: SNS-R7-USA revision: SNS-R7-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: ba4f31353e0e1233b574391ad97a80901d7de212e2c55d7be2af11a9a57c8225 title: Bulls vs. Blazers and the NBA Playoffs name: Bulls vs. Blazers and the NBA Playoffs region: SNS-BU-USA revision: SNS-BU-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d8b3d9267470adb8ef2d197ade44476e504c0823f8fe9d2cf2883a03aa75bd49 title: Bulls vs. Blazers and the NBA Playoffs name: Bulls vs. Blazers and the NBA Playoffs region: SNS-BU-USA revision: SNS-BU-1 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d6f6c30732dae8d00cd83628c3156acbdf26f99df701f779522e21de74dae5fe title: Bust-a-Move name: Bust-a-Move region: SNS-AYKE-USA revision: SNS-AYKE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: a8294d449bbb8370816efe0374704e8af20dbbde9c19afe969d898528bc293d0 title: Cacoma Knight in Bizyland name: Cacoma Knight in Bizyland region: SNS-CC-USA revision: SNS-CC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 75993076c8773e7c7d555ef290be10590def40ca7b83307b8dc86556b04a6565 title: Cal Ripken Jr. Baseball name: Cal Ripken Jr. Baseball region: SNS-CJ-USA revision: SNS-CJ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 19f4a1f08aa55ff3cc8ff7ae60ffe03f0e436e8d8901455f1311f2276497a492 title: California Games II name: California Games II region: SNS-C2-USA revision: SNS-C2-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6cdec3cb9c91aa23feb13005f874bda580c2f548302874491a31951031c9dbbd title: Cannondale Cup name: Cannondale Cup region: SNS-ASCE-USA revision: SNS-ASCE-0 board: SHVC-2A1M-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 9590110a990e90f525d5c8d70fc2a3da10879378003173b6761afb8bf042ee0d title: Capcom's MVP Football name: Capcom's MVP Football region: SNS-NL-USA revision: SNS-NL-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: fd5761f9dd1f2b87ad11df6085046d0dfcdc3a79139263e47b0cff707966ba51 title: Capcom's Soccer Shootout name: Capcom's Soccer Shootout region: SNS-JL-USA revision: SNS-JL-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 2a117951adcfbc4298763673a834d502c3f7a3964db1e59650f113c07bb831fb title: Captain America and The Avengers name: Captain America and The Avengers region: SNS-6A-USA revision: SNS-6A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d9b7f9356be0780f0037093a86ef8450f15e569cbd3680073d1cd345dfadb709 title: Captain Commando name: Captain Commando region: SNS-QM-USA revision: SNS-QM-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 8784614896e2b3e8d98c8166613ca5d2329643795a4dc107791c58c6c51e1268 title: Captain Novolin name: Captain Novolin region: SNS-CP-USA revision: SNS-CP-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: ee5fc27dd19a2ecb3c3c7c73d558a18ffd5ff365710c18b88150e277f08d587e title: Carrier Aces name: Carrier Aces region: SNS-ACAE-USA revision: SNS-ACAE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: b9b982cd8f91c51089d49b550f11882b1ee785ebddcb7355cfc465916d61a042 title: Casper name: Casper region: SNS-AXCE-USA revision: SNS-AXCE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 367725a149a471411e4f72ad77603b61fb101c9cab4521be5647e13708cc97ba title: Castlevania: Dracula X name: Castlevania - Dracula X region: SNS-ADZE-USA revision: SNS-ADZE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 32008c429eafe7eb59aff7a89f77e1a267f02f9061ff8830ade7b99081e27f7c title: Champions World Class Soccer name: Champions World Class Soccer region: SNS-8W-USA revision: SNS-8W-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: e6c4f468b39f2dea3436b63758db8ac9b29731357b982ec373334a36f202623f title: Championship Pool name: Championship Pool region: SNS-5P-USA revision: SNS-5P-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: fdd763dffc6fb38975d4c6d6e3123f9738122781b7d13e1fc7f9820464cbaeb5 title: Championship Soccer '94 name: Championship Soccer '94 region: SNS-67-USA revision: SNS-67-0 board: SHVC-1A3M-20 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: aa69d4e19c2eb206fe88eba65994c830256c220e5506f59824aefa0a75dd44d5 title: Chavez name: Chavez region: SNS-ZV-USA revision: SNS-ZV-0 board: SHVC-1A1M-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 39de64101cf7f25863ce55e03a27d13422ea572ee996746578b5936fea80228b title: Chavez II name: Chavez II region: SNS-AC2E-USA revision: SNS-AC2E-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ee0e51d922d1cf8abe3dfc6b0d84a988a6635dc96b2a96962007c41aaa542774 title: The Chessmaster name: Chessmaster, The region: SNS-CH-USA revision: SNS-CH-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: c7e7df8932bf0056aa530f3dc3c913c1171a359af4c197094c2b972946dc6051 title: Chester Cheetah: Too Cool to Fool name: Chester Cheetah - Too Cool to Fool region: SNS-CE-USA revision: SNS-CE-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 21a2aa488cb8140ca318f7d1f513103d14e758181aa336a594097d32ba0a7587 title: Chester Cheetah: Wild, Wild Quest name: Chester Cheetah - Wild, Wild Quest region: SNS-7C-USA revision: SNS-7C-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 9a064b67f522b75b82d0857519c0e33b4dbbe494c2ef79a44fdc913d605d0b26 title: Choplifter III name: Choplifter III region: SNS-3C-USA revision: SNS-3C-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 06d1c2b06b716052c5596aaa0c2e5632a027fee1a9a28439e509f813c30829a9 title: Chrono Trigger name: Chrono Trigger region: SNS-ACTE-USA revision: SNS-ACTE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 63ab79e86ea13e2cf9bb67aec971febb68450db9865b00b5f412610653822393 title: Chuck Rock name: Chuck Rock region: SNS-CK-USA revision: SNS-CK-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 8b7525b2aa30cbea9e3deee601dd26e0100b8169c1948f19866be15cae0ac00d title: Clay Fighter name: Clay Fighter region: SNS-8C-USA revision: SNS-8C-0 board: SHVC-1J0N-01 memory type: ROM size: 0x200000 content: Program game sha256: ea52b39a8e1ea15bfad6b92883c9a5fe744cecd7c0e175aa3bd40280cf7a966e title: Clay Fighter: Tournament Edition name: Clay Fighter - Tournament Edition region: SNS-7E-USA revision: SNS-7E-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 2d40c86bc19d85555bf2672acf515b04dbf56a6a59b29ad503e672310b0fae3b title: Clay Fighter 2: Judgment Clay name: Clay Fighter 2 - Judgment Clay region: SNS-ACZE-USA revision: SNS-ACZE-0 board: SHVC-BJ0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 6d9cd7f0cda3c0a82ed3f6a92cbbba4fe8365438e0a7867ad1cae2044d1738eb title: Claymates name: Claymates region: SNS-Y5-USA revision: SNS-Y5-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: e5980b990605a9c91fa89101c440b2ec9993329296ba09a9538042d724a080fb title: Cliffhanger name: Cliffhanger region: SNS-6C-USA revision: SNS-6C-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 03f6c69aef92d36b5ea25a6023368da0e1da9fa160e8316ebd533d4f358ffacf title: Clue name: Clue region: SNS-CL-USA revision: SNS-CL-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 5536cea2da39f2572abe3b0fcf71f8fcd981376b470b174969772aae4a7a1845 title: College Football USA '97 name: College Football USA '97 region: SNS-AC7E-USA revision: SNS-AC7E-0 board: SHVC-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b0be35a0d5e500f4fffca5f2940e0ec52c81ce99dacd773c3ca9cf92f592d943 title: College Slam name: College Slam region: SNS-ANYE-USA revision: SNS-ANYE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c88a882ad72dfa07a9b1eb8a2183aa10057d60877a02edf90cf2cd8c78abe65e title: The Combatribes name: Combatribes, The region: SNS-CR-USA revision: SNS-CR-0 board: SHVC-2A0N-01 memory type: ROM size: 0x180000 content: Program game sha256: 26e09f5bc2bde28d57aeca0bf5be7f7fb8e3b3887af975bcbf2e6f29b07df56f title: Congo's Caper name: Congo's Caper region: SNS-J2-USA revision: SNS-J2-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: a93ea87fc835c530b5135c5294433d15eef6dbf656144b387e89ac19cf864996 title: Contra III: The Alien Wars name: Contra III - The Alien Wars region: SNS-CS-USA revision: SNS-CS-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: c7d622391f7699fb0dc6367e141c894e700cc9bd8abca69f36785e7bc2f42a49 title: Cool Spot name: Cool Spot region: SNS-C8-USA revision: SNS-C8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 9674cc269d89a52d1719a487b44acf004fb777cbd58d76b19a2cd25749728215 title: Cool World name: Cool World region: SNS-CD-USA revision: SNS-CD-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 7c722f9941957630467c1784d0eb3f92fbfc0a2a1da3c8f5c27f593eca2a5a04 title: CutThroat Island name: CutThroat Island region: SNS-AC8E-USA revision: SNS-AC8E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: c4ae2797fac2586b8640064be6398f2b4f2b3158a07f26c66912b29f7fd197de title: Cyber Spin name: Cyber Spin region: SNS-CF-USA revision: SNS-CF-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: ad31b94ce928ecff605e2b89082154671691509e95d38370ed381437f2c36698 title: Cybernator name: Cybernator region: SNS-AV-USA revision: SNS-AV-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 337e643d3e63915de06429992f306e8d2b73aed6849b795f9c855c2d03c18180 title: D-Force name: D-Force region: SNS-DF-USA revision: SNS-DF-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 4068add412571bd85adac32dff9835e4a4886077d752adb104fee3908e42b7ef title: Daffy Duck: The Marvin Missions name: Daffy Duck - The Marvin Missions region: SNS-YF-USA revision: SNS-YF-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ceb470157576eac3b8b8c16e8ab6b59672409681ffb4232e4ec39dd0cb37ef91 title: Darius Twin name: Darius Twin region: SNS-DT-USA revision: SNS-DT-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: e6efb6361af04963f22c772f879a466543f56b3b6a084204fef2dcb4659d82d9 title: David Crane's Amazing Tennis name: David Crane's Amazing Tennis region: SNS-ZT-USA revision: SNS-ZT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 300c1937e4b68108302e9b0f49974d1ec6b6c45dd8da69dddc19443f9562ecf4 title: The Death and Return of Superman name: Death and Return of Superman, The region: SNS-9D-USA revision: SNS-9D-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 752d24fab240f4dd1dfbfea5ec83438998316806ad44488bf8c84430ca5a2cd0 title: Demolition Man name: Demolition Man region: SNS-AD6E-USA revision: SNS-AD6E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 18d40a807d5f88c5b6a1ad849eec7e0f189225d9a1586037c850f6680b5844de title: Demon's Crest name: Demon's Crest region: SNS-3Z-USA revision: SNS-3Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: a362033d0d7e754d79202b255679186ad799b9e784719614b913ec8c9857ae33 title: Dennis the Menace name: Dennis the Menace region: SNS-4D-USA revision: SNS-4D-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 606abf536440173ae36466db360c7db6b474beb7a105c8a62bc74a54cbe1c38b title: Desert Strike: Return to the Gulf name: Desert Strike - Return to the Gulf region: SNS-RG-USA revision: SNS-RG-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 9c4721339a197185d61e0697ea0149db143a27ddb2f57ebd398f18bcf4d7724b title: Dig & Spike Volleyball name: Dig & Spike Volleyball region: SNS-VH-USA revision: SNS-VH-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7dbfc44d28a46e6d399628e43086aa9fd0b2abeda4c108751a5ad91c102c3aaf title: DinoCity name: DinoCity region: SNS-DW-USA revision: SNS-DW-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: c5474de3592e2a99aac0e5511516658f9f0b50167c754a018409842ec35bcd45 title: Dirt Trax FX name: Dirt Trax FX region: SNS-AF9E-USA revision: SNS-AF9E-0 board: SHVC-1CA0N6S-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x10000 content: Save volatile oscillator frequency: 21440000 game sha256: fa8cacf5bbfc39ee6bbaa557adf89133d60d42f6cf9e1db30d5a36a469f74d15 title: Donkey Kong Country name: Donkey Kong Country region: SNS-8X-USA revision: SNS-8X-0 board: SHVC-1J1M-11 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: df2644d435330192a13768cc1f79c5aa3084a64217a5250c6dd4ffdbe2175be4 title: Donkey Kong Country name: Donkey Kong Country region: SNS-8X-USA revision: SNS-8X-1 board: SHVC-1J1M-11 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 628147468c3539283197f58f03b94df49758a332831857481ea9cc31645f0527 title: Donkey Kong Country name: Donkey Kong Country region: SNS-8X-USA revision: SNS-8X-2 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 07ff03fa8c8e31d2f8277ef2a9785022edebf7f79b694c66a00c66d8e563bce5 title: Donkey Kong Country: Competition Cartridge name: Donkey Kong Country - Competition Cartridge region: SNS-8E-USA revision: SNS-8E-0 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 35421a9af9dd011b40b91f792192af9f99c93201d8d394026bdfb42cbf2d8633 title: Donkey Kong Country 2: Diddy's Kong Quest name: Donkey Kong Country 2 - Diddy's Kong Quest region: SNS-ADNE-USA revision: SNS-ADNE-0 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: b79c2bb86f6fc76e1fc61c62fc16d51c664c381e58bc2933be643bbc4d8b610c title: Donkey Kong Country 2: Diddy's Kong Quest name: Donkey Kong Country 2 - Diddy's Kong Quest region: SNS-ADNE-USA revision: SNS-ADNE-1 board: SHVC-BJ1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 2277a2d8dddb01fe5cb0ae9a0fa225d42b3a11adccaeafa18e3c339b3794a32b title: Donkey Kong Country 3: Dixie Kong's Double Trouble name: Donkey Kong Country 3 - Dixie Kong's Double Trouble region: SNS-A3CE-USA revision: SNS-A3CE-0 board: SHVC-1J1M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x800 content: Save game sha256: d45e26eb10c323ecd480e5f2326b223e29264c3adde67f48f0d2791128e519e8 title: Doom name: Doom region: SNS-AD8E-USA revision: SNS-AD8E-0 board: SHVC-1CB0N7S-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x10000 content: Save volatile oscillator frequency: 21440000 game sha256: bb915b286b33842e39e9022366169233a4041515c7ecc60ac428420b28e48dd5 title: Doomsday Warrior name: Doomsday Warrior region: SNS-DM-USA revision: SNS-DM-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: b32aa9cbf8f6baacc84f6418fa6fbc33b9ce71458fecc91275aafdbf6f743a99 title: Double Dragon V: The Shadow Falls name: Double Dragon V - The Shadow Falls region: SNS-5E-USA revision: SNS-5E-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: d98d7da1e7636e067563e2e480d7dfbc013b7e9bdf1329fd61c5cacac0293e1d title: Dragon: The Bruce Lee Story name: Dragon - The Bruce Lee Story region: SNS-AD5E-USA revision: SNS-AD5E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: a3b1cae3fe55fe52c035ab122e7f850640b0935524496d45b1915ca3c8a934f4 title: Dragon View name: Dragon View region: SNS-ADVE-USA revision: SNS-ADVE-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 49a1f9f5e6084b3daa1b13ab5a37ebe8bd3cf20e1c7429fbf722298092893e81 title: Dragon's Lair name: Dragon's Lair region: SNS-DI-USA revision: SNS-DI-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 74910ce01d19d25cb97a243a51f21c3d522f02fb116682f60440da3292bb14f7 title: Drakkhen name: Drakkhen region: SNS-DK-USA revision: SNS-DK-0 board: SHVC-1A3B-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 1a79d51a2ad7dd4848205a07ff8e5d873b155dc420de5e52158c9bab935e05c3 title: Dream T.V. name: Dream TV region: SNS-VE-USA revision: SNS-VE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 03d25227fb88899d0f3234c4a3f76f1dbe8d582cb6429454fd6f1c4cf14d5c6e title: Dungeon Master name: Dungeon Master region: SNS-V2-USA revision: SNS-V2-0 board: SHVC-1B5B-02 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP2 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP2 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP2 volatile oscillator frequency: 7600000 game sha256: 0408e3d9f2259044344a3bfbd7a7ca3c3427f82108fbecd6e5c4c41e80cd303b title: Earth Defense Force name: Earth Defense Force region: SNS-ED-USA revision: SNS-ED-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: a8fe2226728002786d68c27ddddf0b90a894db52e4dfe268fdf72a68cae5f02e title: EarthBound name: EarthBound region: SNS-MB-USA revision: SNS-MB-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4579e437279f79eedd6b9cf648a814df2ab2c83d937a1bcec1578d28965fb9a0 title: Earthworm Jim name: Earthworm Jim region: SNS-AEJE-USA revision: SNS-AEJE-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 10eadaab168707829418702386e1bcedd2619d9bbefc37cf31c4118313bcf6de title: Earthworm Jim 2 name: Earthworm Jim 2 region: SNS-A2EE-USA revision: SNS-A2EE-0 board: MJSC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 5d658b63d35e2e0baf48ae3bb04ea5e1553855b34bb39fc2c7ca41fbd3894d52 title: Eek! The Cat name: Eek! The Cat region: SNS-E7-USA revision: SNS-E7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b296054effb1948039635044bc905fdf8ff53e7a73038fd5d8436a913ea5ad8a title: Elite Soccer name: Elite Soccer region: SNS-L7-USA revision: SNS-L7-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: f14e30ee452ec930a6d08094094b287d0c40c8108f2017c418015242987649b3 title: Emmitt Smith Football name: Emmitt Smith Football region: SNS-AESE-USA revision: SNS-AESE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: cfd666f0bbabec59613d9fe189db7d0a060a78047bc084c0c365840769047bf2 title: Equinox name: Equinox region: SNS-EX-USA revision: SNS-EX-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c702c3860e9dffdaa1917d013ecbcefdd2c47f89726992f7f810d879772dcc4d title: ESPN Baseball Tonight name: ESPN Baseball Tonight region: SNS-EV-USA revision: SNS-EV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 3326061160ad12c7aef5176544ec1c8ef2f534a51960ca882dbc7fcb9b1a7384 title: ESPN National Hockey Night name: ESPN National Hockey Night region: SNS-AEHE-USA revision: SNS-AEHE-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7b2fdab972e393395f5379d7fb13e40464db152f6acf58b2d2a6a18f81cefecb title: ESPN Speed World name: ESPN Speed World region: SNS-ASWE-USA revision: SNS-ASWE-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: faf595b4671f005fa9367ba3fcd30dbff371bc7a9ca8bbfbc0ebfcc5826b60f8 title: ESPN Sunday Night NFL name: ESPN Sunday Night NFL region: SNS-ASNE-USA revision: SNS-ASNE-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 8481e47381bd98c27b9782b5727a5d5f0976fbb3aa3df25c2c42aa37e0586815 title: E.V.O.: Search for Eden name: EVO - Search for Eden region: SNS-46-USA revision: SNS-46-0 board: SHVC-2A3M-01#A memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: f2455253db316b6ccd0c5c686d1f1e2d94cd5e37534e70a3a07a409120d58df6 title: Exertainment Mountain Bike Rally name: Exertainment Mountain Bike Rally region: SNS-9X-USA revision: SNS-9X-0 board: SHVC-1A1M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x800 content: Save game sha256: a0521f50b0d0bff6666bfb712498476eb8d5974ef38caf157e2f67cbce5475bb title: Exertainment Mountain Bike Rally + Speed Racer name: Exertainment Mountain Bike Rally + Speed Racer region: SNS-ALFE-USA revision: SNS-ALFE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 1576066e0cb771a91caf79e7d4f6dc00eb0daa47f0786f1604b32537429a7f45 title: Extra Innings name: Extra Innings region: SNS-GL-USA revision: SNS-GL-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: bf16c3c867c58e2ab061c70de9295b6930d63f29f81cc986f5ecae03e0ad18d2 title: F-Zero name: F-Zero region: SNS-FZ-USA revision: SNS-FZ-0 board: SHVC-1A1B-04 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 55c33efb514568c9946c4b866c160ed190fe436faee265ee2fb107f7fe94d524 title: F1 Pole Position name: F1 Pole Position region: SNS-6P-USA revision: SNS-6P-0 board: SHVC-1A1M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 1d38e3af9e3a6409e93f4705b68c42558f558c68f3e83ef2a40e46cf560b26cc title: F1 Race of Champions name: F1 Race of Champions region: SNS-EH-USA revision: SNS-EH-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3ae7bfd38a3dc273f4d387af3b15621beefebf5056731af06e3822f5e57db5c5 title: F1 Race of Champions II name: F1 Race of Champions II region: SNS-E2-USA revision: SNS-E2-0 board: SHVC-1DS0B-20 memory type: ROM size: 0x100000 content: Program memory type: ROM size: 0xc000 content: Program manufacturer: NEC architecture: uPD96050 identifier: ST010 memory type: ROM size: 0x1000 content: Data manufacturer: NEC architecture: uPD96050 identifier: ST010 memory type: RAM size: 0x1000 content: Data manufacturer: NEC architecture: uPD96050 identifier: ST010 oscillator frequency: 11000000 game sha256: d689392884df91c2bb84b1411a96f3919b6c9cc8a583dff901a98f0d86d31c30 title: Faceball 2000 name: Faceball 2000 region: SNS-2F-USA revision: SNS-2F-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 2891f1eab285133364ecc379a5c9e1d0026d60f425f1a458d149014f386cfa50 title: Family Dog name: Family Dog region: SNS-D8-USA revision: SNS-D8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4f43ce12e1d8cd195468d7048494ad2930721e5bf9e69bfd86eeee707ffc634b title: Family Feud name: Family Feud region: SNS-FN-USA revision: SNS-FN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: d5c651d726dd957b80d03ab6fdbed4cdd26a3cccf5ec9d91af67251b3ec26a3c title: Family Feud name: Family Feud region: SNS-FN-USA revision: SNS-FN-1 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: c92f389d25870aada3002775838ec9f69a988120c0238af885fd08d46bd94930 title: Fatal Fury name: Fatal Fury region: SNS-GN-USA revision: SNS-GN-0 board: SHVC-2A0N-01 memory type: ROM size: 0x180000 content: Program game sha256: a0c554d46034caef231c36dd6849828ca39703678fb7fdd15a11f292b93bcd6b title: Fatal Fury 2 name: Fatal Fury 2 region: SNS-DJ-USA revision: SNS-DJ-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x280000 content: Program game sha256: 410e90db3d38507ccc85ad3bca6b27a080123fd5160e82b5de4d914d4b6d6e61 title: Fatal Fury Special name: Fatal Fury Special region: SNS-3R-USA revision: SNS-3R-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 1f454f2ce16fb96ba0b950ceaa098fe6eabed9e4a0e512252debad8fa6bc5ef5 title: FIFA International Soccer name: FIFA International Soccer region: SNS-84-USA revision: SNS-84-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 26ff143c2f1a4a16ca838cc4b5555e39bbe7208515dca8f1c4b1a00dec61cf09 title: FIFA Soccer '96 name: FIFA Soccer '96 region: SNS-A6SE-USA revision: SNS-A6SE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c514f855ad377242582952eee95513a2152ebbf6bb5b06bdf9f031fc5ac748ab title: FIFA Soccer '97 name: FIFA Soccer '97 region: SNS-A7IE-USA revision: SNS-A7IE-0 board: EA-1A3M-30 memory type: ROM size: 0x1e0000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b9594d588816ae570ea5fea14577ed47de4db9ac9a40a116c84e0ad7a2ce58f8 title: Fighter's History name: Fighter's History region: SNS-YH-USA revision: SNS-YH-1 board: SHVC-BJ0N-01 memory type: ROM size: 0x280000 content: Program game sha256: 6151389f33ce2e53db3cd99592440c0020f5f4668f581ce3bd615bc92077f255 title: Final Fantasy: Mystic Quest name: Final Fantasy - Mystic Quest region: SNS-MQ-USA revision: SNS-MQ-0 board: SHVC-1A3B-13 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 680535dc1c4196c53b40dc9c2c9bc159a77802ab8d4b474bef5dc0281c15ad06 title: Final Fantasy II name: Final Fantasy II region: SNS-F4-USA revision: SNS-F4-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0f51b4fca41b7fd509e4b8f9d543151f68efa5e97b08493e4b2a0c06f5d8d5e2 title: Final Fantasy III name: Final Fantasy III region: SNS-F6-USA revision: SNS-F6-0 board: SHVC-BJ3M-10 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 60cca2592d0756b8c4c7a0a254fafa5ac47aa752521fd1f77dcbf4b6ee1bee90 title: Final Fight name: Final Fight region: SNS-FT-USA revision: SNS-FT-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 744d1a16c3f99970283597ae8f43b7c3621c5f995c4566ef24b8d70b0692007b title: Final Fight 2 name: Final Fight 2 region: SNS-F2-USA revision: SNS-F2-0 board: SHVC-2A0N-01 memory type: ROM size: 0x140000 content: Program game sha256: f9dac709b2c2859f828103a0dd980716817e2bde3b9d7e2fdea36e9bb9bed7f2 title: Final Fight 3 name: Final Fight 3 region: SNS-AFZE-USA revision: SNS-AFZE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 8c47f9dc79748c0ae6c648f8480614d22eaefade065612ad1fe749fc3db4d1bc title: Final Fight Guy name: Final Fight Guy region: SNS-FY-USA revision: SNS-FY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 003dba0193acc5336840307194643ca3b1f848dcfc77580b4e17c605105b27f5 title: Firepower 2000 name: Firepower 2000 region: SNS-FW-USA revision: SNS-FW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6f32355bef68d4ad58822f50074b46bcc9a68357cd2c6a5470c96bf5344f84d8 title: Firestriker name: Firestriker region: SNS-3S-USA revision: SNS-3S-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4c1354337efa788169387458fa6bdbcf4be0c98369920af2bd876ad98d29070f title: First Samurai name: First Samurai region: SNS-FK-USA revision: SNS-FK-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 064a880a8dfcf576f74ae8a17c3ec7b0a27e8cb0300a5e5959452fcc30422f14 title: Flashback: The Quest for Identity name: Flashback - The Quest for Identity region: SNS-5F-USA revision: SNS-5F-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: ff09d72d6241b331dc429d1cf27c04c26546f23312a22c7a14e6a4bf41ed1069 title: The Flintstones name: Flintstones, The region: SNS-AFNE-USA revision: SNS-AFNE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 3d5bbc06e7e9797d937c803610c40b262c14c3f0a39e8048dd6b0b052a040fc1 title: The Flintstones: The Treasure of Sierra Madrock name: Flintstones, The - The Treasure of Sierra Madrock region: SNS-9F-USA revision: SNS-9F-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 40b55ee44bc6f1c83daac3e1806dcf7ecd5b35280cdb6a63c7a5e52fbd2115e6 title: Football Fury name: Football Fury region: SNS-UF-USA revision: SNS-UF-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: bc6b0344a434644c391ac69a53c7720c51e2d3c5c082b8d78598ae4df100c464 title: Foreman For Real name: Foreman For Real region: SNS-AFEE-USA revision: SNS-AFEE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x300000 content: Program game sha256: ba93721bdb0f19506e722bc580d0b4dad6e8648dddbc52e3ce45dd75ea165f72 title: Frank Thomas' Big Hurt Baseball name: Frank Thomas' Big Hurt Baseball region: SNS-AFKE-USA revision: SNS-AFKE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 25b380f529f5a9295df7c0adcc5213d67f131f552d078a3d8f545f988047c90a title: Frantic Flea name: Frantic Flea region: SNS-AF8E-USA revision: SNS-AF8E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 1ce72767795f41049a1f4d2829e837a8885eb91e1c14faf1ca62d05839ebe3c9 title: Frogger name: Frogger region: SNS-AF7E-USA revision: SNS-AF7E-0 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 3db8a496a49d47b1ac2a893feaf682722765b2cde63c22af3aa68212dcfa975f title: Full Throttle: All-American Racing name: Full Throttle - All-American Racing region: SNS-AFTE-USA revision: SNS-AFTE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: dcceb5be536c9b91bf34f65e7fcec4b55a78af0192323cf86f3b9555072037ee title: fun 'n games name: Fun & Games region: SNS-7N-USA revision: SNS-7N-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 78e2b8210d8dd8776ee23153eb3dce2cbf7d8ddc3e8a5d25b580428f59d98bdb title: Gemfire name: Gemfire region: SNS-RL-USA revision: SNS-RL-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 05e9404bfe0689e484a34991f22712c9da718cf000b0f748378af5758b654a3d title: Genghis Khan II: Clan of the Gray Wolf name: Genghis Khan II - Clan of the Gray Wolf region: SNS-6G-USA revision: SNS-6G-0 board: SHVC-1J3B-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: fc993c122079b94ebc9b9452b46a55d5ddcd3715a4b97af795222b264827e90f title: George Foreman's KO Boxing name: George Foreman's KO Boxing region: SNS-GK-USA revision: SNS-GK-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: a4ceb31b82ea532e6eb640fa2eda61625758e72251efa5f0ae9a984f4a98a8a0 title: Ghoul Patrol name: Ghoul Patrol region: SNS-AGJE-USA revision: SNS-AGJE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: feff03cfa195512ad87dc876012d70520cf192e2874c518b6dbdf3d876ea60c4 title: Goal! name: Goal! region: SNS-SU-USA revision: SNS-SU-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 8796ca4de3aeffd3a494fe28e7d7e2aeb220ca652b43684f29e2cc94f02c20c4 title: Gods name: Gods region: SNS-GZ-USA revision: SNS-GZ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 2bb368c47189ce813ad716eef16c01cd47685cb98e2c1cb35fa6f0173c97dd7c title: Goof Troop name: Goof Troop region: SNS-G6-USA revision: SNS-G6-0 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 342ddf438aec3f0696de8f2cd74bb7f48a956f488f1246eeccaff5ef246ca50b title: GP-1 name: GP-1 region: SNS-G7-USA revision: SNS-G7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 2e478569949c3935529c956448947ef90bae64abaf3d523bd89e7f4cf5e83702 title: GP-1: Part II name: GP-1 - Part II region: SNS-AGRE-USA revision: SNS-AGRE-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 93da752a0c76167d0907efa832367e5d14aab8e835b864f345c386071a9af718 title: Gradius III name: Gradius III region: SNS-G3-USA revision: SNS-G3-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: b5492aea296ee4bfcd2c677fbec5153fd4c4db758c835b372ef750cf2399649b title: The Great Circus Mystery: Starring Micky & Minnie name: Great Circus Mystery, The - Starring Micky & Minnie region: SNS-4C-USA revision: SNS-4C-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 3ab1ca181000f10cb7c2ae8dc9fafeecd5d77314ee92960e26dff0d6a1fd11ee title: The Great Waldo Search name: Great Waldo Search, The region: SNS-GW-USA revision: SNS-GW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: f921297c361f16ad3f1257e91829638fc795f9323172015d7237ed648c8f7515 title: GunForce name: GunForce region: SNS-GU-USA revision: SNS-GU-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 5a6deb5617e86a9f4b981031e939510e30c5c8ad047f5f012e40442113fd28c2 title: Hagane name: Hagane region: SNS-AHGE-USA revision: SNS-AHGE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: de1cf1512e48473b03adb87b7504f394e8b330b346bac24044f833d83609799a title: Hal's Hole in One Golf name: Hal's Hole in One Golf region: SNS-JO-USA revision: SNS-JO-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 21cd6d749674c55342f5f1a895642d4b58b9bd7eb211f5df3a35dc6c2f5d4501 title: Hammer Lock Wrestling name: Hammer Lock Wrestling region: SNS-LJ-USA revision: SNS-LJ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 4fb9b010e4b1dc166ab7995a6f9491114063b68aac344004b1edfc555951d959 title: Hard Ball III name: Hard Ball III region: SNS-3Y-USA revision: SNS-3Y-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 6e2a02a8944c19db3da76d2646f232fbe3ed039bc7d44cc03910814fa77a7acf title: Harley's Humongous Adventure name: Harley's Humongous Adventure region: SNS-HV-USA revision: SNS-HV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 73a3aa87ddd5ce5df5ba51292316f42b6e128280179b0a1b11b4dcddc17d4163 title: Harvest Moon name: Harvest Moon region: SNS-AYWE-USA revision: SNS-AYWE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 9ff6bbcce7dc1f3bded96860a86698cab161d13ee167c57b5b114ac646eea0ea title: Head-On Soccer name: Head-On Soccer region: SNS-AVSE-USA revision: SNS-AVSE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: fa418618787145291201b3d9247048b2d7dfba37f6556dcb1d40db499124dd60 title: Hit the Ice name: Hit the Ice region: SNS-HC-USA revision: SNS-HC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 7c34908526db2a634216fab0276c42a8e4e22d59c728cd586200142a12dd2c2c title: Home Alone name: Home Alone region: SNS-HA-USA revision: SNS-HA-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 27eaccb4eea93832639565a664bf3561ed5a11ac025d377a3f33262d851c1b2b title: Home Alone 2: Lost in New York name: Home Alone 2 - Lost in New York region: SNS-HN-USA revision: SNS-HN-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 48a3ac52e2c9128abc2dc60e07817a51898e8a93be0d51d6f541a8635263a089 title: Home Improvement name: Home Improvement region: SNS-AHIE-USA revision: SNS-AHIE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: acad4c594f156e0f30dec2532b35fcb3bab800e08263377634e2d96dfd055f3e title: Hook name: Hook region: SNS-HO-USA revision: SNS-HO-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a03528344d40bf800cdbde2dd240b30442cec7aea6026fbbe312a7c36bf0f74a title: The Hunt for Red October name: Hunt for Red October, The region: SNS-RO-USA revision: SNS-RO-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 41cc900d2461a8dc4706640e493885ddf85db04d8dffceebf7a0ed89cc983d8d title: Hurricanes name: Hurricanes region: SNS-AHUE-USA revision: SNS-AHUE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: db57f45e113127b7148c1b0add2da888e16e16b3e46749f95973b3ef497ae90b title: Hyper V-Ball name: Hyper V-Ball region: SNS-HQ-USA revision: SNS-HQ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: f57c49cc3e4c5e34929e12658db0de8794265c517e42f3c518bb1466ba46f14a title: Hyper Zone name: Hyper Zone region: SNS-HZ-USA revision: SNS-HZ-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: fa143784fd20721d61101920e6aae9b7f5012b8157b1ce0c7ea83ea6c875d84d title: The Ignition Factor name: Ignition Factor, The region: SNS-AIFE-USA revision: SNS-AIFE-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 32adc048fd89228a4310c03df243e83de7d436cdb2460b4cc83ade20d359b2bd title: Illusion of Gaia name: Illusion of Gaia region: SNS-JG-USA revision: SNS-JG-0 board: SHVC-1J3B-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4dc2b5de98e9109583d9b61b38d26a8216af4dba246ef71350122213630562d0 title: Imperium name: Imperium region: SNS-DN-USA revision: SNS-DN-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: c41150c0e84055801377fb7cb273cc51ca442b269ca6287cadf514f553e34750 title: Incantation name: Incantation region: SNS-AIYE-USA revision: SNS-AIYE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 0415adfe80977485f84cdffaaa79f18c91c004c7dba202b4cf9a94eb11adeada title: The Incredible Crash Dummies name: Incredible Crash Dummies, The region: SNS-C7-USA revision: SNS-C7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8d170628d2d2fdf142bb82ad80e908bba54c45fa33241c779b8eafaf1b21171f title: The Incredible Hulk name: Incredible Hulk, The region: SNS-8U-USA revision: SNS-8U-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: cf611b40f9570e8fcfdc21db623965da62561e8ca82ded59e432ba6fb0bfb562 title: Indiana Jones' Greatest Adventures name: Indiana Jones' Greatest Adventures region: SNS-AIJE-USA revision: SNS-AIJE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 5e5cac64fdcf09a52a9c0ab1ebc8bd309dcb1256faf1405284443569b5284fe5 title: Inindo: Way of the Ninja name: Inindo - Way of the Ninja region: SNS-IN-USA revision: SNS-IN-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c7b1706a0ee96f3e0d65cd043c05966bfe3d5c57d08bbd2df3118817424adf82 title: Inspector Gadget name: Inspector Gadget region: SNS-5G-USA revision: SNS-5G-0 board: SHVC-YJ0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 6443fecebcdc2ff7061a40432f3ad1db6dfd354909a5f306972cf6afa122752c title: International Superstar Soccer name: International Superstar Soccer region: SNS-3U-USA revision: SNS-3U-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: d2fe66c1ce66c65ce14e478c94be2e616f9e2cad374b5783a6a64d3c1a99cfa9 title: International Superstar Soccer Deluxe name: International Superstar Soccer Deluxe region: SNS-AWJE-USA revision: SNS-AWJE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 4e8044b1e7a779685d6751351eef2391272ac8b2bd909edeecfc3d3c5a594bef title: International Tennis Tour name: International Tennis Tour region: SNS-IT-USA revision: SNS-IT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8304d8bc55aa9e64bdd144d384f4b185af2426e7d64888c6c23dd41366a53981 title: The Irem Skins Game name: Irem Skins Game, The region: SNS-MT-USA revision: SNS-MT-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 39bfe828571cdb23e7c85c23cf5b175979dcc2042c5841add58f5ae6492168a9 title: The Itchy & Scratchy Game name: Itchy & Scratchy Game, The region: SNS-AISE-USA revision: SNS-AISE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 183af7d642b55d52cd594786ec2f031d033cc6c8c1a2a84a834e4ada04301b26 title: Izzy's Quest for the Olympic Rings name: Izzy's Quest for the Olympic Rings region: SNS-AIZE-USA revision: SNS-AIZE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 3ffbb6e0ccf8e9f5e4c72d9fe526a16371e562b71a91d6430e562bf358a5126b title: Jack Nicklaus Golf name: Jack Nicklaus Golf region: SNS-JN-USA revision: SNS-JN-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 9cf82dd9a851cdc38bf2afc286c077ff18a0a5d3bb301eba606cc52db62f8965 title: James Bond Jr. name: James Bond Jr. region: SNS-JJ-USA revision: SNS-JJ-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 8b7b33f3d2edb844f1d43cfdd595b8c2cb6fc005d59acb899a1afda999e47638 title: Jammit name: Jammit region: SNS-J6-USA revision: SNS-J6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 85e5f6fedc420925557092d728e1dc6b4e2042368fb78bf93c0df447f8c9c0c0 title: Jeopardy! name: Jeopardy! region: SNS-JY-USA revision: SNS-JY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 76d760da59aa7fc2fd4426c1d1aec57412703ab901b9df60ac2be16ede80b0e7 title: Jeopardy! - Deluxe Edition name: Jeopardy! - Deluxe Edition region: SNS-7J-USA revision: SNS-7J-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: d7110ddc0b34aa4ecd5e55f7b846657edb982db82cf0ba340fe0464daf0ca9be title: Jeopardy! - Sports Edition name: Jeopardy! - Sports Edition region: SNS-8Y-USA revision: SNS-8Y-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: ee7a29eb9c302ea2bb235ef990fd8344a6beb9817499941c40a8a94ad5f7c964 title: The Jetsons: Invasion of the Planet Pirates name: Jetsons, The - Invasion of the Planet Pirates region: SNS-8J-USA revision: SNS-8J-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a314583b11d594b8245b5177aa64a4d3b7497d096edabbea7c1842c57aa2ad2b title: Jim Lee's Wild Covert Action Teams name: Jim Lee's Wild Covert Action Teams region: SNS-AWIE-USA revision: SNS-AWIE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 6f0bec87ece503b0fbe108cd159ed6f5fa7711b1c4fe31e982af41ad5c638093 title: Jim Power: The Lost Dimension in 3D name: Jim Power - The Lost Dimension in 3D region: SNS-6J-USA revision: SNS-6J-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 205890f94e27e7c1b381124cc35c866351bafa906383e507cd17ccb9d1b68ffd title: Jimmy Connors' Pro Tennis Tour name: Jimmy Connors' Pro Tennis Tour region: SNS-JC-USA revision: SNS-JC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 6abe908b4005a68d1f6e9a54339c94a33db41801890d8c058ce974fdab3d0bcd title: Jimmy Houston's Bass Tournament, U.S.A. name: Jimmy Houston's Bass Tournament, USA region: SNS-AFUE-USA revision: SNS-AFUE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3b2b8b813b58049a4a86ce1c42d2a651f19fd9bbab2407a494e20cf343d3c1a4 title: Joe & Mac name: Joe & Mac region: SNS-JT-USA revision: SNS-JT-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: c9889799a9ae8558f26d66ae546db930c99acb78d921b4395afbbc38da6272aa title: Joe & Mac 2: Lost in the Tropics name: Joe & Mac 2 - Lost in the Tropics region: SNS-J3-USA revision: SNS-J3-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 5a76347672ea7d27bb334b1e30bbc73e06f92373883bed499245377327a8f0cf title: John Madden Football name: John Madden Football region: SNS-JM-USA revision: SNS-JM-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 3e62872bf69ea90dd7093608268f8defa2c6016adb1011745dab3c2af45d69b7 title: John Madden Football '93 name: John Madden Football '93 region: SNS-MF-USA revision: SNS-MF-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 67fa7115eb6bf292c024c3a8b06ce9bd457c4d46de182a06a573afff968cc0f1 title: Judge Dredd name: Judge Dredd region: SNS-AJDE-USA revision: SNS-AJDE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 771a0322d9f5f8e13a52d01e80257a1f75cc693cf4abf74793520eb5f8b5580e title: The Jungle Book name: Jungle Book, The region: SNS-7K-USA revision: SNS-7K-0 board: MAXI-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 8d812ea4fa897274116f7f43bc689e110f1cfbd3f7eb3a1737c2a85d36369159 title: Jungle Strike name: Jungle Strike region: SNS-AJGE-USA revision: SNS-AJGE-0 board: MJSC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: fe91d45201753ae9655d5ce38838e352f478b26b2d933c1bcb5bd8330121f9ff title: Jurassic Park name: Jurassic Park region: SNS-J8-USA revision: SNS-J8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 0a4e9d6fa2ac16aa51da5538d93280734de480e44c430173ed14826c84553c7d title: Jurassic Park name: Jurassic Park region: SNS-J8-USA revision: SNS-J8-1 board: MAXI-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 5eff7c27f69b3ebc1ec1294ffcd1debf3512bc3e6c1c75fbdc5e778dcaaba1c9 title: Jurassic Park 2: The Chaos Continues name: Jurassic Park 2 - The Chaos Continues region: SNS-A2JE-USA revision: SNS-A2JE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 7f05959f423bc656091ea3bddfbc89c877ae243dca346f63233e27973f34e0eb title: Justice League Task Force name: Justice League Task Force region: SNS-AJLE-USA revision: SNS-AJLE-0 board: SHVC-BA0N-10 memory type: ROM size: 0x280000 content: Program game sha256: 05152bcf9bf086e7bcdbfa7dd8edfe2085f1339c4d7e193e0071c49a10471ef4 title: Ka-Blooey name: Ka-Blooey region: SNS-BB-USA revision: SNS-BB-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 7cc3693cc5e1e834d57795f04b048fab27864a898a9507e7ca383771e2035414 title: Kawasaki Caribbean Challenge name: Kawasaki Caribbean Challenge region: SNS-KC-USA revision: SNS-KC-0 board: SHVC-2A0N-10 memory type: ROM size: 0x180000 content: Program game sha256: fec6dd097e378e795dd164be658b10b1c60672b2351a7f4a7722d1fe5736410e title: Kawasaki Superbike Challenge name: Kawasaki Superbike Challenge region: SNS-AKEE-USA revision: SNS-AKEE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 3104d6c06c8909c56f6adb2faecf1b4382f2490370798b605631da926c5306d8 title: Ken Griffey Jr. Presents Major League Baseball name: Ken Griffey Jr. Presents Major League Baseball region: SNS-JR-USA revision: SNS-JR-0 board: SHVC-1A3B-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: f9f7a2de8cbafd6f9042841dfc42529f8245d75f436bed1c23f9ba1663182e61 title: Ken Griffey Jr. Presents Major League Baseball name: Ken Griffey Jr. Presents Major League Baseball region: SNS-JR-USA revision: SNS-JR-1 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 18b5276be764c06531219c1757d40214aeec06fae68f4ce3ec78b58ee750a43e title: Ken Griffey Jr.'s Winning Run name: Ken Griffey Jr.'s Winning Run region: SNS-A9GE-USA revision: SNS-A9GE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b16661d5151d73cea5ac46d7c899531c7b2cdee2558092c23a5460c8092b80b8 title: Kendo Rage name: Kendo Rage region: SNS-M7-USA revision: SNS-M7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 914652f72d6ceb83b8b43414d6c42581ec12e9b3f45259b8b2768d26b8d4f073 title: Kid Klown in Crazy Chase name: Kid Klown in Crazy Chase region: SNS-ZI-USA revision: SNS-ZI-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 618a23636e07110e094277ec1d1e60c3620a6e9a5f386292808267593fa803ad title: Killer Instinct name: Killer Instinct region: SNS-AKLE-USA revision: SNS-AKLE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 1b58d0aed4510811c73d267244a7e915aa0b334c86e68f3fa5883f5cb534e4d7 title: King Arthur & The Knights of Justice name: King Arthur & The Knights of Justice region: SNS-AAKE-USA revision: SNS-AAKE-0 board: SHVC-BJ0N-20 memory type: ROM size: 0x280000 content: Program game sha256: aca9eb59d6783e2cae3787c69053888fea98f5dfe4c8af8b5a6360e0afb3b5d7 title: King Arthur's World name: King Arthur's World region: SNS-RC-USA revision: SNS-RC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 6638b5541059814d4c34574e5e277ef613aebf81c91d3def557a7642fb5840e1 title: King of Dragons name: King of Dragons region: SNS-EI-USA revision: SNS-EI-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 1135858a1ce686a0a163bb0e6f3a4d7cd71c0cd56efbc79677372f2624cf2306 title: King of the Monsters name: King of the Monsters region: SNS-KM-USA revision: SNS-KM-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a9729d049ce580839bbfef1836a13dc16f2fc934d203ebf7390e0b1c47ea9a2d title: King of the Monsters 2 name: King of the Monsters 2 region: SNS-KT-USA revision: SNS-KT-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 4e095fbbdec4a16b075d7140385ff68b259870ca9e3357f076dfff7f3d1c4a62 title: Kirby Super Star name: Kirby Super Star region: SNS-AKFE-USA revision: SNS-AKFE-0 board: SHVC-1L3B-11 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: 67937dd7a29a93b1aaabb6df89f0748369ff47f3f6c655a402c00d5657973140 title: Kirby's Avalanche name: Kirby's Avalanche region: SNS-PQ-USA revision: SNS-PQ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0f984dc5fe8293f75e3b8fad98b0cb564706d9b1e3902b56415aa399c2d4df2b title: Kirby's Dream Course name: Kirby's Dream Course region: SNS-CG-USA revision: SNS-CG-0 board: SHVC-1A3M-30 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b50bf9d95485e8aeb7a6730e9f9f9c9c4ec23a85b336a4fb2e3b63034531e36f title: Kirby's Dream Land 3 name: Kirby's Dream Land 3 region: SNS-AFJE-USA revision: SNS-AFJE-0 board: SHVC-1L5B-20 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x8000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: fb601ead645edce139b0483d3155b4e3d7ab245bf87a3a66cb88c0a617c0a526 title: Knights of the Round name: Knights of the Round region: SNS-LO-USA revision: SNS-LO-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: bed18c968aee0eb0c866c1964c28135364cd6d65fff7bcb5873342c04e63750d title: Krusty's Super Fun House name: Krusty's Super Fun House region: SNS-FH-USA revision: SNS-FH-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: e36322697c48baae6492db91e6cbf3844a420f6e0cc8a75f3a73556026ddbbb8 title: Krusty's Super Fun House name: Krusty's Super Fun House region: SNS-FH-USA revision: SNS-FH-1 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: daf3e45bafbec81ffa5911b94810b2cd267574de717292360f9940f41fb2a6a9 title: Kyle Petty's No Fear Racing name: Kyle Petty's No Fear Racing region: SNS-AKPE-USA revision: SNS-AKPE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 46c811f0cacffe8f20e1d63072d25d7c47e9bb3fd5124851fd05aca9884d21fb title: Lagoon name: Lagoon region: SNS-LA-USA revision: SNS-LA-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 48cd9476fef1ed685b9c30dd1669b46048f7295cbbb2abcfa5b1a48699346ea3 title: Lamborghini American Challenge name: Lamborghini American Challenge region: SNS-L8-USA revision: SNS-L8-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 314d53f409b66ba3f4426a6f1bb7c69f6779aeed277ce2e19535f94d7c8ca586 title: Last Action Hero name: Last Action Hero region: SNS-L5-USA revision: SNS-L5-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: a179a1188220b59787c49a78a0dde79b89380e3a8a8a0ab558f0102c5796f873 title: The Lawnmower Man name: Lawnmower Man, The region: SNS-LW-USA revision: SNS-LW-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: c7814cee0fc95d6422cf19a3dc8c9a65b60f6f56da75f09cebea02cc5f99261b title: Legend name: Legend region: SNS-6L-USA revision: SNS-6L-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: c865fb17e8c59a21d32b9a605319241fa74ec732e3f0ee58f5d7fcbd8ee57c6b title: The Legend of the Mystical Ninja name: Legend of the Mystical Ninja, The region: SNS-GG-USA revision: SNS-GG-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 66871d66be19ad2c34c927d6b14cd8eb6fc3181965b6e517cb361f7316009cfb title: The Legend of Zelda: A Link to the Past name: Legend of Zelda, The - A Link to the Past region: SNS-ZL-USA revision: SNS-ZL-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4b28d2ddab405976bb56e41a40ec1ea11d7362a8f398d5f8c117d715a15719ca title: Lemmings name: Lemmings region: SNS-LE-USA revision: SNS-LE-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: cd016c41c7ef9f4f243d57c2b1564b4ceb3b4c38cc165cd02ab6c8e35c93aa2e title: Lemmings name: Lemmings region: SNS-LE-USA revision: SNS-LE-1 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 63ecdca7f89b2432ccd57bdb81c0875f6336353f5897f756ef162ab2ec2ee707 title: Lemmings 2: The Tribes name: Lemmings 2 - The Tribes region: SNS-L2-USA revision: SNS-L2-0 board: SHVC-1A1M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x800 content: Save game sha256: a2c1970670e2831e47e24ced01bf4ba5aba05cac3773bf524c62d689c35687e1 title: Lester the Unlikely name: Lester the Unlikely region: SNS-LY-USA revision: SNS-LY-0 board: SHVC-1J0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 3bc5f296c3dbee012e93a5cf25568f9288ce87b34d74085401a560350eaca03f title: Lethal Enforcers name: Lethal Enforcers region: SNS-LK-USA revision: SNS-LK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 80c22cc92d51a54de9cd9fd00db5ff58a35fff35e822169c94e445d50834fba3 title: Lethal Weapon name: Lethal Weapon region: SNS-L3-USA revision: SNS-L3-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8fcb9c34aea863d49ff08a0ace3f83d301b81f01e2ede28bee7e6d778878d0cc title: Liberty or Death name: Liberty or Death region: SNS-7L-USA revision: SNS-7L-0 board: SHVC-2J3M-01 memory type: ROM size: 0x140000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 457abe634e0a8be03e29513a3dca8f3e9d0ddc6bf97d8931f2316094260f3712 title: The Lion King name: Lion King, The region: SNS-ALKE-USA revision: SNS-ALKE-0 board: MJSC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 0e2ba574ff73587f211c8f818d444631584832e9240548f003171c11b898ad62 title: Lock On name: Lock On region: SNS-AZ-USA revision: SNS-AZ-0 board: SHVC-1K0N-01 memory type: ROM size: 0x80000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 76ba0fc1f5c1f39354bb3173a600f23915f1191f400f7d525d220b4b3c8d958d title: Looney Tunes B-Ball name: Looney Tunes B-Ball region: SNS-ALTE-USA revision: SNS-ALTE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 62557ee2a3fc3b5a3f59431f966eb61bb380ba983ef6c7742cb55cf075f15f6c title: The Lord of the Rings: Volume 1 name: Lord of the Rings, The - Volume 1 region: SNS-64-USA revision: SNS-64-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: ab3d97c1a3a979e1680a428ec65df54cfb72997bbfe2173292248a4fa8c51ba1 title: Lost Vikings 2 name: Lost Vikings 2 region: SNS-ALVE-USA revision: SNS-ALVE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 9f7782a92fda789f9d119b1f0a2f7da0f35606357556a48eca9487797ee1a888 title: The Lost Vikings name: Lost Vikings, The region: SNS-LV-USA revision: SNS-LV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 73731a5a7932965de02a9e98055dcf88b4d17b8f710a6ecfde3e36a1f248773b title: Lufia & The Fortress of Doom name: Lufia & The Fortress of Doom region: SNS-ES-USA revision: SNS-ES-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7c34ecb16c10f551120ed7b86cfbc947042f479b52ee74bb3c40e92fdd192b3a title: Lufia II: Rise of the Sinistrals name: Lufia II - Rise of the Sinistrals region: SNS-ANIE-USA revision: SNS-ANIE-0 board: SHVC-1A3M-30 memory type: ROM size: 0x280000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7e77e196db47e87a5b297e60f0dfa7ce41df8d2d1fdd9152e06628d0b0e586af title: Madden NFL '94 name: Madden NFL '94 region: SNS-9M-USA revision: SNS-9M-0 board: SHVC-1J0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 0ad77ae7af231313e1369a52d1622b88e3751aa5ec774628df7071f9e4244abc title: Madden NFL '95 name: Madden NFL '95 region: SNS-ANLE-USA revision: SNS-ANLE-0 board: SHVC-1J3M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3059d86cdc383985c564a7a891fe18e08f5222ead7ede9fa309159d60cde13a1 title: Madden NFL '96 name: Madden NFL '96 region: SNS-A6FE-USA revision: SNS-A6FE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 6874568d985f65dd817d4b03998e71c8cbacc8d8707411fde7bffee350605a88 title: Madden NFL '97 name: Madden NFL '97 region: SNS-A7NE-USA revision: SNS-A7NE-0 board: EA-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e3c62c9fe55d2311aa6a264f41b45d6cbc7b1b069ed3aa82ee57d381c062547d title: Madden NFL '98 name: Madden NFL '98 region: SNS-A8NE-USA revision: SNS-A8NE-0 board: EA-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c01fb8989d391d3e343003934937f02bd8ef9aacdad68c32c3d3f56feb72f5b0 title: Magic Boy name: Magic Boy region: SNS-YG-USA revision: SNS-YG-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 1d3cceaa05e054b002caeb09fd5fb9e718ec446764f4169d97bc185da76fdf4d title: Magic Sword name: Magic Sword region: SNS-MD-USA revision: SNS-MD-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: f301bb8ea867e530ecb64e8eff504ed5b9697cf076c70e2036ecf2ffbe6c487a title: The Magical Quest Starring Mickey Mouse name: Magical Quest Starring Mickey Mouse, The region: SNS-MI-USA revision: SNS-MI-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 8267e2f092c86d5a29c9a826db82c7473638e28e2507cdaf5c86981f07cd0bef title: Mario is Missing! name: Mario is Missing! region: SNS-MU-USA revision: SNS-MU-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: e842cac1a4301be196f1e137fbd1a16866d5c913f24dbca313f4dd8bd7472f45 title: Mario Paint name: Mario Paint region: SNS-MP-USA revision: SHVC-MP-0 board: SHVC-1A5M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 22b21fb39d40447846f6ff77a07f7b4aba2a7473941ba50c787aae6153b1fb5e title: Mario's Early Years: Fun with Letters name: Mario's Early Years - Fun with Letters region: SNS-AMYE-USA revision: SNS-AMYE-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 57b94f5f576abbe8bd8f5a4eeb6cf927300ec1b5f0596610f3539ba733505c12 title: Mario's Early Years: Fun with Numbers name: Mario's Early Years - Fun with Numbers region: SNS-YR-USA revision: SNS-YR-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: c646b1e60e2cd5a2741915f5d3dfe3c17f45ff7283f8052e840bd4354b0990e1 title: Mario's Early Years: Preschool Fun name: Mario's Early Years - Preschool Fun region: SNS-AMEE-USA revision: SNS-AMEE-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 4b69d4958e099c3b3f6ae45e153ced9b24755d8c161dfee06c9f67886a7c0f09 title: Mario's Time Machine name: Mario's Time Machine region: SNS-8M-USA revision: SNS-8M-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 908440f96fd0df14602fc6d1daee8519fc31f765ad00bf64aaba35c2c6ef0b56 title: Mark Davis' The Fishing Master name: Mark Davis' The Fishing Master region: SNS-AOAE-USA revision: SNS-AOAE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 49dd77b310b476c875633335243553be59ecfb0bffae62e46f2e53ff05c20fcd title: Marvel Super Heroes in War of the Gems name: Marvel Super Heroes in War of the Gems region: SNS-AHZE-USA revision: SNS-AHZE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 2731f0bd1c87e75121f41d1ed5cc9fbf177f414b8bf831c76fd9c4b58c86ed08 title: Mary Shelley's Frankenstein name: Mary Shelley's Frankenstein region: SNS-AFRE-USA revision: SNS-AFRE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 44cc113ce1e7616cc737adea9e8f140436c9f1c3fba57e8e9db48025d4ace632 title: The Mask name: Mask, The region: SNS-AMGE-USA revision: SNS-AMGE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 22453182d44380f08004a12c6492a0c4b2e1f584e268dcc3296a03ea03ae0909 title: Math Blaster: Episode One name: Math Blaster - Episode One region: SNS-AMME-USA revision: SNS-AMME-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a203a13870eaec92095daef1196a0c9fe8416e600504d55dd0dc724d4f5f5cb0 title: Maui Mallard in Cold Shadow name: Maui Mallard in Cold Shadow region: SNS-AZBE-USA revision: SNS-AZBE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x300000 content: Program game sha256: c3c4afdeb67136619c643bd9a9f3fe90337541a40745503b5d4eb9b9e6e64b67 title: Mecarobot Golf name: Mecarobot Golf region: SNS-TS-USA revision: SNS-TS-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 2a08704748f5ef6488348c4099729feca600412d331bda3756e51efd8b94e113 title: MechWarrior name: MechWarrior region: SNS-WM-USA revision: SNS-WM-0 board: SHVC-1A1B-06 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 7bffa1dc31604fa3d61e06ce2c59168098cc8dd7e59998e1d5f30c49bdf8d617 title: MechWarrior 3050 name: MechWarrior 3050 region: SNS-A35E-USA revision: SNS-A35E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x180000 content: Program game sha256: a255fec32453739903a1954149f19bc9658f4a415600b44badf1d4e5e13a16f9 title: Mega Man 7 name: Mega Man 7 region: SNS-A7RE-USA revision: SNS-A7RE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: cf4d603dc0a3759da571224c671a9bfd29f9e52ca8dbb61bcc8ac8be5481e9b2 title: Mega Man Soccer name: Mega Man Soccer region: SNS-RQ-USA revision: SNS-RQ-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 3e1209f473bff8cd4bcbf71d071e7f8df17a2d564e9a5c4c427ee8198cebb615 title: Mega Man X name: Mega Man X region: SNS-RX-USA revision: SNS-RX-0 board: SHVC-2A0N-01 memory type: ROM size: 0x180000 content: Program game sha256: b8f70a6e7fb93819f79693578887e2c11e196bdf1ac6ddc7cb924b1ad0be2d32 title: Mega Man X name: Mega Man X region: SNS-RX-USA revision: SNS-RX-1 board: MAXI-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: da484f2a636b8d692840f40e5468e992c5f2af26d365c69fbc12ef2923588d23 title: Mega Man X2 name: Mega Man X2 region: SNS-ARXE-USA revision: SNS-ARXE-0 board: SHVC-2DC0N-01 memory type: ROM size: 0x180000 content: Program memory type: ROM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 memory type: RAM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 volatile oscillator frequency: 20000000 game sha256: b2aa2c0a621dfbed3b528de93282fc91abb16325d358680d34753d43629263cf title: Mega Man X3 name: Mega Man X3 region: SNS-AR3E-USA revision: SNS-AR3E-0 board: SHVC-1DC0N-01 memory type: ROM size: 0x200000 content: Program memory type: ROM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 memory type: RAM size: 0xc00 content: Data manufacturer: Hitachi architecture: HG51BS169 identifier: Cx4 volatile oscillator frequency: 20000000 game sha256: d4f2cb6b209db29f7aec62e5a23846681c14665fb007e94d7bcfc7b5611e938b title: Metal Combat: Falcon's Revenge name: Metal Combat - Falcon's Revenge region: SNS-KD-USA revision: SNS-KD-0 board: SHVC-2E3M-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0a9609a505dd1555006b16f53d961b3ce50c518aa1597a77dcd46e55ecc716ff title: Metal Marines name: Metal Marines region: SNS-6M-USA revision: SNS-6M-0 board: SHVC-2A0N-01 memory type: ROM size: 0x180000 content: Program game sha256: 057484558ebd18165f98e556b994080535e31cefdd98b5edb190516f7040fc9d title: Metal Morph name: Metal Morph region: SNS-AMHE-USA revision: SNS-AMHE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 0d7f875877fe856066cfb39b4ecdbbe7d48393a75770720876c94419f809bb1c title: Metal Warriors name: Metal Warriors region: SNS-AWME-USA revision: SNS-AWME-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 88545d24c60c18c695cc3fce8c4074f46ad1bac905e8a39a61d8a6ae6b608621 title: Michael Andretti's Indy Car Challenge name: Michael Andretti's Indy Car Challenge region: SNS-AMAE-USA revision: SNS-AMAE-0 board: SHVC-1K0N-01 memory type: ROM size: 0x100000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 1b425ea5a883b7464637b74c2937fde699ffff52b53ad6940a66285e0663194a title: Michael Jordan: Chaos in the Windy City name: Michael Jordan - Chaos in the Windy City region: SNS-AWCE-USA revision: SNS-AWCE-0 board: SHVC-2J0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 0773eb741ce28f963f767fc7dd44678eb3d37ed4dc7fc82bb9cce7d55f1cfc64 title: Mickey Mania: The Timeless Adventures of Mickey Mouse name: Mickey Mania - The Timeless Adventures of Mickey Mouse region: SNS-AMIE-USA revision: SNS-AMIE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: add082caffe707df2c0259489c3e272d6557ab07ba3ff856cbc0adba0d7db6a5 title: Mickey's Ultimate Challenge name: Mickey's Ultimate Challenge region: SNS-6U-USA revision: SNS-6U-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a2adeb4bf0e7cc943611ac726e5578da404373a79e91436c9bbd15480688b15c title: Micro Machines name: Micro Machines region: SNS-AH3E-USA revision: SNS-AH3E-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 835ded9479f0e7babae00405d85233d767e82fa247aa1a9cdc14fd1f147b62ef title: Might & Magic III: Isles of Terra name: Might & Magic III - Isles of Terra region: SNS-3H-USA revision: SNS-3H-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 624a66607caef2ca34920ea15b84b28cdd1916ee089d496cec4f1d43621fdbb3 title: Mighty Morphin Power Rangers name: Mighty Morphin Power Rangers region: SNS-52-USA revision: SNS-52-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 1b85c0690aa156a255c7f79e133e453345452698fa98abf8df744c262d0cf865 title: Mighty Morphin Power Rangers: The Fighting Edition name: Mighty Morphin Power Rangers - The Fighting Edition region: SNS-A3RE-USA revision: SNS-A3RE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: c706b70097c679f6f0ced6f77a30620807d0b2555fc3c683c0ec2fc791176039 title: Mighty Morphin Power Rangers: The Movie name: Mighty Morphin Power Rangers - The Movie region: SNS-A2RE-USA revision: SNS-A2RE-0 board: SHVC-2A0N-20 memory type: ROM size: 0x180000 content: Program game sha256: 8546dfc91f6256df8b21083531457e3edf0021da12fce6858e2c59ff239c31da title: The Miracle Piano Teaching System name: Miracle Piano Teaching System, The region: SNS-MR-USA revision: SNS-MR-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: d32f194e27d177e64bf3bda046889b8198276fca2e8772e4b02a17152e9273e4 title: MLBPA Baseball name: MLBPA Baseball region: SNS-XH-USA revision: SNS-XH-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8715a641f2e4dd8b6066be7f2683d9129fff3fcccaf0a09cc8bdd2aa56460764 title: Mohawk & Headphone Jack name: Mohawk & Headphone Jack region: SNS-AJYE-USA revision: SNS-AJYE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 480ae7186fd5b28200cd88e136b9cd3b6600d32508e280a0bc27ea0ed8d3c0bb title: Monopoly name: Monopoly region: SNS-ML-USA revision: SNS-ML-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 6b0ac4d52d24536cdb7d9d0dc7d19ee30d08ac34363983290c5912ccc850fa0d title: Monopoly name: Monopoly region: SNS-ML-USA revision: SNS-ML-1 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 3c6d3e4a9c9af160f1c1cf11ce4ead531d9500c1f58f1cbe682c90a5eaa3efb2 title: Mortal Kombat name: Mortal Kombat region: SNS-KX-USA revision: SNS-KX-0 board: SHVC-2A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 417874aa57856fe93eefdb24066fa1a9ca3f23c72c09d5247ae2b3ab4b3d09d1 title: Mortal Kombat 3 name: Mortal Kombat 3 region: SNS-A3ME-USA revision: SNS-A3ME-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 43e36a74fb73a7efc46b380599e269b1fff8f55ecf80f5cf50c34d02ceda041a title: Mortal Kombat II name: Mortal Kombat II region: SNS-28-USA revision: SNS-28-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: ca2f86ca77f822fcd8e86f5a287f2a76d0becbb81a7bce73ae22909beb2f834c title: Mortal Kombat II name: Mortal Kombat II region: SNS-28-USA revision: SNS-28-1 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 340293c06536d7b6981ad7c681e404f4390ff6c62340f844a4558877c1b82af0 title: Mr. Do! name: Mr. Do! region: SNS-AUNE-USA revision: SNS-AUNE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x40000 content: Program game sha256: 3472dd574b50aed2fa998f464398db4fbb00f5a300a672c3737ee9336a008a16 title: Mr. Nutz name: Mr. Nutz region: SNS-N8-USA revision: SNS-N8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 007735e68a91cab403f1c955d9d562e9311124e660fa5b32e5c5d0a2e052160e title: Ms. Pac-Man name: Ms. Pac-Man region: SNS-AN8E-USA revision: SNS-AN8E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x40000 content: Program game sha256: f292598ac462fdfcd32ad9b6b35ac01d4bab020391dff92bfe94780ec604289a title: Musya: The Classic Japanese Tale of Horror name: Musya - The Classic Japanese Tale of Horror region: SNS-MY-USA revision: SNS-MY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8d4ada4f98464d176ae7f0fb8a20032056680f3241637a0f903f23f31f41ff36 title: Mutant Chronicles: Doom Troopers name: Mutant Chronicles - Doom Troopers region: SNS-AM9E-USA revision: SNS-AM9E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 22d2260de02552b1205aac2ff5a202a4c80532ac28045ef5a058d88279ab758e title: Natsume Championship Wrestling name: Natsume Championship Wrestling region: SNS-7W-USA revision: SNS-7W-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: c70b812a9d2df7f95b279e4050e03a4b8a68588a370816e645f378296b84e5d1 title: NBA All-Star Challenge name: NBA All-Star Challenge region: SNS-NB-USA revision: SNS-NB-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 5874b942f974bb906d8cbc33b601a1faf8f14aee8d0995124c8dc84bb4973808 title: NBA Give 'n Go name: NBA Give & Go region: SNS-ANJE-USA revision: SNS-ANJE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: af2fe0627de2bb2672f4f65dcbdaaee22b211275f679f123d5fa5d37fd699363 title: NBA Hang Time name: NBA Hang Time region: SNS-AXGE-USA revision: SNS-AXGE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0f18c496426bb97fe5e8b91ad5299f0b1c3898ac17047b745c86b167c212ab7a title: NBA Jam name: NBA Jam region: SNS-8N-USA revision: SNS-8N-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: b257cffb3484e6be051a56268cb99ee888bd6d3e9c0e8d6d0779ff66c411f6ba title: NBA Jam: Tournament Edition name: NBA Jam - Tournament Edition region: SNS-AJTE-USA revision: SNS-AJTE-0 board: SHVC-BA1M-01 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 2115c39f0580ce19885b5459ad708eaa80cc80fabfe5a9325ec2280a5bcd7870 title: NBA Live '95 name: NBA Live '95 region: SNS-ANBE-USA revision: SNS-ANBE-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 2d6fc4214245684a8f8f9bb553de637b7c660919ec775bfe3baaf74060c9157e title: NBA Live '96 name: NBA Live '96 region: SNS-A6BE-USA revision: SNS-A6BE-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4b945493d28653d5d047a375136ec9792f27e652be4af00e2c03c40369bd6ecf title: NBA Live '97 name: NBA Live '97 region: SNS-A7LE-USA revision: SNS-A7LE-0 board: EA-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 1d1b257dcf859cc412d3a9521fc58dc876a5917e6a69cd1d960a8e9840454bb4 title: NBA Live '98 name: NBA Live '98 region: SNS-A8LE-USA revision: SNS-A8LE-0 board: EA-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 6a7324734004d99206439430243b51a05fa8c25ffa314dafc7f127235d1a730f title: NBA Showdown name: NBA Showdown region: SNS-6N-USA revision: SNS-6N-0 board: SHVC-1A3M-10 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 351587366eca8aeb38236e4ad6cbd4a1b6e37b8cc592725a79249c3a054fa3a7 title: NCAA Basketball name: NCAA Basketball region: SNS-DU-USA revision: SNS-DU-0 board: SHVC-1A1B-06 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 8ef5d5c50ffeca1e62e88e4fe2909eaf191e28fbb5a9faf98b7b10bea72c9ed9 title: NCAA Basketball name: NCAA Basketball region: SNS-DU-USA revision: SNS-DU-1 board: SHVC-1A1B-06 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: d297c76efbcd9a528d8ee51025f8774ab2cb6bbc676c24e28592c50f47e71bfc title: NCAA Final Four Basketball name: NCAA Final Four Basketball region: SNS-AFIE-USA revision: SNS-AFIE-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 8c43b7c2f2ef1fca9237c64c2f4c9e98d1a48940dae500ce8eac71278d34efb3 title: NCAA Football name: NCAA Football region: SNS-AFBE-USA revision: SNS-AFBE-0 board: SHVC-1A1M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 489d6d704d3d917d9b46ce382230700419983a8d0d61a98fe07e08c935522dde title: Newman-Haas IndyCar featuring Nigel Mansell name: Newman-Haas IndyCar featuring Nigel Mansell region: SNS-ANME-USA revision: SNS-ANME-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: f651a42bb351f7691b880827178c36fcf6c265c7833c6de1d94f7ed69bac0517 title: NFL Football name: NFL Football region: SNS-NF-USA revision: SNS-NF-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 6a59115a9958d4a9fa167095505a2ddf222ca6291209d07618319e39a2be8b61 title: NFL Quarterback Club name: NFL Quarterback Club '95 region: SNS-Q9-USA revision: SNS-Q9-0 board: SHVC-1A1M-11 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x800 content: Save game sha256: f43f8ec546b8060e9d191fca860c38caf5a43eda86a304f0073647c6fad7b2c9 title: NFL Quarterback Club '96 name: NFL Quarterback Club '96 region: SNS-AQBE-USA revision: SNS-AQBE-0 board: SHVC-1A1M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 5132e1c0d466963e6adc09e8a608ebd90619ab94f7fc908d626bbaf6a99dfa19 title: NHL '94 name: NHL '94 region: SNS-4H-USA revision: SNS-4H-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 01c0b58d5fd5d5484fea988455a55a71ed9e606538d2b3ce3f216159cc6929b0 title: NHL '95 name: NHL '95 region: SNS-ANHE-USA revision: SNS-ANHE-0 board: SHVC-1J3M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: d24c0175ee4eafed88e277691c5f5dafd4e197723097e2eb68aa6b40f449fff2 title: NHL '96 name: NHL '96 region: SNS-A6HE-USA revision: SNS-A6HE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 2a2dc2ef84efd9a773d1e8231b7e3e57f0de7e4528968670963f2f1f358eef39 title: NHL '97 name: NHL '97 region: SNS-AH7E-USA revision: SNS-AH7E-0 board: SHVC-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0d933149242a2a5278b9ada9294481db5b30aaa134c660951dc340bf8ab441e8 title: NHL '97 name: NHL '97 region: SNS-AH7E-USA revision: SNS-AH7E-1 board: SHVC-1J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 8113c2cedafc8fd5a56c8638ae340fb275f263ff5c5e18d04dc6c3ebc5cfffee title: NHL '98 name: NHL '98 region: SNS-A8HE-USA revision: SNS-A8HE-0 board: SHVC-1J5M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: d44f487d84f5bb761955b7b70a5464b2f094e199875f595f312c88e04ac647ff title: NHL Stanley Cup name: NHL Stanley Cup region: SNS-NH-USA revision: SNS-NH-0 board: SHVC-1A1M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 55f3432a130085c112d65aa6443c41eb7a8aeec59aad2c2b4b2ac536b604b449 title: NHLPA Hockey '93 name: NHLPA Hockey '93 region: SNS-HY-USA revision: SNS-HY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: d7ad6f67860da78fe25d9e79dd13af7ac7efaa0c8e0103898a4849ab4af9e438 title: Nickelodeon GUTS name: Nickelodeon GUTS region: SNS-ANGE-USA revision: SNS-ANGE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: ce9c819d6496e58901b39d9b04558a89e09ccc3aac33690b8d02bb0406682a57 title: Nigel Mansell's World Championship Racing name: Nigel Mansell's World Championship Racing region: SNS-M8-USA revision: SNS-M8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: fccc96af24a2463b1c53253e1c5c8ef63641355fae53c0fb410427f29743262b title: Ninja Gaiden Trilogy name: Ninja Gaiden Trilogy region: SNS-ANRE-USA revision: SNS-ANRE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: 3c109e50b91ec6df3bb8509778ae544c99433fb40dda9b801178dfe513053618 title: Ninja Warriors name: Ninja Warriors region: SNS-NI-USA revision: SNS-NI-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: f099937ac4c8afb38c517c5d85475224985fb8f345dacb44994a617ea05bf4e5 title: No Escape name: No Escape region: SNS-ANOE-USA revision: SNS-ANOE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 437ea48711d54c2275286170a17948cb57ba9d961ba475715c0dba5fbd61a2db title: Nobunga's Ambition name: Nobunga's Ambition region: SNS-NZ-USA revision: SNS-NZ-0 board: SHVC-1J3M-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: ae572a51ebe429cfc06a3b75d7db9581f2884f9adc78827dc162b4c4ddc6ce2d title: Nobunga's Ambition: Lord of Darkness name: Nobunga's Ambition - Lord of Darkness region: SNS-IZ-USA revision: SNS-IZ-0 board: SHVC-1A5M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 7f3d0ebac6ecfb99cfd1d5b13210e989df9e8b2f2319a63c42faef8ad115a964 title: Nolan Ryan's Baseball name: Nolan Ryan's Baseball region: SNS-NR-USA revision: SNS-NR-0 board: SHVC-1A3B-12 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 9712829b38f23229d4e3d65da78237659c790235f425c6b12487e4d9e9a37ae9 title: Nosferatu name: Nosferatu region: SNS-NS-USA revision: SNS-NS-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 31bc862ab0a8eabf23b5124e13940cb3501e7ecdd3f15e34142248ceb4aa139a title: Obitus name: Obitus region: SNS-7B-USA revision: SNS-7B-0 board: SHVC-1A3M-21 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: b766c26498d0afd63f44aefdef42642d2483b54f18d2b81a4f1d67a57f641044 title: Ogre Battle: The March of the Black Queen name: Ogre Battle - The March of the Black Queen region: SNS-OB-USA revision: SNS-OB-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a137f4fc1c635f706d10e0c7927e71f52da171ce2d27394ce0deb451b5bed8ae title: Olympic Summer Games name: Olympic Summer Games region: SNS-AO9E-USA revision: SNS-AO9E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: e153195de7b59dd5b9854952cccca6bb93164e5fdff8292124bee6bbe5dbf16f title: On the Ball name: On the Ball region: SNS-CT-USA revision: SNS-CT-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 9e1a39aaf3585af0d6a5d79de3c35fcfe030c34bd4b09606a6fb8c7def19340b title: Operation Europe: Path to Victory 1939-45 name: Operation Europe - Path to Victory 1939-45 region: SNS-YP-USA revision: SNS-YP-0 board: SHVC-2J5M-01 memory type: ROM size: 0x140000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 190742792a950a112f893cba0e083eb787cf24293f698967defff929635ba0e7 title: Operation Logic Bomb name: Operation Logic Bomb region: SNS-IY-USA revision: SNS-IY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 5cbed0401734142184166917427d24f9e5f107a7adea665e2f4b4101491ad54b title: Operation Thunderbolt name: Operation Thunderbolt region: SNS-36-USA revision: SNS-36-0 board: SHVC-2J0N-11 memory type: ROM size: 0x140000 content: Program game sha256: 0c08e6b817e4d0b333acb910a0bde3d79bd2dc188defc5df9a7c1233fa81c98d title: Oscar name: Oscar region: SNS-AOZE-USA revision: SNS-AOZE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 582548dc86598a3557e9e3c27285c81964b006a954affe5c73948da5375ea11c title: Out of This World name: Out of This World region: SNS-TW-USA revision: SNS-TW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 54b2f03393109ac7fd36d8c7752f15a44d9607ab0187a371b853191db3592c01 title: Out to Lunch name: Out to Lunch region: SNS-P8-USA revision: SNS-P8-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: db44f8b58a31b640a47aa4390101c3c6a5f613e4e49c636d44786278033dec19 title: Outlander name: Outlander region: SNS-LD-USA revision: SNS-LD-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 10c8abce67b49f8afbe880d2f13e0fd6d5efc162df34d5941e4a94851f23b2ff title: Pac-Attack name: Pac-Attack region: SNS-P9-USA revision: SNS-P9-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 7fe4cb9c294d66589ff78e225774471ecb7db80df25f2b6199ca25671358072b title: Pac-in-Time name: Pac-in-Time region: SNS-APTE-USA revision: SNS-APTE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 4cb52ba751c42d9e12ca429e5d657622a370b608002880a997f64de453f0de20 title: Pac-Man 2: The New Adventures name: Pac-Man 2 - The New Adventures region: SNS-25-USA revision: SNS-25-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 83727f6954bce024edac7f3fd18a6fbf63d05b580f692d96faa37e60893c91cd title: P.T.O.: Pacific Theater of Operations name: Pacific Theater of Operations region: SNS-TK-USA revision: SNS-TK-0 board: SHVC-2A5M-01 memory type: ROM size: 0x140000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 2c6119fbe40d23576adde568d60ffae793bbf6b512f8fea8dcd0b1cd2623ef02 title: P.T.O. II: Pacific Theater of Operations name: Pacific Theater of Operations II region: SNS-ATEE-USA revision: SNS-ATEE-0 board: SHVC-1J5M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: b1586c8ece4da9697f0602a684d7a9108027247a34652c3771831d31f82ee078 title: Packy & Marlon name: Packy & Marlon region: SNS-APYE-USA revision: SNS-APYE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: ecaf51852e111512385c5f209d51578e65b45fcaa17b295ca06120c8d1464520 title: The Pagemaster name: Pagemaster, The region: SNS-APME-USA revision: SNS-APME-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 46286d0839a4397fc4c067b39783f98d2aefeca870a468bae601a1434f1dde90 title: Paladin's Quest name: Paladin's Quest region: SNS-LN-USA revision: SNS-LN-0 board: SHVC-2A3M-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 7cec4ffc3eda0441561717cf55927901b5fbbd669c254079f78ca74c67c4a17b title: Paperboy 2 name: Paperboy 2 region: SNS-P2-USA revision: SNS-P2-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: c414a4084b3d03aba19496d2efdd68fcf826194d8f1308f5c98e3a7af2fcc063 title: The Peace Keepers name: Peace Keepers, The region: SNS-R6-USA revision: SNS-R6-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 5abfb974ca0e56aabb3f4126817d14a546c57a5a5c6042d31196063d80996698 title: PGA European Tour name: PGA European Tour region: SNS-AEPE-USA revision: SNS-AEPE-0 board: SHVC-1L3B-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: 571d3129350bfb7cca2285499cf31dda48d1047cf9eaef122c8c33dffa9ad296 title: PGA Tour '96 name: PGA Tour '96 region: SNS-A3GE-USA revision: SNS-A3GE-0 board: SHVC-1L3B-02 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: 5c0b5266a191852ca593235f07180e673cb79e3f0b0dd31f65808eef83bf6e90 title: PGA Tour Golf name: PGA Tour Golf region: SNS-PG-USA revision: SNS-PG-0 board: SHVC-1A3B-12 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0663330bc061f4b768fa1806610878ef6e6cf546f36041ae087c8e55703693b8 title: Phalanx: The Enforce Fighter A-144 name: Phalanx - The Enforce Fighter A-144 region: SNS-PH-USA revision: SNS-PH-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: b7291088f5c49e1fc55bf932076ec03f7b39f6e409ae06e884b57024c56cdc87 title: Phantom 2040 name: Phantom 2040 region: SNS-A24E-USA revision: SNS-A24E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a0b39d7fd7c39c5b0f41f3542fb8d2887530ded1c111b4ffb2a863845e704ecc title: Pieces name: Pieces region: SNS-Z5-USA revision: SNS-Z5-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 724144e34990069213591b5df067dd437a613b30f669840e9098db1dce626d2d title: Pilotwings name: Pilotwings region: SNS-PW-USA revision: SNS-PW-0 board: SHVC-1B0N-02 memory type: ROM size: 0x80000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 3a52bf09850aa054dca443f7ea74d43f201dffecc40326924ecba9b0f1450e43 title: Pinball Dreams name: Pinball Dreams region: SNS-7D-USA revision: SNS-7D-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0888d20ab2f834c77b0a2dc2162c43890a1640adc78c6b0bb5892ca8d5008ad3 title: Pinball Fantasies name: Pinball Fantasies region: SNS-APFE-USA revision: SNS-APFE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: d0f4a5040ecf96dc49aa0084160e291a38f2ee75319750db4d6687ab36828da9 title: Pink Goes to Hollywood name: Pink Goes to Hollywood region: SNS-YW-USA revision: SNS-YW-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 98c51c3bb577600fe79577c323333a791baa30904f37c695890e6e380b75e3c8 title: Pinocchio name: Pinocchio region: SNS-ACGE-USA revision: SNS-ACGE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 447dfa710e69479159e9d407474fbf5f67d3a3330ab0c7627afd123ded3fdb3a title: The Pirates of Dark Water name: Pirates of Dark Water, The region: SNS-8P-USA revision: SNS-8P-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: c2a1a66648a0a0bfe2f201cf4f926d138e410fbf85ecf436ccb9aac70c0df3de title: Pit-Fighter name: Pit-Fighter region: SNS-PF-USA revision: SNS-PF-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: e03d117d8b3093b0bbad5224638f85378b254b81eb304e506a732b4338802e0f title: Pitfall: The Mayan Adventure name: Pitfall - The Mayan Adventure region: SNS-APAE-USA revision: SNS-APAE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 0b3b0fd42bbe06a812053df376b183412fc0de335c4b7cb8e45f3fe47b0044e9 title: Plok name: Plok region: SNS-P4-USA revision: SNS-P4-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 72b2b3bead3fcd27a1610ad5d4d8be3235efeaff96df2e7858911992a5892d21 title: Pocky & Rocky name: Pocky & Rocky region: SNS-KK-USA revision: SNS-KK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: cc33ae02114ea18a86592de327b2b4bcc80728b11a5e4c61666dca71480d4169 title: Pocky & Rocky 2 name: Pocky & Rocky 2 region: SNS-29-USA revision: SNS-29-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 5e580f220ed16281df8ee9a5f450b553f39f8c4078d3f3048d66bda15f98e19f title: Populous name: Populous region: SNS-PO-USA revision: SNS-PO-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: ee9759fdb590ba908f569c2bb8a63703d282b58b84bd1fe0a472ea47685acdc5 title: Porky Pig's Haunted Holiday name: Porky Pig's Haunted Holiday region: SNS-APPE-USA revision: SNS-APPE-0 board: MAXI-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 06c8fc466805f97c9147711b2d8370d4f4d05d9fa3a916f17aa1682f73c9a63b title: Power Instinct name: Power Instinct region: SNS-AGKE-USA revision: SNS-AGKE-0 board: SHVC-BJ0N-20 memory type: ROM size: 0x280000 content: Program game sha256: 42ee7829d3db0213b718168c29674879bb4532573e9fb3450a5b417174a16ed0 title: Power Moves name: Power Moves region: SNS-P3-USA revision: SNS-P3-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0288ec049723cd0c7f1148cdc1aef0b6922b8a756affe373c99d5690e0dfceaa title: Power Piggs of the Dark Age name: Power Piggs of the Dark Age region: SNS-AOTE-USA revision: SNS-AOTE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 2e2a8c0da7f6def617077a25b222062f6988ef14b36b2edfe10d47c6a942d023 title: Power Rangers Zeo: Battle Racers name: Power Rangers Zeo - Battle Racers region: SNS-A4RE-USA revision: SNS-A4RE-0 board: SHVC-1L3B-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: 8f387d083de1399bb79e5312c31a6f1757f2a536bfa25cecf1aea77bfd77058b title: Prehistorik Man name: Prehistorik Man region: SNS-APUE-USA revision: SNS-APUE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 55376715f243b1bacd9aeecf1092bbc7837fe512592a2c1703d24b0829fc1934 title: Primal Rage name: Primal Rage region: SNS-AR9E-USA revision: SNS-AR9E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 494190cd6d7fd68882cbe255a6e237d9c4bdaf3988615ede0297a5e285ad5dd9 title: Prince of Persia name: Prince of Persia region: SNS-PR-USA revision: SNS-PR-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 04ca1a481093c4a7e12f18b33697d6e05e50e30e0f5b1655aa265abd14719bba title: Prince of Persia 2: The Shadow and the Flame name: Prince of Persia 2 - The Shadow and the Flame region: SNS-AUPE-USA revision: SNS-AUPE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 85e2e58e1f99fce366c85d49f77446395584ca4959ef772a707fe454ed46c68f title: Pro Quarterback name: Pro Quarterback region: SNS-QB-USA revision: SNS-QB-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 00b5b3d3febd1a6f28ceb49e39cdd9476a944fe62ea3850808cdeafaaaa63040 title: Pro Sport Hockey name: Pro Sport Hockey region: SNS-UI-USA revision: SNS-UI-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 475c9baa1c2b76a6b3119e47d32814dc1c08e84e23250ae015bb0bccea915637 title: Push-Over name: Push-Over region: SNS-PV-USA revision: SNS-PV-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 89d57bf308033ef17f770a80080cbeed2d112244635d5b5f860f2016398cd2f6 title: Q*bert 3 name: Q-bert 3 region: SNS-Q3-USA revision: SNS-Q3-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 4d6c7d6d2693d8d43bafaff7582f9a94885362dadd9ee4012bbbdce1ba10c30e title: R-Type III: The Third Lightning name: R-Type III - The Third Lightning region: SNS-ER-USA revision: SNS-ER-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: dd0feb78e2d5d81f59241baf3bca5e2edaebbe98f0ac860a4eb6d448718f1ca5 title: Race Drivin' name: Race Drivin' region: SNS-RV-USA revision: SNS-RV-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: edf990e502c646a2fe83fcd1d359ca0ed5003ace06cb4c3de5a51a0c56d6ec54 title: Radical Psycho Machine Racing name: Radical Psycho Machine Racing region: SNS-RP-USA revision: SNS-RP-0 board: SHVC-1A1B-05 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 1869c0faf93bf21b7ff965f1925fad4b2924a64b1e48f4837221eebdf741226c title: Radical Rex name: Radical Rex region: SNS-ARRE-USA revision: SNS-ARRE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 5fd7666e509f9d3cf1fd6b209dc22f2f3848f74eae7b83239d1090e031fc6df2 title: Raiden Trad name: Raiden Trad region: SNS-RD-USA revision: SNS-RD-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: e19f7d8d5c3e4cefeff5889380d8780495e01f0553d13be4182a15a5d4b615bb title: Rampart name: Rampart region: SNS-RM-USA revision: SNS-RM-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 32d32ef56af83887cdc2c04b3da4be1cd82a473988deaa2e7dd50d38ef79c3a1 title: Ranma ½: Hard Battle name: Ranma Half - Hard Battle region: SNS-R2-USA revision: SNS-R2-0 board: SHVC-2J0N-01 memory type: ROM size: 0x180000 content: Program game sha256: 920bbaaf6a32cab5feabb5bc8b2b427dccd53bfd31d0da8acb7ea4e819139e4f title: Rap Jam: Volume One name: Rap Jam - Volume One region: SNS-ARVE-USA revision: SNS-ARVE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 097cbe9720903bc14599158b80e0cc314ef2fe8a585d6d0a8962eb1626031492 title: Realm name: Realm region: SNS-ARQE-USA revision: SNS-ARQE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 549f2e5b17f685cad25ba71ce7bc6e004e7bfd09e6be12a827af9a9a26556fff title: Red Line: F-1 Racer name: Red Line - F1 Racer region: SNS-6R-USA revision: SNS-6R-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b2221d0a59a399e437710e1191a37071d0a59c72d8e62427cd499de8d8fd7b61 title: Relief Pitcher name: Relief Pitcher region: SNS-5R-USA revision: SNS-5R-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: d322ce440076be0e3678277596acee8089098f4397b35ac8b3df88be5ce5e02f title: The Ren & Stimpy Show: Buckeroo$! name: Ren & Stimpy Show, The - Buckeroo$! region: SNS-ARBE-USA revision: SNS-ARBE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 71e7083cfcf32b738f60f5eeffd4f9d1fd9250afbde0c56e22a4b97abac377a1 title: The Ren & Stimpy Show: Fire Dogs name: Ren & Stimpy Show, The - Fire Dogs region: SNS-6Y-USA revision: SNS-6Y-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: ad7dd4efb8836d4009f6c76bd21865d8f5dcf9c3cbd8fa7bb32d686488847120 title: The Ren & Stimpy Show: Time Warp name: Ren & Stimpy Show, The - Time Warp region: SNS-ARTE-USA revision: SNS-ARTE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x140000 content: Program game sha256: ba54d715abf100b94fee801351986fa818e4309730cefbacf9b4fad36e284c1c title: The Ren & Stimpy Show: Veediots! name: Ren & Stimpy Show, The - Veediots! region: SNS-V8-USA revision: SNS-V8-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 5fb072c3c2e9d8e7f84bea9c4bf2253e6868eb2b1f13e35a7d75fdf05896d873 title: Revolution X: Music is the Weapon name: Revolution X - Music is the Weapon region: SNS-AXRE-USA revision: SNS-AXRE-0 board: SHVC-2A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: f44482e2cccd9fcfd5875d84ff700f6e783f3bd8abd1ac4d939074cd6ad3fe65 title: Rex Ronan: Experimental Surgeon name: Rex Ronan - Experimental Surgeon region: SNS-XR-USA revision: SNS-XR-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: e3ea89964ee82d2ae1e5739b8503acf62732aedef28d1b3d5caa9ebae0feec06 title: Riddick Bowe Boxing name: Riddick Bowe Boxing region: SNS-XG-USA revision: SNS-XG-0 board: SHVC-1A1M-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: cce455b7074f62ffdb41863ee8c160ea06f7acd028837666329bc1e0c3567ad0 title: Rise of the Phoenix name: Rise of the Phoenix region: SNS-QG-USA revision: SNS-QG-0 board: SHVC-2J3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 38be8013bbe07b2020ba30031fb0a2c77bad8a3eb61fac8217adfe82d6c402af title: Rise of the Robots name: Rise of the Robots region: SNS-AROE-USA revision: SNS-AROE-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x400000 content: Program game sha256: 3f59cc687d22cd1b23cc33ae6e4518234c9da813c01f79f4c43716e12d32a12d title: Rival Turf! name: Rival Turf! region: SNS-RB-USA revision: SNS-RB-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 864aa9068fb23cd20022a9ac36fb9082299278ea0cb07a20deec2b6a1c6cbc70 title: Road Riot 4WD name: Road Riot 4WD region: SNS-RR-USA revision: SNS-RR-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 2e8203e421f97cf165f03a5d4f69dadf0bcca18c42c6a1dfe79c8705c522cc54 title: Road Runner's Death Valley Rally name: Road Runner's Death Valley Rally region: SNS-DV-USA revision: SNS-DV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 055d9c6311a663af7c899a6f76a419c274c57baada3ef64c52fadb1c676b1446 title: RoboCop 3 name: RoboCop 3 region: SNS-R3-USA revision: SNS-R3-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: a2115e7576dec06e0de613efb89de861815a78ef72e78a3784be09fb7541928f title: RoboCop versus The Terminator name: RoboCop vs. The Terminator region: SNS-VR-USA revision: SNS-VR-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 1e2ded7b1e350449b7a99b7ec414525e4b9b086c416deeee5eb3e48e032c46bd title: Robotrek name: Robotrek region: SNS-E9-USA revision: SNS-E9-0 board: SHVC-2J3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 9d721753301278325c851f1843d669a697aed757dcf6495a31fc31ddf664b182 title: Rock n' Roll Racing name: Rock & Roll Racing region: SNS-RN-USA revision: SNS-RN-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: b072fd9b08042e3262446fdf418a41848251072a32bd7f8335cc03543c4ae6c8 title: The Rocketeer name: Rocketeer, The region: SNS-RK-USA revision: SNS-RK-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: cde8876b99c337ff932322506ceef05519e5882b853c54bb8c650d9500cd5957 title: Rocko's Modern Life: Spunky's Dangerous Day name: Rocko's Modern Life - Spunky's Dangerous Day region: SNS-8D-USA revision: SNS-8D-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 7c0f915b581796e5b6dd384ecdc0dad8af4d956492fbcedec628c8845d911d7e title: Rocky Rodent name: Rocky Rodent region: SNS-NP-USA revision: SNS-NP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: e21300c8c4170e084fd83ce4c842dd73f939fbd10ddfe47c9a49b6e291dcd52d title: Roger Clemens' MVP Baseball name: Roger Clemens' MVP Baseball region: SNS-VP-USA revision: SNS-VP-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: f7e3c3012af2dbad350646b6ef3470f0b4c42e4a2873109f7aa6c81d7157c887 title: Roger Clemens' MVP Baseball name: Roger Clemens' MVP Baseball region: SNS-VP-USA revision: SNS-VP-1 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 815bfcf4fd6eb23a20c2e50dde023c210b273ffb6cd86a93909d803c3643ce46 title: Romance of the Three Kingdoms II name: Romance of the Three Kingdoms II region: SNS-XL-USA revision: SNS-XL-0 board: SHVC-1A5B-04 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 88fa0a78ca98c6386e086c7fa9e81a2625bdecc55115dde6c6f4770b0670aa40 title: Romance of the Three Kingdoms III: Dragon of Destiny name: Romance of the Three Kingdoms III - Dragon of Destiny region: SNS-S3-USA revision: SNS-S3-0 board: SHVC-2J5M-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 9670c67eeeb5581fa5345025a2e2ee875179e0da9f5be4bf78641e477d785f17 title: Romance of the Three Kingdoms IV: Wall of Fire name: Romance of the Three Kingdoms IV - Wall of Fire region: SNS-AS4E-USA revision: SNS-AS4E-0 board: SHVC-1J5M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 4158e3e8890a52f0b12dc9ad5a29276058a247ff41e9f1d22897ebde1eb11269 title: Run Saber name: Run Saber region: SNS-RU-USA revision: SNS-RU-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 5db804171fca42486485ed85e4afe45b29e6d01304bdf75d520bfc42429739e3 title: Samurai Shodown name: Samurai Shodown region: SNS-A7SE-USA revision: SNS-A7SE-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x400000 content: Program game sha256: 34e1af0642c85148c5a3dc3c7ab4bcbda13a9fea190934b5526c555fff035651 title: Saturday Night Slam Masters name: Saturday Night Slam Masters region: SNS-ZW-USA revision: SNS-ZW-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 7fb5236d10852125f0f37c2188b907d636647400a57bccbdb2f63098ffae8b2d title: Scooby-Doo Mystery name: Scooby-Doo Mystery region: SNS-AXDE-USA revision: SNS-AXDE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: a4ab8cfad2f236675b1c0124f8484688e149f38e8628a3b38e9ec14d491ec07e title: SeaQuest DSV name: SeaQuest DSV region: SNS-ASQE-USA revision: SNS-ASQE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 17c864a76d498feb6479eee8e7d6807b951c66225033228622bb66754baab1db title: Secret of Evermore name: Secret of Evermore region: SNS-AEOE-USA revision: SNS-AEOE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4c15013131351e694e05f22e38bb1b3e4031dedac77ec75abecebe8520d82d5f title: Secret of Mana name: Secret of Mana region: SNS-K2-USA revision: SNS-K2-0 board: SHVC-1J3M-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e6bc0a595d5c7c4bc0bbb61ffe35a70288a77eb78544ed74682d489a9e6f07f4 title: Shadowrun name: Shadowrun region: SNS-WR-USA revision: SNS-WR-0 board: SHVC-1A3M-10 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: bdbcc53b266159b5a08e307e5b60fdb0cb5a1ba8f8c1c6c7f89d81eaf5133e85 title: Shanghai II: Dragon's Eye name: Shanghai II - Dragon's Eye region: SNS-DE-USA revision: SNS-DE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: c73757eea258e169e506eaef989227a59918060f94117917f338183db14c50b6 title: Shaq-Fu name: Shaq-Fu region: SNS-AQFE-USA revision: SNS-AQFE-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 454c580498a7d317ed61cb5863b1999eff57ad440ecd30ebb76e193c9c52f3ac title: Shien's Revenge name: Shien's Revenge region: SNS-OO-USA revision: SNS-OO-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: de2d5a952096c5f50368b9270d342aa6e7a39007ffbec27117e182e30ef4cf32 title: Sid Meier's Civilization name: Sid Meier's Civilization region: SNS-EQ-USA revision: SNS-EQ-0 board: SHVC-1J5M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: d09ca5adaee65cfd686742482bc55b1a3ce9bc5ebed61f24c5631555151a7fc7 title: Side Pocket name: Side Pocket region: SNS-4P-USA revision: SNS-4P-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: c0bd1b378337c32047a6b7122a3813beb646e496fbdb1fa5c87ab9856271e4c5 title: SimAnt: The Electronic Ant Colony name: SimAnt - The Electronic Ant Colony region: SNS-AN-USA revision: SNS-AN-0 board: SHVC-1A5M-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: e9c0bc05511e05a0d7c3e7cc42e761e1e8e532d46f59b9854b6902e1a2e9dd0a title: SimCity name: SimCity region: SNS-SC-USA revision: SNS-SC-0 board: SHVC-1A5B-02 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: bf74c58e4190faca2f3a967dc190fe529d13887d1262b72e057b5353e43cf67f title: SimCity 2000 name: SimCity 2000 region: SNS-AWWE-USA revision: SNS-AWWE-0 board: SHVC-1J5M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 446a1036d036986fdea7906c83832d3ba79ef63a6ed8c4e88b89ab9cb25daded title: SimEarth: The Living Planet name: SimEarth - The Living Planet region: SNS-SE-USA revision: SNS-SE-0 board: SHVC-1A3B-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: f0d98e9061d0f6a193bb856de8a592f336dada97c41966e8d03119ba97465413 title: The Simpsons: Bart's Nightmare name: Simpsons, The - Bart's Nightmare region: SNS-BN-USA revision: SNS-BN-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 29c28188234ddbb0b72fc84253dcd3514e23034779c773db8097b073b73390c8 title: The Simpsons: Virtual Bart name: Simpsons, The - Virtual Bart region: SNS-AVBE-USA revision: SNS-AVBE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 70008efe51185eb0a2f8d8d8ac2bdbb99bd3dfcc169dcc474962f82692998051 title: S.O.S.: Sink or Swim name: Sink or Swim region: SNS-9J-USA revision: SNS-9J-0 board: SHVC-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: e10070f01845505ae8bfdf7b5b492e7209c2ae876f169fb6ff420dea269f4da3 title: Skuljagger: Revolt of the Westicans name: Skuljagger - Revolt of the Westicans region: SNS-SL-USA revision: SNS-SL-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: a4ba1483db79c3f6278082387bce216d8f3e3b11ca32d49516d27f5ac07135a5 title: Skyblazer name: Skyblazer region: SNS-LZ-USA revision: SNS-LZ-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: cbca00fa5dfd6c72db2f21d010255657c33f7ac48de2554262035ead11bdf314 title: Smart Ball name: Smart Ball region: SNS-JB-USA revision: SNS-JB-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: f653b8308b617e1cba1caf004e5a670088b882e320fa6afcc7a29dd3b2dd0ea0 title: Snow White in Happily Ever After name: Snow White in Happily Ever After region: SNS-ASHE-USA revision: SNS-ASHE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6fe7c8d39fcfab7f0a18e837a7ee0dd162e0557d6989c6e0d10c81616d3a0b8b title: Soldiers of Fortune name: Soldiers of Fortune region: SNS-UD-USA revision: SNS-UD-0 board: SHVC-2J0N-01 memory type: ROM size: 0x180000 content: Program game sha256: 75a7b5b8ad0329dc828d3201089e125fd55fdfc99d4cec704ffcd7e3036c2410 title: Sonic Blast Man name: Sonic Blast Man region: SNS-SK-USA revision: SNS-SK-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: efe78f6fc68ddd0f6ef0ad9e0223d9417c14fcadece987dc8f50423fd6723b27 title: Sonic Blast Man II name: Sonic Blast Man II region: SNS-2C-USA revision: SNS-2C-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 8f0a7670fe53d30f721784e5fff78349eb157a9f0eb2246206f9d7db478b7c56 title: SOS name: SOS region: SNS-TT-USA revision: SNS-TT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8438da09de8ce9aded3bb08644543f7b60fb60cffc68ce2d67d6a0643f2ecfc2 title: Soul Blazer name: Soul Blazer region: SNS-SO-USA revision: SNS-SO-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 85887dfa92374048fb20809c00eabea428992024cf875d287d0431b9767cc7cb title: Space Ace name: Space Ace region: SNS-5A-USA revision: SNS-5A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 24f3f22949f36ebf8ab4beaa8cba22db107efe7a7585f749343f2860bf041fe1 title: Space Football: One on One name: Space Football - One on One region: SNS-FL-USA revision: SNS-FL-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: dc5353ddc350816619230f25f8c51bddabf7438e6dfba21662eb1c4794856735 title: Space Invaders name: Space Invaders region: SNS-IC-USA revision: SNS-IC-0 board: SHVC-1A0N-30 memory type: ROM size: 0x40000 content: Program game sha256: f5b7418c00ccac44615cfc57c7e17d57533837056886f6d733e6b714c36dec1f title: Space Megaforce name: Space Megaforce region: SNS-AT-USA revision: SNS-AT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 14dc44687c8da35aec63b9edadbaac21bf7293f5171646f614139192e82ab071 title: Spanky's Quest name: Spanky's Quest region: SNS-HJ-USA revision: SNS-HJ-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: eaa06470734ea57eff9b888137aa468fcb7bb149a0870a85e68c9db123de4670 title: Sparkster name: Sparkster region: SNS-ASSE-USA revision: SNS-ASSE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 32d0f1ca5b91fd9b2caf81422fb9e8fb30bc091f0b2a429b9269dd307fcba4fd title: Spawn name: Spawn region: SNS-A9WE-USA revision: SNS-A9WE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 22d0b7687d66436abaf447bb29558e43f562283ec4dbe744df7d79a3e27a2577 title: Spectre name: Spectre region: SNS-7Q-USA revision: SNS-7Q-0 board: SHVC-1A0N-20 memory type: ROM size: 0xe0000 content: Program game sha256: 54046ec1fc57f6165ad33080502f72809d1b06b438a5a0d0a80ffa2bb3df8b0b title: Speed Racer in My Most Dangerous Adventures name: Speed Racer in My Most Dangerous Adventures region: SNS-9S-USA revision: SNS-9S-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: df02d0f4f40e2732138309d38e91b48aef482490979007ecb63359a35115dfd4 title: Speedy Gonzales: Los Gatos Bandidos name: Speedy Gonzales - Los Gatos Bandidos region: SNS-ASEE-USA revision: SNS-ASEE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 68a51b7a06b6a9e7100a89521e52b5c467c46c828c0f6504bee677beac2aa6fd title: Speedy Gonzales: Los Gatos Bandidos name: Speedy Gonzales - Los Gatos Bandidos region: SNS-ASEE-USA revision: SNS-ASEE-1 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 964d21996e385e032b5d18baf716692ba1db780245cd71956c212045c1b8eb9a title: Spider-Man & Venom: Maximum Carnage name: Spider-Man & Venom - Maximum Carnage region: SNS-AMCE-USA revision: SNS-AMCE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: b72fbbfe737eff49f59dcef9f13b963e50c5bc322d7eb0e7b4c25f3a71aa0815 title: Spider-Man & Venom: Separation Anxiety name: Spider-Man & Venom - Separation Anxiety region: SNS-A2CE-USA revision: SNS-A2CE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x300000 content: Program game sha256: 63210a91573fa8e19592f2e6c746a400831d804c00453739447d2df32e731df7 title: Spider-Man & X-Men: Arcade's Revenge name: Spider-Man & X-Men - Arcade's Revenge region: SNS-MN-USA revision: SNS-MN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: f05d777e3de69aab18d336cac0af07f794f8d00090d085f86cebaed3679cabad title: Spider-Man: The Animated Series name: Spider-Man - The Animated Series region: SNS-ADME-USA revision: SNS-ADME-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: fe10238ae42ed9eb4d906a81dd50ebe585140982cdfe266308ce1f16e78e6903 title: Spindizzy Worlds name: Spindizzy Worlds region: SNS-SX-USA revision: SNS-SX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 8d3f20af0be588cf2edc39aee0d96d4085512919a05c0e90a7848e414cc20e42 title: The Sporting News Baseball name: Sporting News Baseball, The region: SNS-AWBE-USA revision: SNS-AWBE-0 board: SHVC-1J3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 254d17a82a32d8bd231ca3a87d356b65e65cb0229902a69a57c21a4c99bbba1f title: Sports Illustrated: Championship Football & Baseball name: Sports Illustrated - Championship Football & Baseball region: SNS-LU-USA revision: SNS-LU-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 3857b5294ea8f7468849437bb2d8271564e8a0ff30774622e9c872bcbd53a84d title: Star Fox name: Star Fox region: SNS-FO-USA revision: SNS-FO-0 board: SHVC-1C0N5S-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: 82e39dfbb3e4fe5c28044e80878392070c618b298dd5a267e5ea53c8f72cc548 title: Star Fox name: Star Fox region: SNS-FO-USA revision: SNS-FO-2 board: SHVC-1C0N memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: 2c0bac12a7866fad1cb306da768a201c12f2520332df1ef51cba1576db21ff06 title: Star Fox: Super Weekend name: Star Fox - Super Weekend region: SNS-FU-USA revision: SNS-FU-0 board: SHVC-1C0N memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x8000 content: Save volatile game sha256: 3a16ad45ae3d89b13c9e53e21c2a4c725ff7cec7fbe7896d538d163f92cb4aac title: Star Trek: Deep Space Nine - Crossroads of Time name: Star Trek - Deep Space Nine - Crossroads of Time region: SNS-A9DE-USA revision: SNS-A9DE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: b4d0b4a3fd73469f5469dfcc2316e50848ebf0630a225df2969c740759e321f4 title: Star Trek: Starfleet Academy - Starship Bridge Simulator name: Star Trek - Starfleet Academy - Starship Bridge Simulator region: SNS-ASTE-USA revision: SNS-ASTE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 22c907b56ac6f414365801ed375c3fbf75696ce7f34ec89e1724628dc5622957 title: Star Trek: The Next Generation - Future's Past name: Star Trek - The Next Generation - Future's Past region: SNS-XN-USA revision: SNS-XN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 9ffd95486904804aca1f7068c99f1c9e91c2c0e5474ec758df1a913393571cc7 title: Stargate name: Stargate region: SNS-AGTE-USA revision: SNS-AGTE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 91f938b4989215b1cd39635797f23b59b9d7b6d36e583f9eb69d022abe537bfc title: Steel Talons name: Steel Talons region: SNS-5S-USA revision: SNS-5S-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: e3b07a59f969ced91c4579bb459f2c747a6c3f12c45ae4776483ef4830f5f00f title: Sterling Sharpe: End 2 End name: Sterling Sharpe - End 2 End region: SNS-AS2E-USA revision: SNS-AS2E-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: dad9c116283322d5a13fd659874c681582abdff3df182cc4c90511d33fb7110a title: Stone Protectors name: Stone Protectors region: SNS-ASOE-USA revision: SNS-ASOE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: b4626cf0c876a124b50f9421c48a7d762e9ed808ad336c799d543d60b484897c title: Street Combat name: Street Combat region: SNS-RA-USA revision: SNS-RA-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 910a29f834199c63c22beddc749baba746da9922196a553255deade59f4fc127 title: Street Fighter Alpha 2 name: Street Fighter Alpha 2 region: SNS-AUZE-USA revision: SNS-AUZE-0 board: SHVC-1N0N-01 memory type: ROM size: 0x400000 content: Program game sha256: 2b34161e96ef3f0f48cecd67e531a9bb94310652d8686f301bac426e4ab97e77 title: Street Fighter II: The World Warrior name: Street Fighter II - The World Warrior region: SNS-S2-USA revision: SNS-S2-0 board: SHVC-1A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 3e487f8ba48c0b5e31744e3281d6bce375089db6075c8eb3d9a929376b817381 title: Street Fighter II Turbo: Hyper Fighting name: Street Fighter II Turbo - Hyper Fighting region: SNS-TI-USA revision: SNS-TI-0 board: SHVC-3J0N-01 memory type: ROM size: 0x280000 content: Program game sha256: 6756f92fe8e066be4b204cfdc94c1615ba6ece7e78fb5d2c77c81a9d298aa744 title: Street Hockey '95 name: Street Hockey '95 region: SNS-AHYE-USA revision: SNS-AHYE-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: d1f61b6bb4bb6879a4fbd2c82d77390c546ee7f821edddc884fb9cc7463ad79b title: Street Racer name: Street Racer region: SNS-ASRE-USA revision: SNS-ASRE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 05f14e6ed3394d9273e2397769a8acf1a9db646be6066e82269521e8eec53562 title: Strike Gunner S.T.G. name: Strike Gunner STG region: SNS-SG-USA revision: SNS-SG-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: c04d80b84514202ff319384ca20641eb0189e975eed5612915bd9c224b2ab30a title: Stunt Race FX name: Stunt Race FX region: SNS-CQ-USA revision: SNS-CQ-1 board: SHVC-1CA6B-01 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x10000 content: Save oscillator frequency: 21440000 game sha256: e9c406d4f773697b9b671e7ddf2207c9d0ab242d7f23e502cdd453fbb264d392 title: Sunset Riders name: Sunset Riders region: SNS-6S-USA revision: SNS-6S-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 190999122aacc2cff20c5677b3f60ed938d8a36b696d16cc1bf416705efe151e title: Super Adventure Island name: Super Adventure Island region: SNS-H2-USA revision: SNS-H2-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: eaf1b83e95d8a04f9a84d4960cf87cc182fc60ef07be35eb8929c4033d6fef67 title: Super Adventure Island II name: Super Adventure Island II region: SNS-E4-USA revision: SNS-E4-0 board: SHVC-2J3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 0deb7a91fbe5848f1733ce668daaa49b0dad3d821bacc0791837c1ba15e60d7c title: Super Alfred Chicken name: Super Alfred Chicken region: SNS-8A-USA revision: SNS-8A-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: b64f9f95fb244feddb3ff50bf0972af88f5d006e9b09050b930374fef8b37862 title: The Super Aquatic Games starring the Aquabats name: Super Aquatic Games starring the Aquabats, The region: SNS-AU-USA revision: SNS-AU-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 8808783f789ca6413364a7abea240f6f7291b5906026f360ba8cfdd2791fc179 title: Super Baseball 2020 name: Super Baseball 2020 region: SNS-SA-USA revision: SNS-SA-0 board: SHVC-2J0N-01 memory type: ROM size: 0x180000 content: Program game sha256: 1622371a5a4001fff9690323e89b7a8d449cdc3cae6dcd1249f0c7dc8c651d33 title: Super Baseball Simulator 1.000 name: Super Baseball Simulator 1.000 region: SNS-UB-USA revision: SNS-UB-0 board: SHVC-1A3B-12 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a8239355631d303ecebfd43fc14e80f148e4ac9937234e29cc87d6f939b033a0 title: Super Bases Loaded name: Super Bases Loaded region: SNS-SP-USA revision: SNS-SP-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 327745aceb708d82419c3d2cffdffa78f55df0878bb1786e1b7fc294385f20ba title: Super Bases Loaded 2 name: Super Bases Loaded 2 region: SNS-3D-USA revision: SNS-3D-0 board: SHVC-2B3B-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: b21a161fed748920e54cd72c54095416b1d999636e0388d7d147884779c52833 title: Super Bases Loaded 3: License to Steal name: Super Bases Loaded 3 - License to Steal region: SNS-AB3E-USA revision: SNS-AB3E-0 board: SHVC-1A3M-30 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 165938810948f3226f7446978fa36ae8bc781616d95b39cd126d5c8afbf6e2ee title: Super Batter Up name: Super Batter Up region: SNS-FA-USA revision: SNS-FA-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 1d6573e3db2efab0c98d1940b4171d569348d27a1cc20e80a83094e6c0e66e35 title: Super Battleship name: Super Battleship region: SNS-8B-USA revision: SNS-8B-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 94496e73fc7fdf2f72f16bf2becb0c3935db2ebd97555eac73b63400acbceec6 title: Super Battletank: War in the Gulf name: Super Battletank - War in the Gulf region: SNS-SB-USA revision: SNS-SB-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: b68e865b0b5fe6af421a171e94fb1cb0006ae3e412b6361f6f858c44adaa304b title: Super Battletank 2 name: Super Battletank 2 region: SNS-2X-USA revision: SNS-2X-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: f0913358cb0870c3dcc7f0c0d2d69704874c31a113150eda668c95024c0d6fd9 title: Super Black Bass name: Super Black Bass region: SNS-BQ-USA revision: SNS-BQ-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 4efab3f49cbe91ec77b6cba747ddfedfdc0b080c755a8b6ba51234f0676c000f title: Super Bomberman name: Super Bomberman region: SNS-H6-USA revision: SNS-H6-0 board: SHVC-1J0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 0a4b4a783a7faf6ada3e1326ecf85de77e8c2a171659b42a78a1fae43f806ca6 title: Super Bomberman 2 name: Super Bomberman 2 region: SNS-M4-USA revision: SNS-M4-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 21d4a72461d8680cf75cf3b8eba42e13127815bc17b6249d89a5e39beb3f1406 title: Super Bonk name: Super Bonk region: SNS-ANKE-USA revision: SNS-ANKE-0 board: SHVC-2J0N-11 memory type: ROM size: 0x180000 content: Program game sha256: 946de556b4f877e54e16b5c828db89c038e50349cfd0ddf8ea96b6541f9d70fa title: Super Bowling name: Super Bowling region: SNS-BW-USA revision: SNS-BW-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 5965bde449ff775c1a0d9fd3cf2fb8c51a86b44ad1942dfb5c14a91f103be030 title: Super Buster Brothers name: Super Buster Brothers region: SNS-SN-USA revision: SNS-SN-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: d42f8c7969b4c434f9ca04ce0080d897877a5e71c2926d309ef5dae93ba25548 title: Super Caesers Palace name: Super Caesers Palace region: SNS-C6-USA revision: SNS-C6-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 0ef6f4cce5a2273fa49fe1ce724e0048a8e39c91da6b00dbb693fe1ba909177d title: Super Castlevania IV name: Super Castlevania IV region: SNS-AD-USA revision: SNS-AD-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: b839253b878821ff00847491d11452e933baaf303f49dd39d22e3a524ea1ff81 title: Super Chase H.Q. name: Super Chase HQ region: SNS-QT-USA revision: SNS-QT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6cbc4db85cb8420020f9edbfd290c0f435b313a59577aca65314d31f8b816620 title: Super Conflict name: Super Conflict region: SNS-CN-USA revision: SNS-CN-0 board: SHVC-1A1B-06 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: db7d727de86a1ac886ce3c243bf5941910154eaef3be50209187b9711592830d title: Super Copa name: Super Copa region: SNS-75-USA revision: SNS-75-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: bcced1be76ef920b562a555696bcb4583d1c8cea4d4b057cab6e0e09be8ef8c4 title: Super Double Dragon name: Super Double Dragon region: SNS-WD-USA revision: SNS-WD-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 4d7fc331a811b8dc630b469262fd6f45e289243cef83101f32038158967d1b28 title: Super Game Boy name: Super Game Boy region: SNS-A-SG-USA revision: SYS-SGB-2 board: SGB-R-10 memory type: ROM size: 0x40000 content: Program memory type: ROM size: 0x100 content: Boot manufacturer: Nintendo architecture: SM83 identifier: SGB1 game sha256: 7468c271d7240cf4e0d08c16e9969a1b1b1caf5adc0e5adc568d93c92651a057 title: Super Ghouls 'n Ghosts name: Super Ghouls & Ghosts region: SNS-CM-USA revision: SNS-CM-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: d4caa6683ee1b6c70c10fd0555ade33dadcc6551d94e791586e64fd683d8f3a8 title: Super Goal! 2 name: Super Goal! 2 region: SNS-JV-USA revision: SNS-JV-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 33dda5838264c93341ef865512e4b86e16fd4a0387eda04e331517bfaecf1c0b title: Super Godzilla name: Super Godzilla region: SNS-7G-USA revision: SNS-7G-0 board: MAXI-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: d78ff42efdbb0e180777d17b5f7a96e08530ab77f15a99237f60714f7cfe2b74 title: Super High Impact name: Super High Impact region: SNS-HX-USA revision: SNS-HX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 3f8efb19eae68f24feb42c018b7dc7a819bfd8d993ab36899681caa7ee94b06e title: Super James Pond name: Super James Pond region: SNS-J5-USA revision: SNS-J5-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: a9e3e57d591e995e8e0dd228b619b6aed42205eaf55316fa8ff33f236b3a32b3 title: Super Mario All-Stars name: Super Mario All-Stars region: SNS-4M-USA revision: SNS-4M-0 board: SHVC-2A3B-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a8806bfe07cd3c9945d9fd3fcea932ae1cd671cab5cae12bb7a2ae726cbf9175 title: Super Mario All-Stars + Super Mario World name: Super Mario All-Stars + Super Mario World region: SNS-5M-USA revision: SNS-5M-0 board: SHVC-BA3M-01 memory type: ROM size: 0x280000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 89ad4ba02a2518ca792cf96b61b36613f86baac92344c9c10d7fab5433bebc16 title: Super Mario Kart name: Super Mario Kart region: SNS-MK-USA revision: SNS-MK-0 board: SHVC-1K1B-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: 76d293e5a772eb2f326e173eac62ca323873b1f329f9b935a97ba86974e1fcd5 title: Super Mario Kart name: Super Mario Kart region: SNS-MK-USA revision: SNS-MK-0 board: SHVC-1K1X-10 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1B memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1B memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1B volatile oscillator frequency: 7600000 game sha256: 740646f3535bfb365ca44e70d46ab433467b142bd84010393070bd0b141af853 title: Super Mario RPG: Legend of the Seven Stars name: Super Mario RPG - Legend of the Seven Stars region: SNS-ARWE-USA revision: SNS-ARWE-0 board: SHVC-1L5B-11 memory type: ROM size: 0x400000 content: Program memory type: RAM size: 0x8000 content: Save memory type: RAM size: 0x800 content: Internal volatile game sha256: 0838e531fe22c077528febe14cb3ff7c492f1f5fa8de354192bdff7137c27f5b title: Super Mario World name: Super Mario World region: SNS-MW-USA revision: SNS-MW-0 board: SHVC-1A1B-06 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 9b4957466798bbdb5b43a450bbb60b2591ae81d95b891430f62d53ca62e8bc7b title: Super Mario World 2: Yoshi's Island name: Super Mario World 2 - Yoshi's Island region: SNS-YI-USA revision: SNS-YI-0 board: SHVC-1CB5B-01 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save oscillator frequency: 21440000 game sha256: bd763c1a56365c244be92e6cffefd318780a2a19eda7d5baf1c6d5bd6c1b3e06 title: Super Mario World 2: Yoshi's Island name: Super Mario World 2 - Yoshi's Island region: SNS-YI-USA revision: SNS-YI-1 board: SHVC-1CB5B-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save oscillator frequency: 21440000 game sha256: 12b77c4bc9c1832cee8881244659065ee1d84c70c3d29e6eaf92e6798cc2ca72 title: Super Metroid name: Super Metroid region: SNS-RI-USA revision: SHVC-RI-0 board: SHVC-BA3M-01 memory type: ROM size: 0x300000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 40b46bb29785fb431b325f22377faa8b099be4d77aecc1f03000b8a4cb589b63 title: Super Ninja Boy name: Super Ninja Boy region: SNS-CW-USA revision: SNS-CW-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a8acbbd6f8afbf289a6b837da6cd8bd109a00cd38625c956ab8ff739732d9e4f title: Super Nova name: Super Nova region: SNS-DH-USA revision: SNS-DH-0 board: SHVC-1J0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 24b687f95bb9737d223738f13c00aeaa7d697fa9e2fd50597b81d0cfa2160daa title: Super Off Road name: Super Off Road region: SNS-OR-USA revision: SNS-OR-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 16f9c90d75bd23d0620be00ecf818fcb25c5935d4ee26b1fe17b926f8987aa65 title: Super Off Road: The Baja name: Super Off Road - The Baja region: SNS-R8-USA revision: SNS-R8-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 6bf0e7a7b95613b9d0e5c8cc98eee5d0ac200e88b5d4444ad5cf93d3e8265118 title: Super Pinball: Behind the Mask name: Super Pinball - Behind the Mask region: SNS-XP-USA revision: SNS-XP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 65aff1403838c938d7c6170f3044a2b0317cd2ee13ad79353a4cdd2aa82f4e87 title: Super Pinball: Behind the Mask name: Super Pinball - Behind the Mask region: SNS-XP-USA revision: SNS-XP-1 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 5a4b0c89606f71182fa5552ac476cc3bbda5ddc7d44e33f9184114aaea38020d title: Super Play Action Football name: Super Play Action Football region: SNS-SF-USA revision: SNS-SF-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a3d803b8c6b0b6ac55085671040b840f993543915c7f802e14fb651beabe9b63 title: Super Punch-Out!! name: Super Punch-Out!! region: SNS-4Q-USA revision: SNS-4Q-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 3dff3513ae6acb85a02b00b9f5adb4757ab97661993bded4f329127a792cef87 title: Super Putty name: Super Putty region: SNS-YU-USA revision: SNS-YU-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 05c7f6461209020785fba33007e1830820aa44ada4b1a6f991d936bf2335b15b title: Super R-Type name: Super R-Type region: SNS-SR-USA revision: SNS-SR-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 607bfa0f74e57298f59ebe237c2e7b59364024d844534f3befb9ad1301bbedf8 title: Super R.B.I Baseball name: Super RBI Baseball region: SNS-ARLE-USA revision: SNS-ARLE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 7a8ffaf8bb549b400ec2f0bda9f3c0dbf5852c38618cdb21cd783c368383e2c7 title: Super Scope 6 name: Super Scope 6 region: SNS-LR-USA revision: SNS-LR-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: e987ceb53cc1407b1ba612b13a7b5391db6c41ea14552c165ae62ad42eeaa0ae title: Super Slam Dunk name: Super Slam Dunk region: SNS-D9-USA revision: SNS-D9-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: c39ebf88af138e87ca5d963ed71a8b7defba3e2bc271d72186d00056e8225721 title: Super Slap Shot name: Super Slap Shot region: SNS-ZX-USA revision: SNS-ZX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 8b75ab4bb1b63c45a56e7a4c5a37c0864f14375ab3131edc33489764426ad888 title: Super Smash T.V. name: Super Smash TV region: SNS-TV-USA revision: SNS-TV-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 694ad2b34ab808bd8a1aa9dda359594cfd3a5fd9d95d4cf262ccaa0eb57eef67 title: Super Soccer name: Super Soccer region: SNS-FS-USA revision: SNS-FS-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 5eb9736d66b3ac730ebbfdd19ef2397282b5f1a62dc0048093e041e23b807741 title: Super Soccer Champ name: Super Soccer Champ region: SNS-HT-USA revision: SNS-HT-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 5985cdad45958a5b8c5967ad39efe51569f560bf237a4e9864f21111082a8500 title: Super Solitaire name: Super Solitaire region: SNS-LT-USA revision: SNS-LT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: c6bd7239cb2074ff1c471d14535bead6290bba2d7c75b4f03209cb114877b4c8 title: Super Star Wars: A New Hope name: Super Star Wars - A New Hope region: SNS-V4-USA revision: SNS-V4-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 1dd01da68cb61def641389bf3fa87b7a29113c9c8dd172cf303c0f7e03ba6e47 title: Super Star Wars II: The Empire Strikes Back name: Super Star Wars II - The Empire Strikes Back region: SNS-E5-USA revision: SNS-E5-0 board: SHVC-2A0N-10 memory type: ROM size: 0x180000 content: Program game sha256: 46370b3bd6ff9ee04c425eef0f482f521f3b61bd4b058f2f4e9d322253d7b5de title: Super Star Wars II: The Empire Strikes Back name: Super Star Wars II - The Empire Strikes Back region: SNS-E5-USA revision: SNS-E5-1 board: MAXI-1A0N-30 memory type: ROM size: 0x180000 content: Program game sha256: c49be867cdd276703a3ae46a6b17673b9e359af4f9af2329c8eb747120245817 title: Super Star Wars III: Return of the Jedi name: Super Star Wars III - Return of the Jedi region: SNS-ARJE-USA revision: SNS-ARJE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: f7df5cd16ce6624567d1a24e9b9c0b9050ea9b6a9fe5a7973484589637756596 title: Super Star Wars III: Return of the Jedi name: Super Star Wars III - Return of the Jedi region: SNS-ARJE-USA revision: SNS-ARJE-1 board: MAXI-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: d17cb5c73174060fcbd9cba6c705643f19c3b8be24d0f7ee43aee674ff1ea38e title: Super Street Fighter II: The New Challengers name: Super Street Fighter II - The New Challengers region: SNS-XW-USA revision: SNS-XW-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x400000 content: Program game sha256: 830c900083cccc6ded74c167c4e257db34df4786ecd6e2f053de454db7d31fe5 title: Super Strike Eagle name: Super Strike Eagle region: SNS-EG-USA revision: SNS-EG-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 6e45a80ea148654514cb4e8604a0ffcbc726946e70f9e0b9860e36c0f3fa4877 title: Super Tennis name: Super Tennis region: SNS-ST-USA revision: SNS-ST-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 02cb7f1ed21ed6bfb9eaa0e91df2adb063a9bf4cbd6feb6cd024d676829e227e title: Super Troll Islands name: Super Troll Islands region: SNS-5L-USA revision: SNS-5L-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 056ac8160363d577e3ffc2f593801b8bb3d024fe4f3a3331b711dc556204949d title: Super Turrican name: Super Turrican region: SNS-TU-USA revision: SNS-TU-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 96da3512a1aa05a40f1e5d61c48932b0d55d9f136d6418b848153a9fecab06de title: Super Turrican 2 name: Super Turrican 2 region: SNS-A2TE-USA revision: SNS-A2TE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 792e615a34ceae5a1b9a4f54c5a5d9b53e39299332fece83e4bceca2c22efb21 title: Super Valis IV name: Super Valis IV region: SNS-VA-USA revision: SNS-VA-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 62d3d650e956f23f3b221f83c5c5bd204afd0e4f4d9c47a3251962323de96089 title: Super Widget name: Super Widget region: SNS-WI-USA revision: SNS-WI-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: dfada65f4497f482d5f81964322d9952f678f50e65418d307d4503f9bf9a32d9 title: Suzuka 8 Hours name: Suzuka 8 Hours region: SNS-8H-USA revision: SNS-8H-0 board: SHVC-1K0N-01 memory type: ROM size: 0x100000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP1 volatile oscillator frequency: 7600000 game sha256: d802715fb4f09d7e499b5b3e577af641598a723dae7cedeaa93943bb53c6edbb title: SWAT Kats: The Radical Squadron name: SWAT Kats - The Radical Squadron region: SNS-AK9E-USA revision: SNS-AK9E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: c2015d03dd3db08069b2a6ea1ed6b3e1ac1e3a5f804b02295c3cd3717add91ef title: Syndicate name: Syndicate region: SNS-AFYE-USA revision: SNS-AFYE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 1711fe9010232b41ec406900e5b4ef528dd2beaa97b27d94ed7eef57d63904a0 title: Taz-Mania name: Taz-Mania region: SNS-TZ-USA revision: SNS-TZ-1 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 7da4a3cfa5de4bb4722a6e2a42c26aae322b5e668f1645d8c870fb99e6080600 title: Tecmo Secret of the Stars name: Tecmo Secret of the Stars region: SNS-AQ-USA revision: SNS-AQ-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: c3cb1d2fd9775aa9d15b7eedd45ad82519b73d47ca166737ed398c748717bcc4 title: Tecmo Super Baseball name: Tecmo Super Baseball region: SNS-ATBE-USA revision: SNS-ATBE-0 board: SHVC-2A3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 35dd020cf57fc402417ab6e4a6c49866c5a86bba25218c0aaf7ce85cb134bcf8 title: Tecmo Super Bowl name: Tecmo Super Bowl region: SNS-7T-USA revision: SNS-7T-0 board: SHVC-2A3B-01 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 2972057a0087f8239d2523eaa995405f06e5d5ba3a3203b6b50d401379c8ebde title: Tecmo Super Bowl II: Special Edition name: Tecmo Super Bowl II - Special Edition region: SNS-ASBE-USA revision: SNS-ASBE-0 board: SHVC-1A5M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 8cfd4c5525f4bd4bba5af7e2323f1e61f27ce97c6d5617cfa685c9276fbf6407 title: Tecmo Super Bowl III: Final Edition name: Tecmo Super Bowl III - Final Edition region: SNS-AW4E-USA revision: SNS-AW4E-0 board: SHVC-1A5M-20 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 14bce564f976d1431127259edbcb23c52c79361fed9814d307d627c4650e800e title: Tecmo Super NBA Basketball name: Tecmo Super NBA Basketball region: SNS-XM-USA revision: SNS-XM-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 5b82cdd6f2da56f43680d6a5021faebe2e06036d30602c1a7917aa414cf8b5f4 title: Teenage Mutant Ninja Turtles IV: Turtles in Time name: Teenage Mutant Ninja Turtles IV - Turtles in Time region: SNS-TM-USA revision: SNS-TM-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: 849141370f164d6db3e5709da670726f958ce13ffef69319564db3fb0b12c69d title: Teenage Mutant Ninja Turtles V: Tournament Fighters name: Teenage Mutant Ninja Turtles V - Tournament Fighters region: SNS-KY-USA revision: SNS-KY-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: bd7074ef4a05d790646abe145ffd2587fb48044e4b730286d807abe102841177 title: The Terminator name: Terminator region: SNS-TN-USA revision: SNS-TN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 06db3be569a587d79b51bfc684fd2ebdea977863875aedec88218fbb4169c21b title: Terminator 2: Judgment Day name: Terminator 2 - Judgment Day region: SNS-TP-USA revision: SNS-TP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 365f10f9d9f68cc59e769eeb451c417e1ff7415022a625de9976a3b924c0bd61 title: Terminator 2: The Arcade Game name: Terminator 2 - The Arcade Game region: SNS-XV-USA revision: SNS-XV-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: c9563cb57314588aa3db22b76dc8acfba3e73733dd3538edd90af5a15595830e title: Test Drive II: The Duel name: Test Drive II - The Duel region: SNS-DL-USA revision: SNS-DL-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 3cdebbd8adc4bb6773a7995f542fdac49adefca71cba583255a1c1bf37ac3946 title: Tetris & Dr. Mario name: Tetris & Dr. Mario region: SNS-ATFE-USA revision: SNS-ATFE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: accc836c3adabadc810fbe35702c6a64d50a09f4c672d2734fa58b251d7a20aa title: Tetris 2 name: Tetris 2 region: SNS-27-USA revision: SNS-27-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 70dea29a928c1625def31c862dc74960e39e587e416b45829efc21f13ebd9630 title: Tetris 2 name: Tetris 2 region: SNS-27-USA revision: SNS-27-1 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 579bf1a1988d4af06a69cc1d82a2478ebe51940c5ced7f97e83029a24e6aa778 title: Tetris Attack name: Tetris Attack region: SNS-AYLE-USA revision: SNS-AYLE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 1121df3f05dd9dbb749f6b785eb9b3eb69968004f9d6ceffa6f84757af2f3702 title: Thomas the Tank Engine & Friends name: Thomas the Tank Engine & Friends region: SNS-6T-USA revision: SNS-6T-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: d50aaa41e153ca356eee16a9deccb1a763ee56ebbe6c80cd28c5ad1db66a5316 title: Thunder Spirits name: Thunder Spirits region: SNS-TH-USA revision: SNS-TH-0 board: SHVC-1A0N-02 memory type: ROM size: 0x100000 content: Program game sha256: eb958801fd1f08771e5a0933f7701d633262efbfe8d47de21dda18e3b77670de title: The Tick name: Tick, The region: SNS-ATHE-USA revision: SNS-ATHE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 16fb965130e57f37dda2466f23820f091f8b96758aa7e30ba4fd63cb618e5ddb title: Time Cop name: Time Cop region: SNS-ATCE-USA revision: SNS-ATCE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 8e82f98d2e62bc1e5fcf2386c2b5ca54998398220efcedd67858aaaa92289a42 title: Time Slip name: Time Slip region: SNS-XT-USA revision: SNS-XT-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: fa7e2b40093f0cc7233cc77e95bbbea2144c8183dec10446590396fffd7cda37 title: Time Trax name: Time Trax region: SNS-X8-USA revision: SNS-X8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 271a67b32b3bb00ceb0f4e7d81494888d0d821635f0f936d481dfbe671567c08 title: Timon & Pumbaa's Jungle Games name: Timon & Pumbaa's Jungle Games region: SNS-AJ9E-USA revision: SNS-AJ9E-0 board: SHVC-1J0N-20 memory type: ROM size: 0x180000 content: Program game sha256: 0503cd93b4d211a825acd47ff3813668b4ce68890c8be2fbfe5ac2b46882dfcf title: Tin Star name: Tin Star region: SNS-9N-USA revision: SNS-9N-0 board: SHVC-1A1M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x800 content: Save game sha256: ba679a11264e9695895a6c17358a41e8459be06166d056811df9c2738fef3d0d title: Tiny Toon Adventures: Buster Busts Loose! name: Tiny Toon Adventures - Buster Busts Loose! region: SNS-TA-USA revision: SNS-TA-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: f753de4a38bd83f7d937fc7bf5565a3c351a794c113dead8fdee6d86c85633e8 title: Tiny Toon Adventures: Wacky Sports Challenge name: Tiny Toon Adventures - Wacky Sports Challenge region: SNS-5Z-USA revision: SNS-5Z-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 08d808e9c5851e4301a38a56b350a20ea9e3adbef51546e87e1785d691d0f2d5 title: TKO Super Championship Boxing name: TKO Super Championship Boxing region: SNS-BX-USA revision: SNS-BX-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: ced8c0bc2791ffe47cb9eec03db67567945af8c58b5330326722f1cfca41bf51 title: TNN Bass Tournament of Champions name: TNN Bass Tournament of Champions region: SNS-ATNE-USA revision: SNS-ATNE-0 board: SHVC-2J3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 4f500da19dbb1557a7bc0ce14437098c1402478d573fb569303b81c011f86fbf title: Tom and Jerry name: Tom and Jerry region: SNS-TJ-USA revision: SNS-TJ-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: d99008d2181986dc7f65228696d940b5d31be8471f166d1ab9b1c14f1503bcfb title: Tommy Moe's Winter Extreme: Skiing and Snowboarding name: Tommy Moe's Winter Extreme - Skiing and Snowboarding region: SNS-XS-USA revision: SNS-XS-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: e0fbf731550266d79a0b6ca460afd04c8c312f7023b2c9882c4fc3acc3e7932f title: Tony Meola's Sidekicks Soccer name: Tony Meola's Sidekicks Soccer region: SNS-6K-USA revision: SNS-6K-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: ca9889f17f184b3d99a2eaaa82af73e366f03ed00313fdd369e5e023b208e788 title: Top Gear name: Top Gear region: SNS-TR-USA revision: SNS-TR-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 76b2702c4be8b668c1017f2817c280283c275eaa41535bf6ffa2b8d2220b68c6 title: Top Gear 2 name: Top Gear 2 region: SNS-2P-USA revision: SNS-2P-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: ede60f0d283b6ea3a45308981d99e7c422a0296e5fadde51c6bafd4dcc789ca2 title: Top Gear 3000 name: Top Gear 3000 region: SNS-A3TE-USA revision: SNS-A3TE-0 board: SHVC-1B0N-03 memory type: ROM size: 0x100000 content: Program memory type: ROM size: 0x1800 content: Program manufacturer: NEC architecture: uPD7725 identifier: DSP4 memory type: ROM size: 0x800 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP4 memory type: RAM size: 0x200 content: Data manufacturer: NEC architecture: uPD7725 identifier: DSP4 volatile oscillator frequency: 7600000 game sha256: 9bf884be5627d38f060ad7f3a61ea1fea1474d416e1d037d33014ca9d5205c1d title: Total Carnage name: Total Carnage region: SNS-XC-USA revision: SNS-XC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 345e795000e74f51704774edfc8049473461761a65eb47cab710caa29e09897b title: Toy Story name: Toy Story region: SNS-AQHE-USA revision: SNS-AQHE-0 board: SHVC-BJ0N-20 memory type: ROM size: 0x400000 content: Program game sha256: 7a6e5da46b026900fba4584a32ad40d940b9ecf9fccfb11f96a205a914014784 title: Toys: Let the Toy Wars Begin! name: Toys - Let the Toy Wars Begin! region: SNS-YT-USA revision: SNS-YT-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 4070a7702dc506a1ceb6f65b5c330b3a162df6f01735c8f206934fd47b810ed4 title: Troddlers name: Troddlers region: SNS-TX-USA revision: SNS-TX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 46fcca4ce29f472afa8519958d256eec347c2dc2da154c95f263a051c5c02dbb title: Troy Aikman Football name: Troy Aikman Football region: SNS-YQ-USA revision: SNS-YQ-0 board: SHVC-2A3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: dd96a8f4f9c8988301ff710a4c70ebe3bf7914901f3547abe1d5f0dd5c0b921b title: True Golf: Wicked 18 name: True Golf - Wicked 18 region: SNS-W8-USA revision: SNS-W8-0 board: SHVC-1A3M-10 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 5c7b28bb24bad697156ad444ff23bd15ad6744dbf9899b3cccf2aa36d559d825 title: True Golf Classics: Pebble Beach Golf Links name: True Golf Classics - Pebble Beach Golf Links region: SNS-GB-USA revision: SNS-GB-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 72088194a65fc057f2910945a33d9f071682a4cecac8996f0bdabcdb5ef39962 title: True Golf Classics: Waialae Country Club name: True Golf Classics - Waialae Country Club region: SNS-TG-USA revision: SNS-TG-0 board: SHVC-1A3B-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 47dd8ea2d12a6bb2a9774de1d492259fc4fb9f8ec7976383bbfd922532671f6b title: True Lies name: True Lies region: SNS-ATLE-USA revision: SNS-ATLE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 8f62d014f513a7dcbca5aa76cbe476c3e4526100f34913af831bc05dab029bd1 title: Tuff E Nuff name: Tuff E Nuff region: SNS-TE-USA revision: SNS-TE-0 board: SHVC-2A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: e4343c0fadc00ffdc3dc31345068d751eea5d639f826731f08cb81673d508c40 title: Turn and Burn: No-Fly Zone name: Turn and Burn - No-Fly Zone region: SNS-ZN-USA revision: SNS-ZN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 259c25d4613f97f5fa7992900fb583625d7fb912c7ae09fa9def2e682834dc9f title: The Twisted Tales of Spike McFang name: Twisted Tales of Spike McFang, The region: SNS-83-USA revision: SNS-83-0 board: SHVC-1A1M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 094555d5720158ee60c9d5ab9a13110192db5ebf0f6cf69abbb59a00bc470345 title: Ultima: Runes of Virtue II name: Ultima - Runes of Virtue II region: SNS-7U-USA revision: SNS-7U-0 board: SHVC-1A1M-11 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 11659bd8dd620d50400d16042aeb2d0ddb00c7183fc1ecb95b1a34f07db0431b title: Ultima VI: The False Prophet name: Ultima VI - The False Prophet region: SNS-U6-USA revision: SNS-U6-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: a31af0e39afb55bbc92a5543b504327fbe7e8cd0a5e08626976bed7b65376737 title: Ultima VII: The Black Gate name: Ultima VII - The Black Gate region: SNS-7I-USA revision: SNS-7I-0 board: SHVC-1A3M-21 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 78bf82963cded9162e25035053c8b1a9f760748ff0beacc230d005204992737d title: Ultimate Fighter name: Ultimate Fighter region: SNS-HP-USA revision: SNS-HP-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: cb2fdfce61858063bf4c9da4228381c3ec3abe423f4d378cddd174ae4adb261e title: Ultimate Mortal Kombat 3 name: Ultimate Mortal Kombat 3 region: SNS-A3ZE-USA revision: SNS-A3ZE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x400000 content: Program game sha256: e9fae4c2e171a1fc4f2bd800abd9e42750aaf7a4db9e40c5b9142e15029500bd title: Ultraman: Towards the Future name: Ultraman - Towards the Future region: SNS-UM-USA revision: SNS-UM-0 board: SHVC-1A0N-01 memory type: ROM size: 0x80000 content: Program game sha256: 0b155a54b6134601fc0791252a63ca73efd522667c3d6fd7a44f5b3c500039d7 title: U.N. Squadron name: UN Squadron region: SNS-E8-USA revision: SNS-E8-0 board: SHVC-1A0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 794152fc6f55cb15a0b203fa645ac9fa314a293da999d8ec8b3dda080434d175 title: Uncharted Waters name: Uncharted Waters region: SNS-QK-USA revision: SNS-QK-0 board: SHVC-1A3B-13 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 64bc4707f422661a66618088887e2363a5f896ea683c58984fffd96dd21ab5f0 title: Uncharted Waters: New Horizons name: Uncharted Waters - New Horizons region: SNS-QL-USA revision: SNS-QL-0 board: SHVC-1J5M-11 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x8000 content: Save game sha256: 859ec99fdc25dd9b239d9085bf656e4f49c93a32faa5bb248da83efd68ebd478 title: Uniracers name: Uniracers region: SNS-4L-USA revision: SNS-4L-0 board: SHVC-1A3M-21 memory type: ROM size: 0x200000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: ecefb4117a6aae117e033c8cc07f0db2797d6be93dd5cdcefc23692a21fae02e title: The Untouchables name: Untouchables, The region: SNS-UC-USA revision: SNS-UC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: dcb33a89fcb8d8ca8f3a467034728ad6375273d8eb51a60418ca51ef745e9b38 title: Urban Strike name: Urban Strike region: SNS-AUSE-USA revision: SNS-AUSE-0 board: MJSC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 2500d6c846c78bcb729f15535bf2b852a120411891cabaaaa6fc407906d0214e title: Utopia: The Creation of a Nation name: Utopia - The Creation of a Nation region: SNS-UP-USA revision: SNS-UP-0 board: SHVC-1A3M-10 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 78bf9d79fb2ff3f9d03ecc1176d070e53ddaca2c6b0cda69e74c19a4e50b195b title: Vegas Stakes name: Vegas Stakes region: SNS-VS-USA revision: SNS-VS-0 board: SHVC-1A1B-06 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 41b5561de9e4984276e52987ea46c5f4fa8526d8141c70c738875a9eb9fe9d70 title: Vortex name: Vortex region: SNS-4V-USA revision: SNS-4V-0 board: SHVC-1CA0N5S-01 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x8000 content: Save volatile oscillator frequency: 21440000 game sha256: b0e74f0fe8d1e7fe2fe404341fea7c68e28f3a0ab78552d5092d413f2ecec417 title: Wanderers from Ys III name: Wanderers from Ys III region: SNS-YS-USA revision: SNS-YS-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 82bba8ae2bb4dbc74a18af31aaec19c368576e4369dd70b396caa5e8729540bb title: War 2410 name: War 2410 region: SNS-A2AE-USA revision: SNS-A2AE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 8b12e5e4553fc921c23739d1aec2ed517535ec239daef800f39f602d8473847f title: War 3010: The Revolution name: War 3010 - The Revolution region: SNS-AZNE-USA revision: SNS-AZNE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: be420715152394e0e4a25ab10931b67f92f910cfcf7793e31dfee1c6334808e5 title: Wario's Woods name: Wario's Woods region: SNS-65-USA revision: SNS-65-0 board: SHVC-1A3M-21 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 8579dd352d20589072ed5c026bde7adadd6229d18a022e7cb47cf5602b54015e title: Warlock name: Warlock region: SNS-AWKE-USA revision: SNS-AWKE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x200000 content: Program game sha256: 36ec2f409f08a08f8327570eadcd8960b6a47bf5797441c2df05fcc50c5b762b title: Warp Speed name: Warp Speed region: SNS-WP-USA revision: SNS-WP-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: dd73690dd3165a16580e191c92a497102758f312c759353f685e371755c663a8 title: Wayne Gretzky and the NHLPA All-Stars name: Wayne Gretzky and the NHLPA All-Stars region: SNS-AWZE-USA revision: SNS-AWZE-0 board: SHVC-2A3M-20 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 56ba3d585bf6b701e342d86a0bd164ab0a97dfbd5df46b3a964506842633459c title: Wayne's World name: Wayne's World region: SNS-WW-USA revision: SNS-WW-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 215ab7e576b31462e3284d035006dc638cae06bbfb1af2c5617403b15ab2b25a title: WCW Super Brawl Wrestling name: WCW Super Brawl Wrestling region: SNS-AWRE-USA revision: SNS-AWRE-0 board: SHVC-2A0N-11 memory type: ROM size: 0x180000 content: Program game sha256: e931c3c08f20f78e3a43ad92d16eb472be619abaa17c2d8e2b0fcd5d05dbd74d title: We're Back!: A Dinosaur's Story name: We're Back! - A Dinosaur's Story region: SNS-6D-USA revision: SNS-6D-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0b1ba31ae95b61d7d9a0f5509b5836fff84f60915802e3b3ba1170a5c50a4b71 title: WeaponLord name: WeaponLord region: SNS-AWDE-USA revision: SNS-AWDE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: 12abf1ba063c120c1a98495a1c85e67a0007aff771ef92adcb94b4a0a2fd5adb title: Wheel of Fortune name: Wheel of Fortune region: SNS-WL-USA revision: SNS-WL-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: c7af9e7f3243ba1b5dd81f32f710e60c2ae1d443ecaf7140bf42d71a1b69d8a2 title: Wheel of Fortune: Deluxe Edition name: Wheel of Fortune - Deluxe Edition region: SNS-XF-USA revision: SNS-XF-0 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 1bd3af0125743bf9bbbac6e7dc215fe32c4ff7043a2ee034d56b627e3f6875f0 title: Where in the World is Carmen Sandiego? name: Where in the World is Carmen Sandiego region: SNS-WX-USA revision: SNS-WX-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: e3177f066bf004fd99aef31f2692ba0b412dd280d613dc3f4cf334d97f4c9af8 title: Where in Time is Carmen Sandiego? name: Where in Time is Carmen Sandiego region: SNS-WN-USA revision: SNS-WN-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 0a52dc1e7820f5541f53ce0e1e96144fe079af0efe3dae5c2c89d86365feb8b1 title: Whizz name: Whizz region: SNS-AZWE-USA revision: SNS-AZWE-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: c8f159e2625ac8078535c06857ea28475706da45df494de8e46f50888272cf71 title: Wild Guns name: Wild Guns region: SNS-4W-USA revision: SNS-4W-0 board: SHVC-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 39bb99eddb224de5f0789f807ffef06b9efa2efb7962dced31fb272f986699cd title: Wild Snake name: Wild Snake region: SNS-AWSE-USA revision: SNS-AWSE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 60d01a3f499463156546ecdee18ee3e946b95302ee0b1569decb97f52372d2eb title: Williams Arcade's Greatest Hits name: Williams Arcade's Greatest Hits region: SNS-AW8E-USA revision: SNS-AW8E-0 board: MAXI-1A0N-30 memory type: ROM size: 0x80000 content: Program game sha256: 2167fc7c5447b2287668d2f3e4ef1a285361b2292ecc8a4cbd9f966a460ad7a2 title: Wing Commander name: Wing Commander region: SNS-WC-USA revision: SNS-WC-0 board: SHVC-1A0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 132ca0b6a4888edf7de785d48f4417fac28522646e6c7514f80c5e9ff1438d5f title: Wing Commander: The Secret Missions name: Wing Commander - The Secret Missions region: SNS-2W-USA revision: SNS-2W-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: c3bcd5c716f96e6359ebcfd85c3e9b07b46c5124bf4010d89ceef5b6f2f868f6 title: Wings 2: Aces High name: Wings 2 - Aces High region: SNS-WG-USA revision: SNS-WG-0 board: SHVC-1A0N-02 memory type: ROM size: 0x80000 content: Program game sha256: 0e834647669783c2b79cc1120c057c870c541079a7abd1eee3f787d59dc3c3eb title: Winter Olympic Games: Lillehammer '94 name: Winter Olympic Games - Lillehammer '94 region: SNS-W4-USA revision: SNS-W4-0 board: SHVC-1J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 025dd3047c474d879e69b91a3918add9cdabedf4182e1c1e10e5f0c13a124bf9 title: The Wizard of Oz name: Wizard of Oz, The region: SNS-W6-USA revision: SNS-W6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: bc68f40075f9983f5027fe264c3037d1a831e8e76a6c9adb60d10226f6ef005b title: Wizardry V: Heart of the Maelstrom name: Wizardry V - Heart of the Maelstrom region: SNS-W5-USA revision: SNS-W5-0 board: SHVC-1A3M-20 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: e0165bafeb8d65be08a5a4079f8651104471f450c60794b761b1255853ca2d98 title: Wolf Child name: Wolf Child region: SNS-WH-USA revision: SNS-WH-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 9c2b458e8fda5cb437a4c6d28fb430e45c4cfef98420c40546b8e08563a4fc7d title: Wolfenstein 3D name: Wolfenstein 3D region: SNS-6W-USA revision: SNS-6W-0 board: SHVC-1J0N-10 memory type: ROM size: 0x100000 content: Program game sha256: 44428a3d1c796fbd41da7620e321c45f11cd80a0e5f4ab8c48177106cb960d77 title: Wolverine: Adamantium Rage name: Wolverine - Adamantium Rage region: SNS-AWXE-USA revision: SNS-AWXE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 82e2b636e66c4edbae27a5be91a61194ef2881ec93f40d1de93a6153617b12f2 title: Wordtris name: Wordtris region: SNS-WT-USA revision: SNS-WT-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 86e9d76a8834732e511253d8092727bdbfb409b3d0ff1c06b6b6e481c9a039ef title: World Cup USA '94 name: World Cup USA '94 region: SNS-U4-USA revision: SNS-U4-0 board: SHVC-2J3M-11 memory type: ROM size: 0x180000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: ea76cfdbb2a555a7b6eff8b466a879f9a9189639416e8c2fb45bf074e695105f title: World Heroes name: World Heroes region: SNS-WZ-USA revision: SNS-WZ-0 board: SHVC-2J0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 159d5341d13d6801324e8271f7191c0223617c9d30984676319b2df7937c78c0 title: World Heroes 2 name: World Heroes 2 region: SNS-JI-USA revision: SNS-JI-0 board: SHVC-BA0N-01 memory type: ROM size: 0x300000 content: Program game sha256: d4d9f1b41dad7e7a126a9adbe8d86c4b339e120c866156796de1cb0c9a214189 title: World League Soccer name: World League Soccer region: SNS-WS-USA revision: SNS-WS-0 board: SHVC-1A1B-05 memory type: ROM size: 0x80000 content: Program memory type: RAM size: 0x800 content: Save game sha256: 2143bbd87ea1c5cfe5eaf46ae39e3ebb11a2e929d05cbb929904037f4d72acfe title: World Soccer '94: Road to Glory name: World Soccer '94 - Road to Glory region: SNS-WO-USA revision: SNS-WO-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 0af7b0d3022acd24a1fb15865a076519f7f56e7a4b33f12b6d851b3a91e5388c title: WWF Raw name: WWF Raw region: SNS-AWFE-USA revision: SNS-AWFE-0 board: SHVC-BJ0N-01 memory type: ROM size: 0x300000 content: Program game sha256: 51c53e36ed0b959b0695fc6ef036fa7302d1c995eca35c28261d6f3cb77df0ca title: WWF Royal Rumble name: WWF Royal Rumble region: SNS-WU-USA revision: SNS-WU-0 board: SHVC-1A0N-10 memory type: ROM size: 0x200000 content: Program game sha256: 0b9abf2fc25a5f07c71f9d8efbb0d0e616c1494060138fbb63f7398e9c26198e title: WWF Super Wrestlemania name: WWF Super Wrestlemania region: SNS-WF-USA revision: SNS-WF-0 board: MAXI-1A0N-30 memory type: ROM size: 0x100000 content: Program game sha256: 67faa6ed3406a5ab0d7224b811c0960bb36560040ee959bb3304c9293ceaa093 title: WWF Wrestlemania: The Arcade Game name: WWF Wrestlemania - The Arcade Game region: SNS-AWVE-USA revision: SNS-AWVE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x300000 content: Program game sha256: dc3792e9fe7ef7aaea4ac675a48ad06129dd3ebdd4b96a513bc8241549cbd579 title: X-Kaliber 2097 name: X-Kaliber 2097 region: SNS-X7-USA revision: SNS-X7-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: 65fe17fd6b297f52df6ce9812ecb02c3bb1bfda3ebc05a19c4a8decbf9a446ae title: X-Men: Mutant Apocalypse name: X-Men - Mutant Apocalypse region: SNS-AXME-USA revision: SNS-AXME-0 board: MAXI-1J0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 93272180090e8418582f69b79c5cee6b28638b9a93192cc4bcd96291a4fca02d title: X-Zone name: X-Zone region: SNS-XZ-USA revision: SNS-XZ-0 board: SHVC-1A0N-10 memory type: ROM size: 0x80000 content: Program game sha256: 71b69490c78d0bbaf47da25217c5dae295190311aa5df75653c3fac0a1b45358 title: Xardion name: Xardion region: SNS-XA-USA revision: SNS-XA-0 board: SHVC-1A3B-12 memory type: ROM size: 0x100000 content: Program memory type: RAM size: 0x2000 content: Save game sha256: 90ad69a489194aca7ef7b7fd1d30e0105da4934a81ac8b0333ea20f9248df92d title: Yoshi's Cookie name: Yoshi's Cookie region: SNS-YC-USA revision: SNS-YC-0 board: SHVC-1A0N-20 memory type: ROM size: 0x80000 content: Program game sha256: 12fba2aff04c8e39968e828629ebd16caa314bca397a9418d35fdaffe8188e20 title: Yoshi's Safari name: Yoshi's Safari region: SNS-RH-USA revision: SNS-RH-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: fbe8926fc0149d3e8e2aec20f15640ea6814f4f4b01c3960f3c477f5f17e890f title: Young Merlin name: Young Merlin region: SNS-Y6-USA revision: SNS-Y6-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: 7d414b7f5941f1eddc35259a22accbbbd7b47c517dfcf8bad86c4dcfa9e50b1e title: Zero the Kamikaze Squirrel name: Zero the Kamikaze Squirrel region: SNS-AZKE-USA revision: SNS-AZKE-0 board: SHVC-1A0N-20 memory type: ROM size: 0x200000 content: Program game sha256: b27e2e957fa760f4f483e2af30e03062034a6c0066984f2e284cc2cb430b2059 title: Zombies Ate My Neighbors name: Zombies Ate My Neighbors region: SNS-ZA-USA revision: SNS-ZA-0 board: SHVC-YA0N-01 memory type: ROM size: 0x100000 content: Program game sha256: 25414de02c6805ca62574cfb39c23bf292b3d8c4ff33eb8f212ccdbcd61c5ae3 title: Zool: Ninja of the "Nth" Dimension name: Zool - Ninja of the 'Nth' Dimension region: SNS-Z8-USA revision: SNS-Z8-0 board: SHVC-1A0N-20 memory type: ROM size: 0x100000 content: Program game sha256: a3f1abf2740ff64042d82f7a940fb4269ece57d7c6967571549d8b60b20f305a title: Zoop name: Zoop region: SNS-AZPE-USA revision: SNS-AZPE-0 board: SHVC-1J0N-20 memory type: ROM size: 0x80000 content: Program ares-126/mia/Firmware/000077500000000000000000000000001415063341600146435ustar00rootroot00000000000000ares-126/mia/Firmware/Game Boy Color/000077500000000000000000000000001415063341600172655ustar00rootroot00000000000000ares-126/mia/Firmware/Game Boy Color/boot.cgb-0.rom000066400000000000000000000040001415063341600216300ustar00rootroot000000000000001>|@SB*M~|1nJERJS||ff s nٙgcnܙ3>Gu&!" !L ͻͼ{4 r"# >O>@!ND͆O!B # !4x, p>P!"l(* !ˆF(!>0> /7G>/O~G*2Gyw>0>hjk* J Ci* !?@J>&>%>w$by8 O!>8"O!C~̉y0y}(!~" y  xb(d {>( =yʆ †&?b >O36O3!Q !@ ~(!/ =(2 .>O!0"#"#  ̈́ ̈́ r#" !˜>"  O!˜>"< .( !8 !@> > b!K~3 .D0* I.K* >.4*G !*( yO yA8!_7W~( yO^8!3 ~~ ! G@ " H " P(+"" !d!O @  B J ++D `*!O   <=( x(!*(x -x> Vz_!:"{wz_! :"{w(C(L(>L>l!{J!zG* ?~|>~>>|><ߟ?><>?>>|||?>|>||6<=\X>pYi5u4oK9INCh )跆Rq]mg?kF('afj BEFAARBEKEK R-URAR INAILICE R|K ehf0<donnoonLn|jn-+dm`r|||eld@ hp x 8 HPX     @(((` 0 2cyB1nJEBRJ)/B=t~gwk-~Ku!S_JR~O~L:_%j#_ )  ~|?~ ?B~|a||@AB !"y|ares-126/mia/Firmware/Game Boy Color/boot.cgb-1.rom000066400000000000000000000040001415063341600216310ustar00rootroot000000000000001>|@SB*M~|1nJERJS||ff s nٙgcnܙ3>Gu&!" !L {4 r"# >O>@!ND͑O!B # !4x, p>P!"l(* !ˆF(!>0> /7G>/O~G*2Gyw>0>hjk* J Ci* !?@J>&>%>w$!0"/ by8 O!>8"O!C~̉y0y}(!~" y  xb(d {>( =yʑ ‘&Jb >O>AO>!Q !@ ~(!/ =(2 .>O!"#"# ͏ ͏ r#" !˜>"  O!˜>"< .( !8 !@> > b!K~3 .D0* I.K* >.4*G !*( yO yA8!_7W~( yO^8!3 ~~ ! G@ " H " P(+"" !d!O @  B J ++D `*!O   <=( x(!*(x -x> Vz_!:"{wz_! :"{w(C(L(>L>l!{J!zG* ?~|>~>>|><ߟ?><>?>>|||?>|>||6<=\X>pYi5u4oK9INCh )跆Rq]mg?kF('afj BEFAARBEKEK R-URAR INAILICE R|K ehf0<donnoonLn|jn-+dm`r|||eld@ hp x 8 HPX     @(((` 0 2cyB1nJEBRJ)/B=t~gwk-~Ku!S_JR~O~L:_%j#_ )  ~|?~ ?B~|a||@AB !"y|ares-126/mia/Firmware/Game Boy/000077500000000000000000000000001415063341600162265ustar00rootroot00000000000000ares-126/mia/Firmware/Game Boy/boot.dmg-0.rom000066400000000000000000000004001415063341600206050ustar00rootroot000000000000001!2| !&>2 >2>ww>G! k#}4 x# Z!ͩͪ{4 >!/ 2=( g>dWB>@ͼ$|b(d { >BB  i >@ͼGGO "#"# D  ff s nٙgcnܙ3>2 >2>ww>G!͕͖{4 "# >!/ =(2 .g>dWB>@ D  $|b(d { >BB  O O "#"#ff s nٙgcnܙ3>Pares-126/mia/Firmware/Game Boy/boot.mgb.rom000066400000000000000000000004001415063341600204460ustar00rootroot000000000000001!2| !&>2 >2>ww>G!͕͖{4 "# >!/ =(2 .g>dWB>@ D  $|b(d { >BB  O O "#"#ff s nٙgcnܙ3>Pares-126/mia/Firmware/MSX/000077500000000000000000000000001415063341600153125ustar00rootroot00000000000000ares-126/mia/Firmware/MSX/bios.rom000066400000000000000000001000001415063341600167540ustar00rootroot00000000000000 ÿ#$4$!s$'!9NX".EMU`mÁ×í^ÂCÏ÷oÂÌ×:R\j|Ïô6TK%ASVõfj{ÍßÏGYò!jyDVgvÆ×éù  & 7 G Y k } Î çajmpsÂÆÊópO #(##N#fi:G.:@G.˹xәyә!x wUۘ`Ә}ә|?ә}ә|?@ә` xAO Ә U xA<= ` xA<£= !C!xQ ":(:=:o:G.:!* `Ә x :G.:H:8*(%%:m*&m:8*(`:W {Ә>ӘyӘ ͌0 zӘ>22:2>22*""*"$*"(*"&͏ͨþ>22>22*""*"$*"&*"(ͨ:2ͷSþ>2*""`Ә< *"$*"(*"&Sþ>2*""` Ә< *"$*"(*"&Sþ:G.:G .J J:G.:G .JJJJJ:G.:G .J>J>JJJ:G.:G .JJJJJ!h F~#fo)GG.   &o)))͌0))[&ɇ*(_:>> 8 :("0 * "!""[K͹:2**K @:O  :/O* ":͛:(:,/2, ͛:,/2, WXK O:GE( /z(MMAә}әۘӘә>әۙә>әۙ......>22>!m>!  m.!͗![$×:!:(8*"> m>!wE*$om:*m:G*$mK o&))) @:Ϳ##!O͟ RIGHTC!a͟ LEFTC!r͟ UPC!͟ TUPC!͟ DOWNC!͟ TDOWNCK[SCALXYCS*))))).>2,y( G>2,yO "*MAPXY:,**FETCHC! ͟ STOREC! ͟ SETATR!1 ͟ READC!B ͟ SETC!R ͟ NSETCX!d ͟ GTASPC!v ͟ PNTINI! ͟ SCANR! ͟ SCANL>#.ͫ >.~#/ 00/7/ͳ ͳ | } >ӫ>PӪ<<w /w %$|(ټ8( .gxGyOyO0xG0}(%ÇxӨy2!CMN!:Ϳ# #!*4$>22!V%͎x͊>2>2>2>2!V%͎">22)!/&͎eC-BIOS Logo ROM!?6!!@iv!iv(g(#< GͿ##xͿ##W_xY!AB!x!%͎G0ʹxx(>.ʹx0ʹ> ʹ> ʹ##(Oۙ4$(((G _x0_|!_qxYzx!@~(!%͎#>!w} >!w>!wM>!w>!w'!"""H!"J"t!;%!"!"!"! "!"!"!8"!"! "!"!"!8"!"!"!"!8"!Y"!u"]!"c!u"i>2\2b2h>'2> 2:2>2>2>2>2>2:2*" >!"2!ۨW?OӨ:/_2G:/ {P2G:/ {{/2zӨp#y@O0v:0 ~ʹ#~!?# :(:)Pͫ:DR:!c͟ INIFNK!u͟ STRTMS*[> *[ v~#} !"ͤ:0:2a(:½ 8*ͽM*:$8"&w*l. !> : *:,0 E͐-"!".*l:!0..">2>2:!0<:!<2:= :=2:2:=2:!<2G< 2!4(5(.y2(y2"22> > >>2:!<2:=2l!:_w: ͽml*E:2G:ͽ=2ͽ"&:W=O!bk+.l*E:G:ͽ<2ͽ."&:=OT]#:Ó!͗ :> Ò:::ͽM::ͽE2_! **́: !!~/w#!͗ͽ>MV  . E  lrxjEK.JLl+LLMY ABCD"HExyͶ%8( > 27ӑ>Ӑ/Ӑͻې>0/!w  w@8 `0@P7:T>2T? !H͎*"&}w͏ 0!22:ċ*"> 2ͽE (*: &~(:ͽM*"> :27ɯ۪Ӫ۩۪Ӫ۩7!L͟ ISCNTCA!a͟ BEEP"!u͟ FNKSB!͟ ERAFNK!͟ DSPFNK::ͽʂ!͟ 7TAPION!͟ 7TAPIN!͟ TAPIOF!͟ 7TAPOON!͟ 7TAPOUT!͟ TAPOOFG۪( ( ˧(Ӫ>RRӠ{ӡӠۢɷ>(<ӫۨӨۙO۪Ӫ۩ͧͬ:d >s/!_~=(>\濳_>R>\/!O ~>0 >s<=G(L>\濳_>Rx( >\Ѡ(>ɯ!S͟ GTPAD!d͟ GTPDL͚F#~##o&͚~2/2c*[ :=2 ! q#c>2E۪O !yӪ۩w# !:!&8!& ݾĴ/ݦw8## y !'>2y((x >! > 5>x > $>!_(  ~( â*w#} !["?W:4$^"&Ç!͟ &ÇCALBASۙ!( Ә x !~Ә# x >ә>@ә!%~Ә#~ Ә e#_E#GۨẀ{z%Wէ$|oG>#_Ez#GۨWYͅz%W$zG(= !g$ۨÌz%oG>U{$W|gG>$_/OzG}$G>U$GzgۨoӨ:/O2}Ө!zo|gywۨӨW_oۨO?Ө{o|&))@0|/g:/_2oyӨzO}! wzGۨO?Ө{2yӨzO! sӨ^ӨszӨӨ͘ӨC-BIOS 0.29 cbios.sf.net Character set: US Interrupt frequency: 60Hz Keyboard type: US Init ROM in slot: Cannot execute a BASIC ROM. ERROR:MEMORY NOT FOUND.CALLED NON EXISTING BASIC.STACK ERROR. No cartridge found. This version of C-BIOS can only start cartridges. Please restart your MSX (emulator) with a cartridge inserted.0123456789-=\[];'`,./abcdefghijklmnopqrstuvwxyz)!@#$%^&*(_+|{}:"~<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ     ˩ٿڷ冦椢ح궸  *+/0123456789-,.p@{( !1͟ > .z/{/ROMBAS>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:!I:͟ BASIC statements are not implemented yet͎!"}͟ unknown@7D179}!?!?!~͟ unknown@7E14ares-126/mia/Firmware/MSX2/000077500000000000000000000000001415063341600153745ustar00rootroot00000000000000ares-126/mia/Firmware/MSX2/bios.rom000066400000000000000000001000001415063341600170360ustar00rootroot00000000000000 Ò#ä$G$Æ$!Ú".QW_qÅä5ÔÝæïø?r!4YÍ÷ )/ASCö fyËÝð-PbsÂÒãõ  2 C S e w É Ú [!$'6:>gy}Ó$,;2GQÍÓO #(##N#fi:G.:@G.˹xәyә!y80!x w_ۘqӘә>ә}ә|?әә>ә}ә|?@ә:0qQ xAO Ә :0_G xA<= :0qQ xA<= !:(:=:o:G.:!* qӘ x :G.:_:8*(%%:2*&2:8*(Q:W {Ә>ӘyӘ 0 zӘ!!!!:)0(:G.:G .ͣ ͣ:G.:G .">ͣ ͣ:G.:G .ͣͣͣͣͣ:G.:G .ͣ>ͣ>ͣͣͣ:G.:G .ͣͣͣͣͣ! F~#fo)GG.   &o)))0))[&ɇ*(_:>> 8 :(+0 * "!"!.[K:2**K @:O t :/Ot* "::(:,/2, :,/2, WXK O:GQ( /z(WWAә}әGۘQӘә>әۙә>әۙ......>22Z>!ͅ>!  ͅ.!.;..![$: !9KZvv:(8*"> ͅ>!w*$oͅ:*Å:G*$Å:G!):G!:G!:!%,(!*!$:g.&>->.%} |әyә>͛8K o&))) @:##![ͫ RIGHTC!mͫ LEFTC!~ͫ UPC!ͫ TUPC!ͫ DOWNC!ͫ TDOWNCK[SCALXYCS*))))).>2,y( G>2,yO "*MAPXY:,**FETCHC! ͫ STOREC!+ ͫ SETATR!= ͫ READC!N ͫ SETC!^ ͫ NSETCX!p ͫ GTASPC! ͫ PNTINI! ͫ SCANR! ͫ SCANL>#.ͷ >.~#/ 00/7/Ϳ Ϳ | } >ӫ>PӪ<<w /w %$|(ټ8( .gxGyOyO0xG0}( &LxӨy2!S͗ͯO!:# #!*G$>22͝!i%3>ә>әә@ә>vӘә!әۘv(֯ә>әx/Ϳ#>2>2>2>2͝!A!i%3^=>22)!D&3C-BIOS Logo ROM!?6!!@̲ͥ!̲ͥ(g(#< G##x##W_x͕!ABx!%3G0Yxx(>.Yx0Y> Y> Y##4(OۙG$4(4(4(G _x0_|!_qx͕zx!@~(!%3#>!w} >!w>!wM>!w>!w'>!w>2>2!"""H!"J"t!N%!"!"!"! "!"!"!8"!"! "!"!"!8"!"!"!"!8"!Y"!u"]!"c!u"i>2\2b2h>'2> 2:2>2>2>2>2>2:2*" >!Y"2!ۨW?OӨ:/_2G:/ {P2G:/ {{/2zӨp#y@O0!y  # 2 O2!&C #&Dy7ȷy#v:0 ~Y#~!# :(:)PP:D!ͫ INIFNK!ͫ STRTMS*[> *[ v~#} !"ͤ:0͸:2a(:b 8*ʪbW*:$8"&w* !<> ͗: *:,0 5-"!"*:!0">2>2:!0<:!<2:= :=2:2:=2:!<2G< 2!`4(5(.y2(y2"22> > >>2:!<2:=2!:_w: bÅ*E:2G:b=2bs"&:W=O!bk+*E:G:b<2bs"&:=OT]#:O)8 (͐:(O͐ͤ! :> ͗7:::bW::bQ2_! **ͤ: !!~/w#!b>W 7    * 7LUj*E*KJlLM5YALBUCDHxyͶ8ͷ( > ͪ27ӑ>Ӑ/Ӑͻې>0/!w  w@8 `0@P7:>2? !3*"&}w4ʘ 0!22:?͸*"> 2bQ (*: &~(:bW*"> :27ɯ۪Ӫ۩۪Ӫ۩7!ͫ ISCNTC!ͫ BEEP"!)ͫ FNKSB!:ͫ ERAFNK!Lͫ DSPFNK::ͽʔÝ!rͫ 7TAPION!ͫ 7TAPIN!ͫ TAPIOF!ͫ 7TAPOON!ͫ 7TAPOUT!ͫ TAPOOFG۪( ( ˧(Ӫ><<<>Ӡ{ӡӠۢɷ>(<ӫۨӨۙO۪Ӫ۩ͧͬ:d >'/!_~=(>濳_>>/!O ~>0 >'<=G(L>濳_>x( >Ѡ(>ɯ!ͫ GTPAD!ͫ GTPDLNF#~##o&N~2Ͷ/2*[ :=2 ! q#>2E۪O !yӪ۩w# !:!&8!' ݾh/ݦw8## y !'>2y((x >! > 5>x > $>!_( ~(V*w#} !["W:G$7&L!4ͫ &LCALBAS["Sۙ!( Ә x !~Ә# x >ә>@ә!&~Ә#~ Ә  $_E $GۨẀ{z-%Wէ$|oG> $_Ez $GۨWYͅz-%W$zG(= !z$ۨÌz-%oG>U$W|gG>$_/OzG}$G>U$GzgۨoӨ:/O2}Ө!zo|gywۨӨW_oۨO?Ө{o|&))@0|/g:/_2oyӨzO}! wzGۨO?Ө{2yӨzO! sӨ^ӨszӨӨ͘ӨC-BIOS 0.29 cbios.sf.net Character set: US Default interrupt freq.: 60HzKeyboard type: US Init ROM in slot: Cannot execute a BASIC ROM. ERROR:MEMORY NOT FOUND.CALLED NON EXISTING BASIC.STACK ERROR. No cartridge found. This version of C-BIOS can only start cartridges. Please restart your MSX (emulator) with a cartridge inserted.0123456789-=\[];'`,./abcdefghijklmnopqrstuvwxyz)!@#$%^&*(_+|{}:"~<>?ABCDEFGHIJKLMNOPQRSTUVWXYZ     ˩ٿڷ冦椢ح궸  *+/0123456789-,.p@{( !1ͫ > .z/{/ROMBAS>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:>:!I:ͫ BASIC statements are not implemented yet3!"}ͫ unknown@7D179}!!!~ͫ unknown@7E14ares-126/mia/Firmware/MSX2/sub.rom000066400000000000000000000400001415063341600166760ustar00rootroot00000000000000CD~|}!8*ME sygÊÅ× ×é ú é ó`åPòf%u n M aü|ÌÞðÒ%6HOa~O #(##N#fi>#.">.~#/ 00/7/**|:}:Wo|oG>͉_E͉GۨẀ{zīWէo|oG>͉_Ez͉GۨWYͅzīWozG(= !ۨÌzīoG>U W|gG>_/OzG}gG>U6GzgۨoӨ:/O2}Ө!zo|gywۨӨW_oۨO?Ө{o|&))@0|/g:/_2oyӨzO}! wzGۨO?Ө{2yӨzO! sӨ^ӨszӨӨ͘Ө:G:@G˹xәyә!y80!x w0ۘBӘә>ә}ә|?әә>ә}ә|?@ә:0B͈ xAO Ә :00~ xA<= :0B͈ xA<= !`s [  !:0˾22!xQ >ә>ә!###>ә>ә:(:=:o:G:!* BӘ x :G:͐:8*(%%:i *&i :8*(͈ :W {Ә>ӘyӘ %0 zӘ>2222:2>22*""*:)8!"$*"(*"&\ ͏ >22>22*""*"$*"&*"(\ :222P͛͞ >2*""BӘ< *"$*"(*"&22͛ͽ >2*""B Ә< *"$*"(*"&22Ͳ͛ :)0(:G:G  :G:G "> :G:G :G:G >>:G:G ! F~#fo)GG   &o)))%0))[&ɇ*(_:>> 8 :("0 * "!"u [K :2**K @:O ͫ :/Oͫ* ":4 :(:,/2, 4 :,/2, WXK O:G"( /z(((Aә}ә~ ͈ۘ Әә>әۙә>әۙ>22͞ >!V>!  V!*!\;![$*!\>2*""BӘ< *"$*"(*"&:G:G >> >!6#6͛ͽ >2:G: G !""!x"&!v"(22 ͗ >2:G:G !""!x"&!v"(22 ͗ >2: G:G !""!"&!"(22 ͗ >2:G:G !""!"&!"(22 ͗ : !} ɏ  :(8*"> V!"}!wɯ*$oV:*V:G*$V:G!):G!:G!:!l ,b (\ !*\ !$\ :g.&\ >-b >.b l }b |әyә> 8K o&))) @:P#! RIGHTC! LEFTC! UPC! TUPC! DOWNC! TDOWNCK[SCALXYCS*))))).>2,y( G>2,yO "*MAPXY:,**FETCHC!`STOREC!rSETATR!READC!SETC!NSETCX!GTASPC!PNTINI!SCANR!SCANL!DOGRPHu :2*"f ":*g"hCjCl!@:8:2n:y>ә>ә!@:8:ӛ #!~MAPXYC!TRIGHT!TRIGHT:WCfSh*B"j!"l2o:2n*:g"hSh>2o:2j*"f:py*0R#"l:WSh*0R#"jSf2o:2n:y!Zn CLRTXT*":G: :G:G:O: !*()o>GE '͈  !\~Ә#Ӛ'~  ۘӚ'O ~ ۘGۘO'zO ͈ BӚӘ{ӚӘ:> 8> ә>ә!bx7z7!:: $B!RKj[l~y*bN#F#Cj^#V#Sl( (NC2nB~y>ә>ә> G(x(ůCӛyO#NB*fKj[lq#p#s#r#( (~>yB>  G > COq#> 8!BLTVD!BLTDV!BLTMD!0BLTDM!ANEWPADͳͼ!ZKNJPRT> ӴyG۵ӵyӴ۵G> ӴyG۵ӵyӴxӵares-126/mia/Firmware/Mega 32X/000077500000000000000000000000001415063341600160515ustar00rootroot00000000000000ares-126/mia/Firmware/Mega 32X/sh2.boot.mrom000066400000000000000000000040001415063341600203750ustar00rootroot00000000000000@@<<   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @oo```````fNw(0c( ]([)`_(p(p(p(p9ZX8d$9 94p9  SDERML((((9YCg`}fam1; ll SQERa`g7G'wb"90, 9G*hi`89a)y0(P@.h H+ """?"M_OK#1ȀYPZ[x a)y0(3(3@K.J+ M_OK @H""$&&ZZZUZ ZZZYF_CD_F'Kp MARS0f-QgJgJm g -Qf-g+xZ@r,ANfAaRavGCE><p;G;G-ft%Q;@;@;GAC""""""""AN|QAN0<l7'!&wGOV6響MARS Initial & Security Program Cartridge Version Copyright SEGA ENTERPRISES,LTD. 1994 ROM Version 1.0H@C00<2<><2AQLNuHA>C2222222"3A0f22p"~3@3@3@3@Q"@~ 3@3@3@3@QLNu@H@CQf><pr3|3A3@Nq) fAQLNuH灀ARf>< QLNuA><p Q;|~ QCQp#@ #@$|Q.yfp3@3@3@#@#@ 3@3@03@23@83@3@fagaa<0<@") SQERg0<") SDERg!p0<r-)JBf gX`fNp A<(JFg4)( BgFf,p#@(#@,>,|LD`CQ3@0<`Dares-126/mia/Firmware/Mega 32X/sh2.boot.srom000066400000000000000000000020001415063341600204010ustar00rootroot00000000000000@@<<   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @%%```````N () P@.h! H+ (02 M_OK1 Z[ K.J+ @"$&&ZZZUZ ZZZY_CD_S_OKares-126/mia/Firmware/Mega 32X/vector.rom000066400000000000000000000004001415063341600200640ustar00rootroot00000000000000 $*06<BHNTZ`flrx~QQNuH@QC0~QQLNuares-126/mia/Firmware/Mega Drive/000077500000000000000000000000001415063341600165465ustar00rootroot00000000000000ares-126/mia/Firmware/Mega Drive/svp.rom000066400000000000000000000040001415063341600200670ustar00rootroot00000000000000`e@ 80`  DJPV\agmsx~~xsmga\VPJD>81+% }xrmhc^YUPKGC?;73/,(%"  "%(,/37;?CGKPUY^chmrx}ares-126/mia/Firmware/Mega Drive/tmss.rom000066400000000000000000000040001415063341600202450ustar00rootroot00000000000000SEGA GENESIS (C)SEGA 1990.MAYGENESIS OS GENESIS OS OS 00000000-00[t  U `KjL)g#|SEGA/0p,@Nfr8GQ(@68f((v&Q(@x&Qz]Q`<?0<l7ACL|0<?0QN` SEGESEGA@Ag"f 8Agg$NuN(L *QN8D0<$TffTf fTx?.}"uu*tg12$OhxuzThub.cHb&u"u?.cIbGcJbTn3$Uo3x4*c?/Kb.5.uGm%u0,?.G0%O/%u(Ob&u(uua0T\T\~T}X}4m?/A5.E&Th}*"u*tug4H&K122"V_#5\TXN#OhPxqPqxffhTT@3#\TXN#OphXpXf8fhTT?/JKI}"u}edd}hK~J&~hCBPhXhxPuh]}8 oxPxf}fo}h4D1hoxoxf}fhx|fefdhUhgegdhYhPBCXdPh4|Cx1dUdUhxffPCBXdPh`0{Ud{U`P{UP{Uhgha{1hgfh{hfhk}hoh|4@G}TnCnBnAn@`KJIHx}~$u#O"uu#O}QhfhQhgh}0*=-[0+=/[5h> hP}TkhžhǞ?5&h}x}ff}1+E%uu2 ǍyzX}/Pea!{aTPx{ayX{XzTPxzXzXzTPxd}6 Th6"hePThjUdY!7!q6)u)Ou\dT!UdU}5'hfhUhghYdXDn@`}ares-126/mia/Firmware/Pocket Challenge V2/000077500000000000000000000000001415063341600202035ustar00rootroot00000000000000ares-126/mia/Firmware/Pocket Challenge V2/boot.rom000066400000000000000000000100001415063341600216540ustar00rootroot00000000000000Ћм ؎浰䵊s@$u Au$t@核0缰@澿 ?&$ 栰3摰  d0u00G=tC<+rF2 2 2 12 <vF<v &DC= H G 氰@沰@浹䵨t ?$<u<t3沰涾|tD?&&W;Du:TtDT|tD0t=t[C&$u3揸 ؾ0$ 3 @0u"P *l+z# t ^+u*u#r3˰ 浹$@浹$ Ċ2"ĈGG' t< w<$w,  t<tw 2<&tw,,ú *&?@&7vBB0GFCC F     &F tGGû3,'-û!tEtÊл'HxtzHt{#@{@t*wf4Ê@$@G`V&C'CCaR u wZû$'u  t2Ê»( t9tu XÀu /è@t0ڊ<-rt0ڊ,s,û't tZJsRBR3Z-()&w Is3'P?u0u Ê») t6tu 0XÀu 0p/ètU rF @tu YxC_ˊ:v $< vF`<u#L<u< u 2<u#3=,u=s  H =jr 3@a++++++    ++P0P8P@PPP`Px`D     hmv{ @    ##  #" #++++++++++++++++)  )  ̻wfUD3"̻wfUD3"xiZK<-     . - - - - .L/ 0 1 2 3 /L4 5 6 7 8 4L/ 9 : 2 /L- 4 ; < 7 4L- .- - - - .kLq l q l k j x v r m j j y w s n j j t o t o j j qlu p j kj j qlkefffffTfffffCeffff2Tffff!Cefff2Tfff!Ceff2Tff#!Cef42TfE#!CeV42dfE#!cfV4bffE#aefV4`TffE#aCefV4b2TffEc!CefVd2Tffe!Ceff2Tff!Cef2Tf!Ce2d!cba`>cgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p`4c+"". |Ϻ(Ȟˊ}x]t.plh,dX`\XUUQ^NJGoDAA">;8!5>2h/,)5'$!p{\ h B$#>`.se%pgt+h dEe7 iR>.! ,:L`vȩ /U~ף7k؟LȜ LיhOEIZxڍ=p؊BgنK4!z #1'T*-i:}FQZcRjp?uyr|~:$UH2l  7NVs" %((+.p1@58&;3>>AIGDMGPJCPMrMPGSi>V1Y"\_adg j@tm'Ipsutxep{.~1F_LR e!""}#<1$$%$R&_ 'q'az(64))*Yg+ %,,-d.&//Y0t1,;23k34xe5367`78}9T:-;<܊?Rq@bZA,FB4Cq&D7EJFG H ILJ#K3LHM'cNOɨP Q?SBTUV'XYZn\l]i_Ba cdf&i"kRn|qu$Hm  6c"%0)k,/226|9<@yCF=JMQTX[(_b`f jmzqAuy|܀҄Ո3p K ܽg]\ s!(>07?HwP-Y-b}k"u!Dv>i D.A3U j%x#(KrG5t?^] 7Ͻ\m 6' Ɯ FZq&H({QCmNWmp#˫:ɿ';ͬsSŋ GR s^ K ;kYYVGSrMPCPMPJMGIGD>A3>&;8@5p1.(+( %s"NV7  2l UH:$ares-126/mia/Firmware/Super Famicom/dsp1.rom000066400000000000000000000200001415063341600206530ustar00rootroot00000000000000 0  @ @ `@ L@ F G <F t@ G b$ȗ~ȗȗȗɗ`<%- ɗ$=%%0ɗ&<ɗHɗ Pɗ`Xɗ `ɗ. `% %%$/ .ɗ% %$% / .  @% %%ɗ$ɗ&ɗɗɗ3ʗPʗ&$ʗ4ʗD/@@,<% %T%D,<% %T%,<% %T%@@,<% %T%D,<% %T%,<% %T%@@,<% %T%D,<% %T%,<% %T%3@< %$ߐ!/ߐ!/< %$ߐ!/ߐ!/< %$ߐ!/ߐ!//BL}!$:$,8 *! /0/L/a!-d%!-$/b!%-d!,d%d!/L/D2BL2$&!H0͗6@D2!!.@X͗"$@l͗D͗DB/X!L.!1!H.@"!!Η&!$Η!0Η&8Η͑@"%%G`Η&%%&͑/MΗ!Η!Η!P  / @D  /@  /=|=<@@@@,<% %T%,<% %T%,<% %T%D3qLD/3D!.D <! <!PЗ@XЗdЗ tЗ5(5X%L%.<%D@=%D.%#<@ "%<@% $%ї&%d,їC /@<ї@/"/&Lїz?,%/lї%/~,%/%/%/%/ %/%/z@ %@$B$,%%$%F%/$F$/%,җd@<җ<%Hҗ %%&<%%%hҗ&<% %%|җ&%җdҗ<%җ %%&<%%%җ&<% %%җ& dӗ@5'ӗ@5' ӗ5'&BU? /@?Pӗ .xT <Ӕ@@ 0 ӗfӗ@ @ @@ @ ~}|0{Ez]yxxwvuu3tasrqp8puonm:mlkkdjii[hg gffe#edcLcbba```_A_^)^]]\ \[[ZZY YXXW&WV;VUUUTtTTS+SRURQQQPPPOO&ONdNNMHMLL4LKK(KJyJ#JIyI%IHH-HGG>>h>@>>===t=K="=<<<H& z'dares-126/mia/Firmware/Super Famicom/dsp1b.rom000066400000000000000000000200001415063341600210150ustar00rootroot00000000000000 0  @ @ `@ L@ F G @F t@ H @I @ M hP @ $R @ R S <SA @@T S \A DA Ѐ*%m%EPT!d S!L0|A@EPm!A1!M 1AA S*Ё``*%qPE P%e‘B SA SЀh‘PE P%%LH@#dltBSH@@”B B B ޠ!%P!%P!%S %4C @C,CA@@5,C@5$@`Ch h a c%m $0 !$0! `I `@C@*Ѐ*ЀV ,Ĕ,%$5gЀ,%H5g\\d@@ttd,<% %d%S  .25 %%ba-e` @Eņm%`bn2+%+c%m  A2%0< I`@ S`X Ebm5`%%`a-%A`T S$//D/@/"B/#`  ؅/?@/#`  ///  ?/@/@2@$//D/@/"B/ #`  /?@/ #`  ///  ?/@/@2@ƗƗ!ƗƗLƗ&Ɨ%Ǘ55Ǘ'5'@Ǘ5PǗ'5`Ǘ'5'xǗ&Ǘ5Ǘ'5Ǘ'5Ǘ'4&&Ǘ*Ǘ!&!!Ǘ&<ȗ ȗȗ2ȗ $ȗ/L//!. ,!%/!1 !/5'/14&`!<>b$ȗ~ȗȗȗɗ`<%-$ɗ$=%%4ɗ&@ɗLɗ Tɗ`\ɗ dɗ. `% %%$/ .ɗ% %$% / .  @% %%ɗ$ɗ&ɗɗʗ3 ʗPʗ&(ʗ8ʗD/@@,<% %T%D,<% %T%,<% %T%@@,<% %T%D,<% %T%,<% %T%@@,<% %T%D,<% %T%,<% %T%E3@< %$ߐ!/ߐ!/< %$ߐ!/ߐ!/< %$ߐ!/ߐ!//BL}!$:$0< *! /0/L/a!-d%!-$/b!%-d!,d%d!/L/D2BL2$&!H4͗6@D2!!.@\͗"$@p͗D͗DB/X!L.!1!L.@"!!Η&!(Η!4Η&<Η͑@"%%GdΗ&%%&͑/MΗ!Η!Η!P  / @D  /@  /=|=<@@@@,<% %T%,<% %T%,<% %T%D3qLD/3D!.D <! <!TЗ@\ЗhЗ xЗ5(5X%L%.<%D@=%D.%#<@ "%<@% $%ї&%d0їC /@@ї@/"/&Pїz?,%/pї%/~,%/%/%/%/ %/%/z@ %@$B$,%%$%F%/$F$/%0җd@@җ<%Lҗ %%&<%%%lҗ&<% %%җ&%җdҗ<%җ %%&<%%%җ&<% %%җ& dӗ@5'ӗ@5'$ӗ5'&BU? /D?Tӗ .|X @Ӕ@@ 0 ӗfӗF@ @ @@ @ ~}|0{Ez]yxxwvuu3tasrqp8puonm:mlkkdjii[hg gffe#edcLcbba```_A_^)^]]\ \[[ZZY YXXW&WV;VUUUTtTTS+SRURQQQPPPOO&ONdNNMHMLL4LKK(KJyJ#JIyI%IHH-HGG>>h>@>>===t=K="=<<<H& z'dares-126/mia/Firmware/Super Famicom/dsp2.rom000066400000000000000000000200001415063341600206540ustar00rootroot00000000000000  D l a < H a d a (a x  a X a da a tDJ @1`o %41`o %P1`o %l1`o &  & SM @o%o.%!1   2& (— 1 <—&(bL— 1 d—&p— 1 d"—&—&—@—J @#%—o%—oN%—1oo %(đ×1oo%×o%DC0×o.%D×1oo %(đ`×1oo%!|×o%×oN%|×1oo %(đ×1oo%"×o% ×1oo %(D ė1oo.%(ė1o o%!   &  tė&  Fė  ė  ė&  tė&  ė&   ŗ   (ŗ  TDŗ&(Tŗ&  pŗ& 2hȑ*ŗ   ŗ  Eŗ& ŗ&  ŗ&   Ɨ  Ɨ  LF<Ɨ& LƗ&  hƗ& hȑ!*Ɨ   Ɨ  Ɨ&Ɨ&  Ɨ& 1  Ǘ  Ǘ  D4Ǘ&DǗ&  `Ǘ& hȑ"*|Ǘ   Ǘ  GǗ& Ǘ&  Ǘ& 2  Ǘ  ȗ  ,͑pjʗ8̑ʗ:̑jʗ8D̑ʗ6D̑jʗ(ˑ ˗ *ˑ k(˗ (\ˑ@˗.\ˑ@k\˗ɟbKˑb  Tp+bKˑb  R ˗ bK̑b  \+b(L0̑b  ^X D̗blLt̑b  \X,bL̑b  R ̗bL̑b  T,bM͑b  V@ ,͗bTM\͑b  T@-bM͑b   2*Α*͗Αm,͗Α.͗Αm,ΗΑ*(ΗΑn4DΗΑ 6\ΗΑPn 4xΗΑ:ΗΑnΗΗ@@ @ΗlO %OΗ/B $!ϗ -A5\O&5\O@ϗ&5\O@\ϗ&dϗ@LSxϗ?ϗ ?ϗ?ϗB?ϗ?ϗ"?ϗ/?ЗЗ,,З&8З&@З@LЗ??`З ?xЗ?З@З/?З ?З/?З/З  ї&ї& ї@,ї?<ї?Pї*?`ї-!1 ѐ&ї&! їїї@&ї&! 0їїї@ї?ї?җ*?җ-!1 hҐ&<җ&! PҗXҗ`җ@&lҗ&! 0җҗҗ@җ? ? ?җ ?җJ?җ ?ӗ? ? /?ӗ/ ?0ӗDӑC?Hӗ0p@ @  / @  /   /`A  @  /"  BS @  / @  / 8Ԑ /`A LԗTԗ&dԗ&pԗxԗԗ&ԗ&ԗ@ԗ? ? ?ԗ ?ԗJ?ԗ ?՗? ? /?՗/ ?0՗DՑC?H՗0p@C@ @/0@ @/ @  /B @  / @  / D X /`A  @  /"  B V @  / @  / ֔ /`A12VD@ 얐 @/1(WD@ @/ <חDח&Tח&`חhחpח&xח&ח@ א Tؐ א4ח@@BU? /?ח . הח@@ 0,ؗ @ؗf $#Ɨ,G`TG`(G`P`TG`PG`TǗ xGH G GТ@ &ǗǗ ǗPǗǗ A4  / Ǘ +b!2` O ME+B0ȗ````c%nXȗ:   pȗ @ :@@ ȗȗ ȗ 1 !ȗ & ?@cd N I@4 |I L `h d ` A 0 A/  @ I> E  EA  J ʗd$ d 4` ʔ4J& `ʗ`* |JJd &ʗd ʗ4 ʗ ʗʗ4 (K Ѡ   .PE1  T < a!bA 5_@%`EP  \ da2Ma5-̐`/ d`͐@M  N%3b%1=>O > = TM bd0/D=@  `@=L EL L EL L EL @ x@ M>?@͗ 0-/5  T@?>1Η%@18Η0`/ a`-htt-> N&1&Η5  @S>?Η0/<?1>@>0`/ a`-4@@-@/> lOdp1.5 @<>@ `  a`--@/> @/ 5 #@ @5 @ <:3%a@:3%a @?B,5%= `/?6З>?@# З/ѐ=?>З/@ @=? ї4@/@=%o:$</ /=?/ё /?d? @  !D=@??B,65%= ` $@җTҐ  p&tҗ@=%o:$D>/</ /=?/?? @  !蒑D=D>@?1(ӗ=0/@ V <A<<<<A<ӗ<f=SD=!p  %a aS`11D= !p  |A||||A|D=@ < a!bA 5_@%`Ep | da20Va5-Ր̕`/0d`0֐@0V0  N%3b%10=>O4>4= tV bd0/= @=EddEddEdd @ @ W <A<<<<A<ח<f=PWD=! %a aW`11\D= !>:??ח0-5 ח     @ @  @@@}~~{|}{| 0 &2>JVbmyynbVJ>2& }rh^TKB:2+%  $+2:BKT]gr|+ DEG J NSY !"#`$%&'()*+,h-./0123456q789:;<=>?@A{ D P !"#$%&]'()*+,-./012345k D T!"#$%&'()*+,-./012e  !"#$%&'()*+,-./0123456789:;<=>?@A  !"#$%&'()*+,-./012345  !"#$%&'()*+,-./012TDDTares-126/mia/Firmware/Super Famicom/dsp4.rom000066400000000000000000000200001415063341600206560ustar00rootroot00000000000000 @ T@ <@ 4@ L@,8  t@ l@  @ @ @ @H @ll @ @ @dF ,% 5 P0&T\ tpD?$D$4tpD?$DT4hD/D/?$$,P—8&-%h—& / /—0 % //T %—&/$—4D4D 4D4D/0 4D4D6—H Ô<DZ5`C @5'/ D @5'/X (D /x×P/× @5'/0C×D @5'/Fh 4  N"D D*  \ėtDDDėė % %ėDėė % %ŗ$ŗ00@/@Tŗdŗ/@|ŗŗ ŗ0ŗŗLŗ*ŗŗ ŗŗ ŗ0 $ŗŗ.ŗƗN@Ɨ  ߀@ ?FPƗXƗE`-%``-%``-@%`Ɨ1L @CH$? $? . h Ї 쇔  $ @ \ x AK$0I Ї 쇔  $ @ \ x AK$0xIxI߀ $0`I`I߀ $0HIHI߀ $00I0I߀ $0II߀ $0II߀ $0HH߀ $ 0HM0H@$0$0$0$0$0$0$0 $0AKAK. , H d AK@$00K C@, H d AK$0KK߀ $0JJ߀ $0JJ߀ $ @0C@JM0J@0$00$00$00 0 $0AKAK@˗ H˗XP˗\˗d˗"l˗t˗D˗ ?@˗K|K˗˗% ˗%"˗@ | ̗ ̗X̗ ̗(̗"0̗8̗DD̗\ ?`̗L@Lt̗|̗@̗% ̗%"̗@ @  @ L L L ͗ 0*͗$͗%/8͗@͗$P͗X͗&d͗-%/|͗%/͗@ @ ͗ N@2 MtM1 tND2  Nt0!2| !&>2 >2>ww>G!_2 O>2G 22 !{4 "# >!/ =(2 .>@!>>0*WB> > >0  > >0}` > >:D   O "#"#Pares-126/mia/Firmware/Super Famicom/sgb2.rom000066400000000000000000000004001415063341600206430ustar00rootroot000000000000001>0!2| !&>2 >2>ww>G!_2 O>2G 22 !{4 "# >!/ =(2 .>@!>>0*WB> > >0  > >0}` > >:D   O "#"#Pares-126/mia/Firmware/Super Famicom/st010.rom000066400000000000000000001500001415063341600206570ustar00rootroot000000000000006 <@ P@ 8E Dh \ tx | ?  /I+, $%1 Du+, $%1 D ¡+, $%1 (+, $%1 \h 5 %hDDD/ /0$B`0< @0xBpB??0 .?05 % / 5 % /   /  /D   0 p p@0DD\0DD0h@@5 %.5 % / ? h,0a<0%b@?D*%.% :%$ /hP  h @E @ ? ^5 %]5' 0 h%h@h4 ,&@8f L&@Xf d&$ x&@f &1 PFQhhD?  0 `$  < ` `G `0G XXBX `.0ǐ A /`H@H @ ? | a @%h;{jZK>2& ~|zxvtsqonlkihgedcb`_^]\[ZYXWVUTSRQQPONMMLKKJIHHGGFEEDDCBBAA@@??>>==<<;;:::99888776665554443332221110000///....----,,,,+++$Hj  #"(%&(+.0369V<?AzDGI?LN3QSUBXZ\^`bdfhmj#lm^opTrsuAvkwxy|z\{)||}~~ aa ~~}|)|\{|zyxkwAvusTrp^om#lmjhfdb`^\ZBXUS3QN?LIGzDA?V<9630.+&((%#"  j H$tU8!Fsƪ2LAͮe ~M)1Zݓ7K|w׃wdZ(  (Zdw׃w}K7ݓZ1)M~ fͮAM丆3tG"8Uu$Hj  #"(%&(+.0369V<?AzDGI?LN3QSUBXZ\^`bdfhmj#lm^opTrsuAvkwxy|z\{)||}~~ a@  @-  @3(  @6-&  @80*%  @93-($  @:50+'#  @;61-)&#  @;73/+(%"  @<840-*'%  @<952/,)&$" @=9630-*(&$" @=:741.,*'%#" @=:7520-+)'%#" @=;8530.,*(&%#! @=;8641/-+)'&$#! @>;97420.,*)'%$#! @>;97531/-+*('%$"! @><:86420.,+)(&%#"! @><:86420/-,*)'&%#"! @><:865310.,+)('%$#"! @><:975320/-,*)(&%$#"! @><;976421/.,+*('&%$#"! @>=;9864310.-,*)('&%$#"! @>=;:865320/.,+*)('&%$#"! @>=;:8754210.-,+*('&%$#""! @>=;:9764320/.-+*)('&%$#""! @?=<:97653210.-,+*)('&%$#""! @?=<:98654210/.-+*)('&&%$#"!! @?=<;98754320/.-,+*)('&%%$#"!! @?=<;987543210/.-,+*)('&%$$#"!! ares-126/mia/Firmware/Super Famicom/st011.rom000066400000000000000000001500001415063341600206600ustar00rootroot00000000000000 4@< PD%VhA8BB` p 4 }e : H:79v />V vN^N'# ?+` p 4 }e : H:79v />V  ?#Ѐ0/ ?#Ѐ0 聑—?$—0— ?#Ѐ0 D ?| ̂—F———— f—|A  × ?0  B ?@××  ×̃@AE ,Ĕđ#T  đ?/ B胑 Xđ/A"E$Td$ % $/@CD&0&0&0%5 D& 5 & 5 & 5 D'&MU% ' % %1'5 %@%/%/@ B ?,B ?D$ B$a%a0$a%a0«$a%a0M5 & ­$Z%a0$Z%a0B$Z%a0B$]%a0°$]%a0²$]%a0$]%a0B$]%a0 5 &% µ$a%a0$a%a0B$a%a0M5 & B$Z%a0$Z%a0²$Z%a0°$]%a0B$]%a0B$]%a0$]%a0­$]%a0 5 &@    O O O O O  @   O      O @ABC ?lB$d̑$d̑B $d̑ $d̑B$d̑$d̑B$d̑$d̑B$d̑B$| @BC ?|B$t͑$t͑B $t͑ $t͑B$t͑$t͑B$t͑$t͑B$t͑$ @i  ?'  ?$4NC 8 8 8C 8C 8 8 8@$0DΑΑ0hΑ?i$'Ѐ$@$0Α0ϑ0Α ϑ?0i$'Ѐ$@%O 0C C    C @%0ϑ,Б0ϑ?,i$'Ѐ$@%0DББ0hББ?i$'Ѐ$@AH  ?Đ  ?ܐ-  ?Atёtєi$ Cl0%j Cd0%h @0BH$ /-$Ѐ/ё 0BH$ /-$Ѐ/@0BH$/ $Ѐ/ґ0BH$/ $Ѐ/@E$ /+$Ѐ/ttC$ /B($Ѐ/C$ /($Ѐ/tE$ /*$Ѐ/E$ /+$Ѐ/F$ /B+$Ѐ/J$ //$Ѐ/K$ /B0$Ѐ/tE$ /*$Ѐ/E$ /+$Ѐ/F$ /B+$Ѐ/H$ /B-$Ѐ/H$ /-$Ѐ/J$ /0$Ѐ/tE$ /+$Ѐ/H$ /B-$Ѐ/H$ /-$Ѐ/J$ /0$Ѐ/CCtE$ /*$Ѐ/F$ /B+$Ѐ/J$ //$Ѐ/K$ /B0$Ѐ/CtE$ /*$Ѐ/E$ /+$Ѐ/F$ /B+$Ѐ/H$ /B-$Ѐ/H$ /-$Ѐ/J$ //$Ѐ/J$ /0$Ѐ/K$ /B0$Ѐ/tJ$/B$Ѐ/ttM$/$Ѐ/M$/$Ѐ/tK$/$Ѐ/J$/B$Ѐ/J$/$Ѐ/F$/ $Ѐ/E$/ $Ѐ/tK$/$Ѐ/J$/B$Ѐ/J$/$Ѐ/H$/ $Ѐ/H$/ $Ѐ/E$/B $Ѐ/tJ$/B$Ѐ/H$/ $Ѐ/H$/ $Ѐ/E$/B $Ѐ/CCtK$/$Ѐ/J$/$Ѐ/F$/ $Ѐ/E$/ $Ѐ/CtK$/$Ѐ/J$/B$Ѐ/J$/$Ѐ/H$/ $Ѐ/H$/ $Ѐ/F$/ $Ѐ/E$/B $Ѐ/E$/ $Ѐ/t  ?Aߑߔ0 m0%$o Ğ@DN__ PJBЀ$$Ѐ$P_B$B$ (@i  ?ПAN  ?蟑D$'$# %m0 q0%hB @i$?Ѐ/BN$B/I BN$B/I 0%bIـBN$B/@Bf$?Ѐ/K$B/@f$?Ѐ/K$B/@f$?Ѐ/L$B/@h$?Ѐ/N$B/@Bi$?Ѐ/N$B/@Bk$?Ѐ/P$B/@k$?Ѐ/P$B/@k$?Ѐ/Q$B/@ $=ÑK$B/@@B $qÑK$B/@@ $ÑL$B/@@ $ÑN$B/@@ $ đN$B/@@$AđP$B/@@B$uđP$B/@@$đQ$B/@@mmc$?Ѐ/I$B/Bd$?Ѐ/I$B/mMemM-m-FFmMeFmK$B/K$B/L$B/N$B/N$B/P$B/P$B/Q$B/mAmAmMAum yum yAem yAuMAEum um AEm AEu-mFum yum yFmFAEum yum yAEFm yAEu-mAEmmAEFmMAEum yum yAEem yAEuFm  ?$'$# ͺ%m0 æ0%hB  @‰$?Ѐ/BN$@/Uʑ˔ BN$@/ʑ˔ 0%b˔BN$@/@$?Ѐ/Q$@/@B$?Ѐ/P$@/@$?Ѐ/P$@/@$?Ѐ/N$@/@$?Ѐ/N$@/@$?Ѐ/L$@/@B$?Ѐ/K$@/@$?Ѐ/K$@/@B0$ ͑Q$@/@@0$A͑P$@/@@/$u͑P$@/@@-$͑N$@/@@B-$͑N$@/@@B+$ΑL$@/@@+$EΑK$@/@@*$yΑK$@/@@U = U = $?Ѐ/S$@/$?Ѐ/S$@/=  U 5 =  U m = U m U FU FU U =  5 U U FU U = Q$@/P$@/P$@/N$@/N$@/L$@/K$@/K$@/=  =  =   E = IU E = I 5 = I E   E y = U m E y =   y =  E = U FU E = IE = IFU U = U FU  E y = IU m E y = I FU U y = I E =  y = U U y =  FU U =   E y = IU U E y = I  5 y = I E FU U = AԔi$?*/‰$?-/BN$?&# &2 # ]TTA0U A}   AT $Ѐ/ @  ? D$$'$0 0%h$B @ ֔$Ѐ*$$0֐Ѐ*@ M֔$Ѐ*@$Ѐ*$$0֐Ѐ*U֑-ה$Ѐ*-$$0-אЀ*@M$Ѐ*5ב}ה$Ѐ*@yQyByBByBByBFQQFQQyBBQQFQQyy!y1y!B!yB!!B!yB!!B!!yB!!B!yB!!!B!!yB!!!B!!yB!!!B!yB!!!B!!yB!!!B!y!!B!!FQ1F1Qy!B!F11F11y!!B!!F1QFQ1y!B!F11F11yB!B!11F11yB!!B!!Q1F1QyB!B!11F11yB!!B!!1QFQ1y$$'$0 0%h$B m@ iݔ$Ѐ*i$$?0iݐЀ*@ ݔ$Ѐ*@$Ѐ*$$?0ݐЀ*ݑqޔ$Ѐ*q$$?0qސЀ*@$Ѐ*yޑޔ$Ѐ*@BBBBBBFFBBFmuBmmmBmmBmBmmBmmmBBmmmBmmBmmBmBmmmmBmBmmmmBBmmmmmBmBmmBmmmFuuFBmmuFuuFumBmmmuFFumBmuFuuFuBmmBuFuuumBmmBmFuumBBmuFuuumBmmBmuFu 0`* b`/"0`* b`/!5`* b`/#5`* b`/D!6`* b`D/D#6`* b`D/!8`* b`/#8`* b`/!9`* b`/#9`* b`/";`* b`/$;`* b`/D"<`* b`D/D$<`* b`D/NȑȔ #,0%`>$%aj$%a` $0%` (0%`0 #ꇑ0$$0$$ 0%@N:ʔi$ /‰$ /BN$ D/  /D / VIIDA: > 0  Az ~ 1    AI  1 р $1 $ >@$ o$DB$v˔Bl$ 0ڊ!0ʐB$ˑ00%b/B$vBl$vD/$V̔l$ 0!0ː$ˑ00%b/$Vl$VD/$6͔l$ 0!0̐$̑0ڌ0%b/$6l$6D/$Δn$ 0z!0͐$͑00œ%b/$n$DB/B$ΔBo$ 0Z!0nΐB$Α00œ%b/B$Bo$DB/B$ϔBq$ 0:!0NϐB$zϑ0z0%b/B$֏Bq$֏D/$Дq$ 0!0.А$ZБ0Z0%b/$q$D/$єq$ 0!0ѐ$:ё0:0%b/$q$D/% o$?$Ҕq$  0 0Ґ$Jґ0J0%b/$q$?/$Ӕq$  00Ґ$*ӑ0*0%b/$q$?/B$fԔBq$  00ӐB$ ԑ0 0%b/B$fBq$?f/B$FՔBo$  00ԐB$ԑ0ꔑ0œ%b/B$FBo$?FB/$&֔n$  00Ր$Ց0ʕ0œ%b/$&n$?&B/$הl$  0j0~֐$֑00%b/$l$?/$הl$  0J0^א$ב00%b/$旑l$?旑/B$ؔBl$  0*0>ؐB$jؑ0j0%b/B$ƘBl$?Ƙ/0ؐ%m%D'D0Nِ%mD'$D'@%% %JZAH  ?Aّ& C0%h %BH$?6Z% *ЀJ%@h T/V@0BH$ ڑڑ@0BH$/ ڑ *%%?0BH$/@E$nC$C$E$E$F$J$K$E$E$F$H$H$J$E$H$H$J$CnnCnnE$F$J$K$nnCnnE$E$F$H$H$J$J$K$%% $2^AH  ?Aݑ& 0%h $BH$?^% *Ѐ2%@0BH$ jޑޑ@0BH$/ jޑڞ *%%?0BH$/@J$6M$M$K$J$J$F$E$K$J$J$H$H$E$J$H$H$E$6C66C6K$J$F$E$6C666K$J$J$H$H$F$E$E$'  ?3$AC +  C C   @$0'‘0?''Ѐ$@$0?‘‘0c‘ ‘?'Ѐ$@'  ?%?C CC CC C C C CC C@%0OÑÑ0sÑ?'Ѐ$@%0Ñđ0Ñ đ?'Ѐ$@%Awđ'$w î0%h +%@%O@ЀđЀđBЀđЀđBЀđwЀđBЀđЀđЀđ0;őDC0_őD0őDC0őDwBЀđЀđwЀđBЀđBЀđЀđЀđЀđwЀđBЀđЀđBЀđC0ƑD0ƑD0ƑD0ǑDwv% ȑOǔ% ۈ%$(K$ȑ$(J$ȑB$(ۇJ$ȑB$(H$ȑ$(3H$ȑ$(_F$ȑ$(E$ȑB$(E$ȑ% Ȕ@%@%O@i  ?  ? %_J  c C  c C  c  c  c  c C  c %Bn$m$k$Bk$k$Bi$h$f$f$ Bf$ @%0i$kʑʔ0 ʑ?NJ‰$@%0i$ʑC˔0ˑ3ˑ?C‰$@ ª$-$ &@@'^-% oN'̑ #0%j0%m'$ 00%h %! c̑JG D! ̑AG G ! ̑G G AG G AG ! ͑ G G AG AG G G " ;͑JG AG G AG D" o͑G AG G G %@ª$-$ &@ª$ &-$ /@i$ЀRi$Ri$Ѐ{@0͑@0k ͑ c ͐ @0 Α  @0ǎ ͑ @ 0 Α0͑@# ϐ #ϑ # 0 ϑ0W ͐ @ ϐ{ {ϑ 0 oϑ0Ϗ @ {0 ϑ0͑@o'  А Б 0 ϑ0? ;А ;Б ' A' A////A/' AA' C[C[' ACC' [[C[' AAC' A//' /' A' ' ' C[' C' ' A' [' A' ' A'  ª$-$ &@@ª$-$ &0 ґ@` '^-% sNӑ‰$D/ #0%j0%m'$ 00%h 3% Kԑ K;%B`$Kª$-$ &! gԑJD! ԑAss! ԑssAssAs!  Ց ssAsAsss" ?ՑJCCD" sՑC%@ª$-$ &@ª$ &-$ /@i$ЀRi$Ri$Ѐ@0OD O֑0@0ǖD ֑0Ց  Ր  Ր@0/D ֑0/ב Ր ՐՐ@0D oՑ @ Ր Ր@D ӗ0 ב0Ց@0 ב0Ց@D {+ 'ؐ+ؑ0 ؑ0 Րؑ wؐ0 gؑ0 Ր@ KِD 'ؑ0 ؑ0ّՑ0 ّ0ّ@D g0 _ّ0Ց@0 ّ0Ց@D ّK@ ِّ0 ّ0 ՐՑ Gڐ0 +ڑ0 ՐՐ@00BH$00뚑BH$뚑@3A3ASSSSASA A CC A CCCAACD ӑDܑDܑDܑCD  ݑCASSSACC A AA  ? A  ?$o  ?@y @ = @ >\>>L??@ >\>>>@ >\>?@ >\>>?@ >>?@>??@>??@y *Fy y @Fy *y Fy @y *y Fy @Fy *Fy y @y *\>>??Fy y @Fy *\>>??y Fy @y *\>>??y Fy @Fy *\>>??Fy y @\>>??y Fy y Fy @y *Fy y @Fy *y y @y *y y @y *Fy y @y * >>L??Fy y @Fy * >>L??y y @y * >>L??y y @y * >>L??Fy y @ >?$5Α>B$MΑL?y Fy y y @>L?$Α >$Α?y Fy y y @>L?$Α?B$ϑ >y Fy y y @ >?$IϑL?$aϑ>y Fy y y @q$@/q$@/Bq$@/Bo$@/l$@/Bl$@/@q$@/q$@/Bq$@/l$@/@q$@/q$@/Bq$@/Bo$@/l$@/Bl$@/@q$@/Bo$@/n$@/l$@/@Bq$@/Bo$@/n$@/Bl$@/@q$@/Bq$@/Bo$@/l$@/l$@/Bl$@/@q$@/l$@/l$@/Bl$@/@q$@/Bq$@/n$@/l$@/l$@/Bl$@/@q$@/$?Ѐ/@ @Bt$@/$?Ѐ/s$@/$?Ѐ/@q$@/$?Ѐ/q$@/$?Ѐ/Bq$@/$?Ѐ/l$@/$?Ѐ/Bl$@/$?Ѐ/@q$@/$?Ѐ/q$@/$?Ѐ/Bq$@/$?Ѐ/Bo$@/$?Ѐ/n$@/$?Ѐ/l$@/$?Ѐ/@ F F @ F @Nٔ$?B$? ]W*i$?р *7-р W*$B$ W*‰$?р *58-р 5X*DBN$o$ # &2 #0ؐAّB0՘D -$9BD!-$9AaY-$9yD -$ @NZ@$<0$? !\0!0i[ ۑE0jD0%m4&0  D ې*5 B"  0m% < *5 B"  0m%;E0%j5! ?0;EЀ%j5! ?0 *5 B"  0m%>E0%j5! ?0>EЀ%j5! ?0->!0=->&=>&/-$? Z@0!02_ ߑE0jD0%m4&0  DMߐ*5 B"  0m%J *5 B"  0m%: E0%j5! ?0: EЀ%j5! ?0J !0ZJ &Z &/ 0@ ?N'$0 [0%h ijD"AfBAIJfDDrAAIJAijDĴDf"DDB&fBIJfBijĵDĶDi  ?rDCi$Oı ‘*ڂi$O"Ci$/ FÑ*Fi$/#ijCi$/D Ñ*i$/#@$$Đ*-/D$?D/-$?/DvĐD/D*ĐЀ-Ŕ&Đ/ĵŐDĵĶ/D/@DŐĵ/Ĵ/D/D/Ķ/D/DĴ/@Ɛĵ/Ĵ/D/D/Ķ/D/Ĵ/ij/D/D/ijDD/D/@İǐĵ/Ĵ/D/D/Ķ/D/Ĵ/ij/D/D/D/D/ij/IJ/D/IJ/DD/@ Ȕ  ȑ/ĵ/Ĵ/D/D/Ķ/D/Ĵ/ij/D/D/D/D/ij/IJ/D/İ/D/D/IJ/ı/Dİı/D/@ɐɐ#$$#ɐ $#@:ʑ#@(njʑ))@*BN$?ʑ?0 ʑʑ#@*)BN$?ʑ?0 ʑ"ˑ)@>* * A>*>* >*>*A>*>*A>* **A*A*** *C**C* r*Cr*r*Cr**A*** *C*** r*Cr*r*r**A**A* K$ **J$ J*J$ jA*H$ A*H$ *F$ ʍ*E$ ꍑ*E$  A* >*A>* >* A>*>* * ** A* A** *C* C** r*Cr* Cr*r* ** C** *A* r*r* A** Cr*r*  ?提İ/NFБ'$0 o0%h @ $$#$0А*Ѐ-i$Bꐑİi$IJNi$JDNDё2İ0/2Ѐѐ2#ԔԑԐ摑Ԑԑ2DҐzĸҐzķԑԑԑDԑ?ĹD42Ґ^Ґ^ķԑԑ2ӑD2ӑD/Ĺ/ĸ/D/D/D?ĸD4ķԑԑBԑDBԑD/Ĺ/ĸ/D/D/D/D/ĸ/ķ/D/4D/D/ĸ/ķ/D/?Dķ zՔ#DzՐzՑ2ՐՑ2ĺ~Ր~ՑD/Ļ/ļ/ĺ/Ļ/D/ĺ?D@D/Ļ/ļ/?Ļ@D?ļ@  b0$-$#$0^*00~5@  ֔b06֑b0@  ֔56֑5@f6F06F0f6Af6F0Af6f6f6Af6f6F0A0—b00ޗb00b00b0A02b00Nb0F0O66O66F0O66O660b00b0A0*b00Fb0F066O66F066O66A0ꙑb00b0A0"b00>b0F0E$vA0vb0E$0b0F$ޚ0ޚb0H$0b0H$FA0Fb0J$zA0zb0J$0b0K$⛑0⛑b0F0Af6f6F0f6F0f6Af6F0A0^b0F00~b00b0F00b0F00ڜb0A0b0F0O66F06O6F0O66F06O6F066F06O6F0A0b00b0F066F00Vb0A0rb0F06O6F0##$A&#D vߔvߑ##AB#$A&# vߔvߑ##B#$A&###D/D/D/D WW WWD&/&/D&/'/! D&/&/D&/'/Doo'$0 0%h @@$Ѐ/@0os!  %b0os!@qs!@!@Bts!ss!@qs!Bls!qs!Bqs!ls!@qs!qs!ls!Bqs!Bos!ns!@qs!ls!Bos!ns!!C!C!!@qs!Bls!Bqs!ls!!!C!!@qs!Bls!@qs!@qs!@qs!ls!@Bqs!@!C!@qs!ls!@Bos!ns!@!!@qs!Bls!@Bqs!ls!@ ?@D&&&'ķ_đļwDļőDőĻđD/DĻ/ļ/ļ%Ļőőĺ/Ļ/D/D/Ļ/ļ/Dļ%Dĺ/D/ĻļD/ļ  ıFDijۆDۆİD(İ/İ/D/IJ/(Dİ/ijD//(i$B[İ/Ds'İDi$IJD/IJİİ/D/IJ/i$GD/ijİDDİ/ijD///D/D&/DĺȑDOĻ#ɑODKɑļO/İ/'/İ/D*'/DʑDİ&/ĻKʑKʑ&/@{ʑļ{ʑD&/@Dİ/ĺ/ۊDļۊʐ#&/&/@&&/@p v% _ˑ2-Nˑ'$0 0%h w=%@ª$-$ &@ª$ &-$ /@(ˑ@(狐,+@(狐,+@(ӌ狐,@(狐,狐@-+0 ͑(ˑ@[-W,[-+0 C͑(狐,@͐-+0 ͑(ˑ@,0 ͑(̑@.,ΐ+0 ͑(W狐,狐@,+-+A,,+W,W,AW,,A,+?,?,A?,A?,?,?,+;-C;--C-+ -C - -C -?,A?,?,?,+;-C---+ -C - - -?,A?,?,A?,+(珑BH$珑+(BH$+A(GBH$G+A(wBH$w+(BH$+(אBH$א+(BH$+A(7BH$7++W,A,+W,+AW,,+?,+?,?,+A?,+A?,?,+;-C-+C;--+ -C -+?,?,+C - -+A?,?,+;--+C--+?,A?,+ - -+A?,?,+C - -+(˒BH$˒W6@-%22A2A2222A2%SBH$% ˓Nӑ'$ 0%h _%@%%0BH$ ӑNKԑ'$K C0%h %%76WՐԐD# ԑª$-$ &" Ց;%`$ª$-$ &# WՑª$O-$ &# Ցª$-$ &# Ցª$-$ &$ Ցª$O-$ &D$ 7֑ª$-$ &0 wԑ%@ª$-$ &@ª$ &-$ /@BH$Bª$ &-$ /ª$-$ &3kª$ &-$ /ª$-$ &3ߗª$ &-$ /Ӑª$-$ &3Sª$ &-$ /Ӑª$-$ &30 ؑBH$B6ؑW6@6ؑW6W6@6ؑW6W6@6ّW6W@6GّW6W@0BH$W Oّ@0BH$ ّ@W6W60BH$ ّ@W6W66383A6 6 36ǖ6ǖA6ǖ6/A6/366A6A66638ǖC8ǖ8/C8/38C88C86A66638ǖC8/8/8/38C8886A66A638K40BH$K ܑk<g6kܐW6K4A#9#9K488A88A8K488A8A888K49C99C9K4K9CK9K9CK98A888K49C999K4K9CK9K9K98A88A8K4" ޑAB$  ?0㝐 ϝ# [ޑA KJ? 3D# ޑA ? o# ޑA Þ? # ߑA  ? 瞐$ KߑA ;J? #D$ ߑA w? _@ª$-$ &@@* UI8 $ fUiD!u^H3 vj^SI>4+"}xtplhd`\XUQNJGDA>;852/,)'$!   <?BDFGIJLNOQ        U(58Q@I()345N]Rbx+ T - T 1 T N T T _ [ p l }  ( ? + -  - H    ( U    6 ^  " = $ = = & = = Y p D D D , D D b } " K $ K K 2 K K g " R $ R R 8 R R b  %&])],]1]]% j j,j<jj%&w)w,wGww%&),R%.....jb;;; ;;{sHHHHHUUU#UU  !!""##$$%%&&&''((()))***++++,,,,,-----....../////////00000000000001111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 H6B<B<??&xx !$'*-0369<?B.=L!1AQ9Uq;Xu)Qy+U!!!!!!!!!!7""/###\((`((n((u((((())** "$'*-0368;>ADGILORUX[]`cfilnqtwz}22222222223 313B36036036033333360360232360333360333606036036033333360360603603603603360333605555555556)6R6g66474747677>7T74x7457574777747b7744'74'74'77'7'7I7[74744/74/74/74/7/74/7m774x88{88888888888[8[88[88[8888888[88[8x88{88[88888[8888[8[88[88[8888888[88[8[88[88[88[888[8888[80PPP @PP (HPPP 222(22-222  -6(zzqz'zzL<     -6GP  i i iaiity  ll lfll ~  q q qqq1B   ( ( ( (( K\  0@H0H&NNNCNN]bzRRRJRRguYYYYYn !;;;;;;;;;;;;;;:[<:[<:[>>>>>>>>>>>><?+??+??+? ?+?+?8?A?R?[?=ares-126/mia/Firmware/Super Famicom/st018.rom000066400000000000000000005000001415063341600206660ustar00rootroot00000000000000* L<RHq @#Q@-48@@-0,@@-, @@-(@@-$@@- @@-@象 )ן C-飀け 彀kC-け   Copyright (c) 1994 RAHDOMHOUSE X-@-@DD (PX-  ?  ;9 QR RC\P   \5/!txRAN@P\MhHxOUSEk.$kX.` RH@Q @-0 P P @-w@@- @- @-PP@--@-QAB @-QR A=$ B ] xV q-l$L$[<$aW $ Q$M##B# ; R 7 QR 2 Q   @-D# y B#"o620RP ̒c P R 崒\ PB렒[뜒Y`X 6|R`lQhO` 0 , *け y(PU P R) RQP!ȑ"    R!圑ꣀけ 彀kAA  p L1L*0p0*pR$  P R0@S0E0@US0000@S0@@ D H L`` `````@` @ `dhhp<Xd8D xV4-TT  / -   P `џQaaY   / P!-P- BJBP<P,P@@0@LLZDT\ @&-cmP P! P/ P7 ( onTo _U U   P A"  -P  oCTo _U$Z P 0  4O R b"0c&0u"N&&&-   @  | x t p l T `ა$ YTPc P @-@PXPYSYTP \P_ <P_ PXPYTPmo 0@ST`` ``!DC$$`a$$`aU P`FYP`F    `a   \k\Lk L~ \l\~Ll L} \m\}Lm L| \n\|Ln L{ \o\{Lo Lz \p\zLp Ly \q\yLq Lx \r\xLr Lw \s\wLs LP%x$- -@ 0 #cQL U!:H- H@0#3PP - ZJ0\T_ D-} %Z@J@PPPq - -@ 0 #cQL U!:H-\H@0#3PP -O ZJ0<T_ D-@ %Z@J PPP4 - - @ #cQ U: -P- $ -$ Z@J \P_  l %ZJPu - - @ #cQ U: -P-_$ -F$ Z@J <P_ A %ZJPA 0?L@ 0  @ -h d R僐 Y TP PPXPY@ _ ]  _ ]   - -   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPP` V> t1g 50 `,`F VP 1Z 50 `,` VP 1M 50 `$`F VP 1@ T50 `$` VP 13 $50 `(`F VP 1& 40 `(` VP 1 40 ``F VP 1 40 `` VP 1 `@L L`$k Z Jx xp pP PL LH H  P PL LH H( (  @ L L( (  @ P PH H  P PL LH H( (   @   `$kt Z t J     H HP P     ( (L L   ( (L L  H HP P     ( (H HL LP P 8 < X ! H!!L!!8"!8"!8"!8"8""""""ZZZZ @@P L _$Z  Aq `EPL `FP Pk P P L _"Z  AQ `EPL `FP Pk P _Ux ` ,P  B(P  @ $P  `@P  @xP   $xP   `@(xP @ @ ,xP  bZ[68:2P (P * * * * * * * * * *@**** * *- Pバ PY_U @`,vP  V D,vP @`(vP  V @ D(vP @`$vP  V ` D$vP @`vP  V DvP @`P  V DP @`$P  V  ` D$P z@@`(P  V@ @ D(P i@`,P  V D,P X@@p,Q p$Q p$wQ p,wQ DD<<p(Q pQ pwQ p(wQ ----------,.-..--- Pバ PY_U @`,P  V D,P @`(P  V @D(P @`$P  V `D$P @`P  V DP @`vP  V DvP @`$vP  V  `D$vP z@@`(vP  V@ @D(vP i@`,vP  V D,vP XBBp,Q p$Q p$wQ p,wQ FF>>p(Q pQ pwQ p(wQ -(  \ P @8  Q P4 F P0 ; P, oLo _oU _  oLo _  _oU  h PU 8 Pô hl)H D+ <[U  8P(0u1uP- P -HD+?O-O - PH D+ ? O P  d < _U 0? wHPH  <[ 0? DPPH "N-PP l HD+-Y @PIH  PH D+  PH TD TDK D TH THK H D+ -dPN-oOLo _V x_U HPH DPPH \P`-@Q  A -0HD+o- :HD+a bH+ D -0`H D+ o  -0{-n1>PLpBP&oKo _VA 4^Ap/P$oKo _V. 0K.oKo _V" np ڰoKo _V $ l42LoKo _V $ ^0$> \P `-_U lHPH DP'PvHD+?O-O A BH D+ zHD+a bH+ D -p`H D+ ? O -` HPH H -_U 5HPH DPPH -h l p*_oUtlP:hvPh  HPH DP9,_U HPH DPPH -Mo(Ko _V _U 00-O0-0HPH DPPH \P `_oUp-I -0HD+o- )H D+ - `H D+ o  -0W-.PU@H$AS*_oU-8HD+?O-O  H D+ ? O P __oUP0#2 P(0O) 0O%P@0O0O 02N 0OpѰP--  -_oU HD+o^- -'H D+ 5PU@H$A^H D+ o @@-$ -_`U @-5@Po _oU-U_``-`P:PUo pFڰ_oU-`5hQlQ-*UP* lQ:UQ# @-:@UP:U@P TP VP XP ZP @-0i-0i@P `-|`P:PUo _oU-X`G PUo - P 0z$  @-02P_opU 0 0`o o00PUo oPPU 0So @Q @QUP P`@    -pUW : -PQ pp  %@%0X-`a&T_o-0pUW : -PQ pp  %%pUW:pDXT @DT LDXQ  pUpqW*(@QppQ -00-HD+?O-O $ SH D+ ? O P0-0soU -?s00HPD+P- Y I-- --`--- Q --- M C P UQ:ppdyWUQ:p$Q "Q  N N N-崟 L-EP Pڴ 䴟 -L3P-L-{H- L!P P W-_@_ T 08W_@_ T 0m P-g oKo _U= U4*0/ ;>-/ 3> / 0 ; -0PQ P@P TP XPPP-_ t_- !@ \ P- oY\o _U \P@ 0@U1*-0P *P*!#P -0  P0/6-/ u6 / -0JP P*0@P- o;Ko _U5 U-*0/ ;>-/ ,> / 0 ; -0PP@P TP XPPP- @  - $ L P\P@ @o[o _U*UP*,  P@  P<P-0N/6-/  +A 6 / -0-\P0002/6-/  A 6 / -000- @-oxJo $D_`U 0#T0o   _U9*0Z@J\L / ;?-/ ?  / 0 ; ZJ\@L-0PQ Pp@P TP XPPP@@P &T&-@D- -@pPPpPU P`p`V P` [P [ <`p`V P`@T [ -_U_ p"DW Z ,W Q @(W H $W ? W 6 W&W - $WF<W $ (WJ@W  ,WNDW  GPkv $Z "$Z! Pk$Z H_"Z @c   P_   PY  p,pGP PN  p(pGP PC  p$pGP P8  ppGP P-  ppP P"  p$pP P @ p(pP P  p,pP P _pDW0 ,W 0@ (W T0  $W  0 W 0 W&W 0 $WF<W H0 (WJ@W 0 ,WNDW  0 c((((444((4PPP4((4PPP4((4PPP4((444((((-j {   p P \Q*z$%@P!$!(! A Q`V@Q BQ \+R * 0 -UU,UUXUUUUUhV WXXY(UH[(UH[(UH[[H[H[[[(U\(UU`[,U`[(U`[U`[`[(U`[L\\(U(U[(U[(U[U[[VW(U ](U(U,pEX ,pX (pEX $pEX $pX $,pEX (pEX (pX $pEX pEXz pXu p,pGXP p,pXP p$pGXP p$pXP (pEXF pEXA pX< (pX7 p,pGXP0 -p,pXP& #p$pGXP p$pXP p(pGXP7 4p(pXP0 -ppGXP#  ppXP v,pEX $pEX $pX ,pX p(pGXP p(pXP ppGXP ppXP 9V,pEXX$X  V@(pEXX$X  V $pEXX$X  VpEXX$X x VpXX$X l V$pXX$X ` V(pXX$X T V,pXX$X H ,pEXr ,pXp ,pEX7 (pEX1 (pX, $pEX& p,pGXPN Kp,pXPG Dp,pGXP p,pXP p(pGXP$ !p(pXP w,pEX ,pX lp(pGXP p(pXP W$pEX $pX L`VP  $$%%`VP  $@$%@% ccccpcccccHddeehcgcgcggggXgXgcgc c,gc,gc,g c,g,gc,gggccHgcHgcHgcHgHgddcccccccccccccc\f\fciiiihiiiii@jjkknimimimlmmPmPmilii$mi$mi$mi$m$mi$mmmii@mi@mi@mi@m@mjjiiiiiiiiiiiiiiTlTlino oo`oo|ooo8ppq|qto so so sr s sHsHsorons ososnssosssoo8so8so8so8s8sppooooooooooooooLrLrotuuuXuutuuu0vvwtwzuyuyuyxyy@y@yuxutyuyuytyyuyyyuu0yu0yu0yu0y0yvvuuuuuuuuuuuuuuDxDxup(pG$$XQ >4PzPPHHjLL  ((WLL  ((p,pG$$XQ >Pp,p$$XQ >PPPp$pG$$XQ >Pp$p$$XQ >PHHPPHHp(pG$$XQ >4Pp(p$$XQ >4PLLppG$$XQ >4P  pp$$XQ >4P((PPLLp,pG$$XQ >Pp,p$$XQ >PPP^p(pG$$XQ >4Pp(p$$XQ >4PLL5  ((HHLLPPMM!p(p%%XQ >4PMM yyqqQQMMIIQQMMII))!!MM))!!p,p%%XQ >PQQp,pG%%XQ >Pp$p%%XQ >PIIp$pG%%XQ >PQQIIp(p%%XQ >4PMMp(pG%%XQ >4Ppp%%XQ >4P))ppG%%XQ >4P!!(QQ!QQMMIIp,p%%XQ >PQQp,pG%%XQ >Pp(p%%XQ >4PMMp(pG%%XQ >4PQQMMII))!!@p(pG$@$XQ >4P@@@@P@P@@H@H@@L@L@ @ (@(s@L@L @ (@(p,pG$@$XQ >P@p,p$@$XQ >PP@Pp$pG$@$XQ >P@p$p$@$XQ >PH@H@P@P@H@Hp(pG$@$XQ >4P@p(p$@$XQ >4PL@LppG$@$XQ >4P @ pp$@$XQ >4P(@(@P@P@@L@L@p,pG$@$XQ >P@p,p$@$XQ >PP@Pzp(pG$@$XQ >4P@p(p$@$XQ >4PL@LQ@@@ @ (@(H@HL@LP@P8M@M=p(p%@%XQ >4PM@M(y@yq@q!Q@Q@M@MI@I@Q@QM@M@I@I)@)!@!M@M@)@)!@!p,p%@%XQ >PQ@Qp,pG%@%XQ >P@p$p%@%XQ >PI@Ip$pG%@%XQ >P@Q@Q@I@I@p(p%@%XQ >4PM@Mp(pG%@%XQ >4P@pp%@%XQ >4P)@)ppG%@%XQ >4P!@!DQ@Q@=Q@Q9M@M@2I@I.p,p%@%XQ >PQ@Qp,pG%@%XQ >P@p(p%@%XQ >4PM@Mp(pG%@%XQ >4P@Q@QM@MI@I)@)!@!@@@l h @ -  [Mw!V h )07 / Qa  Y@20:  @20: -l h @  'DQ!o# 5 a)W0 ZU$%&A $$!(! A  l8VバY$V$f僐Y_PV`PT ,V+VPT +F(V'VPT 'F$V#VPT #FVVPH FPH $%P< %()P? ),-P< -TV,VSVPE SFPV(VOVPE OFLV$VKVPE KF0V,V/VPB /F V$VVPB FXV,VWVP< WFHV$VGVP< GFVVVP< F P<  _PV`PT ,-PT -()PT )$%PT %PH VVPH F$V#VP< #F(V'VP? 'F,V+VP< +FT,UPE UP(QPE QL$MPE M0,1PB 1 $!PB !X,YP< YH$IP< I P<  VVVP< F _`p`jP:Z j P_TU*_`p`jP:Z j P_TU*$$H  H  $$JL$K $$ $$H  H XQ   JL$K $$XQ >P  JL$K $$  H H   $$XP %%T T %% %%T TXQ   VN$W%%XQ >P  VN$W%% TT  %%XP (F\'D~oTFULFS,FP,N(FL$FJ$H,FE(FC(A$F?F=;(F8(6F42+}F,}C#}@$}=,F#,!$F$'`}1(X}.P}+H}(  ((HHLLPPv(Fs':pTFLFk,F,(F$F$`,F(F($FFS(F(F+,|,$|# $ @,F,$F$'(/,F,(F$F$$,F(F($FF(F(F+,#$,F,$F$'{(z,F{,y(Fw$Fl$j,Fp(Fn(l$FaFhf(Fc(aF_]+,#Lzd$Dza,FP,N$FC$A'(,F?,=(F;$F9$7,F4(F2(0$F.F#!(F'(%F+^,\#Z$X,F,$F$'M(K yy{(N(yZTGLE,B,F@(>$<$F:v,7(5(F3$1/F-i(*(F(&F$,`x1+Xx.$Px+#Hx(T,,F$$F(x'x xx?QQMMII))!!&(#(% TL,,F($$F,((F$F((FF,v+v$#,,F$$F(',,F($$F,((F$F((FF,+$#,,F~$|$Fz(u~'u{,m,Fk(i$^$F\,b(`(F^$SZFX(U(FSQFO,+$uO#uLx,B,F@$5$F3(r'pnlg,1,F/(-$+$F)\,&($(F"$ FO((F F ,I+G$E#C>,,F$$F(8'6ss+-SバYS僐 YZ`%AD4V d$$ZUZ`%AD4V\%%ZU4@PdĆ8lЇ(܇((((|\Ȉ<4@lL<Ї܇܉\<<Ї܇̊L,p<ȋ؋lLXdpP0ċȋptԎ8ċXdpdď0ċXdpTԐċ\\\\\\\\\\\\\\\\\\ 0!xxH  H  H  H XQ  JL$K XQ >P   JL$K  H H T T T TXQ  VN$WXQ >P   VN$W TT(F'dvTFLF,F,(F$F$,F(F($FF(F}({Fyw+uz,uw#ut$uq,Fh,f$Fd$b'ue(xubpu_hu\,FS,Q,FN(FK(I$FF+uH,uE'uA(u>(b(tdT[LY,V,FT(R$P$FNv,K(I(FG$ECFAi(>(F<:F8,Dt;+WN$f%vTVLCC-IK,U>WN1Q: R !$f%v0`TVLCV*xWU0x@ Ux@V:R3S3Q3S3Q3C-IK,U>WN$f%vHJLCTQP*QW:P 0C-IK,U>WN0$f%vHJLCW*xVUx  Ux W:T3Q3S3Q3S3C-IK,U>WN$f%vLCV*VxW*VR3S3Q3S3Q3C-IK,U>WN$f%vLCW*WxV*WT3Q3S3Q3S3-Tp \&\'pXpY-R バYZ P@D@ZPZU\P Tp J@ P'$PpXpY\P Tp FL@ P'$PmpXpY\P Tp K@ P'$POpXpY\P Tp 2L@ P'$P2pXpY\P pJ@ P'$PpXpY\P |pL@ P'$PpXpY\P |pK@ HPPP'$PpXpYi <PxPP4PPhX(pE %P:$\P*;p(pGP  %P:y$\P*})TpE %P:j$\P*qLpE %P:\$\P*c ,pE %P:M$\P*X(pE %P:?$\P*J$pE %P:1$\P*<$p %P:#$\P*.,p %P:$\P* ,pE %P:$\P*(pE %P:$\P*$pE %P:$\P*pE %P:$\P*p %P:$\P*(p %P:$\P*p,pE %P:$\P*,pGP  %P:$\P*$pE %P:$\P*$pGP  %P:$\P*$p %P:{$\P*$pP  %P:k$\P*,p %P:_$\P*,pP  %P:O$\P*-- -,-4-T-X-\-,pE %P:1$\P*,pGP  %P:!$\P*w$pE %P:$\P*|$pGP  %P:$\P*i$p %P:$\P*n$pP  %P:$\P*[,p %P:$\P*`,pP  %P:$\P*M(pE %P:$\P*MpE %P:$\P*?p %P:$\P*1(p %P:$\P*#\XT4, 4(pE %P:w$\P*(pGP  %P:g$\P*pE %P:[$\P*pGP  %P:K$\P*p %P:?$\P*pP  %P:/$\P*(p %P:#$\P*(pP  %P:$\P*-- -,-4-T-X-\-(pE %P:$\P*(pGP  %P:$\P*pE %P:$\P*pGP  %P:$\P*p %P:$\P*pP  %P:$\P*(p %P:$\P*(pP  %P:$\P*x,pE %P:$\P*x$pE %P:u$\P*~$p %P:g$\P*,p %P:Y$\P*\XT4, ,pE$Z  (pE$Z  $pE$Z  pE$Z  p$Z ~ $p$Z { (p$Z z ,p$Z w H-GGHH HTH\HHH H,HHHXHHH H4HH,HXH H4HXH,H4HXH-K-0Hr-n-0H=--0H4--0HW-'-0HH,H4HXHI-E-0HH,H4HXH-y-0HH,H4HXH--0HH,H4HXH`-H,H4HXHV--0H!6--0HY-*-0HP-M-0H--0HH HTH\H --0HH HTH\H+--0HH HTH\H--0HH HTH\HH\H(PP HPP TH- HTH(PP HP \H-{ HTH(P \HPP H-fH\H(P THP  H-Q|HH H,HTH\HHH HXHHH H,HTH\HH,H4HTH H,H4H\HH H,HTHXH\HHTHXH\HH H4HTHXH\H`,`F0H$'P *ZP >PH`(`F0H$'P *ZP >4PH`$`F0H$'P *ZP >P H``F0H$'P *ZP >4P,H``0H$'P *ZP >4P4H`$`0H$'P *ZP >PTH`(`0H$'P *ZP >4PXH`,`0H$'P *ZP >P\HH-`GGHH HTH\HHH H,H4HXH-4_-pA-R バYZP@D@ZPZU\P Tp J@ P&$PpXpY\P Tp FL@ P&$PmpXpY\P Tp K@ P&$POpXpY\P Tp 2L@ P&$P2pXpY\P TpJ@ P&$PpXpY\P TpL@ P&$PpXpY\P TpK@ HPPP&$PpXpY$u ,T,,,,Dp4``(p $P:$\P*;p(pP @ $P:~$\P*})Tp $P:o$\P*qLp $P:a$\P*c ,p $P:R$\P*X(p $P:D$\P*J$p $P:6$\P*<$pE $P:($\P*.,pE $P:$\P* ,p $P: $\P*(p $P:$\P*$p $P:$\P*p $P:$\P*pE $P:$\P*(pE $P:$\P*p,p $P:$\P*,pP @ $P:$\P*$p $P:$\P*$pP @ $P:$\P*$pE $P:$\P*$pGP @ $P:p$\P*,pE $P:d$\P*,pGP @ $P:T$\P*h -d -` -@ -8 - - - -,p $P:6$\P*,pP @ $P:&$\P*w$p $P:$\P*|$pP @ $P: $\P*i$pE $P:$\P*n$pGP @ $P:$\P*[,pE $P:$\P*`,pGP @ $P:$\P*M(p $P:$\P*Mp $P:$\P*?pE $P:$\P*1(pE $P:$\P*#   8 @ ` d h 4(p $P:|$\P*(pP @ $P:l$\P*p $P:`$\P*pP @ $P:P$\P*pE $P:D$\P*pGP @ $P:4$\P*(pE $P:($\P*(pGP @ $P:$\P*h -d -` -@ -8 - - - -(p $P:$\P*(pP @ $P:$\P*p $P:$\P*pP @ $P:$\P*pE $P:$\P*pGP @ $P:$\P*(pE $P:$\P*(pGP @ $P:$\P*x,p $P:$\P*x$p $P:z$\P*~$pE $P:l$\P*,pE $P:^$\P*   8 @ ` d h ,p"Z  (p"Z  $p"Z  p"Z  pE"Z ~ $pE"Z { (pE"Z z ,pE"Z w dJ-JJhJdJ`JJJhJdJ`J@JhJdJJhJdJ`J8JhJ@JJ`J8JJ@J8JJ-K-PhJ`(`4PdJ`$`P`J``4P@J``F4P8J`$`FPJ`(`F4PJ`,`FPJdJ-`JJhJdJ`JJJhJdJ`J@J8JJ-4_-pA(V@x0'V @(pFWP20(pGWP  @20  @TV@K0SV @LV@K0KV @,V@i0+V @,@i0- @(V@i0'V @$V@i0#V @$@i0% @$V@P0#V @$@P0% @,V@x0+V @(V@x0'V @(@x0) @$V@x0#V @V@x0V @@x0 @j,V@i0+V @(V@i0'V @(@i0) @$V@i0#V @V@i0V @@i0 @-V@P0V @@P0 @(V@P0'V @(@P0) @V@P0V @@P0 @,pFWP20,pGWP  @20  @,pWP#0,pWP  @#0 @$pFWP20$pGWP  @20  @$pWP#0$pWP  @#0 @,V@P0+V @,@P0- @$V@P0#V @$@P0% @(pFWP20(pGWP  @20  @(pWP(0(pWP  @(0 @pFWP#0pGWP  @#0 @pWP#0pWP  @#0 @,V@i0+V @,@i0- @,V@P0+V @,@P0- @(V@i0'V @,V@x0+V @,V@i0+V @(V@x0'V @(@x0) @(V@i0'V @(@i0) @(V@P0'V @(@P0) @$V@x0#V @$V@i0#V @v,pFWP20,pGWP  @20  @,pWP#0,pWP  @#0 @I(pFWP20(pGWP  @20  @(pWP(0(pWP  @(0 @( x0) @-(pWP20(pWP   20  @T K0U @L K0M @, i0- @,V i0+V @( i0) @$ i0% @$V i0#V @$ P0% @$V P0#V @, x0- @( x0) @(V x0'V @$ x0% @ x0 @V x0V @|, i0- @( i0) @(V i0'V @$ i0% @ i0 @V i0V @? P0 @V P0V @*( P0) @(V P0'V @ P0 @V P0V @,pWP20,pWP   20  @,pFWP#0,pGWP   #0 @$pWP20$pWP   20  @$pFWP#0$pGWP   #0 @, P0- @,V P0+V @$ P0% @$V P0#V @(pWP20(pWP   20  @(pFWP(0(pGWP   (0 @pWP#0pWP   #0 @pFWP#0pGWP   #0 @(, i0- @,V i0+V @, P0- @,V P0+V @( i0) @, x0- @, i0- @( x0) @(V x0'V @( i0) @(V i0'V @( P0) @(V P0'V @$ x0% @$ i0% @,pWP20,pWP   20  @,pFWP#0,pGWP   #0 @[(pWP20(pWP   20  @(pFWP(0(pGWP   (0 @.tSバY_`V 04  01qTE0S0!t20_TU*_`V 04 01qme0S0!t20_TU*\ h@HH<hh(hh\\|pdddd``(48$$$<$<<<<$$h($$pp$$d$$P$$$$$$$$-zTP -&6'FhSh0#hTh@#$%P @" 02 r rG-$f%v<pIK,U>WNPhPh#r-$f%v0`IK,U>WNhPh#rGPXPYGrz -_|oP@ ,PF<(PF:$PF8PF6P4$P2(P0,P._\I( `` _YoP: ,PF6(PF4$PF2PF0P.$P,(P*,P(_<&( = -Z$Z p< P,@Z%DZABC P #p BC P #p@PBZ (@Z%@ZABC P #0p BC P #p@L>Z $@Z&<ZABC P #p BC P #p@H:Z @Z !&ZABC P #=p8 BC P #p@(Z @()&ZABC P #p@ BC P #p@ Z $@HI&ZABC P #Jp` BC P #"p@Z (@LM&ZABC P #pd BC P #p@Z ,@PQ&ZABC P #Jph BC P #"p@Z pX# $ !Y1-Z"Z p0P,@PQ&Z BAC P #<p\AC P #p Z (@LM&Z BAC P #pXAC P #p Z $@HI&Z BAC P #<pTAC P #p Z @()&Z BAC P #p4AC P #p Z @Z !&Z BAC P #Ip,AC P #!p &Z $@Z&:Z BAC P #p AC P #p F<Z (@Z%>Z BAC P #VpAC P #.p J@Z ,@Z%BZ BAC P #pAC P #p NDZ pX#  Y10Q: 0Q:A 0<0p~30VpEs(0,pXPh,pXP ` 0,pEXPU,pGXP M0$pXPB$pXP : 0$pEXP/$pGXP '0,,p0,V,pE0$$p0$V$pE0(pXP(pXP  0(pEXP(pGXP 0pXPpXP v0pEXPpGXP c0 ,,pS0,V,pEH0p,,p<0,V,pE|10Y((pp%0M,,pd0A,,pX 05((pL0(V(pEA0((p50(V(pE*0((p0(V(pE0$$p0$$p0,pXP,pXP  0,pEXP,pGXP 0(pXP(pXP u 0(pEXP(pGXP b0-R<Y _TU:`Vq_TU*|x(h8dHTXPhU V(U V$@X ' G W w 7        (   H   X   x   ( H X x      (  H  X  x T԰TTڼTGT4Tڰ    G     W     w    G    W    w   G   W   w  G  W  w G W w W*vU*s(V(pEp(pGP  TVTpELVLpE,V,pE,,p(V(pE$V$pE$$p,V,pE/((p((V(pE!$V$pEVpEp p,pGP}  xp,pPs  np$pGPc  ^p$pPY  T(V(pEVpEp((pp,pGP  p,pP  p$pGP  p$pP  p(pGP  p(pP  ppGP  ppP  ,V,pEI$V$pEB$$p;,,p4p(pGP,  'p(pP  ppGP   ppP  V ,VPBV ,pEV@ (VL>V (pEV  $VH:V $pEV V(V pEV  V pV $V $pV (V (pV ,V ,p,V,pE,,p,V,pEx(V(pEp((pi$V$pEap,pGP  p,pP  p,pGP=  8p,pP0  +p(pGP  p(pP  ,V,pE,,pp(pGP  p(pP  $V$pE$$p-l h Rb<Y*:JZd `& \6 XF TV P>@R@b<Y(7GWg ( 8 H X h *:JZP L& H6 DF @V PQa<Y'7GWg ( 8 H X h b*:JZ< 8& 46 0F ,V TQTa<Yd`A\XAP&L BH D B<680C4000CPQPQ%d`&\6XFTV * : J Z P l h PRPL&H6DF@V * : J Z l h l h d T T d T d T d pz z z z z XhP Pw w w P Pw w w P Pw w w P Pw w w P Pw w w DV`P X PY Xh-P* pP x(dPlx hx dx PPPXx Tx Px Lx |x xx |8pHhP\Plx hx dx TP;HP8Xx Tx Px 4$6%FP0 "R xP St5 |x xx x |x xx  dP S`5l hx dx lx hx dx  PP SL5X Tx Px Xx Tx Px l(P ( l |h(|( h xd(x( d lX(P l( X hT(h( T dP(d( P l(P ( l |h(|( h xd(x( d (8P*S3 |XxhGP PGP PGP P@@HP0C: lhXdhX TX Ph |Xxhl hX dh ( |x xx U0C: |XxhhP dPlx hx dx TP PPXx Tx Px lPXl Th Pd Xx Tx Px lP*lX hT dP l( hx dx P P!P3 P P Wg W g CP P Wg W g 6w w w 2P g< P ZP  #'WgP'WgP P`G@DTz ' W g l(hXdhX( TX Ph (|Xxhl( hX dh l(X8WgQR S0hP dP   TPPP: @TP PP@@D@dT * z :  -@-=5@P P f_TU :X _TU*N(X(pEW%2(pE W*%W:%(pGP  W*%W:%TX TpEW*%W:%LX LpEW*%W:%,X ,pEW*%%, ,pU*%%(X (pEW*%%$X $pEW*%%$ $pU*%%p,X,pE%(X(pE%((p%$X$pE%XpE%p%E,pEW%2,pGP  W%2,pU%2,pP  U%2$pEW%2$pGP  W%2$pU%2$pP  U%2(X(pE%((p%XpE%p%,pE%,pGP  %,p%,pP  %$pE%$pGP  %$p%$pP  %(pEW%2(pGP  W%2(pU%2(pP  U%2pEW%2pGP  W%2pU%2pP  U%2^,X,pE%,,p%$X$pE%$$p%(pE%(pGP  %(p%(pP  %pE%pGP  %p%pP  % ,XPBX ,pE%(XL>X (pE%$XH:X $pE%X(X pE% X p%$X $p%(X (p%,X ,p%,X ,pEW*%%, ,pU*%%(X (pEW*%%,X,pE%(X(pE%((p%p$X$pE%h,pEW%2,pGP  W%2,pU%2,pP  U%2C,pE%,pGP  %,p%,pP  %&(pEW%2(pGP  W%2(pU%2(pP  U%2,X,pE%,,p%(pE%(pGP  %(p%(pP  %$X$pE%$$p% d4f4d4fd4f,e4f4ffhXi|jkcmcmcm4mmmTnncoc dm4dmcmmmmcm\o,pcc4nc4nc4ne4n4npghcpccfcfcfcffcfi\kc-@-韧bѬ떬@P P  _-@-S¬뇬@P P  _\P TpPLpP\P $  PP(pP\P" (pP,pP$pP$pEP,pEP\P) (pP,pP$pPpPpEP(pEP\P# (p(pP ppP pEpGP (pE(pGP \P# ,p,pP $p$pP $pE$pGP ,pE,pGP \P (p(pP \P TpPLpP\P" (pP,pP$pP$pEP,pEP\P) (pP,pP$pPpPpEP(pEP\P# (p(pP ppP pEpGP (pE(pGP \P# ,p,pP $p$pP $pE$pGP ,pE,pGP \P (p(pP _TU:BX TP_TU*{~{~|~}~~tx|yydydydddyty{{yyHȏyyyy}ȃy|yy y y y  yЈyАhHh̑hHhh,(̜yyypyģyАHyLyĢ(yyTyTyTTTyyy(y(y(y((y`(Xy (X (pEW*% %Fp(pGP  W*%   W*% %$TXTpE W*% %LXLpE W*% %,X,pE W*% %,,p: U*% %(X(pE W*% %$X$pE W*% %$$p2 U*% % ,X,pE% (X(pE%6 ((p% $X$pE%  XpE% p%gp,pGP8 W*%  %  8 W*%  %pU!*,pP 8 %  % " 8 %  %,pP  %    %p$pGP8 W*%  %  8 W*%  %pU!*$pP 8 %  % " 8 %  %$pP  %    %0 (X(pE%60 ((p% 0 XpE%0 p%p,pGP0 %  0 %p,pP0 %  0 %p$pGP0 %  0 %p$pP0 %  0 %%p(pGPX W*%@ %  X W*%@ %pU!*(pP X %@ % " X %@ %(pP@ %  @ %ppGPX W*%@ %  X W*%@ %pU!*pP X %@ % " X %@ %pP@ %  @ %dH ,X,pE%:H ,,p%H $X$pE%2H $$p%p(pGPH %  H %p(pPH %  H %ppGPH %  H %ppPH %  H %,X,pE W*% %,,p: U*% %(X(pE W*% % ,X,pE% (X(pE%6 ((p% $X$pE%p,pGP8 W*%  %  8 W*%  %pU!*,pP 8 %  % " 8 %  %,pP  %    %p,pGP0 %  0 %p,pP0 %  0 %0 (X(pE%60 ((p% 0 XpE%0 p%p(pGPX W*%@ %  X W*%@ %pU!*(pP X %@ % " X %@ %(pP@ %  @ %gH ,X,pE%:H ,,p%Rp(pGPH %  H %p(pPH %  H %%H $X$pE%2H $$p%(X(pE  W*% W*%|W:% (pE W*%|W:%(pGP  W*%|W:%TX TpEW*%W:%LX LpEW*%W:%,X,pE  W*% W*%%,,p : U*% U*%%(X(pE  W*% W*%%$X$pE  W*% W*%%$$p 2 U*% U*%%*,X ,pE%(X (pE%(6 (p%$X $pE%X  pE% p%,pE W*%%,pGP  W*%%U*,p%@,pP  %@ ,p%,pP  %$pE W*%%$pGP  W*%%U*$p%@$pP  %@ $p%$pP  %b(X0 (pE%(60 (p%X 0 pE%0 p%,pE%,pG  %,p%,p  %$pE%$pG  %$p%$p  %(pE W*%%(pGP  W*%%U*(p%@(pP  %@ (p%(pP  %pE W*%%pGP  W*%%U*p%@pP  %@ p%pP  %z,XH ,pE%,:H ,p%$XH $pE%$2H $p%(pE%(pG  %(p%(p  %pE%pG  %p%p  % ,XPBX ,pE% (XL>X (pE% $XH:X $pE% X(X pE%  X p% $X $p% (X (p% ,X ,p%,X,pE  W*% W*%%,,p : U*% U*%%q(X(pE  W*% W*%%U,X ,pE%H(X (pE%(6 (p%/$X $pE%",pE W*%%,pGP  W*%%U*,p%@,pP  %@ ,p%,pP  %,pE%,pG  %,p%,p  %(X0 (pE%(60 (p%X 0 pE%0 p%(pE W*%%(pGP  W*%%U*(p%@(pP  %@ (p%(pP  %S,XH ,pE%,:H ,p%:(pE%(pG  %(p%(p  %$XH $pE%$2H $p%-@-p@PU -0噜褯 "Z  -0P-PKt L P_TU: P L%%_TU*_X ,XPBX ,pE%X@ (XL>X (pE%X  $XH:X $pE%X X(X pE%X  X p%X $X $p%X (X (p%X ,X ,p%]僐YL;_PPE uP _TU : P(_TU*L;_3|U:$  PP\P \P U:\P \P \P \P \P PEP (pEWW&*%|W#:!p(pGP WW*%|W:TpEWW*%W:LpEWW*%W:,pEWW:(pEWW:$pEWW:$pWU:,pWU:,pEW (pEW $pEW pEW pW (pW p,pGP WW:p$pGP WW:p$pP WU:p,pP WU:p,pGP W p$pGP W p$pP W p,pP W} (pEWz pEWw pWt (pWq sp(pGP WWc:fppGP WWY:\ppP WUO:Rp(pP WUE:HJp(pGP W@ ppGP W9 ppP W2 p(pP W+ ,pEW( $pEW% $pW" ,pW !4P (pEW*%|W:%p(pG PP W*%|W:%`P TpEW*%W:%XP LpEW*%W:%m8P ,pEW*%%4P (pEW*%%0P $pEW*%%P $pU*%%P ,pU*%%+8P ,pE%4P (pE%0P $pE%P pE%P p%P (p%p,pG PP W*%%p$pG PP W*%%p$p PP U*%%p,p PP U*%%p,pG PP %p$pG PP %p$p PP %p,p PP %4P (pE%P pE%P p%P (p%bp(pG PP W*%%ppG PP W*%%pp PP U*%%p(p PP U*%%p(pG PP %ppG PP %pp PP %p(p PP %8P ,pE%0P $pE%P $p%P ,p%4hت| Ĭh|40dܳ4-@-鿖}ԛ@PKt L P ; P7 -J$Z _"$Z! _TU:P ,%%_TU*T̽0x@x_,pW XX %$pW X X %(pW X@X %pW XX %pEW X&X %$pEW XF<X %,pEW XNDX %(pEW XJ@X %,pW  XX %$pW  X X %(pW  X@X %pW  XX %pEW  X&X %$pEW  XF<X %,pEW  XNDX %(pEW  XJ@X %^僐YL;_PPE uP _TU :P_TU* غPغL;_"Z (9$Z 3 eU*$ t PP\P \P [U*\P \P \P \P \P PEP L;_"Z (9$Z 3eU*$ t PP\P \P [U*\P \P \P \P \P PEP (pWQW@:%eW=*9;p(pP WQW/:%eW,*(*TpWQW":%[W*LpWQW:%[W*,pWQW*(pWQW*$pWQW*$pEWQU*,pEWQU*,pW (pW $pW pW pEW (pEW p,pP WQW*p$pP WQW*p$pGP WQU*p,pGP WQU*p,pP W p$pP W p$pGP W p,pGP W (pW pW pEW (pEW p(pP WQW}*ppP WQWs*vppGP WQUi*lp(pGP WQU_*bdp(pP WZ ppP WS ppGP WL p(pGP WE ,pWB $pW? $pEW< ,pEW9 ;P (pQW:%eW*%Cp(p PP QW:%eW*%-P TpQW:%[W*%P LpQW:%[W*%P ,pQW:%%P (pQW:%%P $pQW:%%0P $pEQU:%%8P ,pEQU:%%P ,p%P (p%P $p%P p%P pE%4P (pE%p,p PP QW:%%p$p PP QW:%%p$pG PP QU:%%p,pG PP QU:%%Tp,p PP %p$p PP %p$pG PP %p,pG PP %P (p%P p%P pE%4P (pE%p(p PP QW:%%pp PP QW:%%ppG PP QU:%%p(pG PP QU:%%p(p PP %pp PP %ppG PP %p(pG PP %P ,p%P $p%0P $pE%8P ,pE%e\P |PA PPPXP @DY\P |P PPXPY\P P PPXPY\P TP PPXPY\P TP PPXPY\P TP PPXPY\P TP PPXPYi \P TPA PPPXP @DY\P TP PPXPY\P TP PPXPY\P TP PPXPY\P TP PPXPY\P TP PPXPY\P TP PPXPYu            N 24FP        $$$(,0444LLLPTX\\\tttx|tttx| ##(( @ @@ @`@`0h8p  "$&(*,.<!1@3Ld5Oh#E(O##((          $(,HOU\_\UOHU\cilic\U_flsvslf_18>EHE>8118>EHE>81.4;BEB;4.!$*141*$!!$*$!8__8__""""III"%III%%III%5\\55\\55\\5U]emmme]Uu||u    ((( 08?GGG?80 .PPP. .PqqP.qqH**OHOH****++++++++++++!111!;JJJ;;ZjjjZ;)JJJ))JkkJ)kk>  D>D>    +JjpppjJ+jjzzzzzz;;;;ZzzzZ;ZzzZzz$*$*$,,,,JhhhJ,JhhJhhqqqq  RRRRRRRRRRRRRRRRRRRRRRRRRRR#########333333333333333333=(^i[(iXلlB>R#~M:'VI:Z{~j@K zDvTd:;CJ9Pь.밤[on>n):4kQL- uShdLDHؾ o2ߘ`N2SF+ěԙXڻJJ)dĜ+W;-\[)_mo+ *$~(غhK97GP&Uf_Y+SQ\rA'cQ|?-]u_4mɴjmuG6+BM{Mt"Œjhleps>u-U #JYTAϥ4%D=|H` ̌^\r6W[dB裛A/FVx׭xOU(+[n3s3.|td$-Wil* &iyaЀac|Y9I]a?Qpe{q),:0K}PT)OvS6{}M.` Ӝ6u𕌰x|-yq9[gK=mgqwҾY٠[3nb׶ Q"濶}Yc?Kl~mU=zd jBAЮŪy$q|4Ƅ*RtPfWs^~2!xD%LfdZ77%U,{T*˫k50h3š&8ʟmN&[P5}+w!}&yKiߗ}[ؙpohϤoC#%oSu {W x}\4~ЦE+{"\iG}ۋK L&j*Jj# րb & G1`*: *_+iNiYnO{taY|ʈ} D&vɤ[6FG8$WȤDt? [..Z!vl8V9h!X$g$hbi@۴Mן2DDUڟuz[ur1%=l:7ݬ!gﱜzaau7݊b~d7=$u-<#w`TOPcA`8(ܖЋ}ZYotɧa%{ܰLa+:L.iL֒ÇQ-6Hsk՘6cէY\c$u71 <uk)I^Ku&9'4^^dr$Q)Za$&nBԭi.aXE]̠KNy1ۀӬ6ۓ 6Կom'?#b^ y>.ofV]|qě[k5jjb7F-ga)Z%lV@\ޝTX0ށ q5rRJ9 ԅk9 cFro>Ie}eA2q+5?Nw;qąI68\mg'$u9I4aJ4)͓ S9f fe3C88>A!cR k`Sr#B1EdT[2k]a:FY923'5|C;[\ziګ{h6wRtE̾xU]7|&GB*\ =PJVʭN6 9m1Nbl`]"ޥ3&S~/1"&#-PaFc٣5OuJ Qq"S/kq=36QS u-KXpAN%.@5qOU3ʗv-~Ґ?ꎺe* Mfƭ &U)^o; tdr55U LW}s># F,'GVQ<%_o+T{6Q@:'7D9-rjRC"`~>cbL rW9Ba1a`kop~3")}ˤYqD#Q`%*2ck35 8F/O=#6*7'x!J U (|!jř#\g+E AWW~uбŶ{˥\t+êP,{:JAF YPV(w]))_q>"|y)j$È qpfBeލm o&S׌S%yy4Gq]-XBmYY?wi-%Ict|[@nZF:6728 .MLf6tkBh s{֯hW^@P].I)%!E# IE#3"'H\/cɎTmy$|Š? Xظ$]QC'ٍJ\o3)}l &a^o)LQb+AvDm 1Klur8.¾m6%,gLE[#gޕCy:l6 wf"$>ފ[QJ[i`SEZe@ծ5p% @]ϵ]2~!RHC5 Q[?P5p0_[ض%*`a(,/M CX\Kj+R~V,` "GtɫSop$䓹 D8HI'[6-w@k~ Q5N*STS a+Y{~u\$d#OɎhְyMb5KK#^ȭ>d*ܮhp%u0D2 C<}КY8iĵK`ek'6I& Z68#nZo}2-dbX~cydBo]P=[ esX ;]̠*n k16bÍ8mD2@v&(n烯. z|#mHqqeWq-jQ0iMw,Z>J{U/eW/QL!մ0M;o@V)#v1Ɏh;`rw{<{,|BhpD>rH*"*aR}@tֆ=$y lCJy X2 jj)|RYH([_W_=k.y,S3R  D;4:6*#jO W$c3e葔硎‘VG2v`̤םϤU9 L+oPy8[$ʹ5]9yYbs3?ϸsNl |N9A}ZwUZ9M.B;Ӭ0f q7"#$|icJf=%1brttHZVj=N61 @Jjcp.fTQ7LJF EM׆'8-Byp)Cڇikq nF 1SLn[L{KЦ*݌Gx9P@  JQ:YLJ!FAti%:<#*Ȇ6QMhN\hT 2 xvAw 5++zߚ&QE.e^c9j ^ 5Td$+ w9@}\0vq#!UuZڅQ|jДS7a wln7{ 2%@}lAim'jv!VX˱L_yYwjy:^wR5ǗPh`~ J@|1N50c!r$` k%?ۍ/4z xq {ZW_is֯o:uEᧃ!W=g7,%tǼ `杪6'- (\~61„g&`aL s79oKW bA4"س vzxSsRXKzCY-LgNL!d8ĸ݄t55:YHٴ)%|B-'KZ[H?PRsP=ٗ8 0ALhLZ\aNHS+JCub;< O/= JIB!u h3 u}#} GgIo]&$ay$Ģ^z(77/&w ŘM3rvE8x;15ӏ1kO4fq;v|S*ʖʺK|S4l|O&`U"!h$X /OLie%$p\k ;+<( x[D5RzN4x3n#)D>7 H'@lnxp PJ~I2l?2a&1۳t}^y$t9*Ͽ^(}q?x#5Al#MygUiP5R qp*BXoctB.7.?gʸrǶE,6,kD H1q!6d1y"*v̭2bHߣjx) hyo@]wQ1B}#nX[8d.fW_=i=a$@c^)>'EE2]( 4"LY9G&oj×{vґbCBO[1ϱA"4齠 dbFĬ'(b@M;>VVD?VzoKWڔ s/UT]I`$@9@EP:Gs*ځ& '= UcCF0KQ IjexsxniPp ^kW0W 񦧤il^˼#S92GCǀDV(|p5N}N?CAMQ VPm1xPΥ&?J$ CwfU\} ~|e&/:!goɌLe兙s1=7/AzМ(:-wK6ja+GMuȗ80?QxOX׻Q(1 W8\ ] 6m1.ߕE)BKɢ#RףșUۃO^D&`\=Ҽ$y%[׌<ΧغJZf8o9UZ,zfn:F7>%Ѷ<L5i s'51.z/9k3 Y͔6 qXvHF^zyv]LK}":eI1+NJ]?2w }0ݜMN? %B5:];:%Dt`|OhZ`3R ԯPGl11< GJW"Nsjt-y3!]*⢺s?8n~TcB}Z~Iܔ]䩡-">|LSy>yft_ud#Nu#yςK10Z'{^ ېM,Ŕb"0,/D79Pb$Y`=lNT<$M su^6\ 8\ԍuHg"eŬԺMWJE{b`ϧ5ok er֞/Lǂ+ĘN;I! P$.` aBi@Ȇan#4s: ~{Gbs8OÐ>hNneA(5OSDC?3 P:;\,eyPOc1["= bz-V؆bd<+/uaLJܨ_>RĦ 130ùZu z`3ȂcJX8 )`09&p[Dr4 - "hS? +&SxX^Mm\)P|K #E&F\gq\?*GIc!>< gLzF”ܸ[~AK.AC?D[¼+wÊ$\ pS-}uØ0Bꁽ]I s ^IQM;)U.G<Y՞Oo&ڧg|VЩ5FF+1c$T oK"qV I״XPm2b.βQ?#roZ[o 9g$>g\䉰&@7)= 9kYtd){=1rd :Ov`~AkVN\>`^]ys(n{WhaIu7v˩ϲ^Kt5@Hc[wz{$#ӒE>~QbBPh)]D@ھة(iCEOƢI-ˏ&LQyh?=Mw=*38/oMR'ckB#3qAR~It"`UQo]|W|{aX|΢h|8xMpd}.3*Z }!,O>f<-Ӛt*+oX`>WPC`$,~svo½\ xHί;>L0fg5F$b{a1q QndȗLa9֙\KukRj*p=^?xNp-q|€k{, _!{`BaGIDz9 ;]? d:Q_ƅlц9w(|F}pDwgcc|=hH ҃-)f,u2gfʘ^`_,TT~d06!?EtY E J嘸( 6R2WX7%&K+i,fr9gJD,0h^O骲KeoY]9KlzH+T65! @3IBS?ynaMd$T~nШs[YYajo<{{ɶC˰O0/[1ntLL8b_{_D1{ss}9^rjB0ӮS"C4^\C" vE/NYnZ9R_R2HHVH~q+6E(jqR [6iXy-/ xPs^-ޝZ9Hv+`B6ECS':^-lE q]dj&nZgŜs̖98f(8YE:"oMS!aiaP%8e|Eβ7`1c~(q{W(惒r6Q6nN OMXb7;`.bd?iF@5cSIq]<Ȅ醪e&j4dEaVUNVB4yK:ìeo'5w{^9ܓkFq"yAN8QRV4 gbM(ݳ4 Tij!~-f%UCk&VLٞZ3Qz~"H 6i80,d"B=wPp>!%fN 5= :ښ(LE:w6>՜* ƶҹByƃ,)my2-(AF 2 Jc3mۗPICfnR#<5:ڷY8Tw:”m+gY7^SG]GQ_*2/Y(R󝸠\"XKId2ؐ]D|9C "zflj5P*l+!bK0)p>os,ޡ{'J+/5= g;HBa*;R N҉7PBub]I 8ph[S!,/9$C% K vT ѿܫ>B!O6Z r.ć|:ˀp32t n*PA$͵~ߏֲK'xs@Nظ~G&uxzgs#kEWC<XBUN΋9fjP |1: oq #T[r# i?= $% ]͌‘PdcVQϫ y#0{>s88U󷛝\6Xx{2c Yj]b)m9]O9jbl"[=^!` wIb}9`H~%V\K"K DwIGh S> tB`H/75 j3ĎX tS)Qʢ .9 v3Xs7"( !Z+zF4]nUx|Pܙ=9oM]oAA<Т}!S侾3>x>T^eZFk~=a"Ju%d]&Ǜ,?e!?̜U_OČ> XY0e`3n0;3pg :9H`,0T(a>qQhh?G:+_BZwʅ`䎃>q#R6)9L lO\M?hHPu3OQ8E%>uaL!YBօc%߮3O"6+T3xi"fe]0";&M}3'mzz[LۖA6?8t0̯cbE_+e$<:5I.! P&0J79l9˾>?u8 Z U@Jϔ%H>/e)ʪ&щmXZА}YjR2^#h>,W"ɖMlw4#E\"mE7<%NfgBWC*ߏb6k(|5Q; \\#JxL=}$Ďx/.GFjqOg^k >c\츋ʑCV_ 9d#Y0G2tB?h!ꬎ Qӻ5_ӑk5u-Jr'yC;iV&JyȦ6p̚{%R|W.`p`8K*,E%ku0J7* L%8v=k^PZL!0p8& )UNA/K(7rZ%^x\Mp=W^x#vr>;Pk۽vY˾SǿŢTaP|c^pB/ޮ. ߸fgq+hq7m.l( $.Kigɣ"rTbfpW̌qbsj׺qt55slUOI$NM&r$;·c}D^$~$84VoU_: L*Mr-PuH? n=[@UB`:Gh=\u4m-ӡw?%a7*q%̅_;?n.*eeŚCu0/;hY. P1+/$} .3M} '`D7qV}0ȯY.-g%nAcpzQ ˉq5^x5}p%9߈,aX}:7qU9-f1B"*5$Vr)qNH}_!Mo~-SVY b"(C6P[FQ޿+G fh%%;w& 7wjm9=>Ľύ*)Fgl-=>Ųx(p+S+}cUnWO(;O8]=n8 4rI4aoP1+S,Vp?kH` N/L<8D#f_d 'O#Ri]pMqaϲS-"7 dSם鄥E*Qw2W 3c)ws>+۫!Pv !' "<=*WT/,an bXT#E$Tb.=S& x85+D9+ VIXb ]PAӼ 譫K\ <};u7W!"zGl{@] T(.wI- 5r\[Ȳݳ *aU!o+ #fyCn;蝈6p Sd`qq7}|m쳎%̦n l0'g0όW!O9"O ޏ0@u b z DuNe^Yh7R@.GagsUh#/`IDU4{0e4u{Z1Di {sH,C?xil:cû;[ֿ*E(P`sPbFR5(, %V)U֒t<ݶb٘*1?Ȁc[QX~$m2Ido8?4[y%VwvkaY=ƳTdgXIDɷ=QXo63Uo5uQN646{b%(o{a3a9-oC' y!_Q;3XkB]  DM!w>qWuwR7bs!dfel_HXټ{=k(o<UF ).on͓w.\L%,SK76Fgۀ.#L1 `فK<җF0.5AGlI='ŘH.UWUh2r!R}}/ؐ'E?_7}ЦUpӞwd8WK`/%jckHhin*G8C0;gp|c?`&al0S%=>=E2Px aǪ&/mhՍ8:^7jimR!5 a]|k&ayKZ74.iH]&Bˏ%]p@7T![`M JЙ_M֦OE&|DRAte/)!N#,6X)+=w&E]E(}%a>ӻɦimD7.N/ K6Qj6b<OX!Y-3D&:ٜCUAŋV(ydr+mw9euGm @j\fP2] bj(ƦQCmj cC^X{a2ݟ,vzueI3W̺|W,5B{_NVH-G.Kdִ+͑a5μo?;s-$seeĽV/IB-CsP!Tl浽w.+GN@N_0'5[nÅ ΉsܮU:PJu%Όi:3Oʣ3fVK â#h9\J+Fe^Ƚ RZ1&_"ܷ㿍窡8`Eq|wD"ї#*(F#0|qѕg&0g6j-1M(&Q9)nZ.o%_+; ++~ӝ"l/}a,#h:0&Ů9\^}qy84S3^L2iHM2]a!ux Ι>@J9L6>uaL/W`"\25RgDEp.\GZ@9-y>#d 3Bׁ-gCgws6fgzj5n` uan6oC\zկ;F._Mt H"~z3VP G|G¯[?]`l!}o ki/u5WOҁR`tAُbX9a ºCۅ0v{A(fS@;cAljFsXI6ASՠQk ASd2BTTv:ix7 Wkⱗ ICDVF%6ʭrбYD,衖='q8l3Pe_"R<[xⵊF 3,h: b*N t}Y/oO1M7|t1mg~9Q9k~֑t ^COO iG}`6[7 :bHq5Na `#j954Yo4K),b͍ݨ]uK|FiJͨ풁bci,;.$m.:55ZvqKa?&")qLBl.ԢM-'N?23q^D6tjdͰuxj?WyV=ԱZ™뗈v8cs"Yjޗ-y$w| VayTiLg 'b(MVN^U-S"q_'U5!5R|[Dž^+ <זcF z̺dC,um;W>{nv8C4q' s_Ϟ0M& dcrA% /EhP {`KѢ"cYj ?5d ~Lz|+2c<";8؆)N"d96tzT 'KyGd-^(Ɲ}>iLBïE C.٩2՜yU:/}G t*H!3V/.e{_ )p&_4ߩׁlZױTOd9}{!1.JY!"t=i^qye= y 0u 7N+F`cPCXV;XtRFF!jU4Y(9NMA;oR܍umCCF9Oraȝ|g{UX-2/<ӑuhƾhk[&q& >@a#'ogJq ҪLj9J$Vy?̼'va wgUɍXQ濘T-궹rK(:yfc #;CY' bѬHs Q8l,.#zP:t17k7 {x!.~R**ng ;j p)agVB&bh|xDv>} G+/얥$#bƈ`VGޛS}ݘHDWPOMU^ gY8YYU 1 ԭl2 vIhShAc`kC/ PcYgnt3Ӑ حNu8?MPұ*OOQE-KCDd#b#,^ۡ/g[2Zw쫍GYԁ12͡3# GUxA9Gx*J:TQwQyd w6N_Q ;7$H2-ۏ4Әo P6UX=YU.˝ '_0rNrrOL[d:@ ʖ&cS^zWx(@&`JL, T8Q,r v*kz }̄Rj͟#v\6sV$hЦϵh5(O48^d/ rl _>*I*R7x.]M"cPg{=.1PB!û)Irb2gQ+ 7G~MתW. fmɡ}gٙ7u@|X{=Sʄ|;?M3]OEW k.𭉵Q!  aq B O~HǼ5Bj|RxT *e^ZpuFӏl1mCU:eU"~ϦB6Ke߭}*%< Yh ,*;B?15 l]p=IR!V{'w`uh% ;}F_v>8f Ӵ5BpVQC(^a)v2_OurWu94!E<:P1~YBtkSجُ4U6揕Q% ezȸ,([OIa ʏ,!+> 9jaXց/W13-N CMYe1slU{+0~|;G]'cB@T і icwlJΰgkBooAF}(ρ_,II*^X(=I n$ j 6 a'a'8BIM``8BIM8BIMH/fflff/ff2Z5-8BIMp/cI-6@D" DbQ8V-FcQv= $hO/Ƃ9vmXjTC0T2%PhT:%ț3&EB : ԰U,1;[-3k1 j0tNq¡ʌb{ӢT?OQLRW)Lm@zBCa\b?c/)C"9@@څh0 V7z_ ]7RGb^'ψdV+d]=1giZwtj!_~ZT4iv ׿"#Ϣ7\t<%Y^r5zuh|B@(۳;0H Chq0M^.ٟ"m8< az5kEP5/y!:Y8$U SrӳwGǹ$q!#ÐPvCr @~ <j! ,hL,x6Xjiv DԢuLT6gHd!H#Ԥ$b9!<!7ֆSp6BB<XHAXhq"1p; 9#M8 &ѨVJݐ)`FaG;rBd@ @;@#nx$3qU,<8D] Yp2%؁ xV)kjCzWH NnrdžsV1RIe58"MG#vtqG<< 13YcѣtqL)%#ZI ^S[@s!x+jUODf,P…!n"C ")~ @^mIa` vpްc, @:. `CP`2(@(@b? P BaP. 0*s0sy邲n8+=FW]PIJvqJymEP!3h-sِbh- 0l:A'Y@%io,fgD 1DB(`,3 %mŢKMql,$2j@a=$SHDB&s_ :ޤΪszt./J7 ;4: ľGDN2c|CakA^N6nI*Ke``4k,$ 2/{ A0X) ;>д !gPA 2L bIIZ^tÏ rHc l2iGabnBr㸒2@2 ssG( ΐk A["}L+D:P+A,AQ!e1TU ;&tBhm/'k9q%c& .  )Ʈ 7Ft.!lϘq#̐>qHEGz*zfmUv&*xw9 P)̄q P![5.bM hgrZ]m]"t:vM"u!.Ƒc 'QHܟN ,'LxO#L H퓬Gx3WӿFd&{&A4{PBX:0`Q&B8D~m|E-exRX)Z'!a p)AuKDvCK( dGYin#DDK("YE; U-qh@(AHCXF'N֗<Q&n Y -`;tA\0&*g!1"my 2(UD{L/h@H8-3?Ȫ3Ǹ &) k:̲ :dF7A%lpv7#p-A#.p6cyAX4D @xXԶ%P (E ̴jAe4(AF87ut.$<7"Ssp>!2TyTYJ_:+L9ʀ$trJ›E!v?u Q1Dj+!ef8E Q*(AauI{IDNFsF3lc7TX]G1.uL[36 vkxX3`BHhO=v`x;॓ܚzBa\x;G#I@ wwԅQ%u# 5 q2MF`^Dt]>'i5uX)̦ p48 l 7PFVfT?x/ߝD %A2 \3 cn7FQ*X39Vd$ &:}~9vk*~X: BVKc&IZNV!95TG sr^qkS;i"Lwg+]tVW Bx:RjY9T6u _̳c)ń,#ךlh$2_> h6N2 ~%L`~%ٌ͚L>/hg0 z}z9qOKU*1%Ə%Q!%)һkܨ4$BH +gfp|^Bsm:Ov.;Q{T$ 4ЮB!C2j P7b/ $b " dB:s$ ^ xR >!~^ gp/!+ @F-vסAn!lxIB\7/>?la-g(0zǮXhc(HF].]d4v4 )++] pɄlS"zd/MpL4/ERnK ,_"8ʚF0$Zdjr4j !o!J0 2pFf쑢D0p_b7bq#pg)*Wh:/9D.k쏒bnrqCGp4nbdp1+fn^P[%ۊtZDŠP2` nB\ 6o(!6;0P} !K0`!.4 ʰ "&Wƈr~,}$qT6nY$ R:q@X!#($bG搎蒦~,=A$M&/z#'f/ۯ)o.dB.ΊpN!O&rP.NL~DY&0YrklJiq0dI"04g҈m( Ҭ!  (jA ˲Lfb -#"nc Zzy-̈nLy6-Dsx!1 !S091eĆ!Ѫe.lPSN4+o,h6k!Q̎l!o&, fIHh%~r!?"0b/eg 0,Zx" ;C!8M@ИE$w<<3Ac jo0.7:89~4wN.6`, R)E  \r= ŠlFZp}-k xiP7AY V!Wi ho#DzWa#i␑l9NgU)Kt^Y vqȈ` ͖IgEmQ|ȭ|⽛W_P_қ!Ȃ&6s<~ֶil(3 P jPঠ  h'Lvj*q:.^L(D׳{D,'BgvbRϦ@K*kbPcݼ(4+Rƃ&ZÔPD;q RqzD.4u(2A/Hˬ($I(嘬+LisY se\P994/))NU@0º(l;HΛF mug |H)f1: ڴM8=pZ" Z;ۅUR0Xh,ah ~ILI 0f"$s vu=>9rwwWT>oJCQffDS;XtblAgkRP Ǡ,3h-vӐoN mz*yr`N|UP*#h!gt"(Eא!j }=!ua6Rd [+a8h:bCb#Ӆ ZQIDR)E]1/:bZc1PyG_Jϗ2✅7JAe# .؂R >U >'r?ɪ<'u7ڔN_{DV`E@$'~C&";LMix2rt*^Q44'xgE7Vȅ6kS~@4v7tp'uZD2aƝ]M4ƜBTΞ [4L ֲ]+QNX)dM"B3t+TtZr۽h␅!<\#V8nt[o]ѾӢ,VԒTnC?"ZmpTEP]0M݅>Em $UOFyd}҉8bYIw[,(iXj1D*%@7xR:8"pl ռ;12XʄV`Ju, i Q5BjO$.+`^`$t@h3ղE !ChgiF`ne݀.*BgSBMl.7 P%]u8hnf#NW٫5@Pwu$98DUPp(H1P ֲ=Lkp `AMA)f4rL°,c ;O x'PHV'l,LwUcn׻S@ThZXb1vuc(ds78ȧk1t" $HJ@(Lodrΰ6A!`XVܥo?C]SRuB"L'8p$`aqP&$v$0FNt:BBO LBO!N/o`"wp[BAkb  n;(dbĐ[ "; ),,Ăb@T" ,@l A­q.tJpq2:!@J1&BQ<pH3PR&&0k\HHDA%SqvQ}# o&1AK;6U@&Ѝ") adOQU|/1O p[t#! QPY+'/Q,a)O&όr&1$q X1 p C% 7&RNw`,Q {))?%1G#%R#1-"2R"+`&1,L>&?0"& /$1"'>nr.r.Re 'P a(,iIva1#ү-c4:#!"1 'w!q3#A4Q<>4MQBc-_%s%.17(R/89q7b(C"쥃-)4fK$16RA;#,KAQ+[3%RC Q.9ӤӋ11@+  3N 29ࡗ TsţQ\YhAhtx]R xKqK=#PxnIycRx'E:3OW;ʃKs@ *HA`֕f[OW+ "U-gnmwHares-126/mia/Firmware/WonderSwan Color/000077500000000000000000000000001415063341600177715ustar00rootroot00000000000000ares-126/mia/Firmware/WonderSwan Color/boot.rom000066400000000000000000000200001415063341600214430ustar00rootroot00000000000000؋ȋЎЎ؎ 栰䵨t@䠨u䵨t@U=Uth?pt 6p=6.QQ3Q3۹0t&CCEEYFGYۃYh6 3 р€u  6$.566>pt2@+6>Q6GGCC6>YL@@@6>Qtt u@@6@CC6+>Y6>t沰6u666 66"h?;u:t666u606=unFFC $u3揋 ` *b6:v6 $< v6C`hپ68uò**а &G6>ptÀ€aø缰澺B t $t庋иø缋纰 澺Bt $<u3ع 06 66666666666$666S 󫹀GG@PP6_6GF&!I666, 6t06x~6u6t6P 6>ptg6t6' 6xu6wu6p6366x6#$ð浹 $ 浹 $а@浹 $ ‹6`6d3#6b6``36>u3 .?.73BBP6 6FCC6666V66Vaþ E.?.7BB6#$@zaQ.6CCY6.»jƻD  C6C t< w<$w,  t<tw 2<&tw,,.Ft:<t<t<t<t<t<t<t2.X<t<t<t@u6wÊ66O$6G6O&R6>ttu w Z`6>u3.C6'6CCa6q6&qu  tûb6t6666t666Ê»u6 t:tu 66 X66Àu 66 66.è@tP6<-rtP6,s,66ût6t tsJ6:siBR6Z66u6v6>u.6t!6>tw I63666D668tu 66D666\6Ê»v6 t:tu 668X66Àu 668p66.ètWrF@6tu wt):t%6t wu-6G6)FF[+6G6)[u66666+-a6>t 6.ݹÿ.7Q.6FFGGCCY`6>uO6>tuG6$6ct €ut ʀut h .466$apw`3摿6>uQ666aBh3ۋ$t66"66ƅ>$GEEȿ揊<u 摊˰a`6336u^tM66@6t)6>tƆ6Džt Ea`h6=u6pD668wr:46>tFcgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p` >D & &D  D & &D & &D  D & &D > >D & &D  D & &D  D  D  D  D & &D  D  D  D   D  D  D & &D  D  D  D  *j B`lDP*JV?pp888pppppp888ppppppp.////.H////////////////////////.////.`6>puP366p.vEE.^@Q.Q.6GGFF6GGYCCY'6p.68pt'66p66"6p6"6B6p6B6b6p6b66p666p66pyw6ph"f6pW3U6pFDD6p5U36p$f"6pw6p6p 6p 6p 6p 6p 6p6p6$.566pf6W6"6A 6E 6I 6M 5636$.5Z*$*dz* 66 66 6D6 66  6U6f6w6wr6 fa6 U6569 6=A6 696= ,6=$6 6 6 66p6pa6666 6"6@6B6`6b66û6p6G6G 6G 6G 6p'W9 ; 4 5 6 7 <=>?89:;45670123; 9 6 4 7 5 ><?=:8;9647520318x8j8](x(j(]PpBp5pPB5 (089:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`$:IZk|&7\f!'4:FKW\h|̻wfUD3"̻wfUD3"xiZK<-     pw++++++++++++++++Boot Rom Staff Programer Kousei Kazeto Sound Composer Takashi IsoyamaGraphic Designer Yukari Honda Special Thanks Masa Torii Satoru Imai KawaButter MasahiroIwamoto++++++++++++++++ares-126/mia/Firmware/WonderSwan/000077500000000000000000000000001415063341600167325ustar00rootroot00000000000000ares-126/mia/Firmware/WonderSwan/boot.rom000066400000000000000000000100001415063341600204030ustar00rootroot00000000000000Ћм ؎浰䵊s@$u Au$t@核0缰@澿 ?&$ 栰3摰  d0u00G=tC<+rF2 2 2 12 <vF<v &DC= H G 氰@沰@浹䵨t ?$<u<t3沰涾|tD?&&W;Du:TtDT|tD0t=t[C&$u3揸 ؾ0$ 3 @0u"P *l+z# t ^+u*u#r3˰ 浹$@浹$ Ċ2"ĈGG' t< w<$w,  t<tw 2<&tw,,ú *&?@&7vBB0GFCC F     &F tGGû3,'-û!tEtÊл'HxtzHt{#@{@t*wf4Ê@$@G`V&C'CCaR u wZû$'u  t2Ê»( t9tu XÀu /è@t0ڊ<-rt0ڊ,s,û't tZJsRBR3Z-()&w Is3'P?u0u Ê») t6tu 0XÀu 0p/ètU rF @tu YxC_ˊ:v $< vF`<u#L<u< u 2<u#3=,u=s  H =jr 3@a++++++    ++P0P8P@PPP`Px`D     hmv{ @    ##  #" #++++++++++++++++)  )  ̻wfUD3"̻wfUD3"xiZK<-     . - - - - .L/ 0 1 2 3 /L4 5 6 7 8 4L/ 9 : 2 /L- 4 ; < 7 4L- .- - - - .kLq l q l k j x v r m j j y w s n j j t o t o j j qlu p j kj j qlkefffffTfffffCeffff2Tffff!Cefff2Tfff!Ceff2Tff#!Cef42TfE#!CeV42dfE#!cfV4bffE#aefV4`TffE#aCefV4b2TffEc!CefVd2Tffe!Ceff2Tff!Cef2Tf!Ce2d!cba`>cgksc>< ~>``~>~6fff``~~>``~cc>c >cc>cc>>cc?>6cccc~cc~cc~>c```c>|fcccf|``~````~```?``gcc>cccccc<<ccc>cflxlfc``````cwkccccs{ogcc>ccccc>~cc~```>cckog>~cc~lfc>c`>c>~cccccc>ccc66ckkk6"cc66ccfff< 0"w>p` string override { return "BS Memory"; } auto extensions() -> vector override { return {"bs"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto BSMemory::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); append(rom, {location, "program.flash"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->sha256 = Hash::SHA256(rom).digest(); this->location = location; this->manifest = Medium::manifestDatabase(sha256); if(!manifest) manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->append("manifest.bml", manifest); if(document["game/board/memory(type=ROM)"]) { pak->append("program.rom", rom); } if(document["game/board/memory(type=Flash)"]) { pak->append("program.flash", rom); Pak::load("program.flash", ".sav"); } return true; } auto BSMemory::save(string location) -> bool { auto document = BML::unserialize(manifest); if(document["game/board/memory(type=Flash)"]) { Pak::save("program.flash", ".sav"); } return true; } auto BSMemory::analyze(vector& rom) -> string { if(rom.size() < 0x8000) return {}; auto type = "Flash"; auto digest = Hash::SHA256(rom).digest(); //Same Game: Chara Cassette if(digest == "80c34b50817d58820bc8c88d2d9fa462550b4a76372e19c6467cbfbc8cf5d9ef") type = "ROM"; //Same Game: Chara Data Shuu if(digest == "859c7f7b4771d920a5bdb11f1d247ab6b43fb026594d1062f6f72d32cd340a0a") type = "ROM"; //SD Gundam G Next: Unit & Map Collection if(digest == "c92a15fdd9b0133f9ea69105d0230a3acd1cdeef98567462eca86ea02a959e4e") type = "ROM"; string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " board\n"; s += " memory\n"; s +={" type: ", type, "\n"}; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; return s; } ares-126/mia/medium/colecovision.cpp000066400000000000000000000027301415063341600175510ustar00rootroot00000000000000struct ColecoVision : Cartridge { auto name() -> string override { return "ColecoVision"; } auto extensions() -> vector override { return {"cv", "col"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto ColecoVision::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); return true; } auto ColecoVision::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto ColecoVision::analyze(vector& rom) -> string { string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " region: NTSC, PAL\n"; //database required to detect region s += " board\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; return s; } ares-126/mia/medium/famicom-disk.cpp000066400000000000000000000072321415063341600174220ustar00rootroot00000000000000struct FamicomDisk : FloppyDisk { auto name() -> string override { return "Famicom Disk"; } auto extensions() -> vector override { return {"fds"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze() -> string; auto transform(array_view input) -> vector; }; auto FamicomDisk::load(string location) -> bool { if(directory::exists(location)) { this->location = location; this->manifest = analyze(); pak = new vfs::directory; pak->setAttribute("title", Medium::name(location)); pak->append("manifest.bml", manifest); for(auto& filename : directory::files(location, "disk?*.side?*")) { pak->append(filename, file::read({location, filename})); } } if(file::exists(location)) { this->location = location; this->manifest = analyze(); pak = new vfs::directory; pak->setAttribute("title", Medium::name(location)); pak->append("manifest.bml", manifest); vector input = FloppyDisk::read(location); array_view view{input}; if(view.size() % 65500 == 16) view += 16; //skip iNES / fwNES header u32 index = 0; while(auto output = transform(view)) { string name; name.append("disk", (char)('1' + index / 2), "."); name.append("side", (char)('A' + index % 2)); pak->append(name, output); view += 65500; index++; } } if(!pak) return false; Pak::load("disk1.sideA", ".d1a"); Pak::load("disk1.sideB", ".d1b"); Pak::load("disk2.sideA", ".d2a"); Pak::load("disk2.sideB", ".d2b"); return true; } auto FamicomDisk::save(string location) -> bool { auto document = BML::unserialize(manifest); Pak::save("disk1.sideA", ".d1a"); Pak::save("disk1.sideB", ".d1b"); Pak::save("disk2.sideA", ".d2a"); Pak::save("disk2.sideB", ".d2b"); return true; } auto FamicomDisk::analyze() -> string { string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; return s; } auto FamicomDisk::transform(array_view input) -> vector { if(input.size() < 65500) return {}; array_view data{input.data(), 65500}; if(data[0x00] != 0x01) return {}; if(data[0x38] != 0x02) return {}; if(data[0x3a] != 0x03) return {}; if(data[0x4a] != 0x04) return {}; vector output; u16 crc16 = 0; auto hash = [&](u8 byte) { for(u32 bit : range(8)) { bool carry = crc16 & 1; crc16 = crc16 >> 1 | bool(byte & 1 << bit) << 15; if(carry) crc16 ^= 0x8408; } }; auto write = [&](u8 byte) { hash(byte); output.append(byte); }; auto flush = [&] { hash(0x00); hash(0x00); output.append(crc16 >> 0); output.append(crc16 >> 8); crc16 = 0; }; //block 1 for(u32 n : range(0xe00)) write(0x00); //pregap write(0x80); for(u32 n : range(0x38)) write(*data++); flush(); //block 2 for(u32 n : range(0x80)) write(0x00); //gap write(0x80); for(u32 n : range(0x02)) write(*data++); flush(); while(true) { if(data[0x00] != 0x03 || data.size() < 0x11) break; u16 size = data[0x0d] << 0 | data[0x0e] << 8; if(data[0x10] != 0x04 || data.size() < 0x11 + size) break; //block 3 for(u32 n : range(0x80)) write(0x00); //gap write(0x80); for(u32 n : range(0x10)) write(*data++); flush(); //block 4 for(u32 n : range(0x80)) write(0x00); //gap write(0x80); for(u32 n : range(1 + size)) write(*data++); flush(); } //note: actual maximum capacity of a Famicom Disk is currently unknown while(output.size() < 0x12000) output.append(0x00); //expand if too small output.resize(0x12000); //shrink if too large return output; } ares-126/mia/medium/famicom.cpp000066400000000000000000000424511415063341600164740ustar00rootroot00000000000000struct Famicom : Cartridge { auto name() -> string override { return "Famicom"; } auto extensions() -> vector override { return {"fc", "nes", "unf", "unif"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& data) -> string; auto analyzeFDS(vector& data) -> string; auto analyzeINES(vector& data) -> string; auto analyzeUNIF(vector& data) -> string; }; auto Famicom::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "ines.rom"}); append(rom, {location, "program.rom"}); append(rom, {location, "character.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("board", document["game/board"].string()); pak->setAttribute("mirror", document["game/board/mirror/mode"].string()); pak->setAttribute("chip", document["game/board/chip/type"].string()); pak->setAttribute("chip/key", document["game/board/chip/key"].string()); pak->setAttribute("pinout/a0", document["game/board/chip/pinout/a0"].natural()); pak->setAttribute("pinout/a1", document["game/board/chip/pinout/a1"].natural()); pak->append("manifest.bml", manifest); array_view view{rom}; if(auto node = document["game/board/memory(type=ROM,content=iNES)"]) { pak->append("ines.rom", {view.data(), node["size"].natural()}); view += node["size"].natural(); } if(auto node = document["game/board/memory(type=ROM,content=Program)"]) { pak->append("program.rom", {view.data(), node["size"].natural()}); view += node["size"].natural(); } if(auto node = document["game/board/memory(type=ROM,content=Option)"]) { pak->append("option.rom", {view.data(), node["size"].natural()}); view += node["size"].natural(); } if(auto node = document["game/board/memory(type=ROM,content=Character)"]) { pak->append("character.rom", {view.data(), node["size"].natural()}); view += node["size"].natural(); } if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::load(node, ".eeprom"); } if(auto node = document["game/board/memory(type=RAM,content=Character)"]) { Medium::load(node, ".chr"); } return true; } auto Famicom::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::save(node, ".eeprom"); } return true; } auto Famicom::analyze(vector& data) -> string { if(data.size() < 256) return {}; string digest = Hash::SHA256(data).digest(); if(digest == "99c18490ed9002d9c6d999b9d8d15be5c051bdfa7cc7e73318053c9a994b0178" //Nintendo Famicom Disk System (Japan) || digest == "a0a9d57cbace21bf9c85c2b85e86656317f0768d7772acc90c7411ab1dbff2bf" //Sharp Twin Famicom (Japan) ) { return analyzeFDS(data); } if(data[0] == 'N' && data[1] == 'E' && data[2] == 'S' && data[3] == 0x1a) { return analyzeINES(data); } if(data[0] == 'U' && data[1] == 'N' && data[2] == 'I' && data[3] == 'F') { return analyzeUNIF(data); } //unsupported format return {}; } //Famicom Disk System (BIOS) auto Famicom::analyzeFDS(vector& data) -> string { string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " region: NTSC-J\n"; s += " board: HVC-FMR\n"; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x2000\n"; s += " content: Program\n"; s += " memory\n"; s += " type: RAM\n"; s += " size: 0x8000\n"; s += " content: Save\n"; s += " volatile\n"; s += " memory\n"; s += " type: RAM\n"; s += " size: 0x2000\n"; s += " content: Character\n"; s += " volatile\n"; return s; } //iNES auto Famicom::analyzeINES(vector& data) -> string { string hash = Hash::SHA256({data.data() + 16, data.size() - 16}).digest(); string manifest = Medium::manifestDatabase(hash); if(manifest) return manifest; u32 mapper = ((data[7] >> 4) << 4) | (data[6] >> 4); u32 mirror = ((data[6] & 0x08) >> 2) | (data[6] & 0x01); u32 prgrom = data[4] * 0x4000; u32 chrrom = data[5] * 0x2000; u32 prgram = 0u; u32 chrram = chrrom == 0u ? 8192u : 0u; u32 eeprom = 0u; string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " region: NTSC-J, NTSC-U, PAL\n"; //database required to detect region switch(mapper) { default: s += " board: HVC-NROM-256\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 1: s += " board: HVC-SXROM\n"; s += " chip type=MMC1B2\n"; prgram = 8192; break; case 2: s += " board: HVC-UOROM\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 3: s += " board: HVC-CNROM\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 4: //MMC3 s += " board: HVC-TLROM\n"; s += " chip type=MMC3B\n"; prgram = 8192; //MMC6 //s += " board: HVC-HKROM\n"; //s += " chip type=MMC6\n"; //prgram = 1024; break; case 5: s += " board: HVC-ELROM\n"; s += " chip type=MMC5\n"; prgram = 65536; break; case 7: s += " board: HVC-AOROM\n"; break; case 9: s += " board: HVC-PNROM\n"; s += " chip type=MMC2\n"; prgram = 8192; break; case 10: s += " board: HVC-FKROM\n"; s += " chip type=MMC4\n"; prgram = 8192; break; case 11: s += " board: COLORDREAMS-74*377\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 13: s += " board: HVC-CPROM\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; chrram = 16384; break; case 16: s += " board: BANDAI-LZ93D50\n"; s += " chip type=LZ93D50\n"; eeprom = 256; break; case 18: s += " board: JALECO-JF-23A\n"; s += " chip type=SS88006\n"; break; case 19: s += " board: NAMCO-163\n"; s += " chip type=163\n"; prgram = 8192; break; case 21: s += " board: KONAMI-VRC-4\n"; s += " chip type=VRC4\n"; s += " pinout a0=1 a1=2\n"; prgram = 8192; break; case 22: s += " board: KONAMI-VRC-2A\n"; s += " chip type=VRC2\n"; s += " pinout a0=1 a1=0\n"; break; case 23: s += " board: KONAMI-VRC-2\n"; s += " chip type=VRC2\n"; s += " pinout a0=0 a1=1\n"; prgram = 8192; break; case 24: s += " board: KONAMI-VRC-6\n"; s += " chip type=VRC6\n"; s += " pinout a0=0 a1=1\n"; break; case 25: s += " board: KONAMI-VRC-4\n"; s += " chip type=VRC4\n"; s += " pinout a0=1 a1=0\n"; prgram = 8192; break; case 26: s += " board: KONAMI-VRC-6\n"; s += " chip type=VRC6\n"; s += " pinout a0=1 a1=0\n"; prgram = 8192; break; case 32: s += " board: IREM-G101\n"; s += " chip type=G101\n"; prgram = 8192; break; case 33: s += " board: TAITO-TC0190\n"; s += " chip type=TC0190\n"; break; case 34: s += " board: HVC-BNROM\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 48: s += " board: TAITO-TC0690\n"; s += " chip type=TC0690\n"; break; case 65: s += " board: IREM-H3001\n"; s += " chip type=H3001\n"; break; case 66: s += " board: HVC-GNROM\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 67: s += " board: SUNSOFT-3\n"; break; case 68: s += " board: SUNSOFT-4\n"; prgram = 8192; break; case 69: s += " board: SUNSOFT-5B\n"; s += " chip type=5B\n"; prgram = 8192; break; case 70: s += " board: BANDAI-74161\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 72: s += " board: JALECO-JF-17\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 73: s += " board: KONAMI-VRC-3\n"; s += " chip type=VRC3\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; prgram = 8192; break; case 75: s += " board: KONAMI-VRC-1\n"; s += " chip type=VRC1\n"; break; case 76: s += " board: NAMCO-3446\n"; s += " chip type=118\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 77: s += " board: IREM-LROG017\n"; chrram = 8192; break; case 78: s += " board: JALECO-JF-16\n"; break; case 80: s += " board: TAITO-X1-005\n"; s += " chip type=X1-005\n"; prgram = 128; break; case 82: s += " board: TAITO-X1-017\n"; s += " chip type=X1-017\n"; prgram = 5120; break; case 85: s += " board: KONAMI-VRC-7\n"; s += " chip type=VRC7\n"; s += " pinout a0=4\n"; prgram = 8192; break; case 86: s += " board: JALECO-JF-13\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 87: s += " board: JALECO-JF-05\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 88: s += " board: NAMCO-3433\n"; s += " chip type=118\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 89: s += " board: SUNSOFT-2\n"; break; case 92: s += " board: JALECO-JF-19\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 93: s += " board: SUNSOFT-2\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 94: s += " board: HVC-UN1ROM\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 95: s += " board: NAMCO-3425\n"; s += " chip type=118\n"; break; case 96: s += " board: BANDAI-OEKA\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; chrram = 32768; break; case 97: s += " board: IREM-TAM-S1\n"; s += " chip type=TAM-S1\n"; break; case 111: s += " board: GTROM\n"; break; case 118: s += " board: HVC-TKSROM\n"; s += " chip type=MMC3B\n"; prgram = 8192; break; case 119: s += " board: HVC-TQROM\n"; s += " chip type=MMC3B\n"; chrram = 8192; break; case 140: s += " board: JALECO-JF-11\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 152: s += " board: BANDAI-74161A\n"; break; case 153: s += " board: BANDAI-LZ93D50\n"; s += " chip type=LZ93D50\n"; prgram = 8192; break; case 154: s += " board: NAMCO-3453\n"; s += " chip type=118\n"; break; case 155: s += " board: HVC-SXROM\n"; s += " chip type=MMC1A\n"; prgram = 8192; break; case 157: s += " board: BANDAI-LZ93D50\n"; s += " chip type=LZ93D50\n"; eeprom = 256; break; case 159: s += " board: BANDAI-LZ93D50\n"; s += " chip type=LZ93D50\n"; eeprom = 128; break; case 180: s += " board: HVC-UNROMA\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 184: s += " board: SUNSOFT-1\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 185: s += " board: HVC-CNROM-SEC\n"; s += " chip type=SECURITY key=0x11\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 188: s += " board: BANDAI-KARAOKE\n"; break; case 206: s += " board: NAMCO-118\n"; s += " chip type=118\n"; s +={" mirror mode=", !mirror ? "horizontal" : "vertical", "\n"}; break; case 207: s += " board: TAITO-X1-005A\n"; s += " chip type=X1-005\n"; prgram = 128; break; case 210: s += " board: NAMCO-340\n"; s += " chip type=340\n"; break; case 228: s += " board: MLT-ACTION52\n"; break; } s += " memory\n"; s += " type: ROM\n"; s += " size: 0x10\n"; s += " content: iNES\n"; if(prgrom) { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(prgrom), "\n"}; s += " content: Program\n"; } if(prgram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(prgram), "\n"}; s += " content: Save\n"; } if(chrrom) { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(chrrom), "\n"}; s += " content: Character\n"; } if(chrram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(chrram), "\n"}; s += " content: Character\n"; s += " volatile\n"; } if(eeprom) { s += " memory\n"; s += " type: EEPROM\n"; s +={" size: 0x", hex(eeprom), "\n"}; s += " content: Save\n"; } return s; } auto Famicom::analyzeUNIF(vector& data) -> string { string board; string region = "NTSC"; //fallback bool battery = false; string mirroring; vector programROMs[8]; vector characterROMs[8]; u32 offset = 32; while(offset + 8 < data.size()) { string type; type.resize(4); memory::copy(type.get(), &data[offset + 0], 4); u32 size = 0; size |= data[offset + 4] << 0; size |= data[offset + 5] << 8; size |= data[offset + 6] << 16; size |= data[offset + 7] << 24; //will attempting to read this block go out of bounds? if(offset + size + 8 > data.size()) break; if(type == "MAPR") { board.resize(size); memory::copy(board.get(), &data[offset + 8], size); if(!board[size - 1]) board.resize(size - 1); //remove unnecessary null-terminator } if(type == "TVCI" && size > 0) { u8 byte = data[offset + 8]; if(byte == 0x00) region = "NTSC"; if(byte == 0x01) region = "PAL"; if(byte == 0x02) region = "NTSC, PAL"; } if(type == "BATR" && size > 0) { u8 byte = data[offset + 8]; if(byte == 0x00) battery = false; if(byte == 0x01) battery = true; } if(type == "MIRR" && size > 0) { u8 byte = data[offset + 8]; if(byte == 0x00) mirroring = "A11"; //horizontal if(byte == 0x01) mirroring = "A10"; //vertical if(byte == 0x02) mirroring = "GND"; //screen A if(byte == 0x03) mirroring = "VCC"; //screen B if(byte == 0x04) mirroring = "EXT"; //four-screen if(byte == 0x05) mirroring = "PCB"; //mapper-controlled } if(type.beginsWith("PRG")) { u8 id = data[offset + 3] - '0'; if(id >= 8) continue; //invalid ID programROMs[id].resize(size); memory::copy(programROMs[id].data(), &data[offset + 8], size); } if(type.beginsWith("CHR")) { u8 id = data[offset + 3] - '0'; if(id >= 8) continue; //invalid ID characterROMs[id].resize(size); memory::copy(characterROMs[id].data(), &data[offset + 8], size); } offset += 8 + size; } vector programROM; vector characterROM; for(u32 id : range(8)) programROM.append(programROMs[id]); for(u32 id : range(8)) characterROM.append(characterROMs[id]); u32 programRAM = 0; u32 characterRAM = 0; if(board == "KONAMI-QTAI") { board = "KONAMI-VRC-5"; programRAM = 8_KiB + 8_KiB; characterRAM = 8_KiB; } //ensure required chucks were found if(!board) return {}; if(!programROM) return {}; string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; s +={" board: ", board, "\n"}; if(mirroring) { s +={" mirror mode=", mirroring, "\n"}; } if(programROM) { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(programROM.size()), "\n"}; s += " content: Program\n"; } if(programRAM) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(programRAM), "\n"}; s += " content: Save\n"; if(!battery) { s += " volatile\n"; } } if(characterROM) { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(characterROM.size()), "\n"}; s += " content: Character\n"; } if(characterRAM) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(characterRAM), "\n"}; s += " content: Character\n"; s += " volatile\n"; } data.reset(); data.append(programROM); data.append(characterROM); return s; } ares-126/mia/medium/game-boy-advance.cpp000066400000000000000000000073471415063341600201650ustar00rootroot00000000000000struct GameBoyAdvance : Cartridge { auto name() -> string override { return "Game Boy Advance"; } auto extensions() -> vector override { return {"gba"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto GameBoyAdvance::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::load(node, ".eeprom"); } if(auto node = document["game/board/memory(type=Flash,content=Save)"]) { Medium::load(node, ".flash"); if(auto fp = pak->read("save.flash")) { fp->setAttribute("manufacturer", node["manufacturer"].string()); } } return true; } auto GameBoyAdvance::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::save(node, ".eeprom"); } if(auto node = document["game/board/memory(type=Flash,content=Save)"]) { Medium::save(node, ".flash"); } return true; } auto GameBoyAdvance::analyze(vector& rom) -> string { vector identifiers = { "SRAM_V", "SRAM_F_V", "EEPROM_V", "FLASH_V", "FLASH512_V", "FLASH1M_V", }; vector list; for(auto& identifier : identifiers) { for(s32 n : range(rom.size() - 16)) { if(!memory::compare(&rom[n], identifier.data(), identifier.size())) { auto p = (const char*)&rom[n + identifier.size()]; if(p[0] >= '0' && p[0] <= '9' && p[1] >= '0' && p[1] <= '9' && p[2] >= '0' && p[2] <= '9' ) { char text[16]; memory::copy(text, &rom[n], identifier.size() + 3); text[identifier.size() + 3] = 0; if(!list.find(text)) list.append(text); } } } } string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " board\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(list) { if(list.first().beginsWith("SRAM_V") || list.first().beginsWith("SRAM_F_V")) { s += " memory\n"; s += " type: RAM\n"; s += " size: 0x8000\n"; s += " content: Save\n"; } if(list.first().beginsWith("EEPROM_V")) { s += " memory\n"; s += " type: EEPROM\n"; s += " size: 0x0\n"; //auto-detected s += " content: Save\n"; } if(list.first().beginsWith("FLASH_V") || list.first().beginsWith("FLASH512_V")) { s += " memory\n"; s += " type: Flash\n"; s += " size: 0x10000\n"; s += " content: Save\n"; s += " manufacturer: Macronix\n"; } if(list.first().beginsWith("FLASH1M_V")) { s += " memory\n"; s += " type: Flash\n"; s += " size: 0x20000\n"; s += " content: Save\n"; s += " manufacturer: Macronix\n"; } } return s; } ares-126/mia/medium/game-boy-color.cpp000066400000000000000000000002441415063341600176670ustar00rootroot00000000000000struct GameBoyColor : GameBoy { auto name() -> string override { return "Game Boy Color"; } auto extensions() -> vector override { return {"gbc"}; } }; ares-126/mia/medium/game-boy.cpp000066400000000000000000000231031415063341600165520ustar00rootroot00000000000000struct GameBoy : Cartridge { auto name() -> string override { return "Game Boy"; } auto extensions() -> vector override { return {"gb"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto GameBoy::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("board", document["game/board"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::load(node, ".eeprom"); if(auto fp = pak->read("save.eeprom")) { fp->setAttribute("width", node["width"].natural()); } } if(auto node = document["game/board/memory(type=Flash,content=Download)"]) { Medium::load(node, ".flash"); } if(auto node = document["game/board/memory(type=RTC,content=Time)"]) { Medium::load(node, ".rtc"); } return true; } auto GameBoy::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::save(node, ".eeprom"); } if(auto node = document["game/board/memory(type=Flash,content=Download)"]) { Medium::save(node, ".flash"); } if(auto node = document["game/board/memory(type=RTC,content=Time)"]) { Medium::save(node, ".rtc"); } return true; } auto GameBoy::analyze(vector& rom) -> string { if(rom.size() < 0x4000) return {}; auto hash = Hash::SHA256(rom).digest(); u32 headerAddress = rom.size() < 0x8000 ? rom.size() : rom.size() - 0x8000; auto read = [&](u32 offset) { return rom[headerAddress + offset]; }; if(read(0x0104) == 0xce && read(0x0105) == 0xed && read(0x0106) == 0x66 && read(0x0107) == 0x66 && read(0x0108) == 0xcc && read(0x0109) == 0x0d && read(0x0147) >= 0x0b && read(0x0147) <= 0x0d ) { //MMM01 stores header at bottom of rom[] } else { //all other mappers store header at top of rom[] headerAddress = 0; } bool black = (read(0x0143) & 0xc0) == 0x80; //cartridge works in DMG+CGB mode bool clear = (read(0x0143) & 0xc0) == 0xc0; //cartridge works in CGB mode only bool ram = false; bool battery = false; bool eeprom = false; bool flash = false; bool rtc = false; bool accelerometer = false; bool rumble = false; u32 romSize = 0; u32 ramSize = 0; u32 eepromSize = 0; u32 eepromWidth = 0; u32 flashSize = 0; u32 rtcSize = 0; string mapper; switch(read(0x0147)) { case 0x00: //no mapper break; case 0x01: mapper = "MBC1"; break; case 0x02: mapper = "MBC1"; ram = true; break; case 0x03: mapper = "MBC1"; battery = true; ram = true; break; case 0x05: mapper = "MBC2"; ram = true; break; case 0x06: mapper = "MBC2"; battery = true; ram = true; break; case 0x08: mapper = "MBC0"; ram = true; break; case 0x09: mapper = "MBC0"; battery = true; ram = true; break; case 0x0b: mapper = "MMM01"; break; case 0x0c: mapper = "MMM01"; ram = true; break; case 0x0d: mapper = "MMM01"; battery = true; ram = true; break; case 0x0f: mapper = "MBC3"; battery = true; rtc = true; break; case 0x10: mapper = "MBC3"; battery = true; ram = true; rtc = true; break; case 0x11: mapper = "MBC3"; break; case 0x12: mapper = "MBC3"; ram = true; break; case 0x13: mapper = "MBC3"; battery = true; ram = true; break; case 0x19: mapper = "MBC5"; break; case 0x1a: mapper = "MBC5"; ram = true; break; case 0x1b: mapper = "MBC5"; battery = true; ram = true; break; case 0x1c: mapper = "MBC5"; rumble = true; break; case 0x1d: mapper = "MBC5"; ram = true; rumble = true; break; case 0x1e: mapper = "MBC5"; battery = true; ram = true; rumble = true; break; case 0x20: mapper = "MBC6"; flash = true; battery = true; ram = true; break; case 0x22: mapper = "MBC7"; battery = true; eeprom = true; accelerometer = true; rumble = true; break; case 0xfc: mapper = "CAMERA"; break; case 0xfd: mapper = "TAMA"; battery = true; ram = true; rtc = true; break; case 0xfe: mapper = "HuC3"; break; case 0xff: mapper = "HuC1"; battery = true; ram = true; break; } //Game Boy: label = $0134-0143 //Game Boy Color (early games): label = $0134-0142; model = $0143 //Game Boy Color (later games): label = $0134-013e; serial = $013f-0142; model = $0143 string label; for(u32 n : range(black || clear ? 15 : 16)) { char byte = read(0x0134 + n); if(byte < 0x20 || byte > 0x7e) byte = ' '; label.append(byte); } string serial = label.slice(-4); if(!black && !clear) serial = ""; for(auto& byte : serial) { if(byte >= 'A' && byte <= 'Z') continue; //invalid serial serial = ""; break; } label.trimRight(serial, 1L); //remove the serial from the label, if it exists label.strip(); //remove any excess whitespace from the label switch(read(0x0148)) { default: case 0x00: romSize = 2 * 16 * 1024; break; case 0x01: romSize = 4 * 16 * 1024; break; case 0x02: romSize = 8 * 16 * 1024; break; case 0x03: romSize = 16 * 16 * 1024; break; case 0x04: romSize = 32 * 16 * 1024; break; case 0x05: romSize = 64 * 16 * 1024; break; case 0x06: romSize = 128 * 16 * 1024; break; case 0x07: romSize = 256 * 16 * 1024; break; case 0x52: romSize = 72 * 16 * 1024; break; case 0x53: romSize = 80 * 16 * 1024; break; case 0x54: romSize = 96 * 16 * 1024; break; } switch(read(0x0149)) { default: case 0x00: ramSize = 0_KiB; break; case 0x01: ramSize = 2_KiB; break; case 0x02: ramSize = 8_KiB; break; case 0x03: ramSize = 32_KiB; break; case 0x04: ramSize = 128_KiB; break; case 0x05: ramSize = 64_KiB; break; } //Bomber Man Collection (Japan) if(hash == "85f6b7b2eb182f53b00ac3e9e4a86ef8f7496550a0b2f64573ab61f670e30245") { mapper = "MBC1#M"; } //Genjin Collection (Japan) if(hash == "40c3b05b76355d9a4e244cb22c074648f03933571b023f77f667e8b2e4b48513") { mapper = "MBC1#M"; } //Momotarou Collection (Japan) if(hash == "db3a45363490b8cb56274f260358c7b8dc0ffc0a41517123d6c5d78c2c54dc38") { mapper = "MBC1#M"; } //Mortal Kombat I & II (Japan) if(hash == "c6c43dce0514016a4a635db3ec250bfa5790422042599457cd30841ec92f5979") { mapper = "MBC1#M"; } //Mortal Kombat I & II (USA, Europe) if(hash == "cacace0974a588c68766bbf21a631be9fa234335e0607ebfa9de77b3dd0cbf18") { mapper = "MBC1#M"; } if(mapper == "MBC2" && ram) ramSize = 256; if(mapper == "MBC3" && (romSize > 2_MiB || ramSize > 32_KiB)) mapper = "MBC30"; if(mapper == "MBC6" && ram) ramSize = 32_KiB; if(mapper == "TAMA" && ram) ramSize = 32; if(mapper == "MBC6" && flash) flashSize = 1_MiB; //Game Boy header does not specify EEPROM size: detect via game label instead //Command Master: EEPROM = 512 bytes //Kirby Tilt 'n' Tumble: EEPROM = 256 bytes //Korokoro Kirby: EEPROM = 256 bytes if(mapper == "MBC7" && eeprom) { eepromSize = 256; //fallback guess; supported values are 128, 256, 512, 1024, 2048 eepromWidth = 16; //93LCx6 supports 8-bit mode, but no licensed games use it if(label == "CMASTER" && serial == "KCEJ") eepromSize = 512; if(label == "KIRBY TNT" && serial == "KTNE") eepromSize = 256; if(label == "KORO2 KIRBY" && serial == "KKKJ") eepromSize = 256; } if(mapper == "MBC3" && rtc) rtcSize = 13; if(mapper == "TAMA" && rtc) rtcSize = 15; string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" label: ", label, "\n"}; if(serial) s +={" serial: ", serial, "\n"}; if(mapper) s +={" board: ", mapper, "\n"}; else s += " board\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(ram && ramSize) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(ramSize), "\n"}; s += " content: Save\n"; if(!battery) s += " volatile\n"; } if(eeprom && eepromSize) { s += " memory\n"; s += " type: EEPROM\n"; s +={" size: 0x", hex(eepromSize), "\n"}; s +={" width: ", eepromWidth, "\n"}; s += " content: Save\n"; } if(flash && flashSize) { s += " memory\n"; s += " type: Flash\n"; s +={" size: 0x", hex(flashSize), "\n"}; s += " content: Download\n"; } if(rtc && rtcSize) { s += " memory\n"; s += " type: RTC\n"; s +={" size: 0x", hex(rtcSize), "\n"}; s += " content: Time\n"; } if(accelerometer) s += " accelerometer\n"; if(rumble) s += " rumble\n"; return s; } ares-126/mia/medium/game-gear.cpp000066400000000000000000000153601415063341600167050ustar00rootroot00000000000000struct GameGear : Cartridge { auto name() -> string override { return "Game Gear"; } auto extensions() -> vector override { return {"gg"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto GameGear::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } else { return false; } this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("board", document["game/board" ].string()); pak->setAttribute("title", document["game/title" ].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("ms", (bool)document["game/board/ms"]); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } return true; } auto GameGear::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } return true; } auto GameGear::analyze(vector& rom) -> string { string hash = Hash::SHA256(rom).digest(); string board = "Sega"; string region = "NTSC-J, NTSC-U, PAL"; //database required to detect region u32 ram = 32_KiB; //database required to detect RAM size bool ms = 0; //database required to detect Master System mode //Master System //============= //Castle of Illusion Starring Mickey Mouse (USA, Europe) if(hash == "068fc6eaf728b3cd17c6fc5320c955deb0cd3b36343810470fe30c5a3661d0d3") { region = "NTSC-U, PAL"; ms = 1; } //Mickey Mouse no Castle Illusion (Japan) if(hash == "906e8da0e24899d30dffc4745b533e2a7c9d7ec2addbe853715165b552474d68") { region = "NTSC-J"; ms = 1; } //Jang Pung II (Korea) if(hash == "a685ad4118edd2fe6fb8ccc4bfc0c9ceac2f6affc3b5d93cc29afb2c9604d5ee") { region = "NTSC-J"; ms = 1; } //Olympic Gold (Japan, USA) if(hash == "8c591ccc49c7806aeeab67c4c82babec29ee49c9f5b179fe5f811a5c15f0b17e") { region = "NTSC-J, NTSC-U"; ms = 1; } //Olympic Gold (Europe) if(hash == "7a842949ec9f8e8f564b56e550ff146c3d3999adbe598c94f751c629d4346f86") { region = "PAL"; ms = 1; } //Out Run Europa (USA) if(hash == "a507760d4526e21056fcb97a981fb84da23ff371c11ffd5980f65d1db88953d6") { region = "NTSC-U"; ms = 1; } //Out Run Europa (Europe) if(hash == "eed5943b18ca2ce7d2fc4db1123da5c330ae3a07258741ded6c4333202b878fb") { region = "PAL"; ms = 1; } //Predator 2 (USA, Europe) if(hash == "6ebae288656b12612ded3aceda7bd24844341cd536bdaf767b61e4e8911bb369") { region = "NTSC-U, PAL"; ms = 1; } //Prince of Persia (USA, Europe) if(hash == "54a9657e6c489ce03b8e9ceb0096152c211b356398541b84c2480ea3297f7fc2") { region = "NTSC-U, PAL"; ms = 1; } //Prince of Persia (USA, Europe) (Beta) if(hash == "3bd19b204eeb6f00d2fbb8ad31db1118f0c8ef8658246ad361ba9545481eee48") { region = "NTSC-U, PAL"; ms = 1; } //Rastan Saga (Japan) if(hash == "d8756c6c8274b3eb049d301ccfdcc15fb0d7cfae7f021117caebe97390867272") { region = "NTSC-J"; ms = 1; } //R.C. Grand Prix (USA, Europe) if(hash == "faee18f47f5ddffa3f741e40d5a1b5e94b6ea716c129824cd0fb4cf22d0bf669") { region = "NTSC-U, PAL"; ms = 1; } //Street Hero (USA) (Proto 1) if(hash == "ca16eb3a748ad5139fa591db3d52ecac782c7e0b043af5522858c03df169c6bd") { region = "NTSC-U"; ms = 1; } //Street Hero (USA) (Proto 2) if(hash == "ee84e6a87df1a668e5501deeb619a03172795b468fd5b34ec902b62e73dd5459") { region = "NTSC-U"; ms = 1; } //Super Kick Off (Japan) if(hash == "0ebc52e06a644e7f31802bee9f1b4b41b747790f1e841a8417bb561e475e58d3") { region = "NTSC-J"; ms = 1; } //WWF Wrestlemania Steel Cage Challenge (Europe) if(hash == "71d8d0769bf9c7d9339ead0319062d85a0e19411a17a938f58678b0b8efa7132") { region = "PAL"; ms = 1; } //Codemasters //=========== //CJ Elephant Fugitive (Europe) if(hash == "bab8896529fdbab1d85c16048582e3639e2f85e12875862ce76e7f862706a52d") { board = "Codemasters"; region = "PAL"; ram = 0; } //Cosmic Spacehead (Europe) if(hash == "d5f16bf7a21fb6a6c1ebd6196aa6c1327275940613e877ccb4c1366eab66481e") { board = "Codemasters"; region = "PAL"; ram = 0; } //Dropzone (Europe) if(hash == "8b949055eead8fc5fa9ae9c6530373cac77ffd9be7159090f4eb057919915a4f") { board = "Codemasters"; region = "PAL"; ram = 0; } //Ernie Els Golf (Europe) if(hash == "b1efbd983423560707c0ca31ea9780c31fbb4f3d37a77ee1064453ad778e010d") { board = "Codemasters"; region = "PAL"; ram = 8_KiB; } //Excellent Dizzy Collection, The (Europe) if(hash == "7ad6a32bbc270af48d55c6650bdd22cf4050ed50a446334de952b18490798bf5") { board = "Codemasters"; region = "PAL"; ram = 0; ms = 1; } //Fantastic Dizzy (Europe) if(hash == "cf9e92667b4d653996a8b678998211a31536410a39e4f64ca535feea5450ad0c") { board = "Codemasters"; region = "PAL"; ram = 0; ms = 1; } //Micro Machines (Europe) if(hash == "d842c0408ef1b085bb0ac0aaed4f53f9dd5659a11a6e12df12adbe0fec5c46c8") { board = "Codemasters"; region = "PAL"; ram = 0; } //Micro Machines 2: Turbo Tournament (Europe) if(hash == "8c832bce275ebb4011a65875b38402c00fa5df90534560f3977aed51fe06d00e") { board = "Codemasters"; region = "PAL"; ram = 0; } //Pete Sempras Tennis (Europe) if(hash == "3fa10454535274c67f702ddc9c47f587f6895996fa35dedaaad97b7ffe2e10bc") { board = "Codemasters"; region = "PAL"; ram = 0; } //S.S. Lucifer: Man Overboard! (Europe) if(hash == "3cbd347c1a584fbaa37f3f53797824ce7532e9d12fcb46b2efbc51bfb5f2d83e") { board = "Codemasters"; region = "PAL"; ram = 0; } string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; s +={" board: ", board, "\n"}; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(ram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(ram), "\n"}; s += " content: Save\n"; } if(ms) s += " ms"; return s; } ares-126/mia/medium/master-system.cpp000066400000000000000000000125171415063341600176760ustar00rootroot00000000000000struct MasterSystem : Cartridge { auto name() -> string override { return "Master System"; } auto extensions() -> vector override { return {"ms", "sms"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto MasterSystem::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } else { return false; } this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("board", document["game/board" ].string()); pak->setAttribute("title", document["game/title" ].string()); pak->setAttribute("region", document["game/region"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } return true; } auto MasterSystem::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } return true; } auto MasterSystem::analyze(vector& rom) -> string { string hash = Hash::SHA256(rom).digest(); string board = "Sega"; string region = "NTSC-J, NTSC-U, PAL"; //database required to detect region u32 ram = 32_KiB; //database required to detect RAM size //Region //====== //PGA Tour Golf (Europe) if(hash == "a3856f0d15511f7a6d48fa6c47da2c81adf372e6a04f83298a10cd45b6711530") { region = "PAL"; } //Ys (Japan) if(hash == "816ddb63d3aa30e7c4fc0efb706ff5e66f4b6f17cf331d5fc97f6681d1905a61") { //relies on SMS1 VDP bug region = "NTSC-J"; } //Codemasters //=========== //Cosmic Spacehead (Europe) if(hash == "1377189c097116fd49f9298368fd3138a28fbe48a08ff7b097d9360ac891bb9b") { board = "Codemasters"; region = "PAL"; ram = 0; } //Dinobasher Starring Bignose the Caveman (Europe) (Prototype) if(hash == "127b14aa1f61a092ce5a70afa63527c039a5125b904cfa3a860c7c713f2e3a24") { board = "Codemasters"; region = "PAL"; ram = 0; } //Fantastic Dizzy (Europe) if(hash == "f0b9f293ec534f38e1028016e7e8bcb56a96591faa88d6e8ec5cab2bd5abfb3b") { board = "Codemasters"; region = "PAL"; ram = 0; } //Micro Machines (Europe) if(hash == "cfbc86deccdcd31b64f886b1c344cc017e39c665928820bdfa16ae65d281057a") { board = "Codemasters"; region = "PAL"; ram = 0; } //Korea //===== //C_So! (Korea) if(hash == "60716197f2643a5c87e38d26f32f370e328e740aaaea879b521986c31f8cdded") { board = "Korea"; region = "NTSC-J"; ram = 0; } //Dallyeora Pigu-Wang (Korea) if(hash == "c92b7f13bfa2d5bcd57ac0bbeb7f0b0218bbac6430b51f64d9608ee26a3fc3d2") { board = "Korea"; region = "NTSC-J"; ram = 0; } //FA Tetris (Korea) if(hash == "46d86dd5782b248430cd84e9ba5b4fc68abec6472213bb898b2dbb213b4debcf") { board = "Korea"; region = "NTSC-J"; ram = 0; } //MSX //=== //Cyborg Z (Korea) if(hash == "685530e434c9d78da8441475f795591210873622622b7f3168348ce08abc7f8e") { board = "MSX"; region = "NTSC-J"; ram = 0; } //F-1 Spirit: The Way to Formula-1 (Korea) if(hash == "42dbc2ccf30a8d8e6d1d64fd0abb98d2f29b06da2113cedb9ed15af57fd9cfe0") { board = "MSX"; region = "NTSC-J"; ram = 0; } //Knightmare II: The Maze of Galious (Korea) if(hash == "a906127be07469e6083ef6eb9657f5ece6ffe65b3cf793a0423959fc446e2799") { board = "MSX"; region = "NTSC-J"; ram = 0; } //Nemesis (Korea) if(hash == "c5b5126b0fdcacc70f350c3673f8d081b8d59d2db251ef917bf3ca8dd3d63430") { board = "MSX#A"; region = "NTSC-J"; ram = 0; } //Nemesis 2 (Korea) if(hash == "52d0772347e1bd73eea1a31f19400a4e24b43fb148b265ace9018ce2b677b3e4") { board = "MSX"; region = "NTSC-J"; ram = 0; } //Penguin Adventure (Korea) if(hash == "17958bcf247f6d18b616c519cc1466f7250901ada61831890ca58767fbfbb4b8") { board = "MSX"; region = "NTSC-J"; ram = 0; } //Street Master (Korea) if(hash == "cad9e768d6c7a1f781f2bf6c13ceab9142135d36fadab8db4b77edc9ae926be7") { board = "MSX"; region = "NTSC-J"; ram = 0; } //Wonsiin (Korea) if(hash == "ee22d7b7fcd59e81ee6fda7b82356883d9c3d8ea3c99e6591487d1f28d569073") { board = "MSX"; region = "NTSC-J"; ram = 0; } //Janggun //======= //Janggun-ui Adeul (Korea) if(hash == "e3c19e14a934f0995a046b8fa9d5c8db53fc02979273e747a5083b45996861c4") { board = "Janggun"; region = "NTSC-J"; ram = 0; } string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; s +={" board: ", board, "\n"}; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(ram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(ram), "\n"}; s += " content: Save\n"; } return s; } ares-126/mia/medium/medium.cpp000066400000000000000000000142071415063341600163370ustar00rootroot00000000000000namespace Media { vector databases; #include "colecovision.cpp" #include "famicom.cpp" #include "famicom-disk.cpp" #include "game-boy.cpp" #include "game-boy-color.cpp" #include "game-boy-advance.cpp" #include "master-system.cpp" #include "game-gear.cpp" #include "mega-drive.cpp" #include "mega-32x.cpp" #include "mega-cd.cpp" #include "msx.cpp" #include "msx2.cpp" #include "neo-geo.cpp" #include "neo-geo-pocket.cpp" #include "neo-geo-pocket-color.cpp" #include "nintendo-64.cpp" #include "nintendo-64dd.cpp" #include "pc-engine.cpp" #include "pc-engine-cd.cpp" #include "saturn.cpp" #include "supergrafx.cpp" #include "playstation.cpp" #include "sg-1000.cpp" #include "sc-3000.cpp" #include "super-famicom.cpp" #include "bs-memory.cpp" #include "sufami-turbo.cpp" #include "wonderswan.cpp" #include "wonderswan-color.cpp" #include "pocket-challenge-v2.cpp" } //auto Medium::construct() -> void { // database = BML::unserialize(file::read(locate({"Database/", name(), ".bml"}))); // pathname = {Path::user(), "Emulation/", name(), "/"}; //} auto Medium::create(string name) -> shared_pointer { if(name == "ColecoVision") return new Media::ColecoVision; if(name == "Famicom") return new Media::Famicom; if(name == "Famicom Disk") return new Media::FamicomDisk; if(name == "Game Boy") return new Media::GameBoy; if(name == "Game Boy Color") return new Media::GameBoyColor; if(name == "Game Boy Advance") return new Media::GameBoyAdvance; if(name == "Master System") return new Media::MasterSystem; if(name == "Game Gear") return new Media::GameGear; if(name == "Mega Drive") return new Media::MegaDrive; if(name == "Mega 32X") return new Media::Mega32X; if(name == "Mega CD") return new Media::MegaCD; if(name == "MSX") return new Media::MSX; if(name == "MSX2") return new Media::MSX2; if(name == "Neo Geo") return new Media::NeoGeo; if(name == "Neo Geo Pocket") return new Media::NeoGeoPocket; if(name == "Neo Geo Pocket Color") return new Media::NeoGeoPocketColor; if(name == "Nintendo 64") return new Media::Nintendo64; if(name == "Nintendo 64DD") return new Media::Nintendo64DD; if(name == "PC Engine") return new Media::PCEngine; if(name == "PC Engine CD") return new Media::PCEngineCD; if(name == "Saturn") return new Media::Saturn; if(name == "SuperGrafx") return new Media::SuperGrafx; if(name == "PlayStation") return new Media::PlayStation; if(name == "SG-1000") return new Media::SG1000; if(name == "SC-3000") return new Media::SC3000; if(name == "Super Famicom") return new Media::SuperFamicom; if(name == "BS Memory") return new Media::BSMemory; if(name == "Sufami Turbo") return new Media::SufamiTurbo; if(name == "WonderSwan") return new Media::WonderSwan; if(name == "WonderSwan Color") return new Media::WonderSwanColor; if(name == "Pocket Challenge V2") return new Media::PocketChallengeV2; return {}; } //search game database for manifest, if one exists auto Medium::manifestDatabase(string sha256) -> string { //load the database on the first time it's needed for a given media type bool found = false; for(auto& database : Media::databases) { if(database.name == name()) found = true; } if(!found) { Database database; database.name = name(); database.list = BML::unserialize(file::read(locate({"Database/", name(), ".bml"}))); Media::databases.append(move(database)); } //search the database for a given sha256 game entry for(auto& database : Media::databases) { if(database.name == name()) { for(auto node : database.list) { if(node["sha256"].string() == sha256) { return BML::serialize(node); } } } } //database or game entry not found return {}; } // //audio CD fallback auto CompactDisc::manifestAudio(string location) -> string { string manifest; manifest += "game\n"; manifest +={" name: ", Medium::name(location), "\n"}; manifest +={" title: ", Medium::name(location), "\n"}; manifest += " audio\n"; return manifest; } auto CompactDisc::readDataSectorBCD(string pathname, u32 sectorID) -> vector { auto fp = file::open({pathname, "cd.rom"}, file::mode::read); if(!fp) return {}; vector toc; toc.resize(96 * 7500); for(u32 sector : range(7500)) { fp.read({toc.data() + 96 * sector, 96}); } CD::Session session; session.decode(toc, 96); for(u32 trackID : range(100)) { if(auto& track = session.tracks[trackID]) { if(!track.isData()) continue; if(auto index = track.index(1)) { vector sector; sector.resize(2448); fp.seek(2448 * (abs(session.leadIn.lba) + index->lba + sectorID) + 16); fp.read({sector.data(), 2448}); return sector; } } } return {}; } auto CompactDisc::readDataSectorCUE(string filename, u32 sectorID) -> vector { Decode::CUE cuesheet; if(!cuesheet.load(filename)) return {}; for(auto& file : cuesheet.files) { u64 offset = 0; auto location = string{Location::path(filename), file.name}; if(file.type == "binary") { auto binary = file::open(location, nall::file::mode::read); if(!binary) continue; for(auto& track : file.tracks) { for(auto& index : track.indices) { u32 sectorSize = 0; if(track.type == "mode1/2048") sectorSize = 2048; if(track.type == "mode1/2352") sectorSize = 2352; if(track.type == "mode2/2352") sectorSize = 2352; if(sectorSize && index.number == 1) { binary.seek(offset + (sectorSize * sectorID) + (sectorSize == 2352 ? 16 : 0)); vector sector; sector.resize(2048); binary.read({sector.data(), sector.size()}); return sector; } offset += track.sectorSize() * index.sectorCount(); } } } if(file.type == "wave") { Decode::WAV wave; if(!wave.open(location)) continue; offset += wave.headerSize; for(auto& track : file.tracks) { auto length = track.sectorSize(); for(auto& index : track.indices) { offset += track.sectorSize() * index.sectorCount(); } } } } return {}; } ares-126/mia/medium/medium.hpp000066400000000000000000000013461415063341600163440ustar00rootroot00000000000000struct Database { string name; Markup::Node list; }; struct Medium : Pak { static auto create(string name) -> shared_pointer; auto manifestDatabase(string sha256) -> string; string sha256; }; struct Cartridge : Medium { auto type() -> string override { return "Cartridge"; } }; struct CompactDisc : Medium { auto type() -> string override { return "Compact Disc"; } auto extensions() -> vector override { return {"cue"}; } auto manifestAudio(string location) -> string; auto readDataSectorBCD(string filename, u32 sectorID) -> vector; auto readDataSectorCUE(string filename, u32 sectorID) -> vector; }; struct FloppyDisk : Medium { auto type() -> string override { return "Floppy Disk"; } }; ares-126/mia/medium/mega-32x.cpp000066400000000000000000000161641415063341600164060ustar00rootroot00000000000000struct Mega32X : Cartridge { auto name() -> string override { return "Mega 32X"; } auto extensions() -> vector override { return {"32x"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; auto analyzeStorage(vector& rom, string hash) -> void; struct RAM { explicit operator bool() const { return mode && size != 0; } string mode; u32 size = 0; } ram; struct EEPROM { explicit operator bool() const { return mode && size != 0; } string mode; u32 size = 0; u8 rsda = 0; u8 wsda = 0; u8 wscl = 0; } eeprom; }; auto Mega32X::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("bootable", true); pak->setAttribute("mega32x", true); pak->setAttribute("megacd", (bool)document["game/device"].string().split(", ").find("Mega CD")); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Pak::load(node, ".ram"); if(auto fp = pak->read("save.ram")) { fp->setAttribute("mode", node["mode"].string()); } } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Pak::load(node, ".eeprom"); if(auto fp = pak->read("save.eeprom")) { fp->setAttribute("mode", node["mode"].string()); fp->setAttribute("rsda", node["rsda"].natural()); fp->setAttribute("wsda", node["wsda"].natural()); fp->setAttribute("wscl", node["wscl"].natural()); } } return true; } auto Mega32X::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Pak::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Pak::save(node, ".eeprom"); } return true; } auto Mega32X::analyze(vector& rom) -> string { if(rom.size() < 0x800) return {}; ram = {}; eeprom = {}; auto hash = Hash::SHA256(rom).digest(); analyzeStorage(rom, hash); vector devices; string device = slice((const char*)&rom[0x190], 0, 16).trimRight(" "); for(auto& id : device) { if(id == '0'); //Master System controller if(id == '4'); //multitap if(id == '6'); //6-button controller if(id == 'A'); //analog joystick if(id == 'B'); //trackball if(id == 'C') devices.append("Mega CD"); if(id == 'D'); //download? if(id == 'F'); //floppy drive if(id == 'G'); //light gun if(id == 'J'); //3-button controller if(id == 'K'); //keyboard if(id == 'L'); //Activator if(id == 'M'); //mouse if(id == 'P'); //printer if(id == 'R'); //RS-232 modem if(id == 'T'); //tablet if(id == 'V'); //paddle } vector regions; string region = slice((const char*)&rom[0x01f0], 0, 16).trimRight(" "); if(!regions) { if(region == "JAPAN" ) regions.append("NTSC-J"); if(region == "EUROPE") regions.append("PAL"); } if(!regions) { if(region.find("J")) regions.append("NTSC-J"); if(region.find("U")) regions.append("NTSC-U"); if(region.find("E")) regions.append("PAL"); } if(!regions && region.size() == 1) { maybe bits; u8 field = region[0]; if(field >= '0' && field <= '9') bits = field - '0'; if(field >= 'A' && field <= 'F') bits = field - 'A' + 10; if(bits && *bits & 1) regions.append("NTSC-J"); //domestic 60hz if(bits && *bits & 2); //domestic 50hz if(bits && *bits & 4) regions.append("NTSC-U"); //overseas 60hz if(bits && *bits & 8) regions.append("PAL"); //overseas 50hz } if(!regions) { regions.append("NTSC-J", "NTSC-U", "PAL"); } string domesticName; domesticName.resize(48); memory::copy(domesticName.get(), &rom[0x0120], domesticName.size()); for(auto& c : domesticName) if(c < 0x20 || c > 0x7e) c = ' '; while(domesticName.find(" ")) domesticName.replace(" ", " "); domesticName.strip(); string internationalName; internationalName.resize(48); memory::copy(internationalName.get(), &rom[0x0150], internationalName.size()); for(auto& c : internationalName) if(c < 0x20 || c > 0x7e) c = ' '; while(internationalName.find(" ")) internationalName.replace(" ", " "); internationalName.strip(); string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Pak::name(location), "\n"}; s +={" title: ", Pak::name(location), "\n"}; s +={" label: ", domesticName, "\n"}; s +={" label: ", internationalName, "\n"}; s +={" region: ", regions.merge(", "), "\n"}; if(devices) s +={" device: ", devices.merge(", "), "\n"}; s += " board\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(eeprom) { s += " memory\n"; s += " type: EEPROM\n"; s +={" size: 0x", hex(eeprom.size), "\n"}; s += " content: Save\n"; s +={" mode: ", eeprom.mode, "\n"}; s +={" rsda: ", eeprom.rsda, "\n"}; s +={" wsda: ", eeprom.wsda, "\n"}; s +={" wscl: ", eeprom.wscl, "\n"}; } else if(ram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(ram.size), "\n"}; s += " content: Save\n"; s +={" mode: ", ram.mode, "\n"}; } return s; } auto Mega32X::analyzeStorage(vector& rom, string hash) -> void { //SRAM //==== if(rom[0x01b0] == 'R' && rom[0x01b1] == 'A') { u32 ramFrom = 0; ramFrom |= rom[0x01b4] << 24; ramFrom |= rom[0x01b5] << 16; ramFrom |= rom[0x01b6] << 8; ramFrom |= rom[0x01b7] << 0; u32 ramTo = 0; ramTo |= rom[0x01b8] << 24; ramTo |= rom[0x01b9] << 16; ramTo |= rom[0x01ba] << 8; ramTo |= rom[0x01bb] << 0; if(!(ramFrom & 1) && !(ramTo & 1)) ram.mode = "upper"; if( (ramFrom & 1) && (ramTo & 1)) ram.mode = "lower"; if(!(ramFrom & 1) && (ramTo & 1)) ram.mode = "word"; if(ram.mode == "upper") ram.size = (ramTo - ramFrom + 2) >> 1; if(ram.mode == "lower") ram.size = (ramTo - ramFrom + 2) >> 1; if(ram.mode == "word" ) ram.size = (ramTo - ramFrom + 1); } //M24C02 //====== //NFL Quarterback Club (World) if(hash == "092ad8896ea7784d2feb7f17b1a348562588a361c50de6ade722a5c5cce698d5") { eeprom.mode = "M24C02"; eeprom.size = 256; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } //M24C04 //====== //NBA Jam: Tournament Edition (World) if(hash == "7f7e1059671a99405e3782cd9b4e5d4025ee4bb122a89357b95b0fcac512f74f") { eeprom.mode = "M24C04"; eeprom.size = 512; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } } ares-126/mia/medium/mega-cd.cpp000066400000000000000000000054241415063341600163550ustar00rootroot00000000000000struct MegaCD : CompactDisc { auto name() -> string override { return "Mega CD"; } auto extensions() -> vector override { return {"mcd", "cue"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(string location) -> string; }; auto MegaCD::load(string location) -> bool { if(!inode::exists(location)) return false; this->location = location; this->manifest = analyze(location); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->append("manifest.bml", manifest); if(directory::exists(location)) { pak->append("cd.rom", vfs::disk::open({location, "cd.rom"}, vfs::read)); } if(file::exists(location)) { pak->append("cd.rom", vfs::cdrom::open(location)); } return true; } auto MegaCD::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto MegaCD::analyze(string location) -> string { auto sector = readDataSectorCUE(location, 0); if(!sector || memory::compare(sector.data(), "SEGA", 4)) return CompactDisc::manifestAudio(location); vector regions; if(!memory::compare(sector.data()+4, "DISCSYSTEM ", 12) || !memory::compare(sector.data()+4, "BOOTDISC ", 12)) { if( Hash::CRC32({sector.data()+0x200, 340}).value() == 0x4571f623) // JP boot regions.append("NTSC-J"); else if(Hash::CRC32({sector.data()+0x200, 1390}).value() == 0x6ffb4732) // EU boot regions.append("PAL"); else if(Hash::CRC32({sector.data()+0x200, 1412}).value() == 0xf361ab57) // US boot regions.append("NTSC-U"); } if(!regions) regions.append("NTSC-J","NTSC-U","PAL"); // unknown boot vector devices; string device = slice((const char*)(sector.data() + 0x190), 0, 16).trimRight(" "); for(auto& id : device) { if(id == '0'); //Master System controller if(id == '4'); //multitap if(id == '6'); //6-button controller if(id == 'A'); //analog joystick if(id == 'B'); //trackball if(id == 'C'); //CD-ROM drive if(id == 'D'); //download? if(id == 'F'); //floppy drive if(id == 'G'); //light gun if(id == 'J'); //3-button controller if(id == 'K'); //keyboard if(id == 'L'); //Activator if(id == 'M'); //mouse if(id == 'P'); //printer if(id == 'R'); //RS-232 modem if(id == 'T'); //tablet if(id == 'V'); //paddle } string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", regions.merge(", "), "\n"}; if(devices) s +={" device: ", devices.merge(", "), "\n"}; return s; } ares-126/mia/medium/mega-drive.cpp000066400000000000000000000507021415063341600170770ustar00rootroot00000000000000struct MegaDrive : Cartridge { auto name() -> string override { return "Mega Drive"; } auto extensions() -> vector override { return {"md", "smd", "gen", "bin"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; auto analyzeStorage(vector& rom, string hash) -> void; auto analyzePeripherals(vector& rom, string hash) -> void; auto analyzeCopyProtection(vector& rom, string hash) -> void; struct RAM { explicit operator bool() const { return mode && size != 0; } string mode; u32 size = 0; } ram; struct EEPROM { explicit operator bool() const { return mode && size != 0; } string mode; u32 size = 0; u8 rsda = 0; u8 wsda = 0; u8 wscl = 0; } eeprom; struct Peripherals { bool jcart = 0; } peripherals; }; auto MegaDrive::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("bootable", true); pak->setAttribute("megacd", (bool)document["game/device"].string().split(", ").find("Mega CD")); pak->append("manifest.bml", manifest); //add SVP ROM to image if it is missing if(document["game/board/memory(type=ROM,content=SVP)"]) { if(memory::compare(rom.data() + rom.size() - 0x800, Resource::MegaDrive::SVP, 0x800)) { rom.resize(rom.size() + 0x800); memory::copy(rom.data() + rom.size() - 0x800, Resource::MegaDrive::SVP, 0x800); } } array_view view{rom}; for(auto node : document.find("game/board/memory(type=ROM)")) { string name = {node["content"].string().downcase(), ".rom"}; u32 size = node["size"].natural(); if(view.size() < size) break; //missing firmware pak->append(name, {view.data(), size}); view += size; } if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); if(auto fp = pak->read("save.ram")) { fp->setAttribute("mode", node["mode"].string()); } } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::load(node, ".eeprom"); if(auto fp = pak->read("save.eeprom")) { fp->setAttribute("mode", node["mode"].string()); fp->setAttribute("rsda", node["rsda"].natural()); fp->setAttribute("wsda", node["wsda"].natural()); fp->setAttribute("wscl", node["wscl"].natural()); } } if(auto node = document["game/board(peripheral=J-Cart)"]) { pak->setAttribute("jcart", true); } return true; } auto MegaDrive::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::save(node, ".eeprom"); } return true; } auto MegaDrive::analyze(vector& rom) -> string { if(rom.size() < 0x800) return {}; ram = {}; eeprom = {}; peripherals = {}; auto hash = Hash::SHA256(rom).digest(); analyzeStorage(rom, hash); analyzePeripherals(rom, hash); analyzeCopyProtection(rom, hash); vector devices; string device = slice((const char*)&rom[0x190], 0, 16).trimRight(" "); for(auto& id : device) { if(id == '0'); //Master System controller if(id == '4'); //multitap if(id == '6'); //6-button controller if(id == 'A'); //analog joystick if(id == 'B'); //trackball if(id == 'C') devices.append("Mega CD"); if(id == 'D'); //download? if(id == 'F'); //floppy drive if(id == 'G'); //light gun if(id == 'J'); //3-button controller if(id == 'K'); //keyboard if(id == 'L'); //Activator if(id == 'M'); //mouse if(id == 'P'); //printer if(id == 'R'); //RS-232 modem if(id == 'T'); //tablet if(id == 'V'); //paddle } vector regions; string region = slice((const char*)&rom[0x01f0], 0, 16).trimRight(" "); if(!regions) { if(region == "JAPAN" ) regions.append("NTSC-J"); if(region == "EUROPE") regions.append("PAL"); } if(!regions) { if(region.find("J")) regions.append("NTSC-J"); if(region.find("U")) regions.append("NTSC-U"); if(region.find("E")) regions.append("PAL"); } if(!regions && region.size() == 1) { maybe bits; u8 field = region[0]; if(field >= '0' && field <= '9') bits = field - '0'; if(field >= 'A' && field <= 'F') bits = field - 'A' + 10; if(bits && *bits & 1) regions.append("NTSC-J"); //domestic 60hz if(bits && *bits & 2); //domestic 50hz if(bits && *bits & 4) regions.append("NTSC-U"); //overseas 60hz if(bits && *bits & 8) regions.append("PAL"); //overseas 50hz } if(!regions) { regions.append("NTSC-J", "NTSC-U", "PAL"); } string domesticName; domesticName.resize(48); memory::copy(domesticName.get(), &rom[0x0120], domesticName.size()); for(auto& c : domesticName) if(c < 0x20 || c > 0x7e) c = ' '; while(domesticName.find(" ")) domesticName.replace(" ", " "); domesticName.strip(); string internationalName; internationalName.resize(48); memory::copy(internationalName.get(), &rom[0x0150], internationalName.size()); for(auto& c : internationalName) if(c < 0x20 || c > 0x7e) c = ' '; while(internationalName.find(" ")) internationalName.replace(" ", " "); internationalName.strip(); string serialNumber; serialNumber.resize(14); memory::copy(serialNumber.get(), &rom[0x180], serialNumber.size()); for(auto& c : serialNumber) if(c < 0x20 || c > 0x7e) c = ' '; while(serialNumber.find(" ")) serialNumber.replace(" ", " "); serialNumber.strip(); string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" label: ", domesticName, "\n"}; s +={" label: ", internationalName, "\n"}; s +={" serial: ", serialNumber, "\n"}; s +={" region: ", regions.merge(", "), "\n"}; if(devices) s +={" device: ", devices.merge(", "), "\n"}; s += " board\n"; if(domesticName == "Game Genie") { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; s += " slot\n"; s += " type: Mega Drive\n"; } else if(internationalName == "Virtua Racing") { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x800\n"; s += " content: SVP\n"; } else { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; } if(eeprom) { s += " memory\n"; s += " type: EEPROM\n"; s +={" size: 0x", hex(eeprom.size), "\n"}; s += " content: Save\n"; s +={" mode: ", eeprom.mode, "\n"}; s +={" rsda: ", eeprom.rsda, "\n"}; s +={" wsda: ", eeprom.wsda, "\n"}; s +={" wscl: ", eeprom.wscl, "\n"}; } else if(ram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(ram.size), "\n"}; s += " content: Save\n"; s +={" mode: ", ram.mode, "\n"}; } if(peripherals.jcart) { s += " peripheral: J-Cart"; } return s; } auto MegaDrive::analyzeStorage(vector& rom, string hash) -> void { //SRAM //==== if(rom[0x01b0] == 'R' && rom[0x01b1] == 'A') { u32 ramFrom = 0; ramFrom |= rom[0x01b4] << 24; ramFrom |= rom[0x01b5] << 16; ramFrom |= rom[0x01b6] << 8; ramFrom |= rom[0x01b7] << 0; u32 ramTo = 0; ramTo |= rom[0x01b8] << 24; ramTo |= rom[0x01b9] << 16; ramTo |= rom[0x01ba] << 8; ramTo |= rom[0x01bb] << 0; if(!(ramFrom & 1) && !(ramTo & 1)) ram.mode = "upper"; if( (ramFrom & 1) && (ramTo & 1)) ram.mode = "lower"; if(!(ramFrom & 1) && (ramTo & 1)) ram.mode = "word"; if(ram.mode == "upper") ram.size = (ramTo - ramFrom + 2) >> 1; if(ram.mode == "lower") ram.size = (ramTo - ramFrom + 2) >> 1; if(ram.mode == "word" ) ram.size = (ramTo - ramFrom + 1); } //Buck Rogers: Countdown to Doomsday (USA, Europe) if(hash == "997cbd682bc7c0636302f07219d9152244c8ae06028fd7d91463d35756630ce5") { ram.mode = "lower"; ram.size = 8192; } //Hardball III (USA) if(hash == "bba8186e38d0d0938a439bda4fc2325c1b2c9760a643717fa4f372ebf9058fc2") { ram.mode = "lower"; ram.size = 32768; } //Madden NFL '98 (USA) if(hash == "27bdbb05279c52624f77e361e8a2bfb41623f4a63260104d3a89f44c8276adb2") { ram.mode = "lower"; ram.size = 16384; } //Might and Magic: Gates to Another World (USA, Europe) if(hash == "d86b6d7381ef67ecb5391eddb6857bf9d15b1e402da6bfc42cb003186599cbff") { ram.mode = "lower"; ram.size = 32768; } //Might and Magic III: Isles of Terra (USA) if(hash == "ac08551ecd4c037211fca98359efcfe7c0b048880e82a474d5c5fcd157e33592") { ram.mode = "lower"; ram.size = 32768; } //Super Hydlide (Japan) if(hash == "30749097096807abf67cd1f7b2392f5789f5149ee33661e6d13113396f06a121") { ram.mode = "lower"; ram.size = 8192; } //M28C16 //====== //Barkley Shut Up and Jam 2 (USA) if(hash == "637b400fe79830368feb52c3d21fd5badeddfe6cea08b7e07fa8f6d34822e5b8") { ram.mode = "lower"; ram.size = 2_KiB; } //Barkley Shut Up and Jam 2 (USA) (Beta) if(hash == "3b94a16d93f8d6656a0d4f5e3370dffe510e3d985e20c26b71873beb5403dfd0") { ram.mode = "lower"; ram.size = 2_KiB; } //Unnecessary Roughness '95 if(hash == "7d99fe9dd35dc5c9a124cefe60204f3c0cc74e81269c57e635e1029dd68274f7") { ram.mode = "lower"; ram.size = 2_KiB; } //X24C01 //====== //Bill Walsh College Football (USA, Europe) if(hash == "b90e9d7ecd74980c422ed72575a36d4d378302136faafbc365474e5d037b30fa") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 7; eeprom.wsda = 7; eeprom.wscl = 6; } //Evander Holyfield's 'Real Deal' Boxing (World) if(hash == "b13f1e31bf6ba739e4cffd98374263b3421b3a61c4873e30dbc866198736e880") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Game Toshokan (Japan) (1.1) if(hash == "81a30f887132792896796d0aebce628d7c092f3b2642b83bf2fc78f7c940ce34") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Greatest Heavyweights (Japan) if(hash == "c2daef4bb84f6d4e52caf9a28d9f2561642d3b7e749dc62f12a2587ee77d1222") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Greatest Heavyweights (USA) if(hash == "2007029b0fb227feaa7ef2de7e189270e52c81bc291241a4b5130c78993bc7b9") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Greatest Heavyweights (Europe) if(hash == "18920dea1147e1cc0fbafc0ee15524627c47f4211eebf14d4eff36d0b4d7e3f8") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Honoo no Toukyuuji: Dodge Danpei (Japan) if(hash == "0d476b9f1c7245d408a2c1a6d22bc0f37e7fe3be9850b7d9c9fac5b18f616511") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //John Madden Football '93 (USA, Europe) if(hash == "8958d7d382aa99d91122564397a5aa438c26f4bab2c20626756f7802b2467624") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 7; eeprom.wsda = 7; eeprom.wscl = 6; } //John Madden Football '93: Championship Edition (USA) if(hash == "cfb45fad6dada893ae2ac93eb5bbd36d2de6c5973430f4018cdcb1a53fdfdb12") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 7; eeprom.wsda = 7; eeprom.wscl = 6; } //Mega Man: The Wily Wars (Europe) if(hash == "98f36274e4d73feefaba0e812024a6cecda2d864a2cbed7363b9d357f2e6a582") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //NHLPA Hockey '93 (USA, Europe) (1.0) if(hash == "524e7e61c6096e920ca263a4ed208c002a4ef6cfc17bfda60bf9ecb63c975951") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 7; eeprom.wsda = 7; eeprom.wscl = 6; } //NHLPA Hockey '93 (USA, Europe) (1.1) if(hash == "69a05a0f73bc6b3f5b5c7aff53bb0a1db8fab4af8eee0c84d92e503214a156a1") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 7; eeprom.wsda = 7; eeprom.wscl = 6; } //Ninja Burai Densetsu (Japan) if(hash == "212c70be20c8a29f11c5392a06207e43c2bff07e716a4d3cbf2d046f684a3cef") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Rings of Power (USA, Europe) if(hash == "36303fc447c433ebc69c3d4df86c783c86b383e0acead1c19595f13269e248f5") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 7; eeprom.wsda = 7; eeprom.wscl = 6; } //Rockman: Mega World (Japan) (1.1) if(hash == "390dcd13bbde5e5aab352c456c3ab7d40df60edaae65687cda4598cb1387a3d6") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Sports Talk Baseball (USA) if(hash == "553eb97741c52e2c3ce668960c1f70231514f7fa3532f7cadcf370bb28ff1efe") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //Wonder Boy in Monster World (USA, Europe) if(hash == "6b2ac36f624f914ad26e32baa87d1253aea9dcfc13d2a5842ecdd2bd4a7a43b9") { eeprom.mode = "X24C01"; eeprom.size = 128; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 1; } //X24C02 //====== //NBA Jam (Japan) if(hash == "5aa7e5ccb1931c688f4f0cadea5d4b41440c6c4bbaad83b6bab547ceede31c1d") { eeprom.mode = "X24C02"; eeprom.size = 256; eeprom.rsda = 1; eeprom.wsda = 0; eeprom.wscl = 1; } //NBA Jam (USA, Europe) (1.0) if(hash == "9ee77c144505a10940976bb48e32600c83d5910c737612868ff6088faf3eb7f4") { eeprom.mode = "X24C02"; eeprom.size = 256; eeprom.rsda = 1; eeprom.wsda = 0; eeprom.wscl = 1; } //NBA Jam (USA, Europe) (1.1) if(hash == "d90d4ca8d00b4dade6d21650da2264fa64016daa779215ac06adfc04da31d610") { eeprom.mode = "X24C02"; eeprom.size = 256; eeprom.rsda = 1; eeprom.wsda = 0; eeprom.wscl = 1; } //M24C02 //====== //NFL Quarterback Club (World) if(hash == "a24174cdbe188efabda887f4c7ad492d0cb36b74265a90b2af8c2a5b480f4e7f") { eeprom.mode = "M24C02"; eeprom.size = 256; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } //M24C04 //====== //Blockbuster World Video Game Championship II (USA) if(hash == "8bdd2fa68e70f727f6c86f8266ec703457e09c2940cbd8f82c3760e2177b88fe") { eeprom.mode = "M24C04"; eeprom.size = 512; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } //NBA Jam: Tournament Edition (World) if(hash == "5b735b443102f771bc7db49dcf34de640c10d212f5cb4af1251d956751f21072") { eeprom.mode = "M24C04"; eeprom.size = 512; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } //M24C08 //====== //Brian Lara Cricket (Europe) (1.0) if(hash == "d52223c45d0c29a00003a9782227b775b66640dbfc92bdb9346565c4f97b8cad") { eeprom.mode = "M24C08"; eeprom.size = 1024; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //Brian Lara Cricket (Europe) (1.1) if(hash == "1b28d7f1a8eb4c43afa06de8ea98290368b6ec00ec0c1c16de27ce33d892a051") { eeprom.mode = "M24C08"; eeprom.size = 1024; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //Micro Machines: Military (Europe) if(hash == "43e68f99620bb3dd0ff3b28d232ae43c5b6489716c4cde09725ab4b71704937e") { eeprom.mode = "M24C08"; eeprom.size = 1024; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //M24C16 //====== //Micro Machines: Turbo Tournament '96 (Europe) (1.0) if(hash == "ec3b97adf166b2e4e9ef402ac79ce9d458a932996b7fd259cd55db81adb496a6") { eeprom.mode = "M24C16"; eeprom.size = 2048; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //Micro Machines: Turbo Tournament '96 (Europe) (1.1) if(hash == "77ff023aa9f88aeb1605d3060b1331b816752b12b64ff2fe95d4a9f3c5dff946") { eeprom.mode = "M24C16"; eeprom.size = 2048; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //Micro Machines 2: Turbo Tournament (Europe) (1.0) if(hash == "57fa3662f589929d180648090104f8c802894602a6f660755121cb44918f382c") { eeprom.mode = "M24C16"; eeprom.size = 2048; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //Micro Machines 2: Turbo Tournament (Europe) (1.1) if(hash == "9209241472f0e78f23405bb265c7c108c25413d9a01ec1455f4e2d17d80c188c") { eeprom.mode = "M24C16"; eeprom.size = 2048; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //NFL Quarterback Club '96 (USA, Europe) if(hash == "162edaaaf77a3ccdb693c46cf63fdd273eab31ac6b64bc2f450b0c09db9ceef7") { eeprom.mode = "M24C16"; eeprom.size = 2048; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } //M24C65 //====== //Brian Lara Cricket '96 (Europe) (1.0) if(hash == "2de062b59934a4dc7a4bbc0a012b86a7674597be7ef04f8cb78d088cee8a9eee") { eeprom.mode = "M24C65"; eeprom.size = 8192; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //Brian Lara Cricket '96 (Europe) (1.1) if(hash == "1d36e581171c29cae09457954589916d9e0cfeee193a049f358be428fc7c6421") { eeprom.mode = "M24C65"; eeprom.size = 8192; eeprom.rsda = 7; eeprom.wsda = 0; eeprom.wscl = 1; } //College Slam (USA) if(hash == "52cc1c3e7abed5bb3887fe5a5af96a763a8072faad19a1042a61a2567026d705") { eeprom.mode = "M24C65"; eeprom.size = 8192; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } //Frank Thomas' Big Hurt Baseball (USA, Europe) if(hash == "8aa5b0aa8f550a42aa0dfe5c200dcf4bc344e9b114a0c056acced3374441ece0") { eeprom.mode = "M24C65"; eeprom.size = 8192; eeprom.rsda = 0; eeprom.wsda = 0; eeprom.wscl = 8; } } auto MegaDrive::analyzePeripherals(vector& rom, string hash) -> void { //J-Cart //====== //Micro Machines: Military (Europe) if(hash == "43e68f99620bb3dd0ff3b28d232ae43c5b6489716c4cde09725ab4b71704937e") { peripherals.jcart = 1; } //Micro Machines: Turbo Tournament '96 (Europe) (1.0) if(hash == "ec3b97adf166b2e4e9ef402ac79ce9d458a932996b7fd259cd55db81adb496a6") { peripherals.jcart = 1; } //Micro Machines: Turbo Tournament '96 (Europe) (1.1) if(hash == "77ff023aa9f88aeb1605d3060b1331b816752b12b64ff2fe95d4a9f3c5dff946") { peripherals.jcart = 1; } //Micro Machines 2: Turbo Tournament (Europe) (1.0) if(hash == "57fa3662f589929d180648090104f8c802894602a6f660755121cb44918f382c") { peripherals.jcart = 1; } //Micro Machines 2: Turbo Tournament (Europe) (1.1) if(hash == "9209241472f0e78f23405bb265c7c108c25413d9a01ec1455f4e2d17d80c188c") { peripherals.jcart = 1; } //Pete Sampras Tennis (USA, Europe) (1.0) if(hash == "6e21848dd36d9a5843c73875f0a3eb59a23981d3d31a17c824664dc963ed7fa8") { peripherals.jcart = 1; } //Pete Sampras Tennis (USA, Europe) (1.1) if(hash == "f7aeb92a8f21b5dfd97ecfd907b8db49f0601dca1d32d78ee8f01e0b5c7d6fc7") { peripherals.jcart = 1; } //Pete Sampras Tennis (USA, Europe) (1.2) if(hash == "1a9e3daa0c6963754ab57ddd791b054989c89d89010f0d3ab846aec5842879a1") { peripherals.jcart = 1; } //Super Skidmarks (Europe) (Beta) if(hash == "b10ca5fb33eec060b5b21d4c1960a38f2fd1f0048ae88018d7c19fc340b26c31") { peripherals.jcart = 1; } //Super Skidmarks (Europe) (1.0) if(hash == "78705e4d3c91c8dc078fb61a08bf37c9c8e2f7ee9e9b13ddfe8279e54e6e9c6b") { peripherals.jcart = 1; } } auto MegaDrive::analyzeCopyProtection(vector& rom, string hash) -> void { //Super Bubble Bobble (Taiwan) if(hash == "e0a310c89961d781432715f71ce92d2d559fc272a7b46ea7b77383365b27ce21") { rom[0x0123e4] = 0x60; rom[0x0123e5] = 0x2a; } } ares-126/mia/medium/msx.cpp000066400000000000000000000057031415063341600156670ustar00rootroot00000000000000struct MSX : Cartridge { auto name() -> string override { return "MSX"; } auto extensions() -> vector override { return {"msx"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto MSX::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->sha256 = Hash::SHA256(rom).digest(); this->location = location; this->manifest = Medium::manifestDatabase(sha256); if(!manifest) manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("board", document["game/board"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); return true; } auto MSX::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto MSX::analyze(vector& rom) -> string { string board = "Linear"; // If the rom is too big to be linear, attempt to guess the mapper // based on the number of times specific banking instructions occur // in the binary if(rom.size() > 0x10000) { const auto ASC16 = 0; const auto ASC8 = 1; const auto KONAMI = 2; const auto KONAMI_SCC = 3; int bankingCount[4] = {0,0,0,0}; for(auto i : range(rom.size() - 3)) { if (rom[i] == 0x32) { // ld(nn),a u16 value = rom[i + 1] + (rom[i + 2] << 8); switch (value) { case 0x5000: case 0x9000: case 0xb000: bankingCount[KONAMI_SCC]++; break; case 0x4000: case 0x8000: case 0xa000: bankingCount[KONAMI]++; break; case 0x6800: case 0x7800: bankingCount[ASC8]++; break; case 0x6000: bankingCount[KONAMI]++; bankingCount[ASC8]++; bankingCount[ASC16]++; break; case 0x7000: bankingCount[KONAMI_SCC]++; bankingCount[ASC8]++; bankingCount[ASC16]++; break; case 0x77ff: bankingCount[ASC16]++; break; } } } auto mapperNum = 0, max = 0; for(auto i : range(4)) { if (bankingCount[i] > max) {max = bankingCount[i]; mapperNum = i;} } switch(mapperNum) { case 0: board = "ASC16"; break; case 1: board = "ASC8"; break; case 2: board = "Konami"; break; case 3: board = "KonamiSCC"; break; } } string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " region: NTSC\n"; //database required to detect region s +={" board: ", board, "\n"}; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; return s; } ares-126/mia/medium/msx2.cpp000066400000000000000000000002171415063341600157440ustar00rootroot00000000000000struct MSX2 : MSX { auto name() -> string override { return "MSX2"; } auto extensions() -> vector override { return {"msx2"}; } }; ares-126/mia/medium/neo-geo-pocket-color.cpp000066400000000000000000000002741415063341600210060ustar00rootroot00000000000000struct NeoGeoPocketColor : NeoGeoPocket { auto name() -> string override { return "Neo Geo Pocket Color"; } auto extensions() -> vector override { return {"ngpc", "ngc"}; } }; ares-126/mia/medium/neo-geo-pocket.cpp000066400000000000000000000055151415063341600176750ustar00rootroot00000000000000struct NeoGeoPocket : Cartridge { auto name() -> string override { return "Neo Geo Pocket"; } auto extensions() -> vector override { return {"ngp"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; auto label(vector& data) -> string; }; auto NeoGeoPocket::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.flash"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->append("manifest.bml", manifest); pak->append("program.flash", rom); Pak::load("program.flash", ".sav"); return true; } auto NeoGeoPocket::save(string location) -> bool { auto document = BML::unserialize(manifest); Pak::save("program.flash", ".sav"); return true; } auto NeoGeoPocket::analyze(vector& rom) -> string { string hash = Hash::SHA256(rom).digest(); //expand ROMs that are smaller than valid flash chip sizes (homebrew games) if(rom.size() <= 0x080000) rom.resize(0x080000, 0xff); // 4mbit else if(rom.size() <= 0x100000) rom.resize(0x100000, 0xff); // 8mbit else if(rom.size() <= 0x200000) rom.resize(0x200000, 0xff); //16mbit else if(rom.size() <= 0x280000) rom.resize(0x280000, 0xff); //16mbit + 4mbit else if(rom.size() <= 0x300000) rom.resize(0x300000, 0xff); //16mbit + 8mbit else if(rom.size() <= 0x400000) rom.resize(0x400000, 0xff); //16mbit + 16mbit //Prize Game: PP-AA01 Pusher Program (Japan) if(hash == "c5faa5cd1d00566493dd098067aaf7cadf6a506e6d4e8f277bd06b205f82ff4a") { //underdump: ROM is 4mbit, but should be 16mbit (this matters for flash ROM emulation) rom.resize(0x200000, 0xff); } //Delta Warp (Japan) if(hash == "4a6412482dc5eb2669913ce002edfa08d4672e4afe109496bed5f432a8ceff82") { //underdump: ROM is 4mbit, but should be 8mbit (this matters for flash ROM emulation) rom.resize(0x100000, 0xff); } string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" label: ", label(rom), "\n"}; s += " board\n"; s += " memory\n"; s += " type: Flash\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; return s; } auto NeoGeoPocket::label(vector& rom) -> string { string label; label.size(12); for(u32 index : range(12)) { char letter = rom[0x24 + index]; if(letter >= 0x20 && letter <= 0x7e) label.get()[index] = letter; } return label.strip(); } ares-126/mia/medium/neo-geo.cpp000066400000000000000000000124601415063341600164070ustar00rootroot00000000000000struct NeoGeo : Cartridge { auto name() -> string override { return "Neo Geo"; } auto extensions() -> vector override { return {"ng"}; } auto read(string location, string match) -> vector; auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& p, vector& m, vector& c, vector& s, vector& v) -> string; auto endianSwap(vector&) -> void; }; auto NeoGeo::read(string location, string match) -> vector { bool characterROM = match == "*.c*"; bool programROM = match == "*.p*"; vector output; //parse Neo Geo ROM images in MAME ZIP file format: if(location.iendsWith(".zip")) { Decode::ZIP archive; if(archive.open(location)) { //find all files that match the requested pattern and then sort the results vector filenames; for(auto& file : archive.file) { if(file.name.imatch(match)) filenames.append(file.name); } filenames.sort(); //interleave charater ROM bitplanes if(characterROM) { vector interleaved; for(u32 index = 0; index < filenames.size(); index += 2) interleaved.append(filenames[index]); for(u32 index = 1; index < filenames.size(); index += 2) interleaved.append(filenames[index]); filenames = interleaved; } //build the concatenated ROM image bool first = true; for(auto& filename : filenames) { for(auto& file : archive.file) { if(file.name != filename) continue; auto input = archive.extract(file); output.resize(output.size() + input.size()); if(first && programROM) { first = false; if(input.size() > 1_MiB) { memory::copy(output.data() + output.size() - input.size(), input.data() + 1_MiB, input.size() - 1_MiB); memory::copy(output.data() + output.size() - (input.size() - 1_MiB), input.data(), 1_MiB); continue; } while(output.size() < 1_MiB) { memory::copy(output.data() + output.size() - input.size(), input.data(), input.size()); output.resize(output.size() + min(1_MiB - output.size(), input.size())); } } memory::copy(output.data() + output.size() - input.size(), input.data(), input.size()); } } if(programROM) endianSwap(output); } } return output; } auto NeoGeo::load(string location) -> bool { vector programROM; //P ROM (68K CPU program) vector musicROM; //M ROM (Z80 APU program) vector characterROM; //C ROM (sprite and background character graphics) vector staticROM; //S ROM (fix layer static graphics) vector voiceROM; //V ROM (ADPCM voice samples) if(directory::exists(location)) { programROM = file::read({location, "program.rom"}); musicROM = file::read({location, "music.rom"}); characterROM = file::read({location, "character.rom"}); staticROM = file::read({location, "static.rom"}); voiceROM = file::read({location, "voice.rom"}); } else if(file::exists(location)) { programROM = NeoGeo::read(location, "*.p*"); musicROM = NeoGeo::read(location, "*.m*"); characterROM = NeoGeo::read(location, "*.c*"); staticROM = NeoGeo::read(location, "*.s*"); voiceROM = NeoGeo::read(location, "*.v*"); } if(!programROM ) return false; if(!musicROM ) return false; if(!characterROM) return false; if(!staticROM ) return false; if(!voiceROM ) return false; Hash::SHA256 hash; hash.input(programROM); hash.input(musicROM); hash.input(characterROM); hash.input(staticROM); hash.input(voiceROM); auto sha256 = hash.digest(); this->location = location; this->manifest = analyze(programROM, musicROM, characterROM, staticROM, voiceROM); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("sha256", sha256); pak->setAttribute("title", document["game/title"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", programROM); pak->append("music.rom", musicROM); pak->append("character.rom", characterROM); pak->append("static.rom", staticROM); pak->append("voice.rom", voiceROM); return true; } auto NeoGeo::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto NeoGeo::analyze(vector& p, vector& m, vector& c, vector& s, vector& v) -> string { string manifest; manifest += "game\n"; manifest +={" name: ", Medium::name(location), "\n"}; manifest +={" title: ", Medium::name(location), "\n"}; manifest += " board\n"; manifest +={" memory type=ROM size=0x", hex(p.size(), 8L), " content=Program\n"}; manifest +={" memory type=ROM size=0x", hex(m.size(), 8L), " content=Music\n"}; manifest +={" memory type=ROM size=0x", hex(c.size(), 8L), " content=Character\n"}; manifest +={" memory type=ROM size=0x", hex(s.size(), 8L), " content=Static\n"}; manifest +={" memory type=ROM size=0x", hex(v.size(), 8L), " content=Voice\n"}; return manifest; } auto NeoGeo::endianSwap(vector& memory) -> void { for(u32 address = 0; address < memory.size(); address += 2) { swap(memory[address + 0], memory[address + 1]); } } ares-126/mia/medium/nintendo-64.cpp000066400000000000000000001337601415063341600171320ustar00rootroot00000000000000struct Nintendo64 : Cartridge { auto name() -> string override { return "Nintendo 64"; } auto extensions() -> vector override { return {"n64", "v64", "z64"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto Nintendo64::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("id", document["game/id"].string()); pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("mempak", (bool)document["game/mempak"]); pak->setAttribute("rumble", (bool)document["game/rumble"]); pak->setAttribute("cic", document["game/board/cic"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::load(node, ".eeprom"); } if(auto node = document["game/board/memory(type=Flash,content=Save)"]) { Medium::load(node, ".flash"); } return true; } auto Nintendo64::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::save(node, ".eeprom"); } if(auto node = document["game/board/memory(type=Flash,content=Save)"]) { Medium::save(node, ".flash"); } return true; } auto Nintendo64::analyze(vector& data) -> string { if(data.size() < 0x1000) { //too small return {}; } else if(data[0] == 0x80 && data[1] == 0x37 && data[2] == 0x12 && data[3] == 0x40) { //big endian } else if(data[0] == 0x37 && data[1] == 0x80 && data[2] == 0x40 && data[3] == 0x12) { //byte-swapped for(u32 index = 0; index < data.size(); index += 2) { u8 d0 = data[index + 0]; u8 d1 = data[index + 1]; data[index + 0] = d1; data[index + 1] = d0; } } else if(data[0] == 0x40 && data[1] == 0x12 && data[2] == 0x37 && data[3] == 0x80) { //little endian for(u32 index = 0; index < data.size(); index += 4) { u8 d0 = data[index + 0]; u8 d1 = data[index + 1]; u8 d2 = data[index + 2]; u8 d3 = data[index + 3]; data[index + 0] = d3; data[index + 1] = d2; data[index + 2] = d1; data[index + 3] = d0; } } else { //unrecognized return {}; } string region = "NTSC"; switch(data[0x3e]) { case 'A': region = "NTSC"; break; //North America + Japan case 'D': region = "PAL"; break; //Germany case 'E': region = "NTSC"; break; //North America case 'F': region = "PAL"; break; //France case 'G': region = "NTSC"; break; //Gateway 64 (NTSC) case 'I': region = "PAL"; break; //Italy case 'J': region = "NTSC"; break; //Japan case 'L': region = "PAL"; break; //Gateway 64 (PAL) case 'P': region = "PAL"; break; //Europe case 'S': region = "PAL"; break; //Spain case 'U': region = "PAL"; break; //Australia case 'X': region = "PAL"; break; //Europe case 'Y': region = "PAL"; break; //Europe } string id; id.append((char)data[0x3b]); id.append((char)data[0x3c]); id.append((char)data[0x3d]); char region_code = data[0x3e]; u8 revision = data[0x3f]; //detect the CIC used for a given gamepak based on checksumming its bootcode //note: NTSC 6101 = PAL 7102 and NTSC 6102 = PAL 7101 (IDs are swapped) //note: NTSC 6104 / PAL 7104 was never officially used bool ntsc = region == "NTSC"; string cic = ntsc ? "CIC-NUS-6102" : "CIC-NUS-7101"; //fallback; most common u32 crc32 = Hash::CRC32({&data[0x40], 0x9c0}).value(); if(crc32 == 0x1deb51a9) cic = ntsc ? "CIC-NUS-6101" : "CIC-NUS-7102"; if(crc32 == 0xc08e5bd6) cic = ntsc ? "CIC-NUS-6102" : "CIC-NUS-7101"; if(crc32 == 0x03b8376a) cic = ntsc ? "CIC-NUS-6103" : "CIC-NUS-7103"; if(crc32 == 0xcf7f41dc) cic = ntsc ? "CIC-NUS-6105" : "CIC-NUS-7105"; if(crc32 == 0xd1059c6a) cic = ntsc ? "CIC-NUS-6106" : "CIC-NUS-7106"; //detect the save type based on the game ID u32 eeprom = 0; //512_B or 2_KiB u32 sram = 0; //32_KiB u32 flash = 0; //128_KiB //supported controller peripheral support bool mempak = false; //Controller Memory Pak bool rumble = false; //Rumble Pak //512B EEPROM if(id == "NTW") {eeprom = 512; mempak = true;} //64 de Hakken!! Tamagotchi if(id == "NHF") {eeprom = 512;} //64 Hanafuda: Tenshi no Yakusoku if(id == "NOS") {eeprom = 512; mempak = true; rumble = true;} //64 Oozumou if(id == "NTC") {eeprom = 512; rumble = true;} //64 Trump Collection if(id == "NER") {eeprom = 512; rumble = true;} //AeroFighters Assault if(id == "NAG") {eeprom = 512; mempak = true;} //AeroGauge if(id == "NAB") {eeprom = 512; mempak = true; rumble = true;} //Air Boarder 64 if(id == "NS3") {eeprom = 512; mempak = true;} //AI Shougi 3 if(id == "NTN") {eeprom = 512;} //All Star Tennis '99 if(id == "NBN") {eeprom = 512; mempak = true;} //Bakuretsu Muteki Bangaioh if(id == "NBK") {eeprom = 512; rumble = true;} //Banjo-Kazooie if(id == "NFH") {eeprom = 512; rumble = true;} //Bass Hunter 64 if(id == "NMU") {eeprom = 512; mempak = true; rumble = true;} //Big Mountain 2000 if(id == "NBC") {eeprom = 512; mempak = true;} //Blast Corps if(id == "NBH") {eeprom = 512; rumble = true;} //Body Harvest if(id == "NHA") {eeprom = 512; mempak = true;} //Bomberman 64: Arcade Edition (J) if(id == "NBM") {eeprom = 512; mempak = true;} //Bomberman 64 if(id == "NBV") {eeprom = 512; mempak = true; rumble = true;} //Bomberman 64: The Second Attack! if(id == "NBD") {eeprom = 512; rumble = true;} //Bomberman Hero if(id == "NCT") {eeprom = 512; rumble = true;} //Chameleon Twist if(id == "NCH") {eeprom = 512; rumble = true;} //Chopper Attack if(id == "NCG") {eeprom = 512; mempak = true; rumble = true;} //Choro Q 64 II - Hacha Mecha Grand Prix Race (J) if(id == "NP2") {eeprom = 512; mempak = true; rumble = true;} //Chou Kuukan Night Pro Yakyuu King 2 (J) if(id == "NXO") {eeprom = 512; rumble = true;} //Cruis'n Exotica if(id == "NCU") {eeprom = 512; mempak = true;} //Cruis'n USA if(id == "NCX") {eeprom = 512;} //Custom Robo if(id == "NDY") {eeprom = 512; mempak = true; rumble = true;} //Diddy Kong Racing if(id == "NDQ") {eeprom = 512; mempak = true;} //Disney's Donald Duck - Goin' Quackers [Quack Attack (E)] if(id == "NDR") {eeprom = 512;} //Doraemon: Nobita to 3tsu no Seireiseki if(id == "NN6") {eeprom = 512;} //Dr. Mario 64 if(id == "NDU") {eeprom = 512; rumble = true;} //Duck Dodgers starring Daffy Duck if(id == "NJM") {eeprom = 512;} //Earthworm Jim 3D if(id == "NFW") {eeprom = 512; rumble = true;} //F-1 World Grand Prix if(id == "NF2") {eeprom = 512; rumble = true;} //F-1 World Grand Prix II if(id == "NKA") {eeprom = 512; mempak = true; rumble = true;} //Fighters Destiny if(id == "NFG") {eeprom = 512; mempak = true; rumble = true;} //Fighter Destiny 2 if(id == "NGL") {eeprom = 512; mempak = true; rumble = true;} //Getter Love!! if(id == "NGV") {eeprom = 512;} //Glover if(id == "NGE") {eeprom = 512; rumble = true;} //GoldenEye 007 if(id == "NHP") {eeprom = 512;} //Heiwa Pachinko World 64 if(id == "NPG") {eeprom = 512; rumble = true;} //Hey You, Pikachu! if(id == "NIJ") {eeprom = 512; rumble = true;} //Indiana Jones and the Infernal Machine if(id == "NIC") {eeprom = 512; rumble = true;} //Indy Racing 2000 if(id == "NFY") {eeprom = 512; mempak = true; rumble = true;} //Kakutou Denshou: F-Cup Maniax if(id == "NKI") {eeprom = 512; mempak = true;} //Killer Instinct Gold if(id == "NLL") {eeprom = 512; rumble = true;} //Last Legion UX if(id == "NLR") {eeprom = 512; rumble = true;} //Lode Runner 3-D if(id == "NKT") {eeprom = 512; mempak = true;} //Mario Kart 64 if(id == "CLB") {eeprom = 512; rumble = true;} //Mario Party (NTSC) if(id == "NLB") {eeprom = 512; rumble = true;} //Mario Party (PAL) if(id == "NMW") {eeprom = 512; rumble = true;} //Mario Party 2 if(id == "NML") {eeprom = 512; rumble = true;} //Mickey's Speedway USA if(id == "NTM") {eeprom = 512;} //Mischief Makers [Yuke Yuke!! Trouble Makers (J)] if(id == "NMI") {eeprom = 512; rumble = true;} //Mission: Impossible if(id == "NMG") {eeprom = 512; mempak = true; rumble = true;} //Monaco Grand Prix [Racing Simulation 2 (G)] if(id == "NMO") {eeprom = 512;} //Monopoly if(id == "NMS") {eeprom = 512; mempak = true;} //Morita Shougi 64 if(id == "NMR") {eeprom = 512; mempak = true; rumble = true;} //Multi-Racing Championship if(id == "NCR") {eeprom = 512; mempak = true;} //Penny Racers [Choro Q 64 (J)] if(id == "NEA") {eeprom = 512;} //PGA European Tour if(id == "NPW") {eeprom = 512;} //Pilotwings 64 if(id == "NPM") {eeprom = 512; mempak = true;} //Premier Manager 64 (E) if(id == "NPY") {eeprom = 512; rumble = true;} //Puyo Puyo Sun 64 if(id == "NPT") {eeprom = 512; rumble = true;} //Puyo Puyon Party if(id == "NRA") {eeprom = 512; mempak = true; rumble = true;} //Rally '99 (J) if(id == "NWQ") {eeprom = 512; mempak = true; rumble = true;} //Rally Challenge 2000 if(id == "NSU") {eeprom = 512; rumble = true;} //Rocket: Robot on Wheels if(id == "NSN") {eeprom = 512; mempak = true; rumble = true;} //Snow Speeder (J) if(id == "NK2") {eeprom = 512; rumble = true;} //Snowboard Kids 2 [Chou Snobow Kids (J)] if(id == "NSV") {eeprom = 512; rumble = true;} //Space Station Silicon Valley if(id == "NFX") {eeprom = 512; rumble = true;} //Lylat Wars (E) if(id == "NFP") {eeprom = 512; rumble = true;} //Star Fox 64 (U) if(id == "NS6") {eeprom = 512; rumble = true;} //Star Soldier: Vanishing Earth if(id == "NNA") {eeprom = 512; rumble = true;} //Star Wars Episode I: Battle for Naboo if(id == "NRS") {eeprom = 512; rumble = true;} //Star Wars: Rogue Squadron if(id == "NSW") {eeprom = 512;} //Star Wars: Shadows of the Empire if(id == "NSC") {eeprom = 512;} //Starshot: Space Circus Fever if(id == "NSA") {eeprom = 512; rumble = true;} //Sonic Wings Assault (J) if(id == "NB6") {eeprom = 512; mempak = true;} //Super B-Daman: Battle Phoenix 64 if(id == "NSM") {eeprom = 512;} //Super Mario 64 if(id == "NSS") {eeprom = 512; rumble = true;} //Super Robot Spirits if(id == "NTX") {eeprom = 512; rumble = true;} //Taz Express if(id == "NT6") {eeprom = 512;} //Tetris 64 if(id == "NTP") {eeprom = 512;} //Tetrisphere if(id == "NTJ") {eeprom = 512; rumble = true;} //Tom & Jerry in Fists of Fury if(id == "NRC") {eeprom = 512; rumble = true;} //Top Gear Overdrive if(id == "NTR") {eeprom = 512; mempak = true; rumble = true;} //Top Gear Rally (J + E) if(id == "NTB") {eeprom = 512; rumble = true;} //Transformers: Beast Wars Metals 64 if(id == "NGU") {eeprom = 512; rumble = true;} //Tsumi to Batsu: Hoshi no Keishousha (Sin and Punishment) if(id == "NIR") {eeprom = 512; rumble = true;} //Utchan Nanchan no Hono no Challenger: Denryuu Ira Ira Bou if(id == "NVL") {eeprom = 512; rumble = true;} //V-Rally Edition '99 if(id == "NVY") {eeprom = 512; rumble = true;} //V-Rally Edition '99 (J) if(id == "NWR") {eeprom = 512; mempak = true;} //Wave Race 64: Kawasaki Jet Ski if(id == "NWC") {eeprom = 512; rumble = true;} //Wild Choppers if(id == "NAD") {eeprom = 512;} //Worms Armageddon (U) if(id == "NWU") {eeprom = 512;} //Worms Armageddon (E) if(id == "NYK") {eeprom = 512; rumble = true;} //Yakouchuu II: Satsujin Kouro if(id == "NMZ") {eeprom = 512;} //Zool - Majou Tsukai Densetsu (J) //Special case for Japanese version of Wetrix and Dark Rift if(id == "NDK" && region_code == 'J') {eeprom = 512;} //Dark Rift aka Space Dynamites if(id == "NWT") { if(region_code == 'J') {eeprom = 512;} //Wetrix (J) else {mempak = true;} //Wetrix (U + E) } //2KB EEPROM if(id == "NB7") {eeprom = 2_KiB; rumble = true;} //Banjo-Tooie if(id == "NGT") {eeprom = 2_KiB; mempak = true; rumble = true;} //City-Tour GP: Zen-Nihon GT Senshuken if(id == "NFU") {eeprom = 2_KiB; rumble = true;} //Conker's Bad Fur Day if(id == "NCW") {eeprom = 2_KiB; rumble = true;} //Cruis'n World if(id == "NCZ") {eeprom = 2_KiB; rumble = true;} //Custom Robo V2 if(id == "ND6") {eeprom = 2_KiB; rumble = true;} //Densha de Go! 64 if(id == "NDO") {eeprom = 2_KiB; rumble = true;} //Donkey Kong 64 if(id == "ND2") {eeprom = 2_KiB; rumble = true;} //Doraemon 2: Nobita to Hikari no Shinden if(id == "N3D") {eeprom = 2_KiB; rumble = true;} //Doraemon 3: Nobita no Machi SOS! if(id == "NMX") {eeprom = 2_KiB; mempak = true; rumble = true;} //Excitebike 64 if(id == "NGC") {eeprom = 2_KiB; mempak = true; rumble = true;} //GT 64: Championship Edition if(id == "NIM") {eeprom = 2_KiB;} //Ide Yosuke no Mahjong Juku if(id == "NK4") {eeprom = 2_KiB; rumble = true;} //Kirby 64: The Crystal Shards if(id == "NNB") {eeprom = 2_KiB; mempak = true; rumble = true;} //Kobe Bryant in NBA Courtside if(id == "NMV") {eeprom = 2_KiB; rumble = true;} //Mario Party 3 if(id == "NM8") {eeprom = 2_KiB; rumble = true;} //Mario Tennis if(id == "NEV") {eeprom = 2_KiB; rumble = true;} //Neon Genesis Evangelion if(id == "NPP") {eeprom = 2_KiB; mempak = true;} //Parlor! Pro 64: Pachinko Jikki Simulation Game if(id == "NUB") {eeprom = 2_KiB; mempak = true;} //PD Ultraman Battle Collection 64 if(id == "NPD") {eeprom = 2_KiB; mempak = true; rumble = true;} //Perfect Dark if(id == "NRZ") {eeprom = 2_KiB; rumble = true;} //Ridge Racer 64 if(id == "NR7") {eeprom = 2_KiB;} //Robot Poncots 64: 7tsu no Umi no Caramel if(id == "NEP") {eeprom = 2_KiB; rumble = true;} //Star Wars Episode I: Racer if(id == "NYS") {eeprom = 2_KiB; rumble = true;} //Yoshi's Story //Special cases for Japanese versions of Castlevania if(id == "ND3") { if(region_code == 'J') {eeprom = 2_KiB; rumble = true;} //Akumajou Dracula Mokushiroku (J) else {mempak = true;} //Castlevania } if(id == "ND4") { if(region_code == 'J') {eeprom = 2_KiB; rumble = true;} //Akumajou Dracula Mokushiroku Gaiden: Legend of Cornell (J) else {mempak = true;} //Castlevania - Legacy of Darkness } //32KB SRAM if(id == "NTE") {sram = 32_KiB; rumble = true;} //1080 Snowboarding if(id == "NVB") {sram = 32_KiB; rumble = true;} //Bass Rush - ECOGEAR PowerWorm Championship (J) if(id == "CFZ") {sram = 32_KiB; rumble = true;} //F-Zero X (J) if(id == "NFZ") {sram = 32_KiB; rumble = true;} //F-Zero X (U + E) if(id == "NSI") {sram = 32_KiB; mempak = true;} //Fushigi no Dungeon: Fuurai no Shiren 2 if(id == "NG6") {sram = 32_KiB; rumble = true;} //Ganmare Goemon: Dero Dero Douchuu Obake Tenkomori if(id == "N3H") {sram = 32_KiB; rumble = true;} //Ganbare! Nippon! Olympics 2000 if(id == "NGP") {sram = 32_KiB; mempak = true;} //Goemon: Mononoke Sugoroku if(id == "NYW") {sram = 32_KiB;} //Harvest Moon 64 if(id == "NHY") {sram = 32_KiB; mempak = true; rumble = true;} //Hybrid Heaven (J) if(id == "NIB") {sram = 32_KiB; rumble = true;} //Itoi Shigesato no Bass Tsuri No. 1 Kettei Ban! if(id == "NPS") {sram = 32_KiB; mempak = true; rumble = true;} //Jikkyou J.League 1999: Perfect Striker 2 if(id == "NPA") {sram = 32_KiB; mempak = true;} //Jikkyou Powerful Pro Yakyuu 2000 if(id == "NP4") {sram = 32_KiB; mempak = true;} //Jikkyou Powerful Pro Yakyuu 4 if(id == "NJ5") {sram = 32_KiB; mempak = true;} //Jikkyou Powerful Pro Yakyuu 5 if(id == "NP6") {sram = 32_KiB; mempak = true;} //Jikkyou Powerful Pro Yakyuu 6 if(id == "NPE") {sram = 32_KiB; mempak = true;} //Jikkyou Powerful Pro Yakyuu Basic Ban 2001 if(id == "NJG") {sram = 32_KiB; rumble = true;} //Jinsei Game 64 if(id == "CZL") {sram = 32_KiB; rumble = true;} //Legend of Zelda: Ocarina of Time [Zelda no Densetsu - Toki no Ocarina (J)] if(id == "NZL") {sram = 32_KiB; rumble = true;} //Legend of Zelda: Ocarina of Time (E) if(id == "NKG") {sram = 32_KiB; mempak = true; rumble = true;} //Major League Baseball featuring Ken Griffey Jr. if(id == "NMF") {sram = 32_KiB; rumble = true;} //Mario Golf 64 if(id == "NRI") {sram = 32_KiB; mempak = true;} //New Tetris, The if(id == "NUT") {sram = 32_KiB; mempak = true; rumble = true;} //Nushi Zuri 64 if(id == "NUM") {sram = 32_KiB; rumble = true;} //Nushi Zuri 64: Shiokaze ni Notte if(id == "NOB") {sram = 32_KiB;} //Ogre Battle 64: Person of Lordly Caliber if(id == "CPS") {sram = 32_KiB;} //Pocket Monsters Stadium (J) if(id == "NB5") {sram = 32_KiB; rumble = true;} //Resident Evil 2 (Japan) aka Biohazard 2 if(id == "NRE") {sram = 32_KiB; rumble = true;} //Resident Evil 2 if(id == "NAL") {sram = 32_KiB; rumble = true;} //Super Smash Bros. [Nintendo All-Star! Dairantou Smash Brothers (J)] if(id == "NT3") {sram = 32_KiB; mempak = true;} //Shin Nihon Pro Wrestling - Toukon Road 2 - The Next Generation (J) if(id == "NS4") {sram = 32_KiB; mempak = true;} //Super Robot Taisen 64 if(id == "NA2") {sram = 32_KiB; mempak = true; rumble = true;} //Virtual Pro Wrestling 2 if(id == "NVP") {sram = 32_KiB; mempak = true; rumble = true;} //Virtual Pro Wrestling 64 if(id == "NWL") {sram = 32_KiB; rumble = true;} //Waialae Country Club: True Golf Classics if(id == "NW2") {sram = 32_KiB; rumble = true;} //WCW-nWo Revenge if(id == "NWX") {sram = 32_KiB; mempak = true; rumble = true;} //WWF WrestleMania 2000 //Special case for first Japanese revisions of Kirby 64, overrides earlier entry if(id == "NK4" && region_code == 'J' && revision < 2) { eeprom = 0; sram = 32_KiB; rumble = true; } //96KB SRAM if(id == "CDZ") {sram = 96_KiB; rumble = true;} //Dezaemon 3D //128KB Flash if(id == "NCC") {flash = 128_KiB; rumble = true;} //Command & Conquer if(id == "NDA") {flash = 128_KiB; mempak = true;} //Derby Stallion 64 if(id == "NAF") {flash = 128_KiB; mempak = true;} //Doubutsu no Mori if(id == "NJF") {flash = 128_KiB; rumble = true;} //Jet Force Gemini if(id == "NKJ") {flash = 128_KiB; rumble = true;} //Ken Griffey Jr.'s Slugfest if(id == "NZS") {flash = 128_KiB; rumble = true;} //Legend of Zelda: Majora's Mask [Zelda no Densetsu - Mujura no Kamen (J)] if(id == "NM6") {flash = 128_KiB; rumble = true;} //Mega Man 64 if(id == "NCK") {flash = 128_KiB; rumble = true;} //NBA Courtside 2 featuring Kobe Bryant if(id == "NMQ") {flash = 128_KiB; rumble = true;} //Paper Mario if(id == "NPN") {flash = 128_KiB;} //Pokemon Puzzle League if(id == "NPF") {flash = 128_KiB;} //Pokemon Snap [Pocket Monsters Snap (J)] if(id == "NPO") {flash = 128_KiB;} //Pokemon Stadium if(id == "CP2") {flash = 128_KiB;} //Pocket Monsters Stadium 2 (J) if(id == "NP3") {flash = 128_KiB;} //Pokemon Stadium 2 [Pocket Monsters Stadium - Kin Gin (J)] if(id == "NRH") {flash = 128_KiB; rumble = true;} //Rockman Dash (J) if(id == "NSQ") {flash = 128_KiB; rumble = true;} //StarCraft 64 if(id == "NT9") {flash = 128_KiB;} //Tigger's Honey Hunt if(id == "NW4") {flash = 128_KiB; mempak = true; rumble = true;} //WWF No Mercy //unlicensed if(id == "NDP") {flash = 128_KiB;} //Dinosaur Planet //Mempak if(id == "NO7") {mempak = true; rumble = true;} //The World Is Not Enough if(id == "NAY") {mempak = true;} //Aidyn Chronicles - The First Mage if(id == "NBS") {mempak = true; rumble = true;} //All-Star Baseball '99 if(id == "NBE") {mempak = true; rumble = true;} //All-Star Baseball 2000 if(id == "NAS") {mempak = true; rumble = true;} //All-Star Baseball 2001 if(id == "NAR") {mempak = true; rumble = true;} //Armorines - Project S.W.A.R.M. if(id == "NAC") {mempak = true; rumble = true;} //Army Men - Air Combat if(id == "NAM") {mempak = true; rumble = true;} //Army Men - Sarge's Heroes if(id == "N32") {mempak = true; rumble = true;} //Army Men - Sarge's Heroes 2 if(id == "NAH") {mempak = true; rumble = true;} //Asteroids Hyper 64 if(id == "NLC") {mempak = true; rumble = true;} //Automobili Lamborghini [Super Speed Race 64 (J)] if(id == "NBJ") {mempak = true;} //Bakushou Jinsei 64 - Mezase! Resort Ou if(id == "NB4") {mempak = true; rumble = true;} //Bass Masters 2000 if(id == "NBX") {mempak = true; rumble = true;} //Battletanx if(id == "NBQ") {mempak = true; rumble = true;} //Battletanx - Global Assault if(id == "NZO") {mempak = true; rumble = true;} //Battlezone - Rise of the Black Dogs if(id == "NNS") {mempak = true; rumble = true;} //Beetle Adventure Racing if(id == "NBB") {mempak = true; rumble = true;} //Beetle Adventure Racing (J) if(id == "NBF") {mempak = true; rumble = true;} //Bio F.R.E.A.K.S. if(id == "NBP") {mempak = true; rumble = true;} //Blues Brothers 2000 if(id == "NYW") {mempak = true;} //Bokujou Monogatari 2 if(id == "NBO") {mempak = true;} //Bottom of the 9th if(id == "NOW") {mempak = true;} //Brunswick Circuit Pro Bowling if(id == "NBL") {mempak = true; rumble = true;} //Buck Bumble if(id == "NBY") {mempak = true; rumble = true;} //Bug's Life, A if(id == "NB3") {mempak = true; rumble = true;} //Bust-A-Move '99 [Bust-A-Move 3 DX (E)] if(id == "NBU") {mempak = true;} //Bust-A-Move 2 - Arcade Edition if(id == "NCL") {mempak = true; rumble = true;} //California Speed if(id == "NCD") {mempak = true; rumble = true;} //Carmageddon 64 if(id == "NTS") {mempak = true;} //Centre Court Tennis if(id == "NV2") {mempak = true; rumble = true;} //Chameleon Twist 2 if(id == "NPK") {mempak = true;} //Chou Kuukan Night Pro Yakyuu King (J) if(id == "NT4") {mempak = true; rumble = true;} //CyberTiger if(id == "NDW") {mempak = true; rumble = true;} //Daikatana, John Romero's if(id == "NGA") {mempak = true; rumble = true;} //Deadly Arts [G.A.S.P!! Fighter's NEXTream (E-J)] if(id == "NDE") {mempak = true; rumble = true;} //Destruction Derby 64 if(id == "NDQ") {mempak = true;} //Disney's Donald Duck - Goin' Quackers [Quack Attack (E)] if(id == "NTA") {mempak = true; rumble = true;} //Disney's Tarzan if(id == "NDM") {mempak = true;} //Doom 64 if(id == "NDH") {mempak = true;} //Duel Heroes if(id == "NDN") {mempak = true; rumble = true;} //Duke Nukem 64 if(id == "NDZ") {mempak = true; rumble = true;} //Duke Nukem - Zero Hour if(id == "NWI") {mempak = true; rumble = true;} //ECW Hardcore Revolution if(id == "NST") {mempak = true;} //Eikou no Saint Andrews if(id == "NET") {mempak = true;} //Quest 64 [Eltale Monsters (J) Holy Magic Century (E)] if(id == "NEG") {mempak = true; rumble = true;} //Extreme-G if(id == "NG2") {mempak = true; rumble = true;} //Extreme-G XG2 if(id == "NHG") {mempak = true;} //F-1 Pole Position 64 if(id == "NFR") {mempak = true; rumble = true;} //F-1 Racing Championship if(id == "N8I") {mempak = true;} //FIFA - Road to World Cup 98 if(id == "N9F") {mempak = true;} //FIFA 99 if(id == "N7I") {mempak = true;} //FIFA Soccer 64 if(id == "NFS") {mempak = true;} //Famista 64 if(id == "NFF") {mempak = true; rumble = true;} //Fighting Force 64 if(id == "NFD") {mempak = true; rumble = true;} //Flying Dragon if(id == "NFO") {mempak = true; rumble = true;} //Forsaken 64 if(id == "NF9") {mempak = true;} //Fox Sports College Hoops '99 if(id == "NG5") {mempak = true; rumble = true;} //Ganbare Goemon - Neo Momoyama Bakufu no Odori [Mystical Ninja Starring Goemon] if(id == "NGX") {mempak = true; rumble = true;} //Gauntlet Legends if(id == "NGD") {mempak = true; rumble = true;} //Gauntlet Legends (J) if(id == "NX3") {mempak = true; rumble = true;} //Gex 3 - Deep Cover Gecko if(id == "NX2") {mempak = true;} //Gex 64 - Enter the Gecko if(id == "NGM") {mempak = true; rumble = true;} //Goemon's Great Adventure [Mystical Ninja 2 Starring Goemon] if(id == "NGN") {mempak = true;} //Golden Nugget 64 if(id == "NHS") {mempak = true;} //Hamster Monogatari 64 if(id == "NM9") {mempak = true;} //Harukanaru Augusta Masters 98 if(id == "NHC") {mempak = true; rumble = true;} //Hercules - The Legendary Journeys if(id == "NHX") {mempak = true;} //Hexen if(id == "NHK") {mempak = true; rumble = true;} //Hiryuu no Ken Twin if(id == "NHW") {mempak = true; rumble = true;} //Hot Wheels Turbo Racing if(id == "NHG") {mempak = true;} //Human Grand Prix - New Generation if(id == "NHV") {mempak = true; rumble = true;} //Hybrid Heaven (U + E) if(id == "NHT") {mempak = true; rumble = true;} //Hydro Thunder if(id == "NWB") {mempak = true; rumble = true;} //Iggy's Reckin' Balls if(id == "NWS") {mempak = true;} //International Superstar Soccer '98 if(id == "NIS") {mempak = true; rumble = true;} //International Superstar Soccer 2000 if(id == "NJP") {mempak = true;} //International Superstar Soccer 64 if(id == "NDS") {mempak = true;} //J.League Dynamite Soccer 64 if(id == "NJE") {mempak = true;} //J.League Eleven Beat 1997 if(id == "NLJ") {mempak = true;} //J.League Live 64 if(id == "NMA") {mempak = true;} //Jangou Simulation Mahjong Do 64 if(id == "NCO") {mempak = true; rumble = true;} //Jeremy McGrath Supercross 2000 if(id == "NGS") {mempak = true;} //Jikkyou G1 Stable if(id == "NJ3") {mempak = true;} //Jikkyou World Soccer 3 if(id == "N64") {mempak = true; rumble = true;} //Kira to Kaiketsu! 64 Tanteidan if(id == "NKK") {mempak = true; rumble = true;} //Knockout Kings 2000 if(id == "NLG") {mempak = true; rumble = true;} //LEGO Racers if(id == "N8M") {mempak = true; rumble = true;} //Madden Football 64 if(id == "NMD") {mempak = true; rumble = true;} //Madden Football 2000 if(id == "NFL") {mempak = true; rumble = true;} //Madden Football 2001 if(id == "N2M") {mempak = true; rumble = true;} //Madden Football 2002 if(id == "N9M") {mempak = true; rumble = true;} //Madden Football '99 if(id == "NMJ") {mempak = true;} //Mahjong 64 if(id == "NMM") {mempak = true;} //Mahjong Master if(id == "NHM") {mempak = true; rumble = true;} //Mia Hamm Soccer 64 if(id == "NWK") {mempak = true; rumble = true;} //Michael Owens WLS 2000 [World League Soccer 2000 (E) / Telefoot Soccer 2000 (F)] if(id == "NV3") {mempak = true; rumble = true;} //Micro Machines 64 Turbo if(id == "NAI") {mempak = true;} //Midway's Greatest Arcade Hits Volume 1 if(id == "NMB") {mempak = true; rumble = true;} //Mike Piazza's Strike Zone if(id == "NBR") {mempak = true; rumble = true;} //Milo's Astro Lanes if(id == "NM4") {mempak = true; rumble = true;} //Mortal Kombat 4 if(id == "NMY") {mempak = true; rumble = true;} //Mortal Kombat Mythologies - Sub-Zero if(id == "NP9") {mempak = true; rumble = true;} //Ms. Pac-Man - Maze Madness if(id == "NH5") {mempak = true;} //Nagano Winter Olympics '98 [Hyper Olympics in Nagano 64 (J)] if(id == "NNM") {mempak = true;} //Namco Museum 64 if(id == "N9C") {mempak = true; rumble = true;} //Nascar '99 if(id == "NN2") {mempak = true; rumble = true;} //Nascar 2000 if(id == "NXG") {mempak = true;} //NBA Hangtime if(id == "NBA") {mempak = true; rumble = true;} //NBA In the Zone '98 [NBA Pro '98 (E)] if(id == "NB2") {mempak = true; rumble = true;} //NBA In the Zone '99 [NBA Pro '99 (E)] if(id == "NWZ") {mempak = true; rumble = true;} //NBA In the Zone 2000 if(id == "NB9") {mempak = true;} //NBA Jam '99 if(id == "NJA") {mempak = true; rumble = true;} //NBA Jam 2000 if(id == "N9B") {mempak = true; rumble = true;} //NBA Live '99 if(id == "NNL") {mempak = true; rumble = true;} //NBA Live 2000 if(id == "NSO") {mempak = true;} //NBA Showtime - NBA on NBC if(id == "NBZ") {mempak = true; rumble = true;} //NFL Blitz if(id == "NSZ") {mempak = true; rumble = true;} //NFL Blitz - Special Edition if(id == "NBI") {mempak = true; rumble = true;} //NFL Blitz 2000 if(id == "NFB") {mempak = true; rumble = true;} //NFL Blitz 2001 if(id == "NQ8") {mempak = true; rumble = true;} //NFL Quarterback Club '98 if(id == "NQ9") {mempak = true; rumble = true;} //NFL Quarterback Club '99 if(id == "NQB") {mempak = true; rumble = true;} //NFL Quarterback Club 2000 if(id == "NQC") {mempak = true; rumble = true;} //NFL Quarterback Club 2001 if(id == "N9H") {mempak = true; rumble = true;} //NHL '99 if(id == "NHO") {mempak = true; rumble = true;} //NHL Blades of Steel '99 [NHL Pro '99 (E)] if(id == "NHL") {mempak = true; rumble = true;} //NHL Breakaway '98 if(id == "NH9") {mempak = true; rumble = true;} //NHL Breakaway '99 if(id == "NNC") {mempak = true; rumble = true;} //Nightmare Creatures if(id == "NCE") {mempak = true; rumble = true;} //Nuclear Strike 64 if(id == "NOF") {mempak = true; rumble = true;} //Offroad Challenge if(id == "NHN") {mempak = true;} //Olympic Hockey Nagano '98 if(id == "NOM") {mempak = true;} //Onegai Monsters if(id == "NPC") {mempak = true;} //Pachinko 365 Nichi (J) if(id == "NYP") {mempak = true; rumble = true;} //Paperboy if(id == "NPX") {mempak = true; rumble = true;} //Polaris SnoCross if(id == "NPL") {mempak = true;} //Power League 64 (J) if(id == "NPU") {mempak = true;} //Power Rangers - Lightspeed Rescue if(id == "NKM") {mempak = true;} //Pro Mahjong Kiwame 64 (J) if(id == "NNR") {mempak = true;} //Pro Mahjong Tsuwamono 64 - Jansou Battle ni Chousen (J) if(id == "NPB") {mempak = true; rumble = true;} //Puzzle Bobble 64 (J) if(id == "NKQ") {mempak = true; rumble = true;} //Quake 64 if(id == "NQ2") {mempak = true; rumble = true;} //Quake 2 if(id == "NKR") {mempak = true;} //Rakuga Kids (E) if(id == "NRP") {mempak = true; rumble = true;} //Rampage - World Tour if(id == "NRP") {mempak = true; rumble = true;} //Rampage 2 - Universal Tour if(id == "NRT") {mempak = true;} //Rat Attack if(id == "NY2") {mempak = true;} //Rayman 2 - The Great Escape if(id == "NFQ") {mempak = true; rumble = true;} //Razor Freestyle Scooter if(id == "NRV") {mempak = true; rumble = true;} //Re-Volt if(id == "NRD") {mempak = true; rumble = true;} //Ready 2 Rumble Boxing if(id == "N22") {mempak = true; rumble = true;} //Ready 2 Rumble Boxing - Round 2 if(id == "NRO") {mempak = true; rumble = true;} //Road Rash 64 if(id == "NRR") {mempak = true; rumble = true;} //Roadster's Trophy if(id == "NRT") {mempak = true;} //Robotron 64 if(id == "NRK") {mempak = true;} //Rugrats in Paris - The Movie if(id == "NR2") {mempak = true; rumble = true;} //Rush 2 - Extreme Racing USA if(id == "NCS") {mempak = true; rumble = true;} //S.C.A.R.S. if(id == "NDC") {mempak = true; rumble = true;} //SD Hiryuu no Ken Densetsu (J) if(id == "NSH") {mempak = true;} //Saikyou Habu Shougi (J) if(id == "NSF") {mempak = true; rumble = true;} //San Francisco Rush - Extreme Racing if(id == "NRU") {mempak = true; rumble = true;} //San Francisco Rush 2049 if(id == "NSY") {mempak = true;} //Scooby-Doo! - Classic Creep Capers if(id == "NSD") {mempak = true; rumble = true;} //Shadow Man if(id == "NSG") {mempak = true;} //Shadowgate 64 - Trials Of The Four Towers if(id == "NTO") {mempak = true;} //Shin Nihon Pro Wrestling - Toukon Road - Brave Spirits (J) if(id == "NS2") {mempak = true;} //Simcity 2000 if(id == "NSK") {mempak = true; rumble = true;} //Snowboard Kids [Snobow Kids (J)] if(id == "NDT") {mempak = true; rumble = true;} //South Park if(id == "NDR") {mempak = true; rumble = true;} //South Park Rally if(id == "NIV") {mempak = true; rumble = true;} //Space Invaders if(id == "NSL") {mempak = true; rumble = true;} //Spider-Man if(id == "NR3") {mempak = true; rumble = true;} //Stunt Racer 64 if(id == "NBW") {mempak = true; rumble = true;} //Super Bowling if(id == "NSX") {mempak = true; rumble = true;} //Supercross 2000 if(id == "NSP") {mempak = true; rumble = true;} //Superman if(id == "NPZ") {mempak = true; rumble = true;} //Susume! Taisen Puzzle Dama Toukon! Marumata Chou (J) if(id == "NL2") {mempak = true; rumble = true;} //Top Gear Rally 2 if(id == "NR6") {mempak = true; rumble = true;} //Tom Clancy's Rainbow Six if(id == "NTT") {mempak = true;} //Tonic Trouble if(id == "NTF") {mempak = true; rumble = true;} //Tony Hawk's Pro Skater if(id == "NTQ") {mempak = true; rumble = true;} //Tony Hawk's Pro Skater 2 if(id == "NT3") {mempak = true; rumble = true;} //Tony Hawk's Pro Skater 3 if(id == "NGB") {mempak = true; rumble = true;} //Top Gear Hyper Bike if(id == "NGR") {mempak = true; rumble = true;} //Top Gear Rally (U) if(id == "NTH") {mempak = true; rumble = true;} //Toy Story 2 - Buzz Lightyear to the Rescue! if(id == "N3P") {mempak = true; rumble = true;} //Triple Play 2000 if(id == "NTU") {mempak = true;} //Turok: Dinosaur Hunter [Turok: Jiku Sinshi (J)] if(id == "NRW") {mempak = true; rumble = true;} //Turok: Rage Wars if(id == "NT2") {mempak = true; rumble = true;} //Turok 2 - Seeds of Evil [Violence Killer - Turok New Generation (J)] if(id == "NTK") {mempak = true; rumble = true;} //Turok 3 - Shadow of Oblivion if(id == "NSB") {mempak = true; rumble = true;} //Twisted Edge - Extreme Snowboarding [King Hill 64 - Extreme Snowboarding (J)] if(id == "NV8") {mempak = true; rumble = true;} //Vigilante 8 if(id == "NVG") {mempak = true; rumble = true;} //Vigilante 8 - Second Offense if(id == "NVC") {mempak = true;} //Virtual Chess 64 if(id == "NVR") {mempak = true;} //Virtual Pool 64 if(id == "NWV") {mempak = true; rumble = true;} //WCW: Backstage Assault if(id == "NWV") {mempak = true; rumble = true;} //WCW: Mayhem if(id == "NW3") {mempak = true; rumble = true;} //WCW: Nitro if(id == "NWN") {mempak = true; rumble = true;} //WCW vs. nWo - World Tour if(id == "NWW") {mempak = true; rumble = true;} //WWF: War Zone if(id == "NTI") {mempak = true; rumble = true;} //WWF: Attitude if(id == "NWG") {mempak = true;} //Wayne Gretzky's 3D Hockey if(id == "NW8") {mempak = true;} //Wayne Gretzky's 3D Hockey '98 if(id == "NWD") {mempak = true; rumble = true;} //Winback if(id == "NWP") {mempak = true; rumble = true;} //Wipeout 64 if(id == "NJ2") {mempak = true;} //Wonder Project J2 - Koruro no Mori no Jozet (J) if(id == "N8W") {mempak = true;} //World Cup '98 if(id == "NWO") {mempak = true; rumble = true;} //World Driver Championship if(id == "NXF") {mempak = true; rumble = true;} //Xena Warrior Princess - The Talisman of Fate //Special case for Shindou editions of Super Mario 64 & Wave Race 64 if(id == "NSM" && region_code == 'J' && revision == 3) {rumble = true;} //Super Mario 64: Shindou Edition (Rev 3) if(id == "NWR" && region_code == 'J' && revision == 2) {rumble = true;} //Wave Race 64: Kawasaki Jet Ski Shindou Edition (Rev 2) //Rumble if(id == "NJQ") {rumble = true;} //Batman - Return of the Joker if(id == "NCB") {rumble = true;} //Charlie Blast's Territory if(id == "NDF") {rumble = true;} //Dance Dance Revolution - Disney Dancing Museum if(id == "NKE") {rumble = true;} //Knife Edge - Nose Gunner if(id == "NMT") {rumble = true;} //Magical Tetris Challenge if(id == "NM3") {rumble = true;} //Monster Truck Madness 64 if(id == "NRG") {rumble = true;} //Rugrats - Scavenger Hunt [Treasure Hunt(E)] if(id == "N0H") {rumble = true;} //Transformers Beast Wars: Transmetals if(id == "NWF") {rumble = true;} //Wheel of Fortune string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; s +={" id: ", id, region_code, "\n"}; if(mempak) s += " mempak\n"; if(rumble) s += " rumble\n"; if(revision < 4) { s +={" revision: 1.", revision, "\n"}; } s += " board\n"; s +={" cic: ", cic, "\n"}; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(data.size()), "\n"}; s += " content: Program\n"; if(eeprom) { s += " memory\n"; s += " type: EEPROM\n"; s +={" size: 0x", hex(eeprom), "\n"}; s += " content: Save\n"; } if(sram) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(sram), "\n"}; s += " content: Save\n"; } if(flash) { s += " memory\n"; s += " type: Flash\n"; s +={" size: 0x", hex(flash), "\n"}; s += " content: Save\n"; } return s; } ares-126/mia/medium/nintendo-64dd.cpp000066400000000000000000000023301415063341600174260ustar00rootroot00000000000000struct Nintendo64DD : FloppyDisk { auto name() -> string override { return "Nintendo 64DD"; } auto extensions() -> vector override { return {"n64dd", "ndd"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto Nintendo64DD::load(string location) -> bool { vector input; if(directory::exists(location)) { append(input, {location, "program.disk"}); } else if(file::exists(location)) { input = FloppyDisk::read(location); } if(!input) return false; this->location = location; this->manifest = analyze(input); auto document = BML::unserialize(manifest); if(!document) return false; pak = shared_pointer{new vfs::directory}; pak->setAttribute("title", document["game/title"].string()); pak->append("manifest.bml", manifest); pak->append("program.disk", input); return true; } auto Nintendo64DD::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto Nintendo64DD::analyze(vector& rom) -> string { string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; return s; } ares-126/mia/medium/pc-engine-cd.cpp000066400000000000000000000033221415063341600173040ustar00rootroot00000000000000struct PCEngineCD : CompactDisc { auto name() -> string override { return "PC Engine CD"; } auto extensions() -> vector override { return {"pcecd", "cue"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(string location) -> string; }; auto PCEngineCD::load(string location) -> bool { if(!inode::exists(location)) return false; this->location = location; this->manifest = analyze(location); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->append("manifest.bml", manifest); if(directory::exists(location)) { pak->append("cd.rom", vfs::disk::open({location, "cd.rom"}, vfs::read)); } if(file::exists(location)) { pak->append("cd.rom", vfs::cdrom::open(location)); } return true; } auto PCEngineCD::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto PCEngineCD::analyze(string location) -> string { auto sector = readDataSectorCUE(location, 0); if(!sector) return CompactDisc::manifestAudio(location); //yes, "Electronics" is spelled incorrectly in actual PC Engine CD games ... if(memory::compare(sector.data() + 0x264, "NEC Home Electoronics", 21)) { return CompactDisc::manifestAudio(location); } //note: there is no method to determine the region for PC Engine CDs ... string region = "NTSC-J"; string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; return s; } ares-126/mia/medium/pc-engine.cpp000066400000000000000000000106771415063341600167330ustar00rootroot00000000000000struct PCEngine : Cartridge { auto name() -> string override { return "PC Engine"; } auto extensions() -> vector override { return {"pce"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto PCEngine::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("board", document["game/board"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=RAM,content=Dynamic)"]) { Medium::load(node, ".dram"); } if(auto node = document["game/board/memory(type=RAM,content=Work)"]) { Medium::load(node, ".wram"); } return true; } auto PCEngine::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } return true; } auto PCEngine::analyze(vector& data) -> string { if((data.size() & 0x1fff) == 512) { //remove header if present memory::move(&data[0], &data[512], data.size() - 512); data.resize(data.size() - 512); } string digest = Hash::SHA256(data).digest(); string region = "NTSC-U"; string board = "Linear"; if(data.size() == 0x60000) board = "Split"; if(data.size() == 0x280000) board = "Banked"; //Populous if(digest == "16a796634a2b3da417a775cb64ffa3322ad7baf901c288934d28df967f7977f6") board = "RAM", region = "NTSC-J"; if(digest == "bfc2e6dd19f2cb642d3a7bd149b9a5eb5a8007f0f1c626eb62ded2a1f609814e") board = "RAM", region = "NTSC-J"; //Ten no Koe Bank if(digest == "16d43e32b34ed40b0a59f4122370f4d973af33a6122c9ccbfab6bb21cf36f1b3") board = "RAM"; //PC Engine System Card 1.00 if(digest == "afe9f27f91ac918348555b86298b4f984643eafa2773196f2c5441ea84f0c3bb") board = "System Card", region = "NTSC-J"; //PC Engine System Card 2.00 if(digest == "909f2153e624b76392684434ba5aa3e394cbba0318a0dda350140cb61ce9bc49") board = "System Card", region = "NTSC-J"; //PC Engine System Card 2.10 if(digest == "0deb13845c7e44ea78a25bbbe324afd60a0ec29ea5a4cf5780349f1598d24cd3") board = "System Card", region = "NTSC-J"; //PC Engine Super System Card 3.00 //PC Engine Arcade Card Duo //PC Engine Arcade Card Pro //note: because all three cards use the same ROM image, it is not possible to distinguish them here. //since the Arcade Card Pro is the most capable card, and is fully backward compatible, that is chosen here. if(digest == "e11527b3b96ce112a037138988ca72fd117a6b0779c2480d9e03eaebece3d9ce") board = "Arcade Card Pro", region = "NTSC-J"; //TurboGrafx System Card 2.00 if(digest == "edba5be43803b180e1d64ca678c3f8bdbf07180c9e2a65a5db69ad635951e6cc") board = "System Card", region = "NTSC-U"; //TurboGrafx Super System Card 3.00 if(digest == "cadac2725711b3c442bcf237b02f5a5210c96f17625c35fa58f009e0ed39e4db") board = "Super System Card", region = "NTSC-U"; string s; s += "game\n"; s +={" sha256: ", digest, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; s +={" board: ", board, "\n"}; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(data.size()), "\n"}; s += " content: Program\n"; if(board == "RAM") { s += " memory\n"; s += " type: RAM\n"; s += " size: 0x8000\n"; s += " content: Save\n"; } if(board == "Super System Card" || board == "Arcade Card Pro") { s += " memory\n"; s += " type: RAM\n"; s += " size: 0x30000\n"; s += " content: Work\n"; s += " volatile\n"; } if(board == "Arcade Card Duo" || board == "Arcade Card Pro") { s += " memory\n"; s += " type: RAM\n"; s += " size: 0x200000\n"; s += " content: Dynamic\n"; s += " volatile\n"; } return s; } ares-126/mia/medium/playstation.cpp000066400000000000000000000056341415063341600174320ustar00rootroot00000000000000struct PlayStation : CompactDisc { auto name() -> string override { return "PlayStation"; } auto extensions() -> vector override { return {"ps1", "cue", "exe"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(string location) -> string; auto cdFromExecutable(string location) -> vector; }; auto PlayStation::load(string location) -> bool { if(!inode::exists(location)) return false; this->location = location; this->manifest = analyze(location); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->setAttribute("audio", (bool)document["game/audio"]); pak->setAttribute("executable", (bool)document["game/executable"]); pak->append("manifest.bml", manifest); if(directory::exists(location)) { pak->append("cd.rom", vfs::disk::open({location, "cd.rom"}, vfs::read)); } if(file::exists(location)) { if(location.iendsWith(".cue")) { pak->append("cd.rom", vfs::cdrom::open(location)); } if(location.iendsWith(".exe")) { pak->append("program.exe", vfs::disk::open(location, vfs::read)); } } return true; } auto PlayStation::save(string location) -> bool { return true; } auto PlayStation::analyze(string location) -> string { if(location.iendsWith(".cue")) { auto sector = readDataSectorCUE(location, 4); if(!sector) return CompactDisc::manifestAudio(location); string text; text.resize(sector.size()); memory::copy(text.get(), sector.data(), sector.size()); string region; if(text.find("Sony Computer Entertainment Inc." )) region = "NTSC-J"; if(text.find("Sony Computer Entertainment Amer" )) region = "NTSC-U"; if(text.find("Sony Computer Entertainment of America")) region = "NTSC-U"; if(text.find("Sony Computer Entertainment Euro" )) region = "PAL"; if(!region) return CompactDisc::manifestAudio(location); string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", region, "\n"}; return s; } if(location.iendsWith(".exe")) { auto exe = file::read(location); if(exe.size() < 2048) return {}; if(memory::compare(exe.data(), "PS-X EXE", 8)) return {}; string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", "NTSC-U", "\n"}; s +={" executable\n"}; return s; } return {}; } //todo: not implemented yet auto PlayStation::cdFromExecutable(string location) -> vector { auto exe = file::read(location); if(exe.size() < 2048) return {}; if(memory::compare(exe.data(), "PS-X EXE", 8)) return {}; vector cd; return cd; } ares-126/mia/medium/pocket-challenge-v2.cpp000066400000000000000000000002711415063341600206050ustar00rootroot00000000000000struct PocketChallengeV2 : WonderSwan { auto name() -> string override { return "Pocket Challenge V2"; } auto extensions() -> vector override { return {"pcv2", "pc2"}; } }; ares-126/mia/medium/saturn.cpp000066400000000000000000000024271415063341600163740ustar00rootroot00000000000000struct Saturn : CompactDisc { auto name() -> string override { return "Saturn"; } auto extensions() -> vector override { return {"sat", "cue"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(string location) -> string; }; auto Saturn::load(string location) -> bool { if(!inode::exists(location)) return false; this->location = location; this->manifest = analyze(location); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->append("manifest.bml", manifest); if(directory::exists(location)) { pak->append("cd.rom", vfs::disk::open({location, "cd.rom"}, vfs::read)); } if(file::exists(location)) { pak->append("cd.rom", vfs::cdrom::open(location)); } return true; } auto Saturn::save(string location) -> bool { auto document = BML::unserialize(manifest); return true; } auto Saturn::analyze(string location) -> string { string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" region: ", "NTSC-J", "\n"}; return s; } ares-126/mia/medium/sc-3000.cpp000066400000000000000000000002371415063341600160420ustar00rootroot00000000000000struct SC3000 : SG1000 { auto name() -> string override { return "SC-3000"; } auto extensions() -> vector override { return {"sc3000", "sc"}; } }; ares-126/mia/medium/sg-1000.cpp000066400000000000000000000103451415063341600160450ustar00rootroot00000000000000struct SG1000 : Cartridge { auto name() -> string override { return "SG-1000"; } auto extensions() -> vector override { return {"sg1000", "sg"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto SG1000::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("board", document["game/board" ].string()); pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("region", document["game/region"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } return true; } auto SG1000::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } return true; } auto SG1000::analyze(vector& rom) -> string { string hash = Hash::SHA256(rom).digest(); string board = "Linear"; // Bomberman Special (Taiwan) (Chinese Logo) (Unl) if (hash == "30417fcd412ad281cd6f72c77ecc107b2c13c719bff2d045dde05ea760c757ff") { board = "Taiwan-A"; } // Bomberman Special (Taiwan) (English Logo) (Unl) if (hash == "3eff3d6f1f74041f7b732455799d0978ab49724552ff2985f34b76478cd91721") { board = "Taiwan-B"; } // Castle, The (Taiwan) (Unl) (Pirate) if (hash =="f071cdc34673e48decf2862f70e443558d916bac5e63553e61d0dda50101342a") { board = "Taiwan-B"; } // King's Valley (Taiwan) if (hash == "490b01e157172cb06a7234d2675df22fbd3dccad3f7d23db11dd5e73a5659c59") { board = "Taiwan-A"; } // Knightmare (Taiwan) if (hash == "3106c32c31eb16d9a9534b3975e204a0876c583f48d7a735c325710f03e31f89") { board = "Taiwan-A"; } // Legend of Kage, The (Taiwan) if (hash == "cecc0658956ca46dbc37159a7cd29a12a14b6cb7de91ccea03000cbc5034d0dc") { board = "Taiwan-A"; } // Magical Kid Wiz (Taiwan) if (hash == "2f443c61e9e6a55dc609de4c789dde4a9243ec6817d0ff4bfb7b6762cabe4e98") { board = "Taiwan-B"; } // Pippols (Taiwan) if (hash == "2c01a3383d55b21bda938aaac7889ce6ceeed2ef46452535f30ba9d578cc54e1") { board = "Taiwan-A"; } // Rally-X (Taiwan) (Chinese Logo) if (hash == "952c8e1788590b1d09c23368e133e76d3db59444787f1afa90be6ab075049734") { board = "Taiwan-A"; } // Rally-X (Taiwan) (English Logo) if (hash == "f10416a655b2de101ad324695831468de7d9ae5690bdc1106f72c0e78f3fd9fb") { board = "Taiwan-B"; } // Road Fighter (Taiwan) (Chinese Logo) if (hash == "ead9e34e1b4f3f029f99dd0446641056e30a28596b30500bcd5134ac5c968633") { board = "Taiwan-A"; } // Road Fighter (Taiwan) (English Logo) if (hash == "f604b1374673b28e289ecacb85514c6b33a7516b82c8f53c2ec979eada505a60") { board = "Taiwan-B"; } // Star Soldier (Taiwan) if (hash == "dfcc8ac91e6f8004b9cf3d78b3879fcee1f071a97da00578ecd389bf1c954c1d") { board = "Taiwan-A"; } // Tank Battalion (Taiwan) if (hash == "1a74c2a02adf19104a319a507d88181337eb5314c558d6696ddcdddf243681e9") { board = "Taiwan-A"; } // TwinBee (Taiwan) if (hash == "24f25236f743b5aab10dba38b182e52028e99c0093f004406c6973510d2b0875") { board = "Taiwan-A"; } // Yie Ar Kung-Fu II (Taiwan) if (hash == "eb34e17ed22f0f23a13b39b3c78ecd9fe608d3f9ebd55f025d9812dfbbbf3e2f") { board = "Taiwan-A"; } string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " region: NTSC, PAL\n"; //database required to detect region s +={" board: ", board, "\n"}; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; s += " memory\n"; s += " type: RAM\n"; s += " size: 0x4000\n"; s += " content: Save\n"; return s; } ares-126/mia/medium/sufami-turbo.cpp000066400000000000000000000036371415063341600175010ustar00rootroot00000000000000struct SufamiTurbo : Cartridge { auto name() -> string override { return "Sufami Turbo"; } auto extensions() -> vector override { return {"st"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& data) -> string; }; auto SufamiTurbo::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->sha256 = Hash::SHA256(rom).digest(); this->location = location; this->manifest = Medium::manifestDatabase(sha256); if(!manifest) manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } return true; } auto SufamiTurbo::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } return true; } auto SufamiTurbo::analyze(vector& rom) -> string { if(rom.size() < 0x20000) return {}; u32 romSize = rom[0x36] * 128_KiB; u32 ramSize = rom[0x37] * 2_KiB; string s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s += " board\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(ramSize) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(ramSize), "\n"}; s += " content: Save\n"; } return s; } ares-126/mia/medium/super-famicom.cpp000066400000000000000000000705621415063341600176340ustar00rootroot00000000000000struct SuperFamicom : Cartridge { auto name() -> string override { return "Super Famicom"; } auto extensions() -> vector override { return {"sfc", "smc", "swc", "fig"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; protected: auto region() const -> string; auto revision() const -> string; auto board() const -> string; auto label() const -> string; auto serial() const -> string; auto romSize() const -> u32; auto programRomSize() const -> u32; auto dataRomSize() const -> u32; auto expansionRomSize() const -> u32; auto firmwareRomSize() const -> u32; auto ramSize() const -> u32; auto expansionRamSize() const -> u32; auto nonVolatile() const -> bool; auto size() const -> u32 { return data.size(); } auto scoreHeader(u32 address) -> u32; auto firmwareARM() const -> string; auto firmwareEXNEC() const -> string; auto firmwareGB() const -> string; auto firmwareHITACHI() const -> string; auto firmwareNEC() const -> string; array_view data; u32 headerAddress = 0; }; auto SuperFamicom::load(string location) -> bool { vector rom; string directory = location; if(directory::exists(location)) { auto files = directory::files(location, "*.rom"); append(rom, {location, "program.rom" }); append(rom, {location, "data.rom" }); append(rom, {location, "expansion.rom"}); for(auto& file : files.match("*.program.rom")) append(rom, {location, file}); for(auto& file : files.match("*.data.rom" )) append(rom, {location, file}); for(auto& file : files.match("*.boot.rom" )) append(rom, {location, file}); } else if(rom = Medium::read(location)) { directory = Location::dir(location); //append firmware to the ROM if it is missing auto manifest = analyze(rom); auto document = BML::unserialize(manifest); if(auto identifier = document["game/board/memory/identifier"]) { if(!firmwareRomSize()) { auto id = identifier.string(); array_view view; if(id == "Cx4" ) view = Resource::SuperFamicom::Cx4; if(id == "DSP1" ) view = Resource::SuperFamicom::DSP1; if(id == "DSP1B") view = Resource::SuperFamicom::DSP1B; if(id == "DSP2" ) view = Resource::SuperFamicom::DSP2; if(id == "DSP3" ) view = Resource::SuperFamicom::DSP3; if(id == "DSP4" ) view = Resource::SuperFamicom::DSP4; if(id == "SGB1" ) view = Resource::SuperFamicom::SGB1; if(id == "SGB2" ) view = Resource::SuperFamicom::SGB2; if(id == "ST010") view = Resource::SuperFamicom::ST010; if(id == "ST011") view = Resource::SuperFamicom::ST011; if(id == "ST018") view = Resource::SuperFamicom::ST018; while(view) rom.append(*view++); } } } if(!rom) return false; this->sha256 = Hash::SHA256(rom).digest(); this->location = location; this->manifest = Medium::manifestDatabase(sha256); if(!manifest) manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("board", document["game/board"].string()); if(auto node = document["game/board/oscillator/frequency"]) { pak->setAttribute("oscillator", node.natural()); } auto region = document["game/region"].string(); if(region.endsWith("BRA") || region.endsWith("CAN") || region.endsWith("HKG") || region.endsWith("JPN") || region.endsWith("KOR") || region.endsWith("LTN") || region.endsWith("ROC") || region.endsWith("USA") || region.beginsWith("SHVC-") || region == "NTSC" ) { region = "NTSC"; } else { region = "PAL"; } pak->setAttribute("region", region); pak->append("manifest.bml", manifest); auto files = directory::files(directory, "msu1.*"); for(auto& _file : files) { pak->append(_file, file::read({directory, "/", _file})); } array_view view{rom}; for(auto node : document.find("game/board/memory(type=ROM)")) { string name; if(auto architecture = node["architecture"].string()) name.append(architecture.downcase(), "."); name.append(node["content"].string().downcase(), ".rom"); u32 size = node["size"].natural(); if(view.size() < size) break; //missing firmware pak->append(name, {view.data(), size}); view += size; } if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=RAM,content=Internal)"]) { Medium::load(node, ".iram"); } if(auto node = document["game/board/memory(type=RAM,content=Download)"]) { Medium::load(node, ".bsx"); } if(auto node = document["game/board/memory(type=RTC,content=Time)"]) { Medium::load(node, ".rtc"); } if(auto node = document["game/board/memory(type=RAM,content=Data)"]) { Medium::load(node, ".dram"); } return true; } auto SuperFamicom::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=RAM,content=Internal)"]) { Medium::save(node, ".iram"); } if(auto node = document["game/board/memory(type=RAM,content=Download)"]) { Medium::save(node, ".bsx"); } if(auto node = document["game/board/memory(type=RTC,content=Time)"]) { Medium::save(node, ".rtc"); } if(auto node = document["game/board/memory(type=RAM,content=Data)"]) { Medium::save(node, ".dram"); } return true; } auto SuperFamicom::analyze(vector& rom) -> string { if((rom.size() & 0x7fff) == 512) { //remove header if present memory::move(&rom[0], &rom[512], rom.size() - 512); rom.resize(rom.size() - 512); } if(rom.size() < 0x8000) return {}; //ignore images too small to be valid data = rom; u32 LoROM = scoreHeader( 0x7fb0); u32 HiROM = scoreHeader( 0xffb0); u32 ExLoROM = scoreHeader(0x407fb0); u32 ExHiROM = scoreHeader(0x40ffb0); if(ExLoROM) ExLoROM += 4; if(ExHiROM) ExHiROM += 4; if(LoROM >= HiROM && LoROM >= ExLoROM && LoROM >= ExHiROM) headerAddress = 0x7fb0; else if(HiROM >= ExLoROM && HiROM >= ExHiROM) headerAddress = 0xffb0; else if(ExLoROM >= ExHiROM) headerAddress = 0x407fb0; else headerAddress = 0x40ffb0; string s; auto& output = s; s += "game\n"; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" label: ", label(), "\n"}; s +={" region: ", region(), "\n"}; s +={" revision: ", revision(), "\n"}; s +={" board: ", board(), "\n"}; auto board = this->board().trimRight("#A", 1L).split("-"); if(auto size = romSize()) { if(board(0) == "SPC7110" && size > 0x100000) { s += " memory\n"; s += " type: ROM\n"; s += " size: 0x100000\n"; s += " content: Program\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(size - 0x100000), "\n"}; s += " content: Data\n"; } else if(board(0) == "EXSPC7110" && size == 0x700000) { //Tengai Maykou Zero (fan translation) s += " memory\n"; s += " type: ROM\n"; s += " size: 0x100000\n"; s += " content: Program\n"; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x500000\n"; s += " content: Data\n"; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x100000\n"; s += " content: Expansion\n"; } else { s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(size), "\n"}; s += " content: Program\n"; } } if(auto size = ramSize()) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(size), "\n"}; s += " content: Save\n"; } if(auto size = expansionRamSize()) { s += " memory\n"; s += " type: RAM\n"; s +={" size: 0x", hex(size), "\n"}; s += " content: Save\n"; } if(board(0) == "ARM") { s += " memory\n"; s += " type: ROM\n"; s += " size: 0x20000\n"; s += " content: Program\n"; s += " manufacturer: SETA\n"; s += " architecture: ARM6\n"; s +={" identifier: ", firmwareARM(), "\n"}; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x8000\n"; s += " content: Data\n"; s += " manufacturer: SETA\n"; s += " architecture: ARM6\n"; s +={" identifier: ", firmwareARM(), "\n"}; s += " memory\n"; s += " type: RAM\n"; s += " size: 0x4000\n"; s += " content: Data\n"; s += " manufacturer: SETA\n"; s += " architecture: ARM6\n"; s +={" identifier: ", firmwareARM(), "\n"}; s += " volatile\n"; s += " oscillator\n"; s += " frequency: 21440000\n"; } else if(board(0) == "BS" && board(1) == "MCC") { s += " memory\n"; s += " type: RAM\n"; s += " size: 0x80000\n"; s += " content: Download\n"; } else if(board(0) == "EXNEC") { s += " memory\n"; s += " type: ROM\n"; s += " size: 0xc000\n"; s += " content: Program\n"; s += " manufacturer: NEC\n"; s += " architecture: uPD96050\n"; s +={" identifier: ", firmwareEXNEC(), "\n"}; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x1000\n"; s += " content: Data\n"; s += " manufacturer: NEC\n"; s += " architecture: uPD96050\n"; s +={" identifier: ", firmwareEXNEC(), "\n"}; s += " memory\n"; s += " type: RAM\n"; s += " size: 0x1000\n"; s += " content: Data\n"; s += " manufacturer: NEC\n"; s += " architecture: uPD96050\n"; s +={" identifier: ", firmwareEXNEC(), "\n"}; s += " oscillator\n"; s +={" frequency: ", firmwareEXNEC() == "ST010" ? 11000000 : 15000000, "\n"}; } else if(board(0) == "GB") { s += " memory\n"; s += " type: ROM\n"; s += " size: 0x100\n"; s += " content: Boot\n"; s += " manufacturer: Nintendo\n"; s += " architecture: SM83\n"; s +={" identifier: ", firmwareGB(), "\n"}; if(firmwareGB() == "SGB2") { s += " oscillator\n"; s += " frequency: 20971520\n"; } } else if(board(0) == "GSU") { //todo: MARIO CHIP 1 uses CPU oscillator s += " oscillator\n"; s += " frequency: 21440000\n"; } else if(board(0) == "HITACHI") { s += " memory\n"; s += " type: ROM\n"; s += " size: 0xc00\n"; s += " content: Data\n"; s += " manufacturer: Hitachi\n"; s += " architecture: HG51BS169\n"; s +={" identifier: ", firmwareHITACHI(), "\n"}; s += " memory\n"; s += " type: RAM\n"; s += " size: 0xc00\n"; s += " content: Data\n"; s += " manufacturer: Hitachi\n"; s += " architecture: HG51BS169\n"; s +={" identifier: ", firmwareHITACHI(), "\n"}; s += " volatile\n"; s += " oscillator\n"; s += " frequency: 20000000\n"; } else if(board(0) == "NEC") { s += " memory\n"; s += " type: ROM\n"; s += " size: 0x1800\n"; s += " content: Program\n"; s += " manufacturer: NEC\n"; s += " architecture: uPD7725\n"; s +={" identifier: ", firmwareNEC(), "\n"}; s += " memory\n"; s += " type: ROM\n"; s += " size: 0x800\n"; s += " content: Data\n"; s += " manufacturer: NEC\n"; s += " architecture: uPD7725\n"; s +={" identifier: ", firmwareNEC(), "\n"}; s += " memory\n"; s += " type: RAM\n"; s += " size: 0x200\n"; s += " content: Data\n"; s += " manufacturer: NEC\n"; s += " architecture: uPD7725\n"; s +={" identifier: ", firmwareNEC(), "\n"}; s += " volatile\n"; s += " oscillator\n"; s += " frequency: 7600000\n"; } else if(board(0) == "SA1" || board(1) == "SA1") { //SA1-* or BS-SA1-* s += " memory\n"; s += " type: RAM\n"; s += " size: 0x800\n"; s += " content: Internal\n"; s += " volatile\n"; } if(board.right() == "EPSONRTC") { s += " memory\n"; s += " type: RTC\n"; s += " size: 0x10\n"; s += " content: Time\n"; s += " manufacturer: Epson\n"; } else if(board.right() == "SHARPRTC") { s += " memory\n"; s += " type: RTC\n"; s += " size: 0x10\n"; s += " content: Time\n"; s += " manufacturer: Sharp\n"; } return output; } auto SuperFamicom::region() const -> string { string region; char A = data[headerAddress + 0x02]; //game type char B = data[headerAddress + 0x03]; //game code char C = data[headerAddress + 0x04]; //game code char D = data[headerAddress + 0x05]; //region code (new; sometimes ambiguous) auto E = data[headerAddress + 0x29]; //region code (old) auto valid = [](char n) { return (n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z'); }; if(data[headerAddress + 0x2a] == 0x33 && valid(A) && valid(B) & valid(C) & valid(D)) { string code{A, B, C, D}; if(D == 'B') region = {"SNS-", code, "-BRA"}; if(D == 'C') region = {"SNSN-", code, "-ROC"}; if(D == 'D') region = {"SNSP-", code, "-NOE"}; if(D == 'E') region = {"SNS-", code, "-USA"}; if(D == 'F') region = {"SNSP-", code, "-FRA"}; if(D == 'H') region = {"SNSP-", code, "-HOL"}; if(D == 'I') region = {"SNSP-", code, "-ITA"}; if(D == 'J') region = {"SHVC-", code, "-JPN"}; if(D == 'K') region = {"SNSN-", code, "-KOR"}; if(D == 'N') region = {"SNS-", code, "-CAN"}; if(D == 'P') region = {"SNSP-", code, "-EUR"}; if(D == 'S') region = {"SNSP-", code, "-ESP"}; if(D == 'U') region = {"SNSP-", code, "-AUS"}; if(D == 'W') region = {"SNSP-", code, "-SCN"}; } if(!region) { if(E == 0x00) region = {"JPN"}; if(E == 0x01) region = {"USA"}; if(E == 0x02) region = {"EUR"}; if(E == 0x03) region = {"SCN"}; if(E == 0x06) region = {"FRA"}; if(E == 0x07) region = {"HOL"}; if(E == 0x08) region = {"ESP"}; if(E == 0x09) region = {"NOE"}; if(E == 0x0a) region = {"ITA"}; if(E == 0x0b) region = {"ROC"}; if(E == 0x0d) region = {"KOR"}; if(E == 0x0f) region = {"CAN"}; if(E == 0x10) region = {"BRA"}; if(E == 0x11) region = {"AUS"}; } return region ? region : "NTSC"; } auto SuperFamicom::revision() const -> string { string revision; char A = data[headerAddress + 0x02]; //game type char B = data[headerAddress + 0x03]; //game code char C = data[headerAddress + 0x04]; //game code char D = data[headerAddress + 0x05]; //region code (new; sometimes ambiguous) auto E = data[headerAddress + 0x29]; //region code (old) auto F = data[headerAddress + 0x2b]; //revision code auto valid = [](char n) { return (n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z'); }; if(data[headerAddress + 0x2a] == 0x33 && valid(A) && valid(B) & valid(C) & valid(D)) { string code{A, B, C, D}; if(D == 'B') revision = {"SNS-", code, "-", F}; if(D == 'C') revision = {"SNSN-", code, "-", F}; if(D == 'D') revision = {"SNSP-", code, "-", F}; if(D == 'E') revision = {"SNS-", code, "-", F}; if(D == 'F') revision = {"SNSP-", code, "-", F}; if(D == 'H') revision = {"SNSP-", code, "-", F}; if(D == 'I') revision = {"SNSP-", code, "-", F}; if(D == 'J') revision = {"SHVC-", code, "-", F}; if(D == 'K') revision = {"SNSN-", code, "-", F}; if(D == 'N') revision = {"SNS-", code, "-", F}; if(D == 'P') revision = {"SNSP-", code, "-", F}; if(D == 'S') revision = {"SNSP-", code, "-", F}; if(D == 'U') revision = {"SNSP-", code, "-", F}; if(D == 'W') revision = {"SNSP-", code, "-", F}; } if(!revision) { revision = {"1.", F}; } return revision ? revision : string{"1.", F}; } //format: [slot]-[coprocessor]-[mapper]-[ram]-[rtc] auto SuperFamicom::board() const -> string { string board; auto mapMode = data[headerAddress + 0x25]; auto cartridgeTypeLo = data[headerAddress + 0x26] & 15; auto cartridgeTypeHi = data[headerAddress + 0x26] >> 4; auto cartridgeSubType = data[headerAddress + 0x0f]; string mode; if(mapMode == 0x20 || mapMode == 0x30) mode = "LOROM-"; if(mapMode == 0x21 || mapMode == 0x31) mode = "HIROM-"; if(mapMode == 0x22 || mapMode == 0x32) mode = "SDD1-"; if(mapMode == 0x23 || mapMode == 0x33) mode = "SA1-"; if(mapMode == 0x25 || mapMode == 0x35) mode = "EXHIROM-"; if(mapMode == 0x2a || mapMode == 0x3a) mode = "SPC7110-"; //many games will store an extra title character, overwriting the map mode //further, ExLoROM mode is unofficial, and lacks a mapping mode value if(!mode) { if(headerAddress == 0x7fb0) mode = "LOROM-"; if(headerAddress == 0xffb0) mode = "HIROM-"; if(headerAddress == 0x407fb0) mode = "EXLOROM-"; if(headerAddress == 0x40ffb0) mode = "EXHIROM-"; } bool epsonRTC = false; bool sharpRTC = false; if(serial() == "A9PJ") { //Sufami Turbo (JPN) board.append("ST-", mode); } else if(serial() == "ZBSJ") { //BS-X: Sore wa Namae o Nusumareta Machi no Monogatari (JPN) board.append("BS-MCC-"); } else if(serial() == "042J") { //Super Game Boy 2 board.append("GB-", mode); } else if(serial().match("Z??J")) { board.append("BS-", mode); } else if(cartridgeTypeLo >= 0x3) { if(cartridgeTypeHi == 0x0) board.append("NEC-", mode); if(cartridgeTypeHi == 0x1) board.append("GSU-"); if(cartridgeTypeHi == 0x2) board.append("OBC1-", mode); if(cartridgeTypeHi == 0x3) board.append("SA1-"); if(cartridgeTypeHi == 0x4) board.append("SDD1-"); if(cartridgeTypeHi == 0x5) board.append(mode), sharpRTC = true; if(cartridgeTypeHi == 0xe && cartridgeTypeLo == 0x3) board.append("GB-", mode); if(cartridgeTypeHi == 0xf && cartridgeTypeLo == 0x5 && cartridgeSubType == 0x00) board.append("SPC7110-"); if(cartridgeTypeHi == 0xf && cartridgeTypeLo == 0x9 && cartridgeSubType == 0x00) board.append("SPC7110-"), epsonRTC = true; if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x01) board.append("EXNEC-", mode); if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x02) board.append("ARM-", mode); if(cartridgeTypeHi == 0xf && cartridgeSubType == 0x10) board.append("HITACHI-", mode); } if(!board) board.append(mode); if(ramSize() || expansionRamSize()) board.append("RAM-"); if(epsonRTC) board.append("EPSONRTC-"); if(sharpRTC) board.append("SHARPRTC-"); board.trimRight("-", 1L); if(board.beginsWith( "LOROM-RAM") && romSize() <= 0x200000) board.append("#A"); if(board.beginsWith("NEC-LOROM-RAM") && romSize() <= 0x100000) board.append("#A"); //Tengai Makyou Zero (fan translation) if(board.beginsWith("SPC7110-") && data.size() == 0x700000) board.prepend("EX"); return board; } auto SuperFamicom::label() const -> string { string label; for(u32 n = 0; n < 0x15; n++) { auto x = data[headerAddress + 0x10 + n]; auto y = n == 0x14 ? 0 : data[headerAddress + 0x11 + n]; //null terminator (padding) if(x == 0x00 || x == 0xff); //ASCII else if(x >= 0x20 && x <= 0x7e) label.append((char)x); //Shift-JIS (half-width katakana) else if(x == 0xa1) label.append("。"); else if(x == 0xa2) label.append("「"); else if(x == 0xa3) label.append("」"); else if(x == 0xa4) label.append("、"); else if(x == 0xa5) label.append("・"); else if(x == 0xa6) label.append("ヲ"); else if(x == 0xa7) label.append("ァ"); else if(x == 0xa8) label.append("ィ"); else if(x == 0xa9) label.append("ゥ"); else if(x == 0xaa) label.append("ェ"); else if(x == 0xab) label.append("ォ"); else if(x == 0xac) label.append("ャ"); else if(x == 0xad) label.append("ュ"); else if(x == 0xae) label.append("ョ"); else if(x == 0xaf) label.append("ッ"); else if(x == 0xb0) label.append("ー"); else if(x == 0xb1) label.append( "ア"); else if(x == 0xb2) label.append( "イ"); else if(x == 0xb3) label.append(y == 0xde ? "ヴ" : "ウ"); else if(x == 0xb4) label.append( "エ"); else if(x == 0xb5) label.append( "オ"); else if(x == 0xb6) label.append(y == 0xde ? "ガ" : "カ"); else if(x == 0xb7) label.append(y == 0xde ? "ギ" : "キ"); else if(x == 0xb8) label.append(y == 0xde ? "グ" : "ク"); else if(x == 0xb9) label.append(y == 0xde ? "ゲ" : "ケ"); else if(x == 0xba) label.append(y == 0xde ? "ゴ" : "コ"); else if(x == 0xbb) label.append(y == 0xde ? "ザ" : "サ"); else if(x == 0xbc) label.append(y == 0xde ? "ジ" : "シ"); else if(x == 0xbd) label.append(y == 0xde ? "ズ" : "ス"); else if(x == 0xbe) label.append(y == 0xde ? "ゼ" : "セ"); else if(x == 0xbf) label.append(y == 0xde ? "ゾ" : "ソ"); else if(x == 0xc0) label.append(y == 0xde ? "ダ" : "タ"); else if(x == 0xc1) label.append(y == 0xde ? "ヂ" : "チ"); else if(x == 0xc2) label.append(y == 0xde ? "ヅ" : "ツ"); else if(x == 0xc3) label.append(y == 0xde ? "デ" : "テ"); else if(x == 0xc4) label.append(y == 0xde ? "ド" : "ト"); else if(x == 0xc5) label.append("ナ"); else if(x == 0xc6) label.append("ニ"); else if(x == 0xc7) label.append("ヌ"); else if(x == 0xc8) label.append("ネ"); else if(x == 0xc9) label.append("ノ"); else if(x == 0xca) label.append(y == 0xdf ? "パ" : y == 0xde ? "バ" : "ハ"); else if(x == 0xcb) label.append(y == 0xdf ? "ピ" : y == 0xde ? "ビ" : "ヒ"); else if(x == 0xcc) label.append(y == 0xdf ? "プ" : y == 0xde ? "ブ" : "フ"); else if(x == 0xcd) label.append(y == 0xdf ? "ペ" : y == 0xde ? "ベ" : "ヘ"); else if(x == 0xce) label.append(y == 0xdf ? "ポ" : y == 0xde ? "ボ" : "ホ"); else if(x == 0xcf) label.append("マ"); else if(x == 0xd0) label.append("ミ"); else if(x == 0xd1) label.append("ム"); else if(x == 0xd2) label.append("メ"); else if(x == 0xd3) label.append("モ"); else if(x == 0xd4) label.append("ヤ"); else if(x == 0xd5) label.append("ユ"); else if(x == 0xd6) label.append("ヨ"); else if(x == 0xd7) label.append("ラ"); else if(x == 0xd8) label.append("リ"); else if(x == 0xd9) label.append("ル"); else if(x == 0xda) label.append("レ"); else if(x == 0xdb) label.append("ロ"); else if(x == 0xdc) label.append("ワ"); else if(x == 0xdd) label.append("ン"); else if(x == 0xde) label.append("\xef\xbe\x9e"); //dakuten else if(x == 0xdf) label.append("\xef\xbe\x9f"); //handakuten //unknown else label.append("?"); //(han)dakuten skip if(y == 0xde && x == 0xb3) n++; if(y == 0xde && x >= 0xb6 && x <= 0xc4) n++; if(y == 0xde && x >= 0xca && x <= 0xce) n++; if(y == 0xdf && x >= 0xca && y <= 0xce) n++; } return label.strip(); } auto SuperFamicom::serial() const -> string { char A = data[headerAddress + 0x02]; //game type char B = data[headerAddress + 0x03]; //game code char C = data[headerAddress + 0x04]; //game code char D = data[headerAddress + 0x05]; //region code (new; sometimes ambiguous) auto valid = [](char n) { return (n >= '0' && n <= '9') || (n >= 'A' && n <= 'Z'); }; if(data[headerAddress + 0x2a] == 0x33 && valid(A) && valid(B) & valid(C) & valid(D)) { return {A, B, C, D}; } return ""; } auto SuperFamicom::romSize() const -> u32 { return size() - firmwareRomSize(); } auto SuperFamicom::programRomSize() const -> u32 { if(board().beginsWith("SPC7110-")) return 0x100000; if(board().beginsWith("EXSPC7110-")) return 0x100000; return romSize(); } auto SuperFamicom::dataRomSize() const -> u32 { if(board().beginsWith("SPC7110-")) return romSize() - 0x100000; if(board().beginsWith("EXSPC7110-")) return 0x500000; return 0; } auto SuperFamicom::expansionRomSize() const -> u32 { if(board().beginsWith("EXSPC7110-")) return 0x100000; return 0; } //detect if any firmware is appended to the ROM image, and return its size if so auto SuperFamicom::firmwareRomSize() const -> u32 { auto cartridgeTypeLo = data[headerAddress + 0x26] & 15; auto cartridgeTypeHi = data[headerAddress + 0x26] >> 4; auto cartridgeSubType = data[headerAddress + 0x0f]; if(serial() == "042J" || (cartridgeTypeLo == 0x3 && cartridgeTypeHi == 0xe)) { //Game Boy if((size() & 0x7fff) == 0x100) return 0x100; } if(cartridgeTypeLo >= 0x3 && cartridgeTypeHi == 0xf && cartridgeSubType == 0x10) { //Hitachi HG51BS169 if((size() & 0x7fff) == 0xc00) return 0xc00; } if(cartridgeTypeLo >= 0x3 && cartridgeTypeHi == 0x0) { //NEC uPD7725 if((size() & 0x7fff) == 0x2000) return 0x2000; } if(cartridgeTypeLo >= 0x3 && cartridgeTypeHi == 0xf && cartridgeSubType == 0x01) { //NEC uPD96050 if((size() & 0xffff) == 0xd000) return 0xd000; } if(cartridgeTypeLo >= 0x3 && cartridgeTypeHi == 0xf && cartridgeSubType == 0x02) { //ARM6 if((size() & 0x3ffff) == 0x28000) return 0x28000; } return 0; } auto SuperFamicom::ramSize() const -> u32 { auto ramSize = data[headerAddress + 0x28] & 7; if(ramSize) return 1024 << ramSize; return 0; } auto SuperFamicom::expansionRamSize() const -> u32 { if(data[headerAddress + 0x2a] == 0x33) { auto ramSize = data[headerAddress + 0x0d] & 7; if(ramSize) return 1024 << ramSize; } if((data[headerAddress + 0x26] >> 4) == 1) { //GSU: Starfox / Starwing lacks an extended header; but still has expansion RAM return 0x8000; } return 0; } auto SuperFamicom::nonVolatile() const -> bool { auto cartridgeTypeLo = data[headerAddress + 0x26] & 15; return cartridgeTypeLo == 0x2 || cartridgeTypeLo == 0x5 || cartridgeTypeLo == 0x6; } auto SuperFamicom::scoreHeader(u32 address) -> u32 { s32 score = 0; if(size() < address + 0x50) return score; u8 mapMode = data[address + 0x25] & ~0x10; //ignore FastROM bit u16 complement = data[address + 0x2c] << 0 | data[address + 0x2d] << 8; u16 checksum = data[address + 0x2e] << 0 | data[address + 0x2f] << 8; u16 resetVector = data[address + 0x4c] << 0 | data[address + 0x4d] << 8; if(resetVector < 0x8000) return score; //$00:0000-7fff is never ROM data u8 opcode = data[(address & ~0x7fff) | (resetVector & 0x7fff)]; //first instruction executed //most likely opcodes if(opcode == 0x78 //sei || opcode == 0x18 //clc (clc; xce) || opcode == 0x38 //sec (sec; xce) || opcode == 0x9c //stz $nnnn (stz $4200) || opcode == 0x4c //jmp $nnnn || opcode == 0x5c //jml $nnnnnn ) score += 8; //plausible opcodes if(opcode == 0xc2 //rep #$nn || opcode == 0xe2 //sep #$nn || opcode == 0xad //lda $nnnn || opcode == 0xae //ldx $nnnn || opcode == 0xac //ldy $nnnn || opcode == 0xaf //lda $nnnnnn || opcode == 0xa9 //lda #$nn || opcode == 0xa2 //ldx #$nn || opcode == 0xa0 //ldy #$nn || opcode == 0x20 //jsr $nnnn || opcode == 0x22 //jsl $nnnnnn ) score += 4; //implausible opcodes if(opcode == 0x40 //rti || opcode == 0x60 //rts || opcode == 0x6b //rtl || opcode == 0xcd //cmp $nnnn || opcode == 0xec //cpx $nnnn || opcode == 0xcc //cpy $nnnn ) score -= 4; //least likely opcodes if(opcode == 0x00 //brk #$nn || opcode == 0x02 //cop #$nn || opcode == 0xdb //stp || opcode == 0x42 //wdm || opcode == 0xff //sbc $nnnnnn,x ) score -= 8; if(checksum + complement == 0xffff) score += 4; if(address == 0x7fb0 && mapMode == 0x20) score += 2; if(address == 0xffb0 && mapMode == 0x21) score += 2; return max(0, score); } auto SuperFamicom::firmwareARM() const -> string { return "ST018"; } auto SuperFamicom::firmwareEXNEC() const -> string { if(label() == "EXHAUST HEAT2") return "ST010"; if(label() == "F1 ROC II") return "ST010"; if(label() == "2DAN MORITA SHOUGI") return "ST011"; return "ST010"; } auto SuperFamicom::firmwareGB() const -> string { if(label() == "Super GAMEBOY") return "SGB1"; if(label() == "Super GAMEBOY2") return "SGB2"; return "SGB1"; } auto SuperFamicom::firmwareHITACHI() const -> string { return "Cx4"; } auto SuperFamicom::firmwareNEC() const -> string { if(label() == "PILOTWINGS") return "DSP1"; if(label() == "DUNGEON MASTER") return "DSP2"; if(label() == "SDガンダムGX") return "DSP3"; if(label() == "PLANETS CHAMP TG3000") return "DSP4"; if(label() == "TOP GEAR 3000") return "DSP4"; return "DSP1B"; } ares-126/mia/medium/supergrafx.cpp000066400000000000000000000002371415063341600172430ustar00rootroot00000000000000struct SuperGrafx : PCEngine { auto name() -> string override { return "SuperGrafx"; } auto extensions() -> vector override { return {"sgx"}; } }; ares-126/mia/medium/wonderswan-color.cpp000066400000000000000000000002541415063341600203570ustar00rootroot00000000000000struct WonderSwanColor : WonderSwan { auto name() -> string override { return "WonderSwan Color"; } auto extensions() -> vector override { return {"wsc"}; } }; ares-126/mia/medium/wonderswan.cpp000066400000000000000000000064141415063341600172470ustar00rootroot00000000000000struct WonderSwan : Cartridge { auto name() -> string override { return "WonderSwan"; } auto extensions() -> vector override { return {"ws"}; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto analyze(vector& rom) -> string; }; auto WonderSwan::load(string location) -> bool { vector rom; if(directory::exists(location)) { append(rom, {location, "program.rom"}); } else if(file::exists(location)) { rom = Cartridge::read(location); } if(!rom) return false; this->location = location; this->manifest = analyze(rom); auto document = BML::unserialize(manifest); if(!document) return false; pak = new vfs::directory; pak->setAttribute("title", document["game/title"].string()); pak->setAttribute("orientation", document["game/orientation"].string()); pak->append("manifest.bml", manifest); pak->append("program.rom", rom); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::load(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::load(node, ".eeprom"); } if(auto node = document["game/board/memory(type=RTC,content=Time)"]) { Medium::load(node, ".rtc"); } return true; } auto WonderSwan::save(string location) -> bool { auto document = BML::unserialize(manifest); if(auto node = document["game/board/memory(type=RAM,content=Save)"]) { Medium::save(node, ".ram"); } if(auto node = document["game/board/memory(type=EEPROM,content=Save)"]) { Medium::save(node, ".eeprom"); } if(auto node = document["game/board/memory(type=RTC,content=Time)"]) { Medium::save(node, ".rtc"); } return true; } auto WonderSwan::analyze(vector& rom) -> string { if(rom.size() < 0x10000) return {}; auto hash = Hash::SHA256(rom).digest(); auto metadata = &rom[rom.size() - 16]; bool color = metadata[7]; string ramType; u32 ramSize = 0; switch(metadata[11]) { case 0x01: ramType = "RAM"; ramSize = 8_KiB; break; case 0x02: ramType = "RAM"; ramSize = 32_KiB; break; case 0x03: ramType = "RAM"; ramSize = 128_KiB; break; case 0x04: ramType = "RAM"; ramSize = 256_KiB; break; case 0x05: ramType = "RAM"; ramSize = 512_KiB; break; case 0x10: ramType = "EEPROM"; ramSize = 128; break; case 0x20: ramType = "EEPROM"; ramSize = 2048; break; case 0x50: ramType = "EEPROM"; ramSize = 1024; break; } bool orientation = metadata[12] & 1; //0 = horizontal; 1 = vertical bool hasRTC = metadata[13] & 1; string s; s += "game\n"; s +={" sha256: ", hash, "\n"}; s +={" name: ", Medium::name(location), "\n"}; s +={" title: ", Medium::name(location), "\n"}; s +={" orientation: ", !orientation ? "horizontal" : "vertical", "\n"}; s += " board\n"; s += " memory\n"; s += " type: ROM\n"; s +={" size: 0x", hex(rom.size()), "\n"}; s += " content: Program\n"; if(ramType && ramSize) { s += " memory\n"; s +={" type: ", ramType, "\n"}; s +={" size: 0x", hex(ramSize), "\n"}; s += " content: Save\n"; } if(hasRTC) { s += " memory\n"; s += " type: RTC\n"; s += " size: 0x10\n"; s += " content: Time\n"; } return s; } ares-126/mia/mia.cpp000066400000000000000000000125471415063341600143520ustar00rootroot00000000000000#include "mia.hpp" namespace mia { function homeLocation = [] { return string{Path::user(), "Emulation/Systems/"}; }; function saveLocation = [] { return string{}; }; vector media; auto locate(string name) -> string { string location = {Path::program(), name}; if(inode::exists(location)) return location; #if defined(PLATFORM_MACOS) location = {Path::program(), "../Resources/", name}; if(inode::exists(location)) return location; #endif directory::create({Path::userData(), "mia/"}); return {Path::userData(), "mia/", name}; } auto operator+=(string& lhs, const string& rhs) -> string& { lhs.append(rhs); return lhs; } #include "settings/settings.cpp" #include "system/system.cpp" #include "medium/medium.cpp" #include "pak/pak.cpp" #if !defined(MIA_LIBRARY) #include "program/program.cpp" #endif auto setHomeLocation(function callback) -> void { homeLocation = callback; } auto setSaveLocation(function callback) -> void { saveLocation = callback; } auto construct() -> void { static bool initialized = false; if(initialized) return; initialized = true; media.append("BS Memory"); media.append("ColecoVision"); media.append("Famicom"); media.append("Famicom Disk"); media.append("Game Boy"); media.append("Game Boy Color"); media.append("Game Boy Advance"); media.append("Game Gear"); media.append("Master System"); media.append("Mega Drive"); media.append("Mega 32X"); media.append("Mega CD"); media.append("MSX"); media.append("MSX2"); media.append("Neo Geo"); media.append("Neo Geo Pocket"); media.append("Neo Geo Pocket Color"); media.append("Nintendo 64"); media.append("Nintendo 64DD"); media.append("PC Engine"); media.append("PC Engine CD"); media.append("PlayStation"); media.append("Pocket Challenge V2"); media.append("Saturn"); media.append("SC-3000"); media.append("SG-1000"); media.append("Sufami Turbo"); media.append("Super Famicom"); media.append("SuperGrafx"); media.append("WonderSwan"); media.append("WonderSwan Color"); } auto identify(const string& filename) -> string { construct(); auto extension = Location::suffix(filename).trimLeft(".", 1L).downcase(); if(extension == "zip") { Decode::ZIP archive; if(archive.open(filename)) { for(auto& file : archive.file) { auto match = Location::suffix(file.name).trimLeft(".", 1L).downcase(); for(auto& medium : media) { auto pak = mia::Medium::create(medium); if(pak->extensions().find(match)) { extension = match; } } } } } for(auto& medium : media) { auto pak = mia::Medium::create(medium); if(pak->extensions().find(extension)) { return pak->name(); } } return {}; //unable to identify } auto import(shared_pointer pak, const string& filename) -> bool { if(pak->load(filename)) { string pathname = {Path::user(), "Emulation/", pak->name(), "/", Location::prefix(filename), ".", pak->extensions().first(), "/"}; if(!directory::create(pathname)) return false; for(auto& node : *pak->pak) { if(auto input = node.cast()) { if(input->name() == "manifest.bml" && !settings.createManifests) continue; if(auto output = file::open({pathname, input->name()}, file::mode::write)) { while(!input->end()) output.write(input->read()); } } } return true; } return false; } auto main(Arguments arguments) -> void { #if !defined(MIA_LIBRARY) Application::setName("mia"); #endif construct(); if(auto document = file::read(locate("settings.bml"))) { settings.unserialize(document); } if(arguments.take("--name")) { return print("mia"); } if(string filename; arguments.take("--identify", filename)) { return print(identify(filename), "\n"); } if(string system; arguments.take("--system", system)) { auto pak = mia::Medium::create(system); if(!pak) return; if(string manifest; arguments.take("--manifest", manifest)) { if(pak->load(manifest)) { if(auto fp = pak->pak->read("manifest.bml")) return print(fp->reads()); } return; } if(string import; arguments.take("--import", import)) { return (void)mia::import(pak, import); } #if !defined(MIA_LIBRARY) if(arguments.take("--import")) { if(auto import = BrowserDialog() .setTitle({"Import ", system, " Game"}) .setPath(settings.recent) .setAlignment(Alignment::Center) .openFile() ) { if(!mia::import(pak, import)) { MessageDialog() .setTitle("Error") .setAlignment(Alignment::Center) .setText({"Failed to import: ", Location::file(import)}) .error(); } } return; } #endif } #if !defined(MIA_LIBRARY) Instances::programWindow.construct(); #if defined(PLATFORM_MACOS) Application::Cocoa::onAbout([&] { programWindow.aboutAction.doActivate(); }); Application::Cocoa::onPreferences([&] {}); Application::Cocoa::onQuit([&] { Application::quit(); }); #endif programWindow.setVisible(); Application::run(); Instances::programWindow.destruct(); #endif file::write(locate("settings.bml"), settings.serialize()); } } #if !defined(MIA_LIBRARY) #include auto nall::main(Arguments arguments) -> void { mia::main(arguments); } #endif ares-126/mia/mia.hpp000066400000000000000000000015711415063341600143520ustar00rootroot00000000000000#include #include #include #include #include #include using namespace nall; #if !defined(MIA_LIBRARY) #include using namespace hiro; #endif #include #include namespace mia { #include "settings/settings.hpp" #include "pak/pak.hpp" #include "system/system.hpp" #include "medium/medium.hpp" #if !defined(MIA_LIBRARY) #include "program/program.hpp" #endif extern function homeLocation; extern function saveLocation; auto setHomeLocation(function) -> void; auto setSaveLocation(function) -> void; auto construct() -> void; auto identify(const string& filename) -> string; auto import(shared_pointer, const string& filename) -> bool; } ares-126/mia/obj/000077500000000000000000000000001415063341600136415ustar00rootroot00000000000000ares-126/mia/obj/.gitignore000066400000000000000000000000161415063341600156260ustar00rootroot00000000000000* !.gitignore ares-126/mia/out/000077500000000000000000000000001415063341600136765ustar00rootroot00000000000000ares-126/mia/out/.gitignore000066400000000000000000000000161415063341600156630ustar00rootroot00000000000000* !.gitignore ares-126/mia/pak/000077500000000000000000000000001415063341600136425ustar00rootroot00000000000000ares-126/mia/pak/pak.cpp000066400000000000000000000112341415063341600151220ustar00rootroot00000000000000auto Pak::create(string name) -> shared_pointer { auto pak = new Pak; pak->pak = new vfs::directory; pak->pak->setAttribute("name", name); pak->pak->setAttribute("type", "Pak"); return pak; } auto Pak::name(string location) const -> string { return Location::prefix(location); } auto Pak::read(string location) -> vector { //attempt to match known extensions auto extensions = this->extensions(); for(auto& extension : extensions) extension.prepend("*."); auto memory = read(location, extensions); //failing that, read whatever exists if(!memory) memory = read(location, {"*"}); return memory; } auto Pak::read(string location, vector match) -> vector { vector memory; vector patch; if(file::exists(location)) { //support BPS patches next to the file patch = file::read({Location::notsuffix(location), ".bps"}); if(location.iendsWith(".zip")) { Decode::ZIP archive; if(archive.open(location)) { for(auto& file : archive.file) { for(auto& pattern : match) { if(file.name.imatch(pattern)) { memory = archive.extract(file); break; } } if(memory) break; } if(memory) { //support BPS patches inside the ZIP archive for(auto& file : archive.file) { if(file.name.imatch("*.bps")) { patch = archive.extract(file); break; } } } } } else { for(auto& pattern : match) { if(location.imatch(pattern)) { memory = file::read(location); break; } } } } //attempt to apply BPS patch if one was found if(patch) { if(auto output = Beat::Single::apply(memory, patch)) { memory = move(*output); } } return memory; } auto Pak::append(vector& output, string filename) -> bool { if(!file::exists(filename)) return false; auto input = file::read(filename); auto size = output.size(); output.resize(size + input.size()); memory::copy(output.data() + size, input.data(), input.size()); return true; } auto Pak::load(string name, string extension, string location) -> bool { if(!pak) return false; if(!location) location = this->location; if(auto load = pak->write(name)) { if(auto memory = file::read(saveLocation(location, name, extension))) { load->write(memory); load->setAttribute("loaded", true); return true; } } return false; } auto Pak::save(string name, string extension, string location) -> bool { if(!pak) return false; if(!location) location = this->location; if(auto save = pak->read(name)) { directory::create(Location::dir(saveLocation(location, name, extension))); if(auto fp = file::open(saveLocation(location, name, extension), file::mode::write)) { fp.write({save->data(), save->size()}); return true; } } return true; } auto Pak::load(Markup::Node node, string extension, string location) -> bool { string name; if(auto architecture = node["architecture"].string()) name.append(architecture, "."); name.append(node["content"].string(), "."); name.append(node["type"].string()); name.downcase(); auto size = node["size"].natural(); pak->append(name, size); if(auto fp = pak->write(name)) { //pak->append() will allocate memory using 0x00 bytes. //but it's more compatible to initialize RAM to 0xff bytes. memory::fill(fp->data(), fp->size(), 0xff); } return load(name, extension, location); } auto Pak::save(Markup::Node node, string extension, string location) -> bool { string name; if(auto architecture = node["architecture"].string()) name.append(architecture, "."); name.append(node["content"].string(), "."); name.append(node["type"].string()); name.downcase(); auto size = node["size"].natural(); return save(name, extension, location); } auto Pak::saveLocation(string location, string name, string extension) -> string { string saveLocation; if(auto path = mia::saveLocation()) { //if the user has chosen a specific location to save files to ... saveLocation = {path, this->name(), "/", Location::prefix(location), extension}; } else if(directory::exists(location)) { //if this is a pak ... saveLocation = {location, name}; } else if(file::exists(location)) { //if this is a ROM ... saveLocation = {Location::notsuffix(location), extension}; } else { //if no path information is available ... saveLocation = {mia::homeLocation(), "Saves/", this->name(), ".", extension, "/", name}; } //try to ensure the directory exists ... directory::create(Location::path(saveLocation)); return saveLocation; } ares-126/mia/pak/pak.hpp000066400000000000000000000021271415063341600151300ustar00rootroot00000000000000struct Pak { static auto create(string name) -> shared_pointer; virtual ~Pak() = default; virtual auto type() -> string { return pak->attribute("type"); } virtual auto name() -> string { return pak->attribute("name"); } virtual auto extensions() -> vector { return {}; } virtual auto load(string location = {}) -> bool { return true; } virtual auto save(string location = {}) -> bool { return true; } auto name(string location) const -> string; auto read(string location) -> vector; auto read(string location, vector match) -> vector; auto append(vector& data, string location) -> bool; auto load(string name, string extension, string location = {}) -> bool; auto save(string name, string extension, string location = {}) -> bool; auto load(Markup::Node node, string extension, string location = {}) -> bool; auto save(Markup::Node node, string extension, string location = {}) -> bool; auto saveLocation(string location, string name, string extension) -> string; string location; string manifest; shared_pointer pak; }; ares-126/mia/program/000077500000000000000000000000001415063341600145365ustar00rootroot00000000000000ares-126/mia/program/game-importer.cpp000066400000000000000000000033111415063341600200100ustar00rootroot00000000000000GameImporter::GameImporter(View* parent) : Panel(parent, Size{~0, ~0}) { setCollapsible().setVisible(false); importList.onChange([&] { eventChange(); }); abortButton.setCollapsible().setText("Abort").onActivate([&] { processing = false; }); closeButton.setCollapsible().setText("Close").onActivate([&] { eventClose(); }); } auto GameImporter::import(string system, const vector& files) -> void { importList.reset(); abortButton.setVisible(true); closeButton.setVisible(false); resize(); systemSelection.setEnabled(false); programWindow.show(*this); processing = true; u32 index = 1; for(auto& file : files) { if(!processing) break; messageLabel.setText({"[", index++, "/", files.size(), "] Importing ", Location::file(file), " ..."}); Application::processEvents(); ListViewItem item{&importList}; auto pak = mia::Medium::create(system); if(mia::import(pak, file)) { item.setIcon(Icon::Action::Add); } else { item.setIcon(Icon::Action::Close); item.setForegroundColor({192, 0, 0}); } item.setText(Location::file(file)); importList.resizeColumn(); } processing = false; messageLabel.setText("Completed."); abortButton.setVisible(false); closeButton.setVisible(true); resize(); systemSelection.setEnabled(true); } auto GameImporter::eventChange() -> void { if(processing) return; if(auto item = importList.selected()) { if(auto error = item.attribute("error")) { messageLabel.setText({"Error: ", error, "."}); } else { messageLabel.setText("OK."); } } else { messageLabel.setText("Completed."); } } auto GameImporter::eventClose() -> void { if(processing) return; gameManager.refresh(); } ares-126/mia/program/game-importer.hpp000066400000000000000000000010471415063341600200210ustar00rootroot00000000000000struct GameImporter : Panel { GameImporter(View*); auto import(string system, const vector& files) -> void; auto eventChange() -> void; auto eventClose() -> void; Label messageLabel{this, Size{~0, 0}}; ListView importList{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}}; Button abortButton{&controlLayout, Size{80_sx, 0}}; Button closeButton{&controlLayout, Size{80_sx, 0}}; bool processing = false; }; extern GameImporter& gameImporter; ares-126/mia/program/game-manager.cpp000066400000000000000000000032731415063341600175700ustar00rootroot00000000000000GameManager::GameManager(View* parent) : Panel(parent, Size{~0, ~0}) { setCollapsible().setVisible(false); pathLabel.setFont(Font().setBold()).setForegroundColor({0, 0, 240}); pathLabel.onMouseRelease([&](auto button) { if(!path || button != Mouse::Button::Left) return; if(auto location = BrowserDialog() .setTitle({"Set ", system, " Games Location"}) .setPath(path) .setAlignment(programWindow) .selectFolder() ) { path = location; pathLabel.setText(string{path}.replace(Path::user(), "~/")); refresh(); } }); importButton.setText("Import ...").onActivate([&] { auto pak = mia::Medium::create(system); auto extensions = pak->extensions(); for(auto& extension : extensions) extension.prepend("*."); if(auto files = BrowserDialog() .setTitle({"Import ", system, " Games"}) .setPath(settings.recent) .setFilters({{system, "|", extensions.merge(":"), ":*.zip:", extensions.merge(":").upcase(), ":*.ZIP"}, "All|*"}) .setAlignment(programWindow) .openFiles() ) { settings.recent = Location::path(files.first()); gameImporter.import(system, files); } }); } auto GameManager::select(string system) -> void { path = {Path::user(), "Emulation/", system, "/"}; pathLabel.setText(string{path}.replace(Path::user(), "~/")); this->system = system; refresh(); } auto GameManager::refresh() -> void { gameList.reset(); if(!path) return; for(auto& name : directory::folders(path)) { ListViewItem item{&gameList}; item.setIcon(Icon::Emblem::Folder); item.setText(string{name}.trimRight("/", 1L)); } programWindow.show(*this); Application::processEvents(); gameList.resizeColumn(); } ares-126/mia/program/game-manager.hpp000066400000000000000000000006561415063341600175770ustar00rootroot00000000000000struct GameManager : Panel { GameManager(View*); auto select(string system) -> void; auto refresh() -> void; Label pathLabel{this, Size{~0, 0}}; ListView gameList{this, Size{~0, ~0}}; HorizontalLayout controlLayout{this, Size{~0, 0}}; Widget controlSpacer{&controlLayout, Size{~0, 0}}; Button importButton{&controlLayout, Size{80_sx, 0}}; string system; string path; }; extern GameManager& gameManager; ares-126/mia/program/home.cpp000066400000000000000000000007571415063341600162030ustar00rootroot00000000000000Home::Home(View* parent) : Panel(parent, Size{~0, ~0}) { setCollapsible().setVisible(false); image icon{Resource::Ares::Icon}; icon.shrink(); for(u32 y : range(icon.height())) { auto data = icon.data() + y * icon.pitch(); for(u32 x : range(icon.width())) { u8 alpha = icon.read(data) >> 24; icon.write(data, u8(alpha * 0.15) << 24); data += icon.stride(); } } icon.scale(sx(icon.width() * 0.75), sy(icon.height() * 0.75)); iconCanvas.setIcon(icon); } ares-126/mia/program/home.hpp000066400000000000000000000001771415063341600162040ustar00rootroot00000000000000struct Home : Panel { Home(View*); Frame frame{this, Size{~0, ~0}}; Canvas iconCanvas{&frame}; }; extern Home& home; ares-126/mia/program/program.cpp000066400000000000000000000051451415063341600167160ustar00rootroot00000000000000#include "system-selection.cpp" #include "home.cpp" #include "game-manager.cpp" #include "game-importer.cpp" namespace Instances { Instance programWindow; } ProgramWindow& programWindow = Instances::programWindow(); SystemSelection& systemSelection = programWindow.systemSelection; Home& home = programWindow.home; GameManager& gameManager = programWindow.gameManager; GameImporter& gameImporter = programWindow.gameImporter; ProgramWindow::ProgramWindow() { actionMenu.setText("Action"); quitAction.setIcon(Icon::Action::Quit).setText("Quit").onActivate([&] { doClose(); }); settingsMenu.setText("Settings"); createManifests.setText("Create Manifests").setChecked(settings.createManifests).onToggle([&] { settings.createManifests = createManifests.checked(); }); useDatabase.setText("Use Database").setChecked(settings.useDatabase).onToggle([&] { settings.useDatabase = useDatabase.checked(); }); useHeuristics.setText("Use Heuristics").setChecked(settings.useHeuristics).onToggle([&] { settings.useHeuristics = useHeuristics.checked(); }); helpMenu.setText("Help"); aboutAction.setIcon(Icon::Prompt::Question).setText("About ...").onActivate([&] { image logo{Resource::Ares::Logo}; logo.shrink(); AboutDialog() .setName({ares::Name, "/mia"}) .setLogo(logo) .setDescription({ares::Name, "/mia — a game analyzer and converter"}) .setVersion(ares::Version) .setCopyright(ares::Copyright) .setLicense(ares::License, ares::LicenseURI) .setWebsite(ares::Website, ares::WebsiteURI) .setAlignment(*this) .show(); }); panels.setPadding(5_sx, 5_sy); for(auto& cell : panels.cells()) cell.setSpacing(0); resizeGrip.onActivate([&] { resizeWidth = panels.cell(systemSelection).size().width(); }); resizeGrip.onResize([&](auto offset) { float min = 128_sx, max = panels.geometry().width() - 128_sx; float width = resizeWidth + offset; width = width < min ? min : width > max ? max : width; if(panels.cell(systemSelection).size().width() != width) { panels.cell(systemSelection).setSize({width, ~0}); panels.resize(); } }); systemSelection.setVisible(true); show(home); onClose(&Application::quit); setTitle({"mia v", ares::Version}); setSize({860_sx, 605_sy}); setAlignment(Alignment::Center); setVisible(); } auto ProgramWindow::show(Panel& panel) -> void { if(activePanel && *activePanel == panel) return; if(activePanel) activePanel->setVisible(false); activePanel = panel; activePanel->setVisible(true); panels.resize(); } auto ProgramWindow::hide(Panel& panel) -> void { show(home); } ares-126/mia/program/program.hpp000066400000000000000000000020721415063341600167170ustar00rootroot00000000000000struct Panel : VerticalLayout { using VerticalLayout::VerticalLayout; }; using View = HorizontalLayout; #include "system-selection.hpp" #include "home.hpp" #include "game-manager.hpp" #include "game-importer.hpp" struct ProgramWindow : Window { ProgramWindow(); auto show(Panel&) -> void; auto hide(Panel&) -> void; MenuBar menuBar{this}; Menu actionMenu{&menuBar}; MenuItem quitAction{&actionMenu}; Menu settingsMenu{&menuBar}; MenuCheckItem createManifests{&settingsMenu}; MenuCheckItem useDatabase{&settingsMenu}; MenuCheckItem useHeuristics{&settingsMenu}; Menu helpMenu{&menuBar}; MenuItem aboutAction{&helpMenu}; HorizontalLayout panels{this}; SystemSelection systemSelection{&panels}; HorizontalResizeGrip resizeGrip{&panels, Size{7, ~0}}; Home home{&panels}; GameManager gameManager{&panels}; GameImporter gameImporter{&panels}; maybe activePanel; float resizeWidth = 0; }; namespace Instances { extern Instance programWindow; } extern ProgramWindow& programWindow; ares-126/mia/program/system-selection.cpp000066400000000000000000000006651415063341600205600ustar00rootroot00000000000000SystemSelection::SystemSelection(View* view) : Panel(view, Size{155_sx, ~0}) { setCollapsible().setVisible(false); for(auto& medium : media) { ListViewItem item{&systemList}; item.setText(medium); } systemList.onChange([&] { eventChange(); }); } auto SystemSelection::eventChange() -> void { if(auto item = systemList.selected()) { gameManager.select(item.text()); } else { programWindow.show(home); } } ares-126/mia/program/system-selection.hpp000066400000000000000000000002621415063341600205560ustar00rootroot00000000000000struct SystemSelection : Panel { SystemSelection(View*); auto eventChange() -> void; ListView systemList{this, Size{~0, ~0}}; }; extern SystemSelection& systemSelection; ares-126/mia/resource/000077500000000000000000000000001415063341600147165ustar00rootroot00000000000000ares-126/mia/resource/GNUmakefile000066400000000000000000000001401415063341600167630ustar00rootroot00000000000000all: sourcery resource.bml resource.cpp resource.hpp clean: rm resource.cpp rm resource.hpp ares-126/mia/resource/mia.Manifest000066400000000000000000000015231415063341600171550ustar00rootroot00000000000000 true/pm PerMonitorV2, PerMonitor ares-126/mia/resource/mia.desktop000066400000000000000000000001661415063341600170620ustar00rootroot00000000000000[Desktop Entry] Name=mia Comment=Emulator Exec=mia Icon=mia Terminal=false Type=Application Categories=Game;Emulator; ares-126/mia/resource/mia.ico000066400000000000000000000626711415063341600161740ustar00rootroot00000000000000 hF  00 %V *:(  IN.ks+.ks+IN.25|9ISWWSI5|9.1!MS*-BuW_`aa`_WBu+-!MS.1Bu[a__````aZBu.1A6~:VYOƽIJOƽY```aW5}:@GN6C#& #& 6~CO_``_IIN70px#=<(]d O```SFK +.)%(I7DY`aW.ks*59  Pǽ`aW.ks+J_`SFKJ__I59  PǽaW5}:@I8DY[Bu.1 B-ho"NVBu+.!MS:$&(7G6~9.2  JO(++.?( @ #%)582582#%)%('(^dm9EKOOKD9(^dm&)''*&0owHW_aaaaaa_WH/ow')& "OU[DZaa````````aaZD"OU[ *cj|O````````````````O*cj| *cj|Ra````````````````aR*cj| w"PV[Oa```aaaa```````````aO"PU[t47#%'D``a_YSPPSY_a``````````D"%'470pxZa\L9)`frCHJ48:48:CHJ)`gr9L\a````````Z0px,/"$(HaQ3w.17.163wQ````````aH"$(,/L)_fmWI LQ]   LQ]H_``````aW(^emK:G=BH=AHH```````_9 0px$U[`!MS]Qa`````aE  *$&  3x\`````aK#%)"$>C038La````aO582489_````aO59248X*ahrY````aK#%)"%#SXDIKSa```aE 7;48:Pa```_97;48:Pa``aW(^emL#RXDIKSa``aH"$(,/W)ahrY```Z0px9_```D#%'48>B/37La`aO"PV[u3x\`aR*cj| !MS]Qa`O*cj| =AHIaZD"OU[ #RX_GWH0ow'*&"$0px9)_fn&)(* ?~?(0` $+: ? ?:+ C=B)`g5}>DGGD>5})`g=A C"47v/mtDT\`aaaaaa`\TD/mu48v" 36u5{O^aa``````````aa^P4z26u  @*cjM_a````````````````a_M*cj @+.i:[a````````````````````a[:,/i 8<D_````````````````````````_D8< 8<Ga``````````````````````````aG8<,/iDa````````````````````````````aD,/i/2A:_``````````````````````````````_: A.2+cj[`````aa`^]]^`aa`````````````````[*cj47vMa``aaZM?4x,go)_f)_f,ho4y?MZaa``````````````aM37u #5{_```T;#RX$&a2  1$&a#QW;T```````````````_5{" M59vPaaY;<@//=A;Ya````````````aP59vL/nv^aO&X_ : :&X^Oa````````````^/nu  DEbH;?;?H````````````aDC T?CUH25}  25}Ha``````````aT>BR+dlK+4y>BTa````````aD:  0;a````````aG > #RXZ````````aG > @E%'aMa```````aD:1?a```````a>+4y`````````6} ,ho^```````\)ah)_f]``````aT>BS)_f]``````aDD  ,go^``````^/nv4x``````aP59vM1?a`````_5{" ?D%'aMa````aM47u#RXZ`````[+cj 0;a````_; A/2>BTa```aD,/i  :;````aG8<&Y_Y```_D8<  <@Oa`a[:,/i 25|Gaa_M+cj A;@Hb^P5{37v :&Y`KUE/nv58w# x+.-iq+dk>B D 4 -????PNG  IHDR\rf*IDATxyxT$ɾ%-dMPj*֪UVk?[kRUq /a' aIBd#{2qfIf3B/Mk8fD[BB =s3hFց*܂X`*050GI8L[nP;tiy}?Frpvg @='8᫤ ZNs1PvhxR`30lЙSҊL1޸xXh7MHlOaXP]dTҀ%W|LGwեM9歡c0 `z VQ[k2f{]ZatFmm?5m+}t/Y :֥խnL4oV <,w]YŠvG~M%VC[϶?:h6ެcµ)DY33Xry |`p\)ĐsldEE>_vYGmYS3Z@"-wƚq2OosKg$i]b;2N UZH @BOW5fwFXaLƲU'yV7.ϳK@4`/i ֟8wvBhhPV9_9+8z=\$@}Mʤ$G|$gO݅Dtێ0{ݘm۵ OЪ2a̸!5 z %Z p7jam?\eZwǙX= q& BNǹ#;g5ņĺZ;sɷ/ *X -JԼ7 ֯wz@[}!79@js?\Dxfet!7 @e?LJ' I8*upNy-3:i]!(<]n,Ѻ^#Z(?5aкBv f f"{P[iUJal|X&^ucڱ\*@ |W:`?-Ƞ/q3Nv9O<' 7UQֱCmH5u|" wmWߧue._ cZ9T Дf^*Ѻ2c2]H5$@7256Z}v!sK$d&Hb!bMzM~+s%>9yT"Pt*Lۆ6 FmEu,}m)dqJF qBUzHd@M9=TUyO `ЁjU:H@Z[]lq5fP ٳ ؊Jx5dPZ~DEHs|je$ƛxÞM޼h6[RԜպ2W'wu'1ޑVi5g"Qv:w3[zz! dyfi+Wh]uϝNrLz Jv# "T|[¯dzxD PXTs8kv{D 0-eu>JB~tg?0ה nZW)AXVӺ2M:o{zD -׺2M7xZD A $huŸw͐ Q*3)~0+e4,@|(W ¤)u$@U P`G[LHպ2##,s˶kzN -к"оc#*KPI& лGB֕ `Ԛy&KئZJK اZ'\ۮ֕VIaBk\)K4BcI xW E:$;Z.rHĀʙG.1ZWƓN\)G$hiӴG82Iƞ3:N]'I @M :&XG  VwK֦PxS E "P|ϝ]ݶq`cӞ"Ϛq{h]Os .D HĖ+Vz]?2\+6^ -ؚ>3`iaAW0vD7F[V_!PKL({|_x /z'H @P`@İ]R#],o_rgsXՠue{oJ< ϻkV+M 48wHPٳQrh1=֯EoJ]Gc~QD1[ RvGDk]!o++w>47W 7_/h1QZğڿ;l}\"Z~M>u[Pb:Ǘj8چɾsn(Ssݿ?uRRg]) 6!޴v<56+' iZ]1+2 F 6tmGN ]utc#M'NTs_j@' ] yUcj8P[7umk;s,=bY?a!ZWHKEs'*u1>5$a0o[ʒ9vCWrK D^%C%u;۩>"'ƶ0oRW+'+s[`v`ppq2Ѣuhձ/8hX㮔jNdGU.MD71d2j])_`׀|ƅG `Č v8M`!Mؾk{]).ޛ0b8b;| [6!0IɐoS`QG '@%*d]$+jB01.nd(Zx}Tnɇ-2FvoY\4Oj;l|<,}ӵ/w{'ZoKͿ<3dt؍e9fs4J }X=jyun/>d2m7!Ɩ'44({Sh]!_eۉ .qL;OQt _ rT2# 0 x t[2Ԓ_Nmm#{;lt,;wMwI1i1`>':P7ʘ.k])_c>ٺeh|6$xKl+DX3OJrήe+`[y{>)u3 D˒;4G9\J27esZ i0_9Kۯ=_:a`^D ,< iݛ/u|Y]}#3o\)˙;W  -_tÈ]Ã}%? bP7knXp<3r~];4ZNҹC/3 X dq)[~1u^cZ=ՈO/| `UAgظbF-So6n mքtHڒzfߖWs9ͨ{-y?X©!z7t-"C+;f3ZW䟪`vp;vwX *i+O\?2t˦1}t*ҍvs EM\i  JK^Zβv`\XN'19m j(ӆlT.4Ú'>|#QlVԲ_6o+nNoBsA | RL4*OPo?UENǨ\ R<X,V>[ּte?v!TGF|_"jSg܁G$XBw5SOl~ҩݲrFtv:[ْw CuǁZ՗ƊIֺb%{(77sylq.kc{fgO5 l@m?졺3)y{;Y|kc뿏=q O v Sam-j%am51BSPSSAzۺj0Y ;75<`xPm c͞}%9oYj1T6 QxGB G|4QxlЏ):SjO\Ǔ1oa<ػG\ݳ_7Zyc[X"j 먛گwݳKW`<`!P ·..s0Lww^ϐJ'lF#PP;{V6e4ǩ\,u<j^K>)9C I,3$;遹!T޾` `mlʛ^d}_c,_tÑh=Gzw`+0ÿ_Kpj@lq7YaaAZW0мX,VP~^䵼R`Rhh6L|xxoaNÿls:n /d,N1 ]wy=-=? 90ݓF3k6[42lP+]5q?+6:\\ qtoft<ÖO4jXr{Kpq@xYnSRZW: {}rՊs3"oΪ$e:O1h]@W[H8}TkeU5fڴ_/O yZǴȨ>\yXT:`**IE>pڅK^M8nUl-KNJ.BM77݃g5ڴcڛ pVQY__v:}{ &pƫ$f\csP>G~Dpϋjj?!ԼOnf_n.& 'ww3-?f˅#!|k Qm%|Q"0˅-?KVa;{Y$E6>~YG޸7q8{DxyrW?KVHolT?l* 6g>!_AW0ubjӿѶnRU@QLq-~TZWOso69_{z%g_yzSfQbPEjnFCu@ C%TʨtNWҷW_?'z|{xvoFuEz4ޑlFZ%z WfX-+e5P-ml .:5>PyrB(j]|@OXC֦;ƍCqgk?**@ K0?ݕqUzE/>d电]?+DCb{p(󛢄޽m@2jL{Q 1svɟ6);n޺UX֯yo')yVM$^ϦЧl XtU'|u^Mց¢gzMpdS=U0})Lbp{0fi3]@'|߁҆#KbIMz/0VK1GXcQ{&FFG?e -cեs-{N3hU{1̘aUedfC o.d'GK@ iψNiQl\>ISScf8vTpR:VXZVGeUh2&GkҺNu:XnLe 3:ɬ{_=k3.W)xOiB4ǙZO̞ 5ף~z=yW! >~JD7?3g{Qc= 6ȀZIf{w?h]'gAuR|z0~s!3\l8ZɄ MJe풩i-1SEiءu.K~ jAB\t8ۋZ߿Z&\+S{WX1_i|/Pwe̠B_vlgsIzrDxntuO<>|\YbS?Ƞ~2<(|ǖmE̸cuDuc}>~69~͑\M-Xr_J7?O,~P3'+h iJKjAm:c2~ן\lE[Qo~Co0"ZSLm9'oDOԺ^MoJ*0c4$9[R_s+GZ׫1jb%JJX&* ;S\;VRǵWsk5< +:SU'2!i ):S9+l/׮sS=ЧeNru)DGIva~OVrí9hH\mL6&LyUS?o~`jHstEe>?ʠ~I$Gh]/:;VPtƑ#iY5h<}KdȴaOr}9vﵢֺ^H`pl>[z CwS]!㵷gLJaFzIzSPӁ [ )<]͸Q AhG~_ɲ/)XsqE {7lغ+ Ѻn- 0 )!_01(.aB~8o gK|67 HpV0PUmfD1o@X*{m~_l\yRK^Ǝl˫AVl%;S\˃oyS<- -)G=I% ù~E-[ybsp3Ar]R^Uf}~:FmCP?GUScOo7ml?.0ڵZZ -.A,@ZHPƎlumZ~y9T=릅@u6m@9t'- IIi~6w:Nu.V8/E9mNZOjEe֏&sclx muRKo8kJ4~b@D ~iϾb~L&3ObI߀$^ǝu7#1ޤuU(:S^rX  /i]KV+=ylX=Q^6_TYKײ}<:EV`u5.sLk]>;fWh]G_%L@%m?:)GbBEFХn] @Sg> q&s3gP\RyU;[T~?O-NZ!,n?b40sJEzh~; >\yM|x'^_$PC1Ԩ2t&O!XlaʓQ68?r78&%r4~p{:dRQ=No|u=ꎚd2Ԥv`Tڶ ׺>)T~yKccϮշy6<#5txj^cP$nƔ۷`WPŒN闹lqފ_یK+y'/fXƏNfd l1879UkY&.c٨{s ]P3<z$؋ZMkpPy[(*Y)\ @{Y"~ YjElp~m#j݊zB!B!B!B!B!B!B!-q/IENDB`ares-126/mia/resource/mia.plist000066400000000000000000000010201415063341600165320ustar00rootroot00000000000000 CFBundleIdentifier dev.ares.mia CFBundleDisplayName mia CFBundleExecutable mia CFBundleIconFile mia.icns NSHighResolutionCapable NSSupportsAutomaticGraphicsSwitching ares-126/mia/resource/mia.png000066400000000000000000000256231415063341600162020ustar00rootroot00000000000000PNG  IHDR\rfgAMA a cHRMz&u0`:pQ<bKGDC pHYs``kBtIME Ow~*IDATxyxT$ɾ%-dMPj*֪UVk?[kRUq /a' aIBd#{2qfIf3B/Mk8fD[BB =s3hFց*܂X`*050GI8L[nP;tiy}?Frpvg @='8᫤ ZNs1PvhxR`30lЙSҊL1޸xXh7MHlOaXP]dTҀ%W|LGwեM9歡c0 `z VQ[k2f{]ZatFmm?5m+}t/Y :֥խnL4oV <,w]YŠvG~M%VC[϶?:h6ެcµ)DY33Xry |`p\)ĐsldEE>_vYGmYS3Z@"-wƚq2OosKg$i]b;2N UZH @BOW5fwFXaLƲU'yV7.ϳK@4`/i ֟8wvBhhPV9_9+8z=\$@}Mʤ$G|$gO݅Dtێ0{ݘm۵ OЪ2a̸!5 z %Z p7jam?\eZwǙX= q& BNǹ#;g5ņĺZ;sɷ/ *X -JԼ7 ֯wz@[}!79@js?\Dxfet!7 @e?LJ' I8*upNy-3:i]!(<]n,Ѻ^#Z(?5aкBv f f"{P[iUJal|X&^ucڱ\*@ |W:`?-Ƞ/q3Nv9O<' 7UQֱCmH5u|" wmWߧue._ cZ9T Дf^*Ѻ2c2]H5$@7256Z}v!sK$d&Hb!bMzM~+s%>9yT"Pt*Lۆ6 FmEu,}m)dqJF qBUzHd@M9=TUyO `ЁjU:H@Z[]lq5fP ٳ ؊Jx5dPZ~DEHs|je$ƛxÞM޼h6[RԜպ2W'wu'1ޑVi5g"Qv:w3[zz! dyfi+Wh]uϝNrLz Jv# "T|[¯dzxD PXTs8kv{D 0-eu>JB~tg?0ה nZW)AXVӺ2M:o{zD -׺2M7xZD A $huŸw͐ Q*3)~0+e4,@|(W ¤)u$@U P`G[LHպ2##,s˶kzN -к"оc#*KPI& лGB֕ `Ԛy&KئZJK اZ'\ۮ֕VIaBk\)K4BcI xW E:$;Z.rHĀʙG.1ZWƓN\)G$hiӴG82Iƞ3:N]'I @M :&XG  VwK֦PxS E "P|ϝ]ݶq`cӞ"Ϛq{h]Os .D HĖ+Vz]?2\+6^ -ؚ>3`iaAW0vD7F[V_!PKL({|_x /z'H @P`@İ]R#],o_rgsXՠue{oJ< ϻkV+M 48wHPٳQrh1=֯EoJ]Gc~QD1[ RvGDk]!o++w>47W 7_/h1QZğڿ;l}\"Z~M>u[Pb:Ǘj8چɾsn(Ssݿ?uRRg]) 6!޴v<56+' iZ]1+2 F 6tmGN ]utc#M'NTs_j@' ] yUcj8P[7umk;s,=bY?a!ZWHKEs'*u1>5$a0o[ʒ9vCWrK D^%C%u;۩>"'ƶ0oRW+'+s[`v`ppq2Ѣuhձ/8hX㮔jNdGU.MD71d2j])_`׀|ƅG `Č v8M`!Mؾk{]).ޛ0b8b;| [6!0IɐoS`QG '@%*d]$+jB01.nd(Zx}Tnɇ-2FvoY\4Oj;l|<,}ӵ/w{'ZoKͿ<3dt؍e9fs4J }X=jyun/>d2m7!Ɩ'44({Sh]!_eۉ .qL;OQt _ rT2# 0 x t[2Ԓ_Nmm#{;lt,;wMwI1i1`>':P7ʘ.k])_c>ٺeh|6$xKl+DX3OJrήe+`[y{>)u3 D˒;4G9\J27esZ i0_9Kۯ=_:a`^D ,< iݛ/u|Y]}#3o\)˙;W  -_tÈ]Ã}%? bP7knXp<3r~];4ZNҹC/3 X dq)[~1u^cZ=ՈO/| `UAgظbF-So6n mքtHڒzfߖWs9ͨ{-y?X©!z7t-"C+;f3ZW䟪`vp;vwX *i+O\?2t˦1}t*ҍvs EM\i  JK^Zβv`\XN'19m j(ӆlT.4Ú'>|#QlVԲ_6o+nNoBsA | RL4*OPo?UENǨ\ R<X,V>[ּte?v!TGF|_"jSg܁G$XBw5SOl~ҩݲrFtv:[ْw CuǁZ՗ƊIֺb%{(77sylq.kc{fgO5 l@m?졺3)y{;Y|kc뿏=q O v Sam-j%am51BSPSSAzۺj0Y ;75<`xPm c͞}%9oYj1T6 QxGB G|4QxlЏ):SjO\Ǔ1oa<ػG\ݳ_7Zyc[X"j 먛گwݳKW`<`!P ·..s0Lww^ϐJ'lF#PP;{V6e4ǩ\,u<j^K>)9C I,3$;遹!T޾` `mlʛ^d}_c,_tÑh=Gzw`+0ÿ_Kpj@lq7YaaAZW0мX,VP~^䵼R`Rhh6L|xxoaNÿls:n /d,N1 ]wy=-=? 90ݓF3k6[42lP+]5q?+6:\\ qtoft<ÖO4jXr{Kpq@xYnSRZW: {}rՊs3"oΪ$e:O1h]@W[H8}TkeU5fڴ_/O yZǴȨ>\yXT:`**IE>pڅK^M8nUl-KNJ.BM77݃g5ڴcڛ pVQY__v:}{ &pƫ$f\csP>G~Dpϋjj?!ԼOnf_n.& 'ww3-?f˅#!|k Qm%|Q"0˅-?KVa;{Y$E6>~YG޸7q8{DxyrW?KVHolT?l* 6g>!_AW0ubjӿѶnRU@QLq-~TZWOso69_{z%g_yzSfQbPEjnFCu@ C%TʨtNWҷW_?'z|{xvoFuEz4ޑlFZ%z WfX-+e5P-ml .:5>PyrB(j]|@OXC֦;ƍCqgk?**@ K0?ݕqUzE/>d电]?+DCb{p(󛢄޽m@2jL{Q 1svɟ6);n޺UX֯yo')yVM$^ϦЧl XtU'|u^Mց¢gzMpdS=U0})Lbp{0fi3]@'|߁҆#KbIMz/0VK1GXcQ{&FFG?e -cեs-{N3hU{1̘aUedfC o.d'GK@ iψNiQl\>ISScf8vTpR:VXZVGeUh2&GkҺNu:XnLe 3:ɬ{_=k3.W)xOiB4ǙZO̞ 5ף~z=yW! >~JD7?3g{Qc= 6ȀZIf{w?h]'gAuR|z0~s!3\l8ZɄ MJe풩i-1SEiءu.K~ jAB\t8ۋZ߿Z&\+S{WX1_i|/Pwe̠B_vlgsIzrDxntuO<>|\YbS?Ƞ~2<(|ǖmE̸cuDuc}>~69~͑\M-Xr_J7?O,~P3'+h iJKjAm:c2~ן\lE[Qo~Co0"ZSLm9'oDOԺ^MoJ*0c4$9[R_s+GZ׫1jb%JJX&* ;S\;VRǵWsk5< +:SU'2!i ):S9+l/׮sS=ЧeNru)DGIva~OVrí9hH\mL6&LyUS?o~`jHstEe>?ʠ~I$Gh]/:;VPtƑ#iY5h<}KdȴaOr}9vﵢֺ^H`pl>[z CwS]!㵷gLJaFzIzSPӁ [ )<]͸Q AhG~_ɲ/)XsqE {7lغ+ Ѻn- 0 )!_01(.aB~8o gK|67 HpV0PUmfD1o@X*{m~_l\yRK^Ǝl˫AVl%;S\˃oyS<- -)G=I% ù~E-[ybsp3Ar]R^Uf}~:FmCP?GUScOo7ml?.0ڵZZ -.A,@ZHPƎlumZ~y9T=릅@u6m@9t'- IIi~6w:Nu.V8/E9mNZOjEe֏&sclx muRKo8kJ4~b@D ~iϾb~L&3ObI߀$^ǝu7#1ޤuU(:S^rX  /i]KV+=ylX=Q^6_TYKײ}<:EV`u5.sLk]>;fWh]G_%L@%m?:)GbBEFХn] @Sg> q&s3gP\RyU;[T~?O-NZ!,n?b40sJEzh~; >\yM|x'^_$PC1Ԩ2t&O!XlaʓQ68?r78&%r4~p{:dRQ=No|u=ꎚd2Ԥv`Tڶ ׺>)T~yKccϮշy6<#5txj^cP$nƔ۷`WPŒN闹lqފ_یK+y'/fXƏNfd l1879UkY&.c٨{s ]P3<z$؋ZMkpPy[(*Y)\ @{Y"~ YjElp~m#j݊zB!B!B!B!B!B!B!-q/%tEXtdate:create2020-03-25T03:00:21+09:00%?%tEXtdate:modify2020-03-25T03:00:21+09:00Tb:IENDB`ares-126/mia/resource/mia.rc000066400000000000000000000000611415063341600160070ustar00rootroot000000000000001 24 "mia.Manifest" 2 ICON DISCARDABLE "mia.ico" ares-126/mia/resource/resource.bml000066400000000000000000000052271415063341600172470ustar00rootroot00000000000000namespace name=Resource namespace name=GameBoy binary name=BootDMG0 file="../Firmware/Game Boy/boot.dmg-0.rom" binary name=BootDMG1 file="../Firmware/Game Boy/boot.dmg-1.rom" binary name=BootMGB file="../Firmware/Game Boy/boot.mgb.rom" namespace name=GameBoyColor binary name=BootCGB0 file="../Firmware/Game Boy Color/boot.cgb-0.rom" binary name=BootCGB1 file="../Firmware/Game Boy Color/boot.cgb-1.rom" namespace name=MegaDrive binary name=TMSS file="../Firmware/Mega Drive/tmss.rom" binary name=SVP file="../Firmware/Mega Drive/svp.rom" namespace name=Mega32X binary name=Vector file="../Firmware/Mega 32X/vector.rom" binary name=SH2BootM file="../Firmware/Mega 32X/sh2.boot.mrom" binary name=SH2BootS file="../Firmware/Mega 32X/sh2.boot.srom" namespace name=MSX binary name=BIOS file="../Firmware/MSX/bios.rom" namespace name=MSX2 binary name=BIOS file="../Firmware/MSX2/bios.rom" binary name=Sub file="../Firmware/MSX2/sub.rom" namespace name=Nintendo64 binary name=CIC6101 file="../Firmware/Nintendo 64/cic.6101.rom" binary name=CIC6102 file="../Firmware/Nintendo 64/cic.6102.rom" binary name=CIC6105 file="../Firmware/Nintendo 64/cic.6105.rom" binary name=CIC7101 file="../Firmware/Nintendo 64/cic.7101.rom" binary name=PIFSM5 file="../Firmware/Nintendo 64/pif.sm5.rom" binary name=PIFNTSC file="../Firmware/Nintendo 64/pif.ntsc.rom" binary name=PIFPAL file="../Firmware/Nintendo 64/pif.pal.rom" namespace name=SuperFamicom binary name=IPLROM file="../Firmware/Super Famicom/ipl.rom" binary name=Cx4 file="../Firmware/Super Famicom/cx4.rom" binary name=DSP1 file="../Firmware/Super Famicom/dsp1.rom" binary name=DSP1B file="../Firmware/Super Famicom/dsp1b.rom" binary name=DSP2 file="../Firmware/Super Famicom/dsp2.rom" binary name=DSP3 file="../Firmware/Super Famicom/dsp3.rom" binary name=DSP4 file="../Firmware/Super Famicom/dsp4.rom" binary name=SGB1 file="../Firmware/Super Famicom/sgb1.rom" binary name=SGB2 file="../Firmware/Super Famicom/sgb2.rom" binary name=ST010 file="../Firmware/Super Famicom/st010.rom" binary name=ST011 file="../Firmware/Super Famicom/st011.rom" binary name=ST018 file="../Firmware/Super Famicom/st018.rom" binary name=S21FX file="../Firmware/Super Famicom/21fx.rom" binary name=Boards file="../Database/Super Famicom Boards.bml" namespace name=WonderSwan binary name=Boot file="../Firmware/WonderSwan/boot.rom" namespace name=WonderSwanColor binary name=Boot file="../Firmware/WonderSwan Color/boot.rom" namespace name=PocketChallengeV2 binary name=Boot file="../Firmware/Pocket Challenge V2/boot.rom" ares-126/mia/resource/resource.cpp000066400000000000000000052251731415063341600172700ustar00rootroot00000000000000#include "resource.hpp" namespace Resource { namespace GameBoy { const unsigned char BootDMG0[256] = { 49,254,255,175,33,255,159,50,203,124,32,251,33,38,255,14,17,62,128,50,226,12,62,243,226,50,62,119,119,62,252,224, 71,33,4,1,229,17,203,0,26,19,190,32,107,35,125,254,52,32,245,6,25,120,134,35,5,32,251,134,32,90,209,33, 16,128,26,205,169,0,205,170,0,19,123,254,52,32,243,62,24,33,47,153,14,12,50,61,40,9,13,32,249,17,236,255, 25,24,241,103,62,100,87,224,66,62,145,224,64,4,30,2,205,188,0,14,19,36,124,30,131,254,98,40,6,30,193,254, 100,32,6,123,226,12,62,135,226,240,66,144,224,66,21,32,221,5,32,105,22,32,24,214,62,145,224,64,30,20,205,188, 0,240,71,238,255,224,71,24,243,79,6,4,197,203,17,23,193,203,17,23,5,32,245,34,35,34,35,201,14,12,240,68, 254,144,32,250,13,32,247,29,32,242,201,206,237,102,102,204,13,0,11,3,115,0,131,0,12,0,13,0,8,17,31,136, 137,0,14,220,204,110,230,221,221,217,153,187,187,103,99,110,14,236,204,221,220,153,159,187,185,51,62,255,255,60,224,80, }; const unsigned char BootDMG1[256] = { 49,254,255,175,33,255,159,50,203,124,32,251,33,38,255,14,17,62,128,50,226,12,62,243,226,50,62,119,119,62,252,224, 71,17,4,1,33,16,128,26,205,149,0,205,150,0,19,123,254,52,32,243,17,216,0,6,8,26,19,34,35,5,32,249, 62,25,234,16,153,33,47,153,14,12,61,40,8,50,13,32,249,46,15,24,243,103,62,100,87,224,66,62,145,224,64,4, 30,2,14,12,240,68,254,144,32,250,13,32,247,29,32,242,14,19,36,124,30,131,254,98,40,6,30,193,254,100,32,6, 123,226,12,62,135,226,240,66,144,224,66,21,32,210,5,32,79,22,32,24,203,79,6,4,197,203,17,23,193,203,17,23, 5,32,245,34,35,34,35,201,206,237,102,102,204,13,0,11,3,115,0,131,0,12,0,13,0,8,17,31,136,137,0,14, 220,204,110,230,221,221,217,153,187,187,103,99,110,14,236,204,221,220,153,159,187,185,51,62,60,66,185,165,185,165,66,60, 33,4,1,17,168,0,26,19,190,32,254,35,125,254,52,32,245,6,25,120,134,35,5,32,251,134,32,254,62,1,224,80, }; const unsigned char BootMGB[256] = { 49,254,255,175,33,255,159,50,203,124,32,251,33,38,255,14,17,62,128,50,226,12,62,243,226,50,62,119,119,62,252,224, 71,17,4,1,33,16,128,26,205,149,0,205,150,0,19,123,254,52,32,243,17,216,0,6,8,26,19,34,35,5,32,249, 62,25,234,16,153,33,47,153,14,12,61,40,8,50,13,32,249,46,15,24,243,103,62,100,87,224,66,62,145,224,64,4, 30,2,14,12,240,68,254,144,32,250,13,32,247,29,32,242,14,19,36,124,30,131,254,98,40,6,30,193,254,100,32,6, 123,226,12,62,135,226,240,66,144,224,66,21,32,210,5,32,79,22,32,24,203,79,6,4,197,203,17,23,193,203,17,23, 5,32,245,34,35,34,35,201,206,237,102,102,204,13,0,11,3,115,0,131,0,12,0,13,0,8,17,31,136,137,0,14, 220,204,110,230,221,221,217,153,187,187,103,99,110,14,236,204,221,220,153,159,187,185,51,62,60,66,185,165,185,165,66,60, 33,4,1,17,168,0,26,19,190,32,254,35,125,254,52,32,245,6,25,120,134,35,5,32,251,134,32,254,62,255,224,80, }; } namespace GameBoyColor { const unsigned char BootCGB0[2048] = { 49,254,255,62,2,195,124,0,211,0,152,160,18,211,0,128,0,64,30,83,208,0,31,66,28,0,20,42,77,25,140,126, 0,124,49,110,74,69,82,74,0,0,255,83,31,124,255,3,31,0,255,31,167,0,239,27,31,0,239,27,0,124,0,0, 255,3,206,237,102,102,204,13,0,11,3,115,0,131,0,12,0,13,0,8,17,31,136,137,0,14,220,204,110,230,221,221, 217,153,187,187,103,99,110,14,236,204,221,220,153,159,187,185,51,62,60,66,185,165,185,165,66,60,88,67,224,112,62,252, 224,71,205,117,2,205,0,2,38,208,205,3,2,33,0,254,14,160,175,34,13,32,252,17,4,1,33,16,128,76,26,226, 12,205,187,3,205,188,3,19,123,254,52,32,241,17,114,0,6,8,26,19,34,35,5,32,249,205,229,3,62,1,224,79, 62,145,224,64,33,178,152,6,78,14,68,205,134,2,175,224,79,14,128,33,66,0,6,24,242,12,190,32,254,35,5,32, 247,33,52,1,6,25,120,134,44,5,32,251,134,32,254,205,17,3,24,2,0,0,205,208,5,175,224,112,62,17,224,80, 33,0,128,175,34,203,108,40,251,201,42,18,19,13,32,250,201,229,33,15,255,203,134,203,70,40,252,225,201,17,0,255, 33,3,208,14,15,62,48,18,62,32,18,26,47,161,203,55,71,62,16,18,26,47,161,176,79,126,169,230,240,71,42,169, 161,176,50,71,121,119,62,48,18,201,62,128,224,104,224,106,14,107,42,226,5,32,251,74,9,67,14,105,42,226,5,32, 251,201,197,213,229,33,0,216,6,1,22,63,30,64,205,74,2,225,209,193,201,62,128,224,38,224,17,62,243,224,18,224, 37,62,119,224,36,201,205,17,2,205,98,2,121,254,56,32,20,229,175,224,79,33,167,153,62,56,34,60,254,63,32,250, 62,1,224,79,225,197,229,33,67,1,203,126,204,137,5,225,193,205,17,2,121,214,48,210,251,2,121,254,1,202,251,2, 125,254,209,40,33,197,6,3,14,1,22,3,126,230,248,177,34,21,32,248,12,121,254,6,32,240,17,17,0,25,5,32, 231,17,161,255,25,193,4,120,30,131,254,98,40,6,30,193,254,100,32,7,123,224,19,62,135,224,20,250,2,208,254,0, 40,10,61,234,2,208,121,254,1,202,134,2,13,194,134,2,201,14,38,205,63,3,205,17,2,205,98,2,13,32,244,205, 17,2,62,1,224,79,205,51,3,205,54,3,175,224,79,205,51,3,201,33,8,0,17,81,255,14,5,205,10,2,201,197, 213,229,33,64,216,14,32,126,230,31,254,31,40,1,60,87,42,7,7,7,230,7,71,58,7,7,7,230,24,176,254,31, 40,1,60,15,15,15,71,230,224,178,34,120,230,3,95,126,15,15,230,31,254,31,40,1,60,7,7,179,34,13,32,199, 225,209,193,201,14,0,26,230,240,203,73,40,2,203,55,71,35,126,176,34,26,230,15,203,73,32,2,203,55,71,35,126, 176,34,19,203,65,40,13,213,17,248,255,203,73,40,3,17,8,0,25,209,12,121,254,24,32,204,201,71,213,22,4,88, 203,16,23,203,19,23,21,32,246,209,34,35,34,35,201,62,25,234,16,153,33,47,153,14,12,61,40,8,50,13,32,249, 46,15,24,243,201,62,1,224,79,205,0,2,17,7,6,33,128,128,6,48,14,4,26,34,35,34,35,19,13,32,247,5, 32,242,17,4,1,205,132,3,1,168,255,9,205,132,3,1,248,255,9,17,114,0,14,8,35,26,34,19,13,32,249,33, 194,152,6,8,62,8,14,16,34,13,32,252,17,16,0,25,5,32,243,175,224,79,33,194,152,62,8,34,60,254,24,32, 2,46,226,254,40,32,3,33,2,153,254,56,32,237,33,216,8,17,64,216,6,8,62,255,18,19,18,19,14,2,205,10, 2,62,0,18,19,18,19,19,19,5,32,234,205,98,2,33,75,1,126,254,51,32,11,46,68,30,48,42,187,32,73,28, 24,4,46,75,30,1,42,187,32,62,46,52,1,16,0,42,128,71,13,32,250,234,0,208,33,199,6,14,0,42,184,40, 8,12,121,254,79,32,246,24,31,121,214,65,56,28,33,22,7,22,0,95,25,250,55,1,87,126,186,40,13,17,14,0, 25,121,131,79,214,94,56,237,14,0,33,51,7,6,0,9,126,230,31,234,6,208,234,8,208,126,230,224,7,7,7,234, 9,208,234,11,208,205,233,4,201,17,145,7,33,0,217,250,11,208,71,14,30,203,64,32,2,19,19,26,34,32,2,27, 27,203,72,32,2,19,19,26,34,19,19,32,2,27,27,203,80,40,5,27,43,26,34,19,26,34,19,13,32,215,33,0, 217,17,0,218,205,100,5,201,33,18,0,250,5,208,7,7,6,0,79,9,17,64,216,6,8,229,14,2,205,10,2,19, 19,19,19,19,19,225,5,32,240,17,66,216,14,2,205,10,2,17,74,216,14,2,205,10,2,43,43,17,68,216,14,2, 205,10,2,201,14,96,42,229,197,33,232,7,6,0,79,9,14,8,205,10,2,193,225,13,32,236,201,250,8,208,17,24, 0,60,61,40,3,25,32,250,201,205,29,2,120,230,255,40,15,33,228,8,6,0,42,185,40,8,4,120,254,12,32,246, 24,45,120,234,5,208,62,30,234,2,208,17,11,0,25,86,122,230,31,95,33,8,208,58,34,123,119,122,230,224,7,7, 7,95,33,11,208,58,34,123,119,205,233,4,205,40,5,201,205,17,2,250,67,1,203,127,40,4,224,76,24,40,62,4, 224,76,62,1,224,108,33,0,218,205,123,5,6,16,22,0,30,8,205,74,2,33,122,0,250,0,208,71,14,2,42,184, 204,207,3,13,32,248,201,1,15,63,126,255,255,192,0,192,240,241,3,124,252,254,254,3,7,7,15,224,224,240,240,30, 62,126,254,15,15,31,31,255,255,0,0,1,1,1,3,255,255,225,224,192,240,249,251,31,127,248,224,243,253,62,30,224, 240,249,127,62,124,248,224,248,240,240,248,0,0,127,127,7,15,159,191,158,31,255,255,15,30,62,60,241,251,127,127,254, 222,223,159,31,63,62,60,248,248,0,0,3,3,7,7,255,255,193,192,243,231,247,243,192,192,192,192,31,31,30,62,63, 31,62,62,128,0,0,0,124,31,7,0,15,255,254,0,124,248,240,0,31,15,15,0,124,248,248,0,63,62,28,0,15, 15,15,0,124,255,255,0,0,248,248,0,7,15,15,0,129,255,255,0,243,225,128,0,224,255,127,0,252,240,192,0,62, 124,124,0,0,0,0,0,0,136,22,54,209,219,242,60,140,146,61,92,88,201,62,112,29,89,105,25,53,168,20,170,117, 149,153,52,111,21,255,151,75,144,23,16,57,247,246,162,73,78,67,104,224,139,240,206,12,41,232,183,134,154,82,1,157, 113,156,189,93,109,103,63,107,179,70,40,165,198,211,39,97,24,102,106,191,13,244,66,69,70,65,65,82,66,69,75,69, 75,32,82,45,85,82,65,82,32,73,78,65,73,76,73,67,69,32,82,124,8,18,163,162,7,135,75,32,18,101,168,22, 169,134,177,104,160,135,102,18,161,48,60,18,133,18,100,27,7,6,111,110,110,174,175,111,178,175,178,168,171,111,175,134, 174,162,162,18,175,19,18,161,110,175,175,173,6,76,110,175,175,18,124,172,168,106,110,19,160,45,168,43,172,100,172,109, 135,188,96,180,19,114,124,181,174,174,124,124,101,162,108,100,133,128,176,64,136,32,104,222,0,112,222,32,120,32,32,56, 32,176,144,32,176,160,224,176,192,152,182,72,128,224,80,30,30,88,32,184,224,136,176,16,32,0,16,32,224,24,224,24, 0,24,224,32,168,224,32,24,224,0,32,24,216,200,24,224,0,224,64,40,40,40,24,224,96,32,24,224,0,0,8,224, 24,48,208,208,208,32,224,232,255,127,191,50,208,0,0,0,159,99,121,66,176,21,203,4,255,127,49,110,74,69,0,0, 255,127,239,27,0,2,0,0,255,127,31,66,242,28,0,0,255,127,148,82,74,41,0,0,255,127,255,3,47,1,0,0, 255,127,239,3,214,1,0,0,255,127,181,66,200,61,0,0,116,126,255,3,128,1,0,0,255,103,172,119,19,26,107,45, 214,126,255,75,117,33,0,0,255,83,95,74,82,126,0,0,255,79,210,126,76,58,224,28,237,3,255,127,95,37,0,0, 106,3,31,2,255,3,255,127,255,127,223,1,18,1,0,0,31,35,95,3,242,0,9,0,255,127,234,3,31,1,0,0, 159,41,26,0,12,0,0,0,255,127,127,2,31,0,0,0,255,127,224,3,6,2,32,1,255,127,235,126,31,0,0,124, 255,127,255,63,0,126,31,0,255,127,255,3,31,0,0,0,255,3,31,0,12,0,0,0,255,127,63,3,147,1,0,0, 0,0,0,66,127,3,255,127,255,127,140,126,0,124,0,0,255,127,239,27,128,97,0,0,255,127,0,124,224,3,31,124, 31,0,255,3,64,65,66,32,33,34,128,129,130,16,17,18,18,176,121,184,173,22,23,7,186,5,124,19,0,0,0,0, }; const unsigned char BootCGB1[2048] = { 49,254,255,62,2,195,124,0,211,0,152,160,18,211,0,128,0,64,30,83,208,0,31,66,28,0,20,42,77,25,140,126, 0,124,49,110,74,69,82,74,0,0,255,83,31,124,255,3,31,0,255,31,167,0,239,27,31,0,239,27,0,124,0,0, 255,3,206,237,102,102,204,13,0,11,3,115,0,131,0,12,0,13,0,8,17,31,136,137,0,14,220,204,110,230,221,221, 217,153,187,187,103,99,110,14,236,204,221,220,153,159,187,185,51,62,60,66,185,165,185,165,66,60,88,67,224,112,62,252, 224,71,205,117,2,205,0,2,38,208,205,3,2,33,0,254,14,160,175,34,13,32,252,17,4,1,33,16,128,76,26,226, 12,205,198,3,205,199,3,19,123,254,52,32,241,17,114,0,6,8,26,19,34,35,5,32,249,205,240,3,62,1,224,79, 62,145,224,64,33,178,152,6,78,14,68,205,145,2,175,224,79,14,128,33,66,0,6,24,242,12,190,32,254,35,5,32, 247,33,52,1,6,25,120,134,44,5,32,251,134,32,254,205,28,3,24,2,0,0,205,208,5,175,224,112,62,17,224,80, 33,0,128,175,34,203,108,40,251,201,42,18,19,13,32,250,201,229,33,15,255,203,134,203,70,40,252,225,201,17,0,255, 33,3,208,14,15,62,48,18,62,32,18,26,47,161,203,55,71,62,16,18,26,47,161,176,79,126,169,230,240,71,42,169, 161,176,50,71,121,119,62,48,18,201,62,128,224,104,224,106,14,107,42,226,5,32,251,74,9,67,14,105,42,226,5,32, 251,201,197,213,229,33,0,216,6,1,22,63,30,64,205,74,2,225,209,193,201,62,128,224,38,224,17,62,243,224,18,224, 37,62,119,224,36,33,48,255,175,14,16,34,47,13,32,251,201,205,17,2,205,98,2,121,254,56,32,20,229,175,224,79, 33,167,153,62,56,34,60,254,63,32,250,62,1,224,79,225,197,229,33,67,1,203,126,204,137,5,225,193,205,17,2,121, 214,48,210,6,3,121,254,1,202,6,3,125,254,209,40,33,197,6,3,14,1,22,3,126,230,248,177,34,21,32,248,12, 121,254,6,32,240,17,17,0,25,5,32,231,17,161,255,25,193,4,120,30,131,254,98,40,6,30,193,254,100,32,7,123, 224,19,62,135,224,20,250,2,208,254,0,40,10,61,234,2,208,121,254,1,202,145,2,13,194,145,2,201,14,38,205,74, 3,205,17,2,205,98,2,13,32,244,205,17,2,62,1,224,79,205,62,3,205,65,3,175,224,79,205,62,3,201,33,8, 0,17,81,255,14,5,205,10,2,201,197,213,229,33,64,216,14,32,126,230,31,254,31,40,1,60,87,42,7,7,7,230, 7,71,58,7,7,7,230,24,176,254,31,40,1,60,15,15,15,71,230,224,178,34,120,230,3,95,126,15,15,230,31,254, 31,40,1,60,7,7,179,34,13,32,199,225,209,193,201,14,0,26,230,240,203,73,40,2,203,55,71,35,126,176,34,26, 230,15,203,73,32,2,203,55,71,35,126,176,34,19,203,65,40,13,213,17,248,255,203,73,40,3,17,8,0,25,209,12, 121,254,24,32,204,201,71,213,22,4,88,203,16,23,203,19,23,21,32,246,209,34,35,34,35,201,62,25,234,16,153,33, 47,153,14,12,61,40,8,50,13,32,249,46,15,24,243,201,62,1,224,79,205,0,2,17,7,6,33,128,128,14,192,26, 34,35,34,35,19,13,32,247,17,4,1,205,143,3,1,168,255,9,205,143,3,1,248,255,9,17,114,0,14,8,35,26, 34,19,13,32,249,33,194,152,6,8,62,8,14,16,34,13,32,252,17,16,0,25,5,32,243,175,224,79,33,194,152,62, 8,34,60,254,24,32,2,46,226,254,40,32,3,33,2,153,254,56,32,237,33,216,8,17,64,216,6,8,62,255,18,19, 18,19,14,2,205,10,2,62,0,18,19,18,19,19,19,5,32,234,205,98,2,33,75,1,126,254,51,32,11,46,68,30, 48,42,187,32,73,28,24,4,46,75,30,1,42,187,32,62,46,52,1,16,0,42,128,71,13,32,250,234,0,208,33,199, 6,14,0,42,184,40,8,12,121,254,79,32,246,24,31,121,214,65,56,28,33,22,7,22,0,95,25,250,55,1,87,126, 186,40,13,17,14,0,25,121,131,79,214,94,56,237,14,0,33,51,7,6,0,9,126,230,31,234,8,208,126,230,224,7, 7,7,234,11,208,205,233,4,201,17,145,7,33,0,217,250,11,208,71,14,30,203,64,32,2,19,19,26,34,32,2,27, 27,203,72,32,2,19,19,26,34,19,19,32,2,27,27,203,80,40,5,27,43,26,34,19,26,34,19,13,32,215,33,0, 217,17,0,218,205,100,5,201,33,18,0,250,5,208,7,7,6,0,79,9,17,64,216,6,8,229,14,2,205,10,2,19, 19,19,19,19,19,225,5,32,240,17,66,216,14,2,205,10,2,17,74,216,14,2,205,10,2,43,43,17,68,216,14,2, 205,10,2,201,14,96,42,229,197,33,232,7,6,0,79,9,14,8,205,10,2,193,225,13,32,236,201,250,8,208,17,24, 0,60,61,40,3,25,32,250,201,205,29,2,120,230,255,40,15,33,228,8,6,0,42,185,40,8,4,120,254,12,32,246, 24,45,120,234,5,208,62,30,234,2,208,17,11,0,25,86,122,230,31,95,33,8,208,58,34,123,119,122,230,224,7,7, 7,95,33,11,208,58,34,123,119,205,233,4,205,40,5,201,205,17,2,250,67,1,203,127,40,4,224,76,24,40,62,4, 224,76,62,1,224,108,33,0,218,205,123,5,6,16,22,0,30,8,205,74,2,33,122,0,250,0,208,71,14,2,42,184, 204,218,3,13,32,248,201,1,15,63,126,255,255,192,0,192,240,241,3,124,252,254,254,3,7,7,15,224,224,240,240,30, 62,126,254,15,15,31,31,255,255,0,0,1,1,1,3,255,255,225,224,192,240,249,251,31,127,248,224,243,253,62,30,224, 240,249,127,62,124,248,224,248,240,240,248,0,0,127,127,7,15,159,191,158,31,255,255,15,30,62,60,241,251,127,127,254, 222,223,159,31,63,62,60,248,248,0,0,3,3,7,7,255,255,193,192,243,231,247,243,192,192,192,192,31,31,30,62,63, 31,62,62,128,0,0,0,124,31,7,0,15,255,254,0,124,248,240,0,31,15,15,0,124,248,248,0,63,62,28,0,15, 15,15,0,124,255,255,0,0,248,248,0,7,15,15,0,129,255,255,0,243,225,128,0,224,255,127,0,252,240,192,0,62, 124,124,0,0,0,0,0,0,136,22,54,209,219,242,60,140,146,61,92,88,201,62,112,29,89,105,25,53,168,20,170,117, 149,153,52,111,21,255,151,75,144,23,16,57,247,246,162,73,78,67,104,224,139,240,206,12,41,232,183,134,154,82,1,157, 113,156,189,93,109,103,63,107,179,70,40,165,198,211,39,97,24,102,106,191,13,244,66,69,70,65,65,82,66,69,75,69, 75,32,82,45,85,82,65,82,32,73,78,65,73,76,73,67,69,32,82,124,8,18,163,162,7,135,75,32,18,101,168,22, 169,134,177,104,160,135,102,18,161,48,60,18,133,18,100,27,7,6,111,110,110,174,175,111,178,175,178,168,171,111,175,134, 174,162,162,18,175,19,18,161,110,175,175,173,6,76,110,175,175,18,124,172,168,106,110,19,160,45,168,43,172,100,172,109, 135,188,96,180,19,114,124,181,174,174,124,124,101,162,108,100,133,128,176,64,136,32,104,222,0,112,222,32,120,32,32,56, 32,176,144,32,176,160,224,176,192,152,182,72,128,224,80,30,30,88,32,184,224,136,176,16,32,0,16,32,224,24,224,24, 0,24,224,32,168,224,32,24,224,0,32,24,216,200,24,224,0,224,64,40,40,40,24,224,96,32,24,224,0,0,8,224, 24,48,208,208,208,32,224,232,255,127,191,50,208,0,0,0,159,99,121,66,176,21,203,4,255,127,49,110,74,69,0,0, 255,127,239,27,0,2,0,0,255,127,31,66,242,28,0,0,255,127,148,82,74,41,0,0,255,127,255,3,47,1,0,0, 255,127,239,3,214,1,0,0,255,127,181,66,200,61,0,0,116,126,255,3,128,1,0,0,255,103,172,119,19,26,107,45, 214,126,255,75,117,33,0,0,255,83,95,74,82,126,0,0,255,79,210,126,76,58,224,28,237,3,255,127,95,37,0,0, 106,3,31,2,255,3,255,127,255,127,223,1,18,1,0,0,31,35,95,3,242,0,9,0,255,127,234,3,31,1,0,0, 159,41,26,0,12,0,0,0,255,127,127,2,31,0,0,0,255,127,224,3,6,2,32,1,255,127,235,126,31,0,0,124, 255,127,255,63,0,126,31,0,255,127,255,3,31,0,0,0,255,3,31,0,12,0,0,0,255,127,63,3,147,1,0,0, 0,0,0,66,127,3,255,127,255,127,140,126,0,124,0,0,255,127,239,27,128,97,0,0,255,127,0,124,224,3,31,124, 31,0,255,3,64,65,66,32,33,34,128,129,130,16,17,18,18,176,121,184,173,22,23,7,186,5,124,19,0,0,0,0, }; } namespace MegaDrive { const unsigned char TMSS[2048] = { 0,255,255,0,0,0,2,2,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0,0,0,2,0, 83,69,71,65,32,71,69,78,69,83,73,83,32,32,32,32,40,67,41,83,69,71,65,32,49,57,57,48,46,77,65,89, 71,69,78,69,83,73,83,32,79,83,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,71,69,78,69,83,73,83,32,79,83,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 79,83,32,48,48,48,48,48,48,48,48,45,48,48,91,116,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 0,0,0,0,0,0,7,255,0,255,0,0,0,255,255,255,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,85,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 96,254,75,250,0,106,76,221,31,224,16,41,239,1,2,0,0,15,103,8,35,124,83,69,71,65,47,0,48,20,112,0, 44,64,78,102,114,23,26,29,56,133,218,71,81,201,255,248,40,188,64,0,0,128,54,128,56,20,8,4,0,1,102,248, 40,188,129,4,143,2,40,188,192,0,0,0,118,31,38,128,81,203,255,252,40,188,64,0,0,16,120,19,38,128,81,204, 255,252,122,3,23,93,0,17,81,205,255,250,96,60,0,0,128,0,0,0,63,255,0,0,1,0,0,160,0,0,0,161, 17,0,0,161,18,0,0,192,0,0,0,192,0,4,4,20,48,60,7,108,0,0,0,0,255,0,129,55,0,1,1,0, 0,255,255,0,0,128,159,191,223,255,65,248,192,0,67,250,0,22,76,217,124,240,48,60,0,63,48,217,81,200,255,252, 78,184,192,0,96,254,32,83,69,71,69,148,0,3,0,0,0,247,83,69,71,65,0,161,64,0,0,161,65,1,0,192, 0,4,0,192,0,0,0,161,0,1,8,211,0,0,190,184,1,0,103,34,184,184,1,0,102,8,12,56,0,65,1,4, 103,20,8,147,0,0,16,22,2,0,0,15,103,6,36,188,0,0,0,0,78,117,8,147,0,0,78,185,0,0,7,140, 40,188,76,32,0,0,42,153,81,206,255,252,78,185,0,0,7,156,56,188,129,68,48,60,0,60,97,32,56,188,129,4, 16,22,2,0,0,15,103,6,36,188,0,0,0,0,8,211,0,0,112,0,32,64,46,88,32,88,78,208,50,60,149,206, 81,201,255,254,81,200,255,246,78,117,0,1,14,238,14,232,1,17,17,0,17,0,1,16,17,0,1,16,17,0,1,16, 17,17,17,16,17,0,1,16,17,0,1,16,0,0,0,0,17,17,17,0,17,0,1,16,17,0,1,16,17,17,17,0, 17,0,1,16,17,0,1,16,17,17,17,0,0,0,0,0,17,17,17,16,17,0,1,16,17,0,1,16,17,0,0,0, 17,0,1,16,17,0,1,16,17,17,17,16,0,0,0,0,17,17,17,0,17,0,1,16,17,0,1,16,17,0,1,16, 17,0,1,16,17,0,1,16,17,17,17,0,0,0,0,0,17,17,17,16,17,0,0,0,17,0,0,0,17,17,17,0, 17,0,0,0,17,0,0,0,17,17,17,16,0,0,0,0,17,17,17,16,17,0,0,0,17,0,0,0,17,17,17,0, 17,0,0,0,17,0,0,0,17,0,0,0,0,0,0,0,17,17,17,16,17,0,1,16,17,0,0,0,17,0,17,16, 17,0,1,16,17,0,1,16,17,17,17,16,0,0,0,0,17,0,1,16,17,0,1,16,17,0,1,16,17,17,17,16, 17,0,1,16,17,0,1,16,17,0,1,16,0,0,0,0,0,17,16,0,0,17,16,0,0,17,16,0,0,17,16,0, 0,17,16,0,0,17,16,0,0,17,16,0,0,0,0,0,0,0,1,16,0,0,1,16,0,0,1,16,0,0,1,16, 0,0,1,16,1,16,1,16,1,17,17,16,0,0,0,0,17,0,1,16,17,0,17,0,17,17,16,0,17,17,16,0, 17,0,17,0,17,0,1,16,17,0,1,16,0,0,0,0,1,16,0,0,1,16,0,0,1,16,0,0,1,16,0,0, 1,16,0,0,1,16,0,0,1,17,17,16,0,0,0,0,17,0,1,16,17,16,17,16,17,17,17,16,17,1,1,16, 17,0,1,16,17,0,1,16,17,0,1,16,0,0,0,0,17,0,1,16,17,16,1,16,17,17,1,16,17,1,17,16, 17,0,17,16,17,0,1,16,17,0,1,16,0,0,0,0,17,17,17,16,17,0,1,16,17,0,1,16,17,0,1,16, 17,0,1,16,17,0,1,16,17,17,17,16,0,0,0,0,17,17,17,16,17,0,1,16,17,0,1,16,17,17,17,16, 17,0,0,0,17,0,0,0,17,0,0,0,0,0,0,0,17,17,17,16,17,0,1,16,17,0,1,16,17,0,1,16, 17,0,17,16,17,0,17,16,17,17,17,16,0,0,0,0,17,17,17,16,17,0,1,16,17,0,1,16,17,17,17,0, 17,0,1,16,17,0,1,16,17,0,1,16,0,0,0,0,17,17,17,16,17,0,1,16,17,0,0,0,17,17,17,16, 0,0,1,16,17,0,1,16,17,17,17,16,0,0,0,0,17,17,17,16,0,17,16,0,0,17,16,0,0,17,16,0, 0,17,16,0,0,17,16,0,0,17,16,0,0,0,0,0,17,0,1,16,17,0,1,16,17,0,1,16,17,0,1,16, 17,0,1,16,17,0,1,16,17,17,17,16,0,0,0,0,17,0,1,16,17,0,1,16,17,0,1,16,17,0,1,16, 1,16,17,0,0,17,16,0,0,1,0,0,0,0,0,0,17,0,1,16,17,0,1,16,17,0,1,16,17,1,1,16, 17,17,17,16,17,16,17,16,17,0,1,16,0,0,0,0,17,0,1,16,17,0,1,16,17,16,17,16,1,17,17,0, 17,16,17,16,17,0,1,16,17,0,1,16,0,0,0,0,17,0,1,16,17,0,1,16,17,0,1,16,1,16,17,0, 0,17,16,0,0,17,16,0,0,17,16,0,0,0,0,0,17,17,17,16,0,0,17,16,0,1,17,0,0,17,16,0, 1,17,0,0,17,16,0,0,17,17,17,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,16,0,0,1,16,0,0,0,0,0,0,2,34,34,0,34,0,2,32,34,0,0,0,2,34,34,0, 0,0,2,32,34,0,2,32,2,34,34,0,0,0,0,0,2,34,34,32,34,0,0,0,34,0,0,0,34,34,34,0, 34,0,0,0,34,0,0,0,2,34,34,32,0,0,0,0,2,34,34,0,34,0,2,32,34,0,0,0,34,0,34,32, 34,0,2,32,34,0,2,32,2,34,34,32,0,0,0,0,0,2,32,0,0,34,34,0,0,34,34,0,2,32,2,32, 2,32,2,32,34,0,0,34,34,2,34,34,0,0,0,0,32,32,32,112,114,111,100,117,99,101,100,32,98,121,32,111, 114,255,32,117,110,100,101,114,32,108,105,99,101,110,115,101,32,102,114,111,109,255,115,101,103,97,44,101,110,116,101,114, 112,114,105,115,101,115,32,108,116,100,123,0,48,25,40,188,192,2,0,0,58,153,81,200,255,252,78,117,40,133,114,0, 18,25,107,8,102,2,78,117,58,129,96,242,6,133,1,0,0,0,96,232,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; const unsigned char SVP[2048] = { 8,96,252,0,0,1,149,239,0,0,0,0,148,5,0,101,8,64,0,0,0,13,0,56,0,131,8,128,0,0,0,15, 0,15,8,48,0,0,8,240,0,0,8,224,131,250,8,224,8,28,0,192,8,16,8,96,8,32,252,4,0,193,0,194, 0,193,0,194,0,193,0,194,8,224,0,228,8,224,8,0,0,12,0,60,104,0,83,86,76,80,252,0,0,60,0,19, 168,0,3,255,77,80,252,56,232,0,0,1,76,80,252,0,0,49,168,0,28,0,200,0,224,0,0,131,0,60,8,48, 0,0,0,19,0,35,0,67,20,48,20,49,20,50,21,48,21,49,30,252,0,108,11,51,200,0,128,0,0,227,8,224, 8,28,0,192,11,51,11,195,56,1,76,112,252,83,3,102,3,231,3,51,200,0,8,0,0,227,0,12,0,60,200,0, 128,0,0,227,8,224,8,28,0,192,0,60,0,28,0,193,56,1,76,112,252,102,3,102,3,51,2,196,56,1,76,112, 252,109,3,102,2,51,3,196,56,1,76,112,252,115,3,102,3,51,4,196,56,1,76,112,252,121,3,102,2,51,5,196, 56,1,76,112,252,127,3,102,3,55,3,195,56,1,76,112,252,133,3,102,3,59,3,255,144,6,5,59,5,255,3,55, 131,15,4,55,8,48,0,0,76,64,252,151,152,1,131,3,131,11,4,51,2,247,3,102,184,0,14,4,3,51,160,0, 76,112,252,169,3,247,144,7,5,51,5,247,8,48,0,1,14,4,3,59,160,0,76,112,252,180,3,255,144,7,5,59, 5,255,6,4,152,1,14,4,3,51,3,247,144,3,5,51,8,48,0,0,144,2,5,247,3,59,3,255,144,3,5,59, 8,48,0,0,144,2,5,255,3,27,3,39,0,55,3,31,3,35,128,7,144,2,4,243,3,23,3,47,0,55,0,19, 8,48,0,0,144,2,4,247,0,49,130,3,4,51,184,1,77,80,252,222,2,55,200,0,128,0,4,55,184,0,2,243, 144,2,4,243,6,4,184,1,77,80,252,236,2,51,2,247,144,6,4,51,4,247,3,102,2,51,2,247,3,102,184,0, 4,59,4,63,0,35,12,3,0,31,3,51,120,0,76,112,252,255,3,247,144,6,5,51,5,247,8,32,0,1,3,59, 120,0,76,112,253,8,0,50,152,2,0,35,76,0,253,13,3,59,3,255,144,6,5,59,5,255,2,59,2,255,144,3, 4,59,4,255,3,51,3,247,144,3,5,51,5,247,76,64,253,28,2,63,152,1,4,63,2,63,131,15,0,19,8,48, 0,0,76,64,253,36,152,1,130,11,131,11,77,112,253,45,4,59,4,31,3,55,152,1,5,55,2,51,56,1,4,51, 76,112,253,13,3,51,4,51,3,55,4,55,184,0,0,50,120,0,77,80,253,67,120,3,77,80,253,67,2,51,2,247, 144,6,4,51,4,247,0,50,184,1,77,80,253,76,2,59,2,255,144,6,4,59,4,255,2,51,2,247,2,27,2,47, 3,102,3,51,152,64,76,0,253,86,3,51,184,255,136,0,254,227,74,16,4,19,3,102,24,17,18,49,152,18,20,49, 12,15,0,2,8,16,0,4,2,36,0,55,5,51,5,247,2,53,5,59,2,57,5,63,3,10,13,2,253,113,76,0, 252,143,4,53,4,245,2,63,56,1,4,63,76,112,253,100,3,102,3,10,13,2,253,126,76,0,253,85,8,32,0,1, 0,55,144,2,24,10,4,52,4,244,144,6,4,52,4,244,3,10,13,2,253,141,76,0,253,81,0,55,144,2,24,8, 4,52,4,244,24,14,4,52,4,244,2,5,2,5,8,48,0,3,15,8,18,49,20,50,28,10,2,54,5,52,2,54, 5,52,2,54,5,52,2,54,5,52,26,8,8,48,0,1,15,9,28,10,2,54,5,51,2,54,5,55,3,52,5,59, 3,52,5,63,3,10,13,2,253,183,76,0,252,156,4,59,4,255,2,54,5,51,2,54,5,55,3,52,5,59,3,52, 5,63,3,10,13,2,253,198,76,0,252,156,5,51,5,247,2,59,5,59,2,63,5,63,3,10,13,2,253,209,76,0, 252,143,144,2,144,2,144,2,144,2,144,2,144,2,144,2,144,2,4,53,4,245,7,9,56,1,15,9,76,112,253,169, 2,5,2,5,7,8,56,1,15,8,76,112,253,154,3,102,3,10,13,2,253,237,76,0,253,85,8,32,0,1,0,55, 144,2,144,6,24,10,4,52,4,244,144,6,4,52,4,244,3,10,13,2,253,253,76,0,253,81,0,55,144,2,24,8, 4,52,4,244,24,14,4,52,4,244,8,48,0,3,15,8,18,49,20,50,28,10,2,54,5,52,2,54,5,52,2,6, 2,6,2,54,5,52,2,54,5,52,26,8,8,48,0,1,15,9,28,10,2,54,5,51,2,54,5,55,3,52,5,59, 3,52,5,63,3,10,13,2,254,39,76,0,252,156,4,59,4,255,2,54,5,51,2,54,5,55,3,52,5,59,3,52, 5,63,3,10,13,2,254,54,76,0,252,156,5,51,5,247,2,59,5,59,2,63,5,63,3,10,13,2,254,65,76,0, 252,143,144,2,144,2,144,2,144,2,144,2,144,2,144,2,144,2,4,53,4,245,7,9,56,1,15,9,77,112,254,84, 2,5,2,5,76,0,254,25,7,8,56,1,15,8,76,112,254,8,3,102,3,10,13,2,254,95,76,0,253,85,8,32, 0,1,0,55,144,2,24,10,4,52,4,244,144,6,4,52,4,244,3,10,13,2,254,110,76,0,253,81,0,55,144,2, 24,8,4,52,4,244,24,14,4,52,4,244,8,48,0,3,15,8,18,49,20,50,28,10,2,54,5,52,2,54,5,52, 2,54,5,52,2,54,5,52,26,8,8,48,0,1,15,9,28,10,2,54,5,51,2,54,5,55,3,52,5,59,3,52, 5,63,3,10,13,2,254,150,76,0,252,156,4,59,4,255,2,54,5,51,2,54,5,55,3,52,5,59,3,52,5,63, 3,10,13,2,254,165,76,0,252,156,5,51,5,247,2,59,5,59,2,63,5,63,3,10,13,2,254,176,76,0,252,143, 144,2,144,2,144,2,144,2,144,2,144,2,144,2,144,2,4,53,4,245,7,9,56,1,15,9,76,112,254,136,2,5, 2,5,7,8,56,1,15,8,76,112,254,121,3,102,184,0,8,16,1,0,4,53,4,21,4,53,4,53,4,53,4,53, 4,53,4,53,4,53,4,21,4,53,4,53,4,53,4,53,4,53,4,53,4,53,4,21,4,53,4,53,4,53,4,53, 4,53,4,53,3,102,0,0,0,6,0,12,0,18,0,25,0,31,0,37,0,43,0,49,0,56,0,62,0,68,0,74, 0,80,0,86,0,92,0,97,0,103,0,109,0,115,0,120,0,126,0,131,0,136,0,142,0,147,0,152,0,157,0,162, 0,167,0,171,0,176,0,181,0,185,0,189,0,193,0,197,0,201,0,205,0,209,0,212,0,216,0,219,0,222,0,225, 0,228,0,231,0,234,0,236,0,238,0,241,0,243,0,244,0,246,0,248,0,249,0,251,0,252,0,253,0,254,0,254, 0,255,0,255,0,255,1,0,0,255,0,255,0,255,0,254,0,254,0,253,0,252,0,251,0,249,0,248,0,246,0,244, 0,243,0,241,0,238,0,236,0,234,0,231,0,228,0,225,0,222,0,219,0,216,0,212,0,209,0,205,0,201,0,197, 0,193,0,189,0,185,0,181,0,176,0,171,0,167,0,162,0,157,0,152,0,147,0,142,0,136,0,131,0,126,0,120, 0,115,0,109,0,103,0,97,0,92,0,86,0,80,0,74,0,68,0,62,0,56,0,49,0,43,0,37,0,31,0,25, 0,18,0,12,0,6,0,0,255,250,255,244,255,238,255,231,255,225,255,219,255,213,255,207,255,200,255,194,255,188,255,182, 255,176,255,170,255,164,255,159,255,153,255,147,255,141,255,136,255,130,255,125,255,120,255,114,255,109,255,104,255,99,255,94, 255,89,255,85,255,80,255,75,255,71,255,67,255,63,255,59,255,55,255,51,255,47,255,44,255,40,255,37,255,34,255,31, 255,28,255,25,255,22,255,20,255,18,255,15,255,13,255,12,255,10,255,8,255,7,255,5,255,4,255,3,255,2,255,2, 255,1,255,1,255,1,255,0,255,1,255,1,255,1,255,2,255,2,255,3,255,4,255,5,255,7,255,8,255,10,255,12, 255,13,255,15,255,18,255,20,255,22,255,25,255,28,255,31,255,34,255,37,255,40,255,44,255,47,255,51,255,55,255,59, 255,63,255,67,255,71,255,75,255,80,255,85,255,89,255,94,255,99,255,104,255,109,255,114,255,120,255,125,255,130,255,136, 255,141,255,147,255,153,255,159,255,164,255,170,255,176,255,182,255,188,255,194,255,200,255,207,255,213,255,219,255,225,255,231, 255,238,255,244,255,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,252,8,3,250,3,252,3,254, }; } namespace Mega32X { const unsigned char Vector[256] = { 0,0,0,0,0,136,2,0,0,136,2,6,0,136,2,12,0,136,2,18,0,136,2,24,0,136,2,30,0,136,2,36, 0,136,2,42,0,136,2,48,0,136,2,54,0,136,2,60,0,136,2,66,0,136,2,72,0,136,2,78,0,136,2,84, 0,136,2,90,0,136,2,96,0,136,2,102,0,136,2,108,0,136,2,114,0,136,2,120,0,136,2,126,0,136,2,132, 0,136,2,138,0,136,2,144,0,136,2,150,0,136,2,156,0,136,2,162,0,136,2,168,0,136,2,174,0,136,2,180, 0,136,2,186,0,136,2,192,0,136,2,198,0,136,2,204,0,136,2,210,0,136,2,216,0,136,2,222,0,136,2,228, 0,136,2,234,0,136,2,240,0,136,2,246,0,136,2,252,0,136,3,2,0,136,3,8,0,136,3,14,0,136,3,20, 8,249,0,0,0,161,81,7,18,128,8,185,0,0,0,161,81,7,78,117,72,231,1,64,8,249,0,0,0,161,81,7, 67,249,0,161,48,241,126,7,18,152,210,252,0,2,81,207,255,248,8,185,0,0,0,161,81,7,76,223,2,128,78,117, }; const unsigned char SH2BootM[2048] = { 0,0,1,64,6,4,0,0,0,0,1,64,6,4,0,0,0,0,1,60,0,0,0,0,0,0,1,60,32,16,4,0, 32,16,4,32,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,175,254,0,9, 208,26,64,14,224,0,225,0,226,0,227,0,228,0,229,0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,0, 238,0,216,111,217,111,96,134,25,0,96,134,25,1,96,134,25,2,96,134,25,3,96,134,25,4,96,134,25,5,96,134, 25,6,222,102,78,30,216,119,224,0,40,1,196,0,200,2,139,16,208,7,225,1,48,24,136,0,139,252,193,1,216,99, 224,159,40,0,0,27,175,254,0,9,0,0,0,0,0,240,0,1,0,0,216,93,224,0,40,0,217,91,224,17,41,0, 216,96,217,95,224,0,40,5,112,1,40,5,112,1,40,5,112,1,40,5,112,1,57,128,139,245,216,90,217,88,224,0, 225,2,226,1,211,5,56,24,100,129,36,57,32,57,52,0,139,6,112,1,57,128,139,246,160,8,0,9,0,0,255,255, 208,1,194,8,175,252,0,9,83,68,69,82,216,77,217,76,224,0,40,6,40,6,40,6,40,6,57,128,139,249,196,0, 200,1,139,89,221,67,220,6,219,6,103,197,96,125,102,213,97,109,49,0,139,8,59,192,139,247,160,13,0,9,0,0, 0,0,3,108,0,0,7,108,208,2,194,8,224,128,192,0,175,250,0,9,83,81,69,82,216,22,217,23,97,145,96,29, 136,0,137,15,217,21,103,146,208,21,55,8,71,1,209,21,39,25,119,1,224,0,211,20,98,133,34,57,48,44,32,57, 71,16,139,249,193,20,221,42,104,214,105,214,96,214,209,15,56,28,209,15,57,28,226,4,97,134,41,18,121,4,48,40, 136,0,139,249,80,210,64,46,104,210,208,10,194,8,72,43,0,9,0,0,34,0,2,0,34,0,1,142,34,0,1,164, 0,0,2,0,0,63,255,255,0,0,255,255,34,0,0,0,6,0,0,0,77,95,79,75,209,35,198,8,49,0,139,252, 224,128,192,0,196,0,200,128,137,252,216,19,89,128,80,129,90,130,91,132,120,32,211,17,228,0,226,4,97,134,41,18, 121,4,48,40,51,40,51,64,137,1,136,0,139,246,208,2,194,8,75,46,74,43,0,9,77,95,79,75,32,0,64,0, 0,0,3,72,255,255,255,224,255,255,254,146,255,255,254,145,34,0,3,212,34,0,4,0,36,0,0,24,0,1,255,224, 38,0,0,0,38,4,0,0,165,90,0,1,165,90,0,168,165,90,0,85,165,90,10,184,165,90,0,8,165,90,0,0, 165,90,0,89,255,255,132,70,95,67,68,95,70,252,39,0,75,249,0,161,0,0,112,1,12,173,77,65,82,83,48,236, 102,0,3,230,8,45,0,7,81,1,103,248,74,173,0,8,103,16,74,109,0,12,103,10,8,45,0,0,81,1,102,0, 3,184,16,45,0,1,2,0,0,15,103,6,43,120,5,90,64,0,114,0,44,65,78,102,65,249,0,0,4,212,97,0, 1,82,97,0,1,118,71,249,0,0,4,232,67,249,0,160,0,0,69,249,0,192,0,17,62,60,1,0,112,0,59,71, 17,0,59,71,18,0,1,45,17,0,102,250,116,37,18,219,81,202,255,252,59,64,18,0,59,64,17,0,59,71,18,0, 20,155,20,155,20,155,20,155,65,249,0,0,4,192,67,249,0,255,0,0,34,216,34,216,34,216,34,216,34,216,34,216, 34,216,34,216,65,249,0,255,0,0,78,208,27,124,0,1,81,1,65,249,0,0,6,188,209,252,0,136,0,0,78,208, 4,4,48,60,7,108,0,0,0,0,255,0,129,55,0,2,1,0,0,0,175,1,217,31,17,39,0,33,38,0,249,119, 237,176,221,225,253,225,237,71,237,79,209,225,241,8,217,193,209,225,241,249,243,237,86,54,233,233,159,191,223,255,77,65, 82,83,32,73,110,105,116,105,97,108,32,38,32,83,101,99,117,114,105,116,121,32,80,114,111,103,114,97,109,32,32,32, 32,32,32,32,32,32,32,67,97,114,116,114,105,100,103,101,32,86,101,114,115,105,111,110,32,32,32,32,67,111,112,121, 114,105,103,104,116,32,83,69,71,65,32,69,78,84,69,82,80,82,73,83,69,83,44,76,84,68,46,32,49,57,57,52, 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32, 32,32,82,79,77,32,86,101,114,115,105,111,110,32,49,46,48,0,72,231,192,64,67,249,0,192,0,4,48,17,48,60, 128,0,50,60,1,0,62,60,0,18,16,24,50,128,208,65,81,207,255,248,76,223,2,3,78,117,72,231,129,192,65,249, 0,0,6,62,67,249,0,192,0,4,50,152,50,152,50,152,50,152,50,152,50,152,50,152,34,152,51,65,255,252,48,17, 8,0,0,1,102,248,50,152,50,152,112,0,34,188,192,0,0,0,126,15,51,64,255,252,51,64,255,252,51,64,255,252, 51,64,255,252,81,207,255,238,34,188,64,0,0,16,126,9,51,64,255,252,51,64,255,252,51,64,255,252,51,64,255,252, 81,207,255,238,76,223,3,129,78,117,129,20,143,1,147,255,148,255,149,0,150,0,151,128,64,0,0,128,129,4,143,2, 72,231,193,64,67,249,0,161,81,128,8,169,0,7,255,128,102,248,62,60,0,255,112,0,114,0,51,124,0,255,0,4, 51,65,0,6,51,64,0,8,78,113,8,41,0,1,0,11,102,248,6,65,1,0,81,207,255,232,76,223,2,131,78,117, 72,231,129,128,65,249,0,161,82,0,8,168,0,7,255,0,102,248,62,60,0,31,32,192,32,192,32,192,32,192,81,207, 255,246,76,223,1,129,78,117,65,249,0,255,0,0,62,60,7,255,112,0,32,192,32,192,32,192,32,192,32,192,32,192, 32,192,32,192,81,207,255,238,59,124,0,0,18,0,126,10,81,207,255,254,67,249,0,161,81,0,112,0,35,64,0,32, 35,64,0,36,27,124,0,3,81,1,46,121,0,136,0,0,8,145,0,7,102,250,112,0,51,64,0,2,51,64,0,4, 51,64,0,6,35,64,0,8,35,64,0,12,51,64,0,16,51,64,0,48,51,64,0,50,51,64,0,56,51,64,0,128, 51,64,0,130,8,169,0,0,0,139,102,248,97,0,255,18,8,233,0,0,0,139,103,248,97,0,255,6,8,169,0,0, 0,139,97,0,255,60,48,60,0,64,34,41,0,32,12,129,83,81,69,82,103,0,0,146,48,60,0,128,34,41,0,32, 12,129,83,68,69,82,103,0,0,128,33,252,0,136,2,162,0,112,48,60,0,2,114,0,18,45,0,1,20,41,0,128, 225,74,130,66,8,1,0,15,102,10,8,1,0,6,103,0,0,88,96,8,8,1,0,6,102,0,0,78,112,32,65,249, 0,136,0,0,60,40,1,142,74,70,103,0,0,16,52,41,0,40,12,66,0,0,103,246,180,70,102,44,112,0,35,64, 0,40,35,64,0,44,62,20,44,124,255,255,255,192,76,214,127,249,68,252,0,0,96,20,67,249,0,161,81,0,51,64, 0,6,48,60,128,0,96,4,68,252,0,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; const unsigned char SH2BootS[1024] = { 0,0,1,64,6,3,248,0,0,0,1,64,6,3,248,0,0,0,1,60,0,0,0,0,0,0,1,60,32,16,4,0, 32,16,4,32,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60, 0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,0,0,1,60,175,254,0,9, 208,20,64,14,224,0,225,0,226,0,227,0,228,0,229,0,230,0,231,0,232,0,233,0,234,0,235,0,236,0,237,0, 238,0,216,37,217,37,96,134,25,0,96,134,25,1,96,134,25,2,96,134,25,3,96,134,25,4,96,134,25,5,96,134, 25,6,222,28,78,30,196,0,200,2,139,5,0,27,175,254,0,9,0,0,0,0,0,240,216,26,224,0,40,0,217,24, 224,17,41,0,196,0,200,1,139,22,176,8,0,9,221,22,80,210,64,46,104,210,208,33,194,9,72,43,0,9,210,5, 224,40,225,1,48,24,136,0,139,252,198,8,50,0,139,247,0,11,0,9,77,95,79,75,209,23,198,8,49,0,139,252, 191,237,0,9,216,9,90,131,91,133,208,20,194,9,75,46,74,43,0,9,32,0,64,0,0,0,2,28,255,255,255,224, 255,255,254,146,255,255,254,145,34,0,3,228,36,0,0,24,0,2,0,0,38,0,0,0,38,4,0,0,165,90,0,1, 165,90,0,168,165,90,0,85,165,90,10,184,165,90,0,8,165,90,0,0,165,90,0,89,95,67,68,95,83,95,79,75, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; } namespace MSX { const unsigned char BIOS[32768] = { 243,195,18,13,191,27,152,152,195,237,16,0,195,191,35,0,195,255,16,0,195,0,36,0,195,27,17,0,195,52,36,0, 195,33,17,0,195,115,36,0,195,39,17,33,2,0,0,0,195,57,17,0,0,0,0,0,195,230,24,195,78,17,195,88, 17,195,22,2,195,34,2,195,46,2,195,69,2,195,77,2,195,85,2,195,96,2,195,109,2,195,129,2,195,151,2,195, 173,2,195,212,2,0,195,94,25,195,30,3,195,130,3,195,194,3,195,5,4,195,67,4,195,143,4,195,183,4,195,230, 4,195,25,5,195,111,5,195,130,5,195,140,5,195,151,5,195,58,23,195,82,23,195,92,23,195,106,17,195,124,17,195, 143,17,195,180,17,195,217,20,195,3,21,195,17,21,195,54,21,195,84,21,195,75,21,195,37,22,195,65,22,195,83,22, 195,86,22,195,181,7,195,102,22,195,106,22,195,123,22,195,141,22,195,159,22,195,143,23,195,2,24,195,71,24,195,89, 24,195,178,22,195,197,22,195,215,22,195,233,22,195,252,22,195,15,23,195,33,23,195,106,24,195,121,24,195,68,8,195, 86,8,195,103,8,195,118,8,195,134,8,195,151,8,195,169,8,195,185,8,195,244,8,195,2,9,195,20,9,195,38,9, 195,55,9,195,71,9,195,89,9,195,107,9,195,125,9,195,142,9,195,167,24,195,97,23,195,106,23,195,109,23,195,112, 23,195,115,23,195,130,23,195,134,23,195,138,23,195,179,24,195,197,24,195,201,24,195,223,24,195,112,26,0,0,0,201, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 79,6,0,9,9,195,17,2,190,35,40,5,35,35,16,248,201,78,35,102,105,233,58,224,243,230,191,71,14,1,205,46, 2,201,58,224,243,246,64,71,14,1,205,46,2,201,243,203,185,120,211,153,121,246,128,211,153,251,229,33,223,243,120,6, 0,9,119,225,201,205,85,2,246,0,219,152,201,245,205,96,2,241,211,152,201,243,125,211,153,124,230,63,211,153,251,201, 243,125,211,153,124,230,63,246,64,211,153,251,201,245,205,96,2,11,12,120,65,79,12,241,211,152,5,32,251,13,32,248, 201,205,85,2,229,235,11,12,120,65,60,14,152,237,162,194,141,2,61,32,248,225,201,235,205,96,2,235,11,12,120,65, 60,14,152,237,163,194,163,2,61,32,248,235,201,254,4,208,33,182,2,195,0,2,130,3,194,3,5,4,67,4,243,33, 223,243,1,153,8,22,128,237,163,120,237,81,20,183,32,247,251,195,34,2,58,175,252,254,8,40,58,61,245,58,233,243, 7,7,7,7,230,240,111,58,235,243,181,71,14,7,205,46,2,241,192,58,233,243,7,7,7,7,230,240,33,234,243,182, 42,191,243,1,32,0,245,205,96,2,241,211,152,245,11,120,177,32,247,241,201,58,235,243,71,14,7,195,46,2,58,175, 252,183,200,205,72,3,58,175,252,254,4,56,16,42,40,249,37,37,1,0,2,58,233,243,230,15,205,109,2,42,38,249, 1,0,8,175,205,109,2,201,58,175,252,254,4,56,4,30,217,24,2,30,209,42,40,249,205,96,2,58,233,243,87,1, 0,32,243,123,211,152,62,0,0,0,211,152,121,0,0,0,211,152,12,205,140,5,48,3,12,12,12,122,211,152,16,227, 251,201,205,22,2,62,0,50,175,252,50,176,252,58,174,243,50,176,243,62,1,50,220,243,50,221,243,42,179,243,34,34, 249,42,183,243,34,36,249,42,185,243,34,40,249,42,187,243,34,38,249,205,212,2,205,143,4,205,168,7,205,205,7,195, 190,2,205,22,2,62,1,50,175,252,50,176,252,62,1,50,220,243,50,221,243,205,212,2,42,189,243,34,34,249,42,193, 243,34,36,249,42,197,243,34,38,249,42,195,243,34,40,249,205,168,7,58,175,243,50,176,243,205,183,4,205,83,3,205, 220,7,195,190,2,205,22,2,62,2,50,175,252,205,212,2,42,199,243,34,34,249,205,96,2,6,3,175,243,211,152,60, 32,251,16,249,251,42,203,243,34,36,249,42,205,243,34,40,249,42,207,243,34,38,249,205,230,4,205,83,3,205,248,7, 195,190,2,205,22,2,62,3,50,175,252,205,212,2,42,209,243,34,34,249,205,96,2,175,14,6,243,245,30,4,245,6, 32,211,152,60,16,251,241,29,32,244,241,198,32,13,32,235,251,42,213,243,34,36,249,42,215,243,34,40,249,42,217,243, 34,38,249,205,25,5,205,83,3,205,14,8,195,190,2,58,223,243,230,241,71,14,0,205,46,2,58,224,243,230,231,246, 16,71,12,205,46,2,17,179,243,14,2,175,205,74,5,19,19,12,175,205,74,5,201,58,223,243,230,241,71,14,0,205, 46,2,58,224,243,230,231,71,12,205,46,2,17,189,243,14,2,175,205,74,5,175,205,74,5,175,205,74,5,175,205,74, 5,175,205,74,5,201,58,223,243,230,241,246,2,71,14,0,205,46,2,58,224,243,230,231,71,12,205,46,2,17,199,243, 14,2,175,205,74,5,62,127,205,74,5,62,3,205,74,5,175,205,74,5,175,205,74,5,201,58,223,243,230,241,71,14, 0,205,46,2,58,224,243,230,231,246,8,71,12,205,46,2,17,209,243,14,2,175,205,74,5,175,205,74,5,175,205,74, 5,175,205,74,5,175,205,74,5,201,213,245,33,104,5,6,0,9,70,235,126,35,102,111,41,143,16,252,71,241,176,71, 205,46,2,209,19,19,12,201,0,0,6,10,5,9,5,38,0,111,41,41,41,205,140,5,48,2,41,41,237,91,38,249, 25,201,135,135,42,40,249,22,0,95,25,201,58,224,243,15,15,62,8,208,62,32,201,245,254,32,56,13,58,175,252,254, 2,40,34,254,5,48,28,241,201,254,13,32,250,241,229,197,42,185,252,1,8,0,9,34,185,252,33,0,0,34,183,252, 193,225,201,241,201,241,229,213,197,245,205,34,8,237,91,185,252,237,75,183,252,205,185,8,58,233,243,50,242,243,42,42, 249,237,75,203,243,9,17,64,252,58,185,252,230,7,6,0,79,9,205,18,6,1,240,0,9,58,185,252,47,230,7,79, 205,18,6,42,183,252,1,8,0,9,34,183,252,241,193,209,225,201,58,183,252,230,7,245,197,213,229,205,155,6,58,183, 252,230,7,40,26,58,44,249,47,50,44,249,225,1,8,0,9,209,193,241,205,155,6,58,44,249,47,50,44,249,201,193, 1,8,0,9,193,193,241,201,245,229,197,213,87,88,237,75,201,243,9,79,58,242,243,230,15,71,205,69,2,245,230,15, 184,40,17,241,245,15,15,15,15,230,15,184,32,13,241,209,193,225,241,201,241,209,193,225,241,47,201,122,179,254,255,40, 17,241,203,0,203,0,203,0,203,0,230,15,176,205,77,2,24,221,241,230,240,176,205,77,2,24,218,65,60,79,62,7, 168,60,71,197,205,69,2,71,26,205,72,6,13,40,3,15,24,250,79,58,44,249,161,79,120,177,205,77,2,35,19,193, 16,225,201,71,82,80,80,82,84,0,58,175,252,254,5,201,245,205,239,6,11,12,120,65,79,12,241,243,211,152,16,252, 13,32,249,251,201,205,251,6,124,230,63,211,153,251,201,205,251,6,124,230,63,246,64,211,153,251,201,58,246,250,183,40, 16,58,175,252,254,5,218,96,2,254,7,58,246,250,56,1,135,229,230,3,15,111,230,128,172,23,203,21,23,125,23,243, 211,153,62,142,211,153,225,125,211,153,201,205,229,6,219,152,201,245,205,239,6,241,211,152,201,243,211,153,62,143,211,153, 219,153,245,175,211,153,62,143,211,153,251,241,201,219,153,1,0,0,205,46,2,1,1,224,205,46,2,1,2,0,205,46, 2,1,3,128,205,46,2,1,4,1,205,46,2,1,8,8,205,46,2,62,1,50,220,243,50,221,243,205,220,7,62,0, 33,0,8,1,0,8,205,109,2,62,245,33,0,32,1,32,0,205,109,2,1,7,245,205,46,2,33,191,27,17,0,8, 1,0,8,205,151,2,201,201,33,191,27,237,91,36,249,1,0,8,195,151,2,192,58,175,252,254,4,208,229,33,197,7, 205,0,2,225,201,205,7,220,7,248,7,14,8,58,176,243,254,40,1,192,3,56,8,1,128,7,24,3,1,0,3,42, 34,249,62,32,205,109,2,62,1,33,178,251,119,17,179,251,1,23,0,237,176,195,69,18,175,1,0,24,42,36,249,111, 197,205,109,2,193,58,234,243,42,201,243,195,109,2,58,234,243,230,15,71,7,7,7,7,176,1,0,8,42,36,249,195, 109,2,237,75,32,249,111,38,0,41,41,41,9,6,8,17,64,252,197,213,229,58,31,249,205,191,35,225,209,193,18,19, 35,16,239,201,229,245,33,79,8,205,159,9,241,225,201,82,73,71,72,84,67,0,229,245,33,97,8,205,159,9,241,225, 201,76,69,70,84,67,0,229,245,33,114,8,205,159,9,241,225,201,85,80,67,0,229,245,33,129,8,205,159,9,241,225, 201,84,85,80,67,0,229,245,33,145,8,205,159,9,241,225,201,68,79,87,78,67,0,229,245,33,162,8,205,159,9,241, 225,201,84,68,79,87,78,67,0,237,75,183,252,237,91,185,252,201,83,67,65,76,88,89,0,197,237,67,183,252,237,83, 185,252,42,185,252,41,41,41,41,41,46,0,6,0,62,255,50,44,249,121,230,7,40,10,71,62,255,167,31,16,252,50, 44,249,121,230,248,79,6,0,9,34,42,249,193,201,77,65,80,88,89,0,58,44,249,42,42,249,201,70,69,84,67,72, 67,0,229,245,33,13,9,205,159,9,241,225,201,83,84,79,82,69,67,0,229,245,33,31,9,205,159,9,241,225,201,83, 69,84,65,84,82,0,229,245,33,49,9,205,159,9,241,225,201,82,69,65,68,67,0,229,245,33,66,9,205,159,9,241, 225,201,83,69,84,67,0,229,245,33,82,9,205,159,9,241,225,201,78,83,69,84,67,88,0,229,245,33,100,9,205,159, 9,241,225,201,71,84,65,83,80,67,0,229,245,33,118,9,205,159,9,241,225,201,80,78,84,73,78,73,0,229,245,33, 136,9,205,159,9,241,225,201,83,67,65,78,82,0,229,245,33,153,9,205,159,9,241,225,201,83,67,65,78,76,0,62, 35,211,46,205,171,9,62,0,211,46,201,126,35,183,200,211,47,24,248,230,15,254,10,48,5,198,48,211,47,201,198,55, 211,47,201,245,15,15,15,15,205,179,9,241,205,179,9,201,124,205,195,9,125,205,195,9,201,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,201,221,225,253,225,241,193,209,225,217,8,241,193,209,225,251,201,62,130,211,171,62,80,211,170,175,211,255,60,211,254, 60,211,253,60,211,252,33,255,255,217,219,168,246,240,71,120,211,168,58,255,255,47,246,240,79,121,50,255,255,33,0,255, 62,15,119,190,32,8,47,119,190,32,3,37,24,242,36,124,183,40,21,217,188,56,5,40,3,217,24,12,46,0,103,217, 120,217,71,217,121,217,79,217,121,214,16,79,48,203,120,214,16,71,48,187,217,125,183,40,6,17,245,37,195,135,26,120, 211,168,121,50,255,255,217,33,0,243,249,205,23,15,205,67,16,205,77,7,251,205,78,17,6,15,17,19,14,33,0,128, 197,229,213,58,193,252,205,191,35,225,209,193,190,32,18,235,19,35,16,236,221,33,16,128,253,42,192,252,205,52,36,24, 17,62,5,50,234,243,50,235,243,205,194,3,33,86,37,205,142,16,251,6,120,205,138,16,62,4,50,235,243,62,4,50, 234,243,62,15,50,233,243,62,29,50,175,243,205,194,3,33,86,37,205,142,16,205,34,14,205,218,254,205,1,15,62,1, 50,153,253,175,50,41,251,205,203,254,33,47,38,205,142,16,195,101,26,67,45,66,73,79,83,32,76,111,103,111,32,82, 79,77,33,201,252,17,202,252,1,63,0,54,0,237,176,33,193,252,175,229,182,33,0,64,205,105,14,204,118,14,33,0, 128,205,105,14,204,118,14,203,127,40,6,198,4,203,103,40,228,225,35,60,230,3,32,219,201,71,205,191,35,35,245,120, 205,191,35,35,87,241,95,120,201,229,205,89,14,33,65,66,205,33,17,120,225,201,229,245,33,189,37,205,142,16,241,245, 71,230,3,198,48,205,180,17,120,203,120,40,15,62,46,205,180,17,120,15,15,230,3,198,48,205,180,17,62,13,205,180, 17,62,10,205,180,17,241,225,35,35,205,248,14,40,21,79,213,221,225,245,253,225,219,153,183,250,182,14,245,229,205,52, 36,243,225,241,14,0,205,248,14,40,2,203,233,205,248,14,40,2,203,241,205,248,14,40,2,203,249,71,230,12,95,120, 7,7,7,7,230,48,179,95,124,7,7,230,3,179,33,201,252,22,0,95,25,113,120,201,197,205,89,14,122,179,120,193, 201,33,201,252,6,64,126,203,127,40,8,229,33,208,37,205,142,16,225,35,16,240,201,62,0,33,128,243,119,17,129,243, 1,125,12,237,176,62,201,33,0,243,119,17,1,243,1,127,0,237,176,62,201,33,154,253,119,17,155,253,1,77,2,237, 176,62,255,33,218,251,119,17,219,251,1,21,0,237,176,62,0,33,240,251,119,17,241,251,1,39,0,237,176,33,240,251, 34,248,243,34,250,243,217,34,72,252,217,33,128,243,34,74,252,34,116,246,33,59,37,17,128,243,1,26,0,237,176,33, 0,0,34,179,243,33,0,8,34,183,243,33,0,24,34,189,243,33,0,32,34,191,243,33,0,0,34,193,243,33,0,27, 34,195,243,33,0,56,34,197,243,33,0,24,34,199,243,33,0,32,34,201,243,33,0,0,34,203,243,33,0,27,34,205, 243,33,0,56,34,207,243,33,0,8,34,209,243,33,0,0,34,213,243,33,0,27,34,215,243,33,0,56,34,217,243,33, 89,249,34,243,243,33,117,249,34,93,249,33,245,249,34,99,249,33,117,250,34,105,249,62,127,50,92,249,50,98,249,50, 104,249,62,39,50,174,243,62,32,50,175,243,58,175,243,50,176,243,62,24,50,177,243,62,4,50,235,243,62,4,50,234, 243,62,15,50,233,243,62,160,50,224,243,58,193,252,50,31,249,42,4,0,34,32,249,62,195,33,180,17,34,229,254,50, 228,254,201,243,33,193,252,219,168,87,230,63,79,211,168,58,255,255,47,95,230,15,50,255,255,71,58,255,255,47,184,32, 21,123,230,15,246,80,50,255,255,71,58,255,255,47,184,32,5,6,128,123,24,4,6,0,123,47,50,255,255,122,211,168, 112,35,121,198,64,79,48,197,251,201,118,16,253,201,58,175,252,254,5,48,9,126,183,200,205,180,17,35,24,247,126,183, 200,221,33,137,0,205,63,26,35,24,243,14,32,58,175,252,183,192,14,40,58,176,243,254,41,216,14,80,201,197,245,205, 171,16,58,176,243,237,68,129,60,203,63,111,58,221,243,61,133,111,38,0,68,58,220,243,61,203,63,48,1,9,203,33, 203,16,183,32,244,237,75,34,249,9,241,193,201,229,245,33,248,16,205,159,9,241,225,201,83,89,78,67,72,82,0,205, 72,255,126,35,254,0,200,254,58,200,254,48,56,3,254,58,216,254,32,40,237,254,9,40,233,183,201,245,205,228,254,241, 201,124,186,192,125,187,201,229,245,33,50,17,205,159,9,241,225,201,71,69,84,89,80,82,0,8,217,225,126,35,94,35, 86,35,213,221,225,245,253,225,229,8,217,195,52,36,30,143,62,15,205,82,23,195,58,23,229,245,33,99,17,205,159,9, 241,225,201,73,78,73,70,78,75,0,229,245,33,117,17,205,159,9,241,225,201,83,84,82,84,77,83,0,251,229,213,42, 250,243,237,91,248,243,231,62,255,32,1,175,209,225,201,205,194,253,229,213,42,250,243,237,91,248,243,231,32,4,251,118, 24,242,126,245,35,125,254,24,32,3,33,240,251,34,250,243,241,209,225,201,229,213,197,245,205,164,253,58,175,252,254,2, 48,19,241,245,205,4,20,241,245,205,218,17,205,25,20,58,221,243,50,97,246,241,193,209,225,201,205,17,21,208,40,18, 245,58,167,252,183,194,189,18,241,254,32,56,42,254,127,202,246,19,205,189,16,205,77,2,42,220,243,58,176,243,36,188, 56,4,34,220,243,201,17,177,251,38,0,25,175,119,42,220,243,205,108,18,195,46,18,6,12,33,136,20,195,8,2,62, 32,205,242,17,58,221,243,230,7,254,1,32,242,201,42,220,243,58,177,243,44,189,48,9,229,205,69,18,205,144,19,225, 45,34,220,243,201,33,1,1,34,220,243,201,205,46,19,42,220,243,229,205,108,18,58,220,243,33,177,243,190,48,8,205, 46,18,205,46,19,24,239,225,34,220,243,201,62,1,50,221,243,201,62,255,50,167,252,201,58,221,243,33,176,243,190,48, 3,60,24,31,58,220,243,33,177,243,190,208,60,50,220,243,24,218,58,221,243,61,32,11,58,220,243,61,200,50,220,243, 58,176,243,50,221,243,201,58,220,243,61,200,50,220,243,201,58,220,243,33,177,243,190,208,60,50,220,243,201,71,60,32, 12,50,167,252,241,6,15,33,172,20,195,8,2,241,16,4,14,0,24,4,16,24,14,1,254,52,40,6,254,53,40,8, 24,46,121,50,170,252,24,40,121,50,169,252,24,34,16,8,6,31,144,50,221,243,24,24,16,22,6,31,144,50,220,243, 62,3,24,13,62,1,24,9,62,2,24,5,62,4,24,1,175,50,167,252,201,58,221,243,33,176,243,190,208,60,50,221, 243,201,58,221,243,61,200,50,221,243,201,205,108,18,33,177,251,58,220,243,95,22,0,25,119,58,176,243,60,33,221,243, 150,79,6,0,62,32,205,189,16,195,109,2,205,108,18,42,220,243,229,69,58,177,243,50,220,243,144,71,4,58,220,243, 24,14,205,189,16,235,61,50,220,243,205,189,16,205,206,19,16,240,225,34,220,243,38,0,58,177,243,87,30,0,149,61, 79,6,0,33,177,251,25,235,98,107,43,237,184,195,46,19,205,108,18,42,220,243,229,69,58,177,243,144,71,4,58,220, 243,24,14,205,189,16,235,60,50,220,243,205,189,16,205,206,19,16,240,205,46,19,225,34,220,243,38,0,58,177,243,149, 61,79,6,0,17,177,251,25,84,93,35,237,176,201,245,197,6,0,58,176,243,79,205,220,19,193,241,201,229,213,197,17, 24,252,205,129,2,193,209,213,197,33,24,252,205,151,2,193,225,9,235,225,9,201,58,221,243,254,1,200,62,32,205,242, 17,195,146,18,58,169,252,254,1,192,58,175,252,254,2,208,58,204,251,205,189,16,195,77,2,58,169,252,254,1,192,58, 175,252,254,2,208,205,189,16,205,69,2,50,204,251,167,22,0,95,203,19,203,18,203,19,203,18,203,19,203,18,175,33, 175,252,190,32,5,42,183,243,24,3,42,193,243,229,25,17,24,252,1,8,0,205,129,2,58,170,252,254,0,32,7,33, 24,252,6,8,24,5,33,30,252,6,2,126,47,119,35,16,250,225,17,248,7,25,235,33,24,252,1,8,0,205,151,2, 205,189,16,62,255,195,77,2,7,86,22,8,146,18,9,31,18,10,46,18,11,69,18,12,182,7,13,108,18,27,114,18, 28,120,18,29,146,18,30,167,18,31,176,18,106,182,7,69,182,7,75,46,19,74,76,18,108,43,19,76,76,19,77,144, 19,89,12,19,65,167,18,66,176,18,67,21,19,68,34,19,72,69,18,120,4,19,121,8,19,205,182,255,245,205,37,22, 56,8,205,3,21,40,246,241,24,12,62,13,205,246,20,175,50,21,244,241,55,201,245,211,145,62,0,211,144,47,211,144, 241,167,201,205,187,255,219,144,31,31,62,255,48,1,47,167,201,229,245,33,166,252,175,190,119,32,8,241,254,1,32,19, 119,24,17,241,254,64,56,9,254,96,48,5,214,64,191,24,2,254,80,55,225,201,205,219,253,58,170,246,167,202,84,21, 62,1,50,221,243,195,84,21,63,32,0,205,224,253,33,72,21,205,142,16,42,221,243,34,202,251,17,176,251,38,0,125, 25,119,205,143,17,254,127,202,228,21,254,32,48,17,6,20,33,229,21,205,0,2,175,50,168,252,50,170,252,24,227,245, 58,168,252,167,196,139,21,241,223,24,201,205,4,20,42,220,243,34,188,246,62,32,50,167,246,205,189,16,205,69,2,254, 32,32,40,42,220,243,58,176,243,188,32,29,38,0,17,177,251,25,126,183,40,19,58,167,246,205,189,16,205,77,2,42, 188,246,34,220,243,201,195,25,20,62,32,245,58,167,246,223,241,50,167,246,24,195,201,55,225,201,201,201,201,201,175,225, 201,201,201,201,201,24,0,24,0,214,21,215,21,24,0,218,21,219,21,24,0,220,21,24,0,24,0,24,0,24,0,221, 21,222,21,24,0,24,0,24,0,225,21,24,0,24,0,226,21,24,0,24,0,24,0,24,0,24,0,227,21,24,0,24, 0,24,0,24,0,219,170,230,240,246,7,211,170,219,169,230,16,192,219,170,230,240,246,6,211,170,219,169,230,2,192,55, 201,229,245,33,76,22,205,159,9,241,225,201,73,83,67,78,84,67,0,195,65,22,229,245,33,97,22,205,159,9,241,225, 201,66,69,69,80,0,34,220,243,201,229,245,33,117,22,205,159,9,241,225,201,70,78,75,83,66,0,229,245,33,134,22, 205,159,9,241,225,201,69,82,65,70,78,75,0,229,245,33,152,22,205,159,9,241,225,201,68,83,80,70,78,75,0,58, 175,252,254,2,216,58,176,252,205,189,253,183,202,130,3,195,194,3,229,245,33,190,22,205,159,9,241,225,55,201,84,65, 80,73,79,78,0,229,245,33,209,22,205,159,9,241,225,55,201,84,65,80,73,78,0,229,245,33,226,22,205,159,9,241, 225,201,84,65,80,73,79,70,0,229,245,33,245,22,205,159,9,241,225,55,201,84,65,80,79,79,78,0,229,245,33,8, 23,205,159,9,241,225,55,201,84,65,80,79,85,84,0,229,245,33,26,23,205,159,9,241,225,201,84,65,80,79,79,70, 0,197,71,219,170,4,40,12,203,231,5,40,9,203,167,5,40,4,193,201,238,16,211,170,193,201,30,0,62,8,205,82, 23,60,205,82,23,60,205,82,23,60,30,184,62,7,205,82,23,201,243,211,160,245,123,211,161,251,241,201,211,160,219,162, 201,183,62,14,40,1,60,211,171,201,219,168,201,211,168,201,219,153,201,243,197,79,219,170,230,240,177,211,170,219,169,193, 251,201,205,167,255,201,205,172,255,201,58,100,248,167,201,197,254,0,32,25,62,8,205,115,23,15,15,15,15,47,230,15, 229,33,242,23,22,0,95,25,126,225,193,167,201,229,213,30,0,61,40,2,203,243,62,15,243,205,92,23,251,230,191,179, 95,62,15,205,82,23,62,14,243,205,92,23,251,47,230,15,33,226,23,6,0,79,9,126,209,225,193,167,201,62,0,193, 167,201,0,1,5,0,7,8,6,7,3,2,4,3,0,1,5,0,0,7,1,8,5,6,0,7,3,0,2,1,4,5, 3,0,254,5,48,3,183,32,9,62,8,205,115,23,246,254,60,201,243,61,213,30,3,71,230,1,40,2,30,76,62,15, 205,92,23,230,191,179,95,62,15,205,82,23,120,6,16,230,2,40,2,6,32,62,14,243,205,92,23,251,209,160,40,2, 24,3,62,255,201,175,201,229,245,33,83,24,205,159,9,241,225,175,201,71,84,80,65,68,0,229,245,33,100,24,205,159, 9,241,225,201,71,84,80,68,76,0,205,154,24,70,4,35,126,144,35,35,166,111,38,0,201,205,154,24,126,60,71,35, 150,200,120,35,35,229,166,43,43,43,119,225,35,126,35,102,111,5,72,6,0,9,115,246,1,201,42,243,243,71,7,7, 128,128,79,6,0,9,201,183,219,170,203,183,32,2,203,247,211,170,201,229,245,33,190,24,205,159,9,241,225,201,79,85, 84,68,76,80,0,46,2,24,3,58,56,251,213,22,0,93,33,65,251,25,30,37,183,40,4,25,61,24,249,209,201,42, 250,243,34,248,243,201,229,213,197,245,217,8,229,213,197,245,253,229,221,229,205,154,253,219,153,183,50,231,243,242,78,25, 205,159,253,42,158,252,35,34,158,252,175,50,217,251,58,246,243,61,50,246,243,32,55,62,3,50,246,243,175,205,2,24, 47,230,1,50,232,243,205,99,25,42,248,243,237,91,250,243,231,32,27,58,247,243,61,50,247,243,32,18,33,218,251,1, 255,11,113,35,16,252,205,99,25,62,1,50,247,243,221,225,253,225,241,193,209,225,217,8,241,193,209,225,251,201,205,214, 253,237,69,219,170,230,240,79,6,11,33,229,251,121,211,170,219,169,119,35,12,16,246,221,33,218,251,17,229,251,58,235, 251,15,33,190,38,56,3,33,238,38,14,11,26,221,190,0,196,180,25,47,221,166,0,8,26,221,119,0,8,6,8,15, 56,26,35,16,250,221,35,19,13,200,121,254,5,32,221,33,222,39,24,216,245,62,5,50,247,243,241,201,245,121,254,5, 40,7,254,4,40,28,195,19,26,120,254,3,32,4,62,0,24,33,254,2,32,4,62,1,24,25,254,1,32,53,62,2, 24,17,120,254,8,32,4,62,3,24,8,254,7,32,36,62,4,24,0,229,197,213,7,7,7,7,33,127,248,22,0,95, 25,235,26,167,40,8,213,205,32,26,209,19,24,244,209,193,225,24,9,126,167,40,5,229,205,32,26,225,241,195,162,25, 42,248,243,119,35,125,254,24,32,3,33,240,251,213,237,91,250,243,231,209,200,34,248,243,201,205,63,26,221,225,201,8, 217,245,197,213,229,237,87,245,217,253,229,58,248,250,245,253,225,8,205,52,36,253,225,8,217,241,226,94,26,251,225,209, 193,241,217,8,201,24,254,205,218,254,17,34,38,195,135,26,229,245,33,128,26,205,159,9,241,225,17,7,38,195,135,26, 67,65,76,66,65,83,0,219,153,33,6,40,6,12,14,153,237,179,1,0,8,175,211,152,11,120,177,32,248,33,191,27, 1,0,8,126,211,152,35,11,120,177,32,247,62,0,211,153,62,64,211,153,33,238,37,126,211,152,35,126,167,32,249,26, 211,152,19,26,167,32,249,195,101,26,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,60,66,165,165,195,189,66,60,60,126,219,219,189,195,126,60,108,170,146,68,68,40,16,0,16, 40,68,130,68,40,16,0,16,56,56,214,254,214,56,0,16,56,124,124,254,214,56,0,0,0,0,24,24,0,0,0,255, 255,255,231,231,255,255,255,60,66,129,129,129,129,66,60,195,189,126,126,126,126,189,195,12,4,8,112,136,136,112,0,0, 112,136,136,112,32,112,32,32,48,40,40,32,224,192,0,56,60,36,36,228,220,24,0,16,68,56,170,56,68,16,0,16, 16,16,56,16,16,16,16,16,16,16,239,0,0,0,0,0,0,0,239,16,16,16,16,16,16,16,224,16,16,16,16,16, 16,16,15,16,16,16,16,16,16,16,239,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,255,0,0,0,0,0, 0,0,15,16,16,16,16,0,0,0,224,16,16,16,16,16,16,16,15,0,0,0,0,16,16,16,224,0,0,0,0,129, 66,36,24,24,36,66,129,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,0,0,16,255,16,0,0,0,0, 0,0,0,0,0,0,0,32,32,32,32,0,32,0,0,80,80,0,0,0,0,0,0,0,80,248,80,248,80,0,0,32, 112,160,112,40,112,32,0,0,200,208,32,88,152,0,0,96,144,96,168,152,96,0,0,64,64,0,0,0,0,0,0,32, 64,64,64,64,32,0,0,32,16,16,16,16,32,0,0,0,32,168,112,80,136,0,0,0,32,32,248,32,32,0,0,0, 0,0,0,0,64,64,0,0,0,0,248,0,0,0,0,0,0,0,0,0,64,0,0,0,8,16,32,64,128,0,0,112, 136,168,168,136,112,0,0,32,96,32,32,32,112,0,0,112,136,8,112,128,248,0,0,248,8,48,8,136,112,0,0,16, 48,80,248,16,16,0,0,248,128,112,8,136,112,0,0,48,64,112,136,136,112,0,0,248,136,16,32,32,32,0,0,112, 136,112,136,136,112,0,0,112,136,136,120,8,112,0,0,0,0,64,0,0,64,0,0,0,0,64,0,0,64,64,0,0, 24,96,128,96,24,0,0,0,0,248,0,248,0,0,0,0,192,48,8,48,192,0,0,112,136,48,32,0,32,0,0,112, 136,152,168,168,152,64,0,112,136,136,248,136,136,0,0,224,144,224,144,136,240,0,0,112,136,128,128,136,112,0,0,240, 72,72,72,72,240,0,0,248,128,224,128,128,248,0,0,248,128,128,224,128,128,0,0,112,136,128,184,136,112,0,0,136, 136,248,136,136,136,0,0,112,32,32,32,32,112,0,0,56,8,8,8,136,112,0,0,136,144,160,224,144,136,0,0,128, 128,128,128,128,248,0,0,216,168,168,136,136,136,0,0,200,168,168,152,152,136,0,0,112,136,136,136,136,112,0,0,240, 136,136,240,128,128,0,0,112,136,136,168,144,104,0,0,240,136,136,240,160,152,0,0,112,128,112,8,8,240,0,0,248, 32,32,32,32,32,0,0,136,136,136,136,136,120,0,0,136,136,136,80,80,32,0,0,136,136,168,168,168,216,0,0,136, 80,32,80,136,136,0,0,136,136,112,32,32,32,0,0,248,16,32,64,128,248,0,0,112,64,64,64,64,112,0,0,0, 128,64,32,16,8,0,0,112,16,16,16,16,112,0,0,64,160,0,0,0,0,0,0,0,0,0,0,0,0,248,0,32, 16,0,0,0,0,0,0,0,0,120,136,152,104,0,0,128,128,240,136,136,240,0,0,0,0,120,128,128,120,0,0,8, 8,120,136,136,120,0,0,0,0,112,152,224,120,0,0,48,72,64,64,224,64,64,64,0,0,120,136,136,120,8,112,128, 128,240,136,136,136,0,0,32,0,96,32,32,112,0,0,16,0,48,16,16,16,16,96,128,128,152,160,224,152,0,0,192, 64,64,64,64,112,0,0,0,0,240,168,168,168,0,0,0,0,240,136,136,136,0,0,0,0,112,136,136,112,0,0,0, 0,240,136,136,240,128,128,0,0,120,136,136,120,8,8,0,0,184,192,128,128,0,0,0,0,120,240,8,240,0,0,64, 64,240,64,72,48,0,0,0,0,136,136,136,120,0,0,0,0,136,136,80,32,0,0,0,0,136,168,168,216,0,0,0, 0,200,48,96,152,0,0,0,0,136,136,136,120,8,112,0,0,248,48,64,248,0,0,16,32,32,64,32,32,16,0,32, 32,32,32,32,32,32,0,64,32,32,16,32,32,64,0,80,160,0,0,0,0,0,0,0,32,80,80,248,0,0,0,112, 136,128,128,136,112,32,64,80,0,136,136,136,120,0,0,8,16,112,152,224,120,0,0,32,80,120,136,152,104,0,0,80, 0,120,136,152,104,0,0,64,32,120,136,152,104,0,0,32,0,120,136,152,104,0,0,0,0,120,128,128,120,32,64,32, 80,112,152,224,120,0,0,80,0,112,152,224,120,0,0,64,32,112,152,224,120,0,0,80,0,96,32,32,112,0,0,32, 80,96,32,32,112,0,0,64,32,96,32,32,112,0,0,80,112,136,136,248,136,0,0,32,112,136,136,248,136,0,0,24, 248,128,224,128,248,0,0,0,0,208,104,176,216,0,0,120,160,176,224,160,184,0,0,32,80,112,136,136,112,0,0,80, 0,112,136,136,112,0,0,64,32,112,136,136,112,0,0,32,80,136,136,136,120,0,0,64,32,136,136,136,120,0,0,80, 0,136,136,136,120,8,112,80,112,136,136,136,112,0,0,80,136,136,136,136,112,0,0,32,32,120,128,128,120,32,32,32, 80,64,224,64,72,176,0,136,136,80,248,32,112,32,0,128,208,176,176,184,208,136,128,56,64,240,64,240,64,56,0,8, 16,120,136,152,104,0,0,16,32,96,32,32,112,0,0,16,32,112,136,136,112,0,0,16,32,136,136,136,120,0,0,40, 80,240,136,136,136,0,0,40,208,168,168,152,136,0,0,0,0,120,136,152,104,0,112,0,0,112,136,136,112,0,112,32, 0,32,96,136,112,0,0,0,0,0,224,128,0,0,0,0,0,0,224,32,0,0,0,64,72,80,48,72,144,56,0,64, 72,80,40,88,184,8,0,32,0,32,32,32,32,0,0,0,0,0,72,144,72,0,0,0,0,0,144,72,144,0,0,40, 80,112,136,248,136,0,0,40,80,120,136,152,104,0,0,40,80,112,32,32,112,0,0,40,80,96,32,32,112,0,0,40, 112,136,136,136,112,0,0,40,80,112,136,136,112,0,0,40,80,136,136,136,120,0,0,40,80,0,136,136,120,0,0,252, 72,72,72,72,232,8,48,72,0,216,72,72,232,8,48,224,104,48,232,88,184,8,0,80,40,0,0,0,0,0,0,0, 32,80,136,80,32,0,0,0,72,80,32,104,168,0,0,124,168,168,168,104,40,40,68,112,128,112,136,112,8,136,112,0, 0,0,0,0,0,255,255,240,240,240,240,15,15,15,15,0,0,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0, 0,0,60,60,0,0,0,255,255,255,255,255,255,0,0,192,192,192,192,192,192,192,192,15,15,15,15,240,240,240,240,252, 252,252,252,252,252,252,252,3,3,3,3,3,3,3,3,63,63,63,63,63,63,63,63,17,34,68,136,17,34,68,136,136, 68,34,17,136,68,34,17,254,124,56,16,0,0,0,0,0,0,0,0,16,56,124,254,128,192,224,240,224,192,128,0,1, 3,7,15,7,3,1,0,255,126,60,24,24,60,126,255,129,195,231,255,255,231,195,129,240,240,240,240,0,0,0,0,0, 0,0,0,15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,0,240,240,240,240,51,51,204,204,51,51,204,204,0, 16,40,40,124,0,0,0,16,16,56,16,56,16,16,0,0,0,80,136,168,80,0,0,255,255,255,255,255,255,255,255,0, 0,0,0,255,255,255,255,240,240,240,240,240,240,240,240,15,15,15,15,15,15,15,15,255,255,255,255,0,0,0,0,0, 0,104,144,144,104,0,0,96,144,224,144,144,224,128,0,248,136,128,128,128,128,0,0,248,80,80,80,80,72,128,0,248, 72,32,64,136,248,0,0,0,0,120,144,136,112,0,0,0,0,136,136,200,176,128,128,0,0,80,80,32,80,80,32,112, 32,112,168,168,112,32,112,112,136,248,136,136,112,0,0,112,136,136,136,80,216,0,0,48,64,48,72,72,48,0,0,0, 0,80,168,168,80,0,0,0,16,112,168,168,112,64,0,0,112,128,224,128,112,0,0,112,136,136,136,136,136,0,0,0, 248,0,248,0,248,0,0,0,32,32,248,32,32,248,0,0,192,48,8,48,192,248,0,0,24,96,128,96,24,248,0,0, 24,32,32,32,32,32,32,32,32,32,32,32,32,192,0,0,32,0,248,0,32,0,0,0,104,176,0,104,176,0,0,0, 48,72,72,48,0,0,0,0,48,120,120,48,0,0,0,0,0,0,0,48,0,0,0,28,16,16,144,80,48,16,0,224, 144,144,0,0,0,0,0,96,16,96,240,0,0,0,0,0,112,112,112,112,112,112,0,170,85,170,85,170,85,170,85,197, 229,245,87,167,243,252,222,36,241,225,229,213,229,245,124,7,7,230,3,111,71,62,252,205,248,35,95,69,241,230,3,205, 248,35,71,219,168,87,163,176,225,205,128,243,123,209,245,203,122,196,26,37,241,225,193,201,4,5,200,7,7,16,252,201, 229,87,213,167,243,252,222,36,193,225,213,229,124,7,7,230,3,111,71,62,252,205,248,35,95,69,122,230,3,205,248,35, 71,219,168,87,163,176,225,89,205,133,243,209,229,203,122,196,26,37,225,201,8,217,243,253,229,241,221,229,225,87,167,252, 222,36,213,122,230,3,71,14,252,221,229,241,7,7,230,3,135,40,7,203,0,203,1,61,32,249,33,103,36,229,219,168, 245,161,176,217,195,140,243,8,217,243,209,203,122,196,26,37,8,217,201,243,229,111,230,3,71,62,171,198,85,5,242,123, 36,87,124,7,7,230,3,103,71,62,192,7,7,5,242,139,36,95,47,79,122,163,71,125,167,242,214,36,15,15,230,3, 229,197,71,62,171,198,85,5,242,165,36,163,71,122,230,192,103,219,168,111,230,192,180,211,168,58,255,255,47,161,176,79, 50,255,255,125,211,168,33,197,252,122,230,3,133,111,124,206,0,103,121,119,193,225,219,168,161,176,211,168,225,201,87,15, 15,95,230,192,111,219,168,79,230,63,181,211,168,123,230,3,111,124,38,3,24,2,41,41,214,64,48,250,124,47,103,58, 255,255,47,95,164,181,50,255,255,111,121,211,168,122,230,3,79,6,0,125,33,197,252,9,119,201,122,15,15,230,192,71, 219,168,79,230,63,176,211,168,123,50,255,255,121,211,168,122,230,3,79,6,0,33,197,252,9,115,201,211,168,94,24,3, 211,168,115,122,211,168,201,211,168,8,205,152,243,8,241,211,168,8,201,221,233,0,67,45,66,73,79,83,32,48,46,50, 57,32,32,32,32,32,32,99,98,105,111,115,46,115,102,46,110,101,116,13,10,67,104,97,114,97,99,116,101,114,32,115, 101,116,58,32,85,83,13,10,73,110,116,101,114,114,117,112,116,32,102,114,101,113,117,101,110,99,121,58,32,54,48,72, 122,13,10,75,101,121,98,111,97,114,100,32,116,121,112,101,58,32,85,83,13,10,13,10,13,10,13,10,0,73,110,105, 116,32,82,79,77,32,105,110,32,115,108,111,116,58,32,0,67,97,110,110,111,116,32,101,120,101,99,117,116,101,32,97, 32,66,65,83,73,67,32,82,79,77,46,13,10,0,69,82,82,79,82,58,0,77,69,77,79,82,89,32,78,79,84,32, 70,79,85,78,68,46,0,67,65,76,76,69,68,32,78,79,78,32,69,88,73,83,84,73,78,71,32,66,65,83,73,67, 46,0,83,84,65,67,75,32,69,82,82,79,82,46,0,13,10,13,10,78,111,32,99,97,114,116,114,105,100,103,101,32, 102,111,117,110,100,46,13,10,13,10,84,104,105,115,32,118,101,114,115,105,111,110,32,111,102,32,67,45,66,73,79,83, 32,99,97,110,13,10,111,110,108,121,32,115,116,97,114,116,32,99,97,114,116,114,105,100,103,101,115,46,13,10,80,108, 101,97,115,101,32,114,101,115,116,97,114,116,32,121,111,117,114,32,77,83,88,13,10,40,101,109,117,108,97,116,111,114, 41,32,119,105,116,104,32,97,32,99,97,114,116,114,105,100,103,101,13,10,105,110,115,101,114,116,101,100,46,0,48,49, 50,51,52,53,54,55,56,57,45,61,92,91,93,59,39,96,44,46,47,0,97,98,99,100,101,102,103,104,105,106,107,108, 109,110,111,112,113,114,115,116,117,118,119,120,121,122,41,33,64,35,36,37,94,38,42,40,95,43,124,123,125,58,34,126, 60,62,63,0,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,9,172, 171,186,239,189,244,251,236,7,23,241,30,1,13,6,5,187,243,242,29,0,196,17,188,199,205,20,21,19,220,198,221,200, 11,27,194,219,204,24,210,18,192,26,207,28,25,15,10,0,253,252,0,0,245,0,0,8,31,240,22,2,14,4,3,247, 174,175,246,0,254,0,250,193,206,212,16,214,223,202,222,201,12,211,195,215,203,169,209,0,197,213,208,249,170,248,235,159, 217,191,155,152,224,225,231,135,238,233,0,237,218,183,185,229,134,166,167,0,132,151,141,139,140,148,129,177,161,145,179,181, 230,164,162,163,131,147,137,150,130,149,136,138,160,133,216,173,158,190,156,157,0,0,226,128,0,0,0,232,234,182,184,228, 143,0,168,0,142,0,0,0,0,153,154,176,0,146,178,180,0,165,0,227,0,0,0,0,144,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,27,9,0,8,0,13,32,12,0,0,29,30,31,28,42,43,47,48,49,50,51,52,53,54, 55,56,57,45,44,46,0,128,112,129,0,130,1,132,245,135,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,229,193,27,123,178,40,3,9,24,248,193,201, 229,245,33,181,49,205,159,9,62,32,211,46,122,211,47,123,211,47,241,225,201,82,79,77,66,65,83,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,229,245, 33,73,58,205,159,9,241,225,201,66,65,83,73,67,32,115,116,97,116,101,109,101,110,116,115,32,97,114,101,32,110,111, 116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,205,142,16,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,245,33,34,125,205,159,9,241, 225,201,117,110,107,110,111,119,110,64,55,68,49,55,0,57,125,221,33,137,1,205,63,26,201,221,33,133,1,195,63,26, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,245,33,31,126,205,159,9,241,225,201,117, 110,107,110,111,119,110,64,55,69,49,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; } namespace MSX2 { const unsigned char BIOS[32768] = { 243,195,18,13,191,27,152,152,195,146,17,0,195,210,35,0,195,164,17,0,195,19,36,0,195,192,17,0,195,71,36,0, 195,198,17,0,195,134,36,0,195,204,17,33,2,1,0,0,195,222,17,0,0,0,0,0,195,154,25,195,243,17,195,253, 17,195,22,2,195,34,2,195,46,2,195,81,2,195,87,2,195,95,2,195,113,2,195,133,2,195,164,2,195,195,2,195, 226,2,195,235,2,0,195,18,26,195,53,3,195,148,3,195,157,3,195,166,3,195,175,3,195,184,3,195,16,4,195,63, 4,195,114,4,195,200,4,195,219,4,195,229,4,195,240,4,195,238,23,195,6,24,195,16,24,195,15,18,195,33,18,195, 52,18,195,89,18,195,141,21,195,183,21,195,197,21,195,234,21,195,8,22,195,255,21,195,217,22,195,245,22,195,7,23, 195,10,23,195,41,7,195,26,23,195,30,23,195,47,23,195,65,23,195,83,23,195,67,24,195,182,24,195,251,24,195,13, 25,195,102,23,195,121,23,195,139,23,195,157,23,195,176,23,195,195,23,195,213,23,195,30,25,195,45,25,195,80,8,195, 98,8,195,115,8,195,130,8,195,146,8,195,163,8,195,181,8,195,197,8,195,0,9,195,14,9,195,32,9,195,50,9, 195,67,9,195,83,9,195,101,9,195,119,9,195,137,9,195,154,9,195,91,25,195,21,24,195,30,24,195,33,24,195,36, 24,195,39,24,195,54,24,195,58,24,195,62,24,195,103,25,195,121,25,195,125,25,195,147,25,195,36,27,195,237,26,195, 243,26,195,222,16,195,44,6,195,59,27,195,50,6,195,71,6,195,81,6,195,141,6,195,147,6,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 79,6,0,9,9,195,17,2,190,35,40,5,35,35,16,248,201,78,35,102,105,233,58,224,243,230,191,71,14,1,205,46, 2,201,58,224,243,246,64,71,14,1,205,46,2,201,243,203,185,120,211,153,121,246,128,211,153,251,229,33,223,243,121,254, 8,56,7,254,24,48,8,33,223,255,120,6,0,9,119,225,201,205,95,2,219,152,201,245,205,113,2,241,211,152,201,243, 175,211,153,62,142,211,153,125,211,153,124,230,63,211,153,251,201,243,175,211,153,62,142,211,153,125,211,153,124,230,63,246, 64,211,153,251,201,245,58,175,252,254,5,48,5,205,113,2,24,3,205,81,6,11,12,120,65,79,12,241,211,152,16,252, 13,32,249,201,58,175,252,254,4,48,5,205,95,2,24,3,205,71,6,229,235,11,12,120,65,60,14,152,237,178,61,32, 251,225,201,235,58,175,252,254,4,48,5,205,113,2,24,3,205,81,6,235,11,12,120,65,60,14,152,237,179,61,32,251, 235,201,221,229,221,33,209,0,195,237,26,58,175,252,254,8,40,58,61,245,58,233,243,7,7,7,7,230,240,111,58,235, 243,181,71,14,7,205,46,2,241,192,58,233,243,7,7,7,7,230,240,33,234,243,182,42,191,243,1,32,0,245,205,113, 2,241,211,152,245,11,120,177,32,247,241,201,58,235,243,71,14,7,195,46,2,58,175,252,183,200,205,95,3,58,175,252, 254,4,56,16,42,40,249,37,37,1,0,2,58,233,243,230,15,205,50,6,42,38,249,1,0,8,175,205,50,6,201,58, 175,252,254,4,56,4,30,217,24,2,30,209,42,40,249,205,81,6,58,233,243,87,1,0,32,243,123,211,152,62,0,211, 152,121,211,152,12,205,229,4,48,3,12,12,12,122,211,152,16,232,251,201,221,229,221,33,213,0,195,237,26,221,229,221, 33,217,0,195,237,26,221,229,221,33,221,0,195,237,26,221,229,221,33,225,0,195,237,26,58,176,243,254,41,48,40,58, 223,243,230,241,71,14,0,205,46,2,58,224,243,230,231,246,16,71,12,205,46,2,17,179,243,14,2,175,205,163,4,19, 19,12,175,205,163,4,201,58,223,243,230,241,246,4,71,14,0,205,46,2,58,224,243,230,231,246,16,71,12,205,46,2, 17,34,249,14,2,62,3,205,163,4,12,175,205,163,4,201,58,223,243,230,241,71,14,0,205,46,2,58,224,243,230,231, 71,12,205,46,2,17,189,243,14,2,175,205,163,4,175,205,163,4,175,205,163,4,175,205,163,4,175,205,163,4,201,58, 223,243,230,241,246,2,71,14,0,205,46,2,58,224,243,230,231,71,12,205,46,2,17,199,243,14,2,175,205,163,4,62, 127,205,163,4,62,3,205,163,4,175,205,163,4,175,205,163,4,201,58,223,243,230,241,71,14,0,205,46,2,58,224,243, 230,231,246,8,71,12,205,46,2,17,209,243,14,2,175,205,163,4,175,205,163,4,175,205,163,4,175,205,163,4,175,205, 163,4,201,213,245,33,193,4,6,0,9,70,235,126,35,102,111,41,143,16,252,71,241,176,71,205,46,2,209,19,19,12, 201,0,0,6,10,5,9,5,38,0,111,41,41,41,205,229,4,48,2,41,41,237,91,38,249,25,201,135,135,42,40,249, 22,0,95,25,201,58,224,243,15,15,62,8,208,62,32,201,245,254,32,56,13,58,175,252,254,2,40,43,254,5,48,28, 241,201,254,13,32,250,241,229,197,42,185,252,1,8,0,9,34,185,252,33,0,0,34,183,252,193,225,201,241,221,229,221, 33,137,0,195,237,26,201,241,229,213,197,245,205,46,8,237,91,185,252,237,75,183,252,205,197,8,58,233,243,50,242,243, 42,42,249,237,75,203,243,9,17,64,252,58,185,252,230,7,6,0,79,9,205,116,5,1,240,0,9,58,185,252,47,230, 7,79,205,116,5,42,183,252,1,8,0,9,34,183,252,241,193,209,225,201,58,183,252,230,7,245,197,213,229,205,253,5, 58,183,252,230,7,40,26,58,44,249,47,50,44,249,225,1,8,0,9,209,193,241,205,253,5,58,44,249,47,50,44,249, 201,193,1,8,0,9,193,193,241,201,245,229,197,213,87,88,237,75,201,243,9,79,58,242,243,230,15,71,205,81,2,245, 230,15,184,40,17,241,245,15,15,15,15,230,15,184,32,13,241,209,193,225,241,201,241,209,193,225,241,47,201,122,179,254, 255,40,17,241,203,0,203,0,203,0,203,0,230,15,176,205,87,2,24,221,241,230,240,176,205,87,2,24,218,65,60,79, 62,7,168,60,71,197,205,81,2,71,26,205,170,5,13,40,3,15,24,250,79,58,44,249,161,79,120,177,205,87,2,35, 19,193,16,225,201,71,82,80,80,82,84,0,58,175,252,254,5,201,245,205,81,6,11,12,120,65,79,12,241,243,211,152, 16,252,13,32,249,251,201,205,93,6,124,230,63,211,153,251,201,205,93,6,124,230,63,246,64,211,153,251,201,58,246,250, 183,40,16,58,175,252,254,5,218,113,2,254,7,58,246,250,56,1,135,229,230,3,15,111,230,128,172,23,203,21,23,125, 23,243,211,153,62,142,211,153,225,125,211,153,201,205,71,6,219,152,201,245,205,81,6,241,211,152,201,243,211,153,62,143, 211,153,219,153,245,175,211,153,62,143,211,153,251,241,201,219,153,1,0,0,205,46,2,1,1,224,205,46,2,1,2,0, 205,46,2,1,3,128,205,46,2,1,4,1,205,46,2,1,8,8,205,46,2,62,1,50,220,243,50,221,243,205,90,7, 62,0,33,0,8,1,0,8,205,133,2,62,245,33,0,32,1,32,0,205,133,2,1,7,245,205,46,2,33,191,27,17, 0,8,1,0,8,205,195,2,201,1,20,0,205,46,2,1,21,59,205,46,2,1,22,5,205,46,2,201,33,191,27,237, 91,36,249,1,0,8,195,195,2,192,58,175,252,254,9,208,229,33,57,7,205,0,2,225,201,75,7,90,7,118,7,140, 7,118,7,160,7,176,7,195,7,211,7,58,176,243,254,40,1,192,3,56,8,1,128,7,24,3,1,0,3,42,34,249, 62,32,205,133,2,62,1,33,178,251,119,17,179,251,1,23,0,237,176,195,234,18,175,1,0,24,42,36,249,111,197,205, 133,2,193,58,234,243,42,201,243,195,133,2,58,234,243,230,15,71,7,7,7,7,176,1,0,8,42,36,249,195,133,2, 58,234,243,230,15,71,7,7,7,7,176,33,0,1,24,41,58,234,243,230,3,71,7,7,176,7,7,7,7,176,33,0, 2,24,22,58,234,243,230,15,71,7,7,7,7,176,33,0,2,24,6,58,234,243,33,0,1,245,205,37,8,241,14,44, 205,27,8,14,40,205,21,8,33,212,0,14,42,205,21,8,33,0,0,14,36,205,21,8,58,246,250,103,46,0,14,38, 205,21,8,62,0,14,45,205,27,8,62,192,14,46,205,27,8,205,37,8,201,125,205,27,8,12,124,243,211,153,121,246, 128,211,153,251,201,62,2,205,155,6,31,56,248,201,237,75,32,249,111,38,0,41,41,41,9,6,8,17,64,252,197,213, 229,58,31,249,205,210,35,225,209,193,18,19,35,16,239,201,229,245,33,91,8,205,171,9,241,225,201,82,73,71,72,84, 67,0,229,245,33,109,8,205,171,9,241,225,201,76,69,70,84,67,0,229,245,33,126,8,205,171,9,241,225,201,85,80, 67,0,229,245,33,141,8,205,171,9,241,225,201,84,85,80,67,0,229,245,33,157,8,205,171,9,241,225,201,68,79,87, 78,67,0,229,245,33,174,8,205,171,9,241,225,201,84,68,79,87,78,67,0,237,75,183,252,237,91,185,252,201,83,67, 65,76,88,89,0,197,237,67,183,252,237,83,185,252,42,185,252,41,41,41,41,41,46,0,6,0,62,255,50,44,249,121, 230,7,40,10,71,62,255,167,31,16,252,50,44,249,121,230,248,79,6,0,9,34,42,249,193,201,77,65,80,88,89,0, 58,44,249,42,42,249,201,70,69,84,67,72,67,0,229,245,33,25,9,205,171,9,241,225,201,83,84,79,82,69,67,0, 229,245,33,43,9,205,171,9,241,225,201,83,69,84,65,84,82,0,229,245,33,61,9,205,171,9,241,225,201,82,69,65, 68,67,0,229,245,33,78,9,205,171,9,241,225,201,83,69,84,67,0,229,245,33,94,9,205,171,9,241,225,201,78,83, 69,84,67,88,0,229,245,33,112,9,205,171,9,241,225,201,71,84,65,83,80,67,0,229,245,33,130,9,205,171,9,241, 225,201,80,78,84,73,78,73,0,229,245,33,148,9,205,171,9,241,225,201,83,67,65,78,82,0,229,245,33,165,9,205, 171,9,241,225,201,83,67,65,78,76,0,62,35,211,46,205,183,9,62,0,211,46,201,126,35,183,200,211,47,24,248,230, 15,254,10,48,5,198,48,211,47,201,198,55,211,47,201,245,15,15,15,15,205,191,9,241,205,191,9,201,124,205,207,9, 125,205,207,9,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,201,221,225,253,225,241,193,209,225,217,8,241,193,209,225,251,201,62,130,211,171,62,80,211,170,175,211,255,60,211,254, 60,211,253,60,211,252,33,255,255,217,219,168,246,240,71,120,211,168,58,255,255,47,246,240,79,121,50,255,255,33,0,255, 62,15,119,190,32,8,47,119,190,32,3,37,24,242,36,124,183,40,21,217,188,56,5,40,3,217,24,12,46,0,103,217, 120,217,71,217,121,217,79,217,121,214,16,79,48,203,120,214,16,71,48,187,217,125,183,40,6,17,10,38,195,76,27,120, 211,168,121,50,255,255,217,33,0,243,249,205,83,15,205,151,16,205,222,16,205,175,6,251,205,243,17,6,15,17,79,14, 33,0,128,197,229,213,58,193,252,205,210,35,225,209,193,190,32,18,235,19,35,16,236,221,33,16,128,253,42,192,252,205, 71,36,24,17,62,5,50,234,243,50,235,243,205,157,3,33,105,37,205,51,17,243,62,4,211,153,62,142,211,153,175,211, 153,246,64,211,153,62,118,211,152,175,211,153,33,252,250,211,153,219,152,254,118,40,4,203,206,24,2,203,214,175,211,153, 62,142,211,153,251,6,120,205,47,17,205,191,35,62,4,50,235,243,62,4,50,234,243,62,15,50,233,243,62,29,50,175, 243,205,157,3,221,33,65,1,205,243,26,33,105,37,205,51,17,205,94,14,205,218,254,205,61,15,62,1,50,153,253,175, 50,41,251,205,203,254,33,68,38,205,51,17,195,25,27,67,45,66,73,79,83,32,76,111,103,111,32,82,79,77,33,201, 252,17,202,252,1,63,0,54,0,237,176,33,193,252,175,229,182,33,0,64,205,165,14,204,178,14,33,0,128,205,165,14, 204,178,14,203,127,40,6,198,4,203,103,40,228,225,35,60,230,3,32,219,201,71,205,210,35,35,245,120,205,210,35,35, 87,241,95,120,201,229,205,149,14,33,65,66,205,198,17,120,225,201,229,245,33,210,37,205,51,17,241,245,71,230,3,198, 48,205,89,18,120,203,120,40,15,62,46,205,89,18,120,15,15,230,3,198,48,205,89,18,62,13,205,89,18,62,10,205, 89,18,241,225,35,35,205,52,15,40,21,79,213,221,225,245,253,225,219,153,183,250,242,14,245,229,205,71,36,243,225,241, 14,0,205,52,15,40,2,203,233,205,52,15,40,2,203,241,205,52,15,40,2,203,249,71,230,12,95,120,7,7,7,7, 230,48,179,95,124,7,7,230,3,179,33,201,252,22,0,95,25,113,120,201,197,205,149,14,122,179,120,193,201,33,201,252, 6,64,126,203,127,40,8,229,33,229,37,205,51,17,225,35,16,240,201,62,0,33,128,243,119,17,129,243,1,125,12,237, 176,62,201,33,0,243,119,17,1,243,1,127,0,237,176,62,201,33,154,253,119,17,155,253,1,77,2,237,176,62,255,33, 218,251,119,17,219,251,1,21,0,237,176,62,0,33,240,251,119,17,241,251,1,39,0,237,176,62,0,33,231,255,119,17, 232,255,1,15,0,237,176,62,8,50,231,255,62,0,50,232,255,33,240,251,34,248,243,34,250,243,217,34,72,252,217,33, 128,243,34,74,252,34,116,246,33,78,37,17,128,243,1,26,0,237,176,33,0,0,34,179,243,33,0,8,34,183,243,33, 0,24,34,189,243,33,0,32,34,191,243,33,0,0,34,193,243,33,0,27,34,195,243,33,0,56,34,197,243,33,0,24, 34,199,243,33,0,32,34,201,243,33,0,0,34,203,243,33,0,27,34,205,243,33,0,56,34,207,243,33,0,8,34,209, 243,33,0,0,34,213,243,33,0,27,34,215,243,33,0,56,34,217,243,33,89,249,34,243,243,33,117,249,34,93,249,33, 245,249,34,99,249,33,117,250,34,105,249,62,127,50,92,249,50,98,249,50,104,249,62,39,50,174,243,62,32,50,175,243, 58,175,243,50,176,243,62,24,50,177,243,62,4,50,235,243,62,4,50,234,243,62,15,50,233,243,62,160,50,224,243,58, 193,252,50,31,249,42,4,0,34,32,249,62,195,33,89,18,34,229,254,50,228,254,201,243,33,193,252,219,168,87,230,63, 79,211,168,58,255,255,47,95,230,15,50,255,255,71,58,255,255,47,184,32,21,123,230,15,246,80,50,255,255,71,58,255, 255,47,184,32,5,6,128,123,24,4,6,0,123,47,50,255,255,122,211,168,112,35,121,198,64,79,48,197,251,201,1,0, 4,33,193,252,197,229,121,182,203,127,32,5,205,13,17,24,3,205,0,17,225,193,216,35,12,16,233,175,50,248,250,201, 6,4,197,205,13,17,193,216,198,4,16,246,201,79,50,248,250,33,0,0,205,38,17,254,67,32,6,35,205,38,17,254, 68,121,55,200,183,201,121,197,229,205,210,35,225,193,201,118,16,253,201,58,175,252,254,5,48,9,126,183,200,205,89,18, 35,24,247,126,183,200,221,33,137,0,205,243,26,35,24,243,14,32,58,175,252,183,192,14,40,58,176,243,254,41,216,14, 80,201,197,245,205,80,17,58,176,243,237,68,129,60,203,63,111,58,221,243,61,133,111,38,0,68,58,220,243,61,203,63, 48,1,9,203,33,203,16,183,32,244,237,75,34,249,9,241,193,201,229,245,33,157,17,205,171,9,241,225,201,83,89,78, 67,72,82,0,205,72,255,126,35,254,0,200,254,58,200,254,48,56,3,254,58,216,254,32,40,237,254,9,40,233,183,201, 245,205,228,254,241,201,124,186,192,125,187,201,229,245,33,215,17,205,171,9,241,225,201,71,69,84,89,80,82,0,8,217, 225,126,35,94,35,86,35,213,221,225,245,253,225,229,8,217,195,71,36,30,143,62,15,205,6,24,195,238,23,229,245,33, 8,18,205,171,9,241,225,201,73,78,73,70,78,75,0,229,245,33,26,18,205,171,9,241,225,201,83,84,82,84,77,83, 0,251,229,213,42,250,243,237,91,248,243,231,62,255,32,1,175,209,225,201,205,194,253,229,213,42,250,243,237,91,248,243, 231,32,4,251,118,24,242,126,245,35,125,254,24,32,3,33,240,251,34,250,243,241,209,225,201,229,213,197,245,205,164,253, 58,175,252,254,2,48,19,241,245,205,184,20,241,245,205,127,18,205,205,20,58,221,243,50,97,246,241,193,209,225,201,205, 197,21,208,40,18,245,58,167,252,183,194,98,19,241,254,32,56,42,254,127,202,170,20,205,98,17,205,87,2,42,220,243, 58,176,243,36,188,56,4,34,220,243,201,17,177,251,38,0,25,175,119,42,220,243,205,17,19,195,211,18,6,12,33,60, 21,195,8,2,62,32,205,151,18,58,221,243,230,7,254,1,32,242,201,42,220,243,58,177,243,44,189,48,9,229,205,234, 18,205,53,20,225,45,34,220,243,201,33,1,1,34,220,243,201,205,211,19,42,220,243,229,205,17,19,58,220,243,33,177, 243,190,48,8,205,211,18,205,211,19,24,239,225,34,220,243,201,62,1,50,221,243,201,62,255,50,167,252,201,58,221,243, 33,176,243,190,48,3,60,24,31,58,220,243,33,177,243,190,208,60,50,220,243,24,218,58,221,243,61,32,11,58,220,243, 61,200,50,220,243,58,176,243,50,221,243,201,58,220,243,61,200,50,220,243,201,58,220,243,33,177,243,190,208,60,50,220, 243,201,71,60,32,12,50,167,252,241,6,15,33,96,21,195,8,2,241,16,4,14,0,24,4,16,24,14,1,254,52,40, 6,254,53,40,8,24,46,121,50,170,252,24,40,121,50,169,252,24,34,16,8,6,31,144,50,221,243,24,24,16,22,6, 31,144,50,220,243,62,3,24,13,62,1,24,9,62,2,24,5,62,4,24,1,175,50,167,252,201,58,221,243,33,176,243, 190,208,60,50,221,243,201,58,221,243,61,200,50,221,243,201,205,17,19,33,177,251,58,220,243,95,22,0,25,119,58,176, 243,60,33,221,243,150,79,6,0,62,32,205,98,17,195,133,2,205,17,19,42,220,243,229,69,58,177,243,50,220,243,144, 71,4,58,220,243,24,14,205,98,17,235,61,50,220,243,205,98,17,205,115,20,16,240,225,34,220,243,38,0,58,177,243, 87,30,0,149,61,79,6,0,33,177,251,25,235,98,107,43,237,184,195,211,19,205,17,19,42,220,243,229,69,58,177,243, 144,71,4,58,220,243,24,14,205,98,17,235,60,50,220,243,205,98,17,205,115,20,16,240,205,211,19,225,34,220,243,38, 0,58,177,243,149,61,79,6,0,17,177,251,25,84,93,35,237,176,201,245,197,6,0,58,176,243,79,254,41,56,11,14, 40,205,144,20,58,176,243,214,40,79,205,144,20,193,241,201,229,213,197,17,24,252,205,164,2,193,209,213,197,33,24,252, 205,195,2,193,225,9,235,225,9,201,58,221,243,254,1,200,62,32,205,151,18,195,55,19,58,169,252,254,1,192,58,175, 252,254,2,208,58,204,251,205,98,17,195,87,2,58,169,252,254,1,192,58,175,252,254,2,208,205,98,17,205,81,2,50, 204,251,167,22,0,95,203,19,203,18,203,19,203,18,203,19,203,18,175,33,175,252,190,32,5,42,183,243,24,3,42,193, 243,229,25,17,24,252,1,8,0,205,164,2,58,170,252,254,0,32,7,33,24,252,6,8,24,5,33,30,252,6,2,126, 47,119,35,16,250,225,17,248,7,25,235,33,24,252,1,8,0,205,195,2,205,98,17,62,255,195,87,2,7,10,23,8, 55,19,9,196,18,10,211,18,11,234,18,12,42,7,13,17,19,27,23,19,28,29,19,29,55,19,30,76,19,31,85,19, 106,42,7,69,42,7,75,211,19,74,241,18,108,208,19,76,241,19,77,53,20,89,177,19,65,76,19,66,85,19,67,186, 19,68,199,19,72,234,18,120,169,19,121,173,19,205,182,255,245,205,217,22,56,8,205,183,21,40,246,241,24,12,62,13, 205,170,21,175,50,21,244,241,55,201,245,211,145,62,0,211,144,47,211,144,241,167,201,205,187,255,219,144,31,31,62,255, 48,1,47,167,201,229,245,33,166,252,175,190,119,32,8,241,254,1,32,19,119,24,17,241,254,64,56,9,254,96,48,5, 214,64,191,24,2,254,80,55,225,201,205,219,253,58,170,246,167,202,8,22,62,1,50,221,243,195,8,22,63,32,0,205, 224,253,33,252,21,205,51,17,42,221,243,34,202,251,17,176,251,38,0,125,25,119,205,52,18,254,127,202,152,22,254,32, 48,17,6,20,33,153,22,205,0,2,175,50,168,252,50,170,252,24,227,245,58,168,252,167,196,63,22,241,223,24,201,205, 184,20,42,220,243,34,188,246,62,32,50,167,246,205,98,17,205,81,2,254,32,32,40,42,220,243,58,176,243,188,32,29, 38,0,17,177,251,25,126,183,40,19,58,167,246,205,98,17,205,87,2,42,188,246,34,220,243,201,195,205,20,62,32,245, 58,167,246,223,241,50,167,246,24,195,201,55,225,201,201,201,201,201,175,225,201,201,201,201,201,24,0,24,0,138,22,139, 22,24,0,142,22,143,22,24,0,144,22,24,0,24,0,24,0,24,0,145,22,146,22,24,0,24,0,24,0,149,22,24, 0,24,0,150,22,24,0,24,0,24,0,24,0,24,0,151,22,24,0,24,0,24,0,24,0,219,170,230,240,246,7,211, 170,219,169,230,16,192,219,170,230,240,246,6,211,170,219,169,230,2,192,55,201,229,245,33,0,23,205,171,9,241,225,201, 73,83,67,78,84,67,0,195,245,22,229,245,33,21,23,205,171,9,241,225,201,66,69,69,80,0,34,220,243,201,229,245, 33,41,23,205,171,9,241,225,201,70,78,75,83,66,0,229,245,33,58,23,205,171,9,241,225,201,69,82,65,70,78,75, 0,229,245,33,76,23,205,171,9,241,225,201,68,83,80,70,78,75,0,58,175,252,254,2,216,58,176,252,205,189,253,183, 202,148,3,195,157,3,229,245,33,114,23,205,171,9,241,225,55,201,84,65,80,73,79,78,0,229,245,33,133,23,205,171, 9,241,225,55,201,84,65,80,73,78,0,229,245,33,150,23,205,171,9,241,225,201,84,65,80,73,79,70,0,229,245,33, 169,23,205,171,9,241,225,55,201,84,65,80,79,79,78,0,229,245,33,188,23,205,171,9,241,225,55,201,84,65,80,79, 85,84,0,229,245,33,206,23,205,171,9,241,225,201,84,65,80,79,79,70,0,197,71,219,170,4,40,12,203,231,5,40, 9,203,167,5,40,4,193,201,238,16,211,170,193,201,30,0,62,8,205,6,24,60,205,6,24,60,205,6,24,60,30,184, 62,7,205,6,24,201,243,211,160,245,123,211,161,251,241,201,211,160,219,162,201,183,62,14,40,1,60,211,171,201,219,168, 201,211,168,201,219,153,201,243,197,79,219,170,230,240,177,211,170,219,169,193,251,201,205,167,255,201,205,172,255,201,58,100, 248,167,201,197,254,0,32,25,62,8,205,39,24,15,15,15,15,47,230,15,229,33,166,24,22,0,95,25,126,225,193,167, 201,229,213,30,0,61,40,2,203,243,62,15,243,205,16,24,251,230,191,179,95,62,15,205,6,24,62,14,243,205,16,24, 251,47,230,15,33,150,24,6,0,79,9,126,209,225,193,167,201,62,0,193,167,201,0,1,5,0,7,8,6,7,3,2, 4,3,0,1,5,0,0,7,1,8,5,6,0,7,3,0,2,1,4,5,3,0,254,5,48,3,183,32,9,62,8,205, 39,24,246,254,60,201,243,61,213,30,3,71,230,1,40,2,30,76,62,15,205,16,24,230,191,179,95,62,15,205,6,24, 120,6,16,230,2,40,2,6,32,62,14,243,205,16,24,251,209,160,40,2,24,3,62,255,201,175,201,229,245,33,7,25, 205,171,9,241,225,175,201,71,84,80,65,68,0,229,245,33,24,25,205,171,9,241,225,201,71,84,80,68,76,0,205,78, 25,70,4,35,126,144,35,35,166,111,38,0,201,205,78,25,126,60,71,35,150,200,120,35,35,229,166,43,43,43,119,225, 35,126,35,102,111,5,72,6,0,9,115,246,1,201,42,243,243,71,7,7,128,128,79,6,0,9,201,183,219,170,203,183, 32,2,203,247,211,170,201,229,245,33,114,25,205,171,9,241,225,201,79,85,84,68,76,80,0,46,2,24,3,58,56,251, 213,22,0,93,33,65,251,25,30,37,183,40,4,25,61,24,249,209,201,42,250,243,34,248,243,201,229,213,197,245,217,8, 229,213,197,245,253,229,221,229,205,154,253,219,153,183,50,231,243,242,2,26,205,159,253,42,158,252,35,34,158,252,175,50, 217,251,58,246,243,61,50,246,243,32,55,62,3,50,246,243,175,205,182,24,47,230,1,50,232,243,205,23,26,42,248,243, 237,91,250,243,231,32,27,58,247,243,61,50,247,243,32,18,33,218,251,1,255,11,113,35,16,252,205,23,26,62,1,50, 247,243,221,225,253,225,241,193,209,225,217,8,241,193,209,225,251,201,205,214,253,237,69,219,170,230,240,79,6,11,33,229, 251,121,211,170,219,169,119,35,12,16,246,221,33,218,251,17,229,251,58,235,251,15,33,211,38,56,3,33,3,39,14,11, 26,221,190,0,196,104,26,47,221,166,0,8,26,221,119,0,8,6,8,15,56,26,35,16,250,221,35,19,13,200,121,254, 5,32,221,33,243,39,24,216,245,62,5,50,247,243,241,201,245,121,254,5,40,7,254,4,40,28,195,199,26,120,254,3, 32,4,62,0,24,33,254,2,32,4,62,1,24,25,254,1,32,53,62,2,24,17,120,254,8,32,4,62,3,24,8,254, 7,32,36,62,4,24,0,229,197,213,7,7,7,7,33,127,248,22,0,95,25,235,26,167,40,8,213,205,212,26,209,19, 24,244,209,193,225,24,9,126,167,40,5,229,205,212,26,225,241,195,86,26,42,248,243,119,35,125,254,24,32,3,33,240, 251,213,237,91,250,243,231,209,200,34,248,243,201,205,243,26,221,225,201,8,217,245,197,213,229,237,87,245,217,253,229,58, 248,250,245,253,225,8,205,71,36,253,225,8,217,241,226,18,27,251,225,209,193,241,217,8,201,24,254,205,218,254,17,55, 38,195,76,27,229,245,33,52,27,205,171,9,241,225,17,28,38,195,76,27,67,65,76,66,65,83,0,237,91,220,243,213, 34,220,243,205,211,19,209,237,83,220,243,201,219,153,33,27,40,6,12,14,153,237,179,1,0,8,175,211,152,11,120,177, 32,248,33,191,27,1,0,8,126,211,152,35,11,120,177,32,247,62,0,211,153,62,64,211,153,33,3,38,126,211,152,35, 126,167,32,249,26,211,152,19,26,167,32,249,195,25,27,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,60,66,165,165,195,189,66,60,60,126,219,219,189,195,126,60,108,170,146,68,68,40,16,0,16, 40,68,130,68,40,16,0,16,56,56,214,254,214,56,0,16,56,124,124,254,214,56,0,0,0,0,24,24,0,0,0,255, 255,255,231,231,255,255,255,60,66,129,129,129,129,66,60,195,189,126,126,126,126,189,195,12,4,8,112,136,136,112,0,0, 112,136,136,112,32,112,32,32,48,40,40,32,224,192,0,56,60,36,36,228,220,24,0,16,68,56,170,56,68,16,0,16, 16,16,56,16,16,16,16,16,16,16,239,0,0,0,0,0,0,0,239,16,16,16,16,16,16,16,224,16,16,16,16,16, 16,16,15,16,16,16,16,16,16,16,239,16,16,16,16,16,16,16,16,16,16,16,16,0,0,0,255,0,0,0,0,0, 0,0,15,16,16,16,16,0,0,0,224,16,16,16,16,16,16,16,15,0,0,0,0,16,16,16,224,0,0,0,0,129, 66,36,24,24,36,66,129,1,2,4,8,16,32,64,128,128,64,32,16,8,4,2,1,0,0,16,255,16,0,0,0,0, 0,0,0,0,0,0,0,32,32,32,32,0,32,0,0,80,80,0,0,0,0,0,0,0,80,248,80,248,80,0,0,32, 112,160,112,40,112,32,0,0,200,208,32,88,152,0,0,96,144,96,168,152,96,0,0,64,64,0,0,0,0,0,0,32, 64,64,64,64,32,0,0,32,16,16,16,16,32,0,0,0,32,168,112,80,136,0,0,0,32,32,248,32,32,0,0,0, 0,0,0,0,64,64,0,0,0,0,248,0,0,0,0,0,0,0,0,0,64,0,0,0,8,16,32,64,128,0,0,112, 136,168,168,136,112,0,0,32,96,32,32,32,112,0,0,112,136,8,112,128,248,0,0,248,8,48,8,136,112,0,0,16, 48,80,248,16,16,0,0,248,128,112,8,136,112,0,0,48,64,112,136,136,112,0,0,248,136,16,32,32,32,0,0,112, 136,112,136,136,112,0,0,112,136,136,120,8,112,0,0,0,0,64,0,0,64,0,0,0,0,64,0,0,64,64,0,0, 24,96,128,96,24,0,0,0,0,248,0,248,0,0,0,0,192,48,8,48,192,0,0,112,136,48,32,0,32,0,0,112, 136,152,168,168,152,64,0,112,136,136,248,136,136,0,0,224,144,224,144,136,240,0,0,112,136,128,128,136,112,0,0,240, 72,72,72,72,240,0,0,248,128,224,128,128,248,0,0,248,128,128,224,128,128,0,0,112,136,128,184,136,112,0,0,136, 136,248,136,136,136,0,0,112,32,32,32,32,112,0,0,56,8,8,8,136,112,0,0,136,144,160,224,144,136,0,0,128, 128,128,128,128,248,0,0,216,168,168,136,136,136,0,0,200,168,168,152,152,136,0,0,112,136,136,136,136,112,0,0,240, 136,136,240,128,128,0,0,112,136,136,168,144,104,0,0,240,136,136,240,160,152,0,0,112,128,112,8,8,240,0,0,248, 32,32,32,32,32,0,0,136,136,136,136,136,120,0,0,136,136,136,80,80,32,0,0,136,136,168,168,168,216,0,0,136, 80,32,80,136,136,0,0,136,136,112,32,32,32,0,0,248,16,32,64,128,248,0,0,112,64,64,64,64,112,0,0,0, 128,64,32,16,8,0,0,112,16,16,16,16,112,0,0,64,160,0,0,0,0,0,0,0,0,0,0,0,0,248,0,32, 16,0,0,0,0,0,0,0,0,120,136,152,104,0,0,128,128,240,136,136,240,0,0,0,0,120,128,128,120,0,0,8, 8,120,136,136,120,0,0,0,0,112,152,224,120,0,0,48,72,64,64,224,64,64,64,0,0,120,136,136,120,8,112,128, 128,240,136,136,136,0,0,32,0,96,32,32,112,0,0,16,0,48,16,16,16,16,96,128,128,152,160,224,152,0,0,192, 64,64,64,64,112,0,0,0,0,240,168,168,168,0,0,0,0,240,136,136,136,0,0,0,0,112,136,136,112,0,0,0, 0,240,136,136,240,128,128,0,0,120,136,136,120,8,8,0,0,184,192,128,128,0,0,0,0,120,240,8,240,0,0,64, 64,240,64,72,48,0,0,0,0,136,136,136,120,0,0,0,0,136,136,80,32,0,0,0,0,136,168,168,216,0,0,0, 0,200,48,96,152,0,0,0,0,136,136,136,120,8,112,0,0,248,48,64,248,0,0,16,32,32,64,32,32,16,0,32, 32,32,32,32,32,32,0,64,32,32,16,32,32,64,0,80,160,0,0,0,0,0,0,0,32,80,80,248,0,0,0,112, 136,128,128,136,112,32,64,80,0,136,136,136,120,0,0,8,16,112,152,224,120,0,0,32,80,120,136,152,104,0,0,80, 0,120,136,152,104,0,0,64,32,120,136,152,104,0,0,32,0,120,136,152,104,0,0,0,0,120,128,128,120,32,64,32, 80,112,152,224,120,0,0,80,0,112,152,224,120,0,0,64,32,112,152,224,120,0,0,80,0,96,32,32,112,0,0,32, 80,96,32,32,112,0,0,64,32,96,32,32,112,0,0,80,112,136,136,248,136,0,0,32,112,136,136,248,136,0,0,24, 248,128,224,128,248,0,0,0,0,208,104,176,216,0,0,120,160,176,224,160,184,0,0,32,80,112,136,136,112,0,0,80, 0,112,136,136,112,0,0,64,32,112,136,136,112,0,0,32,80,136,136,136,120,0,0,64,32,136,136,136,120,0,0,80, 0,136,136,136,120,8,112,80,112,136,136,136,112,0,0,80,136,136,136,136,112,0,0,32,32,120,128,128,120,32,32,32, 80,64,224,64,72,176,0,136,136,80,248,32,112,32,0,128,208,176,176,184,208,136,128,56,64,240,64,240,64,56,0,8, 16,120,136,152,104,0,0,16,32,96,32,32,112,0,0,16,32,112,136,136,112,0,0,16,32,136,136,136,120,0,0,40, 80,240,136,136,136,0,0,40,208,168,168,152,136,0,0,0,0,120,136,152,104,0,112,0,0,112,136,136,112,0,112,32, 0,32,96,136,112,0,0,0,0,0,224,128,0,0,0,0,0,0,224,32,0,0,0,64,72,80,48,72,144,56,0,64, 72,80,40,88,184,8,0,32,0,32,32,32,32,0,0,0,0,0,72,144,72,0,0,0,0,0,144,72,144,0,0,40, 80,112,136,248,136,0,0,40,80,120,136,152,104,0,0,40,80,112,32,32,112,0,0,40,80,96,32,32,112,0,0,40, 112,136,136,136,112,0,0,40,80,112,136,136,112,0,0,40,80,136,136,136,120,0,0,40,80,0,136,136,120,0,0,252, 72,72,72,72,232,8,48,72,0,216,72,72,232,8,48,224,104,48,232,88,184,8,0,80,40,0,0,0,0,0,0,0, 32,80,136,80,32,0,0,0,72,80,32,104,168,0,0,124,168,168,168,104,40,40,68,112,128,112,136,112,8,136,112,0, 0,0,0,0,0,255,255,240,240,240,240,15,15,15,15,0,0,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0, 0,0,60,60,0,0,0,255,255,255,255,255,255,0,0,192,192,192,192,192,192,192,192,15,15,15,15,240,240,240,240,252, 252,252,252,252,252,252,252,3,3,3,3,3,3,3,3,63,63,63,63,63,63,63,63,17,34,68,136,17,34,68,136,136, 68,34,17,136,68,34,17,254,124,56,16,0,0,0,0,0,0,0,0,16,56,124,254,128,192,224,240,224,192,128,0,1, 3,7,15,7,3,1,0,255,126,60,24,24,60,126,255,129,195,231,255,255,231,195,129,240,240,240,240,0,0,0,0,0, 0,0,0,15,15,15,15,15,15,15,15,0,0,0,0,0,0,0,0,240,240,240,240,51,51,204,204,51,51,204,204,0, 16,40,40,124,0,0,0,16,16,56,16,56,16,16,0,0,0,80,136,168,80,0,0,255,255,255,255,255,255,255,255,0, 0,0,0,255,255,255,255,240,240,240,240,240,240,240,240,15,15,15,15,15,15,15,15,255,255,255,255,0,0,0,0,0, 0,104,144,144,104,0,0,96,144,224,144,144,224,128,0,248,136,128,128,128,128,0,0,248,80,80,80,80,72,128,0,248, 72,32,64,136,248,0,0,0,0,120,144,136,112,0,0,0,0,136,136,200,176,128,128,0,0,80,80,32,80,80,32,112, 32,112,168,168,112,32,112,112,136,248,136,136,112,0,0,112,136,136,136,80,216,0,0,48,64,48,72,72,48,0,0,0, 0,80,168,168,80,0,0,0,16,112,168,168,112,64,0,0,112,128,224,128,112,0,0,112,136,136,136,136,136,0,0,0, 248,0,248,0,248,0,0,0,32,32,248,32,32,248,0,0,192,48,8,48,192,248,0,0,24,96,128,96,24,248,0,0, 24,32,32,32,32,32,32,32,32,32,32,32,32,192,0,0,32,0,248,0,32,0,0,0,104,176,0,104,176,0,0,0, 48,72,72,48,0,0,0,0,48,120,120,48,0,0,0,0,0,0,0,48,0,0,0,28,16,16,144,80,48,16,0,224, 144,144,0,0,0,0,0,96,16,96,240,0,0,0,0,0,112,112,112,112,112,112,0,170,85,170,85,170,85,170,85,175, 211,153,246,64,211,153,1,0,64,175,211,152,11,120,177,32,248,201,197,229,245,87,167,243,252,241,36,241,225,229,213,229, 245,124,7,7,230,3,111,71,62,252,205,11,36,95,69,241,230,3,205,11,36,71,219,168,87,163,176,225,205,128,243,123, 209,245,203,122,196,45,37,241,225,193,201,4,5,200,7,7,16,252,201,229,87,213,167,243,252,241,36,193,225,213,229,124, 7,7,230,3,111,71,62,252,205,11,36,95,69,122,230,3,205,11,36,71,219,168,87,163,176,225,89,205,133,243,209,229, 203,122,196,45,37,225,201,8,217,243,253,229,241,221,229,225,87,167,252,241,36,213,122,230,3,71,14,252,221,229,241,7, 7,230,3,135,40,7,203,0,203,1,61,32,249,33,122,36,229,219,168,245,161,176,217,195,140,243,8,217,243,209,203,122, 196,45,37,8,217,201,243,229,111,230,3,71,62,171,198,85,5,242,142,36,87,124,7,7,230,3,103,71,62,192,7,7, 5,242,158,36,95,47,79,122,163,71,125,167,242,233,36,15,15,230,3,229,197,71,62,171,198,85,5,242,184,36,163,71, 122,230,192,103,219,168,111,230,192,180,211,168,58,255,255,47,161,176,79,50,255,255,125,211,168,33,197,252,122,230,3,133, 111,124,206,0,103,121,119,193,225,219,168,161,176,211,168,225,201,87,15,15,95,230,192,111,219,168,79,230,63,181,211,168, 123,230,3,111,124,38,3,24,2,41,41,214,64,48,250,124,47,103,58,255,255,47,95,164,181,50,255,255,111,121,211,168, 122,230,3,79,6,0,125,33,197,252,9,119,201,122,15,15,230,192,71,219,168,79,230,63,176,211,168,123,50,255,255,121, 211,168,122,230,3,79,6,0,33,197,252,9,115,201,211,168,94,24,3,211,168,115,122,211,168,201,211,168,8,205,152,243, 8,241,211,168,8,201,221,233,0,67,45,66,73,79,83,32,48,46,50,57,32,32,32,32,32,32,99,98,105,111,115,46, 115,102,46,110,101,116,13,10,67,104,97,114,97,99,116,101,114,32,115,101,116,58,32,85,83,13,10,68,101,102,97,117, 108,116,32,105,110,116,101,114,114,117,112,116,32,102,114,101,113,46,58,32,54,48,72,122,75,101,121,98,111,97,114,100, 32,116,121,112,101,58,32,85,83,13,10,13,10,13,10,13,10,0,73,110,105,116,32,82,79,77,32,105,110,32,115,108, 111,116,58,32,0,67,97,110,110,111,116,32,101,120,101,99,117,116,101,32,97,32,66,65,83,73,67,32,82,79,77,46, 13,10,0,69,82,82,79,82,58,0,77,69,77,79,82,89,32,78,79,84,32,70,79,85,78,68,46,0,67,65,76,76, 69,68,32,78,79,78,32,69,88,73,83,84,73,78,71,32,66,65,83,73,67,46,0,83,84,65,67,75,32,69,82,82, 79,82,46,0,13,10,13,10,78,111,32,99,97,114,116,114,105,100,103,101,32,102,111,117,110,100,46,13,10,13,10,84, 104,105,115,32,118,101,114,115,105,111,110,32,111,102,32,67,45,66,73,79,83,32,99,97,110,13,10,111,110,108,121,32, 115,116,97,114,116,32,99,97,114,116,114,105,100,103,101,115,46,13,10,80,108,101,97,115,101,32,114,101,115,116,97,114, 116,32,121,111,117,114,32,77,83,88,13,10,40,101,109,117,108,97,116,111,114,41,32,119,105,116,104,32,97,32,99,97, 114,116,114,105,100,103,101,13,10,105,110,115,101,114,116,101,100,46,0,48,49,50,51,52,53,54,55,56,57,45,61,92, 91,93,59,39,96,44,46,47,0,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119, 120,121,122,41,33,64,35,36,37,94,38,42,40,95,43,124,123,125,58,34,126,60,62,63,0,65,66,67,68,69,70,71, 72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,9,172,171,186,239,189,244,251,236,7,23,241,30, 1,13,6,5,187,243,242,29,0,196,17,188,199,205,20,21,19,220,198,221,200,11,27,194,219,204,24,210,18,192,26,207, 28,25,15,10,0,253,252,0,0,245,0,0,8,31,240,22,2,14,4,3,247,174,175,246,0,254,0,250,193,206,212,16, 214,223,202,222,201,12,211,195,215,203,169,209,0,197,213,208,249,170,248,235,159,217,191,155,152,224,225,231,135,238,233,0, 237,218,183,185,229,134,166,167,0,132,151,141,139,140,148,129,177,161,145,179,181,230,164,162,163,131,147,137,150,130,149,136, 138,160,133,216,173,158,190,156,157,0,0,226,128,0,0,0,232,234,182,184,228,143,0,168,0,142,0,0,0,0,153,154, 176,0,146,178,180,0,165,0,227,0,0,0,0,144,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,9,0, 8,0,13,32,12,0,0,29,30,31,28,42,43,47,48,49,50,51,52,53,54,55,56,57,45,44,46,0,128,112,129,0, 130,1,132,245,135,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,229,193,27,123,178,40,3,9,24,248,193,201, 229,245,33,181,49,205,171,9,62,32,211,46,122,211,47,123,211,47,241,225,201,82,79,77,66,65,83,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58, 62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,62,58,229,245, 33,73,58,205,171,9,241,225,201,66,65,83,73,67,32,115,116,97,116,101,109,101,110,116,115,32,97,114,101,32,110,111, 116,32,105,109,112,108,101,109,101,110,116,101,100,32,121,101,116,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,205,51,17,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,245,33,34,125,205,171,9,241, 225,201,117,110,107,110,111,119,110,64,55,68,49,55,0,57,125,221,33,137,1,205,243,26,201,221,33,133,1,195,243,26, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,229,245,33,31,126,205,171,9,241,225,201,117, 110,107,110,111,119,110,64,55,69,49,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,201,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char Sub[16384] = { 67,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,183,201,0,201,0,0,0,201,0,0,0,201,0,0,0, 124,186,192,125,187,201,0,0,201,0,0,0,0,0,0,0,201,201,201,201,201,201,201,201,245,197,213,229,8,217,245,197, 213,229,221,229,253,229,221,33,56,0,253,42,192,252,205,197,2,253,225,221,225,225,209,193,241,8,217,225,209,193,241,237, 77,201,201,201,201,201,205,214,253,237,69,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, 201,201,201,201,201,251,195,242,14,251,195,4,15,251,195,252,13,251,195,115,15,251,195,121,14,251,195,103,14,251,195,138, 14,251,195,133,15,251,195,151,13,251,195,151,15,251,195,169,13,251,195,234,13,251,195,217,13,251,195,201,13,251,195,186, 13,251,195,208,14,251,195,225,14,251,195,169,15,251,195,11,16,251,195,179,4,251,195,197,5,251,195,22,6,251,195,96, 6,251,195,165,6,251,195,248,6,251,195,80,7,251,195,127,7,251,195,178,7,251,195,102,5,251,195,8,8,251,195,27, 8,251,195,37,8,251,195,117,13,251,195,202,9,251,195,196,9,251,195,28,5,251,195,110,12,251,195,77,16,201,201,201, 201,201,201,201,201,201,201,201,201,201,201,201,201,251,195,255,3,251,195,210,9,201,201,201,201,201,201,201,201,251,195,97, 16,251,195,188,16,251,195,216,16,251,195,239,16,251,195,5,17,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, 201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,251,195,124, 17,251,195,140,17,251,195,158,17,251,195,176,17,201,201,201,201,251,195,3,18,251,195,28,18,251,195,146,18,251,195,242, 18,251,195,3,19,251,195,20,19,251,195,37,19,251,195,54,19,201,201,201,201,251,195,72,19,201,201,201,201,251,195,79, 19,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201, 201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,251,195,97,19,251,195,126,19,201,201,201, 79,6,0,9,9,195,17,2,190,35,40,5,35,35,16,248,201,78,35,102,105,233,62,35,211,46,205,34,2,62,0,211, 46,201,126,35,183,200,211,47,24,248,230,15,254,10,48,5,198,48,211,47,201,198,55,211,47,201,245,15,15,15,15,205, 42,2,241,205,42,2,201,124,205,58,2,125,205,58,2,201,197,229,245,87,167,243,252,111,3,241,225,229,213,229,245,124, 7,7,230,3,111,71,62,252,205,137,2,95,69,241,230,3,205,137,2,71,219,168,87,163,176,225,205,128,243,123,209,245, 203,122,196,171,3,241,225,193,201,4,5,200,7,7,16,252,201,229,87,213,167,243,252,111,3,193,225,213,229,124,7,7, 230,3,111,71,62,252,205,137,2,95,69,122,230,3,205,137,2,71,219,168,87,163,176,225,89,205,133,243,209,229,203,122, 196,171,3,225,201,8,217,243,253,229,241,221,229,225,87,167,252,111,3,213,122,230,3,71,14,252,221,229,241,7,7,230, 3,135,40,7,203,0,203,1,61,32,249,33,248,2,229,219,168,245,161,176,217,195,140,243,8,217,243,209,203,122,196,171, 3,8,217,201,243,229,111,230,3,71,62,171,198,85,5,242,12,3,87,124,7,7,230,3,103,71,62,192,7,7,5,242, 28,3,95,47,79,122,163,71,125,167,242,103,3,15,15,230,3,229,197,71,62,171,198,85,5,242,54,3,163,71,122,230, 192,103,219,168,111,230,192,180,211,168,58,255,255,47,161,176,79,50,255,255,125,211,168,33,197,252,122,230,3,133,111,124, 206,0,103,121,119,193,225,219,168,161,176,211,168,225,201,87,15,15,95,230,192,111,219,168,79,230,63,181,211,168,123,230, 3,111,124,38,3,24,2,41,41,214,64,48,250,124,47,103,58,255,255,47,95,164,181,50,255,255,111,121,211,168,122,230, 3,79,6,0,125,33,197,252,9,119,201,122,15,15,230,192,71,219,168,79,230,63,176,211,168,123,50,255,255,121,211,168, 122,230,3,79,6,0,33,197,252,9,115,201,211,168,94,24,3,211,168,115,122,211,168,201,211,168,8,205,152,243,8,241, 211,168,8,201,221,233,0,58,224,243,230,191,71,14,1,205,255,3,201,58,224,243,246,64,71,14,1,205,255,3,201,243, 203,185,120,211,153,121,246,128,211,153,251,229,33,223,243,121,254,8,56,7,254,24,48,8,33,223,255,120,6,0,9,119, 225,201,205,48,4,219,152,201,245,205,66,4,241,211,152,201,243,175,211,153,62,142,211,153,125,211,153,124,230,63,211,153, 251,201,243,175,211,153,62,142,211,153,125,211,153,124,230,63,246,64,211,153,251,201,245,58,175,252,254,5,48,5,205,66, 4,24,3,205,136,9,11,12,120,65,79,12,241,211,152,16,252,13,32,249,201,58,175,252,254,4,48,5,205,48,4,24, 3,205,126,9,229,235,11,12,120,65,60,14,152,237,178,61,32,251,225,201,235,58,175,252,254,4,48,5,205,66,4,24, 3,205,136,9,235,11,12,120,65,60,14,152,237,179,61,32,251,235,201,254,9,208,33,188,4,195,0,2,197,5,22,6, 96,6,165,6,115,10,253,10,91,11,183,11,19,12,33,232,255,58,175,252,254,5,48,4,203,190,24,2,203,254,175,50, 236,255,175,50,246,255,243,33,223,243,1,153,8,22,128,237,163,120,237,81,20,183,32,247,62,8,211,153,62,145,211,153, 33,231,255,1,155,7,237,179,35,35,35,62,18,211,153,62,145,211,153,1,155,6,237,179,251,195,243,3,58,175,252,254, 8,40,58,61,245,58,233,243,7,7,7,7,230,240,111,58,235,243,181,71,14,7,205,255,3,241,192,58,233,243,7,7, 7,7,230,240,33,234,243,182,42,191,243,1,32,0,245,205,66,4,241,211,152,245,11,120,177,32,247,241,201,58,235,243, 71,14,7,195,255,3,58,175,252,183,200,205,144,5,58,175,252,254,4,56,16,42,40,249,37,37,1,0,2,58,233,243, 230,15,205,105,9,42,38,249,1,0,8,175,205,105,9,201,58,175,252,254,4,56,4,30,217,24,2,30,209,42,40,249, 205,136,9,58,233,243,87,1,0,32,243,123,211,152,62,0,211,152,121,211,152,12,205,37,8,48,3,12,12,12,122,211, 152,16,232,251,201,205,231,3,62,0,50,175,252,50,176,252,175,50,245,250,50,246,250,58,174,243,50,176,243,62,1,50, 220,243,50,221,243,42,179,243,34,34,249,42,183,243,58,176,243,254,41,56,3,33,0,16,34,36,249,42,185,243,34,40, 249,42,187,243,34,38,249,205,28,5,205,248,6,205,92,10,205,143,12,195,206,4,205,231,3,62,1,50,175,252,50,176, 252,62,1,50,220,243,50,221,243,205,28,5,42,189,243,34,34,249,42,193,243,34,36,249,42,197,243,34,38,249,42,195, 243,34,40,249,205,92,10,58,175,243,50,176,243,175,50,245,250,50,246,250,205,80,7,205,155,5,205,158,12,195,206,4, 205,231,3,62,2,50,175,252,205,28,5,42,199,243,34,34,249,205,66,4,6,3,175,243,211,152,60,32,251,16,249,251, 42,203,243,34,36,249,42,205,243,34,40,249,42,207,243,34,38,249,175,50,245,250,50,246,250,205,127,7,205,155,5,205, 189,12,195,206,4,205,231,3,62,3,50,175,252,205,28,5,42,209,243,34,34,249,205,66,4,175,14,6,243,245,30,4, 245,6,32,211,152,60,16,251,241,29,32,244,241,198,32,13,32,235,251,42,213,243,34,36,249,42,215,243,34,40,249,42, 217,243,34,38,249,175,50,245,250,50,246,250,205,178,7,205,155,5,205,211,12,195,206,4,58,176,243,254,41,48,40,58, 223,243,230,241,71,14,0,205,255,3,58,224,243,230,231,246,16,71,12,205,255,3,17,179,243,14,2,175,205,227,7,19, 19,12,175,205,227,7,201,58,223,243,230,241,246,4,71,14,0,205,255,3,58,224,243,230,231,246,16,71,12,205,255,3, 17,34,249,14,2,62,3,205,227,7,12,175,205,227,7,201,58,223,243,230,241,71,14,0,205,255,3,58,224,243,230,231, 71,12,205,255,3,17,189,243,14,2,175,205,227,7,175,205,227,7,175,205,227,7,175,205,227,7,175,205,227,7,201,58, 223,243,230,241,246,2,71,14,0,205,255,3,58,224,243,230,231,71,12,205,255,3,17,199,243,14,2,175,205,227,7,62, 127,205,227,7,62,3,205,227,7,175,205,227,7,175,205,227,7,201,58,223,243,230,241,71,14,0,205,255,3,58,224,243, 230,231,246,8,71,12,205,255,3,17,209,243,14,2,175,205,227,7,175,205,227,7,175,205,227,7,175,205,227,7,175,205, 227,7,201,213,245,33,1,8,6,0,9,70,235,126,35,102,111,41,143,16,252,71,241,176,71,205,255,3,209,19,19,12, 201,0,0,6,10,5,9,5,38,0,111,41,41,41,205,37,8,48,2,41,41,237,91,38,249,25,201,135,135,42,40,249, 22,0,95,25,201,58,224,243,15,15,62,8,208,62,32,201,245,254,32,56,13,58,175,252,254,2,40,34,254,5,48,28, 241,201,254,13,32,250,241,229,197,42,185,252,1,8,0,9,34,185,252,33,0,0,34,183,252,193,225,201,241,201,241,229, 213,197,245,205,117,13,237,91,185,252,237,75,183,252,205,12,14,58,233,243,50,242,243,42,42,249,237,75,203,243,9,17, 64,252,58,185,252,230,7,6,0,79,9,205,171,8,1,240,0,9,58,185,252,47,230,7,79,205,171,8,42,183,252,1, 8,0,9,34,183,252,241,193,209,225,201,58,183,252,230,7,245,197,213,229,205,52,9,58,183,252,230,7,40,26,58,44, 249,47,50,44,249,225,1,8,0,9,209,193,241,205,52,9,58,44,249,47,50,44,249,201,193,1,8,0,9,193,193,241, 201,245,229,197,213,87,88,237,75,201,243,9,79,58,242,243,230,15,71,205,34,4,245,230,15,184,40,17,241,245,15,15, 15,15,230,15,184,32,13,241,209,193,225,241,201,241,209,193,225,241,47,201,122,179,254,255,40,17,241,203,0,203,0,203, 0,203,0,230,15,176,205,40,4,24,221,241,230,240,176,205,40,4,24,218,65,60,79,62,7,168,60,71,197,205,34,4, 71,26,205,225,8,13,40,3,15,24,250,79,58,44,249,161,79,120,177,205,40,4,35,19,193,16,225,201,71,82,80,80, 82,84,0,58,175,252,254,5,201,245,205,136,9,11,12,120,65,79,12,241,243,211,152,16,252,13,32,249,251,201,205,148, 9,124,230,63,211,153,251,201,205,148,9,124,230,63,246,64,211,153,251,201,58,246,250,183,40,16,58,175,252,254,5,218, 66,4,254,7,58,246,250,56,1,135,229,230,3,15,111,230,128,172,23,203,21,23,125,23,243,211,153,62,142,211,153,225, 125,211,153,201,205,126,9,219,152,201,245,205,136,9,241,211,152,201,243,211,153,62,143,211,153,219,153,245,175,211,153,62, 143,211,153,251,241,201,219,153,1,0,0,205,255,3,1,1,224,205,255,3,1,2,0,205,255,3,1,3,128,205,255,3, 1,4,1,205,255,3,1,8,8,205,255,3,62,1,50,220,243,50,221,243,205,158,12,62,0,33,0,8,1,0,8,205, 86,4,62,245,33,0,32,1,32,0,205,86,4,1,7,245,205,255,3,33,191,27,17,0,8,1,0,8,253,42,192,252, 221,33,92,0,205,197,2,251,201,1,20,0,205,255,3,1,21,59,205,255,3,1,22,5,205,255,3,201,33,191,27,237, 91,36,249,1,0,8,253,42,192,252,221,33,92,0,205,197,2,251,201,205,231,3,62,4,50,175,252,205,28,5,42,199, 243,34,34,249,205,66,4,6,3,175,243,211,152,60,32,251,16,249,251,42,203,243,34,36,249,42,205,243,34,40,249,42, 207,243,34,38,249,58,223,243,230,241,246,4,71,14,0,205,255,3,58,224,243,230,231,71,12,205,255,3,1,14,0,205, 255,3,17,199,243,14,2,175,205,227,7,62,127,205,227,7,62,3,205,227,7,17,251,10,62,3,205,227,7,17,207,243, 175,205,227,7,33,233,255,54,0,35,54,0,205,155,5,1,14,0,205,255,3,205,189,12,195,206,4,0,30,205,231,3, 62,5,50,175,252,205,28,5,58,223,243,230,241,246,6,71,14,0,205,255,3,58,224,243,230,231,246,32,71,12,205,255, 3,33,0,0,34,34,249,33,0,120,34,38,249,33,0,118,34,40,249,175,50,245,250,50,246,250,1,2,31,205,255,3, 1,5,239,205,255,3,1,11,0,205,255,3,1,6,15,205,255,3,205,151,5,205,231,12,195,206,4,205,231,3,62,6, 50,175,252,205,28,5,58,223,243,230,241,246,8,71,14,0,205,255,3,58,224,243,230,231,71,12,205,255,3,33,0,0, 34,34,249,33,0,120,34,38,249,33,0,118,34,40,249,175,50,245,250,50,246,250,1,2,31,205,255,3,1,5,239,205, 255,3,1,11,0,205,255,3,1,6,15,205,255,3,205,151,5,205,247,12,195,206,4,205,231,3,62,7,50,175,252,205, 28,5,58,223,243,230,241,246,10,71,14,0,205,255,3,58,224,243,230,231,71,12,205,255,3,33,0,0,34,34,249,33, 0,240,34,38,249,33,0,250,34,40,249,175,50,245,250,50,246,250,1,2,31,205,255,3,1,5,247,205,255,3,1,11, 1,205,255,3,1,6,30,205,255,3,205,151,5,205,10,13,195,206,4,205,231,3,62,8,50,175,252,205,28,5,58,223, 243,246,14,71,14,0,205,255,3,58,224,243,230,231,71,12,205,255,3,33,0,0,34,34,249,33,0,240,34,38,249,33, 0,250,34,40,249,175,50,245,250,50,246,250,1,2,31,205,255,3,1,5,247,205,255,3,1,11,1,205,255,3,1,6, 30,205,255,3,205,151,5,205,26,13,195,206,4,192,58,175,252,254,9,208,229,33,125,12,205,0,2,225,201,143,12,158, 12,189,12,211,12,189,12,231,12,247,12,10,13,26,13,58,176,243,254,40,1,192,3,56,8,1,128,7,24,3,1,0, 3,42,34,249,62,32,205,86,4,33,1,1,34,220,243,125,33,178,251,119,17,179,251,1,23,0,237,176,201,175,1,0, 24,42,36,249,111,197,205,86,4,193,58,234,243,42,201,243,195,86,4,58,234,243,230,15,71,7,7,7,7,176,1,0, 8,42,36,249,195,86,4,58,234,243,230,15,71,7,7,7,7,176,33,0,1,24,41,58,234,243,230,3,71,7,7,176, 7,7,7,7,176,33,0,2,24,22,58,234,243,230,15,71,7,7,7,7,176,33,0,2,24,6,58,234,243,33,0,1, 245,205,108,13,241,14,44,205,98,13,14,40,205,92,13,33,212,0,14,42,205,92,13,33,0,0,14,36,205,92,13,58, 246,250,103,46,0,14,38,205,92,13,62,0,14,45,205,98,13,62,192,14,46,205,98,13,205,108,13,201,125,205,98,13, 12,124,243,211,153,121,246,128,211,153,251,201,62,2,205,210,9,31,56,248,201,237,75,32,249,111,38,0,41,41,41,9, 6,8,17,64,252,197,213,229,58,31,249,205,80,2,225,209,193,18,19,35,16,239,201,229,245,33,162,13,205,22,2,241, 225,201,82,73,71,72,84,67,0,229,245,33,180,13,205,22,2,241,225,201,76,69,70,84,67,0,229,245,33,197,13,205, 22,2,241,225,201,85,80,67,0,229,245,33,212,13,205,22,2,241,225,201,84,85,80,67,0,229,245,33,228,13,205,22, 2,241,225,201,68,79,87,78,67,0,229,245,33,245,13,205,22,2,241,225,201,84,68,79,87,78,67,0,237,75,183,252, 237,91,185,252,201,83,67,65,76,88,89,0,197,237,67,183,252,237,83,185,252,42,185,252,41,41,41,41,41,46,0,6, 0,62,255,50,44,249,121,230,7,40,10,71,62,255,167,31,16,252,50,44,249,121,230,248,79,6,0,9,34,42,249,193, 201,77,65,80,88,89,0,58,44,249,42,42,249,201,70,69,84,67,72,67,0,229,245,33,96,14,205,22,2,241,225,201, 83,84,79,82,69,67,0,229,245,33,114,14,205,22,2,241,225,201,83,69,84,65,84,82,0,229,245,33,132,14,205,22, 2,241,225,201,82,69,65,68,67,0,229,245,33,149,14,205,22,2,241,225,201,83,69,84,67,0,229,245,33,165,14,205, 22,2,241,225,201,78,83,69,84,67,88,0,229,245,33,183,14,205,22,2,241,225,201,71,84,65,83,80,67,0,229,245, 33,201,14,205,22,2,241,225,201,80,78,84,73,78,73,0,229,245,33,219,14,205,22,2,241,225,201,83,67,65,78,82, 0,229,245,33,236,14,205,22,2,241,225,201,83,67,65,78,76,0,229,245,33,253,14,205,22,2,241,225,201,68,79,71, 82,80,72,0,197,213,229,205,117,13,58,233,243,50,242,243,42,183,252,34,102,245,1,8,0,9,34,183,252,58,246,250, 42,185,252,103,34,104,245,237,67,106,245,237,67,108,245,33,64,252,203,6,58,242,243,56,3,58,234,243,50,110,245,205, 194,17,58,2,251,230,15,246,176,237,121,62,172,211,153,62,145,211,153,251,6,8,14,7,33,64,252,203,6,58,242,243, 56,3,58,234,243,211,155,13,32,241,35,14,8,16,236,225,209,193,201,229,245,33,126,15,205,22,2,241,225,201,77,65, 80,88,89,67,0,229,245,33,144,15,205,22,2,241,225,201,84,82,73,71,72,84,0,229,245,33,162,15,205,22,2,241, 225,201,84,82,73,71,72,84,0,58,246,250,87,213,237,67,102,245,237,83,104,245,42,179,252,167,237,66,34,106,245,33, 0,0,34,108,245,175,50,111,245,58,242,243,50,110,245,205,253,15,42,181,252,58,246,250,103,34,104,245,205,253,15,209, 237,83,104,245,62,1,50,111,245,58,181,252,147,50,106,245,205,253,15,42,179,252,34,102,245,205,253,15,201,205,194,17, 58,2,251,230,15,246,112,237,121,251,201,42,181,252,231,48,1,235,167,237,82,35,34,108,245,58,246,250,87,237,83,104, 245,197,209,42,179,252,231,48,1,235,167,237,82,35,34,106,245,237,83,102,245,175,50,111,245,58,242,243,50,110,245,205, 194,17,58,2,251,230,15,246,128,237,121,251,201,229,245,33,90,16,205,22,2,241,225,195,110,12,67,76,82,84,88,84, 0,229,213,197,42,34,249,203,4,203,4,58,245,250,15,15,15,132,246,31,71,14,2,205,255,3,58,175,252,254,7,32, 19,58,229,243,230,31,71,58,245,250,15,15,15,176,71,14,6,205,255,3,58,245,250,79,58,175,252,254,7,32,2,203, 33,175,42,40,249,41,143,177,111,62,3,180,71,14,5,205,255,3,69,14,11,205,255,3,193,209,225,201,229,205,39,17, 205,136,9,1,16,0,205,255,3,6,32,33,92,17,126,211,152,35,211,154,16,248,225,201,229,205,39,17,205,126,9,225, 1,16,0,205,255,3,6,32,219,152,211,154,16,250,201,229,245,205,39,17,241,135,79,6,0,9,205,126,9,219,152,71, 219,152,79,225,201,245,197,229,205,39,17,122,135,79,6,0,9,205,136,9,225,66,14,16,205,255,3,193,241,211,154,211, 152,123,211,154,211,152,201,58,175,252,183,204,62,17,60,33,72,17,135,133,111,124,206,0,103,126,35,102,111,201,103,58, 176,243,254,40,124,208,61,201,0,4,0,15,32,32,128,27,32,32,128,27,128,118,128,118,128,250,128,250,0,0,0,0, 17,6,51,7,23,1,39,3,81,1,39,6,113,1,115,3,97,6,100,6,17,4,101,2,85,5,119,7,229,245,33,135, 17,205,22,2,241,225,201,66,69,69,80,0,229,245,33,151,17,205,22,2,241,225,201,80,82,79,77,80,84,0,229,245, 33,169,17,205,22,2,241,225,201,83,68,70,83,67,82,0,229,245,33,187,17,205,22,2,241,225,201,83,69,84,83,67, 82,0,62,2,205,210,9,31,56,248,243,62,32,211,153,62,145,211,153,1,155,14,33,98,245,237,179,201,120,177,55,200, 122,179,55,200,229,33,0,1,58,175,252,230,6,254,6,58,175,252,32,1,36,183,237,66,225,216,229,33,212,0,183,237, 82,225,201,237,75,106,245,237,91,108,245,205,220,17,216,205,194,17,126,230,15,246,144,237,121,251,183,201,42,98,245,78, 35,70,35,237,67,106,245,94,35,86,35,237,83,108,245,205,220,17,216,254,8,17,4,1,40,10,254,6,17,1,4,40, 3,17,2,2,78,175,67,203,17,23,203,17,23,16,248,50,110,245,66,5,197,229,205,194,17,126,230,15,246,176,237,121, 62,172,211,153,62,145,211,153,251,225,193,62,2,205,210,9,203,71,200,203,127,40,244,120,167,40,18,197,175,67,203,17, 23,203,17,23,16,248,211,155,121,193,79,16,238,35,78,66,24,217,42,102,245,237,75,106,245,237,91,108,245,113,35,112, 35,115,35,114,35,205,220,17,216,254,8,17,1,1,40,10,254,6,17,2,4,40,3,17,4,2,229,205,194,17,126,230, 15,62,160,237,121,251,225,66,14,0,62,2,205,210,9,203,127,32,4,203,71,32,243,197,62,7,205,210,9,67,203,1, 16,252,177,193,79,16,227,113,35,62,2,205,210,9,31,56,214,201,229,245,33,253,18,205,22,2,241,225,201,66,76,84, 86,68,0,229,245,33,14,19,205,22,2,241,225,201,66,76,84,68,86,0,229,245,33,31,19,205,22,2,241,225,201,66, 76,84,77,68,0,229,245,33,48,19,205,22,2,241,225,201,66,76,84,68,77,0,229,245,33,65,19,205,22,2,241,225, 201,78,69,87,80,65,68,0,205,179,4,205,188,16,201,229,245,33,90,19,205,22,2,241,225,201,75,78,74,80,82,84, 0,197,62,13,211,180,121,15,15,15,15,230,3,71,219,181,176,193,211,181,121,230,15,211,180,219,181,230,15,201,197,71, 197,62,13,211,180,121,15,15,15,15,230,3,71,219,181,176,193,211,181,121,230,15,211,180,120,230,15,211,181,193,201,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; } namespace Nintendo64 { const unsigned char CIC6101[1024] = { 50,34,104,34,17,117,78,140,217,110,138,143,16,117,201,16,195,16,195,17,195,240,192,240,175,42,240,143,120,154,240,198, 241,162,240,160,48,32,194,240,143,120,167,225,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 225,64,130,130,16,134,104,77,138,135,117,77,139,17,117,104,125,0,104,97,47,16,117,34,77,155,152,76,96,47,17,117, 34,77,161,104,125,0,104,97,105,4,96,120,176,102,1,102,104,125,104,97,47,16,117,34,77,187,184,29,1,188,155,0, 31,84,201,110,67,201,110,66,201,110,65,201,110,64,125,17,75,16,195,17,74,16,195,17,73,16,195,17,72,16,224,70, 240,171,240,171,240,171,171,1,0,122,84,80,120,167,125,48,42,27,88,21,92,240,171,42,171,0,0,0,0,0,0,0, 52,32,104,48,44,139,53,32,104,48,36,31,84,211,110,67,211,110,66,211,110,65,211,110,64,120,139,50,34,104,125,48, 32,16,85,16,85,16,101,172,85,171,84,100,241,183,1,172,100,1,171,84,1,170,85,84,1,168,194,225,14,0,0,0, 25,74,241,136,181,90,113,195,222,97,16,237,158,140,201,110,152,201,110,225,192,96,224,223,201,110,156,193,48,192,192,192, 49,192,192,192,49,39,80,15,16,1,103,201,49,17,72,16,195,48,110,185,72,193,120,171,142,72,182,181,0,0,0,0, 47,80,101,97,33,123,97,84,80,120,123,97,121,88,123,88,122,84,80,120,122,88,8,122,88,1,0,122,84,80,120,153, 100,15,125,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 48,32,16,84,104,49,33,27,89,104,20,101,80,1,84,104,106,0,85,100,89,137,50,34,104,48,33,240,128,49,240,128, 225,14,48,34,100,77,168,174,122,32,88,100,92,125,1,165,100,1,164,84,1,84,165,0,0,0,125,0,0,0,0,0, 50,32,26,84,240,143,240,143,31,100,100,15,151,100,240,128,120,240,128,120,138,51,138,241,236,50,32,31,100,194,100,15, 225,14,100,240,143,120,240,143,120,158,51,158,50,32,31,100,100,15,125,100,84,121,88,84,121,88,176,51,176,0,0,0, 0,116,0,76,64,77,65,78,66,79,67,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char CIC6102[1024] = { 50,34,104,34,17,117,78,140,217,110,138,143,16,117,201,16,195,16,195,17,195,240,192,240,175,42,240,143,120,154,240,198, 225,64,130,130,16,134,104,77,138,135,117,77,139,17,117,104,125,0,104,97,47,16,117,34,77,155,152,76,96,47,17,117, 241,162,240,160,48,32,194,240,143,120,167,225,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 34,77,161,104,125,0,104,97,105,4,96,120,176,102,1,102,104,125,104,97,47,16,117,34,77,187,184,29,1,188,155,0, 31,84,201,110,67,201,110,66,201,110,65,201,110,64,125,17,75,16,195,17,74,16,195,17,73,16,195,17,72,16,224,70, 52,32,104,48,44,139,53,32,104,48,36,31,84,211,110,67,211,110,66,211,110,65,211,110,64,120,139,50,34,104,125,48, 240,171,240,171,240,171,171,1,0,122,84,80,120,167,125,48,42,27,88,21,92,240,171,42,171,0,0,0,0,0,0,0, 32,16,85,16,85,16,101,172,85,171,84,100,241,183,1,172,100,1,171,84,1,170,85,84,1,168,194,225,14,0,0,0, 25,74,241,136,181,90,113,195,222,97,16,237,158,140,201,110,152,201,110,225,192,96,224,223,201,110,156,193,48,192,192,192, 47,80,101,97,33,123,97,84,80,120,123,97,121,88,123,88,122,84,80,120,122,88,8,122,88,1,0,122,84,80,120,153, 49,192,192,192,49,39,80,15,16,1,103,201,49,17,72,16,195,48,110,185,72,193,120,171,142,72,182,181,0,0,0,0, 100,15,125,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 48,32,16,84,104,49,33,27,89,104,20,101,80,1,84,104,106,0,85,100,89,137,50,34,104,48,33,240,128,49,240,128, 50,32,26,84,240,143,240,143,31,100,100,15,151,100,240,128,120,240,128,120,138,51,138,241,236,50,32,31,100,194,100,15, 225,14,48,34,100,77,168,174,122,32,88,100,92,125,1,165,100,1,164,84,1,84,165,0,0,0,125,0,0,0,0,0, 225,14,100,240,143,120,240,143,120,158,51,158,50,32,31,100,100,15,125,100,84,121,88,84,121,88,176,51,176,0,0,0, 0,116,0,76,64,77,65,78,66,79,67,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char CIC6105[1024] = { 50,34,104,34,17,117,78,140,217,110,138,143,16,117,201,16,195,16,195,17,195,240,192,240,175,42,240,143,120,154,240,198, 241,162,240,160,48,32,194,240,143,120,167,225,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 225,64,130,130,16,134,104,77,138,135,117,77,139,17,117,104,125,0,104,97,47,16,117,34,77,155,152,76,96,47,17,117, 34,77,161,104,125,0,104,97,105,4,96,120,176,102,1,102,104,125,104,97,47,16,117,34,77,187,184,29,1,188,155,0, 31,84,201,110,67,201,110,66,201,110,65,201,110,64,125,17,75,16,195,17,74,16,195,17,73,16,195,17,72,16,224,70, 240,171,240,171,240,171,171,1,0,122,84,80,120,167,125,48,42,27,88,21,92,240,171,42,171,0,0,0,0,0,0,0, 52,32,104,48,44,139,53,32,104,48,36,31,84,211,110,67,211,110,66,211,110,65,211,110,64,120,139,50,34,104,125,48, 32,16,85,16,85,16,101,172,85,171,84,100,241,183,1,172,100,1,171,84,1,170,85,84,1,168,194,225,14,0,0,0, 25,74,241,136,181,90,113,195,222,97,16,237,158,140,201,110,152,201,110,225,192,96,224,223,201,110,156,193,48,192,192,192, 49,192,192,192,49,39,80,15,16,1,103,201,49,17,72,16,195,48,110,185,72,193,120,171,142,72,182,181,0,0,0,0, 47,80,101,97,33,123,97,84,80,120,123,97,121,88,123,88,122,84,80,120,122,88,8,122,88,1,0,122,84,80,120,153, 100,15,125,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 48,32,16,84,104,49,33,27,89,104,20,101,80,1,84,104,106,0,85,100,89,137,50,34,104,48,33,240,128,49,240,128, 225,14,48,34,100,77,168,174,122,32,88,100,92,125,1,165,100,1,164,84,1,84,165,0,0,0,125,0,0,0,0,0, 50,32,26,84,240,143,240,143,31,100,100,15,151,100,240,128,120,240,128,120,138,51,138,241,236,50,32,31,100,194,100,15, 225,14,100,240,143,120,240,143,120,158,51,158,50,32,31,100,21,97,226,64,0,0,0,0,0,0,0,0,0,0,0,0, 0,116,0,76,64,77,65,78,66,79,67,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 100,15,175,100,72,8,0,84,73,4,0,122,84,80,110,7,0,122,123,0,121,84,80,120,72,8,0,84,73,4,0,122, 84,80,110,7,0,122,123,0,121,84,80,120,128,51,128,96,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char CIC7101[1024] = { 50,34,104,34,17,117,78,140,217,110,138,143,16,117,201,17,195,16,195,17,195,240,192,240,175,42,240,143,120,154,240,198, 241,162,240,160,48,32,194,240,143,120,167,225,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 225,64,130,130,16,134,104,77,138,135,117,77,139,17,117,104,125,0,104,97,47,16,117,34,77,155,152,76,96,47,17,117, 34,77,161,104,125,0,104,97,105,4,96,120,176,102,1,102,104,125,104,97,47,16,117,34,77,187,184,29,1,188,155,0, 31,84,201,110,67,201,110,66,201,110,65,201,110,64,125,17,75,16,195,17,74,16,195,17,73,16,195,17,72,16,224,70, 240,171,240,171,240,171,171,1,0,122,84,80,120,167,125,48,42,27,88,21,92,240,171,42,171,0,0,0,0,0,0,0, 52,32,104,48,44,139,53,32,104,48,36,31,84,211,110,67,211,110,66,211,110,65,211,110,64,120,139,50,34,104,125,48, 32,16,85,16,85,16,101,172,85,171,84,100,241,183,1,172,100,1,171,84,1,170,85,84,1,168,194,225,14,0,0,0, 20,47,53,241,130,33,119,17,153,136,21,23,85,202,201,110,152,201,110,225,192,96,224,223,201,110,156,193,48,192,192,192, 49,192,192,192,49,39,80,15,16,1,103,201,49,17,72,16,195,48,110,187,72,193,124,16,107,171,142,72,182,181,0,0, 47,80,101,97,33,123,97,84,80,120,123,97,121,88,123,88,122,84,80,120,122,88,8,122,88,1,0,122,84,80,120,153, 100,15,125,130,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 48,32,16,84,104,49,33,27,89,104,20,101,80,1,84,104,106,0,85,100,89,137,50,34,104,48,33,240,128,49,240,128, 225,14,48,34,100,77,168,174,122,32,88,100,92,125,1,165,100,1,164,84,1,84,165,0,0,0,125,0,0,0,0,0, 50,32,26,84,240,143,240,143,31,100,100,15,151,100,240,128,120,240,128,120,138,51,138,241,236,50,32,31,100,194,100,15, 225,14,100,240,143,120,240,143,120,158,51,158,50,32,31,100,100,15,125,100,84,121,88,84,121,88,176,51,176,0,0,0, 0,116,0,76,64,77,65,78,66,79,67,0,0,143,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char PIFSM5[1024] = { 17,37,117,46,117,200,51,36,203,53,46,199,124,17,111,146,20,150,25,111,198,28,84,56,32,155,102,203,102,1,154,49, 42,199,161,42,197,42,197,53,46,80,65,67,49,43,92,96,63,46,71,99,225,64,0,0,0,0,0,0,0,0,0,0, 225,169,225,14,227,16,226,77,227,155,227,149,224,249,227,0,227,113,31,88,27,88,16,88,150,125,52,37,24,92,156,125, 100,21,103,100,117,27,1,166,181,0,21,103,100,19,117,27,1,176,97,79,96,17,117,28,1,184,100,103,125,0,0,0, 104,88,142,0,104,84,46,67,17,117,40,18,117,187,79,157,78,185,63,47,73,225,211,53,46,75,185,225,201,240,198,63, 47,72,183,64,243,239,49,32,104,205,242,109,53,41,97,72,96,124,92,100,243,50,187,53,187,240,198,38,84,104,127,0, 0,75,125,21,117,125,46,17,117,119,128,99,53,46,75,225,128,73,150,65,227,64,18,208,18,208,54,196,196,196,55,196, 196,196,55,39,80,15,16,1,103,54,19,72,18,208,55,213,110,183,72,185,120,169,140,72,180,98,40,117,121,187,0,0, 25,74,241,136,181,90,113,195,222,97,16,237,158,140,60,43,241,20,62,36,84,102,5,0,102,84,102,11,102,84,120,148, 63,46,125,34,16,117,17,117,42,116,103,49,243,50,36,79,179,24,180,20,104,120,243,117,122,84,104,16,117,225,219,0, 98,193,203,46,99,72,133,98,17,38,117,34,17,117,205,63,46,99,73,146,98,193,71,99,74,152,98,16,84,110,243,128, 51,36,16,85,111,198,51,120,162,52,42,201,99,63,47,75,225,192,98,46,203,53,46,21,117,71,109,0,224,203,0,0, 19,208,19,208,37,19,117,48,44,203,63,46,71,48,37,79,152,47,192,138,192,138,198,37,17,117,40,16,79,156,98,38, 117,25,40,117,24,117,97,224,48,84,1,178,92,84,1,180,92,126,84,125,88,125,0,0,0,0,0,0,0,0,0,0, 52,192,134,192,134,192,225,109,198,63,47,65,53,46,69,38,84,104,125,243,239,42,20,159,34,17,117,42,116,15,184,117, 103,52,72,167,243,38,155,75,170,155,49,243,50,50,34,242,86,179,155,242,95,35,226,24,53,240,198,224,172,0,0,0, 92,84,15,157,88,78,225,35,79,133,104,80,120,113,80,113,120,151,102,1,150,24,102,104,84,15,128,84,133,242,64,51, 35,184,92,84,15,225,216,88,78,225,35,79,168,112,104,88,112,88,183,102,56,1,102,104,84,15,162,84,168,0,0,189, 63,47,74,137,75,242,73,195,125,34,18,117,125,16,101,100,1,144,100,1,143,125,104,75,154,126,74,162,243,38,126,104, 67,66,80,104,88,104,120,80,243,117,104,93,125,56,32,31,111,226,142,120,80,1,226,131,120,175,102,1,226,128,125,0, 102,226,111,1,134,125,1,159,104,52,68,49,104,148,16,111,160,120,111,159,120,155,102,1,154,125,102,104,120,226,243,124, 102,101,102,100,104,85,104,103,101,103,100,104,89,104,80,66,67,88,100,80,104,52,124,67,120,49,100,226,192,0,0,0, 85,100,85,104,120,139,102,1,138,186,102,80,67,66,88,100,80,104,96,48,123,0,85,100,123,85,96,80,123,0,85,80, 123,85,104,103,104,97,123,0,49,104,103,102,104,123,176,187,104,102,104,21,107,183,125,104,226,111,104,124,52,64,71,125, 31,84,213,110,67,213,110,66,213,110,65,213,110,64,96,160,19,75,18,208,19,74,18,208,19,73,18,208,19,72,18,208, 120,125,126,36,16,117,35,79,163,34,19,117,17,117,35,79,175,125,81,104,102,104,81,104,103,104,125,0,0,0,0,0, 19,208,18,208,48,42,199,199,61,45,243,91,48,43,192,142,213,61,47,243,91,53,240,198,200,224,203,104,62,32,104,80, 15,125,84,29,107,171,104,194,194,158,175,104,199,199,158,63,158,53,38,104,125,120,125,102,1,187,24,102,125,0,0,0, 49,43,69,243,219,37,19,117,195,17,117,50,32,199,141,197,197,197,197,227,192,31,121,122,88,150,125,47,80,101,97,33, 123,97,84,80,120,123,97,121,88,123,88,122,84,80,120,122,88,8,122,88,1,0,122,84,80,120,180,100,15,125,157,0, 54,32,16,84,104,54,34,104,20,101,80,1,84,104,106,0,85,100,89,135,33,194,55,33,194,227,113,54,41,17,117,241, 169,0,41,79,159,16,117,92,100,84,33,85,100,85,125,53,39,104,102,104,85,104,103,104,89,100,88,68,110,64,96,125, }; const unsigned char PIFNTSC[1984] = { 60,9,52,0,64,137,96,0,60,9,0,6,53,41,228,99,64,137,128,0,60,8,164,4,141,8,0,16,49,8,0,1, 81,0,255,253,60,8,164,4,36,8,0,10,60,1,164,4,172,40,0,16,60,8,164,4,141,8,0,24,49,8,0,1, 85,0,255,253,60,8,164,4,36,8,0,3,60,1,164,96,172,40,0,16,36,8,3,255,60,1,164,64,172,40,0,12, 60,1,164,64,172,32,0,36,60,1,164,64,172,32,0,16,60,1,164,80,172,32,0,0,60,1,164,80,172,32,0,4, 60,8,164,4,141,8,0,16,49,8,0,4,85,0,255,253,60,8,164,4,60,11,164,0,60,12,191,192,60,13,191,192, 37,107,16,0,37,140,0,212,37,173,7,28,141,137,0,0,37,140,0,4,37,107,0,4,21,141,255,252,173,105,255,252, 60,11,164,0,60,29,164,0,37,107,16,0,1,96,0,8,55,189,31,240,60,13,191,192,141,168,7,252,37,173,7,192, 49,8,0,128,85,0,255,252,60,13,191,192,141,168,0,36,60,11,176,0,0,8,156,194,50,115,0,1,0,8,188,130, 18,96,0,2,50,247,0,1,60,11,166,0,0,8,178,2,49,10,0,255,0,8,172,66,141,168,0,60,36,9,0,16, 50,214,0,255,50,181,0,1,36,20,0,1,1,9,64,37,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253, 60,9,164,128,173,168,0,60,60,12,164,96,36,8,0,255,173,136,0,20,173,136,0,24,36,8,0,15,173,136,0,28, 36,8,0,3,173,136,0,32,141,105,0,0,60,13,164,16,37,140,0,0,49,40,0,255,173,136,0,20,0,9,66,2, 173,136,0,24,0,9,68,2,173,136,0,28,0,9,69,2,173,136,0,32,141,175,0,12,32,8,15,192,33,107,0,64, 49,239,0,1,17,224,0,7,37,173,0,12,60,13,164,16,141,175,0,12,37,173,0,12,49,239,0,32,85,224,255,252, 60,13,164,16,60,13,164,0,37,173,0,0,0,8,48,37,33,173,0,64,141,105,0,0,33,8,255,252,33,107,0,4, 33,173,0,4,21,0,255,251,173,169,255,252,60,8,108,7,53,8,137,101,1,72,0,25,0,0,32,18,36,132,0,1, 60,5,164,0,36,165,0,64,4,17,0,19,0,0,0,0,39,189,255,208,20,160,0,2,175,191,0,28,0,192,40,37, 39,166,0,44,4,17,0,255,39,167,0,40,143,164,0,40,143,174,0,44,1,196,16,35,20,64,0,2,0,64,24,37, 0,128,24,37,143,191,0,28,39,189,0,48,0,96,16,37,3,224,0,8,0,0,0,0,39,189,255,32,175,191,0,60, 175,183,0,52,175,182,0,48,175,181,0,44,175,180,0,40,175,179,0,36,175,178,0,32,175,177,0,28,175,176,0,24, 140,174,0,0,0,0,24,37,39,163,0,180,39,162,0,116,1,196,128,38,36,66,0,16,172,80,255,244,172,80,255,248, 172,80,255,252,20,67,255,251,172,80,255,240,140,176,0,0,0,0,136,37,0,160,176,37,36,23,0,32,2,0,160,37, 142,208,0,0,38,49,0,1,36,15,3,239,142,211,0,4,38,214,0,4,1,241,32,35,2,32,48,37,4,17,255,204, 2,0,40,37,143,163,0,116,143,164,0,120,2,0,40,37,0,67,24,33,175,163,0,116,4,17,255,197,2,32,48,37, 143,184,0,124,60,5,108,7,175,162,0,120,3,16,200,38,175,185,0,124,52,165,137,101,38,4,0,5,4,17,255,188, 2,32,48,37,143,168,0,128,2,144,8,43,0,72,72,33,16,32,0,7,175,169,0,128,143,164,0,152,2,0,40,37, 4,17,255,179,2,32,48,37,16,0,0,4,175,162,0,152,143,170,0,152,1,80,88,33,175,171,0,152,50,130,0,31, 143,174,0,132,2,226,24,35,0,112,104,4,0,80,96,6,1,141,168,37,0,112,200,6,0,80,192,4,1,213,120,33, 175,175,0,132,3,25,40,37,143,164,0,144,4,17,255,160,2,32,48,37,143,163,0,140,175,162,0,144,2,3,8,43, 80,32,0,8,143,171,0,132,143,168,0,128,2,17,80,33,1,3,72,33,1,42,24,38,16,0,0,5,175,163,0,140, 143,171,0,132,1,112,96,33,1,131,24,38,175,163,0,140,0,20,22,194,143,175,0,136,2,226,24,35,0,112,112,6, 0,80,104,4,1,174,144,37,0,112,64,4,0,80,200,6,1,242,192,33,175,184,0,136,3,40,40,37,143,164,0,148, 4,17,255,131,2,32,48,37,36,1,3,240,18,33,0,57,175,162,0,148,143,164,0,176,2,64,40,37,4,17,255,124, 2,32,48,37,0,16,30,194,2,227,80,35,1,83,88,6,0,115,72,4,1,43,40,37,0,64,32,37,4,17,255,116, 2,32,48,37,175,162,0,176,143,164,0,172,2,160,40,37,4,17,255,111,2,32,48,37,50,18,0,31,2,242,160,35, 2,147,104,4,2,83,96,6,1,141,40,37,0,64,32,37,4,17,255,103,2,32,48,37,143,169,0,168,50,99,0,31, 2,80,112,6,2,144,120,4,2,227,200,35,1,207,56,37,3,51,64,4,0,115,192,6,143,173,0,156,3,8,80,37, 1,39,88,33,1,106,96,33,175,162,0,172,175,172,0,168,2,96,40,37,2,32,48,37,4,17,255,85,1,176,32,33, 143,174,0,160,175,162,0,156,2,96,40,37,2,32,48,37,4,17,255,79,1,208,32,38,143,175,0,148,143,184,0,164, 175,162,0,160,1,240,200,38,3,56,64,33,16,0,255,115,175,168,0,164,143,163,0,116,0,0,136,37,39,179,0,116, 36,21,0,16,36,20,0,1,175,163,0,100,175,163,0,104,175,163,0,108,175,163,0,112,142,112,0,0,143,173,0,100, 50,2,0,31,2,226,88,35,1,112,80,4,0,80,72,6,1,42,96,37,1,172,112,33,2,14,8,43,16,32,0,5, 175,174,0,100,143,175,0,104,1,240,200,33,16,0,0,6,175,185,0,104,143,164,0,104,2,0,40,37,4,17,255,44, 2,32,48,37,175,162,0,104,50,24,0,2,0,24,64,66,50,18,0,1,85,18,0,6,143,164,0,108,143,171,0,108, 1,112,72,33,16,0,0,6,175,169,0,108,143,164,0,108,2,0,40,37,4,17,255,30,2,32,48,37,175,162,0,108, 86,146,0,6,143,164,0,112,143,170,0,112,1,80,104,38,16,0,0,6,175,173,0,112,143,164,0,112,2,0,40,37, 4,17,255,19,2,32,48,37,175,162,0,112,38,49,0,1,22,53,255,209,38,115,0,4,143,164,0,100,143,165,0,104, 4,17,255,11,2,32,48,37,143,172,0,112,143,174,0,108,143,176,0,24,143,177,0,28,143,178,0,32,143,179,0,36, 143,180,0,40,143,181,0,44,143,182,0,48,143,183,0,52,143,191,0,60,0,64,32,37,39,189,0,224,4,17,0,8, 1,142,40,38,0,133,0,25,0,0,112,16,172,206,0,0,0,0,120,18,172,239,0,0,3,224,0,8,0,0,0,0, 60,11,191,192,141,104,7,240,60,10,255,255,48,132,255,255,1,10,64,36,0,136,32,37,37,107,7,192,60,9,164,128, 141,41,0,24,49,41,0,2,85,32,255,253,60,9,164,128,173,100,0,48,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253,60,9,164,128,141,104,0,60, 36,9,0,32,173,101,0,52,1,9,64,37,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253,60,9,164,128, 173,104,0,60,32,9,0,16,33,41,255,255,85,32,255,255,33,41,255,255,141,104,0,60,49,10,0,128,80,10,255,250, 32,9,0,16,36,10,0,64,1,10,64,37,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253,60,9,164,128, 173,104,0,60,60,11,164,0,37,107,0,0,33,107,0,64,1,96,0,8,0,0,0,0,0,0,0,0,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; const unsigned char PIFPAL[1984] = { 60,9,52,0,64,137,96,0,60,9,0,6,53,41,228,99,64,137,128,0,60,8,164,4,141,8,0,16,49,8,0,1, 81,0,255,253,60,8,164,4,36,8,0,10,60,1,164,4,172,40,0,16,60,8,164,4,141,8,0,24,49,8,0,1, 85,0,255,253,60,8,164,4,36,8,0,3,60,1,164,96,172,40,0,16,36,8,3,255,60,1,164,64,172,40,0,12, 60,1,164,64,172,32,0,36,60,1,164,64,172,32,0,16,60,1,164,80,172,32,0,0,60,1,164,80,172,32,0,4, 60,8,164,4,141,8,0,16,49,8,0,4,85,0,255,253,60,8,164,4,60,11,164,0,60,12,191,192,60,13,191,192, 37,107,16,0,37,140,0,212,37,173,7,32,141,137,0,0,37,140,0,4,37,107,0,4,21,141,255,252,173,105,255,252, 60,11,164,0,60,29,164,0,37,107,16,0,1,96,0,8,55,189,31,240,60,13,191,192,141,168,7,252,37,173,7,192, 49,8,0,128,85,0,255,252,60,13,191,192,141,168,0,36,60,11,176,0,0,8,188,130,0,8,156,194,50,247,0,1, 50,115,0,1,18,96,0,2,54,247,0,6,60,11,166,0,0,8,178,2,49,10,0,255,0,8,172,66,141,168,0,60, 36,9,0,16,50,214,0,255,50,181,0,1,36,20,0,0,1,9,64,37,60,9,164,128,141,41,0,24,49,41,0,2, 85,32,255,253,60,9,164,128,173,168,0,60,60,12,164,96,36,8,0,255,173,136,0,20,173,136,0,24,36,8,0,15, 173,136,0,28,36,8,0,3,173,136,0,32,141,105,0,0,60,13,164,16,37,140,0,0,49,40,0,255,173,136,0,20, 0,9,66,2,173,136,0,24,0,9,68,2,173,136,0,28,0,9,69,2,173,136,0,32,141,175,0,12,32,8,15,192, 33,107,0,64,49,239,0,1,17,224,0,7,37,173,0,12,60,13,164,16,141,175,0,12,37,173,0,12,49,239,0,32, 85,224,255,252,60,13,164,16,60,13,164,0,37,173,0,0,0,8,48,37,33,173,0,64,141,105,0,0,33,8,255,252, 33,107,0,4,33,173,0,4,21,0,255,251,173,169,255,252,60,8,108,7,53,8,137,101,1,72,0,25,0,0,32,18, 36,132,0,1,60,5,164,0,36,165,0,64,4,17,0,19,0,0,0,0,39,189,255,208,20,160,0,2,175,191,0,28, 0,192,40,37,39,166,0,44,4,17,0,255,39,167,0,40,143,164,0,40,143,174,0,44,1,196,16,35,20,64,0,2, 0,64,24,37,0,128,24,37,143,191,0,28,39,189,0,48,0,96,16,37,3,224,0,8,0,0,0,0,39,189,255,32, 175,191,0,60,175,183,0,52,175,182,0,48,175,181,0,44,175,180,0,40,175,179,0,36,175,178,0,32,175,177,0,28, 175,176,0,24,140,174,0,0,0,0,24,37,39,163,0,180,39,162,0,116,1,196,128,38,36,66,0,16,172,80,255,244, 172,80,255,248,172,80,255,252,20,67,255,251,172,80,255,240,140,176,0,0,0,0,136,37,0,160,176,37,36,23,0,32, 2,0,160,37,142,208,0,0,38,49,0,1,36,15,3,239,142,211,0,4,38,214,0,4,1,241,32,35,2,32,48,37, 4,17,255,204,2,0,40,37,143,163,0,116,143,164,0,120,2,0,40,37,0,67,24,33,175,163,0,116,4,17,255,197, 2,32,48,37,143,184,0,124,60,5,108,7,175,162,0,120,3,16,200,38,175,185,0,124,52,165,137,101,38,4,0,5, 4,17,255,188,2,32,48,37,143,168,0,128,2,144,8,43,0,72,72,33,16,32,0,7,175,169,0,128,143,164,0,152, 2,0,40,37,4,17,255,179,2,32,48,37,16,0,0,4,175,162,0,152,143,170,0,152,1,80,88,33,175,171,0,152, 50,130,0,31,143,174,0,132,2,226,24,35,0,112,104,4,0,80,96,6,1,141,168,37,0,112,200,6,0,80,192,4, 1,213,120,33,175,175,0,132,3,25,40,37,143,164,0,144,4,17,255,160,2,32,48,37,143,163,0,140,175,162,0,144, 2,3,8,43,80,32,0,8,143,171,0,132,143,168,0,128,2,17,80,33,1,3,72,33,1,42,24,38,16,0,0,5, 175,163,0,140,143,171,0,132,1,112,96,33,1,131,24,38,175,163,0,140,0,20,22,194,143,175,0,136,2,226,24,35, 0,112,112,6,0,80,104,4,1,174,144,37,0,112,64,4,0,80,200,6,1,242,192,33,175,184,0,136,3,40,40,37, 143,164,0,148,4,17,255,131,2,32,48,37,36,1,3,240,18,33,0,57,175,162,0,148,143,164,0,176,2,64,40,37, 4,17,255,124,2,32,48,37,0,16,30,194,2,227,80,35,1,83,88,6,0,115,72,4,1,43,40,37,0,64,32,37, 4,17,255,116,2,32,48,37,175,162,0,176,143,164,0,172,2,160,40,37,4,17,255,111,2,32,48,37,50,18,0,31, 2,242,160,35,2,147,104,4,2,83,96,6,1,141,40,37,0,64,32,37,4,17,255,103,2,32,48,37,143,169,0,168, 50,99,0,31,2,80,112,6,2,144,120,4,2,227,200,35,1,207,56,37,3,51,64,4,0,115,192,6,143,173,0,156, 3,8,80,37,1,39,88,33,1,106,96,33,175,162,0,172,175,172,0,168,2,96,40,37,2,32,48,37,4,17,255,85, 1,176,32,33,143,174,0,160,175,162,0,156,2,96,40,37,2,32,48,37,4,17,255,79,1,208,32,38,143,175,0,148, 143,184,0,164,175,162,0,160,1,240,200,38,3,56,64,33,16,0,255,115,175,168,0,164,143,163,0,116,0,0,136,37, 39,179,0,116,36,21,0,16,36,20,0,1,175,163,0,100,175,163,0,104,175,163,0,108,175,163,0,112,142,112,0,0, 143,173,0,100,50,2,0,31,2,226,88,35,1,112,80,4,0,80,72,6,1,42,96,37,1,172,112,33,2,14,8,43, 16,32,0,5,175,174,0,100,143,175,0,104,1,240,200,33,16,0,0,6,175,185,0,104,143,164,0,104,2,0,40,37, 4,17,255,44,2,32,48,37,175,162,0,104,50,24,0,2,0,24,64,66,50,18,0,1,85,18,0,6,143,164,0,108, 143,171,0,108,1,112,72,33,16,0,0,6,175,169,0,108,143,164,0,108,2,0,40,37,4,17,255,30,2,32,48,37, 175,162,0,108,86,146,0,6,143,164,0,112,143,170,0,112,1,80,104,38,16,0,0,6,175,173,0,112,143,164,0,112, 2,0,40,37,4,17,255,19,2,32,48,37,175,162,0,112,38,49,0,1,22,53,255,209,38,115,0,4,143,164,0,100, 143,165,0,104,4,17,255,11,2,32,48,37,143,172,0,112,143,174,0,108,143,176,0,24,143,177,0,28,143,178,0,32, 143,179,0,36,143,180,0,40,143,181,0,44,143,182,0,48,143,183,0,52,143,191,0,60,0,64,32,37,39,189,0,224, 4,17,0,8,1,142,40,38,0,133,0,25,0,0,112,16,172,206,0,0,0,0,120,18,172,239,0,0,3,224,0,8, 0,0,0,0,60,11,191,192,141,104,7,240,60,10,255,255,48,132,255,255,1,10,64,36,0,136,32,37,37,107,7,192, 60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253,60,9,164,128,173,100,0,48,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253,60,9,164,128, 141,104,0,60,36,9,0,32,173,101,0,52,1,9,64,37,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253, 60,9,164,128,173,104,0,60,32,9,0,16,33,41,255,255,85,32,255,255,33,41,255,255,141,104,0,60,49,10,0,128, 80,10,255,250,32,9,0,16,36,10,0,64,1,10,64,37,60,9,164,128,141,41,0,24,49,41,0,2,85,32,255,253, 60,9,164,128,173,104,0,60,60,11,164,0,37,107,0,0,33,107,0,64,1,96,0,8,0,0,0,0,0,0,0,0, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; } namespace SuperFamicom { const unsigned char IPLROM[64] = { 205,239,189,232,0,198,29,208,252,143,170,244,143,187,245,120,204,244,208,251,47,25,235,244,208,252,126,244,208,11,228,245, 203,244,215,0,252,208,243,171,1,16,239,126,244,16,235,186,246,218,0,186,244,196,244,221,93,208,219,31,0,0,192,255, }; const unsigned char Cx4[3072] = { 255,255,255,0,0,128,0,0,64,170,170,42,0,0,32,153,153,25,85,85,21,36,73,18,0,0,16,227,56,14,204,204, 12,232,162,11,170,170,10,157,216,9,146,36,9,136,136,8,0,0,8,135,135,7,113,28,7,161,188,6,102,102,6,97, 24,6,116,209,5,178,144,5,85,85,5,184,30,5,78,236,4,161,189,4,73,146,4,238,105,4,68,68,4,8,33,4, 0,0,4,248,224,3,195,195,3,58,168,3,56,142,3,159,117,3,80,94,3,52,72,3,51,51,3,56,31,3,48,12, 3,11,250,2,186,232,2,45,216,2,89,200,2,49,185,2,170,170,2,188,156,2,92,143,2,130,130,2,39,118,2,67, 106,2,208,94,2,200,83,2,36,73,2,224,62,2,247,52,2,99,43,2,34,34,2,46,25,2,132,16,2,32,8,2, 0,0,2,31,248,1,124,240,1,19,233,1,225,225,1,230,218,1,29,212,1,133,205,1,28,199,1,224,192,1,207,186, 1,232,180,1,40,175,1,142,169,1,26,164,1,200,158,1,153,153,1,139,148,1,156,143,1,203,138,1,24,134,1,129, 129,1,5,125,1,164,120,1,93,116,1,46,112,1,22,108,1,22,104,1,44,100,1,88,96,1,152,92,1,237,88,1, 85,85,1,208,81,1,94,78,1,253,74,1,174,71,1,111,68,1,65,65,1,34,62,1,19,59,1,19,56,1,33,53, 1,62,50,1,104,47,1,159,44,1,228,41,1,53,39,1,146,36,1,251,33,1,112,31,1,240,28,1,123,26,1,17, 24,1,177,21,1,92,19,1,17,17,1,207,14,1,151,12,1,104,10,1,66,8,1,36,6,1,16,4,1,4,2,1, 0,0,1,3,254,0,15,252,0,35,250,0,62,248,0,96,246,0,137,244,0,185,242,0,240,240,0,46,239,0,115,237, 0,189,235,0,14,234,0,101,232,0,194,230,0,37,229,0,142,227,0,252,225,0,112,224,0,233,222,0,103,221,0,235, 219,0,116,218,0,1,217,0,148,215,0,43,214,0,199,212,0,104,211,0,13,210,0,182,208,0,100,207,0,22,206,0, 204,204,0,135,203,0,69,202,0,7,201,0,206,199,0,152,198,0,101,197,0,55,196,0,12,195,0,228,193,0,192,192, 0,160,191,0,130,190,0,105,189,0,82,188,0,62,187,0,46,186,0,33,185,0,23,184,0,15,183,0,11,182,0,9, 181,0,11,180,0,15,179,0,22,178,0,31,177,0,44,176,0,58,175,0,76,174,0,96,173,0,118,172,0,143,171,0, 170,170,0,200,169,0,232,168,0,10,168,0,47,167,0,85,166,0,126,165,0,169,164,0,215,163,0,6,163,0,55,162, 0,107,161,0,160,160,0,216,159,0,17,159,0,76,158,0,137,157,0,200,156,0,9,156,0,76,155,0,144,154,0,215, 153,0,31,153,0,104,152,0,180,151,0,1,151,0,79,150,0,160,149,0,242,148,0,69,148,0,154,147,0,241,146,0, 73,146,0,162,145,0,253,144,0,90,144,0,184,143,0,23,143,0,120,142,0,218,141,0,61,141,0,162,140,0,8,140, 0,112,139,0,216,138,0,66,138,0,174,137,0,26,137,0,136,136,0,247,135,0,103,135,0,217,134,0,75,134,0,191, 133,0,52,133,0,169,132,0,33,132,0,153,131,0,18,131,0,140,130,0,8,130,0,132,129,0,2,129,0,128,128,0, 0,0,0,0,0,16,158,160,22,122,182,27,0,0,32,239,198,35,28,49,39,255,84,42,60,65,45,0,0,48,176,152, 50,229,16,53,245,108,55,86,176,57,212,221,59,189,247,61,0,0,64,61,248,65,219,225,67,12,190,69,222,141,71,58, 82,73,241,11,75,185,187,76,56,98,78,0,0,80,149,149,81,112,35,83,254,169,84,162,41,86,183,162,87,144,21,89, 121,130,90,186,233,91,148,75,93,67,168,94,0,0,96,254,82,97,112,161,98,131,235,99,96,49,101,50,115,102,29,177, 103,68,235,104,202,33,106,205,84,107,108,132,108,194,176,109,235,217,110,0,0,112,24,35,113,74,67,114,173,96,115,84, 123,116,84,147,117,191,168,118,168,187,119,31,204,120,52,218,121,249,229,122,122,239,123,200,246,124,239,251,125,253,254,126, 0,0,128,1,255,128,15,252,129,52,247,130,123,240,131,238,231,132,152,221,133,130,209,134,182,195,135,61,180,136,31,163, 137,102,144,138,25,124,139,65,102,140,228,78,141,11,54,142,188,27,143,0,0,144,219,226,144,86,196,145,117,164,146,65, 131,147,189,96,148,241,60,149,226,23,150,150,241,150,17,202,151,89,161,152,115,119,153,100,76,154,49,32,155,222,242,155, 112,196,156,235,148,157,84,100,158,175,50,159,0,0,160,74,204,160,146,151,161,220,97,162,42,43,163,130,243,163,230,186, 164,90,129,165,225,70,166,126,11,167,53,207,167,9,146,168,253,83,169,19,21,170,80,213,170,180,148,171,69,83,172,3, 17,173,242,205,173,21,138,174,110,69,175,0,0,176,204,185,176,214,114,177,32,43,178,172,226,178,124,153,179,147,79,180, 243,4,181,157,185,181,149,109,182,220,32,183,117,211,183,96,133,184,160,54,185,56,231,185,40,151,186,115,70,187,26,245, 187,32,163,188,134,80,189,78,253,189,121,169,190,9,85,191,0,0,192,95,170,192,40,84,193,92,253,193,253,165,194,13, 78,195,140,245,195,125,156,196,225,66,197,184,232,197,5,142,198,201,50,199,6,215,199,187,122,200,235,29,201,152,192,201, 193,98,202,105,4,203,145,165,203,58,70,204,100,230,204,18,134,205,68,37,206,252,195,206,58,98,207,0,0,208,78,157, 208,38,58,209,137,214,209,119,114,210,243,13,211,252,168,211,148,67,212,188,221,212,116,119,213,190,16,214,155,169,214,11, 66,215,15,218,215,169,113,216,216,8,217,159,159,217,254,53,218,245,203,218,133,97,219,176,246,219,118,139,220,216,31,221, 215,179,221,115,71,222,173,218,222,134,109,223,0,0,224,25,146,224,212,35,225,48,181,225,48,70,226,210,214,226,25,103, 227,4,247,227,148,134,228,203,21,229,168,164,229,45,51,230,90,193,230,47,79,231,173,220,231,214,105,232,169,246,232,38, 131,233,80,15,234,38,155,234,168,38,235,217,177,235,183,60,236,67,199,236,127,81,237,106,219,237,6,101,238,82,238,238, 80,119,239,0,0,240,97,136,240,118,16,241,62,152,241,186,31,242,234,166,242,207,45,243,105,180,243,185,58,244,192,192, 244,125,70,245,242,203,245,30,81,246,2,214,246,159,90,247,245,222,247,5,99,248,206,230,248,82,106,249,144,237,249,138, 112,250,63,243,250,177,117,251,223,247,251,202,121,252,114,251,252,216,124,253,251,253,253,222,126,254,127,255,254,223,127,255, 0,0,0,58,36,3,85,72,6,50,108,9,178,143,12,183,178,15,32,213,18,208,246,21,166,23,25,133,55,28,78,86, 31,225,115,34,32,144,37,237,170,40,40,196,43,179,219,46,112,241,49,64,5,53,4,23,56,159,38,59,242,51,62,224, 62,65,73,71,68,16,77,71,24,80,74,67,80,77,114,77,80,137,71,83,105,62,86,247,49,89,20,34,92,164,14,95, 138,247,97,169,220,100,229,189,103,32,155,106,64,116,109,39,73,112,186,25,115,221,229,117,116,173,120,101,112,123,147,46, 126,228,231,128,60,156,131,130,75,134,154,245,136,107,154,139,217,57,142,204,211,144,42,104,147,217,246,149,191,127,152,197, 2,155,209,127,157,202,246,159,153,103,162,36,210,164,85,54,167,20,148,169,73,235,171,221,59,174,186,133,176,201,200,178, 243,4,181,34,58,183,65,104,185,58,143,187,249,174,189,103,199,191,112,216,193,0,226,195,3,228,197,101,222,199,18,209, 201,247,187,203,2,159,205,31,122,207,61,77,209,72,24,211,49,219,212,228,149,214,82,72,216,105,242,217,26,148,219,83, 45,221,5,190,222,33,70,224,151,197,225,89,60,227,89,170,228,135,15,230,215,107,231,59,191,232,166,9,234,11,75,235, 94,131,236,147,178,237,157,216,238,115,245,239,8,9,241,82,19,242,71,20,243,221,11,244,10,250,244,198,222,245,7,186, 246,197,139,247,247,83,248,151,18,249,157,199,249,1,115,250,190,20,251,205,172,251,39,59,252,201,191,252,171,58,253,203, 171,253,35,19,254,175,112,254,109,196,254,87,14,255,109,78,255,171,132,255,15,177,255,151,211,255,67,236,255,16,251,255, 0,0,0,249,162,0,246,69,1,248,232,1,1,140,2,20,47,3,52,210,3,100,117,4,165,24,5,251,187,5,104,95, 6,239,2,7,146,166,7,84,74,8,56,238,8,64,146,9,110,54,10,199,218,10,76,127,11,1,36,12,231,200,12,2, 110,13,85,19,14,227,184,14,174,94,15,185,4,16,8,171,16,158,81,17,125,248,17,169,159,18,37,71,19,244,238,19, 25,151,20,153,63,21,117,232,21,178,145,22,83,59,23,92,229,23,209,143,24,180,58,25,10,230,25,216,145,26,32,62, 27,231,234,27,49,152,28,2,70,29,95,244,29,76,163,30,206,82,31,234,2,32,163,179,32,0,101,33,5,23,34,184, 201,34,30,125,35,60,49,36,24,230,36,185,155,37,36,82,38,95,9,39,113,193,39,97,122,40,54,52,41,246,238,41, 170,170,42,89,103,43,10,37,44,199,227,44,152,163,45,133,100,46,153,38,47,220,233,47,89,174,48,27,116,49,44,59, 50,152,3,51,107,205,51,177,152,52,120,101,53,206,51,54,193,3,55,96,213,55,187,168,56,228,125,57,236,84,58,230, 45,59,230,8,60,1,230,60,77,197,61,227,166,62,220,138,63,82,113,64,98,90,65,44,70,66,208,52,67,113,38,68, 55,27,69,74,19,70,214,14,71,12,14,72,32,17,73,76,24,74,205,35,75,234,51,76,236,72,77,39,99,78,249,130, 79,201,168,80,10,213,81,63,8,83,252,66,84,234,133,85,204,209,86,130,39,88,21,136,89,188,244,90,237,110,92,108, 248,93,105,147,95,163,66,97,165,9,99,30,237,100,129,243,102,23,38,105,34,147,107,165,82,110,124,147,113,180,206,117, 0,0,0,36,3,0,72,6,0,109,9,0,147,12,0,186,15,0,226,18,0,11,22,0,54,25,0,99,28,0,147,31, 0,196,34,0,249,37,0,48,41,0,107,44,0,169,47,0,235,50,0,50,54,0,124,57,0,203,60,0,31,64,0,121, 67,0,216,70,0,61,74,0,168,77,0,25,81,0,146,84,0,17,88,0,153,91,0,40,95,0,192,98,0,96,102,0, 9,106,0,188,109,0,122,113,0,65,117,0,20,121,0,242,124,0,220,128,0,210,132,0,213,136,0,230,140,0,5,145, 0,51,149,0,112,153,0,190,157,0,28,162,0,139,166,0,13,171,0,162,175,0,75,180,0,9,185,0,220,189,0,198, 194,0,200,199,0,227,204,0,24,210,0,103,215,0,211,220,0,93,226,0,6,232,0,207,237,0,187,243,0,202,249,0, 0,0,1,92,6,1,226,12,1,148,19,1,115,26,1,131,33,1,198,40,1,62,48,1,239,55,1,220,63,1,8,72, 1,119,80,1,45,89,1,45,98,1,125,107,1,34,117,1,33,127,1,128,137,1,68,148,1,118,159,1,28,171,1,62, 183,1,231,195,1,31,209,1,241,222,1,105,237,1,149,252,1,131,12,2,68,29,2,233,46,2,134,65,2,51,85,2, 9,106,2,37,128,2,167,151,2,181,176,2,120,203,2,35,232,2,236,6,3,21,40,3,235,75,3,198,114,3,16,157, 3,71,203,3,2,254,3,247,53,4,5,116,4,63,185,4,255,6,5,249,94,5,93,195,5,9,55,6,207,189,6,230, 92,7,151,27,8,109,4,9,54,39,10,198,156,11,129,142,13,233,70,16,255,90,20,113,38,27,72,188,40,181,123,81, 255,255,255,16,251,255,67,236,255,151,211,255,15,177,255,171,132,255,109,78,255,87,14,255,109,196,254,175,112,254,35,19, 254,203,171,253,171,58,253,201,191,252,39,59,252,205,172,251,190,20,251,1,115,250,157,199,249,151,18,249,247,83,248,197, 139,247,7,186,246,198,222,245,10,250,244,221,11,244,71,20,243,82,19,242,8,9,241,115,245,239,157,216,238,147,178,237, 94,131,236,11,75,235,166,9,234,59,191,232,215,107,231,135,15,230,89,170,228,89,60,227,151,197,225,33,70,224,5,190, 222,83,45,221,26,148,219,105,242,217,82,72,216,228,149,214,49,219,212,72,24,211,61,77,209,31,122,207,2,159,205,247, 187,203,18,209,201,101,222,199,3,228,197,0,226,195,112,216,193,103,199,191,249,174,189,58,143,187,65,104,185,34,58,183, 243,4,181,201,200,178,186,133,176,221,59,174,73,235,171,20,148,169,85,54,167,36,210,164,153,103,162,202,246,159,209,127, 157,197,2,155,191,127,152,217,246,149,42,104,147,204,211,144,217,57,142,107,154,139,154,245,136,130,75,134,60,156,131,228, 231,128,147,46,126,101,112,123,116,173,120,221,229,117,186,25,115,39,73,112,64,116,109,32,155,106,229,189,103,169,220,100, 138,247,97,164,14,95,20,34,92,247,49,89,105,62,86,137,71,83,114,77,80,67,80,77,24,80,74,16,77,71,73,71, 68,224,62,65,242,51,62,159,38,59,4,23,56,64,5,53,112,241,49,179,219,46,40,196,43,237,170,40,32,144,37,225, 115,34,78,86,31,133,55,28,166,23,25,208,246,21,32,213,18,183,178,15,178,143,12,50,108,9,85,72,6,58,36,3, }; const unsigned char DSP1[8192] = { 0,192,151,7,0,193,6,32,192,2,48,192,16,192,151,129,128,18,12,128,145,7,0,192,0,0,11,160,64,144,0,0, 11,128,64,144,0,0,11,96,64,144,0,0,11,76,64,144,0,0,11,172,6,144,200,70,144,0,0,11,128,71,144,0, 0,11,60,7,144,240,70,144,0,0,11,116,64,144,0,0,11,204,7,144,252,71,144,0,0,11,248,8,144,60,73,144, 0,0,11,148,64,144,0,0,11,232,9,144,124,77,144,0,0,11,136,14,144,100,80,144,0,0,11,184,64,144,0,0, 11,0,0,11,28,17,144,32,82,144,0,0,11,204,64,144,0,0,11,136,18,144,240,82,144,0,0,11,0,0,11,164, 83,144,0,0,11,56,19,144,188,83,144,194,3,192,4,0,192,29,0,18,4,65,145,29,32,21,244,0,146,225,64,0, 64,224,84,32,224,83,0,0,10,92,65,145,0,0,10,68,65,145,0,128,11,202,255,223,208,128,18,42,0,0,2,16, 192,232,0,168,37,0,0,109,0,0,0,0,37,69,8,192,80,128,84,33,128,18,100,129,148,0,0,11,10,0,224,2, 4,192,208,0,83,33,128,18,76,129,148,194,3,192,232,0,160,26,0,19,48,0,20,124,65,148,209,0,64,69,16,192, 80,0,21,21,0,19,109,0,0,0,0,33,168,65,148,160,1,145,0,0,49,192,1,148,194,255,223,33,128,77,0,0, 10,184,1,145,0,0,49,192,65,148,65,0,224,32,128,83,42,128,18,208,129,148,96,0,21,96,0,21,42,128,19,0, 0,37,0,128,113,232,0,168,197,3,192,80,128,20,0,130,148,69,12,192,80,128,21,37,128,19,27,0,19,0,0,101, 24,194,145,16,0,18,20,66,148,193,255,223,32,128,83,65,0,224,32,128,83,232,0,168,202,3,192,208,128,20,104,194, 145,80,130,148,69,12,192,80,128,21,37,128,19,27,0,19,0,128,37,76,130,148,0,0,72,0,0,64,35,128,19,16, 128,21,18,0,19,100,130,148,0,0,8,108,1,160,18,0,18,116,66,148,16,0,83,16,0,19,0,0,72,16,0,19, 250,64,17,242,64,20,160,2,148,254,160,20,172,194,148,66,12,192,254,160,21,192,2,160,210,0,0,254,160,20,184,130, 148,66,12,192,0,160,21,192,2,160,66,12,192,222,160,21,33,0,0,0,16,4,21,0,19,251,16,0,15,16,37,31, 80,19,33,0,0,0,16,4,21,0,19,251,16,0,15,16,37,31,80,19,33,0,0,0,16,4,21,0,19,251,16,0, 15,16,37,31,16,83,10,1,192,29,0,19,0,0,37,52,67,145,0,0,10,64,67,145,44,67,148,65,0,224,0,0, 64,193,255,223,0,0,64,0,0,53,44,67,148,0,0,64,0,0,53,36,3,148,0,0,64,16,96,18,200,67,145,104, 3,148,0,32,10,0,0,9,104,3,146,0,0,8,5,25,192,27,129,10,97,129,9,99,0,37,21,0,19,109,128,9, 222,0,36,48,0,20,26,0,19,10,0,33,16,0,21,156,3,146,193,255,223,29,0,19,0,0,36,48,0,20,26,0, 19,0,0,33,16,0,21,188,3,146,193,255,223,208,3,150,0,0,10,0,96,73,193,255,223,194,11,192,0,96,64,16, 0,18,228,67,148,8,4,168,0,0,64,42,128,19,29,0,19,208,128,20,224,0,22,8,4,168,42,128,19,29,0,19, 208,128,20,224,0,86,32,128,18,44,196,148,44,128,19,29,128,37,1,0,192,36,132,148,193,255,255,0,128,53,0,0, 103,202,255,223,208,128,18,44,128,19,29,128,37,1,0,192,72,132,148,193,255,255,0,128,5,0,128,53,0,0,103,92, 4,168,92,4,168,100,1,0,242,64,0,243,64,0,254,0,0,116,4,168,116,4,168,100,1,0,44,2,0,60,6,37, 12,0,37,100,1,37,31,0,83,197,69,192,0,128,11,160,132,144,0,0,11,0,128,9,46,0,0,27,1,19,130,53, 192,109,128,37,37,0,53,26,0,0,98,1,0,97,128,20,45,0,0,2,0,101,16,96,18,220,4,148,0,32,10,0, 0,9,60,69,146,69,135,192,27,1,19,109,1,37,96,1,21,98,1,0,110,129,50,43,128,19,21,128,37,43,128,19, 99,128,37,0,0,21,21,0,19,109,0,21,32,0,20,28,5,146,65,0,224,50,0,0,0,128,37,44,133,146,194,255, 223,56,5,150,0,128,10,0,224,73,0,96,64,32,224,83,16,96,18,84,5,148,0,32,10,0,0,9,144,69,146,133, 200,192,98,1,0,27,1,19,109,1,53,96,0,18,26,128,37,37,128,19,96,129,21,97,128,20,45,128,19,0,0,37, 144,5,150,26,0,0,65,0,224,208,96,84,32,224,83,36,128,19,207,255,223,0,2,0,47,6,0,47,68,0,47,64, 0,47,34,0,66,0,0,4,0,192,47,0,0,200,4,168,35,96,0,244,128,10,31,134,9,212,133,146,194,255,223,47, 198,19,63,134,21,31,4,64,4,0,192,47,0,0,200,4,168,35,96,0,244,128,10,31,192,9,0,134,146,194,255,223, 47,192,19,47,2,0,47,32,0,31,32,0,63,6,0,47,64,0,47,64,0,207,255,223,50,4,64,36,128,19,15,0, 208,0,2,0,47,6,0,47,68,0,47,64,0,47,34,0,66,0,0,4,0,192,47,0,0,200,4,168,0,128,11,35, 96,11,244,128,10,31,134,9,47,198,19,63,134,21,31,4,64,4,0,192,47,0,0,200,4,168,0,128,11,35,96,11, 244,128,10,31,192,9,47,192,19,47,2,0,47,32,0,31,32,0,63,6,0,47,64,0,47,64,0,15,0,208,50,4, 64,172,198,151,138,0,0,180,198,151,157,0,0,0,0,33,22,0,19,0,0,160,200,198,151,129,0,0,208,198,151,146, 0,0,232,0,168,76,3,168,22,0,19,228,198,151,38,128,19,0,0,160,240,198,151,138,0,0,221,0,0,18,0,37, 0,199,151,138,128,53,221,0,0,0,128,53,16,199,151,154,0,39,221,0,0,0,128,53,0,0,39,8,1,168,0,128, 8,140,4,168,220,1,168,22,0,0,0,0,160,60,199,151,138,0,0,221,0,0,18,0,53,76,199,151,138,128,39,221, 0,0,0,0,53,92,199,151,154,128,39,221,0,0,0,0,53,0,128,39,22,0,0,116,199,151,38,0,0,0,0,160, 128,199,151,138,0,0,221,0,0,18,0,53,144,199,151,138,128,39,221,0,0,0,0,53,160,199,151,138,128,39,221,0, 0,0,0,53,176,199,151,154,128,39,221,0,0,0,0,52,0,128,38,38,0,0,0,0,160,204,199,151,129,0,0,200, 4,168,42,128,19,220,199,151,157,0,0,26,128,33,38,128,19,33,128,33,240,199,151,38,128,19,0,0,160,4,60,192, 0,200,151,143,2,0,8,200,151,143,6,17,16,200,151,143,50,0,24,200,151,143,32,0,32,200,151,143,8,0,200,4, 168,47,128,19,2,4,192,232,0,168,76,3,168,0,8,0,31,8,19,47,0,1,232,0,168,28,2,19,47,8,33,31, 16,0,241,18,0,200,4,168,46,32,0,44,160,19,28,192,33,250,212,37,0,128,5,47,180,19,33,160,49,12,8,33, 47,192,53,19,0,39,47,160,19,30,128,1,49,128,52,0,0,38,8,1,168,29,96,19,236,128,5,0,0,33,220,1, 168,4,60,192,0,0,5,31,62,0,1,128,1,8,1,168,29,98,19,236,128,5,0,0,36,220,1,168,208,200,151,144, 126,21,246,2,0,220,200,151,246,6,0,0,0,5,31,0,0,236,200,151,22,0,0,0,0,160,248,200,151,129,0,0, 4,16,192,4,201,151,143,0,0,200,4,168,19,96,19,60,0,0,0,0,37,45,128,19,32,201,151,154,128,36,61,0, 37,22,128,37,48,201,151,38,0,0,0,0,160,60,201,151,129,0,0,132,16,192,72,201,151,143,32,0,80,201,151,143, 96,0,88,201,151,143,32,0,96,201,151,143,0,0,200,4,168,46,224,19,28,32,19,250,96,37,13,128,37,250,0,37, 31,160,36,47,32,0,241,0,0,200,4,168,46,224,19,28,0,19,152,201,151,154,0,37,13,128,37,250,0,36,31,160, 37,0,32,0,47,32,0,241,0,0,200,4,168,46,224,19,246,32,0,28,32,19,250,64,37,13,128,37,250,0,37,212, 201,151,22,128,36,220,201,151,38,0,0,0,0,160,132,14,192,236,201,151,143,2,0,244,201,151,143,6,0,252,201,151, 143,0,0,196,51,192,8,202,151,143,16,0,31,80,0,20,202,151,143,16,0,31,38,0,194,31,192,36,202,151,129,0, 0,224,5,168,130,29,192,52,202,151,145,0,0,148,5,168,68,18,192,47,192,19,1,0,192,5,31,192,196,31,192,242, 64,0,243,64,0,254,0,0,132,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,68,29,192,44,2,0, 60,6,37,12,0,37,84,1,37,31,0,19,4,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,5,27, 192,196,27,192,242,64,0,243,64,0,254,0,0,132,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,68, 29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,4,29,192,44,2,0,60,6,37,12,0,37,84,1,37, 31,0,19,5,23,192,196,23,192,242,64,0,243,64,0,254,0,0,132,29,192,44,2,0,60,6,37,12,0,37,84,1, 37,31,0,19,68,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,4,29,192,44,2,0,60,6,37,12, 0,37,84,1,37,31,0,19,2,0,192,197,202,192,196,51,192,243,64,0,254,0,0,132,14,192,60,16,1,13,0,37, 27,0,36,223,144,33,47,176,19,27,0,19,223,144,33,47,194,19,60,16,1,13,0,37,27,0,36,223,144,33,47,176, 19,27,0,19,223,144,33,47,198,19,60,16,1,13,0,37,27,0,36,223,144,33,47,176,19,27,0,19,223,144,33,47, 208,19,241,0,0,228,0,168,4,19,192,31,16,19,47,128,19,66,253,255,1,128,196,0,0,5,232,0,168,76,3,168, 220,1,168,19,0,19,154,0,17,125,0,0,33,128,36,58,128,20,0,0,36,44,140,148,145,0,0,2,0,192,56,12, 160,42,128,19,0,128,33,0,128,13,4,16,192,47,0,0,200,4,168,4,18,192,31,48,0,47,128,19,232,0,168,76, 3,168,132,18,192,31,16,19,47,240,19,133,202,192,251,1,0,97,129,33,45,128,19,100,1,37,29,0,19,250,216,33, 45,192,19,0,128,36,47,0,0,4,16,192,252,0,0,98,1,33,27,1,19,0,128,37,45,128,19,100,129,33,44,128, 19,100,1,1,250,0,37,29,0,0,100,128,33,47,128,19,232,0,168,76,3,168,196,18,192,31,16,19,47,128,19,68, 50,192,241,0,0,66,252,255,232,0,168,76,3,168,4,50,192,26,0,0,241,0,0,232,0,168,29,0,19,0,0,36, 220,1,168,19,0,0,132,38,192,241,26,0,228,0,168,132,18,192,28,16,19,0,0,33,0,128,5,220,1,168,4,3, 192,246,72,0,48,205,151,54,64,0,68,50,192,28,0,19,0,0,33,196,27,192,28,2,19,250,0,33,132,46,192,0, 64,5,88,205,151,22,0,0,31,34,19,0,0,36,0,64,5,108,205,151,22,0,0,31,0,0,0,0,160,68,2,192, 128,205,151,159,0,0,132,17,192,31,0,19,68,2,192,66,0,192,252,128,21,47,88,33,0,0,5,194,1,192,232,0, 168,76,3,168,4,19,192,28,16,19,0,128,5,46,0,33,19,0,0,220,1,168,196,15,192,31,2,0,31,0,0,196, 18,192,49,0,0,28,16,19,2,0,33,0,128,5,220,1,168,132,15,192,31,2,0,31,0,19,132,17,192,244,0,0, 72,46,150,196,15,192,252,64,0,252,34,33,22,0,19,252,192,33,24,206,151,38,128,19,252,0,33,36,206,151,22,0, 19,0,128,33,48,206,151,38,0,0,56,206,151,144,128,19,144,205,145,4,0,160,196,15,192,252,64,0,252,34,37,22, 0,19,252,192,37,71,0,192,96,206,151,38,128,19,252,0,37,22,0,19,0,128,37,38,0,0,7,0,192,144,128,19, 144,205,145,4,0,160,4,47,192,77,0,192,144,206,151,138,0,0,223,16,33,31,18,19,160,206,151,138,0,0,223,16, 33,31,22,19,176,206,151,154,0,0,223,16,33,31,20,0,242,16,0,241,80,0,0,144,4,0,0,6,8,1,168,132, 29,192,0,0,11,31,144,9,47,0,0,4,11,192,241,16,0,242,64,0,0,144,4,0,0,6,8,1,168,68,29,192, 0,0,11,31,144,9,47,0,0,4,7,192,241,16,0,242,64,0,0,144,4,0,0,6,8,1,168,4,29,192,0,0, 11,31,144,9,47,0,0,1,0,192,132,61,192,124,2,168,132,61,192,241,0,0,196,60,192,31,64,0,31,64,0,31, 0,19,132,29,192,197,28,192,242,64,0,243,64,0,254,0,0,4,31,192,44,2,0,60,6,37,12,0,37,84,1,37, 31,0,19,196,30,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,132,30,192,44,2,0,60,6,37,12,0, 37,84,1,37,31,0,19,68,28,192,0,16,4,242,0,0,28,2,168,132,51,192,0,144,5,0,0,7,216,15,146,113, 0,0,8,1,168,76,3,168,68,28,192,31,16,0,47,0,0,132,51,192,241,0,0,228,0,168,68,28,192,28,16,19, 0,0,33,19,128,5,46,0,0,2,2,192,0,128,21,220,1,168,68,28,192,31,32,19,60,16,0,2,0,33,0,128, 5,220,1,168,132,28,192,31,32,19,60,16,0,2,0,33,0,128,5,220,1,168,22,0,0,132,28,192,80,208,151,246, 64,0,88,208,151,246,0,0,0,0,160,100,208,151,141,0,0,10,32,192,4,2,192,116,208,151,157,0,53,31,40,19, 250,8,53,31,88,19,0,0,37,0,0,5,2,2,192,232,0,168,76,3,168,4,19,192,28,16,19,0,0,37,19,128, 5,46,0,0,220,1,168,132,18,192,60,16,0,19,0,19,2,0,37,0,128,5,220,1,168,68,2,192,29,0,19,250, 64,0,61,0,37,250,0,0,30,0,0,68,46,192,241,130,37,35,0,0,242,0,0,196,31,192,60,64,0,12,34,37, 60,64,37,22,0,19,12,128,36,0,128,37,16,209,151,38,128,19,0,0,160,130,203,192,16,128,20,37,128,19,100,0, 0,44,209,151,130,0,0,67,128,11,47,64,0,60,209,151,129,64,0,47,34,0,47,38,0,76,209,151,143,122,0,63, 0,0,200,4,168,244,0,0,44,192,19,29,128,37,47,160,19,108,209,151,145,128,37,47,126,0,200,4,168,244,0,0, 44,192,19,250,162,37,47,192,19,250,128,37,47,192,19,29,128,37,47,162,19,250,196,37,47,164,19,0,32,0,250,196, 37,47,160,19,241,128,37,47,122,0,200,4,168,244,0,0,28,64,19,250,32,37,31,64,19,0,0,36,31,66,19,250, 6,0,250,6,36,31,2,19,44,4,37,31,4,19,18,0,37,31,36,19,250,166,21,0,0,37,250,70,21,31,166,37, 47,192,19,1,0,192,250,166,21,0,0,36,250,70,21,31,166,36,47,0,0,4,0,160,130,203,192,16,128,20,37,128, 19,44,210,151,129,0,0,100,0,0,28,64,0,60,210,151,131,0,0,60,192,37,72,210,151,158,0,0,12,130,37,250, 160,37,38,128,19,60,160,37,28,134,37,250,192,37,104,210,151,38,128,19,60,192,37,12,128,37,0,128,37,124,210,151, 38,0,0,0,0,160,130,203,192,16,128,20,37,128,19,148,210,151,129,0,0,100,0,0,28,2,0,164,210,151,131,0, 0,60,134,37,176,210,151,158,0,0,12,192,37,250,134,37,38,128,19,60,130,37,28,192,37,250,130,37,208,210,151,38, 128,19,60,134,37,12,128,37,0,128,37,228,210,151,38,0,0,0,0,160,130,203,192,32,0,21,21,0,19,100,0,0, 0,211,151,140,64,0,18,0,53,0,128,39,16,211,151,140,64,0,0,0,53,0,128,39,32,211,151,156,0,0,0,0, 53,0,128,39,38,0,0,0,0,160,66,85,213,193,63,192,20,128,10,47,0,8,64,19,148,193,63,192,80,211,151,20, 128,10,46,128,3,120,147,145,2,0,8,84,19,148,0,128,10,60,211,148,6,0,192,0,0,160,1,0,196,0,0,18, 64,0,17,14,64,196,19,128,11,0,0,21,136,147,144,1,0,248,48,0,17,22,0,0,0,0,160,2,0,193,21,0, 9,172,211,151,102,128,8,168,147,145,0,0,160,188,211,151,6,64,192,0,0,160,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0,0,1,0,2,0,4,0,8,0,16,0,32, 0,64,255,127,0,64,0,32,0,16,0,8,0,4,0,2,0,1,128,0,64,0,32,0,1,0,8,0,4,0,2,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,128,229,255,0,1,255,127,2,127,8,126,18,125,31,124,48,123,69,122,93,121,120,120,151,119,186,118, 223,117,7,117,51,116,97,115,147,114,199,113,254,112,56,112,117,111,180,110,246,109,58,109,129,108,202,107,22,107,100,106, 180,105,7,105,91,104,178,103,11,103,102,102,196,101,35,101,132,100,231,99,76,99,179,98,28,98,134,97,242,96,96,96, 208,95,65,95,181,94,41,94,159,93,23,93,145,92,12,92,136,91,6,91,133,90,6,90,136,89,11,89,144,88,22,88, 157,87,38,87,176,86,59,86,200,85,85,85,228,84,116,84,5,84,152,83,43,83,191,82,85,82,236,81,131,81,28,81, 182,80,80,80,236,79,137,79,38,79,197,78,100,78,5,78,166,77,72,77,236,76,144,76,52,76,218,75,129,75,40,75, 208,74,121,74,35,74,205,73,121,73,37,73,209,72,127,72,45,72,220,71,140,71,60,71,237,70,159,70,81,70,4,70, 184,69,108,69,33,69,215,68,141,68,68,68,252,67,180,67,109,67,38,67,224,66,154,66,85,66,17,66,205,65,137,65, 70,65,4,65,194,64,129,64,64,64,255,63,247,65,225,67,189,69,141,71,81,73,11,75,187,76,97,78,255,79,148,81, 34,83,169,84,40,86,162,87,20,89,129,90,233,91,74,93,167,94,255,95,82,97,160,98,234,99,48,101,114,102,176,103, 234,104,32,106,83,107,131,108,175,109,217,110,255,111,34,113,66,114,95,115,122,116,146,117,167,118,186,119,203,120,217,121, 229,122,238,123,245,124,250,125,254,126,255,127,32,0,64,0,0,0,36,3,71,6,106,9,139,12,171,15,200,18,226,21, 248,24,11,28,25,31,35,34,40,37,38,40,31,43,17,46,251,48,222,51,186,54,140,57,86,60,23,63,206,65,122,68, 28,71,180,73,63,76,191,78,51,81,155,83,245,85,66,88,130,90,180,92,215,94,236,96,242,98,232,100,207,102,166,104, 109,106,36,108,202,109,95,111,226,112,85,114,181,115,4,117,65,118,108,119,132,120,138,121,125,122,93,123,41,124,227,124, 138,125,29,126,157,126,9,127,98,127,167,127,216,127,246,127,255,127,246,127,216,127,167,127,98,127,9,127,157,126,29,126, 138,125,227,124,41,124,93,123,125,122,138,121,132,120,108,119,65,118,4,117,181,115,85,114,226,112,95,111,202,109,36,108, 109,106,166,104,207,102,232,100,242,98,236,96,215,94,180,92,130,90,66,88,245,85,155,83,51,81,191,78,63,76,180,73, 28,71,122,68,206,65,23,63,86,60,140,57,186,54,222,51,251,48,17,46,31,43,38,40,40,37,35,34,25,31,11,28, 248,24,226,21,200,18,171,15,139,12,106,9,71,6,36,3,255,127,246,127,216,127,167,127,98,127,9,127,157,126,29,126, 138,125,227,124,41,124,93,123,125,122,138,121,132,120,108,119,65,118,4,117,181,115,85,114,226,112,95,111,202,109,36,108, 109,106,166,104,207,102,232,100,242,98,236,96,215,94,180,92,130,90,66,88,245,85,155,83,51,81,191,78,63,76,180,73, 28,71,122,68,206,65,23,63,86,60,140,57,186,54,222,51,251,48,17,46,31,43,38,40,40,37,35,34,25,31,11,28, 248,24,226,21,200,18,171,15,139,12,106,9,71,6,36,3,0,0,220,252,185,249,150,246,117,243,85,240,56,237,30,234, 8,231,245,227,231,224,221,221,216,218,218,215,225,212,239,209,5,207,34,204,70,201,116,198,170,195,233,192,50,190,134,187, 228,184,76,182,193,179,65,177,205,174,101,172,11,170,190,167,126,165,76,163,41,161,20,159,14,157,24,155,49,153,90,151, 147,149,220,147,54,146,161,144,30,143,171,141,75,140,252,138,191,137,148,136,124,135,118,134,131,133,163,132,215,131,29,131, 118,130,227,129,99,129,247,128,158,128,89,128,40,128,10,128,136,100,128,0,255,3,24,1,2,0,128,0,0,64,215,63, 175,63,134,63,93,63,52,63,12,63,227,62,186,62,145,62,104,62,64,62,23,62,238,61,197,61,156,61,116,61,75,61, 34,61,249,60,208,60,167,60,127,60,86,60,45,60,4,60,219,59,178,59,137,59,96,59,55,59,14,59,229,58,188,58, 147,58,105,58,64,58,23,58,238,57,197,57,156,57,114,57,73,57,32,57,246,56,205,56,164,56,122,56,81,56,39,56, 254,55,212,55,170,55,129,55,87,55,45,55,4,55,218,54,176,54,134,54,92,54,50,54,9,54,223,53,180,53,138,53, 96,53,54,53,12,53,225,52,183,52,141,52,98,52,56,52,13,52,227,51,184,51,141,51,99,51,56,51,13,51,226,50, 183,50,140,50,97,50,54,50,11,50,223,49,180,49,136,49,93,49,49,49,6,49,218,48,174,48,131,48,87,48,43,48, 255,47,210,47,166,47,122,47,77,47,33,47,244,46,200,46,155,46,110,46,65,46,20,46,231,45,186,45,141,45,96,45, 50,45,5,45,215,44,169,44,123,44,77,44,31,44,241,43,195,43,148,43,102,43,55,43,9,43,218,42,171,42,124,42, 76,42,29,42,237,41,190,41,142,41,94,41,46,41,254,40,206,40,157,40,109,40,60,40,11,40,218,39,169,39,119,39, 70,39,20,39,226,38,176,38,126,38,76,38,25,38,231,37,180,37,129,37,77,37,26,37,230,36,178,36,126,36,74,36, 21,36,225,35,172,35,118,35,65,35,11,35,214,34,159,34,105,34,50,34,252,33,196,33,141,33,85,33,29,33,229,32, 173,32,116,32,59,32,1,32,199,31,141,31,83,31,24,31,221,30,161,30,102,30,41,30,237,29,176,29,114,29,53,29, 246,28,184,28,121,28,57,28,249,27,184,27,119,27,54,27,244,26,177,26,110,26,42,26,230,25,161,25,92,25,21,25, 206,24,135,24,63,24,245,23,172,23,97,23,21,23,201,22,124,22,46,22,223,21,142,21,61,21,235,20,151,20,66,20, 236,19,149,19,60,19,226,18,134,18,40,18,201,17,103,17,4,17,158,16,54,16,204,15,95,15,239,14,123,14,4,14, 137,13,10,13,134,12,253,11,109,11,214,10,54,10,141,9,215,8,17,8,54,7,62,6,25,5,154,3,0,0,255,127, 0,1,128,0,31,2,200,0,206,0,72,0,38,10,122,39,206,0,136,100,172,20,1,0,249,0,252,0,255,0,252,0, 249,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; const unsigned char DSP1B[8192] = { 0,192,151,7,0,193,6,32,192,2,48,192,16,192,151,129,128,18,12,128,145,7,0,192,0,0,11,160,64,144,0,0, 11,128,64,144,0,0,11,96,64,144,0,0,11,76,64,144,0,0,11,176,6,144,204,70,144,0,0,11,132,71,144,0, 0,11,64,7,144,244,70,144,0,0,11,116,64,144,0,0,11,208,7,144,0,72,144,0,0,11,252,8,144,64,73,144, 0,0,11,148,64,144,0,0,11,236,9,144,128,77,144,0,0,11,140,14,144,104,80,144,0,0,11,184,64,144,0,0, 11,0,0,11,32,17,144,36,82,144,0,0,11,204,64,144,0,0,11,140,18,144,244,82,144,0,0,11,0,0,11,168, 83,144,0,0,11,60,19,144,192,83,144,194,3,192,4,0,192,29,0,18,4,65,145,29,32,21,244,0,146,225,64,0, 64,224,84,32,224,83,0,0,10,92,65,145,0,0,10,68,65,145,0,128,11,202,255,223,208,128,18,42,0,0,2,16, 192,232,0,168,37,0,0,109,0,0,0,0,37,69,8,192,80,128,84,33,128,18,100,129,148,0,0,11,10,0,224,2, 4,192,208,0,83,33,128,18,76,129,148,194,3,192,232,0,160,26,0,19,48,0,20,124,65,148,209,0,64,69,16,192, 80,0,21,21,0,19,109,0,0,0,0,33,168,65,148,160,1,145,0,0,49,192,1,148,194,255,223,33,128,77,0,0, 10,184,1,145,0,0,49,192,65,148,65,0,224,32,128,83,42,128,18,208,129,148,96,0,21,96,0,21,42,128,19,0, 0,37,0,128,113,232,0,168,197,3,192,80,128,20,0,130,148,69,12,192,80,128,21,37,128,19,27,0,19,0,0,101, 24,194,145,16,0,18,20,66,148,193,255,223,32,128,83,65,0,224,32,128,83,232,0,168,202,3,192,208,128,20,104,194, 145,80,130,148,69,12,192,80,128,21,37,128,19,27,0,19,0,128,37,76,130,148,0,0,72,0,0,64,35,128,19,16, 128,21,18,0,19,100,130,148,0,0,8,108,1,160,18,0,18,116,66,148,16,0,83,16,0,19,0,0,72,16,0,19, 250,64,17,242,64,20,160,2,148,254,160,20,172,194,148,66,12,192,254,160,21,192,2,160,210,0,0,254,160,20,184,130, 148,66,12,192,0,160,21,192,2,160,66,12,192,222,160,21,33,0,0,0,16,4,21,0,19,251,16,0,15,16,37,31, 80,19,33,0,0,0,16,4,21,0,19,251,16,0,15,16,37,31,80,19,33,0,0,0,16,4,21,0,19,251,16,0, 15,16,37,31,16,83,10,1,192,29,0,19,0,0,37,52,67,145,0,0,10,64,67,145,44,67,148,65,0,224,0,0, 64,193,255,223,0,0,64,0,0,53,44,67,148,0,0,64,0,0,53,36,3,148,0,0,64,16,96,18,200,67,145,104, 3,148,0,32,10,0,0,9,104,3,146,0,0,8,5,25,192,27,129,10,97,129,9,99,0,37,21,0,19,109,128,9, 222,0,36,48,0,20,26,0,19,10,0,33,16,0,21,156,3,146,193,255,223,29,0,19,0,0,36,48,0,20,26,0, 19,0,0,33,16,0,21,188,3,146,193,255,223,208,3,150,0,0,10,0,96,73,193,255,223,194,11,192,0,96,64,16, 0,18,228,67,148,8,4,168,0,0,64,42,128,19,29,0,19,208,128,20,224,0,22,8,4,168,42,128,19,29,0,19, 208,128,20,224,0,86,32,128,18,44,196,148,44,128,19,29,128,37,1,0,192,36,132,148,193,255,255,0,128,53,0,0, 103,202,255,223,208,128,18,44,128,19,29,128,37,1,0,192,72,132,148,193,255,255,0,128,5,0,128,53,0,0,103,92, 4,168,92,4,168,100,1,0,242,64,0,243,64,0,254,0,0,116,4,168,116,4,168,100,1,0,44,2,0,60,6,37, 12,0,37,100,1,37,31,0,83,0,128,11,156,132,144,0,0,11,0,128,9,26,0,0,1,240,223,13,8,192,46,0, 50,130,53,192,13,16,192,26,128,37,37,0,0,98,1,0,97,128,20,45,0,0,2,0,101,16,96,18,224,4,148,0, 32,10,0,0,9,64,69,146,197,134,192,27,1,19,109,1,37,96,1,21,98,1,0,110,129,50,43,128,19,21,128,37, 43,128,19,99,128,37,0,0,21,21,0,19,109,0,21,32,0,20,32,5,146,65,0,224,50,0,0,0,128,37,48,133, 146,194,255,223,60,5,150,0,128,10,0,224,73,0,96,64,32,224,83,16,96,18,88,5,148,0,32,10,0,0,9,148, 69,146,5,200,192,98,1,0,27,1,19,109,1,53,96,0,18,26,128,37,37,128,19,96,129,21,97,128,20,45,128,19, 0,0,37,148,5,150,26,0,0,65,0,224,208,96,84,32,224,83,36,128,19,207,255,223,0,2,0,47,6,0,47,68, 0,47,64,0,47,34,0,66,0,0,4,0,192,47,0,0,204,4,168,35,96,0,244,128,10,31,134,9,216,133,146,194, 255,223,47,198,19,63,134,21,31,4,64,4,0,192,47,0,0,204,4,168,35,96,0,244,128,10,31,192,9,4,134,146, 194,255,223,47,192,19,47,2,0,47,32,0,31,32,0,63,6,0,47,64,0,47,64,0,207,255,223,50,4,64,36,128, 19,15,0,208,0,2,0,47,6,0,47,68,0,47,64,0,47,34,0,66,0,0,4,0,192,47,0,0,204,4,168,0, 128,11,35,96,11,244,128,10,31,134,9,47,198,19,63,134,21,31,4,64,4,0,192,47,0,0,204,4,168,0,128,11, 35,96,11,244,128,10,31,192,9,47,192,19,47,2,0,47,32,0,31,32,0,63,6,0,47,64,0,47,64,0,15,0, 208,50,4,64,176,198,151,138,0,0,184,198,151,157,0,0,0,0,33,22,0,19,0,0,160,204,198,151,129,0,0,212, 198,151,146,0,0,232,0,168,76,3,168,22,0,19,232,198,151,38,128,19,0,0,160,244,198,151,138,0,0,221,0,0, 18,0,37,4,199,151,138,128,53,221,0,0,0,128,53,20,199,151,154,0,39,221,0,0,0,128,53,0,0,39,8,1, 168,0,128,8,140,4,168,220,1,168,22,0,0,0,0,160,64,199,151,138,0,0,221,0,0,18,0,53,80,199,151,138, 128,39,221,0,0,0,0,53,96,199,151,154,128,39,221,0,0,0,0,53,0,128,39,22,0,0,120,199,151,38,0,0, 0,0,160,132,199,151,138,0,0,221,0,0,18,0,53,148,199,151,138,128,39,221,0,0,0,0,53,164,199,151,138,128, 39,221,0,0,0,0,53,180,199,151,154,128,39,221,0,0,0,0,52,0,128,38,38,0,0,0,0,160,208,199,151,129, 0,0,204,4,168,42,128,19,224,199,151,157,0,0,26,128,33,38,128,19,33,128,33,244,199,151,38,128,19,0,0,160, 4,60,192,4,200,151,143,2,0,12,200,151,143,6,17,20,200,151,143,50,0,28,200,151,143,32,0,36,200,151,143,8, 0,204,4,168,47,128,19,2,4,192,232,0,168,76,3,168,0,8,0,31,8,19,47,0,1,232,0,168,28,2,19,47, 8,33,31,16,0,241,18,0,204,4,168,46,32,0,44,160,19,28,192,33,250,212,37,0,128,5,47,180,19,33,160,49, 12,8,33,47,192,53,19,0,39,47,160,19,30,128,1,49,128,52,0,0,38,8,1,168,29,96,19,236,128,5,0,0, 33,220,1,168,4,60,192,0,0,5,31,62,0,1,128,1,8,1,168,29,98,19,236,128,5,0,0,36,220,1,168,212, 200,151,144,126,21,246,2,0,224,200,151,246,6,0,0,0,5,31,0,0,240,200,151,22,0,0,0,0,160,252,200,151, 129,0,0,4,16,192,8,201,151,143,0,0,204,4,168,19,96,19,60,0,0,0,0,37,45,128,19,36,201,151,154,128, 36,61,0,37,22,128,37,52,201,151,38,0,0,0,0,160,64,201,151,129,0,0,132,16,192,76,201,151,143,32,0,84, 201,151,143,96,0,92,201,151,143,32,0,100,201,151,143,0,0,204,4,168,46,224,19,28,32,19,250,96,37,13,128,37, 250,0,37,31,160,36,47,32,0,241,0,0,204,4,168,46,224,19,28,0,19,156,201,151,154,0,37,13,128,37,250,0, 36,31,160,37,0,32,0,47,32,0,241,0,0,204,4,168,46,224,19,246,32,0,28,32,19,250,64,37,13,128,37,250, 0,37,216,201,151,22,128,36,224,201,151,38,0,0,0,0,160,132,14,192,240,201,151,143,2,0,248,201,151,143,6,0, 0,202,151,143,0,0,196,51,192,12,202,151,143,16,0,31,80,0,24,202,151,143,16,0,31,38,0,194,31,192,40,202, 151,129,0,0,228,5,168,130,29,192,56,202,151,145,0,0,152,5,168,68,18,192,47,192,19,1,0,192,5,31,192,196, 31,192,242,64,0,243,64,0,254,0,0,132,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,68,29,192, 44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,4,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0, 19,5,27,192,196,27,192,242,64,0,243,64,0,254,0,0,132,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31, 0,19,68,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,4,29,192,44,2,0,60,6,37,12,0,37, 84,1,37,31,0,19,5,23,192,196,23,192,242,64,0,243,64,0,254,0,0,132,29,192,44,2,0,60,6,37,12,0, 37,84,1,37,31,0,19,68,29,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,4,29,192,44,2,0,60, 6,37,12,0,37,84,1,37,31,0,19,2,0,192,69,202,192,196,51,192,243,64,0,254,0,0,132,14,192,60,16,1, 13,0,37,27,0,36,223,144,33,47,176,19,27,0,19,223,144,33,47,194,19,60,16,1,13,0,37,27,0,36,223,144, 33,47,176,19,27,0,19,223,144,33,47,198,19,60,16,1,13,0,37,27,0,36,223,144,33,47,176,19,27,0,19,223, 144,33,47,208,19,241,0,0,228,0,168,4,19,192,31,16,19,47,128,19,66,253,255,1,128,196,0,0,5,232,0,168, 76,3,168,220,1,168,19,0,19,154,0,17,125,0,0,33,128,36,58,128,20,0,0,36,48,140,148,145,0,0,2,0, 192,60,12,160,42,128,19,0,128,33,0,128,13,4,16,192,47,0,0,204,4,168,4,18,192,31,48,0,47,128,19,232, 0,168,76,3,168,132,18,192,31,16,19,47,240,19,5,202,192,251,1,0,97,129,33,45,128,19,100,1,37,29,0,19, 250,216,33,45,192,19,0,128,36,47,0,0,4,16,192,252,0,0,98,1,33,27,1,19,0,128,37,45,128,19,100,129, 33,44,128,19,100,1,1,250,0,37,29,0,0,100,128,33,47,128,19,232,0,168,76,3,168,196,18,192,31,16,19,47, 128,19,68,50,192,241,0,0,66,252,255,232,0,168,76,3,168,4,50,192,26,0,0,241,0,0,232,0,168,29,0,19, 0,0,36,220,1,168,19,0,0,132,38,192,241,26,0,228,0,168,132,18,192,28,16,19,0,0,33,0,128,5,220,1, 168,4,3,192,246,72,0,52,205,151,54,64,0,68,50,192,28,0,19,0,0,33,196,27,192,28,2,19,250,0,33,132, 46,192,0,64,5,92,205,151,22,0,0,31,34,19,0,0,36,0,64,5,112,205,151,22,0,0,31,0,0,0,0,160, 68,2,192,132,205,151,159,0,0,132,17,192,31,0,19,68,2,192,66,0,192,252,128,21,47,88,33,0,0,5,194,1, 192,232,0,168,76,3,168,4,19,192,28,16,19,0,128,5,46,0,33,19,0,0,220,1,168,196,15,192,31,2,0,31, 0,0,196,18,192,49,0,0,28,16,19,2,0,33,0,128,5,220,1,168,132,15,192,31,2,0,31,0,19,132,17,192, 244,0,0,76,46,150,196,15,192,252,64,0,252,34,33,22,0,19,252,192,33,28,206,151,38,128,19,252,0,33,40,206, 151,22,0,19,0,128,33,52,206,151,38,0,0,60,206,151,144,128,19,148,205,145,4,0,160,196,15,192,252,64,0,252, 34,37,22,0,19,252,192,37,71,0,192,100,206,151,38,128,19,252,0,37,22,0,19,0,128,37,38,0,0,7,0,192, 144,128,19,148,205,145,4,0,160,4,47,192,77,0,192,148,206,151,138,0,0,223,16,33,31,18,19,164,206,151,138,0, 0,223,16,33,31,22,19,180,206,151,154,0,0,223,16,33,31,20,0,242,16,0,241,80,0,0,144,4,0,0,6,8, 1,168,132,29,192,0,0,11,31,144,9,47,0,0,4,11,192,241,16,0,242,64,0,0,144,4,0,0,6,8,1,168, 68,29,192,0,0,11,31,144,9,47,0,0,4,7,192,241,16,0,242,64,0,0,144,4,0,0,6,8,1,168,4,29, 192,0,0,11,31,144,9,47,0,0,1,0,192,132,61,192,124,2,168,132,61,192,241,0,0,196,60,192,31,64,0,31, 64,0,31,0,19,132,29,192,197,28,192,242,64,0,243,64,0,254,0,0,4,31,192,44,2,0,60,6,37,12,0,37, 84,1,37,31,0,19,196,30,192,44,2,0,60,6,37,12,0,37,84,1,37,31,0,19,132,30,192,44,2,0,60,6, 37,12,0,37,84,1,37,31,0,19,68,28,192,0,16,4,242,0,0,28,2,168,132,51,192,0,144,5,0,0,7,220, 15,146,113,0,0,8,1,168,76,3,168,68,28,192,31,16,0,47,0,0,132,51,192,241,0,0,228,0,168,68,28,192, 28,16,19,0,0,33,19,128,5,46,0,0,2,2,192,0,128,21,220,1,168,68,28,192,31,32,19,60,16,0,2,0, 33,0,128,5,220,1,168,132,28,192,31,32,19,60,16,0,2,0,33,0,128,5,220,1,168,22,0,0,132,28,192,84, 208,151,246,64,0,92,208,151,246,0,0,0,0,160,104,208,151,141,0,0,10,32,192,4,2,192,120,208,151,157,0,53, 31,40,19,250,8,53,31,88,19,0,0,37,0,0,5,2,2,192,232,0,168,76,3,168,4,19,192,28,16,19,0,0, 37,19,128,5,46,0,0,220,1,168,132,18,192,60,16,0,19,0,19,2,0,37,0,128,5,220,1,168,68,2,192,29, 0,19,250,64,0,61,0,37,250,0,0,30,0,0,68,46,192,241,130,37,35,0,0,242,0,0,196,31,192,60,64,0, 12,34,37,60,64,37,22,0,19,12,128,36,0,128,37,20,209,151,38,128,19,0,0,160,2,203,192,16,128,20,37,128, 19,100,0,0,48,209,151,130,0,0,67,128,11,47,64,0,64,209,151,129,64,0,47,34,0,47,38,0,80,209,151,143, 122,0,63,0,0,204,4,168,244,0,0,44,192,19,29,128,37,47,160,19,112,209,151,145,128,37,47,126,0,204,4,168, 244,0,0,44,192,19,250,162,37,47,192,19,250,128,37,47,192,19,29,128,37,47,162,19,250,196,37,47,164,19,0,32, 0,250,196,37,47,160,19,241,128,37,47,122,0,204,4,168,244,0,0,28,64,19,250,32,37,31,64,19,0,0,36,31, 66,19,250,6,0,250,6,36,31,2,19,44,4,37,31,4,19,18,0,37,31,36,19,250,166,21,0,0,37,250,70,21, 31,166,37,47,192,19,1,0,192,250,166,21,0,0,36,250,70,21,31,166,36,47,0,0,4,0,160,2,203,192,16,128, 20,37,128,19,48,210,151,129,0,0,100,0,0,28,64,0,64,210,151,131,0,0,60,192,37,76,210,151,158,0,0,12, 130,37,250,160,37,38,128,19,60,160,37,28,134,37,250,192,37,108,210,151,38,128,19,60,192,37,12,128,37,0,128,37, 128,210,151,38,0,0,0,0,160,2,203,192,16,128,20,37,128,19,152,210,151,129,0,0,100,0,0,28,2,0,168,210, 151,131,0,0,60,134,37,180,210,151,158,0,0,12,192,37,250,134,37,38,128,19,60,130,37,28,192,37,250,130,37,212, 210,151,38,128,19,60,134,37,12,128,37,0,128,37,232,210,151,38,0,0,0,0,160,2,203,192,32,0,21,21,0,19, 100,0,0,4,211,151,140,64,0,18,0,53,0,128,39,20,211,151,140,64,0,0,0,53,0,128,39,36,211,151,156,0, 0,0,0,53,0,128,39,38,0,0,0,0,160,66,85,213,193,63,192,20,128,10,47,0,8,68,19,148,193,63,192,84, 211,151,20,128,10,46,128,3,124,147,145,2,0,8,88,19,148,0,128,10,64,211,148,6,0,192,0,0,160,1,0,196, 0,0,18,64,0,17,14,64,196,19,128,11,0,0,21,140,147,144,1,0,248,48,0,17,22,0,0,0,0,160,2,0, 193,21,0,9,176,211,151,102,128,8,172,147,145,0,0,160,192,211,151,70,64,192,0,0,160,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,2,0,4,0,8,0,16,0,32,0,64,0,128,0,0,1,0,2,0,4,0,8,0,16,0,32, 0,64,255,127,0,64,0,32,0,16,0,8,0,4,0,2,0,1,128,0,64,0,32,0,1,0,8,0,4,0,2,0, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,128,229,255,0,1,255,127,2,127,8,126,18,125,31,124,48,123,69,122,93,121,120,120,151,119,186,118, 223,117,7,117,51,116,97,115,147,114,199,113,254,112,56,112,117,111,180,110,246,109,58,109,129,108,202,107,22,107,100,106, 180,105,7,105,91,104,178,103,11,103,102,102,196,101,35,101,132,100,231,99,76,99,179,98,28,98,134,97,242,96,96,96, 208,95,65,95,181,94,41,94,159,93,23,93,145,92,12,92,136,91,6,91,133,90,6,90,136,89,11,89,144,88,22,88, 157,87,38,87,176,86,59,86,200,85,85,85,228,84,116,84,5,84,152,83,43,83,191,82,85,82,236,81,131,81,28,81, 182,80,80,80,236,79,137,79,38,79,197,78,100,78,5,78,166,77,72,77,236,76,144,76,52,76,218,75,129,75,40,75, 208,74,121,74,35,74,205,73,121,73,37,73,209,72,127,72,45,72,220,71,140,71,60,71,237,70,159,70,81,70,4,70, 184,69,108,69,33,69,215,68,141,68,68,68,252,67,180,67,109,67,38,67,224,66,154,66,85,66,17,66,205,65,137,65, 70,65,4,65,194,64,129,64,64,64,255,63,247,65,225,67,189,69,141,71,81,73,11,75,187,76,97,78,255,79,148,81, 34,83,169,84,40,86,162,87,20,89,129,90,233,91,74,93,167,94,255,95,82,97,160,98,234,99,48,101,114,102,176,103, 234,104,32,106,83,107,131,108,175,109,217,110,255,111,34,113,66,114,95,115,122,116,146,117,167,118,186,119,203,120,217,121, 229,122,238,123,245,124,250,125,254,126,255,127,0,0,36,3,71,6,106,9,139,12,171,15,200,18,226,21,248,24,11,28, 25,31,35,34,40,37,38,40,31,43,17,46,251,48,222,51,186,54,140,57,86,60,23,63,206,65,122,68,28,71,180,73, 63,76,191,78,51,81,155,83,245,85,66,88,130,90,180,92,215,94,236,96,242,98,232,100,207,102,166,104,109,106,36,108, 202,109,95,111,226,112,85,114,181,115,4,117,65,118,108,119,132,120,138,121,125,122,93,123,41,124,227,124,138,125,29,126, 157,126,9,127,98,127,167,127,216,127,246,127,255,127,246,127,216,127,167,127,98,127,9,127,157,126,29,126,138,125,227,124, 41,124,93,123,125,122,138,121,132,120,108,119,65,118,4,117,181,115,85,114,226,112,95,111,202,109,36,108,109,106,166,104, 207,102,232,100,242,98,236,96,215,94,180,92,130,90,66,88,245,85,155,83,51,81,191,78,63,76,180,73,28,71,122,68, 206,65,23,63,86,60,140,57,186,54,222,51,251,48,17,46,31,43,38,40,40,37,35,34,25,31,11,28,248,24,226,21, 200,18,171,15,139,12,106,9,71,6,36,3,255,127,246,127,216,127,167,127,98,127,9,127,157,126,29,126,138,125,227,124, 41,124,93,123,125,122,138,121,132,120,108,119,65,118,4,117,181,115,85,114,226,112,95,111,202,109,36,108,109,106,166,104, 207,102,232,100,242,98,236,96,215,94,180,92,130,90,66,88,245,85,155,83,51,81,191,78,63,76,180,73,28,71,122,68, 206,65,23,63,86,60,140,57,186,54,222,51,251,48,17,46,31,43,38,40,40,37,35,34,25,31,11,28,248,24,226,21, 200,18,171,15,139,12,106,9,71,6,36,3,0,0,220,252,185,249,150,246,117,243,85,240,56,237,30,234,8,231,245,227, 231,224,221,221,216,218,218,215,225,212,239,209,5,207,34,204,70,201,116,198,170,195,233,192,50,190,134,187,228,184,76,182, 193,179,65,177,205,174,101,172,11,170,190,167,126,165,76,163,41,161,20,159,14,157,24,155,49,153,90,151,147,149,220,147, 54,146,161,144,30,143,171,141,75,140,252,138,191,137,148,136,124,135,118,134,131,133,163,132,215,131,29,131,118,130,227,129, 99,129,247,128,158,128,89,128,40,128,10,128,136,100,128,0,255,3,22,1,2,0,128,0,0,64,215,63,175,63,134,63, 93,63,52,63,12,63,227,62,186,62,145,62,104,62,64,62,23,62,238,61,197,61,156,61,116,61,75,61,34,61,249,60, 208,60,167,60,127,60,86,60,45,60,4,60,219,59,178,59,137,59,96,59,55,59,14,59,229,58,188,58,147,58,105,58, 64,58,23,58,238,57,197,57,156,57,114,57,73,57,32,57,246,56,205,56,164,56,122,56,81,56,39,56,254,55,212,55, 170,55,129,55,87,55,45,55,4,55,218,54,176,54,134,54,92,54,50,54,9,54,223,53,180,53,138,53,96,53,54,53, 12,53,225,52,183,52,141,52,98,52,56,52,13,52,227,51,184,51,141,51,99,51,56,51,13,51,226,50,183,50,140,50, 97,50,54,50,11,50,223,49,180,49,136,49,93,49,49,49,6,49,218,48,174,48,131,48,87,48,43,48,255,47,210,47, 166,47,122,47,77,47,33,47,244,46,200,46,155,46,110,46,65,46,20,46,231,45,186,45,141,45,96,45,50,45,5,45, 215,44,169,44,123,44,77,44,31,44,241,43,195,43,148,43,102,43,55,43,9,43,218,42,171,42,124,42,76,42,29,42, 237,41,190,41,142,41,94,41,46,41,254,40,206,40,157,40,109,40,60,40,11,40,218,39,169,39,119,39,70,39,20,39, 226,38,176,38,126,38,76,38,25,38,231,37,180,37,129,37,77,37,26,37,230,36,178,36,126,36,74,36,21,36,225,35, 172,35,118,35,65,35,11,35,214,34,159,34,105,34,50,34,252,33,196,33,141,33,85,33,29,33,229,32,173,32,116,32, 59,32,1,32,199,31,141,31,83,31,24,31,221,30,161,30,102,30,41,30,237,29,176,29,114,29,53,29,246,28,184,28, 121,28,57,28,249,27,184,27,119,27,54,27,244,26,177,26,110,26,42,26,230,25,161,25,92,25,21,25,206,24,135,24, 63,24,245,23,172,23,97,23,21,23,201,22,124,22,46,22,223,21,142,21,61,21,235,20,151,20,66,20,236,19,149,19, 60,19,226,18,134,18,40,18,201,17,103,17,4,17,158,16,54,16,204,15,95,15,239,14,123,14,4,14,137,13,10,13, 134,12,253,11,109,11,214,10,54,10,141,9,215,8,17,8,54,7,62,6,25,5,154,3,0,0,255,127,0,1,128,0, 29,2,200,0,206,0,72,0,38,10,122,39,206,0,136,100,172,20,1,0,249,0,252,0,255,0,252,0,249,0,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; const unsigned char DSP2[8192] = { 7,0,193,197,255,192,22,0,19,12,192,151,130,0,0,20,128,11,68,192,144,0,128,11,108,192,144,0,128,11,140,192, 144,97,128,11,60,192,144,12,1,168,4,0,160,72,16,168,4,0,160,0,128,11,164,192,144,0,128,11,196,192,144,97, 128,11,100,192,144,192,1,168,4,0,160,224,17,168,4,0,160,0,128,11,220,192,144,97,128,11,132,192,144,160,2,168, 4,0,160,40,17,168,4,0,160,97,128,11,156,192,144,120,9,168,4,0,160,152,20,168,4,0,160,0,128,11,244,192, 144,97,128,11,188,192,144,88,9,168,4,0,160,152,18,168,4,0,160,97,128,11,212,192,144,220,9,168,4,0,160,100, 24,168,4,0,160,97,128,11,236,192,144,196,14,168,4,0,160,136,23,168,4,0,160,97,128,11,4,193,144,116,15,168, 4,0,160,68,27,168,4,0,160,74,224,223,13,64,192,194,0,192,24,193,151,128,0,18,21,0,49,96,128,19,21,0, 19,111,130,13,0,0,37,52,193,151,128,0,18,21,0,49,96,128,19,21,0,19,111,134,13,0,0,37,80,193,151,128, 0,18,21,0,49,96,128,19,21,0,19,111,130,13,0,0,37,108,193,151,144,0,18,21,0,49,96,128,19,21,0,19, 111,6,13,38,2,3,0,128,15,0,0,13,0,6,3,0,0,13,0,2,3,156,193,151,38,0,13,0,6,3,168,193, 151,22,0,15,176,193,151,22,0,0,184,193,151,16,0,83,77,224,223,10,64,192,195,0,192,4,2,192,208,193,151,128, 0,18,128,8,168,111,14,37,224,193,151,128,0,18,128,8,168,111,46,37,208,33,150,4,2,192,49,0,0,0,2,3, 0,0,13,0,6,3,0,0,13,0,2,3,0,0,13,50,38,3,22,0,15,0,130,3,0,128,13,0,134,3,40,194, 151,22,128,13,49,130,3,0,128,13,0,166,3,60,194,151,38,128,15,164,8,168,40,98,150,76,194,151,22,128,13,49, 130,3,0,128,13,0,128,3,4,18,192,100,194,151,38,128,15,164,8,168,112,194,151,22,128,13,49,130,3,0,128,13, 0,166,3,100,34,150,136,194,151,38,128,15,144,194,151,38,128,19,152,194,151,0,0,64,160,194,151,128,0,18,74,224, 223,13,64,192,18,0,19,35,0,37,196,1,192,188,194,151,128,0,18,128,8,168,111,14,37,228,2,150,208,194,151,128, 0,18,128,8,168,111,78,37,188,2,160,228,194,151,128,0,18,21,0,49,111,136,8,21,0,19,111,10,37,40,196,145, 0,195,151,128,0,18,21,0,49,111,8,0,21,0,19,111,0,37,4,2,192,28,195,151,128,0,18,128,8,168,111,14, 37,68,67,150,48,195,151,128,0,18,128,8,168,111,46,37,28,3,160,68,195,151,128,0,18,21,0,49,111,136,8,21, 0,19,111,10,37,40,196,145,96,195,151,128,0,18,21,0,49,111,8,0,21,0,19,111,0,37,196,33,192,124,195,151, 128,0,18,128,8,168,111,14,37,164,3,150,144,195,151,128,0,18,128,8,168,111,78,37,124,3,160,164,195,151,128,0, 18,21,0,49,111,136,8,21,0,19,111,10,37,40,196,145,192,195,151,128,0,18,21,0,49,111,8,0,21,0,19,111, 0,37,4,34,192,220,195,151,128,0,18,128,8,168,111,14,37,32,128,19,240,195,151,128,0,18,21,0,49,111,8,0, 21,0,19,111,10,37,40,68,150,12,196,151,128,0,18,21,0,49,111,8,0,21,0,19,111,46,37,220,3,160,40,196, 151,144,0,18,21,0,49,111,136,13,21,0,19,111,0,37,196,1,192,33,130,3,0,128,13,0,134,3,0,128,13,0, 130,3,0,128,13,0,198,3,38,128,15,0,2,3,0,0,13,0,6,3,0,0,13,116,196,151,38,128,19,0,128,13, 0,2,3,0,0,13,0,70,3,140,196,151,22,0,15,0,130,3,0,128,13,0,134,3,0,128,13,164,196,151,22,0, 19,0,0,13,0,130,3,0,128,13,0,198,3,220,4,150,192,196,151,38,128,15,0,2,3,0,0,13,0,6,3,0, 0,13,116,4,160,220,196,151,38,128,15,0,2,3,0,0,13,0,6,3,0,0,13,0,2,3,248,196,151,38,0,13, 0,0,3,32,128,19,196,17,192,12,197,151,22,0,15,0,128,13,0,130,3,0,128,13,0,134,3,0,128,13,40,197, 151,22,0,19,0,0,13,0,130,3,0,128,13,0,198,3,84,5,150,68,197,151,38,128,15,216,8,168,40,5,160,84, 197,151,38,128,15,0,2,3,0,0,13,0,6,3,0,0,13,0,2,3,112,197,151,38,0,13,50,0,3,0,128,8, 104,200,145,4,2,192,42,128,19,140,197,151,22,0,15,0,128,13,0,130,3,0,128,13,0,134,3,0,128,13,168,197, 151,22,0,19,0,0,13,0,130,3,0,128,13,0,166,3,212,69,150,196,197,151,38,128,15,24,9,168,168,5,160,212, 197,151,38,128,15,0,2,3,0,0,13,0,6,3,0,0,13,0,2,3,240,197,151,38,0,13,0,0,3,4,18,192, 32,128,19,0,128,13,8,198,151,22,0,15,0,130,3,0,128,13,0,134,3,0,128,13,32,198,151,22,0,19,0,0, 13,0,130,3,0,128,13,0,166,3,76,70,150,60,198,151,38,128,15,24,9,168,32,6,160,76,198,151,38,128,15,0, 2,3,0,0,13,0,6,3,0,0,13,0,2,3,104,198,151,38,0,13,210,0,3,0,128,8,104,200,145,196,33,192, 42,128,19,132,198,151,22,0,15,0,128,13,0,130,3,0,128,13,0,134,3,0,128,13,160,198,151,22,0,19,0,0, 13,0,130,3,0,128,13,0,198,3,204,6,150,188,198,151,38,128,15,216,8,168,160,6,160,204,198,151,38,128,15,0, 2,3,0,0,13,0,6,3,0,0,13,0,2,3,232,198,151,38,0,13,0,0,3,196,49,192,32,128,19,0,128,13, 0,199,151,22,0,15,0,130,3,0,128,13,0,134,3,0,128,13,24,199,151,22,0,19,0,0,13,0,130,3,0,128, 13,0,198,3,68,7,150,52,199,151,38,128,15,216,8,168,24,7,160,68,199,151,38,128,15,0,2,3,0,0,13,0, 6,3,0,0,13,0,2,3,96,199,151,38,0,13,210,0,3,0,128,8,104,200,145,4,34,192,42,128,19,124,199,151, 22,0,15,0,128,13,0,130,3,0,128,13,0,134,3,0,128,13,152,199,151,22,0,19,0,0,13,0,130,3,0,128, 13,0,166,3,196,71,150,180,199,151,38,128,15,24,9,168,152,7,160,196,199,151,38,128,15,0,2,3,0,0,13,0, 6,3,0,0,13,0,2,3,224,199,151,38,0,13,0,0,3,4,50,192,32,128,19,0,128,13,248,199,151,22,0,15, 0,130,3,0,128,13,0,134,3,0,128,13,16,200,151,22,0,19,0,0,13,0,130,3,0,128,13,0,166,3,60,72, 150,44,200,151,38,128,15,24,9,168,16,8,160,60,200,151,38,128,15,0,2,3,0,0,13,0,6,3,0,0,13,0, 2,3,88,200,151,38,128,19,0,0,13,0,0,3,104,200,151,22,0,15,112,200,151,22,0,19,120,200,151,0,0,64, 21,0,49,111,8,0,21,0,19,111,10,37,144,200,151,128,0,18,21,0,49,111,8,0,21,0,83,0,2,3,0,0, 13,0,6,3,176,200,151,38,0,13,50,2,3,0,0,13,0,38,3,196,200,151,22,0,15,0,130,3,0,128,13,0, 134,67,0,2,3,0,0,13,0,6,3,0,0,13,232,200,151,38,128,19,0,128,13,0,2,3,0,0,13,0,70,3, 0,201,151,22,0,15,0,130,3,0,128,13,0,134,3,0,128,77,0,2,3,0,0,13,0,6,3,0,0,13,40,201, 151,38,128,19,0,128,13,0,2,3,0,0,13,0,38,3,64,201,151,22,0,15,0,130,3,0,128,13,0,134,3,0, 128,77,133,255,192,97,1,0,96,201,151,144,0,18,0,0,15,27,0,19,0,0,37,30,0,83,120,201,151,128,0,18, 69,254,192,31,32,0,98,0,0,193,63,192,144,201,151,144,0,18,31,32,0,0,0,19,16,128,18,172,201,145,98,0, 0,47,1,0,96,0,18,188,73,145,97,0,0,0,0,1,18,64,10,0,192,2,0,0,2,32,0,17,22,0,0,212, 201,151,32,128,83,220,201,151,128,0,18,18,0,0,19,0,0,188,78,145,5,255,192,244,201,151,143,20,8,15,52,0, 104,74,145,244,41,150,0,2,0,12,202,151,143,20,8,15,52,0,104,74,145,12,42,150,0,6,0,36,202,151,143,28, 8,15,60,0,104,74,145,36,42,150,0,2,0,60,202,151,143,28,8,15,60,0,104,74,145,60,42,150,0,14,0,84, 202,151,143,20,8,15,52,0,104,74,145,84,42,150,100,129,8,44,205,145,112,202,151,143,30,21,0,0,3,31,62,19, 0,128,8,44,205,145,112,106,150,140,202,151,143,30,21,0,0,3,31,56,19,0,128,8,184,204,145,164,202,151,143,26, 21,0,0,3,31,58,19,0,128,8,184,204,145,164,106,150,192,202,151,143,26,21,0,0,3,31,56,19,0,128,8,68, 204,145,216,202,151,143,22,21,0,0,3,31,54,19,0,128,8,68,204,145,216,106,150,244,202,151,143,22,21,0,0,3, 31,40,19,0,128,8,208,203,145,12,203,151,143,10,21,0,0,3,31,42,19,0,128,8,208,203,145,12,107,150,40,203, 151,143,10,21,0,0,3,31,40,19,0,128,8,92,203,145,64,203,151,143,14,21,0,0,3,31,46,19,0,128,8,92, 203,145,64,107,150,92,203,151,7,0,201,159,14,21,0,0,3,31,0,0,193,3,192,98,0,2,0,128,2,132,75,145, 193,3,192,140,203,145,98,0,0,32,0,17,31,20,10,0,0,2,31,84,0,112,43,150,193,3,192,98,0,2,0,128, 2,180,75,145,193,3,192,188,203,145,98,0,0,32,0,17,31,20,10,0,0,2,31,82,0,228,11,160,208,203,151,159, 10,21,7,0,201,0,0,3,31,0,19,193,3,192,98,0,2,0,128,2,248,75,145,193,3,192,0,204,145,98,0,0, 32,0,17,31,28,10,0,0,2,31,92,0,228,43,150,193,3,192,98,0,2,0,128,2,40,76,145,193,3,192,48,204, 145,98,0,0,32,0,17,31,28,10,0,0,2,31,94,0,88,12,160,68,204,151,159,22,21,7,0,201,0,0,3,31, 0,19,193,3,192,98,0,2,0,128,2,108,76,145,193,3,192,116,204,145,98,0,0,32,0,17,31,28,10,0,0,2, 31,92,0,88,44,150,193,3,192,98,0,2,0,128,2,156,76,145,193,3,192,164,204,145,98,0,0,32,0,17,31,28, 10,0,0,2,31,82,0,204,12,160,184,204,151,159,26,21,7,0,201,0,0,3,31,0,19,193,3,192,98,0,2,0, 128,2,224,76,145,193,3,192,232,204,145,98,0,0,32,0,17,31,20,10,0,0,2,31,84,0,204,44,150,193,3,192, 98,0,2,0,128,2,16,77,145,193,3,192,24,205,145,98,0,0,32,0,17,31,20,10,0,0,2,31,86,0,64,13, 160,44,205,151,159,30,21,7,0,201,0,0,3,31,0,19,193,3,192,98,0,2,0,128,2,84,77,145,193,3,192,92, 205,145,98,0,0,32,0,17,31,20,10,0,0,2,31,84,0,64,45,150,193,3,192,98,0,2,0,128,2,132,77,145, 193,3,192,140,205,145,98,0,0,32,0,17,31,20,10,0,0,2,31,10,0,241,30,0,50,20,2,0,42,1,7,0, 193,22,128,8,180,206,145,241,30,0,0,20,2,0,42,1,192,205,151,22,128,8,180,206,145,180,109,150,241,30,0,0, 20,2,0,44,1,220,205,151,22,128,8,180,206,145,241,26,0,0,20,2,0,46,1,244,205,151,22,128,8,180,206,145, 232,109,150,241,26,0,0,20,2,0,44,1,16,206,151,22,128,8,180,206,145,241,22,0,0,28,2,0,42,1,40,206, 151,22,128,8,180,206,145,28,110,150,241,22,0,0,28,2,0,52,1,68,206,151,22,128,8,180,206,145,241,10,0,0, 28,2,0,54,1,92,206,151,22,128,8,180,206,145,80,110,150,241,10,0,0,28,2,0,52,1,120,206,151,22,128,8, 180,206,145,241,14,0,0,20,2,0,58,1,144,206,151,22,128,8,180,206,145,132,110,150,241,14,0,0,20,2,0,0, 1,172,206,151,22,128,8,180,206,151,0,0,64,7,0,209,0,0,64,10,224,223,13,64,192,204,206,151,128,0,18,108, 79,145,0,0,8,32,128,19,0,128,37,4,79,145,232,206,151,128,128,18,47,0,0,66,0,8,0,128,9,36,128,33, 232,14,145,4,207,151,144,128,18,10,2,194,45,128,19,65,128,53,0,128,15,0,0,8,92,79,148,20,0,0,38,128, 19,253,0,8,0,128,53,0,128,15,92,79,148,20,0,0,64,207,151,38,128,19,253,0,8,0,128,53,20,128,15,92, 79,148,64,15,160,92,207,151,38,0,0,100,207,151,0,0,64,7,76,196,16,0,83,7,0,193,120,207,151,128,0,18, 31,0,0,193,63,192,136,207,151,128,0,18,0,0,15,0,0,1,31,32,0,193,63,192,160,207,151,128,0,18,31,0, 0,193,63,192,176,207,151,128,0,18,0,0,15,0,0,1,31,66,0,193,63,192,200,207,151,128,0,18,31,0,0,193, 63,192,216,207,151,128,0,18,0,0,15,0,2,1,240,34,5,194,63,192,240,207,151,128,128,18,47,0,0,194,63,192, 0,208,151,144,128,18,0,128,15,0,130,1,240,128,7,22,0,0,0,0,15,28,208,151,22,0,0,44,144,146,7,0, 209,44,208,151,38,0,0,0,128,15,56,208,151,38,0,0,64,208,151,0,0,64,7,0,193,76,208,151,128,0,18,31, 0,0,193,63,192,194,63,192,96,208,151,128,0,18,0,0,15,0,0,1,31,32,0,193,63,192,120,208,151,128,0,18, 31,0,0,193,63,192,136,208,151,128,0,18,0,0,15,0,0,1,31,64,0,241,2,0,160,208,151,128,128,18,47,0, 0,194,63,192,176,208,151,128,128,18,0,128,15,0,128,1,32,32,20,194,63,192,200,208,151,128,128,18,47,0,0,194, 63,192,216,208,151,144,128,18,0,128,15,0,128,1,47,2,0,242,2,0,22,0,0,240,128,6,0,0,15,252,208,151, 22,0,0,12,145,146,7,0,209,12,209,151,38,0,0,0,128,15,24,209,151,38,0,0,32,209,151,0,0,64,207,255, 223,44,209,151,128,0,18,3,0,196,194,63,192,60,209,151,128,128,18,0,128,15,16,128,17,193,63,192,80,209,151,128, 0,18,42,0,0,194,63,192,96,209,151,144,128,18,0,128,15,16,128,17,45,128,19,33,128,49,0,128,11,176,209,144, 38,128,15,132,209,151,38,0,0,0,0,33,0,0,11,240,0,2,152,209,151,22,0,15,160,209,151,22,0,0,168,209, 151,0,0,64,38,128,15,180,209,151,38,0,0,0,0,33,0,0,11,48,0,17,200,209,151,22,0,15,208,209,151,22, 0,0,216,209,151,0,0,64,207,255,223,228,209,151,128,0,18,3,0,196,194,63,192,244,209,151,128,128,18,0,128,15, 16,128,17,193,63,192,8,210,151,128,0,18,42,0,0,194,63,192,24,210,151,144,128,18,0,128,15,16,128,17,45,128, 19,33,128,49,0,128,11,104,210,144,38,128,15,60,210,151,38,0,0,0,0,33,0,0,11,240,0,2,80,210,151,22, 0,15,88,210,151,22,0,0,96,210,151,0,0,64,38,128,15,108,210,151,38,0,0,0,0,33,0,0,11,48,0,17, 128,210,151,22,0,15,136,210,151,22,0,0,144,210,151,0,0,64,7,0,193,3,0,192,160,210,151,128,0,18,63,32, 0,63,32,0,31,0,0,193,63,192,184,210,151,128,0,18,0,0,15,0,0,1,31,32,0,193,63,192,208,210,151,128, 0,18,31,0,0,74,0,192,205,255,255,193,63,192,232,210,151,128,0,18,0,0,15,0,0,1,31,32,0,194,63,192, 0,211,151,128,128,18,63,32,0,63,32,0,47,0,0,194,63,192,24,211,151,128,128,18,0,128,15,0,128,1,47,32, 0,193,63,192,48,211,151,128,0,18,31,0,0,68,211,145,67,0,192,193,63,192,72,211,151,144,0,18,7,0,201,0, 0,15,0,0,1,31,0,0,48,0,17,112,19,145,7,0,209,0,0,64,132,4,192,15,0,192,196,4,192,207,7,192, 132,0,192,241,32,0,242,64,12,31,160,12,47,32,0,241,32,0,242,64,12,31,160,12,47,32,0,0,32,4,0,128, 6,188,147,144,4,0,192,241,32,0,208,19,160,4,1,192,31,32,0,47,96,0,65,0,192,0,32,1,32,128,19,242, 64,12,31,160,12,47,34,0,241,0,0,0,0,9,31,32,0,0,66,4,132,83,148,241,32,0,242,64,12,31,160,12, 47,32,0,241,32,0,242,64,12,31,160,12,47,32,0,0,32,4,0,128,6,56,212,144,4,1,192,31,32,0,47,96, 0,65,0,192,0,0,1,31,0,0,4,0,192,246,0,0,7,0,193,241,32,0,242,32,15,76,212,151,22,0,0,84, 212,151,38,0,0,4,1,192,241,160,15,100,212,151,38,0,0,242,0,0,112,212,151,22,0,15,120,212,151,22,0,0, 128,212,151,38,128,15,136,212,151,38,0,0,144,212,151,0,0,64,7,0,193,3,0,192,160,212,151,128,0,18,63,32, 0,63,32,0,31,0,0,193,63,192,184,212,151,128,0,18,0,0,15,0,0,1,31,32,0,193,63,192,208,212,151,128, 0,18,31,0,0,74,0,192,205,255,255,193,63,192,232,212,151,128,0,18,0,0,15,0,0,1,31,32,0,194,63,192, 0,213,151,128,128,18,63,32,0,63,32,0,47,0,0,194,63,192,24,213,151,128,128,18,0,128,15,0,128,1,47,32, 0,193,63,192,48,213,151,128,0,18,31,0,0,68,213,145,67,0,192,193,63,192,72,213,151,144,0,18,7,0,201,0, 0,15,0,0,1,31,0,0,48,0,17,112,21,145,7,0,209,0,0,64,3,0,192,196,0,192,1,0,224,0,0,2, 172,21,148,67,0,224,241,64,0,242,32,0,0,0,10,0,128,10,0,128,9,164,149,144,0,0,9,31,64,0,47,0, 0,196,1,192,1,0,224,0,0,2,232,21,148,48,0,19,19,0,0,241,64,0,242,32,0,0,0,10,0,128,10,0, 128,9,224,149,144,0,0,9,31,64,0,47,0,0,132,0,192,241,32,0,242,64,12,31,160,12,47,66,0,15,0,192, 196,4,192,143,7,192,132,0,192,241,32,0,242,64,12,31,160,12,47,32,0,241,32,0,242,64,12,31,160,12,47,32, 0,0,32,4,0,128,6,68,150,148,4,0,192,241,32,0,88,22,160,4,1,192,31,32,0,47,96,0,65,0,192,0, 32,1,32,128,19,242,64,12,31,160,12,47,34,0,241,0,0,0,0,9,31,32,0,0,66,4,12,86,148,241,32,0, 242,64,12,31,160,12,47,32,0,241,32,0,242,64,12,31,160,12,47,32,0,0,32,4,0,128,6,192,214,148,4,1, 192,31,32,0,47,96,0,65,0,192,0,0,1,31,0,0,49,0,0,0,0,50,244,86,145,68,0,192,241,64,0,242, 32,0,0,0,10,0,128,10,0,128,9,236,150,144,0,0,9,31,64,0,47,0,0,49,0,0,208,0,18,40,87,145, 68,1,192,241,64,0,242,32,0,0,0,10,0,128,10,0,128,9,32,151,144,0,0,9,31,64,0,47,0,0,4,0, 192,246,0,0,7,0,193,241,32,0,242,32,15,60,215,151,22,0,0,68,215,151,38,0,0,4,1,192,241,160,15,84, 215,151,38,0,0,242,0,0,96,215,151,22,0,15,104,215,151,22,0,0,112,215,151,38,128,15,120,215,151,38,0,0, 128,215,151,0,0,64,7,0,192,0,128,11,160,215,144,0,128,11,84,216,144,192,23,160,0,128,11,184,215,144,52,24, 160,172,215,151,7,0,193,0,0,64,7,0,193,0,0,64,66,85,213,193,63,192,20,128,10,47,0,8,200,23,148,193, 63,192,216,215,151,20,128,10,46,128,3,4,152,145,2,0,8,220,23,148,0,128,10,196,215,148,6,0,192,252,215,151, 172,23,160,1,0,196,0,0,18,64,0,17,14,64,196,19,128,11,0,0,21,20,152,144,1,0,248,48,0,17,22,0, 0,44,216,151,172,23,160,2,0,193,1,0,192,21,0,9,64,216,151,102,128,8,60,152,145,76,216,151,172,23,160,84, 216,151,6,64,192,92,216,151,172,23,160,10,224,223,13,64,192,108,216,151,128,0,18,0,0,15,19,0,15,0,0,9, 0,0,11,18,0,33,136,216,151,128,32,18,0,0,9,31,64,11,31,0,19,0,2,33,0,128,8,164,216,151,128,0, 18,31,0,0,65,128,8,0,0,9,20,0,33,164,152,145,192,216,151,144,0,18,7,0,209,31,0,19,50,0,0,4, 1,192,31,64,0,31,64,0,31,32,0,220,26,168,132,0,192,31,32,0,242,0,0,31,32,0,241,0,0,0,128,12, 0,0,12,0,128,12,0,0,12,0,128,12,0,0,12,0,128,12,0,0,12,0,128,12,0,0,12,0,128,12,0,0, 12,31,32,19,47,32,0,31,32,0,31,32,0,15,4,192,0,32,0,15,30,192,4,0,192,242,0,0,4,30,192,31, 0,0,65,128,8,0,0,9,20,0,19,84,153,145,13,2,194,68,0,192,241,0,0,0,0,8,31,0,0,160,90,145, 4,2,192,243,0,0,52,0,0,250,0,0,132,0,192,241,32,0,0,0,3,176,89,145,1,192,255,0,0,50,0,0, 15,180,25,160,209,0,0,196,0,192,2,32,192,0,128,3,232,217,145,26,0,0,1,60,192,208,0,18,68,2,192,243, 0,0,52,0,0,194,3,192,0,128,2,8,26,160,26,0,0,193,3,192,208,0,18,68,2,192,243,0,0,52,0,0, 2,60,192,0,128,2,32,0,17,31,0,0,196,0,192,1,32,192,0,0,3,31,0,0,52,26,145,68,2,192,241,0, 0,0,0,9,31,0,0,196,1,192,241,64,0,242,64,0,35,0,0,0,64,5,0,160,7,0,32,0,47,32,0,31, 0,0,48,128,20,52,218,145,0,128,11,4,2,192,241,0,0,32,0,21,31,0,0,108,153,144,132,0,192,1,32,192, 0,0,3,31,0,0,108,25,145,4,2,192,241,0,0,0,0,9,31,0,0,108,25,160,4,0,192,241,0,0,4,30, 192,246,0,0,7,0,193,0,32,8,212,90,145,188,218,151,246,0,0,66,0,8,0,128,9,36,0,0,188,26,145,212, 218,151,0,0,64,131,4,192,241,0,0,0,0,12,31,0,0,4,27,144,16,32,19,241,0,0,0,0,13,0,0,11, 31,64,19,0,64,0,241,128,12,0,0,12,31,64,0,32,128,17,0,32,4,48,91,144,31,32,0,65,0,192,0,0, 1,31,64,0,49,0,0,0,0,8,19,32,0,224,26,145,0,64,64,7,0,193,0,0,64,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1, 1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1, 3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3, 1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3, 3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1, 1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1, 3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3, 1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3, 3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1, 1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1, 3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3, 1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3, 3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1,3,0,2,0,3,1,2,1, 1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1,1,0,0,0,1,1,0,1, 3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3,3,2,2,2,3,3,2,3, 1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3,1,2,0,2,1,3,0,3, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 3,0,3,0,3,0,3,0,2,0,2,0,2,0,2,0,3,1,3,1,3,1,3,1,2,1,2,1,2,1,2,1, 3,0,3,0,3,0,3,0,2,0,2,0,2,0,2,0,3,1,3,1,3,1,3,1,2,1,2,1,2,1,2,1, 3,0,3,0,3,0,3,0,2,0,2,0,2,0,2,0,3,1,3,1,3,1,3,1,2,1,2,1,2,1,2,1, 3,0,3,0,3,0,3,0,2,0,2,0,2,0,2,0,3,1,3,1,3,1,3,1,2,1,2,1,2,1,2,1, 1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1, 1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1, 3,2,3,2,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,3,2,3,2,3, 3,2,3,2,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,3,2,3,2,3, 3,2,3,2,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,3,2,3,2,3, 3,2,3,2,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,3,2,3,2,3, 1,2,1,2,1,2,1,2,0,2,0,2,0,2,0,2,1,3,1,3,1,3,1,3,0,3,0,3,0,3,0,3, 1,2,1,2,1,2,1,2,0,2,0,2,0,2,0,2,1,3,1,3,1,3,1,3,0,3,0,3,0,3,0,3, 1,2,1,2,1,2,1,2,0,2,0,2,0,2,0,2,1,3,1,3,1,3,1,3,0,3,0,3,0,3,0,3, 1,2,1,2,1,2,1,2,0,2,0,2,0,2,0,2,1,3,1,3,1,3,1,3,0,3,0,3,0,3,0,3, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 0,0,0,0,0,0,0,0,16,16,0,0,143,0,129,127,240,0,15,0,128,127,240,0,80,0,128,8,15,0,255,0, }; const unsigned char DSP3[8192] = { 0,192,151,4,0,192,7,0,193,6,32,192,2,48,192,20,192,151,129,128,18,16,128,145,7,0,192,18,0,11,28,72, 144,184,72,145,0,0,11,124,70,144,0,0,11,148,73,144,0,0,11,84,65,144,0,0,11,220,71,144,80,0,160,0, 0,11,208,64,144,0,0,11,236,64,144,66,85,213,193,63,192,20,128,10,47,0,8,108,0,148,193,63,192,124,192,151, 20,128,10,46,128,3,164,128,145,2,0,8,128,0,148,0,128,10,104,192,148,6,0,192,0,0,160,1,0,196,0,0, 18,64,0,17,14,64,196,19,128,11,0,0,21,180,128,144,1,0,248,48,0,17,22,0,0,0,0,160,2,0,193,1, 0,192,21,0,9,220,192,151,102,128,8,216,128,145,0,0,160,236,192,151,6,192,192,0,0,160,32,128,19,69,0,0, 68,3,192,16,0,19,47,32,0,31,2,0,241,192,17,242,32,12,31,2,0,56,1,144,7,0,208,22,2,0,40,193, 151,79,0,192,146,2,0,7,0,192,241,194,12,47,2,12,242,32,0,31,192,8,47,34,0,16,129,148,84,0,64,0, 0,11,0,68,144,6,32,192,132,7,192,15,0,224,104,193,151,129,32,0,13,16,192,10,56,192,224,0,21,30,0,0, 128,193,151,159,0,0,66,0,192,252,0,168,0,0,8,204,65,145,168,1,148,2,2,192,252,0,168,212,1,160,0,0, 8,184,1,145,248,0,168,200,1,160,194,0,192,252,0,168,0,0,9,0,0,9,0,0,9,0,0,9,48,0,21,19, 128,17,212,0,15,242,0,11,0,128,12,47,128,17,226,0,12,0,128,11,8,194,144,36,0,0,226,0,0,31,128,9, 45,0,0,44,2,160,36,0,15,226,0,1,31,128,9,193,3,192,45,0,18,44,2,145,209,0,0,0,0,9,26,0, 0,0,128,20,136,129,145,194,3,192,224,128,18,96,66,145,1,4,192,32,0,20,212,0,0,242,0,0,0,128,12,0, 0,8,80,2,145,47,0,0,4,0,192,248,0,168,0,0,9,30,0,21,16,0,21,19,2,19,31,2,0,130,0,192, 252,0,168,2,4,192,31,130,21,37,0,0,98,0,0,49,160,5,47,2,8,19,0,0,124,2,145,10,56,192,205,63, 192,2,0,0,196,7,192,243,0,0,252,0,168,20,0,0,242,2,0,252,0,168,0,0,5,69,6,192,18,0,0,96, 1,18,96,1,21,21,128,11,1,8,192,32,0,21,4,195,144,20,128,11,241,128,11,0,128,11,208,128,21,36,0,15, 24,3,160,20,128,11,241,128,11,0,128,11,208,128,21,36,0,0,224,0,18,98,0,0,0,128,2,80,195,145,130,0, 224,16,128,21,38,0,0,52,195,151,248,0,168,2,2,192,16,0,21,16,0,21,16,128,21,252,0,168,22,0,0,49, 0,0,2,0,8,19,0,0,96,195,151,184,2,145,4,0,160,108,195,151,129,0,0,242,0,11,0,128,12,47,32,0, 242,0,11,0,128,12,47,32,0,242,0,11,0,128,12,47,32,0,242,0,11,0,128,12,47,32,0,242,0,11,0,128, 12,47,32,0,242,0,11,0,128,12,47,32,0,242,0,11,0,128,12,47,32,0,242,0,11,0,128,12,47,96,64,212, 195,151,242,32,11,0,128,12,224,128,18,46,0,0,242,32,11,0,128,12,224,128,18,0,128,15,0,128,17,38,0,64, 0,0,11,108,68,144,205,63,192,12,196,151,131,0,0,7,0,193,6,0,192,108,3,168,108,3,168,108,3,168,108,3, 168,108,3,168,108,3,168,108,3,168,56,196,151,129,0,0,7,0,192,216,3,168,212,3,168,212,3,168,212,3,168,84, 196,151,49,0,0,0,0,8,19,96,0,20,4,145,0,0,160,6,32,192,132,7,192,15,0,224,120,196,151,129,32,0, 13,16,192,10,56,192,224,0,21,30,0,0,144,196,151,159,0,0,66,0,192,252,0,168,0,0,8,220,68,145,184,4, 148,2,2,192,252,0,168,228,4,160,0,0,8,200,4,145,248,0,168,216,4,160,194,0,192,252,0,168,0,0,9,0, 0,9,0,0,9,0,0,9,48,0,21,19,128,17,212,0,15,242,0,11,0,128,12,47,128,17,226,0,12,0,128,11, 24,197,144,36,0,0,226,0,0,31,128,9,45,0,0,60,5,160,36,0,15,226,0,1,31,128,9,193,3,192,45,0, 18,60,5,145,209,0,0,0,0,9,26,0,0,0,128,20,152,132,145,194,3,192,224,128,18,112,69,145,1,4,192,32, 0,20,212,0,0,242,0,0,0,128,12,0,0,8,96,5,145,47,0,0,4,0,192,248,0,168,0,0,9,30,0,21, 16,0,21,19,2,19,31,2,0,130,0,192,252,0,168,2,4,192,31,130,21,37,0,0,98,0,0,49,160,5,47,2, 8,19,0,0,140,5,145,10,56,192,205,63,192,2,0,0,196,7,192,243,0,0,252,0,168,20,0,0,242,2,0,252, 0,168,0,0,5,69,6,192,18,0,0,96,1,18,96,1,21,21,128,11,1,8,192,32,0,21,20,198,144,20,128,11, 241,128,11,0,128,11,208,128,21,36,0,15,40,6,160,20,128,11,241,128,11,0,128,11,208,128,21,36,0,0,224,0, 18,98,0,0,0,128,2,96,198,145,130,0,224,16,128,21,38,0,0,68,198,151,248,0,168,194,1,192,16,0,21,16, 0,21,16,128,21,252,0,168,22,0,0,49,0,0,2,0,8,19,0,0,112,198,151,200,5,145,4,0,160,0,0,11, 192,78,144,7,0,192,196,30,192,140,198,151,138,0,0,241,16,0,31,48,0,241,16,0,31,48,0,241,16,0,31,48, 0,241,16,0,31,48,0,180,198,151,141,0,0,188,198,151,129,0,0,18,0,12,208,6,144,4,0,160,193,62,192,0, 128,11,16,128,21,36,0,0,35,0,0,244,0,0,7,0,192,236,198,151,129,16,0,208,0,20,31,0,0,30,0,0, 44,71,148,5,7,192,96,1,20,84,71,144,241,0,0,96,1,20,40,71,144,241,0,0,96,1,20,31,0,0,80,7, 160,197,7,192,96,1,21,84,71,144,241,0,0,96,1,21,80,71,144,241,0,0,96,1,21,31,0,0,7,0,208,84, 199,151,129,0,0,224,32,20,31,0,0,120,71,148,2,72,192,32,0,20,136,71,144,132,7,160,2,16,192,32,0,21, 136,71,144,7,0,208,162,64,0,241,128,12,38,0,0,148,199,151,172,135,148,22,0,0,160,199,151,6,0,224,188,6, 160,6,0,0,15,32,0,180,199,151,246,80,0,188,199,151,6,0,224,196,199,151,143,32,0,65,0,0,52,0,9,31, 0,0,188,6,160,7,0,192,196,30,192,2,32,192,47,32,0,236,199,151,129,128,21,0,0,12,232,7,144,4,0,160, 197,43,192,29,0,19,98,1,33,0,128,50,96,0,18,32,0,17,0,0,79,0,0,11,188,77,144,69,43,192,4,0, 192,66,0,0,48,200,151,129,128,17,96,129,21,96,129,18,96,0,21,96,128,21,21,0,0,99,0,0,37,0,0,110, 0,0,88,200,151,129,0,0,58,0,11,31,32,0,0,8,168,31,32,0,112,200,151,145,0,0,10,0,11,31,64,0, 0,8,168,0,32,5,22,0,0,58,0,0,241,64,0,0,8,168,31,64,0,10,0,0,241,32,0,0,8,168,0,0, 4,172,200,151,22,0,0,0,0,160,184,200,151,129,128,17,0,0,11,26,0,0,200,200,151,145,0,0,0,0,11,29, 0,19,18,0,49,0,0,12,22,128,33,228,200,151,0,128,12,38,0,0,0,0,160,20,0,0,244,0,9,63,0,64, 99,1,0,100,0,0,21,0,0,244,0,0,241,32,0,78,16,12,144,73,144,253,64,0,250,0,0,2,0,192,52,0, 0,244,0,0,241,0,0,0,0,12,124,73,144,209,16,0,0,32,4,76,9,148,0,0,10,96,0,20,104,9,144,225, 0,0,0,0,4,100,9,148,0,0,10,96,0,20,0,144,12,65,0,0,0,0,9,20,0,19,48,9,160,4,0,0, 65,0,0,47,0,9,20,0,19,16,9,160,0,0,64,0,0,11,240,73,144,7,0,208,193,62,192,195,255,255,244,8, 168,244,8,168,244,8,168,244,8,168,197,9,192,129,10,192,0,9,168,69,9,192,129,10,192,0,9,168,197,8,192,129, 10,192,0,9,168,69,8,192,65,10,192,0,9,168,7,0,192,4,0,160,0,0,11,160,74,144,193,9,192,205,255,199, 0,202,151,144,0,20,21,0,0,100,1,0,241,16,0,254,0,20,36,10,145,6,0,192,0,0,160,100,0,0,243,0, 0,5,10,192,16,0,19,52,0,17,96,0,21,19,0,19,242,32,0,32,128,17,28,202,148,240,0,17,52,74,145,224, 128,18,38,0,0,10,0,0,96,202,151,210,0,0,96,128,20,42,0,11,124,74,144,148,74,145,100,10,160,212,0,0, 226,0,0,0,128,2,38,0,0,140,202,151,100,10,160,22,0,0,152,202,151,52,10,160,206,255,255,205,30,192,168,202, 151,129,128,17,0,0,11,224,0,21,20,0,0,243,0,0,192,202,151,141,0,0,200,202,151,154,0,0,52,0,0,241, 0,0,226,16,12,40,75,144,20,11,148,209,160,4,240,138,148,0,128,10,0,0,4,252,10,148,0,0,10,32,0,21, 18,0,0,0,0,20,20,11,144,46,80,0,69,0,0,49,0,0,0,0,9,0,0,9,19,0,0,208,10,160,1,0, 0,84,0,12,60,75,148,193,255,199,0,0,2,22,0,0,64,203,151,6,0,0,0,0,160,4,61,192,79,0,192,4, 60,192,111,33,0,111,0,0,196,60,192,79,236,192,4,61,192,138,2,192,242,32,0,253,96,0,0,160,5,241,160,53, 37,0,0,13,0,194,194,3,192,96,0,21,152,11,148,0,0,5,26,128,18,37,0,0,1,51,192,98,0,37,20,0, 0,209,128,2,84,141,145,0,0,11,3,229,192,5,230,192,204,11,144,67,227,192,69,228,192,196,61,192,47,32,0,63, 32,0,31,32,0,20,0,0,97,1,0,98,1,2,84,77,145,10,1,192,29,0,19,67,128,2,100,0,49,31,64,0, 47,34,15,31,192,15,47,64,0,132,62,192,143,1,192,196,60,192,138,2,192,245,32,0,97,33,0,98,65,5,29,224, 5,0,160,5,241,32,0,0,160,53,95,64,0,37,0,0,96,0,21,69,230,192,80,12,148,0,0,5,30,0,11,92, 12,144,133,228,192,10,1,192,100,1,0,243,0,0,20,0,0,97,1,0,50,0,2,16,77,145,29,0,0,97,129,53, 45,0,2,168,204,144,16,128,20,172,140,144,0,1,0,242,1,0,96,129,18,224,128,17,47,0,0,16,13,160,194,255, 255,100,1,0,96,129,20,16,205,144,0,64,5,16,77,144,19,0,4,16,13,144,13,0,194,194,3,192,10,128,18,78, 0,0,37,0,0,1,51,192,98,0,37,20,0,0,49,128,2,16,141,145,4,0,0,31,2,15,31,0,0,196,61,192, 31,0,0,132,62,192,79,1,192,20,12,160,132,62,192,241,0,0,0,0,8,31,0,0,20,12,145,196,61,192,0,32, 1,84,77,145,245,32,0,241,0,0,98,1,0,100,0,0,243,0,0,20,0,0,0,128,2,48,128,17,47,0,0,68, 61,192,242,64,0,241,128,20,0,0,9,31,160,9,96,139,145,0,0,64,132,61,192,31,0,0,197,226,192,76,11,168, 69,226,192,76,11,168,197,225,192,76,11,168,69,225,192,76,11,168,197,224,192,76,11,168,69,224,192,76,11,168,241,32, 0,242,64,9,31,128,20,120,141,145,0,0,64,0,0,11,252,77,144,196,62,192,193,63,192,250,64,0,19,0,0,212, 205,151,130,0,18,31,32,21,0,128,15,48,160,18,45,0,0,47,0,53,0,0,11,22,0,0,0,0,160,0,0,11, 84,64,144,7,0,193,195,63,192,194,236,192,196,62,192,49,0,0,24,206,151,128,0,18,16,128,21,16,128,21,37,0, 0,250,64,0,49,0,0,7,0,192,56,206,151,130,0,18,31,160,15,48,160,18,96,0,18,47,32,11,97,1,0,96, 129,23,45,128,4,104,142,144,226,0,0,116,14,160,116,142,148,0,128,5,0,128,5,45,128,15,132,62,192,0,32,5, 19,0,4,160,78,144,148,14,148,0,0,5,0,0,5,19,128,17,38,0,0,168,14,160,49,128,17,38,0,0,168,206, 151,16,0,21,0,0,53,0,0,11,22,0,0,0,0,160,0,0,11,64,83,144,196,62,192,193,63,192,19,0,0,212, 206,151,130,0,18,31,160,15,48,160,18,47,0,0,4,0,160,132,60,192,245,0,0,195,63,192,49,0,0,2,0,18, 196,62,192,250,64,0,132,62,192,31,160,15,48,160,18,96,0,18,47,32,11,97,1,0,96,128,23,45,128,4,52,143, 144,226,0,0,64,15,160,64,143,148,0,128,5,0,128,5,45,64,0,47,128,15,132,62,192,0,32,5,19,0,4,108, 79,144,100,15,148,0,0,5,0,0,5,19,192,17,112,15,160,49,192,17,31,0,21,46,0,53,0,0,11,19,0,64, 196,60,192,245,0,0,196,62,192,250,64,0,241,32,0,96,32,18,242,32,11,97,1,0,96,128,23,45,128,4,180,143, 144,226,0,0,192,15,160,192,143,148,0,128,5,0,128,5,45,64,0,47,0,0,132,62,192,0,32,5,18,64,4,236, 15,144,47,0,0,32,128,21,0,128,53,0,128,11,35,0,64,252,15,148,0,32,0,0,0,5,0,64,5,31,0,0, 16,0,21,0,0,53,0,0,11,19,0,64,13,0,194,60,16,148,193,3,192,58,0,18,21,0,0,1,51,192,0,0, 37,20,0,0,97,0,0,0,0,1,31,0,64,193,3,192,58,0,18,21,0,0,1,51,192,0,0,37,20,0,0,97, 0,0,0,0,10,0,0,2,31,0,64,138,2,192,132,63,192,66,44,192,0,160,5,253,0,0,0,128,53,37,0,0, 132,61,192,242,32,0,96,128,21,47,0,0,132,63,192,1,0,192,0,0,1,168,16,145,236,14,168,172,16,160,128,15, 168,7,0,192,54,0,0,180,208,151,6,0,192,7,0,193,4,62,192,63,64,0,242,0,0,35,128,11,208,208,151,129, 0,0,47,0,15,16,209,144,16,16,168,196,61,192,244,0,0,193,63,192,2,62,254,244,208,151,144,0,18,0,0,15, 8,17,148,47,0,64,32,0,17,31,0,64,16,16,168,196,61,192,244,0,0,193,63,192,32,209,151,144,0,18,18,0, 15,52,17,148,0,0,64,0,128,1,47,0,64,2,243,192,132,61,192,16,128,21,37,0,0,111,0,0,2,58,192,16, 128,21,36,0,0,254,0,0,132,60,192,194,236,192,16,128,21,16,128,21,47,32,9,0,0,9,194,236,192,16,128,21, 16,128,21,47,128,19,4,61,192,0,128,1,196,63,192,47,0,0,176,209,145,0,128,9,0,128,9,47,0,0,236,14, 168,236,14,168,132,63,192,15,0,192,100,16,168,132,63,192,241,32,0,242,64,9,31,128,9,33,160,4,184,145,145,31, 0,0,68,61,192,0,0,4,176,17,145,0,0,64,132,63,192,1,0,192,0,0,1,0,18,145,236,14,168,4,18,160, 128,15,168,7,0,192,138,2,192,132,63,192,66,44,192,54,0,0,0,160,5,253,0,0,0,128,53,37,0,0,132,61, 192,242,32,0,96,128,21,0,128,11,36,0,0,242,0,0,64,210,151,193,7,192,7,0,193,84,210,144,0,128,15,0, 128,11,0,128,11,0,128,11,16,128,18,32,0,20,112,18,145,194,255,255,38,0,0,116,210,151,0,0,64,2,243,192, 132,61,192,16,128,21,37,0,0,111,0,0,2,58,192,16,128,21,36,0,0,254,0,0,68,62,192,47,0,0,132,60, 192,194,236,192,16,128,21,16,128,21,47,32,9,0,0,9,194,236,192,16,128,21,16,128,21,47,128,19,4,61,192,0, 128,1,196,63,192,47,0,0,132,63,192,15,0,192,232,17,168,132,63,192,241,32,0,242,64,9,31,128,9,33,160,4, 232,146,145,31,0,0,68,61,192,0,0,4,224,18,145,68,62,192,244,0,0,15,0,64,195,63,192,49,0,0,40,211, 151,146,0,18,4,61,192,31,160,15,48,128,18,47,0,64,0,0,11,216,86,144,32,19,168,1,0,192,60,17,168,65, 0,192,60,17,168,129,0,192,60,17,168,193,0,192,60,17,168,1,1,192,60,17,168,65,1,192,60,17,168,7,0,192, 198,255,255,132,211,151,132,60,192,15,102,192,4,61,192,1,0,192,0,0,1,184,83,145,68,61,192,242,0,0,31,128, 8,33,0,0,112,13,168,28,20,160,130,226,192,131,1,192,10,1,192,37,128,17,97,128,8,0,0,11,20,0,0,5, 230,192,97,129,8,0,1,2,29,1,0,248,83,145,241,1,0,96,0,18,0,0,49,31,0,0,49,0,0,0,0,8, 19,0,0,196,19,145,68,61,192,242,0,9,31,128,8,33,0,0,112,13,168,7,0,208,6,0,192,32,19,168,1,0, 192,124,18,168,65,0,192,124,18,168,129,0,192,124,18,168,193,0,192,124,18,168,1,1,192,124,18,168,65,1,192,124, 18,168,7,0,192,198,255,255,0,0,160,68,61,192,241,64,0,0,0,9,31,0,0,4,60,192,111,33,0,111,0,0, 196,60,192,79,236,192,4,61,192,138,2,192,242,32,0,253,96,0,0,160,5,241,160,53,37,0,0,13,0,194,194,3, 192,96,0,21,184,20,148,0,0,5,26,128,18,37,0,0,1,51,192,98,0,37,20,0,0,209,128,2,116,150,145,0, 0,11,3,229,192,5,230,192,236,20,144,67,227,192,69,228,192,196,61,192,47,32,0,63,32,0,31,32,0,20,0,0, 97,1,0,98,1,2,116,86,145,10,1,192,29,0,19,67,128,2,100,0,49,31,64,0,47,34,15,31,192,15,47,64, 0,132,62,192,143,1,192,196,60,192,138,2,192,245,32,0,97,33,0,98,65,5,29,224,5,0,160,5,241,32,0,0, 160,53,95,64,0,37,0,0,96,0,21,69,230,192,112,21,148,0,0,5,30,0,11,124,21,144,133,228,192,10,1,192, 100,1,0,243,0,0,20,0,0,97,1,0,50,0,2,48,86,145,29,0,0,97,129,53,45,0,2,200,213,144,16,128, 20,204,149,144,0,1,0,242,1,0,96,129,18,224,128,17,47,0,0,48,22,160,194,255,255,100,1,0,96,129,20,48, 214,144,0,64,5,48,86,144,19,0,4,48,22,144,13,0,194,194,3,192,10,128,18,78,0,0,37,0,0,1,51,192, 98,0,37,20,0,0,49,128,2,48,150,145,4,0,0,31,2,15,31,0,0,196,61,192,31,0,0,132,62,192,79,1, 192,52,21,160,132,62,192,241,0,0,0,0,8,31,0,0,52,21,145,196,61,192,0,32,1,116,86,145,245,32,0,241, 0,0,98,1,0,100,0,0,243,0,0,20,0,0,0,128,2,48,128,17,47,0,0,4,61,192,241,0,0,0,0,8, 31,32,0,128,20,145,0,0,64,132,61,192,31,0,0,69,224,192,100,20,168,197,224,192,100,20,168,69,225,192,100,20, 168,197,225,192,100,20,168,69,226,192,100,20,168,197,226,192,100,20,168,241,32,0,242,64,9,31,128,20,148,150,145,0, 0,64,0,0,11,184,87,144,32,19,168,1,0,192,60,17,168,65,0,192,60,17,168,129,0,192,60,17,168,193,0,192, 60,17,168,1,1,192,60,17,168,65,1,192,60,17,168,7,0,192,198,255,255,28,215,151,132,60,192,15,102,192,4,61, 192,1,0,192,0,0,1,80,87,145,68,61,192,242,0,0,31,128,8,33,0,0,140,22,168,28,20,160,130,226,192,131, 1,192,10,1,192,37,128,17,97,128,8,0,0,11,20,0,0,5,230,192,97,129,8,0,1,2,29,1,0,144,87,145, 241,1,0,96,0,18,0,0,49,31,0,0,49,0,0,0,0,8,19,0,0,92,23,145,68,61,192,242,0,9,31,128, 8,33,0,0,140,22,168,28,20,160,196,62,192,250,0,0,4,58,192,195,63,192,193,63,192,204,215,151,142,0,0,2, 0,18,16,0,21,0,128,15,48,128,18,45,0,0,0,0,53,0,0,11,22,0,0,244,215,151,15,32,0,15,32,0, 15,32,0,15,32,0,15,32,0,15,0,0,4,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,128,0,64,0,32,0,16,0,8,0,4,0,2,0,1,128,0,64,0,32,0,16,0,8,0,4,0,2,0,1,0, 2,0,4,0,8,0,16,0,32,0,64,0,128,0,0,1,0,0,15,0,0,4,0,2,64,1,0,4,0,2,64,0, 125,0,126,0,126,0,123,0,124,0,125,0,123,0,124,0,2,0,32,0,48,0,0,0,13,0,25,0,38,0,50,0, 62,0,74,0,86,0,98,0,109,0,121,0,132,0,142,0,152,0,162,0,172,0,181,0,190,0,198,0,206,0,213,0, 220,0,226,0,231,0,236,0,241,0,245,0,248,0,251,0,253,0,255,0,0,1,0,1,0,1,255,0,253,0,251,0, 248,0,245,0,241,0,237,0,231,0,226,0,220,0,213,0,206,0,198,0,190,0,181,0,172,0,162,0,153,0,142,0, 132,0,121,0,110,0,98,0,86,0,74,0,62,0,50,0,38,0,25,0,13,0,0,0,243,255,231,255,219,255,206,255, 194,255,182,255,170,255,158,255,147,255,135,255,125,255,114,255,104,255,94,255,84,255,75,255,66,255,58,255,50,255,43,255, 37,255,30,255,25,255,20,255,15,255,11,255,8,255,5,255,3,255,1,255,0,255,0,255,0,255,1,255,3,255,5,255, 8,255,11,255,15,255,19,255,24,255,30,255,36,255,43,255,50,255,58,255,66,255,75,255,84,255,93,255,103,255,114,255, 124,255,135,255,146,255,158,255,169,255,181,255,194,255,206,255,218,255,231,255,243,255,43,0,127,0,32,0,255,0,0,255, 190,255,0,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,193,255,1,0,2,0,69,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,197,255,3,0,4,0,5,0,71,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,202,255,6,0,7,0,8,0, 9,0,74,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 208,255,10,0,11,0,12,0,13,0,14,0,78,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,215,255,15,0,16,0,17,0,18,0,19,0,20,0,83,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,255,21,0,22,0,23,0,24,0,25,0,26,0,27,0, 89,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,255,28,0,29,0,30,0, 31,0,32,0,33,0,34,0,35,0,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 242,255,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,104,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,253,255,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,54,0,113,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,199,255,55,0,56,0,57,0,58,0,59,0,60,0,61,0, 62,0,63,0,64,0,65,0,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,212,255,0,0,1,0,2,0, 3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,68,0,0,0,0,0,0,0,0,0,0,0,0,0, 226,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,80,0,0,0, 0,0,0,0,0,0,0,0,241,255,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0, 36,0,37,0,38,0,93,0,0,0,0,0,0,0,0,0,203,255,39,0,40,0,41,0,42,0,43,0,44,0,45,0, 46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0,107,0,0,0,0,0,0,0,220,255,0,0,1,0,2,0, 3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,68,0,0,0,0,0, 238,255,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0, 31,0,32,0,84,0,0,0,238,255,33,0,34,0,35,0,36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0, 44,0,45,0,46,0,47,0,48,0,49,0,50,0,101,0,190,255,0,0,172,254,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,193,255,1,0,2,0,173,254, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 197,255,3,0,4,0,5,0,175,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,202,255,6,0,7,0,8,0,9,0,178,254,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208,255,10,0,11,0,12,0,13,0,14,0,182,254,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,215,255,15,0,16,0,17,0, 18,0,19,0,20,0,187,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 223,255,21,0,22,0,23,0,24,0,25,0,26,0,27,0,193,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,232,255,28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,200,254,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,242,255,36,0,37,0,38,0,39,0,40,0,41,0,42,0, 43,0,44,0,208,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,255,45,0,46,0,47,0, 48,0,49,0,50,0,51,0,52,0,53,0,54,0,217,254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 199,255,55,0,56,0,57,0,58,0,59,0,60,0,61,0,62,0,63,0,64,0,65,0,227,254,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,212,255,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0, 11,0,172,254,0,0,0,0,0,0,0,0,0,0,0,0,226,255,12,0,13,0,14,0,15,0,16,0,17,0,18,0, 19,0,20,0,21,0,22,0,23,0,24,0,184,254,0,0,0,0,0,0,0,0,0,0,241,255,25,0,26,0,27,0, 28,0,29,0,30,0,31,0,32,0,33,0,34,0,35,0,36,0,37,0,38,0,197,254,0,0,0,0,0,0,0,0, 203,255,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,51,0,52,0,53,0, 211,254,0,0,0,0,0,0,220,255,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0, 11,0,12,0,13,0,14,0,15,0,172,254,0,0,0,0,238,255,16,0,17,0,18,0,19,0,20,0,21,0,22,0, 23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,0,32,0,188,254,0,0,238,255,33,0,34,0,35,0, 36,0,37,0,38,0,39,0,40,0,41,0,42,0,43,0,44,0,45,0,46,0,47,0,48,0,49,0,50,0,205,254, 84,1,24,2,16,1,176,0,204,0,176,0,136,0,176,0,68,0,176,0,0,0,176,0,254,0,7,255,2,0,255,0, 248,0,7,0,254,0,238,0,255,7,0,2,239,0,0,248,0,7,238,0,255,255,255,255,255,255,0,0,0,0,1,0, 1,0,1,0,1,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0,0,0,1,0,1,0,1,0,1,0,0,0, 0,0,255,255,255,255,0,0,255,255,1,0,0,0,1,0,1,0,0,0,0,0,255,255,255,255,255,255,255,255,0,0, 255,255,1,0,0,0,1,0,1,0,0,0,0,0,255,255,255,255,255,255,0,0,0,0,0,0,68,0,136,0,204,0, 16,1,84,1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, }; const unsigned char DSP4[8192] = { 198,255,255,4,192,151,145,0,0,0,0,11,140,64,144,0,0,11,84,64,144,0,0,11,60,64,144,0,0,11,52,64, 144,164,16,145,20,1,160,4,1,145,144,19,160,0,0,11,76,64,144,44,27,145,56,11,160,4,1,145,244,25,160,0, 0,11,116,64,144,0,0,11,108,64,144,156,26,145,8,1,160,4,1,145,12,25,160,0,0,11,132,64,144,4,1,145, 144,16,160,4,1,145,248,6,160,0,0,11,204,64,144,0,0,11,180,64,144,0,0,11,172,64,144,72,26,145,168,1, 160,4,1,145,252,11,160,0,0,11,196,64,144,4,1,145,108,16,160,4,1,145,108,1,160,0,0,11,236,64,144,0, 0,11,228,64,144,16,27,145,220,6,160,4,1,145,196,25,160,0,0,11,252,64,144,4,1,145,172,16,160,0,0,145, 100,1,160,0,0,160,70,0,192,12,193,151,0,0,160,6,0,192,1,0,192,28,193,151,138,0,0,3,0,224,206,255, 223,44,193,151,141,0,0,18,0,37,0,0,11,0,128,53,0,128,11,0,128,18,80,1,144,48,128,17,38,0,0,84, 193,151,22,0,0,92,193,151,0,0,160,12,6,168,180,1,160,132,4,192,1,0,224,31,0,0,116,5,168,1,0,192, 128,193,151,138,0,21,112,68,148,3,192,255,206,63,192,4,0,192,36,5,168,68,0,192,36,5,168,52,2,160,132,4, 192,1,0,224,31,0,0,116,5,168,1,0,192,188,193,151,138,0,21,112,68,148,3,192,255,206,63,192,4,0,192,36, 5,168,68,0,192,84,5,168,52,2,160,1,0,192,232,193,151,138,0,21,104,68,148,132,0,192,241,14,0,242,0,0, 4,0,192,0,14,5,0,142,7,31,14,0,47,0,0,196,0,192,241,14,0,242,0,0,68,0,192,0,14,5,0,142, 7,31,14,0,47,0,0,3,192,255,206,63,192,132,0,192,36,5,168,196,0,192,36,5,168,4,44,192,80,194,151,159, 56,0,242,0,0,38,0,0,45,140,20,0,138,37,104,194,151,38,0,0,241,26,13,31,16,0,47,142,4,0,128,12, 47,216,20,132,194,151,253,48,13,0,128,37,0,128,12,47,200,4,47,170,20,241,84,0,31,28,0,246,0,0,253,12, 0,0,128,37,176,194,151,38,0,0,241,0,0,47,6,36,192,194,151,52,68,148,52,68,145,19,0,0,241,0,0,32, 0,20,52,68,148,52,68,145,47,48,0,0,128,4,248,130,148,32,0,21,52,68,148,52,68,145,22,54,0,252,194,151, 242,72,0,32,128,17,20,195,148,60,6,168,68,20,192,31,90,0,53,0,20,27,0,0,96,67,145,31,28,0,250,10, 0,241,32,0,242,64,53,31,160,39,47,10,0,250,68,0,241,32,0,242,64,53,31,160,39,47,88,0,241,0,0,0, 0,9,31,28,0,40,3,145,3,224,255,14,0,193,68,32,192,2,255,255,246,128,21,47,22,0,120,195,151,241,80,0, 0,28,5,242,0,20,22,128,8,47,6,0,144,195,151,250,10,0,241,32,0,242,64,53,31,160,39,47,14,0,241,0, 0,48,0,20,192,3,148,6,224,255,0,4,0,216,3,160,0,0,20,212,67,148,6,224,192,0,4,0,216,3,160,246, 4,0,216,195,151,250,68,0,241,32,0,242,64,53,31,160,39,47,130,20,241,0,0,0,0,8,31,70,0,104,3,145, 241,30,0,0,0,11,0,52,5,31,10,0,241,30,0,0,0,11,0,26,5,31,78,0,1,0,224,31,14,0,31,34, 0,6,0,224,228,1,160,68,24,192,241,4,0,0,0,11,0,0,5,31,68,0,241,42,0,0,0,11,0,0,5,31, 12,0,6,0,192,92,196,151,6,0,224,228,1,160,0,0,8,116,68,148,0,0,160,0,0,8,204,68,148,68,28,192, 128,196,151,138,0,0,136,196,151,129,0,0,29,0,5,31,12,0,241,0,0,0,0,37,31,10,0,241,0,0,0,0, 37,31,0,0,196,28,192,241,0,0,184,196,151,128,0,21,31,14,20,31,0,0,228,1,160,0,0,8,204,68,148,4, 28,192,216,196,151,138,0,0,224,196,151,129,0,0,29,0,5,31,12,0,241,0,0,0,0,37,31,10,0,241,0,0, 0,0,37,31,0,0,132,28,192,241,0,0,16,197,151,128,0,21,31,14,20,31,0,0,228,1,160,36,197,151,129,0, 0,18,0,15,48,0,18,48,128,18,64,133,148,0,128,17,0,128,15,0,0,5,31,14,0,0,128,7,47,14,64,84, 197,151,129,0,0,0,0,5,31,14,0,100,197,151,130,0,0,0,128,7,47,14,64,6,0,192,4,0,192,124,197,151, 143,14,0,132,197,151,143,12,0,159,6,0,144,197,151,143,48,0,152,197,151,143,18,0,160,197,151,143,76,0,168,197, 151,143,42,0,176,197,151,143,14,0,184,197,151,143,12,0,159,10,0,145,0,0,200,197,151,128,0,21,31,24,20,212, 197,151,143,196,13,220,197,151,143,48,21,0,0,12,31,36,20,236,197,151,143,14,0,244,197,151,143,46,0,252,197,151, 143,14,0,4,198,151,143,78,64,6,0,192,132,4,192,20,198,151,193,7,224,144,0,18,31,32,0,1,248,192,144,0, 18,31,32,0,1,0,223,128,0,18,31,0,64,132,8,192,31,32,0,63,70,0,3,1,192,6,0,192,80,198,151,138, 0,0,88,198,151,14,0,192,69,23,192,146,0,0,96,128,18,241,160,4,45,0,0,146,0,37,96,1,18,0,0,17, 30,0,0,96,128,18,241,160,4,45,0,0,130,0,37,96,1,18,0,0,17,30,0,0,96,128,18,241,192,4,45,64, 0,0,0,37,96,1,18,0,0,17,22,0,0,188,198,151,49,0,0,0,0,8,19,0,0,76,6,145,132,8,192,241, 32,0,243,0,64,2,0,192,67,72,200,1,30,192,36,0,8,63,128,9,232,6,145,0,0,160,2,0,192,3,4,196, 1,30,192,36,0,8,63,128,9,4,7,145,0,0,160,46,128,11,136,135,144,104,135,148,0,128,9,208,135,148,0,128, 9,236,135,148,0,128,9,8,136,148,0,128,9,36,136,148,0,128,9,64,136,148,0,128,9,92,136,148,0,128,9,120, 136,148,0,128,9,148,136,148,65,0,192,0,0,75,3,128,192,36,0,0,241,0,0,0,0,15,48,0,20,164,73,148, 0,0,15,31,128,9,131,128,192,208,135,148,0,128,9,236,135,148,0,128,9,8,136,148,0,128,9,36,136,148,0,128, 9,64,136,148,0,128,9,92,136,148,0,128,9,120,136,148,0,128,9,148,136,148,65,0,192,0,0,75,36,0,0,241, 0,0,48,0,20,120,73,148,26,0,15,120,73,148,223,128,9,36,0,0,241,0,0,48,0,20,96,73,148,26,0,15, 96,73,148,223,128,9,36,0,0,241,0,0,48,0,20,72,73,148,26,0,15,72,73,148,223,128,9,36,0,0,241,0, 0,48,0,20,48,73,148,26,0,15,48,73,148,223,128,9,36,0,0,241,0,0,48,0,20,24,73,148,26,0,15,24, 73,148,223,128,9,36,0,0,241,0,0,48,0,20,0,73,148,26,0,15,0,73,148,223,128,9,36,0,0,241,0,0, 48,0,20,232,72,148,26,0,15,232,72,148,223,128,9,36,0,0,1,0,0,0,0,11,188,8,144,3,128,192,241,0, 0,48,0,20,131,128,192,208,72,148,31,0,77,241,0,0,48,0,20,26,0,15,208,72,144,223,0,64,0,128,8,164, 137,148,36,0,0,241,0,0,48,0,21,31,0,0,0,128,8,164,137,148,36,0,0,241,0,0,48,0,21,31,0,0, 0,128,8,164,137,148,36,0,0,241,0,0,48,0,21,31,0,0,0,128,8,164,137,148,36,0,0,241,0,0,48,0, 21,31,0,0,0,128,8,164,137,148,36,0,0,241,0,0,48,0,21,31,0,0,0,128,8,164,137,148,36,0,0,241, 0,0,48,0,21,31,0,0,0,128,8,164,137,148,36,0,0,241,0,0,48,0,21,31,0,0,1,128,8,164,137,148, 0,0,11,164,9,144,131,0,192,36,0,0,241,0,0,48,0,21,31,0,0,65,0,192,0,0,75,65,0,192,0,0, 75,46,128,11,0,138,144,224,137,148,0,128,9,44,138,148,0,128,9,72,138,148,0,128,9,100,138,148,0,128,9,128, 138,148,65,0,192,0,0,75,3,64,192,36,0,0,241,0,0,0,0,15,48,0,20,48,75,148,0,0,15,31,128,9, 67,64,192,44,138,148,0,128,9,72,138,148,0,128,9,100,138,148,0,128,9,128,138,148,0,128,9,65,0,192,0,0, 75,36,0,0,241,0,0,48,0,20,4,75,148,26,0,15,4,75,148,223,128,9,36,0,0,241,0,0,48,0,20,236, 74,148,26,0,15,236,74,148,223,128,9,36,0,0,241,0,0,48,0,20,212,74,148,26,0,15,212,74,148,223,128,9, 36,0,0,1,0,0,0,0,11,168,10,144,3,64,192,241,0,0,48,0,20,67,64,192,188,74,148,31,0,77,241,0, 0,48,0,20,26,0,15,188,74,144,223,0,64,0,128,8,48,139,148,36,0,0,241,0,0,48,0,21,31,0,0,0, 128,8,48,139,148,36,0,0,241,0,0,48,0,21,31,0,0,0,128,8,48,139,148,36,0,0,241,0,0,48,0,21, 31,0,0,1,128,8,48,139,148,0,0,11,48,11,144,131,0,192,36,0,0,241,0,0,48,0,21,31,0,0,65,0, 192,0,0,75,65,0,192,0,0,75,6,0,192,4,30,192,64,203,151,143,32,0,72,203,151,143,88,0,80,203,151,143, 0,0,241,6,0,92,203,151,143,2,0,100,203,151,143,34,0,108,203,151,143,2,0,116,203,151,143,0,0,68,30,192, 128,203,151,145,0,0,0,28,5,19,0,4,152,11,148,63,0,0,0,6,0,143,64,0,160,203,151,129,0,0,26,0, 18,248,75,148,124,75,145,1,0,192,184,203,151,128,0,20,192,203,151,141,0,0,0,26,37,0,26,5,31,32,20,212, 203,151,141,0,5,0,26,37,0,26,5,31,34,20,232,203,151,143,64,0,168,13,168,124,11,160,0,0,160,6,0,192, 4,30,192,4,204,151,143,32,0,12,204,151,143,88,0,20,204,151,143,0,0,241,6,0,32,204,151,143,2,0,40,204, 151,143,34,0,48,204,151,143,2,0,56,204,151,143,0,0,68,30,192,68,204,151,129,0,0,0,28,5,19,0,4,92, 12,148,63,0,0,16,6,20,96,204,151,138,0,21,192,76,148,64,76,145,1,0,192,116,204,151,128,0,20,124,204,151, 143,64,0,132,204,151,141,0,0,0,26,37,0,26,5,31,32,20,152,204,151,141,0,5,0,26,37,0,26,5,31,34, 20,172,204,151,143,64,0,168,13,168,1,0,192,64,12,160,0,128,18,0,0,12,0,64,145,0,0,12,232,76,144,0, 0,12,224,76,144,4,13,160,0,13,145,0,13,160,0,0,12,248,76,144,0,13,145,0,13,160,0,13,145,0,13,160, 0,0,160,3,224,223,8,205,151,130,0,0,0,128,11,48,128,18,42,128,20,28,205,151,129,0,0,36,205,151,143,0, 20,29,128,5,0,128,37,47,192,20,56,205,151,129,0,0,64,205,151,143,0,20,29,128,4,0,128,36,80,205,151,138, 0,0,88,205,151,144,128,21,38,0,0,100,205,151,45,128,20,22,154,37,0,154,5,47,160,20,241,0,0,124,205,151, 128,0,21,29,0,0,0,154,37,0,154,5,47,162,20,148,205,151,143,64,0,168,13,168,1,0,192,64,12,160,1,0, 192,172,205,151,143,32,21,136,78,145,0,64,5,31,2,0,184,15,168,206,3,192,4,50,192,241,10,0,19,0,4,220, 77,145,116,14,148,0,0,21,228,77,148,49,2,0,0,0,4,248,13,148,0,0,21,116,78,148,68,50,192,241,10,0, 19,0,4,12,78,145,116,14,148,0,0,21,60,78,148,241,74,0,242,32,0,0,32,0,47,32,0,31,14,0,129,59, 192,31,14,0,112,15,168,116,78,144,68,38,192,49,2,0,0,72,4,80,14,148,0,0,21,116,78,148,68,50,192,242, 0,0,20,7,168,116,78,144,4,50,192,241,0,0,36,16,168,68,50,192,216,15,168,6,0,192,120,206,151,6,0,192, 68,46,192,168,13,160,68,46,192,1,0,192,144,206,151,143,32,21,108,79,145,0,64,5,31,2,0,184,15,168,206,1, 192,4,50,192,241,10,0,19,0,4,192,78,145,88,15,148,0,0,21,200,78,148,49,2,0,0,0,4,220,14,148,0, 0,21,88,79,148,68,50,192,241,10,0,19,0,4,240,78,145,88,15,148,0,0,21,32,79,148,241,74,0,242,32,0, 0,32,0,47,32,0,31,14,0,129,59,192,31,14,0,148,15,168,88,79,144,68,38,192,49,2,0,0,72,4,52,15, 148,0,0,21,88,79,148,68,50,192,242,0,0,172,9,168,88,79,144,4,50,192,241,0,0,12,16,168,68,50,192,216, 15,168,6,0,192,92,207,151,6,0,192,68,46,192,140,14,160,0,0,64,242,0,0,20,7,168,144,79,144,132,50,192, 241,0,0,36,16,168,196,50,192,216,15,168,0,0,64,242,0,0,172,9,168,180,79,144,132,50,192,241,0,0,12,16, 168,196,50,192,216,15,168,0,0,64,241,0,0,188,207,151,128,12,21,31,76,0,241,0,0,204,207,151,144,12,21,31, 0,84,193,63,192,19,64,2,30,0,15,242,0,0,48,128,18,16,128,17,70,0,192,244,207,151,38,46,0,252,207,151, 246,0,13,4,208,151,0,0,64,3,64,192,14,0,192,48,0,18,56,80,145,78,85,213,56,16,160,3,64,192,142,170, 234,48,0,18,56,80,145,206,255,255,196,59,192,1,0,0,242,64,2,244,128,12,0,0,1,31,128,12,100,144,144,132, 59,192,241,160,13,47,64,9,31,0,64,196,59,192,47,0,64,4,60,192,2,0,192,47,32,0,116,48,150,132,59,192, 1,60,192,31,160,13,47,0,0,0,0,160,4,60,192,246,32,0,152,208,151,148,48,150,0,0,160,12,6,168,184,16, 160,132,4,192,1,0,224,31,0,0,6,0,192,4,0,192,192,208,151,143,14,0,200,208,151,143,12,0,159,6,0,212, 208,151,143,48,0,220,208,151,143,18,0,228,208,151,143,76,0,236,208,151,143,42,0,244,208,151,143,14,0,252,208,151, 143,12,0,159,10,0,145,0,0,12,209,151,128,0,21,31,24,20,24,209,151,143,196,13,32,209,151,143,48,21,0,0, 12,31,36,20,1,0,192,52,209,151,138,0,21,128,83,148,3,192,255,206,63,192,4,28,192,76,209,151,129,0,0,84, 209,151,141,0,0,0,0,37,31,0,0,68,28,192,104,209,151,129,0,0,112,209,151,141,0,0,0,0,37,31,0,0, 4,44,192,132,209,151,159,56,0,242,6,0,38,0,0,241,26,13,31,16,0,47,142,4,0,128,12,47,216,20,168,209, 151,253,48,13,0,128,37,0,128,12,47,200,4,47,170,20,241,84,0,31,28,0,242,12,0,38,0,0,241,0,0,47, 6,20,216,209,151,76,83,148,76,83,145,19,0,0,241,0,0,32,0,20,76,83,148,76,83,145,47,48,0,0,128,4, 16,146,148,32,0,21,76,83,148,76,83,145,22,54,0,20,210,151,242,72,0,32,128,17,44,210,148,60,6,168,68,20, 192,31,90,0,53,0,20,27,0,0,120,82,145,31,28,0,250,10,0,241,32,0,242,64,53,31,160,39,47,10,0,250, 68,0,241,32,0,242,64,53,31,160,39,47,88,0,241,0,0,0,0,9,31,28,0,64,18,145,3,224,255,14,0,193, 68,32,192,2,255,255,246,128,21,47,22,0,144,210,151,241,80,0,0,28,5,242,0,20,22,128,8,47,6,0,168,210, 151,250,10,0,241,32,0,242,64,53,31,160,39,47,14,0,241,0,0,48,0,20,216,18,148,6,224,255,0,4,0,240, 18,160,0,0,20,236,82,148,6,224,192,0,4,0,240,18,160,246,4,0,240,210,151,250,68,0,241,32,0,242,64,53, 31,160,39,47,130,20,241,0,0,0,0,8,31,70,0,128,18,145,241,30,0,0,0,11,0,52,5,31,10,0,241,30, 0,0,0,11,0,26,5,31,78,0,1,0,224,31,14,0,31,34,0,6,0,224,48,17,160,68,24,192,241,4,0,0, 0,11,0,0,5,31,68,0,241,42,0,0,0,11,0,0,5,31,12,0,6,0,192,116,211,151,6,0,224,48,17,160, 0,0,8,0,0,148,136,211,151,0,0,160,6,0,192,4,28,192,76,21,168,4,32,192,76,21,168,4,48,192,76,21, 168,4,52,192,76,21,168,4,56,192,76,21,168,4,44,192,76,21,168,4,60,192,76,21,168,4,40,192,76,21,168,2, 0,192,68,2,192,47,0,0,96,21,168,132,21,168,4,1,192,250,0,0,4,8,192,228,21,168,228,21,168,228,21,168, 204,21,168,28,22,168,4,4,192,80,22,168,132,22,168,132,21,168,60,85,148,68,16,192,241,32,0,0,0,4,12,85, 145,4,8,192,228,21,168,228,21,168,228,21,168,204,21,168,4,4,192,1,0,192,0,34,5,112,20,148,16,32,20,0, 0,5,112,20,145,4,44,192,241,54,0,2,255,255,32,32,18,31,0,0,68,4,192,1,0,192,0,34,5,164,84,148, 164,84,145,16,32,20,0,0,5,164,20,145,68,44,192,241,54,0,2,255,255,32,32,18,31,0,0,132,4,192,156,22, 168,196,4,192,192,22,168,68,2,192,0,128,5,216,148,145,4,12,192,0,128,5,248,212,148,248,212,145,68,2,192,47, 0,0,4,4,192,156,22,168,68,4,192,192,22,168,132,60,192,241,64,0,31,64,0,31,0,0,4,12,192,184,23,168, 132,12,192,228,22,168,48,21,160,4,8,192,228,21,168,228,21,168,228,21,168,204,21,168,4,12,192,228,22,168,132,12, 192,228,22,168,28,22,168,6,0,224,20,20,160,68,2,192,246,0,0,68,213,151,0,0,160,2,1,192,80,213,151,143, 160,8,80,149,145,0,0,64,68,1,192,100,213,151,143,32,0,108,213,151,143,32,0,116,213,151,143,32,0,124,213,151, 143,0,64,4,1,192,1,0,192,140,213,151,143,20,21,200,85,148,26,0,0,2,0,192,160,213,151,128,128,20,47,160, 20,172,213,151,143,32,0,180,213,151,128,128,20,47,160,20,192,213,151,143,32,64,0,0,64,67,28,0,244,0,0,1, 0,192,216,213,151,157,0,5,248,21,160,67,28,0,244,0,0,1,0,192,240,213,151,141,0,5,52,0,37,31,6,4, 0,0,12,31,10,20,67,18,0,244,0,0,52,0,5,31,14,4,31,34,64,4,8,192,241,8,0,31,6,20,31,46, 0,241,8,0,31,6,20,31,46,0,241,8,0,31,6,20,31,46,0,241,8,0,31,6,20,31,0,64,1,0,192,31, 32,0,31,68,0,196,24,168,19,0,0,196,24,168,0,0,15,48,0,17,22,0,0,116,214,151,6,0,224,28,22,168, 0,0,64,4,0,192,1,0,192,31,32,0,31,32,0,31,32,0,31,0,64,1,0,192,0,14,5,188,22,148,241,16, 0,0,12,5,18,0,4,188,86,148,47,128,84,32,128,84,1,0,192,0,14,5,224,86,148,241,16,0,0,18,5,18, 0,4,224,22,148,47,128,84,32,128,84,1,0,192,0,0,4,176,87,148,176,87,145,31,32,0,31,78,0,19,22,5, 0,22,4,56,87,145,50,0,0,30,142,20,176,215,148,176,215,145,35,0,0,196,24,168,196,24,168,1,0,0,0,64, 8,30,64,0,28,23,145,0,14,0,241,22,0,31,10,0,0,18,4,88,23,148,48,0,21,176,87,148,176,87,145,19, 0,0,54,0,0,140,24,168,196,24,168,30,80,20,104,215,151,246,0,5,2,1,192,32,0,20,31,32,0,31,16,0, 168,24,168,196,24,168,0,0,15,0,0,17,144,215,151,22,0,0,49,64,0,0,64,8,19,0,0,92,23,145,168,215, 151,0,0,64,6,0,192,168,23,160,1,0,192,0,0,4,240,22,148,132,88,145,243,14,0,241,22,0,0,22,4,236, 87,148,50,0,0,16,128,20,132,216,148,132,216,145,35,0,0,241,28,0,48,0,20,0,18,4,0,0,8,44,24,148, 30,0,0,48,0,21,132,88,148,132,88,145,19,0,0,196,24,168,196,24,168,1,0,0,0,64,9,30,64,0,20,24, 145,54,0,0,196,24,168,30,80,20,56,216,151,129,1,192,0,0,5,22,0,0,130,0,192,32,0,20,31,32,0,31, 16,0,196,24,168,0,0,15,0,0,17,100,216,151,22,0,0,49,64,0,0,64,8,19,0,0,48,24,145,124,216,151, 0,0,64,6,0,192,124,24,160,0,16,0,241,22,0,0,16,4,164,24,144,1,0,192,31,22,64,0,22,64,0,16, 0,241,22,0,0,14,4,192,24,144,193,63,192,31,8,64,0,8,64,245,4,0,251,8,0,241,6,0,242,6,53,31, 134,39,47,16,0,0,146,5,33,158,4,248,152,148,0,0,4,4,89,148,0,2,5,31,52,64,0,30,0,241,28,0, 31,52,64,241,2,0,31,52,64,6,0,192,10,96,192,132,0,192,24,217,151,143,0,0,4,0,192,116,25,168,116,25, 168,250,66,0,96,25,168,0,38,0,56,217,151,96,25,168,0,34,0,68,217,151,96,25,168,0,46,0,80,217,151,96, 25,168,88,217,151,0,0,160,241,64,0,242,0,4,29,0,0,0,128,37,38,0,64,1,0,252,31,0,0,124,217,151, 130,0,0,33,128,2,45,128,20,0,130,37,47,2,14,18,0,2,29,0,20,0,4,37,31,132,14,33,128,2,45,128, 20,0,134,37,47,6,14,18,0,2,29,0,20,0,8,37,31,168,78,36,26,168,172,9,168,232,89,144,4,50,192,241, 0,0,12,16,168,68,50,192,216,15,168,0,0,160,6,0,192,236,217,151,0,0,160,36,26,168,20,7,168,24,90,144, 4,50,192,241,0,0,36,16,168,68,50,192,216,15,168,0,0,160,6,0,192,28,218,151,0,0,160,6,0,192,4,50, 192,44,218,151,143,32,0,2,0,192,56,218,151,143,142,21,64,218,151,159,14,64,6,0,192,138,170,192,5,0,196,2, 0,192,4,0,192,3,252,255,206,3,192,128,26,168,128,26,168,128,26,168,128,26,168,38,0,0,120,218,151,0,0,160, 128,218,151,141,0,0,97,128,14,48,128,18,0,0,37,0,0,18,16,128,81,66,85,213,193,63,192,20,128,10,47,0, 8,164,26,148,193,63,192,180,218,151,20,128,10,46,128,3,224,154,145,2,0,8,184,26,148,0,128,10,160,218,148,6, 0,192,216,218,151,0,0,160,1,0,196,0,0,18,64,0,17,14,64,196,19,128,11,0,0,21,240,154,144,1,0,248, 48,0,17,22,0,0,8,219,151,0,0,160,2,0,193,1,0,192,21,0,9,102,128,8,32,219,151,24,155,145,0,0, 160,6,0,193,48,219,151,0,0,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,64,0,32,85,21,0,16,204,12,170,10,36,9,0,8,28,7,102,6,209,5,85,5,236,4,146,4,68,4, 0,4,195,3,142,3,94,3,51,3,12,3,232,2,200,2,170,2,143,2,118,2,94,2,73,2,52,2,34,2,16,2, 0,2,240,1,225,1,212,1,199,1,186,1,175,1,164,1,153,1,143,1,134,1,125,1,116,1,108,1,100,1,92,1, 85,1,78,1,71,1,65,1,59,1,53,1,47,1,41,1,36,1,31,1,26,1,21,1,17,1,12,1,8,1,4,1, 0,1,252,0,248,0,244,0,240,0,237,0,234,0,230,0,227,0,224,0,221,0,218,0,215,0,212,0,210,0,207,0, 204,0,202,0,199,0,197,0,195,0,192,0,190,0,188,0,186,0,184,0,182,0,0,124,224,3,31,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char SGB1[256] = { 49,254,255,62,48,224,0,175,33,255,159,50,203,124,32,251,33,38,255,14,17,62,128,50,226,12,62,243,226,50,62,119, 119,62,252,224,71,33,95,192,14,8,175,50,13,32,252,17,79,1,62,251,14,6,245,6,0,26,27,50,128,71,13,32, 248,50,241,50,14,14,214,2,254,239,32,234,17,4,1,33,16,128,26,205,211,0,205,212,0,19,123,254,52,32,243,17, 230,0,6,8,26,19,34,35,5,32,249,62,25,234,16,153,33,47,153,14,12,61,40,8,50,13,32,249,46,15,24,243, 62,145,224,64,33,0,192,14,0,62,0,226,62,48,226,6,16,30,8,42,87,203,66,62,16,32,2,62,32,226,62,48, 226,203,26,29,32,239,5,32,232,62,32,226,62,48,226,205,194,0,125,254,96,32,210,14,19,62,193,226,12,62,7,226, 24,58,22,4,240,68,254,144,32,250,30,0,29,32,253,21,32,242,201,79,6,4,197,203,17,23,193,203,17,23,5,32, 245,34,35,34,35,201,60,66,185,165,185,165,66,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,1,224,80, }; const unsigned char SGB2[256] = { 49,254,255,62,48,224,0,175,33,255,159,50,203,124,32,251,33,38,255,14,17,62,128,50,226,12,62,243,226,50,62,119, 119,62,252,224,71,33,95,192,14,8,175,50,13,32,252,17,79,1,62,251,14,6,245,6,0,26,27,50,128,71,13,32, 248,50,241,50,14,14,214,2,254,239,32,234,17,4,1,33,16,128,26,205,211,0,205,212,0,19,123,254,52,32,243,17, 230,0,6,8,26,19,34,35,5,32,249,62,25,234,16,153,33,47,153,14,12,61,40,8,50,13,32,249,46,15,24,243, 62,145,224,64,33,0,192,14,0,62,0,226,62,48,226,6,16,30,8,42,87,203,66,62,16,32,2,62,32,226,62,48, 226,203,26,29,32,239,5,32,232,62,32,226,62,48,226,205,194,0,125,254,96,32,210,14,19,62,193,226,12,62,7,226, 24,58,22,4,240,68,254,144,32,250,30,0,29,32,253,21,32,242,201,79,6,4,197,203,17,23,193,203,17,23,5,32, 245,34,35,34,35,201,60,66,185,165,185,165,66,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,255,224,80, }; const unsigned char ST010[53248] = { 54,0,0,4,192,151,4,4,192,241,0,0,0,0,2,12,0,148,0,0,11,60,64,144,0,0,11,80,64,144,0,0, 11,56,69,144,0,0,11,228,68,144,104,0,160,0,0,11,92,0,144,0,0,11,116,4,144,120,0,160,0,0,11,212, 5,144,124,1,160,0,0,11,204,6,144,168,1,160,4,4,192,1,0,192,31,0,0,8,0,160,4,0,192,241,0,0, 0,0,15,206,63,192,0,0,18,31,32,0,192,4,168,31,32,0,47,0,0,132,0,192,254,0,0,194,73,192,197,43, 192,3,44,192,11,1,0,16,0,19,36,0,37,31,128,8,49,0,0,11,1,8,19,0,0,180,0,145,68,0,192,254, 0,0,194,117,192,197,43,192,3,44,192,11,1,0,16,0,19,36,0,37,31,128,8,49,0,0,11,1,8,19,0,0, 232,0,145,68,0,192,241,0,0,0,0,10,0,0,9,30,0,0,194,161,192,197,43,192,3,44,192,11,1,0,16,0, 19,36,0,37,31,128,8,49,0,0,11,1,8,19,0,0,40,1,145,132,0,192,254,0,0,194,205,192,197,43,192,3, 44,192,11,1,0,16,0,19,36,0,37,31,128,8,49,0,0,11,1,8,19,0,0,92,1,145,104,0,160,4,0,192, 253,32,0,250,0,0,4,2,192,16,0,19,0,0,53,31,32,0,16,0,19,0,0,37,31,0,0,104,0,160,4,24, 192,241,0,0,196,24,192,0,0,4,4,26,192,31,0,0,68,24,192,242,0,0,68,25,192,0,128,4,68,26,192,47, 0,0,4,0,192,31,32,0,47,0,0,212,6,168,132,25,192,0,0,4,196,25,192,31,0,0,3,192,255,48,0,18, 36,66,145,16,2,148,3,96,255,20,2,160,3,160,192,132,25,192,241,0,0,48,0,21,31,0,0,196,25,192,241,0, 0,16,0,18,60,2,148,0,0,10,0,0,9,0,0,11,0,0,11,0,0,11,0,0,11,30,0,0,3,64,192,48, 0,20,120,66,144,132,26,192,241,0,0,0,0,20,112,2,144,1,0,192,31,0,0,172,2,160,132,26,192,241,0,0, 196,26,192,0,0,5,144,2,144,193,255,255,19,0,0,4,27,192,0,0,4,164,66,144,243,0,0,132,26,192,63,0, 0,132,25,192,241,0,0,0,0,15,195,63,192,48,0,18,192,4,168,0,0,11,0,0,11,0,0,11,0,0,11,0, 0,11,0,128,11,0,128,11,0,128,11,0,128,11,0,128,11,46,0,0,26,0,0,132,26,192,241,0,0,0,0,15, 195,63,192,48,0,18,29,0,0,16,0,19,0,0,53,32,128,19,0,128,37,4,0,192,31,32,0,47,0,0,10,0, 0,16,0,19,0,0,53,32,128,19,0,128,37,132,0,192,31,32,0,47,0,0,132,24,192,241,32,0,242,0,0,4, 0,192,0,32,4,0,128,6,206,255,199,0,128,18,132,24,192,31,32,0,47,0,0,4,25,192,241,32,0,242,0,0, 132,0,192,0,32,4,0,128,6,206,255,199,0,128,18,4,25,192,31,32,0,47,0,0,68,27,192,241,0,0,16,0, 18,188,3,148,3,2,192,14,32,192,196,3,160,3,32,192,14,2,192,4,26,192,241,0,0,16,0,18,220,3,148,0, 0,10,0,0,9,48,32,20,112,4,144,241,0,0,16,0,18,248,3,148,0,0,10,0,0,9,0,32,20,112,4,144, 196,27,192,241,0,0,4,24,192,31,0,0,4,28,192,241,0,0,16,0,18,64,4,148,195,255,195,48,0,18,68,24, 192,31,0,0,193,255,255,68,27,192,31,0,0,92,4,160,195,255,195,48,0,18,68,24,192,31,0,0,1,0,192,68, 27,192,31,0,0,132,27,192,241,0,0,3,2,192,48,0,17,31,0,0,104,0,160,132,0,192,250,64,0,253,64,0, 16,0,19,0,0,53,32,128,19,253,128,37,19,0,0,46,0,0,16,0,19,0,0,53,32,128,19,0,128,37,4,2, 192,31,32,0,47,32,0,63,32,0,15,0,0,104,0,160,18,0,0,3,44,192,48,0,21,21,0,0,97,0,0,3, 60,192,48,128,21,37,0,0,98,0,64,132,0,192,241,0,0,0,0,15,206,63,192,0,0,18,192,4,168,68,0,192, 26,0,0,253,0,0,19,0,19,42,0,37,46,128,19,0,192,37,10,0,0,253,0,0,58,0,37,0,128,36,4,2, 192,31,32,0,47,0,0,104,0,160,4,0,192,241,0,0,0,0,2,80,5,148,0,0,10,0,0,9,31,32,0,241, 0,0,0,0,2,104,5,148,0,0,10,0,0,9,31,64,0,0,0,4,132,69,144,243,32,0,254,64,0,15,32,0, 63,0,0,1,0,192,2,0,192,4,0,192,10,94,207,253,0,0,0,128,53,0,32,37,138,93,198,253,0,0,0,128, 53,0,0,39,0,128,12,0,0,12,14,0,224,3,0,192,0,128,21,48,0,23,4,2,192,31,32,0,104,0,160,132, 4,192,242,0,0,241,0,0,0,128,8,14,8,192,0,128,21,37,0,0,4,0,192,31,0,0,142,0,192,0,0,20, 104,64,144,241,0,0,14,4,192,0,0,20,104,0,144,3,8,192,2,16,192,52,0,0,241,32,0,44,38,150,0,2, 0,254,64,0,56,102,150,0,2,0,0,0,20,148,6,144,254,32,0,76,38,150,0,2,0,241,64,0,88,102,150,0, 2,0,31,32,0,100,38,150,0,2,0,15,0,0,36,0,0,254,32,0,120,38,150,0,2,0,241,64,0,132,102,150, 0,2,0,31,32,0,144,38,150,0,2,0,15,0,0,49,128,9,0,0,9,19,0,0,80,0,20,28,70,144,81,0, 0,0,0,8,21,0,0,4,0,192,241,0,0,0,0,8,31,0,0,20,6,145,104,0,160,212,6,168,104,0,160,68, 0,192,243,0,0,196,0,192,63,0,0,4,0,192,1,0,224,0,32,2,19,0,3,14,0,224,0,0,18,0,0,11, 14,0,208,0,0,18,48,32,17,31,96,0,241,0,0,0,0,2,36,7,148,0,0,10,0,0,9,31,32,0,241,0, 0,0,0,2,60,7,148,0,0,10,0,0,9,31,96,0,241,32,0,0,96,4,128,71,144,241,32,0,242,96,0,3, 8,192,30,0,0,48,0,20,1,0,0,180,71,144,0,0,11,0,128,11,88,135,145,88,135,144,66,0,192,88,7,160, 241,32,0,242,96,0,3,8,192,46,0,0,48,128,20,2,0,0,180,199,144,0,128,11,0,0,11,140,7,145,140,7, 144,65,0,192,140,7,160,31,32,0,47,96,0,0,0,2,240,7,145,132,0,192,1,0,208,0,0,2,20,72,145,14, 0,224,196,0,192,241,0,0,0,0,19,0,0,18,4,2,192,31,0,64,132,0,192,1,0,208,0,0,2,20,72,145, 4,0,192,243,32,0,254,64,0,15,32,0,63,0,0,4,0,192,241,0,0,0,0,14,0,0,12,14,248,255,0,0, 18,14,124,192,0,32,21,0,0,5,21,0,0,97,32,0,0,0,1,14,0,224,0,0,19,4,2,192,31,0,64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 128,3,37,3,218,2,156,2,104,2,59,2,21,2,243,1,213,1,187,1,163,1,142,1,123,1,106,1,90,1,75,1, 62,1,50,1,38,1,28,1,18,1,9,1,0,1,248,0,240,0,233,0,227,0,220,0,214,0,209,0,203,0,198,0, 193,0,189,0,184,0,180,0,176,0,172,0,168,0,165,0,162,0,158,0,155,0,152,0,149,0,147,0,144,0,141,0, 139,0,136,0,134,0,132,0,130,0,128,0,126,0,124,0,122,0,120,0,118,0,116,0,115,0,113,0,111,0,110,0, 108,0,107,0,105,0,104,0,103,0,101,0,100,0,99,0,98,0,96,0,95,0,94,0,93,0,92,0,91,0,90,0, 89,0,88,0,87,0,86,0,85,0,84,0,83,0,82,0,81,0,81,0,80,0,79,0,78,0,77,0,77,0,76,0, 75,0,75,0,74,0,73,0,72,0,72,0,71,0,71,0,70,0,69,0,69,0,68,0,68,0,67,0,66,0,66,0, 65,0,65,0,64,0,64,0,63,0,63,0,62,0,62,0,61,0,61,0,60,0,60,0,59,0,59,0,58,0,58,0, 58,0,57,0,57,0,56,0,56,0,56,0,55,0,55,0,54,0,54,0,54,0,53,0,53,0,53,0,52,0,52,0, 52,0,51,0,51,0,51,0,50,0,50,0,50,0,49,0,49,0,49,0,48,0,48,0,48,0,48,0,47,0,47,0, 47,0,46,0,46,0,46,0,46,0,45,0,45,0,45,0,45,0,44,0,44,0,44,0,44,0,43,0,43,0,43,0, 0,0,36,3,72,6,106,9,140,12,171,15,200,18,226,21,249,24,11,28,26,31,35,34,40,37,38,40,31,43,17,46, 251,48,223,51,186,54,140,57,86,60,23,63,206,65,122,68,28,71,180,73,63,76,191,78,51,81,155,83,245,85,66,88, 130,90,179,92,215,94,235,96,241,98,232,100,207,102,166,104,109,106,35,108,201,109,94,111,226,112,84,114,181,115,4,117, 65,118,107,119,132,120,137,121,124,122,92,123,41,124,227,124,137,125,29,126,156,126,9,127,97,127,166,127,216,127,245,127, 255,127,245,127,216,127,166,127,97,127,9,127,156,126,29,126,137,125,227,124,41,124,92,123,124,122,137,121,132,120,107,119, 65,118,4,117,181,115,84,114,226,112,94,111,201,109,35,108,109,106,166,104,207,102,232,100,241,98,235,96,215,94,179,92, 130,90,66,88,245,85,155,83,51,81,191,78,63,76,180,73,28,71,122,68,206,65,23,63,86,60,140,57,186,54,223,51, 251,48,17,46,31,43,38,40,40,37,35,34,26,31,11,28,248,24,226,21,200,18,171,15,140,12,106,9,72,6,36,3, 0,0,220,252,184,249,149,246,116,243,85,240,56,237,30,234,7,231,245,227,230,224,221,221,216,218,218,215,225,212,239,209, 5,207,33,204,70,201,115,198,170,195,233,192,50,190,134,187,228,184,76,182,193,179,65,177,205,174,101,172,11,170,190,167, 126,165,77,163,41,161,20,159,15,157,24,155,49,153,90,151,147,149,221,147,55,146,162,144,30,143,172,141,75,140,252,138, 191,137,149,136,124,135,119,134,132,133,164,132,215,131,29,131,119,130,227,129,100,129,247,128,159,128,90,128,40,128,11,128, 1,128,11,128,40,128,90,128,159,128,247,128,100,129,227,129,119,130,29,131,215,131,164,132,132,133,119,134,125,135,149,136, 191,137,252,138,75,140,172,141,30,143,162,144,55,146,221,147,147,149,90,151,49,153,24,155,15,157,21,159,41,161,77,163, 126,165,190,167,11,170,102,172,205,174,65,177,193,179,77,182,228,184,134,187,51,190,233,192,170,195,116,198,71,201,34,204, 5,207,240,209,225,212,218,215,217,218,221,221,231,224,245,227,8,231,30,234,56,237,85,240,117,243,150,246,185,249,220,252, 0,0,36,3,72,6,106,9,140,12,171,15,200,18,226,21,249,24,11,28,26,31,35,34,40,37,38,40,31,43,17,46, 251,48,223,51,186,54,140,57,86,60,23,63,206,65,122,68,28,71,180,73,63,76,191,78,51,81,155,83,245,85,66,88, 130,90,179,92,215,94,235,96,241,98,232,100,207,102,166,104,109,106,35,108,201,109,94,111,226,112,84,114,181,115,4,117, 65,118,107,119,132,120,137,121,124,122,92,123,41,124,227,124,137,125,29,126,156,126,9,127,97,127,166,127,216,127,245,127, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,64,0,32,0,19,0,13,0,10,0,8,0,7,0,6,0,5,0,5,0,4,0,4,0,3,0,3,0,3,0,3, 0,3,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,2,0,1,0,1,0,1,0,1, 0,64,0,45,0,32,0,24,0,19,0,16,0,13,0,11,0,10,0,9,0,8,0,7,0,7,0,6,0,6,0,5, 0,5,0,5,0,5,0,4,0,4,0,4,0,4,0,4,0,3,0,3,0,3,0,3,0,3,0,3,0,3,0,3, 0,64,0,51,0,40,0,32,0,26,0,22,0,19,0,16,0,15,0,13,0,12,0,11,0,10,0,9,0,9,0,8, 0,8,0,7,0,7,0,6,0,6,0,6,0,6,0,5,0,5,0,5,0,5,0,5,0,4,0,4,0,4,0,4, 0,64,0,54,0,45,0,38,0,32,0,27,0,24,0,21,0,19,0,17,0,16,0,14,0,13,0,12,0,11,0,11, 0,10,0,9,0,9,0,8,0,8,0,8,0,7,0,7,0,7,0,6,0,6,0,6,0,6,0,6,0,5,0,5, 0,64,0,56,0,48,0,42,0,37,0,32,0,28,0,25,0,23,0,21,0,19,0,17,0,16,0,15,0,14,0,13, 0,12,0,12,0,11,0,10,0,10,0,10,0,9,0,9,0,8,0,8,0,8,0,7,0,7,0,7,0,7,0,7, 0,64,0,57,0,51,0,45,0,40,0,36,0,32,0,29,0,26,0,24,0,22,0,20,0,19,0,18,0,16,0,16, 0,15,0,14,0,13,0,12,0,12,0,11,0,11,0,10,0,10,0,10,0,9,0,9,0,9,0,8,0,8,0,8, 0,64,0,58,0,53,0,48,0,43,0,39,0,35,0,32,0,29,0,27,0,25,0,23,0,22,0,20,0,19,0,18, 0,17,0,16,0,15,0,14,0,14,0,13,0,13,0,12,0,12,0,11,0,11,0,10,0,10,0,10,0,9,0,9, 0,64,0,59,0,54,0,49,0,45,0,41,0,38,0,35,0,32,0,30,0,27,0,26,0,24,0,22,0,21,0,20, 0,19,0,18,0,17,0,16,0,16,0,15,0,14,0,14,0,13,0,13,0,12,0,12,0,11,0,11,0,11,0,10, 0,64,0,59,0,55,0,51,0,47,0,43,0,40,0,37,0,34,0,32,0,30,0,28,0,26,0,25,0,23,0,22, 0,21,0,20,0,19,0,18,0,17,0,16,0,16,0,15,0,15,0,14,0,14,0,13,0,13,0,12,0,12,0,12, 0,64,0,60,0,56,0,52,0,48,0,45,0,42,0,39,0,37,0,32,0,32,0,30,0,28,0,27,0,25,0,24, 0,23,0,22,0,21,0,20,0,19,0,18,0,17,0,17,0,16,0,16,0,15,0,14,0,14,0,14,0,13,0,13, 0,64,0,60,0,57,0,53,0,50,0,47,0,44,0,41,0,38,0,36,0,34,0,32,0,30,0,29,0,27,0,26, 0,25,0,23,0,22,0,21,0,20,0,20,0,19,0,18,0,18,0,17,0,16,0,16,0,15,0,15,0,14,0,14, 0,64,0,61,0,57,0,54,0,51,0,48,0,45,0,42,0,40,0,38,0,36,0,34,0,32,0,30,0,29,0,27, 0,26,0,25,0,24,0,23,0,22,0,21,0,20,0,20,0,19,0,18,0,18,0,17,0,16,0,16,0,16,0,15, 0,64,0,61,0,58,0,55,0,52,0,49,0,46,0,44,0,42,0,39,0,37,0,35,0,34,0,32,0,30,0,29, 0,28,0,27,0,25,0,24,0,23,0,23,0,22,0,21,0,20,0,20,0,19,0,18,0,18,0,17,0,17,0,16, 0,64,0,61,0,58,0,55,0,53,0,50,0,48,0,45,0,43,0,41,0,39,0,37,0,35,0,34,0,32,0,31, 0,29,0,28,0,27,0,26,0,25,0,24,0,23,0,22,0,22,0,21,0,20,0,19,0,19,0,18,0,18,0,17, 0,64,0,61,0,59,0,56,0,53,0,51,0,48,0,46,0,44,0,42,0,40,0,38,0,37,0,35,0,33,0,32, 0,31,0,29,0,28,0,27,0,26,0,25,0,24,0,24,0,23,0,22,0,21,0,21,0,20,0,19,0,19,0,18, 0,64,0,61,0,59,0,56,0,54,0,52,0,49,0,47,0,45,0,43,0,41,0,39,0,38,0,36,0,35,0,33, 0,32,0,31,0,30,0,29,0,27,0,27,0,26,0,25,0,24,0,23,0,22,0,22,0,21,0,21,0,20,0,19, 0,64,0,62,0,59,0,57,0,55,0,52,0,50,0,48,0,46,0,44,0,42,0,41,0,39,0,37,0,36,0,35, 0,33,0,32,0,31,0,30,0,29,0,28,0,27,0,26,0,25,0,24,0,24,0,23,0,22,0,22,0,21,0,20, 0,64,0,62,0,59,0,57,0,55,0,53,0,51,0,49,0,47,0,45,0,43,0,42,0,40,0,39,0,37,0,36, 0,34,0,33,0,32,0,31,0,30,0,29,0,28,0,27,0,26,0,25,0,25,0,24,0,23,0,23,0,22,0,21, 0,64,0,62,0,60,0,58,0,56,0,54,0,52,0,50,0,48,0,46,0,44,0,43,0,41,0,40,0,38,0,37, 0,35,0,34,0,33,0,32,0,31,0,30,0,29,0,28,0,27,0,26,0,26,0,25,0,24,0,24,0,23,0,22, 0,64,0,62,0,60,0,58,0,56,0,54,0,52,0,50,0,48,0,47,0,45,0,44,0,42,0,41,0,39,0,38, 0,37,0,35,0,34,0,33,0,32,0,31,0,30,0,29,0,28,0,27,0,27,0,26,0,25,0,25,0,24,0,23, 0,64,0,62,0,60,0,58,0,56,0,54,0,53,0,51,0,49,0,48,0,46,0,44,0,43,0,41,0,40,0,39, 0,37,0,36,0,35,0,34,0,33,0,32,0,31,0,30,0,29,0,28,0,28,0,27,0,26,0,26,0,25,0,24, 0,64,0,62,0,60,0,58,0,57,0,55,0,53,0,51,0,50,0,48,0,47,0,45,0,44,0,42,0,41,0,40, 0,38,0,37,0,36,0,35,0,34,0,33,0,32,0,31,0,30,0,29,0,29,0,28,0,27,0,26,0,26,0,25, 0,64,0,62,0,60,0,59,0,57,0,55,0,54,0,52,0,50,0,49,0,47,0,46,0,44,0,43,0,42,0,40, 0,39,0,38,0,37,0,36,0,35,0,34,0,33,0,32,0,31,0,30,0,30,0,29,0,28,0,27,0,27,0,26, 0,64,0,62,0,61,0,59,0,57,0,56,0,54,0,52,0,51,0,49,0,48,0,46,0,45,0,44,0,42,0,41, 0,40,0,39,0,38,0,37,0,36,0,35,0,34,0,33,0,32,0,31,0,30,0,30,0,29,0,28,0,27,0,27, 0,64,0,62,0,61,0,59,0,58,0,56,0,54,0,53,0,51,0,50,0,48,0,47,0,46,0,44,0,43,0,42, 0,41,0,40,0,39,0,38,0,37,0,36,0,35,0,34,0,33,0,32,0,31,0,30,0,30,0,29,0,28,0,28, 0,64,0,62,0,61,0,59,0,58,0,56,0,55,0,53,0,52,0,50,0,49,0,48,0,46,0,45,0,44,0,43, 0,42,0,40,0,39,0,38,0,37,0,36,0,35,0,34,0,34,0,33,0,32,0,31,0,30,0,30,0,29,0,28, 0,64,0,62,0,61,0,59,0,58,0,57,0,55,0,54,0,52,0,51,0,50,0,48,0,47,0,46,0,45,0,43, 0,42,0,41,0,40,0,39,0,38,0,37,0,36,0,35,0,34,0,34,0,33,0,32,0,31,0,31,0,30,0,29, 0,64,0,63,0,61,0,60,0,58,0,57,0,55,0,54,0,53,0,51,0,50,0,49,0,48,0,46,0,45,0,44, 0,43,0,42,0,41,0,40,0,39,0,38,0,37,0,36,0,35,0,34,0,34,0,33,0,32,0,31,0,31,0,30, 0,64,0,63,0,61,0,60,0,58,0,57,0,56,0,54,0,53,0,52,0,50,0,49,0,48,0,47,0,46,0,45, 0,43,0,42,0,41,0,40,0,39,0,38,0,38,0,37,0,36,0,35,0,34,0,33,0,33,0,32,0,31,0,31, 0,64,0,63,0,61,0,60,0,59,0,57,0,56,0,55,0,53,0,52,0,51,0,50,0,48,0,47,0,46,0,45, 0,44,0,43,0,42,0,41,0,40,0,39,0,38,0,37,0,37,0,36,0,35,0,34,0,33,0,33,0,32,0,31, 0,64,0,63,0,61,0,60,0,59,0,57,0,56,0,55,0,53,0,52,0,51,0,50,0,49,0,48,0,47,0,46, 0,45,0,44,0,43,0,42,0,41,0,40,0,39,0,38,0,37,0,36,0,36,0,35,0,34,0,33,0,33,0,32, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char ST011[53248] = { 6,0,192,7,0,241,8,192,151,7,0,193,145,0,0,2,4,192,32,0,20,52,64,144,145,0,0,2,60,192,32,0, 20,80,0,144,0,0,160,68,37,192,159,0,0,129,86,192,144,0,21,21,0,0,104,0,0,0,0,128,0,0,8,184, 65,145,0,0,8,56,66,145,0,0,8,228,66,145,0,0,160,0,0,160,4,3,168,0,0,160,164,3,168,0,0,160, 248,5,168,96,11,168,112,12,168,128,13,168,52,15,168,184,16,168,168,30,168,20,31,168,196,31,168,173,9,168,125,19, 168,253,20,168,101,28,168,170,3,168,20,31,168,196,31,168,173,9,168,58,8,168,0,32,168,72,58,168,17,55,168,197, 57,168,118,32,168,178,47,168,146,62,168,86,10,168,168,4,168,0,0,160,118,25,168,78,26,168,0,0,160,94,29,168, 78,26,168,0,0,160,39,1,168,0,0,160,163,2,168,0,0,160,0,0,160,35,7,168,0,0,160,0,0,160,135,11, 168,0,0,160,251,18,168,0,0,160,0,0,160,63,43,168,0,0,160,224,3,168,248,5,168,96,11,168,112,12,168,128, 13,168,52,15,168,184,16,168,168,30,168,20,31,168,196,31,168,173,9,168,125,19,168,253,20,168,101,28,168,170,3,168, 20,31,168,196,31,168,173,9,168,58,8,168,0,32,168,72,58,168,17,55,168,197,57,168,118,32,168,178,47,168,146,62, 168,86,10,168,216,5,168,0,0,160,1,0,192,10,192,255,194,63,192,20,128,18,35,128,15,208,128,19,48,128,17,47, 0,9,2,0,194,16,128,20,192,129,145,1,0,192,194,63,192,20,128,18,35,128,15,208,128,19,48,128,17,0,128,4, 32,130,145,0,0,9,2,0,194,16,128,20,232,129,145,6,0,192,24,194,151,0,0,160,198,63,192,36,194,151,7,0, 192,22,0,0,48,194,151,0,0,160,6,0,192,1,0,192,10,192,255,194,63,192,20,128,18,35,128,15,208,128,19,48, 128,17,0,128,4,180,130,145,0,0,9,2,0,194,16,128,20,68,130,145,1,0,192,2,0,194,195,255,255,20,0,9, 63,128,8,124,130,145,1,0,192,20,0,9,194,255,255,0,128,4,204,130,145,2,0,194,16,128,20,140,130,145,6,0, 192,172,194,151,0,0,160,70,0,192,184,194,151,7,0,192,22,0,0,196,194,151,0,0,160,134,0,192,208,194,151,7, 0,192,22,0,0,220,194,151,0,0,160,7,0,192,1,0,192,2,0,194,21,0,9,102,128,8,248,194,151,124,130,145, 0,0,160,65,5,192,2,32,192,6,0,192,7,0,233,20,0,9,24,195,151,143,128,8,20,131,145,1,0,192,2,5, 192,3,224,255,20,0,9,63,128,8,48,131,145,1,224,255,4,5,192,31,0,0,132,7,192,31,0,0,4,10,192,31, 0,0,132,12,192,31,0,0,4,15,192,31,0,0,132,17,192,31,0,0,4,20,192,31,0,0,132,22,192,31,0,0, 4,25,192,31,0,0,129,27,192,66,5,192,3,224,255,20,0,9,63,128,8,148,131,145,0,0,64,7,0,192,6,0, 192,172,195,151,129,0,0,180,195,151,130,0,0,7,0,193,20,0,9,246,128,8,7,0,233,20,0,9,208,195,151,246, 128,8,204,131,145,0,0,64,65,5,192,69,27,192,20,0,0,242,0,0,32,128,18,44,196,148,4,196,145,2,24,192, 0,128,3,35,0,0,84,0,0,242,0,0,32,128,18,32,196,145,2,24,192,0,128,3,63,0,0,20,0,0,47,0, 0,0,1,9,66,16,192,16,128,20,232,131,145,20,0,0,242,0,0,32,128,18,88,196,145,2,24,192,0,128,3,47, 0,0,65,34,192,69,36,192,194,1,192,20,0,0,250,0,0,84,1,0,253,0,0,223,0,0,20,0,8,239,128,8, 100,132,145,196,36,192,129,32,192,0,0,4,4,37,192,130,32,192,0,128,4,31,0,0,196,36,192,47,0,64,67,0, 192,68,38,192,241,0,0,48,0,20,192,4,144,1,0,192,31,0,0,132,38,192,241,0,0,48,0,20,216,4,144,1, 0,192,31,0,0,196,38,192,241,0,0,48,0,20,240,4,144,1,0,192,31,0,0,1,0,192,196,37,192,250,0,0, 141,0,192,2,0,192,0,128,53,0,128,11,32,0,21,68,38,192,250,0,0,13,4,192,2,0,192,0,128,53,0,128, 11,32,0,21,132,38,192,250,0,0,13,252,255,2,0,192,0,128,53,0,128,11,32,0,21,196,38,192,250,0,0,13, 4,192,2,0,192,0,128,53,0,128,11,32,0,21,68,39,192,0,0,5,4,38,192,250,0,0,77,85,193,2,0,192, 0,128,37,32,0,21,19,0,0,4,39,192,250,0,0,13,0,240,2,0,192,0,128,37,32,0,21,132,37,192,31,0, 0,49,0,0,4,39,192,250,0,0,141,255,255,2,0,192,0,128,53,0,128,11,32,0,21,196,37,192,31,0,0,0, 0,64,168,4,168,2,0,192,132,37,192,0,128,4,47,128,20,196,37,192,0,128,4,47,0,64,129,181,193,184,10,168, 12,11,168,12,11,168,12,11,168,12,11,168,12,11,168,12,11,168,12,11,168,184,10,168,129,176,193,66,5,192,3,0, 192,20,0,9,63,128,8,44,134,145,1,204,193,66,5,192,3,0,192,20,0,9,63,128,8,68,134,145,196,36,192,254, 0,0,10,0,192,66,171,193,0,128,21,36,128,20,2,97,192,243,128,21,37,0,0,97,0,0,31,0,0,48,0,20, 208,0,21,26,0,0,130,171,193,0,128,21,36,128,20,2,97,192,243,128,21,37,0,0,97,0,0,31,0,0,48,0, 20,208,0,21,26,0,0,194,171,193,0,128,21,36,128,20,2,97,192,243,128,21,37,0,0,97,0,0,31,0,0,48, 0,20,208,0,21,26,0,0,77,6,192,1,0,192,0,0,53,0,0,11,0,0,10,0,0,9,4,38,192,31,0,0, 10,0,192,194,173,193,0,128,21,36,128,20,130,90,192,243,128,21,37,0,0,97,0,0,31,0,0,48,0,20,208,0, 21,26,0,0,2,174,193,0,128,21,36,128,20,130,90,192,243,128,21,37,0,0,97,0,0,31,0,0,48,0,20,208, 0,21,26,0,0,66,174,193,0,128,21,36,128,20,130,90,192,243,128,21,37,0,0,97,0,0,31,0,0,48,0,20, 208,0,21,26,0,0,66,176,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0,97,0,0,31,0,0,48,0, 20,208,0,21,26,0,0,194,176,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0,97,0,0,31,0,0,48, 0,20,208,0,21,26,0,0,194,178,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0,97,0,0,31,0,0, 48,0,20,208,0,21,26,0,0,2,179,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0,97,0,0,31,0, 0,48,0,20,208,0,21,26,0,0,66,179,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0,97,0,0,31, 0,0,48,0,20,208,0,21,26,0,0,13,10,192,1,0,192,0,0,53,0,0,11,0,0,10,0,0,9,4,38,192, 0,0,5,31,0,0,4,37,192,254,0,0,10,0,192,194,181,193,0,128,21,36,128,20,2,97,192,243,128,21,37,0, 0,97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,130,181,193,0,128,21,36,128,20,2,97,192,243,128,21,37, 0,0,97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,66,181,193,0,128,21,36,128,20,2,97,192,243,128,21, 37,0,0,97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,77,6,192,1,0,192,0,0,53,0,0,11,4,38, 192,0,0,5,31,0,0,10,0,192,66,179,193,0,128,21,36,128,20,130,90,192,243,128,21,37,0,0,97,0,0,31, 0,0,48,0,20,208,0,21,26,0,0,2,179,193,0,128,21,36,128,20,130,90,192,243,128,21,37,0,0,97,0,0, 31,0,0,48,0,20,208,0,21,26,0,0,194,178,193,0,128,21,36,128,20,130,90,192,243,128,21,37,0,0,97,0, 0,31,0,0,48,0,20,208,0,21,26,0,0,194,176,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0,97, 0,0,31,0,0,48,0,20,208,0,21,26,0,0,66,176,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0,0, 97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,66,174,193,0,128,21,36,128,20,194,93,192,243,128,21,37,0, 0,97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,2,174,193,0,128,21,36,128,20,194,93,192,243,128,21,37, 0,0,97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,194,173,193,0,128,21,36,128,20,194,93,192,243,128,21, 37,0,0,97,0,0,31,0,0,48,0,20,208,0,21,26,0,0,13,10,192,1,0,192,0,0,53,0,0,11,4,38, 192,0,0,5,31,0,0,0,0,64,20,0,9,15,0,192,20,0,9,143,0,192,20,0,9,15,1,192,20,0,9,79, 1,192,20,0,9,79,1,192,20,0,9,79,1,192,20,0,9,79,1,192,20,0,9,79,1,192,20,0,9,15,1,192, 20,0,9,143,0,192,0,0,64,20,0,9,15,0,192,20,0,9,207,0,192,20,0,9,79,1,192,20,0,9,143,1, 192,20,0,9,143,1,192,20,0,9,143,1,192,20,0,9,143,1,192,20,0,9,143,1,192,20,0,9,79,1,192,20, 0,9,207,0,192,0,0,64,65,239,193,66,2,192,67,0,192,20,0,9,63,128,8,108,139,145,1,2,192,66,5,192, 16,128,21,36,128,20,2,16,192,0,128,4,100,204,145,194,7,192,16,128,21,36,128,20,2,16,192,0,128,4,100,204, 145,66,10,192,16,128,21,36,128,20,2,16,192,0,128,4,100,204,145,194,12,192,16,128,21,36,128,20,2,16,192,0, 128,4,100,204,145,66,15,192,16,128,21,36,128,20,2,16,192,0,128,4,100,204,145,194,17,192,16,128,21,36,128,20, 2,16,192,0,128,4,100,204,145,66,20,192,16,128,21,36,128,20,2,16,192,0,128,4,100,204,145,194,22,192,16,128, 21,36,128,20,2,16,192,0,128,4,100,204,145,66,25,192,16,128,21,36,128,20,2,16,192,0,128,4,100,204,145,66, 239,193,16,128,21,36,128,20,15,0,192,0,0,8,124,11,148,0,0,64,129,241,193,66,2,192,67,0,192,20,0,9, 63,128,8,124,140,145,1,2,192,66,5,192,16,128,21,36,128,20,2,8,192,0,128,4,116,205,145,194,7,192,16,128, 21,36,128,20,2,8,192,0,128,4,116,205,145,66,10,192,16,128,21,36,128,20,2,8,192,0,128,4,116,205,145,194, 12,192,16,128,21,36,128,20,2,8,192,0,128,4,116,205,145,66,15,192,16,128,21,36,128,20,2,8,192,0,128,4, 116,205,145,194,17,192,16,128,21,36,128,20,2,8,192,0,128,4,116,205,145,66,20,192,16,128,21,36,128,20,2,8, 192,0,128,4,116,205,145,194,22,192,16,128,21,36,128,20,2,8,192,0,128,4,116,205,145,66,25,192,16,128,21,36, 128,20,2,8,192,0,128,4,116,205,145,130,241,193,16,128,21,36,128,20,15,0,192,0,0,8,140,12,148,0,0,64, 1,105,192,194,32,192,3,0,192,20,0,9,63,128,8,140,141,145,129,39,192,194,32,192,3,0,192,20,0,9,63,128, 8,164,141,145,196,36,192,241,0,0,16,0,18,52,78,145,67,253,255,14,13,192,13,8,192,56,14,168,172,14,168,195, 253,255,14,13,192,13,24,192,56,14,168,195,255,255,14,14,192,13,32,192,56,14,168,67,0,192,14,14,192,13,32,192, 56,14,168,67,2,192,14,13,192,13,24,192,56,14,168,131,2,192,14,14,192,13,16,192,56,14,168,195,2,192,14,13, 192,13,8,192,56,14,168,0,0,64,196,36,192,241,0,0,2,0,192,48,0,21,20,0,0,0,128,5,68,206,145,2, 16,192,0,128,2,168,206,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5,104,206,145,2,63,192,0,128,2, 0,128,20,168,142,145,2,105,192,16,128,21,36,128,20,239,0,0,130,39,192,208,128,21,36,128,20,239,0,0,0,0, 64,131,253,255,14,14,192,196,36,192,241,0,0,2,0,192,48,0,21,20,0,0,0,128,5,192,206,145,2,16,192,0, 128,2,48,207,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5,228,206,145,2,9,192,0,128,4,16,207,145, 2,63,192,0,128,2,0,128,20,48,143,145,2,105,192,16,128,21,36,128,20,15,16,192,130,39,192,208,128,21,36,128, 20,15,16,192,0,0,64,4,37,192,241,0,0,16,0,18,184,79,145,195,2,192,14,21,192,13,8,192,188,15,168,48, 16,168,67,2,192,14,21,192,13,24,192,188,15,168,67,0,192,14,22,192,13,32,192,188,15,168,195,255,255,14,22,192, 13,32,192,188,15,168,195,253,255,14,21,192,13,24,192,188,15,168,131,253,255,14,22,192,13,16,192,188,15,168,67,253, 255,14,21,192,13,8,192,188,15,168,0,0,64,4,37,192,241,0,0,2,0,192,48,0,21,20,0,0,0,128,5,200, 207,145,2,8,192,0,128,2,44,208,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5,236,207,145,2,63,192, 0,128,2,0,128,20,44,144,145,2,105,192,16,128,21,36,128,20,239,0,0,130,39,192,208,128,21,36,128,20,239,0, 0,0,0,64,131,2,192,14,14,192,4,37,192,241,0,0,2,0,192,48,0,21,20,0,0,0,128,5,68,208,145,2, 8,192,0,128,2,180,208,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5,104,208,145,2,17,192,0,128,4, 148,208,145,2,63,192,0,128,2,0,128,20,180,144,145,2,105,192,16,128,21,36,128,20,15,16,192,130,39,192,208,128, 21,36,128,20,15,16,192,0,0,64,65,72,192,194,32,192,3,0,192,20,0,9,63,128,8,196,144,145,193,12,193,194, 32,192,3,0,192,20,0,9,63,128,8,220,144,145,129,45,193,194,32,192,3,0,192,20,0,9,63,128,8,244,144,145, 65,5,192,20,0,0,2,0,192,0,128,5,116,209,145,116,209,148,30,0,0,2,105,192,16,128,21,36,128,20,242,0, 0,0,128,11,0,128,11,0,128,11,0,128,11,0,128,11,67,108,192,48,128,21,37,0,0,106,0,0,20,0,0,130, 15,192,0,128,2,0,128,11,67,100,192,48,128,21,37,0,0,104,0,0,0,0,128,0,0,9,130,27,192,16,128,20, 4,145,145,0,0,64,48,0,21,66,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,130,45,193,16,128, 21,36,128,20,242,0,0,208,128,17,47,0,0,20,0,0,2,0,192,0,128,5,136,209,145,2,15,192,0,128,4,12, 146,145,48,0,21,66,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,130,45,193,16,128,21,36,128,20, 242,0,0,208,128,17,47,0,0,1,0,64,48,0,21,66,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0, 0,194,12,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,20,0,0,2,0,192,0,128,5,16,210,145,2, 23,192,0,128,4,148,146,145,48,0,21,66,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,194,12,193, 16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,1,0,64,194,69,192,16,128,21,36,128,20,2,32,192,0,128, 1,47,0,0,2,43,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,116,17,160,131,253,255,136,17,168,116, 17,160,2,67,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,66,40,193,16,128,21,36,128,20,242,0,0, 208,128,17,47,0,0,130,67,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194,40,193,16,128,21,36,128, 20,242,0,0,208,128,17,47,0,0,116,17,160,130,69,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194, 42,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,69,192,16,128,21,36,128,20,2,32,192,0,128,1, 47,0,0,2,43,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,70,192,16,128,21,36,128,20,2,32, 192,0,128,1,47,0,0,66,43,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,74,192,16,128,21,36, 128,20,2,32,192,0,128,1,47,0,0,194,47,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,75,192, 16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,66,48,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0, 0,116,17,160,130,69,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194,42,193,16,128,21,36,128,20,242, 0,0,208,128,17,47,0,0,194,69,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,2,43,193,16,128,21, 36,128,20,242,0,0,208,128,17,47,0,0,2,70,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,66,43, 193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47, 0,0,66,45,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,72,192,16,128,21,36,128,20,2,32,192, 0,128,1,47,0,0,194,45,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,74,192,16,128,21,36,128, 20,2,32,192,0,128,1,47,0,0,2,48,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,116,17,160,194, 69,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,2,43,193,16,128,21,36,128,20,242,0,0,208,128,17, 47,0,0,2,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,66,45,193,16,128,21,36,128,20,242,0, 0,208,128,17,47,0,0,130,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194,45,193,16,128,21,36, 128,20,242,0,0,208,128,17,47,0,0,194,74,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,2,48,193, 16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,67,253,255,136,17,168,195,253,255,136,17,168,67,2,192,136,17, 168,195,2,192,136,17,168,116,17,160,130,69,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194,42,193,16, 128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,70,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0, 66,43,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,74,192,16,128,21,36,128,20,2,32,192,0,128, 1,47,0,0,194,47,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,75,192,16,128,21,36,128,20,2, 32,192,0,128,1,47,0,0,66,48,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,131,253,255,136,17,168, 195,255,255,136,17,168,67,0,192,136,17,168,131,2,192,136,17,168,116,17,160,130,69,192,16,128,21,36,128,20,2,32, 192,0,128,1,47,0,0,194,42,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,69,192,16,128,21,36, 128,20,2,32,192,0,128,1,47,0,0,2,43,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,70,192, 16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,66,43,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0, 0,2,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,66,45,193,16,128,21,36,128,20,242,0,0,208, 128,17,47,0,0,130,72,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194,45,193,16,128,21,36,128,20, 242,0,0,208,128,17,47,0,0,130,74,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,194,47,193,16,128, 21,36,128,20,242,0,0,208,128,17,47,0,0,194,74,192,16,128,21,36,128,20,2,32,192,0,128,1,47,0,0,2, 48,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,75,192,16,128,21,36,128,20,2,32,192,0,128,1, 47,0,0,66,48,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,116,17,160,194,74,192,16,128,21,36,128, 20,2,0,224,0,128,1,47,0,0,66,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,116,17,160,131, 2,192,16,18,168,116,17,160,130,77,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,2,18,193,16,128,21, 36,128,20,242,0,0,208,128,17,47,0,0,2,77,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,130,17, 193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,116,17,160,2,75,192,16,128,21,36,128,20,2,0,224,0, 128,1,47,0,0,130,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,74,192,16,128,21,36,128,20, 2,0,224,0,128,1,47,0,0,66,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,74,192,16,128, 21,36,128,20,2,0,224,0,128,1,47,0,0,2,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2, 70,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,130,10,193,16,128,21,36,128,20,242,0,0,208,128,17, 47,0,0,130,69,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,2,10,193,16,128,21,36,128,20,242,0, 0,208,128,17,47,0,0,116,17,160,2,75,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,130,15,193,16, 128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,74,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0, 66,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,74,192,16,128,21,36,128,20,2,0,224,0,128, 1,47,0,0,2,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,72,192,16,128,21,36,128,20,2, 0,224,0,128,1,47,0,0,2,13,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,72,192,16,128,21, 36,128,20,2,0,224,0,128,1,47,0,0,130,12,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,69, 192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,66,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47, 0,0,116,17,160,194,74,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,66,15,193,16,128,21,36,128,20, 242,0,0,208,128,17,47,0,0,130,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,2,13,193,16,128, 21,36,128,20,242,0,0,208,128,17,47,0,0,2,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,130, 12,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,69,192,16,128,21,36,128,20,2,0,224,0,128,1, 47,0,0,66,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,195,2,192,16,18,168,67,2,192,16,18, 168,195,253,255,16,18,168,67,253,255,16,18,168,116,17,160,2,75,192,16,128,21,36,128,20,2,0,224,0,128,1,47, 0,0,130,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,74,192,16,128,21,36,128,20,2,0,224, 0,128,1,47,0,0,2,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,70,192,16,128,21,36,128, 20,2,0,224,0,128,1,47,0,0,130,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,69,192,16, 128,21,36,128,20,2,0,224,0,128,1,47,0,0,2,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0, 131,2,192,16,18,168,67,0,192,16,18,168,195,255,255,16,18,168,131,253,255,16,18,168,116,17,160,2,75,192,16,128, 21,36,128,20,2,0,224,0,128,1,47,0,0,130,15,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194, 74,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,66,15,193,16,128,21,36,128,20,242,0,0,208,128,17, 47,0,0,130,74,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,2,15,193,16,128,21,36,128,20,242,0, 0,208,128,17,47,0,0,130,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,2,13,193,16,128,21,36, 128,20,242,0,0,208,128,17,47,0,0,2,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0,0,130,12,193, 16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,2,70,192,16,128,21,36,128,20,2,0,224,0,128,1,47,0, 0,130,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,194,69,192,16,128,21,36,128,20,2,0,224,0, 128,1,47,0,0,66,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,130,69,192,16,128,21,36,128,20, 2,0,224,0,128,1,47,0,0,2,10,193,16,128,21,36,128,20,242,0,0,208,128,17,47,0,0,116,17,160,193,143, 193,194,32,192,3,0,192,20,0,9,63,128,8,180,158,145,65,5,192,20,0,0,2,0,192,0,128,5,0,223,145,0, 223,148,131,7,192,48,128,18,0,128,11,131,109,192,48,128,21,37,0,0,194,143,193,16,128,21,36,128,20,111,0,0, 0,0,9,130,27,192,16,128,20,196,158,145,0,0,64,68,209,193,15,0,192,132,209,193,15,0,192,78,5,192,4,0, 0,1,0,192,0,0,5,168,95,145,168,95,148,2,16,192,10,0,192,0,128,2,80,159,145,74,0,192,221,0,0,66, 209,193,208,128,21,36,128,20,250,0,0,194,143,193,0,128,21,36,128,20,241,0,0,194,143,193,208,128,21,36,128,20, 0,0,4,80,95,144,66,209,193,0,128,21,36,128,20,223,0,0,66,209,193,224,128,21,36,128,20,15,0,0,1,0, 0,0,0,9,30,0,0,130,27,192,16,128,20,40,159,145,0,0,64,1,105,192,194,32,192,3,30,222,20,0,9,63, 128,8,208,159,145,65,78,193,194,32,192,3,0,192,20,0,9,63,128,8,232,159,145,68,209,193,241,0,0,194,143,193, 16,128,21,36,128,20,250,0,0,130,39,192,16,128,21,36,128,20,242,0,0,35,128,11,0,128,11,0,128,11,0,128, 11,0,128,11,141,165,192,224,128,21,37,0,0,109,0,0,30,0,0,20,0,0,130,7,192,0,128,2,48,128,17,0, 128,11,131,113,192,48,128,21,37,0,0,104,0,0,0,0,128,66,209,193,32,0,21,20,0,20,0,0,5,252,31,145, 0,0,64,128,0,21,2,105,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,66,78, 193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,20,0,0,2,0,192,0,128,5,133,192,145,73,193,148,9, 1,160,128,0,21,66,78,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,20,0,0,2,0,192,0,128,5, 217,192,145,73,193,148,130,15,192,0,128,2,0,128,11,48,128,21,37,0,0,98,0,0,0,128,8,73,193,148,217,128, 145,128,0,21,66,78,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,1,0,64,66,102,192,16,128,21,36, 128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,130,75,193,16,128,21,36,128,20,66,0,192,0,128,5, 47,0,64,130,102,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,194,75,193,16,128, 21,36,128,20,66,0,192,0,128,5,47,0,64,194,102,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208, 128,17,47,0,0,2,76,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,194,104,192,16,128,21,36,128,20, 194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,2,78,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0, 64,66,105,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,130,78,193,16,128,21,36, 128,20,66,0,192,0,128,5,47,0,64,66,107,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17, 47,0,0,130,80,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,130,107,192,16,128,21,36,128,20,194,63, 192,0,128,2,0,128,15,208,128,17,47,0,0,194,80,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,194, 107,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,2,81,193,16,128,21,36,128,20, 66,0,192,0,128,5,47,0,64,2,10,193,16,128,21,36,128,20,242,0,0,224,128,18,61,195,145,130,75,193,16,128, 21,36,128,20,66,0,192,0,128,5,47,0,64,0,0,64,66,10,193,16,128,21,36,128,20,242,0,0,224,128,18,113, 195,145,194,75,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,0,0,64,130,10,193,16,128,21,36,128,20, 242,0,0,224,128,18,165,195,145,2,76,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,0,0,64,130,12, 193,16,128,21,36,128,20,242,0,0,224,128,18,217,195,145,2,78,193,16,128,21,36,128,20,66,0,192,0,128,5,47, 0,64,0,0,64,2,13,193,16,128,21,36,128,20,242,0,0,224,128,18,13,196,145,130,78,193,16,128,21,36,128,20, 66,0,192,0,128,5,47,0,64,0,0,64,2,15,193,16,128,21,36,128,20,242,0,0,224,128,18,65,196,145,130,80, 193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,0,0,64,66,15,193,16,128,21,36,128,20,242,0,0,224, 128,18,117,196,145,194,80,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,0,0,64,130,15,193,16,128,21, 36,128,20,242,0,0,224,128,18,169,196,145,2,81,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,64,0,0, 64,133,1,168,109,0,160,134,253,255,131,133,192,133,0,168,109,0,160,194,99,192,16,128,21,36,128,20,194,63,192,0, 128,2,0,128,15,208,128,17,47,0,0,2,73,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,66,100,192, 16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,130,73,193,16,128,21,36,128,20,66,0, 192,0,128,5,47,0,0,109,0,160,77,1,168,213,2,168,133,1,168,189,1,168,101,2,168,109,0,160,77,1,168,133, 1,168,157,2,168,189,1,168,245,1,168,45,2,168,109,0,160,133,1,168,157,2,168,245,1,168,45,2,168,70,253,255, 131,145,192,133,0,168,198,2,192,131,149,192,133,0,168,198,253,255,131,145,192,133,0,168,70,2,192,131,149,192,133,0, 168,109,0,160,77,1,168,213,2,168,189,1,168,101,2,168,134,253,255,131,133,192,133,0,168,134,2,192,131,137,192,133, 0,168,198,255,255,131,157,192,133,0,168,70,0,192,131,157,192,133,0,168,109,0,160,130,75,193,16,128,21,36,128,20, 66,0,192,0,128,5,47,0,0,194,75,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,2,76,193,16,128, 21,36,128,20,66,0,192,0,128,5,47,0,0,2,78,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,130, 78,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,130,80,193,16,128,21,36,128,20,66,0,192,0,128,5, 47,0,0,194,80,193,16,128,21,36,128,20,66,0,192,0,128,5,47,0,0,2,81,193,16,128,21,36,128,20,66,0, 192,0,128,5,47,0,0,109,0,160,65,3,168,109,0,160,65,3,168,109,0,160,77,1,168,213,2,168,65,3,168,117, 3,168,17,4,168,109,0,160,13,3,168,121,4,168,133,1,168,117,3,168,17,4,168,109,0,160,13,3,168,121,4,168, 65,3,168,189,1,168,101,2,168,109,0,160,13,3,168,121,4,168,65,3,168,117,3,168,17,4,168,77,1,168,65,3, 168,69,4,168,117,3,168,169,3,168,221,3,168,109,0,160,13,3,168,133,1,168,157,2,168,117,3,168,169,3,168,221, 3,168,109,0,160,13,3,168,65,3,168,69,4,168,189,1,168,169,3,168,221,3,168,109,0,160,13,3,168,65,3,168, 69,4,168,117,3,168,245,1,168,45,2,168,109,0,160,70,253,255,131,145,192,133,0,168,198,2,192,131,149,192,133,0, 168,117,3,168,17,4,168,109,0,160,13,3,168,121,4,168,117,3,168,17,4,168,109,0,160,13,3,168,121,4,168,198, 253,255,131,145,192,133,0,168,70,2,192,131,149,192,133,0,168,109,0,160,70,253,255,131,145,192,133,0,168,198,2,192, 131,149,192,133,0,168,65,3,168,69,4,168,117,3,168,17,4,168,169,3,168,221,3,168,109,0,160,13,3,168,121,4, 168,133,1,168,157,2,168,117,3,168,17,4,168,169,3,168,221,3,168,109,0,160,13,3,168,121,4,168,65,3,168,69, 4,168,198,253,255,131,145,192,133,0,168,70,2,192,131,149,192,133,0,168,169,3,168,221,3,168,109,0,160,13,3,168, 121,4,168,65,3,168,69,4,168,117,3,168,17,4,168,245,1,168,45,2,168,109,0,160,65,3,168,69,4,168,169,3, 168,221,3,168,109,0,160,134,253,255,131,133,192,133,0,168,134,2,192,131,137,192,133,0,168,169,3,168,221,3,168,109, 0,160,65,3,168,69,4,168,198,255,255,131,157,192,133,0,168,70,0,192,131,157,192,133,0,168,109,0,160,77,1,168, 213,2,168,65,3,168,69,4,168,117,3,168,17,4,168,169,3,168,221,3,168,109,0,160,13,3,168,121,4,168,134,253, 255,131,133,192,133,0,168,134,2,192,131,137,192,133,0,168,117,3,168,17,4,168,169,3,168,221,3,168,109,0,160,13, 3,168,121,4,168,65,3,168,69,4,168,189,1,168,101,2,168,169,3,168,221,3,168,109,0,160,13,3,168,121,4,168, 65,3,168,69,4,168,117,3,168,17,4,168,198,255,255,131,157,192,133,0,168,70,0,192,131,157,192,133,0,168,109,0, 160,193,137,192,194,32,192,3,30,222,20,0,9,63,128,8,185,137,145,132,209,193,241,0,0,194,143,193,16,128,21,36, 128,20,250,0,0,130,39,192,16,128,21,36,128,20,242,0,0,35,128,11,0,128,11,0,128,11,0,128,11,0,128,11, 205,186,192,224,128,21,37,0,0,109,0,0,30,0,0,20,0,0,130,7,192,0,128,2,48,128,17,0,128,11,195,166, 192,48,128,21,37,0,0,104,0,0,0,0,128,66,209,193,32,0,21,20,0,20,0,0,5,205,9,145,0,0,64,128, 0,21,194,137,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,66,78,193,16,128,21, 36,128,20,2,64,192,0,128,5,47,0,0,20,0,0,2,0,192,0,128,5,85,202,145,25,203,148,217,10,160,128,0, 21,66,78,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,20,0,0,2,0,192,0,128,5,169,202,145,25, 203,148,130,15,192,0,128,2,0,128,11,48,128,21,37,0,0,98,0,0,0,128,8,25,203,148,169,138,145,128,0,21, 66,78,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,1,0,64,130,140,192,16,128,21,36,128,20,194,63, 192,0,128,2,0,128,15,208,128,17,47,0,0,2,81,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,66, 140,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,194,80,193,16,128,21,36,128,20, 2,64,192,0,128,5,47,0,64,2,140,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0, 0,130,80,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,2,138,192,16,128,21,36,128,20,194,63,192,0, 128,2,0,128,15,208,128,17,47,0,0,130,78,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,130,137,192, 16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,2,78,193,16,128,21,36,128,20,2,64, 192,0,128,5,47,0,64,130,135,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,2, 76,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,66,135,192,16,128,21,36,128,20,194,63,192,0,128,2, 0,128,15,208,128,17,47,0,0,194,75,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,2,135,192,16,128, 21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,130,75,193,16,128,21,36,128,20,2,64,192,0, 128,5,47,0,64,66,48,193,16,128,21,36,128,20,242,0,0,224,128,18,13,205,145,2,81,193,16,128,21,36,128,20, 2,64,192,0,128,5,47,0,64,0,0,64,2,48,193,16,128,21,36,128,20,242,0,0,224,128,18,65,205,145,194,80, 193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,0,0,64,194,47,193,16,128,21,36,128,20,242,0,0,224, 128,18,117,205,145,130,80,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,0,0,64,194,45,193,16,128,21, 36,128,20,242,0,0,224,128,18,169,205,145,130,78,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,0,0, 64,66,45,193,16,128,21,36,128,20,242,0,0,224,128,18,221,205,145,2,78,193,16,128,21,36,128,20,2,64,192,0, 128,5,47,0,64,0,0,64,66,43,193,16,128,21,36,128,20,242,0,0,224,128,18,17,206,145,2,76,193,16,128,21, 36,128,20,2,64,192,0,128,5,47,0,64,0,0,64,2,43,193,16,128,21,36,128,20,242,0,0,224,128,18,69,206, 145,194,75,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,0,0,64,194,42,193,16,128,21,36,128,20,242, 0,0,224,128,18,121,206,145,130,75,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,64,0,0,64,85,11,168, 61,10,160,134,2,192,131,137,192,85,10,168,61,10,160,2,143,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128, 15,208,128,17,47,0,0,130,83,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,130,142,192,16,128,21,36, 128,20,194,63,192,0,128,2,0,128,15,208,128,17,47,0,0,2,83,193,16,128,21,36,128,20,2,64,192,0,128,5, 47,0,0,61,10,160,29,11,168,165,12,168,85,11,168,141,11,168,53,12,168,61,10,160,29,11,168,85,11,168,109,12, 168,141,11,168,197,11,168,253,11,168,61,10,160,85,11,168,109,12,168,197,11,168,253,11,168,198,2,192,131,149,192,85, 10,168,70,253,255,131,145,192,85,10,168,70,2,192,131,149,192,85,10,168,198,253,255,131,145,192,85,10,168,61,10,160, 29,11,168,165,12,168,141,11,168,53,12,168,134,2,192,131,137,192,85,10,168,134,253,255,131,133,192,85,10,168,70,0, 192,131,157,192,85,10,168,198,255,255,131,157,192,85,10,168,61,10,160,2,81,193,16,128,21,36,128,20,2,64,192,0, 128,5,47,0,0,194,80,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,130,80,193,16,128,21,36,128,20, 2,64,192,0,128,5,47,0,0,130,78,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,2,78,193,16,128, 21,36,128,20,2,64,192,0,128,5,47,0,0,2,76,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,194, 75,193,16,128,21,36,128,20,2,64,192,0,128,5,47,0,0,130,75,193,16,128,21,36,128,20,2,64,192,0,128,5, 47,0,0,61,10,160,17,13,168,61,10,160,17,13,168,61,10,160,29,11,168,165,12,168,17,13,168,69,13,168,225,13, 168,61,10,160,221,12,168,73,14,168,85,11,168,69,13,168,225,13,168,61,10,160,221,12,168,73,14,168,17,13,168,141, 11,168,53,12,168,61,10,160,221,12,168,73,14,168,17,13,168,69,13,168,225,13,168,29,11,168,17,13,168,21,14,168, 69,13,168,121,13,168,173,13,168,61,10,160,221,12,168,85,11,168,109,12,168,69,13,168,121,13,168,173,13,168,61,10, 160,221,12,168,17,13,168,21,14,168,141,11,168,121,13,168,173,13,168,61,10,160,221,12,168,17,13,168,21,14,168,69, 13,168,197,11,168,253,11,168,61,10,160,198,2,192,131,149,192,85,10,168,70,253,255,131,145,192,85,10,168,69,13,168, 225,13,168,61,10,160,221,12,168,73,14,168,69,13,168,225,13,168,61,10,160,221,12,168,73,14,168,70,2,192,131,149, 192,85,10,168,198,253,255,131,145,192,85,10,168,61,10,160,198,2,192,131,149,192,85,10,168,70,253,255,131,145,192,85, 10,168,17,13,168,21,14,168,69,13,168,225,13,168,121,13,168,173,13,168,61,10,160,221,12,168,73,14,168,85,11,168, 109,12,168,69,13,168,225,13,168,121,13,168,173,13,168,61,10,160,221,12,168,73,14,168,17,13,168,21,14,168,70,2, 192,131,149,192,85,10,168,198,253,255,131,145,192,85,10,168,121,13,168,173,13,168,61,10,160,221,12,168,73,14,168,17, 13,168,21,14,168,69,13,168,225,13,168,197,11,168,253,11,168,61,10,160,17,13,168,21,14,168,121,13,168,173,13,168, 61,10,160,134,2,192,131,137,192,85,10,168,134,253,255,131,133,192,85,10,168,121,13,168,173,13,168,61,10,160,17,13, 168,21,14,168,70,0,192,131,157,192,85,10,168,198,255,255,131,157,192,85,10,168,61,10,160,29,11,168,165,12,168,17, 13,168,21,14,168,69,13,168,225,13,168,121,13,168,173,13,168,61,10,160,221,12,168,73,14,168,134,2,192,131,137,192, 85,10,168,134,253,255,131,133,192,85,10,168,69,13,168,225,13,168,121,13,168,173,13,168,61,10,160,221,12,168,73,14, 168,17,13,168,21,14,168,141,11,168,53,12,168,121,13,168,173,13,168,61,10,160,221,12,168,73,14,168,17,13,168,21, 14,168,69,13,168,225,13,168,70,0,192,131,157,192,85,10,168,198,255,255,131,157,192,85,10,168,61,10,160,65,5,192, 20,0,0,2,0,192,0,128,5,233,212,148,30,0,0,2,105,192,16,128,21,36,128,20,194,63,192,0,128,2,42,128, 3,0,128,15,132,244,193,47,0,0,194,137,192,16,128,21,36,128,20,194,63,192,0,128,2,45,128,3,0,128,15,196, 244,193,47,0,0,66,78,193,16,128,21,36,128,20,194,63,192,0,128,2,38,128,3,0,128,15,35,0,0,20,0,0, 241,0,0,0,0,15,0,0,12,130,0,12,0,128,12,38,0,0,50,0,12,0,128,12,35,0,0,129,0,0,32,0, 20,93,84,144,133,84,145,65,255,255,48,0,21,85,20,144,209,0,0,196,244,193,0,0,4,26,0,0,201,20,144,10, 0,192,201,20,160,65,255,255,128,0,21,125,20,144,225,0,0,132,244,193,0,0,4,29,0,0,201,20,144,13,0,192, 201,20,160,209,0,0,196,244,193,0,0,4,26,0,0,157,20,144,10,0,192,225,0,0,132,244,193,0,0,4,29,0, 0,181,20,144,13,0,192,65,255,255,208,0,21,201,84,144,10,0,192,13,0,192,1,0,0,2,236,192,16,128,21,36, 128,20,226,0,0,0,128,15,208,128,17,47,0,0,0,0,9,130,27,192,16,128,20,129,147,145,0,0,64,129,170,192, 194,32,192,3,0,192,20,0,9,63,128,8,9,149,145,68,209,193,241,0,0,30,0,0,130,170,192,16,128,21,36,128, 20,250,0,0,194,143,193,16,128,21,36,128,20,253,0,0,130,39,192,16,128,21,36,128,20,243,0,0,20,0,0,130, 7,192,0,128,2,48,128,17,0,128,11,3,188,192,48,128,21,37,0,0,104,0,0,0,0,128,130,170,192,16,128,21, 36,128,20,223,0,0,66,209,193,32,0,21,20,0,20,0,0,5,29,21,145,0,0,64,32,0,21,20,0,0,2,0, 192,0,128,5,29,214,148,130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,20,0,0,2,16,192,0, 128,2,29,150,145,194,143,193,16,128,21,36,128,20,243,0,0,2,236,192,16,128,21,36,128,20,2,192,255,0,128,2, 0,128,15,48,128,21,224,128,20,29,214,144,130,0,192,208,128,21,42,0,0,1,0,64,32,0,21,20,0,0,2,0, 192,0,128,5,77,214,148,130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,1,0,64,173,22,160,130, 176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,194,143,193,16,128,21,36,128,20,243,0,0,2,236,192, 16,128,21,36,128,20,2,192,255,0,128,2,0,128,15,48,128,21,224,128,20,173,214,144,130,0,192,208,128,21,42,0, 0,128,0,21,20,0,0,2,0,192,0,128,5,85,214,145,45,215,148,130,176,193,16,128,21,36,128,20,242,0,0,208, 128,21,42,0,0,20,0,0,2,16,192,0,128,2,45,151,145,194,143,193,16,128,21,36,128,20,243,0,0,2,236,192, 16,128,21,36,128,20,2,192,255,0,128,2,0,128,15,48,128,21,224,128,20,45,215,144,130,0,192,208,128,21,42,0, 0,1,0,64,77,23,160,130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,128,0,21,20,0,0,2, 0,192,0,128,5,53,215,145,125,215,148,130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,1,0,64, 130,253,255,161,21,168,121,21,160,134,253,255,81,22,168,121,21,160,194,250,255,161,21,168,66,251,255,161,21,168,121,21, 160,66,253,255,161,21,168,130,253,255,161,21,168,194,253,255,161,21,168,66,2,192,161,21,168,194,2,192,161,21,168,121, 21,160,66,253,255,161,21,168,130,253,255,161,21,168,194,253,255,161,21,168,194,255,255,161,21,168,66,0,192,161,21,168, 130,2,192,161,21,168,121,21,160,130,253,255,161,21,168,194,255,255,161,21,168,66,0,192,161,21,168,130,2,192,161,21, 168,70,253,255,81,22,168,198,253,255,81,22,168,70,2,192,81,22,168,198,2,192,81,22,168,121,21,160,66,253,255,161, 21,168,194,253,255,161,21,168,66,2,192,161,21,168,194,2,192,161,21,168,134,253,255,81,22,168,198,255,255,81,22,168, 70,0,192,81,22,168,134,2,192,81,22,168,121,21,160,121,21,160,130,253,255,33,22,168,121,21,160,134,253,255,49,23, 168,121,21,160,194,250,255,33,22,168,66,251,255,33,22,168,121,21,160,66,253,255,161,21,168,130,253,255,33,22,168,194, 253,255,33,22,168,66,2,192,33,22,168,194,2,192,161,21,168,121,21,160,66,253,255,33,22,168,130,253,255,161,21,168, 194,253,255,33,22,168,66,2,192,33,22,168,194,2,192,33,22,168,121,21,160,66,253,255,33,22,168,130,253,255,33,22, 168,194,253,255,161,21,168,66,2,192,161,21,168,194,2,192,33,22,168,121,21,160,66,253,255,33,22,168,130,253,255,33, 22,168,194,253,255,33,22,168,66,2,192,33,22,168,194,2,192,33,22,168,121,21,160,66,253,255,161,21,168,130,253,255, 33,22,168,194,253,255,33,22,168,194,255,255,33,22,168,66,0,192,33,22,168,130,2,192,33,22,168,121,21,160,66,253, 255,33,22,168,130,253,255,161,21,168,194,253,255,33,22,168,194,255,255,33,22,168,66,0,192,33,22,168,130,2,192,161, 21,168,121,21,160,66,253,255,33,22,168,130,253,255,33,22,168,194,253,255,161,21,168,194,255,255,33,22,168,66,0,192, 33,22,168,130,2,192,33,22,168,121,21,160,66,253,255,33,22,168,130,253,255,33,22,168,194,253,255,33,22,168,194,255, 255,161,21,168,66,0,192,161,21,168,130,2,192,33,22,168,121,21,160,130,253,255,33,22,168,194,255,255,33,22,168,66, 0,192,33,22,168,130,2,192,33,22,168,70,253,255,81,22,168,198,253,255,49,23,168,70,2,192,49,23,168,198,2,192, 81,22,168,121,21,160,130,253,255,161,21,168,194,255,255,33,22,168,66,0,192,33,22,168,130,2,192,161,21,168,70,253, 255,49,23,168,198,253,255,49,23,168,70,2,192,49,23,168,198,2,192,49,23,168,121,21,160,130,253,255,33,22,168,194, 255,255,33,22,168,66,0,192,33,22,168,130,2,192,33,22,168,70,253,255,49,23,168,198,253,255,81,22,168,70,2,192, 81,22,168,198,2,192,49,23,168,121,21,160,130,253,255,33,22,168,194,255,255,161,21,168,66,0,192,161,21,168,130,2, 192,33,22,168,70,253,255,49,23,168,198,253,255,49,23,168,70,2,192,49,23,168,198,2,192,49,23,168,121,21,160,66, 253,255,161,21,168,194,253,255,33,22,168,66,2,192,33,22,168,194,2,192,161,21,168,134,253,255,49,23,168,198,255,255, 49,23,168,70,0,192,49,23,168,134,2,192,49,23,168,121,21,160,66,253,255,33,22,168,194,253,255,33,22,168,66,2, 192,33,22,168,194,2,192,33,22,168,134,253,255,81,22,168,198,255,255,49,23,168,70,0,192,49,23,168,134,2,192,81, 22,168,121,21,160,66,253,255,33,22,168,194,253,255,161,21,168,66,2,192,161,21,168,194,2,192,33,22,168,134,253,255, 49,23,168,198,255,255,49,23,168,70,0,192,49,23,168,134,2,192,49,23,168,121,21,160,66,253,255,33,22,168,194,253, 255,33,22,168,66,2,192,33,22,168,194,2,192,33,22,168,134,253,255,49,23,168,198,255,255,81,22,168,70,0,192,81, 22,168,134,2,192,49,23,168,121,21,160,132,209,193,241,0,0,30,0,0,130,170,192,16,128,21,36,128,20,250,0,0, 194,143,193,16,128,21,36,128,20,253,0,0,130,39,192,16,128,21,36,128,20,243,0,0,20,0,0,130,7,192,0,128, 2,48,128,17,0,128,11,3,208,192,48,128,21,37,0,0,104,0,0,0,0,128,130,170,192,16,128,21,36,128,20,223, 0,0,66,209,193,32,0,21,20,0,20,0,0,5,109,28,145,0,0,64,32,0,21,20,0,0,2,0,192,0,128,5, 105,221,148,130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,20,0,0,2,8,192,0,128,2,105,157, 145,194,143,193,16,128,21,36,128,20,243,0,0,2,236,192,16,128,21,36,128,20,194,63,192,0,128,2,48,128,21,224, 128,20,105,221,144,130,0,192,208,128,21,42,0,0,1,0,64,32,0,21,20,0,0,2,0,192,0,128,5,153,221,148, 130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,1,0,64,245,29,160,130,176,193,16,128,21,36,128, 20,242,0,0,208,128,21,42,0,0,194,143,193,16,128,21,36,128,20,243,0,0,2,236,192,16,128,21,36,128,20,194, 63,192,0,128,2,48,128,21,224,128,20,245,221,144,130,0,192,208,128,21,42,0,0,128,0,21,20,0,0,2,0,192, 0,128,5,161,221,145,113,222,148,130,176,193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,20,0,0,2,8, 192,0,128,2,113,158,145,194,143,193,16,128,21,36,128,20,243,0,0,2,236,192,16,128,21,36,128,20,194,63,192,0, 128,2,48,128,21,224,128,20,113,222,144,130,0,192,208,128,21,42,0,0,1,0,64,145,30,160,130,176,193,16,128,21, 36,128,20,242,0,0,208,128,21,42,0,0,128,0,21,20,0,0,2,0,192,0,128,5,121,222,145,193,222,148,130,176, 193,16,128,21,36,128,20,242,0,0,208,128,21,42,0,0,1,0,64,130,2,192,241,28,168,201,28,160,134,2,192,157, 29,168,201,28,160,66,5,192,241,28,168,194,4,192,241,28,168,201,28,160,194,2,192,241,28,168,130,2,192,241,28,168, 66,2,192,241,28,168,194,253,255,241,28,168,66,253,255,241,28,168,201,28,160,194,2,192,241,28,168,130,2,192,241,28, 168,66,2,192,241,28,168,66,0,192,241,28,168,194,255,255,241,28,168,130,253,255,241,28,168,201,28,160,130,2,192,241, 28,168,66,0,192,241,28,168,194,255,255,241,28,168,130,253,255,241,28,168,198,2,192,157,29,168,70,2,192,157,29,168, 198,253,255,157,29,168,70,253,255,157,29,168,201,28,160,194,2,192,241,28,168,66,2,192,241,28,168,194,253,255,241,28, 168,66,253,255,241,28,168,134,2,192,157,29,168,70,0,192,157,29,168,198,255,255,157,29,168,134,253,255,157,29,168,201, 28,160,201,28,160,130,2,192,109,29,168,201,28,160,134,2,192,117,30,168,201,28,160,66,5,192,109,29,168,194,4,192, 109,29,168,201,28,160,194,2,192,241,28,168,130,2,192,109,29,168,66,2,192,109,29,168,194,253,255,109,29,168,66,253, 255,241,28,168,201,28,160,194,2,192,109,29,168,130,2,192,241,28,168,66,2,192,109,29,168,194,253,255,109,29,168,66, 253,255,109,29,168,201,28,160,194,2,192,109,29,168,130,2,192,109,29,168,66,2,192,241,28,168,194,253,255,241,28,168, 66,253,255,109,29,168,201,28,160,194,2,192,109,29,168,130,2,192,109,29,168,66,2,192,109,29,168,194,253,255,109,29, 168,66,253,255,109,29,168,201,28,160,194,2,192,241,28,168,130,2,192,109,29,168,66,2,192,109,29,168,66,0,192,109, 29,168,194,255,255,109,29,168,130,253,255,109,29,168,201,28,160,194,2,192,109,29,168,130,2,192,241,28,168,66,2,192, 109,29,168,66,0,192,109,29,168,194,255,255,109,29,168,130,253,255,241,28,168,201,28,160,194,2,192,109,29,168,130,2, 192,109,29,168,66,2,192,241,28,168,66,0,192,109,29,168,194,255,255,109,29,168,130,253,255,109,29,168,201,28,160,194, 2,192,109,29,168,130,2,192,109,29,168,66,2,192,109,29,168,66,0,192,241,28,168,194,255,255,241,28,168,130,253,255, 109,29,168,201,28,160,130,2,192,109,29,168,66,0,192,109,29,168,194,255,255,109,29,168,130,253,255,109,29,168,198,2, 192,157,29,168,70,2,192,117,30,168,198,253,255,117,30,168,70,253,255,157,29,168,201,28,160,130,2,192,241,28,168,66, 0,192,109,29,168,194,255,255,109,29,168,130,253,255,241,28,168,198,2,192,117,30,168,70,2,192,117,30,168,198,253,255, 117,30,168,70,253,255,117,30,168,201,28,160,130,2,192,109,29,168,66,0,192,109,29,168,194,255,255,109,29,168,130,253, 255,109,29,168,198,2,192,117,30,168,70,2,192,157,29,168,198,253,255,157,29,168,70,253,255,117,30,168,201,28,160,130, 2,192,109,29,168,66,0,192,241,28,168,194,255,255,241,28,168,130,253,255,109,29,168,198,2,192,117,30,168,70,2,192, 117,30,168,198,253,255,117,30,168,70,253,255,117,30,168,201,28,160,194,2,192,241,28,168,66,2,192,109,29,168,194,253, 255,109,29,168,66,253,255,241,28,168,134,2,192,117,30,168,70,0,192,117,30,168,198,255,255,117,30,168,134,253,255,117, 30,168,201,28,160,194,2,192,109,29,168,66,2,192,109,29,168,194,253,255,109,29,168,66,253,255,109,29,168,134,2,192, 157,29,168,70,0,192,117,30,168,198,255,255,117,30,168,134,253,255,157,29,168,201,28,160,194,2,192,109,29,168,66,2, 192,241,28,168,194,253,255,241,28,168,66,253,255,109,29,168,134,2,192,117,30,168,70,0,192,117,30,168,198,255,255,117, 30,168,134,253,255,117,30,168,201,28,160,194,2,192,109,29,168,66,2,192,109,29,168,194,253,255,109,29,168,66,253,255, 109,29,168,134,2,192,117,30,168,70,0,192,157,29,168,198,255,255,157,29,168,134,253,255,117,30,168,201,28,160,10,0, 192,196,32,192,1,48,193,0,0,5,21,0,0,210,0,0,96,128,21,42,0,0,0,0,9,21,0,0,98,0,8,21, 0,0,96,128,20,196,245,193,47,0,0,196,34,192,1,48,193,0,0,5,21,0,0,210,0,0,96,128,20,42,0,0, 0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,196,247,193,47,0,0,4,33,192,1,53,193,0,0,5,21,0, 0,210,0,0,96,128,21,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,4,246,193,47,0,0,4, 35,192,1,53,193,0,0,5,21,0,0,210,0,0,96,128,20,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0, 96,128,20,4,248,193,47,0,0,68,33,192,129,54,193,0,0,5,21,0,0,210,0,0,96,128,21,42,0,0,0,0, 9,21,0,0,98,0,8,21,0,0,96,128,20,68,246,193,47,0,0,68,35,192,129,54,193,0,0,5,21,0,0,210, 0,0,96,128,20,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,68,248,193,47,0,0,132,33,192, 1,56,193,0,0,5,21,0,0,210,0,0,96,128,21,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128, 20,132,246,193,47,0,0,132,35,192,1,56,193,0,0,5,21,0,0,210,0,0,96,128,20,42,0,0,0,0,9,21, 0,0,98,0,8,21,0,0,96,128,20,132,248,193,47,0,0,196,33,192,129,57,193,0,0,5,21,0,0,210,0,0, 96,128,21,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,196,246,193,47,0,0,196,35,192,129,57, 193,0,0,5,21,0,0,210,0,0,96,128,20,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,196, 248,193,47,0,0,4,34,192,1,59,193,0,0,5,21,0,0,210,0,0,96,128,21,42,0,0,0,0,9,21,0,0, 98,0,8,21,0,0,96,128,20,4,247,193,47,0,0,4,36,192,1,59,193,0,0,5,21,0,0,210,0,0,96,128, 20,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,4,249,193,47,0,0,68,34,192,1,60,193,0, 0,5,21,0,0,210,0,0,96,128,21,42,0,0,0,0,9,21,0,0,98,0,8,21,0,0,96,128,20,68,247,193, 47,0,0,68,36,192,1,60,193,0,0,5,21,0,0,210,0,0,96,128,20,42,0,0,0,0,9,21,0,0,98,0, 8,21,0,0,96,128,20,68,249,193,47,0,0,209,0,0,16,0,21,16,0,21,16,0,21,26,0,0,132,247,193,15, 0,192,132,249,193,15,0,192,78,5,192,4,0,0,2,0,192,0,128,5,22,200,145,22,200,148,130,7,192,0,128,2, 0,128,11,35,0,0,2,44,193,48,128,21,37,128,20,96,128,21,62,135,145,130,170,192,0,128,21,36,128,20,2,228, 192,240,128,21,37,128,20,97,0,0,106,7,160,130,170,192,0,128,21,36,128,20,2,228,192,240,128,21,37,128,20,97, 0,0,16,0,21,16,0,21,96,0,21,0,0,11,2,36,193,48,128,21,37,128,20,96,0,21,29,0,0,0,0,11, 0,0,11,0,0,11,2,40,193,48,128,21,37,128,20,96,0,21,130,3,192,48,128,18,0,128,11,35,0,0,4,0, 0,2,8,192,0,128,2,234,135,145,194,247,193,48,128,21,36,0,0,0,0,5,194,143,193,0,128,21,36,128,20,31, 0,0,209,0,0,224,0,21,26,0,0,22,8,160,194,245,193,48,128,21,36,0,0,0,0,5,194,143,193,0,128,21, 36,128,20,31,0,0,209,0,0,224,0,20,26,0,0,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,230,6, 145,196,37,192,223,0,0,0,0,64,78,5,192,4,0,0,2,0,192,0,128,5,58,202,148,2,105,192,0,128,21,36, 128,20,2,192,255,241,128,18,32,0,19,0,128,15,26,0,0,22,0,0,132,244,193,47,0,0,194,137,192,0,128,21, 36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,29,0,0,19,0,0,196,244,193,47,0,0,66,78,193,0,128, 21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,4,245,193,31,0,0,68,245,193,47,0,0,4,0,0,241, 0,0,0,0,15,0,0,12,4,245,193,242,0,12,0,128,12,47,0,0,68,245,193,242,0,12,0,128,12,47,0,0, 4,245,193,241,0,0,32,0,20,86,73,144,150,73,145,68,245,193,65,255,255,0,0,5,58,9,144,209,0,0,196,244, 193,0,0,4,26,0,0,62,9,144,10,0,192,129,0,0,48,0,20,22,0,0,2,10,144,6,0,192,2,10,160,4, 245,193,65,255,255,0,0,5,122,9,144,225,0,0,132,244,193,0,0,4,29,0,0,126,9,144,13,0,192,49,0,0, 128,0,20,19,0,0,2,10,144,3,0,192,2,10,160,209,0,0,196,244,193,0,0,4,26,0,0,174,9,144,10,0, 192,225,0,0,132,244,193,0,0,4,29,0,0,198,9,144,13,0,192,65,255,255,208,0,21,218,73,144,10,0,192,13, 0,192,129,0,0,224,0,20,22,0,0,238,9,144,6,0,192,49,0,0,208,0,20,19,0,0,2,10,144,3,0,192, 226,0,0,209,128,15,32,0,17,2,236,192,0,128,21,36,128,20,31,0,0,49,0,0,0,0,15,128,0,17,194,12, 193,0,128,21,36,128,20,31,0,0,1,0,0,0,0,9,30,0,0,130,27,192,0,128,20,62,136,145,0,0,64,196, 252,193,15,0,192,4,253,193,15,0,192,196,36,192,254,0,0,10,1,192,2,111,193,0,128,21,36,128,20,2,192,255, 0,128,2,142,138,145,138,3,192,68,253,193,223,0,0,66,253,255,0,128,21,36,128,20,0,128,5,118,203,148,66,108, 193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,16,128,20,195,0,192,48,128,21,218,138,148,2, 0,192,131,1,192,33,0,0,48,128,20,238,202,144,129,1,192,66,253,255,0,128,21,36,128,20,0,128,5,26,203,145, 195,1,192,48,0,21,2,16,192,0,128,2,26,139,145,48,0,21,130,151,193,16,128,21,37,128,20,98,0,0,196,252, 193,0,128,5,47,0,0,66,253,255,0,128,21,36,128,20,2,16,192,0,128,2,118,139,145,66,108,193,0,128,21,36, 128,20,2,192,255,0,128,2,118,139,145,68,253,193,194,1,192,0,128,5,47,0,0,130,253,255,0,128,21,36,128,20, 0,128,5,86,204,148,130,108,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,16,128,20,195,0, 192,48,128,21,186,139,148,2,0,192,131,1,192,33,0,0,48,128,20,206,203,144,129,1,192,130,253,255,0,128,21,36, 128,20,0,128,5,250,203,145,195,1,192,48,0,21,2,16,192,0,128,2,250,139,145,48,0,21,130,151,193,16,128,21, 37,128,20,98,0,0,196,252,193,0,128,5,47,0,0,130,253,255,0,128,21,36,128,20,2,16,192,0,128,2,86,140, 145,130,108,193,0,128,21,36,128,20,2,192,255,0,128,2,86,140,145,68,253,193,194,1,192,0,128,5,47,0,0,194, 253,255,0,128,21,36,128,20,0,128,5,54,205,148,194,108,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19, 0,128,15,16,128,20,195,0,192,48,128,21,154,140,148,2,0,192,131,1,192,33,0,0,48,128,20,174,204,144,129,1, 192,194,253,255,0,128,21,36,128,20,0,128,5,218,204,145,195,1,192,48,0,21,2,16,192,0,128,2,218,140,145,48, 0,21,130,151,193,16,128,21,37,128,20,98,0,0,196,252,193,0,128,5,47,0,0,194,253,255,0,128,21,36,128,20, 2,16,192,0,128,2,54,141,145,194,108,193,0,128,21,36,128,20,2,192,255,0,128,2,54,141,145,68,253,193,194,1, 192,0,128,5,47,0,0,194,255,255,0,128,21,36,128,20,0,128,5,22,206,148,194,110,193,0,128,21,36,128,20,2, 192,255,241,128,18,32,0,19,0,128,15,16,128,20,195,0,192,48,128,21,122,141,148,2,0,192,131,1,192,33,0,0, 48,128,20,142,205,144,129,1,192,194,255,255,0,128,21,36,128,20,0,128,5,186,205,145,195,1,192,48,0,21,2,16, 192,0,128,2,186,141,145,48,0,21,194,156,193,16,128,21,37,128,20,98,0,0,196,252,193,0,128,5,47,0,0,194, 255,255,0,128,21,36,128,20,2,16,192,0,128,2,22,142,145,194,110,193,0,128,21,36,128,20,2,192,255,0,128,2, 22,142,145,68,253,193,66,1,192,0,128,5,47,0,0,66,0,192,0,128,21,36,128,20,0,128,5,246,206,148,66,111, 193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,16,128,20,195,0,192,48,128,21,90,142,148,2, 0,192,131,1,192,33,0,0,48,128,20,110,206,144,129,1,192,66,0,192,0,128,21,36,128,20,0,128,5,154,206,145, 195,1,192,48,0,21,2,16,192,0,128,2,154,142,145,48,0,21,194,156,193,16,128,21,37,128,20,98,0,0,196,252, 193,0,128,5,47,0,0,66,0,192,0,128,21,36,128,20,2,16,192,0,128,2,246,142,145,66,111,193,0,128,21,36, 128,20,2,192,255,0,128,2,246,142,145,68,253,193,66,1,192,0,128,5,47,0,0,66,2,192,0,128,21,36,128,20, 0,128,5,214,207,148,66,113,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,16,128,20,195,0, 192,48,128,21,58,143,148,2,0,192,131,1,192,33,0,0,48,128,20,78,207,144,129,1,192,66,2,192,0,128,21,36, 128,20,0,128,5,122,207,145,195,1,192,48,0,21,2,16,192,0,128,2,122,143,145,48,0,21,2,162,193,16,128,21, 37,128,20,98,0,0,196,252,193,0,128,5,47,0,0,66,2,192,0,128,21,36,128,20,2,16,192,0,128,2,214,143, 145,66,113,193,0,128,21,36,128,20,2,192,255,0,128,2,214,143,145,68,253,193,194,0,192,0,128,5,47,0,0,130, 2,192,0,128,21,36,128,20,0,128,5,182,208,148,130,113,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19, 0,128,15,16,128,20,195,0,192,48,128,21,26,144,148,2,0,192,131,1,192,33,0,0,48,128,20,46,208,144,129,1, 192,130,2,192,0,128,21,36,128,20,0,128,5,90,208,145,195,1,192,48,0,21,2,16,192,0,128,2,90,144,145,48, 0,21,2,162,193,16,128,21,37,128,20,98,0,0,196,252,193,0,128,5,47,0,0,130,2,192,0,128,21,36,128,20, 2,16,192,0,128,2,182,144,145,130,113,193,0,128,21,36,128,20,2,192,255,0,128,2,182,144,145,68,253,193,194,0, 192,0,128,5,47,0,0,194,2,192,0,128,21,36,128,20,0,128,5,150,209,148,194,113,193,0,128,21,36,128,20,2, 192,255,241,128,18,32,0,19,0,128,15,16,128,20,195,0,192,48,128,21,250,144,148,2,0,192,131,1,192,33,0,0, 48,128,20,14,209,144,129,1,192,194,2,192,0,128,21,36,128,20,0,128,5,58,209,145,195,1,192,48,0,21,2,16, 192,0,128,2,58,145,145,48,0,21,2,162,193,16,128,21,37,128,20,98,0,0,196,252,193,0,128,5,47,0,0,194, 2,192,0,128,21,36,128,20,2,16,192,0,128,2,150,145,145,194,113,193,0,128,21,36,128,20,2,192,255,0,128,2, 150,145,145,68,253,193,194,0,192,0,128,5,47,0,0,4,37,192,254,0,0,13,1,192,2,111,193,0,128,21,36,128, 20,194,63,192,0,128,2,190,145,145,141,3,192,132,253,193,239,0,0,194,2,192,0,128,21,36,128,20,0,128,5,166, 210,148,194,113,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,32,0,20,195,0,192,48,0,21, 10,18,148,1,0,192,131,1,192,18,0,0,48,128,20,30,210,144,129,1,192,194,2,192,0,128,21,36,128,20,0,128, 5,74,210,145,195,1,192,48,0,21,2,8,192,0,128,2,74,146,145,48,0,21,130,151,193,16,128,21,37,128,20,98, 0,0,4,253,193,0,128,5,47,0,0,194,2,192,0,128,21,36,128,20,2,8,192,0,128,2,166,146,145,194,113,193, 0,128,21,36,128,20,194,63,192,0,128,2,166,146,145,132,253,193,194,1,192,0,128,5,47,0,0,130,2,192,0,128, 21,36,128,20,0,128,5,134,211,148,130,113,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,32, 0,20,195,0,192,48,0,21,234,18,148,1,0,192,131,1,192,18,0,0,48,128,20,254,210,144,129,1,192,130,2,192, 0,128,21,36,128,20,0,128,5,42,211,145,195,1,192,48,0,21,2,8,192,0,128,2,42,147,145,48,0,21,130,151, 193,16,128,21,37,128,20,98,0,0,4,253,193,0,128,5,47,0,0,130,2,192,0,128,21,36,128,20,2,8,192,0, 128,2,134,147,145,130,113,193,0,128,21,36,128,20,194,63,192,0,128,2,134,147,145,132,253,193,194,1,192,0,128,5, 47,0,0,66,2,192,0,128,21,36,128,20,0,128,5,102,212,148,66,113,193,0,128,21,36,128,20,2,192,255,241,128, 18,32,0,19,0,128,15,32,0,20,195,0,192,48,0,21,202,19,148,1,0,192,131,1,192,18,0,0,48,128,20,222, 211,144,129,1,192,66,2,192,0,128,21,36,128,20,0,128,5,10,212,145,195,1,192,48,0,21,2,8,192,0,128,2, 10,148,145,48,0,21,130,151,193,16,128,21,37,128,20,98,0,0,4,253,193,0,128,5,47,0,0,66,2,192,0,128, 21,36,128,20,2,8,192,0,128,2,102,148,145,66,113,193,0,128,21,36,128,20,194,63,192,0,128,2,102,148,145,132, 253,193,194,1,192,0,128,5,47,0,0,66,0,192,0,128,21,36,128,20,0,128,5,70,213,148,66,111,193,0,128,21, 36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,32,0,20,195,0,192,48,0,21,170,20,148,1,0,192,131,1, 192,18,0,0,48,128,20,190,212,144,129,1,192,66,0,192,0,128,21,36,128,20,0,128,5,234,212,145,195,1,192,48, 0,21,2,8,192,0,128,2,234,148,145,48,0,21,194,156,193,16,128,21,37,128,20,98,0,0,4,253,193,0,128,5, 47,0,0,66,0,192,0,128,21,36,128,20,2,8,192,0,128,2,70,149,145,66,111,193,0,128,21,36,128,20,194,63, 192,0,128,2,70,149,145,132,253,193,66,1,192,0,128,5,47,0,0,194,255,255,0,128,21,36,128,20,0,128,5,38, 214,148,194,110,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,32,0,20,195,0,192,48,0,21, 138,21,148,1,0,192,131,1,192,18,0,0,48,128,20,158,213,144,129,1,192,194,255,255,0,128,21,36,128,20,0,128, 5,202,213,145,195,1,192,48,0,21,2,8,192,0,128,2,202,149,145,48,0,21,194,156,193,16,128,21,37,128,20,98, 0,0,4,253,193,0,128,5,47,0,0,194,255,255,0,128,21,36,128,20,2,8,192,0,128,2,38,150,145,194,110,193, 0,128,21,36,128,20,194,63,192,0,128,2,38,150,145,132,253,193,66,1,192,0,128,5,47,0,0,194,253,255,0,128, 21,36,128,20,0,128,5,6,215,148,194,108,193,0,128,21,36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,32, 0,20,195,0,192,48,0,21,106,22,148,1,0,192,131,1,192,18,0,0,48,128,20,126,214,144,129,1,192,194,253,255, 0,128,21,36,128,20,0,128,5,170,214,145,195,1,192,48,0,21,2,8,192,0,128,2,170,150,145,48,0,21,2,162, 193,16,128,21,37,128,20,98,0,0,4,253,193,0,128,5,47,0,0,194,253,255,0,128,21,36,128,20,2,8,192,0, 128,2,6,151,145,194,108,193,0,128,21,36,128,20,194,63,192,0,128,2,6,151,145,132,253,193,194,0,192,0,128,5, 47,0,0,130,253,255,0,128,21,36,128,20,0,128,5,230,215,148,130,108,193,0,128,21,36,128,20,2,192,255,241,128, 18,32,0,19,0,128,15,32,0,20,195,0,192,48,0,21,74,23,148,1,0,192,131,1,192,18,0,0,48,128,20,94, 215,144,129,1,192,130,253,255,0,128,21,36,128,20,0,128,5,138,215,145,195,1,192,48,0,21,2,8,192,0,128,2, 138,151,145,48,0,21,2,162,193,16,128,21,37,128,20,98,0,0,4,253,193,0,128,5,47,0,0,130,253,255,0,128, 21,36,128,20,2,8,192,0,128,2,230,151,145,130,108,193,0,128,21,36,128,20,194,63,192,0,128,2,230,151,145,132, 253,193,194,0,192,0,128,5,47,0,0,66,253,255,0,128,21,36,128,20,0,128,5,198,216,148,66,108,193,0,128,21, 36,128,20,2,192,255,241,128,18,32,0,19,0,128,15,32,0,20,195,0,192,48,0,21,42,24,148,1,0,192,131,1, 192,18,0,0,48,128,20,62,216,144,129,1,192,66,253,255,0,128,21,36,128,20,0,128,5,106,216,145,195,1,192,48, 0,21,2,8,192,0,128,2,106,152,145,48,0,21,2,162,193,16,128,21,37,128,20,98,0,0,4,253,193,0,128,5, 47,0,0,66,253,255,0,128,21,36,128,20,2,8,192,0,128,2,198,152,145,66,108,193,0,128,21,36,128,20,194,63, 192,0,128,2,198,152,145,132,253,193,194,0,192,0,128,5,47,0,0,4,253,193,241,0,0,16,0,21,16,0,21,16, 0,21,26,0,0,132,253,193,241,0,0,18,0,0,3,4,192,48,128,20,250,216,144,1,4,192,2,0,192,16,128,21, 37,128,20,109,0,0,1,0,192,0,0,37,68,39,192,31,0,0,196,252,193,241,0,0,16,0,21,16,0,21,16,0, 21,26,0,0,68,253,193,241,0,0,18,0,0,3,4,192,48,128,20,78,217,144,1,4,192,2,0,192,16,128,21,37, 128,20,109,0,0,68,39,192,241,0,0,0,0,36,68,39,192,31,0,0,0,0,64,132,37,192,15,0,192,196,37,192, 15,0,192,10,0,192,4,37,192,241,0,0,16,0,18,74,90,145,65,72,192,194,32,192,3,0,192,20,0,9,63,128, 8,166,153,145,65,5,192,20,0,0,2,16,192,0,128,2,242,217,145,2,0,224,30,128,17,38,0,0,130,7,192,0, 128,2,0,128,11,67,167,193,48,128,21,37,0,0,104,0,0,0,0,128,0,0,9,130,27,192,16,128,20,182,153,145, 4,37,192,241,0,0,66,72,192,16,128,21,36,128,20,193,63,192,0,0,2,54,90,145,132,37,192,31,0,0,210,0, 0,0,128,9,42,0,0,130,0,192,208,128,20,74,154,145,132,37,192,207,255,255,0,0,64,197,104,192,193,32,192,84, 1,0,242,0,0,0,128,15,47,0,8,86,26,145,0,0,64,48,0,21,66,72,192,16,128,21,36,128,20,143,0,0, 20,0,0,242,0,0,32,128,18,162,218,145,2,15,192,0,128,4,246,218,145,1,0,64,48,0,21,66,72,192,16,128, 21,36,128,20,2,0,224,0,128,1,47,0,0,20,0,0,242,0,0,32,128,18,162,218,145,2,15,192,0,128,4,18, 155,145,210,0,0,0,128,9,42,0,0,132,37,192,15,0,0,196,37,192,63,0,0,48,0,21,66,72,192,16,128,21, 36,128,20,2,0,224,0,128,1,47,0,0,1,0,64,194,69,192,16,128,21,36,128,20,143,0,0,242,25,160,131,253, 255,110,26,168,242,25,160,2,67,192,16,128,21,36,128,20,143,0,0,130,67,192,16,128,21,36,128,20,143,0,0,242, 25,160,130,69,192,16,128,21,36,128,20,143,0,0,194,69,192,16,128,21,36,128,20,143,0,0,2,70,192,16,128,21, 36,128,20,143,0,0,130,74,192,16,128,21,36,128,20,143,0,0,2,75,192,16,128,21,36,128,20,143,0,0,242,25, 160,130,69,192,16,128,21,36,128,20,143,0,0,194,69,192,16,128,21,36,128,20,143,0,0,2,70,192,16,128,21,36, 128,20,143,0,0,2,72,192,16,128,21,36,128,20,143,0,0,130,72,192,16,128,21,36,128,20,143,0,0,194,74,192, 16,128,21,36,128,20,143,0,0,242,25,160,194,69,192,16,128,21,36,128,20,143,0,0,2,72,192,16,128,21,36,128, 20,143,0,0,130,72,192,16,128,21,36,128,20,143,0,0,194,74,192,16,128,21,36,128,20,143,0,0,67,253,255,110, 26,168,195,253,255,110,26,168,67,2,192,110,26,168,195,2,192,110,26,168,242,25,160,130,69,192,16,128,21,36,128,20, 143,0,0,2,70,192,16,128,21,36,128,20,143,0,0,130,74,192,16,128,21,36,128,20,143,0,0,2,75,192,16,128, 21,36,128,20,143,0,0,131,253,255,110,26,168,195,255,255,110,26,168,67,0,192,110,26,168,131,2,192,110,26,168,242, 25,160,130,69,192,16,128,21,36,128,20,143,0,0,194,69,192,16,128,21,36,128,20,143,0,0,2,70,192,16,128,21, 36,128,20,143,0,0,2,72,192,16,128,21,36,128,20,143,0,0,130,72,192,16,128,21,36,128,20,143,0,0,130,74, 192,16,128,21,36,128,20,143,0,0,194,74,192,16,128,21,36,128,20,143,0,0,2,75,192,16,128,21,36,128,20,143, 0,0,242,25,160,132,37,192,15,0,192,196,37,192,15,0,192,10,0,192,196,36,192,241,0,0,16,0,18,50,94,145, 65,72,192,194,32,192,3,0,192,20,0,9,63,128,8,142,157,145,65,5,192,20,0,0,2,8,192,0,128,2,218,221, 145,2,0,224,30,128,17,38,0,0,130,7,192,0,128,2,0,128,11,3,171,193,48,128,21,37,0,0,104,0,0,0, 0,128,0,0,9,130,27,192,16,128,20,158,157,145,196,36,192,241,0,0,66,72,192,16,128,21,36,128,20,193,63,192, 0,0,2,30,94,145,132,37,192,31,0,0,210,0,0,0,128,9,42,0,0,130,0,192,208,128,20,50,158,145,132,37, 192,207,255,255,0,0,64,48,0,21,66,72,192,16,128,21,36,128,20,143,0,0,20,0,0,242,0,0,32,128,18,106, 222,145,2,23,192,0,128,4,190,222,145,1,0,64,48,0,21,66,72,192,16,128,21,36,128,20,2,0,224,0,128,1, 47,0,0,20,0,0,242,0,0,32,128,18,106,222,145,2,23,192,0,128,4,218,158,145,210,0,0,0,128,9,42,0, 0,132,37,192,15,0,0,196,37,192,63,0,0,48,0,21,66,72,192,16,128,21,36,128,20,2,0,224,0,128,1,47, 0,0,1,0,64,194,74,192,16,128,21,36,128,20,143,0,0,218,29,160,131,2,192,54,30,168,218,29,160,130,77,192, 16,128,21,36,128,20,143,0,0,2,77,192,16,128,21,36,128,20,143,0,0,218,29,160,2,75,192,16,128,21,36,128, 20,143,0,0,194,74,192,16,128,21,36,128,20,143,0,0,130,74,192,16,128,21,36,128,20,143,0,0,2,70,192,16, 128,21,36,128,20,143,0,0,130,69,192,16,128,21,36,128,20,143,0,0,218,29,160,2,75,192,16,128,21,36,128,20, 143,0,0,194,74,192,16,128,21,36,128,20,143,0,0,130,74,192,16,128,21,36,128,20,143,0,0,130,72,192,16,128, 21,36,128,20,143,0,0,2,72,192,16,128,21,36,128,20,143,0,0,194,69,192,16,128,21,36,128,20,143,0,0,218, 29,160,194,74,192,16,128,21,36,128,20,143,0,0,130,72,192,16,128,21,36,128,20,143,0,0,2,72,192,16,128,21, 36,128,20,143,0,0,194,69,192,16,128,21,36,128,20,143,0,0,195,2,192,54,30,168,67,2,192,54,30,168,195,253, 255,54,30,168,67,253,255,54,30,168,218,29,160,2,75,192,16,128,21,36,128,20,143,0,0,130,74,192,16,128,21,36, 128,20,143,0,0,2,70,192,16,128,21,36,128,20,143,0,0,130,69,192,16,128,21,36,128,20,143,0,0,131,2,192, 54,30,168,67,0,192,54,30,168,195,255,255,54,30,168,131,253,255,54,30,168,218,29,160,2,75,192,16,128,21,36,128, 20,143,0,0,194,74,192,16,128,21,36,128,20,143,0,0,130,74,192,16,128,21,36,128,20,143,0,0,130,72,192,16, 128,21,36,128,20,143,0,0,2,72,192,16,128,21,36,128,20,143,0,0,2,70,192,16,128,21,36,128,20,143,0,0, 194,69,192,16,128,21,36,128,20,143,0,0,130,69,192,16,128,21,36,128,20,143,0,0,218,29,160,129,39,192,194,32, 192,3,0,192,20,0,9,63,128,8,51,129,145,196,36,192,241,0,0,16,0,18,195,65,145,67,253,255,14,13,192,13, 8,192,199,1,168,43,2,168,195,253,255,14,13,192,13,24,192,199,1,168,195,255,255,14,14,192,13,32,192,199,1,168, 67,0,192,14,14,192,13,32,192,199,1,168,67,2,192,14,13,192,13,24,192,199,1,168,131,2,192,14,14,192,13,16, 192,199,1,168,195,2,192,14,13,192,13,8,192,199,1,168,0,0,64,196,36,192,241,0,0,2,0,192,48,0,21,20, 0,0,0,128,5,211,193,145,2,16,192,0,128,2,39,194,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5, 247,193,145,2,63,192,0,128,2,0,128,20,39,130,145,130,39,192,208,128,21,36,128,20,239,0,0,0,0,64,131,253, 255,14,14,192,196,36,192,241,0,0,2,0,192,48,0,21,20,0,0,0,128,5,63,194,145,2,16,192,0,128,2,159, 194,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5,99,194,145,2,9,192,0,128,4,143,194,145,2,63,192, 0,128,2,0,128,20,159,130,145,130,39,192,208,128,21,36,128,20,15,16,192,0,0,64,129,39,192,194,32,192,3,0, 192,20,0,9,63,128,8,175,130,145,4,37,192,241,0,0,16,0,18,63,67,145,195,2,192,14,21,192,13,8,192,67, 3,168,167,3,168,67,2,192,14,21,192,13,24,192,67,3,168,67,0,192,14,22,192,13,32,192,67,3,168,195,255,255, 14,22,192,13,32,192,67,3,168,195,253,255,14,21,192,13,24,192,67,3,168,131,253,255,14,22,192,13,16,192,67,3, 168,67,253,255,14,21,192,13,8,192,67,3,168,0,0,64,4,37,192,241,0,0,2,0,192,48,0,21,20,0,0,0, 128,5,79,195,145,2,8,192,0,128,2,163,195,145,26,0,0,2,0,192,48,0,21,20,0,0,0,128,5,115,195,145, 2,63,192,0,128,2,0,128,20,163,131,145,130,39,192,208,128,21,36,128,20,239,0,0,0,0,64,131,2,192,14,14, 192,4,37,192,241,0,0,2,0,192,48,0,21,20,0,0,0,128,5,187,195,145,2,8,192,0,128,2,27,196,145,26, 0,0,2,0,192,48,0,21,20,0,0,0,128,5,223,195,145,2,17,192,0,128,4,11,196,145,2,63,192,0,128,2, 0,128,20,27,132,145,130,39,192,208,128,21,36,128,20,15,16,192,0,0,64,132,37,192,250,0,0,65,5,192,20,0, 0,2,8,192,0,128,2,119,196,145,130,39,192,16,128,21,36,128,20,0,128,5,119,132,145,30,0,0,20,0,0,130, 7,192,0,128,2,0,128,11,195,174,193,48,128,21,37,0,0,104,0,0,0,0,128,0,0,9,130,27,192,16,128,20, 43,132,145,132,37,192,15,0,192,0,0,64,132,37,192,79,0,192,0,0,64,194,2,192,16,128,21,208,128,20,147,196, 145,130,2,192,16,128,21,208,128,20,147,196,145,66,2,192,16,128,21,208,128,20,147,196,145,194,253,255,16,128,21,208, 128,20,147,196,145,66,253,255,16,128,21,208,128,20,147,196,145,119,4,160,130,2,192,16,128,21,208,128,20,147,196,145, 66,0,192,16,128,21,208,128,20,147,196,145,194,255,255,16,128,21,208,128,20,147,196,145,130,253,255,16,128,21,208,128, 20,147,196,145,195,2,192,2,0,192,48,0,21,20,0,0,0,128,5,59,197,145,208,0,20,147,68,145,1,0,0,67, 2,192,2,0,192,48,0,21,20,0,0,0,128,5,95,197,145,208,0,20,147,68,145,1,0,0,195,253,255,2,0,192, 48,0,21,20,0,0,0,128,5,131,197,145,208,0,20,147,68,145,1,0,0,67,253,255,2,0,192,48,0,21,20,0, 0,0,128,5,167,197,145,208,0,20,147,68,145,1,0,0,119,4,160,66,5,192,16,128,21,208,128,20,147,196,145,194, 4,192,16,128,21,208,128,20,147,196,145,119,4,160,194,2,192,16,128,21,208,128,20,147,196,145,66,2,192,16,128,21, 208,128,20,147,196,145,66,0,192,16,128,21,208,128,20,147,196,145,194,255,255,16,128,21,208,128,20,147,196,145,130,253, 255,16,128,21,208,128,20,147,196,145,130,2,192,16,128,21,208,128,20,147,196,145,119,4,160,194,2,192,16,128,21,208, 128,20,147,196,145,66,2,192,16,128,21,208,128,20,147,196,145,194,253,255,16,128,21,208,128,20,147,196,145,66,253,255, 16,128,21,208,128,20,147,196,145,67,0,192,2,0,192,48,0,21,20,0,0,0,128,5,151,198,145,208,0,20,147,68, 145,1,0,0,195,255,255,2,0,192,48,0,21,20,0,0,0,128,5,187,198,145,208,0,20,147,68,145,1,0,0,131, 253,255,2,0,192,48,0,21,20,0,0,0,128,5,223,198,145,208,0,20,147,68,145,1,0,0,131,2,192,2,0,192, 48,0,21,20,0,0,0,128,5,3,199,145,208,0,20,147,68,145,1,0,0,119,4,160,163,2,168,118,25,168,132,37, 192,242,0,0,32,128,18,219,200,145,79,199,148,196,37,192,242,0,0,32,128,18,219,136,145,4,37,192,254,0,0,194, 2,192,0,128,21,36,128,20,2,40,192,0,128,2,131,135,145,2,75,192,0,128,21,36,128,20,0,128,5,219,200,145, 130,2,192,0,128,21,36,128,20,2,40,192,0,128,2,175,135,145,194,74,192,0,128,21,36,128,20,0,128,5,219,200, 145,66,2,192,0,128,21,36,128,20,2,40,192,0,128,2,219,135,145,130,74,192,0,128,21,36,128,20,0,128,5,219, 200,145,66,0,192,0,128,21,36,128,20,2,40,192,0,128,2,7,136,145,130,72,192,0,128,21,36,128,20,0,128,5, 219,200,145,194,255,255,0,128,21,36,128,20,2,40,192,0,128,2,51,136,145,2,72,192,0,128,21,36,128,20,0,128, 5,219,200,145,194,253,255,0,128,21,36,128,20,2,40,192,0,128,2,95,136,145,2,70,192,0,128,21,36,128,20,0, 128,5,219,200,145,130,253,255,0,128,21,36,128,20,2,40,192,0,128,2,139,136,145,194,69,192,0,128,21,36,128,20, 0,128,5,219,200,145,66,253,255,0,128,21,36,128,20,2,40,192,0,128,2,183,136,145,130,69,192,0,128,21,36,128, 20,0,128,5,219,200,145,132,37,192,242,0,0,32,128,18,207,200,148,31,4,168,0,0,64,132,37,192,15,0,192,0, 0,64,132,37,192,79,0,192,0,0,64,1,105,192,194,32,192,3,0,192,20,0,9,63,128,8,243,136,145,193,137,192, 194,32,192,3,0,192,20,0,9,63,128,8,11,137,145,4,37,192,241,0,0,16,0,18,95,74,145,195,2,192,10,8, 192,13,8,192,14,21,192,99,10,168,203,10,168,67,2,192,10,8,192,13,24,192,14,21,192,99,10,168,67,0,192,10, 16,192,13,32,192,14,22,192,99,10,168,195,255,255,10,16,192,13,32,192,14,22,192,99,10,168,195,253,255,10,8,192, 13,24,192,14,21,192,99,10,168,131,253,255,10,16,192,13,16,192,14,22,192,99,10,168,67,253,255,10,8,192,13,8, 192,14,21,192,99,10,168,4,37,192,241,0,0,66,110,192,16,128,21,36,128,20,15,1,192,194,109,192,16,128,21,36, 128,20,15,1,192,194,107,192,16,128,21,36,128,20,15,14,192,66,107,192,16,128,21,36,128,20,15,14,192,130,107,192, 16,128,21,36,128,20,207,22,192,66,105,192,16,128,21,36,128,20,15,20,192,194,104,192,16,128,21,36,128,20,15,20, 192,130,102,192,16,128,21,36,128,20,15,20,192,194,102,192,16,128,21,36,128,20,15,10,192,66,102,192,16,128,21,36, 128,20,15,10,192,0,0,64,4,37,192,241,0,0,48,0,21,2,105,192,16,128,21,36,128,20,223,0,0,20,0,0, 0,128,5,107,202,145,199,202,148,22,0,0,48,0,21,20,0,0,242,0,0,32,128,18,147,202,145,2,63,192,0,128, 2,0,128,20,199,138,145,194,137,192,128,128,21,36,128,20,239,0,0,0,0,64,131,2,192,14,14,192,4,37,192,241, 0,0,48,0,21,2,105,192,16,128,21,36,128,20,143,16,192,20,0,0,0,128,5,219,202,145,67,203,148,22,0,0, 2,0,192,48,0,21,20,0,0,0,128,5,7,203,145,2,17,192,0,128,4,51,203,145,2,63,192,0,128,2,0,128, 20,67,139,145,194,137,192,128,128,21,36,128,20,15,16,192,0,0,64,0,0,21,20,0,0,242,0,0,32,128,18,131, 139,145,194,170,192,128,128,21,36,128,20,223,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,64, 0,0,64,39,1,168,94,29,168,231,8,168,6,0,192,132,170,192,15,0,192,132,45,193,15,0,192,132,37,192,242,0, 0,32,128,18,111,141,145,78,5,192,4,0,0,2,16,192,0,128,2,39,204,145,130,7,192,0,128,2,0,128,11,35, 0,0,130,198,193,48,128,21,37,128,20,106,0,0,2,202,193,48,128,21,37,128,20,109,0,0,130,39,192,0,128,21, 36,128,20,242,0,0,0,128,11,48,128,17,131,178,193,48,128,21,37,0,0,104,0,0,0,0,128,1,0,0,0,0, 9,30,0,0,130,27,192,16,128,20,187,139,145,4,37,192,254,0,0,4,33,192,242,0,0,32,128,18,99,204,145,74, 0,192,129,2,192,71,11,168,68,33,192,242,0,0,32,128,18,135,204,145,138,0,192,65,5,192,71,11,168,193,4,192, 71,11,168,132,33,192,242,0,0,32,128,18,195,204,145,202,0,192,193,2,192,71,11,168,129,2,192,71,11,168,65,2, 192,71,11,168,193,253,255,71,11,168,65,253,255,71,11,168,196,33,192,242,0,0,32,128,18,7,205,145,10,1,192,193, 2,192,71,11,168,129,2,192,71,11,168,65,2,192,71,11,168,65,0,192,71,11,168,193,255,255,71,11,168,129,253,255, 71,11,168,4,34,192,242,0,0,32,128,18,59,205,145,74,1,192,193,2,192,71,11,168,65,2,192,71,11,168,193,253, 255,71,11,168,65,253,255,71,11,168,68,34,192,242,0,0,32,128,18,111,205,145,138,1,192,129,2,192,71,11,168,65, 0,192,71,11,168,193,255,255,71,11,168,129,253,255,71,11,168,132,37,192,143,0,0,0,0,64,194,170,192,128,128,21, 36,128,20,15,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,64,194,170,192,128,128,21,36,128, 20,130,0,0,15,128,9,38,0,0,130,45,193,128,128,21,36,128,20,2,32,192,16,128,21,47,0,64,2,105,192,16, 128,21,36,128,20,242,0,0,208,128,82,2,105,192,16,128,21,36,128,20,242,0,0,224,128,82,2,105,192,16,128,21, 36,128,20,242,0,0,208,128,18,123,141,145,0,0,64,0,0,21,20,0,0,2,48,192,0,128,2,251,205,145,0,0, 64,0,0,21,20,0,0,2,48,192,0,128,2,107,142,145,231,13,168,251,205,145,130,12,192,16,128,20,99,142,144,130, 12,192,0,128,20,251,205,144,163,13,168,251,13,160,0,0,64,0,0,21,20,0,0,2,48,192,0,128,2,155,142,145, 231,13,168,155,206,145,130,12,192,16,128,20,163,141,144,251,13,160,0,0,64,0,0,21,20,0,0,2,48,192,0,128, 2,199,142,145,231,13,168,251,205,145,130,12,192,16,128,20,163,141,144,0,0,64,1,0,0,215,14,160,251,13,168,48, 0,21,20,0,0,242,0,0,32,128,18,211,206,145,2,48,192,0,128,2,251,205,145,0,0,64,1,0,0,35,15,160, 130,12,192,16,128,20,31,207,144,231,13,168,35,207,145,163,13,168,35,15,160,251,13,168,48,0,21,20,0,0,242,0, 0,32,128,18,3,207,145,2,48,192,0,128,2,87,143,145,130,12,192,16,128,20,251,205,144,231,13,168,163,141,145,0, 0,64,1,0,0,130,12,192,0,128,20,175,207,144,123,15,160,231,13,168,123,207,145,163,13,168,48,0,21,20,0,0, 242,0,0,32,128,18,111,207,145,2,48,192,0,128,2,207,143,145,231,13,168,163,141,145,0,0,64,211,13,168,123,141, 145,48,0,21,20,0,0,242,0,0,32,128,18,167,207,145,2,48,192,0,128,2,251,205,145,0,0,64,129,253,255,111, 14,168,39,12,160,131,253,255,1,0,0,3,16,160,130,12,192,16,128,20,3,208,144,231,13,168,3,208,145,163,13,168, 48,0,21,20,0,0,242,0,0,32,128,18,235,207,145,2,48,192,0,128,2,63,144,145,130,12,192,16,128,20,59,208, 144,231,13,168,59,208,145,163,13,168,251,13,168,39,12,160,193,250,255,159,14,168,65,251,255,159,14,168,39,12,160,65, 253,255,47,14,168,193,2,192,47,14,168,129,253,255,47,14,168,193,253,255,47,14,168,65,2,192,47,14,168,39,12,160, 65,253,255,23,14,168,129,2,192,23,14,168,129,253,255,23,14,168,193,253,255,23,14,168,193,255,255,23,14,168,65,0, 192,23,14,168,39,12,160,67,253,255,251,14,168,195,2,192,91,15,168,195,253,255,251,14,168,67,2,192,91,15,168,39, 12,160,129,253,255,23,14,168,193,255,255,23,14,168,65,0,192,23,14,168,129,2,192,23,14,168,67,253,255,203,14,168, 195,2,192,203,14,168,195,253,255,203,14,168,67,2,192,203,14,168,39,12,160,131,253,255,251,14,168,131,2,192,91,15, 168,195,255,255,91,15,168,67,0,192,91,15,168,39,12,160,65,253,255,23,14,168,193,253,255,23,14,168,65,2,192,23, 14,168,193,2,192,23,14,168,131,253,255,203,14,168,131,2,192,203,14,168,195,255,255,203,14,168,67,0,192,203,14,168, 39,12,160,65,253,255,47,14,168,193,2,192,47,14,168,39,12,160,129,253,255,47,14,168,39,12,160,65,253,255,23,14, 168,39,12,160,129,253,255,23,14,168,129,2,192,23,14,168,39,12,160,193,253,255,23,14,168,39,12,160,67,253,255,251, 14,168,195,2,192,91,15,168,39,12,160,67,253,255,203,14,168,195,2,192,203,14,168,39,12,160,129,253,255,23,14,168, 129,2,192,23,14,168,39,12,160,193,255,255,23,14,168,65,0,192,23,14,168,39,12,160,131,253,255,251,14,168,131,2, 192,91,15,168,39,12,160,65,253,255,23,14,168,193,2,192,23,14,168,39,12,160,131,253,255,203,14,168,131,2,192,203, 14,168,39,12,160,193,253,255,23,14,168,65,2,192,23,14,168,39,12,160,0,0,21,20,0,0,242,0,0,32,128,18, 175,146,145,194,170,192,128,128,21,36,128,20,223,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0, 64,0,0,64,1,0,0,227,18,160,194,170,192,128,128,21,36,128,20,223,0,0,194,45,193,128,128,21,36,128,20,130, 0,0,31,128,9,38,0,0,48,0,21,20,0,0,242,0,0,32,128,18,187,210,145,0,0,64,96,11,168,39,1,168, 94,29,168,231,8,168,6,0,192,132,170,192,15,0,192,132,45,193,15,0,192,132,37,192,242,0,0,32,128,18,115,149, 145,78,5,192,4,0,0,2,16,192,0,128,2,187,211,145,194,137,192,0,128,21,36,128,20,242,0,0,68,244,193,47, 0,0,4,0,0,130,7,192,0,128,2,0,128,11,35,0,0,130,198,193,48,128,21,37,128,20,106,0,0,2,202,193, 48,128,21,37,128,20,109,0,0,130,39,192,0,128,21,36,128,20,242,0,0,0,128,11,48,128,17,131,205,193,48,128, 21,37,0,0,104,0,0,0,0,128,1,0,0,0,0,9,30,0,0,130,27,192,16,128,20,51,147,145,4,37,192,254, 0,0,196,32,192,242,0,0,32,128,18,75,212,145,129,2,192,0,0,21,20,0,0,242,0,0,32,128,18,75,148,145, 2,59,192,16,128,21,37,128,20,66,239,193,96,128,21,36,128,20,0,128,5,75,148,145,194,170,192,128,128,21,36,128, 20,15,0,192,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,4,33,192,242,0,0,32,128,18,103, 212,145,74,0,192,131,2,192,179,18,168,68,33,192,242,0,0,32,128,18,139,212,145,138,0,192,65,5,192,115,18,168, 193,4,192,115,18,168,132,33,192,242,0,0,32,128,18,199,212,145,202,0,192,193,2,192,115,18,168,129,2,192,115,18, 168,65,2,192,115,18,168,193,253,255,115,18,168,65,253,255,115,18,168,196,33,192,242,0,0,32,128,18,11,213,145,10, 1,192,193,2,192,115,18,168,129,2,192,115,18,168,65,2,192,115,18,168,65,0,192,115,18,168,193,255,255,115,18,168, 129,253,255,115,18,168,4,34,192,242,0,0,32,128,18,63,213,145,74,1,192,195,2,192,179,18,168,67,2,192,179,18, 168,195,253,255,179,18,168,67,253,255,179,18,168,68,34,192,242,0,0,32,128,18,115,213,145,138,1,192,131,2,192,179, 18,168,67,0,192,179,18,168,195,255,255,179,18,168,131,253,255,179,18,168,132,37,192,143,0,0,0,0,64,194,170,192, 128,128,21,36,128,20,15,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,64,194,170,192,128,128, 21,36,128,20,130,0,0,15,128,9,38,0,0,130,45,193,128,128,21,36,128,20,2,32,192,16,128,21,47,0,64,2, 105,192,16,128,21,36,128,20,242,0,0,208,128,82,2,105,192,16,128,21,36,128,20,242,0,0,224,128,82,2,105,192, 16,128,21,36,128,20,242,0,0,208,128,18,127,149,145,0,0,64,0,0,21,20,0,0,2,48,192,0,128,2,79,150, 145,215,21,168,127,149,145,68,244,193,242,0,0,32,128,18,79,214,145,48,128,20,127,149,145,0,0,64,0,0,21,20, 0,0,2,48,192,0,128,2,199,150,145,68,244,193,242,0,0,32,128,18,127,214,145,48,128,20,167,150,145,235,21,168, 255,213,145,130,12,192,16,128,20,159,150,144,130,12,192,0,128,20,255,213,144,167,21,168,255,21,160,130,12,192,16,128, 20,191,150,144,130,12,192,0,128,20,127,213,144,167,21,168,127,21,160,0,0,64,0,0,21,20,0,0,2,48,192,0, 128,2,47,151,145,68,244,193,242,0,0,32,128,18,247,214,145,48,128,20,19,151,145,235,21,168,47,215,145,130,12,192, 16,128,20,255,213,144,167,21,168,255,21,160,130,12,192,16,128,20,127,213,144,167,21,168,130,7,192,16,128,20,127,213, 144,0,0,64,0,0,21,20,0,0,2,48,192,0,128,2,139,151,145,68,244,193,242,0,0,32,128,18,111,151,145,235, 21,168,255,213,145,130,12,192,16,128,20,167,149,144,0,0,64,130,12,192,16,128,20,127,213,144,167,21,168,2,10,192, 16,128,20,127,213,144,0,0,64,1,0,0,68,244,193,242,0,0,32,128,18,211,151,145,171,23,160,255,21,168,48,0, 21,20,0,0,242,0,0,32,128,18,167,215,145,2,48,192,0,128,2,255,213,145,0,0,64,127,21,168,48,0,21,20, 0,0,242,0,0,32,128,18,207,215,145,2,48,192,0,128,2,127,213,145,0,0,64,1,0,0,68,244,193,242,0,0, 32,128,18,123,152,145,43,24,160,130,12,192,16,128,20,39,216,144,235,21,168,43,216,145,167,21,168,255,21,168,48,0, 21,20,0,0,242,0,0,32,128,18,15,216,145,2,48,192,0,128,2,175,152,145,130,12,192,16,128,20,255,213,144,235, 21,168,175,216,145,167,21,168,255,21,160,130,12,192,16,128,20,119,216,144,167,21,168,127,21,168,48,0,21,20,0,0, 242,0,0,32,128,18,103,216,145,2,48,192,0,128,2,175,152,145,130,12,192,16,128,20,127,213,144,167,21,168,127,21, 160,0,0,64,1,0,0,130,12,192,16,128,20,75,217,144,68,244,193,242,0,0,32,128,18,39,153,145,231,24,160,235, 21,168,231,216,145,255,21,168,167,21,168,48,0,21,20,0,0,242,0,0,32,128,18,215,216,145,2,48,192,0,128,2, 175,153,145,235,21,168,175,217,145,215,21,168,167,213,145,167,21,168,127,21,160,167,21,168,127,21,168,48,0,21,20,0, 0,242,0,0,32,128,18,31,217,145,2,48,192,0,128,2,23,217,145,0,0,64,68,244,193,242,0,0,32,128,18,143, 153,145,103,25,160,215,21,168,127,149,145,48,0,21,20,0,0,242,0,0,32,128,18,95,217,145,2,48,192,0,128,2, 255,213,145,0,0,64,127,21,168,48,0,21,20,0,0,242,0,0,32,128,18,139,217,145,2,48,192,0,128,2,127,213, 145,0,0,64,1,0,0,68,244,193,242,0,0,32,128,18,239,217,145,2,16,192,0,128,4,75,154,145,0,0,64,130, 12,192,16,128,20,239,217,144,235,21,168,239,217,145,167,21,168,48,0,21,20,0,0,242,0,0,32,128,18,215,217,145, 2,48,192,0,128,2,135,154,145,130,12,192,16,128,20,255,213,144,235,21,168,255,213,145,167,21,168,255,21,160,130,12, 192,16,128,20,71,218,144,167,21,168,130,7,192,16,128,20,135,154,144,127,21,168,48,0,21,20,0,0,242,0,0,32, 128,18,43,218,145,2,48,192,0,128,2,135,154,145,130,12,192,16,128,20,127,213,144,167,21,168,130,7,192,16,128,20, 127,213,144,0,0,64,1,0,0,48,0,21,20,0,0,2,48,192,0,128,2,187,154,145,66,72,192,16,128,21,36,128, 20,0,128,5,187,154,145,127,21,168,1,0,0,48,0,20,20,0,0,2,48,192,0,128,2,235,154,145,66,72,192,16, 128,21,36,128,20,0,128,5,235,154,145,127,21,168,0,0,64,129,253,255,3,16,192,203,22,168,187,19,160,131,253,255, 179,25,168,187,19,160,193,250,255,51,23,168,65,251,255,51,23,168,187,19,160,65,253,255,3,8,192,83,22,168,193,2, 192,3,8,192,83,22,168,129,253,255,3,16,192,83,22,168,193,253,255,3,24,192,83,22,168,65,2,192,3,24,192,83, 22,168,187,19,160,65,253,255,3,8,192,27,22,168,129,2,192,3,16,192,27,22,168,129,253,255,3,16,192,27,22,168, 193,253,255,3,24,192,27,22,168,193,255,255,3,32,192,27,22,168,65,0,192,3,32,192,27,22,168,187,19,160,67,253, 255,247,23,168,195,2,192,179,24,168,195,253,255,247,23,168,67,2,192,179,24,168,187,19,160,129,253,255,3,16,192,27, 22,168,193,255,255,3,32,192,27,22,168,65,0,192,3,32,192,27,22,168,129,2,192,3,16,192,27,22,168,67,253,255, 143,23,168,195,2,192,143,23,168,195,253,255,143,23,168,67,2,192,143,23,168,187,19,160,131,253,255,247,23,168,131,2, 192,179,24,168,195,255,255,179,24,168,67,0,192,179,24,168,187,19,160,65,253,255,3,8,192,27,22,168,193,253,255,3, 24,192,27,22,168,65,2,192,3,24,192,27,22,168,193,2,192,3,8,192,27,22,168,131,253,255,143,23,168,131,2,192, 143,23,168,195,255,255,143,23,168,67,0,192,143,23,168,187,19,160,68,244,193,242,0,0,32,128,18,187,211,145,68,244, 193,2,8,192,0,128,4,195,220,145,195,2,192,139,26,168,68,244,193,2,16,192,0,128,4,219,220,145,131,2,192,139, 26,168,68,244,193,2,24,192,0,128,4,243,220,145,67,2,192,139,26,168,68,244,193,2,32,192,0,128,4,11,221,145, 67,0,192,139,26,168,187,19,160,65,253,255,3,8,192,83,22,168,193,2,192,3,8,192,83,22,168,187,19,160,129,253, 255,3,16,192,83,22,168,187,19,160,65,253,255,3,8,192,27,22,168,187,19,160,129,253,255,3,16,192,27,22,168,129, 2,192,3,16,192,27,22,168,187,19,160,193,253,255,3,24,192,27,22,168,187,19,160,67,253,255,247,23,168,195,2,192, 179,24,168,187,19,160,67,253,255,143,23,168,195,2,192,143,23,168,187,19,160,129,253,255,3,16,192,27,22,168,129,2, 192,3,16,192,27,22,168,187,19,160,193,255,255,3,32,192,27,22,168,65,0,192,3,32,192,27,22,168,187,19,160,131, 253,255,247,23,168,131,2,192,179,24,168,187,19,160,65,253,255,3,8,192,27,22,168,193,2,192,3,8,192,27,22,168, 187,19,160,131,253,255,143,23,168,131,2,192,143,23,168,187,19,160,193,253,255,3,24,192,27,22,168,65,2,192,3,24, 192,27,22,168,187,19,160,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 129,170,192,194,32,192,3,30,222,20,0,9,63,128,8,12,128,145,65,203,192,194,32,192,3,30,222,20,0,9,63,128, 8,36,128,145,1,111,193,194,32,192,3,0,192,20,0,9,63,128,8,60,128,145,68,209,193,254,0,0,130,39,192,0, 128,21,36,128,20,0,128,5,152,128,145,194,143,193,0,128,21,36,128,20,250,0,0,4,0,0,130,7,192,0,128,2, 0,128,11,3,61,193,48,128,21,37,0,0,104,0,0,0,0,128,66,209,193,0,128,21,36,128,20,254,128,21,80,128, 145,68,34,192,2,0,192,0,128,5,24,193,145,138,21,192,78,5,192,4,0,0,1,0,192,0,0,5,0,1,145,129, 21,192,194,12,193,0,128,21,36,128,20,2,192,255,0,128,2,0,128,15,32,0,20,0,1,144,1,0,0,36,58,168, 1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,196,0,145,4,34,192,2,0,192,0,128,5,132,193,145,138,20, 192,78,5,192,4,0,0,1,0,192,0,0,5,108,1,145,129,20,192,194,12,193,0,128,21,36,128,20,2,192,255,0, 128,2,0,128,15,32,0,20,108,1,144,1,0,0,0,58,168,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20, 48,1,145,196,33,192,2,0,192,0,128,5,240,193,145,10,15,192,78,5,192,4,0,0,1,0,192,0,0,5,216,1, 145,1,15,192,194,12,193,0,128,21,36,128,20,2,192,255,0,128,2,0,128,15,32,0,20,216,1,144,1,0,0,244, 56,168,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,156,1,145,132,33,192,2,0,192,0,128,5,92,194,145, 138,14,192,78,5,192,4,0,0,1,0,192,0,0,5,68,2,145,129,14,192,194,12,193,0,128,21,36,128,20,2,192, 255,0,128,2,0,128,15,32,0,20,68,2,144,1,0,0,20,56,168,1,0,0,0,0,9,30,0,0,131,27,192,48, 0,20,8,2,145,68,33,192,2,0,192,0,128,5,200,194,145,138,8,192,78,10,192,4,0,0,1,0,192,0,0,5, 176,2,145,129,8,192,194,12,193,0,128,21,36,128,20,2,192,255,0,128,2,0,128,15,32,0,20,176,2,144,1,0, 0,184,55,168,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,116,2,145,4,33,192,2,0,192,0,128,5,52, 195,145,10,8,192,206,7,192,4,0,0,1,0,192,0,0,5,28,3,145,1,8,192,194,12,193,0,128,21,36,128,20, 2,192,255,0,128,2,0,128,15,32,0,20,28,3,144,1,0,0,172,55,168,1,0,0,0,0,9,30,0,0,131,27, 192,48,0,20,224,2,145,196,32,192,1,0,192,0,0,5,192,67,145,10,2,192,206,7,192,4,0,0,1,0,192,0, 0,5,168,3,145,2,59,192,0,128,21,37,128,20,66,239,193,96,128,21,36,128,20,0,128,5,168,131,145,1,2,192, 194,12,193,0,128,21,36,128,20,2,192,255,0,128,2,0,128,15,32,0,20,168,3,144,1,0,0,124,55,168,1,0, 0,0,0,9,30,0,0,131,27,192,48,0,20,76,3,145,0,0,64,2,236,192,16,128,21,36,128,20,2,192,255,0, 128,2,0,128,15,35,0,0,210,0,0,48,128,84,0,0,21,20,0,0,2,48,192,0,128,2,8,132,145,196,35,168, 8,132,144,0,0,128,0,0,64,0,0,21,20,0,0,2,48,192,0,128,2,60,132,145,66,72,192,16,128,21,36,128, 20,2,0,224,0,128,2,60,132,145,0,0,128,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,194,167,192,16, 128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,130,108,193,16,128,21,36,128,20,79,0,192,2,168,192, 16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,194,108,193,16,128,21,36,128,20,79,0,192,66,168, 192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,194,110,193,16,128,21,36,128,20,79,0,192,66, 170,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,66,111,193,16,128,21,36,128,20,79,0,192, 194,170,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,66,113,193,16,128,21,36,128,20,79,0, 192,194,172,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,130,113,193,16,128,21,36,128,20,79, 0,192,2,173,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,194,113,193,16,128,21,36,128,20, 79,0,192,66,173,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,194,105,193,16,128,21,36,128, 20,79,0,192,66,165,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,66,106,193,16,128,21,36, 128,20,79,0,192,194,165,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,29,0,0,128,0,21, 2,111,193,16,128,21,36,128,20,79,0,192,130,170,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0, 0,194,12,193,16,128,21,36,128,20,2,192,255,0,128,2,0,128,15,35,0,0,210,0,0,48,128,20,100,134,144,20, 0,0,2,56,192,0,128,2,252,197,145,225,0,64,29,0,0,128,0,21,2,111,193,16,128,21,36,128,20,79,0,192, 66,203,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,194,12,193,16,128,21,36,128,20,2,192, 255,0,128,2,0,128,15,35,0,0,210,0,0,48,128,20,212,134,144,20,0,0,2,56,192,0,128,2,108,198,145,225, 0,64,129,253,255,136,1,201,232,35,168,152,32,160,1,0,0,131,253,255,48,0,21,20,0,0,2,56,192,0,128,2, 236,198,145,2,8,192,0,128,2,28,199,145,196,35,168,28,135,144,32,48,168,152,32,160,193,250,255,200,2,201,232,35, 168,65,251,255,200,2,201,232,35,168,152,32,160,65,253,255,136,3,201,232,35,168,129,253,255,136,3,201,232,35,168,193, 253,255,136,3,201,232,35,168,65,2,192,136,3,201,232,35,168,193,2,192,136,3,201,232,35,168,152,32,160,65,253,255, 8,5,201,232,35,168,129,253,255,72,6,201,232,35,168,193,253,255,72,7,201,232,35,168,193,255,255,136,8,201,232,35, 168,65,0,192,136,9,201,232,35,168,129,2,192,136,10,201,232,35,168,152,32,160,1,0,0,220,39,160,196,35,168,220, 135,144,192,48,168,67,253,255,48,0,21,20,0,0,2,56,192,0,128,2,208,199,145,2,8,192,0,128,2,12,200,145, 196,35,168,12,136,144,184,48,168,1,0,0,32,40,160,196,35,168,32,136,144,224,48,168,195,253,255,48,0,21,20,0, 0,2,56,192,0,128,2,20,200,145,2,8,192,0,128,2,80,200,145,196,35,168,80,136,144,216,48,168,1,0,0,100, 40,160,196,35,168,100,136,144,0,49,168,67,2,192,48,0,21,20,0,0,2,56,192,0,128,2,88,200,145,2,8,192, 0,128,2,148,200,145,196,35,168,148,136,144,248,48,168,1,0,0,168,40,160,196,35,168,168,136,144,32,49,168,195,2, 192,48,0,21,20,0,0,2,56,192,0,128,2,156,200,145,2,8,192,0,128,2,216,200,145,196,35,168,216,136,144,24, 49,168,152,32,160,193,243,193,66,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,130,108,193,0,128,21, 36,128,20,243,0,0,20,0,0,63,0,9,194,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,194,110, 193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,66,111,193,0,128,21,36,128,20,243,0,0,20,0,0,63, 0,9,66,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,130,113,193,0,128,21,36,128,20,243,0,0, 20,0,0,63,0,9,194,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,1,0,0,180,41,160,196,35, 168,180,137,144,64,49,168,67,253,255,48,0,21,20,0,0,2,56,192,0,128,2,168,201,145,2,8,192,0,128,2,228, 201,145,196,35,168,228,137,144,56,49,168,1,0,0,248,41,160,196,35,168,248,137,144,112,49,168,195,253,255,48,0,21, 20,0,0,2,56,192,0,128,2,236,201,145,2,8,192,0,128,2,40,202,145,196,35,168,40,138,144,104,49,168,1,0, 0,60,42,160,196,35,168,60,138,144,160,49,168,67,2,192,48,0,21,20,0,0,2,56,192,0,128,2,48,202,145,2, 8,192,0,128,2,108,202,145,196,35,168,108,138,144,152,49,168,1,0,0,128,42,160,196,35,168,128,138,144,208,49,168, 195,2,192,48,0,21,20,0,0,2,56,192,0,128,2,116,202,145,2,8,192,0,128,2,176,202,145,196,35,168,176,138, 144,200,49,168,129,253,255,136,31,201,232,35,168,193,255,255,136,31,201,232,35,168,65,0,192,136,31,201,232,35,168,129, 2,192,136,31,201,232,35,168,193,243,193,20,0,0,243,0,9,66,108,193,0,128,21,36,128,20,63,0,0,20,0,0, 243,0,9,130,108,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,108,193,0,128,21,36,128,20,63,0, 0,20,0,0,243,0,9,194,110,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,66,111,193,0,128,21,36, 128,20,63,0,0,20,0,0,243,0,9,66,113,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,130,113,193, 0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,113,193,0,128,21,36,128,20,63,0,0,152,32,160,1,0, 0,188,43,160,196,35,168,188,139,144,52,50,168,131,253,255,48,0,21,20,0,0,2,56,192,0,128,2,176,203,145,2, 8,192,0,128,2,236,203,145,196,35,168,236,139,144,44,50,168,1,0,0,0,44,160,196,35,168,0,140,144,84,50,168, 195,255,255,48,0,21,20,0,0,2,56,192,0,128,2,244,203,145,2,8,192,0,128,2,48,204,145,196,35,168,48,140, 144,76,50,168,1,0,0,68,44,160,196,35,168,68,140,144,116,50,168,67,0,192,48,0,21,20,0,0,2,56,192,0, 128,2,56,204,145,2,8,192,0,128,2,116,204,145,196,35,168,116,140,144,108,50,168,1,0,0,136,44,160,196,35,168, 136,140,144,148,50,168,131,2,192,48,0,21,20,0,0,2,56,192,0,128,2,124,204,145,2,8,192,0,128,2,184,204, 145,196,35,168,184,140,144,140,50,168,152,32,160,193,243,193,66,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63, 0,9,130,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,194,108,193,0,128,21,36,128,20,243,0,0, 20,0,0,63,0,9,194,110,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,66,111,193,0,128,21,36,128, 20,243,0,0,20,0,0,63,0,9,66,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,130,113,193,0, 128,21,36,128,20,243,0,0,20,0,0,63,0,9,194,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9, 1,0,0,148,45,160,196,35,168,148,141,144,180,50,168,131,253,255,48,0,21,20,0,0,2,56,192,0,128,2,136,205, 145,2,8,192,0,128,2,196,205,145,196,35,168,196,141,144,172,50,168,1,0,0,216,45,160,196,35,168,216,141,144,228, 50,168,195,255,255,48,0,21,20,0,0,2,56,192,0,128,2,204,205,145,2,8,192,0,128,2,8,206,145,196,35,168, 8,142,144,220,50,168,1,0,0,28,46,160,196,35,168,28,142,144,20,51,168,67,0,192,48,0,21,20,0,0,2,56, 192,0,128,2,16,206,145,2,8,192,0,128,2,76,206,145,196,35,168,76,142,144,12,51,168,1,0,0,96,46,160,196, 35,168,96,142,144,68,51,168,131,2,192,48,0,21,20,0,0,2,56,192,0,128,2,84,206,145,2,8,192,0,128,2, 144,206,145,196,35,168,144,142,144,60,51,168,65,253,255,200,54,201,232,35,168,193,253,255,136,60,201,232,35,168,65,2, 192,72,66,201,232,35,168,193,2,192,8,72,201,232,35,168,193,243,193,20,0,0,243,0,9,66,108,193,0,128,21,36, 128,20,63,0,0,20,0,0,243,0,9,130,108,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,108,193, 0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,110,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0, 9,66,111,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,66,113,193,0,128,21,36,128,20,63,0,0,20, 0,0,243,0,9,130,113,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,113,193,0,128,21,36,128,20, 63,0,0,152,32,160,65,253,255,200,77,201,12,36,168,129,253,255,8,84,201,12,36,168,193,253,255,72,88,201,12,36, 168,193,255,255,136,94,201,12,36,168,65,0,192,200,98,201,12,36,168,65,2,192,8,103,201,12,36,168,129,2,192,72, 109,201,12,36,168,193,2,192,136,113,201,12,36,168,152,32,160,2,111,193,0,128,21,36,128,20,79,0,192,130,170,192, 0,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,64,108,36,168,0,0,64,134,253,255,248,37,168,0,0, 64,160,37,168,204,37,168,0,0,64,64,36,168,108,36,168,152,36,168,28,37,168,116,37,168,0,0,64,64,36,168,108, 36,168,152,36,168,196,36,168,0,0,64,64,36,168,108,36,168,72,37,168,0,0,64,64,36,168,108,36,168,152,36,168, 240,36,168,0,0,64,64,36,168,196,36,168,72,37,168,0,0,64,152,36,168,240,36,168,72,37,168,0,0,64,196,36, 168,240,36,168,72,37,168,0,0,64,70,253,255,248,37,168,236,47,168,198,253,255,248,37,168,70,2,192,248,37,168,0, 0,64,198,253,255,248,37,168,236,47,168,70,253,255,248,37,168,198,2,192,248,37,168,0,0,64,70,2,192,248,37,168, 236,47,168,70,253,255,248,37,168,198,2,192,248,37,168,0,0,64,198,2,192,248,37,168,236,47,168,198,253,255,248,37, 168,70,2,192,248,37,168,0,0,64,70,253,255,248,37,168,236,47,168,108,36,168,196,36,168,240,36,168,72,37,168,198, 253,255,248,37,168,70,2,192,248,37,168,0,0,64,198,253,255,248,37,168,236,47,168,108,36,168,196,36,168,240,36,168, 72,37,168,70,253,255,248,37,168,198,2,192,248,37,168,0,0,64,70,2,192,248,37,168,236,47,168,108,36,168,196,36, 168,240,36,168,72,37,168,70,253,255,248,37,168,198,2,192,248,37,168,0,0,64,198,2,192,248,37,168,236,47,168,108, 36,168,196,36,168,240,36,168,72,37,168,198,253,255,248,37,168,70,2,192,248,37,168,0,0,64,108,36,168,196,36,168, 240,36,168,72,37,168,70,253,255,248,37,168,198,253,255,248,37,168,70,2,192,248,37,168,198,2,192,248,37,168,0,0, 64,134,253,255,248,37,168,236,47,168,198,255,255,248,37,168,70,0,192,248,37,168,0,0,64,198,255,255,248,37,168,236, 47,168,134,253,255,248,37,168,134,2,192,248,37,168,0,0,64,70,0,192,248,37,168,236,47,168,134,253,255,248,37,168, 134,2,192,248,37,168,0,0,64,134,2,192,248,37,168,236,47,168,198,255,255,248,37,168,70,0,192,248,37,168,0,0, 64,134,253,255,248,37,168,236,47,168,64,36,168,152,36,168,28,37,168,116,37,168,198,255,255,248,37,168,70,0,192,248, 37,168,0,0,64,198,255,255,248,37,168,236,47,168,64,36,168,152,36,168,28,37,168,116,37,168,134,253,255,248,37,168, 134,2,192,248,37,168,0,0,64,70,0,192,248,37,168,236,47,168,64,36,168,152,36,168,28,37,168,116,37,168,134,253, 255,248,37,168,134,2,192,248,37,168,0,0,64,134,2,192,248,37,168,236,47,168,64,36,168,152,36,168,28,37,168,116, 37,168,198,255,255,248,37,168,70,0,192,248,37,168,0,0,64,64,36,168,116,37,168,130,253,255,0,128,21,36,128,20, 0,128,5,140,211,145,152,36,168,194,255,255,0,128,21,36,128,20,0,128,5,164,211,145,28,37,168,134,253,255,248,37, 168,198,255,255,248,37,168,70,0,192,248,37,168,134,2,192,248,37,168,0,0,64,152,36,168,28,37,168,130,253,255,0, 128,21,36,128,20,0,128,5,232,211,145,64,36,168,66,0,192,0,128,21,36,128,20,0,128,5,0,212,145,116,37,168, 134,253,255,248,37,168,198,255,255,248,37,168,70,0,192,248,37,168,134,2,192,248,37,168,0,0,64,152,36,168,28,37, 168,130,2,192,0,128,21,36,128,20,0,128,5,68,212,145,116,37,168,194,255,255,0,128,21,36,128,20,0,128,5,92, 212,145,64,36,168,134,253,255,248,37,168,198,255,255,248,37,168,70,0,192,248,37,168,134,2,192,248,37,168,0,0,64, 64,36,168,116,37,168,130,2,192,0,128,21,36,128,20,0,128,5,160,212,145,28,37,168,66,0,192,0,128,21,36,128, 20,0,128,5,184,212,145,152,36,168,134,253,255,248,37,168,198,255,255,248,37,168,70,0,192,248,37,168,134,2,192,248, 37,168,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,130,108,193,16,128,21,36,128,20,79,0,192,194,108,193, 16,128,21,36,128,20,79,0,192,194,110,193,16,128,21,36,128,20,79,0,192,66,113,193,16,128,21,36,128,20,79,0, 192,194,113,193,16,128,21,36,128,20,79,0,192,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,130,108,193,16, 128,21,36,128,20,79,0,192,194,108,193,16,128,21,36,128,20,79,0,192,130,113,193,16,128,21,36,128,20,79,0,192, 0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,130,108,193,16,128,21,36,128,20,79,0,192,194,108,193,16,128, 21,36,128,20,79,0,192,194,110,193,16,128,21,36,128,20,79,0,192,66,113,193,16,128,21,36,128,20,79,0,192,194, 113,193,16,128,21,36,128,20,79,0,192,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,194,110,193,16,128,21, 36,128,20,79,0,192,66,111,193,16,128,21,36,128,20,79,0,192,66,113,193,16,128,21,36,128,20,79,0,192,0,0, 64,194,108,193,16,128,21,36,128,20,79,0,192,194,110,193,16,128,21,36,128,20,79,0,192,66,111,193,16,128,21,36, 128,20,79,0,192,194,113,193,16,128,21,36,128,20,79,0,192,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192, 194,108,193,16,128,21,36,128,20,79,0,192,194,110,193,16,128,21,36,128,20,79,0,192,66,113,193,16,128,21,36,128, 20,79,0,192,130,113,193,16,128,21,36,128,20,79,0,192,194,113,193,16,128,21,36,128,20,79,0,192,0,0,64,130, 108,193,16,128,21,36,128,20,79,0,192,66,113,193,16,128,21,36,128,20,79,0,192,130,113,193,16,128,21,36,128,20, 79,0,192,194,113,193,16,128,21,36,128,20,79,0,192,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,194,108, 193,16,128,21,36,128,20,79,0,192,66,111,193,16,128,21,36,128,20,79,0,192,66,113,193,16,128,21,36,128,20,79, 0,192,130,113,193,16,128,21,36,128,20,79,0,192,194,113,193,16,128,21,36,128,20,79,0,192,0,0,64,130,108,193, 16,128,21,36,128,20,79,0,192,194,200,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,0,0, 64,134,253,255,104,38,168,0,0,64,194,105,193,16,128,21,36,128,20,79,0,192,2,198,192,16,128,21,36,128,20,2, 192,255,0,128,2,208,128,17,47,0,0,66,106,193,16,128,21,36,128,20,79,0,192,130,198,192,16,128,21,36,128,20, 2,192,255,0,128,2,208,128,17,47,0,0,0,0,64,66,108,193,16,128,21,36,128,20,79,0,192,130,200,192,16,128, 21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,130,108,193,16,128,21,36,128,20,79,0,192,194,200,192,16, 128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,194,108,193,16,128,21,36,128,20,79,0,192,2,201,192, 16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,66,113,193,16,128,21,36,128,20,79,0,192,130,205, 192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,194,113,193,16,128,21,36,128,20,79,0,192,2, 206,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,0,0,64,66,108,193,16,128,21,36,128,20, 79,0,192,130,200,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,130,108,193,16,128,21,36,128, 20,79,0,192,194,200,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,194,108,193,16,128,21,36, 128,20,79,0,192,2,201,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,194,110,193,16,128,21, 36,128,20,79,0,192,2,203,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,66,111,193,16,128, 21,36,128,20,79,0,192,130,203,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,130,113,193,16, 128,21,36,128,20,79,0,192,194,205,192,16,128,21,36,128,20,2,192,255,0,128,2,208,128,17,47,0,0,0,0,64, 70,253,255,104,38,168,198,253,255,104,38,168,70,2,192,104,38,168,198,2,192,104,38,168,0,0,64,134,253,255,104,38, 168,198,255,255,104,38,168,70,0,192,104,38,168,134,2,192,104,38,168,0,0,64,132,209,193,254,0,0,130,39,192,0, 128,21,36,128,20,0,128,5,152,154,145,194,143,193,0,128,21,36,128,20,250,0,0,4,0,0,130,7,192,0,128,2, 0,128,11,3,65,193,48,128,21,37,0,0,104,0,0,0,0,128,66,209,193,0,128,21,36,128,20,254,128,21,80,154, 145,68,36,192,2,0,192,0,128,5,20,219,145,138,21,192,78,5,192,4,0,0,1,0,192,0,0,5,252,26,145,129, 21,192,194,12,193,0,128,21,36,128,20,194,63,192,0,128,2,32,0,20,252,26,144,1,0,0,237,54,168,1,0,0, 0,0,9,30,0,0,131,27,192,48,0,20,196,26,145,4,36,192,2,0,192,0,128,5,124,219,145,138,20,192,78,5, 192,4,0,0,1,0,192,0,0,5,100,27,145,129,20,192,194,12,193,0,128,21,36,128,20,194,63,192,0,128,2,32, 0,20,100,27,144,1,0,0,201,54,168,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,44,27,145,196,35,192, 2,0,192,0,128,5,228,219,145,10,15,192,78,5,192,4,0,0,1,0,192,0,0,5,204,27,145,1,15,192,194,12, 193,0,128,21,36,128,20,194,63,192,0,128,2,32,0,20,204,27,144,1,0,0,93,53,168,1,0,0,0,0,9,30, 0,0,131,27,192,48,0,20,148,27,145,132,35,192,2,0,192,0,128,5,76,220,145,138,14,192,78,5,192,4,0,0, 1,0,192,0,0,5,52,28,145,129,14,192,194,12,193,0,128,21,36,128,20,194,63,192,0,128,2,32,0,20,52,28, 144,1,0,0,45,52,168,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,252,27,145,68,35,192,2,0,192,0, 128,5,180,220,145,138,8,192,78,5,192,4,0,0,1,0,192,0,0,5,156,28,145,129,8,192,194,12,193,0,128,21, 36,128,20,194,63,192,0,128,2,32,0,20,156,28,144,1,0,0,177,51,168,1,0,0,0,0,9,30,0,0,131,22, 192,48,0,20,100,28,145,4,35,192,2,0,192,0,128,5,28,221,145,10,8,192,78,5,192,4,0,0,1,0,192,0, 0,5,4,29,145,1,8,192,194,12,193,0,128,21,36,128,20,194,63,192,0,128,2,32,0,20,4,29,144,1,0,0, 165,51,168,1,0,0,0,0,9,30,0,0,3,25,192,48,0,20,204,28,145,196,34,192,1,0,192,0,0,5,164,93, 145,10,2,192,78,5,192,4,0,0,1,0,192,0,0,5,140,29,145,2,59,192,0,128,21,37,128,20,130,241,193,96, 128,21,36,128,20,0,128,5,140,157,145,1,2,192,194,12,193,0,128,21,36,128,20,194,63,192,0,128,2,32,0,20, 140,29,144,1,0,0,101,51,168,1,0,0,0,0,9,30,0,0,3,25,192,48,0,20,52,29,145,0,0,64,2,236, 192,16,128,21,36,128,20,194,63,192,0,128,2,35,0,0,210,0,0,48,128,84,0,0,21,20,0,0,2,40,192,0, 128,2,232,157,145,168,61,168,232,157,144,0,0,128,0,0,64,0,0,21,20,0,0,2,40,192,0,128,2,28,158,145, 66,72,192,16,128,21,36,128,20,2,32,192,0,128,2,28,158,145,0,0,128,0,0,64,194,113,193,16,128,21,36,128, 20,2,64,192,0,128,1,47,0,0,66,173,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0, 128,15,47,0,64,130,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,2,173,192,16,128,21,36,128,20, 194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64,66,113,193,16,128,21,36,128,20,2,64,192,0,128, 1,47,0,0,194,172,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64,66, 111,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,170,192,16,128,21,36,128,20,194,63,192,0,128,2, 0,128,15,208,128,17,0,128,15,47,0,64,194,110,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,170, 192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64,194,108,193,16,128,21,36, 128,20,2,64,192,0,128,1,47,0,0,66,168,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17, 0,128,15,47,0,64,130,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,2,168,192,16,128,21,36,128, 20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64,66,108,193,16,128,21,36,128,20,2,64,192,0, 128,1,47,0,0,194,167,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64, 66,116,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,175,192,16,128,21,36,128,20,194,63,192,0,128, 2,0,128,15,208,128,17,0,128,15,47,0,64,194,115,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66, 175,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64,29,0,0,128,0,21, 2,111,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,170,192,16,128,21,36,128,20,194,63,192,0,128, 2,0,128,15,208,128,17,0,128,15,47,0,0,194,12,193,16,128,21,36,128,20,194,63,192,0,128,2,35,0,0,210, 0,0,48,128,20,241,128,144,20,0,0,2,56,192,0,128,2,125,192,145,225,0,64,29,0,0,128,0,21,2,111,193, 16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,203,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128, 15,208,128,17,0,128,15,47,0,0,194,12,193,16,128,21,36,128,20,194,63,192,0,128,2,35,0,0,210,0,0,48, 128,20,109,129,144,20,0,0,2,56,192,0,128,2,249,192,145,225,0,64,129,2,192,8,172,202,200,61,168,152,58,160, 1,0,0,131,2,192,48,0,21,20,0,0,2,56,192,0,128,2,133,193,145,2,16,192,0,128,2,181,193,145,168,61, 168,181,129,144,201,42,168,152,58,160,65,5,192,72,173,202,200,61,168,193,4,192,72,173,202,200,61,168,152,58,160,193, 2,192,8,174,202,200,61,168,129,2,192,8,174,202,200,61,168,65,2,192,8,174,202,200,61,168,193,253,255,8,174,202, 200,61,168,65,253,255,8,174,202,200,61,168,152,58,160,193,2,192,136,175,202,200,61,168,129,2,192,200,176,202,200,61, 168,65,2,192,200,177,202,200,61,168,65,0,192,8,179,202,200,61,168,193,255,255,8,180,202,200,61,168,129,253,255,8, 181,202,200,61,168,152,58,160,1,0,0,117,34,160,168,61,168,117,130,144,105,43,168,195,2,192,48,0,21,20,0,0, 2,56,192,0,128,2,105,194,145,2,16,192,0,128,2,165,194,145,168,61,168,165,130,144,97,43,168,1,0,0,185,34, 160,168,61,168,185,130,144,137,43,168,67,2,192,48,0,21,20,0,0,2,56,192,0,128,2,173,194,145,2,16,192,0, 128,2,233,194,145,168,61,168,233,130,144,129,43,168,1,0,0,253,34,160,168,61,168,253,130,144,169,43,168,195,253,255, 48,0,21,20,0,0,2,56,192,0,128,2,241,194,145,2,16,192,0,128,2,45,195,145,168,61,168,45,131,144,161,43, 168,1,0,0,65,35,160,168,61,168,65,131,144,201,43,168,67,253,255,48,0,21,20,0,0,2,56,192,0,128,2,53, 195,145,2,16,192,0,128,2,113,195,145,168,61,168,113,131,144,193,43,168,152,58,160,193,243,193,194,113,193,0,128,21, 36,128,20,243,0,0,20,0,0,63,0,9,130,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,66,113, 193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,66,111,193,0,128,21,36,128,20,243,0,0,20,0,0,63, 0,9,194,110,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,194,108,193,0,128,21,36,128,20,243,0,0, 20,0,0,63,0,9,130,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,66,108,193,0,128,21,36,128, 20,243,0,0,20,0,0,63,0,9,1,0,0,77,36,160,168,61,168,77,132,144,233,43,168,195,2,192,48,0,21,20, 0,0,2,56,192,0,128,2,65,196,145,2,16,192,0,128,2,125,196,145,168,61,168,125,132,144,225,43,168,1,0,0, 145,36,160,168,61,168,145,132,144,25,44,168,67,2,192,48,0,21,20,0,0,2,56,192,0,128,2,133,196,145,2,16, 192,0,128,2,193,196,145,168,61,168,193,132,144,17,44,168,1,0,0,213,36,160,168,61,168,213,132,144,73,44,168,195, 253,255,48,0,21,20,0,0,2,56,192,0,128,2,201,196,145,2,16,192,0,128,2,5,197,145,168,61,168,5,133,144, 65,44,168,1,0,0,25,37,160,168,61,168,25,133,144,121,44,168,67,253,255,48,0,21,20,0,0,2,56,192,0,128, 2,13,197,145,2,16,192,0,128,2,73,197,145,168,61,168,73,133,144,113,44,168,129,2,192,8,202,202,200,61,168,65, 0,192,8,202,202,200,61,168,193,255,255,8,202,202,200,61,168,129,253,255,8,202,202,200,61,168,193,243,193,20,0,0, 243,0,9,194,113,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,130,113,193,0,128,21,36,128,20,63,0, 0,20,0,0,243,0,9,66,113,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,66,111,193,0,128,21,36, 128,20,63,0,0,20,0,0,243,0,9,194,110,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,108,193, 0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,130,108,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0, 9,66,108,193,0,128,21,36,128,20,63,0,0,152,58,160,1,0,0,85,38,160,168,61,168,85,134,144,221,44,168,131, 2,192,48,0,21,20,0,0,2,56,192,0,128,2,73,198,145,2,16,192,0,128,2,133,198,145,168,61,168,133,134,144, 213,44,168,1,0,0,153,38,160,168,61,168,153,134,144,253,44,168,67,0,192,48,0,21,20,0,0,2,56,192,0,128, 2,141,198,145,2,16,192,0,128,2,201,198,145,168,61,168,201,134,144,245,44,168,1,0,0,221,38,160,168,61,168,221, 134,144,29,45,168,195,255,255,48,0,21,20,0,0,2,56,192,0,128,2,209,198,145,2,16,192,0,128,2,13,199,145, 168,61,168,13,135,144,21,45,168,1,0,0,33,39,160,168,61,168,33,135,144,61,45,168,131,253,255,48,0,21,20,0, 0,2,56,192,0,128,2,21,199,145,2,16,192,0,128,2,81,199,145,168,61,168,81,135,144,53,45,168,152,58,160,193, 243,193,194,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,130,113,193,0,128,21,36,128,20,243,0,0, 20,0,0,63,0,9,66,113,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,66,111,193,0,128,21,36,128, 20,243,0,0,20,0,0,63,0,9,194,110,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,194,108,193,0, 128,21,36,128,20,243,0,0,20,0,0,63,0,9,130,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9, 66,108,193,0,128,21,36,128,20,243,0,0,20,0,0,63,0,9,1,0,0,45,40,160,168,61,168,45,136,144,93,45, 168,131,2,192,48,0,21,20,0,0,2,56,192,0,128,2,33,200,145,2,16,192,0,128,2,93,200,145,168,61,168,93, 136,144,85,45,168,1,0,0,113,40,160,168,61,168,113,136,144,141,45,168,67,0,192,48,0,21,20,0,0,2,56,192, 0,128,2,101,200,145,2,16,192,0,128,2,161,200,145,168,61,168,161,136,144,133,45,168,1,0,0,181,40,160,168,61, 168,181,136,144,189,45,168,195,255,255,48,0,21,20,0,0,2,56,192,0,128,2,169,200,145,2,16,192,0,128,2,229, 200,145,168,61,168,229,136,144,181,45,168,1,0,0,249,40,160,168,61,168,249,136,144,237,45,168,131,253,255,48,0,21, 20,0,0,2,56,192,0,128,2,237,200,145,2,16,192,0,128,2,41,201,145,168,61,168,41,137,144,229,45,168,193,2, 192,72,225,202,200,61,168,65,2,192,8,231,202,200,61,168,193,253,255,200,236,202,200,61,168,65,253,255,136,242,202,200, 61,168,193,243,193,20,0,0,243,0,9,194,113,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,130,113,193, 0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,66,113,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0, 9,66,111,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,194,110,193,0,128,21,36,128,20,63,0,0,20, 0,0,243,0,9,194,108,193,0,128,21,36,128,20,63,0,0,20,0,0,243,0,9,130,108,193,0,128,21,36,128,20, 63,0,0,20,0,0,243,0,9,66,108,193,0,128,21,36,128,20,63,0,0,152,58,160,193,2,192,72,248,202,236,61, 168,129,2,192,136,1,203,236,61,168,65,2,192,200,7,203,236,61,168,65,0,192,8,17,203,236,61,168,193,255,255,72, 23,203,236,61,168,193,253,255,136,29,203,236,61,168,129,253,255,200,38,203,236,61,168,65,253,255,8,45,203,236,61,168, 152,58,160,2,111,193,0,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,170,192,0,128,21,36,128,20,194,63, 192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,64,92,62,168,0,0,64,134,2,192,121,32,168,0,0,64,1, 32,168,61,32,168,0,0,64,32,62,168,92,62,168,152,62,168,76,63,168,196,63,168,0,0,64,32,62,168,92,62,168, 152,62,168,212,62,168,0,0,64,32,62,168,92,62,168,136,63,168,0,0,64,32,62,168,92,62,168,152,62,168,16,63, 168,0,0,64,32,62,168,212,62,168,136,63,168,0,0,64,152,62,168,16,63,168,136,63,168,0,0,64,212,62,168,16, 63,168,136,63,168,0,0,64,198,2,192,121,32,168,133,42,168,70,2,192,121,32,168,198,253,255,121,32,168,0,0,64, 70,2,192,121,32,168,133,42,168,198,2,192,121,32,168,70,253,255,121,32,168,0,0,64,198,253,255,121,32,168,133,42, 168,198,2,192,121,32,168,70,253,255,121,32,168,0,0,64,70,253,255,121,32,168,133,42,168,70,2,192,121,32,168,198, 253,255,121,32,168,0,0,64,198,2,192,121,32,168,133,42,168,92,62,168,212,62,168,16,63,168,136,63,168,70,2,192, 121,32,168,198,253,255,121,32,168,0,0,64,70,2,192,121,32,168,133,42,168,92,62,168,212,62,168,16,63,168,136,63, 168,198,2,192,121,32,168,70,253,255,121,32,168,0,0,64,198,253,255,121,32,168,133,42,168,92,62,168,212,62,168,16, 63,168,136,63,168,198,2,192,121,32,168,70,253,255,121,32,168,0,0,64,70,253,255,121,32,168,133,42,168,92,62,168, 212,62,168,16,63,168,136,63,168,70,2,192,121,32,168,198,253,255,121,32,168,0,0,64,92,62,168,212,62,168,16,63, 168,136,63,168,198,2,192,121,32,168,70,2,192,121,32,168,198,253,255,121,32,168,70,253,255,121,32,168,0,0,64,134, 2,192,121,32,168,133,42,168,70,0,192,121,32,168,198,255,255,121,32,168,0,0,64,70,0,192,121,32,168,133,42,168, 134,2,192,121,32,168,134,253,255,121,32,168,0,0,64,198,255,255,121,32,168,133,42,168,134,2,192,121,32,168,134,253, 255,121,32,168,0,0,64,134,253,255,121,32,168,133,42,168,70,0,192,121,32,168,198,255,255,121,32,168,0,0,64,134, 2,192,121,32,168,133,42,168,32,62,168,152,62,168,76,63,168,196,63,168,70,0,192,121,32,168,198,255,255,121,32,168, 0,0,64,70,0,192,121,32,168,133,42,168,32,62,168,152,62,168,76,63,168,196,63,168,134,2,192,121,32,168,134,253, 255,121,32,168,0,0,64,198,255,255,121,32,168,133,42,168,32,62,168,152,62,168,76,63,168,196,63,168,134,2,192,121, 32,168,134,253,255,121,32,168,0,0,64,134,253,255,121,32,168,133,42,168,32,62,168,152,62,168,76,63,168,196,63,168, 70,0,192,121,32,168,198,255,255,121,32,168,0,0,64,32,62,168,196,63,168,130,2,192,0,128,21,36,128,20,0,128, 5,53,206,145,152,62,168,66,0,192,0,128,21,36,128,20,0,128,5,77,206,145,76,63,168,134,2,192,121,32,168,70, 0,192,121,32,168,198,255,255,121,32,168,134,253,255,121,32,168,0,0,64,152,62,168,76,63,168,130,2,192,0,128,21, 36,128,20,0,128,5,145,206,145,32,62,168,194,255,255,0,128,21,36,128,20,0,128,5,169,206,145,196,63,168,134,2, 192,121,32,168,70,0,192,121,32,168,198,255,255,121,32,168,134,253,255,121,32,168,0,0,64,152,62,168,76,63,168,130, 253,255,0,128,21,36,128,20,0,128,5,237,206,145,196,63,168,66,0,192,0,128,21,36,128,20,0,128,5,5,207,145, 32,62,168,134,2,192,121,32,168,70,0,192,121,32,168,198,255,255,121,32,168,134,253,255,121,32,168,0,0,64,32,62, 168,196,63,168,130,253,255,0,128,21,36,128,20,0,128,5,73,207,145,76,63,168,194,255,255,0,128,21,36,128,20,0, 128,5,97,207,145,152,62,168,134,2,192,121,32,168,70,0,192,121,32,168,198,255,255,121,32,168,134,253,255,121,32,168, 0,0,64,194,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,113,193,16,128,21,36,128,20,2,64, 192,0,128,1,47,0,0,66,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,111,193,16,128,21,36, 128,20,2,64,192,0,128,1,47,0,0,194,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,108,193, 16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,0,0,64,194,113,193,16,128,21,36,128,20,2,64,192,0,128, 1,47,0,0,130,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,113,193,16,128,21,36,128,20,2, 64,192,0,128,1,47,0,0,130,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,0,0,64,194,113,193, 16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0, 0,66,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,111,193,16,128,21,36,128,20,2,64,192,0, 128,1,47,0,0,194,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,108,193,16,128,21,36,128,20, 2,64,192,0,128,1,47,0,0,0,0,64,194,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,111, 193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,110,193,16,128,21,36,128,20,2,64,192,0,128,1,47, 0,0,194,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,0,0,64,66,113,193,16,128,21,36,128,20, 2,64,192,0,128,1,47,0,0,66,111,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,110,193,16,128, 21,36,128,20,2,64,192,0,128,1,47,0,0,66,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,0, 0,64,194,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,113,193,16,128,21,36,128,20,2,64,192, 0,128,1,47,0,0,66,111,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,108,193,16,128,21,36,128, 20,2,64,192,0,128,1,47,0,0,130,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,108,193,16, 128,21,36,128,20,2,64,192,0,128,1,47,0,0,0,0,64,130,113,193,16,128,21,36,128,20,2,64,192,0,128,1, 47,0,0,194,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,108,193,16,128,21,36,128,20,2,64, 192,0,128,1,47,0,0,66,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,0,0,64,194,113,193,16, 128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0, 194,110,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,108,193,16,128,21,36,128,20,2,64,192,0,128, 1,47,0,0,130,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,66,108,193,16,128,21,36,128,20,2, 64,192,0,128,1,47,0,0,0,0,64,130,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,205,192, 16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,0,0,64,134,2,192,245,32, 168,0,0,64,66,116,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,208,192,16,128,21,36,128,20,194, 63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,194,115,193,16,128,21,36,128,20,2,64,192,0,128,1, 47,0,0,2,208,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,0,0, 64,194,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,2,206,192,16,128,21,36,128,20,194,63,192,0, 128,2,0,128,15,208,128,17,0,128,15,47,0,0,130,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0, 194,205,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,66,113,193,16,128, 21,36,128,20,2,64,192,0,128,1,47,0,0,130,205,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208, 128,17,0,128,15,47,0,0,194,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,2,201,192,16,128,21, 36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,66,108,193,16,128,21,36,128,20,2,64, 192,0,128,1,47,0,0,130,200,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47, 0,0,0,0,64,194,113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,2,206,192,16,128,21,36,128,20, 194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,130,113,193,16,128,21,36,128,20,2,64,192,0,128, 1,47,0,0,194,205,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,66, 113,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,205,192,16,128,21,36,128,20,194,63,192,0,128,2, 0,128,15,208,128,17,0,128,15,47,0,0,66,111,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,130,203, 192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,194,110,193,16,128,21,36, 128,20,2,64,192,0,128,1,47,0,0,2,203,192,16,128,21,36,128,20,194,63,192,0,128,2,0,128,15,208,128,17, 0,128,15,47,0,0,130,108,193,16,128,21,36,128,20,2,64,192,0,128,1,47,0,0,194,200,192,16,128,21,36,128, 20,194,63,192,0,128,2,0,128,15,208,128,17,0,128,15,47,0,0,0,0,64,198,2,192,245,32,168,70,2,192,245, 32,168,198,253,255,245,32,168,70,253,255,245,32,168,0,0,64,134,2,192,245,32,168,70,0,192,245,32,168,198,255,255, 245,32,168,134,253,255,245,32,168,0,0,64,78,5,192,4,0,0,2,0,192,0,128,5,169,217,148,130,170,192,0,128, 21,36,128,20,193,63,192,0,0,2,66,203,192,0,128,21,36,128,20,194,63,192,0,128,2,26,0,0,32,0,20,93, 87,144,42,0,0,2,105,192,0,128,21,36,128,20,194,63,192,209,128,2,32,0,20,133,23,144,221,0,0,42,0,0, 161,55,160,45,0,0,2,192,255,0,128,2,209,128,15,32,0,20,161,87,144,42,0,0,4,244,193,239,0,0,132,244, 193,223,0,0,130,170,192,0,128,21,36,128,20,1,192,255,0,0,2,0,0,15,66,203,192,0,128,21,36,128,20,2, 192,255,0,128,2,0,128,15,26,0,0,32,0,20,241,87,144,42,0,0,194,137,192,0,128,21,36,128,20,194,63,192, 209,128,2,32,0,20,25,24,144,221,0,0,42,0,0,53,56,160,45,0,0,2,192,255,0,128,2,209,128,15,32,0, 20,53,88,144,42,0,0,68,244,193,239,0,0,196,244,193,223,0,0,66,78,193,0,128,21,36,128,20,241,0,0,2, 111,193,0,128,21,36,128,20,0,0,5,31,0,0,2,192,255,16,128,18,32,0,19,22,128,15,35,0,0,4,0,0, 241,0,0,0,0,15,16,0,21,130,0,12,0,128,12,38,0,0,50,0,12,0,128,12,35,0,0,130,0,0,48,128, 20,253,216,144,65,217,145,66,255,255,48,128,21,213,152,144,4,244,193,241,0,0,196,244,193,0,0,4,217,24,144,1, 0,192,68,244,193,242,0,0,0,128,15,32,0,17,130,45,193,0,128,21,36,128,20,31,0,0,169,57,160,66,255,255, 128,128,21,29,153,144,68,244,193,241,0,0,132,244,193,0,0,4,33,25,144,1,0,192,0,0,15,4,244,193,0,0, 1,130,45,193,0,128,21,36,128,20,31,0,0,169,57,160,65,255,255,128,0,21,97,89,144,130,45,193,0,128,21,36, 128,20,15,0,192,169,57,160,4,244,193,241,0,0,196,244,193,0,0,4,121,25,144,1,0,192,68,244,193,242,0,0, 132,244,193,0,128,4,145,153,144,2,0,192,0,128,15,32,0,17,130,45,193,0,128,21,36,128,20,31,0,0,1,0, 0,0,0,9,30,0,0,130,27,192,0,128,20,21,151,145,0,0,64,78,5,192,4,0,0,1,0,192,0,0,5,90, 64,148,130,176,193,0,128,21,36,128,20,241,0,0,0,0,14,3,60,192,48,0,18,4,244,193,31,0,0,2,236,192, 0,128,21,36,128,20,193,63,192,242,0,18,26,128,19,0,128,15,32,0,20,33,92,145,131,22,192,209,0,0,48,0, 20,217,27,144,33,0,0,48,0,20,241,27,144,209,0,0,16,0,18,105,91,145,32,128,18,161,219,145,3,69,193,48, 0,21,21,0,0,106,0,0,68,244,193,223,0,0,48,128,21,37,0,0,109,0,0,132,244,193,239,0,0,1,0,192, 0,0,52,130,0,192,0,128,38,3,128,255,48,0,18,32,0,17,0,0,15,0,0,11,19,0,0,68,244,193,242,0, 0,132,244,193,0,128,4,13,219,144,42,0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0,11,194,255,223,32, 0,18,66,0,192,0,128,34,0,128,15,0,128,11,0,128,15,32,0,17,26,0,0,1,0,192,48,0,21,21,0,20, 109,0,0,0,0,37,13,60,160,0,128,10,0,128,9,42,0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0, 11,194,255,223,32,0,18,66,0,192,0,128,34,0,128,15,0,128,11,0,128,15,32,0,17,26,0,0,1,0,192,48, 0,21,21,0,20,109,0,0,0,0,37,249,59,160,3,69,193,48,128,21,37,0,0,106,0,0,4,244,193,253,0,0, 1,0,192,0,0,53,0,0,33,0,0,15,0,0,11,195,63,192,48,0,18,249,59,160,2,69,193,208,128,21,37,0, 0,106,0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0,33,0,0,15,0,0,11,195,63,192,48,0,18,13, 60,160,33,0,0,48,0,20,33,28,144,4,244,193,241,0,0,13,60,160,4,244,193,241,0,0,16,0,21,4,38,192, 0,0,5,31,0,0,33,60,160,16,0,21,4,38,192,242,0,0,16,128,20,47,0,0,194,12,193,0,128,21,36,128, 20,193,63,192,242,0,18,26,128,19,0,128,15,32,0,20,61,94,145,131,22,192,209,0,0,48,0,20,253,29,144,33, 0,0,48,0,20,21,30,144,209,0,0,16,0,18,141,93,145,32,128,18,197,221,145,3,69,193,48,0,21,21,0,0, 106,0,0,68,244,193,223,0,0,48,128,21,37,0,0,109,0,0,132,244,193,239,0,0,1,0,192,0,0,52,130,0, 192,0,128,38,3,128,255,48,0,18,32,0,17,0,0,15,0,0,11,19,0,0,68,244,193,242,0,0,132,244,193,0, 128,4,49,221,144,42,0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0,11,194,255,223,32,0,18,66,0,192, 0,128,34,0,128,15,0,128,11,0,128,15,32,0,17,26,0,0,1,0,192,48,0,21,21,0,20,109,0,0,0,0, 37,45,62,160,0,128,10,0,128,9,42,0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0,11,194,255,223,32, 0,18,66,0,192,0,128,34,0,128,15,0,128,11,0,128,15,32,0,17,26,0,0,1,0,192,48,0,21,21,0,20, 109,0,0,0,0,37,29,62,160,3,69,193,48,128,21,37,0,0,106,0,0,4,244,193,253,0,0,1,0,192,0,0, 53,0,0,33,0,0,15,0,0,11,195,63,192,48,0,18,29,62,160,2,69,193,208,128,21,37,0,0,106,0,0,4, 244,193,253,0,0,1,0,192,0,0,53,0,0,33,0,0,15,0,0,11,195,63,192,48,0,18,45,62,160,33,0,0, 48,0,20,61,30,144,4,244,193,241,0,0,45,62,160,4,244,193,241,0,0,4,38,192,0,0,5,31,0,0,61,62, 160,4,38,192,242,0,0,16,128,20,47,0,0,130,45,193,0,128,21,36,128,20,193,63,192,242,0,18,26,128,19,0, 128,15,32,0,20,90,64,145,131,22,192,209,0,0,48,0,20,26,0,144,33,0,0,48,0,20,50,0,144,209,0,0, 16,0,18,169,95,145,32,128,18,225,223,145,3,69,193,48,0,21,21,0,0,106,0,0,68,244,193,223,0,0,48,128, 21,37,0,0,109,0,0,132,244,193,239,0,0,1,0,192,0,0,52,130,0,192,0,128,38,3,128,255,48,0,18,32, 0,17,0,0,15,0,0,11,19,0,0,68,244,193,242,0,0,132,244,193,0,128,4,77,223,144,42,0,0,4,244,193, 253,0,0,1,0,192,0,0,53,0,0,11,194,255,223,32,0,18,66,0,192,0,128,34,0,128,15,0,128,11,0,128, 15,32,0,17,26,0,0,1,0,192,48,0,21,21,0,20,109,0,0,0,0,37,74,32,160,0,128,10,0,128,9,42, 0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0,11,194,255,223,32,0,18,66,0,192,0,128,34,0,128,15, 0,128,11,0,128,15,32,0,17,26,0,0,1,0,192,48,0,21,21,0,20,109,0,0,0,0,37,58,32,160,3,69, 193,48,128,21,37,0,0,106,0,0,4,244,193,253,0,0,1,0,192,0,0,53,0,0,33,0,0,15,0,0,11,195, 63,192,48,0,18,58,32,160,2,69,193,208,128,21,37,0,0,106,0,0,4,244,193,253,0,0,1,0,192,0,0,53, 0,0,33,0,0,15,0,0,11,195,63,192,48,0,18,74,32,160,33,0,0,48,0,20,90,0,144,4,244,193,241,0, 0,74,32,160,4,244,193,241,0,0,4,38,192,0,0,5,31,0,0,90,32,160,4,38,192,242,0,0,16,128,20,47, 0,0,1,0,0,0,0,9,30,0,0,131,27,192,48,0,20,201,25,145,0,0,64,129,176,193,130,6,192,3,0,192, 20,0,9,63,128,8,130,128,145,78,5,192,4,0,0,2,8,192,0,128,2,218,192,145,130,39,192,0,128,21,36,128, 20,243,0,0,4,0,0,130,7,192,0,128,2,48,128,17,0,128,11,131,91,193,48,128,21,37,0,0,104,0,0,0, 0,128,1,0,0,0,0,9,30,0,0,130,27,192,16,128,20,146,128,145,196,179,193,250,0,0,4,180,193,253,0,0, 209,0,0,68,177,193,0,0,4,34,65,145,225,0,0,132,177,193,0,0,4,102,2,145,209,0,0,132,178,193,0,0, 4,66,65,145,225,0,0,196,178,193,0,0,4,102,2,145,4,181,193,250,0,0,68,181,193,253,0,0,209,0,0,68, 177,193,0,0,4,114,65,145,225,0,0,132,177,193,0,0,4,146,1,145,209,0,0,132,178,193,0,0,4,214,65,145, 225,0,0,196,178,193,0,0,4,214,65,145,196,179,193,223,0,0,4,180,193,239,0,0,132,180,193,241,0,0,68,179, 193,31,0,0,196,180,193,241,0,0,132,179,193,31,0,0,132,181,193,241,0,0,68,180,193,31,0,0,102,34,160,68, 182,193,250,0,0,132,182,193,253,0,0,209,0,0,68,177,193,0,0,4,6,66,145,225,0,0,132,177,193,0,0,4, 38,2,145,209,0,0,132,178,193,0,0,4,102,66,145,225,0,0,196,178,193,0,0,4,102,66,145,196,179,193,223,0, 0,4,180,193,239,0,0,196,181,193,241,0,0,68,179,193,31,0,0,4,182,193,241,0,0,132,179,193,31,0,0,196, 182,193,241,0,0,68,180,193,31,0,0,1,105,192,194,32,192,3,0,192,20,0,9,63,128,8,114,130,145,68,177,193, 241,0,0,16,0,18,178,67,145,2,105,192,16,128,21,36,128,20,79,0,192,196,177,193,242,0,0,32,128,18,218,194, 145,42,0,0,208,0,21,20,0,0,2,0,192,0,128,5,218,130,145,2,105,192,16,128,21,36,128,20,79,0,192,178, 34,160,132,178,193,241,0,0,16,0,18,178,67,145,2,105,192,16,128,21,36,128,20,130,0,192,0,128,1,47,0,0, 4,179,193,242,0,0,32,128,18,70,195,145,42,0,0,208,0,21,20,0,0,2,0,192,0,128,5,70,131,145,2,105, 192,16,128,21,36,128,20,130,0,192,0,128,1,47,0,0,22,35,160,196,179,193,241,0,0,16,0,18,178,67,145,2, 105,192,16,128,21,36,128,20,2,1,192,0,128,1,47,0,0,68,180,193,242,0,0,32,128,18,178,195,145,42,0,0, 208,0,21,20,0,0,2,0,192,0,128,5,178,131,145,2,105,192,16,128,21,36,128,20,2,1,192,0,128,1,47,0, 0,130,35,160,0,0,64,194,143,193,16,128,21,36,128,20,253,0,0,194,143,193,0,128,21,36,128,20,250,0,0,6, 0,192,196,244,193,239,0,0,2,226,255,224,128,21,194,196,144,210,0,0,128,128,21,42,0,0,226,0,0,128,128,21, 45,0,0,196,244,193,242,0,0,128,128,21,47,0,0,68,245,193,143,0,0,214,0,0,2,236,192,16,128,21,36,128, 20,194,63,192,0,128,2,68,244,193,47,0,0,130,45,193,16,128,21,36,128,20,194,63,192,0,128,2,132,244,193,47, 0,0,68,244,193,0,128,4,118,196,144,68,244,193,242,0,0,132,244,193,47,0,0,210,0,0,68,244,193,0,128,4, 42,0,0,154,196,144,226,0,0,208,128,20,45,0,0,26,197,148,130,0,0,132,244,193,0,128,4,38,0,0,194,196, 144,196,244,193,242,0,0,128,128,20,196,244,193,47,0,0,196,181,193,242,0,0,224,128,20,26,133,144,132,180,193,242, 0,0,224,128,20,30,197,144,68,182,193,15,0,0,132,182,193,31,0,0,196,181,193,239,0,0,4,245,193,242,0,0, 196,182,193,47,0,0,68,245,193,242,0,0,4,182,193,47,0,0,0,0,64,68,179,193,242,0,0,224,128,20,186,197, 144,132,180,193,242,0,0,196,181,193,47,0,0,196,180,193,242,0,0,4,182,193,47,0,0,4,181,193,242,0,0,68, 182,193,47,0,0,68,181,193,242,0,0,132,182,193,47,0,0,132,181,193,242,0,0,196,182,193,47,0,0,4,181,193, 15,0,0,68,181,193,31,0,0,132,180,193,239,0,0,4,245,193,242,0,0,132,181,193,47,0,0,68,245,193,242,0, 0,196,180,193,47,0,0,0,0,64,4,178,193,242,0,0,224,128,20,166,198,144,132,180,193,242,0,0,196,181,193,47, 0,0,196,180,193,242,0,0,4,182,193,47,0,0,4,181,193,242,0,0,68,182,193,47,0,0,68,181,193,242,0,0, 132,182,193,47,0,0,132,181,193,242,0,0,196,182,193,47,0,0,68,179,193,242,0,0,132,180,193,47,0,0,132,179, 193,242,0,0,196,180,193,47,0,0,196,179,193,242,0,0,4,181,193,47,0,0,4,180,193,242,0,0,68,181,193,47, 0,0,68,180,193,242,0,0,132,181,193,47,0,0,196,179,193,15,0,0,4,180,193,31,0,0,68,179,193,239,0,0, 4,245,193,242,0,0,68,180,193,47,0,0,68,245,193,242,0,0,132,179,193,47,0,0,0,0,64,196,176,193,242,0, 0,224,128,20,226,199,144,132,180,193,242,0,0,196,181,193,47,0,0,196,180,193,242,0,0,4,182,193,47,0,0,4, 181,193,242,0,0,68,182,193,47,0,0,68,181,193,242,0,0,132,182,193,47,0,0,132,181,193,242,0,0,196,182,193, 47,0,0,68,179,193,242,0,0,132,180,193,47,0,0,132,179,193,242,0,0,196,180,193,47,0,0,196,179,193,242,0, 0,4,181,193,47,0,0,4,180,193,242,0,0,68,181,193,47,0,0,68,180,193,242,0,0,132,181,193,47,0,0,4, 178,193,242,0,0,68,179,193,47,0,0,68,178,193,242,0,0,132,179,193,47,0,0,132,178,193,242,0,0,196,179,193, 47,0,0,196,178,193,242,0,0,4,180,193,47,0,0,4,179,193,242,0,0,68,180,193,47,0,0,132,178,193,15,0, 0,196,178,193,31,0,0,4,178,193,239,0,0,4,245,193,242,0,0,4,179,193,47,0,0,68,245,193,242,0,0,68, 178,193,47,0,0,0,0,64,196,244,193,242,0,0,32,128,18,2,200,148,4,245,193,242,0,0,32,128,18,10,200,145, 196,244,193,15,0,192,196,244,193,242,0,0,132,176,193,47,0,0,132,180,193,242,0,0,196,181,193,47,0,0,196,180, 193,242,0,0,4,182,193,47,0,0,4,181,193,242,0,0,68,182,193,47,0,0,68,181,193,242,0,0,132,182,193,47, 0,0,132,181,193,242,0,0,196,182,193,47,0,0,68,179,193,242,0,0,132,180,193,47,0,0,132,179,193,242,0,0, 196,180,193,47,0,0,196,179,193,242,0,0,4,181,193,47,0,0,4,180,193,242,0,0,68,181,193,47,0,0,68,180, 193,242,0,0,132,181,193,47,0,0,4,178,193,242,0,0,68,179,193,47,0,0,68,178,193,242,0,0,132,179,193,47, 0,0,132,178,193,242,0,0,196,179,193,47,0,0,196,178,193,242,0,0,4,180,193,47,0,0,4,179,193,242,0,0, 68,180,193,47,0,0,196,176,193,242,0,0,4,178,193,47,0,0,4,177,193,242,0,0,68,178,193,47,0,0,68,177, 193,242,0,0,132,178,193,47,0,0,132,177,193,242,0,0,196,178,193,47,0,0,196,177,193,242,0,0,4,179,193,47, 0,0,68,177,193,15,0,0,132,177,193,31,0,0,196,176,193,239,0,0,4,245,193,242,0,0,196,177,193,47,0,0, 68,245,193,242,0,0,4,177,193,47,0,0,0,0,64,2,20,192,0,128,20,178,201,144,2,20,192,16,128,20,178,201, 144,182,35,160,194,143,193,16,128,21,36,128,20,253,0,0,194,143,193,0,128,21,36,128,20,250,0,0,196,243,193,246, 0,0,218,35,160,2,20,192,0,128,20,246,201,144,2,20,192,16,128,20,22,138,144,13,0,192,194,143,193,0,128,21, 36,128,20,250,0,0,196,243,193,246,0,0,218,35,160,0,0,64,0,0,21,4,245,193,15,0,192,20,0,0,2,16, 192,0,128,2,58,202,145,182,35,168,0,0,64,0,0,21,4,245,193,15,0,192,20,0,0,2,40,192,0,128,2,110, 138,145,2,16,192,0,128,2,106,202,145,150,41,160,222,41,160,0,0,64,4,245,193,15,0,192,1,0,0,162,42,160, 66,78,193,16,128,21,36,128,20,194,63,192,0,128,2,162,202,145,4,245,193,63,0,0,48,0,21,20,0,0,242,0, 0,32,128,18,130,202,145,2,16,192,0,128,2,198,202,145,182,35,168,0,0,64,4,245,193,15,0,192,1,0,0,254, 42,160,222,41,168,66,78,193,16,128,21,36,128,20,194,63,192,0,128,2,254,202,145,4,245,193,63,0,0,48,0,21, 20,0,0,242,0,0,32,128,18,218,202,145,2,16,192,0,128,2,34,203,145,150,41,160,0,0,64,196,243,193,143,4, 192,129,2,192,62,42,168,218,32,160,196,243,193,207,2,192,131,2,192,202,42,168,218,32,160,196,243,193,143,2,192,65, 5,192,62,42,168,196,243,193,143,2,192,193,4,192,62,42,168,218,32,160,196,243,193,15,0,192,193,2,192,62,42,168, 196,243,193,15,0,192,129,2,192,62,42,168,196,243,193,15,0,192,65,2,192,62,42,168,196,243,193,15,0,192,193,253, 255,62,42,168,196,243,193,15,0,192,65,253,255,62,42,168,218,32,160,193,2,192,26,42,168,129,2,192,26,42,168,65, 2,192,26,42,168,65,0,192,26,42,168,193,255,255,26,42,168,129,253,255,26,42,168,218,32,160,196,243,193,15,3,192, 195,2,192,202,42,168,196,243,193,15,3,192,67,2,192,202,42,168,196,243,193,15,3,192,195,253,255,202,42,168,196,243, 193,15,3,192,67,253,255,202,42,168,218,32,160,195,2,192,114,42,168,67,2,192,114,42,168,195,253,255,114,42,168,67, 253,255,114,42,168,129,2,192,26,42,168,65,0,192,26,42,168,193,255,255,26,42,168,129,253,255,26,42,168,218,32,160, 196,243,193,15,3,192,131,2,192,202,42,168,196,243,193,15,3,192,67,0,192,202,42,168,196,243,193,15,3,192,195,255, 255,202,42,168,196,243,193,15,3,192,131,253,255,202,42,168,218,32,160,131,2,192,114,42,168,67,0,192,114,42,168,195, 255,255,114,42,168,131,253,255,114,42,168,193,2,192,26,42,168,65,2,192,26,42,168,193,253,255,26,42,168,65,253,255, 26,42,168,218,32,160,2,75,192,0,128,21,36,128,20,2,32,192,0,128,2,42,141,145,193,2,192,26,42,168,194,74, 192,0,128,21,36,128,20,2,32,192,0,128,2,74,141,145,129,2,192,26,42,168,130,74,192,0,128,21,36,128,20,2, 32,192,0,128,2,106,141,145,65,2,192,26,42,168,130,72,192,0,128,21,36,128,20,2,32,192,0,128,2,138,141,145, 65,0,192,26,42,168,2,72,192,0,128,21,36,128,20,2,32,192,0,128,2,170,141,145,193,255,255,26,42,168,2,70, 192,0,128,21,36,128,20,2,32,192,0,128,2,202,141,145,193,253,255,26,42,168,194,69,192,0,128,21,36,128,20,2, 32,192,0,128,2,234,141,145,129,253,255,26,42,168,130,69,192,0,128,21,36,128,20,2,32,192,0,128,2,10,142,145, 65,253,255,26,42,168,218,32,160,196,243,193,15,0,192,193,2,192,62,42,168,196,243,193,15,0,192,65,253,255,62,42, 168,218,32,160,196,243,193,15,0,192,129,2,192,62,42,168,218,32,160,196,243,193,15,0,192,65,2,192,62,42,168,196, 243,193,15,0,192,193,253,255,62,42,168,218,32,160,193,2,192,26,42,168,218,32,160,129,2,192,26,42,168,129,253,255, 26,42,168,218,32,160,65,2,192,26,42,168,218,32,160,65,0,192,26,42,168,193,255,255,26,42,168,218,32,160,196,243, 193,15,3,192,195,2,192,202,42,168,196,243,193,15,3,192,67,253,255,202,42,168,218,32,160,196,243,193,15,3,192,67, 2,192,202,42,168,196,243,193,15,3,192,195,253,255,202,42,168,218,32,160,195,2,192,114,42,168,67,253,255,114,42,168, 218,32,160,67,2,192,114,42,168,195,253,255,114,42,168,218,32,160,196,243,193,15,3,192,131,2,192,202,42,168,196,243, 193,15,3,192,131,253,255,202,42,168,218,32,160,196,243,193,15,3,192,67,0,192,202,42,168,196,243,193,15,3,192,195, 255,255,202,42,168,218,32,160,193,2,192,26,42,168,65,253,255,26,42,168,218,32,160,131,2,192,114,42,168,131,253,255, 114,42,168,218,32,160,65,2,192,26,42,168,193,253,255,26,42,168,218,32,160,67,0,192,114,42,168,195,255,255,114,42, 168,218,32,160,1,183,193,2,6,192,3,0,192,20,0,9,63,128,8,190,143,145,132,176,193,241,0,0,18,0,0,4, 178,193,0,128,4,230,143,144,241,0,0,196,176,193,242,0,0,16,128,20,4,183,193,47,0,0,78,5,192,4,0,0, 2,16,192,0,128,2,70,208,145,130,39,192,0,128,21,36,128,20,243,0,0,4,0,0,130,7,192,0,128,2,48,128, 17,0,128,11,131,111,193,48,128,21,37,0,0,104,0,0,0,0,128,1,0,0,0,0,9,30,0,0,130,27,192,16, 128,20,254,143,145,0,0,64,10,0,192,194,143,193,16,128,21,36,128,20,253,0,0,2,236,192,16,128,21,36,128,20, 2,192,255,0,128,2,0,128,15,35,0,0,194,143,193,0,128,21,36,128,20,242,0,0,48,128,20,174,208,144,42,0, 0,226,0,0,208,128,20,45,0,0,2,105,192,16,128,21,36,128,20,66,0,192,0,128,2,234,144,145,196,176,193,243, 0,0,132,177,193,242,0,0,0,128,20,130,145,145,2,105,192,16,128,21,36,128,20,130,0,192,0,128,2,26,145,145, 4,178,193,243,0,0,196,178,193,242,0,0,0,128,20,78,145,145,2,105,192,16,128,21,36,128,20,2,1,192,0,128, 2,74,145,145,68,179,193,243,0,0,4,180,193,242,0,0,0,128,20,78,145,145,3,0,192,132,177,193,242,0,0,0, 128,20,130,145,145,68,177,193,242,0,0,16,128,20,130,209,145,50,0,0,4,177,193,0,128,4,130,145,144,243,0,0, 196,176,193,242,0,0,48,128,20,4,244,193,47,0,0,50,0,0,208,128,20,166,209,144,211,0,0,50,0,0,4,244, 193,0,128,5,224,128,21,35,0,0,186,212,148,186,212,145,132,185,193,0,128,4,186,212,144,230,145,145,226,0,0,4, 186,193,0,128,4,186,212,144,186,212,145,50,0,0,68,184,193,0,128,4,14,210,144,122,146,145,226,0,0,196,184,193, 0,128,4,14,210,144,122,146,145,196,183,193,242,0,0,0,128,20,186,212,145,4,184,193,242,0,0,16,128,20,186,212, 145,4,185,193,242,0,0,0,128,20,186,212,145,68,185,193,242,0,0,16,128,20,186,212,145,132,185,193,63,0,0,196, 185,193,223,0,0,4,186,193,239,0,0,68,186,193,15,0,0,132,186,193,31,0,0,186,52,160,50,0,0,4,183,193, 0,128,4,162,210,144,94,147,145,226,0,0,132,183,193,0,128,4,162,210,144,94,147,145,196,183,193,242,0,0,0,128, 20,186,212,145,4,184,193,242,0,0,16,128,20,186,212,145,4,185,193,242,0,0,0,128,20,50,211,145,68,185,193,242, 0,0,16,128,20,50,211,145,68,184,193,242,0,0,132,185,193,47,0,0,132,184,193,242,0,0,196,185,193,47,0,0, 196,184,193,242,0,0,4,186,193,47,0,0,4,185,193,242,0,0,68,186,193,47,0,0,68,185,193,242,0,0,132,186, 193,47,0,0,68,184,193,63,0,0,132,184,193,223,0,0,196,184,193,239,0,0,4,185,193,15,0,0,68,185,193,31, 0,0,186,52,160,196,183,193,242,0,0,0,128,20,146,212,145,4,184,193,242,0,0,16,128,20,146,212,145,4,185,193, 242,0,0,0,128,20,66,212,145,68,185,193,242,0,0,16,128,20,66,212,145,68,184,193,242,0,0,132,185,193,47,0, 0,132,184,193,242,0,0,196,185,193,47,0,0,196,184,193,242,0,0,4,186,193,47,0,0,4,185,193,242,0,0,68, 186,193,47,0,0,68,185,193,242,0,0,132,186,193,47,0,0,4,183,193,242,0,0,68,184,193,47,0,0,68,183,193, 242,0,0,132,184,193,47,0,0,132,183,193,242,0,0,196,184,193,47,0,0,196,183,193,242,0,0,4,185,193,47,0, 0,4,184,193,242,0,0,68,185,193,47,0,0,146,52,160,4,183,193,242,0,0,68,184,193,47,0,0,68,183,193,242, 0,0,132,184,193,47,0,0,132,183,193,242,0,0,196,184,193,47,0,0,196,183,193,242,0,0,4,185,193,47,0,0, 4,184,193,242,0,0,68,185,193,47,0,0,4,183,193,63,0,0,68,183,193,223,0,0,132,183,193,239,0,0,196,183, 193,15,0,0,4,184,193,31,0,0,226,0,0,32,128,18,122,213,148,35,0,0,68,188,193,0,128,4,122,213,144,122, 213,145,50,0,0,132,187,193,0,128,4,202,213,144,202,213,145,50,0,0,196,186,193,0,128,4,126,213,144,126,213,145, 132,187,193,242,0,0,68,188,193,47,0,0,196,187,193,242,0,0,132,188,193,47,0,0,4,188,193,242,0,0,196,188, 193,47,0,0,196,186,193,242,0,0,132,187,193,47,0,0,4,187,193,242,0,0,196,187,193,47,0,0,68,187,193,242, 0,0,4,188,193,47,0,0,196,186,193,63,0,0,4,187,193,15,0,0,68,187,193,31,0,0,0,0,64,132,187,193, 242,0,0,68,188,193,47,0,0,196,187,193,242,0,0,132,188,193,47,0,0,4,188,193,242,0,0,196,188,193,47,0, 0,132,187,193,63,0,0,196,187,193,15,0,0,4,188,193,31,0,0,0,0,64,68,188,193,63,0,0,132,188,193,15, 0,0,196,188,193,31,0,0,0,0,64,130,12,192,0,128,20,2,150,144,130,12,192,16,128,20,2,150,144,98,48,160, 194,143,193,16,128,21,36,128,20,242,0,0,196,243,193,0,128,5,45,0,0,2,236,192,16,128,21,36,128,20,2,192, 255,0,128,2,0,128,15,35,0,0,194,143,193,0,128,21,36,128,20,242,0,0,196,243,193,0,128,5,48,128,20,94, 150,144,2,0,192,42,0,0,174,48,160,0,0,21,20,0,0,2,48,192,0,128,2,126,150,145,230,53,160,0,0,64, 1,0,0,4,245,193,242,0,0,32,0,21,20,0,0,242,0,0,32,128,18,190,214,148,174,150,145,98,48,168,134,54, 160,2,8,192,0,128,2,190,214,145,98,48,168,0,0,64,1,0,0,4,245,193,242,0,0,32,0,21,20,0,0,242, 0,0,32,128,18,254,214,148,238,150,145,230,53,168,198,54,160,2,8,192,0,128,2,254,214,145,230,53,160,0,0,64, 196,243,193,143,4,192,129,253,255,102,54,168,70,48,160,196,243,193,207,2,192,4,245,193,143,253,255,194,54,168,70,48, 160,196,243,193,143,2,192,193,250,255,102,54,168,196,243,193,143,2,192,65,251,255,102,54,168,70,48,160,196,243,193,15, 0,192,65,253,255,102,54,168,196,243,193,15,0,192,129,253,255,102,54,168,196,243,193,15,0,192,193,253,255,102,54,168, 196,243,193,15,0,192,65,2,192,102,54,168,196,243,193,15,0,192,193,2,192,102,54,168,70,48,160,65,253,255,0,0, 21,20,0,0,2,48,192,0,128,2,194,151,145,98,48,168,129,253,255,0,0,21,20,0,0,2,48,192,0,128,2,222, 151,145,98,48,168,193,253,255,0,0,21,20,0,0,2,48,192,0,128,2,250,151,145,98,48,168,193,255,255,0,0,21, 20,0,0,2,48,192,0,128,2,22,152,145,98,48,168,65,0,192,0,0,21,20,0,0,2,48,192,0,128,2,50,152, 145,98,48,168,129,2,192,0,0,21,20,0,0,2,48,192,0,128,2,78,152,145,98,48,168,70,48,160,196,243,193,15, 3,192,4,245,193,79,253,255,194,54,168,196,243,193,15,3,192,4,245,193,207,253,255,194,54,168,196,243,193,15,3,192, 4,245,193,79,2,192,194,54,168,196,243,193,15,3,192,4,245,193,207,2,192,194,54,168,70,48,160,4,245,193,79,253, 255,130,54,168,4,245,193,207,253,255,130,54,168,4,245,193,79,2,192,130,54,168,4,245,193,207,2,192,130,54,168,129, 253,255,0,0,21,20,0,0,2,48,192,0,128,2,242,152,145,98,48,168,193,255,255,0,0,21,20,0,0,2,48,192, 0,128,2,14,153,145,98,48,168,65,0,192,0,0,21,20,0,0,2,48,192,0,128,2,42,153,145,98,48,168,129,2, 192,0,0,21,20,0,0,2,48,192,0,128,2,70,153,145,98,48,168,70,48,160,196,243,193,15,3,192,4,245,193,143, 253,255,194,54,168,196,243,193,15,3,192,4,245,193,207,255,255,194,54,168,196,243,193,15,3,192,4,245,193,79,0,192, 194,54,168,196,243,193,15,3,192,4,245,193,143,2,192,194,54,168,70,48,160,4,245,193,143,253,255,130,54,168,4,245, 193,207,255,255,130,54,168,4,245,193,79,0,192,130,54,168,4,245,193,143,2,192,130,54,168,65,253,255,0,0,21,20, 0,0,2,48,192,0,128,2,234,153,145,98,48,168,193,253,255,0,0,21,20,0,0,2,48,192,0,128,2,6,154,145, 98,48,168,65,2,192,0,0,21,20,0,0,2,48,192,0,128,2,34,154,145,98,48,168,193,2,192,0,0,21,20,0, 0,2,48,192,0,128,2,62,154,145,98,48,168,70,48,160,130,69,192,0,128,21,36,128,20,2,0,224,0,128,2,118, 154,145,65,253,255,0,0,21,20,0,0,2,48,192,0,128,2,118,154,145,98,48,168,194,69,192,0,128,21,36,128,20, 2,0,224,0,128,2,170,154,145,129,253,255,0,0,21,20,0,0,2,48,192,0,128,2,170,154,145,98,48,168,2,70, 192,0,128,21,36,128,20,2,0,224,0,128,2,222,154,145,193,253,255,0,0,21,20,0,0,2,48,192,0,128,2,222, 154,145,98,48,168,2,72,192,0,128,21,36,128,20,2,0,224,0,128,2,18,155,145,193,255,255,0,0,21,20,0,0, 2,48,192,0,128,2,18,155,145,98,48,168,130,72,192,0,128,21,36,128,20,2,0,224,0,128,2,70,155,145,65,0, 192,0,0,21,20,0,0,2,48,192,0,128,2,70,155,145,98,48,168,130,74,192,0,128,21,36,128,20,2,0,224,0, 128,2,122,155,145,65,2,192,0,0,21,20,0,0,2,48,192,0,128,2,122,155,145,98,48,168,194,74,192,0,128,21, 36,128,20,2,0,224,0,128,2,174,155,145,129,2,192,0,0,21,20,0,0,2,48,192,0,128,2,174,155,145,98,48, 168,2,75,192,0,128,21,36,128,20,2,0,224,0,128,2,226,155,145,193,2,192,0,0,21,20,0,0,2,48,192,0, 128,2,226,155,145,98,48,168,70,48,160,196,243,193,15,0,192,65,253,255,102,54,168,196,243,193,15,0,192,193,2,192, 102,54,168,70,48,160,196,243,193,15,0,192,129,253,255,102,54,168,70,48,160,196,243,193,15,0,192,193,253,255,102,54, 168,196,243,193,15,0,192,65,2,192,102,54,168,70,48,160,65,253,255,0,0,21,20,0,0,2,48,192,0,128,2,94, 156,145,98,48,168,70,48,160,129,253,255,0,0,21,20,0,0,2,48,192,0,128,2,126,156,145,98,48,168,129,2,192, 0,0,21,20,0,0,2,48,192,0,128,2,154,156,145,98,48,168,70,48,160,193,253,255,0,0,21,20,0,0,2,48, 192,0,128,2,186,156,145,98,48,168,70,48,160,193,255,255,0,0,21,20,0,0,2,48,192,0,128,2,218,156,145,98, 48,168,65,0,192,0,0,21,20,0,0,2,48,192,0,128,2,246,156,145,98,48,168,70,48,160,196,243,193,15,3,192, 4,245,193,79,253,255,194,54,168,196,243,193,15,3,192,4,245,193,207,2,192,194,54,168,70,48,160,196,243,193,15,3, 192,4,245,193,207,253,255,194,54,168,196,243,193,15,3,192,4,245,193,79,2,192,194,54,168,70,48,160,4,245,193,79, 253,255,130,54,168,4,245,193,207,2,192,130,54,168,70,48,160,4,245,193,207,253,255,130,54,168,4,245,193,79,2,192, 130,54,168,70,48,160,196,243,193,15,3,192,4,245,193,143,253,255,194,54,168,196,243,193,15,3,192,4,245,193,143,2, 192,194,54,168,70,48,160,196,243,193,15,3,192,4,245,193,207,255,255,194,54,168,196,243,193,15,3,192,4,245,193,79, 0,192,194,54,168,70,48,160,65,253,255,0,0,21,20,0,0,2,48,192,0,128,2,254,157,145,98,48,168,193,2,192, 0,0,21,20,0,0,2,48,192,0,128,2,26,158,145,98,48,168,70,48,160,4,245,193,143,253,255,130,54,168,4,245, 193,143,2,192,130,54,168,70,48,160,193,253,255,0,0,21,20,0,0,2,48,192,0,128,2,86,158,145,98,48,168,65, 2,192,0,0,21,20,0,0,2,48,192,0,128,2,114,158,145,98,48,168,70,48,160,4,245,193,207,255,255,130,54,168, 4,245,193,79,0,192,130,54,168,70,48,160,1,183,193,14,6,192,2,6,192,239,35,168,129,176,193,142,18,192,130,6, 192,239,35,168,15,36,168,65,38,192,142,211,193,2,1,192,239,35,168,68,184,193,242,0,0,32,128,18,118,223,148,118, 223,145,1,189,193,14,250,255,2,6,192,239,35,168,1,195,193,142,237,255,130,6,192,239,35,168,65,184,193,206,254,255, 66,1,192,239,35,168,15,36,168,65,38,192,142,212,193,2,1,192,239,35,168,132,185,193,242,0,0,32,128,18,118,223, 148,118,223,145,1,189,193,14,250,255,2,6,192,239,35,168,1,195,193,142,237,255,130,6,192,239,35,168,129,185,193,142, 253,255,66,1,192,239,35,168,15,36,168,65,38,192,142,213,193,2,1,192,239,35,168,1,189,193,14,250,255,2,6,192, 239,35,168,1,195,193,142,237,255,130,6,192,239,35,168,196,249,193,242,0,0,4,250,193,0,128,4,68,250,193,0,128, 5,4,244,193,47,0,0,196,250,193,242,0,0,4,251,193,0,128,4,68,251,193,0,128,5,132,244,193,47,0,0,196, 251,193,242,0,0,4,252,193,0,128,4,68,252,193,0,128,5,4,245,193,47,0,0,68,184,193,242,0,0,32,128,18, 87,192,148,87,192,145,132,186,193,241,0,0,4,244,193,242,0,0,132,244,193,0,128,4,163,192,148,132,185,193,242,0, 0,32,128,18,87,192,148,87,192,145,132,186,193,241,0,0,4,244,193,242,0,0,4,245,193,0,128,4,27,193,148,196, 249,193,242,0,0,68,38,192,47,0,0,4,250,193,242,0,0,132,38,192,47,0,0,68,250,193,242,0,0,196,38,192, 47,0,0,132,250,193,242,0,0,4,39,192,47,0,0,4,184,193,241,0,0,27,33,160,132,185,193,242,0,0,32,128, 18,211,192,148,211,192,145,132,186,193,241,0,0,132,244,193,242,0,0,4,245,193,0,128,4,27,193,148,196,250,193,242, 0,0,68,38,192,47,0,0,4,251,193,242,0,0,132,38,192,47,0,0,68,251,193,242,0,0,196,38,192,47,0,0, 132,251,193,242,0,0,4,39,192,47,0,0,68,185,193,241,0,0,16,0,18,111,193,145,20,0,0,2,8,192,0,128, 2,111,193,145,130,39,192,16,128,21,36,128,20,243,0,0,20,0,0,130,7,192,0,128,2,48,128,17,0,128,11,131, 131,193,48,128,21,37,0,0,104,0,0,10,64,192,0,0,128,0,0,64,16,128,21,36,0,0,242,0,0,208,128,20, 47,0,64,29,0,0,48,0,21,2,111,193,115,33,168,20,0,0,242,0,0,32,128,18,139,193,145,219,193,148,130,15, 192,0,128,2,0,128,11,0,128,21,37,0,0,98,0,0,0,128,8,219,193,148,139,129,145,48,0,21,2,111,193,115, 33,168,225,0,0,0,0,64,130,113,193,115,33,168,0,0,64,131,2,192,142,137,192,135,33,168,0,0,64,66,116,193, 115,33,168,194,115,193,115,33,168,0,0,64,194,113,193,115,33,168,66,108,193,115,33,168,130,113,193,115,33,168,66,113, 193,115,33,168,194,108,193,115,33,168,0,0,64,194,113,193,115,33,168,130,113,193,115,33,168,130,108,193,115,33,168,66, 113,193,115,33,168,66,111,193,115,33,168,194,110,193,115,33,168,0,0,64,130,113,193,115,33,168,130,108,193,115,33,168, 66,111,193,115,33,168,194,110,193,115,33,168,195,2,192,142,149,192,135,33,168,67,253,255,142,145,192,135,33,168,67,2, 192,142,149,192,135,33,168,195,253,255,142,145,192,135,33,168,0,0,64,194,113,193,115,33,168,66,108,193,115,33,168,66, 113,193,115,33,168,194,108,193,115,33,168,131,2,192,142,137,192,135,33,168,131,253,255,142,133,192,135,33,168,67,0,192, 142,157,192,135,33,168,195,255,255,142,157,192,135,33,168,0,0,64,194,113,193,115,33,168,66,108,193,115,33,168,0,0, 64,130,113,193,115,33,168,0,0,64,194,113,193,115,33,168,0,0,64,130,113,193,115,33,168,130,108,193,115,33,168,0, 0,64,66,113,193,115,33,168,0,0,64,195,2,192,142,149,192,135,33,168,67,253,255,142,145,192,135,33,168,0,0,64, 130,113,193,115,33,168,130,108,193,115,33,168,0,0,64,66,111,193,115,33,168,194,110,193,115,33,168,0,0,64,131,2, 192,142,137,192,135,33,168,131,253,255,142,133,192,135,33,168,0,0,64,194,113,193,115,33,168,66,108,193,115,33,168,0, 0,64,66,113,193,115,33,168,194,108,193,115,33,168,0,0,64,20,0,0,243,0,0,0,0,21,20,0,9,0,0,20, 63,128,8,239,131,145,0,0,64,68,38,192,15,0,192,132,38,192,15,0,192,196,38,192,15,0,192,4,39,192,15,0, 192,196,183,193,250,0,0,4,184,193,253,0,0,210,0,0,132,188,193,0,128,4,95,196,145,226,0,0,196,188,193,0, 128,4,119,132,145,68,188,193,15,0,192,132,188,193,15,0,192,196,188,193,15,0,192,210,0,0,4,187,193,0,128,4, 3,197,145,226,0,0,68,187,193,0,128,4,3,197,145,210,0,0,196,187,193,0,128,4,183,196,145,226,0,0,4,188, 193,0,128,4,255,133,145,68,188,193,242,0,0,132,187,193,47,0,0,68,188,193,15,0,192,132,188,193,242,0,0,196, 187,193,47,0,0,132,188,193,15,0,192,196,188,193,242,0,0,4,188,193,47,0,0,196,188,193,15,0,192,255,37,160, 210,0,0,196,187,193,0,128,4,159,197,145,226,0,0,4,188,193,0,128,4,159,197,145,132,187,193,242,0,0,196,186, 193,47,0,0,196,187,193,242,0,0,4,187,193,47,0,0,4,188,193,242,0,0,68,187,193,47,0,0,68,188,193,242, 0,0,132,187,193,47,0,0,132,188,193,242,0,0,196,187,193,47,0,0,196,188,193,242,0,0,4,188,193,47,0,0, 68,188,193,15,0,192,132,188,193,15,0,192,196,188,193,15,0,192,255,37,160,68,188,193,242,0,0,196,186,193,47,0, 0,132,187,193,15,0,192,68,188,193,15,0,192,132,188,193,242,0,0,4,187,193,47,0,0,196,187,193,15,0,192,132, 188,193,15,0,192,196,188,193,242,0,0,68,187,193,47,0,0,4,188,193,15,0,192,196,188,193,15,0,192,210,0,0, 32,128,18,15,135,145,226,0,0,32,128,18,15,135,145,196,177,193,241,0,0,16,0,18,139,70,145,68,177,193,250,0, 0,210,0,0,132,178,193,0,128,4,167,134,145,18,0,0,4,179,193,0,128,4,167,134,145,210,0,0,196,179,193,0, 128,4,219,134,145,18,0,0,68,180,193,0,128,4,219,134,145,196,176,193,15,0,192,68,177,193,15,0,192,132,177,193, 15,0,192,139,40,160,132,176,193,242,0,0,196,176,193,47,0,0,4,178,193,0,128,4,139,136,144,4,178,193,242,0, 0,196,176,193,47,0,0,132,178,193,242,0,0,68,177,193,47,0,0,196,178,193,242,0,0,132,177,193,47,0,0,139, 40,160,68,179,193,242,0,0,196,176,193,47,0,0,196,179,193,242,0,0,68,177,193,47,0,0,4,180,193,242,0,0, 132,177,193,47,0,0,139,40,160,2,105,192,224,128,21,36,128,20,66,0,192,0,128,2,91,135,145,210,0,0,132,177, 193,0,128,4,139,136,145,4,177,193,242,0,0,196,176,193,47,0,0,68,177,193,15,0,192,132,177,193,15,0,192,115, 39,160,196,176,193,15,0,192,68,177,193,15,0,192,132,177,193,15,0,192,2,105,192,224,128,21,36,128,20,130,0,192, 0,128,2,255,135,145,210,0,0,196,178,193,0,128,4,187,135,145,68,178,193,242,0,0,4,178,193,47,0,0,132,178, 193,15,0,192,196,178,193,15,0,192,196,176,193,242,0,0,4,178,193,0,128,4,255,135,144,4,178,193,242,0,0,196, 176,193,47,0,0,132,178,193,242,0,0,68,177,193,47,0,0,196,178,193,242,0,0,132,177,193,47,0,0,2,105,192, 224,128,21,36,128,20,2,1,192,0,128,2,139,136,145,210,0,0,4,180,193,0,128,4,71,136,145,132,179,193,242,0, 0,68,179,193,47,0,0,196,179,193,15,0,192,4,180,193,15,0,192,196,176,193,242,0,0,68,179,193,0,128,4,139, 136,144,68,179,193,242,0,0,196,176,193,47,0,0,196,179,193,242,0,0,68,177,193,47,0,0,4,180,193,242,0,0, 132,177,193,47,0,0,4,183,193,242,0,0,4,245,193,47,0,0,68,183,193,242,0,0,132,244,193,47,0,0,132,183, 193,0,128,5,68,38,192,47,0,0,68,177,193,250,0,0,132,177,193,253,0,0,196,186,193,241,0,0,4,244,193,31, 0,0,226,0,0,4,187,193,0,128,4,251,200,145,210,0,0,68,187,193,0,128,4,79,137,145,132,187,193,241,0,0, 226,0,0,196,187,193,0,128,4,35,201,145,210,0,0,4,188,193,0,128,4,79,137,145,68,188,193,241,0,0,226,0, 0,132,188,193,0,128,4,75,201,145,210,0,0,196,188,193,0,128,4,79,137,145,1,0,192,4,244,193,242,0,0,16, 128,20,47,0,0,196,176,193,242,0,0,132,245,193,47,0,0,4,244,193,0,128,5,132,244,193,0,128,4,191,137,144, 4,245,193,242,0,0,132,245,193,0,128,4,4,39,192,47,0,0,132,244,193,242,0,0,196,176,193,47,0,0,68,177, 193,15,0,192,132,177,193,15,0,192,127,42,160,4,245,193,242,0,0,132,244,193,0,128,4,4,39,192,47,0,0,68, 177,193,250,0,0,132,177,193,253,0,0,226,0,0,4,187,193,0,128,4,7,202,145,210,0,0,68,187,193,0,128,4, 127,138,145,196,176,193,242,0,0,132,38,192,47,0,0,226,0,0,196,187,193,0,128,4,75,202,145,210,0,0,4,188, 193,0,128,4,75,202,145,132,187,193,242,0,0,196,38,192,47,0,0,0,0,64,226,0,0,132,188,193,0,128,4,123, 202,145,210,0,0,196,188,193,0,128,4,123,202,145,68,188,193,242,0,0,196,38,192,47,0,0,0,0,64,68,187,193, 253,0,0,196,176,193,242,0,0,4,244,193,47,0,0,196,186,193,242,0,0,132,244,193,47,0,0,132,187,193,241,0, 0,226,0,0,4,188,193,0,128,4,219,138,145,68,188,193,241,0,0,226,0,0,196,188,193,0,128,4,219,138,145,1, 0,192,4,245,193,31,0,0,132,244,193,242,0,0,16,128,20,255,202,144,4,244,193,0,128,4,35,139,144,4,244,193, 242,0,0,132,38,192,47,0,0,132,244,193,242,0,0,196,38,192,47,0,0,0,0,64,132,38,192,15,0,192,4,245, 193,242,0,0,196,38,192,47,0,0,0,0,64,112,12,168,163,2,168,118,25,168,132,37,192,242,0,0,32,128,18,95, 203,145,207,50,160,6,0,192,132,170,192,15,0,192,132,45,193,15,0,192,78,5,192,4,0,0,2,8,192,0,128,2, 191,203,145,130,39,192,0,128,21,36,128,20,243,0,0,4,0,0,130,7,192,0,128,2,48,128,17,0,128,11,131,225, 193,48,128,21,37,0,0,104,0,0,0,0,128,1,0,0,0,0,9,30,0,0,130,27,192,16,128,20,119,139,145,179, 61,168,132,37,192,143,0,0,0,0,64,194,170,192,128,128,21,36,128,20,15,0,0,194,45,193,128,128,21,36,128,20, 130,0,0,31,128,9,38,0,64,194,170,192,128,128,21,36,128,20,130,0,0,15,128,9,38,0,0,130,45,193,128,128, 21,36,128,20,2,32,192,16,128,21,47,0,64,0,0,21,20,0,0,2,40,192,0,128,2,231,203,145,0,0,64,0, 0,21,20,0,0,2,40,192,0,128,2,127,140,145,2,20,192,16,128,20,231,139,144,15,44,168,231,43,160,0,0,64, 0,0,21,20,0,0,2,40,192,0,128,2,171,140,145,2,20,192,0,128,20,231,139,144,15,44,168,231,43,160,0,0, 64,0,0,21,20,0,0,2,40,192,0,128,2,211,140,145,2,20,192,16,128,20,231,139,144,15,44,160,0,0,64,0, 0,21,20,0,0,2,40,192,0,128,2,7,141,145,2,20,192,16,128,20,231,139,144,15,44,168,130,22,192,16,128,20, 231,139,144,0,0,64,1,0,0,23,45,160,231,43,168,48,0,21,20,0,0,242,0,0,32,128,18,19,205,145,2,40, 192,0,128,2,231,203,145,0,0,64,1,0,0,91,45,160,2,20,192,16,128,20,87,141,144,15,44,168,91,45,160,231, 43,168,48,0,21,20,0,0,242,0,0,32,128,18,67,205,145,2,40,192,0,128,2,139,141,145,2,20,192,16,128,20, 231,139,144,15,44,160,0,0,64,1,0,0,2,20,192,16,128,20,207,205,144,167,45,160,231,43,168,48,0,21,20,0, 0,242,0,0,32,128,18,163,205,145,2,40,192,0,128,2,231,203,145,0,0,64,15,44,168,48,0,21,20,0,0,242, 0,0,32,128,18,203,205,145,2,40,192,0,128,2,15,204,145,0,0,64,1,0,0,27,46,160,2,20,192,16,128,20, 23,142,144,15,44,168,130,22,192,16,128,20,27,206,144,231,43,168,48,0,21,20,0,0,242,0,0,32,128,18,251,205, 145,2,40,192,0,128,2,87,142,145,2,20,192,16,128,20,231,139,144,15,44,168,130,22,192,16,128,20,231,139,144,0, 0,64,129,2,192,175,44,168,191,43,160,131,2,192,243,45,168,191,43,160,65,5,192,215,44,168,193,4,192,215,44,168, 191,43,160,193,2,192,87,44,168,129,2,192,87,44,168,65,2,192,87,44,168,193,253,255,131,44,168,65,253,255,131,44, 168,191,43,160,193,2,192,63,44,168,129,2,192,63,44,168,65,2,192,63,44,168,65,0,192,63,44,168,193,255,255,63, 44,168,129,253,255,63,44,168,191,43,160,195,2,192,59,45,168,67,2,192,59,45,168,195,253,255,143,45,168,67,253,255, 143,45,168,191,43,160,195,2,192,11,45,168,67,2,192,11,45,168,195,253,255,11,45,168,67,253,255,11,45,168,129,2, 192,63,44,168,65,0,192,63,44,168,193,255,255,63,44,168,129,253,255,63,44,168,191,43,160,131,2,192,59,45,168,67, 0,192,143,45,168,195,255,255,143,45,168,131,253,255,143,45,168,191,43,160,131,2,192,11,45,168,67,0,192,11,45,168, 195,255,255,11,45,168,131,253,255,11,45,168,193,2,192,63,44,168,65,2,192,63,44,168,193,253,255,63,44,168,65,253, 255,63,44,168,191,43,160,193,2,192,0,0,21,20,0,0,2,40,192,0,128,2,231,143,145,66,72,192,16,128,21,36, 128,20,0,128,5,231,143,145,231,43,168,129,2,192,0,0,21,20,0,0,2,40,192,0,128,2,23,144,145,66,72,192, 16,128,21,36,128,20,0,128,5,23,144,145,231,43,168,65,2,192,0,0,21,20,0,0,2,40,192,0,128,2,71,144, 145,66,72,192,16,128,21,36,128,20,0,128,5,71,144,145,231,43,168,65,0,192,0,0,21,20,0,0,2,40,192,0, 128,2,119,144,145,66,72,192,16,128,21,36,128,20,0,128,5,119,144,145,231,43,168,193,255,255,0,0,21,20,0,0, 2,40,192,0,128,2,167,144,145,66,72,192,16,128,21,36,128,20,0,128,5,167,144,145,231,43,168,193,253,255,0,0, 21,20,0,0,2,40,192,0,128,2,215,144,145,66,72,192,16,128,21,36,128,20,0,128,5,215,144,145,231,43,168,129, 253,255,0,0,21,20,0,0,2,40,192,0,128,2,7,145,145,66,72,192,16,128,21,36,128,20,0,128,5,7,145,145, 231,43,168,65,253,255,0,0,21,20,0,0,2,40,192,0,128,2,55,145,145,66,72,192,16,128,21,36,128,20,0,128, 5,55,145,145,231,43,168,191,43,160,193,2,192,87,44,168,65,253,255,131,44,168,191,43,160,129,2,192,87,44,168,191, 43,160,65,2,192,87,44,168,193,253,255,131,44,168,191,43,160,193,2,192,63,44,168,191,43,160,129,2,192,63,44,168, 129,253,255,63,44,168,191,43,160,65,2,192,63,44,168,191,43,160,65,0,192,63,44,168,193,255,255,63,44,168,191,43, 160,195,2,192,59,45,168,67,253,255,143,45,168,191,43,160,67,2,192,59,45,168,195,253,255,143,45,168,191,43,160,195, 2,192,11,45,168,67,253,255,11,45,168,191,43,160,129,2,192,63,44,168,129,253,255,63,44,168,191,43,160,67,2,192, 11,45,168,195,253,255,11,45,168,191,43,160,65,0,192,63,44,168,193,255,255,63,44,168,191,43,160,131,2,192,59,45, 168,131,253,255,143,45,168,191,43,160,67,0,192,143,45,168,195,255,255,143,45,168,191,43,160,193,2,192,63,44,168,65, 253,255,63,44,168,191,43,160,131,2,192,11,45,168,131,253,255,11,45,168,191,43,160,65,2,192,63,44,168,193,253,255, 63,44,168,191,43,160,67,0,192,11,45,168,195,255,255,11,45,168,191,43,160,0,0,21,20,0,0,2,40,192,0,128, 2,203,146,145,66,72,192,16,128,21,36,128,20,0,128,5,203,146,145,87,54,160,0,0,64,6,0,192,132,170,192,15, 0,192,132,45,193,15,0,192,4,37,192,254,0,0,193,2,192,159,50,168,129,2,192,159,50,168,65,2,192,159,50,168, 65,0,192,159,50,168,193,255,255,159,50,168,193,253,255,159,50,168,129,253,255,159,50,168,65,253,255,159,50,168,132,37, 192,241,0,0,16,0,18,191,83,148,66,72,192,16,128,21,36,128,20,15,128,192,196,37,192,242,0,0,32,128,18,203, 147,145,78,5,192,4,0,0,2,8,192,0,128,2,167,211,145,130,39,192,0,128,21,36,128,20,0,128,5,167,147,145, 4,0,0,130,7,192,0,128,2,0,128,11,131,245,193,48,128,21,37,0,0,104,0,0,0,0,128,1,0,0,0,0, 9,30,0,0,130,27,192,16,128,20,95,147,145,132,37,192,143,0,0,0,0,64,4,37,192,241,0,0,196,37,192,243, 0,0,48,0,20,66,72,192,16,128,21,36,128,20,15,128,192,20,0,0,242,0,0,32,128,18,219,211,145,78,5,192, 4,0,0,2,8,192,0,128,2,75,212,145,130,39,192,0,128,21,36,128,20,0,128,5,75,148,145,4,0,0,130,7, 192,0,128,2,0,128,11,67,249,193,48,128,21,37,0,0,104,0,0,0,0,128,1,0,0,0,0,9,30,0,0,130, 27,192,16,128,20,3,148,145,4,37,192,241,0,0,196,37,192,243,0,0,55,54,160,2,25,192,16,128,20,87,213,144, 130,22,192,16,128,20,199,212,144,68,35,192,242,0,0,32,128,18,199,212,145,194,170,192,128,128,21,36,128,20,143,0, 192,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,196,34,192,242,0,0,32,128,18,31,213,145,2, 59,192,16,128,21,37,128,20,130,241,193,96,128,21,36,128,20,0,128,5,31,149,145,194,170,192,128,128,21,36,128,20, 15,0,192,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,4,35,192,242,0,0,32,128,18,87,213, 145,194,170,192,128,128,21,36,128,20,79,0,192,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,132, 35,192,242,0,0,32,128,18,143,213,145,194,170,192,128,128,21,36,128,20,207,0,192,194,45,193,128,128,21,36,128,20, 130,0,0,31,128,9,38,0,0,196,35,192,242,0,0,32,128,18,199,213,145,194,170,192,128,128,21,36,128,20,15,1, 192,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,4,36,192,242,0,0,32,128,18,255,213,145,194, 170,192,128,128,21,36,128,20,79,1,192,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,68,36,192, 242,0,0,32,128,18,55,214,145,194,170,192,128,128,21,36,128,20,143,1,192,194,45,193,128,128,21,36,128,20,130,0, 0,31,128,9,38,0,0,48,0,20,20,0,0,242,0,0,32,128,18,119,212,145,132,37,192,143,0,0,0,0,64,194, 170,192,128,128,21,36,128,20,15,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,64,194,170,192, 128,128,21,36,128,20,130,0,0,15,128,9,38,0,0,130,45,193,128,128,21,36,128,20,2,32,192,16,128,21,47,0, 64,0,0,21,66,72,192,16,128,21,36,128,20,2,128,192,0,128,66,2,20,192,16,128,20,3,151,144,194,170,192,128, 128,21,36,128,20,130,0,0,15,128,9,38,0,0,130,45,193,128,128,21,36,128,20,2,32,192,16,128,21,47,0,0, 194,170,192,128,128,21,36,128,20,15,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,167,51, 160,2,20,192,0,128,20,107,151,144,194,170,192,128,128,21,36,128,20,130,0,0,15,128,9,38,0,0,130,45,193,128, 128,21,36,128,20,2,32,192,16,128,21,47,0,0,194,170,192,128,128,21,36,128,20,15,0,0,194,45,193,128,128,21, 36,128,20,130,0,0,31,128,9,38,0,0,167,51,160,2,20,192,16,128,20,223,151,144,194,170,192,128,128,21,36,128, 20,130,0,0,15,128,9,38,0,0,130,45,193,128,128,21,36,128,20,2,32,192,16,128,21,47,0,0,2,25,192,16, 128,20,167,211,144,194,170,192,128,128,21,36,128,20,15,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9, 38,0,0,167,51,160,2,20,192,16,128,20,83,152,144,194,170,192,128,128,21,36,128,20,130,0,0,15,128,9,38,0, 0,130,45,193,128,128,21,36,128,20,2,32,192,16,128,21,47,0,0,130,22,192,16,128,20,167,211,144,194,170,192,128, 128,21,36,128,20,15,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128,9,38,0,0,167,51,160,1,0,0, 48,0,21,20,0,0,242,0,0,32,128,18,131,216,145,66,72,192,16,128,21,36,128,20,2,128,192,0,128,66,175,54, 168,183,216,145,87,54,160,0,0,64,175,54,168,215,216,145,2,20,192,16,128,20,87,150,144,127,54,168,87,54,160,0, 0,64,175,54,168,247,216,145,2,20,192,0,128,20,87,150,144,127,54,168,87,54,160,0,0,64,175,54,168,31,217,145, 2,20,192,16,128,20,87,150,144,127,54,168,2,25,192,16,128,20,87,150,144,0,0,64,175,54,168,71,217,145,2,20, 192,16,128,20,87,150,144,127,54,168,130,22,192,16,128,20,87,150,144,0,0,64,1,0,0,48,0,21,66,72,192,16, 128,21,36,128,20,2,128,192,0,128,2,87,150,145,20,0,0,242,0,0,32,128,18,79,217,145,0,0,64,1,0,0, 48,0,21,66,72,192,16,128,21,36,128,20,2,128,192,0,128,2,179,153,145,20,0,0,242,0,0,32,128,18,131,217, 145,0,0,64,2,20,192,16,128,20,87,150,144,127,54,168,87,54,160,1,0,0,48,0,21,66,72,192,16,128,21,36, 128,20,2,128,192,0,128,2,251,153,145,20,0,0,242,0,0,32,128,18,203,217,145,0,0,64,2,20,192,0,128,20, 87,150,144,127,54,168,87,54,160,129,2,192,175,54,168,151,151,145,167,51,160,131,2,192,127,56,168,151,151,145,167,51, 160,65,5,192,175,54,168,11,152,145,193,4,192,175,54,168,11,152,145,167,51,160,193,2,192,175,54,168,199,150,145,129, 2,192,175,54,168,199,150,145,65,2,192,175,54,168,199,150,145,193,253,255,175,54,168,47,151,145,65,253,255,175,54,168, 47,151,145,167,51,160,193,2,192,175,54,168,3,151,145,129,2,192,175,54,168,3,151,145,65,2,192,175,54,168,3,151, 145,65,0,192,175,54,168,3,151,145,193,255,255,175,54,168,3,151,145,129,253,255,175,54,168,3,151,145,167,51,160,195, 2,192,127,56,168,199,150,145,67,2,192,127,56,168,199,150,145,195,253,255,127,56,168,47,151,145,67,253,255,127,56,168, 47,151,145,167,51,160,195,2,192,127,56,168,3,151,145,67,2,192,127,56,168,3,151,145,195,253,255,127,56,168,3,151, 145,67,253,255,127,56,168,3,151,145,129,2,192,175,54,168,3,151,145,65,0,192,175,54,168,3,151,145,193,255,255,175, 54,168,3,151,145,129,253,255,175,54,168,3,151,145,167,51,160,131,2,192,127,56,168,199,150,145,67,0,192,127,56,168, 47,151,145,195,255,255,127,56,168,47,151,145,131,253,255,127,56,168,47,151,145,167,51,160,131,2,192,127,56,168,3,151, 145,67,0,192,127,56,168,3,151,145,195,255,255,127,56,168,3,151,145,131,253,255,127,56,168,3,151,145,193,2,192,175, 54,168,3,151,145,65,2,192,175,54,168,3,151,145,193,253,255,175,54,168,3,151,145,65,253,255,175,54,168,3,151,145, 167,51,160,129,2,192,251,56,168,75,52,160,1,0,0,131,2,192,48,0,21,66,72,192,16,128,21,36,128,20,2,128, 192,0,128,2,75,156,145,20,0,0,242,0,0,32,128,18,27,220,145,107,60,160,2,20,192,16,128,20,103,156,144,127, 54,168,2,25,192,16,128,20,107,220,144,87,54,168,75,52,160,65,5,192,35,57,168,193,4,192,35,57,168,75,52,160, 193,2,192,187,56,168,129,2,192,187,56,168,65,2,192,187,56,168,193,253,255,219,56,168,65,253,255,219,56,168,75,52, 160,193,2,192,171,56,168,129,2,192,171,56,168,65,2,192,171,56,168,65,0,192,171,56,168,193,255,255,171,56,168,129, 253,255,171,56,168,75,52,160,195,2,192,127,57,168,67,2,192,127,57,168,195,253,255,199,57,168,67,253,255,199,57,168, 75,52,160,195,2,192,75,57,168,67,2,192,75,57,168,195,253,255,75,57,168,67,253,255,75,57,168,129,2,192,171,56, 168,65,0,192,171,56,168,193,255,255,171,56,168,129,253,255,171,56,168,75,52,160,131,2,192,127,57,168,67,0,192,199, 57,168,195,255,255,199,57,168,131,253,255,199,57,168,75,52,160,131,2,192,75,57,168,67,0,192,75,57,168,195,255,255, 75,57,168,131,253,255,75,57,168,193,2,192,171,56,168,65,2,192,171,56,168,193,253,255,171,56,168,65,253,255,171,56, 168,75,52,160,196,34,192,242,0,0,32,128,18,31,222,145,65,5,192,131,2,192,14,20,192,66,236,193,16,128,21,36, 128,20,0,128,5,15,158,145,20,0,0,242,0,0,32,128,18,251,157,145,10,0,192,139,63,168,48,0,21,2,25,192, 16,128,20,227,157,144,0,0,20,0,0,9,130,7,192,16,128,20,207,157,144,4,35,192,242,0,0,32,128,18,91,222, 145,65,5,192,20,0,0,242,0,0,32,128,18,75,158,145,74,0,192,139,63,168,0,0,9,2,25,192,16,128,20,51, 158,144,68,35,192,242,0,0,32,128,18,151,222,145,65,5,192,20,0,0,242,0,0,32,128,18,135,158,145,138,0,192, 139,63,168,0,0,9,130,22,192,16,128,20,111,158,144,132,35,192,242,0,0,32,128,18,211,222,145,65,5,192,20,0, 0,242,0,0,32,128,18,195,158,145,202,0,192,139,63,168,0,0,9,130,27,192,16,128,20,171,158,144,196,35,192,242, 0,0,32,128,18,15,223,145,65,5,192,20,0,0,242,0,0,32,128,18,255,158,145,10,1,192,139,63,168,0,0,9, 130,27,192,16,128,20,231,158,144,4,36,192,242,0,0,32,128,18,75,223,145,65,5,192,20,0,0,242,0,0,32,128, 18,59,159,145,74,1,192,139,63,168,0,0,9,130,27,192,16,128,20,35,159,144,68,36,192,242,0,0,32,128,18,135, 223,145,65,5,192,20,0,0,242,0,0,32,128,18,119,159,145,138,1,192,139,63,168,0,0,9,130,27,192,16,128,20, 95,159,144,0,0,64,194,170,192,128,128,21,36,128,20,223,0,0,194,45,193,128,128,21,36,128,20,130,0,0,31,128, 9,38,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,255,127,0,64,170,42,0,32,153,25,85,21,73,18,0,16,56,14,204,12,162,11,170,10,216,9,36,9,136,8, 0,8,135,7,28,7,188,6,102,6,24,6,209,5,144,5,85,5,30,5,236,4,189,4,146,4,105,4,68,4,33,4, 0,4,224,3,195,3,168,3,142,3,117,3,94,3,72,3,51,3,31,3,12,3,250,2,232,2,216,2,200,2,185,2, 170,2,156,2,143,2,130,2,118,2,106,2,94,2,83,2,73,2,62,2,52,2,43,2,34,2,25,2,16,2,8,2, 0,2,248,1,240,1,233,1,225,1,218,1,212,1,205,1,199,1,192,1,186,1,180,1,175,1,169,1,164,1,158,1, 153,1,148,1,143,1,138,1,134,1,129,1,125,1,120,1,116,1,112,1,108,1,104,1,100,1,96,1,92,1,88,1, 85,1,81,1,78,1,74,1,71,1,68,1,65,1,62,1,59,1,56,1,53,1,50,1,47,1,44,1,41,1,39,1, 36,1,33,1,31,1,28,1,26,1,24,1,21,1,19,1,17,1,14,1,12,1,10,1,8,1,6,1,4,1,2,1, 0,1,254,0,252,0,250,0,248,0,246,0,244,0,242,0,240,0,239,0,237,0,235,0,234,0,232,0,230,0,229,0, 227,0,225,0,224,0,222,0,221,0,219,0,218,0,217,0,215,0,214,0,212,0,211,0,210,0,208,0,207,0,206,0, 204,0,203,0,202,0,201,0,199,0,198,0,197,0,196,0,195,0,193,0,192,0,191,0,190,0,189,0,188,0,187,0, 186,0,185,0,184,0,183,0,182,0,181,0,180,0,179,0,178,0,177,0,176,0,175,0,174,0,173,0,172,0,171,0, 170,0,169,0,168,0,168,0,167,0,166,0,165,0,164,0,163,0,163,0,162,0,161,0,160,0,159,0,159,0,158,0, 157,0,156,0,156,0,155,0,154,0,153,0,153,0,152,0,151,0,151,0,150,0,149,0,148,0,148,0,147,0,146,0, 146,0,145,0,144,0,144,0,143,0,143,0,142,0,141,0,141,0,140,0,140,0,139,0,138,0,138,0,137,0,137,0, 136,0,135,0,135,0,134,0,134,0,133,0,133,0,132,0,132,0,131,0,131,0,130,0,130,0,129,0,129,0,128,0, 0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,0,0,0,0,1,0,2,0,3,0,4,0, 5,0,6,0,7,0,8,0,0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,0,0,0,0, 1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0, 7,0,8,0,0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,0,0,0,0,1,0,2,0, 3,0,4,0,5,0,6,0,7,0,8,0,0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0, 0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,27,0,28,0,30,0,32,0,60,0,63,0, 66,0,68,0,70,0,71,0,73,0,74,0,76,0,78,0,79,0,81,0,0,0,0,0,7,0,8,0,8,0,9,0, 10,0,11,0,12,0,12,0,12,0,12,0,12,0,0,0,0,0,7,0,7,0,8,0,8,0,9,0,10,0,11,0, 12,0,12,0,12,0,12,0,0,0,0,0,6,0,7,0,7,0,8,0,8,0,9,0,10,0,11,0,12,0,12,0, 12,0,166,4,12,5,179,4,12,5,182,4,12,5,207,4,12,5,12,5,0,0,133,5,85,5,190,5,142,5,199,5, 0,0,40,6,142,6,53,6,142,6,56,6,142,6,81,6,142,6,142,6,0,0,7,7,215,6,64,7,16,7,73,7, 0,0,0,0,1,0,2,0,4,0,8,0,7,0,30,0,26,0,40,0,28,0,41,0,51,0,52,0,53,0,0,0, 78,0,93,0,82,0,98,0,120,0,0,0,43,9,84,9,45,9,84,9,49,9,84,9,78,9,84,9,84,9,0,0, 95,9,91,9,112,9,108,9,125,9,0,0,174,9,201,9,176,9,201,9,27,8,201,9,178,9,201,9,201,9,0,0, 229,9,252,9,40,10,63,10,27,8,0,0,43,9,208,9,45,9,208,9,27,8,208,9,184,9,208,9,208,9,0,0, 238,9,9,10,45,10,72,10,27,8,0,0,174,9,215,9,176,9,215,9,27,8,215,9,190,9,215,9,215,9,0,0, 243,9,18,10,40,10,85,10,27,8,0,0,174,9,222,9,176,9,222,9,27,8,222,9,196,9,222,9,222,9,0,0, 238,9,31,10,54,10,94,10,27,8,0,0,1,0,1,0,2,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0, 0,0,1,0,2,0,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0, 0,0,1,0,2,0,2,0,0,0,0,0,1,0,1,0,2,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0, 0,0,1,0,2,0,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0, 2,0,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, 2,0,2,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0, 2,0,2,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0, 0,0,1,0,2,0,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0, 0,0,1,0,2,0,2,0,0,0,0,0,0,0,1,0,2,0,4,0,8,0,159,11,200,11,161,11,200,11,165,11, 200,11,194,11,200,11,200,11,0,0,211,11,207,11,228,11,224,11,241,11,0,0,34,12,61,12,36,12,61,12,143,10, 61,12,38,12,61,12,61,12,0,0,89,12,112,12,156,12,179,12,143,10,0,0,159,11,68,12,161,11,68,12,143,10, 68,12,44,12,68,12,68,12,0,0,98,12,125,12,161,12,188,12,143,10,0,0,34,12,75,12,36,12,75,12,143,10, 75,12,50,12,75,12,75,12,0,0,103,12,134,12,156,12,201,12,143,10,0,0,34,12,82,12,36,12,82,12,143,10, 82,12,56,12,82,12,82,12,0,0,98,12,147,12,170,12,210,12,143,10,0,0,0,0,1,0,2,0,4,0,8,0, 224,13,246,13,227,13,246,13,230,13,246,13,235,13,246,13,246,13,0,0,11,14,3,14,28,14,20,14,37,14,0,0, 38,14,93,14,41,14,93,14,44,14,93,14,49,14,93,14,93,14,0,0,153,14,145,14,221,14,213,14,37,14,0,0, 224,13,106,14,227,13,106,14,44,14,106,14,60,14,106,14,106,14,0,0,170,14,162,14,238,14,230,14,37,14,0,0, 38,14,119,14,41,14,119,14,44,14,119,14,71,14,119,14,119,14,0,0,187,14,179,14,255,14,247,14,37,14,0,0, 38,14,132,14,41,14,132,14,44,14,132,14,82,14,132,14,132,14,0,0,204,14,196,14,16,15,8,15,37,14,0,0, 177,15,199,15,180,15,199,15,183,15,199,15,188,15,199,15,199,15,0,0,220,15,212,15,237,15,229,15,246,15,0,0, 247,15,46,16,250,15,46,16,253,15,46,16,2,16,46,16,46,16,0,0,106,16,98,16,174,16,166,16,246,15,0,0, 177,15,59,16,180,15,59,16,253,15,59,16,13,16,59,16,59,16,0,0,123,16,115,16,191,16,183,16,246,15,0,0, 247,15,72,16,250,15,72,16,253,15,72,16,24,16,72,16,72,16,0,0,140,16,132,16,208,16,200,16,246,15,0,0, 247,15,85,16,250,15,85,16,253,15,85,16,35,16,85,16,85,16,0,0,157,16,149,16,225,16,217,16,246,15,0,0, 0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0, 15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,22,0,23,0,24,0,25,0,25,0,26,0,27,0,28,0, 28,0,29,0,30,0,30,0,31,0,31,0,32,0,33,0,33,0,34,0,34,0,35,0,35,0,36,0,36,0,37,0, 37,0,38,0,38,0,38,0,39,0,39,0,40,0,40,0,40,0,41,0,41,0,41,0,42,0,42,0,42,0,43,0, 43,0,43,0,43,0,44,0,44,0,44,0,44,0,44,0,45,0,45,0,45,0,45,0,45,0,46,0,46,0,46,0, 46,0,46,0,46,0,47,0,47,0,47,0,47,0,47,0,47,0,47,0,47,0,47,0,48,0,48,0,48,0,48,0, 48,0,48,0,48,0,48,0,48,0,48,0,48,0,48,0,48,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0, 49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0,49,0, 49,0,49,0,49,0,49,0,49,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0,50,0, 9,0,72,0,54,0,66,0,60,0,66,0,60,0,63,0,63,0,0,0,198,0,20,1,210,0,38,1,0,0,0,0, 0,0,2,0,1,0,2,0,1,0,2,0,2,0,2,0,2,0,0,0,4,0,6,0,4,0,6,0,120,0,120,0, 1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,5,0,10,0,15,0,19,0,23,0,27,0,30,0,33,0,36,0,39,0,42,0,45,0,48,0,51,0,54,0, 57,0,60,0,63,0,66,0,0,0,16,0,31,0,46,0,61,0,76,0,0,0,17,0,33,0,49,0,65,0,81,0, 0,0,29,0,57,0,85,0,113,0,141,0,0,0,30,0,59,0,88,0,117,0,146,0,0,0,41,0,81,0,121,0, 0,0,43,0,85,0,127,0,182,33,223,33,186,33,223,33,200,33,223,33,207,33,223,33,223,33,0,0,242,33,55,34, 234,34,47,35,226,35,226,35,92,40,133,40,96,40,133,40,110,40,133,40,117,40,133,40,133,40,0,0,152,40,221,40, 144,41,213,41,136,42,136,42,0,0,2,0,5,0,8,0,11,0,14,0,17,0,19,0,22,0,25,0,28,0,31,0, 34,0,36,0,39,0,42,0,45,0,48,0,51,0,54,0,56,0,59,0,62,0,65,0,68,0,71,0,73,0,76,0, 79,0,82,0,85,0,88,0,91,0,93,0,96,0,99,0,102,0,105,0,108,0,110,0,113,0,116,0,119,0,122,0, 125,0,128,0,130,0,133,0,136,0,139,0,142,0,145,0,147,0,150,0,153,0,156,0,159,0,162,0,164,0,167,0, 170,0,173,0,176,0,179,0,182,0,184,0,187,0,190,0,193,0,196,0,199,0,201,0,204,0,207,0,210,0,213,0, 216,0,219,0,221,0,224,0,227,0,230,0,233,0,236,0,238,0,241,0,244,0,247,0,250,0,253,0,201,50,241,50, 206,50,241,50,211,50,241,50,220,50,241,50,241,50,0,0,254,50,15,51,32,51,49,51,66,51,0,0,54,48,154,51, 54,48,154,51,54,48,154,51,131,51,154,51,154,51,0,0,170,51,188,51,54,48,216,51,54,48,0,0,201,50,157,51, 206,50,157,51,54,48,157,51,140,51,157,51,157,51,0,0,54,48,157,51,198,51,221,51,54,48,0,0,54,48,162,51, 54,48,162,51,54,48,162,51,145,51,162,51,162,51,0,0,179,51,193,51,54,48,226,51,54,48,0,0,54,48,165,51, 54,48,165,51,54,48,165,51,54,48,165,51,165,51,0,0,54,48,165,51,207,51,231,51,54,48,0,0,192,53,233,53, 197,53,233,53,203,53,233,53,212,53,233,53,233,53,0,0,20,54,41,54,82,54,103,54,144,54,0,0,17,52,16,55, 17,52,16,55,17,52,16,55,249,54,16,55,16,55,0,0,62,55,84,55,17,52,120,55,17,52,0,0,192,53,24,55, 197,53,24,55,17,52,24,55,2,55,24,55,24,55,0,0,17,52,24,55,98,55,135,55,17,52,0,0,17,52,39,55, 17,52,39,55,17,52,39,55,7,55,39,55,39,55,0,0,73,55,91,55,17,52,142,55,17,52,0,0,17,52,47,55, 17,52,47,55,17,52,47,55,17,52,47,55,47,55,0,0,17,52,47,55,109,55,157,55,17,52,0,0,120,56,143,56, 123,56,143,56,127,56,143,56,132,56,143,56,143,56,0,0,164,56,156,56,185,56,177,56,91,56,0,0,91,56,206,56, 91,56,206,56,91,56,206,56,198,56,206,56,206,56,0,0,217,56,217,56,91,56,241,56,91,56,0,0,120,56,209,56, 123,56,209,56,91,56,209,56,203,56,209,56,209,56,0,0,91,56,224,56,234,56,234,56,91,56,0,0,91,56,214,56, 91,56,214,56,91,56,214,56,138,56,214,56,214,56,0,0,170,56,170,56,91,56,246,56,91,56,0,0,91,56,151,56, 91,56,151,56,91,56,151,56,91,56,151,56,151,56,0,0,91,56,229,56,191,56,191,56,91,56,0,0,0,0,4,0, 20,0,48,0,80,0,80,0,80,0,0,0,0,0,8,0,32,0,64,0,80,0,80,0,0,0,12,0,40,0,72,0, 80,0,80,0,80,0,0,0,0,0,10,0,28,0,50,0,50,0,50,0,0,0,0,0,3,0,18,0,40,0,50,0, 50,0,0,0,5,0,25,0,45,0,50,0,50,0,50,0,0,0,0,0,0,0,12,0,30,0,30,0,30,0,0,0, 0,0,0,0,6,0,24,0,30,0,30,0,0,0,0,0,9,0,15,0,30,0,30,0,30,0,197,22,235,22,202,22, 235,22,205,22,235,22,214,22,235,22,235,22,0,0,20,23,4,23,45,23,29,23,54,23,183,23,221,23,188,23,221,23, 191,23,221,23,200,23,221,23,221,23,0,0,6,24,246,23,31,24,15,24,40,24,142,25,122,25,190,25,122,25,113,25, 122,25,39,25,122,25,122,25,0,0,76,25,60,25,163,25,147,25,29,25,244,27,32,28,247,27,32,28,16,28,32,28, 21,28,32,28,32,28,0,0,45,28,54,28,71,28,80,28,9,27,0,0,9,27,105,28,9,27,105,28,9,27,105,28, 97,28,105,28,105,28,0,0,116,28,121,28,9,27,141,28,9,27,0,0,244,27,108,28,247,27,108,28,9,27,108,28, 102,28,108,28,108,28,0,0,9,27,126,28,136,28,146,28,9,27,0,0,9,27,113,28,9,27,113,28,9,27,113,28, 27,28,113,28,113,28,0,0,49,28,66,28,9,27,151,28,9,27,0,0,9,27,40,28,9,27,40,28,9,27,40,28, 9,27,40,28,40,28,0,0,9,27,131,28,75,28,92,28,9,27,0,0,1,0,16,0,2,0,16,0,4,0,16,0, 8,0,16,0,16,0,0,0,32,0,48,0,64,0,72,0,16,0,0,0,16,0,0,0,16,0,0,0,16,0,0,0, 0,0,0,0,48,0,0,0,72,0,0,0,187,30,215,30,191,30,215,30,194,30,215,30,199,30,215,30,215,30,0,0, 234,30,243,30,8,31,17,31,38,31,0,0,238,28,78,31,238,28,78,31,238,28,78,31,67,31,78,31,78,31,0,0, 93,31,98,31,238,28,122,31,238,28,0,0,187,30,82,31,191,30,82,31,238,28,82,31,74,31,82,31,82,31,0,0, 238,28,103,31,117,31,129,31,238,28,0,0,238,28,89,31,238,28,89,31,238,28,89,31,208,30,89,31,89,31,0,0, 238,30,3,31,238,28,134,31,238,28,0,0,238,28,227,30,238,28,227,30,238,28,227,30,238,28,227,30,227,30,0,0, 238,28,110,31,12,31,33,31,238,28,0,0,150,59,172,59,153,59,172,59,156,59,172,59,161,59,172,59,172,59,0,0, 185,59,194,59,211,59,220,59,237,59,0,0,239,58,91,60,239,58,91,60,239,58,91,60,78,60,91,60,91,60,0,0, 107,60,117,60,239,58,147,60,239,58,0,0,150,59,94,60,153,59,94,60,239,58,94,60,83,60,94,60,94,60,0,0, 239,58,122,60,137,60,152,60,239,58,0,0,239,58,99,60,239,58,99,60,239,58,99,60,86,60,99,60,99,60,0,0, 112,60,127,60,239,58,157,60,239,58,0,0,239,58,102,60,239,58,102,60,239,58,102,60,239,58,102,60,102,60,0,0, 239,58,132,60,142,60,162,60,239,58,0,0,131,62,162,62,135,62,162,62,139,62,162,62,146,62,162,62,162,62,0,0, 181,62,194,62,219,62,232,62,233,60,1,63,43,63,4,63,43,63,27,63,43,63,32,63,43,63,43,63,0,0,56,63, 65,63,82,63,91,63,18,61,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, }; const unsigned char ST018[163840] = { 42,0,0,234,13,0,0,234,16,0,0,234,19,0,0,234,22,0,0,234,25,0,0,234,28,0,0,234,31,0,0,234, 76,0,0,234,60,0,0,234,4,5,82,72,31,113,13,19,224,142,242,236,64,244,1,0,165,35,138,189,0,81,0,0, 1,64,45,233,52,0,0,235,56,248,159,21,1,64,189,232,1,64,45,233,48,0,0,235,44,248,159,21,1,64,189,232, 1,64,45,233,44,0,0,235,32,248,159,21,1,64,189,232,1,64,45,233,40,0,0,235,20,248,159,21,1,64,189,232, 1,64,45,233,36,0,0,235,8,248,159,21,1,64,189,232,1,64,45,233,32,0,0,235,252,247,159,21,1,64,189,232, 1,64,45,233,28,0,0,235,240,247,159,21,1,64,189,232,177,161,160,227,2,32,160,227,0,32,10,229,211,16,160,227, 1,240,41,225,216,215,159,229,12,0,0,235,18,0,0,235,208,247,159,21,28,0,0,235,253,255,255,234,0,67,45,233, 163,128,160,227,129,145,160,227,0,128,9,229,189,128,160,227,4,128,137,229,107,128,160,227,8,128,137,229,0,131,189,232, 0,67,45,233,0,128,160,227,129,145,160,227,0,128,9,229,4,128,137,229,8,128,137,229,0,131,189,232,136,7,159,229, 0,0,16,229,32,0,16,227,14,240,160,225,32,67,111,112,121,114,105,103,104,116,32,40,99,41,32,49,57,57,52,32, 82,65,72,68,79,77,72,79,85,83,69,32,6,88,45,233,224,192,160,227,16,0,0,234,0,64,45,233,238,255,255,235, 0,64,189,232,68,247,159,21,68,7,159,229,2,0,208,229,1,0,16,226,3,0,0,26,1,1,160,227,32,0,208,229, 8,0,16,227,2,0,0,26,40,7,159,229,0,0,80,229,14,240,160,225,6,88,45,233,228,192,160,227,1,177,160,227, 32,0,219,229,8,0,16,227,16,0,0,10,63,0,0,235,32,0,219,229,8,0,16,227,12,0,0,10,59,0,0,235, 16,0,219,229,57,0,0,235,236,22,159,229,1,16,143,224,0,32,81,229,0,0,82,225,9,0,0,10,255,0,82,227, 4,16,129,18,249,255,255,26,238,0,160,227,67,0,0,235,228,0,92,227,193,255,255,27,184,6,159,229,0,0,80,229, 6,152,189,232,0,16,17,229,255,12,17,227,8,0,0,10,2,9,17,227,4,0,0,26,228,0,160,227,0,0,92,225, 1,0,0,26,53,0,0,235,240,255,255,234,224,0,160,227,47,0,0,235,33,24,160,225,1,240,143,224,241,0,164,3, 242,0,24,4,243,0,136,4,244,0,168,4,245,0,180,4,246,0,232,4,160,128,116,1,161,128,120,1,162,128,128,1, 163,128,144,1,164,128,176,1,165,128,204,1,168,82,232,1,169,65,244,1,170,78,64,2,171,196,80,2,172,207,92,2, 173,77,104,2,174,72,120,2,175,79,128,2,176,85,164,2,177,83,236,2,178,69,4,3,179,107,28,3,180,46,36,3, 181,107,88,3,182,46,96,3,183,32,156,3,255,0,82,72,64,16,160,227,1,16,81,226,253,255,255,26,14,240,160,225, 9,64,45,233,1,48,160,225,32,0,219,229,3,0,0,224,2,0,80,225,251,255,255,26,244,255,255,235,32,0,219,229, 3,0,0,224,2,0,80,225,246,255,255,26,239,255,255,235,9,128,189,232,0,64,45,233,119,255,255,235,0,64,189,232, 6,64,45,233,1,16,160,227,0,32,160,227,235,255,255,235,0,0,203,229,229,255,255,235,6,128,189,232,6,64,45,233, 8,16,160,227,8,32,160,227,228,255,255,235,16,0,219,229,222,255,255,235,6,128,189,232,3,64,45,233,246,255,255,235, 1,0,80,225,1,0,189,232,238,0,160,19,235,255,255,235,238,0,80,227,2,128,189,232,0,64,45,233,238,255,255,235, 1,0,45,233,1,0,160,225,228,255,255,235,1,128,189,232,0,64,45,233,0,16,81,226,0,128,189,8,1,16,65,226, 244,255,255,235,0,0,66,229,1,32,130,226,248,255,255,234,0,64,45,233,0,16,81,226,0,128,189,8,0,0,82,229, 1,32,130,226,227,255,255,235,0,128,189,8,1,16,65,226,247,255,255,234,61,255,255,234,4,0,160,227,0,0,0,234, 5,0,160,227,1,16,160,227,218,255,255,235,135,255,255,234,232,36,159,229,4,16,160,227,228,255,255,235,4,32,66,226, 0,32,18,229,128,16,160,227,232,255,255,235,127,255,255,234,5,16,160,227,93,0,0,235,1,0,160,225,4,16,210,229, 0,32,160,225,225,255,255,235,120,255,255,234,5,16,160,227,86,0,0,235,1,0,160,225,4,16,210,229,0,32,160,225, 210,255,255,235,113,255,255,234,0,0,160,227,1,16,160,227,1,0,0,234,1,0,160,227,1,16,160,227,4,0,45,233, 108,36,159,229,0,224,160,227,0,224,130,229,4,224,130,229,0,224,160,227,2,224,130,229,4,0,189,232,231,2,0,235, 76,36,159,229,0,0,130,229,8,16,130,229,1,177,160,227,16,0,203,229,141,255,255,235,224,192,160,227,91,255,255,234, 60,36,159,229,97,16,160,227,184,255,255,235,87,255,255,234,32,36,159,229,1,16,160,227,250,255,255,234,12,0,160,225, 150,255,255,235,81,255,255,234,4,36,159,229,2,16,160,227,182,255,255,235,77,255,255,234,2,0,160,227,222,255,255,234, 236,35,159,229,0,0,146,229,1,0,128,226,0,0,128,224,232,35,159,229,0,0,130,229,2,16,160,227,171,255,255,235, 66,255,255,234,200,35,159,229,0,16,146,229,8,32,146,229,1,16,129,226,1,16,129,224,255,16,17,226,59,255,255,10, 0,0,82,229,1,32,130,226,138,255,255,235,55,255,255,10,1,16,81,226,0,0,82,229,3,32,130,226,133,255,255,235, 50,255,255,10,1,16,81,226,243,255,255,234,14,0,0,235,1,32,210,229,255,32,2,226,255,16,1,226,0,0,160,227, 189,255,255,234,8,0,0,235,1,32,210,229,255,32,2,226,255,16,1,226,1,0,160,227,183,255,255,234,4,0,160,227, 15,0,0,234,5,0,160,227,13,0,0,234,2,16,160,227,2,64,45,233,68,35,159,229,0,0,160,227,0,0,2,229, 4,32,130,226,121,255,255,235,2,0,189,232,1,32,66,224,0,16,18,229,0,128,189,232,6,0,160,227,0,0,0,234, 7,0,160,227,8,35,159,229,0,224,160,227,4,224,130,229,1,224,160,227,2,224,194,229,144,2,0,235,1,177,160,227, 248,34,159,229,0,0,130,229,1,16,160,227,111,255,255,235,54,255,255,235,224,192,160,227,4,255,255,234,3,0,160,227, 149,255,255,234,0,192,160,227,216,50,159,229,3,48,143,224,212,82,159,229,5,80,143,224,4,32,147,229,204,146,159,229, 99,0,0,235,0,32,147,229,2,0,80,225,1,192,140,19,10,82,160,227,12,32,147,229,180,146,159,229,92,0,0,235, 8,32,147,229,2,0,80,225,2,192,140,19,66,0,0,235,160,146,159,229,91,0,0,235,156,146,159,229,89,0,0,235, 5,96,160,225,4,192,140,19,144,146,159,229,88,0,0,235,4,32,160,227,13,0,0,234,0,192,160,227,54,0,0,235, 124,146,159,229,82,0,0,235,1,192,140,19,5,96,160,17,5,0,0,26,108,146,159,229,81,0,0,235,104,146,159,229, 79,0,0,235,2,192,140,19,5,96,160,17,3,32,160,227,12,0,160,225,48,0,0,235,2,0,28,224,3,0,0,10, 6,0,160,225,44,0,0,235,32,4,160,225,42,0,0,235,0,128,160,227,129,145,160,227,0,128,9,229,4,128,137,229, 8,128,137,229,121,254,255,234,2,40,160,227,0,80,160,227,0,0,85,229,32,0,0,235,1,80,133,226,1,32,82,226, 250,255,255,26,241,255,255,234,2,41,160,227,10,82,160,227,246,255,255,234,244,81,159,229,5,80,143,224,240,33,159,229, 200,145,159,229,34,0,0,235,19,0,0,235,32,4,160,225,17,0,0,235,32,4,160,225,15,0,0,235,32,4,160,225, 13,0,0,235,225,255,255,234,10,82,160,227,196,33,159,229,156,145,159,229,22,0,0,235,242,255,255,234,163,128,160,227, 129,145,160,227,0,128,9,229,189,128,160,227,4,128,137,229,107,128,160,227,8,128,137,229,14,240,160,225,14,176,160,225, 129,65,160,227,0,16,20,229,1,0,17,227,251,255,255,26,206,254,255,235,0,16,20,229,1,0,17,227,247,255,255,26, 202,254,255,235,1,17,160,227,0,0,65,229,199,254,255,235,11,240,160,225,3,32,194,227,0,0,160,227,4,112,160,227, 4,160,160,227,11,0,0,234,76,49,159,229,76,1,159,229,4,0,0,234,3,42,160,227,0,48,160,227,1,112,160,227, 2,0,0,234,0,48,224,227,1,42,160,227,4,112,160,227,14,82,160,227,1,160,160,227,36,177,159,229,11,176,143,224, 9,176,139,224,15,128,160,225,11,240,160,225,7,80,133,224,10,32,82,224,250,255,255,26,14,240,160,225,0,48,5,229, 8,240,160,225,0,64,21,229,4,0,83,225,8,240,160,1,14,240,160,225,0,48,69,229,1,48,131,226,8,240,160,225, 0,64,85,229,4,0,83,225,14,240,160,17,1,48,131,226,255,48,3,226,8,240,160,225,0,48,5,229,0,48,131,224, 8,240,160,225,0,64,21,229,4,0,83,225,14,240,160,17,0,48,131,224,8,240,160,225,0,64,21,229,4,0,128,224, 8,240,160,225,0,64,213,229,1,144,213,229,9,68,132,225,2,144,213,229,9,72,132,225,3,144,213,229,9,76,132,225, 4,0,128,224,8,240,160,225,4,0,0,96,8,0,0,96,12,0,0,96,16,0,0,96,20,0,0,96,24,0,0,96, 28,0,0,96,0,64,0,224,0,0,0,96,32,0,0,64,32,0,0,96,100,4,0,224,104,4,0,224,104,0,0,0, 112,4,0,224,0,4,0,224,60,250,255,255,4,250,255,255,88,8,0,0,100,8,0,0,56,8,0,0,68,8,0,0, 20,8,0,0,32,8,0,0,252,7,0,0,4,8,0,0,0,249,255,255,0,0,2,0,0,128,0,0,120,86,52,18, 31,31,31,0,28,248,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,234,21,0,0,234,4,224,45,229,84,193,159,229,84,177,159,229,208,15,12,229,212,31,12,229,200,47,12,229, 255,251,255,235,11,0,0,27,0,0,0,234,4,224,45,229,0,0,160,227,232,15,12,229,228,15,12,229,220,15,12,229, 204,223,12,229,80,0,0,235,204,223,28,229,0,144,160,227,232,159,12,229,4,240,157,228,4,240,31,229,128,0,0,96, 8,209,159,229,8,193,159,229,8,177,159,229,8,81,159,229,8,97,159,229,97,144,160,227,1,0,213,228,1,0,198,228, 1,144,89,226,251,255,255,26,1,0,160,227,5,16,160,227,0,32,160,227,208,15,12,229,212,31,12,229,200,47,12,229, 225,255,255,235,254,255,255,234,208,15,28,229,4,0,80,227,14,240,160,33,4,224,45,229,5,0,0,235,1,0,80,227, 4,240,157,20,0,0,160,227,180,16,159,229,0,0,1,229,220,255,255,234,4,224,45,229,0,0,160,227,207,251,255,235, 4,240,157,228,156,0,159,229,200,31,28,229,1,0,208,231,1,16,129,226,1,25,193,227,200,31,12,229,1,0,0,226, 14,240,160,225,0,0,0,0,66,0,0,0,0,0,0,0,0,74,66,80,60,0,0,0,0,0,80,0,0,44,0,0, 0,0,0,80,64,64,0,48,64,0,0,0,76,76,0,0,0,0,0,0,0,0,0,0,90,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,68,0,84,0,92,0,0,0,0,12,3,3,0,0,0,0,0,1,0,0, 1,0,0,0,0,0,0,0,232,20,0,224,144,216,1,0,0,64,0,224,232,20,0,224,144,216,1,0,4,17,0,0, 0,4,0,224,216,38,0,224,0,0,0,160,4,224,45,229,99,0,0,235,208,15,28,229,1,0,16,227,160,0,0,27, 109,2,0,235,208,15,28,229,254,0,0,226,0,0,80,227,7,0,0,10,2,0,80,227,33,0,0,10,4,0,80,227, 47,0,0,10,6,0,80,227,55,0,0,10,0,0,160,227,4,240,157,228,165,4,0,235,40,1,159,229,176,15,12,229, 176,111,28,229,110,84,0,235,172,111,12,229,176,95,28,229,0,0,160,227,16,17,159,229,6,0,85,225,14,0,0,10, 4,0,149,228,4,17,159,229,6,0,85,225,10,0,0,10,1,0,160,227,232,15,12,229,7,0,160,227,180,15,12,229, 224,11,0,235,232,16,159,229,0,0,80,227,2,0,0,26,2,0,160,227,232,15,12,229,65,7,0,235,34,0,0,235, 4,240,157,228,137,4,0,235,200,0,159,229,176,15,12,229,1,0,160,227,232,15,12,229,248,11,0,235,184,16,159,229, 3,0,45,233,0,0,17,229,0,0,80,227,2,0,0,10,21,0,0,235,4,0,129,228,249,255,255,234,3,0,189,232, 4,240,157,228,148,0,159,229,176,15,12,229,176,111,28,229,67,84,0,235,172,111,12,229,176,95,28,229,6,0,85,225, 0,0,160,227,1,0,160,19,4,240,157,228,168,127,28,229,7,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225, 0,0,160,227,1,0,160,19,4,240,157,228,0,0,80,227,11,0,0,10,127,48,160,227,0,32,3,224,32,52,3,224, 128,0,0,226,208,79,28,229,1,0,20,227,2,0,0,10,8,0,82,227,130,32,98,34,130,48,99,226,0,4,130,225, 3,4,128,225,14,240,160,225,216,38,0,224,224,177,255,255,48,117,0,0,34,78,0,0,216,38,0,224,216,38,0,224, 216,38,0,224,4,224,45,229,0,0,160,227,248,10,12,229,168,15,12,229,164,15,12,229,244,10,12,229,64,20,159,229, 160,31,12,229,8,0,1,229,4,0,1,229,128,11,12,229,124,11,12,229,120,11,12,229,116,11,12,229,112,11,12,229, 108,11,12,229,28,84,159,229,12,96,160,225,131,144,160,227,36,6,6,229,24,4,6,229,12,2,6,229,4,16,149,228, 4,16,134,228,1,144,89,226,248,255,255,26,84,80,160,227,244,99,159,229,9,144,160,227,9,128,160,227,1,0,214,228, 5,0,204,231,0,0,80,227,2,0,0,10,64,0,45,233,163,2,0,235,64,0,189,232,4,80,133,226,1,128,88,226, 245,255,255,26,4,80,133,226,1,144,89,226,241,255,255,26,184,83,159,229,16,144,160,227,1,0,214,228,1,0,197,228, 1,144,89,226,251,255,255,26,84,80,160,227,9,144,160,227,9,128,160,227,5,0,220,231,92,0,80,227,168,95,12,5, 60,0,80,227,164,95,12,5,4,80,133,226,1,128,88,226,247,255,255,26,4,80,133,226,1,144,89,226,243,255,255,26, 4,240,157,228,84,80,160,227,109,111,160,227,9,144,160,227,5,48,140,224,6,64,140,224,0,0,83,229,0,16,84,229, 96,0,16,227,96,0,32,18,96,0,17,227,96,16,33,18,0,0,68,229,0,16,67,229,36,6,19,229,36,22,20,229, 96,8,160,225,97,24,160,225,36,22,3,229,36,6,4,229,24,4,19,229,24,20,20,229,96,8,160,225,97,24,160,225, 24,20,3,229,24,4,4,229,6,0,85,225,6,0,0,10,4,80,133,226,4,96,70,226,1,144,89,226,227,255,255,26, 4,80,133,226,4,96,70,226,223,255,255,234,196,15,28,229,188,31,28,229,196,31,12,229,188,15,12,229,192,15,28,229, 184,31,28,229,192,31,12,229,184,15,12,229,168,15,28,229,164,31,28,229,130,15,96,226,130,31,97,226,168,31,12,229, 164,15,12,229,127,11,92,229,107,27,92,229,127,27,76,229,107,11,76,229,126,11,92,229,108,27,92,229,126,27,76,229, 108,11,76,229,125,11,92,229,109,27,92,229,125,27,76,229,109,11,76,229,124,11,92,229,110,27,92,229,124,27,76,229, 110,11,76,229,123,11,92,229,111,27,92,229,123,27,76,229,111,11,76,229,122,11,92,229,112,27,92,229,122,27,76,229, 112,11,76,229,121,11,92,229,113,27,92,229,121,27,76,229,113,11,76,229,120,11,92,229,114,27,92,229,120,27,76,229, 114,11,76,229,119,11,92,229,115,27,92,229,119,27,76,229,115,11,76,229,14,240,160,225,128,0,0,0,128,0,0,0, 128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0, 128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0, 128,0,0,0,128,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0, 128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0, 128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0,128,0,0,0, 128,0,0,0,80,37,0,224,120,21,0,0,0,4,0,224,36,5,0,224,4,224,45,229,32,0,45,233,180,15,28,229, 1,0,64,226,180,15,12,229,160,15,28,229,4,48,128,228,160,15,12,229,127,15,160,227,35,99,0,224,3,81,16,224, 0,0,160,227,1,0,160,3,156,15,76,229,32,0,85,227,33,0,0,58,72,0,45,233,153,1,0,235,12,1,0,235, 72,0,189,232,5,64,220,231,0,0,160,227,5,0,204,231,128,48,3,226,35,51,132,225,6,80,160,225,5,0,220,231, 0,0,80,227,9,0,0,10,24,0,45,233,140,1,0,235,255,0,0,235,24,0,189,232,5,0,220,231,28,0,0,226, 32,161,140,224,196,15,90,229,1,0,128,226,196,15,74,229,5,0,220,231,5,48,204,231,92,0,84,227,168,95,12,5, 0,68,132,225,16,0,45,233,125,1,0,235,222,0,0,235,16,0,189,232,32,0,189,232,4,240,157,228,37,161,140,224, 196,15,90,229,1,0,64,226,196,15,74,229,64,80,133,227,6,80,204,231,6,80,160,225,113,1,0,235,210,0,0,235, 32,0,189,232,4,240,157,228,4,224,45,229,32,0,45,233,180,15,28,229,1,0,64,226,180,15,12,229,160,15,28,229, 4,48,128,228,160,15,12,229,127,15,160,227,35,99,0,224,3,81,16,224,0,0,160,227,1,0,160,3,156,15,76,229, 32,0,85,227,33,0,0,58,72,0,45,233,92,1,0,235,207,0,0,235,72,0,189,232,5,64,220,231,0,0,160,227, 5,0,204,231,128,48,3,226,35,51,132,225,6,80,160,225,5,0,220,231,0,0,80,227,9,0,0,10,24,0,45,233, 79,1,0,235,194,0,0,235,24,0,189,232,5,0,220,231,28,0,0,226,32,161,140,224,188,15,90,229,1,0,128,226, 188,15,74,229,5,0,220,231,5,48,204,231,60,0,84,227,164,95,12,5,0,68,132,225,16,0,45,233,64,1,0,235, 170,0,0,235,16,0,189,232,32,0,189,232,4,240,157,228,37,161,140,224,188,15,90,229,1,0,64,226,188,15,74,229, 32,80,133,227,6,80,204,231,6,80,160,225,52,1,0,235,158,0,0,235,32,0,189,232,4,240,157,228,4,224,45,229, 32,0,45,233,180,15,28,229,1,0,128,226,180,15,12,229,160,15,28,229,4,0,64,226,160,15,12,229,127,15,160,227, 35,99,0,224,3,81,16,224,32,0,85,227,27,0,0,58,32,0,45,233,6,80,160,225,24,0,45,233,32,1,0,235, 147,0,0,235,24,0,189,232,36,4,176,225,5,0,204,231,9,0,0,10,24,0,45,233,25,1,0,235,131,0,0,235, 24,0,189,232,36,4,160,225,28,0,0,226,32,161,140,224,196,15,90,229,1,0,64,226,196,15,74,229,32,0,189,232, 255,0,4,226,5,0,204,231,92,0,80,227,168,95,12,5,11,1,0,235,108,0,0,235,32,0,189,232,4,240,157,228, 37,161,140,224,196,15,90,229,1,0,128,226,196,15,74,229,6,80,160,225,2,1,0,235,117,0,0,235,0,0,160,227, 5,0,204,231,32,0,189,232,4,240,157,228,4,224,45,229,32,0,45,233,180,15,28,229,1,0,128,226,180,15,12,229, 160,15,28,229,4,0,64,226,160,15,12,229,127,15,160,227,35,99,0,224,3,81,16,224,32,0,85,227,27,0,0,58, 32,0,45,233,6,80,160,225,24,0,45,233,236,0,0,235,95,0,0,235,24,0,189,232,36,4,176,225,5,0,204,231, 9,0,0,10,24,0,45,233,229,0,0,235,70,0,0,235,24,0,189,232,36,4,160,225,28,0,0,226,32,161,140,224, 188,15,90,229,1,0,64,226,188,15,74,229,32,0,189,232,255,0,4,226,5,0,204,231,60,0,80,227,164,95,12,5, 215,0,0,235,65,0,0,235,32,0,189,232,4,240,157,228,37,161,140,224,188,15,90,229,1,0,128,226,188,15,74,229, 6,80,160,225,206,0,0,235,65,0,0,235,0,0,160,227,5,0,204,231,32,0,189,232,4,240,157,228,0,48,160,227, 156,63,76,229,180,15,28,229,1,0,64,226,180,15,12,229,160,15,28,229,4,48,128,228,160,15,12,229,14,240,160,225, 180,15,28,229,1,0,128,226,180,15,12,229,160,15,28,229,4,0,64,226,160,15,12,229,14,240,160,225,4,224,45,229, 0,0,160,227,104,11,12,229,100,11,12,229,204,82,159,229,131,144,160,227,12,2,133,229,4,0,133,228,1,144,89,226, 251,255,255,26,4,0,160,227,148,15,12,229,136,13,12,229,84,80,160,227,9,144,160,227,9,128,160,227,5,0,220,231, 0,0,80,227,6,0,0,27,4,80,133,226,1,128,88,226,249,255,255,26,4,80,133,226,1,144,89,226,245,255,255,26, 4,240,157,228,64,0,16,227,8,0,0,10,152,31,28,229,152,95,12,229,1,160,140,224,140,93,10,229,5,160,140,224, 152,31,10,229,0,0,160,227,140,13,10,229,16,0,0,234,148,31,28,229,148,95,12,229,1,160,140,224,140,93,10,229, 5,160,140,224,152,31,10,229,4,0,160,227,140,13,10,229,7,0,0,234,5,160,140,224,152,31,26,229,140,45,26,229, 2,160,140,224,152,31,10,229,1,160,140,224,140,45,10,229,255,255,255,234,14,240,160,225,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0, 5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,0,0,0,0,9,0,0,0,10,0,0,0,11,0,0,0, 12,0,0,0,13,0,0,0,14,0,0,0,15,0,0,0,16,0,0,0,17,0,0,0,0,0,0,0,18,0,0,0, 19,0,0,0,20,0,0,0,21,0,0,0,22,0,0,0,23,0,0,0,24,0,0,0,25,0,0,0,26,0,0,0, 0,0,0,0,27,0,0,0,28,0,0,0,29,0,0,0,30,0,0,0,31,0,0,0,32,0,0,0,33,0,0,0, 34,0,0,0,35,0,0,0,0,0,0,0,36,0,0,0,37,0,0,0,38,0,0,0,39,0,0,0,40,0,0,0, 41,0,0,0,42,0,0,0,43,0,0,0,44,0,0,0,0,0,0,0,45,0,0,0,46,0,0,0,47,0,0,0, 48,0,0,0,49,0,0,0,50,0,0,0,51,0,0,0,52,0,0,0,53,0,0,0,0,0,0,0,54,0,0,0, 55,0,0,0,56,0,0,0,57,0,0,0,58,0,0,0,59,0,0,0,60,0,0,0,61,0,0,0,62,0,0,0, 0,0,0,0,63,0,0,0,64,0,0,0,65,0,0,0,66,0,0,0,67,0,0,0,68,0,0,0,69,0,0,0, 70,0,0,0,71,0,0,0,0,0,0,0,72,0,0,0,73,0,0,0,74,0,0,0,75,0,0,0,76,0,0,0, 77,0,0,0,78,0,0,0,79,0,0,0,80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 80,5,0,224,5,96,140,224,24,20,22,229,0,32,86,229,62,32,2,226,130,0,143,224,116,5,144,229,0,16,49,224, 103,0,0,10,228,53,159,229,1,48,19,224,9,0,0,10,5,96,140,224,44,96,70,226,24,4,22,229,3,0,32,224, 24,4,6,229,0,0,86,229,0,0,80,227,248,255,255,10,3,16,49,224,90,0,0,10,180,53,159,229,1,48,19,224, 9,0,0,10,5,96,140,224,44,96,134,226,24,4,22,229,3,0,32,224,24,4,6,229,0,0,86,229,0,0,80,227, 248,255,255,10,3,16,49,224,77,0,0,10,132,53,159,229,1,48,19,224,9,0,0,10,5,96,140,224,36,96,70,226, 24,4,22,229,3,0,32,224,24,4,6,229,0,0,86,229,0,0,80,227,248,255,255,10,3,16,49,224,64,0,0,10, 84,53,159,229,1,48,19,224,9,0,0,10,5,96,140,224,36,96,134,226,24,4,22,229,3,0,32,224,24,4,6,229, 0,0,86,229,0,0,80,227,248,255,255,10,3,16,49,224,51,0,0,10,36,53,159,229,1,48,19,224,9,0,0,10, 5,96,140,224,40,96,70,226,24,4,22,229,3,0,32,224,24,4,6,229,0,0,86,229,0,0,80,227,248,255,255,10, 3,16,49,224,38,0,0,10,244,52,159,229,1,48,19,224,9,0,0,10,5,96,140,224,40,96,134,226,24,4,22,229, 3,0,32,224,24,4,6,229,0,0,86,229,0,0,80,227,248,255,255,10,3,16,49,224,25,0,0,10,196,52,159,229, 1,48,19,224,9,0,0,10,5,96,140,224,4,96,70,226,24,4,22,229,3,0,32,224,24,4,6,229,0,0,86,229, 0,0,80,227,248,255,255,10,3,16,49,224,12,0,0,10,148,52,159,229,1,48,19,224,9,0,0,10,5,96,140,224, 4,96,134,226,24,4,22,229,3,0,32,224,24,4,6,229,0,0,86,229,0,0,80,227,248,255,255,10,3,16,49,224, 255,255,255,10,5,96,140,224,130,0,143,224,64,243,144,229,76,6,22,229,2,0,32,226,76,6,6,229,5,96,139,224, 36,107,22,229,6,160,140,224,128,11,90,229,1,0,32,226,128,11,74,229,14,240,160,225,14,240,160,225,120,6,22,229, 1,12,32,226,120,6,6,229,112,6,22,229,2,12,32,226,112,6,6,229,14,240,160,225,80,6,22,229,1,0,32,226, 80,6,6,229,76,6,22,229,2,0,32,226,76,6,6,229,72,6,22,229,4,0,32,226,72,6,6,229,0,6,22,229, 32,0,32,226,0,6,6,229,248,5,22,229,128,0,32,226,248,5,6,229,14,240,160,225,80,6,22,229,1,0,32,226, 80,6,6,229,76,6,22,229,2,0,32,226,76,6,6,229,72,6,22,229,4,0,32,226,72,6,6,229,40,6,22,229, 8,0,32,226,40,6,6,229,32,6,22,229,16,0,32,226,32,6,6,229,252,5,22,229,64,0,32,226,252,5,6,229, 14,240,160,225,76,6,22,229,2,0,32,226,76,6,6,229,40,6,22,229,8,0,32,226,40,6,6,229,32,6,22,229, 16,0,32,226,32,6,6,229,252,5,22,229,64,0,32,226,252,5,6,229,14,240,160,225,80,6,22,229,1,0,32,226, 80,6,6,229,72,6,22,229,4,0,32,226,72,6,6,229,0,6,22,229,32,0,32,226,0,6,6,229,248,5,22,229, 128,0,32,226,248,5,6,229,14,240,160,225,80,6,22,229,1,0,32,226,80,6,6,229,76,6,22,229,2,0,32,226, 76,6,6,229,72,6,22,229,4,0,32,226,72,6,6,229,40,6,22,229,8,0,32,226,40,6,6,229,32,6,22,229, 16,0,32,226,32,6,6,229,0,6,22,229,32,0,32,226,0,6,6,229,252,5,22,229,64,0,32,226,252,5,6,229, 248,5,22,229,128,0,32,226,248,5,6,229,14,240,160,225,252,5,22,229,2,8,32,226,252,5,6,229,5,96,139,224, 36,107,22,229,6,160,140,224,116,11,90,229,1,0,32,226,116,11,74,229,14,240,160,225,14,240,160,225,208,5,22,229, 1,4,32,226,208,5,6,229,216,5,22,229,2,4,32,226,216,5,6,229,14,240,160,225,248,5,22,229,1,8,32,226, 248,5,6,229,252,5,22,229,2,8,32,226,252,5,6,229,0,6,22,229,1,7,32,226,0,6,6,229,72,6,22,229, 2,6,32,226,72,6,6,229,80,6,22,229,2,5,32,226,80,6,6,229,14,240,160,225,248,5,22,229,1,8,32,226, 248,5,6,229,252,5,22,229,2,8,32,226,252,5,6,229,0,6,22,229,1,7,32,226,0,6,6,229,32,6,22,229, 2,7,32,226,32,6,6,229,40,6,22,229,1,6,32,226,40,6,6,229,76,6,22,229,1,5,32,226,76,6,6,229, 14,240,160,225,252,5,22,229,2,8,32,226,252,5,6,229,32,6,22,229,2,7,32,226,32,6,6,229,40,6,22,229, 1,6,32,226,40,6,6,229,76,6,22,229,1,5,32,226,76,6,6,229,14,240,160,225,248,5,22,229,1,8,32,226, 248,5,6,229,0,6,22,229,1,7,32,226,0,6,6,229,72,6,22,229,2,6,32,226,72,6,6,229,80,6,22,229, 2,5,32,226,80,6,6,229,14,240,160,225,248,5,22,229,1,8,32,226,248,5,6,229,252,5,22,229,2,8,32,226, 252,5,6,229,0,6,22,229,1,7,32,226,0,6,6,229,32,6,22,229,2,7,32,226,32,6,6,229,40,6,22,229, 1,6,32,226,40,6,6,229,72,6,22,229,2,6,32,226,72,6,6,229,76,6,22,229,1,5,32,226,76,6,6,229, 80,6,22,229,2,5,32,226,80,6,6,229,14,240,160,225,16,32,0,0,152,32,0,0,56,32,0,0,152,32,0,0, 60,32,0,0,152,32,0,0,88,32,0,0,152,32,0,0,152,32,0,0,0,0,0,0,20,33,0,0,228,32,0,0, 72,33,0,0,24,33,0,0,76,33,0,0,0,0,0,0,176,33,0,0,56,34,0,0,216,33,0,0,56,34,0,0, 220,33,0,0,56,34,0,0,248,33,0,0,56,34,0,0,56,34,0,0,0,0,0,0,180,34,0,0,132,34,0,0, 232,34,0,0,184,34,0,0,236,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,0,0,0,165,0,0,0, 90,0,0,0,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,165,0,0,0,165,0, 0,0,90,0,0,0,90,0,0,0,0,0,0,0,0,0,1,0,128,0,128,0,1,0,4,0,32,0,32,0,4,0, 2,0,64,0,64,0,2,0,8,0,16,0,16,0,8,0,14,240,160,225,14,240,160,225,0,144,160,227,14,240,160,225, 0,144,160,227,14,240,160,225,0,144,160,227,14,240,160,225,0,0,160,227,80,11,12,229,76,11,12,229,168,95,28,229, 5,160,140,224,36,6,26,229,22,20,90,229,32,24,145,225,18,0,0,10,1,16,139,224,0,20,209,229,128,0,17,227, 1,28,65,18,0,16,113,226,10,0,0,10,1,96,69,224,6,0,220,231,0,0,80,227,4,0,0,26,76,27,12,229, 1,96,70,224,6,0,220,231,0,0,80,227,251,255,255,10,80,107,12,229,14,240,160,225,0,0,224,227,80,11,12,229, 14,240,160,225,0,0,160,227,80,11,12,229,76,11,12,229,164,95,28,229,5,160,140,224,34,6,26,229,24,20,90,229, 32,24,145,225,18,0,0,10,1,16,139,224,0,20,209,229,128,0,17,227,1,28,65,18,0,0,81,227,10,0,0,10, 1,96,69,224,6,0,220,231,0,0,80,227,4,0,0,26,76,27,12,229,1,96,70,224,6,0,220,231,0,0,80,227, 251,255,255,10,80,107,12,229,14,240,160,225,0,0,224,227,80,11,12,229,14,240,160,225,164,95,28,229,0,0,85,227, 120,0,0,10,5,96,140,224,6,128,160,225,32,16,160,227,44,0,248,229,14,18,200,229,0,0,80,227,251,255,255,10, 128,0,16,227,4,0,0,26,24,4,24,229,1,0,16,227,1,0,0,10,32,0,160,227,15,2,200,229,6,128,160,225, 66,16,160,227,40,0,248,229,14,18,200,229,0,0,80,227,251,255,255,10,128,0,16,227,4,0,0,26,24,4,24,229, 2,0,16,227,1,0,0,10,64,0,160,227,15,2,200,229,6,128,160,225,32,16,160,227,36,0,248,229,14,18,200,229, 0,0,80,227,251,255,255,10,128,0,16,227,4,0,0,26,24,4,24,229,4,0,16,227,1,0,0,10,96,0,160,227, 15,2,200,229,6,128,160,225,64,16,160,227,4,0,248,229,14,18,200,229,0,0,80,227,251,255,255,10,128,0,16,227, 4,0,0,26,24,4,24,229,8,0,16,227,1,0,0,10,128,0,160,227,15,2,200,229,6,128,160,225,64,16,160,227, 4,0,120,229,14,18,200,229,0,0,80,227,251,255,255,10,128,0,16,227,4,0,0,26,24,4,24,229,16,0,16,227, 1,0,0,10,128,0,160,227,15,2,200,229,6,128,160,225,32,16,160,227,36,0,120,229,14,18,200,229,0,0,80,227, 251,255,255,10,128,0,16,227,4,0,0,26,24,4,24,229,32,0,16,227,1,0,0,10,96,0,160,227,15,2,200,229, 6,128,160,225,64,16,160,227,40,0,120,229,14,18,200,229,0,0,80,227,251,255,255,10,128,0,16,227,4,0,0,26, 24,4,24,229,64,0,16,227,1,0,0,10,64,0,160,227,15,2,200,229,6,128,160,225,32,16,160,227,44,0,120,229, 14,18,200,229,0,0,80,227,251,255,255,10,128,0,16,227,4,0,0,26,24,4,24,229,128,0,16,227,1,0,0,10, 32,0,160,227,15,2,200,229,4,16,160,227,98,18,198,229,90,18,198,229,91,16,160,227,54,18,198,229,56,16,160,227, 58,18,198,229,50,18,198,229,80,16,160,227,18,18,198,229,10,18,198,229,40,16,160,227,234,17,198,229,226,17,198,229, 80,16,160,227,230,17,198,229,14,240,160,225,30,0,0,226,128,0,143,224,0,240,144,229,12,42,0,0,12,42,0,0, 12,42,0,0,12,42,0,0,12,42,0,0,12,42,0,0,12,42,0,0,12,42,0,0,12,42,0,0,12,42,0,0, 64,42,0,0,16,42,0,0,228,42,0,0,180,42,0,0,12,42,0,0,12,42,0,0,4,224,45,229,12,80,160,225, 0,0,160,227,131,144,160,227,12,2,133,229,24,4,133,229,4,80,133,226,1,144,89,226,250,255,255,26,168,95,28,229, 0,0,85,227,135,0,0,10,1,64,160,227,5,96,140,224,44,0,118,229,0,0,80,227,252,255,255,10,128,0,16,227, 9,0,0,26,22,4,86,229,1,0,16,227,6,0,0,10,32,0,160,227,13,2,198,229,25,68,198,229,44,0,118,229, 0,0,80,227,252,255,255,10,207,255,255,235,2,64,160,227,5,96,140,224,40,0,118,229,0,0,80,227,252,255,255,10, 128,0,16,227,9,0,0,26,22,4,86,229,2,0,16,227,6,0,0,10,64,0,160,227,13,2,198,229,25,68,198,229, 40,0,118,229,0,0,80,227,252,255,255,10,190,255,255,235,4,64,160,227,5,96,140,224,36,0,118,229,0,0,80,227, 252,255,255,10,128,0,16,227,9,0,0,26,22,4,86,229,4,0,16,227,6,0,0,10,96,0,160,227,13,2,198,229, 25,68,198,229,36,0,118,229,0,0,80,227,252,255,255,10,173,255,255,235,8,64,160,227,5,96,140,224,4,0,118,229, 0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,22,4,86,229,8,0,16,227,6,0,0,10,128,0,160,227, 13,2,198,229,25,68,198,229,4,0,118,229,0,0,80,227,252,255,255,10,156,255,255,235,16,64,160,227,5,96,140,224, 4,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,22,4,86,229,16,0,16,227,6,0,0,10, 128,0,160,227,13,2,198,229,25,68,198,229,4,0,246,229,0,0,80,227,252,255,255,10,139,255,255,235,32,64,160,227, 5,96,140,224,36,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,22,4,86,229,32,0,16,227, 6,0,0,10,96,0,160,227,13,2,198,229,25,68,198,229,36,0,246,229,0,0,80,227,252,255,255,10,122,255,255,235, 64,64,160,227,5,96,140,224,40,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,22,4,86,229, 64,0,16,227,6,0,0,10,64,0,160,227,13,2,198,229,25,68,198,229,40,0,246,229,0,0,80,227,252,255,255,10, 105,255,255,235,128,64,160,227,5,96,140,224,44,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26, 22,4,86,229,128,0,16,227,6,0,0,10,32,0,160,227,13,2,198,229,25,68,198,229,44,0,246,229,0,0,80,227, 252,255,255,10,88,255,255,235,4,240,157,228,14,240,160,225,64,4,214,229,4,0,128,225,64,4,198,229,28,4,214,229, 4,0,128,225,28,4,198,229,20,4,214,229,4,0,128,225,20,4,198,229,240,3,214,229,4,0,128,225,240,3,198,229, 6,112,160,225,44,16,247,229,24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,6,112,160,225, 36,16,247,229,24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,6,112,160,225,36,16,119,229, 24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,6,112,160,225,44,16,119,229,24,4,215,229, 4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,14,240,160,225,68,4,214,229,4,0,128,225,68,4,198,229, 60,4,214,229,4,0,128,225,60,4,198,229,244,3,214,229,4,0,128,225,244,3,198,229,236,3,214,229,4,0,128,225, 236,3,198,229,6,112,160,225,40,16,247,229,24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10, 6,112,160,225,4,16,247,229,24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,6,112,160,225, 4,16,119,229,24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,6,112,160,225,40,16,119,229, 24,4,215,229,4,0,128,225,24,4,199,229,0,0,81,227,249,255,255,10,14,240,160,225,30,0,0,226,128,0,143,224, 0,240,144,229,248,45,0,0,248,45,0,0,248,45,0,0,248,45,0,0,248,45,0,0,248,45,0,0,248,45,0,0, 248,45,0,0,248,45,0,0,248,45,0,0,44,46,0,0,252,45,0,0,208,46,0,0,160,46,0,0,248,45,0,0, 248,45,0,0,4,224,45,229,12,80,160,225,0,0,160,227,131,144,160,227,12,2,133,229,24,4,133,229,4,80,133,226, 1,144,89,226,250,255,255,26,164,95,28,229,0,0,85,227,135,0,0,10,1,64,160,227,5,96,140,224,44,0,246,229, 0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,24,4,86,229,1,0,16,227,6,0,0,10,32,0,160,227, 15,2,198,229,27,68,198,229,44,0,246,229,0,0,80,227,252,255,255,10,207,255,255,235,2,64,160,227,5,96,140,224, 40,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,24,4,86,229,2,0,16,227,6,0,0,10, 64,0,160,227,15,2,198,229,27,68,198,229,40,0,246,229,0,0,80,227,252,255,255,10,190,255,255,235,4,64,160,227, 5,96,140,224,36,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,24,4,86,229,4,0,16,227, 6,0,0,10,96,0,160,227,15,2,198,229,27,68,198,229,36,0,246,229,0,0,80,227,252,255,255,10,173,255,255,235, 8,64,160,227,5,96,140,224,4,0,246,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26,24,4,86,229, 8,0,16,227,6,0,0,10,128,0,160,227,15,2,198,229,27,68,198,229,4,0,246,229,0,0,80,227,252,255,255,10, 156,255,255,235,16,64,160,227,5,96,140,224,4,0,118,229,0,0,80,227,252,255,255,10,128,0,16,227,9,0,0,26, 24,4,86,229,16,0,16,227,6,0,0,10,128,0,160,227,15,2,198,229,27,68,198,229,4,0,118,229,0,0,80,227, 252,255,255,10,139,255,255,235,32,64,160,227,5,96,140,224,36,0,118,229,0,0,80,227,252,255,255,10,128,0,16,227, 9,0,0,26,24,4,86,229,32,0,16,227,6,0,0,10,96,0,160,227,15,2,198,229,27,68,198,229,36,0,118,229, 0,0,80,227,252,255,255,10,122,255,255,235,64,64,160,227,5,96,140,224,40,0,118,229,0,0,80,227,252,255,255,10, 128,0,16,227,9,0,0,26,24,4,86,229,64,0,16,227,6,0,0,10,64,0,160,227,15,2,198,229,27,68,198,229, 40,0,118,229,0,0,80,227,252,255,255,10,105,255,255,235,128,64,160,227,5,96,140,224,44,0,118,229,0,0,80,227, 252,255,255,10,128,0,16,227,9,0,0,26,24,4,86,229,128,0,16,227,6,0,0,10,32,0,160,227,15,2,198,229, 27,68,198,229,44,0,118,229,0,0,80,227,252,255,255,10,88,255,255,235,4,240,157,228,14,240,160,225,66,4,214,229, 4,0,128,225,66,4,198,229,30,4,214,229,4,0,128,225,30,4,198,229,22,4,214,229,4,0,128,225,22,4,198,229, 242,3,214,229,4,0,128,225,242,3,198,229,6,112,160,225,44,16,247,229,26,4,215,229,4,0,128,225,26,4,199,229, 0,0,81,227,249,255,255,10,6,112,160,225,36,16,247,229,26,4,215,229,4,0,128,225,26,4,199,229,0,0,81,227, 249,255,255,10,6,112,160,225,36,16,119,229,26,4,215,229,4,0,128,225,26,4,199,229,0,0,81,227,249,255,255,10, 6,112,160,225,44,16,119,229,26,4,215,229,4,0,128,225,26,4,199,229,0,0,81,227,249,255,255,10,14,240,160,225, 70,4,214,229,4,0,128,225,70,4,198,229,62,4,214,229,4,0,128,225,62,4,198,229,246,3,214,229,4,0,128,225, 246,3,198,229,238,3,214,229,4,0,128,225,238,3,198,229,6,112,160,225,40,16,247,229,26,4,215,229,4,0,128,225, 26,4,199,229,0,0,81,227,249,255,255,10,6,112,160,225,4,16,247,229,26,4,215,229,4,0,128,225,26,4,199,229, 0,0,81,227,249,255,255,10,6,112,160,225,4,16,119,229,26,4,215,229,4,0,128,225,26,4,199,229,0,0,81,227, 249,255,255,10,6,112,160,225,40,16,119,229,26,4,215,229,4,0,128,225,26,4,199,229,0,0,81,227,249,255,255,10, 14,240,160,225,4,224,45,229,40,219,12,229,230,18,0,235,0,0,160,227,228,15,12,229,212,31,28,229,1,0,139,224, 92,9,80,229,128,0,16,227,1,12,64,18,56,11,12,229,180,15,12,229,1,0,139,224,81,9,80,229,0,1,160,225, 52,11,12,229,1,0,139,224,70,9,80,229,0,1,160,225,48,11,12,229,1,0,139,224,59,9,80,229,0,1,160,225, 44,11,12,229,176,111,28,229,253,76,0,235,172,111,12,229,180,2,0,235,176,95,28,229,172,111,28,229,6,0,85,225, 5,0,0,10,238,1,0,235,176,95,28,229,0,0,21,229,228,15,12,229,180,0,159,229,224,15,12,229,176,111,28,229, 239,76,0,235,172,111,12,229,229,1,0,235,176,95,28,229,0,0,21,229,228,15,12,229,144,0,159,229,224,15,12,229, 21,2,0,235,176,95,28,229,172,111,28,229,6,0,85,225,25,0,0,10,0,0,21,229,228,15,12,229,104,0,159,229, 224,15,12,229,4,80,133,226,6,0,85,225,18,0,0,10,56,11,28,229,1,0,80,227,1,0,160,195,180,15,12,229, 104,25,27,229,108,41,27,229,72,27,12,229,68,43,12,229,23,0,0,235,60,91,28,229,0,0,85,227,6,0,0,10, 211,3,0,235,180,15,28,229,1,0,128,226,180,15,12,229,56,27,28,229,1,0,80,225,240,255,255,218,40,219,28,229, 228,15,28,229,224,31,28,229,4,240,157,228,48,117,0,0,49,117,0,0,228,15,28,229,0,0,80,227,14,240,160,1, 4,224,45,229,10,248,255,235,2,0,80,227,242,255,255,10,4,240,157,228,4,224,45,229,72,27,28,229,68,43,28,229, 176,63,28,229,172,79,28,229,30,0,45,233,176,79,12,229,180,15,28,229,0,0,139,224,45,9,80,229,240,3,0,235, 30,0,189,232,72,27,12,229,68,43,12,229,176,63,12,229,172,79,12,229,0,0,80,227,3,0,0,10,228,15,12,229, 100,0,159,229,224,15,12,229,219,255,255,234,0,0,160,227,60,11,12,229,176,95,28,229,172,15,28,229,0,0,85,225, 15,0,0,10,0,48,21,229,220,63,12,229,119,0,0,235,72,27,28,229,1,0,80,225,7,0,0,218,72,11,12,229, 224,15,12,229,60,91,12,229,0,48,21,229,228,63,12,229,68,27,28,229,1,0,80,225,1,0,0,170,4,80,133,226, 236,255,255,234,72,11,28,229,4,240,157,228,34,78,0,0,4,224,45,229,180,15,28,229,0,0,80,227,5,0,0,186, 3,16,160,227,195,3,0,235,0,0,80,227,1,0,0,10,108,9,27,229,4,240,157,228,72,27,28,229,68,43,28,229, 6,0,45,233,8,128,160,227,178,252,255,235,0,0,89,227,28,0,0,10,255,0,9,226,8,0,64,226,180,31,28,229, 1,0,80,225,23,0,0,186,73,72,160,225,255,12,9,226,1,12,80,227,4,0,0,26,6,0,189,232,72,27,12,229, 68,43,12,229,4,0,160,225,4,240,157,228,2,12,80,227,6,0,0,26,72,11,28,229,0,0,84,225,245,255,255,218, 68,11,28,229,0,0,84,225,68,75,12,181,5,0,0,234,68,11,28,229,0,0,84,225,238,255,255,170,72,11,28,229, 0,0,84,225,72,75,12,197,7,0,0,235,6,0,189,232,72,27,12,229,68,43,12,229,1,0,45,233,8,128,160,227, 100,3,0,235,1,0,189,232,4,240,157,228,180,15,28,229,0,0,80,227,78,0,0,218,4,224,45,229,176,111,28,229, 79,76,0,235,172,111,12,229,176,95,28,229,5,0,86,225,16,0,0,10,120,1,0,235,176,95,28,229,172,15,28,229, 0,0,85,225,9,0,0,10,15,0,0,235,72,27,28,229,1,0,80,225,3,0,0,218,72,11,12,229,68,27,28,229, 1,0,80,225,1,0,0,170,4,80,133,226,242,255,255,234,72,11,28,229,4,240,157,228,156,15,92,229,0,0,80,227, 192,14,159,229,0,0,96,18,4,240,157,228,4,224,45,229,175,2,0,235,1,0,213,229,127,0,0,226,64,27,28,229, 0,1,81,225,1,0,0,10,8,0,0,235,4,240,157,228,180,31,28,229,1,16,129,226,180,31,12,229,3,0,0,235, 180,31,28,229,1,16,65,226,180,31,12,229,4,240,157,228,4,224,45,229,0,48,21,229,29,249,255,235,72,27,28,229, 68,43,28,229,176,111,28,229,172,127,28,229,246,0,45,233,176,127,12,229,58,248,255,235,7,250,255,235,72,27,28,229, 68,43,28,229,0,16,97,226,0,32,98,226,72,43,12,229,68,27,12,229,133,255,255,235,1,0,45,233,48,248,255,235, 253,249,255,235,1,0,189,232,0,0,96,226,246,0,189,232,72,27,12,229,68,43,12,229,176,111,12,229,172,127,12,229, 1,0,45,233,0,48,21,229,123,249,255,235,1,0,189,232,4,240,157,228,4,224,45,229,110,3,0,235,49,0,0,26, 1,0,160,227,62,3,0,235,0,0,80,227,76,0,0,26,180,15,28,229,1,0,112,227,15,0,0,218,3,0,160,227, 66,3,0,235,0,0,80,227,38,0,0,26,176,111,28,229,243,75,0,235,172,111,12,229,176,95,28,229,5,0,86,225, 65,0,0,10,167,1,0,235,229,0,0,235,52,27,28,229,94,1,0,235,65,0,0,235,4,240,157,228,180,15,28,229, 1,0,112,227,15,0,0,218,1,0,160,227,47,3,0,235,0,0,80,227,36,0,0,26,176,111,28,229,224,75,0,235, 172,111,12,229,176,95,28,229,5,0,86,225,46,0,0,10,148,1,0,235,210,0,0,235,48,27,28,229,75,1,0,235, 46,0,0,235,4,240,157,228,176,111,28,229,212,75,0,235,172,111,12,229,176,95,28,229,5,0,86,225,34,0,0,10, 110,0,0,235,4,240,157,228,180,15,28,229,1,0,112,227,13,0,0,218,176,111,28,229,201,75,0,235,172,111,12,229, 176,95,28,229,5,0,86,225,23,0,0,10,3,0,160,227,36,11,12,229,108,1,0,235,185,0,0,235,52,27,28,229, 50,1,0,235,76,0,0,235,4,240,157,228,176,111,28,229,187,75,0,235,172,111,12,229,176,95,28,229,5,0,86,225, 9,0,0,10,1,0,160,227,36,11,12,229,94,1,0,235,171,0,0,235,48,27,28,229,36,1,0,235,62,0,0,235, 4,240,157,228,160,12,159,229,4,240,157,228,156,15,92,229,0,0,80,227,148,12,159,229,0,0,96,18,4,240,157,228, 4,224,45,229,176,95,28,229,172,15,28,229,0,0,85,225,9,0,0,10,108,255,255,235,72,27,28,229,1,0,80,225, 3,0,0,218,72,11,12,229,68,27,28,229,1,0,80,225,39,0,0,170,4,80,133,226,242,255,255,234,118,249,255,235, 72,27,28,229,68,43,28,229,176,63,28,229,172,79,28,229,30,0,45,233,176,79,12,229,32,16,65,226,32,32,66,226, 72,27,12,229,68,43,12,229,173,247,255,235,122,249,255,235,72,27,28,229,68,43,28,229,0,16,97,226,0,32,98,226, 72,43,12,229,68,27,12,229,129,255,255,235,1,0,45,233,163,247,255,235,112,249,255,235,1,0,189,232,0,0,96,226, 30,0,189,232,72,27,12,229,68,43,12,229,176,63,12,229,172,79,12,229,1,0,45,233,96,249,255,235,1,0,189,232, 32,0,128,226,72,27,28,229,1,0,80,225,0,0,0,218,72,11,12,229,72,11,28,229,4,240,157,228,4,224,45,229, 176,95,28,229,172,15,28,229,0,0,85,225,9,0,0,10,53,255,255,235,72,27,28,229,1,0,80,225,3,0,0,218, 72,11,12,229,68,27,28,229,1,0,80,225,1,0,0,170,4,80,133,226,242,255,255,234,72,11,28,229,4,240,157,228, 4,224,45,229,0,0,160,227,104,6,12,229,108,6,12,229,236,10,12,229,180,15,28,229,3,0,112,227,129,2,0,203, 42,1,0,235,176,95,28,229,172,111,28,229,6,0,85,225,1,0,0,26,116,2,0,235,4,240,157,228,108,6,28,229, 8,0,80,227,3,0,0,58,104,118,28,229,7,0,220,231,0,0,80,227,104,6,12,5,32,17,0,235,72,27,28,229, 1,0,80,225,3,0,0,218,72,11,12,229,68,27,28,229,1,0,80,225,16,0,0,170,57,0,0,235,44,27,28,229, 178,0,0,235,176,95,28,229,172,15,28,229,0,0,85,225,9,0,0,10,4,255,255,235,72,27,28,229,1,0,80,225, 3,0,0,218,72,11,12,229,68,27,28,229,1,0,80,225,1,0,0,170,4,80,133,226,242,255,255,234,72,11,28,229, 4,240,157,228,4,224,45,229,154,2,0,235,1,0,0,26,77,2,0,235,4,240,157,228,176,111,28,229,40,75,0,235, 172,111,12,229,176,95,28,229,5,0,86,225,23,0,0,10,176,95,28,229,172,15,28,229,0,0,85,225,17,0,0,10, 0,48,21,229,26,248,255,235,48,0,45,233,79,2,0,235,48,0,189,232,1,0,45,233,0,48,21,229,142,248,255,235, 1,0,189,232,72,27,28,229,1,0,80,225,3,0,0,218,72,11,12,229,68,27,28,229,1,0,80,225,1,0,0,170, 4,80,133,226,234,255,255,234,72,11,28,229,4,240,157,228,156,15,92,229,0,0,80,227,20,10,159,229,0,0,96,18, 4,240,157,228,176,95,28,229,172,111,28,229,6,0,85,225,14,240,160,1,180,15,28,229,3,0,112,227,14,240,160,209, 4,224,45,229,73,1,0,235,32,0,45,233,0,48,21,229,247,247,255,235,72,27,28,229,68,43,28,229,176,111,28,229, 172,127,28,229,246,0,45,233,176,127,12,229,20,247,255,235,225,248,255,235,188,25,159,229,188,41,159,229,72,27,12,229, 68,43,12,229,190,255,255,235,1,0,45,233,12,247,255,235,217,248,255,235,1,0,189,232,0,0,96,226,246,0,189,232, 72,27,12,229,68,43,12,229,176,111,12,229,172,127,12,229,1,0,45,233,0,48,21,229,87,248,255,235,1,0,189,232, 1,0,45,233,46,246,255,235,2,0,189,232,1,0,128,224,4,0,133,229,8,80,149,229,0,0,85,227,218,255,255,26, 0,1,189,232,176,15,28,229,0,64,72,224,36,65,160,225,83,4,0,235,42,1,0,235,4,240,157,228,176,95,28,229, 172,111,28,229,6,0,85,225,14,240,160,1,4,224,45,229,56,2,0,235,14,0,0,26,72,27,28,229,68,43,28,229, 176,63,28,229,172,79,28,229,30,0,45,233,176,79,12,229,1,16,160,227,10,2,0,235,30,0,189,232,72,27,12,229, 68,43,12,229,176,63,12,229,172,79,12,229,0,0,80,227,0,0,0,10,95,0,0,235,176,95,28,229,172,111,28,229, 6,0,85,225,4,240,157,4,173,255,255,235,180,15,28,229,0,0,80,227,2,0,0,202,48,16,160,227,35,0,0,235, 4,240,157,228,50,30,160,227,32,0,0,235,180,15,28,229,1,0,80,227,8,0,0,202,2,0,224,227,40,48,160,227, 150,79,160,227,41,0,0,235,0,0,224,227,12,48,160,227,150,79,160,227,37,0,0,235,4,240,157,228,180,15,28,229, 2,0,80,227,8,0,0,202,2,0,224,227,64,48,160,227,150,79,160,227,29,0,0,235,0,0,224,227,16,48,160,227, 150,79,160,227,25,0,0,235,4,240,157,228,0,0,224,227,32,48,160,227,50,78,160,227,20,0,0,235,1,0,160,227, 12,48,160,227,150,79,160,227,16,0,0,235,4,240,157,228,180,15,28,229,3,0,112,227,14,240,160,209,176,15,28,229, 0,16,129,224,172,15,28,229,1,0,80,225,14,240,160,209,4,224,45,229,176,15,28,229,1,0,45,233,176,31,12,229, 156,0,0,235,1,0,189,232,176,15,12,229,4,240,157,228,4,224,45,229,176,95,28,229,172,111,28,229,6,0,85,225, 27,0,0,10,72,27,28,229,68,43,28,229,180,111,28,229,94,0,45,233,180,15,12,229,188,0,0,235,32,0,45,233, 184,23,159,229,184,39,159,229,72,27,12,229,68,43,12,229,53,254,255,235,4,0,133,229,8,80,149,229,0,0,85,227, 246,255,255,26,0,1,189,232,176,15,28,229,0,64,72,224,36,65,160,225,226,3,0,235,94,0,189,232,72,27,12,229, 68,43,12,229,180,111,12,229,4,0,149,229,4,64,64,224,187,0,0,235,4,240,157,228,4,224,45,229,1,16,160,227, 170,1,0,235,36,11,12,229,4,224,157,228,4,224,45,229,176,95,28,229,5,96,160,225,172,15,28,229,0,0,85,225, 6,0,0,10,64,0,45,233,53,1,0,235,64,0,189,232,0,0,80,227,4,0,149,228,4,0,134,4,245,255,255,234, 172,111,12,229,4,240,157,228,176,95,28,229,172,111,28,229,6,0,85,225,14,240,160,1,4,224,45,229,85,16,0,235, 187,0,0,235,176,95,28,229,5,96,160,225,169,0,0,235,6,0,0,26,189,0,0,235,4,0,0,26,96,0,45,233, 198,0,0,235,96,0,189,232,2,0,80,227,1,0,0,58,0,0,21,229,4,0,134,228,4,80,133,226,172,15,28,229, 0,0,85,225,240,255,255,26,172,111,12,229,4,240,157,228,180,15,28,229,3,0,112,227,70,0,0,218,176,95,28,229, 172,111,28,229,6,0,85,225,14,240,160,1,4,224,45,229,159,0,0,235,5,96,160,225,142,0,0,235,53,0,0,26, 1,0,213,229,127,0,0,226,104,22,28,229,0,1,81,225,5,0,0,26,108,22,28,229,8,0,81,227,45,0,0,42, 0,0,85,229,1,0,80,225,42,0,0,10,108,22,28,229,8,0,81,227,3,0,0,58,0,0,85,229,127,0,0,226, 0,1,81,225,35,0,0,10,64,0,45,233,58,0,0,235,64,0,189,232,31,0,0,26,0,0,85,229,8,0,80,227, 23,0,0,58,0,0,85,229,127,0,0,226,0,1,220,231,64,0,80,227,18,0,0,10,84,0,80,227,16,0,0,10, 86,0,80,227,14,0,0,10,88,0,80,227,12,0,0,10,90,0,80,227,10,0,0,10,64,0,45,233,0,48,21,229, 243,246,255,235,105,1,0,235,1,0,45,233,0,48,21,229,105,247,255,235,1,0,189,232,64,0,189,232,0,0,80,227, 6,0,0,10,96,0,45,233,124,0,0,235,96,0,189,232,3,0,80,227,1,0,0,58,0,0,21,229,4,0,134,228, 4,80,133,226,172,15,28,229,0,0,85,225,193,255,255,26,172,111,12,229,4,240,157,228,176,95,28,229,172,111,28,229, 6,0,85,225,14,240,160,1,4,224,45,229,88,0,0,235,5,96,160,225,71,0,0,235,1,0,0,10,0,0,21,229, 4,0,134,228,4,80,133,226,172,15,28,229,0,0,85,225,247,255,255,26,172,111,12,229,4,240,157,228,4,224,45,229, 236,10,28,229,0,0,80,227,22,0,0,10,0,48,21,229,199,246,255,235,236,122,28,229,7,128,140,224,36,6,24,229, 24,20,24,229,1,0,128,225,32,24,160,225,1,8,32,224,0,0,139,224,0,0,208,229,1,16,139,224,0,16,209,229, 1,0,64,224,1,0,45,233,0,48,21,229,50,247,255,235,1,0,189,232,232,26,28,229,1,0,80,225,1,0,0,218, 1,0,176,227,4,240,157,228,0,0,176,227,4,240,157,228,176,95,28,229,172,111,28,229,6,112,160,225,7,0,85,225, 3,0,0,10,4,48,149,228,12,48,134,228,4,96,6,229,249,255,255,234,0,0,160,227,4,0,6,229,172,111,12,229, 14,240,160,225,176,111,28,229,0,48,21,229,4,48,134,228,8,80,149,229,0,0,85,227,250,255,255,26,172,111,12,229, 14,240,160,225,176,111,28,229,4,0,149,229,4,0,80,225,6,0,0,186,0,0,21,229,4,0,134,228,8,80,149,229, 0,0,85,227,1,0,0,10,1,48,83,226,245,255,255,26,172,111,12,229,14,240,160,225,1,0,213,229,127,0,0,226, 64,27,28,229,0,1,81,225,7,0,0,10,10,0,64,226,0,1,81,225,2,0,0,26,0,0,85,229,0,0,80,227, 1,0,0,10,0,0,176,227,14,240,160,225,1,0,176,227,14,240,160,225,160,15,28,229,3,0,80,229,127,0,0,226, 0,1,160,225,130,15,96,226,64,11,12,229,14,240,160,225,0,0,21,229,0,1,160,225,32,20,160,225,127,15,0,226, 127,31,1,226,0,0,140,224,10,2,16,229,1,16,140,224,10,18,17,229,1,0,16,224,1,0,176,19,14,240,160,225, 4,224,45,229,0,112,85,229,8,0,87,227,13,0,0,58,32,0,45,233,127,80,7,226,5,81,160,225,234,7,0,235, 32,0,189,232,1,112,213,229,127,112,7,226,7,1,220,231,32,0,16,227,3,0,0,10,7,129,140,224,37,6,216,229, 2,0,64,226,37,6,200,229,0,48,21,229,88,246,255,235,181,0,0,235,176,0,45,233,0,96,21,229,6,97,160,225, 38,84,160,225,127,95,5,226,127,111,6,226,212,4,0,235,176,0,189,232,184,0,0,235,1,0,45,233,0,48,21,229, 197,246,255,235,0,112,85,229,8,0,87,227,13,0,0,58,32,0,45,233,127,80,7,226,5,81,160,225,178,7,0,235, 32,0,189,232,1,112,213,229,127,112,7,226,7,1,220,231,32,0,16,227,3,0,0,10,7,129,140,224,37,6,216,229, 2,0,128,226,37,6,200,229,1,0,189,232,0,112,85,229,8,0,87,227,27,0,0,58,127,112,7,226,7,129,140,224, 24,68,88,229,0,0,84,227,12,0,0,10,4,64,139,224,0,68,212,229,0,0,84,227,7,0,0,10,128,0,20,227, 1,76,68,18,4,128,136,224,0,16,88,229,0,0,81,227,251,255,255,10,32,0,17,227,0,0,0,10,1,0,128,226, 0,112,85,229,127,112,7,226,7,113,160,225,204,0,87,227,4,0,0,42,7,128,140,224,40,16,216,229,64,0,81,227, 0,0,0,26,1,0,128,226,1,112,213,229,127,112,7,226,7,17,220,231,0,0,81,227,0,0,0,10,1,0,128,226, 4,240,157,228,4,224,45,229,0,48,21,229,16,246,255,235,48,0,45,233,133,0,0,235,0,0,160,227,14,0,0,26, 72,27,28,229,68,43,28,229,176,63,28,229,172,79,28,229,30,0,45,233,176,79,12,229,36,11,28,229,83,0,0,235, 30,0,189,232,72,27,12,229,68,43,12,229,176,63,12,229,172,79,12,229,0,0,80,227,1,0,160,19,48,0,189,232, 1,0,45,233,0,48,21,229,115,246,255,235,1,0,189,232,4,240,157,228,0,16,21,229,176,111,28,229,6,0,85,225, 2,0,0,10,4,0,21,229,4,0,5,228,250,255,255,234,0,16,5,229,14,240,160,225,4,224,45,229,180,63,28,229, 3,0,115,227,2,48,224,179,8,48,131,226,0,152,131,224,72,27,28,229,1,0,80,225,5,0,0,218,68,43,28,229, 2,0,80,225,5,0,0,170,1,156,137,226,24,249,255,235,4,240,157,228,2,156,137,226,21,249,255,235,4,240,157,228, 3,156,137,226,18,249,255,235,4,240,157,228,4,224,45,229,10,128,160,227,15,249,255,235,0,0,89,227,2,0,0,10, 73,8,160,225,4,240,157,228,4,224,45,229,16,252,255,235,165,14,0,235,1,0,45,233,0,152,160,225,1,144,137,226, 10,128,160,227,2,249,255,235,1,0,189,232,4,240,157,228,4,224,45,229,234,244,255,235,183,246,255,235,234,255,255,235, 1,0,45,233,230,244,255,235,179,246,255,235,1,0,189,232,0,0,96,226,4,240,157,228,4,224,45,229,19,0,0,235, 0,0,0,234,4,224,45,229,180,31,28,229,2,0,45,233,180,15,12,229,81,0,0,235,2,0,189,232,180,31,12,229, 4,240,157,228,4,224,45,229,8,0,0,235,0,0,0,234,4,224,45,229,180,31,28,229,2,0,45,233,180,15,12,229, 77,0,0,235,2,0,189,232,180,31,12,229,4,240,157,228,180,15,28,229,0,0,128,224,0,0,160,67,1,0,128,224, 9,0,80,227,9,0,160,195,14,240,160,225,0,16,85,229,8,0,81,227,5,0,0,58,127,16,1,226,1,161,140,224, 2,112,218,229,0,16,160,227,2,16,202,229,14,240,160,225,1,112,139,224,100,121,87,229,14,240,160,225,0,16,85,229, 8,0,81,227,2,0,0,58,127,16,1,226,1,161,140,224,2,112,202,229,14,240,160,225,168,31,28,229,1,16,140,224, 36,6,17,229,22,20,81,229,32,8,145,225,14,240,160,225,164,31,28,229,1,16,140,224,34,6,17,229,24,20,81,229, 32,8,145,225,14,240,160,225,224,177,255,255,32,78,0,0,224,177,255,255,224,177,255,255,224,177,255,255,32,78,0,0, 224,177,255,255,32,78,0,0,4,224,45,229,180,159,28,229,1,0,160,227,180,15,12,229,30,0,160,227,181,15,76,229, 0,2,45,233,69,0,0,235,0,2,189,232,0,0,80,227,7,0,0,26,180,15,28,229,2,0,128,226,180,15,12,229, 9,0,80,225,245,255,255,218,180,159,12,229,0,0,160,227,4,240,157,228,180,159,12,229,4,0,160,225,4,240,157,228, 4,224,45,229,30,0,160,227,181,15,76,229,51,0,0,235,0,0,80,227,4,0,160,17,4,240,157,228,4,224,45,229, 127,244,255,235,76,246,255,235,244,255,255,235,1,0,45,233,123,244,255,235,72,246,255,235,1,0,189,232,4,240,157,228, 4,224,45,229,1,0,160,227,180,15,12,229,30,0,160,227,181,15,76,229,33,0,0,235,0,0,80,227,8,0,0,26, 180,15,28,229,2,0,128,226,180,15,12,229,15,0,80,227,247,255,255,218,0,0,160,227,32,87,159,229,0,0,5,229, 4,240,157,228,180,15,28,229,1,0,45,233,0,0,0,234,18,0,0,235,176,95,28,229,4,64,133,228,176,95,12,229, 0,0,84,227,10,0,0,10,4,48,160,225,56,245,255,235,87,0,0,235,176,95,28,229,4,64,133,228,176,95,12,229, 0,0,84,227,2,0,0,10,4,48,160,225,109,245,255,235,238,255,255,234,1,0,189,232,180,15,12,229,4,240,157,228, 180,15,28,229,1,0,80,227,154,0,0,218,4,224,45,229,103,251,255,235,0,0,160,227,32,11,12,229,176,111,28,229, 197,75,0,235,172,111,12,229,176,95,28,229,6,0,85,225,61,0,0,10,159,1,0,235,172,15,28,229,0,0,85,225, 52,0,0,42,0,48,21,229,25,245,255,235,176,31,28,229,172,47,28,229,32,59,28,229,62,0,45,233,176,47,12,229, 51,0,0,235,62,0,189,232,176,31,12,229,172,47,12,229,32,27,28,229,1,48,131,225,32,59,12,229,3,0,45,233, 0,48,21,229,132,245,255,235,3,0,189,232,0,0,80,227,17,0,0,26,0,0,81,227,13,0,0,26,4,0,149,229, 128,0,128,227,0,16,21,229,1,0,80,225,8,0,0,26,127,0,0,226,0,1,220,231,64,0,80,227,3,0,0,10, 84,0,80,227,1,0,0,10,88,0,80,227,0,0,0,26,4,80,133,226,4,80,133,226,214,255,255,234,1,0,45,233, 172,95,12,229,116,1,0,235,172,95,28,229,1,0,189,232,1,0,45,233,0,144,21,229,180,31,28,229,0,20,129,225, 9,152,129,225,6,128,160,227,33,248,255,235,1,0,189,232,0,64,21,229,4,240,157,228,32,155,28,229,180,15,92,229, 9,152,128,225,6,128,160,227,25,248,255,235,0,0,160,227,4,240,157,228,180,15,28,229,0,0,80,227,142,0,0,218, 4,224,45,229,0,0,160,227,32,11,12,229,176,111,28,229,89,92,0,235,172,111,12,229,176,95,28,229,6,0,85,225, 9,0,0,26,156,15,92,229,0,0,80,227,2,0,0,26,3,0,160,227,0,64,160,227,4,240,157,228,1,0,160,227, 32,11,12,229,0,0,160,227,4,240,157,228,0,16,160,227,4,48,160,227,0,64,160,227,3,0,0,234,172,15,28,229, 0,0,85,225,49,0,0,42,4,16,21,229,24,0,45,233,0,48,21,229,127,0,3,226,8,0,80,227,10,0,0,42, 127,0,1,226,8,0,80,227,2,0,0,42,33,4,160,225,35,4,80,225,12,0,0,10,183,0,0,235,10,0,0,10, 45,1,0,235,24,0,189,232,235,255,255,234,0,48,21,229,142,0,0,235,4,0,0,10,152,0,0,235,2,0,0,10, 4,80,133,226,24,0,189,232,227,255,255,234,0,48,21,229,228,244,255,235,176,31,28,229,172,47,28,229,54,0,45,233, 176,47,12,229,117,255,255,235,54,0,189,232,176,31,12,229,172,47,12,229,1,0,45,233,0,48,21,229,74,245,255,235, 1,0,189,232,24,0,189,232,0,0,80,227,5,0,0,10,3,0,80,225,1,0,0,42,0,48,160,225,0,64,21,229, 4,80,133,226,204,255,255,234,0,0,160,227,4,240,157,228,3,0,160,225,4,240,157,228,4,224,45,229,0,0,160,227, 32,11,12,229,176,111,28,229,59,75,0,235,172,111,12,229,176,95,28,229,6,0,85,225,53,0,0,10,172,15,28,229, 0,0,85,225,45,0,0,42,0,48,21,229,128,244,255,235,176,31,28,229,172,47,28,229,32,59,28,229,62,0,45,233, 176,47,12,229,44,0,0,235,62,0,189,232,176,31,12,229,172,47,12,229,32,27,28,229,1,48,131,225,32,59,12,229, 3,0,45,233,0,48,21,229,235,244,255,235,3,0,189,232,0,0,80,227,15,0,0,26,4,0,149,229,128,0,128,227, 0,16,21,229,1,0,80,225,8,0,0,26,127,0,0,226,0,1,220,231,64,0,80,227,3,0,0,10,84,0,80,227, 1,0,0,10,88,0,80,227,0,0,0,26,4,80,133,226,4,80,133,226,216,255,255,234,1,0,45,233,0,144,21,229, 180,31,28,229,0,20,129,225,9,152,129,225,6,128,160,227,143,247,255,235,1,0,189,232,0,64,21,229,4,240,157,228, 32,155,28,229,180,15,28,229,9,152,128,225,6,128,160,227,135,247,255,235,0,0,160,227,4,240,157,228,4,224,45,229, 0,0,160,227,32,11,12,229,11,1,0,235,36,0,0,10,76,11,28,229,0,0,80,227,14,0,0,26,156,15,92,229, 0,0,80,227,6,0,0,26,196,15,28,229,192,31,28,229,1,0,144,225,1,0,160,227,2,0,160,19,0,64,160,227, 4,240,157,228,1,0,160,227,32,11,12,229,0,0,160,227,0,64,160,227,4,240,157,228,176,111,28,229,203,91,0,235, 172,111,12,229,176,95,28,229,172,15,28,229,0,0,85,225,236,255,255,42,0,0,85,229,127,0,0,226,8,0,80,227, 3,0,0,42,44,0,0,235,5,0,0,10,162,0,0,235,244,255,255,234,17,0,0,235,1,0,0,10,4,80,133,226, 240,255,255,234,0,0,160,227,0,64,160,227,4,240,157,228,127,12,3,226,32,3,220,231,0,0,80,227,3,0,0,26, 127,0,3,226,7,1,220,231,60,0,80,227,1,0,0,26,0,0,176,227,14,240,160,225,1,0,176,227,14,240,160,225, 4,224,45,229,0,48,21,229,78,244,255,235,176,31,28,229,172,47,28,229,54,0,45,233,176,47,12,229,180,31,28,229, 2,16,129,226,180,31,12,229,43,0,0,235,180,31,28,229,2,16,65,226,180,31,12,229,54,0,189,232,176,31,12,229, 172,47,12,229,1,0,45,233,0,48,21,229,174,244,255,235,1,0,189,232,0,0,160,227,4,240,157,228,4,224,45,229, 181,15,92,229,0,0,80,227,25,0,0,218,0,48,21,229,255,48,195,227,7,48,131,227,50,244,255,235,176,31,28,229, 172,47,28,229,54,0,45,233,176,47,12,229,180,31,28,229,2,16,129,226,180,31,12,229,15,0,0,235,180,31,28,229, 2,16,65,226,180,31,12,229,54,0,189,232,176,31,12,229,172,47,12,229,1,0,45,233,0,48,21,229,255,48,195,227, 7,48,131,227,144,244,255,235,1,0,189,232,0,0,176,227,4,240,157,228,1,0,176,227,4,240,157,228,4,224,45,229, 0,0,160,227,32,11,12,229,0,64,21,229,16,0,45,233,176,111,28,229,120,74,0,235,172,111,12,229,16,0,189,232, 36,68,160,225,176,95,28,229,5,96,160,225,172,15,28,229,0,0,85,225,3,0,0,10,4,48,149,228,35,4,84,225, 4,48,134,4,248,255,255,234,172,111,12,229,4,1,220,231,32,1,160,225,7,0,0,226,24,11,12,229,176,95,28,229, 172,15,28,229,0,0,85,225,57,0,0,42,0,48,21,229,191,243,255,235,24,27,28,229,1,160,140,224,196,15,90,229, 1,0,64,226,196,15,74,229,189,15,92,229,1,0,128,226,189,15,76,229,24,11,28,229,176,31,28,229,172,47,28,229, 32,59,28,229,63,0,45,233,176,47,12,229,208,254,255,235,63,0,189,232,24,11,12,229,176,31,12,229,172,47,12,229, 32,27,28,229,1,48,131,225,32,59,12,229,24,27,28,229,1,160,140,224,196,15,90,229,1,0,128,226,196,15,74,229, 189,15,92,229,1,0,64,226,189,15,76,229,3,0,45,233,0,48,21,229,24,244,255,235,3,0,189,232,0,0,80,227, 17,0,0,26,0,0,81,227,13,0,0,26,4,0,149,229,128,0,128,227,0,16,21,229,1,0,80,225,8,0,0,26, 127,112,0,226,7,1,220,231,64,0,80,227,3,0,0,10,84,0,80,227,1,0,0,10,88,0,80,227,0,0,0,26, 4,80,133,226,4,80,133,226,196,255,255,234,1,0,176,227,4,240,157,228,0,0,176,227,4,240,157,228,0,64,21,229, 7,64,196,227,4,0,181,229,7,0,192,227,4,0,80,225,251,255,255,10,14,240,160,225,14,240,160,225,14,240,160,225, 216,38,0,224,17,0,84,227,38,0,0,218,4,224,45,229,164,0,160,225,0,64,68,224,1,0,45,233,248,255,255,235, 16,0,189,232,32,0,45,233,245,255,255,235,64,0,189,232,188,112,159,229,4,0,149,229,4,16,150,229,1,0,80,225, 8,0,0,186,8,80,135,229,4,16,150,229,5,112,160,225,8,80,149,229,0,0,85,227,12,0,0,10,4,0,149,229, 1,0,80,225,248,255,255,170,8,96,135,229,4,16,149,229,6,112,160,225,8,96,150,229,0,0,86,227,6,0,0,10, 4,0,150,229,1,0,80,225,248,255,255,170,236,255,255,234,8,96,135,229,12,91,28,229,4,240,157,228,8,80,135,229, 12,91,28,229,4,240,157,228,0,0,160,227,12,11,12,229,4,16,152,229,60,96,159,229,6,112,160,225,8,96,150,229, 0,0,86,227,2,0,0,10,4,0,150,229,1,0,80,225,248,255,255,202,8,16,160,225,8,128,152,229,8,16,135,229, 8,96,129,229,1,64,84,226,240,255,255,26,12,91,28,229,14,240,160,225,212,9,0,224,212,9,0,224,4,224,45,229, 164,95,28,229,0,0,85,227,95,0,0,10,5,112,140,224,34,6,23,229,24,68,87,229,32,8,148,225,90,0,0,10, 128,0,20,227,6,0,0,26,44,0,215,229,160,0,16,227,3,0,0,26,246,5,23,229,236,19,87,229,32,8,145,225, 81,0,0,10,64,0,20,227,6,0,0,26,40,0,215,229,160,0,16,227,3,0,0,26,250,5,23,229,240,19,87,229, 32,8,145,225,72,0,0,10,32,0,20,227,6,0,0,26,36,0,215,229,160,0,16,227,3,0,0,26,254,5,23,229, 244,19,87,229,32,8,145,225,63,0,0,10,16,0,20,227,6,0,0,26,4,0,215,229,160,0,16,227,3,0,0,26, 30,6,23,229,20,20,87,229,32,8,145,225,54,0,0,10,8,0,20,227,6,0,0,26,4,0,87,229,160,0,16,227, 3,0,0,26,38,6,23,229,28,20,87,229,32,8,145,225,45,0,0,10,4,0,20,227,6,0,0,26,36,0,87,229, 160,0,16,227,3,0,0,26,70,6,23,229,60,20,87,229,32,8,145,225,36,0,0,10,2,0,20,227,6,0,0,26, 40,0,87,229,160,0,16,227,3,0,0,26,74,6,23,229,64,20,87,229,32,8,145,225,27,0,0,10,1,0,20,227, 6,0,0,26,44,0,87,229,160,0,16,227,3,0,0,26,78,6,23,229,68,20,87,229,32,8,145,225,18,0,0,10, 71,246,255,235,80,107,28,229,1,0,118,227,12,0,0,10,6,160,140,224,36,6,26,229,22,20,90,229,32,8,129,225, 5,160,140,224,34,22,26,229,24,36,90,229,33,24,130,225,1,0,208,225,2,0,0,10,225,247,255,235,4,0,0,235, 1,0,0,26,1,0,176,227,4,240,157,228,0,0,176,227,4,240,157,228,80,107,28,229,6,160,140,224,36,6,26,229, 22,20,90,229,32,72,129,225,164,95,28,229,5,160,140,224,34,6,26,229,24,20,90,229,32,8,129,225,0,64,212,225, 99,0,0,10,1,12,20,227,3,0,0,10,6,0,140,224,187,1,208,229,0,0,80,227,95,0,0,10,2,12,20,227, 3,0,0,10,6,0,140,224,195,1,208,229,0,0,80,227,89,0,0,10,1,0,20,227,8,0,0,10,6,112,160,225, 44,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,7,0,140,224,15,2,208,229,0,0,80,227,78,0,0,10, 2,0,20,227,8,0,0,10,6,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,7,0,140,224, 15,2,208,229,0,0,80,227,67,0,0,10,4,0,20,227,8,0,0,10,6,112,160,225,36,112,71,226,7,0,220,231, 0,0,80,227,251,255,255,10,7,0,140,224,15,2,208,229,0,0,80,227,56,0,0,10,8,0,20,227,8,0,0,10, 6,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,7,0,140,224,15,2,208,229,0,0,80,227, 45,0,0,10,16,0,20,227,8,0,0,10,6,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10, 7,0,140,224,15,2,208,229,0,0,80,227,34,0,0,10,32,0,20,227,8,0,0,10,6,112,160,225,36,112,135,226, 7,0,220,231,0,0,80,227,251,255,255,10,7,0,140,224,15,2,208,229,0,0,80,227,23,0,0,10,64,0,20,227, 8,0,0,10,6,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,7,0,140,224,15,2,208,229, 0,0,80,227,12,0,0,10,128,0,20,227,8,0,0,10,6,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227, 251,255,255,10,7,0,140,224,15,2,208,229,0,0,80,227,1,0,0,10,0,0,176,227,14,240,160,225,1,0,176,227, 14,240,160,225,164,95,28,229,5,112,140,224,24,68,87,229,0,48,160,227,128,0,20,227,9,0,0,26,44,0,215,229, 160,0,16,227,6,0,0,26,246,5,23,229,236,19,87,229,32,8,145,225,2,0,0,26,5,0,143,224,136,1,144,229, 0,48,131,224,64,0,20,227,9,0,0,26,40,0,215,229,160,0,16,227,6,0,0,26,250,5,23,229,240,19,87,229, 32,8,145,225,2,0,0,26,5,0,143,224,84,1,144,229,0,48,131,224,32,0,20,227,9,0,0,26,36,0,215,229, 160,0,16,227,6,0,0,26,254,5,23,229,244,19,87,229,32,8,145,225,2,0,0,26,5,0,143,224,32,1,144,229, 0,48,131,224,16,0,20,227,9,0,0,26,4,0,215,229,160,0,16,227,6,0,0,26,30,6,23,229,20,20,87,229, 32,8,145,225,2,0,0,26,5,0,143,224,208,0,144,229,0,48,131,224,8,0,20,227,9,0,0,26,4,0,87,229, 160,0,16,227,6,0,0,26,38,6,23,229,28,20,87,229,32,8,145,225,2,0,0,26,5,0,143,224,152,0,144,229, 0,48,131,224,4,0,20,227,9,0,0,26,36,0,87,229,160,0,16,227,6,0,0,26,70,6,23,229,60,20,87,229, 32,8,145,225,2,0,0,26,5,0,143,224,72,0,144,229,0,48,131,224,2,0,20,227,9,0,0,26,40,0,87,229, 160,0,16,227,6,0,0,26,74,6,23,229,64,20,87,229,32,8,145,225,2,0,0,26,5,0,143,224,20,0,144,229, 0,48,131,224,1,0,20,227,9,0,0,26,44,0,87,229,160,0,16,227,6,0,0,26,78,6,23,229,68,20,87,229, 32,8,145,225,2,0,0,26,5,0,143,224,32,0,16,229,0,48,131,224,1,11,99,226,14,240,160,225,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0, 30,0,0,0,30,0,0,0,24,0,0,0,18,0,0,0,14,0,0,0,0,0,0,0,18,0,0,0,24,0,0,0, 30,0,0,0,40,0,0,0,40,0,0,0,40,0,0,0,30,0,0,0,24,0,0,0,18,0,0,0,0,0,0,0, 24,0,0,0,30,0,0,0,40,0,0,0,52,0,0,0,52,0,0,0,52,0,0,0,40,0,0,0,30,0,0,0, 24,0,0,0,0,0,0,0,30,0,0,0,40,0,0,0,52,0,0,0,80,0,0,0,80,0,0,0,80,0,0,0, 52,0,0,0,40,0,0,0,30,0,0,0,0,0,0,0,30,0,0,0,40,0,0,0,52,0,0,0,80,0,0,0, 80,0,0,0,80,0,0,0,52,0,0,0,40,0,0,0,30,0,0,0,0,0,0,0,30,0,0,0,40,0,0,0, 52,0,0,0,80,0,0,0,80,0,0,0,80,0,0,0,52,0,0,0,40,0,0,0,30,0,0,0,0,0,0,0, 24,0,0,0,30,0,0,0,40,0,0,0,52,0,0,0,52,0,0,0,52,0,0,0,40,0,0,0,30,0,0,0, 24,0,0,0,0,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0,40,0,0,0,40,0,0,0,40,0,0,0, 30,0,0,0,24,0,0,0,18,0,0,0,0,0,0,0,14,0,0,0,18,0,0,0,24,0,0,0,30,0,0,0, 30,0,0,0,30,0,0,0,24,0,0,0,18,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,4,224,45,229,252,106,12,229,0,123,12,229,0,0,160,227,8,11,12,229,4,11,12,229,226,2,0,235, 5,112,160,225,157,19,0,235,236,10,28,229,0,0,80,227,26,0,0,10,153,8,92,229,128,24,28,229,1,0,128,224, 0,27,28,229,0,0,81,225,20,0,0,42,236,122,28,229,7,128,140,224,36,6,216,229,37,22,216,229,1,0,64,224, 228,26,28,229,1,0,80,225,33,0,0,202,36,22,24,229,24,4,24,229,0,16,129,225,33,40,160,225,2,24,33,224, 1,16,139,224,0,16,209,229,2,32,139,224,0,32,210,229,2,16,65,224,232,10,28,229,0,0,81,225,20,0,0,202, 5,96,140,224,0,16,86,229,64,0,81,227,6,0,0,10,66,0,81,227,4,0,0,10,153,8,92,229,4,0,128,226, 0,43,28,229,0,0,82,225,11,0,0,42,30,16,1,226,13,2,214,229,0,16,129,225,129,0,143,224,48,240,144,229, 8,11,28,229,128,0,160,225,4,27,28,229,1,0,128,224,2,0,0,234,4,0,160,227,0,0,0,234,0,0,160,227, 1,0,45,233,192,2,0,235,1,0,189,232,4,240,157,228,20,85,0,0,236,85,0,0,44,85,0,0,236,85,0,0, 88,85,0,0,236,85,0,0,132,85,0,0,236,85,0,0,236,85,0,0,0,0,0,0,104,86,0,0,12,87,0,0, 0,88,0,0,164,88,0,0,152,89,0,0,0,0,0,0,40,85,0,0,72,91,0,0,40,85,0,0,72,91,0,0, 40,85,0,0,72,91,0,0,28,91,0,0,72,91,0,0,72,91,0,0,0,0,0,0,164,91,0,0,248,91,0,0, 40,85,0,0,160,92,0,0,40,85,0,0,0,0,0,0,20,85,0,0,96,91,0,0,44,85,0,0,96,91,0,0, 40,85,0,0,96,91,0,0,20,85,0,0,96,91,0,0,96,91,0,0,0,0,0,0,40,85,0,0,96,91,0,0, 76,92,0,0,204,92,0,0,40,85,0,0,0,0,0,0,40,85,0,0,140,91,0,0,40,85,0,0,140,91,0,0, 40,85,0,0,140,91,0,0,192,85,0,0,140,91,0,0,140,91,0,0,0,0,0,0,184,86,0,0,172,87,0,0, 40,85,0,0,32,93,0,0,40,85,0,0,0,0,0,0,40,85,0,0,60,86,0,0,40,85,0,0,60,86,0,0, 40,85,0,0,60,86,0,0,40,85,0,0,60,86,0,0,60,86,0,0,0,0,0,0,40,85,0,0,60,86,0,0, 80,88,0,0,68,89,0,0,40,85,0,0,0,0,0,0,0,144,86,229,30,144,9,226,2,144,137,227,137,144,139,224, 180,145,25,229,7,144,137,224,84,144,73,226,0,48,25,229,0,144,86,229,30,144,9,226,137,144,139,224,180,145,25,229, 5,144,137,224,84,144,73,226,0,0,25,229,0,48,83,224,0,48,160,51,163,50,160,225,0,0,0,234,0,48,160,227, 4,224,45,229,32,0,45,233,252,90,28,229,143,18,0,235,32,0,189,232,2,16,216,229,3,0,145,224,37,0,0,10, 155,72,92,229,4,16,129,224,0,11,28,229,0,0,81,225,32,0,0,218,0,0,86,229,64,0,80,227,2,0,0,10, 0,0,88,229,0,0,80,227,24,0,0,10,8,11,28,229,1,0,128,226,8,11,12,229,0,0,88,229,60,0,80,227, 14,0,0,10,9,2,88,229,0,0,80,227,4,0,0,26,0,0,83,227,15,0,0,10,0,11,28,229,0,0,84,225, 12,0,0,218,2,16,216,229,0,11,28,229,0,0,81,225,2,0,0,202,60,10,216,229,0,0,80,227,5,0,0,26, 8,11,28,229,1,0,128,226,8,11,12,229,4,240,157,228,1,0,160,227,4,11,12,229,4,240,157,228,204,0,87,227, 205,255,255,42,185,255,255,234,204,0,85,227,202,255,255,42,182,255,255,234,40,112,69,226,7,128,140,224,0,0,88,229, 192,0,16,227,244,255,255,11,84,255,255,234,5,112,160,225,40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227, 1,0,0,26,236,255,255,235,248,255,255,234,32,0,16,227,233,255,255,27,73,255,255,234,84,112,69,226,7,128,140,224, 0,0,88,229,192,0,16,227,227,255,255,11,76,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,222,255,255,11, 62,255,255,234,44,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,216,255,255,11,44,112,133,226,7,128,140,224, 0,0,88,229,192,0,16,227,214,255,255,11,40,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,206,255,255,11, 36,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,201,255,255,11,36,112,133,226,7,128,140,224,0,0,88,229, 192,0,16,227,199,255,255,11,36,255,255,234,44,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,142,255,255,11, 40,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,137,255,255,11,40,112,133,226,7,128,140,224,0,0,88,229, 192,0,16,227,132,255,255,11,36,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,127,255,255,11,4,112,69,226, 7,128,140,224,0,0,88,229,192,0,16,227,122,255,255,11,4,112,133,226,7,128,140,224,0,0,88,229,192,0,16,227, 117,255,255,11,5,255,255,234,5,112,160,225,44,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26, 157,255,255,235,248,255,255,234,32,0,16,227,154,255,255,27,5,112,160,225,44,112,135,226,7,128,140,224,0,0,88,229, 0,0,80,227,1,0,0,26,150,255,255,235,248,255,255,234,32,0,16,227,147,255,255,27,5,112,160,225,36,112,71,226, 7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,137,255,255,235,248,255,255,234,32,0,16,227,134,255,255,27, 5,112,160,225,36,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,130,255,255,235,248,255,255,234, 32,0,16,227,127,255,255,27,220,254,255,234,40,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,70,255,255,11, 4,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,65,255,255,11,4,112,133,226,7,128,140,224,0,0,88,229, 192,0,16,227,60,255,255,11,40,112,133,226,7,128,140,224,0,0,88,229,192,0,16,227,55,255,255,11,5,112,160,225, 44,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,48,255,255,235,248,255,255,234,32,0,16,227, 45,255,255,27,5,112,160,225,44,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,38,255,255,235, 248,255,255,234,32,0,16,227,35,255,255,27,5,112,160,225,36,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227, 1,0,0,26,28,255,255,235,248,255,255,234,32,0,16,227,25,255,255,27,5,112,160,225,36,112,135,226,7,128,140,224, 0,0,88,229,0,0,80,227,1,0,0,26,18,255,255,235,248,255,255,234,32,0,16,227,15,255,255,27,159,254,255,234, 5,112,160,225,40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,55,255,255,235,248,255,255,234, 32,0,16,227,52,255,255,27,5,112,160,225,40,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26, 48,255,255,235,248,255,255,234,32,0,16,227,45,255,255,27,5,112,160,225,4,112,71,226,7,128,140,224,0,0,88,229, 0,0,80,227,1,0,0,26,35,255,255,235,248,255,255,234,32,0,16,227,32,255,255,27,5,112,160,225,4,112,135,226, 7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,28,255,255,235,248,255,255,234,32,0,16,227,25,255,255,27, 118,254,255,234,44,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,224,254,255,11,36,112,69,226,7,128,140,224, 0,0,88,229,192,0,16,227,219,254,255,11,36,112,133,226,7,128,140,224,0,0,88,229,192,0,16,227,214,254,255,11, 44,112,133,226,7,128,140,224,0,0,88,229,192,0,16,227,209,254,255,11,5,112,160,225,40,112,71,226,7,128,140,224, 0,0,88,229,0,0,80,227,1,0,0,26,202,254,255,235,248,255,255,234,32,0,16,227,199,254,255,27,5,112,160,225, 40,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,192,254,255,235,248,255,255,234,32,0,16,227, 189,254,255,27,5,112,160,225,4,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,182,254,255,235, 248,255,255,234,32,0,16,227,179,254,255,27,5,112,160,225,4,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227, 1,0,0,26,172,254,255,235,248,255,255,234,32,0,16,227,169,254,255,27,57,254,255,234,22,4,86,229,128,0,16,227, 8,0,0,26,44,112,69,226,7,128,140,224,0,16,88,229,192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229, 32,24,145,225,156,254,255,11,22,4,86,229,64,0,16,227,8,0,0,26,40,112,69,226,7,128,140,224,0,16,88,229, 192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229,32,24,145,225,144,254,255,11,22,4,86,229,32,0,16,227, 8,0,0,26,36,112,69,226,7,128,140,224,0,16,88,229,192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229, 32,24,145,225,132,254,255,11,22,4,86,229,16,0,16,227,8,0,0,26,4,112,69,226,7,128,140,224,0,16,88,229, 192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229,32,24,145,225,120,254,255,11,22,4,86,229,8,0,16,227, 8,0,0,26,4,112,133,226,7,128,140,224,0,16,88,229,192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229, 32,24,145,225,108,254,255,11,22,4,86,229,4,0,16,227,8,0,0,26,36,112,133,226,7,128,140,224,0,16,88,229, 192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229,32,24,145,225,96,254,255,11,22,4,86,229,2,0,16,227, 8,0,0,26,40,112,133,226,7,128,140,224,0,16,88,229,192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229, 32,24,145,225,84,254,255,11,22,4,86,229,1,0,16,227,8,0,0,26,44,112,133,226,7,128,140,224,0,16,88,229, 192,16,1,226,22,4,88,229,0,16,129,225,36,6,88,229,32,24,145,225,72,254,255,11,216,253,255,234,44,112,69,226, 7,128,140,224,0,0,88,229,192,0,16,227,114,254,255,11,44,112,133,226,7,128,140,224,0,0,88,229,192,0,16,227, 112,254,255,11,205,253,255,234,44,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,55,254,255,11,199,253,255,234, 40,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,49,254,255,11,40,112,133,226,7,128,140,224,0,0,88,229, 192,0,16,227,44,254,255,11,188,253,255,234,36,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,38,254,255,11, 182,253,255,234,5,112,160,225,44,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,78,254,255,235, 248,255,255,234,32,0,16,227,75,254,255,27,5,112,160,225,44,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227, 1,0,0,26,71,254,255,235,248,255,255,234,32,0,16,227,68,254,255,27,161,253,255,234,5,112,160,225,44,112,71,226, 7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,9,254,255,235,248,255,255,234,32,0,16,227,6,254,255,27, 5,112,160,225,44,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,1,0,0,26,255,253,255,235,248,255,255,234, 32,0,16,227,252,253,255,27,140,253,255,234,5,112,160,225,40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227, 1,0,0,26,36,254,255,235,248,255,255,234,32,0,16,227,33,254,255,27,5,112,160,225,40,112,135,226,7,128,140,224, 0,0,88,229,0,0,80,227,1,0,0,26,29,254,255,235,248,255,255,234,32,0,16,227,26,254,255,27,119,253,255,234, 44,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,225,253,255,11,44,112,133,226,7,128,140,224,0,0,88,229, 192,0,16,227,220,253,255,11,108,253,255,234,5,112,160,225,40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227, 1,0,0,26,212,253,255,235,248,255,255,234,32,0,16,227,209,253,255,27,5,112,160,225,40,112,135,226,7,128,140,224, 0,0,88,229,0,0,80,227,1,0,0,26,202,253,255,235,248,255,255,234,32,0,16,227,199,253,255,27,87,253,255,234, 36,112,69,226,7,128,140,224,0,0,88,229,192,0,16,227,193,253,255,11,36,112,133,226,7,128,140,224,0,0,88,229, 192,0,16,227,188,253,255,11,76,253,255,234,5,96,140,224,0,0,86,229,0,0,80,227,18,0,0,10,32,0,16,227, 8,0,0,26,30,0,0,226,13,18,214,229,1,0,128,225,128,0,143,224,148,240,144,229,36,6,214,229,2,0,128,226, 36,6,198,229,14,240,160,225,30,0,0,226,15,18,214,229,1,0,128,225,128,0,143,224,176,241,144,229,37,6,214,229, 2,0,128,226,37,6,198,229,14,240,160,225,5,96,140,224,0,0,86,229,0,0,80,227,18,0,0,10,32,0,16,227, 8,0,0,26,30,0,0,226,13,18,214,229,1,0,128,225,128,0,143,224,180,242,144,229,36,6,214,229,2,0,64,226, 36,6,198,229,14,240,160,225,30,0,0,226,15,18,214,229,1,0,128,225,128,0,143,224,208,243,144,229,37,6,214,229, 2,0,64,226,37,6,198,229,14,240,160,225,12,99,0,0,204,99,0,0,28,99,0,0,204,99,0,0,112,99,0,0, 204,99,0,0,140,99,0,0,204,99,0,0,204,99,0,0,0,0,0,0,72,100,0,0,24,100,0,0,188,101,0,0, 140,101,0,0,160,104,0,0,0,0,0,0,24,99,0,0,28,103,0,0,24,99,0,0,28,103,0,0,24,99,0,0, 28,103,0,0,0,103,0,0,28,103,0,0,28,103,0,0,0,0,0,0,88,103,0,0,88,103,0,0,24,99,0,0, 0,103,0,0,24,99,0,0,0,0,0,0,12,99,0,0,44,103,0,0,28,99,0,0,44,103,0,0,24,99,0,0, 44,103,0,0,12,99,0,0,44,103,0,0,44,103,0,0,0,0,0,0,24,99,0,0,44,103,0,0,252,103,0,0, 252,103,0,0,24,99,0,0,0,0,0,0,24,99,0,0,72,103,0,0,24,99,0,0,72,103,0,0,24,99,0,0, 72,103,0,0,176,99,0,0,72,103,0,0,72,103,0,0,0,0,0,0,232,100,0,0,232,100,0,0,24,99,0,0, 176,99,0,0,24,99,0,0,0,0,0,0,24,99,0,0,252,99,0,0,24,99,0,0,252,99,0,0,24,99,0,0, 252,99,0,0,24,99,0,0,252,99,0,0,252,99,0,0,0,0,0,0,24,99,0,0,252,99,0,0,92,102,0,0, 92,102,0,0,24,99,0,0,0,0,0,0,4,105,0,0,196,105,0,0,20,105,0,0,196,105,0,0,104,105,0,0, 196,105,0,0,132,105,0,0,196,105,0,0,196,105,0,0,0,0,0,0,64,106,0,0,16,106,0,0,180,107,0,0, 132,107,0,0,152,110,0,0,0,0,0,0,16,105,0,0,20,109,0,0,16,105,0,0,20,109,0,0,16,105,0,0, 20,109,0,0,248,108,0,0,20,109,0,0,20,109,0,0,0,0,0,0,80,109,0,0,80,109,0,0,16,105,0,0, 248,108,0,0,16,105,0,0,0,0,0,0,4,105,0,0,36,109,0,0,20,105,0,0,36,109,0,0,16,105,0,0, 36,109,0,0,4,105,0,0,36,109,0,0,36,109,0,0,0,0,0,0,16,105,0,0,36,109,0,0,244,109,0,0, 244,109,0,0,16,105,0,0,0,0,0,0,16,105,0,0,64,109,0,0,16,105,0,0,64,109,0,0,16,105,0,0, 64,109,0,0,168,105,0,0,64,109,0,0,64,109,0,0,0,0,0,0,224,106,0,0,224,106,0,0,16,105,0,0, 168,105,0,0,16,105,0,0,0,0,0,0,16,105,0,0,244,105,0,0,16,105,0,0,244,105,0,0,16,105,0,0, 244,105,0,0,16,105,0,0,244,105,0,0,244,105,0,0,0,0,0,0,16,105,0,0,244,105,0,0,84,108,0,0, 84,108,0,0,16,105,0,0,0,0,0,0,252,110,0,0,188,111,0,0,12,111,0,0,188,111,0,0,96,111,0,0, 188,111,0,0,124,111,0,0,188,111,0,0,188,111,0,0,0,0,0,0,56,112,0,0,8,112,0,0,172,113,0,0, 124,113,0,0,144,116,0,0,0,0,0,0,8,111,0,0,12,115,0,0,8,111,0,0,12,115,0,0,8,111,0,0, 12,115,0,0,240,114,0,0,12,115,0,0,12,115,0,0,0,0,0,0,72,115,0,0,72,115,0,0,8,111,0,0, 240,114,0,0,8,111,0,0,0,0,0,0,252,110,0,0,28,115,0,0,12,111,0,0,28,115,0,0,8,111,0,0, 28,115,0,0,252,110,0,0,28,115,0,0,28,115,0,0,0,0,0,0,8,111,0,0,28,115,0,0,236,115,0,0, 236,115,0,0,8,111,0,0,0,0,0,0,8,111,0,0,56,115,0,0,8,111,0,0,56,115,0,0,8,111,0,0, 56,115,0,0,160,111,0,0,56,115,0,0,56,115,0,0,0,0,0,0,216,112,0,0,216,112,0,0,8,111,0,0, 160,111,0,0,8,111,0,0,0,0,0,0,8,111,0,0,236,111,0,0,8,111,0,0,236,111,0,0,8,111,0,0, 236,111,0,0,8,111,0,0,236,111,0,0,236,111,0,0,0,0,0,0,8,111,0,0,236,111,0,0,76,114,0,0, 76,114,0,0,8,111,0,0,0,0,0,0,244,116,0,0,180,117,0,0,4,117,0,0,180,117,0,0,88,117,0,0, 180,117,0,0,116,117,0,0,180,117,0,0,180,117,0,0,0,0,0,0,48,118,0,0,0,118,0,0,164,119,0,0, 116,119,0,0,136,122,0,0,0,0,0,0,0,117,0,0,4,121,0,0,0,117,0,0,4,121,0,0,0,117,0,0, 4,121,0,0,232,120,0,0,4,121,0,0,4,121,0,0,0,0,0,0,64,121,0,0,64,121,0,0,0,117,0,0, 232,120,0,0,0,117,0,0,0,0,0,0,244,116,0,0,20,121,0,0,4,117,0,0,20,121,0,0,0,117,0,0, 20,121,0,0,244,116,0,0,20,121,0,0,20,121,0,0,0,0,0,0,0,117,0,0,20,121,0,0,228,121,0,0, 228,121,0,0,0,117,0,0,0,0,0,0,0,117,0,0,48,121,0,0,0,117,0,0,48,121,0,0,0,117,0,0, 48,121,0,0,152,117,0,0,48,121,0,0,48,121,0,0,0,0,0,0,208,118,0,0,208,118,0,0,0,117,0,0, 152,117,0,0,0,117,0,0,0,0,0,0,0,117,0,0,228,117,0,0,0,117,0,0,228,117,0,0,0,117,0,0, 228,117,0,0,0,117,0,0,228,117,0,0,228,117,0,0,0,0,0,0,0,117,0,0,228,117,0,0,68,120,0,0, 68,120,0,0,0,117,0,0,0,0,0,0,252,5,214,229,3,0,128,226,252,5,198,229,150,254,255,234,5,112,160,225, 40,112,71,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 252,5,216,229,3,0,128,226,252,5,200,229,129,254,255,234,208,5,214,229,3,0,128,226,208,5,198,229,216,5,214,229, 3,0,128,226,216,5,198,229,122,254,255,234,248,5,214,229,3,0,128,226,248,5,198,229,80,6,214,229,3,0,128,226, 80,6,198,229,252,5,214,229,3,0,128,226,252,5,198,229,0,6,214,229,3,0,128,226,0,6,198,229,72,6,214,229, 3,0,128,226,72,6,198,229,106,254,255,234,248,5,214,229,3,0,128,226,248,5,198,229,252,5,214,229,3,0,128,226, 252,5,198,229,76,6,214,229,3,0,128,226,76,6,198,229,0,6,214,229,3,0,128,226,0,6,198,229,32,6,214,229, 3,0,128,226,32,6,198,229,40,6,214,229,3,0,128,226,40,6,198,229,87,254,255,234,252,5,214,229,3,0,128,226, 252,5,198,229,76,6,214,229,3,0,128,226,76,6,198,229,32,6,214,229,3,0,128,226,32,6,198,229,40,6,214,229, 3,0,128,226,40,6,198,229,5,112,160,225,44,112,71,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229, 0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229, 1,0,80,227,3,0,0,186,239,255,255,26,248,5,216,229,3,0,128,226,248,5,200,229,5,112,160,225,44,112,135,226, 7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227, 8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,80,6,216,229, 3,0,128,226,80,6,200,229,5,112,160,225,36,112,71,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229, 0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229, 1,0,80,227,3,0,0,186,239,255,255,26,0,6,216,229,3,0,128,226,0,6,200,229,5,112,160,225,36,112,135,226, 7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227, 8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,72,6,216,229, 3,0,128,226,72,6,200,229,250,253,255,234,248,5,214,229,3,0,128,226,248,5,198,229,80,6,214,229,3,0,128,226, 80,6,198,229,0,6,214,229,3,0,128,226,0,6,198,229,72,6,214,229,3,0,128,226,72,6,198,229,5,112,160,225, 40,112,71,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 252,5,216,229,3,0,128,226,252,5,200,229,5,112,160,225,40,112,135,226,7,128,140,224,36,6,216,229,3,0,128,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,76,6,216,229,3,0,128,226,76,6,200,229,5,112,160,225, 4,112,71,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 32,6,216,229,3,0,128,226,32,6,200,229,5,112,160,225,4,112,135,226,7,128,140,224,36,6,216,229,3,0,128,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,40,6,216,229,3,0,128,226,40,6,200,229,157,253,255,234, 248,5,214,229,3,0,128,226,248,5,198,229,80,6,214,229,3,0,128,226,80,6,198,229,150,253,255,234,248,5,214,229, 3,0,128,226,248,5,198,229,146,253,255,234,252,5,214,229,3,0,128,226,252,5,198,229,76,6,214,229,3,0,128,226, 76,6,198,229,139,253,255,234,0,6,214,229,3,0,128,226,0,6,198,229,135,253,255,234,5,112,160,225,44,112,71,226, 7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227, 8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,248,5,216,229, 3,0,128,226,248,5,200,229,5,112,160,225,44,112,135,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229, 0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229, 1,0,80,227,3,0,0,186,239,255,255,26,80,6,216,229,3,0,128,226,80,6,200,229,94,253,255,234,5,112,160,225, 40,112,71,226,7,128,140,224,36,6,216,229,3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 252,5,216,229,3,0,128,226,252,5,200,229,5,112,160,225,40,112,135,226,7,128,140,224,36,6,216,229,3,0,128,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,76,6,216,229,3,0,128,226,76,6,200,229,53,253,255,234, 248,5,214,229,3,0,128,226,248,5,198,229,252,5,214,229,3,0,128,226,252,5,198,229,0,6,214,229,3,0,128,226, 0,6,198,229,32,6,214,229,3,0,128,226,32,6,198,229,40,6,214,229,3,0,128,226,40,6,198,229,72,6,214,229, 3,0,128,226,72,6,198,229,76,6,214,229,3,0,128,226,76,6,198,229,80,6,214,229,3,0,128,226,80,6,198,229, 28,253,255,234,77,6,214,229,3,0,128,226,77,6,198,229,33,253,255,234,5,112,160,225,40,112,135,226,7,128,140,224, 37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,77,6,216,229,3,0,128,226, 77,6,200,229,12,253,255,234,121,6,214,229,3,0,128,226,121,6,198,229,113,6,214,229,3,0,128,226,113,6,198,229, 5,253,255,234,81,6,214,229,3,0,128,226,81,6,198,229,249,5,214,229,3,0,128,226,249,5,198,229,77,6,214,229, 3,0,128,226,77,6,198,229,73,6,214,229,3,0,128,226,73,6,198,229,1,6,214,229,3,0,128,226,1,6,198,229, 245,252,255,234,81,6,214,229,3,0,128,226,81,6,198,229,77,6,214,229,3,0,128,226,77,6,198,229,253,5,214,229, 3,0,128,226,253,5,198,229,73,6,214,229,3,0,128,226,73,6,198,229,41,6,214,229,3,0,128,226,41,6,198,229, 33,6,214,229,3,0,128,226,33,6,198,229,226,252,255,234,77,6,214,229,3,0,128,226,77,6,198,229,253,5,214,229, 3,0,128,226,253,5,198,229,41,6,214,229,3,0,128,226,41,6,198,229,33,6,214,229,3,0,128,226,33,6,198,229, 5,112,160,225,44,112,135,226,7,128,140,224,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227, 247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186, 239,255,255,26,81,6,216,229,3,0,128,226,81,6,200,229,5,112,160,225,44,112,71,226,7,128,140,224,37,6,216,229, 3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226, 129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,249,5,216,229,3,0,128,226,249,5,200,229, 5,112,160,225,36,112,135,226,7,128,140,224,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227, 247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186, 239,255,255,26,73,6,216,229,3,0,128,226,73,6,200,229,5,112,160,225,36,112,71,226,7,128,140,224,37,6,216,229, 3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226, 129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,1,6,216,229,3,0,128,226,1,6,200,229, 133,252,255,234,81,6,214,229,3,0,128,226,81,6,198,229,249,5,214,229,3,0,128,226,249,5,198,229,73,6,214,229, 3,0,128,226,73,6,198,229,1,6,214,229,3,0,128,226,1,6,198,229,5,112,160,225,40,112,135,226,7,128,140,224, 37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,77,6,216,229,3,0,128,226, 77,6,200,229,5,112,160,225,40,112,71,226,7,128,140,224,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,253,5,216,229,3,0,128,226,253,5,200,229,5,112,160,225,4,112,135,226,7,128,140,224, 37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,41,6,216,229,3,0,128,226, 41,6,200,229,5,112,160,225,4,112,71,226,7,128,140,224,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,4,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,33,6,216,229,3,0,128,226,33,6,200,229,40,252,255,234,81,6,214,229,3,0,128,226, 81,6,198,229,249,5,214,229,3,0,128,226,249,5,198,229,33,252,255,234,81,6,214,229,3,0,128,226,81,6,198,229, 29,252,255,234,77,6,214,229,3,0,128,226,77,6,198,229,253,5,214,229,3,0,128,226,253,5,198,229,22,252,255,234, 73,6,214,229,3,0,128,226,73,6,198,229,18,252,255,234,5,112,160,225,44,112,135,226,7,128,140,224,37,6,216,229, 3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226, 129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,81,6,216,229,3,0,128,226,81,6,200,229, 5,112,160,225,44,112,71,226,7,128,140,224,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227, 247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186, 239,255,255,26,249,5,216,229,3,0,128,226,249,5,200,229,233,251,255,234,5,112,160,225,40,112,135,226,7,128,140,224, 37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,77,6,216,229,3,0,128,226, 77,6,200,229,5,112,160,225,40,112,71,226,7,128,140,224,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,253,5,216,229,3,0,128,226,253,5,200,229,192,251,255,234,81,6,214,229,3,0,128,226, 81,6,198,229,77,6,214,229,3,0,128,226,77,6,198,229,73,6,214,229,3,0,128,226,73,6,198,229,41,6,214,229, 3,0,128,226,41,6,198,229,33,6,214,229,3,0,128,226,33,6,198,229,1,6,214,229,3,0,128,226,1,6,198,229, 253,5,214,229,3,0,128,226,253,5,198,229,249,5,214,229,3,0,128,226,249,5,198,229,167,251,255,234,252,5,214,229, 3,0,64,226,252,5,198,229,178,251,255,234,5,112,160,225,40,112,71,226,7,128,140,224,36,6,216,229,3,0,64,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26,252,5,216,229,3,0,64,226,252,5,200,229,157,251,255,234, 208,5,214,229,3,0,64,226,208,5,198,229,216,5,214,229,3,0,64,226,216,5,198,229,150,251,255,234,248,5,214,229, 3,0,64,226,248,5,198,229,80,6,214,229,3,0,64,226,80,6,198,229,252,5,214,229,3,0,64,226,252,5,198,229, 0,6,214,229,3,0,64,226,0,6,198,229,72,6,214,229,3,0,64,226,72,6,198,229,134,251,255,234,248,5,214,229, 3,0,64,226,248,5,198,229,252,5,214,229,3,0,64,226,252,5,198,229,76,6,214,229,3,0,64,226,76,6,198,229, 0,6,214,229,3,0,64,226,0,6,198,229,32,6,214,229,3,0,64,226,32,6,198,229,40,6,214,229,3,0,64,226, 40,6,198,229,115,251,255,234,252,5,214,229,3,0,64,226,252,5,198,229,76,6,214,229,3,0,64,226,76,6,198,229, 32,6,214,229,3,0,64,226,32,6,198,229,40,6,214,229,3,0,64,226,40,6,198,229,5,112,160,225,44,112,71,226, 7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227, 8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,248,5,216,229, 3,0,64,226,248,5,200,229,5,112,160,225,44,112,135,226,7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229, 0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229, 1,0,80,227,3,0,0,186,239,255,255,26,80,6,216,229,3,0,64,226,80,6,200,229,5,112,160,225,36,112,71,226, 7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227, 8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,0,6,216,229, 3,0,64,226,0,6,200,229,5,112,160,225,36,112,135,226,7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229, 0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229, 1,0,80,227,3,0,0,186,239,255,255,26,72,6,216,229,3,0,64,226,72,6,200,229,22,251,255,234,248,5,214,229, 3,0,64,226,248,5,198,229,80,6,214,229,3,0,64,226,80,6,198,229,0,6,214,229,3,0,64,226,0,6,198,229, 72,6,214,229,3,0,64,226,72,6,198,229,5,112,160,225,40,112,71,226,7,128,140,224,36,6,216,229,3,0,64,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26,252,5,216,229,3,0,64,226,252,5,200,229,5,112,160,225, 40,112,135,226,7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 76,6,216,229,3,0,64,226,76,6,200,229,5,112,160,225,4,112,71,226,7,128,140,224,36,6,216,229,3,0,64,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,32,6,216,229,3,0,64,226,32,6,200,229,5,112,160,225, 4,112,135,226,7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 40,6,216,229,3,0,64,226,40,6,200,229,185,250,255,234,248,5,214,229,3,0,64,226,248,5,198,229,80,6,214,229, 3,0,64,226,80,6,198,229,178,250,255,234,248,5,214,229,3,0,64,226,248,5,198,229,174,250,255,234,252,5,214,229, 3,0,64,226,252,5,198,229,76,6,214,229,3,0,64,226,76,6,198,229,167,250,255,234,0,6,214,229,3,0,64,226, 0,6,198,229,163,250,255,234,5,112,160,225,44,112,71,226,7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229, 0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229, 1,0,80,227,3,0,0,186,239,255,255,26,248,5,216,229,3,0,64,226,248,5,200,229,5,112,160,225,44,112,135,226, 7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227, 8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,80,6,216,229, 3,0,64,226,80,6,200,229,122,250,255,234,5,112,160,225,40,112,71,226,7,128,140,224,36,6,216,229,3,0,64,226, 36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224, 52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26,252,5,216,229,3,0,64,226,252,5,200,229,5,112,160,225, 40,112,135,226,7,128,140,224,36,6,216,229,3,0,64,226,36,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10, 128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26, 76,6,216,229,3,0,64,226,76,6,200,229,81,250,255,234,248,5,214,229,3,0,64,226,248,5,198,229,252,5,214,229, 3,0,64,226,252,5,198,229,0,6,214,229,3,0,64,226,0,6,198,229,32,6,214,229,3,0,64,226,32,6,198,229, 40,6,214,229,3,0,64,226,40,6,198,229,72,6,214,229,3,0,64,226,72,6,198,229,76,6,214,229,3,0,64,226, 76,6,198,229,80,6,214,229,3,0,64,226,80,6,198,229,56,250,255,234,77,6,214,229,3,0,64,226,77,6,198,229, 61,250,255,234,5,112,160,225,40,112,135,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,77,6,216,229,3,0,64,226,77,6,200,229,40,250,255,234,121,6,214,229,3,0,64,226, 121,6,198,229,113,6,214,229,3,0,64,226,113,6,198,229,33,250,255,234,81,6,214,229,3,0,64,226,81,6,198,229, 249,5,214,229,3,0,64,226,249,5,198,229,77,6,214,229,3,0,64,226,77,6,198,229,73,6,214,229,3,0,64,226, 73,6,198,229,1,6,214,229,3,0,64,226,1,6,198,229,17,250,255,234,81,6,214,229,3,0,64,226,81,6,198,229, 77,6,214,229,3,0,64,226,77,6,198,229,253,5,214,229,3,0,64,226,253,5,198,229,73,6,214,229,3,0,64,226, 73,6,198,229,41,6,214,229,3,0,64,226,41,6,198,229,33,6,214,229,3,0,64,226,33,6,198,229,254,249,255,234, 77,6,214,229,3,0,64,226,77,6,198,229,253,5,214,229,3,0,64,226,253,5,198,229,41,6,214,229,3,0,64,226, 41,6,198,229,33,6,214,229,3,0,64,226,33,6,198,229,5,112,160,225,44,112,135,226,7,128,140,224,37,6,216,229, 3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226, 129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,81,6,216,229,3,0,64,226,81,6,200,229, 5,112,160,225,44,112,71,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227, 247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186, 239,255,255,26,249,5,216,229,3,0,64,226,249,5,200,229,5,112,160,225,36,112,135,226,7,128,140,224,37,6,216,229, 3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226, 129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186,239,255,255,26,73,6,216,229,3,0,64,226,73,6,200,229, 5,112,160,225,36,112,71,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227, 247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186, 239,255,255,26,1,6,216,229,3,0,64,226,1,6,200,229,161,249,255,234,81,6,214,229,3,0,64,226,81,6,198,229, 249,5,214,229,3,0,64,226,249,5,198,229,73,6,214,229,3,0,64,226,73,6,198,229,1,6,214,229,3,0,64,226, 1,6,198,229,5,112,160,225,40,112,135,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,77,6,216,229,3,0,64,226,77,6,200,229,5,112,160,225,40,112,71,226,7,128,140,224, 37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26,253,5,216,229,3,0,64,226, 253,5,200,229,5,112,160,225,4,112,135,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,4,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,41,6,216,229,3,0,64,226,41,6,200,229,5,112,160,225,4,112,71,226,7,128,140,224, 37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,33,6,216,229,3,0,64,226, 33,6,200,229,68,249,255,234,81,6,214,229,3,0,64,226,81,6,198,229,249,5,214,229,3,0,64,226,249,5,198,229, 61,249,255,234,81,6,214,229,3,0,64,226,81,6,198,229,57,249,255,234,77,6,214,229,3,0,64,226,77,6,198,229, 253,5,214,229,3,0,64,226,253,5,198,229,50,249,255,234,73,6,214,229,3,0,64,226,73,6,198,229,46,249,255,234, 5,112,160,225,44,112,135,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227, 247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,180,3,16,229,1,0,80,227,3,0,0,186, 239,255,255,26,81,6,216,229,3,0,64,226,81,6,200,229,5,112,160,225,44,112,71,226,7,128,140,224,37,6,216,229, 3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226, 129,0,139,224,180,4,16,229,1,0,80,227,3,0,0,186,239,255,255,26,249,5,216,229,3,0,64,226,249,5,200,229, 5,249,255,234,5,112,160,225,40,112,135,226,7,128,140,224,37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229, 0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26,62,16,1,226,129,0,139,224,52,3,16,229,1,0,80,227, 3,0,0,186,239,255,255,26,77,6,216,229,3,0,64,226,77,6,200,229,5,112,160,225,40,112,71,226,7,128,140,224, 37,6,216,229,3,0,64,226,37,6,200,229,0,16,88,229,0,0,81,227,247,255,255,10,128,0,17,227,8,0,0,26, 62,16,1,226,129,0,139,224,52,5,16,229,1,0,80,227,3,0,0,186,239,255,255,26,253,5,216,229,3,0,64,226, 253,5,200,229,220,248,255,234,81,6,214,229,3,0,64,226,81,6,198,229,77,6,214,229,3,0,64,226,77,6,198,229, 73,6,214,229,3,0,64,226,73,6,198,229,41,6,214,229,3,0,64,226,41,6,198,229,33,6,214,229,3,0,64,226, 33,6,198,229,1,6,214,229,3,0,64,226,1,6,198,229,253,5,214,229,3,0,64,226,253,5,198,229,249,5,214,229, 3,0,64,226,249,5,198,229,195,248,255,234,0,0,160,227,108,6,12,229,104,6,12,229,64,11,12,229,236,10,12,229, 4,224,45,229,0,0,160,227,240,10,12,229,248,10,28,229,1,0,128,226,248,10,12,229,0,0,160,227,224,10,12,229, 220,10,12,229,216,10,12,229,212,10,12,229,208,10,12,229,204,10,12,229,200,10,12,229,196,10,12,229,192,10,12,229, 188,10,12,229,184,10,12,229,91,0,0,235,25,235,255,235,19,236,255,235,77,234,255,235,241,28,0,235,233,1,0,235, 119,5,0,235,132,33,0,235,230,1,0,235,162,7,0,235,86,9,0,235,104,9,0,235,30,16,0,235,200,29,0,235, 147,41,0,235,137,48,0,235,139,55,0,235,6,30,0,235,164,32,0,235,47,0,0,235,1,0,0,235,180,10,28,229, 4,240,157,228,8,81,159,229,8,97,159,229,0,0,160,227,10,144,160,227,4,16,149,228,4,32,150,228,145,2,3,224, 3,0,128,224,1,144,89,226,249,255,255,26,64,50,160,225,16,48,131,226,180,58,12,229,4,16,149,228,4,32,150,228, 145,2,3,224,3,0,128,224,64,50,160,225,16,48,131,226,176,58,12,229,14,240,160,225,4,224,45,229,0,0,160,227, 108,6,12,229,104,6,12,229,64,11,12,229,236,10,12,229,1,0,160,227,240,10,12,229,39,0,0,235,229,234,255,235, 223,235,255,235,190,28,0,235,182,1,0,235,68,5,0,235,81,33,0,235,179,1,0,235,111,7,0,235,35,9,0,235, 53,9,0,235,235,15,0,235,97,41,0,235,87,48,0,235,0,0,0,235,4,240,157,228,0,0,160,227,232,10,12,229, 228,10,12,229,236,90,28,229,0,0,85,227,14,240,160,1,5,160,140,224,36,22,218,229,37,38,218,229,2,16,65,224, 228,26,12,229,36,22,26,229,24,36,26,229,2,16,129,225,33,40,160,225,2,24,33,224,1,16,139,224,0,16,209,229, 2,32,139,224,0,32,210,229,2,16,65,224,232,26,12,229,14,240,160,225,8,10,0,224,108,207,1,0,56,86,159,229, 0,0,160,227,131,144,160,227,4,0,133,228,1,144,89,226,252,255,255,26,36,86,159,229,36,102,159,229,131,144,160,227, 4,0,213,228,4,0,198,228,1,144,89,226,251,255,255,26,168,95,28,229,5,80,139,224,236,86,21,229,5,96,140,224, 0,0,214,229,128,0,16,227,5,0,0,26,1,0,214,229,28,0,80,227,2,0,0,170,84,0,128,226,32,1,160,225, 1,0,198,229,44,0,86,229,128,0,16,227,5,0,0,26,43,0,86,229,28,0,80,227,2,0,0,170,84,0,128,226, 32,1,160,225,43,0,70,229,40,0,86,229,128,0,16,227,5,0,0,26,39,0,86,229,28,0,80,227,2,0,0,170, 84,0,128,226,32,1,160,225,39,0,70,229,36,0,86,229,128,0,16,227,5,0,0,26,35,0,86,229,28,0,80,227, 2,0,0,170,84,0,128,226,32,1,160,225,35,0,70,229,4,0,86,229,128,0,16,227,5,0,0,26,3,0,86,229, 24,0,80,227,2,0,0,170,72,0,128,226,32,1,160,225,3,0,70,229,4,0,214,229,128,0,16,227,5,0,0,26, 5,0,214,229,24,0,80,227,2,0,0,170,72,0,128,226,32,1,160,225,5,0,198,229,36,0,214,229,128,0,16,227, 5,0,0,26,37,0,214,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225,37,0,198,229,40,0,214,229, 128,0,16,227,5,0,0,26,41,0,214,229,21,0,80,227,2,0,0,170,63,0,128,226,32,1,160,225,41,0,198,229, 44,0,214,229,128,0,16,227,5,0,0,26,45,0,214,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225, 45,0,198,229,84,0,86,229,128,0,16,227,8,0,0,26,44,0,86,229,128,0,16,227,5,0,0,26,83,0,86,229, 23,0,80,227,2,0,0,170,69,0,128,226,32,1,160,225,83,0,70,229,80,0,86,229,128,0,16,227,8,0,0,26, 40,0,86,229,128,0,16,227,5,0,0,26,79,0,86,229,23,0,80,227,2,0,0,170,69,0,128,226,32,1,160,225, 79,0,70,229,76,0,86,229,128,0,16,227,8,0,0,26,36,0,86,229,128,0,16,227,5,0,0,26,75,0,86,229, 23,0,80,227,2,0,0,170,69,0,128,226,32,1,160,225,75,0,70,229,48,0,86,229,128,0,16,227,8,0,0,26, 44,0,86,229,128,0,16,227,5,0,0,26,47,0,86,229,22,0,80,227,2,0,0,170,66,0,128,226,32,1,160,225, 47,0,70,229,32,0,86,229,128,0,16,227,8,0,0,26,36,0,86,229,128,0,16,227,5,0,0,26,31,0,86,229, 22,0,80,227,2,0,0,170,66,0,128,226,32,1,160,225,31,0,70,229,88,0,86,229,128,0,16,227,8,0,0,26, 44,0,86,229,128,0,16,227,5,0,0,26,87,0,86,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225, 87,0,70,229,72,0,86,229,128,0,16,227,8,0,0,26,36,0,86,229,128,0,16,227,5,0,0,26,71,0,86,229, 20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225,71,0,70,229,8,0,86,229,128,0,16,227,8,0,0,26, 4,0,86,229,128,0,16,227,5,0,0,26,7,0,86,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225, 7,0,70,229,8,0,214,229,128,0,16,227,8,0,0,26,4,0,214,229,128,0,16,227,5,0,0,26,9,0,214,229, 20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225,9,0,198,229,164,95,28,229,5,80,139,224,236,86,21,229, 5,96,140,224,0,0,214,229,128,0,16,227,5,0,0,26,1,0,214,229,28,0,80,227,2,0,0,170,84,0,128,226, 32,1,160,225,1,0,198,229,44,0,214,229,128,0,16,227,5,0,0,26,45,0,214,229,28,0,80,227,2,0,0,170, 84,0,128,226,32,1,160,225,45,0,198,229,40,0,214,229,128,0,16,227,5,0,0,26,41,0,214,229,28,0,80,227, 2,0,0,170,84,0,128,226,32,1,160,225,41,0,198,229,36,0,214,229,128,0,16,227,5,0,0,26,37,0,214,229, 28,0,80,227,2,0,0,170,84,0,128,226,32,1,160,225,37,0,198,229,4,0,214,229,128,0,16,227,5,0,0,26, 5,0,214,229,24,0,80,227,2,0,0,170,72,0,128,226,32,1,160,225,5,0,198,229,4,0,86,229,128,0,16,227, 5,0,0,26,3,0,86,229,24,0,80,227,2,0,0,170,72,0,128,226,32,1,160,225,3,0,70,229,36,0,86,229, 128,0,16,227,5,0,0,26,35,0,86,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225,35,0,70,229, 40,0,86,229,128,0,16,227,5,0,0,26,39,0,86,229,21,0,80,227,2,0,0,170,63,0,128,226,32,1,160,225, 39,0,70,229,44,0,86,229,128,0,16,227,5,0,0,26,43,0,86,229,20,0,80,227,2,0,0,170,60,0,128,226, 32,1,160,225,43,0,70,229,84,0,214,229,128,0,16,227,8,0,0,26,44,0,214,229,128,0,16,227,5,0,0,26, 85,0,214,229,23,0,80,227,2,0,0,170,69,0,128,226,32,1,160,225,85,0,198,229,80,0,214,229,128,0,16,227, 8,0,0,26,40,0,214,229,128,0,16,227,5,0,0,26,81,0,214,229,23,0,80,227,2,0,0,170,69,0,128,226, 32,1,160,225,81,0,198,229,76,0,214,229,128,0,16,227,8,0,0,26,36,0,214,229,128,0,16,227,5,0,0,26, 77,0,214,229,23,0,80,227,2,0,0,170,69,0,128,226,32,1,160,225,77,0,198,229,48,0,214,229,128,0,16,227, 8,0,0,26,44,0,214,229,128,0,16,227,5,0,0,26,49,0,214,229,22,0,80,227,2,0,0,170,66,0,128,226, 32,1,160,225,49,0,198,229,32,0,214,229,128,0,16,227,8,0,0,26,36,0,214,229,128,0,16,227,5,0,0,26, 33,0,214,229,22,0,80,227,2,0,0,170,66,0,128,226,32,1,160,225,33,0,198,229,88,0,214,229,128,0,16,227, 8,0,0,26,44,0,214,229,128,0,16,227,5,0,0,26,89,0,214,229,20,0,80,227,2,0,0,170,60,0,128,226, 32,1,160,225,89,0,198,229,72,0,214,229,128,0,16,227,8,0,0,26,36,0,214,229,128,0,16,227,5,0,0,26, 73,0,214,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225,73,0,198,229,8,0,214,229,128,0,16,227, 8,0,0,26,4,0,214,229,128,0,16,227,5,0,0,26,9,0,214,229,20,0,80,227,2,0,0,170,60,0,128,226, 32,1,160,225,9,0,198,229,8,0,86,229,128,0,16,227,8,0,0,26,4,0,86,229,128,0,16,227,5,0,0,26, 7,0,86,229,20,0,80,227,2,0,0,170,60,0,128,226,32,1,160,225,7,0,70,229,14,240,160,225,220,18,0,224, 152,207,1,0,233,20,0,224,0,0,160,227,172,10,12,229,168,10,12,229,152,95,28,229,5,0,140,224,2,0,208,229, 0,96,160,227,6,112,160,225,6,96,140,224,172,106,22,229,6,16,140,224,2,16,209,229,1,0,80,225,248,255,255,58, 7,160,140,224,172,90,10,229,5,160,140,224,172,106,10,229,5,80,140,224,152,95,21,229,84,0,85,227,237,255,255,42, 148,95,28,229,5,0,140,224,2,0,208,229,4,96,160,227,6,112,160,225,6,96,140,224,172,106,22,229,6,16,140,224, 2,16,209,229,1,0,80,225,248,255,255,58,7,160,140,224,172,90,10,229,5,160,140,224,172,106,10,229,5,80,140,224, 152,95,21,229,84,0,85,227,237,255,255,42,14,240,160,225,36,6,216,229,3,0,128,226,36,6,200,229,72,12,152,229, 255,0,16,227,32,8,160,1,0,8,132,224,72,12,136,229,14,240,160,225,24,4,216,229,3,0,16,225,2,0,0,10, 36,6,216,229,3,0,128,226,36,6,200,229,14,240,160,225,74,76,200,229,36,4,160,225,75,12,200,229,36,6,216,229, 3,0,128,226,36,6,200,229,14,240,160,225,6,128,160,225,9,128,136,224,36,6,216,229,3,0,128,226,36,6,200,229, 72,12,152,229,255,0,16,227,32,8,160,1,0,8,132,224,72,12,136,229,0,16,88,229,0,0,81,227,243,255,255,10, 128,0,17,227,32,0,0,26,11,0,0,234,9,128,136,224,74,76,200,229,36,4,160,225,75,12,200,229,36,6,216,229, 3,0,128,226,36,6,200,229,0,16,88,229,0,0,81,227,245,255,255,10,128,0,17,227,19,0,0,26,62,16,1,226, 129,0,151,231,1,0,80,227,15,0,0,186,2,0,0,10,32,0,17,227,236,255,255,10,220,255,255,234,9,128,136,224, 74,76,200,229,36,4,160,225,75,12,200,229,36,6,216,229,3,0,128,226,36,6,200,229,32,0,17,227,2,0,0,10, 72,12,152,229,0,8,132,224,72,12,136,229,14,240,160,225,6,128,160,225,9,128,136,224,24,4,216,229,3,0,16,225, 2,0,0,10,36,6,216,229,3,0,128,226,36,6,200,229,0,0,88,229,0,0,80,227,245,255,255,10,14,240,160,225, 37,6,216,229,3,0,128,226,37,6,200,229,84,14,152,229,255,0,16,227,32,8,160,1,0,8,132,224,84,14,136,229, 14,240,160,225,26,4,216,229,3,0,16,225,2,0,0,10,37,6,216,229,3,0,128,226,37,6,200,229,14,240,160,225, 6,128,160,225,9,128,136,224,37,6,216,229,3,0,128,226,37,6,200,229,84,14,152,229,255,0,16,227,32,8,160,1, 0,8,132,224,84,14,136,229,0,16,88,229,0,0,81,227,243,255,255,10,128,0,17,227,32,0,0,26,11,0,0,234, 9,128,136,224,86,78,200,229,36,4,160,225,87,14,200,229,37,6,216,229,3,0,128,226,37,6,200,229,0,16,88,229, 0,0,81,227,245,255,255,10,128,0,17,227,19,0,0,26,62,16,1,226,129,0,151,231,1,0,80,227,15,0,0,186, 2,0,0,10,32,0,17,227,236,255,255,26,220,255,255,234,9,128,136,224,86,78,200,229,36,4,160,225,87,14,200,229, 37,6,216,229,3,0,128,226,37,6,200,229,32,0,17,227,2,0,0,26,84,14,152,229,0,8,132,224,84,14,136,229, 14,240,160,225,6,128,160,225,9,128,136,224,26,4,216,229,3,0,16,225,2,0,0,10,37,6,216,229,3,0,128,226, 37,6,200,229,0,0,88,229,0,0,80,227,245,255,255,10,14,240,160,225,40,128,70,226,92,255,255,235,218,2,0,234, 39,144,224,227,68,126,159,229,111,255,255,235,214,2,0,234,84,128,70,226,85,255,255,235,76,128,70,226,83,255,255,235, 209,2,0,234,44,128,70,226,80,255,255,235,44,128,134,226,78,255,255,235,40,128,70,226,76,255,255,235,36,128,70,226, 74,255,255,235,36,128,134,226,72,255,255,235,198,2,0,234,44,128,70,226,69,255,255,235,40,128,70,226,67,255,255,235, 40,128,134,226,65,255,255,235,36,128,70,226,63,255,255,235,4,128,70,226,61,255,255,235,4,128,134,226,59,255,255,235, 185,2,0,234,40,128,70,226,56,255,255,235,40,128,134,226,54,255,255,235,4,128,70,226,52,255,255,235,4,128,134,226, 50,255,255,235,43,144,224,227,164,125,159,229,70,255,255,235,44,144,160,227,156,125,159,229,67,255,255,235,35,144,224,227, 148,125,159,229,64,255,255,235,36,144,160,227,140,125,159,229,61,255,255,235,164,2,0,234,44,128,70,226,35,255,255,235, 44,128,134,226,33,255,255,235,36,128,70,226,31,255,255,235,36,128,134,226,29,255,255,235,39,144,224,227,96,125,159,229, 49,255,255,235,40,144,160,227,88,125,159,229,46,255,255,235,3,144,224,227,80,125,159,229,43,255,255,235,4,144,160,227, 72,125,159,229,40,255,255,235,143,2,0,234,248,5,214,229,3,0,128,226,248,5,198,229,252,5,214,229,3,0,128,226, 252,5,198,229,0,6,214,229,3,0,128,226,0,6,198,229,32,6,214,229,3,0,128,226,32,6,198,229,40,6,214,229, 3,0,128,226,40,6,198,229,72,6,214,229,3,0,128,226,72,6,198,229,76,6,214,229,3,0,128,226,76,6,198,229, 80,6,214,229,3,0,128,226,80,6,198,229,118,2,0,234,40,128,70,226,254,254,255,235,115,2,0,234,39,144,224,227, 58,255,255,235,112,2,0,234,84,128,70,226,248,254,255,235,76,128,70,226,246,254,255,235,107,2,0,234,44,128,70,226, 234,254,255,235,44,128,134,226,232,254,255,235,40,128,70,226,239,254,255,235,36,128,70,226,237,254,255,235,36,128,134,226, 235,254,255,235,96,2,0,234,44,128,70,226,223,254,255,235,40,128,70,226,230,254,255,235,40,128,134,226,228,254,255,235, 36,128,70,226,226,254,255,235,4,128,70,226,224,254,255,235,4,128,134,226,222,254,255,235,83,2,0,234,40,128,70,226, 219,254,255,235,40,128,134,226,217,254,255,235,4,128,70,226,215,254,255,235,4,128,134,226,213,254,255,235,43,144,224,227, 44,124,159,229,224,254,255,235,44,144,160,227,36,124,159,229,221,254,255,235,35,144,224,227,12,255,255,235,36,144,160,227, 10,255,255,235,64,2,0,234,44,128,70,226,191,254,255,235,44,128,134,226,189,254,255,235,36,128,70,226,196,254,255,235, 36,128,134,226,194,254,255,235,39,144,224,227,255,254,255,235,40,144,160,227,253,254,255,235,3,144,224,227,251,254,255,235, 4,144,160,227,249,254,255,235,47,2,0,234,44,128,70,226,183,254,255,235,44,128,134,226,181,254,255,235,40,128,70,226, 170,254,255,235,36,128,70,226,177,254,255,235,36,128,134,226,175,254,255,235,36,2,0,234,44,128,70,226,172,254,255,235, 40,128,70,226,161,254,255,235,40,128,134,226,159,254,255,235,36,128,70,226,166,254,255,235,4,128,70,226,164,254,255,235, 4,128,134,226,162,254,255,235,23,2,0,234,40,128,70,226,150,254,255,235,40,128,134,226,148,254,255,235,4,128,70,226, 155,254,255,235,4,128,134,226,153,254,255,235,43,144,224,227,214,254,255,235,44,144,160,227,212,254,255,235,35,144,224,227, 210,254,255,235,36,144,160,227,208,254,255,235,6,2,0,234,44,128,70,226,142,254,255,235,44,128,134,226,140,254,255,235, 36,128,70,226,138,254,255,235,36,128,134,226,136,254,255,235,39,144,224,227,0,123,159,229,147,254,255,235,40,144,160,227, 248,122,159,229,144,254,255,235,3,144,224,227,191,254,255,235,4,144,160,227,189,254,255,235,243,1,0,234,44,128,70,226, 123,254,255,235,44,128,134,226,121,254,255,235,40,128,70,226,119,254,255,235,36,128,70,226,108,254,255,235,36,128,134,226, 106,254,255,235,232,1,0,234,44,128,70,226,112,254,255,235,40,128,70,226,110,254,255,235,40,128,134,226,108,254,255,235, 36,128,70,226,97,254,255,235,4,128,70,226,104,254,255,235,4,128,134,226,102,254,255,235,219,1,0,234,40,128,70,226, 99,254,255,235,40,128,134,226,97,254,255,235,4,128,70,226,95,254,255,235,4,128,134,226,93,254,255,235,43,144,224,227, 154,254,255,235,44,144,160,227,152,254,255,235,35,144,224,227,76,122,159,229,100,254,255,235,36,144,160,227,68,122,159,229, 97,254,255,235,200,1,0,234,44,128,70,226,80,254,255,235,44,128,134,226,78,254,255,235,36,128,70,226,67,254,255,235, 36,128,134,226,65,254,255,235,39,144,224,227,135,254,255,235,40,144,160,227,133,254,255,235,3,144,224,227,131,254,255,235, 4,144,160,227,129,254,255,235,183,1,0,234,44,128,70,226,63,254,255,235,44,128,134,226,61,254,255,235,40,128,70,226, 59,254,255,235,36,128,70,226,57,254,255,235,36,128,134,226,55,254,255,235,172,1,0,234,44,128,70,226,52,254,255,235, 40,128,70,226,50,254,255,235,40,128,134,226,48,254,255,235,36,128,70,226,46,254,255,235,4,128,70,226,35,254,255,235, 4,128,134,226,33,254,255,235,159,1,0,234,40,128,70,226,39,254,255,235,40,128,134,226,37,254,255,235,4,128,70,226, 26,254,255,235,4,128,134,226,24,254,255,235,43,144,224,227,94,254,255,235,44,144,160,227,92,254,255,235,35,144,224,227, 90,254,255,235,36,144,160,227,88,254,255,235,142,1,0,234,44,128,70,226,22,254,255,235,44,128,134,226,20,254,255,235, 36,128,70,226,18,254,255,235,36,128,134,226,16,254,255,235,39,144,224,227,77,254,255,235,40,144,160,227,75,254,255,235, 3,144,224,227,32,121,159,229,23,254,255,235,4,144,160,227,24,121,159,229,20,254,255,235,123,1,0,234,40,128,134,226, 78,254,255,235,138,1,0,234,40,144,160,227,0,121,159,229,90,254,255,235,134,1,0,234,84,128,134,226,71,254,255,235, 76,128,134,226,69,254,255,235,129,1,0,234,44,128,134,226,66,254,255,235,44,128,70,226,64,254,255,235,40,128,134,226, 62,254,255,235,36,128,134,226,60,254,255,235,36,128,70,226,58,254,255,235,118,1,0,234,44,128,134,226,55,254,255,235, 40,128,134,226,53,254,255,235,40,128,70,226,51,254,255,235,36,128,134,226,49,254,255,235,4,128,134,226,47,254,255,235, 4,128,70,226,45,254,255,235,105,1,0,234,40,128,134,226,42,254,255,235,40,128,70,226,40,254,255,235,4,128,134,226, 38,254,255,235,4,128,70,226,36,254,255,235,44,144,160,227,96,120,159,229,49,254,255,235,43,144,224,227,88,120,159,229, 46,254,255,235,36,144,160,227,80,120,159,229,43,254,255,235,35,144,224,227,72,120,159,229,40,254,255,235,84,1,0,234, 44,128,134,226,21,254,255,235,44,128,70,226,19,254,255,235,36,128,134,226,17,254,255,235,36,128,70,226,15,254,255,235, 40,144,160,227,28,120,159,229,28,254,255,235,39,144,224,227,20,120,159,229,25,254,255,235,4,144,160,227,12,120,159,229, 22,254,255,235,3,144,224,227,4,120,159,229,19,254,255,235,63,1,0,234,81,6,214,229,3,0,128,226,81,6,198,229, 77,6,214,229,3,0,128,226,77,6,198,229,73,6,214,229,3,0,128,226,73,6,198,229,41,6,214,229,3,0,128,226, 41,6,198,229,33,6,214,229,3,0,128,226,33,6,198,229,1,6,214,229,3,0,128,226,1,6,198,229,253,5,214,229, 3,0,128,226,253,5,198,229,249,5,214,229,3,0,128,226,249,5,198,229,38,1,0,234,40,128,134,226,240,253,255,235, 35,1,0,234,40,144,160,227,37,254,255,235,32,1,0,234,84,128,134,226,234,253,255,235,76,128,134,226,232,253,255,235, 27,1,0,234,44,128,134,226,220,253,255,235,44,128,70,226,218,253,255,235,40,128,134,226,225,253,255,235,36,128,134,226, 223,253,255,235,36,128,70,226,221,253,255,235,16,1,0,234,44,128,134,226,209,253,255,235,40,128,134,226,216,253,255,235, 40,128,70,226,214,253,255,235,36,128,134,226,212,253,255,235,4,128,134,226,210,253,255,235,4,128,70,226,208,253,255,235, 3,1,0,234,40,128,134,226,205,253,255,235,40,128,70,226,203,253,255,235,4,128,134,226,201,253,255,235,4,128,70,226, 199,253,255,235,44,144,160,227,232,118,159,229,203,253,255,235,43,144,224,227,224,118,159,229,200,253,255,235,36,144,160,227, 247,253,255,235,35,144,224,227,245,253,255,235,240,0,0,234,44,128,134,226,177,253,255,235,44,128,70,226,175,253,255,235, 36,128,134,226,182,253,255,235,36,128,70,226,180,253,255,235,40,144,160,227,234,253,255,235,39,144,224,227,232,253,255,235, 4,144,160,227,230,253,255,235,3,144,224,227,228,253,255,235,223,0,0,234,44,128,134,226,169,253,255,235,44,128,70,226, 167,253,255,235,40,128,134,226,156,253,255,235,36,128,134,226,163,253,255,235,36,128,70,226,161,253,255,235,212,0,0,234, 44,128,134,226,158,253,255,235,40,128,134,226,147,253,255,235,40,128,70,226,145,253,255,235,36,128,134,226,152,253,255,235, 4,128,134,226,150,253,255,235,4,128,70,226,148,253,255,235,199,0,0,234,40,128,134,226,136,253,255,235,40,128,70,226, 134,253,255,235,4,128,134,226,141,253,255,235,4,128,70,226,139,253,255,235,44,144,160,227,193,253,255,235,43,144,224,227, 191,253,255,235,36,144,160,227,189,253,255,235,35,144,224,227,187,253,255,235,182,0,0,234,44,128,134,226,128,253,255,235, 44,128,70,226,126,253,255,235,36,128,134,226,124,253,255,235,36,128,70,226,122,253,255,235,40,144,160,227,188,117,159,229, 126,253,255,235,39,144,224,227,180,117,159,229,123,253,255,235,4,144,160,227,170,253,255,235,3,144,224,227,168,253,255,235, 163,0,0,234,44,128,134,226,109,253,255,235,44,128,70,226,107,253,255,235,40,128,134,226,105,253,255,235,36,128,134,226, 94,253,255,235,36,128,70,226,92,253,255,235,152,0,0,234,44,128,134,226,98,253,255,235,40,128,134,226,96,253,255,235, 40,128,70,226,94,253,255,235,36,128,134,226,83,253,255,235,4,128,134,226,90,253,255,235,4,128,70,226,88,253,255,235, 139,0,0,234,40,128,134,226,85,253,255,235,40,128,70,226,83,253,255,235,4,128,134,226,81,253,255,235,4,128,70,226, 79,253,255,235,44,144,160,227,133,253,255,235,43,144,224,227,131,253,255,235,36,144,160,227,8,117,159,229,79,253,255,235, 35,144,224,227,0,117,159,229,76,253,255,235,120,0,0,234,44,128,134,226,66,253,255,235,44,128,70,226,64,253,255,235, 36,128,134,226,53,253,255,235,36,128,70,226,51,253,255,235,40,144,160,227,114,253,255,235,39,144,224,227,112,253,255,235, 4,144,160,227,110,253,255,235,3,144,224,227,108,253,255,235,103,0,0,234,44,128,134,226,49,253,255,235,44,128,70,226, 47,253,255,235,40,128,134,226,45,253,255,235,36,128,134,226,43,253,255,235,36,128,70,226,41,253,255,235,92,0,0,234, 44,128,134,226,38,253,255,235,40,128,134,226,36,253,255,235,40,128,70,226,34,253,255,235,36,128,134,226,32,253,255,235, 4,128,134,226,21,253,255,235,4,128,70,226,19,253,255,235,79,0,0,234,40,128,134,226,25,253,255,235,40,128,70,226, 23,253,255,235,4,128,134,226,12,253,255,235,4,128,70,226,10,253,255,235,44,144,160,227,73,253,255,235,43,144,224,227, 71,253,255,235,36,144,160,227,69,253,255,235,35,144,224,227,67,253,255,235,62,0,0,234,44,128,134,226,8,253,255,235, 44,128,70,226,6,253,255,235,36,128,134,226,4,253,255,235,36,128,70,226,2,253,255,235,40,144,160,227,56,253,255,235, 39,144,224,227,54,253,255,235,4,144,160,227,220,115,159,229,2,253,255,235,3,144,224,227,212,115,159,229,255,252,255,235, 43,0,0,234,4,224,45,229,200,83,159,229,0,0,160,227,131,144,160,227,4,0,133,228,1,144,89,226,252,255,255,26, 180,83,159,229,180,3,159,229,131,144,160,227,12,2,133,229,4,0,133,228,1,144,89,226,251,255,255,26,172,90,28,229, 5,96,140,224,37,65,160,225,2,0,214,229,0,68,132,225,25,52,214,229,0,0,86,229,30,0,0,226,13,18,214,229, 1,0,128,225,128,0,143,224,100,240,144,229,36,6,214,229,2,0,128,226,36,6,198,229,172,90,22,229,0,0,85,227, 238,255,255,26,168,90,28,229,5,96,140,224,37,65,160,225,2,0,214,229,0,68,132,225,27,52,214,229,0,0,86,229, 30,0,0,226,15,18,214,229,1,0,128,225,128,0,143,224,92,241,144,229,37,6,214,229,2,0,128,226,37,6,198,229, 172,90,22,229,0,0,85,227,238,255,255,26,4,240,157,228,52,134,0,0,144,134,0,0,64,134,0,0,144,134,0,0, 80,134,0,0,144,134,0,0,100,134,0,0,144,134,0,0,144,134,0,0,0,0,0,0,228,134,0,0,196,134,0,0, 56,135,0,0,24,135,0,0,108,135,0,0,0,0,0,0,208,135,0,0,40,136,0,0,220,135,0,0,40,136,0,0, 232,135,0,0,40,136,0,0,252,135,0,0,40,136,0,0,40,136,0,0,0,0,0,0,124,136,0,0,92,136,0,0, 200,136,0,0,168,136,0,0,60,134,0,0,0,0,0,0,52,134,0,0,24,137,0,0,64,134,0,0,24,137,0,0, 232,135,0,0,24,137,0,0,236,136,0,0,24,137,0,0,24,137,0,0,0,0,0,0,108,137,0,0,76,137,0,0, 176,137,0,0,144,137,0,0,60,134,0,0,0,0,0,0,208,135,0,0,8,138,0,0,220,135,0,0,8,138,0,0, 232,135,0,0,8,138,0,0,220,137,0,0,8,138,0,0,8,138,0,0,0,0,0,0,92,138,0,0,60,138,0,0, 168,138,0,0,136,138,0,0,60,134,0,0,0,0,0,0,208,135,0,0,248,138,0,0,220,135,0,0,248,138,0,0, 232,135,0,0,248,138,0,0,204,138,0,0,248,138,0,0,248,138,0,0,0,0,0,0,76,139,0,0,44,139,0,0, 144,139,0,0,112,139,0,0,60,134,0,0,0,0,0,0,188,139,0,0,24,140,0,0,200,139,0,0,24,140,0,0, 216,139,0,0,24,140,0,0,236,139,0,0,24,140,0,0,24,140,0,0,0,0,0,0,108,140,0,0,76,140,0,0, 192,140,0,0,160,140,0,0,244,140,0,0,0,0,0,0,88,141,0,0,176,141,0,0,100,141,0,0,176,141,0,0, 112,141,0,0,176,141,0,0,132,141,0,0,176,141,0,0,176,141,0,0,0,0,0,0,4,142,0,0,228,141,0,0, 80,142,0,0,48,142,0,0,196,139,0,0,0,0,0,0,188,139,0,0,160,142,0,0,200,139,0,0,160,142,0,0, 112,141,0,0,160,142,0,0,116,142,0,0,160,142,0,0,160,142,0,0,0,0,0,0,244,142,0,0,212,142,0,0, 56,143,0,0,24,143,0,0,196,139,0,0,0,0,0,0,88,141,0,0,144,143,0,0,100,141,0,0,144,143,0,0, 112,141,0,0,144,143,0,0,100,143,0,0,144,143,0,0,144,143,0,0,0,0,0,0,228,143,0,0,196,143,0,0, 48,144,0,0,16,144,0,0,196,139,0,0,0,0,0,0,88,141,0,0,128,144,0,0,100,141,0,0,128,144,0,0, 112,141,0,0,128,144,0,0,84,144,0,0,128,144,0,0,128,144,0,0,0,0,0,0,212,144,0,0,180,144,0,0, 24,145,0,0,248,144,0,0,196,139,0,0,0,0,0,0,92,211,1,0,220,211,1,0,220,212,1,0,220,211,1,0, 220,212,1,0,92,211,1,0,92,213,1,0,92,212,1,0,92,212,1,0,220,211,1,0,220,212,1,0,92,211,1,0, 92,213,1,0,220,211,1,0,220,212,1,0,92,212,1,0,92,212,1,0,92,213,1,0,220,212,1,0,220,211,1,0, 220,212,1,0,220,211,1,0,92,213,1,0,92,211,1,0,92,212,1,0,92,212,1,0,220,212,1,0,220,211,1,0, 92,213,1,0,92,211,1,0,220,212,1,0,220,211,1,0,92,212,1,0,92,212,1,0,12,27,0,224,48,33,0,224, 0,120,0,120,72,12,152,229,255,0,16,227,32,8,160,1,0,8,132,224,72,12,136,229,14,240,160,225,6,128,160,225, 9,128,136,224,72,12,152,229,255,0,16,227,32,8,160,1,0,8,132,224,72,12,136,229,0,16,88,229,0,0,81,227, 246,255,255,10,128,0,17,227,26,0,0,26,8,0,0,234,9,128,136,224,74,76,200,229,36,4,160,225,75,12,200,229, 0,16,88,229,0,0,81,227,248,255,255,10,128,0,17,227,16,0,0,26,62,16,1,226,129,0,151,231,1,0,80,227, 12,0,0,186,2,0,0,10,32,0,17,227,239,255,255,10,226,255,255,234,9,128,136,224,74,76,200,229,36,4,160,225, 75,12,200,229,32,0,17,227,2,0,0,10,72,12,152,229,0,8,132,224,72,12,136,229,14,240,160,225,84,14,152,229, 255,0,16,227,32,8,160,1,0,8,132,224,84,14,136,229,14,240,160,225,6,128,160,225,9,128,136,224,84,14,152,229, 255,0,16,227,32,8,160,1,0,8,132,224,84,14,136,229,0,16,88,229,0,0,81,227,246,255,255,10,128,0,17,227, 26,0,0,26,8,0,0,234,9,128,136,224,86,78,200,229,36,4,160,225,87,14,200,229,0,16,88,229,0,0,81,227, 248,255,255,10,128,0,17,227,16,0,0,26,62,16,1,226,129,0,151,231,1,0,80,227,12,0,0,186,2,0,0,10, 32,0,17,227,239,255,255,26,226,255,255,234,9,128,136,224,86,78,200,229,36,4,160,225,87,14,200,229,32,0,17,227, 2,0,0,26,84,14,152,229,0,8,132,224,84,14,136,229,14,240,160,225,40,128,70,226,161,255,255,235,233,0,0,234, 39,144,224,227,100,118,159,229,163,255,255,235,229,0,0,234,84,128,70,226,154,255,255,235,76,128,70,226,152,255,255,235, 224,0,0,234,44,128,70,226,149,255,255,235,44,128,134,226,147,255,255,235,40,128,70,226,145,255,255,235,36,128,70,226, 143,255,255,235,36,128,134,226,141,255,255,235,213,0,0,234,44,128,70,226,138,255,255,235,40,128,70,226,136,255,255,235, 40,128,134,226,134,255,255,235,36,128,70,226,132,255,255,235,4,128,70,226,130,255,255,235,4,128,134,226,128,255,255,235, 200,0,0,234,40,128,70,226,125,255,255,235,40,128,134,226,123,255,255,235,4,128,70,226,121,255,255,235,4,128,134,226, 119,255,255,235,43,144,224,227,196,117,159,229,122,255,255,235,44,144,160,227,188,117,159,229,119,255,255,235,35,144,224,227, 180,117,159,229,116,255,255,235,36,144,160,227,172,117,159,229,113,255,255,235,179,0,0,234,44,128,70,226,104,255,255,235, 44,128,134,226,102,255,255,235,36,128,70,226,100,255,255,235,36,128,134,226,98,255,255,235,39,144,224,227,128,117,159,229, 101,255,255,235,40,144,160,227,120,117,159,229,98,255,255,235,3,144,224,227,112,117,159,229,95,255,255,235,4,144,160,227, 104,117,159,229,92,255,255,235,158,0,0,234,44,128,70,226,83,255,255,235,44,128,134,226,81,255,255,235,153,0,0,234, 44,128,70,226,78,255,255,235,150,0,0,234,40,128,70,226,75,255,255,235,40,128,134,226,73,255,255,235,145,0,0,234, 36,128,70,226,70,255,255,235,142,0,0,234,43,144,224,227,28,117,159,229,72,255,255,235,44,144,160,227,20,117,159,229, 69,255,255,235,135,0,0,234,39,144,224,227,8,117,159,229,65,255,255,235,40,144,160,227,0,117,159,229,62,255,255,235, 128,0,0,234,127,0,0,234,40,128,134,226,98,255,255,235,138,0,0,234,40,144,160,227,228,116,159,229,100,255,255,235, 134,0,0,234,84,128,134,226,91,255,255,235,76,128,134,226,89,255,255,235,129,0,0,234,44,128,134,226,86,255,255,235, 44,128,70,226,84,255,255,235,40,128,134,226,82,255,255,235,36,128,134,226,80,255,255,235,36,128,70,226,78,255,255,235, 118,0,0,234,44,128,134,226,75,255,255,235,40,128,134,226,73,255,255,235,40,128,70,226,71,255,255,235,36,128,134,226, 69,255,255,235,4,128,134,226,67,255,255,235,4,128,70,226,65,255,255,235,105,0,0,234,40,128,134,226,62,255,255,235, 40,128,70,226,60,255,255,235,4,128,134,226,58,255,255,235,4,128,70,226,56,255,255,235,44,144,160,227,68,116,159,229, 59,255,255,235,43,144,224,227,60,116,159,229,56,255,255,235,36,144,160,227,52,116,159,229,53,255,255,235,35,144,224,227, 44,116,159,229,50,255,255,235,84,0,0,234,44,128,134,226,41,255,255,235,44,128,70,226,39,255,255,235,36,128,134,226, 37,255,255,235,36,128,70,226,35,255,255,235,40,144,160,227,0,116,159,229,38,255,255,235,39,144,224,227,248,115,159,229, 35,255,255,235,4,144,160,227,240,115,159,229,32,255,255,235,3,144,224,227,232,115,159,229,29,255,255,235,63,0,0,234, 44,128,134,226,20,255,255,235,44,128,70,226,18,255,255,235,58,0,0,234,44,128,134,226,15,255,255,235,55,0,0,234, 40,128,134,226,12,255,255,235,40,128,70,226,10,255,255,235,50,0,0,234,36,128,134,226,7,255,255,235,47,0,0,234, 44,144,160,227,156,115,159,229,9,255,255,235,43,144,224,227,148,115,159,229,6,255,255,235,40,0,0,234,40,144,160,227, 136,115,159,229,2,255,255,235,39,144,224,227,128,115,159,229,255,254,255,235,33,0,0,234,32,0,0,234,4,224,45,229, 112,83,159,229,112,3,159,229,131,144,160,227,12,2,133,229,4,0,133,228,1,144,89,226,251,255,255,26,172,90,28,229, 5,96,140,224,37,65,160,225,2,0,214,229,0,68,132,225,0,0,86,229,30,0,0,226,13,18,214,229,1,0,128,225, 128,0,143,224,72,240,144,229,172,90,22,229,0,0,85,227,242,255,255,26,168,90,28,229,5,96,140,224,37,65,160,225, 2,0,214,229,0,68,132,225,0,0,86,229,30,0,0,226,15,18,214,229,1,0,128,225,128,0,143,224,80,241,144,229, 172,90,22,229,0,0,85,227,242,255,255,26,4,240,157,228,148,150,0,0,240,150,0,0,160,150,0,0,240,150,0,0, 176,150,0,0,240,150,0,0,196,150,0,0,240,150,0,0,240,150,0,0,0,0,0,0,68,151,0,0,36,151,0,0, 152,151,0,0,120,151,0,0,68,152,0,0,0,0,0,0,156,150,0,0,224,151,0,0,156,150,0,0,224,151,0,0, 156,150,0,0,224,151,0,0,204,151,0,0,224,151,0,0,224,151,0,0,0,0,0,0,12,152,0,0,12,152,0,0, 156,150,0,0,204,151,0,0,156,150,0,0,0,0,0,0,148,150,0,0,236,151,0,0,160,150,0,0,236,151,0,0, 156,150,0,0,236,151,0,0,148,150,0,0,236,151,0,0,236,151,0,0,0,0,0,0,156,150,0,0,236,151,0,0, 40,152,0,0,40,152,0,0,156,150,0,0,0,0,0,0,156,150,0,0,0,152,0,0,156,150,0,0,0,152,0,0, 156,150,0,0,0,152,0,0,220,150,0,0,0,152,0,0,0,152,0,0,0,0,0,0,92,151,0,0,92,151,0,0, 156,150,0,0,220,150,0,0,156,150,0,0,0,0,0,0,156,150,0,0,16,151,0,0,156,150,0,0,16,151,0,0, 156,150,0,0,16,151,0,0,156,150,0,0,16,151,0,0,16,151,0,0,0,0,0,0,156,150,0,0,16,151,0,0, 176,151,0,0,176,151,0,0,156,150,0,0,0,0,0,0,72,152,0,0,164,152,0,0,84,152,0,0,164,152,0,0, 100,152,0,0,164,152,0,0,120,152,0,0,164,152,0,0,164,152,0,0,0,0,0,0,248,152,0,0,216,152,0,0, 76,153,0,0,44,153,0,0,248,153,0,0,0,0,0,0,80,152,0,0,148,153,0,0,80,152,0,0,148,153,0,0, 80,152,0,0,148,153,0,0,128,153,0,0,148,153,0,0,148,153,0,0,0,0,0,0,192,153,0,0,192,153,0,0, 80,152,0,0,128,153,0,0,80,152,0,0,0,0,0,0,72,152,0,0,160,153,0,0,84,152,0,0,160,153,0,0, 80,152,0,0,160,153,0,0,72,152,0,0,160,153,0,0,160,153,0,0,0,0,0,0,80,152,0,0,160,153,0,0, 220,153,0,0,220,153,0,0,80,152,0,0,0,0,0,0,80,152,0,0,180,153,0,0,80,152,0,0,180,153,0,0, 80,152,0,0,180,153,0,0,144,152,0,0,180,153,0,0,180,153,0,0,0,0,0,0,16,153,0,0,16,153,0,0, 80,152,0,0,144,152,0,0,80,152,0,0,0,0,0,0,80,152,0,0,196,152,0,0,80,152,0,0,196,152,0,0, 80,152,0,0,196,152,0,0,80,152,0,0,196,152,0,0,196,152,0,0,0,0,0,0,80,152,0,0,196,152,0,0, 100,153,0,0,100,153,0,0,80,152,0,0,0,0,0,0,92,211,1,0,220,211,1,0,220,212,1,0,220,211,1,0, 220,212,1,0,92,211,1,0,92,213,1,0,92,212,1,0,92,212,1,0,220,211,1,0,220,212,1,0,92,211,1,0, 92,213,1,0,92,213,1,0,220,212,1,0,220,211,1,0,220,212,1,0,220,211,1,0,92,213,1,0,92,211,1,0, 92,212,1,0,92,212,1,0,220,212,1,0,220,211,1,0,92,213,1,0,92,211,1,0,48,33,0,224,0,120,0,120, 222,67,45,233,7,160,140,224,73,28,218,229,75,44,218,229,85,62,218,229,87,78,218,229,36,102,218,229,37,118,218,229, 84,142,218,229,86,158,218,229,26,0,0,235,156,8,76,229,222,67,189,232,14,240,160,225,222,67,45,233,7,160,140,224, 73,28,218,229,75,44,218,229,85,62,218,229,87,78,218,229,49,8,218,229,0,0,81,225,2,0,0,58,1,32,160,225, 0,16,160,225,1,0,0,234,0,0,82,225,0,32,160,33,36,102,218,229,37,118,218,229,48,8,218,229,0,96,134,224, 84,142,218,229,86,158,218,229,2,0,0,235,156,8,76,229,222,67,189,232,14,240,160,225,3,0,86,227,1,0,0,42, 120,0,160,227,14,240,160,225,3,0,87,227,1,0,0,138,0,0,160,227,14,240,160,225,8,1,85,225,2,0,0,26, 4,48,160,225,120,64,160,227,2,0,0,234,9,1,85,225,0,0,0,26,120,64,160,227,7,0,86,225,6,0,0,58, 4,0,82,224,0,0,160,51,0,0,83,224,0,0,160,51,0,0,81,224,0,0,160,51,14,240,160,225,2,0,83,224, 0,0,160,51,0,0,81,224,0,0,160,51,14,240,160,225,222,67,45,233,7,160,140,224,73,28,218,229,75,44,218,229, 85,62,218,229,87,78,218,229,36,102,218,229,37,118,218,229,72,140,218,229,74,156,218,229,30,0,0,235,155,8,76,229, 222,67,189,232,14,240,160,225,7,160,140,224,84,14,218,229,0,1,160,225,81,15,80,227,1,0,0,42,81,15,87,227, 234,255,255,58,0,0,220,231,30,0,0,226,128,0,139,224,180,2,16,229,0,0,80,227,228,255,255,10,0,48,131,224, 222,67,45,233,73,28,218,229,75,44,218,229,85,62,218,229,87,78,218,229,0,48,131,224,36,102,218,229,37,118,218,229, 72,140,218,229,74,156,218,229,2,0,0,235,155,8,76,229,222,67,189,232,14,240,160,225,3,0,87,227,1,0,0,42, 120,0,160,227,14,240,160,225,3,0,86,227,1,0,0,138,0,0,160,227,14,240,160,225,8,1,85,225,2,0,0,26, 2,16,160,225,120,32,160,227,2,0,0,234,9,1,85,225,0,0,0,26,120,32,160,227,6,0,87,225,6,0,0,58, 2,0,84,224,0,0,160,51,0,0,81,224,0,0,160,51,0,0,83,224,0,0,160,51,14,240,160,225,4,0,81,224, 0,0,160,51,0,0,83,224,0,0,160,51,14,240,160,225,222,67,45,233,7,160,140,224,73,28,218,229,75,44,218,229, 85,62,218,229,87,78,218,229,36,102,218,229,37,118,218,229,2,0,0,235,154,8,76,229,222,67,189,232,14,240,160,225, 3,0,86,227,3,0,0,42,7,0,86,225,1,0,0,138,120,0,160,227,14,240,160,225,3,0,87,227,1,0,0,42, 0,0,160,227,14,240,160,225,7,0,86,225,6,0,0,154,4,0,82,224,0,0,160,51,0,0,83,224,0,0,160,51, 0,0,81,224,0,0,160,51,14,240,160,225,2,0,83,224,0,0,160,51,0,0,81,224,0,0,160,51,14,240,160,225, 222,67,45,233,7,160,140,224,73,28,218,229,75,44,218,229,85,62,218,229,87,78,218,229,36,102,218,229,37,118,218,229, 2,0,0,235,153,8,76,229,222,67,189,232,14,240,160,225,3,0,87,227,3,0,0,42,6,0,87,225,1,0,0,138, 120,0,160,227,14,240,160,225,3,0,86,227,1,0,0,42,0,0,160,227,14,240,160,225,6,0,87,225,6,0,0,154, 2,0,84,224,0,0,160,51,0,0,81,224,0,0,160,51,0,0,83,224,0,0,160,51,14,240,160,225,4,0,81,224, 0,0,160,51,0,0,83,224,0,0,160,51,14,240,160,225,4,224,45,229,84,112,160,227,9,144,160,227,9,128,160,227, 178,255,255,235,154,8,92,229,7,160,140,224,38,6,202,229,210,255,255,235,153,8,92,229,7,160,140,224,39,6,202,229, 4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26,4,240,157,228,4,224,45,229, 204,82,159,229,30,11,160,227,131,144,160,227,4,0,133,228,1,144,89,226,252,255,255,26,172,90,28,229,5,160,140,224, 13,2,218,229,0,0,80,227,6,0,0,26,2,64,218,229,4,68,160,225,3,64,132,226,0,0,90,229,30,0,0,226, 128,0,143,224,148,242,144,229,5,80,140,224,172,90,21,229,0,0,85,227,240,255,255,26,190,15,92,229,0,0,80,227, 18,0,0,10,84,112,160,227,9,144,160,227,5,74,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227, 4,0,0,26,7,0,140,224,39,6,208,229,36,20,160,225,1,0,80,225,137,6,0,139,4,112,135,226,1,128,88,226, 244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26,191,15,92,229,0,0,80,227,18,0,0,10,84,112,160,227, 9,144,160,227,70,76,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224, 39,6,208,229,36,20,160,225,1,0,80,225,109,6,0,139,4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226, 1,144,89,226,240,255,255,26,192,15,92,229,0,0,80,227,18,0,0,10,84,112,160,227,9,144,160,227,13,75,160,227, 3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224,39,6,208,229,36,20,160,225, 1,0,80,225,79,6,0,139,4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26, 193,15,92,229,0,0,80,227,18,0,0,10,84,112,160,227,9,144,160,227,50,76,160,227,3,64,132,226,9,128,160,227, 7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224,39,6,208,229,36,20,160,225,1,0,80,225,50,6,0,139, 4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26,194,15,92,229,0,0,80,227, 18,0,0,10,164,112,160,227,7,144,160,227,2,74,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227, 4,0,0,26,7,0,140,224,39,6,208,229,36,20,160,225,1,0,80,225,24,6,0,139,4,112,135,226,1,128,88,226, 244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26,195,15,92,229,0,0,80,227,18,0,0,10,124,112,160,227, 8,144,160,227,30,76,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224, 39,6,208,229,36,20,160,225,1,0,80,225,255,5,0,139,4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226, 1,144,89,226,240,255,255,26,196,15,92,229,0,0,80,227,22,0,0,10,124,112,160,227,8,144,160,227,2,75,160,227, 3,64,132,226,9,128,160,227,72,80,159,229,1,0,213,228,0,0,80,227,7,0,0,26,7,0,220,231,0,0,80,227, 4,0,0,26,7,0,140,224,39,6,208,229,36,20,160,225,1,0,80,225,226,5,0,139,4,112,135,226,1,128,88,226, 241,255,255,26,4,112,135,226,1,144,89,226,236,255,255,26,4,240,157,228,24,29,0,224,105,9,0,224,60,164,0,0, 80,166,0,0,120,164,0,0,80,166,0,0,192,164,0,0,80,166,0,0,52,165,0,0,80,166,0,0,80,166,0,0, 0,0,0,0,164,167,0,0,104,169,0,0,148,172,0,0,88,174,0,0,132,177,0,0,132,177,0,0,40,112,69,226, 7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,139,254,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,140,3,0,235,59,255,255,234,5,112,160,225,40,112,71,226, 7,0,220,231,0,0,80,227,251,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,121,254,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,125,3,0,235,41,255,255,234, 84,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58, 106,254,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,113,3,0,235,76,112,69,226,7,0,220,231, 192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,92,254,255,235,36,4,160,225, 155,24,92,229,1,0,80,225,0,0,0,42,99,3,0,235,12,255,255,234,44,112,69,226,7,0,220,231,192,0,16,227, 9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,77,254,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,88,3,0,235,40,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,63,254,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 74,3,0,235,36,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,49,254,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,60,3,0,235,36,112,133,226, 7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,35,254,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,46,3,0,235,44,112,133,226,7,0,220,231,192,0,16,227, 9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,21,254,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,32,3,0,235,197,254,255,234,44,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26, 7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,6,254,255,235,36,4,160,225,155,24,92,229,1,0,80,225, 0,0,0,42,24,3,0,235,40,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229, 3,0,80,227,4,0,0,58,248,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,16,3,0,235, 36,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58, 234,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,7,3,0,235,4,112,69,226,7,0,220,231, 192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,220,253,255,235,36,4,160,225, 155,24,92,229,1,0,80,225,0,0,0,42,255,2,0,235,4,112,133,226,7,0,220,231,192,0,16,227,9,0,0,26, 7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,206,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225, 0,0,0,42,246,2,0,235,40,112,133,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229, 3,0,80,227,4,0,0,58,192,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,237,2,0,235, 112,254,255,234,44,112,69,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,179,253,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,232,2,0,235,44,112,71,226,7,0,220,231,0,0,80,227, 241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,163,253,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,213,2,0,235,36,112,69,226,10,0,0,234,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,151,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 213,2,0,235,36,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,135,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 194,2,0,235,36,112,133,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,123,253,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,194,2,0,235,36,112,135,226,7,0,220,231,0,0,80,227, 241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,107,253,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,175,2,0,235,44,112,133,226,10,0,0,234,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,95,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 175,2,0,235,44,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,79,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 156,2,0,235,255,253,255,234,5,160,140,224,4,8,154,229,1,0,45,233,8,8,154,229,1,0,45,233,12,8,154,229, 1,0,45,233,44,8,154,229,1,0,45,233,52,8,154,229,1,0,45,233,84,8,154,229,1,0,45,233,88,8,154,229, 1,0,45,233,92,8,154,229,1,0,45,233,44,112,69,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,49,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,138,2,0,235,44,112,71,226, 7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,33,253,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,119,2,0,235,36,112,69,226, 10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,21,253,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,124,2,0,235,36,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227, 9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,5,253,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,105,2,0,235,36,112,133,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,249,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,110,2,0,235,36,112,135,226, 7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,233,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,91,2,0,235,44,112,133,226, 10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,221,252,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,96,2,0,235,44,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227, 9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,205,252,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,77,2,0,235,40,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,191,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 77,2,0,235,4,112,69,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,177,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,63,2,0,235,4,112,133,226, 7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,163,252,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,49,2,0,235,40,112,133,226,7,0,220,231,192,0,16,227, 9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,149,252,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,35,2,0,235,5,160,140,224,1,0,189,232,92,8,138,229,1,0,189,232,88,8,138,229, 1,0,189,232,84,8,138,229,1,0,189,232,52,8,138,229,1,0,189,232,44,8,138,229,1,0,189,232,12,8,138,229, 1,0,189,232,8,8,138,229,1,0,189,232,4,8,138,229,52,253,255,234,40,112,69,226,10,0,0,234,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,119,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 19,2,0,235,40,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,103,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 0,2,0,235,4,112,69,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,91,252,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,0,2,0,235,4,112,71,226,7,0,220,231,0,0,80,227, 241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,75,252,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,237,1,0,235,4,112,133,226,10,0,0,234,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,63,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 237,1,0,235,4,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,47,252,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 218,1,0,235,40,112,133,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,35,252,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,218,1,0,235,40,112,135,226,7,0,220,231,0,0,80,227, 241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,19,252,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,199,1,0,235,195,252,255,234,5,160,140,224,4,8,154,229, 1,0,45,233,8,8,154,229,1,0,45,233,12,8,154,229,1,0,45,233,44,8,154,229,1,0,45,233,52,8,154,229, 1,0,45,233,84,8,154,229,1,0,45,233,88,8,154,229,1,0,45,233,92,8,154,229,1,0,45,233,40,112,69,226, 10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,245,251,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,181,1,0,235,40,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227, 9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,229,251,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,162,1,0,235,4,112,69,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,217,251,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,167,1,0,235,4,112,71,226, 7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,201,251,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,148,1,0,235,4,112,133,226, 10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,189,251,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,153,1,0,235,4,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227, 9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,173,251,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,134,1,0,235,40,112,133,226,10,0,0,234,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,161,251,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,139,1,0,235,40,112,135,226, 7,0,220,231,0,0,80,227,241,255,255,10,32,0,16,227,9,0,0,10,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,145,251,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,120,1,0,235,44,112,69,226, 7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,131,251,255,235, 36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,120,1,0,235,36,112,69,226,7,0,220,231,192,0,16,227, 9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227,4,0,0,58,117,251,255,235,36,4,160,225,155,24,92,229, 1,0,80,225,0,0,0,42,126,1,0,235,36,112,133,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224, 37,6,208,229,3,0,80,227,4,0,0,58,103,251,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42, 133,1,0,235,44,112,133,226,7,0,220,231,192,0,16,227,9,0,0,26,7,0,140,224,37,6,208,229,3,0,80,227, 4,0,0,58,89,251,255,235,36,4,160,225,155,24,92,229,1,0,80,225,0,0,0,42,140,1,0,235,5,160,140,224, 1,0,189,232,92,8,138,229,1,0,189,232,88,8,138,229,1,0,189,232,84,8,138,229,1,0,189,232,52,8,138,229, 1,0,189,232,44,8,138,229,1,0,189,232,12,8,138,229,1,0,189,232,8,8,138,229,1,0,189,232,4,8,138,229, 248,251,255,234,44,112,69,226,7,0,220,231,192,0,16,227,4,0,0,26,7,160,140,224,36,6,26,229,22,20,90,229, 32,8,145,225,134,1,0,11,40,112,69,226,7,0,220,231,192,0,16,227,4,0,0,26,7,160,140,224,36,6,26,229, 22,20,90,229,32,8,145,225,133,1,0,11,36,112,69,226,7,0,220,231,192,0,16,227,4,0,0,26,7,160,140,224, 36,6,26,229,22,20,90,229,32,8,145,225,130,1,0,11,4,112,69,226,7,0,220,231,192,0,16,227,4,0,0,26, 7,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225,129,1,0,11,4,112,133,226,7,0,220,231,192,0,16,227, 4,0,0,26,7,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225,126,1,0,11,36,112,133,226,7,0,220,231, 192,0,16,227,4,0,0,26,7,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225,123,1,0,11,40,112,133,226, 7,0,220,231,192,0,16,227,4,0,0,26,7,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225,122,1,0,11, 44,112,133,226,7,0,220,231,192,0,16,227,4,0,0,26,7,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225, 119,1,0,11,175,251,255,234,7,160,140,224,8,72,138,229,14,240,160,225,4,224,45,229,143,1,0,235,4,240,157,228, 7,160,140,224,220,71,138,229,228,71,138,229,14,240,160,225,7,160,140,224,4,72,138,229,8,72,138,229,12,72,138,229, 84,72,138,229,92,72,138,229,14,240,160,225,7,160,140,224,4,72,138,229,8,72,138,229,12,72,138,229,44,72,138,229, 14,240,160,225,7,160,140,224,4,72,138,229,8,72,138,229,88,72,138,229,14,240,160,225,7,160,140,224,4,72,138,229, 8,72,138,229,12,72,138,229,52,72,138,229,14,240,160,225,7,160,140,224,4,72,138,229,44,72,138,229,88,72,138,229, 14,240,160,225,7,160,140,224,12,72,138,229,52,72,138,229,88,72,138,229,14,240,160,225,7,160,140,224,44,72,138,229, 52,72,138,229,88,72,138,229,14,240,160,225,4,224,45,229,75,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224, 48,72,138,229,114,1,0,235,179,1,0,235,4,240,157,228,4,224,45,229,110,1,0,235,4,224,157,228,4,224,45,229, 5,160,140,224,48,72,138,229,61,1,0,235,214,1,0,235,4,240,157,228,4,224,45,229,167,1,0,235,4,224,157,228, 4,224,45,229,5,160,140,224,48,72,138,229,52,1,0,235,205,1,0,235,4,240,157,228,4,224,45,229,202,1,0,235, 4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229,87,1,0,235,152,1,0,235,4,240,157,228,4,224,45,229, 39,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229,7,160,140,224,8,72,138,229,44,72,138,229, 52,72,138,229,88,72,138,229,73,1,0,235,138,1,0,235,4,240,157,228,4,224,45,229,69,1,0,235,4,224,157,228, 4,224,45,229,5,160,140,224,48,72,138,229,7,160,140,224,8,72,138,229,44,72,138,229,52,72,138,229,88,72,138,229, 15,1,0,235,168,1,0,235,4,240,157,228,4,224,45,229,121,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224, 48,72,138,229,7,160,140,224,8,72,138,229,44,72,138,229,52,72,138,229,88,72,138,229,1,1,0,235,154,1,0,235, 4,240,157,228,4,224,45,229,151,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229,7,160,140,224, 8,72,138,229,44,72,138,229,52,72,138,229,88,72,138,229,31,1,0,235,96,1,0,235,4,240,157,228,4,224,45,229, 7,160,140,224,8,72,138,229,44,72,138,229,52,72,138,229,88,72,138,229,234,0,0,235,21,1,0,235,86,1,0,235, 129,1,0,235,4,240,157,228,4,224,45,229,250,0,0,235,4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229, 33,1,0,235,54,1,0,235,4,240,157,228,4,224,45,229,29,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224, 48,72,138,229,236,0,0,235,89,1,0,235,4,240,157,228,4,224,45,229,42,1,0,235,4,224,157,228,4,224,45,229, 5,160,140,224,48,72,138,229,227,0,0,235,80,1,0,235,4,240,157,228,4,224,45,229,77,1,0,235,4,224,157,228, 4,224,45,229,5,160,140,224,48,72,138,229,6,1,0,235,27,1,0,235,4,240,157,228,4,224,45,229,214,0,0,235, 4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229,7,160,140,224,4,72,138,229,12,72,138,229,84,72,138,229, 92,72,138,229,248,0,0,235,13,1,0,235,4,240,157,228,4,224,45,229,244,0,0,235,4,224,157,228,4,224,45,229, 5,160,140,224,48,72,138,229,7,160,140,224,4,72,138,229,12,72,138,229,84,72,138,229,92,72,138,229,190,0,0,235, 43,1,0,235,4,240,157,228,4,224,45,229,252,0,0,235,4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229, 7,160,140,224,4,72,138,229,12,72,138,229,84,72,138,229,92,72,138,229,176,0,0,235,29,1,0,235,4,240,157,228, 4,224,45,229,26,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,48,72,138,229,7,160,140,224,4,72,138,229, 12,72,138,229,84,72,138,229,92,72,138,229,206,0,0,235,227,0,0,235,4,240,157,228,7,160,140,224,4,72,138,229, 92,72,138,229,5,0,140,224,40,0,80,229,0,0,80,227,0,0,0,10,12,72,138,229,5,0,140,224,4,0,80,229, 0,0,80,227,1,0,0,10,7,160,140,224,84,72,138,229,4,224,45,229,144,0,0,235,187,0,0,235,208,0,0,235, 251,0,0,235,4,240,157,228,7,160,140,224,12,72,138,229,84,72,138,229,5,0,140,224,40,0,80,229,0,0,80,227, 1,0,0,10,7,160,140,224,4,72,138,229,5,0,140,224,4,0,208,229,0,0,80,227,1,0,0,10,7,160,140,224, 92,72,138,229,4,224,45,229,123,0,0,235,166,0,0,235,187,0,0,235,230,0,0,235,4,240,157,228,7,160,140,224, 12,72,138,229,84,72,138,229,5,0,140,224,40,0,208,229,0,0,80,227,1,0,0,10,7,160,140,224,92,72,138,229, 5,0,140,224,4,0,80,229,0,0,80,227,1,0,0,10,7,160,140,224,4,72,138,229,4,224,45,229,102,0,0,235, 145,0,0,235,166,0,0,235,209,0,0,235,4,240,157,228,7,160,140,224,4,72,138,229,92,72,138,229,5,0,140,224, 40,0,208,229,0,0,80,227,1,0,0,10,7,160,140,224,84,72,138,229,5,0,140,224,4,0,208,229,0,0,80,227, 1,0,0,10,7,160,140,224,12,72,138,229,4,224,45,229,81,0,0,235,124,0,0,235,145,0,0,235,188,0,0,235, 4,240,157,228,7,160,140,224,4,72,138,229,8,72,138,229,12,72,138,229,44,72,138,229,84,72,138,229,92,72,138,229, 14,240,160,225,7,160,140,224,4,72,138,229,8,72,138,229,12,72,138,229,88,72,138,229,14,240,160,225,7,160,140,224, 4,72,138,229,8,72,138,229,12,72,138,229,44,72,138,229,84,72,138,229,92,72,138,229,14,240,160,225,7,160,140,224, 4,72,138,229,44,72,138,229,52,72,138,229,84,72,138,229,14,240,160,225,7,160,140,224,12,72,138,229,44,72,138,229, 52,72,138,229,92,72,138,229,14,240,160,225,7,160,140,224,4,72,138,229,12,72,138,229,44,72,138,229,84,72,138,229, 88,72,138,229,92,72,138,229,14,240,160,225,7,160,140,224,8,72,138,229,84,72,138,229,88,72,138,229,92,72,138,229, 14,240,160,225,7,160,140,224,4,72,138,229,12,72,138,229,52,72,138,229,84,72,138,229,88,72,138,229,92,72,138,229, 14,240,160,225,7,96,160,225,44,96,70,226,6,160,140,224,48,72,138,229,36,4,160,225,39,22,218,229,1,0,80,225, 12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224, 180,4,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,4,72,138,229,14,240,160,225,7,96,160,225, 40,96,70,226,6,160,140,224,48,72,138,229,36,4,160,225,39,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229, 0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,52,5,16,229,1,0,80,227, 2,0,0,186,237,255,255,26,6,160,140,224,8,72,138,229,14,240,160,225,7,96,160,225,36,96,70,226,6,160,140,224, 48,72,138,229,36,4,160,225,39,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10, 128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,180,4,16,229,1,0,80,227,2,0,0,186,237,255,255,26, 6,160,140,224,12,72,138,229,14,240,160,225,7,96,160,225,4,96,70,226,6,160,140,224,48,72,138,229,36,4,160,225, 39,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26, 62,0,0,226,128,0,139,224,52,4,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,44,72,138,229, 14,240,160,225,7,96,160,225,4,96,134,226,6,160,140,224,48,72,138,229,36,4,160,225,39,22,218,229,1,0,80,225, 12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224, 52,4,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,52,72,138,229,14,240,160,225,7,96,160,225, 36,96,134,226,6,160,140,224,48,72,138,229,36,4,160,225,39,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229, 0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,180,3,16,229,1,0,80,227, 2,0,0,186,237,255,255,26,6,160,140,224,84,72,138,229,14,240,160,225,7,96,160,225,40,96,134,226,6,160,140,224, 48,72,138,229,36,4,160,225,39,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10, 128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,52,3,16,229,1,0,80,227,2,0,0,186,237,255,255,26, 6,160,140,224,88,72,138,229,14,240,160,225,7,96,160,225,44,96,134,226,6,160,140,224,48,72,138,229,36,4,160,225, 39,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26, 62,0,0,226,128,0,139,224,180,3,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,92,72,138,229, 14,240,160,225,7,160,140,224,8,72,138,229,14,240,160,225,4,224,45,229,96,255,255,235,4,240,157,228,7,160,140,224, 220,71,138,229,228,71,138,229,14,240,160,225,7,160,140,224,4,72,138,229,8,72,138,229,12,72,138,229,84,72,138,229, 92,72,138,229,14,240,160,225,7,160,140,224,4,72,138,229,8,72,138,229,12,72,138,229,44,72,138,229,52,72,138,229, 88,72,138,229,14,240,160,225,4,224,45,229,52,255,255,235,95,255,255,235,160,255,255,235,203,255,255,235,4,240,157,228, 4,224,45,229,112,255,255,235,133,255,255,235,176,255,255,235,65,255,255,235,4,240,157,228,4,224,45,229,204,82,159,229, 30,11,160,227,131,144,160,227,4,0,133,228,1,144,89,226,252,255,255,26,168,90,28,229,5,160,140,224,15,2,218,229, 0,0,80,227,6,0,0,26,2,64,218,229,4,68,160,225,3,64,132,226,0,0,90,229,30,0,0,226,128,0,143,224, 148,242,144,229,5,80,140,224,172,90,21,229,0,0,85,227,240,255,255,26,182,15,92,229,0,0,80,227,18,0,0,10, 84,112,160,227,9,144,160,227,5,74,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26, 7,0,140,224,38,6,208,229,36,20,160,225,1,0,80,225,137,6,0,139,4,112,135,226,1,128,88,226,244,255,255,26, 4,112,135,226,1,144,89,226,240,255,255,26,183,15,92,229,0,0,80,227,18,0,0,10,84,112,160,227,9,144,160,227, 70,76,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224,38,6,208,229, 36,20,160,225,1,0,80,225,109,6,0,139,4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226, 240,255,255,26,184,15,92,229,0,0,80,227,18,0,0,10,84,112,160,227,9,144,160,227,13,75,160,227,3,64,132,226, 9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224,38,6,208,229,36,20,160,225,1,0,80,225, 79,6,0,139,4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26,185,15,92,229, 0,0,80,227,18,0,0,10,84,112,160,227,9,144,160,227,50,76,160,227,3,64,132,226,9,128,160,227,7,0,220,231, 0,0,80,227,4,0,0,26,7,0,140,224,38,6,208,229,36,20,160,225,1,0,80,225,50,6,0,139,4,112,135,226, 1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226,240,255,255,26,186,15,92,229,0,0,80,227,18,0,0,10, 84,112,160,227,7,144,160,227,2,74,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26, 7,0,140,224,38,6,208,229,36,20,160,225,1,0,80,225,24,6,0,139,4,112,135,226,1,128,88,226,244,255,255,26, 4,112,135,226,1,144,89,226,240,255,255,26,187,15,92,229,0,0,80,227,18,0,0,10,84,112,160,227,8,144,160,227, 30,76,160,227,3,64,132,226,9,128,160,227,7,0,220,231,0,0,80,227,4,0,0,26,7,0,140,224,38,6,208,229, 36,20,160,225,1,0,80,225,255,5,0,139,4,112,135,226,1,128,88,226,244,255,255,26,4,112,135,226,1,144,89,226, 240,255,255,26,188,15,92,229,0,0,80,227,22,0,0,10,84,112,160,227,8,144,160,227,2,75,160,227,3,64,132,226, 9,128,160,227,72,80,159,229,1,0,213,228,0,0,80,227,7,0,0,26,7,0,220,231,0,0,80,227,4,0,0,26, 7,0,140,224,38,6,208,229,36,20,160,225,1,0,80,225,226,5,0,139,4,112,135,226,1,128,88,226,241,255,255,26, 4,112,135,226,1,144,89,226,236,255,255,26,4,240,157,228,36,31,0,224,117,9,0,224,24,191,0,0,44,193,0,0, 84,191,0,0,44,193,0,0,156,191,0,0,44,193,0,0,16,192,0,0,44,193,0,0,44,193,0,0,0,0,0,0, 128,194,0,0,68,196,0,0,112,199,0,0,52,201,0,0,96,204,0,0,96,204,0,0,40,112,133,226,7,0,220,231, 160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,144,247,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,140,3,0,235,59,255,255,234,5,112,160,225,40,112,135,226,7,0,220,231, 0,0,80,227,251,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 126,247,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,125,3,0,235,41,255,255,234,84,112,133,226, 7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,111,247,255,235, 36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,113,3,0,235,76,112,133,226,7,0,220,231,160,0,16,227, 9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,97,247,255,235,36,4,160,225,156,24,92,229, 1,0,80,225,0,0,0,42,99,3,0,235,12,255,255,234,44,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,82,247,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,88,3,0,235,40,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,68,247,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,74,3,0,235, 36,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 54,247,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,60,3,0,235,36,112,69,226,7,0,220,231, 160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,40,247,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,46,3,0,235,44,112,69,226,7,0,220,231,160,0,16,227,9,0,0,26, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,26,247,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,32,3,0,235,197,254,255,234,44,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224, 36,6,208,229,3,0,80,227,4,0,0,58,11,247,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42, 24,3,0,235,40,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227, 4,0,0,58,253,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,16,3,0,235,36,112,133,226, 7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,239,246,255,235, 36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,7,3,0,235,4,112,133,226,7,0,220,231,160,0,16,227, 9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,225,246,255,235,36,4,160,225,156,24,92,229, 1,0,80,225,0,0,0,42,255,2,0,235,4,112,69,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224, 36,6,208,229,3,0,80,227,4,0,0,58,211,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42, 246,2,0,235,40,112,69,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227, 4,0,0,58,197,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,237,2,0,235,112,254,255,234, 44,112,133,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,184,246,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,232,2,0,235,44,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10, 64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,168,246,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,213,2,0,235,36,112,133,226,10,0,0,234,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,156,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,213,2,0,235, 36,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,140,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,194,2,0,235, 36,112,69,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,128,246,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,194,2,0,235,36,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10, 64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,112,246,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,175,2,0,235,44,112,69,226,10,0,0,234,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,100,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,175,2,0,235, 44,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,84,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,156,2,0,235, 255,253,255,234,5,160,140,224,104,10,154,229,1,0,45,233,100,10,154,229,1,0,45,233,96,10,154,229,1,0,45,233, 64,10,154,229,1,0,45,233,56,10,154,229,1,0,45,233,24,10,154,229,1,0,45,233,20,10,154,229,1,0,45,233, 16,10,154,229,1,0,45,233,44,112,133,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 54,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,138,2,0,235,44,112,135,226,7,0,220,231, 0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 38,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,119,2,0,235,36,112,133,226,10,0,0,234, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,26,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,124,2,0,235,36,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,10,246,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,105,2,0,235,36,112,69,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 254,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,110,2,0,235,36,112,71,226,7,0,220,231, 0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 238,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,91,2,0,235,44,112,69,226,10,0,0,234, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,226,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,96,2,0,235,44,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,210,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,77,2,0,235,40,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,196,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,77,2,0,235, 4,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 182,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,63,2,0,235,4,112,69,226,7,0,220,231, 160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,168,245,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,49,2,0,235,40,112,69,226,7,0,220,231,160,0,16,227,9,0,0,26, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,154,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,35,2,0,235,5,160,140,224,1,0,189,232,16,10,138,229,1,0,189,232,20,10,138,229,1,0,189,232, 24,10,138,229,1,0,189,232,56,10,138,229,1,0,189,232,64,10,138,229,1,0,189,232,96,10,138,229,1,0,189,232, 100,10,138,229,1,0,189,232,104,10,138,229,52,253,255,234,40,112,133,226,10,0,0,234,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,124,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,19,2,0,235, 40,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,108,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,0,2,0,235, 4,112,133,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,96,245,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,0,2,0,235,4,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10, 64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,80,245,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,237,1,0,235,4,112,69,226,10,0,0,234,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,68,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,237,1,0,235, 4,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,52,245,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,218,1,0,235, 40,112,69,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,40,245,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,218,1,0,235,40,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10, 64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,24,245,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,199,1,0,235,195,252,255,234,5,160,140,224,104,10,154,229,1,0,45,233, 100,10,154,229,1,0,45,233,96,10,154,229,1,0,45,233,64,10,154,229,1,0,45,233,56,10,154,229,1,0,45,233, 24,10,154,229,1,0,45,233,20,10,154,229,1,0,45,233,16,10,154,229,1,0,45,233,40,112,133,226,10,0,0,234, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,250,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,181,1,0,235,40,112,135,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,234,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,162,1,0,235,4,112,133,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 222,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,167,1,0,235,4,112,135,226,7,0,220,231, 0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 206,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,148,1,0,235,4,112,69,226,10,0,0,234, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,194,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,153,1,0,235,4,112,71,226,7,0,220,231,0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,178,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,134,1,0,235,40,112,69,226,10,0,0,234,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 166,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,139,1,0,235,40,112,71,226,7,0,220,231, 0,0,80,227,241,255,255,10,64,0,16,227,9,0,0,10,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 150,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,120,1,0,235,44,112,133,226,7,0,220,231, 160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,136,244,255,235,36,4,160,225, 156,24,92,229,1,0,80,225,0,0,0,42,120,1,0,235,36,112,133,226,7,0,220,231,160,0,16,227,9,0,0,26, 7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58,122,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225, 0,0,0,42,126,1,0,235,36,112,69,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229, 3,0,80,227,4,0,0,58,108,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,133,1,0,235, 44,112,69,226,7,0,220,231,160,0,16,227,9,0,0,26,7,0,140,224,36,6,208,229,3,0,80,227,4,0,0,58, 94,244,255,235,36,4,160,225,156,24,92,229,1,0,80,225,0,0,0,42,140,1,0,235,5,160,140,224,1,0,189,232, 16,10,138,229,1,0,189,232,20,10,138,229,1,0,189,232,24,10,138,229,1,0,189,232,56,10,138,229,1,0,189,232, 64,10,138,229,1,0,189,232,96,10,138,229,1,0,189,232,100,10,138,229,1,0,189,232,104,10,138,229,248,251,255,234, 44,112,133,226,7,0,220,231,160,0,16,227,4,0,0,26,7,160,140,224,34,6,26,229,24,20,90,229,32,8,145,225, 134,1,0,11,40,112,133,226,7,0,220,231,160,0,16,227,4,0,0,26,7,160,140,224,34,6,26,229,24,20,90,229, 32,8,145,225,133,1,0,11,36,112,133,226,7,0,220,231,160,0,16,227,4,0,0,26,7,160,140,224,34,6,26,229, 24,20,90,229,32,8,145,225,130,1,0,11,4,112,133,226,7,0,220,231,160,0,16,227,4,0,0,26,7,160,140,224, 34,6,26,229,24,20,90,229,32,8,145,225,129,1,0,11,4,112,69,226,7,0,220,231,160,0,16,227,4,0,0,26, 7,160,140,224,34,6,26,229,24,20,90,229,32,8,145,225,126,1,0,11,36,112,69,226,7,0,220,231,160,0,16,227, 4,0,0,26,7,160,140,224,34,6,26,229,24,20,90,229,32,8,145,225,123,1,0,11,40,112,69,226,7,0,220,231, 160,0,16,227,4,0,0,26,7,160,140,224,34,6,26,229,24,20,90,229,32,8,145,225,122,1,0,11,44,112,69,226, 7,0,220,231,160,0,16,227,4,0,0,26,7,160,140,224,34,6,26,229,24,20,90,229,32,8,145,225,119,1,0,11, 175,251,255,234,7,160,140,224,100,74,138,229,14,240,160,225,4,224,45,229,143,1,0,235,4,240,157,228,7,160,140,224, 144,74,138,229,136,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229,100,74,138,229,96,74,138,229,24,74,138,229, 16,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229,100,74,138,229,96,74,138,229,64,74,138,229,14,240,160,225, 7,160,140,224,104,74,138,229,100,74,138,229,20,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229,100,74,138,229, 96,74,138,229,56,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229,64,74,138,229,20,74,138,229,14,240,160,225, 7,160,140,224,96,74,138,229,56,74,138,229,20,74,138,229,14,240,160,225,7,160,140,224,64,74,138,229,56,74,138,229, 20,74,138,229,14,240,160,225,4,224,45,229,75,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229, 114,1,0,235,179,1,0,235,4,240,157,228,4,224,45,229,110,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224, 60,74,138,229,61,1,0,235,214,1,0,235,4,240,157,228,4,224,45,229,167,1,0,235,4,224,157,228,4,224,45,229, 5,160,140,224,60,74,138,229,52,1,0,235,205,1,0,235,4,240,157,228,4,224,45,229,202,1,0,235,4,224,157,228, 4,224,45,229,5,160,140,224,60,74,138,229,87,1,0,235,152,1,0,235,4,240,157,228,4,224,45,229,39,1,0,235, 4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229,7,160,140,224,100,74,138,229,64,74,138,229,56,74,138,229, 20,74,138,229,73,1,0,235,138,1,0,235,4,240,157,228,4,224,45,229,69,1,0,235,4,224,157,228,4,224,45,229, 5,160,140,224,60,74,138,229,7,160,140,224,100,74,138,229,64,74,138,229,56,74,138,229,20,74,138,229,15,1,0,235, 168,1,0,235,4,240,157,228,4,224,45,229,121,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229, 7,160,140,224,100,74,138,229,64,74,138,229,56,74,138,229,20,74,138,229,1,1,0,235,154,1,0,235,4,240,157,228, 4,224,45,229,151,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229,7,160,140,224,100,74,138,229, 64,74,138,229,56,74,138,229,20,74,138,229,31,1,0,235,96,1,0,235,4,240,157,228,7,160,140,224,100,74,138,229, 64,74,138,229,56,74,138,229,20,74,138,229,4,224,45,229,234,0,0,235,21,1,0,235,86,1,0,235,129,1,0,235, 4,240,157,228,4,224,45,229,250,0,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229,33,1,0,235, 54,1,0,235,4,240,157,228,4,224,45,229,29,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229, 236,0,0,235,89,1,0,235,4,240,157,228,4,224,45,229,42,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224, 60,74,138,229,227,0,0,235,80,1,0,235,4,240,157,228,4,224,45,229,77,1,0,235,4,224,157,228,4,224,45,229, 5,160,140,224,60,74,138,229,6,1,0,235,27,1,0,235,4,240,157,228,4,224,45,229,214,0,0,235,4,224,157,228, 4,224,45,229,5,160,140,224,60,74,138,229,7,160,140,224,104,74,138,229,96,74,138,229,24,74,138,229,16,74,138,229, 248,0,0,235,13,1,0,235,4,240,157,228,4,224,45,229,244,0,0,235,4,224,157,228,4,224,45,229,5,160,140,224, 60,74,138,229,7,160,140,224,104,74,138,229,96,74,138,229,24,74,138,229,16,74,138,229,190,0,0,235,43,1,0,235, 4,240,157,228,4,224,45,229,252,0,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229,7,160,140,224, 104,74,138,229,96,74,138,229,24,74,138,229,16,74,138,229,176,0,0,235,29,1,0,235,4,240,157,228,4,224,45,229, 26,1,0,235,4,224,157,228,4,224,45,229,5,160,140,224,60,74,138,229,7,160,140,224,104,74,138,229,96,74,138,229, 24,74,138,229,16,74,138,229,206,0,0,235,227,0,0,235,4,240,157,228,7,160,140,224,104,74,138,229,16,74,138,229, 5,0,140,224,40,0,208,229,0,0,80,227,0,0,0,10,96,74,138,229,5,0,140,224,4,0,208,229,0,0,80,227, 1,0,0,10,7,160,140,224,24,74,138,229,4,224,45,229,144,0,0,235,187,0,0,235,208,0,0,235,251,0,0,235, 4,240,157,228,7,160,140,224,96,74,138,229,24,74,138,229,5,0,140,224,40,0,208,229,0,0,80,227,1,0,0,10, 7,160,140,224,104,74,138,229,5,0,140,224,4,0,80,229,0,0,80,227,1,0,0,10,7,160,140,224,16,74,138,229, 4,224,45,229,123,0,0,235,166,0,0,235,187,0,0,235,230,0,0,235,4,240,157,228,7,160,140,224,96,74,138,229, 24,74,138,229,5,0,140,224,40,0,80,229,0,0,80,227,1,0,0,10,7,160,140,224,16,74,138,229,5,0,140,224, 4,0,208,229,0,0,80,227,1,0,0,10,7,160,140,224,104,74,138,229,4,224,45,229,102,0,0,235,145,0,0,235, 166,0,0,235,209,0,0,235,4,240,157,228,7,160,140,224,104,74,138,229,16,74,138,229,5,0,140,224,40,0,80,229, 0,0,80,227,1,0,0,10,7,160,140,224,24,74,138,229,5,0,140,224,4,0,80,229,0,0,80,227,1,0,0,10, 7,160,140,224,96,74,138,229,4,224,45,229,81,0,0,235,124,0,0,235,145,0,0,235,188,0,0,235,4,240,157,228, 7,160,140,224,104,74,138,229,100,74,138,229,96,74,138,229,64,74,138,229,24,74,138,229,16,74,138,229,14,240,160,225, 7,160,140,224,104,74,138,229,100,74,138,229,96,74,138,229,20,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229, 100,74,138,229,96,74,138,229,64,74,138,229,24,74,138,229,16,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229, 64,74,138,229,56,74,138,229,24,74,138,229,14,240,160,225,7,160,140,224,96,74,138,229,64,74,138,229,56,74,138,229, 16,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229,96,74,138,229,64,74,138,229,24,74,138,229,20,74,138,229, 16,74,138,229,14,240,160,225,7,160,140,224,100,74,138,229,24,74,138,229,20,74,138,229,16,74,138,229,14,240,160,225, 7,160,140,224,104,74,138,229,96,74,138,229,56,74,138,229,24,74,138,229,20,74,138,229,16,74,138,229,14,240,160,225, 7,96,160,225,44,96,134,226,6,160,140,224,60,74,138,229,36,4,160,225,38,22,218,229,1,0,80,225,12,0,0,42, 0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,180,3,16,229, 1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,104,74,138,229,14,240,160,225,7,96,160,225,40,96,134,226, 6,160,140,224,60,74,138,229,36,4,160,225,38,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227, 245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,52,3,16,229,1,0,80,227,2,0,0,186, 237,255,255,26,6,160,140,224,100,74,138,229,14,240,160,225,7,96,160,225,36,96,134,226,6,160,140,224,60,74,138,229, 36,4,160,225,38,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227, 7,0,0,26,62,0,0,226,128,0,139,224,180,3,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224, 96,74,138,229,14,240,160,225,7,96,160,225,4,96,134,226,6,160,140,224,60,74,138,229,36,4,160,225,38,22,218,229, 1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226, 128,0,139,224,52,4,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,64,74,138,229,14,240,160,225, 7,96,160,225,4,96,70,226,6,160,140,224,60,74,138,229,36,4,160,225,38,22,218,229,1,0,80,225,12,0,0,42, 0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,52,4,16,229, 1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,56,74,138,229,14,240,160,225,7,96,160,225,36,96,70,226, 6,160,140,224,60,74,138,229,36,4,160,225,38,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227, 245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226,128,0,139,224,180,4,16,229,1,0,80,227,2,0,0,186, 237,255,255,26,6,160,140,224,24,74,138,229,14,240,160,225,7,96,160,225,40,96,70,226,6,160,140,224,60,74,138,229, 36,4,160,225,38,22,218,229,1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227, 7,0,0,26,62,0,0,226,128,0,139,224,52,5,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224, 20,74,138,229,14,240,160,225,7,96,160,225,44,96,70,226,6,160,140,224,60,74,138,229,36,4,160,225,38,22,218,229, 1,0,80,225,12,0,0,42,0,0,90,229,0,0,80,227,245,255,255,10,128,0,16,227,7,0,0,26,62,0,0,226, 128,0,139,224,180,4,16,229,1,0,80,227,2,0,0,186,237,255,255,26,6,160,140,224,16,74,138,229,14,240,160,225, 7,160,140,224,100,74,138,229,14,240,160,225,4,224,45,229,96,255,255,235,4,240,157,228,7,160,140,224,144,74,138,229, 136,74,138,229,14,240,160,225,7,160,140,224,104,74,138,229,100,74,138,229,96,74,138,229,24,74,138,229,16,74,138,229, 14,240,160,225,7,160,140,224,104,74,138,229,100,74,138,229,96,74,138,229,64,74,138,229,56,74,138,229,20,74,138,229, 14,240,160,225,4,224,45,229,52,255,255,235,95,255,255,235,160,255,255,235,203,255,255,235,4,240,157,228,4,224,45,229, 112,255,255,235,133,255,255,235,176,255,255,235,65,255,255,235,4,240,157,228,40,0,86,229,128,0,16,227,6,0,0,26, 64,0,16,227,0,0,0,26,120,48,131,226,39,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,27,6,0,234, 0,16,160,227,40,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226, 40,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224, 64,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224,4,6,0,234,84,0,86,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,75,48,131,226,83,16,86,229,15,0,160,227,144,1,10,224, 10,64,132,224,76,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,75,48,131,226,75,16,86,229, 15,0,160,227,144,1,10,224,10,64,132,224,239,5,0,234,44,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,105,48,131,226,43,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,44,0,214,229,128,0,16,227, 6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,45,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224, 40,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,39,16,86,229,21,0,160,227, 144,1,10,224,10,64,132,224,36,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226, 35,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,105,48,131,226,37,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,188,5,0,234,36,0,86,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,35,16,86,229,16,0,160,227,144,1,10,224, 10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,37,16,214,229, 16,0,160,227,144,1,10,224,10,64,132,224,167,5,0,234,44,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,120,48,131,226,43,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,40,0,86,229,128,0,16,227, 6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226,39,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224, 40,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226,41,16,214,229,24,0,160,227, 144,1,10,224,10,64,132,224,36,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226, 35,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,4,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,120,48,131,226,3,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,4,0,214,229,128,0,16,227, 6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226,5,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224, 106,5,0,234,44,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,43,16,86,229, 21,0,160,227,144,1,10,224,10,64,132,224,40,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26, 105,48,131,226,39,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,40,0,214,229,128,0,16,227,6,0,0,26, 64,0,16,227,0,0,0,26,105,48,131,226,41,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,36,0,86,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,35,16,86,229,21,0,160,227,144,1,10,224, 10,64,132,224,4,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,3,16,86,229, 21,0,160,227,144,1,10,224,10,64,132,224,4,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26, 105,48,131,226,5,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,45,5,0,234,4,0,86,229,128,0,16,227, 6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,3,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224, 4,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,5,16,214,229,16,0,160,227, 144,1,10,224,10,64,132,224,24,5,0,234,40,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26, 80,48,131,226,39,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,40,0,214,229,128,0,16,227,6,0,0,26, 64,0,16,227,0,0,0,26,80,48,131,226,41,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,4,0,86,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,3,16,86,229,16,0,160,227,144,1,10,224, 10,64,132,224,4,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,5,16,214,229, 16,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,44,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26, 1,0,215,229,0,16,129,224,50,48,131,226,44,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227, 4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224, 10,64,132,224,0,16,160,227,44,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224, 35,48,131,226,44,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229, 10,16,129,224,64,0,16,227,0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227, 36,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,36,112,71,226, 0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227, 0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,36,112,134,226,0,0,87,229, 0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,35,48,131,226,36,112,135,226,0,0,87,229,0,0,80,227, 248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,35,48,131,226, 7,0,160,227,144,1,10,224,10,64,132,224,151,4,0,234,44,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,80,48,131,226,43,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,44,0,214,229,128,0,16,227, 6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,45,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224, 36,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226,35,16,86,229,16,0,160,227, 144,1,10,224,10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226, 37,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,40,112,70,226,0,0,87,229,0,0,80,227, 6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,40,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10, 128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227, 144,1,10,224,10,64,132,224,0,16,160,227,40,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229, 0,16,129,224,40,48,131,226,40,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26, 1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,40,48,131,226,8,0,160,227,144,1,10,224,10,64,132,224, 0,16,160,227,4,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,35,48,131,226, 4,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224, 64,0,16,227,0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,4,112,134,226, 0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,35,48,131,226,4,112,135,226,0,0,87,229, 0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26, 35,48,131,226,7,0,160,227,144,1,10,224,10,64,132,224,22,4,0,234,44,0,86,229,128,0,16,227,6,0,0,26, 64,0,16,227,0,0,0,26,105,48,131,226,43,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,44,0,214,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,45,16,214,229,21,0,160,227,144,1,10,224, 10,64,132,224,1,4,0,234,44,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226, 43,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,44,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,80,48,131,226,45,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,236,3,0,234,40,0,86,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,39,16,86,229,21,0,160,227,144,1,10,224, 10,64,132,224,225,3,0,234,44,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226, 43,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,214,3,0,234,44,0,86,229,128,0,16,227,6,0,0,26, 64,0,16,227,0,0,0,26,105,48,131,226,43,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,203,3,0,234, 40,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226,39,16,86,229,24,0,160,227, 144,1,10,224,10,64,132,224,40,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226, 41,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224,182,3,0,234,40,0,86,229,128,0,16,227,6,0,0,26, 64,0,16,227,0,0,0,26,105,48,131,226,39,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,40,0,214,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226,41,16,214,229,21,0,160,227,144,1,10,224, 10,64,132,224,161,3,0,234,40,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,80,48,131,226, 39,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,40,0,214,229,128,0,16,227,6,0,0,26,64,0,16,227, 0,0,0,26,80,48,131,226,41,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,140,3,0,234,36,0,86,229, 128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,120,48,131,226,35,16,86,229,24,0,160,227,144,1,10,224, 10,64,132,224,129,3,0,234,36,0,86,229,128,0,16,227,6,0,0,26,64,0,16,227,0,0,0,26,105,48,131,226, 35,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,118,3,0,234,0,16,160,227,44,112,70,226,0,0,87,229, 0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,44,112,71,226,0,0,87,229,0,0,80,227, 248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,50,48,131,226, 10,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,44,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26, 1,0,215,229,0,16,129,224,35,48,131,226,44,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227, 4,0,0,26,1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224, 10,64,132,224,73,3,0,234,0,16,160,227,40,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229, 0,16,129,224,50,48,131,226,40,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26, 1,160,215,229,10,16,129,224,64,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224, 0,16,160,227,40,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,40,48,131,226, 40,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224, 64,0,16,227,0,0,0,26,40,48,131,226,8,0,160,227,144,1,10,224,10,64,132,224,28,3,0,234,40,0,214,229, 128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226,41,16,214,229,24,0,160,227,144,1,10,224, 10,64,132,224,45,3,0,234,0,16,160,227,40,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229, 0,16,129,224,50,48,131,226,40,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26, 1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224, 22,3,0,234,84,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,75,48,131,226,85,16,214,229, 15,0,160,227,144,1,10,224,10,64,132,224,76,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26, 75,48,131,226,77,16,214,229,15,0,160,227,144,1,10,224,10,64,132,224,1,3,0,234,44,0,214,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,45,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224, 44,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,43,16,86,229,21,0,160,227, 144,1,10,224,10,64,132,224,40,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226, 41,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,105,48,131,226,37,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,36,0,86,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,35,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224, 206,2,0,234,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,37,16,214,229, 16,0,160,227,144,1,10,224,10,64,132,224,36,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26, 80,48,131,226,35,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,185,2,0,234,44,0,214,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226,45,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224, 40,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226,41,16,214,229,24,0,160,227, 144,1,10,224,10,64,132,224,40,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226, 39,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,120,48,131,226,37,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224,4,0,214,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226,5,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224, 4,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226,3,16,86,229,24,0,160,227, 144,1,10,224,10,64,132,224,124,2,0,234,44,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26, 105,48,131,226,45,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,40,0,214,229,128,0,16,227,6,0,0,26, 32,0,16,227,0,0,0,26,105,48,131,226,41,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,40,0,86,229, 128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,39,16,86,229,21,0,160,227,144,1,10,224, 10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,37,16,214,229, 21,0,160,227,144,1,10,224,10,64,132,224,4,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26, 105,48,131,226,5,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,4,0,86,229,128,0,16,227,6,0,0,26, 32,0,16,227,0,0,0,26,105,48,131,226,3,16,86,229,21,0,160,227,144,1,10,224,10,64,132,224,63,2,0,234, 4,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,5,16,214,229,16,0,160,227, 144,1,10,224,10,64,132,224,4,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226, 3,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,42,2,0,234,40,0,214,229,128,0,16,227,6,0,0,26, 32,0,16,227,0,0,0,26,80,48,131,226,41,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,40,0,86,229, 128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,39,16,86,229,16,0,160,227,144,1,10,224, 10,64,132,224,4,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,5,16,214,229, 16,0,160,227,144,1,10,224,10,64,132,224,4,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26, 80,48,131,226,3,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,44,112,134,226,0,0,87,229, 0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,44,112,135,226,0,0,87,229,0,0,80,227, 248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,50,48,131,226, 10,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,44,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26, 1,0,215,229,0,16,129,224,35,48,131,226,44,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227, 4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224, 10,64,132,224,0,16,160,227,36,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224, 50,48,131,226,36,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229, 10,16,129,224,32,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227, 36,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,35,48,131,226,36,112,71,226, 0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227, 0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224,10,64,132,224,169,1,0,234,44,0,214,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,45,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224, 44,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,43,16,86,229,16,0,160,227, 144,1,10,224,10,64,132,224,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226, 37,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,36,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,80,48,131,226,35,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,40,112,134,226, 0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,40,112,135,226,0,0,87,229, 0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26, 50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,40,112,70,226,0,0,87,229,0,0,80,227, 6,0,0,26,1,0,215,229,0,16,129,224,40,48,131,226,40,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10, 128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,40,48,131,226,8,0,160,227, 144,1,10,224,10,64,132,224,0,16,160,227,4,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229, 0,16,129,224,35,48,131,226,4,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26, 1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224,10,64,132,224, 0,16,160,227,4,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,35,48,131,226, 4,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224, 32,0,16,227,0,0,0,26,35,48,131,226,7,0,160,227,144,1,10,224,10,64,132,224,40,1,0,234,44,0,214,229, 128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,45,16,214,229,21,0,160,227,144,1,10,224, 10,64,132,224,44,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,43,16,86,229, 21,0,160,227,144,1,10,224,10,64,132,224,19,1,0,234,44,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,80,48,131,226,45,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,44,0,86,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,43,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224, 254,0,0,234,40,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,41,16,214,229, 21,0,160,227,144,1,10,224,10,64,132,224,243,0,0,234,44,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,120,48,131,226,45,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224,232,0,0,234,44,0,214,229, 128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,45,16,214,229,21,0,160,227,144,1,10,224, 10,64,132,224,221,0,0,234,40,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226, 41,16,214,229,24,0,160,227,144,1,10,224,10,64,132,224,40,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,120,48,131,226,39,16,86,229,24,0,160,227,144,1,10,224,10,64,132,224,200,0,0,234,40,0,214,229, 128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,41,16,214,229,21,0,160,227,144,1,10,224, 10,64,132,224,40,0,86,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,105,48,131,226,39,16,86,229, 21,0,160,227,144,1,10,224,10,64,132,224,179,0,0,234,40,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,80,48,131,226,41,16,214,229,16,0,160,227,144,1,10,224,10,64,132,224,40,0,86,229,128,0,16,227, 6,0,0,26,32,0,16,227,0,0,0,26,80,48,131,226,39,16,86,229,16,0,160,227,144,1,10,224,10,64,132,224, 158,0,0,234,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227,0,0,0,26,120,48,131,226,37,16,214,229, 24,0,160,227,144,1,10,224,10,64,132,224,147,0,0,234,36,0,214,229,128,0,16,227,6,0,0,26,32,0,16,227, 0,0,0,26,105,48,131,226,37,16,214,229,21,0,160,227,144,1,10,224,10,64,132,224,136,0,0,234,0,16,160,227, 44,112,134,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,44,112,135,226, 0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227, 0,0,0,26,50,48,131,226,10,0,160,227,144,1,10,224,10,64,132,224,0,16,160,227,44,112,70,226,0,0,87,229, 0,0,80,227,6,0,0,26,1,0,215,229,0,16,129,224,35,48,131,226,44,112,71,226,0,0,87,229,0,0,80,227, 248,255,255,10,128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,35,48,131,226, 7,0,160,227,144,1,10,224,10,64,132,224,91,0,0,234,0,16,160,227,40,112,134,226,0,0,87,229,0,0,80,227, 6,0,0,26,1,0,215,229,0,16,129,224,50,48,131,226,40,112,135,226,0,0,87,229,0,0,80,227,248,255,255,10, 128,0,16,227,4,0,0,26,1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,50,48,131,226,10,0,160,227, 144,1,10,224,10,64,132,224,0,16,160,227,40,112,70,226,0,0,87,229,0,0,80,227,6,0,0,26,1,0,215,229, 0,16,129,224,40,48,131,226,40,112,71,226,0,0,87,229,0,0,80,227,248,255,255,10,128,0,16,227,4,0,0,26, 1,160,215,229,10,16,129,224,32,0,16,227,0,0,0,26,40,48,131,226,8,0,160,227,144,1,10,224,10,64,132,224, 46,0,0,234,116,83,159,229,0,0,160,227,131,144,160,227,4,0,197,228,1,144,89,226,252,255,255,26,152,95,28,229, 5,96,140,224,0,16,86,229,30,16,1,226,129,32,139,224,0,48,160,227,1,0,214,229,52,162,18,229,144,10,4,224, 13,2,214,229,0,16,129,225,129,0,143,224,176,240,144,229,164,48,131,224,163,49,160,225,180,113,18,229,84,0,69,226, 0,0,151,231,0,48,131,224,244,1,18,229,0,0,83,225,0,48,160,33,116,2,18,229,163,50,128,224,2,48,198,229, 152,95,22,229,84,0,85,227,228,255,255,42,148,95,28,229,5,96,140,224,0,16,86,229,30,16,1,226,129,32,139,224, 0,48,160,227,1,0,214,229,52,162,18,229,144,10,4,224,15,2,214,229,0,16,129,225,129,0,143,224,128,241,144,229, 164,48,131,224,163,49,160,225,180,113,18,229,109,15,101,226,0,0,151,231,0,48,131,224,244,1,18,229,0,0,83,225, 0,48,160,33,116,2,18,229,163,50,128,224,2,48,198,229,152,95,22,229,84,0,85,227,228,255,255,42,14,240,160,225, 212,214,0,0,208,216,0,0,0,215,0,0,196,217,0,0,92,215,0,0,196,217,0,0,176,215,0,0,196,217,0,0, 196,217,0,0,0,0,0,0,172,219,0,0,12,219,0,0,176,221,0,0,16,221,0,0,252,214,0,0,0,0,0,0, 252,214,0,0,232,223,0,0,252,214,0,0,20,224,0,0,252,214,0,0,20,224,0,0,20,223,0,0,20,224,0,0, 20,224,0,0,0,0,0,0,148,225,0,0,148,225,0,0,252,214,0,0,104,223,0,0,252,214,0,0,0,0,0,0, 212,214,0,0,64,224,0,0,0,215,0,0,148,224,0,0,252,214,0,0,148,224,0,0,188,223,0,0,148,224,0,0, 148,224,0,0,0,0,0,0,252,214,0,0,232,224,0,0,72,226,0,0,72,226,0,0,252,214,0,0,0,0,0,0, 252,214,0,0,60,225,0,0,252,214,0,0,104,225,0,0,252,214,0,0,104,225,0,0,40,216,0,0,104,225,0,0, 104,225,0,0,0,0,0,0,92,220,0,0,92,220,0,0,252,214,0,0,124,216,0,0,252,214,0,0,0,0,0,0, 252,214,0,0,112,217,0,0,252,214,0,0,100,218,0,0,252,214,0,0,100,218,0,0,252,214,0,0,100,218,0,0, 100,218,0,0,0,0,0,0,252,214,0,0,184,218,0,0,96,222,0,0,96,222,0,0,252,214,0,0,0,0,0,0, 252,226,0,0,248,228,0,0,40,227,0,0,236,229,0,0,132,227,0,0,236,229,0,0,216,227,0,0,236,229,0,0, 236,229,0,0,0,0,0,0,212,231,0,0,52,231,0,0,216,233,0,0,56,233,0,0,36,227,0,0,0,0,0,0, 36,227,0,0,16,236,0,0,36,227,0,0,60,236,0,0,36,227,0,0,60,236,0,0,60,235,0,0,60,236,0,0, 60,236,0,0,0,0,0,0,188,237,0,0,188,237,0,0,36,227,0,0,144,235,0,0,36,227,0,0,0,0,0,0, 252,226,0,0,104,236,0,0,40,227,0,0,188,236,0,0,36,227,0,0,188,236,0,0,228,235,0,0,188,236,0,0, 188,236,0,0,0,0,0,0,36,227,0,0,16,237,0,0,112,238,0,0,112,238,0,0,36,227,0,0,0,0,0,0, 36,227,0,0,100,237,0,0,36,227,0,0,144,237,0,0,36,227,0,0,144,237,0,0,80,228,0,0,144,237,0,0, 144,237,0,0,0,0,0,0,132,232,0,0,132,232,0,0,36,227,0,0,164,228,0,0,36,227,0,0,0,0,0,0, 36,227,0,0,152,229,0,0,36,227,0,0,140,230,0,0,36,227,0,0,140,230,0,0,36,227,0,0,140,230,0,0, 140,230,0,0,0,0,0,0,36,227,0,0,224,230,0,0,136,234,0,0,136,234,0,0,36,227,0,0,0,0,0,0, 234,20,0,224,4,224,45,229,220,122,28,229,84,80,160,227,9,144,160,227,9,128,160,227,0,3,45,233,5,160,140,224, 38,54,218,229,39,70,218,229,104,0,83,227,104,48,160,35,104,0,84,227,104,64,160,35,36,6,218,229,37,22,218,229, 1,0,80,225,1,0,0,10,10,64,132,34,10,48,131,50,1,16,218,229,145,4,0,224,32,114,135,224,145,3,0,224, 32,114,71,224,128,4,45,233,36,102,218,229,37,118,218,229,60,26,218,229,1,112,135,224,73,28,218,229,75,44,218,229, 85,62,218,229,87,78,218,229,80,235,255,235,128,4,189,232,104,0,80,227,104,0,160,35,1,16,218,229,144,1,2,224, 162,114,135,224,128,4,45,233,36,102,218,229,37,118,218,229,48,24,218,229,1,96,134,224,73,28,218,229,75,44,218,229, 85,62,218,229,87,78,218,229,28,235,255,235,128,4,189,232,104,0,80,227,104,0,160,35,1,16,218,229,144,1,2,224, 162,114,71,224,0,3,189,232,4,80,133,226,1,128,88,226,200,255,255,26,4,80,133,226,1,144,89,226,196,255,255,26, 71,114,160,225,220,122,12,229,4,240,157,228,4,224,45,229,168,95,28,229,124,218,255,235,0,0,160,227,5,0,204,231, 168,111,28,229,6,80,160,225,64,0,0,235,152,8,12,229,16,144,160,227,44,80,70,226,60,0,0,235,40,80,70,226, 58,0,0,235,36,80,70,226,56,0,0,235,4,80,70,226,54,0,0,235,4,80,134,226,52,0,0,235,36,80,134,226, 50,0,0,235,40,80,134,226,48,0,0,235,44,80,134,226,46,0,0,235,168,95,28,229,92,0,160,227,5,0,204,231, 73,218,255,235,3,24,160,227,152,40,28,229,130,32,137,224,96,2,0,235,0,0,96,226,216,10,12,229,164,95,28,229, 89,218,255,235,0,0,160,227,5,0,204,231,164,111,28,229,6,80,160,225,58,1,0,235,152,8,12,229,16,144,160,227, 44,80,70,226,54,1,0,235,40,80,70,226,52,1,0,235,36,80,70,226,50,1,0,235,4,80,70,226,48,1,0,235, 4,80,134,226,46,1,0,235,36,80,134,226,44,1,0,235,40,80,134,226,42,1,0,235,44,80,134,226,40,1,0,235, 164,95,28,229,60,0,160,227,5,0,204,231,38,218,255,235,3,24,160,227,152,40,28,229,130,32,137,224,61,2,0,235, 216,26,28,229,0,16,129,224,216,26,12,229,4,240,157,228,4,224,45,229,5,160,140,224,0,0,90,229,192,0,16,227, 21,1,0,26,36,6,26,229,22,20,90,229,32,8,145,225,17,1,0,26,0,112,160,227,8,128,160,227,60,10,218,229, 0,0,80,227,4,128,136,2,44,64,90,229,128,0,20,227,28,0,0,26,248,21,218,229,249,37,218,229,68,4,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 176,8,208,229,0,112,135,224,16,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,136,8,208,229,0,112,135,224,64,0,20,227,3,0,0,26,80,6,26,229,66,20,90,229, 32,8,145,225,6,128,136,2,40,64,90,229,128,0,20,227,28,0,0,26,252,21,218,229,253,37,218,229,64,4,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 48,8,208,229,0,112,135,224,20,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,8,8,208,229,0,112,135,224,64,0,20,227,3,0,0,26,76,6,26,229,62,20,90,229, 32,8,145,225,6,128,136,2,36,64,90,229,128,0,20,227,28,0,0,26,0,22,218,229,1,38,218,229,60,4,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 176,7,208,229,0,112,135,224,24,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,136,7,208,229,0,112,135,224,64,0,20,227,3,0,0,26,72,6,26,229,58,20,90,229, 32,8,145,225,6,128,136,2,4,64,90,229,128,0,20,227,28,0,0,26,32,22,218,229,33,38,218,229,28,4,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 61,7,208,229,0,112,135,224,56,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,21,7,208,229,0,112,135,224,64,0,20,227,3,0,0,26,40,6,26,229,26,20,90,229, 32,8,145,225,5,128,136,2,4,64,218,229,128,0,20,227,28,0,0,26,40,22,218,229,41,38,218,229,20,4,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 189,6,208,229,0,112,135,224,64,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,149,6,208,229,0,112,135,224,64,0,20,227,3,0,0,26,32,6,26,229,18,20,90,229, 32,8,145,225,5,128,136,2,36,64,218,229,128,0,20,227,28,0,0,26,72,22,218,229,73,38,218,229,244,3,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 74,6,208,229,0,112,135,224,96,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,34,6,208,229,0,112,135,224,64,0,20,227,3,0,0,26,0,6,26,229,242,19,90,229, 32,8,145,225,3,128,136,2,40,64,218,229,128,0,20,227,28,0,0,26,76,22,218,229,77,38,218,229,240,3,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 202,5,208,229,0,112,135,224,100,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,162,5,208,229,0,112,135,224,64,0,20,227,3,0,0,26,252,5,26,229,238,19,90,229, 32,8,145,225,3,128,136,2,44,64,218,229,128,0,20,227,28,0,0,26,80,22,218,229,81,38,218,229,236,3,90,229, 253,0,16,227,3,16,65,18,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224, 74,5,208,229,0,112,135,224,104,10,218,229,0,32,130,224,1,0,66,224,3,0,144,226,0,0,160,67,12,0,80,227, 12,0,160,35,0,0,143,224,34,5,208,229,0,112,135,224,64,0,20,227,3,0,0,26,248,5,26,229,234,19,90,229, 32,8,145,225,3,128,136,2,167,112,160,225,20,0,88,227,20,128,160,35,20,0,160,227,144,7,1,224,8,32,160,225, 36,1,0,235,128,32,128,226,1,24,160,227,33,1,0,235,0,0,89,225,0,144,160,49,4,240,157,228,16,0,160,227, 4,240,157,228,4,224,45,229,5,160,140,224,0,0,90,229,160,0,16,227,21,1,0,26,34,6,26,229,24,20,90,229, 32,8,145,225,17,1,0,26,0,112,160,227,8,128,160,227,48,8,218,229,0,0,80,227,4,128,136,2,44,64,218,229, 128,0,20,227,28,0,0,26,80,22,218,229,81,38,218,229,234,3,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,60,4,208,229,0,112,135,224,92,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,20,4,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,246,5,26,229,236,19,90,229,32,8,145,225,6,128,136,2,40,64,218,229, 128,0,20,227,28,0,0,26,76,22,218,229,77,38,218,229,238,3,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,188,3,208,229,0,112,135,224,88,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,148,3,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,250,5,26,229,240,19,90,229,32,8,145,225,6,128,136,2,36,64,218,229, 128,0,20,227,28,0,0,26,72,22,218,229,73,38,218,229,242,3,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,60,3,208,229,0,112,135,224,84,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,20,3,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,254,5,26,229,244,19,90,229,32,8,145,225,6,128,136,2,4,64,218,229, 128,0,20,227,28,0,0,26,40,22,218,229,41,38,218,229,18,4,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,201,2,208,229,0,112,135,224,52,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,161,2,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,30,6,26,229,20,20,90,229,32,8,145,225,5,128,136,2,4,64,90,229, 128,0,20,227,28,0,0,26,32,22,218,229,33,38,218,229,26,4,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,73,2,208,229,0,112,135,224,44,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,33,2,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,38,6,26,229,28,20,90,229,32,8,145,225,5,128,136,2,36,64,90,229, 128,0,20,227,28,0,0,26,0,22,218,229,1,38,218,229,58,4,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,214,1,208,229,0,112,135,224,12,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,174,1,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,70,6,26,229,60,20,90,229,32,8,145,225,3,128,136,2,40,64,90,229, 128,0,20,227,28,0,0,26,252,21,218,229,253,37,218,229,62,4,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,86,1,208,229,0,112,135,224,8,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,46,1,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,74,6,26,229,64,20,90,229,32,8,145,225,3,128,136,2,44,64,90,229, 128,0,20,227,28,0,0,26,248,21,218,229,249,37,218,229,66,4,90,229,253,0,16,227,3,32,66,18,2,0,65,224, 3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,214,0,208,229,0,112,135,224,4,8,218,229, 0,16,129,224,2,0,65,224,3,0,144,226,0,0,160,67,12,0,80,227,12,0,160,35,0,0,143,224,174,0,208,229, 0,112,135,224,32,0,20,227,3,0,0,26,78,6,26,229,68,20,90,229,32,8,145,225,3,128,136,2,167,112,160,225, 20,0,88,227,20,128,160,35,20,0,160,227,144,7,1,224,8,32,160,225,7,0,0,235,128,32,128,226,1,24,160,227, 4,0,0,235,0,0,89,225,0,144,160,49,4,240,157,228,16,0,160,227,4,240,157,228,1,48,160,227,2,0,81,225, 2,0,0,58,130,32,160,225,131,48,160,225,250,255,255,234,0,0,160,227,2,0,81,225,1,0,0,58,2,16,65,224, 3,0,128,224,162,32,160,225,163,48,176,225,248,255,255,26,14,240,160,225,0,0,0,60,60,75,180,180,225,225,225,225, 225,0,0,0,40,40,50,120,120,150,150,150,150,150,0,0,0,20,20,25,60,60,75,75,75,75,75,0,0,0,0,0, 0,30,30,37,90,90,112,112,4,224,45,229,168,111,28,229,6,80,160,225,45,0,0,235,128,144,160,225,0,128,160,227, 44,80,70,226,38,0,0,235,40,80,70,226,36,0,0,235,36,80,70,226,34,0,0,235,4,80,70,226,32,0,0,235, 4,80,134,226,30,0,0,235,36,80,134,226,28,0,0,235,40,80,134,226,26,0,0,235,44,80,134,226,24,0,0,235, 8,144,137,224,164,111,28,229,6,80,160,225,40,0,0,235,128,144,73,224,0,128,160,227,44,80,70,226,33,0,0,235, 40,80,70,226,31,0,0,235,36,80,70,226,29,0,0,235,4,80,70,226,27,0,0,235,4,80,134,226,25,0,0,235, 36,80,134,226,23,0,0,235,40,80,134,226,21,0,0,235,44,80,134,226,19,0,0,235,8,144,73,224,208,154,12,229, 4,240,157,228,5,0,220,231,192,0,16,227,11,0,0,26,5,160,140,224,36,6,26,229,22,20,90,229,32,8,129,225, 60,26,218,229,1,0,144,225,4,0,0,26,5,0,143,224,92,0,144,229,0,0,88,225,0,128,160,49,14,240,160,225, 0,0,160,227,14,240,160,225,5,0,220,231,160,0,16,227,12,0,0,26,5,160,140,224,34,6,26,229,24,20,90,229, 32,8,129,225,48,24,218,229,1,0,144,225,5,0,0,26,130,15,101,226,0,0,143,224,20,0,144,229,0,0,88,225, 0,128,160,49,14,240,160,225,0,0,160,227,14,240,160,225,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0, 244,1,0,0,244,1,0,0,0,0,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0, 244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,0,0,0,0,244,1,0,0,244,1,0,0,244,1,0,0, 244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,244,1,0,0,0,0,0,0,44,1,0,0, 44,1,0,0,44,1,0,0,44,1,0,0,44,1,0,0,44,1,0,0,44,1,0,0,44,1,0,0,44,1,0,0, 0,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0,200,0,0,0, 200,0,0,0,200,0,0,0,0,0,0,0,22,0,0,0,22,0,0,0,22,0,0,0,4,0,0,0,4,0,0,0, 4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0,22,0,0,0,14,0,0,0, 4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,0,0,0,0,4,0,0,0, 28,0,0,0,14,0,0,0,10,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0, 0,0,0,0,4,0,0,0,4,0,0,0,16,0,0,0,12,0,0,0,4,0,0,0,4,0,0,0,4,0,0,0, 4,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,224,45,229, 152,81,159,229,0,0,160,227,131,144,160,227,4,0,133,228,1,144,89,226,252,255,255,26,0,16,160,227,196,15,92,229, 0,1,139,224,116,1,16,229,0,16,129,224,188,15,92,229,0,1,139,224,116,1,16,229,0,16,65,224,195,15,92,229, 0,1,139,224,40,1,16,229,0,16,129,224,187,15,92,229,0,1,139,224,40,1,16,229,0,16,65,224,194,15,92,229, 0,1,139,224,20,1,16,229,0,16,129,224,186,15,92,229,0,1,139,224,20,1,16,229,0,16,65,224,193,15,92,229, 0,1,139,224,0,1,16,229,0,16,129,224,185,15,92,229,0,1,139,224,0,1,16,229,0,16,65,224,192,15,92,229, 0,1,139,224,236,0,16,229,0,16,129,224,184,15,92,229,0,1,139,224,236,0,16,229,0,16,65,224,191,15,92,229, 0,1,139,224,216,0,16,229,0,16,129,224,183,15,92,229,0,1,139,224,216,0,16,229,0,16,65,224,190,15,92,229, 0,1,139,224,204,0,16,229,0,16,129,224,182,15,92,229,0,1,139,224,204,0,16,229,0,16,65,224,129,2,160,225, 224,10,12,229,152,95,28,229,37,0,0,235,140,8,28,229,0,49,131,224,136,8,28,229,0,0,80,227,1,0,0,26, 1,0,160,227,9,2,70,229,224,10,28,229,3,0,128,224,224,10,12,229,24,52,134,229,192,0,20,229,163,50,128,224, 2,48,198,229,152,95,22,229,84,0,85,227,237,255,255,42,148,95,28,229,56,0,0,235,140,8,28,229,0,49,131,224, 136,8,28,229,0,0,80,227,1,0,0,26,1,0,160,227,9,2,70,229,224,10,28,229,3,0,64,224,224,10,12,229, 24,52,134,229,192,0,20,229,163,50,128,224,2,48,198,229,152,95,22,229,84,0,85,227,237,255,255,42,4,240,157,228, 0,25,0,224,4,224,45,229,0,0,160,227,148,8,12,229,144,8,12,229,140,8,12,229,136,8,12,229,5,96,140,224, 0,16,86,229,30,16,1,226,129,64,139,224,1,48,214,229,128,0,20,229,144,3,3,224,13,2,214,229,0,16,129,225, 129,0,143,224,236,240,144,229,180,17,20,229,84,0,69,226,0,0,145,231,35,50,128,224,0,0,86,229,92,0,80,227, 12,0,0,10,136,8,28,229,0,0,80,227,2,0,0,26,64,16,20,229,0,0,81,227,51,49,67,16,148,8,28,229, 0,48,131,224,244,1,20,229,0,0,83,225,0,48,160,193,0,0,83,227,0,48,160,179,4,240,157,228,4,224,45,229, 0,0,160,227,148,8,12,229,144,8,12,229,140,8,12,229,136,8,12,229,5,96,140,224,0,16,86,229,30,16,1,226, 129,64,139,224,1,48,214,229,128,0,20,229,144,3,3,224,15,2,214,229,0,16,129,225,129,0,143,224,148,241,144,229, 180,17,20,229,109,15,101,226,0,0,145,231,35,50,128,224,0,0,86,229,60,0,80,227,12,0,0,10,136,8,28,229, 0,0,80,227,2,0,0,26,64,16,20,229,0,0,81,227,51,49,67,16,148,8,28,229,0,48,131,224,244,1,20,229, 0,0,83,225,0,48,160,193,0,0,83,227,0,48,160,179,4,240,157,228,36,9,1,0,60,11,1,0,84,9,1,0, 72,12,1,0,164,9,1,0,72,12,1,0,0,10,1,0,72,12,1,0,72,12,1,0,0,0,0,0,96,14,1,0, 176,13,1,0,68,16,1,0,148,15,1,0,120,17,1,0,0,0,0,0,80,9,1,0,112,18,1,0,80,9,1,0, 160,18,1,0,80,9,1,0,160,18,1,0,136,17,1,0,160,18,1,0,160,18,1,0,0,0,0,0,68,20,1,0, 68,20,1,0,80,9,1,0,228,17,1,0,80,9,1,0,0,0,0,0,36,9,1,0,208,18,1,0,84,9,1,0, 44,19,1,0,80,9,1,0,44,19,1,0,64,18,1,0,44,19,1,0,44,19,1,0,0,0,0,0,80,9,1,0, 136,19,1,0,224,20,1,0,224,20,1,0,80,9,1,0,0,0,0,0,80,9,1,0,228,19,1,0,80,9,1,0, 20,20,1,0,80,9,1,0,20,20,1,0,132,10,1,0,20,20,1,0,20,20,1,0,0,0,0,0,248,14,1,0, 248,14,1,0,80,9,1,0,224,10,1,0,80,9,1,0,0,0,0,0,80,9,1,0,236,11,1,0,80,9,1,0, 248,12,1,0,80,9,1,0,248,12,1,0,80,9,1,0,248,12,1,0,248,12,1,0,0,0,0,0,80,9,1,0, 84,13,1,0,220,16,1,0,220,16,1,0,80,9,1,0,0,0,0,0,124,21,1,0,148,23,1,0,172,21,1,0, 160,24,1,0,252,21,1,0,160,24,1,0,88,22,1,0,160,24,1,0,160,24,1,0,0,0,0,0,184,26,1,0, 8,26,1,0,156,28,1,0,236,27,1,0,208,29,1,0,0,0,0,0,168,21,1,0,200,30,1,0,168,21,1,0, 248,30,1,0,168,21,1,0,248,30,1,0,224,29,1,0,248,30,1,0,248,30,1,0,0,0,0,0,156,32,1,0, 156,32,1,0,168,21,1,0,60,30,1,0,168,21,1,0,0,0,0,0,124,21,1,0,40,31,1,0,172,21,1,0, 132,31,1,0,168,21,1,0,132,31,1,0,152,30,1,0,132,31,1,0,132,31,1,0,0,0,0,0,168,21,1,0, 224,31,1,0,56,33,1,0,56,33,1,0,168,21,1,0,0,0,0,0,168,21,1,0,60,32,1,0,168,21,1,0, 108,32,1,0,168,21,1,0,108,32,1,0,220,22,1,0,108,32,1,0,108,32,1,0,0,0,0,0,80,27,1,0, 80,27,1,0,168,21,1,0,56,23,1,0,168,21,1,0,0,0,0,0,168,21,1,0,68,24,1,0,168,21,1,0, 80,25,1,0,168,21,1,0,80,25,1,0,168,21,1,0,80,25,1,0,80,25,1,0,0,0,0,0,168,21,1,0, 172,25,1,0,52,29,1,0,52,29,1,0,168,21,1,0,0,0,0,0,0,0,88,229,32,0,16,227,26,0,0,10, 28,0,0,226,128,16,139,224,192,16,17,229,192,32,20,229,1,0,82,225,1,32,160,177,129,16,114,224,2,0,0,74, 148,8,28,229,1,0,128,224,148,8,12,229,2,16,216,229,2,32,214,229,153,8,92,229,0,32,82,224,0,32,160,51, 2,16,81,224,8,0,0,218,144,8,28,229,1,0,80,225,2,0,0,170,144,24,12,229,140,8,12,229,14,240,160,225, 140,8,28,229,1,0,80,225,140,24,12,181,14,240,160,225,0,0,88,229,64,0,16,227,26,0,0,10,28,0,0,226, 128,16,139,224,192,16,17,229,192,32,20,229,1,0,82,225,1,32,160,177,129,16,114,224,2,0,0,74,148,8,28,229, 1,0,128,224,148,8,12,229,2,16,216,229,2,32,214,229,154,8,92,229,0,32,82,224,0,32,160,51,2,16,81,224, 8,0,0,218,144,8,28,229,1,0,80,225,2,0,0,170,144,24,12,229,140,8,12,229,14,240,160,225,140,8,28,229, 1,0,80,225,140,24,12,181,14,240,160,225,4,224,45,229,174,229,255,235,25,230,255,235,0,32,160,227,2,16,214,229, 4,16,65,226,155,8,92,229,1,0,80,225,13,0,0,58,0,0,88,229,64,0,16,227,10,0,0,26,40,32,130,226, 136,8,28,229,1,0,128,226,136,8,12,229,153,24,92,229,155,8,92,229,0,16,65,224,5,0,81,227,6,0,0,186, 24,32,130,226,4,0,0,234,153,24,92,229,155,8,92,229,0,16,65,224,5,0,81,227,48,32,130,162,153,8,92,229, 0,0,80,227,1,0,0,10,128,32,130,226,5,0,0,234,72,12,216,229,0,1,85,225,2,0,0,26,120,32,130,226, 2,0,214,229,0,32,66,224,1,16,216,229,145,2,0,224,160,147,137,224,4,240,157,228,4,224,45,229,63,229,255,235, 202,229,255,235,0,32,160,227,2,16,214,229,4,16,65,226,156,8,92,229,1,0,80,225,13,0,0,58,0,0,88,229, 32,0,16,227,10,0,0,26,40,32,130,226,136,8,28,229,1,0,128,226,136,8,12,229,154,24,92,229,156,8,92,229, 0,16,65,224,5,0,81,227,6,0,0,186,24,32,130,226,4,0,0,234,154,24,92,229,156,8,92,229,0,16,65,224, 5,0,81,227,48,32,130,162,154,8,92,229,0,0,80,227,1,0,0,10,128,32,130,226,5,0,0,234,84,14,216,229, 0,1,85,225,2,0,0,26,120,32,130,226,2,0,214,229,0,32,66,224,1,16,216,229,145,2,0,224,160,147,137,224, 4,240,157,228,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226,7,128,140,224,162,255,255,235, 99,255,255,235,24,0,160,227,153,0,1,224,1,48,131,224,132,254,255,234,0,144,160,227,40,112,69,226,7,128,140,224, 0,0,88,229,0,0,80,227,5,0,0,26,150,255,255,235,40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227, 249,255,255,10,128,0,16,227,1,0,0,26,142,255,255,235,79,255,255,235,10,0,160,227,153,0,1,224,1,48,131,224, 112,254,255,234,84,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,84,112,69,226,7,128,140,224,130,255,255,235, 67,255,255,235,15,0,160,227,153,0,1,224,1,48,131,224,76,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 76,112,69,226,7,128,140,224,119,255,255,235,56,255,255,235,15,0,160,227,153,0,1,224,1,48,131,224,89,254,255,234, 44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224,107,255,255,235,44,255,255,235, 21,0,160,227,153,0,1,224,1,48,131,224,44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226, 7,128,140,224,96,255,255,235,33,255,255,235,21,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227, 7,0,0,26,0,144,160,227,40,112,69,226,7,128,140,224,85,255,255,235,22,255,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226,7,128,140,224,74,255,255,235, 11,255,255,235,21,0,160,227,153,0,1,224,1,48,131,224,36,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227, 36,112,133,226,7,128,140,224,63,255,255,235,0,255,255,235,21,0,160,227,153,0,1,224,1,48,131,224,33,254,255,234, 36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226,7,128,140,224,51,255,255,235,244,254,255,235, 16,0,160,227,153,0,1,224,1,48,131,224,36,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,133,226, 7,128,140,224,40,255,255,235,233,254,255,235,16,0,160,227,153,0,1,224,1,48,131,224,10,254,255,234,44,0,86,229, 128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224,28,255,255,235,221,254,255,235,24,0,160,227, 153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226,7,128,140,224, 17,255,255,235,210,254,255,235,24,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229,128,0,16,227,7,0,0,26, 0,144,160,227,40,112,133,226,7,128,140,224,6,255,255,235,199,254,255,235,24,0,160,227,153,0,1,224,1,48,131,224, 36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226,7,128,140,224,251,254,255,235,188,254,255,235, 24,0,160,227,153,0,1,224,1,48,131,224,4,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,69,226, 7,128,140,224,240,254,255,235,177,254,255,235,24,0,160,227,153,0,1,224,1,48,131,224,4,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,4,112,133,226,7,128,140,224,229,254,255,235,166,254,255,235,24,0,160,227,153,0,1,224, 1,48,131,224,199,253,255,234,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224, 217,254,255,235,154,254,255,235,21,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26, 0,144,160,227,40,112,69,226,7,128,140,224,206,254,255,235,143,254,255,235,21,0,160,227,153,0,1,224,1,48,131,224, 40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,195,254,255,235,132,254,255,235, 21,0,160,227,153,0,1,224,1,48,131,224,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226, 7,128,140,224,184,254,255,235,121,254,255,235,21,0,160,227,153,0,1,224,1,48,131,224,4,0,86,229,128,0,16,227, 7,0,0,26,0,144,160,227,4,112,69,226,7,128,140,224,173,254,255,235,110,254,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,4,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,133,226,7,128,140,224,162,254,255,235, 99,254,255,235,21,0,160,227,153,0,1,224,1,48,131,224,132,253,255,234,4,0,86,229,128,0,16,227,7,0,0,26, 0,144,160,227,4,112,69,226,7,128,140,224,150,254,255,235,87,254,255,235,16,0,160,227,153,0,1,224,1,48,131,224, 4,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,133,226,7,128,140,224,139,254,255,235,76,254,255,235, 16,0,160,227,153,0,1,224,1,48,131,224,109,253,255,234,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 40,112,69,226,7,128,140,224,127,254,255,235,64,254,255,235,16,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,116,254,255,235,53,254,255,235,16,0,160,227, 153,0,1,224,1,48,131,224,4,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,69,226,7,128,140,224, 105,254,255,235,42,254,255,235,16,0,160,227,153,0,1,224,1,48,131,224,4,0,214,229,128,0,16,227,7,0,0,26, 0,144,160,227,4,112,133,226,7,128,140,224,94,254,255,235,31,254,255,235,16,0,160,227,153,0,1,224,1,48,131,224, 0,144,160,227,44,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,83,254,255,235,44,112,71,226, 7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,75,254,255,235,12,254,255,235, 10,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,44,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227, 5,0,0,26,64,254,255,235,44,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227, 1,0,0,26,56,254,255,235,249,253,255,235,7,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,36,112,69,226, 7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,45,254,255,235,36,112,71,226,7,128,140,224,0,0,88,229, 0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,37,254,255,235,230,253,255,235,10,0,160,227,153,0,1,224, 1,48,131,224,0,144,160,227,36,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,26,254,255,235, 36,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,18,254,255,235, 211,253,255,235,7,0,160,227,153,0,1,224,1,48,131,224,244,252,255,234,44,0,86,229,128,0,16,227,7,0,0,26, 0,144,160,227,44,112,69,226,7,128,140,224,6,254,255,235,199,253,255,235,16,0,160,227,153,0,1,224,1,48,131,224, 44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224,251,253,255,235,188,253,255,235, 16,0,160,227,153,0,1,224,1,48,131,224,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226, 7,128,140,224,240,253,255,235,177,253,255,235,16,0,160,227,153,0,1,224,1,48,131,224,36,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,229,253,255,235,166,253,255,235,16,0,160,227,153,0,1,224, 1,48,131,224,0,144,160,227,40,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,218,253,255,235, 40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,210,253,255,235, 147,253,255,235,10,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,40,112,133,226,7,128,140,224,0,0,88,229, 0,0,80,227,5,0,0,26,199,253,255,235,40,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10, 128,0,16,227,1,0,0,26,191,253,255,235,128,253,255,235,8,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227, 4,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,180,253,255,235,4,112,71,226,7,128,140,224, 0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,172,253,255,235,109,253,255,235,7,0,160,227, 153,0,1,224,1,48,131,224,0,144,160,227,4,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26, 161,253,255,235,4,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26, 153,253,255,235,90,253,255,235,7,0,160,227,153,0,1,224,1,48,131,224,123,252,255,234,136,8,28,229,1,0,128,226, 136,8,12,229,119,252,255,234,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224, 137,253,255,235,74,253,255,235,21,0,160,227,153,0,1,224,1,48,131,224,44,0,214,229,128,0,16,227,7,0,0,26, 0,144,160,227,44,112,133,226,7,128,140,224,126,253,255,235,63,253,255,235,21,0,160,227,153,0,1,224,1,48,131,224, 96,252,255,234,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224,114,253,255,235, 51,253,255,235,16,0,160,227,153,0,1,224,1,48,131,224,44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227, 44,112,133,226,7,128,140,224,103,253,255,235,40,253,255,235,16,0,160,227,153,0,1,224,1,48,131,224,73,252,255,234, 40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226,7,128,140,224,91,253,255,235,28,253,255,235, 21,0,160,227,153,0,1,224,1,48,131,224,61,252,255,234,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 44,112,69,226,7,128,140,224,79,253,255,235,16,253,255,235,24,0,160,227,153,0,1,224,1,48,131,224,49,252,255,234, 44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224,67,253,255,235,4,253,255,235, 21,0,160,227,153,0,1,224,1,48,131,224,37,252,255,234,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 40,112,69,226,7,128,140,224,55,253,255,235,248,252,255,235,24,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,44,253,255,235,237,252,255,235,24,0,160,227, 153,0,1,224,1,48,131,224,14,252,255,234,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226, 7,128,140,224,32,253,255,235,225,252,255,235,21,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,21,253,255,235,214,252,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,247,251,255,234,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226,7,128,140,224, 9,253,255,235,202,252,255,235,16,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229,128,0,16,227,7,0,0,26, 0,144,160,227,40,112,133,226,7,128,140,224,254,252,255,235,191,252,255,235,16,0,160,227,153,0,1,224,1,48,131,224, 224,251,255,234,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226,7,128,140,224,242,252,255,235, 179,252,255,235,24,0,160,227,153,0,1,224,1,48,131,224,212,251,255,234,36,0,86,229,128,0,16,227,7,0,0,26, 0,144,160,227,36,112,69,226,7,128,140,224,230,252,255,235,167,252,255,235,21,0,160,227,153,0,1,224,1,48,131,224, 200,251,255,234,0,144,160,227,44,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,218,252,255,235, 44,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,210,252,255,235, 147,252,255,235,10,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,44,112,133,226,7,128,140,224,0,0,88,229, 0,0,80,227,5,0,0,26,199,252,255,235,44,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10, 128,0,16,227,1,0,0,26,191,252,255,235,128,252,255,235,7,0,160,227,153,0,1,224,1,48,131,224,161,251,255,234, 0,144,160,227,40,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,179,252,255,235,40,112,71,226, 7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,171,252,255,235,108,252,255,235, 10,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,40,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227, 5,0,0,26,160,252,255,235,40,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227, 1,0,0,26,152,252,255,235,89,252,255,235,8,0,160,227,153,0,1,224,1,48,131,224,122,251,255,234,40,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,183,252,255,235,108,252,255,235,24,0,160,227, 153,0,1,224,1,48,131,224,148,251,255,234,0,144,160,227,40,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227, 5,0,0,26,171,252,255,235,40,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227, 1,0,0,26,163,252,255,235,88,252,255,235,10,0,160,227,153,0,1,224,1,48,131,224,128,251,255,234,84,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,84,112,133,226,7,128,140,224,151,252,255,235,76,252,255,235,15,0,160,227, 153,0,1,224,1,48,131,224,76,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,76,112,133,226,7,128,140,224, 140,252,255,235,65,252,255,235,15,0,160,227,153,0,1,224,1,48,131,224,105,251,255,234,44,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224,128,252,255,235,53,252,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224,117,252,255,235, 42,252,255,235,21,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227, 40,112,133,226,7,128,140,224,106,252,255,235,31,252,255,235,21,0,160,227,153,0,1,224,1,48,131,224,36,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,95,252,255,235,20,252,255,235,21,0,160,227, 153,0,1,224,1,48,131,224,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226,7,128,140,224, 84,252,255,235,9,252,255,235,21,0,160,227,153,0,1,224,1,48,131,224,49,251,255,234,36,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,72,252,255,235,253,251,255,235,16,0,160,227,153,0,1,224, 1,48,131,224,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,69,226,7,128,140,224,61,252,255,235, 242,251,255,235,16,0,160,227,153,0,1,224,1,48,131,224,26,251,255,234,44,0,214,229,128,0,16,227,7,0,0,26, 0,144,160,227,44,112,133,226,7,128,140,224,49,252,255,235,230,251,255,235,24,0,160,227,153,0,1,224,1,48,131,224, 40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,38,252,255,235,219,251,255,235, 24,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226, 7,128,140,224,27,252,255,235,208,251,255,235,24,0,160,227,153,0,1,224,1,48,131,224,36,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,16,252,255,235,197,251,255,235,24,0,160,227,153,0,1,224, 1,48,131,224,4,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,133,226,7,128,140,224,5,252,255,235, 186,251,255,235,24,0,160,227,153,0,1,224,1,48,131,224,4,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 4,112,69,226,7,128,140,224,250,251,255,235,175,251,255,235,24,0,160,227,153,0,1,224,1,48,131,224,215,250,255,234, 44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224,238,251,255,235,163,251,255,235, 21,0,160,227,153,0,1,224,1,48,131,224,40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226, 7,128,140,224,227,251,255,235,152,251,255,235,21,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227, 7,0,0,26,0,144,160,227,40,112,69,226,7,128,140,224,216,251,255,235,141,251,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,36,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,205,251,255,235, 130,251,255,235,21,0,160,227,153,0,1,224,1,48,131,224,4,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227, 4,112,133,226,7,128,140,224,194,251,255,235,119,251,255,235,21,0,160,227,153,0,1,224,1,48,131,224,4,0,86,229, 128,0,16,227,7,0,0,26,0,144,160,227,4,112,69,226,7,128,140,224,183,251,255,235,108,251,255,235,21,0,160,227, 153,0,1,224,1,48,131,224,148,250,255,234,4,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,133,226, 7,128,140,224,171,251,255,235,96,251,255,235,16,0,160,227,153,0,1,224,1,48,131,224,4,0,86,229,128,0,16,227, 7,0,0,26,0,144,160,227,4,112,69,226,7,128,140,224,160,251,255,235,85,251,255,235,16,0,160,227,153,0,1,224, 1,48,131,224,125,250,255,234,40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224, 148,251,255,235,73,251,255,235,16,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26, 0,144,160,227,40,112,69,226,7,128,140,224,137,251,255,235,62,251,255,235,16,0,160,227,153,0,1,224,1,48,131,224, 4,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,133,226,7,128,140,224,126,251,255,235,51,251,255,235, 16,0,160,227,153,0,1,224,1,48,131,224,4,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,4,112,69,226, 7,128,140,224,115,251,255,235,40,251,255,235,16,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,44,112,133,226, 7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,104,251,255,235,44,112,135,226,7,128,140,224,0,0,88,229, 0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,96,251,255,235,21,251,255,235,10,0,160,227,153,0,1,224, 1,48,131,224,0,144,160,227,44,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,85,251,255,235, 44,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,77,251,255,235, 2,251,255,235,7,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,36,112,133,226,7,128,140,224,0,0,88,229, 0,0,80,227,5,0,0,26,66,251,255,235,36,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10, 128,0,16,227,1,0,0,26,58,251,255,235,239,250,255,235,10,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227, 36,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,47,251,255,235,36,112,71,226,7,128,140,224, 0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,39,251,255,235,220,250,255,235,7,0,160,227, 153,0,1,224,1,48,131,224,4,250,255,234,44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226, 7,128,140,224,27,251,255,235,208,250,255,235,16,0,160,227,153,0,1,224,1,48,131,224,44,0,86,229,128,0,16,227, 7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224,16,251,255,235,197,250,255,235,16,0,160,227,153,0,1,224, 1,48,131,224,36,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,5,251,255,235, 186,250,255,235,16,0,160,227,153,0,1,224,1,48,131,224,36,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 36,112,69,226,7,128,140,224,250,250,255,235,175,250,255,235,16,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227, 40,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,239,250,255,235,40,112,135,226,7,128,140,224, 0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,231,250,255,235,156,250,255,235,10,0,160,227, 153,0,1,224,1,48,131,224,0,144,160,227,40,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26, 220,250,255,235,40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26, 212,250,255,235,137,250,255,235,8,0,160,227,153,0,1,224,1,48,131,224,0,144,160,227,4,112,133,226,7,128,140,224, 0,0,88,229,0,0,80,227,5,0,0,26,201,250,255,235,4,112,135,226,7,128,140,224,0,0,88,229,0,0,80,227, 249,255,255,10,128,0,16,227,1,0,0,26,193,250,255,235,118,250,255,235,7,0,160,227,153,0,1,224,1,48,131,224, 0,144,160,227,4,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,182,250,255,235,4,112,71,226, 7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,174,250,255,235,99,250,255,235, 7,0,160,227,153,0,1,224,1,48,131,224,139,249,255,234,136,8,28,229,1,0,128,226,136,8,12,229,135,249,255,234, 44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224,158,250,255,235,83,250,255,235, 21,0,160,227,153,0,1,224,1,48,131,224,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226, 7,128,140,224,147,250,255,235,72,250,255,235,21,0,160,227,153,0,1,224,1,48,131,224,112,249,255,234,44,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224,135,250,255,235,60,250,255,235,16,0,160,227, 153,0,1,224,1,48,131,224,44,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,69,226,7,128,140,224, 124,250,255,235,49,250,255,235,16,0,160,227,153,0,1,224,1,48,131,224,89,249,255,234,40,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,112,250,255,235,37,250,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,77,249,255,234,44,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224, 100,250,255,235,25,250,255,235,24,0,160,227,153,0,1,224,1,48,131,224,65,249,255,234,44,0,214,229,128,0,16,227, 7,0,0,26,0,144,160,227,44,112,133,226,7,128,140,224,88,250,255,235,13,250,255,235,21,0,160,227,153,0,1,224, 1,48,131,224,53,249,255,234,40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224, 76,250,255,235,1,250,255,235,24,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26, 0,144,160,227,40,112,69,226,7,128,140,224,65,250,255,235,246,249,255,235,24,0,160,227,153,0,1,224,1,48,131,224, 30,249,255,234,40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,53,250,255,235, 234,249,255,235,21,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227, 40,112,69,226,7,128,140,224,42,250,255,235,223,249,255,235,21,0,160,227,153,0,1,224,1,48,131,224,7,249,255,234, 40,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,133,226,7,128,140,224,30,250,255,235,211,249,255,235, 16,0,160,227,153,0,1,224,1,48,131,224,40,0,86,229,128,0,16,227,7,0,0,26,0,144,160,227,40,112,69,226, 7,128,140,224,19,250,255,235,200,249,255,235,16,0,160,227,153,0,1,224,1,48,131,224,240,248,255,234,36,0,214,229, 128,0,16,227,7,0,0,26,0,144,160,227,36,112,133,226,7,128,140,224,7,250,255,235,188,249,255,235,24,0,160,227, 153,0,1,224,1,48,131,224,228,248,255,234,36,0,214,229,128,0,16,227,7,0,0,26,0,144,160,227,36,112,133,226, 7,128,140,224,251,249,255,235,176,249,255,235,21,0,160,227,153,0,1,224,1,48,131,224,216,248,255,234,0,144,160,227, 44,112,133,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,239,249,255,235,44,112,135,226,7,128,140,224, 0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,231,249,255,235,156,249,255,235,10,0,160,227, 153,0,1,224,1,48,131,224,0,144,160,227,44,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26, 220,249,255,235,44,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26, 212,249,255,235,137,249,255,235,7,0,160,227,153,0,1,224,1,48,131,224,177,248,255,234,0,144,160,227,40,112,133,226, 7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,200,249,255,235,40,112,135,226,7,128,140,224,0,0,88,229, 0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,192,249,255,235,117,249,255,235,10,0,160,227,153,0,1,224, 1,48,131,224,0,144,160,227,40,112,69,226,7,128,140,224,0,0,88,229,0,0,80,227,5,0,0,26,181,249,255,235, 40,112,71,226,7,128,140,224,0,0,88,229,0,0,80,227,249,255,255,10,128,0,16,227,1,0,0,26,173,249,255,235, 98,249,255,235,8,0,160,227,153,0,1,224,1,48,131,224,138,248,255,234,4,224,45,229,0,82,159,229,0,0,160,227, 60,144,160,227,4,0,133,228,1,144,89,226,252,255,255,26,0,0,160,227,156,6,12,229,148,95,28,229,84,0,85,227, 8,0,0,58,5,96,140,224,0,0,86,229,30,0,0,226,15,18,214,229,1,0,128,225,113,0,0,235,152,95,22,229, 84,0,85,227,246,255,255,42,192,0,0,235,124,24,28,229,120,40,28,229,104,56,28,229,100,72,28,229,84,88,28,229, 80,104,28,229,1,0,85,225,1,0,0,10,2,0,86,225,40,0,0,26,3,0,85,225,1,0,0,10,4,0,86,225, 36,0,0,26,64,88,28,229,60,104,28,229,1,0,85,225,1,0,0,10,2,0,86,225,3,0,0,26,3,0,85,225, 10,0,0,10,4,0,86,225,8,0,0,10,68,8,28,229,88,8,12,229,56,8,28,229,76,8,12,229,52,8,28,229, 72,8,12,229,84,88,12,229,80,104,12,229,17,0,0,234,44,88,28,229,40,104,28,229,1,0,85,225,1,0,0,10, 2,0,86,225,3,0,0,26,3,0,85,225,9,0,0,10,4,0,86,225,7,0,0,10,48,8,28,229,88,8,12,229, 36,8,28,229,76,8,12,229,32,8,28,229,72,8,12,229,84,88,12,229,80,104,12,229,124,88,28,229,0,0,85,227, 53,0,0,10,8,0,85,227,11,0,0,58,1,16,160,227,5,96,140,224,12,18,70,229,112,72,28,229,0,0,84,227, 5,0,0,10,4,96,134,224,0,0,86,229,0,0,80,227,1,0,0,26,12,18,70,229,249,255,255,234,104,88,28,229, 0,0,85,227,36,0,0,10,8,0,85,227,14,0,0,58,5,96,140,224,12,2,86,229,2,0,128,227,12,2,70,229, 92,72,28,229,0,0,84,227,7,0,0,10,4,96,134,224,0,0,86,229,0,0,80,227,3,0,0,26,12,2,86,229, 2,0,128,227,12,2,70,229,247,255,255,234,84,88,28,229,0,0,85,227,16,0,0,10,8,0,85,227,14,0,0,58, 5,96,140,224,12,2,86,229,4,0,128,227,12,2,70,229,72,72,28,229,0,0,84,227,7,0,0,10,4,96,134,224, 0,0,86,229,0,0,80,227,3,0,0,26,12,2,86,229,4,0,128,227,12,2,70,229,247,255,255,234,4,240,157,228, 100,12,0,224,4,224,45,229,128,0,143,224,0,240,144,229,112,49,1,0,192,50,1,0,148,49,1,0,192,50,1,0, 216,49,1,0,192,50,1,0,28,50,1,0,192,50,1,0,192,50,1,0,0,0,0,0,132,51,1,0,136,52,1,0, 252,53,1,0,0,55,1,0,116,56,1,0,0,0,0,0,144,49,1,0,156,58,1,0,144,49,1,0,156,58,1,0, 144,49,1,0,156,58,1,0,88,58,1,0,156,58,1,0,156,58,1,0,0,0,0,0,40,59,1,0,172,59,1,0, 144,49,1,0,172,60,1,0,144,49,1,0,0,0,0,0,112,49,1,0,192,58,1,0,148,49,1,0,192,58,1,0, 144,49,1,0,192,58,1,0,112,49,1,0,192,58,1,0,192,58,1,0,0,0,0,0,144,49,1,0,192,58,1,0, 40,60,1,0,240,60,1,0,144,49,1,0,0,0,0,0,144,49,1,0,4,59,1,0,144,49,1,0,4,59,1,0, 144,49,1,0,4,59,1,0,124,50,1,0,4,59,1,0,4,59,1,0,0,0,0,0,4,52,1,0,128,53,1,0, 144,49,1,0,108,61,1,0,144,49,1,0,0,0,0,0,144,49,1,0,64,51,1,0,144,49,1,0,64,51,1,0, 144,49,1,0,64,51,1,0,144,49,1,0,64,51,1,0,64,51,1,0,0,0,0,0,144,49,1,0,64,51,1,0, 124,54,1,0,248,55,1,0,144,49,1,0,0,0,0,0,4,224,45,229,0,0,160,227,152,6,12,229,148,6,12,229, 144,6,12,229,168,95,28,229,5,96,140,224,0,0,70,229,2,16,214,229,24,36,150,229,6,0,45,233,2,0,198,229, 24,4,134,229,186,15,92,229,0,0,80,227,43,0,0,10,2,0,160,227,156,6,12,229,168,95,28,229,5,96,140,224, 84,0,86,229,0,0,80,227,15,0,0,26,210,5,214,229,120,0,80,227,12,0,0,58,84,80,69,226,5,96,140,224, 40,0,160,227,0,0,70,229,32,0,160,227,2,0,198,229,2,12,160,227,24,4,134,229,205,1,0,235,0,0,160,227, 0,0,70,229,2,0,198,229,24,4,134,229,168,95,28,229,5,96,140,224,76,0,86,229,0,0,80,227,15,0,0,26, 218,5,214,229,120,0,80,227,12,0,0,58,76,80,69,226,5,96,140,224,40,0,160,227,0,0,70,229,32,0,160,227, 2,0,198,229,2,12,160,227,24,4,134,229,184,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229, 185,15,92,229,0,0,80,227,106,0,0,10,3,0,160,227,156,6,12,229,168,95,28,229,5,96,140,224,40,0,86,229, 0,0,80,227,15,0,0,26,254,5,214,229,120,0,80,227,12,0,0,58,40,80,69,226,5,96,140,224,44,0,160,227, 0,0,70,229,50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229,160,1,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,168,95,28,229,5,96,140,224,44,0,86,229,0,0,80,227,15,0,0,26,250,5,214,229, 120,0,80,227,12,0,0,58,44,80,69,226,5,96,140,224,44,0,160,227,0,0,70,229,50,0,160,227,2,0,198,229, 50,14,160,227,24,4,134,229,139,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,168,95,28,229, 5,96,140,224,36,0,86,229,0,0,80,227,15,0,0,26,2,6,214,229,120,0,80,227,12,0,0,58,36,80,69,226, 5,96,140,224,44,0,160,227,0,0,70,229,50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229,118,1,0,235, 0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,168,95,28,229,5,96,140,224,36,0,214,229,0,0,80,227, 15,0,0,26,74,6,214,229,120,0,80,227,12,0,0,58,36,80,133,226,5,96,140,224,44,0,160,227,0,0,70,229, 50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229,97,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229, 24,4,134,229,168,95,28,229,5,96,140,224,44,0,214,229,0,0,80,227,15,0,0,26,82,6,214,229,120,0,80,227, 12,0,0,58,44,80,133,226,5,96,140,224,44,0,160,227,0,0,70,229,50,0,160,227,2,0,198,229,50,14,160,227, 24,4,134,229,76,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,184,15,92,229,0,0,80,227, 127,0,0,10,4,0,160,227,156,6,12,229,168,95,28,229,5,96,140,224,40,0,86,229,0,0,80,227,15,0,0,26, 254,5,214,229,120,0,80,227,12,0,0,58,40,80,69,226,5,96,140,224,48,0,160,227,0,0,70,229,52,0,160,227, 2,0,198,229,13,13,160,227,24,4,134,229,52,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229, 168,95,28,229,5,96,140,224,44,0,86,229,0,0,80,227,15,0,0,26,250,5,214,229,120,0,80,227,12,0,0,58, 44,80,69,226,5,96,140,224,48,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229, 31,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,168,95,28,229,5,96,140,224,36,0,86,229, 0,0,80,227,15,0,0,26,2,6,214,229,120,0,80,227,12,0,0,58,36,80,69,226,5,96,140,224,48,0,160,227, 0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229,10,1,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,168,95,28,229,5,96,140,224,4,0,86,229,0,0,80,227,15,0,0,26,34,6,214,229, 120,0,80,227,12,0,0,58,4,80,69,226,5,96,140,224,48,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229, 13,13,160,227,24,4,134,229,245,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,168,95,28,229, 5,96,140,224,4,0,214,229,0,0,80,227,15,0,0,26,42,6,214,229,120,0,80,227,12,0,0,58,4,80,133,226, 5,96,140,224,48,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229,224,0,0,235, 0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,168,95,28,229,5,96,140,224,40,0,214,229,0,0,80,227, 15,0,0,26,78,6,214,229,120,0,80,227,12,0,0,58,40,80,133,226,5,96,140,224,48,0,160,227,0,0,70,229, 52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229,203,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229, 24,4,134,229,183,15,92,229,0,0,80,227,85,0,0,10,5,0,160,227,156,6,12,229,168,95,28,229,14,0,0,234, 5,96,140,224,38,6,214,229,120,0,80,227,10,0,0,58,52,0,160,227,0,0,70,229,70,0,160,227,2,0,198,229, 70,14,160,227,24,4,134,229,183,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,44,80,69,226, 5,0,220,231,0,0,80,227,236,255,255,10,168,95,28,229,14,0,0,234,5,96,140,224,38,6,214,229,120,0,80,227, 10,0,0,58,52,0,160,227,0,0,70,229,70,0,160,227,2,0,198,229,70,14,160,227,24,4,134,229,162,0,0,235, 0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,36,80,69,226,5,0,220,231,0,0,80,227,236,255,255,10, 168,95,28,229,14,0,0,234,5,96,140,224,38,6,214,229,120,0,80,227,10,0,0,58,52,0,160,227,0,0,70,229, 70,0,160,227,2,0,198,229,70,14,160,227,24,4,134,229,141,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229, 24,4,134,229,36,80,133,226,5,0,220,231,0,0,80,227,236,255,255,10,168,95,28,229,14,0,0,234,5,96,140,224, 38,6,214,229,120,0,80,227,10,0,0,58,52,0,160,227,0,0,70,229,70,0,160,227,2,0,198,229,70,14,160,227, 24,4,134,229,120,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,44,80,133,226,5,0,220,231, 0,0,80,227,236,255,255,10,182,15,92,229,0,0,80,227,85,0,0,10,6,0,160,227,156,6,12,229,168,95,28,229, 14,0,0,234,5,96,140,224,38,6,214,229,120,0,80,227,10,0,0,58,56,0,160,227,0,0,70,229,80,0,160,227, 2,0,198,229,5,12,160,227,24,4,134,229,96,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229, 40,80,69,226,5,0,220,231,0,0,80,227,236,255,255,10,168,95,28,229,14,0,0,234,5,96,140,224,38,6,214,229, 120,0,80,227,10,0,0,58,56,0,160,227,0,0,70,229,80,0,160,227,2,0,198,229,5,12,160,227,24,4,134,229, 75,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,4,80,69,226,5,0,220,231,0,0,80,227, 236,255,255,10,168,95,28,229,14,0,0,234,5,96,140,224,38,6,214,229,120,0,80,227,10,0,0,58,56,0,160,227, 0,0,70,229,80,0,160,227,2,0,198,229,5,12,160,227,24,4,134,229,54,0,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,4,80,133,226,5,0,220,231,0,0,80,227,236,255,255,10,168,95,28,229,14,0,0,234, 5,96,140,224,38,6,214,229,120,0,80,227,10,0,0,58,56,0,160,227,0,0,70,229,80,0,160,227,2,0,198,229, 5,12,160,227,24,4,134,229,33,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,40,80,133,226, 5,0,220,231,0,0,80,227,236,255,255,10,168,95,28,229,5,96,140,224,92,0,160,227,0,0,70,229,6,0,189,232, 2,16,198,229,24,36,134,229,152,38,28,229,0,0,82,227,6,0,0,10,148,86,28,229,144,118,28,229,0,0,160,227, 160,6,12,229,164,6,12,229,0,64,160,227,97,0,0,235,4,240,157,228,4,224,45,229,54,1,0,234,4,224,45,229, 69,1,0,234,4,224,45,229,108,1,0,234,4,224,45,229,155,1,0,234,4,224,45,229,55,2,0,234,4,224,45,229, 224,1,45,233,7,80,160,225,31,204,255,235,224,1,189,232,0,16,86,229,0,32,88,229,6,0,45,233,2,16,129,227, 10,0,0,234,4,224,45,229,0,0,88,229,0,0,80,227,85,0,0,10,224,1,45,233,7,80,160,225,18,204,255,235, 224,1,189,232,0,16,86,229,0,32,88,229,6,0,45,233,0,16,72,229,0,0,160,227,0,0,70,229,2,16,216,229, 2,0,214,229,2,0,200,229,226,1,45,233,7,80,160,225,137,245,255,235,140,8,28,229,128,49,131,224,226,1,189,232, 2,16,200,229,6,0,189,232,0,16,70,229,0,32,72,229,24,4,150,229,0,48,67,224,195,50,160,225,232,1,45,233, 7,80,160,225,224,203,255,235,232,1,189,232,2,16,214,229,2,32,216,229,2,64,160,225,0,0,160,227,164,6,12,229, 120,0,82,227,24,0,0,42,3,16,129,224,3,32,130,224,0,0,82,227,44,0,0,218,0,0,83,227,0,48,160,179, 164,54,12,229,221,219,255,235,1,48,160,225,156,8,92,229,0,16,81,224,0,16,160,51,48,8,216,229,0,0,80,227, 4,0,0,10,227,219,255,235,156,8,92,229,0,48,83,224,0,48,160,51,0,0,0,234,1,48,160,225,2,64,160,225, 1,32,82,224,24,0,0,74,3,64,68,224,156,6,28,229,0,0,80,227,7,0,0,10,152,6,28,229,2,0,80,225, 3,0,0,42,152,38,12,229,156,22,28,229,148,22,12,229,144,86,12,229,4,240,157,228,48,8,28,229,2,0,80,225, 9,0,0,42,68,8,28,229,2,0,80,225,7,0,0,58,48,40,12,229,44,88,12,229,40,120,12,229,164,6,28,229, 36,8,12,229,160,6,28,229,32,8,12,229,4,240,157,228,88,8,28,229,2,0,80,225,17,0,0,58,68,8,28,229, 48,8,12,229,68,40,12,229,64,8,28,229,44,8,12,229,64,88,12,229,60,8,28,229,40,8,12,229,60,120,12,229, 56,8,28,229,36,8,12,229,164,6,28,229,56,8,12,229,52,8,28,229,32,8,12,229,160,6,28,229,52,8,12,229, 4,240,157,228,108,8,28,229,2,0,80,225,27,0,0,58,68,8,28,229,48,8,12,229,88,8,28,229,68,8,12,229, 88,40,12,229,64,8,28,229,44,8,12,229,84,8,28,229,64,8,12,229,84,88,12,229,60,8,28,229,40,8,12,229, 80,8,28,229,60,8,12,229,80,120,12,229,56,8,28,229,36,8,12,229,76,8,28,229,56,8,12,229,164,6,28,229, 76,8,12,229,52,8,28,229,32,8,12,229,72,8,28,229,52,8,12,229,160,6,28,229,72,8,12,229,4,240,157,228, 128,8,28,229,2,0,80,225,37,0,0,58,68,8,28,229,48,8,12,229,88,8,28,229,68,8,12,229,108,8,28,229, 88,8,12,229,108,40,12,229,64,8,28,229,44,8,12,229,84,8,28,229,64,8,12,229,104,8,28,229,84,8,12,229, 104,88,12,229,60,8,28,229,40,8,12,229,80,8,28,229,60,8,12,229,100,8,28,229,80,8,12,229,100,120,12,229, 56,8,28,229,36,8,12,229,76,8,28,229,56,8,12,229,96,8,28,229,76,8,12,229,164,6,28,229,96,8,12,229, 52,8,28,229,32,8,12,229,72,8,28,229,52,8,12,229,92,8,28,229,72,8,12,229,160,6,28,229,92,8,12,229, 4,240,157,228,0,0,84,227,2,0,0,186,160,6,28,229,0,0,80,227,0,0,0,10,0,64,160,227,132,72,12,229, 68,8,28,229,48,8,12,229,88,8,28,229,68,8,12,229,108,8,28,229,88,8,12,229,128,8,28,229,108,8,12,229, 128,40,12,229,64,8,28,229,44,8,12,229,84,8,28,229,64,8,12,229,104,8,28,229,84,8,12,229,124,8,28,229, 104,8,12,229,124,88,12,229,60,8,28,229,40,8,12,229,80,8,28,229,60,8,12,229,100,8,28,229,80,8,12,229, 120,8,28,229,100,8,12,229,120,120,12,229,56,8,28,229,36,8,12,229,76,8,28,229,56,8,12,229,96,8,28,229, 76,8,12,229,116,8,28,229,96,8,12,229,164,6,28,229,116,8,12,229,52,8,28,229,32,8,12,229,72,8,28,229, 52,8,12,229,92,8,28,229,72,8,12,229,112,8,28,229,92,8,12,229,160,6,28,229,112,8,12,229,4,240,157,228, 81,15,87,227,14,255,255,58,3,255,255,234,81,15,85,227,11,255,255,58,0,255,255,234,160,6,28,229,0,0,80,227, 17,0,0,26,36,6,216,229,3,0,80,227,14,0,0,186,12,0,0,202,196,31,28,229,192,47,28,229,255,0,193,227, 1,0,144,225,7,0,0,26,255,0,17,227,6,0,0,10,7,0,139,224,36,11,16,229,0,0,140,224,128,11,80,229, 0,0,80,227,0,0,0,26,160,70,12,229,14,240,160,225,40,0,214,229,160,0,16,227,4,0,0,26,0,0,160,227, 160,6,12,229,40,112,133,226,7,128,140,224,219,255,255,235,4,240,157,228,0,0,160,227,160,6,12,229,40,112,133,226, 4,0,0,234,7,128,140,224,212,255,255,235,40,64,160,227,216,255,255,235,40,112,135,226,7,0,220,231,0,0,80,227, 247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,202,255,255,235,4,240,157,228,84,0,214,229,160,0,16,227, 4,0,0,26,0,0,160,227,160,6,12,229,84,112,133,226,7,128,140,224,193,255,255,235,76,0,214,229,160,0,16,227, 4,0,0,26,0,0,160,227,160,6,12,229,76,112,133,226,7,128,140,224,185,255,255,235,4,240,157,228,44,0,214,229, 160,0,16,227,4,0,0,26,0,0,160,227,160,6,12,229,44,112,133,226,7,128,140,224,176,255,255,235,44,0,86,229, 160,0,16,227,4,0,0,26,0,0,160,227,160,6,12,229,44,112,69,226,7,128,140,224,171,255,255,235,40,0,214,229, 160,0,16,227,4,0,0,26,0,0,160,227,160,6,12,229,40,112,133,226,7,128,140,224,160,255,255,235,36,0,214,229, 160,0,16,227,4,0,0,26,0,0,160,227,160,6,12,229,36,112,133,226,7,128,140,224,152,255,255,235,36,0,86,229, 160,0,16,227,4,0,0,26,0,0,160,227,160,6,12,229,36,112,69,226,7,128,140,224,147,255,255,235,4,240,157,228, 44,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,44,112,133,226,7,128,140,224,152,254,255,235, 40,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,40,112,133,226,7,128,140,224,144,254,255,235, 40,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,40,112,69,226,7,128,140,224,136,254,255,235, 36,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,36,112,133,226,7,128,140,224,128,254,255,235, 4,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,4,112,133,226,7,128,140,224,120,254,255,235, 4,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,4,112,69,226,7,128,140,224,112,254,255,235, 4,240,157,228,0,0,160,227,160,6,12,229,44,112,133,226,4,0,0,234,7,128,140,224,88,255,255,235,44,64,160,227, 92,255,255,235,44,112,135,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224, 78,255,255,235,0,0,160,227,160,6,12,229,44,112,69,226,4,0,0,234,7,128,140,224,75,255,255,235,43,64,224,227, 76,255,255,235,44,112,71,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224, 65,255,255,235,0,0,160,227,160,6,12,229,36,112,133,226,4,0,0,234,7,128,140,224,56,255,255,235,36,64,160,227, 60,255,255,235,36,112,135,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224, 46,255,255,235,0,0,160,227,160,6,12,229,36,112,69,226,4,0,0,234,7,128,140,224,43,255,255,235,35,64,224,227, 44,255,255,235,36,112,71,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224, 33,255,255,235,4,240,157,228,40,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,40,112,133,226, 7,128,140,224,38,254,255,235,4,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,4,112,133,226, 7,128,140,224,30,254,255,235,4,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,4,112,69,226, 7,128,140,224,22,254,255,235,40,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,40,112,69,226, 7,128,140,224,14,254,255,235,0,0,160,227,160,6,12,229,44,112,133,226,3,0,0,234,7,128,140,224,44,64,160,227, 252,254,255,235,44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224, 255,253,255,235,0,0,160,227,160,6,12,229,44,112,69,226,3,0,0,234,7,128,140,224,43,64,224,227,237,254,255,235, 44,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,240,253,255,235, 0,0,160,227,160,6,12,229,36,112,133,226,3,0,0,234,7,128,140,224,36,64,160,227,222,254,255,235,36,112,135,226, 7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,225,253,255,235,0,0,160,227, 160,6,12,229,36,112,69,226,3,0,0,234,7,128,140,224,35,64,224,227,207,254,255,235,36,112,71,226,7,0,220,231, 0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,210,253,255,235,4,240,157,228,0,0,160,227, 160,6,12,229,40,112,133,226,4,0,0,234,7,128,140,224,186,254,255,235,40,64,160,227,190,254,255,235,40,112,135,226, 7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,176,254,255,235,0,0,160,227, 160,6,12,229,40,112,69,226,4,0,0,234,7,128,140,224,173,254,255,235,39,64,224,227,174,254,255,235,40,112,71,226, 7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,163,254,255,235,0,0,160,227, 160,6,12,229,4,112,133,226,4,0,0,234,7,128,140,224,154,254,255,235,4,64,160,227,158,254,255,235,4,112,135,226, 7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,144,254,255,235,0,0,160,227, 160,6,12,229,4,112,69,226,4,0,0,234,7,128,140,224,141,254,255,235,3,64,224,227,142,254,255,235,4,112,71,226, 7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,131,254,255,235,4,240,157,228, 44,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,44,112,133,226,7,128,140,224,136,253,255,235, 36,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,36,112,133,226,7,128,140,224,128,253,255,235, 36,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,36,112,69,226,7,128,140,224,120,253,255,235, 44,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,44,112,69,226,7,128,140,224,112,253,255,235, 0,0,160,227,160,6,12,229,40,112,133,226,3,0,0,234,7,128,140,224,40,64,160,227,94,254,255,235,40,112,135,226, 7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,97,253,255,235,0,0,160,227, 160,6,12,229,40,112,69,226,3,0,0,234,7,128,140,224,39,64,224,227,79,254,255,235,40,112,71,226,7,0,220,231, 0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,82,253,255,235,0,0,160,227,160,6,12,229, 4,112,133,226,3,0,0,234,7,128,140,224,4,64,160,227,64,254,255,235,4,112,135,226,7,0,220,231,0,0,80,227, 248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224,67,253,255,235,0,0,160,227,160,6,12,229,4,112,69,226, 3,0,0,234,7,128,140,224,3,64,224,227,49,254,255,235,4,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10, 64,0,16,227,1,0,0,10,7,128,140,224,52,253,255,235,4,240,157,228,24,4,86,229,128,0,16,227,11,0,0,26, 44,0,214,229,64,0,16,227,8,0,0,10,246,5,22,229,236,19,86,229,32,8,145,225,4,0,0,26,0,0,160,227, 160,6,12,229,44,112,133,226,7,128,140,224,36,253,255,235,24,4,86,229,64,0,16,227,11,0,0,26,40,0,214,229, 64,0,16,227,8,0,0,10,250,5,22,229,240,19,86,229,32,8,145,225,4,0,0,26,0,0,160,227,160,6,12,229, 40,112,133,226,7,128,140,224,21,253,255,235,24,4,86,229,32,0,16,227,11,0,0,26,36,0,214,229,64,0,16,227, 8,0,0,10,254,5,22,229,244,19,86,229,32,8,145,225,4,0,0,26,0,0,160,227,160,6,12,229,36,112,133,226, 7,128,140,224,6,253,255,235,24,4,86,229,16,0,16,227,11,0,0,26,4,0,214,229,64,0,16,227,8,0,0,10, 30,6,22,229,20,20,86,229,32,8,145,225,4,0,0,26,0,0,160,227,160,6,12,229,4,112,133,226,7,128,140,224, 247,252,255,235,24,4,86,229,8,0,16,227,11,0,0,26,4,0,86,229,64,0,16,227,8,0,0,10,38,6,22,229, 28,20,86,229,32,8,145,225,4,0,0,26,0,0,160,227,160,6,12,229,4,112,69,226,7,128,140,224,232,252,255,235, 24,4,86,229,4,0,16,227,11,0,0,26,36,0,86,229,64,0,16,227,8,0,0,10,70,6,22,229,60,20,86,229, 32,8,145,225,4,0,0,26,0,0,160,227,160,6,12,229,36,112,69,226,7,128,140,224,217,252,255,235,24,4,86,229, 2,0,16,227,11,0,0,26,40,0,86,229,64,0,16,227,8,0,0,10,74,6,22,229,64,20,86,229,32,8,145,225, 4,0,0,26,0,0,160,227,160,6,12,229,40,112,69,226,7,128,140,224,202,252,255,235,24,4,86,229,1,0,16,227, 11,0,0,26,44,0,86,229,64,0,16,227,8,0,0,10,78,6,22,229,68,20,86,229,32,8,145,225,4,0,0,26, 0,0,160,227,160,6,12,229,44,112,69,226,7,128,140,224,187,252,255,235,4,240,157,228,44,0,214,229,160,0,16,227, 4,0,0,26,0,0,160,227,160,6,12,229,44,112,133,226,7,128,140,224,161,253,255,235,44,0,86,229,160,0,16,227, 4,0,0,26,0,0,160,227,160,6,12,229,44,112,69,226,7,128,140,224,156,253,255,235,4,240,157,228,44,0,214,229, 64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,44,112,133,226,7,128,140,224,161,252,255,235,4,240,157,228, 40,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,40,112,133,226,7,128,140,224,152,252,255,235, 40,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,40,112,69,226,7,128,140,224,144,252,255,235, 4,240,157,228,36,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229,36,112,133,226,7,128,140,224, 135,252,255,235,4,240,157,228,0,0,160,227,160,6,12,229,44,112,133,226,4,0,0,234,7,128,140,224,111,253,255,235, 44,64,160,227,115,253,255,235,44,112,135,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10, 7,128,140,224,101,253,255,235,0,0,160,227,160,6,12,229,44,112,69,226,4,0,0,234,7,128,140,224,98,253,255,235, 43,64,224,227,99,253,255,235,44,112,71,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10, 7,128,140,224,88,253,255,235,4,240,157,228,0,0,160,227,160,6,12,229,44,112,133,226,3,0,0,234,7,128,140,224, 44,64,160,227,83,253,255,235,44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10, 7,128,140,224,86,252,255,235,0,0,160,227,160,6,12,229,44,112,69,226,3,0,0,234,7,128,140,224,43,64,224,227, 68,253,255,235,44,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10,7,128,140,224, 71,252,255,235,4,240,157,228,0,0,160,227,160,6,12,229,40,112,133,226,4,0,0,234,7,128,140,224,47,253,255,235, 40,64,160,227,51,253,255,235,40,112,135,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10, 7,128,140,224,37,253,255,235,0,0,160,227,160,6,12,229,40,112,69,226,4,0,0,234,7,128,140,224,34,253,255,235, 39,64,224,227,35,253,255,235,40,112,71,226,7,0,220,231,0,0,80,227,247,255,255,10,64,0,16,227,1,0,0,10, 7,128,140,224,24,253,255,235,4,240,157,228,44,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229, 44,112,133,226,7,128,140,224,29,252,255,235,44,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229, 44,112,69,226,7,128,140,224,21,252,255,235,4,240,157,228,0,0,160,227,160,6,12,229,40,112,133,226,3,0,0,234, 7,128,140,224,40,64,160,227,2,253,255,235,40,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227, 1,0,0,10,7,128,140,224,5,252,255,235,0,0,160,227,160,6,12,229,40,112,69,226,3,0,0,234,7,128,140,224, 39,64,224,227,243,252,255,235,40,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,64,0,16,227,1,0,0,10, 7,128,140,224,246,251,255,235,4,240,157,228,36,0,214,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229, 36,112,133,226,7,128,140,224,237,251,255,235,36,0,86,229,64,0,16,227,4,0,0,10,0,0,160,227,160,6,12,229, 36,112,69,226,7,128,140,224,229,251,255,235,4,240,157,228,4,224,45,229,240,10,28,229,0,0,80,227,4,0,0,10, 128,8,28,229,132,8,12,229,120,8,28,229,236,10,12,229,69,0,0,234,120,8,28,229,236,26,28,229,0,0,81,225, 65,0,0,10,236,10,12,229,112,72,28,229,0,0,84,227,32,0,0,10,124,88,28,229,104,8,28,229,5,0,80,225, 10,0,0,26,92,8,28,229,4,0,80,225,7,0,0,26,84,8,28,229,5,0,80,225,15,0,0,26,72,8,28,229, 4,0,80,225,12,0,0,26,0,16,160,227,42,0,0,234,120,120,28,229,108,24,28,229,100,8,28,229,7,0,80,225, 37,0,0,26,88,24,28,229,80,8,28,229,7,0,80,225,33,0,0,26,0,16,160,227,31,0,0,234,120,120,28,229, 88,24,28,229,80,8,28,229,7,0,80,225,26,0,0,26,0,16,160,227,24,0,0,234,124,8,28,229,8,0,80,227, 9,0,0,42,108,24,28,229,104,8,28,229,8,0,80,227,17,0,0,42,88,24,28,229,84,8,28,229,8,0,80,227, 13,0,0,42,0,16,160,227,11,0,0,234,132,24,28,229,120,120,28,229,108,40,28,229,100,8,28,229,7,0,80,225, 3,0,0,26,88,40,28,229,80,8,28,229,7,0,80,225,1,0,0,10,2,0,81,225,2,16,160,49,128,72,28,229, 1,64,68,224,1,64,84,226,28,72,12,85,0,0,160,227,140,6,12,229,1,0,160,227,0,4,128,224,0,8,128,224, 112,6,12,229,152,95,28,229,84,0,85,227,11,0,0,58,112,6,28,229,224,0,160,225,112,6,12,229,5,96,140,224, 0,0,86,229,30,0,0,226,13,18,214,229,1,0,128,225,28,0,0,235,152,95,22,229,84,0,85,227,243,255,255,42, 107,0,0,235,28,8,28,229,0,0,80,227,4,0,0,10,12,24,28,229,8,40,28,229,2,16,145,225,1,0,128,2, 28,8,12,5,4,8,28,229,0,0,80,227,4,0,0,10,244,23,28,229,240,39,28,229,2,16,145,225,1,0,128,2, 4,8,12,5,236,7,28,229,0,0,80,227,4,0,0,10,220,23,28,229,216,39,28,229,2,16,145,225,1,0,128,2, 236,7,12,5,4,240,157,228,4,224,45,229,128,0,143,224,0,240,144,229,24,79,1,0,60,80,1,0,56,79,1,0, 60,80,1,0,112,79,1,0,60,80,1,0,172,79,1,0,60,80,1,0,60,80,1,0,0,0,0,0,232,80,1,0, 188,81,1,0,0,83,1,0,212,83,1,0,24,85,1,0,0,0,0,0,52,79,1,0,24,87,1,0,52,79,1,0, 24,87,1,0,52,79,1,0,24,87,1,0,220,86,1,0,24,87,1,0,24,87,1,0,0,0,0,0,148,87,1,0, 0,88,1,0,52,79,1,0,216,88,1,0,52,79,1,0,0,0,0,0,24,79,1,0,56,87,1,0,56,79,1,0, 56,87,1,0,52,79,1,0,56,87,1,0,24,79,1,0,56,87,1,0,56,87,1,0,0,0,0,0,52,79,1,0, 56,87,1,0,108,88,1,0,20,89,1,0,52,79,1,0,0,0,0,0,52,79,1,0,116,87,1,0,52,79,1,0, 116,87,1,0,52,79,1,0,116,87,1,0,0,80,1,0,116,87,1,0,116,87,1,0,0,0,0,0,80,81,1,0, 148,82,1,0,52,79,1,0,128,89,1,0,52,79,1,0,0,0,0,0,52,79,1,0,172,80,1,0,52,79,1,0, 172,80,1,0,52,79,1,0,172,80,1,0,52,79,1,0,172,80,1,0,172,80,1,0,0,0,0,0,52,79,1,0, 172,80,1,0,104,83,1,0,172,84,1,0,52,79,1,0,0,0,0,0,0,0,160,227,136,6,12,229,132,6,12,229, 128,6,12,229,124,6,12,229,120,6,12,229,116,6,12,229,164,95,28,229,5,96,140,224,0,0,70,229,2,16,214,229, 24,36,150,229,6,0,45,233,2,0,198,229,24,4,134,229,194,15,92,229,0,0,80,227,43,0,0,10,2,0,160,227, 140,6,12,229,164,95,28,229,5,96,140,224,84,0,214,229,0,0,80,227,15,0,0,26,123,6,214,229,120,0,80,227, 12,0,0,58,84,80,133,226,5,96,140,224,72,0,160,227,0,0,70,229,32,0,160,227,2,0,198,229,2,12,160,227, 24,4,134,229,205,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224, 76,0,214,229,0,0,80,227,15,0,0,26,115,6,214,229,120,0,80,227,12,0,0,58,76,80,133,226,5,96,140,224, 72,0,160,227,0,0,70,229,32,0,160,227,2,0,198,229,2,12,160,227,24,4,134,229,184,1,0,235,0,0,160,227, 0,0,70,229,2,0,198,229,24,4,134,229,193,15,92,229,0,0,80,227,106,0,0,10,3,0,160,227,140,6,12,229, 164,95,28,229,5,96,140,224,40,0,214,229,0,0,80,227,15,0,0,26,79,6,214,229,120,0,80,227,12,0,0,58, 40,80,133,226,5,96,140,224,76,0,160,227,0,0,70,229,50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229, 160,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224,44,0,214,229, 0,0,80,227,15,0,0,26,83,6,214,229,120,0,80,227,12,0,0,58,44,80,133,226,5,96,140,224,76,0,160,227, 0,0,70,229,50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229,139,1,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224,36,0,214,229,0,0,80,227,15,0,0,26,75,6,214,229, 120,0,80,227,12,0,0,58,36,80,133,226,5,96,140,224,76,0,160,227,0,0,70,229,50,0,160,227,2,0,198,229, 50,14,160,227,24,4,134,229,118,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229, 5,96,140,224,36,0,86,229,0,0,80,227,15,0,0,26,3,6,214,229,120,0,80,227,12,0,0,58,36,80,69,226, 5,96,140,224,76,0,160,227,0,0,70,229,50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229,97,1,0,235, 0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224,44,0,86,229,0,0,80,227, 15,0,0,26,251,5,214,229,120,0,80,227,12,0,0,58,44,80,69,226,5,96,140,224,76,0,160,227,0,0,70,229, 50,0,160,227,2,0,198,229,50,14,160,227,24,4,134,229,76,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229, 24,4,134,229,192,15,92,229,0,0,80,227,127,0,0,10,4,0,160,227,140,6,12,229,164,95,28,229,5,96,140,224, 40,0,214,229,0,0,80,227,15,0,0,26,79,6,214,229,120,0,80,227,12,0,0,58,40,80,133,226,5,96,140,224, 80,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229,52,1,0,235,0,0,160,227, 0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224,44,0,214,229,0,0,80,227,15,0,0,26, 83,6,214,229,120,0,80,227,12,0,0,58,44,80,133,226,5,96,140,224,80,0,160,227,0,0,70,229,52,0,160,227, 2,0,198,229,13,13,160,227,24,4,134,229,31,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229, 164,95,28,229,5,96,140,224,36,0,214,229,0,0,80,227,15,0,0,26,75,6,214,229,120,0,80,227,12,0,0,58, 36,80,133,226,5,96,140,224,80,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229, 10,1,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224,4,0,214,229, 0,0,80,227,15,0,0,26,43,6,214,229,120,0,80,227,12,0,0,58,4,80,133,226,5,96,140,224,80,0,160,227, 0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229,245,0,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,164,95,28,229,5,96,140,224,4,0,86,229,0,0,80,227,15,0,0,26,35,6,214,229, 120,0,80,227,12,0,0,58,4,80,69,226,5,96,140,224,80,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229, 13,13,160,227,24,4,134,229,224,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,164,95,28,229, 5,96,140,224,40,0,86,229,0,0,80,227,15,0,0,26,255,5,214,229,120,0,80,227,12,0,0,58,40,80,69,226, 5,96,140,224,80,0,160,227,0,0,70,229,52,0,160,227,2,0,198,229,13,13,160,227,24,4,134,229,203,0,0,235, 0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,191,15,92,229,0,0,80,227,85,0,0,10,5,0,160,227, 140,6,12,229,164,95,28,229,14,0,0,234,5,96,140,224,39,6,214,229,120,0,80,227,10,0,0,58,84,0,160,227, 0,0,70,229,70,0,160,227,2,0,198,229,70,14,160,227,24,4,134,229,183,0,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,44,80,133,226,5,0,220,231,0,0,80,227,236,255,255,10,164,95,28,229,14,0,0,234, 5,96,140,224,39,6,214,229,120,0,80,227,10,0,0,58,84,0,160,227,0,0,70,229,70,0,160,227,2,0,198,229, 70,14,160,227,24,4,134,229,162,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,36,80,133,226, 5,0,220,231,0,0,80,227,236,255,255,10,164,95,28,229,14,0,0,234,5,96,140,224,39,6,214,229,120,0,80,227, 10,0,0,58,84,0,160,227,0,0,70,229,70,0,160,227,2,0,198,229,70,14,160,227,24,4,134,229,141,0,0,235, 0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,36,80,69,226,5,0,220,231,0,0,80,227,236,255,255,10, 164,95,28,229,14,0,0,234,5,96,140,224,39,6,214,229,120,0,80,227,10,0,0,58,84,0,160,227,0,0,70,229, 70,0,160,227,2,0,198,229,70,14,160,227,24,4,134,229,120,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229, 24,4,134,229,44,80,69,226,5,0,220,231,0,0,80,227,236,255,255,10,190,15,92,229,0,0,80,227,85,0,0,10, 6,0,160,227,140,6,12,229,164,95,28,229,14,0,0,234,5,96,140,224,39,6,214,229,120,0,80,227,10,0,0,58, 88,0,160,227,0,0,70,229,80,0,160,227,2,0,198,229,5,12,160,227,24,4,134,229,96,0,0,235,0,0,160,227, 0,0,70,229,2,0,198,229,24,4,134,229,40,80,133,226,5,0,220,231,0,0,80,227,236,255,255,10,164,95,28,229, 14,0,0,234,5,96,140,224,39,6,214,229,120,0,80,227,10,0,0,58,88,0,160,227,0,0,70,229,80,0,160,227, 2,0,198,229,5,12,160,227,24,4,134,229,75,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229, 4,80,133,226,5,0,220,231,0,0,80,227,236,255,255,10,164,95,28,229,14,0,0,234,5,96,140,224,39,6,214,229, 120,0,80,227,10,0,0,58,88,0,160,227,0,0,70,229,80,0,160,227,2,0,198,229,5,12,160,227,24,4,134,229, 54,0,0,235,0,0,160,227,0,0,70,229,2,0,198,229,24,4,134,229,4,80,69,226,5,0,220,231,0,0,80,227, 236,255,255,10,164,95,28,229,14,0,0,234,5,96,140,224,39,6,214,229,120,0,80,227,10,0,0,58,88,0,160,227, 0,0,70,229,80,0,160,227,2,0,198,229,5,12,160,227,24,4,134,229,33,0,0,235,0,0,160,227,0,0,70,229, 2,0,198,229,24,4,134,229,40,80,69,226,5,0,220,231,0,0,80,227,236,255,255,10,164,95,28,229,5,96,140,224, 60,0,160,227,0,0,70,229,6,0,189,232,2,16,198,229,24,36,134,229,136,38,28,229,0,0,82,227,6,0,0,10, 136,22,28,229,132,150,28,229,128,38,28,229,124,70,28,229,120,86,28,229,116,118,28,229,158,0,0,235,14,240,160,225, 4,224,45,229,169,1,0,234,4,224,45,229,182,1,0,234,4,224,45,229,216,1,0,234,4,224,45,229,1,2,0,234, 4,224,45,229,133,2,0,234,4,224,45,229,224,1,45,233,128,0,45,233,44,197,255,235,32,0,189,232,42,197,255,235, 224,1,189,232,0,16,86,229,0,32,88,229,6,0,45,233,2,16,129,227,15,0,0,234,4,224,45,229,0,0,160,227, 144,8,12,229,2,48,214,229,2,64,216,229,0,0,84,227,42,0,0,10,224,1,45,233,128,0,45,233,26,197,255,235, 32,0,189,232,24,197,255,235,224,1,189,232,0,16,86,229,0,32,88,229,6,0,45,233,0,16,72,229,0,0,160,227, 0,0,70,229,2,16,216,229,2,0,214,229,2,0,200,229,226,3,45,233,7,80,160,225,243,196,255,235,104,238,255,235, 8,0,45,233,8,197,255,235,8,0,189,232,140,8,28,229,128,49,131,224,226,3,189,232,2,16,200,229,6,0,189,232, 0,16,70,229,0,32,72,229,24,4,150,229,0,48,67,224,195,50,160,225,232,1,45,233,32,0,45,233,7,80,160,225, 225,196,255,235,32,0,189,232,223,196,255,235,232,1,189,232,2,64,216,229,3,64,132,224,2,0,214,229,0,48,131,224, 0,0,84,227,2,0,0,218,240,10,28,229,0,0,80,227,68,65,132,16,51,213,255,235,155,8,92,229,0,48,83,224, 0,48,160,51,144,8,28,229,0,64,132,224,0,48,131,224,3,32,160,225,2,64,68,224,128,56,28,229,3,16,160,225, 12,2,88,229,1,0,16,227,5,0,0,26,120,8,28,229,0,0,85,225,2,0,0,10,0,0,84,227,24,0,0,202, 4,240,157,228,108,56,28,229,12,2,88,229,2,0,16,227,2,0,0,26,100,8,28,229,0,0,85,225,7,0,0,26, 88,56,28,229,12,2,88,229,4,0,16,227,2,0,0,26,80,8,28,229,0,0,85,225,0,0,0,26,0,48,160,227, 120,8,28,229,0,0,85,225,5,0,0,26,124,8,28,229,0,0,87,225,2,0,0,10,116,8,28,229,0,0,83,225, 0,48,160,49,3,16,65,224,2,0,83,225,2,48,160,33,240,10,28,229,0,0,80,227,12,0,0,10,140,6,28,229, 0,0,80,227,4,240,157,20,3,16,129,224,4,16,129,224,3,0,81,227,4,240,157,212,112,6,92,229,10,2,70,229, 10,18,88,229,0,16,129,225,10,18,72,229,4,240,157,228,140,6,28,229,0,0,80,227,14,0,0,10,3,16,129,224, 4,16,129,224,0,0,81,227,4,240,157,212,136,6,28,229,0,0,81,225,4,240,157,212,136,22,12,229,132,150,12,229, 128,38,12,229,124,70,12,229,140,6,28,229,120,6,12,229,116,86,12,229,4,240,157,228,104,6,28,229,0,0,80,227, 3,0,0,26,108,6,28,229,0,0,85,225,4,240,157,4,8,0,0,234,108,6,28,229,8,0,80,227,2,0,0,42, 108,6,28,229,0,0,85,225,2,0,0,26,104,6,28,229,0,0,87,225,4,240,157,4,64,11,28,229,0,0,87,225, 4,240,157,4,80,11,28,229,0,0,80,227,10,0,0,10,0,0,87,225,8,0,0,10,168,15,28,229,0,0,85,225, 5,0,0,10,76,11,28,229,0,0,80,227,116,0,0,10,12,2,88,229,1,0,16,227,113,0,0,10,3,16,129,224, 4,16,129,224,0,0,81,227,109,0,0,218,236,7,28,229,0,0,81,225,106,0,0,58,2,0,0,26,224,7,28,229, 0,0,84,225,102,0,0,218,4,8,28,229,0,0,81,225,3,0,0,58,9,0,0,26,248,7,28,229,0,0,84,225, 6,0,0,202,236,23,12,229,232,151,12,229,228,39,12,229,224,71,12,229,220,87,12,229,216,119,12,229,88,0,0,234, 28,8,28,229,0,0,81,225,3,0,0,58,28,0,0,26,16,8,28,229,0,0,84,225,25,0,0,202,4,8,28,229, 236,7,12,229,4,24,12,229,0,8,28,229,232,7,12,229,0,152,12,229,252,7,28,229,228,7,12,229,252,39,12,229, 248,7,28,229,224,7,12,229,248,71,12,229,244,7,28,229,220,7,12,229,244,87,12,229,240,7,28,229,216,7,12,229, 240,119,12,229,62,0,0,234,4,24,12,229,0,152,12,229,252,39,12,229,248,71,12,229,244,87,12,229,240,119,12,229, 55,0,0,234,4,8,28,229,236,7,12,229,28,8,28,229,4,8,12,229,28,24,12,229,0,8,28,229,232,7,12,229, 24,8,28,229,0,8,12,229,24,152,12,229,252,7,28,229,228,7,12,229,20,8,28,229,252,7,12,229,20,40,12,229, 248,7,28,229,224,7,12,229,16,8,28,229,248,7,12,229,16,72,12,229,244,7,28,229,220,7,12,229,12,8,28,229, 244,7,12,229,12,88,12,229,240,7,28,229,216,7,12,229,8,8,28,229,240,7,12,229,8,120,12,229,24,0,0,234, 28,24,12,229,24,152,12,229,20,40,12,229,16,72,12,229,12,88,12,229,8,120,12,229,17,0,0,234,28,8,28,229, 4,8,12,229,28,24,12,229,24,8,28,229,0,8,12,229,24,152,12,229,20,8,28,229,252,7,12,229,20,40,12,229, 16,8,28,229,248,7,12,229,16,72,12,229,12,8,28,229,244,7,12,229,12,88,12,229,8,8,28,229,240,7,12,229, 8,120,12,229,164,7,28,229,0,0,84,225,4,240,157,212,176,7,28,229,0,0,84,225,84,0,0,218,188,7,28,229, 0,0,84,225,71,0,0,218,200,7,28,229,0,0,84,225,52,0,0,218,212,7,28,229,0,0,84,225,27,0,0,218, 176,7,28,229,164,7,12,229,188,7,28,229,176,7,12,229,200,7,28,229,188,7,12,229,212,7,28,229,200,7,12,229, 212,71,12,229,172,7,28,229,160,7,12,229,184,7,28,229,172,7,12,229,196,7,28,229,184,7,12,229,208,7,28,229, 196,7,12,229,208,87,12,229,168,7,28,229,156,7,12,229,180,7,28,229,168,7,12,229,192,7,28,229,180,7,12,229, 204,7,28,229,192,7,12,229,204,119,12,229,4,240,157,228,176,7,28,229,164,7,12,229,188,7,28,229,176,7,12,229, 200,7,28,229,188,7,12,229,200,71,12,229,172,7,28,229,160,7,12,229,184,7,28,229,172,7,12,229,196,7,28,229, 184,7,12,229,196,87,12,229,168,7,28,229,156,7,12,229,180,7,28,229,168,7,12,229,192,7,28,229,180,7,12,229, 192,119,12,229,4,240,157,228,176,7,28,229,164,7,12,229,188,7,28,229,176,7,12,229,188,71,12,229,172,7,28,229, 160,7,12,229,184,7,28,229,172,7,12,229,184,87,12,229,168,7,28,229,156,7,12,229,180,7,28,229,168,7,12,229, 180,119,12,229,4,240,157,228,176,7,28,229,164,7,12,229,176,71,12,229,172,7,28,229,160,7,12,229,172,87,12,229, 168,7,28,229,156,7,12,229,168,119,12,229,4,240,157,228,164,71,12,229,160,87,12,229,156,119,12,229,4,240,157,228, 204,0,87,227,131,254,255,42,118,254,255,234,204,0,85,227,128,254,255,42,115,254,255,234,0,144,160,227,40,0,86,229, 192,0,16,227,2,0,0,26,40,112,69,226,7,128,140,224,242,255,255,235,4,240,157,228,0,144,160,227,5,112,160,225, 40,112,71,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,233,255,255,235,248,255,255,234,32,0,16,227, 1,0,0,10,7,128,140,224,228,255,255,235,4,240,157,228,0,144,160,227,84,0,86,229,192,0,16,227,2,0,0,26, 84,112,69,226,7,128,140,224,220,255,255,235,0,144,160,227,76,0,86,229,192,0,16,227,2,0,0,26,76,112,69,226, 7,128,140,224,213,255,255,235,4,240,157,228,1,144,160,227,44,0,86,229,192,0,16,227,2,0,0,26,44,112,69,226, 7,128,140,224,205,255,255,235,1,144,160,227,44,0,214,229,192,0,16,227,2,0,0,26,44,112,133,226,7,128,140,224, 201,255,255,235,0,144,160,227,40,0,86,229,192,0,16,227,2,0,0,26,40,112,69,226,7,128,140,224,191,255,255,235, 1,144,160,227,36,0,86,229,192,0,16,227,2,0,0,26,36,112,69,226,7,128,140,224,184,255,255,235,1,144,160,227, 36,0,214,229,192,0,16,227,2,0,0,26,36,112,133,226,7,128,140,224,180,255,255,235,4,240,157,228,0,144,160,227, 44,0,86,229,192,0,16,227,2,0,0,26,44,112,69,226,7,128,140,224,47,254,255,235,1,144,160,227,40,0,214,229, 192,0,16,227,2,0,0,26,40,112,133,226,7,128,140,224,40,254,255,235,1,144,160,227,40,0,86,229,192,0,16,227, 2,0,0,26,40,112,69,226,7,128,140,224,33,254,255,235,0,144,160,227,36,0,86,229,192,0,16,227,2,0,0,26, 36,112,69,226,7,128,140,224,26,254,255,235,1,144,160,227,4,0,86,229,192,0,16,227,2,0,0,26,4,112,69,226, 7,128,140,224,19,254,255,235,1,144,160,227,4,0,214,229,192,0,16,227,2,0,0,26,4,112,133,226,7,128,140,224, 12,254,255,235,4,240,157,228,1,144,160,227,5,112,160,225,44,112,71,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,128,140,224,125,255,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,120,255,255,235,1,144,160,227, 5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,115,255,255,235,248,255,255,234, 32,0,16,227,1,0,0,10,7,128,140,224,110,255,255,235,1,144,160,227,5,112,160,225,36,112,71,226,7,0,220,231, 0,0,80,227,2,0,0,26,7,128,140,224,99,255,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224, 94,255,255,235,1,144,160,227,5,112,160,225,36,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224, 89,255,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,84,255,255,235,4,240,157,228,1,144,160,227, 40,0,86,229,192,0,16,227,2,0,0,26,40,112,69,226,7,128,140,224,207,253,255,235,1,144,160,227,4,0,86,229, 192,0,16,227,2,0,0,26,4,112,69,226,7,128,140,224,200,253,255,235,1,144,160,227,4,0,214,229,192,0,16,227, 2,0,0,26,4,112,133,226,7,128,140,224,193,253,255,235,1,144,160,227,40,0,214,229,192,0,16,227,2,0,0,26, 40,112,133,226,7,128,140,224,186,253,255,235,1,144,160,227,5,112,160,225,44,112,71,226,7,0,220,231,0,0,80,227, 2,0,0,26,7,128,140,224,178,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,173,253,255,235, 1,144,160,227,5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,165,253,255,235, 248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,160,253,255,235,1,144,160,227,5,112,160,225,36,112,71,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,152,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10, 7,128,140,224,147,253,255,235,1,144,160,227,5,112,160,225,36,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,128,140,224,139,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,134,253,255,235,4,240,157,228, 1,144,160,227,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,247,254,255,235, 248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,242,254,255,235,1,144,160,227,5,112,160,225,40,112,135,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,237,254,255,235,248,255,255,234,32,0,16,227,1,0,0,10, 7,128,140,224,232,254,255,235,1,144,160,227,5,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,128,140,224,221,254,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,216,254,255,235,1,144,160,227, 5,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,211,254,255,235,248,255,255,234, 32,0,16,227,1,0,0,10,7,128,140,224,206,254,255,235,4,240,157,228,1,144,160,227,44,0,86,229,192,0,16,227, 2,0,0,26,44,112,69,226,7,128,140,224,73,253,255,235,1,144,160,227,36,0,86,229,192,0,16,227,2,0,0,26, 36,112,69,226,7,128,140,224,66,253,255,235,1,144,160,227,36,0,214,229,192,0,16,227,2,0,0,26,36,112,133,226, 7,128,140,224,59,253,255,235,1,144,160,227,44,0,214,229,192,0,16,227,2,0,0,26,44,112,133,226,7,128,140,224, 52,253,255,235,1,144,160,227,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224, 44,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,39,253,255,235,1,144,160,227,5,112,160,225, 40,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,31,253,255,235,248,255,255,234,32,0,16,227, 1,0,0,10,7,128,140,224,26,253,255,235,1,144,160,227,5,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227, 2,0,0,26,7,128,140,224,18,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,13,253,255,235, 1,144,160,227,5,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,5,253,255,235, 248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,0,253,255,235,4,240,157,228,1,144,160,227,22,4,86,229, 128,0,16,227,9,0,0,26,44,0,86,229,192,0,16,227,6,0,0,26,80,6,22,229,66,20,86,229,32,8,145,225, 2,0,0,26,44,112,69,226,7,128,140,224,241,252,255,235,1,144,160,227,22,4,86,229,64,0,16,227,9,0,0,26, 40,0,86,229,192,0,16,227,6,0,0,26,76,6,22,229,62,20,86,229,32,8,145,225,2,0,0,26,40,112,69,226, 7,128,140,224,227,252,255,235,1,144,160,227,22,4,86,229,32,0,16,227,9,0,0,26,36,0,86,229,192,0,16,227, 6,0,0,26,72,6,22,229,58,20,86,229,32,8,145,225,2,0,0,26,36,112,69,226,7,128,140,224,213,252,255,235, 1,144,160,227,22,4,86,229,16,0,16,227,9,0,0,26,4,0,86,229,192,0,16,227,6,0,0,26,40,6,22,229, 26,20,86,229,32,8,145,225,2,0,0,26,4,112,69,226,7,128,140,224,199,252,255,235,1,144,160,227,22,4,86,229, 8,0,16,227,9,0,0,26,4,0,214,229,192,0,16,227,6,0,0,26,32,6,22,229,18,20,86,229,32,8,145,225, 2,0,0,26,4,112,133,226,7,128,140,224,185,252,255,235,1,144,160,227,22,4,86,229,4,0,16,227,9,0,0,26, 36,0,214,229,192,0,16,227,6,0,0,26,0,6,22,229,242,19,86,229,32,8,145,225,2,0,0,26,36,112,133,226, 7,128,140,224,171,252,255,235,1,144,160,227,22,4,86,229,2,0,16,227,9,0,0,26,40,0,214,229,192,0,16,227, 6,0,0,26,252,5,22,229,238,19,86,229,32,8,145,225,2,0,0,26,40,112,133,226,7,128,140,224,157,252,255,235, 1,144,160,227,22,4,86,229,1,0,16,227,9,0,0,26,44,0,214,229,192,0,16,227,6,0,0,26,248,5,22,229, 234,19,86,229,32,8,145,225,2,0,0,26,44,112,133,226,7,128,140,224,143,252,255,235,4,240,157,228,1,144,160,227, 44,0,86,229,192,0,16,227,2,0,0,26,44,112,69,226,7,128,140,224,1,254,255,235,1,144,160,227,44,0,214,229, 192,0,16,227,2,0,0,26,44,112,133,226,7,128,140,224,253,253,255,235,4,240,157,228,0,144,160,227,44,0,86,229, 192,0,16,227,2,0,0,26,44,112,69,226,7,128,140,224,120,252,255,235,4,240,157,228,1,144,160,227,40,0,86,229, 192,0,16,227,2,0,0,26,40,112,69,226,7,128,140,224,112,252,255,235,1,144,160,227,40,0,214,229,192,0,16,227, 2,0,0,26,40,112,133,226,7,128,140,224,105,252,255,235,4,240,157,228,0,144,160,227,36,0,86,229,192,0,16,227, 2,0,0,26,36,112,69,226,7,128,140,224,97,252,255,235,4,240,157,228,1,144,160,227,5,112,160,225,44,112,71,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,210,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10, 7,128,140,224,205,253,255,235,1,144,160,227,5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,128,140,224,200,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,195,253,255,235,4,240,157,228, 1,144,160,227,5,112,160,225,44,112,71,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,61,252,255,235, 248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,56,252,255,235,1,144,160,227,5,112,160,225,44,112,135,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,48,252,255,235,248,255,255,234,32,0,16,227,1,0,0,10, 7,128,140,224,43,252,255,235,4,240,157,228,1,144,160,227,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227, 2,0,0,26,7,128,140,224,156,253,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,151,253,255,235, 1,144,160,227,5,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,146,253,255,235, 248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,141,253,255,235,4,240,157,228,1,144,160,227,44,0,86,229, 192,0,16,227,2,0,0,26,44,112,69,226,7,128,140,224,8,252,255,235,1,144,160,227,44,0,214,229,192,0,16,227, 2,0,0,26,44,112,133,226,7,128,140,224,1,252,255,235,4,240,157,228,1,144,160,227,5,112,160,225,40,112,71,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,128,140,224,248,251,255,235,248,255,255,234,32,0,16,227,1,0,0,10, 7,128,140,224,243,251,255,235,1,144,160,227,5,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,128,140,224,235,251,255,235,248,255,255,234,32,0,16,227,1,0,0,10,7,128,140,224,230,251,255,235,4,240,157,228, 1,144,160,227,36,0,86,229,192,0,16,227,2,0,0,26,36,112,69,226,7,128,140,224,222,251,255,235,1,144,160,227, 36,0,214,229,192,0,16,227,2,0,0,26,36,112,133,226,7,128,140,224,215,251,255,235,4,240,157,228,4,224,45,229, 0,0,160,227,108,6,12,229,104,6,12,229,140,82,159,229,140,98,159,229,60,144,160,227,4,0,149,228,4,0,134,228, 1,144,89,226,251,255,255,26,164,0,0,235,204,26,28,229,200,42,28,229,196,58,28,229,192,74,28,229,184,90,28,229, 100,22,12,229,96,38,12,229,92,54,12,229,88,70,12,229,84,86,12,229,4,8,28,229,0,0,80,227,62,0,0,218, 64,82,159,229,64,98,159,229,60,144,160,227,4,0,149,228,4,0,134,228,1,144,89,226,251,255,255,26,4,24,28,229, 0,40,28,229,252,55,28,229,248,71,28,229,244,87,28,229,240,103,28,229,28,24,12,229,24,40,12,229,20,56,12,229, 16,72,12,229,12,88,12,229,8,104,12,229,131,0,0,235,204,26,28,229,200,42,28,229,196,58,28,229,192,74,28,229, 184,90,28,229,80,22,12,229,76,38,12,229,72,54,12,229,68,70,12,229,64,86,12,229,236,7,28,229,0,0,80,227, 29,0,0,218,196,81,159,229,196,97,159,229,60,144,160,227,4,0,149,228,4,0,134,228,1,144,89,226,251,255,255,26, 236,23,28,229,232,39,28,229,228,55,28,229,224,71,28,229,220,87,28,229,216,103,28,229,28,24,12,229,24,40,12,229, 20,56,12,229,16,72,12,229,12,88,12,229,8,104,12,229,98,0,0,235,204,26,28,229,200,42,28,229,196,58,28,229, 192,74,28,229,184,90,28,229,60,22,12,229,56,38,12,229,52,54,12,229,48,70,12,229,44,86,12,229,84,81,159,229, 84,97,159,229,60,144,160,227,4,0,149,228,4,0,134,228,1,144,89,226,251,255,255,26,100,22,28,229,96,6,28,229, 0,16,65,224,92,6,28,229,0,16,129,224,88,6,28,229,0,16,65,224,80,38,28,229,76,6,28,229,0,32,66,224, 72,6,28,229,0,32,130,224,68,6,28,229,0,32,66,224,60,54,28,229,56,6,28,229,0,48,67,224,52,6,28,229, 0,48,131,224,48,6,28,229,0,48,67,224,4,8,28,229,0,0,80,227,6,0,0,218,2,0,81,225,22,0,0,186, 236,7,28,229,0,0,80,227,1,0,0,218,3,0,81,225,37,0,0,186,100,22,28,229,96,38,28,229,92,54,28,229, 88,70,28,229,84,86,28,229,204,26,12,229,200,42,12,229,196,58,12,229,192,74,12,229,184,90,12,229,28,8,28,229, 2,0,80,227,4,240,157,212,12,8,28,229,108,6,12,229,8,8,28,229,104,6,12,229,4,240,157,228,236,7,28,229, 0,0,80,227,1,0,0,218,3,0,82,225,14,0,0,186,80,22,28,229,76,38,28,229,72,54,28,229,68,70,28,229, 64,86,28,229,204,26,12,229,200,42,12,229,196,58,12,229,192,74,12,229,184,90,12,229,244,7,28,229,108,6,12,229, 240,7,28,229,104,6,12,229,4,240,157,228,220,7,28,229,108,6,12,229,216,7,28,229,104,6,12,229,4,240,157,228, 100,12,0,224,84,13,0,224,84,13,0,224,100,12,0,224,84,13,0,224,100,12,0,224,84,13,0,224,100,12,0,224, 0,112,160,227,204,122,12,229,200,122,12,229,196,122,12,229,192,122,12,229,184,122,12,229,12,88,28,229,8,104,28,229, 208,7,28,229,5,0,80,225,2,0,0,10,204,7,28,229,6,0,80,225,2,0,0,26,212,119,12,229,208,119,12,229, 204,119,12,229,196,7,28,229,5,0,80,225,2,0,0,10,192,7,28,229,6,0,80,225,2,0,0,26,200,119,12,229, 196,119,12,229,192,119,12,229,184,7,28,229,5,0,80,225,2,0,0,10,180,7,28,229,6,0,80,225,2,0,0,26, 188,119,12,229,184,119,12,229,180,119,12,229,172,7,28,229,5,0,80,225,2,0,0,10,168,7,28,229,6,0,80,225, 2,0,0,26,176,119,12,229,172,119,12,229,168,119,12,229,160,7,28,229,5,0,80,225,2,0,0,10,156,7,28,229, 6,0,80,225,2,0,0,26,164,119,12,229,160,119,12,229,156,119,12,229,68,86,159,229,5,96,160,225,5,144,160,227, 3,128,160,227,0,0,21,229,0,0,80,227,7,0,0,10,0,0,21,229,4,0,134,228,4,0,149,229,4,0,134,228, 8,0,149,229,4,0,134,228,1,128,88,226,2,0,0,10,12,80,133,226,1,144,89,226,241,255,255,26,12,88,28,229, 8,104,28,229,6,0,149,225,45,0,0,26,28,8,28,229,0,0,80,227,42,0,0,10,112,8,28,229,0,0,80,227, 15,0,0,26,132,8,28,229,128,8,12,229,120,40,28,229,100,8,28,229,2,0,80,225,2,0,0,26,108,120,12,229, 104,120,12,229,100,120,12,229,80,8,28,229,2,0,80,225,80,0,0,26,88,120,12,229,84,120,12,229,80,120,12,229, 76,0,0,234,128,120,12,229,124,120,12,229,120,120,12,229,124,56,28,229,112,72,28,229,104,8,28,229,3,0,80,225, 5,0,0,26,92,8,28,229,4,0,80,225,2,0,0,26,108,120,12,229,104,120,12,229,100,120,12,229,84,8,28,229, 3,0,80,225,59,0,0,26,72,8,28,229,4,0,80,225,56,0,0,26,88,120,12,229,84,120,12,229,80,120,12,229, 52,0,0,234,5,160,140,224,36,54,218,229,37,70,218,229,24,8,28,229,0,0,80,227,1,48,131,18,6,32,140,224, 12,34,82,229,1,0,18,227,9,0,0,26,120,8,28,229,5,0,80,225,9,0,0,26,4,0,83,225,0,0,160,227, 116,8,28,53,128,8,12,229,124,120,12,229,120,120,12,229,2,0,0,234,128,120,12,229,124,120,12,229,120,120,12,229, 2,0,18,227,9,0,0,26,100,8,28,229,5,0,80,225,9,0,0,26,4,0,83,225,0,0,160,227,96,8,28,53, 108,8,12,229,104,120,12,229,100,120,12,229,2,0,0,234,108,120,12,229,104,120,12,229,100,120,12,229,4,0,18,227, 9,0,0,26,80,8,28,229,5,0,80,225,9,0,0,26,4,0,83,225,0,0,160,227,76,8,28,53,88,8,12,229, 84,120,12,229,80,120,12,229,2,0,0,234,88,120,12,229,84,120,12,229,80,120,12,229,128,8,28,229,108,40,28,229, 2,0,80,225,9,0,0,170,128,40,12,229,108,8,12,229,124,8,28,229,104,40,28,229,124,40,12,229,104,8,12,229, 120,8,28,229,100,40,28,229,120,40,12,229,100,8,12,229,108,8,28,229,88,40,28,229,2,0,80,225,9,0,0,170, 108,40,12,229,88,8,12,229,104,8,28,229,84,40,28,229,104,40,12,229,84,8,12,229,100,8,28,229,80,40,28,229, 100,40,12,229,80,8,12,229,128,8,28,229,108,40,28,229,2,0,80,225,9,0,0,170,128,40,12,229,108,8,12,229, 124,8,28,229,104,40,28,229,124,40,12,229,104,8,12,229,120,8,28,229,100,40,28,229,120,40,12,229,100,8,12,229, 16,8,28,229,20,40,28,229,28,56,28,229,2,0,128,224,1,0,80,227,1,0,0,42,1,0,83,227,1,0,160,51, 204,10,12,229,124,88,28,229,120,104,28,229,212,71,28,229,208,7,28,229,6,0,80,225,2,0,0,10,204,7,28,229, 5,0,80,225,14,0,0,26,200,71,28,229,196,7,28,229,6,0,80,225,2,0,0,10,192,7,28,229,5,0,80,225, 7,0,0,26,188,71,28,229,184,7,28,229,6,0,80,225,2,0,0,10,180,7,28,229,5,0,80,225,0,0,0,26, 0,64,160,227,212,7,28,229,4,0,64,224,128,72,28,229,4,0,128,224,2,0,80,225,17,0,0,170,4,48,67,224, 184,58,12,229,108,8,28,229,104,88,28,229,100,104,28,229,88,8,12,229,84,88,12,229,80,104,12,229,128,8,28,229, 124,88,28,229,120,104,28,229,108,8,12,229,104,88,12,229,100,104,12,229,128,40,12,229,124,120,12,229,120,120,12,229, 85,0,0,234,2,48,67,224,184,58,12,229,124,88,28,229,120,104,28,229,104,8,28,229,5,0,80,225,2,0,0,10, 100,8,28,229,6,0,80,225,2,0,0,26,108,120,12,229,104,120,12,229,100,120,12,229,84,8,28,229,5,0,80,225, 2,0,0,10,80,8,28,229,6,0,80,225,2,0,0,26,88,120,12,229,84,120,12,229,80,120,12,229,108,8,28,229, 0,0,80,227,8,0,0,26,88,8,28,229,108,8,12,229,84,8,28,229,104,8,12,229,80,8,28,229,100,8,12,229, 88,120,12,229,84,120,12,229,80,120,12,229,108,8,28,229,2,0,80,225,8,0,0,42,108,8,28,229,88,8,12,229, 104,8,28,229,84,8,12,229,100,8,28,229,80,8,12,229,108,40,12,229,104,120,12,229,100,120,12,229,208,7,28,229, 6,0,80,225,2,0,0,10,204,7,28,229,5,0,80,225,33,0,0,26,128,8,28,229,1,0,80,227,1,0,160,51, 200,10,12,229,196,7,28,229,6,0,80,225,9,0,0,10,192,7,28,229,5,0,80,225,6,0,0,10,200,7,28,229, 196,87,28,229,192,103,28,229,212,7,12,229,208,87,12,229,204,103,12,229,67,0,0,234,184,7,28,229,6,0,80,225, 9,0,0,10,180,7,28,229,5,0,80,225,6,0,0,10,188,7,28,229,184,87,28,229,180,103,28,229,212,7,12,229, 208,87,12,229,204,103,12,229,54,0,0,234,212,119,12,229,208,119,12,229,204,119,12,229,50,0,0,234,128,8,28,229, 1,0,80,227,1,0,160,227,128,8,12,181,204,103,28,229,6,160,140,224,60,10,218,229,0,0,80,227,5,0,0,26, 9,2,90,229,0,0,80,227,2,0,0,10,128,8,28,229,200,10,12,229,35,0,0,234,200,39,28,229,196,87,28,229, 192,103,28,229,204,7,28,229,6,0,80,225,8,0,0,26,188,39,28,229,184,87,28,229,180,103,28,229,204,7,28,229, 6,0,80,225,2,0,0,26,0,32,160,227,0,80,160,227,0,96,160,227,212,71,28,229,2,64,68,224,128,8,28,229, 0,0,84,225,232,255,255,218,200,122,12,229,212,39,12,229,208,87,12,229,204,103,12,229,108,40,28,229,104,88,28,229, 100,104,28,229,88,40,12,229,84,88,12,229,80,104,12,229,128,40,28,229,124,88,28,229,120,104,28,229,108,40,12,229, 104,88,12,229,100,104,12,229,212,23,28,229,108,40,28,229,88,56,28,229,208,87,28,229,204,103,28,229,1,0,81,227, 1,16,160,211,1,0,82,227,1,32,160,211,1,0,83,227,1,48,160,211,104,8,28,229,6,0,80,225,2,0,0,10, 100,8,28,229,5,0,80,225,10,0,0,26,196,26,12,229,1,0,160,227,192,10,12,229,84,8,28,229,6,0,80,225, 14,240,160,1,80,8,28,229,5,0,80,225,14,240,160,1,192,58,12,229,14,240,160,225,3,64,160,225,84,8,28,229, 6,0,80,225,2,0,0,10,80,8,28,229,5,0,80,225,0,0,0,26,1,64,160,227,2,64,68,224,0,64,100,226, 1,0,84,225,2,0,0,202,196,26,12,229,192,42,12,229,14,240,160,225,196,122,12,229,192,58,12,229,14,240,160,225, 20,13,0,224,4,224,45,229,64,0,45,233,61,171,255,235,0,177,255,235,53,176,255,235,64,0,189,232,80,11,28,229, 0,0,80,227,1,0,0,10,4,224,157,228,102,16,0,234,152,95,28,229,84,0,85,227,9,0,0,58,5,128,140,224, 0,0,88,229,30,0,0,226,13,18,216,229,1,0,128,225,128,0,143,224,228,252,144,229,152,95,24,229,84,0,85,227, 245,255,255,42,78,25,0,235,4,240,157,228,40,0,88,229,192,0,16,227,5,0,0,26,40,112,69,226,204,0,87,227, 7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,240,255,255,234,40,112,69,226,11,0,0,234,204,0,87,227, 5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58,7,3,160,225, 37,1,128,224,4,0,134,228,40,112,71,226,7,0,220,231,0,0,80,227,240,255,255,10,32,0,16,227,10,0,0,10, 204,0,87,227,5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58, 7,3,160,225,37,1,128,224,4,0,134,228,209,255,255,234,84,0,88,229,192,0,16,227,11,0,0,26,84,112,69,226, 204,0,87,227,5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58, 7,3,160,225,37,1,128,224,4,0,134,228,76,0,88,229,192,0,16,227,11,0,0,26,76,112,69,226,204,0,87,227, 5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58,7,3,160,225, 37,1,128,224,4,0,134,228,178,255,255,234,44,0,88,229,192,0,16,227,9,0,0,26,44,112,69,226,204,0,87,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 44,0,216,229,192,0,16,227,9,0,0,26,44,112,133,226,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,40,0,88,229,192,0,16,227,9,0,0,26, 40,112,69,226,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225, 37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,9,0,0,26,36,112,69,226,204,0,87,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229, 192,0,16,227,9,0,0,26,36,112,133,226,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,112,255,255,234,44,0,88,229,192,0,16,227,3,0,0,26, 44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,40,0,88,229,192,0,16,227,3,0,0,26,40,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,40,0,216,229,192,0,16,227,3,0,0,26,40,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,3,0,0,26,36,112,69,226,7,3,160,225,37,1,128,224, 4,0,134,228,4,0,88,229,192,0,16,227,3,0,0,26,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 4,0,216,229,192,0,16,227,3,0,0,26,4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,69,255,255,234, 44,112,69,226,5,0,0,234,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,44,112,71,226, 7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,87,227,7,3,160,225,37,1,128,224, 128,0,128,50,4,0,134,228,44,112,133,226,5,0,0,234,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50, 4,0,134,228,44,112,135,226,7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,85,227, 7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,36,112,69,226,5,0,0,234,204,0,87,227,7,3,160,225, 37,1,128,224,128,0,128,50,4,0,134,228,36,112,71,226,7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227, 4,0,0,10,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,36,112,133,226,5,0,0,234, 204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,36,112,135,226,7,0,220,231,0,0,80,227, 246,255,255,10,32,0,16,227,4,0,0,10,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228, 252,254,255,234,40,0,88,229,192,0,16,227,3,0,0,26,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 40,0,216,229,192,0,16,227,3,0,0,26,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,88,229, 192,0,16,227,3,0,0,26,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,216,229,192,0,16,227, 3,0,0,26,4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,44,112,69,226,3,0,0,234,7,3,160,225, 37,1,128,224,4,0,134,228,44,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,44,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,36,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,36,112,71,226,7,0,220,231, 0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,36,112,133,226, 3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,36,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10, 32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,167,254,255,234,40,112,69,226,5,0,0,234, 204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,40,112,71,226,7,0,220,231,0,0,80,227, 246,255,255,10,32,0,16,227,4,0,0,10,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228, 40,112,133,226,5,0,0,234,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,40,112,135,226, 7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,85,227,7,3,160,225,37,1,128,224, 128,0,128,50,4,0,134,228,4,112,69,226,5,0,0,234,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50, 4,0,134,228,4,112,71,226,7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,87,227, 7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,4,112,133,226,5,0,0,234,204,0,85,227,7,3,160,225, 37,1,128,224,128,0,128,50,4,0,134,228,4,112,135,226,7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227, 4,0,0,10,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,94,254,255,234,44,0,88,229, 192,0,16,227,3,0,0,26,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227, 3,0,0,26,44,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,3,0,0,26, 36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229,192,0,16,227,3,0,0,26,36,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,40,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 40,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,40,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,135,226,7,0,220,231, 0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,4,112,69,226, 3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,4,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10, 32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,4,112,133,226,3,0,0,234,7,3,160,225, 37,1,128,224,4,0,134,228,4,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,9,254,255,234,44,0,88,229,192,0,16,227,7,0,0,26,80,6,24,229, 66,20,88,229,32,8,145,225,3,0,0,26,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,40,0,88,229, 192,0,16,227,7,0,0,26,76,6,24,229,62,20,88,229,32,8,145,225,3,0,0,26,40,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,7,0,0,26,72,6,24,229,58,20,88,229,32,8,145,225, 3,0,0,26,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,88,229,192,0,16,227,7,0,0,26, 40,6,24,229,26,20,88,229,32,8,145,225,3,0,0,26,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 4,0,216,229,192,0,16,227,7,0,0,26,32,6,24,229,18,20,88,229,32,8,145,225,3,0,0,26,4,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229,192,0,16,227,7,0,0,26,0,6,24,229,242,19,88,229, 32,8,145,225,3,0,0,26,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,40,0,216,229,192,0,16,227, 7,0,0,26,252,5,24,229,238,19,88,229,32,8,145,225,3,0,0,26,40,112,133,226,7,3,160,225,37,1,128,224, 4,0,134,228,44,0,216,229,192,0,16,227,7,0,0,26,248,5,24,229,234,19,88,229,32,8,145,225,3,0,0,26, 44,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,176,253,255,234,44,0,88,229,192,0,16,227,9,0,0,26, 44,112,69,226,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225, 37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227,9,0,0,26,44,112,133,226,204,0,85,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,149,253,255,234, 40,0,88,229,192,0,16,227,9,0,0,26,40,112,69,226,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,135,253,255,234,44,0,88,229,192,0,16,227, 3,0,0,26,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,127,253,255,234,40,0,88,229,192,0,16,227, 3,0,0,26,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,40,0,216,229,192,0,16,227,3,0,0,26, 40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,112,253,255,234,36,0,88,229,192,0,16,227,3,0,0,26, 36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,104,253,255,234,44,112,69,226,5,0,0,234,204,0,87,227, 7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,44,112,71,226,7,0,220,231,0,0,80,227,246,255,255,10, 32,0,16,227,4,0,0,10,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,44,112,133,226, 5,0,0,234,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,44,112,135,226,7,0,220,231, 0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50, 4,0,134,228,67,253,255,234,44,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,44,112,71,226, 7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 44,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,44,112,135,226,7,0,220,231,0,0,80,227, 248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,38,253,255,234,40,112,69,226, 5,0,0,234,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228,40,112,71,226,7,0,220,231, 0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,87,227,7,3,160,225,37,1,128,224,128,0,128,50, 4,0,134,228,40,112,133,226,5,0,0,234,204,0,85,227,7,3,160,225,37,1,128,224,128,0,128,50,4,0,134,228, 40,112,135,226,7,0,220,231,0,0,80,227,246,255,255,10,32,0,16,227,4,0,0,10,204,0,85,227,7,3,160,225, 37,1,128,224,128,0,128,50,4,0,134,228,1,253,255,234,44,0,88,229,192,0,16,227,3,0,0,26,44,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227,3,0,0,26,44,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,242,252,255,234,40,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 40,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,40,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,135,226,7,0,220,231, 0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,213,252,255,234, 36,0,88,229,192,0,16,227,3,0,0,26,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229, 192,0,16,227,3,0,0,26,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,198,252,255,234,12,100,1,0, 52,102,1,0,52,100,1,0,52,102,1,0,176,100,1,0,52,102,1,0,44,101,1,0,52,102,1,0,52,102,1,0, 0,0,0,0,224,102,1,0,4,104,1,0,88,105,1,0,124,106,1,0,208,107,1,0,0,0,0,0,248,99,1,0, 216,109,1,0,248,99,1,0,216,109,1,0,248,99,1,0,216,109,1,0,52,109,1,0,216,109,1,0,216,109,1,0, 0,0,0,0,84,110,1,0,232,110,1,0,248,99,1,0,240,111,1,0,248,99,1,0,0,0,0,0,12,100,1,0, 248,109,1,0,52,100,1,0,248,109,1,0,248,99,1,0,248,109,1,0,160,109,1,0,248,109,1,0,248,109,1,0, 0,0,0,0,248,99,1,0,248,109,1,0,92,111,1,0,44,112,1,0,248,99,1,0,0,0,0,0,248,99,1,0, 52,110,1,0,248,99,1,0,52,110,1,0,248,99,1,0,52,110,1,0,200,101,1,0,52,110,1,0,52,110,1,0, 0,0,0,0,112,103,1,0,228,104,1,0,248,99,1,0,160,112,1,0,248,99,1,0,0,0,0,0,248,99,1,0, 164,102,1,0,248,99,1,0,164,102,1,0,248,99,1,0,164,102,1,0,248,99,1,0,164,102,1,0,164,102,1,0, 0,0,0,0,248,99,1,0,164,102,1,0,232,105,1,0,92,107,1,0,248,99,1,0,0,0,0,0,4,224,45,229, 64,0,45,233,159,167,255,235,98,173,255,235,209,172,255,235,150,172,255,235,64,0,189,232,80,11,28,229,0,0,80,227, 1,0,0,10,4,224,157,228,172,12,0,234,164,95,28,229,16,0,0,235,157,1,0,235,4,240,157,228,4,224,45,229, 64,0,45,233,83,173,255,235,194,172,255,235,135,172,255,235,64,0,189,232,80,11,28,229,0,0,80,227,1,0,0,10, 4,224,157,228,157,12,0,234,164,95,28,229,208,0,0,235,142,1,0,235,4,240,157,228,194,15,92,229,0,0,80,227, 13,0,0,10,84,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,2,0,128,227,4,0,134,228, 76,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,2,0,128,227,4,0,134,228,196,15,92,229, 0,0,80,227,12,0,0,10,5,0,139,224,36,11,16,229,0,0,140,224,128,11,80,229,0,0,80,227,6,0,0,26, 40,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,0,0,128,227,4,0,134,228,193,15,92,229, 0,0,80,227,34,0,0,10,40,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227, 4,0,134,228,44,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228, 36,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,36,112,69,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,44,112,69,226,7,0,220,231, 0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,192,15,92,229,0,0,80,227,41,0,0,10, 40,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,44,112,133,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,36,112,133,226,7,0,220,231, 0,0,80,227,2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,4,112,133,226,7,0,220,231,0,0,80,227, 2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,4,112,69,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,3,160,225,4,0,128,227,4,0,134,228,40,112,69,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225, 4,0,128,227,4,0,134,228,190,15,92,229,0,0,80,227,35,0,0,10,40,112,133,226,3,0,0,234,7,3,160,225, 6,0,128,227,4,0,134,228,40,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,4,112,133,226,3,0,0,234, 7,3,160,225,6,0,128,227,4,0,134,228,4,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,4,112,69,226, 3,0,0,234,7,3,160,225,6,0,128,227,4,0,134,228,4,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10, 40,112,69,226,3,0,0,234,7,3,160,225,6,0,128,227,4,0,134,228,40,112,71,226,7,0,220,231,0,0,80,227, 248,255,255,10,191,15,92,229,0,0,80,227,35,0,0,10,44,112,133,226,3,0,0,234,7,3,160,225,5,0,128,227, 4,0,134,228,44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,36,112,133,226,3,0,0,234,7,3,160,225, 5,0,128,227,4,0,134,228,36,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,36,112,69,226,3,0,0,234, 7,3,160,225,5,0,128,227,4,0,134,228,36,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,44,112,69,226, 3,0,0,234,7,3,160,225,5,0,128,227,4,0,134,228,44,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10, 195,15,92,229,0,0,80,227,8,0,0,10,40,112,133,226,3,0,0,234,7,3,160,225,1,0,128,227,4,0,134,228, 40,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,14,240,160,225,194,15,92,229,0,0,80,227,13,0,0,10, 84,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,2,0,128,227,4,0,134,228,76,112,133,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,2,0,128,227,4,0,134,228,193,15,92,229,0,0,80,227, 34,0,0,10,40,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228, 44,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,36,112,133,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,36,112,69,226,7,0,220,231, 0,0,80,227,2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,44,112,69,226,7,0,220,231,0,0,80,227, 2,0,0,26,7,3,160,225,3,0,128,227,4,0,134,228,192,15,92,229,0,0,80,227,41,0,0,10,40,112,133,226, 7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,44,112,133,226,7,0,220,231, 0,0,80,227,2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,36,112,133,226,7,0,220,231,0,0,80,227, 2,0,0,26,7,3,160,225,4,0,128,227,4,0,134,228,4,112,133,226,7,0,220,231,0,0,80,227,2,0,0,26, 7,3,160,225,4,0,128,227,4,0,134,228,4,112,69,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225, 4,0,128,227,4,0,134,228,40,112,69,226,7,0,220,231,0,0,80,227,2,0,0,26,7,3,160,225,4,0,128,227, 4,0,134,228,190,15,92,229,0,0,80,227,35,0,0,10,40,112,133,226,3,0,0,234,7,3,160,225,6,0,128,227, 4,0,134,228,40,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,4,112,133,226,3,0,0,234,7,3,160,225, 6,0,128,227,4,0,134,228,4,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,4,112,69,226,3,0,0,234, 7,3,160,225,6,0,128,227,4,0,134,228,4,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,40,112,69,226, 3,0,0,234,7,3,160,225,6,0,128,227,4,0,134,228,40,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10, 191,15,92,229,0,0,80,227,35,0,0,10,44,112,133,226,3,0,0,234,7,3,160,225,5,0,128,227,4,0,134,228, 44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,36,112,133,226,3,0,0,234,7,3,160,225,5,0,128,227, 4,0,134,228,36,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,36,112,69,226,3,0,0,234,7,3,160,225, 5,0,128,227,4,0,134,228,36,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,44,112,69,226,3,0,0,234, 7,3,160,225,5,0,128,227,4,0,134,228,44,112,71,226,7,0,220,231,0,0,80,227,248,255,255,10,195,15,92,229, 0,0,80,227,8,0,0,10,40,112,133,226,3,0,0,234,7,3,160,225,1,0,128,227,4,0,134,228,40,112,135,226, 7,0,220,231,0,0,80,227,248,255,255,10,14,240,160,225,152,95,28,229,84,0,85,227,16,0,0,58,5,128,140,224, 15,2,216,229,160,2,143,224,184,66,208,229,0,0,88,229,30,0,0,226,13,18,216,229,1,0,128,225,0,0,84,227, 1,0,0,26,128,0,143,224,24,240,144,229,128,0,143,224,80,241,144,229,152,95,24,229,84,0,85,227,238,255,255,42, 14,240,160,225,172,123,1,0,128,126,1,0,248,123,1,0,128,126,1,0,128,124,1,0,128,126,1,0,20,125,1,0, 128,126,1,0,128,126,1,0,0,0,0,0,116,127,1,0,120,130,1,0,124,132,1,0,128,135,1,0,20,121,1,0, 0,0,0,0,20,121,1,0,100,138,1,0,20,121,1,0,100,138,1,0,20,121,1,0,100,138,1,0,132,137,1,0, 100,138,1,0,100,138,1,0,0,0,0,0,16,139,1,0,148,140,1,0,20,121,1,0,116,143,1,0,20,121,1,0, 0,0,0,0,172,123,1,0,144,138,1,0,248,123,1,0,144,138,1,0,20,121,1,0,144,138,1,0,24,138,1,0, 144,138,1,0,144,138,1,0,0,0,0,0,20,121,1,0,72,141,1,0,240,141,1,0,200,143,1,0,20,121,1,0, 0,0,0,0,20,121,1,0,228,138,1,0,20,121,1,0,228,138,1,0,20,121,1,0,228,138,1,0,236,125,1,0, 228,138,1,0,228,138,1,0,0,0,0,0,244,128,1,0,200,131,1,0,20,121,1,0,124,144,1,0,20,121,1,0, 0,0,0,0,20,121,1,0,32,127,1,0,20,121,1,0,32,127,1,0,20,121,1,0,32,127,1,0,20,121,1,0, 32,127,1,0,32,127,1,0,0,0,0,0,20,121,1,0,156,141,1,0,252,133,1,0,208,136,1,0,20,121,1,0, 0,0,0,0,208,144,1,0,104,148,1,0,72,145,1,0,104,148,1,0,204,145,1,0,104,148,1,0,72,146,1,0, 104,148,1,0,104,148,1,0,0,0,0,0,140,149,1,0,136,151,1,0,44,153,1,0,40,155,1,0,204,156,1,0, 0,0,0,0,20,121,1,0,188,159,1,0,20,121,1,0,188,159,1,0,20,121,1,0,188,159,1,0,112,158,1,0, 188,159,1,0,188,159,1,0,0,0,0,0,136,160,1,0,136,161,1,0,20,121,1,0,196,163,1,0,20,121,1,0, 0,0,0,0,208,144,1,0,240,159,1,0,72,145,1,0,240,159,1,0,20,121,1,0,240,159,1,0,76,159,1,0, 240,159,1,0,240,159,1,0,0,0,0,0,20,121,1,0,252,161,1,0,196,162,1,0,40,164,1,0,20,121,1,0, 0,0,0,0,20,121,1,0,84,160,1,0,20,121,1,0,84,160,1,0,20,121,1,0,84,160,1,0,140,147,1,0, 84,160,1,0,84,160,1,0,0,0,0,0,136,150,1,0,184,152,1,0,20,121,1,0,156,164,1,0,20,121,1,0, 0,0,0,0,20,121,1,0,40,149,1,0,20,121,1,0,40,149,1,0,20,121,1,0,40,149,1,0,20,121,1,0, 40,149,1,0,40,149,1,0,0,0,0,0,20,121,1,0,96,162,1,0,40,154,1,0,88,156,1,0,20,121,1,0, 0,0,0,0,0,14,13,11,7,0,0,0,40,0,88,229,192,0,16,227,14,0,0,26,230,17,216,229,16,0,17,227, 11,0,0,10,40,112,69,226,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 1,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,70,255,255,234,5,112,160,225,40,112,71,226, 7,0,220,231,0,0,80,227,10,0,0,26,7,16,140,224,14,18,209,229,16,0,17,227,247,255,255,10,204,0,87,227, 245,255,255,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,240,255,255,234,32,0,16,227,14,0,0,10, 7,16,140,224,14,18,209,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,2,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,36,255,255,234, 84,0,88,229,192,0,16,227,14,0,0,26,84,112,69,226,186,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,4,0,17,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,76,0,88,229,192,0,16,227,14,0,0,26,76,112,69,226,194,17,216,229,16,0,17,227, 5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,4,0,17,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,255,254,255,234,44,0,88,229,192,0,16,227,14,0,0,26, 44,112,69,226,226,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,8,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229, 192,0,16,227,14,0,0,26,44,112,133,226,58,18,216,229,16,0,17,227,5,0,0,10,204,0,85,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,40,0,88,229,192,0,16,227,14,0,0,26,40,112,69,226,230,17,216,229,16,0,17,227,5,0,0,10, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,14,0,0,26,36,112,69,226,234,17,216,229, 16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 8,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229,192,0,16,227,14,0,0,26, 36,112,133,226,50,18,216,229,16,0,17,227,5,0,0,10,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,8,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,164,254,255,234, 226,1,216,229,16,0,16,227,6,0,0,10,44,0,88,229,192,0,16,227,3,0,0,26,44,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,230,1,216,229,16,0,16,227,6,0,0,10,40,0,88,229,192,0,16,227,3,0,0,26, 40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,54,2,216,229,16,0,16,227,6,0,0,10,40,0,216,229, 192,0,16,227,3,0,0,26,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,234,1,216,229,16,0,16,227, 6,0,0,10,36,0,88,229,192,0,16,227,3,0,0,26,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 10,2,216,229,16,0,16,227,6,0,0,10,4,0,88,229,192,0,16,227,3,0,0,26,4,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,18,2,216,229,16,0,16,227,6,0,0,10,4,0,216,229,192,0,16,227,3,0,0,26, 4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,103,254,255,234,5,112,160,225,44,112,71,226,7,0,220,231, 0,0,80,227,15,0,0,26,7,16,140,224,14,18,209,229,56,0,17,227,247,255,255,10,204,0,87,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,32,0,17,227,239,255,255,10,7,3,160,225,37,1,128,224, 4,0,134,228,235,255,255,234,32,0,16,227,14,0,0,10,7,16,140,224,14,18,209,229,56,0,17,227,10,0,0,10, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,32,0,17,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,204,0,85,227,33,0,0,42,44,112,135,226,7,0,220,231, 0,0,80,227,13,0,0,26,7,16,140,224,14,18,209,229,56,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,32,0,17,227,241,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,237,255,255,234, 32,0,16,227,34,0,0,10,7,16,140,224,14,18,209,229,56,0,17,227,30,0,0,10,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,32,0,17,227,24,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,20,0,0,234, 44,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,32,0,17,227,247,255,255,10, 7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229, 32,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,36,112,71,226,7,0,220,231, 0,0,80,227,15,0,0,26,7,16,140,224,14,18,209,229,56,0,17,227,247,255,255,10,204,0,87,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,32,0,17,227,239,255,255,10,7,3,160,225,37,1,128,224, 4,0,134,228,235,255,255,234,32,0,16,227,14,0,0,10,7,16,140,224,14,18,209,229,56,0,17,227,10,0,0,10, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,32,0,17,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,204,0,85,227,33,0,0,42,36,112,135,226,7,0,220,231, 0,0,80,227,13,0,0,26,7,16,140,224,14,18,209,229,56,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,32,0,17,227,241,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,237,255,255,234, 32,0,16,227,34,0,0,10,7,16,140,224,14,18,209,229,56,0,17,227,30,0,0,10,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,32,0,17,227,24,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,20,0,0,234, 36,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,32,0,17,227,247,255,255,10, 7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229, 32,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,166,253,255,234,230,1,216,229,48,0,16,227, 6,0,0,10,40,0,88,229,192,0,16,227,3,0,0,26,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 54,2,216,229,48,0,16,227,6,0,0,10,40,0,216,229,192,0,16,227,3,0,0,26,40,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,10,2,216,229,48,0,16,227,6,0,0,10,4,0,88,229,192,0,16,227,3,0,0,26, 4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,18,2,216,229,48,0,16,227,6,0,0,10,4,0,216,229, 192,0,16,227,3,0,0,26,4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,44,112,71,226, 7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,48,0,17,227,247,255,255,10,7,3,160,225, 37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,48,0,17,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227, 7,0,0,26,7,16,140,224,14,18,209,229,48,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228, 243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,48,0,17,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,5,112,160,225,36,112,71,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224, 14,18,209,229,48,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227, 6,0,0,10,7,16,140,224,14,18,209,229,48,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,36,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,48,0,17,227, 247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224, 14,18,209,229,48,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,37,253,255,234,5,112,160,225, 40,112,71,226,7,0,220,231,0,0,80,227,15,0,0,26,7,16,140,224,14,18,209,229,88,0,17,227,247,255,255,10, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,239,255,255,10, 7,3,160,225,37,1,128,224,4,0,134,228,235,255,255,234,32,0,16,227,14,0,0,10,7,16,140,224,14,18,209,229, 88,0,17,227,10,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 64,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,204,0,85,227,33,0,0,42, 40,112,135,226,7,0,220,231,0,0,80,227,13,0,0,26,7,16,140,224,14,18,209,229,88,0,17,227,247,255,255,10, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,241,255,255,10,7,3,160,225,37,1,128,224, 4,0,134,228,237,255,255,234,32,0,16,227,34,0,0,10,7,16,140,224,14,18,209,229,88,0,17,227,30,0,0,10, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,24,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,20,0,0,234,40,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229, 64,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10, 7,16,140,224,14,18,209,229,64,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225, 4,112,71,226,7,0,220,231,0,0,80,227,15,0,0,26,7,16,140,224,14,18,209,229,88,0,17,227,247,255,255,10, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,239,255,255,10, 7,3,160,225,37,1,128,224,4,0,134,228,235,255,255,234,32,0,16,227,14,0,0,10,7,16,140,224,14,18,209,229, 88,0,17,227,10,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 64,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,204,0,85,227,33,0,0,42, 4,112,135,226,7,0,220,231,0,0,80,227,13,0,0,26,7,16,140,224,14,18,209,229,88,0,17,227,247,255,255,10, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,241,255,255,10,7,3,160,225,37,1,128,224, 4,0,134,228,237,255,255,234,32,0,16,227,34,0,0,10,7,16,140,224,14,18,209,229,88,0,17,227,30,0,0,10, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,24,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,20,0,0,234,4,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229, 64,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10, 7,16,140,224,14,18,209,229,64,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,100,252,255,234, 226,1,216,229,72,0,16,227,6,0,0,10,44,0,88,229,192,0,16,227,3,0,0,26,44,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,58,2,216,229,72,0,16,227,6,0,0,10,44,0,216,229,192,0,16,227,3,0,0,26, 44,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,234,1,216,229,72,0,16,227,6,0,0,10,36,0,88,229, 192,0,16,227,3,0,0,26,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,50,2,216,229,72,0,16,227, 6,0,0,10,36,0,216,229,192,0,16,227,3,0,0,26,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,72,0,17,227, 247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224, 14,18,209,229,72,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,40,112,135,226, 7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,72,0,17,227,247,255,255,10,7,3,160,225, 37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,72,0,17,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227, 7,0,0,26,7,16,140,224,14,18,209,229,72,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228, 243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,72,0,17,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,5,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224, 14,18,209,229,72,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227, 6,0,0,10,7,16,140,224,14,18,209,229,72,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 227,251,255,234,44,0,88,229,192,0,16,227,14,0,0,26,44,112,69,226,226,17,216,229,16,0,17,227,5,0,0,10, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227,14,0,0,26,44,112,133,226,58,18,216,229, 16,0,17,227,5,0,0,10,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 8,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,190,251,255,234,40,0,88,229,192,0,16,227, 14,0,0,26,40,112,69,226,230,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 171,251,255,234,226,1,216,229,16,0,16,227,6,0,0,10,44,0,88,229,192,0,16,227,3,0,0,26,44,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,160,251,255,234,230,1,216,229,16,0,16,227,6,0,0,10,40,0,88,229, 192,0,16,227,3,0,0,26,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,54,2,216,229,16,0,16,227, 6,0,0,10,40,0,216,229,192,0,16,227,3,0,0,26,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228, 139,251,255,234,234,1,216,229,16,0,16,227,6,0,0,10,36,0,88,229,192,0,16,227,3,0,0,26,36,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,128,251,255,234,5,112,160,225,44,112,71,226,7,0,220,231,0,0,80,227, 15,0,0,26,7,16,140,224,14,18,209,229,56,0,17,227,247,255,255,10,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,32,0,17,227,239,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228, 235,255,255,234,32,0,16,227,14,0,0,10,7,16,140,224,14,18,209,229,56,0,17,227,10,0,0,10,204,0,87,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,32,0,17,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,5,112,160,225,204,0,85,227,33,0,0,42,44,112,135,226,7,0,220,231,0,0,80,227, 13,0,0,26,7,16,140,224,14,18,209,229,56,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,32,0,17,227,241,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,237,255,255,234,32,0,16,227, 34,0,0,10,7,16,140,224,14,18,209,229,56,0,17,227,30,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,32,0,17,227,24,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,20,0,0,234,44,112,135,226, 7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,32,0,17,227,247,255,255,10,7,3,160,225, 37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,32,0,17,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,31,251,255,234,5,112,160,225,44,112,71,226,7,0,220,231, 0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,48,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224, 4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,48,0,17,227,2,0,0,10, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26, 7,16,140,224,14,18,209,229,48,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234, 32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,48,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,242,250,255,234,230,1,216,229,48,0,16,227,6,0,0,10,40,0,88,229,192,0,16,227,3,0,0,26, 40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,54,2,216,229,48,0,16,227,6,0,0,10,40,0,216,229, 192,0,16,227,3,0,0,26,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,221,250,255,234,10,2,216,229, 48,0,16,227,6,0,0,10,4,0,88,229,192,0,16,227,3,0,0,26,4,112,69,226,7,3,160,225,37,1,128,224, 4,0,134,228,18,2,216,229,48,0,16,227,6,0,0,10,4,0,216,229,192,0,16,227,3,0,0,26,4,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,200,250,255,234,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227, 15,0,0,26,7,16,140,224,14,18,209,229,88,0,17,227,247,255,255,10,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,239,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228, 235,255,255,234,32,0,16,227,14,0,0,10,7,16,140,224,14,18,209,229,88,0,17,227,10,0,0,10,204,0,87,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,64,0,17,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,5,112,160,225,204,0,85,227,33,0,0,42,40,112,135,226,7,0,220,231,0,0,80,227, 13,0,0,26,7,16,140,224,14,18,209,229,88,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,64,0,17,227,241,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,237,255,255,234,32,0,16,227, 34,0,0,10,7,16,140,224,14,18,209,229,88,0,17,227,30,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,64,0,17,227,24,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,20,0,0,234,40,112,135,226, 7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,64,0,17,227,247,255,255,10,7,3,160,225, 37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224,14,18,209,229,64,0,17,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,103,250,255,234,226,1,216,229,72,0,16,227,6,0,0,10, 44,0,88,229,192,0,16,227,3,0,0,26,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,58,2,216,229, 72,0,16,227,6,0,0,10,44,0,216,229,192,0,16,227,3,0,0,26,44,112,133,226,7,3,160,225,37,1,128,224, 4,0,134,228,82,250,255,234,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224, 14,18,209,229,72,0,17,227,247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227, 6,0,0,10,7,16,140,224,14,18,209,229,72,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,7,0,0,26,7,16,140,224,14,18,209,229,72,0,17,227, 247,255,255,10,7,3,160,225,37,1,128,224,4,0,134,228,243,255,255,234,32,0,16,227,6,0,0,10,7,16,140,224, 14,18,209,229,72,0,17,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,37,250,255,234,234,1,216,229, 72,0,16,227,6,0,0,10,36,0,88,229,192,0,16,227,3,0,0,26,36,112,69,226,7,3,160,225,37,1,128,224, 4,0,134,228,50,2,216,229,72,0,16,227,6,0,0,10,36,0,216,229,192,0,16,227,3,0,0,26,36,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,16,250,255,234,40,0,88,229,192,0,16,227,25,0,0,26,40,112,69,226, 2,0,20,227,11,0,0,26,230,17,216,229,16,0,17,227,19,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,1,0,17,227,11,0,0,10,7,0,0,234,204,0,87,227,5,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,124,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224, 4,0,134,228,242,249,255,234,2,0,20,227,29,0,0,10,40,112,69,226,11,0,0,234,204,0,87,227,5,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,124,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224, 4,0,134,228,40,112,71,226,7,0,220,231,0,0,80,227,240,255,255,10,32,0,16,227,10,0,0,10,204,0,87,227, 5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,124,0,87,227,2,0,0,58,7,3,160,225, 37,1,128,224,4,0,134,228,209,249,255,234,84,0,88,229,192,0,16,227,11,0,0,26,84,112,69,226,204,0,87,227, 5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58,7,3,160,225, 37,1,128,224,4,0,134,228,76,0,88,229,192,0,16,227,11,0,0,26,76,112,69,226,204,0,87,227,5,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224, 4,0,134,228,178,249,255,234,44,0,88,229,192,0,16,227,23,0,0,26,44,112,69,226,1,0,20,227,11,0,0,26, 226,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,8,0,17,227,9,0,0,10,5,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227,23,0,0,26, 44,112,133,226,1,0,20,227,11,0,0,26,58,18,216,229,16,0,17,227,5,0,0,10,204,0,85,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,9,0,0,10,5,0,0,234,204,0,85,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 40,0,88,229,192,0,16,227,23,0,0,26,40,112,69,226,2,0,20,227,11,0,0,26,230,17,216,229,16,0,17,227, 5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227, 9,0,0,10,5,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 7,3,160,225,37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,23,0,0,26,36,112,69,226,4,0,20,227, 11,0,0,26,234,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,8,0,17,227,9,0,0,10,5,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229,192,0,16,227, 23,0,0,26,36,112,133,226,4,0,20,227,11,0,0,26,50,18,216,229,16,0,17,227,5,0,0,10,204,0,85,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,9,0,0,10,5,0,0,234, 204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224, 4,0,134,228,42,249,255,234,44,0,88,229,192,0,16,227,8,0,0,26,226,17,216,229,16,0,17,227,1,0,0,26, 1,0,20,227,3,0,0,10,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,40,0,88,229,192,0,16,227, 8,0,0,26,230,17,216,229,16,0,17,227,1,0,0,26,2,0,20,227,3,0,0,10,40,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,40,0,216,229,192,0,16,227,8,0,0,26,54,18,216,229,16,0,17,227,1,0,0,26, 2,0,20,227,3,0,0,10,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227, 8,0,0,26,234,17,216,229,16,0,17,227,1,0,0,26,4,0,20,227,3,0,0,10,36,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,4,0,88,229,192,0,16,227,8,0,0,26,10,18,216,229,16,0,17,227,1,0,0,26, 8,0,20,227,3,0,0,10,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,216,229,192,0,16,227, 8,0,0,26,18,18,216,229,16,0,17,227,1,0,0,26,8,0,20,227,3,0,0,10,4,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,225,248,255,234,44,112,69,226,9,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,44,112,71,226,7,0,220,231, 0,0,80,227,242,255,255,10,32,0,16,227,8,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,204,0,85,227,20,0,0,42,44,112,133,226, 6,0,0,234,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226,4,0,134,228,44,112,135,226, 7,0,220,231,0,0,80,227,245,255,255,10,32,0,16,227,20,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,128,0,64,226,4,0,134,228,13,0,0,234,44,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224, 4,0,134,228,44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,36,112,69,226,9,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,36,112,71,226,7,0,220,231,0,0,80,227, 242,255,255,10,32,0,16,227,8,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,204,0,85,227,20,0,0,42,36,112,133,226,6,0,0,234, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226,4,0,134,228,36,112,135,226,7,0,220,231, 0,0,80,227,245,255,255,10,32,0,16,227,20,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 128,0,64,226,4,0,134,228,13,0,0,234,36,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 36,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,98,248,255,234,40,0,88,229,192,0,16,227,8,0,0,26,230,17,216,229,48,0,17,227,1,0,0,26, 2,0,20,227,3,0,0,10,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,40,0,216,229,192,0,16,227, 8,0,0,26,54,18,216,229,48,0,17,227,1,0,0,26,2,0,20,227,3,0,0,10,40,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,4,0,88,229,192,0,16,227,8,0,0,26,10,18,216,229,48,0,17,227,1,0,0,26, 8,0,20,227,3,0,0,10,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,216,229,192,0,16,227, 8,0,0,26,18,18,216,229,48,0,17,227,1,0,0,26,8,0,20,227,3,0,0,10,4,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,44,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,44,112,71,226, 7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 44,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,44,112,135,226,7,0,220,231,224,0,16,227, 248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,36,112,69,226,3,0,0,234, 7,3,160,225,37,1,128,224,4,0,134,228,36,112,71,226,7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,36,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224, 4,0,134,228,36,112,135,226,7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,249,247,255,234,40,112,69,226,9,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,40,112,71,226,7,0,220,231, 0,0,80,227,242,255,255,10,32,0,16,227,8,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,204,0,85,227,20,0,0,42,40,112,133,226, 6,0,0,234,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226,4,0,134,228,40,112,135,226, 7,0,220,231,0,0,80,227,245,255,255,10,32,0,16,227,20,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,128,0,64,226,4,0,134,228,13,0,0,234,40,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224, 4,0,134,228,40,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,4,112,69,226,9,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,4,112,71,226,7,0,220,231,0,0,80,227, 242,255,255,10,32,0,16,227,8,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,204,0,85,227,20,0,0,42,4,112,133,226,6,0,0,234, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226,4,0,134,228,4,112,135,226,7,0,220,231, 0,0,80,227,245,255,255,10,32,0,16,227,20,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 128,0,64,226,4,0,134,228,13,0,0,234,4,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 4,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,122,247,255,234,44,0,88,229,192,0,16,227,8,0,0,26,226,17,216,229,72,0,17,227,1,0,0,26, 1,0,20,227,3,0,0,10,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227, 8,0,0,26,58,18,216,229,72,0,17,227,1,0,0,26,1,0,20,227,3,0,0,10,44,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,36,0,88,229,192,0,16,227,8,0,0,26,234,17,216,229,72,0,17,227,1,0,0,26, 4,0,20,227,3,0,0,10,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229,192,0,16,227, 8,0,0,26,50,18,216,229,72,0,17,227,1,0,0,26,4,0,20,227,3,0,0,10,36,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,40,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,71,226, 7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 40,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,135,226,7,0,220,231,224,0,16,227, 248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,4,112,69,226,3,0,0,234, 7,3,160,225,37,1,128,224,4,0,134,228,4,112,71,226,7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227, 2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,4,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224, 4,0,134,228,4,112,135,226,7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225, 37,1,128,224,4,0,134,228,17,247,255,234,1,0,20,227,10,0,0,10,44,0,88,229,192,0,16,227,7,0,0,26, 80,6,24,229,66,20,88,229,32,8,145,225,3,0,0,26,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 2,0,20,227,10,0,0,10,40,0,88,229,192,0,16,227,7,0,0,26,76,6,24,229,62,20,88,229,32,8,145,225, 3,0,0,26,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,20,227,10,0,0,10,36,0,88,229, 192,0,16,227,7,0,0,26,72,6,24,229,58,20,88,229,32,8,145,225,3,0,0,26,36,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,8,0,20,227,10,0,0,10,4,0,88,229,192,0,16,227,7,0,0,26,40,6,24,229, 26,20,88,229,32,8,145,225,3,0,0,26,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,8,0,20,227, 10,0,0,10,4,0,216,229,192,0,16,227,7,0,0,26,32,6,24,229,18,20,88,229,32,8,145,225,3,0,0,26, 4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,20,227,10,0,0,10,36,0,216,229,192,0,16,227, 7,0,0,26,0,6,24,229,242,19,88,229,32,8,145,225,3,0,0,26,36,112,133,226,7,3,160,225,37,1,128,224, 4,0,134,228,2,0,20,227,10,0,0,10,40,0,216,229,192,0,16,227,7,0,0,26,252,5,24,229,238,19,88,229, 32,8,145,225,3,0,0,26,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,1,0,20,227,10,0,0,10, 44,0,216,229,192,0,16,227,7,0,0,26,248,5,24,229,234,19,88,229,32,8,145,225,3,0,0,26,44,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,168,246,255,234,44,0,88,229,192,0,16,227,23,0,0,26,44,112,69,226, 1,0,20,227,11,0,0,26,226,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,9,0,0,10,5,0,0,234,204,0,87,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229, 192,0,16,227,23,0,0,26,44,112,133,226,1,0,20,227,11,0,0,26,58,18,216,229,16,0,17,227,5,0,0,10, 204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,8,0,17,227,9,0,0,10, 5,0,0,234,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225, 37,1,128,224,4,0,134,228,113,246,255,234,40,0,88,229,192,0,16,227,23,0,0,26,40,112,69,226,2,0,20,227, 11,0,0,26,230,17,216,229,16,0,17,227,5,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,8,0,17,227,9,0,0,10,5,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,85,246,255,234,44,0,88,229, 192,0,16,227,8,0,0,26,226,17,216,229,16,0,17,227,1,0,0,26,1,0,20,227,3,0,0,10,44,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,72,246,255,234,40,0,88,229,192,0,16,227,8,0,0,26,230,17,216,229, 16,0,17,227,1,0,0,26,2,0,20,227,3,0,0,10,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 40,0,216,229,192,0,16,227,8,0,0,26,54,18,216,229,16,0,17,227,1,0,0,26,2,0,20,227,3,0,0,10, 40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,47,246,255,234,36,0,88,229,192,0,16,227,8,0,0,26, 234,17,216,229,16,0,17,227,1,0,0,26,4,0,20,227,3,0,0,10,36,112,69,226,7,3,160,225,37,1,128,224, 4,0,134,228,34,246,255,234,44,112,69,226,9,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,44,112,71,226,7,0,220,231,0,0,80,227, 242,255,255,10,32,0,16,227,8,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,204,0,85,227,20,0,0,42,44,112,133,226,6,0,0,234, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226,4,0,134,228,44,112,135,226,7,0,220,231, 0,0,80,227,245,255,255,10,32,0,16,227,20,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 128,0,64,226,4,0,134,228,13,0,0,234,44,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 44,112,135,226,7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224, 4,0,134,228,226,245,255,234,44,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,44,112,71,226, 7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 44,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,44,112,135,226,7,0,220,231,224,0,16,227, 248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,197,245,255,234,40,0,88,229, 192,0,16,227,8,0,0,26,230,17,216,229,48,0,17,227,1,0,0,26,2,0,20,227,3,0,0,10,40,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,40,0,216,229,192,0,16,227,8,0,0,26,54,18,216,229,48,0,17,227, 1,0,0,26,2,0,20,227,3,0,0,10,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,172,245,255,234, 4,0,88,229,192,0,16,227,8,0,0,26,10,18,216,229,48,0,17,227,1,0,0,26,8,0,20,227,3,0,0,10, 4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,4,0,216,229,192,0,16,227,8,0,0,26,18,18,216,229, 48,0,17,227,1,0,0,26,8,0,20,227,3,0,0,10,4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228, 147,245,255,234,40,112,69,226,9,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,40,112,71,226,7,0,220,231,0,0,80,227,242,255,255,10, 32,0,16,227,8,0,0,10,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 7,3,160,225,37,1,128,224,4,0,134,228,204,0,85,227,20,0,0,42,40,112,133,226,6,0,0,234,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226,4,0,134,228,40,112,135,226,7,0,220,231,0,0,80,227, 245,255,255,10,32,0,16,227,20,0,0,10,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,128,0,64,226, 4,0,134,228,13,0,0,234,40,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,135,226, 7,0,220,231,0,0,80,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 83,245,255,234,44,0,88,229,192,0,16,227,8,0,0,26,226,17,216,229,72,0,17,227,1,0,0,26,1,0,20,227, 3,0,0,10,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,44,0,216,229,192,0,16,227,8,0,0,26, 58,18,216,229,72,0,17,227,1,0,0,26,1,0,20,227,3,0,0,10,44,112,133,226,7,3,160,225,37,1,128,224, 4,0,134,228,58,245,255,234,40,112,69,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,71,226, 7,0,220,231,224,0,16,227,248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228, 40,112,133,226,3,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,40,112,135,226,7,0,220,231,224,0,16,227, 248,255,255,10,32,0,16,227,2,0,0,10,7,3,160,225,37,1,128,224,4,0,134,228,29,245,255,234,36,0,88,229, 192,0,16,227,8,0,0,26,234,17,216,229,72,0,17,227,1,0,0,26,4,0,20,227,3,0,0,10,36,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,36,0,216,229,192,0,16,227,8,0,0,26,50,18,216,229,72,0,17,227, 1,0,0,26,4,0,20,227,3,0,0,10,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,4,245,255,234, 4,224,45,229,64,0,45,233,23,0,0,235,6,112,160,225,64,0,189,232,6,80,160,225,7,0,85,225,17,0,0,10, 192,0,45,233,0,48,21,229,153,156,255,235,192,0,189,232,164,175,28,229,10,160,140,224,34,6,26,229,24,20,90,229, 32,24,145,225,1,0,0,10,0,0,21,229,4,0,134,228,192,0,45,233,0,48,21,229,7,157,255,235,192,0,189,232, 4,80,133,226,235,255,255,234,4,240,157,228,4,224,45,229,80,75,28,229,1,0,116,227,3,0,0,10,76,11,28,229, 0,0,80,227,2,0,0,26,6,0,0,235,27,0,0,235,4,240,157,228,3,0,0,235,24,0,0,235,168,0,0,235, 137,0,0,235,4,240,157,228,152,95,28,229,84,0,85,227,17,0,0,58,5,128,140,224,13,2,216,229,0,0,80,227, 10,0,0,26,5,0,220,231,30,0,0,226,128,0,143,224,76,255,144,229,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,152,95,24,229,84,0,85,227,237,255,255,42,14,240,160,225, 168,95,28,229,5,128,140,224,22,4,88,229,128,0,16,227,10,0,0,26,44,0,88,229,192,0,16,227,7,0,0,26, 80,6,24,229,66,20,88,229,32,8,145,225,3,0,0,26,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 22,4,88,229,64,0,16,227,10,0,0,26,40,0,88,229,192,0,16,227,7,0,0,26,76,6,24,229,62,20,88,229, 32,8,145,225,3,0,0,26,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,22,4,88,229,32,0,16,227, 10,0,0,26,36,0,88,229,192,0,16,227,7,0,0,26,72,6,24,229,58,20,88,229,32,8,145,225,3,0,0,26, 36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,22,4,88,229,16,0,16,227,10,0,0,26,4,0,88,229, 192,0,16,227,7,0,0,26,40,6,24,229,26,20,88,229,32,8,145,225,3,0,0,26,4,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,22,4,88,229,8,0,16,227,10,0,0,26,4,0,216,229,192,0,16,227,7,0,0,26, 32,6,24,229,18,20,88,229,32,8,145,225,3,0,0,26,4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228, 22,4,88,229,4,0,16,227,10,0,0,26,36,0,216,229,192,0,16,227,7,0,0,26,0,6,24,229,242,19,88,229, 32,8,145,225,3,0,0,26,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,22,4,88,229,2,0,16,227, 10,0,0,26,40,0,216,229,192,0,16,227,7,0,0,26,252,5,24,229,238,19,88,229,32,8,145,225,3,0,0,26, 40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,22,4,88,229,1,0,16,227,10,0,0,26,44,0,216,229, 192,0,16,227,7,0,0,26,248,5,24,229,234,19,88,229,32,8,145,225,3,0,0,26,44,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,14,240,160,225,196,93,159,229,131,144,160,227,0,0,160,227,4,0,133,228,1,144,89,226, 252,255,255,26,76,59,28,229,168,95,28,229,5,80,140,224,3,80,69,224,1,16,160,227,12,18,5,229,3,0,117,231, 0,0,80,227,251,255,255,10,152,95,28,229,84,0,85,227,10,0,0,58,5,128,140,224,13,2,216,229,0,0,80,227, 3,0,0,26,5,0,220,231,30,0,0,226,128,0,143,224,40,253,144,229,152,95,24,229,84,0,85,227,244,255,255,42, 14,240,160,225,76,59,28,229,168,95,28,229,51,0,0,234,124,0,85,227,25,0,0,58,5,0,139,224,36,11,16,229, 0,0,140,224,128,11,80,229,0,0,80,227,5,0,0,26,196,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 0,0,128,227,4,0,134,228,195,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,1,0,128,227,4,0,134,228, 164,0,85,227,5,0,0,58,194,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,2,0,128,227,4,0,134,228, 193,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,3,0,128,227,4,0,134,228,192,15,92,229,0,0,80,227, 2,0,0,10,5,3,160,225,4,0,128,227,4,0,134,228,191,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 5,0,128,227,4,0,134,228,190,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,6,0,128,227,4,0,134,228, 3,80,69,224,5,0,220,231,0,0,80,227,199,255,255,10,14,240,160,225,40,112,69,226,4,0,87,225,8,0,0,26, 204,0,87,227,38,255,255,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,124,0,87,227,35,255,255,58, 31,255,255,234,33,255,255,234,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225, 8,0,0,26,204,0,87,227,21,255,255,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,124,0,87,227, 18,255,255,58,14,255,255,234,16,255,255,234,84,112,69,226,4,0,87,225,8,0,0,26,204,0,87,227,8,255,255,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,164,0,87,227,5,255,255,58,1,255,255,234,76,112,69,226, 4,0,87,225,8,0,0,26,204,0,87,227,252,254,255,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 164,0,87,227,249,254,255,58,245,254,255,234,247,254,255,234,44,112,69,226,4,0,87,225,2,0,0,26,204,0,87,227, 235,254,255,58,238,254,255,234,40,112,69,226,4,0,87,225,2,0,0,26,204,0,87,227,229,254,255,58,232,254,255,234, 36,112,69,226,4,0,87,225,2,0,0,26,204,0,87,227,223,254,255,58,226,254,255,234,36,112,133,226,4,0,87,225, 2,0,0,26,204,0,85,227,217,254,255,58,220,254,255,234,44,112,133,226,4,0,87,225,2,0,0,26,204,0,85,227, 211,254,255,58,214,254,255,234,216,254,255,234,44,112,69,226,4,0,87,225,210,254,255,10,40,112,69,226,4,0,87,225, 207,254,255,10,36,112,69,226,4,0,87,225,204,254,255,10,4,112,69,226,4,0,87,225,201,254,255,10,4,112,133,226, 4,0,87,225,198,254,255,10,40,112,133,226,4,0,87,225,195,254,255,10,197,254,255,234,5,112,160,225,44,112,71,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,204,0,87,227,181,254,255,58,184,254,255,234, 5,112,160,225,36,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,204,0,87,227, 171,254,255,58,174,254,255,234,5,112,160,225,36,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225, 2,0,0,26,204,0,85,227,161,254,255,58,164,254,255,234,5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227, 251,255,255,10,4,0,87,225,2,0,0,26,204,0,85,227,151,254,255,58,154,254,255,234,156,254,255,234,5,112,160,225, 44,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,146,254,255,10,5,112,160,225,36,112,71,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,139,254,255,10,5,112,160,225,36,112,135,226,7,0,220,231, 0,0,80,227,251,255,255,10,4,0,87,225,132,254,255,10,5,112,160,225,44,112,135,226,7,0,220,231,0,0,80,227, 251,255,255,10,4,0,87,225,125,254,255,10,40,112,69,226,4,0,87,225,122,254,255,10,4,112,69,226,4,0,87,225, 119,254,255,10,4,112,133,226,4,0,87,225,116,254,255,10,40,112,133,226,4,0,87,225,113,254,255,10,115,254,255,234, 5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,204,0,87,227, 99,254,255,58,102,254,255,234,5,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225, 2,0,0,26,204,0,87,227,89,254,255,58,92,254,255,234,5,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227, 251,255,255,10,4,0,87,225,2,0,0,26,204,0,85,227,79,254,255,58,82,254,255,234,5,112,160,225,40,112,135,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,204,0,85,227,69,254,255,58,72,254,255,234, 74,254,255,234,5,112,160,225,40,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,64,254,255,10, 5,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,57,254,255,10,5,112,160,225, 4,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,50,254,255,10,5,112,160,225,40,112,135,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,43,254,255,10,44,112,69,226,4,0,87,225,40,254,255,10, 36,112,69,226,4,0,87,225,37,254,255,10,36,112,133,226,4,0,87,225,34,254,255,10,44,112,133,226,4,0,87,225, 31,254,255,10,33,254,255,234,52,2,24,229,0,0,80,227,11,0,0,10,40,112,69,226,204,0,87,227,5,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,124,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224, 4,0,134,228,162,254,255,234,5,112,160,225,40,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26, 7,0,220,231,0,0,80,227,247,255,255,10,10,0,0,234,204,0,87,227,5,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,124,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224,4,0,134,228,140,254,255,234, 96,2,24,229,0,0,80,227,11,0,0,10,84,112,69,226,204,0,87,227,5,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,164,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224,4,0,134,228,88,2,24,229, 0,0,80,227,11,0,0,10,76,112,69,226,204,0,87,227,5,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,164,0,87,227,2,0,0,58,7,3,160,225,37,1,128,224,4,0,134,228,109,254,255,234,56,2,24,229, 0,0,80,227,9,0,0,10,44,112,69,226,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,52,2,24,229,0,0,80,227,9,0,0,10,40,112,69,226, 204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224, 4,0,134,228,48,2,24,229,0,0,80,227,9,0,0,10,36,112,69,226,204,0,87,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,232,1,24,229,0,0,80,227, 9,0,0,10,36,112,133,226,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 7,3,160,225,37,1,128,224,4,0,134,228,224,1,24,229,0,0,80,227,9,0,0,10,44,112,133,226,204,0,85,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 43,254,255,234,56,2,24,229,0,0,80,227,3,0,0,10,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 52,2,24,229,0,0,80,227,3,0,0,10,40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,48,2,24,229, 0,0,80,227,3,0,0,10,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,16,2,24,229,0,0,80,227, 3,0,0,10,4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,8,2,24,229,0,0,80,227,3,0,0,10, 4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,228,1,24,229,0,0,80,227,3,0,0,10,40,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,0,254,255,234,5,112,160,225,44,112,71,226,7,0,140,224,12,2,16,229, 0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,204,0,87,227,3,0,0,42, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225, 36,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10, 8,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225, 37,1,128,224,4,0,134,228,5,112,160,225,36,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26, 7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,44,112,135,226,7,0,140,224, 12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,204,0,85,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 179,253,255,234,5,112,160,225,44,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231, 0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,36,112,71,226, 7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,36,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227, 3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,44,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227, 247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,52,2,24,229,0,0,80,227,3,0,0,10, 40,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,16,2,24,229,0,0,80,227,3,0,0,10,4,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,8,2,24,229,0,0,80,227,3,0,0,10,4,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,228,1,24,229,0,0,80,227,3,0,0,10,40,112,133,226,7,3,160,225,37,1,128,224, 4,0,134,228,98,253,255,234,5,112,160,225,40,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26, 7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,204,0,87,227,3,0,0,42,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,4,112,71,226,7,0,140,224, 12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,204,0,87,227, 3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,4,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227, 247,255,255,10,8,0,0,234,204,0,85,227,3,0,0,42,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,40,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227, 3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,204,0,85,227,3,0,0,42,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,21,253,255,234,5,112,160,225, 40,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10, 2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,4,112,71,226,7,0,140,224,12,2,16,229, 0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224, 4,0,134,228,5,112,160,225,4,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231, 0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,40,112,135,226, 7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234, 7,3,160,225,37,1,128,224,4,0,134,228,56,2,24,229,0,0,80,227,3,0,0,10,44,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,48,2,24,229,0,0,80,227,3,0,0,10,36,112,69,226,7,3,160,225,37,1,128,224, 4,0,134,228,232,1,24,229,0,0,80,227,3,0,0,10,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228, 224,1,24,229,0,0,80,227,3,0,0,10,44,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,196,252,255,234, 52,169,1,0,140,170,1,0,104,169,1,0,140,170,1,0,172,169,1,0,140,170,1,0,16,170,1,0,140,170,1,0, 140,170,1,0,240,165,1,0,216,170,1,0,124,171,1,0,32,172,1,0,196,172,1,0,240,165,1,0,104,173,1,0, 132,175,1,0,168,173,1,0,132,175,1,0,0,174,1,0,132,175,1,0,124,174,1,0,132,175,1,0,132,175,1,0, 52,168,1,0,48,176,1,0,100,177,1,0,168,178,1,0,220,179,1,0,52,168,1,0,220,18,0,224,4,224,45,229, 64,0,45,233,191,150,255,235,125,157,255,235,212,155,255,235,64,0,189,232,80,75,28,229,1,0,116,227,3,0,0,10, 76,11,28,229,0,0,80,227,2,0,0,26,12,0,0,235,59,0,0,235,4,240,157,228,9,0,0,235,80,1,0,235, 55,0,0,235,148,1,0,235,32,1,0,235,4,240,157,228,4,224,45,229,74,1,0,235,143,1,0,235,27,1,0,235, 4,240,157,228,4,160,140,224,36,6,26,229,22,20,90,229,32,8,129,225,164,95,28,229,5,160,140,224,34,22,26,229, 24,36,90,229,33,24,130,225,1,0,208,225,20,0,0,10,148,95,28,229,84,0,85,227,17,0,0,58,5,128,140,224, 15,2,216,229,0,0,80,227,10,0,0,26,5,0,220,231,30,0,0,226,128,0,143,224,44,240,144,229,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,152,95,24,229,84,0,85,227, 237,255,255,42,14,240,160,225,84,189,1,0,172,190,1,0,136,189,1,0,172,190,1,0,204,189,1,0,172,190,1,0, 48,190,1,0,172,190,1,0,172,190,1,0,120,182,1,0,248,190,1,0,156,191,1,0,64,192,1,0,228,192,1,0, 120,182,1,0,164,95,28,229,5,128,140,224,44,112,133,226,4,0,87,225,9,0,0,26,24,4,88,229,128,0,16,227, 6,0,0,26,246,5,24,229,236,19,88,229,32,8,145,225,2,0,0,26,7,3,160,225,37,1,128,224,4,0,134,228, 36,112,133,226,4,0,87,225,9,0,0,26,24,4,88,229,32,0,16,227,6,0,0,26,254,5,24,229,244,19,88,229, 32,8,145,225,2,0,0,26,7,3,160,225,37,1,128,224,4,0,134,228,40,112,133,226,4,0,87,225,9,0,0,26, 24,4,88,229,64,0,16,227,6,0,0,26,250,5,24,229,240,19,88,229,32,8,145,225,2,0,0,26,7,3,160,225, 37,1,128,224,4,0,134,228,4,112,133,226,4,0,87,225,9,0,0,26,24,4,88,229,16,0,16,227,6,0,0,26, 30,6,24,229,20,20,88,229,32,8,145,225,2,0,0,26,7,3,160,225,37,1,128,224,4,0,134,228,4,112,69,226, 4,0,87,225,9,0,0,26,24,4,88,229,8,0,16,227,6,0,0,26,38,6,24,229,28,20,88,229,32,8,145,225, 2,0,0,26,7,3,160,225,37,1,128,224,4,0,134,228,36,112,69,226,4,0,87,225,9,0,0,26,24,4,88,229, 4,0,16,227,6,0,0,26,70,6,24,229,60,20,88,229,32,8,145,225,2,0,0,26,7,3,160,225,37,1,128,224, 4,0,134,228,44,112,69,226,4,0,87,225,9,0,0,26,24,4,88,229,1,0,16,227,6,0,0,26,78,6,24,229, 68,20,88,229,32,8,145,225,2,0,0,26,7,3,160,225,37,1,128,224,4,0,134,228,40,112,69,226,4,0,87,225, 9,0,0,26,24,4,88,229,2,0,16,227,6,0,0,26,74,6,24,229,64,20,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,44,112,133,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,128,0,16,227,6,0,0,26,246,5,24,229,236,19,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,36,112,133,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,32,0,16,227,6,0,0,26,254,5,24,229,244,19,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,40,112,133,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,64,0,16,227,6,0,0,26,250,5,24,229,240,19,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,4,112,133,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,16,0,16,227,6,0,0,26,30,6,24,229,20,20,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,4,112,69,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,8,0,16,227,6,0,0,26,38,6,24,229,28,20,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,36,112,69,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,4,0,16,227,6,0,0,26,70,6,24,229,60,20,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,44,112,69,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,1,0,16,227,6,0,0,26,78,6,24,229,68,20,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,40,112,69,226,4,0,87,225,12,0,0,10,7,0,220,231,160,0,16,227, 9,0,0,26,24,4,88,229,2,0,16,227,6,0,0,26,74,6,24,229,64,20,88,229,32,8,145,225,2,0,0,26, 7,3,160,225,37,1,128,224,4,0,134,228,14,240,160,225,200,94,159,229,131,144,160,227,0,0,160,227,4,0,133,228, 1,144,89,226,252,255,255,26,76,59,28,229,164,95,28,229,5,80,140,224,3,80,69,224,1,16,160,227,12,18,5,229, 3,0,117,231,0,0,80,227,251,255,255,10,148,95,28,229,84,0,85,227,10,0,0,58,5,128,140,224,15,2,216,229, 0,0,80,227,3,0,0,26,5,0,220,231,30,0,0,226,128,0,143,224,16,240,144,229,152,95,24,229,84,0,85,227, 244,255,255,42,14,240,160,225,136,193,1,0,164,195,1,0,200,193,1,0,164,195,1,0,32,194,1,0,164,195,1,0, 156,194,1,0,164,195,1,0,164,195,1,0,216,186,1,0,80,196,1,0,132,197,1,0,200,198,1,0,252,199,1,0, 216,186,1,0,76,59,28,229,164,95,28,229,5,160,140,224,34,6,26,229,24,20,90,229,32,40,145,225,57,0,0,234, 5,160,140,224,36,6,26,229,22,20,90,229,32,8,145,225,2,0,208,225,51,0,0,10,101,15,85,227,25,0,0,42, 5,0,139,224,36,11,16,229,0,0,140,224,116,11,80,229,0,0,80,227,5,0,0,26,188,15,92,229,0,0,80,227, 2,0,0,10,5,3,160,225,0,0,128,227,4,0,134,228,187,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 1,0,128,227,4,0,134,228,91,15,85,227,5,0,0,42,186,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 2,0,128,227,4,0,134,228,185,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,3,0,128,227,4,0,134,228, 184,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,4,0,128,227,4,0,134,228,183,15,92,229,0,0,80,227, 2,0,0,10,5,3,160,225,5,0,128,227,4,0,134,228,182,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 6,0,128,227,4,0,134,228,3,80,69,224,5,0,220,231,0,0,80,227,193,255,255,10,14,240,160,225,76,59,28,229, 164,95,28,229,5,160,140,224,34,6,26,229,24,20,90,229,32,40,145,225,57,0,0,234,5,160,140,224,36,6,26,229, 22,20,90,229,32,8,145,225,2,0,208,225,51,0,0,26,101,15,85,227,25,0,0,42,5,0,139,224,36,11,16,229, 0,0,140,224,116,11,80,229,0,0,80,227,5,0,0,26,188,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 0,0,128,227,4,0,134,228,187,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,1,0,128,227,4,0,134,228, 91,15,85,227,5,0,0,42,186,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,2,0,128,227,4,0,134,228, 185,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,3,0,128,227,4,0,134,228,184,15,92,229,0,0,80,227, 2,0,0,10,5,3,160,225,4,0,128,227,4,0,134,228,183,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225, 5,0,128,227,4,0,134,228,182,15,92,229,0,0,80,227,2,0,0,10,5,3,160,225,6,0,128,227,4,0,134,228, 3,80,69,224,5,0,220,231,0,0,80,227,193,255,255,10,14,240,160,225,40,112,133,226,4,0,87,225,8,0,0,26, 81,15,87,227,64,254,255,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,101,15,87,227,61,254,255,42, 57,254,255,234,59,254,255,234,5,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225, 8,0,0,26,81,15,87,227,47,254,255,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,101,15,87,227, 44,254,255,42,40,254,255,234,42,254,255,234,84,112,133,226,4,0,87,225,8,0,0,26,81,15,87,227,34,254,255,58, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,91,15,87,227,31,254,255,42,27,254,255,234,76,112,133,226, 4,0,87,225,8,0,0,26,81,15,87,227,22,254,255,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 91,15,87,227,19,254,255,42,15,254,255,234,17,254,255,234,44,112,133,226,4,0,87,225,2,0,0,26,81,15,87,227, 5,254,255,42,8,254,255,234,40,112,133,226,4,0,87,225,2,0,0,26,81,15,87,227,255,253,255,42,2,254,255,234, 36,112,133,226,4,0,87,225,2,0,0,26,81,15,87,227,249,253,255,42,252,253,255,234,36,112,69,226,4,0,87,225, 2,0,0,26,81,15,85,227,243,253,255,42,246,253,255,234,44,112,69,226,4,0,87,225,2,0,0,26,81,15,85,227, 237,253,255,42,240,253,255,234,242,253,255,234,44,112,133,226,4,0,87,225,236,253,255,10,40,112,133,226,4,0,87,225, 233,253,255,10,36,112,133,226,4,0,87,225,230,253,255,10,4,112,133,226,4,0,87,225,227,253,255,10,4,112,69,226, 4,0,87,225,224,253,255,10,40,112,69,226,4,0,87,225,221,253,255,10,223,253,255,234,5,112,160,225,44,112,135,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,81,15,87,227,207,253,255,42,210,253,255,234, 5,112,160,225,36,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,81,15,87,227, 197,253,255,42,200,253,255,234,5,112,160,225,36,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225, 2,0,0,26,81,15,85,227,187,253,255,42,190,253,255,234,5,112,160,225,44,112,71,226,7,0,220,231,0,0,80,227, 251,255,255,10,4,0,87,225,2,0,0,26,81,15,85,227,177,253,255,42,180,253,255,234,182,253,255,234,5,112,160,225, 44,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,172,253,255,10,5,112,160,225,36,112,135,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,165,253,255,10,5,112,160,225,36,112,71,226,7,0,220,231, 0,0,80,227,251,255,255,10,4,0,87,225,158,253,255,10,5,112,160,225,44,112,71,226,7,0,220,231,0,0,80,227, 251,255,255,10,4,0,87,225,151,253,255,10,40,112,133,226,4,0,87,225,148,253,255,10,4,112,133,226,4,0,87,225, 145,253,255,10,4,112,69,226,4,0,87,225,142,253,255,10,40,112,69,226,4,0,87,225,139,253,255,10,141,253,255,234, 5,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,81,15,87,227, 125,253,255,42,128,253,255,234,5,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225, 2,0,0,26,81,15,87,227,115,253,255,42,118,253,255,234,5,112,160,225,4,112,71,226,7,0,220,231,0,0,80,227, 251,255,255,10,4,0,87,225,2,0,0,26,81,15,85,227,105,253,255,42,108,253,255,234,5,112,160,225,40,112,71,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,2,0,0,26,81,15,85,227,95,253,255,42,98,253,255,234, 100,253,255,234,5,112,160,225,40,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,90,253,255,10, 5,112,160,225,4,112,135,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,83,253,255,10,5,112,160,225, 4,112,71,226,7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,76,253,255,10,5,112,160,225,40,112,71,226, 7,0,220,231,0,0,80,227,251,255,255,10,4,0,87,225,69,253,255,10,44,112,133,226,4,0,87,225,66,253,255,10, 36,112,133,226,4,0,87,225,63,253,255,10,36,112,69,226,4,0,87,225,60,253,255,10,44,112,69,226,4,0,87,225, 57,253,255,10,59,253,255,234,228,1,24,229,0,0,80,227,11,0,0,10,40,112,133,226,81,15,87,227,5,0,0,58, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,101,15,87,227,2,0,0,42,7,3,160,225,37,1,128,224, 4,0,134,228,67,254,255,234,5,112,160,225,40,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26, 7,0,220,231,0,0,80,227,247,255,255,10,10,0,0,234,81,15,87,227,5,0,0,58,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,101,15,87,227,2,0,0,42,7,3,160,225,37,1,128,224,4,0,134,228,45,254,255,234, 184,1,24,229,0,0,80,227,11,0,0,10,84,112,133,226,81,15,87,227,5,0,0,58,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,91,15,87,227,2,0,0,42,7,3,160,225,37,1,128,224,4,0,134,228,192,1,24,229, 0,0,80,227,11,0,0,10,76,112,133,226,81,15,87,227,5,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,91,15,87,227,2,0,0,42,7,3,160,225,37,1,128,224,4,0,134,228,14,254,255,234,224,1,24,229, 0,0,80,227,9,0,0,10,44,112,133,226,81,15,87,227,3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226, 4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,228,1,24,229,0,0,80,227,9,0,0,10,40,112,133,226, 81,15,87,227,3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224, 4,0,134,228,232,1,24,229,0,0,80,227,9,0,0,10,36,112,133,226,81,15,87,227,3,0,0,58,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,48,2,24,229,0,0,80,227, 9,0,0,10,36,112,69,226,81,15,85,227,3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 7,3,160,225,37,1,128,224,4,0,134,228,56,2,24,229,0,0,80,227,9,0,0,10,44,112,69,226,81,15,85,227, 3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 204,253,255,234,224,1,24,229,0,0,80,227,3,0,0,10,44,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228, 228,1,24,229,0,0,80,227,3,0,0,10,40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,232,1,24,229, 0,0,80,227,3,0,0,10,36,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,8,2,24,229,0,0,80,227, 3,0,0,10,4,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,16,2,24,229,0,0,80,227,3,0,0,10, 4,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,52,2,24,229,0,0,80,227,3,0,0,10,40,112,69,226, 7,3,160,225,37,1,128,224,4,0,134,228,161,253,255,234,5,112,160,225,44,112,135,226,7,0,140,224,12,2,16,229, 0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,81,15,87,227,3,0,0,58, 7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225, 36,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10, 8,0,0,234,81,15,87,227,3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225, 37,1,128,224,4,0,134,228,5,112,160,225,36,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26, 7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,81,15,85,227,3,0,0,58,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,44,112,71,226,7,0,140,224, 12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,81,15,85,227, 3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 84,253,255,234,5,112,160,225,44,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231, 0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,36,112,135,226, 7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,36,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227, 3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,44,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227, 247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,228,1,24,229,0,0,80,227,3,0,0,10, 40,112,133,226,7,3,160,225,37,1,128,224,4,0,134,228,8,2,24,229,0,0,80,227,3,0,0,10,4,112,133,226, 7,3,160,225,37,1,128,224,4,0,134,228,16,2,24,229,0,0,80,227,3,0,0,10,4,112,69,226,7,3,160,225, 37,1,128,224,4,0,134,228,52,2,24,229,0,0,80,227,3,0,0,10,40,112,69,226,7,3,160,225,37,1,128,224, 4,0,134,228,3,253,255,234,5,112,160,225,40,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26, 7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,81,15,87,227,3,0,0,58,7,3,160,225,37,1,128,224, 128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,4,112,135,226,7,0,140,224, 12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,81,15,87,227, 3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228, 5,112,160,225,4,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227, 247,255,255,10,8,0,0,234,81,15,85,227,3,0,0,58,7,3,160,225,37,1,128,224,128,0,128,226,4,0,134,228, 7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,40,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227, 3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,8,0,0,234,81,15,85,227,3,0,0,58,7,3,160,225, 37,1,128,224,128,0,128,226,4,0,134,228,7,3,160,225,37,1,128,224,4,0,134,228,182,252,255,234,5,112,160,225, 40,112,135,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10, 2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,4,112,135,226,7,0,140,224,12,2,16,229, 0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224, 4,0,134,228,5,112,160,225,4,112,71,226,7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231, 0,0,80,227,247,255,255,10,2,0,0,234,7,3,160,225,37,1,128,224,4,0,134,228,5,112,160,225,40,112,71,226, 7,0,140,224,12,2,16,229,0,0,80,227,3,0,0,26,7,0,220,231,0,0,80,227,247,255,255,10,2,0,0,234, 7,3,160,225,37,1,128,224,4,0,134,228,224,1,24,229,0,0,80,227,3,0,0,10,44,112,133,226,7,3,160,225, 37,1,128,224,4,0,134,228,232,1,24,229,0,0,80,227,3,0,0,10,36,112,133,226,7,3,160,225,37,1,128,224, 4,0,134,228,48,2,24,229,0,0,80,227,3,0,0,10,36,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228, 56,2,24,229,0,0,80,227,3,0,0,10,44,112,69,226,7,3,160,225,37,1,128,224,4,0,134,228,101,252,255,234, 220,18,0,224,196,15,92,229,0,0,80,227,19,0,0,10,124,80,160,227,248,65,159,229,8,144,160,227,9,128,160,227, 1,0,212,228,0,0,80,227,5,0,0,26,5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,0,0,128,226, 4,0,134,228,4,80,133,226,1,128,88,226,243,255,255,26,4,80,133,226,9,64,68,226,1,144,89,226,238,255,255,26, 195,15,92,229,0,0,80,227,14,0,0,10,124,80,160,227,8,144,160,227,9,128,160,227,5,0,220,231,0,0,80,227, 2,0,0,26,5,3,160,225,1,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226, 1,144,89,226,242,255,255,26,194,15,92,229,0,0,80,227,14,0,0,10,164,80,160,227,7,144,160,227,9,128,160,227, 5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,2,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226, 246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26,193,15,92,229,0,0,80,227,14,0,0,10,84,80,160,227, 9,144,160,227,9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,3,0,128,226,4,0,134,228, 4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26,192,15,92,229,0,0,80,227, 14,0,0,10,84,80,160,227,9,144,160,227,9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225, 4,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26, 191,15,92,229,0,0,80,227,14,0,0,10,84,80,160,227,9,144,160,227,9,128,160,227,5,0,220,231,0,0,80,227, 2,0,0,26,5,3,160,225,5,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226, 1,144,89,226,242,255,255,26,190,15,92,229,0,0,80,227,14,0,0,10,84,80,160,227,9,144,160,227,9,128,160,227, 5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,6,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226, 246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26,14,240,160,225,105,9,0,224,188,15,92,229,0,0,80,227, 19,0,0,10,84,80,160,227,248,65,159,229,8,144,160,227,9,128,160,227,1,0,212,228,0,0,80,227,5,0,0,26, 5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,0,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226, 243,255,255,26,4,80,133,226,9,64,68,226,1,144,89,226,238,255,255,26,187,15,92,229,0,0,80,227,14,0,0,10, 8,144,160,227,84,80,160,227,9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,1,0,128,226, 4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26,186,15,92,229, 0,0,80,227,14,0,0,10,7,144,160,227,84,80,160,227,9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26, 5,3,160,225,2,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226, 242,255,255,26,185,15,92,229,0,0,80,227,14,0,0,10,9,144,160,227,84,80,160,227,9,128,160,227,5,0,220,231, 0,0,80,227,2,0,0,26,5,3,160,225,3,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26, 4,80,133,226,1,144,89,226,242,255,255,26,184,15,92,229,0,0,80,227,14,0,0,10,9,144,160,227,84,80,160,227, 9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,4,0,128,226,4,0,134,228,4,80,133,226, 1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26,183,15,92,229,0,0,80,227,14,0,0,10, 9,144,160,227,84,80,160,227,9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26,5,3,160,225,5,0,128,226, 4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226,242,255,255,26,182,15,92,229, 0,0,80,227,14,0,0,10,9,144,160,227,84,80,160,227,9,128,160,227,5,0,220,231,0,0,80,227,2,0,0,26, 5,3,160,225,6,0,128,226,4,0,134,228,4,80,133,226,1,128,88,226,246,255,255,26,4,80,133,226,1,144,89,226, 242,255,255,26,14,240,160,225,117,9,0,224,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0, 5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, 3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0, 1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0, 9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0, 7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0, 5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, 3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0, 1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0, 9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0, 7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0, 5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, 3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0,9,0,0,0,0,0,0,0, 1,0,0,0,2,0,0,0,3,0,0,0,4,0,0,0,5,0,0,0,6,0,0,0,7,0,0,0,8,0,0,0, 9,0,0,0,32,78,0,0,224,177,255,255,8,30,32,50,52,70,80,0,0,254,255,0,1,2,2,3,3,3,2,0, 6,6,6,6,6,8,6,8,8,6,0,3,3,3,3,3,4,3,4,6,3,0,2,2,2,2,2,3,2,3,4,2, 3,5,7,9,11,13,15,17,19,0,0,0,8,0,0,0,8,0,0,0,6,0,0,0,0,0,0,0,6,0,0,0, 0,1,0,0,0,255,255,255,0,1,0,0,0,255,255,255,0,0,0,0,240,255,255,255,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,15,0,0,0, 15,0,0,0,13,0,0,0,11,0,0,0,7,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,17,0,0,0, 19,0,0,0,19,0,0,0,19,0,0,0,17,0,0,0,14,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0, 14,0,0,0,17,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,17,0,0,0,14,0,0,0,8,0,0,0, 0,0,0,0,8,0,0,0,14,0,0,0,18,0,0,0,20,0,0,0,20,0,0,0,20,0,0,0,18,0,0,0, 14,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,18,0,0,0,20,0,0,0,20,0,0,0, 20,0,0,0,18,0,0,0,14,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0,14,0,0,0,18,0,0,0, 20,0,0,0,20,0,0,0,20,0,0,0,18,0,0,0,14,0,0,0,8,0,0,0,0,0,0,0,8,0,0,0, 14,0,0,0,17,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,17,0,0,0,14,0,0,0,8,0,0,0, 0,0,0,0,8,0,0,0,14,0,0,0,17,0,0,0,19,0,0,0,19,0,0,0,19,0,0,0,17,0,0,0, 14,0,0,0,8,0,0,0,0,0,0,0,7,0,0,0,11,0,0,0,13,0,0,0,15,0,0,0,15,0,0,0, 15,0,0,0,13,0,0,0,11,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,132,0,0,0,132,0,0,0, 132,0,0,0,136,0,0,0,140,0,0,0,144,0,0,0,148,0,0,0,148,0,0,0,148,0,0,0,0,0,0,0, 132,0,0,0,132,0,0,0,132,0,0,0,136,0,0,0,140,0,0,0,144,0,0,0,148,0,0,0,148,0,0,0, 148,0,0,0,0,0,0,0,172,0,0,0,172,0,0,0,172,0,0,0,176,0,0,0,180,0,0,0,184,0,0,0, 188,0,0,0,188,0,0,0,188,0,0,0,0,0,0,0,212,0,0,0,212,0,0,0,212,0,0,0,216,0,0,0, 220,0,0,0,224,0,0,0,228,0,0,0,228,0,0,0,228,0,0,0,0,0,0,0,252,0,0,0,252,0,0,0, 252,0,0,0,0,1,0,0,4,1,0,0,8,1,0,0,12,1,0,0,12,1,0,0,12,1,0,0,0,0,0,0, 36,1,0,0,36,1,0,0,36,1,0,0,40,1,0,0,44,1,0,0,48,1,0,0,52,1,0,0,52,1,0,0, 52,1,0,0,0,0,0,0,76,1,0,0,76,1,0,0,76,1,0,0,80,1,0,0,84,1,0,0,88,1,0,0, 92,1,0,0,92,1,0,0,92,1,0,0,0,0,0,0,116,1,0,0,116,1,0,0,116,1,0,0,120,1,0,0, 124,1,0,0,128,1,0,0,132,1,0,0,132,1,0,0,132,1,0,0,0,0,0,0,116,1,0,0,116,1,0,0, 116,1,0,0,120,1,0,0,124,1,0,0,128,1,0,0,132,1,0,0,132,1,0,0,132,1,0,0,1,0,0,0, 1,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 1,0,0,0,2,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0, 0,0,0,0,13,0,0,0,0,0,0,0,12,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,20,0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, 4,0,0,0,15,0,0,0,15,0,0,0,16,0,0,0,16,0,0,0,25,0,0,0,25,0,0,0,26,0,0,0, 0,0,0,0,35,0,0,0,35,0,0,0,40,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0, 22,0,0,0,8,0,0,0,20,0,0,0,12,0,0,0,20,0,0,0,16,0,0,0,16,0,0,0,16,0,0,0, 0,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,64,1,0,0, 192,4,0,0,32,2,0,0,64,4,0,0,64,2,0,0,32,4,0,0,64,3,0,0,128,3,0,0,96,3,0,0, 0,0,0,0,160,4,0,0,0,6,0,0,64,5,0,0,224,6,0,0,0,15,0,0,0,0,0,0,144,224,1,0, 248,225,1,0,96,227,1,0,200,228,1,0,48,230,1,0,152,231,1,0,0,233,1,0,104,234,1,0,208,235,1,0, 208,235,1,0,56,237,1,0,160,238,1,0,8,240,1,0,112,241,1,0,216,242,1,0,216,242,1,0,0,0,0,0, 4,0,0,0,8,0,0,0,11,0,0,0,14,0,0,0,17,0,0,0,20,0,0,0,22,0,0,0,24,0,0,0, 26,0,0,0,28,0,0,0,30,0,0,0,32,0,0,0,34,0,0,0,36,0,0,0,38,0,0,0,40,0,0,0, 42,0,0,0,44,0,0,0,0,0,0,0,16,0,0,0,31,0,0,0,46,0,0,0,60,0,0,0,0,0,0,0, 17,0,0,0,33,0,0,0,49,0,0,0,64,0,0,0,0,0,0,0,26,0,0,0,51,0,0,0,76,0,0,0, 100,0,0,0,0,0,0,0,27,0,0,0,53,0,0,0,79,0,0,0,104,0,0,0,0,0,0,0,35,0,0,0, 69,0,0,0,0,0,0,0,40,0,0,0,79,0,0,0,4,0,0,0,4,0,0,0,15,0,0,0,15,0,0,0, 16,0,0,0,16,0,0,0,25,0,0,0,25,0,0,0,26,0,0,0,0,0,0,0,35,0,0,0,35,0,0,0, 40,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,22,0,0,0,22,0,0,0,8,0,0,0,20,0,0,0, 12,0,0,0,20,0,0,0,16,0,0,0,16,0,0,0,16,0,0,0,0,0,0,0,7,0,0,0,7,0,0,0, 7,0,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, 2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4, 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8, 5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5, 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8, 5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6, 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8, 5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7, 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8, 5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8, 5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9,5,6,6,7,6,7,7,8,6,7,7,8,7,8,8,9, 6,7,7,8,7,8,8,9,7,8,8,9,8,9,9,10,0,212,216,0,220,0,0,0,252,0,0,0,0,0,0,0, 4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,172,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,79,0,0,0, 85,0,0,0,92,0,0,0,95,0,0,0,92,0,0,0,85,0,0,0,79,0,0,0,72,0,0,0,0,0,0,0, 85,0,0,0,92,0,0,0,99,0,0,0,105,0,0,0,108,0,0,0,105,0,0,0,99,0,0,0,92,0,0,0, 85,0,0,0,0,0,0,0,95,0,0,0,102,0,0,0,108,0,0,0,115,0,0,0,118,0,0,0,115,0,0,0, 108,0,0,0,102,0,0,0,95,0,0,0,0,0,0,0,49,0,0,0,56,0,0,0,62,0,0,0,69,0,0,0, 72,0,0,0,69,0,0,0,62,0,0,0,56,0,0,0,49,0,0,0,0,0,0,0,49,0,0,0,56,0,0,0, 62,0,0,0,69,0,0,0,72,0,0,0,69,0,0,0,62,0,0,0,56,0,0,0,49,0,0,0,0,0,0,0, 46,0,0,0,52,0,0,0,59,0,0,0,66,0,0,0,69,0,0,0,66,0,0,0,59,0,0,0,52,0,0,0, 46,0,0,0,0,0,0,0,33,0,0,0,36,0,0,0,42,0,0,0,49,0,0,0,52,0,0,0,49,0,0,0, 42,0,0,0,36,0,0,0,33,0,0,0,0,0,0,0,26,0,0,0,29,0,0,0,33,0,0,0,36,0,0,0, 42,0,0,0,36,0,0,0,33,0,0,0,29,0,0,0,26,0,0,0,0,0,0,0,17,1,0,0,56,1,0,0, 95,1,0,0,134,1,0,0,134,1,0,0,134,1,0,0,95,1,0,0,56,1,0,0,17,1,0,0,0,0,0,0, 95,1,0,0,134,1,0,0,173,1,0,0,212,1,0,0,212,1,0,0,212,1,0,0,173,1,0,0,134,1,0,0, 95,1,0,0,0,0,0,0,173,1,0,0,212,1,0,0,251,1,0,0,34,2,0,0,34,2,0,0,34,2,0,0, 251,1,0,0,212,1,0,0,173,1,0,0,0,0,0,0,212,1,0,0,251,1,0,0,34,2,0,0,73,2,0,0, 73,2,0,0,73,2,0,0,34,2,0,0,251,1,0,0,212,1,0,0,0,0,0,0,223,1,0,0,2,2,0,0, 37,2,0,0,73,2,0,0,73,2,0,0,73,2,0,0,37,2,0,0,2,2,0,0,223,1,0,0,0,0,0,0, 223,1,0,0,2,2,0,0,37,2,0,0,73,2,0,0,73,2,0,0,73,2,0,0,37,2,0,0,2,2,0,0, 223,1,0,0,0,0,0,0,14,2,0,0,53,2,0,0,92,2,0,0,166,2,0,0,131,2,0,0,131,2,0,0, 92,2,0,0,53,2,0,0,14,2,0,0,0,0,0,0,53,2,0,0,92,2,0,0,174,2,0,0,166,2,0,0, 174,2,0,0,166,2,0,0,131,2,0,0,92,2,0,0,53,2,0,0,0,0,0,0,14,2,0,0,53,2,0,0, 92,2,0,0,131,2,0,0,131,2,0,0,131,2,0,0,92,2,0,0,53,2,0,0,14,2,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,85,0,0,0,93,0,0,0,101,0,0,0,109,0,0,0,109,0,0,0,109,0,0,0, 101,0,0,0,93,0,0,0,85,0,0,0,0,0,0,0,117,0,0,0,124,0,0,0,132,0,0,0,140,0,0,0, 140,0,0,0,140,0,0,0,132,0,0,0,124,0,0,0,117,0,0,0,0,0,0,0,148,0,0,0,156,0,0,0, 163,0,0,0,171,0,0,0,171,0,0,0,171,0,0,0,163,0,0,0,156,0,0,0,148,0,0,0,0,0,0,0, 179,0,0,0,187,0,0,0,195,0,0,0,202,0,0,0,202,0,0,0,202,0,0,0,195,0,0,0,187,0,0,0, 179,0,0,0,0,0,0,0,210,0,0,0,218,0,0,0,226,0,0,0,234,0,0,0,234,0,0,0,234,0,0,0, 226,0,0,0,218,0,0,0,210,0,0,0,0,0,0,0,241,0,0,0,249,0,0,0,1,1,0,0,9,1,0,0, 9,1,0,0,9,1,0,0,1,1,0,0,249,0,0,0,241,0,0,0,0,0,0,0,17,1,0,0,24,1,0,0, 32,1,0,0,40,1,0,0,40,1,0,0,40,1,0,0,32,1,0,0,24,1,0,0,17,1,0,0,0,0,0,0, 48,1,0,0,56,1,0,0,63,1,0,0,71,1,0,0,71,1,0,0,71,1,0,0,63,1,0,0,56,1,0,0, 48,1,0,0,0,0,0,0,235,0,0,0,12,1,0,0,46,1,0,0,80,1,0,0,80,1,0,0,80,1,0,0, 46,1,0,0,12,1,0,0,235,0,0,0,0,0,0,0,46,1,0,0,80,1,0,0,113,1,0,0,147,1,0,0, 147,1,0,0,147,1,0,0,113,1,0,0,80,1,0,0,46,1,0,0,0,0,0,0,113,1,0,0,147,1,0,0, 180,1,0,0,214,1,0,0,214,1,0,0,214,1,0,0,180,1,0,0,147,1,0,0,113,1,0,0,0,0,0,0, 147,1,0,0,180,1,0,0,214,1,0,0,248,1,0,0,248,1,0,0,248,1,0,0,214,1,0,0,180,1,0,0, 147,1,0,0,0,0,0,0,157,1,0,0,187,1,0,0,217,1,0,0,248,1,0,0,248,1,0,0,248,1,0,0, 217,1,0,0,187,1,0,0,157,1,0,0,0,0,0,0,157,1,0,0,187,1,0,0,217,1,0,0,248,1,0,0, 248,1,0,0,248,1,0,0,217,1,0,0,187,1,0,0,157,1,0,0,0,0,0,0,197,1,0,0,231,1,0,0, 8,2,0,0,72,2,0,0,42,2,0,0,42,2,0,0,8,2,0,0,231,1,0,0,197,1,0,0,0,0,0,0, 231,1,0,0,8,2,0,0,79,2,0,0,72,2,0,0,79,2,0,0,72,2,0,0,42,2,0,0,8,2,0,0, 231,1,0,0,0,0,0,0,197,1,0,0,231,1,0,0,8,2,0,0,42,2,0,0,42,2,0,0,42,2,0,0, 8,2,0,0,231,1,0,0,197,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 189,0,0,0,252,0,0,0,27,1,0,0,43,1,0,0,43,1,0,0,43,1,0,0,27,1,0,0,252,0,0,0, 189,0,0,0,0,0,0,0,189,0,0,0,252,0,0,0,27,1,0,0,43,1,0,0,43,1,0,0,43,1,0,0, 27,1,0,0,252,0,0,0,189,0,0,0,0,0,0,0,189,0,0,0,252,0,0,0,27,1,0,0,43,1,0,0, 43,1,0,0,43,1,0,0,27,1,0,0,252,0,0,0,189,0,0,0,0,0,0,0,189,0,0,0,252,0,0,0, 27,1,0,0,43,1,0,0,43,1,0,0,43,1,0,0,27,1,0,0,252,0,0,0,189,0,0,0,0,0,0,0, 195,0,0,0,2,1,0,0,33,1,0,0,49,1,0,0,49,1,0,0,49,1,0,0,33,1,0,0,2,1,0,0, 195,0,0,0,0,0,0,0,220,0,0,0,27,1,0,0,59,1,0,0,74,1,0,0,74,1,0,0,74,1,0,0, 59,1,0,0,27,1,0,0,220,0,0,0,0,0,0,0,252,0,0,0,59,1,0,0,90,1,0,0,106,1,0,0, 106,1,0,0,106,1,0,0,90,1,0,0,59,1,0,0,252,0,0,0,0,0,0,0,231,0,0,0,8,1,0,0, 41,1,0,0,74,1,0,0,74,1,0,0,74,1,0,0,41,1,0,0,8,1,0,0,231,0,0,0,0,0,0,0, 41,1,0,0,74,1,0,0,107,1,0,0,140,1,0,0,140,1,0,0,140,1,0,0,107,1,0,0,74,1,0,0, 41,1,0,0,0,0,0,0,107,1,0,0,140,1,0,0,173,1,0,0,206,1,0,0,206,1,0,0,206,1,0,0, 173,1,0,0,140,1,0,0,107,1,0,0,0,0,0,0,140,1,0,0,173,1,0,0,206,1,0,0,239,1,0,0, 239,1,0,0,239,1,0,0,206,1,0,0,173,1,0,0,140,1,0,0,0,0,0,0,149,1,0,0,179,1,0,0, 209,1,0,0,239,1,0,0,239,1,0,0,239,1,0,0,209,1,0,0,179,1,0,0,149,1,0,0,0,0,0,0, 149,1,0,0,179,1,0,0,209,1,0,0,239,1,0,0,239,1,0,0,239,1,0,0,209,1,0,0,179,1,0,0, 149,1,0,0,0,0,0,0,189,1,0,0,222,1,0,0,255,1,0,0,62,2,0,0,32,2,0,0,32,2,0,0, 255,1,0,0,222,1,0,0,189,1,0,0,0,0,0,0,222,1,0,0,255,1,0,0,68,2,0,0,62,2,0,0, 68,2,0,0,62,2,0,0,32,2,0,0,255,1,0,0,222,1,0,0,0,0,0,0,189,1,0,0,222,1,0,0, 255,1,0,0,32,2,0,0,32,2,0,0,32,2,0,0,255,1,0,0,222,1,0,0,189,1,0,0,0,0,0,0, 43,1,0,0,74,1,0,0,106,1,0,0,112,1,0,0,112,1,0,0,112,1,0,0,106,1,0,0,74,1,0,0, 43,1,0,0,0,0,0,0,106,1,0,0,137,1,0,0,169,1,0,0,175,1,0,0,175,1,0,0,175,1,0,0, 169,1,0,0,137,1,0,0,106,1,0,0,0,0,0,0,137,1,0,0,169,1,0,0,200,1,0,0,207,1,0,0, 207,1,0,0,207,1,0,0,200,1,0,0,169,1,0,0,137,1,0,0,0,0,0,0,122,1,0,0,153,1,0,0, 185,1,0,0,191,1,0,0,191,1,0,0,191,1,0,0,185,1,0,0,153,1,0,0,122,1,0,0,0,0,0,0, 122,1,0,0,153,1,0,0,185,1,0,0,191,1,0,0,191,1,0,0,191,1,0,0,185,1,0,0,153,1,0,0, 122,1,0,0,0,0,0,0,122,1,0,0,153,1,0,0,185,1,0,0,191,1,0,0,191,1,0,0,191,1,0,0, 185,1,0,0,153,1,0,0,122,1,0,0,0,0,0,0,159,1,0,0,200,1,0,0,232,1,0,0,232,1,0,0, 232,1,0,0,232,1,0,0,222,1,0,0,200,1,0,0,159,1,0,0,0,0,0,0,159,1,0,0,200,1,0,0, 216,1,0,0,222,1,0,0,222,1,0,0,222,1,0,0,216,1,0,0,200,1,0,0,159,1,0,0,0,0,0,0, 144,1,0,0,175,1,0,0,200,1,0,0,207,1,0,0,207,1,0,0,207,1,0,0,200,1,0,0,175,1,0,0, 144,1,0,0,0,0,0,0,220,0,0,0,252,0,0,0,27,1,0,0,59,1,0,0,59,1,0,0,59,1,0,0, 27,1,0,0,252,0,0,0,220,0,0,0,0,0,0,0,27,1,0,0,59,1,0,0,90,1,0,0,122,1,0,0, 122,1,0,0,122,1,0,0,90,1,0,0,59,1,0,0,27,1,0,0,0,0,0,0,90,1,0,0,122,1,0,0, 153,1,0,0,185,1,0,0,185,1,0,0,185,1,0,0,153,1,0,0,122,1,0,0,90,1,0,0,0,0,0,0, 122,1,0,0,153,1,0,0,185,1,0,0,216,1,0,0,216,1,0,0,216,1,0,0,185,1,0,0,153,1,0,0, 122,1,0,0,0,0,0,0,131,1,0,0,159,1,0,0,188,1,0,0,216,1,0,0,216,1,0,0,216,1,0,0, 188,1,0,0,159,1,0,0,131,1,0,0,0,0,0,0,131,1,0,0,159,1,0,0,188,1,0,0,216,1,0,0, 216,1,0,0,216,1,0,0,188,1,0,0,159,1,0,0,131,1,0,0,0,0,0,0,169,1,0,0,200,1,0,0, 232,1,0,0,36,2,0,0,7,2,0,0,7,2,0,0,232,1,0,0,200,1,0,0,169,1,0,0,0,0,0,0, 200,1,0,0,232,1,0,0,42,2,0,0,36,2,0,0,42,2,0,0,36,2,0,0,7,2,0,0,232,1,0,0, 200,1,0,0,0,0,0,0,169,1,0,0,200,1,0,0,232,1,0,0,7,2,0,0,7,2,0,0,7,2,0,0, 232,1,0,0,200,1,0,0,169,1,0,0,0,0,0,0,210,0,0,0,240,0,0,0,14,1,0,0,44,1,0,0, 44,1,0,0,44,1,0,0,14,1,0,0,240,0,0,0,210,0,0,0,0,0,0,0,14,1,0,0,44,1,0,0, 74,1,0,0,104,1,0,0,104,1,0,0,104,1,0,0,74,1,0,0,44,1,0,0,14,1,0,0,0,0,0,0, 74,1,0,0,104,1,0,0,134,1,0,0,164,1,0,0,164,1,0,0,164,1,0,0,134,1,0,0,104,1,0,0, 74,1,0,0,0,0,0,0,104,1,0,0,134,1,0,0,164,1,0,0,194,1,0,0,194,1,0,0,194,1,0,0, 164,1,0,0,134,1,0,0,104,1,0,0,0,0,0,0,113,1,0,0,140,1,0,0,167,1,0,0,194,1,0,0, 194,1,0,0,194,1,0,0,167,1,0,0,140,1,0,0,113,1,0,0,0,0,0,0,113,1,0,0,140,1,0,0, 167,1,0,0,194,1,0,0,194,1,0,0,194,1,0,0,167,1,0,0,140,1,0,0,113,1,0,0,0,0,0,0, 149,1,0,0,179,1,0,0,209,1,0,0,13,2,0,0,239,1,0,0,254,1,0,0,209,1,0,0,179,1,0,0, 149,1,0,0,0,0,0,0,179,1,0,0,209,1,0,0,28,2,0,0,239,1,0,0,13,2,0,0,239,1,0,0, 239,1,0,0,209,1,0,0,179,1,0,0,0,0,0,0,149,1,0,0,179,1,0,0,209,1,0,0,239,1,0,0, 224,1,0,0,239,1,0,0,209,1,0,0,179,1,0,0,149,1,0,0,0,0,0,0,163,2,0,0,163,2,0,0, 163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,0,0,0,0, 163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0, 163,2,0,0,0,0,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0, 163,2,0,0,163,2,0,0,163,2,0,0,0,0,0,0,149,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0, 163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,149,2,0,0,0,0,0,0,149,2,0,0,163,2,0,0, 163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,149,2,0,0,0,0,0,0, 149,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0,163,2,0,0, 149,2,0,0,0,0,0,0,149,2,0,0,171,2,0,0,171,2,0,0,171,2,0,0,171,2,0,0,171,2,0,0, 171,2,0,0,171,2,0,0,149,2,0,0,0,0,0,0,149,2,0,0,179,2,0,0,179,2,0,0,179,2,0,0, 179,2,0,0,179,2,0,0,179,2,0,0,179,2,0,0,149,2,0,0,0,0,0,0,163,2,0,0,190,2,0,0, 190,2,0,0,190,2,0,0,190,2,0,0,190,2,0,0,190,2,0,0,190,2,0,0,163,2,0,0,0,0,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,0,0,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,0,0,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,0,0,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,0,0,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,0,0,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,0,0,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,0,0,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,0,0,0,0, 176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0,176,4,0,0, 176,4,0,0,0,0,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0, 82,3,0,0,82,3,0,0,82,3,0,0,0,0,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0, 82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,0,0,0,0,82,3,0,0,82,3,0,0, 82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,82,3,0,0,0,0,0,0, 3,3,0,0,3,3,0,0,3,3,0,0,3,3,0,0,3,3,0,0,3,3,0,0,3,3,0,0,3,3,0,0, 3,3,0,0,0,0,0,0,244,2,0,0,244,2,0,0,244,2,0,0,244,2,0,0,244,2,0,0,244,2,0,0, 244,2,0,0,244,2,0,0,244,2,0,0,0,0,0,0,19,3,0,0,19,3,0,0,19,3,0,0,19,3,0,0, 19,3,0,0,19,3,0,0,19,3,0,0,19,3,0,0,19,3,0,0,0,0,0,0,35,3,0,0,35,3,0,0, 35,3,0,0,35,3,0,0,35,3,0,0,35,3,0,0,35,3,0,0,35,3,0,0,35,3,0,0,0,0,0,0, 51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0, 51,3,0,0,0,0,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0,51,3,0,0, 51,3,0,0,51,3,0,0,51,3,0,0,0,0,0,0,137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0, 137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0,0,0,0,0,137,5,0,0,137,5,0,0, 137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0,137,5,0,0,0,0,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,0,0,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,0,0,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,0,0,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,0,0,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,0,0,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,0,0,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0, 236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,236,4,0,0,0,0,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,0,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,0,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0,0,15,0,0,0,15,0,0, 0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,15,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 238,25,232,61,40,94,105,91,239,40,105,182,239,174,88,199,247,161,217,132,108,66,151,62,228,159,82,35,6,126,31,77, 179,58,39,3,235,29,3,207,86,73,181,165,58,206,90,123,242,126,248,215,245,106,64,216,75,10,122,157,0,147,159,152, 68,203,248,196,118,203,84,4,100,58,242,252,25,17,6,137,59,185,184,18,194,30,0,229,254,67,74,213,193,253,192,57, 0,183,80,208,209,140,46,235,176,164,91,191,111,185,25,22,129,142,110,62,110,41,145,143,162,137,160,192,4,185,177,58, 52,107,81,76,188,165,45,30,7,160,204,202,3,4,13,178,129,117,228,248,83,233,185,104,100,76,164,1,146,29,243,68, 164,193,20,225,146,208,72,216,190,32,111,152,240,151,225,50,223,152,96,215,78,50,150,169,168,248,144,216,83,193,242,251, 141,70,200,43,1,246,196,155,212,153,88,218,187,74,74,138,41,100,234,196,156,166,21,220,204,252,43,191,178,247,195,22, 253,87,238,59,45,92,14,91,139,145,41,187,251,160,219,95,198,109,0,199,111,43,10,42,151,36,255,126,143,40,176,184, 148,128,132,216,186,249,170,104,255,148,172,27,244,75,210,57,3,170,55,248,244,166,236,71,80,166,155,14,38,85,102,247, 95,244,162,215,89,16,43,253,83,81,152,150,92,149,114,65,39,143,99,81,124,63,208,228,45,93,117,95,179,52,109,131, 152,177,157,201,180,221,210,203,240,251,106,177,210,109,138,117,71,54,43,66,77,184,123,77,116,178,34,160,166,194,140,106, 28,148,104,108,239,60,106,179,185,19,36,134,86,21,115,131,96,220,116,119,209,184,81,229,51,230,46,209,127,233,106,241, 66,98,197,5,137,216,246,89,136,165,11,216,27,95,166,35,177,232,245,46,187,124,246,239,174,211,233,37,227,112,133,48, 173,25,177,244,212,90,35,185,248,81,88,238,53,14,123,228,252,24,188,38,90,79,175,224,65,167,3,216,187,193,37,124, 136,103,170,93,126,181,165,169,210,34,176,58,21,248,3,147,197,99,193,213,28,104,65,28,19,243,140,39,82,64,218,78, 188,209,61,113,49,43,142,24,81,70,217,243,134,175,207,226,35,244,197,12,41,74,39,98,48,146,121,30,142,188,25,148, 162,227,136,153,71,93,3,251,139,56,172,121,145,44,133,28,5,68,44,5,209,90,107,193,94,60,48,97,88,46,139,206, 246,10,153,121,64,227,108,131,20,174,5,191,191,128,207,150,103,184,184,120,252,167,29,224,5,192,136,116,33,173,220,50, 194,11,212,62,165,243,101,112,4,245,232,115,62,117,45,203,85,3,13,229,35,4,176,17,191,74,226,89,255,174,158,254, 84,236,65,207,165,52,190,144,37,185,212,19,246,68,219,61,30,124,171,72,137,30,232,20,96,10,204,140,222,208,193,94, 92,171,248,218,227,202,228,114,248,54,158,193,250,145,221,87,164,177,211,91,228,27,100,241,7,66,214,232,163,155,65,47, 249,233,18,70,149,86,195,120,215,173,120,3,219,196,79,85,236,22,40,43,136,252,91,218,18,110,171,164,135,51,115,51, 46,124,162,221,116,100,36,45,199,254,87,105,108,42,13,38,182,105,121,147,97,142,208,128,235,246,172,97,199,99,124,89, 57,26,73,93,97,63,144,81,112,2,166,15,101,157,168,19,206,241,15,123,113,41,151,162,44,58,153,26,236,48,75,125, 214,80,186,84,128,41,79,203,118,83,54,123,125,226,175,77,46,208,243,199,96,12,213,232,211,156,54,117,240,149,140,176, 120,124,230,45,121,20,203,113,165,136,57,91,103,75,179,236,154,193,236,18,176,61,22,109,202,103,113,188,119,210,190,21, 156,253,89,217,160,169,91,162,223,51,199,251,2,110,28,98,156,215,182,129,10,81,236,34,230,191,182,125,197,254,89,242, 249,99,177,254,63,146,75,162,169,108,126,220,17,109,85,61,181,122,177,100,152,12,6,226,162,106,183,247,205,66,148,22, 65,208,174,197,170,176,121,31,199,36,201,1,113,124,163,52,178,198,198,132,24,42,146,82,116,80,102,87,145,115,94,179, 150,126,21,183,243,239,127,50,33,164,120,154,169,68,37,203,76,152,164,149,214,255,253,102,215,100,90,215,55,21,186,245, 143,55,168,60,135,132,167,63,227,95,89,227,59,52,179,122,114,0,137,209,8,196,222,128,120,91,38,196,252,96,97,112, 191,86,220,213,149,61,234,84,11,114,252,236,128,103,125,113,230,250,77,236,39,223,242,189,82,142,144,136,113,45,83,244, 235,99,110,146,113,210,69,21,11,239,70,170,13,214,1,5,79,125,92,77,72,72,25,141,110,92,59,110,163,223,252,212, 21,93,112,245,55,115,219,154,78,218,120,26,41,117,107,80,24,120,139,137,128,120,120,235,237,63,64,35,178,119,239,106, 162,243,247,148,118,185,103,215,117,202,3,196,179,147,192,184,99,137,105,198,248,71,219,12,213,219,75,83,196,53,60,55, 106,127,124,139,136,169,223,141,148,122,245,246,190,183,181,238,121,171,131,29,141,0,124,78,221,175,164,3,151,8,171,21, 57,39,169,157,63,42,83,176,68,215,59,221,202,205,91,101,227,187,96,211,147,98,89,135,251,250,235,98,149,157,133,250, 113,200,39,187,45,131,59,4,217,208,176,119,1,197,36,114,220,5,144,85,177,84,181,178,21,91,22,254,251,85,251,178, 44,202,241,38,249,58,73,172,90,38,156,16,37,32,148,44,12,123,35,121,6,5,237,213,117,31,178,136,197,203,210,188, 124,7,113,231,108,85,102,131,48,2,89,102,95,30,241,65,88,114,176,21,47,54,63,93,221,226,77,102,186,118,39,139, 29,186,128,5,116,10,250,157,116,202,136,126,197,197,52,28,209,138,92,93,91,220,89,220,252,206,172,27,241,238,101,102, 114,134,136,169,42,45,163,102,92,168,139,67,111,169,158,202,141,188,107,68,144,118,254,204,15,133,64,1,1,230,198,142, 6,58,18,228,253,89,65,169,85,142,252,207,34,76,225,53,126,245,253,139,85,212,61,197,229,135,63,133,112,189,13,174, 144,73,235,165,212,219,46,161,10,22,94,253,153,57,30,139,159,211,18,60,147,203,72,206,243,205,73,241,210,66,169,206, 125,162,181,165,141,80,58,195,220,105,112,149,182,219,189,142,91,237,190,245,115,202,200,223,230,177,125,152,241,229,132,216, 60,80,8,164,129,226,131,133,95,139,119,242,23,61,211,229,4,117,209,253,77,33,47,84,90,214,157,5,81,66,94,181, 216,202,123,103,103,148,72,91,102,13,113,201,20,205,16,148,68,139,216,14,17,167,106,192,204,154,100,2,183,36,65,246, 212,178,179,126,52,225,206,158,142,216,238,235,91,125,64,145,95,6,232,83,8,184,137,131,130,81,96,133,211,248,0,253, 79,79,146,18,123,74,157,13,79,206,66,37,46,51,191,1,184,185,19,66,179,57,36,15,165,67,242,172,44,130,118,200, 26,94,50,194,5,193,93,86,236,199,242,186,51,130,174,209,18,159,39,112,103,87,206,9,10,3,44,173,217,19,52,151, 11,178,62,6,166,180,233,215,26,147,25,20,214,20,37,85,44,123,127,7,84,42,203,171,107,208,53,229,226,14,48,104, 51,194,154,38,56,216,226,162,250,159,192,200,202,159,109,161,78,202,38,132,91,19,80,240,19,53,125,135,43,119,144,33, 23,144,254,125,20,24,38,128,137,158,216,214,121,220,75,105,223,151,125,229,91,216,153,22,112,111,104,210,207,164,2,111, 22,237,67,244,35,37,111,83,8,158,203,251,117,197,4,157,234,30,178,32,123,87,13,0,171,228,120,176,125,92,52,162, 126,208,166,69,163,43,246,123,159,34,5,8,92,105,203,71,160,125,29,219,139,232,75,10,176,231,130,76,38,169,22,239, 149,106,5,236,131,227,42,23,74,180,106,232,202,228,195,235,183,35,10,214,128,143,225,247,238,98,11,38,12,24,71,49, 141,162,199,96,42,58,9,233,42,214,95,244,43,105,6,127,78,105,225,8,158,168,233,89,110,229,79,123,190,129,116,97, 89,241,124,202,136,132,160,23,208,203,205,205,125,12,137,68,38,20,133,150,182,135,118,229,246,201,164,91,228,246,240,132, 132,151,154,166,54,70,71,56,209,36,87,134,233,155,236,225,4,252,20,21,19,158,146,128,200,164,161,223,2,134,181,68, 116,143,241,63,164,156,226,14,9,91,46,46,90,182,213,241,33,118,108,56,86,57,104,33,88,16,36,127,18,0,103,36, 243,104,98,139,137,105,4,64,245,129,195,29,219,180,77,215,159,50,152,68,68,85,5,144,218,159,160,117,171,122,91,117, 172,220,114,157,30,234,49,37,61,108,58,129,206,55,18,163,221,172,213,2,218,33,133,148,29,202,103,137,228,24,138,239, 177,156,169,246,243,217,122,20,97,242,134,97,139,180,149,205,117,243,6,135,138,212,247,218,55,28,181,184,221,138,243,140, 185,213,20,98,31,126,238,100,55,162,23,153,61,36,3,117,45,60,188,35,119,96,242,199,193,84,79,80,99,16,65,96, 192,56,40,220,150,208,139,215,125,182,25,156,5,158,239,90,89,135,136,111,233,192,154,252,248,116,201,167,97,19,37,130, 123,220,176,222,76,97,188,167,3,142,43,222,252,165,23,212,218,235,251,21,183,58,76,46,105,18,233,15,219,76,17,27, 236,16,213,214,146,178,195,135,29,4,150,81,204,45,54,72,229,115,107,1,170,213,152,140,189,54,99,223,254,205,213,167, 89,246,92,226,137,194,99,36,200,117,55,194,49,10,60,27,135,117,149,165,107,2,41,3,73,94,75,150,202,240,184,250, 117,38,57,39,153,52,94,253,94,100,114,182,36,81,41,131,90,97,242,228,36,145,134,38,186,193,244,187,135,160,110,231, 66,128,179,220,212,173,1,105,46,97,163,88,69,93,186,204,160,245,75,78,182,121,49,148,169,219,128,163,169,211,172,209, 54,219,147,1,226,236,188,11,139,16,0,31,165,54,212,191,173,111,109,39,157,23,63,35,181,129,212,98,188,94,161,186, 181,251,13,169,121,184,178,62,46,111,102,86,178,93,124,113,196,155,203,91,146,107,224,199,195,15,3,215,53,106,106,171, 16,98,55,176,250,70,185,45,23,214,103,255,205,97,172,41,174,90,147,158,217,37,234,108,86,217,248,165,245,64,92,222, 157,84,253,178,88,48,27,224,154,222,129,228,153,11,146,161,210,113,6,53,141,204,114,82,74,57,221,13,210,212,133,107, 57,231,32,140,99,170,181,70,131,167,20,114,111,190,62,232,195,73,101,214,125,101,246,245,150,30,65,50,194,113,241,238, 254,163,181,18,43,202,53,132,138,204,63,78,119,5,252,156,243,173,59,113,179,228,196,133,25,73,54,56,147,163,92,197, 109,188,239,217,103,39,200,198,27,36,18,117,57,73,52,97,235,170,74,52,41,127,132,202,206,205,147,211,12,150,83,57, 102,242,27,185,9,147,138,102,246,60,253,109,190,145,38,98,235,18,182,57,154,254,127,70,107,215,80,110,232,96,7,32, 49,127,219,57,115,155,210,170,252,42,163,153,61,245,145,111,230,205,192,16,179,66,116,212,122,254,52,24,109,167,188,69, 181,144,222,49,102,129,82,9,229,56,136,166,159,172,203,145,198,238,118,148,236,65,241,81,150,248,63,89,237,166,96,55, 74,222,58,162,152,235,43,130,224,169,206,250,96,253,19,248,242,199,128,84,83,109,214,215,203,1,235,160,60,227,83,111, 213,225,117,45,156,81,80,147,194,125,137,255,114,163,85,52,146,232,94,149,162,131,77,54,38,191,94,123,137,100,90,99, 253,217,115,178,55,31,212,233,93,170,225,111,215,243,164,108,161,232,193,161,145,19,27,217,228,83,167,109,11,187,227,216, 146,232,52,195,154,109,168,89,19,19,170,209,30,19,16,139,242,231,0,231,2,62,147,203,3,101,201,51,193,67,170,3, 56,164,195,28,152,56,160,135,62,65,33,181,99,219,252,82,11,193,195,107,153,205,242,131,248,240,96,83,189,114,136,35, 66,49,69,146,100,255,84,248,91,1,50,191,215,107,7,193,171,197,93,97,58,70,133,233,89,57,50,233,31,14,22,51, 183,195,39,206,253,53,237,163,247,145,243,177,124,67,59,91,132,92,122,105,218,171,123,104,54,166,119,82,159,116,69,162, 161,143,204,190,16,120,174,191,188,224,153,227,137,85,93,55,194,193,152,235,4,198,16,178,22,237,170,124,221,4,3,38, 71,137,66,197,42,212,92,13,20,61,213,80,134,74,86,20,202,173,78,247,177,213,54,165,11,209,57,254,254,4,251,252, 133,109,23,29,49,135,227,78,28,182,98,142,187,108,233,203,96,93,153,34,197,222,165,184,160,214,235,51,141,38,83,126, 234,181,28,129,47,187,49,34,197,252,214,28,183,239,136,38,188,35,146,251,45,80,169,205,97,70,22,222,99,8,217,163, 147,53,143,16,79,28,117,186,5,234,31,74,9,81,113,34,83,47,238,224,173,107,113,169,141,206,25,185,61,51,54,81, 191,211,253,83,9,204,200,117,45,75,21,218,227,88,112,24,15,149,252,129,5,177,157,254,224,207,65,78,180,37,165,46, 179,64,53,158,151,113,247,16,79,85,244,51,14,214,202,151,118,210,242,45,18,182,201,126,251,187,210,144,63,201,234,142, 186,203,215,101,42,146,236,11,206,227,249,186,192,208,77,159,143,102,171,198,173,131,11,38,171,230,212,218,198,195,208,85, 141,24,238,41,179,155,94,136,152,247,23,111,59,13,0,14,193,236,127,116,100,114,53,195,53,226,198,219,85,205,32,76, 239,87,125,115,238,62,159,35,12,228,70,140,44,31,149,232,39,71,86,178,241,81,60,37,95,146,111,43,174,174,209,84, 123,165,233,182,54,81,64,150,58,39,55,68,57,157,152,18,249,138,3,246,45,233,114,106,133,160,82,67,168,181,192,227, 29,34,96,5,126,62,161,27,99,98,255,173,76,147,242,140,155,224,11,191,114,168,87,158,57,165,151,66,180,97,25,49, 156,190,188,150,97,96,107,8,5,111,112,242,126,51,139,168,34,164,193,41,125,203,164,20,89,212,113,31,4,158,68,183, 222,35,211,22,81,240,198,96,160,37,234,42,50,99,107,51,130,53,11,191,56,70,47,79,61,241,35,31,151,54,228,165, 42,55,233,251,155,39,8,120,218,33,74,4,17,13,137,85,224,198,245,12,152,242,40,249,196,124,33,106,197,153,35,140, 158,92,103,203,43,255,154,21,162,69,192,4,227,11,157,65,87,87,126,176,132,117,208,177,197,182,4,139,148,123,203,165, 131,136,239,235,156,5,150,92,162,251,169,150,116,4,177,230,250,223,216,43,195,170,80,44,128,185,123,30,184,128,58,129, 255,168,151,74,255,65,250,143,70,151,190,10,89,186,27,80,157,185,86,40,119,93,22,41,127,41,95,113,1,246,62,152, 254,169,34,192,222,247,16,124,121,16,168,167,243,41,106,244,162,36,219,195,136,132,9,113,112,102,27,142,66,101,222,141, 20,201,109,32,20,227,111,3,171,26,172,157,194,38,180,83,215,140,144,200,224,131,160,83,29,193,155,137,203,37,121,139, 203,226,19,121,52,71,2,248,113,16,93,22,24,211,45,128,26,88,1,66,109,89,89,158,63,119,105,232,45,37,168,169, 73,99,116,201,124,91,64,163,110,90,135,70,163,58,135,54,55,50,56,253,10,46,198,3,176,138,77,76,187,135,143,216, 102,54,145,116,235,107,2,66,104,159,9,115,123,214,175,179,221,24,104,87,192,94,31,25,230,147,64,80,93,239,198,246, 46,227,173,73,139,41,192,37,33,208,6,69,224,35,205,234,13,73,244,178,69,185,35,51,195,253,22,213,34,39,72,92, 47,222,99,201,142,84,109,121,36,239,124,197,160,178,63,160,11,8,196,88,132,216,184,36,210,93,164,81,67,39,193,177, 172,217,141,74,92,229,111,51,163,163,178,41,234,125,193,185,175,108,1,32,131,17,38,232,97,145,94,243,148,149,208,111, 180,246,216,41,76,29,81,244,98,138,43,65,118,30,194,68,109,32,49,24,75,108,173,117,2,1,114,198,245,210,56,204, 46,189,194,190,109,220,54,37,44,103,236,217,76,212,69,3,164,146,234,91,137,241,154,35,219,103,233,245,137,222,149,248, 67,133,121,207,239,58,108,241,166,152,54,19,2,159,12,119,195,102,245,34,156,214,7,36,62,137,222,138,19,148,91,166, 2,130,235,201,2,81,74,235,245,237,169,162,91,233,105,96,83,164,251,69,90,101,188,226,64,60,104,118,92,142,17,81, 196,21,30,135,15,116,40,91,22,57,111,64,45,19,178,52,245,26,151,234,226,203,148,4,222,44,164,182,236,243,224,119, 243,79,235,215,57,218,118,51,44,79,45,21,4,169,38,164,215,192,135,226,44,217,128,15,136,34,208,157,182,130,78,63, 172,251,253,132,237,133,161,81,186,161,242,165,77,94,224,135,164,6,226,65,9,122,253,169,4,175,100,82,107,216,144,99, 37,61,220,228,173,123,195,121,180,28,91,148,45,16,118,122,16,119,88,95,254,2,161,138,197,117,174,108,159,101,179,91, 197,104,33,3,167,109,7,70,118,9,209,210,244,66,192,134,223,67,153,29,77,82,108,170,199,120,60,32,94,165,132,221, 74,169,92,223,37,200,138,102,25,80,63,219,215,243,87,140,8,122,130,213,202,22,94,157,73,202,40,51,186,16,121,197, 55,147,150,130,141,5,181,161,162,31,52,197,69,54,121,234,238,110,37,50,72,14,36,153,189,184,27,189,69,168,100,168, 155,37,71,84,15,2,4,95,195,68,233,182,38,171,12,67,0,188,186,110,200,151,88,245,59,186,101,255,161,155,28,126, 61,223,68,51,151,54,101,106,95,127,132,1,152,92,35,167,200,146,94,75,125,123,10,97,224,237,166,131,18,237,158,98, 212,149,213,13,168,244,61,43,140,166,70,21,136,116,115,218,67,123,89,221,137,112,22,15,240,160,7,232,67,64,94,138, 70,242,205,113,69,50,198,255,220,254,73,58,122,94,25,22,216,93,32,212,170,245,254,193,194,145,209,174,204,29,164,177, 30,44,204,143,76,188,107,76,84,82,84,199,238,130,234,200,249,235,230,175,157,216,165,125,35,54,151,131,218,217,141,41, 51,187,255,191,204,31,6,146,156,25,219,192,70,127,28,163,165,203,35,189,62,195,213,174,53,112,162,37,179,241,12,17, 64,155,190,31,93,207,181,136,93,147,50,199,243,166,140,199,126,33,82,72,234,67,53,244,202,15,13,21,205,81,208,221, 91,180,127,63,248,245,80,232,53,20,212,246,112,48,95,91,127,229,3,245,130,216,182,159,202,37,42,16,190,154,96,97, 40,44,19,47,230,253,243,183,244,200,229,254,175,245,177,77,27,21,11,161,67,88,92,172,5,75,170,185,136,128,31,247, 106,43,0,180,82,242,176,126,86,155,44,96,17,141,9,34,246,71,246,116,201,171,198,83,111,112,36,228,147,185,13,167, 229,233,217,68,250,56,198,243,72,128,23,73,39,91,143,21,54,45,245,119,235,134,64,235,165,107,146,200,205,224,126,155, 13,81,243,144,53,78,153,205,251,238,42,184,83,84,83,11,140,97,194,1,241,43,193,89,31,123,126,172,167,179,5,117, 92,36,100,35,141,229,151,241,79,201,142,104,214,176,121,77,98,26,53,75,75,242,35,166,94,200,173,62,241,206,100,148, 240,172,6,186,172,15,42,130,239,220,174,23,223,104,181,145,112,37,117,198,245,48,68,50,219,32,234,67,60,125,143,208, 154,162,23,89,26,176,152,56,105,160,159,196,181,225,166,75,209,96,101,107,207,6,147,133,248,4,188,39,54,73,38,9, 90,227,171,199,252,255,54,56,173,35,110,90,245,111,214,125,50,1,146,45,195,100,144,153,98,180,88,130,31,144,126,99, 246,121,100,225,156,66,145,111,230,231,93,29,80,61,91,188,150,148,12,101,115,88,200,32,173,174,27,3,59,3,130,6, 93,151,204,160,42,186,110,215,24,226,9,107,49,207,54,186,98,195,141,56,2,191,169,218,109,68,50,64,118,30,14,243, 162,16,38,40,174,110,190,197,231,131,175,221,46,9,122,124,193,165,25,150,244,35,240,26,199,109,156,72,113,176,24,113, 203,197,101,231,183,253,249,154,254,137,87,113,31,45,106,181,81,156,48,0,139,1,105,252,77,156,242,239,140,247,119,183, 140,216,227,253,44,243,134,232,8,243,235,185,90,239,62,2,74,158,150,237,123,189,85,222,209,14,173,47,220,245,101,87, 220,47,157,167,81,76,33,213,180,48,77,169,133,6,59,171,171,252,18,226,192,144,111,179,174,64,153,192,238,86,0,41, 35,236,30,151,118,49,223,201,142,104,7,59,96,114,119,123,197,21,60,123,191,250,44,246,23,163,165,173,196,124,209,20, 66,157,235,104,214,112,215,68,190,62,114,72,42,34,244,211,42,97,3,82,234,224,236,125,171,64,116,185,214,134,61,0, 36,121,19,189,129,10,185,108,182,7,67,208,74,121,230,13,3,185,228,248,4,190,88,50,152,21,11,181,106,179,147,106, 41,124,170,82,131,89,243,151,72,230,153,214,249,40,23,6,91,153,193,141,245,95,87,95,61,107,46,121,188,156,254,44, 202,83,51,82,194,10,198,31,12,68,59,169,203,52,58,54,178,42,35,182,1,229,106,79,145,199,204,13,60,86,4,12, 42,253,108,31,36,77,99,241,252,58,0,215,230,190,44,188,101,76,144,165,246,208,192,229,87,130,34,156,78,77,118,107, 211,97,71,224,38,0,239,84,234,200,237,11,176,110,218,37,174,210,103,164,220,28,247,146,164,188,99,29,48,69,162,111, 121,50,186,53,104,16,12,202,14,115,2,144,37,191,64,45,92,40,81,75,155,226,31,86,212,220,151,107,20,243,217,111, 35,126,37,184,153,252,93,164,132,131,159,98,151,99,248,178,159,103,32,248,16,25,115,69,6,89,6,5,233,0,163,31, 158,54,64,234,75,241,157,75,110,229,247,172,215,224,245,143,158,166,122,35,147,113,127,184,6,43,207,5,16,127,213,68, 91,169,174,20,221,59,59,37,27,98,193,167,170,69,97,107,3,77,238,84,98,107,242,150,125,203,164,230,233,253,30,163, 70,210,31,48,209,221,239,170,242,73,243,15,102,223,97,134,203,240,228,210,137,163,17,33,234,20,55,60,75,54,35,239, 140,194,26,17,25,176,252,235,210,0,225,33,210,115,237,145,180,176,214,136,11,126,39,241,187,20,145,40,142,96,198,139, 10,90,146,148,222,18,116,179,114,141,137,231,234,93,251,33,192,36,55,108,62,152,228,87,36,218,28,186,99,151,51,101, 213,247,232,145,148,215,231,161,142,4,164,169,244,249,149,183,231,129,194,145,86,71,194,50,118,204,2,96,220,24,204,164, 215,157,234,207,164,240,224,216,85,15,57,13,237,140,229,164,76,43,19,129,220,243,111,4,205,202,248,227,23,0,240,8, 252,80,14,121,130,56,202,223,91,227,36,205,180,53,93,161,169,57,20,121,133,221,221,89,200,98,149,129,225,115,51,214, 63,207,184,228,189,115,78,108,9,16,15,234,124,78,173,172,57,65,166,213,25,125,90,8,136,129,119,145,60,110,12,114, 156,53,151,156,244,29,178,7,54,82,78,59,201,86,191,68,189,4,164,95,128,164,94,10,56,233,23,135,149,83,160,24, 222,5,82,167,179,98,25,122,246,96,194,161,236,167,48,171,98,194,238,164,211,7,99,9,91,236,241,142,147,248,26,43, 193,73,137,91,145,166,135,97,183,180,186,251,213,184,85,41,228,131,226,175,201,218,122,58,225,124,226,66,226,204,171,51, 12,63,227,209,132,91,11,128,111,145,139,195,226,193,131,191,190,86,91,181,54,199,25,29,93,89,201,110,60,3,139,42, 227,246,15,86,103,222,166,85,176,101,105,147,56,175,126,134,105,113,144,75,53,190,113,99,174,30,2,203,5,71,37,69, 149,69,110,88,112,73,214,85,229,49,210,23,12,252,145,13,223,205,85,23,229,105,49,115,174,215,156,65,110,77,149,103, 236,177,42,49,108,148,150,35,39,5,211,7,138,122,101,229,251,184,212,236,169,32,135,27,211,137,40,230,114,207,68,51, 131,200,11,5,211,211,246,93,90,203,236,212,242,235,241,230,195,138,232,197,158,218,238,180,100,85,165,192,23,38,125,35, 223,128,255,223,23,246,97,149,168,60,209,209,98,213,138,75,181,191,6,225,111,67,20,87,53,123,209,150,29,224,224,54, 109,147,32,87,106,214,69,68,142,229,144,102,163,112,191,186,93,75,210,146,190,183,164,150,170,160,11,253,91,214,90,120, 11,138,58,173,16,97,245,246,162,19,137,205,183,245,18,44,17,164,140,159,228,85,153,188,89,115,72,170,39,143,245,150, 187,80,236,210,223,98,107,246,170,157,59,126,143,89,95,168,240,124,116,201,86,86,88,7,159,20,189,214,23,137,232,70, 205,251,130,255,175,77,170,35,120,217,170,191,11,145,66,180,100,203,241,57,9,109,141,93,3,184,46,71,15,18,167,165, 198,171,95,117,123,198,33,234,54,227,37,88,87,82,249,14,180,62,85,90,236,224,57,182,241,211,223,77,46,207,66,132, 59,139,141,211,172,29,48,253,102,13,113,55,202,34,148,35,183,36,181,130,222,124,105,210,99,18,74,102,188,226,180,61, 37,182,49,98,215,114,116,247,251,116,170,239,200,72,90,170,86,106,61,232,7,150,206,78,54,49,247,9,134,64,173,74, 106,140,31,99,167,112,131,158,190,46,102,84,19,234,237,15,81,250,239,55,247,242,149,147,199,135,70,148,5,12,186,235, 15,69,77,168,215,134,200,39,250,187,142,169,56,45,66,121,135,112,206,233,250,152,41,67,218,135,234,105,107,113,0,239, 11,17,110,174,70,11,13,186,197,216,27,49,25,83,76,249,110,91,76,31,123,75,208,166,42,144,194,221,140,71,120,149, 152,57,143,80,150,64,11,11,8,32,74,81,2,252,58,129,89,162,24,233,76,74,33,24,235,70,22,65,116,183,148,105, 37,213,58,169,29,202,60,242,151,247,35,245,141,42,146,237,236,202,200,134,251,215,211,54,81,77,172,104,163,78,92,210, 104,209,84,163,10,170,188,18,236,219,50,10,120,215,21,225,176,118,137,65,228,243,238,155,217,210,204,30,119,237,166,10, 179,141,225,218,53,153,43,197,43,122,223,154,38,81,69,46,101,173,194,94,179,99,160,7,134,18,29,220,2,57,158,3, 106,10,159,94,9,230,53,130,229,22,250,84,100,36,43,130,253,140,11,119,208,2,57,133,17,202,243,64,125,30,92,48, 25,118,113,35,33,85,117,90,166,230,218,133,81,241,124,147,106,208,148,83,55,97,229,167,204,32,119,108,110,165,149,55, 123,215,13,196,50,22,223,37,64,240,131,193,125,219,108,0,245,150,241,160,184,209,2,5,65,18,105,239,109,253,39,144, 201,106,247,221,118,33,222,86,246,88,203,177,240,19,76,95,121,1,169,135,89,60,138,228,211,106,4,73,177,149,53,205, 43,9,171,53,103,203,199,125,7,27,193,50,198,52,2,20,214,105,177,79,169,174,166,143,100,172,18,141,199,137,159,0, 99,105,223,154,143,156,214,128,250,49,45,193,161,172,76,92,110,177,133,154,17,52,103,193,73,8,172,116,84,182,186,54, 169,246,221,68,186,85,123,54,100,111,247,67,65,168,109,190,77,86,109,208,245,114,83,192,239,53,215,111,220,108,245,54, 7,14,96,127,43,158,39,146,51,41,235,70,122,38,39,112,71,68,83,205,250,161,147,227,151,211,119,27,108,78,192,6, 212,21,199,249,112,96,113,227,129,148,132,108,130,236,1,78,235,246,41,242,0,40,94,86,19,200,36,204,184,94,220,154, 11,19,185,186,225,71,176,175,11,1,171,131,88,238,81,237,49,157,219,77,155,0,159,87,60,116,121,196,178,87,110,67, 65,130,10,9,136,207,62,119,137,184,106,238,121,207,58,94,119,179,168,128,82,53,134,31,199,151,187,80,104,96,251,126, 157,207,0,244,10,74,238,15,153,254,64,252,196,124,167,246,49,220,78,226,141,53,252,48,166,168,99,33,114,36,232,243, 248,235,25,96,9,153,180,107,161,37,63,170,251,194,219,141,179,224,208,231,47,193,27,143,28,52,200,122,12,120,113,12, 123,90,193,181,134,87,95,105,171,164,115,204,214,175,111,58,200,117,202,227,69,183,248,186,165,160,134,216,225,167,131,23, 33,87,61,103,24,55,245,246,200,44,37,203,116,199,188,233,27,187,12,96,172,19,230,157,170,235,189,54,39,5,45,3, 154,10,40,0,2,4,92,126,54,49,246,19,249,194,132,103,208,17,158,131,18,8,38,207,96,188,97,186,76,32,175,115, 237,55,57,241,111,158,75,87,241,32,98,239,226,4,65,243,52,233,167,34,216,179,4,12,118,181,247,166,122,241,120,138, 83,115,189,243,208,82,28,88,142,75,31,235,31,203,21,122,214,3,67,89,45,76,245,160,190,103,78,23,76,33,24,27, 28,213,100,56,162,130,153,196,184,143,221,132,2,116,53,254,252,132,251,53,58,169,21,181,220,222,89,72,201,206,192,185, 240,217,180,234,22,188,26,41,37,180,171,124,191,66,185,147,127,45,20,39,75,211,90,242,240,185,91,72,63,160,80,0, 142,82,115,152,80,224,148,22,237,185,160,61,236,217,151,226,18,154,22,219,56,163,10,48,183,65,224,76,131,104,163,76, 130,90,221,92,215,220,97,183,138,78,210,238,164,14,166,3,231,72,83,14,43,74,173,157,67,117,98,152,152,182,59,60, 31,11,79,159,47,61,12,28,24,207,235,193,74,73,246,234,66,143,186,33,117,171,9,28,182,209,104,176,5,51,13,227, 117,199,17,125,35,14,125,10,71,103,73,15,111,93,227,240,159,38,36,97,2,25,5,121,36,249,196,162,94,122,40,175, 55,55,245,237,47,132,31,38,119,32,197,152,77,186,51,209,114,118,69,56,143,120,2,238,247,59,6,185,30,49,234,53, 226,214,211,143,49,107,20,79,212,52,237,102,198,113,173,59,212,238,135,236,253,195,27,118,190,173,18,144,124,83,42,187, 202,150,249,202,186,203,24,75,124,183,19,165,161,83,52,108,124,79,177,163,38,96,85,34,163,33,104,1,36,253,208,88, 13,47,79,136,26,76,105,101,37,36,185,250,112,180,92,149,107,10,215,59,43,148,60,239,40,221,236,148,195,13,241,242, 120,91,24,146,170,162,176,68,27,53,82,129,166,250,162,135,243,225,203,122,221,7,4,192,128,196,236,78,52,182,120,51, 165,144,182,240,110,163,223,228,21,254,35,29,254,196,209,41,4,68,62,128,55,235,159,13,189,135,72,39,64,108,132,137, 212,110,120,223,216,112,250,239,20,11,80,157,74,220,126,73,205,50,155,108,63,50,231,183,97,145,195,38,49,15,19,251, 179,219,179,116,125,94,219,121,36,22,216,230,116,57,159,155,29,137,251,194,42,207,191,227,192,178,94,40,3,184,190,245, 31,125,251,113,192,127,63,192,139,141,237,120,172,238,35,211,53,237,191,220,20,65,108,35,77,121,210,230,30,194,103,210, 85,105,223,254,247,232,134,80,53,82,12,113,187,2,112,42,66,231,207,88,18,166,150,165,111,135,99,152,199,219,21,4, 232,6,193,24,218,222,116,66,127,183,0,46,55,187,137,198,233,193,187,158,250,130,143,191,46,181,229,183,224,160,27,211, 24,136,25,131,223,231,63,170,180,103,169,250,17,23,233,202,202,184,139,114,175,130,199,182,18,69,44,54,44,205,107,212, 19,193,199,23,68,32,22,228,72,49,113,177,242,144,132,33,54,241,100,160,49,174,145,129,121,34,42,118,204,173,25,162, 237,5,206,242,50,98,72,30,223,163,7,134,157,0,241,106,149,129,167,202,120,130,174,26,41,30,12,104,153,121,111,64, 179,93,119,81,49,25,66,125,35,202,196,110,250,30,195,15,157,88,209,91,56,159,242,100,46,102,87,144,173,95,61,105, 235,61,21,97,36,202,0,171,195,64,99,94,148,165,22,136,41,228,179,224,62,39,69,5,206,192,134,204,194,240,69,50, 201,93,219,249,224,40,22,9,23,52,34,183,76,89,57,71,38,158,129,111,106,225,142,195,151,156,130,27,198,26,18,123, 118,232,21,210,145,198,216,98,67,31,216,66,79,158,153,91,129,20,168,49,244,187,207,177,6,65,137,16,34,138,245,187, 136,203,52,233,189,160,10,100,98,70,196,172,229,39,40,20,180,98,221,199,195,23,219,226,140,18,21,212,29,224,199,29, 143,64,253,26,77,59,62,128,167,86,86,7,192,68,63,86,122,16,31,111,75,87,218,148,12,237,115,164,47,85,209,28, 84,93,73,243,96,139,132,8,36,64,237,57,188,164,174,23,64,236,69,80,58,24,71,164,115,19,231,248,42,218,129,193, 177,38,13,39,154,225,253,61,219,31,13,15,180,85,99,67,140,240,169,216,70,48,75,29,197,220,28,156,0,81,155,135, 28,182,9,155,73,243,156,106,101,8,251,120,1,140,115,219,213,120,144,110,207,105,80,218,112,205,13,170,232,94,107,87, 48,154,8,87,131,162,11,247,170,241,166,167,164,159,105,108,94,196,236,203,188,35,83,57,226,153,50,20,197,30,71,186, 175,196,242,219,67,210,242,8,199,128,68,86,40,232,238,124,250,112,1,53,225,31,78,138,125,78,156,145,205,252,130,63, 213,8,195,67,65,77,81,187,141,32,86,80,29,109,141,49,228,244,120,80,206,165,38,209,63,236,74,36,30,152,184,160, 185,12,236,229,225,224,235,67,165,119,146,102,16,180,30,85,92,183,125,147,9,227,165,126,22,29,160,177,124,168,245,101, 6,165,247,222,38,245,47,58,33,103,252,111,201,140,216,76,236,192,101,21,185,196,250,229,133,153,115,189,49,61,55,47, 65,122,132,208,156,40,58,137,45,119,203,222,75,157,191,54,138,175,106,97,183,131,43,17,71,197,77,227,117,200,151,56, 190,48,142,245,171,63,25,81,243,120,79,219,88,150,169,176,192,146,151,215,187,144,0,221,16,180,191,81,202,40,49,30, 1,189,9,87,26,200,27,56,158,154,92,32,181,93,189,10,54,109,132,17,6,49,167,214,25,46,246,0,212,223,149,69, 185,41,163,167,66,133,162,75,204,201,162,249,238,35,211,82,215,163,200,153,85,219,131,79,135,178,94,151,253,237,68,184, 38,229,223,0,142,96,202,92,14,0,228,215,235,61,210,188,236,36,121,153,37,91,29,170,19,215,140,60,185,223,18,205, 2,206,167,191,216,186,246,255,74,149,195,90,242,166,222,102,163,222,237,224,148,187,27,56,138,111,155,18,57,178,229,192, 149,85,241,90,44,191,24,122,242,14,251,127,102,110,207,58,30,70,55,198,62,140,6,5,37,167,209,182,60,24,76,135, 53,154,105,168,180,7,32,8,115,39,230,53,49,219,240,240,154,46,206,122,47,27,57,25,107,255,51,171,229,16,9,133, 12,7,89,8,23,224,162,205,148,243,179,54,221,32,132,12,16,202,113,250,18,88,118,72,219,70,94,122,121,148,118,93, 76,75,125,34,58,8,101,155,5,155,73,49,214,237,43,78,74,159,93,63,26,225,50,225,119,136,135,156,158,9,178,125, 187,48,221,156,77,78,63,10,216,37,27,66,53,254,25,58,93,185,145,59,170,58,246,37,250,68,116,96,124,217,243,219, 79,175,104,16,90,96,6,167,169,174,51,82,142,11,212,175,220,80,205,71,108,175,49,134,7,49,60,176,32,71,74,192, 87,179,25,30,139,34,229,199,78,228,115,228,106,177,116,45,239,173,121,51,33,180,231,93,42,145,226,162,186,115,0,63, 254,56,110,16,30,126,245,84,99,233,66,125,90,126,73,239,220,148,210,93,154,30,228,169,161,45,34,62,163,162,124,255, 139,21,76,145,247,83,121,218,62,7,121,189,102,219,116,95,225,117,248,6,100,27,134,35,129,78,117,217,35,121,217,194, 207,130,75,49,135,128,170,48,143,90,152,39,204,30,123,94,170,145,9,219,144,141,187,166,77,20,137,44,22,249,197,148, 141,98,206,34,48,6,44,172,47,68,55,18,57,80,15,243,189,98,201,192,36,89,96,61,167,8,108,173,191,3,237,180, 188,203,78,132,84,60,203,222,252,36,167,215,77,9,166,246,253,192,241,168,115,198,214,117,247,94,54,92,9,228,56,92, 218,22,212,141,117,148,72,244,103,34,234,249,242,216,101,197,172,212,186,192,77,174,200,223,87,74,69,123,184,175,250,250, 232,98,226,96,201,207,167,53,217,212,16,235,111,107,247,137,12,151,213,101,23,7,231,114,214,158,135,47,221,76,199,130, 43,196,152,78,199,59,25,73,33,15,32,165,179,3,154,80,36,46,2,254,243,233,96,189,10,246,241,131,97,66,105,64, 220,200,134,143,139,97,173,110,224,190,246,127,35,52,115,222,225,58,186,21,150,3,13,137,131,172,126,123,181,223,20,129, 15,71,178,27,98,115,56,79,140,148,247,148,2,240,195,144,62,4,169,207,200,233,230,104,166,174,188,153,171,214,78,248, 218,110,26,161,138,101,146,21,65,40,16,192,53,79,148,191,235,214,83,68,67,63,253,255,51,12,80,229,209,58,59,92, 142,219,223,200,44,216,243,244,192,159,101,121,248,176,80,79,142,99,168,29,49,132,192,153,179,229,91,191,34,227,16,234, 61,32,98,122,225,224,45,86,179,188,238,207,216,134,98,22,100,60,218,228,207,234,43,47,117,182,97,76,154,138,137,164, 246,1,144,246,74,191,227,250,177,220,168,235,95,171,163,154,20,62,150,153,242,82,196,166,12,49,237,235,51,48,195,185, 90,117,252,12,227,195,0,122,27,5,96,198,51,200,130,252,254,199,214,99,220,74,88,189,56,10,250,41,16,20,96,48, 57,38,112,91,23,68,245,249,180,230,196,198,217,114,52,11,138,45,231,139,29,13,210,34,5,23,205,248,141,104,83,1, 127,16,252,198,253,63,11,178,43,38,174,189,83,120,156,253,24,88,162,196,230,129,94,77,174,109,92,41,225,80,124,235, 75,253,221,10,35,208,69,135,38,70,92,245,103,113,92,152,63,23,136,42,71,7,129,250,73,25,99,174,33,198,62,177, 234,200,246,168,164,134,26,60,145,27,182,135,177,10,103,165,76,248,230,158,122,219,70,194,148,152,167,141,220,184,91,174, 23,126,65,75,46,20,167,141,7,65,67,63,153,24,231,68,91,194,188,43,201,119,186,155,195,138,186,36,92,210,13,183, 112,154,136,83,191,252,45,207,201,125,168,130,117,195,152,252,48,234,226,176,223,66,184,234,129,189,93,168,215,73,11,9, 145,134,154,19,115,12,146,31,129,217,94,230,207,212,73,140,81,207,209,224,77,143,59,41,187,163,85,140,46,71,229,186, 60,127,179,89,213,158,192,254,185,79,111,38,218,167,149,103,124,86,208,169,53,193,2,217,70,138,243,145,70,225,127,151, 219,43,49,99,36,238,84,32,176,159,111,75,34,113,86,11,73,142,245,215,180,200,240,88,219,28,193,80,109,19,50,152, 98,46,180,206,178,232,143,248,138,162,158,255,128,135,235,179,8,81,63,245,35,114,127,111,131,146,14,254,90,245,91,111, 11,179,218,204,57,103,36,186,62,170,103,234,182,92,228,137,176,213,38,64,55,41,61,221,231,13,57,28,246,107,147,89, 116,190,18,100,169,4,154,41,123,6,185,61,172,25,251,156,255,215,193,162,173,191,49,231,205,21,114,14,139,174,100,149, 235,12,19,226,58,79,150,240,118,132,139,96,152,175,126,179,162,65,107,162,86,78,92,192,133,62,218,237,96,24,133,94, 93,229,134,244,137,206,232,121,115,188,162,40,110,137,123,0,253,87,208,196,252,185,104,97,171,3,73,117,251,156,15,55, 118,203,169,159,207,178,94,183,134,152,75,116,150,53,64,212,72,99,31,3,91,119,122,123,5,36,186,181,151,184,206,35, 229,255,182,189,211,146,69,175,235,62,126,81,220,98,66,150,248,80,230,104,134,155,168,41,93,248,204,68,64,209,14,218, 190,1,190,216,169,136,40,105,129,153,67,0,164,25,204,69,150,131,244,79,161,255,175,182,8,20,225,4,198,162,73,227, 45,203,143,38,185,238,141,192,240,247,76,81,6,121,191,104,219,202,63,240,61,20,77,119,61,20,151,204,196,42,51,23, 56,228,250,142,47,164,111,77,82,39,149,219,22,127,99,168,134,135,107,215,229,66,35,51,162,113,65,135,163,82,212,222, 126,129,212,28,186,73,116,159,148,213,252,136,160,34,129,254,96,85,202,81,147,111,240,138,93,124,250,87,253,183,124,135, 123,97,88,160,124,141,25,206,162,104,124,56,187,168,234,120,8,157,166,77,19,112,2,31,100,125,150,201,46,205,51,221, 194,42,175,153,141,90,146,175,10,127,241,125,33,44,253,164,129,243,79,253,62,102,60,226,184,45,21,229,253,130,159,211, 154,116,220,42,43,111,168,88,166,31,165,96,62,175,87,205,80,67,96,157,248,174,228,36,44,27,22,163,153,126,161,173, 147,115,174,154,31,118,153,238,190,181,111,194,189,92,9,120,224,143,72,206,175,178,242,170,205,59,62,210,76,48,25,102, 103,53,163,180,252,70,36,98,172,123,208,97,20,176,233,251,190,144,129,49,162,29,113,201,12,224,81,165,110,100,200,151, 76,97,194,57,23,177,214,153,186,201,209,14,219,92,75,117,107,24,82,139,178,106,251,42,112,61,94,63,134,120,197,236, 127,131,149,78,21,112,45,160,158,164,113,124,178,218,196,238,170,194,128,107,252,184,216,123,138,44,13,95,191,33,127,238, 198,123,166,96,151,29,66,97,71,163,150,27,128,73,135,68,122,26,21,134,57,32,59,28,93,63,12,100,58,81,221,95, 141,202,198,133,108,241,180,231,209,134,187,57,8,119,185,40,194,204,234,7,195,124,184,220,31,70,125,112,234,176,68,119, 177,103,136,204,99,99,31,189,203,0,192,124,166,146,24,61,104,72,9,252,195,29,210,131,45,41,179,102,44,22,196,117, 131,3,50,5,31,103,144,102,181,202,152,8,0,139,94,96,168,197,14,95,190,15,44,29,130,143,84,24,157,181,135,84, 126,100,48,5,177,189,181,134,228,184,221,236,54,33,63,69,215,116,177,14,89,9,69,13,74,147,229,152,184,40,10,138, 185,183,54,169,22,156,82,15,50,27,87,88,55,37,137,129,3,38,75,43,105,191,44,102,231,26,189,114,57,103,179,165, 206,74,68,149,44,184,229,48,225,104,142,94,79,201,231,233,170,178,75,199,27,101,111,219,89,238,137,168,93,57,75,108, 122,72,149,43,84,54,131,53,140,33,191,156,11,237,64,18,226,51,73,66,145,83,144,171,63,190,121,110,97,251,77,195, 4,100,0,174,36,84,126,205,6,182,110,208,168,115,251,91,89,225,223,212,89,246,156,212,97,144,184,196,229,227,106,111, 60,19,123,158,254,123,201,182,67,203,176,79,20,48,179,47,211,91,226,49,110,194,116,31,76,24,76,56,98,95,132,146, 123,245,95,138,68,49,123,25,2,178,246,115,168,205,196,2,29,197,115,125,222,57,94,218,246,135,156,114,106,66,23,48, 139,211,174,83,170,21,34,67,52,94,183,92,25,156,67,211,255,246,144,34,12,118,69,182,47,78,5,89,110,90,57,82, 6,95,21,82,50,253,249,14,218,201,72,236,131,246,240,72,235,86,72,174,236,231,180,126,113,177,43,239,163,242,54,69, 161,40,167,224,192,238,27,230,4,140,236,106,255,192,5,220,199,8,29,31,113,82,236,27,232,32,146,168,133,91,147,22, 54,105,171,88,159,121,15,8,169,45,47,1,12,120,253,212,192,143,20,174,235,228,194,198,206,200,80,137,115,94,223,249, 213,45,165,254,222,157,90,171,57,0,163,135,185,28,8,72,118,231,135,212,232,137,127,174,43,153,96,247,66,156,8,54, 208,69,67,189,127,83,163,39,58,17,94,243,45,108,69,11,1,154,113,220,207,93,100,106,230,207,38,148,179,226,110,90, 6,146,103,189,197,156,138,115,204,150,57,174,56,251,24,164,102,40,5,56,19,222,89,195,69,16,127,58,198,235,129,34, 255,111,128,146,77,127,83,33,97,105,97,253,167,189,210,80,37,153,127,56,101,161,139,124,191,69,191,201,206,178,248,55, 246,96,49,198,99,126,40,113,123,28,87,253,40,230,131,146,179,114,223,226,54,81,54,170,155,166,244,23,110,23,78,147, 32,209,79,77,236,255,88,98,55,234,25,2,60,84,139,91,208,20,65,113,188,135,252,148,56,159,122,26,125,223,241,161, 229,34,14,70,135,192,23,200,73,48,59,197,10,147,73,121,78,234,65,59,230,186,100,162,228,231,194,204,84,132,27,143, 89,181,214,189,195,69,115,207,4,92,63,95,219,198,14,230,140,249,208,181,242,237,109,179,81,38,190,146,11,27,67,143, 80,142,31,151,4,243,91,6,154,150,140,7,185,48,227,95,159,185,202,195,197,78,218,21,235,102,38,160,112,71,158,180, 118,71,225,52,27,174,220,134,61,58,126,92,215,147,132,219,214,20,243,61,67,181,63,173,42,65,23,86,195,136,73,13, 245,198,117,32,63,185,18,210,41,79,151,126,166,64,239,160,175,59,53,35,171,132,43,162,194,8,166,110,86,139,192,73, 191,144,74,106,90,254,214,98,133,97,148,239,40,140,22,71,29,57,37,61,142,65,231,189,140,58,3,187,126,120,104,210, 214,8,94,48,113,180,144,189,76,35,50,73,163,185,35,92,238,205,113,187,194,240,35,218,57,157,3,59,45,228,116,34, 46,235,1,14,160,188,203,229,67,206,99,204,32,74,49,156,106,188,182,209,77,68,193,179,192,58,209,174,148,190,96,125, 141,51,142,97,234,239,86,42,17,0,251,17,57,138,82,90,110,230,91,115,55,100,251,16,65,17,34,136,59,230,161,144, 184,35,203,13,150,9,41,242,158,180,63,237,216,245,202,188,228,172,203,128,66,205,195,29,240,172,101,125,250,219,249,214, 105,227,150,248,254,157,130,53,203,229,125,171,81,199,142,177,158,32,151,190,205,134,70,133,176,125,52,78,40,247,185,145, 141,238,59,204,63,130,70,204,193,117,187,173,151,46,244,223,139,148,12,144,152,152,4,113,193,230,247,223,4,240,167,58, 94,253,153,83,237,233,159,50,227,200,97,82,93,197,99,23,156,139,136,42,197,39,48,13,101,206,182,119,111,247,38,129, 47,249,255,92,84,246,34,19,176,28,59,159,230,195,25,170,71,103,1,205,145,234,43,206,202,34,224,187,31,219,202,36, 69,163,143,177,9,113,40,96,237,125,27,229,181,154,25,32,80,115,154,242,5,17,184,213,117,106,215,126,162,18,25,101, 155,128,162,217,114,41,238,136,92,50,214,75,206,208,57,52,158,34,90,73,228,84,196,226,173,4,121,74,22,77,23,168, 52,78,211,60,149,153,85,165,52,46,106,214,121,8,53,239,67,58,153,78,230,204,134,98,170,12,39,156,85,1,207,213, 47,190,146,59,229,97,227,218,9,26,138,100,150,149,202,45,157,242,112,116,118,199,222,53,105,108,251,188,49,67,252,111, 215,208,98,23,87,176,114,69,155,253,170,142,182,194,191,140,93,189,46,27,120,170,60,76,64,73,37,52,246,2,255,219, 116,194,253,253,214,55,50,46,95,128,186,59,130,52,210,189,6,100,129,25,78,105,136,66,181,247,29,109,186,16,149,245, 188,113,100,118,73,37,167,155,200,79,205,13,97,168,97,56,170,160,220,150,172,174,160,238,0,127,185,249,166,241,176,69, 136,5,155,70,40,5,203,167,27,5,54,142,84,230,219,171,233,121,27,52,121,137,102,241,25,21,141,21,4,137,54,155, 125,82,202,114,192,126,1,41,159,56,142,168,116,15,204,30,39,122,38,187,156,101,165,18,116,80,254,254,226,43,199,144, 73,100,76,48,145,148,217,37,138,242,60,136,176,55,114,200,57,15,94,147,79,198,162,48,152,96,222,68,182,46,150,189, 37,220,137,184,159,172,212,98,173,232,18,108,171,168,6,24,178,151,18,220,123,47,95,181,66,78,150,187,195,244,125,111, 210,59,136,56,131,194,173,79,172,107,240,77,165,12,105,34,185,237,90,201,54,8,59,200,98,59,226,81,225,108,87,125, 154,86,0,202,28,136,157,59,184,170,30,239,245,24,50,212,62,59,174,96,187,46,250,156,242,249,98,136,137,100,18,176, 63,0,188,145,247,105,128,26,70,64,53,233,178,25,99,83,73,186,113,226,93,243,190,60,200,132,233,134,170,101,8,188, 38,248,226,14,221,106,52,100,251,69,153,97,252,86,85,0,159,239,26,145,199,3,19,78,152,86,66,252,52,245,121,147, 75,212,58,199,195,172,101,111,197,242,183,39,15,156,130,53,119,179,123,127,29,20,241,94,245,1,175,247,22,205,57,156, 139,220,147,107,0,70,113,34,162,121,65,78,26,132,133,1,56,174,81,199,238,82,169,86,232,149,52,13,191,129,103,140, 200,98,77,141,40,193,127,224,221,179,156,131,229,15,217,52,10,16,152,219,84,105,106,2,33,28,175,126,45,102,178,21, 163,167,158,37,203,249,85,67,27,107,38,86,76,243,244,217,158,14,155,145,90,2,255,133,51,81,188,122,126,217,34,72, 226,168,9,54,105,162,183,56,133,48,178,196,44,173,134,233,240,100,34,66,174,61,175,119,160,80,155,112,245,207,62,169, 33,37,221,102,137,187,225,78,11,198,53,170,225,173,61,11,58,218,154,40,168,236,168,76,69,24,200,58,254,119,175,162, 243,175,54,159,204,234,18,181,62,193,21,28,178,202,31,213,156,237,156,42,13,198,182,210,185,177,143,66,121,207,29,179, 198,131,44,41,248,228,232,145,239,14,236,0,109,121,5,50,137,45,248,40,173,225,147,65,241,70,10,50,171,225,176,11, 74,99,51,109,127,134,230,219,151,236,80,167,132,239,239,143,73,67,102,110,153,82,8,253,248,35,8,5,60,189,219,212, 53,158,58,218,183,89,155,56,84,137,147,217,119,58,251,137,226,128,157,109,43,225,171,29,103,8,89,15,55,214,240,94, 83,231,255,71,93,71,81,95,42,50,47,141,89,163,175,40,185,248,208,246,82,166,166,221,243,157,184,160,92,34,88,75, 73,150,100,50,22,216,144,93,68,124,244,234,216,57,252,239,67,11,34,1,122,102,108,149,106,53,141,80,42,159,22,108, 246,179,18,198,43,194,33,221,242,167,251,222,98,75,48,218,0,41,112,62,111,115,3,44,8,222,161,18,123,154,39,232, 74,236,242,43,217,225,47,53,61,179,153,32,103,171,59,27,14,72,173,187,66,97,42,242,59,82,254,24,12,11,78,172, 210,137,254,233,159,55,80,213,66,253,117,146,170,98,196,200,20,235,140,244,157,162,93,73,185,185,201,250,17,32,244,246, 158,245,56,112,206,104,91,83,33,206,44,218,254,133,133,199,225,215,232,47,250,199,217,57,233,36,141,196,67,37,191,9, 75,243,213,250,171,25,10,118,232,184,224,84,23,7,12,209,191,220,171,147,62,66,131,24,239,222,33,79,227,54,233,212, 199,193,90,10,251,249,8,245,114,46,18,245,223,196,135,128,124,150,187,189,131,58,203,128,20,112,166,228,190,51,253,3, 183,50,231,137,116,12,155,252,240,165,110,42,186,203,197,80,65,184,36,205,181,126,223,143,214,178,142,134,223,22,75,20, 136,39,160,120,159,5,115,242,28,64,78,216,184,8,126,71,185,38,117,120,122,177,147,103,115,35,166,165,1,127,140,177, 221,107,208,69,87,210,67,60,247,214,6,88,66,31,170,85,78,7,168,236,206,139,203,57,30,253,135,102,106,221,80,5, 243,185,193,142,250,9,217,124,193,28,152,49,222,58,11,134,154,21,188,111,253,113,137,233,185,12,35,251,225,84,177,91, 157,243,130,20,174,8,16,153,225,114,129,178,19,187,35,245,11,155,105,190,63,231,61,209,11,36,144,37,11,180,93,205, 140,194,145,168,188,80,176,100,99,24,153,206,86,81,207,171,9,121,35,170,177,233,48,201,254,251,30,123,138,62,115,56, 56,85,243,183,155,157,181,92,206,219,201,54,88,140,255,120,30,185,234,123,254,247,50,99,138,136,32,174,181,175,130,89, 149,254,106,93,247,98,4,155,240,237,41,25,109,177,57,93,79,57,238,225,242,106,8,128,207,98,181,181,233,150,108,34, 91,61,94,33,195,96,1,135,32,5,192,235,119,240,73,218,27,171,161,98,132,154,14,125,57,96,72,143,158,162,140,140, 126,180,37,86,92,144,155,184,75,34,75,12,172,160,255,135,68,119,73,71,179,160,104,147,11,252,13,83,250,62,243,20, 230,14,217,9,12,174,239,140,186,116,66,27,189,25,215,30,231,235,96,72,160,47,223,55,21,205,221,202,53,180,160,134, 148,13,106,51,196,142,88,246,241,24,211,255,200,253,32,116,83,41,81,202,162,9,46,162,24,57,254,11,20,138,133,118, 51,88,178,115,55,20,34,17,167,204,40,11,157,33,90,43,181,160,122,70,52,93,207,110,24,219,215,85,6,224,120,204, 127,124,80,183,155,220,153,194,61,165,150,16,224,167,57,194,241,111,77,188,93,241,111,145,65,65,3,60,208,162,234,125, 252,208,33,154,139,188,0,83,228,190,190,51,139,255,62,3,17,213,120,62,84,94,178,172,101,200,205,90,70,107,151,239, 188,126,210,61,234,21,97,34,74,117,37,100,224,232,93,151,167,38,199,155,2,204,44,24,158,3,63,6,177,101,33,63, 160,27,248,204,156,212,85,95,79,196,140,228,211,62,207,249,13,225,136,88,89,150,48,232,101,208,231,204,198,96,51,207, 249,110,25,190,134,48,59,51,201,127,220,112,103,184,188,171,150,190,223,12,188,58,57,72,144,0,199,1,147,27,186,221, 96,159,44,48,84,220,40,22,97,158,62,31,248,113,143,81,104,104,63,71,2,20,25,130,194,208,58,43,95,213,15,181, 181,246,220,248,66,215,216,90,136,195,119,188,152,194,202,133,225,149,236,204,14,28,0,96,228,142,131,18,214,62,113,216, 35,220,222,82,185,54,167,243,152,204,242,41,168,57,236,195,227,76,32,184,108,220,79,92,177,223,77,183,225,14,149,141, 63,139,104,26,72,191,80,117,51,79,81,56,233,69,37,215,62,117,169,97,249,76,33,89,157,130,20,178,191,25,27,247, 209,66,214,133,99,37,223,174,133,51,0,79,34,54,3,43,84,241,164,51,127,120,177,105,34,2,102,134,206,16,14,31, 101,93,48,199,34,211,204,241,248,250,59,130,38,168,77,181,149,253,125,151,51,196,39,3,109,187,238,229,122,122,138,91, 76,141,219,150,65,213,54,63,56,116,223,199,200,48,204,175,99,98,186,199,69,95,229,43,101,28,186,36,212,244,60,142, 60,120,79,187,238,34,181,64,196,217,158,198,2,30,83,159,30,237,175,159,178,200,71,29,88,221,0,64,23,217,105,252, 141,97,123,131,91,129,138,98,215,58,139,247,208,76,164,76,3,239,39,87,157,184,147,36,166,165,55,191,168,79,84,221, 217,66,203,198,64,92,101,0,191,47,150,109,134,166,31,197,205,140,179,11,76,25,116,142,55,55,37,240,31,110,23,118, 127,32,122,173,149,147,192,102,2,12,235,255,130,81,118,80,208,30,124,187,222,226,172,136,229,67,211,247,68,105,218,111, 14,248,84,113,39,66,13,195,35,64,229,28,162,4,220,185,55,66,208,53,22,153,74,156,42,146,215,93,199,207,47,192, 172,194,172,68,167,218,255,184,182,92,143,246,71,52,85,154,192,125,172,67,236,153,32,72,82,255,138,176,45,96,95,31, 191,28,186,54,155,108,13,101,157,42,185,237,164,97,26,247,106,205,206,135,123,78,134,255,210,213,190,159,166,76,177,81, 116,149,194,157,13,73,32,174,211,187,193,180,80,174,19,142,174,137,239,219,229,146,37,45,123,226,243,211,72,134,225,80, 245,177,46,196,85,252,213,251,172,92,52,53,204,254,1,43,23,219,62,58,178,238,205,193,53,253,170,136,250,73,139,46, 138,187,33,226,13,80,152,143,38,237,27,48,164,131,228,25,74,179,55,57,183,204,108,137,236,27,144,150,57,179,203,190, 159,62,219,7,31,191,17,63,241,117,188,231,171,56,132,11,90,9,190,145,85,64,16,74,130,207,148,218,37,135,147,216, 20,72,62,47,150,101,24,220,192,41,202,170,31,38,209,137,109,198,88,60,174,179,84,152,199,225,13,67,77,116,81,125, 99,25,58,199,175,50,142,252,209,245,82,2,207,73,100,231,92,163,187,220,5,234,30,101,28,125,98,148,194,185,92,174, 197,186,59,54,201,146,59,237,81,188,150,52,64,179,66,147,98,207,22,9,66,172,15,226,227,212,218,122,172,34,75,242, 198,61,202,1,178,66,219,19,151,85,95,109,37,36,134,40,45,45,178,33,113,90,47,13,34,84,242,252,116,157,59,213, 238,76,134,53,236,233,34,38,153,12,186,2,224,237,102,140,199,245,48,87,154,29,74,55,86,34,157,39,201,206,55,71, 193,162,108,123,33,242,78,47,42,161,238,102,51,181,188,48,89,38,231,83,206,187,139,196,144,17,229,127,249,46,236,22, 81,110,231,84,192,69,175,253,6,255,69,105,219,183,68,166,110,128,254,88,158,131,39,149,147,190,231,4,243,159,248,141, 120,119,232,237,219,91,164,229,29,99,243,180,128,196,15,90,153,203,181,193,239,163,107,3,109,43,61,63,159,237,237,199, 251,254,65,118,28,151,50,52,176,117,50,147,50,168,170,37,36,186,155,220,32,183,252,98,1,185,10,128,214,39,171,226, 138,185,233,98,34,229,233,97,189,235,6,200,107,246,188,123,122,212,35,143,173,255,153,125,95,182,237,225,178,247,74,199, 169,149,47,230,200,135,54,241,186,28,31,57,81,14,159,111,171,217,41,117,188,68,134,241,71,8,121,168,100,41,41,189, 51,48,18,179,50,168,195,96,43,92,105,115,36,254,85,18,133,172,182,173,219,212,3,159,109,221,204,140,228,37,171,93, 181,241,128,43,243,186,200,167,8,204,140,50,19,108,40,30,186,0,102,168,103,172,207,147,111,147,145,0,145,53,156,157, 254,209,60,147,83,241,139,106,220,68,242,116,171,40,139,113,171,237,185,1,74,79,248,94,239,187,27,143,116,231,126,209, 17,50,219,111,201,181,51,94,6,217,160,92,132,130,89,53,99,177,9,6,204,218,167,104,5,106,117,54,65,61,124,159, 217,125,232,99,124,94,207,66,182,224,169,223,176,45,108,111,44,139,237,21,253,98,176,229,81,194,166,21,36,109,104,120, 93,184,181,160,133,197,206,198,124,187,194,168,58,210,73,30,14,105,78,186,71,126,248,116,11,163,23,212,133,79,245,131, 14,109,235,144,80,134,237,50,240,183,179,32,142,7,206,175,229,85,159,26,93,248,74,72,22,198,162,251,221,80,217,200, 46,157,127,83,113,229,254,18,145,47,33,177,100,81,81,253,29,90,229,211,180,125,233,229,142,172,148,136,217,88,101,180, 20,56,158,178,249,142,109,129,164,117,168,82,31,115,75,198,176,189,175,55,89,110,247,136,167,8,28,218,254,138,86,53, 12,52,104,55,241,123,148,233,54,153,66,54,144,188,17,66,43,166,54,161,97,1,96,49,200,94,168,116,140,224,116,126, 254,81,225,55,254,108,244,33,233,154,65,166,135,30,210,153,151,7,49,229,86,15,53,186,65,168,225,178,148,146,93,236, 40,3,177,16,142,226,247,168,211,71,138,97,128,206,129,24,44,134,64,73,164,49,108,76,121,164,192,168,227,137,173,236, 156,167,155,32,123,129,203,65,109,104,183,111,102,153,22,237,81,42,11,131,53,52,150,196,8,109,201,158,164,240,194,114, 142,1,34,242,212,157,200,55,41,164,6,195,125,157,22,16,104,80,91,123,98,13,7,145,19,222,159,33,65,127,248,75, 84,76,208,119,185,201,90,191,101,142,33,78,143,1,101,93,64,195,15,42,19,144,125,224,155,67,176,69,232,125,197,19, 33,144,35,132,90,255,31,67,91,107,102,246,194,85,90,245,207,198,1,13,183,192,33,59,88,46,102,151,115,57,51,84, 174,25,133,102,234,6,117,172,84,114,173,79,152,239,146,244,229,238,202,63,95,247,45,99,55,56,217,211,222,62,90,168, 134,208,144,125,89,165,106,82,225,225,160,193,50,166,194,94,184,233,233,214,35,27,104,227,62,44,87,25,174,243,206,34, 171,230,235,201,150,77,254,153,108,119,134,52,35,69,244,212,92,254,174,34,154,231,244,147,195,109,69,142,16,55,225,158, 60,127,37,144,156,233,150,78,102,103,130,66,253,146,87,67,243,190,227,252,42,223,143,141,133,176,154,128,98,159,211,54, 169,107,40,171,124,53,2,247,179,23,216,20,81,59,224,10,20,25,14,229,145,92,92,155,35,143,74,120,144,28,76,196, 25,61,125,29,36,196,142,120,26,211,192,246,47,46,155,219,71,217,247,70,106,17,113,25,200,1,143,228,141,221,241,79, 103,94,5,152,154,107,32,62,99,92,236,184,139,202,145,23,158,144,67,250,86,95,215,10,57,100,35,89,48,248,71,2, 152,50,116,66,165,63,104,33,234,172,142,9,174,81,129,227,247,138,211,187,211,53,229,95,243,174,211,145,187,211,107,223, 53,247,117,251,45,232,74,114,170,39,121,4,237,1,67,59,178,4,171,1,105,86,245,38,74,121,234,219,200,166,155,218, 54,247,112,229,204,154,123,37,82,124,87,46,215,250,96,204,112,175,3,152,96,165,56,28,5,75,20,42,139,142,31,44, 234,254,69,170,158,37,224,107,117,48,74,225,55,42,32,134,76,176,0,37,161,56,118,140,61,158,132,107,254,225,209,94, 233,170,212,196,0,80,233,180,90,2,76,33,202,24,241,212,48,112,186,165,214,30,56,38,234,12,164,41,85,78,65,47, 236,75,40,177,182,55,23,195,114,90,37,196,94,20,200,120,176,15,246,92,249,249,77,112,61,160,87,60,97,174,93,75, 173,240,148,190,137,138,43,124,177,139,184,9,239,233,18,24,93,22,85,34,166,62,214,94,214,120,254,35,157,118,242,114, 62,59,226,80,154,107,173,219,189,118,137,89,130,159,203,190,83,199,191,182,197,162,84,97,28,151,80,124,181,15,99,241, 200,94,112,8,183,182,66,172,47,134,197,222,174,46,13,223,184,21,102,198,103,113,207,43,189,104,113,152,229,238,179,55, 109,46,190,205,108,40,193,248,9,254,240,204,36,163,208,46,75,105,247,103,201,163,24,34,114,23,84,98,230,150,209,238, 7,168,102,195,112,87,204,140,113,213,212,98,16,203,239,228,115,173,169,2,251,143,106,215,186,113,220,116,195,27,205,235, 131,53,53,127,115,242,7,145,108,251,85,79,241,73,169,36,134,188,78,77,38,114,163,4,131,157,227,227,232,152,201,36, 7,16,24,248,192,232,230,59,5,194,183,162,3,99,211,125,244,20,68,166,94,138,178,36,221,127,131,187,126,160,221,36, 199,56,249,14,140,52,86,111,85,95,58,9,133,32,23,184,31,156,238,76,240,42,77,164,154,114,45,157,80,117,22,244, 144,215,8,72,0,243,63,186,165,11,135,18,219,110,61,221,240,91,165,64,207,85,66,96,58,71,104,158,61,21,178,92, 180,117,175,188,159,241,52,240,240,149,248,240,180,144,109,45,174,211,161,119,63,17,239,24,238,235,153,37,97,55,42,224, 187,27,148,113,37,137,225,143,26,128,204,133,18,95,59,63,110,176,226,46,42,101,101,197,154,67,151,117,247,248,16,151, 129,26,210,0,48,47,204,59,104,89,46,136,12,80,49,43,212,47,36,239,125,246,32,154,46,164,51,212,77,26,125,187, 142,153,10,23,15,230,39,143,96,68,164,133,55,113,175,86,20,14,228,125,129,25,48,4,200,175,20,89,46,191,219,45, 103,181,227,37,110,0,65,238,165,7,219,4,245,99,112,195,122,238,187,81,9,203,137,200,113,210,53,245,215,3,197,94, 146,14,14,120,212,6,53,219,125,112,37,150,57,223,136,230,161,44,97,164,88,125,185,133,223,252,58,137,19,26,179,15, 2,55,113,85,57,45,157,102,225,49,66,6,19,34,209,42,207,255,185,138,164,53,214,36,86,114,41,152,197,6,113,78, 218,72,125,136,246,214,252,95,236,33,77,143,111,142,126,161,149,173,241,163,154,20,45,83,225,205,86,200,226,161,89,252, 205,11,202,212,98,144,17,242,21,34,40,232,233,67,54,80,91,197,70,238,147,243,81,222,191,200,43,71,163,190,229,13, 11,158,102,104,208,27,252,37,216,37,59,119,190,167,216,196,224,38,140,158,9,0,55,119,231,127,106,201,109,141,209,25, 195,57,61,62,196,189,233,26,135,207,141,132,217,42,153,41,151,70,239,185,103,108,22,147,45,61,62,197,178,120,164,206, 40,112,43,30,4,21,1,245,183,83,149,243,43,125,157,141,168,179,173,99,184,85,246,4,184,14,138,110,87,221,79,172, 40,213,225,59,79,56,93,61,150,110,56,11,228,159,52,167,114,73,52,97,111,80,241,31,49,141,43,166,238,83,44,164, 86,112,63,133,15,245,248,15,107,2,159,166,241,72,18,236,190,96,174,10,150,32,78,47,14,76,60,56,145,8,26,181, 68,16,169,242,35,102,95,100,10,181,39,25,236,246,0,79,35,82,105,5,225,235,26,210,93,112,241,228,216,77,113,25, 230,25,187,169,239,2,97,207,178,83,45,34,237,216,55,128,12,100,226,8,83,200,212,215,157,233,132,165,219,69,42,81, 119,242,50,6,145,194,87,252,245,153,32,174,133,146,163,187,51,20,193,149,99,193,24,151,41,119,115,239,15,62,43,243, 219,171,189,33,135,199,80,118,194,249,9,33,39,10,12,12,34,223,202,60,229,61,222,31,7,147,193,250,221,243,23,0, 4,24,42,87,84,237,47,176,44,97,110,11,147,237,208,13,177,180,187,146,98,135,88,175,84,254,30,1,169,205,127,230, 35,165,6,69,36,84,98,46,16,253,186,14,242,252,61,83,180,156,162,38,149,200,199,240,11,176,177,180,8,170,120,56, 178,53,43,161,131,68,189,189,135,57,43,251,12,136,225,159,196,86,73,88,198,98,32,163,93,80,65,8,211,188,156,195, 244,230,12,200,245,239,164,232,173,171,202,4,75,92,17,231,233,212,197,246,197,226,10,60,125,30,202,250,186,59,244,117, 167,55,223,8,186,144,87,238,15,246,16,33,34,122,142,144,165,137,71,251,176,181,108,123,228,129,64,160,211,93,11,4, 152,84,40,133,187,240,195,46,16,119,225,73,45,12,53,230,187,114,199,202,92,214,91,216,200,178,221,179,10,187,177,42, 137,210,205,223,29,174,97,85,33,189,111,223,43,172,10,2,252,149,187,35,102,121,67,198,110,59,196,225,232,157,136,138, 134,139,54,198,112,247,179,234,188,253,191,9,225,83,170,100,220,222,218,14,96,113,189,23,143,113,188,55,254,146,167,188, 2,151,175,133,146,134,127,248,192,125,250,124,152,109,236,179,142,37,174,204,166,167,127,110,132,184,149,19,32,212,225,238, 181,108,181,127,48,39,103,167,185,142,48,18,239,207,140,156,168,133,87,33,79,57,171,147,34,31,204,79,143,184,10,222, 143,231,48,64,196,117,12,98,166,245,235,153,9,171,254,122,182,23,32,174,68,117,78,211,101,131,142,165,219,244,94,230, 249,89,20,104,55,202,82,167,136,150,23,156,64,178,46,138,71,179,149,7,97,213,198,103,115,234,128,238,85,104,35,47, 96,73,178,68,85,52,123,237,128,48,171,130,101,132,52,117,123,167,90,232,49,231,132,68,105,130,17,201,32,123,115,72, 44,67,196,63,210,120,3,15,1,226,171,105,108,58,223,99,163,217,195,187,59,91,163,26,214,191,180,42,69,40,80,242, 96,26,31,115,80,144,98,136,169,70,169,159,14,82,53,212,5,228,153,40,196,44,188,158,8,174,11,37,17,86,230,41, 85,214,146,116,250,240,144,60,221,182,253,98,214,244,142,136,4,217,152,135,175,42,158,49,63,200,128,199,99,21,138,91, 17,169,81,88,126,131,253,196,245,36,109,50,16,73,100,111,237,128,56,63,52,91,121,37,86,119,118,128,210,30,107,97, 29,89,247,61,192,198,179,139,84,181,27,100,223,103,88,226,73,164,153,68,8,201,183,61,184,188,251,81,88,200,111,7, 190,54,144,228,51,229,85,111,153,19,6,143,189,237,254,53,117,253,237,81,162,193,19,185,246,78,19,0,131,210,54,176, 52,157,54,123,98,148,186,37,40,111,29,123,182,97,247,158,51,97,244,57,27,190,45,111,67,185,139,39,11,194,121,208, 33,95,81,59,51,5,88,107,137,14,188,66,93,32,29,13,68,77,246,33,148,188,180,128,248,119,62,113,23,235,30,233, 87,169,129,117,24,119,30,247,3,82,55,98,115,132,195,33,100,102,101,108,226,95,72,2,226,211,200,88,27,210,217,188, 157,123,61,107,127,130,240,40,111,248,133,30,60,0,15,131,163,211,85,70,11,147,41,29,1,25,46,111,238,110,161,205, 147,119,5,153,131,46,178,155,92,76,29,209,37,44,192,172,83,28,172,23,75,55,176,247,133,205,54,158,239,23,239,70, 103,181,219,128,150,46,35,76,1,127,188,49,187,32,193,7,96,177,168,217,129,75,60,210,151,148,183,168,197,70,48,149, 46,53,65,71,108,143,146,31,73,140,158,158,179,177,30,171,61,5,179,255,39,197,152,157,72,175,46,173,85,87,85,16, 104,50,114,233,33,82,19,181,225,29,219,125,125,186,153,166,47,216,144,197,247,39,171,196,69,63,188,168,21,236,95,55, 0,25,125,208,166,233,148,3,85,163,112,17,211,158,167,23,119,250,226,100,181,171,244,189,0,243,56,190,183,87,75,96, 47,37,106,99,150,220,242,107,16,146,162,27,72,27,104,247,105,27,141,186,110,248,42,241,71,56,67,15,17,250,48,59, 18,103,208,246,197,248,229,112,124,99,233,148,220,197,204,195,63,187,134,151,96,38,183,14,168,152,97,18,108,247,48,205, 83,37,202,61,214,216,62,61,7,69,129,17,1,50,80,183,186,120,162,25,135,32,131,234,143,10,97,199,170,170,38,254, 242,47,21,109,211,104,213,141,243,56,146,129,229,223,194,58,94,55,249,106,164,105,172,109,82,197,33,53,9,128,254,97, 167,254,93,227,195,16,156,124,107,7,38,97,30,121,199,75,90,140,223,207,55,186,165,169,52,147,250,46,105,203,230,72, 20,22,195,93,18,38,66,154,203,143,37,93,112,200,64,157,129,55,248,84,127,33,91,96,184,212,77,194,194,13,74,217, 208,153,129,95,22,77,214,166,133,219,79,238,69,31,231,20,38,20,124,223,4,68,24,192,82,225,65,116,248,189,230,101, 145,47,41,223,255,176,17,129,160,149,33,17,251,149,200,235,31,78,138,170,175,140,134,174,35,31,145,44,24,54,255,181, 88,41,43,246,61,173,119,207,235,38,214,69,189,93,248,69,40,237,226,125,1,131,27,37,228,97,62,211,187,201,166,105, 109,68,224,55,155,46,202,78,225,231,15,164,252,202,16,206,255,166,47,227,250,167,25,249,10,18,255,131,7,75,54,81, 106,181,54,178,98,230,249,168,60,152,173,14,79,88,33,252,200,89,45,51,157,209,68,38,58,217,156,67,85,128,19,238, 26,225,246,65,197,139,86,179,40,212,121,163,184,197,100,127,114,43,109,25,169,157,119,166,57,26,28,101,117,71,133,176, 192,166,130,109,240,18,192,13,237,193,64,187,179,164,106,166,241,92,153,102,148,235,80,130,144,50,93,183,132,21,12,171, 137,9,7,167,98,166,214,106,40,174,249,246,198,166,81,247,218,231,156,231,67,198,109,212,211,212,106,12,99,164,172,216, 67,94,30,155,206,249,227,232,88,220,123,170,97,197,50,140,221,159,231,212,60,144,105,221,66,125,232,194,36,173,139,221, 187,21,176,123,80,224,48,126,212,190,186,122,58,78,71,91,198,95,127,82,168,93,0,190,15,98,159,78,255,199,77,162, 86,17,223,250,241,25,119,112,199,15,213,43,231,117,28,24,11,166,110,186,13,246,16,45,96,223,136,82,85,81,44,255, 208,36,40,56,217,202,62,130,146,44,155,161,118,204,122,249,218,117,101,73,228,51,138,87,28,218,204,186,178,124,87,211, 44,228,53,169,143,16,19,66,123,177,232,95,204,78,202,86,72,23,45,127,71,188,151,46,75,100,141,214,180,43,253,4, 205,145,17,97,53,229,206,188,234,29,203,111,63,59,115,174,45,36,27,229,22,115,153,101,101,196,189,86,138,225,219,18, 200,253,22,47,196,251,241,31,60,86,51,169,161,24,242,170,59,75,75,40,78,175,202,208,109,34,43,215,59,210,184,237, 27,50,197,80,154,177,221,150,202,236,16,131,30,114,235,224,238,186,115,195,8,198,242,98,232,172,225,229,227,107,172,141, 97,35,231,29,81,14,37,191,109,101,103,243,6,24,124,134,52,155,0,252,64,233,210,111,90,100,21,116,12,80,3,3, 153,231,109,211,41,91,255,244,114,67,156,223,105,154,134,241,78,26,39,49,26,142,221,66,69,114,41,80,176,208,196,136, 226,148,98,175,200,151,20,161,97,40,217,65,202,151,24,19,253,158,229,56,228,214,74,140,214,11,15,64,110,250,119,67, 247,49,69,89,250,4,183,147,103,212,167,33,112,14,52,97,49,151,217,90,69,133,82,119,50,127,226,131,161,77,185,9, 159,224,118,255,29,93,32,46,101,246,147,188,227,234,147,135,21,29,69,76,23,212,29,117,83,118,99,8,254,20,238,150, 89,146,65,231,60,228,53,173,117,0,30,104,43,159,24,25,170,238,247,48,43,229,240,59,254,10,58,227,49,164,49,183, 57,59,79,217,251,110,170,31,86,160,132,90,140,242,46,225,110,170,158,39,83,246,217,31,142,211,108,95,209,125,207,188, 92,73,112,180,54,29,5,11,231,166,67,49,252,229,137,101,242,188,100,169,234,239,9,145,60,35,36,149,124,74,252,62, 169,26,73,66,188,45,67,170,115,80,33,190,84,108,246,173,242,175,161,20,254,230,181,189,119,46,243,177,132,43,228,195, 71,255,78,64,78,95,48,39,53,8,249,199,91,144,201,110,190,151,135,195,133,140,193,170,32,254,206,137,15,115,247,163, 220,174,165,196,243,85,21,58,128,80,16,197,74,117,37,229,3,136,206,140,105,206,193,245,235,58,51,251,79,245,176,202, 163,244,187,208,254,22,51,102,86,75,239,179,25,9,3,195,162,35,255,104,179,57,92,169,74,43,137,70,143,191,145,101, 247,199,94,200,189,3,10,82,128,246,168,90,25,194,244,49,38,135,228,95,26,34,220,183,227,191,141,231,170,161,161,56, 96,235,204,69,134,145,113,124,134,225,171,241,119,68,34,179,144,172,227,214,209,151,251,219,35,241,169,42,40,29,245,138, 234,226,70,26,35,222,48,124,226,113,150,209,149,103,38,2,253,48,103,218,54,106,155,45,130,2,238,205,49,197,77,136, 154,174,193,40,38,27,183,230,134,81,234,28,57,139,246,41,188,24,110,90,205,46,111,188,37,213,95,220,43,59,32,5, 43,43,126,211,157,34,255,214,108,47,194,27,239,125,250,182,97,145,44,19,35,30,104,58,48,172,38,197,174,154,57,92, 94,125,113,137,237,121,230,189,56,52,130,83,128,51,182,139,94,76,20,235,50,205,105,144,194,72,20,215,77,156,200,247, 210,241,50,93,24,97,33,130,218,227,117,138,185,120,164,157,138,23,147,192,177,7,233,6,226,6,32,191,145,206,153,62, 195,232,172,64,138,6,74,57,76,54,214,62,212,117,235,205,97,76,225,47,87,96,175,34,92,50,53,82,103,128,139,68, 69,112,240,46,92,3,71,215,127,90,179,217,247,64,57,142,190,45,121,149,187,188,236,249,62,139,35,100,13,242,51,151, 66,215,129,45,229,168,103,181,225,67,31,103,23,159,30,171,20,119,127,204,202,115,188,54,242,244,158,25,102,103,209,122, 178,106,53,110,197,96,32,16,117,97,238,110,54,130,111,67,92,30,122,220,213,175,59,210,244,195,18,70,46,95,77,116, 200,32,72,34,144,209,126,122,181,219,51,195,22,139,86,157,220,80,128,234,135,10,19,71,252,231,124,71,194,175,0,91, 245,252,216,24,63,93,141,29,96,108,128,188,33,136,125,161,23,230,111,234,11,107,105,229,254,160,47,194,117,231,15,243, 140,19,172,53,243,87,185,79,210,129,21,82,236,96,23,8,137,135,8,143,127,150,116,65,217,143,136,98,0,88,57,228, 97,145,128,11,192,194,186,67,219,133,15,244,22,24,227,198,193,173,128,136,48,222,242,133,26,211,118,6,130,178,226,123, 169,31,163,253,65,40,31,102,143,83,64,59,99,65,154,144,172,108,106,246,70,115,88,73,148,26,54,241,172,65,83,242, 213,160,179,164,244,224,194,81,107,10,26,65,83,143,193,242,100,50,164,165,173,227,167,192,66,17,84,206,235,84,223,22, 229,118,58,150,105,120,55,243,234,5,228,250,212,12,87,107,160,162,133,14,23,163,171,226,177,151,160,166,11,73,233,187, 67,68,240,86,221,70,37,131,54,202,173,114,22,229,132,208,177,159,89,68,255,205,44,231,138,232,161,150,216,255,61,170, 221,39,113,249,18,169,22,56,108,247,238,51,199,80,218,101,254,220,95,193,34,82,229,60,225,91,120,226,181,138,152,142, 70,12,251,22,51,44,104,167,152,175,201,58,20,246,12,16,98,42,78,9,236,248,138,225,133,231,116,154,125,89,177,222, 47,111,172,79,170,49,231,233,77,28,22,55,124,165,116,253,154,132,49,164,27,207,109,1,160,103,126,4,57,17,81,191, 26,57,245,107,228,126,234,155,214,145,116,13,171,138,94,67,226,79,171,79,189,157,32,105,71,125,96,54,178,246,24,91, 132,144,22,7,55,9,131,180,58,25,98,185,72,173,130,113,232,173,21,53,233,78,215,208,27,191,243,201,244,97,164,13, 31,227,96,15,233,35,191,106,57,195,53,128,52,89,111,52,142,128,75,41,251,230,253,164,217,207,241,15,44,143,98,143, 205,141,202,24,221,168,21,93,231,170,117,29,244,6,75,124,70,105,74,176,132,172,205,168,137,148,208,2,237,146,129,98, 203,99,172,199,6,105,5,188,44,1,250,6,59,229,23,170,46,244,36,143,149,179,131,232,109,224,160,237,161,136,46,254, 181,137,58,253,53,53,205,90,118,113,20,127,75,247,144,220,97,252,63,242,189,136,18,20,38,34,143,218,0,41,232,208, 219,113,152,76,66,213,236,108,255,0,151,46,212,162,77,177,45,39,78,0,63,226,50,247,171,51,172,202,233,113,235,94, 215,15,68,54,240,116,173,106,1,100,205,176,168,117,120,106,63,137,169,136,127,186,87,30,154,243,121,86,61,212,177,90, 194,153,215,223,235,151,136,131,178,181,118,56,99,115,226,34,89,138,106,162,223,21,151,222,151,246,45,254,204,3,121,36, 222,119,156,21,124,10,184,244,86,97,168,224,188,121,84,212,239,105,26,76,253,167,17,103,19,26,9,29,159,198,39,98, 40,254,77,152,225,86,78,94,128,85,45,83,139,34,201,20,113,156,239,144,185,181,157,4,95,172,39,177,209,233,85,254, 19,205,53,239,33,183,192,60,217,72,198,83,51,72,97,250,225,114,196,165,14,13,96,107,18,161,78,84,14,58,9,1, 166,200,228,76,145,113,119,159,18,96,74,200,246,197,219,187,53,192,105,107,96,187,243,92,245,31,13,60,87,247,213,101, 39,152,94,127,56,48,228,81,245,231,147,237,108,157,73,0,46,206,122,247,12,101,153,216,67,136,128,151,92,199,40,38, 122,225,148,124,190,152,108,135,5,195,209,42,140,134,27,62,53,82,124,251,252,153,91,199,133,94,43,185,204,32,145,186, 134,207,5,160,180,60,247,215,150,159,191,99,168,26,19,70,10,235,203,192,122,18,139,163,204,186,218,100,229,157,67,137, 198,25,1,44,236,117,109,59,214,87,62,250,29,123,144,214,249,110,160,224,17,118,56,67,52,164,190,113,230,39,29,11, 129,187,183,156,115,95,197,207,158,251,189,48,209,77,200,244,145,38,25,12,236,202,100,99,114,247,198,65,186,37,195,17, 233,220,229,9,20,226,130,47,250,69,104,128,162,80,10,123,128,181,96,75,209,162,137,238,156,34,99,131,89,106,10,155, 31,173,63,227,146,53,127,206,100,175,9,207,30,126,199,76,133,175,227,122,215,124,188,43,141,28,50,227,165,99,140,60, 129,34,59,253,56,179,232,250,0,242,216,134,144,177,25,41,133,128,221,78,190,34,100,169,57,54,254,116,122,84,171,13, 39,75,121,176,189,71,27,250,100,45,94,40,143,192,198,157,125,152,201,196,62,105,230,76,173,22,26,187,23,31,167,237, 187,66,195,175,211,69,174,9,67,46,222,217,169,162,50,160,254,239,213,156,121,216,85,0,136,153,159,135,58,47,143,125, 147,232,130,71,11,245,225,116,244,157,42,186,72,170,240,255,33,148,148,194,8,51,20,204,86,47,190,140,173,188,46,141, 101,123,95,5,173,200,194,238,225,237,2,13,41,203,112,38,95,155,52,238,225,223,169,2,131,193,215,129,245,108,90,134, 215,177,210,227,84,25,1,186,79,100,253,156,216,57,125,184,123,165,33,161,19,49,240,129,31,46,74,89,6,33,34,22, 240,116,61,105,94,235,21,215,16,113,156,121,140,190,145,101,61,18,183,208,209,13,121,253,198,217,127,185,9,48,21,167, 117,9,20,55,78,240,43,70,143,96,21,4,214,99,249,227,188,20,80,67,88,86,27,5,233,129,248,144,59,88,116,26, 82,154,209,70,129,70,24,19,31,133,33,106,207,85,184,210,23,52,7,244,152,89,40,134,57,234,78,242,244,77,28,174, 171,65,59,205,111,163,199,82,166,220,141,117,109,141,0,67,67,28,70,57,79,143,3,114,97,28,208,200,157,163,124,175, 3,103,189,138,139,170,169,123,226,85,140,158,88,160,45,235,203,50,47,60,127,211,145,0,117,104,198,190,178,158,209,232, 234,134,104,128,26,107,91,186,38,1,16,23,113,38,13,18,236,23,154,62,227,64,97,145,35,22,151,39,212,111,210,103, 17,130,74,20,225,113,9,210,170,209,216,76,155,132,179,106,162,57,149,74,146,174,171,136,36,202,86,31,132,121,63,204, 188,159,39,1,195,27,234,118,167,171,177,97,240,13,119,135,233,103,85,201,141,171,190,139,195,88,81,230,191,152,84,45, 234,182,185,204,114,157,247,201,210,75,40,227,3,213,58,5,149,121,142,188,134,182,102,99,239,11,35,243,176,59,152,1, 67,228,239,205,89,39,32,173,98,204,225,209,172,152,72,115,9,32,30,139,81,56,228,108,44,211,46,35,135,15,160,122, 195,1,80,224,58,116,138,152,49,238,235,55,203,107,154,55,152,13,123,120,29,33,196,46,173,126,243,205,82,176,174,144, 148,42,42,110,216,103,13,229,59,129,153,241,106,32,112,210,41,240,97,185,216,251,228,103,86,223,214,201,66,38,161,171, 175,233,98,104,124,162,30,194,120,1,68,0,118,224,62,125,9,133,243,71,43,1,176,159,47,236,150,165,1,144,250,165, 167,234,36,35,171,98,196,24,20,171,198,136,96,86,242,71,222,155,240,2,251,220,3,139,189,83,127,125,221,152,209,72, 68,87,26,80,137,79,155,77,197,205,7,85,94,11,103,0,89,129,56,178,170,248,89,89,194,85,13,164,49,252,17,182, 10,233,212,173,148,233,215,108,50,9,145,118,250,171,254,73,168,130,104,83,186,104,214,65,156,99,171,96,107,67,47,140, 173,185,13,248,80,16,181,23,182,4,138,241,200,99,237,89,129,31,191,103,180,227,23,110,244,60,90,110,86,45,242,196, 197,130,99,229,110,128,215,105,232,117,243,237,148,21,200,2,211,244,214,162,18,102,51,85,96,15,57,88,197,71,245,140, 187,227,108,131,15,57,166,165,212,130,240,167,15,97,229,211,117,157,143,249,4,149,34,20,39,66,105,243,60,142,206,198, 116,118,208,119,156,158,120,117,41,232,123,182,125,244,141,4,40,246,33,142,236,205,116,122,159,41,95,93,126,169,79,181, 156,113,96,97,46,201,161,148,111,242,250,231,198,17,94,43,68,228,87,112,168,137,58,128,127,192,210,102,96,232,69,189, 236,216,64,209,182,247,249,204,150,94,203,12,170,0,172,244,246,69,169,68,86,99,149,219,48,41,146,179,127,56,142,145, 213,131,239,18,236,87,23,14,206,112,61,199,4,29,0,33,25,176,106,185,3,198,201,0,50,39,191,32,82,59,247,145, 8,195,147,183,26,150,9,246,199,191,235,25,216,85,54,212,115,179,11,235,107,135,224,42,251,192,216,35,96,116,140,216, 129,198,193,27,252,77,209,5,117,179,86,195,20,74,180,46,8,236,202,3,132,26,239,68,78,172,195,57,128,181,0,221, 199,109,20,61,5,84,124,207,242,27,185,230,152,135,16,21,184,73,211,112,90,162,199,34,177,206,81,178,29,118,238,87, 180,37,169,183,231,14,27,176,27,153,194,246,55,236,79,44,56,147,219,148,205,206,146,245,254,33,176,206,146,192,195,147, 57,180,77,221,217,239,176,123,77,153,59,194,225,200,159,7,197,230,80,33,61,137,211,52,102,214,143,22,185,32,90,189, 228,52,238,150,231,79,254,152,23,137,177,72,56,145,13,215,172,202,7,18,36,7,114,64,66,41,149,52,156,231,223,166, 154,105,36,45,237,128,30,114,147,11,34,181,43,5,63,20,194,147,172,46,65,170,75,93,118,172,120,17,42,184,32,76, 93,142,195,141,177,230,145,178,100,113,212,154,63,201,147,34,29,66,192,84,246,140,197,85,251,93,240,198,184,73,100,6, 210,19,103,163,63,56,52,53,252,45,0,143,119,161,169,240,248,245,1,56,200,84,74,234,101,72,80,216,131,69,186,48, 83,195,121,145,127,189,222,224,62,116,178,51,144,211,144,23,177,251,203,12,187,216,173,149,131,78,117,132,201,127,56,157, 245,63,77,250,143,80,28,231,253,210,177,42,150,189,30,189,139,79,199,79,168,81,69,45,204,75,152,67,68,184,229,146, 14,100,35,145,98,228,35,4,44,94,219,161,187,47,171,174,103,91,50,141,90,129,169,119,173,151,236,171,141,193,71,187, 253,89,212,212,129,49,146,50,205,161,226,51,35,210,196,10,71,85,120,65,57,217,235,161,220,71,228,229,251,120,42,232, 154,74,58,84,81,246,229,119,81,121,245,241,100,12,186,186,119,54,151,245,5,78,127,179,159,15,160,95,81,12,4,152, 25,28,15,59,199,55,36,132,72,206,193,50,234,18,241,204,45,213,210,246,136,219,143,52,211,152,111,13,140,162,80,161, 54,254,85,138,184,8,187,88,61,24,89,85,46,213,203,157,9,39,95,48,114,252,188,78,114,144,20,114,22,79,253,243, 157,223,76,17,178,226,91,100,251,58,64,10,221,216,202,150,38,99,83,4,94,203,122,171,241,137,178,25,129,87,120,196, 40,20,15,216,223,64,38,147,96,24,128,24,74,242,130,76,205,233,237,4,44,222,10,151,158,27,84,56,81,148,44,183, 114,216,241,12,157,118,42,107,122,32,171,194,32,125,204,132,156,181,82,106,20,153,179,158,205,159,35,118,92,54,232,115, 255,86,175,36,104,24,208,166,207,181,149,136,104,191,53,252,240,40,201,22,79,52,56,160,169,94,100,47,235,10,114,218, 229,245,108,12,13,159,95,179,5,62,255,147,219,201,242,42,173,73,217,42,25,82,55,0,233,120,152,46,93,212,209,205, 250,182,77,34,14,99,149,182,165,224,246,80,15,135,209,217,103,123,61,24,25,167,221,15,46,233,49,80,66,33,157,195, 187,41,73,114,98,50,103,156,253,213,22,81,43,22,26,134,141,151,237,11,55,173,173,25,211,71,29,204,195,126,127,77, 196,195,215,170,87,204,7,46,186,134,12,173,102,109,201,161,125,103,217,153,2,162,159,55,187,17,117,29,64,172,30,124, 88,225,60,236,192,205,72,207,170,29,49,24,83,44,146,17,53,5,78,81,7,42,57,97,99,207,11,72,186,100,173,20, 48,129,14,121,75,219,21,196,240,159,64,89,228,110,44,153,55,130,210,244,198,165,4,191,203,112,143,213,84,242,43,156, 125,0,8,239,158,242,122,179,195,3,25,23,225,15,235,80,96,234,180,204,157,222,219,50,91,107,175,195,199,192,20,167, 60,153,148,51,108,115,31,181,101,74,203,144,114,241,80,124,121,248,175,179,101,109,129,230,25,168,202,162,73,41,24,68, 146,61,56,101,177,206,239,149,32,80,176,108,71,49,23,133,229,79,38,175,215,205,55,32,165,187,15,240,255,167,67,7, 41,65,152,172,99,251,252,237,43,150,37,127,93,165,175,31,69,142,16,221,74,112,3,88,116,182,231,209,131,238,172,125, 246,71,122,4,156,231,64,168,3,56,95,182,93,53,87,167,75,169,185,238,206,232,149,72,7,171,87,11,49,92,110,61, 253,19,250,132,12,202,147,239,180,193,200,2,216,162,182,18,200,118,140,139,84,135,227,117,255,201,203,132,36,28,103,174, 248,57,35,157,164,78,10,212,148,48,62,244,235,123,61,83,202,132,124,249,150,162,59,28,63,238,77,51,252,26,155,181, 167,255,237,0,131,93,79,5,16,17,30,189,69,87,230,254,27,13,107,137,202,46,240,173,137,181,19,213,81,237,253,0, 198,33,127,239,129,16,220,239,3,9,245,240,223,32,211,27,249,254,136,226,166,243,216,195,252,244,150,13,5,97,113,155, 182,253,178,10,152,134,159,167,169,66,32,79,126,255,72,222,252,199,188,53,66,106,141,124,82,193,190,189,171,129,19,120, 130,148,84,242,138,13,237,170,24,42,239,249,159,101,154,94,164,6,90,112,117,0,21,70,211,143,244,108,191,49,154,245, 109,135,209,67,236,160,3,134,149,155,85,236,58,148,236,210,101,221,254,14,157,85,149,150,243,3,21,20,34,126,207,166, 193,144,66,54,217,75,101,223,173,225,231,222,205,227,125,27,42,37,4,60,150,11,162,183,89,104,13,182,44,16,42,30, 252,18,59,180,66,158,63,150,49,142,21,53,228,199,249,167,241,239,12,206,108,93,112,61,201,73,209,82,139,33,86,123, 39,129,119,253,96,117,14,104,37,189,10,233,230,30,59,253,166,125,70,244,166,128,95,118,62,239,56,102,9,211,180,53, 66,176,209,112,86,175,188,238,199,200,16,249,162,156,172,181,81,67,40,27,1,229,154,211,22,238,162,25,203,1,195,223, 94,255,14,97,41,232,250,190,220,3,118,50,95,27,79,238,117,163,114,247,87,243,117,8,250,162,244,130,223,205,57,52, 176,201,26,198,33,3,235,69,31,193,248,171,133,16,165,209,210,201,60,58,223,80,49,130,245,239,126,251,89,66,116,107, 207,238,28,83,216,172,182,166,229,227,217,143,52,85,172,208,54,230,143,149,81,233,37,28,10,101,122,200,184,242,183,44, 40,91,23,79,73,97,10,202,143,225,148,44,33,43,147,188,167,62,223,11,223,193,203,30,2,57,137,220,106,22,97,88, 241,214,129,47,157,178,87,225,49,134,51,3,170,45,78,186,137,14,31,186,11,16,67,238,155,77,89,101,223,49,170,136, 167,115,252,7,108,135,23,196,8,202,18,85,123,43,153,186,244,239,48,126,124,243,7,7,59,71,93,39,99,26,183,245, 25,214,201,66,229,64,139,227,203,84,246,10,209,150,11,105,173,99,24,241,141,119,1,152,108,1,31,197,247,254,171,226, 222,74,206,176,166,169,158,183,103,255,192,107,66,111,17,160,111,137,65,70,125,208,245,40,27,172,1,248,207,129,95,44, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,73,73,42,0,8,0,0,0,16,0,254,0,4,0,1,0,0,0,0,0,0,0,0,1,3,0, 1,0,0,0,94,0,0,0,1,1,3,0,1,0,0,0,88,0,0,0,2,1,3,0,3,0,0,0,206,0,0,0, 3,1,3,0,1,0,0,0,5,0,0,0,6,1,3,0,1,0,0,0,2,0,0,0,17,1,4,0,4,0,0,0, 212,0,0,0,21,1,3,0,1,0,0,0,3,0,0,0,22,1,3,0,1,0,0,0,29,0,0,0,23,1,4,0, 4,0,0,0,228,0,0,0,26,1,5,0,1,0,0,0,244,0,0,0,27,1,5,0,1,0,0,0,252,0,0,0, 28,1,3,0,1,0,0,0,1,0,0,0,40,1,3,0,1,0,0,0,3,0,0,0,61,1,3,0,1,0,0,0, 2,0,0,0,73,134,1,0,0,1,0,0,4,1,0,0,0,0,0,0,8,0,8,0,8,0,4,2,0,0,4,12, 0,0,110,24,0,0,164,36,0,0,0,10,0,0,106,12,0,0,54,12,0,0,150,0,0,0,97,196,5,0,16,39, 0,0,97,196,5,0,16,39,0,0,56,66,73,77,3,237,0,0,0,0,0,16,0,96,0,0,0,2,0,2,0,96, 0,0,0,2,0,2,56,66,73,77,3,243,0,0,0,0,0,7,0,0,0,0,0,0,0,0,56,66,73,77,3,245, 0,0,0,0,0,72,0,47,102,102,0,1,0,108,102,102,0,6,0,0,0,0,0,0,0,47,102,102,0,1,0,161, 153,154,0,6,0,0,0,0,0,0,0,50,0,0,0,1,0,90,0,0,0,6,0,0,0,0,0,0,0,53,0,0, 0,1,0,45,0,0,0,6,0,0,0,0,0,0,56,66,73,77,3,248,0,0,0,0,0,112,0,0,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,232,0,0,0,0,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,3,232,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,3,232,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,3,232,0,0,128,47,153,137,99,73,45,2,0,132,54,64,14,152,68,34,25,13,136,68,98,81, 56,164,86,45,23,140,70,99,81,184,228,118,61,31,137,5,225,210,9,36,104,79,8,47,155,198,130,209,57,137,166,237, 118,191,223,109,88,106,133,84,129,67,156,152,48,216,84,50,31,37,160,80,104,84,58,37,22,141,17,19,200,155,51,240, 5,38,69,16,166,66,3,192,9,19,164,58,226,11,184,225,212,176,2,26,85,44,49,59,91,45,151,51,157,206,255,153, 0,31,141,168,107,237,234,231,49,145,11,106,48,0,116,78,227,113,194,161,180,202,140,98,159,123,137,211,162,84,187,237, 30,63,79,194,225,177,81,138,76,82,30,23,196,87,41,216,76,109,64,1,122,193,66,243,67,97,160,92,172,98,63,189, 230,14,183,99,177,226,231,0,47,216,41,27,67,238,34,245,181,57,64,0,64,218,133,104,147,48,32,86,55,122,212,95, 9,16,191,211,93,55,249,237,82,71,19,196,98,232,25,8,94,39,149,207,136,242,100,240,138,86,23,43,143,145,182,100, 93,60,213,232,186,111,207,9,244,58,54,155,77,227,8,213,42,161,186,216,70,194,38,11,182,188,88,40,195,249,225,126, 197,222,128,23,108,206,119,67,252,255,192,16,10,66,227,163,68,168,222,55,129,97,56,108,0,24,6,241,234,12,180,199, 57,138,107,155,202,211,122,14,128,11,65,254,132,31,141,122,16,248,0,15,116,64,122,151,230,105,76,67,141,4,9,196, 252,157,42,228,5,23,162,142,76,97,25,177,106,240,222,7,128,16,88,0,101,33,166,249,138,98,154,43,194,70,14,130, 225,122,17,13,67,144,240,1,16,33,175,114,26,248,45,105,178,112,57,61,72,75,176,205,36,177,148,105,45,203,138,51, 50,199,143,35,248,216,122,155,48,136,0,119,0,7,57,210,111,27,200,68,44,136,195,8,64,59,36,34,112,234,65,18, 147,104,42,15,44,2,238,43,1,44,192,146,237,5,65,59,104,99,48,234,169,168,106,68,38,135,226,176,36,12,131,39, 114,204,0,77,136,137,198,236,78,52,187,168,186,206,136,161,226,107,0,0,120,84,136,206,192,36,146,136,159,107,88,150, 28,139,241,91,242,193,179,79,237,7,89,162,242,211,151,68,178,232,98,78,145,2,241,109,100,138,16,194,176,222,119,27, 198,40,0,17,4,84,161,188,166,28,110,8,58,134,66,244,84,142,180,40,115,178,40,181,136,194,216,132,113,39,105,225, 211,95,214,151,11,22,202,202,204,51,26,15,3,161,160,48,0,89,171,173,161,118,78,72,149,50,145,83,51,149,58,141, 90,200,141,76,181,73,82,96,188,43,135,38,81,130,188,219,247,22,12,163,214,206,52,176,197,11,162,176,0,116,27,192, 189,215,34,34,21,122,33,56,162,79,200,66,17,3,166,252,43,123,163,55,203,102,139,228,82,104,140,26,136,147,116,87, 95,96,249,106,73,132,162,247,60,174,138,8,34,192,104,36,8,131,16,30,4,132,196,0,182,45,174,174,53,159,77,179, 87,110,48,9,4,70,101,136,26,33,186,66,16,96,132,71,112,58,111,100,10,61,75,83,201,183,248,137,129,96,151,6, 93,131,92,136,130,166,136,3,24,164,98,227,133,33,17,210,13,3,32,184,92,27,13,129,96,64,33,33,165,201,162,112, 18,68,8,228,135,5,242,35,11,121,232,55,130,17,164,29,58,94,145,100,162,26,165,169,144,161,23,218,43,171,241,136, 70,78,28,197,102,100,93,105,97,122,250,77,68,59,142,14,198,134,236,160,185,209,75,236,186,101,55,139,33,184,194,41, 11,227,96,0,60,22,132,64,88,68,22,130,0,112,38,15,1,49,194,40,99,155,70,246,242,62,244,61,24,1,178,195, 18,20,49,103,105,167,30,163,169,162,90,119,116,245,241,106,15,33,145,95,126,159,26,90,25,165,233,84,52,15,8,105, 209,118,3,10,215,191,175,34,199,18,35,207,162,255,55,92,132,116,60,194,37,89,94,147,114,53,122,174,186,117,137,104, 240,124,66,17,182,4,64,152,40,0,0,219,179,3,206,216,0,59,146,48,3,128,72,32,30,67,184,104,140,113,160,48, 4,144,148,21,77,245,94,144,212,46,217,159,147,129,34,109,56,137,60,242,32,8,143,97,16,122,174,53,107,194,69,248, 80,194,240,53,7,47,121,33,58,151,134,180,89,132,23,56,36,85,11,173,7,144,197,83,129,23,127,4,114,14,16,133, 137,6,223,211,179,5,176,2,1,1,119,244,71,199,185,231,128,209,36,113,15,33,218,35,195,144,148,131,80,185,118,67, 114,32,225,200,64,222,126,233,200,9,60,160,0,15,211,106,199,33,174,234,16,184,229,241,9,153,44,104,141,76,142,19, 128,1,44,28,3,160,176,24,162,161,120,54,88,168,155,150,106,24,105,0,118,31,191,32,68,15,212,162,221,117,76,84, 134,54,103,237,24,72,152,227,143,100,33,196,72,130,35,17,212,164,143,139,36,98,31,188,229,142,235,192,0,57,7,33, 60,162,166,178,168,8,157,227,190,16,33,244,234,55,214,134,187,83,225,17,145,112,249,54,195,213,66,66,15,60,141,131, 192,2,88,194,18,72,147,144,249,65,27,195,88,104,137,113,2,34,134,136,193,24,49,218,28,1,112,59,32,225,164,57, 35,77,56,13,38,209,168,254,86,74,221,144,17,141,196,201,41,96,70,160,244,97,4,71,156,136,59,160,114,23,66,3, 184,150,100,64,9,128,0,64,59,64,0,224,35,110,240,120,183,144,212,232,18,36,51,143,113,246,85,44,152,60,254,166, 226,56,155,68,93,197,26,226,32,136,163,89,21,132,112,137,172,50,17,180,37,130,216,129,22,19,10,120,17,86,41,14, 222,107,202,106,67,122,87,72,194,32,78,232,154,110,149,114,188,134,201,0,0,199,134,243,27,155,115,86,49,82,73,101, 53,233,56,34,3,193,0,22,131,144,77,71,136,216,19,1,35,196,118,143,116,113,18,71,139,60,18,225,224,60,11,49, 198,51,16,89,144,99,15,209,163,196,116,113,76,41,37,29,35,16,134,128,18,90,154,73,0,32,150,10,225,94,144,83, 225,152,216,215,91,241,64,115,33,153,145,120,177,43,19,106,200,2,85,130,145,79,153,174,68,102,149,28,60,241,106,86, 196,121,42,178,34,203,186,1,96,100,17,2,224,137,56,72,108,6,34,177,38,2,206,49,197,18,71,40,227,29,163,4, 79,11,20,130,51,39,129,204,153,4,86,67,128,10,68,71,102,208,11,77,131,213,100,19,34,104,1,1,49,64,160,100, 122,51,22,161,66,33,4,64,212,60,179,4,96,139,181,190,17,75,251,18,67,15,124,0,36,102,135,5,159,116,83,36, 15,217,99,214,50,37,34,35,237,112,35,10,84,138,69,208,68,18,4,116,67,42,80,18,189,16,138,249,94,94,125,127, 155,132,34,39,11,129,98,52,207,77,89,181,141,244,0,79,52,42,188,95,204,175,118,54,78,164,82,83,222,6,81,9, 168,146,107,30,203,27,48,54,68,82,98,74,73,247,170,244,17,209,234,51,197,160,166,23,2,140,96,33,65,188,40,198, 96,204,58,96,122,25,156,98,172,85,10,212,199,124,42,189,227,174,230,207,50,96,213,95,182,228,54,122,17,230,52,199, 36,220,156,118,206,126,226,142,41,61,1,10,149,200,185,86,4,118,138,161,60,37,30,17,14,116,53,106,234,207,105,174, 51,17,195,166,145,183,172,39,155,1,166,70,43,157,225,34,100,202,127,22,203,48,127,236,217,18,31,99,88,101,9,177, 2,36,105,0,209,93,135,236,116,185,215,214,194,64,187,230,7,229,76,245,16,192,48,100,31,28,20,111,235,178,60,202, 154,138,254,150,36,142,163,171,37,54,23,216,90,85,38,58,110,5,128,236,31,215,105,195,18,238,92,77,29,183,240,17, 92,162,39,19,128,3,182,20,194,4,79,14,151,140,195,212,188,20,105,172,114,106,17,106,205,71,177,137,18,45,233,46, 240,1,51,80,59,64,204,210,188,164,75,27,212,233,114,136,116,121,21,160,3,198,131,134,97,3,55,50,205,86,149,37, 77,91,80,245,48,252,151,91,15,149,37,65,224,219,13,67,148,87,74,204,29,3,48,14,129,135,76,187,30,20,196,33, 14,140,116,213,152,166,19,66,120,108,8,64,194,114,144,140,212,57,79,56,27,119,88,98,230,78,135,108,3,192,144,38, 18,226,68,77,76,17,84,240,86,141,174,163,76,113,221,103,249,249,100,145,13,186,34,24,199,65,145,92,99,162,200,161, 180,34,151,164,140,212,245,250,68,133,12,112,44,163,159,44,164,17,199,133,136,99,158,97,64,1,245,21,51,31,169,204, 178,233,202,132,53,243,14,151,209,146,39,128,29,116,101,106,255,149,147,143,146,112,201,63,196,100,35,49,230,90,238,0, 34,112,220,77,160,39,94,14,209,120,54,64,152,39,2,148,186,238,139,65,52,55,133,40,193,148,143,177,34,107,76,245, 130,107,129,59,1,241,130,107,17,205,2,69,175,1,16,44,228,207,72,36,178,43,102,94,174,54,179,38,45,14,138,16, 182,34,7,48,0,26,105,162,44,141,234,125,193,55,139,235,222,133,81,116,38,237,238,66,6,82,223,191,143,185,226,112, 56,237,173,8,147,237,34,58,210,233,21,7,212,102,128,240,52,105,133,226,59,20,246,55,146,233,97,162,0,15,252,105, 143,80,38,11,64,216,29,118,228,73,220,225,177,198,3,240,240,114,109,49,241,54,216,114,26,223,65,160,44,61,177,5, 39,221,203,183,34,44,163,250,229,248,203,24,232,96,1,162,0,3,254,241,227,179,200,191,241,238,0,1,110,224,230,168, 143,72,175,171,206,67,71,225,178,209,165,11,116,133,189,7,166,50,233,120,234,61,39,127,145,18,248,240,204,239,88,125, 155,205,241,237,4,254,230,9,243,68,222,109,4,113,31,207,119,167,46,161,13,6,218,228,4,235,210,17,176,136,67,182, 195,159,35,56,187,126,235,18,111,152,158,126,249,219,81,107,89,226,197,228,178,75,145,222,39,24,94,13,6,216,223,87, 47,230,36,54,241,78,71,254,63,199,129,52,35,126,115,155,94,99,98,68,247,23,237,35,99,215,116,135,242,222,57,233, 1,128,28,111,11,126,157,71,208,171,175,102,71,101,98,83,109,56,224,230,46,233,197,54,83,33,210,222,162,168,194,195, 168,247,34,26,234,102,46,2,224,130,143,224,90,237,41,208,248,173,122,38,4,202,127,195,80,237,239,152,118,193,142,190, 134,60,91,164,176,25,67,248,51,139,20,146,203,186,178,68,218,7,96,68,219,162,40,108,111,32,241,207,32,34,142,98, 28,239,36,232,68,50,253,34,74,253,139,214,132,79,62,219,195,218,209,239,232,14,15,236,44,207,80,145,5,160,255,130, 22,245,172,194,133,162,251,1,133,20,255,174,152,33,110,190,195,34,67,11,34,251,0,166,22,171,41,140,3,160,126,12, 64,158,249,1,202,27,204,94,237,226,16,2,109,132,29,173,128,73,97,218,26,96,32,118,112,222,176,129,99,1,5,44, 204,2,32,240,64,58,251,130,46,198,32,20,24,161,188,30,208,96,208,67,80,174,96,50,208,193,207,6,226,40,1,64, 40,184,64,0,30,193,216,26,98,2,128,63,222,13,80,4,22,13,7,132,66,97,80,176,0,46,16,4,13,128,31,144, 232,48,18,16,252,0,42,209,8,135,179,177,166,245,115,128,30,48,135,115,121,188,233,130,178,156,110,56,43,164,61,5, 23,135,70,144,87,28,160,0,23,150,193,93,16,80,196,178,118,233,113,74,3,193,121,196,30,109,69,131,80,33,51,104, 45,14,115,5,153,133,217,144,98,8,252,104,45,32,24,160,174,216,48,108,58,19,15,2,65,238,39,187,198,194,15,0, 89,64,22,37,162,105,188,212,111,44,102,147,103,68,214,13,49,26,8,68,66,40,96,44,51,10,144,0,37,224,7,109, 254,18,19,144,189,197,162,208,75,77,167,7,22,193,113,240,108,44,36,50,255,106,177,64,1,176,128,1,202,240,205,231, 97,154,61,36,83,72,0,136,68,156,171,66,218,5,219,38,115,95,0,12,17,19,184,58,222,164,206,170,115,122,152,116, 46,47,132,74,55,192,11,180,24,59,52,131,58,25,148,9,196,190,139,71,160,224,128,18,138,68,31,163,78,130,133,232, 50,233,192,99,124,67,29,143,197,195,97,107,149,226,19,175,65,94,78,223,54,110,209,237,28,137,132,73,164,211,42,75, 154,131,205,101,144,96,191,30,244,14,164,96,2,208,217,52,107,243,44,132,36,32,0,50,196,28,236,171,16,194,47,240, 123,10,195,65,48,88,41,4,128,12,195,240,130,179,136,59,62,208,180,241,10,18,211,33,103,168,0,80,143,228,210,65, 12,27,232,50,76,165,184,139,170,10,14,131,160,196,98,253,161,14,240,0,186,184,73,195,247,26,28,73,90,94,116,198, 201,195,143,30,32,199,19,114,155,186,72,99,158,170,170,226,0,158,13,173,7,129,188,143,130,108,137,218,199,203,50,162, 14,105,25,71,97,168,98,195,110,66,114,227,184,146,50,244,134,64,144,50,10,12,197,115,115,71,5,156,240,195,40,12, 206,144,107,12,132,65,224,91,34,125,76,128,43,68,174,179,176,252,58,131,80,212,43,65,14,209,44,245,23,65,161,81, 33,246,101,30,5,49,84,85,32,167,59,3,0,161,6,241,174,220,38,145,148,116,254,0,19,66,20,104,156,109,216,47, 29,39,107,155,179,29,57,233,212,113,37,169,21,99,138,0,38,32,186,244,31,131,194,4,181,46,5,167,186,184,10,0, 6,152,32,24,8,7,41,198,174,32,166,9,60,185,63,42,76,127,38,56,211,90,11,2,47,179,197,51,55,211,48,124, 238,131,79,44,130,26,130,196,204,146,10,200,160,200,164,53,17,93,136,69,15,118,197,198,97,206,97,150,101,157,50,192, 129,105,49,234,189,160,208,10,74,111,26,42,152,48,168,184,145,156,69,31,165,7,28,144,155,198,201,187,142,186,37,137, 136,0,9,38,165,250,121,38,72,233,102,26,254,131,179,88,82,22,192,151,40,54,9,140,213,41,181,101,29,182,16,0, 101,22,54,133,217,31,218,200,45,243,107,137,240,83,39,112,65,22,242,25,116,33,104,161,234,199,207,204,4,178,194,26, 119,90,24,208,0,20,131,71,164,105,72,101,222,132,153,229,169,92,114,150,38,155,42,131,36,21,3,100,111,83,128,3, 106,147,40,237,32,36,189,223,232,92,113,84,41,46,242,139,52,97,78,45,86,132,39,232,74,240,22,7,97,16,38,19, 136,10,221,74,9,128,6,129,128,138,29,128,0,90,117,177,198,250,77,177,128,9,42,18,187,109,147,85,177,107,219,32, 4,37,8,216,136,59,31,7,114,168,70,125,205,33,23,47,55,12,204,136,62,154,130,233,8,55,70,0,116,168,46,149, 166,33,108,225,246,207,152,133,113,35,159,194,0,201,204,144,173,7,62,187,23,113,72,69,166,167,168,188,71,122,224,187, 42,122,234,102,109,85,140,118,131,38,178,42,15,26,120,245,205,119,57,3,32,80,41,204,132,139,227,218,113,24,6,159, 13,80,33,91,30,190,147,205,53,46,98,131,77,179,218,21,157,32,250,15,104,133,103,151,24,1,114,161,90,7,226,131, 93,109,1,246,130,208,93,34,14,254,192,0,5,116,207,248,133,58,118,156,4,6,242,242,26,195,28,77,14,209,216,250, 151,34,117,33,46,237,178,147,145,198,145,137,163,99,3,168,13,239,188,39,192,81,145,139,204,72,132,220,159,182,163,146, 243,78,27,197,0,13,208,44,39,18,76,2,130,120,79,35,163,76,9,172,72,28,237,147,172,21,71,240,120,134,51,4, 8,250,87,129,5,134,175,200,211,191,70,100,136,156,241,5,127,38,16,123,142,0,38,6,65,0,251,52,0,20,123,144, 80,18,66,29,88,0,128,15,245,212,58,162,16,235,8,48,207,96,3,148,81,140,4,38,66,135,56,20,68,204,221,126, 140,23,18,109,218,241,124,69,228,45,241,16,101,254,196,21,153,211,120,173,176,163,157,232,82,194,88,41,253,90,165,236, 191,39,4,235,33,97,170,13,112,41,141,242,65,117,75,15,28,68,118,131,237,132,0,23,167,30,67,75,250,248,130,8, 40,131,32,194,250,100,71,170,89,1,105,110,35,68,68,75,40,165,34,89,31,238,132,132,69,179,59,20,160,12,85,45, 113,104,132,64,40,130,65,217,72,224,26,67,28,88,187,70,175,39,0,2,154,78,200,24,192,175,208,0,214,151,252,60, 146,211,24,132,141,231,20,194,81,228,38,110,13,185,137,20,194,89,32,160,210,215,45,18,96,0,59,116,4,65,92,48, 193,38,192,164,17,42,103,33,49,230,220,20,131,238,34,109,206,121,184,228,209,10,222,50,40,144,131,202,85,211,18,8, 68,171,18,196,28,123,130,241,247,21,200,76,2,26,47,236,23,203,104,1,64,72,56,209,45,51,250,128,63,200,170,51, 199,184,209,30,13,249,247,149,180,246,133,38,41,11,107,179,58,15,204,178,10,238,212,235,195,58,100,172,228,163,70,55, 5,136,65,199,37,108,112,16,131,176,118,55,211,35,231,112,206,45,30,144,137,216,65,193,17,35,3,46,230,112,163,54, 99,16,28,154,121,65,201,217,193,16,129,216,16,0,88,20,24,17,21,251,52,144,68,11,64,120,202,0,3,88,19,144, 212,182,214,37,80,188,24,179,254,0,128,10,6,174,40,69,10,159,178,204,180,197,106,191,65,101,145,6,1,52,40,130, 208,65,229,19,70,56,218,55,15,117,116,202,7,46,250,168,203,237,147,36,134,141,184,170,60,55,139,240,34,83,115,162, 112,62,6,16,141,210,33,50,84,149,121,84,164,89,5,74,95,20,58,29,43,76,234,177,57,202,128,212,236,238,36,116, 114,74,175,194,155,69,168,193,33,144,171,118,209,63,117,201,17,229,185,9,148,32,182,81,198,201,242,49,68,181,4,138, 145,106,43,168,33,193,20,129,1,6,182,101,174,179,203,102,146,56,29,69,32,159,128,190,136,81,42,40,65,163,97,138, 5,164,117,192,185,217,14,73,128,153,123,73,68,29,78,70,224,0,15,198,245,152,115,70,192,17,3,181,51,5,108,99, 200,55,197,21,84,88,150,214,93,71,25,49,156,196,46,201,193,117,76,169,147,91,51,54,32,138,118,209,244,20,6,128, 204,194,107,141,120,180,88,0,51,96,173,20,155,66,143,178,162,207,72,146,104,192,133,79,61,182,181,118,96,150,120,59, 5,224,165,147,160,2,220,154,122,215,66,215,97,92,184,4,24,178,143,17,120,59,71,8,20,35,246,186,208,73,235,64, 214,32,145,164,119,119,212,133,81,185,37,30,164,117,35,32,240,150,20,177,135,16,53,198,13,238,3,170,160,113,170,50, 16,145,159,16,26,187,151,210,251,77,249,185,70,96,251,94,68,116,93,6,62,227,39,105,165,53,169,117,88,41,174,224, 204,166,11,112,134,18,52,128,56,4,130,10,5,108,170,241,9,204,21,136,224,55,161,192,80,70,242,86,102,244,84,132, 63,120,217,47,223,157,68,32,249,37,244,65,50,11,127,92,51,191,198,12,25,230,99,172,110,55,145,194,70,144,22,81, 224,42,88,51,57,86,184,26,168,160,100,143,231,36,11,38,200,58,125,126,57,178,162,207,118,133,107,42,189,167,126,88, 58,168,128,12,66,177,178,165,86,75,25,99,8,144,192,38,2,73,28,253,195,90,157,78,86,232,154,223,1,6,26,33, 57,163,53,84,195,71,25,230,9,163,28,224,180,115,0,1,216,238,114,94,113,107,83,26,206,59,229,105,161,158,34,76, 28,119,148,132,188,227,142,240,103,43,138,166,242,93,116,167,132,86,182,87,9,8,66,120,153,246,233,58,143,82,106,89, 164,3,227,176,22,233,253,57,84,135,136,54,117,9,95,7,16,204,179,148,181,99,41,197,132,44,178,142,35,215,154,159, 164,108,104,36,50,95,62,172,9,104,54,185,8,167,78,228,193,221,50,11,126,208,37,224,76,196,30,150,133,138,96,126, 7,24,179,37,128,217,140,148,205,154,76,145,245,62,47,104,6,252,103,25,48,158,248,13,122,125,122,57,113,79,75,85, 42,49,37,171,202,198,143,149,37,189,219,81,133,156,251,33,37,139,41,16,173,235,189,210,187,180,223,107,144,199,220,168, 174,52,217,246,36,66,14,72,144,235,130,12,134,43,204,247,103,145,174,102,112,124,94,66,115,251,109,58,7,79,138,1, 118,22,0,46,153,131,59,196,205,242,177,219,60,164,86,212,193,147,93,17,218,160,137,58,130,103,155,157,103,177,98,167, 235,87,59,202,8,79,47,33,89,171,7,14,193,74,32,192,0,14,111,156,211,14,18,62,248,136,139,81,235,186,123,226, 228,16,218,237,155,84,143,60,33,89,194,77,73,190,67,181,100,55,36,27,212,207,133,182,48,126,66,69,248,193,83,11, 80,116,171,157,152,66,77,245,39,56,207,138,254,216,20,223,39,146,213,205,79,157,163,196,191,58,154,214,45,70,7,238, 93,185,249,165,211,222,215,82,241,167,61,169,123,187,119,142,244,136,123,249,163,230,227,183,78,233,251,85,208,185,220,245, 231,166,46,25,239,254,134,66,252,142,75,250,52,104,130,204,152,127,199,100,101,237,63,135,30,13,41,254,165,214,73,134, 53,70,126,144,132,24,53,197,21,110,88,236,29,146,39,75,68,91,80,67,59,145,6,246,158,205,43,186,106,159,16,70, 119,119,3,222,252,245,247,150,248,230,107,234,45,78,104,45,66,10,222,195,216,74,231,62,232,36,10,202,13,242,52,133, 208,174,235,66,33,67,6,50,170,242,179,106,252,235,231,190,32,197,80,55,98,14,47,2,12,135,142,36,25,142,180,188, 98,10,155,34,10,191,3,100,66,137,58,115,36,10,94,12,14,254,198,120,246,142,226,237,173,217,6,142,82,238,12,174, 32,207,242,239,11,62,33,15,126,94,16,12,223,13,244,240,236,157,1,103,230,181,1,196,112,47,156,33,43,148,185,130, 10,21,2,64,7,235,70,215,45,118,215,161,216,200,65,138,190,110,20,33,108,120,73,66,92,55,192,160,209,2,16,207, 47,62,63,139,212,108,97,152,45,0,173,2,103,40,48,136,30,122,199,174,88,173,248,104,99,40,232,3,72,229,173,70, 93,46,93,6,206,228,247,100,171,6,172,160,52,144,118,52,238,10,41,175,248,43,142,245,0,207,228,231,43,93,1,239, 12,245,201,112,201,132,234,219,108,83,18,34,14,122,207,210,253,100,47,14,77,112,152,76,142,228,135,52,47,233,25,3, 69,82,110,75,20,32,169,44,95,34,222,56,144,202,154,70,48,163,201,222,245,135,36,180,203,90,193,208,100,230,175,106, 5,175,114,52,141,240,246,206,106,23,193,6,10,207,226,33,111,204,33,15,6,254,164,74,246,48,135,18,12,50,112,70, 248,102,238,140,236,228,244,236,145,162,236,68,48,176,3,112,95,98,26,55,3,98,113,35,112,208,103,150,41,128,160,42, 204,242,87,104,58,47,143,188,57,68,136,6,130,137,4,171,46,107,196,228,236,143,146,181,98,19,23,110,231,25,17,114, 229,113,134,67,194,71,30,209,112,52,110,98,16,100,188,193,112,247,16,49,248,43,102,110,192,207,94,211,80,228,91,237, 37,18,14,140,219,138,134,236,173,116,141,0,90,68,197,160,4,80,50,96,162,11,21,162,110,170,66,92,32,177,198,10, 203,54,155,111,40,33,16,54,59,48,206,4,80,210,0,14,184,125,4,13,33,240,231,23,75,235,22,240,142,202,48,96, 33,46,232,254,241,254,52,145,128,10,202,176,211,12,215,14,133,34,148,131,38,87,198,136,114,207,16,126,177,44,125,145, 171,20,5,184,185,193,207,30,36,30,186,113,84,28,193,198,54,168,225,21,133,110,132,194,89,36,13,212,2,224,82,7, 224,58,113,64,88,33,1,169,35,139,24,40,230,36,252,98,248,200,71,230,144,142,194,232,146,166,126,44,28,61,162,186, 246,224,0,5,65,178,36,77,213,38,205,207,47,210,122,136,35,7,39,242,102,47,178,140,219,175,149,41,169,134,148,2, 182,129,229,182,245,111,23,46,100,226,66,46,138,223,206,138,112,78,152,33,79,38,208,2,18,173,134,26,234,229,114,131, 80,46,0,18,78,132,76,126,166,192,68,7,236,89,38,48,89,22,114,7,31,178,107,31,17,108,74,237,198,5,173,210, 105,113,1,48,100,154,73,34,23,48,205,52,103,210,136,229,109,40,32,209,28,210,172,158,33,12,222,210,18,162,233,12, 3,18,224,40,180,195,26,106,196,240,65,142,12,190,203,178,201,76,230,102,98,13,45,35,138,154,34,110,99,146,206,0, 19,188,32,195,254,90,234,122,121,238,23,45,204,136,191,196,8,136,110,76,237,230,121,54,45,68,228,242,133,31,115,120, 33,49,10,33,83,128,48,7,57,49,101,196,134,237,184,33,146,158,249,209,170,232,238,206,235,6,101,46,108,80,242,83, 78,52,141,151,43,162,111,44,104,54,107,193,144,24,33,130,144,81,204,142,108,244,33,138,111,38,19,44,32,178,144,102, 73,72,147,177,104,149,37,126,253,176,114,33,16,253,63,34,24,48,98,2,128,47,144,101,103,168,2,13,6,5,193,158, 173,48,0,44,90,0,130,193,161,144,120,164,34,31,11,0,59,67,33,152,56,77,206,231,138,198,64,2,208,152,1,167, 26,142,69,36,16,119,60,60,51,19,138,65,99,145,249,12,214,106,222,111,183,160,238,48,147,141,210,238,14,141,29,46, 55,24,0,58,29,131,56,221,19,232,57,4,126,52,119,78,154,46,54,96,190,130,44,17,19,192,13,229,139,82,41,69, 144,136,135,245,182,12,26,145,6,16,136,160,226,32,92,114,61,13,139,132,197,160,183,108,194,14,245,185,70,90,112,152, 160,125,216,45,107,9,192,1,176,120,1,224,222,105,132,4,80,249,182,55,29,6,15,65,156,89,12,148,218,4,86,187, 194,33,87,105,12,104,1,111,198,202,35,177,249,68,122,87,25,141,193,165,97,151,172,127,35,168,136,105,226,144,145,108, 23,57,143,131,78,103,85,250,29,154,41,75,116,193,195,0,0,184,94,144,18,17,89,192,13,118,243,140,113,201,200,136, 178,96,9,205,150,141,73,131,242,3,181,27,0,2,211,103,181,69,109,161,144,152,81,207,124,140,0,8,24,200,173,214, 15,124,144,226,189,155,143,164,87,95,211,215,193,255,25,80,6,95,210,155,33,200,130,38,198,54,236,115,60,250,160,238, 176,126,214,182,105,27,108,220,30,40,51,10,134,155,205,218,32,17,4,80,137,188,168,128,10,154,170,160,168,106,80,0, 224,166,160,186,13,18,0,10,176,104,131,184,39,28,76,14,133,129,216,118,106,24,166,42,166,113,170,203,58,192,14,196, 46,188,94,236,173,76,40,68,215,179,203,123,68,0,28,239,44,16,134,162,175,148,151,39,160,239,202,66,7,2,103,17, 228,118,160,229,154,6,131,157,167,98,82,207,166,137,180,138,144,64,224,4,190,211,75,146,250,42,150,182,203,107,98,134, 205,80,99,30,221,188,40,164,52,0,24,43,82,198,131,170,38,244,90,165,128,0,195,148,0,80,7,19,130,15,68,209, 59,134,226,208,113,32,82,113,135,224,122,198,221,68,46,52,117,22,40,174,50,15,65,173,19,170,217,47,205,72,171,202, 211,203,172,248,40,0,30,233,24,18,146,160,236,36,160,154,202,73,171,167,40,177,229,152,172,43,76,105,173,115,89,161, 11,115,101,92,191,80,2,57,57,60,86,27,101,55,88,141,193,189,8,128,16,227,145,102,194,202,101,8,162,184,116,36, 70,131,81,49,69,23,75,41,42,153,211,109,169,1,98,140,94,168,136,61,53,22,32,206,5,4,226,186,224,3,186,239, 160,212,250,98,144,77,192,80,40,22,158,199,97,216,209,164,8,123,208,188,160,213,115,112,251,166,207,204,168,0,74,242, 94,14,131,20,3,122,8,144,86,51,76,222,144,200,149,242,51,10,128,1,216,69,100,217,13,149,94,173,222,40,52,45, 144,177,214,90,13,14,41,45,234,66,116,34,145,66,66,171,81,52,220,66,20,196,116,144,172,100,24,38,14,88,116,197, 87,67,187,117,3,183,96,0,237,72,72,163,83,48,206,9,12,206,243,62,8,52,156,250,226,47,230,41,41,164,184,78, 15,171,85,136,161,64,26,6,135,172,48,5,194,186,244,235,40,108,6,246,196,247,236,59,30,72,198,206,155,70,205,12, 109,219,19,117,103,229,12,124,72,165,153,150,8,1,41,102,49,58,140,11,218,180,77,188,225,56,148,180,61,112,90,238, 34,13,193,160,215,90,205,190,187,219,133,132,148,180,242,85,82,22,212,230,154,240,249,224,48,155,31,88,191,104,174,175, 44,97,104,174,176,138,1,32,126,183,174,211,217,22,73,182,161,27,76,236,131,3,73,209,205,32,246,48,184,1,102,34, 147,205,36,131,217,115,200,0,31,194,208,226,211,12,171,118,117,61,62,164,57,114,119,119,0,6,87,19,189,234,84,62, 133,111,241,74,67,129,194,81,128,233,102,102,25,148,68,83,160,164,60,98,41,65,69,119,117,18,180,135,246,100,39,142, 233,45,26,224,136,51,72,130,228,186,49,44,94,166,0,87,158,162,108,233,88,67,164,107,39,209,212,136,96,46,21,148, 147,35,0,15,34,5,2,35,11,3,80,210,19,39,36,132,158,22,38,68,241,139,82,204,110,174,68,240,167,65,226,89, 74,2,22,45,40,80,0,21,227,28,137,17,49,62,59,171,88,116,168,98,108,223,65,177,196,103,107,172,224,31,183,0, 82,6,80,204,29,32,216,226,173,199,160,137,202,44,51,104,45,1,118,1,211,144,8,157,171,111,78,12,109,122,42,4, 162,121,139,185,114,96,78,124,138,186,16,0,232,226,187,85,128,80,17,207,42,129,226,29,26,228,35,130,104,33,103,167, 194,116,184,128,3,183,34,143,40,138,69,215,144,180,33,19,106,32,208,125,61,33,178,117,17,222,97,54,82,165,29,30, 189,162,138,100,206,11,206,91,43,97,255,56,144,104,5,199,20,58,98,136,154,23,67,198,98,206,228,35,211,133,232,229, 32,0,6,138,175,90,81,170,73,68,82,41,69,211,26,212,93,20,3,49,174,166,47,58,137,60,69,35,3,233,71,105, 60,238,156,130,126,55,148,74,156,99,230,58,85,147,97,162,227,100,34,210,122,12,176,138,43,201,2,69,81,48,217,121, 196,24,193,55,185,24,186,12,104,217,152,143,93,208,66,134,252,148,78,42,130,34,128,164,228,175,25,60,109,19,50,251, 32,202,141,203,185,150,158,125,0,244,88,32,240,2,81,185,224,38,2,71,136,237,30,242,156,131,133,217,15,32,212,220, 41,56,47,145,231,148,105,135,15,202,66,229,40,243,201,118,145,71,32,243,100,140,130,113,107,184,23,207,98,108,82,202, 40,233,133,174,65,151,76,160,1,49,104,113,141,162,9,62,98,184,166,90,99,209,49,145,2,242,80,138,196,121,174,71, 23,178,248,95,74,140,207,151,50,234,230,226,156,133,55,19,144,131,74,65,238,132,101,35,31,11,177,20,236,46,216,130, 82,2,9,62,26,239,146,85,168,9,165,62,39,162,207,26,227,4,162,148,114,147,63,201,170,60,39,117,21,29,55,218, 148,78,229,225,95,153,15,242,123,209,19,31,68,229,157,15,158,4,134,140,145,86,96,69,64,235,199,36,39,141,126,17, 67,214,254,38,251,251,34,144,2,151,59,201,76,77,105,120,0,166,50,114,116,42,128,94,17,81,52,52,39,213,233,236, 1,120,103,69,141,242,230,136,7,18,163,55,232,86,223,231,196,200,133,54,5,107,203,83,126,222,64,192,52,176,224,118, 132,55,227,130,116,232,112,39,144,117,90,172,155,138,177,68,170,235,252,50,136,254,130,196,97,198,157,93,251,240,77,196, 24,242,52,198,156,254,144,66,84,3,206,158,185,165,9,207,91,136,52,234,1,245,226,134,76,9,159,13,214,178,129,93, 43,81,78,88,235,41,100,31,77,137,34,163,161,188,156,66,193,51,148,217,216,116,43,84,116,14,146,144,5,199,28,128, 90,246,114,207,217,219,189,104,27,243,226,144,133,33,192,207,218,60,175,92,165,172,35,182,184,0,86,147,237,56,229,17, 21,182,179,110,116,91,171,111,93,171,144,209,190,211,162,222,44,17,210,193,8,164,160,183,196,86,159,212,146,15,84,110, 67,63,34,147,228,238,173,90,109,112,84,16,29,25,69,18,80,93,163,137,48,135,77,221,133,243,62,239,152,234,177,69, 109,10,216,194,36,85,23,79,216,70,218,207,121,169,155,100,125,0,210,137,217,56,98,212,89,73,119,204,199,91,204,44, 172,40,180,195,127,180,105,194,88,27,14,186,106,49,68,42,206,37,64,55,234,120,249,206,82,58,170,56,252,223,14,34, 152,112,108,201,6,202,32,2,136,213,188,59,49,50,150,88,202,132,86,205,96,20,74,117,239,44,178,32,248,158,5,152, 211,198,105,144,12,81,5,180,166,181,53,66,106,194,79,224,229,22,36,195,46,201,43,1,96,179,182,94,171,150,255,14, 96,60,144,180,222,106,139,170,36,217,208,227,122,47,148,236,225,33,196,25,82,232,79,114,15,151,102,22,3,101,218,67, 44,84,134,90,223,28,9,71,150,247,10,127,85,43,204,228,147,164,236,126,41,152,198,154,99,74,71,200,99,148,57,134, 238,199,101,253,31,148,50,214,137,203,70,58,134,34,102,99,10,48,198,117,206,244,42,192,101,107,161,96,53,204,193,215, 244,63,40,34,96,79,51,168,137,193,215,89,238,139,184,173,120,113,118,8,23,216,57,122,68,48,91,163,15,214,190,71, 154,76,176,14,221,75,145,61,118,190,95,59,172,186,202,75,132,69,183,116,246,229,28,103,12,229,40,154,33,149,178,190, 138,216,84,63,44,239,69,177,175,180,150,247,153,88,103,11,208,172,235,67,108,22,199,203,117,104,198,179,17,178,81,194, 41,53,221,120,47,65,155,139,29,117,56,86,62,3,7,36,116,64,169,104,225,51,17,244,213,178,69,32,2,33,220,67, 192,144,19,27,192,104,0,21,169,182,103,207,105,70,2,96,110,101,219,221,128,244,232,169,21,210,46,42,136,66,133,179, 103,246,83,66,177,77,217,108,1,236,146,46,200,55,9,80,37,171,138,233,197,221,29,93,234,117,56,201,249,177,162,104, 228,110,0,146,102,29,201,35,168,170,21,78,6,87,217,171,53,64,80,119,117,128,36,57,213,56,0,155,68,85,80,144, 112,40,230,72,49,15,3,80,12,9,129,214,178,150,28,240,61,2,76,196,107,0,112,0,10,128,177,6,30,96,65,77, 129,176,18,65,192,41,6,31,102,52,114,143,4,17,76,194,176,23,44,99,165,10,173,152,59,142,79,11,194,120,132,29, 154,39,80,72,86,128,160,39,8,3,212,108,140,1,130,44,76,119,85,234,99,159,170,144,110,185,215,187,7,83,64,164, 84,104,129,144,90,16,88,247,98,49,254,156,118,117,254,195,27,99,154,18,3,40,100,115,178,55,56,128,200,167,107,49, 224,116,181,15,34,12,3,140,248,25,2,228,36,8,1,254,254,72,74,64,249,40,160,28,14,247,239,140,3,76,111,200, 30,100,236,114,206,176,54,5,190,65,33,251,96,3,236,14,88,86,6,251,224,220,165,190,27,244,16,111,176,0,63,25, 7,1,190,7,248,144,127,6,3,67,162,183,244,93,83,82,16,117,66,245,34,76,234,39,56,141,112,2,36,96,30,247, 97,226,247,163,26,147,203,113,0,230,199,1,80,16,247,164,38,30,36,8,146,207,118,36,48,18,226,194,70,146,193,216, 78,160,22,4,226,116,248,130,58,249,66,66,5,79,12,76,206,248,66,79,190,30,33,202,29,78,250,239,47,224,28,111, 186,250,176,96,34,143,140,119,112,91,6,128,0,27,143,182,4,130,66,253,224,0,254,143,6,65,15,222,254,162,107,8, 14,245,7,98,12,4,143,230,254,1,246,240,163,6,2,15,2,0,15,238,0,160,22,249,1,234,28,176,170,254,15,236, 240,161,12,10,193,7,0,225,216,1,110,206,30,176,59,3,0,40,100,98,25,1,196,144,27,204,91,12,232,231,13,34, 14,1,240,59,12,134,205,14,2,26,230,41,44,247,44,22,196,130,98,153,64,22,8,143,146,2,224,84,31,34,14,2, 1,194,238,192,32,2,192,44,1,225,230,29,64,30,251,240,108,3,32,28,1,193,206,30,65,228,236,175,194,173,113,46, 116,74,178,252,112,144,150,113,50,138,241,58,138,237,227,20,227,232,254,33,64,18,193,74,49,208,38,66,81,60,2,112, 72,51,80,82,38,175,156,38,161,226,1,177,27,17,226,15,23,48,107,17,208,92,30,224,72,1,224,72,30,68,172,146, 209,31,23,193,224,29,65,213,22,226,14,28,37,83,17,113,118,29,81,125,24,17,35,6,169,198,32,208,111,27,38,16, 248,231,224,49,193,231,6,65,239,7,75,59,6,241,54,85,241,64,38,208,141,20,34,41,10,192,28,31,97,235,27,100, 161,8,79,201,30,145,216,27,161,170,185,164,237,23,81,128,85,16,124,1,47,212,49,241,170,29,79,145,32,16,231,5, 112,91,23,177,116,156,35,232,30,33,185,32,175,213,24,81,136,30,80,89,5,194,43,26,241,39,19,131,29,19,47,194, 30,81,44,97,17,41,18,209,205,27,79,142,38,207,140,114,145,206,38,177,221,30,17,49,36,162,15,29,113,231,9,209, 235,10,242,88,49,225,231,10,112,171,10,226,67,37,143,232,254,194,13,10,192,55,38,177,82,253,193,186,25,144,78,119, 96,44,30,81,129,23,208,231,32,145,123,41,41,63,37,49,71,35,227,37,30,82,25,35,49,45,34,178,152,50,18,82, 34,178,43,14,96,26,5,227,38,28,242,174,49,241,143,44,177,76,62,178,166,246,38,63,29,48,184,34,143,231,38,145, 227,9,47,200,36,49,220,34,1,203,39,207,228,62,178,110,1,114,131,46,114,127,46,82,243,30,178,101,9,175,226,254, 239,1,39,80,179,11,97,231,40,161,224,1,224,44,105,168,170,73,6,6,255,167,118,30,97,162,1,242,195,23,179,49, 35,8,170,248,210,175,45,99,245,52,18,58,35,146,179,33,234,229,34,49,255,32,39,119,33,113,206,1,209,51,35,194, 65,52,81,60,62,129,169,52,145,77,20,18,238,240,81,227,19,18,66,99,210,221,45,197,95,37,115,1,37,227,31,46, 49,55,40,82,251,47,241,183,56,129,229,57,195,113,55,98,40,25,193,196,28,67,34,236,165,131,45,131,41,52,211,102, 75,242,198,36,49,128,3,178,195,54,82,65,59,224,28,35,129,229,44,147,75,20,146,65,20,146,191,5,81,177,43,208, 91,51,198,21,21,19,237,37,82,229,30,67,223,11,19,6,254,81,237,46,144,129,57,211,164,254,211,139,49,49,223,64, 162,43,10,193,231,30,16,128,32,32,128,51,156,78,32,240,0,50,226,0,57,224,161,151,139,169,234,15,18,2,192,15, 32,4,84,1,8,115,197,163,81,184,92,89,226,243,104,188,65,161,104,180,116,28,231,120,185,93,82,32,176,120,29,23, 138,75,163,113,185,75,170,61,35,7,188,230,209,80,120,110,73,22,121,6,99,82,120,180,190,39,21,163,69,0,20,154, 8,58,137,51,153,130,232,79,87,59,202,131,75,115,131,170,64,10,165,42,147,72,141,129,65,96,231,219,214,149,27,171, 211,234,22,176,5,138,201,102,139,91,163,79,87,43,236,0,13,185,0,34,85,203,45,158,103,110,190,222,109,119,72,8, }; const unsigned char S21FX[122] = { 120,24,251,194,48,169,0,33,91,170,116,12,226,32,162,123,67,154,165,254,208,3,108,252,255,32,247,33,201,33,208,242, 32,247,33,201,102,208,235,32,247,33,201,120,208,228,32,247,33,72,72,171,32,247,33,72,235,32,247,33,72,170,32,247, 33,240,31,32,247,33,235,32,247,33,168,32,247,33,240,20,36,254,16,252,165,255,157,0,0,232,136,208,243,32,247,33, 240,158,8,64,36,254,80,252,189,0,0,133,255,232,136,208,243,128,141,36,254,16,252,165,255,96, }; const unsigned char Boards[31896] = { 100,97,116,97,98,97,115,101,10,32,32,114,101,118,105,115,105,111,110,58,32,50,48,50,48,45,49,49,45,48,57,10, 10,47,47,66,111,97,114,100,115,32,40,80,114,111,100,117,99,116,105,111,110,41,10,10,100,97,116,97,98,97,115,101, 10,32,32,114,101,118,105,115,105,111,110,58,32,50,48,50,48,45,48,49,45,50,49,10,10,98,111,97,114,100,58,32, 66,65,78,68,65,73,45,80,84,45,57,50,51,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32, 99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48, 48,10,32,32,115,108,111,116,32,116,121,112,101,61,83,117,102,97,109,105,84,117,114,98,111,10,32,32,32,32,114,111, 109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58, 56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,114,97,109,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,54,102,44,101,48,45,101,102,58,48,48,48,48, 45,102,102,102,102,10,32,32,115,108,111,116,32,116,121,112,101,61,83,117,102,97,109,105,84,117,114,98,111,10,32,32, 32,32,114,111,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,44,99,48, 45,100,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,114,97, 109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58, 48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,66,83,67,45,49,65,53,66,57,80,45,48,49,10, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,49,48,45,49,55,58,53,48,48,48,45,53,102,102,102,32,109, 97,115,107,61,48,120,102,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101, 114,61,77,67,67,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,48,102,58,53,48,48,48, 45,53,102,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48, 45,55,102,102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116, 101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65, 77,32,99,111,110,116,101,110,116,61,68,111,119,110,108,111,97,100,10,32,32,32,32,32,32,115,108,111,116,32,116,121, 112,101,61,66,83,77,101,109,111,114,121,10,10,98,111,97,114,100,58,32,66,83,67,45,49,65,53,77,45,48,50,10, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97, 109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,58,56,48,48,48,45,102,102,102, 102,32,109,97,115,107,61,48,120,101,48,56,48,48,48,32,98,97,115,101,61,48,120,48,48,48,48,48,48,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,101,48,56,48,48,48,32,98,97,115,101,61,48,120,49,48,48,48,48,48,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48, 120,101,48,56,48,48,48,32,98,97,115,101,61,48,120,50,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56, 48,48,48,32,98,97,115,101,61,48,120,49,48,48,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48, 48,48,10,32,32,115,108,111,116,32,116,121,112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,99,48,45,101,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32, 66,83,67,45,49,65,55,77,45,40,48,49,44,49,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,49,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56,48,48,48, 32,98,97,115,101,61,48,120,48,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50, 48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56,48,48,48,32,98,97,115, 101,61,48,120,49,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,56,48,45,57,102, 58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56,48,48,48,32,98,97,115,101,61,48,120, 50,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,97,48,45,98,102,58,56,48,48, 48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56,48,48,48,32,98,97,115,101,61,48,120,49,48,48,48, 48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118, 101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48, 48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,115,108,111,116,32,116,121,112,101,61, 66,83,77,101,109,111,114,121,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,101,102,58,48, 48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,66,83,67,45,49,74,51,77,45,48,49,10,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45, 102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,44,99,48,45,100,102, 58,48,48,48,48,45,102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110, 116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44, 97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,115,108, 111,116,32,116,121,112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,50,48,45,51,102,44,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,54,48,45,55,100,44,101,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111, 97,114,100,58,32,66,83,67,45,49,74,53,77,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,52,48,45,53,102,44,99,48,45,100,102,58,48,48,48,48,45,102,102,102,102,10,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55, 102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,115,108,111,116,32,116,121,112,101,61,66,83,77,101, 109,111,114,121,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102, 58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,55,100, 44,101,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,66,83,67,45,49,76,51, 66,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,87,54, 53,67,56,49,54,83,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,50,50,48,48,45,50,51,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115, 107,61,48,120,52,48,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45, 102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,115,108,111,116,32,116,121, 112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48, 48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48, 10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,52,102,58,48,48,48,48,45,102,102, 102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,73, 110,116,101,114,110,97,108,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44, 56,48,45,98,102,58,51,48,48,48,45,51,55,102,102,32,115,105,122,101,61,48,120,56,48,48,10,10,98,111,97,114, 100,58,32,66,83,67,45,49,76,53,66,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105, 116,101,99,116,117,114,101,61,87,54,53,67,56,49,54,83,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,48,48,45,51,102,44,56,48,45,98,102,58,50,50,48,48,45,50,51,102,102,10,32,32,32,32,109,99,117,10,32, 32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48, 48,45,102,102,102,102,32,109,97,115,107,61,48,120,52,48,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32, 32,32,32,115,108,111,116,32,116,121,112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115, 105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45, 52,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77, 32,99,111,110,116,101,110,116,61,73,110,116,101,114,110,97,108,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,55,102,102,32,115,105,122,101,61,48, 120,56,48,48,10,10,98,111,97,114,100,58,32,83,71,66,45,82,45,49,48,10,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44, 99,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,112,114, 111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,73,67,68,32,114,101,118,105,115,105,111,110,61, 50,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48, 48,48,45,54,55,102,102,44,55,48,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,79,77,32,99,111,110,116,101,110,116,61,66,111,111,116,32,97,114,99,104,105,116,101,99,116,117,114,101,61, 83,77,56,51,10,32,32,32,32,115,108,111,116,32,116,121,112,101,61,71,97,109,101,66,111,121,10,10,98,111,97,114, 100,58,32,83,72,86,67,45,49,65,48,78,45,40,48,49,44,48,50,44,49,48,44,50,48,44,51,48,41,10,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56, 48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,65,49,66,45,40,48,52,44,48,53,44,48,54,41, 10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114, 97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56, 48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121, 112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100, 58,32,83,72,86,67,45,49,65,49,77,45,40,48,49,44,49,48,44,49,49,44,50,48,41,10,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102, 102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45, 55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10, 98,111,97,114,100,58,32,83,72,86,67,45,49,65,51,66,45,40,49,49,44,49,50,44,49,51,41,10,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102, 102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65, 77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55, 48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86, 67,45,49,65,51,66,45,50,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116, 101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55, 100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102, 102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,65,51,77, 45,40,49,48,44,50,48,44,50,49,44,51,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48, 48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118, 101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48, 48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67, 45,49,65,53,66,45,40,48,50,44,48,52,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32, 99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48, 48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101, 10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48, 48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,65,53,77,45,40,48,49,44,49,49,44, 50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102, 102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115, 107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,66,48,78,45,40,48,50,44,48, 51,44,49,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61, 80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48, 45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,112,114,111,99, 101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,51,48,45,51,102,44,98,48,45,98,102,58,56,48,48,48,45,102,102,102,102, 32,109,97,115,107,61,48,120,51,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80, 68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110, 116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99, 104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114, 10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,66,53,66,45,48,50,10,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116, 101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102, 48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105, 116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 50,48,45,51,102,44,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,51,102,102, 102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104, 105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117, 80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,83,72, 86,67,45,49,67,48,78,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101, 61,71,83,85,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,51,48,48,48,45,51,52,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99, 111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48, 48,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83, 97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,55,100,44,101,48,45,102, 102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,67,48,78,53,83,45, 48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,71,83,85,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48, 45,51,52,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110, 116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49, 102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32, 32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,55,100,44,101,48,45,102,102,58,48,48,48, 48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,67,65,48,78,53,83,45,48,49,10,32, 32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,71,83,85,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,52,102, 102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,44,99,48,45,100,102,58,48,48,48,48,45,102,102,102, 102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97, 118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,55,48,45,55,49,44,102,48,45,102,49,58,48,48,48,48,45,102,102,102,102,10,10, 98,111,97,114,100,58,32,83,72,86,67,45,49,67,65,48,78,54,83,45,48,49,10,32,32,112,114,111,99,101,115,115, 111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,71,83,85,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,52,102,102,10,32,32,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,52,48,45,53,102,44,99,48,45,100,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102, 102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,55,48,45,55,49,44,102,48,45,102,49,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83, 72,86,67,45,49,67,65,54,66,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101, 99,116,117,114,101,61,71,83,85,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44, 56,48,45,98,102,58,51,48,48,48,45,51,52,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107, 61,48,120,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,44, 99,48,45,100,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120, 50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,49,44,102,48,45, 102,49,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,67,66,48,78,55, 83,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,71,83, 85,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48, 48,48,45,51,52,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116, 101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48, 45,51,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45, 55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,55,48,45,55,49,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67,45, 49,67,66,53,66,45,40,48,49,44,50,48,41,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116, 101,99,116,117,114,101,61,71,83,85,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102, 44,56,48,45,98,102,58,51,48,48,48,45,51,52,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48, 48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,58,48,48,48,48,45, 102,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116, 61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,49,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97, 114,100,58,32,83,72,86,67,45,49,67,66,55,66,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114, 99,104,105,116,101,99,116,117,114,101,61,71,83,85,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48, 48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,52,102,102,10,32,32,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,53,102,58,48, 48,48,48,45,102,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110, 116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51, 102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,49,58,48,48,48,48,45,102,102,102,102,10, 10,98,111,97,114,100,58,32,83,72,86,67,45,49,68,67,48,78,45,48,49,10,32,32,112,114,111,99,101,115,115,111, 114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,72,71,53,49,66,83,49,54,57,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,99,48,48,45,54,102,102,102,44,55, 99,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110, 116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48, 48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48, 10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118, 101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,55,58,48,48,48,48,45,55, 102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61, 68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,72,71,53,49,66,83,49,54,57,10,32,32,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99, 104,105,116,101,99,116,117,114,101,61,72,71,53,49,66,83,49,54,57,10,32,32,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,54,98,102,102,44,55,48,48,48, 45,55,98,102,102,32,109,97,115,107,61,48,120,102,48,48,48,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114, 10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,68,83,48,66,45,50,48,10,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109, 97,115,107,61,48,120,56,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116, 117,114,101,61,117,80,68,57,54,48,53,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45, 54,55,44,101,48,45,101,55,58,48,48,48,48,45,51,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121, 112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116, 117,114,101,61,117,80,68,57,54,48,53,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,57,54, 48,53,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61, 68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,57,54,48,53,48,10,32,32,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,54,56,45,54,102,44,101,56,45,101,102,58,48,48,48,48,45,55,102, 102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98, 111,97,114,100,58,32,83,72,86,67,45,49,74,48,78,45,40,48,49,44,49,48,44,50,48,41,10,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102, 102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48, 48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,74,49,77,45,40,49,49,44,50, 48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111, 103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100, 44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48, 48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,74,51,66,45,48,49,10,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45, 102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83, 97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58, 54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97,114,100,58,32,83,72, 86,67,45,49,74,51,77,45,40,48,49,44,49,49,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102, 10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48, 45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49, 74,53,77,45,40,48,49,44,49,49,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102, 102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,75,48,78,45, 48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111, 103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100, 44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99, 104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,48,48,45,49,102,44,56,48,45,57,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,102, 102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80, 114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99, 104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61, 117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,83, 72,86,67,45,49,75,49,66,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111, 110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48, 45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109, 97,115,107,61,48,120,101,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116, 117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49, 102,44,56,48,45,57,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,102,102,102,10,32,32,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109, 32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116, 117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50, 53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,75, 49,88,45,49,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61, 80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48, 45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120, 101,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80, 68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57, 102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,102,102,102,10,32,32,32,32,109,101,109,111,114, 121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105, 116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80, 68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110, 116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32, 111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,76,48,78,51,83,45,48, 49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,87,54,53,67,56, 49,54,83,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58, 50,50,48,48,45,50,51,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48, 120,52,48,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58, 48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32, 99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120, 50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,52,102,58,48,48,48, 48,45,102,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101, 110,116,61,73,110,116,101,114,110,97,108,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48, 45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,55,102,102,32,115,105,122,101,61,48,120,56,48,48,10,10, 98,111,97,114,100,58,32,83,72,86,67,45,49,76,51,66,45,40,48,50,44,49,49,41,10,32,32,112,114,111,99,101, 115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,87,54,53,67,56,49,54,83,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,50,50,48,48,45,50,51,102,102, 10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102, 44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,52,48,56,48,48,48,10,32, 32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102, 10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80, 114,111,103,114,97,109,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101, 110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44, 56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,52,102,58,48,48,48,48,45,102,102,102,102,10,32,32, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,73,110,116,101,114,110, 97,108,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,51,48,48,48,45,51,55,102,102,32,115,105,122,101,61,48,120,56,48,48,10,10,98,111,97,114,100,58,32,83,72, 86,67,45,49,76,53,66,45,40,49,49,44,50,48,41,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104, 105,116,101,99,116,117,114,101,61,87,54,53,67,56,49,54,83,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,48,48,45,51,102,44,56,48,45,98,102,58,50,50,48,48,45,50,51,102,102,10,32,32,32,32,109,99,117,10, 32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48, 48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,52,48,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32, 32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48, 48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,52,48,45,52,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,73,110,116,101,114,110,97,108,10,32,32,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,55,102, 102,32,115,105,122,101,61,48,120,56,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,49,78,48,78,45,40, 48,49,44,49,48,41,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,83,68, 68,49,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,52, 56,48,48,45,52,56,48,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109, 10,10,98,111,97,114,100,58,32,83,72,86,67,45,50,65,48,78,45,48,49,35,65,10,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,48,48,45,50,102,44,56,48,45,97,102,58,56,48,48,48,45,102,102,102,102,32, 109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,54, 102,44,99,48,45,101,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98, 111,97,114,100,58,32,83,72,86,67,45,50,65,48,78,45,40,48,49,44,49,48,44,49,49,44,50,48,41,10,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56, 48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,50,65,49,77,45,48,49,10,32,32,109,101,109,111,114, 121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102, 32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99, 111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55, 100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98, 111,97,114,100,58,32,83,72,86,67,45,50,65,51,66,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116, 61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102, 102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32, 83,72,86,67,45,50,65,51,77,45,48,49,35,65,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48, 48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118, 101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48, 48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67, 45,50,65,51,77,45,40,48,49,44,49,49,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120, 56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83, 97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58, 48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72, 86,67,45,50,65,53,77,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110, 116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45, 55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55, 102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,50,66,51, 66,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80, 114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114, 121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97, 115,107,61,48,120,56,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117, 114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,54,102, 44,101,48,45,101,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,51,102,102,102,10,32,32,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109, 32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116, 117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50, 53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,83,72,86,67,45,50,68, 67,48,78,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61, 72,71,53,49,66,83,49,54,57,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44, 56,48,45,98,102,58,54,99,48,48,45,54,102,102,102,44,55,99,48,48,45,55,102,102,102,10,32,32,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,55,48,45,55,55,58,48,48,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117, 114,101,61,72,71,53,49,66,83,49,54,57,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77, 32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,72,71,53,49,66, 83,49,54,57,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,54,48,48,48,45,54,98,102,102,44,55,48,48,48,45,55,98,102,102,32,109,97,115,107,61,48,120,102,48, 48,48,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,83,72,86,67,45,50, 69,51,77,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116, 61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56, 48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,112,114,111, 99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,79,66,67,49,10,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115, 107,61,48,120,101,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,49,44,102, 48,45,102,49,58,54,48,48,48,45,55,102,102,102,44,101,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120, 101,48,48,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116, 61,83,97,118,101,10,10,98,111,97,114,100,58,32,83,72,86,67,45,50,74,48,78,45,40,48,49,44,49,48,44,49, 49,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61, 80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48, 45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,83,72,86,67, 45,50,74,51,77,45,40,48,49,44,49,49,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,49,48,45,49,102,44,51,48,45,51,102,44,57,48,45,57,102,44, 98,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97, 114,100,58,32,83,72,86,67,45,50,74,53,77,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,49,48,45,49,102,44,51,48,45,51,102,44,57,48,45,57,102,44, 98,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97, 114,100,58,32,83,72,86,67,45,51,74,48,78,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,48,48,45,50,102,44,56,48,45,97,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,52,48,45,54,102,44,99,48,45,101,102,58,48,48,48,48,45,102,102,102,102,10,10, 98,111,97,114,100,58,32,83,72,86,67,45,66,65,48,78,45,40,48,49,44,49,48,41,10,32,32,109,101,109,111,114, 121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102, 32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45, 55,100,44,99,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10, 98,111,97,114,100,58,32,83,72,86,67,45,66,65,49,77,45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107, 61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110, 116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45, 102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58, 32,83,72,86,67,45,66,65,51,77,45,40,48,49,44,49,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116, 61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102, 102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32, 83,72,86,67,45,66,74,48,78,45,40,48,49,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10, 10,98,111,97,114,100,58,32,83,72,86,67,45,66,74,49,77,45,40,49,48,44,50,48,41,10,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102, 102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48, 48,48,45,102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110, 116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45, 98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97,114,100,58, 32,83,72,86,67,45,66,74,51,77,45,40,49,48,44,50,48,41,10,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102, 10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48, 45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,76, 68,72,51,67,45,48,49,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,83, 80,67,55,49,49,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,52,56,48,48,45,52,56,51,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,53,48,44, 53,56,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115, 107,61,48,120,56,48,48,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45, 102,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,32,32,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109, 10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68, 97,116,97,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61, 83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,114,116,99,32,109, 97,110,117,102,97,99,116,117,114,101,114,61,69,112,115,111,110,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,48,48,45,51,102,44,56,48,45,98,102,58,52,56,52,48,45,52,56,52,50,10,32,32,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,84,67,32,99,111,110,116,101,110,116,61,84,105,109,101,32,109,97,110,117,102,97,99, 116,117,114,101,114,61,69,112,115,111,110,10,10,98,111,97,114,100,58,32,83,72,86,67,45,76,74,51,77,45,48,49, 10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114, 97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,58,56,48,48,48,45,102,102, 102,102,32,98,97,115,101,61,48,120,52,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,52,48,45,55,100,58,48,48,48,48,45,102,102,102,102,32,98,97,115,101,61,48,120,52,48,48,48,48,48,10,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109, 97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45, 102,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48, 120,101,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,76,78,51,66,45,48,49,10,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32, 109,97,115,107,61,48,120,101,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55, 51,58,48,48,48,48,45,102,102,102,102,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105, 101,114,61,83,68,68,49,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,52,56,48,48,45,52,56,48,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10, 32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,10,10,98,111,97,114,100,58,32,83,72,86,67,45,83,71,66,50,45,48,49,10,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102, 102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52, 48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48, 10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,73,67,68,32,114,101,118,105, 115,105,111,110,61,50,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,54,48,48,48,45,54,55,102,102,44,55,48,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114, 121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,66,111,111,116,32,97,114,99,104,105,116,101,99, 116,117,114,101,61,83,77,56,51,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,32,32,32,32,115,108,111, 116,32,116,121,112,101,61,71,97,109,101,66,111,121,10,10,98,111,97,114,100,58,32,83,72,86,67,45,89,65,48,78, 45,48,49,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102, 102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97, 115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,83,72,86,67,45,89,74,48,78,45,48,49,10,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109, 10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48, 48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45, 102,102,58,48,48,48,48,45,102,102,102,102,10,10,47,47,66,111,97,114,100,115,32,40,71,101,110,101,114,105,99,41, 10,10,100,97,116,97,98,97,115,101,10,32,32,114,101,118,105,115,105,111,110,58,32,50,48,50,48,45,49,49,45,48, 57,10,10,98,111,97,114,100,58,32,65,82,77,45,76,79,82,79,77,45,82,65,77,10,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32, 109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,54, 102,44,99,48,45,101,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32, 109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,102,102, 102,102,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,65,82,77,54, 10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,56,48, 48,45,51,56,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101, 110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,65,82,77,54,10,32,32,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114, 99,104,105,116,101,99,116,117,114,101,61,65,82,77,54,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,65,82, 77,54,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,66,83,45,72,73,82, 79,77,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116, 61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56, 48,45,57,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52, 48,45,53,102,44,99,48,45,100,102,58,48,48,48,48,45,102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121, 112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48, 120,101,48,48,48,10,32,32,115,108,111,116,32,116,121,112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102, 10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,55,100,44,101,48,45,102,102,58,48,48,48, 48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,66,83,45,76,79,82,79,77,45,82,65,77,10,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,58,56,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,101,48,56,48,48,48,32,98,97,115,101,61,48,120,48,48,48,48,48,48,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48, 120,101,48,56,48,48,48,32,98,97,115,101,61,48,120,49,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56, 48,48,48,32,98,97,115,101,61,48,120,50,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,56,48,48,48,32, 98,97,115,101,61,48,120,49,48,48,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45, 55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32, 32,115,108,111,116,32,116,121,112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,99,48,45,101,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,66,83,45,77, 67,67,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116, 61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,49,48,45,49,55,58,53,48,48,48, 45,53,102,102,102,32,109,97,115,107,61,48,120,102,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100, 101,110,116,105,102,105,101,114,61,77,67,67,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45, 48,102,58,53,48,48,48,45,53,102,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45, 102,102,102,102,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45, 98,102,58,54,48,48,48,45,55,102,102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,111,119,110,108,111,97,100,10,32,32,32,32,32,32, 115,108,111,116,32,116,121,112,101,61,66,83,77,101,109,111,114,121,10,10,98,111,97,114,100,58,32,66,83,45,83,65, 49,45,82,65,77,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,87, 54,53,67,56,49,54,83,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,50,50,48,48,45,50,51,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,52,48,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48, 45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,115,108,111,116,32,116, 121,112,101,61,66,83,77,101,109,111,114,121,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77, 32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48, 48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,52,102,58,48,48,48,48,45,102, 102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61, 73,110,116,101,114,110,97,108,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102, 44,56,48,45,98,102,58,51,48,48,48,45,51,55,102,102,32,115,105,122,101,61,48,120,56,48,48,10,10,98,111,97, 114,100,58,32,69,86,69,78,84,45,67,67,57,50,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77, 32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48, 45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10, 32,32,112,114,111,99,101,115,115,111,114,32,109,97,110,117,102,97,99,116,117,114,101,114,61,78,69,67,32,97,114,99, 104,105,116,101,99,116,117,114,101,61,117,80,68,55,56,50,49,52,10,32,32,32,32,105,100,101,110,116,105,102,105,101, 114,58,32,67,97,109,112,117,115,32,67,104,97,108,108,101,110,103,101,32,39,57,50,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,99,48,44,101,48,58,48,48,48,48,10,32,32,32,32,109,99,117,10,32,32,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102, 102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116, 61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99, 111,110,116,101,110,116,61,76,101,118,101,108,45,49,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,76,101,118,101,108,45,50,10,32,32,32,32,32,32,109,101,109,111,114, 121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,76,101,118,101,108,45,51,10,32,32,32,32,100, 105,112,10,32,32,112,114,111,99,101,115,115,111,114,32,109,97,110,117,102,97,99,116,117,114,101,114,61,78,69,67,32, 97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101, 110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10, 32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97, 32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116, 117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114, 100,58,32,69,86,69,78,84,45,80,70,57,52,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,51,48,45, 51,102,44,98,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32, 32,112,114,111,99,101,115,115,111,114,32,109,97,110,117,102,97,99,116,117,114,101,114,61,78,69,67,32,97,114,99,104, 105,116,101,99,116,117,114,101,61,117,80,68,55,56,50,49,52,10,32,32,32,32,105,100,101,110,116,105,102,105,101,114, 58,32,80,111,119,101,114,70,101,115,116,32,39,57,52,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 49,48,44,50,48,58,54,48,48,48,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32, 32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114, 97,109,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116, 61,76,101,118,101,108,45,49,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99, 111,110,116,101,110,116,61,76,101,118,101,108,45,50,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,76,101,118,101,108,45,51,10,32,32,32,32,100,105,112,10,32,32,112, 114,111,99,101,115,115,111,114,32,109,97,110,117,102,97,99,116,117,114,101,114,61,78,69,67,32,97,114,99,104,105,116, 101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48, 48,45,48,102,44,56,48,45,56,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,102,102,102,10, 32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103, 114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116, 101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68, 55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,69,88,72,73, 82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,58,56,48,48,48, 45,102,102,102,102,32,98,97,115,101,61,48,120,52,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,52,48,45,55,100,58,48,48,48,48,45,102,102,102,102,32,98,97,115,101,61,48,120,52,48,48,48,48, 48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,56,48,45,98,102,58,56,48,48,48,45,102,102,102, 102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,10,98, 111,97,114,100,58,32,69,88,72,73,82,79,77,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,98,97,115,101,61,48,120,52,48,48,48,48, 48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,58,48,48,48,48,45,102,102,102, 102,32,98,97,115,101,61,48,120,52,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,99,48,48,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111, 110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102, 44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,10,98,111, 97,114,100,58,32,69,88,72,73,82,79,77,45,82,65,77,45,83,72,65,82,80,82,84,67,10,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,58,56,48,48,48,45,102,102,102,102,32,98,97,115,101, 61,48,120,52,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,58, 48,48,48,48,45,102,102,102,102,32,98,97,115,101,61,48,120,52,48,48,48,48,48,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,99, 48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120, 101,48,48,48,10,32,32,114,116,99,32,109,97,110,117,102,97,99,116,117,114,101,114,61,83,104,97,114,112,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,50,56,48,48,45,50, 56,48,49,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,84,67,32,99,111,110,116,101,110,116,61, 84,105,109,101,32,109,97,110,117,102,97,99,116,117,114,101,114,61,83,104,97,114,112,10,10,98,111,97,114,100,58,32, 69,88,76,79,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110, 116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,58, 56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,56,48,48,48,32,98,97,115,101,61,48,120,52, 48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,56,48,45,102,102,58,56,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,56,48,48,48,32,98,97,115,101,61,48,120,48,48,48,48,48, 48,10,10,98,111,97,114,100,58,32,69,88,76,79,82,79,77,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32, 97,100,100,114,101,115,115,61,48,48,45,55,100,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56, 48,56,48,48,48,32,98,97,115,101,61,48,120,52,48,48,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,56,48,48, 48,32,98,97,115,101,61,48,120,48,48,48,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65, 77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55, 48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48, 10,10,98,111,97,114,100,58,32,69,88,78,69,67,45,76,79,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121, 112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115, 107,61,48,120,56,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114, 101,61,117,80,68,57,54,48,53,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,54,55, 44,101,48,45,101,55,58,48,48,48,48,45,51,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114, 101,61,117,80,68,57,54,48,53,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99, 111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,57,54,48,53, 48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97, 116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,57,54,48,53,48,10,32,32,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,54,56,45,54,102,44,101,56,45,101,102,58,48,48,48,48,45,55,102,102,102, 32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97, 114,100,58,32,69,88,83,80,67,55,49,49,48,45,82,65,77,45,69,80,83,79,78,82,84,67,10,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,69,120,112,97,110,115,105,111,110,10,32, 32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,52,102,58,48,48,48,48,45,102,102,102,102,10,32, 32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,83,80,67,55,49,49,48,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,52,56,48,48,45,52, 56,51,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,53,48,44,53,56,58,48,48,48,48,45,102, 102,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48, 45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,48, 48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102, 102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,10,32,32,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55, 102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,114,116,99,32,109,97,110,117,102,97,99,116,117,114, 101,114,61,69,112,115,111,110,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56, 48,45,98,102,58,52,56,52,48,45,52,56,52,50,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82, 84,67,32,99,111,110,116,101,110,116,61,84,105,109,101,32,109,97,110,117,102,97,99,116,117,114,101,114,61,69,112,115, 111,110,10,10,98,111,97,114,100,58,32,71,66,45,76,79,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107, 61,48,120,56,48,48,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48, 45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,112,114,111,99, 101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,73,67,68,32,114,101,118,105,115,105,111,110,61,50,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48, 45,54,55,102,102,44,55,48,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,79,77,32,99,111,110,116,101,110,116,61,66,111,111,116,32,97,114,99,104,105,116,101,99,116,117,114,101,61,83,77, 56,51,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,32,32,32,32,115,108,111,116,32,116,121,112,101,61, 71,97,109,101,66,111,121,10,10,98,111,97,114,100,58,32,71,83,85,45,82,65,77,10,32,32,112,114,111,99,101,115, 115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,71,83,85,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,52,102,102,10,32,32,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32, 32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48, 48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,52,48,45,53,102,44,99,48,45,100,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55, 102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,55,48,45,55,49,44,102,48,45,102,49,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32, 72,73,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61, 80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48, 45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10,98,111,97,114,100,58,32,72,73,82,79, 77,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61, 80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48, 45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,52,48, 45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120, 101,48,48,48,10,10,98,111,97,114,100,58,32,72,73,84,65,67,72,73,45,76,79,82,79,77,10,32,32,112,114,111, 99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,72,71,53,49,66,83,49,54,57,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,99,48,48,45,54, 102,102,102,44,55,99,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79, 77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48, 120,56,48,48,48,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110, 116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,55,58,48, 48,48,48,45,55,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110, 116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,72,71,53,49,66,83,49,54,57, 10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116, 97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,72,71,53,49,66,83,49,54,57,10,32,32,32,32,32,32,109, 97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,54,98,102,102, 44,55,48,48,48,45,55,98,102,102,32,109,97,115,107,61,48,120,102,48,48,48,10,32,32,32,32,111,115,99,105,108, 108,97,116,111,114,10,10,98,111,97,114,100,58,32,76,79,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107, 61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32,76,79,82,79,77,45,82,65,77,10,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,55,100,44,56,48,45,102,102,58,56,48,48,48,45,102,102,102, 102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32, 99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45, 55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10, 98,111,97,114,100,58,32,76,79,82,79,77,45,82,65,77,35,65,10,32,32,109,101,109,111,114,121,32,116,121,112,101, 61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116, 61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,100,44,102,48,45,102, 102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,10,98,111,97,114,100,58,32, 78,69,67,45,72,73,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116, 101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51, 102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115, 115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,112,114,111,99,101,115, 115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,54,48,48,48,45,55,102,102,102,32,109, 97,115,107,61,48,120,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111, 110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55, 50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68, 97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116, 101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98, 111,97,114,100,58,32,78,69,67,45,72,73,82,79,77,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32, 109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,55,100,44,99,48,45,102,102,58,48,48,48,48,45,102,102,102, 102,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101, 10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,54,48,48, 48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,97, 114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48, 120,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116, 61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97, 114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114, 101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10,10,98,111,97,114,100,58, 32,78,69,67,45,76,79,82,79,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110, 116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45, 49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32, 32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,51,48,45,51,102,44,98,48,45,98,102,58,56,48,48,48, 45,102,102,102,102,32,109,97,115,107,61,48,120,51,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117, 114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99, 111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53, 10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116, 97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108, 108,97,116,111,114,10,10,98,111,97,114,100,58,32,78,69,67,45,76,79,82,79,77,45,82,65,77,10,32,32,109,101, 109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102, 102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65, 77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,55, 48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48, 10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50, 53,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45,54,102,44,101,48,45,101,102,58,48,48, 48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,51,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99, 116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55, 50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68, 97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99, 105,108,108,97,116,111,114,10,10,98,111,97,114,100,58,32,78,69,67,45,76,79,82,79,77,45,82,65,77,35,65,10, 32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97, 109,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48, 48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,109,101,109,111,114,121,32,116,121,112, 101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101, 115,115,61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,112,114,111,99,101, 115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,50,48,45,51,102,44,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32, 109,97,115,107,61,48,120,51,102,102,102,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32, 99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68, 55,55,50,53,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116, 61,68,97,116,97,32,97,114,99,104,105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,68,97,116,97,32,97,114,99,104, 105,116,101,99,116,117,114,101,61,117,80,68,55,55,50,53,10,32,32,32,32,111,115,99,105,108,108,97,116,111,114,10, 10,98,111,97,114,100,58,32,79,66,67,49,45,76,79,82,79,77,45,82,65,77,10,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109, 97,115,107,61,48,120,56,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101, 114,61,79,66,67,49,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,32,32,109,97,112, 32,97,100,100,114,101,115,115,61,55,48,45,55,49,44,102,48,45,102,49,58,54,48,48,48,45,55,102,102,102,44,101, 48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,32,32,109,101,109,111,114,121,32, 116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,10,98,111,97,114,100,58,32,83,65, 49,10,32,32,112,114,111,99,101,115,115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,87,54,53,67,56, 49,54,83,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58, 50,50,48,48,45,50,51,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114, 101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48, 120,52,48,56,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58, 48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32, 99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61, 82,65,77,32,99,111,110,116,101,110,116,61,73,110,116,101,114,110,97,108,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,51,48,48,48,45,51,55,102,102,32,115,105,122, 101,61,48,120,56,48,48,10,10,98,111,97,114,100,58,32,83,65,49,45,82,65,77,10,32,32,112,114,111,99,101,115, 115,111,114,32,97,114,99,104,105,116,101,99,116,117,114,101,61,87,54,53,67,56,49,54,83,10,32,32,32,32,109,97, 112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,50,50,48,48,45,50,51,102,102,10, 32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44, 56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,52,48,56,48,48,48,10,32,32, 32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10, 32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114, 111,103,114,97,109,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110, 116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56, 48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,115,105,122,101,61,48,120,50,48,48,48,10,32,32,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,52,48,45,52,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32, 32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,73,110,116,101,114,110,97, 108,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58, 51,48,48,48,45,51,55,102,102,32,115,105,122,101,61,48,120,56,48,48,10,10,98,111,97,114,100,58,32,83,68,68, 49,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,83,68,68,49,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,52,56,48,48,45,52, 56,48,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48, 45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,32,32,109,101,109,111, 114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,10,98,111,97, 114,100,58,32,83,68,68,49,45,82,65,77,10,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99, 111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51, 102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,55,48,45,55,51,58,48,48,48,48,45,102,102,102,102,32,109,97, 115,107,61,48,120,56,48,48,48,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114, 61,83,68,68,49,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98, 102,58,52,56,48,48,45,52,56,48,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100, 100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,10,32,32,32,32, 32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,32,32, 32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103, 114,97,109,10,10,98,111,97,114,100,58,32,83,80,67,55,49,49,48,45,82,65,77,10,32,32,112,114,111,99,101,115, 115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,83,80,67,55,49,49,48,10,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,52,56,48,48,45,52,56,51,102,10,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,53,48,44,53,56,58,48,48,48,48,45,102,102,102,102,10,32,32,32, 32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45, 98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48,48,48,48,48,10,32,32,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115, 107,61,48,120,99,48,48,48,48,48,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77, 32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32,32,32,32,109,101,109,111,114,121,32,116,121, 112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116,97,10,32,32,32,32,109,101,109,111,114,121,32,116, 121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97,118,101,10,32,32,32,32,32,32,109,97,112,32,97, 100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,54,48,48,48,45,55,102,102,102,32,109,97,115, 107,61,48,120,101,48,48,48,10,10,98,111,97,114,100,58,32,83,80,67,55,49,49,48,45,82,65,77,45,69,80,83, 79,78,82,84,67,10,32,32,112,114,111,99,101,115,115,111,114,32,105,100,101,110,116,105,102,105,101,114,61,83,80,67, 55,49,49,48,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,52,56,48,48,45,52,56,51,102,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,53,48,44,53,56, 58,48,48,48,48,45,102,102,102,102,10,32,32,32,32,109,99,117,10,32,32,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,56,48,48,48,48,48,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,99,48,45,102,102, 58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,99,48,48,48,48,48,10,32,32,32,32,32,32,109, 101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32, 32,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,68,97,116, 97,10,32,32,32,32,109,101,109,111,114,121,32,116,121,112,101,61,82,65,77,32,99,111,110,116,101,110,116,61,83,97, 118,101,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,51,102,44,56,48,45,98,102, 58,54,48,48,48,45,55,102,102,102,32,109,97,115,107,61,48,120,101,48,48,48,10,32,32,114,116,99,32,109,97,110, 117,102,97,99,116,117,114,101,114,61,69,112,115,111,110,10,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61, 48,48,45,51,102,44,56,48,45,98,102,58,52,56,52,48,45,52,56,52,50,10,32,32,32,32,109,101,109,111,114,121, 32,116,121,112,101,61,82,84,67,32,99,111,110,116,101,110,116,61,84,105,109,101,32,109,97,110,117,102,97,99,116,117, 114,101,114,61,69,112,115,111,110,10,10,98,111,97,114,100,58,32,83,84,45,76,79,82,79,77,10,32,32,109,101,109, 111,114,121,32,116,121,112,101,61,82,79,77,32,99,111,110,116,101,110,116,61,80,114,111,103,114,97,109,10,32,32,32, 32,109,97,112,32,97,100,100,114,101,115,115,61,48,48,45,49,102,44,56,48,45,57,102,58,56,48,48,48,45,102,102, 102,102,32,109,97,115,107,61,48,120,56,48,48,48,10,32,32,115,108,111,116,32,116,121,112,101,61,83,117,102,97,109, 105,84,117,114,98,111,10,32,32,32,32,114,111,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,50,48,45,51,102,44,97,48,45,98,102,58,56,48,48,48,45,102,102,102,102,32,109,97,115,107,61,48,120,56,48, 48,48,10,32,32,32,32,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115,61,54,48,45, 54,102,44,101,48,45,101,102,58,48,48,48,48,45,102,102,102,102,10,32,32,115,108,111,116,32,116,121,112,101,61,83, 117,102,97,109,105,84,117,114,98,111,10,32,32,32,32,114,111,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100, 114,101,115,115,61,52,48,45,53,102,44,99,48,45,100,102,58,48,48,48,48,45,102,102,102,102,32,109,97,115,107,61, 48,120,56,48,48,48,10,32,32,32,32,114,97,109,10,32,32,32,32,32,32,109,97,112,32,97,100,100,114,101,115,115, 61,55,48,45,55,100,44,102,48,45,102,102,58,48,48,48,48,45,102,102,102,102,10,10, }; } namespace WonderSwan { const unsigned char Boot[4096] = { 250,184,0,0,139,208,139,232,142,208,188,0,32,142,216,142,192,230,181,176,4,230,160,228,181,138,216,208,235,115,5,234, 0,0,0,64,185,0,0,228,160,36,128,117,12,65,129,249,128,0,117,3,233,6,2,235,238,228,181,36,2,116,5,234, 16,0,0,64,176,8,230,160,184,48,1,231,188,176,64,230,190,191,0,0,185,0,32,184,0,0,252,243,171,184,240,63, 142,192,187,252,0,38,138,7,190,2,7,136,4,36,12,230,160,176,158,230,22,176,155,230,23,51,192,230,16,230,17,230, 136,230,137,230,138,230,139,230,5,230,6,230,144,230,145,176,12,230,4,184,32,100,231,28,184,168,252,231,30,176,1,230, 7,230,20,184,48,117,231,48,190,0,6,187,48,0,185,16,0,154,71,8,0,255,61,0,0,116,3,233,127,1,137,20, 131,198,2,67,226,235,190,0,6,185,16,0,128,60,43,114,3,198,4,0,70,226,245,178,153,154,50,10,0,255,178,153, 154,50,10,0,255,178,18,154,50,10,0,255,178,49,154,50,10,0,255,128,60,2,118,3,198,4,0,70,128,60,4,118, 3,198,4,0,184,176,255,142,192,187,189,2,190,0,32,185,232,1,38,138,7,136,4,136,68,1,131,198,2,67,226,242, 185,61,0,187,189,2,154,14,9,0,255,187,152,0,199,7,72,10,199,71,2,0,255,176,32,230,176,176,64,230,182,230, 178,176,64,230,181,185,15,0,226,254,228,181,168,2,116,12,190,22,7,198,4,1,154,63,2,0,255,250,187,2,7,138, 7,36,1,187,20,7,136,7,60,1,117,6,176,2,230,21,235,4,176,4,230,21,154,166,8,0,255,154,165,7,0,255, 190,22,7,198,4,2,251,244,190,24,7,128,60,0,116,247,250,51,192,230,178,176,255,230,182,190,0,6,131,124,30,255, 116,3,255,68,30,184,240,63,142,192,187,246,0,38,139,7,38,138,87,2,59,68,22,117,5,58,84,24,116,15,137,68, 22,136,84,24,128,124,28,255,116,3,254,68,28,187,48,0,185,16,0,139,20,154,116,8,0,255,61,0,0,116,3,233, 91,0,131,198,2,67,226,235,190,249,0,38,138,4,36,128,117,4,176,128,230,190,51,192,231,0,230,7,230,4,230,5, 230,6,230,176,230,144,230,145,230,143,184,0,0,142,192,191,0,0,185,0,32,184,0,0,252,243,171,185,13,0,184,0, 255,142,216,190,48,2,191,0,4,243,164,234,0,4,0,0,228,160,36,140,12,1,230,160,234,0,0,255,255,244,244,250, 252,51,192,142,192,187,22,7,198,7,1,185,0,4,191,0,8,243,171,185,11,0,191,64,6,190,0,6,243,165,184,48, 117,231,34,184,0,80,231,32,176,7,230,6,184,176,255,142,192,187,42,6,198,7,0,232,108,1,232,203,0,176,5,231, 0,176,4,187,43,6,230,21,198,7,122,176,1,230,20,251,244,187,35,6,138,7,10,192,116,246,232,6,2,187,32,6, 154,226,2,0,255,232,203,4,232,94,1,187,43,6,254,15,117,4,176,0,230,21,187,42,6,246,7,1,117,8,187,35, 6,198,7,0,235,202,232,114,4,6,51,192,230,5,187,24,24,137,7,142,192,185,0,4,191,0,8,243,171,7,230,21, 250,203,176,32,230,181,185,15,0,226,254,228,181,36,15,138,224,176,64,230,181,185,15,0,226,254,228,181,36,15,177,4, 210,224,10,196,138,224,138,7,50,196,34,196,136,71,1,138,7,136,71,2,136,39,203,10,192,116,16,60,10,119,3,4, 27,195,60,36,119,3,44,10,195,4,2,195,10,192,116,23,60,27,116,5,119,6,4,10,195,50,192,195,60,38,116,249, 119,3,44,27,195,44,2,195,186,0,0,185,11,0,187,42,0,3,218,38,139,63,187,64,0,3,218,38,139,55,232,118, 0,66,66,226,233,190,0,6,191,48,6,187,150,8,185,16,0,138,4,136,7,232,159,255,136,5,71,70,67,67,226,241, 190,16,6,138,4,187,150,9,232,205,0,70,138,4,187,154,9,232,196,0,190,18,6,138,4,187,214,9,232,185,0,190, 19,6,138,4,187,22,10,232,174,0,187,20,6,138,7,177,3,210,224,180,0,190,167,0,3,240,191,150,10,232,23,0, 187,21,6,138,7,177,2,210,224,180,0,190,191,0,3,240,191,22,11,232,1,0,195,38,138,4,70,10,192,116,6,136, 5,71,71,235,242,195,187,0,24,51,192,185,28,0,137,7,131,195,2,226,249,187,24,24,186,44,0,137,23,187,39,6, 198,7,1,176,1,232,45,1,195,187,33,6,138,7,168,255,116,69,168,5,116,4,232,28,1,195,138,208,187,39,6,138, 7,180,0,72,120,26,116,28,122,7,72,116,27,123,29,235,35,64,123,28,246,194,64,116,30,187,42,6,198,7,1,195, 232,119,0,195,232,102,1,195,232,255,1,195,232,52,2,195,232,129,2,195,232,178,2,195,138,224,177,4,210,232,64,136, 7,138,196,36,15,64,136,71,2,195,96,190,86,0,182,0,3,242,3,242,38,139,28,67,208,224,185,28,0,128,39,241, 8,7,67,67,226,247,97,195,232,223,255,82,10,210,117,7,178,7,232,213,255,235,10,128,250,3,119,5,178,8,232,201, 255,90,195,187,36,6,254,7,128,39,31,117,12,228,5,10,192,176,6,116,2,50,192,230,5,195,138,194,187,40,6,138, 23,182,0,168,10,116,57,168,2,116,28,128,250,15,117,11,198,7,0,187,2,24,199,7,24,88,195,254,7,187,2,24, 187,3,24,128,7,8,195,128,250,0,117,11,198,7,15,187,2,24,199,7,24,208,195,254,15,187,3,24,128,47,8,195, 168,64,116,17,187,48,6,3,218,138,7,254,192,60,45,114,21,176,0,235,17,168,128,116,27,187,48,6,3,218,138,7, 44,1,115,2,176,44,136,7,191,150,8,3,250,3,250,232,250,253,136,5,195,187,39,6,138,23,168,1,116,7,10,210, 116,90,74,235,6,128,250,6,115,82,66,182,0,82,138,23,176,0,232,51,255,90,176,1,232,45,255,136,23,190,40,6, 198,4,0,190,41,6,198,4,0,190,28,0,3,242,3,242,38,139,4,187,26,24,137,7,128,196,8,187,2,24,128,250, 1,185,6,0,119,12,73,115,2,4,8,137,7,131,195,4,51,192,137,7,131,195,4,128,196,8,226,246,187,39,6,184, 0,80,128,63,6,117,3,184,48,117,231,32,195,138,194,187,41,6,138,23,182,0,168,10,116,54,168,2,116,25,128,250, 3,117,11,198,7,0,187,2,24,199,7,48,88,195,254,7,187,3,24,128,7,8,195,128,250,0,117,11,198,7,3,187, 2,24,199,7,48,112,195,254,15,187,3,24,128,47,8,195,168,192,116,85,187,150,9,190,16,6,128,250,2,114,4,70, 187,154,9,168,64,138,4,116,30,246,194,1,117,10,4,16,60,160,114,48,36,15,235,44,64,138,224,36,15,60,10,138, 196,114,33,36,240,235,29,246,194,1,117,14,168,240,116,4,44,16,235,16,36,15,12,144,235,10,168,15,117,5,36,240, 12,9,64,72,136,4,232,15,254,195,246,194,202,116,51,187,18,6,138,7,246,194,66,116,15,64,60,10,117,2,176,16, 60,19,114,22,176,1,235,18,10,192,117,1,64,72,60,15,117,2,176,9,10,192,117,2,176,18,136,7,187,214,9,232, 214,253,195,246,194,202,116,75,187,19,6,138,7,246,194,66,116,27,64,60,10,117,2,176,16,60,26,117,2,176,32,60, 42,117,2,176,48,60,50,114,34,176,1,235,30,10,192,117,1,64,72,60,15,117,2,176,9,60,31,117,2,176,25,60, 47,117,2,176,41,10,192,117,2,176,49,136,7,187,22,10,232,133,253,195,246,194,202,116,47,187,20,6,138,7,180,0, 246,194,136,116,8,72,121,13,184,2,0,235,8,254,192,60,3,114,2,176,0,136,7,177,3,210,224,180,0,190,167,0, 3,240,191,150,10,232,207,252,195,246,194,202,116,44,187,21,6,138,7,180,0,246,194,136,116,8,72,121,12,184,4,0, 235,7,64,60,5,114,2,176,0,136,7,208,224,208,224,190,191,0,3,240,191,22,11,232,157,252,195,190,48,6,191,0, 6,185,16,0,138,4,232,227,251,136,5,71,70,226,245,190,0,6,191,64,6,185,11,0,139,4,139,21,131,198,2,131, 199,2,59,194,117,3,226,240,195,187,29,6,254,7,117,2,254,15,195,187,37,6,191,32,6,138,5,190,34,6,58,4, 117,31,36,202,116,27,128,63,37,114,19,187,38,6,254,7,128,63,15,114,15,198,7,0,187,33,6,8,7,195,254,7, 195,198,7,0,195,30,96,51,192,230,136,230,137,230,138,230,139,230,144,187,80,7,137,71,2,137,71,4,199,7,1,0, 142,192,191,0,4,184,176,255,142,216,190,213,0,185,16,0,252,243,165,176,11,230,145,176,16,230,143,176,3,230,144,97, 31,203,6,96,187,80,7,131,63,1,117,88,184,176,255,142,192,131,127,4,0,117,74,139,119,2,38,139,132,254,0,231, 128,38,138,132,0,1,230,136,131,238,9,38,139,132,254,0,231,130,38,138,132,0,1,230,137,131,71,2,3,131,127,2, 117,114,12,199,7,0,0,51,192,230,136,230,137,235,18,131,127,2,81,114,7,199,71,4,3,0,235,5,199,71,4,1, 0,255,79,4,97,7,203,83,184,1,0,131,251,64,115,34,139,195,5,128,1,231,188,176,16,230,190,51,210,66,184,2, 0,131,250,32,116,12,228,190,36,1,116,241,229,186,139,208,51,192,91,203,82,83,184,1,0,131,251,64,115,37,139,195, 5,64,1,231,188,139,194,231,186,176,32,230,190,51,210,66,184,2,0,129,250,0,22,116,10,228,190,36,2,60,2,117, 238,51,192,91,90,203,184,0,112,231,32,184,0,80,231,34,184,0,64,231,36,184,0,48,231,38,184,0,32,231,40,184, 0,16,231,42,51,192,231,44,142,192,191,0,8,185,0,4,243,171,184,176,255,142,192,187,20,7,139,7,60,1,117,8, 187,187,1,191,154,9,235,6,187,115,1,191,22,9,185,6,0,81,185,6,0,38,139,7,137,5,131,199,2,131,195,2, 226,243,131,199,52,89,226,233,184,5,0,231,0,203,81,51,255,186,1,128,185,8,0,81,38,138,1,185,8,0,87,83, 51,255,139,222,132,198,116,5,8,17,8,81,1,208,238,131,199,2,226,240,91,95,182,128,208,226,71,89,226,217,131,198, 16,131,195,8,89,226,199,203,87,187,0,6,185,16,0,139,241,78,128,56,0,117,2,226,248,186,16,0,43,209,190,20, 7,128,60,1,117,10,208,226,208,226,129,194,8,80,235,14,138,194,138,240,50,210,208,230,208,230,129,194,96,48,131,249, 0,116,5,154,138,9,0,255,95,203,82,83,138,193,230,6,191,0,24,190,20,7,50,228,138,7,128,60,1,117,2,4, 61,137,5,137,85,2,67,131,199,4,128,60,1,117,5,128,194,8,235,3,128,198,8,226,221,91,90,203,87,190,20,7, 191,77,10,128,60,1,117,3,191,91,8,185,6,0,247,225,187,3,2,3,216,184,176,255,142,192,185,6,0,38,138,7, 138,224,36,15,128,228,240,81,185,4,0,210,236,89,139,208,3,208,128,60,1,117,28,81,185,6,0,128,37,240,0,21, 128,101,64,240,0,117,64,131,199,66,226,239,89,129,239,12,1,235,26,81,185,6,0,128,37,240,0,21,128,101,2,240, 0,117,2,131,239,62,226,239,89,129,199,120,1,67,226,173,95,203,138,4,58,194,118,5,198,4,0,235,9,36,15,60, 9,118,3,198,4,0,70,203,96,190,22,7,128,60,1,117,8,187,35,6,198,7,1,235,76,128,60,2,117,21,190,16, 7,254,4,128,60,32,117,9,198,4,0,190,22,7,198,4,0,235,50,154,226,7,0,255,190,16,7,254,4,128,60,2, 117,35,51,192,136,4,191,18,7,128,61,44,117,4,176,0,230,21,128,61,31,115,12,138,5,154,188,9,0,255,154,72, 9,0,255,254,5,191,18,7,128,61,106,114,10,51,192,231,0,190,24,7,198,4,1,176,64,230,182,97,207,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 43,43,43,43,43,43,6,5,13,1,12,5,13,1,12,5,0,0,43,43,1,2,1,0,2,0,15,0,16,80,48,80, 56,80,64,80,80,80,96,80,120,96,140,8,68,9,140,9,202,9,14,10,142,10,2,11,218,11,214,8,150,10,22,11, 104,0,109,0,118,0,123,0,129,0,133,0,137,0,147,0,150,0,167,0,191,0,128,8,128,9,192,9,0,10,128,10, 0,11,192,11,192,8,64,9,24,11,23,15,0,12,19,28,30,18,14,11,35,0,35,15,11,28,0,23,25,24,30,18, 0,14,11,35,0,29,15,34,0,12,22,25,25,14,30,35,26,15,0,25,21,0,43,43,43,43,43,43,43,43,43,43, 43,43,43,43,43,43,0,41,159,159,159,159,159,0,0,23,11,22,15,159,159,0,0,16,15,23,11,22,15,0,0,41, 159,0,0,11,159,0,0,12,159,0,0,25,159,0,0,11,12,0,0,0,0,255,238,221,204,187,170,153,136,119,102,85, 68,51,34,17,0,255,238,221,204,187,170,153,136,119,102,85,68,51,34,17,0,147,7,240,153,7,240,159,7,240,164,7, 240,169,7,240,174,7,240,179,7,240,183,7,240,187,7,240,191,7,225,195,7,225,198,7,225,201,7,210,205,7,195,207, 7,180,210,7,165,213,7,150,215,7,135,217,7,120,220,7,105,222,7,90,224,7,75,225,7,60,227,7,45,229,7,30, 230,7,15,230,7,15,230,7,14,230,7,13,230,7,12,230,7,11,230,7,10,230,7,9,230,7,8,230,7,7,230,7, 6,230,7,5,230,7,4,230,7,3,230,7,2,230,7,1,230,7,0,46,12,45,12,45,12,45,12,45,12,46,76,47, 12,48,12,49,12,50,12,51,12,47,76,52,12,53,12,54,12,55,12,56,12,52,76,47,12,57,12,58,12,50,12,47, 76,45,12,52,12,59,12,60,12,55,12,52,76,45,12,46,140,45,12,45,12,45,12,45,12,46,204,107,76,113,12,108, 12,113,12,108,12,107,12,106,12,120,12,118,12,114,12,109,12,106,12,106,12,121,12,119,12,115,12,110,12,106,12,106, 12,116,12,111,12,116,12,111,12,106,12,106,12,113,140,108,140,117,12,112,12,106,12,107,204,106,12,106,12,113,140,108, 140,107,140,101,102,102,102,102,102,84,102,102,102,102,102,67,101,102,102,102,102,50,84,102,102,102,102,33,67,101,102,102, 102,16,50,84,102,102,102,1,33,67,101,102,102,18,16,50,84,102,102,35,1,33,67,101,102,52,18,16,50,84,102,69, 35,1,33,67,101,86,52,18,16,50,100,102,69,35,1,33,99,102,86,52,18,16,98,102,102,69,35,1,97,101,102,86, 52,18,96,84,102,102,69,35,97,67,101,102,86,52,98,50,84,102,102,69,99,33,67,101,102,86,100,16,50,84,102,102, 101,0,33,67,101,102,102,0,16,50,84,102,102,0,0,33,67,101,102,0,0,16,50,84,102,0,0,0,33,67,101,0, 0,0,16,50,100,0,0,0,0,33,99,0,0,0,0,16,98,0,0,0,0,0,97,0,0,0,0,0,96,0,0,0, 0,0,0,0,0,62,99,103,107,115,99,62,0,60,12,12,12,12,12,12,0,126,3,3,62,96,96,127,0,126,3,3, 62,3,3,126,0,30,54,102,102,102,127,6,0,127,96,96,126,3,3,126,0,62,96,96,126,99,99,62,0,127,99,6, 12,24,24,24,0,62,99,99,62,99,99,62,0,62,99,99,63,3,3,62,0,28,54,99,99,127,99,99,0,126,99,99, 126,99,99,126,0,62,99,96,96,96,99,62,0,124,102,99,99,99,102,124,0,127,96,96,126,96,96,127,0,127,96,96, 126,96,96,96,0,63,96,96,103,99,99,62,0,99,99,99,127,99,99,99,0,60,24,24,24,24,24,60,0,15,3,3, 99,99,99,62,0,99,102,108,120,108,102,99,0,96,96,96,96,96,96,127,0,99,119,127,107,99,99,99,0,99,115,123, 111,103,99,99,0,62,99,99,99,99,99,62,0,126,99,99,126,96,96,96,0,62,99,99,107,111,103,62,0,126,99,99, 126,108,102,99,0,62,99,96,62,3,99,62,0,126,24,24,24,24,24,24,0,99,99,99,99,99,99,62,0,99,99,99, 54,54,28,8,0,99,107,107,107,127,54,34,0,99,99,54,28,54,99,99,0,102,102,102,60,24,24,24,0,127,3,6, 12,24,48,127,0,34,119,127,127,62,28,8,0,24,28,22,18,18,112,96,0,8,8,8,127,8,8,8,0,0,0,0, 127,0,0,0,0,60,102,102,12,24,0,24,0,0,0,0,0,0,96,96,0,127,0,0,0,0,0,0,0,16,24,28, 30,28,24,16,0,255,255,255,255,255,255,255,255,15,63,127,127,255,255,255,255,255,248,248,248,248,248,248,248,255,1,0, 0,248,252,248,192,255,252,252,252,120,120,248,240,255,31,31,31,15,143,143,135,255,15,15,7,7,3,3,1,248,248,248, 248,248,248,248,248,193,192,248,252,248,0,0,1,241,241,97,99,99,64,192,192,199,199,195,227,227,33,49,49,17,16,24, 24,28,28,30,30,255,15,3,1,240,248,252,252,255,252,252,252,248,248,120,112,252,252,252,252,248,0,1,7,113,113,97, 99,227,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,234,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255, }; } namespace WonderSwanColor { const unsigned char Boot[8192] = { 250,253,248,184,0,0,139,216,139,200,139,208,142,208,142,216,142,192,188,0,32,139,232,139,240,139,248,176,4,230,160,176, 0,230,181,228,181,168,1,116,5,234,0,0,0,64,185,128,0,228,160,168,128,117,5,226,248,233,249,3,228,181,168,2, 116,5,234,16,0,0,64,184,170,85,231,194,229,194,61,170,85,116,3,233,223,3,184,255,255,231,194,104,255,63,31,160, 0,0,60,234,116,3,233,204,3,176,8,230,160,176,138,230,96,184,0,19,231,188,176,64,230,190,51,192,191,254,255,185, 0,128,243,171,252,231,16,231,18,230,5,230,6,230,136,230,137,230,138,230,139,231,128,231,130,231,132,231,134,230,148,230, 140,230,144,230,145,176,33,230,7,176,12,230,4,160,12,0,54,162,150,6,36,12,230,160,160,5,0,36,15,116,3,233, 115,3,160,13,0,36,240,116,3,233,105,3,190,0,6,187,48,0,185,20,0,232,215,3,61,0,0,116,3,233,85,3, 54,137,20,70,70,67,226,237,246,6,5,0,128,117,50,54,246,6,35,6,128,116,42,190,6,96,181,0,54,138,14,38, 6,191,67,16,208,225,3,249,46,139,13,75,232,160,3,61,0,0,116,3,233,30,3,54,137,20,70,70,67,226,237,235, 15,104,128,255,31,190,6,0,191,6,96,185,133,3,243,165,187,0,6,185,16,0,54,128,63,43,114,4,54,198,7,0, 67,226,243,178,153,232,242,2,178,153,232,237,2,178,18,232,232,2,178,49,232,227,2,54,128,63,3,114,4,54,198,7, 0,67,54,128,63,5,114,4,54,198,7,0,187,35,6,54,246,7,60,116,4,54,128,39,192,54,138,7,138,208,36,3, 230,158,138,194,128,226,64,192,234,5,128,202,1,138,194,230,20,54,198,6,120,6,127,187,36,6,54,131,63,15,114,4, 54,198,7,0,54,160,150,6,36,1,54,162,0,112,14,31,190,71,16,191,0,48,185,112,1,164,71,226,252,104,0,6, 31,139,54,14,0,180,0,160,11,0,54,163,146,6,179,8,246,227,139,200,54,137,14,148,6,246,6,10,0,128,117,6, 164,71,226,252,235,2,243,165,54,199,6,152,0,218,15,54,140,14,154,0,176,32,230,176,176,64,230,182,230,178,230,181, 185,10,0,226,254,228,181,168,2,116,15,54,198,6,152,6,1,232,232,2,54,198,6,152,6,0,54,160,0,112,138,200, 176,4,210,232,230,21,232,136,12,22,31,190,0,48,191,0,32,54,128,62,0,112,1,116,13,54,139,14,148,6,129,193, 112,1,243,165,235,61,54,139,14,146,6,131,193,46,186,1,128,81,185,2,0,81,51,237,185,8,0,81,51,219,185,8, 0,132,48,116,3,38,8,19,208,194,67,67,226,243,208,206,69,69,89,226,230,70,71,89,226,219,131,198,14,131,199,14, 89,226,206,104,0,6,31,139,54,12,0,51,192,191,0,254,181,0,138,14,10,0,138,209,128,225,31,246,194,128,117,9, 165,165,131,199,28,226,249,235,9,165,165,165,165,131,199,24,226,247,54,139,22,36,6,191,147,14,3,250,3,250,46,255, 53,54,143,6,130,255,191,0,8,185,0,4,243,171,139,30,16,0,54,128,62,0,112,1,116,50,182,0,138,22,22,0, 209,226,176,64,43,194,54,163,144,6,139,62,18,0,138,14,23,0,81,138,14,22,0,139,7,54,137,5,71,71,67,67, 226,245,54,3,62,144,6,89,226,232,235,76,138,22,22,0,176,64,246,226,64,64,54,163,144,6,139,62,20,0,181,0, 138,14,23,0,81,181,0,138,14,22,0,139,7,138,244,128,230,192,116,18,128,254,192,116,13,128,254,128,117,5,128,236, 64,235,3,128,196,64,54,137,5,131,199,64,67,67,226,219,54,43,62,144,6,89,226,204,251,244,54,128,62,153,6,0, 116,247,250,176,0,230,178,176,255,230,182,54,255,6,30,6,117,5,54,255,14,30,6,54,139,30,22,6,54,137,30,32, 6,54,138,14,24,6,54,136,14,34,6,104,255,63,31,161,6,0,138,22,8,0,59,195,117,4,58,209,116,21,54,163, 22,6,54,136,22,24,6,54,254,6,28,6,117,5,54,254,14,28,6,190,0,6,187,48,0,185,19,0,54,139,20,232, 18,1,61,0,0,117,110,70,70,67,226,240,160,9,0,36,128,117,4,176,128,230,190,51,192,230,0,230,1,230,7,230, 4,231,16,231,18,230,5,230,6,230,176,230,136,230,137,230,138,230,139,231,128,231,130,231,132,231,134,230,148,230,140,230, 144,230,145,230,143,139,248,185,0,127,243,171,184,255,255,185,0,1,243,171,176,10,230,96,185,11,0,14,31,190,42,4, 191,0,4,243,164,234,0,4,0,0,228,160,254,192,230,160,234,0,0,255,255,176,1,230,98,244,54,138,7,58,194,118, 6,54,198,7,0,235,10,36,15,60,9,118,4,54,198,7,0,67,195,96,30,104,0,6,31,185,16,0,139,217,190,0, 6,254,203,54,128,56,0,117,2,226,246,138,195,178,4,246,226,138,224,139,30,28,0,139,22,30,0,42,252,42,208,176, 16,2,6,9,0,230,6,22,31,191,0,24,185,16,0,164,38,198,5,8,71,54,128,62,0,112,1,116,7,139,195,128, 199,8,235,5,139,194,128,194,8,171,226,227,31,97,195,184,0,24,3,195,231,188,176,16,230,190,186,0,0,66,184,2, 0,131,250,32,116,13,228,190,36,1,116,241,229,186,139,208,184,0,0,195,184,0,20,3,195,231,188,139,194,231,186,176, 32,230,190,186,0,0,66,184,2,0,129,250,0,22,116,11,228,190,36,2,60,2,117,238,184,0,0,195,30,51,192,187, 255,15,142,216,185,11,0,191,48,6,190,0,6,243,165,54,199,6,0,254,221,13,54,199,6,2,254,136,8,54,199,6, 4,254,0,15,54,163,6,254,54,137,30,128,254,54,199,6,130,254,136,8,54,163,160,254,54,137,30,162,254,54,137,30, 192,254,54,163,194,254,54,255,54,36,6,54,143,6,130,255,54,199,6,162,255,153,15,54,163,194,255,232,83,9,180,32, 191,0,8,185,0,4,243,171,180,8,191,0,16,185,0,4,243,171,185,128,0,171,71,71,226,251,14,31,190,1,21,191, 0,64,185,80,1,243,165,190,0,6,191,80,6,185,16,0,54,138,4,232,95,2,54,136,5,71,70,226,243,232,38,1, 232,33,2,232,73,8,54,198,6,136,6,1,54,198,6,134,6,7,176,7,230,6,54,199,6,24,24,44,11,54,198,6, 116,6,1,176,1,232,48,4,176,7,230,0,176,4,230,21,54,198,6,120,6,126,54,198,6,160,6,1,251,244,228,2, 60,146,117,250,54,128,62,135,6,1,117,26,232,215,0,232,210,1,232,250,7,54,198,6,116,6,1,176,1,232,248,3, 54,198,6,135,6,0,232,80,9,54,128,62,112,6,0,116,204,232,21,3,232,103,0,232,254,6,232,29,2,54,160,116, 6,54,162,132,6,232,39,7,232,12,8,54,254,14,120,6,117,4,176,0,230,21,54,246,6,119,6,1,117,8,54,198, 6,112,6,0,235,151,232,147,6,184,0,25,230,5,230,6,54,163,24,24,176,4,230,1,51,192,185,160,3,191,0,8, 243,171,54,199,6,0,254,0,0,230,1,230,0,54,198,6,120,6,127,31,250,54,160,35,6,36,3,230,158,195,176,16, 230,181,185,10,0,226,254,228,181,36,15,138,224,176,32,230,181,185,10,0,226,254,228,181,36,15,138,208,176,64,230,181, 185,10,0,226,254,228,181,36,15,192,224,4,10,194,139,208,54,161,96,6,54,163,100,6,51,194,35,194,54,163,98,6, 54,137,22,96,6,195,96,51,210,54,128,62,133,6,1,117,3,233,141,0,190,51,18,181,0,177,2,232,208,0,177,13, 187,207,17,3,218,46,139,63,187,247,17,3,218,46,139,55,232,51,1,66,66,226,233,187,22,17,190,80,6,177,16,54, 138,4,232,5,1,180,9,54,137,7,70,67,67,226,240,54,160,16,6,187,214,17,232,157,1,54,160,17,6,187,218,17, 232,147,1,54,160,18,6,187,22,18,232,137,1,54,160,19,6,187,86,18,232,127,1,54,160,20,6,192,224,3,180,0, 190,203,18,3,240,191,214,18,232,219,0,54,160,21,6,192,224,2,180,0,190,227,18,3,240,191,86,19,232,199,0,97, 195,190,31,18,177,9,232,69,0,177,7,187,233,17,3,218,46,139,63,187,17,18,3,218,46,139,55,232,168,0,66,66, 226,233,54,160,35,6,138,216,36,3,208,224,180,0,190,247,18,3,240,191,214,17,232,141,0,128,227,64,192,235,3,183, 0,190,255,18,3,243,191,150,18,232,122,0,97,195,81,131,198,2,46,139,28,177,28,54,199,7,0,8,67,67,226,247, 89,226,235,195,54,138,30,133,6,208,227,183,0,46,139,151,233,7,138,194,187,106,16,185,6,0,232,16,0,138,198,187, 68,16,185,13,0,232,5,0,195,13,11,11,13,67,54,136,7,67,226,249,195,10,192,116,16,60,10,119,3,4,27,195, 60,36,119,3,44,10,195,4,2,195,10,192,116,23,60,27,116,5,119,6,4,10,195,50,192,195,60,38,116,249,119,3, 44,27,195,44,2,195,46,138,4,70,60,255,116,11,54,136,5,71,54,128,13,9,71,235,237,195,54,160,98,6,168,255, 117,1,195,168,5,116,4,232,174,1,195,138,208,54,160,116,6,54,128,62,133,6,1,116,58,60,0,116,26,60,1,116, 26,60,2,116,26,60,3,116,26,60,4,116,26,60,5,116,26,60,6,116,26,235,50,232,201,0,195,232,249,0,195,232, 46,2,195,232,206,2,195,232,7,3,195,232,88,3,195,232,140,3,195,60,0,116,224,60,1,116,6,60,2,116,6,235, 8,232,175,3,195,232,232,3,195,246,194,64,117,1,195,54,198,6,119,6,1,195,138,224,192,232,4,254,192,54,136,7, 54,128,79,1,1,138,196,36,15,254,192,54,136,71,2,54,128,79,3,1,195,232,38,0,82,54,128,62,133,6,1,116, 27,128,250,0,116,22,128,250,1,117,7,178,8,232,14,0,235,10,128,250,4,119,5,178,9,232,2,0,90,195,96,190, 31,18,54,128,62,133,6,1,117,3,190,51,18,182,0,3,242,3,242,46,139,28,67,208,224,185,28,0,54,128,39,241, 54,8,7,67,67,226,245,97,195,54,254,6,113,6,54,128,38,113,6,31,117,12,228,5,10,192,176,6,116,2,176,0, 230,5,195,187,98,6,54,246,7,8,116,18,54,198,6,133,6,0,54,198,6,134,6,7,54,198,6,135,6,1,54,246, 7,2,116,18,54,198,6,133,6,1,54,198,6,134,6,3,54,198,6,135,6,1,195,138,194,187,117,6,54,138,23,182, 0,168,10,116,58,168,2,116,27,128,250,15,117,12,54,198,7,0,54,199,6,2,24,32,88,195,54,254,7,54,128,6, 3,24,8,195,128,250,0,117,12,54,198,7,15,54,199,6,2,24,32,208,195,54,254,15,54,128,46,3,24,8,195,168, 64,116,18,187,80,6,3,218,54,138,7,254,192,60,45,114,22,176,0,235,18,168,128,116,30,187,80,6,3,218,54,138, 7,44,1,115,2,176,44,54,136,7,191,22,17,3,250,3,250,232,22,254,54,136,5,195,187,116,6,54,138,23,168,1, 116,7,10,210,116,115,74,235,8,54,58,22,134,6,115,105,66,182,0,82,54,138,23,176,4,232,185,254,90,176,5,232, 179,254,54,136,23,54,198,6,117,6,0,54,198,6,118,6,0,190,183,17,54,128,62,133,6,1,117,3,190,199,17,3, 242,3,242,46,139,4,54,163,26,24,128,196,8,187,2,24,185,6,0,128,250,0,116,33,54,128,62,133,6,1,116,14, 128,250,2,119,9,73,54,137,7,131,195,4,51,192,54,137,7,131,195,4,128,196,8,226,245,190,128,6,54,199,4,0, 0,54,199,68,2,136,8,54,138,30,134,6,54,56,30,116,6,117,11,54,199,4,0,0,54,199,68,2,255,15,54,139, 28,54,137,30,128,254,54,139,92,2,54,137,30,130,254,195,138,194,187,118,6,54,138,23,182,0,168,10,116,58,168,2, 116,27,128,250,3,117,12,54,198,7,0,54,199,6,2,24,56,88,195,54,254,7,54,128,6,3,24,8,195,128,250,0, 117,12,54,198,7,3,54,199,6,2,24,56,112,195,54,254,15,54,128,46,3,24,8,195,168,192,116,87,187,214,17,190, 16,6,128,250,2,114,4,70,187,218,17,168,64,54,138,4,116,30,246,194,1,117,10,4,16,60,160,114,48,36,15,235, 44,64,138,224,36,15,60,10,138,196,114,33,36,240,235,29,246,194,1,117,14,168,240,116,4,44,16,235,16,36,15,12, 144,235,10,168,15,117,5,36,240,12,9,64,72,54,136,4,232,99,253,195,82,246,194,202,116,53,187,18,6,54,138,7, 246,194,66,116,15,64,60,10,117,2,176,16,60,19,114,22,176,1,235,18,10,192,117,1,64,72,60,15,117,2,176,9, 10,192,117,2,176,18,54,136,7,187,22,18,232,39,253,90,195,82,246,194,202,116,77,187,19,6,54,138,7,246,194,66, 116,27,64,60,10,117,2,176,16,60,26,117,2,176,32,60,42,117,2,176,48,60,50,114,34,176,1,235,30,10,192,117, 1,64,72,60,15,117,2,176,9,60,31,117,2,176,25,60,47,117,2,176,41,10,192,117,2,176,49,54,136,7,187,86, 18,232,210,252,90,195,82,246,194,202,116,48,187,20,6,54,138,7,180,0,246,194,136,116,8,72,121,13,184,2,0,235, 8,254,192,60,3,114,2,176,0,54,136,7,192,224,3,180,0,190,203,18,3,240,191,214,18,232,10,252,90,195,82,246, 194,202,116,45,187,21,6,54,138,7,180,0,246,194,136,116,8,72,121,12,184,4,0,235,7,64,60,5,114,2,176,0, 54,136,7,192,224,2,190,227,18,3,240,191,86,19,232,213,251,90,195,246,194,202,116,55,187,35,6,54,138,7,138,240, 128,230,192,37,3,0,246,194,136,116,8,254,200,121,12,176,3,235,8,254,192,60,4,114,2,176,0,10,240,54,136,55, 230,158,208,224,190,247,18,3,240,191,214,17,232,151,251,195,246,194,202,116,70,187,35,6,54,138,7,138,240,128,230,131, 37,64,0,192,232,6,246,194,136,116,8,254,200,121,12,176,1,235,8,254,192,60,2,114,2,176,0,80,80,192,224,6, 10,240,54,136,55,88,208,224,12,1,230,20,88,192,224,3,190,255,18,3,240,191,150,18,232,75,251,195,190,80,6,191, 0,6,185,16,0,54,138,4,232,31,251,54,136,5,71,70,226,243,190,0,6,191,48,6,185,11,0,54,139,4,54,139, 21,70,70,71,71,59,194,117,3,226,240,195,187,29,6,54,254,7,117,3,54,254,15,195,187,114,6,54,160,96,6,54, 58,6,100,6,117,36,36,202,116,32,54,128,63,37,114,22,187,115,6,54,254,7,54,128,63,15,114,18,54,198,7,0, 54,8,6,98,6,195,54,254,7,195,54,198,7,0,195,96,183,0,54,138,30,132,6,83,54,139,46,133,6,129,229,15, 0,209,229,46,139,190,59,18,3,251,46,138,53,46,139,190,63,18,3,251,3,251,46,139,53,128,251,2,119,13,208,235, 54,138,143,117,6,181,0,209,225,3,241,191,0,24,185,6,0,54,128,62,119,6,1,116,41,58,206,116,37,54,138,20, 131,253,2,116,11,128,251,1,119,6,132,210,117,2,178,45,54,136,21,71,54,198,5,41,70,70,131,199,3,226,218,91, 235,43,54,198,5,0,71,54,198,5,41,131,199,3,226,242,91,128,251,1,117,23,54,255,54,2,24,54,143,6,22,24, 54,131,6,22,24,8,54,199,6,20,24,43,45,97,195,54,128,62,136,6,1,116,10,187,207,20,185,18,0,232,25,0, 195,54,139,46,133,6,129,229,15,0,193,229,3,187,243,20,3,221,185,3,0,232,1,0,195,191,0,8,46,139,55,81, 177,28,46,139,20,54,137,21,70,70,71,71,226,244,131,199,8,67,67,89,226,230,195,96,30,54,128,62,133,6,0,117, 79,54,128,62,116,6,1,117,71,182,0,54,138,22,36,6,54,160,99,6,168,2,116,9,254,194,128,250,15,117,2,178, 0,168,8,116,9,254,202,128,250,255,117,2,178,14,168,1,116,10,178,0,104,0,6,31,138,22,32,0,190,147,14,3, 242,3,242,46,255,52,54,143,6,130,255,54,137,22,36,6,31,97,195,0,0,0,15,112,15,240,15,240,7,240,0,247, 0,255,0,127,0,15,0,15,7,15,15,7,15,255,15,119,7,96,30,51,192,230,136,230,137,230,138,230,139,230,144,230, 145,191,160,6,185,8,0,243,171,54,128,62,152,6,1,117,26,14,31,190,81,22,179,1,54,136,30,176,6,54,140,14, 178,6,54,199,6,180,6,97,22,235,66,104,0,6,31,51,219,139,235,139,251,185,4,0,131,191,36,0,255,116,6,254, 195,254,195,226,243,208,235,54,136,30,176,6,139,54,34,0,54,199,6,178,6,0,6,138,203,54,198,133,160,6,1,62, 139,150,36,0,137,150,180,6,71,69,69,226,236,176,8,246,227,139,200,191,0,4,243,165,176,16,230,143,138,195,60,4, 117,4,176,6,235,2,208,224,12,9,230,145,138,203,176,255,210,224,246,208,230,144,31,97,195,96,30,54,142,30,178,6, 51,219,51,237,181,0,54,138,14,176,6,128,190,172,6,0,117,94,128,190,160,6,0,116,77,139,253,209,231,54,139,181, 164,6,54,139,157,180,6,139,64,2,186,136,0,3,213,238,136,166,172,6,54,131,133,164,6,4,139,0,186,128,0,3, 215,239,169,0,128,116,41,54,128,62,152,6,1,116,7,198,134,160,6,0,235,7,54,199,133,164,6,0,0,128,190,172, 6,0,116,16,235,10,176,0,186,136,0,3,213,238,235,4,254,142,172,6,69,226,148,31,97,195,96,30,104,0,6,31, 139,22,7,0,187,151,6,191,152,6,54,128,61,1,117,8,54,198,6,112,6,1,235,68,54,254,7,54,56,23,119,8, 114,58,176,5,230,0,235,52,54,128,62,176,6,0,116,3,232,70,255,228,2,60,146,117,250,232,55,244,255,30,24,0, 54,160,120,6,54,56,7,117,4,176,0,230,21,54,56,55,117,10,176,0,230,0,54,198,6,153,6,1,176,64,230,182, 31,97,207,189,1,189,3,0,0,0,0,0,0,0,0,62,99,103,107,115,99,62,0,60,12,12,12,12,12,12,0,126, 3,3,62,96,96,127,0,126,3,3,62,3,3,126,0,30,54,102,102,102,127,6,0,127,96,96,126,3,3,126,0,62, 96,96,126,99,99,62,0,127,99,6,12,24,24,24,0,62,99,99,62,99,99,62,0,62,99,99,63,3,3,62,0,28, 54,99,99,127,99,99,0,126,99,99,126,99,99,126,0,62,99,96,96,96,99,62,0,124,102,99,99,99,102,124,0,127, 96,96,126,96,96,127,0,127,96,96,126,96,96,96,0,63,96,96,103,99,99,62,0,99,99,99,127,99,99,99,0,60, 24,24,24,24,24,60,0,15,3,3,99,99,99,62,0,99,102,108,120,108,102,99,0,96,96,96,96,96,96,127,0,99, 119,127,107,99,99,99,0,99,115,123,111,103,99,99,0,62,99,99,99,99,99,62,0,126,99,99,126,96,96,96,0,62, 99,99,107,111,103,62,0,126,99,99,126,108,102,99,0,62,99,96,62,3,99,62,0,126,24,24,24,24,24,24,0,99, 99,99,99,99,99,62,0,99,99,99,54,54,28,8,0,99,107,107,107,127,54,34,0,99,99,54,28,54,99,99,0,102, 102,102,60,24,24,24,0,127,3,6,12,24,48,127,0,34,119,127,127,62,28,8,0,24,28,22,18,18,112,96,0,8, 8,8,127,8,8,8,0,0,0,0,127,0,0,0,0,60,102,102,12,24,0,24,0,0,0,0,0,0,96,96,0,127, 0,0,0,0,0,0,0,16,24,28,30,28,24,16,0,127,127,127,127,127,127,127,0,8,8,32,80,56,80,64,80,72, 80,88,80,104,80,120,80,8,160,56,80,80,80,120,80,68,16,106,16,12,17,132,17,204,17,10,18,78,18,206,18,66, 19,214,19,86,17,214,18,86,19,68,16,106,16,200,17,132,18,214,17,150,18,214,19,103,18,117,18,124,18,129,18,138, 18,143,18,149,18,153,18,157,18,183,18,186,18,203,18,227,18,103,18,117,18,167,18,174,18,247,18,255,18,183,18,128, 19,0,17,192,17,0,18,64,18,192,18,64,19,192,19,64,17,128,17,128,19,192,17,128,18,192,19,67,18,75,18,79, 18,95,18,6,5,5,3,3,0,3,4,6,5,2,4,0,0,22,17,214,17,22,18,86,18,214,18,86,19,214,19,0, 0,214,17,150,18,214,19,26,15,28,29,25,24,11,22,0,14,11,30,11,255,25,26,30,19,25,24,255,24,11,23,15, 255,12,19,28,30,18,14,11,35,255,35,15,11,28,255,23,25,24,30,18,255,14,11,35,255,29,15,34,255,12,22,25, 25,14,30,35,26,15,255,32,25,22,31,23,15,255,13,25,24,30,28,11,29,30,255,25,21,255,43,43,43,43,43,43, 43,43,43,43,43,43,43,43,43,43,255,41,0,0,0,0,0,255,0,23,11,22,15,0,0,255,0,16,15,23,11,22, 15,255,0,41,0,255,0,11,0,255,0,12,0,255,0,25,0,255,0,11,12,255,0,1,255,2,255,3,255,4,255,22, 25,33,0,255,0,0,0,18,19,17,18,255,0,0,0,1,32,2,32,2,32,2,32,2,32,2,32,2,32,2,32,2, 32,2,32,2,32,2,32,2,32,2,32,2,32,6,32,7,32,0,32,0,32,11,32,18,32,18,32,18,32,18,32,18, 32,18,32,18,32,13,32,5,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0, 32,0,32,0,32,8,32,9,32,0,32,0,32,12,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,14,32,3, 32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4, 32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,15,32,5,32,0,32,0,32,0,32,0, 32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,0, 32,0,32,0,32,0,32,0,32,0,32,0,32,5,96,1,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2, 160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2,160,2, 160,2,160,2,160,1,224,13,96,18,32,18,32,18,32,18,32,18,32,18,32,18,32,18,32,18,32,18,32,18,32,18, 32,18,32,18,32,18,32,19,32,0,32,0,32,16,32,2,32,2,32,2,32,2,32,2,32,2,32,2,32,1,96,14, 96,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,10,32,20,32,0, 32,0,32,0,32,17,32,0,32,0,32,0,32,0,32,0,32,0,32,0,32,5,96,15,96,4,32,4,32,4,32,4, 32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4,32,4, 32,4,32,4,32,4,32,4,32,4,32,4,32,3,96,15,19,71,19,127,19,183,19,183,19,183,19,183,19,183,19,183, 19,183,19,183,19,183,19,183,19,183,19,183,19,183,19,183,19,239,19,15,19,71,19,127,19,0,0,39,20,95,20,151, 20,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,252,252,248,249,240,243, 225,255,255,255,255,255,255,0,0,0,0,0,0,255,0,255,255,231,227,230,228,236,232,249,240,243,225,231,227,231,227,231, 227,255,255,0,0,0,0,255,0,255,255,255,255,255,255,255,255,231,227,231,227,231,227,231,227,231,227,231,227,231,227,231, 227,255,255,255,255,255,255,0,0,0,0,0,0,255,0,255,254,255,255,255,255,255,255,31,15,15,15,15,15,31,15,63, 31,254,254,252,252,249,248,249,241,255,255,249,241,255,255,249,241,127,63,255,127,255,255,255,255,255,255,255,255,255,255,255, 255,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,255,255,255,255,255,255,240,255,240,255,240,255,240,255, 224,255,192,255,128,255,0,255,0,255,224,255,0,255,224,255,0,255,255,255,255,255,255,255,255,255,127,255,63,255,31,255, 15,255,7,255,7,255,7,255,7,255,7,255,7,255,7,255,7,255,199,127,39,63,23,159,15,207,135,231,199,231,199,231, 199,255,255,255,255,255,255,248,240,248,240,248,240,243,240,231,227,207,199,159,143,63,31,63,31,255,255,63,31,255,255,63, 31,255,255,255,255,255,255,255,0,255,0,255,0,255,0,255,0,255,255,255,255,255,255,255,15,255,15,255,15,255,31,255, 63,255,0,255,0,255,1,255,1,255,15,255,1,255,15,255,1,168,220,238,239,222,188,154,137,103,86,52,18,16,17,50, 118,185,6,136,10,185,6,68,10,38,7,136,10,38,7,68,10,25,7,136,10,25,7,68,10,38,7,136,10,38,7,68, 10,62,7,136,10,62,7,68,10,38,7,136,10,38,7,68,10,25,7,136,10,25,7,68,10,38,7,136,10,38,7,68, 10,0,0,0,20,38,7,136,10,38,7,68,10,25,7,136,10,25,7,68,10,38,7,136,10,38,7,68,10,62,7,136, 10,62,7,68,10,38,7,136,10,38,7,68,10,25,7,136,10,25,7,68,10,38,7,136,10,38,7,68,10,145,6,136, 10,145,6,68,10,11,7,136,10,11,7,68,10,253,6,136,10,253,6,68,10,11,7,136,10,11,7,68,10,38,7,136, 10,38,7,68,10,11,7,136,10,11,7,68,10,253,6,136,10,253,6,68,10,11,7,136,10,11,7,68,10,0,0,0, 20,11,7,136,10,11,7,68,10,253,6,136,10,253,6,68,10,11,7,136,10,11,7,68,10,38,7,136,10,38,7,68, 10,11,7,136,10,11,7,68,10,253,6,136,10,253,6,68,10,11,7,136,10,11,135,68,10,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,3,0,0,1,32,244,24,16,18,42,0,106,0,250,0,22,9,164,9,6,6,66,1,0,6,96,108,68,80, 0,0,42,6,74,6,86,6,255,255,0,0,255,15,255,15,255,15,255,15,255,15,255,15,255,15,255,15,0,0,255,15, 255,15,255,15,255,15,255,15,255,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,15,0,0,255,15, 0,0,255,15,0,0,255,15,255,15,15,63,127,127,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,224,224, 224,231,0,192,224,224,240,112,224,224,231,231,224,224,224,255,255,255,192,224,240,112,240,240,224,192,0,15,15,15,29,29, 29,56,0,128,128,128,192,192,192,224,56,56,112,112,112,255,255,255,224,224,112,112,112,56,56,56,0,240,240,248,248,252, 252,254,0,224,224,224,224,224,224,224,238,239,231,231,227,227,225,225,224,224,224,224,224,224,224,224,0,255,255,255,224,224, 224,224,0,192,224,224,240,112,112,112,224,224,224,224,224,255,255,255,112,112,112,112,240,224,224,192,46,8,47,8,47,8, 47,8,47,8,46,72,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8, 47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,47,8,46,136,47,8,47,8,47,8,47,8, 46,200,96,54,128,62,1,112,0,117,80,51,192,54,163,130,255,54,160,0,112,192,224,2,189,31,5,3,232,46,139,118, 0,69,69,46,139,94,0,191,64,24,185,6,0,81,46,139,23,177,2,81,177,2,46,139,4,54,137,5,71,71,70,70, 54,137,21,71,71,128,198,8,226,236,128,238,16,131,194,8,89,226,224,67,67,89,226,213,233,39,3,182,0,54,138,22, 2,112,187,159,5,3,218,46,138,7,54,56,6,1,112,116,3,233,14,3,187,206,5,208,226,3,218,255,39,54,199,6, 2,255,240,0,54,254,6,2,112,233,246,2,54,199,6,2,255,0,0,54,199,6,34,255,240,15,54,254,6,2,112,233, 224,2,54,199,6,34,255,0,0,54,199,6,66,255,255,0,54,254,6,2,112,233,202,2,54,199,6,66,255,0,0,54, 199,6,98,255,0,15,54,254,6,2,112,233,180,2,54,199,6,98,255,0,0,54,199,6,162,255,15,0,54,254,6,2, 112,233,158,2,54,199,6,162,255,0,0,54,199,6,194,255,15,15,54,254,6,2,112,233,136,2,54,199,6,194,255,0, 0,54,254,6,2,112,233,121,2,184,0,1,186,17,1,232,119,2,54,254,6,2,112,233,104,2,184,0,2,186,34,2, 232,102,2,54,254,6,2,112,233,87,2,184,0,3,186,51,3,232,85,2,54,254,6,2,112,233,70,2,184,0,4,186, 68,4,232,68,2,54,254,6,2,112,233,53,2,184,0,5,186,85,5,232,51,2,54,254,6,2,112,233,36,2,184,0, 6,186,102,6,232,34,2,54,254,6,2,112,233,19,2,184,0,7,186,119,7,232,17,2,54,254,6,2,112,233,2,2, 184,0,8,186,136,8,232,0,2,54,254,6,2,112,233,241,1,184,0,9,186,153,9,232,239,1,54,254,6,2,112,233, 224,1,184,0,10,186,170,10,232,222,1,54,254,6,2,112,233,207,1,184,0,11,186,187,11,232,205,1,54,254,6,2, 112,233,190,1,184,0,12,186,204,12,232,188,1,54,254,6,2,112,233,173,1,184,0,13,186,221,13,232,171,1,54,254, 6,2,112,233,156,1,184,0,14,186,238,14,232,154,1,54,254,6,2,112,233,139,1,184,0,15,186,255,15,232,137,1, 54,139,22,36,6,191,230,6,3,250,3,250,46,255,53,54,143,6,130,255,54,254,6,2,112,233,102,1,54,199,6,0, 254,17,1,233,87,1,54,199,6,0,254,34,2,54,198,6,65,24,10,54,198,6,69,24,10,54,198,6,73,24,10,54, 198,6,77,24,10,233,53,1,54,199,6,0,254,51,3,54,139,22,36,6,191,230,6,3,250,3,250,46,255,53,90,187, 15,240,42,222,208,235,2,243,138,194,36,240,42,248,208,239,128,231,240,2,199,179,15,128,226,15,42,218,208,235,2,211, 10,208,54,137,22,194,255,54,198,6,1,24,12,233,237,0,54,198,6,1,24,14,54,198,6,5,24,12,233,222,0,54, 199,6,0,254,68,4,54,198,6,1,24,12,54,198,6,5,24,14,54,198,6,9,24,12,233,194,0,232,254,0,233,188, 0,54,199,6,0,254,85,5,232,241,0,233,175,0,232,235,0,233,169,0,54,199,6,0,254,102,6,232,222,0,233,156, 0,232,216,0,233,150,0,54,199,6,0,254,119,7,232,203,0,233,137,0,232,197,0,233,131,0,54,199,6,0,254,136, 8,232,184,0,235,119,232,179,0,235,114,54,199,6,0,254,153,9,232,167,0,235,102,232,162,0,235,97,54,199,6,0, 254,170,10,232,150,0,235,85,54,198,6,53,24,8,54,198,6,57,24,12,54,198,6,61,24,14,235,65,54,199,6,0, 254,187,11,54,198,6,57,24,8,54,198,6,61,24,12,235,44,54,198,6,61,24,8,235,36,54,199,6,0,254,204,12, 235,27,54,199,6,0,254,221,13,235,18,54,199,6,0,254,238,14,235,9,54,199,6,0,254,255,15,235,5,54,254,6, 2,112,54,254,6,1,112,97,203,54,163,130,254,54,163,0,255,54,137,22,2,255,54,163,32,255,54,137,22,34,255,54, 163,64,255,54,137,22,66,255,54,163,96,255,54,137,22,98,255,54,137,22,162,255,54,137,22,194,255,195,187,1,24,54, 2,30,3,112,54,198,71,4,8,54,198,71,8,12,54,198,71,12,14,54,198,71,16,12,54,128,6,3,112,4,195,39, 5,135,5,87,5,147,5,57,12,0,12,59,12,0,12,52,10,53,10,54,10,55,10,60,6,61,6,62,6,63,6,56, 4,57,4,58,4,59,4,52,2,53,2,54,2,55,2,48,0,49,0,50,0,51,0,59,12,57,12,0,12,0,12,54, 10,52,10,55,10,53,10,62,6,60,6,63,6,61,6,58,4,56,4,59,4,57,4,54,2,52,2,55,2,53,2,50, 0,48,0,51,0,49,0,56,120,56,106,56,93,40,120,40,106,40,93,80,112,66,112,53,112,80,128,66,128,53,128,8, 16,24,32,40,48,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82, 83,84,85,86,87,88,89,90,91,92,93,94,95,96,189,1,204,1,226,1,248,1,14,2,36,2,58,2,73,2,90,2, 107,2,124,2,141,2,158,2,175,2,192,2,209,2,226,2,243,2,4,3,21,3,38,3,55,3,92,3,102,3,136,3, 208,3,223,3,251,3,1,4,14,4,20,4,33,4,39,4,52,4,58,4,70,4,75,4,87,4,92,4,104,4,124,4, 145,4,153,4,162,4,171,4,180,4,255,238,221,204,187,170,153,136,119,102,85,68,51,34,17,0,255,238,221,204,187,170, 153,136,119,102,85,68,51,34,17,0,147,7,240,1,153,7,240,1,159,7,240,1,164,7,240,1,169,7,240,1,174,7, 240,1,179,7,240,1,183,7,240,1,187,7,240,1,191,7,225,1,195,7,225,1,198,7,225,1,201,7,210,1,205,7, 195,1,207,7,180,1,210,7,165,1,213,7,150,1,215,7,135,1,217,7,120,1,220,7,105,1,222,7,90,1,224,7, 75,1,225,7,60,1,227,7,45,1,229,7,30,1,230,7,15,1,230,7,15,1,230,7,14,3,230,7,13,3,230,7, 12,3,230,7,11,3,230,7,10,3,230,7,9,3,230,7,8,3,230,7,7,3,230,7,6,3,230,7,5,3,230,7, 4,3,230,135,3,3,0,0,0,15,112,15,240,15,240,7,240,0,247,0,255,0,127,0,15,0,15,7,15,15,7,15, 255,15,119,7,0,0,0,0,0,0,0,0,0,0,0,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43, 66,111,111,116,32,82,111,109,32,83,116,97,102,102,32,32,80,114,111,103,114,97,109,101,114,32,32,32,32,32,32,32, 32,75,111,117,115,101,105,32,75,97,122,101,116,111,32,32,83,111,117,110,100,32,67,111,109,112,111,115,101,114,32,32, 32,84,97,107,97,115,104,105,32,73,115,111,121,97,109,97,71,114,97,112,104,105,99,32,68,101,115,105,103,110,101,114, 32,89,117,107,97,114,105,32,72,111,110,100,97,32,32,32,83,112,101,99,105,97,108,32,84,104,97,110,107,115,32,32, 32,77,97,115,97,32,84,111,114,105,105,32,32,32,32,32,32,83,97,116,111,114,117,32,73,109,97,105,32,32,32,32, 32,75,97,119,97,66,117,116,116,101,114,32,32,32,32,32,32,77,97,115,97,104,105,114,111,73,119,97,109,111,116,111, 43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,234,0,0,0,254,0,0,0,0,0,0,0,0,0,0,0, }; } namespace PocketChallengeV2 { const unsigned char Boot[4096] = { 250,184,0,0,139,208,139,232,142,208,188,0,32,142,216,142,192,230,181,176,4,230,160,228,181,138,216,208,235,115,5,234, 0,0,0,64,185,0,0,228,160,36,128,117,12,65,129,249,128,0,117,3,233,6,2,235,238,228,181,36,2,116,5,234, 16,0,0,64,176,8,230,160,184,48,1,231,188,176,64,230,190,191,0,0,185,0,32,184,0,0,252,243,171,184,240,63, 142,192,187,252,0,38,138,7,190,2,7,136,4,36,12,230,160,176,158,230,22,176,155,230,23,51,192,230,16,230,17,230, 136,230,137,230,138,230,139,230,5,230,6,230,144,230,145,176,12,230,4,184,32,100,231,28,184,168,252,231,30,176,1,230, 7,230,20,184,48,117,231,48,190,0,6,187,48,0,185,16,0,154,71,8,0,255,61,0,0,116,3,233,127,1,137,20, 131,198,2,67,226,235,190,0,6,185,16,0,128,60,43,114,3,198,4,0,70,226,245,178,153,154,50,10,0,255,178,153, 154,50,10,0,255,178,18,154,50,10,0,255,178,49,154,50,10,0,255,128,60,2,118,3,198,4,0,70,128,60,4,118, 3,198,4,0,184,176,255,142,192,187,189,2,190,0,32,185,232,1,38,138,7,136,4,136,68,1,131,198,2,67,226,242, 185,61,0,187,189,2,154,14,9,0,255,187,152,0,199,7,72,10,199,71,2,0,255,176,32,230,176,176,64,230,182,230, 178,176,64,230,181,185,15,0,226,254,228,181,168,2,116,12,190,22,7,198,4,1,154,63,2,0,255,250,187,2,7,138, 7,36,1,187,20,7,136,7,60,1,117,6,176,2,230,21,235,4,176,4,230,21,154,166,8,0,255,154,165,7,0,255, 190,22,7,198,4,2,251,244,190,24,7,128,60,0,116,247,250,51,192,230,178,176,255,230,182,190,0,6,131,124,30,255, 116,3,255,68,30,184,240,63,142,192,187,246,0,38,139,7,38,138,87,2,59,68,22,117,5,58,84,24,116,15,137,68, 22,136,84,24,128,124,28,255,116,3,254,68,28,187,48,0,185,16,0,139,20,154,116,8,0,255,61,0,0,116,3,233, 91,0,131,198,2,67,226,235,190,249,0,38,138,4,36,128,117,4,176,128,230,190,51,192,231,0,230,7,230,4,230,5, 230,6,230,176,230,144,230,145,230,143,184,0,0,142,192,191,0,0,185,0,32,184,0,0,252,243,171,185,13,0,184,0, 255,142,216,190,48,2,191,0,4,243,164,234,0,4,0,0,228,160,36,140,12,1,230,160,234,0,0,255,255,244,244,250, 252,51,192,142,192,187,22,7,198,7,1,185,0,4,191,0,8,243,171,185,11,0,191,64,6,190,0,6,243,165,184,48, 117,231,34,184,0,80,231,32,176,7,230,6,184,176,255,142,192,187,42,6,198,7,0,232,108,1,232,203,0,176,5,231, 0,176,4,187,43,6,230,21,198,7,122,176,1,230,20,251,244,187,35,6,138,7,10,192,116,246,232,6,2,187,32,6, 154,226,2,0,255,232,203,4,232,94,1,187,43,6,254,15,117,4,176,0,230,21,187,42,6,246,7,1,117,8,187,35, 6,198,7,0,235,202,232,114,4,6,51,192,230,5,187,24,24,137,7,142,192,185,0,4,191,0,8,243,171,7,230,21, 250,203,176,32,230,181,185,15,0,226,254,228,181,36,15,138,224,176,64,230,181,185,15,0,226,254,228,181,36,15,177,4, 210,224,10,196,138,224,138,7,50,196,34,196,136,71,1,138,7,136,71,2,136,39,203,10,192,116,16,60,10,119,3,4, 27,195,60,36,119,3,44,10,195,4,2,195,10,192,116,23,60,27,116,5,119,6,4,10,195,50,192,195,60,38,116,249, 119,3,44,27,195,44,2,195,186,0,0,185,11,0,187,42,0,3,218,38,139,63,187,64,0,3,218,38,139,55,232,118, 0,66,66,226,233,190,0,6,191,48,6,187,150,8,185,16,0,138,4,136,7,232,159,255,136,5,71,70,67,67,226,241, 190,16,6,138,4,187,150,9,232,205,0,70,138,4,187,154,9,232,196,0,190,18,6,138,4,187,214,9,232,185,0,190, 19,6,138,4,187,22,10,232,174,0,187,20,6,138,7,177,3,210,224,180,0,190,167,0,3,240,191,150,10,232,23,0, 187,21,6,138,7,177,2,210,224,180,0,190,191,0,3,240,191,22,11,232,1,0,195,38,138,4,70,10,192,116,6,136, 5,71,71,235,242,195,187,0,24,51,192,185,28,0,137,7,131,195,2,226,249,187,24,24,186,44,0,137,23,187,39,6, 198,7,1,176,1,232,45,1,195,187,33,6,138,7,168,255,116,69,168,5,116,4,232,28,1,195,138,208,187,39,6,138, 7,180,0,72,120,26,116,28,122,7,72,116,27,123,29,235,35,64,123,28,246,194,64,116,30,187,42,6,198,7,1,195, 232,119,0,195,232,102,1,195,232,255,1,195,232,52,2,195,232,129,2,195,232,178,2,195,138,224,177,4,210,232,64,136, 7,138,196,36,15,64,136,71,2,195,96,190,86,0,182,0,3,242,3,242,38,139,28,67,208,224,185,28,0,128,39,241, 8,7,67,67,226,247,97,195,232,223,255,82,10,210,117,7,178,7,232,213,255,235,10,128,250,3,119,5,178,8,232,201, 255,90,195,187,36,6,254,7,128,39,31,117,12,228,5,10,192,176,6,116,2,50,192,230,5,195,138,194,187,40,6,138, 23,182,0,168,10,116,57,168,2,116,28,128,250,15,117,11,198,7,0,187,2,24,199,7,24,88,195,254,7,187,2,24, 187,3,24,128,7,8,195,128,250,0,117,11,198,7,15,187,2,24,199,7,24,208,195,254,15,187,3,24,128,47,8,195, 168,64,116,17,187,48,6,3,218,138,7,254,192,60,45,114,21,176,0,235,17,168,128,116,27,187,48,6,3,218,138,7, 44,1,115,2,176,44,136,7,191,150,8,3,250,3,250,232,250,253,136,5,195,187,39,6,138,23,168,1,116,7,10,210, 116,90,74,235,6,128,250,6,115,82,66,182,0,82,138,23,176,0,232,51,255,90,176,1,232,45,255,136,23,190,40,6, 198,4,0,190,41,6,198,4,0,190,28,0,3,242,3,242,38,139,4,187,26,24,137,7,128,196,8,187,2,24,128,250, 1,185,6,0,119,12,73,115,2,4,8,137,7,131,195,4,51,192,137,7,131,195,4,128,196,8,226,246,187,39,6,184, 0,80,128,63,6,117,3,184,48,117,231,32,195,138,194,187,41,6,138,23,182,0,168,10,116,54,168,2,116,25,128,250, 3,117,11,198,7,0,187,2,24,199,7,48,88,195,254,7,187,3,24,128,7,8,195,128,250,0,117,11,198,7,3,187, 2,24,199,7,48,112,195,254,15,187,3,24,128,47,8,195,168,192,116,85,187,150,9,190,16,6,128,250,2,114,4,70, 187,154,9,168,64,138,4,116,30,246,194,1,117,10,4,16,60,160,114,48,36,15,235,44,64,138,224,36,15,60,10,138, 196,114,33,36,240,235,29,246,194,1,117,14,168,240,116,4,44,16,235,16,36,15,12,144,235,10,168,15,117,5,36,240, 12,9,64,72,136,4,232,15,254,195,246,194,202,116,51,187,18,6,138,7,246,194,66,116,15,64,60,10,117,2,176,16, 60,19,114,22,176,1,235,18,10,192,117,1,64,72,60,15,117,2,176,9,10,192,117,2,176,18,136,7,187,214,9,232, 214,253,195,246,194,202,116,75,187,19,6,138,7,246,194,66,116,27,64,60,10,117,2,176,16,60,26,117,2,176,32,60, 42,117,2,176,48,60,50,114,34,176,1,235,30,10,192,117,1,64,72,60,15,117,2,176,9,60,31,117,2,176,25,60, 47,117,2,176,41,10,192,117,2,176,49,136,7,187,22,10,232,133,253,195,246,194,202,116,47,187,20,6,138,7,180,0, 246,194,136,116,8,72,121,13,184,2,0,235,8,254,192,60,3,114,2,176,0,136,7,177,3,210,224,180,0,190,167,0, 3,240,191,150,10,232,207,252,195,246,194,202,116,44,187,21,6,138,7,180,0,246,194,136,116,8,72,121,12,184,4,0, 235,7,64,60,5,114,2,176,0,136,7,208,224,208,224,190,191,0,3,240,191,22,11,232,157,252,195,190,48,6,191,0, 6,185,16,0,138,4,232,227,251,136,5,71,70,226,245,190,0,6,191,64,6,185,11,0,139,4,139,21,131,198,2,131, 199,2,59,194,117,3,226,240,195,187,29,6,254,7,117,2,254,15,195,187,37,6,191,32,6,138,5,190,34,6,58,4, 117,31,36,202,116,27,128,63,37,114,19,187,38,6,254,7,128,63,15,114,15,198,7,0,187,33,6,8,7,195,254,7, 195,198,7,0,195,30,96,51,192,230,136,230,137,230,138,230,139,230,144,187,80,7,137,71,2,137,71,4,199,7,1,0, 142,192,191,0,4,184,176,255,142,216,190,213,0,185,16,0,252,243,165,176,11,230,145,176,16,230,143,176,3,230,144,97, 31,203,6,96,187,80,7,131,63,1,117,88,184,176,255,142,192,131,127,4,0,117,74,139,119,2,38,139,132,254,0,231, 128,38,138,132,0,1,230,136,131,238,9,38,139,132,254,0,231,130,38,138,132,0,1,230,137,131,71,2,3,131,127,2, 117,114,12,199,7,0,0,51,192,230,136,230,137,235,18,131,127,2,81,114,7,199,71,4,3,0,235,5,199,71,4,1, 0,255,79,4,97,7,203,83,184,1,0,131,251,64,115,34,139,195,5,128,1,231,188,176,16,230,190,51,210,66,184,2, 0,131,250,32,116,12,228,190,36,1,116,241,229,186,139,208,51,192,91,203,82,83,184,1,0,131,251,64,115,37,139,195, 5,64,1,231,188,139,194,231,186,176,32,230,190,51,210,66,184,2,0,129,250,0,22,116,10,228,190,36,2,60,2,117, 238,51,192,91,90,203,184,0,112,231,32,184,0,80,231,34,184,0,64,231,36,184,0,48,231,38,184,0,32,231,40,184, 0,16,231,42,51,192,231,44,142,192,191,0,8,185,0,4,243,171,184,176,255,142,192,187,20,7,139,7,60,1,117,8, 187,187,1,191,154,9,235,6,187,115,1,191,22,9,185,6,0,81,185,6,0,38,139,7,137,5,131,199,2,131,195,2, 226,243,131,199,52,89,226,233,184,5,0,231,0,203,81,51,255,186,1,128,185,8,0,81,38,138,1,185,8,0,87,83, 51,255,139,222,132,198,116,5,8,17,8,81,1,208,238,131,199,2,226,240,91,95,182,128,208,226,71,89,226,217,131,198, 16,131,195,8,89,226,199,203,87,187,0,6,185,16,0,139,241,78,128,56,0,117,2,226,248,186,16,0,43,209,190,20, 7,128,60,1,117,10,208,226,208,226,129,194,8,80,235,14,138,194,138,240,50,210,208,230,208,230,129,194,96,48,131,249, 0,116,5,154,138,9,0,255,95,203,82,83,138,193,230,6,191,0,24,190,20,7,50,228,138,7,128,60,1,117,2,4, 61,137,5,137,85,2,67,131,199,4,128,60,1,117,5,128,194,8,235,3,128,198,8,226,221,91,90,203,87,190,20,7, 191,77,10,128,60,1,117,3,191,91,8,185,6,0,247,225,187,3,2,3,216,184,176,255,142,192,185,6,0,38,138,7, 138,224,36,15,128,228,240,81,185,4,0,210,236,89,139,208,3,208,128,60,1,117,28,81,185,6,0,128,37,240,0,21, 128,101,64,240,0,117,64,131,199,66,226,239,89,129,239,12,1,235,26,81,185,6,0,128,37,240,0,21,128,101,2,240, 0,117,2,131,239,62,226,239,89,129,199,120,1,67,226,173,95,203,138,4,58,194,118,5,198,4,0,235,9,36,15,60, 9,118,3,198,4,0,70,203,96,190,22,7,128,60,1,117,8,187,35,6,198,7,1,235,76,128,60,2,117,21,190,16, 7,254,4,128,60,32,117,9,198,4,0,190,22,7,198,4,0,235,50,154,226,7,0,255,190,16,7,254,4,128,60,2, 117,35,51,192,136,4,191,18,7,128,61,44,117,4,176,0,230,21,128,61,31,115,12,138,5,154,188,9,0,255,154,72, 9,0,255,254,5,191,18,7,128,61,106,114,10,51,192,231,0,190,24,7,198,4,1,176,64,230,182,97,207,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 43,43,43,43,43,43,6,5,13,1,12,5,13,1,12,5,0,0,43,43,1,2,1,0,2,0,15,0,16,80,48,80, 56,80,64,80,80,80,96,80,120,96,140,8,68,9,140,9,202,9,14,10,142,10,2,11,218,11,214,8,150,10,22,11, 104,0,109,0,118,0,123,0,129,0,133,0,137,0,147,0,150,0,167,0,191,0,128,8,128,9,192,9,0,10,128,10, 0,11,192,11,192,8,64,9,24,11,23,15,0,12,19,28,30,18,14,11,35,0,35,15,11,28,0,23,25,24,30,18, 0,14,11,35,0,29,15,34,0,12,22,25,25,14,30,35,26,15,0,25,21,0,43,43,43,43,43,43,43,43,43,43, 43,43,43,43,43,43,0,41,159,159,159,159,159,0,0,23,11,22,15,159,159,0,0,16,15,23,11,22,15,0,0,41, 159,0,0,11,159,0,0,12,159,0,0,25,159,0,0,11,12,0,0,0,0,255,238,221,204,187,170,153,136,119,102,85, 68,51,34,17,0,255,238,221,204,187,170,153,136,119,102,85,68,51,34,17,0,147,7,240,153,7,240,159,7,240,164,7, 240,169,7,240,174,7,240,179,7,240,183,7,240,187,7,240,191,7,225,195,7,225,198,7,225,201,7,210,205,7,195,207, 7,180,210,7,165,213,7,150,215,7,135,217,7,120,220,7,105,222,7,90,224,7,75,225,7,60,227,7,45,229,7,30, 230,7,15,230,7,15,230,7,14,230,7,13,230,7,12,230,7,11,230,7,10,230,7,9,230,7,8,230,7,7,230,7, 6,230,7,5,230,7,4,230,7,3,230,7,2,230,7,1,230,7,0,46,12,45,12,45,12,45,12,45,12,46,76,47, 12,48,12,49,12,50,12,51,12,47,76,52,12,53,12,54,12,55,12,56,12,52,76,47,12,57,12,58,12,50,12,47, 76,45,12,52,12,59,12,60,12,55,12,52,76,45,12,46,140,45,12,45,12,45,12,45,12,46,204,107,76,113,12,108, 12,113,12,108,12,107,12,106,12,120,12,118,12,114,12,109,12,106,12,106,12,121,12,119,12,115,12,110,12,106,12,106, 12,116,12,111,12,116,12,111,12,106,12,106,12,113,140,108,140,117,12,112,12,106,12,107,204,106,12,106,12,113,140,108, 140,107,140,101,102,102,102,102,102,84,102,102,102,102,102,67,101,102,102,102,102,50,84,102,102,102,102,33,67,101,102,102, 102,16,50,84,102,102,102,1,33,67,101,102,102,18,16,50,84,102,102,35,1,33,67,101,102,52,18,16,50,84,102,69, 35,1,33,67,101,86,52,18,16,50,100,102,69,35,1,33,99,102,86,52,18,16,98,102,102,69,35,1,97,101,102,86, 52,18,96,84,102,102,69,35,97,67,101,102,86,52,98,50,84,102,102,69,99,33,67,101,102,86,100,16,50,84,102,102, 101,0,33,67,101,102,102,0,16,50,84,102,102,0,0,33,67,101,102,0,0,16,50,84,102,0,0,0,33,67,101,0, 0,0,16,50,100,0,0,0,0,33,99,0,0,0,0,16,98,0,0,0,0,0,97,0,0,0,0,0,96,0,0,0, 0,0,0,0,0,62,99,103,107,115,99,62,0,60,12,12,12,12,12,12,0,126,3,3,62,96,96,127,0,126,3,3, 62,3,3,126,0,30,54,102,102,102,127,6,0,127,96,96,126,3,3,126,0,62,96,96,126,99,99,62,0,127,99,6, 12,24,24,24,0,62,99,99,62,99,99,62,0,62,99,99,63,3,3,62,0,28,54,99,99,127,99,99,0,126,99,99, 126,99,99,126,0,62,99,96,96,96,99,62,0,124,102,99,99,99,102,124,0,127,96,96,126,96,96,127,0,127,96,96, 126,96,96,96,0,63,96,96,103,99,99,62,0,99,99,99,127,99,99,99,0,60,24,24,24,24,24,60,0,15,3,3, 99,99,99,62,0,99,102,108,120,108,102,99,0,96,96,96,96,96,96,127,0,99,119,127,107,99,99,99,0,99,115,123, 111,103,99,99,0,62,99,99,99,99,99,62,0,126,99,99,126,96,96,96,0,62,99,99,107,111,103,62,0,126,99,99, 126,108,102,99,0,62,99,96,62,3,99,62,0,126,24,24,24,24,24,24,0,99,99,99,99,99,99,62,0,99,99,99, 54,54,28,8,0,99,107,107,107,127,54,34,0,99,99,54,28,54,99,99,0,102,102,102,60,24,24,24,0,127,3,6, 12,24,48,127,0,34,119,127,127,62,28,8,0,24,28,22,18,18,112,96,0,8,8,8,127,8,8,8,0,0,0,0, 127,0,0,0,0,60,102,102,12,24,0,24,0,0,0,0,0,0,96,96,0,127,0,0,0,0,0,0,0,16,24,28, 30,28,24,16,0,255,255,255,255,255,255,255,255,15,63,127,127,255,255,255,255,255,248,248,248,248,248,248,248,255,1,0, 0,248,252,248,192,255,252,252,252,120,120,248,240,255,31,31,31,15,143,143,135,255,15,15,7,7,3,3,1,248,248,248, 248,248,248,248,248,193,192,248,252,248,0,0,1,241,241,97,99,99,64,192,192,199,199,195,227,227,33,49,49,17,16,24, 24,28,28,30,30,255,15,3,1,240,248,252,252,255,252,252,252,248,248,120,112,252,252,252,252,248,0,1,7,113,113,97, 99,227,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,234,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255, }; } } ares-126/mia/resource/resource.hpp000066400000000000000000000033761415063341600172670ustar00rootroot00000000000000namespace Resource { namespace GameBoy { extern const unsigned char BootDMG0[256]; extern const unsigned char BootDMG1[256]; extern const unsigned char BootMGB[256]; } namespace GameBoyColor { extern const unsigned char BootCGB0[2048]; extern const unsigned char BootCGB1[2048]; } namespace MegaDrive { extern const unsigned char TMSS[2048]; extern const unsigned char SVP[2048]; } namespace Mega32X { extern const unsigned char Vector[256]; extern const unsigned char SH2BootM[2048]; extern const unsigned char SH2BootS[1024]; } namespace MSX { extern const unsigned char BIOS[32768]; } namespace MSX2 { extern const unsigned char BIOS[32768]; extern const unsigned char Sub[16384]; } namespace Nintendo64 { extern const unsigned char CIC6101[1024]; extern const unsigned char CIC6102[1024]; extern const unsigned char CIC6105[1024]; extern const unsigned char CIC7101[1024]; extern const unsigned char PIFSM5[1024]; extern const unsigned char PIFNTSC[1984]; extern const unsigned char PIFPAL[1984]; } namespace SuperFamicom { extern const unsigned char IPLROM[64]; extern const unsigned char Cx4[3072]; extern const unsigned char DSP1[8192]; extern const unsigned char DSP1B[8192]; extern const unsigned char DSP2[8192]; extern const unsigned char DSP3[8192]; extern const unsigned char DSP4[8192]; extern const unsigned char SGB1[256]; extern const unsigned char SGB2[256]; extern const unsigned char ST010[53248]; extern const unsigned char ST011[53248]; extern const unsigned char ST018[163840]; extern const unsigned char S21FX[122]; extern const unsigned char Boards[31896]; } namespace WonderSwan { extern const unsigned char Boot[4096]; } namespace WonderSwanColor { extern const unsigned char Boot[8192]; } namespace PocketChallengeV2 { extern const unsigned char Boot[4096]; } } ares-126/mia/settings/000077500000000000000000000000001415063341600147275ustar00rootroot00000000000000ares-126/mia/settings/settings.cpp000066400000000000000000000010631415063341600172730ustar00rootroot00000000000000Settings settings; auto Settings::serialize() -> string { string s; #define write(name) s.append(#name, ": ", name, "\n") write(createManifests); write(useDatabase); write(useHeuristics); write(recent); #undef write return s; } auto Settings::unserialize(const string& markup) -> void { *this = {}; auto s = BML::unserialize(markup); #define read(name, type) if(auto node = s[#name]) name = node.type() read(createManifests, boolean); read(useDatabase, boolean); read(useHeuristics, boolean); read(recent, string); #undef read } ares-126/mia/settings/settings.hpp000066400000000000000000000004131415063341600172760ustar00rootroot00000000000000struct Settings { auto serialize() -> string; auto unserialize(const string&) -> void; boolean createManifests = false; boolean useDatabase = true; boolean useHeuristics = true; string recent = Path::user(); }; extern Settings settings; ares-126/mia/system/000077500000000000000000000000001415063341600144135ustar00rootroot00000000000000ares-126/mia/system/colecovision.cpp000066400000000000000000000007361415063341600176210ustar00rootroot00000000000000struct ColecoVision : System { auto name() -> string override { return "ColecoVision"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto ColecoVision::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", bios); return true; } auto ColecoVision::save(string location) -> bool { return true; } ares-126/mia/system/famicom.cpp000066400000000000000000000005531415063341600165350ustar00rootroot00000000000000struct Famicom : System { auto name() -> string override { return "Famicom"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto Famicom::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; return true; } auto Famicom::save(string location) -> bool { return true; } ares-126/mia/system/game-boy-advance.cpp000066400000000000000000000007501415063341600202200ustar00rootroot00000000000000struct GameBoyAdvance : System { auto name() -> string override { return "Game Boy Advance"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto GameBoyAdvance::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", bios); return true; } auto GameBoyAdvance::save(string location) -> bool { return true; } ares-126/mia/system/game-boy-color.cpp000066400000000000000000000006761415063341600177440ustar00rootroot00000000000000struct GameBoyColor : System { auto name() -> string override { return "Game Boy Color"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto GameBoyColor::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("boot.rom", Resource::GameBoyColor::BootCGB0); return true; } auto GameBoyColor::save(string location) -> bool { return true; } ares-126/mia/system/game-boy.cpp000066400000000000000000000006441415063341600166230ustar00rootroot00000000000000struct GameBoy : System { auto name() -> string override { return "Game Boy"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto GameBoy::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("boot.rom", Resource::GameBoy::BootDMG1); return true; } auto GameBoy::save(string location) -> bool { return true; } ares-126/mia/system/game-gear.cpp000066400000000000000000000007131415063341600167450ustar00rootroot00000000000000struct GameGear : System { auto name() -> string override { return "Game Gear"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto GameGear::load(string location) -> bool { auto bios = Pak::read(location); //optional this->location = locate(); pak = new vfs::directory; if(bios) pak->append("bios.rom", bios); return true; } auto GameGear::save(string location) -> bool { return true; } ares-126/mia/system/master-system.cpp000066400000000000000000000007331415063341600177370ustar00rootroot00000000000000struct MasterSystem : System { auto name() -> string override { return "Master System"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto MasterSystem::load(string location) -> bool { auto bios = Pak::read(location); //optional this->location = locate(); pak = new vfs::directory; if(bios) pak->append("bios.rom", bios); return true; } auto MasterSystem::save(string location) -> bool { return true; } ares-126/mia/system/mega-32x.cpp000066400000000000000000000011241415063341600164400ustar00rootroot00000000000000struct Mega32X : System { auto name() -> string override { return "Mega 32X"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto Mega32X::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("tmss.rom", Resource::MegaDrive::TMSS); pak->append("vector.rom", Resource::Mega32X::Vector); pak->append("sh2.boot.mrom", Resource::Mega32X::SH2BootM); pak->append("sh2.boot.srom", Resource::Mega32X::SH2BootS); return true; } auto Mega32X::save(string location) -> bool { return true; } ares-126/mia/system/mega-cd-32x.cpp000066400000000000000000000025501415063341600170300ustar00rootroot00000000000000struct MegaCD32X : System { auto name() -> string override { return "Mega CD 32X"; } auto load(string location) -> bool override; auto save(string location) -> bool override; static constexpr u8 bram[64] = { 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x00,0x00,0x00,0x00,0x40, 0x00,0x7d,0x00,0x7d,0x00,0x7d,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x53,0x45,0x47,0x41,0x5f,0x43,0x44,0x5f,0x52,0x4f,0x4d,0x00,0x01,0x00,0x00,0x00, 0x52,0x41,0x4d,0x5f,0x43,0x41,0x52,0x54,0x52,0x49,0x44,0x47,0x45,0x5f,0x5f,0x5f, }; }; auto MegaCD32X::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("tmss.rom", Resource::MegaDrive::TMSS); pak->append("bios.rom", bios); pak->append("vector.rom", Resource::Mega32X::Vector); pak->append("sh2.boot.mrom", Resource::Mega32X::SH2BootM); pak->append("sh2.boot.srom", Resource::Mega32X::SH2BootS); pak->append("backup.ram", 8_KiB); if(auto fp = pak->write("backup.ram")) { for(auto address : range(fp->size())) fp->write(0xff); fp->seek(fp->size() - sizeof(bram)); for(auto& byte : bram) fp->write(byte); } Pak::load("backup.ram", ".bram"); return true; } auto MegaCD32X::save(string location) -> bool { Pak::save("backup.ram", ".bram"); return true; } ares-126/mia/system/mega-cd.cpp000066400000000000000000000022511415063341600164140ustar00rootroot00000000000000struct MegaCD : System { auto name() -> string override { return "Mega CD"; } auto load(string location) -> bool override; auto save(string location) -> bool override; static constexpr u8 bram[64] = { 0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x00,0x00,0x00,0x00,0x40, 0x00,0x7d,0x00,0x7d,0x00,0x7d,0x00,0x7d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x53,0x45,0x47,0x41,0x5f,0x43,0x44,0x5f,0x52,0x4f,0x4d,0x00,0x01,0x00,0x00,0x00, 0x52,0x41,0x4d,0x5f,0x43,0x41,0x52,0x54,0x52,0x49,0x44,0x47,0x45,0x5f,0x5f,0x5f, }; }; auto MegaCD::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("tmss.rom", Resource::MegaDrive::TMSS); pak->append("bios.rom", bios); pak->append("backup.ram", 8_KiB); if(auto fp = pak->write("backup.ram")) { for(auto address : range(fp->size())) fp->write(0xff); fp->seek(fp->size() - sizeof(bram)); for(auto& byte : bram) fp->write(byte); } Pak::load("backup.ram", ".bram"); return true; } auto MegaCD::save(string location) -> bool { Pak::save("backup.ram", ".bram"); return true; } ares-126/mia/system/mega-drive.cpp000066400000000000000000000006521415063341600171420ustar00rootroot00000000000000struct MegaDrive : System { auto name() -> string override { return "Mega Drive"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto MegaDrive::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("tmss.rom", Resource::MegaDrive::TMSS); return true; } auto MegaDrive::save(string location) -> bool { return true; } ares-126/mia/system/msx.cpp000066400000000000000000000006131415063341600157260ustar00rootroot00000000000000struct MSX : System { auto name() -> string override { return "MSX"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto MSX::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", Resource::MSX::BIOS); return true; } auto MSX::save(string location) -> bool { return true; } ares-126/mia/system/msx2.cpp000066400000000000000000000006771415063341600160220ustar00rootroot00000000000000struct MSX2 : System { auto name() -> string override { return "MSX2"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto MSX2::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", Resource::MSX2::BIOS); pak->append("sub.rom", Resource::MSX2::Sub); return true; } auto MSX2::save(string location) -> bool { return true; } ares-126/mia/system/neo-geo-aes.cpp000066400000000000000000000016161415063341600172220ustar00rootroot00000000000000struct NeoGeoAES : System { auto name() -> string override { return "Neo Geo AES"; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto endianSwap(vector&) -> void; }; auto NeoGeoAES::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; if(location.iendsWith(".zip")) { Decode::ZIP archive; if(archive.open(location)) { for(auto& file : archive.file) { if(file.name == "neo-po.bin") { auto memory = archive.extract(file); endianSwap(memory); pak->append("bios.rom", memory); } } } } return true; } auto NeoGeoAES::save(string location) -> bool { return true; } auto NeoGeoAES::endianSwap(vector& memory) -> void { for(u32 offset = 0; offset < memory.size(); offset += 2) { swap(memory[offset + 0], memory[offset + 1]); } } ares-126/mia/system/neo-geo-mvs.cpp000066400000000000000000000016171415063341600172600ustar00rootroot00000000000000struct NeoGeoMVS : System { auto name() -> string override { return "Neo Geo MVS"; } auto load(string location) -> bool override; auto save(string location) -> bool override; auto endianSwap(vector&) -> void; }; auto NeoGeoMVS::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; if(location.iendsWith(".zip")) { Decode::ZIP archive; if(archive.open(location)) { for(auto& file : archive.file) { if(file.name == "vs-bios.rom") { auto memory = archive.extract(file); endianSwap(memory); pak->append("bios.rom", memory); } } } } return true; } auto NeoGeoMVS::save(string location) -> bool { return true; } auto NeoGeoMVS::endianSwap(vector& memory) -> void { for(u32 offset = 0; offset < memory.size(); offset += 2) { swap(memory[offset + 0], memory[offset + 1]); } } ares-126/mia/system/neo-geo-pocket-color.cpp000066400000000000000000000012771415063341600210560ustar00rootroot00000000000000struct NeoGeoPocketColor : System { auto name() -> string override { return "Neo Geo Pocket Color"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto NeoGeoPocketColor::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", bios); pak->append("cpu.ram", 12_KiB); pak->append("apu.ram", 4_KiB); Pak::load("cpu.ram", ".cram"); Pak::load("apu.ram", ".aram"); return true; } auto NeoGeoPocketColor::save(string location) -> bool { Pak::save("cpu.ram", ".cram"); Pak::save("apu.ram", ".aram"); return true; } ares-126/mia/system/neo-geo-pocket.cpp000066400000000000000000000012521415063341600177330ustar00rootroot00000000000000struct NeoGeoPocket : System { auto name() -> string override { return "Neo Geo Pocket"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto NeoGeoPocket::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", bios); pak->append("cpu.ram", 12_KiB); pak->append("apu.ram", 4_KiB); Pak::load("cpu.ram", ".cram"); Pak::load("apu.ram", ".aram"); return true; } auto NeoGeoPocket::save(string location) -> bool { Pak::save("cpu.ram", ".cram"); Pak::save("apu.ram", ".aram"); return true; } ares-126/mia/system/nintendo-64.cpp000066400000000000000000000010621415063341600171630ustar00rootroot00000000000000struct Nintendo64 : System { auto name() -> string override { return "Nintendo 64"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto Nintendo64::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("pif.ntsc.rom", Resource::Nintendo64::PIFNTSC); pak->append("pif.pal.rom", Resource::Nintendo64::PIFPAL ); pak->append("pif.sm5.rom", Resource::Nintendo64::PIFSM5 ); return true; } auto Nintendo64::save(string location) -> bool { return true; } ares-126/mia/system/pc-engine.cpp000066400000000000000000000007371415063341600167730ustar00rootroot00000000000000struct PCEngine : System { auto name() -> string override { return "PC Engine"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto PCEngine::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("backup.ram", 2_KiB); Pak::load("backup.ram", ".bram"); return true; } auto PCEngine::save(string location) -> bool { Pak::save("backup.ram", ".bram"); return true; } ares-126/mia/system/playstation.cpp000066400000000000000000000007331415063341600174710ustar00rootroot00000000000000struct PlayStation : System { auto name() -> string override { return "PlayStation"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto PlayStation::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", bios); return true; } auto PlayStation::save(string location) -> bool { return true; } ares-126/mia/system/pocket-challenge-v2.cpp000066400000000000000000000007241415063341600206540ustar00rootroot00000000000000struct PocketChallengeV2 : System { auto name() -> string override { return "Pocket Challenge V2"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto PocketChallengeV2::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("boot.rom", Resource::PocketChallengeV2::Boot); return true; } auto PocketChallengeV2::save(string location) -> bool { return true; } ares-126/mia/system/saturn.cpp000066400000000000000000000007071415063341600164370ustar00rootroot00000000000000struct Saturn : System { auto name() -> string override { return "Saturn"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto Saturn::load(string location) -> bool { auto bios = Pak::read(location); if(!bios) return false; this->location = locate(); pak = new vfs::directory; pak->append("bios.rom", bios); return true; } auto Saturn::save(string location) -> bool { return true; } ares-126/mia/system/sc-3000.cpp000066400000000000000000000005501415063341600161040ustar00rootroot00000000000000struct SC3000 : System { auto name() -> string override { return "SC-3000"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto SC3000::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; return true; } auto SC3000::save(string location) -> bool { return true; } ares-126/mia/system/sg-1000.cpp000066400000000000000000000005501415063341600161060ustar00rootroot00000000000000struct SG1000 : System { auto name() -> string override { return "SG-1000"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto SG1000::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; return true; } auto SG1000::save(string location) -> bool { return true; } ares-126/mia/system/super-famicom.cpp000066400000000000000000000007671415063341600177000ustar00rootroot00000000000000struct SuperFamicom : System { auto name() -> string override { return "Super Famicom"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto SuperFamicom::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("ipl.rom", Resource::SuperFamicom::IPLROM); pak->append("boards.bml", Resource::SuperFamicom::Boards); return true; } auto SuperFamicom::save(string location) -> bool { return true; } ares-126/mia/system/supergrafx.cpp000066400000000000000000000007461415063341600173140ustar00rootroot00000000000000struct SuperGrafx : System { auto name() -> string override { return "SuperGrafx"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto SuperGrafx::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("backup.ram", 2_KiB); Pak::load("backup.ram", ".bram"); return true; } auto SuperGrafx::save(string location) -> bool { Pak::save("backup.ram", ".bram"); return true; } ares-126/mia/system/system.cpp000066400000000000000000000052151415063341600164460ustar00rootroot00000000000000namespace Systems { #include "colecovision.cpp" #include "famicom.cpp" #include "game-boy.cpp" #include "game-boy-color.cpp" #include "game-boy-advance.cpp" #include "master-system.cpp" #include "game-gear.cpp" #include "mega-drive.cpp" #include "mega-32x.cpp" #include "mega-cd.cpp" #include "mega-cd-32x.cpp" #include "msx.cpp" #include "msx2.cpp" #include "neo-geo-aes.cpp" #include "neo-geo-mvs.cpp" #include "neo-geo-pocket.cpp" #include "neo-geo-pocket-color.cpp" #include "nintendo-64.cpp" #include "pc-engine.cpp" #include "saturn.cpp" #include "supergrafx.cpp" #include "playstation.cpp" #include "sg-1000.cpp" #include "sc-3000.cpp" #include "super-famicom.cpp" #include "wonderswan.cpp" #include "wonderswan-color.cpp" #include "pocket-challenge-v2.cpp" } auto System::create(string name) -> shared_pointer { if(name == "ColecoVision") return new Systems::ColecoVision; if(name == "Famicom") return new Systems::Famicom; if(name == "Game Boy") return new Systems::GameBoy; if(name == "Game Boy Color") return new Systems::GameBoyColor; if(name == "Game Boy Advance") return new Systems::GameBoyAdvance; if(name == "Master System") return new Systems::MasterSystem; if(name == "Game Gear") return new Systems::GameGear; if(name == "Mega Drive") return new Systems::MegaDrive; if(name == "Mega 32X") return new Systems::Mega32X; if(name == "Mega CD") return new Systems::MegaCD; if(name == "Mega CD 32X") return new Systems::MegaCD32X; if(name == "MSX") return new Systems::MSX; if(name == "MSX2") return new Systems::MSX2; if(name == "Neo Geo AES") return new Systems::NeoGeoAES; if(name == "Neo Geo MVS") return new Systems::NeoGeoMVS; if(name == "Neo Geo Pocket") return new Systems::NeoGeoPocket; if(name == "Neo Geo Pocket Color") return new Systems::NeoGeoPocketColor; if(name == "Nintendo 64") return new Systems::Nintendo64; if(name == "PC Engine") return new Systems::PCEngine; if(name == "Saturn") return new Systems::Saturn; if(name == "SuperGrafx") return new Systems::SuperGrafx; if(name == "PlayStation") return new Systems::PlayStation; if(name == "SG-1000") return new Systems::SG1000; if(name == "SC-3000") return new Systems::SC3000; if(name == "Super Famicom") return new Systems::SuperFamicom; if(name == "WonderSwan") return new Systems::WonderSwan; if(name == "WonderSwan Color") return new Systems::WonderSwanColor; if(name == "Pocket Challenge V2") return new Systems::PocketChallengeV2; return {}; } auto System::locate() -> string { string location = {mia::homeLocation(), name(), ".sys/"}; directory::create(location); return location; } ares-126/mia/system/system.hpp000066400000000000000000000003501415063341600164460ustar00rootroot00000000000000struct System : Pak { static auto create(string name) -> shared_pointer; auto type() -> string override { return "System"; } auto extensions() -> vector override { return {"sys"}; } auto locate() -> string; }; ares-126/mia/system/wonderswan-color.cpp000066400000000000000000000010751415063341600204250ustar00rootroot00000000000000struct WonderSwanColor : System { auto name() -> string override { return "WonderSwan Color"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto WonderSwanColor::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("boot.rom", Resource::WonderSwanColor::Boot); pak->append("save.eeprom", 2048); Pak::load("save.eeprom", ".eeprom"); return true; } auto WonderSwanColor::save(string location) -> bool { Pak::save("save.eeprom", ".eeprom"); return true; } ares-126/mia/system/wonderswan.cpp000066400000000000000000000010421415063341600173030ustar00rootroot00000000000000struct WonderSwan : System { auto name() -> string override { return "WonderSwan"; } auto load(string location) -> bool override; auto save(string location) -> bool override; }; auto WonderSwan::load(string location) -> bool { this->location = locate(); pak = new vfs::directory; pak->append("boot.rom", Resource::WonderSwan::Boot); pak->append("save.eeprom", 128); Pak::load("save.eeprom", ".eeprom"); return true; } auto WonderSwan::save(string location) -> bool { Pak::save("save.eeprom", ".eeprom"); return true; } ares-126/nall/000077500000000000000000000000001415063341600132475ustar00rootroot00000000000000ares-126/nall/GNUmakefile000066400000000000000000000153431415063341600153270ustar00rootroot00000000000000# disable built-in rules and variables MAKEFLAGS := Rr .SUFFIXES: [0-9] = 0 1 2 3 4 5 6 7 8 9 [A-Z] = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [a-z] = a b c d e f g h i j k l m n o p q r s t u v w x y z [markup] = ` ~ ! @ \# $$ % ^ & * ( ) - _ = + [ { ] } \ | ; : ' " , < . > / ? [all] = $([0-9]) $([A-Z]) $([a-z]) $([markup]) [empty] := [space] := $([empty]) $([empty]) # platform detection ifeq ($(platform),) ifeq ($(OS),Windows_NT) platform := windows endif endif ifeq ($(platform),) uname := $(shell uname) ifeq ($(uname),) platform := windows else ifneq ($(findstring Windows,$(uname)),) platform := windows else ifneq ($(findstring NT,$(uname)),) platform := windows else ifneq ($(findstring Darwin,$(uname)),) platform := macos else ifneq ($(findstring Linux,$(uname)),) platform := linux else ifneq ($(findstring BSD,$(uname)),) platform := bsd else $(error unknown platform, please specify manually.) endif endif # common commands ifeq ($(shell echo ^^),^) # cmd delete = $(info Deleting $1 ...) @del /q $(subst /,\,$1) rdelete = $(info Deleting $1 ...) @del /s /q $(subst /,\,$1) && if exist $(subst /,\,$1) (rmdir /s /q $(subst /,\,$1)) else # sh delete = $(info Deleting $1 ...) @rm -f $1 rdelete = $(info Deleting $1 ...) @rm -rf $1 endif compiler.c = $(compiler) -x c -std=c11 compiler.cpp = $(compiler) -x c++ -std=c++17 -fno-operator-names compiler.objc = $(compiler) -x objective-c -std=c11 compiler.objcpp = $(compiler) -x objective-c++ -std=c++17 -fno-operator-names flags.c = -x c -std=c11 flags.cpp = -x c++ -std=c++17 -fno-operator-names flags.objc = -x objective-c -std=c11 flags.objcpp = -x objective-c++ -std=c++17 -fno-operator-names flags.deps = -MMD -MP -MF $(@:.o=.d) # compiler detection ifeq ($(compiler),) ifeq ($(platform),windows) compiler := g++ compiler.cpp = $(compiler) -x c++ -std=gnu++17 -fno-operator-names flags.cpp = -x c++ -std=gnu++17 -fno-operator-names else ifeq ($(platform),macos) compiler := clang++ else ifeq ($(platform),linux) compiler := g++ else ifeq ($(platform),bsd) compiler := clang++ else compiler := g++ endif endif # build optimization levels ifeq ($(build),debug) symbols = true flags += -Og -DBUILD_DEBUG else ifeq ($(build),stable) lto = true flags += -O1 -DBUILD_STABLE else ifeq ($(build),minified) lto = true flags += -Os -DBUILD_MINIFIED else ifeq ($(build),release) lto = true flags += -O2 -DBUILD_RELEASE else ifeq ($(build),optimized) lto = true flags += -O3 -fomit-frame-pointer -DBUILD_OPTIMIZED else $(error unrecognized build type.) endif # debugging information ifeq ($(symbols),true) flags += -g ifeq ($(platform),windows) ifeq ($(findstring clang++,$(compiler)),clang++) flags += -gcodeview options += -Wl,-pdb= endif endif endif # link-time optimization ifeq ($(lto),true) flags += -flto options += -fwhole-program ifneq ($(findstring clang++,$(compiler)),clang++) flags += -fwhole-program -fno-fat-lto-objects options += -flto=jobserver else options += -flto=thin endif endif # openmp support ifeq ($(openmp),true) # macOS Xcode does not ship with OpenMP support ifneq ($(platform),macos) flags += -fopenmp options += -fopenmp endif endif # clang settings ifeq ($(findstring clang++,$(compiler)),clang++) flags += -fno-strict-aliasing -fwrapv # gcc settings else ifeq ($(findstring g++,$(compiler)),g++) flags += -fno-strict-aliasing -fwrapv -Wno-trigraphs endif # windows settings ifeq ($(platform),windows) options += -mthreads -lpthread -lws2_32 -lole32 options += $(if $(findstring clang++,$(compiler)),-fuse-ld=lld) options += $(if $(findstring g++,$(compiler)),-static -static-libgcc -static-libstdc++) options += $(if $(findstring true,$(console)),-mconsole,-mwindows) windres := windres endif # macos settings ifeq ($(platform),macos) flags += -stdlib=libc++ -mmacosx-version-min=10.9 -Wno-auto-var-id -fobjc-arc options += -lc++ -lobjc -mmacosx-version-min=10.9 # allow mprotect() on dynamic recompiler code blocks options += -Wl,-segprot,__DATA,rwx,rw ifneq ($(local),true) flags += -arch x86_64 options += -arch x86_64 endif endif # linux settings ifeq ($(platform),linux) options += -ldl endif # bsd settings ifeq ($(platform),bsd) flags += -I/usr/local/include options += -Wl,-rpath=/usr/local/lib options += -Wl,-rpath=/usr/local/lib/gcc8 options += -lstdc++ -lm endif # threading support ifeq ($(threaded),true) ifneq ($(filter $(platform),linux bsd),) flags += -pthread options += -pthread -lrt endif endif # paths ifeq ($(object.path),) object.path := obj endif ifeq ($(output.path),) output.path := out endif # rules default: all; nall.verbose: $(info Compiler Flags:) $(foreach n,$(sort $(call unique,$(flags))),$(if $(filter-out -I%,$n),$(info $([space]) $n))) $(info Linker Options:) $(foreach n,$(sort $(call unique,$(options))),$(if $(filter-out -l%,$n),$(info $([space]) $n))) %.o: $< $(info Compiling $(subst ../,,$<) ...) @$(call compile) # function compile([arguments]) compile = \ $(strip \ $(if $(filter %.c,$<), \ $(compiler.c) $(flags.deps) $(flags) $1 -c $< -o $@ \ ,$(if $(filter %.cpp,$<), \ $(compiler.cpp) $(flags.deps) $(flags) $1 -c $< -o $@ \ )) \ ) # function rwildcard(directory, pattern) rwildcard = \ $(strip \ $(filter $(if $2,$2,%), \ $(foreach f, \ $(wildcard $1*), \ $(eval t = $(call rwildcard,$f/)) \ $(if $t,$t,$f) \ ) \ ) \ ) # function unique(source) unique = \ $(eval __temp :=) \ $(strip \ $(foreach s,$1,$(if $(filter $s,$(__temp)),,$(eval __temp += $s))) \ $(__temp) \ ) # function strtr(source, from, to) strtr = \ $(eval __temp := $1) \ $(strip \ $(foreach c, \ $(join $(addsuffix :,$2),$3), \ $(eval __temp := \ $(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),$(__temp)) \ ) \ ) \ $(__temp) \ ) # function strupper(source) strupper = $(call strtr,$1,$([a-z]),$([A-Z])) # function strlower(source) strlower = $(call strtr,$1,$([A-Z]),$([a-z])) # function strlen(source) strlen = \ $(eval __temp := $(subst $([space]),_,$1)) \ $(words \ $(strip \ $(foreach c, \ $([all]), \ $(eval __temp := \ $(subst $c,$c ,$(__temp)) \ ) \ ) \ $(__temp) \ ) \ ) # function streq(source) streq = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),,1) # function strne(source) strne = $(if $(filter-out xx,x$(subst $1,,$2)$(subst $2,,$1)x),1,) # prefix ifeq ($(platform),windows) prefix := $(subst $([space]),\$([space]),$(strip $(call strtr,$(LOCALAPPDATA),\,/))) else prefix := $(HOME)/.local endif ares-126/nall/adaptive-array.hpp000066400000000000000000000023211415063341600166670ustar00rootroot00000000000000//deprecated #pragma once #include #include namespace nall { template struct adaptive_array { auto capacity() const -> u32 { return Capacity; } auto size() const -> u32 { return _size; } auto reset() -> void { for(u32 n : range(_size)) _pool.t[n].~T(); _size = 0; } auto operator[](u32 index) -> T& { #ifdef DEBUG struct out_of_bounds {}; if(index >= Capacity) throw out_of_bounds{}; #endif return _pool.t[index]; } auto operator[](u32 index) const -> const T& { #ifdef DEBUG struct out_of_bounds {}; if(index >= Capacity) throw out_of_bounds{}; #endif return _pool.t[index]; } auto append() -> T& { new(_pool.t + _size) T; return _pool.t[_size++]; } auto append(const T& value) -> void { new(_pool.t + _size++) T(value); } auto append(T&& value) -> void { new(_pool.t + _size++) T(move(value)); } auto begin() { return &_pool.t[0]; } auto end() { return &_pool.t[_size]; } auto begin() const { return &_pool.t[0]; } auto end() const { return &_pool.t[_size]; } private: union U { U() {} ~U() {} T t[Capacity]; } _pool; u32 _size = 0; }; } ares-126/nall/algorithm.hpp000066400000000000000000000012411415063341600157440ustar00rootroot00000000000000#pragma once #include #undef min #undef max namespace nall { template constexpr auto min(const T& t, const U& u) -> T { return t < u ? t : (T)u; } template constexpr auto min(const T& t, const U& u, P&&... p) -> T { return t < u ? min(t, forward

(p)...) : min(u, forward

(p)...); } template constexpr auto max(const T& t, const U& u) -> T { return t > u ? t : (T)u; } template constexpr auto max(const T& t, const U& u, P&&... p) -> T { return t > u ? max(t, forward

(p)...) : max(u, forward

(p)...); } } ares-126/nall/any.hpp000066400000000000000000000046411415063341600145540ustar00rootroot00000000000000#pragma once #include #include namespace nall { struct any { any() = default; any(const any& source) { operator=(source); } any(any&& source) { operator=(move(source)); } template any(const T& value) { operator=(value); } ~any() { reset(); } explicit operator bool() const { return container; } auto reset() -> void { if(container) { delete container; container = nullptr; } } auto type() const -> const std::type_info& { return container ? container->type() : typeid(void); } template auto is() const -> bool { return type() == typeid(typename remove_reference::type); } template auto get() -> T& { if(!is()) throw; return static_cast::type>*>(container)->value; } template auto get() const -> const T& { if(!is()) throw; return static_cast::type>*>(container)->value; } template auto get(const T& fallback) const -> const T& { if(!is()) return fallback; return static_cast::type>*>(container)->value; } template auto operator=(const T& value) -> any& { using auto_t = typename conditional::value, typename remove_extent::type>::type*, T>::type; if(type() == typeid(auto_t)) { static_cast*>(container)->value = (auto_t)value; } else { if(container) delete container; container = new holder((auto_t)value); } return *this; } auto operator=(const any& source) -> any& { if(container) { delete container; container = nullptr; } if(source.container) container = source.container->copy(); return *this; } auto operator=(any&& source) -> any& { if(container) delete container; container = source.container; source.container = nullptr; return *this; } private: struct placeholder { virtual ~placeholder() = default; virtual auto type() const -> const std::type_info& = 0; virtual auto copy() const -> placeholder* = 0; }; placeholder* container = nullptr; template struct holder : placeholder { holder(const T& value) : value(value) {} auto type() const -> const std::type_info& { return typeid(T); } auto copy() const -> placeholder* { return new holder(value); } T value; }; }; } ares-126/nall/arguments.hpp000066400000000000000000000104751415063341600157740ustar00rootroot00000000000000#pragma once #include #include #include #include namespace nall { struct Arguments { Arguments(int argc, char** argv); Arguments(vector arguments); explicit operator bool() const { return (bool)arguments; } auto size() const -> u32 { return arguments.size(); } auto operator[](u32 index) -> string& { return arguments[index]; } auto operator[](u32 index) const -> const string& { return arguments[index]; } auto programPath() const -> string; auto programName() const -> string; auto programLocation() const -> string; auto find(string_view name) const -> bool; auto find(string_view name, bool& argument) const -> bool; auto find(string_view name, string& argument) const -> bool; auto begin() const { return arguments.begin(); } auto end() const { return arguments.end(); } auto rbegin() const { return arguments.rbegin(); } auto rend() const { return arguments.rend(); } auto take() -> string; auto take(string_view name) -> bool; auto take(string_view name, bool& argument) -> bool; auto take(string_view name, string& argument) -> bool; auto begin() { return arguments.begin(); } auto end() { return arguments.end(); } auto rbegin() { return arguments.rbegin(); } auto rend() { return arguments.rend(); } private: auto construct() -> void; string programArgument; vector arguments; }; inline auto Arguments::construct() -> void { if(!arguments) return; //extract and pre-process program argument programArgument = arguments.takeFirst(); programArgument = {Path::real(programArgument), Location::file(programArgument)}; //normalize path and file arguments for(auto& argument : arguments) { if(directory::exists(argument)) argument.transform("\\", "/").trimRight("/").append("/"); else if(file::exists(argument)) argument.transform("\\", "/").trimRight("/"); } } inline Arguments::Arguments(int argc, char** argv) { #if defined(PLATFORM_WINDOWS) utf8_arguments(argc, argv); #endif for(u32 index : range(argc)) arguments.append(argv[index]); construct(); } inline Arguments::Arguments(vector arguments) { this->arguments = arguments; construct(); } inline auto Arguments::programPath() const -> string { return Location::path(programArgument); } inline auto Arguments::programName() const -> string { return Location::file(programArgument); } inline auto Arguments::programLocation() const -> string { return programArgument; } inline auto Arguments::find(string_view name) const -> bool { for(u32 index : range(arguments.size())) { if(arguments[index].match(name)) { return true; } } return false; } inline auto Arguments::find(string_view name, bool& argument) const -> bool { for(u32 index : range(arguments.size())) { if(arguments[index].match(name) && arguments.size() >= index && (arguments[index + 1] == "true" || arguments[index + 1] == "false")) { argument = arguments[index + 1] == "true"; return true; } } return false; } inline auto Arguments::find(string_view name, string& argument) const -> bool { for(u32 index : range(arguments.size())) { if(arguments[index].match(name) && arguments.size() >= index) { argument = arguments[index + 1]; return true; } } return false; } // inline auto Arguments::take() -> string { if(!arguments) return {}; return arguments.takeFirst(); } inline auto Arguments::take(string_view name) -> bool { for(u32 index : range(arguments.size())) { if(arguments[index].match(name)) { arguments.remove(index); return true; } } return false; } inline auto Arguments::take(string_view name, bool& argument) -> bool { for(u32 index : range(arguments.size())) { if(arguments[index].match(name) && arguments.size() > index + 1 && (arguments[index + 1] == "true" || arguments[index + 1] == "false")) { arguments.remove(index); argument = arguments.take(index) == "true"; return true; } } return false; } inline auto Arguments::take(string_view name, string& argument) -> bool { for(u32 index : range(arguments.size())) { if(arguments[index].match(name) && arguments.size() > index + 1) { arguments.remove(index); argument = arguments.take(index); return true; } } return false; } } ares-126/nall/arithmetic.hpp000066400000000000000000000041531415063341600161140ustar00rootroot00000000000000#pragma once //multi-precision arithmetic //warning: each size is quadratically more expensive than the size before it! #include #include #include #include #include namespace nall { template struct ArithmeticNatural; template<> struct ArithmeticNatural< 8> { using type = u8; }; template<> struct ArithmeticNatural< 16> { using type = u16; }; template<> struct ArithmeticNatural< 32> { using type = u32; }; template<> struct ArithmeticNatural< 64> { using type = u64; }; #if defined(__SIZEOF_INT128__) template<> struct ArithmeticNatural<128> { using type = u128; }; #endif } #if !defined(__SIZEOF_INT128__) #define PairBits 128 #define TypeBits 64 #define HalfBits 32 #include #undef PairBits #undef TypeBits #undef HalfBits #endif #define PairBits 256 #define TypeBits 128 #define HalfBits 64 #include #undef PairBits #undef TypeBits #undef HalfBits #define PairBits 512 #define TypeBits 256 #define HalfBits 128 #include #undef PairBits #undef TypeBits #undef HalfBits #define PairBits 1024 #define TypeBits 512 #define HalfBits 256 #include #undef PairBits #undef TypeBits #undef HalfBits #define PairBits 2048 #define TypeBits 1024 #define HalfBits 512 #include #undef PairBits #undef TypeBits #undef HalfBits #define PairBits 4096 #define TypeBits 2048 #define HalfBits 1024 #include #undef PairBits #undef TypeBits #undef HalfBits #define PairBits 8192 #define TypeBits 4096 #define HalfBits 2048 #include #undef PairBits #undef TypeBits #undef HalfBits namespace nall { //TODO: these types are for expressing smaller bit ranges in class interfaces //for instance, XChaCha20 taking a 192-bit nonce //however, they still allow more bits than expressed ... //some sort of wrapper needs to be devised to ensure these sizes are masked and wrap appropriately using u192 = u256; } ares-126/nall/arithmetic/000077500000000000000000000000001415063341600154005ustar00rootroot00000000000000ares-126/nall/arithmetic/barrett.hpp000066400000000000000000000013121415063341600175510ustar00rootroot00000000000000#pragma once namespace nall { template struct BarrettReduction { using type = typename ArithmeticNatural<1 * Bits>::type; using pair = typename ArithmeticNatural<2 * Bits>::type; explicit BarrettReduction(type modulo) : modulo(modulo), factor(pair(1) + -pair(modulo) / modulo) {} //return => value % modulo auto operator()(pair value) const -> type { pair hi, lo; mul(value, factor, hi, lo); pair remainder = value - hi * modulo; return remainder < modulo ? remainder : remainder - modulo; } private: const pair modulo; const pair factor; }; template auto operator%(T value, const BarrettReduction& modulo) { return modulo(value); } } ares-126/nall/arithmetic/natural.hpp000066400000000000000000000374331415063341600175710ustar00rootroot00000000000000#define ConcatenateType(Size) u##Size #define DeclareType(Size) ConcatenateType(Size) #define Pair DeclareType(PairBits) #define Type DeclareType(TypeBits) #define Half DeclareType(HalfBits) //pick the larger of two types to prevent unnecessary data clamping #define Cast (typename conditional= sizeof(T), Pair, T>::type) namespace nall { //namespace Arithmetic { struct Pair { Pair() = default; explicit constexpr Pair(const Pair& source) : hi(source.hi), lo(source.lo) {} template constexpr Pair(const Hi& hi, const Lo& lo) : hi(hi), lo(lo) {} template Pair(const T& source) { _set(*this, source); } explicit operator bool() const { return hi | lo; } template operator T() const { T value; _get(*this, value); return value; } auto operator+() const -> Pair { return *this; } auto operator-() const -> Pair { return Pair(0) - *this; } auto operator~() const -> Pair { return {~hi, ~lo}; } auto operator!() const -> bool { return !(hi || lo); } auto operator++() -> Pair& { lo++; hi += lo == 0; return *this; } auto operator--() -> Pair& { hi -= lo == 0; lo--; return *this; } auto operator++(s32) -> Pair { Pair r = *this; lo++; hi += lo == 0; return r; } auto operator--(s32) -> Pair { Pair r = *this; hi -= lo == 0; lo--; return r; } auto operator* (const Pair& rhs) const -> Pair { return mul(*this, rhs); } auto operator/ (const Pair& rhs) const -> Pair { Pair q, r; div(*this, rhs, q, r); return q; } auto operator% (const Pair& rhs) const -> Pair { Pair q, r; div(*this, rhs, q, r); return r; } auto operator+ (const Pair& rhs) const -> Pair { return {hi + rhs.hi + (lo + rhs.lo < lo), lo + rhs.lo}; } auto operator- (const Pair& rhs) const -> Pair { return {hi - rhs.hi - (lo - rhs.lo > lo), lo - rhs.lo}; } auto operator<<(const Pair& rhs) const -> Pair { return shl(*this, rhs); } auto operator>>(const Pair& rhs) const -> Pair { return shr(*this, rhs); } auto operator& (const Pair& rhs) const -> Pair { return {hi & rhs.hi, lo & rhs.lo}; } auto operator| (const Pair& rhs) const -> Pair { return {hi | rhs.hi, lo | rhs.lo}; } auto operator^ (const Pair& rhs) const -> Pair { return {hi ^ rhs.hi, lo ^ rhs.lo}; } auto operator==(const Pair& rhs) const -> bool { return hi == rhs.hi && lo == rhs.lo; } auto operator!=(const Pair& rhs) const -> bool { return hi != rhs.hi || lo != rhs.lo; } auto operator>=(const Pair& rhs) const -> bool { return hi > rhs.hi || (hi == rhs.hi && lo >= rhs.lo); } auto operator<=(const Pair& rhs) const -> bool { return hi < rhs.hi || (hi == rhs.hi && lo <= rhs.lo); } auto operator> (const Pair& rhs) const -> bool { return hi > rhs.hi || (hi == rhs.hi && lo > rhs.lo); } auto operator< (const Pair& rhs) const -> bool { return hi < rhs.hi || (hi == rhs.hi && lo < rhs.lo); } template auto& operator*= (const T& rhs) { return *this = *this * Pair(rhs); } template auto& operator/= (const T& rhs) { return *this = *this / Pair(rhs); } template auto& operator%= (const T& rhs) { return *this = *this % Pair(rhs); } template auto& operator+= (const T& rhs) { return *this = *this + Pair(rhs); } template auto& operator-= (const T& rhs) { return *this = *this - Pair(rhs); } template auto& operator<<=(const T& rhs) { return *this = *this << Pair(rhs); } template auto& operator>>=(const T& rhs) { return *this = *this >> Pair(rhs); } template auto& operator&= (const T& rhs) { return *this = *this & Pair(rhs); } template auto& operator|= (const T& rhs) { return *this = *this | Pair(rhs); } template auto& operator^= (const T& rhs) { return *this = *this ^ Pair(rhs); } template auto operator* (const T& rhs) const { return Cast(*this) * Cast(rhs); } template auto operator/ (const T& rhs) const { return Cast(*this) / Cast(rhs); } template auto operator% (const T& rhs) const { return Cast(*this) % Cast(rhs); } template auto operator+ (const T& rhs) const { return Cast(*this) + Cast(rhs); } template auto operator- (const T& rhs) const { return Cast(*this) - Cast(rhs); } template auto operator<<(const T& rhs) const { return Cast(*this) << Cast(rhs); } template auto operator>>(const T& rhs) const { return Cast(*this) >> Cast(rhs); } template auto operator& (const T& rhs) const { return Cast(*this) & Cast(rhs); } template auto operator| (const T& rhs) const { return Cast(*this) | Cast(rhs); } template auto operator^ (const T& rhs) const { return Cast(*this) ^ Cast(rhs); } template auto operator==(const T& rhs) const -> bool { return Cast(*this) == Cast(rhs); } template auto operator!=(const T& rhs) const -> bool { return Cast(*this) != Cast(rhs); } template auto operator>=(const T& rhs) const -> bool { return Cast(*this) >= Cast(rhs); } template auto operator<=(const T& rhs) const -> bool { return Cast(*this) <= Cast(rhs); } template auto operator> (const T& rhs) const -> bool { return Cast(*this) > Cast(rhs); } template auto operator< (const T& rhs) const -> bool { return Cast(*this) < Cast(rhs); } private: Type lo; Type hi; friend auto upper(const Pair&) -> Type; friend auto lower(const Pair&) -> Type; friend auto bits(Pair) -> u32; friend auto square(const Pair&) -> Pair; friend auto square(const Pair&, Pair&, Pair&) -> void; friend auto mul(const Pair&, const Pair&) -> Pair; friend auto mul(const Pair&, const Pair&, Pair&, Pair&) -> void; friend auto div(const Pair&, const Pair&, Pair&, Pair&) -> void; template friend auto shl(const Pair&, const T&) -> Pair; template friend auto shr(const Pair&, const T&) -> Pair; }; template<> struct ArithmeticNatural { using type = Pair; }; #define ConcatenateUDL(Size) _u##Size #define DeclareUDL(Size) ConcatenateUDL(Size) alwaysinline auto operator"" DeclareUDL(PairBits)(const char* s) -> Pair { Pair p = 0; if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) { s += 2; while(*s) { auto c = *s++; if(c == '\''); else if(c >= '0' && c <= '9') p = (p << 4) + (c - '0'); else if(c >= 'a' && c <= 'f') p = (p << 4) + (c - 'a' + 10); else if(c >= 'A' && c <= 'F') p = (p << 4) + (c - 'A' + 10); else break; } } else { while(*s) { auto c = *s++; if(c == '\''); else if(c >= '0' && c <= '9') p = (p << 3) + (p << 1) + (c - '0'); else break; } } return p; } #undef ConcatenateUDL #undef DeclareUDL template alwaysinline auto _set(Pair& lhs, const T& rhs) -> enable_if_t<(sizeof(Pair) == sizeof(T))> { lhs = rhs; } template alwaysinline auto _set(Pair& lhs, const T& rhs) -> enable_if_t<(sizeof(Pair) > sizeof(T))> { lhs = {0, rhs}; } template alwaysinline auto _set(Pair& lhs, const T& rhs) -> enable_if_t<(sizeof(Pair) < sizeof(T))> { lhs = {lower(rhs) >> TypeBits, lower(rhs)}; } template alwaysinline auto _get(const Pair& lhs, T& rhs) -> enable_if_t<(sizeof(T) == sizeof(Pair))> { rhs = lhs; } template alwaysinline auto _get(const Pair& lhs, T& rhs) -> enable_if_t<(sizeof(T) > sizeof(Pair))> { rhs = {0, lhs}; } template alwaysinline auto _get(const Pair& lhs, T& rhs) -> enable_if_t<(sizeof(T) < sizeof(Pair))> { rhs = lower(lhs); } alwaysinline auto upper(const Pair& value) -> Type { return value.hi; } alwaysinline auto lower(const Pair& value) -> Type { return value.lo; } alwaysinline auto bits(Pair value) -> u32 { if(value.hi) { u32 bits = TypeBits; while(value.hi) value.hi >>= 1, bits++; return bits; } else { u32 bits = 0; while(value.lo) value.lo >>= 1, bits++; return bits; } } //Bits * Bits => Bits inline auto square(const Pair& lhs) -> Pair { static const Type Mask = (Type(0) - 1) >> HalfBits; Type a = lhs.hi >> HalfBits, b = lhs.hi & Mask, c = lhs.lo >> HalfBits, d = lhs.lo & Mask; Type dd = square(d), dc = d * c, db = d * b, da = d * a; Type cc = square(c), cb = c * b; Pair r0 = Pair(dd); Pair r1 = Pair(dc) + Pair(dc) + Pair(r0 >> HalfBits); Pair r2 = Pair(db) + Pair(cc) + Pair(db) + Pair(r1 >> HalfBits); Pair r3 = Pair(da) + Pair(cb) + Pair(cb) + Pair(da) + Pair(r2 >> HalfBits); return {(r3.lo & Mask) << HalfBits | (r2.lo & Mask), (r1.lo & Mask) << HalfBits | (r0.lo & Mask)}; } //Bits * Bits => 2 * Bits inline auto square(const Pair& lhs, Pair& hi, Pair& lo) -> void { static const Type Mask = (Type(0) - 1) >> HalfBits; Type a = lhs.hi >> HalfBits, b = lhs.hi & Mask, c = lhs.lo >> HalfBits, d = lhs.lo & Mask; Type dd = square(d), dc = d * c, db = d * b, da = d * a; Type cc = square(c), cb = c * b, ca = c * a; Type bb = square(b), ba = b * a; Type aa = square(a); Pair r0 = Pair(dd); Pair r1 = Pair(dc) + Pair(dc) + Pair(r0 >> HalfBits); Pair r2 = Pair(db) + Pair(cc) + Pair(db) + Pair(r1 >> HalfBits); Pair r3 = Pair(da) + Pair(cb) + Pair(cb) + Pair(da) + Pair(r2 >> HalfBits); Pair r4 = Pair(ca) + Pair(bb) + Pair(ca) + Pair(r3 >> HalfBits); Pair r5 = Pair(ba) + Pair(ba) + Pair(r4 >> HalfBits); Pair r6 = Pair(aa) + Pair(r5 >> HalfBits); Pair r7 = Pair(r6 >> HalfBits); hi = {(r7.lo & Mask) << HalfBits | (r6.lo & Mask), (r5.lo & Mask) << HalfBits | (r4.lo & Mask)}; lo = {(r3.lo & Mask) << HalfBits | (r2.lo & Mask), (r1.lo & Mask) << HalfBits | (r0.lo & Mask)}; } //Bits * Bits => Bits alwaysinline auto mul(const Pair& lhs, const Pair& rhs) -> Pair { static const Type Mask = (Type(0) - 1) >> HalfBits; Type a = lhs.hi >> HalfBits, b = lhs.hi & Mask, c = lhs.lo >> HalfBits, d = lhs.lo & Mask; Type e = rhs.hi >> HalfBits, f = rhs.hi & Mask, g = rhs.lo >> HalfBits, h = rhs.lo & Mask; Pair r0 = Pair(d * h); Pair r1 = Pair(c * h) + Pair(d * g) + Pair(r0 >> HalfBits); Pair r2 = Pair(b * h) + Pair(c * g) + Pair(d * f) + Pair(r1 >> HalfBits); Pair r3 = Pair(a * h) + Pair(b * g) + Pair(c * f) + Pair(d * e) + Pair(r2 >> HalfBits); return {(r3.lo & Mask) << HalfBits | (r2.lo & Mask), (r1.lo & Mask) << HalfBits | (r0.lo & Mask)}; } //Bits * Bits => 2 * Bits alwaysinline auto mul(const Pair& lhs, const Pair& rhs, Pair& hi, Pair& lo) -> void { static const Type Mask = (Type(0) - 1) >> HalfBits; Type a = lhs.hi >> HalfBits, b = lhs.hi & Mask, c = lhs.lo >> HalfBits, d = lhs.lo & Mask; Type e = rhs.hi >> HalfBits, f = rhs.hi & Mask, g = rhs.lo >> HalfBits, h = rhs.lo & Mask; Pair r0 = Pair(d * h); Pair r1 = Pair(c * h) + Pair(d * g) + Pair(r0 >> HalfBits); Pair r2 = Pair(b * h) + Pair(c * g) + Pair(d * f) + Pair(r1 >> HalfBits); Pair r3 = Pair(a * h) + Pair(b * g) + Pair(c * f) + Pair(d * e) + Pair(r2 >> HalfBits); Pair r4 = Pair(a * g) + Pair(b * f) + Pair(c * e) + Pair(r3 >> HalfBits); Pair r5 = Pair(a * f) + Pair(b * e) + Pair(r4 >> HalfBits); Pair r6 = Pair(a * e) + Pair(r5 >> HalfBits); Pair r7 = Pair(r6 >> HalfBits); hi = {(r7.lo & Mask) << HalfBits | (r6.lo & Mask), (r5.lo & Mask) << HalfBits | (r4.lo & Mask)}; lo = {(r3.lo & Mask) << HalfBits | (r2.lo & Mask), (r1.lo & Mask) << HalfBits | (r0.lo & Mask)}; } alwaysinline auto div(const Pair& lhs, const Pair& rhs, Pair& quotient, Pair& remainder) -> void { if(!rhs) throw std::runtime_error("division by zero"); quotient = 0, remainder = lhs; if(!lhs || lhs < rhs) return; auto count = bits(lhs) - bits(rhs); Pair x = rhs << count; Pair y = Pair(1) << count; if(x > remainder) x >>= 1, y >>= 1; while(remainder >= rhs) { if(remainder >= x) remainder -= x, quotient |= y; x >>= 1, y >>= 1; } } template alwaysinline auto shl(const Pair& lhs, const T& rhs) -> Pair { if(!rhs) return lhs; auto shift = (u32)rhs; if(shift < TypeBits) { return {lhs.hi << shift | lhs.lo >> (TypeBits - shift), lhs.lo << shift}; } else { return {lhs.lo << (shift - TypeBits), 0}; } } template alwaysinline auto shr(const Pair& lhs, const T& rhs) -> Pair { if(!rhs) return lhs; auto shift = (u32)rhs; if(shift < TypeBits) { return {lhs.hi >> shift, lhs.hi << (TypeBits - shift) | lhs.lo >> shift}; } else { return {0, lhs.hi >> (shift - TypeBits)}; } } template alwaysinline auto rol(const Pair& lhs, const T& rhs) -> Pair { return lhs << rhs | lhs >> (PairBits - rhs); } template alwaysinline auto ror(const Pair& lhs, const T& rhs) -> Pair { return lhs >> rhs | lhs << (PairBits - rhs); } #define EI enable_if_t::value> template auto& operator*= (T& lhs, const Pair& rhs) { return lhs = lhs * T(rhs); } template auto& operator/= (T& lhs, const Pair& rhs) { return lhs = lhs / T(rhs); } template auto& operator%= (T& lhs, const Pair& rhs) { return lhs = lhs % T(rhs); } template auto& operator+= (T& lhs, const Pair& rhs) { return lhs = lhs + T(rhs); } template auto& operator-= (T& lhs, const Pair& rhs) { return lhs = lhs - T(rhs); } template auto& operator<<=(T& lhs, const Pair& rhs) { return lhs = lhs << T(rhs); } template auto& operator>>=(T& lhs, const Pair& rhs) { return lhs = lhs >> T(rhs); } template auto& operator&= (T& lhs, const Pair& rhs) { return lhs = lhs & T(rhs); } template auto& operator|= (T& lhs, const Pair& rhs) { return lhs = lhs | T(rhs); } template auto& operator^= (T& lhs, const Pair& rhs) { return lhs = lhs ^ T(rhs); } template auto operator* (const T& lhs, const Pair& rhs) { return Cast(lhs) * Cast(rhs); } template auto operator/ (const T& lhs, const Pair& rhs) { return Cast(lhs) / Cast(rhs); } template auto operator% (const T& lhs, const Pair& rhs) { return Cast(lhs) % Cast(rhs); } template auto operator+ (const T& lhs, const Pair& rhs) { return Cast(lhs) + Cast(rhs); } template auto operator- (const T& lhs, const Pair& rhs) { return Cast(lhs) - Cast(rhs); } template auto operator<<(const T& lhs, const Pair& rhs) { return Cast(lhs) << Cast(rhs); } template auto operator>>(const T& lhs, const Pair& rhs) { return Cast(lhs) >> Cast(rhs); } template auto operator& (const T& lhs, const Pair& rhs) { return Cast(lhs) & Cast(rhs); } template auto operator| (const T& lhs, const Pair& rhs) { return Cast(lhs) | Cast(rhs); } template auto operator^ (const T& lhs, const Pair& rhs) { return Cast(lhs) ^ Cast(rhs); } template auto operator==(const T& lhs, const Pair& rhs) { return Cast(lhs) == Cast(rhs); } template auto operator!=(const T& lhs, const Pair& rhs) { return Cast(lhs) != Cast(rhs); } template auto operator>=(const T& lhs, const Pair& rhs) { return Cast(lhs) >= Cast(rhs); } template auto operator<=(const T& lhs, const Pair& rhs) { return Cast(lhs) <= Cast(rhs); } template auto operator> (const T& lhs, const Pair& rhs) { return Cast(lhs) > Cast(rhs); } template auto operator< (const T& lhs, const Pair& rhs) { return Cast(lhs) < Cast(rhs); } #undef EI template<> struct stringify { stringify(Pair source) { char _output[1 + sizeof(Pair) * 3]; auto p = (char*)&_output; do { Pair quotient, remainder; div(source, 10, quotient, remainder); *p++ = remainder + '0'; source = quotient; } while(source); _size = p - _output; *p = 0; for(s32 x = _size - 1, y = 0; x >= 0 && y < _size; x--, y++) _data[x] = _output[y]; } auto data() const -> const char* { return _data; } auto size() const -> u32 { return _size; } char _data[1 + sizeof(Pair) * 3]; u32 _size; }; } #undef ConcatenateType #undef DeclareType #undef Pair #undef Type #undef Half #undef Cast ares-126/nall/arithmetic/unsigned.hpp000066400000000000000000000030571415063341600177320ustar00rootroot00000000000000#pragma once namespace nall { template::value>> inline auto upper(T value) -> T { return value >> sizeof(T) * 4; } template::value>> inline auto lower(T value) -> T { static const T Mask = ~T(0) >> sizeof(T) * 4; return value & Mask; } template::value>, enable_if_t::value>> inline auto mul(T lhs, U rhs) -> uintmax { return lhs * rhs; } template::value>> inline auto square(T value) -> uintmax { return value * value; } template inline auto rol(T lhs, U rhs, enable_if_t::value>* = 0) -> T { return lhs << rhs | lhs >> sizeof(T) * 8 - rhs; } template inline auto ror(T lhs, U rhs, enable_if_t::value>* = 0) -> T { return lhs >> rhs | lhs << sizeof(T) * 8 - rhs; } #if defined(__SIZEOF_INT128__) inline auto operator"" _u128(const char* s) -> u128 { u128 p = 0; if(s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) { s += 2; while(*s) { auto c = *s++; if(c == '\''); else if(c >= '0' && c <= '9') p = (p << 4) + (c - '0'); else if(c >= 'a' && c <= 'f') p = (p << 4) + (c - 'a' + 10); else if(c >= 'A' && c <= 'F') p = (p << 4) + (c - 'A' + 10); else break; } } else { while(*s) { auto c = *s++; if(c == '\''); else if(c >= '0' && c <= '9') p = (p << 3) + (p << 1) + (c - '0'); else break; } } return p; } #endif } ares-126/nall/array-span.hpp000066400000000000000000000061071415063341600160410ustar00rootroot00000000000000#pragma once #include namespace nall { template struct array_span : array_view { using type = array_span; using super = array_view; array_span() { super::_data = nullptr; super::_size = 0; } array_span(nullptr_t) { super::_data = nullptr; super::_size = 0; } array_span(void* data, u64 size) { super::_data = (T*)data; super::_size = (s32)size; } template array_span(T (&data)[size]) { super::_data = data; super::_size = size; } explicit operator bool() const { return super::_data && super::_size > 0; } explicit operator T*() { return (T*)super::_data; } T& operator*() const { return (T&)*super::_data; } auto operator++() -> type& { super::_data++; super::_size--; return *this; } auto operator--() -> type& { super::_data--; super::_size++; return *this; } auto operator++(s32) -> type { auto copy = *this; ++(*this); return copy; } auto operator--(s32) -> type { auto copy = *this; --(*this); return copy; } auto operator[](u32 index) -> T& { return (T&)super::operator[](index); } template auto data() -> U* { return (U*)super::_data; } template auto data() const -> const U* { return (const U*)super::_data; } auto begin() -> iterator { return {(T*)super::_data, (u32)0}; } auto end() -> iterator { return {(T*)super::_data, (u32)super::_size}; } auto rbegin() -> reverse_iterator { return {(T*)super::_data, (u32)super::_size - 1}; } auto rend() -> reverse_iterator { return {(T*)super::_data, (u32)-1}; } auto write(T value) -> void { operator[](0) = value; super::_data++; super::_size--; } auto span(u32 offset, u32 length) -> type { #ifdef DEBUG struct out_of_bounds {}; if(offset + length >= super::_size) throw out_of_bounds{}; #endif return {(T*)super::_data + offset, length}; } //array_span specializations template auto writel(U value, u32 size) -> void; template auto writem(U value, u32 size) -> void; template auto writevn(U value, u32 size) -> void; template auto writevi(U value, u32 size) -> void; }; //array_span template<> inline auto array_span::write(u8 value) -> void { operator[](0) = value; _data++; _size--; } template<> template inline auto array_span::writel(U value, u32 size) -> void { for(u32 byte : range(size)) write(value >> byte * 8); } template<> template inline auto array_span::writem(U value, u32 size) -> void { for(u32 byte : reverse(range(size))) write(value >> byte * 8); } template<> template inline auto array_span::writevn(U value, u32 size) -> void { while(true) { auto byte = value & 0x7f; value >>= 7; if(value == 0) return write(0x80 | byte); write(byte); value--; } } template<> template inline auto array_span::writevi(U value, u32 size) -> void { bool negate = value < 0; if(negate) value = ~value; value = value << 1 | negate; writevn(value); } } ares-126/nall/array-view.hpp000066400000000000000000000100511415063341600160430ustar00rootroot00000000000000#pragma once #include #include #include namespace nall { template struct array_view { using type = array_view; array_view() { _data = nullptr; _size = 0; } array_view(nullptr_t) { _data = nullptr; _size = 0; } array_view(const void* data, u64 size) { _data = (const T*)data; _size = (s32)size; } template array_view(const T (&data)[size]) { _data = data; _size = size; } explicit operator bool() const { return _data && _size > 0; } explicit operator const T*() const { return _data; } const T& operator*() const { return *_data; } auto operator++() -> type& { _data++; _size--; return *this; } auto operator--() -> type& { _data--; _size++; return *this; } auto operator++(s32) -> type { auto copy = *this; ++(*this); return copy; } auto operator--(s32) -> type { auto copy = *this; --(*this); return copy; } auto operator-=(s32 distance) -> type& { _data -= distance; _size += distance; return *this; } auto operator+=(s32 distance) -> type& { _data += distance; _size -= distance; return *this; } auto operator[](u32 index) const -> const T& { #ifdef DEBUG struct out_of_bounds {}; if(index >= _size) throw out_of_bounds{}; #endif return _data[index]; } auto operator()(u32 index, const T& fallback = {}) const -> T { if(index >= _size) return fallback; return _data[index]; } template auto data() const -> const U* { return (const U*)_data; } template auto size() const -> u64 { return _size * sizeof(T) / sizeof(U); } auto begin() const -> iterator_const { return {_data, (u32)0}; } auto end() const -> iterator_const { return {_data, (u32)_size}; } auto rbegin() const -> reverse_iterator_const { return {_data, (u32)_size - 1}; } auto rend() const -> reverse_iterator_const { return {_data, (u32)-1}; } auto read() -> T { auto value = operator[](0); _data++; _size--; return value; } auto view(u32 offset, u32 length) const -> type { #ifdef DEBUG struct out_of_bounds {}; if(offset + length >= _size) throw out_of_bounds{}; #endif return {_data + offset, length}; } //array_view specializations template auto readl(U& value, u32 size) -> U; template auto readm(U& value, u32 size) -> U; template auto readvn(U& value, u32 size) -> U; template auto readvi(U& value, u32 size) -> U; template auto readl(U& value, u32 offset, u32 size) -> U { return view(offset, size).readl(value, size); } template auto readl(u32 size) -> U { U value; return readl(value, size); } template auto readm(u32 size) -> U { U value; return readm(value, size); } template auto readvn(u32 size) -> U { U value; return readvn(value, size); } template auto readvi(u32 size) -> U { U value; return readvi(value, size); } template auto readl(u32 offset, u32 size) -> U { U value; return readl(value, offset, size); } protected: const T* _data; s32 _size; }; //array_view template<> template inline auto array_view::readl(U& value, u32 size) -> U { value = 0; for(u32 byte : range(size)) value |= (U)read() << byte * 8; return value; } template<> template inline auto array_view::readm(U& value, u32 size) -> U { value = 0; for(u32 byte : reverse(range(size))) value |= (U)read() << byte * 8; return value; } template<> template inline auto array_view::readvn(U& value, u32 size) -> U { value = 0; u32 shift = 1; while(true) { auto byte = read(); value += (byte & 0x7f) * shift; if(byte & 0x80) break; shift <<= 7; value += shift; } return value; } template<> template inline auto array_view::readvi(U& value, u32 size) -> U { value = readvn(); bool negate = value & 1; value >>= 1; if(negate) value = ~value; return value; } } ares-126/nall/array.hpp000066400000000000000000000040571415063341600151040ustar00rootroot00000000000000#pragma once #include #include #include #include namespace nall { template struct array; //usage: s32 x[256] => array x template struct array { array() = default; array(const initializer_list& source) { u32 index = 0; for(auto& value : source) { operator[](index++) = value; } } operator array_span() { return {data(), size()}; } operator array_view() const { return {data(), size()}; } alwaysinline auto operator[](u32 index) -> T& { #ifdef DEBUG struct out_of_bounds {}; if(index >= Size) throw out_of_bounds{}; #endif return values[index]; } alwaysinline auto operator[](u32 index) const -> const T& { #ifdef DEBUG struct out_of_bounds {}; if(index >= Size) throw out_of_bounds{}; #endif return values[index]; } alwaysinline auto operator()(u32 index, const T& fallback = {}) const -> const T& { if(index >= Size) return fallback; return values[index]; } auto fill(const T& fill = {}) -> array& { for(auto& value : values) value = fill; return *this; } auto data() -> T* { return values; } auto data() const -> const T* { return values; } auto size() const -> u32 { return Size; } auto begin() -> T* { return &values[0]; } auto end() -> T* { return &values[Size]; } auto begin() const -> const T* { return &values[0]; } auto end() const -> const T* { return &values[Size]; } private: T values[Size]; }; template inline auto from_array(u32 index) -> T { static const array table{p...}; struct out_of_bounds {}; #if defined(DEBUG) if(index >= sizeof...(p)) throw out_of_bounds{}; #endif return table[index]; } template inline auto from_array(u32 index) -> s64 { static const array table{p...}; struct out_of_bounds {}; #if defined(DEBUG) if(index >= sizeof...(p)) throw out_of_bounds{}; #endif return table[index]; } } ares-126/nall/atoi.hpp000066400000000000000000000042051415063341600147150ustar00rootroot00000000000000#pragma once #include namespace nall { constexpr inline auto toBinary_(const char* s, u64 sum = 0) -> u64 { return ( *s == '0' || *s == '1' ? toBinary_(s + 1, (sum << 1) | *s - '0') : *s == '\'' ? toBinary_(s + 1, sum) : sum ); } constexpr inline auto toOctal_(const char* s, u64 sum = 0) -> u64 { return ( *s >= '0' && *s <= '7' ? toOctal_(s + 1, (sum << 3) | *s - '0') : *s == '\'' ? toOctal_(s + 1, sum) : sum ); } constexpr inline auto toDecimal_(const char* s, u64 sum = 0) -> u64 { return ( *s >= '0' && *s <= '9' ? toDecimal_(s + 1, (sum * 10) + *s - '0') : *s == '\'' ? toDecimal_(s + 1, sum) : sum ); } constexpr inline auto toHex_(const char* s, u64 sum = 0) -> u64 { return ( *s >= 'A' && *s <= 'F' ? toHex_(s + 1, (sum << 4) | *s - 'A' + 10) : *s >= 'a' && *s <= 'f' ? toHex_(s + 1, (sum << 4) | *s - 'a' + 10) : *s >= '0' && *s <= '9' ? toHex_(s + 1, (sum << 4) | *s - '0') : *s == '\'' ? toHex_(s + 1, sum) : sum ); } // constexpr inline auto toBinary(const char* s) -> u64 { return ( *s == '0' && (*(s + 1) == 'B' || *(s + 1) == 'b') ? toBinary_(s + 2) : *s == '%' ? toBinary_(s + 1) : toBinary_(s) ); } constexpr inline auto toOctal(const char* s) -> u64 { return ( *s == '0' && (*(s + 1) == 'O' || *(s + 1) == 'o') ? toOctal_(s + 2) : toOctal_(s) ); } constexpr inline auto toHex(const char* s) -> u64 { return ( *s == '0' && (*(s + 1) == 'X' || *(s + 1) == 'x') ? toHex_(s + 2) : *s == '$' ? toHex_(s + 1) : toHex_(s) ); } // constexpr inline auto toNatural(const char* s) -> u64 { return ( *s == '0' && (*(s + 1) == 'B' || *(s + 1) == 'b') ? toBinary_(s + 2) : *s == '0' && (*(s + 1) == 'O' || *(s + 1) == 'o') ? toOctal_(s + 2) : *s == '0' && (*(s + 1) == 'X' || *(s + 1) == 'x') ? toHex_(s + 2) : *s == '%' ? toBinary_(s + 1) : *s == '$' ? toHex_(s + 1) : toDecimal_(s) ); } constexpr inline auto toInteger(const char* s) -> s64 { return ( *s == '+' ? +toNatural(s + 1) : *s == '-' ? -toNatural(s + 1) : toNatural(s) ); } // inline auto toReal(const char* s) -> f64 { return atof(s); } } ares-126/nall/beat/000077500000000000000000000000001415063341600141625ustar00rootroot00000000000000ares-126/nall/beat/single/000077500000000000000000000000001415063341600154435ustar00rootroot00000000000000ares-126/nall/beat/single/apply.hpp000066400000000000000000000053121415063341600173020ustar00rootroot00000000000000#pragma once namespace nall::Beat::Single { inline auto apply(array_view source, array_view beat, maybe manifest = {}, maybe result = {}) -> maybe> { #define error(text) { if(result) *result = {"error: ", text}; return {}; } #define warning(text) { if(result) *result = {"warning: ", text}; return target; } #define success() { if(result) *result = ""; return target; } if(beat.size() < 19) error("beat size mismatch"); vector target; u32 beatOffset = 0; auto read = [&]() -> u8 { return beat[beatOffset++]; }; auto decode = [&]() -> u64 { u64 data = 0, shift = 1; while(true) { u8 x = read(); data += (x & 0x7f) * shift; if(x & 0x80) break; shift <<= 7; data += shift; } return data; }; auto write = [&](u8 data) { target.append(data); }; if(read() != 'B') error("beat header invalid"); if(read() != 'P') error("beat header invalid"); if(read() != 'S') error("beat header invalid"); if(read() != '1') error("beat version mismatch"); if(decode() != source.size()) error("source size mismatch"); u32 targetSize = decode(); target.reserve(targetSize); u32 metadataSize = decode(); for(u32 n : range(metadataSize)) { auto data = read(); if(manifest) manifest->append((char)data); } enum : u32 { SourceRead, TargetRead, SourceCopy, TargetCopy }; u32 sourceRelativeOffset = 0, targetRelativeOffset = 0; while(beatOffset < beat.size() - 12) { u32 length = decode(); u32 mode = length & 3; length = (length >> 2) + 1; if(mode == SourceRead) { while(length--) write(source[target.size()]); } else if(mode == TargetRead) { while(length--) write(read()); } else { s32 offset = decode(); offset = offset & 1 ? -(offset >> 1) : (offset >> 1); if(mode == SourceCopy) { sourceRelativeOffset += offset; while(length--) write(source[sourceRelativeOffset++]); } else { targetRelativeOffset += offset; while(length--) write(target[targetRelativeOffset++]); } } } u32 sourceHash = 0, targetHash = 0, beatHash = 0; for(u32 shift : range(0, 32, 8)) sourceHash |= read() << shift; for(u32 shift : range(0, 32, 8)) targetHash |= read() << shift; for(u32 shift : range(0, 32, 8)) beatHash |= read() << shift; if(target.size() != targetSize) warning("target size mismatch"); if(sourceHash != Hash::CRC32(source).value()) warning("source hash mismatch"); if(targetHash != Hash::CRC32(target).value()) warning("target hash mismatch"); if(beatHash != Hash::CRC32({beat.data(), beat.size() - 4}).value()) warning("beat hash mismatch"); success(); #undef error #undef warning #undef success } } ares-126/nall/beat/single/create.hpp000066400000000000000000000062461415063341600174270ustar00rootroot00000000000000#pragma once #include namespace nall::Beat::Single { inline auto create(array_view source, array_view target, string_view manifest = {}) -> vector { vector beat; auto write = [&](u8 data) { beat.append(data); }; auto encode = [&](u64 data) { while(true) { u64 x = data & 0x7f; data >>= 7; if(data == 0) { write(0x80 | x); break; } write(x); data--; } }; write('B'), write('P'), write('S'), write('1'); encode(source.size()), encode(target.size()), encode(manifest.size()); for(auto& byte : manifest) write(byte); //generating lrcp() arrays for source requires O(4n) computations, and O(16m) memory, //but it reduces find() complexity from O(n log m) to O(n + log m). and yet in practice, //no matter how large n scales to, the O(n + log m) find() is paradoxically slower. auto sourceArray = SuffixArray(source); auto targetArray = SuffixArray(target).lpf(); enum : u32 { SourceRead, TargetRead, SourceCopy, TargetCopy }; u32 outputOffset = 0, sourceRelativeOffset = 0, targetRelativeOffset = 0; u32 targetReadLength = 0; auto flush = [&] { if(!targetReadLength) return; encode(TargetRead | ((targetReadLength - 1) << 2)); u32 offset = outputOffset - targetReadLength; while(targetReadLength) write(target[offset++]), targetReadLength--; }; u32 overlap = min(source.size(), target.size()); while(outputOffset < target.size()) { u32 mode = TargetRead, longestLength = 3, longestOffset = 0; s32 length = 0, offset = outputOffset; while(offset < overlap) { if(source[offset] != target[offset]) break; length++, offset++; } if(length > longestLength) { mode = SourceRead, longestLength = length; } sourceArray.find(length, offset, {target.data() + outputOffset, target.size() - outputOffset}); if(length > longestLength) { mode = SourceCopy, longestLength = length, longestOffset = offset; } targetArray.previous(length, offset, outputOffset); if(length > longestLength) { mode = TargetCopy, longestLength = length, longestOffset = offset; } if(mode == TargetRead) { targetReadLength++; //queue writes to group sequential commands outputOffset++; } else { flush(); encode(mode | ((longestLength - 1) << 2)); if(mode == SourceCopy) { s32 relativeOffset = longestOffset - sourceRelativeOffset; sourceRelativeOffset = longestOffset + longestLength; encode(relativeOffset < 0 | abs(relativeOffset) << 1); } if(mode == TargetCopy) { s32 relativeOffset = longestOffset - targetRelativeOffset; targetRelativeOffset = longestOffset + longestLength; encode(relativeOffset < 0 | abs(relativeOffset) << 1); } outputOffset += longestLength; } } flush(); auto sourceHash = Hash::CRC32(source); for(u32 shift : range(0, 32, 8)) write(sourceHash.value() >> shift); auto targetHash = Hash::CRC32(target); for(u32 shift : range(0, 32, 8)) write(targetHash.value() >> shift); auto beatHash = Hash::CRC32(beat); for(u32 shift : range(0, 32, 8)) write(beatHash.value() >> shift); return beat; } } ares-126/nall/bit.hpp000066400000000000000000000102341415063341600145360ustar00rootroot00000000000000#pragma once #include namespace nall { template inline auto uclamp(T x) -> u64 { enum : u64 { b = 1ull << (bits - 1), y = b * 2 - 1 }; if constexpr(is_unsigned_v) { return y + ((x - y) & -(x < y)); //min(x, y); } if constexpr(is_signed_v) { return x < 0 ? 0 : x > y ? y : x; } } template inline auto uclip(u64 x) -> u64 { enum : u64 { b = 1ull << (bits - 1), m = b * 2 - 1 }; return (x & m); } template inline auto sclamp(s64 x) -> s64 { enum : s64 { b = 1ull << (bits - 1), m = b - 1 }; return (x > m) ? m : (x < -b) ? -b : x; } template inline auto sclip(s64 x) -> s64 { enum : u64 { b = 1ull << (bits - 1), m = b * 2 - 1 }; return ((x & m) ^ b) - b; } namespace bit { constexpr inline auto mask(const char* s, u64 sum = 0) -> u64 { return ( *s == '0' || *s == '1' ? mask(s + 1, (sum << 1) | 1) : *s == ' ' || *s == '_' ? mask(s + 1, sum) : *s ? mask(s + 1, sum << 1) : sum ); } constexpr inline auto test(const char* s, u64 sum = 0) -> u64 { return ( *s == '0' || *s == '1' ? test(s + 1, (sum << 1) | (*s - '0')) : *s == ' ' || *s == '_' ? test(s + 1, sum) : *s ? test(s + 1, sum << 1) : sum ); } //lowest(0b1110) == 0b0010 constexpr inline auto lowest(const u64 x) -> u64 { return x & -x; } //clear_lowest(0b1110) == 0b1100 constexpr inline auto clearLowest(const u64 x) -> u64 { return x & (x - 1); } //set_lowest(0b0101) == 0b0111 constexpr inline auto setLowest(const u64 x) -> u64 { return x | (x + 1); } //count number of bits set in a byte constexpr inline auto count(u64 x) -> u32 { u32 count = 0; while(x) x &= x - 1, count++; //clear the least significant bit return count; } //return index of the first bit set (or zero of no bits are set) //first(0b1000) == 3 constexpr inline auto first(u64 x) -> u32 { u32 first = 0; while(x) { if(x & 1) break; x >>= 1; first++; } return first; } //round up to next highest single bit: //round(15) == 16, round(16) == 16, round(17) == 32 constexpr inline auto round(u64 x) -> u64 { if((x & (x - 1)) == 0) return x; while(x & (x - 1)) x &= x - 1; return x << 1; } template constexpr inline auto reverse(T x) -> T { static_assert(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8); if constexpr(sizeof(T) == 1) { #if __has_builtin(__builtin_bitreverse8) return __builtin_bitreverse8(x); #else x = (x & 0xaa) >> 1 | (x & 0x55) << 1; x = (x & 0xcc) >> 2 | (x & 0x33) << 2; x = (x & 0xf0) >> 4 | (x & 0x0f) << 4; return x; #endif } if constexpr(sizeof(T) == 2) { #if __has_builtin(__builtin_bitreverse16) return __builtin_bitreverse16(x); #else x = (x & 0xaaaa) >> 1 | (x & 0x5555) << 1; x = (x & 0xcccc) >> 2 | (x & 0x3333) << 2; x = (x & 0xf0f0) >> 4 | (x & 0x0f0f) << 4; x = (x & 0xff00) >> 8 | (x & 0x00ff) << 8; return x; #endif } if constexpr(sizeof(T) == 4) { #if __has_builtin(__builtin_bitreverse32) return __builtin_bitreverse32(x); #else x = (x & 0xaaaaaaaa) >> 1 | (x & 0x55555555) << 1; x = (x & 0xcccccccc) >> 2 | (x & 0x33333333) << 2; x = (x & 0xf0f0f0f0) >> 4 | (x & 0x0f0f0f0f) << 4; x = (x & 0xff00ff00) >> 8 | (x & 0x00ff00ff) << 8; x = (x & 0xffff0000) >> 16 | (x & 0x0000ffff) << 16; return x; #endif } if constexpr(sizeof(T) == 8) { #if __has_builtin(__builtin_bitreverse64) return __builtin_bitreverse64(x); #else x = (x & 0xaaaaaaaaaaaaaaaaULL) >> 1 | (x & 0x5555555555555555ULL) << 1; x = (x & 0xccccccccccccccccULL) >> 2 | (x & 0x3333333333333333ULL) << 2; x = (x & 0xf0f0f0f0f0f0f0f0ULL) >> 4 | (x & 0x0f0f0f0f0f0f0f0fULL) << 4; x = (x & 0xff00ff00ff00ff00ULL) >> 8 | (x & 0x00ff00ff00ff00ffULL) << 8; x = (x & 0xffff0000ffff0000ULL) >> 16 | (x & 0x0000ffff0000ffffULL) << 16; x = (x & 0xffffffff00000000ULL) >> 32 | (x & 0x00000000ffffffffULL) << 32; return x; #endif } } } } ares-126/nall/bump-allocator.hpp000066400000000000000000000046151415063341600167070ustar00rootroot00000000000000#pragma once #include namespace nall { struct bump_allocator { static constexpr u32 executable = 1 << 0; static constexpr u32 zero_fill = 1 << 1; ~bump_allocator() { reset(); } explicit operator bool() const { return _memory; } auto reset() -> void { if(_owner) memory::free(_memory); _memory = nullptr; } auto resize(u32 capacity, u32 flags = 0, u8* buffer = nullptr) -> bool { reset(); _offset = 0; if(buffer) { _owner = false; _capacity = capacity; _memory = buffer; } else { _owner = true; _capacity = capacity + 4095 & ~4095; //capacity alignment _memory = memory::allocate(_capacity); //_SC_PAGESIZE alignment if(!_memory) return false; } if(flags & executable) { #if defined(PLATFORM_WINDOWS) DWORD privileges; VirtualProtect((void*)_memory, _capacity, PAGE_EXECUTE_READWRITE, &privileges); #else int ret = mprotect(_memory, _capacity, PROT_READ | PROT_WRITE | PROT_EXEC); assert(ret == 0); #endif } if(flags & zero_fill) { memset(_memory, 0x00, _capacity); } return true; } //release all acquired memory auto release(u32 flags = 0) -> void { _offset = 0; if(flags & zero_fill) memset(_memory, 0x00, _capacity); } auto capacity() const -> u32 { return _capacity; } auto available() const -> u32 { return _capacity - _offset; } //for allocating blocks of known size auto acquire(u32 size) -> u8* { #ifdef DEBUG struct out_of_memory {}; if((_offset + size + 15 & ~15) > _capacity) throw out_of_memory{}; #endif auto memory = _memory + _offset; _offset = _offset + size + 15 & ~15; //alignment return memory; } //for allocating blocks of unknown size (eg for a dynamic recompiler code block) auto acquire() -> u8* { #ifdef DEBUG struct out_of_memory {}; if(_offset > _capacity) throw out_of_memory{}; #endif return _memory + _offset; } //size can be reserved once the block size is known auto reserve(u32 size) -> void { #ifdef DEBUG struct out_of_memory {}; if((_offset + size + 15 & ~15) > _capacity) throw out_of_memory{}; #endif _offset = _offset + size + 15 & ~15; //alignment } private: u8* _memory = nullptr; u32 _capacity = 0; u32 _offset = 0; bool _owner = false; }; } ares-126/nall/cd.hpp000066400000000000000000000016501415063341600143500ustar00rootroot00000000000000#pragma once /* CD-ROM sector functions. * * Implemented: * eight-to-fourteen modulation (encoding and decoding) * sync header creation and verification * error detection code creation and verification * reed-solomon product-code creation and verification * sector scrambling and descrambling (currently unverified) * * Unimplemented: * reed-solomon product-code correction * cross-interleave reed-solomon creation, verification, and correction * CD-ROM XA mode 2 forms 1 & 2 support * subcode insertion and removal * subcode decoding from CUE files * channel frame expansion and reduction */ #include #include #include #include #include #include #include #include #include #include ares-126/nall/cd/000077500000000000000000000000001415063341600136355ustar00rootroot00000000000000ares-126/nall/cd/crc16.hpp000066400000000000000000000004151415063341600152640ustar00rootroot00000000000000#pragma once //CRC-16/KERMIT namespace nall::CD { inline auto CRC16(array_view data) -> u16 { u16 crc = 0; while(data) { crc ^= *data++ << 8; for(u32 bit : range(8)) { crc = crc << 1 ^ (crc & 0x8000 ? 0x1021 : 0); } } return ~crc; } } ares-126/nall/cd/edc.hpp000066400000000000000000000031401415063341600150770ustar00rootroot00000000000000#pragma once //error detection code namespace nall::CD::EDC { //polynomial(x) = (x^16 + x^15 + x^2 + 1) * (x^16 + x^2 + x + 1) inline auto polynomial(u8 x) -> u32 { static u32 lookup[256]{}; static bool once = false; if(!once) { once = true; for(u32 n : range(256)) { u32 edc = n; for(u32 b : range(8)) edc = edc >> 1 ^ (edc & 1 ? 0xd8018001 : 0); lookup[n] = edc; } } return lookup[x]; } // inline auto create(array_view input) -> u32 { u32 sum = 0; for(auto& byte : input) sum = sum >> 8 ^ polynomial(sum ^ byte); return sum; } inline auto create(array_view input, array_span output) -> bool { if(output.size() != 4) return false; auto sum = create(input); output[0] = sum >> 0; output[1] = sum >> 8; output[2] = sum >> 16; output[3] = sum >> 24; return true; } inline auto createMode1(array_span sector) -> bool { if(sector.size() != 2352) return false; return create({sector.data(), 2064}, {sector.data() + 2064, 4}); } // inline auto verify(array_view input, u32 edc) -> bool { return edc == create(input); } inline auto verify(array_view input, array_view compare) -> bool { if(compare.size() != 4) return false; auto sum = create(input); if(compare[0] != u8(sum >> 0)) return false; if(compare[1] != u8(sum >> 8)) return false; if(compare[2] != u8(sum >> 16)) return false; if(compare[3] != u8(sum >> 24)) return false; return true; } inline auto verifyMode1(array_view sector) -> bool { if(sector.size() != 2352) return false; return verify({sector.data(), 2064}, {sector.data() + 2064, 4}); } } ares-126/nall/cd/efm.hpp000066400000000000000000000055021415063341600151170ustar00rootroot00000000000000#pragma once //eight-to-fourteen modulation: //separates each 1-bit by at least two 0-bits and at most ten 0-bits namespace nall::CD::EFM { //the algorithm to generate this table is unknown inline auto lookup(u8 index) -> u16 { static const u16 lookup[256] = { 0x1220, 0x2100, 0x2420, 0x2220, 0x1100, 0x0110, 0x0420, 0x0900, 0x1240, 0x2040, 0x2440, 0x2240, 0x1040, 0x0040, 0x0440, 0x0840, 0x2020, 0x2080, 0x2480, 0x0820, 0x1080, 0x0080, 0x0480, 0x0880, 0x1210, 0x2010, 0x2410, 0x2210, 0x1010, 0x0210, 0x0410, 0x0810, 0x0020, 0x2108, 0x0220, 0x0920, 0x1108, 0x0108, 0x1020, 0x0908, 0x1248, 0x2048, 0x2448, 0x2248, 0x1048, 0x0048, 0x0448, 0x0848, 0x0100, 0x2088, 0x2488, 0x2110, 0x1088, 0x0088, 0x0488, 0x0888, 0x1208, 0x2008, 0x2408, 0x2208, 0x1008, 0x0208, 0x0408, 0x0808, 0x1224, 0x2124, 0x2424, 0x2224, 0x1124, 0x0024, 0x0424, 0x0924, 0x1244, 0x2044, 0x2444, 0x2244, 0x1044, 0x0044, 0x0444, 0x0844, 0x2024, 0x2084, 0x2484, 0x0824, 0x1084, 0x0084, 0x0484, 0x0884, 0x1204, 0x2004, 0x2404, 0x2204, 0x1004, 0x0204, 0x0404, 0x0804, 0x1222, 0x2122, 0x2422, 0x2222, 0x1122, 0x0022, 0x1024, 0x0922, 0x1242, 0x2042, 0x2442, 0x2242, 0x1042, 0x0042, 0x0442, 0x0842, 0x2022, 0x2082, 0x2482, 0x0822, 0x1082, 0x0082, 0x0482, 0x0882, 0x1202, 0x0248, 0x2402, 0x2202, 0x1002, 0x0202, 0x0402, 0x0802, 0x1221, 0x2121, 0x2421, 0x2221, 0x1121, 0x0021, 0x0421, 0x0921, 0x1241, 0x2041, 0x2441, 0x2241, 0x1041, 0x0041, 0x0441, 0x0841, 0x2021, 0x2081, 0x2481, 0x0821, 0x1081, 0x0081, 0x0481, 0x0881, 0x1201, 0x2090, 0x2401, 0x2201, 0x1090, 0x0201, 0x0401, 0x0890, 0x0221, 0x2109, 0x1110, 0x0121, 0x1109, 0x0109, 0x1021, 0x0909, 0x1249, 0x2049, 0x2449, 0x2249, 0x1049, 0x0049, 0x0449, 0x0849, 0x0120, 0x2089, 0x2489, 0x0910, 0x1089, 0x0089, 0x0489, 0x0889, 0x1209, 0x2009, 0x2409, 0x2209, 0x1009, 0x0209, 0x0409, 0x0809, 0x1120, 0x2111, 0x2490, 0x0224, 0x1111, 0x0111, 0x0490, 0x0911, 0x0241, 0x2101, 0x0244, 0x0240, 0x1101, 0x0101, 0x0090, 0x0901, 0x0124, 0x2091, 0x2491, 0x2120, 0x1091, 0x0091, 0x0491, 0x0891, 0x1211, 0x2011, 0x2411, 0x2211, 0x1011, 0x0211, 0x0411, 0x0811, 0x1102, 0x0102, 0x2112, 0x0902, 0x1112, 0x0112, 0x1022, 0x0912, 0x2102, 0x2104, 0x0249, 0x0242, 0x1104, 0x0104, 0x0422, 0x0904, 0x0122, 0x2092, 0x2492, 0x0222, 0x1092, 0x0092, 0x0492, 0x0892, 0x1212, 0x2012, 0x2412, 0x2212, 0x1012, 0x0212, 0x0412, 0x0812, }; return lookup[index]; } // inline auto encode(u8 data) -> u16 { return lookup(data); } // inline auto decode(u16 data) -> maybe { static u16 table[1 << 14]; static bool once = true; if(once) { once = false; for(u32 n : range(1 << 14)) table[n] = 0xffff; for(u32 n : range(1 << 8)) table[lookup(n)] = n; } u16 result = table[data & 0x3fff]; if(result == 0xffff) return {}; return (u8)result; } } ares-126/nall/cd/rspc.hpp000066400000000000000000000071321415063341600153200ustar00rootroot00000000000000#pragma once //reed-solomon product code namespace nall::CD::RSPC { inline auto encodeP(array_view input, array_span parity) -> bool { ReedSolomon<26,24> s; u32 lo = 0, hi = 43 * 2; for(u32 x : range(43)) { for(u32 w : range(2)) { //16-bit words u32 z = 0; for(u32 y : range(24)) { s[z++] = input[(y * 43 + x) * 2 + w]; } s.generateParity(); parity[lo++] = s[z++]; parity[hi++] = s[z++]; } } return true; } inline auto encodeQ(array_view input, array_span parity) -> bool { ReedSolomon<45,43> s; u32 lo = 0, hi = 26 * 2; for(u32 y : range(26)) { for(u32 w : range(2)) { u32 z = 0; for(u32 x : range(43)) { s[z++] = input[((x * 44 + y * 43) * 2 + w) % (26 * 43 * 2)]; } s.generateParity(); parity[lo++] = s[z++]; parity[hi++] = s[z++]; } } return true; } inline auto encodeMode1(array_span sector) -> bool { if(sector.size() != 2352) return false; if(!encodeP({sector.data() + 12, 2064}, {sector.data() + 2076, 172})) return false; if(!encodeQ({sector.data() + 12, 2236}, {sector.data() + 2248, 104})) return false; return true; } // inline auto decodeP(array_span input, array_span parity) -> s32 { bool success = false; bool failure = false; ReedSolomon<26,24> s; u32 lo = 0, hi = 43 * 2; for(u32 x : range(43)) { for(u32 w : range(2)) { u32 z = 0; for(u32 y : range(24)) { s[z++] = input[(y * 43 + x) * 2 + w]; } s[z++] = parity[lo++]; s[z++] = parity[hi++]; auto count = s.correctErrors(); if(count < 0) { failure = true; } if(count > 0) { success = true; z = 0; for(u32 y : range(24)) { input[(y * 43 + x) * 2 + w] = s[z++]; } parity[lo - 1] = s[z++]; parity[hi - 1] = s[z++]; } } } if(!success && !failure) return 0; //no errors remaining return success ? 1 : -1; //return success even if there are some failures } inline auto decodeQ(array_span input, array_span parity) -> s32 { bool success = false; bool failure = false; ReedSolomon<45,43> s; u32 lo = 0, hi = 26 * 2; for(u32 y : range(26)) { for(u32 w : range(2)) { u32 z = 0; for(u32 x : range(43)) { s[z++] = input[((x * 44 + y * 43) * 2 + w) % (26 * 43 * 2)]; } s[z++] = parity[lo++]; s[z++] = parity[hi++]; auto count = s.correctErrors(); if(count < 0) { failure = true; } if(count > 0) { success = true; z = 0; for(u32 x : range(43)) { input[((x * 44 + y * 43) * 2 + w) % (26 * 43 * 2)] = s[z++]; } parity[lo - 1] = s[z++]; parity[hi - 1] = s[z++]; } } } if(!success && !failure) return 0; return success ? 1 : -1; } inline auto decodeMode1(array_span sector) -> bool { if(sector.size() != 2352) return false; //P corrections can allow Q corrections that previously failed to succeed, and vice versa. //the more iterations, the more chances to correct errors, but the more computationally expensive it is. //there must be a limit on the amount of retries, or this function may get stuck in an infinite loop. for(u32 attempt : range(4)) { auto p = decodeP({sector.data() + 12, 2064}, {sector.data() + 2076, 172}); auto q = decodeQ({sector.data() + 12, 2236}, {sector.data() + 2248, 104}); if(p == 0 && q == 0) return true; //no errors remaining if(p < 0 && q < 0) return false; //no more errors correctable } return false; //exhausted all retries with errors remaining } } ares-126/nall/cd/scrambler.hpp000066400000000000000000000013321415063341600163170ustar00rootroot00000000000000#pragma once namespace nall::CD::Scrambler { //polynomial(x) = x^15 + x + 1 inline auto polynomial(u32 x) -> u8 { static u8 lookup[2340]{}; static bool once = false; if(!once) { once = true; u16 shift = 0x0001; for(u32 n : range(2340)) { lookup[n] = shift; for(u32 b : range(8)) { bool carry = shift & 1 ^ shift >> 1 & 1; shift = (carry << 15 | shift) >> 1; } } } return lookup[x]; } // inline auto transform(array_span sector) -> bool { if(sector.size() == 2352) sector += 12; //header is not scrambled if(sector.size() != 2340) return false; //F1 frames only for(u32 index : range(2340)) { sector[index] ^= polynomial(index); } return true; } } ares-126/nall/cd/session.hpp000066400000000000000000000334631415063341600160420ustar00rootroot00000000000000#pragma once //subchannel processor //note: this code is not tolerant to subchannel data that violates the Redbook standard namespace nall::CD { enum : s32 { InvalidLBA = 100 * 60 * 75 }; struct BCD { static auto encode(u8 value) -> u8 { return value / 10 << 4 | value % 10; } static auto decode(u8 value) -> u8 { return (value >> 4) * 10 + (value & 15); } }; struct MSF { u8 minute; //00-99 u8 second; //00-59 u8 frame = 0xff; //00-74 MSF() = default; MSF(u8 m, u8 s, u8 f) : minute(m), second(s), frame(f) {} MSF(s32 lba) { *this = fromLBA(lba); } explicit operator bool() const { return minute <= 99 && second <= 59 && frame <= 74; } static auto fromBCD(u8 minute, u8 second, u8 frame) -> MSF { return {BCD::decode(minute), BCD::decode(second), BCD::decode(frame)}; } static auto fromLBA(s32 lba) -> MSF { if(lba < 0) lba = 100 * 60 * 75 + lba; if(lba >= 100 * 60 * 75) return {}; u8 minute = lba / 75 / 60 % 100; u8 second = lba / 75 % 60; u8 frame = lba % 75; return {minute, second, frame}; } auto toLBA() const -> s32 { s32 lba = minute * 60 * 75 + second * 75 + frame; if(minute < 90) return lba; return -(100 * 60 * 75 - lba); } //for debugging purposes auto toString() const -> string { if(!operator bool()) return "??:??:??"; return {pad(minute, 2, '0'), ":", pad(second, 2, '0'), ":", pad(frame, 2, '0')}; } }; struct Index { s32 lba = InvalidLBA; s32 end = InvalidLBA; //inclusive range explicit operator bool() const { return lba != InvalidLBA; } auto inRange(s32 sector) const -> bool { if(lba == InvalidLBA || end == InvalidLBA) return false; return sector >= lba && sector <= end; } }; struct Track { u8 control = 0b1111; //4-bit Index indices[100]; u8 firstIndex = 0xff; u8 lastIndex = 0xff; explicit operator bool() const { return (bool)indices[1]; } auto emphasis() const -> bool { return control & 1; } auto copyable() const -> bool { return control & 2; } auto channels() const -> u32 { if((control & 0b1100) == 0b0000) return 2; if((control & 0b1100) == 0b1000) return 4; return 0; //data track or reserved } auto pregap() const -> s32 { if(!indices[0] || !indices[1]) return InvalidLBA; return indices[1].lba - indices[0].lba; } auto isAudio() const -> bool { return channels() != 0; } auto isData() const -> bool { return (control & 0b1100) == 0b0100; } auto inIndex(s32 lba) const -> maybe { for(u8 index : range(100)) { if(indices[index].inRange(lba)) return index; } return {}; } auto inRange(s32 lba) const -> bool { if(firstIndex > 99 || lastIndex > 99) return false; return lba >= indices[firstIndex].lba && lba <= indices[lastIndex].end; } auto index(u8 indexID) -> maybe { if(indexID < 100 && indices[indexID]) return indices[indexID]; return {}; } }; struct Session { Index leadIn; //00 Track tracks[100]; //01-99 Index leadOut; //aa u8 firstTrack = 0xff; u8 lastTrack = 0xff; auto inLeadIn(s32 lba) const -> bool { return leadIn && lba <= leadIn.end; } auto inTrack(s32 lba) const -> maybe { for(u8 trackID : range(99)) { auto& track = tracks[trackID+1]; if(track && track.inRange(lba)) return trackID+1; } return {}; } auto inLeadOut(s32 lba) const -> bool { return leadOut && lba >= leadOut.lba; } auto track(u8 trackID) -> maybe { if(trackID >= 1 && trackID < 100 && tracks[trackID]) return tracks[trackID]; return {}; } auto encode(u32 sectors) const -> vector { if(sectors < abs(leadIn.lba) + leadOut.lba) return {}; //not enough sectors vector data; data.resize(sectors * 96 + 96); //add one sector for P shift auto toP = [&](s32 lba) -> array_span { //P is encoded one sector later than Q return {&data[(lba + abs(leadIn.lba) + 1) * 96], 12}; }; auto toQ = [&](s32 lba) -> array_span { return {&data[(lba + abs(leadIn.lba)) * 96 + 12], 12}; }; //lead-in s32 lba = leadIn.lba; while(lba < 0) { //tracks for(u32 trackID : range(100)) { for(u32 repeat : range(3)) { auto& track = tracks[trackID]; if(!track) continue; auto q = toQ(lba); q[0] = track.control << 4 | 1; q[1] = 0x00; q[2] = BCD::encode(trackID); auto msf = MSF(lba); q[3] = BCD::encode(msf.minute); q[4] = BCD::encode(msf.second); q[5] = BCD::encode(msf.frame); q[6] = 0x00; msf = MSF(track.indices[1].lba); q[7] = BCD::encode(msf.minute); q[8] = BCD::encode(msf.second); q[9] = BCD::encode(msf.frame); auto crc16 = CRC16({q.data(), 10}); q[10] = crc16 >> 8; q[11] = crc16 >> 0; if(++lba >= 0) break; } if( lba >= 0) break; } if( lba >= 0) break; //first track for(u32 repeat : range(3)) { auto q = toQ(lba); q[0] = 0x01; //control value unverified; address = 1 q[1] = 0x00; //track# = 00 (TOC) q[2] = 0xa0; //first track auto msf = MSF(lba); q[3] = BCD::encode(msf.minute); q[4] = BCD::encode(msf.second); q[5] = BCD::encode(msf.frame); q[6] = 0x00; q[7] = BCD::encode(firstTrack); q[8] = 0x00; q[9] = 0x00; auto crc16 = CRC16({q.data(), 10}); q[10] = crc16 >> 8; q[11] = crc16 >> 0; if(++lba >= 0) break; } if( lba >= 0) break; //last track for(u32 repeat : range(3)) { auto q = toQ(lba); q[0] = 0x01; q[1] = 0x00; q[2] = 0xa1; //last track auto msf = MSF(lba); q[3] = BCD::encode(msf.minute); q[4] = BCD::encode(msf.second); q[5] = BCD::encode(msf.frame); q[6] = 0x00; q[7] = BCD::encode(lastTrack); q[8] = 0x00; q[9] = 0x00; auto crc16 = CRC16({q.data(), 10}); q[10] = crc16 >> 8; q[11] = crc16 >> 0; if(++lba >= 0) break; } if( lba >= 0) break; //lead-out point for(u32 repeat : range(3)) { auto q = toQ(lba); q[0] = 0x01; q[1] = 0x00; q[2] = 0xa2; //lead-out point auto msf = MSF(lba); q[3] = BCD::encode(msf.minute); q[4] = BCD::encode(msf.second); q[5] = BCD::encode(msf.frame); q[6] = 0x00; msf = MSF(leadOut.lba); q[7] = BCD::encode(msf.minute); q[8] = BCD::encode(msf.second); q[9] = BCD::encode(msf.frame); auto crc16 = CRC16({q.data(), 10}); q[10] = crc16 >> 8; q[11] = crc16 >> 0; if(++lba >= 0) break; } if( lba >= 0) break; } //tracks s32 end = leadOut.lba; for(u8 trackID : reverse(range(100))) { auto& track = tracks[trackID]; if(!track) continue; //indices for(u8 indexID : reverse(range(100))) { auto& index = track.indices[indexID]; if(!index) continue; for(s32 lba = index.lba; lba < end; lba++) { auto p = toP(lba); u8 byte = indexID == 0 ? 0xff : 0x00; for(u32 index : range(12)) p[index] = byte; auto q = toQ(lba); q[0] = track.control << 4 | 1; q[1] = BCD::encode(trackID); q[2] = BCD::encode(indexID); auto msf = MSF(lba - track.indices[1].lba); q[3] = BCD::encode(msf.minute); q[4] = BCD::encode(msf.second); q[5] = BCD::encode(msf.frame); q[6] = 0x00; msf = MSF(lba); q[7] = BCD::encode(msf.minute); q[8] = BCD::encode(msf.second); q[9] = BCD::encode(msf.frame); auto crc16 = CRC16({q.data(), 10}); q[10] = crc16 >> 8; q[11] = crc16 >> 0; } end = index.lba; } } //pre-lead-out (2-3s at the end of last track) for(auto i : range(150)) { auto p = toP(leadOut.lba - 150 + i); for(auto sig : range(12)) { p[sig]= 0xff; }} //lead-out for(s32 lba : range(sectors - abs(leadIn.lba) - leadOut.lba)) { auto p = toP(leadOut.lba + lba); u8 byte; if(lba < 150) { //2s start (standard specifies 2-3s start) byte = 0x00; } else { //2hz duty cycle; rounded downward (standard specifies 2% tolerance) byte = (lba - 150) / (75 >> 1) & 1 ? 0x00 : 0xff; } for(u32 index : range(12)) p[index] = byte; auto q = toQ(leadOut.lba + lba); q[0] = 0x01; q[1] = 0xaa; //lead-out track# q[2] = 0x01; //lead-out index# auto msf = MSF(lba); q[3] = BCD::encode(msf.minute); q[4] = BCD::encode(msf.second); q[5] = BCD::encode(msf.frame); q[6] = 0x00; msf = MSF(leadOut.lba + lba); q[7] = BCD::encode(msf.minute); q[8] = BCD::encode(msf.second); q[9] = BCD::encode(msf.frame); auto crc16 = CRC16({q.data(), 10}); q[10] = crc16 >> 8; q[11] = crc16 >> 0; } data.resize(data.size() - 96); //remove padding for P shift return data; } auto decode(array_view data, u32 size, u32 leadOutSectors = 0) -> bool { *this = {}; //reset session //three data[] types supported: subcode Q only, subcode P-W only, data+subcode complete image if(size != 12 && size != 96 && size != 2448) return false; //determine lead-in sector count leadIn.lba = InvalidLBA; for(s32 lba : range(7500)) { //7500 max sectors scanned u32 offset = lba * size; if(size == 96) offset += 12; if(size == 2448) offset += 12 + 2352; if(offset + 12 > data.size()) break; auto q = array_view{&data[offset], 12}; auto crc16 = CRC16({q.data(), 10}); if(q[10] != u8(crc16 >> 8)) continue; if(q[11] != u8(crc16 >> 0)) continue; u8 control = q[0] >> 4; u8 address = q[0] & 15; u8 trackID = q[1]; if(address != 1) continue; if(trackID != 0) continue; leadIn.lba = lba - 7500; break; } if(leadIn.lba == InvalidLBA || leadIn.lba >= 0) return false; auto toQ = [&](s32 lba) -> array_view { u32 offset = (lba + abs(leadIn.lba)) * size; if(size == 96) offset += 12; if(size == 2448) offset += 12 + 2352; if(offset + 12 > data.size()) return {}; return {&data[offset], 12}; }; //lead-in leadOut.lba = InvalidLBA; for(s32 lba = leadIn.lba; lba < 0; lba++) { auto q = toQ(lba); if(!q) break; auto crc16 = CRC16({q.data(), 10}); if(q[10] != u8(crc16 >> 8)) continue; if(q[11] != u8(crc16 >> 0)) continue; u8 control = q[0] >> 4; u8 address = q[0] & 15; u8 trackID = q[1]; if(address != 1) continue; if(trackID != 0) continue; trackID = BCD::decode(q[2]); if(trackID <= 99) { //00-99 auto& track = tracks[trackID]; track.control = control; track.indices[1].lba = MSF::fromBCD(q[7], q[8], q[9]).toLBA(); } if(trackID == 100) { //a0 firstTrack = BCD::decode(q[7]); } if(trackID == 101) { //a1 lastTrack = BCD::decode(q[7]); } if(trackID == 102) { //a2 leadOut.lba = MSF::fromBCD(q[7], q[8], q[9]).toLBA(); } } if(leadOut.lba == InvalidLBA) return false; //tracks for(s32 lba = 0; lba < leadOut.lba; lba++) { auto q = toQ(lba); if(!q) break; auto crc16 = CRC16({q.data(), 10}); if(q[10] != u8(crc16 >> 8)) continue; if(q[11] != u8(crc16 >> 0)) continue; u8 control = q[0] >> 4; u8 address = q[0] & 15; u8 trackID = BCD::decode(q[1]); u8 indexID = BCD::decode(q[2]); if(address != 1) continue; if(trackID == 0 || trackID > 99) continue; if(indexID > 99) continue; auto& track = tracks[trackID]; if(!track) continue; //track not found? auto& index = track.indices[indexID]; if(index) continue; //index already decoded? index.lba = MSF::fromBCD(q[7], q[8], q[9]).toLBA(); } synchronize(leadOutSectors); return true; } //calculates Index::end variables: //needed for Session::isTrack() and Track::isIndex() to function. auto synchronize(u32 leadOutSectors = 0) -> void { leadIn.end = -1; s32 end = leadOut.lba - 1; for(u32 trackID : reverse(range(100))) { auto& track = tracks[trackID]; if(!track) continue; for(u32 indexID : reverse(range(100))) { auto& index = track.indices[indexID]; if(!index) continue; index.end = end; end = index.lba - 1; } for(u32 indexID : range(100)) { auto& index = track.indices[indexID]; if(index) { track.firstIndex = indexID; break; } } for(u32 indexID : reverse(range(100))) { auto& index = track.indices[indexID]; if(index) { track.lastIndex = indexID; break; } } } leadOut.end = leadOut.lba + leadOutSectors - 1; } //for diagnostic use only auto serialize() const -> string { string s; s.append("session\n"); s.append(" leadIn: "); s.append(MSF(leadIn.lba).toString(), " - ", MSF(leadIn.end).toString(), "\n"); for(u32 trackID : range(100)) { auto& track = tracks[trackID]; if(!track) continue; s.append(" track", pad(trackID, 2, '0')); if(trackID == firstTrack) s.append(" first"); if(trackID == lastTrack) s.append( " last"); s.append("\n"); s.append(" control: ", binary(track.control, 4, '0'), "\n"); for(u32 indexID : range(100)) { auto& index = track.indices[indexID]; if(!index) continue; s.append(" index", pad(indexID, 2, '0'), ": "); s.append(MSF(index.lba).toString(), " - ", MSF(index.end).toString(), "\n"); } } s.append(" leadOut: "); s.append(MSF(leadOut.lba).toString(), " - ", MSF(leadOut.end).toString(), "\n"); return s; } }; } ares-126/nall/cd/sync.hpp000066400000000000000000000007741415063341600153320ustar00rootroot00000000000000#pragma once namespace nall::CD::Sync { inline auto create(array_span sector) -> bool { if(sector.size() != 12 && sector.size() != 2352) return false; for(u32 n : range(12)) { sector[n] = ((n == 0 || n == 11) ? 0x00 : 0xff); } return true; } // inline auto verify(array_view sector) -> bool { if(sector.size() != 12 && sector.size() != 2352) return false; for(u32 n : range(12)) { if(sector[n] != ((n == 0 || n == 11) ? 0x00 : 0xff)) return false; } return true; } } ares-126/nall/chrono.hpp000066400000000000000000000140671415063341600152600ustar00rootroot00000000000000#pragma once #include #include namespace nall::chrono { //passage of time functions (from unknown epoch) inline auto nanosecond() -> u64 { timespec tv; clock_gettime(CLOCK_MONOTONIC, &tv); return tv.tv_sec * 1'000'000'000 + tv.tv_nsec; } inline auto microsecond() -> u64 { return nanosecond() / 1'000; } inline auto millisecond() -> u64 { return nanosecond() / 1'000'000; } inline auto second() -> u64 { return nanosecond() / 1'000'000'000; } inline auto benchmark(const function& f, u64 times = 1) -> void { auto start = nanosecond(); while(times--) f(); auto end = nanosecond(); print("[chrono::benchmark] ", (double)(end - start) / 1'000'000'000.0, "s\n"); } //exact date/time functions (from system epoch) struct timeinfo { timeinfo(u32 year = 0, u32 month = 0, u32 day = 0, u32 hour = 0, u32 minute = 0, u32 second = 0, u32 weekday = 0): year(year), month(month), day(day), hour(hour), minute(minute), second(second), weekday(weekday) { } explicit operator bool() const { return month; } u32 year; //... u32 month; //1 - 12 u32 day; //1 - 31 u32 hour; //0 - 23 u32 minute; //0 - 59 u32 second; //0 - 60 u32 weekday; //0 - 6 }; inline auto timestamp() -> u64 { return ::time(nullptr); } //0 = failure condition inline auto timestamp(const string& datetime) -> u64 { static constexpr u32 monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; u64 timestamp = 0; if(datetime.match("??????????")) { return datetime.natural(); } if(datetime.match("????*")) { u32 year = datetime.slice(0, 4).natural(); if(year < 1970 || year > 2199) return 0; for(u32 y = 1970; y < year && y < 2999; y++) { u32 daysInYear = 365; if(y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) daysInYear++; timestamp += daysInYear * 24 * 60 * 60; } } if(datetime.match(R"(????-??*)")) { u32 y = datetime.slice(0, 4).natural(); u32 month = datetime.slice(5, 2).natural(); if(month < 1 || month > 12) return 0; for(u32 m = 1; m < month && m < 12; m++) { u32 daysInMonth = monthDays[m - 1]; if(m == 2 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0)) daysInMonth++; timestamp += daysInMonth * 24 * 60 * 60; } } if(datetime.match(R"(????-??-??*)")) { u32 day = datetime.slice(8, 2).natural(); if(day < 1 || day > 31) return 0; timestamp += (day - 1) * 24 * 60 * 60; } if(datetime.match(R"(????-??-?? ??*)")) { u32 hour = datetime.slice(11, 2).natural(); if(hour > 23) return 0; timestamp += hour * 60 * 60; } if(datetime.match(R"(????-??-?? ??:??*)")) { u32 minute = datetime.slice(14, 2).natural(); if(minute > 59) return 0; timestamp += minute * 60; } if(datetime.match(R"(????-??-?? ??:??:??*)")) { u32 second = datetime.slice(17, 2).natural(); if(second > 59) return 0; timestamp += second; } return timestamp; } namespace utc { inline auto timeinfo(u64 time = 0) -> chrono::timeinfo { auto stamp = time ? (time_t)time : (time_t)timestamp(); auto info = gmtime(&stamp); return { (u32)info->tm_year + 1900, (u32)info->tm_mon + 1, (u32)info->tm_mday, (u32)info->tm_hour, (u32)info->tm_min, (u32)info->tm_sec, (u32)info->tm_wday }; } inline auto year(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).year, 4, '0'); } inline auto month(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).month, 2, '0'); } inline auto day(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).day, 2, '0'); } inline auto hour(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).hour, 2, '0'); } inline auto minute(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).minute, 2, '0'); } inline auto second(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).second, 2, '0'); } inline auto date(u64 timestamp = 0) -> string { auto t = timeinfo(timestamp); return {pad(t.year, 4, '0'), "-", pad(t.month, 2, '0'), "-", pad(t.day, 2, '0')}; } inline auto time(u64 timestamp = 0) -> string { auto t = timeinfo(timestamp); return {pad(t.hour, 2, '0'), ":", pad(t.minute, 2, '0'), ":", pad(t.second, 2, '0')}; } inline auto datetime(u64 timestamp = 0) -> string { auto t = timeinfo(timestamp); return { pad(t.year, 4, '0'), "-", pad(t.month, 2, '0'), "-", pad(t.day, 2, '0'), " ", pad(t.hour, 2, '0'), ":", pad(t.minute, 2, '0'), ":", pad(t.second, 2, '0') }; } } namespace local { inline auto timeinfo(u64 time = 0) -> chrono::timeinfo { auto stamp = time ? (time_t)time : (time_t)timestamp(); auto info = localtime(&stamp); return { (u32)info->tm_year + 1900, (u32)info->tm_mon + 1, (u32)info->tm_mday, (u32)info->tm_hour, (u32)info->tm_min, (u32)info->tm_sec, (u32)info->tm_wday }; } inline auto year(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).year, 4, '0'); } inline auto month(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).month, 2, '0'); } inline auto day(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).day, 2, '0'); } inline auto hour(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).hour, 2, '0'); } inline auto minute(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).minute, 2, '0'); } inline auto second(u64 timestamp = 0) -> string { return pad(timeinfo(timestamp).second, 2, '0'); } inline auto date(u64 timestamp = 0) -> string { auto t = timeinfo(timestamp); return {pad(t.year, 4, '0'), "-", pad(t.month, 2, '0'), "-", pad(t.day, 2, '0')}; } inline auto time(u64 timestamp = 0) -> string { auto t = timeinfo(timestamp); return {pad(t.hour, 2, '0'), ":", pad(t.minute, 2, '0'), ":", pad(t.second, 2, '0')}; } inline auto datetime(u64 timestamp = 0) -> string { auto t = timeinfo(timestamp); return { pad(t.year, 4, '0'), "-", pad(t.month, 2, '0'), "-", pad(t.day, 2, '0'), " ", pad(t.hour, 2, '0'), ":", pad(t.minute, 2, '0'), ":", pad(t.second, 2, '0') }; } } } ares-126/nall/cipher/000077500000000000000000000000001415063341600145215ustar00rootroot00000000000000ares-126/nall/cipher/chacha20.hpp000066400000000000000000000053601415063341600166070ustar00rootroot00000000000000#pragma once #include #include namespace nall::Cipher { //64-bit nonce; 64-bit x 64-byte (256GB) counter struct ChaCha20 { ChaCha20(u256 key, u64 nonce, u64 counter = 0) { static const u128 sigma = 0x6b20657479622d323320646e61707865_u128; //"expand 32-byte k" input[ 0] = sigma >> 0; input[ 1] = sigma >> 32; input[ 2] = sigma >> 64; input[ 3] = sigma >> 96; input[ 4] = key >> 0; input[ 5] = key >> 32; input[ 6] = key >> 64; input[ 7] = key >> 96; input[ 8] = key >> 128; input[ 9] = key >> 160; input[10] = key >> 192; input[11] = key >> 224; input[12] = counter >> 0; input[13] = counter >> 32; input[14] = nonce >> 0; input[15] = nonce >> 32; offset = 0; } auto encrypt(array_view input) -> vector { vector output; while(input) { if(!offset) { cipher(); increment(); } auto byte = offset++; output.append(*input++ ^ (block[byte >> 2] >> (byte & 3) * 8)); offset &= 63; } return output; } auto decrypt(array_view input) -> vector { return encrypt(input); //reciprocal cipher } //protected: auto rol(u32 value, u32 bits) -> u32 { return value << bits | value >> 32 - bits; } auto quarterRound(u32 x[16], u32 a, u32 b, u32 c, u32 d) -> void { x[a] += x[b]; x[d] = rol(x[d] ^ x[a], 16); x[c] += x[d]; x[b] = rol(x[b] ^ x[c], 12); x[a] += x[b]; x[d] = rol(x[d] ^ x[a], 8); x[c] += x[d]; x[b] = rol(x[b] ^ x[c], 7); } auto cipher() -> void { memory::copy(block, input, 64); for(u32 n : range(10)) { quarterRound(block, 0, 4, 8, 12); quarterRound(block, 1, 5, 9, 13); quarterRound(block, 2, 6, 10, 14); quarterRound(block, 3, 7, 11, 15); quarterRound(block, 0, 5, 10, 15); quarterRound(block, 1, 6, 11, 12); quarterRound(block, 2, 7, 8, 13); quarterRound(block, 3, 4, 9, 14); } } auto increment() -> void { for(u32 n : range(16)) { block[n] += input[n]; } if(!++input[12]) ++input[13]; } u32 input[16]; u32 block[16]; u64 offset; }; struct HChaCha20 : protected ChaCha20 { HChaCha20(u256 key, u128 nonce) : ChaCha20(key, nonce >> 64, nonce >> 0) { cipher(); } auto key() const -> u256 { u256 key = 0; for(u32 n : range(4)) key |= (u256)block[ 0 + n] << (n + 0) * 32; for(u32 n : range(4)) key |= (u256)block[12 + n] << (n + 4) * 32; return key; } }; //192-bit nonce; 64-bit x 64-byte (256GB) counter struct XChaCha20 : ChaCha20 { XChaCha20(u256 key, u192 nonce, u64 counter = 0): ChaCha20(HChaCha20(key, nonce).key(), nonce >> 128, counter) { } }; } ares-126/nall/counting-sort.hpp000066400000000000000000000011511415063341600165710ustar00rootroot00000000000000#pragma once #include namespace nall { //counting sort by powers of two: used to implement radix sort template auto counting_sort(T* output, const T* input, u32 size) -> void { static_assert(Bits >= 1 && Bits <= 20, "must be between 1 and 20 bits"); enum : u32 { Base = 1 << Bits, Mask = Base - 1 }; u64 count[Base] = {}, last = 0; for(u32 n : range(size)) ++count[(input[n] >> Shift) & Mask]; for(u32 n : range(Base)) last += count[n], count[n] = last - count[n]; for(u32 n : range(size)) output[count[(input[n] >> Shift) & Mask]++] = input[n]; } } ares-126/nall/database/000077500000000000000000000000001415063341600150135ustar00rootroot00000000000000ares-126/nall/database/odbc.hpp000066400000000000000000000251641415063341600164430ustar00rootroot00000000000000#pragma once //legacy code; no longer used #include #include #include #include namespace nall::Database { struct ODBC { struct Statement { Statement(const Statement& source) = delete; auto operator=(const Statement& source) -> Statement& = delete; Statement(SQLHANDLE statement) : _statement(statement) {} Statement(Statement&& source) { operator=(move(source)); } auto operator=(Statement&& source) -> Statement& { _statement = source._statement; _output = source._output; _values = move(source._values); source._statement = nullptr; source._output = 0; return *this; } auto columns() -> u32 { SQLSMALLINT columns = 0; if(statement()) SQLNumResultCols(statement(), &columns); return columns; } auto integer(u32 column) -> s64 { if(auto value = _values(column)) return value.get(0); s64 value = 0; SQLGetData(statement(), 1 + column, SQL_C_SBIGINT, &value, 0, nullptr); _values(column) = (s64)value; return value; } auto natural(u32 column) -> u64 { if(auto value = _values(column)) return value.get(0); u64 value = 0; SQLGetData(statement(), 1 + column, SQL_C_UBIGINT, &value, 0, nullptr); _values(column) = (u64)value; return value; } auto real(u32 column) -> double { if(auto value = _values(column)) return value.get(0.0); f64 value = 0.0; SQLGetData(statement(), 1 + column, SQL_C_DOUBLE, &value, 0, nullptr); _values(column) = (f64)value; return value; } auto text(u32 column) -> string { if(auto value = _values(column)) return value.get({}); string value; value.resize(65535); SQLLEN size = 0; SQLGetData(statement(), 1 + column, SQL_C_CHAR, value.get(), value.size(), &size); value.resize(size); _values(column) = (string)value; return value; } auto data(u32 column) -> vector { if(auto value = _values(column)) return value.get>({}); vector value; value.resize(65535); SQLLEN size = 0; SQLGetData(statement(), 1 + column, SQL_C_CHAR, value.data(), value.size(), &size); value.resize(size); _values(column) = (vector)value; return value; } auto integer() -> s64 { return integer(_output++); } auto natural() -> u64 { return natural(_output++); } auto real() -> f64 { return real(_output++); } auto text() -> string { return text(_output++); } auto data() -> vector { return data(_output++); } protected: virtual auto statement() -> SQLHANDLE { return _statement; } SQLHANDLE _statement = nullptr; u32 _output = 0; vector _values; //some ODBC drivers (eg MS-SQL) do not allow the same column to be read more than once }; struct Query : Statement { Query(const Query& source) = delete; auto operator=(const Query& source) -> Query& = delete; Query(SQLHANDLE statement) : Statement(statement) {} Query(Query&& source) : Statement(source._statement) { operator=(move(source)); } ~Query() { if(statement()) { SQLFreeHandle(SQL_HANDLE_STMT, _statement); _statement = nullptr; } } auto operator=(Query&& source) -> Query& { Statement::operator=(move(source)); _bindings = move(source._bindings); _result = source._result; _input = source._input; _stepped = source._stepped; source._result = SQL_SUCCESS; source._input = 0; source._stepped = false; return *this; } explicit operator bool() { //this is likely not the best way to test if the query has returned data ... //but I wasn't able to find an ODBC API for this seemingly simple task return statement() && success(); } //ODBC SQLBindParameter only holds pointers to data values //if the bound paramters go out of scope before the query is executed, binding would reference dangling pointers //so to work around this, we cache all parameters inside Query until the query is executed auto& bind(u32 column, nullptr_t) { return _bindings.append({column, any{(nullptr_t)nullptr}}), *this; } auto& bind(u32 column, s32 value) { return _bindings.append({column, any{(s32)value}}), *this; } auto& bind(u32 column, u32 value) { return _bindings.append({column, any{(u32)value}}), *this; } auto& bind(u32 column, s64 value) { return _bindings.append({column, any{(s64)value}}), *this; } auto& bind(u32 column, u64 value) { return _bindings.append({column, any{(u64)value}}), *this; } auto& bind(u32 column, f64 value) { return _bindings.append({column, any{(f64)value}}), *this; } auto& bind(u32 column, const string& value) { return _bindings.append({column, any{(string)value}}), *this; } auto& bind(u32 column, const vector& value) { return _bindings.append({column, any{(vector)value}}), *this; } auto& bind(nullptr_t) { return bind(_input++, nullptr); } auto& bind(s32 value) { return bind(_input++, value); } auto& bind(u32 value) { return bind(_input++, value); } auto& bind(s64 value) { return bind(_input++, value); } auto& bind(u64 value) { return bind(_input++, value); } auto& bind(f64 value) { return bind(_input++, value); } auto& bind(const string& value) { return bind(_input++, value); } auto& bind(const vector& value) { return bind(_input++, value); } auto step() -> bool { if(!_stepped) { for(auto& binding : _bindings) { if(binding.value.is()) { SQLLEN length = SQL_NULL_DATA; SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_NUMERIC, SQL_NUMERIC, 0, 0, nullptr, 0, &length); } else if(binding.value.is()) { SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &binding.value.get(), 0, nullptr); } else if(binding.value.is()) { SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 0, 0, &binding.value.get(), 0, nullptr); } else if(binding.value.is()) { SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_SBIGINT, SQL_INTEGER, 0, 0, &binding.value.get(), 0, nullptr); } else if(binding.value.is()) { SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_UBIGINT, SQL_INTEGER, 0, 0, &binding.value.get(), 0, nullptr); } else if(binding.value.is()) { SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0, &binding.value.get(), 0, nullptr); } else if(binding.value.is()) { auto& value = binding.value.get(); SQLLEN length = SQL_NTS; SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, value.size(), 0, (SQLPOINTER)value.data(), 0, &length); } else if(binding.value.is>()) { auto& value = binding.value.get>(); SQLLEN length = value.size(); SQLBindParameter(_statement, 1 + binding.column, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARBINARY, value.size(), 0, (SQLPOINTER)value.data(), 0, &length); } } _stepped = true; _result = SQLExecute(_statement); if(!success()) return false; } _values.reset(); //clear previous row's cached read results _result = SQLFetch(_statement); _output = 0; return success(); } struct Iterator { Iterator(Query& query, bool finished) : query(query), finished(finished) {} auto operator*() -> Statement { return query._statement; } auto operator!=(const Iterator& source) const -> bool { return finished != source.finished; } auto operator++() -> Iterator& { finished = !query.step(); return *this; } protected: Query& query; bool finished = false; }; auto begin() -> Iterator { return Iterator(*this, !step()); } auto end() -> Iterator { return Iterator(*this, true); } private: auto success() const -> bool { return _result == SQL_SUCCESS || _result == SQL_SUCCESS_WITH_INFO; } auto statement() -> SQLHANDLE override { if(!_stepped) step(); return _statement; } struct Binding { u32 column; any value; }; vector _bindings; SQLRETURN _result = SQL_SUCCESS; u32 _input = 0; bool _stepped = false; }; ODBC() { _result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &_environment); if(!success()) return; SQLSetEnvAttr(_environment, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); } ODBC(const string& database, const string& username, const string& password) : ODBC() { open(database, username, password); } ~ODBC() { if(_environment) { close(); SQLFreeHandle(SQL_HANDLE_ENV, _environment); _environment = nullptr; } } explicit operator bool() const { return _connection; } auto open(const string& database, const string& username, const string& password) -> bool { if(!_environment) return false; close(); _result = SQLAllocHandle(SQL_HANDLE_DBC, _environment, &_connection); if(!success()) return false; SQLSetConnectAttr(_connection, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); _result = SQLConnectA(_connection, (SQLCHAR*)database.data(), SQL_NTS, (SQLCHAR*)username.data(), SQL_NTS, (SQLCHAR*)password.data(), SQL_NTS ); if(!success()) return close(), false; return true; } auto close() -> void { if(_connection) { SQLDisconnect(_connection); SQLFreeHandle(SQL_HANDLE_DBC, _connection); _connection = nullptr; } } template auto execute(const string& statement, P&&... p) -> Query { if(!_connection) return {nullptr}; SQLHANDLE _statement = nullptr; _result = SQLAllocHandle(SQL_HANDLE_STMT, _connection, &_statement); if(!success()) return {nullptr}; Query query{_statement}; _result = SQLPrepareA(_statement, (SQLCHAR*)statement.data(), SQL_NTS); if(!success()) return {nullptr}; bind(query, forward

(p)...); return query; } private: auto success() const -> bool { return _result == SQL_SUCCESS || _result == SQL_SUCCESS_WITH_INFO; } auto bind(Query&) -> void {} template auto bind(Query& query, const T& value, P&&... p) -> void { query.bind(value); bind(query, forward

(p)...); } SQLHANDLE _environment = nullptr; SQLHANDLE _connection = nullptr; SQLRETURN _result = SQL_SUCCESS; }; } ares-126/nall/database/sqlite3.hpp000066400000000000000000000170611415063341600171150ustar00rootroot00000000000000#pragma once //SQLite3 C++ RAII wrapper for nall //note: it is safe (no-op) to call sqlite3_* functions on null sqlite3 objects #include #include #include namespace nall::Database { struct SQLite3 { struct Statement { Statement(const Statement& source) = delete; auto operator=(const Statement& source) -> Statement& = delete; Statement(sqlite3_stmt* statement) : _statement(statement) {} Statement(Statement&& source) { operator=(move(source)); } auto operator=(Statement&& source) -> Statement& { _statement = source._statement; _response = source._response; _output = source._output; source._statement = nullptr; source._response = SQLITE_OK; source._output = 0; return *this; } explicit operator bool() { return sqlite3_data_count(statement()); } auto columns() -> u32 { return sqlite3_column_count(statement()); } auto boolean(u32 column) -> bool { return sqlite3_column_int64(statement(), column) != 0; } auto integer(u32 column) -> s64 { return sqlite3_column_int64(statement(), column); } auto natural(u32 column) -> u64 { return sqlite3_column_int64(statement(), column); } auto real(u32 column) -> f64 { return sqlite3_column_double(statement(), column); } auto string(u32 column) -> nall::string { nall::string result; if(auto text = sqlite3_column_text(statement(), column)) { result.resize(sqlite3_column_bytes(statement(), column)); memory::copy(result.get(), text, result.size()); } return result; } auto data(u32 column) -> vector { vector result; if(auto data = sqlite3_column_blob(statement(), column)) { result.resize(sqlite3_column_bytes(statement(), column)); memory::copy(result.data(), data, result.size()); } return result; } auto boolean() -> bool { return boolean(_output++); } auto integer() -> s64 { return integer(_output++); } auto natural() -> u64 { return natural(_output++); } auto real() -> f64 { return real(_output++); } auto string() -> nall::string { return string(_output++); } auto data() -> vector { return data(_output++); } protected: virtual auto statement() -> sqlite3_stmt* { return _statement; } sqlite3_stmt* _statement = nullptr; s32 _response = SQLITE_OK; u32 _output = 0; }; struct Query : Statement { Query(const Query& source) = delete; auto operator=(const Query& source) -> Query& = delete; Query(sqlite3_stmt* statement) : Statement(statement) {} Query(Query&& source) : Statement(source._statement) { operator=(move(source)); } ~Query() { sqlite3_finalize(statement()); _statement = nullptr; } auto operator=(Query&& source) -> Query& { _statement = source._statement; _input = source._input; source._statement = nullptr; source._input = 0; return *this; } auto& bind(u32 column, nullptr_t) { sqlite3_bind_null(_statement, 1 + column); return *this; } auto& bind(u32 column, bool value) { sqlite3_bind_int(_statement, 1 + column, value); return *this; } auto& bind(u32 column, s32 value) { sqlite3_bind_int(_statement, 1 + column, value); return *this; } auto& bind(u32 column, u32 value) { sqlite3_bind_int(_statement, 1 + column, value); return *this; } auto& bind(u32 column, s64 value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, u64 value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, intmax value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, uintmax value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, nall::boolean value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, nall::integer value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, nall::natural value) { sqlite3_bind_int64(_statement, 1 + column, value); return *this; } auto& bind(u32 column, f64 value) { sqlite3_bind_double(_statement, 1 + column, value); return *this; } auto& bind(u32 column, const nall::string& value) { sqlite3_bind_text(_statement, 1 + column, value.data(), value.size(), SQLITE_TRANSIENT); return *this; } auto& bind(u32 column, const vector& value) { sqlite3_bind_blob(_statement, 1 + column, value.data(), value.size(), SQLITE_TRANSIENT); return *this; } auto& bind(nullptr_t) { return bind(_input++, nullptr); } auto& bind(bool value) { return bind(_input++, value); } auto& bind(s32 value) { return bind(_input++, value); } auto& bind(u32 value) { return bind(_input++, value); } auto& bind(s64 value) { return bind(_input++, value); } auto& bind(u64 value) { return bind(_input++, value); } auto& bind(intmax value) { return bind(_input++, value); } auto& bind(uintmax value) { return bind(_input++, value); } auto& bind(nall::boolean value) { return bind(_input++, value); } auto& bind(nall::integer value) { return bind(_input++, value); } auto& bind(nall::natural value) { return bind(_input++, value); } auto& bind(f64 value) { return bind(_input++, value); } auto& bind(const nall::string& value) { return bind(_input++, value); } auto& bind(const vector& value) { return bind(_input++, value); } auto step() -> bool { _stepped = true; return sqlite3_step(_statement) == SQLITE_ROW; } struct Iterator { Iterator(Query& query, bool finished) : query(query), finished(finished) {} auto operator*() -> Statement { return query._statement; } auto operator!=(const Iterator& source) const -> bool { return finished != source.finished; } auto operator++() -> Iterator& { finished = !query.step(); return *this; } protected: Query& query; bool finished = false; }; auto begin() -> Iterator { return Iterator(*this, !step()); } auto end() -> Iterator { return Iterator(*this, true); } private: auto statement() -> sqlite3_stmt* override { if(!_stepped) step(); return _statement; } u32 _input = 0; bool _stepped = false; }; SQLite3() = default; SQLite3(const string& filename) { open(filename); } ~SQLite3() { close(); } explicit operator bool() const { return _database; } auto open(const string& filename) -> bool { close(); sqlite3_open(filename, &_database); return _database; } auto close() -> void { sqlite3_close(_database); _database = nullptr; } template auto execute(const string& statement, P&&... p) -> Query { if(!_database) return {nullptr}; sqlite3_stmt* _statement = nullptr; sqlite3_prepare_v2(_database, statement.data(), statement.size(), &_statement, nullptr); if(!_statement) { if(_debug) print("[sqlite3_prepare_v2] ", sqlite3_errmsg(_database), "\n"); return {nullptr}; } Query query{_statement}; bind(query, forward

(p)...); return query; } auto lastInsertID() const -> u64 { return _database ? sqlite3_last_insert_rowid(_database) : 0; } auto setDebug(bool debug = true) -> void { _debug = debug; } protected: auto bind(Query&) -> void {} template auto bind(Query& query, const T& value, P&&... p) -> void { query.bind(value); bind(query, forward

(p)...); } bool _debug = false; sqlite3* _database = nullptr; }; } ares-126/nall/decode/000077500000000000000000000000001415063341600144725ustar00rootroot00000000000000ares-126/nall/decode/base.hpp000066400000000000000000000021701415063341600161150ustar00rootroot00000000000000#pragma once #include namespace nall::Decode { template inline auto Base(const string& value) -> T { static const string format = Bits == 2 ? "01" : Bits == 8 ? "01234567" : Bits == 10 ? "0123456789" : Bits == 16 ? "0123456789abcdef" : Bits == 32 ? "0123456789abcdefghijklmnopqrstuv" : Bits == 34 ? "023456789abcdefghijkmnopqrstuvwxyz" //1l : Bits == 36 ? "0123456789abcdefghijklmnopqrstuvwxyz" : Bits == 57 ? "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" //01IOl : Bits == 62 ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" : Bits == 64 ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}" : Bits == 85 ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%()+,-.:;=@[]^_`{|}~" //\ "&'*/<>? : ""; static bool initialized = false; static u8 lookup[256] = {}; if(!initialized) { initialized = true; for(u32 n : range(format.size())) { lookup[format[n]] = n; } } T result = 0; for(auto byte : value) { result = result * Bits + lookup[byte]; } return result; } } ares-126/nall/decode/base64.hpp000066400000000000000000000017401415063341600162710ustar00rootroot00000000000000#pragma once namespace nall::Decode { inline auto Base64(const string& text) -> vector { static bool initialized = false; static u8 lookup[256] = {}; if(!initialized) { initialized = true; for(u32 n : range(26)) lookup['A' + n] = n; for(u32 n : range(26)) lookup['a' + n] = n + 26; for(u32 n : range(10)) lookup['0' + n] = n + 52; lookup['+'] = lookup['-'] = 62; lookup['/'] = lookup['_'] = 63; } vector result; u8 buffer = 0; u8 output = 0; for(u32 n : range(text.size())) { u8 buffer = lookup[text[n]]; switch(n & 3) { case 0: output = buffer << 2; break; case 1: result.append(output | buffer >> 4); output = (buffer & 15) << 4; break; case 2: result.append(output | buffer >> 2); output = (buffer & 3) << 6; break; case 3: result.append(output | buffer); break; } } if(text.size() & 3) result.append(output | buffer); return result; } } ares-126/nall/decode/bmp.hpp000066400000000000000000000040331415063341600157610ustar00rootroot00000000000000#pragma once namespace nall::Decode { struct BMP { BMP() = default; BMP(const string& filename) { load(filename); } BMP(const u8* data, u32 size) { load(data, size); } explicit operator bool() const { return _data; } auto reset() -> void { if(_data) { delete[] _data; _data = nullptr; } } auto data() -> u32* { return _data; } auto data() const -> const u32* { return _data; } auto width() const -> u32 { return _width; } auto height() const -> u32 { return _height; } auto load(const string& filename) -> bool { auto buffer = file::read(filename); return load(buffer.data(), buffer.size()); } auto load(const u8* data, u32 size) -> bool { if(size < 0x36) return false; const u8* p = data; if(read(p, 2) != 0x4d42) return false; //signature read(p, 8); u32 offset = read(p, 4); if(read(p, 4) != 40) return false; //DIB size s32 width = (s32)read(p, 4); if(width < 0) width = -width; s32 height = (s32)read(p, 4); bool flip = height >= 0; if(height < 0) height = -height; read(p, 2); u32 bitsPerPixel = read(p, 2); if(bitsPerPixel != 24 && bitsPerPixel != 32) return false; if(read(p, 4) != 0) return false; //compression type _width = width; _height = height; _data = new u32[width * height]; u32 bytesPerPixel = bitsPerPixel / 8; u32 alignedWidth = width * bytesPerPixel; u32 paddingLength = 0; while(alignedWidth % 4) alignedWidth++, paddingLength++; p = data + offset; for(auto y : range(height)) { u32* output = flip ? _data + (height - 1 - y) * width : _data + y * width; for(auto x : range(width)) { *output++ = read(p, bytesPerPixel) | (bitsPerPixel == 24 ? 255u << 24 : 0); } if(paddingLength) read(p, paddingLength); } return true; } private: u32* _data = nullptr; u32 _width = 0; u32 _height = 0; auto read(const u8*& buffer, u32 length) -> u64 { u64 result = 0; for(u32 n : range(length)) result |= (u64)*buffer++ << (n << 3); return result; } }; } ares-126/nall/decode/bwt.hpp000066400000000000000000000015221415063341600157770ustar00rootroot00000000000000#pragma once //burrows-wheeler transform #include namespace nall::Decode { inline auto BWT(array_view input) -> vector { vector output; u32 size = 0; for(u32 byte : range(8)) size |= *input++ << byte * 8; output.resize(size); u32 I = 0; for(u32 byte : range(8)) I |= *input++ << byte * 8; auto suffixes = SuffixArray(input); auto L = input; auto F = new u8[size]; for(u32 offset : range(size)) F[offset] = L[suffixes[offset + 1]]; u64 K[256] = {}; auto C = new s32[size]; for(u32 i : range(size)) { C[i] = K[L[i]]; K[L[i]]++; } s32 M[256]; memory::fill(M, 256, -1); for(u32 i : range(size)) { if(M[F[i]] == -1) M[F[i]] = i; } u32 i = I; for(u32 j : reverse(range(size))) { output[j] = L[i]; i = C[i] + M[L[i]]; } return output; } } ares-126/nall/decode/cue.hpp000066400000000000000000000141471415063341600157660ustar00rootroot00000000000000#pragma once #include #include #include #include namespace nall::Decode { struct CUE { struct Index { auto sectorCount() const -> u32; u8 number = 0xff; //00-99 s32 lba = -1; s32 end = -1; }; struct Track { auto sectorCount() const -> u32; auto sectorSize() const -> u32; u8 number = 0xff; //01-99 string type; vector indices; maybe pregap; maybe postgap; }; struct File { auto sectorCount() const -> u32; auto scan(const string& pathname) -> bool; string name; string type; vector tracks; }; auto load(const string& location) -> bool; auto sectorCount() const -> u32; vector files; private: auto loadFile(vector& lines, u32& offset) -> File; auto loadTrack(vector& lines, u32& offset) -> Track; auto loadIndex(vector& lines, u32& offset) -> Index; auto toLBA(const string& msf) -> u32; }; inline auto CUE::load(const string& location) -> bool { auto lines = string::read(location).replace("\r", "").split("\n"); u32 offset = 0; while(offset < lines.size()) { lines[offset].strip(); if(lines[offset].ibeginsWith("FILE ")) { auto file = loadFile(lines, offset); if(!file.tracks) continue; files.append(file); continue; } offset++; } if(!files) return false; if(!files.first().tracks) return false; if(!files.first().tracks.first().indices) return false; // calculate index ends for all but the last index for(auto& file : files) { maybe previous; for(auto& track : file.tracks) { for(auto& index : track.indices) { if(index.lba < 0) continue; // ignore gaps (not in file) if(previous) previous->end = index.lba - 1; previous = index; } } } for(auto& file : files) { if(!file.scan(Location::path(location))) return false; } return true; } inline auto CUE::loadFile(vector& lines, u32& offset) -> File { File file; lines[offset].itrimLeft("FILE ", 1L).strip(); file.type = lines[offset].split(" ").last().strip().downcase(); lines[offset].itrimRight(file.type, 1L).strip(); file.name = lines[offset].trim("\"", "\"", 1L); offset++; while(offset < lines.size()) { lines[offset].strip(); if(lines[offset].ibeginsWith("FILE ")) break; if(lines[offset].ibeginsWith("TRACK ")) { auto track = loadTrack(lines, offset); if(!track.indices) continue; file.tracks.append(track); continue; } offset++; } return file; } inline auto CUE::loadTrack(vector& lines, u32& offset) -> Track { Track track; lines[offset].itrimLeft("TRACK ", 1L).strip(); track.type = lines[offset].split(" ").last().strip().downcase(); lines[offset].itrimRight(track.type, 1L).strip(); track.number = lines[offset].natural(); offset++; while(offset < lines.size()) { lines[offset].strip(); if(lines[offset].ibeginsWith("FILE ")) break; if(lines[offset].ibeginsWith("TRACK ")) break; if(lines[offset].ibeginsWith("INDEX ")) { auto index = loadIndex(lines, offset); if(index.number == 0 && track.number == 1) index.lba = 0; // ignore track 1 index 0 (assume 1st pregap always starts at origin) track.indices.append(index); continue; } if(lines[offset].ibeginsWith("PREGAP ")) { track.pregap = toLBA(lines[offset++].itrimLeft("PREGAP ", 1L)); Index index; index.number = 0; index.lba = -1; track.indices.append(index); // placeholder continue; } if(lines[offset].ibeginsWith("POSTGAP ")) { track.postgap = toLBA(lines[offset++].itrimLeft("POSTGAP ", 1L)); Index index; index.number = track.indices.last().number + 1; index.lba = -1; track.indices.append(index); // placeholder continue; } offset++; } if(track.number == 0 || track.number > 99) return {}; return track; } inline auto CUE::loadIndex(vector& lines, u32& offset) -> Index { Index index; lines[offset].itrimLeft("INDEX ", 1L); string sector = lines[offset].split(" ").last().strip(); lines[offset].itrimRight(sector, 1L).strip(); index.number = lines[offset].natural(); index.lba = toLBA(sector); offset++; if(index.number > 99) return {}; return index; } inline auto CUE::toLBA(const string& msf) -> u32 { u32 m = msf.split(":")(0).natural(); u32 s = msf.split(":")(1).natural(); u32 f = msf.split(":")(2).natural(); return m * 60 * 75 + s * 75 + f; } inline auto CUE::sectorCount() const -> u32 { u32 count = 0; for(auto& file : files) count += file.sectorCount(); return count; } inline auto CUE::File::scan(const string& pathname) -> bool { string location = {Location::path(pathname), name}; if(!file::exists(location)) return false; u64 size = 0; if(type == "binary") { size = file::size(location); } else if(type == "wave") { Decode::WAV wav; if(!wav.open(location)) return false; if(wav.channels != 2) return false; if(wav.frequency != 44100) return false; if(wav.bitrate != 16) return false; size = wav.size(); } else { return false; } // calculate last index end for the file for(auto& track : tracks) { for(auto& index : track.indices) { if(index.lba < 0) continue; // ignore gaps (not in file) if(index.end >= 0) { size -= track.sectorSize() * index.sectorCount(); } else { index.end = index.lba + size / track.sectorSize() - 1; } } } return true; } inline auto CUE::File::sectorCount() const -> u32 { u32 count = 0; for(auto& track : tracks) count += track.sectorCount(); return count; } inline auto CUE::Track::sectorCount() const -> u32 { u32 count = 0; for(auto& index : indices) count += index.sectorCount(); return count; } inline auto CUE::Track::sectorSize() const -> u32 { if(type == "mode1/2048") return 2048; if(type == "mode1/2352") return 2352; if(type == "mode2/2352") return 2352; if(type == "audio" ) return 2352; return 0; } inline auto CUE::Index::sectorCount() const -> u32 { if(end < 0) return 0; return end - lba + 1; } } ares-126/nall/decode/gzip.hpp000066400000000000000000000031011415063341600161470ustar00rootroot00000000000000#pragma once #include #include namespace nall::Decode { struct GZIP { inline ~GZIP(); inline auto decompress(const string& filename) -> bool; inline auto decompress(const u8* data, u32 size) -> bool; string filename; u8* data = nullptr; u32 size = 0; }; GZIP::~GZIP() { if(data) delete[] data; } auto GZIP::decompress(const string& filename) -> bool { if(auto memory = file::read(filename)) { return decompress(memory.data(), memory.size()); } return false; } auto GZIP::decompress(const u8* data, u32 size) -> bool { if(size < 18) return false; if(data[0] != 0x1f) return false; if(data[1] != 0x8b) return false; u32 cm = data[2]; u32 flg = data[3]; u32 mtime = data[4]; mtime |= data[5] << 8; mtime |= data[6] << 16; mtime |= data[7] << 24; u32 xfl = data[8]; u32 os = data[9]; u32 p = 10; u32 isize = data[size - 4]; isize |= data[size - 3] << 8; isize |= data[size - 2] << 16; isize |= data[size - 1] << 24; filename = ""; if(flg & 0x04) { //FEXTRA u32 xlen = data[p + 0]; xlen |= data[p + 1] << 8; p += 2 + xlen; } if(flg & 0x08) { //FNAME char buffer[PATH_MAX]; for(u32 n = 0; n < PATH_MAX; n++, p++) { buffer[n] = data[p]; if(data[p] == 0) break; } if(data[p++]) return false; filename = buffer; } if(flg & 0x10) { //FCOMMENT while(data[p++]); } if(flg & 0x02) { //FHCRC p += 2; } this->size = isize; this->data = new u8[this->size]; return inflate(this->data, this->size, data + p, size - p - 8); } } ares-126/nall/decode/html.hpp000066400000000000000000000021021415063341600161420ustar00rootroot00000000000000#pragma once namespace nall::Decode { inline auto HTML(const string& input) -> string { string output; for(u32 n = 0; n < input.size();) { if(input[n] == '&') { if(input(n + 1) == 'a' && input(n + 2) == 'm' && input(n + 3) == 'p' && input(n + 4) == ';') { output.append('&'); n += 5; continue; } if(input(n + 1) == 'l' && input(n + 2) == 't' && input(n + 3) == ';') { output.append('<'); n += 4; continue; } if(input(n + 1) == 'g' && input(n + 2) == 't' && input(n + 3) == ';') { output.append('>'); n += 4; continue; } if(input(n + 1) == 'q' && input(n + 2) == 'u' && input(n + 3) == 'o' && input(n + 4) == 't' && input(n + 5) == ';') { output.append('"'); n += 6; continue; } if(input(n + 1) == 'a' && input(n + 2) == 'p' && input(n + 3) == 'o' && input(n + 4) == 's' && input(n + 5) == ';') { output.append('\''); n += 6; continue; } } output.append(input[n++]); } return output; } } ares-126/nall/decode/huffman.hpp000066400000000000000000000014011415063341600166230ustar00rootroot00000000000000#pragma once namespace nall::Decode { inline auto Huffman(array_view input) -> vector { vector output; u32 size = 0; for(u32 byte : range(8)) size |= *input++ << byte * 8; output.reserve(size); u32 byte = 0, bits = 0; auto read = [&]() -> bool { if(bits == 0) bits = 8, byte = *input++; return byte >> --bits & 1; }; u32 nodes[256][2] = {}; for(u32 offset : range(256)) { for(u32 index : range(9)) nodes[offset][0] = nodes[offset][0] << 1 | read(); for(u32 index : range(9)) nodes[offset][1] = nodes[offset][1] << 1 | read(); } u32 node = 511; while(output.size() < size) { node = nodes[node - 256][read()]; if(node < 256) { output.append(node); node = 511; } } return output; } } ares-126/nall/decode/inflate.hpp000066400000000000000000000174501415063341600166340ustar00rootroot00000000000000#pragma once //a bad implementation of inflate from zlib/minizip //todo: replace with Talarubi's version #include namespace nall::Decode { namespace puff { inline auto puff(u8* dest, u32* destlen, u8* source, u32* sourcelen) -> s32; } inline auto inflate(u8* target, u32 targetLength, const u8* source, u32 sourceLength) -> bool { u32 tl = targetLength, sl = sourceLength; s32 result = puff::puff((u8*)target, &tl, (u8*)source, &sl); return result == 0; } namespace puff { enum : u32 { MAXBITS = 15, MAXLCODES = 286, MAXDCODES = 30, FIXLCODES = 288, MAXCODES = MAXLCODES + MAXDCODES, }; struct state { u8* out; u32 outlen; u32 outcnt; u8* in; u32 inlen; u32 incnt; s32 bitbuf; s32 bitcnt; jmp_buf env; }; struct huffman { s16* count; s16* symbol; }; inline auto bits(state* s, s32 need) -> s32 { s32 val; val = s->bitbuf; while(s->bitcnt < need) { if(s->incnt == s->inlen) longjmp(s->env, 1); val |= (s32)(s->in[s->incnt++]) << s->bitcnt; s->bitcnt += 8; } s->bitbuf = (s32)(val >> need); s->bitcnt -= need; return (s32)(val & ((1L << need) - 1)); } inline auto stored(state* s) -> s32 { u32 len; s->bitbuf = 0; s->bitcnt = 0; if(s->incnt + 4 > s->inlen) return 2; len = s->in[s->incnt++]; len |= s->in[s->incnt++] << 8; if(s->in[s->incnt++] != (~len & 0xff) || s->in[s->incnt++] != ((~len >> 8) & 0xff) ) return 2; if(s->incnt + len > s->inlen) return 2; if(s->out != nullptr) { if(s->outcnt + len > s->outlen) return 1; while(len--) s->out[s->outcnt++] = s->in[s->incnt++]; } else { s->outcnt += len; s->incnt += len; } return 0; } inline auto decode(state* s, huffman* h) -> s32 { s32 len, code, first, count, index, bitbuf, left; s16* next; bitbuf = s->bitbuf; left = s->bitcnt; code = first = index = 0; len = 1; next = h->count + 1; while(true) { while(left--) { code |= bitbuf & 1; bitbuf >>= 1; count = *next++; if(code - count < first) { s->bitbuf = bitbuf; s->bitcnt = (s->bitcnt - len) & 7; return h->symbol[index + (code - first)]; } index += count; first += count; first <<= 1; code <<= 1; len++; } left = (MAXBITS + 1) - len; if(left == 0) break; if(s->incnt == s->inlen) longjmp(s->env, 1); bitbuf = s->in[s->incnt++]; if(left > 8) left = 8; } return -10; } inline auto construct(huffman* h, s16* length, s32 n) -> s32 { s32 symbol, len, left; s16 offs[MAXBITS + 1]; for(len = 0; len <= MAXBITS; len++) h->count[len] = 0; for(symbol = 0; symbol < n; symbol++) h->count[length[symbol]]++; if(h->count[0] == n) return 0; left = 1; for(len = 1; len <= MAXBITS; len++) { left <<= 1; left -= h->count[len]; if(left < 0) return left; } offs[1] = 0; for(len = 1; len < MAXBITS; len++) offs[len + 1] = offs[len] + h->count[len]; for(symbol = 0; symbol < n; symbol++) { if(length[symbol] != 0) h->symbol[offs[length[symbol]]++] = symbol; } return left; } inline auto codes(state* s, huffman* lencode, huffman* distcode) -> s32 { s32 symbol, len; u32 dist; static const s16 lens[29] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 }; static const s16 lext[29] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 }; static const s16 dists[30] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 }; static const s16 dext[30] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; do { symbol = decode(s, lencode); if(symbol < 0) return symbol; if(symbol < 256) { if(s->out != nullptr) { if(s->outcnt == s->outlen) return 1; s->out[s->outcnt] = symbol; } s->outcnt++; } else if(symbol > 256) { symbol -= 257; if(symbol >= 29) return -10; len = lens[symbol] + bits(s, lext[symbol]); symbol = decode(s, distcode); if(symbol < 0) return symbol; dist = dists[symbol] + bits(s, dext[symbol]); #ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOO_FAR if(dist > s->outcnt) return -11; #endif if(s->out != nullptr) { if(s->outcnt + len > s->outlen) return 1; while(len--) { s->out[s->outcnt] = #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOO_FAR dist > s->outcnt ? 0 : #endif s->out[s->outcnt - dist]; s->outcnt++; } } else { s->outcnt += len; } } } while(symbol != 256); return 0; } inline auto fixed(state* s) -> s32 { static s32 virgin = 1; static s16 lencnt[MAXBITS + 1], lensym[FIXLCODES]; static s16 distcnt[MAXBITS + 1], distsym[MAXDCODES]; static huffman lencode, distcode; if(virgin) { s32 symbol = 0; s16 lengths[FIXLCODES]; lencode.count = lencnt; lencode.symbol = lensym; distcode.count = distcnt; distcode.symbol = distsym; for(; symbol < 144; symbol++) lengths[symbol] = 8; for(; symbol < 256; symbol++) lengths[symbol] = 9; for(; symbol < 280; symbol++) lengths[symbol] = 7; for(; symbol < FIXLCODES; symbol++) lengths[symbol] = 8; construct(&lencode, lengths, FIXLCODES); for(symbol = 0; symbol < MAXDCODES; symbol++) lengths[symbol] = 5; construct(&distcode, lengths, MAXDCODES); virgin = 0; } return codes(s, &lencode, &distcode); } inline auto dynamic(state* s) -> s32 { s32 nlen, ndist, ncode, index, err; s16 lengths[MAXCODES]; s16 lencnt[MAXBITS + 1], lensym[MAXLCODES]; s16 distcnt[MAXBITS + 1], distsym[MAXDCODES]; huffman lencode, distcode; static const s16 order[19] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; lencode.count = lencnt; lencode.symbol = lensym; distcode.count = distcnt; distcode.symbol = distsym; nlen = bits(s, 5) + 257; ndist = bits(s, 5) + 1; ncode = bits(s, 4) + 4; if(nlen > MAXLCODES || ndist > MAXDCODES) return -3; for(index = 0; index < ncode; index++) lengths[order[index]] = bits(s, 3); for(; index < 19; index++) lengths[order[index]] = 0; err = construct(&lencode, lengths, 19); if(err != 0) return -4; index = 0; while(index < nlen + ndist) { s32 symbol, len; symbol = decode(s, &lencode); if(symbol < 16) { lengths[index++] = symbol; } else { len = 0; if(symbol == 16) { if(index == 0) return -5; len = lengths[index - 1]; symbol = 3 + bits(s, 2); } else if(symbol == 17) { symbol = 3 + bits(s, 3); } else { symbol = 11 + bits(s, 7); } if(index + symbol > nlen + ndist) return -6; while(symbol--) lengths[index++] = len; } } if(lengths[256] == 0) return -9; err = construct(&lencode, lengths, nlen); if(err < 0 || (err > 0 && nlen - lencode.count[0] != 1)) return -7; err = construct(&distcode, lengths + nlen, ndist); if(err < 0 || (err > 0 && ndist - distcode.count[0] != 1)) return -8; return codes(s, &lencode, &distcode); } inline auto puff(u8* dest, u32* destlen, u8* source, u32* sourcelen) -> s32 { state s; s32 last, type, err; s.out = dest; s.outlen = *destlen; s.outcnt = 0; s.in = source; s.inlen = *sourcelen; s.incnt = 0; s.bitbuf = 0; s.bitcnt = 0; if(setjmp(s.env) != 0) { err = 2; } else { do { last = bits(&s, 1); type = bits(&s, 2); err = type == 0 ? stored(&s) : type == 1 ? fixed(&s) : type == 2 ? dynamic(&s) : -1; if(err != 0) break; } while(!last); } if(err <= 0) { *destlen = s.outcnt; *sourcelen = s.incnt; } return err; } } } ares-126/nall/decode/lzsa.hpp000066400000000000000000000035121415063341600161550ustar00rootroot00000000000000#pragma once #include namespace nall::Decode { inline auto LZSA(array_view input) -> vector { vector output; u32 index = 0; u32 size = 0; for(u32 byte : range(8)) size |= *input++ << byte * 8; output.resize(size); auto load = [&]() -> vector { u32 size = 0; for(u32 byte : range(8)) size |= *input++ << byte * 8; vector buffer; buffer.reserve(size); while(size--) buffer.append(*input++); return buffer; }; auto flags = Decode::Huffman(load()); auto literals = Decode::Huffman(load()); auto lengths = Decode::Huffman(load()); auto offsets = Decode::Huffman(load()); auto flagData = flags.data(); u32 byte = 0, bits = 0; auto flagRead = [&]() -> bool { if(bits == 0) bits = 8, byte = *flagData++; return byte >> --bits & 1; }; auto literalData = literals.data(); auto literalRead = [&]() -> u8 { return *literalData++; }; auto lengthData = lengths.data(); auto lengthRead = [&]() -> u64 { u32 byte = *lengthData++, bytes = 1; while(!(byte & 1)) byte >>= 1, bytes++; u32 length = byte >> 1, shift = 8 - bytes; while(--bytes) length |= *lengthData++ << shift, shift += 8; return length; }; auto offsetData = offsets.data(); auto offsetRead = [&]() -> u32 { u32 offset = 0; offset |= *offsetData++ << 0; if(index < 1 << 8) return offset; offset |= *offsetData++ << 8; if(index < 1 << 16) return offset; offset |= *offsetData++ << 16; if(index < 1 << 24) return offset; offset |= *offsetData++ << 24; return offset; }; while(index < size) { if(!flagRead()) { output[index++] = literalRead(); } else { u32 length = lengthRead() + 6; u32 offset = index - offsetRead(); while(length--) output[index++] = output[offset++]; } } return output; } } ares-126/nall/decode/mtf.hpp000066400000000000000000000006761415063341600160020ustar00rootroot00000000000000#pragma once //move to front namespace nall::Decode { inline auto MTF(array_view input) -> vector { vector output; output.resize(input.size()); u8 order[256]; for(u32 n : range(256)) order[n] = n; for(u32 offset : range(input.size())) { u32 data = input[offset]; u32 value = order[data]; output[offset] = value; memory::move(&order[1], &order[0], data); order[0] = value; } return output; } } ares-126/nall/decode/png.hpp000066400000000000000000000212421415063341600157700ustar00rootroot00000000000000#pragma once #include #include namespace nall::Decode { struct PNG { PNG(); ~PNG(); auto load(const string& filename) -> bool; auto load(const u8* sourceData, u32 sourceSize) -> bool; auto readbits(const u8*& data) -> u32; struct Info { u32 width; u32 height; u32 bitDepth; //colorType: //0 = L (luma) //2 = R,G,B //3 = P (palette) //4 = L,A //6 = R,G,B,A u32 colorType; u32 compressionMethod; u32 filterType; u32 interlaceMethod; u32 bytesPerPixel; u32 pitch; u8 palette[256][3]; } info; u8* data = nullptr; u32 size = 0; u32 bitpos = 0; protected: enum class FourCC : u32 { IHDR = 0x49484452, PLTE = 0x504c5445, IDAT = 0x49444154, IEND = 0x49454e44, }; auto interlace(u32 pass, u32 index) -> u32; auto inflateSize() -> u32; auto deinterlace(const u8*& inputData, u32 pass) -> bool; auto filter(u8* outputData, const u8* inputData, u32 width, u32 height) -> bool; auto read(const u8* data, u32 length) -> u32; }; inline PNG::PNG() { } inline PNG::~PNG() { if(data) delete[] data; } inline auto PNG::load(const string& filename) -> bool { if(auto memory = file::read(filename)) { return load(memory.data(), memory.size()); } return false; } inline auto PNG::load(const u8* sourceData, u32 sourceSize) -> bool { if(sourceSize < 8) return false; if(read(sourceData + 0, 4) != 0x89504e47) return false; if(read(sourceData + 4, 4) != 0x0d0a1a0a) return false; u8* compressedData = nullptr; u32 compressedSize = 0; u32 offset = 8; while(offset < sourceSize) { u32 length = read(sourceData + offset + 0, 4); u32 fourCC = read(sourceData + offset + 4, 4); u32 checksum = read(sourceData + offset + 8 + length, 4); if(fourCC == (u32)FourCC::IHDR) { info.width = read(sourceData + offset + 8, 4); info.height = read(sourceData + offset + 12, 4); info.bitDepth = read(sourceData + offset + 16, 1); info.colorType = read(sourceData + offset + 17, 1); info.compressionMethod = read(sourceData + offset + 18, 1); info.filterType = read(sourceData + offset + 19, 1); info.interlaceMethod = read(sourceData + offset + 20, 1); if(info.bitDepth == 0 || info.bitDepth > 16) return false; if(info.bitDepth & (info.bitDepth - 1)) return false; //not a power of two if(info.compressionMethod != 0) return false; if(info.filterType != 0) return false; if(info.interlaceMethod != 0 && info.interlaceMethod != 1) return false; switch(info.colorType) { case 0: info.bytesPerPixel = info.bitDepth * 1; break; //L case 2: info.bytesPerPixel = info.bitDepth * 3; break; //R,G,B case 3: info.bytesPerPixel = info.bitDepth * 1; break; //P case 4: info.bytesPerPixel = info.bitDepth * 2; break; //L,A case 6: info.bytesPerPixel = info.bitDepth * 4; break; //R,G,B,A default: return false; } if(info.colorType == 2 || info.colorType == 4 || info.colorType == 6) { if(info.bitDepth != 8 && info.bitDepth != 16) return false; } if(info.colorType == 3 && info.bitDepth == 16) return false; info.bytesPerPixel = (info.bytesPerPixel + 7) / 8; info.pitch = (s32)info.width * info.bytesPerPixel; } if(fourCC == (u32)FourCC::PLTE) { if(length % 3) return false; for(u32 n = 0, p = offset + 8; n < length / 3; n++) { info.palette[n][0] = sourceData[p++]; info.palette[n][1] = sourceData[p++]; info.palette[n][2] = sourceData[p++]; } } if(fourCC == (u32)FourCC::IDAT) { compressedData = (u8*)realloc(compressedData, compressedSize + length); memcpy(compressedData + compressedSize, sourceData + offset + 8, length); compressedSize += length; } if(fourCC == (u32)FourCC::IEND) { break; } offset += 4 + 4 + length + 4; } u32 interlacedSize = inflateSize(); auto interlacedData = new u8[interlacedSize]; bool result = inflate(interlacedData, interlacedSize, compressedData + 2, compressedSize - 6); free(compressedData); if(result == false) { delete[] interlacedData; return false; } size = info.width * info.height * info.bytesPerPixel; data = new u8[size]; if(info.interlaceMethod == 0) { if(filter(data, interlacedData, info.width, info.height) == false) { delete[] interlacedData; delete[] data; data = nullptr; return false; } } else { const u8* passData = interlacedData; for(u32 pass = 0; pass < 7; pass++) { if(deinterlace(passData, pass) == false) { delete[] interlacedData; delete[] data; data = nullptr; return false; } } } delete[] interlacedData; return true; } inline auto PNG::interlace(u32 pass, u32 index) -> u32 { static const u32 data[7][4] = { //x-distance, y-distance, x-origin, y-origin {8, 8, 0, 0}, {8, 8, 4, 0}, {4, 8, 0, 4}, {4, 4, 2, 0}, {2, 4, 0, 2}, {2, 2, 1, 0}, {1, 2, 0, 1}, }; return data[pass][index]; } inline auto PNG::inflateSize() -> u32 { if(info.interlaceMethod == 0) { return info.width * info.height * info.bytesPerPixel + info.height; } u32 size = 0; for(u32 pass = 0; pass < 7; pass++) { u32 xd = interlace(pass, 0), yd = interlace(pass, 1); u32 xo = interlace(pass, 2), yo = interlace(pass, 3); u32 width = (info.width + (xd - xo - 1)) / xd; u32 height = (info.height + (yd - yo - 1)) / yd; if(width == 0 || height == 0) continue; size += width * height * info.bytesPerPixel + height; } return size; } inline auto PNG::deinterlace(const u8*& inputData, u32 pass) -> bool { u32 xd = interlace(pass, 0), yd = interlace(pass, 1); u32 xo = interlace(pass, 2), yo = interlace(pass, 3); u32 width = (info.width + (xd - xo - 1)) / xd; u32 height = (info.height + (yd - yo - 1)) / yd; if(width == 0 || height == 0) return true; u32 outputSize = width * height * info.bytesPerPixel; auto outputData = new u8[outputSize]; bool result = filter(outputData, inputData, width, height); const u8* rd = outputData; for(u32 y = yo; y < info.height; y += yd) { u8* wr = data + y * info.pitch; for(u32 x = xo; x < info.width; x += xd) { for(u32 b = 0; b < info.bytesPerPixel; b++) { wr[x * info.bytesPerPixel + b] = *rd++; } } } inputData += outputSize + height; delete[] outputData; return result; } inline auto PNG::filter(u8* outputData, const u8* inputData, u32 width, u32 height) -> bool { u8* wr = outputData; const u8* rd = inputData; s32 bpp = info.bytesPerPixel, pitch = width * bpp; for(s32 y = 0; y < height; y++) { u8 filter = *rd++; switch(filter) { case 0x00: //None for(s32 x = 0; x < pitch; x++) { wr[x] = rd[x]; } break; case 0x01: //Subtract for(s32 x = 0; x < pitch; x++) { wr[x] = rd[x] + (x - bpp < 0 ? 0 : wr[x - bpp]); } break; case 0x02: //Above for(s32 x = 0; x < pitch; x++) { wr[x] = rd[x] + (y - 1 < 0 ? 0 : wr[x - pitch]); } break; case 0x03: //Average for(s32 x = 0; x < pitch; x++) { s16 a = x - bpp < 0 ? 0 : wr[x - bpp]; s16 b = y - 1 < 0 ? 0 : wr[x - pitch]; wr[x] = rd[x] + (u8)((a + b) / 2); } break; case 0x04: //Paeth for(s32 x = 0; x < pitch; x++) { s16 a = x - bpp < 0 ? 0 : wr[x - bpp]; s16 b = y - 1 < 0 ? 0 : wr[x - pitch]; s16 c = x - bpp < 0 || y - 1 < 0 ? 0 : wr[x - pitch - bpp]; s16 p = a + b - c; s16 pa = p > a ? p - a : a - p; s16 pb = p > b ? p - b : b - p; s16 pc = p > c ? p - c : c - p; auto paeth = (u8)((pa <= pb && pa <= pc) ? a : (pb <= pc) ? b : c); wr[x] = rd[x] + paeth; } break; default: //Invalid return false; } rd += pitch; wr += pitch; } return true; } inline auto PNG::read(const u8* data, u32 length) -> u32 { u32 result = 0; while(length--) result = (result << 8) | (*data++); return result; } inline auto PNG::readbits(const u8*& data) -> u32 { u32 result = 0; switch(info.bitDepth) { case 1: result = (*data >> bitpos) & 1; bitpos++; if(bitpos == 8) { data++; bitpos = 0; } break; case 2: result = (*data >> bitpos) & 3; bitpos += 2; if(bitpos == 8) { data++; bitpos = 0; } break; case 4: result = (*data >> bitpos) & 15; bitpos += 4; if(bitpos == 8) { data++; bitpos = 0; } break; case 8: result = *data++; break; case 16: result = (data[0] << 8) | (data[1] << 0); data += 2; break; } return result; } } ares-126/nall/decode/rle.hpp000066400000000000000000000015711415063341600157710ustar00rootroot00000000000000#pragma once namespace nall::Decode { template //S = word size; M = match length inline auto RLE(array_view input) -> vector { vector output; auto load = [&]() -> u8 { return input ? *input++ : 0; }; u32 base = 0; u64 size = 0; for(u32 byte : range(8)) size |= load() << byte * 8; output.resize(size); auto read = [&]() -> u64 { u64 value = 0; for(u32 byte : range(S)) value |= load() << byte * 8; return value; }; auto write = [&](u64 value) -> void { if(base >= size) return; for(u32 byte : range(S)) output[base++] = value >> byte * 8; }; while(base < size) { auto byte = load(); if(byte < 128) { byte++; while(byte--) write(read()); } else { auto value = read(); byte = (byte & 127) + M; while(byte--) write(value); } } return output; } } ares-126/nall/decode/url.hpp000066400000000000000000000022331415063341600160050ustar00rootroot00000000000000#pragma once namespace nall::Decode { //returns empty string on malformed content inline auto URL(string_view input) -> string { string output; for(u32 n = 0; n < input.size();) { char c = input[n]; //unreserved characters if(c >= 'A' && c <= 'Z') { output.append(c); n++; continue; } if(c >= 'a' && c <= 'z') { output.append(c); n++; continue; } if(c >= '0' && c <= '9') { output.append(c); n++; continue; } if(c == '-' || c == '_' || c == '.' || c == '~') { output.append(c); n++; continue; } //special characters if(c == '+') { output.append(' '); n++; continue; } //reserved characters if(c != '%' || n + 2 >= input.size()) return ""; char hi = input[n + 1]; char lo = input[n + 2]; if(hi >= '0' && hi <= '9') hi -= '0'; else if(hi >= 'A' && hi <= 'F') hi -= 'A' - 10; else if(hi >= 'a' && hi <= 'f') hi -= 'a' - 10; else return ""; if(lo >= '0' && lo <= '9') lo -= '0'; else if(lo >= 'A' && lo <= 'F') lo -= 'A' - 10; else if(lo >= 'a' && lo <= 'f') lo -= 'a' - 10; else return ""; char byte = hi * 16 + lo; output.append(byte); n += 3; } return output; } } ares-126/nall/decode/wav.hpp000066400000000000000000000041021415063341600157750ustar00rootroot00000000000000#pragma once #include #include namespace nall::Decode { struct WAV { auto open(const string& filename) -> bool; auto close() -> void; auto read() -> u64; auto end() const -> bool; auto size() const -> u64; file_buffer fp; u32 channels = 0; u32 frequency = 0; u32 bitrate = 0; u32 samples = 0; u32 headerSize = 0; }; inline auto WAV::open(const string& filename) -> bool { close(); if(fp = file::open(filename, file::mode::read)) { if(fp.read() != 'R') return false; if(fp.read() != 'I') return false; if(fp.read() != 'F') return false; if(fp.read() != 'F') return false; u32 chunkSize = fp.readl(4); if(fp.read() != 'W') return false; if(fp.read() != 'A') return false; if(fp.read() != 'V') return false; if(fp.read() != 'E') return false; if(fp.read() != 'f') return false; if(fp.read() != 'm') return false; if(fp.read() != 't') return false; if(fp.read() != ' ') return false; u32 subchunkSize = fp.readl(4); if(subchunkSize != 16) return false; u16 format = fp.readl(2); if(format != 1) return false; //only PCM is supported channels = fp.readl(2); frequency = fp.readl(4); u32 byteRate = fp.readl(4); u16 blockAlign = fp.readl(2); bitrate = fp.readl(2); //todo: handle LIST chunk better than this while(!fp.end() && fp.read() != 'd'); while(!fp.end() && fp.read() != 'a'); while(!fp.end() && fp.read() != 't'); while(!fp.end() && fp.read() != 'a'); if(fp.end()) return false; u32 dataSize = fp.readl(4); u32 remaining = fp.size() - fp.offset(); samples = remaining / (bitrate / 8) / channels; headerSize = fp.offset(); return true; } return false; } inline auto WAV::close() -> void { fp.close(); channels = 0; frequency = 0; bitrate = 0; samples = 0; } inline auto WAV::read() -> u64 { return fp.readl((bitrate / 8) * channels); } inline auto WAV::end() const -> bool { return fp.end(); } inline auto WAV::size() const -> u64 { return samples * (bitrate / 8) * channels; } } ares-126/nall/decode/zip.hpp000066400000000000000000000062261415063341600160130ustar00rootroot00000000000000#pragma once #include #include #include #include namespace nall::Decode { struct ZIP { struct File { string name; const u8* data; u32 size; u32 csize; u32 cmode; //0 = uncompressed, 8 = deflate u32 crc32; time_t timestamp; }; ~ZIP() { close(); } auto open(const string& filename) -> bool { close(); if(fm.open(filename, file::mode::read) == false) return false; if(open(fm.data(), fm.size()) == false) { fm.close(); return false; } return true; } auto open(const u8* data, u32 size) -> bool { if(size < 22) return false; filedata = data; filesize = size; file.reset(); const u8* footer = data + size - 22; while(true) { if(footer <= data + 22) return false; if(read(footer, 4) == 0x06054b50) { u32 commentlength = read(footer + 20, 2); if(footer + 22 + commentlength == data + size) break; } footer--; } const u8* directory = data + read(footer + 16, 4); while(true) { u32 signature = read(directory + 0, 4); if(signature != 0x02014b50) break; File file; file.cmode = read(directory + 10, 2); file.crc32 = read(directory + 16, 4); file.csize = read(directory + 20, 4); file.size = read(directory + 24, 4); u16 dosTime = read(directory + 12, 2); u16 dosDate = read(directory + 14, 2); tm info = {}; info.tm_sec = (dosTime >> 0 & 31) << 1; info.tm_min = (dosTime >> 5 & 63); info.tm_hour = (dosTime >> 11 & 31); info.tm_mday = (dosDate >> 0 & 31); info.tm_mon = (dosDate >> 5 & 15) - 1; info.tm_year = (dosDate >> 9 & 127) + 80; info.tm_isdst = -1; file.timestamp = mktime(&info); u32 namelength = read(directory + 28, 2); u32 extralength = read(directory + 30, 2); u32 commentlength = read(directory + 32, 2); char* filename = new char[namelength + 1]; memcpy(filename, directory + 46, namelength); filename[namelength] = 0; file.name = filename; delete[] filename; u32 offset = read(directory + 42, 4); u32 offsetNL = read(data + offset + 26, 2); u32 offsetEL = read(data + offset + 28, 2); file.data = data + offset + 30 + offsetNL + offsetEL; directory += 46 + namelength + extralength + commentlength; this->file.append(file); } return true; } auto extract(File& file) -> vector { vector buffer; if(file.cmode == 0) { buffer.resize(file.size); memcpy(buffer.data(), file.data, file.size); } if(file.cmode == 8) { buffer.resize(file.size); if(inflate(buffer.data(), buffer.size(), file.data, file.csize) == false) { buffer.reset(); } } return buffer; } auto close() -> void { if(fm) fm.close(); } protected: file_map fm; const u8* filedata; u32 filesize; auto read(const u8* data, u32 size) -> u32 { u32 result = 0, shift = 0; while(size--) { result |= *data++ << shift; shift += 8; } return result; } public: vector file; }; } ares-126/nall/directory.hpp000066400000000000000000000301141415063341600157630ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #if defined(PLATFORM_WINDOWS) #include #else #include #include #include #endif namespace nall { struct directory : inode { directory() = delete; static auto copy(const string& source, const string& target) -> bool; //recursive static auto create(const string& pathname, u32 permissions = 0755) -> bool; //recursive static auto remove(const string& pathname) -> bool; //recursive static auto exists(const string& pathname) -> bool; static auto folders(const string& pathname, const string& pattern = "*") -> vector { auto folders = directory::ufolders(pathname, pattern); folders.sort(); for(auto& folder : folders) folder.append("/"); //must append after sorting return folders; } static auto files(const string& pathname, const string& pattern = "*") -> vector { auto files = directory::ufiles(pathname, pattern); files.sort(); return files; } static auto contents(const string& pathname, const string& pattern = "*") -> vector { auto folders = directory::ufolders(pathname); //pattern search of contents should only filter files folders.sort(); for(auto& folder : folders) folder.append("/"); //must append after sorting auto files = directory::ufiles(pathname, pattern); files.sort(); for(auto& file : files) folders.append(file); return folders; } static auto ifolders(const string& pathname, const string& pattern = "*") -> vector { auto folders = ufolders(pathname, pattern); folders.isort(); for(auto& folder : folders) folder.append("/"); //must append after sorting return folders; } static auto ifiles(const string& pathname, const string& pattern = "*") -> vector { auto files = ufiles(pathname, pattern); files.isort(); return files; } static auto icontents(const string& pathname, const string& pattern = "*") -> vector { auto folders = directory::ufolders(pathname); //pattern search of contents should only filter files folders.isort(); for(auto& folder : folders) folder.append("/"); //must append after sorting auto files = directory::ufiles(pathname, pattern); files.isort(); for(auto& file : files) folders.append(file); return folders; } static auto rcontents(const string& pathname, const string& pattern = "*") -> vector { vector contents; function recurse = [&](const string& basename, const string& pathname, const string& pattern) { for(auto& folder : directory::ufolders(pathname)) { contents.append(string{pathname, folder, "/"}.trimLeft(basename, 1L)); recurse(basename, {pathname, folder, "/"}, pattern); } for(auto& file : directory::ufiles(pathname, pattern)) { contents.append(string{pathname, file}.trimLeft(basename, 1L)); } }; for(auto& folder : directory::ufolders(pathname)) { contents.append({folder, "/"}); recurse(pathname, {pathname, folder, "/"}, pattern); } for(auto& file : directory::ufiles(pathname, pattern)) { contents.append(file); } contents.sort(); return contents; } static auto ircontents(const string& pathname, const string& pattern = "*") -> vector { vector contents; function recurse = [&](const string& basename, const string& pathname, const string& pattern) { for(auto& folder : directory::ufolders(pathname)) { contents.append(string{pathname, folder, "/"}.trimLeft(basename, 1L)); recurse(basename, {pathname, folder, "/"}, pattern); } for(auto& file : directory::ufiles(pathname, pattern)) { contents.append(string{pathname, file}.trimLeft(basename, 1L)); } }; for(auto& folder : directory::ufolders(pathname)) { contents.append({folder, "/"}); recurse(pathname, {pathname, folder, "/"}, pattern); } for(auto& file : directory::ufiles(pathname, pattern)) { contents.append(file); } contents.isort(); return contents; } static auto rfolders(const string& pathname, const string& pattern = "*") -> vector { vector folders; for(auto& folder : rcontents(pathname, pattern)) { if(directory::exists({pathname, folder})) folders.append(folder); } return folders; } static auto irfolders(const string& pathname, const string& pattern = "*") -> vector { vector folders; for(auto& folder : ircontents(pathname, pattern)) { if(directory::exists({pathname, folder})) folders.append(folder); } return folders; } static auto rfiles(const string& pathname, const string& pattern = "*") -> vector { vector files; for(auto& file : rcontents(pathname, pattern)) { if(file::exists({pathname, file})) files.append(file); } return files; } static auto irfiles(const string& pathname, const string& pattern = "*") -> vector { vector files; for(auto& file : ircontents(pathname, pattern)) { if(file::exists({pathname, file})) files.append(file); } return files; } private: //internal functions; these return unsorted lists static auto ufolders(const string& pathname, const string& pattern = "*") -> vector; static auto ufiles(const string& pathname, const string& pattern = "*") -> vector; }; inline auto directory::copy(const string& source, const string& target) -> bool { bool result = true; if(!directory::exists(source)) return result = false; if(!directory::create(target)) return result = false; for(auto& name : directory::folders(source)) { if(!directory::copy({source, name}, {target, name})) result = false; } for(auto& name : directory::files(source)) { if(!file::copy({source, name}, {target, name})) result = false; } return result; } #if defined(PLATFORM_WINDOWS) inline auto directory::create(const string& pathname, u32 permissions) -> bool { string path; auto list = string{pathname}.transform("\\", "/").trimRight("/").split("/"); bool result = true; for(auto& part : list) { path.append(part, "/"); if(directory::exists(path)) continue; result &= (_wmkdir(utf16_t(path)) == 0); } return result; } inline auto directory::remove(const string& pathname) -> bool { if(!pathname || pathname == "/" || pathname.match("?:") || pathname.match("?:/")) return false; //safeguard string separator = pathname.endsWith("/") || pathname.endsWith("\\") ? "" : "/"; auto list = directory::contents(pathname); for(auto& name : list) { if(name.endsWith("/")) directory::remove({pathname, separator, name}); else file::remove({pathname, separator, name}); } return _wrmdir(utf16_t(pathname)) == 0; } inline auto directory::exists(const string& pathname) -> bool { if(!pathname) return false; string name = pathname; name.trim("\"", "\""); DWORD result = GetFileAttributes(utf16_t(name)); if(result == INVALID_FILE_ATTRIBUTES) return false; return (result & FILE_ATTRIBUTE_DIRECTORY); } inline auto directory::ufolders(const string& pathname, const string& pattern) -> vector { if(!pathname) { //special root pseudo-folder (return list of drives) wchar_t drives[PATH_MAX] = {0}; GetLogicalDriveStrings(PATH_MAX, drives); wchar_t* p = drives; while(*p || *(p + 1)) { if(!*p) *p = ';'; p++; } return string{(const char*)utf8_t(drives)}.replace("\\", "/").split(";"); } vector list; string path = pathname; path.transform("/", "\\"); if(!path.endsWith("\\")) path.append("\\"); path.append("*"); HANDLE handle; WIN32_FIND_DATA data; handle = FindFirstFile(utf16_t(path), &data); if(handle != INVALID_HANDLE_VALUE) { if(wcscmp(data.cFileName, L".") && wcscmp(data.cFileName, L"..")) { if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { string name = (const char*)utf8_t(data.cFileName); if(name.match(pattern)) list.append(name); } } while(FindNextFile(handle, &data) != false) { if(wcscmp(data.cFileName, L".") && wcscmp(data.cFileName, L"..")) { if(data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { string name = (const char*)utf8_t(data.cFileName); if(name.match(pattern)) list.append(name); } } } FindClose(handle); } return list; } inline auto directory::ufiles(const string& pathname, const string& pattern) -> vector { if(!pathname) return {}; vector list; string path = pathname; path.transform("/", "\\"); if(!path.endsWith("\\")) path.append("\\"); path.append("*"); HANDLE handle; WIN32_FIND_DATA data; handle = FindFirstFile(utf16_t(path), &data); if(handle != INVALID_HANDLE_VALUE) { if((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { string name = (const char*)utf8_t(data.cFileName); if(name.match(pattern)) list.append(name); } while(FindNextFile(handle, &data) != false) { if((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { string name = (const char*)utf8_t(data.cFileName); if(name.match(pattern)) list.append(name); } } FindClose(handle); } return list; } #else inline auto directoryIsFolder(DIR* dp, struct dirent* ep) -> bool { if(ep->d_type == DT_DIR) return true; if(ep->d_type == DT_LNK || ep->d_type == DT_UNKNOWN) { //symbolic links must be resolved to determine type struct stat sp = {0}; fstatat(dirfd(dp), ep->d_name, &sp, 0); return S_ISDIR(sp.st_mode); } return false; } inline auto directory::create(const string& pathname, u32 permissions) -> bool { string path; auto list = string{pathname}.trimRight("/").split("/"); bool result = true; for(auto& part : list) { path.append(part, "/"); if(directory::exists(path)) continue; result &= (mkdir(path, permissions) == 0); } return result; } inline auto directory::remove(const string& pathname) -> bool { if(!pathname || pathname == "/") return false; //safeguard string separator = pathname.endsWith("/") ? "" : "/"; auto list = directory::contents(pathname); for(auto& name : list) { if(name.endsWith("/")) directory::remove({pathname, separator, name}); else file::remove({pathname, separator, name}); } return rmdir(pathname) == 0; } inline auto directory::exists(const string& pathname) -> bool { if(!pathname) return false; struct stat data; if(stat(pathname, &data) != 0) return false; return S_ISDIR(data.st_mode); } inline auto directory::ufolders(const string& pathname, const string& pattern) -> vector { if(!pathname) return vector{"/"}; vector list; DIR* dp; struct dirent* ep; dp = opendir(pathname); if(dp) { while(ep = readdir(dp)) { if(!strcmp(ep->d_name, ".")) continue; if(!strcmp(ep->d_name, "..")) continue; if(!directoryIsFolder(dp, ep)) continue; string name{ep->d_name}; if(name.match(pattern)) list.append(std::move(name)); } closedir(dp); } return list; } inline auto directory::ufiles(const string& pathname, const string& pattern) -> vector { if(!pathname) return {}; vector list; DIR* dp; struct dirent* ep; dp = opendir(pathname); if(dp) { while(ep = readdir(dp)) { if(!strcmp(ep->d_name, ".")) continue; if(!strcmp(ep->d_name, "..")) continue; if(directoryIsFolder(dp, ep)) continue; string name{ep->d_name}; if(name.match(pattern)) list.append(std::move(name)); } closedir(dp); } return list; } #endif } ares-126/nall/dl.hpp000066400000000000000000000070461415063341600143660ustar00rootroot00000000000000#pragma once //dynamic linking support #include #include #include #include #include #if defined(PLATFORM_WINDOWS) #include #else #include #endif namespace nall { struct library { library() = default; ~library() { close(); } library& operator=(const library&) = delete; library(const library&) = delete; explicit operator bool() const { return open(); } auto open() const -> bool { return handle; } auto open(const string&, const string& = "") -> bool; auto openAbsolute(const string&) -> bool; auto sym(const string&) -> void*; auto close() -> void; private: uintptr handle = 0; }; #if defined(PLATFORM_LINUX) || defined(PLATFORM_BSD) inline auto library::open(const string& name, const string& path) -> bool { if(handle) close(); if(path) handle = (uintptr)dlopen(string(path, "lib", name, ".so"), RTLD_LAZY); if(!handle) handle = (uintptr)dlopen(string(Path::user(), ".local/lib/lib", name, ".so"), RTLD_LAZY); if(!handle) handle = (uintptr)dlopen(string("/usr/local/lib/lib", name, ".so"), RTLD_LAZY); if(!handle) handle = (uintptr)dlopen(string("lib", name, ".so"), RTLD_LAZY); return handle; } inline auto library::openAbsolute(const string& name) -> bool { if(handle) close(); handle = (uintptr)dlopen(name, RTLD_LAZY); return handle; } inline auto library::sym(const string& name) -> void* { if(!handle) return nullptr; return dlsym((void*)handle, name); } inline auto library::close() -> void { if(!handle) return; dlclose((void*)handle); handle = 0; } #elif defined(PLATFORM_MACOS) inline auto library::open(const string& name, const string& path) -> bool { if(handle) close(); if(path) handle = (uintptr)dlopen(string(path, "lib", name, ".dylib"), RTLD_LAZY); if(!handle) handle = (uintptr)dlopen(string(Path::user(), ".local/lib/lib", name, ".dylib"), RTLD_LAZY); if(!handle) handle = (uintptr)dlopen(string("/usr/local/lib/lib", name, ".dylib"), RTLD_LAZY); if(!handle) handle = (uintptr)dlopen(string("lib", name, ".dylib"), RTLD_LAZY); return handle; } inline auto library::openAbsolute(const string& name) -> bool { if(handle) close(); handle = (uintptr)dlopen(name, RTLD_LAZY); return handle; } inline auto library::sym(const string& name) -> void* { if(!handle) return nullptr; return dlsym((void*)handle, name); } inline auto library::close() -> void { if(!handle) return; dlclose((void*)handle); handle = 0; } #elif defined(PLATFORM_WINDOWS) inline auto library::open(const string& name, const string& path) -> bool { if(handle) close(); if(path) { string filepath = {path, name, ".dll"}; handle = (uintptr)LoadLibraryW(utf16_t(filepath)); } if(!handle) { string filepath = {name, ".dll"}; handle = (uintptr)LoadLibraryW(utf16_t(filepath)); } return handle; } inline auto library::openAbsolute(const string& name) -> bool { if(handle) close(); handle = (uintptr)LoadLibraryW(utf16_t(name)); return handle; } inline auto library::sym(const string& name) -> void* { if(!handle) return nullptr; return (void*)GetProcAddress((HMODULE)handle, name); } inline auto library::close() -> void { if(!handle) return; FreeLibrary((HMODULE)handle); handle = 0; } #else inline auto library::open(const string&, const string&) -> bool { return false; } inline auto library::openAbsolute(const string&) -> bool { return false; } inline auto library::sym(const string&) -> void* { return nullptr; } inline auto library::close() -> void {} #endif } ares-126/nall/dsp/000077500000000000000000000000001415063341600140355ustar00rootroot00000000000000ares-126/nall/dsp/iir/000077500000000000000000000000001415063341600146205ustar00rootroot00000000000000ares-126/nall/dsp/iir/biquad.hpp000066400000000000000000000077331415063341600166100ustar00rootroot00000000000000#pragma once //transposed direct form II biquadratic second-order IIR filter namespace nall::DSP::IIR { struct Biquad { enum class Type : u32 { LowPass, HighPass, BandPass, Notch, Peak, LowShelf, HighShelf, }; auto reset(Type type, f64 cutoffFrequency, f64 samplingFrequency, f64 quality, f64 gain = 0.0) -> void; auto process(f64 in) -> f64; //normalized sample (-1.0 to +1.0) static auto shelf(f64 gain, f64 slope) -> f64; static auto butterworth(u32 order, u32 phase) -> f64; private: Type type; f64 cutoffFrequency; f64 samplingFrequency; f64 quality; //frequency response quality f64 gain; //peak gain f64 a0, a1, a2, b1, b2; //coefficients f64 z1, z2; //second-order IIR }; inline auto Biquad::reset(Type type, f64 cutoffFrequency, f64 samplingFrequency, f64 quality, f64 gain) -> void { this->type = type; this->cutoffFrequency = cutoffFrequency; this->samplingFrequency = samplingFrequency; this->quality = quality; this->gain = gain; z1 = 0.0; z2 = 0.0; f64 v = pow(10, fabs(gain) / 20.0); f64 k = tan(Math::Pi * cutoffFrequency / samplingFrequency); f64 q = quality; f64 n = 0.0; switch(type) { case Type::LowPass: n = 1 / (1 + k / q + k * k); a0 = k * k * n; a1 = 2 * a0; a2 = a0; b1 = 2 * (k * k - 1) * n; b2 = (1 - k / q + k * k) * n; break; case Type::HighPass: n = 1 / (1 + k / q + k * k); a0 = 1 * n; a1 = -2 * a0; a2 = a0; b1 = 2 * (k * k - 1) * n; b2 = (1 - k / q + k * k) * n; break; case Type::BandPass: n = 1 / (1 + k / q + k * k); a0 = k / q * n; a1 = 0; a2 = -a0; b1 = 2 * (k * k - 1) * n; b2 = (1 - k / q + k * k) * n; break; case Type::Notch: n = 1 / (1 + k / q + k * k); a0 = (1 + k * k) * n; a1 = 2 * (k * k - 1) * n; a2 = a0; b1 = a1; b2 = (1 - k / q + k * k) * n; break; case Type::Peak: if(gain >= 0) { n = 1 / (1 + 1 / q * k + k * k); a0 = (1 + v / q * k + k * k) * n; a1 = 2 * (k * k - 1) * n; a2 = (1 - v / q * k + k * k) * n; b1 = a1; b2 = (1 - 1 / q * k + k * k) * n; } else { n = 1 / (1 + v / q * k + k * k); a0 = (1 + 1 / q * k + k * k) * n; a1 = 2 * (k * k - 1) * n; a2 = (1 - 1 / q * k + k * k) * n; b1 = a1; b2 = (1 - v / q * k + k * k) * n; } break; case Type::LowShelf: if(gain >= 0) { n = 1 / (1 + k / q + k * k); a0 = (1 + sqrt(v) / q * k + v * k * k) * n; a1 = 2 * (v * k * k - 1) * n; a2 = (1 - sqrt(v) / q * k + v * k * k) * n; b1 = 2 * (k * k - 1) * n; b2 = (1 - k / q + k * k) * n; } else { n = 1 / (1 + sqrt(v) / q * k + v * k * k); a0 = (1 + k / q + k * k) * n; a1 = 2 * (k * k - 1) * n; a2 = (1 - k / q + k * k) * n; b1 = 2 * (v * k * k - 1) * n; b2 = (1 - sqrt(v) / q * k + v * k * k) * n; } break; case Type::HighShelf: if(gain >= 0) { n = 1 / (1 + k / q + k * k); a0 = (v + sqrt(v) / q * k + k * k) * n; a1 = 2 * (k * k - v) * n; a2 = (v - sqrt(v) / q * k + k * k) * n; b1 = 2 * (k * k - 1) * n; b2 = (1 - k / q + k * k) * n; } else { n = 1 / (v + sqrt(v) / q * k + k * k); a0 = (1 + k / q + k * k) * n; a1 = 2 * (k * k - 1) * n; a2 = (1 - k / q + k * k) * n; b1 = 2 * (k * k - v) * n; b2 = (v - sqrt(v) / q * k + k * k) * n; } break; } } inline auto Biquad::process(f64 in) -> f64 { f64 out = in * a0 + z1; z1 = in * a1 + z2 - b1 * out; z2 = in * a2 - b2 * out; return out; } //compute Q values for low-shelf and high-shelf filtering inline auto Biquad::shelf(f64 gain, f64 slope) -> f64 { f64 a = pow(10, gain / 40); return 1 / sqrt((a + 1 / a) * (1 / slope - 1) + 2); } //compute Q values for Nth-order butterworth filtering inline auto Biquad::butterworth(u32 order, u32 phase) -> f64 { return -0.5 / cos(Math::Pi * (phase + order + 0.5) / order); } } ares-126/nall/dsp/iir/dc-removal.hpp000066400000000000000000000005771415063341600173730ustar00rootroot00000000000000#pragma once //DC offset removal IIR filter namespace nall::DSP::IIR { struct DCRemoval { auto reset() -> void; auto process(f64 in) -> f64; //normalized sample (-1.0 to +1.0) private: f64 x; f64 y; }; inline auto DCRemoval::reset() -> void { x = 0.0; y = 0.0; } inline auto DCRemoval::process(f64 in) -> f64 { x = 0.999 * x + in - y; y = in; return x; } } ares-126/nall/dsp/iir/one-pole.hpp000066400000000000000000000017501415063341600170520ustar00rootroot00000000000000#pragma once //one-pole first-order IIR filter namespace nall::DSP::IIR { struct OnePole { enum class Type : u32 { LowPass, HighPass, }; auto reset(Type type, f64 cutoffFrequency, f64 samplingFrequency) -> void; auto process(f64 in) -> f64; //normalized sample (-1.0 to +1.0) private: Type type; f64 cutoffFrequency; f64 samplingFrequency; f64 a0, b1; //coefficients f64 z1; //first-order IIR }; inline auto OnePole::reset(Type type, f64 cutoffFrequency, f64 samplingFrequency) -> void { this->type = type; this->cutoffFrequency = cutoffFrequency; this->samplingFrequency = samplingFrequency; z1 = 0.0; f64 x = cos(2.0 * Math::Pi * cutoffFrequency / samplingFrequency); if(type == Type::LowPass) { b1 = +2.0 - x - sqrt((+2.0 - x) * (+2.0 - x) - 1); a0 = 1.0 - b1; } else { b1 = -2.0 - x + sqrt((-2.0 - x) * (-2.0 - x) - 1); a0 = 1.0 + b1; } } inline auto OnePole::process(f64 in) -> f64 { return z1 = in * a0 + z1 * b1; } } ares-126/nall/dsp/resampler/000077500000000000000000000000001415063341600160275ustar00rootroot00000000000000ares-126/nall/dsp/resampler/cubic.hpp000066400000000000000000000036101415063341600176250ustar00rootroot00000000000000#pragma once #include #include namespace nall::DSP::Resampler { struct Cubic { auto inputFrequency() const -> f64 { return _inputFrequency; } auto outputFrequency() const -> f64 { return _outputFrequency; } auto reset(f64 inputFrequency, f64 outputFrequency = 0, u32 queueSize = 0) -> void; auto setInputFrequency(f64 inputFrequency) -> void; auto pending() const -> bool; auto read() -> f64; auto write(f64 sample) -> void; auto serialize(serializer&) -> void; private: f64 _inputFrequency; f64 _outputFrequency; f64 _ratio; f64 _fraction; f64 _history[4]; queue _samples; }; inline auto Cubic::reset(f64 inputFrequency, f64 outputFrequency, u32 queueSize) -> void { _inputFrequency = inputFrequency; _outputFrequency = outputFrequency ? outputFrequency : _inputFrequency; _ratio = _inputFrequency / _outputFrequency; _fraction = 0.0; for(auto& sample : _history) sample = 0.0; _samples.resize(queueSize ? queueSize : _outputFrequency * 0.02); //default to 20ms max queue size } inline auto Cubic::setInputFrequency(f64 inputFrequency) -> void { _inputFrequency = inputFrequency; _ratio = _inputFrequency / _outputFrequency; } inline auto Cubic::pending() const -> bool { return _samples.pending(); } inline auto Cubic::read() -> double { return _samples.read(); } inline auto Cubic::write(f64 sample) -> void { auto& mu = _fraction; auto& s = _history; s[0] = s[1]; s[1] = s[2]; s[2] = s[3]; s[3] = sample; while(mu <= 1.0) { f64 A = s[3] - s[2] - s[0] + s[1]; f64 B = s[0] - s[1] - A; f64 C = s[2] - s[0]; f64 D = s[1]; _samples.write(A * mu * mu * mu + B * mu * mu + C * mu + D); mu += _ratio; } mu -= 1.0; } inline auto Cubic::serialize(serializer& s) -> void { s(_inputFrequency); s(_outputFrequency); s(_ratio); s(_fraction); s(_history); s(_samples); } } ares-126/nall/elliptic-curve/000077500000000000000000000000001415063341600161765ustar00rootroot00000000000000ares-126/nall/elliptic-curve/curve25519.hpp000066400000000000000000000026271415063341600204500ustar00rootroot00000000000000#pragma once #if defined(EC_REFERENCE) #include #else #include #endif namespace nall::EllipticCurve { struct Curve25519 { auto sharedKey(u256 secretKey, u256 basepoint = 9) const -> u256 { secretKey &= (1_u256 << 254) - 8; secretKey |= (1_u256 << 254); basepoint &= ~0_u256 >> 1; point p = scalarMultiply(basepoint % P, secretKey); field k = p.x * reciprocal(p.z); return k(); } private: using field = Modulo25519; struct point { field x, z; }; const BarrettReduction<256> P = BarrettReduction<256>{EllipticCurve::P}; auto montgomeryDouble(point p) const -> point { field a = square(p.x + p.z); field b = square(p.x - p.z); field c = a - b; field d = a + c * 121665; return {a * b, c * d}; } auto montgomeryAdd(point p, point q, field b) const -> point { return { square(p.x * q.x - p.z * q.z), square(p.x * q.z - p.z * q.x) * b }; } auto scalarMultiply(field b, u256 exponent) const -> point { point p{1, 0}, q{b, 1}; for(u32 bit : reverse(range(255))) { bool condition = exponent >> bit & 1; cswap(condition, p.x, q.x); cswap(condition, p.z, q.z); q = montgomeryAdd(p, q, b); p = montgomeryDouble(p); cswap(condition, p.x, q.x); cswap(condition, p.z, q.z); } return p; } }; } ares-126/nall/elliptic-curve/ed25519.hpp000066400000000000000000000100031415063341600176770ustar00rootroot00000000000000#pragma once #include #if defined(EC_REFERENCE) #include #else #include #endif namespace nall::EllipticCurve { static const u256 L = (1_u256 << 252) + 27742317777372353535851937790883648493_u256; struct Ed25519 { auto publicKey(u256 privateKey) const -> u256 { return compress(scalarMultiply(B, clamp(hash(privateKey)) % L)); } auto sign(array_view message, u256 privateKey) const -> u512 { u512 H = hash(privateKey); u256 a = clamp(H) % L; u256 A = compress(scalarMultiply(B, a)); u512 r = hash(upper(H), message) % L; u256 R = compress(scalarMultiply(B, r)); u512 k = hash(R, A, message) % L; u256 S = (k * a + r) % L; return u512(S) << 256 | R; } auto verify(array_view message, u512 signature, u256 publicKey) const -> bool { auto R = decompress(lower(signature)); auto A = decompress(publicKey); if(!R || !A) return false; u256 S = upper(signature) % L; u512 r = hash(lower(signature), publicKey, message) % L; auto p = scalarMultiply(B, S); auto q = edwardsAdd(R(), scalarMultiply(A(), r)); if(!onCurve(p) || !onCurve(q)) return false; if(p.x * q.z - q.x * p.z) return false; if(p.y * q.z - q.y * p.z) return false; return true; } private: using field = Modulo25519; struct point { field x, y, z, t; }; const field D = -field(121665) * reciprocal(field(121666)); const point B = *decompress((field(4) * reciprocal(field(5)))()); const BarrettReduction<256> L = BarrettReduction<256>{EllipticCurve::L}; auto input(Hash::SHA512&) const -> void {} template auto input(Hash::SHA512& hash, u256 value, P&&... p) const -> void { for(u32 byte : range(32)) hash.input(u8(value >> byte * 8)); input(hash, forward

(p)...); } template auto input(Hash::SHA512& hash, array_view value, P&&... p) const -> void { hash.input(value); input(hash, forward

(p)...); } template auto hash(P&&... p) const -> u512 { Hash::SHA512 hash; input(hash, forward

(p)...); u512 result; for(auto byte : reverse(hash.output())) result = result << 8 | byte; return result; } auto clamp(u256 p) const -> u256 { p &= (1_u256 << 254) - 8; p |= (1_u256 << 254); return p; } auto onCurve(point p) const -> bool { if(!p.z) return false; if(p.x * p.y - p.z * p.t) return false; if(square(p.y) - square(p.x) - square(p.z) - square(p.t) * D) return false; return true; } auto decompress(u256 c) const -> maybe { field y = c & ~0_u256 >> 1; field x = squareRoot((square(y) - 1) * reciprocal(D * square(y) + 1)); if(c >> 255) x = -x; point p{x, y, 1, x * y}; if(!onCurve(p)) return nothing; return p; } auto compress(point p) const -> u256 { field r = reciprocal(p.z); field x = p.x * r; field y = p.y * r; return (x & 1) << 255 | (y & ~0_u256 >> 1); } auto edwardsDouble(point p) const -> point { field a = square(p.x); field b = square(p.y); field c = square(p.z); field d = -a; field e = square(p.x + p.y) - a - b; field g = d + b; field f = g - (c + c); field h = d - b; return {e * f, g * h, f * g, e * h}; } auto edwardsAdd(point p, point q) const -> point { field a = (p.y - p.x) * (q.y - q.x); field b = (p.y + p.x) * (q.y + q.x); field c = (p.t + p.t) * q.t * D; field d = (p.z + p.z) * q.z; field e = b - a; field f = d - c; field g = d + c; field h = b + a; return {e * f, g * h, f * g, e * h}; } auto scalarMultiply(point q, u256 exponent) const -> point { point p{0, 1, 1, 0}, c; for(u32 bit : reverse(range(253))) { p = edwardsDouble(p); c = edwardsAdd(p, q); bool condition = exponent >> bit & 1; cmove(condition, p.x, c.x); cmove(condition, p.y, c.y); cmove(condition, p.z, c.z); cmove(condition, p.t, c.t); } return p; } }; } ares-126/nall/elliptic-curve/modulo25519-optimized.hpp000066400000000000000000000160271415063341600226240ustar00rootroot00000000000000#pragma once #include namespace nall::EllipticCurve { static const u256 P = (1_u256 << 255) - 19; #define Mask ((1ull << 51) - 1) struct Modulo25519 { Modulo25519() = default; Modulo25519(const Modulo25519&) = default; Modulo25519(u64 a, u64 b = 0, u64 c = 0, u64 d = 0, u64 e = 0) : l{a, b, c, d, e} {} Modulo25519(u256 n); explicit operator bool() const { return (bool)operator()(); } auto operator[](u32 index) -> u64& { return l[index]; } auto operator[](u32 index) const -> u64 { return l[index]; } auto operator()() const -> u256; private: u64 l[5]; //51-bits per limb; 255-bits total }; inline Modulo25519::Modulo25519(u256 n) { l[0] = n >> 0 & Mask; l[1] = n >> 51 & Mask; l[2] = n >> 102 & Mask; l[3] = n >> 153 & Mask; l[4] = n >> 204 & Mask; } inline auto Modulo25519::operator()() const -> u256 { Modulo25519 o = *this; o[1] += (o[0] >> 51); o[0] &= Mask; o[2] += (o[1] >> 51); o[1] &= Mask; o[3] += (o[2] >> 51); o[2] &= Mask; o[4] += (o[3] >> 51); o[3] &= Mask; o[0] += 19 * (o[4] >> 51); o[4] &= Mask; o[1] += (o[0] >> 51); o[0] &= Mask; o[2] += (o[1] >> 51); o[1] &= Mask; o[3] += (o[2] >> 51); o[2] &= Mask; o[4] += (o[3] >> 51); o[3] &= Mask; o[0] += 19 * (o[4] >> 51); o[4] &= Mask; o[0] += 19; o[1] += (o[0] >> 51); o[0] &= Mask; o[2] += (o[1] >> 51); o[1] &= Mask; o[3] += (o[2] >> 51); o[2] &= Mask; o[4] += (o[3] >> 51); o[3] &= Mask; o[0] += 19 * (o[4] >> 51); o[4] &= Mask; o[0] += Mask - 18; o[1] += Mask; o[2] += Mask; o[3] += Mask; o[4] += Mask; o[1] += o[0] >> 51; o[0] &= Mask; o[2] += o[1] >> 51; o[1] &= Mask; o[3] += o[2] >> 51; o[2] &= Mask; o[4] += o[3] >> 51; o[3] &= Mask; o[4] &= Mask; return (u256)o[0] << 0 | (u256)o[1] << 51 | (u256)o[2] << 102 | (u256)o[3] << 153 | (u256)o[4] << 204; } inline auto cmove(bool move, Modulo25519& l, const Modulo25519& r) -> void { u64 mask = -move; l[0] ^= mask & (l[0] ^ r[0]); l[1] ^= mask & (l[1] ^ r[1]); l[2] ^= mask & (l[2] ^ r[2]); l[3] ^= mask & (l[3] ^ r[3]); l[4] ^= mask & (l[4] ^ r[4]); } inline auto cswap(bool swap, Modulo25519& l, Modulo25519& r) -> void { u64 mask = -swap, x; x = mask & (l[0] ^ r[0]); l[0] ^= x; r[0] ^= x; x = mask & (l[1] ^ r[1]); l[1] ^= x; r[1] ^= x; x = mask & (l[2] ^ r[2]); l[2] ^= x; r[2] ^= x; x = mask & (l[3] ^ r[3]); l[3] ^= x; r[3] ^= x; x = mask & (l[4] ^ r[4]); l[4] ^= x; r[4] ^= x; } inline auto operator-(const Modulo25519& l) -> Modulo25519 { //P - l Modulo25519 o; u64 c; o[0] = 0xfffffffffffda - l[0]; c = o[0] >> 51; o[0] &= Mask; o[1] = 0xffffffffffffe - l[1] + c; c = o[1] >> 51; o[1] &= Mask; o[2] = 0xffffffffffffe - l[2] + c; c = o[2] >> 51; o[2] &= Mask; o[3] = 0xffffffffffffe - l[3] + c; c = o[3] >> 51; o[3] &= Mask; o[4] = 0xffffffffffffe - l[4] + c; c = o[4] >> 51; o[4] &= Mask; o[0] += c * 19; return o; } inline auto operator+(const Modulo25519& l, const Modulo25519& r) -> Modulo25519 { Modulo25519 o; u64 c; o[0] = l[0] + r[0]; c = o[0] >> 51; o[0] &= Mask; o[1] = l[1] + r[1] + c; c = o[1] >> 51; o[1] &= Mask; o[2] = l[2] + r[2] + c; c = o[2] >> 51; o[2] &= Mask; o[3] = l[3] + r[3] + c; c = o[3] >> 51; o[3] &= Mask; o[4] = l[4] + r[4] + c; c = o[4] >> 51; o[4] &= Mask; o[0] += c * 19; return o; } inline auto operator-(const Modulo25519& l, const Modulo25519& r) -> Modulo25519 { Modulo25519 o; u64 c; o[0] = l[0] + 0x1fffffffffffb4 - r[0]; c = o[0] >> 51; o[0] &= Mask; o[1] = l[1] + 0x1ffffffffffffc - r[1] + c; c = o[1] >> 51; o[1] &= Mask; o[2] = l[2] + 0x1ffffffffffffc - r[2] + c; c = o[2] >> 51; o[2] &= Mask; o[3] = l[3] + 0x1ffffffffffffc - r[3] + c; c = o[3] >> 51; o[3] &= Mask; o[4] = l[4] + 0x1ffffffffffffc - r[4] + c; c = o[4] >> 51; o[4] &= Mask; o[0] += c * 19; return o; } inline auto operator*(const Modulo25519& l, u64 scalar) -> Modulo25519 { Modulo25519 o; u128 a; a = (u128)l[0] * scalar; o[0] = a & Mask; a = (u128)l[1] * scalar + (a >> 51 & Mask); o[1] = a & Mask; a = (u128)l[2] * scalar + (a >> 51 & Mask); o[2] = a & Mask; a = (u128)l[3] * scalar + (a >> 51 & Mask); o[3] = a & Mask; a = (u128)l[4] * scalar + (a >> 51 & Mask); o[4] = a & Mask; o[0] += (a >> 51) * 19; return o; } inline auto operator*(const Modulo25519& l, Modulo25519 r) -> Modulo25519 { u128 t[] = { (u128)r[0] * l[0], (u128)r[0] * l[1] + (u128)r[1] * l[0], (u128)r[0] * l[2] + (u128)r[1] * l[1] + (u128)r[2] * l[0], (u128)r[0] * l[3] + (u128)r[1] * l[2] + (u128)r[2] * l[1] + (u128)r[3] * l[0], (u128)r[0] * l[4] + (u128)r[1] * l[3] + (u128)r[2] * l[2] + (u128)r[3] * l[1] + (u128)r[4] * l[0] }; r[1] *= 19, r[2] *= 19, r[3] *= 19, r[4] *= 19; t[0] += (u128)r[4] * l[1] + (u128)r[3] * l[2] + (u128)r[2] * l[3] + (u128)r[1] * l[4]; t[1] += (u128)r[4] * l[2] + (u128)r[3] * l[3] + (u128)r[2] * l[4]; t[2] += (u128)r[4] * l[3] + (u128)r[3] * l[4]; t[3] += (u128)r[4] * l[4]; u64 c; r[0] = t[0] & Mask; c = (u64)(t[0] >> 51); t[1] += c; r[1] = t[1] & Mask; c = (u64)(t[1] >> 51); t[2] += c; r[2] = t[2] & Mask; c = (u64)(t[2] >> 51); t[3] += c; r[3] = t[3] & Mask; c = (u64)(t[3] >> 51); t[4] += c; r[4] = t[4] & Mask; c = (u64)(t[4] >> 51); r[0] += c * 19; c = r[0] >> 51; r[0] &= Mask; r[1] += c; c = r[1] >> 51; r[1] &= Mask; r[2] += c; return r; } inline auto operator&(const Modulo25519& lhs, u256 rhs) -> u256 { return lhs() & rhs; } inline auto square(const Modulo25519& lhs) -> Modulo25519 { Modulo25519 r{lhs}; Modulo25519 d{r[0] * 2, r[1] * 2, r[2] * 2 * 19, r[4] * 19, r[4] * 19 * 2}; u128 t[5]; t[0] = (u128)r[0] * r[0] + (u128)d[4] * r[1] + (u128)d[2] * r[3]; t[1] = (u128)d[0] * r[1] + (u128)d[4] * r[2] + (u128)r[3] * r[3] * 19; t[2] = (u128)d[0] * r[2] + (u128)r[1] * r[1] + (u128)d[4] * r[3]; t[3] = (u128)d[0] * r[3] + (u128)d[1] * r[2] + (u128)r[4] * d[3]; t[4] = (u128)d[0] * r[4] + (u128)d[1] * r[3] + (u128)r[2] * r[2]; u64 c; r[0] = t[0] & Mask; c = (u64)(t[0] >> 51); t[1] += c; r[1] = t[1] & Mask; c = (u64)(t[1] >> 51); t[2] += c; r[2] = t[2] & Mask; c = (u64)(t[2] >> 51); t[3] += c; r[3] = t[3] & Mask; c = (u64)(t[3] >> 51); t[4] += c; r[4] = t[4] & Mask; c = (u64)(t[4] >> 51); r[0] += c * 19; c = r[0] >> 51; r[0] &= Mask; r[1] += c; c = r[1] >> 51; r[1] &= Mask; r[2] += c; return r; } inline auto exponentiate(const Modulo25519& lhs, u256 exponent) -> Modulo25519 { Modulo25519 x = 1, y; for(u32 bit : reverse(range(256))) { x = square(x); y = x * lhs; cmove(exponent >> bit & 1, x, y); } return x; } inline auto reciprocal(const Modulo25519& lhs) -> Modulo25519 { return exponentiate(lhs, P - 2); } inline auto squareRoot(const Modulo25519& lhs) -> Modulo25519 { static const Modulo25519 I = exponentiate(Modulo25519(2), P - 1 >> 2); //I == sqrt(-1) Modulo25519 x = exponentiate(lhs, P + 3 >> 3); Modulo25519 y = x * I; cmove(bool(square(x) - lhs), x, y); y = -x; cmove(x & 1, x, y); return x; } #undef Mask } ares-126/nall/elliptic-curve/modulo25519-reference.hpp000066400000000000000000000044771415063341600225640ustar00rootroot00000000000000#pragma once //warning: this implementation leaks side-channel information //use modulo25519-optimized.hpp in production #include namespace nall::EllipticCurve { static const u256 P = (1_u256 << 255) - 19; struct Modulo25519 { Modulo25519() = default; Modulo25519(const Modulo25519& source) : value(source.value) {} template Modulo25519(const T& value) : value(value) {} explicit operator bool() const { return (bool)value; } auto operator()() const -> u256 { return value; } private: u256 value; }; inline auto operator-(const Modulo25519& lhs) -> Modulo25519 { return P - lhs(); } inline auto operator+(const Modulo25519& lhs, const Modulo25519& rhs) -> Modulo25519 { u512 value = (u512)lhs() + rhs(); if(value >= P) value -= P; return value; } inline auto operator-(const Modulo25519& lhs, const Modulo25519& rhs) -> Modulo25519 { u512 value = (u512)lhs(); if(value < rhs()) value += P; return u256(value - rhs()); } inline auto operator*(const Modulo25519& lhs, const Modulo25519& rhs) -> Modulo25519 { static const BarrettReduction<256> P{EllipticCurve::P}; u256 hi, lo; mul(lhs(), rhs(), hi, lo); return u512{hi, lo} % P; } inline auto operator&(const Modulo25519& lhs, u256 rhs) -> u256 { return lhs() & rhs; } inline auto square(const Modulo25519& lhs) -> Modulo25519 { static const BarrettReduction<256> P{EllipticCurve::P}; u256 hi, lo; square(lhs(), hi, lo); return u512{hi, lo} % P; } inline auto exponentiate(const Modulo25519& lhs, u256 exponent) -> Modulo25519 { if(exponent == 0) return 1; Modulo25519 value = square(exponentiate(lhs, exponent >> 1)); if(exponent & 1) value = value * lhs; return value; } inline auto reciprocal(const Modulo25519& lhs) -> Modulo25519 { return exponentiate(lhs, P - 2); } inline auto squareRoot(const Modulo25519& lhs) -> Modulo25519 { static const Modulo25519 I = exponentiate(Modulo25519(2), P - 1 >> 2); //I = sqrt(-1) Modulo25519 value = exponentiate(lhs, P + 3 >> 3); if(square(value) - lhs) value = value * I; if(value & 1) value = -value; return value; } inline auto cmove(bool condition, Modulo25519& lhs, const Modulo25519& rhs) -> void { if(condition) lhs = rhs; } inline auto cswap(bool condition, Modulo25519& lhs, Modulo25519& rhs) -> void { if(condition) swap(lhs, rhs); } } ares-126/nall/emulation/000077500000000000000000000000001415063341600152445ustar00rootroot00000000000000ares-126/nall/emulation/21fx.hpp000066400000000000000000000053741415063341600165460ustar00rootroot00000000000000#pragma once #include #include using namespace nall; struct FX { auto open(Arguments& arguments) -> bool; auto close() -> void; auto readable() -> bool; auto read() -> u8; auto writable() -> bool; auto write(u8 data) -> void; auto read(u32 offset, u32 length) -> vector; auto write(u32 offset, const void* buffer, u32 length) -> void; auto write(u32 offset, const vector& buffer) -> void { write(offset, buffer.data(), buffer.size()); } auto execute(u32 offset) -> void; auto read(u32 offset) -> u8; auto write(u32 offset, u8 data) -> void; serial device; }; inline auto FX::open(Arguments& arguments) -> bool { //device name override support string name; arguments.take("--device", name); if(!device.open(name)) { print("[21fx] error: unable to open hardware device\n"); return false; } //flush the device (to clear floating inputs) while(true) { while(readable()) read(); auto iplrom = read(0x2184, 122); auto sha256 = Hash::SHA256(iplrom).digest(); if(sha256 == "41b79712a4a2d16d39894ae1b38cde5c41dad22eadc560df631d39f13df1e4b9") break; } return true; } inline auto FX::close() -> void { device.close(); } inline auto FX::readable() -> bool { return device.readable(); } //1000ns delay avoids burning CPU core at 100%; does not slow down max transfer rate at all inline auto FX::read() -> u8 { while(!readable()) usleep(1000); u8 buffer[1] = {0}; device.read(buffer, 1); return buffer[0]; } inline auto FX::writable() -> bool { return device.writable(); } inline auto FX::write(u8 data) -> void { while(!writable()) usleep(1000); u8 buffer[1] = {data}; device.write(buffer, 1); } // inline auto FX::read(u32 offset, u32 length) -> vector { write(0x21); write(0x66); write(0x78); write(offset >> 16); write(offset >> 8); write(offset >> 0); write(0x01); write(length >> 8); write(length >> 0); write(0x00); vector buffer; while(length--) buffer.append(read()); return buffer; } inline auto FX::write(u32 offset, const void* data, u32 length) -> void { write(0x21); write(0x66); write(0x78); write(offset >> 16); write(offset >> 8); write(offset >> 0); write(0x01); write(length >> 8); write(length >> 0); write(0x01); auto buffer = (u8*)data; for(auto n : range(length)) write(buffer[n]); write(0x00); } inline auto FX::execute(u32 offset) -> void { write(0x21); write(0x66); write(0x78); write(offset >> 16); write(offset >> 8); write(offset >> 0); write(0x00); } // inline auto FX::read(u32 offset) -> u8 { auto buffer = read(offset, 1); return buffer[0]; } inline auto FX::write(u32 offset, u8 data) -> void { vector buffer = {data}; write(offset, buffer); } ares-126/nall/encode/000077500000000000000000000000001415063341600145045ustar00rootroot00000000000000ares-126/nall/encode/base.hpp000066400000000000000000000023151415063341600161300ustar00rootroot00000000000000#pragma once //required bytes: ceil(bits / log2(base)) //base57 => 128=22, 256=44, 512=88 //base62 => 128=22, 256=43, 512=86 //base64 => 128=22, 256=43, 512=86 #include namespace nall::Encode { template inline auto Base(T value) -> string { static const string format = Bits == 2 ? "01" : Bits == 8 ? "01234567" : Bits == 10 ? "0123456789" : Bits == 16 ? "0123456789abcdef" : Bits == 32 ? "0123456789abcdefghijklmnopqrstuv" : Bits == 34 ? "023456789abcdefghijkmnopqrstuvwxyz" //1l : Bits == 36 ? "0123456789abcdefghijklmnopqrstuvwxyz" : Bits == 57 ? "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" //01IOl : Bits == 62 ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" : Bits == 64 ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz{}" : Bits == 85 ? "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%()+,-.:;=@[]^_`{|}~" //\ "&'*/<>? : ""; static const u32 size = ceil(sizeof(T) * 8 / log2(Bits)); string result; result.resize(size); char* data = result.get() + size; for(auto byte : result) { *--data = format[value % Bits]; value /= Bits; } return result; } } ares-126/nall/encode/base64.hpp000066400000000000000000000032031415063341600162770ustar00rootroot00000000000000#pragma once namespace nall::Encode { inline auto Base64(const void* vdata, u32 size, const string& format = "MIME") -> string { static bool initialized = false; static char lookup[65] = {}; if(!initialized) { initialized = true; for(u32 n : range(26)) lookup[n + 0] = 'A' + n; for(u32 n : range(26)) lookup[n + 26] = 'a' + n; for(u32 n : range(10)) lookup[n + 52] = '0' + n; } if(format == "MIME") { lookup[62] = '+'; lookup[63] = '/'; lookup[64] = '='; } else if(format == "URI") { lookup[62] = '-'; lookup[63] = '_'; lookup[64] = 0; } else return ""; auto data = (const u8*)vdata; u32 overflow = (3 - (size % 3)) % 3; //bytes to round to nearest multiple of 3 string result; u8 buffer = 0; for(u32 n : range(size)) { switch(n % 3) { case 0: buffer = data[n] >> 2; result.append(lookup[buffer]); buffer = (data[n] & 3) << 4; break; case 1: buffer |= data[n] >> 4; result.append(lookup[buffer]); buffer = (data[n] & 15) << 2; break; case 2: buffer |= data[n] >> 6; result.append(lookup[buffer]); buffer = (data[n] & 63); result.append(lookup[buffer]); break; } } if(overflow) result.append(lookup[buffer]); if(lookup[64]) { while(result.size() % 4) result.append(lookup[64]); } return result; } inline auto Base64(const vector& buffer, const string& format = "MIME") -> string { return Base64(buffer.data(), buffer.size(), format); } inline auto Base64(const string& text, const string& format = "MIME") -> string { return Base64(text.data(), text.size(), format); } } ares-126/nall/encode/bmp.hpp000066400000000000000000000030641415063341600157760ustar00rootroot00000000000000#pragma once namespace nall::Encode { struct BMP { static auto create(const string& filename, const void* data, u32 pitch, u32 width, u32 height, bool alpha) -> bool { auto fp = file::open(filename, file::mode::write); if(!fp) return false; u32 bitsPerPixel = alpha ? 32 : 24; u32 bytesPerPixel = bitsPerPixel / 8; u32 alignedWidth = width * bytesPerPixel; u32 paddingLength = 0; u32 imageSize = alignedWidth * height; u32 fileSize = 0x36 + imageSize; while(alignedWidth % 4) alignedWidth++, paddingLength++; fp.writel(0x4d42, 2); //signature fp.writel(fileSize, 4); //file size fp.writel(0, 2); //reserved fp.writel(0, 2); //reserved fp.writel(0x36, 4); //offset fp.writel(40, 4); //DIB size fp.writel(width, 4); //width fp.writel(-height, 4); //height fp.writel(1, 2); //color planes fp.writel(bitsPerPixel, 2); //bits per pixel fp.writel(0, 4); //compression method (BI_RGB) fp.writel(imageSize, 4); //image data size fp.writel(3780, 4); //horizontal resolution fp.writel(3780, 4); //vertical resolution fp.writel(0, 4); //palette size fp.writel(0, 4); //important color count pitch >>= 2; for(auto y : range(height)) { auto p = (const u32*)data + y * pitch; for(auto x : range(width)) fp.writel(*p++, bytesPerPixel); if(paddingLength) fp.writel(0, paddingLength); } return true; } }; } ares-126/nall/encode/bwt.hpp000066400000000000000000000052621415063341600160160ustar00rootroot00000000000000#pragma once //burrows-wheeler transform #include namespace nall::Encode { /* A standard suffix array cannot produce a proper burrows-wheeler transform, due to rotations. Take the input string, "nall", this gives us: nall alln llna lnal If we suffix sort this, we produce: all => alln l => lnal ll => llna nall => nall If we sort this, we produce: alln llna lnal nall Thus, suffix sorting gives us "nlal" as the last column instead of "nall". This is because BWT rotates the input string, whereas suffix arrays sort the input string. Adding a 256th character terminator before sorting will not produce the desired result, either. A more complicated string such as "mississippi" will sort as "ssmppissiii" with terminator=256, and as "ipssmpissii" with terminator=0, alphabet=1..256, whereas we want "pssmipissii". Performing a merge sort to use a specialized comparison function that wraps suffixes is too slow at O(n log n). Producing a custom induced sort to handle rotations would be incredibly complicated, owing to the recursive nature of induced sorting, among other things. So instead, a temporary array is produced that contains the input suffix twice. This is then fed into the suffix array sort, and the doubled matches are filtered out. After this point, suffixes are sorted in their mirrored form, and the correct result can be derived The result of this is an O(2n) algorithm, which vastly outperforms a naive O(n log n) algorithm, but is still far from ideal. However, this will have to do until a better solution is devised. Although to be fair, BWT is inferior to the bijective BWT anyway, so it may not be worth the effort. */ inline auto BWT(array_view input) -> vector { auto size = input.size(); vector output; output.reserve(8 + 8 + size); for(u32 byte : range(8)) output.append(size >> byte * 8); for(u32 byte : range(8)) output.append(0x00); vector buffer; buffer.reserve(2 * size); for(u32 offset : range(size)) buffer.append(input[offset]); for(u32 offset : range(size)) buffer.append(input[offset]); auto suffixes = SuffixArray(buffer); vector prefixes; prefixes.reserve(size); for(u32 offset : range(2 * size + 1)) { u32 suffix = suffixes[offset]; if(suffix >= size) continue; //beyond the bounds of the original input string prefixes.append(suffix); } u64 root = 0; for(u32 offset : range(size)) { u32 suffix = prefixes[offset]; if(suffix == 0) root = offset, suffix = size; output.append(input[--suffix]); } for(u32 byte : range(8)) output[8 + byte] = root >> byte * 8; return output; } } ares-126/nall/encode/html.hpp000066400000000000000000000007201415063341600161600ustar00rootroot00000000000000#pragma once namespace nall::Encode { inline auto HTML(const string& input) -> string { string output; for(char c : input) { if(c == '&' ) { output.append("&" ); continue; } if(c == '<' ) { output.append("<" ); continue; } if(c == '>' ) { output.append(">" ); continue; } if(c == '"' ) { output.append("""); continue; } if(c == '\'') { output.append("'"); continue; } output.append(c); } return output; } } ares-126/nall/encode/huffman.hpp000066400000000000000000000044631415063341600166500ustar00rootroot00000000000000#pragma once namespace nall::Encode { inline auto Huffman(array_view input) -> vector { vector output; for(u32 byte : range(8)) output.append(input.size() >> byte * 8); struct Node { u32 frequency = 0; u32 parent = 0; u32 lhs = 0; u32 rhs = 0; }; array nodes; for(u32 offset : range(input.size())) nodes[input[offset]].frequency++; u32 count = 0; for(u32 offset : range(511)) { if(nodes[offset].frequency) count++; else nodes[offset].parent = 511; } auto minimum = [&] { u32 frequency = ~0, minimum = 511; for(u32 index : range(511)) { if(!nodes[index].parent && nodes[index].frequency && nodes[index].frequency < frequency) { frequency = nodes[index].frequency; minimum = index; } } return minimum; }; //group the least two frequently used nodes until only one node remains u32 index = 256; for(u32 remaining = max(2, count); remaining >= 2; remaining--) { u32 lhs = minimum(); nodes[lhs].parent = index; u32 rhs = minimum(); nodes[rhs].parent = index; if(remaining == 2) index = nodes[lhs].parent = nodes[rhs].parent = 511; nodes[index].lhs = lhs; nodes[index].rhs = rhs; nodes[index].parent = 0; nodes[index].frequency = nodes[lhs].frequency + nodes[rhs].frequency; index++; } u32 byte = 0, bits = 0; auto write = [&](bool bit) { byte = byte << 1 | bit; if(++bits == 8) output.append(byte), bits = 0; }; //only the upper half of the table is needed for decompression //the first 256 nodes are always treated as leaf nodes for(u32 offset : range(256)) { for(u32 index : reverse(range(9))) write(nodes[256 + offset].lhs >> index & 1); for(u32 index : reverse(range(9))) write(nodes[256 + offset].rhs >> index & 1); } for(u32 byte : input) { u32 node = byte, length = 0; u256 sequence = 0; //traversing the array produces the bitstream in reverse order do { u32 parent = nodes[node].parent; bool bit = nodes[nodes[node].parent].rhs == node; sequence = sequence << 1 | bit; length++; node = parent; } while(node != 511); //output the generated bits in the correct order for(u32 index : range(length)) { write(sequence >> index & 1); } } while(bits) write(0); return output; } } ares-126/nall/encode/lzsa.hpp000066400000000000000000000045051415063341600161720ustar00rootroot00000000000000#pragma once #include #include #include #include #include namespace nall::Encode { inline auto LZSA(array_view input) -> vector { vector output; for(u32 byte : range(8)) output.append(input.size() >> byte * 8); auto suffixArray = SuffixArray(input).lpf(); u32 index = 0; vector flags; vector literals; vector stringLengths; vector stringOffsets; u32 byte = 0, bits = 0; auto flagWrite = [&](bool bit) { byte = byte << 1 | bit; if(++bits == 8) flags.append(byte), bits = 0; }; auto literalWrite = [&](u8 literal) { literals.append(literal); }; auto lengthWrite = [&](u64 length) { if(length < 1 << 7) length = length << 1 | 0b1; else if(length < 1 << 14) length = length << 2 | 0b10; else if(length < 1 << 21) length = length << 3 | 0b100; else if(length < 1 << 28) length = length << 4 | 0b1000; else /*length < 1 << 35*/length = length << 5 | 0b10000; while(length) stringLengths.append(length), length >>= 8; }; auto offsetWrite = [&](u32 offset) { stringOffsets.append(offset >> 0); if(index < 1 << 8) return; stringOffsets.append(offset >> 8); if(index < 1 << 16) return; stringOffsets.append(offset >> 16); if(index < 1 << 24) return; stringOffsets.append(offset >> 24); }; while(index < input.size()) { s32 length, offset; suffixArray.previous(length, offset, index); /* for(u32 ahead = 1; ahead <= 2; ahead++) { s32 aheadLength, aheadOffset; suffixArray.previous(aheadLength, aheadOffset, index + ahead); if(aheadLength > length && aheadOffset >= 0) { length = 0; break; } } */ if(length < 6 || offset < 0) { flagWrite(0); literalWrite(input[index++]); } else { flagWrite(1); lengthWrite(length - 6); offsetWrite(index - offset); index += length; } } while(bits) flagWrite(0); auto save = [&](const vector& buffer) { for(u32 byte : range(8)) output.append(buffer.size() >> byte * 8); output.append(buffer); }; save(Encode::Huffman(flags)); save(Encode::Huffman(literals)); save(Encode::Huffman(stringLengths)); save(Encode::Huffman(stringOffsets)); return output; } } ares-126/nall/encode/mtf.hpp000066400000000000000000000010471415063341600160050ustar00rootroot00000000000000#pragma once //move to front namespace nall::Encode { inline auto MTF(array_view input) -> vector { vector output; output.resize(input.size()); u8 order[256]; for(u32 n : range(256)) order[n] = n; for(u32 offset : range(input.size())) { u32 data = input[offset]; for(u32 index : range(256)) { u32 value = order[index]; if(value == data) { output[offset] = index; memory::move(&order[1], &order[0], index); order[0] = value; break; } } } return output; } } ares-126/nall/encode/png.hpp000066400000000000000000000112471415063341600160060ustar00rootroot00000000000000#pragma once #include #include #include namespace nall::Encode { //this encodes an array of pixels into an uncompressed PNG image file. //if optipng or pngcrush are installed, the resulting PNG file will be quickly compressed. //if nall gains a deflate implementation one day, then this can be improved to offer integrated compression. struct PNG { static auto RGB8 (const string& filename, const void* data, u32 pitch, u32 width, u32 height) -> bool; static auto RGBA8(const string& filename, const void* data, u32 pitch, u32 width, u32 height) -> bool; private: auto compress(const string& filename) -> bool; auto open(const string& filename) -> bool; auto close() -> void; auto header() -> void; auto footer() -> void; auto information(u32 width, u32 height, u32 depth, u32 type) -> void; auto dataHeader(u32 width, u32 height, u32 bitsPerPixel) -> void; auto dataLine(bool lastLine) -> void; auto dataFooter() -> void; auto write(u8 data) -> void; auto adler(u8 data) -> void; file_buffer fp; Hash::CRC32 crc32; u16 adler1 = 1; u16 adler2 = 0; u16 bytesPerLine = 0; }; inline auto PNG::RGB8(const string& filename, const void* data, u32 pitch, u32 width, u32 height) -> bool { PNG png; if(!png.open(filename)) return false; png.header(); png.information(width, height, 8, 2); png.dataHeader(width, height, 24); for(u32 y : range(height)) { const auto input = (const u32*)data + y * (pitch >> 2); png.dataLine(y == height - 1); for(u32 x : range(width)) { auto pixel = input[x]; //RGB png.adler(pixel >> 16); //R png.adler(pixel >> 8); //G png.adler(pixel >> 0); //B } } png.dataFooter(); png.footer(); png.close(); png.compress(filename); return true; } inline auto PNG::RGBA8(const string& filename, const void* data, u32 pitch, u32 width, u32 height) -> bool { PNG png; if(!png.open(filename)) return false; png.header(); png.information(width, height, 8, 6); png.dataHeader(width, height, 32); for(u32 y : range(height)) { const auto input = (const u32*)data + y * (pitch >> 2); png.dataLine(y == height - 1); for(u32 x : range(width)) { auto pixel = input[x]; //ARGB png.adler(pixel >> 16); //R png.adler(pixel >> 8); //G png.adler(pixel >> 0); //B png.adler(pixel >> 24); //A } } png.dataFooter(); png.footer(); png.close(); png.compress(filename); return true; } inline auto PNG::compress(const string& filename) -> bool { auto size = file::size(filename); execute("optipng", "-o1", filename); if(file::size(filename) < size) return true; execute("pngcrush", "-ow", "-l", "1", filename); if(file::size(filename) < size) return true; return false; } inline auto PNG::open(const string& filename) -> bool { fp = file::open(filename, file::mode::write); return (bool)fp; } inline auto PNG::close() -> void { fp.close(); } inline auto PNG::header() -> void { fp.write(0x89); fp.write('P'); fp.write('N'); fp.write('G'); fp.write(0x0d); fp.write(0x0a); fp.write(0x1a); fp.write(0x0a); } inline auto PNG::footer() -> void { fp.writem(0, 4L); crc32.reset(); write('I'); write('E'); write('N'); write('D'); fp.writem(crc32.value(), 4L); } inline auto PNG::information(u32 width, u32 height, u32 depth, u32 type) -> void { fp.writem(13, 4L); crc32.reset(); write('I'); write('H'); write('D'); write('R'); write(width >> 24); write(width >> 16); write(width >> 8); write(width >> 0); write(height >> 24); write(height >> 16); write(height >> 8); write(height >> 0); write(depth); write(type); write(0x00); //no compression write(0x00); //no filter write(0x00); //no interlace fp.writem(crc32.value(), 4L); } inline auto PNG::dataHeader(u32 width, u32 height, u32 bitsPerPixel) -> void { bytesPerLine = 1 + width * (bitsPerPixel / 8); u32 idatSize = 2 + height * (5 + bytesPerLine) + 4; fp.writem(idatSize, 4L); crc32.reset(); write('I'); write('D'); write('A'); write('T'); write(0x78); write(0xda); } inline auto PNG::dataLine(bool lastLine) -> void { write(lastLine); write( bytesPerLine >> 0); write( bytesPerLine >> 8); write(~bytesPerLine >> 0); write(~bytesPerLine >> 8); adler(0x00); //no filter } inline auto PNG::dataFooter() -> void { write(adler2 >> 8); write(adler2 >> 0); write(adler1 >> 8); write(adler1 >> 0); fp.writem(crc32.value(), 4L); } inline auto PNG::write(u8 data) -> void { fp.write(data); crc32.input(data); } inline auto PNG::adler(u8 data) -> void { write(data); adler1 = (adler1 + data ) % 65521; adler2 = (adler2 + adler1) % 65521; } } ares-126/nall/encode/rle.hpp000066400000000000000000000022761415063341600160060ustar00rootroot00000000000000#pragma once namespace nall::Encode { template //S = word size; M = match length inline auto RLE(array_view input) -> vector { vector output; for(u32 byte : range(8)) output.append(input.size() >> byte * 8); u32 base = 0; u32 skip = 0; auto load = [&](u32 offset) -> u8 { return input(offset); }; auto read = [&](u32 offset) -> u64 { u64 value = 0; for(u32 byte : range(S)) value |= load(offset + byte) << byte * 8; return value; }; auto write = [&](u64 value) -> void { for(u32 byte : range(S)) output.append(value >> byte * 8); }; auto flush = [&] { output.append(skip - 1); do { write(read(base)); base += S; } while(--skip); }; while(base + S * skip < input.size()) { u32 same = 1; for(u32 offset = base + S * (skip + 1); offset < input.size(); offset += S) { if(read(offset) != read(base + S * skip)) break; if(++same == 127 + M) break; } if(same < M) { if(++skip == 128) flush(); } else { if(skip) flush(); output.append(128 | same - M); write(read(base)); base += S * same; } } if(skip) flush(); return output; } } ares-126/nall/encode/url.hpp000066400000000000000000000014001415063341600160120ustar00rootroot00000000000000#pragma once namespace nall::Encode { inline auto URL(string_view input) -> string { string output; for(auto c : input) { //unreserved characters if(c >= 'A' && c <= 'Z') { output.append(c); continue; } if(c >= 'a' && c <= 'z') { output.append(c); continue; } if(c >= '0' && c <= '9') { output.append(c); continue; } if(c == '-' || c == '_' || c == '.' || c == '~') { output.append(c); continue; } //special characters if(c == ' ') { output.append('+'); continue; } //reserved characters u32 hi = (c >> 4) & 15; u32 lo = (c >> 0) & 15; output.append('%'); output.append((char)(hi < 10 ? ('0' + hi) : ('a' + hi - 10))); output.append((char)(lo < 10 ? ('0' + lo) : ('a' + lo - 10))); } return output; } } ares-126/nall/encode/wav.hpp000066400000000000000000000021611415063341600160120ustar00rootroot00000000000000#pragma once namespace nall::Encode { struct WAV { static auto stereo_16bit(const string& filename, array_view left, array_view right, u32 frequency) -> bool { if(left.size() != right.size()) return false; static u32 channels = 2; static u32 bits = 16; static u32 samples = left.size(); file_buffer fp; if(!fp.open(filename, file::mode::write)) return false; fp.write('R'); fp.write('I'); fp.write('F'); fp.write('F'); fp.writel(4 + (8 + 16) + (8 + samples * 4), 4); fp.write('W'); fp.write('A'); fp.write('V'); fp.write('E'); fp.write('f'); fp.write('m'); fp.write('t'); fp.write(' '); fp.writel(16, 4); fp.writel(1, 2); fp.writel(channels, 2); fp.writel(frequency, 4); fp.writel(frequency * channels * bits, 4); fp.writel(channels * bits, 2); fp.writel(bits, 2); fp.write('d'); fp.write('a'); fp.write('t'); fp.write('a'); fp.writel(samples * 4, 4); for(u32 sample : range(samples)) { fp.writel(left[sample], 2); fp.writel(right[sample], 2); } return true; } }; } ares-126/nall/encode/zip.hpp000066400000000000000000000074311415063341600160240ustar00rootroot00000000000000#pragma once //creates uncompressed ZIP archives #include #include namespace nall::Encode { struct ZIP { ZIP(const string& filename) { fp.open(filename, file::mode::write); timestamp = time(nullptr); } //append path: append("path/"); //append file: append("path/file", data, size); auto append(string filename, const u8* data = nullptr, u32 size = 0u, time_t timestamp = 0) -> void { filename.transform("\\", "/"); if(!timestamp) timestamp = this->timestamp; u32 checksum = Hash::CRC32({data, size}).digest().hex(); directory.append({filename, timestamp, checksum, size, (u32)fp.offset()}); fp.writel(0x04034b50, 4); //signature fp.writel(0x0014, 2); //minimum version (2.0) fp.writel(0x0000, 2); //general purpose bit flags fp.writel(0x0000, 2); //compression method (0 = uncompressed) fp.writel(makeTime(timestamp), 2); fp.writel(makeDate(timestamp), 2); fp.writel(checksum, 4); fp.writel(size, 4); //compressed size fp.writel(size, 4); //uncompressed size fp.writel(filename.length(), 2); //file name length fp.writel(0x0000, 2); //extra field length fp.print(filename); //file name fp.write({data, size}); //file data } ~ZIP() { //central directory u32 baseOffset = fp.offset(); for(auto& entry : directory) { fp.writel(0x02014b50, 4); //signature fp.writel(0x0014, 2); //version made by (2.0) fp.writel(0x0014, 2); //version needed to extract (2.0) fp.writel(0x0000, 2); //general purpose bit flags fp.writel(0x0000, 2); //compression method (0 = uncompressed) fp.writel(makeTime(entry.timestamp), 2); fp.writel(makeDate(entry.timestamp), 2); fp.writel(entry.checksum, 4); fp.writel(entry.size, 4); //compressed size fp.writel(entry.size, 4); //uncompressed size fp.writel(entry.filename.length(), 2); //file name length fp.writel(0x0000, 2); //extra field length fp.writel(0x0000, 2); //file comment length fp.writel(0x0000, 2); //disk number start fp.writel(0x0000, 2); //internal file attributes fp.writel(0x00000000, 4); //external file attributes fp.writel(entry.offset, 4); //relative offset of file header fp.print(entry.filename); } u32 finishOffset = fp.offset(); //end of central directory fp.writel(0x06054b50, 4); //signature fp.writel(0x0000, 2); //number of this disk fp.writel(0x0000, 2); //disk where central directory starts fp.writel(directory.size(), 2); //number of central directory records on this disk fp.writel(directory.size(), 2); //total number of central directory records fp.writel(finishOffset - baseOffset, 4); //size of central directory fp.writel(baseOffset, 4); //offset of central directory fp.writel(0x0000, 2); //comment length fp.close(); } protected: auto makeTime(time_t timestamp) -> u16 { tm* info = localtime(×tamp); return (info->tm_hour << 11) | (info->tm_min << 5) | (info->tm_sec >> 1); } auto makeDate(time_t timestamp) -> u16 { tm* info = localtime(×tamp); return ((info->tm_year - 80) << 9) | ((1 + info->tm_mon) << 5) + (info->tm_mday); } file_buffer fp; time_t timestamp; struct entry_t { string filename; time_t timestamp; u32 checksum; u32 size; u32 offset; }; vector directory; }; } ares-126/nall/endian.hpp000066400000000000000000000034351415063341600152230ustar00rootroot00000000000000#pragma once #include #if defined(ENDIAN_LITTLE) //little-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x04030201 #define order_lsb1(a) a #define order_lsb2(a,b) a,b #define order_lsb3(a,b,c) a,b,c #define order_lsb4(a,b,c,d) a,b,c,d #define order_lsb5(a,b,c,d,e) a,b,c,d,e #define order_lsb6(a,b,c,d,e,f) a,b,c,d,e,f #define order_lsb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g #define order_lsb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h #define order_msb1(a) a #define order_msb2(a,b) b,a #define order_msb3(a,b,c) c,b,a #define order_msb4(a,b,c,d) d,c,b,a #define order_msb5(a,b,c,d,e) e,d,c,b,a #define order_msb6(a,b,c,d,e,f) f,e,d,c,b,a #define order_msb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a #define order_msb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a #elif defined(ENDIAN_BIG) //big-endian: uint8_t[] { 0x01, 0x02, 0x03, 0x04 } == 0x01020304 #define order_lsb1(a) a #define order_lsb2(a,b) b,a #define order_lsb3(a,b,c) c,b,a #define order_lsb4(a,b,c,d) d,c,b,a #define order_lsb5(a,b,c,d,e) e,d,c,b,a #define order_lsb6(a,b,c,d,e,f) f,e,d,c,b,a #define order_lsb7(a,b,c,d,e,f,g) g,f,e,d,c,b,a #define order_lsb8(a,b,c,d,e,f,g,h) h,g,f,e,d,c,b,a #define order_msb1(a) a #define order_msb2(a,b) a,b #define order_msb3(a,b,c) a,b,c #define order_msb4(a,b,c,d) a,b,c,d #define order_msb5(a,b,c,d,e) a,b,c,d,e #define order_msb6(a,b,c,d,e,f) a,b,c,d,e,f #define order_msb7(a,b,c,d,e,f,g) a,b,c,d,e,f,g #define order_msb8(a,b,c,d,e,f,g,h) a,b,c,d,e,f,g,h #else #error "Unknown endian. Please specify in nall/intrinsics.hpp" #endif ares-126/nall/file-buffer.hpp000066400000000000000000000155771415063341600161650ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include namespace nall { //on Windows (at least for 7 and earlier), FILE* is not buffered //thus, reading/writing one byte at a time will be dramatically slower //on all other OSes, FILE* is buffered //in order to ensure good performance, file_buffer implements its own buffer //this speeds up Windows substantially, without harming performance elsewhere much struct file_buffer { struct mode { enum : u32 { read, write, modify, append }; }; struct index { enum : u32 { absolute, relative }; }; file_buffer(const file_buffer&) = delete; auto operator=(const file_buffer&) -> file_buffer& = delete; file_buffer() = default; file_buffer(const string& filename, u32 mode) { open(filename, mode); } file_buffer(file_buffer&& source) { operator=(move(source)); } ~file_buffer() { close(); } auto operator=(file_buffer&& source) -> file_buffer& { buffer = source.buffer; bufferOffset = source.bufferOffset; bufferDirty = source.bufferDirty; fileHandle = source.fileHandle; fileOffset = source.fileOffset; fileSize = source.fileSize; fileMode = source.fileMode; source.bufferOffset = -1LL; source.bufferDirty = false; source.fileHandle = nullptr; source.fileOffset = 0; source.fileSize = 0; source.fileMode = mode::read; return *this; } explicit operator bool() const { return (bool)fileHandle; } auto read() -> u8 { if(!fileHandle) return 0; //file not open if(fileOffset >= fileSize) return 0; //cannot read past end of file bufferSynchronize(); return buffer[fileOffset++ & buffer.size() - 1]; } template auto readl(u32 length = 1) -> T { T data = 0; for(u32 n : range(length)) { data |= (T)read() << n * 8; } return data; } template auto readm(u32 length = 1) -> T { T data = 0; while(length--) { data <<= 8; data |= read(); } return data; } auto reads(u64 length) -> string { string result; result.resize(length); for(auto& byte : result) byte = read(); return result; } auto read(array_span memory) -> void { for(auto& byte : memory) byte = read(); } auto write(u8 data) -> void { if(!fileHandle) return; //file not open if(fileMode == mode::read) return; //writes not permitted bufferSynchronize(); buffer[fileOffset++ & buffer.size() - 1] = data; bufferDirty = true; if(fileOffset > fileSize) fileSize = fileOffset; } template auto writel(T data, u32 length = 1) -> void { while(length--) { write(u8(data)); data >>= 8; } } template auto writem(T data, u32 length = 1) -> void { for(u32 n : reverse(range(length))) { write(u8(data >> n * 8)); } } auto writes(const string& s) -> void { for(auto& byte : s) write(byte); } auto write(array_view memory) -> void { for(auto& byte : memory) write(byte); } template auto print(P&&... p) -> void { string s{forward

(p)...}; for(auto& byte : s) write(byte); } auto flush() -> void { bufferFlush(); fflush(fileHandle); } auto seek(s64 offset, u32 index_ = index::absolute) -> void { if(!fileHandle) return; bufferFlush(); s64 seekOffset = fileOffset; switch(index_) { case index::absolute: seekOffset = offset; break; case index::relative: seekOffset += offset; break; } if(seekOffset < 0) seekOffset = 0; //cannot seek before start of file if(seekOffset > fileSize) { if(fileMode == mode::read) { //cannot seek past end of file seekOffset = fileSize; } else { //pad file to requested location fileOffset = fileSize; while(fileSize < seekOffset) write(0); } } fileOffset = seekOffset; } auto offset() const -> u64 { if(!fileHandle) return 0; return fileOffset; } auto size() const -> u64 { if(!fileHandle) return 0; return fileSize; } auto truncate(u64 size) -> bool { if(!fileHandle) return false; #if defined(API_POSIX) return ftruncate(fileno(fileHandle), size) == 0; #elif defined(API_WINDOWS) return _chsize(fileno(fileHandle), size) == 0; #endif } auto end() const -> bool { if(!fileHandle) return true; return fileOffset >= fileSize; } auto open(const string& filename, u32 mode_) -> bool { close(); switch(fileMode = mode_) { #if defined(API_POSIX) case mode::read: fileHandle = fopen(filename, "rb" ); break; case mode::write: fileHandle = fopen(filename, "wb+"); break; //need read permission for buffering case mode::modify: fileHandle = fopen(filename, "rb+"); break; case mode::append: fileHandle = fopen(filename, "ab+"); break; #elif defined(API_WINDOWS) case mode::read: fileHandle = _wfopen(utf16_t(filename), L"rb" ); break; case mode::write: fileHandle = _wfopen(utf16_t(filename), L"wb+"); break; case mode::modify: fileHandle = _wfopen(utf16_t(filename), L"rb+"); break; case mode::append: fileHandle = _wfopen(utf16_t(filename), L"ab+"); break; #endif } if(!fileHandle) return false; bufferOffset = -1LL; fileOffset = 0; fseek(fileHandle, 0, SEEK_END); fileSize = ftell(fileHandle); fseek(fileHandle, 0, SEEK_SET); return true; } auto close() -> void { if(!fileHandle) return; bufferFlush(); fclose(fileHandle); fileHandle = nullptr; } private: array buffer; s64 bufferOffset = -1LL; bool bufferDirty = false; FILE* fileHandle = nullptr; u64 fileOffset = 0; u64 fileSize = 0; u32 fileMode = mode::read; auto bufferSynchronize() -> void { if(!fileHandle) return; if(bufferOffset == (fileOffset & ~(buffer.size() - 1))) return; bufferFlush(); bufferOffset = fileOffset & ~(buffer.size() - 1); fseek(fileHandle, bufferOffset, SEEK_SET); u64 length = bufferOffset + buffer.size() <= fileSize ? buffer.size() : fileSize & buffer.size() - 1; if(length) (void)fread(buffer.data(), 1, length, fileHandle); } auto bufferFlush() -> void { if(!fileHandle) return; //file not open if(fileMode == mode::read) return; //buffer cannot be written to if(bufferOffset < 0) return; //buffer unused if(!bufferDirty) return; //buffer unmodified since read fseek(fileHandle, bufferOffset, SEEK_SET); u64 length = bufferOffset + buffer.size() <= fileSize ? buffer.size() : fileSize & buffer.size() - 1; if(length) (void)fwrite(buffer.data(), 1, length, fileHandle); bufferOffset = -1LL; bufferDirty = false; } }; } ares-126/nall/file-map.hpp000066400000000000000000000122431415063341600154540ustar00rootroot00000000000000#pragma once #include #include #include #include #if defined(PLATFORM_WINDOWS) #include #else #include #include #include #include #include #endif #if !defined(MAP_NORESERVE) //not supported on FreeBSD; flag removed in 11.0 #define MAP_NORESERVE 0 #endif namespace nall { struct file_map { struct mode { enum : u32 { read, write, modify, append }; }; file_map(const file_map&) = delete; auto operator=(const file_map&) = delete; file_map() = default; file_map(file_map&& source) { operator=(move(source)); } file_map(const string& filename, u32 mode) { open(filename, mode); } ~file_map() { close(); } explicit operator bool() const { return _open; } auto size() const -> u64 { return _size; } auto data() -> u8* { return _data; } auto data() const -> const u8* { return _data; } //auto operator=(file_map&& source) -> file_map&; //auto open(const string& filename, u32 mode) -> bool; //auto close() -> void; private: bool _open = false; //zero-byte files return _data = nullptr, _size = 0 u8* _data = nullptr; u64 _size = 0; #if defined(API_WINDOWS) HANDLE _file = INVALID_HANDLE_VALUE; HANDLE _map = INVALID_HANDLE_VALUE; public: auto operator=(file_map&& source) -> file_map& { _open = source._open; _data = source._data; _size = source._size; _file = source._file; _map = source._map; source._open = false; source._data = nullptr; source._size = 0; source._file = INVALID_HANDLE_VALUE; source._map = INVALID_HANDLE_VALUE; return *this; } auto open(const string& filename, u32 mode_) -> bool { close(); if(file::exists(filename) && file::size(filename) == 0) return _open = true; s32 desiredAccess, creationDisposition, protection, mapAccess; switch(mode_) { default: return false; case mode::read: desiredAccess = GENERIC_READ; creationDisposition = OPEN_EXISTING; protection = PAGE_READONLY; mapAccess = FILE_MAP_READ; break; case mode::write: //write access requires read access desiredAccess = GENERIC_WRITE; creationDisposition = CREATE_ALWAYS; protection = PAGE_READWRITE; mapAccess = FILE_MAP_ALL_ACCESS; break; case mode::modify: desiredAccess = GENERIC_READ | GENERIC_WRITE; creationDisposition = OPEN_EXISTING; protection = PAGE_READWRITE; mapAccess = FILE_MAP_ALL_ACCESS; break; case mode::append: desiredAccess = GENERIC_READ | GENERIC_WRITE; creationDisposition = CREATE_NEW; protection = PAGE_READWRITE; mapAccess = FILE_MAP_ALL_ACCESS; break; } _file = CreateFileW(utf16_t(filename), desiredAccess, FILE_SHARE_READ, nullptr, creationDisposition, FILE_ATTRIBUTE_NORMAL, nullptr); if(_file == INVALID_HANDLE_VALUE) return false; _size = GetFileSize(_file, nullptr); _map = CreateFileMapping(_file, nullptr, protection, 0, _size, nullptr); if(_map == INVALID_HANDLE_VALUE) { CloseHandle(_file); _file = INVALID_HANDLE_VALUE; return false; } _data = (u8*)MapViewOfFile(_map, mapAccess, 0, 0, _size); return _open = true; } auto close() -> void { if(_data) { UnmapViewOfFile(_data); _data = nullptr; } if(_map != INVALID_HANDLE_VALUE) { CloseHandle(_map); _map = INVALID_HANDLE_VALUE; } if(_file != INVALID_HANDLE_VALUE) { CloseHandle(_file); _file = INVALID_HANDLE_VALUE; } _open = false; } #else s32 _fd = -1; public: auto operator=(file_map&& source) -> file_map& { _open = source._open; _data = source._data; _size = source._size; _fd = source._fd; source._open = false; source._data = nullptr; source._size = 0; source._fd = -1; return *this; } auto open(const string& filename, u32 mode_) -> bool { close(); if(file::exists(filename) && file::size(filename) == 0) return _open = true; s32 openFlags = 0; s32 mmapFlags = 0; switch(mode_) { default: return false; case mode::read: openFlags = O_RDONLY; mmapFlags = PROT_READ; break; case mode::write: openFlags = O_RDWR | O_CREAT; //mmap() requires read access mmapFlags = PROT_WRITE; break; case mode::modify: openFlags = O_RDWR; mmapFlags = PROT_READ | PROT_WRITE; break; case mode::append: openFlags = O_RDWR | O_CREAT; mmapFlags = PROT_READ | PROT_WRITE; break; } _fd = ::open(filename, openFlags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); if(_fd < 0) return false; struct stat _stat; fstat(_fd, &_stat); _size = _stat.st_size; _data = (u8*)mmap(nullptr, _size, mmapFlags, MAP_SHARED | MAP_NORESERVE, _fd, 0); if(_data == MAP_FAILED) { _data = nullptr; ::close(_fd); _fd = -1; return false; } return _open = true; } auto close() -> void { if(_data) { munmap(_data, _size); _data = nullptr; } if(_fd >= 0) { ::close(_fd); _fd = -1; } _open = false; } #endif }; } ares-126/nall/file.hpp000066400000000000000000000060301415063341600146760ustar00rootroot00000000000000#pragma once #include namespace nall { struct file : inode { struct mode { enum : u32 { read, write, modify, append }; }; struct index { enum : u32 { absolute, relative }; }; file() = delete; static auto open(const string& filename, u32 mode) -> file_buffer { return file_buffer{filename, mode}; } static auto copy(const string& sourcename, const string& targetname) -> bool { if(sourcename == targetname) return true; if(auto reader = file::open(sourcename, mode::read)) { if(auto writer = file::open(targetname, mode::write)) { for(u64 n : range(reader.size())) writer.write(reader.read()); return true; } } return false; } //attempt to rename file first //this will fail if paths point to different file systems; fall back to copy+remove in this case static auto move(const string& sourcename, const string& targetname) -> bool { if(sourcename == targetname) return true; if(rename(sourcename, targetname)) return true; if(!writable(sourcename)) return false; if(copy(sourcename, targetname)) return remove(sourcename), true; return false; } static auto truncate(const string& filename, u64 size) -> bool { #if defined(API_POSIX) return ::truncate(filename, size) == 0; #elif defined(API_WINDOWS) if(auto fp = _wfopen(utf16_t(filename), L"rb+")) { bool result = _chsize(fileno(fp), size) == 0; fclose(fp); return result; } return false; #endif } //returns false if specified filename is a directory static auto exists(const string& filename) -> bool { #if defined(API_POSIX) struct stat data; if(stat(filename, &data) != 0) return false; #elif defined(API_WINDOWS) struct __stat64 data; if(_wstat64(utf16_t(filename), &data) != 0) return false; #endif return !(data.st_mode & S_IFDIR); } static auto size(const string& filename) -> u64 { #if defined(API_POSIX) struct stat data; stat(filename, &data); #elif defined(API_WINDOWS) struct __stat64 data; _wstat64(utf16_t(filename), &data); #endif return S_ISREG(data.st_mode) ? data.st_size : 0u; } static auto read(const string& filename) -> vector { vector memory; if(auto fp = file::open(filename, mode::read)) { memory.resize(fp.size()); fp.read(memory); } return memory; } static auto read(const string& filename, array_span memory) -> bool { if(auto fp = file::open(filename, mode::read)) return fp.read(memory), true; return false; } static auto write(const string& filename, array_view memory) -> bool { if(auto fp = file::open(filename, mode::write)) return fp.write(memory), true; return false; } //create an empty file (will replace existing files) static auto create(const string& filename) -> bool { if(auto fp = file::open(filename, mode::write)) return true; return false; } static auto sha256(const string& filename) -> string { return Hash::SHA256(read(filename)).digest(); } }; } ares-126/nall/function.hpp000066400000000000000000000057741415063341600156220ustar00rootroot00000000000000#pragma once #include namespace nall { template struct function; template struct function R> { using cast = auto (*)(P...) -> R; //value = true if auto L::operator()(P...) -> R exists template struct is_compatible { template static auto exists(T*) -> const typename is_same().operator()(declval

()...))>::type; template static auto exists(...) -> const false_type; static constexpr bool value = decltype(exists(0))::value; }; function() {} function(const function& source) { operator=(source); } function(auto (*function)(P...) -> R) { callback = new global(function); } template function(auto (C::*function)(P...) -> R, C* object) { callback = new member(function, object); } template function(auto (C::*function)(P...) const -> R, C* object) { callback = new member((auto (C::*)(P...) -> R)function, object); } template::value>> function(const L& object) { callback = new lambda(object); } explicit function(void* function) { if(function) callback = new global((auto (*)(P...) -> R)function); } ~function() { if(callback) delete callback; } explicit operator bool() const { return callback; } auto operator()(P... p) const -> R { return (*callback)(forward

(p)...); } auto reset() -> void { if(callback) { delete callback; callback = nullptr; } } auto operator=(const function& source) -> function& { if(this != &source) { if(callback) { delete callback; callback = nullptr; } if(source.callback) callback = source.callback->copy(); } return *this; } auto operator=(void* source) -> function& { if(callback) { delete callback; callback = nullptr; } callback = new global((auto (*)(P...) -> R)source); return *this; } private: struct container { virtual auto operator()(P... p) const -> R = 0; virtual auto copy() const -> container* = 0; virtual ~container() = default; }; container* callback = nullptr; struct global : container { auto (*function)(P...) -> R; auto operator()(P... p) const -> R { return function(forward

(p)...); } auto copy() const -> container* { return new global(function); } global(auto (*function)(P...) -> R) : function(function) {} }; template struct member : container { auto (C::*function)(P...) -> R; C* object; auto operator()(P... p) const -> R { return (object->*function)(forward

(p)...); } auto copy() const -> container* { return new member(function, object); } member(auto (C::*function)(P...) -> R, C* object) : function(function), object(object) {} }; template struct lambda : container { mutable L object; auto operator()(P... p) const -> R { return object(forward

(p)...); } auto copy() const -> container* { return new lambda(object); } lambda(const L& object) : object(object) {} }; }; } ares-126/nall/galois-field.hpp000066400000000000000000000040441415063341600163210ustar00rootroot00000000000000#pragma once //table-driven galois field modulo 2 //do not use with GF(2^17) or larger namespace nall { template struct GaloisField { using type = GaloisField; GaloisField(u32 x = 0) : x(x) {} operator field() const { return x; } auto operator^(field y) const -> type { return x ^ y; } auto operator+(field y) const -> type { return x ^ y; } auto operator-(field y) const -> type { return x ^ y; } auto operator*(field y) const -> type { return x && y ? exp(log(x) + log(y)) : 0; } auto operator/(field y) const -> type { return x && y ? exp(log(x) + Elements - log(y)) : 0; } auto& operator =(field y) { return x = y, *this; } auto& operator^=(field y) { return x = operator^(y), *this; } auto& operator+=(field y) { return x = operator^(y), *this; } auto& operator-=(field y) { return x = operator^(y), *this; } auto& operator*=(field y) { return x = operator*(y), *this; } auto& operator/=(field y) { return x = operator/(y), *this; } auto pow(field y) const -> type { return exp(log(x) * y); } auto inv() const -> type { return exp(Elements - log(x)); } // 1/x static auto log(u32 x) -> u32 { enum : u32 { Size = bit::round(Elements), Mask = Size - 1 }; static array log = [] { u32 shift = 0, polynomial = Polynomial; while(polynomial >>= 1) shift++; shift--; array log; field x = 1; for(u32 n : range(Elements)) { log[x] = n; x = x << 1 ^ (x >> shift ? Polynomial : 0); } log[0] = 0; //-inf (undefined) return log; }(); return log[x & Mask]; } static auto exp(u32 x) -> u32 { static array exp = [] { u32 shift = 0, polynomial = Polynomial; while(polynomial >>= 1) shift++; shift--; array exp; field x = 1; for(u32 n : range(Elements)) { exp[n] = x; x = x << 1 ^ (x >> shift ? Polynomial : 0); } return exp; }(); return exp[x % Elements]; } field x; }; } ares-126/nall/hash/000077500000000000000000000000001415063341600141725ustar00rootroot00000000000000ares-126/nall/hash/crc16.hpp000066400000000000000000000017471415063341600156320ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct CRC16 : Hash { using Hash::input; CRC16(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { checksum = ~0; } auto input(u8 value) -> void override { checksum = (checksum >> 8) ^ table(checksum ^ value); } auto output() const -> vector override { vector result; for(auto n : reverse(range(2))) result.append(~checksum >> n * 8); return result; } auto value() const -> u16 { return ~checksum; } private: static auto table(u8 index) -> u16 { static u16 table[256] = {}; static bool initialized = false; if(!initialized) { initialized = true; for(auto index : range(256)) { u16 crc = index; for(auto bit : range(8)) { crc = (crc >> 1) ^ (crc & 1 ? 0x8408 : 0); } table[index] = crc; } } return table[index]; } u16 checksum = 0; }; } ares-126/nall/hash/crc32.hpp000066400000000000000000000017541415063341600156260ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct CRC32 : Hash { using Hash::input; CRC32(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { checksum = ~0; } auto input(u8 value) -> void override { checksum = (checksum >> 8) ^ table(checksum ^ value); } auto output() const -> vector override { vector result; for(auto n : reverse(range(4))) result.append(~checksum >> n * 8); return result; } auto value() const -> u32 { return ~checksum; } private: static auto table(u8 index) -> u32 { static u32 table[256] = {}; static bool initialized = false; if(!initialized) { initialized = true; for(auto index : range(256)) { u32 crc = index; for(auto bit : range(8)) { crc = (crc >> 1) ^ (crc & 1 ? 0xedb8'8320 : 0); } table[index] = crc; } } return table[index]; } u32 checksum = 0; }; } ares-126/nall/hash/crc64.hpp000066400000000000000000000017661415063341600156360ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct CRC64 : Hash { using Hash::input; CRC64(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { checksum = ~0; } auto input(u8 value) -> void override { checksum = (checksum >> 8) ^ table(checksum ^ value); } auto output() const -> vector override { vector result; for(auto n : reverse(range(8))) result.append(~checksum >> n * 8); return result; } auto value() const -> u64 { return ~checksum; } private: static auto table(u8 index) -> u64 { static u64 table[256] = {}; static bool initialized = false; if(!initialized) { initialized = true; for(auto index : range(256)) { u64 crc = index; for(auto bit : range(8)) { crc = (crc >> 1) ^ (crc & 1 ? 0xc96c'5795'd787'0f42 : 0); } table[index] = crc; } } return table[index]; } u64 checksum = 0; }; } ares-126/nall/hash/hash.hpp000066400000000000000000000022521415063341600156270ustar00rootroot00000000000000#pragma once #include #include #include //cannot use constructor inheritance due to needing to call virtual reset(); //instead, define a macro to reduce boilerplate code in every Hash subclass #define nallHash(Name) \ Name() { reset(); } \ Name(const void* data, u64 size) : Name() { input(data, size); } \ Name(const vector& data) : Name() { input(data); } \ Name(const string& data) : Name() { input(data); } \ using Hash::input; \ namespace nall::Hash { struct Hash { virtual auto reset() -> void = 0; virtual auto input(u8 data) -> void = 0; virtual auto output() const -> vector = 0; auto input(array_view data) -> void { for(auto byte : data) input(byte); } auto input(const void* data, u64 size) -> void { auto p = (const u8*)data; while(size--) input(*p++); } auto input(const vector& data) -> void { for(auto byte : data) input(byte); } auto input(const string& data) -> void { for(auto byte : data) input(byte); } auto digest() const -> string { string result; for(auto n : output()) result.append(hex(n, 2L)); return result; } }; } ares-126/nall/hash/sha224.hpp000066400000000000000000000062251415063341600157130ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct SHA224 : Hash { using Hash::input; SHA224(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { for(auto& n : queue) n = 0; for(auto& n : w) n = 0; for(auto n : range(8)) h[n] = square(n); queued = length = 0; } auto input(u8 value) -> void override { byte(value); length++; } auto output() const -> vector override { SHA224 self(*this); self.finish(); vector result; for(auto h : range(7)) { for(auto n : reverse(range(4))) result.append(self.h[h] >> n * 8); } return result; } auto value() const -> u256 { u256 value = 0; for(auto byte : output()) value = value << 8 | byte; return value; } private: auto byte(u8 value) -> void { u32 shift = (3 - (queued & 3)) * 8; queue[queued >> 2] &= ~(0xff << shift); queue[queued >> 2] |= (value << shift); if(++queued == 64) block(), queued = 0; } auto block() -> void { for(auto n : range(16)) w[n] = queue[n]; for(auto n : range(16, 64)) { u32 a = ror(w[n - 15], 7) ^ ror(w[n - 15], 18) ^ (w[n - 15] >> 3); u32 b = ror(w[n - 2], 17) ^ ror(w[n - 2], 19) ^ (w[n - 2] >> 10); w[n] = w[n - 16] + w[n - 7] + a + b; } u32 t[8]; for(auto n : range(8)) t[n] = h[n]; for(auto n : range(64)) { u32 a = ror(t[0], 2) ^ ror(t[0], 13) ^ ror(t[0], 22); u32 b = ror(t[4], 6) ^ ror(t[4], 11) ^ ror(t[4], 25); u32 c = (t[0] & t[1]) ^ (t[0] & t[2]) ^ (t[1] & t[2]); u32 d = (t[4] & t[5]) ^ (~t[4] & t[6]); u32 e = t[7] + w[n] + cube(n) + b + d; t[7] = t[6]; t[6] = t[5]; t[5] = t[4]; t[4] = t[3] + e; t[3] = t[2]; t[2] = t[1]; t[1] = t[0]; t[0] = a + c + e; } for(auto n : range(8)) h[n] += t[n]; } auto finish() -> void { byte(0x80); while(queued != 56) byte(0x00); for(auto n : range(8)) byte(length * 8 >> (7 - n) * 8); } auto square(u32 n) -> u32 { static const u32 value[8] = { 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4, }; return value[n]; } auto cube(u32 n) -> u32 { static const u32 value[64] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, }; return value[n]; } u32 queue[16] = {}; u32 w[64] = {}; u32 h[8] = {}; u32 queued = 0; u64 length = 0; }; } ares-126/nall/hash/sha256.hpp000066400000000000000000000062131415063341600157150ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct SHA256 : Hash { using Hash::input; SHA256(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { for(auto& n : queue) n = 0; for(auto& n : w) n = 0; for(auto n : range(8)) h[n] = square(n); queued = length = 0; } auto input(u8 value) -> void override { byte(value); length++; } auto output() const -> vector override { SHA256 self(*this); self.finish(); vector result; for(auto h : self.h) { for(auto n : reverse(range(4))) result.append(h >> n * 8); } return result; } auto value() const -> u256 { u256 value = 0; for(auto byte : output()) value = value << 8 | byte; return value; } private: auto byte(u8 value) -> void { u32 shift = (3 - (queued & 3)) * 8; queue[queued >> 2] &= ~(0xff << shift); queue[queued >> 2] |= (value << shift); if(++queued == 64) block(), queued = 0; } auto block() -> void { for(auto n : range(16)) w[n] = queue[n]; for(auto n : range(16, 64)) { u32 a = ror(w[n - 15], 7) ^ ror(w[n - 15], 18) ^ (w[n - 15] >> 3); u32 b = ror(w[n - 2], 17) ^ ror(w[n - 2], 19) ^ (w[n - 2] >> 10); w[n] = w[n - 16] + w[n - 7] + a + b; } u32 t[8]; for(auto n : range(8)) t[n] = h[n]; for(auto n : range(64)) { u32 a = ror(t[0], 2) ^ ror(t[0], 13) ^ ror(t[0], 22); u32 b = ror(t[4], 6) ^ ror(t[4], 11) ^ ror(t[4], 25); u32 c = (t[0] & t[1]) ^ (t[0] & t[2]) ^ (t[1] & t[2]); u32 d = (t[4] & t[5]) ^ (~t[4] & t[6]); u32 e = t[7] + w[n] + cube(n) + b + d; t[7] = t[6]; t[6] = t[5]; t[5] = t[4]; t[4] = t[3] + e; t[3] = t[2]; t[2] = t[1]; t[1] = t[0]; t[0] = a + c + e; } for(auto n : range(8)) h[n] += t[n]; } auto finish() -> void { byte(0x80); while(queued != 56) byte(0x00); for(auto n : range(8)) byte(length * 8 >> (7 - n) * 8); } auto square(u32 n) -> u32 { static const u32 value[8] = { 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, }; return value[n]; } auto cube(u32 n) -> u32 { static const u32 value[64] = { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, }; return value[n]; } u32 queue[16] = {}; u32 w[64] = {}; u32 h[8] = {}; u32 queued = 0; u64 length = 0; }; } ares-126/nall/hash/sha384.hpp000066400000000000000000000101551415063341600157170ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct SHA384 : Hash { using Hash::input; SHA384(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { for(auto& n : queue) n = 0; for(auto& n : w) n = 0; for(auto n : range(8)) h[n] = square(n); queued = length = 0; } auto input(u8 data) -> void override { byte(data); length++; } auto output() const -> vector override { SHA384 self(*this); self.finish(); vector result; for(auto h : range(6)) { for(auto n : reverse(range(8))) result.append(self.h[h] >> n * 8); } return result; } auto value() const -> u512 { u512 value = 0; for(auto byte : output()) value = value << 8 | byte; return value; } private: auto byte(u8 data) -> void { u64 shift = (7 - (queued & 7)) * 8; queue[queued >> 3] &=~((u64)0xff << shift); queue[queued >> 3] |= ((u64)data << shift); if(++queued == 128) block(), queued = 0; } auto block() -> void { for(auto n : range(16)) w[n] = queue[n]; for(auto n : range(16, 80)) { u64 a = ror(w[n - 15], 1) ^ ror(w[n - 15], 8) ^ (w[n - 15] >> 7); u64 b = ror(w[n - 2], 19) ^ ror(w[n - 2], 61) ^ (w[n - 2] >> 6); w[n] = w[n - 16] + w[n - 7] + a + b; } u64 t[8]; for(auto n : range(8)) t[n] = h[n]; for(auto n : range(80)) { u64 a = ror(t[0], 28) ^ ror(t[0], 34) ^ ror(t[0], 39); u64 b = ror(t[4], 14) ^ ror(t[4], 18) ^ ror(t[4], 41); u64 c = (t[0] & t[1]) ^ (t[0] & t[2]) ^ (t[1] & t[2]); u64 d = (t[4] & t[5]) ^ (~t[4] & t[6]); u64 e = t[7] + w[n] + cube(n) + b + d; t[7] = t[6]; t[6] = t[5]; t[5] = t[4]; t[4] = t[3] + e; t[3] = t[2]; t[2] = t[1]; t[1] = t[0]; t[0] = a + c + e; } for(auto n : range(8)) h[n] += t[n]; } auto finish() -> void { byte(0x80); while(queued != 112) byte(0x00); for(auto n : range(16)) byte(length * 8 >> (15 - n) * 8); } auto square(u32 n) -> u64 { static const u64 data[8] = { 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4, }; return data[n]; } auto cube(u32 n) -> u64 { static const u64 data[80] = { 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817, }; return data[n]; } u64 queue[16] = {}; u64 w[80] = {}; u64 h[8] = {}; u64 queued = 0; u128 length = 0; }; } ares-126/nall/hash/sha512.hpp000066400000000000000000000101431415063341600157050ustar00rootroot00000000000000#pragma once #include namespace nall::Hash { struct SHA512 : Hash { using Hash::input; SHA512(array_view buffer = {}) { reset(); input(buffer); } auto reset() -> void override { for(auto& n : queue) n = 0; for(auto& n : w) n = 0; for(auto n : range(8)) h[n] = square(n); queued = length = 0; } auto input(u8 data) -> void override { byte(data); length++; } auto output() const -> vector override { SHA512 self(*this); self.finish(); vector result; for(auto h : self.h) { for(auto n : reverse(range(8))) result.append(h >> n * 8); } return result; } auto value() const -> u512 { u512 value = 0; for(auto byte : output()) value = value << 8 | byte; return value; } private: auto byte(u8 data) -> void { u64 shift = (7 - (queued & 7)) * 8; queue[queued >> 3] &=~((u64)0xff << shift); queue[queued >> 3] |= ((u64)data << shift); if(++queued == 128) block(), queued = 0; } auto block() -> void { for(auto n : range(16)) w[n] = queue[n]; for(auto n : range(16, 80)) { u64 a = ror(w[n - 15], 1) ^ ror(w[n - 15], 8) ^ (w[n - 15] >> 7); u64 b = ror(w[n - 2], 19) ^ ror(w[n - 2], 61) ^ (w[n - 2] >> 6); w[n] = w[n - 16] + w[n - 7] + a + b; } u64 t[8]; for(auto n : range(8)) t[n] = h[n]; for(auto n : range(80)) { u64 a = ror(t[0], 28) ^ ror(t[0], 34) ^ ror(t[0], 39); u64 b = ror(t[4], 14) ^ ror(t[4], 18) ^ ror(t[4], 41); u64 c = (t[0] & t[1]) ^ (t[0] & t[2]) ^ (t[1] & t[2]); u64 d = (t[4] & t[5]) ^ (~t[4] & t[6]); u64 e = t[7] + w[n] + cube(n) + b + d; t[7] = t[6]; t[6] = t[5]; t[5] = t[4]; t[4] = t[3] + e; t[3] = t[2]; t[2] = t[1]; t[1] = t[0]; t[0] = a + c + e; } for(auto n : range(8)) h[n] += t[n]; } auto finish() -> void { byte(0x80); while(queued != 112) byte(0x00); for(auto n : range(16)) byte(length * 8 >> (15 - n) * 8); } auto square(u32 n) -> u64 { static const u64 data[8] = { 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, }; return data[n]; } auto cube(u32 n) -> u64 { static const u64 data[80] = { 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817, }; return data[n]; } u64 queue[16] = {}; u64 w[80] = {}; u64 h[8] = {}; u64 queued = 0; u128 length = 0; }; } ares-126/nall/hashset.hpp000066400000000000000000000056051415063341600154250ustar00rootroot00000000000000#pragma once //hashset // //search: O(1) average; O(n) worst //insert: O(1) average; O(n) worst //remove: O(1) average; O(n) worst // //requirements: // auto T::hash() const -> u32; // auto T::operator==(const T&) const -> bool; namespace nall { template struct hashset { hashset() = default; hashset(u32 length) : length(bit::round(length)) {} hashset(const hashset& source) { operator=(source); } hashset(hashset&& source) { operator=(move(source)); } ~hashset() { reset(); } auto operator=(const hashset& source) -> hashset& { reset(); if(source.pool) { for(u32 n : range(source.count)) { insert(*source.pool[n]); } } return *this; } auto operator=(hashset&& source) -> hashset& { reset(); pool = source.pool; length = source.length; count = source.count; source.pool = nullptr; source.length = 8; source.count = 0; return *this; } explicit operator bool() const { return count; } auto capacity() const -> u32 { return length; } auto size() const -> u32 { return count; } auto reset() -> void { if(pool) { for(u32 n : range(length)) { if(pool[n]) { delete pool[n]; pool[n] = nullptr; } } delete pool; pool = nullptr; } length = 8; count = 0; } auto reserve(u32 size) -> void { //ensure all items will fit into pool (with <= 50% load) and amortize growth size = bit::round(max(size, count << 1)); T** copy = new T*[size](); if(pool) { for(u32 n : range(length)) { if(pool[n]) { u32 hash = (*pool[n]).hash() & (size - 1); while(copy[hash]) if(++hash >= size) hash = 0; copy[hash] = pool[n]; pool[n] = nullptr; } } } delete pool; pool = copy; length = size; } auto find(const T& value) -> maybe { if(!pool) return nothing; u32 hash = value.hash() & (length - 1); while(pool[hash]) { if(value == *pool[hash]) return *pool[hash]; if(++hash >= length) hash = 0; } return nothing; } auto insert(const T& value) -> maybe { if(!pool) pool = new T*[length](); //double pool size when load is >= 50% if(count >= (length >> 1)) reserve(length << 1); count++; u32 hash = value.hash() & (length - 1); while(pool[hash]) if(++hash >= length) hash = 0; pool[hash] = new T(value); return *pool[hash]; } auto remove(const T& value) -> bool { if(!pool) return false; u32 hash = value.hash() & (length - 1); while(pool[hash]) { if(value == *pool[hash]) { delete pool[hash]; pool[hash] = nullptr; count--; return true; } if(++hash >= length) hash = 0; } return false; } protected: T** pool = nullptr; u32 length = 8; //length of pool u32 count = 0; //number of objects inside of the pool }; } ares-126/nall/hid.hpp000066400000000000000000000074211415063341600145300ustar00rootroot00000000000000#pragma once #include #include #include #include namespace nall::HID { struct Input { Input(const string& name) : _name(name) {} auto name() const -> string { return _name; } auto value() const -> s16 { return _value; } auto setValue(s16 value) -> void { _value = value; } private: string _name; s16 _value = 0; friend class Group; }; struct Group : vector { Group(const string& name) : _name(name) {} auto name() const -> string { return _name; } auto input(u32 id) -> Input& { return operator[](id); } auto append(const string& name) -> void { vector::append(Input{name}); } auto find(const string& name) const -> maybe { for(auto id : range(size())) { if(operator[](id)._name == name) return id; } return nothing; } private: string _name; friend class Device; }; struct Device : vector { Device(const string& name) : _name(name) {} virtual ~Device() = default; //id => {pathID}-{vendorID}-{productID} auto pathID() const -> u32 { return (u32)(_id >> 32); } //32-63 auto vendorID() const -> u16 { return (u16)(_id >> 16); } //16-31 auto productID() const -> u16 { return (u16)(_id >> 0); } // 0-15 auto setPathID (u32 pathID ) -> void { _id = (u64)pathID << 32 | vendorID() << 16 | productID() << 0; } auto setVendorID (u16 vendorID ) -> void { _id = (u64)pathID() << 32 | vendorID << 16 | productID() << 0; } auto setProductID(u16 productID) -> void { _id = (u64)pathID() << 32 | vendorID() << 16 | productID << 0; } virtual auto isNull() const -> bool { return false; } virtual auto isKeyboard() const -> bool { return false; } virtual auto isMouse() const -> bool { return false; } virtual auto isJoypad() const -> bool { return false; } auto name() const -> string { return _name; } auto id() const -> u64 { return _id; } auto setID(u64 id) -> void { _id = id; } auto group(u32 id) -> Group& { return operator[](id); } auto append(const string& name) -> void { vector::append(Group{name}); } auto find(const string& name) const -> maybe { for(auto id : range(size())) { if(operator[](id)._name == name) return id; } return nothing; } private: string _name; u64 _id = 0; }; struct Null : Device { enum : u16 { GenericVendorID = 0x0000, GenericProductID = 0x0000 }; Null() : Device("Null") {} auto isNull() const -> bool { return true; } }; struct Keyboard : Device { enum : u16 { GenericVendorID = 0x0000, GenericProductID = 0x0001 }; enum GroupID : u32 { Button }; Keyboard() : Device("Keyboard") { append("Button"); } auto isKeyboard() const -> bool { return true; } auto buttons() -> Group& { return group(GroupID::Button); } }; struct Mouse : Device { enum : u16 { GenericVendorID = 0x0000, GenericProductID = 0x0002 }; enum GroupID : u32 { Axis, Button }; Mouse() : Device("Mouse") { append("Axis"), append("Button"); } auto isMouse() const -> bool { return true; } auto axes() -> Group& { return group(GroupID::Axis); } auto buttons() -> Group& { return group(GroupID::Button); } }; struct Joypad : Device { enum : u16 { GenericVendorID = 0x0000, GenericProductID = 0x0003 }; enum GroupID : u32 { Axis, Hat, Trigger, Button }; Joypad() : Device("Joypad") { append("Axis"), append("Hat"), append("Trigger"), append("Button"); } auto isJoypad() const -> bool { return true; } auto axes() -> Group& { return group(GroupID::Axis); } auto hats() -> Group& { return group(GroupID::Hat); } auto triggers() -> Group& { return group(GroupID::Trigger); } auto buttons() -> Group& { return group(GroupID::Button); } auto rumble() const -> bool { return _rumble; } auto setRumble(bool rumble) -> void { _rumble = rumble; } private: bool _rumble = false; }; } ares-126/nall/http/000077500000000000000000000000001415063341600142265ustar00rootroot00000000000000ares-126/nall/http/client.hpp000066400000000000000000000023241415063341600162160ustar00rootroot00000000000000#pragma once #include namespace nall::HTTP { struct Client : Role { auto open(const string& hostname, u16 port = 80) -> bool; auto upload(const Request& request) -> bool; auto download(const Request& request) -> Response; auto close() -> void; ~Client() { close(); } private: s32 fd = -1; addrinfo* info = nullptr; }; inline auto Client::open(const string& hostname, u16 port) -> bool { addrinfo hint = {}; hint.ai_family = AF_UNSPEC; hint.ai_socktype = SOCK_STREAM; hint.ai_flags = AI_ADDRCONFIG; if(getaddrinfo(hostname, string{port}, &hint, &info) != 0) return close(), false; fd = socket(info->ai_family, info->ai_socktype, info->ai_protocol); if(fd < 0) return close(), false; if(connect(fd, info->ai_addr, info->ai_addrlen) < 0) return close(), false; return true; } inline auto Client::upload(const Request& request) -> bool { return Role::upload(fd, request); } inline auto Client::download(const Request& request) -> Response { Response response(request); Role::download(fd, response); return response; } inline auto Client::close() -> void { if(fd) { ::close(fd); fd = -1; } if(info) { freeaddrinfo(info); info = nullptr; } } } ares-126/nall/http/message.hpp000066400000000000000000000060061415063341600163650ustar00rootroot00000000000000#pragma once //httpMessage: base class for httpRequest and httpResponse //provides shared functionality namespace nall::HTTP { struct Variable { string name; string value; }; struct SharedVariable { SharedVariable(const nall::string& name = "", const nall::string& value = "") : shared(new Variable{name, value}) {} explicit operator bool() const { return (bool)shared->name; } auto operator()() const { return shared->value; } auto& operator=(const nall::string& value) { shared->value = value; return *this; } auto name() const { return shared->name; } auto value() const { return shared->value; } auto string() const { return nall::string{shared->value}.strip().replace("\r", ""); } auto boolean() const { return string() == "true"; } auto integer() const { return string().integer(); } auto natural() const { return string().natural(); } auto real() const { return string().real(); } auto& setName(const nall::string& name) { shared->name = name; return *this; } auto& setValue(const nall::string& value = "") { shared->value = value; return *this; } shared_pointer shared; }; struct Variables { auto operator[](const string& name) const -> SharedVariable { for(auto& variable : variables) { if(variable.shared->name.iequals(name)) return variable; } return {}; } auto operator()(const string& name) -> SharedVariable { for(auto& variable : variables) { if(variable.shared->name.iequals(name)) return variable; } return append(name); } auto find(const string& name) const -> vector { vector result; for(auto& variable : variables) { if(variable.shared->name.iequals(name)) result.append(variable); } return result; } auto assign(const string& name, const string& value = "") -> SharedVariable { for(auto& variable : variables) { if(variable.shared->name.iequals(name)) { variable.shared->value = value; return variable; } } return append(name, value); } auto append(const string& name, const string& value = "") -> SharedVariable { SharedVariable variable{name, value}; variables.append(variable); return variable; } auto remove(const string& name) -> void { for(auto n : reverse(range(variables.size()))) { if(variables[n].shared->name.iequals(name)) variables.remove(n); } } auto size() const { return variables.size(); } auto begin() const { return variables.begin(); } auto end() const { return variables.end(); } auto begin() { return variables.begin(); } auto end() { return variables.end(); } vector variables; }; struct Message { using type = Message; virtual auto head(const function& callback) const -> bool = 0; virtual auto setHead() -> bool = 0; virtual auto body(const function& callback) const -> bool = 0; virtual auto setBody() -> bool = 0; Variables header; //private: string _head; string _body; }; } ares-126/nall/http/request.hpp000066400000000000000000000136121415063341600164320ustar00rootroot00000000000000#pragma once #include #include #include namespace nall::HTTP { struct Request : Message { using type = Request; enum class RequestType : u32 { None, Head, Get, Post }; explicit operator bool() const { return requestType() != RequestType::None; } auto head(const function& callback) const -> bool override; auto setHead() -> bool override; auto body(const function& callback) const -> bool override; auto setBody() -> bool override; auto ipv4() const -> bool { return _ipv6 == false; } auto ipv6() const -> bool { return _ipv6 == true; } auto ip() const -> string { return _ip; } auto requestType() const -> RequestType { return _requestType; } auto setRequestType(RequestType value) -> void { _requestType = value; } auto path() const -> string { return _path; } auto setPath(const string& value) -> void { _path = value; } Variables cookie; Variables get; Variables post; //private: bool _ipv6 = false; string _ip; RequestType _requestType = RequestType::None; string _path; }; inline auto Request::head(const function& callback) const -> bool { if(!callback) return false; string output; string request = path(); if(get.size()) { request.append("?"); for(auto& variable : get) { request.append(Encode::URL(variable.name()), "=", Encode::URL(variable.value()), "&"); } request.trimRight("&", 1L); } switch(requestType()) { case RequestType::Head: output.append("HEAD ", request, " HTTP/1.1\r\n"); break; case RequestType::Get : output.append("GET ", request, " HTTP/1.1\r\n"); break; case RequestType::Post: output.append("POST ", request, " HTTP/1.1\r\n"); break; default: return false; } for(auto& variable : header) { output.append(variable.name(), ": ", variable.value(), "\r\n"); } output.append("\r\n"); return callback(output.data(), output.size()); } inline auto Request::setHead() -> bool { auto headers = _head.split("\n"); string request = headers.takeLeft().trimRight("\r", 1L); string requestHost; if(request.iendsWith(" HTTP/1.0")) request.itrimRight(" HTTP/1.0", 1L); else if(request.iendsWith(" HTTP/1.1")) request.itrimRight(" HTTP/1.1", 1L); else return false; if(request.ibeginsWith("HEAD ")) request.itrimLeft("HEAD ", 1L), setRequestType(RequestType::Head); else if(request.ibeginsWith("GET " )) request.itrimLeft("GET ", 1L), setRequestType(RequestType::Get ); else if(request.ibeginsWith("POST ")) request.itrimLeft("POST ", 1L), setRequestType(RequestType::Post); else return false; //decode absolute URIs request.strip().itrimLeft("http://", 1L); if(!request.beginsWith("/")) { auto components = request.split("/", 1L); requestHost = components(0); request = {"/", components(1)}; } auto components = request.split("?", 1L); setPath(components(0)); if(auto queryString = components(1)) { for(auto& block : queryString.split("&")) { auto p = block.split("=", 1L); auto name = Decode::URL(p(0)); auto value = Decode::URL(p(1)); if(name) get.append(name, value); } } for(auto& header : headers) { if(header.beginsWith(" ") || header.beginsWith("\t")) continue; auto part = header.split(":", 1L).strip(); if(!part[0] || part.size() != 2) continue; this->header.append(part[0], part[1]); if(part[0].iequals("Cookie")) { for(auto& block : part[1].split(";")) { auto p = block.split("=", 1L).strip(); auto name = p(0); auto value = p(1).trim("\"", "\"", 1L); if(name) cookie.append(name, value); } } } if(requestHost) header.assign("Host", requestHost); //request URI overrides host header return true; } inline auto Request::body(const function& callback) const -> bool { if(!callback) return false; if(_body) { return callback(_body.data(), _body.size()); } return true; } inline auto Request::setBody() -> bool { if(requestType() == RequestType::Post) { auto contentType = header["Content-Type"].value(); if(contentType.iequals("application/x-www-form-urlencoded")) { for(auto& block : _body.split("&")) { auto p = block.trimRight("\r").split("=", 1L); auto name = Decode::URL(p(0)); auto value = Decode::URL(p(1)); if(name) post.append(name, value); } } else if(contentType.imatch("multipart/form-data; boundary=?*")) { auto boundary = contentType.itrimLeft("multipart/form-data; boundary=", 1L).trim("\"", "\"", 1L); auto blocks = _body.split({"--", boundary}, 1024L); //limit blocks to prevent memory exhaustion for(auto& block : blocks) block.trim("\r\n", "\r\n", 1L); if(blocks.size() < 2 || (blocks.takeLeft(), !blocks.takeRight().beginsWith("--"))) return false; for(auto& block : blocks) { string name; string filename; string contentType; auto segments = block.split("\r\n\r\n", 1L); for(auto& segment : segments(0).split("\r\n")) { auto statement = segment.split(":", 1L); if(statement(0).ibeginsWith("Content-Disposition")) { for(auto& component : statement(1).split(";")) { auto part = component.split("=", 1L).strip(); if(part(0).iequals("name")) { name = part(1).trim("\"", "\"", 1L); } else if(part(0).iequals("filename")) { filename = part(1).trim("\"", "\"", 1L); } } } else if(statement(0).ibeginsWith("Content-Type")) { contentType = statement(1).strip(); } } if(name) { post.append(name, segments(1)); post.append({name, ".filename"}, filename); post.append({name, ".content-type"}, contentType); } } } } return true; } } ares-126/nall/http/response.hpp000066400000000000000000000233121415063341600165760ustar00rootroot00000000000000#pragma once #include namespace nall::HTTP { struct Response : Message { using type = Response; Response() = default; Response(const Request& request) { setRequest(request); } explicit operator bool() const { return responseType() != 0; } auto operator()(u32 responseType) -> type& { return setResponseType(responseType); } auto head(const function& callback) const -> bool override; auto setHead() -> bool override; auto body(const function& callback) const -> bool override; auto setBody() -> bool override; auto request() const -> const Request* { return _request; } auto setRequest(const Request& value) -> type& { _request = &value; return *this; } auto responseType() const -> u32 { return _responseType; } auto setResponseType(u32 value) -> type& { _responseType = value; return *this; } auto hasData() const -> bool { return (bool)_data; } auto data() const -> const vector& { return _data; } auto setData(const vector& value) -> type&; auto hasFile() const -> bool { return (bool)_file; } auto file() const -> const string& { return _file; } auto setFile(const string& value) -> type&; auto hasText() const -> bool { return (bool)_text; } auto text() const -> const string& { return _text; } auto setText(const string& value) -> type&; auto hasBody() const -> bool; auto findContentLength() const -> u32; auto findContentType() const -> string; auto findContentType(const string& suffix) const -> string; auto findResponseType() const -> string; auto findResponseTypeVerbose() const -> string; auto setFileETag() -> void; const Request* _request = nullptr; u32 _responseType = 0; vector _data; string _file; string _text; }; inline auto Response::head(const function& callback) const -> bool { if(!callback) return false; string output; if(auto request = this->request()) { if(auto eTag = header["ETag"]) { if(eTag.value() == request->header["If-None-Match"].value()) { output.append("HTTP/1.1 304 Not Modified\r\n"); output.append("Connection: close\r\n"); output.append("\r\n"); return callback(output.data(), output.size()); } } } output.append("HTTP/1.1 ", findResponseType(), "\r\n"); for(auto& variable : header) { output.append(variable.name(), ": ", variable.value(), "\r\n"); } if(hasBody()) { if(!header["Content-Length"] && !header["Transfer-Encoding"].value().iequals("chunked")) { output.append("Content-Length: ", findContentLength(), "\r\n"); } if(!header["Content-Type"]) { output.append("Content-Type: ", findContentType(), "\r\n"); } } if(!header["Connection"]) { output.append("Connection: close\r\n"); } output.append("\r\n"); return callback(output.data(), output.size()); } inline auto Response::setHead() -> bool { auto headers = _head.split("\n"); string response = headers.takeLeft().trimRight("\r"); if(response.ibeginsWith("HTTP/1.0 ")) response.itrimLeft("HTTP/1.0 ", 1L); else if(response.ibeginsWith("HTTP/1.1 ")) response.itrimLeft("HTTP/1.1 ", 1L); else return false; setResponseType(response.natural()); for(auto& header : headers) { if(header.beginsWith(" ") || header.beginsWith("\t")) continue; auto variable = header.split(":", 1L).strip(); if(variable.size() != 2) continue; this->header.append(variable[0], variable[1]); } return true; } inline auto Response::body(const function& callback) const -> bool { if(!callback) return false; if(!hasBody()) return true; bool chunked = header["Transfer-Encoding"].value() == "chunked"; if(chunked) { string prefix = {hex(findContentLength()), "\r\n"}; if(!callback(prefix.data(), prefix.size())) return false; } if(_body) { if(!callback(_body.data(), _body.size())) return false; } else if(hasData()) { if(!callback(data().data(), data().size())) return false; } else if(hasFile()) { file_map map(file(), file_map::mode::read); if(!callback(map.data(), map.size())) return false; } else if(hasText()) { if(!callback(text().data(), text().size())) return false; } else { string response = findResponseType(); if(!callback(response.data(), response.size())) return false; } if(chunked) { string suffix = {"\r\n0\r\n\r\n"}; if(!callback(suffix.data(), suffix.size())) return false; } return true; } inline auto Response::setBody() -> bool { return true; } inline auto Response::hasBody() const -> bool { if(auto request = this->request()) { if(request->requestType() == Request::RequestType::Head) return false; } if(responseType() == 301) return false; if(responseType() == 302) return false; if(responseType() == 303) return false; if(responseType() == 304) return false; if(responseType() == 307) return false; return true; } inline auto Response::findContentLength() const -> u32 { if(auto contentLength = header["Content-Length"]) return contentLength.value().natural(); if(_body) return _body.size(); if(hasData()) return data().size(); if(hasFile()) return file::size(file()); if(hasText()) return text().size(); return findResponseType().size(); } inline auto Response::findContentType() const -> string { if(auto contentType = header["Content-Type"]) return contentType.value(); if(hasData()) return "application/octet-stream"; if(hasFile()) return findContentType(Location::suffix(file())); return "text/html; charset=utf-8"; } inline auto Response::findContentType(const string& s) const -> string { if(s == ".7z" ) return "application/x-7z-compressed"; if(s == ".avi" ) return "video/avi"; if(s == ".bml" ) return "text/plain; charset=utf-8"; if(s == ".bz2" ) return "application/x-bzip2"; if(s == ".c" ) return "text/plain; charset=utf-8"; if(s == ".cpp" ) return "text/plain; charset=utf-8"; if(s == ".css" ) return "text/css; charset=utf-8"; if(s == ".gif" ) return "image/gif"; if(s == ".gz" ) return "application/gzip"; if(s == ".h" ) return "text/plain; charset=utf-8"; if(s == ".hpp" ) return "text/plain; charset=utf-8"; if(s == ".htm" ) return "text/html; charset=utf-8"; if(s == ".html") return "text/html; charset=utf-8"; if(s == ".ico" ) return "image/x-icon"; if(s == ".jpg" ) return "image/jpeg"; if(s == ".jpeg") return "image/jpeg"; if(s == ".js" ) return "application/javascript"; if(s == ".mka" ) return "audio/x-matroska"; if(s == ".mkv" ) return "video/x-matroska"; if(s == ".mp3" ) return "audio/mpeg"; if(s == ".mp4" ) return "video/mp4"; if(s == ".mpeg") return "video/mpeg"; if(s == ".mpg" ) return "video/mpeg"; if(s == ".ogg" ) return "audio/ogg"; if(s == ".pdf" ) return "application/pdf"; if(s == ".png" ) return "image/png"; if(s == ".rar" ) return "application/x-rar-compressed"; if(s == ".svg" ) return "image/svg+xml"; if(s == ".tar" ) return "application/x-tar"; if(s == ".txt" ) return "text/plain; charset=utf-8"; if(s == ".wav" ) return "audio/vnd.wave"; if(s == ".webm") return "video/webm"; if(s == ".xml" ) return "text/xml; charset=utf-8"; if(s == ".xz" ) return "application/x-xz"; if(s == ".zip" ) return "application/zip"; return "application/octet-stream"; //binary } inline auto Response::findResponseType() const -> string { switch(responseType()) { case 200: return "200 OK"; case 301: return "301 Moved Permanently"; case 302: return "302 Found"; case 303: return "303 See Other"; case 304: return "304 Not Modified"; case 307: return "307 Temporary Redirect"; case 400: return "400 Bad Request"; case 403: return "403 Forbidden"; case 404: return "404 Not Found"; case 500: return "500 Internal Server Error"; case 501: return "501 Not Implemented"; case 503: return "503 Service Unavailable"; } return "501 Not Implemented"; } inline auto Response::findResponseTypeVerbose() const -> string { switch(responseType()) { case 400: return "The server was unable to understand your request."; case 403: return "You are not authorized to access this resource."; case 404: return "The requested content could not be found."; case 500: return "The server has encountered an error."; case 501: return "The requested feature has not been implemented."; case 503: return "The requested service is not currently available."; } return findResponseType(); //fallback for uncommon responses } inline auto Response::setData(const vector& value) -> type& { _data = value; header.assign("Content-Length", value.size()); return *this; } inline auto Response::setFile(const string& value) -> type& { //block path escalation exploits ("../" and "..\" in the file location) bool valid = true; for(u32 n : range(value.size())) { if(value(n + 0, '\0') != '.') continue; if(value(n + 1, '\0') != '.') continue; if(value(n + 2, '\0') != '/' && value(n + 2, '\0') != '\\') continue; valid = false; break; } if(!valid) return *this; //cache images for seven days auto suffix = Location::suffix(value); u32 maxAge = 0; if(suffix == ".svg" || suffix == ".ico" || suffix == ".png" || suffix == ".gif" || suffix == ".jpg" || suffix == ".jpeg") { maxAge = 7 * 24 * 60 * 60; } _file = value; header.assign("Content-Length", file::size(value)); header.assign("ETag", {"\"", chrono::utc::datetime(file::timestamp(value, file::time::modify)), "\""}); if(maxAge == 0) { header.assign("Cache-Control", {"public"}); } else { header.assign("Cache-Control", {"public, max-age=", maxAge}); } return *this; } inline auto Response::setText(const string& value) -> type& { _text = value; header.assign("Content-Length", value.size()); return *this; } } ares-126/nall/http/role.hpp000066400000000000000000000105061415063341600157020ustar00rootroot00000000000000#pragma once //Role: base class for Client and Server //provides shared functionality #include #include namespace nall::HTTP { struct Role { struct Settings { s32 connectionLimit = 1 * 1024; //server s32 headSizeLimit = 16 * 1024; //client, server s32 bodySizeLimit = 65536 * 1024; //client, server s32 chunkSize = 32 * 1024; //client, server s32 threadStackSize = 128 * 1024; //server s32 timeoutReceive = 15 * 1000; //server s32 timeoutSend = 15 * 1000; //server } settings; auto configure(const string& parameters) -> bool; auto download(s32 fd, Message& message) -> bool; auto upload(s32 fd, const Message& message) -> bool; }; inline auto Role::configure(const string& parameters) -> bool { auto document = BML::unserialize(parameters); for(auto parameter : document) { auto name = parameter.name(); auto value = parameter.integer(); if(0); else if(name == "connectionLimit") settings.connectionLimit = value; else if(name == "headSizeLimit") settings.headSizeLimit = value; else if(name == "bodySizeLimit") settings.bodySizeLimit = value; else if(name == "chunkSize") settings.chunkSize = value; else if(name == "threadStackSize") settings.threadStackSize = value; else if(name == "timeoutReceive") settings.timeoutReceive = value; else if(name == "timeoutSend") settings.timeoutSend = value; } return true; } inline auto Role::download(s32 fd, Message& message) -> bool { auto& head = message._head; auto& body = message._body; string chunk; u8 packet[settings.chunkSize], *p = nullptr; head.reset(), head.reserve(4095); body.reset(), body.reserve(4095); bool headReceived = false; bool chunked = false; bool chunkReceived = false; bool chunkFooterReceived = true; s32 length = 0; s32 chunkLength = 0; s32 contentLength = 0; while(true) { if(auto limit = settings.headSizeLimit) if(head.size() >= limit) return false; if(auto limit = settings.bodySizeLimit) if(body.size() >= limit) return false; if(headReceived && !chunked && body.size() >= contentLength) { body.resize(contentLength); break; } if(length == 0) { length = recv(fd, packet, settings.chunkSize, MSG_NOSIGNAL); if(length <= 0) return false; p = packet; } if(!headReceived) { head.append((char)*p++); --length; if(head.endsWith("\r\n\r\n") || head.endsWith("\n\n")) { headReceived = true; if(!message.setHead()) return false; chunked = message.header["Transfer-Encoding"].value().iequals("chunked"); contentLength = message.header["Content-Length"].value().natural(); } continue; } if(chunked && !chunkReceived) { char n = *p++; --length; if(!chunkFooterReceived) { if(n == '\n') chunkFooterReceived = true; continue; } chunk.append(n); if(chunk.endsWith("\r\n") || chunk.endsWith("\n")) { chunkReceived = true; chunkLength = chunk.hex(); if(chunkLength == 0) break; chunk.reset(); } continue; } if(!chunked) { body.resize(body.size() + length); memory::copy(body.get() + body.size() - length, p, length); p += length; length = 0; } else { s32 transferLength = min(length, chunkLength); body.resize(body.size() + transferLength); memory::copy(body.get() + body.size() - transferLength, p, transferLength); p += transferLength; length -= transferLength; chunkLength -= transferLength; if(chunkLength == 0) { chunkReceived = false; chunkFooterReceived = false; } } } if(!message.setBody()) return false; return true; } inline auto Role::upload(s32 fd, const Message& message) -> bool { auto transfer = [&](const u8* data, u32 size) -> bool { while(size) { s32 length = send(fd, data, min(size, settings.chunkSize), MSG_NOSIGNAL); if(length < 0) return false; data += length; size -= length; } return true; }; if(message.head([&](const u8* data, u32 size) -> bool { return transfer(data, size); })) { if(message.body([&](const u8* data, u32 size) -> bool { return transfer(data, size); })) { return true; } } return false; } } ares-126/nall/http/server.hpp000066400000000000000000000144771415063341600162620ustar00rootroot00000000000000#pragma once #include #include namespace nall::HTTP { struct Server : Role, service { auto open(u16 port = 8080, const string& serviceName = "", const string& command = "") -> bool; auto main(const function& function = {}) -> void; auto scan() -> string; auto close() -> void; ~Server() { close(); } private: function callback; std::atomic connections{0}; s32 fd4 = -1; s32 fd6 = -1; struct sockaddr_in addrin4 = {0}; struct sockaddr_in6 addrin6 = {0}; auto ipv4() const -> bool { return fd4 >= 0; } auto ipv6() const -> bool { return fd6 >= 0; } auto ipv4_close() -> void { if(fd4 >= 0) ::close(fd4); fd4 = -1; } auto ipv6_close() -> void { if(fd6 >= 0) ::close(fd6); fd6 = -1; } auto ipv4_scan() -> bool; auto ipv6_scan() -> bool; }; inline auto Server::open(u16 port, const string& serviceName, const string& command) -> bool { if(serviceName) { if(!service::command(serviceName, command)) return false; } fd4 = socket(AF_INET, SOCK_STREAM, 0); fd6 = socket(AF_INET6, SOCK_STREAM, 0); if(!ipv4() && !ipv6()) return false; { #if defined(SO_RCVTIMEO) if(settings.timeoutReceive) { struct timeval rcvtimeo; rcvtimeo.tv_sec = settings.timeoutReceive / 1000; rcvtimeo.tv_usec = settings.timeoutReceive % 1000 * 1000; if(ipv4()) setsockopt(fd4, SOL_SOCKET, SO_RCVTIMEO, &rcvtimeo, sizeof(struct timeval)); if(ipv6()) setsockopt(fd6, SOL_SOCKET, SO_RCVTIMEO, &rcvtimeo, sizeof(struct timeval)); } #endif #if defined(SO_SNDTIMEO) if(settings.timeoutSend) { struct timeval sndtimeo; sndtimeo.tv_sec = settings.timeoutSend / 1000; sndtimeo.tv_usec = settings.timeoutSend % 1000 * 1000; if(ipv4()) setsockopt(fd4, SOL_SOCKET, SO_SNDTIMEO, &sndtimeo, sizeof(struct timeval)); if(ipv6()) setsockopt(fd6, SOL_SOCKET, SO_SNDTIMEO, &sndtimeo, sizeof(struct timeval)); } #endif #if defined(SO_NOSIGPIPE) //BSD, OSX s32 nosigpipe = 1; if(ipv4()) setsockopt(fd4, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(s32)); if(ipv6()) setsockopt(fd6, SOL_SOCKET, SO_NOSIGPIPE, &nosigpipe, sizeof(s32)); #endif #if defined(SO_REUSEADDR) //BSD, Linux, OSX s32 reuseaddr = 1; if(ipv4()) setsockopt(fd4, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(s32)); if(ipv6()) setsockopt(fd6, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(s32)); #endif #if defined(SO_REUSEPORT) //BSD, OSX s32 reuseport = 1; if(ipv4()) setsockopt(fd4, SOL_SOCKET, SO_REUSEPORT, &reuseport, sizeof(s32)); if(ipv6()) setsockopt(fd6, SOL_SOCKET, SO_REUSEPORT, &reuseport, sizeof(s32)); #endif } addrin4.sin_family = AF_INET; addrin4.sin_addr.s_addr = htonl(INADDR_ANY); addrin4.sin_port = htons(port); addrin6.sin6_family = AF_INET6; addrin6.sin6_addr = in6addr_any; addrin6.sin6_port = htons(port); if(bind(fd4, (struct sockaddr*)&addrin4, sizeof(addrin4)) < 0 || listen(fd4, SOMAXCONN) < 0) ipv4_close(); if(bind(fd6, (struct sockaddr*)&addrin6, sizeof(addrin6)) < 0 || listen(fd6, SOMAXCONN) < 0) ipv6_close(); return ipv4() || ipv6(); } inline auto Server::main(const function& function) -> void { callback = function; } inline auto Server::scan() -> string { if(auto command = service::receive()) return command; if(connections >= settings.connectionLimit) return "busy"; if(ipv4() && ipv4_scan()) return "ok"; if(ipv6() && ipv6_scan()) return "ok"; return "idle"; } inline auto Server::ipv4_scan() -> bool { struct pollfd query = {0}; query.fd = fd4; query.events = POLLIN; poll(&query, 1, 0); if(query.fd == fd4 && query.revents & POLLIN) { ++connections; thread::create([&](uintptr) { thread::detach(); s32 clientfd = -1; struct sockaddr_in settings = {0}; socklen_t socklen = sizeof(sockaddr_in); clientfd = accept(fd4, (struct sockaddr*)&settings, &socklen); if(clientfd < 0) return; u32 ip = ntohl(settings.sin_addr.s_addr); Request request; request._ipv6 = false; request._ip = { (u8)(ip >> 24), ".", (u8)(ip >> 16), ".", (u8)(ip >> 8), ".", (u8)(ip >> 0) }; if(download(clientfd, request) && callback) { auto response = callback(request); upload(clientfd, response); } else { upload(clientfd, Response()); //"501 Not Implemented" } ::close(clientfd); --connections; }, 0, settings.threadStackSize); return true; } return false; } inline auto Server::ipv6_scan() -> bool { struct pollfd query = {0}; query.fd = fd6; query.events = POLLIN; poll(&query, 1, 0); if(query.fd == fd6 && query.revents & POLLIN) { ++connections; thread::create([&](uintptr) { thread::detach(); s32 clientfd = -1; struct sockaddr_in6 settings = {0}; socklen_t socklen = sizeof(sockaddr_in6); clientfd = accept(fd6, (struct sockaddr*)&settings, &socklen); if(clientfd < 0) return; u8* ip = settings.sin6_addr.s6_addr; u16 ipSegment[8]; for(auto n : range(8)) ipSegment[n] = ip[n * 2 + 0] * 256 + ip[n * 2 + 1]; Request request; request._ipv6 = true; //RFC5952 IPv6 encoding: the first longest 2+ consecutive zero-sequence is compressed to "::" s32 zeroOffset = -1; s32 zeroLength = 0; s32 zeroCounter = 0; for(auto n : range(8)) { u16 value = ipSegment[n]; if(value == 0) zeroCounter++; if(zeroCounter > zeroLength) { zeroLength = zeroCounter; zeroOffset = 1 + n - zeroLength; } if(value != 0) zeroCounter = 0; } if(zeroLength == 1) zeroOffset = -1; for(u32 n = 0; n < 8;) { if(n == zeroOffset) { request._ip.append(n == 0 ? "::" : ":"); n += zeroLength; } else { u16 value = ipSegment[n]; request._ip.append(hex(value), n++ != 7 ? ":" : ""); } } if(download(clientfd, request) && callback) { auto response = callback(request); upload(clientfd, response); } else { upload(clientfd, Response()); //"501 Not Implemented" } ::close(clientfd); --connections; }, 0, settings.threadStackSize); return true; } return false; } inline auto Server::close() -> void { ipv4_close(); ipv6_close(); } } ares-126/nall/image.hpp000066400000000000000000000147461415063341600150560ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include namespace nall { struct image { enum class blend : u32 { add, sourceAlpha, //color = sourceColor * sourceAlpha + targetColor * (1 - sourceAlpha) sourceColor, //color = sourceColor targetAlpha, //color = targetColor * targetAlpha + sourceColor * (1 - targetAlpha) targetColor, //color = targetColor }; struct channel { channel(u64 mask, u32 depth, u32 shift) : _mask(mask), _depth(depth), _shift(shift) { } auto operator==(const channel& source) const -> bool { return _mask == source._mask && _depth == source._depth && _shift == source._shift; } auto operator!=(const channel& source) const -> bool { return !operator==(source); } auto mask() const { return _mask; } auto depth() const { return _depth; } auto shift() const { return _shift; } private: u64 _mask; u32 _depth; u32 _shift; }; //core.hpp image(const image& source); image(image&& source); image(bool endian, u32 depth, u64 alphaMask, u64 redMask, u64 greenMask, u64 blueMask); image(const string& filename); image(const void* data, u32 size); image(const vector& buffer); template image(const u8 (&Name)[Size]); image(); ~image(); auto operator=(const image& source) -> image&; auto operator=(image&& source) -> image&; explicit operator bool() const; auto operator==(const image& source) const -> bool; auto operator!=(const image& source) const -> bool; auto read(const u8* data) const -> u64; auto write(u8* data, u64 value) const -> void; auto free() -> void; auto load(const string& filename) -> bool; auto copy(const void* data, u32 pitch, u32 width, u32 height) -> void; auto allocate(u32 width, u32 height) -> void; //fill.hpp auto fill(u64 color = 0) -> void; auto gradient(u64 a, u64 b, u64 c, u64 d) -> void; auto gradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY, function callback) -> void; auto crossGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; auto diamondGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; auto horizontalGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; auto radialGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; auto sphericalGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; auto squareGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; auto verticalGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void; //scale.hpp auto scale(u32 width, u32 height, bool linear = true) -> void; //blend.hpp auto impose(blend mode, u32 targetX, u32 targetY, image source, u32 x, u32 y, u32 width, u32 height) -> void; //utility.hpp auto shrink(u64 transparentColor = 0) -> void; auto crop(u32 x, u32 y, u32 width, u32 height) -> bool; auto alphaBlend(u64 alphaColor) -> void; auto alphaMultiply() -> void; auto transform(const image& source = {}) -> void; auto transform(bool endian, u32 depth, u64 alphaMask, u64 redMask, u64 greenMask, u64 blueMask) -> void; //static.hpp static auto bitDepth(u64 color) -> u32; static auto bitShift(u64 color) -> u32; static auto normalize(u64 color, u32 sourceDepth, u32 targetDepth) -> u64; //access auto data() { return _data; } auto data() const { return _data; } auto width() const { return _width; } auto height() const { return _height; } auto endian() const { return _endian; } auto depth() const { return _depth; } auto stride() const { return (_depth + 7) >> 3; } auto pitch() const { return _width * stride(); } auto size() const { return _height * pitch(); } auto alpha() const { return _alpha; } auto red() const { return _red; } auto green() const { return _green; } auto blue() const { return _blue; } private: //core.hpp auto allocate(u32 width, u32 height, u32 stride) -> u8*; //scale.hpp auto scaleLinearWidth(u32 width) -> void; auto scaleLinearHeight(u32 height) -> void; auto scaleLinear(u32 width, u32 height) -> void; auto scaleNearest(u32 width, u32 height) -> void; //load.hpp auto loadBMP(const string& filename) -> bool; auto loadBMP(const u8* data, u32 size) -> bool; auto loadPNG(const string& filename) -> bool; auto loadPNG(const u8* data, u32 size) -> bool; //interpolation.hpp auto isplit(u64* component, u64 color) -> void; auto imerge(const u64* component) -> u64; auto interpolate1f(u64 a, u64 b, f64 x) -> u64; auto interpolate1f(u64 a, u64 b, u64 c, u64 d, f64 x, f64 y) -> u64; auto interpolate1i(s64 a, s64 b, u32 x) -> u64; auto interpolate1i(s64 a, s64 b, s64 c, s64 d, u32 x, u32 y) -> u64; auto interpolate4f(u64 a, u64 b, f64 x) -> u64; auto interpolate4f(u64 a, u64 b, u64 c, u64 d, f64 x, f64 y) -> u64; auto interpolate4i(u64 a, u64 b, u32 x) -> u64; auto interpolate4i(u64 a, u64 b, u64 c, u64 d, u32 x, u32 y) -> u64; u8* _data = nullptr; u32 _width = 0; u32 _height = 0; bool _endian = 0; //0 = lsb, 1 = msb u32 _depth = 32; channel _alpha{255u << 24, 8, 24}; channel _red {255u << 16, 8, 16}; channel _green{255u << 8, 8, 8}; channel _blue {255u << 0, 8, 0}; }; struct multiFactorImage : public image { using image::image; multiFactorImage(const multiFactorImage& source); multiFactorImage(multiFactorImage&& source); multiFactorImage(const image& lowDPI, const image& highDPI); multiFactorImage(const image& source); multiFactorImage(image&& source); multiFactorImage(); ~multiFactorImage(); auto operator=(const multiFactorImage& source) -> multiFactorImage&; auto operator=(multiFactorImage&& source) -> multiFactorImage&; auto operator==(const multiFactorImage& source) const -> bool; auto operator!=(const multiFactorImage& source) const -> bool; const image& lowDPI() const { return *this; } const image& highDPI() const { return _highDPI; } private: image _highDPI; }; } #include #include #include #include #include #include #include #include #include ares-126/nall/image/000077500000000000000000000000001415063341600143315ustar00rootroot00000000000000ares-126/nall/image/blend.hpp000066400000000000000000000046001415063341600161260ustar00rootroot00000000000000#pragma once namespace nall { inline auto image::impose(blend mode, u32 targetX, u32 targetY, image source, u32 sourceX, u32 sourceY, u32 sourceWidth, u32 sourceHeight) -> void { source.transform(_endian, _depth, _alpha.mask(), _red.mask(), _green.mask(), _blue.mask()); for(u32 y = 0; y < sourceHeight; y++) { const u8* sp = source._data + source.pitch() * (sourceY + y) + source.stride() * sourceX; u8* dp = _data + pitch() * (targetY + y) + stride() * targetX; for(u32 x = 0; x < sourceWidth; x++) { u64 sourceColor = source.read(sp); u64 targetColor = read(dp); s64 sa = (sourceColor & _alpha.mask()) >> _alpha.shift(); s64 sr = (sourceColor & _red.mask() ) >> _red.shift(); s64 sg = (sourceColor & _green.mask()) >> _green.shift(); s64 sb = (sourceColor & _blue.mask() ) >> _blue.shift(); s64 da = (targetColor & _alpha.mask()) >> _alpha.shift(); s64 dr = (targetColor & _red.mask() ) >> _red.shift(); s64 dg = (targetColor & _green.mask()) >> _green.shift(); s64 db = (targetColor & _blue.mask() ) >> _blue.shift(); u64 a, r, g, b; switch(mode) { case blend::add: a = max(sa, da); r = min(_red.mask() >> _red.shift(), ((sr * sa) >> _alpha.depth()) + ((dr * da) >> _alpha.depth())); g = min(_green.mask() >> _green.shift(), ((sg * sa) >> _alpha.depth()) + ((dg * da) >> _alpha.depth())); b = min(_blue.mask() >> _blue.shift(), ((sb * sa) >> _alpha.depth()) + ((db * da) >> _alpha.depth())); break; case blend::sourceAlpha: a = max(sa, da); r = dr + (((sr - dr) * sa) >> _alpha.depth()); g = dg + (((sg - dg) * sa) >> _alpha.depth()); b = db + (((sb - db) * sa) >> _alpha.depth()); break; case blend::sourceColor: a = sa; r = sr; g = sg; b = sb; break; case blend::targetAlpha: a = max(sa, da); r = sr + (((dr - sr) * da) >> _alpha.depth()); g = sg + (((dg - sg) * da) >> _alpha.depth()); b = sb + (((db - sb) * da) >> _alpha.depth()); break; case blend::targetColor: a = da; r = dr; g = dg; b = db; break; } write(dp, (a << _alpha.shift()) | (r << _red.shift()) | (g << _green.shift()) | (b << _blue.shift())); sp += source.stride(); dp += stride(); } } } } ares-126/nall/image/core.hpp000066400000000000000000000104451415063341600157760ustar00rootroot00000000000000#pragma once namespace nall { inline image::image(const image& source) { operator=(source); } inline image::image(image&& source) { operator=(forward(source)); } inline image::image(bool endian, u32 depth, u64 alphaMask, u64 redMask, u64 greenMask, u64 blueMask) { _endian = endian; _depth = depth; _alpha = {alphaMask, bitDepth(alphaMask), bitShift(alphaMask)}; _red = {redMask, bitDepth(redMask), bitShift(redMask )}; _green = {greenMask, bitDepth(greenMask), bitShift(greenMask)}; _blue = {blueMask, bitDepth(blueMask), bitShift(blueMask )}; } inline image::image(const string& filename) { load(filename); } inline image::image(const void* data_, u32 size) { auto data = (const u8*)data_; if(size < 4); else if(data[0] == 'B' && data[1] == 'M') loadBMP(data, size); else if(data[1] == 'P' && data[2] == 'N' && data[3] == 'G') loadPNG(data, size); } inline image::image(const vector& buffer) : image(buffer.data(), buffer.size()) { } template inline image::image(const u8 (&Name)[Size]) : image(Name, Size) { } inline image::image() { } inline image::~image() { free(); } inline auto image::operator=(const image& source) -> image& { if(this == &source) return *this; free(); _width = source._width; _height = source._height; _endian = source._endian; _depth = source._depth; _alpha = source._alpha; _red = source._red; _green = source._green; _blue = source._blue; _data = allocate(_width, _height, stride()); memory::copy(_data, source._data, source.size()); return *this; } inline auto image::operator=(image&& source) -> image& { if(this == &source) return *this; free(); _width = source._width; _height = source._height; _endian = source._endian; _depth = source._depth; _alpha = source._alpha; _red = source._red; _green = source._green; _blue = source._blue; _data = source._data; source._data = nullptr; return *this; } inline image::operator bool() const { return _data && _width && _height; } inline auto image::operator==(const image& source) const -> bool { if(_width != source._width) return false; if(_height != source._height) return false; if(_endian != source._endian) return false; if(_depth != source._depth) return false; if(_alpha != source._alpha) return false; if(_red != source._red) return false; if(_green != source._green) return false; if(_blue != source._blue) return false; return memory::compare(_data, source._data, size()) == 0; } inline auto image::operator!=(const image& source) const -> bool { return !operator==(source); } inline auto image::read(const u8* data) const -> u64 { u64 result = 0; if(_endian == 0) { for(s32 n = stride() - 1; n >= 0; n--) result = (result << 8) | data[n]; } else { for(s32 n = 0; n < stride(); n++) result = (result << 8) | data[n]; } return result; } inline auto image::write(u8* data, u64 value) const -> void { if(_endian == 0) { for(s32 n = 0; n < stride(); n++) { data[n] = value; value >>= 8; } } else { for(s32 n = stride() - 1; n >= 0; n--) { data[n] = value; value >>= 8; } } } inline auto image::free() -> void { if(_data) delete[] _data; _data = nullptr; } inline auto image::load(const string& filename) -> bool { if(loadBMP(filename) == true) return true; if(loadPNG(filename) == true) return true; return false; } //assumes image and data are in the same format; pitch is adapted to image inline auto image::copy(const void* data, u32 pitch, u32 width, u32 height) -> void { allocate(width, height); for(u32 y : range(height)) { auto input = (const u8*)data + y * pitch; auto output = (u8*)_data + y * this->pitch(); memory::copy(output, input, width * stride()); } } inline auto image::allocate(u32 width, u32 height) -> void { if(_data && _width == width && _height == height) return; free(); _width = width; _height = height; _data = allocate(_width, _height, stride()); } //private inline auto image::allocate(u32 width, u32 height, u32 stride) -> u8* { //allocate 1x1 larger than requested; so that linear interpolation does not require bounds-checking u32 size = width * height * stride; u32 padding = width * stride + stride; auto data = new u8[size + padding]; memory::fill(data + size, padding); return data; } } ares-126/nall/image/fill.hpp000066400000000000000000000054001415063341600157670ustar00rootroot00000000000000#pragma once namespace nall { inline auto image::fill(u64 color) -> void { for(u32 y = 0; y < _height; y++) { u8* dp = _data + pitch() * y; for(u32 x = 0; x < _width; x++) { write(dp, color); dp += stride(); } } } inline auto image::gradient(u64 a, u64 b, u64 c, u64 d) -> void { for(u32 y = 0; y < _height; y++) { u8* dp = _data + pitch() * y; f64 muY = (f64)y / (f64)_height; for(u32 x = 0; x < _width; x++) { f64 muX = (f64)x / (f64)_width; write(dp, interpolate4f(a, b, c, d, muX, muY)); dp += stride(); } } } inline auto image::gradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY, function callback) -> void { for(s32 y = 0; y < _height; y++) { u8* dp = _data + pitch() * y; f64 py = max(-radiusY, min(+radiusY, y - centerY)) * 1.0 / radiusY; for(s32 x = 0; x < _width; x++) { f64 px = max(-radiusX, min(+radiusX, x - centerX)) * 1.0 / radiusX; f64 mu = max(0.0, min(1.0, callback(px, py))); if(mu != mu) mu = 1.0; //NaN write(dp, interpolate4f(a, b, mu)); dp += stride(); } } } inline auto image::crossGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { x = fabs(x), y = fabs(y); return min(x, y) * min(x, y); }); } inline auto image::diamondGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { return fabs(x) + fabs(y); }); } inline auto image::horizontalGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { return fabs(x); }); } inline auto image::radialGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { return sqrt(x * x + y * y); }); } inline auto image::sphericalGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { return x * x + y * y; }); } inline auto image::squareGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { return max(fabs(x), fabs(y)); }); } inline auto image::verticalGradient(u64 a, u64 b, s32 radiusX, s32 radiusY, s32 centerX, s32 centerY) -> void { return gradient(a, b, radiusX, radiusY, centerX, centerY, [](f64 x, f64 y) -> f64 { return fabs(y); }); } } ares-126/nall/image/interpolation.hpp000066400000000000000000000041041415063341600177300ustar00rootroot00000000000000#pragma once namespace nall { inline auto image::isplit(u64 c[4], u64 color) -> void { c[0] = (color & _alpha.mask()) >> _alpha.shift(); c[1] = (color & _red.mask() ) >> _red.shift(); c[2] = (color & _green.mask()) >> _green.shift(); c[3] = (color & _blue.mask() ) >> _blue.shift(); } inline auto image::imerge(const u64 c[4]) -> u64 { return c[0] << _alpha.shift() | c[1] << _red.shift() | c[2] << _green.shift() | c[3] << _blue.shift(); } inline auto image::interpolate1f(u64 a, u64 b, f64 x) -> u64 { return a * (1.0 - x) + b * x; } inline auto image::interpolate1f(u64 a, u64 b, u64 c, u64 d, f64 x, f64 y) -> u64 { return a * (1.0 - x) * (1.0 - y) + b * x * (1.0 - y) + c * (1.0 - x) * y + d * x * y; } inline auto image::interpolate1i(s64 a, s64 b, u32 x) -> u64 { return a + (((b - a) * x) >> 32); //a + (b - a) * x } inline auto image::interpolate1i(s64 a, s64 b, s64 c, s64 d, u32 x, u32 y) -> u64 { a = a + (((b - a) * x) >> 32); //a + (b - a) * x c = c + (((d - c) * x) >> 32); //c + (d - c) * x return a + (((c - a) * y) >> 32); //a + (c - a) * y } inline auto image::interpolate4f(u64 a, u64 b, f64 x) -> u64 { u64 o[4], pa[4], pb[4]; isplit(pa, a), isplit(pb, b); for(u32 n = 0; n < 4; n++) o[n] = interpolate1f(pa[n], pb[n], x); return imerge(o); } inline auto image::interpolate4f(u64 a, u64 b, u64 c, u64 d, f64 x, f64 y) -> u64 { u64 o[4], pa[4], pb[4], pc[4], pd[4]; isplit(pa, a), isplit(pb, b), isplit(pc, c), isplit(pd, d); for(u32 n = 0; n < 4; n++) o[n] = interpolate1f(pa[n], pb[n], pc[n], pd[n], x, y); return imerge(o); } inline auto image::interpolate4i(u64 a, u64 b, u32 x) -> u64 { u64 o[4], pa[4], pb[4]; isplit(pa, a), isplit(pb, b); for(u32 n = 0; n < 4; n++) o[n] = interpolate1i(pa[n], pb[n], x); return imerge(o); } inline auto image::interpolate4i(u64 a, u64 b, u64 c, u64 d, u32 x, u32 y) -> u64 { u64 o[4], pa[4], pb[4], pc[4], pd[4]; isplit(pa, a), isplit(pb, b), isplit(pc, c), isplit(pd, d); for(u32 n = 0; n < 4; n++) o[n] = interpolate1i(pa[n], pb[n], pc[n], pd[n], x, y); return imerge(o); } } ares-126/nall/image/load.hpp000066400000000000000000000053471415063341600157720ustar00rootroot00000000000000#pragma once namespace nall { inline auto image::loadBMP(const string& filename) -> bool { if(!file::exists(filename)) return false; auto buffer = file::read(filename); return loadBMP(buffer.data(), buffer.size()); } inline auto image::loadBMP(const u8* bmpData, u32 bmpSize) -> bool { Decode::BMP source; if(!source.load(bmpData, bmpSize)) return false; allocate(source.width(), source.height()); const u32* sp = source.data(); u8* dp = _data; for(u32 y = 0; y < _height; y++) { for(u32 x = 0; x < _width; x++) { u32 color = *sp++; u64 a = normalize((u8)(color >> 24), 8, _alpha.depth()); u64 r = normalize((u8)(color >> 16), 8, _red.depth()); u64 g = normalize((u8)(color >> 8), 8, _green.depth()); u64 b = normalize((u8)(color >> 0), 8, _blue.depth()); write(dp, (a << _alpha.shift()) | (r << _red.shift()) | (g << _green.shift()) | (b << _blue.shift())); dp += stride(); } } return true; } inline auto image::loadPNG(const string& filename) -> bool { if(!file::exists(filename)) return false; auto buffer = file::read(filename); return loadPNG(buffer.data(), buffer.size()); } inline auto image::loadPNG(const u8* pngData, u32 pngSize) -> bool { Decode::PNG source; if(!source.load(pngData, pngSize)) return false; allocate(source.info.width, source.info.height); const u8* sp = source.data; u8* dp = _data; auto decode = [&]() -> u64 { u64 p = 0, r = 0, g = 0, b = 0, a = 0; switch(source.info.colorType) { case 0: //L r = g = b = source.readbits(sp); a = (1 << source.info.bitDepth) - 1; break; case 2: //R,G,B r = source.readbits(sp); g = source.readbits(sp); b = source.readbits(sp); a = (1 << source.info.bitDepth) - 1; break; case 3: //P p = source.readbits(sp); r = source.info.palette[p][0]; g = source.info.palette[p][1]; b = source.info.palette[p][2]; a = (1 << source.info.bitDepth) - 1; break; case 4: //L,A r = g = b = source.readbits(sp); a = source.readbits(sp); break; case 6: //R,G,B,A r = source.readbits(sp); g = source.readbits(sp); b = source.readbits(sp); a = source.readbits(sp); break; } a = normalize(a, source.info.bitDepth, _alpha.depth()); r = normalize(r, source.info.bitDepth, _red.depth()); g = normalize(g, source.info.bitDepth, _green.depth()); b = normalize(b, source.info.bitDepth, _blue.depth()); return (a << _alpha.shift()) | (r << _red.shift()) | (g << _green.shift()) | (b << _blue.shift()); }; for(u32 y = 0; y < _height; y++) { for(u32 x = 0; x < _width; x++) { write(dp, decode()); dp += stride(); } } return true; } } ares-126/nall/image/multifactor.hpp000066400000000000000000000026361415063341600174020ustar00rootroot00000000000000#pragma once namespace nall { inline multiFactorImage::multiFactorImage(const multiFactorImage& source) { (*this) = source; } inline multiFactorImage::multiFactorImage(multiFactorImage&& source) { operator=(forward(source)); } inline multiFactorImage::multiFactorImage(const image& lowDPI, const image& highDPI) { (*(image*)this) = lowDPI; _highDPI = highDPI; } inline multiFactorImage::multiFactorImage(const image& source) { (*(image*)this) = source; } inline multiFactorImage::multiFactorImage(image&& source) { operator=(forward(source)); } inline multiFactorImage::multiFactorImage() { } inline multiFactorImage::~multiFactorImage() { } inline auto multiFactorImage::operator=(const multiFactorImage& source) -> multiFactorImage& { if(this == &source) return *this; (*(image*)this) = source; _highDPI = source._highDPI; return *this; } inline auto multiFactorImage::operator=(multiFactorImage&& source) -> multiFactorImage& { if(this == &source) return *this; (*(image*)this) = source; _highDPI = source._highDPI; return *this; } inline auto multiFactorImage::operator==(const multiFactorImage& source) const -> bool { if((const image&)*this != (const image&)source) return false; return _highDPI != source._highDPI; } inline auto multiFactorImage::operator!=(const multiFactorImage& source) const -> bool { return !operator==(source); } } ares-126/nall/image/scale.hpp000066400000000000000000000113571415063341600161400ustar00rootroot00000000000000#pragma once namespace nall { inline auto image::scale(u32 outputWidth, u32 outputHeight, bool linear) -> void { if(!_data) return; if(_width == outputWidth && _height == outputHeight) return; //no scaling necessary if(linear == false) return scaleNearest(outputWidth, outputHeight); if(_width == outputWidth ) return scaleLinearHeight(outputHeight); if(_height == outputHeight) return scaleLinearWidth(outputWidth); //find fastest scaling method, based on number of interpolation operations required //magnification usually benefits from two-pass linear interpolation //minification usually benefits from one-pass bilinear interpolation u32 d1wh = ((_width * outputWidth ) + (outputWidth * outputHeight)) * 1; u32 d1hw = ((_height * outputHeight) + (outputWidth * outputHeight)) * 1; u32 d2wh = (outputWidth * outputHeight) * 3; if(d1wh <= d1hw && d1wh <= d2wh) return scaleLinearWidth(outputWidth), scaleLinearHeight(outputHeight); if(d1hw <= d2wh) return scaleLinearHeight(outputHeight), scaleLinearWidth(outputWidth); return scaleLinear(outputWidth, outputHeight); } inline auto image::scaleLinearWidth(u32 outputWidth) -> void { u8* outputData = allocate(outputWidth, _height, stride()); u32 outputPitch = outputWidth * stride(); u64 xstride = ((u64)(_width - 1) << 32) / max(1u, outputWidth - 1); for(u32 y = 0; y < _height; y++) { u64 xfraction = 0; const u8* sp = _data + pitch() * y; u8* dp = outputData + outputPitch * y; u64 a = read(sp); u64 b = read(sp + stride()); sp += stride(); u32 x = 0; while(true) { while(xfraction < 0x100000000 && x++ < outputWidth) { write(dp, interpolate4i(a, b, xfraction)); dp += stride(); xfraction += xstride; } if(x >= outputWidth) break; sp += stride(); a = b; b = read(sp); xfraction -= 0x100000000; } } free(); _data = outputData; _width = outputWidth; } inline auto image::scaleLinearHeight(u32 outputHeight) -> void { u8* outputData = allocate(_width, outputHeight, stride()); u64 ystride = ((u64)(_height - 1) << 32) / max(1u, outputHeight - 1); for(u32 x = 0; x < _width; x++) { u64 yfraction = 0; const u8* sp = _data + stride() * x; u8* dp = outputData + stride() * x; u64 a = read(sp); u64 b = read(sp + pitch()); sp += pitch(); u32 y = 0; while(true) { while(yfraction < 0x100000000 && y++ < outputHeight) { write(dp, interpolate4i(a, b, yfraction)); dp += pitch(); yfraction += ystride; } if(y >= outputHeight) break; sp += pitch(); a = b; b = read(sp); yfraction -= 0x100000000; } } free(); _data = outputData; _height = outputHeight; } inline auto image::scaleLinear(u32 outputWidth, u32 outputHeight) -> void { u8* outputData = allocate(outputWidth, outputHeight, stride()); u32 outputPitch = outputWidth * stride(); u64 xstride = ((u64)(_width - 1) << 32) / max(1u, outputWidth - 1); u64 ystride = ((u64)(_height - 1) << 32) / max(1u, outputHeight - 1); for(u32 y = 0; y < outputHeight; y++) { u64 yfraction = ystride * y; u64 xfraction = 0; const u8* sp = _data + pitch() * (yfraction >> 32); u8* dp = outputData + outputPitch * y; u64 a = read(sp); u64 b = read(sp + stride()); u64 c = read(sp + pitch()); u64 d = read(sp + pitch() + stride()); sp += stride(); u32 x = 0; while(true) { while(xfraction < 0x100000000 && x++ < outputWidth) { write(dp, interpolate4i(a, b, c, d, xfraction, yfraction)); dp += stride(); xfraction += xstride; } if(x >= outputWidth) break; sp += stride(); a = b; c = d; b = read(sp); d = read(sp + pitch()); xfraction -= 0x100000000; } } free(); _data = outputData; _width = outputWidth; _height = outputHeight; } inline auto image::scaleNearest(u32 outputWidth, u32 outputHeight) -> void { u8* outputData = allocate(outputWidth, outputHeight, stride()); u32 outputPitch = outputWidth * stride(); u64 xstride = ((u64)_width << 32) / outputWidth; u64 ystride = ((u64)_height << 32) / outputHeight; for(u32 y = 0; y < outputHeight; y++) { u64 yfraction = ystride * y; u64 xfraction = 0; const u8* sp = _data + pitch() * (yfraction >> 32); u8* dp = outputData + outputPitch * y; u64 a = read(sp); u32 x = 0; while(true) { while(xfraction < 0x100000000 && x++ < outputWidth) { write(dp, a); dp += stride(); xfraction += xstride; } if(x >= outputWidth) break; sp += stride(); a = read(sp); xfraction -= 0x100000000; } } free(); _data = outputData; _width = outputWidth; _height = outputHeight; } } ares-126/nall/image/static.hpp000066400000000000000000000013041415063341600163270ustar00rootroot00000000000000#pragma once namespace nall { inline auto image::bitDepth(u64 color) -> u32 { u32 depth = 0; if(color) while((color & 1) == 0) color >>= 1; while((color & 1) == 1) { color >>= 1; depth++; } return depth; } inline auto image::bitShift(u64 color) -> u32 { u32 shift = 0; if(color) while((color & 1) == 0) { color >>= 1; shift++; } return shift; } inline auto image::normalize(u64 color, u32 sourceDepth, u32 targetDepth) -> u64 { if(sourceDepth == 0 || targetDepth == 0) return 0; while(sourceDepth < targetDepth) { color = (color << sourceDepth) | color; sourceDepth += sourceDepth; } if(targetDepth < sourceDepth) color >>= (sourceDepth - targetDepth); return color; } } ares-126/nall/image/utility.hpp000066400000000000000000000136241415063341600165530ustar00rootroot00000000000000#pragma once namespace nall { //scan all four sides of the image for fully transparent pixels, and then crop them //imagine an icon centered on a transparent background: this function removes the bordering //this certainly won't win any speed awards, but nall::image is meant to be correct and simple, not fast inline auto image::shrink(u64 transparentColor) -> void { //top { u32 padding = 0; for(u32 y : range(_height)) { const u8* sp = _data + pitch() * y; bool found = false; for(u32 x : range(_width)) { if(read(sp) != transparentColor) { found = true; break; } sp += stride(); } if(found) break; padding++; } crop(0, padding, _width, _height - padding); } //bottom { u32 padding = 0; for(u32 y : reverse(range(_height))) { const u8* sp = _data + pitch() * y; bool found = false; for(u32 x : range(_width)) { if(read(sp) != transparentColor) { found = true; break; } sp += stride(); } if(found) break; padding++; } crop(0, 0, _width, _height - padding); } //left { u32 padding = 0; for(u32 x : range(_width)) { const u8* sp = _data + stride() * x; bool found = false; for(u32 y : range(_height)) { if(read(sp) != transparentColor) { found = true; break; } sp += pitch(); } if(found) break; padding++; } crop(padding, 0, _width - padding, _height); } //right { u32 padding = 0; for(u32 x : reverse(range(_width))) { const u8* sp = _data + stride() * x; bool found = false; for(u32 y : range(_height)) { if(read(sp) != transparentColor) { found = true; break; } sp += pitch(); } if(found) break; padding++; } crop(0, 0, _width - padding, _height); } } inline auto image::crop(u32 outputX, u32 outputY, u32 outputWidth, u32 outputHeight) -> bool { if(outputX + outputWidth > _width) return false; if(outputY + outputHeight > _height) return false; u8* outputData = allocate(outputWidth, outputHeight, stride()); u32 outputPitch = outputWidth * stride(); for(u32 y = 0; y < outputHeight; y++) { const u8* sp = _data + pitch() * (outputY + y) + stride() * outputX; u8* dp = outputData + outputPitch * y; for(u32 x = 0; x < outputWidth; x++) { write(dp, read(sp)); sp += stride(); dp += stride(); } } delete[] _data; _data = outputData; _width = outputWidth; _height = outputHeight; return true; } inline auto image::alphaBlend(u64 alphaColor) -> void { u64 alphaR = (alphaColor & _red.mask() ) >> _red.shift(); u64 alphaG = (alphaColor & _green.mask()) >> _green.shift(); u64 alphaB = (alphaColor & _blue.mask() ) >> _blue.shift(); for(u32 y = 0; y < _height; y++) { u8* dp = _data + pitch() * y; for(u32 x = 0; x < _width; x++) { u64 color = read(dp); u64 colorA = (color & _alpha.mask()) >> _alpha.shift(); u64 colorR = (color & _red.mask() ) >> _red.shift(); u64 colorG = (color & _green.mask()) >> _green.shift(); u64 colorB = (color & _blue.mask() ) >> _blue.shift(); f64 alphaScale = (f64)colorA / (f64)((1 << _alpha.depth()) - 1); colorA = (1 << _alpha.depth()) - 1; colorR = (colorR * alphaScale) + (alphaR * (1.0 - alphaScale)); colorG = (colorG * alphaScale) + (alphaG * (1.0 - alphaScale)); colorB = (colorB * alphaScale) + (alphaB * (1.0 - alphaScale)); write(dp, (colorA << _alpha.shift()) | (colorR << _red.shift()) | (colorG << _green.shift()) | (colorB << _blue.shift())); dp += stride(); } } } inline auto image::alphaMultiply() -> void { u32 divisor = (1 << _alpha.depth()) - 1; for(u32 y = 0; y < _height; y++) { u8* dp = _data + pitch() * y; for(u32 x = 0; x < _width; x++) { u64 color = read(dp); u64 colorA = (color & _alpha.mask()) >> _alpha.shift(); u64 colorR = (color & _red.mask() ) >> _red.shift(); u64 colorG = (color & _green.mask()) >> _green.shift(); u64 colorB = (color & _blue.mask() ) >> _blue.shift(); colorR = (colorR * colorA) / divisor; colorG = (colorG * colorA) / divisor; colorB = (colorB * colorA) / divisor; write(dp, (colorA << _alpha.shift()) | (colorR << _red.shift()) | (colorG << _green.shift()) | (colorB << _blue.shift())); dp += stride(); } } } inline auto image::transform(const image& source) -> void { return transform(source._endian, source._depth, source._alpha.mask(), source._red.mask(), source._green.mask(), source._blue.mask()); } inline auto image::transform(bool outputEndian, u32 outputDepth, u64 outputAlphaMask, u64 outputRedMask, u64 outputGreenMask, u64 outputBlueMask) -> void { if(_endian == outputEndian && _depth == outputDepth && _alpha.mask() == outputAlphaMask && _red.mask() == outputRedMask && _green.mask() == outputGreenMask && _blue.mask() == outputBlueMask) return; image output(outputEndian, outputDepth, outputAlphaMask, outputRedMask, outputGreenMask, outputBlueMask); output.allocate(_width, _height); for(u32 y = 0; y < _height; y++) { const u8* sp = _data + pitch() * y; u8* dp = output._data + output.pitch() * y; for(u32 x = 0; x < _width; x++) { u64 color = read(sp); sp += stride(); u64 a = (color & _alpha.mask()) >> _alpha.shift(); u64 r = (color & _red.mask() ) >> _red.shift(); u64 g = (color & _green.mask()) >> _green.shift(); u64 b = (color & _blue.mask() ) >> _blue.shift(); a = normalize(a, _alpha.depth(), output._alpha.depth()); r = normalize(r, _red.depth(), output._red.depth()); g = normalize(g, _green.depth(), output._green.depth()); b = normalize(b, _blue.depth(), output._blue.depth()); output.write(dp, (a << output._alpha.shift()) | (r << output._red.shift()) | (g << output._green.shift()) | (b << output._blue.shift())); dp += output.stride(); } } operator=(move(output)); } } ares-126/nall/induced-sort.hpp000066400000000000000000000136171415063341600163700ustar00rootroot00000000000000#pragma once //suffix array construction via induced sorting //many thanks to Screwtape for the thorough explanation of this algorithm //this implementation would not be possible without his help namespace nall { //note that induced_sort will return an array of size+1 characters, //where the first character is the empty suffix, equal to size template inline auto induced_sort(array_view data, const u32 characters = 256) -> vector { const u32 size = data.size(); if(size == 0) return vector{0}; //required to avoid out-of-bounds accesses if(size == 1) return vector{1, 0}; //not strictly necessary; but more performant vector types; //0 = S-suffix (sort before next suffix), 1 = L-suffix (sort after next suffix) types.resize(size + 1); types[size - 0] = 0; //empty suffix is always S-suffix types[size - 1] = 1; //last suffix is always L-suffix compared to empty suffix for(u32 n : reverse(range(size - 1))) { if(data[n] < data[n + 1]) { types[n] = 0; //this suffix is smaller than the one after it } else if(data[n] > data[n + 1]) { types[n] = 1; //this suffix is larger than the one after it } else { types[n] = types[n + 1]; //this suffix will be the same as the one after it } } //left-most S-suffix auto isLMS = [&](s32 n) -> bool { if(n == 0) return 0; //no character to the left of the first suffix return !types[n] && types[n - 1]; //true if this is the start of a new S-suffix }; //test if two LMS-substrings are equal auto isEqual = [&](s32 lhs, s32 rhs) -> bool { if(lhs == size || rhs == size) return false; //no other suffix can be equal to the empty suffix for(u32 n = 0;; n++) { bool lhsLMS = isLMS(lhs + n); bool rhsLMS = isLMS(rhs + n); if(n && lhsLMS && rhsLMS) return true; //substrings are identical if(lhsLMS != rhsLMS) return false; //length mismatch: substrings cannot be identical if(data[lhs + n] != data[rhs + n]) return false; //character mismatch: substrings are different } }; //determine the sizes of each bucket: one bucket per character vector counts; counts.resize(characters); for(u32 n : range(size)) counts[data[n]]++; //bucket sorting start offsets vector heads; heads.resize(characters); u32 headOffset; auto getHeads = [&] { headOffset = 1; for(u32 n : range(characters)) { heads[n] = headOffset; headOffset += counts[n]; } }; //bucket sorting end offsets vector tails; tails.resize(characters); u32 tailOffset; auto getTails = [&] { tailOffset = 1; for(u32 n : range(characters)) { tailOffset += counts[n]; tails[n] = tailOffset - 1; } }; //inaccurate LMS bucket sort vector suffixes; suffixes.resize(size + 1, (s32)-1); getTails(); for(u32 n : range(size)) { if(!isLMS(n)) continue; //skip non-LMS-suffixes suffixes[tails[data[n]]--] = n; //advance from the tail of the bucket } suffixes[0] = size; //the empty suffix is always an LMS-suffix, and is the first suffix //sort all L-suffixes to the left of LMS-suffixes auto sortL = [&] { getHeads(); for(u32 n : range(size + 1)) { if(suffixes[n] == -1) continue; //offsets may not be known yet here ... auto l = suffixes[n] - 1; if(l < 0 || !types[l]) continue; //skip S-suffixes suffixes[heads[data[l]]++] = l; //advance from the head of the bucket } }; auto sortS = [&] { getTails(); for(u32 n : reverse(range(size + 1))) { auto l = suffixes[n] - 1; if(l < 0 || types[l]) continue; //skip L-suffixes suffixes[tails[data[l]]--] = l; //advance from the tail of the bucket } }; sortL(); sortS(); //analyze data for the summary suffix array vector names; names.resize(size + 1, (s32)-1); u32 currentName = 0; //keep a count to tag each unique LMS-substring with unique IDs auto lastLMSOffset = suffixes[0]; //location in the original data of the last checked LMS suffix names[lastLMSOffset] = currentName; //the first LMS-substring is always the empty suffix entry, at position 0 for(u32 n : range(1, size + 1)) { auto offset = suffixes[n]; if(!isLMS(offset)) continue; //only LMS suffixes are important //if this LMS suffix starts with a different LMS substring than the last suffix observed ... if(!isEqual(lastLMSOffset, offset)) currentName++; //then it gets a new name lastLMSOffset = offset; //keep track of the new most-recent LMS suffix names[lastLMSOffset] = currentName; //store the LMS suffix name where the suffix appears at in the original data } vector summaryOffsets; vector summaryData; for(u32 n : range(size + 1)) { if(names[n] == -1) continue; summaryOffsets.append(n); summaryData.append(names[n]); } u32 summaryCharacters = currentName + 1; //zero-indexed, so the total unique characters is currentName + 1 //make the summary suffix array vector summaries; if(summaryData.size() == summaryCharacters) { //simple bucket sort when every character in summaryData appears only once summaries.resize(summaryData.size() + 1, (s32)-1); summaries[0] = summaryData.size(); //always include the empty suffix at the beginning for(s32 x : range(summaryData.size())) { s32 y = summaryData[x]; summaries[y + 1] = x; } } else { //recurse until every character in summaryData is unique ... summaries = induced_sort({summaryData.data(), summaryData.size()}, summaryCharacters); } suffixes.fill(-1); //reuse existing buffer for accurate sort //accurate LMS sort getTails(); for(u32 n : reverse(range(2, summaries.size()))) { auto index = summaryOffsets[summaries[n]]; suffixes[tails[data[index]]--] = index; //advance from the tail of the bucket } suffixes[0] = size; //always include the empty suffix at the beginning sortL(); sortS(); return suffixes; } } ares-126/nall/inline-if.hpp000066400000000000000000000010671415063341600156360ustar00rootroot00000000000000#pragma once #warning "these defines break if statements with multiple parameters to templates" #define if1(statement) if(statement) #define if2(condition, false) ([&](auto&& value) -> decltype(condition) { \ return (bool)value ? value : (decltype(condition))false; \ })(condition) #define if3(condition, true, false) ((condition) ? (true) : (decltype(true))(false)) #define if4(type, condition, true, false) ((condition) ? (type)(true) : (type)(false)) #define if_(_1, _2, _3, _4, name, ...) name #define if(...) if_(__VA_ARGS__, if4, if3, if2, if1)(__VA_ARGS__) ares-126/nall/inode.hpp000066400000000000000000000121301415063341600150530ustar00rootroot00000000000000#pragma once //generic abstraction layer for common storage operations against both files and directories //these functions are not recursive; use directory::create() and directory::remove() for recursion #include #include namespace nall { struct inode { enum class time : u32 { create, modify, access }; inode() = delete; inode(const inode&) = delete; auto operator=(const inode&) -> inode& = delete; static auto exists(const string& name) -> bool { return access(name, F_OK) == 0; } static auto readable(const string& name) -> bool { return access(name, R_OK) == 0; } static auto writable(const string& name) -> bool { return access(name, W_OK) == 0; } static auto executable(const string& name) -> bool { return access(name, X_OK) == 0; } static auto hidden(const string& name) -> bool { #if defined(PLATFORM_WINDOWS) auto attributes = GetFileAttributes(utf16_t(name)); return attributes & FILE_ATTRIBUTE_HIDDEN; #else //todo: is this really the best way to do this? stat doesn't have S_ISHIDDEN ... return name.split("/").last().beginsWith("."); #endif } static auto mode(const string& name) -> u32 { struct stat data{}; stat(name, &data); return data.st_mode; } static auto uid(const string& name) -> u32 { struct stat data{}; stat(name, &data); return data.st_uid; } static auto gid(const string& name) -> u32 { struct stat data{}; stat(name, &data); return data.st_gid; } static auto owner(const string& name) -> string { #if !defined(PLATFORM_WINDOWS) struct passwd* pw = getpwuid(uid(name)); if(pw && pw->pw_name) return pw->pw_name; #endif return {}; } static auto group(const string& name) -> string { #if !defined(PLATFORM_WINDOWS) struct group* gr = getgrgid(gid(name)); if(gr && gr->gr_name) return gr->gr_name; #endif return {}; } static auto timestamp(const string& name, time mode = time::modify) -> u64 { struct stat data{}; stat(name, &data); switch(mode) { #if defined(PLATFORM_WINDOWS) //on Windows, the last status change time (ctime) holds the file creation time instead case time::create: return data.st_ctime; #elif defined(PLATFORM_BSD) || defined(PLATFORM_MACOS) //st_birthtime may return -1 or st_atime if it is not supported by the file system //the best that can be done in this case is to return st_mtime if it's older case time::create: return min((u32)data.st_birthtime, (u32)data.st_mtime); #else //Linux simply doesn't support file creation time at all //this is also our fallback case for unsupported operating systems case time::create: return data.st_mtime; #endif case time::modify: return data.st_mtime; //for performance reasons, last access time is usually not enabled on various filesystems //ensure that the last access time is not older than the last modify time (eg for NTFS) case time::access: return max((u32)data.st_atime, data.st_mtime); } return 0; } static auto setMode(const string& name, u32 mode) -> bool { #if !defined(PLATFORM_WINDOWS) return chmod(name, mode) == 0; #else return _wchmod(utf16_t(name), (mode & 0400 ? _S_IREAD : 0) | (mode & 0200 ? _S_IWRITE : 0)) == 0; #endif } static auto setOwner(const string& name, const string& owner) -> bool { #if !defined(PLATFORM_WINDOWS) struct passwd* pwd = getpwnam(owner); if(!pwd) return false; return chown(name, pwd->pw_uid, inode::gid(name)) == 0; #else return true; #endif } static auto setGroup(const string& name, const string& group) -> bool { #if !defined(PLATFORM_WINDOWS) struct group* grp = getgrnam(group); if(!grp) return false; return chown(name, inode::uid(name), grp->gr_gid) == 0; #else return true; #endif } static auto setTimestamp(const string& name, u64 value, time mode = time::modify) -> bool { struct utimbuf timeBuffer; timeBuffer.modtime = mode == time::modify ? value : inode::timestamp(name, time::modify); timeBuffer.actime = mode == time::access ? value : inode::timestamp(name, time::access); return utime(name, &timeBuffer) == 0; } //returns true if 'name' already exists static auto create(const string& name, u32 permissions = 0755) -> bool { if(exists(name)) return true; if(name.endsWith("/")) return mkdir(name, permissions) == 0; s32 fd = open(name, O_CREAT | O_EXCL, permissions); if(fd < 0) return false; return close(fd), true; } //returns false if 'name' and 'targetname' are on different file systems (requires copy) static auto rename(const string& name, const string& targetname) -> bool { return ::rename(name, targetname) == 0; } //returns false if 'name' is a directory that is not empty static auto remove(const string& name) -> bool { #if defined(PLATFORM_WINDOWS) if(name.endsWith("/")) return _wrmdir(utf16_t(name)) == 0; return _wunlink(utf16_t(name)) == 0; #else if(name.endsWith("/")) return rmdir(name) == 0; return unlink(name) == 0; #endif } }; } ares-126/nall/instance.hpp000066400000000000000000000011261415063341600155640ustar00rootroot00000000000000#pragma once namespace nall { template struct Instance { ~Instance() { destruct(); } auto operator()() -> T& { return instance.object; } template auto construct(P&&... p) { if(constructed) return; constructed = true; new((void*)(&instance.object)) T(forward

(p)...); } auto destruct() -> void { if(!constructed) return; constructed = false; instance.object.~T(); } private: bool constructed = false; union Union { Union() {} ~Union() {} T object; char storage[sizeof(T)]; } instance; }; } ares-126/nall/interpolation.hpp000066400000000000000000000030401415063341600166440ustar00rootroot00000000000000#pragma once namespace nall { struct Interpolation { static inline auto Nearest(f64 mu, f64 a, f64 b, f64 c, f64 d) -> f64 { return (mu <= 0.5 ? b : c); } static inline auto Sublinear(f64 mu, f64 a, f64 b, f64 c, f64 d) -> f64 { mu = ((mu - 0.5) * 2.0) + 0.5; if(mu < 0) mu = 0; if(mu > 1) mu = 1; return b * (1.0 - mu) + c * mu; } static inline auto Linear(f64 mu, f64 a, f64 b, f64 c, f64 d) -> f64 { return b * (1.0 - mu) + c * mu; } static inline auto Cosine(f64 mu, f64 a, f64 b, f64 c, f64 d) -> f64 { mu = (1.0 - cos(mu * Math::Pi)) / 2.0; return b * (1.0 - mu) + c * mu; } static inline auto Cubic(f64 mu, f64 a, f64 b, f64 c, f64 d) -> f64 { f64 A = d - c - a + b; f64 B = a - b - A; f64 C = c - a; f64 D = b; return A * (mu * mu * mu) + B * (mu * mu) + C * mu + D; } static inline auto Hermite(f64 mu1, f64 a, f64 b, f64 c, f64 d) -> f64 { const f64 tension = 0.0; //-1 = low, 0 = normal, +1 = high const f64 bias = 0.0; //-1 = left, 0 = even, +1 = right f64 mu2, mu3, m0, m1, a0, a1, a2, a3; mu2 = mu1 * mu1; mu3 = mu2 * mu1; m0 = (b - a) * (1.0 + bias) * (1.0 - tension) / 2.0; m0 += (c - b) * (1.0 - bias) * (1.0 - tension) / 2.0; m1 = (c - b) * (1.0 + bias) * (1.0 - tension) / 2.0; m1 += (d - c) * (1.0 - bias) * (1.0 - tension) / 2.0; a0 = +2 * mu3 - 3 * mu2 + 1; a1 = mu3 - 2 * mu2 + mu1; a2 = mu3 - mu2; a3 = -2 * mu3 + 3 * mu2; return (a0 * b) + (a1 * m0) + (a2 * m1) + (a3 * c); } }; } ares-126/nall/intrinsics.hpp000066400000000000000000000217731415063341600161570ustar00rootroot00000000000000#pragma once #if defined(__APPLE__) #include #elif defined(linux) || defined(__linux__) #include #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) #include #endif namespace nall { /* Compiler detection */ #if defined(__clang__) #define COMPILER_CLANG struct Compiler { static constexpr bool Clang = 1; static constexpr bool GCC = 0; static constexpr bool Microsoft = 0; }; #pragma clang diagnostic warning "-Wreturn-type" #pragma clang diagnostic ignored "-Wunused-result" #pragma clang diagnostic ignored "-Wunknown-pragmas" #pragma clang diagnostic ignored "-Wempty-body" #pragma clang diagnostic ignored "-Wparentheses" #pragma clang diagnostic ignored "-Wswitch" #pragma clang diagnostic ignored "-Wswitch-bool" #pragma clang diagnostic ignored "-Wabsolute-value" #pragma clang diagnostic ignored "-Wtrigraphs" #pragma clang diagnostic ignored "-Wnarrowing" #pragma clang diagnostic ignored "-Wattributes" #elif defined(__GNUC__) #define COMPILER_GCC struct Compiler { static constexpr bool Clang = 0; static constexpr bool GCC = 1; static constexpr bool Microsoft = 0; }; #pragma GCC diagnostic warning "-Wreturn-type" #pragma GCC diagnostic ignored "-Wunused-result" #pragma GCC diagnostic ignored "-Wunknown-pragmas" #pragma GCC diagnostic ignored "-Wpragmas" #pragma GCC diagnostic ignored "-Wswitch-bool" #pragma GCC diagnostic ignored "-Wtrigraphs" #pragma GCC diagnostic ignored "-Wnarrowing" #pragma GCC diagnostic ignored "-Wattributes" #pragma GCC diagnostic ignored "-Wstringop-overflow" //GCC 10.2 warning heuristic is buggy #elif defined(_MSC_VER) #define COMPILER_MICROSOFT struct Compiler { static constexpr bool Clang = 0; static constexpr bool GCC = 0; static constexpr bool Microsoft = 1; }; #pragma warning(disable:4996) //libc "deprecation" warnings #else #error "unable to detect compiler" #endif /* Platform detection */ #if defined(_WIN32) #define PLATFORM_WINDOWS struct Platform { static constexpr bool Windows = 1; static constexpr bool MacOS = 0; static constexpr bool Android = 0; static constexpr bool Linux = 0; static constexpr bool BSD = 0; }; #elif defined(__APPLE__) #define PLATFORM_MACOS struct Platform { static constexpr bool Windows = 0; static constexpr bool MacOS = 1; static constexpr bool Android = 0; static constexpr bool Linux = 0; static constexpr bool BSD = 0; }; #elif defined(__ANDROID__) #define PLATFORM_ANDROID struct Platform { static constexpr bool Windows = 0; static constexpr bool MacOS = 0; static constexpr bool Android = 1; static constexpr bool Linux = 0; static constexpr bool BSD = 0; }; #elif defined(linux) || defined(__linux__) #define PLATFORM_LINUX struct Platform { static constexpr bool Windows = 0; static constexpr bool MacOS = 0; static constexpr bool Android = 0; static constexpr bool Linux = 1; static constexpr bool BSD = 0; }; #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) #define PLATFORM_BSD struct Platform { static constexpr bool Windows = 0; static constexpr bool MacOS = 0; static constexpr bool Android = 0; static constexpr bool Linux = 0; static constexpr bool BSD = 1; }; #else #error "unable to detect platform" #endif /* ABI detection */ #if defined(_WIN32) #define ABI_WINDOWS struct ABI { static constexpr bool Windows = 1; static constexpr bool SystemV = 0; }; #else #define ABI_SYSTEMV struct ABI { static constexpr bool Windows = 0; static constexpr bool SystemV = 1; }; #endif /* API detection */ #if defined(_WIN32) #define API_WINDOWS struct API { static constexpr bool Windows = 1; static constexpr bool Posix = 0; }; #else #define API_POSIX struct API { static constexpr bool Windows = 0; static constexpr bool Posix = 1; }; #endif /* Display server detection */ #if defined(_WIN32) #define DISPLAY_WINDOWS struct DisplayServer { static constexpr bool Windows = 1; static constexpr bool Quartz = 0; static constexpr bool Xorg = 0; }; #elif defined(__APPLE__) #define DISPLAY_QUARTZ struct DisplayServer { static constexpr bool Windows = 0; static constexpr bool Quartz = 1; static constexpr bool Xorg = 0; }; #else #define DISPLAY_XORG struct DisplayServer { static constexpr bool Windows = 0; static constexpr bool Quartz = 0; static constexpr bool Xorg = 1; }; #endif /* Architecture detection */ #if defined(__i386__) || defined(_M_IX86) #define ARCHITECTURE_X86 struct Architecture { static constexpr bool x86 = 1; static constexpr bool amd64 = 0; static constexpr bool arm64 = 0; static constexpr bool arm32 = 0; static constexpr bool ppc64 = 0; static constexpr bool ppc32 = 0; }; #elif defined(__amd64__) || defined(_M_AMD64) #define ARCHITECTURE_AMD64 struct Architecture { static constexpr bool x86 = 0; static constexpr bool amd64 = 1; static constexpr bool arm64 = 0; static constexpr bool arm32 = 0; static constexpr bool ppc64 = 0; static constexpr bool ppc32 = 0; }; #elif defined(__aarch64__) #define ARCHITECTURE_ARM64 struct Architecture { static constexpr bool x86 = 0; static constexpr bool amd64 = 0; static constexpr bool arm64 = 1; static constexpr bool arm32 = 0; static constexpr bool ppc64 = 0; static constexpr bool ppc32 = 0; }; #elif defined(__arm__) #define ARCHITECTURE_ARM32 struct Architecture { static constexpr bool x86 = 0; static constexpr bool amd64 = 0; static constexpr bool arm64 = 0; static constexpr bool arm32 = 1; static constexpr bool ppc64 = 0; static constexpr bool ppc32 = 0; }; #elif defined(__ppc64__) || defined(_ARCH_PPC64) #define ARCHITECTURE_PPC64 struct Architecture { static constexpr bool x86 = 0; static constexpr bool amd64 = 0; static constexpr bool arm64 = 0; static constexpr bool arm32 = 0; static constexpr bool ppc64 = 1; static constexpr bool ppc32 = 0; }; #elif defined(__ppc__) || defined(_ARCH_PPC) || defined(_M_PPC) #define ARCHITECTURE_PPC32 struct Architecture { static constexpr bool x86 = 0; static constexpr bool amd64 = 0; static constexpr bool arm64 = 0; static constexpr bool arm32 = 0; static constexpr bool ppc64 = 0; static constexpr bool ppc32 = 1; }; #else #error "unable to detect architecture" #endif /* Endian detection */ #if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && __BYTE_ORDER == __LITTLE_ENDIAN) || defined(__LITTLE_ENDIAN__) || defined(__i386__) || defined(__amd64__) || defined(_M_IX86) || defined(_M_AMD64) #define ENDIAN_LITTLE struct Endian { static constexpr bool Little = 1; static constexpr bool Big = 0; }; #elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && __BYTE_ORDER == __BIG_ENDIAN) || defined(__BIG_ENDIAN__) || defined(__powerpc__) || defined(_M_PPC) #define ENDIAN_BIG struct Endian { static constexpr bool Little = 0; static constexpr bool Big = 1; }; #else #error "unable to detect endian" #endif /* Build optimization level detection */ #undef DEBUG #undef NDEBUG #if defined(BUILD_DEBUG) #define DEBUG struct Build { static constexpr bool Debug = 1; static constexpr bool Stable = 0; static constexpr bool Minified = 0; static constexpr bool Release = 0; static constexpr bool Optimized = 0; }; #elif defined(BUILD_STABLE) #define DEBUG struct Build { static constexpr bool Debug = 0; static constexpr bool Stable = 1; static constexpr bool Minified = 0; static constexpr bool Release = 0; static constexpr bool Optimized = 0; }; #elif defined(BUILD_MINIFIED) #define NDEBUG struct Build { static constexpr bool Debug = 0; static constexpr bool Stable = 0; static constexpr bool Minified = 1; static constexpr bool Release = 0; static constexpr bool Optimized = 0; }; #elif defined(BUILD_RELEASE) #define NDEBUG struct Build { static constexpr bool Debug = 0; static constexpr bool Stable = 0; static constexpr bool Minified = 0; static constexpr bool Release = 1; static constexpr bool Optimized = 0; }; #elif defined(BUILD_OPTIMIZED) #define NDEBUG struct Build { static constexpr bool Debug = 0; static constexpr bool Stable = 0; static constexpr bool Minified = 0; static constexpr bool Release = 0; static constexpr bool Optimized = 1; }; #else //default to debug mode #define BUILD_DEBUG #define DEBUG struct Build { static constexpr bool Debug = 1; static constexpr bool Stable = 0; static constexpr bool Minified = 0; static constexpr bool Release = 0; static constexpr bool Optimized = 0; }; #endif } ares-126/nall/iterator.hpp000066400000000000000000000051141415063341600156120ustar00rootroot00000000000000#pragma once namespace nall { template struct iterator { iterator(T* self, u64 offset) : _self(self), _offset(offset) {} auto operator*() -> T& { return _self[_offset]; } auto operator!=(const iterator& source) const -> bool { return _offset != source._offset; } auto operator++() -> iterator& { return _offset++, *this; } auto offset() const -> u64 { return _offset; } private: T* _self; u64 _offset; }; template struct iterator_const { iterator_const(const T* self, u64 offset) : _self(self), _offset(offset) {} auto operator*() -> const T& { return _self[_offset]; } auto operator!=(const iterator_const& source) const -> bool { return _offset != source._offset; } auto operator++() -> iterator_const& { return _offset++, *this; } auto offset() const -> u64 { return _offset; } private: const T* _self; u64 _offset; }; template struct reverse_iterator { reverse_iterator(T* self, u64 offset) : _self(self), _offset(offset) {} auto operator*() -> T& { return _self[_offset]; } auto operator!=(const reverse_iterator& source) const -> bool { return _offset != source._offset; } auto operator++() -> reverse_iterator& { return _offset--, *this; } auto offset() const -> u64 { return _offset; } private: T* _self; u64 _offset; }; template struct reverse_iterator_const { reverse_iterator_const(const T* self, u64 offset) : _self(self), _offset(offset) {} auto operator*() -> const T& { return _self[_offset]; } auto operator!=(const reverse_iterator_const& source) const -> bool { return _offset != source._offset; } auto operator++() -> reverse_iterator_const& { return _offset--, *this; } auto offset() const -> u64 { return _offset; } private: const T* _self; u64 _offset; }; //std::rbegin(), std::rend() is missing from GCC 4.9; which I still target template auto rbegin(T (&array)[Size]) { return reverse_iterator{array, Size - 1}; } template auto rend(T (&array)[Size]) { return reverse_iterator{array, (u64)-1}; } template auto rbegin(T& self) { return self.rbegin(); } template auto rend(T& self) { return self.rend(); } template struct reverse_wrapper { auto begin() { return rbegin(_self); } auto end() { return rend(_self); } auto begin() const { return rbegin(_self); } auto end() const { return rend(_self); } T _self; }; template auto reverse(T& object) -> reverse_wrapper { return {object}; } template auto reverse(T&& object) -> reverse_wrapper { return {object}; } } ares-126/nall/literals.hpp000066400000000000000000000023471415063341600156050ustar00rootroot00000000000000#pragma once namespace nall { inline constexpr auto operator"" _Kibit(unsigned long long value) { return value * 1024 / 8; } inline constexpr auto operator"" _Mibit(unsigned long long value) { return value * 1024 * 1024 / 8; } inline constexpr auto operator"" _Gibit(unsigned long long value) { return value * 1024 * 1024 * 1024 / 8; } inline constexpr auto operator"" _Tibit(unsigned long long value) { return value * 1024 * 1024 * 1024 * 1024 / 8; } inline constexpr auto operator"" _KiB(unsigned long long value) { return value * 1024; } inline constexpr auto operator"" _MiB(unsigned long long value) { return value * 1024 * 1024; } inline constexpr auto operator"" _GiB(unsigned long long value) { return value * 1024 * 1024 * 1024; } inline constexpr auto operator"" _TiB(unsigned long long value) { return value * 1024 * 1024 * 1024 * 1024; } inline constexpr auto operator"" _KHz(unsigned long long value) { return value * 1000; } inline constexpr auto operator"" _MHz(unsigned long long value) { return value * 1000 * 1000; } inline constexpr auto operator"" _GHz(unsigned long long value) { return value * 1000 * 1000 * 1000; } inline constexpr auto operator"" _THz(unsigned long long value) { return value * 1000 * 1000 * 1000 * 1000; } } ares-126/nall/locale.hpp000066400000000000000000000043031415063341600152170ustar00rootroot00000000000000#pragma once namespace nall { struct Locale { struct Dictionary { string location; string language; Markup::Node document; }; auto scan(string pathname) -> void { dictionaries.reset(); selected.reset(); for(auto filename : directory::icontents(pathname, "*.bml")) { Dictionary dictionary; dictionary.location = {pathname, filename}; dictionary.document = BML::unserialize(string::read(dictionary.location)); dictionary.language = dictionary.document["locale/language"].text(); dictionaries.append(dictionary); } } auto available() const -> vector { vector result; for(auto& dictionary : dictionaries) { result.append(dictionary.language); } return result; } auto select(string option) -> bool { selected.reset(); for(auto& dictionary : dictionaries) { if(option == Location::prefix(dictionary.location) || option == dictionary.language) { selected = dictionary; return true; } } return false; } template auto operator()(string ns, string input, P&&... p) const -> string { vector arguments{forward

(p)...}; if(selected) { for(auto node : selected().document) { if(node.name() == "namespace" && node.text() == ns) { for(auto map : node) { if(map.name() == "map" && map["input"].text() == input) { input = map["value"].text(); break; } } } } } for(u32 index : range(arguments.size())) { input.replace({"{", index, "}"}, arguments[index]); } return input; } struct Namespace { Namespace(Locale& _locale, string _namespace) : _locale(_locale), _namespace(_namespace) {} template auto operator()(string input, P&&... p) const -> string { return _locale(_namespace, input, forward

(p)...); } template auto tr(string input, P&&... p) const -> string { return _locale(_namespace, input, forward

(p)...); } private: Locale& _locale; string _namespace; }; private: vector dictionaries; maybe selected; }; } ares-126/nall/location.hpp000066400000000000000000000046701415063341600155770ustar00rootroot00000000000000#pragma once #include namespace nall::Location { // (/parent/child.type/) // (/parent/child.type/)name.type inline auto path(string_view self) -> string { const char* p = self.data() + self.size() - 1; for(s32 offset = self.size() - 1; offset >= 0; offset--, p--) { if(*p == '/') return slice(self, 0, offset + 1); } return ""; //no path found } // /parent/child.type/() // /parent/child.type/(name.type) inline auto file(string_view self) -> string { const char* p = self.data() + self.size() - 1; for(s32 offset = self.size() - 1; offset >= 0; offset--, p--) { if(*p == '/') return slice(self, offset + 1); } return self; //no path found } // (/parent/)child.type/ // (/parent/child.type/)name.type inline auto dir(string_view self) -> string { const char* p = self.data() + self.size() - 1, *last = p; for(s32 offset = self.size() - 1; offset >= 0; offset--, p--) { if(*p == '/' && p == last) continue; if(*p == '/') return slice(self, 0, offset + 1); } return ""; //no path found } // /parent/(child.type/) // /parent/child.type/(name.type) inline auto base(string_view self) -> string { const char* p = self.data() + self.size() - 1, *last = p; for(s32 offset = self.size() - 1; offset >= 0; offset--, p--) { if(*p == '/' && p == last) continue; if(*p == '/') return slice(self, offset + 1); } return self; //no path found } // /parent/(child).type/ // /parent/child.type/(name).type inline auto prefix(string_view self) -> string { const char* p = self.data() + self.size() - 1, *last = p; for(s32 offset = self.size() - 1, suffix = -1; offset >= 0; offset--, p--) { if(*p == '/' && p == last) continue; if(*p == '/') return slice(self, offset + 1, (suffix >= 0 ? suffix : self.size()) - offset - 1).trimRight("/"); if(*p == '.' && suffix == -1) { suffix = offset; continue; } if(offset == 0) return slice(self, offset, suffix).trimRight("/"); } return ""; //no prefix found } // /parent/child(.type)/ // /parent/child.type/name(.type) inline auto suffix(string_view self) -> string { const char* p = self.data() + self.size() - 1, *last = p; for(s32 offset = self.size() - 1; offset >= 0; offset--, p--) { if(*p == '/' && p == last) continue; if(*p == '/') break; if(*p == '.') return slice(self, offset).trimRight("/"); } return ""; //no suffix found } inline auto notsuffix(string_view self) -> string { return {path(self), prefix(self)}; } } ares-126/nall/mac/000077500000000000000000000000001415063341600140075ustar00rootroot00000000000000ares-126/nall/mac/poly1305.hpp000066400000000000000000000062321415063341600160170ustar00rootroot00000000000000#pragma once #include namespace nall::MAC { struct Poly1305 { auto authenticate(array_view memory, u256 nonce) -> u128 { initialize(nonce); process(memory.data(), memory.size()); return finish(); } auto initialize(u256 key) -> void { u64 t0 = key >> 0; u64 t1 = key >> 64; pad[0] = key >> 128; pad[1] = key >> 192; r[0] = (t0 ) & 0xffc0fffffff; r[1] = (t0 >> 44 | t1 << 20) & 0xfffffc0ffff; r[2] = ( t1 >> 24) & 0x00ffffffc0f; h[0] = 0, h[1] = 0, h[2] = 0; offset = 0; } auto process(const u8* data, u64 size) -> void { while(size--) { buffer[offset++] = *data++; if(offset >= 16) { block(); offset = 0; } } } auto finish() -> u128 { if(offset) { buffer[offset++] = 1; while(offset < 16) buffer[offset++] = 0; block(true); } u64 h0 = h[0], h1 = h[1], h2 = h[2]; u64 c = h1 >> 44; h1 &= 0xfffffffffff; h2 += c; c = h2 >> 42; h2 &= 0x3ffffffffff; h0 += c * 5; c = h0 >> 44; h0 &= 0xfffffffffff; h1 += c; c = h1 >> 44; h1 &= 0xfffffffffff; h2 += c; c = h2 >> 42; h2 &= 0x3ffffffffff; h0 += c * 5; c = h0 >> 44; h0 &= 0xfffffffffff; h1 += c; u64 g0 = h0 + 5; c = g0 >> 44; g0 &= 0xfffffffffff; u64 g1 = h1 + c; c = g1 >> 44; g1 &= 0xfffffffffff; u64 g2 = h2 + c - (1ull << 42); c = (g2 >> 63) - 1; g0 &= c, g1 &= c, g2 &= c; c = ~c; h0 = (h0 & c) | g0; h1 = (h1 & c) | g1; h2 = (h2 & c) | g2; u64 t0 = pad[0], t1 = pad[1]; h0 += ((t0 ) & 0xfffffffffff) ; c = h0 >> 44; h0 &= 0xfffffffffff; h1 += ((t0 >> 44 | t1 << 20) & 0xfffffffffff) + c; c = h1 >> 44; h1 &= 0xfffffffffff; h2 += (( t1 >> 24) & 0x3ffffffffff) + c; h2 &= 0x3ffffffffff; h0 = (h0 >> 0 | h1 << 44); h1 = (h1 >> 20 | h2 << 24); r[0] = 0, r[1] = 0, r[2] = 0; h[0] = 0, h[1] = 0, h[2] = 0; pad[0] = 0, pad[1] = 0; memory::fill(buffer, sizeof(buffer)); offset = 0; return u128(h1) << 64 | h0; } private: auto block(bool last = false) -> void { u64 r0 = r[0], r1 = r[1], r2 = r[2]; u64 h0 = h[0], h1 = h[1], h2 = h[2]; u64 s1 = r1 * 20; u64 s2 = r2 * 20; u64 t0 = memory::readl<8>(buffer + 0); u64 t1 = memory::readl<8>(buffer + 8); h0 += ((t0 ) & 0xfffffffffff); h1 += ((t0 >> 44 | t1 << 20) & 0xfffffffffff); h2 += (( t1 >> 24) & 0x3ffffffffff) | (last ? 0 : 1ull << 40); u128 d, d0, d1, d2; d0 = (u128)h0 * r0; d = (u128)h1 * s2; d0 += d; d = (u128)h2 * s1; d0 += d; d1 = (u128)h0 * r1; d = (u128)h1 * r0; d1 += d; d = (u128)h2 * s2; d1 += d; d2 = (u128)h0 * r2; d = (u128)h1 * r1; d2 += d; d = (u128)h2 * r0; d2 += d; u64 c = (u64)(d0 >> 44); h0 = (u64)d0 & 0xfffffffffff; d1 += c; c = (u64)(d1 >> 44); h1 = (u64)d1 & 0xfffffffffff; d2 += c; c = (u64)(d2 >> 42); h2 = (u64)d2 & 0x3ffffffffff; h0 += c * 5; c = h0 >> 44; h0 &= 0xfffffffffff; h1 += c; h[0] = h0, h[1] = h1, h[2] = h2; } u64 r[3]; u64 h[3]; u64 pad[2]; u8 buffer[16]; u32 offset; }; } ares-126/nall/macos/000077500000000000000000000000001415063341600143515ustar00rootroot00000000000000ares-126/nall/macos/guard.hpp000066400000000000000000000003471415063341600161700ustar00rootroot00000000000000#ifndef NALL_MACOS_GUARD_HPP #define NALL_MACOS_GUARD_HPP #define Boolean CocoaBoolean #define decimal CocoaDecimal #define DEBUG CocoaDebug #else #undef NALL_MACOS_GUARD_HPP #undef Boolean #undef decimal #undef DEBUG #endif ares-126/nall/main.hpp000066400000000000000000000027631415063341600147140ustar00rootroot00000000000000#pragma once #include #include #include namespace nall { auto main(Arguments arguments) -> void; auto main(int argc, char** argv) -> int { #if defined(PLATFORM_WINDOWS) CoInitialize(0); WSAData wsaData{0}; WSAStartup(MAKEWORD(2, 2), &wsaData); _setmode(_fileno(stdin ), O_BINARY); _setmode(_fileno(stdout), O_BINARY); _setmode(_fileno(stderr), O_BINARY); #endif main(Arguments{argc, argv}); #if !defined(PLATFORM_WINDOWS) //when a program is running, input on the terminal queues in stdin //when terminating the program, the shell proceeds to try and execute all stdin data //this is annoying behavior: this code tries to minimize the impact as much as it can //we can flush all of stdin up to the last line feed, preventing spurious commands from executing //however, even with setvbuf(_IONBF), we can't stop the last line from echoing to the terminal auto flags = fcntl(fileno(stdin), F_GETFL, 0); fcntl(fileno(stdin), F_SETFL, flags | O_NONBLOCK); //don't allow read() to block when empty char buffer[4096], data = false; while(read(fileno(stdin), buffer, sizeof(buffer)) > 0) data = true; fcntl(fileno(stdin), F_SETFL, flags); //restore original flags for the terminal if(data) putchar('\r'); //ensures PS1 is printed at the start of the line #endif return EXIT_SUCCESS; } } auto main(int argc, char** argv) -> int { return nall::main(argc, argv); } ares-126/nall/map.hpp000066400000000000000000000043241415063341600145400ustar00rootroot00000000000000#pragma once #include namespace nall { template struct map { struct node_t { T key; U value; node_t() = default; node_t(const T& key) : key(key) {} node_t(const T& key, const U& value) : key(key), value(value) {} auto operator< (const node_t& source) const -> bool { return key < source.key; } auto operator==(const node_t& source) const -> bool { return key == source.key; } }; auto find(const T& key) const -> maybe { if(auto node = root.find({key})) return node().value; return nothing; } auto insert(const T& key, const U& value) -> void { root.insert({key, value}); } auto remove(const T& key) -> void { root.remove({key}); } auto size() const -> unsigned { return root.size(); } auto reset() -> void { root.reset(); } auto begin() -> typename set::iterator { return root.begin(); } auto end() -> typename set::iterator { return root.end(); } auto begin() const -> const typename set::iterator { return root.begin(); } auto end() const -> const typename set::iterator { return root.end(); } protected: set root; }; template struct bimap { auto find(const T& key) const -> maybe { return tmap.find(key); } auto find(const U& key) const -> maybe { return umap.find(key); } auto insert(const T& key, const U& value) -> void { tmap.insert(key, value); umap.insert(value, key); } auto remove(const T& key) -> void { if(auto p = tmap.find(key)) { umap.remove(p().value); tmap.remove(key); } } auto remove(const U& key) -> void { if(auto p = umap.find(key)) { tmap.remove(p().value); umap.remove(key); } } auto size() const -> unsigned { return tmap.size(); } auto reset() -> void { tmap.reset(); umap.reset(); } auto begin() -> typename set::node_t>::iterator { return tmap.begin(); } auto end() -> typename set::node_t>::iterator { return tmap.end(); } auto begin() const -> const typename set::node_t>::iterator { return tmap.begin(); } auto end() const -> const typename set::node_t>::iterator { return tmap.end(); } protected: map tmap; map umap; }; } ares-126/nall/matrix-multiply.hpp000066400000000000000000000014151415063341600171420ustar00rootroot00000000000000#pragma once //matrix multiplication primitives //used in: ruby/opengl/quark namespace nall { template inline auto MatrixMultiply( T* output, const T* xdata, u32 xrows, u32 xcols, const T* ydata, u32 yrows, u32 ycols ) -> void { if(xcols != yrows) return; for(u32 y : range(xrows)) { for(u32 x : range(ycols)) { T sum = 0; for(u32 z : range(xcols)) { sum += xdata[y * xcols + z] * ydata[z * ycols + x]; } *output++ = sum; } } } template inline auto MatrixMultiply( const T* xdata, u32 xrows, u32 xcols, const T* ydata, u32 yrows, u32 ycols ) -> vector { vector output; output.resize(xrows * ycols); MatrixMultiply(output.data(), xdata, xrows, xcols, ydata, yrows, ycols); return output; } } ares-126/nall/matrix.hpp000066400000000000000000000134631415063341600152730ustar00rootroot00000000000000#pragma once namespace nall { template struct Matrix { static_assert(Rows > 0 && Cols > 0); Matrix() = default; Matrix(const Matrix&) = default; Matrix(const initializer_list& source) { u32 index = 0; for(auto& value : source) { if(index >= Rows * Cols) break; values[index / Cols][index % Cols] = value; } } operator array_span() { return {values, Rows * Cols}; } operator array_view() const { return {values, Rows * Cols}; } //1D matrices (for polynomials, etc) auto operator[](u32 row) -> T& { return values[row][0]; } auto operator[](u32 row) const -> T { return values[row][0]; } //2D matrices auto operator()(u32 row, u32 col) -> T& { return values[row][col]; } auto operator()(u32 row, u32 col) const -> T { return values[row][col]; } //operators auto operator+() const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = +target(row, col); } } return result; } auto operator-() const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = -target(row, col); } } return result; } auto operator+(const Matrix& source) const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = target(row, col) + source(row, col); } } return result; } auto operator-(const Matrix& source) const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = target(row, col) - source(row, col); } } return result; } auto operator*(T source) const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = target(row, col) * source; } } return result; } auto operator/(T source) const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = target(row, col) / source; } } return result; } //warning: matrix multiplication is not commutative! template auto operator*(const Matrix& source) const -> Matrix { static_assert(Cols == SourceRows); Matrix result; for(u32 y : range(Rows)) { for(u32 x : range(SourceCols)) { T sum{}; for(u32 z : range(Cols)) { sum += target(y, z) * source(z, x); } result(y, x) = sum; } } return result; } template auto operator/(const Matrix& source) const -> maybe> { static_assert(Cols == SourceRows && SourceRows == SourceCols); if(auto inverted = source.invert()) return operator*(inverted()); return {}; } auto& operator+=(const Matrix& source) { return *this = operator+(source); } auto& operator-=(const Matrix& source) { return *this = operator-(source); } auto& operator*=(T source) { return *this = operator*(source); } auto& operator/=(T source) { return *this = operator/(source); } template auto& operator*=(const Matrix& source) { return *this = operator*(source); } //matrix division is not always possible (when matrix cannot be inverted), so operator/= is not provided //algorithm: Gauss-Jordan auto invert() const -> maybe { static_assert(Rows == Cols); Matrix source = *this; Matrix result = identity(); const auto add = [&](u32 targetRow, u32 sourceRow, T factor = 1) { for(u32 col : range(Cols)) { result(targetRow, col) += result(sourceRow, col) * factor; source(targetRow, col) += source(sourceRow, col) * factor; } }; const auto sub = [&](u32 targetRow, u32 sourceRow, T factor = 1) { for(u32 col : range(Cols)) { result(targetRow, col) -= result(sourceRow, col) * factor; source(targetRow, col) -= source(sourceRow, col) * factor; } }; const auto mul = [&](u32 row, T factor) { for(u32 col : range(Cols)) { result(row, col) *= factor; source(row, col) *= factor; } }; for(u32 i : range(Cols)) { if(source(i, i) == 0) { for(u32 row : range(Rows)) { if(source(row, i) != 0) { add(i, row); break; } } //matrix is not invertible: if(source(i, i) == 0) return {}; } mul(i, T{1} / source(i, i)); for(u32 row : range(Rows)) { if(row == i) continue; sub(row, i, source(row, i)); } } return result; } auto transpose() const -> Matrix { Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(col, row) = target(row, col); } } return result; } static auto identity() -> Matrix { static_assert(Rows == Cols); Matrix result; for(u32 row : range(Rows)) { for(u32 col : range(Cols)) { result(row, col) = row == col; } } return result; } //debugging function: do not use in production code template auto _print() const -> void { for(u32 row : range(Rows)) { nall::print("[ "); for(u32 col : range(Cols)) { nall::print(pad(target(row, col), Pad, ' '), " "); } nall::print("]\n"); } } protected: //same as operator(), but with easier to read syntax inside Matrix class auto target(u32 row, u32 col) -> T& { return values[row][col]; } auto target(u32 row, u32 col) const -> T { return values[row][col]; } T values[Rows][Cols]{}; }; } ares-126/nall/maybe.hpp000066400000000000000000000061301415063341600150550ustar00rootroot00000000000000#pragma once #include namespace nall { struct nothing_t {}; static nothing_t nothing; struct else_t {}; template struct maybe { maybe() {} maybe(nothing_t) {} maybe(const T& source) { operator=(source); } maybe(T&& source) { operator=(move(source)); } maybe(const maybe& source) { operator=(source); } maybe(maybe&& source) { operator=(move(source)); } ~maybe() { reset(); } auto operator=(nothing_t) -> maybe& { reset(); return *this; } auto operator=(const T& source) -> maybe& { reset(); _valid = true; new(&_value.t) T(source); return *this; } auto operator=(T&& source) -> maybe& { reset(); _valid = true; new(&_value.t) T(move(source)); return *this; } auto operator=(const maybe& source) -> maybe& { if(this == &source) return *this; reset(); if(_valid = source._valid) new(&_value.t) T(source.get()); return *this; } auto operator=(maybe&& source) -> maybe& { if(this == &source) return *this; reset(); if(_valid = source._valid) new(&_value.t) T(move(source.get())); return *this; } explicit operator bool() const { return _valid; } auto reset() -> void { if(_valid) { _value.t.~T(); _valid = false; } } auto data() -> T* { return _valid ? &_value.t : nullptr; } auto get() -> T& { assert(_valid); return _value.t; } auto data() const -> const T* { return ((maybe*)this)->data(); } auto get() const -> const T& { return ((maybe*)this)->get(); } auto operator->() -> T* { return data(); } auto operator->() const -> const T* { return data(); } auto operator*() -> T& { return get(); } auto operator*() const -> const T& { return get(); } auto operator()() -> T& { return get(); } auto operator()() const -> const T& { return get(); } auto operator()(const T& invalid) const -> const T& { return _valid ? get() : invalid; } private: union U { T t; U() {} ~U() {} } _value; bool _valid = false; }; template struct maybe { maybe() : _value(nullptr) {} maybe(nothing_t) : _value(nullptr) {} maybe(const T& source) : _value((T*)&source) {} maybe(const maybe& source) : _value(source._value) {} auto operator=(nothing_t) -> maybe& { _value = nullptr; return *this; } auto operator=(const T& source) -> maybe& { _value = (T*)&source; return *this; } auto operator=(const maybe& source) -> maybe& { _value = source._value; return *this; } explicit operator bool() const { return _value; } auto reset() -> void { _value = nullptr; } auto data() -> T* { return _value; } auto get() -> T& { assert(_value); return *_value; } auto data() const -> const T* { return ((maybe*)this)->data(); } auto get() const -> const T& { return ((maybe*)this)->get(); } auto operator->() -> T* { return data(); } auto operator->() const -> const T* { return data(); } auto operator*() -> T& { return get(); } auto operator*() const -> const T& { return get(); } auto operator()() -> T& { return get(); } auto operator()() const -> const T& { return get(); } auto operator()(const T& invalid) const -> const T& { return _value ? get() : invalid; } private: T* _value; }; } ares-126/nall/memory.hpp000066400000000000000000000143431415063341600152750ustar00rootroot00000000000000#pragma once #include #include namespace nall::memory { template auto allocate(u32 size) -> T*; template auto allocate(u32 size, const T& value) -> T*; template auto resize(void* target, u32 size) -> T*; template auto free(void* target) -> void; template auto compare(const void* target, u32 capacity, const void* source, u32 size) -> s32; template auto compare(const void* target, const void* source, u32 size) -> s32; template auto icompare(const void* target, u32 capacity, const void* source, u32 size) -> s32; template auto icompare(const void* target, const void* source, u32 size) -> s32; template auto copy(void* target, u32 capacity, const void* source, u32 size) -> T*; template auto copy(void* target, const void* source, u32 size) -> T*; template auto move(void* target, u32 capacity, const void* source, u32 size) -> T*; template auto move(void* target, const void* source, u32 size) -> T*; template auto fill(void* target, u32 capacity, const T& value = {}) -> T*; template auto assign(T* target) -> void {} template auto assign(T* target, const U& value, P&&... p) -> void; template auto readl(const void* source) -> T; template auto readm(const void* source) -> T; template auto writel(void* target, T data) -> void; template auto writem(void* target, T data) -> void; } namespace nall::memory { //implementation notes: //memcmp, memcpy, memmove have terrible performance on small block sizes (FreeBSD 10.0-amd64) //as this library is used extensively by nall/string, and most strings tend to be small, //this library hand-codes these functions instead. surprisingly, it's a substantial speedup template auto allocate(u32 size) -> T* { if constexpr(Align == 0) { return (T*)malloc(size * sizeof(T)); } #if defined(API_WINDOWS) return (T*)_aligned_malloc(size * sizeof(T), Align); #elif defined(API_POSIX) T* result = nullptr; posix_memalign((void**)&result, Align, size * sizeof(T)); return result; #else return (T*)malloc(size * sizeof(T)); #endif } template auto allocate(u32 size, const T& value) -> T* { auto result = allocate(size); if(result) fill(result, size, value); return result; } template auto resize(void* target, u32 size) -> T* { if constexpr(Align == 0) { return (T*)realloc(target, size * sizeof(T)); } #if defined(API_WINDOWS) return (T*)_aligned_realloc(target, size * sizeof(T), Align); #elif defined(API_POSIX) //realloc() cannot be used safely with posix_memalign(); a copy is always required T* result = allocate(size); copy(result, target, size); free(target); return result; #else return (T*)realloc(target, size * sizeof(T)); #endif } template auto free(void* target) -> void { if constexpr(Align == 0) { ::free(target); return; } #if defined(API_WINDOWS) _aligned_free(target); #else ::free(target); #endif } template auto compare(const void* target, u32 capacity, const void* source, u32 size) -> s32 { auto t = (u8*)target; auto s = (u8*)source; auto l = min(capacity, size) * sizeof(T); while(l--) { auto x = *t++; auto y = *s++; if(x != y) return x - y; } if(capacity == size) return 0; return -(capacity < size); } template auto compare(const void* target, const void* source, u32 size) -> s32 { return compare(target, size, source, size); } template auto icompare(const void* target, u32 capacity, const void* source, u32 size) -> s32 { auto t = (u8*)target; auto s = (u8*)source; auto l = min(capacity, size) * sizeof(T); while(l--) { auto x = *t++; auto y = *s++; if(x - 'A' < 26) x += 32; if(y - 'A' < 26) y += 32; if(x != y) return x - y; } return -(capacity < size); } template auto icompare(const void* target, const void* source, u32 size) -> s32 { return icompare(target, size, source, size); } template auto copy(void* target, u32 capacity, const void* source, u32 size) -> T* { auto t = (u8*)target; auto s = (u8*)source; auto l = min(capacity, size) * sizeof(T); while(l--) *t++ = *s++; return (T*)target; } template auto copy(void* target, const void* source, u32 size) -> T* { return copy(target, size, source, size); } template auto move(void* target, u32 capacity, const void* source, u32 size) -> T* { auto t = (u8*)target; auto s = (u8*)source; auto l = min(capacity, size) * sizeof(T); if(t < s) { while(l--) *t++ = *s++; } else { t += l; s += l; while(l--) *--t = *--s; } return (T*)target; } template auto move(void* target, const void* source, u32 size) -> T* { return move(target, size, source, size); } template auto fill(void* target, u32 capacity, const T& value) -> T* { auto t = (T*)target; while(capacity--) *t++ = value; return (T*)target; } template auto assign(T* target, const U& value, P&&... p) -> void { *target++ = value; assign(target, forward

(p)...); } template auto readl(const void* source) -> T { auto p = (const u8*)source; T data = 0; for(u32 n = 0; n < size; n++) data |= T(*p++) << n * 8; return data; } template auto readm(const void* source) -> T { auto p = (const u8*)source; T data = 0; for(s32 n = size - 1; n >= 0; n--) data |= T(*p++) << n * 8; return data; } template auto writel(void* target, T data) -> void { auto p = (u8*)target; for(u32 n = 0; n < size; n++) *p++ = data >> n * 8; } template auto writem(void* target, T data) -> void { auto p = (u8*)target; for(s32 n = size - 1; n >= 0; n--) *p++ = data >> n * 8; } } ares-126/nall/merge-sort.hpp000066400000000000000000000045511415063341600160510ustar00rootroot00000000000000#pragma once #include #include //class: merge sort //average: O(n log n) //worst: O(n log n) //memory: O(n) //stack: O(log n) //stable?: yes //note: merge sort was chosen over quick sort, because: //* it is a stable sort //* it lacks O(n^2) worst-case overhead //* it usually runs faster than quick sort anyway //note: insertion sort is generally more performant than selection sort #define NALL_MERGE_SORT_INSERTION //#define NALL_MERGE_SORT_SELECTION namespace nall { template auto sort(T list[], u32 size, const Comparator& lessthan) -> void { if(size <= 1) return; //nothing to sort //sort smaller blocks using an O(n^2) algorithm (which for small sizes, increases performance) if(size < 64) { //insertion sort requires a copy (via move construction) #if defined(NALL_MERGE_SORT_INSERTION) for(s32 i = 1, j; i < size; i++) { T copy(move(list[i])); for(j = i - 1; j >= 0; j--) { if(!lessthan(copy, list[j])) break; list[j + 1] = move(list[j]); } list[j + 1] = move(copy); } //selection sort requires a swap #elif defined(NALL_MERGE_SORT_SELECTION) for(u32 i = 0; i < size; i++) { u32 min = i; for(u32 j = i + 1; j < size; j++) { if(lessthan(list[j], list[min])) min = j; } if(min != i) swap(list[i], list[min]); } #endif return; } //split list in half and recursively sort both u32 middle = size / 2; sort(list, middle, lessthan); sort(list + middle, size - middle, lessthan); //left and right are sorted here; perform merge sort //use placement new to avoid needing T to be default-constructable auto buffer = memory::allocate(size); u32 offset = 0, left = 0, right = middle; while(left < middle && right < size) { if(!lessthan(list[right], list[left])) { new(buffer + offset++) T(move(list[left++])); } else { new(buffer + offset++) T(move(list[right++])); } } while(left < middle) new(buffer + offset++) T(move(list[left++])); while(right < size ) new(buffer + offset++) T(move(list[right++])); for(u32 i = 0; i < size; i++) { list[i] = move(buffer[i]); buffer[i].~T(); } memory::free(buffer); } template auto sort(T list[], u32 size) -> void { return sort(list, size, [](const T& l, const T& r) { return l < r; }); } } ares-126/nall/nall.hpp000066400000000000000000000051311415063341600147060ustar00rootroot00000000000000#pragma once //include the most common nall headers with one statement //does not include the most obscure components with high cost and low usage #include #include #include //#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //todo: compilation errors when included earlier #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(PLATFORM_WINDOWS) #include #include #endif #if defined(API_POSIX) #include #endif ares-126/nall/path.hpp000066400000000000000000000106201415063341600147130ustar00rootroot00000000000000#pragma once #include namespace nall::Path { inline auto active() -> string { char path[PATH_MAX] = ""; (void)getcwd(path, PATH_MAX); string result = path; if(!result) result = "."; result.transform("\\", "/"); if(!result.endsWith("/")) result.append("/"); return result; } inline auto real(string_view name) -> string { string result; char path[PATH_MAX] = ""; if(::realpath(name, path)) result = Location::path(string{path}.transform("\\", "/")); if(!result) return active(); result.transform("\\", "/"); if(!result.endsWith("/")) result.append("/"); return result; } inline auto program() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; GetModuleFileName(nullptr, path, PATH_MAX); string result = (const char*)utf8_t(path); result.transform("\\", "/"); return Path::real(result); #else Dl_info info; dladdr((void*)&program, &info); return Path::real(info.dli_fname); #endif } // / // c:/ inline auto root() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; SHGetFolderPathW(nullptr, CSIDL_WINDOWS | CSIDL_FLAG_CREATE, nullptr, 0, path); string result = (const char*)utf8_t(path); result.transform("\\", "/"); return slice(result, 0, 3); #else return "/"; #endif } // /home/username/ // c:/users/username/ inline auto user() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; SHGetFolderPathW(nullptr, CSIDL_PROFILE | CSIDL_FLAG_CREATE, nullptr, 0, path); string result = (const char*)utf8_t(path); result.transform("\\", "/"); #else struct passwd* userinfo = getpwuid(getuid()); string result = userinfo->pw_dir; #endif if(!result) result = "."; if(!result.endsWith("/")) result.append("/"); return result; } // /home/username/Desktop/ // c:/users/username/Desktop/ inline auto desktop(string_view name = {}) -> string { return {user(), "Desktop/", name}; } //todo: MacOS uses the same location for userData() and userSettings() //... is there a better option here? // /home/username/.config/ // ~/Library/Application Support/ // c:/users/username/appdata/roaming/ inline auto userSettings() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; SHGetFolderPathW(nullptr, CSIDL_APPDATA | CSIDL_FLAG_CREATE, nullptr, 0, path); string result = (const char*)utf8_t(path); result.transform("\\", "/"); #elif defined(PLATFORM_MACOS) string result = {Path::user(), "Library/Application Support/"}; #else string result; if(const char *env = getenv("XDG_CONFIG_HOME")) { result = string(env); } else { result = {Path::user(), ".config/"}; } #endif if(!result) result = "."; if(!result.endsWith("/")) result.append("/"); return result; } // /home/username/.local/share/ // ~/Library/Application Support/ // c:/users/username/appdata/local/ inline auto userData() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; SHGetFolderPathW(nullptr, CSIDL_LOCAL_APPDATA | CSIDL_FLAG_CREATE, nullptr, 0, path); string result = (const char*)utf8_t(path); result.transform("\\", "/"); #elif defined(PLATFORM_MACOS) string result = {Path::user(), "Library/Application Support/"}; #else string result; if(const char* env = getenv("XDG_DATA_HOME")) { result = string(env); } else { result = {Path::user(), ".local/share/"}; } #endif if(!result) result = "."; if(!result.endsWith("/")) result.append("/"); return result; } // /usr/share // /Library/Application Support/ // c:/ProgramData/ inline auto sharedData() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; SHGetFolderPathW(nullptr, CSIDL_COMMON_APPDATA | CSIDL_FLAG_CREATE, nullptr, 0, path); string result = (const char*)utf8_t(path); result.transform("\\", "/"); #elif defined(PLATFORM_MACOS) string result = "/Library/Application Support/"; #else string result = "/usr/share/"; #endif if(!result) result = "."; if(!result.endsWith("/")) result.append("/"); return result; } // /tmp // c:/users/username/AppData/Local/Temp/ inline auto temporary() -> string { #if defined(PLATFORM_WINDOWS) wchar_t path[PATH_MAX] = L""; GetTempPathW(PATH_MAX, path); string result = (const char*)utf8_t(path); result.transform("\\", "/"); #elif defined(P_tmpdir) string result = P_tmpdir; #else string result = "/tmp/"; #endif if(!result.endsWith("/")) result.append("/"); return result; } } ares-126/nall/platform.hpp000066400000000000000000000136151415063341600156120ustar00rootroot00000000000000#pragma once #include #include namespace Math { static const long double e = 2.71828182845904523536; static const long double Pi = 3.14159265358979323846; } #if defined(PLATFORM_WINDOWS) #include #include #include #include #include #include #include #include #include #include #include #include #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if !defined(PLATFORM_WINDOWS) #include #include #include #include #include #include #include #include #include #include #endif #if defined(ARCHITECTURE_X86) || defined(ARCHITECTURE_AMD64) #include #undef _serialize #endif #if !defined(__has_builtin) #define __has_builtin(x) 0 #endif #if defined(COMPILER_MICROSOFT) #define va_copy(dest, src) ((dest) = (src)) #endif #if defined(PLATFORM_WINDOWS) #undef IN #undef OUT #undef interface #define dllexport __declspec(dllexport) #define MSG_NOSIGNAL 0 extern "C" { using pollfd = WSAPOLLFD; } inline auto access(const char* path, int amode) -> int { return _waccess(nall::utf16_t(path), amode); } inline auto getcwd(char* buf, size_t size) -> char* { wchar_t wpath[PATH_MAX] = L""; if(!_wgetcwd(wpath, size)) return nullptr; strcpy(buf, nall::utf8_t(wpath)); return buf; } inline auto mkdir(const char* path, int mode) -> int { return _wmkdir(nall::utf16_t(path)); } inline auto poll(struct pollfd fds[], unsigned long nfds, int timeout) -> int { return WSAPoll(fds, nfds, timeout); } inline auto putenv(const char* value) -> int { return _wputenv(nall::utf16_t(value)); } inline auto realpath(const char* file_name, char* resolved_name) -> char* { wchar_t wfile_name[PATH_MAX] = L""; if(!_wfullpath(wfile_name, nall::utf16_t(file_name), PATH_MAX)) return nullptr; strcpy(resolved_name, nall::utf8_t(wfile_name)); return resolved_name; } inline auto rename(const char* oldname, const char* newname) -> int { return _wrename(nall::utf16_t(oldname), nall::utf16_t(newname)); } namespace nall { //network functions take void*, not char*. this allows them to be used without casting inline auto recv(int socket, void* buffer, size_t length, int flags) -> ssize_t { return ::recv(socket, (char*)buffer, length, flags); } inline auto send(int socket, const void* buffer, size_t length, int flags) -> ssize_t { return ::send(socket, (const char*)buffer, length, flags); } inline auto setsockopt(int socket, int level, int option_name, const void* option_value, socklen_t option_len) -> int { return ::setsockopt(socket, level, option_name, (const char*)option_value, option_len); } } #else #define dllexport #endif #undef bswap16 #undef bswap32 #undef bswap64 #undef bswap128 #undef likely #undef unlikely #if defined(COMPILER_CLANG) || defined(COMPILER_GCC) #define bswap16(value) __builtin_bswap16(value) #define bswap32(value) __builtin_bswap32(value) #define bswap64(value) __builtin_bswap64(value) #if defined(__SIZEOF_INT128__) inline auto bswap128(u128 value) -> u128 { #if defined(__SSSE3__) static const __m128i shuffle = _mm_setr_epi8(15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); return reinterpret_cast(_mm_shuffle_epi8(reinterpret_cast<__m128i>(value), shuffle)); #else return (u128)__builtin_bswap64(value) << 64 | __builtin_bswap64(value >> 64); #endif } #endif #define likely(expression) __builtin_expect(bool(expression), true) #define unlikely(expression) __builtin_expect(bool(expression), false) #else inline auto bswap16(u16 value) -> u16 { return value << 8 | value >> 8; } inline auto bswap32(u32 value) -> u32 { return (u32)bswap16(value) << 16 | bswap16(value >> 16); } inline auto bswap64(u64 value) -> u64 { return (u64)bswap32(value) << 32 | bswap32(value >> 32); } #if defined(__SIZEOF_INT128__) inline auto bswap128(u128 value) -> u128 { return (u128)bswap64(value) << 64 | bswap64(value >> 64); } #endif #define likely(expression) expression #define unlikely(expression) expression #endif //notify the processor/operating system that this thread is currently awaiting an event (eg a spinloop) //calling this function aims to avoid consuming 100% CPU resources on the active thread during spinloops inline auto spinloop() -> void { #if defined(COMPILER_CLANG) || defined(COMPILER_GCC) #if defined(ARCHITECTURE_X86) || defined(ARCHITECTURE_AMD64) __builtin_ia32_pause(); return; #endif #endif usleep(1); } #if defined(PLATFORM_MACOS) #define MSG_NOSIGNAL 0 #endif #if defined(COMPILER_CLANG) || defined(COMPILER_GCC) #define no_optimize __attribute__((optnone)) #define noinline __attribute__((noinline)) #define alwaysinline inline __attribute__((always_inline)) #elif defined(COMPILER_MICROSOFT) #define no_optimize #define noinline __declspec(noinline) #define alwaysinline inline __forceinline #else #define no_optimize #define noinline #define alwaysinline inline #endif //P0627: [[unreachable]] -- impossible to simulate with identical syntax, must omit brackets ... #if defined(COMPILER_CLANG) || defined(COMPILER_GCC) #define unreachable __builtin_unreachable() #else #define unreachable throw #endif #if defined(COMPILER_GCC) #undef _serialize #endif #define export $export #define register $register ares-126/nall/pointer.hpp000066400000000000000000000015411415063341600154410ustar00rootroot00000000000000#pragma once namespace nall { template struct pointer { explicit operator bool() const { return value; } pointer() = default; pointer(T* source) { value = source; } pointer(const pointer& source) { value = source.value; } auto& operator=(T* source) { value = source; return *this; } auto& operator=(const pointer& source) { value = source.value; return *this; } auto operator()() -> T* { return value; } auto operator()() const -> const T* { return value; } auto operator->() -> T* { return value; } auto operator->() const -> const T* { return value; } auto operator*() -> T& { return *value; } auto operator*() const -> const T& { return *value; } auto reset() -> void { value = nullptr; } auto data() -> T* { return value; } auto data() const -> const T* { return value; } private: T* value = nullptr; }; } ares-126/nall/posix/000077500000000000000000000000001415063341600144115ustar00rootroot00000000000000ares-126/nall/posix/service.hpp000066400000000000000000000054121415063341600165640ustar00rootroot00000000000000#pragma once #include namespace nall { struct service { explicit operator bool() const; auto command(const string& name, const string& command) -> bool; auto receive() -> string; auto name() const -> string; auto stop() const -> bool; private: shared_memory shared; string _name; bool _stop = false; }; inline service::operator bool() const { return (bool)shared; } //returns true on new service process creation (false is not necessarily an error) inline auto service::command(const string& name, const string& command) -> bool { if(!name) return false; if(!command) return print("[{0}] usage: {service} command\n" "commands:\n" " status : query whether service is running\n" " start : start service if it is not running\n" " stop : stop service if it is running\n" " remove : remove semaphore lock if service crashed\n" " {value} : send custom command to service\n" "", string_format{name}), false; if(shared.open(name, 4096)) { if(command == "start") { print("[{0}] already started\n", string_format{name}); } else if(command == "status") { print("[{0}] running\n", string_format{name}); } if(auto data = shared.acquire()) { if(command == "stop") print("[{0}] stopped\n", string_format{name}); memory::copy(data, 4096, command.data(), command.size()); shared.release(); } if(command == "remove") { shared.remove(); print("[{0}] removed\n", string_format{name}); } return false; } if(command == "start") { if(shared.create(name, 4096)) { print("[{0}] started\n", string_format{name}); auto pid = fork(); if(pid == 0) { signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN); _name = name; return true; } shared.close(); } else { print("[{0}] start failed ({1})\n", string_format{name, strerror(errno)}); } return false; } if(command == "status") { print("[{0}] stopped\n", string_format{name}); return false; } return false; } inline auto service::receive() -> string { string command; if(shared) { if(auto data = shared.acquire()) { if(*data) { command.resize(4095); memory::copy(command.get(), data, 4095); memory::fill(data, 4096); } shared.release(); if(command == "remove") { _stop = true; return ""; } else if(command == "start") { return ""; } else if(command == "status") { return ""; } else if(command == "stop") { _stop = true; shared.remove(); return ""; } } } return command; } inline auto service::name() const -> string { return _name; } inline auto service::stop() const -> bool { return _stop; } } ares-126/nall/posix/shared-memory.hpp000066400000000000000000000060041415063341600176760ustar00rootroot00000000000000#pragma once #include #include namespace nall { struct shared_memory { shared_memory() = default; shared_memory(const shared_memory&) = delete; auto operator=(const shared_memory&) -> shared_memory& = delete; ~shared_memory() { reset(); } explicit operator bool() const { return _mode != mode::inactive; } auto size() const -> u32 { return _size; } auto acquired() const -> bool { return _acquired; } auto acquire() -> u8* { if(!acquired()) { sem_wait(_semaphore); _acquired = true; } return _data; } auto release() -> void { if(acquired()) { sem_post(_semaphore); _acquired = false; } } auto reset() -> void { release(); if(_mode == mode::server) return remove(); if(_mode == mode::client) return close(); } auto create(const string& name, u32 size) -> bool { reset(); _name = {"/nall-", string{name}.transform("/:", "--")}; _size = size; //O_CREAT | O_EXCL seems to throw ENOENT even when semaphore does not exist ... _semaphore = sem_open(_name, O_CREAT, 0644, 1); if(_semaphore == SEM_FAILED) return remove(), false; _descriptor = shm_open(_name, O_CREAT | O_TRUNC | O_RDWR, 0644); if(_descriptor < 0) return remove(), false; if(ftruncate(_descriptor, _size) != 0) return remove(), false; _data = (u8*)mmap(nullptr, _size, PROT_READ | PROT_WRITE, MAP_SHARED, _descriptor, 0); if(_data == MAP_FAILED) return remove(), false; memory::fill(_data, _size); _mode = mode::server; return true; } auto remove() -> void { if(_data) { munmap(_data, _size); _data = nullptr; } if(_descriptor) { ::close(_descriptor); shm_unlink(_name); _descriptor = -1; } if(_semaphore) { sem_close(_semaphore); sem_unlink(_name); _semaphore = nullptr; } _mode = mode::inactive; _name = ""; _size = 0; } auto open(const string& name, u32 size) -> bool { reset(); _name = {"/nall-", string{name}.transform("/:", "--")}; _size = size; _semaphore = sem_open(_name, 0, 0644); if(_semaphore == SEM_FAILED) return close(), false; _descriptor = shm_open(_name, O_RDWR, 0644); if(_descriptor < 0) return close(), false; _data = (u8*)mmap(nullptr, _size, PROT_READ | PROT_WRITE, MAP_SHARED, _descriptor, 0); if(_data == MAP_FAILED) return close(), false; _mode = mode::client; return true; } auto close() -> void { if(_data) { munmap(_data, _size); _data = nullptr; } if(_descriptor) { ::close(_descriptor); _descriptor = -1; } if(_semaphore) { sem_close(_semaphore); _semaphore = nullptr; } _mode = mode::inactive; _name = ""; _size = 0; } private: enum class mode : u32 { server, client, inactive } _mode = mode::inactive; string _name; sem_t* _semaphore = nullptr; s32 _descriptor = -1; u8* _data = nullptr; u32 _size = 0; bool _acquired = false; }; } ares-126/nall/primitives.hpp000066400000000000000000000014661415063341600161620ustar00rootroot00000000000000#pragma once #include #include #include namespace nall { struct Boolean; template struct Natural; template struct Integer; template struct Real; } #include #include #include #include #include #include #include #include namespace nall { template auto Natural::integer() const -> Integer { return Integer(*this); } template auto Integer::natural() const -> Natural { return Natural(*this); } } ares-126/nall/primitives/000077500000000000000000000000001415063341600154425ustar00rootroot00000000000000ares-126/nall/primitives/bit-field.hpp000066400000000000000000000050171415063341600200150ustar00rootroot00000000000000#pragma once namespace nall { template struct BitField; /* static BitField */ template struct BitField { static_assert(Precision >= 1 && Precision <= 64); using type = conditional_t>>>; enum : u32 { shift = Index < 0 ? Precision + Index : Index }; enum : type { mask = 1ull << shift }; BitField(const BitField&) = delete; auto& operator=(const BitField& source) { target = target & ~mask | (bool)source << shift; return *this; } template BitField(T* source) : target((type&)*source) { static_assert(sizeof(T) == sizeof(type)); } auto bit() const { return shift; } operator bool() const { return target & mask; } auto& operator=(bool source) { target = target & ~mask | source << shift; return *this; } auto& operator&=(bool source) { target = target & (~mask | source << shift); return *this; } auto& operator^=(bool source) { target = target ^ source << shift; return *this; } auto& operator|=(bool source) { target = target | source << shift; return *this; } private: type& target; }; /* dynamic BitField */ template struct BitField { static_assert(Precision >= 1 && Precision <= 64); using type = conditional_t>>>; BitField(const BitField&) = delete; auto& operator=(const BitField& source) { target = target & ~mask | (bool)source << shift; return *this; } template BitField(T* source, s32 index) : target((type&)*source) { static_assert(sizeof(T) == sizeof(type)); if(index < 0) index = Precision + index; mask = 1ull << index; shift = index; } auto bit() const { return shift; } operator bool() const { return target & mask; } auto& operator=(bool source) { target = target & ~mask | source << shift; return *this; } auto& operator&=(bool source) { target = target & (~mask | source << shift); return *this; } auto& operator^=(bool source) { target = target ^ source << shift; return *this; } auto& operator|=(bool source) { target = target | source << shift; return *this; } private: type& target; type mask; u32 shift; }; } ares-126/nall/primitives/bit-range.hpp000066400000000000000000000156421415063341600200330ustar00rootroot00000000000000#pragma once namespace nall { /* static BitRange */ template struct BitRange { static_assert(Precision >= 1 && Precision <= 64); static_assert(Lo < Precision && Hi < Precision); static_assert(Lo <= Hi); using type = conditional_t>>>; enum : u32 { lo = Lo < 0 ? Precision + Lo : Lo }; enum : u32 { hi = Hi < 0 ? Precision + Hi : Hi }; enum : type { mask = ~0ull >> 64 - (hi - lo + 1) << lo }; enum : u32 { shift = lo }; BitRange(const BitRange& source) = delete; auto& operator=(const BitRange& source) { target = target & ~mask | ((source.target & source.mask) >> source.shift) << shift & mask; return *this; } template BitRange(T* source) : target((type&)*source) { static_assert(sizeof(T) == sizeof(type)); } operator type() const { return (target & mask) >> shift; } auto operator++(s32) { auto value = (target & mask) >> shift; target = target & ~mask | target + (1 << shift) & mask; return value; } auto operator--(s32) { auto value = (target & mask) >> shift; target = target & ~mask | target - (1 << shift) & mask; return value; } auto& operator++() { target = target & ~mask | target + (1 << shift) & mask; return *this; } auto& operator--() { target = target & ~mask | target - (1 << shift) & mask; return *this; } template auto& operator=(const T& source) { type value = source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator*=(const T& source) { auto value = ((target & mask) >> shift) * source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator/=(const T& source) { auto value = ((target & mask) >> shift) / source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator%=(const T& source) { auto value = ((target & mask) >> shift) % source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator+=(const T& source) { auto value = ((target & mask) >> shift) + source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator-=(const T& source) { auto value = ((target & mask) >> shift) - source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator<<=(const T& source) { auto value = ((target & mask) >> shift) << source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator>>=(const T& source) { auto value = ((target & mask) >> shift) >> source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator&=(const T& source) { type value = source; target = target & (~mask | value << shift & mask); return *this; } template auto& operator^=(const T& source) { type value = source; target = target ^ value << shift & mask; return *this; } template auto& operator|=(const T& source) { type value = source; target = target | value << shift & mask; return *this; } private: type& target; }; /* dynamic BitRange */ template struct DynamicBitRange { static_assert(Precision >= 1 && Precision <= 64); using type = conditional_t>>>; DynamicBitRange(const DynamicBitRange& source) = delete; auto& operator=(const DynamicBitRange& source) { target = target & ~mask | ((source.target & source.mask) >> source.shift) << shift & mask; return *this; } DynamicBitRange(Type& source, s32 index) : target(source) { if(index < 0) index = Precision + index; mask = 1ull << index; shift = index; } DynamicBitRange(Type& source, s32 lo, s32 hi) : target(source) { if(lo < 0) lo = Precision + lo; if(hi < 0) hi = Precision + hi; if(lo > hi) swap(lo, hi); mask = ~0ull >> 64 - (hi - lo + 1) << lo; shift = lo; } operator type() const { return (target & mask) >> shift; } auto operator++(s32) { auto value = (target & mask) >> shift; target = target & ~mask | target + (1 << shift) & mask; return value; } auto operator--(s32) { auto value = (target & mask) >> shift; target = target & ~mask | target - (1 << shift) & mask; return value; } auto& operator++() { target = target & ~mask | target + (1 << shift) & mask; return *this; } auto& operator--() { target = target & ~mask | target - (1 << shift) & mask; return *this; } template auto& operator=(const T& source) { type value = source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator*=(const T& source) { auto value = ((target & mask) >> shift) * source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator/=(const T& source) { auto value = ((target & mask) >> shift) / source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator%=(const T& source) { auto value = ((target & mask) >> shift) % source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator+=(const T& source) { auto value = ((target & mask) >> shift) + source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator-=(const T& source) { auto value = ((target & mask) >> shift) - source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator<<=(const T& source) { auto value = ((target & mask) >> shift) << source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator>>=(const T& source) { auto value = ((target & mask) >> shift) >> source; target = target & ~mask | value << shift & mask; return *this; } template auto& operator&=(const T& source) { type value = source; target = target & (~mask | value << shift & mask); return *this; } template auto& operator^=(const T& source) { type value = source; target = target ^ value << shift & mask; return *this; } template auto& operator|=(const T& source) { type value = source; target = target | value << shift & mask; return *this; } private: Type& target; type mask; u32 shift; }; } ares-126/nall/primitives/boolean.hpp000066400000000000000000000016501415063341600175740ustar00rootroot00000000000000#pragma once namespace nall { struct Boolean { static constexpr auto bits() -> u32 { return 1; } using btype = bool; Boolean() : data(false) {} template Boolean(const T& value) : data(value) {} explicit Boolean(const char* value) { data = !strcmp(value, "true"); } operator bool() const { return data; } template auto& operator=(const T& value) { data = value; return *this; } auto flip() { return data ^= 1; } auto raise() { return data == 0 ? data = 1, true : false; } auto lower() { return data == 1 ? data = 0, true : false; } auto flip(bool value) { return data != value ? (data = value, true) : false; } auto raise(bool value) { return !data && value ? (data = value, true) : (data = value, false); } auto lower(bool value) { return data && !value ? (data = value, true) : (data = value, false); } auto serialize(serializer& s) { s(data); } private: btype data; }; } ares-126/nall/primitives/integer.hpp000066400000000000000000000137301415063341600176140ustar00rootroot00000000000000#pragma once namespace nall { template struct IntegerPrimitive { static_assert(Precision >= 1 && Precision <= 64); using stype = conditional_t>>>; using utype = typename Natural::utype; IntegerPrimitive() = default; template IntegerPrimitive(IntegerPrimitive value) { data = cast(value); } template IntegerPrimitive(const T& value) { data = cast(value); } explicit IntegerPrimitive(const char* value) { data = cast(toInteger(value)); } operator stype() const { return data; } auto operator++(s32) { auto value = *this; data = cast(data + 1); return value; } auto operator--(s32) { auto value = *this; data = cast(data - 1); return value; } auto& operator++() { data = cast(data + 1); return *this; } auto& operator--() { data = cast(data - 1); return *this; } template auto& operator =(const T& value) { data = cast( value); return *this; } template auto& operator *=(const T& value) { data = cast(data * value); return *this; } template auto& operator /=(const T& value) { data = cast(data / value); return *this; } template auto& operator %=(const T& value) { data = cast(data % value); return *this; } template auto& operator +=(const T& value) { data = cast(data + value); return *this; } template auto& operator -=(const T& value) { data = cast(data - value); return *this; } template auto& operator<<=(const T& value) { data = cast(data << value); return *this; } template auto& operator>>=(const T& value) { data = cast(data >> value); return *this; } template auto& operator &=(const T& value) { data = cast(data & value); return *this; } template auto& operator ^=(const T& value) { data = cast(data ^ value); return *this; } template auto& operator |=(const T& value) { data = cast(data | value); return *this; } private: static constexpr auto mask() -> utype { return ~0ull >> 64 - Precision; } static constexpr auto sign() -> utype { return 1ull << Precision - 1; } auto cast(stype value) const -> stype { return (value & mask() ^ sign()) - sign(); } stype data; }; template struct Integer { static_assert(Precision >= 1 && Precision <= 64); static constexpr auto bits() -> u32 { return Precision; } using stype = conditional_t>>>; using utype = typename Natural::utype; static constexpr auto mask() -> utype { return ~0ull >> 64 - Precision; } static constexpr auto sign() -> utype { return 1ull << Precision - 1; } Integer() : data(0) {} template Integer(Integer value) { data = cast(value); } template Integer(const T& value) { data = cast(value); } explicit Integer(const char* value) { data = cast(toInteger(value)); } operator stype() const { return data; } auto operator++(s32) { auto value = *this; data = cast(data + 1); return value; } auto operator--(s32) { auto value = *this; data = cast(data - 1); return value; } auto& operator++() { data = cast(data + 1); return *this; } auto& operator--() { data = cast(data - 1); return *this; } template auto& operator =(const T& value) { data = cast( value); return *this; } template auto& operator *=(const T& value) { data = cast(data * value); return *this; } template auto& operator /=(const T& value) { data = cast(data / value); return *this; } template auto& operator %=(const T& value) { data = cast(data % value); return *this; } template auto& operator +=(const T& value) { data = cast(data + value); return *this; } template auto& operator -=(const T& value) { data = cast(data - value); return *this; } template auto& operator<<=(const T& value) { data = cast(data << value); return *this; } template auto& operator>>=(const T& value) { data = cast(data >> value); return *this; } template auto& operator &=(const T& value) { data = cast(data & value); return *this; } template auto& operator ^=(const T& value) { data = cast(data ^ value); return *this; } template auto& operator |=(const T& value) { data = cast(data | value); return *this; } auto bit(s32 index) -> DynamicBitRange { return {*this, index}; } auto bit(s32 index) const -> const DynamicBitRange { return {(Integer&)*this, index}; } auto bit(s32 lo, s32 hi) -> DynamicBitRange { return {*this, lo, hi}; } auto bit(s32 lo, s32 hi) const -> const DynamicBitRange { return {(Integer&)*this, lo, hi}; } auto byte(s32 index) -> DynamicBitRange { return {*this, index * 8 + 0, index * 8 + 7}; } auto byte(s32 index) const -> const DynamicBitRange { return {(Integer&)*this, index * 8 + 0, index * 8 + 7}; } auto mask(s32 index) const -> utype { return data & 1 << index; } auto mask(s32 lo, s32 hi) const -> utype { return data & (~0ull >> 64 - (hi - lo + 1) << lo); } auto slice(s32 index) const { return Natural<>{bit(index)}; } auto slice(s32 lo, s32 hi) const { return Natural<>{bit(lo, hi)}; } static auto clamp(s64 value) -> stype { constexpr s64 b = 1ull << bits() - 1; constexpr s64 m = b - 1; return value > m ? m : value < -b ? -b : value; } auto clip(u32 bits) -> stype { const u64 b = 1ull << bits - 1; const u64 m = b * 2 - 1; return (data & m ^ b) - b; } auto serialize(serializer& s) { s(data); } auto natural() const -> Natural; private: auto cast(stype value) const -> stype { return (value & mask() ^ sign()) - sign(); } stype data; }; } ares-126/nall/primitives/literals.hpp000066400000000000000000000255521415063341600200030ustar00rootroot00000000000000#pragma once namespace nall { inline auto operator"" _b(unsigned long long value) { return boolean{value}; } inline auto operator"" _n(unsigned long long value) { return natural{value}; } inline auto operator"" _i(unsigned long long value) { return integer{value}; } inline auto operator"" _r(long double value) { return real{value}; } inline auto operator"" _n1(unsigned long long value) { return natural1{value}; } inline auto operator"" _n2(unsigned long long value) { return natural2{value}; } inline auto operator"" _n3(unsigned long long value) { return natural3{value}; } inline auto operator"" _n4(unsigned long long value) { return natural4{value}; } inline auto operator"" _n5(unsigned long long value) { return natural5{value}; } inline auto operator"" _n6(unsigned long long value) { return natural6{value}; } inline auto operator"" _n7(unsigned long long value) { return natural7{value}; } inline auto operator"" _n8(unsigned long long value) { return natural8{value}; } inline auto operator"" _n9(unsigned long long value) { return natural9{value}; } inline auto operator"" _n10(unsigned long long value) { return natural10{value}; } inline auto operator"" _n11(unsigned long long value) { return natural11{value}; } inline auto operator"" _n12(unsigned long long value) { return natural12{value}; } inline auto operator"" _n13(unsigned long long value) { return natural13{value}; } inline auto operator"" _n14(unsigned long long value) { return natural14{value}; } inline auto operator"" _n15(unsigned long long value) { return natural15{value}; } inline auto operator"" _n16(unsigned long long value) { return natural16{value}; } inline auto operator"" _n17(unsigned long long value) { return natural17{value}; } inline auto operator"" _n18(unsigned long long value) { return natural18{value}; } inline auto operator"" _n19(unsigned long long value) { return natural19{value}; } inline auto operator"" _n20(unsigned long long value) { return natural20{value}; } inline auto operator"" _n21(unsigned long long value) { return natural21{value}; } inline auto operator"" _n22(unsigned long long value) { return natural22{value}; } inline auto operator"" _n23(unsigned long long value) { return natural23{value}; } inline auto operator"" _n24(unsigned long long value) { return natural24{value}; } inline auto operator"" _n25(unsigned long long value) { return natural25{value}; } inline auto operator"" _n26(unsigned long long value) { return natural26{value}; } inline auto operator"" _n27(unsigned long long value) { return natural27{value}; } inline auto operator"" _n28(unsigned long long value) { return natural28{value}; } inline auto operator"" _n29(unsigned long long value) { return natural29{value}; } inline auto operator"" _n30(unsigned long long value) { return natural30{value}; } inline auto operator"" _n31(unsigned long long value) { return natural31{value}; } inline auto operator"" _n32(unsigned long long value) { return natural32{value}; } inline auto operator"" _n33(unsigned long long value) { return natural33{value}; } inline auto operator"" _n34(unsigned long long value) { return natural34{value}; } inline auto operator"" _n35(unsigned long long value) { return natural35{value}; } inline auto operator"" _n36(unsigned long long value) { return natural36{value}; } inline auto operator"" _n37(unsigned long long value) { return natural37{value}; } inline auto operator"" _n38(unsigned long long value) { return natural38{value}; } inline auto operator"" _n39(unsigned long long value) { return natural39{value}; } inline auto operator"" _n40(unsigned long long value) { return natural40{value}; } inline auto operator"" _n41(unsigned long long value) { return natural41{value}; } inline auto operator"" _n42(unsigned long long value) { return natural42{value}; } inline auto operator"" _n43(unsigned long long value) { return natural43{value}; } inline auto operator"" _n44(unsigned long long value) { return natural44{value}; } inline auto operator"" _n45(unsigned long long value) { return natural45{value}; } inline auto operator"" _n46(unsigned long long value) { return natural46{value}; } inline auto operator"" _n47(unsigned long long value) { return natural47{value}; } inline auto operator"" _n48(unsigned long long value) { return natural48{value}; } inline auto operator"" _n49(unsigned long long value) { return natural49{value}; } inline auto operator"" _n50(unsigned long long value) { return natural50{value}; } inline auto operator"" _n51(unsigned long long value) { return natural51{value}; } inline auto operator"" _n52(unsigned long long value) { return natural52{value}; } inline auto operator"" _n53(unsigned long long value) { return natural53{value}; } inline auto operator"" _n54(unsigned long long value) { return natural54{value}; } inline auto operator"" _n55(unsigned long long value) { return natural55{value}; } inline auto operator"" _n56(unsigned long long value) { return natural56{value}; } inline auto operator"" _n57(unsigned long long value) { return natural57{value}; } inline auto operator"" _n58(unsigned long long value) { return natural58{value}; } inline auto operator"" _n59(unsigned long long value) { return natural59{value}; } inline auto operator"" _n60(unsigned long long value) { return natural60{value}; } inline auto operator"" _n61(unsigned long long value) { return natural61{value}; } inline auto operator"" _n62(unsigned long long value) { return natural62{value}; } inline auto operator"" _n63(unsigned long long value) { return natural63{value}; } inline auto operator"" _n64(unsigned long long value) { return natural64{value}; } inline auto operator"" _i1(unsigned long long value) { return integer1{value}; } inline auto operator"" _i2(unsigned long long value) { return integer2{value}; } inline auto operator"" _i3(unsigned long long value) { return integer3{value}; } inline auto operator"" _i4(unsigned long long value) { return integer4{value}; } inline auto operator"" _i5(unsigned long long value) { return integer5{value}; } inline auto operator"" _i6(unsigned long long value) { return integer6{value}; } inline auto operator"" _i7(unsigned long long value) { return integer7{value}; } inline auto operator"" _i8(unsigned long long value) { return integer8{value}; } inline auto operator"" _i9(unsigned long long value) { return integer9{value}; } inline auto operator"" _i10(unsigned long long value) { return integer10{value}; } inline auto operator"" _i11(unsigned long long value) { return integer11{value}; } inline auto operator"" _i12(unsigned long long value) { return integer12{value}; } inline auto operator"" _i13(unsigned long long value) { return integer13{value}; } inline auto operator"" _i14(unsigned long long value) { return integer14{value}; } inline auto operator"" _i15(unsigned long long value) { return integer15{value}; } inline auto operator"" _i16(unsigned long long value) { return integer16{value}; } inline auto operator"" _i17(unsigned long long value) { return integer17{value}; } inline auto operator"" _i18(unsigned long long value) { return integer18{value}; } inline auto operator"" _i19(unsigned long long value) { return integer19{value}; } inline auto operator"" _i20(unsigned long long value) { return integer20{value}; } inline auto operator"" _i21(unsigned long long value) { return integer21{value}; } inline auto operator"" _i22(unsigned long long value) { return integer22{value}; } inline auto operator"" _i23(unsigned long long value) { return integer23{value}; } inline auto operator"" _i24(unsigned long long value) { return integer24{value}; } inline auto operator"" _i25(unsigned long long value) { return integer25{value}; } inline auto operator"" _i26(unsigned long long value) { return integer26{value}; } inline auto operator"" _i27(unsigned long long value) { return integer27{value}; } inline auto operator"" _i28(unsigned long long value) { return integer28{value}; } inline auto operator"" _i29(unsigned long long value) { return integer29{value}; } inline auto operator"" _i30(unsigned long long value) { return integer30{value}; } inline auto operator"" _i31(unsigned long long value) { return integer31{value}; } inline auto operator"" _i32(unsigned long long value) { return integer32{value}; } inline auto operator"" _i33(unsigned long long value) { return integer33{value}; } inline auto operator"" _i34(unsigned long long value) { return integer34{value}; } inline auto operator"" _i35(unsigned long long value) { return integer35{value}; } inline auto operator"" _i36(unsigned long long value) { return integer36{value}; } inline auto operator"" _i37(unsigned long long value) { return integer37{value}; } inline auto operator"" _i38(unsigned long long value) { return integer38{value}; } inline auto operator"" _i39(unsigned long long value) { return integer39{value}; } inline auto operator"" _i40(unsigned long long value) { return integer40{value}; } inline auto operator"" _i41(unsigned long long value) { return integer41{value}; } inline auto operator"" _i42(unsigned long long value) { return integer42{value}; } inline auto operator"" _i43(unsigned long long value) { return integer43{value}; } inline auto operator"" _i44(unsigned long long value) { return integer44{value}; } inline auto operator"" _i45(unsigned long long value) { return integer45{value}; } inline auto operator"" _i46(unsigned long long value) { return integer46{value}; } inline auto operator"" _i47(unsigned long long value) { return integer47{value}; } inline auto operator"" _i48(unsigned long long value) { return integer48{value}; } inline auto operator"" _i49(unsigned long long value) { return integer49{value}; } inline auto operator"" _i50(unsigned long long value) { return integer50{value}; } inline auto operator"" _i51(unsigned long long value) { return integer51{value}; } inline auto operator"" _i52(unsigned long long value) { return integer52{value}; } inline auto operator"" _i53(unsigned long long value) { return integer53{value}; } inline auto operator"" _i54(unsigned long long value) { return integer54{value}; } inline auto operator"" _i55(unsigned long long value) { return integer55{value}; } inline auto operator"" _i56(unsigned long long value) { return integer56{value}; } inline auto operator"" _i57(unsigned long long value) { return integer57{value}; } inline auto operator"" _i58(unsigned long long value) { return integer58{value}; } inline auto operator"" _i59(unsigned long long value) { return integer59{value}; } inline auto operator"" _i60(unsigned long long value) { return integer60{value}; } inline auto operator"" _i61(unsigned long long value) { return integer61{value}; } inline auto operator"" _i62(unsigned long long value) { return integer62{value}; } inline auto operator"" _i63(unsigned long long value) { return integer63{value}; } inline auto operator"" _i64(unsigned long long value) { return integer64{value}; } inline auto operator"" _r32(long double value) { return real32{value}; } inline auto operator"" _r64(long double value) { return real32{value}; } } ares-126/nall/primitives/natural.hpp000066400000000000000000000133031415063341600176210ustar00rootroot00000000000000#pragma once namespace nall { template struct NaturalPrimitive { static_assert(Precision >= 1 && Precision <= 64); using utype = conditional_t>>>; NaturalPrimitive() = default; template NaturalPrimitive(NaturalPrimitive value) { data = cast(value); } template NaturalPrimitive(const T& value) { data = cast(value); } explicit NaturalPrimitive(const char* value) { data = cast(toNatural(value)); } operator utype() const { return data; } auto operator++(s32) { auto value = *this; data = cast(data + 1); return value; } auto operator--(s32) { auto value = *this; data = cast(data - 1); return value; } auto& operator++() { data = cast(data + 1); return *this; } auto& operator--() { data = cast(data - 1); return *this; } template auto& operator =(const T& value) { data = cast( value); return *this; } template auto& operator *=(const T& value) { data = cast(data * value); return *this; } template auto& operator /=(const T& value) { data = cast(data / value); return *this; } template auto& operator %=(const T& value) { data = cast(data % value); return *this; } template auto& operator +=(const T& value) { data = cast(data + value); return *this; } template auto& operator -=(const T& value) { data = cast(data - value); return *this; } template auto& operator<<=(const T& value) { data = cast(data << value); return *this; } template auto& operator>>=(const T& value) { data = cast(data >> value); return *this; } template auto& operator &=(const T& value) { data = cast(data & value); return *this; } template auto& operator ^=(const T& value) { data = cast(data ^ value); return *this; } template auto& operator |=(const T& value) { data = cast(data | value); return *this; } auto serialize(serializer& s) { s(data); } private: static constexpr auto mask() -> utype { return ~0ull >> 64 - Precision; } auto cast(utype value) const -> utype { return value & mask(); } utype data; }; template struct Natural { static_assert(Precision >= 1 && Precision <= 64); static constexpr auto bits() -> u32 { return Precision; } using utype = conditional_t>>>; static constexpr auto mask() -> utype { return ~0ull >> 64 - Precision; } Natural() : data(0) {} template Natural(Natural value) { data = cast(value); } template Natural(const T& value) { data = cast(value); } explicit Natural(const char* value) { data = cast(toNatural(value)); } operator utype() const { return data; } auto operator++(s32) { auto value = *this; data = cast(data + 1); return value; } auto operator--(s32) { auto value = *this; data = cast(data - 1); return value; } auto& operator++() { data = cast(data + 1); return *this; } auto& operator--() { data = cast(data - 1); return *this; } template auto& operator =(const T& value) { data = cast( value); return *this; } template auto& operator *=(const T& value) { data = cast(data * value); return *this; } template auto& operator /=(const T& value) { data = cast(data / value); return *this; } template auto& operator %=(const T& value) { data = cast(data % value); return *this; } template auto& operator +=(const T& value) { data = cast(data + value); return *this; } template auto& operator -=(const T& value) { data = cast(data - value); return *this; } template auto& operator<<=(const T& value) { data = cast(data << value); return *this; } template auto& operator>>=(const T& value) { data = cast(data >> value); return *this; } template auto& operator &=(const T& value) { data = cast(data & value); return *this; } template auto& operator ^=(const T& value) { data = cast(data ^ value); return *this; } template auto& operator |=(const T& value) { data = cast(data | value); return *this; } auto bit(s32 index) -> DynamicBitRange { return {*this, index}; } auto bit(s32 index) const -> const DynamicBitRange { return {(Natural&)*this, index}; } auto bit(s32 lo, s32 hi) -> DynamicBitRange { return {*this, lo, hi}; } auto bit(s32 lo, s32 hi) const -> const DynamicBitRange { return {(Natural&)*this, lo, hi}; } auto byte(s32 index) -> DynamicBitRange { return {*this, index * 8 + 0, index * 8 + 7}; } auto byte(s32 index) const -> const DynamicBitRange { return {(Natural&)*this, index * 8 + 0, index * 8 + 7}; } auto mask(s32 index) const -> utype { return data & 1 << index; } auto mask(s32 lo, s32 hi) const -> utype { return data & (~0ull >> 64 - (hi - lo + 1) << lo); } auto slice(s32 index) const { return Natural<>{bit(index)}; } auto slice(s32 lo, s32 hi) const { return Natural<>{bit(lo, hi)}; } static auto clamp(u64 value) -> utype { constexpr u64 b = 1ull << bits() - 1; constexpr u64 m = b * 2 - 1; return value < m ? value : m; } auto clip(u32 bits) -> utype { const u64 b = 1ull << bits - 1; const u64 m = b * 2 - 1; return data & m; } auto serialize(serializer& s) { s(data); } auto integer() const -> Integer; private: auto cast(utype value) const -> utype { return value & mask(); } utype data; }; } ares-126/nall/primitives/real.hpp000066400000000000000000000026351415063341600171040ustar00rootroot00000000000000#pragma once namespace nall { template struct Real { static_assert(Precision == 32 || Precision == 64); static constexpr auto bits() -> u32 { return Precision; } using ftype = conditional_t>; Real() : data(0.0) {} template Real(Real value) : data((ftype)value) {} template Real(const T& value) : data((ftype)value) {} explicit Real(const char* value) : data((ftype)toReal(value)) {} operator ftype() const { return data; } auto operator++(s32) { auto value = *this; ++data; return value; } auto operator--(s32) { auto value = *this; --data; return value; } auto& operator++() { data++; return *this; } auto& operator--() { data--; return *this; } template auto& operator =(const T& value) { data = value; return *this; } template auto& operator*=(const T& value) { data = data * value; return *this; } template auto& operator/=(const T& value) { data = data / value; return *this; } template auto& operator%=(const T& value) { data = data % value; return *this; } template auto& operator+=(const T& value) { data = data + value; return *this; } template auto& operator-=(const T& value) { data = data - value; return *this; } auto serialize(serializer& s) { s(data); } private: ftype data; }; } ares-126/nall/primitives/types.hpp000066400000000000000000000102111415063341600173120ustar00rootroot00000000000000#pragma once namespace nall { using boolean = Boolean; using natural = Natural<>; using integer = Integer<>; using real = Real<>; using natural1 = Natural< 1>; using natural2 = Natural< 2>; using natural3 = Natural< 3>; using natural4 = Natural< 4>; using natural5 = Natural< 5>; using natural6 = Natural< 6>; using natural7 = Natural< 7>; using natural8 = Natural< 8>; using natural9 = Natural< 9>; using natural10 = Natural<10>; using natural11 = Natural<11>; using natural12 = Natural<12>; using natural13 = Natural<13>; using natural14 = Natural<14>; using natural15 = Natural<15>; using natural16 = Natural<16>; using natural17 = Natural<17>; using natural18 = Natural<18>; using natural19 = Natural<19>; using natural20 = Natural<20>; using natural21 = Natural<21>; using natural22 = Natural<22>; using natural23 = Natural<23>; using natural24 = Natural<24>; using natural25 = Natural<25>; using natural26 = Natural<26>; using natural27 = Natural<27>; using natural28 = Natural<28>; using natural29 = Natural<29>; using natural30 = Natural<30>; using natural31 = Natural<31>; using natural32 = Natural<32>; using natural33 = Natural<33>; using natural34 = Natural<34>; using natural35 = Natural<35>; using natural36 = Natural<36>; using natural37 = Natural<37>; using natural38 = Natural<38>; using natural39 = Natural<39>; using natural40 = Natural<40>; using natural41 = Natural<41>; using natural42 = Natural<42>; using natural43 = Natural<43>; using natural44 = Natural<44>; using natural45 = Natural<45>; using natural46 = Natural<46>; using natural47 = Natural<47>; using natural48 = Natural<48>; using natural49 = Natural<49>; using natural50 = Natural<50>; using natural51 = Natural<51>; using natural52 = Natural<52>; using natural53 = Natural<53>; using natural54 = Natural<54>; using natural55 = Natural<55>; using natural56 = Natural<56>; using natural57 = Natural<57>; using natural58 = Natural<58>; using natural59 = Natural<59>; using natural60 = Natural<60>; using natural61 = Natural<61>; using natural62 = Natural<62>; using natural63 = Natural<63>; using natural64 = Natural<64>; using integer1 = Integer< 1>; using integer2 = Integer< 2>; using integer3 = Integer< 3>; using integer4 = Integer< 4>; using integer5 = Integer< 5>; using integer6 = Integer< 6>; using integer7 = Integer< 7>; using integer8 = Integer< 8>; using integer9 = Integer< 9>; using integer10 = Integer<10>; using integer11 = Integer<11>; using integer12 = Integer<12>; using integer13 = Integer<13>; using integer14 = Integer<14>; using integer15 = Integer<15>; using integer16 = Integer<16>; using integer17 = Integer<17>; using integer18 = Integer<18>; using integer19 = Integer<19>; using integer20 = Integer<20>; using integer21 = Integer<21>; using integer22 = Integer<22>; using integer23 = Integer<23>; using integer24 = Integer<24>; using integer25 = Integer<25>; using integer26 = Integer<26>; using integer27 = Integer<27>; using integer28 = Integer<28>; using integer29 = Integer<29>; using integer30 = Integer<30>; using integer31 = Integer<31>; using integer32 = Integer<32>; using integer33 = Integer<33>; using integer34 = Integer<34>; using integer35 = Integer<35>; using integer36 = Integer<36>; using integer37 = Integer<37>; using integer38 = Integer<38>; using integer39 = Integer<39>; using integer40 = Integer<40>; using integer41 = Integer<41>; using integer42 = Integer<42>; using integer43 = Integer<43>; using integer44 = Integer<44>; using integer45 = Integer<45>; using integer46 = Integer<46>; using integer47 = Integer<47>; using integer48 = Integer<48>; using integer49 = Integer<49>; using integer50 = Integer<50>; using integer51 = Integer<51>; using integer52 = Integer<52>; using integer53 = Integer<53>; using integer54 = Integer<54>; using integer55 = Integer<55>; using integer56 = Integer<56>; using integer57 = Integer<57>; using integer58 = Integer<58>; using integer59 = Integer<59>; using integer60 = Integer<60>; using integer61 = Integer<61>; using integer62 = Integer<62>; using integer63 = Integer<63>; using integer64 = Integer<64>; using real32 = Real<32>; using real64 = Real<64>; } ares-126/nall/priority-queue.hpp000066400000000000000000000046361415063341600167740ustar00rootroot00000000000000#pragma once //priority queue implementation using binary min-heap array: //O(1) find //O(log n) insert //O(log n) remove(first) //O(n) remove(event) #include #include namespace nall { template struct priority_queue; template struct priority_queue { explicit operator bool() const { return size != 0; } auto reset() -> void { clock = 0; size = 0; } template auto step(u32 clocks, const F& callback) -> void { clock += clocks; while(size && ge(clock, heap[0].clock)) { if(auto event = remove()) callback(*event); } } auto insert(const T& event, u32 clock) -> bool { if(size >= Size) return false; u32 child = size++; clock += this->clock; while(child) { u32 parent = (child - 1) >> 1; if(ge(clock, heap[parent].clock)) break; heap[child].clock = heap[parent].clock; heap[child].event = heap[parent].event; heap[child].valid = heap[parent].valid; child = parent; } heap[child].clock = clock; heap[child].event = event; heap[child].valid = true; return true; } auto remove() -> maybe { T event = heap[0].event; bool valid = heap[0].valid; u32 parent = 0; u32 clock = heap[--size].clock; while(true) { u32 child = (parent << 1) + 1; if(child >= size) break; if(child + 1 < size && ge(heap[child].clock, heap[child + 1].clock)) child++; if(ge(heap[child].clock, clock)) break; heap[parent].clock = heap[child].clock; heap[parent].event = heap[child].event; heap[parent].valid = heap[child].valid; parent = child; } heap[parent].clock = clock; heap[parent].event = heap[size].event; heap[parent].valid = heap[size].valid; if(valid) return event; return nothing; } auto remove(const T& event) -> void { for(auto& entry : heap) { if(entry.event == event) entry.valid = false; } } auto serialize(serializer& s) -> void { s(clock); s(size); for(auto& entry : heap) { s(entry.clock); s(entry.event); s(entry.valid); } } private: //returns true if x is greater than or equal to y auto ge(u32 x, u32 y) -> bool { return x - y < 0x7fffffff; } u32 clock = 0; u32 size = 0; struct Entry { u32 clock; T event; bool valid; } heap[Size]; }; } ares-126/nall/property.hpp000066400000000000000000000011121415063341600156370ustar00rootroot00000000000000#if !defined(property) #define property1(declaration) public: declaration #define property2(declaration, getter) public: __declspec(property(get=getter)) declaration; protected: declaration##_ #define property3(declaration, getter, setter) public: __declspec(property(get=getter, put=setter)) declaration; protected: declaration##_ #define property_(_1, _2, _3, name, ...) name #define property(...) property_(__VA_ARGS__, property3, property2, property1)(__VA_ARGS__) #else #undef property1 #undef property2 #undef property3 #undef property_ #undef property #endif ares-126/nall/queue.hpp000066400000000000000000000001651415063341600151060ustar00rootroot00000000000000#include #include #include #include ares-126/nall/queue/000077500000000000000000000000001415063341600143735ustar00rootroot00000000000000ares-126/nall/queue/spsc.hpp000066400000000000000000000025201415063341600160530ustar00rootroot00000000000000#pragma once //single-producer, single-consumer lockless queue //includes await functions for spin-loops namespace nall { template struct queue_spsc; template struct queue_spsc { auto flush() -> void { _read = 0; _write = 2 * Size; } auto size() const -> u32 { return (_write - _read) % (2 * Size); } auto empty() const -> bool { return size() == 0; } auto full() const -> bool { return size() == Size; } auto read() -> maybe { if(empty()) return nothing; auto value = _data[_read % Size]; _read = _read + 1 < 2 * Size ? _read + 1 : 0; return value; } auto write(const T& value) -> bool { if(full()) return false; _data[_write % Size] = value; _write = _write + 1 < 4 * Size ? _write + 1 : 2 * Size; return true; } auto await_empty() -> void { while(!empty()) spinloop(); } auto await_read() -> T { while(empty()) spinloop(); auto value = _data[_read % Size]; _read = _read + 1 < 2 * Size ? _read + 1 : 0; return value; } auto await_write(const T& value) -> void { while(full()) spinloop(); _data[_write % Size] = value; _write = _write + 1 < 4 * Size ? _write + 1 : 2 * Size; } private: T _data[Size]; std::atomic _read = 0; std::atomic _write = 2 * Size; }; } ares-126/nall/queue/st.hpp000066400000000000000000000103721415063341600155350ustar00rootroot00000000000000#pragma once //simple circular ring buffer (single-threaded) namespace nall { template struct queue; template struct queue { auto flush() -> void { _read = 0; _write = 2 * Size; } auto size() const -> u32 { return (_write - _read) % (2 * Size); } auto capacity() const -> u32 { return Size; } auto empty() const -> bool { return size() == 0; } auto full() const -> bool { return size() == Size; } auto peek(u32 index = 0) const -> T { return _data[(_read + index) % Size]; } auto read() -> maybe { if(empty()) return nothing; auto value = _data[_read % Size]; _read = _read + 1 < 2 * Size ? _read + 1 : 0; return value; } auto read(const T& fallback) -> T { if(empty()) return fallback; auto value = _data[_read % Size]; _read = _read + 1 < 2 * Size ? _read + 1 : 0; return value; } auto write(const T& value) -> bool { if(full()) return false; _data[_write % Size] = value; _write = _write + 1 < 4 * Size ? _write + 1 : 2 * Size; return true; } struct iterator_const { iterator_const(const queue& self, u64 offset) : self(self), offset(offset) {} auto operator*() -> T { return self.peek(offset); } auto operator!=(const iterator_const& source) const -> bool { return offset != source.offset; } auto operator++() -> iterator_const& { return offset++, *this; } const queue& self; u64 offset; }; auto begin() const -> iterator_const { return {*this, 0}; } auto end() const -> iterator_const { return {*this, size()}; } auto serialize(serializer& s) -> void { s(_data); s(_read); s(_write); } private: T _data[Size]; u32 _read = 0; u32 _write = 2 * Size; }; template struct queue { queue() = default; queue(const queue& source) { operator=(source); } queue(queue&& source) { operator=(move(source)); } ~queue() { reset(); } auto operator=(const queue& source) -> queue& { if(this == &source) return *this; delete[] _data; _data = new T[source._capacity]; _capacity = source._capacity; _size = source._size; _read = source._read; _write = source._write; for(u32 n : range(_capacity)) _data[n] = source._data[n]; return *this; } auto operator=(queue&& source) -> queue& { if(this == &source) return *this; _data = source._data; _capacity = source._capacity; _size = source._size; _read = source._read; _write = source._write; source._data = nullptr; source.reset(); return *this; } template auto capacity() const -> u32 { return _capacity * sizeof(T) / sizeof(U); } template auto size() const -> u32 { return _size * sizeof(T) / sizeof(U); } auto empty() const -> bool { return _size == 0; } auto pending() const -> bool { return _size > 0; } auto full() const -> bool { return _size >= (s32)_capacity; } auto underflow() const -> bool { return _size < 0; } auto overflow() const -> bool { return _size > (s32)_capacity; } auto data() -> T* { return _data; } auto data() const -> const T* { return _data; } auto reset() { delete[] _data; _data = nullptr; _capacity = 0; _size = 0; _read = 0; _write = 0; } auto resize(u32 capacity, const T& value = {}) -> void { delete[] _data; _data = new T[capacity]; _capacity = capacity; _size = 0; _read = 0; _write = 0; for(u32 n : range(_capacity)) _data[n] = value; } auto flush() -> void { _size = 0; _read = 0; _write = 0; } auto fill(const T& value = {}) -> void { _size = 0; _read = 0; _write = 0; for(u32 n : range(_capacity)) _data[n] = value; } auto peek(u32 index = 0) const -> T { return _data[(_read + index) % _capacity]; } auto read() -> T { T value = _data[_read++]; if(_read >= _capacity) _read = 0; _size--; return value; } auto write(const T& value) -> void { _data[_write++] = value; if(_write >= _capacity) _write = 0; _size++; } auto serialize(serializer& s) -> void { s(array_span{_data, _capacity}); s(_read); s(_write); } private: T* _data = nullptr; u32 _capacity = 0; s32 _size = 0; u32 _read = 0; u32 _write = 0; }; } ares-126/nall/random.hpp000066400000000000000000000101571415063341600152440ustar00rootroot00000000000000#pragma once #include #include #include #include #include #if !defined(PLATFORM_ANDROID) #include #endif #if defined(PLATFORM_LINUX) && __has_include() #include #elif defined(PLATFORM_ANDROID) && __has_include() #include #elif defined(PLATFORM_WINDOWS) && __has_include() #include #else #include #endif namespace nall { template struct RNG { template auto random() -> T { u64 value = 0; for(u32 n : range((sizeof(T) + 3) / 4)) { value = value << 32 | (u32)static_cast(this)->read(); } return value; } template auto bound(T range) -> T { T threshold = -range % range; while(true) { T value = random(); if(value >= threshold) return value % range; } } protected: auto randomSeed() -> u256 { u256 seed = 0; #if defined(PLATFORM_BSD) || defined(PLATFORM_MACOS) for(u32 n : range(8)) seed = seed << 32 | (u32)arc4random(); #elif defined(PLATFORM_LINUX) && __has_include() getrandom(&seed, 32, GRND_NONBLOCK); #elif defined(PLATFORM_ANDROID) && __has_include() syscall(__NR_getrandom, &seed, 32, 0x0001); //GRND_NONBLOCK #elif defined(PLATFORM_WINDOWS) && __has_include() HCRYPTPROV provider; if(CryptAcquireContext(&provider, nullptr, MS_STRONG_PROV, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { CryptGenRandom(provider, 32, (BYTE*)&seed); CryptReleaseContext(provider, 0); } #else srand(time(nullptr)); for(u32 n : range(32)) seed = seed << 8 | (u8)rand(); if(auto fp = fopen("/dev/urandom", "rb")) { fread(&seed, 32, 1, fp); fclose(fp); } #endif return seed; } }; namespace PRNG { //Galois linear feedback shift register using CRC64 polynomials struct LFSR : RNG { LFSR() { seed(); } auto seed(maybe seed = {}) -> void { lfsr = seed ? seed() : (u64)randomSeed(); for(u32 n : range(8)) read(); //hide the CRC64 polynomial from initial output } auto serialize(serializer& s) -> void { s(lfsr); } private: auto read() -> u64 { return lfsr = (lfsr >> 1) ^ (-(lfsr & 1) & crc64); } static const u64 crc64 = 0xc96c'5795'd787'0f42; u64 lfsr = crc64; friend class RNG; }; struct PCG : RNG { PCG() { seed(); } auto seed(maybe seed = {}, maybe sequence = {}) -> void { if(!seed) seed = (u32)randomSeed(); if(!sequence) sequence = 0; state = 0; increment = sequence() << 1 | 1; read(); state += seed(); read(); } auto serialize(serializer& s) -> void { s(state); s(increment); } private: auto read() -> u32 { u64 state = this->state; this->state = state * 6'364'136'223'846'793'005ull + increment; u32 xorshift = (state >> 18 ^ state) >> 27; u32 rotate = state >> 59; return xorshift >> rotate | xorshift << (-rotate & 31); } u64 state = 0; u64 increment = 0; friend class RNG; }; } #if !defined(PLATFORM_ANDROID) namespace CSPRNG { //XChaCha20 cryptographically secure pseudo-random number generator struct XChaCha20 : RNG { XChaCha20() { seed(); } auto seed(maybe key = {}, maybe nonce = {}) -> void { //the randomness comes from the key; the nonce just adds a bit of added entropy if(!key) key = randomSeed(); if(!nonce) nonce = (u192)clock() << 64 | chrono::nanosecond(); context = {key(), nonce()}; } private: auto read() -> u32 { if(!counter) { context.cipher(); context.increment(); } u32 value = context.block[counter++]; if(counter == 16) counter = 0; //64-bytes per block; 4 bytes per read return value; } Cipher::XChaCha20 context{0, 0}; u32 counter = 0; friend class RNG; }; } #endif // inline auto pcgSingleton() -> PRNG::PCG& { static PRNG::PCG pcg; return pcg; } template inline auto random() -> T { return pcgSingleton().random(); } } ares-126/nall/range.hpp000066400000000000000000000047031415063341600150600ustar00rootroot00000000000000#pragma once #include namespace nall { template struct range_t { struct iterator { iterator(T position, T step = 0) : position(position), step(step) {} auto operator*() const -> T { return position; } auto operator!=(const iterator& source) const -> bool { return step > 0 ? position < source.position : position > source.position; } auto operator++() -> iterator& { position += step; return *this; } private: T position; const T step; }; struct reverse_iterator { reverse_iterator(T position, T step = 0) : position(position), step(step) {} auto operator*() const -> T { return position; } auto operator!=(const reverse_iterator& source) const -> bool { return step > 0 ? position > source.position : position < source.position; } auto operator++() -> reverse_iterator& { position -= step; return *this; } private: T position; const T step; }; auto begin() const -> iterator { return {origin, stride}; } auto end() const -> iterator { return {target}; } auto rbegin() const -> reverse_iterator { return {target - stride, stride}; } auto rend() const -> reverse_iterator { return {origin - stride}; } T origin; T target; T stride; }; template inline auto range(s64 size) { return range_t{0, size, 1}; } template inline auto range(s64 offset, s64 size) { return range_t{offset, size, 1}; } template inline auto range(s64 offset, s64 size, s64 step) { return range_t{offset, size, step}; } //returns true if {offset ... offset+length-1} is within {min ... max} in range {lo ... hi} template inline auto within(s64 offset, s64 length, s64 min, s64 max) -> bool { static_assert(lo <= hi); static constexpr s64 range = hi - lo + 1; s64 lhs = (offset - lo) % range; s64 rhs = (offset + length - 1) % range; min = (min - lo) % range; max = (max - lo) % range; if(rhs < lhs) { return lhs <= max || rhs >= min; } else { return max >= lhs && min <= rhs; } } //returns index of target within {offset ... offset+length-1} in range {lo ... hi} template inline auto within(s64 offset, s64 length, s64 target) -> maybe { static_assert(lo <= hi); static constexpr s64 range = hi - lo + 1; s64 start = (offset - lo) % range; s64 index = (target - lo) % range - start; if(index < 0) index += range; if(index < length) return index; return {}; } } ares-126/nall/recompiler/000077500000000000000000000000001415063341600154105ustar00rootroot00000000000000ares-126/nall/recompiler/amd64/000077500000000000000000000000001415063341600163235ustar00rootroot00000000000000ares-126/nall/recompiler/amd64/amd64.hpp000066400000000000000000000004601415063341600177470ustar00rootroot00000000000000#pragma once namespace nall::recompiler { struct amd64 { #include "emitter.hpp" #include "constants.hpp" #include "encoder-instructions.hpp" #if defined(PLATFORM_WINDOWS) #include "encoder-calls-windows.hpp" #else #include "encoder-calls-systemv.hpp" #endif }; } ares-126/nall/recompiler/amd64/constants.hpp000066400000000000000000000126361415063341600210600ustar00rootroot00000000000000#pragma once //{ struct imm8 { explicit imm8(u8 data) : data(data) {} u8 data; }; struct imm16 { explicit imm16(u16 data) : data(data) {} u16 data; }; struct imm32 { explicit imm32(u32 data) : data(data) {} u32 data; }; struct imm64 { explicit imm64(u64 data) : data(data) {} template explicit imm64(T* pointer) : data((u64)pointer) {} template explicit imm64(auto (C::*function)(P...) -> R) { union force_cast_ub { auto (C::*function)(P...) -> R; u64 pointer; } cast{function}; data = cast.pointer; } template explicit imm64(auto (C::*function)(P...) const -> R) { union force_cast_ub { auto (C::*function)(P...) const -> R; u64 pointer; } cast{function}; data = cast.pointer; } u64 data; }; struct mem32 { explicit mem32(u64 data) : data(data) {} template explicit mem32(T* pointer) : data((u64)pointer) {} template explicit mem32(T C::*variable, C* object) { union force_cast_ub { T C::*variable; u64 pointer; } cast{variable}; data = cast.pointer + u64(object); } u64 data; }; struct mem64 { explicit mem64(u64 data) : data(data) {} template explicit mem64(T* pointer) : data((u64)pointer) {} template explicit mem64(T C::*variable, C* object) { union force_cast_ub { T C::*variable; u64 pointer; } cast{variable}; data = cast.pointer + u64(object); } u64 data; }; enum class reg8 : u32 { al, cl, dl, bl, ah, ch, dh, bh, r8b, r9b, r10b, r11b, r12b, r13b, r14b, r15b, }; friend auto operator&(reg8 r, u32 m) -> u32 { return (u32)r & m; } static constexpr reg8 al = reg8::al; static constexpr reg8 cl = reg8::cl; static constexpr reg8 dl = reg8::dl; static constexpr reg8 bl = reg8::bl; static constexpr reg8 ah = reg8::ah; static constexpr reg8 ch = reg8::ch; static constexpr reg8 dh = reg8::dh; static constexpr reg8 bh = reg8::bh; static constexpr reg8 r8b = reg8::r8b; static constexpr reg8 r9b = reg8::r9b; static constexpr reg8 r10b = reg8::r10b; static constexpr reg8 r11b = reg8::r11b; static constexpr reg8 r12b = reg8::r12b; static constexpr reg8 r13b = reg8::r13b; static constexpr reg8 r14b = reg8::r14b; static constexpr reg8 r15b = reg8::r15b; enum class reg16 : u32 { ax, cx, dx, bx, sp, bp, si, di, r8w, r9w, r10w, r11w, r12w, r13w, r14w, r15w, }; friend auto operator&(reg16 r, u32 m) -> u32 { return (u32)r & m; } static constexpr reg16 ax = reg16::ax; static constexpr reg16 cx = reg16::cx; static constexpr reg16 dx = reg16::dx; static constexpr reg16 bx = reg16::bx; static constexpr reg16 sp = reg16::sp; static constexpr reg16 bp = reg16::bp; static constexpr reg16 si = reg16::si; static constexpr reg16 di = reg16::di; static constexpr reg16 r8w = reg16::r8w; static constexpr reg16 r9w = reg16::r9w; static constexpr reg16 r10w = reg16::r10w; static constexpr reg16 r11w = reg16::r11w; static constexpr reg16 r12w = reg16::r12w; static constexpr reg16 r13w = reg16::r13w; static constexpr reg16 r14w = reg16::r14w; static constexpr reg16 r15w = reg16::r15w; enum class reg32 : u32 { eax, ecx, edx, ebx, esp, ebp, esi, edi, r8d, r9d, r10d, r11d, r12d, r13d, r14d, r15d, }; friend auto operator&(reg32 r, u32 m) -> u32 { return (u32)r & m; } static constexpr reg32 eax = reg32::eax; static constexpr reg32 ecx = reg32::ecx; static constexpr reg32 edx = reg32::edx; static constexpr reg32 ebx = reg32::ebx; static constexpr reg32 esp = reg32::esp; static constexpr reg32 ebp = reg32::ebp; static constexpr reg32 esi = reg32::esi; static constexpr reg32 edi = reg32::edi; static constexpr reg32 r8d = reg32::r8d; static constexpr reg32 r9d = reg32::r9d; static constexpr reg32 r10d = reg32::r10d; static constexpr reg32 r11d = reg32::r11d; static constexpr reg32 r12d = reg32::r12d; static constexpr reg32 r13d = reg32::r13d; static constexpr reg32 r14d = reg32::r14d; static constexpr reg32 r15d = reg32::r15d; enum class reg64 : u32 { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15, }; friend auto operator&(reg64 r, u32 m) -> u32 { return (u32)r & m; } static constexpr reg64 rax = reg64::rax; static constexpr reg64 rcx = reg64::rcx; static constexpr reg64 rdx = reg64::rdx; static constexpr reg64 rbx = reg64::rbx; static constexpr reg64 rsp = reg64::rsp; static constexpr reg64 rbp = reg64::rbp; static constexpr reg64 rsi = reg64::rsi; static constexpr reg64 rdi = reg64::rdi; static constexpr reg64 r8 = reg64::r8; static constexpr reg64 r9 = reg64::r9; static constexpr reg64 r10 = reg64::r10; static constexpr reg64 r11 = reg64::r11; static constexpr reg64 r12 = reg64::r12; static constexpr reg64 r13 = reg64::r13; static constexpr reg64 r14 = reg64::r14; static constexpr reg64 r15 = reg64::r15; struct dis { explicit dis(reg64 reg) : reg(reg) {} reg64 reg; }; struct dis8 { explicit dis8(reg64 reg, s8 imm) : reg(reg), imm(imm) {} reg64 reg; s8 imm; }; struct dis32 { explicit dis32(reg64 reg, s32 imm) : reg(reg), imm(imm) {} reg64 reg; s32 imm; }; //}; ares-126/nall/recompiler/amd64/emitter.hpp000066400000000000000000000054101415063341600205050ustar00rootroot00000000000000#pragma once struct emitter { auto byte() { } template alwaysinline auto byte(u8 data, P&&... p) { span.write(data); byte(forward

(p)...); } alwaysinline auto word(u16 data) { span.write(data >> 0); span.write(data >> 8); } alwaysinline auto dword(u32 data) { span.write(data >> 0); span.write(data >> 8); span.write(data >> 16); span.write(data >> 24); } alwaysinline auto qword(u64 data) { span.write(data >> 0); span.write(data >> 8); span.write(data >> 16); span.write(data >> 24); span.write(data >> 32); span.write(data >> 40); span.write(data >> 48); span.write(data >> 56); } alwaysinline auto rex(bool w, bool r, bool x, bool b) { u8 data = 0x40 | w << 3 | r << 2 | x << 1 | b << 0; if(data == 0x40) return; //rex prefix not needed byte(data); } //mod: {[r/m], [r/m+dis8], [r/m+dis32], r/m} alwaysinline auto modrm(u8 mod, u8 reg, u8 rm) { byte(mod << 6 | reg << 3 | rm << 0); } //scale: {index*1, index*2, index*4, index*8} //index: {eax, ecx, edx, ebx, invalid, ebp, esi, edi} //base: {eax, ecx, edx, ebx, esp, displacement, esi, edi} alwaysinline auto sib(u8 scale, u8 index, u8 base) { byte(scale << 6 | index << 3 | base << 0); } array_span span, origin; } emit; struct label { explicit label(u32 index) : index(index) {} u32 index; }; struct fixup { u32 index; u32 offset; u32 size; }; vector labelOffsets; vector fixups; alwaysinline auto bind(array_span span) { emit.span = span; emit.origin = span; labelOffsets.reset(); assert(fixups.size() == 0); fixups.reset(); } alwaysinline auto declareLabel() -> label { labelOffsets.append(~0); return label{labelOffsets.size() - 1}; } alwaysinline auto defineLabel(label label) -> amd64::label { u32 labelOffset = size(); labelOffsets[label.index] = labelOffset; for(u32 n = 0; n < fixups.size(); ) { auto fixup = fixups[n]; if(fixup.index == label.index) { u32 value = labelOffset - (fixup.offset + fixup.size); emit.origin.span(fixup.offset, fixup.size).writel(value, fixup.size); fixups.removeByIndex(n); continue; } n++; } return label; } alwaysinline auto defineLabel() -> label { return defineLabel(declareLabel()); } alwaysinline auto resolve(label label, u32 offset, u32 size) -> u32 { u32 labelOffset = labelOffsets[label.index]; if(labelOffset == ~0) { fixups.append(fixup{label.index, this->size() + offset, size}); return ~0; } return labelOffset - (this->size() + offset + size); } alwaysinline auto distance(u64 target) const -> s64 { return target - (u64)emit.span.data(); } alwaysinline auto size() const -> u32 { return emit.span.data() - emit.origin.data(); } ares-126/nall/recompiler/amd64/encoder-calls-systemv.hpp000066400000000000000000000052621415063341600232640ustar00rootroot00000000000000#pragma once //{ //register aliases for function arguments static constexpr reg32 ra0d = reg32::edi; static constexpr reg32 ra1d = reg32::esi; static constexpr reg32 ra2d = reg32::edx; static constexpr reg32 ra3d = reg32::ecx; static constexpr reg32 ra4d = reg32::r8d; static constexpr reg32 ra5d = reg32::r9d; static constexpr reg64 ra0 = reg64::rdi; static constexpr reg64 ra1 = reg64::rsi; static constexpr reg64 ra2 = reg64::rdx; static constexpr reg64 ra3 = reg64::rcx; static constexpr reg64 ra4 = reg64::r8; static constexpr reg64 ra5 = reg64::r9; //virtual instructions to call member functions template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object) { sub(rsp, imm8{0x08}); mov(rdi, imm64{object}); call(imm64{function}, rax); add(rsp, imm8{0x08}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0) { sub(rsp, imm8{0x08}); mov(rdi, imm64{object}); mov(rsi, imm64{p0}); call(imm64{function}, rax); add(rsp, imm8{0x08}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1) { sub(rsp, imm8{0x08}); mov(rdi, imm64{object}); mov(rsi, imm64{p0}); mov(rdx, imm64{p1}); call(imm64{function}, rax); add(rsp, imm8{0x08}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1, P2 p2) { sub(rsp, imm8{0x08}); mov(rdi, imm64{object}); mov(rsi, imm64{p0}); mov(rdx, imm64{p1}); mov(rcx, imm64{p2}); call(imm64{function}, rax); add(rsp, imm8{0x08}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1, P2 p2, P3 p3) { sub(rsp, imm8{0x08}); mov(rdi, imm64{object}); mov(rsi, imm64{p0}); mov(rdx, imm64{p1}); mov(rcx, imm64{p2}); mov(r8, imm64{p3}); call(imm64{function}, rax); add(rsp, imm8{0x08}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1, P2 p2, P3 p3, P4 p4) { sub(rsp, imm8{0x08}); mov(rdi, imm64{object}); mov(rsi, imm64{p0}); mov(rdx, imm64{p1}); mov(rcx, imm64{p2}); mov(r8, imm64{p3}); mov(r9, imm64{p4}); call(imm64{function}, rax); add(rsp, imm8{0x08}); } //}; ares-126/nall/recompiler/amd64/encoder-calls-windows.hpp000066400000000000000000000055751415063341600232530ustar00rootroot00000000000000#pragma once //{ //register aliases for function arguments static constexpr reg32 ra0d = reg32::ecx; static constexpr reg32 ra1d = reg32::edx; static constexpr reg32 ra2d = reg32::r8d; static constexpr reg32 ra3d = reg32::r9d; static constexpr reg32 ra4d = reg32::r10d; //actually passed on stack static constexpr reg32 ra5d = reg32::r11d; //actually passed on stack static constexpr reg64 ra0 = reg64::rcx; static constexpr reg64 ra1 = reg64::rdx; static constexpr reg64 ra2 = reg64::r8; static constexpr reg64 ra3 = reg64::r9; static constexpr reg64 ra4 = reg64::r10; //actually passed on stack static constexpr reg64 ra5 = reg64::r11; //actually passed on stack //virtual instructions to call member functions template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object) { sub(rsp, imm8{0x28}); mov(rcx, imm64{object}); call(imm64{function}, rax); add(rsp, imm8{0x28}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0) { sub(rsp, imm8{0x28}); mov(rcx, imm64{object}); mov(rdx, imm64{p0}); call(imm64{function}, rax); add(rsp, imm8{0x28}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1) { sub(rsp, imm8{0x28}); mov(rcx, imm64{object}); mov(rdx, imm64{p0}); mov(r8, imm64{p1}); call(imm64{function}, rax); add(rsp, imm8{0x28}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1, P2 p2) { sub(rsp, imm8{0x28}); mov(rcx, imm64{object}); mov(rdx, imm64{p0}); mov(r8, imm64{p1}); mov(r9, imm64{p2}); call(imm64{function}, rax); add(rsp, imm8{0x28}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1, P2 p2, P3 p3) { sub(rsp, imm8{0x38}); mov(rcx, imm64{object}); mov(rdx, imm64{p0}); mov(r8, imm64{p1}); mov(r9, imm64{p2}); mov(rax, imm64{p3}); mov(dis8{rsp, 0x20}, rax); call(imm64{function}, rax); add(rsp, imm8{0x38}); } template alwaysinline auto call(auto (C::*function)(P...) -> R, C* object, P0 p0, P1 p1, P2 p2, P3 p3, P4 p4) { sub(rsp, imm8{0x38}); mov(rcx, imm64{object}); mov(rdx, imm64{p0}); mov(r8, imm64{p1}); mov(r9, imm64{p2}); mov(rax, imm64{p3}); mov(dis8{rsp, 0x20}, rax); mov(rax, imm64{p4}); mov(dis8{rsp, 0x28}, rax); call(imm64{function}, rax); add(rsp, imm8{0x38}); } //}; ares-126/nall/recompiler/amd64/encoder-instructions.hpp000066400000000000000000000733641415063341600232320ustar00rootroot00000000000000#pragma once //{ alwaysinline auto clc() { emit.byte(0xf8); } alwaysinline auto cmc() { emit.byte(0xf5); } alwaysinline auto lahf() { emit.byte(0x9f); } alwaysinline auto sahf() { emit.byte(0x9e); } alwaysinline auto stc() { emit.byte(0xf9); } alwaysinline auto ret() { emit.byte(0xc3); } //call imm32 alwaysinline auto call(imm32 it) { emit.byte(0xe8); emit.dword(it.data); } //jmp imm32 alwaysinline auto jmp(imm32 it) { emit.byte(0xe9); emit.dword(it.data); } //call reg64 alwaysinline auto call(reg64 rt) { emit.rex(0, 0, 0, rt & 8); emit.byte(0xff); emit.modrm(3, 2, rt & 7); } //lea reg64,[reg64+imm8] alwaysinline auto lea(reg64 rt, dis8 ds) { emit.rex(1, rt & 8, 0, ds.reg & 8); emit.byte(0x8d); emit.modrm(1, rt & 7, ds.reg & 7); if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); emit.byte(ds.imm); } //lea reg64,[reg64+imm32] alwaysinline auto lea(reg64 rt, dis32 ds) { emit.rex(1, rt & 8, 0, ds.reg & 8); emit.byte(0x8d); emit.modrm(2, rt & 7, ds.reg & 7); if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); emit.dword(ds.imm); } //mov reg8,imm8 alwaysinline auto mov(reg8 rt, imm8 is) { emit.rex(0, 0, 0, rt & 8); emit.byte(0xb0 | rt & 7); emit.byte(is.data); } //mov reg32,imm32 alwaysinline auto mov(reg32 rt, imm32 is) { emit.rex(0, 0, 0, rt & 8); emit.byte(0xb8 | rt & 7); emit.dword(is.data); } //mov reg64,imm32 alwaysinline auto mov(reg64 rt, imm32 is) { emit.rex(1, 0, 0, rt & 8); emit.byte(0xc7); emit.modrm(3, 0, rt & 7); emit.dword(is.data); } //mov reg64,imm64 alwaysinline auto mov(reg64 rt, imm64 is) { emit.rex(1, 0, 0, rt & 8); emit.byte(0xb8 | rt & 7); emit.qword(is.data); } //mov reg8,[mem64] alwaysinline auto mov(reg8 rt, mem64 ps) { if(unlikely(rt != al)) throw; emit.byte(0xa0); emit.qword(ps.data); } //mov reg16,[mem64] alwaysinline auto mov(reg16 rt, mem64 ps) { if(unlikely(rt != ax)) throw; emit.byte(0x66, 0xa1); emit.qword(ps.data); } //mov reg32,[mem64] alwaysinline auto mov(reg32 rt, mem64 ps) { if(unlikely(rt != eax)) throw; emit.byte(0xa1); emit.qword(ps.data); } //mov reg64,[mem64] alwaysinline auto mov(reg64 rt, mem64 ps) { if(unlikely(rt != rax)) throw; emit.rex(1, 0, 0, 0); emit.byte(0xa1); emit.qword(ps.data); } //mov [mem64],reg8 alwaysinline auto mov(mem64 pt, reg8 rs) { if(unlikely(rs != al)) throw; emit.byte(0xa2); emit.qword(pt.data); } //mov [mem64+imm8],imm8 alwaysinline auto movb(dis8 dt, imm8 is) { emit.rex(0, 0, 0, dt.reg & 8); emit.byte(0xc6); emit.modrm(1, 0, dt.reg & 7); if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); emit.byte(dt.imm); emit.byte(is.data); } //mov [mem64],reg16 alwaysinline auto mov(mem64 pt, reg16 rs) { if(unlikely(rs != ax)) throw; emit.byte(0x66, 0xa3); emit.qword(pt.data); } //mov [mem64],reg32 alwaysinline auto mov(mem64 pt, reg32 rs) { if(unlikely(rs != eax)) throw; emit.byte(0xa3); emit.qword(pt.data); } //mov [mem64],reg64 alwaysinline auto mov(mem64 pt, reg64 rs) { if(unlikely(rs != rax)) throw; emit.rex(1, 0, 0, 0); emit.byte(0xa3); emit.qword(pt.data); } //op reg8,[reg64] #define op(code) \ emit.rex(0, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(0, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); alwaysinline auto adc(reg8 rt, dis ds) { op(0x12); } alwaysinline auto add(reg8 rt, dis ds) { op(0x02); } alwaysinline auto and(reg8 rt, dis ds) { op(0x22); } alwaysinline auto cmp(reg8 rt, dis ds) { op(0x3a); } alwaysinline auto mov(reg8 rt, dis ds) { op(0x8a); } alwaysinline auto or (reg8 rt, dis ds) { op(0x0a); } alwaysinline auto sbb(reg8 rt, dis ds) { op(0x1a); } alwaysinline auto sub(reg8 rt, dis ds) { op(0x2a); } alwaysinline auto xor(reg8 rt, dis ds) { op(0x32); } #undef op //op reg8,[reg64+imm8] #define op(code) \ emit.rex(0, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(1, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); \ emit.byte(ds.imm); alwaysinline auto adc(reg8 rt, dis8 ds) { op(0x12); } alwaysinline auto add(reg8 rt, dis8 ds) { op(0x02); } alwaysinline auto and(reg8 rt, dis8 ds) { op(0x22); } alwaysinline auto cmp(reg8 rt, dis8 ds) { op(0x3a); } alwaysinline auto mov(reg8 rt, dis8 ds) { op(0x8a); } alwaysinline auto or (reg8 rt, dis8 ds) { op(0x0a); } alwaysinline auto sbb(reg8 rt, dis8 ds) { op(0x1a); } alwaysinline auto sub(reg8 rt, dis8 ds) { op(0x2a); } alwaysinline auto xor(reg8 rt, dis8 ds) { op(0x32); } #undef op //op reg32,[reg64] #define op(code) \ emit.rex(0, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(0, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); alwaysinline auto adc(reg32 rt, dis ds) { op(0x13); } alwaysinline auto add(reg32 rt, dis ds) { op(0x03); } alwaysinline auto and(reg32 rt, dis ds) { op(0x23); } alwaysinline auto cmp(reg32 rt, dis ds) { op(0x3b); } alwaysinline auto mov(reg32 rt, dis ds) { op(0x8b); } alwaysinline auto or (reg32 rt, dis ds) { op(0x0b); } alwaysinline auto sbb(reg32 rt, dis ds) { op(0x1b); } alwaysinline auto sub(reg32 rt, dis ds) { op(0x2b); } alwaysinline auto xor(reg32 rt, dis ds) { op(0x33); } #undef op //op reg32,[reg64+imm8] #define op(code) \ emit.rex(0, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(1, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); \ emit.byte(ds.imm); alwaysinline auto adc(reg32 rt, dis8 ds) { op(0x13); } alwaysinline auto add(reg32 rt, dis8 ds) { op(0x03); } alwaysinline auto and(reg32 rt, dis8 ds) { op(0x23); } alwaysinline auto cmp(reg32 rt, dis8 ds) { op(0x3b); } alwaysinline auto mov(reg32 rt, dis8 ds) { op(0x8b); } alwaysinline auto or (reg32 rt, dis8 ds) { op(0x0b); } alwaysinline auto sbb(reg32 rt, dis8 ds) { op(0x1b); } alwaysinline auto sub(reg32 rt, dis8 ds) { op(0x2b); } alwaysinline auto xor(reg32 rt, dis8 ds) { op(0x33); } #undef op //op reg64,[reg64] #define op(code) \ emit.rex(1, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(0, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); alwaysinline auto adc(reg64 rt, dis ds) { op(0x13); } alwaysinline auto add(reg64 rt, dis ds) { op(0x03); } alwaysinline auto and(reg64 rt, dis ds) { op(0x23); } alwaysinline auto cmp(reg64 rt, dis ds) { op(0x3b); } alwaysinline auto mov(reg64 rt, dis ds) { op(0x8b); } alwaysinline auto or (reg64 rt, dis ds) { op(0x0b); } alwaysinline auto sbb(reg64 rt, dis ds) { op(0x1b); } alwaysinline auto sub(reg64 rt, dis ds) { op(0x2b); } alwaysinline auto xor(reg64 rt, dis ds) { op(0x33); } #undef op //op reg64,[reg64+imm8] #define op(code) \ emit.rex(1, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(1, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); \ emit.byte(ds.imm); alwaysinline auto adc(reg64 rt, dis8 ds) { op(0x13); } alwaysinline auto add(reg64 rt, dis8 ds) { op(0x03); } alwaysinline auto and(reg64 rt, dis8 ds) { op(0x23); } alwaysinline auto cmp(reg64 rt, dis8 ds) { op(0x3b); } alwaysinline auto mov(reg64 rt, dis8 ds) { op(0x8b); } alwaysinline auto or (reg64 rt, dis8 ds) { op(0x0b); } alwaysinline auto sbb(reg64 rt, dis8 ds) { op(0x1b); } alwaysinline auto sub(reg64 rt, dis8 ds) { op(0x2b); } alwaysinline auto xor(reg64 rt, dis8 ds) { op(0x33); } #undef op //op reg64,[reg64+imm32] #define op(code) \ emit.rex(1, rt & 8, 0, ds.reg & 8); \ emit.byte(code); \ emit.modrm(2, rt & 7, ds.reg & 7); \ if(ds.reg == rsp || ds.reg == r12) emit.sib(0, 4, 4); \ emit.dword(ds.imm); alwaysinline auto adc(reg64 rt, dis32 ds) { op(0x13); } alwaysinline auto add(reg64 rt, dis32 ds) { op(0x03); } alwaysinline auto and(reg64 rt, dis32 ds) { op(0x23); } alwaysinline auto cmp(reg64 rt, dis32 ds) { op(0x3b); } alwaysinline auto mov(reg64 rt, dis32 ds) { op(0x8b); } alwaysinline auto or (reg64 rt, dis32 ds) { op(0x0b); } alwaysinline auto sbb(reg64 rt, dis32 ds) { op(0x1b); } alwaysinline auto sub(reg64 rt, dis32 ds) { op(0x2b); } alwaysinline auto xor(reg64 rt, dis32 ds) { op(0x33); } #undef op //op [reg64+imm8],reg8 #define op(code) \ emit.rex(0, rs & 8, 0, dt.reg & 8); \ emit.byte(code); \ emit.modrm(1, rs & 7, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); \ emit.byte(dt.imm); alwaysinline auto adc(dis8 dt, reg8 rs) { op(0x10); } alwaysinline auto add(dis8 dt, reg8 rs) { op(0x00); } alwaysinline auto and(dis8 dt, reg8 rs) { op(0x20); } alwaysinline auto cmp(dis8 dt, reg8 rs) { op(0x38); } alwaysinline auto mov(dis8 dt, reg8 rs) { op(0x88); } alwaysinline auto or (dis8 dt, reg8 rs) { op(0x08); } alwaysinline auto sbb(dis8 dt, reg8 rs) { op(0x18); } alwaysinline auto sub(dis8 dt, reg8 rs) { op(0x28); } alwaysinline auto xor(dis8 dt, reg8 rs) { op(0x30); } #undef op //op reg64,imm32 #define op(group) \ emit.rex(1, 0, 0, rt & 8); \ emit.byte(0x81); \ emit.modrm(3, group, rt & 7); \ emit.dword(is.data); alwaysinline auto add(reg64 rt, imm32 is) { op(0); } alwaysinline auto or (reg64 rt, imm32 is) { op(1); } alwaysinline auto adc(reg64 rt, imm32 is) { op(2); } alwaysinline auto sbb(reg64 rt, imm32 is) { op(3); } alwaysinline auto and(reg64 rt, imm32 is) { op(4); } alwaysinline auto sub(reg64 rt, imm32 is) { op(5); } alwaysinline auto xor(reg64 rt, imm32 is) { op(6); } alwaysinline auto cmp(reg64 rt, imm32 is) { op(7); } #undef op //op.d [reg64+imm8],imm8 #define op(group) \ emit.rex(0, 0, 0, dt.reg & 8); \ emit.byte(0x83); \ emit.modrm(1, group, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); \ emit.byte(dt.imm); \ emit.byte(is.data); alwaysinline auto addd(dis8 dt, imm8 is) { op(0); } alwaysinline auto ord (dis8 dt, imm8 is) { op(1); } alwaysinline auto adcd(dis8 dt, imm8 is) { op(2); } alwaysinline auto sbbd(dis8 dt, imm8 is) { op(3); } alwaysinline auto andd(dis8 dt, imm8 is) { op(4); } alwaysinline auto subd(dis8 dt, imm8 is) { op(5); } alwaysinline auto xord(dis8 dt, imm8 is) { op(6); } alwaysinline auto cmpd(dis8 dt, imm8 is) { op(7); } #undef op //op [reg64],reg32 #define op(code) \ emit.rex(0, rs & 8, 0, dt.reg & 8); \ emit.byte(code); \ emit.modrm(0, rs & 7, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); alwaysinline auto adc(dis dt, reg32 rs) { op(0x11); } alwaysinline auto add(dis dt, reg32 rs) { op(0x01); } alwaysinline auto and(dis dt, reg32 rs) { op(0x21); } alwaysinline auto cmp(dis dt, reg32 rs) { op(0x39); } alwaysinline auto mov(dis dt, reg32 rs) { op(0x89); } alwaysinline auto or (dis dt, reg32 rs) { op(0x09); } alwaysinline auto sbb(dis dt, reg32 rs) { op(0x19); } alwaysinline auto sub(dis dt, reg32 rs) { op(0x29); } alwaysinline auto xor(dis dt, reg32 rs) { op(0x31); } #undef op //op [reg64+imm8],reg32 #define op(code) \ emit.rex(0, rs & 8, 0, dt.reg & 8); \ emit.byte(code); \ emit.modrm(1, rs & 7, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); \ emit.byte(dt.imm); alwaysinline auto adc(dis8 dt, reg32 rs) { op(0x11); } alwaysinline auto add(dis8 dt, reg32 rs) { op(0x01); } alwaysinline auto and(dis8 dt, reg32 rs) { op(0x21); } alwaysinline auto cmp(dis8 dt, reg32 rs) { op(0x39); } alwaysinline auto mov(dis8 dt, reg32 rs) { op(0x89); } alwaysinline auto or (dis8 dt, reg32 rs) { op(0x09); } alwaysinline auto sbb(dis8 dt, reg32 rs) { op(0x19); } alwaysinline auto sub(dis8 dt, reg32 rs) { op(0x29); } alwaysinline auto xor(dis8 dt, reg32 rs) { op(0x31); } #undef op //op [reg64],reg64 #define op(code) \ emit.rex(0, rs & 8, 0, dt.reg & 8); \ emit.byte(code); \ emit.modrm(0, rs & 7, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); alwaysinline auto adc(dis dt, reg64 rs) { op(0x11); } alwaysinline auto add(dis dt, reg64 rs) { op(0x01); } alwaysinline auto and(dis dt, reg64 rs) { op(0x21); } alwaysinline auto cmp(dis dt, reg64 rs) { op(0x39); } alwaysinline auto mov(dis dt, reg64 rs) { op(0x89); } alwaysinline auto or (dis dt, reg64 rs) { op(0x09); } alwaysinline auto sbb(dis dt, reg64 rs) { op(0x19); } alwaysinline auto sub(dis dt, reg64 rs) { op(0x29); } alwaysinline auto xor(dis dt, reg64 rs) { op(0x31); } #undef op //op [reg64+imm8],reg64 #define op(code) \ emit.rex(1, rs & 8, 0, dt.reg & 8); \ emit.byte(code); \ emit.modrm(1, rs & 7, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); \ emit.byte(dt.imm); alwaysinline auto adc(dis8 dt, reg64 rs) { op(0x11); } alwaysinline auto add(dis8 dt, reg64 rs) { op(0x01); } alwaysinline auto and(dis8 dt, reg64 rs) { op(0x21); } alwaysinline auto cmp(dis8 dt, reg64 rs) { op(0x39); } alwaysinline auto mov(dis8 dt, reg64 rs) { op(0x89); } alwaysinline auto or (dis8 dt, reg64 rs) { op(0x09); } alwaysinline auto sbb(dis8 dt, reg64 rs) { op(0x19); } alwaysinline auto sub(dis8 dt, reg64 rs) { op(0x29); } alwaysinline auto xor(dis8 dt, reg64 rs) { op(0x31); } #undef op //op [reg64+imm32],reg64 #define op(code) \ emit.rex(1, rs & 8, 0, dt.reg & 8); \ emit.byte(code); \ emit.modrm(2, rs & 7, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); \ emit.dword(dt.imm); alwaysinline auto adc(dis32 dt, reg64 rs) { op(0x11); } alwaysinline auto add(dis32 dt, reg64 rs) { op(0x01); } alwaysinline auto and(dis32 dt, reg64 rs) { op(0x21); } alwaysinline auto cmp(dis32 dt, reg64 rs) { op(0x39); } alwaysinline auto mov(dis32 dt, reg64 rs) { op(0x89); } alwaysinline auto or (dis32 dt, reg64 rs) { op(0x09); } alwaysinline auto sbb(dis32 dt, reg64 rs) { op(0x19); } alwaysinline auto sub(dis32 dt, reg64 rs) { op(0x29); } alwaysinline auto xor(dis32 dt, reg64 rs) { op(0x31); } #undef op //op reg32,reg8 #define op(code) \ emit.rex(0, rt & 8, 0, rs & 8); \ emit.byte(0x0f, code); \ emit.modrm(3, rt & 7, rs & 7); alwaysinline auto movsx(reg32 rt, reg8 rs) { op(0xbe); } alwaysinline auto movzx(reg32 rt, reg8 rs) { op(0xb6); } #undef op //op reg32,reg16 #define op(code) \ emit.rex(0, rt & 8, 0, rs & 8); \ emit.byte(0x0f, code); \ emit.modrm(3, rt & 7, rs & 7); alwaysinline auto movsx(reg32 rt, reg16 rs) { op(0xbf); } alwaysinline auto movzx(reg32 rt, reg16 rs) { op(0xb7); } #undef op alwaysinline auto movsxd(reg64 rt, reg32 rs) { emit.rex(1, rt & 8, 0, rs & 8); emit.byte(0x63); emit.modrm(3, rt & 7, rs & 7); } //incd [reg64+imm8] alwaysinline auto incd(dis8 dt) { emit.rex(0, 0, 0, dt.reg & 8); emit.byte(0xff); emit.modrm(1, 0, dt.reg & 7); if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); emit.byte(dt.imm); } //decd [reg64+imm8] alwaysinline auto decd(dis8 dt) { emit.rex(0, 0, 0, dt.reg & 8); emit.byte(0xff); emit.modrm(1, 1, dt.reg & 7); if(dt.reg == rsp || dt.reg == r12) emit.sib(0, 4, 4); emit.byte(dt.imm); } //inc reg32 alwaysinline auto inc(reg32 rt) { emit.rex(0, 0, 0, rt & 8); emit.byte(0xff); emit.modrm(3, 0, rt & 7); } //dec reg32 alwaysinline auto dec(reg32 rt) { emit.rex(0, 0, 0, rt & 8); emit.byte(0xff); emit.modrm(3, 1, rt & 7); } //inc reg64 alwaysinline auto inc(reg64 rt) { emit.rex(1, 0, 0, rt & 8); emit.byte(0xff); emit.modrm(3, 0, rt & 7); } //dec reg64 alwaysinline auto dec(reg64 rt) { emit.rex(1, 0, 0, rt & 8); emit.byte(0xff); emit.modrm(3, 1, rt & 7); } #define op(code) \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0xd0); \ emit.modrm(3, code, rt & 7); alwaysinline auto rol(reg8 rt) { op(0); } alwaysinline auto ror(reg8 rt) { op(1); } alwaysinline auto rcl(reg8 rt) { op(2); } alwaysinline auto rcr(reg8 rt) { op(3); } alwaysinline auto shl(reg8 rt) { op(4); } alwaysinline auto shr(reg8 rt) { op(5); } alwaysinline auto sal(reg8 rt) { op(6); } alwaysinline auto sar(reg8 rt) { op(7); } #undef op #define op(code) \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0xd1); \ emit.modrm(3, code, rt & 7); alwaysinline auto rol(reg32 rt) { op(0); } alwaysinline auto ror(reg32 rt) { op(1); } alwaysinline auto rcl(reg32 rt) { op(2); } alwaysinline auto rcr(reg32 rt) { op(3); } alwaysinline auto shl(reg32 rt) { op(4); } alwaysinline auto shr(reg32 rt) { op(5); } alwaysinline auto sal(reg32 rt) { op(6); } alwaysinline auto sar(reg32 rt) { op(7); } #undef op #define op(code) \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0xc1); \ emit.modrm(3, code, rt & 7); \ emit.byte(is.data); alwaysinline auto rol(reg32 rt, imm8 is) { op(0); } alwaysinline auto ror(reg32 rt, imm8 is) { op(1); } alwaysinline auto rcl(reg32 rt, imm8 is) { op(2); } alwaysinline auto rcr(reg32 rt, imm8 is) { op(3); } alwaysinline auto shl(reg32 rt, imm8 is) { op(4); } alwaysinline auto shr(reg32 rt, imm8 is) { op(5); } alwaysinline auto sal(reg32 rt, imm8 is) { op(6); } alwaysinline auto sar(reg32 rt, imm8 is) { op(7); } #undef op #define op(code) \ if(unlikely(rs != cl)) throw; \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0xd3); \ emit.modrm(3, code, rt & 7); alwaysinline auto rol(reg32 rt, reg8 rs) { op(0); } alwaysinline auto ror(reg32 rt, reg8 rs) { op(1); } alwaysinline auto rcl(reg32 rt, reg8 rs) { op(2); } alwaysinline auto rcr(reg32 rt, reg8 rs) { op(3); } alwaysinline auto shl(reg32 rt, reg8 rs) { op(4); } alwaysinline auto shr(reg32 rt, reg8 rs) { op(5); } alwaysinline auto sal(reg32 rt, reg8 rs) { op(6); } alwaysinline auto sar(reg32 rt, reg8 rs) { op(7); } #undef op #define op(code) \ emit.rex(1, 0, 0, rt & 8); \ emit.byte(0xc1); \ emit.modrm(3, code, rt & 7); \ emit.byte(is.data); alwaysinline auto rol(reg64 rt, imm8 is) { op(0); } alwaysinline auto ror(reg64 rt, imm8 is) { op(1); } alwaysinline auto rcl(reg64 rt, imm8 is) { op(2); } alwaysinline auto rcr(reg64 rt, imm8 is) { op(3); } alwaysinline auto shl(reg64 rt, imm8 is) { op(4); } alwaysinline auto shr(reg64 rt, imm8 is) { op(5); } alwaysinline auto sal(reg64 rt, imm8 is) { op(6); } alwaysinline auto sar(reg64 rt, imm8 is) { op(7); } #undef op #define op(code) \ if(unlikely(rs != cl)) throw; \ emit.rex(1, 0, 0, rt & 8); \ emit.byte(0xd3); \ emit.modrm(3, code, rt & 7); alwaysinline auto rol(reg64 rt, reg8 rs) { op(0); } alwaysinline auto ror(reg64 rt, reg8 rs) { op(1); } alwaysinline auto rcl(reg64 rt, reg8 rs) { op(2); } alwaysinline auto rcr(reg64 rt, reg8 rs) { op(3); } alwaysinline auto shl(reg64 rt, reg8 rs) { op(4); } alwaysinline auto shr(reg64 rt, reg8 rs) { op(5); } alwaysinline auto sal(reg64 rt, reg8 rs) { op(6); } alwaysinline auto sar(reg64 rt, reg8 rs) { op(7); } #undef op //push reg alwaysinline auto push(reg64 rt) { emit.rex(0, 0, 0, rt & 8); emit.byte(0x50 | rt & 7); } //pop reg alwaysinline auto pop(reg64 rt) { emit.rex(0, 0, 0, rt & 8); emit.byte(0x58 | rt & 7); } #define op(code) \ emit.rex(0, rs & 8, 0, rt & 8); \ emit.byte(code); \ emit.modrm(3, rs & 7, rt & 7); alwaysinline auto adc (reg8 rt, reg8 rs) { op(0x10); } alwaysinline auto add (reg8 rt, reg8 rs) { op(0x00); } alwaysinline auto and (reg8 rt, reg8 rs) { op(0x20); } alwaysinline auto cmp (reg8 rt, reg8 rs) { op(0x38); } alwaysinline auto mov (reg8 rt, reg8 rs) { op(0x88); } alwaysinline auto or (reg8 rt, reg8 rs) { op(0x08); } alwaysinline auto sbb (reg8 rt, reg8 rs) { op(0x18); } alwaysinline auto sub (reg8 rt, reg8 rs) { op(0x28); } alwaysinline auto test(reg8 rt, reg8 rs) { op(0x84); } alwaysinline auto xor (reg8 rt, reg8 rs) { op(0x30); } #undef op #define op(code) \ emit.byte(0x66); \ emit.rex(0, rs & 8, 0, rt & 8); \ emit.byte(code); \ emit.modrm(3, rs & 7, rt & 7); alwaysinline auto adc (reg16 rt, reg16 rs) { op(0x11); } alwaysinline auto add (reg16 rt, reg16 rs) { op(0x01); } alwaysinline auto and (reg16 rt, reg16 rs) { op(0x21); } alwaysinline auto cmp (reg16 rt, reg16 rs) { op(0x39); } alwaysinline auto mov (reg16 rt, reg16 rs) { op(0x89); } alwaysinline auto or (reg16 rt, reg16 rs) { op(0x09); } alwaysinline auto sbb (reg16 rt, reg16 rs) { op(0x19); } alwaysinline auto sub (reg16 rt, reg16 rs) { op(0x29); } alwaysinline auto test(reg16 rt, reg16 rs) { op(0x85); } alwaysinline auto xor (reg16 rt, reg16 rs) { op(0x31); } #undef op #define op(code) \ emit.rex(0, rs & 8, 0, rt & 8); \ emit.byte(code); \ emit.modrm(3, rs & 7, rt & 7); alwaysinline auto adc (reg32 rt, reg32 rs) { op(0x11); } alwaysinline auto add (reg32 rt, reg32 rs) { op(0x01); } alwaysinline auto and (reg32 rt, reg32 rs) { op(0x21); } alwaysinline auto cmp (reg32 rt, reg32 rs) { op(0x39); } alwaysinline auto mov (reg32 rt, reg32 rs) { op(0x89); } alwaysinline auto or (reg32 rt, reg32 rs) { op(0x09); } alwaysinline auto sbb (reg32 rt, reg32 rs) { op(0x19); } alwaysinline auto sub (reg32 rt, reg32 rs) { op(0x29); } alwaysinline auto test(reg32 rt, reg32 rs) { op(0x85); } alwaysinline auto xor (reg32 rt, reg32 rs) { op(0x31); } #undef op #define op(code) \ emit.rex(1, rs & 8, 0, rt & 8); \ emit.byte(code); \ emit.modrm(3, rs & 7, rt & 7); alwaysinline auto adc (reg64 rt, reg64 rs) { op(0x11); } alwaysinline auto add (reg64 rt, reg64 rs) { op(0x01); } alwaysinline auto and (reg64 rt, reg64 rs) { op(0x21); } alwaysinline auto cmp (reg64 rt, reg64 rs) { op(0x39); } alwaysinline auto mov (reg64 rt, reg64 rs) { op(0x89); } alwaysinline auto or (reg64 rt, reg64 rs) { op(0x09); } alwaysinline auto sbb (reg64 rt, reg64 rs) { op(0x19); } alwaysinline auto sub (reg64 rt, reg64 rs) { op(0x29); } alwaysinline auto test(reg64 rt, reg64 rs) { op(0x85); } alwaysinline auto xor (reg64 rt, reg64 rs) { op(0x31); } #undef op #define op(code) \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0x83); \ emit.modrm(3, code, rt & 7); \ emit.byte(is.data); alwaysinline auto adc(reg32 rt, imm8 is) { op(2); } alwaysinline auto add(reg32 rt, imm8 is) { op(0); } alwaysinline auto and(reg32 rt, imm8 is) { op(4); } alwaysinline auto cmp(reg32 rt, imm8 is) { op(7); } alwaysinline auto or (reg32 rt, imm8 is) { op(1); } alwaysinline auto sbb(reg32 rt, imm8 is) { op(3); } alwaysinline auto sub(reg32 rt, imm8 is) { op(5); } alwaysinline auto xor(reg32 rt, imm8 is) { op(6); } #undef op #define op(code) \ emit.rex(1, 0, 0, rt & 8); \ emit.byte(0x83); \ emit.modrm(3, code, rt & 7); \ emit.byte(is.data); alwaysinline auto adc(reg64 rt, imm8 is) { op(2); } alwaysinline auto add(reg64 rt, imm8 is) { op(0); } alwaysinline auto and(reg64 rt, imm8 is) { op(4); } alwaysinline auto cmp(reg64 rt, imm8 is) { op(7); } alwaysinline auto or (reg64 rt, imm8 is) { op(1); } alwaysinline auto sbb(reg64 rt, imm8 is) { op(3); } alwaysinline auto sub(reg64 rt, imm8 is) { op(5); } alwaysinline auto xor(reg64 rt, imm8 is) { op(6); } #undef op #define op(code, group) \ if(rt == al) { \ emit.byte(code); \ emit.byte(is.data); \ } else { \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0x80); \ emit.modrm(3, group, rt & 7); \ emit.byte(is.data); \ } alwaysinline auto adc(reg8 rt, imm8 is) { op(0x14, 2); } alwaysinline auto add(reg8 rt, imm8 is) { op(0x04, 0); } alwaysinline auto and(reg8 rt, imm8 is) { op(0x24, 4); } alwaysinline auto cmp(reg8 rt, imm8 is) { op(0x3c, 7); } alwaysinline auto or (reg8 rt, imm8 is) { op(0x0c, 1); } alwaysinline auto sbb(reg8 rt, imm8 is) { op(0x1c, 3); } alwaysinline auto sub(reg8 rt, imm8 is) { op(0x2c, 5); } alwaysinline auto xor(reg8 rt, imm8 is) { op(0x34, 6); } #undef op #define op(code, group) \ if(rt == eax) { \ emit.byte(code); \ emit.dword(is.data); \ } else { \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0x81); \ emit.modrm(3, group, rt & 7); \ emit.dword(is.data); \ } alwaysinline auto adc(reg32 rt, imm32 is) { op(0x15, 2); } alwaysinline auto add(reg32 rt, imm32 is) { op(0x05, 0); } alwaysinline auto and(reg32 rt, imm32 is) { op(0x25, 4); } alwaysinline auto cmp(reg32 rt, imm32 is) { op(0x3d, 7); } alwaysinline auto or (reg32 rt, imm32 is) { op(0x0d, 1); } alwaysinline auto sbb(reg32 rt, imm32 is) { op(0x1d, 3); } alwaysinline auto sub(reg32 rt, imm32 is) { op(0x2d, 5); } alwaysinline auto xor(reg32 rt, imm32 is) { op(0x35, 6); } #undef op #define op(code) \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0xf7); \ emit.modrm(3, code, rt & 7); alwaysinline auto not (reg32 rt) { op(2); } alwaysinline auto neg (reg32 rt) { op(3); } alwaysinline auto mul (reg32 rt) { op(4); } alwaysinline auto imul(reg32 rt) { op(5); } alwaysinline auto div (reg32 rt) { op(6); } alwaysinline auto idiv(reg32 rt) { op(7); } #undef op #define op(code) \ emit.rex(1, 0, 0, rt & 8); \ emit.byte(0xf7); \ emit.modrm(3, code, rt & 7); alwaysinline auto not (reg64 rt) { op(2); } alwaysinline auto neg (reg64 rt) { op(3); } alwaysinline auto mul (reg64 rt) { op(4); } alwaysinline auto imul(reg64 rt) { op(5); } alwaysinline auto div (reg64 rt) { op(6); } alwaysinline auto idiv(reg64 rt) { op(7); } #undef op #define op(code) \ emit.byte(code); \ emit.byte(it.data); #define r imm8 it{resolve(l, 1, 1)} alwaysinline auto jmp (imm8 it) { op(0xeb); } alwaysinline auto jmp8(label l) { r; op(0xeb); } alwaysinline auto jnz (imm8 it) { op(0x75); } alwaysinline auto jnz8(label l) { r; op(0x75); } alwaysinline auto jz (imm8 it) { op(0x74); } alwaysinline auto jz8 (label l) { r; op(0x74); } #undef r #undef op #define op(code) \ emit.byte(0x0f); \ emit.byte(code); \ emit.dword(it.data); #define r imm32 it{resolve(l, 2, 4)} alwaysinline auto jnz(imm32 it) { op(0x85); } alwaysinline auto jnz(label l) { r; op(0x85); } alwaysinline auto jz (imm32 it) { op(0x84); } alwaysinline auto jz (label l) { r; op(0x84); } #undef r #undef op //op reg8 #define op(code) \ emit.rex(0, 0, 0, rt & 8); \ emit.byte(0x0f); \ emit.byte(code); \ emit.modrm(3, 0, rt & 7); alwaysinline auto seta (reg8 rt) { op(0x97); } alwaysinline auto setbe(reg8 rt) { op(0x96); } alwaysinline auto setb (reg8 rt) { op(0x92); } alwaysinline auto setc (reg8 rt) { op(0x92); } alwaysinline auto setg (reg8 rt) { op(0x9f); } alwaysinline auto setge(reg8 rt) { op(0x9d); } alwaysinline auto setl (reg8 rt) { op(0x9c); } alwaysinline auto setle(reg8 rt) { op(0x9e); } alwaysinline auto setnc(reg8 rt) { op(0x93); } alwaysinline auto setno(reg8 rt) { op(0x91); } alwaysinline auto setnp(reg8 rt) { op(0x9b); } alwaysinline auto setns(reg8 rt) { op(0x99); } alwaysinline auto setnz(reg8 rt) { op(0x95); } alwaysinline auto seto (reg8 rt) { op(0x90); } alwaysinline auto setp (reg8 rt) { op(0x9a); } alwaysinline auto sets (reg8 rt) { op(0x98); } alwaysinline auto setz (reg8 rt) { op(0x94); } #undef op //op [reg64] #define op(code) \ emit.rex(0, 0, 0, dt.reg & 8); \ emit.byte(0x0f); \ emit.byte(code); \ if(dt.reg == rsp || dt.reg == r12) { \ emit.modrm(0, 0, dt.reg & 7); \ emit.sib(0, 4, 4); \ } else if(dt.reg == rbp || dt.reg == r13) { \ emit.modrm(1, 0, dt.reg & 7); \ emit.byte(0x00); \ } else { \ emit.modrm(0, 0, dt.reg & 7); \ } alwaysinline auto seta (dis dt) { op(0x97); } alwaysinline auto setbe(dis dt) { op(0x96); } alwaysinline auto setb (dis dt) { op(0x92); } alwaysinline auto setc (dis dt) { op(0x92); } alwaysinline auto setg (dis dt) { op(0x9f); } alwaysinline auto setge(dis dt) { op(0x9d); } alwaysinline auto setl (dis dt) { op(0x9c); } alwaysinline auto setle(dis dt) { op(0x9e); } alwaysinline auto setnc(dis dt) { op(0x93); } alwaysinline auto setno(dis dt) { op(0x91); } alwaysinline auto setnp(dis dt) { op(0x9b); } alwaysinline auto setns(dis dt) { op(0x99); } alwaysinline auto setnz(dis dt) { op(0x95); } alwaysinline auto seto (dis dt) { op(0x90); } alwaysinline auto setp (dis dt) { op(0x9a); } alwaysinline auto sets (dis dt) { op(0x98); } alwaysinline auto setz (dis dt) { op(0x94); } #undef op //op [reg64+imm8] #define op(code) \ emit.rex(0, 0, 0, dt.reg & 8); \ emit.byte(0x0f); \ emit.byte(code); \ emit.modrm(1, 0, dt.reg & 7); \ if(dt.reg == rsp || dt.reg == r12) { \ emit.sib(0, 4, 4); \ } \ emit.byte(dt.imm); alwaysinline auto seta (dis8 dt) { op(0x97); } alwaysinline auto setbe(dis8 dt) { op(0x96); } alwaysinline auto setb (dis8 dt) { op(0x92); } alwaysinline auto setc (dis8 dt) { op(0x92); } alwaysinline auto setg (dis8 dt) { op(0x9f); } alwaysinline auto setge(dis8 dt) { op(0x9d); } alwaysinline auto setl (dis8 dt) { op(0x9c); } alwaysinline auto setle(dis8 dt) { op(0x9e); } alwaysinline auto setnc(dis8 dt) { op(0x93); } alwaysinline auto setno(dis8 dt) { op(0x91); } alwaysinline auto setnp(dis8 dt) { op(0x9b); } alwaysinline auto setns(dis8 dt) { op(0x99); } alwaysinline auto setnz(dis8 dt) { op(0x95); } alwaysinline auto seto (dis8 dt) { op(0x90); } alwaysinline auto setp (dis8 dt) { op(0x9a); } alwaysinline auto sets (dis8 dt) { op(0x98); } alwaysinline auto setz (dis8 dt) { op(0x94); } #undef op //call imm64 (pseudo-op) alwaysinline auto call(imm64 target, reg64 scratch) { s64 dist = distance(target.data) - 5; if(dist < INT32_MIN || dist > INT32_MAX) { mov(scratch, target); call(scratch); } else { call(imm32{dist}); } } //jmp label (pseudo-op) alwaysinline auto jmp(label l) { jmp(imm32{resolve(l, 1, 4)}); } //}; ares-126/nall/reed-solomon.hpp000066400000000000000000000157021415063341600163700ustar00rootroot00000000000000#pragma once namespace nall { //RS(n,k) = ReedSolomon template struct ReedSolomon { enum : u32 { Parity = Length - Inputs }; static_assert(Length <= 255 && Length > 0); static_assert(Parity <= 32 && Parity > 0); using Field = GaloisField; template using Polynomial = Matrix; template static auto shift(Polynomial polynomial) -> Polynomial { for(s32 n = Size - 1; n > 0; n--) polynomial[n] = polynomial[n - 1]; polynomial[0] = 0; return polynomial; } template static auto degree(const Polynomial& polynomial) -> u32 { for(s32 n = Size; n > 0; n--) { if(polynomial[n - 1] != 0) return n - 1; } return 0; } template static auto evaluate(const Polynomial& polynomial, Field field) -> Field { Field sum = 0; for(u32 n : range(Size)) sum += polynomial[n] * field.pow(n); return sum; } Polynomial message; Polynomial syndromes; Polynomial locators; ReedSolomon() = default; ReedSolomon(const ReedSolomon&) = default; ReedSolomon(const initializer_list& source) { u32 index = 0; for(auto& value : source) { if(index >= Length) break; message[index++] = value; } } auto operator[](u32 index) -> Field& { return message[index]; } auto operator[](u32 index) const -> Field { return message[index]; } auto calculateSyndromes() -> void { static const Polynomial bases = [] { Polynomial bases; for(u32 n : range(Parity)) { bases[n] = Field::exp(n); } return bases; }(); syndromes = {}; for(u32 m : range(Length)) { for(u32 p : range(Parity)) { syndromes[p] *= bases[p]; syndromes[p] += message[m]; } } } auto generateParity() -> void { static const Polynomial matrix = [] { Polynomial matrix{}; for(u32 row : range(Parity)) { for(u32 col : range(Parity)) { matrix(row, col) = Field::exp(row * col); } } if(auto result = matrix.invert()) return *result; throw; //should never occur }(); for(u32 p : range(Parity)) message[Inputs + p] = 0; calculateSyndromes(); auto parity = matrix * syndromes; for(u32 p : range(Parity)) message[Inputs + p] = parity[Parity - (p + 1)]; } auto syndromesAreZero() -> bool { for(u32 p : range(Parity)) { if(syndromes[p]) return false; } return true; } //algorithm: Berlekamp-Massey auto calculateLocators() -> void { Polynomial history{1}; locators = history; u32 errors = 0; for(u32 n : range(Parity)) { Field discrepancy = 0; for(u32 l : range(errors + 1)) { discrepancy += locators[l] * syndromes[n - l]; } history = shift(history); if(discrepancy) { auto located = locators - history * discrepancy; if(errors * 2 <= n) { errors = (n + 1) - errors; history = locators * discrepancy.inv(); } locators = located; } } } //algorithm: brute force //todo: implement Chien search here auto calculateErrors() -> vector { calculateSyndromes(); if(syndromesAreZero()) return {}; //no errors detected calculateLocators(); vector errors; for(u32 n : range(Length)) { if(evaluate(locators, Field{2}.pow(255 - n))) continue; errors.append(Length - (n + 1)); } return errors; } template static auto calculateErasures(array_view errors) -> maybe> { Polynomial matrix{}; for(u32 row : range(Size)) { for(u32 col : range(Size)) { u32 index = Length - (errors[col] + 1); matrix(row, col) = Field::exp(row * index); } } return matrix.invert(); } template auto correctErasures(array_view errors) -> s32 { calculateSyndromes(); if(syndromesAreZero()) return 0; //no errors detected if(auto matrix = calculateErasures(errors)) { Polynomial factors; for(u32 n : range(Size)) factors[n] = syndromes[n]; auto errata = matrix() * factors; for(u32 m : range(Size)) { message[errors[m]] += errata[m]; } calculateSyndromes(); if(syndromesAreZero()) return Size; //corrected Size errors return -Size; //failed to correct Size errors } return -Size; //should never occur, but might ... } //note: the erasure matrix is generated as a Polynomial, where N is the number of errors to correct. //because this is a template parameter, and the actual number of errors may very, this function is needed. //the alternative would be to convert Matrix to a dynamically sized Matrix(Rows, Cols) type, //but this would require heap memory allocations and would be a massive performance penalty. auto correctErrata(array_view errors) -> s32 { if(errors.size() >= Parity) return -errors.size(); //too many errors to be correctable switch(errors.size()) { case 0: return 0; case 1: return correctErasures< 1>(errors); case 2: return correctErasures< 2>(errors); case 3: return correctErasures< 3>(errors); case 4: return correctErasures< 4>(errors); case 5: return correctErasures< 5>(errors); case 6: return correctErasures< 6>(errors); case 7: return correctErasures< 7>(errors); case 8: return correctErasures< 8>(errors); case 9: return correctErasures< 9>(errors); case 10: return correctErasures<10>(errors); case 11: return correctErasures<11>(errors); case 12: return correctErasures<12>(errors); case 13: return correctErasures<13>(errors); case 14: return correctErasures<14>(errors); case 15: return correctErasures<15>(errors); case 16: return correctErasures<16>(errors); case 17: return correctErasures<17>(errors); case 18: return correctErasures<18>(errors); case 19: return correctErasures<19>(errors); case 20: return correctErasures<20>(errors); case 21: return correctErasures<21>(errors); case 22: return correctErasures<22>(errors); case 23: return correctErasures<23>(errors); case 24: return correctErasures<24>(errors); case 25: return correctErasures<25>(errors); case 26: return correctErasures<26>(errors); case 27: return correctErasures<27>(errors); case 28: return correctErasures<28>(errors); case 29: return correctErasures<29>(errors); case 30: return correctErasures<30>(errors); case 31: return correctErasures<31>(errors); case 32: return correctErasures<32>(errors); } return -errors.size(); //it's possible to correct more errors if the above switch were extended ... } //convenience function for when erasures aren't needed auto correctErrors() -> s32 { auto errors = calculateErrors(); return correctErrata(errors); } }; } ares-126/nall/run.hpp000066400000000000000000000143311415063341600145660ustar00rootroot00000000000000#pragma once //auto execute(const string& name, const string& args...) -> string; //[[synchronous]] //executes program, waits for completion, and returns data written to stdout //auto invoke(const string& name, const string& args...) -> void; //[[asynchronous]] //if a program is specified, it is executed with the arguments provided //if a file is specified, the file is opened using the program associated with said file type //if a folder is specified, the folder is opened using the associated file explorer //if a URL is specified, the default web browser is opened and pointed at the URL requested #include #include namespace nall { struct execute_result_t { explicit operator bool() const { return code == EXIT_SUCCESS; } int code = EXIT_FAILURE; string output; string error; }; #if defined(PLATFORM_MACOS) || defined(PLATFORM_LINUX) || defined(PLATFORM_BSD) template inline auto execute(const string& name, P&&... p) -> execute_result_t { int fdout[2]; int fderr[2]; if(pipe(fdout) == -1) return {}; if(pipe(fderr) == -1) return {}; pid_t pid = fork(); if(pid == 0) { const char* argv[1 + sizeof...(p) + 1]; const char** argp = argv; vector argl(forward

(p)...); *argp++ = (const char*)name; for(auto& arg : argl) *argp++ = (const char*)arg; *argp++ = nullptr; dup2(fdout[1], STDOUT_FILENO); dup2(fderr[1], STDERR_FILENO); close(fdout[0]); close(fderr[0]); close(fdout[1]); close(fderr[1]); execvp(name, (char* const*)argv); //this is called only if execvp fails: //use _exit instead of exit, to avoid destroying key shared file descriptors _exit(EXIT_FAILURE); } else { close(fdout[1]); close(fderr[1]); char buffer[256]; execute_result_t result; while(true) { auto size = read(fdout[0], buffer, sizeof(buffer)); if(size <= 0) break; auto offset = result.output.size(); result.output.resize(offset + size); memory::copy(result.output.get() + offset, buffer, size); } while(true) { auto size = read(fderr[0], buffer, sizeof(buffer)); if(size <= 0) break; auto offset = result.error.size(); result.error.resize(offset + size); memory::copy(result.error.get() + offset, buffer, size); } close(fdout[0]); close(fderr[0]); int status = 0; waitpid(pid, &status, 0); if(!WIFEXITED(status)) return {}; result.code = WEXITSTATUS(status); return result; } } template inline auto invoke(const string& name, P&&... p) -> void { pid_t pid = fork(); if(pid == 0) { const char* argv[1 + sizeof...(p) + 1]; const char** argp = argv; vector argl(forward

(p)...); *argp++ = (const char*)name; for(auto& arg : argl) *argp++ = (const char*)arg; *argp++ = nullptr; if(execvp(name, (char* const*)argv) < 0) { #if defined(PLATFORM_MACOS) execlp("open", "open", (const char*)name, nullptr); #else execlp("xdg-open", "xdg-open", (const char*)name, nullptr); #endif } exit(0); } } #elif defined(PLATFORM_WINDOWS) template inline auto execute(const string& name, P&&... p) -> execute_result_t { vector argl(name, forward

(p)...); for(auto& arg : argl) if(arg.find(" ")) arg = {"\"", arg, "\""}; string arguments = argl.merge(" "); SECURITY_ATTRIBUTES sa; ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES)); sa.nLength = sizeof(SECURITY_ATTRIBUTES); sa.bInheritHandle = true; sa.lpSecurityDescriptor = nullptr; HANDLE stdoutRead; HANDLE stdoutWrite; if(!CreatePipe(&stdoutRead, &stdoutWrite, &sa, 0)) return {}; if(!SetHandleInformation(stdoutRead, HANDLE_FLAG_INHERIT, 0)) return {}; HANDLE stderrRead; HANDLE stderrWrite; if(!CreatePipe(&stderrRead, &stderrWrite, &sa, 0)) return {}; if(!SetHandleInformation(stderrRead, HANDLE_FLAG_INHERIT, 0)) return {}; HANDLE stdinRead; HANDLE stdinWrite; if(!CreatePipe(&stdinRead, &stdinWrite, &sa, 0)) return {}; if(!SetHandleInformation(stdinWrite, HANDLE_FLAG_INHERIT, 0)) return {}; STARTUPINFO si; ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.hStdOutput = stdoutWrite; si.hStdError = stderrWrite; si.hStdInput = stdinRead; si.dwFlags = STARTF_USESTDHANDLES; PROCESS_INFORMATION pi; ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); if(!CreateProcess( nullptr, utf16_t(arguments), nullptr, nullptr, true, CREATE_NO_WINDOW, nullptr, nullptr, &si, &pi )) return {}; DWORD exitCode = EXIT_FAILURE; if(WaitForSingleObject(pi.hProcess, INFINITE)) return {}; if(!GetExitCodeProcess(pi.hProcess, &exitCode)) return {}; CloseHandle(pi.hThread); CloseHandle(pi.hProcess); char buffer[256]; execute_result_t result; result.code = exitCode; while(true) { DWORD read, available, remaining; if(!PeekNamedPipe(stdoutRead, nullptr, sizeof(buffer), &read, &available, &remaining)) break; if(read == 0) break; if(!ReadFile(stdoutRead, buffer, sizeof(buffer), &read, nullptr)) break; if(read == 0) break; auto offset = result.output.size(); result.output.resize(offset + read); memory::copy(result.output.get() + offset, buffer, read); } while(true) { DWORD read, available, remaining; if(!PeekNamedPipe(stderrRead, nullptr, sizeof(buffer), &read, &available, &remaining)) break; if(read == 0) break; if(!ReadFile(stderrRead, buffer, sizeof(buffer), &read, nullptr)) break; if(read == 0) break; auto offset = result.error.size(); result.error.resize(offset + read); memory::copy(result.error.get() + offset, buffer, read); } return result; } template inline auto invoke(const string& name, P&&... p) -> void { vector argl(forward

(p)...); for(auto& arg : argl) if(arg.find(" ")) arg = {"\"", arg, "\""}; string arguments = argl.merge(" "); string directory = Path::program().replace("/", "\\"); ShellExecute(nullptr, nullptr, utf16_t(name), utf16_t(arguments), utf16_t(directory), SW_SHOWNORMAL); } #else template inline auto execute(const string& name, P&&... p) -> string { return ""; } template inline auto invoke(const string& name, P&&... p) -> void { } #endif } ares-126/nall/serial.hpp000066400000000000000000000055471415063341600152520ustar00rootroot00000000000000#pragma once #include #include #include #if !defined(API_POSIX) #error "nall/serial: unsupported system" #endif #include #include #include #include namespace nall { struct serial { ~serial() { close(); } auto readable() -> bool { if(!opened) return false; fd_set fdset; FD_ZERO(&fdset); FD_SET(port, &fdset); timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; int result = select(FD_SETSIZE, &fdset, nullptr, nullptr, &timeout); if(result < 1) return false; return FD_ISSET(port, &fdset); } //-1 on error, otherwise return bytes read auto read(u8* data, u32 length) -> s32 { if(!opened) return -1; return ::read(port, (void*)data, length); } auto writable() -> bool { if(!opened) return false; fd_set fdset; FD_ZERO(&fdset); FD_SET(port, &fdset); timeval timeout; timeout.tv_sec = 0; timeout.tv_usec = 0; int result = select(FD_SETSIZE, nullptr, &fdset, nullptr, &timeout); if(result < 1) return false; return FD_ISSET(port, &fdset); } //-1 on error, otherwise return bytes written auto write(const u8* data, u32 length) -> s32 { if(!opened) return -1; return ::write(port, (void*)data, length); } //rate==0: use flow control (synchronous mode) //rate!=0: baud-rate (asynchronous mode) auto open(string device, u32 rate = 0) -> bool { close(); if(!device) device = "/dev/ttyU0"; //note: default device name is for FreeBSD 10+ port = ::open(device, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK); if(port == -1) return false; if(ioctl(port, TIOCEXCL) == -1) { close(); return false; } if(fcntl(port, F_SETFL, 0) == -1) { close(); return false; } if(tcgetattr(port, &original_attr) == -1) { close(); return false; } termios attr = original_attr; cfmakeraw(&attr); cfsetspeed(&attr, rate ? rate : 57600); //rate value has no effect in synchronous mode attr.c_lflag &=~ (ECHO | ECHONL | ISIG | ICANON | IEXTEN); attr.c_iflag &=~ (BRKINT | PARMRK | INPCK | ISTRIP | INLCR | IGNCR | ICRNL | IXON | IXOFF | IXANY); attr.c_iflag |= (IGNBRK | IGNPAR); attr.c_oflag &=~ (OPOST); attr.c_cflag &=~ (CSIZE | CSTOPB | PARENB | CLOCAL); attr.c_cflag |= (CS8 | CREAD); if(rate) { attr.c_cflag &= ~CRTSCTS; } else { attr.c_cflag |= CRTSCTS; } attr.c_cc[VTIME] = attr.c_cc[VMIN] = 0; if(tcsetattr(port, TCSANOW, &attr) == -1) { close(); return false; } return opened = true; } auto close() -> void { if(port != -1) { tcdrain(port); if(opened) { tcsetattr(port, TCSANOW, &original_attr); opened = false; } ::close(port); port = -1; } } private: int port = -1; bool opened = false; termios original_attr; }; } ares-126/nall/serializer.hpp000066400000000000000000000104561415063341600161370ustar00rootroot00000000000000#pragma once //serializer: a class designed to save and restore the state of classes. // //benefits: //- data() will be portable in size (it is not necessary to specify type sizes.) //- data() will be portable in endianness (always stored internally as little-endian.) //- one serialize function can both save and restore class states. // //caveats: //- only plain-old-data can be stored. complex classes must provide serialize(serializer&); //- floating-point usage is not portable across different implementations #include #include #include #include #include #include namespace nall { struct serializer; template struct has_serialize { template static auto test(decltype(std::declval().serialize(std::declval()))*) -> char; template static auto test(...) -> long; static constexpr bool value = sizeof(test(0)) == sizeof(char); }; template constexpr bool has_serialize_v = has_serialize::value; struct serializer { explicit operator bool() const { return _size; } auto reading() const -> bool { return _mode == 0; } auto writing() const -> bool { return _mode == 1; } auto setReading() -> void { _mode = 0; _size = 0; } auto setWriting() -> void { _mode = 1; _size = 0; } auto data() const -> const u8* { return _data; } auto size() const -> u32 { return _size; } auto capacity() const -> u32 { return _capacity; } auto reserve(u32 size) -> void { if(size > _capacity) { auto data = new u8[bit::round(size)](); memory::copy(data, _data, _capacity); delete[] _data; _data = data; _capacity = bit::round(size); } } template auto operator()(T& value) -> serializer& { static_assert(has_serialize_v || is_integral_v || is_floating_point_v); if constexpr(has_serialize_v) { value.serialize(*this); } else if constexpr(is_integral_v) { integer(value); } else if constexpr(is_floating_point_v) { real(value); } return *this; } template auto operator()(T (&array)[N]) -> serializer& { for(auto& value : array) operator()(value); return *this; } template auto operator()(array_span array) -> serializer& { for(auto& value : array) operator()(value); return *this; } auto operator=(const serializer& s) -> serializer& { if(_data) delete[] _data; _mode = s._mode; _data = new u8[s._capacity]; _size = s._size; _capacity = s._capacity; memory::copy(_data, s._data, s._capacity); return *this; } auto operator=(serializer&& s) -> serializer& { if(_data) delete[] _data; _mode = s._mode; _data = s._data; _size = s._size; _capacity = s._capacity; s._data = nullptr; return *this; } serializer(const serializer& s) { operator=(s); } serializer(serializer&& s) { operator=(move(s)); } serializer() { setWriting(); _data = new u8[1024 * 1024](); _size = 0; _capacity = 1024 * 1024; } serializer(const u8* data, u32 capacity) { setReading(); _data = new u8[capacity](); _size = 0; _capacity = capacity; memory::copy(_data, data, capacity); } ~serializer() { if(_data) delete[] _data; } private: template auto integer(T& value) -> serializer& { enum : u32 { size = std::is_same::value ? 1 : sizeof(T) }; reserve(_size + size); if(writing()) { for(u32 n : range(size)) _data[_size++] = value >> (n << 3); } else if(reading()) { value = 0; for(u32 n : range(size)) value |= (T)_data[_size++] << (n << 3); } return *this; } template auto real(T& value) -> serializer& { enum : u32 { size = sizeof(T) }; reserve(_size + size); //this is rather dangerous, and not cross-platform safe; //but there is no standardized way to export floating point values auto p = (u8*)&value; if(writing()) { for(u32 n : range(size)) _data[_size++] = p[n]; } else if(reading()) { for(u32 n : range(size)) p[n] = _data[_size++]; } return *this; } bool _mode = 0; u8* _data = nullptr; u32 _size = 0; u32 _capacity = 0; }; } ares-126/nall/service.hpp000066400000000000000000000003621415063341600154210ustar00rootroot00000000000000#pragma once //service model template built on top of shared-memory #include #if defined(API_POSIX) #include #endif #if defined(API_WINDOWS) #include #endif ares-126/nall/set.hpp000066400000000000000000000155011415063341600145550ustar00rootroot00000000000000#pragma once //set //implementation: red-black tree // //search: O(log n) average; O(log n) worst //insert: O(log n) average; O(log n) worst //remove: O(log n) average; O(log n) worst // //requirements: // bool T::operator==(const T&) const; // bool T::operator< (const T&) const; #include #include namespace nall { template struct set { struct node_t { T value; bool red = 1; node_t* link[2] = {nullptr, nullptr}; node_t() = default; node_t(const T& value) : value(value) {} }; node_t* root = nullptr; u32 nodes = 0; set() = default; set(const set& source) { operator=(source); } set(set&& source) { operator=(move(source)); } set(std::initializer_list list) { for(auto& value : list) insert(value); } ~set() { reset(); } auto operator=(const set& source) -> set& { if(this == &source) return *this; reset(); copy(root, source.root); nodes = source.nodes; return *this; } auto operator=(set&& source) -> set& { if(this == &source) return *this; root = source.root; nodes = source.nodes; source.root = nullptr; source.nodes = 0; return *this; } explicit operator bool() const { return nodes; } auto size() const -> u32 { return nodes; } auto reset() -> void { reset(root); nodes = 0; } auto find(const T& value) -> maybe { if(node_t* node = find(root, value)) return node->value; return nothing; } auto find(const T& value) const -> maybe { if(node_t* node = find(root, value)) return node->value; return nothing; } auto insert(const T& value) -> maybe { u32 count = size(); node_t* v = insert(root, value); root->red = 0; if(size() == count) return nothing; return v->value; } template auto insert(const T& value, P&&... p) -> bool { bool result = insert(value); insert(forward

(p)...) | result; return result; } auto remove(const T& value) -> bool { u32 count = size(); bool done = 0; remove(root, &value, done); if(root) root->red = 0; return size() < count; } template auto remove(const T& value, P&&... p) -> bool { bool result = remove(value); return remove(forward

(p)...) | result; } struct base_iterator { auto operator!=(const base_iterator& source) const -> bool { return position != source.position; } auto operator++() -> base_iterator& { if(++position >= source.size()) { position = source.size(); return *this; } if(stack.right()->link[1]) { stack.append(stack.right()->link[1]); while(stack.right()->link[0]) stack.append(stack.right()->link[0]); } else { node_t* child; do child = stack.takeRight(); while(child == stack.right()->link[1]); } return *this; } base_iterator(const set& source, u32 position) : source(source), position(position) { node_t* node = source.root; while(node) { stack.append(node); node = node->link[0]; } } protected: const set& source; u32 position; vector stack; }; struct iterator : base_iterator { iterator(const set& source, u32 position) : base_iterator(source, position) {} auto operator*() const -> T& { return base_iterator::stack.right()->value; } }; auto begin() -> iterator { return iterator(*this, 0); } auto end() -> iterator { return iterator(*this, size()); } struct const_iterator : base_iterator { const_iterator(const set& source, u32 position) : base_iterator(source, position) {} auto operator*() const -> const T& { return base_iterator::stack.right()->value; } }; auto begin() const -> const const_iterator { return const_iterator(*this, 0); } auto end() const -> const const_iterator { return const_iterator(*this, size()); } private: auto reset(node_t*& node) -> void { if(!node) return; if(node->link[0]) reset(node->link[0]); if(node->link[1]) reset(node->link[1]); delete node; node = nullptr; } auto copy(node_t*& target, const node_t* source) -> void { if(!source) return; target = new node_t(source->value); target->red = source->red; copy(target->link[0], source->link[0]); copy(target->link[1], source->link[1]); } auto find(node_t* node, const T& value) const -> node_t* { if(node == nullptr) return nullptr; if(node->value == value) return node; return find(node->link[node->value < value], value); } auto red(node_t* node) const -> bool { return node && node->red; } auto black(node_t* node) const -> bool { return !red(node); } auto rotate(node_t*& a, bool dir) -> void { node_t*& b = a->link[!dir]; node_t*& c = b->link[dir]; a->red = 1, b->red = 0; std::swap(a, b); std::swap(b, c); } auto rotateTwice(node_t*& node, bool dir) -> void { rotate(node->link[!dir], !dir); rotate(node, dir); } auto insert(node_t*& node, const T& value) -> node_t* { if(!node) { nodes++; node = new node_t(value); return node; } if(node->value == value) { node->value = value; return node; } //prevent duplicate entries bool dir = node->value < value; node_t* v = insert(node->link[dir], value); if(black(node->link[dir])) return v; if(red(node->link[!dir])) { node->red = 1; node->link[0]->red = 0; node->link[1]->red = 0; } else if(red(node->link[dir]->link[dir])) { rotate(node, !dir); } else if(red(node->link[dir]->link[!dir])) { rotateTwice(node, !dir); } return v; } auto balance(node_t*& node, bool dir, bool& done) -> void { node_t* p = node; node_t* s = node->link[!dir]; if(!s) return; if(red(s)) { rotate(node, dir); s = p->link[!dir]; } if(black(s->link[0]) && black(s->link[1])) { if(red(p)) done = 1; p->red = 0, s->red = 1; } else { bool save = p->red; bool head = node == p; if(red(s->link[!dir])) rotate(p, dir); else rotateTwice(p, dir); p->red = save; p->link[0]->red = 0; p->link[1]->red = 0; if(head) node = p; else node->link[dir] = p; done = 1; } } auto remove(node_t*& node, const T* value, bool& done) -> void { if(!node) { done = 1; return; } if(node->value == *value) { if(!node->link[0] || !node->link[1]) { node_t* save = node->link[!node->link[0]]; if(red(node)) done = 1; else if(red(save)) save->red = 0, done = 1; nodes--; delete node; node = save; return; } else { node_t* heir = node->link[0]; while(heir->link[1]) heir = heir->link[1]; node->value = heir->value; value = &heir->value; } } bool dir = node->value < *value; remove(node->link[dir], value, done); if(!done) balance(node, dir, done); } }; } ares-126/nall/shared-memory.hpp000066400000000000000000000003321415063341600165320ustar00rootroot00000000000000#pragma once #include #include #if defined(API_POSIX) #include #endif #if defined(API_WINDOWS) #include #endif ares-126/nall/shared-pointer.hpp000066400000000000000000000157501415063341600167140ustar00rootroot00000000000000#pragma once #include #include #include #include namespace nall { template struct shared_pointer; struct shared_pointer_manager { void* pointer = nullptr; function deleter; u32 strong = 0; u32 weak = 0; shared_pointer_manager(void* pointer) : pointer(pointer) { } }; template struct shared_pointer; template struct shared_pointer_weak; template struct shared_pointer_this; struct shared_pointer_this_base{}; template struct shared_pointer { template static auto create(P&&... p) { return shared_pointer{new T{forward

(p)...}}; } using type = T; shared_pointer_manager* manager = nullptr; template struct is_compatible { static constexpr bool value = is_base_of::value || is_base_of::value; }; shared_pointer() { } shared_pointer(T* source) { operator=(source); } shared_pointer(T* source, const function& deleter) { operator=(source); manager->deleter = function([=](void* p) { deleter((T*)p); }); } shared_pointer(const shared_pointer& source) { operator=(source); } shared_pointer(shared_pointer&& source) { operator=(move(source)); } template::value>> shared_pointer(const shared_pointer& source) { operator=(source); } template::value>> shared_pointer(shared_pointer&& source) { operator=(move(source)); } template::value>> shared_pointer(const shared_pointer_weak& source) { operator=(source); } template::value>> shared_pointer(const shared_pointer& source, T* pointer) { if((bool)source && (T*)source.manager->pointer == pointer) { manager = source.manager; manager->strong++; } } ~shared_pointer() { reset(); } auto operator=(T* source) -> shared_pointer& { reset(); if(source) { manager = new shared_pointer_manager((void*)source); manager->strong++; if constexpr(is_base_of_v) { source->weak = *this; } } return *this; } auto operator=(const shared_pointer& source) -> shared_pointer& { if(this != &source) { reset(); if((bool)source) { manager = source.manager; manager->strong++; } } return *this; } auto operator=(shared_pointer&& source) -> shared_pointer& { if(this != &source) { reset(); manager = source.manager; source.manager = nullptr; } return *this; } template::value>> auto operator=(const shared_pointer& source) -> shared_pointer& { if((uintptr)this != (uintptr)&source) { reset(); if((bool)source) { manager = source.manager; manager->strong++; } } return *this; } template::value>> auto operator=(shared_pointer&& source) -> shared_pointer& { if((uintptr)this != (uintptr)&source) { reset(); manager = source.manager; source.manager = nullptr; } return *this; } template::value>> auto operator=(const shared_pointer_weak& source) -> shared_pointer& { reset(); if((bool)source) { manager = source.manager; manager->strong++; } return *this; } auto data() -> T* { if(manager) return (T*)manager->pointer; return nullptr; } auto data() const -> const T* { if(manager) return (T*)manager->pointer; return nullptr; } auto operator->() -> T* { return data(); } auto operator->() const -> const T* { return data(); } auto operator*() -> T& { return *data(); } auto operator*() const -> const T& { return *data(); } auto operator()() -> T& { return *data(); } auto operator()() const -> const T& { return *data(); } template auto operator==(const shared_pointer& source) const -> bool { return manager == source.manager; } template auto operator!=(const shared_pointer& source) const -> bool { return manager != source.manager; } explicit operator bool() const { return manager && manager->strong; } auto unique() const -> bool { return manager && manager->strong == 1; } auto references() const -> u32 { return manager ? manager->strong : 0; } auto reset() -> void { if(manager && manager->strong) { //pointer may contain weak references; if strong==0 it may destroy manager //as such, we must destroy strong before decrementing it to zero if(manager->strong == 1) { if(manager->deleter) { manager->deleter(manager->pointer); } else { delete (T*)manager->pointer; } manager->pointer = nullptr; } if(--manager->strong == 0) { if(manager->weak == 0) { delete manager; } } } manager = nullptr; } template auto cast() -> shared_pointer { if(auto pointer = dynamic_cast(data())) { return {*this, pointer}; } return {}; } }; template struct shared_pointer_weak { using type = T; shared_pointer_manager* manager = nullptr; shared_pointer_weak() { } shared_pointer_weak(const shared_pointer& source) { operator=(source); } auto operator=(const shared_pointer& source) -> shared_pointer_weak& { reset(); if(manager = source.manager) manager->weak++; return *this; } ~shared_pointer_weak() { reset(); } auto operator==(const shared_pointer_weak& source) const -> bool { return manager == source.manager; } auto operator!=(const shared_pointer_weak& source) const -> bool { return manager != source.manager; } explicit operator bool() const { return manager && manager->strong; } auto acquire() const -> shared_pointer { return shared_pointer(*this); } auto reset() -> void { if(manager && --manager->weak == 0) { if(manager->strong == 0) { delete manager; } } manager = nullptr; } }; template struct shared_pointer_this : shared_pointer_this_base { shared_pointer_weak weak; auto shared() -> shared_pointer { return weak; } auto shared() const -> shared_pointer { return weak; } }; template auto shared_pointer_make(P&&... p) -> shared_pointer { return shared_pointer{new T{forward

(p)...}}; } template struct shared_pointer_new : shared_pointer { shared_pointer_new(const shared_pointer& source) : shared_pointer(source) {} template shared_pointer_new(P&&... p) : shared_pointer(new T(forward

(p)...)) {} }; } ares-126/nall/smtp.hpp000066400000000000000000000212401415063341600147420ustar00rootroot00000000000000#pragma once #include #include #include #if !defined(PLATFORM_WINDOWS) #include #include #include #include #else #include #include #endif namespace nall { struct SMTP { enum class Format : u32 { Plain, HTML }; auto server(string server, u16 port = 25) -> void; auto from(string mail, string name = "") -> void; auto to(string mail, string name = "") -> void; auto cc(string mail, string name = "") -> void; auto bcc(string mail, string name = "") -> void; auto attachment(const u8* data, u32 size, string name) -> void; auto attachment(string filename, string name = "") -> bool; auto subject(string subject) -> void; auto body(string body, Format format = Format::Plain) -> void; auto send() -> bool; auto message() -> string; auto response() -> string; #if defined(API_WINDOWS) auto close(s32) -> s32; SMTP(); #endif private: struct Information { string server; u16 port; struct Contact { string mail; string name; }; Contact from; vector to; vector cc; vector bcc; struct Attachment { vector buffer; string name; }; string subject; string body; Format format = Format::Plain; vector attachments; string message; string response; } info; auto send(s32 sock, const string& text) -> bool; auto recv(s32 sock) -> string; auto boundary() -> string; auto filename(const string& filename) -> string; auto contact(const Information::Contact& contact) -> string; auto contacts(const vector& contacts) -> string; auto split(const string& text) -> string; }; inline auto SMTP::server(string server, u16 port) -> void { info.server = server; info.port = port; } inline auto SMTP::from(string mail, string name) -> void { info.from = {mail, name}; } inline auto SMTP::to(string mail, string name) -> void { info.to.append({mail, name}); } inline auto SMTP::cc(string mail, string name) -> void { info.cc.append({mail, name}); } inline auto SMTP::bcc(string mail, string name) -> void { info.bcc.append({mail, name}); } inline auto SMTP::attachment(const u8* data, u32 size, string name) -> void { vector buffer; buffer.resize(size); memcpy(buffer.data(), data, size); info.attachments.append({std::move(buffer), name}); } inline auto SMTP::attachment(string filename, string name) -> bool { if(!file::exists(filename)) return false; if(name == "") name = notdir(filename); auto buffer = file::read(filename); info.attachments.append({std::move(buffer), name}); return true; } inline auto SMTP::subject(string subject) -> void { info.subject = subject; } inline auto SMTP::body(string body, Format format) -> void { info.body = body; info.format = format; } inline auto SMTP::send() -> bool { info.message.append("From: =?UTF-8?B?", Base64::encode(contact(info.from)), "?=\r\n"); info.message.append("To: =?UTF-8?B?", Base64::encode(contacts(info.to)), "?=\r\n"); info.message.append("Cc: =?UTF-8?B?", Base64::encode(contacts(info.cc)), "?=\r\n"); info.message.append("Subject: =?UTF-8?B?", Base64::encode(info.subject), "?=\r\n"); string uniqueID = boundary(); info.message.append("MIME-Version: 1.0\r\n"); info.message.append("Content-Type: multipart/mixed; boundary=", uniqueID, "\r\n"); info.message.append("\r\n"); string format = (info.format == Format::Plain ? "text/plain" : "text/html"); info.message.append("--", uniqueID, "\r\n"); info.message.append("Content-Type: ", format, "; charset=UTF-8\r\n"); info.message.append("Content-Transfer-Encoding: base64\r\n"); info.message.append("\r\n"); info.message.append(split(Base64::encode(info.body)), "\r\n"); info.message.append("\r\n"); for(auto& attachment : info.attachments) { info.message.append("--", uniqueID, "\r\n"); info.message.append("Content-Type: application/octet-stream\r\n"); info.message.append("Content-Transfer-Encoding: base64\r\n"); info.message.append("Content-Disposition: attachment; size=", attachment.buffer.size(), "; filename*=UTF-8''", filename(attachment.name), "\r\n"); info.message.append("\r\n"); info.message.append(split(Base64::encode(attachment.buffer)), "\r\n"); info.message.append("\r\n"); } info.message.append("--", uniqueID, "--\r\n"); addrinfo hints; memset(&hints, 0, sizeof(addrinfo)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; addrinfo* serverinfo; s32 status = getaddrinfo(info.server, string(info.port), &hints, &serverinfo); if(status != 0) return false; s32 sock = socket(serverinfo->ai_family, serverinfo->ai_socktype, serverinfo->ai_protocol); if(sock == -1) return false; s32 result = connect(sock, serverinfo->ai_addr, serverinfo->ai_addrlen); if(result == -1) return false; string response; info.response.append(response = recv(sock)); if(!response.beginswith("220 ")) { close(sock); return false; } send(sock, {"HELO ", info.server, "\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("250 ")) { close(sock); return false; } send(sock, {"MAIL FROM: <", info.from.mail, ">\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("250 ")) { close(sock); return false; } for(auto& contact : info.to) { send(sock, {"RCPT TO: <", contact.mail, ">\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("250 ")) { close(sock); return false; } } for(auto& contact : info.cc) { send(sock, {"RCPT TO: <", contact.mail, ">\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("250 ")) { close(sock); return false; } } for(auto& contact : info.bcc) { send(sock, {"RCPT TO: <", contact.mail, ">\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("250 ")) { close(sock); return false; } } send(sock, {"DATA\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("354 ")) { close(sock); return false; } send(sock, {info.message, "\r\n", ".\r\n"}); info.response.append(response = recv(sock)); if(!response.beginswith("250 ")) { close(sock); return false; } send(sock, {"QUIT\r\n"}); info.response.append(response = recv(sock)); //if(!response.beginswith("221 ")) { close(sock); return false; } close(sock); return true; } inline auto SMTP::message() -> string { return info.message; } inline auto SMTP::response() -> string { return info.response; } inline auto SMTP::send(s32 sock, const string& text) -> bool { const char* data = text.data(); u32 size = text.size(); while(size) { s32 length = ::send(sock, (const char*)data, size, 0); if(length == -1) return false; data += length; size -= length; } return true; } inline auto SMTP::recv(s32 sock) -> string { vector buffer; while(true) { char c; if(::recv(sock, &c, sizeof(char), 0) < 1) break; buffer.append(c); if(c == '\n') break; } buffer.append(0); return buffer; } inline auto SMTP::boundary() -> string { random_lfsr random; random.seed(time(0)); string boundary; for(u32 n = 0; n < 16; n++) boundary.append(hex<2>(random())); return boundary; } inline auto SMTP::filename(const string& filename) -> string { string result; for(auto& n : filename) { if(n <= 32 || n >= 127) result.append("%", hex<2>(n)); else result.append(n); } return result; } inline auto SMTP::contact(const Information::Contact& contact) -> string { if(!contact.name) return contact.mail; return {"\"", contact.name, "\" <", contact.mail, ">"}; } inline auto SMTP::contacts(const vector& contacts) -> string { string result; for(auto& contact : contacts) { result.append(this->contact(contact), "; "); } result.trimRight("; ", 1L); return result; } inline auto SMTP::split(const string& text) -> string { string result; u32 offset = 0; while(offset < text.size()) { u32 length = min(76, text.size() - offset); if(length < 76) { result.append(text.slice(offset)); } else { result.append(text.slice(offset, 76), "\r\n"); } offset += length; } return result; } #if defined(API_WINDOWS) inline auto SMTP::close(s32 sock) -> s32 { return closesocket(sock); } inline SMTP::SMTP() { s32 sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(sock == INVALID_SOCKET && WSAGetLastError() == WSANOTINITIALISED) { WSADATA wsaData; if(WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { WSACleanup(); return; } } else { close(sock); } } #endif } ares-126/nall/stdint.hpp000066400000000000000000000043551415063341600152740ustar00rootroot00000000000000#pragma once #if defined(_MSC_VER) typedef signed char int8_t; typedef signed short int16_t; typedef signed int int32_t; typedef signed long long int64_t; typedef int64_t intmax_t; #if defined(_WIN64) typedef int64_t intptr_t; #else typedef int32_t intptr_t; #endif typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long long uint64_t; typedef uint64_t uintmax_t; #if defined(_WIN64) typedef uint64_t uintptr_t; #else typedef uint32_t uintptr_t; #endif #else #include #endif #if defined(__SIZEOF_INT128__) using int128_t = signed __int128; using uint128_t = unsigned __int128; #endif using intmax = intmax_t; using uintmax = uintmax_t; using intptr = intptr_t; using uintptr = uintptr_t; using float32_t = float; using float64_t = double; //note: long double size is not reliable across platforms //using float80_t = long double; static_assert(sizeof( int8_t) == 1, "int8_t is not of the correct size" ); static_assert(sizeof(int16_t) == 2, "int16_t is not of the correct size"); static_assert(sizeof(int32_t) == 4, "int32_t is not of the correct size"); static_assert(sizeof(int64_t) == 8, "int64_t is not of the correct size"); static_assert(sizeof( uint8_t) == 1, "int8_t is not of the correct size" ); static_assert(sizeof(uint16_t) == 2, "int16_t is not of the correct size"); static_assert(sizeof(uint32_t) == 4, "int32_t is not of the correct size"); static_assert(sizeof(uint64_t) == 8, "int64_t is not of the correct size"); static_assert(sizeof(float) >= 4, "float32_t is not of the correct size"); static_assert(sizeof(double) >= 8, "float64_t is not of the correct size"); //static_assert(sizeof(long double) >= 10, "float80_t is not of the correct size"); using sint = signed int; using uint = unsigned int; using real32_t = float; using real64_t = double; //shorthand using s8 = int8_t; using s08 = int8_t; using s16 = int16_t; using s32 = int32_t; using s64 = int64_t; using u8 = uint8_t; using u08 = uint8_t; using u16 = uint16_t; using u32 = uint32_t; using u64 = uint64_t; using f32 = float32_t; using f64 = float64_t; #if defined(__SIZEOF_INT128__) using s128 = int128_t; using u128 = uint128_t; #endif ares-126/nall/string.hpp000066400000000000000000000315151415063341600152730ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace nall { struct string; struct string_format; struct string_view { using type = string_view; //view.hpp string_view(); string_view(const string_view& source); string_view(string_view&& source); string_view(const char* data); string_view(const char* data, u32 size); string_view(const string& source); template string_view(P&&... p); ~string_view(); auto operator=(const string_view& source) -> type&; auto operator=(string_view&& source) -> type&; auto operator==(const char* source) const -> bool { return strcmp(data(), source) == 0; } auto operator!=(const char* source) const -> bool { return strcmp(data(), source) != 0; } explicit operator bool() const; operator const char*() const; auto data() const -> const char*; auto size() const -> u32; auto begin() const { return &_data[0]; } auto end() const { return &_data[size()]; } protected: string* _string; const char* _data; mutable s32 _size; }; //adaptive (SSO + COW) is by far the best choice, the others exist solely to: //1) demonstrate the performance benefit of combining SSO + COW //2) rule out allocator bugs by trying different allocators when needed #define NALL_STRING_ALLOCATOR_ADAPTIVE //#define NALL_STRING_ALLOCATOR_COPY_ON_WRITE //#define NALL_STRING_ALLOCATOR_SMALL_STRING_OPTIMIZATION //#define NALL_STRING_ALLOCATOR_VECTOR //cast.hpp template struct stringify; //format.hpp template auto print(P&&...) -> void; template auto print(FILE*, P&&...) -> void; template auto pad(const T& value, long precision = 0, char padchar = ' ') -> string; template auto hex(T value, long precision = 0, char padchar = '0') -> string; template auto octal(T value, long precision = 0, char padchar = '0') -> string; template auto binary(T value, long precision = 0, char padchar = '0') -> string; //match.hpp auto tokenize(const char* s, const char* p) -> bool; auto tokenize(vector& list, const char* s, const char* p) -> bool; //utf8.hpp auto characters(string_view self, s32 offset = 0, s32 length = -1) -> u32; //utility.hpp auto slice(string_view self, s32 offset = 0, s32 length = -1) -> string; template auto fromInteger(char* result, T value) -> char*; template auto fromNatural(char* result, T value) -> char*; template auto fromHex(char* result, T value) -> char*; template auto fromReal(char* str, T value) -> u32; struct string { using type = string; protected: #if defined(NALL_STRING_ALLOCATOR_ADAPTIVE) enum : u32 { SSO = 24 }; union { struct { //copy-on-write char* _data; u32* _refs; }; struct { //small-string-optimization char _text[SSO]; }; }; auto _allocate() -> void; auto _copy() -> void; auto _resize() -> void; #endif #if defined(NALL_STRING_ALLOCATOR_COPY_ON_WRITE) char* _data; mutable u32* _refs; auto _allocate() -> char*; auto _copy() -> char*; #endif #if defined(NALL_STRING_ALLOCATOR_SMALL_STRING_OPTIMIZATION) enum : u32 { SSO = 24 }; union { char* _data; char _text[SSO]; }; #endif #if defined(NALL_STRING_ALLOCATOR_VECTOR) char* _data; #endif u32 _capacity; u32 _size; public: string(); string(string& source) : string() { operator=(source); } string(const string& source) : string() { operator=(source); } string(string&& source) : string() { operator=(move(source)); } template auto get() -> T*; template auto data() const -> const T*; template auto size() const -> u32 { return _size / sizeof(T); } template auto capacity() const -> u32 { return _capacity / sizeof(T); } auto reset() -> type&; auto reserve(u32) -> type&; auto resize(u32) -> type&; auto operator=(const string&) -> type&; auto operator=(string&&) -> type&; template string(T&& s, P&&... p) : string() { append(forward(s), forward

(p)...); } ~string() { reset(); } explicit operator bool() const { return _size; } operator const char*() const { return (const char*)data(); } operator array_span() { return {(char*)get(), size()}; } operator array_view() const { return {(const char*)data(), size()}; } operator array_span() { return {(u8*)get(), size()}; } operator array_view() const { return {(const u8*)data(), size()}; } auto operator==(const string& source) const -> bool { return size() == source.size() && memory::compare(data(), source.data(), size()) == 0; } auto operator!=(const string& source) const -> bool { return size() != source.size() || memory::compare(data(), source.data(), size()) != 0; } auto operator==(const char* source) const -> bool { return strcmp(data(), source) == 0; } auto operator!=(const char* source) const -> bool { return strcmp(data(), source) != 0; } auto operator==(string_view source) const -> bool { return compare(source) == 0; } auto operator!=(string_view source) const -> bool { return compare(source) != 0; } auto operator< (string_view source) const -> bool { return compare(source) < 0; } auto operator<=(string_view source) const -> bool { return compare(source) <= 0; } auto operator> (string_view source) const -> bool { return compare(source) > 0; } auto operator>=(string_view source) const -> bool { return compare(source) >= 0; } auto begin() -> char* { return &get()[0]; } auto end() -> char* { return &get()[size()]; } auto begin() const -> const char* { return &data()[0]; } auto end() const -> const char* { return &data()[size()]; } //atoi.hpp auto boolean() const -> bool; auto integer() const -> s64; auto natural() const -> u64; auto hex() const -> u64; auto real() const -> f64; //core.hpp auto operator[](u32) const -> const char&; auto operator()(u32, char = 0) const -> char; template auto assign(P&&...) -> type&; template auto prepend(const T&, P&&...) -> type&; template auto prepend(const nall::string_format&, P&&...) -> type&; template auto _prepend(const stringify&) -> type&; template auto append(const T&, P&&...) -> type&; template auto append(const nall::string_format&, P&&...) -> type&; template auto _append(const stringify&) -> type&; auto length() const -> u32; //find.hpp auto contains(string_view characters) const -> maybe; template auto _find(s32, string_view) const -> maybe; auto find(string_view source) const -> maybe; auto ifind(string_view source) const -> maybe; auto qfind(string_view source) const -> maybe; auto iqfind(string_view source) const -> maybe; auto findFrom(s32 offset, string_view source) const -> maybe; auto ifindFrom(s32 offset, string_view source) const -> maybe; auto findNext(s32 offset, string_view source) const -> maybe; auto ifindNext(s32 offset, string_view source) const -> maybe; auto findPrevious(s32 offset, string_view source) const -> maybe; auto ifindPrevious(s32 offset, string_view source) const -> maybe; //format.hpp auto format(const nall::string_format& params) -> type&; //compare.hpp template static auto _compare(const char*, u32, const char*, u32) -> s32; static auto compare(string_view, string_view) -> s32; static auto icompare(string_view, string_view) -> s32; auto compare(string_view source) const -> s32; auto icompare(string_view source) const -> s32; auto equals(string_view source) const -> bool; auto iequals(string_view source) const -> bool; auto beginsWith(string_view source) const -> bool; auto ibeginsWith(string_view source) const -> bool; auto endsWith(string_view source) const -> bool; auto iendsWith(string_view source) const -> bool; //convert.hpp auto downcase() -> type&; auto upcase() -> type&; auto qdowncase() -> type&; auto qupcase() -> type&; auto transform(string_view from, string_view to) -> type&; //match.hpp auto match(string_view source) const -> bool; auto imatch(string_view source) const -> bool; //replace.hpp template auto _replace(string_view, string_view, long) -> type&; auto replace(string_view from, string_view to, long limit = LONG_MAX) -> type&; auto ireplace(string_view from, string_view to, long limit = LONG_MAX) -> type&; auto qreplace(string_view from, string_view to, long limit = LONG_MAX) -> type&; auto iqreplace(string_view from, string_view to, long limit = LONG_MAX) -> type&; //split.hpp auto split(string_view key, long limit = LONG_MAX) const -> vector; auto isplit(string_view key, long limit = LONG_MAX) const -> vector; auto qsplit(string_view key, long limit = LONG_MAX) const -> vector; auto iqsplit(string_view key, long limit = LONG_MAX) const -> vector; //trim.hpp auto trim(string_view lhs, string_view rhs, long limit = LONG_MAX) -> type&; auto trimLeft(string_view lhs, long limit = LONG_MAX) -> type&; auto trimRight(string_view rhs, long limit = LONG_MAX) -> type&; auto itrim(string_view lhs, string_view rhs, long limit = LONG_MAX) -> type&; auto itrimLeft(string_view lhs, long limit = LONG_MAX) -> type&; auto itrimRight(string_view rhs, long limit = LONG_MAX) -> type&; auto strip() -> type&; auto stripLeft() -> type&; auto stripRight() -> type&; //utf8.hpp auto characters(s32 offset = 0, s32 length = -1) const -> u32; //utility.hpp static auto read(string_view filename) -> string; static auto repeat(string_view pattern, u32 times) -> string; auto fill(char fill = ' ') -> type&; auto hash() const -> u32; auto remove(u32 offset, u32 length) -> type&; auto reverse() -> type&; auto size(s32 length, char fill = ' ') -> type&; auto slice(s32 offset = 0, s32 length = -1) const -> string; }; template<> struct vector : vector_base { using type = vector; using vector_base::vector_base; vector(const vector& source) { vector_base::operator=(source); } vector(vector& source) { vector_base::operator=(source); } vector(vector&& source) { vector_base::operator=(move(source)); } template vector(P&&... p) { append(forward

(p)...); } auto operator=(const vector& source) -> type& { return vector_base::operator=(source), *this; } auto operator=(vector& source) -> type& { return vector_base::operator=(source), *this; } auto operator=(vector&& source) -> type& { return vector_base::operator=(move(source)), *this; } //vector.hpp template auto append(const string&, P&&...) -> type&; auto append() -> type&; auto isort() -> type&; auto find(string_view source) const -> maybe; auto ifind(string_view source) const -> maybe; auto match(string_view pattern) const -> vector; auto merge(string_view separator = "") const -> string; auto strip() -> type&; //split.hpp template auto _split(string_view, string_view, long) -> type&; }; struct string_format : vector { using type = string_format; template string_format(P&&... p) { reserve(sizeof...(p)); append(forward

(p)...); } template auto append(const T&, P&&... p) -> type&; auto append() -> type&; }; inline auto operator"" _s(const char* value, std::size_t) -> string { return {value}; } } #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include ares-126/nall/string/000077500000000000000000000000001415063341600145555ustar00rootroot00000000000000ares-126/nall/string/allocator/000077500000000000000000000000001415063341600165355ustar00rootroot00000000000000ares-126/nall/string/allocator/adaptive.hpp000066400000000000000000000056321415063341600210510ustar00rootroot00000000000000#pragma once /***** adaptive allocator sizeof(string) == SSO + 8 aggressively tries to avoid heap allocations small strings are stored on the stack large strings are shared via copy-on-write SSO alone is very slow on large strings due to copying SSO alone is very slightly faster than this allocator on small strings COW alone is very slow on small strings due to heap allocations COW alone is very slightly faster than this allocator on large strings adaptive is thus very fast for all string sizes *****/ namespace nall { inline string::string() : _data(nullptr), _capacity(SSO - 1), _size(0) { } template inline auto string::get() -> T* { if(_capacity < SSO) return (T*)_text; if(*_refs > 1) _copy(); return (T*)_data; } template inline auto string::data() const -> const T* { if(_capacity < SSO) return (const T*)_text; return (const T*)_data; } inline auto string::reset() -> type& { if(_capacity >= SSO && !--*_refs) memory::free(_data); _data = nullptr; _capacity = SSO - 1; _size = 0; return *this; } inline auto string::reserve(u32 capacity) -> type& { if(capacity <= _capacity) return *this; capacity = bit::round(capacity + 1) - 1; if(_capacity < SSO) { _capacity = capacity; _allocate(); } else if(*_refs > 1) { _capacity = capacity; _copy(); } else { _capacity = capacity; _resize(); } return *this; } inline auto string::resize(u32 size) -> type& { reserve(size); get()[_size = size] = 0; return *this; } inline auto string::operator=(const string& source) -> type& { if(&source == this) return *this; reset(); if(source._capacity >= SSO) { _data = source._data; _refs = source._refs; _capacity = source._capacity; _size = source._size; ++*_refs; } else { memory::copy(_text, source._text, SSO); _capacity = source._capacity; _size = source._size; } return *this; } inline auto string::operator=(string&& source) -> type& { if(&source == this) return *this; reset(); memory::copy(this, &source, sizeof(string)); source._data = nullptr; source._capacity = SSO - 1; source._size = 0; return *this; } //SSO -> COW inline auto string::_allocate() -> void { char _temp[SSO]; memory::copy(_temp, _text, SSO); _data = memory::allocate(_capacity + 1 + sizeof(u32)); memory::copy(_data, _temp, SSO); _refs = (u32*)(_data + _capacity + 1); //always aligned by 32 via reserve() *_refs = 1; } //COW -> Unique inline auto string::_copy() -> void { auto _temp = memory::allocate(_capacity + 1 + sizeof(u32)); memory::copy(_temp, _data, _size = min(_capacity, _size)); _temp[_size] = 0; --*_refs; _data = _temp; _refs = (u32*)(_data + _capacity + 1); *_refs = 1; } //COW -> Resize inline auto string::_resize() -> void { _data = memory::resize(_data, _capacity + 1 + sizeof(u32)); _refs = (u32*)(_data + _capacity + 1); *_refs = 1; } } ares-126/nall/string/allocator/copy-on-write.hpp000066400000000000000000000041361415063341600217660ustar00rootroot00000000000000#pragma once namespace nall { inline string::string() : _data(nullptr), _refs(nullptr), _capacity(0), _size(0) { } template inline auto string::get() -> T* { static char _null[] = ""; if(!_data) return (T*)_null; if(*_refs > 1) _data = _copy(); //make unique for write operations return (T*)_data; } template inline auto string::data() const -> const T* { static const char _null[] = ""; if(!_data) return (const T*)_null; return (const T*)_data; } inline auto string::reset() -> type& { if(_data && !--*_refs) { memory::free(_data); _data = nullptr; //_refs = nullptr; is unnecessary } _capacity = 0; _size = 0; return *this; } inline auto string::reserve(u32 capacity) -> type& { if(capacity > _capacity) { _capacity = bit::round(max(31u, capacity) + 1) - 1; _data = _data ? _copy() : _allocate(); } return *this; } inline auto string::resize(u32 size) -> type& { reserve(size); get()[_size = size] = 0; return *this; } inline auto string::operator=(const string& source) -> string& { if(&source == this) return *this; reset(); if(source._data) { _data = source._data; _refs = source._refs; _capacity = source._capacity; _size = source._size; ++*_refs; } return *this; } inline auto string::operator=(string&& source) -> string& { if(&source == this) return *this; reset(); _data = source._data; _refs = source._refs; _capacity = source._capacity; _size = source._size; source._data = nullptr; source._refs = nullptr; source._capacity = 0; source._size = 0; return *this; } inline auto string::_allocate() -> char* { auto _temp = memory::allocate(_capacity + 1 + sizeof(u32)); *_temp = 0; _refs = (u32*)(_temp + _capacity + 1); //this will always be aligned by 32 via reserve() *_refs = 1; return _temp; } inline auto string::_copy() -> char* { auto _temp = memory::allocate(_capacity + 1 + sizeof(u32)); memory::copy(_temp, _data, _size = min(_capacity, _size)); _temp[_size] = 0; --*_refs; _refs = (u32*)(_temp + _capacity + 1); *_refs = 1; return _temp; } } ares-126/nall/string/allocator/small-string-optimization.hpp000066400000000000000000000042611415063341600244110ustar00rootroot00000000000000#pragma once /* small string optimization (SSO) allocator sizeof(string) == 8 + string::SSO utilizes a union to store small strings directly into text pointer bypasses the need to allocate heap memory for small strings requires extra computations, which can be slower for large strings pros: * potential for in-place resize * no heap allocation when (capacity < SSO) cons: * added overhead to fetch data() * pass-by-value requires heap allocation when (capacity >= SSO) */ namespace nall { inline string::string() { _data = nullptr; _capacity = SSO - 1; _size = 0; } template inline auto string::get() -> T* { if(_capacity < SSO) return (T*)_text; return (T*)_data; } template inline auto string::data() const -> const T* { if(_capacity < SSO) return (const T*)_text; return (const T*)_data; } inline auto string::reset() -> type& { if(_capacity >= SSO) memory::free(_data); _data = nullptr; _capacity = SSO - 1; _size = 0; return *this; } inline auto string::reserve(u32 capacity) -> type& { if(capacity <= _capacity) return *this; capacity = bit::round(capacity + 1) - 1; if(_capacity < SSO) { char _temp[SSO]; memory::copy(_temp, _text, SSO); _data = memory::allocate(_capacity = capacity + 1); memory::copy(_data, _temp, SSO); } else { _data = memory::resize(_data, _capacity = capacity + 1); } return *this; } inline auto string::resize(u32 size) -> type& { reserve(size); get()[_size = size] = 0; return *this; } inline auto string::operator=(const string& source) -> type& { if(&source == this) return *this; reset(); if(source._capacity >= SSO) { _data = memory::allocate(source._capacity + 1); _capacity = source._capacity; _size = source._size; memory::copy(_data, source._data, source._size + 1); } else { memory::copy(_text, source._text, SSO); _capacity = SSO - 1; _size = source._size; } return *this; } inline auto string::operator=(string&& source) -> type& { if(&source == this) return *this; reset(); memory::copy(this, &source, sizeof(string)); source._data = nullptr; source._capacity = SSO - 1; source._size = 0; return *this; } } ares-126/nall/string/allocator/vector.hpp000066400000000000000000000032551415063341600205550ustar00rootroot00000000000000#pragma once /* vector allocator sizeof(string) == 16 (amd64) utilizes a raw string pointer always allocates memory onto the heap when string is not empty pros: * potential for in-place resize * simplicity cons: * always allocates heap memory on (capacity > 0) * pass-by-value requires heap allocation */ namespace nall { template inline auto string::get() -> T* { if(_capacity == 0) reserve(1); return (T*)_data; } template inline auto string::data() const -> const T* { if(_capacity == 0) return (const T*)""; return (const T*)_data; } inline auto string::reset() -> type& { if(_data) { memory::free(_data); _data = nullptr; } _capacity = 0; _size = 0; return *this; } inline auto string::reserve(u32 capacity) -> type& { if(capacity > _capacity) { _capacity = bit::round(capacity + 1) - 1; _data = memory::resize(_data, _capacity + 1); _data[_capacity] = 0; } return *this; } inline auto string::resize(u32 size) -> type& { reserve(size); get()[_size = size] = 0; return *this; } inline auto string::operator=(const string& source) -> type& { if(&source == this) return *this; reset(); _data = memory::allocate(source._size + 1); _capacity = source._size; _size = source._size; memory::copy(_data, source.data(), source.size() + 1); return *this; } inline auto string::operator=(string&& source) -> type& { if(&source == this) return *this; reset(); _data = source._data; _capacity = source._capacity; _size = source._size; source._data = nullptr; source._capacity = 0; source._size = 0; return *this; } inline string::string() { _data = nullptr; _capacity = 0; _size = 0; } } ares-126/nall/string/atoi.hpp000066400000000000000000000006161415063341600162250ustar00rootroot00000000000000#pragma once namespace nall { inline auto string::boolean() const -> bool { return equals("true"); } inline auto string::integer() const -> s64 { return toInteger(data()); } inline auto string::natural() const -> u64 { return toNatural(data()); } inline auto string::hex() const -> u64 { return toHex(data()); } inline auto string::real() const -> f64 { return toReal(data()); } } ares-126/nall/string/cast.hpp000066400000000000000000000232161415063341600162240ustar00rootroot00000000000000#pragma once //convert any (supported) type to a const char* without constructing a new nall::string //this is used inside string{...} to build nall::string values namespace nall { //booleans template<> struct stringify { stringify(bool value) : _value(value) {} auto data() const -> const char* { return _value ? "true" : "false"; } auto size() const -> u32 { return _value ? 4 : 5; } bool _value; }; template<> struct stringify { stringify(bool value) : _value(value) {} auto data() const -> const char* { return _value ? "true" : "false"; } auto size() const -> u32 { return _value ? 4 : 5; } bool _value; }; //characters template<> struct stringify { stringify(char source) { _data[0] = source; _data[1] = 0; } auto data() const -> const char* { return _data; } auto size() const -> u32 { return 1; } char _data[2]; }; //signed integers template<> struct stringify { stringify(signed char source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(signed char) * 3]; }; template<> struct stringify { stringify(signed short source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(signed short) * 3]; }; template<> struct stringify { stringify(signed int source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(signed int) * 3]; }; template<> struct stringify { stringify(signed long source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(signed long) * 3]; }; template<> struct stringify { stringify(signed long long source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(signed long long) * 3]; }; #if defined(__SIZEOF_INT128__) template<> struct stringify { stringify(int128_t source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(s128) * 3]; }; #endif template struct stringify> { stringify(IntegerPrimitive source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(s64) * 3]; }; template struct stringify> { stringify(Integer source) { fromInteger(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[2 + sizeof(s64) * 3]; }; //unsigned integers template<> struct stringify { stringify(unsigned char source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(unsigned char) * 3]; }; template<> struct stringify { stringify(unsigned short source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(unsigned short) * 3]; }; template<> struct stringify { stringify(unsigned int source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(unsigned int) * 3]; }; template<> struct stringify { stringify(unsigned long source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(unsigned long) * 3]; }; template<> struct stringify { stringify(unsigned long long source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(unsigned long long) * 3]; }; #if defined(__SIZEOF_INT128__) template<> struct stringify { stringify(u128 source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(u128) * 3]; }; #endif template struct stringify> { stringify(NaturalPrimitive source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(u64) * 3]; }; template struct stringify> { stringify(Natural source) { fromNatural(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[1 + sizeof(u64) * 3]; }; //floating-point template<> struct stringify { stringify(float source) { fromReal(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[256]; }; template<> struct stringify { stringify(double source) { fromReal(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[256]; }; template<> struct stringify { stringify(long double source) { fromReal(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[256]; }; template struct stringify> { stringify(Real source) { fromReal(_data, source); } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[256]; }; //arrays template<> struct stringify> { stringify(vector source) { _text.resize(source.size()); memory::copy(_text.data(), source.data(), source.size()); } auto data() const -> const char* { return _text.data(); } auto size() const -> u32 { return _text.size(); } vector _text; }; template<> struct stringify&> { stringify(const vector& source) { _text.resize(source.size()); memory::copy(_text.data(), source.data(), source.size()); } auto data() const -> const char* { return _text.data(); } auto size() const -> u32 { return _text.size(); } vector _text; }; //char arrays template<> struct stringify { stringify(char* source) : _data(source ? source : "") {} auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } const char* _data; }; template<> struct stringify { stringify(const char* source) : _data(source ? source : "") {} auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } const char* _data; }; //strings template<> struct stringify { stringify(const string& source) : _text(source) {} auto data() const -> const char* { return _text.data(); } auto size() const -> u32 { return _text.size(); } const string& _text; }; template<> struct stringify { stringify(const string& source) : _text(source) {} auto data() const -> const char* { return _text.data(); } auto size() const -> u32 { return _text.size(); } const string& _text; }; template<> struct stringify { stringify(const string_view& source) : _view(source) {} auto data() const -> const char* { return _view.data(); } auto size() const -> u32 { return _view.size(); } const string_view& _view; }; template<> struct stringify { stringify(const string_view& source) : _view(source) {} auto data() const -> const char* { return _view.data(); } auto size() const -> u32 { return _view.size(); } const string_view& _view; }; template<> struct stringify> { stringify(const array_view& source) : _view(source) {} auto data() const -> const char* { return _view.data(); } auto size() const -> u32 { return _view.size(); } const array_view& _view; }; template<> struct stringify&> { stringify(const array_view& source) : _view(source) {} auto data() const -> const char* { return _view.data(); } auto size() const -> u32 { return _view.size(); } const array_view& _view; }; template<> struct stringify { stringify(const string_pascal& source) : _text(source) {} auto data() const -> const char* { return _text.data(); } auto size() const -> u32 { return _text.size(); } const string_pascal& _text; }; template<> struct stringify { stringify(const string_pascal& source) : _text(source) {} auto data() const -> const char* { return _text.data(); } auto size() const -> u32 { return _text.size(); } const string_pascal& _text; }; //pointers //note: T = char* is matched by stringify template struct stringify { stringify(const T* source) { if(!source) { memory::copy(_data, "(nullptr)", 10); } else { memory::copy(_data, "0x", 2); fromHex(_data + 2, (uintptr)source); } } auto data() const -> const char* { return _data; } auto size() const -> u32 { return strlen(_data); } char _data[256]; }; // template inline auto make_string(T value) -> stringify { return stringify(forward(value)); } } ares-126/nall/string/compare.hpp000066400000000000000000000041061415063341600167150ustar00rootroot00000000000000#pragma once namespace nall { template inline auto string::_compare(const char* target, u32 capacity, const char* source, u32 size) -> s32 { if(Insensitive) return memory::icompare(target, capacity, source, size); return memory::compare(target, capacity, source, size); } //size() + 1 includes null-terminator; required to properly compare strings of differing lengths inline auto string::compare(string_view x, string_view y) -> s32 { return memory::compare(x.data(), x.size() + 1, y.data(), y.size() + 1); } inline auto string::icompare(string_view x, string_view y) -> s32 { return memory::icompare(x.data(), x.size() + 1, y.data(), y.size() + 1); } inline auto string::compare(string_view source) const -> s32 { return memory::compare(data(), size() + 1, source.data(), source.size() + 1); } inline auto string::icompare(string_view source) const -> s32 { return memory::icompare(data(), size() + 1, source.data(), source.size() + 1); } inline auto string::equals(string_view source) const -> bool { if(size() != source.size()) return false; return memory::compare(data(), source.data(), source.size()) == 0; } inline auto string::iequals(string_view source) const -> bool { if(size() != source.size()) return false; return memory::icompare(data(), source.data(), source.size()) == 0; } inline auto string::beginsWith(string_view source) const -> bool { if(source.size() > size()) return false; return memory::compare(data(), source.data(), source.size()) == 0; } inline auto string::ibeginsWith(string_view source) const -> bool { if(source.size() > size()) return false; return memory::icompare(data(), source.data(), source.size()) == 0; } inline auto string::endsWith(string_view source) const -> bool { if(source.size() > size()) return false; return memory::compare(data() + size() - source.size(), source.data(), source.size()) == 0; } inline auto string::iendsWith(string_view source) const -> bool { if(source.size() > size()) return false; return memory::icompare(data() + size() - source.size(), source.data(), source.size()) == 0; } } ares-126/nall/string/convert.hpp000066400000000000000000000022701415063341600167470ustar00rootroot00000000000000#pragma once namespace nall { inline auto string::downcase() -> string& { char* p = get(); for(u32 n = 0; n < size(); n++) { if(p[n] >= 'A' && p[n] <= 'Z') p[n] += 0x20; } return *this; } inline auto string::qdowncase() -> string& { char* p = get(); for(u32 n = 0, quoted = 0; n < size(); n++) { if(p[n] == '\"') quoted ^= 1; if(!quoted && p[n] >= 'A' && p[n] <= 'Z') p[n] += 0x20; } return *this; } inline auto string::upcase() -> string& { char* p = get(); for(u32 n = 0; n < size(); n++) { if(p[n] >= 'a' && p[n] <= 'z') p[n] -= 0x20; } return *this; } inline auto string::qupcase() -> string& { char* p = get(); for(u32 n = 0, quoted = 0; n < size(); n++) { if(p[n] == '\"') quoted ^= 1; if(!quoted && p[n] >= 'a' && p[n] <= 'z') p[n] -= 0x20; } return *this; } inline auto string::transform(string_view from, string_view to) -> string& { if(from.size() != to.size() || from.size() == 0) return *this; //patterns must be the same length char* p = get(); for(u32 n = 0; n < size(); n++) { for(u32 s = 0; s < from.size(); s++) { if(p[n] == from[s]) { p[n] = to[s]; break; } } } return *this; } } ares-126/nall/string/core.hpp000066400000000000000000000045651415063341600162300ustar00rootroot00000000000000#pragma once //only allocators may access _data or modify _size and _capacity //all other functions must use data(), size(), capacity() #if defined(NALL_STRING_ALLOCATOR_ADAPTIVE) #include #elif defined(NALL_STRING_ALLOCATOR_COPY_ON_WRITE) #include #elif defined(NALL_STRING_ALLOCATOR_SMALL_STRING_OPTIMIZATION) #include #elif defined(NALL_STRING_ALLOCATOR_VECTOR) #include #endif namespace nall { inline auto string::operator[](u32 position) const -> const char& { #ifdef DEBUG struct out_of_bounds {}; if(position >= size() + 1) throw out_of_bounds{}; #endif return data()[position]; } inline auto string::operator()(u32 position, char fallback) const -> char { if(position >= size() + 1) return fallback; return data()[position]; } template inline auto string::assign(P&&... p) -> string& { resize(0); return append(forward

(p)...); } template inline auto string::prepend(const T& value, P&&... p) -> string& { if constexpr(sizeof...(p)) prepend(forward

(p)...); return _prepend(make_string(value)); } template inline auto string::prepend(const nall::string_format& value, P&&... p) -> string& { if constexpr(sizeof...(p)) prepend(forward

(p)...); return format(value); } template inline auto string::_prepend(const stringify& source) -> string& { resize(source.size() + size()); memory::move(get() + source.size(), get(), size() - source.size()); memory::copy(get(), source.data(), source.size()); return *this; } template inline auto string::append(const T& value, P&&... p) -> string& { _append(make_string(value)); if constexpr(sizeof...(p) > 0) append(forward

(p)...); return *this; } template inline auto string::append(const nall::string_format& value, P&&... p) -> string& { format(value); if constexpr(sizeof...(p)) append(forward

(p)...); return *this; } template inline auto string::_append(const stringify& source) -> string& { resize(size() + source.size()); memory::copy(get() + size() - source.size(), source.data(), source.size()); return *this; } inline auto string::length() const -> u32 { return strlen(data()); } } ares-126/nall/string/eval/000077500000000000000000000000001415063341600155045ustar00rootroot00000000000000ares-126/nall/string/eval/evaluator.hpp000066400000000000000000000131631415063341600202230ustar00rootroot00000000000000#pragma once namespace nall::Eval { inline auto evaluateExpression(Node* node) -> string { #define p(n) evaluateExpression(node->link[n]) switch(node->type) { case Node::Type::Null: return "Null"; case Node::Type::Literal: return {"Literal:", node->literal}; case Node::Type::Function: return {"Function(0:", p(0), ", 1:", p(1), ")"}; case Node::Type::Subscript: return {"Subscript(0:", p(0), ", 1:", p(1), ")"}; case Node::Type::Member: return {"Member(0:", p(0), ", 1:", p(1), ")"}; case Node::Type::SuffixIncrement: return {"SuffixIncrement(0:", p(0), ")"}; case Node::Type::SuffixDecrement: return {"SuffixDecrement(0:", p(0), ")"}; case Node::Type::Reference: return {"Reference(0:", p(0), ")"}; case Node::Type::Dereference: return {"Dereference(0:", p(0), ")"}; case Node::Type::BitwiseNot: return {"Complement(0:", p(0), ")"}; case Node::Type::PrefixIncrement: return {"PrefixIncrement(0:", p(0), ")"}; case Node::Type::PrefixDecrement: return {"PrefixDecrement(0:", p(0), ")"}; case Node::Type::Add: return {"Add(0:", p(0), ", 1:", p(1), ")"}; case Node::Type::Multiply: return {"Multiply(0:", p(0), ", 1:", p(1), ")"}; case Node::Type::Concatenate: return {"Concatenate(0:", p(0), ", ", p(1), ")"}; case Node::Type::Coalesce: return {"Coalesce(0:", p(0), ", ", p(1), ")"}; case Node::Type::Condition: return {"Condition(0:", p(0), ", ", p(1), ", ", p(2), ")"}; case Node::Type::Assign: return {"Assign(0:", p(0), ", ", p(1), ")"}; case Node::Type::Separator: { string result = "Separator("; for(auto& link : node->link) { result.append(evaluateExpression(link), ", "); } return result.trimRight(", ", 1L).append(")"); } } #undef p throw "invalid operator"; } inline auto evaluateInteger(Node* node) -> s64 { if(node->type == Node::Type::Literal) return toInteger(node->literal); #define p(n) evaluateInteger(node->link[n]) switch(node->type) { case Node::Type::SuffixIncrement: return p(0); case Node::Type::SuffixDecrement: return p(0); case Node::Type::LogicalNot: return !p(0); case Node::Type::BitwiseNot: return ~p(0); case Node::Type::Positive: return +p(0); case Node::Type::Negative: return -p(0); case Node::Type::PrefixIncrement: return p(0) + 1; case Node::Type::PrefixDecrement: return p(0) - 1; case Node::Type::Multiply: return p(0) * p(1); case Node::Type::Divide: return p(0) / p(1); case Node::Type::Modulo: return p(0) % p(1); case Node::Type::Add: return p(0) + p(1); case Node::Type::Subtract: return p(0) - p(1); case Node::Type::ShiftLeft: return p(0) << p(1); case Node::Type::ShiftRight: return p(0) >> p(1); case Node::Type::BitwiseAnd: return p(0) & p(1); case Node::Type::BitwiseOr: return p(0) | p(1); case Node::Type::BitwiseXor: return p(0) ^ p(1); case Node::Type::Equal: return p(0) == p(1); case Node::Type::NotEqual: return p(0) != p(1); case Node::Type::LessThanEqual: return p(0) <= p(1); case Node::Type::GreaterThanEqual: return p(0) >= p(1); case Node::Type::LessThan: return p(0) < p(1); case Node::Type::GreaterThan: return p(0) > p(1); case Node::Type::LogicalAnd: return p(0) && p(1); case Node::Type::LogicalOr: return p(0) || p(1); case Node::Type::Condition: return p(0) ? p(1) : p(2); case Node::Type::Assign: return p(1); case Node::Type::AssignMultiply: return p(0) * p(1); case Node::Type::AssignDivide: return p(0) / p(1); case Node::Type::AssignModulo: return p(0) % p(1); case Node::Type::AssignAdd: return p(0) + p(1); case Node::Type::AssignSubtract: return p(0) - p(1); case Node::Type::AssignShiftLeft: return p(0) << p(1); case Node::Type::AssignShiftRight: return p(0) >> p(1); case Node::Type::AssignBitwiseAnd: return p(0) & p(1); case Node::Type::AssignBitwiseOr: return p(0) | p(1); case Node::Type::AssignBitwiseXor: return p(0) ^ p(1); } #undef p throw "invalid operator"; } inline auto integer(const string& expression) -> maybe { try { auto tree = new Node; const char* p = expression; parse(tree, p, 0); auto result = evaluateInteger(tree); delete tree; return result; } catch(const char*) { return nothing; } } inline auto evaluateReal(Node* node) -> f64 { if(node->type == Node::Type::Literal) return toReal(node->literal); #define p(n) evaluateReal(node->link[n]) switch(node->type) { case Node::Type::LogicalNot: return !p(0); case Node::Type::Positive: return +p(0); case Node::Type::Negative: return -p(0); case Node::Type::Multiply: return p(0) * p(1); case Node::Type::Divide: return p(0) / p(1); case Node::Type::Add: return p(0) + p(1); case Node::Type::Subtract: return p(0) - p(1); case Node::Type::Equal: return p(0) == p(1); case Node::Type::NotEqual: return p(0) != p(1); case Node::Type::LessThanEqual: return p(0) <= p(1); case Node::Type::GreaterThanEqual: return p(0) >= p(1); case Node::Type::LessThan: return p(0) < p(1); case Node::Type::GreaterThan: return p(0) > p(1); case Node::Type::LogicalAnd: return p(0) && p(1); case Node::Type::LogicalOr: return p(0) || p(1); case Node::Type::Condition: return p(0) ? p(1) : p(2); case Node::Type::Assign: return p(1); case Node::Type::AssignMultiply: return p(0) * p(1); case Node::Type::AssignDivide: return p(0) / p(1); case Node::Type::AssignAdd: return p(0) + p(1); case Node::Type::AssignSubtract: return p(0) - p(1); } #undef p throw "invalid operator"; } inline auto real(const string& expression) -> maybe { try { auto tree = new Node; const char* p = expression; parse(tree, p, 0); auto result = evaluateReal(tree); delete tree; return result; } catch(const char*) { return nothing; } } } ares-126/nall/string/eval/literal.hpp000066400000000000000000000051031415063341600176500ustar00rootroot00000000000000#pragma once namespace nall::Eval { inline auto isLiteral(const char*& s) -> bool { char n = s[0]; return (n >= 'A' && n <= 'Z') || (n >= 'a' && n <= 'z') || (n >= '0' && n <= '9') || (n == '%' || n == '$' || n == '_' || n == '.') || (n == '\'' || n == '\"'); } inline auto literalNumber(const char*& s) -> string { const char* p = s; //binary if(p[0] == '%' || (p[0] == '0' && p[1] == 'b')) { u32 prefix = 1 + (p[0] == '0'); p += prefix; while(p[0] == '\'' || p[0] == '0' || p[0] == '1') p++; if(p - s <= prefix) throw "invalid binary literal"; string result = slice(s, 0, p - s); s = p; return result; } //octal if(p[0] == '0' && p[1] == 'o') { u32 prefix = 1 + (p[0] == '0'); p += prefix; while(p[0] == '\'' || (p[0] >= '0' && p[0] <= '7')) p++; if(p - s <= prefix) throw "invalid octal literal"; string result = slice(s, 0, p - s); s = p; return result; } //hex if(p[0] == '$' || (p[0] == '0' && p[1] == 'x')) { u32 prefix = 1 + (p[0] == '0'); p += prefix; while(p[0] == '\'' || (p[0] >= '0' && p[0] <= '9') || (p[0] >= 'A' && p[0] <= 'F') || (p[0] >= 'a' && p[0] <= 'f')) p++; if(p - s <= prefix) throw "invalid hex literal"; string result = slice(s, 0, p - s); s = p; return result; } //decimal while(p[0] == '\'' || (p[0] >= '0' && p[0] <= '9')) p++; if(p[0] != '.') { string result = slice(s, 0, p - s); s = p; return result; } //floating-point p++; while(p[0] == '\'' || (p[0] >= '0' && p[0] <= '9')) p++; string result = slice(s, 0, p - s); s = p; return result; } inline auto literalString(const char*& s) -> string { const char* p = s; char escape = *p++; while(p[0] && p[0] != escape) { if(p[0] == '\\') p++; p++; } if(*p++ != escape) throw "unclosed string literal"; string result = slice(s, 0, p - s); s = p; return result; } inline auto literalVariable(const char*& s) -> string { const char* p = s; while(p[0] == '_' || p[0] == '.' || (p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z') || (p[0] >= '0' && p[0] <= '9')) p++; string result = slice(s, 0, p - s); s = p; return result; } inline auto literal(const char*& s) -> string { const char* p = s; if(p[0] >= '0' && p[0] <= '9') return literalNumber(s); if(p[0] == '%' || p[0] == '$') return literalNumber(s); if(p[0] == '\'' || p[0] == '\"') return literalString(s); if(p[0] == '_' || p[0] == '.' || (p[0] >= 'A' && p[0] <= 'Z') || (p[0] >= 'a' && p[0] <= 'z')) return literalVariable(s); throw "invalid literal"; } } ares-126/nall/string/eval/node.hpp000066400000000000000000000020621415063341600171420ustar00rootroot00000000000000#pragma once namespace nall::Eval { struct Node { enum class Type : u32 { Null, Literal, Function, Subscript, Member, SuffixIncrement, SuffixDecrement, Reference, Dereference, LogicalNot, BitwiseNot, Positive, Negative, PrefixIncrement, PrefixDecrement, Multiply, Divide, Modulo, Add, Subtract, RotateLeft, RotateRight, ShiftLeft, ShiftRight, BitwiseAnd, BitwiseOr, BitwiseXor, Concatenate, Equal, NotEqual, LessThanEqual, GreaterThanEqual, LessThan, GreaterThan, LogicalAnd, LogicalOr, Coalesce, Condition, Assign, Create, //all assignment operators have the same precedence AssignMultiply, AssignDivide, AssignModulo, AssignAdd, AssignSubtract, AssignRotateLeft, AssignRotateRight, AssignShiftLeft, AssignShiftRight, AssignBitwiseAnd, AssignBitwiseOr, AssignBitwiseXor, AssignConcatenate, Separator, }; Type type; string literal; vector link; Node() : type(Type::Null) {} Node(Type type) : type(type) {} ~Node() { for(auto& node : link) delete node; } }; } ares-126/nall/string/eval/parser.hpp000066400000000000000000000204731415063341600175170ustar00rootroot00000000000000#pragma once namespace nall::Eval { inline auto whitespace(char n) -> bool { return n == ' ' || n == '\t' || n == '\r' || n == '\n'; } //operator associativity and precedence: // right: a[] a() a.b a++ a-- // left: &a *a !a ~a +a -a ++a --a // left: a*b a/b a%b // left: a+b a-b // left: a<<>>b a<>b // left: a&b // left: a^b // left: a|b // left: a~b // left: a<=b a>=b ab // left: a==b a!=b // left: a&&b // left: a||b // right: a??b a?b:c // right: a=b a:=b a*=b a/=b a%=b a+=b a-=b a<<<=b a>>>=b a<<=b a>>=b a&=b a^=b a|=b a~=b // left: a,b //differences from C++17: // a&b, a^b, a|b precedence was elevated above comparison operators // a?b:c precedence was elevated above assignment operators // a<<>>b a<<<=b a>>>=b rotation operators were added // a~b a~=b concatenation operators were added // a??b coalesce operator was added inline auto parse(Node*& node, const char*& s, u32 depth) -> void { auto unaryPrefix = [&](Node::Type type, u32 seek, u32 depth) { auto parent = new Node(type); parse(parent->link(0) = new Node, s += seek, depth); node = parent; }; auto unarySuffix = [&](Node::Type type, u32 seek, u32 depth) { auto parent = new Node(type); parent->link(0) = node; parse(parent, s += seek, depth); node = parent; }; auto binary = [&](Node::Type type, u32 seek, u32 depth) { auto parent = new Node(type); parent->link(0) = node; parse(parent->link(1) = new Node, s += seek, depth); node = parent; }; auto ternary = [&](Node::Type type, u32 seek, u32 depth) { auto parent = new Node(type); parent->link(0) = node; parse(parent->link(1) = new Node, s += seek, depth); if(s[0] != ':') throw "mismatched ternary"; parse(parent->link(2) = new Node, s += seek, depth); node = parent; }; auto separator = [&](Node::Type type, u32 seek, u32 depth) { if(node->type != Node::Type::Separator) return binary(type, seek, depth); u32 n = node->link.size(); parse(node->link(n) = new Node, s += seek, depth); }; while(whitespace(s[0])) s++; if(!s[0]) return; if(s[0] == '(' && !node->link) { parse(node, s += 1, 1); if(*s++ != ')') throw "mismatched group"; } if(isLiteral(s)) { node->type = Node::Type::Literal; node->literal = literal(s); } #define p() (!node->literal && !node->link) while(true) { while(whitespace(s[0])) s++; if(!s[0]) return; if(depth >= 17) break; //left associativity if(s[0] == '(' && !p()) { binary(Node::Type::Function, 1, 1); if(*s++ != ')') throw "mismatched function"; continue; } if(s[0] == '[') { binary(Node::Type::Subscript, 1, 1); if(*s++ != ']') throw "mismatched subscript"; continue; } if(s[0] == '.') { binary(Node::Type::Member, 1, 17); continue; } if(s[0] == '+' && s[1] == '+' && !p()) { unarySuffix(Node::Type::SuffixIncrement, 2, 17); continue; } if(s[0] == '-' && s[1] == '-' && !p()) { unarySuffix(Node::Type::SuffixDecrement, 2, 17); continue; } if(s[0] == '&' && p()) { unaryPrefix(Node::Type::Reference, 1, 16); continue; } if(s[0] == '*' && p()) { unaryPrefix(Node::Type::Dereference, 1, 16); continue; } if(s[0] == '!' && p()) { unaryPrefix(Node::Type::LogicalNot, 1, 16); continue; } if(s[0] == '~' && p()) { unaryPrefix(Node::Type::BitwiseNot, 1, 16); continue; } if(s[0] == '+' && s[1] != '+' && p()) { unaryPrefix(Node::Type::Positive, 1, 16); continue; } if(s[0] == '-' && s[1] != '-' && p()) { unaryPrefix(Node::Type::Negative, 1, 16); continue; } if(s[0] == '+' && s[1] == '+' && p()) { unaryPrefix(Node::Type::PrefixIncrement, 2, 16); continue; } if(s[0] == '-' && s[1] == '-' && p()) { unaryPrefix(Node::Type::PrefixDecrement, 2, 16); continue; } if(depth >= 16) break; //right associativity if(depth >= 15) break; //left associativity if(s[0] == '*' && s[1] != '=') { binary(Node::Type::Multiply, 1, 15); continue; } if(s[0] == '/' && s[1] != '=') { binary(Node::Type::Divide, 1, 15); continue; } if(s[0] == '%' && s[1] != '=') { binary(Node::Type::Modulo, 1, 15); continue; } if(depth >= 14) break; //left associativity if(s[0] == '+' && s[1] != '=') { binary(Node::Type::Add, 1, 14); continue; } if(s[0] == '-' && s[1] != '=') { binary(Node::Type::Subtract, 1, 14); continue; } if(depth >= 13) break; //left associativity if(s[0] == '<' && s[1] == '<' && s[2] == '<' && s[3] != '=') { binary(Node::Type::RotateLeft, 3, 13); continue; } if(s[0] == '>' && s[1] == '>' && s[2] == '>' && s[3] != '=') { binary(Node::Type::RotateRight, 3, 13); continue; } if(s[0] == '<' && s[1] == '<' && s[2] != '=') { binary(Node::Type::ShiftLeft, 2, 13); continue; } if(s[0] == '>' && s[1] == '>' && s[2] != '=') { binary(Node::Type::ShiftRight, 2, 13); continue; } if(depth >= 12) break; //left associativity if(s[0] == '&' && s[1] != '&' && s[1] != '=') { binary(Node::Type::BitwiseAnd, 1, 12); continue; } if(depth >= 11) break; //left associativity if(s[0] == '^' && s[1] != '^' && s[1] != '=') { binary(Node::Type::BitwiseXor, 1, 11); continue; } if(depth >= 10) break; //left associativity if(s[0] == '|' && s[1] != '|' && s[1] != '=') { binary(Node::Type::BitwiseOr, 1, 10); continue; } if(depth >= 9) break; //left associativity if(s[0] == '~' && s[1] != '=') { binary(Node::Type::Concatenate, 1, 9); continue; } if(depth >= 8) break; //left associativity if(s[0] == '<' && s[1] == '=') { binary(Node::Type::LessThanEqual, 2, 8); continue; } if(s[0] == '>' && s[1] == '=') { binary(Node::Type::GreaterThanEqual, 2, 8); continue; } if(s[0] == '<') { binary(Node::Type::LessThan, 1, 8); continue; } if(s[0] == '>') { binary(Node::Type::GreaterThan, 1, 8); continue; } if(depth >= 7) break; //left associativity if(s[0] == '=' && s[1] == '=') { binary(Node::Type::Equal, 2, 7); continue; } if(s[0] == '!' && s[1] == '=') { binary(Node::Type::NotEqual, 2, 7); continue; } if(depth >= 6) break; //left associativity if(s[0] == '&' && s[1] == '&') { binary(Node::Type::LogicalAnd, 2, 6); continue; } if(depth >= 5) break; //left associativity if(s[0] == '|' && s[1] == '|') { binary(Node::Type::LogicalOr, 2, 5); continue; } if(s[0] == '?' && s[1] == '?') { binary(Node::Type::Coalesce, 2, 4); continue; } if(s[0] == '?' && s[1] != '?') { ternary(Node::Type::Condition, 1, 4); continue; } if(depth >= 4) break; //right associativity if(s[0] == '=') { binary(Node::Type::Assign, 1, 3); continue; } if(s[0] == ':' && s[1] == '=') { binary(Node::Type::Create, 2, 3); continue; } if(s[0] == '*' && s[1] == '=') { binary(Node::Type::AssignMultiply, 2, 3); continue; } if(s[0] == '/' && s[1] == '=') { binary(Node::Type::AssignDivide, 2, 3); continue; } if(s[0] == '%' && s[1] == '=') { binary(Node::Type::AssignModulo, 2, 3); continue; } if(s[0] == '+' && s[1] == '=') { binary(Node::Type::AssignAdd, 2, 3); continue; } if(s[0] == '-' && s[1] == '=') { binary(Node::Type::AssignSubtract, 2, 3); continue; } if(s[0] == '<' && s[1] == '<' && s[2] == '<' && s[3] == '=') { binary(Node::Type::AssignRotateLeft, 4, 3); continue; } if(s[0] == '>' && s[1] == '>' && s[2] == '>' && s[3] == '=') { binary(Node::Type::AssignRotateRight, 4, 3); continue; } if(s[0] == '<' && s[1] == '<' && s[2] == '=') { binary(Node::Type::AssignShiftLeft, 3, 3); continue; } if(s[0] == '>' && s[1] == '>' && s[2] == '=') { binary(Node::Type::AssignShiftRight, 3, 3); continue; } if(s[0] == '&' && s[1] == '=') { binary(Node::Type::AssignBitwiseAnd, 2, 3); continue; } if(s[0] == '^' && s[1] == '=') { binary(Node::Type::AssignBitwiseXor, 2, 3); continue; } if(s[0] == '|' && s[1] == '=') { binary(Node::Type::AssignBitwiseOr, 2, 3); continue; } if(s[0] == '~' && s[1] == '=') { binary(Node::Type::AssignConcatenate, 2, 3); continue; } if(depth >= 3) break; //right associativity if(depth >= 2) break; //left associativity if(s[0] == ',') { separator(Node::Type::Separator, 1, 2); continue; } if(depth >= 1 && (s[0] == ')' || s[0] == ']')) break; while(whitespace(s[0])) s++; if(!s[0]) break; throw "unrecognized terminal"; } #undef p } inline auto parse(const string& expression) -> Node* { auto result = new Node; const char* p = expression; parse(result, p, 0); return result; } } ares-126/nall/string/find.hpp000066400000000000000000000047231415063341600162140ustar00rootroot00000000000000#pragma once namespace nall { inline auto string::contains(string_view characters) const -> maybe { for(u32 x : range(size())) { for(char y : characters) { if(operator[](x) == y) return x; } } return nothing; } template inline auto string::_find(s32 offset, string_view source) const -> maybe { if(source.size() == 0) return nothing; auto p = data(); for(u32 n = offset, quoted = 0; n < size();) { if(Quoted) { if(p[n] == '\"') { quoted ^= 1; n++; continue; } if(quoted) { n++; continue; } } if(_compare(p + n, size() - n, source.data(), source.size())) { n++; continue; } return n - offset; } return nothing; } inline auto string::find(string_view source) const -> maybe { return _find<0, 0>(0, source); } inline auto string::ifind(string_view source) const -> maybe { return _find<1, 0>(0, source); } inline auto string::qfind(string_view source) const -> maybe { return _find<0, 1>(0, source); } inline auto string::iqfind(string_view source) const -> maybe { return _find<1, 1>(0, source); } inline auto string::findFrom(s32 offset, string_view source) const -> maybe { return _find<0, 0>(offset, source); } inline auto string::ifindFrom(s32 offset, string_view source) const -> maybe { return _find<1, 0>(offset, source); } inline auto string::findNext(s32 offset, string_view source) const -> maybe { if(source.size() == 0) return nothing; for(s32 n = offset + 1; n < size(); n++) { if(memory::compare(data() + n, size() - n, source.data(), source.size()) == 0) return n; } return nothing; } inline auto string::ifindNext(s32 offset, string_view source) const -> maybe { if(source.size() == 0) return nothing; for(s32 n = offset + 1; n < size(); n++) { if(memory::icompare(data() + n, size() - n, source.data(), source.size()) == 0) return n; } return nothing; } inline auto string::findPrevious(s32 offset, string_view source) const -> maybe { if(source.size() == 0) return nothing; for(s32 n = offset - 1; n >= 0; n--) { if(memory::compare(data() + n, size() - n, source.data(), source.size()) == 0) return n; } return nothing; } inline auto string::ifindPrevious(s32 offset, string_view source) const -> maybe { if(source.size() == 0) return nothing; for(s32 n = offset - 1; n >= 0; n--) { if(memory::icompare(data() + n, size() - n, source.data(), source.size()) == 0) return n; } return nothing; } } ares-126/nall/string/format.hpp000066400000000000000000000100741415063341600165600ustar00rootroot00000000000000#pragma once namespace nall { //nall::format is a vector of parameters that can be applied to a string //each {#} token will be replaced with its appropriate format parameter inline auto string::format(const nall::string_format& params) -> type& { auto size = (s32)this->size(); auto data = memory::allocate(size); memory::copy(data, this->data(), size); s32 x = 0; while(x < size - 2) { //2 = minimum tag length if(data[x] != '{') { x++; continue; } s32 y = x + 1; while(y < size - 1) { //-1 avoids going out of bounds on test after this loop if(data[y] != '}') { y++; continue; } break; } if(data[y++] != '}') { x++; continue; } static auto isNumeric = [](char* s, char* e) -> bool { if(s == e) return false; //ignore empty tags: {} while(s < e) { if(*s >= '0' && *s <= '9') { s++; continue; } return false; } return true; }; if(!isNumeric(&data[x + 1], &data[y - 1])) { x++; continue; } u32 index = toNatural(&data[x + 1]); if(index >= params.size()) { x++; continue; } u32 sourceSize = y - x; u32 targetSize = params[index].size(); u32 remaining = size - x; if(sourceSize > targetSize) { u32 difference = sourceSize - targetSize; memory::move(&data[x], &data[x + difference], remaining - difference); size -= difference; } else if(targetSize > sourceSize) { u32 difference = targetSize - sourceSize; data = (char*)realloc(data, size + difference); size += difference; memory::move(&data[x + difference], &data[x], remaining); } memory::copy(&data[x], params[index].data(), targetSize); x += targetSize; } resize(size); memory::copy(get(), data, size); memory::free(data); return *this; } template inline auto string_format::append(const T& value, P&&... p) -> string_format& { vector::append(value); return append(forward

(p)...); } inline auto string_format::append() -> string_format& { return *this; } template inline auto print(P&&... p) -> void { string s{forward

(p)...}; fwrite(s.data(), 1, s.size(), stdout); fflush(stdout); } template inline auto print(FILE* fp, P&&... p) -> void { string s{forward

(p)...}; fwrite(s.data(), 1, s.size(), fp); if(fp == stdout || fp == stderr) fflush(fp); } template inline auto pad(const T& value, long precision, char padchar) -> string { string buffer{value}; if(precision) buffer.size(precision, padchar); return buffer; } template inline auto hex(T value, long precision, char padchar) -> string { string buffer; buffer.resize(sizeof(T) * 2); char* p = buffer.get(); //create a mask to clear the upper four bits after shifting right in case T is a signed type T mask = 1; mask <<= sizeof(T) * 8 - 4; mask -= 1; u32 size = 0; do { u32 n = value & 15; p[size++] = n < 10 ? '0' + n : 'a' + n - 10; value = value >> 4 & mask; } while(value); buffer.resize(size); buffer.reverse(); if(precision) buffer.size(precision, padchar); return buffer; } template inline auto octal(T value, long precision, char padchar) -> string { string buffer; buffer.resize(sizeof(T) * 3); char* p = buffer.get(); //create a mask to clear the upper three bits T mask = 1; mask <<= sizeof(T) * 8 - 3; mask -= 1; u32 size = 0; do { p[size++] = '0' + (value & 7); value = value >> 3 & mask; } while(value); buffer.resize(size); buffer.reverse(); if(precision) buffer.size(precision, padchar); return buffer; } template inline auto binary(T value, long precision, char padchar) -> string { string buffer; buffer.resize(sizeof(T) * 8); char* p = buffer.get(); //create a mask to clear the upper one bit T mask = 1; mask <<= sizeof(T) * 8 - 1; mask -= 1; u32 size = 0; do { p[size++] = '0' + (value & 1); value = value >> 1 & mask; } while(value); buffer.resize(size); buffer.reverse(); if(precision) buffer.size(precision, padchar); return buffer; } } ares-126/nall/string/markup/000077500000000000000000000000001415063341600160545ustar00rootroot00000000000000ares-126/nall/string/markup/bml.hpp000066400000000000000000000127451415063341600173500ustar00rootroot00000000000000#pragma once //BML v1.0 parser //revision 0.04 namespace nall::BML { //metadata is used to store nesting level struct ManagedNode; using SharedNode = shared_pointer; struct ManagedNode : Markup::ManagedNode { protected: //test to verify if a valid character for a node name auto valid(char p) const -> bool { //A-Z, a-z, 0-9, -. return p - 'A' < 26u || p - 'a' < 26u || p - '0' < 10u || p - '-' < 2u; } //determine indentation level, without incrementing pointer auto readDepth(const char* p) -> u32 { u32 depth = 0; while(p[depth] == '\t' || p[depth] == ' ') depth++; return depth; } //determine indentation level auto parseDepth(const char*& p) -> u32 { u32 depth = readDepth(p); p += depth; return depth; } //read name auto parseName(const char*& p) -> void { u32 length = 0; while(valid(p[length])) length++; if(length == 0) throw "Invalid node name"; _name = slice(p, 0, length); p += length; } auto parseData(const char*& p, string_view spacing) -> void { if(*p == '=' && *(p + 1) == '\"') { u32 length = 2; while(p[length] && p[length] != '\n' && p[length] != '\"') length++; if(p[length] != '\"') throw "Unescaped value"; _value = {slice(p, 2, length - 2), "\n"}; p += length + 1; } else if(*p == '=') { u32 length = 1; while(p[length] && p[length] != '\n' && p[length] != '\"' && p[length] != ' ') length++; if(p[length] == '\"') throw "Illegal character in value"; _value = {slice(p, 1, length - 1), "\n"}; p += length; } else if(*p == ':') { u32 length = 1; while(p[length] && p[length] != '\n') length++; _value = {slice(p, 1, length - 1).trimLeft(spacing, 1L), "\n"}; p += length; } } //read all attributes for a node auto parseAttributes(const char*& p, string_view spacing) -> void { while(*p && *p != '\n') { if(*p != ' ') throw "Invalid node name"; while(*p == ' ') p++; //skip excess spaces if(*(p + 0) == '/' && *(p + 1) == '/') break; //skip comments SharedNode node(new ManagedNode); u32 length = 0; while(valid(p[length])) length++; if(length == 0) throw "Invalid attribute name"; node->_name = slice(p, 0, length); node->parseData(p += length, spacing); node->_value.trimRight("\n", 1L); _children.append(node); } } //read a node and all of its child nodes auto parseNode(const vector& text, u32& y, string_view spacing) -> void { const char* p = text[y++]; _metadata = parseDepth(p); parseName(p); parseData(p, spacing); parseAttributes(p, spacing); while(y < text.size()) { u32 depth = readDepth(text[y]); if(depth <= _metadata) break; if(text[y][depth] == ':') { _value.append(slice(text[y++], depth + 1).trimLeft(spacing, 1L), "\n"); continue; } SharedNode node(new ManagedNode); node->parseNode(text, y, spacing); _children.append(node); } _value.trimRight("\n", 1L); } //read top-level nodes auto parse(string document, string_view spacing) -> void { //in order to simplify the parsing logic; we do an initial pass to normalize the data //the below code will turn '\r\n' into '\n'; skip empty lines; and skip comment lines char* p = document.get(), *output = p; while(*p) { char* origin = p; bool empty = true; while(*p) { //scan for first non-whitespace character. if it's a line feed or comment; skip the line if(p[0] == ' ' || p[0] == '\t') { p++; continue; } empty = p[0] == '\r' || p[0] == '\n' || (p[0] == '/' && p[1] == '/'); break; } while(*p) { if(p[0] == '\r') p[0] = '\n'; //turns '\r\n' into '\n\n' (second '\n' will be skipped) if(*p++ == '\n') break; //include '\n' in the output to be copied } if(empty) continue; memory::move(output, origin, p - origin); output += p - origin; } document.resize(document.size() - (p - output)).trimRight("\n"); if(document.size() == 0) return; //empty document auto text = document.split("\n"); u32 y = 0; while(y < text.size()) { SharedNode node(new ManagedNode); node->parseNode(text, y, spacing); if(node->_metadata > 0) throw "Root nodes cannot be indented"; _children.append(node); } } friend auto unserialize(const string&, string_view) -> Markup::Node; }; inline auto unserialize(const string& markup, string_view spacing = {}) -> Markup::Node { SharedNode node(new ManagedNode); try { node->parse(markup, spacing); } catch(const char* error) { node.reset(); } return (Markup::SharedNode&)node; } inline auto serialize(const Markup::Node& node, string_view spacing = {}, u32 depth = 0) -> string { if(!node.name()) { string result; for(auto leaf : node) { result.append(serialize(leaf, spacing, depth)); } return result; } string padding; padding.resize(depth * 2); padding.fill(' '); vector lines; if(auto value = node.value()) lines = value.split("\n"); string result; result.append(padding); result.append(node.name()); if(lines.size() == 1) result.append(":", spacing, lines[0]); result.append("\n"); if(lines.size() > 1) { padding.append(" "); for(auto& line : lines) { result.append(padding, ":", spacing, line, "\n"); } } for(auto leaf : node) { result.append(serialize(leaf, spacing, depth + 1)); } return result; } } ares-126/nall/string/markup/find.hpp000066400000000000000000000102201415063341600175000ustar00rootroot00000000000000#pragma once namespace nall::Markup { inline auto ManagedNode::_evaluate(string query) const -> bool { if(!query) return true; for(auto& rule : query.split(",")) { enum class Comparator : u32 { ID, EQ, NE, LT, LE, GT, GE, NF }; auto comparator = Comparator::ID; if(rule.match("*!=*")) comparator = Comparator::NE; else if(rule.match("*<=*")) comparator = Comparator::LE; else if(rule.match("*>=*")) comparator = Comparator::GE; else if(rule.match ("*=*")) comparator = Comparator::EQ; else if(rule.match ("*<*")) comparator = Comparator::LT; else if(rule.match ("*>*")) comparator = Comparator::GT; else if(rule.match ("!*")) comparator = Comparator::NF; if(comparator == Comparator::ID) { if(_find(rule).size()) continue; return false; } if(comparator == Comparator::NF) { rule.trimLeft("!", 1L); if(_find(rule).size()) return false; continue; } vector side; switch(comparator) { case Comparator::EQ: side = rule.split ("=", 1L); break; case Comparator::NE: side = rule.split("!=", 1L); break; case Comparator::LT: side = rule.split ("<", 1L); break; case Comparator::LE: side = rule.split("<=", 1L); break; case Comparator::GT: side = rule.split (">", 1L); break; case Comparator::GE: side = rule.split(">=", 1L); break; } string data = string{_value}.strip(); if(side(0)) { auto result = _find(side(0)); if(result.size() == 0) return false; data = result[0].text(); //strips whitespace so rules can match without requiring it } switch(comparator) { case Comparator::EQ: if(data.match(side(1)) == true) continue; break; case Comparator::NE: if(data.match(side(1)) == false) continue; break; case Comparator::LT: if(data.natural() < side(1).natural()) continue; break; case Comparator::LE: if(data.natural() <= side(1).natural()) continue; break; case Comparator::GT: if(data.natural() > side(1).natural()) continue; break; case Comparator::GE: if(data.natural() >= side(1).natural()) continue; break; } return false; } return true; } inline auto ManagedNode::_find(const string& query) const -> vector { vector result; auto path = query.split("/"); string name = path.take(0), rule; u32 lo = 0u, hi = ~0u; if(name.match("*[*]")) { auto p = name.trimRight("]", 1L).split("[", 1L); name = p(0); if(p(1).find("-")) { p = p(1).split("-", 1L); lo = !p(0) ? 0u : p(0).natural(); hi = !p(1) ? ~0u : p(1).natural(); } else { lo = hi = p(1).natural(); } } if(name.match("*(*)")) { auto p = name.trimRight(")", 1L).split("(", 1L); name = p(0); rule = p(1); } u32 position = 0; for(auto& node : _children) { if(!node->_name.match(name)) continue; if(!node->_evaluate(rule)) continue; bool inrange = position >= lo && position <= hi; position++; if(!inrange) continue; if(path.size() == 0) { result.append(node); } else for(auto& item : node->_find(path.merge("/"))) { result.append(item); } } return result; } //operator[](string) inline auto ManagedNode::_lookup(const string& path) const -> Node { auto result = _find(path); return result ? result[0] : Node{}; /*//faster, but cannot search if(auto position = path.find("/")) { auto name = slice(path, 0, *position); for(auto& node : _children) { if(name == node->_name) { return node->_lookup(slice(path, *position + 1)); } } } else for(auto& node : _children) { if(path == node->_name) return node; } return {}; */ } inline auto ManagedNode::_create(const string& path) -> Node { if(auto position = path.find("/")) { auto name = slice(path, 0, *position); for(auto& node : _children) { if(name == node->_name) { return node->_create(slice(path, *position + 1)); } } _children.append(new ManagedNode(name)); return _children.right()->_create(slice(path, *position + 1)); } for(auto& node : _children) { if(path == node->_name) return node; } _children.append(new ManagedNode(path)); return _children.right(); } } ares-126/nall/string/markup/node.hpp000066400000000000000000000131731415063341600175170ustar00rootroot00000000000000#pragma once namespace nall::Markup { struct Node; struct ManagedNode; using SharedNode = shared_pointer; struct ManagedNode { ManagedNode() = default; ManagedNode(const string& name) : _name(name) {} ManagedNode(const string& name, const string& value) : _name(name), _value(value) {} auto clone() const -> SharedNode { SharedNode clone{new ManagedNode(_name, _value)}; for(auto& child : _children) { clone->_children.append(child->clone()); } return clone; } auto copy(SharedNode source) -> void { _name = source->_name; _value = source->_value; _metadata = source->_metadata; _children.reset(); for(auto child : source->_children) { _children.append(child->clone()); } } protected: string _name; string _value; uintptr _metadata = 0; vector _children; auto _evaluate(string query) const -> bool; auto _find(const string& query) const -> vector; auto _lookup(const string& path) const -> Node; auto _create(const string& path) -> Node; friend class Node; }; struct Node { Node() : shared(new ManagedNode) {} Node(const SharedNode& source) : shared(source ? source : new ManagedNode) {} Node(const nall::string& name) : shared(new ManagedNode(name)) {} Node(const nall::string& name, const nall::string& value) : shared(new ManagedNode(name, value)) {} auto unique() const -> bool { return shared.unique(); } auto clone() const -> Node { return shared->clone(); } auto copy(Node source) -> void { return shared->copy(source.shared); } explicit operator bool() const { return shared->_name || shared->_children; } auto name() const -> nall::string { return shared->_name; } auto value() const -> nall::string { return shared->_value; } auto value(nall::string& target) const -> bool { if(shared) target = string(); return (bool)shared; } auto value(bool& target) const -> bool { if(shared) target = boolean(); return (bool)shared; } auto value(s32& target) const -> bool { if(shared) target = integer(); return (bool)shared; } auto value(u32& target) const -> bool { if(shared) target = natural(); return (bool)shared; } auto value(f64& target) const -> bool { if(shared) target = real(); return (bool)shared; } auto text() const -> nall::string { return value().strip(); } auto string() const -> nall::string { return value().strip(); } auto boolean() const -> bool { return text() == "true"; } auto integer() const -> s64 { return text().integer(); } auto natural() const -> u64 { return text().natural(); } auto real() const -> f64 { return text().real(); } auto text(const nall::string& fallback) const -> nall::string { return bool(*this) ? text() : fallback; } auto string(const nall::string& fallback) const -> nall::string { return bool(*this) ? string() : fallback; } auto boolean(bool fallback) const -> bool { return bool(*this) ? boolean() : fallback; } auto integer(s64 fallback) const -> s64 { return bool(*this) ? integer() : fallback; } auto natural(u64 fallback) const -> u64 { return bool(*this) ? natural() : fallback; } auto real(f64 fallback) const -> f64 { return bool(*this) ? real() : fallback; } auto setName(const nall::string& name = "") -> Node& { shared->_name = name; return *this; } auto setValue(const nall::string& value = "") -> Node& { shared->_value = value; return *this; } auto reset() -> void { shared->_children.reset(); } auto size() const -> u32 { return shared->_children.size(); } auto prepend(const Node& node) -> void { shared->_children.prepend(node.shared); } auto append(const Node& node) -> void { shared->_children.append(node.shared); } auto remove(const Node& node) -> bool { for(auto n : range(size())) { if(node.shared == shared->_children[n]) { return shared->_children.remove(n), true; } } return false; } auto insert(u32 position, const Node& node) -> bool { if(position > size()) return false; //used > instead of >= to allow indexed-equivalent of append() return shared->_children.insert(position, node.shared), true; } auto remove(u32 position) -> bool { if(position >= size()) return false; return shared->_children.remove(position), true; } auto swap(u32 x, u32 y) -> bool { if(x >= size() || y >= size()) return false; return std::swap(shared->_children[x], shared->_children[y]), true; } auto sort(function comparator = [](auto x, auto y) { return nall::string::compare(x.shared->_name, y.shared->_name) < 0; }) -> void { nall::sort(shared->_children.data(), shared->_children.size(), [&](auto x, auto y) { return comparator(x, y); //this call converts SharedNode objects to Node objects }); } auto operator[](s32 position) -> Node { if(position >= size()) return {}; return shared->_children[position]; } auto operator[](const nall::string& path) const -> Node { return shared->_lookup(path); } auto operator()(const nall::string& path) -> Node { return shared->_create(path); } auto find(const nall::string& query) const -> vector { return shared->_find(query); } struct iterator { auto operator*() -> Node { return {source.shared->_children[position]}; } auto operator!=(const iterator& source) const -> bool { return position != source.position; } auto operator++() -> iterator& { return position++, *this; } iterator(const Node& source, u32 position) : source(source), position(position) {} private: const Node& source; u32 position; }; auto begin() const -> iterator { return iterator(*this, 0); } auto end() const -> iterator { return iterator(*this, size()); } protected: SharedNode shared; }; } ares-126/nall/string/markup/xml.hpp000066400000000000000000000141221415063341600173650ustar00rootroot00000000000000#pragma once //XML v1.0 subset parser //revision 0.04 namespace nall::XML { //metadata: // 0 = element // 1 = attribute struct ManagedNode; using SharedNode = shared_pointer; struct ManagedNode : Markup::ManagedNode { protected: auto escape() const -> string { string result = _value; result.replace("&", "&"); result.replace("<", "<"); result.replace(">", ">"); if(_metadata == 1) { result.replace("\'", "'"); result.replace("\"", """); } return result; } auto isName(char c) const -> bool { if(c >= 'A' && c <= 'Z') return true; if(c >= 'a' && c <= 'z') return true; if(c >= '0' && c <= '9') return true; if(c == '.' || c == '_') return true; if(c == '?') return true; return false; } auto isWhitespace(char c) const -> bool { if(c == ' ' || c == '\t') return true; if(c == '\r' || c == '\n') return true; return false; } //copy part of string from source document into target string; decode markup while copying auto copy(string& target, const char* source, u32 length) -> void { target.reserve(length + 1); #if defined(NALL_XML_LITERAL) memory::copy(target.pointer(), source, length); target[length] = 0; return; #endif char* output = target.get(); while(length) { if(*source == '&') { if(!memory::compare(source, "<", 4)) { *output++ = '<'; source += 4; length -= 4; continue; } if(!memory::compare(source, ">", 4)) { *output++ = '>'; source += 4; length -= 4; continue; } if(!memory::compare(source, "&", 5)) { *output++ = '&'; source += 5; length -= 5; continue; } if(!memory::compare(source, "'", 6)) { *output++ = '\''; source += 6; length -= 6; continue; } if(!memory::compare(source, """, 6)) { *output++ = '\"'; source += 6; length -= 6; continue; } } if(_metadata == 0 && source[0] == '<' && source[1] == '!') { //comment if(!memory::compare(source, "", 3)) source++, length--; source += 3, length -= 3; continue; } //CDATA if(!memory::compare(source, "", 3)) *output++ = *source++, length--; source += 3, length -= 3; continue; } } *output++ = *source++, length--; } *output = 0; } auto parseExpression(const char*& p) -> bool { if(*(p + 1) != '!') return false; //comment if(!memory::compare(p, "", 3)) p++; if(!*p) throw "unclosed comment"; p += 3; return true; } //CDATA if(!memory::compare(p, "", 3)) p++; if(!*p) throw "unclosed CDATA"; p += 3; return true; } //DOCTYPE if(!memory::compare(p, "') counter--; } while(counter); return true; } return false; } //returns true if tag closes itself (); false if not () auto parseHead(const char*& p) -> bool { //parse name const char* nameStart = ++p; //skip '<' while(isName(*p)) p++; const char* nameEnd = p; copy(_name, nameStart, nameEnd - nameStart); if(!_name) throw "missing element name"; //parse attributes while(*p) { while(isWhitespace(*p)) p++; if(!*p) throw "unclosed attribute"; if(*p == '?' || *p == '/' || *p == '>') break; //parse attribute name SharedNode attribute(new ManagedNode); attribute->_metadata = 1; const char* nameStart = p; while(isName(*p)) p++; const char* nameEnd = p; copy(attribute->_name, nameStart, nameEnd - nameStart); if(!attribute->_name) throw "missing attribute name"; //parse attribute data if(*p++ != '=') throw "missing attribute value"; char terminal = *p++; if(terminal != '\'' && terminal != '\"') throw "attribute value not quoted"; const char* dataStart = p; while(*p && *p != terminal) p++; if(!*p) throw "missing attribute data terminal"; const char* dataEnd = p++; //skip closing terminal copy(attribute->_value, dataStart, dataEnd - dataStart); _children.append(attribute); } //parse closure if(*p == '?' && *(p + 1) == '>') { p += 2; return true; } if(*p == '/' && *(p + 1) == '>') { p += 2; return true; } if(*p == '>') { p += 1; return false; } throw "invalid element tag"; } //parse element and all of its child elements auto parseElement(const char*& p) -> void { SharedNode node(new ManagedNode); if(node->parseHead(p) == false) node->parse(p); _children.append(node); } //return true if matches this node's name auto parseClosureElement(const char*& p) -> bool { if(p[0] != '<' || p[1] != '/') return false; p += 2; const char* nameStart = p; while(*p && *p != '>') p++; if(*p != '>') throw "unclosed closure element"; const char* nameEnd = p++; if(memory::compare(_name.data(), nameStart, nameEnd - nameStart)) throw "closure element name mismatch"; return true; } //parse contents of an element auto parse(const char*& p) -> void { const char* dataStart = p; const char* dataEnd = p; while(*p) { while(*p && *p != '<') p++; if(!*p) break; dataEnd = p; if(parseClosureElement(p) == true) break; if(parseExpression(p) == true) continue; parseElement(p); } copy(_value, dataStart, dataEnd - dataStart); } friend auto unserialize(const string&) -> Markup::SharedNode; }; inline auto unserialize(const string& markup) -> Markup::SharedNode { auto node = new ManagedNode; try { const char* p = markup; node->parse(p); } catch(const char* error) { delete node; node = nullptr; } return node; } } ares-126/nall/string/match.hpp000066400000000000000000000036001415063341600163610ustar00rootroot00000000000000#pragma once namespace nall { //todo: these functions are not binary-safe inline auto string::match(string_view source) const -> bool { const char* s = data(); const char* p = source.data(); const char* cp = nullptr; const char* mp = nullptr; while(*s && *p != '*') { if(*p != '?' && *s != *p) return false; p++, s++; } while(*s) { if(*p == '*') { if(!*++p) return true; mp = p, cp = s + 1; } else if(*p == '?' || *p == *s) { p++, s++; } else { p = mp, s = cp++; } } while(*p == '*') p++; return !*p; } inline auto string::imatch(string_view source) const -> bool { static auto chrlower = [](char c) -> char { return (c >= 'A' && c <= 'Z') ? c + ('a' - 'A') : c; }; const char* s = data(); const char* p = source.data(); const char* cp = nullptr; const char* mp = nullptr; while(*s && *p != '*') { if(*p != '?' && chrlower(*s) != chrlower(*p)) return false; p++, s++; } while(*s) { if(*p == '*') { if(!*++p) return true; mp = p, cp = s + 1; } else if(*p == '?' || chrlower(*p) == chrlower(*s)) { p++, s++; } else { p = mp, s = cp++; } } while(*p == '*') p++; return !*p; } inline auto tokenize(const char* s, const char* p) -> bool { while(*s) { if(*p == '*') { while(*s) if(tokenize(s++, p + 1)) return true; return !*++p; } if(*s++ != *p++) return false; } while(*p == '*') p++; return !*p; } inline auto tokenize(vector& list, const char* s, const char* p) -> bool { while(*s) { if(*p == '*') { const char* b = s; while(*s) { if(tokenize(list, s++, p + 1)) { list.prepend(slice(b, 0, --s - b)); return true; } } list.prepend(b); return !*++p; } if(*s++ != *p++) return false; } while(*p == '*') { list.prepend(s); p++; } return !*p; } } ares-126/nall/string/pascal.hpp000066400000000000000000000041661415063341600165400ustar00rootroot00000000000000#pragma once namespace nall { struct string_pascal { using type = string_pascal; string_pascal(const char* text = nullptr) { if(text && *text) { u32 size = strlen(text); _data = memory::allocate(sizeof(u32) + size + 1); ((u32*)_data)[0] = size; memory::copy(_data + sizeof(u32), text, size); _data[sizeof(u32) + size] = 0; } } string_pascal(const string& text) { if(text.size()) { _data = memory::allocate(sizeof(u32) + text.size() + 1); ((u32*)_data)[0] = text.size(); memory::copy(_data + sizeof(u32), text.data(), text.size()); _data[sizeof(u32) + text.size()] = 0; } } string_pascal(const string_pascal& source) { operator=(source); } string_pascal(string_pascal&& source) { operator=(move(source)); } ~string_pascal() { if(_data) memory::free(_data); } explicit operator bool() const { return _data; } operator const char*() const { return _data ? _data + sizeof(u32) : nullptr; } operator string() const { return _data ? string{_data + sizeof(u32)} : ""; } auto operator=(const string_pascal& source) -> type& { if(this == &source) return *this; if(_data) { memory::free(_data); _data = nullptr; } if(source._data) { u32 size = source.size(); _data = memory::allocate(sizeof(u32) + size); memory::copy(_data, source._data, sizeof(u32) + size); } return *this; } auto operator=(string_pascal&& source) -> type& { if(this == &source) return *this; if(_data) memory::free(_data); _data = source._data; source._data = nullptr; return *this; } auto operator==(string_view source) const -> bool { return size() == source.size() && memory::compare(data(), source.data(), size()) == 0; } auto operator!=(string_view source) const -> bool { return size() != source.size() || memory::compare(data(), source.data(), size()) != 0; } auto data() const -> char* { if(!_data) return nullptr; return _data + sizeof(u32); } auto size() const -> u32 { if(!_data) return 0; return ((u32*)_data)[0]; } protected: char* _data = nullptr; }; } ares-126/nall/string/replace.hpp000066400000000000000000000065331415063341600167100ustar00rootroot00000000000000#pragma once namespace nall { template inline auto string::_replace(string_view from, string_view to, long limit) -> string& { if(limit <= 0 || from.size() == 0) return *this; s32 size = this->size(); s32 matches = 0; s32 quoted = 0; //count matches first, so that we only need to reallocate memory once //(recording matches would also require memory allocation, so this is not done) { const char* p = data(); for(s32 n = 0; n <= size - (s32)from.size();) { if(Quoted) { if(p[n] == '\"') { quoted ^= 1; n++; continue; } if(quoted) { n++; continue; } } if(_compare(p + n, size - n, from.data(), from.size())) { n++; continue; } if(++matches >= limit) break; n += from.size(); } } if(matches == 0) return *this; //in-place overwrite if(to.size() == from.size()) { char* p = get(); for(s32 n = 0, remaining = matches, quoted = 0; n <= size - (s32)from.size();) { if(Quoted) { if(p[n] == '\"') { quoted ^= 1; n++; continue; } if(quoted) { n++; continue; } } if(_compare(p + n, size - n, from.data(), from.size())) { n++; continue; } memory::copy(p + n, to.data(), to.size()); if(!--remaining) break; n += from.size(); } } //left-to-right shrink else if(to.size() < from.size()) { char* p = get(); s32 offset = 0; s32 base = 0; for(s32 n = 0, remaining = matches, quoted = 0; n <= size - (s32)from.size();) { if(Quoted) { if(p[n] == '\"') { quoted ^= 1; n++; continue; } if(quoted) { n++; continue; } } if(_compare(p + n, size - n, from.data(), from.size())) { n++; continue; } if(base) memory::move(p + offset, p + base, n - base); memory::copy(p + offset + (n - base), to.data(), to.size()); offset += (n - base) + to.size(); n += from.size(); base = n; if(!--remaining) break; } memory::move(p + offset, p + base, size - base); resize(size - matches * (from.size() - to.size())); } //right-to-left expand else if(to.size() > from.size()) { resize(size + matches * (to.size() - from.size())); char* p = get(); s32 offset = this->size(); s32 base = size; for(s32 n = size, remaining = matches; n >= (s32)from.size();) { //quoted reused from parent scope since we are iterating backward if(Quoted) { if(p[n] == '\"') { quoted ^= 1; n--; continue; } if(quoted) { n--; continue; } } if(_compare(p + n - from.size(), size - n + from.size(), from.data(), from.size())) { n--; continue; } memory::move(p + offset - (base - n), p + base - (base - n), base - n); memory::copy(p + offset - (base - n) - to.size(), to.data(), to.size()); offset -= (base - n) + to.size(); if(!--remaining) break; n -= from.size(); base = n; } } return *this; } inline auto string::replace(string_view from, string_view to, long limit) -> string& { return _replace<0, 0>(from, to, limit); } inline auto string::ireplace(string_view from, string_view to, long limit) -> string& { return _replace<1, 0>(from, to, limit); } inline auto string::qreplace(string_view from, string_view to, long limit) -> string& { return _replace<0, 1>(from, to, limit); } inline auto string::iqreplace(string_view from, string_view to, long limit) -> string& { return _replace<1, 1>(from, to, limit); } }; ares-126/nall/string/split.hpp000066400000000000000000000031471415063341600164260ustar00rootroot00000000000000#pragma once namespace nall { template inline auto vector::_split(string_view source, string_view find, long limit) -> type& { reset(); if(limit <= 0 || find.size() == 0) return *this; const char* p = source.data(); s32 size = source.size(); s32 base = 0; s32 matches = 0; for(s32 n = 0, quoted = 0; n <= size - (s32)find.size();) { if constexpr(Quoted) { if(quoted && p[n] == '\\') { n += 2; continue; } if(p[n] == '\'' && quoted != 2) { quoted ^= 1; n++; continue; } if(p[n] == '\"' && quoted != 1) { quoted ^= 2; n++; continue; } if(quoted) { n++; continue; } } if(string::_compare(p + n, size - n, find.data(), find.size())) { n++; continue; } if(matches >= limit) break; string& s = operator()(matches); s.resize(n - base); memory::copy(s.get(), p + base, n - base); n += find.size(); base = n; matches++; } string& s = operator()(matches); s.resize(size - base); memory::copy(s.get(), p + base, size - base); return *this; } inline auto string::split(string_view on, long limit) const -> vector { return vector()._split<0, 0>(*this, on, limit); } inline auto string::isplit(string_view on, long limit) const -> vector { return vector()._split<1, 0>(*this, on, limit); } inline auto string::qsplit(string_view on, long limit) const -> vector { return vector()._split<0, 1>(*this, on, limit); } inline auto string::iqsplit(string_view on, long limit) const -> vector { return vector()._split<1, 1>(*this, on, limit); } } ares-126/nall/string/transform/000077500000000000000000000000001415063341600165705ustar00rootroot00000000000000ares-126/nall/string/transform/cml.hpp000066400000000000000000000066141415063341600200630ustar00rootroot00000000000000#pragma once /* CSS Markup Language (CML) v1.0 parser * revision 0.02 */ #include namespace nall { struct CML { auto& setPath(const string& pathname) { settings.path = pathname; return *this; } auto& setReader(const function& reader) { settings.reader = reader; return *this; } auto parse(const string& filename) -> string; auto parse(const string& filedata, const string& pathname) -> string; private: struct Settings { string path; function reader; } settings; struct State { string output; } state; struct Variable { string name; string value; }; vector variables; bool inMedia = false; bool inMediaNode = false; auto parseDocument(const string& filedata, const string& pathname, u32 depth) -> bool; }; inline auto CML::parse(const string& filename) -> string { if(!settings.path) settings.path = Location::path(filename); string document = settings.reader ? settings.reader(filename) : string::read(filename); parseDocument(document, settings.path, 0); return state.output; } inline auto CML::parse(const string& filedata, const string& pathname) -> string { settings.path = pathname; parseDocument(filedata, settings.path, 0); return state.output; } inline auto CML::parseDocument(const string& filedata, const string& pathname, u32 depth) -> bool { if(depth >= 100) return false; //prevent infinite recursion auto vendorAppend = [&](const string& name, const string& value) { state.output.append(" -moz-", name, ": ", value, ";\n"); state.output.append(" -webkit-", name, ": ", value, ";\n"); }; for(auto& block : filedata.split("\n\n")) { auto lines = block.stripRight().split("\n"); auto name = lines.takeFirst(); if(name.beginsWith("include ")) { name.trimLeft("include ", 1L); string filename{pathname, name}; string document = settings.reader ? settings.reader(filename) : string::read(filename); parseDocument(document, Location::path(filename), depth + 1); continue; } if(name == "variables") { for(auto& line : lines) { auto data = line.split(":", 1L).strip(); variables.append({data(0), data(1)}); } continue; } state.output.append(name, " {\n"); inMedia = name.beginsWith("@media"); for(auto& line : lines) { if(inMedia && !line.find(": ")) { if(inMediaNode) state.output.append(" }\n"); state.output.append(line, " {\n"); inMediaNode = true; continue; } auto data = line.split(":", 1L).strip(); auto name = data(0), value = data(1); while(auto offset = value.find("var(")) { bool found = false; if(auto length = value.findFrom(*offset, ")")) { string name = slice(value, *offset + 4, *length - 4); for(auto& variable : variables) { if(variable.name == name) { value = {slice(value, 0, *offset), variable.value, slice(value, *offset + *length + 1)}; found = true; break; } } } if(!found) break; } state.output.append(inMedia ? " " : " ", name, ": ", value, ";\n"); if(name == "box-sizing") vendorAppend(name, value); } if(inMediaNode) { state.output.append(" }\n"); inMediaNode = false; } state.output.append("}\n\n"); } return true; } } ares-126/nall/string/transform/dml.hpp000066400000000000000000000265201415063341600200620ustar00rootroot00000000000000#pragma once /* Document Markup Language (DML) v1.0 parser * revision 0.06 */ #include namespace nall { struct DML { auto content() const -> string { return state.output; } auto& setAllowHTML(bool allowHTML) { settings.allowHTML = allowHTML; return *this; } auto& setHost(const string& hostname) { settings.host = hostname; return *this; } auto& setPath(const string& pathname) { settings.path = pathname; return *this; } auto& setReader(const function& reader) { settings.reader = reader; return *this; } auto parse(const string& filedata, const string& pathname) -> string; auto parse(const string& filename) -> string; auto attribute(const string& name) const -> string; private: struct Settings { bool allowHTML = true; string host = "localhost"; string path; function reader; } settings; struct State { string output; } state; struct Attribute { string name; string value; }; vector attributes; auto parseDocument(const string& filedata, const string& pathname, u32 depth) -> bool; auto parseBlock(string& block, const string& pathname, u32 depth) -> bool; auto count(const string& text, char value) -> u32; auto address(string text) -> string; auto escape(const string& text) -> string; auto anchor(const string& text) -> string; auto markup(const string& text) -> string; }; inline auto DML::attribute(const string& name) const -> string { for(auto& attribute : attributes) { if(attribute.name == name) return attribute.value; } return {}; } inline auto DML::parse(const string& filedata, const string& pathname) -> string { state = {}; settings.path = pathname; parseDocument(filedata, settings.path, 0); return state.output; } inline auto DML::parse(const string& filename) -> string { state = {}; if(!settings.path) settings.path = Location::path(filename); string document = settings.reader ? settings.reader(filename) : string::read(filename); parseDocument(document, settings.path, 0); return state.output; } inline auto DML::parseDocument(const string& filedata, const string& pathname, u32 depth) -> bool { if(depth >= 100) return false; //attempt to prevent infinite recursion with reasonable limit auto blocks = filedata.split("\n\n"); for(auto& block : blocks) parseBlock(block, pathname, depth); return true; } inline auto DML::parseBlock(string& block, const string& pathname, u32 depth) -> bool { if(!block.stripRight()) return true; auto lines = block.split("\n"); //include if(block.beginsWith("")) { string filename{pathname, block.trim("", 1L).strip()}; string document = settings.reader ? settings.reader(filename) : string::read(filename); parseDocument(document, Location::path(filename), depth + 1); } //attribute else if(block.beginsWith("? ")) { for(auto n : range(lines.size())) { if(!lines[n].beginsWith("? ")) continue; auto part = lines[n].trimLeft("? ", 1L).split(":", 1L); if(part.size() != 2) continue; auto name = part[0].strip(); auto value = part[1].strip(); attributes.append({name, value}); } } //html else if(block.beginsWith("\n") && settings.allowHTML) { for(auto n : range(lines.size())) { if(n == 0 || !lines[n].beginsWith(" ")) continue; state.output.append(lines[n].trimLeft(" ", 1L), "\n"); } } //header else if(auto depth = count(block, '#')) { auto content = slice(lines.takeLeft(), depth + 1); auto data = markup(content); auto name = anchor(content); if(depth <= 5) { state.output.append("", data); for(auto& line : lines) { if(count(line, '#') != depth) continue; state.output.append("", slice(line, depth + 1), ""); } state.output.append("\n"); } } //navigation else if(count(block, '-')) { state.output.append("

\n"); } //list else if(count(block, '*')) { u32 level = 0; for(auto& line : lines) { if(auto depth = count(line, '*')) { while(level < depth) level++, state.output.append("
    \n"); while(level > depth) level--, state.output.append("
\n"); auto data = markup(slice(line, depth + 1)); state.output.append("
  • ", data, "
  • \n"); } } while(level--) state.output.append("\n"); } //quote else if(count(block, '>')) { u32 level = 0; for(auto& line : lines) { if(auto depth = count(line, '>')) { while(level < depth) level++, state.output.append("
    \n"); while(level > depth) level--, state.output.append("
    \n"); auto data = markup(slice(line, depth + 1)); state.output.append(data, "\n"); } } while(level--) state.output.append("\n"); } //code else if(block.beginsWith(" ")) { state.output.append("
    ");
        for(auto& line : lines) {
          if(!line.beginsWith("  ")) continue;
          state.output.append(escape(line.trimLeft("  ", 1L)), "\n");
        }
        state.output.trimRight("\n", 1L).append("
    \n"); } //divider else if(block.equals("---")) { state.output.append("
    \n"); } //paragraph else { auto content = markup(block); if(content.beginsWith("")) { state.output.append(content, "\n"); } else { state.output.append("

    ", content, "

    \n"); } } return true; } inline auto DML::count(const string& text, char value) -> u32 { for(u32 n = 0; n < text.size(); n++) { if(text[n] != value) { if(text[n] == ' ') return n; break; } } return 0; } // . => domain // ./* => domain/* // ../subdomain => subdomain.domain // ../subdomain/* => subdomain.domain/* inline auto DML::address(string s) -> string { if(s.beginsWith("../")) { s.trimLeft("../", 1L); if(auto p = s.find("/")) { return {"//", s.slice(0, *p), ".", settings.host, s.slice(*p)}; } else { return {"//", s, ".", settings.host}; } } if(s.beginsWith("./")) { s.trimLeft(".", 1L); return {"//", settings.host, s}; } if(s == ".") { return {"//", settings.host}; } return s; } inline auto DML::escape(const string& text) -> string { string output; for(auto c : text) { if(c == '&') { output.append("&"); continue; } if(c == '<') { output.append("<"); continue; } if(c == '>') { output.append(">"); continue; } if(c == '"') { output.append("""); continue; } output.append(c); } return output; } inline auto DML::anchor(const string& text) -> string { string output; for(char c : text) { if(c >= 'a' && c <= 'z') { output.append(c); continue; } if(c >= 'A' && c <= 'Z') { output.append(char(c + 0x20)); continue; } if(!output.endsWith("-")) output.append('-'); } return output.trim("-", "-"); } inline auto DML::markup(const string& s) -> string { string t; boolean strong; boolean emphasis; boolean insertion; boolean deletion; boolean code; maybe link; maybe image; for(u32 n = 0; n < s.size();) { char a = s[n]; char b = s[n + 1]; if(!link && !image) { if(a == '*' && b == '*') { t.append(strong.flip() ? "" : ""); n += 2; continue; } if(a == '/' && b == '/') { t.append(emphasis.flip() ? "" : ""); n += 2; continue; } if(a == '_' && b == '_') { t.append(insertion.flip() ? "" : ""); n += 2; continue; } if(a == '~' && b == '~') { t.append(deletion.flip() ? "" : ""); n += 2; continue; } if(a == '|' && b == '|') { t.append(code.flip() ? "" : ""); n += 2; continue; } if(a =='\\' && b =='\\') { t.append("
    "); n += 2; continue; } if(a == '[' && b == '[') { n += 2; link = n; continue; } if(a == '{' && b == '{') { n += 2; image = n; continue; } } if(link && !image && a == ']' && b == ']') { auto list = slice(s, link(), n - link()).split("::", 1L); string uri = address(list.last()); string name = list.size() == 2 ? list.first() : uri.split("//", 1L).last(); t.append("", escape(name), ""); n += 2; link = nothing; continue; } if(image && !link && a == '}' && b == '}') { auto side = slice(s, image(), n - image()).split("}{", 1L); auto list = side(0).split("::", 1L); string uri = address(list.last()); string name = list.size() == 2 ? list.first() : uri.split("//", 1L).last(); list = side(1).split("; "); boolean link, title, caption; string Class, width, height; for(auto p : list) { if(p == "link") { link = true; continue; } if(p == "title") { title = true; continue; } if(p == "caption") { caption = true; continue; } if(p.beginsWith("class:")) { p.trimLeft("class:", 1L); Class = p.strip(); continue; } if(p.beginsWith("width:")) { p.trimLeft("width:", 1L); width = p.strip(); continue; } if(p.beginsWith("height:")) { p.trimLeft("height:", 1L); height = p.strip(); continue; } } if(caption) { t.append("
    \n"); if(link) t.append(""); t.append("\"",\n"); if(link) t.append("\n"); t.append("
    ", escape(name), "
    \n"); t.append("
    "); } else { if(link) t.append(""); t.append("\"","); if(link) t.append(""); } n += 2; image = nothing; continue; } if(link || image) { n++; continue; } if(a =='\\') { t.append(b); n += 2; continue; } if(a == '&') { t.append("&"); n++; continue; } if(a == '<') { t.append("<"); n++; continue; } if(a == '>') { t.append(">"); n++; continue; } if(a == '"') { t.append("""); n++; continue; } t.append(a); n++; continue; } if(strong) t.append(""); if(emphasis) t.append(""); if(insertion) t.append(""); if(deletion) t.append(""); if(code) t.append(""); return t; } } ares-126/nall/string/trim.hpp000066400000000000000000000054421415063341600162460ustar00rootroot00000000000000#pragma once namespace nall { inline auto string::trim(string_view lhs, string_view rhs, long limit) -> string& { trimRight(rhs, limit); trimLeft(lhs, limit); return *this; } inline auto string::trimLeft(string_view lhs, long limit) -> string& { if(lhs.size() == 0) return *this; long matches = 0; while(matches < limit) { s32 offset = lhs.size() * matches; s32 length = (s32)size() - offset; if(length < (s32)lhs.size()) break; if(memory::compare(data() + offset, lhs.data(), lhs.size()) != 0) break; matches++; } if(matches) remove(0, lhs.size() * matches); return *this; } inline auto string::trimRight(string_view rhs, long limit) -> string& { if(rhs.size() == 0) return *this; long matches = 0; while(matches < limit) { s32 offset = (s32)size() - rhs.size() * (matches + 1); s32 length = (s32)size() - offset; if(offset < 0 || length < (s32)rhs.size()) break; if(memory::compare(data() + offset, rhs.data(), rhs.size()) != 0) break; matches++; } if(matches) resize(size() - rhs.size() * matches); return *this; } inline auto string::itrim(string_view lhs, string_view rhs, long limit) -> string& { itrimRight(rhs, limit); itrimLeft(lhs, limit); return *this; } inline auto string::itrimLeft(string_view lhs, long limit) -> string& { if(lhs.size() == 0) return *this; long matches = 0; while(matches < limit) { s32 offset = lhs.size() * matches; s32 length = (s32)size() - offset; if(length < (s32)lhs.size()) break; if(memory::icompare(data() + offset, lhs.data(), lhs.size()) != 0) break; matches++; } if(matches) remove(0, lhs.size() * matches); return *this; } inline auto string::itrimRight(string_view rhs, long limit) -> string& { if(rhs.size() == 0) return *this; long matches = 0; while(matches < limit) { s32 offset = (s32)size() - rhs.size() * (matches + 1); s32 length = (s32)size() - offset; if(offset < 0 || length < (s32)rhs.size()) break; if(memory::icompare(data() + offset, rhs.data(), rhs.size()) != 0) break; matches++; } if(matches) resize(size() - rhs.size() * matches); return *this; } inline auto string::strip() -> string& { stripRight(); stripLeft(); return *this; } inline auto string::stripLeft() -> string& { u32 length = 0; while(length < size()) { char input = operator[](length); if(input != ' ' && input != '\t' && input != '\r' && input != '\n') break; length++; } if(length) remove(0, length); return *this; } inline auto string::stripRight() -> string& { u32 length = 0; while(length < size()) { bool matched = false; char input = operator[](size() - length - 1); if(input != ' ' && input != '\t' && input != '\r' && input != '\n') break; length++; } if(length) resize(size() - length); return *this; } } ares-126/nall/string/utf8.hpp000066400000000000000000000020371415063341600161560ustar00rootroot00000000000000#pragma once namespace nall { //note: this function assumes the string contains valid UTF-8 characters //invalid characters will result in an incorrect result from this function //invalid case 1: byte 1 == 0b'01xxxxxx //invalid case 2: bytes 2-4 != 0b'10xxxxxx //invalid case 3: end of string without bytes 2-4 present inline auto characters(string_view self, s32 offset, s32 length) -> u32 { u32 characters = 0; if(offset < 0) offset = self.size() - abs(offset); if(offset >= 0 && offset < self.size()) { if(length < 0) length = self.size() - offset; if(length >= 0) { for(s32 index = offset; index < offset + length;) { auto byte = self.data()[index++]; if((byte & 0b111'00000) == 0b110'00000) index += 1; if((byte & 0b1111'0000) == 0b1110'0000) index += 2; if((byte & 0b11111'000) == 0b11110'000) index += 3; characters++; } } } return characters; } inline auto string::characters(s32 offset, s32 length) const -> u32 { return nall::characters(*this, offset, length); } } ares-126/nall/string/utility.hpp000066400000000000000000000111351415063341600167720ustar00rootroot00000000000000#pragma once namespace nall { inline auto string::read(string_view filename) -> string { #if !defined(_WIN32) FILE* fp = fopen(filename, "rb"); #else FILE* fp = _wfopen(utf16_t(filename), L"rb"); #endif string result; if(!fp) return result; fseek(fp, 0, SEEK_END); s32 filesize = ftell(fp); if(filesize < 0) return fclose(fp), result; rewind(fp); result.resize(filesize); (void)fread(result.get(), 1, filesize, fp); return fclose(fp), result; } inline auto string::repeat(string_view pattern, u32 times) -> string { string result; while(times--) result.append(pattern.data()); return result; } inline auto string::fill(char fill) -> string& { memory::fill(get(), size(), fill); return *this; } inline auto string::hash() const -> u32 { const char* p = data(); u32 length = size(); u32 result = 5381; while(length--) result = (result << 5) + result + *p++; return result; } inline auto string::remove(u32 offset, u32 length) -> string& { char* p = get(); length = min(length, size()); memory::move(p + offset, p + offset + length, size() - length); return resize(size() - length); } inline auto string::reverse() -> string& { char* p = get(); u32 length = size(); u32 pivot = length >> 1; for(s32 x = 0, y = length - 1; x < pivot && y >= 0; x++, y--) std::swap(p[x], p[y]); return *this; } //+length => insert/delete from start (right justify) //-length => insert/delete from end (left justify) inline auto string::size(s32 length, char fill) -> string& { u32 size = this->size(); if(size == length) return *this; bool right = length >= 0; length = abs(length); if(size < length) { //expand resize(length); char* p = get(); u32 displacement = length - size; if(right) memory::move(p + displacement, p, size); else p += size; while(displacement--) *p++ = fill; } else { //shrink char* p = get(); u32 displacement = size - length; if(right) memory::move(p, p + displacement, length); resize(length); } return *this; } inline auto slice(string_view self, s32 offset, s32 length) -> string { string result; if(offset < 0) offset = self.size() - abs(offset); if(offset >= 0 && offset < self.size()) { if(length < 0) length = self.size() - offset; if(length >= 0) { result.resize(length); memory::copy(result.get(), self.data() + offset, length); } } return result; } inline auto string::slice(s32 offset, s32 length) const -> string { return nall::slice(*this, offset, length); } template inline auto fromInteger(char* result, T value) -> char* { bool negative = value < 0; if(!negative) value = -value; //negate positive integers to support eg INT_MIN char buffer[1 + sizeof(T) * 3]; u32 size = 0; do { s32 n = value % 10; //-0 to -9 buffer[size++] = '0' - n; //'0' to '9' value /= 10; } while(value); if(negative) buffer[size++] = '-'; for(s32 x = size - 1, y = 0; x >= 0 && y < size; x--, y++) result[x] = buffer[y]; result[size] = 0; return result; } template inline auto fromNatural(char* result, T value) -> char* { char buffer[1 + sizeof(T) * 3]; u32 size = 0; do { u32 n = value % 10; buffer[size++] = '0' + n; value /= 10; } while(value); for(s32 x = size - 1, y = 0; x >= 0 && y < size; x--, y++) result[x] = buffer[y]; result[size] = 0; return result; } template inline auto fromHex(char* result, T value) -> char* { char buffer[1 + sizeof(T) * 2]; u32 size = 0; do { u32 n = value & 15; if(n <= 9) { buffer[size++] = '0' + n; } else { buffer[size++] = 'a' + n - 10; } value >>= 4; } while(value); for(s32 x = size - 1, y = 0; x >= 0 && y < size; x--, y++) result[x] = buffer[y]; result[size] = 0; return result; } //using sprintf is certainly not the most ideal method to convert //a double to a string ... but attempting to parse a double by //hand, digit-by-digit, results in subtle rounding errors. template inline auto fromReal(char* result, T value) -> u32 { char buffer[256]; #ifdef _WIN32 //Windows C-runtime does not support long double via sprintf() sprintf(buffer, "%f", (double)value); #else sprintf(buffer, "%Lf", (long double)value); #endif //remove excess 0's in fraction (2.500000 -> 2.5) for(char* p = buffer; *p; p++) { if(*p == '.') { char* p = buffer + strlen(buffer) - 1; while(*p == '0') { if(*(p - 1) != '.') *p = 0; //... but not for eg 1.0 -> 1. p--; } break; } } u32 length = strlen(buffer); if(result) strcpy(result, buffer); return length + 1; } } ares-126/nall/string/vector.hpp000066400000000000000000000026321415063341600165730ustar00rootroot00000000000000#pragma once namespace nall { template inline auto vector::append(const string& data, P&&... p) -> type& { vector_base::append(data); append(forward

    (p)...); return *this; } inline auto vector::append() -> type& { return *this; } inline auto vector::isort() -> type& { sort([](const string& x, const string& y) { return memory::icompare(x.data(), x.size(), y.data(), y.size()) < 0; }); return *this; } inline auto vector::find(string_view source) const -> maybe { for(u32 n = 0; n < size(); n++) { if(operator[](n).equals(source)) return n; } return {}; } inline auto vector::ifind(string_view source) const -> maybe { for(u32 n = 0; n < size(); n++) { if(operator[](n).iequals(source)) return n; } return {}; } inline auto vector::match(string_view pattern) const -> vector { vector result; for(u32 n = 0; n < size(); n++) { if(operator[](n).match(pattern)) result.append(operator[](n)); } return result; } inline auto vector::merge(string_view separator) const -> string { string output; for(u32 n = 0; n < size(); n++) { output.append(operator[](n)); if(n < size() - 1) output.append(separator.data()); } return output; } inline auto vector::strip() -> type& { for(u32 n = 0; n < size(); n++) { operator[](n).strip(); } return *this; } } ares-126/nall/string/view.hpp000066400000000000000000000035731415063341600162500ustar00rootroot00000000000000#pragma once namespace nall { inline string_view::string_view() { _string = nullptr; _data = ""; _size = 0; } inline string_view::string_view(const string_view& source) { if(this == &source) return; _string = nullptr; _data = source._data; _size = source._size; } inline string_view::string_view(string_view&& source) { if(this == &source) return; _string = source._string; _data = source._data; _size = source._size; source._string = nullptr; } inline string_view::string_view(const char* data) { _string = nullptr; _data = data; _size = -1; //defer length calculation, as it is often unnecessary } //todo: this collides with eg: {"value: ", (u32)0} inline string_view::string_view(const char* data, u32 size) { _string = nullptr; _data = data; _size = size; } inline string_view::string_view(const string& source) { _string = nullptr; _data = source.data(); _size = source.size(); } template inline string_view::string_view(P&&... p) { _string = new string{forward

    (p)...}; _data = _string->data(); _size = _string->size(); } inline string_view::~string_view() { if(_string) delete _string; } inline auto string_view::operator=(const string_view& source) -> type& { if(this == &source) return *this; _string = nullptr; _data = source._data; _size = source._size; return *this; } inline auto string_view::operator=(string_view&& source) -> type& { if(this == &source) return *this; _string = source._string; _data = source._data; _size = source._size; source._string = nullptr; return *this; } inline string_view::operator bool() const { return _size > 0; } inline string_view::operator const char*() const { return _data; } inline auto string_view::data() const -> const char* { return _data; } inline auto string_view::size() const -> u32 { if(_size < 0) _size = strlen(_data); return _size; } } ares-126/nall/suffix-array.hpp000066400000000000000000000226401415063341600164040ustar00rootroot00000000000000#pragma once #include #include #include #include #include namespace nall { /* input: data = "acaacatat" 0 "acaacatat" 1 "caacatat" 2 "aacatat" 3 "acatat" 4 "catat" 5 "atat" 6 "tat" 7 "at" 8 "t" 9 "" suffix_array: suffixes = [9,2,0,3,7,5,1,4,8,6] => input + suffixes: 9 "" 2 "aacatat" 0 "acaacatat" 3 "acatat" 7 "at" 5 "atat" 1 "caacatat" 4 "catat" 8 "t" 6 "tat" [auxiliary data structures to represent information lost from suffix trees] suffix_array_invert: inverted = [2,6,1,3,7,5,9,4,8,0] => input + suffixes[inverted]: 2 "acaacatat" 6 "caacatat" 1 "aacatat" 3 "acatat" 7 "catat" 5 "atat" 9 "tat" 4 "at" 8 "t" 0 "" suffix_array_phi: phi = [2,5,9,0,1,7,8,3,4,0] suffix_array_lcp: prefixes = [0,0,1,3,1,2,0,2,0,1] => lcp[n] == lcp(n, n-1) "" 0 "aacatat" 0 "acaacatat" 1 "a" "acatat" 3 "aca" "at" 1 "a" "atat" 2 "at" "caacatat" 0 "catat" 2 "ca" "t" 0 "tat" 1 "t" suffix_array_plcp: plcp = [1,0,0,3,2,2,1,1,0,0] suffix_array_lrcp: llcp = [0,0,0,3,0,2,0,2,0,0] => llcp[m] == lcp(l, m) rlcp = [0,1,1,1,0,0,0,0,0,0] => rlcp[m] == lcp(m, r) suffix_array_lpf: lengths = [0,0,1,3,2,1,0,2,1,0] offsets = [0,0,0,0,1,3,4,5,6,2] "acaacatat" (0,-) "caacatat" (0,-) "aacatat" (1,0) at 0, match "a" "acatat" (3,0) at 0, match "aca" "catat" (2,1) at 1, match "ca" "atat" (1,3) at 3, match "a" "tat" (0,-) "at" (2,5) at 5, match "at" "t" (1,6) at 6, match "t" "" (0,-) */ // suffix array via induced sorting // O(n) inline auto suffix_array(array_view input) -> vector { return induced_sort(input); } // inverse // O(n) inline auto suffix_array_invert(array_view sa) -> vector { vector isa; isa.reallocate(sa.size()); for(s32 i : range(sa.size())) isa[sa[i]] = i; return isa; } // auxiliary data structure for plcp and lpf computation // O(n) inline auto suffix_array_phi(array_view sa) -> vector { vector phi; phi.reallocate(sa.size()); phi[sa[0]] = 0; for(s32 i : range(1, sa.size())) phi[sa[i]] = sa[i - 1]; return phi; } // longest common prefix: lcp(l, r) // O(n) inline auto suffix_array_lcp(s32 l, s32 r, array_view sa, array_view input) -> s32 { s32 i = sa[l], j = sa[r], k = 0, size = input.size(); while(i + k < size && j + k < size && input[i + k] == input[j + k]) k++; return k; } // longest common prefix: lcp(i, j, k) // O(n) inline auto suffix_array_lcp(s32 i, s32 j, s32 k, array_view input) -> s32 { s32 size = input.size(); while(i + k < size && j + k < size && input[i + k] == input[j + k]) k++; return k; } // longest common prefix: lcp[n] == lcp(n, n-1) // O(n) inline auto suffix_array_lcp(array_view sa, array_view isa, array_view input) -> vector { s32 k = 0, size = input.size(); vector lcp; lcp.reallocate(size + 1); for(s32 i : range(size)) { if(isa[i] == size) { k = 0; continue; } //the next substring is empty; ignore it s32 j = sa[isa[i] + 1]; while(i + k < size && j + k < size && input[i + k] == input[j + k]) k++; lcp[1 + isa[i]] = k; if(k) k--; } lcp[0] = 0; return lcp; } // longest common prefix (from permuted longest common prefix) // O(n) inline auto suffix_array_lcp(array_view plcp, array_view sa) -> vector { vector lcp; lcp.reallocate(plcp.size()); for(s32 i : range(plcp.size())) lcp[i] = plcp[sa[i]]; return lcp; } // permuted longest common prefix // O(n) inline auto suffix_array_plcp(array_view phi, array_view input) -> vector { vector plcp; plcp.reallocate(phi.size()); s32 k = 0, size = input.size(); for(s32 i : range(size)) { s32 j = phi[i]; while(i + k < size && j + k < size && input[i + k] == input[j + k]) k++; plcp[i] = k; if(k) k--; } return plcp; } // permuted longest common prefix (from longest common prefix) // O(n) inline auto suffix_array_plcp(array_view lcp, array_view sa) -> vector { vector plcp; plcp.reallocate(lcp.size()); for(s32 i : range(lcp.size())) plcp[sa[i]] = lcp[i]; return plcp; } // longest common prefixes - left + right // llcp[m] == lcp(l, m) // rlcp[m] == lcp(m, r) // O(n) // requires: lcp -or- plcp+sa inline auto suffix_array_lrcp(vector& llcp, vector& rlcp, array_view lcp, array_view plcp, array_view sa, array_view input) -> void { s32 size = input.size(); llcp.reset(), llcp.reallocate(size + 1); rlcp.reset(), rlcp.reallocate(size + 1); function recurse = [&](s32 l, s32 r) -> s32 { if(l >= r - 1) { if(l >= size) return 0; if(lcp) return lcp[l]; return plcp[sa[l]]; } s32 m = l + r >> 1; llcp[m - 1] = recurse(l, m); rlcp[m - 1] = recurse(m, r); return min(llcp[m - 1], rlcp[m - 1]); }; recurse(1, size + 1); llcp[0] = 0; rlcp[0] = 0; } // longest previous factor // O(n) // optional: plcp inline auto suffix_array_lpf(vector& lengths, vector& offsets, array_view phi, array_view plcp, array_view input) -> void { s32 k = 0, size = input.size(); lengths.reset(), lengths.resize(size + 1, -1); offsets.reset(), offsets.resize(size + 1, -1); function recurse = [&](s32 i, s32 j, s32 k) -> void { if(lengths[i] < 0) { lengths[i] = k; offsets[i] = j; } else if(lengths[i] < k) { if(offsets[i] > j) { recurse(offsets[i], j, lengths[i]); } else { recurse(j, offsets[i], lengths[i]); } lengths[i] = k; offsets[i] = j; } else { if(offsets[i] > j) { recurse(offsets[i], j, k); } else { recurse(j, offsets[i], k); } } }; for(s32 i : range(size)) { s32 j = phi[i]; if(plcp) k = plcp[i]; else while(i + k < size && j + k < size && input[i + k] == input[j + k]) k++; if(i > j) { recurse(i, j, k); } else { recurse(j, i, k); } if(k) k--; } lengths[0] = 0; offsets[0] = 0; } // O(n log m) inline auto suffix_array_find(s32& length, s32& offset, array_view sa, array_view input, array_view match) -> bool { length = 0, offset = 0; s32 l = 0, r = input.size(); while(l < r - 1) { s32 m = l + r >> 1; s32 s = sa[m]; s32 k = 0; while(k < match.size() && s + k < input.size()) { if(match[k] != input[s + k]) break; k++; } if(k > length) { length = k; offset = s; if(k == match.size()) return true; } if(k == match.size() || s + k == input.size()) k--; if(match[k] < input[s + k]) { r = m; } else { l = m; } } return false; } // O(n + log m) inline auto suffix_array_find(s32& length, s32& offset, array_view llcp, array_view rlcp, array_view sa, array_view input, array_view match) -> bool { length = 0, offset = 0; s32 l = 0, r = input.size(), k = 0; while(l < r - 1) { s32 m = l + r >> 1; s32 s = sa[m]; while(k < match.size() && s + k < input.size()) { if(match[k] != input[s + k]) break; k++; } if(k > length) { length = k; offset = s; if(k == match.size()) return true; } if(k == match.size() || s + k == input.size()) k--; if(match[k] < input[s + k]) { r = m; k = min(k, llcp[m]); } else { l = m; k = min(k, rlcp[m]); } } return false; } // //there are multiple strategies for building the required auxiliary structures for suffix arrays struct SuffixArray { using type = SuffixArray; //O(n) SuffixArray(array_view input) : input(input) { sa = suffix_array(input); } //O(n) auto lrcp() -> type& { //if(!isa) isa = suffix_array_invert(sa); //if(!lcp) lcp = suffix_array_lcp(sa, isa, input); if(!phi) phi = suffix_array_phi(sa); if(!plcp) plcp = suffix_array_plcp(phi, input); //if(!lcp) lcp = suffix_array_lcp(plcp, sa); if(!llcp || !rlcp) suffix_array_lrcp(llcp, rlcp, lcp, plcp, sa, input); return *this; } //O(n) auto lpf() -> type& { if(!phi) phi = suffix_array_phi(sa); //if(!plcp) plcp = suffix_array_plcp(phi, input); if(!lengths || !offsets) suffix_array_lpf(lengths, offsets, phi, plcp, input); return *this; } auto operator[](s32 offset) const -> s32 { return sa[offset]; } //O(n log m) //O(n + log m) with lrcp() auto find(s32& length, s32& offset, array_view match) -> bool { if(!llcp || !rlcp) return suffix_array_find(length, offset, sa, input, match); //O(n log m) return suffix_array_find(length, offset, llcp, rlcp, sa, input, match); //O(n + log m) } //O(n) with lpf() auto previous(s32& length, s32& offset, s32 address) -> void { length = lengths[address]; offset = offsets[address]; } //non-owning reference: SuffixArray is invalidated if memory is freed array_view input; //suffix array and auxiliary data structures vector sa; //suffix array vector isa; //inverted suffix array vector phi; //phi vector plcp; //permuted longest common prefixes vector lcp; //longest common prefixes vector llcp; //longest common prefixes - left vector rlcp; //longest common prefixes - right vector lengths; //longest previous factors vector offsets; //longest previous factors }; } ares-126/nall/terminal.hpp000066400000000000000000000036151415063341600156000ustar00rootroot00000000000000#pragma once #include namespace nall::terminal { inline auto escapable() -> bool { #if defined(PLATFORM_WINDOWS) //todo: colors are supported by Windows 10+ and with alternate terminals (eg msys) //disabled for now for compatibility with Windows 7 and 8.1's cmd.exe return false; #endif return true; } namespace color { template inline auto black(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[30m", string{forward

    (p)...}, "\e[0m"}; } template inline auto blue(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[94m", string{forward

    (p)...}, "\e[0m"}; } template inline auto green(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[92m", string{forward

    (p)...}, "\e[0m"}; } template inline auto cyan(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[96m", string{forward

    (p)...}, "\e[0m"}; } template inline auto red(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[91m", string{forward

    (p)...}, "\e[0m"}; } template inline auto magenta(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[95m", string{forward

    (p)...}, "\e[0m"}; } template inline auto yellow(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[93m", string{forward

    (p)...}, "\e[0m"}; } template inline auto white(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[97m", string{forward

    (p)...}, "\e[0m"}; } template inline auto gray(P&&... p) -> string { if(!escapable()) return string{forward

    (p)...}; return {"\e[37m", string{forward

    (p)...}, "\e[0m"}; } } } ares-126/nall/thread.hpp000066400000000000000000000076151415063341600152400ustar00rootroot00000000000000#pragma once //simple thread library //primary rationale is that std::thread does not support custom stack sizes //this is highly critical in certain applications such as threaded web servers //an added bonus is that it avoids licensing issues on Windows //win32-pthreads (needed for std::thread) is licensed under the GPL only #include #include #include namespace nall { using mutex = std::mutex; using recursive_mutex = std::recursive_mutex; template using lock_guard = std::lock_guard; template using atomic = std::atomic; } #if defined(API_POSIX) #include namespace nall { struct thread { thread(const thread&) = delete; auto operator=(const thread&) -> thread& = delete; thread() = default; thread(thread&&) = default; auto operator=(thread&&) -> thread& = default; auto join() -> void; static auto create(const function& callback, uintptr parameter = 0, u32 stacksize = 0) -> thread; static auto detach() -> void; static auto exit() -> void; struct context { function void> callback; uintptr parameter = 0; }; private: pthread_t handle = (pthread_t)nullptr; }; inline auto _threadCallback(void* parameter) -> void* { auto context = (thread::context*)parameter; context->callback(context->parameter); delete context; return nullptr; } inline auto thread::join() -> void { pthread_join(handle, nullptr); } inline auto thread::create(const function& callback, uintptr parameter, u32 stacksize) -> thread { thread instance; auto context = new thread::context; context->callback = callback; context->parameter = parameter; pthread_attr_t attr; pthread_attr_init(&attr); if(stacksize) pthread_attr_setstacksize(&attr, max(PTHREAD_STACK_MIN, stacksize)); pthread_create(&instance.handle, &attr, _threadCallback, (void*)context); return instance; } inline auto thread::detach() -> void { pthread_detach(pthread_self()); } inline auto thread::exit() -> void { pthread_exit(nullptr); } } #elif defined(API_WINDOWS) namespace nall { struct thread { thread(const thread&) = delete; auto operator=(const thread&) -> thread& = delete; thread() = default; thread(thread&& source) { operator=(move(source)); } ~thread() { close(); } auto operator=(thread&& source) -> thread& { close(); handle = source.handle; source.handle = 0; return *this; } auto close() -> void; auto join() -> void; static auto create(const function& callback, uintptr parameter = 0, u32 stacksize = 0) -> thread; static auto detach() -> void; static auto exit() -> void; struct context { function void> callback; uintptr parameter = 0; }; private: HANDLE handle = 0; }; inline auto WINAPI _threadCallback(void* parameter) -> DWORD { auto context = (thread::context*)parameter; context->callback(context->parameter); delete context; return 0; } inline auto thread::close() -> void { if(handle) { CloseHandle(handle); handle = 0; } } inline auto thread::join() -> void { if(handle) { //wait until the thread has finished executing ... WaitForSingleObject(handle, INFINITE); CloseHandle(handle); handle = 0; } } inline auto thread::create(const function& callback, uintptr parameter, u32 stacksize) -> thread { thread instance; auto context = new thread::context; context->callback = callback; context->parameter = parameter; instance.handle = CreateThread(nullptr, stacksize, _threadCallback, (void*)context, 0, nullptr); return instance; } inline auto thread::detach() -> void { //Windows threads do not use this concept: //~thread() frees resources via CloseHandle() //thread continues to run even after handle is closed } inline auto thread::exit() -> void { ExitThread(0); } } #endif ares-126/nall/traits.hpp000066400000000000000000000026071415063341600152730ustar00rootroot00000000000000#pragma once #include #include //pull all type traits used by nall from std namespace into nall namespace //this removes the requirement to prefix type traits with std:: within nall namespace nall { using std::add_const; using std::conditional; using std::conditional_t; using std::decay; using std::declval; using std::enable_if; using std::enable_if_t; using std::false_type; using std::is_floating_point; using std::is_floating_point_v; using std::forward; using std::initializer_list; using std::is_array; using std::is_array_v; using std::is_base_of; using std::is_base_of_v; using std::is_function; using std::is_integral; using std::is_integral_v; using std::is_pointer; using std::is_pointer_v; using std::is_same; using std::is_same_v; using std::is_signed; using std::is_signed_v; using std::is_unsigned; using std::is_unsigned_v; using std::move; using std::nullptr_t; using std::remove_extent; using std::remove_extent_t; using std::remove_reference; using std::remove_reference_t; using std::swap; using std::true_type; } namespace std { #if defined(__SIZEOF_INT128__) template<> struct is_integral : true_type {}; template<> struct is_integral : true_type {}; template<> struct is_signed : true_type {}; template<> struct is_unsigned : true_type {}; #endif } ares-126/nall/unique-pointer.hpp000066400000000000000000000054131415063341600167470ustar00rootroot00000000000000#pragma once namespace nall { template struct unique_pointer { template static auto create(P&&... p) { return unique_pointer{new T{forward

    (p)...}}; } using type = T; T* pointer = nullptr; function deleter; unique_pointer(const unique_pointer&) = delete; auto operator=(const unique_pointer&) -> unique_pointer& = delete; unique_pointer(T* pointer = nullptr, const function& deleter = {}) : pointer(pointer), deleter(deleter) {} ~unique_pointer() { reset(); } auto operator=(T* source) -> unique_pointer& { reset(); pointer = source; return *this; } explicit operator bool() const { return pointer; } auto operator->() -> T* { return pointer; } auto operator->() const -> const T* { return pointer; } auto operator*() -> T& { return *pointer; } auto operator*() const -> const T& { return *pointer; } auto operator()() -> T& { return *pointer; } auto operator()() const -> const T& { return *pointer; } auto data() -> T* { return pointer; } auto data() const -> const T* { return pointer; } auto release() -> T* { auto result = pointer; pointer = nullptr; return result; } auto reset() -> void { if(pointer) { if(deleter) { deleter(pointer); } else { delete pointer; } pointer = nullptr; } } auto swap(unique_pointer& target) -> void { std::swap(pointer, target.pointer); std::swap(deleter, target.deleter); } }; template struct unique_pointer { using type = T; T* pointer = nullptr; function deleter; unique_pointer(const unique_pointer&) = delete; auto operator=(const unique_pointer&) -> unique_pointer& = delete; unique_pointer(T* pointer = nullptr, const function& deleter = {}) : pointer(pointer), deleter(deleter) {} ~unique_pointer() { reset(); } auto operator=(T* source) -> unique_pointer& { reset(); pointer = source; return *this; } explicit operator bool() const { return pointer; } auto operator()() -> T* { return pointer; } auto operator()() const -> T* { return pointer; } auto operator[](u64 offset) -> T& { return pointer[offset]; } auto operator[](u64 offset) const -> const T& { return pointer[offset]; } auto data() -> T* { return pointer; } auto data() const -> const T* { return pointer; } auto release() -> T* { auto result = pointer; pointer = nullptr; return result; } auto reset() -> void { if(pointer) { if(deleter) { deleter(pointer); } else { delete[] pointer; } pointer = nullptr; } } auto swap(unique_pointer& target) -> void { std::swap(pointer, target.pointer); std::swap(deleter, target.deleter); } }; } ares-126/nall/utility.hpp000066400000000000000000000012461415063341600154660ustar00rootroot00000000000000#pragma once #include namespace nall { using std::tuple; template struct base_from_member { base_from_member(T value) : value(value) {} T value; }; template struct castable { operator To&() { return (To&)value; } operator const To&() const { return (const To&)value; } operator With&() { return value; } operator const With&() const { return value; } auto& operator=(const With& value) { return this->value = value; } With value; }; template inline auto allocate(u64 size, const T& value) -> T* { T* array = new T[size]; for(u64 i = 0; i < size; i++) array[i] = value; return array; } } ares-126/nall/variant.hpp000066400000000000000000000113551415063341600154310ustar00rootroot00000000000000#pragma once namespace nall { template struct variant_size { static constexpr u32 size = max(sizeof(T), variant_size::size); }; template struct variant_size { static constexpr u32 size = sizeof(T); }; template struct variant_index { static constexpr u32 index = is_same_v ? Index : variant_index::index; }; template struct variant_index { static constexpr u32 index = is_same_v ? Index : 0; }; template struct variant_copy { constexpr variant_copy(u32 index, u32 assigned, void* target, void* source) { if(index == assigned) new(target) T(*((T*)source)); else variant_copy(index + 1, assigned, target, source); } }; template struct variant_copy { constexpr variant_copy(u32 index, u32 assigned, void* target, void* source) { if(index == assigned) new(target) T(*((T*)source)); } }; template struct variant_move { constexpr variant_move(u32 index, u32 assigned, void* target, void* source) { if(index == assigned) new(target) T(move(*((T*)source))); else variant_move(index + 1, assigned, target, source); } }; template struct variant_move { constexpr variant_move(u32 index, u32 assigned, void* target, void* source) { if(index == assigned) new(target) T(move(*((T*)source))); } }; template struct variant_destruct { constexpr variant_destruct(u32 index, u32 assigned, void* data) { if(index == assigned) ((T*)data)->~T(); else variant_destruct(index + 1, assigned, data); } }; template struct variant_destruct { constexpr variant_destruct(u32 index, u32 assigned, void* data) { if(index == assigned) ((T*)data)->~T(); } }; template struct variant_equals { constexpr auto operator()(u32 index, u32 assigned) const -> bool { if(index == assigned) return is_same_v; return variant_equals()(index + 1, assigned); } }; template struct variant_equals { constexpr auto operator()(u32 index, u32 assigned) const -> bool { if(index == assigned) return is_same_v; return false; } }; template struct variant final { //final as destructor is not virtual variant() : assigned(0) {} variant(const variant& source) { operator=(source); } variant(variant&& source) { operator=(move(source)); } template variant(const T& value) { operator=(value); } template variant(T&& value) { operator=(move(value)); } ~variant() { reset(); } explicit operator bool() const { return assigned; } template explicit constexpr operator T&() { return get(); } template explicit constexpr operator const T&() const { return get(); } template constexpr auto is() const -> bool { return variant_equals()(1, assigned); } template constexpr auto get() -> T& { static_assert(variant_index<1, T, P...>::index, "type not in variant"); struct variant_bad_cast{}; if(!is()) throw variant_bad_cast{}; return *((T*)data); } template constexpr auto get() const -> const T& { static_assert(variant_index<1, T, P...>::index, "type not in variant"); struct variant_bad_cast{}; if(!is()) throw variant_bad_cast{}; return *((const T*)data); } template constexpr auto get(const T& fallback) const -> const T& { if(!is()) return fallback; return *((const T*)data); } auto reset() -> void { if(assigned) variant_destruct(1, assigned, (void*)data); assigned = 0; } auto& operator=(const variant& source) { reset(); if(assigned = source.assigned) variant_copy(1, source.assigned, (void*)data, (void*)source.data); return *this; } auto& operator=(variant&& source) { reset(); if(assigned = source.assigned) variant_move(1, source.assigned, (void*)data, (void*)source.data); source.assigned = 0; return *this; } template auto& operator=(const T& value) { static_assert(variant_index<1, T, P...>::index, "type not in variant"); reset(); new((void*)&data) T(value); assigned = variant_index<1, T, P...>::index; return *this; } template auto& operator=(T&& value) { static_assert(variant_index<1, T, P...>::index, "type not in variant"); reset(); new((void*)&data) T(move(value)); assigned = variant_index<1, T, P...>::index; return *this; } private: alignas(P...) char data[variant_size::size]; u32 assigned; }; } ares-126/nall/varint.hpp000066400000000000000000000064341415063341600152720ustar00rootroot00000000000000#pragma once #include #include #include namespace nall { struct varint { virtual auto read() -> u8 = 0; virtual auto write(u8) -> void = 0; auto readvu() -> u64 { u64 data = 0, shift = 1; while(true) { u8 x = read(); data += (x & 0x7f) * shift; if(x & 0x80) break; shift <<= 7; data += shift; } return data; } auto readvs() -> s64 { u64 data = readvu(); bool negate = data & 1; data >>= 1; if(negate) data = ~data; return data; } auto writevu(u64 data) -> void { while(true) { u8 x = data & 0x7f; data >>= 7; if(data == 0) return write(0x80 | x); write(x); data--; } } auto writevs(s64 data) -> void { bool negate = data < 0; if(negate) data = ~data; data = (data << 1) | negate; writevu(data); } }; struct VariadicNatural { VariadicNatural() : mask(~0ull) { assign(0); } template VariadicNatural(const T& value) : mask(~0ull) { assign(value); } operator u64() const { return data; } template auto& operator=(const T& value) { return assign(value); } auto operator++(s32) { auto value = data; assign(data + 1); return value; } auto operator--(s32) { auto value = data; assign(data - 1); return value; } auto& operator++() { return assign(data + 1); } auto& operator--() { return assign(data - 1); } auto& operator &=(const u64 value) { return assign(data & value); } auto& operator |=(const u64 value) { return assign(data | value); } auto& operator ^=(const u64 value) { return assign(data ^ value); } auto& operator<<=(const u64 value) { return assign(data << value); } auto& operator>>=(const u64 value) { return assign(data >> value); } auto& operator +=(const u64 value) { return assign(data + value); } auto& operator -=(const u64 value) { return assign(data - value); } auto& operator *=(const u64 value) { return assign(data * value); } auto& operator /=(const u64 value) { return assign(data / value); } auto& operator %=(const u64 value) { return assign(data % value); } auto resize(u32 bits) { assert(bits <= 64); mask = ~0ull >> (64 - bits); data &= mask; } auto serialize(serializer& s) { s(data); s(mask); } struct Reference { Reference(VariadicNatural& self, u32 lo, u32 hi) : self(self), Lo(lo), Hi(hi) {} operator u64() const { const u64 RangeBits = Hi - Lo + 1; const u64 RangeMask = (((1ull << RangeBits) - 1) << Lo) & self.mask; return (self & RangeMask) >> Lo; } auto& operator=(const u64 value) { const u64 RangeBits = Hi - Lo + 1; const u64 RangeMask = (((1ull << RangeBits) - 1) << Lo) & self.mask; self.data = (self.data & ~RangeMask) | ((value << Lo) & RangeMask); return *this; } private: VariadicNatural& self; const u32 Lo; const u32 Hi; }; auto bits(u32 lo, u32 hi) -> Reference { return {*this, lo < hi ? lo : hi, hi > lo ? hi : lo}; } auto bit(u32 index) -> Reference { return {*this, index, index}; } auto byte(u32 index) -> Reference { return {*this, index * 8 + 0, index * 8 + 7}; } private: auto assign(u64 value) -> VariadicNatural& { data = value & mask; return *this; } u64 data; u64 mask; }; } ares-126/nall/vector.hpp000066400000000000000000000120171415063341600152630ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include #include namespace nall { template struct vector_base { using type = vector_base; //core.hpp vector_base() = default; vector_base(const initializer_list& values); vector_base(const type& source); vector_base(type&& source); ~vector_base(); explicit operator bool() const; operator array_span(); operator array_view() const; template auto capacity() const -> u64; template auto size() const -> u64; template auto data() -> Cast*; template auto data() const -> const Cast*; //assign.hpp auto operator=(const type& source) -> type&; auto operator=(type&& source) -> type&; //compare.hpp auto operator==(const type& source) const -> bool; auto operator!=(const type& source) const -> bool; //memory.hpp auto reset() -> void; auto acquire(T* data, u64 size, u64 capacity = 0) -> void; auto release() -> T*; auto reserveLeft(u64 capacity) -> bool; auto reserveRight(u64 capacity) -> bool; auto reserve(u64 capacity) -> bool { return reserveRight(capacity); } auto reallocateLeft(u64 size) -> bool; auto reallocateRight(u64 size) -> bool; auto reallocate(u64 size) -> bool { return reallocateRight(size); } auto resizeLeft(u64 size, const T& value = T()) -> bool; auto resizeRight(u64 size, const T& value = T()) -> bool; auto resize(u64 size, const T& value = T()) -> bool { return resizeRight(size, value); } //access.hpp auto operator[](u64 offset) -> T&; auto operator[](u64 offset) const -> const T&; auto operator()(u64 offset) -> T&; auto operator()(u64 offset, const T& value) const -> const T&; auto left() -> T&; auto first() -> T& { return left(); } auto left() const -> const T&; auto first() const -> const T& { return left(); } auto right() -> T&; auto last() -> T& { return right(); } auto right() const -> const T&; auto last() const -> const T& { return right(); } //modify.hpp auto prepend(const T& value) -> void; auto prepend(T&& value) -> void; auto prepend(const type& values) -> void; auto prepend(type&& values) -> void; auto append(const T& value) -> void; auto append(T&& value) -> void; auto append(const type& values) -> void; auto append(type&& values) -> void; auto insert(u64 offset, const T& value) -> void; auto removeLeft(u64 length = 1) -> void; auto removeFirst(u64 length = 1) -> void { return removeLeft(length); } auto removeRight(u64 length = 1) -> void; auto removeLast(u64 length = 1) -> void { return removeRight(length); } auto remove(u64 offset, u64 length = 1) -> void; auto removeByIndex(u64 offset) -> bool; auto removeByValue(const T& value) -> bool; auto takeLeft() -> T; auto takeFirst() -> T { return move(takeLeft()); } auto takeRight() -> T; auto takeLast() -> T { return move(takeRight()); } auto take(u64 offset) -> T; //iterator.hpp auto begin() -> iterator { return {data(), 0}; } auto end() -> iterator { return {data(), size()}; } auto begin() const -> iterator_const { return {data(), 0}; } auto end() const -> iterator_const { return {data(), size()}; } auto rbegin() -> reverse_iterator { return {data(), size() - 1}; } auto rend() -> reverse_iterator { return {data(), (u64)-1}; } auto rbegin() const -> reverse_iterator_const { return {data(), size() - 1}; } auto rend() const -> reverse_iterator_const { return {data(), (u64)-1}; } //utility.hpp auto fill(const T& value = {}) -> void; auto sort(const function& comparator = [](auto& lhs, auto& rhs) { return lhs < rhs; }) -> void; auto reverse() -> void; auto find(const function& comparator) -> maybe; auto find(const T& value) const -> maybe; auto findSorted(const T& value) const -> maybe; auto foreach(const function& callback) -> void; auto foreach(const function& callback) -> void; protected: T* _pool = nullptr; //pointer to first initialized element in pool u64 _size = 0; //number of initialized elements in pool u64 _left = 0; //number of allocated elements free on the left of pool u64 _right = 0; //number of allocated elements free on the right of pool }; } #define vector vector_base #include #include #include #include #include #include #include #include #undef vector namespace nall { template struct vector : vector_base { using vector_base::vector_base; }; } #include ares-126/nall/vector/000077500000000000000000000000001415063341600145515ustar00rootroot00000000000000ares-126/nall/vector/access.hpp000066400000000000000000000020461415063341600165250ustar00rootroot00000000000000#pragma once namespace nall { template auto vector::operator[](u64 offset) -> T& { #ifdef DEBUG struct out_of_bounds {}; if(offset >= size()) throw out_of_bounds{}; #endif return _pool[offset]; } template auto vector::operator[](u64 offset) const -> const T& { #ifdef DEBUG struct out_of_bounds {}; if(offset >= size()) throw out_of_bounds{}; #endif return _pool[offset]; } template auto vector::operator()(u64 offset) -> T& { while(offset >= size()) append(T()); return _pool[offset]; } template auto vector::operator()(u64 offset, const T& value) const -> const T& { if(offset >= size()) return value; return _pool[offset]; } template auto vector::left() -> T& { return _pool[0]; } template auto vector::left() const -> const T& { return _pool[0]; } template auto vector::right() -> T& { return _pool[_size - 1]; } template auto vector::right() const -> const T& { return _pool[_size - 1]; } } ares-126/nall/vector/assign.hpp000066400000000000000000000012231415063341600165440ustar00rootroot00000000000000#pragma once namespace nall { template auto vector::operator=(const vector& source) -> vector& { if(this == &source) return *this; _pool = memory::allocate(source._size); _size = source._size; _left = 0; _right = 0; for(u64 n : range(_size)) new(_pool + n) T(source._pool[n]); return *this; } template auto vector::operator=(vector&& source) -> vector& { if(this == &source) return *this; _pool = source._pool; _size = source._size; _left = source._left; _right = source._right; source._pool = nullptr; source._size = 0; source._left = 0; source._right = 0; return *this; } } ares-126/nall/vector/compare.hpp000066400000000000000000000006571415063341600167200ustar00rootroot00000000000000#pragma once namespace nall { template auto vector::operator==(const vector& source) const -> bool { if(this == &source) return true; if(size() != source.size()) return false; for(u64 n = 0; n < size(); n++) { if(operator[](n) != source[n]) return false; } return true; } template auto vector::operator!=(const vector& source) const -> bool { return !operator==(source); } } ares-126/nall/vector/core.hpp000066400000000000000000000022521415063341600162130ustar00rootroot00000000000000#pragma once namespace nall { template vector::vector(const initializer_list& values) { reserveRight(values.size()); for(auto& value : values) append(value); } template vector::vector(const vector& source) { operator=(source); } template vector::vector(vector&& source) { operator=(move(source)); } template vector::~vector() { reset(); } template vector::operator bool() const { return _size; } template vector::operator array_span() { return {data(), size()}; } template vector::operator array_view() const { return {data(), size()}; } template template auto vector::capacity() const -> u64 { return (_left + _size + _right) * sizeof(T) / sizeof(Cast); } template template auto vector::size() const -> u64 { return _size * sizeof(T) / sizeof(Cast); } template template auto vector::data() -> Cast* { return (Cast*)_pool; } template template auto vector::data() const -> const Cast* { return (const Cast*)_pool; } } ares-126/nall/vector/iterator.hpp000066400000000000000000000037561415063341600171260ustar00rootroot00000000000000#pragma once namespace nall { template struct vector_iterator { vector_iterator(vector& self, u64 offset) : self(self), offset(offset) {} auto operator*() -> T& { return self.operator[](offset); } auto operator->() -> T* { return self.operator[](offset); } auto operator!=(const vector_iterator& source) const -> bool { return offset != source.offset; } auto operator++() -> vector_iterator& { return offset++, *this; } private: vector& self; u64 offset; }; template struct vector_iterator_const { vector_iterator_const(const vector& self, u64 offset) : self(self), offset(offset) {} auto operator*() -> const T& { return self.operator[](offset); } auto operator->() -> T* { return self.operator[](offset); } auto operator!=(const vector_iterator_const& source) const -> bool { return offset != source.offset; } auto operator++() -> vector_iterator_const& { return offset++, *this; } private: const vector& self; u64 offset; }; template struct vector_reverse_iterator { vector_reverse_iterator(vector& self, u64 offset) : self(self), offset(offset) {} auto operator*() -> T& { return self.operator[](offset); } auto operator->() -> T* { return self.operator[](offset); } auto operator!=(const vector_reverse_iterator& source) const -> bool { return offset != source.offset; } auto operator++() -> vector_reverse_iterator& { return offset--, *this; } private: vector& self; u64 offset; }; template struct vector_reverse_iterator_const { vector_reverse_iterator_const(const vector& self, u64 offset) : self(self), offset(offset) {} auto operator*() -> const T& { return self.operator[](offset); } auto operator->() -> T* { return self.operator[](offset); } auto operator!=(const vector_reverse_iterator_const& source) const -> bool { return offset != source.offset; } auto operator++() -> vector_reverse_iterator_const& { return offset--, *this; } private: const vector& self; u64 offset; }; } ares-126/nall/vector/memory.hpp000066400000000000000000000072631415063341600166020ustar00rootroot00000000000000#pragma once namespace nall { //nall::vector acts internally as a deque (double-ended queue) //it does this because it's essentially free to do so, only costing an extra integer in sizeof(vector) template auto vector::reset() -> void { if(!_pool) return; for(u64 n : range(_size)) _pool[n].~T(); memory::free(_pool - _left); _pool = nullptr; _size = 0; _left = 0; _right = 0; } //acquire ownership of allocated memory template auto vector::acquire(T* data, u64 size, u64 capacity) -> void { reset(); _pool = data; _size = size; _left = 0; _right = capacity ? capacity : size; } //release ownership of allocated memory template auto vector::release() -> T* { auto pool = _pool; _pool = nullptr; _size = 0; _left = 0; _right = 0; return pool; } //reserve allocates memory for objects, but does not initialize them //when the vector desired size is known, this can be used to avoid growing the capacity dynamically //reserve will not actually shrink the capacity, only expand it //shrinking the capacity would destroy objects, and break amortized growth with reallocate and resize template auto vector::reserveLeft(u64 capacity) -> bool { if(_size + _left >= capacity) return false; u64 left = bit::round(capacity); auto pool = memory::allocate(left + _right) + (left - _size); for(u64 n : range(_size)) new(pool + n) T(move(_pool[n])); memory::free(_pool - _left); _pool = pool; _left = left - _size; return true; } template auto vector::reserveRight(u64 capacity) -> bool { if(_size + _right >= capacity) return false; u64 right = bit::round(capacity); auto pool = memory::allocate(_left + right) + _left; for(u64 n : range(_size)) new(pool + n) T(move(_pool[n])); memory::free(_pool - _left); _pool = pool; _right = right - _size; return true; } //reallocation is meant for POD types, to avoid the overhead of initialization //do not use with non-POD types, or they will not be properly constructed or destructed template auto vector::reallocateLeft(u64 size) -> bool { if(size < _size) { //shrink _pool += _size - size; _left += _size - size; _size = size; return true; } if(size > _size) { //grow reserveLeft(size); _pool -= size - _size; _left -= size - _size; _size = size; return true; } return false; } template auto vector::reallocateRight(u64 size) -> bool { if(size < _size) { //shrink _right += _size - size; _size = size; return true; } if(size > _size) { //grow reserveRight(size); _right -= size - _size; _size = size; return true; } return false; } //resize is meant for non-POD types, and will properly construct objects template auto vector::resizeLeft(u64 size, const T& value) -> bool { if(size < _size) { //shrink for(u64 n : range(_size - size)) _pool[n].~T(); _pool += _size - size; _left += _size - size; _size = size; return true; } if(size > _size) { //grow reserveLeft(size); _pool -= size - _size; for(u64 n : nall::reverse(range(size - _size))) new(_pool + n) T(value); _left -= size - _size; _size = size; return true; } return false; } template auto vector::resizeRight(u64 size, const T& value) -> bool { if(size < _size) { //shrink for(u64 n : range(size, _size)) _pool[n].~T(); _right += _size - size; _size = size; return true; } if(size > _size) { //grow reserveRight(size); for(u64 n : range(_size, size)) new(_pool + n) T(value); _right -= size - _size; _size = size; return true; } return false; } } ares-126/nall/vector/modify.hpp000066400000000000000000000065171415063341600165620ustar00rootroot00000000000000#pragma once namespace nall { template auto vector::prepend(const T& value) -> void { reserveLeft(size() + 1); new(--_pool) T(value); _left--; _size++; } template auto vector::prepend(T&& value) -> void { reserveLeft(size() + 1); new(--_pool) T(move(value)); _left--; _size++; } template auto vector::prepend(const vector& values) -> void { reserveLeft(size() + values.size()); _pool -= values.size(); for(u64 n : range(values)) new(_pool + n) T(values[n]); _left -= values.size(); _size += values.size(); } template auto vector::prepend(vector&& values) -> void { reserveLeft(size() + values.size()); _pool -= values.size(); for(u64 n : range(values)) new(_pool + n) T(move(values[n])); _left -= values.size(); _size += values.size(); } // template auto vector::append(const T& value) -> void { reserveRight(size() + 1); new(_pool + _size) T(value); _right--; _size++; } template auto vector::append(T&& value) -> void { reserveRight(size() + 1); new(_pool + _size) T(move(value)); _right--; _size++; } template auto vector::append(const vector& values) -> void { reserveRight(size() + values.size()); for(u64 n : range(values.size())) new(_pool + _size + n) T(values[n]); _right -= values.size(); _size += values.size(); } template auto vector::append(vector&& values) -> void { reserveRight(size() + values.size()); for(u64 n : range(values.size())) new(_pool + _size + n) T(move(values[n])); _right -= values.size(); _size += values.size(); } // template auto vector::insert(u64 offset, const T& value) -> void { if(offset == 0) return prepend(value); if(offset == size() - 1) return append(value); reserveRight(size() + 1); _size++; for(s64 n = size() - 1; n > offset; n--) { _pool[n] = move(_pool[n - 1]); } new(_pool + offset) T(value); } // template auto vector::removeLeft(u64 length) -> void { if(length > size()) length = size(); resizeLeft(size() - length); } template auto vector::removeRight(u64 length) -> void { if(length > size()) length = size(); resizeRight(size() - length); } template auto vector::remove(u64 offset, u64 length) -> void { if(offset == 0) return removeLeft(length); if(offset == size() - 1) return removeRight(length); for(u64 n = offset; n < size(); n++) { if(n + length < size()) { _pool[n] = move(_pool[n + length]); } else { _pool[n].~T(); } } _size -= length; } template auto vector::removeByIndex(u64 index) -> bool { if(index < size()) return remove(index), true; return false; } template auto vector::removeByValue(const T& value) -> bool { if(auto index = find(value)) return remove(*index), true; return false; } // template auto vector::takeLeft() -> T { T value = move(_pool[0]); removeLeft(); return value; } template auto vector::takeRight() -> T { T value = move(_pool[size() - 1]); removeRight(); return value; } template auto vector::take(u64 offset) -> T { if(offset == 0) return takeLeft(); if(offset == size() - 1) return takeRight(); T value = move(_pool[offset]); remove(offset); return value; } } ares-126/nall/vector/specialization/000077500000000000000000000000001415063341600175675ustar00rootroot00000000000000ares-126/nall/vector/specialization/u8.hpp000066400000000000000000000020101415063341600206250ustar00rootroot00000000000000#pragma once namespace nall { template<> struct vector : vector_base { using type = vector; using vector_base::vector_base; template auto appendl(U value, u32 size) -> void { for(u32 byte : range(size)) append(u8(value >> byte * 8)); } template auto appendm(U value, u32 size) -> void { for(u32 byte : nall::reverse(range(size))) append(u8(value >> byte * 8)); } //note: string_view is not declared here yet ... auto appends(array_view memory) -> void { for(u8 byte : memory) append(byte); } template auto readl(s32 offset, u32 size) -> U { if(offset < 0) offset = this->size() - abs(offset); U value = 0; for(u32 byte : range(size)) value |= (U)operator[](offset + byte) << byte * 8; return value; } auto view(u32 offset, u32 length) -> array_view { #ifdef DEBUG struct out_of_bounds {}; if(offset + length >= size()) throw out_of_bounds{}; #endif return {data() + offset, length}; } }; } ares-126/nall/vector/utility.hpp000066400000000000000000000026021415063341600167650ustar00rootroot00000000000000#pragma once namespace nall { template auto vector::fill(const T& value) -> void { for(u64 n : range(size())) _pool[n] = value; } template auto vector::sort(const function& comparator) -> void { nall::sort(_pool, _size, comparator); } template auto vector::reverse() -> void { vector reversed; for(u64 n : range(size())) reversed.prepend(_pool[n]); operator=(move(reversed)); } template auto vector::find(const function& comparator) -> maybe { for(u64 n : range(size())) if(comparator(_pool[n])) return n; return nothing; } template auto vector::find(const T& value) const -> maybe { for(u64 n : range(size())) if(_pool[n] == value) return n; return nothing; } template auto vector::findSorted(const T& value) const -> maybe { s64 l = 0, r = size() - 1; while(l <= r) { s64 m = l + (r - l >> 1); if(value == _pool[m]) return m; value < _pool[m] ? r = m - 1 : l = m + 1; } return nothing; } template auto vector::foreach(const function& callback) -> void { for(u64 n : range(size())) callback(_pool[n]); } template auto vector::foreach(const function& callback) -> void { for(u64 n : range(size())) callback(n, _pool[n]); } } ares-126/nall/vfs.hpp000066400000000000000000000000521415063341600145530ustar00rootroot00000000000000#pragma once #include ares-126/nall/vfs/000077500000000000000000000000001415063341600140455ustar00rootroot00000000000000ares-126/nall/vfs/attribute.hpp000066400000000000000000000005241415063341600165620ustar00rootroot00000000000000namespace nall::vfs { struct attribute { attribute(const string& name, const any& value = {}) : name(name), value(value) {} auto operator==(const attribute& source) const -> bool { return name == source.name; } auto operator< (const attribute& source) const -> bool { return name < source.name; } string name; any value; }; } ares-126/nall/vfs/cdrom.hpp000066400000000000000000000150351415063341600156660ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include namespace nall::vfs { struct cdrom : file { static auto open(const string& cueLocation) -> shared_pointer { auto instance = shared_pointer{new cdrom}; if(instance->load(cueLocation)) return instance; return {}; } auto writable() const -> bool override { return false; } auto data() const -> const u8* override { return _image.data(); } auto data() -> u8* override { return _image.data(); } auto size() const -> u64 override { return _image.size(); } auto offset() const -> u64 override { return _offset; } auto resize(u64 size) -> bool override { //unsupported return false; } auto seek(s64 offset, index mode) -> void override { if(mode == index::absolute) _offset = (u64)offset; if(mode == index::relative) _offset += (s64)offset; } auto read() -> u8 override { if(_offset >= _image.size()) return 0x00; return _image[_offset++]; } auto write(u8 data) -> void override { //CD-ROMs are read-only; but allow writing anyway if needed, since the image is in memory if(_offset >= _image.size()) return; _image[_offset++] = data; } private: auto load(const string& cueLocation) -> bool { Decode::CUE cuesheet; if(!cuesheet.load(cueLocation)) return false; CD::Session session; session.leadIn.lba = -LeadInSectors; session.leadIn.end = -1; s32 lbaFileBase = 0; // add 2 sec pregap to 1st track if(!cuesheet.files[0].tracks[0].pregap) cuesheet.files[0].tracks[0].pregap = Track1Pregap; else cuesheet.files[0].tracks[0].pregap = Track1Pregap + cuesheet.files[0].tracks[0].pregap(); if(cuesheet.files[0].tracks[0].indices[0].number == 1) { session.tracks[1].indices[0].lba = 0; session.tracks[1].indices[0].end = cuesheet.files[0].tracks[0].pregap() + cuesheet.files[0].tracks[0].indices[0].lba - 1; } s32 lbaIndex = 0; for(auto& file : cuesheet.files) { for(auto& track : file.tracks) { session.tracks[track.number].control = track.type == "audio" ? 0b0000 : 0b0100; if(track.pregap) lbaFileBase += track.pregap(); for(auto& index : track.indices) { if(index.lba >= 0) { session.tracks[track.number].indices[index.number].lba = lbaFileBase + index.lba; session.tracks[track.number].indices[index.number].end = lbaFileBase + index.end; if(index.number == 0 && track.pregap) { session.tracks[track.number].indices[index.number].lba -= track.pregap(); session.tracks[track.number].indices[index.number].end -= track.pregap(); } } else { // insert gap session.tracks[track.number].indices[index.number].lba = lbaIndex; if(index.number == 0) session.tracks[track.number].indices[index.number].end = lbaIndex + track.pregap() - 1; else session.tracks[track.number].indices[index.number].end = lbaIndex + track.postgap() - 1; } lbaIndex = session.tracks[track.number].indices[index.number].end + 1; } if(track.postgap) lbaFileBase += track.postgap(); } lbaFileBase = lbaIndex; } session.leadOut.lba = lbaFileBase; session.leadOut.end = lbaFileBase + LeadOutSectors - 1; // determine track and index ranges session.firstTrack = 0xff; for(u32 track : range(100)) { if(!session.tracks[track]) continue; if(session.firstTrack > 99) session.firstTrack = track; // find first index for(u32 indexID : range(100)) { auto& index = session.tracks[track].indices[indexID]; if(index) { session.tracks[track].firstIndex = indexID; break; } } // find last index for(u32 indexID : reverse(range(100))) { auto& index = session.tracks[track].indices[indexID]; if(index) { session.tracks[track].lastIndex = indexID; break; } } session.lastTrack = track; } _image.resize(2448 * (LeadInSectors + lbaFileBase + LeadOutSectors)); lbaFileBase = 0; for(auto& file : cuesheet.files) { auto location = string{Location::path(cueLocation), file.name}; auto filedata = nall::file::open(location, nall::file::mode::read); if(file.type == "wave") filedata.seek(44); //skip RIFF header for(auto& track : file.tracks) { if(track.pregap) lbaFileBase += track.pregap(); for(auto& index : track.indices) { if(index.lba < 0) continue; // ignore gaps (not in file) for(s32 sector : range(index.sectorCount())) { auto target = _image.data() + 2448ull * (LeadInSectors + lbaFileBase + index.lba + sector); auto length = track.sectorSize(); if(length == 2048) { //ISO: generate header + parity data memory::assign(target + 0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff); //sync memory::assign(target + 6, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00); //sync auto [minute, second, frame] = CD::MSF(lbaFileBase + index.lba + sector); target[12] = CD::BCD::encode(minute); target[13] = CD::BCD::encode(second); target[14] = CD::BCD::encode(frame); target[15] = 0x01; //mode filedata.read({target + 16, length}); CD::RSPC::encodeMode1({target, 2352}); } if(length == 2352) { //BIN + WAV: direct copy filedata.read({target, length}); } } } if(track.postgap) lbaFileBase += track.postgap(); } lbaFileBase += file.tracks.last().indices.last().end + 1; } auto subchannel = session.encode(LeadInSectors + session.leadOut.end + 1); if(auto overlay = nall::file::read({Location::notsuffix(cueLocation), ".sub"})) { auto target = subchannel.data() + 96 * (LeadInSectors + Track1Pregap); auto length = (s64)subchannel.size() - 96 * (LeadInSectors + Track1Pregap); memory::copy(target, length, overlay.data(), overlay.size()); } for(u64 sector : range(size() / 2448)) { auto source = subchannel.data() + sector * 96; auto target = _image.data() + sector * 2448 + 2352; memory::copy(target, source, 96); } return true; } vector _image; u64 _offset = 0; static constexpr s32 LeadInSectors = 7500; static constexpr s32 Track1Pregap = 150; static constexpr s32 LeadOutSectors = 6750; }; } ares-126/nall/vfs/directory.hpp000066400000000000000000000053101415063341600165610ustar00rootroot00000000000000namespace nall::vfs { struct directory : node { auto count() const -> u32 { return _nodes.size(); } auto find(shared_pointer item) const -> bool { return (bool)_nodes.find(item); } auto find(const string& name) const -> bool { for(auto& node : _nodes) { if(node->name() == name) return true; } return false; } template auto read(const string& name) -> shared_pointer { for(auto& node : _nodes) { if(node->name() == name) { if(auto fp = node.cast()) { if(!fp->readable()) return {}; fp->seek(0); return fp; } } } return {}; } template auto write(const string& name) -> shared_pointer { for(auto& node : _nodes) { if(node->name() == name) { if(auto fp = node.cast()) { if(!fp->writable()) return {}; fp->seek(0); return fp; } } } return {}; } auto append(const string& name, u64 size) -> bool { if(find(name)) return false; auto item = memory::create(size); item->setName(name); return _nodes.append(item), true; } auto append(const string& name, shared_pointer item) -> bool { if(!item) return false; if(_nodes.find(item)) return false; item->setName(name); return _nodes.append(item), true; } auto append(const string& name, array_view view) -> bool { if(find(name)) return false; auto item = memory::open(view); item->setName(name); return _nodes.append(item), true; } auto append(shared_pointer item) -> bool { if(_nodes.find(item)) return false; return _nodes.append(item), true; } auto remove(shared_pointer item) -> bool { if(!_nodes.find(item)) return false; return _nodes.removeByValue(item), true; } auto files() const -> vector> { vector> files; for(auto& node : _nodes) { if(!node->isFile()) continue; files.append(node); } return files; } auto directories() const -> vector> { vector> directories; for(auto& node : _nodes) { if(!node->isDirectory()) continue; directories.append(node); } return directories; } auto begin() { return _nodes.begin(); } auto end() { return _nodes.end(); } auto begin() const { return _nodes.begin(); } auto end() const { return _nodes.end(); } protected: vector> _nodes; }; inline auto node::isFile() const -> bool { return dynamic_cast(this); } inline auto node::isDirectory() const -> bool { return dynamic_cast(this); } } ares-126/nall/vfs/disk.hpp000066400000000000000000000027121415063341600155120ustar00rootroot00000000000000#pragma once #include namespace nall::vfs { struct disk : file { static auto open(string location_, mode mode_) -> shared_pointer { auto instance = shared_pointer{new disk}; if(!instance->_open(location_, mode_)) return {}; return instance; } auto writable() const -> bool override { return _writable; } auto data() const -> const u8* override { return _data; } auto data() -> u8* override { return _data; } auto size() const -> u64 override { return _size; } auto offset() const -> u64 override { return _offset; } auto resize(u64 size) -> bool override { return false; //todo } auto seek(s64 offset, index mode = index::absolute) -> void override { if(mode == index::absolute) _offset = (u64)offset; if(mode == index::relative) _offset += (s64)offset; } auto read() -> u8 override { if(_offset >= _size) return 0x00; return _data[_offset++]; } auto write(u8 data) -> void override { if(_offset >= _size) return; _data[_offset++] = data; } private: disk() = default; disk(const disk&) = delete; auto operator=(const disk&) -> disk& = delete; auto _open(string location_, mode mode_) -> bool { if(!_fp.open(location_, (u32)mode_)) return false; _data = _fp.data(); _size = _fp.size(); _writable = mode_ == mode::write; return true; } file_map _fp; u8* _data = nullptr; u64 _size = 0; u64 _offset = 0; bool _writable = false; }; } ares-126/nall/vfs/file.hpp000066400000000000000000000026311415063341600154770ustar00rootroot00000000000000namespace nall::vfs { struct file : node { virtual auto readable() const -> bool { return true; } virtual auto writable() const -> bool { return false; } virtual auto data() const -> const u8* = 0; virtual auto data() -> u8* = 0; virtual auto size() const -> u64 = 0; virtual auto offset() const -> u64 = 0; virtual auto resize(u64 size) -> bool = 0; virtual auto seek(s64 offset, index = index::absolute) -> void = 0; virtual auto read() -> u8 = 0; virtual auto write(u8 data) -> void = 0; virtual auto flush() -> void {} auto end() const -> bool { return offset() >= size(); } auto read(array_span span) -> void { while(span) *span++ = read(); } auto readl(u32 bytes) -> u64 { u64 data = 0; for(auto n : range(bytes)) data |= (u64)read() << n * 8; return data; } auto readm(u32 bytes) -> u64 { u64 data = 0; for(auto n : range(bytes)) data = data << 8 | read(); return data; } auto reads() -> string { seek(0); string s; s.resize(size()); read(s); return s; } auto write(array_view view) -> void { while(view) write(*view++); } auto writel(u64 data, u32 bytes) -> void { for(auto n : range(bytes)) write(data), data >>= 8; } auto writem(u64 data, u32 bytes) -> void { for(auto n : reverse(range(bytes))) write(data >> n * 8); } auto writes(const string& s) -> void { write(s); } }; } ares-126/nall/vfs/memory.hpp000066400000000000000000000033771415063341600161000ustar00rootroot00000000000000#pragma once #include #include namespace nall::vfs { struct memory : file { ~memory() { nall::memory::free(_data); } static auto create(u64 size = 0) -> shared_pointer { auto instance = shared_pointer{new memory}; instance->_create(size); return instance; } static auto open(array_view view) -> shared_pointer { auto instance = shared_pointer{new memory}; instance->_open(view.data(), view.size()); return instance; } auto writable() const -> bool override { return true; } auto data() const -> const u8* override { return _data; } auto data() -> u8* override { return _data; } auto size() const -> u64 override { return _size; } auto offset() const -> u64 override { return _offset; } auto resize(u64 size) -> bool override { _data = nall::memory::resize(_data, size); _size = size; return true; } auto seek(s64 offset, index mode = index::absolute) -> void override { if(mode == index::absolute) _offset = (u64)offset; if(mode == index::relative) _offset += (s64)offset; } auto read() -> u8 override { if(_offset >= _size) return 0x00; return _data[_offset++]; } auto write(u8 data) -> void override { if(_offset >= _size) return; _data[_offset++] = data; } private: memory() = default; memory(const file&) = delete; auto operator=(const memory&) -> memory& = delete; auto _create(u64 size) -> void { _size = size; _data = nall::memory::allocate(size, 0x00); } auto _open(const u8* data, u64 size) -> void { _size = size; _data = nall::memory::allocate(size); nall::memory::copy(_data, data, size); } u8* _data = nullptr; u64 _size = 0; u64 _offset = 0; }; } ares-126/nall/vfs/node.hpp000066400000000000000000000027441415063341600155120ustar00rootroot00000000000000namespace nall::vfs { enum class mode : u32 { read, write }; static constexpr auto read = mode::read; static constexpr auto write = mode::write; enum class index : u32 { absolute, relative }; static constexpr auto absolute = index::absolute; static constexpr auto relative = index::relative; struct node { virtual ~node() = default; auto isFile() const -> bool; auto isDirectory() const -> bool; auto name() const -> string { return _name; } auto setName(const string& name) -> void { _name = name; } template auto attribute(const string& name) const -> T { if(auto attribute = _attributes.find(name)) { if(attribute->value.is()) return attribute->value.get(); } return {}; } template auto hasAttribute(const string& name) const -> bool { if(auto attribute = _attributes.find(name)) { if(attribute->value.is()) return true; } return false; } template auto setAttribute(const string& name, const U& value = {}) -> void { if constexpr(is_same_v && !is_same_v) return setAttribute(name, string{value}); if(auto attribute = _attributes.find(name)) { if((const T&)value) attribute->value = (const T&)value; else _attributes.remove(*attribute); } else { if((const T&)value) _attributes.insert({name, (const T&)value}); } } protected: string _name; set _attributes; }; } ares-126/nall/vfs/vfs.hpp000066400000000000000000000005301415063341600153520ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include ares-126/nall/view.hpp000066400000000000000000000001051415063341600147260ustar00rootroot00000000000000#pragma once namespace nall { template struct view; } ares-126/nall/windows/000077500000000000000000000000001415063341600147415ustar00rootroot00000000000000ares-126/nall/windows/detour.hpp000066400000000000000000000131111415063341600167510ustar00rootroot00000000000000#pragma once #include #include #include #include #include namespace nall { #define Copy 0 #define RelNear 1 struct detour { static auto insert(const string& moduleName, const string& functionName, void*& source, void* target) -> bool; static auto remove(const string& moduleName, const string& functionName, void*& source) -> bool; protected: static auto length(const u8* function) -> u32; static auto mirror(u8* target, const u8* source) -> u32; struct opcode { u16 prefix; u32 length; u32 mode; u16 modify; }; static opcode opcodes[]; }; //TODO: //* fs:, gs: should force another opcode copy //* conditional branches within +5-byte range should fail detour::opcode detour::opcodes[] = { {0x50, 1}, //push eax {0x51, 1}, //push ecx {0x52, 1}, //push edx {0x53, 1}, //push ebx {0x54, 1}, //push esp {0x55, 1}, //push ebp {0x56, 1}, //push esi {0x57, 1}, //push edi {0x58, 1}, //pop eax {0x59, 1}, //pop ecx {0x5a, 1}, //pop edx {0x5b, 1}, //pop ebx {0x5c, 1}, //pop esp {0x5d, 1}, //pop ebp {0x5e, 1}, //pop esi {0x5f, 1}, //pop edi {0x64, 1}, //fs: {0x65, 1}, //gs: {0x68, 5}, //push dword {0x6a, 2}, //push byte {0x74, 2, RelNear, 0x0f84}, //je near -> je far {0x75, 2, RelNear, 0x0f85}, //jne near -> jne far {0x89, 2}, //mov reg,reg {0x8b, 2}, //mov reg,reg {0x90, 1}, //nop {0xa1, 5}, //mov eax,[dword] {0xeb, 2, RelNear, 0xe9}, //jmp near -> jmp far }; inline auto detour::insert(const string& moduleName, const string& functionName, void*& source, void* target) -> bool { HMODULE module = GetModuleHandleW(utf16_t(moduleName)); if(!module) return false; u8* sourceData = (u8*)GetProcAddress(module, functionName); if(!sourceData) return false; u32 sourceLength = detour::length(sourceData); if(sourceLength < 5) { //unable to clone enough bytes to insert hook #if 1 string output = {"detour::insert(", moduleName, "::", functionName, ") failed: "}; for(u32 n = 0; n < 16; n++) output.append(hex<2>(sourceData[n]), " "); output.trimRight(" ", 1L); MessageBoxA(0, output, "nall::detour", MB_OK); #endif return false; } auto mirrorData = new u8[512](); detour::mirror(mirrorData, sourceData); DWORD privileges; VirtualProtect((void*)mirrorData, 512, PAGE_EXECUTE_READWRITE, &privileges); VirtualProtect((void*)sourceData, 256, PAGE_EXECUTE_READWRITE, &privileges); u64 address = (u64)target - ((u64)sourceData + 5); sourceData[0] = 0xe9; //jmp target sourceData[1] = address >> 0; sourceData[2] = address >> 8; sourceData[3] = address >> 16; sourceData[4] = address >> 24; VirtualProtect((void*)sourceData, 256, privileges, &privileges); source = (void*)mirrorData; return true; } inline auto detour::remove(const string& moduleName, const string& functionName, void*& source) -> bool { HMODULE module = GetModuleHandleW(utf16_t(moduleName)); if(!module) return false; auto sourceData = (u8*)GetProcAddress(module, functionName); if(!sourceData) return false; auto mirrorData = (u8*)source; if(mirrorData == sourceData) return false; //hook was never installed u32 length = detour::length(256 + mirrorData); if(length < 5) return false; DWORD privileges; VirtualProtect((void*)sourceData, 256, PAGE_EXECUTE_READWRITE, &privileges); for(u32 n = 0; n < length; n++) sourceData[n] = mirrorData[256 + n]; VirtualProtect((void*)sourceData, 256, privileges, &privileges); source = (void*)sourceData; delete[] mirrorData; return true; } inline auto detour::length(const u8* function) -> u32 { u32 length = 0; while(length < 5) { detour::opcode *opcode = 0; foreach(op, detour::opcodes) { if(function[length] == op.prefix) { opcode = &op; break; } } if(opcode == 0) break; length += opcode->length; } return length; } inline auto detour::mirror(u8* target, const u8* source) -> u32 { const u8* entryPoint = source; for(u32 n = 0; n < 256; n++) target[256 + n] = source[n]; u32 size = detour::length(source); while(size) { detour::opcode* opcode = nullptr; foreach(op, detour::opcodes) { if(*source == op.prefix) { opcode = &op; break; } } switch(opcode->mode) { case Copy: for(u32 n = 0; n < opcode->length; n++) *target++ = *source++; break; case RelNear: { source++; u64 sourceAddress = (u64)source + 1 + (s8)*source; *target++ = opcode->modify; if(opcode->modify >> 8) *target++ = opcode->modify >> 8; u64 targetAddress = (u64)target + 4; u64 address = sourceAddress - targetAddress; *target++ = address >> 0; *target++ = address >> 8; *target++ = address >> 16; *target++ = address >> 24; source += 2; } break; } size -= opcode->length; } u64 address = (entryPoint + detour::length(entryPoint)) - (target + 5); *target++ = 0xe9; //jmp entryPoint *target++ = address >> 0; *target++ = address >> 8; *target++ = address >> 16; *target++ = address >> 24; return source - entryPoint; } #undef Implied #undef RelNear } ares-126/nall/windows/guard.hpp000066400000000000000000000010031415063341600165460ustar00rootroot00000000000000#ifndef NALL_WINDOWS_GUARD_HPP #define NALL_WINDOWS_GUARD_HPP #define boolean WindowsBoolean #define interface WindowsInterface #undef UNICODE #undef WINVER #undef WIN32_LEAN_AND_LEAN #undef _WIN32_WINNT #undef _WIN32_IE #undef NOMINMAX #undef PATH_MAX #define UNICODE #define WINVER 0x0601 #define WIN32_LEAN_AND_MEAN #define _WIN32_WINNT WINVER #define _WIN32_IE WINVER #define NOMINMAX #define PATH_MAX 260 #else #undef NALL_WINDOWS_GUARD_HPP #undef boolean #undef interface #undef far #undef near #endif ares-126/nall/windows/guid.hpp000066400000000000000000000004261415063341600164040ustar00rootroot00000000000000#pragma once #include namespace nall { inline auto guid() -> string { GUID guidInstance; CoCreateGuid(&guidInstance); wchar_t guidString[39]; StringFromGUID2(guidInstance, guidString, 39); return (char*)utf8_t(guidString); } } ares-126/nall/windows/launcher.hpp000066400000000000000000000060571415063341600172630ustar00rootroot00000000000000#pragma once namespace nall { //launch a new process and inject specified DLL into it inline auto launch(const char* applicationName, const char* libraryName, u32 entryPoint) -> bool { //if a launcher does not send at least one message, a wait cursor will appear PostThreadMessage(GetCurrentThreadId(), WM_USER, 0, 0); MSG msg; GetMessage(&msg, 0, 0, 0); STARTUPINFOW si; PROCESS_INFORMATION pi; memset(&si, 0, sizeof(STARTUPINFOW)); BOOL result = CreateProcessW( utf16_t(applicationName), GetCommandLineW(), NULL, NULL, TRUE, DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS, //do not break if application creates its own processes NULL, NULL, &si, &pi ); if(result == false) return false; u8 entryData[1024], entryHook[1024] = { 0x68, 0x00, 0x00, 0x00, 0x00, //push libraryName 0xb8, 0x00, 0x00, 0x00, 0x00, //mov eax,LoadLibraryW 0xff, 0xd0, //call eax 0xcd, 0x03, //int 3 }; entryHook[1] = (u8)((entryPoint + 14) >> 0); entryHook[2] = (u8)((entryPoint + 14) >> 8); entryHook[3] = (u8)((entryPoint + 14) >> 16); entryHook[4] = (u8)((entryPoint + 14) >> 24); auto pLoadLibraryW = (u32)GetProcAddress(GetModuleHandleW(L"kernel32"), "LoadLibraryW"); entryHook[6] = pLoadLibraryW >> 0; entryHook[7] = pLoadLibraryW >> 8; entryHook[8] = pLoadLibraryW >> 16; entryHook[9] = pLoadLibraryW >> 24; utf16_t buffer = utf16_t(libraryName); memcpy(entryHook + 14, buffer, 2 * wcslen(buffer) + 2); while(true) { DEBUG_EVENT event; WaitForDebugEvent(&event, INFINITE); if(event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) break; if(event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT) { if(event.u.Exception.ExceptionRecord.ExceptionCode == EXCEPTION_BREAKPOINT) { if(event.u.Exception.ExceptionRecord.ExceptionAddress == (void*)(entryPoint + 14 - 1)) { HANDLE hProcess = OpenProcess(0, FALSE, event.dwProcessId); HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, event.dwThreadId); CONTEXT context; context.ContextFlags = CONTEXT_FULL; GetThreadContext(hThread, &context); WriteProcessMemory(pi.hProcess, (void*)entryPoint, (void*)&entryData, sizeof entryData, NULL); context.Eip = entryPoint; SetThreadContext(hThread, &context); CloseHandle(hThread); CloseHandle(hProcess); } ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE); continue; } ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_EXCEPTION_NOT_HANDLED); continue; } if(event.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT) { ReadProcessMemory(pi.hProcess, (void*)entryPoint, (void*)&entryData, sizeof entryData, NULL); WriteProcessMemory(pi.hProcess, (void*)entryPoint, (void*)&entryHook, sizeof entryHook, NULL); ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE); continue; } ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE); } return true; } } ares-126/nall/windows/registry.hpp000066400000000000000000000102011415063341600173140ustar00rootroot00000000000000#pragma once #include #include #include #undef interface #ifndef KEY_WOW64_64KEY #define KEY_WOW64_64KEY 0x0100 #endif #ifndef KEY_WOW64_32KEY #define KEY_WOW64_32KEY 0x0200 #endif #ifndef NWR_FLAGS #define NWR_FLAGS KEY_WOW64_64KEY #endif #ifndef NWR_SIZE #define NWR_SIZE 4096 #endif namespace nall { struct registry { static auto exists(const string& name) -> bool { auto part = name.split("\\"); HKEY handle, rootKey = root(part.takeLeft()); string node = part.takeRight(); string path = part.merge("\\"); if(RegOpenKeyExW(rootKey, utf16_t(path), 0, NWR_FLAGS | KEY_READ, &handle) == ERROR_SUCCESS) { wchar_t data[NWR_SIZE] = L""; DWORD size = NWR_SIZE * sizeof(wchar_t); LONG result = RegQueryValueExW(handle, utf16_t(node), nullptr, nullptr, (LPBYTE)&data, (LPDWORD)&size); RegCloseKey(handle); if(result == ERROR_SUCCESS) return true; } return false; } static auto read(const string& name) -> string { auto part = name.split("\\"); HKEY handle, rootKey = root(part.takeLeft()); string node = part.takeRight(); string path = part.merge("\\"); if(RegOpenKeyExW(rootKey, utf16_t(path), 0, NWR_FLAGS | KEY_READ, &handle) == ERROR_SUCCESS) { wchar_t data[NWR_SIZE] = L""; DWORD size = NWR_SIZE * sizeof(wchar_t); LONG result = RegQueryValueExW(handle, utf16_t(node), nullptr, nullptr, (LPBYTE)&data, (LPDWORD)&size); RegCloseKey(handle); if(result == ERROR_SUCCESS) return (const char*)utf8_t(data); } return ""; } static auto write(const string& name, const string& data = "") -> void { auto part = name.split("\\"); HKEY handle, rootKey = root(part.takeLeft()); string node = part.takeRight(), path; DWORD disposition; for(u32 n = 0; n < part.size(); n++) { path.append(part[n]); if(RegCreateKeyExW(rootKey, utf16_t(path), 0, nullptr, 0, NWR_FLAGS | KEY_ALL_ACCESS, nullptr, &handle, &disposition) == ERROR_SUCCESS) { if(n == part.size() - 1) { RegSetValueExW(handle, utf16_t(node), 0, REG_SZ, (BYTE*)(wchar_t*)utf16_t(data), (data.length() + 1) * sizeof(wchar_t)); } RegCloseKey(handle); } path.append("\\"); } } static auto remove(const string& name) -> bool { auto part = name.split("\\"); HKEY rootKey = root(part.takeLeft()); string node = part.takeRight(); string path = part.merge("\\"); if(!node) return SHDeleteKeyW(rootKey, utf16_t(path)) == ERROR_SUCCESS; return SHDeleteValueW(rootKey, utf16_t(path), utf16_t(node)) == ERROR_SUCCESS; } static auto contents(const string& name) -> vector { vector result; auto part = name.split("\\"); HKEY handle, rootKey = root(part.takeLeft()); part.removeRight(); string path = part.merge("\\"); if(RegOpenKeyExW(rootKey, utf16_t(path), 0, NWR_FLAGS | KEY_READ, &handle) == ERROR_SUCCESS) { DWORD folders, nodes; RegQueryInfoKey(handle, nullptr, nullptr, nullptr, &folders, nullptr, nullptr, &nodes, nullptr, nullptr, nullptr, nullptr); for(u32 n = 0; n < folders; n++) { wchar_t name[NWR_SIZE] = L""; DWORD size = NWR_SIZE * sizeof(wchar_t); RegEnumKeyEx(handle, n, (wchar_t*)&name, &size, nullptr, nullptr, nullptr, nullptr); result.append(string{(const char*)utf8_t(name), "\\"}); } for(u32 n = 0; n < nodes; n++) { wchar_t name[NWR_SIZE] = L""; DWORD size = NWR_SIZE * sizeof(wchar_t); RegEnumValueW(handle, n, (wchar_t*)&name, &size, nullptr, nullptr, nullptr, nullptr); result.append((const char*)utf8_t(name)); } RegCloseKey(handle); } return result; } private: static auto root(const string& name) -> HKEY { if(name == "HKCR") return HKEY_CLASSES_ROOT; if(name == "HKCC") return HKEY_CURRENT_CONFIG; if(name == "HKCU") return HKEY_CURRENT_USER; if(name == "HKLM") return HKEY_LOCAL_MACHINE; if(name == "HKU" ) return HKEY_USERS; return nullptr; } }; } ares-126/nall/windows/service.hpp000066400000000000000000000005031415063341600171100ustar00rootroot00000000000000#pragma once namespace nall { struct service { explicit operator bool() const { return false; } auto command(const string& name, const string& command) -> bool { return false; } auto receive() -> string { return ""; } auto name() const -> string { return ""; } auto stop() const -> bool { return false; } }; } ares-126/nall/windows/shared-memory.hpp000066400000000000000000000013221415063341600202240ustar00rootroot00000000000000#pragma once namespace nall { struct shared_memory { shared_memory() = default; shared_memory(const shared_memory&) = delete; auto operator=(const shared_memory&) -> shared_memory& = delete; ~shared_memory() { reset(); } explicit operator bool() const { return false; } auto empty() const -> bool { return true; } auto size() const -> u32 { return 0; } auto acquired() const -> bool { return false; } auto acquire() -> u8* { return nullptr; } auto release() -> void {} auto reset() -> void {} auto create(const string& name, u32 size) -> bool { return false; } auto remove() -> void {} auto open(const string& name, u32 size) -> bool { return false; } auto close() -> void {} }; } ares-126/nall/windows/utf8.hpp000066400000000000000000000042061415063341600163420ustar00rootroot00000000000000#pragma once namespace nall { //UTF-8 to UTF-16 struct utf16_t { utf16_t(const char* s = "") { operator=(s); } ~utf16_t() { reset(); } utf16_t(const utf16_t&) = delete; auto operator=(const utf16_t&) -> utf16_t& = delete; auto operator=(const char* s) -> utf16_t& { reset(); if(!s) s = ""; length = MultiByteToWideChar(CP_UTF8, 0, s, -1, nullptr, 0); buffer = new wchar_t[length + 1]; MultiByteToWideChar(CP_UTF8, 0, s, -1, buffer, length); buffer[length] = 0; return *this; } operator wchar_t*() { return buffer; } operator const wchar_t*() const { return buffer; } auto reset() -> void { delete[] buffer; length = 0; } auto data() -> wchar_t* { return buffer; } auto data() const -> const wchar_t* { return buffer; } auto size() const -> u32 { return length; } private: wchar_t* buffer = nullptr; u32 length = 0; }; //UTF-16 to UTF-8 struct utf8_t { utf8_t(const wchar_t* s = L"") { operator=(s); } ~utf8_t() { reset(); } utf8_t(const utf8_t&) = delete; auto operator=(const utf8_t&) -> utf8_t& = delete; auto operator=(const wchar_t* s) -> utf8_t& { reset(); if(!s) s = L""; length = WideCharToMultiByte(CP_UTF8, 0, s, -1, nullptr, 0, nullptr, nullptr); buffer = new char[length + 1]; WideCharToMultiByte(CP_UTF8, 0, s, -1, buffer, length, nullptr, nullptr); buffer[length] = 0; return *this; } auto reset() -> void { delete[] buffer; length = 0; } operator char*() { return buffer; } operator const char*() const { return buffer; } auto data() -> char* { return buffer; } auto data() const -> const char* { return buffer; } auto size() const -> u32 { return length; } private: char* buffer = nullptr; u32 length = 0; }; inline auto utf8_arguments(int& argc, char**& argv) -> void { wchar_t** wargv = CommandLineToArgvW(GetCommandLineW(), &argc); argv = new char*[argc + 1](); for(u32 i = 0; i < argc; i++) { argv[i] = new char[PATH_MAX]; strcpy(argv[i], nall::utf8_t(wargv[i])); } } } ares-126/nall/xorg/000077500000000000000000000000001415063341600142265ustar00rootroot00000000000000ares-126/nall/xorg/clipboard.hpp000066400000000000000000000004071415063341600166770ustar00rootroot00000000000000#pragma once #include namespace nall::Clipboard { inline auto clear() -> void { XDisplay display; if(auto atom = XInternAtom(display, "CLIPBOARD", XlibTrue)) { XSetSelectionOwner(display, atom, XlibNone, XlibCurrentTime); } } } ares-126/nall/xorg/guard.hpp000066400000000000000000000014501415063341600160410ustar00rootroot00000000000000#ifndef NALL_XORG_GUARD_HPP #define NALL_XORG_GUARD_HPP #define Atom XlibAtom #define Display XlibDisplay #define Font XlibFont #define Screen XlibScreen #define Window XlibWindow #else #undef NALL_XORG_GUARD_HPP #undef Atom #undef Display #undef Font #undef Screen #undef Window #undef Above #undef Below #undef Bool #ifndef NALL_XORG_GUARD_CONSTANTS #define NALL_XORG_GUARD_CONSTANTS enum XlibConstants : int { XlibButton1 = Button1, XlibButton2 = Button2, XlibButton3 = Button3, XlibButton4 = Button4, XlibButton5 = Button5, XlibCurrentTime = CurrentTime, XlibFalse = False, XlibNone = None, XlibTrue = True, }; #endif #undef Button1 #undef Button2 #undef Button3 #undef Button4 #undef Button5 #undef CurrentTime #undef False #undef None #undef True #undef MAX #undef MIN #endif ares-126/nall/xorg/xorg.hpp000066400000000000000000000006061415063341600157200ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include struct XDisplay { XDisplay() { _display = XOpenDisplay(nullptr); } ~XDisplay() { XCloseDisplay(_display); } operator XlibDisplay*() const { return _display; } private: XlibDisplay* _display; }; ares-126/ruby/000077500000000000000000000000001415063341600133025ustar00rootroot00000000000000ares-126/ruby/GNUmakefile000066400000000000000000000075661415063341600153720ustar00rootroot00000000000000ifeq ($(ruby),) ifeq ($(platform),windows) ruby += video.wgl video.direct3d video.directdraw video.gdi ruby += audio.wasapi audio.xaudio2 audio.directsound audio.waveout #audio.asio ruby += input.windows else ifeq ($(platform),macos) ruby += video.cgl ruby += audio.openal ruby += input.quartz #input.carbon else ifeq ($(platform),linux) pkg_check1 = $(if $(shell test -e /usr/lib/lib$1.so && echo 1),$2) pkg_check2 = $(if $(shell test -e /usr/lib/$(shell uname -m)-linux-gnu/lib$1.so && echo 1),$2) pkg_check = $(call pkg_check1,$1,$2) $(call pkg_check2,$1,$2) ruby += video.glx video.glx2 video.xshm ruby += $(call pkg_check,Xv,video.xvideo) ruby += audio.oss audio.alsa ruby += $(call pkg_check,openal,audio.openal) ruby += $(call pkg_check,pulse,audio.pulseaudio) ruby += $(call pkg_check,pulse-simple,audio.pulseaudiosimple) ruby += $(call pkg_check,ao,audio.ao) ruby += input.xlib ruby += $(call pkg_check,udev,input.udev) ruby += $(call pkg_check,SDL2,input.sdl) else ifeq ($(platform),bsd) pkg_check = $(if $(shell test -e /usr/local/lib/lib$1.so && echo 1),$2) ruby += video.glx video.glx2 video.xshm ruby += $(call pkg_check,Xv,video.xvideo) ruby += audio.oss ruby += $(call pkg_check,openal,audio.openal) ruby += $(call pkg_check,pulse,audio.pulseaudio) ruby += $(call pkg_check,pulse-simple,audio.pulseaudiosimple) ruby += $(call pkg_check,ao,audio.ao) ruby += input.uhid input.xlib ruby += $(call pkg_check,SDL2,input.sdl) endif endif ifeq ($(platform),macos) ruby.flags := $(flags.objcpp) else ruby.flags := $(flags.cpp) endif ruby.flags += $(foreach c,$(subst .,_,$(call strupper,$(ruby))),-D$c) ruby.flags += $(if $(findstring input.sdl,$(ruby)),$(shell sdl2-config --cflags)) ruby.options := ruby.options += $(if $(findstring video.cgl,$(ruby)),-framework OpenGL) ruby.options += $(if $(findstring video.direct3d,$(ruby)),-ld3d9) ruby.options += $(if $(findstring video.directdraw,$(ruby)),-lddraw) ruby.options += $(if $(findstring video.glx,$(ruby)),-lGL) ruby.options += $(if $(findstring video.wgl,$(ruby)),-lopengl32) ruby.options += $(if $(findstring video.xvideo,$(ruby)),-lXv) ruby.options += $(if $(findstring audio.alsa,$(ruby)),-lasound) ruby.options += $(if $(findstring audio.ao,$(ruby)),-lao) ruby.options += $(if $(findstring audio.directsound,$(ruby)),-ldsound -luuid) ruby.options += $(if $(findstring audio.pulseaudio,$(ruby)),-lpulse) ruby.options += $(if $(findstring audio.pulseaudiosimple,$(ruby)),-lpulse-simple) ruby.options += $(if $(findstring audio.wasapi,$(ruby)),-lavrt -luuid) ruby.options += $(if $(findstring audio.waveout,$(ruby)),-lwinmm) ruby.options += $(if $(findstring audio.xaudio2,$(ruby)),-lole32) ruby.options += $(if $(findstring input.sdl,$(ruby)),$(shell sdl2-config --libs)) ruby.options += $(if $(findstring input.udev,$(ruby)),-ludev) ruby.options += $(if $(findstring input.uhid,$(ruby)),-lusbhid) ruby.options += $(if $(findstring input.windows,$(ruby)),-ldinput8 -ldxguid) ifeq ($(platform),windows) ruby.options += $(if $(findstring audio.openal,$(ruby)),-lopenal32) endif ifeq ($(platform),macos) ruby.options += -framework IOKit ruby.options += $(if $(findstring audio.openal,$(ruby)),-framework OpenAL) endif ifeq ($(platform),linux) ruby.options += -lX11 -lXext -lXrandr ruby.options += $(if $(findstring audio.openal,$(ruby)),-lopenal) endif ifeq ($(platform),bsd) ruby.options += -lX11 -lXext -lXrandr ruby.options += $(if $(findstring audio.openal,$(ruby)),-lopenal -fuse-ld=bfd) # -fuse-ld=bfd: see FreeBSD bug 219089 endif ruby.objects := $(object.path)/ruby.o $(object.path)/ruby.o: $(ruby.path)/ruby.cpp $(call rwildcard,$(ruby.path)) $(info Compiling $(subst ../,,$<) ...) @$(compiler) $(ruby.flags) $(flags) $(flags.deps) -c $< -o $@ ruby.verbose: $(info ruby Drivers:) $(foreach n,$(ruby),$(info $([space]) $n)) ares-126/ruby/audio/000077500000000000000000000000001415063341600144035ustar00rootroot00000000000000ares-126/ruby/audio/alsa.cpp000066400000000000000000000125221415063341600160310ustar00rootroot00000000000000#include struct AudioALSA : AudioDriver { AudioALSA& self = *this; AudioALSA(Audio& super) : AudioDriver(super) {} ~AudioALSA() { terminate(); } auto create() -> bool override { super.setDevice("default"); super.setChannels(2); super.setFrequency(48000); super.setLatency(20); return initialize(); } auto driver() -> string override { return "ALSA"; } auto ready() -> bool override { return _ready; } auto hasBlocking() -> bool override { return true; } auto hasDynamic() -> bool override { return true; } auto hasDevices() -> vector override { vector devices; char** list; if(snd_device_name_hint(-1, "pcm", (void***)&list) == 0) { u32 index = 0; while(list[index]) { char* deviceName = snd_device_name_get_hint(list[index], "NAME"); if(deviceName) devices.append(deviceName); free(deviceName); index++; } } snd_device_name_free_hint((void**)list); return devices; } auto hasChannels() -> vector override { return {2}; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto hasLatencies() -> vector override { return {20, 40, 60, 80, 100}; } auto setDevice(string device) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return true; } auto setChannels(u32 channels) -> bool override { return true; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto level() -> f64 override { snd_pcm_sframes_t available; for(u32 timeout : range(256)) { available = snd_pcm_avail_update(_interface); if(available >= 0) break; snd_pcm_recover(_interface, available, 1); } return (f64)(_bufferSize - available) / _bufferSize; } auto output(const f64 samples[]) -> void override { _buffer[_offset] = (u16)sclamp<16>(samples[0] * 32767.0) << 0; _buffer[_offset] |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; if(++_offset < _periodSize) return; snd_pcm_sframes_t available; do { available = snd_pcm_avail_update(_interface); if(available < 0) { snd_pcm_recover(_interface, available, 1); continue; } if(available < _offset) { if(!self.blocking) { _offset = 0; return; } s32 error = snd_pcm_wait(_interface, -1); if(error < 0) snd_pcm_recover(_interface, error, 1); } } while(available < _offset); u32* output = _buffer; s32 i = 4; while(_offset > 0 && i--) { snd_pcm_sframes_t written = snd_pcm_writei(_interface, output, _offset); if(written < 0) { //no samples written snd_pcm_recover(_interface, written, 1); } else if(written <= _offset) { _offset -= written; output += written; } } if(i < 0) { if(_buffer == output) { _offset--; output++; } memory::move(_buffer, output, _offset); } } private: auto initialize() -> bool { terminate(); if(!hasDevices().find(self.device)) self.device = "default"; if(snd_pcm_open(&_interface, self.device, SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK) < 0) return terminate(), false; u32 rate = self.frequency; u32 bufferTime = self.latency * 1000; u32 periodTime = self.latency * 1000 / 8; snd_pcm_hw_params_t* hardwareParameters; snd_pcm_hw_params_alloca(&hardwareParameters); if(snd_pcm_hw_params_any(_interface, hardwareParameters) < 0) return terminate(), false; if(snd_pcm_hw_params_set_access(_interface, hardwareParameters, SND_PCM_ACCESS_RW_INTERLEAVED) < 0 || snd_pcm_hw_params_set_format(_interface, hardwareParameters, SND_PCM_FORMAT_S16_LE) < 0 || snd_pcm_hw_params_set_channels(_interface, hardwareParameters, 2) < 0 || snd_pcm_hw_params_set_rate_near(_interface, hardwareParameters, &rate, 0) < 0 || snd_pcm_hw_params_set_period_time_near(_interface, hardwareParameters, &periodTime, 0) < 0 || snd_pcm_hw_params_set_buffer_time_near(_interface, hardwareParameters, &bufferTime, 0) < 0 ) return terminate(), false; if(snd_pcm_hw_params(_interface, hardwareParameters) < 0) return terminate(), false; if(snd_pcm_get_params(_interface, &_bufferSize, &_periodSize) < 0) return terminate(), false; snd_pcm_sw_params_t* softwareParameters; snd_pcm_sw_params_alloca(&softwareParameters); if(snd_pcm_sw_params_current(_interface, softwareParameters) < 0) return terminate(), false; if(snd_pcm_sw_params_set_start_threshold(_interface, softwareParameters, _bufferSize / 2) < 0) return terminate(), false; if(snd_pcm_sw_params(_interface, softwareParameters) < 0) return terminate(), false; _buffer = new uint32_t[_periodSize](); _offset = 0; return _ready = true; } auto terminate() -> void { _ready = false; if(_interface) { //snd_pcm_drain(_interface); //prevents popping noise; but causes multi-second lag snd_pcm_close(_interface); _interface = nullptr; } if(_buffer) { delete[] _buffer; _buffer = nullptr; } } bool _ready = false; snd_pcm_t* _interface = nullptr; snd_pcm_uframes_t _bufferSize; snd_pcm_uframes_t _periodSize; u32* _buffer = nullptr; u32 _offset = 0; }; ares-126/ruby/audio/ao.cpp000066400000000000000000000034571415063341600155170ustar00rootroot00000000000000#include struct AudioAO : AudioDriver { AudioAO& self = *this; AudioAO(Audio& super) : AudioDriver(super) {} ~AudioAO() { terminate(); } auto create() -> bool override { super.setChannels(2); super.setFrequency(48000); return initialize(); } auto driver() -> string override { return "libao"; } auto ready() -> bool override { return _ready; } auto hasChannels() -> vector override { return {2}; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto output(const f64 samples[]) -> void override { u32 sample = 0; sample |= (u16)sclamp<16>(samples[0] * 32767.0) << 0; sample |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; ao_play(_interface, (char*)&sample, 4); } private: auto initialize() -> bool { terminate(); ao_initialize(); s32 driverID = ao_default_driver_id(); if(driverID < 0) return false; ao_sample_format format; format.bits = 16; format.channels = 2; format.rate = self.frequency; format.byte_format = AO_FMT_LITTLE; format.matrix = nullptr; ao_info* information = ao_driver_info(driverID); if(!information) return false; string device = information->short_name; ao_option* options = nullptr; if(device == "alsa") { ao_append_option(&options, "buffer_time", "100000"); //100ms latency (default was 500ms) } _interface = ao_open_live(driverID, &format, options); if(!_interface) return false; return _ready = true; } auto terminate() -> void { _ready = false; if(_interface) { ao_close(_interface); _interface = nullptr; } ao_shutdown(); } bool _ready = false; ao_device* _interface = nullptr; }; ares-126/ruby/audio/asio.cpp000066400000000000000000000230771415063341600160530ustar00rootroot00000000000000#include #include "asio.hpp" struct AudioASIO : AudioDriver { static AudioASIO* instance; AudioASIO& self = *this; AudioASIO(Audio& super) : AudioDriver(super) { instance = this; } ~AudioASIO() { terminate(); } auto create() -> bool override { super.setDevice(hasDevices().first()); super.setChannels(2); super.setFrequency(48000); super.setLatency(2048); return initialize(); } auto driver() -> string override { return "ASIO"; } auto ready() -> bool override { return _ready; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasDevices() -> vector override { self.devices.reset(); for(auto candidate : registry::contents("HKLM\\SOFTWARE\\ASIO\\")) { if(auto classID = registry::read({"HKLM\\SOFTWARE\\ASIO\\", candidate, "CLSID"})) { self.devices.append({candidate.trimRight("\\", 1L), classID}); } } vector devices; for(auto& device : self.devices) devices.append(device.name); return devices; } auto hasChannels() -> vector override { return {1, 2}; } auto hasFrequencies() -> vector override { return {self.frequency}; } auto hasLatencies() -> vector override { vector latencies; u32 latencyList[] = {64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 6144}; //factors of 6144 for(auto& latency : latencyList) { if(self.activeDevice) { if(latency < self.activeDevice.minimumBufferSize) continue; if(latency > self.activeDevice.maximumBufferSize) continue; } latencies.append(latency); } //it is possible that no latencies in the hard-coded list above will match; so ensure driver-declared latencies are available if(!latencies.find(self.activeDevice.minimumBufferSize)) latencies.append(self.activeDevice.minimumBufferSize); if(!latencies.find(self.activeDevice.maximumBufferSize)) latencies.append(self.activeDevice.maximumBufferSize); if(!latencies.find(self.activeDevice.preferredBufferSize)) latencies.append(self.activeDevice.preferredBufferSize); latencies.sort(); return latencies; } auto setContext(uintptr context) -> bool override { return initialize(); } auto setDevice(string device) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return initialize(); } auto setChannels(u32 channels) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto clear() -> void override { if(!ready()) return; for(u32 n : range(self.channels)) { memory::fill(_channel[n].buffers[0], self.latency * _sampleSize); memory::fill(_channel[n].buffers[1], self.latency * _sampleSize); } memory::fill(_queue.samples, sizeof(_queue.samples)); _queue.read = 0; _queue.write = 0; _queue.count = 0; } auto output(const f64 samples[]) -> void override { if(!ready()) return; //defer call to IASIO::start(), because the drivers themselves will sometimes crash internally. //if software initializes AudioASIO but does not play music at startup, this can prevent a crash loop. if(!_started) { _started = true; if(_asio->start() != ASE_OK) { _ready = false; return; } } if(self.blocking) { while(_queue.count >= self.latency); } for(u32 n : range(self.channels)) { _queue.samples[_queue.write][n] = samples[n]; } _queue.write++; _queue.count++; } private: auto initialize() -> bool { terminate(); hasDevices(); //this call populates self.devices if(!self.devices) return false; self.activeDevice = {}; for(auto& device : self.devices) { if(self.device == device.name) { self.activeDevice = device; break; } } if(!self.activeDevice) { self.activeDevice = self.devices.first(); self.device = self.activeDevice.name; } CLSID classID; if(CLSIDFromString((LPOLESTR)utf16_t(self.activeDevice.classID), (LPCLSID)&classID) != S_OK) return false; if(CoCreateInstance(classID, 0, CLSCTX_INPROC_SERVER, classID, (void**)&_asio) != S_OK) return false; if(!_asio->init((void*)self.context)) return false; if(_asio->getSampleRate(&self.activeDevice.sampleRate) != ASE_OK) return false; if(_asio->getChannels(&self.activeDevice.inputChannels, &self.activeDevice.outputChannels) != ASE_OK) return false; if(_asio->getBufferSize( &self.activeDevice.minimumBufferSize, &self.activeDevice.maximumBufferSize, &self.activeDevice.preferredBufferSize, &self.activeDevice.granularity ) != ASE_OK) return false; self.frequency = self.activeDevice.sampleRate; self.latency = self.latency < self.activeDevice.minimumBufferSize ? self.activeDevice.minimumBufferSize : self.latency; self.latency = self.latency > self.activeDevice.maximumBufferSize ? self.activeDevice.maximumBufferSize : self.latency; for(u32 n : range(self.channels)) { _channel[n].isInput = false; _channel[n].channelNum = n; _channel[n].buffers[0] = nullptr; _channel[n].buffers[1] = nullptr; } ASIOCallbacks callbacks; callbacks.bufferSwitch = &AudioASIO::_bufferSwitch; callbacks.sampleRateDidChange = &AudioASIO::_sampleRateDidChange; callbacks.asioMessage = &AudioASIO::_asioMessage; callbacks.bufferSwitchTimeInfo = &AudioASIO::_bufferSwitchTimeInfo; if(_asio->createBuffers(_channel, self.channels, self.latency, &callbacks) != ASE_OK) return false; if(_asio->getLatencies(&self.activeDevice.inputLatency, &self.activeDevice.outputLatency) != ASE_OK) return false; //assume for the sake of sanity that all buffers use the same sample format ... ASIOChannelInfo channelInformation = {}; channelInformation.channel = 0; channelInformation.isInput = false; if(_asio->getChannelInfo(&channelInformation) != ASE_OK) return false; switch(_sampleFormat = channelInformation.type) { case ASIOSTInt16LSB: _sampleSize = 2; break; case ASIOSTInt24LSB: _sampleSize = 3; break; case ASIOSTInt32LSB: _sampleSize = 4; break; case ASIOSTFloat32LSB: _sampleSize = 4; break; case ASIOSTFloat64LSB: _sampleSize = 8; break; default: return false; //unsupported sample format } _ready = true; _started = false; clear(); return true; } auto terminate() -> void { _ready = false; _started = false; self.activeDevice = {}; if(_asio) { _asio->stop(); _asio->disposeBuffers(); _asio->Release(); _asio = nullptr; } } private: static auto _bufferSwitch(long doubleBufferInput, ASIOBool directProcess) -> void { return instance->bufferSwitch(doubleBufferInput, directProcess); } static auto _sampleRateDidChange(ASIOSampleRate sampleRate) -> void { return instance->sampleRateDidChange(sampleRate); } static auto _asioMessage(long selector, long value, void* message, double* optional) -> long { return instance->asioMessage(selector, value, message, optional); } static auto _bufferSwitchTimeInfo(ASIOTime* parameters, long doubleBufferIndex, ASIOBool directProcess) -> ASIOTime* { return instance->bufferSwitchTimeInfo(parameters, doubleBufferIndex, directProcess); } auto bufferSwitch(long doubleBufferInput, ASIOBool directProcess) -> void { for(u32 sampleIndex : range(self.latency)) { f64 samples[8] = {0}; if(_queue.count) { for(u32 n : range(self.channels)) { samples[n] = _queue.samples[_queue.read][n]; } _queue.read++; _queue.count--; } for(u32 n : range(self.channels)) { auto buffer = (u8*)_channel[n].buffers[doubleBufferInput]; buffer += sampleIndex * _sampleSize; switch(_sampleFormat) { case ASIOSTInt16LSB: { *(u16*)buffer = (u16)sclamp<16>(samples[n] * (32768.0 - 1.0)); break; } case ASIOSTInt24LSB: { auto value = (u32)sclamp<24>(samples[n] * (256.0 * 32768.0 - 1.0)); buffer[0] = value >> 0; buffer[1] = value >> 8; buffer[2] = value >> 16; break; } case ASIOSTInt32LSB: { *(u32*)buffer = (u32)sclamp<32>(samples[n] * (65536.0 * 32768.0 - 1.0)); break; } case ASIOSTFloat32LSB: { *(f32*)buffer = max(-1.0, min(+1.0, samples[n])); break; } case ASIOSTFloat64LSB: { *(f64*)buffer = max(-1.0, min(+1.0, samples[n])); break; } } } } } auto sampleRateDidChange(ASIOSampleRate sampleRate) -> void { } auto asioMessage(long selector, long value, void* message, double* optional) -> long { return ASE_OK; } auto bufferSwitchTimeInfo(ASIOTime* parameters, long doubleBufferIndex, ASIOBool directProcess) -> ASIOTime* { return nullptr; } bool _ready = false; bool _started = false; struct Queue { f64 samples[65536][8]; u16 read; u16 write; std::atomic count; }; struct Device { explicit operator bool() const { return name; } string name; string classID; ASIOSampleRate sampleRate; long inputChannels; long outputChannels; long inputLatency; long outputLatency; long minimumBufferSize; long maximumBufferSize; long preferredBufferSize; long granularity; }; Queue _queue; vector devices; Device activeDevice; IASIO* _asio = nullptr; ASIOBufferInfo _channel[8]; long _sampleFormat; long _sampleSize; }; AudioASIO* AudioASIO::instance = nullptr; ares-126/ruby/audio/asio.hpp000066400000000000000000000105041415063341600160470ustar00rootroot00000000000000using ASIOError = long; enum : long { ASE_OK = 0, ASE_SUCCESS = 0x3f4847a0, ASE_NotPresent = -1000, ASE_HWMalfunction, ASE_InvalidParameter, ASE_InvalidMode, ASE_SPNotAdvancing, ASE_NoClock, ASE_NoMemory, }; using ASIOBool = long; enum : long { ASIOFalse = 0, ASIOTrue = 1, }; using ASIOSampleRate = double; using ASIOSamples = long long int; using ASIOTimeStamp = long long int; using ASIOSampleType = long; enum : long { ASIOSTInt16MSB = 0, ASIOSTInt24MSB = 1, ASIOSTInt32MSB = 2, ASIOSTFloat32MSB = 3, ASIOSTFloat64MSB = 4, ASIOSTInt32MSB16 = 8, ASIOSTInt32MSB18 = 9, ASIOSTInt32MSB20 = 10, ASIOSTInt32MSB24 = 11, ASIOSTInt16LSB = 16, ASIOSTInt24LSB = 17, ASIOSTInt32LSB = 18, ASIOSTFloat32LSB = 19, ASIOSTFloat64LSB = 20, ASIOSTInt32LSB16 = 24, ASIOSTInt32LSB18 = 25, ASIOSTInt32LSB20 = 26, ASIOSTInt32LSB24 = 27, ASIOSTDSDInt8LSB1 = 32, ASIOSTDSDInt8MSB1 = 33, ASIOSTDSDInt8NER8 = 40, ASIOSTLastEntry, }; struct ASIOBufferInfo { ASIOBool isInput; long channelNum; void* buffers[2]; }; struct ASIOChannelInfo { long channel; ASIOBool isInput; ASIOBool isActive; long channelGroup; ASIOSampleType type; char name[32]; }; struct ASIOClockSource { long index; long associatedChannel; long associatedGroup; ASIOBool isCurrentSource; char name[32]; }; struct ASIOTimeInfo { double speed; ASIOTimeStamp systemTime; ASIOSamples samplePosition; ASIOSampleRate sampleRate; unsigned long flags; char reserved[12]; }; enum : unsigned long { kSystemTimeValid = 1 << 0, kSamplePositionValid = 1 << 1, kSampleRateValid = 1 << 2, kSpeedValid = 1 << 3, kSampleRateChanged = 1 << 4, kClockSourceChanged = 1 << 5, }; struct ASIOTimeCode { double speed; ASIOSamples timeCodeSamples; unsigned long flags; char future[64]; }; enum : unsigned long { kTcValid = 1 << 0, kTcRunning = 1 << 1, kTcReverse = 1 << 2, kTcOnspeed = 1 << 3, kTcStill = 1 << 4, kTcSpeedValid = 1 << 8, }; struct ASIOTime { long reserved[4]; ASIOTimeInfo timeInfo; ASIOTimeCode timeCode; }; struct ASIOCallbacks { auto (*bufferSwitch)(long doubleBufferIndex, ASIOBool directProcess) -> void; auto (*sampleRateDidChange)(ASIOSampleRate sampleRate) -> void; auto (*asioMessage)(long selector, long value, void* message, double* optional) -> long; auto (*bufferSwitchTimeInfo)(ASIOTime* parameters, long doubleBufferIndex, ASIOBool directProcess) -> ASIOTime*; }; enum : long { kAsioSelectorSupported = 1, kAsioEngineVersion, kAsioResetRequest, kAsioBufferSizeChange, kAsioResyncRequest, kAsioLatenciesChanged, kAsioSupportsTimeInfo, kAsioSupportsTimeCode, kAsioMMCCommand, kAsioSupportsInputMonitor, kAsioSupportsInputGain, kAsioSupportsInputMeter, kAsioSupportsOutputGain, kAsioSupportsOutputMeter, kAsioOverload, kAsioNumMessageSelectors, }; struct IASIO : public IUnknown { virtual auto init(void* systemHandle) -> ASIOBool; virtual auto getDriverName(char* name) -> void; virtual auto getDriverVersion() -> long; virtual auto getErrorMessage(char* error) -> void; virtual auto start() -> ASIOError; virtual auto stop() -> ASIOError; virtual auto getChannels(long* inputChannels, long* outputChannels) -> ASIOError = 0; virtual auto getLatencies(long* inputLatency, long* outputLatency) -> ASIOError = 0; virtual auto getBufferSize(long* minimumSize, long* maximumSize, long* preferredSize, long* granularity) -> ASIOError = 0; virtual auto canSampleRate(ASIOSampleRate sampleRate) -> ASIOError = 0; virtual auto getSampleRate(ASIOSampleRate* sampleRate) -> ASIOError = 0; virtual auto setSampleRate(ASIOSampleRate sampleRate) -> ASIOError = 0; virtual auto getClockSources(ASIOClockSource* clocks, long* sources) -> ASIOError = 0; virtual auto setClockSource(long reference) -> ASIOError = 0; virtual auto getSamplePosition(ASIOSamples* samplePosition, ASIOTimeStamp* timeStamp) -> ASIOError = 0; virtual auto getChannelInfo(ASIOChannelInfo* information) -> ASIOError = 0; virtual auto createBuffers(ASIOBufferInfo* bufferInformation, long channels, long bufferSize, ASIOCallbacks* callbacks) -> ASIOError = 0; virtual auto disposeBuffers() -> ASIOError = 0; virtual auto controlPanel() -> ASIOError = 0; virtual auto future(long selector, void* optional) -> ASIOError = 0; virtual auto outputReady() -> ASIOError = 0; }; ares-126/ruby/audio/audio.cpp000066400000000000000000000157351415063341600162230ustar00rootroot00000000000000#if defined(AUDIO_ALSA) #include #endif #if defined(AUDIO_AO) #include #endif #if defined(AUDIO_ASIO) #include #endif #if defined(AUDIO_DIRECTSOUND) #include #endif #if defined(AUDIO_OPENAL) #include #endif #if defined(AUDIO_OSS) #include #endif #if defined(AUDIO_PULSEAUDIO) #include #endif #if defined(AUDIO_PULSEAUDIOSIMPLE) #include #endif #if defined(AUDIO_WASAPI) #include #endif #if defined(AUDIO_WAVEOUT) #include #endif #if defined(AUDIO_XAUDIO2) #include #endif namespace ruby { auto Audio::setExclusive(bool exclusive) -> bool { if(instance->exclusive == exclusive) return true; if(!instance->hasExclusive()) return false; if(!instance->setExclusive(instance->exclusive = exclusive)) return false; return true; } auto Audio::setContext(uintptr context) -> bool { if(instance->context == context) return true; if(!instance->hasContext()) return false; if(!instance->setContext(instance->context = context)) return false; return true; } auto Audio::setDevice(string device) -> bool { if(instance->device == device) return true; if(!instance->hasDevice(device)) return false; if(!instance->setDevice(instance->device = device)) return false; return true; } auto Audio::setBlocking(bool blocking) -> bool { if(instance->blocking == blocking) return true; if(!instance->hasBlocking()) return false; if(!instance->setBlocking(instance->blocking = blocking)) return false; for(auto& resampler : resamplers) resampler.reset(instance->frequency); return true; } auto Audio::setDynamic(bool dynamic) -> bool { if(instance->dynamic == dynamic) return true; if(!instance->hasDynamic()) return false; if(!instance->setDynamic(instance->dynamic = dynamic)) return false; return true; } auto Audio::setChannels(u32 channels) -> bool { if(resamplers.size() != channels) { resamplers.reset(); resamplers.resize(channels); for(auto& resampler : resamplers) resampler.reset(instance->frequency); } if(instance->channels == channels) return true; if(!instance->hasChannels(channels)) return false; if(!instance->setChannels(instance->channels = channels)) return false; return true; } auto Audio::setFrequency(u32 frequency) -> bool { if(instance->frequency == frequency) return true; if(!instance->hasFrequency(frequency)) return false; if(!instance->setFrequency(instance->frequency = frequency)) return false; for(auto& resampler : resamplers) resampler.reset(instance->frequency); return true; } auto Audio::setLatency(u32 latency) -> bool { if(instance->latency == latency) return true; if(!instance->hasLatency(latency)) return false; if(!instance->setLatency(instance->latency = latency)) return false; return true; } // auto Audio::clear() -> void { for(auto& resampler : resamplers) resampler.reset(instance->frequency); return instance->clear(); } auto Audio::level() -> f64 { return instance->level(); } auto Audio::output(const f64 samples[]) -> void { if(!instance->dynamic) return instance->output(samples); f64 maxDelta = 0.005; f64 fillLevel = instance->level(); f64 dynamicFrequency = ((1.0 - maxDelta) + 2.0 * fillLevel * maxDelta) * instance->frequency; for(auto& resampler : resamplers) { resampler.setInputFrequency(dynamicFrequency); resampler.write(*samples++); } while(resamplers.first().pending()) { f64 samples[instance->channels]; for(u32 n : range(instance->channels)) samples[n] = resamplers[n].read(); instance->output(samples); } } // auto Audio::create(string driver) -> bool { self.instance.reset(); if(!driver) driver = optimalDriver(); #if defined(AUDIO_ALSA) if(driver == "ALSA") self.instance = new AudioALSA(*this); #endif #if defined(AUDIO_AO) if(driver == "libao") self.instance = new AudioAO(*this); #endif #if defined(AUDIO_ASIO) if(driver == "ASIO") self.instance = new AudioASIO(*this); #endif #if defined(AUDIO_DIRECTSOUND) if(driver == "DirectSound 7.0") self.instance = new AudioDirectSound(*this); #endif #if defined(AUDIO_OPENAL) if(driver == "OpenAL") self.instance = new AudioOpenAL(*this); #endif #if defined(AUDIO_OSS) if(driver == "OSS") self.instance = new AudioOSS(*this); #endif #if defined(AUDIO_PULSEAUDIO) if(driver == "PulseAudio") self.instance = new AudioPulseAudio(*this); #endif #if defined(AUDIO_PULSEAUDIOSIMPLE) if(driver == "PulseAudio Simple") self.instance = new AudioPulseAudioSimple(*this); #endif #if defined(AUDIO_WASAPI) if(driver == "WASAPI") self.instance = new AudioWASAPI(*this); #endif #if defined(AUDIO_WAVEOUT) if(driver == "waveOut") self.instance = new AudioWaveOut(*this); #endif #if defined(AUDIO_XAUDIO2) if(driver == "XAudio 2.1") self.instance = new AudioXAudio2(*this); #endif if(!self.instance) self.instance = new AudioDriver(*this); return self.instance->create(); } auto Audio::hasDrivers() -> vector { return { #if defined(AUDIO_ASIO) "ASIO", #endif #if defined(AUDIO_WASAPI) "WASAPI", #endif #if defined(AUDIO_XAUDIO2) "XAudio 2.1", #endif #if defined(AUDIO_DIRECTSOUND) "DirectSound 7.0", #endif #if defined(AUDIO_WAVEOUT) "waveOut", #endif #if defined(AUDIO_ALSA) "ALSA", #endif #if defined(AUDIO_OSS) "OSS", #endif #if defined(AUDIO_OPENAL) "OpenAL", #endif #if defined(AUDIO_PULSEAUDIO) "PulseAudio", #endif #if defined(AUDIO_PULSEAUDIOSIMPLE) "PulseAudio Simple", #endif #if defined(AUDIO_AO) "libao", #endif "None"}; } auto Audio::optimalDriver() -> string { #if defined(AUDIO_WASAPI) return "WASAPI"; #elif defined(AUDIO_ASIO) return "ASIO"; #elif defined(AUDIO_XAUDIO2) return "XAudio 2.1"; #elif defined(AUDIO_DIRECTSOUND) return "DirectSound 7.0"; #elif defined(AUDIO_WAVEOUT) return "waveOut"; #elif defined(AUDIO_PULSEAUDIO) return "PulseAudio"; #elif defined(AUDIO_PULSEAUDIOSIMPLE) return "PulseAudio Simple"; #elif defined(AUDIO_OPENAL) return "OpenAL"; #elif defined(AUDIO_AO) return "libao"; #elif defined(AUDIO_ALSA) return "ALSA"; #elif defined(AUDIO_OSS) return "OSS"; #else return "None"; #endif } auto Audio::safestDriver() -> string { #if defined(AUDIO_WAVEOUT) return "waveOut"; #elif defined(AUDIO_DIRECTSOUND) return "DirectSound 7.0"; #elif defined(AUDIO_WASAPI) return "WASAPI"; #elif defined(AUDIO_XAUDIO2) return "XAudio 2.1"; #elif defined(AUDIO_ALSA) return "ALSA"; #elif defined(AUDIO_OSS) return "OSS"; #elif defined(AUDIO_OPENAL) return "OpenAL"; #elif defined(AUDIO_PULSEAUDIO) return "PulseAudio"; #elif defined(AUDIO_PULSEAUDIOSIMPLE) return "PulseAudio Simple"; #elif defined(AUDIO_AO) return "libao"; #elif defined(AUDIO_ASIO) return "ASIO"; #else return "None"; #endif } } ares-126/ruby/audio/audio.hpp000066400000000000000000000106721415063341600162230ustar00rootroot00000000000000struct Audio; struct AudioDriver { enum class Format : u32 { none, int16, int32, float32, float64 }; AudioDriver(Audio& super) : super(super) {} virtual ~AudioDriver() = default; virtual auto create() -> bool { return true; } virtual auto driver() -> string { return "None"; } virtual auto ready() -> bool { return true; } virtual auto hasExclusive() -> bool { return false; } virtual auto hasContext() -> bool { return false; } virtual auto hasDevices() -> vector { return {"Default"}; } virtual auto hasBlocking() -> bool { return false; } virtual auto hasDynamic() -> bool { return false; } virtual auto hasChannels() -> vector { return {2}; } virtual auto hasFrequencies() -> vector { return {48000}; } virtual auto hasLatencies() -> vector { return {0}; } auto hasDevice(string device) -> bool { return (bool)hasDevices().find(device); } auto hasChannels(u32 channels) -> bool { return (bool)hasChannels().find(channels); } auto hasFrequency(u32 frequency) -> bool { return (bool)hasFrequencies().find(frequency); } auto hasLatency(u32 latency) -> bool { return (bool)hasLatencies().find(latency); } virtual auto setExclusive(bool exclusive) -> bool { return true; } virtual auto setContext(uintptr context) -> bool { return true; } virtual auto setDevice(string device) -> bool { return true; } virtual auto setBlocking(bool blocking) -> bool { return true; } virtual auto setDynamic(bool dynamic) -> bool { return true; } virtual auto setChannels(u32 channels) -> bool { return true; } virtual auto setFrequency(u32 frequency) -> bool { return true; } virtual auto setLatency(u32 latency) -> bool { return true; } virtual auto clear() -> void {} virtual auto level() -> f64 { return 0.5; } virtual auto output(const f64 samples[]) -> void {} protected: Audio& super; friend class Audio; bool exclusive = false; uintptr context = 0; string device = "Default"; bool blocking = false; bool dynamic = false; u32 channels = 2; u32 frequency = 48000; u32 latency = 0; }; struct Audio { static auto hasDrivers() -> vector; static auto hasDriver(string driver) -> bool { return (bool)hasDrivers().find(driver); } static auto optimalDriver() -> string; static auto safestDriver() -> string; Audio() : self(*this) { reset(); } explicit operator bool() { return instance->driver() != "None"; } auto reset() -> void { instance = new AudioDriver(*this); } auto create(string driver = "") -> bool; auto driver() -> string { return instance->driver(); } auto ready() -> bool { return instance->ready(); } auto hasExclusive() -> bool { return instance->hasExclusive(); } auto hasContext() -> bool { return instance->hasContext(); } auto hasDevices() -> vector { return instance->hasDevices(); } auto hasBlocking() -> bool { return instance->hasBlocking(); } auto hasDynamic() -> bool { return instance->hasDynamic(); } auto hasChannels() -> vector { return instance->hasChannels(); } auto hasFrequencies() -> vector { return instance->hasFrequencies(); } auto hasLatencies() -> vector { return instance->hasLatencies(); } auto hasDevice(string device) -> bool { return instance->hasDevice(device); } auto hasChannels(u32 channels) -> bool { return instance->hasChannels(channels); } auto hasFrequency(u32 frequency) -> bool { return instance->hasFrequency(frequency); } auto hasLatency(u32 latency) -> bool { return instance->hasLatency(latency); } auto exclusive() -> bool { return instance->exclusive; } auto context() -> uintptr { return instance->context; } auto device() -> string { return instance->device; } auto blocking() -> bool { return instance->blocking; } auto dynamic() -> bool { return instance->dynamic; } auto channels() -> u32 { return instance->channels; } auto frequency() -> u32 { return instance->frequency; } auto latency() -> u32 { return instance->latency; } auto setExclusive(bool exclusive) -> bool; auto setContext(uintptr context) -> bool; auto setDevice(string device) -> bool; auto setBlocking(bool blocking) -> bool; auto setDynamic(bool dynamic) -> bool; auto setChannels(u32 channels) -> bool; auto setFrequency(u32 frequency) -> bool; auto setLatency(u32 latency) -> bool; auto clear() -> void; auto level() -> double; auto output(const f64 samples[]) -> void; protected: Audio& self; unique_pointer instance; vector resamplers; }; ares-126/ruby/audio/directsound.cpp000066400000000000000000000120131415063341600174270ustar00rootroot00000000000000#include struct AudioDirectSound : AudioDriver { AudioDirectSound& self = *this; AudioDirectSound(Audio& super) : AudioDriver(super) {} ~AudioDirectSound() { terminate(); } auto create() -> bool override { super.setChannels(2); super.setFrequency(48000); super.setLatency(40); return initialize(); } auto driver() -> string override { return "DirectSound 7.0"; } auto ready() -> bool override { return _ready; } auto hasBlocking() -> bool override { return true; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto hasLatencies() -> vector override { return {40, 60, 80, 100}; } auto setBlocking(bool blocking) -> bool override { return true; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto clear() -> void override { if(!ready()) return; _ringRead = 0; _ringWrite = _rings - 1; _ringDistance = _rings - 1; if(_buffer) memory::fill(_buffer, _period * _rings); _offset = 0; if(!_secondary) return; _secondary->Stop(); _secondary->SetCurrentPosition(0); void* output; DWORD size; _secondary->Lock(0, _period * _rings * 4, &output, &size, 0, 0, 0); memory::fill(output, size); _secondary->Unlock(output, size, 0, 0); _secondary->Play(0, 0, DSBPLAY_LOOPING); } auto output(const f64 samples[]) -> void override { if(!ready()) return; _buffer[_offset] = (u16)sclamp<16>(samples[0] * 32767.0) << 0; _buffer[_offset] |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; if(++_offset < _period) return; _offset = 0; if(self.blocking) { //wait until playback buffer has an empty ring to write new audio data to while(_ringDistance >= _rings - 1) { DWORD position; _secondary->GetCurrentPosition(&position, 0); u32 ringActive = position / (_period * 4); if(ringActive == _ringRead) continue; //subtract number of played rings from ring distance counter _ringDistance -= (_rings + ringActive - _ringRead) % _rings; _ringRead = ringActive; if(_ringDistance < 2) { //buffer underflow; set max distance to recover quickly _ringDistance = _rings - 1; _ringWrite = (_rings + _ringRead - 1) % _rings; break; } } } _ringWrite = (_ringWrite + 1) % _rings; _ringDistance = (_ringDistance + 1) % _rings; void* output; DWORD size; if(_secondary->Lock(_ringWrite * _period * 4, _period * 4, &output, &size, 0, 0, 0) == DS_OK) { memory::copy(output, _buffer, _period); _secondary->Unlock(output, size, 0, 0); } } private: auto initialize() -> bool { terminate(); _rings = 8; _period = self.frequency * self.latency / _rings / 1000.0 + 0.5; _buffer = new u32[_period * _rings]; _offset = 0; if(DirectSoundCreate(0, &_interface, 0) != DS_OK) return terminate(), false; _interface->SetCooperativeLevel(GetDesktopWindow(), DSSCL_PRIORITY); DSBUFFERDESC primaryDescription = {}; primaryDescription.dwSize = sizeof(DSBUFFERDESC); primaryDescription.dwFlags = DSBCAPS_PRIMARYBUFFER; primaryDescription.dwBufferBytes = 0; primaryDescription.lpwfxFormat = 0; _interface->CreateSoundBuffer(&primaryDescription, &_primary, 0); WAVEFORMATEX waveFormat = {}; waveFormat.wFormatTag = WAVE_FORMAT_PCM; waveFormat.nChannels = self.channels; waveFormat.nSamplesPerSec = self.frequency; waveFormat.wBitsPerSample = 16; waveFormat.nBlockAlign = waveFormat.nChannels * waveFormat.wBitsPerSample / 8; waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign; _primary->SetFormat(&waveFormat); DSBUFFERDESC secondaryDescription = {}; secondaryDescription.dwSize = sizeof(DSBUFFERDESC); secondaryDescription.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_CTRLFREQUENCY | DSBCAPS_GLOBALFOCUS | DSBCAPS_LOCSOFTWARE; secondaryDescription.dwBufferBytes = _period * _rings * 4; secondaryDescription.guid3DAlgorithm = GUID_NULL; secondaryDescription.lpwfxFormat = &waveFormat; _interface->CreateSoundBuffer(&secondaryDescription, &_secondary, 0); _secondary->SetFrequency(self.frequency); _secondary->SetCurrentPosition(0); _ready = true; clear(); return true; } auto terminate() -> void { _ready = false; if(_buffer) { delete[] _buffer; _buffer = nullptr; } if(_secondary) { _secondary->Stop(); _secondary->Release(); _secondary = nullptr; } if(_primary) { _primary->Stop(); _primary->Release(); _primary = nullptr; } if(_interface) { _interface->Release(); _interface = nullptr; } } bool _ready = false; LPDIRECTSOUND _interface = nullptr; LPDIRECTSOUNDBUFFER _primary = nullptr; LPDIRECTSOUNDBUFFER _secondary = nullptr; u32* _buffer = nullptr; u32 _offset = 0; u32 _period = 0; u32 _rings = 0; u32 _ringRead = 0; u32 _ringWrite = 0; s32 _ringDistance = 0; }; ares-126/ruby/audio/openal.cpp000066400000000000000000000114371415063341600163730ustar00rootroot00000000000000#if defined(PLATFORM_MACOS) #include #include #else #include #include #endif struct AudioOpenAL : AudioDriver { AudioOpenAL& self = *this; AudioOpenAL(Audio& super) : AudioDriver(super) {} ~AudioOpenAL() { terminate(); } auto create() -> bool override { super.setDevice(hasDevices().first()); super.setChannels(2); super.setFrequency(48000); super.setLatency(20); return initialize(); } auto driver() -> string override { return "OpenAL"; } auto ready() -> bool override { return _ready; } auto hasBlocking() -> bool override { return true; } auto hasDevices() -> vector override { vector devices; if(const char* list = alcGetString(nullptr, ALC_DEVICE_SPECIFIER)) { while(list && *list) { devices.append(list); list += strlen(list) + 1; } } return devices; } auto hasChannels() -> vector override { return {2}; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto hasLatencies() -> vector override { return {20, 40, 60, 80, 100}; } auto setDevice(string device) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return true; } auto setFrequency(uint frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return updateLatency(); } auto output(const f64 samples[]) -> void override { _buffer[_bufferLength] = (u16)sclamp<16>(samples[0] * 32767.0) << 0; _buffer[_bufferLength] |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; if(++_bufferLength < _bufferSize) return; ALuint alBuffer = 0; s32 processed = 0; while(true) { alGetSourcei(_source, AL_BUFFERS_PROCESSED, &processed); while(processed--) { alSourceUnqueueBuffers(_source, 1, &alBuffer); alDeleteBuffers(1, &alBuffer); _queueLength--; } //wait for buffer playback to catch up to sample generation if not synchronizing if(!self.blocking || _queueLength < 3) break; } if(_queueLength < 3) { alGenBuffers(1, &alBuffer); alBufferData(alBuffer, _format, _buffer, _bufferSize * 4, self.frequency); alSourceQueueBuffers(_source, 1, &alBuffer); _queueLength++; } ALint playing; alGetSourcei(_source, AL_SOURCE_STATE, &playing); if(playing != AL_PLAYING) alSourcePlay(_source); _bufferLength = 0; } private: auto initialize() -> bool { terminate(); if(!hasDevices().find(self.device)) self.device = hasDevices().first(); _queueLength = 0; updateLatency(); bool success = false; if(_openAL = alcOpenDevice(self.device)) { if(_context = alcCreateContext(_openAL, nullptr)) { alcMakeContextCurrent(_context); alGenSources(1, &_source); //alSourcef (_source, AL_PITCH, 1.0); //alSourcef (_source, AL_GAIN, 1.0); //alSource3f(_source, AL_POSITION, 0.0, 0.0, 0.0); //alSource3f(_source, AL_VELOCITY, 0.0, 0.0, 0.0); //alSource3f(_source, AL_DIRECTION, 0.0, 0.0, 0.0); //alSourcef (_source, AL_ROLLOFF_FACTOR, 0.0); //alSourcei (_source, AL_SOURCE_RELATIVE, AL_TRUE); alListener3f(AL_POSITION, 0.0, 0.0, 0.0); alListener3f(AL_VELOCITY, 0.0, 0.0, 0.0); ALfloat listenerOrientation[] = {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}; alListenerfv(AL_ORIENTATION, listenerOrientation); success = true; } } if(!success) return terminate(), false; return _ready = true; } auto terminate() -> void { _ready = false; if(alIsSource(_source) == AL_TRUE) { s32 playing = 0; alGetSourcei(_source, AL_SOURCE_STATE, &playing); if(playing == AL_PLAYING) { alSourceStop(_source); s32 queued = 0; alGetSourcei(_source, AL_BUFFERS_QUEUED, &queued); while(queued--) { ALuint alBuffer = 0; alSourceUnqueueBuffers(_source, 1, &alBuffer); alDeleteBuffers(1, &alBuffer); _queueLength--; } } alDeleteSources(1, &_source); _source = 0; } if(_context) { alcMakeContextCurrent(nullptr); alcDestroyContext(_context); _context = nullptr; } if(_openAL) { alcCloseDevice(_openAL); _openAL = nullptr; } delete[] _buffer; _buffer = nullptr; } auto updateLatency() -> bool { delete[] _buffer; _bufferSize = self.frequency * self.latency / 1000.0 + 0.5; _buffer = new uint32_t[_bufferSize](); return true; } bool _ready = false; ALCdevice* _openAL = nullptr; ALCcontext* _context = nullptr; ALuint _source = 0; ALenum _format = AL_FORMAT_STEREO16; u32 _queueLength = 0; u32* _buffer = nullptr; u32 _bufferLength = 0; u32 _bufferSize = 0; }; ares-126/ruby/audio/oss.cpp000066400000000000000000000067171415063341600157260ustar00rootroot00000000000000#include #include #include #include //OSSv4 features: define fallbacks for OSSv3 (where these ioctls are ignored) #ifndef SNDCTL_DSP_COOKEDMODE #define SNDCTL_DSP_COOKEDMODE _IOW('P', 30, int) #endif #ifndef SNDCTL_DSP_POLICY #define SNDCTL_DSP_POLICY _IOW('P', 45, int) #endif struct AudioOSS : AudioDriver { AudioOSS& self = *this; AudioOSS(Audio& super) : AudioDriver(super) {} ~AudioOSS() { terminate(); } auto create() -> bool override { super.setDevice("/dev/dsp"); super.setChannels(2); super.setFrequency(48000); super.setLatency(3); buffer.resize(64); return initialize(); } auto driver() -> string override { return "OSS"; } auto ready() -> bool override { return _fd >= 0; } auto hasBlocking() -> bool override { return true; } auto hasDynamic() -> bool override { return true; } auto hasDevices() -> vector override { vector devices; devices.append("/dev/dsp"); for(auto& device : directory::files("/dev/", "dsp?*")) devices.append(string{"/dev/", device}); return devices; } auto hasChannels() -> vector override { return {1, 2}; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto hasLatencies() -> vector override { return {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; } auto setDevice(string device) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return updateBlocking(); } auto setChannels(u32 channels) -> bool override { return initialize(); } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto clear() -> void override { buffer.resize(64); } auto level() -> double override { audio_buf_info info; ioctl(_fd, SNDCTL_DSP_GETOSPACE, &info); return (double)(_bufferSize - info.bytes) / _bufferSize; } auto output(const double samples[]) -> void override { for(u32 n : range(self.channels)) { buffer.write(sclamp<16>(samples[n] * 32767.0)); if(buffer.full()) { write(_fd, buffer.data(), buffer.capacity()); buffer.flush(); } } } private: auto initialize() -> bool { terminate(); if(!hasDevices().find(self.device)) self.device = hasDevices().first(); _fd = open(self.device, O_WRONLY | O_NONBLOCK); if(_fd < 0) return false; int cooked = 1; ioctl(_fd, SNDCTL_DSP_COOKEDMODE, &cooked); //policy: 0 = minimum latency (higher CPU usage); 10 = maximum latency (lower CPU usage) int policy = min(10, self.latency); ioctl(_fd, SNDCTL_DSP_POLICY, &policy); int channels = self.channels; ioctl(_fd, SNDCTL_DSP_CHANNELS, &channels); ioctl(_fd, SNDCTL_DSP_SETFMT, &_format); int frequency = self.frequency; ioctl(_fd, SNDCTL_DSP_SPEED, &frequency); updateBlocking(); audio_buf_info info; ioctl(_fd, SNDCTL_DSP_GETOSPACE, &info); _bufferSize = info.bytes; return true; } auto terminate() -> void { if(!ready()) return; close(_fd); _fd = -1; } auto updateBlocking() -> bool { if(!ready()) return false; auto flags = fcntl(_fd, F_GETFL); if(flags < 0) return false; self.blocking ? flags &=~ O_NONBLOCK : flags |= O_NONBLOCK; fcntl(_fd, F_SETFL, flags); return true; } s32 _fd = -1; s32 _format = AFMT_S16_LE; s32 _bufferSize = 1; queue buffer; }; ares-126/ruby/audio/pulseaudio-simple.cpp000066400000000000000000000043611415063341600205540ustar00rootroot00000000000000#include #include struct AudioPulseAudioSimple : AudioDriver { AudioPulseAudioSimple& self = *this; AudioPulseAudioSimple(Audio& super) : AudioDriver(super) {} ~AudioPulseAudioSimple() { terminate(); } auto create() -> bool override { super.setBlocking(true); super.setChannels(2); super.setFrequency(48000); return initialize(); } auto driver() -> string override { return "PulseAudio Simple"; } auto ready() -> bool override { return _ready; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto output(const f64 samples[]) -> void override { if(!ready()) return; _buffer[_offset] = (u16)sclamp<16>(samples[0] * 32767.0) << 0; _buffer[_offset] |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; if(++_offset >= 64) { int error; pa_simple_write(_interface, (const void*)_buffer, _offset * sizeof(u32), &error); _offset = 0; } } private: auto initialize() -> bool { terminate(); pa_sample_spec specification; specification.format = PA_SAMPLE_S16LE; specification.channels = 2; specification.rate = self.frequency; int error = 0; _interface = pa_simple_new( 0, //default server "ruby::pulseAudioSimple", //application name PA_STREAM_PLAYBACK, //direction 0, //default device "audio", //stream description &specification, //sample format 0, //default channel map 0, //default buffering attributes &error //error code ); if(!_interface) return false; _buffer = new u32[64](); _offset = 0; return _ready = true; } auto terminate() -> void { _ready = false; if(_interface) { int error; pa_simple_flush(_interface, &error); pa_simple_free(_interface); _interface = nullptr; } if(_buffer) { delete[] _buffer; _buffer = nullptr; } } bool _ready = false; pa_simple* _interface = nullptr; u32* _buffer = nullptr; u32 _offset = 0; }; ares-126/ruby/audio/pulseaudio.cpp000066400000000000000000000102751415063341600172660ustar00rootroot00000000000000#include struct AudioPulseAudio : AudioDriver { AudioPulseAudio& self = *this; AudioPulseAudio(Audio& super) : AudioDriver(super) {} ~AudioPulseAudio() { terminate(); } auto create() -> bool override { super.setChannels(2); super.setFrequency(48000); super.setLatency(40); return initialize(); } auto driver() -> string override { return "PulseAudio"; } auto ready() -> bool override { return _ready; } auto hasBlocking() -> bool override { return true; } auto hasDynamic() -> bool override { return true; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto hasLatencies() -> vector override { return {20, 40, 60, 80, 100}; } auto setBlocking(bool blocking) -> bool override { return true; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto level() -> double override { pa_mainloop_iterate(_mainLoop, 0, nullptr); auto length = pa_stream_writable_size(_stream); return (double)(_bufferSize - length) / _bufferSize; } auto output(const double samples[]) -> void override { pa_stream_begin_write(_stream, (void**)&_buffer, &_period); _buffer[_offset] = (u16)sclamp<16>(samples[0] * 32767.0) << 0; _buffer[_offset] |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; if((++_offset + 1) * pa_frame_size(&_specification) <= _period) return; while(true) { pa_mainloop_iterate(_mainLoop, 0, nullptr); auto length = pa_stream_writable_size(_stream); if(length >= _offset * pa_frame_size(&_specification)) break; if(!self.blocking) { _offset = 0; return; } } pa_stream_write(_stream, (const void*)_buffer, _offset * pa_frame_size(&_specification), nullptr, 0LL, PA_SEEK_RELATIVE); _buffer = nullptr; _offset = 0; } private: auto initialize() -> bool { terminate(); _mainLoop = pa_mainloop_new(); _context = pa_context_new(pa_mainloop_get_api(_mainLoop), "ruby::pulseAudio"); pa_context_connect(_context, nullptr, PA_CONTEXT_NOFLAGS, nullptr); pa_context_state_t contextState; do { pa_mainloop_iterate(_mainLoop, 1, nullptr); contextState = pa_context_get_state(_context); if(!PA_CONTEXT_IS_GOOD(contextState)) return false; } while(contextState != PA_CONTEXT_READY); _specification.format = PA_SAMPLE_S16LE; _specification.channels = 2; _specification.rate = self.frequency; _stream = pa_stream_new(_context, "audio", &_specification, nullptr); pa_buffer_attr bufferAttributes; bufferAttributes.maxlength = -1; bufferAttributes.tlength = pa_usec_to_bytes(self.latency * PA_USEC_PER_MSEC, &_specification); bufferAttributes.prebuf = -1; bufferAttributes.minreq = -1; bufferAttributes.fragsize = -1; pa_stream_flags_t flags = (pa_stream_flags_t)(PA_STREAM_ADJUST_LATENCY | PA_STREAM_VARIABLE_RATE); pa_stream_connect_playback(_stream, nullptr, &bufferAttributes, flags, nullptr, nullptr); pa_stream_state_t streamState; do { pa_mainloop_iterate(_mainLoop, 1, nullptr); streamState = pa_stream_get_state(_stream); if(!PA_STREAM_IS_GOOD(streamState)) return false; } while(streamState != PA_STREAM_READY); const pa_buffer_attr* attributes = pa_stream_get_buffer_attr(_stream); _period = attributes->minreq; _bufferSize = attributes->tlength; _offset = 0; return _ready = true; } auto terminate() -> void { _ready = false; if(_buffer) { pa_stream_cancel_write(_stream); _buffer = nullptr; } if(_stream) { pa_stream_disconnect(_stream); pa_stream_unref(_stream); _stream = nullptr; } if(_context) { pa_context_disconnect(_context); pa_context_unref(_context); _context = nullptr; } if(_mainLoop) { pa_mainloop_free(_mainLoop); _mainLoop = nullptr; } } bool _ready = false; u32* _buffer = nullptr; size_t _period = 0; size_t _bufferSize = 0; u32 _offset = 0; pa_mainloop* _mainLoop = nullptr; pa_context* _context = nullptr; pa_stream* _stream = nullptr; pa_sample_spec _specification; }; ares-126/ruby/audio/wasapi.cpp000066400000000000000000000234061415063341600164000ustar00rootroot00000000000000#include #include #include #include #include #include #include struct AudioWASAPI : AudioDriver { AudioWASAPI& self = *this; AudioWASAPI(Audio& super) : AudioDriver(super) { construct(); } ~AudioWASAPI() { destruct(); } auto create() -> bool override { super.setExclusive(false); super.setDevice(hasDevices().first()); super.setBlocking(false); super.setChannels(2); super.setFrequency(48000); super.setLatency(40); return initialize(); } auto driver() -> string override { return "WASAPI"; } auto ready() -> bool override { return self.isReady; } auto hasExclusive() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasDevices() -> vector override { vector devices; for(auto& device : self.devices) devices.append(device.name); return devices; } auto hasChannels() -> vector override { return {self.channels}; } auto hasFrequencies() -> vector override { return {self.frequency}; } auto hasLatencies() -> vector override { return {0, 20, 40, 60, 80, 100}; } auto setExclusive(bool exclusive) -> bool override { return initialize(); } auto setDevice(string device) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return true; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto clear() -> void override { self.queue.read = 0; self.queue.write = 0; self.queue.count = 0; self.audioClient->Stop(); self.audioClient->Reset(); self.audioClient->Start(); } auto output(const f64 samples[]) -> void override { for(u32 n : range(self.channels)) { self.queue.samples[self.queue.write][n] = samples[n]; } self.queue.write++; self.queue.count++; if(self.queue.count >= self.bufferSize) { if(WaitForSingleObject(self.eventHandle, self.blocking ? INFINITE : 0) == WAIT_OBJECT_0) { write(); } } } private: struct Device { string id; string name; }; vector devices; auto construct() -> bool { if(CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&self.enumerator) != S_OK) return false; IMMDevice* defaultDeviceContext = nullptr; if(self.enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDeviceContext) != S_OK) return false; Device defaultDevice; LPWSTR defaultDeviceString = nullptr; defaultDeviceContext->GetId(&defaultDeviceString); defaultDevice.id = (const char*)utf8_t(defaultDeviceString); CoTaskMemFree(defaultDeviceString); IMMDeviceCollection* deviceCollection = nullptr; if(self.enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &deviceCollection) != S_OK) return false; u32 deviceCount = 0; if(deviceCollection->GetCount(&deviceCount) != S_OK) return false; for(u32 deviceIndex : range(deviceCount)) { IMMDevice* deviceContext = nullptr; if(deviceCollection->Item(deviceIndex, &deviceContext) != S_OK) continue; Device device; LPWSTR deviceString = nullptr; deviceContext->GetId(&deviceString); device.id = (const char*)utf8_t(deviceString); CoTaskMemFree(deviceString); IPropertyStore* propertyStore = nullptr; deviceContext->OpenPropertyStore(STGM_READ, &propertyStore); PROPVARIANT propVariant; propertyStore->GetValue(PKEY_Device_FriendlyName, &propVariant); device.name = (const char*)utf8_t(propVariant.pwszVal); propertyStore->Release(); if(device.id == defaultDevice.id) { self.devices.prepend(device); } else { self.devices.append(device); } } deviceCollection->Release(); return true; } auto destruct() -> void { terminate(); if(self.enumerator) { self.enumerator->Release(); self.enumerator = nullptr; } } auto initialize() -> bool { terminate(); string deviceID; if(auto index = self.devices.find([&](auto& device) { return device.name == self.device; })) { deviceID = self.devices[*index].id; } else { return false; } utf16_t deviceString(deviceID); if(self.enumerator->GetDevice(deviceString, &self.audioDevice) != S_OK) return false; if(self.audioDevice->Activate(IID_IAudioClient, CLSCTX_ALL, nullptr, (void**)&self.audioClient) != S_OK) return false; WAVEFORMATEXTENSIBLE waveFormat{}; if(self.exclusive) { IPropertyStore* propertyStore = nullptr; if(self.audioDevice->OpenPropertyStore(STGM_READ, &propertyStore) != S_OK) return false; PROPVARIANT propVariant; if(propertyStore->GetValue(PKEY_AudioEngine_DeviceFormat, &propVariant) != S_OK) return false; waveFormat = *(WAVEFORMATEXTENSIBLE*)propVariant.blob.pBlobData; propertyStore->Release(); if(self.audioClient->GetDevicePeriod(nullptr, &self.devicePeriod) != S_OK) return false; auto latency = max(self.devicePeriod, (REFERENCE_TIME)self.latency * 10'000); //1ms to 100ns units auto result = self.audioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, latency, latency, &waveFormat.Format, nullptr); if(result == AUDCLNT_E_BUFFER_SIZE_NOT_ALIGNED) { if(self.audioClient->GetBufferSize(&self.bufferSize) != S_OK) return false; self.audioClient->Release(); latency = (REFERENCE_TIME)(10'000 * 1'000 * self.bufferSize / waveFormat.Format.nSamplesPerSec); if(self.audioDevice->Activate(IID_IAudioClient, CLSCTX_ALL, nullptr, (void**)&self.audioClient) != S_OK) return false; result = self.audioClient->Initialize(AUDCLNT_SHAREMODE_EXCLUSIVE, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, latency, latency, &waveFormat.Format, nullptr); } if(result != S_OK) return false; DWORD taskIndex = 0; self.taskHandle = AvSetMmThreadCharacteristics(L"Pro Audio", &taskIndex); } else { WAVEFORMATEX* waveFormatEx = nullptr; if(self.audioClient->GetMixFormat(&waveFormatEx) != S_OK) return false; waveFormat = *(WAVEFORMATEXTENSIBLE*)waveFormatEx; CoTaskMemFree(waveFormatEx); if(self.audioClient->GetDevicePeriod(&self.devicePeriod, nullptr)) return false; auto latency = max(self.devicePeriod, (REFERENCE_TIME)self.latency * 10'000); //1ms to 100ns units if(self.audioClient->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, latency, 0, &waveFormat.Format, nullptr) != S_OK) return false; } self.eventHandle = CreateEvent(nullptr, false, false, nullptr); if(self.audioClient->SetEventHandle(self.eventHandle) != S_OK) return false; if(self.audioClient->GetService(IID_IAudioRenderClient, (void**)&self.renderClient) != S_OK) return false; if(self.audioClient->GetBufferSize(&self.bufferSize) != S_OK) return false; self.channels = waveFormat.Format.nChannels; self.frequency = waveFormat.Format.nSamplesPerSec; self.mode = waveFormat.SubFormat.Data1; self.precision = waveFormat.Format.wBitsPerSample; clear(); return self.isReady = true; } auto terminate() -> void { self.isReady = false; if(self.audioClient) self.audioClient->Stop(); if(self.renderClient) self.renderClient->Release(), self.renderClient = nullptr; if(self.audioClient) self.audioClient->Release(), self.audioClient = nullptr; if(self.audioDevice) self.audioDevice->Release(), self.audioDevice = nullptr; if(self.eventHandle) CloseHandle(self.eventHandle), self.eventHandle = nullptr; if(self.taskHandle) AvRevertMmThreadCharacteristics(self.taskHandle), self.taskHandle = nullptr; } auto write() -> void { u32 available = self.bufferSize; if(!self.exclusive) { u32 padding = 0; self.audioClient->GetCurrentPadding(&padding); available = self.bufferSize - padding; } u32 length = min(available, self.queue.count); u8* buffer = nullptr; if(self.renderClient->GetBuffer(length, &buffer) == S_OK) { u32 bufferFlags = 0; for(u32 _ : range(length)) { f64 samples[8] = {}; if(self.queue.count) { for(u32 n : range(self.channels)) { samples[n] = self.queue.samples[self.queue.read][n]; } self.queue.read++; self.queue.count--; } if(self.mode == 1 && self.precision == 16) { auto output = (u16*)buffer; for(u32 n : range(self.channels)) *output++ = (u16)sclamp<16>(samples[n] * (32768.0 - 1.0)); buffer = (u8*)output; } else if(self.mode == 1 && self.precision == 32) { auto output = (u32*)buffer; for(u32 n : range(self.channels)) *output++ = (u32)sclamp<32>(samples[n] * (65536.0 * 32768.0 - 1.0)); buffer = (u8*)output; } else if(self.mode == 3 && self.precision == 32) { auto output = (f32*)buffer; for(u32 n : range(self.channels)) *output++ = f32(max(-1.0, min(+1.0, samples[n]))); buffer = (u8*)output; } else { //output silence for unsupported sample formats bufferFlags = AUDCLNT_BUFFERFLAGS_SILENT; break; } } self.renderClient->ReleaseBuffer(length, bufferFlags); } } bool isReady = false; u32 mode = 0; u32 precision = 0; struct Queue { f64 samples[65536][8]; u16 read; u16 write; u16 count; } queue; IMMDeviceEnumerator* enumerator = nullptr; IMMDevice* audioDevice = nullptr; IAudioClient* audioClient = nullptr; IAudioRenderClient* renderClient = nullptr; HANDLE eventHandle = nullptr; HANDLE taskHandle = nullptr; REFERENCE_TIME devicePeriod = 0; u32 bufferSize = 0; //in frames }; ares-126/ruby/audio/waveout.cpp000066400000000000000000000105531415063341600166050ustar00rootroot00000000000000#include auto CALLBACK waveOutCallback(HWAVEOUT handle, UINT message, DWORD_PTR userData, DWORD_PTR, DWORD_PTR) -> void; struct AudioWaveOut : AudioDriver { AudioWaveOut& self = *this; AudioWaveOut(Audio& super) : AudioDriver(super) {} ~AudioWaveOut() { terminate(); } auto create() -> bool override { super.setChannels(2); super.setFrequency(44100); super.setLatency(512); return initialize(); } auto driver() -> string override { return "waveOut"; } auto ready() -> bool override { return true; } auto hasDevices() -> vector override { vector devices{"Default"}; for(u32 index : range(waveOutGetNumDevs())) { WAVEOUTCAPS caps{}; if(waveOutGetDevCaps(index, &caps, sizeof(WAVEOUTCAPS)) == MMSYSERR_NOERROR) { devices.append((const char*)utf8_t(caps.szPname)); } } return devices; } auto hasBlocking() -> bool override { return true; } auto hasDynamic() -> bool override { return true; } auto hasFrequencies() -> vector override { return {44100}; } auto hasLatencies() -> vector override { return {512, 384, 320, 256, 192, 160, 128, 96, 80, 64, 48, 40, 32}; } auto setBlocking(bool blocking) -> bool override { return true; } auto setDynamic(bool dynamic) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto clear() -> void override { for(auto& header : headers) { memory::fill(header.lpData, frameCount * 4); } } auto level() -> f64 override { return (f64)((blockQueue * frameCount) + frameIndex) / (blockCount * frameCount); } auto output(const f64 samples[]) -> void override { u16 lsample = sclamp<16>(samples[0] * 32767.0); u16 rsample = sclamp<16>(samples[1] * 32767.0); auto block = (u32*)headers[blockIndex].lpData; block[frameIndex] = lsample << 0 | rsample << 16; if(++frameIndex >= frameCount) { frameIndex = 0; if(self.dynamic) { while(waveOutWrite(handle, &headers[blockIndex], sizeof(WAVEHDR)) == WAVERR_STILLPLAYING); InterlockedIncrement(&blockQueue); } else while(true) { auto result = waveOutWrite(handle, &headers[blockIndex], sizeof(WAVEHDR)); if(!self.blocking || result != WAVERR_STILLPLAYING) break; InterlockedIncrement(&blockQueue); } if(++blockIndex >= blockCount) { blockIndex = 0; } } } private: auto initialize() -> bool { terminate(); auto deviceIndex = hasDevices().find(self.device); if(!deviceIndex) deviceIndex = 0; WAVEFORMATEX format{}; format.wFormatTag = WAVE_FORMAT_PCM; format.nChannels = 2; format.nSamplesPerSec = 44100; format.nBlockAlign = 4; format.wBitsPerSample = 16; format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign; format.cbSize = 0; //not sizeof(WAVEFORMAT); size of extra information after WAVEFORMATEX //-1 = default; 0+ = specific device; subtract -1 as hasDevices() includes "Default" entry waveOutOpen(&handle, (s32)*deviceIndex - 1, &format, (DWORD_PTR)waveOutCallback, (DWORD_PTR)this, CALLBACK_FUNCTION); frameCount = self.latency; blockCount = 32; frameIndex = 0; blockIndex = 0; blockQueue = 0; headers.resize(blockCount); for(auto& header : headers) { memory::fill(&header, sizeof(WAVEHDR)); header.lpData = (LPSTR)LocalAlloc(LMEM_FIXED, frameCount * 4); header.dwBufferLength = frameCount * 4; waveOutPrepareHeader(handle, &header, sizeof(WAVEHDR)); } waveOutSetVolume(handle, 0xffff'ffff); //100% volume (65535 left, 65535 right) waveOutRestart(handle); return true; } auto terminate() -> void { if(!handle) return; waveOutPause(handle); waveOutReset(handle); for(auto& header : headers) { waveOutUnprepareHeader(handle, &header, sizeof(WAVEHDR)); LocalFree(header.lpData); } waveOutClose(handle); handle = nullptr; headers.reset(); } HWAVEOUT handle = nullptr; vector headers; u32 frameCount = 0; u32 blockCount = 0; u32 frameIndex = 0; u32 blockIndex = 0; public: LONG blockQueue = 0; }; auto CALLBACK waveOutCallback(HWAVEOUT handle, UINT message, DWORD_PTR userData, DWORD_PTR, DWORD_PTR) -> void { auto instance = (AudioWaveOut*)userData; if(instance->blockQueue > 0) InterlockedDecrement(&instance->blockQueue); } ares-126/ruby/audio/xaudio2.cpp000066400000000000000000000154651415063341600164750ustar00rootroot00000000000000#include "xaudio2.hpp" #undef interface struct AudioXAudio2 : AudioDriver, public IXAudio2VoiceCallback { enum : u32 { Buffers = 32 }; AudioXAudio2& self = *this; AudioXAudio2(Audio& super) : AudioDriver(super) { construct(); } ~AudioXAudio2() { destruct(); } auto create() -> bool override { super.setDevice(hasDevices().first()); super.setChannels(2); super.setFrequency(48000); super.setLatency(40); return initialize(); } auto driver() -> string override { return "XAudio 2.1"; } auto ready() -> bool override { return self.isReady; } auto hasBlocking() -> bool override { return true; } auto hasDynamic() -> bool override { return true; } auto hasDevices() -> vector override { vector devices; for(auto& device : self.devices) devices.append(device.name); return devices; } auto hasFrequencies() -> vector override { return {44100, 48000, 96000}; } auto hasLatencies() -> vector override { return {20, 40, 60, 80, 100}; } auto setDevice(string device) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return true; } auto setFrequency(u32 frequency) -> bool override { return initialize(); } auto setLatency(u32 latency) -> bool override { return initialize(); } auto clear() -> void override { self.sourceVoice->Stop(0); self.sourceVoice->FlushSourceBuffers(); //calls OnBufferEnd for all currently submitted buffers self.index = 0; self.queue = 0; for(u32 n : range(Buffers)) self.buffers[n].fill(); self.sourceVoice->Start(0); } auto level() -> f64 override { XAUDIO2_VOICE_STATE state{}; self.sourceVoice->GetState(&state); u32 level = state.BuffersQueued * self.period + buffers[self.index].size() - state.SamplesPlayed % self.period; u32 limit = Buffers * self.period; return (f64)level / limit; } auto output(const f64 samples[]) -> void override { u32 frame = 0; frame |= (u16)sclamp<16>(samples[0] * 32767.0) << 0; frame |= (u16)sclamp<16>(samples[1] * 32767.0) << 16; auto& buffer = self.buffers[self.index]; buffer.write(frame); if(!buffer.full()) return; buffer.flush(); if(self.queue == Buffers - 1) { if(self.blocking) { //wait until there is at least one other free buffer for the next sample while(self.queue == Buffers - 1); } else { //there is no free buffer for the next block, so ignore the current contents return; } } write(buffer.data(), buffer.capacity()); self.index = (self.index + 1) % Buffers; } private: struct Device { u32 id = 0; u32 channels = 0; u32 frequency = 0; Format format = Format::none; string name; }; vector devices; auto construct() -> void { XAudio2Create(&self.interface, 0 , XAUDIO2_DEFAULT_PROCESSOR); u32 deviceCount = 0; self.interface->GetDeviceCount(&deviceCount); for(u32 deviceIndex : range(deviceCount)) { XAUDIO2_DEVICE_DETAILS deviceDetails{}; self.interface->GetDeviceDetails(deviceIndex, &deviceDetails); auto format = deviceDetails.OutputFormat.Format.wFormatTag; auto bits = deviceDetails.OutputFormat.Format.wBitsPerSample; Device device; device.id = deviceIndex; device.name = (const char*)utf8_t(deviceDetails.DisplayName); device.channels = deviceDetails.OutputFormat.Format.nChannels; device.frequency = deviceDetails.OutputFormat.Format.nSamplesPerSec; if(format == WAVE_FORMAT_PCM) { if(bits == 16) device.format = Format::int16; if(bits == 32) device.format = Format::int32; } else if(format == WAVE_FORMAT_IEEE_FLOAT) { if(bits == 32) device.format = Format::float32; } //ensure devices.first() is the default device if(deviceDetails.Role & DefaultGameDevice) { devices.prepend(device); } else { devices.append(device); } } } auto destruct() -> void { terminate(); if(self.interface) { self.interface->Release(); self.interface = nullptr; } } auto initialize() -> bool { terminate(); if(!self.interface) return false; self.period = self.frequency * self.latency / Buffers / 1000.0 + 0.5; for(u32 n : range(Buffers)) buffers[n].resize(self.period); self.index = 0; self.queue = 0; if(!hasDevices().find(self.device)) self.device = hasDevices().first(); u32 deviceID = devices[hasDevices().find(self.device)()].id; if(FAILED(self.interface->CreateMasteringVoice(&self.masterVoice, self.channels, self.frequency, 0, deviceID, nullptr))) return terminate(), false; WAVEFORMATEX waveFormat{}; waveFormat.wFormatTag = WAVE_FORMAT_PCM; waveFormat.nChannels = self.channels; waveFormat.nSamplesPerSec = self.frequency; waveFormat.nBlockAlign = 4; waveFormat.wBitsPerSample = 16; waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign; waveFormat.cbSize = 0; if(FAILED(self.interface->CreateSourceVoice(&self.sourceVoice, (WAVEFORMATEX*)&waveFormat, XAUDIO2_VOICE_NOSRC, XAUDIO2_DEFAULT_FREQ_RATIO, this, nullptr, nullptr))) return terminate(), false; clear(); return self.isReady = true; } auto terminate() -> void { self.isReady = false; if(self.sourceVoice) { self.sourceVoice->Stop(0); self.sourceVoice->DestroyVoice(); self.sourceVoice = nullptr; } if(self.masterVoice) { self.masterVoice->DestroyVoice(); self.masterVoice = nullptr; } } auto write(const u32* audioData, u32 bytes) -> void { XAUDIO2_BUFFER buffer{}; buffer.AudioBytes = bytes; buffer.pAudioData = (const BYTE*)audioData; buffer.pContext = nullptr; InterlockedIncrement(&self.queue); self.sourceVoice->SubmitSourceBuffer(&buffer); } bool isReady = false; queue buffers[Buffers]; u32 period = 0; //amount (in 32-bit frames) of samples per buffer u32 index = 0; //current buffer for writing samples to volatile long queue = 0; //how many buffers are queued and ready for playback IXAudio2* interface = nullptr; IXAudio2MasteringVoice* masterVoice = nullptr; IXAudio2SourceVoice* sourceVoice = nullptr; //inherited from IXAudio2VoiceCallback STDMETHODIMP_(void) OnBufferStart(void* pBufferContext) noexcept override {} STDMETHODIMP_(void) OnLoopEnd(void* pBufferContext) noexcept override {} STDMETHODIMP_(void) OnStreamEnd() noexcept override {} STDMETHODIMP_(void) OnVoiceError(void* pBufferContext, HRESULT Error) noexcept override {} STDMETHODIMP_(void) OnVoiceProcessingPassEnd() noexcept override {} STDMETHODIMP_(void) OnVoiceProcessingPassStart(UINT32 BytesRequired) noexcept override {} STDMETHODIMP_(void) OnBufferEnd(void* pBufferContext) noexcept override { InterlockedDecrement(&self.queue); } }; ares-126/ruby/audio/xaudio2.hpp000066400000000000000000000261551415063341600165000ustar00rootroot00000000000000#pragma once //ruby-specific header to provide mingw-friendly xaudio2 interfaces //64-bit GCC fix #define GUID_EXT EXTERN_C #define GUID_SECT #include #include #define DEFINE_GUID_X(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) GUID_EXT const GUID n GUID_SECT = {l, w1, w2, {b1, b2, b3, b4, b5, b6, b7, b8}} #define DEFINE_CLSID_X(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ DEFINE_GUID_X(CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) #define DEFINE_IID_X(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ DEFINE_GUID_X(IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) #define X2DEFAULT(x) = x DEFINE_CLSID_X(XAudio2, e21a7345, eb21, 468e, be, 50, 80, 4d, b9, 7c, f7, 08); DEFINE_CLSID_X(XAudio2_Debug, f7a76c21, 53d4, 46bb, ac, 53, 8b, 45, 9c, ae, 46, bd); DEFINE_IID_X(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb); DECLARE_INTERFACE(IXAudio2Voice); #define XAUDIO2_COMMIT_NOW 0 #define XAUDIO2_DEFAULT_CHANNELS 0 #define XAUDIO2_DEFAULT_SAMPLERATE 0 #define XAUDIO2_DEFAULT_FREQ_RATIO 4.0f #define XAUDIO2_DEBUG_ENGINE 0x0001 #define XAUDIO2_VOICE_NOSRC 0x0004 typedef enum XAUDIO2_DEVICE_ROLE { NotDefaultDevice = 0x0, DefaultConsoleDevice = 0x1, DefaultMultimediaDevice = 0x2, DefaultCommunicationsDevice = 0x4, DefaultGameDevice = 0x8, GlobalDefaultDevice = 0xf, InvalidDeviceRole = ~GlobalDefaultDevice, } XAUDIO2_DEVICE_ROLE; typedef struct XAUDIO2_DEVICE_DETAILS { WCHAR DeviceID[256]; WCHAR DisplayName[256]; XAUDIO2_DEVICE_ROLE Role; WAVEFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS; typedef struct XAUDIO2_VOICE_DETAILS { UINT32 CreationFlags; UINT32 InputChannels; UINT32 InputSampleRate; } XAUDIO2_VOICE_DETAILS; typedef enum XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER { Processor1 = 0x00000001, Processor2 = 0x00000002, Processor3 = 0x00000004, Processor4 = 0x00000008, Processor5 = 0x00000010, Processor6 = 0x00000020, Processor7 = 0x00000040, Processor8 = 0x00000080, Processor9 = 0x00000100, Processor10 = 0x00000200, Processor11 = 0x00000400, Processor12 = 0x00000800, Processor13 = 0x00001000, Processor14 = 0x00002000, Processor15 = 0x00004000, Processor16 = 0x00008000, Processor17 = 0x00010000, Processor18 = 0x00020000, Processor19 = 0x00040000, Processor20 = 0x00080000, Processor21 = 0x00100000, Processor22 = 0x00200000, Processor23 = 0x00400000, Processor24 = 0x00800000, Processor25 = 0x01000000, Processor26 = 0x02000000, Processor27 = 0x04000000, Processor28 = 0x08000000, Processor29 = 0x10000000, Processor30 = 0x20000000, Processor31 = 0x40000000, Processor32 = 0x80000000, XAUDIO2_ANY_PROCESSOR = 0xffffffff, XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR, } XAUDIO2_WINDOWS_PROCESSOR_SPECIFIER, XAUDIO2_PROCESSOR; typedef struct XAUDIO2_VOICE_SENDS { UINT32 OutputCount; IXAudio2Voice** pOutputVoices; } XAUDIO2_VOICE_SENDS; typedef struct XAUDIO2_EFFECT_DESCRIPTOR { IUnknown* pEffect; BOOL InitialState; UINT32 OutputChannels; } XAUDIO2_EFFECT_DESCRIPTOR; typedef struct XAUDIO2_EFFECT_CHAIN { UINT32 EffectCount; const XAUDIO2_EFFECT_DESCRIPTOR* pEffectDescriptors; } XAUDIO2_EFFECT_CHAIN; typedef enum XAUDIO2_FILTER_TYPE { LowPassFilter, BandPassFilter, HighPassFilter, } XAUDIO2_FILTER_TYPE; typedef struct XAUDIO2_FILTER_PARAMETERS { XAUDIO2_FILTER_TYPE Type; float Frequency; float OneOverQ; } XAUDIO2_FILTER_PARAMETERS; typedef struct XAUDIO2_BUFFER { UINT32 Flags; UINT32 AudioBytes; const BYTE* pAudioData; UINT32 PlayBegin; UINT32 PlayLength; UINT32 LoopBegin; UINT32 LoopLength; UINT32 LoopCount; void* pContext; } XAUDIO2_BUFFER; typedef struct XAUDIO2_BUFFER_WMA { const UINT32* pDecodedPacketCumulativeBytes; UINT32 PacketCount; } XAUDIO2_BUFFER_WMA; typedef struct XAUDIO2_VOICE_STATE { void* pCurrentBufferContext; UINT32 BuffersQueued; UINT64 SamplesPlayed; } XAUDIO2_VOICE_STATE; typedef struct XAUDIO2_PERFORMANCE_DATA { UINT64 AudioCyclesSinceLastQuery; UINT64 TotalCyclesSinceLastQuery; UINT32 MinimumCyclesPerQuantum; UINT32 MaximumCyclesPerQuantum; UINT32 MemoryUsageInBytes; UINT32 CurrentLatencyInSamples; UINT32 GlitchesSinceEngineStarted; UINT32 ActiveSourceVoiceCount; UINT32 TotalSourceVoiceCount; UINT32 ActiveSubmixVoiceCount; UINT32 TotalSubmixVoiceCount; UINT32 ActiveXmaSourceVoices; UINT32 ActiveXmaStreams; } XAUDIO2_PERFORMANCE_DATA; typedef struct XAUDIO2_DEBUG_CONFIGURATION { UINT32 TraceMask; UINT32 BreakMask; BOOL LogThreadID; BOOL LogFileline; BOOL LogFunctionName; BOOL LogTiming; } XAUDIO2_DEBUG_CONFIGURATION; DECLARE_INTERFACE(IXAudio2EngineCallback) { STDMETHOD_(void, OnProcessingPassStart) (THIS) PURE; STDMETHOD_(void, OnProcessingPassEnd) (THIS) PURE; STDMETHOD_(void, OnCriticalError) (THIS_ HRESULT Error) PURE; }; DECLARE_INTERFACE(IXAudio2VoiceCallback) { STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE; STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE; STDMETHOD_(void, OnStreamEnd) (THIS) PURE; STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE; STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE; STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE; STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE; }; DECLARE_INTERFACE(IXAudio2Voice) { #define Declare_IXAudio2Voice_Methods() \ STDMETHOD_(void, GetVoiceDetails) (THIS_ XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \ STDMETHOD(SetOutputVoices) (THIS_ const XAUDIO2_VOICE_SENDS* pSendList) PURE; \ STDMETHOD(SetEffectChain) (THIS_ const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \ STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, BOOL* pEnabled) PURE; \ STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \ const void* pParameters, \ UINT32 ParametersByteSize, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, void* pParameters, \ UINT32 ParametersByteSize) PURE; \ STDMETHOD(SetFilterParameters) (THIS_ const XAUDIO2_FILTER_PARAMETERS* pParameters, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD_(void, GetFilterParameters) (THIS_ XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ STDMETHOD(SetVolume) (THIS_ float Volume, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD_(void, GetVolume) (THIS_ float* pVolume) PURE; \ STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, const float* pVolumes, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, float* pVolumes) PURE; \ STDMETHOD(SetOutputMatrix) (THIS_ IXAudio2Voice* pDestinationVoice, \ UINT32 SourceChannels, UINT32 DestinationChannels, \ const float* pLevelMatrix, \ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ STDMETHOD_(void, GetOutputMatrix) (THIS_ IXAudio2Voice* pDestinationVoice, \ UINT32 SourceChannels, UINT32 DestinationChannels, \ float* pLevelMatrix) PURE; \ STDMETHOD_(void, DestroyVoice) (THIS) PURE Declare_IXAudio2Voice_Methods(); }; DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice) { Declare_IXAudio2Voice_Methods(); }; DECLARE_INTERFACE_(IXAudio2SubmixVoice, IXAudio2Voice) { Declare_IXAudio2Voice_Methods(); }; DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice) { Declare_IXAudio2Voice_Methods(); STDMETHOD(Start) (THIS_ UINT32 Flags, UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; STDMETHOD(Stop) (THIS_ UINT32 Flags, UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; STDMETHOD(SubmitSourceBuffer) (THIS_ const XAUDIO2_BUFFER* pBuffer, const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE; STDMETHOD(FlushSourceBuffers) (THIS) PURE; STDMETHOD(Discontinuity) (THIS) PURE; STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; STDMETHOD_(void, GetState) (THIS_ XAUDIO2_VOICE_STATE* pVoiceState) PURE; STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio, UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; STDMETHOD_(void, GetFrequencyRatio) (THIS_ float* pRatio) PURE; }; DECLARE_INTERFACE_(IXAudio2, IUnknown) { STDMETHOD(QueryInterface) (THIS_ REFIID riid, void** ppvInterface) PURE; STDMETHOD_(ULONG, AddRef) (THIS) PURE; STDMETHOD_(ULONG, Release) (THIS) PURE; STDMETHOD(GetDeviceCount) (THIS_ UINT32* pCount) PURE; STDMETHOD(GetDeviceDetails) (THIS_ UINT32 Index, XAUDIO2_DEVICE_DETAILS* pDeviceDetails) PURE; STDMETHOD(Initialize) (THIS_ UINT32 Flags X2DEFAULT(0), XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)) PURE; STDMETHOD(RegisterForCallbacks) (IXAudio2EngineCallback* pCallback) PURE; STDMETHOD_(void, UnregisterForCallbacks) (IXAudio2EngineCallback* pCallback) PURE; STDMETHOD(CreateSourceVoice) (THIS_ IXAudio2SourceVoice** ppSourceVoice, const WAVEFORMATEX* pSourceFormat, UINT32 Flags X2DEFAULT(0), float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO), IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL), const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; STDMETHOD(CreateSubmixVoice) (THIS_ IXAudio2SubmixVoice** ppSubmixVoice, UINT32 InputChannels, UINT32 InputSampleRate, UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0), const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; STDMETHOD(CreateMasteringVoice) (THIS_ IXAudio2MasteringVoice** ppMasteringVoice, UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS), UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE), UINT32 Flags X2DEFAULT(0), UINT32 DeviceIndex X2DEFAULT(0), const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; STDMETHOD(StartEngine) (THIS) PURE; STDMETHOD_(void, StopEngine) (THIS) PURE; STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE; STDMETHOD_(void, GetPerformanceData) (THIS_ XAUDIO2_PERFORMANCE_DATA* pPerfData) PURE; STDMETHOD_(void, SetDebugConfiguration) (THIS_ const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration, void* pReserved X2DEFAULT(NULL)) PURE; }; __inline HRESULT XAudio2Create(IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0), XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)) { IXAudio2* pXAudio2; HRESULT hr = CoCreateInstance((Flags & XAUDIO2_DEBUG_ENGINE) ? CLSID_XAudio2_Debug : CLSID_XAudio2, NULL, CLSCTX_INPROC_SERVER, IID_IXAudio2, (void**)&pXAudio2); if(SUCCEEDED(hr)) { hr = pXAudio2->Initialize(Flags, XAudio2Processor); if(SUCCEEDED(hr)) { *ppXAudio2 = pXAudio2; } else { pXAudio2->Release(); } } return hr; } ares-126/ruby/input/000077500000000000000000000000001415063341600144415ustar00rootroot00000000000000ares-126/ruby/input/carbon.cpp000066400000000000000000000020301415063341600164040ustar00rootroot00000000000000#include "keyboard/carbon.cpp" struct InputCarbon : InputDriver { InputCarbon& self = *this; InputCarbon(Input& super) : InputDriver(super), keyboard(super) {} ~InputCarbon() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "Carbon"; } auto ready() -> bool override { return isReady; } auto acquired() -> bool override { return false; } auto acquire() -> bool override { return false; } auto release() -> bool override { return false; } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { return false; } private: auto initialize() -> bool { terminate(); if(!keyboard.initialize()) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); } bool isReady = false; InputKeyboardCarbon keyboard; }; ares-126/ruby/input/input.cpp000066400000000000000000000067351415063341600163170ustar00rootroot00000000000000#if defined(INPUT_CARBON) #include #endif #if defined(INPUT_QUARTZ) #include #endif #if defined(INPUT_SDL) #include #endif #if defined(INPUT_UDEV) #include #endif #if defined(INPUT_UHID) #include #endif #if defined(INPUT_WINDOWS) #include #endif #if defined(INPUT_XLIB) #include #endif namespace ruby { auto Input::setContext(uintptr context) -> bool { if(instance->context == context) return true; if(!instance->hasContext()) return false; if(!instance->setContext(instance->context = context)) return false; return true; } // auto Input::acquired() -> bool { return instance->acquired(); } auto Input::acquire() -> bool { return instance->acquire(); } auto Input::release() -> bool { return instance->release(); } auto Input::poll() -> vector> { return instance->poll(); } auto Input::rumble(u64 id, bool enable) -> bool { return instance->rumble(id, enable); } // auto Input::onChange(const function, u32, u32, s16, s16)>& onChange) -> void { change = onChange; } auto Input::doChange(shared_pointer device, u32 group, u32 input, s16 oldValue, s16 newValue) -> void { if(change) change(device, group, input, oldValue, newValue); } // auto Input::create(string driver) -> bool { self.instance.reset(); if(!driver) driver = optimalDriver(); #if defined(INPUT_WINDOWS) if(driver == "Windows") self.instance = new InputWindows(*this); #endif #if defined(INPUT_QUARTZ) if(driver == "Quartz") self.instance = new InputQuartz(*this); #endif #if defined(INPUT_CARBON) if(driver == "Carbon") self.instance = new InputCarbon(*this); #endif #if defined(INPUT_UDEV) if(driver == "udev") self.instance = new InputUdev(*this); #endif #if defined(INPUT_UHID) if(driver == "uhid") self.instance = new InputUHID(*this); #endif #if defined(INPUT_SDL) if(driver == "SDL") self.instance = new InputSDL(*this); #endif #if defined(INPUT_XLIB) if(driver == "Xlib") self.instance = new InputXlib(*this); #endif if(!self.instance) self.instance = new InputDriver(*this); return self.instance->create(); } auto Input::hasDrivers() -> vector { return { #if defined(INPUT_WINDOWS) "Windows", #endif #if defined(INPUT_QUARTZ) "Quartz", #endif #if defined(INPUT_CARBON) "Carbon", #endif #if defined(INPUT_UDEV) "udev", #endif #if defined(INPUT_UHID) "uhid", #endif #if defined(INPUT_SDL) "SDL", #endif #if defined(INPUT_XLIB) "Xlib", #endif "None"}; } auto Input::optimalDriver() -> string { #if defined(INPUT_WINDOWS) return "Windows"; #elif defined(INPUT_QUARTZ) return "Quartz"; #elif defined(INPUT_CARBON) return "Carbon"; #elif defined(INPUT_UDEV) return "udev"; #elif defined(INPUT_UHID) return "uhid"; #elif defined(INPUT_SDL) return "SDL"; #elif defined(INPUT_XLIB) return "Xlib"; #else return "None"; #endif } auto Input::safestDriver() -> string { #if defined(INPUT_WINDOWS) return "Windows"; #elif defined(INPUT_QUARTZ) return "Quartz"; #elif defined(INPUT_CARBON) return "Carbon"; #elif defined(INPUT_UDEV) return "udev"; #elif defined(INPUT_UHID) return "uhid"; #elif defined(INPUT_SDL) return "SDL"; #elif defined(INPUT_XLIB) return "Xlib"; #else return "none"; #endif } } ares-126/ruby/input/input.hpp000066400000000000000000000040551415063341600163150ustar00rootroot00000000000000struct Input; struct InputDriver { InputDriver(Input& super) : super(super) {} virtual ~InputDriver() = default; virtual auto create() -> bool { return true; } virtual auto driver() -> string { return "None"; } virtual auto ready() -> bool { return true; } virtual auto hasContext() -> bool { return false; } virtual auto setContext(uintptr context) -> bool { return true; } virtual auto acquired() -> bool { return false; } virtual auto acquire() -> bool { return false; } virtual auto release() -> bool { return false; } virtual auto poll() -> vector> { return {}; } virtual auto rumble(u64 id, bool enable) -> bool { return false; } protected: Input& super; friend class Input; uintptr context = 0; }; struct Input { static auto hasDrivers() -> vector; static auto hasDriver(string driver) -> bool { return (bool)hasDrivers().find(driver); } static auto optimalDriver() -> string; static auto safestDriver() -> string; Input() : self(*this) { reset(); } explicit operator bool() { return instance->driver() != "None"; } auto reset() -> void { instance = new InputDriver(*this); } auto create(string driver = "") -> bool; auto driver() -> string { return instance->driver(); } auto ready() -> bool { return instance->ready(); } auto hasContext() -> bool { return instance->hasContext(); } auto context() -> uintptr { return instance->context; } auto setContext(uintptr context) -> bool; auto acquired() -> bool; auto acquire() -> bool; auto release() -> bool; auto poll() -> vector>; auto rumble(u64 id, bool enable) -> bool; auto onChange(const function, u32, u32, s16, s16)>&) -> void; auto doChange(shared_pointer device, u32 group, u32 input, s16 oldValue, s16 newValue) -> void; protected: Input& self; unique_pointer instance; function device, u32 group, u32 input, s16 oldValue, s16 newValue)> change; }; ares-126/ruby/input/joypad/000077500000000000000000000000001415063341600157275ustar00rootroot00000000000000ares-126/ruby/input/joypad/directinput.cpp000066400000000000000000000173421415063341600207740ustar00rootroot00000000000000#pragma once auto CALLBACK DirectInput_EnumJoypadsCallback(const DIDEVICEINSTANCE* instance, void* p) -> BOOL; auto CALLBACK DirectInput_EnumJoypadAxesCallback(const DIDEVICEOBJECTINSTANCE* instance, void* p) -> BOOL; auto CALLBACK DirectInput_EnumJoypadEffectsCallback(const DIDEVICEOBJECTINSTANCE* instance, void* p) -> BOOL; struct InputJoypadDirectInput { Input& input; InputJoypadDirectInput(Input& input) : input(input) {} struct Joypad { shared_pointer hid{new HID::Joypad}; LPDIRECTINPUTDEVICE8 device = nullptr; LPDIRECTINPUTEFFECT effect = nullptr; u32 pathID = 0; u16 vendorID = 0; u16 productID = 0; bool isXInputDevice = false; }; vector joypads; uintptr handle = 0; LPDIRECTINPUT8 context = nullptr; LPDIRECTINPUTDEVICE8 device = nullptr; bool xinputAvailable = false; u32 effects = 0; auto assign(shared_pointer hid, u32 groupID, u32 inputID, s16 value) -> void { auto& group = hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { for(auto& jp : joypads) { if(FAILED(jp.device->Poll())) jp.device->Acquire(); DIJOYSTATE2 state; if(FAILED(jp.device->GetDeviceState(sizeof(DIJOYSTATE2), &state))) continue; for(u32 n : range(4)) { assign(jp.hid, HID::Joypad::GroupID::Axis, 0, state.lX); assign(jp.hid, HID::Joypad::GroupID::Axis, 1, state.lY); assign(jp.hid, HID::Joypad::GroupID::Axis, 2, state.lZ); assign(jp.hid, HID::Joypad::GroupID::Axis, 3, state.lRx); assign(jp.hid, HID::Joypad::GroupID::Axis, 4, state.lRy); assign(jp.hid, HID::Joypad::GroupID::Axis, 5, state.lRz); u32 pov = state.rgdwPOV[n]; s16 xaxis = 0; s16 yaxis = 0; if(pov < 36000) { if(pov >= 31500 || pov <= 4500) yaxis = -32767; if(pov >= 4500 && pov <= 13500) xaxis = +32767; if(pov >= 13500 && pov <= 22500) yaxis = +32767; if(pov >= 22500 && pov <= 31500) xaxis = -32767; } assign(jp.hid, HID::Joypad::GroupID::Hat, n * 2 + 0, xaxis); assign(jp.hid, HID::Joypad::GroupID::Hat, n * 2 + 1, yaxis); } for(u32 n : range(128)) { assign(jp.hid, HID::Joypad::GroupID::Button, n, (bool)state.rgbButtons[n]); } devices.append(jp.hid); } } auto rumble(u64 id, bool enable) -> bool { for(auto& jp : joypads) { if(jp.hid->id() != id) continue; if(jp.effect == nullptr) continue; if(enable) jp.effect->Start(1, 0); else jp.effect->Stop(); return true; } return false; } auto initialize(uintptr handle, LPDIRECTINPUT8 context, bool xinputAvailable) -> bool { if(!handle) return false; this->handle = handle; this->context = context; this->xinputAvailable = xinputAvailable; context->EnumDevices(DI8DEVCLASS_GAMECTRL, DirectInput_EnumJoypadsCallback, (void*)this, DIEDFL_ATTACHEDONLY); return true; } auto terminate() -> void { for(auto& jp : joypads) { jp.device->Unacquire(); if(jp.effect) jp.effect->Release(); jp.device->Release(); } joypads.reset(); context = nullptr; } auto initJoypad(const DIDEVICEINSTANCE* instance) -> bool { Joypad jp; jp.vendorID = instance->guidProduct.Data1 >> 0; jp.productID = instance->guidProduct.Data1 >> 16; jp.isXInputDevice = false; if(auto device = rawinput.find(jp.vendorID, jp.productID)) { jp.isXInputDevice = device().isXInputDevice; } //Microsoft has intentionally imposed artificial restrictions on XInput devices when used with DirectInput //a) the two triggers are merged into a single axis, making uniquely distinguishing them impossible //b) rumble support is not exposed //thus, it's always preferred to let the XInput driver handle these joypads //but if the driver is not available (XInput 1.3 does not ship with stock Windows XP), fall back on DirectInput if(jp.isXInputDevice && xinputAvailable) return DIENUM_CONTINUE; if(FAILED(context->CreateDevice(instance->guidInstance, &device, 0))) return DIENUM_CONTINUE; jp.device = device; device->SetDataFormat(&c_dfDIJoystick2); device->SetCooperativeLevel((HWND)handle, DISCL_NONEXCLUSIVE | DISCL_BACKGROUND); effects = 0; device->EnumObjects(DirectInput_EnumJoypadAxesCallback, (void*)this, DIDFT_ABSAXIS); device->EnumObjects(DirectInput_EnumJoypadEffectsCallback, (void*)this, DIDFT_FFACTUATOR); jp.hid->setRumble(effects > 0); DIPROPGUIDANDPATH property; memset(&property, 0, sizeof(DIPROPGUIDANDPATH)); property.diph.dwSize = sizeof(DIPROPGUIDANDPATH); property.diph.dwHeaderSize = sizeof(DIPROPHEADER); property.diph.dwObj = 0; property.diph.dwHow = DIPH_DEVICE; device->GetProperty(DIPROP_GUIDANDPATH, &property.diph); string devicePath = (const char*)utf8_t(property.wszPath); jp.pathID = Hash::CRC32(devicePath).value(); jp.hid->setVendorID(jp.vendorID); jp.hid->setProductID(jp.productID); jp.hid->setPathID(jp.pathID); if(jp.hid->rumble()) { //disable auto-centering spring for rumble support DIPROPDWORD property; memset(&property, 0, sizeof(DIPROPDWORD)); property.diph.dwSize = sizeof(DIPROPDWORD); property.diph.dwHeaderSize = sizeof(DIPROPHEADER); property.diph.dwObj = 0; property.diph.dwHow = DIPH_DEVICE; property.dwData = false; device->SetProperty(DIPROP_AUTOCENTER, &property.diph); DWORD dwAxes[2] = {(DWORD)DIJOFS_X, (DWORD)DIJOFS_Y}; LONG lDirection[2] = {0, 0}; DICONSTANTFORCE force; force.lMagnitude = DI_FFNOMINALMAX; //full force DIEFFECT effect; memset(&effect, 0, sizeof(DIEFFECT)); effect.dwSize = sizeof(DIEFFECT); effect.dwFlags = DIEFF_CARTESIAN | DIEFF_OBJECTOFFSETS; effect.dwDuration = INFINITE; effect.dwSamplePeriod = 0; effect.dwGain = DI_FFNOMINALMAX; effect.dwTriggerButton = DIEB_NOTRIGGER; effect.dwTriggerRepeatInterval = 0; effect.cAxes = 2; effect.rgdwAxes = dwAxes; effect.rglDirection = lDirection; effect.lpEnvelope = 0; effect.cbTypeSpecificParams = sizeof(DICONSTANTFORCE); effect.lpvTypeSpecificParams = &force; effect.dwStartDelay = 0; device->CreateEffect(GUID_ConstantForce, &effect, &jp.effect, NULL); } for(auto n : range(6)) jp.hid->axes().append(n); for(auto n : range(8)) jp.hid->hats().append(n); for(auto n : range(128)) jp.hid->buttons().append(n); joypads.append(jp); return DIENUM_CONTINUE; } auto initAxis(const DIDEVICEOBJECTINSTANCE* instance) -> bool { DIPROPRANGE range; memset(&range, 0, sizeof(DIPROPRANGE)); range.diph.dwSize = sizeof(DIPROPRANGE); range.diph.dwHeaderSize = sizeof(DIPROPHEADER); range.diph.dwHow = DIPH_BYID; range.diph.dwObj = instance->dwType; range.lMin = -32768; range.lMax = +32767; device->SetProperty(DIPROP_RANGE, &range.diph); return DIENUM_CONTINUE; } auto initEffect(const DIDEVICEOBJECTINSTANCE* instance) -> bool { effects++; return DIENUM_CONTINUE; } }; auto CALLBACK DirectInput_EnumJoypadsCallback(const DIDEVICEINSTANCE* instance, void* p) -> BOOL { return ((InputJoypadDirectInput*)p)->initJoypad(instance); } auto CALLBACK DirectInput_EnumJoypadAxesCallback(const DIDEVICEOBJECTINSTANCE* instance, void* p) -> BOOL { return ((InputJoypadDirectInput*)p)->initAxis(instance); } auto CALLBACK DirectInput_EnumJoypadEffectsCallback(const DIDEVICEOBJECTINSTANCE* instance, void* p) -> BOOL { return ((InputJoypadDirectInput*)p)->initEffect(instance); } ares-126/ruby/input/joypad/iokit.cpp000066400000000000000000000234061415063341600175570ustar00rootroot00000000000000#pragma once #include auto deviceMatchingCallback(void* context, IOReturn result, void* sender, IOHIDDeviceRef device) -> void; auto deviceRemovalCallback(void* context, IOReturn result, void* sender, IOHIDDeviceRef device) -> void; struct InputJoypadIOKit { Input& input; InputJoypadIOKit(Input& input) : input(input) {} struct Joypad { auto appendElements(CFArrayRef elements) -> void { for(u32 n : range(CFArrayGetCount(elements))) { IOHIDElementRef element = (IOHIDElementRef)CFArrayGetValueAtIndex(elements, n); IOHIDElementType type = IOHIDElementGetType(element); u32 page = IOHIDElementGetUsagePage(element); u32 usage = IOHIDElementGetUsage(element); switch(type) { case kIOHIDElementTypeInput_Button: appendButton(element); break; case kIOHIDElementTypeInput_Axis: case kIOHIDElementTypeInput_Misc: if(page != kHIDPage_GenericDesktop && page != kHIDPage_Simulation) break; if(usage == kHIDUsage_Sim_Accelerator || usage == kHIDUsage_Sim_Brake || usage == kHIDUsage_Sim_Rudder || usage == kHIDUsage_Sim_Throttle || usage == kHIDUsage_GD_X || usage == kHIDUsage_GD_Y || usage == kHIDUsage_GD_Z || usage == kHIDUsage_GD_Rx || usage == kHIDUsage_GD_Ry || usage == kHIDUsage_GD_Rz || usage == kHIDUsage_GD_Slider || usage == kHIDUsage_GD_Dial || usage == kHIDUsage_GD_Wheel ) appendAxis(element); if(usage == kHIDUsage_GD_DPadUp || usage == kHIDUsage_GD_DPadDown || usage == kHIDUsage_GD_DPadLeft || usage == kHIDUsage_GD_DPadRight || usage == kHIDUsage_GD_Start || usage == kHIDUsage_GD_Select || usage == kHIDUsage_GD_SystemMainMenu ) appendButton(element); if(usage == kHIDUsage_GD_Hatswitch ) appendHat(element); break; case kIOHIDElementTypeCollection: if(CFArrayRef children = IOHIDElementGetChildren(element)) appendElements(children); break; } } } auto appendAxis(IOHIDElementRef element) -> void { IOHIDElementCookie cookie = IOHIDElementGetCookie(element); if(auto duplicate = axes.find([cookie](auto axis) { return IOHIDElementGetCookie(axis) == cookie; })) { return; } s32 min = IOHIDElementGetLogicalMin(element); s32 max = IOHIDElementGetLogicalMax(element); s32 range = max - min; if(range == 0) return; hid->axes().append(axes.size()); axes.append(element); } auto appendHat(IOHIDElementRef element) -> void { IOHIDElementCookie cookie = IOHIDElementGetCookie(element); if(auto duplicate = hats.find([cookie](auto hat) { return IOHIDElementGetCookie(hat) == cookie; })) { return; } u32 n = hats.size() * 2; hid->hats().append(n + 0); hid->hats().append(n + 1); hats.append(element); } auto appendButton(IOHIDElementRef element) -> void { IOHIDElementCookie cookie = IOHIDElementGetCookie(element); if(auto duplicate = buttons.find([cookie](auto button) { return IOHIDElementGetCookie(button) == cookie; })) { return; } hid->buttons().append(buttons.size()); buttons.append(element); } shared_pointer hid{new HID::Joypad}; IOHIDDeviceRef device = nullptr; vector axes; vector hats; vector buttons; }; vector joypads; IOHIDManagerRef manager = nullptr; enum : s32 { Center = 0, Up = -1, Down = +1, Left = -1, Right = +1 }; auto assign(shared_pointer hid, u32 groupID, u32 inputID, s16 value) -> void { auto& group = hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { for(auto& jp : joypads) { IOHIDDeviceRef device = jp.device; for(u32 n : range(jp.axes.size())) { s32 value = 0; IOHIDValueRef valueRef; if(IOHIDDeviceGetValue(device, jp.axes[n], &valueRef) == kIOReturnSuccess) { s32 min = IOHIDElementGetLogicalMin(jp.axes[n]); s32 max = IOHIDElementGetLogicalMax(jp.axes[n]); s32 range = max - min; value = (IOHIDValueGetIntegerValue(valueRef) - min) * 65535LL / range - 32767; } assign(jp.hid, HID::Joypad::GroupID::Axis, n, sclamp<16>(value)); } for(u32 n : range(jp.hats.size())) { s32 x = Center; s32 y = Center; IOHIDValueRef valueRef; if(IOHIDDeviceGetValue(device, jp.hats[n], &valueRef) == kIOReturnSuccess) { s32 position = IOHIDValueGetIntegerValue(valueRef); s32 min = IOHIDElementGetLogicalMin(jp.hats[n]); s32 max = IOHIDElementGetLogicalMax(jp.hats[n]); if(position >= min && position <= max) { position -= min; s32 range = max - min + 1; if(range == 4) { position *= 2; } if(range == 8) { switch(position) { case 0: x = Up; y = Center; break; case 1: x = Up; y = Right; break; case 2: x = Center; y = Right; break; case 3: x = Down; y = Right; break; case 4: x = Down; y = Center; break; case 5: x = Down; y = Left; break; case 6: x = Center; y = Left; break; case 7: x = Up; y = Left; break; } } } } assign(jp.hid, HID::Joypad::GroupID::Hat, n * 2 + 0, x * 32767); assign(jp.hid, HID::Joypad::GroupID::Hat, n * 2 + 1, y * 32767); } for(u32 n : range(jp.buttons.size())) { s32 value = 0; IOHIDValueRef valueRef; if(IOHIDDeviceGetValue(device, jp.buttons[n], &valueRef) == kIOReturnSuccess) { value = IOHIDValueGetIntegerValue(valueRef); } assign(jp.hid, HID::Joypad::GroupID::Button, n, (bool)value); } devices.append(jp.hid); } } auto rumble(u64 id, bool enable) -> bool { //todo return false; } auto initialize() -> bool { manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); if(!manager) return false; CFArrayRef matcher = createMatcher(); if(!matcher) { releaseManager(); return false; } IOHIDManagerSetDeviceMatchingMultiple(manager, matcher); IOHIDManagerRegisterDeviceMatchingCallback(manager, deviceMatchingCallback, this); IOHIDManagerRegisterDeviceRemovalCallback(manager, deviceRemovalCallback, this); IOHIDManagerScheduleWithRunLoop(manager, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode); CFRelease(matcher); if(IOHIDManagerOpen(manager, kIOHIDOptionsTypeNone) != kIOReturnSuccess) { releaseManager(); return false; } return true; } auto terminate() -> void { if(!manager) return; IOHIDManagerClose(manager, kIOHIDOptionsTypeNone); releaseManager(); } auto appendJoypad(IOHIDDeviceRef device) -> void { Joypad jp; jp.device = device; s32 vendorID, productID; CFNumberGetValue((CFNumberRef)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDVendorIDKey)), kCFNumberSInt32Type, &vendorID); CFNumberGetValue((CFNumberRef)IOHIDDeviceGetProperty(device, CFSTR(kIOHIDProductIDKey)), kCFNumberSInt32Type, &productID); jp.hid->setVendorID(vendorID); jp.hid->setProductID(productID); CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, nullptr, kIOHIDOptionsTypeNone); if(elements) { jp.appendElements(elements); CFRelease(elements); joypads.append(jp); } } auto removeJoypad(IOHIDDeviceRef device) -> void { for(u32 n : range(joypads.size())) { if(joypads[n].device == device) { joypads.remove(n); return; } } } private: auto releaseManager() -> void { CFRelease(manager); manager = nullptr; } auto createMatcher() -> CFArrayRef { CFDictionaryRef dict1 = createMatcherCriteria(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick); if(!dict1) return nullptr; CFDictionaryRef dict2 = createMatcherCriteria(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad); if(!dict2) return CFRelease(dict1), nullptr; CFDictionaryRef dict3 = createMatcherCriteria(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController); if(!dict3) return CFRelease(dict1), CFRelease(dict2), nullptr; const void* values[] = {dict1, dict2, dict3}; CFArrayRef array = CFArrayCreate(kCFAllocatorDefault, values, 3, &kCFTypeArrayCallBacks); CFRelease(dict1), CFRelease(dict2), CFRelease(dict3); return array; } auto createMatcherCriteria(u32 page, u32 usage) -> CFDictionaryRef { CFNumberRef pageNumber = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &page); if(!pageNumber) return nullptr; CFNumberRef usageNumber = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &usage); if(!usageNumber) return CFRelease(pageNumber), nullptr; const void* keys[] = {CFSTR(kIOHIDDeviceUsagePageKey), CFSTR(kIOHIDDeviceUsageKey)}; const void* values[] = {pageNumber, usageNumber}; CFDictionaryRef dict = CFDictionaryCreate( kCFAllocatorDefault, keys, values, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks ); CFRelease(pageNumber), CFRelease(usageNumber); return dict; } }; auto deviceMatchingCallback(void* context, IOReturn result, void* sender, IOHIDDeviceRef device) -> void { ((InputJoypadIOKit*)context)->appendJoypad(device); } auto deviceRemovalCallback(void* context, IOReturn result, void* sender, IOHIDDeviceRef device) -> void { ((InputJoypadIOKit*)context)->removeJoypad(device); } ares-126/ruby/input/joypad/sdl.cpp000066400000000000000000000063111415063341600172160ustar00rootroot00000000000000#pragma once struct InputJoypadSDL { Input& input; InputJoypadSDL(Input& input) : input(input) {} struct Joypad { shared_pointer hid{new HID::Joypad}; vector axisPolled; u32 id = 0; SDL_Joystick* handle = nullptr; }; vector joypads; auto assign(Joypad& joypad, u32 groupID, u32 inputID, s16 value) -> void { auto& group = joypad.hid->group(groupID); if(group.input(inputID).value() == value) return; if(groupID == HID::Joypad::GroupID::Axis && !joypad.axisPolled(inputID)) { //suppress the first axis polling event, because the value can change dramatically. //SDL seems to return 0 for all axes, until the first movement, where it jumps to the real value. //this triggers onChange handlers to instantly bind inputs erroneously if not suppressed. joypad.axisPolled[inputID] = true; } else { input.doChange(joypad.hid, groupID, inputID, group.input(inputID).value(), value); } group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { SDL_JoystickUpdate(); SDL_Event event; while(SDL_PollEvent(&event)) { if(event.type == SDL_JOYDEVICEADDED || event.type == SDL_JOYDEVICEREMOVED) { enumerate(); } } for(auto& jp : joypads) { for(u32 n : range(jp.hid->axes().size())) { assign(jp, HID::Joypad::GroupID::Axis, n, (s16)SDL_JoystickGetAxis(jp.handle, n)); } for(s32 n = 0; n < (s32)jp.hid->hats().size() - 1; n += 2) { u8 state = SDL_JoystickGetHat(jp.handle, n >> 1); assign(jp, HID::Joypad::GroupID::Hat, n + 0, state & SDL_HAT_LEFT ? -32767 : state & SDL_HAT_RIGHT ? +32767 : 0); assign(jp, HID::Joypad::GroupID::Hat, n + 1, state & SDL_HAT_UP ? -32767 : state & SDL_HAT_DOWN ? +32767 : 0); } for(u32 n : range(jp.hid->buttons().size())) { assign(jp, HID::Joypad::GroupID::Button, n, (bool)SDL_JoystickGetButton(jp.handle, n)); } devices.append(jp.hid); } } auto initialize() -> bool { terminate(); SDL_Init(SDL_INIT_EVENTS); SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); enumerate(); return true; } auto terminate() -> void { for(auto& jp : joypads) { SDL_JoystickClose(jp.handle); } joypads.reset(); SDL_QuitSubSystem(SDL_INIT_JOYSTICK); } private: auto enumerate() -> void { for(auto& joypad : joypads) { SDL_JoystickClose(joypad.handle); } joypads.reset(); for(u32 id : range(SDL_NumJoysticks())) { Joypad jp; jp.id = id; jp.handle = SDL_JoystickOpen(jp.id); u32 axes = SDL_JoystickNumAxes(jp.handle); u32 hats = SDL_JoystickNumHats(jp.handle) * 2; u32 buttons = SDL_JoystickNumButtons(jp.handle); jp.hid->setVendorID(HID::Joypad::GenericVendorID); jp.hid->setProductID(HID::Joypad::GenericProductID); jp.hid->setPathID(jp.id); for(u32 n : range(axes)) jp.hid->axes().append(n); for(u32 n : range(hats)) jp.hid->hats().append(n); for(u32 n : range(buttons)) jp.hid->buttons().append(n); jp.hid->setRumble(false); joypads.append(jp); } SDL_JoystickUpdate(); } }; ares-126/ruby/input/joypad/udev.cpp000066400000000000000000000217761415063341600174130ustar00rootroot00000000000000#pragma once struct InputJoypadUdev { Input& input; InputJoypadUdev(Input& input) : input(input) {} udev* context = nullptr; udev_monitor* monitor = nullptr; udev_enumerate* enumerator = nullptr; udev_list_entry* devices = nullptr; udev_list_entry* item = nullptr; struct JoypadInput { s32 code = 0; u32 id = 0; s16 value = 0; input_absinfo info; JoypadInput() {} JoypadInput(s32 code) : code(code) {} JoypadInput(s32 code, u32 id) : code(code), id(id) {} bool operator< (const JoypadInput& source) const { return code < source.code; } bool operator==(const JoypadInput& source) const { return code == source.code; } }; struct Joypad { shared_pointer hid{new HID::Joypad}; s32 fd = -1; dev_t device = 0; string deviceName; string deviceNode; u8 evbit[(EV_MAX + 7) / 8] = {0}; u8 keybit[(KEY_MAX + 7) / 8] = {0}; u8 absbit[(ABS_MAX + 7) / 8] = {0}; u8 ffbit[(FF_MAX + 7) / 8] = {0}; u32 effects = 0; string name; string manufacturer; string product; string serial; string vendorID; string productID; set axes; set hats; set buttons; bool rumble = false; s32 effectID = -1; }; vector joypads; auto assign(shared_pointer hid, u32 groupID, u32 inputID, s16 value) -> void { auto& group = hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { while(hotplugDevicesAvailable()) hotplugDevice(); for(auto& jp : joypads) { input_event events[32]; s32 length = 0; while((length = read(jp.fd, events, sizeof(events))) > 0) { length /= sizeof(input_event); for(u32 i : range(length)) { s32 code = events[i].code; s32 type = events[i].type; s32 value = events[i].value; if(type == EV_ABS) { if(auto input = jp.axes.find({code})) { s32 range = input().info.maximum - input().info.minimum; value = (value - input().info.minimum) * 65535ll / range - 32767; assign(jp.hid, HID::Joypad::GroupID::Axis, input().id, sclamp<16>(value)); } else if(auto input = jp.hats.find({code})) { s32 range = input().info.maximum - input().info.minimum; value = (value - input().info.minimum) * 65535ll / range - 32767; assign(jp.hid, HID::Joypad::GroupID::Hat, input().id, sclamp<16>(value)); } } else if(type == EV_KEY) { if(code >= BTN_MISC) { if(auto input = jp.buttons.find({code})) { assign(jp.hid, HID::Joypad::GroupID::Button, input().id, (bool)value); } } } } } devices.append(jp.hid); } } auto rumble(u64 id, bool enable) -> bool { for(auto& jp : joypads) { if(jp.hid->id() != id) continue; if(!jp.hid->rumble()) continue; if(!enable) { if(jp.effectID == -1) return true; //already stopped? ioctl(jp.fd, EVIOCRMFF, jp.effectID); jp.effectID = -1; } else { if(jp.effectID != -1) return true; //already started? ff_effect effect; memory::fill(&effect, sizeof(ff_effect)); effect.type = FF_RUMBLE; effect.id = -1; effect.u.rumble.strong_magnitude = 65535; effect.u.rumble.weak_magnitude = 65535; ioctl(jp.fd, EVIOCSFF, &effect); jp.effectID = effect.id; input_event play; memory::fill(&play, sizeof(input_event)); play.type = EV_FF; play.code = jp.effectID; play.value = enable; (void)write(jp.fd, &play, sizeof(input_event)); } return true; } return false; } auto initialize() -> bool { context = udev_new(); if(context == nullptr) return false; monitor = udev_monitor_new_from_netlink(context, "udev"); if(monitor) { udev_monitor_filter_add_match_subsystem_devtype(monitor, "input", nullptr); udev_monitor_enable_receiving(monitor); } enumerator = udev_enumerate_new(context); if(enumerator) { udev_enumerate_add_match_property(enumerator, "ID_INPUT_JOYSTICK", "1"); udev_enumerate_scan_devices(enumerator); devices = udev_enumerate_get_list_entry(enumerator); for(udev_list_entry* item = devices; item != nullptr; item = udev_list_entry_get_next(item)) { string name = udev_list_entry_get_name(item); udev_device* device = udev_device_new_from_syspath(context, name); string deviceNode = udev_device_get_devnode(device); if(deviceNode) createJoypad(device, deviceNode); udev_device_unref(device); } } return true; } auto terminate() -> void { if(enumerator) { udev_enumerate_unref(enumerator); enumerator = nullptr; } } private: auto hotplugDevicesAvailable() -> bool { pollfd fd = {0}; fd.fd = udev_monitor_get_fd(monitor); fd.events = POLLIN; return (::poll(&fd, 1, 0) == 1) && (fd.revents & POLLIN); } auto hotplugDevice() -> void { udev_device* device = udev_monitor_receive_device(monitor); if(device == nullptr) return; string value = udev_device_get_property_value(device, "ID_INPUT_JOYSTICK"); string action = udev_device_get_action(device); string deviceNode = udev_device_get_devnode(device); if(value == "1") { if(action == "add") { createJoypad(device, deviceNode); } if(action == "remove") { removeJoypad(device, deviceNode); } } } auto createJoypad(udev_device* device, const string& deviceNode) -> void { Joypad jp; jp.deviceNode = deviceNode; struct stat st; if(stat(deviceNode, &st) < 0) return; jp.device = st.st_rdev; jp.fd = open(deviceNode, O_RDWR | O_NONBLOCK); if(jp.fd < 0) return; u8 evbit[(EV_MAX + 7) / 8] = {0}; u8 keybit[(KEY_MAX + 7) / 8] = {0}; u8 absbit[(ABS_MAX + 7) / 8] = {0}; ioctl(jp.fd, EVIOCGBIT(0, sizeof(jp.evbit)), jp.evbit); ioctl(jp.fd, EVIOCGBIT(EV_KEY, sizeof(jp.keybit)), jp.keybit); ioctl(jp.fd, EVIOCGBIT(EV_ABS, sizeof(jp.absbit)), jp.absbit); ioctl(jp.fd, EVIOCGBIT(EV_FF, sizeof(jp.ffbit)), jp.ffbit); ioctl(jp.fd, EVIOCGEFFECTS, &jp.effects); #define testBit(buffer, bit) (buffer[(bit) >> 3] & 1 << ((bit) & 7)) if(testBit(jp.evbit, EV_KEY)) { if(udev_device* parent = udev_device_get_parent_with_subsystem_devtype(device, "input", nullptr)) { jp.name = udev_device_get_sysattr_value(parent, "name"); jp.vendorID = udev_device_get_sysattr_value(parent, "id/vendor"); jp.productID = udev_device_get_sysattr_value(parent, "id/product"); if(udev_device* root = udev_device_get_parent_with_subsystem_devtype(parent, "usb", "usb_device")) { if(jp.vendorID == udev_device_get_sysattr_value(root, "idVendor") && jp.productID == udev_device_get_sysattr_value(root, "idProduct") ) { jp.deviceName = udev_device_get_devpath(root); jp.manufacturer = udev_device_get_sysattr_value(root, "manufacturer"); jp.product = udev_device_get_sysattr_value(root, "product"); jp.serial = udev_device_get_sysattr_value(root, "serial"); } } } u32 axes = 0; u32 hats = 0; u32 buttons = 0; for(s32 i = 0; i < ABS_MISC; i++) { if(testBit(jp.absbit, i)) { if(i >= ABS_HAT0X && i <= ABS_HAT3Y) { if(auto hat = jp.hats.insert({i, hats++})) { ioctl(jp.fd, EVIOCGABS(i), &hat().info); } } else { if(auto axis = jp.axes.insert({i, axes++})) { ioctl(jp.fd, EVIOCGABS(i), &axis().info); } } } } for(s32 i = BTN_JOYSTICK; i < KEY_MAX; i++) { if(testBit(jp.keybit, i)) { jp.buttons.insert({i, buttons++}); } } for(s32 i = BTN_MISC; i < BTN_JOYSTICK; i++) { if(testBit(jp.keybit, i)) { jp.buttons.insert({i, buttons++}); } } jp.rumble = jp.effects >= 2 && testBit(jp.ffbit, FF_RUMBLE); createJoypadHID(jp); joypads.append(jp); } #undef testBit } auto createJoypadHID(Joypad& jp) -> void { jp.hid->setVendorID(jp.vendorID.hex()); jp.hid->setProductID(jp.productID.hex()); jp.hid->setPathID(Hash::CRC32(jp.deviceName).value()); for(u32 n : range(jp.axes.size())) jp.hid->axes().append(n); for(u32 n : range(jp.hats.size())) jp.hid->hats().append(n); for(u32 n : range(jp.buttons.size())) jp.hid->buttons().append(n); jp.hid->setRumble(jp.rumble); } auto removeJoypad(udev_device* device, const string& deviceNode) -> void { for(u32 n : range(joypads.size())) { if(joypads[n].deviceNode == deviceNode) { close(joypads[n].fd); joypads.remove(n); return; } } } }; ares-126/ruby/input/joypad/uhid.cpp000066400000000000000000000200171415063341600173640ustar00rootroot00000000000000#pragma once #include #include #include struct InputJoypadUHID { Input& input; InputJoypadUHID(Input& input) : input(input) {} struct Joypad { shared_pointer hid{new HID::Joypad}; s32 fd = -1; report_desc_t report; s32 reportID = -1; s32 reportSize = -1; u8* buffer = nullptr; bool writable = false; }; vector joypads; auto assign(Joypad& joypad, u32 groupID, u32 inputID, s16 value) -> void { auto& group = joypad.hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(joypad.hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { //hotplug support u64 thisTimestamp = chrono::millisecond(); if(thisTimestamp - lastTimestamp >= 2000) { lastTimestamp = thisTimestamp; auto devices = directory::files("/dev/", "uhid*"); if(enumeratedDevices != devices.merge(";")) initialize(); } for(auto& joypad : joypads) { bool isXbox = joypad.hid->vendorID() == 0x045e && joypad.hid->productID() == 0x028e; s16 hat[2] = {0, 0}; u32 axis = 0; u32 button = 0; while(read(joypad.fd, joypad.buffer, joypad.reportSize) == joypad.reportSize) { auto parse = hid_start_parse(joypad.report, 1 << hid_input, joypad.reportID); hid_item_t item; while(hid_get_item(parse, &item) > 0) { if(item.kind != hid_input) continue; if(HID_PAGE(item.usage) == HUP_GENERIC_DESKTOP) { auto usage = HID_USAGE(item.usage); auto value = hid_get_data(joypad.buffer, &item); if(value == -32768) value = -32767; //Xbox 360 hat support if(usage == 0x90 && value == 1) { hat[1] = -32767; continue; } //HatUp if(usage == 0x91 && value == 1) { hat[1] = +32767; continue; } //HatDown if(usage == 0x93 && value == 1) { hat[0] = -32767; continue; } //HatLeft if(usage == 0x92 && value == 1) { hat[0] = +32767; continue; } //HatRight if(isXbox) { if(usage == HUG_X ) assign(joypad, HID::Joypad::GroupID::Axis, 0, +value); //LeftThumbX if(usage == HUG_Y ) assign(joypad, HID::Joypad::GroupID::Axis, 1, -value); //LeftThumbY if(usage == HUG_RX) assign(joypad, HID::Joypad::GroupID::Axis, 2, +value); //RightThumbX if(usage == HUG_RY) assign(joypad, HID::Joypad::GroupID::Axis, 3, -value); //RightTHumbY if(usage == HUG_Z ) assign(joypad, HID::Joypad::GroupID::Trigger, 0, value << 7 | value >> 1); if(usage == HUG_RZ) assign(joypad, HID::Joypad::GroupID::Trigger, 1, value << 7 | value >> 1); } else if(usage == HUG_X || usage == HUG_Y || usage == HUG_Z || usage == HUG_RX || usage == HUG_RY || usage == HUG_RZ ) { if(axis < joypad.hid->axes().size()) { assign(joypad, HID::Joypad::GroupID::Axis, axis++, value); } } else if(usage == HUG_HAT_SWITCH) { //todo } } if(HID_PAGE(item.usage) == HUP_BUTTON) { auto value = hid_get_data(joypad.buffer, &item); if(button < joypad.hid->buttons().size()) { assign(joypad, HID::Joypad::GroupID::Button, button++, value); } } } if(isXbox) { assign(joypad, HID::Joypad::GroupID::Hat, 0, hat[0]); assign(joypad, HID::Joypad::GroupID::Hat, 1, hat[1]); } hid_end_parse(parse); } devices.append(joypad.hid); } } auto initialize() -> bool { terminate(); u32 pathID = 0; auto devices = directory::files("/dev/", "uhid*"); enumeratedDevices = devices.merge(";"); for(auto device : devices) { Joypad joypad; string deviceName = {"/dev/", device}; if(inode::writable(deviceName)) { //needed to use hid_set_report and write on fd joypad.fd = open(deviceName, O_RDWR | O_NONBLOCK); joypad.writable = true; } else if(inode::readable(deviceName)) { joypad.fd = open(deviceName, O_RDONLY | O_NONBLOCK); joypad.writable = false; } else { continue; } //device files use global state: if two processes open the same device file, the driver can crash the process. //this can easily happen by opening two instances of a program utilizing this driver, for instance. //to prevent this, request an exclusive access lock on the file, released via terminate() or on error below. if(flock(joypad.fd, LOCK_EX) != 0) { //0 = success; -1 = error close(joypad.fd); continue; } joypad.report = hid_get_report_desc(joypad.fd); joypad.reportID = hid_get_report_id(joypad.fd); joypad.reportSize = hid_report_size(joypad.report, hid_input, joypad.reportID); joypad.buffer = new u8[joypad.reportSize]; auto parse = hid_start_parse(joypad.report, 1 << hid_input, joypad.reportID); hid_item_t item; bool isJoypad = false; u32 axes = 0; u32 hats = 0; u32 buttons = 0; bool xbox360[4] = {0, 0, 0, 0}; while(hid_get_item(parse, &item)) { if(item.kind == hid_collection && HID_PAGE(item.usage) == HUP_GENERIC_DESKTOP) { if(HID_USAGE(item.usage) == HUG_JOYSTICK) isJoypad = true; if(HID_USAGE(item.usage) == HUG_GAME_PAD) isJoypad = true; if(HID_USAGE(item.usage) == HUG_POINTER ) isJoypad = true; //PS3 sixaxis } if(item.kind == hid_input && HID_PAGE(item.usage) == HUP_GENERIC_DESKTOP) { auto usage = HID_USAGE(item.usage); if(usage == HUG_X || usage == HUG_Y || usage == HUG_Z ) axes++; if(usage == HUG_RX || usage == HUG_RY || usage == HUG_RZ) axes++; if(usage == HUG_HAT_SWITCH) hats++; if(usage >= 0x90 && usage <= 0x93) xbox360[usage - 0x90] = 1; } if(item.kind == hid_input && HID_PAGE(item.usage) == HUP_BUTTON) { buttons++; } } hid_end_parse(parse); if(!isJoypad) { flock(joypad.fd, LOCK_UN); close(joypad.fd); continue; } if(xbox360[0] && xbox360[1] && xbox360[2] && xbox360[3]) { joypad.hid->setVendorID(0x045e); joypad.hid->setProductID(0x028e); joypad.hid->setPathID(pathID++); joypad.hid->axes().append("LeftThumbX"); joypad.hid->axes().append("LeftThumbY"); joypad.hid->axes().append("RightThumbX"); joypad.hid->axes().append("RightThumbY"); joypad.hid->hats().append("HatX"); joypad.hid->hats().append("HatY"); joypad.hid->triggers().append("LeftTrigger"); joypad.hid->triggers().append("RightTrigger"); joypad.hid->buttons().append("Start"); joypad.hid->buttons().append("Back"); joypad.hid->buttons().append("LeftThumb"); joypad.hid->buttons().append("RightThumb"); joypad.hid->buttons().append("LeftShoulder"); joypad.hid->buttons().append("RightShoulder"); joypad.hid->buttons().append("Guide"); joypad.hid->buttons().append("A"); joypad.hid->buttons().append("B"); joypad.hid->buttons().append("X"); joypad.hid->buttons().append("Y"); } else { joypad.hid->setVendorID(HID::Joypad::GenericVendorID); joypad.hid->setProductID(HID::Joypad::GenericProductID); joypad.hid->setPathID(pathID++); for(u32 n : range(axes)) joypad.hid->axes().append(n); for(u32 n : range(axes)) joypad.hid->hats().append(n); for(u32 n : range(axes)) joypad.hid->buttons().append(n); } joypads.append(joypad); } lastTimestamp = chrono::millisecond(); return true; } auto terminate() -> void { for(auto& joypad : joypads) { delete[] joypad.buffer; flock(joypad.fd, LOCK_UN); close(joypad.fd); } joypads.reset(); } private: u64 lastTimestamp = 0; string enumeratedDevices; }; ares-126/ruby/input/joypad/xinput.cpp000066400000000000000000000154631415063341600177730ustar00rootroot00000000000000#pragma once //documented functionality #define oXInputGetState "XInputGetState" #define oXInputSetState "XInputSetState" typedef DWORD WINAPI (*pXInputGetState)(DWORD dwUserIndex, XINPUT_STATE* pState); typedef DWORD WINAPI (*pXInputSetState)(DWORD dwUserIndex, XINPUT_VIBRATION* pVibration); //undocumented functionality #define oXInputGetStateEx (LPCSTR)100 #define oXInputWaitForGuideButton (LPCSTR)101 #define oXInputCancelGuideButtonWait (LPCSTR)102 #define oXInputPowerOffController (LPCSTR)103 typedef DWORD WINAPI (*pXInputGetStateEx)(DWORD dwUserIndex, XINPUT_STATE* pState); typedef DWORD WINAPI (*pXInputWaitForGuideButton)(DWORD dwUserIndex, DWORD dwFlag, void* pUnknown); typedef DWORD WINAPI (*pXInputCancelGuideButtonWait)(DWORD dwUserIndex); typedef DWORD WINAPI (*pXInputPowerOffController)(DWORD dwUserIndex); #define XINPUT_GAMEPAD_GUIDE 0x0400 struct InputJoypadXInput { Input& input; InputJoypadXInput(Input& input) : input(input) {} HMODULE libxinput = nullptr; pXInputGetStateEx XInputGetStateEx = nullptr; pXInputSetState XInputSetState = nullptr; struct Joypad { shared_pointer hid{new HID::Joypad}; u32 id = 0; }; vector joypads; auto assign(shared_pointer hid, u32 groupID, u32 inputID, s16 value) -> void { auto& group = hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { for(auto& jp : joypads) { XINPUT_STATE state; if(XInputGetStateEx(jp.id, &state) != ERROR_SUCCESS) continue; //flip vertical axes so that -32768 = up, +32767 = down u16 axisLY = 32768 + state.Gamepad.sThumbLY; u16 axisRY = 32768 + state.Gamepad.sThumbRY; assign(jp.hid, HID::Joypad::GroupID::Axis, 0, (s16)state.Gamepad.sThumbLX); assign(jp.hid, HID::Joypad::GroupID::Axis, 1, (s16)(~axisLY - 32768)); assign(jp.hid, HID::Joypad::GroupID::Axis, 2, (s16)state.Gamepad.sThumbRX); assign(jp.hid, HID::Joypad::GroupID::Axis, 3, (s16)(~axisRY - 32768)); s16 hatX = 0; s16 hatY = 0; if(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_UP ) hatY -= 32767; if(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_DOWN ) hatY += 32767; if(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_LEFT ) hatX -= 32767; if(state.Gamepad.wButtons & XINPUT_GAMEPAD_DPAD_RIGHT) hatX += 32767; assign(jp.hid, HID::Joypad::GroupID::Hat, 0, hatX); assign(jp.hid, HID::Joypad::GroupID::Hat, 1, hatY); //scale trigger ranges for (not-pressed to pressed) from (0 to 255) to (0 to +32767) s16 triggerL = state.Gamepad.bLeftTrigger; s16 triggerR = state.Gamepad.bRightTrigger; triggerL = triggerL << 7 | triggerL >> 1; triggerR = triggerR << 7 | triggerR >> 1; assign(jp.hid, HID::Joypad::GroupID::Trigger, 0, triggerL); assign(jp.hid, HID::Joypad::GroupID::Trigger, 1, triggerR); assign(jp.hid, HID::Joypad::GroupID::Button, 0, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_A)); assign(jp.hid, HID::Joypad::GroupID::Button, 1, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_B)); assign(jp.hid, HID::Joypad::GroupID::Button, 2, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_X)); assign(jp.hid, HID::Joypad::GroupID::Button, 3, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_Y)); assign(jp.hid, HID::Joypad::GroupID::Button, 4, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_BACK)); assign(jp.hid, HID::Joypad::GroupID::Button, 5, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_START)); assign(jp.hid, HID::Joypad::GroupID::Button, 6, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_SHOULDER)); assign(jp.hid, HID::Joypad::GroupID::Button, 7, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER)); assign(jp.hid, HID::Joypad::GroupID::Button, 8, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB)); assign(jp.hid, HID::Joypad::GroupID::Button, 9, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB)); assign(jp.hid, HID::Joypad::GroupID::Button, 10, (bool)(state.Gamepad.wButtons & XINPUT_GAMEPAD_GUIDE)); devices.append(jp.hid); } } auto rumble(u64 id, bool enable) -> bool { for(auto& jp : joypads) { if(jp.hid->id() != id) continue; XINPUT_VIBRATION vibration; memset(&vibration, 0, sizeof(XINPUT_VIBRATION)); vibration.wLeftMotorSpeed = enable ? 65535 : 0; //low-frequency motor (0 = off, 65535 = max) vibration.wRightMotorSpeed = enable ? 65535 : 0; //high-frequency motor (0 = off, 65535 = max) XInputSetState(jp.id, &vibration); return true; } return false; } auto initialize() -> bool { if(!libxinput) libxinput = LoadLibraryA("xinput1_3.dll"); if(!libxinput) libxinput = LoadLibraryA("xinput1_4.dll"); if(!libxinput) return false; //XInputGetStateEx is an undocumented function; but is required to get the state of the guide button //if for some reason it is not available, fall back on XInputGetState, which takes the same parameters XInputGetStateEx = (pXInputGetStateEx)GetProcAddress(libxinput, oXInputGetStateEx); XInputSetState = (pXInputSetState)GetProcAddress(libxinput, oXInputSetState); if(!XInputGetStateEx) XInputGetStateEx = (pXInputGetStateEx)GetProcAddress(libxinput, oXInputGetState); if(!XInputGetStateEx || !XInputSetState) return terminate(), false; //XInput supports a maximum of four controllers //add all four to devices list now. If they are not connected, they will not show up in poll() results for(u32 id : range(4)) { Joypad jp; jp.id = id; jp.hid->setVendorID(0x045e); jp.hid->setProductID(0x028e); jp.hid->setPathID(id); jp.hid->setRumble(true); jp.hid->axes().append("LeftThumbX"); jp.hid->axes().append("LeftThumbY"); jp.hid->axes().append("RightThumbX"); jp.hid->axes().append("RightThumbY"); jp.hid->hats().append("HatX"); jp.hid->hats().append("HatY"); jp.hid->triggers().append("LeftTrigger"); jp.hid->triggers().append("RightTrigger"); jp.hid->buttons().append("A"); jp.hid->buttons().append("B"); jp.hid->buttons().append("X"); jp.hid->buttons().append("Y"); jp.hid->buttons().append("Back"); jp.hid->buttons().append("Start"); jp.hid->buttons().append("LeftShoulder"); jp.hid->buttons().append("RightShoulder"); jp.hid->buttons().append("LeftThumb"); jp.hid->buttons().append("RightThumb"); jp.hid->buttons().append("Guide"); joypads.append(jp); } return true; } auto terminate() -> void { if(!libxinput) return; FreeLibrary(libxinput); libxinput = nullptr; } }; ares-126/ruby/input/keyboard/000077500000000000000000000000001415063341600162415ustar00rootroot00000000000000ares-126/ruby/input/keyboard/carbon.cpp000066400000000000000000000106141415063341600202130ustar00rootroot00000000000000#pragma once struct InputKeyboardCarbon { Input& input; InputKeyboardCarbon(Input& input) : input(input) {} shared_pointer hid{new HID::Keyboard}; struct Key { u8 id = 0; string name; }; vector keys; auto assign(u32 inputID, bool value) -> void { auto& group = hid->buttons(); if(group.input(inputID).value() == value) return; input.doChange(hid, HID::Keyboard::GroupID::Button, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { KeyMap keymap; GetKeys(keymap); auto buffer = (const uint8*)keymap; u32 inputID = 0; for(auto& key : keys) { bool value = buffer[key.id >> 3] & (1 << (key.id & 7)); assign(inputID++, value); } devices.append(hid); } auto initialize() -> bool { keys.append({0x35, "Escape"}); keys.append({0x7a, "F1"}); keys.append({0x78, "F2"}); keys.append({0x63, "F3"}); keys.append({0x76, "F4"}); keys.append({0x60, "F5"}); keys.append({0x61, "F6"}); keys.append({0x62, "F7"}); keys.append({0x64, "F8"}); keys.append({0x65, "F9"}); keys.append({0x6d, "F10"}); keys.append({0x67, "F11"}); //keys.append({0x??, "F12"}); keys.append({0x69, "PrintScreen"}); //keys.append({0x??, "ScrollLock"}); keys.append({0x71, "Pause"}); keys.append({0x32, "Tilde"}); keys.append({0x12, "Num1"}); keys.append({0x13, "Num2"}); keys.append({0x14, "Num3"}); keys.append({0x15, "Num4"}); keys.append({0x17, "Num5"}); keys.append({0x16, "Num6"}); keys.append({0x1a, "Num7"}); keys.append({0x1c, "Num8"}); keys.append({0x19, "Num9"}); keys.append({0x1d, "Num0"}); keys.append({0x1b, "Dash"}); keys.append({0x18, "Equal"}); keys.append({0x33, "Backspace"}); keys.append({0x72, "Insert"}); keys.append({0x75, "Delete"}); keys.append({0x73, "Home"}); keys.append({0x77, "End"}); keys.append({0x74, "PageUp"}); keys.append({0x79, "PageDown"}); keys.append({0x00, "A"}); keys.append({0x0b, "B"}); keys.append({0x08, "C"}); keys.append({0x02, "D"}); keys.append({0x0e, "E"}); keys.append({0x03, "F"}); keys.append({0x05, "G"}); keys.append({0x04, "H"}); keys.append({0x22, "I"}); keys.append({0x26, "J"}); keys.append({0x28, "K"}); keys.append({0x25, "L"}); keys.append({0x2e, "M"}); keys.append({0x2d, "N"}); keys.append({0x1f, "O"}); keys.append({0x23, "P"}); keys.append({0x0c, "Q"}); keys.append({0x0f, "R"}); keys.append({0x01, "S"}); keys.append({0x11, "T"}); keys.append({0x20, "U"}); keys.append({0x09, "V"}); keys.append({0x0d, "W"}); keys.append({0x07, "X"}); keys.append({0x10, "Y"}); keys.append({0x06, "Z"}); keys.append({0x21, "LeftBracket"}); keys.append({0x1e, "RightBracket"}); keys.append({0x2a, "Backslash"}); keys.append({0x29, "Semicolon"}); keys.append({0x27, "Apostrophe"}); keys.append({0x2b, "Comma"}); keys.append({0x2f, "Period"}); keys.append({0x2c, "Slash"}); keys.append({0x53, "Keypad1"}); keys.append({0x54, "Keypad2"}); keys.append({0x55, "Keypad3"}); keys.append({0x56, "Keypad4"}); keys.append({0x57, "Keypad5"}); keys.append({0x58, "Keypad6"}); keys.append({0x59, "Keypad7"}); keys.append({0x5b, "Keypad8"}); keys.append({0x5c, "Keypad9"}); keys.append({0x52, "Keypad0"}); //keys.append({0x??, "Point"}); keys.append({0x45, "Add"}); keys.append({0x4e, "Subtract"}); keys.append({0x43, "Multiply"}); keys.append({0x4b, "Divide"}); keys.append({0x4c, "Enter"}); keys.append({0x47, "NumLock"}); //keys.append({0x39, "CapsLock"}); keys.append({0x7e, "Up"}); keys.append({0x7d, "Down"}); keys.append({0x7b, "Left"}); keys.append({0x7c, "Right"}); keys.append({0x30, "Tab"}); keys.append({0x24, "Return"}); keys.append({0x31, "Spacebar"}); //keys.append({0x??, "Menu"}); keys.append({0x38, "Shift"}); keys.append({0x3b, "Control"}); keys.append({0x3a, "Alt"}); keys.append({0x37, "Super"}); hid->setVendorID(HID::Keyboard::GenericVendorID); hid->setProductID(HID::Keyboard::GenericProductID); hid->setPathID(0); for(auto& key : keys) { hid->buttons().append(key.name); } return true; } auto terminate() -> void { } }; ares-126/ruby/input/keyboard/quartz.cpp000066400000000000000000000122441415063341600202760ustar00rootroot00000000000000#pragma once struct InputKeyboardQuartz { Input& input; InputKeyboardQuartz(Input& input) : input(input) {} shared_pointer hid{new HID::Keyboard}; struct Key { string name; u32 id = 0; }; vector keys; auto assign(u32 inputID, bool value) -> void { auto& group = hid->buttons(); if(group.input(inputID).value() == value) return; input.doChange(hid, HID::Keyboard::GroupID::Button, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { u32 inputID = 0; for(auto& key : keys) { bool value = CGEventSourceKeyState(kCGEventSourceStateCombinedSessionState, key.id); assign(inputID++, value); } devices.append(hid); } auto initialize() -> bool { keys.append({"Escape", kVK_Escape}); keys.append({"F1", kVK_F1}); keys.append({"F2", kVK_F2}); keys.append({"F3", kVK_F3}); keys.append({"F4", kVK_F4}); keys.append({"F5", kVK_F5}); keys.append({"F6", kVK_F6}); keys.append({"F7", kVK_F7}); keys.append({"F8", kVK_F8}); keys.append({"F9", kVK_F9}); keys.append({"F10", kVK_F10}); keys.append({"F11", kVK_F11}); keys.append({"F12", kVK_F12}); keys.append({"F13", kVK_F13}); keys.append({"F14", kVK_F14}); keys.append({"F15", kVK_F15}); keys.append({"F16", kVK_F16}); keys.append({"F17", kVK_F17}); keys.append({"F18", kVK_F18}); keys.append({"F19", kVK_F19}); keys.append({"F20", kVK_F20}); keys.append({"Tilde", kVK_ANSI_Grave}); keys.append({"Num1", kVK_ANSI_1}); keys.append({"Num2", kVK_ANSI_2}); keys.append({"Num3", kVK_ANSI_3}); keys.append({"Num4", kVK_ANSI_4}); keys.append({"Num5", kVK_ANSI_5}); keys.append({"Num6", kVK_ANSI_6}); keys.append({"Num7", kVK_ANSI_7}); keys.append({"Num8", kVK_ANSI_8}); keys.append({"Num9", kVK_ANSI_9}); keys.append({"Num0", kVK_ANSI_0}); keys.append({"Dash", kVK_ANSI_Minus}); keys.append({"Equal", kVK_ANSI_Equal}); keys.append({"Delete", kVK_Delete}); keys.append({"Erase", kVK_ForwardDelete}); keys.append({"Home", kVK_Home}); keys.append({"End", kVK_End}); keys.append({"PageUp", kVK_PageUp}); keys.append({"PageDown", kVK_PageDown}); keys.append({"A", kVK_ANSI_A}); keys.append({"B", kVK_ANSI_B}); keys.append({"C", kVK_ANSI_C}); keys.append({"D", kVK_ANSI_D}); keys.append({"E", kVK_ANSI_E}); keys.append({"F", kVK_ANSI_F}); keys.append({"G", kVK_ANSI_G}); keys.append({"H", kVK_ANSI_H}); keys.append({"I", kVK_ANSI_I}); keys.append({"J", kVK_ANSI_J}); keys.append({"K", kVK_ANSI_K}); keys.append({"L", kVK_ANSI_L}); keys.append({"M", kVK_ANSI_M}); keys.append({"N", kVK_ANSI_N}); keys.append({"O", kVK_ANSI_O}); keys.append({"P", kVK_ANSI_P}); keys.append({"Q", kVK_ANSI_Q}); keys.append({"R", kVK_ANSI_R}); keys.append({"S", kVK_ANSI_S}); keys.append({"T", kVK_ANSI_T}); keys.append({"U", kVK_ANSI_U}); keys.append({"V", kVK_ANSI_V}); keys.append({"W", kVK_ANSI_W}); keys.append({"X", kVK_ANSI_X}); keys.append({"Y", kVK_ANSI_Y}); keys.append({"Z", kVK_ANSI_Z}); keys.append({"LeftBracket", kVK_ANSI_LeftBracket}); keys.append({"RightBracket", kVK_ANSI_RightBracket}); keys.append({"Backslash", kVK_ANSI_Backslash}); keys.append({"Semicolon", kVK_ANSI_Semicolon}); keys.append({"Apostrophe", kVK_ANSI_Quote}); keys.append({"Comma", kVK_ANSI_Comma}); keys.append({"Period", kVK_ANSI_Period}); keys.append({"Slash", kVK_ANSI_Slash}); keys.append({"Keypad1", kVK_ANSI_Keypad1}); keys.append({"Keypad2", kVK_ANSI_Keypad2}); keys.append({"Keypad3", kVK_ANSI_Keypad3}); keys.append({"Keypad4", kVK_ANSI_Keypad4}); keys.append({"Keypad5", kVK_ANSI_Keypad5}); keys.append({"Keypad6", kVK_ANSI_Keypad6}); keys.append({"Keypad7", kVK_ANSI_Keypad7}); keys.append({"Keypad8", kVK_ANSI_Keypad8}); keys.append({"Keypad9", kVK_ANSI_Keypad9}); keys.append({"Keypad0", kVK_ANSI_Keypad0}); keys.append({"Clear", kVK_ANSI_KeypadClear}); keys.append({"Equals", kVK_ANSI_KeypadEquals}); keys.append({"Divide", kVK_ANSI_KeypadDivide}); keys.append({"Multiply", kVK_ANSI_KeypadMultiply}); keys.append({"Subtract", kVK_ANSI_KeypadMinus}); keys.append({"Add", kVK_ANSI_KeypadPlus}); keys.append({"Enter", kVK_ANSI_KeypadEnter}); keys.append({"Decimal", kVK_ANSI_KeypadDecimal}); keys.append({"Up", kVK_UpArrow}); keys.append({"Down", kVK_DownArrow}); keys.append({"Left", kVK_LeftArrow}); keys.append({"Right", kVK_RightArrow}); keys.append({"Tab", kVK_Tab}); keys.append({"Return", kVK_Return}); keys.append({"Spacebar", kVK_Space}); keys.append({"Shift", kVK_Shift}); keys.append({"Control", kVK_Control}); keys.append({"Option", kVK_Option}); keys.append({"Command", kVK_Command}); hid->setVendorID(HID::Keyboard::GenericVendorID); hid->setProductID(HID::Keyboard::GenericProductID); hid->setPathID(0); for(auto& key : keys) { hid->buttons().append(key.name); } return true; } auto terminate() -> void { } }; ares-126/ruby/input/keyboard/rawinput.cpp000066400000000000000000000131061415063341600206170ustar00rootroot00000000000000#pragma once struct InputKeyboardRawInput { Input& input; InputKeyboardRawInput(Input& input) : input(input) {} struct Key { u16 code; u16 flag; string name; bool value; }; vector keys; struct Keyboard { shared_pointer hid{new HID::Keyboard}; } kb; auto update(RAWINPUT* input) -> void { u32 code = input->data.keyboard.MakeCode; u32 flag = input->data.keyboard.Flags; for(auto& key : keys) { if(key.code != code || key.flag != (flag & ~1)) continue; key.value = ~flag & 1; } } auto assign(u32 inputID, bool value) -> void { auto& group = kb.hid->buttons(); if(group.input(inputID).value() == value) return; input.doChange(kb.hid, HID::Keyboard::GroupID::Button, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { for(auto n : range(keys.size())) assign(n, keys[n].value); devices.append(kb.hid); } auto initialize() -> bool { rawinput.updateKeyboard = {&InputKeyboardRawInput::update, this}; //Pause sends 0x001d,4 + 0x0045,0; NumLock sends only 0x0045,0 //pressing Pause will falsely trigger NumLock //further, pause sends its key release even while button is held down //because of this, we cannot map either reliably keys.append({0x0001, 0, "Escape"}); keys.append({0x003b, 0, "F1"}); keys.append({0x003c, 0, "F2"}); keys.append({0x003d, 0, "F3"}); keys.append({0x003e, 0, "F4"}); keys.append({0x003f, 0, "F5"}); keys.append({0x0040, 0, "F6"}); keys.append({0x0041, 0, "F7"}); keys.append({0x0042, 0, "F8"}); keys.append({0x0043, 0, "F9"}); keys.append({0x0044, 0, "F10"}); keys.append({0x0057, 0, "F11"}); keys.append({0x0058, 0, "F12"}); keys.append({0x0037, 2, "PrintScreen"}); keys.append({0x0046, 0, "ScrollLock"}); //keys.append({0x001d, 4, "Pause"}); keys.append({0x0029, 0, "Tilde"}); keys.append({0x0002, 0, "Num1"}); keys.append({0x0003, 0, "Num2"}); keys.append({0x0004, 0, "Num3"}); keys.append({0x0005, 0, "Num4"}); keys.append({0x0006, 0, "Num5"}); keys.append({0x0007, 0, "Num6"}); keys.append({0x0008, 0, "Num7"}); keys.append({0x0009, 0, "Num8"}); keys.append({0x000a, 0, "Num9"}); keys.append({0x000b, 0, "Num0"}); keys.append({0x000c, 0, "Dash"}); keys.append({0x000d, 0, "Equal"}); keys.append({0x000e, 0, "Backspace"}); keys.append({0x0052, 2, "Insert"}); keys.append({0x0053, 2, "Delete"}); keys.append({0x0047, 2, "Home"}); keys.append({0x004f, 2, "End"}); keys.append({0x0049, 2, "PageUp"}); keys.append({0x0051, 2, "PageDown"}); keys.append({0x001e, 0, "A"}); keys.append({0x0030, 0, "B"}); keys.append({0x002e, 0, "C"}); keys.append({0x0020, 0, "D"}); keys.append({0x0012, 0, "E"}); keys.append({0x0021, 0, "F"}); keys.append({0x0022, 0, "G"}); keys.append({0x0023, 0, "H"}); keys.append({0x0017, 0, "I"}); keys.append({0x0024, 0, "J"}); keys.append({0x0025, 0, "K"}); keys.append({0x0026, 0, "L"}); keys.append({0x0032, 0, "M"}); keys.append({0x0031, 0, "N"}); keys.append({0x0018, 0, "O"}); keys.append({0x0019, 0, "P"}); keys.append({0x0010, 0, "Q"}); keys.append({0x0013, 0, "R"}); keys.append({0x001f, 0, "S"}); keys.append({0x0014, 0, "T"}); keys.append({0x0016, 0, "U"}); keys.append({0x002f, 0, "V"}); keys.append({0x0011, 0, "W"}); keys.append({0x002d, 0, "X"}); keys.append({0x0015, 0, "Y"}); keys.append({0x002c, 0, "Z"}); keys.append({0x001a, 0, "LeftBracket"}); keys.append({0x001b, 0, "RightBracket"}); keys.append({0x002b, 0, "Backslash"}); keys.append({0x0027, 0, "Semicolon"}); keys.append({0x0028, 0, "Apostrophe"}); keys.append({0x0033, 0, "Comma"}); keys.append({0x0034, 0, "Period"}); keys.append({0x0035, 0, "Slash"}); keys.append({0x004f, 0, "Keypad1"}); keys.append({0x0050, 0, "Keypad2"}); keys.append({0x0051, 0, "Keypad3"}); keys.append({0x004b, 0, "Keypad4"}); keys.append({0x004c, 0, "Keypad5"}); keys.append({0x004d, 0, "Keypad6"}); keys.append({0x0047, 0, "Keypad7"}); keys.append({0x0048, 0, "Keypad8"}); keys.append({0x0049, 0, "Keypad9"}); keys.append({0x0052, 0, "Keypad0"}); keys.append({0x0053, 0, "Point"}); keys.append({0x001c, 2, "Enter"}); keys.append({0x004e, 0, "Add"}); keys.append({0x004a, 0, "Subtract"}); keys.append({0x0037, 0, "Multiply"}); keys.append({0x0035, 2, "Divide"}); //keys.append({0x0045, 0, "NumLock"}); keys.append({0x003a, 0, "CapsLock"}); keys.append({0x0048, 2, "Up"}); keys.append({0x0050, 2, "Down"}); keys.append({0x004b, 2, "Left"}); keys.append({0x004d, 2, "Right"}); keys.append({0x000f, 0, "Tab"}); keys.append({0x001c, 0, "Return"}); keys.append({0x0039, 0, "Spacebar"}); keys.append({0x002a, 0, "LeftShift"}); keys.append({0x0036, 0, "RightShift"}); keys.append({0x001d, 0, "LeftControl"}); keys.append({0x001d, 2, "RightControl"}); keys.append({0x0038, 0, "LeftAlt"}); keys.append({0x0038, 2, "RightAlt"}); keys.append({0x005b, 2, "LeftSuper"}); keys.append({0x005c, 2, "RightSuper"}); keys.append({0x005d, 2, "Menu"}); kb.hid->setVendorID(HID::Keyboard::GenericVendorID); kb.hid->setProductID(HID::Keyboard::GenericProductID); kb.hid->setPathID(0); for(auto& key : keys) kb.hid->buttons().append(key.name); return true; } auto terminate() -> void { rawinput.updateKeyboard.reset(); } }; ares-126/ruby/input/keyboard/xlib.cpp000066400000000000000000000116201415063341600177030ustar00rootroot00000000000000#pragma once struct InputKeyboardXlib { Input& input; InputKeyboardXlib(Input& input) : input(input) {} shared_pointer hid{new HID::Keyboard}; Display* display = nullptr; struct Key { string name; u32 keysym = 0; u32 keycode = 0; }; vector keys; auto assign(u32 inputID, bool value) -> void { auto& group = hid->buttons(); if(group.input(inputID).value() == value) return; input.doChange(hid, HID::Keyboard::GroupID::Button, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { char state[32]; XQueryKeymap(display, state); u32 inputID = 0; for(auto& key : keys) { bool value = state[key.keycode >> 3] & (1 << (key.keycode & 7)); assign(inputID++, value); } devices.append(hid); } auto initialize() -> bool { display = XOpenDisplay(0); keys.append({"Escape", XK_Escape}); keys.append({"F1", XK_F1}); keys.append({"F2", XK_F2}); keys.append({"F3", XK_F3}); keys.append({"F4", XK_F4}); keys.append({"F5", XK_F5}); keys.append({"F6", XK_F6}); keys.append({"F7", XK_F7}); keys.append({"F8", XK_F8}); keys.append({"F9", XK_F9}); keys.append({"F10", XK_F10}); keys.append({"F11", XK_F11}); keys.append({"F12", XK_F12}); keys.append({"ScrollLock", XK_Scroll_Lock}); keys.append({"Pause", XK_Pause}); keys.append({"Tilde", XK_asciitilde}); keys.append({"Num0", XK_0}); keys.append({"Num1", XK_1}); keys.append({"Num2", XK_2}); keys.append({"Num3", XK_3}); keys.append({"Num4", XK_4}); keys.append({"Num5", XK_5}); keys.append({"Num6", XK_6}); keys.append({"Num7", XK_7}); keys.append({"Num8", XK_8}); keys.append({"Num9", XK_9}); keys.append({"Dash", XK_minus}); keys.append({"Equal", XK_equal}); keys.append({"Backspace", XK_BackSpace}); keys.append({"Insert", XK_Insert}); keys.append({"Delete", XK_Delete}); keys.append({"Home", XK_Home}); keys.append({"End", XK_End}); keys.append({"PageUp", XK_Prior}); keys.append({"PageDown", XK_Next}); keys.append({"A", XK_A}); keys.append({"B", XK_B}); keys.append({"C", XK_C}); keys.append({"D", XK_D}); keys.append({"E", XK_E}); keys.append({"F", XK_F}); keys.append({"G", XK_G}); keys.append({"H", XK_H}); keys.append({"I", XK_I}); keys.append({"J", XK_J}); keys.append({"K", XK_K}); keys.append({"L", XK_L}); keys.append({"M", XK_M}); keys.append({"N", XK_N}); keys.append({"O", XK_O}); keys.append({"P", XK_P}); keys.append({"Q", XK_Q}); keys.append({"R", XK_R}); keys.append({"S", XK_S}); keys.append({"T", XK_T}); keys.append({"U", XK_U}); keys.append({"V", XK_V}); keys.append({"W", XK_W}); keys.append({"X", XK_X}); keys.append({"Y", XK_Y}); keys.append({"Z", XK_Z}); keys.append({"LeftBracket", XK_bracketleft}); keys.append({"RightBracket", XK_bracketright}); keys.append({"Backslash", XK_backslash}); keys.append({"Semicolon", XK_semicolon}); keys.append({"Apostrophe", XK_apostrophe}); keys.append({"Comma", XK_comma}); keys.append({"Period", XK_period}); keys.append({"Slash", XK_slash}); keys.append({"Keypad0", XK_KP_0}); keys.append({"Keypad1", XK_KP_1}); keys.append({"Keypad2", XK_KP_2}); keys.append({"Keypad3", XK_KP_3}); keys.append({"Keypad4", XK_KP_4}); keys.append({"Keypad5", XK_KP_5}); keys.append({"Keypad6", XK_KP_6}); keys.append({"Keypad7", XK_KP_7}); keys.append({"Keypad8", XK_KP_8}); keys.append({"Keypad9", XK_KP_9}); keys.append({"Add", XK_KP_Add}); keys.append({"Subtract", XK_KP_Subtract}); keys.append({"Multiply", XK_KP_Multiply}); keys.append({"Divide", XK_KP_Divide}); keys.append({"Enter", XK_KP_Enter}); keys.append({"Up", XK_Up}); keys.append({"Down", XK_Down}); keys.append({"Left", XK_Left}); keys.append({"Right", XK_Right}); keys.append({"Tab", XK_Tab}); keys.append({"Return", XK_Return}); keys.append({"Spacebar", XK_space}); keys.append({"LeftControl", XK_Control_L}); keys.append({"RightControl", XK_Control_R}); keys.append({"LeftAlt", XK_Alt_L}); keys.append({"RightAlt", XK_Alt_R}); keys.append({"LeftShift", XK_Shift_L}); keys.append({"RightShift", XK_Shift_R}); keys.append({"LeftSuper", XK_Super_L}); keys.append({"RightSuper", XK_Super_R}); keys.append({"Menu", XK_Menu}); hid->setVendorID(HID::Keyboard::GenericVendorID); hid->setProductID(HID::Keyboard::GenericProductID); hid->setPathID(0); for(auto& key : keys) { hid->buttons().append(key.name); key.keycode = XKeysymToKeycode(display, key.keysym); } return true; } auto terminate() -> void { if(display) { XCloseDisplay(display); display = nullptr; } } }; ares-126/ruby/input/mouse/000077500000000000000000000000001415063341600155715ustar00rootroot00000000000000ares-126/ruby/input/mouse/rawinput.cpp000066400000000000000000000073451415063341600201570ustar00rootroot00000000000000#pragma once struct InputMouseRawInput { Input& input; InputMouseRawInput(Input& input) : input(input) {} uintptr handle = 0; bool mouseAcquired = false; struct Mouse { shared_pointer hid{new HID::Mouse}; s32 relativeX = 0; s32 relativeY = 0; s32 relativeZ = 0; bool buttons[5] = {0}; } ms; auto acquired() -> bool { if(mouseAcquired) { SetFocus((HWND)handle); SetCapture((HWND)handle); RECT rc; GetWindowRect((HWND)handle, &rc); ClipCursor(&rc); } return GetCapture() == (HWND)handle; } auto acquire() -> bool { if(!mouseAcquired) { mouseAcquired = true; ShowCursor(false); } return acquired(); } auto release() -> bool { if(mouseAcquired) { mouseAcquired = false; ReleaseCapture(); ClipCursor(nullptr); ShowCursor(true); } return true; } auto update(RAWINPUT* input) -> void { if((input->data.mouse.usFlags & 1) == MOUSE_MOVE_RELATIVE) { ms.relativeX += input->data.mouse.lLastX; ms.relativeY += input->data.mouse.lLastY; } if(input->data.mouse.usButtonFlags & RI_MOUSE_WHEEL) { ms.relativeZ += (s16)input->data.mouse.usButtonData; } if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_DOWN) ms.buttons[0] = 1; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_1_UP ) ms.buttons[0] = 0; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_2_DOWN) ms.buttons[1] = 1; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_2_UP ) ms.buttons[1] = 0; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_3_DOWN) ms.buttons[2] = 1; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_3_UP ) ms.buttons[2] = 0; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_4_DOWN) ms.buttons[3] = 1; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_4_UP ) ms.buttons[3] = 0; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_5_DOWN) ms.buttons[4] = 1; if(input->data.mouse.usButtonFlags & RI_MOUSE_BUTTON_5_UP ) ms.buttons[4] = 0; } auto assign(u32 groupID, u32 inputID, s16 value) -> void { auto& group = ms.hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(ms.hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { assign(HID::Mouse::GroupID::Axis, 0, ms.relativeX); assign(HID::Mouse::GroupID::Axis, 1, ms.relativeY); assign(HID::Mouse::GroupID::Axis, 2, ms.relativeZ); //keys are intentionally reordered below: //in ruby, button order is {left, middle, right, up, down} assign(HID::Mouse::GroupID::Button, 0, ms.buttons[0]); assign(HID::Mouse::GroupID::Button, 2, ms.buttons[1]); assign(HID::Mouse::GroupID::Button, 1, ms.buttons[2]); assign(HID::Mouse::GroupID::Button, 4, ms.buttons[3]); assign(HID::Mouse::GroupID::Button, 3, ms.buttons[4]); ms.relativeX = 0; ms.relativeY = 0; ms.relativeZ = 0; devices.append(ms.hid); } auto initialize(uintptr handle) -> bool { if(!handle) return false; this->handle = handle; ms.hid->setVendorID(HID::Mouse::GenericVendorID); ms.hid->setProductID(HID::Mouse::GenericProductID); ms.hid->setPathID(0); ms.hid->axes().append("X"); ms.hid->axes().append("Y"); ms.hid->axes().append("Z"); ms.hid->buttons().append("Left"); ms.hid->buttons().append("Middle"); ms.hid->buttons().append("Right"); ms.hid->buttons().append("Up"); ms.hid->buttons().append("Down"); rawinput.updateMouse = {&InputMouseRawInput::update, this}; return true; } auto terminate() -> void { rawinput.updateMouse.reset(); release(); } }; ares-126/ruby/input/mouse/xlib.cpp000066400000000000000000000117541415063341600172430ustar00rootroot00000000000000#pragma once struct InputMouseXlib { Input& input; InputMouseXlib(Input& input) : input(input) {} shared_pointer hid{new HID::Mouse}; uintptr handle = 0; Display* display = nullptr; Window rootWindow = 0; Cursor invisibleCursor = 0; u32 screenWidth = 0; u32 screenHeight = 0; struct Mouse { bool acquired = false; s32 numerator = 0; s32 denominator = 0; s32 threshold = 0; u32 relativeX = 0; u32 relativeY = 0; } ms; auto acquired() -> bool { return ms.acquired; } auto acquire() -> bool { if(acquired()) return true; if(XGrabPointer(display, handle, True, 0, GrabModeAsync, GrabModeAsync, rootWindow, invisibleCursor, CurrentTime) == GrabSuccess) { //backup existing cursor acceleration settings XGetPointerControl(display, &ms.numerator, &ms.denominator, &ms.threshold); //disable cursor acceleration XChangePointerControl(display, True, False, 1, 1, 0); //center cursor (so that first relative poll returns 0, 0 if mouse has not moved) XWarpPointer(display, None, rootWindow, 0, 0, 0, 0, screenWidth / 2, screenHeight / 2); return ms.acquired = true; } else { return ms.acquired = false; } } auto release() -> bool { if(acquired()) { //restore cursor acceleration and release cursor XChangePointerControl(display, True, True, ms.numerator, ms.denominator, ms.threshold); XUngrabPointer(display, CurrentTime); ms.acquired = false; } return true; } auto assign(u32 groupID, u32 inputID, s16 value) -> void { auto& group = hid->group(groupID); if(group.input(inputID).value() == value) return; input.doChange(hid, groupID, inputID, group.input(inputID).value(), value); group.input(inputID).setValue(value); } auto poll(vector>& devices) -> void { Window rootReturn; Window childReturn; s32 rootXReturn = 0; s32 rootYReturn = 0; s32 windowXReturn = 0; s32 windowYReturn = 0; u32 maskReturn = 0; XQueryPointer(display, handle, &rootReturn, &childReturn, &rootXReturn, &rootYReturn, &windowXReturn, &windowYReturn, &maskReturn); if(acquired()) { XWindowAttributes attributes; XGetWindowAttributes(display, handle, &attributes); //absolute -> relative conversion assign(HID::Mouse::GroupID::Axis, 0, (s16)(rootXReturn - screenWidth / 2)); assign(HID::Mouse::GroupID::Axis, 1, (s16)(rootYReturn - screenHeight / 2)); if(hid->axes().input(0).value() != 0 || hid->axes().input(1).value() != 0) { //if mouse moved, re-center mouse for next poll XWarpPointer(display, None, rootWindow, 0, 0, 0, 0, screenWidth / 2, screenHeight / 2); } } else { assign(HID::Mouse::GroupID::Axis, 0, (s16)(rootXReturn - ms.relativeX)); assign(HID::Mouse::GroupID::Axis, 1, (s16)(rootYReturn - ms.relativeY)); ms.relativeX = rootXReturn; ms.relativeY = rootYReturn; } assign(HID::Mouse::GroupID::Button, 0, (bool)(maskReturn & Button1Mask)); assign(HID::Mouse::GroupID::Button, 1, (bool)(maskReturn & Button2Mask)); assign(HID::Mouse::GroupID::Button, 2, (bool)(maskReturn & Button3Mask)); assign(HID::Mouse::GroupID::Button, 3, (bool)(maskReturn & Button4Mask)); assign(HID::Mouse::GroupID::Button, 4, (bool)(maskReturn & Button5Mask)); devices.append(hid); } auto initialize(uintptr handle) -> bool { terminate(); if(!handle) return false; this->handle = handle; display = XOpenDisplay(0); rootWindow = DefaultRootWindow(display); XWindowAttributes attributes; XGetWindowAttributes(display, rootWindow, &attributes); screenWidth = attributes.width; screenHeight = attributes.height; //Xlib: because XShowCursor(display, false) would just be too easy //create invisible cursor for use when mouse is acquired Pixmap pixmap; XColor black, unused; static char invisibleData[8] = {0}; Colormap colormap = DefaultColormap(display, DefaultScreen(display)); XAllocNamedColor(display, colormap, "black", &black, &unused); pixmap = XCreateBitmapFromData(display, handle, invisibleData, 8, 8); invisibleCursor = XCreatePixmapCursor(display, pixmap, pixmap, &black, &black, 0, 0); XFreePixmap(display, pixmap); XFreeColors(display, colormap, &black.pixel, 1, 0); ms.acquired = false; ms.relativeX = 0; ms.relativeY = 0; hid->setVendorID(HID::Mouse::GenericVendorID); hid->setProductID(HID::Mouse::GenericProductID); hid->setPathID(0); hid->axes().append("X"); hid->axes().append("Y"); hid->buttons().append("Left"); hid->buttons().append("Middle"); hid->buttons().append("Right"); hid->buttons().append("Up"); hid->buttons().append("Down"); return true; } auto terminate() -> void { release(); if(invisibleCursor) { XFreeCursor(display, invisibleCursor); invisibleCursor = 0; } if(display) { XCloseDisplay(display); display = nullptr; } } }; ares-126/ruby/input/quartz.cpp000066400000000000000000000022731415063341600164770ustar00rootroot00000000000000#include "keyboard/quartz.cpp" #include "joypad/iokit.cpp" struct InputQuartz : InputDriver { InputQuartz& self = *this; InputQuartz(Input& super) : InputDriver(super), keyboard(super), joypad(super) {} ~InputQuartz() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "Quartz"; } auto ready() -> bool override { return isReady; } auto acquired() -> bool override { return false; } auto acquire() -> bool override { return false; } auto release() -> bool override { return false; } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); joypad.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { return false; } private: auto initialize() -> bool { terminate(); if(!keyboard.initialize()) return false; if(!joypad.initialize()) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); joypad.terminate(); } bool isReady = false; InputKeyboardQuartz keyboard; InputJoypadIOKit joypad; }; ares-126/ruby/input/sdl.cpp000066400000000000000000000031231415063341600157260ustar00rootroot00000000000000#include #include #include #include "keyboard/xlib.cpp" #include "mouse/xlib.cpp" #include "joypad/sdl.cpp" struct InputSDL : InputDriver { InputSDL& self = *this; InputSDL(Input& super) : InputDriver(super), keyboard(super), mouse(super), joypad(super) {} ~InputSDL() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "SDL"; } auto ready() -> bool override { return isReady; } auto hasContext() -> bool override { return true; } auto setContext(uintptr context) -> bool override { return initialize(); } auto acquired() -> bool override { return mouse.acquired(); } auto acquire() -> bool override { return mouse.acquire(); } auto release() -> bool override { return mouse.release(); } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); mouse.poll(devices); joypad.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { return false; } private: auto initialize() -> bool { terminate(); if(!self.context) return false; if(!keyboard.initialize()) return false; if(!mouse.initialize(self.context)) return false; if(!joypad.initialize()) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); mouse.terminate(); joypad.terminate(); } bool isReady = false; InputKeyboardXlib keyboard; InputMouseXlib mouse; InputJoypadSDL joypad; }; ares-126/ruby/input/shared/000077500000000000000000000000001415063341600157075ustar00rootroot00000000000000ares-126/ruby/input/shared/rawinput.cpp000066400000000000000000000107271415063341600202730ustar00rootroot00000000000000#pragma once auto CALLBACK RawInputWindowProc(HWND, UINT, WPARAM, LPARAM) -> LRESULT; struct RawInput { HANDLE mutex = nullptr; HWND hwnd = nullptr; bool ready = false; bool initialized = false; function updateKeyboard; function updateMouse; struct Device { HANDLE handle = nullptr; string path; enum class Type : u32 { Keyboard, Mouse, Joypad } type; u16 vendorID = 0; u16 productID = 0; bool isXInputDevice = false; }; vector devices; auto find(u16 vendorID, u16 productID) -> maybe { for(auto& device : devices) { if(device.vendorID == vendorID && device.productID == productID) return device; } return nothing; } auto scanDevices() -> void { devices.reset(); u32 deviceCount = 0; GetRawInputDeviceList(NULL, &deviceCount, sizeof(RAWINPUTDEVICELIST)); RAWINPUTDEVICELIST* list = new RAWINPUTDEVICELIST[deviceCount]; GetRawInputDeviceList(list, &deviceCount, sizeof(RAWINPUTDEVICELIST)); for(u32 n : range(deviceCount)) { wchar_t path[4096]; u32 size = sizeof(path) - 1; GetRawInputDeviceInfo(list[n].hDevice, RIDI_DEVICENAME, &path, &size); RID_DEVICE_INFO info; info.cbSize = size = sizeof(RID_DEVICE_INFO); GetRawInputDeviceInfo(list[n].hDevice, RIDI_DEVICEINFO, &info, &size); Device device; device.path = (const char*)utf8_t(path); device.handle = list[n].hDevice; if(info.dwType == RIM_TYPEKEYBOARD) { device.type = Device::Type::Keyboard; device.vendorID = 0; device.productID = 1; } if(info.dwType == RIM_TYPEMOUSE) { device.type = Device::Type::Mouse; device.vendorID = 0; device.productID = 2; } if(info.dwType == RIM_TYPEHID) { //verify that this is a joypad device if(info.hid.usUsagePage != 1 || (info.hid.usUsage != 4 && info.hid.usUsage != 5)) continue; device.type = Device::Type::Joypad; device.vendorID = info.hid.dwVendorId; device.productID = info.hid.dwProductId; if(device.path.find("IG_")) device.isXInputDevice = true; //"IG_" is only found inside XInput device paths } devices.append(device); } delete[] list; } auto windowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { if(msg != WM_INPUT) return DefWindowProc(hwnd, msg, wparam, lparam); u32 size = 0; GetRawInputData((HRAWINPUT)lparam, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)); RAWINPUT* input = new RAWINPUT[size]; GetRawInputData((HRAWINPUT)lparam, RID_INPUT, input, &size, sizeof(RAWINPUTHEADER)); WaitForSingleObject(mutex, INFINITE); if(input->header.dwType == RIM_TYPEKEYBOARD) { if(updateKeyboard) updateKeyboard(input); } if(input->header.dwType == RIM_TYPEMOUSE) { if(updateMouse) updateMouse(input); } ReleaseMutex(mutex); LRESULT result = DefRawInputProc(&input, size, sizeof(RAWINPUTHEADER)); delete[] input; return result; } auto main() -> void { WNDCLASS wc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hInstance = GetModuleHandle(0); wc.lpfnWndProc = RawInputWindowProc; wc.lpszClassName = L"RawInputClass"; wc.lpszMenuName = 0; wc.style = CS_VREDRAW | CS_HREDRAW; RegisterClass(&wc); hwnd = CreateWindow(L"RawInputClass", L"RawInputClass", WS_POPUP, 0, 0, 64, 64, 0, 0, GetModuleHandle(0), 0); scanDevices(); RAWINPUTDEVICE device[2]; //capture all keyboard input device[0].usUsagePage = 1; device[0].usUsage = 6; device[0].dwFlags = RIDEV_INPUTSINK; device[0].hwndTarget = hwnd; //capture all mouse input device[1].usUsagePage = 1; device[1].usUsage = 2; device[1].dwFlags = RIDEV_INPUTSINK; device[1].hwndTarget = hwnd; RegisterRawInputDevices(device, 2, sizeof(RAWINPUTDEVICE)); WaitForSingleObject(mutex, INFINITE); ready = true; ReleaseMutex(mutex); while(true) { MSG msg; GetMessage(&msg, hwnd, 0, 0); TranslateMessage(&msg); DispatchMessage(&msg); } } }; static RawInput rawinput; auto WINAPI RawInputThreadProc(void*) -> DWORD { rawinput.main(); return 0; } auto CALLBACK RawInputWindowProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) -> LRESULT { return rawinput.windowProc(hwnd, msg, wparam, lparam); } ares-126/ruby/input/udev.cpp000066400000000000000000000033621415063341600161140ustar00rootroot00000000000000#include #include #include #include #include #include #include #include #include #include "keyboard/xlib.cpp" #include "mouse/xlib.cpp" #include "joypad/udev.cpp" struct InputUdev : InputDriver { InputUdev& self = *this; InputUdev(Input& super) : InputDriver(super), keyboard(super), mouse(super), joypad(super) {} ~InputUdev() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "udev"; } auto ready() -> bool override { return isReady; } auto hasContext() -> bool override { return true; } auto setContext(uintptr context) -> bool override { return initialize(); } auto acquired() -> bool override { return mouse.acquired(); } auto acquire() -> bool override { return mouse.acquire(); } auto release() -> bool override { return mouse.release(); } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); mouse.poll(devices); joypad.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { return joypad.rumble(id, enable); } private: auto initialize() -> bool { terminate(); if(!self.context) return false; if(!keyboard.initialize()) return false; if(!mouse.initialize(self.context)) return false; if(!joypad.initialize()) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); mouse.terminate(); joypad.terminate(); } bool isReady = false; InputKeyboardXlib keyboard; InputMouseXlib mouse; InputJoypadUdev joypad; }; ares-126/ruby/input/uhid.cpp000066400000000000000000000032101415063341600160720ustar00rootroot00000000000000#include #include #include #include #include #include "keyboard/xlib.cpp" #include "mouse/xlib.cpp" #include "joypad/uhid.cpp" struct InputUHID : InputDriver { InputUHID& self = *this; InputUHID(Input& super) : InputDriver(super), keyboard(super), mouse(super), joypad(super) {} ~InputUHID() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "uhid"; } auto ready() -> bool override { return isReady; } auto hasContext() -> bool override { return true; } auto setContext(uintptr context) -> bool override { return initialize(); } auto acquired() -> bool override { return mouse.acquired(); } auto acquire() -> bool override { return mouse.acquire(); } auto release() -> bool override { return mouse.release(); } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); mouse.poll(devices); joypad.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { return false; } private: auto initialize() -> bool { terminate(); if(!self.context) return false; if(!keyboard.initialize()) return false; if(!mouse.initialize(self.context)) return false; if(!joypad.initialize()) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); mouse.terminate(); joypad.terminate(); } bool isReady = false; InputKeyboardXlib keyboard; InputMouseXlib mouse; InputJoypadUHID joypad; }; ares-126/ruby/input/windows.cpp000066400000000000000000000055501415063341600166440ustar00rootroot00000000000000#include #define DIRECTINPUT_VERSION 0x0800 #include #include "shared/rawinput.cpp" #include "keyboard/rawinput.cpp" #include "mouse/rawinput.cpp" #include "joypad/xinput.cpp" #include "joypad/directinput.cpp" struct InputWindows : InputDriver { InputWindows& self = *this; InputWindows(Input& super) : InputDriver(super), keyboard(super), mouse(super), joypadXInput(super), joypadDirectInput(super) {} ~InputWindows() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "Windows"; } auto ready() -> bool override { return isReady; } auto hasContext() -> bool override { return true; } auto setContext(uintptr context) -> bool override { return initialize(); } auto acquired() -> bool override { return mouse.acquired(); } auto acquire() -> bool override { return mouse.acquire(); } auto release() -> bool override { return mouse.release(); } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); mouse.poll(devices); joypadXInput.poll(devices); joypadDirectInput.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { if(joypadXInput.rumble(id, enable)) return true; if(joypadDirectInput.rumble(id, enable)) return true; return false; } private: auto initialize() -> bool { terminate(); if(!self.context) return false; //TODO: this won't work if Input is recreated post-initialization; nor will it work with multiple Input instances if(!rawinput.initialized) { rawinput.initialized = true; rawinput.mutex = CreateMutex(nullptr, false, nullptr); CreateThread(nullptr, 0, RawInputThreadProc, 0, 0, nullptr); do { Sleep(1); WaitForSingleObject(rawinput.mutex, INFINITE); ReleaseMutex(rawinput.mutex); } while(!rawinput.ready); } DirectInput8Create(GetModuleHandle(0), DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&directInputContext, 0); if(!directInputContext) return false; if(!keyboard.initialize()) return false; if(!mouse.initialize(self.context)) return false; bool xinputAvailable = joypadXInput.initialize(); if(!joypadDirectInput.initialize(self.context, directInputContext, xinputAvailable)) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); mouse.terminate(); joypadXInput.terminate(); joypadDirectInput.terminate(); if(directInputContext) { directInputContext->Release(); directInputContext = nullptr; } } bool isReady = false; InputKeyboardRawInput keyboard; InputMouseRawInput mouse; InputJoypadXInput joypadXInput; InputJoypadDirectInput joypadDirectInput; LPDIRECTINPUT8 directInputContext = nullptr; }; ares-126/ruby/input/xlib.cpp000066400000000000000000000027471415063341600161150ustar00rootroot00000000000000#include #include #include #include #include #include "keyboard/xlib.cpp" #include "mouse/xlib.cpp" struct InputXlib : InputDriver { InputXlib& self = *this; InputXlib(Input& super) : InputDriver(super), keyboard(super), mouse(super) {} ~InputXlib() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "Xlib"; } auto ready() -> bool override { return isReady; } auto hasContext() -> bool override { return true; } auto setContext(uintptr context) -> bool override { return initialize(); } auto acquired() -> bool override { return mouse.acquired(); } auto acquire() -> bool override { return mouse.acquire(); } auto release() -> bool override { return mouse.release(); } auto poll() -> vector> override { vector> devices; keyboard.poll(devices); mouse.poll(devices); return devices; } auto rumble(u64 id, bool enable) -> bool override { return false; } private: auto initialize() -> bool { terminate(); if(!self.context) return false; if(!keyboard.initialize()) return false; if(!mouse.initialize(self.context)) return false; return isReady = true; } auto terminate() -> void { isReady = false; keyboard.terminate(); mouse.terminate(); } bool isReady = false; InputKeyboardXlib keyboard; InputMouseXlib mouse; }; ares-126/ruby/ruby.cpp000066400000000000000000000013131415063341600147650ustar00rootroot00000000000000#include using namespace nall; using namespace ruby; #undef deprecated #undef mkdir #undef noinline #undef usleep #if defined(DISPLAY_XORG) #include #include #include #include #elif defined(DISPLAY_QUARTZ) #include #include #include #include #include #include #include #elif defined(DISPLAY_WINDOWS) #define far #include #endif #include #include #include ares-126/ruby/ruby.hpp000066400000000000000000000016441415063341600150010ustar00rootroot00000000000000#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using nall::atomic; using nall::function; using nall::lock_guard; using nall::mutex; using nall::queue; using nall::recursive_mutex; using nall::shared_pointer; using nall::string; using nall::tuple; using nall::unique_pointer; using nall::vector; namespace ruby { #include #include #include } ares-126/ruby/video/000077500000000000000000000000001415063341600144105ustar00rootroot00000000000000ares-126/ruby/video/cgl.cpp000066400000000000000000000145441415063341600156710ustar00rootroot00000000000000#define GL_ALPHA_TEST 0x0bc0 #include "opengl/opengl.hpp" struct VideoCGL; @interface RubyVideoCGL : NSOpenGLView { @public VideoCGL* video; } -(id) initWith:(VideoCGL*)video pixelFormat:(NSOpenGLPixelFormat*)pixelFormat; -(void) reshape; -(BOOL) acceptsFirstResponder; @end @interface RubyWindowCGL : NSWindow { @public VideoCGL* video; } -(id) initWith:(VideoCGL*)video; -(BOOL) canBecomeKeyWindow; -(BOOL) canBecomeMainWindow; @end struct VideoCGL : VideoDriver, OpenGL { VideoCGL& self = *this; VideoCGL(Video& super) : VideoDriver(super) {} ~VideoCGL() { terminate(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "OpenGL 3.2"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasFlush() -> bool override { return true; } auto hasShader() -> bool override { return true; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { if(!view) return true; acquireContext(); s32 blocking32 = self.blocking; [[view openGLContext] setValues:&blocking32 forParameter:NSOpenGLCPSwapInterval]; releaseContext(); return true; } auto setFlush(bool flush) -> bool override { return true; } auto setShader(string shader) -> bool override { acquireContext(); OpenGL::setShader(shader); releaseContext(); return true; } auto focused() -> bool override { return true; } auto clear() -> void override { acquireContext(); [view lockFocus]; OpenGL::clear(); [[view openGLContext] flushBuffer]; [view unlockFocus]; releaseContext(); } auto size(u32& width, u32& height) -> void override { auto area = [view convertRectToBacking:[view bounds]]; width = area.size.width; height = area.size.height; } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { acquireContext(); OpenGL::size(width, height); bool result = OpenGL::lock(data, pitch); releaseContext(); return result; } auto release() -> void override { } auto output(u32 width, u32 height) -> void override { lock_guard lock(mutex); acquireContext(); u32 windowWidth, windowHeight; size(windowWidth, windowHeight); if([view lockFocusIfCanDraw]) { OpenGL::absoluteWidth = width; OpenGL::absoluteHeight = height; OpenGL::outputX = 0; OpenGL::outputY = 0; OpenGL::outputWidth = windowWidth; OpenGL::outputHeight = windowHeight; OpenGL::output(); [[view openGLContext] flushBuffer]; if(self.flush) glFinish(); [view unlockFocus]; } releaseContext(); } private: auto acquireContext() -> void { lock_guard lock(mutex); [[view openGLContext] makeCurrentContext]; } auto releaseContext() -> void { lock_guard lock(mutex); [NSOpenGLContext clearCurrentContext]; } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; if(self.fullScreen) { window = [[RubyWindowCGL alloc] initWith:this]; [window setCollectionBehavior:NSWindowCollectionBehaviorFullScreenPrimary]; [window toggleFullScreen:nil]; //[NSApp setPresentationOptions:NSApplicationPresentationFullScreen]; } NSOpenGLPixelFormatAttribute attributeList[] = { NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core, NSOpenGLPFAColorSize, 24, NSOpenGLPFAAlphaSize, 8, NSOpenGLPFADoubleBuffer, 0 }; auto context = self.fullScreen ? [window contentView] : (__bridge NSView*)(void *)self.context; auto size = [context frame].size; auto format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributeList]; auto openGLContext = [[NSOpenGLContext alloc] initWithFormat:format shareContext:nil]; view = [[RubyVideoCGL alloc] initWith:this pixelFormat:format]; [view setOpenGLContext:openGLContext]; [view setFrame:NSMakeRect(0, 0, size.width, size.height)]; [view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; [view setWantsBestResolutionOpenGLSurface:YES]; [context addSubview:view]; [openGLContext setView:view]; [openGLContext makeCurrentContext]; [[view window] makeFirstResponder:view]; [view lockFocus]; OpenGL::initialize(self.shader); s32 blocking = self.blocking; [[view openGLContext] setValues:&blocking forParameter:NSOpenGLCPSwapInterval]; [view unlockFocus]; releaseContext(); clear(); return _ready = true; } auto terminate() -> void { acquireContext(); _ready = false; OpenGL::terminate(); if(view) { [view removeFromSuperview]; view = nil; } if(window) { //[NSApp setPresentationOptions:NSApplicationPresentationDefault]; [window toggleFullScreen:nil]; [window setCollectionBehavior:NSWindowCollectionBehaviorDefault]; [window close]; window = nil; } } RubyVideoCGL* view = nullptr; RubyWindowCGL* window = nullptr; bool _ready = false; std::recursive_mutex mutex; }; @implementation RubyVideoCGL : NSOpenGLView -(id) initWith:(VideoCGL*)videoPointer pixelFormat:(NSOpenGLPixelFormat*)pixelFormat { if(self = [super initWithFrame:NSMakeRect(0, 0, 0, 0) pixelFormat:pixelFormat]) { video = videoPointer; } return self; } -(void) reshape { [super reshape]; video->output(0, 0); } -(BOOL) acceptsFirstResponder { return YES; } -(void) keyDown:(NSEvent*)event { } -(void) keyUp:(NSEvent*)event { } @end @implementation RubyWindowCGL : NSWindow -(id) initWith:(VideoCGL*)videoPointer { auto primaryRect = [[[NSScreen screens] objectAtIndex:0] frame]; if(self = [super initWithContentRect:primaryRect styleMask:0 backing:NSBackingStoreBuffered defer:YES]) { video = videoPointer; [self setDelegate:self]; [self setReleasedWhenClosed:NO]; [self setAcceptsMouseMovedEvents:YES]; [self setTitle:@""]; [self makeKeyAndOrderFront:nil]; } return self; } -(BOOL) canBecomeKeyWindow { return YES; } -(BOOL) canBecomeMainWindow { return YES; } @end ares-126/ruby/video/direct3d.cpp000066400000000000000000000316271415063341600166260ustar00rootroot00000000000000#undef interface #define interface struct #include #undef interface static LRESULT CALLBACK VideoDirect3D9_WindowProcedure(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { if(msg == WM_SYSKEYDOWN && wparam == VK_F4) return false; return DefWindowProc(hwnd, msg, wparam, lparam); } struct VideoDirect3D : VideoDriver { VideoDirect3D& self = *this; VideoDirect3D(Video& super) : VideoDriver(super) { construct(); } ~VideoDirect3D() { destruct(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "Direct3D 9.0"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasExclusive() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasShader() -> bool override { return true; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setExclusive(bool exclusive) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return true; } auto setShader(string shader) -> bool override { return updateFilter(); } auto focused() -> bool override { if(self.fullScreen && self.exclusive) return true; auto focused = GetFocus(); return _context == focused || IsChild(_context, focused); } auto clear() -> void override { if(_lost && !recover()) return; D3DSURFACE_DESC surfaceDescription; _texture->GetLevelDesc(0, &surfaceDescription); _texture->GetSurfaceLevel(0, &_surface); if(_surface) { D3DLOCKED_RECT lockedRectangle; _surface->LockRect(&lockedRectangle, 0, D3DLOCK_NOSYSLOCK | D3DLOCK_DISCARD); memory::fill(lockedRectangle.pBits, lockedRectangle.Pitch * surfaceDescription.Height); _surface->UnlockRect(); _surface->Release(); _surface = nullptr; } //clear primary display and all backbuffers for(u32 n : range(3)) { _device->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0x00, 0x00, 0x00), 1.0f, 0); _device->Present(0, 0, 0, 0); } } auto size(u32& width, u32& height) -> void override { if(_lost && !recover()) return; RECT rectangle; GetClientRect(_context, &rectangle); width = rectangle.right - rectangle.left; height = rectangle.bottom - rectangle.top; //if output size changed, driver must be re-initialized. //failure to do so causes scaling issues on some video drivers. if(width != _windowWidth || height != _windowHeight) initialize(); } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { if(_lost && !recover()) return false; u32 windowWidth, windowHeight; size(windowWidth, windowHeight); if(width != _inputWidth || height != _inputHeight) { resize(_inputWidth = width, _inputHeight = height); } D3DSURFACE_DESC surfaceDescription; _texture->GetLevelDesc(0, &surfaceDescription); _texture->GetSurfaceLevel(0, &_surface); D3DLOCKED_RECT lockedRectangle; _surface->LockRect(&lockedRectangle, 0, D3DLOCK_NOSYSLOCK | D3DLOCK_DISCARD); pitch = lockedRectangle.Pitch; return data = (u32*)lockedRectangle.pBits; } auto release() -> void override { _surface->UnlockRect(); _surface->Release(); _surface = nullptr; } auto output(u32 width, u32 height) -> void override { if(_lost && !recover()) return; if(!width) width = _windowWidth; if(!height) height = _windowHeight; _device->BeginScene(); //center output within window u32 x = (_windowWidth - width) / 2; u32 y = (_windowHeight - height) / 2; setVertex(0, 0, _inputWidth, _inputHeight, _textureWidth, _textureHeight, x, y, width, height); _device->SetTexture(0, _texture); _device->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2); _device->EndScene(); if(self.blocking) { D3DRASTER_STATUS status; while(true) { //wait for a previous vblank to finish, if necessary _device->GetRasterStatus(0, &status); if(!status.InVBlank) break; } while(true) { //wait for next vblank to begin _device->GetRasterStatus(0, &status); if(status.InVBlank) break; } } if(_device->Present(0, 0, 0, 0) == D3DERR_DEVICELOST) _lost = true; } private: auto construct() -> void { WNDCLASS windowClass{}; windowClass.cbClsExtra = 0; windowClass.cbWndExtra = 0; windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); windowClass.hCursor = LoadCursor(0, IDC_ARROW); windowClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION); windowClass.hInstance = GetModuleHandle(0); windowClass.lpfnWndProc = VideoDirect3D9_WindowProcedure; windowClass.lpszClassName = L"VideoDirect3D9_Window"; windowClass.lpszMenuName = 0; windowClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&windowClass); } auto destruct() -> void { terminate(); } auto recover() -> bool { if(!_device) return false; if(_lost) { if(_vertexBuffer) { _vertexBuffer->Release(); _vertexBuffer = nullptr; } if(_surface) { _surface->Release(); _surface = nullptr; } if(_texture) { _texture->Release(); _texture = nullptr; } if(_device->Reset(&_presentation) != D3D_OK) return false; } _lost = false; _device->SetDialogBoxMode(false); _device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1); _device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); _device->SetTextureStageState(0, D3DTSS_COLORARG2, D3DTA_DIFFUSE); _device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1); _device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); _device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); _device->SetRenderState(D3DRS_LIGHTING, false); _device->SetRenderState(D3DRS_ZENABLE, false); _device->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); _device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); _device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); _device->SetRenderState(D3DRS_ALPHABLENDENABLE, false); _device->SetVertexShader(nullptr); _device->SetFVF(D3DFVF_XYZRHW | D3DFVF_TEX1); _device->CreateVertexBuffer(sizeof(Vertex) * 4, _vertexUsage, D3DFVF_XYZRHW | D3DFVF_TEX1, (D3DPOOL)_vertexPool, &_vertexBuffer, nullptr); _textureWidth = 0; _textureHeight = 0; resize(_inputWidth = 256, _inputHeight = 256); updateFilter(); clear(); return true; } auto resize(u32 width, u32 height) -> void { if(_textureWidth >= width && _textureHeight >= height) return; _textureWidth = bit::round(max(width, _textureWidth)); _textureHeight = bit::round(max(height, _textureHeight)); if(_capabilities.MaxTextureWidth < _textureWidth || _capabilities.MaxTextureWidth < _textureHeight) return; if(_texture) _texture->Release(); _device->CreateTexture(_textureWidth, _textureHeight, 1, _textureUsage, D3DFMT_X8R8G8B8, (D3DPOOL)_texturePool, &_texture, nullptr); } auto updateFilter() -> bool { if(!_device) return false; if(_lost && !recover()) return false; auto filter = self.shader == "Blur" ? D3DTEXF_LINEAR : D3DTEXF_POINT; _device->SetSamplerState(0, D3DSAMP_MINFILTER, filter); _device->SetSamplerState(0, D3DSAMP_MAGFILTER, filter); return true; } //(x,y) screen coordinates, in pixels //(u,v) texture coordinates, betweeen 0.0 (top, left) to 1.0 (bottom, right) auto setVertex(u32 px, u32 py, u32 pw, u32 ph, u32 tw, u32 th, u32 x, u32 y, u32 w, u32 h) -> void { Vertex vertex[4]; vertex[0].x = vertex[2].x = (f64)(x - 0.5); vertex[1].x = vertex[3].x = (f64)(x + w - 0.5); vertex[0].y = vertex[1].y = (f64)(y - 0.5); vertex[2].y = vertex[3].y = (f64)(y + h - 0.5); //Z-buffer and RHW are unused for 2D blit, set to normal values vertex[0].z = vertex[1].z = vertex[2].z = vertex[3].z = 0.0; vertex[0].rhw = vertex[1].rhw = vertex[2].rhw = vertex[3].rhw = 1.0; f64 rw = (f64)w / (f64)pw * (f64)tw; f64 rh = (f64)h / (f64)ph * (f64)th; vertex[0].u = vertex[2].u = (f64)(px ) / rw; vertex[1].u = vertex[3].u = (f64)(px + w) / rw; vertex[0].v = vertex[1].v = (f64)(py ) / rh; vertex[2].v = vertex[3].v = (f64)(py + h) / rh; LPDIRECT3DVERTEXBUFFER9* vertexPointer = nullptr; _vertexBuffer->Lock(0, sizeof(Vertex) * 4, (void**)&vertexPointer, 0); memory::copy(vertexPointer, vertex, 4); _vertexBuffer->Unlock(); _device->SetStreamSource(0, _vertexBuffer, 0, sizeof(Vertex)); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; _exclusive = self.exclusive && self.fullScreen; //Direct3D exclusive mode targets the primary monitor only if(_exclusive) { POINT point{0, 0}; //the primary monitor always starts at (0,0) HMONITOR monitor = MonitorFromPoint(point, MONITOR_DEFAULTTOPRIMARY); MONITORINFOEX info{}; info.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(monitor, &info); _monitorX = info.rcMonitor.left; _monitorY = info.rcMonitor.top; _monitorWidth = info.rcMonitor.right - info.rcMonitor.left; _monitorHeight = info.rcMonitor.bottom - info.rcMonitor.top; } if(self.fullScreen) { _context = _window = CreateWindowEx(WS_EX_TOPMOST, L"VideoDirect3D9_Window", L"", WS_VISIBLE | WS_POPUP, _monitorX, _monitorY, _monitorWidth, _monitorHeight, nullptr, nullptr, GetModuleHandle(0), nullptr); } else { _context = (HWND)self.context; } RECT rectangle; GetClientRect(_context, &rectangle); _windowWidth = rectangle.right - rectangle.left; _windowHeight = rectangle.bottom - rectangle.top; _instance = Direct3DCreate9(D3D_SDK_VERSION); if(!_instance) return false; memory::fill(&_presentation, sizeof(_presentation)); _presentation.Flags = D3DPRESENTFLAG_VIDEO; _presentation.SwapEffect = D3DSWAPEFFECT_DISCARD; _presentation.BackBufferCount = 1; _presentation.MultiSampleType = D3DMULTISAMPLE_NONE; _presentation.MultiSampleQuality = 0; _presentation.EnableAutoDepthStencil = false; _presentation.AutoDepthStencilFormat = D3DFMT_UNKNOWN; _presentation.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; _presentation.hDeviceWindow = _context; _presentation.Windowed = !_exclusive; _presentation.BackBufferFormat = _exclusive ? D3DFMT_X8R8G8B8 : D3DFMT_UNKNOWN; _presentation.BackBufferWidth = _exclusive ? _monitorWidth : 0; _presentation.BackBufferHeight = _exclusive ? _monitorHeight : 0; _presentation.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; if(_instance->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, _context, D3DCREATE_FPU_PRESERVE | D3DCREATE_SOFTWARE_VERTEXPROCESSING, &_presentation, &_device) != D3D_OK) { return false; } _device->GetDeviceCaps(&_capabilities); if(_capabilities.Caps2 & D3DCAPS2_DYNAMICTEXTURES) { _textureUsage = D3DUSAGE_DYNAMIC; _texturePool = D3DPOOL_DEFAULT; _vertexUsage = D3DUSAGE_WRITEONLY | D3DUSAGE_DYNAMIC; _vertexPool = D3DPOOL_DEFAULT; } else { _textureUsage = 0; _texturePool = D3DPOOL_MANAGED; _vertexUsage = D3DUSAGE_WRITEONLY; _vertexPool = D3DPOOL_MANAGED; } _lost = false; return _ready = recover(); } auto terminate() -> void { _ready = false; if(_vertexBuffer) { _vertexBuffer->Release(); _vertexBuffer = nullptr; } if(_surface) { _surface->Release(); _surface = nullptr; } if(_texture) { _texture->Release(); _texture = nullptr; } if(_device) { _device->Release(); _device = nullptr; } if(_instance) { _instance->Release(); _instance = nullptr; } if(_window) { DestroyWindow(_window); _window = nullptr; } _context = nullptr; } struct Vertex { float x, y, z, rhw; //screen coordinates float u, v; //texture coordinates }; bool _ready = false; HWND _window = nullptr; HWND _context = nullptr; LPDIRECT3D9 _instance = nullptr; LPDIRECT3DDEVICE9 _device = nullptr; LPDIRECT3DVERTEXBUFFER9 _vertexBuffer = nullptr; D3DPRESENT_PARAMETERS _presentation = {}; D3DCAPS9 _capabilities = {}; LPDIRECT3DTEXTURE9 _texture = nullptr; LPDIRECT3DSURFACE9 _surface = nullptr; bool _exclusive = false; bool _lost = true; u32 _windowWidth; u32 _windowHeight; u32 _textureWidth; u32 _textureHeight; s32 _monitorX; s32 _monitorY; s32 _monitorWidth; s32 _monitorHeight; u32 _inputWidth; u32 _inputHeight; u32 _textureUsage; u32 _texturePool; u32 _vertexUsage; u32 _vertexPool; }; ares-126/ruby/video/directdraw.cpp000066400000000000000000000172041415063341600172500ustar00rootroot00000000000000#include #undef interface static LRESULT CALLBACK VideoDirectDraw7_WindowProcedure(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { if(msg == WM_SYSKEYDOWN && wparam == VK_F4) return false; return DefWindowProc(hwnd, msg, wparam, lparam); } struct VideoDirectDraw : VideoDriver { VideoDirectDraw& self = *this; VideoDirectDraw(Video& super) : VideoDriver(super) { construct(); } ~VideoDirectDraw() { destruct(); } auto create() -> bool override { VideoDriver::shader = "Blur"; return initialize(); } auto driver() -> string override { return "DirectDraw 7.0"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { return true; } auto focused() -> bool override { if(self.fullScreen && self.exclusive) return true; auto focused = GetFocus(); return _context == focused || IsChild(_context, focused); } auto clear() -> void override { DDBLTFX fx{}; fx.dwSize = sizeof(DDBLTFX); fx.dwFillColor = 0x00000000; _screen->Blt(0, 0, 0, DDBLT_WAIT | DDBLT_COLORFILL, &fx); _raster->Blt(0, 0, 0, DDBLT_WAIT | DDBLT_COLORFILL, &fx); } auto size(u32& width, u32& height) -> void override { RECT rectangle; GetClientRect(_context, &rectangle); width = rectangle.right - rectangle.left; height = rectangle.bottom - rectangle.top; } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { if(width != _width || height != _height) resize(_width = width, _height = height); DDSURFACEDESC2 description = {}; description.dwSize = sizeof(DDSURFACEDESC2); if(_raster->Lock(0, &description, DDLOCK_WAIT, 0) != DD_OK) { _raster->Restore(); if(_raster->Lock(0, &description, DDLOCK_WAIT, 0) != DD_OK) return false; } pitch = description.lPitch; return data = (u32*)description.lpSurface; } auto release() -> void override { _raster->Unlock(0); } auto output(u32 width, u32 height) -> void override { u32 windowWidth, windowHeight; size(windowWidth, windowHeight); if(self.blocking) while(true) { BOOL vblank; _interface->GetVerticalBlankStatus(&vblank); if(vblank) break; } RECT source; SetRect(&source, 0, 0, _width, _height); POINT point{0, 0}; ClientToScreen(_context, &point); RECT target; GetClientRect(_context, &target); OffsetRect(&target, point.x, point.y); target.left += ((s32)windowWidth - (s32)width) / 2; target.top += ((s32)windowHeight - (s32)height) / 2; target.right = target.left + width; target.bottom = target.top + height; if(_screen->Blt(&target, _raster, &source, DDBLT_WAIT, 0) == DDERR_SURFACELOST) { _screen->Restore(); _raster->Restore(); } } private: auto construct() -> void { WNDCLASS windowClass{}; windowClass.cbClsExtra = 0; windowClass.cbWndExtra = 0; windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); windowClass.hCursor = LoadCursor(0, IDC_ARROW); windowClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION); windowClass.hInstance = GetModuleHandle(0); windowClass.lpfnWndProc = VideoDirect3D9_WindowProcedure; windowClass.lpszClassName = L"VideoDirectDraw7_Window"; windowClass.lpszMenuName = 0; windowClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&windowClass); } auto destruct() -> void { terminate(); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; if(self.fullScreen) { _context = _window = CreateWindowEx(WS_EX_TOPMOST, L"VideoDirectDraw7_Window", L"", WS_VISIBLE | WS_POPUP, _monitorX, _monitorY, _monitorWidth, _monitorHeight, nullptr, nullptr, GetModuleHandle(0), nullptr); } else { _context = (HWND)self.context; } LPDIRECTDRAW interface = nullptr; DirectDrawCreate(0, &interface, 0); interface->QueryInterface(IID_IDirectDraw7, (void**)&_interface); interface->Release(); _interface->SetCooperativeLevel(_context, DDSCL_NORMAL); DDSURFACEDESC2 description{}; description.dwSize = sizeof(DDSURFACEDESC2); description.dwFlags = DDSD_CAPS; description.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; _interface->CreateSurface(&description, &_screen, 0); _interface->CreateClipper(0, &_clipper, 0); _clipper->SetHWnd(0, _context); _screen->SetClipper(_clipper); _raster = nullptr; _surfaceWidth = 0; _surfaceHeight = 0; resize(_width = 256, _height = 256); return _ready = true; } auto terminate() -> void { _ready = false; if(_clipper) { _clipper->Release(); _clipper = nullptr; } if(_raster) { _raster->Release(); _raster = nullptr; } if(_screen) { _screen->Release(); _screen = nullptr; } if(_interface) { _interface->Release(); _interface = nullptr; } if(_window) { DestroyWindow(_window); _window = nullptr; } _context = nullptr; } auto resize(u32 width, u32 height) -> void { if(_surfaceWidth >= width && _surfaceHeight >= height) return; _surfaceWidth = max(width, _surfaceWidth); _surfaceHeight = max(height, _surfaceHeight); if(_raster) _raster->Release(); DDSURFACEDESC2 description{}; description.dwSize = sizeof(DDSURFACEDESC2); _screen->GetSurfaceDesc(&description); s32 depth = description.ddpfPixelFormat.dwRGBBitCount; if(depth == 32) goto tryNativeSurface; memory::fill(&description, sizeof(DDSURFACEDESC2)); description.dwSize = sizeof(DDSURFACEDESC2); description.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT; description.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; //DDSCAPS_SYSTEMMEMORY description.dwWidth = _surfaceWidth; description.dwHeight = _surfaceHeight; description.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT); description.ddpfPixelFormat.dwFlags = DDPF_RGB; description.ddpfPixelFormat.dwRGBBitCount = 32; description.ddpfPixelFormat.dwRBitMask = 0xff0000; description.ddpfPixelFormat.dwGBitMask = 0x00ff00; description.ddpfPixelFormat.dwBBitMask = 0x0000ff; if(_interface->CreateSurface(&description, &_raster, 0) == DD_OK) return clear(); tryNativeSurface: memory::fill(&description, sizeof(DDSURFACEDESC2)); description.dwSize = sizeof(DDSURFACEDESC2); description.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT; description.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY; //DDSCAPS_SYSTEMMEMORY description.dwWidth = _surfaceWidth; description.dwHeight = _surfaceHeight; if(_interface->CreateSurface(&description, &_raster, 0) == DD_OK) return clear(); } bool _ready = false; s32 _monitorX = 0; s32 _monitorY = 0; s32 _monitorWidth = 0; s32 _monitorHeight = 0; u32 _width = 0; u32 _height = 0; HWND _context = nullptr; HWND _window = nullptr; LPDIRECTDRAW7 _interface = nullptr; LPDIRECTDRAWSURFACE7 _screen = nullptr; LPDIRECTDRAWSURFACE7 _raster = nullptr; LPDIRECTDRAWCLIPPER _clipper = nullptr; u32 _surfaceWidth = 0; u32 _surfaceHeight = 0; }; ares-126/ruby/video/gdi.cpp000066400000000000000000000112151415063341600156570ustar00rootroot00000000000000static LRESULT CALLBACK VideoGDI_WindowProcedure(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { if(msg == WM_SYSKEYDOWN && wparam == VK_F4) return false; return DefWindowProc(hwnd, msg, wparam, lparam); } struct VideoGDI : VideoDriver { VideoGDI& self = *this; VideoGDI(Video& super) : VideoDriver(super) { construct(); } ~VideoGDI() { destruct(); } auto create() -> bool override { VideoDriver::shader = "None"; return initialize(); } auto driver() -> string override { return "GDI"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto focused() -> bool override { if(self.fullScreen && self.exclusive) return true; auto focused = GetFocus(); return _context == focused || IsChild(_context, focused); } auto size(u32& width, u32& height) -> void override { RECT rectangle; GetClientRect(_context, &rectangle); width = rectangle.right - rectangle.left; height = rectangle.bottom - rectangle.top; } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { if(!_buffer || _width != width || _height != height) { if(_buffer) delete[] _buffer; if(_bitmap) DeleteObject(_bitmap); if(_dc) DeleteObject(_dc); _buffer = new u32[width * height](); _width = width; _height = height; HDC hdc = GetDC(_context); _dc = CreateCompatibleDC(hdc); _bitmap = CreateCompatibleBitmap(hdc, width, height); SelectObject(_dc, _bitmap); ReleaseDC(_context, hdc); memory::fill(&_info, sizeof(BITMAPINFO)); _info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); _info.bmiHeader.biWidth = width; _info.bmiHeader.biHeight = -height; _info.bmiHeader.biPlanes = 1; _info.bmiHeader.biBitCount = 32; _info.bmiHeader.biCompression = BI_RGB; _info.bmiHeader.biSizeImage = width * height * sizeof(u32); } pitch = _width * sizeof(u32); return data = _buffer; } auto release() -> void override { } auto output(u32 width, u32 height) -> void override { u32 windowWidth, windowHeight; size(windowWidth, windowHeight); SetDIBits(_dc, _bitmap, 0, _height, (void*)_buffer, &_info, DIB_RGB_COLORS); HDC hdc = GetDC(_context); StretchBlt(hdc, ((s32)windowWidth - (s32)width) / 2, ((s32)windowHeight - (s32)height) / 2, width, height, _dc, 0, 0, _width, _height, SRCCOPY ); ReleaseDC(_context, hdc); } private: auto construct() -> void { WNDCLASS windowClass{}; windowClass.cbClsExtra = 0; windowClass.cbWndExtra = 0; windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); windowClass.hCursor = LoadCursor(0, IDC_ARROW); windowClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION); windowClass.hInstance = GetModuleHandle(0); windowClass.lpfnWndProc = VideoGDI_WindowProcedure; windowClass.lpszClassName = L"VideoGDI_Window"; windowClass.lpszMenuName = 0; windowClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&windowClass); } auto destruct() -> void { terminate(); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; if(self.fullScreen) { _context = _window = CreateWindowEx(WS_EX_TOPMOST, L"VideoGDI_Window", L"", WS_VISIBLE | WS_POPUP, _monitorX, _monitorY, _monitorWidth, _monitorHeight, nullptr, nullptr, GetModuleHandle(0), nullptr); } else { _context = (HWND)self.context; } _width = 0; _height = 0; return _ready = true; } auto terminate() -> void { _ready = false; if(_buffer) { delete[] _buffer; _buffer = nullptr; } if(_bitmap) { DeleteObject(_bitmap); _bitmap = nullptr; } if(_dc) { DeleteDC(_dc); _dc = nullptr; } if(_window) { DestroyWindow(_window); _window = nullptr; } _context = nullptr; } bool _ready = false; s32 _monitorX = 0; s32 _monitorY = 0; s32 _monitorWidth = 0; s32 _monitorHeight = 0; u32* _buffer = nullptr; u32 _width = 0; u32 _height = 0; HWND _window = nullptr; HWND _context = nullptr; HBITMAP _bitmap = nullptr; HDC _dc = nullptr; BITMAPINFO _info = {}; }; ares-126/ruby/video/glx.cpp000066400000000000000000000241661415063341600157170ustar00rootroot00000000000000#include "opengl/opengl.hpp" #define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092 auto VideoGLX_X11ErrorHandler(Display*, XErrorEvent*) -> s32 { return 0; //suppress errors } struct VideoGLX : VideoDriver, OpenGL { VideoGLX& self = *this; VideoGLX(Video& super) : VideoDriver(super) { construct(); } ~VideoGLX() { destruct(); } auto create() -> bool override { VideoDriver::exclusive = true; VideoDriver::format = "ARGB24"; return initialize(); } auto driver() -> string override { return "OpenGL 3.2"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasFlush() -> bool override { return true; } auto hasShader() -> bool override { return true; } auto hasFormats() -> vector override { if(_depth == 30) return {"ARGB30", "ARGB24"}; if(_depth == 24) return {"ARGB24"}; return {"ARGB24"}; //fallback } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { acquireContext(); if(glXSwapInterval) glXSwapInterval(blocking); releaseContext(); return true; } auto setFlush(bool flush) -> bool override { return true; } auto setFormat(string format) -> bool override { if(format == "ARGB24") { OpenGL::inputFormat = GL_RGBA8; return initialize(); } if(format == "ARGB30") { OpenGL::inputFormat = GL_RGB10_A2; return initialize(); } return false; } auto setShader(string shader) -> bool override { acquireContext(); OpenGL::setShader(shader); releaseContext(); return true; } auto focused() -> bool override { return true; } auto clear() -> void override { acquireContext(); OpenGL::clear(); if(_doubleBuffer) glXSwapBuffers(_display, _glXWindow); releaseContext(); } auto size(u32& width, u32& height) -> void override { if(self.fullScreen) { width = _monitorWidth; height = _monitorHeight; } else { XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); width = parent.width; height = parent.height; } } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { acquireContext(); OpenGL::size(width, height); bool result = OpenGL::lock(data, pitch); releaseContext(); return result; } auto release() -> void override { } auto output(u32 width, u32 height) -> void override { acquireContext(); XWindowAttributes window; XGetWindowAttributes(_display, _window, &window); XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); if(window.width != parent.width || window.height != parent.height) { XResizeWindow(_display, _window, parent.width, parent.height); } //convert (0,0) from top-left to bottom-left coordinates auto _height = height ? height : _monitorHeight; auto _monitorY = parent.height - (this->_monitorY + _height) - (_monitorHeight - _height); OpenGL::absoluteWidth = width; OpenGL::absoluteHeight = height; OpenGL::outputX = self.fullScreen ? _monitorX : 0; OpenGL::outputY = self.fullScreen ? _monitorY : 0; OpenGL::outputWidth = self.fullScreen ? _monitorWidth : parent.width; OpenGL::outputHeight = self.fullScreen ? _monitorHeight : parent.height; OpenGL::output(); if(_doubleBuffer) glXSwapBuffers(_display, _glXWindow); if(self.flush) glFinish(); releaseContext(); } auto poll() -> void override { while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); if(event.type == Expose) { XWindowAttributes attributes; XGetWindowAttributes(_display, _window, &attributes); super.doUpdate(attributes.width, attributes.height); } } } private: auto construct() -> void { _display = XOpenDisplay(nullptr); _screen = DefaultScreen(_display); XWindowAttributes attributes{}; XGetWindowAttributes(_display, RootWindow(_display, _screen), &attributes); _depth = attributes.depth; } auto destruct() -> void { terminate(); XCloseDisplay(_display); } auto acquireContext() -> void { if(!_glXContext) return; while(!glXMakeCurrent(_display, _glXWindow, _glXContext)) spinloop(); } auto releaseContext() -> void { if(!_glXContext) return; while(!glXMakeCurrent(_display, 0, nullptr)) spinloop(); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; //require GLX 1.2+ API glXQueryVersion(_display, &_versionMajor, &_versionMinor); if(_versionMajor < 1 || (_versionMajor == 1 && _versionMinor < 2)) return false; s32 redDepth = VideoDriver::format == "RGB30" ? 10 : 8; s32 greenDepth = VideoDriver::format == "RGB30" ? 10 : 8; s32 blueDepth = VideoDriver::format == "RGB30" ? 10 : 8; //let GLX determine the best Visual to use for GL output; provide a few hints //note: some video drivers will override double buffering attribute s32 attributeList[] = { GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DOUBLEBUFFER, True, GLX_RED_SIZE, redDepth, GLX_GREEN_SIZE, greenDepth, GLX_BLUE_SIZE, blueDepth, None }; s32 fbCount = 0; GLXFBConfig* fbConfig = glXChooseFBConfig(_display, _screen, attributeList, &fbCount); if(fbCount == 0) return false; auto visual = glXGetVisualFromFBConfig(_display, fbConfig[0]); _parent = self.fullScreen ? RootWindow(_display, visual->screen) : (Window)self.context; XWindowAttributes windowAttributes; XGetWindowAttributes(_display, _parent, &windowAttributes); auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; //(Window)self.context has already been realized, most likely with DefaultVisual. //GLX requires that the GL output window has the same Visual as the GLX context. //it is not possible to change the Visual of an already realized (created) window. //therefore a new child window, using the same GLX Visual, must be created and binded to it. _colormap = XCreateColormap(_display, RootWindow(_display, visual->screen), visual->visual, AllocNone); XSetWindowAttributes attributes{}; attributes.border_pixel = 0; attributes.colormap = _colormap; attributes.override_redirect = self.fullScreen; _window = XCreateWindow(_display, _parent, 0, 0, windowAttributes.width, windowAttributes.height, 0, visual->depth, InputOutput, visual->visual, CWBorderPixel | CWColormap | CWOverrideRedirect, &attributes); XSelectInput(_display, _window, ExposureMask); XSetWindowBackground(_display, _window, 0); XMapWindow(_display, _window); XFlush(_display); //window must be realized (appear onscreen) before we make the context current while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); } _glXContext = glXCreateContext(_display, visual, 0, GL_TRUE); glXMakeCurrent(_display, _glXWindow = _window, _glXContext); //glXSwapInterval is used to toggle Vsync //note that the ordering is very important! MESA declares SGI, but the SGI function does nothing if(!glXSwapInterval) glXSwapInterval = (int (*)(int))glGetProcAddress("glXSwapIntervalMESA"); if(!glXSwapInterval) glXSwapInterval = (int (*)(int))glGetProcAddress("glXSwapIntervalSGI"); if(auto glXCreateContextAttribs = (auto (*)(Display*, GLXFBConfig, GLXContext, int, const int*) -> GLXContext)glGetProcAddress("glXCreateContextAttribsARB")) { int attributes[] = { GLX_CONTEXT_MAJOR_VERSION_ARB, 3, GLX_CONTEXT_MINOR_VERSION_ARB, 2, None }; //glXCreateContextAttribs tends to throw BadRequest errors instead of simply failing gracefully auto originalHandler = XSetErrorHandler(VideoGLX_X11ErrorHandler); auto context = glXCreateContextAttribs(_display, fbConfig[0], nullptr, true, attributes); XSync(_display, False); XSetErrorHandler(originalHandler); if(context) { glXMakeCurrent(_display, 0, nullptr); glXDestroyContext(_display, _glXContext); glXMakeCurrent(_display, _glXWindow, _glXContext = context); } else { //OpenGL 3.2+ not supported (most likely OpenGL 2.x) return false; } } else { //missing required glXCreateContextAtribs function return false; } if(glXSwapInterval) glXSwapInterval(self.blocking); //read attributes of frame buffer for later use, as requested attributes from above are not always granted int value = 0; glXGetConfig(_display, visual, GLX_DOUBLEBUFFER, &value); _doubleBuffer = value; _isDirect = glXIsDirect(_display, _glXContext); _ready = OpenGL::initialize(self.shader); releaseContext(); return _ready; } auto terminate() -> void { acquireContext(); _ready = false; OpenGL::terminate(); if(_glXContext) { glXDestroyContext(_display, _glXContext); _glXContext = nullptr; } if(_window) { XUnmapWindow(_display, _window); _window = 0; } if(_colormap) { XFreeColormap(_display, _colormap); _colormap = 0; } } bool _ready = false; auto (*glXSwapInterval)(int) -> int = nullptr; Display* _display = nullptr; u32 _monitorX = 0; u32 _monitorY = 0; u32 _monitorWidth = 0; u32 _monitorHeight = 0; s32 _screen = 0; u32 _depth = 24; //depth of the default root window Window _parent = 0; Window _window = 0; Colormap _colormap = 0; GLXContext _glXContext = nullptr; GLXWindow _glXWindow = 0; s32 _versionMajor = 0; s32 _versionMinor = 0; bool _doubleBuffer = false; bool _isDirect = false; }; ares-126/ruby/video/glx2.cpp000066400000000000000000000267231415063341600160020ustar00rootroot00000000000000//Xorg/GLX OpenGL 2.0 driver //note: this is a fallback driver for use when OpenGL 3.2 is not available. //see glx.cpp for comments on how this driver operates (they are very similar.) #if defined(DISPLAY_XORG) #include #include #ifndef glGetProcAddress #define glGetProcAddress(name) (*glXGetProcAddress)((const GLubyte*)(name)) #endif #elif defined(DISPLAY_QUARTZ) #include #elif defined(DISPLAY_WINDOWS) #include #include #ifndef glGetProcAddress #define glGetProcAddress(name) wglGetProcAddress(name) #endif #else #error "ruby::OpenGL2: unsupported platform" #endif struct VideoGLX2 : VideoDriver { VideoGLX2& self = *this; VideoGLX2(Video& super) : VideoDriver(super) { construct(); } ~VideoGLX2() { destruct(); } auto create() -> bool override { VideoDriver::exclusive = true; VideoDriver::format = "ARGB24"; return initialize(); } auto driver() -> string override { return "OpenGL 2.0"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasFlush() -> bool override { return true; } auto hasShader() -> bool override { return true; } auto hasFormats() -> vector override { if(_depth == 30) return {"ARGB30", "ARGB24"}; if(_depth == 24) return {"ARGB24"}; return {"ARGB24"}; //fallback } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { acquireContext(); if(glXSwapInterval) glXSwapInterval(blocking); releaseContext(); return true; } auto setFormat(string format) -> bool override { if(format == "ARGB24") { _glFormat = GL_UNSIGNED_INT_8_8_8_8_REV; return initialize(); } if(format == "ARGB30") { _glFormat = GL_UNSIGNED_INT_2_10_10_10_REV; return initialize(); } return false; } auto setShader(string shader) -> bool override { return true; } auto focused() -> bool override { return true; } auto clear() -> void override { acquireContext(); memory::fill(_glBuffer, _glWidth * _glHeight); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glFlush(); if(_isDoubleBuffered) glXSwapBuffers(_display, _glXWindow); releaseContext(); } auto size(u32& width, u32& height) -> void override { if(self.fullScreen) { width = _monitorWidth; height = _monitorHeight; } else { XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); width = parent.width; height = parent.height; } } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { if(width != _width || height != _height) resize(width, height); pitch = _glWidth * sizeof(u32); return data = _glBuffer; } auto release() -> void override { } auto output(u32 width, u32 height) -> void override { acquireContext(); XWindowAttributes window; XGetWindowAttributes(_display, _window, &window); XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); if(window.width != parent.width || window.height != parent.height) { XResizeWindow(_display, _window, parent.width, parent.height); } u32 viewportX = 0; u32 viewportY = 0; u32 viewportWidth = parent.width; u32 viewportHeight = parent.height; if(self.fullScreen) { viewportX = _monitorX; viewportY = _monitorY; viewportWidth = _monitorWidth; viewportHeight = _monitorHeight; } if(!width) width = viewportWidth; if(!height) height = viewportHeight; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, self.shader == "Blur" ? GL_LINEAR : GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, self.shader == "Blur" ? GL_LINEAR : GL_NEAREST); glMatrixMode(GL_PROJECTION); glLoadIdentity(); //vertex coordinates range from (0,0) to (1,1) for the entire desktop (all monitors) glOrtho(0, 1, 0, 1, -1.0, 1.0); //set the viewport to the entire desktop (all monitors) glViewport(0, 0, parent.width, parent.height); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPixelStorei(GL_UNPACK_ROW_LENGTH, _glWidth); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, _width, _height, GL_BGRA, _glFormat, _glBuffer); //normalize texture coordinates and adjust for NPOT textures f64 w = (f64)_width / (f64)_glWidth; f64 h = (f64)_height / (f64)_glHeight; //size of the active monitor f64 mw = (f64)viewportWidth / (f64)parent.width; f64 mh = (f64)viewportHeight / (f64)parent.height; //offset of the active monitor f64 mx = (f64)viewportX / (f64)parent.width; f64 my = (f64)viewportY / (f64)parent.height; //size of the render area f64 vw = (f64)width / (f64)parent.width; f64 vh = (f64)height / (f64)parent.height; //center the render area within the active monitor f64 vl = mx + (mw - vw) / 2; f64 vt = my + (mh - vh) / 2; f64 vr = vl + vw; f64 vb = vt + vh; //OpenGL places (0,0) at the bottom left; convert our (0,0) at the top left to this form: vt = 1.0 - vt; vb = 1.0 - vb; glBegin(GL_TRIANGLE_STRIP); glTexCoord2f(0, 0); glVertex3f(vl, vt, 0); glTexCoord2f(w, 0); glVertex3f(vr, vt, 0); glTexCoord2f(0, h); glVertex3f(vl, vb, 0); glTexCoord2f(w, h); glVertex3f(vr, vb, 0); glEnd(); glFlush(); if(_isDoubleBuffered) glXSwapBuffers(_display, _glXWindow); if(self.flush) glFinish(); releaseContext(); } auto poll() -> void override { while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); if(event.type == Expose) { XWindowAttributes attributes; XGetWindowAttributes(_display, _window, &attributes); super.doUpdate(attributes.width, attributes.height); } } } private: auto construct() -> void { _display = XOpenDisplay(nullptr); _screen = DefaultScreen(_display); XWindowAttributes attributes{}; XGetWindowAttributes(_display, RootWindow(_display, _screen), &attributes); _depth = attributes.depth; } auto destruct() -> void { terminate(); XCloseDisplay(_display); } auto acquireContext() -> void { if(!_glXContext) return; while(!glXMakeCurrent(_display, _glXWindow, _glXContext)) spinloop(); } auto releaseContext() -> void { if(!_glXContext) return; while(!glXMakeCurrent(_display, 0, nullptr)) spinloop(); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; s32 versionMajor = 0, versionMinor = 0; glXQueryVersion(_display, &versionMajor, &versionMinor); if(versionMajor < 1 || (versionMajor == 1 && versionMinor < 2)) return false; s32 redDepth = self.format == "RGB30" ? 10 : 8; s32 greenDepth = self.format == "RGB30" ? 10 : 8; s32 blueDepth = self.format == "RGB30" ? 10 : 8; s32 attributeList[] = { GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT, GLX_RENDER_TYPE, GLX_RGBA_BIT, GLX_DOUBLEBUFFER, True, GLX_RED_SIZE, redDepth, GLX_GREEN_SIZE, greenDepth, GLX_BLUE_SIZE, blueDepth, None }; s32 fbCount = 0; auto fbConfig = glXChooseFBConfig(_display, _screen, attributeList, &fbCount); if(fbCount == 0) return false; auto visual = glXGetVisualFromFBConfig(_display, fbConfig[0]); _parent = self.fullScreen ? RootWindow(_display, visual->screen) : (Window)self.context; XWindowAttributes windowAttributes; XGetWindowAttributes(_display, _parent, &windowAttributes); auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; _colormap = XCreateColormap(_display, RootWindow(_display, visual->screen), visual->visual, AllocNone); XSetWindowAttributes attributes{}; attributes.border_pixel = 0; attributes.colormap = _colormap; attributes.override_redirect = self.fullScreen; _window = XCreateWindow(_display, _parent, 0, 0, windowAttributes.width, windowAttributes.height, 0, visual->depth, InputOutput, visual->visual, CWBorderPixel | CWColormap | CWOverrideRedirect, &attributes); XSelectInput(_display, _window, ExposureMask); XSetWindowBackground(_display, _window, 0); XMapWindow(_display, _window); XFlush(_display); while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); } _glXContext = glXCreateContext(_display, visual, 0, GL_TRUE); glXMakeCurrent(_display, _glXWindow = _window, _glXContext); if(!glXSwapInterval) glXSwapInterval = (int (*)(int))glGetProcAddress("glXSwapIntervalMESA"); if(!glXSwapInterval) glXSwapInterval = (int (*)(int))glGetProcAddress("glXSwapIntervalSGI"); if(glXSwapInterval) glXSwapInterval(self.blocking); s32 value = 0; glXGetConfig(_display, visual, GLX_DOUBLEBUFFER, &value); _isDoubleBuffered = value; _isDirect = glXIsDirect(_display, _glXContext); glDisable(GL_ALPHA_TEST); glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); glDisable(GL_POLYGON_SMOOTH); glDisable(GL_STENCIL_TEST); glEnable(GL_DITHER); glEnable(GL_TEXTURE_2D); releaseContext(); resize(256, 256); return _ready = true; } auto terminate() -> void { acquireContext(); _ready = false; if(_glTexture) { glDeleteTextures(1, &_glTexture); _glTexture = 0; } if(_glBuffer) { delete[] _glBuffer; _glBuffer = nullptr; } _glWidth = 0; _glHeight = 0; if(_glXContext) { glXDestroyContext(_display, _glXContext); _glXContext = nullptr; } if(_window) { XUnmapWindow(_display, _window); _window = 0; } if(_colormap) { XFreeColormap(_display, _colormap); _colormap = 0; } } auto resize(u32 width, u32 height) -> void { acquireContext(); _width = width; _height = height; if(_glTexture == 0) glGenTextures(1, &_glTexture); _glWidth = max(_glWidth, width); _glHeight = max(_glHeight, height); delete[] _glBuffer; _glBuffer = new u32[_glWidth * _glHeight](); glBindTexture(GL_TEXTURE_2D, _glTexture); glPixelStorei(GL_UNPACK_ROW_LENGTH, _glWidth); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _glWidth, _glHeight, 0, GL_BGRA, _glFormat, _glBuffer); releaseContext(); } bool _ready = false; bool blur = false; Display* _display = nullptr; u32 _monitorX = 0; u32 _monitorY = 0; u32 _monitorWidth = 0; u32 _monitorHeight = 0; s32 _screen = 0; u32 _depth = 24; //depth of the default root window Window _parent = 0; Window _window = 0; Colormap _colormap = 0; GLXContext _glXContext = nullptr; GLXWindow _glXWindow = 0; bool _isDoubleBuffered = false; bool _isDirect = false; u32 _width = 256; u32 _height = 256; GLuint _glTexture = 0; u32* _glBuffer = nullptr; u32 _glWidth = 0; u32 _glHeight = 0; u32 _glFormat = GL_UNSIGNED_INT_8_8_8_8_REV; auto (*glXSwapInterval)(int) -> int = nullptr; }; ares-126/ruby/video/opengl/000077500000000000000000000000001415063341600156745ustar00rootroot00000000000000ares-126/ruby/video/opengl/bind.hpp000066400000000000000000000107671415063341600173340ustar00rootroot00000000000000#if defined(DISPLAY_WINDOWS) || defined(DISPLAY_XORG) PFNGLCREATEPROGRAMPROC glCreateProgram = nullptr; PFNGLDELETEPROGRAMPROC glDeleteProgram = nullptr; PFNGLUSEPROGRAMPROC glUseProgram = nullptr; PFNGLCREATESHADERPROC glCreateShader = nullptr; PFNGLDELETESHADERPROC glDeleteShader = nullptr; PFNGLSHADERSOURCEPROC glShaderSource = nullptr; PFNGLCOMPILESHADERPROC glCompileShader = nullptr; PFNGLGETSHADERIVPROC glGetShaderiv = nullptr; PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = nullptr; PFNGLATTACHSHADERPROC glAttachShader = nullptr; PFNGLDETACHSHADERPROC glDetachShader = nullptr; PFNGLLINKPROGRAMPROC glLinkProgram = nullptr; PFNGLVALIDATEPROGRAMPROC glValidateProgram = nullptr; PFNGLGETPROGRAMIVPROC glGetProgramiv = nullptr; PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog = nullptr; PFNGLGENVERTEXARRAYSPROC glGenVertexArrays = nullptr; PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays = nullptr; PFNGLBINDVERTEXARRAYPROC glBindVertexArray = nullptr; PFNGLGENBUFFERSPROC glGenBuffers = nullptr; PFNGLDELETEBUFFERSPROC glDeleteBuffers = nullptr; PFNGLBINDBUFFERPROC glBindBuffer = nullptr; PFNGLBUFFERDATAPROC glBufferData = nullptr; PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation = nullptr; PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = nullptr; PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray = nullptr; PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray = nullptr; PFNGLBINDFRAGDATALOCATIONPROC glBindFragDataLocation = nullptr; PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = nullptr; PFNGLGETUNIFORMIVPROC glGetUniformiv = nullptr; PFNGLUNIFORM1IPROC glUniform1i = nullptr; PFNGLUNIFORM1FPROC glUniform1f = nullptr; PFNGLUNIFORM2FPROC glUniform2f = nullptr; PFNGLUNIFORM2FVPROC glUniform2fv = nullptr; PFNGLUNIFORM4FPROC glUniform4f = nullptr; PFNGLUNIFORM4FVPROC glUniform4fv = nullptr; PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv = nullptr; PFNGLGENFRAMEBUFFERSPROC glGenFramebuffers = nullptr; PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = nullptr; PFNGLBINDFRAMEBUFFERPROC glBindFramebuffer = nullptr; PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D = nullptr; #endif #if defined(DISPLAY_WINDOWS) PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr; #endif static bool OpenGLBind() { #define bind(prototype, function) \ function = (prototype)glGetProcAddress(#function); \ if(function == nullptr) return false #if defined(DISPLAY_WINDOWS) || defined(DISPLAY_XORG) bind(PFNGLCREATEPROGRAMPROC, glCreateProgram); bind(PFNGLDELETEPROGRAMPROC, glDeleteProgram); bind(PFNGLUSEPROGRAMPROC, glUseProgram); bind(PFNGLCREATESHADERPROC, glCreateShader); bind(PFNGLDELETESHADERPROC, glDeleteShader); bind(PFNGLSHADERSOURCEPROC, glShaderSource); bind(PFNGLCOMPILESHADERPROC, glCompileShader); bind(PFNGLGETSHADERIVPROC, glGetShaderiv); bind(PFNGLGETSHADERINFOLOGPROC, glGetShaderInfoLog); bind(PFNGLATTACHSHADERPROC, glAttachShader); bind(PFNGLDETACHSHADERPROC, glDetachShader); bind(PFNGLLINKPROGRAMPROC, glLinkProgram); bind(PFNGLVALIDATEPROGRAMPROC, glValidateProgram); bind(PFNGLGETPROGRAMIVPROC, glGetProgramiv); bind(PFNGLGETPROGRAMINFOLOGPROC, glGetProgramInfoLog); bind(PFNGLGENVERTEXARRAYSPROC, glGenVertexArrays); bind(PFNGLDELETEVERTEXARRAYSPROC, glDeleteVertexArrays); bind(PFNGLBINDVERTEXARRAYPROC, glBindVertexArray); bind(PFNGLGENBUFFERSPROC, glGenBuffers); bind(PFNGLDELETEBUFFERSPROC, glDeleteBuffers); bind(PFNGLBINDBUFFERPROC, glBindBuffer); bind(PFNGLBUFFERDATAPROC, glBufferData); bind(PFNGLGETATTRIBLOCATIONPROC, glGetAttribLocation); bind(PFNGLVERTEXATTRIBPOINTERPROC, glVertexAttribPointer); bind(PFNGLENABLEVERTEXATTRIBARRAYPROC, glEnableVertexAttribArray); bind(PFNGLDISABLEVERTEXATTRIBARRAYPROC, glDisableVertexAttribArray); bind(PFNGLBINDFRAGDATALOCATIONPROC, glBindFragDataLocation); bind(PFNGLGETUNIFORMLOCATIONPROC, glGetUniformLocation); bind(PFNGLGETUNIFORMIVPROC, glGetUniformiv); bind(PFNGLUNIFORM1IPROC, glUniform1i); bind(PFNGLUNIFORM1FPROC, glUniform1f); bind(PFNGLUNIFORM2FPROC, glUniform2f); bind(PFNGLUNIFORM2FVPROC, glUniform2fv); bind(PFNGLUNIFORM4FPROC, glUniform4f); bind(PFNGLUNIFORM4FVPROC, glUniform4fv); bind(PFNGLUNIFORMMATRIX4FVPROC, glUniformMatrix4fv); bind(PFNGLGENFRAMEBUFFERSPROC, glGenFramebuffers); bind(PFNGLDELETEFRAMEBUFFERSPROC, glDeleteFramebuffers); bind(PFNGLBINDFRAMEBUFFERPROC, glBindFramebuffer); bind(PFNGLFRAMEBUFFERTEXTURE2DPROC, glFramebufferTexture2D); #endif #if defined(DISPLAY_WINDOWS) bind(PFNGLACTIVETEXTUREPROC, glActiveTexture); #endif #undef bind return true; } ares-126/ruby/video/opengl/main.hpp000066400000000000000000000165701415063341600173420ustar00rootroot00000000000000auto OpenGL::setShader(const string& pathname) -> void { for(auto& program : programs) program.release(); programs.reset(); settings.reset(); format = inputFormat; filter = GL_LINEAR; wrap = GL_CLAMP_TO_BORDER; absoluteWidth = 0, absoluteHeight = 0; relativeWidth = 0, relativeHeight = 0; u32 historySize = 0; if(pathname == "None") { filter = GL_NEAREST; } else if(pathname == "Blur") { filter = GL_LINEAR; } else if(directory::exists(pathname)) { auto document = BML::unserialize(file::read({pathname, "manifest.bml"})); for(auto node : document["settings"]) { settings.insert({node.name(), node.text()}); } for(auto node : document["input"]) { if(node.name() == "history") historySize = node.natural(); if(node.name() == "format") format = glrFormat(node.text()); if(node.name() == "filter") filter = glrFilter(node.text()); if(node.name() == "wrap") wrap = glrWrap(node.text()); } for(auto node : document["output"]) { string text = node.text(); if(node.name() == "width") { if(text.endsWith("%")) relativeWidth = toReal(text.trimRight("%", 1L)) / 100.0; else absoluteWidth = text.natural(); } if(node.name() == "height") { if(text.endsWith("%")) relativeHeight = toReal(text.trimRight("%", 1L)) / 100.0; else absoluteHeight = text.natural(); } } for(auto node : document.find("program")) { u32 n = programs.size(); programs(n).bind(this, node, pathname); } } //changing shaders may change input format, which requires the input texture to be recreated if(texture) { glDeleteTextures(1, &texture); texture = 0; } glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D(GL_TEXTURE_2D, 0, format, width, height, 0, getFormat(), getType(), buffer); allocateHistory(historySize); } auto OpenGL::allocateHistory(u32 size) -> void { for(auto& frame : history) glDeleteTextures(1, &frame.texture); history.reset(); while(size--) { OpenGLTexture frame; frame.filter = filter; frame.wrap = wrap; glGenTextures(1, &frame.texture); glBindTexture(GL_TEXTURE_2D, frame.texture); glTexImage2D(GL_TEXTURE_2D, 0, format, frame.width = width, frame.height = height, 0, getFormat(), getType(), buffer); history.append(frame); } } auto OpenGL::clear() -> void { for(auto& p : programs) { glUseProgram(p.program); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, p.framebuffer); glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); } glUseProgram(0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glClearColor(0, 0, 0, 1); glClear(GL_COLOR_BUFFER_BIT); } auto OpenGL::lock(u32*& data, u32& pitch) -> bool { pitch = width * sizeof(u32); return data = buffer; } auto OpenGL::output() -> void { clear(); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, texture); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, getFormat(), getType(), buffer); struct Source { GLuint texture; u32 width, height; GLuint filter, wrap; }; vector sources; sources.prepend({texture, width, height, filter, wrap}); for(auto& p : programs) { u32 targetWidth = p.absoluteWidth ? p.absoluteWidth : outputWidth; u32 targetHeight = p.absoluteHeight ? p.absoluteHeight : outputHeight; if(p.relativeWidth) targetWidth = sources[0].width * p.relativeWidth; if(p.relativeHeight) targetHeight = sources[0].height * p.relativeHeight; p.size(targetWidth, targetHeight); glUseProgram(p.program); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, p.framebuffer); glrUniform1i("phase", p.phase); glrUniform1i("historyLength", history.size()); glrUniform1i("sourceLength", sources.size()); glrUniform1i("pixmapLength", p.pixmaps.size()); glrUniform4f("targetSize", targetWidth, targetHeight, 1.0 / targetWidth, 1.0 / targetHeight); glrUniform4f("outputSize", outputWidth, outputHeight, 1.0 / outputWidth, 1.0 / outputHeight); u32 aid = 0; for(auto& frame : history) { glrUniform1i({"history[", aid, "]"}, aid); glrUniform4f({"historySize[", aid, "]"}, frame.width, frame.height, 1.0 / frame.width, 1.0 / frame.height); glActiveTexture(GL_TEXTURE0 + (aid++)); glBindTexture(GL_TEXTURE_2D, frame.texture); glrParameters(frame.filter, frame.wrap); } u32 bid = 0; for(auto& source : sources) { glrUniform1i({"source[", bid, "]"}, aid + bid); glrUniform4f({"sourceSize[", bid, "]"}, source.width, source.height, 1.0 / source.width, 1.0 / source.height); glActiveTexture(GL_TEXTURE0 + aid + (bid++)); glBindTexture(GL_TEXTURE_2D, source.texture); glrParameters(source.filter, source.wrap); } u32 cid = 0; for(auto& pixmap : p.pixmaps) { glrUniform1i({"pixmap[", cid, "]"}, aid + bid + cid); glrUniform4f({"pixmapSize[", bid, "]"}, pixmap.width, pixmap.height, 1.0 / pixmap.width, 1.0 / pixmap.height); glActiveTexture(GL_TEXTURE0 + aid + bid + (cid++)); glBindTexture(GL_TEXTURE_2D, pixmap.texture); glrParameters(pixmap.filter, pixmap.wrap); } glActiveTexture(GL_TEXTURE0); glrParameters(sources[0].filter, sources[0].wrap); p.render(sources[0].width, sources[0].height, 0, 0, targetWidth, targetHeight); glBindTexture(GL_TEXTURE_2D, p.texture); p.phase = (p.phase + 1) % p.modulo; sources.prepend({p.texture, p.width, p.height, p.filter, p.wrap}); } u32 targetWidth = absoluteWidth ? absoluteWidth : outputWidth; u32 targetHeight = absoluteHeight ? absoluteHeight : outputHeight; if(relativeWidth) targetWidth = sources[0].width * relativeWidth; if(relativeHeight) targetHeight = sources[0].height * relativeHeight; glUseProgram(program); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glrUniform1i("source[0]", 0); glrUniform4f("targetSize", targetWidth, targetHeight, 1.0 / targetWidth, 1.0 / targetHeight); glrUniform4f("outputSize", outputWidth, outputHeight, 1.0 / outputWidth, 1.0 / outputHeight); glrParameters(sources[0].filter, sources[0].wrap); render(sources[0].width, sources[0].height, outputX, outputY, outputWidth, outputHeight); if(history.size() > 0) { OpenGLTexture frame = history.takeRight(); glBindTexture(GL_TEXTURE_2D, frame.texture); if(width == frame.width && height == frame.height) { glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, getFormat(), getType(), buffer); } else { glTexImage2D(GL_TEXTURE_2D, 0, format, frame.width = width, frame.height = height, 0, getFormat(), getType(), buffer); } history.prepend(frame); } } auto OpenGL::initialize(const string& shader) -> bool { if(!OpenGLBind()) return false; glDisable(GL_BLEND); glDisable(GL_DEPTH_TEST); glDisable(GL_POLYGON_SMOOTH); glDisable(GL_STENCIL_TEST); glEnable(GL_DITHER); program = glCreateProgram(); vertex = glrCreateShader(program, GL_VERTEX_SHADER, OpenGLOutputVertexShader); //geometry = glrCreateShader(program, GL_GEOMETRY_SHADER, OpenGLGeometryShader); fragment = glrCreateShader(program, GL_FRAGMENT_SHADER, OpenGLFragmentShader); OpenGLSurface::allocate(); glrLinkProgram(program); setShader(shader); return initialized = true; } auto OpenGL::terminate() -> void { if(!initialized) return; setShader(""); //release shader resources (eg frame[] history) OpenGLSurface::release(); if(buffer) { delete[] buffer; buffer = nullptr; } initialized = false; } ares-126/ruby/video/opengl/opengl.hpp000066400000000000000000000051731415063341600176770ustar00rootroot00000000000000#if defined(DISPLAY_XORG) #include #include #ifndef glGetProcAddress #define glGetProcAddress(name) (*glXGetProcAddress)((const GLubyte*)(name)) #endif #elif defined(DISPLAY_QUARTZ) #include #elif defined(DISPLAY_WINDOWS) #include #include #ifndef glGetProcAddress #define glGetProcAddress(name) wglGetProcAddress(name) #endif #else #error "ruby::OpenGL3: unsupported platform" #endif #include "bind.hpp" #include "shaders.hpp" #include "utility.hpp" struct OpenGL; struct OpenGLTexture { auto getFormat() const -> GLuint; auto getType() const -> GLuint; GLuint texture = 0; u32 width = 0; u32 height = 0; GLuint format = GL_RGBA8; GLuint filter = GL_LINEAR; GLuint wrap = GL_CLAMP_TO_BORDER; }; struct OpenGLSurface : OpenGLTexture { auto allocate() -> void; auto size(u32 width, u32 height) -> void; auto release() -> void; auto render(u32 sourceWidth, u32 sourceHeight, u32 targetX, u32 targetY, u32 targetWidth, u32 targetHeight) -> void; GLuint program = 0; GLuint framebuffer = 0; GLuint vao = 0; GLuint vbo[3] = {0, 0, 0}; GLuint vertex = 0; GLuint geometry = 0; GLuint fragment = 0; u32* buffer = nullptr; }; struct OpenGLProgram : OpenGLSurface { auto bind(OpenGL* instance, const Markup::Node& node, const string& pathname) -> void; auto parse(OpenGL* instance, string& source) -> void; auto release() -> void; u32 phase = 0; //frame counter u32 modulo = 0; //frame counter modulus u32 absoluteWidth = 0; u32 absoluteHeight = 0; f64 relativeWidth = 0; f64 relativeHeight = 0; vector pixmaps; }; struct OpenGL : OpenGLProgram { auto setShader(const string& pathname) -> void; auto allocateHistory(u32 size) -> void; auto clear() -> void; auto lock(u32*& data, u32& pitch) -> bool; auto output() -> void; auto initialize(const string& shader) -> bool; auto terminate() -> void; vector programs; vector history; GLuint inputFormat = GL_RGBA8; u32 outputX = 0; u32 outputY = 0; u32 outputWidth = 0; u32 outputHeight = 0; struct Setting { string name; string value; bool operator< (const Setting& source) const { return name < source.name; } bool operator==(const Setting& source) const { return name == source.name; } Setting() = default; Setting(const string& name) : name(name) {} Setting(const string& name, const string& value) : name(name), value(value) {} }; set settings; bool initialized = false; }; #include "texture.hpp" #include "surface.hpp" #include "program.hpp" #include "main.hpp" ares-126/ruby/video/opengl/program.hpp000066400000000000000000000073711415063341600200640ustar00rootroot00000000000000auto OpenGLProgram::bind(OpenGL* instance, const Markup::Node& node, const string& pathname) -> void { filter = glrFilter(node["filter"].text()); wrap = glrWrap(node["wrap"].text()); modulo = glrModulo(node["modulo"].integer()); string w = node["width"].text(), h = node["height"].text(); if(w.endsWith("%")) relativeWidth = toReal(w.trimRight("%", 1L)) / 100.0; else absoluteWidth = w.natural(); if(h.endsWith("%")) relativeHeight = toReal(h.trimRight("%", 1L)) / 100.0; else absoluteHeight = h.natural(); format = glrFormat(node["format"].text()); program = glCreateProgram(); glGenFramebuffers(1, &framebuffer); if(file::exists({pathname, node["vertex"].text()})) { string source = file::read({pathname, node["vertex"].text()}); parse(instance, source); vertex = glrCreateShader(program, GL_VERTEX_SHADER, source); } else { vertex = glrCreateShader(program, GL_VERTEX_SHADER, OpenGLVertexShader); } if(file::exists({pathname, node["geometry"].text()})) { string source = file::read({pathname, node["geometry"].text()}); parse(instance, source); geometry = glrCreateShader(program, GL_GEOMETRY_SHADER, source); } else { //geometry shaders, when attached, must pass all vertex output through to the fragment shaders //geometry = glrCreateShader(program, GL_GEOMETRY_SHADER, OpenGLGeometryShader); } if(file::exists({pathname, node["fragment"].text()})) { string source = file::read({pathname, node["fragment"].text()}); parse(instance, source); fragment = glrCreateShader(program, GL_FRAGMENT_SHADER, source); } else { fragment = glrCreateShader(program, GL_FRAGMENT_SHADER, OpenGLFragmentShader); } for(auto& leaf : node.find("pixmap")) { nall::image image({pathname, leaf.text()}); if(!image) continue; image.transform(); GLuint texture; glGenTextures(1, &texture); u32 n = pixmaps.size(); pixmaps(n).texture = texture; pixmaps(n).width = image.width(); pixmaps(n).height = image.height(); pixmaps(n).format = format; pixmaps(n).filter = filter; pixmaps(n).wrap = wrap; if(leaf["format"]) pixmaps(n).format = glrFormat(leaf["format"].text()); if(leaf["filter"]) pixmaps(n).filter = glrFilter(leaf["filter"].text()); if(leaf["wrap"]) pixmaps(n).wrap = glrWrap(leaf["wrap"].text()); u32 w = glrSize(image.width()), h = glrSize(image.height()); u32* buffer = new u32[w * h](); glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D(GL_TEXTURE_2D, 0, pixmaps(n).format, w, h, 0, pixmaps(n).getFormat(), pixmaps(n).getType(), buffer); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image.width(), image.height(), getFormat(), getType(), image.data()); delete[] buffer; } OpenGLSurface::allocate(); glrLinkProgram(program); } //apply manifest settings to shader source #in tags auto OpenGLProgram::parse(OpenGL* instance, string& source) -> void { auto lines = source.split("\n"); for(auto& line : lines) { string s = line; if(auto position = s.find("//")) s.resize(position()); //strip comments s.strip(); //remove extraneous whitespace if(s.match("#in ?*")) { s.trimLeft("#in ", 1L).strip(); if(auto setting = instance->settings.find({s})) { line = {"#define ", setting().name, " ", setting().value}; } else { line.reset(); //undefined variable (test in source with #ifdef) } } } source = lines.merge("\n"); } auto OpenGLProgram::release() -> void { OpenGLSurface::release(); for(auto& pixmap : pixmaps) glDeleteTextures(1, &pixmap.texture); pixmaps.reset(); width = 0; height = 0; format = GL_RGBA8; filter = GL_LINEAR; wrap = GL_CLAMP_TO_BORDER; phase = 0; modulo = 0; absoluteWidth = 0; absoluteHeight = 0; relativeWidth = 0; relativeHeight = 0; } ares-126/ruby/video/opengl/shaders.hpp000066400000000000000000000034211415063341600200360ustar00rootroot00000000000000static string OpenGLOutputVertexShader = R"( #version 150 uniform vec4 targetSize; uniform vec4 outputSize; in vec2 texCoord; out Vertex { vec2 texCoord; } vertexOut; void main() { //center image within output window if(gl_VertexID == 0 || gl_VertexID == 2) { gl_Position.x = -(targetSize.x / outputSize.x); } else { gl_Position.x = +(targetSize.x / outputSize.x); } //center and flip vertically (buffer[0, 0] = top-left; OpenGL[0, 0] = bottom-left) if(gl_VertexID == 0 || gl_VertexID == 1) { gl_Position.y = +(targetSize.y / outputSize.y); } else { gl_Position.y = -(targetSize.y / outputSize.y); } //align image to even pixel boundary to prevent aliasing vec2 align = fract((outputSize.xy + targetSize.xy) / 2.0) * 2.0; gl_Position.xy -= align / outputSize.xy; gl_Position.zw = vec2(0.0, 1.0); vertexOut.texCoord = texCoord; } )"; static string OpenGLVertexShader = R"( #version 150 in vec4 position; in vec2 texCoord; out Vertex { vec2 texCoord; } vertexOut; void main() { gl_Position = position; vertexOut.texCoord = texCoord; } )"; static string OpenGLGeometryShader = R"( #version 150 layout(triangles) in; layout(triangle_strip, max_vertices = 3) out; in Vertex { vec2 texCoord; } vertexIn[]; out Vertex { vec2 texCoord; }; void main() { for(int i = 0; i < gl_in.length(); i++) { gl_Position = gl_in[i].gl_Position; texCoord = vertexIn[i].texCoord; EmitVertex(); } EndPrimitive(); } )"; static string OpenGLFragmentShader = R"( #version 150 uniform sampler2D source[]; in Vertex { vec2 texCoord; }; out vec4 fragColor; void main() { fragColor = texture(source[0], texCoord); } )"; ares-126/ruby/video/opengl/surface.hpp000066400000000000000000000074501415063341600200430ustar00rootroot00000000000000auto OpenGLSurface::allocate() -> void { glGenVertexArrays(1, &vao); glBindVertexArray(vao); glGenBuffers(3, &vbo[0]); } auto OpenGLSurface::size(u32 w, u32 h) -> void { if(width == w && height == h) return; width = w, height = h; w = glrSize(w), h = glrSize(h); if(texture) { glDeleteTextures(1, &texture); texture = 0; } if(buffer) { delete[] buffer; buffer = nullptr; } buffer = new u32[w * h](); glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, getFormat(), getType(), buffer); if(framebuffer) { glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); delete[] buffer; buffer = nullptr; } } auto OpenGLSurface::release() -> void { if(vbo[0]) { glDeleteBuffers(3, &vbo[0]); for(auto &o : vbo) o = 0; } if(vao) { glDeleteVertexArrays(1, &vao); vao = 0; } if(vertex) { glDetachShader(program, vertex); glDeleteShader(vertex); vertex = 0; } if(geometry) { glDetachShader(program, geometry); glDeleteShader(geometry); geometry = 0; } if(fragment) { glDetachShader(program, fragment); glDeleteShader(fragment); fragment = 0; } if(texture) { glDeleteTextures(1, &texture); texture = 0; } if(framebuffer) { glDeleteFramebuffers(1, &framebuffer); framebuffer = 0; } if(program) { glDeleteProgram(program); program = 0; } width = 0, height = 0; } auto OpenGLSurface::render(u32 sourceWidth, u32 sourceHeight, u32 targetX, u32 targetY, u32 targetWidth, u32 targetHeight) -> void { glViewport(targetX, targetY, targetWidth, targetHeight); f32 w = (f32)sourceWidth / (f32)glrSize(sourceWidth); f32 h = (f32)sourceHeight / (f32)glrSize(sourceHeight); f32 u = (f32)targetWidth; f32 v = (f32)targetHeight; GLfloat modelView[] = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, }; GLfloat projection[] = { 2.0f/u, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f/v, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, 0.0f, 1.0f, }; GLfloat modelViewProjection[4 * 4]; MatrixMultiply(modelViewProjection, modelView, 4, 4, projection, 4, 4); GLfloat vertices[] = { 0, 0, 0, 1, u, 0, 0, 1, 0, v, 0, 1, u, v, 0, 1, }; GLfloat positions[4 * 4]; for(u32 n = 0; n < 16; n += 4) { MatrixMultiply(&positions[n], &vertices[n], 1, 4, modelViewProjection, 4, 4); } GLfloat texCoords[] = { 0, 0, w, 0, 0, h, w, h, }; glrUniformMatrix4fv("modelView", modelView); glrUniformMatrix4fv("projection", projection); glrUniformMatrix4fv("modelViewProjection", modelViewProjection); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo[0]); glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); GLint locationVertex = glGetAttribLocation(program, "vertex"); glEnableVertexAttribArray(locationVertex); glVertexAttribPointer(locationVertex, 4, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, vbo[1]); glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(GLfloat), positions, GL_STATIC_DRAW); GLint locationPosition = glGetAttribLocation(program, "position"); glEnableVertexAttribArray(locationPosition); glVertexAttribPointer(locationPosition, 4, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ARRAY_BUFFER, vbo[2]); glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(GLfloat), texCoords, GL_STATIC_DRAW); GLint locationTexCoord = glGetAttribLocation(program, "texCoord"); glEnableVertexAttribArray(locationTexCoord); glVertexAttribPointer(locationTexCoord, 2, GL_FLOAT, GL_FALSE, 0, 0); glBindFragDataLocation(program, 0, "fragColor"); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableVertexAttribArray(locationVertex); glDisableVertexAttribArray(locationPosition); glDisableVertexAttribArray(locationTexCoord); } ares-126/ruby/video/opengl/texture.hpp000066400000000000000000000006421415063341600201070ustar00rootroot00000000000000auto OpenGLTexture::getFormat() const -> GLuint { if(format == GL_R32I) return GL_RED_INTEGER; if(format == GL_R32UI) return GL_RED_INTEGER; return GL_BGRA; } auto OpenGLTexture::getType() const -> GLuint { if(format == GL_R32I) return GL_UNSIGNED_INT; if(format == GL_R32UI) return GL_UNSIGNED_INT; if(format == GL_RGB10_A2) return GL_UNSIGNED_INT_2_10_10_10_REV; return GL_UNSIGNED_INT_8_8_8_8_REV; } ares-126/ruby/video/opengl/utility.hpp000066400000000000000000000071021415063341600201100ustar00rootroot00000000000000static auto glrSize(u32 size) -> u32 { return size; //return bit::round(size); //return nearest power of two } static auto glrFormat(const string& format) -> GLuint { if(format == "r32i" ) return GL_R32I; if(format == "r32ui" ) return GL_R32UI; if(format == "rgba8" ) return GL_RGBA8; if(format == "rgb10a2") return GL_RGB10_A2; if(format == "rgba12" ) return GL_RGBA12; if(format == "rgba16" ) return GL_RGBA16; if(format == "rgba16f") return GL_RGBA16F; if(format == "rgba32f") return GL_RGBA32F; return GL_RGBA8; } static auto glrFilter(const string& filter) -> GLuint { if(filter == "nearest") return GL_NEAREST; if(filter == "linear" ) return GL_LINEAR; return GL_LINEAR; } static auto glrWrap(const string& wrap) -> GLuint { if(wrap == "border") return GL_CLAMP_TO_BORDER; if(wrap == "edge" ) return GL_CLAMP_TO_EDGE; if(wrap == "repeat") return GL_REPEAT; return GL_CLAMP_TO_BORDER; } static auto glrModulo(u32 modulo) -> u32 { if(modulo) return modulo; return 300; //divisible by 2, 3, 4, 5, 6, 10, 12, 15, 20, 25, 30, 50, 60, 100, 150 } static auto glrProgram() -> GLuint { GLuint program = 0; glGetIntegerv(GL_CURRENT_PROGRAM, (GLint*)&program); return program; } static auto glrUniform1i(const string& name, GLint value) -> void { GLint location = glGetUniformLocation(glrProgram(), name); glUniform1i(location, value); } static auto glrUniform4f(const string& name, GLfloat value0, GLfloat value1, GLfloat value2, GLfloat value3) -> void { GLint location = glGetUniformLocation(glrProgram(), name); glUniform4f(location, value0, value1, value2, value3); } static auto glrUniformMatrix4fv(const string& name, GLfloat* values) -> void { GLint location = glGetUniformLocation(glrProgram(), name); glUniformMatrix4fv(location, 1, GL_FALSE, values); } static auto glrParameters(GLuint filter, GLuint wrap) -> void { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap); } static auto glrCreateShader(GLuint program, GLuint type, const char* source) -> GLuint { GLuint shader = glCreateShader(type); glShaderSource(shader, 1, &source, 0); glCompileShader(shader); GLint result = GL_FALSE; glGetShaderiv(shader, GL_COMPILE_STATUS, &result); if(result == GL_FALSE) { GLint length = 0; glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length); char text[length + 1]; glGetShaderInfoLog(shader, length, &length, text); text[length] = 0; print("[ruby::OpenGL: shader compiler error]\n", (const char*)text, "\n\n"); return 0; } glAttachShader(program, shader); return shader; } static auto glrLinkProgram(GLuint program) -> void { glLinkProgram(program); GLint result = GL_FALSE; glGetProgramiv(program, GL_LINK_STATUS, &result); if(result == GL_FALSE) { GLint length = 0; glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length); char text[length + 1]; glGetProgramInfoLog(program, length, &length, text); text[length] = 0; print("[ruby::OpenGL: shader linker error]\n", (const char*)text, "\n\n"); } glValidateProgram(program); result = GL_FALSE; glGetProgramiv(program, GL_VALIDATE_STATUS, &result); if(result == GL_FALSE) { GLint length = 0; glGetProgramiv(program, GL_INFO_LOG_LENGTH, &length); char text[length + 1]; glGetProgramInfoLog(program, length, &length, text); text[length] = 0; print("[ruby::OpenGL: shader validation error]\n", (const char*)text, "\n\n"); } } ares-126/ruby/video/video.cpp000066400000000000000000000317151415063341600162310ustar00rootroot00000000000000#if defined(VIDEO_CGL) #include #endif #if defined(VIDEO_DIRECT3D) #include #endif #if defined(VIDEO_DIRECTDRAW) #include #endif #if defined(VIDEO_GDI) #include #endif #if defined(VIDEO_GLX) #include #endif #if defined(VIDEO_GLX2) #include #endif #if defined(VIDEO_WGL) #include #endif #if defined(VIDEO_XSHM) #include #endif #if defined(VIDEO_XVIDEO) #include #endif namespace ruby { auto Video::setFullScreen(bool fullScreen) -> bool { lock_guard lock(mutex); if(instance->fullScreen == fullScreen) return true; if(!instance->hasFullScreen()) return false; if(!instance->setFullScreen(instance->fullScreen = fullScreen)) return false; return true; } auto Video::setMonitor(string monitor) -> bool { lock_guard lock(mutex); if(instance->monitor == monitor) return true; if(!instance->hasMonitor()) return false; if(!instance->setMonitor(instance->monitor = monitor)) return false; return true; } auto Video::setExclusive(bool exclusive) -> bool { lock_guard lock(mutex); if(instance->exclusive == exclusive) return true; if(!instance->hasExclusive()) return false; if(!instance->setExclusive(instance->exclusive = exclusive)) return false; return true; } auto Video::setContext(uintptr context) -> bool { lock_guard lock(mutex); if(instance->context == context) return true; if(!instance->hasContext()) return false; if(!instance->setContext(instance->context = context)) return false; return true; } auto Video::setBlocking(bool blocking) -> bool { lock_guard lock(mutex); if(instance->blocking == blocking) return true; if(!instance->hasBlocking()) return false; if(!instance->setBlocking(instance->blocking = blocking)) return false; return true; } auto Video::setFlush(bool flush) -> bool { lock_guard lock(mutex); if(instance->flush == flush) return true; if(!instance->hasFlush()) return false; if(!instance->setFlush(instance->flush = flush)) return false; return true; } auto Video::setFormat(string format) -> bool { lock_guard lock(mutex); if(instance->format == format) return true; if(!instance->hasFormat(format)) return false; if(!instance->setFormat(instance->format = format)) return false; return true; } auto Video::setShader(string shader) -> bool { lock_guard lock(mutex); if(instance->shader == shader) return true; if(!instance->hasShader()) return false; if(!instance->setShader(instance->shader = shader)) return false; return true; } // auto Video::focused() -> bool { lock_guard lock(mutex); return instance->focused(); } auto Video::clear() -> void { lock_guard lock(mutex); return instance->clear(); } auto Video::size() -> Size { lock_guard lock(mutex); Size result; instance->size(result.width, result.height); return result; } auto Video::acquire(u32 width, u32 height) -> Acquire { lock_guard lock(mutex); Acquire result; if(instance->acquire(result.data, result.pitch, width, height)) return result; return {}; } auto Video::release() -> void { lock_guard lock(mutex); return instance->release(); } auto Video::output(u32 width, u32 height) -> void { lock_guard lock(mutex); return instance->output(width, height); } auto Video::poll() -> void { lock_guard lock(mutex); return instance->poll(); } // auto Video::onUpdate(const function& onUpdate) -> void { lock_guard lock(mutex); update = onUpdate; } auto Video::doUpdate(u32 width, u32 height) -> void { lock_guard lock(mutex); if(update) return update(width, height); } // auto Video::create(string driver) -> bool { lock_guard lock(mutex); self.instance.reset(); if(!driver) driver = optimalDriver(); #if defined(VIDEO_CGL) if(driver == "OpenGL 3.2") self.instance = new VideoCGL(*this); #endif #if defined(VIDEO_DIRECT3D) if(driver == "Direct3D 9.0") self.instance = new VideoDirect3D(*this); #endif #if defined(VIDEO_DIRECTDRAW) if(driver == "DirectDraw 7.0") self.instance = new VideoDirectDraw(*this); #endif #if defined(VIDEO_GDI) if(driver == "GDI") self.instance = new VideoGDI(*this); #endif #if defined(VIDEO_GLX) if(driver == "OpenGL 3.2") self.instance = new VideoGLX(*this); #endif #if defined(VIDEO_GLX2) if(driver == "OpenGL 2.0") self.instance = new VideoGLX2(*this); #endif #if defined(VIDEO_WGL) if(driver == "OpenGL 3.2") self.instance = new VideoWGL(*this); #endif #if defined(VIDEO_XSHM) if(driver == "XShm") self.instance = new VideoXShm(*this); #endif #if defined(VIDEO_XVIDEO) if(driver == "XVideo") self.instance = new VideoXVideo(*this); #endif if(!self.instance) self.instance = new VideoDriver(*this); return self.instance->create(); } auto Video::hasDrivers() -> vector { return { #if defined(VIDEO_WGL) "OpenGL 3.2", #endif #if defined(VIDEO_DIRECT3D) "Direct3D 9.0", #endif #if defined(VIDEO_DIRECTDRAW) "DirectDraw 7.0", #endif #if defined(VIDEO_GDI) "GDI", #endif #if defined(VIDEO_CGL) "OpenGL 3.2", #endif #if defined(VIDEO_GLX) "OpenGL 3.2", #endif #if defined(VIDEO_GLX2) "OpenGL 2.0", #endif #if defined(VIDEO_XVIDEO) "XVideo", #endif #if defined(VIDEO_XSHM) "XShm", #endif "None"}; } auto Video::optimalDriver() -> string { #if defined(VIDEO_WGL) return "OpenGL 3.2"; #elif defined(VIDEO_DIRECT3D) return "Direct3D 9.0"; #elif defined(VIDEO_DIRECTDRAW) return "DirectDraw 7.0"; #elif defined(VIDEO_GDI) return "GDI"; #elif defined(VIDEO_CGL) return "OpenGL 3.2"; #elif defined(VIDEO_GLX) return "OpenGL 3.2"; #elif defined(VIDEO_GLX2) return "OpenGL 2.0"; #elif defined(VIDEO_XVIDEO) return "XVideo"; #elif defined(VIDEO_XSHM) return "XShm"; #else return "None"; #endif } auto Video::safestDriver() -> string { #if defined(VIDEO_DIRECT3D) return "Direct3D 9.0"; #elif defined(VIDEO_WGL) return "OpenGL 3.2"; #elif defined(VIDEO_DIRECTDRAW) return "DirectDraw 7.0"; #elif defined(VIDEO_GDI) return "GDI"; #elif defined(VIDEO_CGL) return "OpenGL 3.2"; #elif defined(VIDEO_XSHM) return "XShm"; #elif defined(VIDEO_XVIDEO) return "XVideo"; #elif defined(VIDEO_GLX2) return "OpenGL 2.0"; #elif defined(VIDEO_GLX) return "OpenGL 3.2"; #else return "None"; #endif } #if defined(DISPLAY_WINDOWS) static auto CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) -> BOOL { vector& monitors = *(vector*)dwData; MONITORINFOEX mi{}; mi.cbSize = sizeof(MONITORINFOEX); GetMonitorInfo(hMonitor, &mi); Video::Monitor monitor; string deviceName = (const char*)utf8_t(mi.szDevice); if(deviceName.beginsWith(R"(\\.\DISPLAYV)")) return true; //ignore pseudo-monitors DISPLAY_DEVICE dd{}; dd.cb = sizeof(DISPLAY_DEVICE); EnumDisplayDevices(mi.szDevice, 0, &dd, 0); string displayName = (const char*)utf8_t(dd.DeviceString); monitor.name = {1 + monitors.size(), ": ", displayName}; monitor.primary = mi.dwFlags & MONITORINFOF_PRIMARY; monitor.x = lprcMonitor->left; monitor.y = lprcMonitor->top; monitor.width = lprcMonitor->right - lprcMonitor->left; monitor.height = lprcMonitor->bottom - lprcMonitor->top; monitors.append(monitor); return true; } auto Video::hasMonitors() -> vector { vector monitors; EnumDisplayMonitors(nullptr, nullptr, MonitorEnumProc, (LPARAM)&monitors); vector sorted; for(auto& monitor : monitors) { if(monitor.primary == 1) sorted.append(monitor); } for(auto& monitor : monitors) { if(monitor.primary == 0) sorted.append(monitor); } return sorted; } #endif #if defined(DISPLAY_QUARTZ) static auto MonitorKeyArrayCallback(const void* key, const void* value, void* context) -> void { CFArrayAppendValue((CFMutableArrayRef)context, key); } auto Video::hasMonitors() -> vector { vector monitors; @autoreleasepool { u32 count = [[NSScreen screens] count]; for(u32 index : range(count)) { auto screen = [[NSScreen screens] objectAtIndex:index]; auto rectangle = [screen frame]; Monitor monitor; monitor.name = {1 + monitors.size(), ": Monitor"}; //fallback in case name lookup fails monitor.primary = monitors.size() == 0; //on macOS, the primary monitor is always the first monitor. monitor.x = rectangle.origin.x; monitor.y = rectangle.origin.y; monitor.width = rectangle.size.width; monitor.height = rectangle.size.height; //getting the name of the monitor on macOS: "Think Different" auto screenDictionary = [screen deviceDescription]; auto screenID = [screenDictionary objectForKey:@"NSScreenNumber"]; auto displayID = [screenID unsignedIntValue]; auto displayPort = CGDisplayIOServicePort(displayID); auto dictionary = IODisplayCreateInfoDictionary(displayPort, 0); CFRetain(dictionary); if(auto names = (CFDictionaryRef)CFDictionaryGetValue(dictionary, CFSTR(kDisplayProductName))) { auto languageKeys = CFArrayCreateMutable(kCFAllocatorDefault, 0, &kCFTypeArrayCallBacks); CFDictionaryApplyFunction(names, MonitorKeyArrayCallback, (void*)languageKeys); auto orderLanguageKeys = CFBundleCopyPreferredLocalizationsFromArray(languageKeys); CFRelease(languageKeys); if(orderLanguageKeys && CFArrayGetCount(orderLanguageKeys)) { auto languageKey = CFArrayGetValueAtIndex(orderLanguageKeys, 0); auto localName = CFDictionaryGetValue(names, languageKey); monitor.name = {1 + monitors.size(), ": ", [(__bridge NSString*)localName UTF8String]}; CFRelease(localName); } CFRelease(orderLanguageKeys); } CFRelease(dictionary); monitors.append(monitor); } } return monitors; } #endif #if defined(DISPLAY_XORG) auto Video::hasMonitors() -> vector { vector monitors; auto display = XOpenDisplay(nullptr); auto screen = DefaultScreen(display); auto rootWindow = RootWindow(display, screen); auto resources = XRRGetScreenResourcesCurrent(display, rootWindow); auto primary = XRRGetOutputPrimary(display, rootWindow); for(u32 index : range(resources->noutput)) { Monitor monitor; auto output = XRRGetOutputInfo(display, resources, resources->outputs[index]); if(output->connection != RR_Connected || output->crtc == None) { XRRFreeOutputInfo(output); continue; } auto crtc = XRRGetCrtcInfo(display, resources, output->crtc); monitor.name = {1 + monitors.size(), ": ", output->name}; //fallback name monitor.primary = false; for(u32 n : range(crtc->noutput)) monitor.primary |= crtc->outputs[n] == primary; monitor.x = crtc->x; monitor.y = crtc->y; monitor.width = crtc->width; monitor.height = crtc->height; //Linux: "Think Low-Level" Atom actualType; s32 actualFormat; unsigned long size; unsigned long bytesAfter; u8* data = nullptr; auto property = XRRGetOutputProperty( display, resources->outputs[index], XInternAtom(display, "EDID", 1), 0, 384, 0, 0, 0, &actualType, &actualFormat, &size, &bytesAfter, &data ); if(size >= 128) { string name{" "}; //there are four lights! er ... descriptors. one of them is the monitor name. if(data[0x39] == 0xfc) memory::copy(name.get(), &data[0x3b], 13); if(data[0x4b] == 0xfc) memory::copy(name.get(), &data[0x4d], 13); if(data[0x5d] == 0xfc) memory::copy(name.get(), &data[0x5f], 13); if(data[0x6f] == 0xfc) memory::copy(name.get(), &data[0x71], 13); if(name.strip()) { //format: "name\n " -> "name" monitor.name = {1 + monitors.size(), ": ", name, " [", output->name, "]"}; } } XFree(data); monitors.append(monitor); XRRFreeCrtcInfo(crtc); XRRFreeOutputInfo(output); } XRRFreeScreenResources(resources); XCloseDisplay(display); vector sorted; for(auto& monitor : monitors) { if(monitor.primary == 1) sorted.append(monitor); } for(auto& monitor : monitors) { if(monitor.primary == 0) sorted.append(monitor); } return sorted; } #endif auto Video::monitor(string name) -> Monitor { auto monitors = Video::hasMonitors(); //try to find by name if possible for(auto& monitor : monitors) { if(monitor.name == name) return monitor; } //fall back to primary if not found for(auto& monitor : monitors) { if(monitor.primary) return monitor; } //Video::monitors() should never let this occur Monitor monitor; monitor.name = "Primary"; monitor.primary = true; monitor.x = 0; monitor.y = 0; monitor.width = 640; monitor.height = 480; return monitor; } } ares-126/ruby/video/video.hpp000066400000000000000000000117061415063341600162340ustar00rootroot00000000000000struct Video; struct VideoDriver { VideoDriver(Video& super) : super(super) {} virtual ~VideoDriver() = default; virtual auto create() -> bool { return true; } virtual auto driver() -> string { return "None"; } virtual auto ready() -> bool { return true; } virtual auto hasFullScreen() -> bool { return false; } virtual auto hasMonitor() -> bool { return false; } virtual auto hasExclusive() -> bool { return false; } virtual auto hasContext() -> bool { return false; } virtual auto hasBlocking() -> bool { return false; } virtual auto hasFlush() -> bool { return false; } virtual auto hasFormats() -> vector { return {"ARGB24"}; } virtual auto hasShader() -> bool { return false; } auto hasFormat(string format) -> bool { return (bool)hasFormats().find(format); } virtual auto setFullScreen(bool fullScreen) -> bool { return true; } virtual auto setMonitor(string monitor) -> bool { return true; } virtual auto setExclusive(bool exclusive) -> bool { return true; } virtual auto setContext(uintptr context) -> bool { return true; } virtual auto setBlocking(bool blocking) -> bool { return true; } virtual auto setFlush(bool flush) -> bool { return true; } virtual auto setFormat(string format) -> bool { return true; } virtual auto setShader(string shader) -> bool { return true; } virtual auto focused() -> bool { return true; } virtual auto clear() -> void {} virtual auto size(u32& width, u32& height) -> void {} virtual auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool { return false; } virtual auto release() -> void {} virtual auto output(u32 width = 0, u32 height = 0) -> void {} virtual auto poll() -> void {} protected: Video& super; friend class Video; bool fullScreen = false; string monitor = "Primary"; bool exclusive = false; uintptr context = 0; bool blocking = false; bool flush = false; string format = "ARGB24"; string shader = "Blur"; }; struct Video { static auto hasDrivers() -> vector; static auto hasDriver(string driver) -> bool { return (bool)hasDrivers().find(driver); } static auto optimalDriver() -> string; static auto safestDriver() -> string; struct Monitor { string name; bool primary = false; s32 x = 0; s32 y = 0; s32 width = 0; s32 height = 0; }; static auto monitor(string name) -> Monitor; static auto hasMonitors() -> vector; static auto hasMonitor(string name) -> bool { for(auto& monitor : hasMonitors()) { if(monitor.name == name) return true; } return false; } Video() : self(*this) { reset(); } explicit operator bool() { return instance->driver() != "None"; } auto reset() -> void { instance = new VideoDriver(*this); } auto create(string driver = "") -> bool; auto driver() -> string { return instance->driver(); } auto ready() -> bool { return instance->ready(); } auto hasFullScreen() -> bool { return instance->hasFullScreen(); } auto hasMonitor() -> bool { return instance->hasMonitor(); } auto hasExclusive() -> bool { return instance->hasExclusive(); } auto hasContext() -> bool { return instance->hasContext(); } auto hasBlocking() -> bool { return instance->hasBlocking(); } auto hasFlush() -> bool { return instance->hasFlush(); } auto hasFormats() -> vector { return instance->hasFormats(); } auto hasShader() -> bool { return instance->hasShader(); } auto hasFormat(string format) -> bool { return instance->hasFormat(format); } auto fullScreen() -> bool { return instance->fullScreen; } auto monitor() -> string { return instance->monitor; } auto exclusive() -> bool { return instance->exclusive; } auto context() -> uintptr { return instance->context; } auto blocking() -> bool { return instance->blocking; } auto flush() -> bool { return instance->flush; } auto format() -> string { return instance->format; } auto shader() -> string { return instance->shader; } auto setMonitor(string monitor) -> bool; auto setFullScreen(bool fullScreen) -> bool; auto setExclusive(bool exclusive) -> bool; auto setContext(uintptr context) -> bool; auto setBlocking(bool blocking) -> bool; auto setFlush(bool flush) -> bool; auto setFormat(string format) -> bool; auto setShader(string shader) -> bool; auto focused() -> bool; auto clear() -> void; struct Size { u32 width = 0; u32 height = 0; }; auto size() -> Size; struct Acquire { explicit operator bool() const { return data; } u32* data = nullptr; u32 pitch = 0; }; auto acquire(u32 width, u32 height) -> Acquire; auto release() -> void; auto output(u32 width = 0, u32 height = 0) -> void; auto poll() -> void; auto onUpdate(const function&) -> void; auto doUpdate(u32 width, u32 height) -> void; auto lock() -> void { mutex.lock(); } auto unlock() -> void { mutex.unlock(); } protected: Video& self; unique_pointer instance; function update; private: std::recursive_mutex mutex; }; ares-126/ruby/video/wgl.cpp000066400000000000000000000145461415063341600157170ustar00rootroot00000000000000#include "opengl/opengl.hpp" #define WGL_CONTEXT_MAJOR_VERSION_ARB 0x2091 #define WGL_CONTEXT_MINOR_VERSION_ARB 0x2092 static LRESULT CALLBACK VideoOpenGL32_WindowProcedure(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { if(msg == WM_SYSKEYDOWN && wparam == VK_F4) return false; return DefWindowProc(hwnd, msg, wparam, lparam); } struct VideoWGL : VideoDriver, OpenGL { VideoWGL& self = *this; VideoWGL(Video& super) : VideoDriver(super) { construct(); } ~VideoWGL() { destruct(); } auto create() -> bool override { return initialize(); } auto driver() -> string override { return "OpenGL 3.2"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasFlush() -> bool override { return true; } auto hasShader() -> bool override { return true; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { acquireContext(); if(wglSwapInterval) wglSwapInterval(blocking); releaseContext(); return true; } auto setFlush(bool flush) -> bool override { return true; } auto setShader(string shader) -> bool override { acquireContext(); OpenGL::setShader(self.shader); releaseContext(); return true; } auto focused() -> bool override { if(self.fullScreen && self.exclusive) return true; auto focused = GetFocus(); return _context == focused || IsChild(_context, focused); } auto clear() -> void override { acquireContext(); OpenGL::clear(); SwapBuffers(_display); releaseContext(); } auto size(u32& width, u32& height) -> void override { if(self.fullScreen) { width = _monitorWidth; height = _monitorHeight; } else { RECT rectangle; GetClientRect(_context, &rectangle); width = rectangle.right - rectangle.left; height = rectangle.bottom - rectangle.top; } } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { acquireContext(); OpenGL::size(width, height); bool result = OpenGL::lock(data, pitch); releaseContext(); return result; } auto release() -> void override { } auto output(u32 width, u32 height) -> void override { acquireContext(); u32 windowWidth, windowHeight; size(windowWidth, windowHeight); OpenGL::absoluteWidth = width; OpenGL::absoluteHeight = height; OpenGL::outputX = 0; OpenGL::outputY = 0; OpenGL::outputWidth = windowWidth; OpenGL::outputHeight = windowHeight; OpenGL::output(); SwapBuffers(_display); if(self.flush) glFinish(); releaseContext(); } private: auto construct() -> void { WNDCLASS windowClass{}; windowClass.cbClsExtra = 0; windowClass.cbWndExtra = 0; windowClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); windowClass.hCursor = LoadCursor(0, IDC_ARROW); windowClass.hIcon = LoadIcon(nullptr, IDI_APPLICATION); windowClass.hInstance = GetModuleHandle(0); windowClass.lpfnWndProc = VideoOpenGL32_WindowProcedure; windowClass.lpszClassName = L"VideoOpenGL32_Window"; windowClass.lpszMenuName = 0; windowClass.style = CS_HREDRAW | CS_VREDRAW; RegisterClass(&windowClass); } auto destruct() -> void { terminate(); } auto acquireContext() -> void { if(!_wglContext) return; while(!wglMakeCurrent(_display, _wglContext)) spinloop(); } auto releaseContext() -> void { if(!_wglContext) return; while(!wglMakeCurrent(_display, nullptr)) spinloop(); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; if(self.fullScreen) { _context = _window = CreateWindowEx(WS_EX_TOPMOST, L"VideoOpenGL32_Window", L"", WS_VISIBLE | WS_POPUP, _monitorX, _monitorY, _monitorWidth, _monitorHeight, nullptr, nullptr, GetModuleHandle(0), nullptr); } else { _context = (HWND)self.context; } PIXELFORMATDESCRIPTOR descriptor{}; descriptor.nSize = sizeof(PIXELFORMATDESCRIPTOR); descriptor.nVersion = 1; descriptor.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; descriptor.iPixelType = PFD_TYPE_RGBA; _display = GetDC(_context); GLuint pixelFormat = ChoosePixelFormat(_display, &descriptor); SetPixelFormat(_display, pixelFormat, &descriptor); _wglContext = wglCreateContext(_display); wglMakeCurrent(_display, _wglContext); wglCreateContextAttribs = (HGLRC (APIENTRY*)(HDC, HGLRC, const int*))glGetProcAddress("wglCreateContextAttribsARB"); wglSwapInterval = (BOOL (APIENTRY*)(int))glGetProcAddress("wglSwapIntervalEXT"); if(wglCreateContextAttribs) { s32 attributeList[] = { WGL_CONTEXT_MAJOR_VERSION_ARB, 3, WGL_CONTEXT_MINOR_VERSION_ARB, 2, 0 }; HGLRC context = wglCreateContextAttribs(_display, 0, attributeList); if(context) { wglMakeCurrent(nullptr, nullptr); wglDeleteContext(_wglContext); wglMakeCurrent(_display, _wglContext = context); } } if(wglSwapInterval) wglSwapInterval(self.blocking); _ready = OpenGL::initialize(self.shader); releaseContext(); return _ready; } auto terminate() -> void { acquireContext(); _ready = false; OpenGL::terminate(); if(_wglContext) { wglDeleteContext(_wglContext); _wglContext = nullptr; } if(_window) { DestroyWindow(_window); _window = nullptr; } _context = nullptr; } auto (APIENTRY* wglCreateContextAttribs)(HDC, HGLRC, const int*) -> HGLRC = nullptr; auto (APIENTRY* wglSwapInterval)(int) -> BOOL = nullptr; bool _ready = false; s32 _monitorX = 0; s32 _monitorY = 0; s32 _monitorWidth = 0; s32 _monitorHeight = 0; HWND _window = nullptr; HWND _context = nullptr; HDC _display = nullptr; HGLRC _wglContext = nullptr; HINSTANCE _glWindow = nullptr; }; ares-126/ruby/video/xshm.cpp000066400000000000000000000210741415063341600160770ustar00rootroot00000000000000//XShm driver for Xorg //Note that on composited displays, the alpha bits will allow translucency underneath the active window //As this is not a feature of ruby, this driver must always set the alpha bits on clear() and refresh() //Linear interpolation is only applied horizontally for performance reasons, although Nearest is still much faster #include #include struct VideoXShm : VideoDriver { VideoXShm& self = *this; VideoXShm(Video& super) : VideoDriver(super) { construct(); } ~VideoXShm() { destruct(); } auto create() -> bool override { VideoDriver::exclusive = true; return initialize(); } auto driver() -> string override { return "XShm"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasShader() -> bool override { return true; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setShader(string shader) -> bool override { return true; } auto focused() -> bool override { return true; } auto clear() -> void override { auto dp = _inputBuffer; u32 length = _inputWidth * _inputHeight; while(length--) *dp++ = 255u << 24; output(); } auto size(u32& width, u32& height) -> void override { if(self.fullScreen) { width = _monitorWidth; height = _monitorHeight; } else { XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); width = parent.width; height = parent.height; } } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { if(!_inputBuffer || _inputWidth != width || _inputHeight != height) { if(_inputBuffer) delete[] _inputBuffer; _inputWidth = width; _inputHeight = height; _inputBuffer = new u32[width * height + 16]; //+16 is padding for linear interpolation } data = _inputBuffer; pitch = _inputWidth * sizeof(u32); return true; } auto release() -> void override { } auto output(u32 width = 0, u32 height = 0) -> void override { XWindowAttributes window; XGetWindowAttributes(_display, _window, &window); XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); if(window.width != parent.width || window.height != parent.height) { _outputWidth = parent.width; _outputHeight = parent.height; XResizeWindow(_display, _window, _outputWidth, _outputHeight); allocate(); } u32 viewportX = 0; u32 viewportY = 0; u32 viewportWidth = parent.width; u32 viewportHeight = parent.height; if(self.fullScreen) { viewportX = _monitorX; viewportY = _monitorY; viewportWidth = _monitorWidth; viewportHeight = _monitorHeight; } if(!_image || !_inputBuffer || !_outputBuffer) return; if(!width) width = viewportWidth; if(!height) height = viewportHeight; f32 xratio = (f32)_inputWidth / (f32)width; f32 yratio = (f32)_inputHeight / (f32)height; s32 x = ((s32)viewportWidth - (s32)width) / 2; s32 y = ((s32)viewportHeight - (s32)height) / 2; width = min(width, viewportWidth); height = min(height, viewportHeight); auto inputBuffer = _inputBuffer; auto outputBuffer = _outputBuffer; if(x < 0) { inputBuffer += abs(x); x = 0; } if(y < 0) { inputBuffer += abs(y) * _inputWidth; y = 0; } x += viewportX; y += viewportY; #pragma omp parallel for for(u32 y = 0; y < height; y++) { f32 ystep = y * yratio; f32 xstep = 0; u32* sp = inputBuffer + (u32)ystep * _inputWidth; u32* dp = outputBuffer + y * _outputWidth; if(self.shader != "Blur") { for(u32 x = 0; x < width; x++) { *dp++ = 255u << 24 | sp[(u32)xstep]; xstep += xratio; } } else { for(u32 x = 0; x < width; x++) { *dp++ = 255u << 24 | interpolate(xstep - (u32)xstep, sp[(u32)xstep], sp[(u32)xstep + 1]); xstep += xratio; } } } GC gc = XCreateGC(_display, _window, 0, 0); XShmPutImage(_display, _window, gc, _image, 0, 0, x, y, width, height, False); XFreeGC(_display, gc); XFlush(_display); } auto poll() -> void override { while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); if(event.type == Expose) { XWindowAttributes attributes{}; XGetWindowAttributes(_display, _window, &attributes); super.doUpdate(attributes.width, attributes.height); } } } private: auto construct() -> void { _display = XOpenDisplay(nullptr); _screen = DefaultScreen(_display); XSetErrorHandler(errorHandler); } auto destruct() -> void { terminate(); XCloseDisplay(_display); } auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; _parent = self.fullScreen ? RootWindow(_display, _screen) : (Window)self.context; XWindowAttributes windowAttributes{}; XGetWindowAttributes(_display, _parent, &windowAttributes); //driver only supports 32-bit pixels //note that even on 15-bit and 16-bit displays, the window visual's depth should be 32 if(windowAttributes.depth < 24 || windowAttributes.depth > 32) return free(), false; auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; _depth = windowAttributes.depth; _visual = windowAttributes.visual; _colormap = XCreateColormap(_display, _parent, _visual, AllocNone); XSetWindowAttributes attributes{}; attributes.border_pixel = 0; attributes.colormap = _colormap; attributes.override_redirect = self.fullScreen; _window = XCreateWindow(_display, _parent, 0, 0, windowAttributes.width, windowAttributes.height, 0, _depth, InputOutput, _visual, CWBorderPixel | CWColormap | CWOverrideRedirect, &attributes ); XSelectInput(_display, _window, ExposureMask); XSetWindowBackground(_display, _window, 0); XMapWindow(_display, _window); XFlush(_display); while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); } _outputWidth = windowAttributes.width; _outputHeight = windowAttributes.height; allocate(); return _ready = (bool)_outputBuffer; } auto terminate() -> void { _ready = false; free(); if(_window) { XUnmapWindow(_display, _window); _window = 0; } if(_colormap) { XFreeColormap(_display, _colormap); _colormap = 0; } } auto allocate() -> void { free(); _shmInfo.shmid = shmget(IPC_PRIVATE, _outputWidth * _outputHeight * sizeof(u32), IPC_CREAT | 0777); if(_shmInfo.shmid < 0) return; _shmInfo.shmaddr = (char*)shmat(_shmInfo.shmid, 0, 0); _shmInfo.readOnly = False; XShmAttach(_display, &_shmInfo); _outputBuffer = (u32*)_shmInfo.shmaddr; _image = XShmCreateImage(_display, _visual, _depth, ZPixmap, _shmInfo.shmaddr, &_shmInfo, _outputWidth, _outputHeight); } auto free() -> void { if(_image) { XShmDetach(_display, &_shmInfo); XDestroyImage(_image); shmdt(_shmInfo.shmaddr); shmctl(_shmInfo.shmid, IPC_RMID, 0); _image = nullptr; } _outputBuffer = nullptr; } alwaysinline auto interpolate(f32 mu, u32 a, u32 b) -> u32 { u8 ar = a >> 16, ag = a >> 8, ab = a >> 0; u8 br = b >> 16, bg = b >> 8, bb = b >> 0; u8 cr = ar * (1.0 - mu) + br * mu; u8 cg = ag * (1.0 - mu) + bg * mu; u8 cb = ab * (1.0 - mu) + bb * mu; return cr << 16 | cg << 8 | cb << 0; } static auto errorHandler(Display* display, XErrorEvent* event) -> s32 { //catch occasional BadAccess errors during window resize events //currently, I'm unsure of the cause, but they're certainly not fatal return 0; } bool _ready = false; u32* _inputBuffer = nullptr; u32 _inputWidth = 0; u32 _inputHeight = 0; Display* _display = nullptr; u32 _monitorX = 0; u32 _monitorY = 0; u32 _monitorWidth = 0; u32 _monitorHeight = 0; s32 _screen = 0; s32 _depth = 0; Visual* _visual = nullptr; Window _parent = 0; Window _window = 0; Colormap _colormap = 0; XShmSegmentInfo _shmInfo; XImage* _image = nullptr; u32* _outputBuffer = nullptr; u32 _outputWidth = 0; u32 _outputHeight = 0; }; ares-126/ruby/video/xvideo.cpp000066400000000000000000000436011415063341600164160ustar00rootroot00000000000000#include #include #include #include #include extern "C" auto XvShmCreateImage(Display*, XvPortID, int, char*, int, int, XShmSegmentInfo*) -> XvImage*; struct VideoXVideo : VideoDriver { VideoXVideo& self = *this; VideoXVideo(Video& super) : VideoDriver(super) {} ~VideoXVideo() { terminate(); } auto create() -> bool override { VideoDriver::exclusive = true; VideoDriver::shader = "Blur"; return initialize(); } auto driver() -> string override { return "XVideo"; } auto ready() -> bool override { return _ready; } auto hasFullScreen() -> bool override { return true; } auto hasMonitor() -> bool override { return true; } auto hasContext() -> bool override { return true; } auto hasBlocking() -> bool override { return true; } auto hasFormats() -> vector override { return _formatNames; } auto setFullScreen(bool fullScreen) -> bool override { return initialize(); } auto setMonitor(string monitor) -> bool override { return initialize(); } auto setContext(uintptr context) -> bool override { return initialize(); } auto setBlocking(bool blocking) -> bool override { bool result = false; Display* display = XOpenDisplay(nullptr); Atom atom = XInternAtom(display, "XV_SYNC_TO_VBLANK", true); if(atom != None && _port >= 0) { XvSetPortAttribute(display, _port, atom, self.blocking); result = true; } XCloseDisplay(display); return result; } auto setFormat(string format) -> bool override { return initialize(); } auto focused() -> bool override { return true; } auto clear() -> void override { memory::fill(_buffer, _bufferWidth * _bufferHeight); //clear twice in case video is double buffered ... output(); output(); } auto size(u32& width, u32& height) -> void override { if(self.fullScreen) { width = _monitorWidth; height = _monitorHeight; } else { XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); width = parent.width; height = parent.height; } } auto acquire(u32*& data, u32& pitch, u32 width, u32 height) -> bool override { if(width != _width || height != _height) resize(_width = width, _height = height); pitch = _bufferWidth * 4; return data = _buffer; } auto release() -> void override { } auto output(u32 width = 0, u32 height = 0) -> void override { XWindowAttributes window; XGetWindowAttributes(_display, _window, &window); XWindowAttributes parent; XGetWindowAttributes(_display, _parent, &parent); if(window.width != parent.width || window.height != parent.height) { XResizeWindow(_display, _window, parent.width, parent.height); } u32 viewportX = 0; u32 viewportY = 0; u32 viewportWidth = parent.width; u32 viewportHeight = parent.height; if(self.fullScreen) { viewportX = _monitorX; viewportY = _monitorY; viewportWidth = _monitorWidth; viewportHeight = _monitorHeight; } auto& name = _formatName; if(name == "RGB24" ) renderRGB24 (_width, _height); if(name == "RGB24P") renderRGB24P(_width, _height); if(name == "RGB16" ) renderRGB16 (_width, _height); if(name == "RGB15" ) renderRGB15 (_width, _height); if(name == "UYVY" ) renderUYVY (_width, _height); if(name == "YUY2" ) renderYUY2 (_width, _height); if(name == "YV12" ) renderYV12 (_width, _height); if(name == "I420" ) renderI420 (_width, _height); if(!width) width = viewportWidth; if(!height) height = viewportHeight; s32 x = viewportX + ((s32)viewportWidth - (s32)width) / 2; s32 y = viewportY + ((s32)viewportHeight - (s32)height) / 2; XvShmPutImage(_display, _port, _window, _gc, _image, 0, 0, _width, _height, x, y, width, height, true); } auto poll() -> void override { while(XPending(_display)) { XEvent event; XNextEvent(_display, &event); if(event.type == Expose) { XWindowAttributes attributes; XGetWindowAttributes(_display, _window, &attributes); super.doUpdate(attributes.width, attributes.height); } } } private: auto initialize() -> bool { terminate(); if(!self.fullScreen && !self.context) return false; _display = XOpenDisplay(nullptr); _screen = DefaultScreen(_display); if(!XShmQueryExtension(_display)) { print("XVideo: XShm extension not found.\n"); return false; } //find an appropriate Xv port _port = -1; s32 depth = 0; s32 visualID = 0; XvAdaptorInfo* adaptorInfo = nullptr; u32 adaptorCount = 0; XvQueryAdaptors(_display, DefaultRootWindow(_display), &adaptorCount, &adaptorInfo); for(u32 n : range(adaptorCount)) { //find adaptor that supports both input (memory->drawable) and image (drawable->screen) masks if(adaptorInfo[n].num_formats < 1) continue; if(!(adaptorInfo[n].type & XvInputMask)) continue; if(!(adaptorInfo[n].type & XvImageMask)) continue; _port = adaptorInfo[n].base_id; depth = adaptorInfo[n].formats->depth; visualID = adaptorInfo[n].formats->visual_id; break; } XvFreeAdaptorInfo(adaptorInfo); if(_port < 0) { print("XVideo: failed to find valid XvPort.\n"); return false; } XVisualInfo visualTemplate; visualTemplate.visualid = visualID; visualTemplate.screen = _screen; visualTemplate.depth = depth; visualTemplate.visual = 0; s32 visualMatches = 0; auto visualInfo = XGetVisualInfo(_display, VisualIDMask | VisualScreenMask | VisualDepthMask, &visualTemplate, &visualMatches); if(visualMatches < 1 || !visualInfo->visual) { if(visualInfo) XFree(visualInfo); print("XVideo: unable to find Xv-compatible visual.\n"); return false; } _parent = self.fullScreen ? RootWindow(_display, _screen) : (Window)self.context; //create child window to attach to parent window. //this is so that even if parent window visual depth doesn't match Xv visual //(common with composited windows), Xv can still render to child window. XWindowAttributes windowAttributes{}; XGetWindowAttributes(_display, _parent, &windowAttributes); auto monitor = Video::monitor(self.monitor); _monitorX = monitor.x; _monitorY = monitor.y; _monitorWidth = monitor.width; _monitorHeight = monitor.height; _colormap = XCreateColormap(_display, _parent, visualInfo->visual, AllocNone); XSetWindowAttributes attributes{}; attributes.border_pixel = 0; attributes.colormap = _colormap; attributes.override_redirect = self.fullScreen; _window = XCreateWindow(_display, _parent, 0, 0, windowAttributes.width, windowAttributes.height, 0, depth, InputOutput, visualInfo->visual, CWBorderPixel | CWColormap | CWOverrideRedirect, &attributes); XSelectInput(_display, _window, ExposureMask); XFree(visualInfo); XSetWindowBackground(_display, _window, 0); XMapWindow(_display, _window); _gc = XCreateGC(_display, _window, 0, 0); s32 attributeCount = 0; auto attributeList = XvQueryPortAttributes(_display, _port, &attributeCount); for(auto n : range(attributeCount)) { if(string{attributeList[n].name} == "XV_AUTOPAINT_COLORKEY") { //set colorkey to auto paint, so that Xv video output is always visible Atom atom = XInternAtom(_display, "XV_AUTOPAINT_COLORKEY", true); if(atom != None) XvSetPortAttribute(_display, _port, atom, 1); } } XFree(attributeList); queryAvailableFormats(); if(!_formatNames) { print("XVideo: unable to find a supported image format.\n"); return false; } if(auto match = _formatNames.find(self.format)) { _formatID = _formatIDs[match()]; _formatName = _formatNames[match()]; } else { _formatID = _formatIDs[0]; _formatName = _formatNames[0]; self.format = _formatName; } _ready = true; initializeTables(); resize(_width = 256, _height = 256); clear(); return true; } auto terminate() -> void { _ready = false; if(_image) { XShmDetach(_display, &_shmInfo); shmdt(_shmInfo.shmaddr); shmctl(_shmInfo.shmid, IPC_RMID, nullptr); XFree(_image); _image = nullptr; } if(_gc) { XFreeGC(_display, _gc); _gc = 0; } if(_window) { XUnmapWindow(_display, _window); _window = 0; } if(_colormap) { XFreeColormap(_display, _colormap); _colormap = 0; } if(_display) { XCloseDisplay(_display); _display = nullptr; } delete[] _buffer, _buffer = nullptr, _bufferWidth = 0, _bufferHeight = 0; delete[] _ytable, _ytable = nullptr; delete[] _utable, _utable = nullptr; delete[] _vtable, _vtable = nullptr; } auto queryAvailableFormats() -> void { auto& ids = _formatIDs; auto& names = _formatNames; ids.reset(); names.reset(); s32 count = 0; auto array = XvListImageFormats(_display, _port, &count); for(u32 sort : range(8)) { for(u32 n : range(count)) { auto id = array[n].id; auto type = array[n].type; auto format = array[n].format; auto depth = array[n].bits_per_pixel; auto redMask = array[n].red_mask; auto order = array[n].component_order; string components; for(u32 n : range(4)) if(char c = order[n]) components.append(c); if(type == XvRGB) { if(sort == 0 && depth == 32) ids.append(id), names.append("RGB24"); if(sort == 1 && depth == 24) ids.append(id), names.append("RGB24P"); if(sort == 2 && depth <= 16 && redMask == 0xf800) ids.append(id), names.append("RGB16"); if(sort == 3 && depth <= 16 && redMask == 0x7c00) ids.append(id), names.append("RGB15"); } if(type == XvYUV && format == XvPacked) { if(sort == 4 && depth == 16 && components == "UYVY") ids.append(id), names.append("UYVY"); if(sort == 5 && depth == 16 && components == "YUYV") ids.append(id), names.append("YUY2"); } if(type == XvYUV && format == XvPlanar) { if(sort == 6 && depth == 12 && components == "YVU" ) ids.append(id), names.append("YV12"); if(sort == 7 && depth == 12 && components == "YUV" ) ids.append(id), names.append("I420"); } } } free(array); } auto resize(u32 width, u32 height) -> void { if(_bufferWidth >= width && _bufferHeight >= height) return; _bufferWidth = max(width, _bufferWidth); _bufferHeight = max(height, _bufferHeight); //must round to be evenly divisible by 4 if(u32 round = _bufferWidth & 3) _bufferWidth += 4 - round; if(u32 round = _bufferHeight & 3) _bufferHeight += 4 - round; _bufferWidth = bit::round(_bufferWidth); _bufferHeight = bit::round(_bufferHeight); if(_image) { XShmDetach(_display, &_shmInfo); shmdt(_shmInfo.shmaddr); shmctl(_shmInfo.shmid, IPC_RMID, nullptr); XFree(_image); } _image = XvShmCreateImage(_display, _port, _formatID, 0, _bufferWidth, _bufferHeight, &_shmInfo); _shmInfo.shmid = shmget(IPC_PRIVATE, _image->data_size, IPC_CREAT | 0777); _shmInfo.shmaddr = _image->data = (char*)shmat(_shmInfo.shmid, 0, 0); _shmInfo.readOnly = false; XShmAttach(_display, &_shmInfo); delete[] _buffer; _buffer = new u32[_bufferWidth * _bufferHeight]; } auto renderRGB24(u32 width, u32 height) -> void { for(u32 y : range(height)) { auto input = (const u32*)_buffer + y * width; auto output = (u32*)_image->data + y * (_image->pitches[0] >> 2); for(u32 x : range(width)) { u32 p = *input++; *output++ = p; } } } auto renderRGB24P(u32 width, u32 height) -> void { for(u32 y : range(height)) { auto input = (const u32*)_buffer + y * width; auto output = (u8*)_image->data + y * _image->pitches[0]; for(u32 x : range(width)) { u32 p = *input++; *output++ = p >> 0; *output++ = p >> 8; *output++ = p >> 16; } } } auto renderRGB16(u32 width, u32 height) -> void { for(u32 y : range(height)) { auto input = (const u32*)_buffer + y * width; auto output = (u16*)_image->data + y * (_image->pitches[0] >> 1); for(u32 x : range(width)) { u32 p = toRGB16(*input++); *output++ = p; } input += _bufferWidth - width; output += _bufferWidth - width; } } auto renderRGB15(u32 width, u32 height) -> void { for(u32 y : range(height)) { auto input = (const u32*)_buffer + y * width; auto output = (u16*)_image->data + y * (_image->pitches[0] >> 1); for(u32 x : range(width)) { u32 p = toRGB15(*input++); *output++ = p; } } } auto renderUYVY(u32 width, u32 height) -> void { for(u32 y : range(height)) { auto input = (const u32*)_buffer + y * width; auto output = (u16*)_image->data + y * (_image->pitches[0] >> 1); for(u32 x : range(width >> 1)) { u32 p0 = toRGB16(*input++); u32 p1 = toRGB16(*input++); *output++ = _ytable[p0] << 8 | ((_utable[p0] + _utable[p1]) >> 1) << 0; *output++ = _ytable[p1] << 8 | ((_vtable[p0] + _vtable[p1]) >> 1) << 0; } } } auto renderYUY2(u32 width, u32 height) -> void { for(u32 y : range(height)) { auto input = (const u32*)_buffer + y * width; auto output = (u16*)_image->data + y * (_image->pitches[0] >> 1); for(u32 x : range(width >> 1)) { u32 p0 = toRGB16(*input++); u32 p1 = toRGB16(*input++); *output++ = ((_utable[p0] + _utable[p1]) >> 1) << 8 | _ytable[p0] << 0; *output++ = ((_vtable[p0] + _vtable[p1]) >> 1) << 8 | _ytable[p1] << 0; } } } auto renderYV12(u32 width, u32 height) -> void { for(u32 y : range(height >> 1)) { auto input0 = (const u32*)_buffer + (2 * y + 0) * width; auto input1 = (const u32*)_buffer + (2 * y + 1) * width; auto youtput0 = (u16*)_image->data + (_image->offsets[0] >> 1) + (2 * y + 0) * (_image->pitches[0] >> 1); auto youtput1 = (u16*)_image->data + (_image->offsets[0] >> 1) + (2 * y + 1) * (_image->pitches[0] >> 1); auto voutput = (u8*)_image->data + _image->offsets[1] + y * _image->pitches[1]; auto uoutput = (u8*)_image->data + _image->offsets[2] + y * _image->pitches[2]; for(u32 x : range(width >> 1)) { u16 p0 = toRGB16(*input0++); u16 p1 = toRGB16(*input0++); u16 p2 = toRGB16(*input1++); u16 p3 = toRGB16(*input1++); *youtput0++ = _ytable[p0] << 0 | _ytable[p1] << 8; *youtput1++ = _ytable[p2] << 0 | _ytable[p3] << 8; *voutput++ = (_vtable[p0] + _vtable[p1] + _vtable[p2] + _vtable[p3]) >> 2; *uoutput++ = (_utable[p0] + _utable[p1] + _utable[p2] + _utable[p3]) >> 2; } } } auto renderI420(u32 width, u32 height) -> void { for(u32 y : range(height >> 1)) { auto input0 = (const u32*)_buffer + (2 * y + 0) * width; auto input1 = (const u32*)_buffer + (2 * y + 1) * width; auto youtput0 = (u16*)_image->data + (_image->offsets[0] >> 1) + (2 * y + 0) * (_image->pitches[0] >> 1); auto youtput1 = (u16*)_image->data + (_image->offsets[0] >> 1) + (2 * y + 1) * (_image->pitches[0] >> 1); auto uoutput = (u8*)_image->data + _image->offsets[1] + y * _image->pitches[1]; auto voutput = (u8*)_image->data + _image->offsets[2] + y * _image->pitches[2]; for(u32 x : range(width >> 1)) { u16 p0 = toRGB16(*input0++); u16 p1 = toRGB16(*input0++); u16 p2 = toRGB16(*input1++); u16 p3 = toRGB16(*input1++); *youtput0++ = _ytable[p0] << 0 | _ytable[p1] << 8; *youtput1++ = _ytable[p2] << 0 | _ytable[p3] << 8; *uoutput++ = (_utable[p0] + _utable[p1] + _utable[p2] + _utable[p3]) >> 2; *voutput++ = (_vtable[p0] + _vtable[p1] + _vtable[p2] + _vtable[p3]) >> 2; } } } inline auto toRGB15(u32 rgb32) const -> u16 { return ((rgb32 >> 9) & 0x7c00) + ((rgb32 >> 6) & 0x03e0) + ((rgb32 >> 3) & 0x001f); } inline auto toRGB16(u32 rgb32) const -> u16 { return ((rgb32 >> 8) & 0xf800) + ((rgb32 >> 5) & 0x07e0) + ((rgb32 >> 3) & 0x001f); } auto initializeTables() -> void { _ytable = new u8[65536]; _utable = new u8[65536]; _vtable = new u8[65536]; for(u32 n : range(65536)) { //extract RGB565 color data from i u8 r = (n >> 11) & 31, g = (n >> 5) & 63, b = (n) & 31; r = (r << 3) | (r >> 2); //R5->R8 g = (g << 2) | (g >> 4); //G6->G8 b = (b << 3) | (b >> 2); //B5->B8 //ITU-R Recommendation BT.601 //double lr = 0.299, lg = 0.587, lb = 0.114; s32 y = s32( +(f64(r) * 0.257) + (f64(g) * 0.504) + (f64(b) * 0.098) + 16.0 ); s32 u = s32( -(f64(r) * 0.148) - (f64(g) * 0.291) + (f64(b) * 0.439) + 128.0 ); s32 v = s32( +(f64(r) * 0.439) - (f64(g) * 0.368) - (f64(b) * 0.071) + 128.0 ); //ITU-R Recommendation BT.709 //f64 lr = 0.2126, lg = 0.7152, lb = 0.0722; //s32 y = s32( f64(r) * lr + f64(g) * lg + f64(b) * lb ); //s32 u = s32( (f64(b) - y) / (2.0 - 2.0 * lb) + 128.0 ); //s32 v = s32( (f64(r) - y) / (2.0 - 2.0 * lr) + 128.0 ); _ytable[n] = y < 0 ? 0 : y > 255 ? 255 : y; _utable[n] = u < 0 ? 0 : u > 255 ? 255 : u; _vtable[n] = v < 0 ? 0 : v > 255 ? 255 : v; } } bool _ready = false; u32 _width = 0; u32 _height = 0; u32* _buffer = nullptr; u32 _bufferWidth = 0; u32 _bufferHeight = 0; u8* _ytable = nullptr; u8* _utable = nullptr; u8* _vtable = nullptr; Display* _display = nullptr; u32 _monitorX = 0; u32 _monitorY = 0; u32 _monitorWidth = 0; u32 _monitorHeight = 0; u32 _screen = 0; GC _gc = 0; Window _parent = 0; Window _window = 0; Colormap _colormap = 0; XShmSegmentInfo _shmInfo; s32 _port = -1; XvImage* _image = nullptr; vector _formatIDs; vector _formatNames; s32 _formatID = 0; string _formatName; }; ares-126/sourcery/000077500000000000000000000000001415063341600141745ustar00rootroot00000000000000ares-126/sourcery/GNUmakefile000066400000000000000000000006621415063341600162520ustar00rootroot00000000000000name := sourcery build := stable flags += -I.. nall.path := ../nall include $(nall.path)/GNUmakefile objects := obj/sourcery.o obj/sourcery.o: sourcery.cpp all: $(objects) $(info Linking out/$(name) ...) +@$(compiler) -o out/$(name) $(objects) $(options) verbose: nall.verbose all; clean: $(call delete,obj/*) $(call delete,out/*) install: all cp out/$(name) $(prefix)/bin/$(name) uninstall: rm -f $(prefix)/bin/$(name) ares-126/sourcery/obj/000077500000000000000000000000001415063341600147465ustar00rootroot00000000000000ares-126/sourcery/obj/.gitignore000066400000000000000000000000161415063341600167330ustar00rootroot00000000000000* !.gitignore ares-126/sourcery/out/000077500000000000000000000000001415063341600150035ustar00rootroot00000000000000ares-126/sourcery/out/.gitignore000066400000000000000000000000161415063341600167700ustar00rootroot00000000000000* !.gitignore ares-126/sourcery/sourcery.cpp000066400000000000000000000046231415063341600165600ustar00rootroot00000000000000#include using namespace nall; struct Sourcery { auto main(Arguments arguments) -> void; auto parse(Markup::Node&) -> void; private: string pathname; file_buffer source; file_buffer header; }; auto Sourcery::main(Arguments arguments) -> void { if(arguments.size() != 3) return print("usage: sourcery resource.bml resource.cpp resource.hpp\n"); string markupName = arguments.take(); string sourceName = arguments.take(); string headerName = arguments.take(); if(!markupName.endsWith(".bml")) return print("error: arguments in incorrect order\n"); if(!sourceName.endsWith(".cpp")) return print("error: arguments in incorrect order\n"); if(!headerName.endsWith(".hpp")) return print("error: arguments in incorrect order\n"); string markup = string::read(markupName); if(!markup) return print("error: unable to read resource manifest\n"); pathname = Location::path(markupName); if(!source.open(sourceName, file::mode::write)) return print("error: unable to write source file\n"); if(!header.open(headerName, file::mode::write)) return print("error: unable to write header file\n"); source.print("#include \"", headerName, "\"\n"); source.print("\n"); auto document = BML::unserialize(markup); parse(document); } auto Sourcery::parse(Markup::Node& root) -> void { for(auto node : root) { if(node.name() == "namespace") { header.print("namespace ", node["name"].text(), " {\n"); source.print("namespace ", node["name"].text(), " {\n"); parse(node); header.print("}\n"); source.print("}\n"); } else if(node.name() == "binary") { string filename{pathname, node["file"].text()}; if(!file::exists(filename)) { print("warning: binary file ", node["file"].text(), " not found\n"); continue; } auto buffer = file::read(filename); header.print("extern const unsigned char ", node["name"].text(), "[", buffer.size(), "];\n"); source.print("const unsigned char ", node["name"].text(), "[", buffer.size(), "] = {\n"); buffer.foreach([&](uint offset, int data) { if((offset & 31) == 0) source.print(" "); source.print(data, ","); if((offset & 31) == 31) source.print("\n"); }); if(buffer.size() & 31) source.print("\n"); source.print("};\n"); } } } #include auto nall::main(Arguments arguments) -> void { Sourcery().main(arguments); } ares-126/update-subtrees.sh000077500000000000000000000012261415063341600157750ustar00rootroot00000000000000#!/bin/sh # # Because git subtree doesn't provide an easy way to automatically merge changes # from upstream, this shell script will do the job instead. # If you don't have a POSIX-compatible shell on your system, feel free to use # this as a reference for what commands to run, rather than running it directly. # Change to the directory containing this script, or exit with failure # to prevent git subtree scrawling over some other repo. cd "$(dirname "$0")" || exit 1 # Merge changes from the upstream parallel-rdp repository. git subtree pull --prefix=ares/n64/vulkan/parallel-rdp https://github.com/Themaister/parallel-rdp-standalone.git master --squash